diff --git a/ghost/bnet.cpp b/ghost/bnet.cpp index bfb65112..714fc606 100644 --- a/ghost/bnet.cpp +++ b/ghost/bnet.cpp @@ -2200,6 +2200,8 @@ void CBNET :: QueueGameRefresh( unsigned char state, string gameName, string hos { uint32_t MapGameType = map->GetMapGameType( ); MapGameType |= MAPGAMETYPE_UNKNOWN0; + //Apply overwrite if not equal to 0 + MapGameType = ( m_GHost->m_MapGameType != 0 ) ? MapGameType : m_GHost->m_MapGameType; if( state == GAME_PRIVATE ) MapGameType |= MAPGAMETYPE_PRIVATEGAME; diff --git a/ghost/config.cpp b/ghost/config.cpp index 2a1276c8..86a3d694 100644 --- a/ghost/config.cpp +++ b/ghost/config.cpp @@ -94,6 +94,14 @@ int CConfig :: GetInt( string key, int x ) return atoi( m_CFG[key].c_str( ) ); } +uint32_t CConfig :: GetUInt( string key, uint32_t x ) +{ + if( m_CFG.find( key ) == m_CFG.end( ) ) + return x; + else + return strtoul( m_CFG[key].c_str( ), NULL, 0 ); +} + string CConfig :: GetString( string key, string x ) { if( m_CFG.find( key ) == m_CFG.end( ) ) diff --git a/ghost/config.h b/ghost/config.h index ccd3b7f2..bc1a3d0e 100644 --- a/ghost/config.h +++ b/ghost/config.h @@ -37,6 +37,7 @@ class CConfig void Read( string file ); bool Exists( string key ); int GetInt( string key, int x ); + uint32_t GetUInt( string key, uint32_t x ); string GetString( string key, string x ); void Set( string key, string x ); }; diff --git a/ghost/ghost.cpp b/ghost/ghost.cpp index d659a033..4b18e789 100644 --- a/ghost/ghost.cpp +++ b/ghost/ghost.cpp @@ -107,6 +107,7 @@ string gLogFile; uint32_t gLogMethod; ofstream *gLog = NULL; CGHost *gGHost = NULL; +boost::mutex PrintMutex; uint32_t GetTime( ) { @@ -170,6 +171,7 @@ void SignalCatcher( int s ) void CONSOLE_Print( string message ) { + boost::mutex::scoped_lock printLock( PrintMutex ); cout << message << endl; // logging @@ -208,6 +210,8 @@ void CONSOLE_Print( string message ) } } } + + printLock.unlock( ); } void DEBUG_Print( string message ) @@ -486,7 +490,7 @@ CGHost :: CGHost( CConfig *CFG ) m_Exiting = false; m_ExitingNice = false; m_Enabled = true; - m_Version = "17.1"; + m_Version = "17.2"; m_HostCounter = 1; m_AutoHostMaximumGames = CFG->GetInt( "autohost_maxgames", 0 ); m_AutoHostAutoStartPlayers = CFG->GetInt( "autohost_startplayers", 0 ); @@ -1326,6 +1330,7 @@ void CGHost :: SetConfigs( CConfig *CFG ) m_LocalAdminMessages = CFG->GetInt( "bot_localadminmessages", 1 ) == 0 ? false : true; m_TCPNoDelay = CFG->GetInt( "tcp_nodelay", 0 ) == 0 ? false : true; m_MatchMakingMethod = CFG->GetInt( "bot_matchmakingmethod", 1 ); + m_MapGameType = CFG->GetUInt( "bot_mapgametype", 0 ); } void CGHost :: ExtractScripts( ) diff --git a/ghost/ghost.h b/ghost/ghost.h index 89dc89fb..9adad8dc 100644 --- a/ghost/ghost.h +++ b/ghost/ghost.h @@ -144,6 +144,7 @@ class CGHost uint32_t m_ReplayBuildNumber; // config value: replay build number (for saving replays) bool m_TCPNoDelay; // config value: use Nagle's algorithm or not uint32_t m_MatchMakingMethod; // config value: the matchmaking method + uint32_t m_MapGameType; // config value: the MapGameType overwrite (aka: refresh hack) vector m_PendingReconnects; boost::mutex m_ReconnectMutex; diff --git a/ghost/sqlite3.c b/ghost/sqlite3.c index fe2775d2..f69816e2 100644 --- a/ghost/sqlite3.c +++ b/ghost/sqlite3.c @@ -1,23 +1,21 @@ /****************************************************************************** ** This file is an amalgamation of many separate C source files from SQLite -** version 3.6.16. By combining all the individual C code files into this -** single large file, the entire code can be compiled as a one translation +** version 3.7.13. By combining all the individual C code files into this +** single large file, the entire code can be compiled as a single translation ** unit. This allows many compilers to do optimizations that would not be ** possible if the files were compiled separately. Performance improvements -** of 5% are more are commonly seen when SQLite is compiled as a single +** of 5% or more are commonly seen when SQLite is compiled as a single ** translation unit. ** ** This file is all you need to compile SQLite. To use SQLite in other ** programs, you need this file and the "sqlite3.h" header file that defines ** the programming interface to the SQLite library. (If you do not have -** the "sqlite3.h" header file at hand, you will find a copy in the first -** 5626 lines past this header comment.) Additional code files may be -** needed if you want a wrapper to interface SQLite with your choice of -** programming language. The code for the "sqlite3" command-line shell -** is also in a separate file. This file contains only code for the core -** SQLite library. -** -** This amalgamation was generated on 2009-06-27 14:10:06 UTC. +** the "sqlite3.h" header file at hand, you will find a copy embedded within +** the text of this file. Search for "Begin file sqlite3.h" to find the start +** of the embedded sqlite3.h header file.) Additional code files may be needed +** if you want a wrapper to interface SQLite with your choice of programming +** language. The code for the "sqlite3" command-line shell is also in a +** separate file. This file contains only code for the core SQLite library. */ #define SQLITE_CORE 1 #define SQLITE_AMALGAMATION 1 @@ -41,11 +39,37 @@ ************************************************************************* ** Internal interface definitions for SQLite. ** -** @(#) $Id: sqliteInt.h,v 1.890 2009/06/26 15:14:55 drh Exp $ */ #ifndef _SQLITEINT_H_ #define _SQLITEINT_H_ +/* +** These #defines should enable >2GB file support on POSIX if the +** underlying operating system supports it. If the OS lacks +** large file support, or if the OS is windows, these should be no-ops. +** +** Ticket #2739: The _LARGEFILE_SOURCE macro must appear before any +** system #includes. Hence, this block of code must be the very first +** code in all source files. +** +** Large file support can be disabled using the -DSQLITE_DISABLE_LFS switch +** on the compiler command line. This is necessary if you are compiling +** on a recent machine (ex: Red Hat 7.2) but you want your code to work +** on an older machine (ex: Red Hat 6.0). If you compile on Red Hat 7.2 +** without this option, LFS is enable. But LFS does not exist in the kernel +** in Red Hat 6.0, so the code won't work. Hence, for maximum binary +** portability you should omit LFS. +** +** Similar is true for Mac OS X. LFS is only supported on Mac OS X 9 and later. +*/ +#ifndef SQLITE_DISABLE_LFS +# define _LARGE_FILE 1 +# ifndef _FILE_OFFSET_BITS +# define _FILE_OFFSET_BITS 64 +# endif +# define _LARGEFILE_SOURCE 1 +#endif + /* ** Include the configuration header output by 'configure' if we're using the ** autoconf-based build @@ -69,8 +93,6 @@ ************************************************************************* ** ** This file defines various limits of what SQLite can process. -** -** @(#) $Id: sqliteLimit.h,v 1.10 2009/01/10 16:15:09 danielk1977 Exp $ */ /* @@ -168,9 +190,17 @@ # define SQLITE_DEFAULT_TEMP_CACHE_SIZE 500 #endif +/* +** The default number of frames to accumulate in the log file before +** checkpointing the database in WAL mode. +*/ +#ifndef SQLITE_DEFAULT_WAL_AUTOCHECKPOINT +# define SQLITE_DEFAULT_WAL_AUTOCHECKPOINT 1000 +#endif + /* ** The maximum number of attached databases. This must be between 0 -** and 30. The upper bound on 30 is because a 32-bit integer bitmap +** and 62. The upper bound on 62 is because a 64-bit integer bitmap ** is used internally to track attached databases. */ #ifndef SQLITE_MAX_ATTACHED @@ -185,20 +215,21 @@ # define SQLITE_MAX_VARIABLE_NUMBER 999 #endif -/* Maximum page size. The upper bound on this value is 32768. This a limit -** imposed by the necessity of storing the value in a 2-byte unsigned integer -** and the fact that the page size must be a power of 2. +/* Maximum page size. The upper bound on this value is 65536. This a limit +** imposed by the use of 16-bit offsets within each page. ** -** If this limit is changed, then the compiled library is technically -** incompatible with an SQLite library compiled with a different limit. If -** a process operating on a database with a page-size of 65536 bytes -** crashes, then an instance of SQLite compiled with the default page-size -** limit will not be able to rollback the aborted transaction. This could -** lead to database corruption. +** Earlier versions of SQLite allowed the user to change this value at +** compile time. This is no longer permitted, on the grounds that it creates +** a library that is technically incompatible with an SQLite library +** compiled with a different limit. If a process operating on a database +** with a page-size of 65536 bytes crashes, then an instance of SQLite +** compiled with the default page-size limit will not be able to rollback +** the aborted transaction. This could lead to database corruption. */ -#ifndef SQLITE_MAX_PAGE_SIZE -# define SQLITE_MAX_PAGE_SIZE 32768 +#ifdef SQLITE_MAX_PAGE_SIZE +# undef SQLITE_MAX_PAGE_SIZE #endif +#define SQLITE_MAX_PAGE_SIZE 65536 /* @@ -247,6 +278,17 @@ # define SQLITE_MAX_LIKE_PATTERN_LENGTH 50000 #endif +/* +** Maximum depth of recursion for triggers. +** +** A value of 1 means that a trigger program will not be able to itself +** fire any triggers. A value of 0 means that no trigger programs at all +** may be executed. +*/ +#ifndef SQLITE_MAX_TRIGGER_DEPTH +# define SQLITE_MAX_TRIGGER_DEPTH 1000 +#endif + /************** End of sqliteLimit.h *****************************************/ /************** Continuing where we left off in sqliteInt.h ******************/ @@ -275,78 +317,62 @@ #endif /* -** This macro is used to "hide" some ugliness in casting an int -** value to a ptr value under the MSVC 64-bit compiler. Casting -** non 64-bit values to ptr types results in a "hard" error with -** the MSVC 64-bit compiler which this attempts to avoid. -** -** A simple compiler pragma or casting sequence could not be found -** to correct this in all situations, so this macro was introduced. +** The following macros are used to cast pointers to integers and +** integers to pointers. The way you do this varies from one compiler +** to the next, so we have developed the following set of #if statements +** to generate appropriate macros for a wide range of compilers. ** -** It could be argued that the intptr_t type could be used in this -** case, but that type is not available on all compilers, or -** requires the #include of specific headers which differs between -** platforms. +** The correct "ANSI" way to do this is to use the intptr_t type. +** Unfortunately, that typedef is not available on all compilers, or +** if it is available, it requires an #include of specific headers +** that vary from one machine to the next. ** ** Ticket #3860: The llvm-gcc-4.2 compiler from Apple chokes on ** the ((void*)&((char*)0)[X]) construct. But MSVC chokes on ((void*)(X)). ** So we have to define the macros in different ways depending on the ** compiler. */ -#if defined(__GNUC__) -# if defined(HAVE_STDINT_H) -# define SQLITE_INT_TO_PTR(X) ((void*)(intptr_t)(X)) -# define SQLITE_PTR_TO_INT(X) ((int)(intptr_t)(X)) -# else -# define SQLITE_INT_TO_PTR(X) ((void*)(X)) -# define SQLITE_PTR_TO_INT(X) ((int)(X)) -# endif -#else -# define SQLITE_INT_TO_PTR(X) ((void*)&((char*)0)[X]) -# define SQLITE_PTR_TO_INT(X) ((int)(((char*)X)-(char*)0)) +#if defined(__PTRDIFF_TYPE__) /* This case should work for GCC */ +# define SQLITE_INT_TO_PTR(X) ((void*)(__PTRDIFF_TYPE__)(X)) +# define SQLITE_PTR_TO_INT(X) ((int)(__PTRDIFF_TYPE__)(X)) +#elif !defined(__GNUC__) /* Works for compilers other than LLVM */ +# define SQLITE_INT_TO_PTR(X) ((void*)&((char*)0)[X]) +# define SQLITE_PTR_TO_INT(X) ((int)(((char*)X)-(char*)0)) +#elif defined(HAVE_STDINT_H) /* Use this case if we have ANSI headers */ +# define SQLITE_INT_TO_PTR(X) ((void*)(intptr_t)(X)) +# define SQLITE_PTR_TO_INT(X) ((int)(intptr_t)(X)) +#else /* Generates a warning - but it always works */ +# define SQLITE_INT_TO_PTR(X) ((void*)(X)) +# define SQLITE_PTR_TO_INT(X) ((int)(X)) #endif /* -** These #defines should enable >2GB file support on POSIX if the -** underlying operating system supports it. If the OS lacks -** large file support, or if the OS is windows, these should be no-ops. -** -** Ticket #2739: The _LARGEFILE_SOURCE macro must appear before any -** system #includes. Hence, this block of code must be the very first -** code in all source files. +** The SQLITE_THREADSAFE macro must be defined as 0, 1, or 2. +** 0 means mutexes are permanently disable and the library is never +** threadsafe. 1 means the library is serialized which is the highest +** level of threadsafety. 2 means the libary is multithreaded - multiple +** threads can use SQLite as long as no two threads try to use the same +** database connection at the same time. ** -** Large file support can be disabled using the -DSQLITE_DISABLE_LFS switch -** on the compiler command line. This is necessary if you are compiling -** on a recent machine (ex: Red Hat 7.2) but you want your code to work -** on an older machine (ex: Red Hat 6.0). If you compile on Red Hat 7.2 -** without this option, LFS is enable. But LFS does not exist in the kernel -** in Red Hat 6.0, so the code won't work. Hence, for maximum binary -** portability you should omit LFS. -** -** Similar is true for Mac OS X. LFS is only supported on Mac OS X 9 and later. -*/ -#ifndef SQLITE_DISABLE_LFS -# define _LARGE_FILE 1 -# ifndef _FILE_OFFSET_BITS -# define _FILE_OFFSET_BITS 64 -# endif -# define _LARGEFILE_SOURCE 1 -#endif - - -/* -** The SQLITE_THREADSAFE macro must be defined as either 0 or 1. ** Older versions of SQLite used an optional THREADSAFE macro. -** We support that for legacy +** We support that for legacy. */ #if !defined(SQLITE_THREADSAFE) #if defined(THREADSAFE) # define SQLITE_THREADSAFE THREADSAFE #else -# define SQLITE_THREADSAFE 1 +# define SQLITE_THREADSAFE 1 /* IMP: R-07272-22309 */ #endif #endif +/* +** Powersafe overwrite is on by default. But can be turned off using +** the -DSQLITE_POWERSAFE_OVERWRITE=0 command-line option. +*/ +#ifndef SQLITE_POWERSAFE_OVERWRITE +# define SQLITE_POWERSAFE_OVERWRITE 1 +#endif + /* ** The SQLITE_DEFAULT_MEMSTATUS macro must be defined as either 0 or 1. ** It determines whether or not the features related to @@ -362,24 +388,25 @@ ** specify which memory allocation subsystem to use. ** ** SQLITE_SYSTEM_MALLOC // Use normal system malloc() +** SQLITE_WIN32_MALLOC // Use Win32 native heap API ** SQLITE_MEMDEBUG // Debugging version of system malloc() -** SQLITE_MEMORY_SIZE // internal allocator #1 -** SQLITE_MMAP_HEAP_SIZE // internal mmap() allocator -** SQLITE_POW2_MEMORY_SIZE // internal power-of-two allocator +** +** On Windows, if the SQLITE_WIN32_MALLOC_VALIDATE macro is defined and the +** assert() macro is enabled, each call into the Win32 native heap subsystem +** will cause HeapValidate to be called. If heap validation should fail, an +** assertion will be triggered. +** +** (Historical note: There used to be several other options, but we've +** pared it down to just these three.) ** ** If none of the above are defined, then set SQLITE_SYSTEM_MALLOC as ** the default. */ -#if defined(SQLITE_SYSTEM_MALLOC)+defined(SQLITE_MEMDEBUG)+\ - defined(SQLITE_MEMORY_SIZE)+defined(SQLITE_MMAP_HEAP_SIZE)+\ - defined(SQLITE_POW2_MEMORY_SIZE)>1 +#if defined(SQLITE_SYSTEM_MALLOC)+defined(SQLITE_WIN32_MALLOC)+defined(SQLITE_MEMDEBUG)>1 # error "At most one of the following compile-time configuration options\ - is allows: SQLITE_SYSTEM_MALLOC, SQLITE_MEMDEBUG, SQLITE_MEMORY_SIZE,\ - SQLITE_MMAP_HEAP_SIZE, SQLITE_POW2_MEMORY_SIZE" + is allows: SQLITE_SYSTEM_MALLOC, SQLITE_WIN32_MALLOC, SQLITE_MEMDEBUG" #endif -#if defined(SQLITE_SYSTEM_MALLOC)+defined(SQLITE_MEMDEBUG)+\ - defined(SQLITE_MEMORY_SIZE)+defined(SQLITE_MMAP_HEAP_SIZE)+\ - defined(SQLITE_POW2_MEMORY_SIZE)==0 +#if defined(SQLITE_SYSTEM_MALLOC)+defined(SQLITE_WIN32_MALLOC)+defined(SQLITE_MEMDEBUG)==0 # define SQLITE_SYSTEM_MALLOC 1 #endif @@ -416,15 +443,22 @@ #endif /* -** Many people are failing to set -DNDEBUG=1 when compiling SQLite. -** Setting NDEBUG makes the code smaller and run faster. So the following -** lines are added to automatically set NDEBUG unless the -DSQLITE_DEBUG=1 -** option is set. Thus NDEBUG becomes an opt-in rather than an opt-out +** NDEBUG and SQLITE_DEBUG are opposites. It should always be true that +** defined(NDEBUG)==!defined(SQLITE_DEBUG). If this is not currently true, +** make it true by defining or undefining NDEBUG. +** +** Setting NDEBUG makes the code smaller and run faster by disabling the +** number assert() statements in the code. So we want the default action +** to be for NDEBUG to be set and NDEBUG to be undefined only if SQLITE_DEBUG +** is set. Thus NDEBUG becomes an opt-in rather than an opt-out ** feature. */ #if !defined(NDEBUG) && !defined(SQLITE_DEBUG) # define NDEBUG 1 #endif +#if defined(NDEBUG) && defined(SQLITE_DEBUG) +# undef NDEBUG +#endif /* ** The testcase() macro is used to aid in coverage testing. When @@ -498,6 +532,13 @@ SQLITE_PRIVATE void sqlite3Coverage(int); # define NEVER(X) (X) #endif +/* +** Return true (non-zero) if the input is a integer that is too large +** to fit in 32-bits. This macro is used inside of various testcase() +** macros to verify that we have tested SQLite for large-file support. +*/ +#define IS_BIG_INT(X) (((X)&~(i64)0xffffffff)!=0) + /* ** The macro unlikely() is a hint that surrounds a boolean ** expression that is usually false. Macro likely() surrounds @@ -534,8 +575,8 @@ SQLITE_PRIVATE void sqlite3Coverage(int); ** Some of the definitions that are in this file are marked as ** "experimental". Experimental interfaces are normally new ** features recently added to SQLite. We do not anticipate changes -** to experimental interfaces but reserve to make minor changes if -** experience from use "in the wild" suggest such changes are prudent. +** to experimental interfaces but reserve the right to make minor changes +** if experience from use "in the wild" suggest such changes are prudent. ** ** The official C-language API documentation for SQLite is derived ** from comments in this file. This file is the authoritative source @@ -545,8 +586,6 @@ SQLITE_PRIVATE void sqlite3Coverage(int); ** The makefile makes some minor changes to this file (such as inserting ** the version number) and changes its name to "sqlite3.h" as ** part of the build process. -** -** @(#) $Id: sqlite.h.in,v 1.458 2009/06/19 22:50:31 drh Exp $ */ #ifndef _SQLITE3_H_ #define _SQLITE3_H_ @@ -567,10 +606,15 @@ extern "C" { # define SQLITE_EXTERN extern #endif +#ifndef SQLITE_API +# define SQLITE_API +#endif + + /* ** These no-op macros are used in front of interfaces to mark those ** interfaces as either deprecated or experimental. New applications -** should not use deprecated intrfaces - they are support for backwards +** should not use deprecated interfaces - they are support for backwards ** compatibility only. Application writers should be aware that ** experimental interfaces are subject to change in point releases. ** @@ -594,57 +638,107 @@ extern "C" { #endif /* -** CAPI3REF: Compile-Time Library Version Numbers {H10010} -** -** The SQLITE_VERSION and SQLITE_VERSION_NUMBER #defines in -** the sqlite3.h file specify the version of SQLite with which -** that header file is associated. +** CAPI3REF: Compile-Time Library Version Numbers ** -** The "version" of SQLite is a string of the form "X.Y.Z". -** The phrase "alpha" or "beta" might be appended after the Z. -** The X value is major version number always 3 in SQLite3. -** The X value only changes when backwards compatibility is -** broken and we intend to never break backwards compatibility. -** The Y value is the minor version number and only changes when -** there are major feature enhancements that are forwards compatible -** but not backwards compatible. -** The Z value is the release number and is incremented with -** each release but resets back to 0 whenever Y is incremented. +** ^(The [SQLITE_VERSION] C preprocessor macro in the sqlite3.h header +** evaluates to a string literal that is the SQLite version in the +** format "X.Y.Z" where X is the major version number (always 3 for +** SQLite3) and Y is the minor version number and Z is the release number.)^ +** ^(The [SQLITE_VERSION_NUMBER] C preprocessor macro resolves to an integer +** with the value (X*1000000 + Y*1000 + Z) where X, Y, and Z are the same +** numbers used in [SQLITE_VERSION].)^ +** The SQLITE_VERSION_NUMBER for any given release of SQLite will also +** be larger than the release from which it is derived. Either Y will +** be held constant and Z will be incremented or else Y will be incremented +** and Z will be reset to zero. ** -** See also: [sqlite3_libversion()] and [sqlite3_libversion_number()]. +** Since version 3.6.18, SQLite source code has been stored in the +** Fossil configuration management +** system. ^The SQLITE_SOURCE_ID macro evaluates to +** a string which identifies a particular check-in of SQLite +** within its configuration management system. ^The SQLITE_SOURCE_ID +** string contains the date and time of the check-in (UTC) and an SHA1 +** hash of the entire source tree. ** -** Requirements: [H10011] [H10014] +** See also: [sqlite3_libversion()], +** [sqlite3_libversion_number()], [sqlite3_sourceid()], +** [sqlite_version()] and [sqlite_source_id()]. */ -#define SQLITE_VERSION "3.6.16" -#define SQLITE_VERSION_NUMBER 3006016 +#define SQLITE_VERSION "3.7.13" +#define SQLITE_VERSION_NUMBER 3007013 +#define SQLITE_SOURCE_ID "2012-06-11 02:05:22 f5b5a13f7394dc143aa136f1d4faba6839eaa6dc" /* -** CAPI3REF: Run-Time Library Version Numbers {H10020} -** KEYWORDS: sqlite3_version +** CAPI3REF: Run-Time Library Version Numbers +** KEYWORDS: sqlite3_version, sqlite3_sourceid ** -** These features provide the same information as the [SQLITE_VERSION] -** and [SQLITE_VERSION_NUMBER] #defines in the header, but are associated -** with the library instead of the header file. Cautious programmers might -** include a check in their application to verify that -** sqlite3_libversion_number() always returns the value -** [SQLITE_VERSION_NUMBER]. +** These interfaces provide the same information as the [SQLITE_VERSION], +** [SQLITE_VERSION_NUMBER], and [SQLITE_SOURCE_ID] C preprocessor macros +** but are associated with the library instead of the header file. ^(Cautious +** programmers might include assert() statements in their application to +** verify that values returned by these interfaces match the macros in +** the header, and thus insure that the application is +** compiled with matching library and header files. ** -** The sqlite3_libversion() function returns the same information as is -** in the sqlite3_version[] string constant. The function is provided -** for use in DLLs since DLL users usually do not have direct access to string -** constants within the DLL. -** -** Requirements: [H10021] [H10022] [H10023] +**
+** assert( sqlite3_libversion_number()==SQLITE_VERSION_NUMBER );
+** assert( strcmp(sqlite3_sourceid(),SQLITE_SOURCE_ID)==0 );
+** assert( strcmp(sqlite3_libversion(),SQLITE_VERSION)==0 );
+** 
)^ +** +** ^The sqlite3_version[] string constant contains the text of [SQLITE_VERSION] +** macro. ^The sqlite3_libversion() function returns a pointer to the +** to the sqlite3_version[] string constant. The sqlite3_libversion() +** function is provided for use in DLLs since DLL users usually do not have +** direct access to string constants within the DLL. ^The +** sqlite3_libversion_number() function returns an integer equal to +** [SQLITE_VERSION_NUMBER]. ^The sqlite3_sourceid() function returns +** a pointer to a string constant whose value is the same as the +** [SQLITE_SOURCE_ID] C preprocessor macro. +** +** See also: [sqlite_version()] and [sqlite_source_id()]. */ SQLITE_API const char sqlite3_version[] = SQLITE_VERSION; SQLITE_API const char *sqlite3_libversion(void); +SQLITE_API const char *sqlite3_sourceid(void); SQLITE_API int sqlite3_libversion_number(void); /* -** CAPI3REF: Test To See If The Library Is Threadsafe {H10100} +** CAPI3REF: Run-Time Library Compilation Options Diagnostics +** +** ^The sqlite3_compileoption_used() function returns 0 or 1 +** indicating whether the specified option was defined at +** compile time. ^The SQLITE_ prefix may be omitted from the +** option name passed to sqlite3_compileoption_used(). +** +** ^The sqlite3_compileoption_get() function allows iterating +** over the list of options that were defined at compile time by +** returning the N-th compile time option string. ^If N is out of range, +** sqlite3_compileoption_get() returns a NULL pointer. ^The SQLITE_ +** prefix is omitted from any strings returned by +** sqlite3_compileoption_get(). +** +** ^Support for the diagnostic functions sqlite3_compileoption_used() +** and sqlite3_compileoption_get() may be omitted by specifying the +** [SQLITE_OMIT_COMPILEOPTION_DIAGS] option at compile time. +** +** See also: SQL functions [sqlite_compileoption_used()] and +** [sqlite_compileoption_get()] and the [compile_options pragma]. +*/ +#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS +SQLITE_API int sqlite3_compileoption_used(const char *zOptName); +SQLITE_API const char *sqlite3_compileoption_get(int N); +#endif + +/* +** CAPI3REF: Test To See If The Library Is Threadsafe +** +** ^The sqlite3_threadsafe() function returns zero if and only if +** SQLite was compiled with mutexing code omitted due to the +** [SQLITE_THREADSAFE] compile-time option being set to 0. ** ** SQLite can be compiled with or without mutexes. When -** the [SQLITE_THREADSAFE] C preprocessor macro 1 or 2, mutexes +** the [SQLITE_THREADSAFE] C preprocessor macro is 1 or 2, mutexes ** are enabled and SQLite is threadsafe. When the ** [SQLITE_THREADSAFE] macro is 0, ** the mutexes are omitted. Without the mutexes, it is not safe @@ -653,29 +747,29 @@ SQLITE_API int sqlite3_libversion_number(void); ** Enabling mutexes incurs a measurable performance penalty. ** So if speed is of utmost importance, it makes sense to disable ** the mutexes. But for maximum safety, mutexes should be enabled. -** The default behavior is for mutexes to be enabled. +** ^The default behavior is for mutexes to be enabled. ** -** This interface can be used by a program to make sure that the +** This interface can be used by an application to make sure that the ** version of SQLite that it is linking against was compiled with ** the desired setting of the [SQLITE_THREADSAFE] macro. ** ** This interface only reports on the compile-time mutex setting ** of the [SQLITE_THREADSAFE] flag. If SQLite is compiled with -** SQLITE_THREADSAFE=1 then mutexes are enabled by default but +** SQLITE_THREADSAFE=1 or =2 then mutexes are enabled by default but ** can be fully or partially disabled using a call to [sqlite3_config()] ** with the verbs [SQLITE_CONFIG_SINGLETHREAD], [SQLITE_CONFIG_MULTITHREAD], -** or [SQLITE_CONFIG_MUTEX]. The return value of this function shows -** only the default compile-time setting, not any run-time changes -** to that setting. +** or [SQLITE_CONFIG_MUTEX]. ^(The return value of the +** sqlite3_threadsafe() function shows only the compile-time setting of +** thread safety, not any run-time changes to that setting made by +** sqlite3_config(). In other words, the return value from sqlite3_threadsafe() +** is unchanged by calls to sqlite3_config().)^ ** ** See the [threading mode] documentation for additional information. -** -** Requirements: [H10101] [H10102] */ SQLITE_API int sqlite3_threadsafe(void); /* -** CAPI3REF: Database Connection Handle {H12000} +** CAPI3REF: Database Connection Handle ** KEYWORDS: {database connection} {database connections} ** ** Each open SQLite database is represented by a pointer to an instance of @@ -690,7 +784,7 @@ SQLITE_API int sqlite3_threadsafe(void); typedef struct sqlite3 sqlite3; /* -** CAPI3REF: 64-Bit Integer Types {H10200} +** CAPI3REF: 64-Bit Integer Types ** KEYWORDS: sqlite_int64 sqlite_uint64 ** ** Because there is no cross-platform way to specify 64-bit integer types @@ -700,7 +794,10 @@ typedef struct sqlite3 sqlite3; ** The sqlite_int64 and sqlite_uint64 types are supported for backwards ** compatibility only. ** -** Requirements: [H10201] [H10202] +** ^The sqlite3_int64 and sqlite_int64 types can store integer values +** between -9223372036854775808 and +9223372036854775807 inclusive. ^The +** sqlite3_uint64 and sqlite_uint64 types can store integer values +** between 0 and +18446744073709551615 inclusive. */ #ifdef SQLITE_INT64_TYPE typedef SQLITE_INT64_TYPE sqlite_int64; @@ -724,34 +821,28 @@ typedef sqlite_uint64 sqlite3_uint64; #endif /* -** CAPI3REF: Closing A Database Connection {H12010} +** CAPI3REF: Closing A Database Connection ** -** This routine is the destructor for the [sqlite3] object. +** ^The sqlite3_close() routine is the destructor for the [sqlite3] object. +** ^Calls to sqlite3_close() return SQLITE_OK if the [sqlite3] object is +** successfully destroyed and all associated resources are deallocated. ** -** Applications should [sqlite3_finalize | finalize] all [prepared statements] +** Applications must [sqlite3_finalize | finalize] all [prepared statements] ** and [sqlite3_blob_close | close] all [BLOB handles] associated with -** the [sqlite3] object prior to attempting to close the object. -** The [sqlite3_next_stmt()] interface can be used to locate all -** [prepared statements] associated with a [database connection] if desired. -** Typical code might look like this: -** -**
-** sqlite3_stmt *pStmt;
-** while( (pStmt = sqlite3_next_stmt(db, 0))!=0 ){
-**     sqlite3_finalize(pStmt);
-** }
-** 
+** the [sqlite3] object prior to attempting to close the object. ^If +** sqlite3_close() is called on a [database connection] that still has +** outstanding [prepared statements] or [BLOB handles], then it returns +** SQLITE_BUSY. ** -** If [sqlite3_close()] is invoked while a transaction is open, +** ^If [sqlite3_close()] is invoked while a transaction is open, ** the transaction is automatically rolled back. ** ** The C parameter to [sqlite3_close(C)] must be either a NULL ** pointer or an [sqlite3] object pointer obtained ** from [sqlite3_open()], [sqlite3_open16()], or ** [sqlite3_open_v2()], and not previously closed. -** -** Requirements: -** [H12011] [H12012] [H12013] [H12014] [H12015] [H12019] +** ^Calling sqlite3_close() with a NULL pointer argument is a +** harmless no-op. */ SQLITE_API int sqlite3_close(sqlite3 *); @@ -763,48 +854,65 @@ SQLITE_API int sqlite3_close(sqlite3 *); typedef int (*sqlite3_callback)(void*,int,char**, char**); /* -** CAPI3REF: One-Step Query Execution Interface {H12100} -** -** The sqlite3_exec() interface is a convenient way of running one or more -** SQL statements without having to write a lot of C code. The UTF-8 encoded -** SQL statements are passed in as the second parameter to sqlite3_exec(). -** The statements are evaluated one by one until either an error or -** an interrupt is encountered, or until they are all done. The 3rd parameter -** is an optional callback that is invoked once for each row of any query -** results produced by the SQL statements. The 5th parameter tells where -** to write any error messages. +** CAPI3REF: One-Step Query Execution Interface +** +** The sqlite3_exec() interface is a convenience wrapper around +** [sqlite3_prepare_v2()], [sqlite3_step()], and [sqlite3_finalize()], +** that allows an application to run multiple statements of SQL +** without having to use a lot of C code. +** +** ^The sqlite3_exec() interface runs zero or more UTF-8 encoded, +** semicolon-separate SQL statements passed into its 2nd argument, +** in the context of the [database connection] passed in as its 1st +** argument. ^If the callback function of the 3rd argument to +** sqlite3_exec() is not NULL, then it is invoked for each result row +** coming out of the evaluated SQL statements. ^The 4th argument to +** sqlite3_exec() is relayed through to the 1st argument of each +** callback invocation. ^If the callback pointer to sqlite3_exec() +** is NULL, then no callback is ever invoked and result rows are +** ignored. +** +** ^If an error occurs while evaluating the SQL statements passed into +** sqlite3_exec(), then execution of the current statement stops and +** subsequent statements are skipped. ^If the 5th parameter to sqlite3_exec() +** is not NULL then any error message is written into memory obtained +** from [sqlite3_malloc()] and passed back through the 5th parameter. +** To avoid memory leaks, the application should invoke [sqlite3_free()] +** on error message strings returned through the 5th parameter of +** of sqlite3_exec() after the error message string is no longer needed. +** ^If the 5th parameter to sqlite3_exec() is not NULL and no errors +** occur, then sqlite3_exec() sets the pointer in its 5th parameter to +** NULL before returning. +** +** ^If an sqlite3_exec() callback returns non-zero, the sqlite3_exec() +** routine returns SQLITE_ABORT without invoking the callback again and +** without running any subsequent SQL statements. +** +** ^The 2nd argument to the sqlite3_exec() callback function is the +** number of columns in the result. ^The 3rd argument to the sqlite3_exec() +** callback is an array of pointers to strings obtained as if from +** [sqlite3_column_text()], one for each column. ^If an element of a +** result row is NULL then the corresponding string pointer for the +** sqlite3_exec() callback is a NULL pointer. ^The 4th argument to the +** sqlite3_exec() callback is an array of pointers to strings where each +** entry represents the name of corresponding result column as obtained +** from [sqlite3_column_name()]. +** +** ^If the 2nd parameter to sqlite3_exec() is a NULL pointer, a pointer +** to an empty string, or a pointer that contains only whitespace and/or +** SQL comments, then no SQL statements are evaluated and the database +** is not changed. +** +** Restrictions: ** -** The error message passed back through the 5th parameter is held -** in memory obtained from [sqlite3_malloc()]. To avoid a memory leak, -** the calling application should call [sqlite3_free()] on any error -** message returned through the 5th parameter when it has finished using -** the error message. -** -** If the SQL statement in the 2nd parameter is NULL or an empty string -** or a string containing only whitespace and comments, then no SQL -** statements are evaluated and the database is not changed. -** -** The sqlite3_exec() interface is implemented in terms of -** [sqlite3_prepare_v2()], [sqlite3_step()], and [sqlite3_finalize()]. -** The sqlite3_exec() routine does nothing to the database that cannot be done -** by [sqlite3_prepare_v2()], [sqlite3_step()], and [sqlite3_finalize()]. -** -** The first parameter to [sqlite3_exec()] must be an valid and open -** [database connection]. -** -** The database connection must not be closed while -** [sqlite3_exec()] is running. -** -** The calling function should use [sqlite3_free()] to free -** the memory that *errmsg is left pointing at once the error -** message is no longer needed. -** -** The SQL statement text in the 2nd parameter to [sqlite3_exec()] -** must remain unchanged while [sqlite3_exec()] is running. -** -** Requirements: -** [H12101] [H12102] [H12104] [H12105] [H12107] [H12110] [H12113] [H12116] -** [H12119] [H12122] [H12125] [H12131] [H12134] [H12137] [H12138] +**
    +**
  • The application must insure that the 1st parameter to sqlite3_exec() +** is a valid and open [database connection]. +**
  • The application must not close [database connection] specified by +** the 1st parameter to sqlite3_exec() while sqlite3_exec() is running. +**
  • The application must not modify the SQL statement text passed into +** the 2nd parameter of sqlite3_exec() while sqlite3_exec() is running. +**
*/ SQLITE_API int sqlite3_exec( sqlite3*, /* An open database */ @@ -815,16 +923,17 @@ SQLITE_API int sqlite3_exec( ); /* -** CAPI3REF: Result Codes {H10210} +** CAPI3REF: Result Codes ** KEYWORDS: SQLITE_OK {error code} {error codes} ** KEYWORDS: {result code} {result codes} ** ** Many SQLite functions return an integer result code from the set shown -** here in order to indicates success or failure. +** here in order to indicate success or failure. ** ** New error codes may be added in future versions of SQLite. ** -** See also: [SQLITE_IOERR_READ | extended result codes] +** See also: [SQLITE_IOERR_READ | extended result codes], +** [sqlite3_vtab_on_conflict()] [SQLITE_ROLLBACK | result codes]. */ #define SQLITE_OK 0 /* Successful result */ /* beginning-of-error-codes */ @@ -839,10 +948,10 @@ SQLITE_API int sqlite3_exec( #define SQLITE_INTERRUPT 9 /* Operation terminated by sqlite3_interrupt()*/ #define SQLITE_IOERR 10 /* Some kind of disk I/O error occurred */ #define SQLITE_CORRUPT 11 /* The database disk image is malformed */ -#define SQLITE_NOTFOUND 12 /* NOT USED. Table or record not found */ +#define SQLITE_NOTFOUND 12 /* Unknown opcode in sqlite3_file_control() */ #define SQLITE_FULL 13 /* Insertion failed because database is full */ #define SQLITE_CANTOPEN 14 /* Unable to open the database file */ -#define SQLITE_PROTOCOL 15 /* NOT USED. Database lock protocol error */ +#define SQLITE_PROTOCOL 15 /* Database lock protocol error */ #define SQLITE_EMPTY 16 /* Database is empty */ #define SQLITE_SCHEMA 17 /* The database schema changed */ #define SQLITE_TOOBIG 18 /* String or BLOB exceeds size limit */ @@ -859,7 +968,7 @@ SQLITE_API int sqlite3_exec( /* end-of-error-codes */ /* -** CAPI3REF: Extended Result Codes {H10220} +** CAPI3REF: Extended Result Codes ** KEYWORDS: {extended error code} {extended error codes} ** KEYWORDS: {extended result code} {extended result codes} ** @@ -898,21 +1007,35 @@ SQLITE_API int sqlite3_exec( #define SQLITE_IOERR_LOCK (SQLITE_IOERR | (15<<8)) #define SQLITE_IOERR_CLOSE (SQLITE_IOERR | (16<<8)) #define SQLITE_IOERR_DIR_CLOSE (SQLITE_IOERR | (17<<8)) -#define SQLITE_LOCKED_SHAREDCACHE (SQLITE_LOCKED | (1<<8) ) - -/* -** CAPI3REF: Flags For File Open Operations {H10230} +#define SQLITE_IOERR_SHMOPEN (SQLITE_IOERR | (18<<8)) +#define SQLITE_IOERR_SHMSIZE (SQLITE_IOERR | (19<<8)) +#define SQLITE_IOERR_SHMLOCK (SQLITE_IOERR | (20<<8)) +#define SQLITE_IOERR_SHMMAP (SQLITE_IOERR | (21<<8)) +#define SQLITE_IOERR_SEEK (SQLITE_IOERR | (22<<8)) +#define SQLITE_LOCKED_SHAREDCACHE (SQLITE_LOCKED | (1<<8)) +#define SQLITE_BUSY_RECOVERY (SQLITE_BUSY | (1<<8)) +#define SQLITE_CANTOPEN_NOTEMPDIR (SQLITE_CANTOPEN | (1<<8)) +#define SQLITE_CANTOPEN_ISDIR (SQLITE_CANTOPEN | (2<<8)) +#define SQLITE_CORRUPT_VTAB (SQLITE_CORRUPT | (1<<8)) +#define SQLITE_READONLY_RECOVERY (SQLITE_READONLY | (1<<8)) +#define SQLITE_READONLY_CANTLOCK (SQLITE_READONLY | (2<<8)) +#define SQLITE_ABORT_ROLLBACK (SQLITE_ABORT | (2<<8)) + +/* +** CAPI3REF: Flags For File Open Operations ** ** These bit values are intended for use in the ** 3rd parameter to the [sqlite3_open_v2()] interface and -** in the 4th parameter to the xOpen method of the -** [sqlite3_vfs] object. +** in the 4th parameter to the [sqlite3_vfs.xOpen] method. */ #define SQLITE_OPEN_READONLY 0x00000001 /* Ok for sqlite3_open_v2() */ #define SQLITE_OPEN_READWRITE 0x00000002 /* Ok for sqlite3_open_v2() */ #define SQLITE_OPEN_CREATE 0x00000004 /* Ok for sqlite3_open_v2() */ #define SQLITE_OPEN_DELETEONCLOSE 0x00000008 /* VFS only */ #define SQLITE_OPEN_EXCLUSIVE 0x00000010 /* VFS only */ +#define SQLITE_OPEN_AUTOPROXY 0x00000020 /* VFS only */ +#define SQLITE_OPEN_URI 0x00000040 /* Ok for sqlite3_open_v2() */ +#define SQLITE_OPEN_MEMORY 0x00000080 /* Ok for sqlite3_open_v2() */ #define SQLITE_OPEN_MAIN_DB 0x00000100 /* VFS only */ #define SQLITE_OPEN_TEMP_DB 0x00000200 /* VFS only */ #define SQLITE_OPEN_TRANSIENT_DB 0x00000400 /* VFS only */ @@ -922,11 +1045,16 @@ SQLITE_API int sqlite3_exec( #define SQLITE_OPEN_MASTER_JOURNAL 0x00004000 /* VFS only */ #define SQLITE_OPEN_NOMUTEX 0x00008000 /* Ok for sqlite3_open_v2() */ #define SQLITE_OPEN_FULLMUTEX 0x00010000 /* Ok for sqlite3_open_v2() */ +#define SQLITE_OPEN_SHAREDCACHE 0x00020000 /* Ok for sqlite3_open_v2() */ +#define SQLITE_OPEN_PRIVATECACHE 0x00040000 /* Ok for sqlite3_open_v2() */ +#define SQLITE_OPEN_WAL 0x00080000 /* VFS only */ + +/* Reserved: 0x00F00000 */ /* -** CAPI3REF: Device Characteristics {H10240} +** CAPI3REF: Device Characteristics ** -** The xDeviceCapabilities method of the [sqlite3_io_methods] +** The xDeviceCharacteristics method of the [sqlite3_io_methods] ** object returns an integer which is a vector of the these ** bit values expressing I/O characteristics of the mass storage ** device that holds the file that the [sqlite3_io_methods] @@ -941,22 +1069,28 @@ SQLITE_API int sqlite3_exec( ** first then the size of the file is extended, never the other ** way around. The SQLITE_IOCAP_SEQUENTIAL property means that ** information is written to disk in the same order as calls -** to xWrite(). -*/ -#define SQLITE_IOCAP_ATOMIC 0x00000001 -#define SQLITE_IOCAP_ATOMIC512 0x00000002 -#define SQLITE_IOCAP_ATOMIC1K 0x00000004 -#define SQLITE_IOCAP_ATOMIC2K 0x00000008 -#define SQLITE_IOCAP_ATOMIC4K 0x00000010 -#define SQLITE_IOCAP_ATOMIC8K 0x00000020 -#define SQLITE_IOCAP_ATOMIC16K 0x00000040 -#define SQLITE_IOCAP_ATOMIC32K 0x00000080 -#define SQLITE_IOCAP_ATOMIC64K 0x00000100 -#define SQLITE_IOCAP_SAFE_APPEND 0x00000200 -#define SQLITE_IOCAP_SEQUENTIAL 0x00000400 - -/* -** CAPI3REF: File Locking Levels {H10250} +** to xWrite(). The SQLITE_IOCAP_POWERSAFE_OVERWRITE property means that +** after reboot following a crash or power loss, the only bytes in a +** file that were written at the application level might have changed +** and that adjacent bytes, even bytes within the same sector are +** guaranteed to be unchanged. +*/ +#define SQLITE_IOCAP_ATOMIC 0x00000001 +#define SQLITE_IOCAP_ATOMIC512 0x00000002 +#define SQLITE_IOCAP_ATOMIC1K 0x00000004 +#define SQLITE_IOCAP_ATOMIC2K 0x00000008 +#define SQLITE_IOCAP_ATOMIC4K 0x00000010 +#define SQLITE_IOCAP_ATOMIC8K 0x00000020 +#define SQLITE_IOCAP_ATOMIC16K 0x00000040 +#define SQLITE_IOCAP_ATOMIC32K 0x00000080 +#define SQLITE_IOCAP_ATOMIC64K 0x00000100 +#define SQLITE_IOCAP_SAFE_APPEND 0x00000200 +#define SQLITE_IOCAP_SEQUENTIAL 0x00000400 +#define SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN 0x00000800 +#define SQLITE_IOCAP_POWERSAFE_OVERWRITE 0x00001000 + +/* +** CAPI3REF: File Locking Levels ** ** SQLite uses one of these integer values as the second ** argument to calls it makes to the xLock() and xUnlock() methods @@ -969,7 +1103,7 @@ SQLITE_API int sqlite3_exec( #define SQLITE_LOCK_EXCLUSIVE 4 /* -** CAPI3REF: Synchronization Type Flags {H10260} +** CAPI3REF: Synchronization Type Flags ** ** When SQLite invokes the xSync() method of an ** [sqlite3_io_methods] object it uses a combination of @@ -981,16 +1115,29 @@ SQLITE_API int sqlite3_exec( ** equal SQLITE_SYNC_NORMAL, that means to use normal fsync() semantics. ** If the lower four bits equal SQLITE_SYNC_FULL, that means ** to use Mac OS X style fullsync instead of fsync(). +** +** Do not confuse the SQLITE_SYNC_NORMAL and SQLITE_SYNC_FULL flags +** with the [PRAGMA synchronous]=NORMAL and [PRAGMA synchronous]=FULL +** settings. The [synchronous pragma] determines when calls to the +** xSync VFS method occur and applies uniformly across all platforms. +** The SQLITE_SYNC_NORMAL and SQLITE_SYNC_FULL flags determine how +** energetic or rigorous or forceful the sync operations are and +** only make a difference on Mac OSX for the default SQLite code. +** (Third-party VFS implementations might also make the distinction +** between SQLITE_SYNC_NORMAL and SQLITE_SYNC_FULL, but among the +** operating systems natively supported by SQLite, only Mac OSX +** cares about the difference.) */ #define SQLITE_SYNC_NORMAL 0x00002 #define SQLITE_SYNC_FULL 0x00003 #define SQLITE_SYNC_DATAONLY 0x00010 /* -** CAPI3REF: OS Interface Open File Handle {H11110} +** CAPI3REF: OS Interface Open File Handle ** -** An [sqlite3_file] object represents an open file in the OS -** interface layer. Individual OS interface implementations will +** An [sqlite3_file] object represents an open file in the +** [sqlite3_vfs | OS interface layer]. Individual OS interface +** implementations will ** want to subclass this object by appending additional fields ** for their own use. The pMethods entry is a pointer to an ** [sqlite3_io_methods] object that defines methods for performing @@ -1002,19 +1149,20 @@ struct sqlite3_file { }; /* -** CAPI3REF: OS Interface File Virtual Methods Object {H11120} +** CAPI3REF: OS Interface File Virtual Methods Object ** -** Every file opened by the [sqlite3_vfs] xOpen method populates an +** Every file opened by the [sqlite3_vfs.xOpen] method populates an ** [sqlite3_file] object (or, more commonly, a subclass of the ** [sqlite3_file] object) with a pointer to an instance of this object. ** This object defines the methods used to perform various operations ** against the open file represented by the [sqlite3_file] object. ** -** If the xOpen method sets the sqlite3_file.pMethods element +** If the [sqlite3_vfs.xOpen] method sets the sqlite3_file.pMethods element ** to a non-NULL pointer, then the sqlite3_io_methods.xClose method -** may be invoked even if the xOpen reported that it failed. The -** only way to prevent a call to xClose following a failed xOpen -** is for the xOpen to set the sqlite3_file.pMethods element to NULL. +** may be invoked even if the [sqlite3_vfs.xOpen] reported that it failed. The +** only way to prevent a call to xClose following a failed [sqlite3_vfs.xOpen] +** is for the [sqlite3_vfs.xOpen] to set the sqlite3_file.pMethods element +** to NULL. ** ** The flags argument to xSync may be one of [SQLITE_SYNC_NORMAL] or ** [SQLITE_SYNC_FULL]. The first choice is the normal fsync(). @@ -1048,7 +1196,9 @@ struct sqlite3_file { ** core reserves all opcodes less than 100 for its own use. ** A [SQLITE_FCNTL_LOCKSTATE | list of opcodes] less than 100 is available. ** Applications that define a custom xFileControl method should use opcodes -** greater than 100 to avoid conflicts. +** greater than 100 to avoid conflicts. VFS implementations should +** return [SQLITE_NOTFOUND] for file control opcodes that they do not +** recognize. ** ** The xSectorSize() method returns the sector size of the ** device that underlies the file. The sector size is the @@ -1103,11 +1253,17 @@ struct sqlite3_io_methods { int (*xFileControl)(sqlite3_file*, int op, void *pArg); int (*xSectorSize)(sqlite3_file*); int (*xDeviceCharacteristics)(sqlite3_file*); + /* Methods above are valid for version 1 */ + int (*xShmMap)(sqlite3_file*, int iPg, int pgsz, int, void volatile**); + int (*xShmLock)(sqlite3_file*, int offset, int n, int flags); + void (*xShmBarrier)(sqlite3_file*); + int (*xShmUnmap)(sqlite3_file*, int deleteFlag); + /* Methods above are valid for version 2 */ /* Additional methods may be added in future releases */ }; /* -** CAPI3REF: Standard File Control Opcodes {H11310} +** CAPI3REF: Standard File Control Opcodes ** ** These integer constants are opcodes for the xFileControl method ** of the [sqlite3_io_methods] object and for the [sqlite3_file_control()] @@ -1120,14 +1276,142 @@ struct sqlite3_io_methods { ** into an integer that the pArg argument points to. This capability ** is used during testing and only needs to be supported when SQLITE_TEST ** is defined. +**
    +**
  • [[SQLITE_FCNTL_SIZE_HINT]] +** The [SQLITE_FCNTL_SIZE_HINT] opcode is used by SQLite to give the VFS +** layer a hint of how large the database file will grow to be during the +** current transaction. This hint is not guaranteed to be accurate but it +** is often close. The underlying VFS might choose to preallocate database +** file space based on this hint in order to help writes to the database +** file run faster. +** +**
  • [[SQLITE_FCNTL_CHUNK_SIZE]] +** The [SQLITE_FCNTL_CHUNK_SIZE] opcode is used to request that the VFS +** extends and truncates the database file in chunks of a size specified +** by the user. The fourth argument to [sqlite3_file_control()] should +** point to an integer (type int) containing the new chunk-size to use +** for the nominated database. Allocating database file space in large +** chunks (say 1MB at a time), may reduce file-system fragmentation and +** improve performance on some systems. +** +**
  • [[SQLITE_FCNTL_FILE_POINTER]] +** The [SQLITE_FCNTL_FILE_POINTER] opcode is used to obtain a pointer +** to the [sqlite3_file] object associated with a particular database +** connection. See the [sqlite3_file_control()] documentation for +** additional information. +** +**
  • [[SQLITE_FCNTL_SYNC_OMITTED]] +** ^(The [SQLITE_FCNTL_SYNC_OMITTED] opcode is generated internally by +** SQLite and sent to all VFSes in place of a call to the xSync method +** when the database connection has [PRAGMA synchronous] set to OFF.)^ +** Some specialized VFSes need this signal in order to operate correctly +** when [PRAGMA synchronous | PRAGMA synchronous=OFF] is set, but most +** VFSes do not need this signal and should silently ignore this opcode. +** Applications should not call [sqlite3_file_control()] with this +** opcode as doing so may disrupt the operation of the specialized VFSes +** that do require it. +** +**
  • [[SQLITE_FCNTL_WIN32_AV_RETRY]] +** ^The [SQLITE_FCNTL_WIN32_AV_RETRY] opcode is used to configure automatic +** retry counts and intervals for certain disk I/O operations for the +** windows [VFS] in order to provide robustness in the presence of +** anti-virus programs. By default, the windows VFS will retry file read, +** file write, and file delete operations up to 10 times, with a delay +** of 25 milliseconds before the first retry and with the delay increasing +** by an additional 25 milliseconds with each subsequent retry. This +** opcode allows these two values (10 retries and 25 milliseconds of delay) +** to be adjusted. The values are changed for all database connections +** within the same process. The argument is a pointer to an array of two +** integers where the first integer i the new retry count and the second +** integer is the delay. If either integer is negative, then the setting +** is not changed but instead the prior value of that setting is written +** into the array entry, allowing the current retry settings to be +** interrogated. The zDbName parameter is ignored. +** +**
  • [[SQLITE_FCNTL_PERSIST_WAL]] +** ^The [SQLITE_FCNTL_PERSIST_WAL] opcode is used to set or query the +** persistent [WAL | Write Ahead Log] setting. By default, the auxiliary +** write ahead log and shared memory files used for transaction control +** are automatically deleted when the latest connection to the database +** closes. Setting persistent WAL mode causes those files to persist after +** close. Persisting the files is useful when other processes that do not +** have write permission on the directory containing the database file want +** to read the database file, as the WAL and shared memory files must exist +** in order for the database to be readable. The fourth parameter to +** [sqlite3_file_control()] for this opcode should be a pointer to an integer. +** That integer is 0 to disable persistent WAL mode or 1 to enable persistent +** WAL mode. If the integer is -1, then it is overwritten with the current +** WAL persistence setting. +** +**
  • [[SQLITE_FCNTL_POWERSAFE_OVERWRITE]] +** ^The [SQLITE_FCNTL_POWERSAFE_OVERWRITE] opcode is used to set or query the +** persistent "powersafe-overwrite" or "PSOW" setting. The PSOW setting +** determines the [SQLITE_IOCAP_POWERSAFE_OVERWRITE] bit of the +** xDeviceCharacteristics methods. The fourth parameter to +** [sqlite3_file_control()] for this opcode should be a pointer to an integer. +** That integer is 0 to disable zero-damage mode or 1 to enable zero-damage +** mode. If the integer is -1, then it is overwritten with the current +** zero-damage mode setting. +** +**
  • [[SQLITE_FCNTL_OVERWRITE]] +** ^The [SQLITE_FCNTL_OVERWRITE] opcode is invoked by SQLite after opening +** a write transaction to indicate that, unless it is rolled back for some +** reason, the entire database file will be overwritten by the current +** transaction. This is used by VACUUM operations. +** +**
  • [[SQLITE_FCNTL_VFSNAME]] +** ^The [SQLITE_FCNTL_VFSNAME] opcode can be used to obtain the names of +** all [VFSes] in the VFS stack. The names are of all VFS shims and the +** final bottom-level VFS are written into memory obtained from +** [sqlite3_malloc()] and the result is stored in the char* variable +** that the fourth parameter of [sqlite3_file_control()] points to. +** The caller is responsible for freeing the memory when done. As with +** all file-control actions, there is no guarantee that this will actually +** do anything. Callers should initialize the char* variable to a NULL +** pointer in case this file-control is not implemented. This file-control +** is intended for diagnostic use only. +** +**
  • [[SQLITE_FCNTL_PRAGMA]] +** ^Whenever a [PRAGMA] statement is parsed, an [SQLITE_FCNTL_PRAGMA] +** file control is sent to the open [sqlite3_file] object corresponding +** to the database file to which the pragma statement refers. ^The argument +** to the [SQLITE_FCNTL_PRAGMA] file control is an array of +** pointers to strings (char**) in which the second element of the array +** is the name of the pragma and the third element is the argument to the +** pragma or NULL if the pragma has no argument. ^The handler for an +** [SQLITE_FCNTL_PRAGMA] file control can optionally make the first element +** of the char** argument point to a string obtained from [sqlite3_mprintf()] +** or the equivalent and that string will become the result of the pragma or +** the error message if the pragma fails. ^If the +** [SQLITE_FCNTL_PRAGMA] file control returns [SQLITE_NOTFOUND], then normal +** [PRAGMA] processing continues. ^If the [SQLITE_FCNTL_PRAGMA] +** file control returns [SQLITE_OK], then the parser assumes that the +** VFS has handled the PRAGMA itself and the parser generates a no-op +** prepared statement. ^If the [SQLITE_FCNTL_PRAGMA] file control returns +** any result code other than [SQLITE_OK] or [SQLITE_NOTFOUND], that means +** that the VFS encountered an error while handling the [PRAGMA] and the +** compilation of the PRAGMA fails with an error. ^The [SQLITE_FCNTL_PRAGMA] +** file control occurs at the beginning of pragma statement analysis and so +** it is able to override built-in [PRAGMA] statements. +**
*/ -#define SQLITE_FCNTL_LOCKSTATE 1 -#define SQLITE_GET_LOCKPROXYFILE 2 -#define SQLITE_SET_LOCKPROXYFILE 3 -#define SQLITE_LAST_ERRNO 4 +#define SQLITE_FCNTL_LOCKSTATE 1 +#define SQLITE_GET_LOCKPROXYFILE 2 +#define SQLITE_SET_LOCKPROXYFILE 3 +#define SQLITE_LAST_ERRNO 4 +#define SQLITE_FCNTL_SIZE_HINT 5 +#define SQLITE_FCNTL_CHUNK_SIZE 6 +#define SQLITE_FCNTL_FILE_POINTER 7 +#define SQLITE_FCNTL_SYNC_OMITTED 8 +#define SQLITE_FCNTL_WIN32_AV_RETRY 9 +#define SQLITE_FCNTL_PERSIST_WAL 10 +#define SQLITE_FCNTL_OVERWRITE 11 +#define SQLITE_FCNTL_VFSNAME 12 +#define SQLITE_FCNTL_POWERSAFE_OVERWRITE 13 +#define SQLITE_FCNTL_PRAGMA 14 /* -** CAPI3REF: Mutex Handle {H17110} +** CAPI3REF: Mutex Handle ** ** The mutex module within SQLite defines [sqlite3_mutex] to be an ** abstract type for a mutex object. The SQLite core never looks @@ -1139,11 +1423,12 @@ struct sqlite3_io_methods { typedef struct sqlite3_mutex sqlite3_mutex; /* -** CAPI3REF: OS Interface Object {H11140} +** CAPI3REF: OS Interface Object ** ** An instance of the sqlite3_vfs object defines the interface between ** the SQLite core and the underlying operating system. The "vfs" -** in the name of the object stands for "virtual file system". +** in the name of the object stands for "virtual file system". See +** the [VFS | VFS documentation] for further information. ** ** The value of the iVersion field is initially 1 but may be larger in ** future versions of SQLite. Additional fields may be appended to this @@ -1172,15 +1457,20 @@ typedef struct sqlite3_mutex sqlite3_mutex; ** The zName field holds the name of the VFS module. The name must ** be unique across all VFS modules. ** -** SQLite will guarantee that the zFilename parameter to xOpen +** [[sqlite3_vfs.xOpen]] +** ^SQLite guarantees that the zFilename parameter to xOpen ** is either a NULL pointer or string obtained -** from xFullPathname(). SQLite further guarantees that +** from xFullPathname() with an optional suffix added. +** ^If a suffix is added to the zFilename parameter, it will +** consist of a single "-" character followed by no more than +** 11 alphanumeric and/or "-" characters. +** ^SQLite further guarantees that ** the string will be valid and unchanged until xClose() is ** called. Because of the previous sentence, ** the [sqlite3_file] can safely store a pointer to the ** filename if it needs to remember the filename for some reason. -** If the zFilename parameter is xOpen is a NULL pointer then xOpen -** must invent its own temporary name for the file. Whenever the +** If the zFilename parameter to xOpen is a NULL pointer then xOpen +** must invent its own temporary name for the file. ^Whenever the ** xFilename parameter is NULL it will also be the case that the ** flags parameter will include [SQLITE_OPEN_DELETEONCLOSE]. ** @@ -1191,7 +1481,7 @@ typedef struct sqlite3_mutex sqlite3_mutex; ** If xOpen() opens a file read-only then it sets *pOutFlags to ** include [SQLITE_OPEN_READONLY]. Other bits in *pOutFlags may be set. ** -** SQLite will also add one of the following flags to the xOpen() +** ^(SQLite will also add one of the following flags to the xOpen() ** call, depending on the object being opened: ** **
    @@ -1202,7 +1492,8 @@ typedef struct sqlite3_mutex sqlite3_mutex; **
  • [SQLITE_OPEN_TRANSIENT_DB] **
  • [SQLITE_OPEN_SUBJOURNAL] **
  • [SQLITE_OPEN_MASTER_JOURNAL] -**
+**
  • [SQLITE_OPEN_WAL] +** )^ ** ** The file I/O implementation can use the object type flags to ** change the way it deals with files. For example, an application @@ -1221,10 +1512,11 @@ typedef struct sqlite3_mutex sqlite3_mutex; ** ** ** The [SQLITE_OPEN_DELETEONCLOSE] flag means the file should be -** deleted when it is closed. The [SQLITE_OPEN_DELETEONCLOSE] -** will be set for TEMP databases, journals and for subjournals. +** deleted when it is closed. ^The [SQLITE_OPEN_DELETEONCLOSE] +** will be set for TEMP databases and their journals, transient +** databases, and subjournals. ** -** The [SQLITE_OPEN_EXCLUSIVE] flag is always used in conjunction +** ^The [SQLITE_OPEN_EXCLUSIVE] flag is always used in conjunction ** with the [SQLITE_OPEN_CREATE] flag, which are both directly ** analogous to the O_EXCL and O_CREAT flags of the POSIX open() ** API. The SQLITE_OPEN_EXCLUSIVE flag, when paired with the @@ -1233,7 +1525,7 @@ typedef struct sqlite3_mutex sqlite3_mutex; ** It is not used to indicate the file should be opened ** for exclusive access. ** -** At least szOsFile bytes of memory are allocated by SQLite +** ^At least szOsFile bytes of memory are allocated by SQLite ** to hold the [sqlite3_file] structure passed as the third ** argument to xOpen. The xOpen method does not have to ** allocate the structure; it should just fill it in. Note that @@ -1243,33 +1535,54 @@ typedef struct sqlite3_mutex sqlite3_mutex; ** element will be valid after xOpen returns regardless of the success ** or failure of the xOpen call. ** -** The flags argument to xAccess() may be [SQLITE_ACCESS_EXISTS] +** [[sqlite3_vfs.xAccess]] +** ^The flags argument to xAccess() may be [SQLITE_ACCESS_EXISTS] ** to test for the existence of a file, or [SQLITE_ACCESS_READWRITE] to ** test whether a file is readable and writable, or [SQLITE_ACCESS_READ] ** to test whether a file is at least readable. The file can be a ** directory. ** -** SQLite will always allocate at least mxPathname+1 bytes for the +** ^SQLite will always allocate at least mxPathname+1 bytes for the ** output buffer xFullPathname. The exact size of the output buffer ** is also passed as a parameter to both methods. If the output buffer ** is not large enough, [SQLITE_CANTOPEN] should be returned. Since this is ** handled as a fatal error by SQLite, vfs implementations should endeavor ** to prevent this by setting mxPathname to a sufficiently large value. ** -** The xRandomness(), xSleep(), and xCurrentTime() interfaces -** are not strictly a part of the filesystem, but they are +** The xRandomness(), xSleep(), xCurrentTime(), and xCurrentTimeInt64() +** interfaces are not strictly a part of the filesystem, but they are ** included in the VFS structure for completeness. ** The xRandomness() function attempts to return nBytes bytes ** of good-quality randomness into zOut. The return value is ** the actual number of bytes of randomness obtained. ** The xSleep() method causes the calling thread to sleep for at -** least the number of microseconds given. The xCurrentTime() -** method returns a Julian Day Number for the current date and time. -** +** least the number of microseconds given. ^The xCurrentTime() +** method returns a Julian Day Number for the current date and time as +** a floating point value. +** ^The xCurrentTimeInt64() method returns, as an integer, the Julian +** Day Number multiplied by 86400000 (the number of milliseconds in +** a 24-hour day). +** ^SQLite will use the xCurrentTimeInt64() method to get the current +** date and time if that method is available (if iVersion is 2 or +** greater and the function pointer is not NULL) and will fall back +** to xCurrentTime() if xCurrentTimeInt64() is unavailable. +** +** ^The xSetSystemCall(), xGetSystemCall(), and xNestSystemCall() interfaces +** are not used by the SQLite core. These optional interfaces are provided +** by some VFSes to facilitate testing of the VFS code. By overriding +** system calls with functions under its control, a test program can +** simulate faults and error conditions that would otherwise be difficult +** or impossible to induce. The set of system calls that can be overridden +** varies from one VFS to another, and from one version of the same VFS to the +** next. Applications that use these interfaces must be prepared for any +** or all of these interfaces to be NULL or for their behavior to change +** from one release to the next. Applications must not attempt to access +** any of these methods if the iVersion of the VFS is less than 3. */ typedef struct sqlite3_vfs sqlite3_vfs; +typedef void (*sqlite3_syscall_ptr)(void); struct sqlite3_vfs { - int iVersion; /* Structure version number */ + int iVersion; /* Structure version number (currently 3) */ int szOsFile; /* Size of subclassed sqlite3_file */ int mxPathname; /* Maximum file pathname length */ sqlite3_vfs *pNext; /* Next registered VFS */ @@ -1288,61 +1601,130 @@ struct sqlite3_vfs { int (*xSleep)(sqlite3_vfs*, int microseconds); int (*xCurrentTime)(sqlite3_vfs*, double*); int (*xGetLastError)(sqlite3_vfs*, int, char *); - /* New fields may be appended in figure versions. The iVersion - ** value will increment whenever this happens. */ + /* + ** The methods above are in version 1 of the sqlite_vfs object + ** definition. Those that follow are added in version 2 or later + */ + int (*xCurrentTimeInt64)(sqlite3_vfs*, sqlite3_int64*); + /* + ** The methods above are in versions 1 and 2 of the sqlite_vfs object. + ** Those below are for version 3 and greater. + */ + int (*xSetSystemCall)(sqlite3_vfs*, const char *zName, sqlite3_syscall_ptr); + sqlite3_syscall_ptr (*xGetSystemCall)(sqlite3_vfs*, const char *zName); + const char *(*xNextSystemCall)(sqlite3_vfs*, const char *zName); + /* + ** The methods above are in versions 1 through 3 of the sqlite_vfs object. + ** New fields may be appended in figure versions. The iVersion + ** value will increment whenever this happens. + */ }; /* -** CAPI3REF: Flags for the xAccess VFS method {H11190} +** CAPI3REF: Flags for the xAccess VFS method ** ** These integer constants can be used as the third parameter to -** the xAccess method of an [sqlite3_vfs] object. {END} They determine +** the xAccess method of an [sqlite3_vfs] object. They determine ** what kind of permissions the xAccess method is looking for. ** With SQLITE_ACCESS_EXISTS, the xAccess method ** simply checks whether the file exists. ** With SQLITE_ACCESS_READWRITE, the xAccess method -** checks whether the file is both readable and writable. +** checks whether the named directory is both readable and writable +** (in other words, if files can be added, removed, and renamed within +** the directory). +** The SQLITE_ACCESS_READWRITE constant is currently used only by the +** [temp_store_directory pragma], though this could change in a future +** release of SQLite. ** With SQLITE_ACCESS_READ, the xAccess method -** checks whether the file is readable. +** checks whether the file is readable. The SQLITE_ACCESS_READ constant is +** currently unused, though it might be used in a future release of +** SQLite. */ #define SQLITE_ACCESS_EXISTS 0 -#define SQLITE_ACCESS_READWRITE 1 -#define SQLITE_ACCESS_READ 2 +#define SQLITE_ACCESS_READWRITE 1 /* Used by PRAGMA temp_store_directory */ +#define SQLITE_ACCESS_READ 2 /* Unused */ /* -** CAPI3REF: Initialize The SQLite Library {H10130} +** CAPI3REF: Flags for the xShmLock VFS method ** -** The sqlite3_initialize() routine initializes the -** SQLite library. The sqlite3_shutdown() routine +** These integer constants define the various locking operations +** allowed by the xShmLock method of [sqlite3_io_methods]. The +** following are the only legal combinations of flags to the +** xShmLock method: +** +**
      +**
    • SQLITE_SHM_LOCK | SQLITE_SHM_SHARED +**
    • SQLITE_SHM_LOCK | SQLITE_SHM_EXCLUSIVE +**
    • SQLITE_SHM_UNLOCK | SQLITE_SHM_SHARED +**
    • SQLITE_SHM_UNLOCK | SQLITE_SHM_EXCLUSIVE +**
    +** +** When unlocking, the same SHARED or EXCLUSIVE flag must be supplied as +** was given no the corresponding lock. +** +** The xShmLock method can transition between unlocked and SHARED or +** between unlocked and EXCLUSIVE. It cannot transition between SHARED +** and EXCLUSIVE. +*/ +#define SQLITE_SHM_UNLOCK 1 +#define SQLITE_SHM_LOCK 2 +#define SQLITE_SHM_SHARED 4 +#define SQLITE_SHM_EXCLUSIVE 8 + +/* +** CAPI3REF: Maximum xShmLock index +** +** The xShmLock method on [sqlite3_io_methods] may use values +** between 0 and this upper bound as its "offset" argument. +** The SQLite core will never attempt to acquire or release a +** lock outside of this range +*/ +#define SQLITE_SHM_NLOCK 8 + + +/* +** CAPI3REF: Initialize The SQLite Library +** +** ^The sqlite3_initialize() routine initializes the +** SQLite library. ^The sqlite3_shutdown() routine ** deallocates any resources that were allocated by sqlite3_initialize(). +** These routines are designed to aid in process initialization and +** shutdown on embedded systems. Workstation applications using +** SQLite normally do not need to invoke either of these routines. ** ** A call to sqlite3_initialize() is an "effective" call if it is ** the first time sqlite3_initialize() is invoked during the lifetime of ** the process, or if it is the first time sqlite3_initialize() is invoked -** following a call to sqlite3_shutdown(). Only an effective call +** following a call to sqlite3_shutdown(). ^(Only an effective call ** of sqlite3_initialize() does any initialization. All other calls -** are harmless no-ops. +** are harmless no-ops.)^ ** ** A call to sqlite3_shutdown() is an "effective" call if it is the first -** call to sqlite3_shutdown() since the last sqlite3_initialize(). Only +** call to sqlite3_shutdown() since the last sqlite3_initialize(). ^(Only ** an effective call to sqlite3_shutdown() does any deinitialization. -** All other calls to sqlite3_shutdown() are harmless no-ops. +** All other valid calls to sqlite3_shutdown() are harmless no-ops.)^ ** -** Among other things, sqlite3_initialize() shall invoke -** sqlite3_os_init(). Similarly, sqlite3_shutdown() -** shall invoke sqlite3_os_end(). +** The sqlite3_initialize() interface is threadsafe, but sqlite3_shutdown() +** is not. The sqlite3_shutdown() interface must only be called from a +** single thread. All open [database connections] must be closed and all +** other SQLite resources must be deallocated prior to invoking +** sqlite3_shutdown(). ** -** The sqlite3_initialize() routine returns [SQLITE_OK] on success. -** If for some reason, sqlite3_initialize() is unable to initialize +** Among other things, ^sqlite3_initialize() will invoke +** sqlite3_os_init(). Similarly, ^sqlite3_shutdown() +** will invoke sqlite3_os_end(). +** +** ^The sqlite3_initialize() routine returns [SQLITE_OK] on success. +** ^If for some reason, sqlite3_initialize() is unable to initialize ** the library (perhaps it is unable to allocate a needed resource such ** as a mutex) it returns an [error code] other than [SQLITE_OK]. ** -** The sqlite3_initialize() routine is called internally by many other +** ^The sqlite3_initialize() routine is called internally by many other ** SQLite interfaces so that an application usually does not need to ** invoke sqlite3_initialize() directly. For example, [sqlite3_open()] ** calls sqlite3_initialize() so the SQLite library will be automatically ** initialized when [sqlite3_open()] is called if it has not be initialized -** already. However, if SQLite is compiled with the [SQLITE_OMIT_AUTOINIT] +** already. ^However, if SQLite is compiled with the [SQLITE_OMIT_AUTOINIT] ** compile-time option, then the automatic calls to sqlite3_initialize() ** are omitted and the application must call sqlite3_initialize() directly ** prior to using any other SQLite interface. For maximum portability, @@ -1366,8 +1748,9 @@ struct sqlite3_vfs { ** interface is called automatically by sqlite3_initialize() and ** sqlite3_os_end() is called by sqlite3_shutdown(). Appropriate ** implementations for sqlite3_os_init() and sqlite3_os_end() -** are built into SQLite when it is compiled for unix, windows, or os/2. -** When built for other platforms (using the [SQLITE_OS_OTHER=1] compile-time +** are built into SQLite when it is compiled for Unix, Windows, or OS/2. +** When [custom builds | built for other platforms] +** (using the [SQLITE_OS_OTHER=1] compile-time ** option) the application must supply a suitable implementation for ** sqlite3_os_init() and sqlite3_os_end(). An application-supplied ** implementation of sqlite3_os_init() or sqlite3_os_end() @@ -1380,8 +1763,7 @@ SQLITE_API int sqlite3_os_init(void); SQLITE_API int sqlite3_os_end(void); /* -** CAPI3REF: Configuring The SQLite Library {H14100} -** EXPERIMENTAL +** CAPI3REF: Configuring The SQLite Library ** ** The sqlite3_config() interface is used to make global configuration ** changes to SQLite in order to tune SQLite to the specific needs of @@ -1394,53 +1776,43 @@ SQLITE_API int sqlite3_os_end(void); ** threads while sqlite3_config() is running. Furthermore, sqlite3_config() ** may only be invoked prior to library initialization using ** [sqlite3_initialize()] or after shutdown by [sqlite3_shutdown()]. -** Note, however, that sqlite3_config() can be called as part of the +** ^If sqlite3_config() is called after [sqlite3_initialize()] and before +** [sqlite3_shutdown()] then it will return SQLITE_MISUSE. +** Note, however, that ^sqlite3_config() can be called as part of the ** implementation of an application-defined [sqlite3_os_init()]. ** ** The first argument to sqlite3_config() is an integer -** [SQLITE_CONFIG_SINGLETHREAD | configuration option] that determines +** [configuration option] that determines ** what property of SQLite is to be configured. Subsequent arguments -** vary depending on the [SQLITE_CONFIG_SINGLETHREAD | configuration option] +** vary depending on the [configuration option] ** in the first argument. ** -** When a configuration option is set, sqlite3_config() returns [SQLITE_OK]. -** If the option is unknown or SQLite is unable to set the option +** ^When a configuration option is set, sqlite3_config() returns [SQLITE_OK]. +** ^If the option is unknown or SQLite is unable to set the option ** then this routine returns a non-zero [error code]. -** -** Requirements: -** [H14103] [H14106] [H14120] [H14123] [H14126] [H14129] [H14132] [H14135] -** [H14138] [H14141] [H14144] [H14147] [H14150] [H14153] [H14156] [H14159] -** [H14162] [H14165] [H14168] */ -SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_config(int, ...); +SQLITE_API int sqlite3_config(int, ...); /* -** CAPI3REF: Configure database connections {H14200} -** EXPERIMENTAL +** CAPI3REF: Configure database connections ** ** The sqlite3_db_config() interface is used to make configuration ** changes to a [database connection]. The interface is similar to ** [sqlite3_config()] except that the changes apply to a single -** [database connection] (specified in the first argument). The -** sqlite3_db_config() interface can only be used immediately after -** the database connection is created using [sqlite3_open()], -** [sqlite3_open16()], or [sqlite3_open_v2()]. +** [database connection] (specified in the first argument). ** ** The second argument to sqlite3_db_config(D,V,...) is the -** configuration verb - an integer code that indicates what -** aspect of the [database connection] is being configured. -** The only choice for this value is [SQLITE_DBCONFIG_LOOKASIDE]. -** New verbs are likely to be added in future releases of SQLite. -** Additional arguments depend on the verb. +** [SQLITE_DBCONFIG_LOOKASIDE | configuration verb] - an integer code +** that indicates what aspect of the [database connection] is being configured. +** Subsequent arguments vary depending on the configuration verb. ** -** Requirements: -** [H14203] [H14206] [H14209] [H14212] [H14215] +** ^Calls to sqlite3_db_config() return SQLITE_OK if and only if +** the call is considered successful. */ -SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_db_config(sqlite3*, int op, ...); +SQLITE_API int sqlite3_db_config(sqlite3*, int op, ...); /* -** CAPI3REF: Memory Allocation Routines {H10155} -** EXPERIMENTAL +** CAPI3REF: Memory Allocation Routines ** ** An instance of this object defines the interface between SQLite ** and low-level memory allocation routines. @@ -1448,13 +1820,15 @@ SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_db_config(sqlite3*, int op, ...); ** This object is used in only one place in the SQLite interface. ** A pointer to an instance of this object is the argument to ** [sqlite3_config()] when the configuration option is -** [SQLITE_CONFIG_MALLOC]. By creating an instance of this object -** and passing it to [sqlite3_config()] during configuration, an -** application can specify an alternative memory allocation subsystem -** for SQLite to use for all of its dynamic memory needs. -** -** Note that SQLite comes with a built-in memory allocator that is -** perfectly adequate for the overwhelming majority of applications +** [SQLITE_CONFIG_MALLOC] or [SQLITE_CONFIG_GETMALLOC]. +** By creating an instance of this object +** and passing it to [sqlite3_config]([SQLITE_CONFIG_MALLOC]) +** during configuration, an application can specify an alternative +** memory allocation subsystem for SQLite to use for all of its +** dynamic memory needs. +** +** Note that SQLite comes with several [built-in memory allocators] +** that are perfectly adequate for the overwhelming majority of applications ** and that this object is only useful to a tiny minority of applications ** with specialized memory allocation requirements. This object is ** also used during testing of SQLite in order to specify an alternative @@ -1462,8 +1836,10 @@ SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_db_config(sqlite3*, int op, ...); ** order to verify that SQLite recovers gracefully from such ** conditions. ** -** The xMalloc, xFree, and xRealloc methods must work like the -** malloc(), free(), and realloc() functions from the standard library. +** The xMalloc, xRealloc, and xFree methods must work like the +** malloc(), realloc() and free() functions from the standard C library. +** ^SQLite guarantees that the second argument to +** xRealloc is always a value returned by a prior call to xRoundup. ** ** xSize should return the allocated size of a memory allocation ** previously obtained from xMalloc or xRealloc. The allocated size @@ -1473,6 +1849,9 @@ SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_db_config(sqlite3*, int op, ...); ** a memory allocation given a particular requested size. Most memory ** allocators round up memory allocations at least to the next multiple ** of 8. Some allocators round up to a larger multiple or to a power of 2. +** Every memory allocation request coming in through [sqlite3_malloc()] +** or [sqlite3_realloc()] first calls xRoundup. If xRoundup returns 0, +** that causes the corresponding memory allocation to fail. ** ** The xInit method initializes the memory allocator. (For example, ** it might allocate any require mutexes or initialize internal data @@ -1480,6 +1859,20 @@ SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_db_config(sqlite3*, int op, ...); ** [sqlite3_shutdown()] and should deallocate any resources acquired ** by xInit. The pAppData pointer is used as the only parameter to ** xInit and xShutdown. +** +** SQLite holds the [SQLITE_MUTEX_STATIC_MASTER] mutex when it invokes +** the xInit method, so the xInit method need not be threadsafe. The +** xShutdown method is only called from [sqlite3_shutdown()] so it does +** not need to be threadsafe either. For all other methods, SQLite +** holds the [SQLITE_MUTEX_STATIC_MEM] mutex as long as the +** [SQLITE_CONFIG_MEMSTATUS] configuration option is turned on (which +** it is by default) and so the methods are automatically serialized. +** However, if [SQLITE_CONFIG_MEMSTATUS] is disabled, then the other +** methods must be threadsafe or else make their own arrangements for +** serialization. +** +** SQLite will never invoke xInit() more than once without an intervening +** call to xShutdown(). */ typedef struct sqlite3_mem_methods sqlite3_mem_methods; struct sqlite3_mem_methods { @@ -1494,8 +1887,8 @@ struct sqlite3_mem_methods { }; /* -** CAPI3REF: Configuration Options {H10160} -** EXPERIMENTAL +** CAPI3REF: Configuration Options +** KEYWORDS: {configuration option} ** ** These constants are the available integer configuration options that ** can be passed as the first argument to the [sqlite3_config()] interface. @@ -1508,23 +1901,34 @@ struct sqlite3_mem_methods { ** is invoked. ** **
    -**
    SQLITE_CONFIG_SINGLETHREAD
    -**
    There are no arguments to this option. This option disables +** [[SQLITE_CONFIG_SINGLETHREAD]]
    SQLITE_CONFIG_SINGLETHREAD
    +**
    There are no arguments to this option. ^This option sets the +** [threading mode] to Single-thread. In other words, it disables ** all mutexing and puts SQLite into a mode where it can only be used -** by a single thread.
    -** -**
    SQLITE_CONFIG_MULTITHREAD
    -**
    There are no arguments to this option. This option disables +** by a single thread. ^If SQLite is compiled with +** the [SQLITE_THREADSAFE | SQLITE_THREADSAFE=0] compile-time option then +** it is not possible to change the [threading mode] from its default +** value of Single-thread and so [sqlite3_config()] will return +** [SQLITE_ERROR] if called with the SQLITE_CONFIG_SINGLETHREAD +** configuration option.
    +** +** [[SQLITE_CONFIG_MULTITHREAD]]
    SQLITE_CONFIG_MULTITHREAD
    +**
    There are no arguments to this option. ^This option sets the +** [threading mode] to Multi-thread. In other words, it disables ** mutexing on [database connection] and [prepared statement] objects. ** The application is responsible for serializing access to ** [database connections] and [prepared statements]. But other mutexes ** are enabled so that SQLite will be safe to use in a multi-threaded ** environment as long as no two threads attempt to use the same -** [database connection] at the same time. See the [threading mode] -** documentation for additional information.
    -** -**
    SQLITE_CONFIG_SERIALIZED
    -**
    There are no arguments to this option. This option enables +** [database connection] at the same time. ^If SQLite is compiled with +** the [SQLITE_THREADSAFE | SQLITE_THREADSAFE=0] compile-time option then +** it is not possible to set the Multi-thread [threading mode] and +** [sqlite3_config()] will return [SQLITE_ERROR] if called with the +** SQLITE_CONFIG_MULTITHREAD configuration option.
    +** +** [[SQLITE_CONFIG_SERIALIZED]]
    SQLITE_CONFIG_SERIALIZED
    +**
    There are no arguments to this option. ^This option sets the +** [threading mode] to Serialized. In other words, this option enables ** all mutexes including the recursive ** mutexes on [database connection] and [prepared statement] objects. ** In this mode (which is the default when SQLite is compiled with @@ -1532,122 +1936,179 @@ struct sqlite3_mem_methods { ** to [database connections] and [prepared statements] so that the ** application is free to use the same [database connection] or the ** same [prepared statement] in different threads at the same time. -** See the [threading mode] documentation for additional information.
    -** -**
    SQLITE_CONFIG_MALLOC
    -**
    This option takes a single argument which is a pointer to an +** ^If SQLite is compiled with +** the [SQLITE_THREADSAFE | SQLITE_THREADSAFE=0] compile-time option then +** it is not possible to set the Serialized [threading mode] and +** [sqlite3_config()] will return [SQLITE_ERROR] if called with the +** SQLITE_CONFIG_SERIALIZED configuration option.
    +** +** [[SQLITE_CONFIG_MALLOC]]
    SQLITE_CONFIG_MALLOC
    +**
    ^(This option takes a single argument which is a pointer to an ** instance of the [sqlite3_mem_methods] structure. The argument specifies ** alternative low-level memory allocation routines to be used in place of -** the memory allocation routines built into SQLite.
    +** the memory allocation routines built into SQLite.)^ ^SQLite makes +** its own private copy of the content of the [sqlite3_mem_methods] structure +** before the [sqlite3_config()] call returns. ** -**
    SQLITE_CONFIG_GETMALLOC
    -**
    This option takes a single argument which is a pointer to an +** [[SQLITE_CONFIG_GETMALLOC]]
    SQLITE_CONFIG_GETMALLOC
    +**
    ^(This option takes a single argument which is a pointer to an ** instance of the [sqlite3_mem_methods] structure. The [sqlite3_mem_methods] -** structure is filled with the currently defined memory allocation routines. +** structure is filled with the currently defined memory allocation routines.)^ ** This option can be used to overload the default memory allocation ** routines with a wrapper that simulations memory allocation failure or -** tracks memory usage, for example.
    +** tracks memory usage, for example. ** -**
    SQLITE_CONFIG_MEMSTATUS
    -**
    This option takes single argument of type int, interpreted as a +** [[SQLITE_CONFIG_MEMSTATUS]]
    SQLITE_CONFIG_MEMSTATUS
    +**
    ^This option takes single argument of type int, interpreted as a ** boolean, which enables or disables the collection of memory allocation -** statistics. When disabled, the following SQLite interfaces become -** non-operational: +** statistics. ^(When memory allocation statistics are disabled, the +** following SQLite interfaces become non-operational: **
      **
    • [sqlite3_memory_used()] **
    • [sqlite3_memory_highwater()] -**
    • [sqlite3_soft_heap_limit()] +**
    • [sqlite3_soft_heap_limit64()] **
    • [sqlite3_status()] -**
    +** )^ +** ^Memory allocation statistics are enabled by default unless SQLite is +** compiled with [SQLITE_DEFAULT_MEMSTATUS]=0 in which case memory +** allocation statistics are disabled by default. **
    ** -**
    SQLITE_CONFIG_SCRATCH
    -**
    This option specifies a static memory buffer that SQLite can use for +** [[SQLITE_CONFIG_SCRATCH]]
    SQLITE_CONFIG_SCRATCH
    +**
    ^This option specifies a static memory buffer that SQLite can use for ** scratch memory. There are three arguments: A pointer an 8-byte -** aligned memory buffer from which the scrach allocations will be +** aligned memory buffer from which the scratch allocations will be ** drawn, the size of each scratch allocation (sz), ** and the maximum number of scratch allocations (N). The sz -** argument must be a multiple of 16. The sz parameter should be a few bytes -** larger than the actual scratch space required due to internal overhead. -** The first argument should pointer to an 8-byte aligned buffer +** argument must be a multiple of 16. +** The first argument must be a pointer to an 8-byte aligned buffer ** of at least sz*N bytes of memory. -** SQLite will use no more than one scratch buffer at once per thread, so -** N should be set to the expected maximum number of threads. The sz -** parameter should be 6 times the size of the largest database page size. -** Scratch buffers are used as part of the btree balance operation. If -** The btree balancer needs additional memory beyond what is provided by -** scratch buffers or if no scratch buffer space is specified, then SQLite -** goes to [sqlite3_malloc()] to obtain the memory it needs.
    -** -**
    SQLITE_CONFIG_PAGECACHE
    -**
    This option specifies a static memory buffer that SQLite can use for -** the database page cache with the default page cache implemenation. +** ^SQLite will use no more than two scratch buffers per thread. So +** N should be set to twice the expected maximum number of threads. +** ^SQLite will never require a scratch buffer that is more than 6 +** times the database page size. ^If SQLite needs needs additional +** scratch memory beyond what is provided by this configuration option, then +** [sqlite3_malloc()] will be used to obtain the memory needed.
    +** +** [[SQLITE_CONFIG_PAGECACHE]]
    SQLITE_CONFIG_PAGECACHE
    +**
    ^This option specifies a static memory buffer that SQLite can use for +** the database page cache with the default page cache implementation. ** This configuration should not be used if an application-define page -** cache implementation is loaded using the SQLITE_CONFIG_PCACHE option. +** cache implementation is loaded using the SQLITE_CONFIG_PCACHE2 option. ** There are three arguments to this option: A pointer to 8-byte aligned ** memory, the size of each page buffer (sz), and the number of pages (N). ** The sz argument should be the size of the largest database page ** (a power of two between 512 and 32768) plus a little extra for each -** page header. The page header size is 20 to 40 bytes depending on -** the host architecture. It is harmless, apart from the wasted memory, +** page header. ^The page header size is 20 to 40 bytes depending on +** the host architecture. ^It is harmless, apart from the wasted memory, ** to make sz a little too large. The first ** argument should point to an allocation of at least sz*N bytes of memory. -** SQLite will use the memory provided by the first argument to satisfy its -** memory needs for the first N pages that it adds to cache. If additional +** ^SQLite will use the memory provided by the first argument to satisfy its +** memory needs for the first N pages that it adds to cache. ^If additional ** page cache memory is needed beyond what is provided by this option, then ** SQLite goes to [sqlite3_malloc()] for the additional storage space. -** The implementation might use one or more of the N buffers to hold -** memory accounting information. The pointer in the first argument must +** The pointer in the first argument must ** be aligned to an 8-byte boundary or subsequent behavior of SQLite ** will be undefined.
    ** -**
    SQLITE_CONFIG_HEAP
    -**
    This option specifies a static memory buffer that SQLite will use +** [[SQLITE_CONFIG_HEAP]]
    SQLITE_CONFIG_HEAP
    +**
    ^This option specifies a static memory buffer that SQLite will use ** for all of its dynamic memory allocation needs beyond those provided ** for by [SQLITE_CONFIG_SCRATCH] and [SQLITE_CONFIG_PAGECACHE]. ** There are three arguments: An 8-byte aligned pointer to the memory, ** the number of bytes in the memory buffer, and the minimum allocation size. -** If the first pointer (the memory pointer) is NULL, then SQLite reverts +** ^If the first pointer (the memory pointer) is NULL, then SQLite reverts ** to using its default memory allocator (the system malloc() implementation), -** undoing any prior invocation of [SQLITE_CONFIG_MALLOC]. If the +** undoing any prior invocation of [SQLITE_CONFIG_MALLOC]. ^If the ** memory pointer is not NULL and either [SQLITE_ENABLE_MEMSYS3] or ** [SQLITE_ENABLE_MEMSYS5] are defined, then the alternative memory ** allocator is engaged to handle all of SQLites memory allocation needs. ** The first pointer (the memory pointer) must be aligned to an 8-byte -** boundary or subsequent behavior of SQLite will be undefined.
    +** boundary or subsequent behavior of SQLite will be undefined. +** The minimum allocation size is capped at 2**12. Reasonable values +** for the minimum allocation size are 2**5 through 2**8. ** -**
    SQLITE_CONFIG_MUTEX
    -**
    This option takes a single argument which is a pointer to an +** [[SQLITE_CONFIG_MUTEX]]
    SQLITE_CONFIG_MUTEX
    +**
    ^(This option takes a single argument which is a pointer to an ** instance of the [sqlite3_mutex_methods] structure. The argument specifies ** alternative low-level mutex routines to be used in place -** the mutex routines built into SQLite.
    -** -**
    SQLITE_CONFIG_GETMUTEX
    -**
    This option takes a single argument which is a pointer to an +** the mutex routines built into SQLite.)^ ^SQLite makes a copy of the +** content of the [sqlite3_mutex_methods] structure before the call to +** [sqlite3_config()] returns. ^If SQLite is compiled with +** the [SQLITE_THREADSAFE | SQLITE_THREADSAFE=0] compile-time option then +** the entire mutexing subsystem is omitted from the build and hence calls to +** [sqlite3_config()] with the SQLITE_CONFIG_MUTEX configuration option will +** return [SQLITE_ERROR].
    +** +** [[SQLITE_CONFIG_GETMUTEX]]
    SQLITE_CONFIG_GETMUTEX
    +**
    ^(This option takes a single argument which is a pointer to an ** instance of the [sqlite3_mutex_methods] structure. The ** [sqlite3_mutex_methods] -** structure is filled with the currently defined mutex routines. +** structure is filled with the currently defined mutex routines.)^ ** This option can be used to overload the default mutex allocation ** routines with a wrapper used to track mutex usage for performance -** profiling or testing, for example.
    -** -**
    SQLITE_CONFIG_LOOKASIDE
    -**
    This option takes two arguments that determine the default -** memory allcation lookaside optimization. The first argument is the +** profiling or testing, for example. ^If SQLite is compiled with +** the [SQLITE_THREADSAFE | SQLITE_THREADSAFE=0] compile-time option then +** the entire mutexing subsystem is omitted from the build and hence calls to +** [sqlite3_config()] with the SQLITE_CONFIG_GETMUTEX configuration option will +** return [SQLITE_ERROR].
    +** +** [[SQLITE_CONFIG_LOOKASIDE]]
    SQLITE_CONFIG_LOOKASIDE
    +**
    ^(This option takes two arguments that determine the default +** memory allocation for the lookaside memory allocator on each +** [database connection]. The first argument is the ** size of each lookaside buffer slot and the second is the number of -** slots allocated to each database connection.
    -** -**
    SQLITE_CONFIG_PCACHE
    -**
    This option takes a single argument which is a pointer to -** an [sqlite3_pcache_methods] object. This object specifies the interface -** to a custom page cache implementation. SQLite makes a copy of the +** slots allocated to each database connection.)^ ^(This option sets the +** default lookaside size. The [SQLITE_DBCONFIG_LOOKASIDE] +** verb to [sqlite3_db_config()] can be used to change the lookaside +** configuration on individual connections.)^
    +** +** [[SQLITE_CONFIG_PCACHE2]]
    SQLITE_CONFIG_PCACHE2
    +**
    ^(This option takes a single argument which is a pointer to +** an [sqlite3_pcache_methods2] object. This object specifies the interface +** to a custom page cache implementation.)^ ^SQLite makes a copy of the ** object and uses it for page cache memory allocations.
    ** -**
    SQLITE_CONFIG_GETPCACHE
    -**
    This option takes a single argument which is a pointer to an -** [sqlite3_pcache_methods] object. SQLite copies of the current -** page cache implementation into that object.
    -** +** [[SQLITE_CONFIG_GETPCACHE2]]
    SQLITE_CONFIG_GETPCACHE2
    +**
    ^(This option takes a single argument which is a pointer to an +** [sqlite3_pcache_methods2] object. SQLite copies of the current +** page cache implementation into that object.)^
    +** +** [[SQLITE_CONFIG_LOG]]
    SQLITE_CONFIG_LOG
    +**
    ^The SQLITE_CONFIG_LOG option takes two arguments: a pointer to a +** function with a call signature of void(*)(void*,int,const char*), +** and a pointer to void. ^If the function pointer is not NULL, it is +** invoked by [sqlite3_log()] to process each logging event. ^If the +** function pointer is NULL, the [sqlite3_log()] interface becomes a no-op. +** ^The void pointer that is the second argument to SQLITE_CONFIG_LOG is +** passed through as the first parameter to the application-defined logger +** function whenever that function is invoked. ^The second parameter to +** the logger function is a copy of the first parameter to the corresponding +** [sqlite3_log()] call and is intended to be a [result code] or an +** [extended result code]. ^The third parameter passed to the logger is +** log message after formatting via [sqlite3_snprintf()]. +** The SQLite logging interface is not reentrant; the logger function +** supplied by the application must not invoke any SQLite interface. +** In a multi-threaded application, the application-defined logger +** function must be threadsafe.
    +** +** [[SQLITE_CONFIG_URI]]
    SQLITE_CONFIG_URI +**
    This option takes a single argument of type int. If non-zero, then +** URI handling is globally enabled. If the parameter is zero, then URI handling +** is globally disabled. If URI handling is globally enabled, all filenames +** passed to [sqlite3_open()], [sqlite3_open_v2()], [sqlite3_open16()] or +** specified as part of [ATTACH] commands are interpreted as URIs, regardless +** of whether or not the [SQLITE_OPEN_URI] flag is set when the database +** connection is opened. If it is globally disabled, filenames are +** only interpreted as URIs if the SQLITE_OPEN_URI flag is set when the +** database connection is opened. By default, URI handling is globally +** disabled. The default value may be changed by compiling with the +** [SQLITE_USE_URI] symbol defined. +** +** [[SQLITE_CONFIG_PCACHE]] [[SQLITE_CONFIG_GETPCACHE]] +**
    SQLITE_CONFIG_PCACHE and SQLITE_CONFIG_GETPCACHE +**
    These options are obsolete and should not be used by new code. +** They are retained for backwards compatibility but are now no-ops. **
    */ #define SQLITE_CONFIG_SINGLETHREAD 1 /* nil */ @@ -1663,12 +2124,15 @@ struct sqlite3_mem_methods { #define SQLITE_CONFIG_GETMUTEX 11 /* sqlite3_mutex_methods* */ /* previously SQLITE_CONFIG_CHUNKALLOC 12 which is now unused. */ #define SQLITE_CONFIG_LOOKASIDE 13 /* int int */ -#define SQLITE_CONFIG_PCACHE 14 /* sqlite3_pcache_methods* */ -#define SQLITE_CONFIG_GETPCACHE 15 /* sqlite3_pcache_methods* */ +#define SQLITE_CONFIG_PCACHE 14 /* no-op */ +#define SQLITE_CONFIG_GETPCACHE 15 /* no-op */ +#define SQLITE_CONFIG_LOG 16 /* xFunc, void* */ +#define SQLITE_CONFIG_URI 17 /* int */ +#define SQLITE_CONFIG_PCACHE2 18 /* sqlite3_pcache_methods2* */ +#define SQLITE_CONFIG_GETPCACHE2 19 /* sqlite3_pcache_methods2* */ /* -** CAPI3REF: Configuration Options {H10170} -** EXPERIMENTAL +** CAPI3REF: Database Connection Configuration Options ** ** These constants are the available integer configuration options that ** can be passed as the second argument to the [sqlite3_db_config()] interface. @@ -1676,74 +2140,108 @@ struct sqlite3_mem_methods { ** New configuration options may be added in future releases of SQLite. ** Existing configuration options might be discontinued. Applications ** should check the return code from [sqlite3_db_config()] to make sure that -** the call worked. The [sqlite3_db_config()] interface will return a +** the call worked. ^The [sqlite3_db_config()] interface will return a ** non-zero [error code] if a discontinued or unsupported configuration option ** is invoked. ** **
    **
    SQLITE_DBCONFIG_LOOKASIDE
    -**
    This option takes three additional arguments that determine the +**
    ^This option takes three additional arguments that determine the ** [lookaside memory allocator] configuration for the [database connection]. -** The first argument (the third parameter to [sqlite3_db_config()] is a -** pointer to an 8-byte aligned memory buffer to use for lookaside memory. -** The first argument may be NULL in which case SQLite will allocate the -** lookaside buffer itself using [sqlite3_malloc()]. The second argument is the -** size of each lookaside buffer slot and the third argument is the number of +** ^The first argument (the third parameter to [sqlite3_db_config()] is a +** pointer to a memory buffer to use for lookaside memory. +** ^The first argument after the SQLITE_DBCONFIG_LOOKASIDE verb +** may be NULL in which case SQLite will allocate the +** lookaside buffer itself using [sqlite3_malloc()]. ^The second argument is the +** size of each lookaside buffer slot. ^The third argument is the number of ** slots. The size of the buffer in the first argument must be greater than -** or equal to the product of the second and third arguments.
    +** or equal to the product of the second and third arguments. The buffer +** must be aligned to an 8-byte boundary. ^If the second argument to +** SQLITE_DBCONFIG_LOOKASIDE is not a multiple of 8, it is internally +** rounded down to the next smaller multiple of 8. ^(The lookaside memory +** configuration for a database connection can only be changed when that +** connection is not currently using lookaside memory, or in other words +** when the "current value" returned by +** [sqlite3_db_status](D,[SQLITE_CONFIG_LOOKASIDE],...) is zero. +** Any attempt to change the lookaside memory configuration when lookaside +** memory is in use leaves the configuration unchanged and returns +** [SQLITE_BUSY].)^ +** +**
    SQLITE_DBCONFIG_ENABLE_FKEY
    +**
    ^This option is used to enable or disable the enforcement of +** [foreign key constraints]. There should be two additional arguments. +** The first argument is an integer which is 0 to disable FK enforcement, +** positive to enable FK enforcement or negative to leave FK enforcement +** unchanged. The second parameter is a pointer to an integer into which +** is written 0 or 1 to indicate whether FK enforcement is off or on +** following this call. The second parameter may be a NULL pointer, in +** which case the FK enforcement setting is not reported back.
    +** +**
    SQLITE_DBCONFIG_ENABLE_TRIGGER
    +**
    ^This option is used to enable or disable [CREATE TRIGGER | triggers]. +** There should be two additional arguments. +** The first argument is an integer which is 0 to disable triggers, +** positive to enable triggers or negative to leave the setting unchanged. +** The second parameter is a pointer to an integer into which +** is written 0 or 1 to indicate whether triggers are disabled or enabled +** following this call. The second parameter may be a NULL pointer, in +** which case the trigger setting is not reported back.
    ** **
    */ -#define SQLITE_DBCONFIG_LOOKASIDE 1001 /* void* int int */ +#define SQLITE_DBCONFIG_LOOKASIDE 1001 /* void* int int */ +#define SQLITE_DBCONFIG_ENABLE_FKEY 1002 /* int int* */ +#define SQLITE_DBCONFIG_ENABLE_TRIGGER 1003 /* int int* */ /* -** CAPI3REF: Enable Or Disable Extended Result Codes {H12200} +** CAPI3REF: Enable Or Disable Extended Result Codes ** -** The sqlite3_extended_result_codes() routine enables or disables the -** [extended result codes] feature of SQLite. The extended result -** codes are disabled by default for historical compatibility considerations. -** -** Requirements: -** [H12201] [H12202] +** ^The sqlite3_extended_result_codes() routine enables or disables the +** [extended result codes] feature of SQLite. ^The extended result +** codes are disabled by default for historical compatibility. */ SQLITE_API int sqlite3_extended_result_codes(sqlite3*, int onoff); /* -** CAPI3REF: Last Insert Rowid {H12220} +** CAPI3REF: Last Insert Rowid ** -** Each entry in an SQLite table has a unique 64-bit signed -** integer key called the [ROWID | "rowid"]. The rowid is always available +** ^Each entry in an SQLite table has a unique 64-bit signed +** integer key called the [ROWID | "rowid"]. ^The rowid is always available ** as an undeclared column named ROWID, OID, or _ROWID_ as long as those -** names are not also used by explicitly declared columns. If +** names are not also used by explicitly declared columns. ^If ** the table has a column of type [INTEGER PRIMARY KEY] then that column ** is another alias for the rowid. ** -** This routine returns the [rowid] of the most recent +** ^This routine returns the [rowid] of the most recent ** successful [INSERT] into the database from the [database connection] -** in the first argument. If no successful [INSERT]s +** in the first argument. ^As of SQLite version 3.7.7, this routines +** records the last insert rowid of both ordinary tables and [virtual tables]. +** ^If no successful [INSERT]s ** have ever occurred on that database connection, zero is returned. ** -** If an [INSERT] occurs within a trigger, then the [rowid] of the inserted -** row is returned by this routine as long as the trigger is running. -** But once the trigger terminates, the value returned by this routine -** reverts to the last value inserted before the trigger fired. +** ^(If an [INSERT] occurs within a trigger or within a [virtual table] +** method, then this routine will return the [rowid] of the inserted +** row as long as the trigger or virtual table method is running. +** But once the trigger or virtual table method ends, the value returned +** by this routine reverts to what it was before the trigger or virtual +** table method began.)^ ** -** An [INSERT] that fails due to a constraint violation is not a +** ^An [INSERT] that fails due to a constraint violation is not a ** successful [INSERT] and does not change the value returned by this -** routine. Thus INSERT OR FAIL, INSERT OR IGNORE, INSERT OR ROLLBACK, +** routine. ^Thus INSERT OR FAIL, INSERT OR IGNORE, INSERT OR ROLLBACK, ** and INSERT OR ABORT make no changes to the return value of this -** routine when their insertion fails. When INSERT OR REPLACE +** routine when their insertion fails. ^(When INSERT OR REPLACE ** encounters a constraint violation, it does not fail. The ** INSERT continues to completion after deleting rows that caused ** the constraint problem so INSERT OR REPLACE will always change -** the return value of this interface. +** the return value of this interface.)^ ** -** For the purposes of this routine, an [INSERT] is considered to +** ^For the purposes of this routine, an [INSERT] is considered to ** be successful even if it is subsequently rolled back. ** -** Requirements: -** [H12221] [H12223] +** This function is accessible to SQL statements via the +** [last_insert_rowid() SQL function]. ** ** If a separate thread performs a new [INSERT] on the same ** database connection while the [sqlite3_last_insert_rowid()] @@ -1755,24 +2253,25 @@ SQLITE_API int sqlite3_extended_result_codes(sqlite3*, int onoff); SQLITE_API sqlite3_int64 sqlite3_last_insert_rowid(sqlite3*); /* -** CAPI3REF: Count The Number Of Rows Modified {H12240} +** CAPI3REF: Count The Number Of Rows Modified ** -** This function returns the number of database rows that were changed +** ^This function returns the number of database rows that were changed ** or inserted or deleted by the most recently completed SQL statement ** on the [database connection] specified by the first parameter. -** Only changes that are directly specified by the [INSERT], [UPDATE], +** ^(Only changes that are directly specified by the [INSERT], [UPDATE], ** or [DELETE] statement are counted. Auxiliary changes caused by -** triggers are not counted. Use the [sqlite3_total_changes()] function -** to find the total number of changes including changes caused by triggers. +** triggers or [foreign key actions] are not counted.)^ Use the +** [sqlite3_total_changes()] function to find the total number of changes +** including changes caused by triggers and foreign key actions. ** -** Changes to a view that are simulated by an [INSTEAD OF trigger] +** ^Changes to a view that are simulated by an [INSTEAD OF trigger] ** are not counted. Only real table changes are counted. ** -** A "row change" is a change to a single row of a single table +** ^(A "row change" is a change to a single row of a single table ** caused by an INSERT, DELETE, or UPDATE statement. Rows that ** are changed as side effects of [REPLACE] constraint resolution, ** rollback, ABORT processing, [DROP TABLE], or by any other -** mechanisms do not count as direct row changes. +** mechanisms do not count as direct row changes.)^ ** ** A "trigger context" is a scope of execution that begins and ** ends with the script of a [CREATE TRIGGER | trigger]. @@ -1782,27 +2281,24 @@ SQLITE_API sqlite3_int64 sqlite3_last_insert_rowid(sqlite3*); ** new trigger context is entered for the duration of that one ** trigger. Subtriggers create subcontexts for their duration. ** -** Calling [sqlite3_exec()] or [sqlite3_step()] recursively does +** ^Calling [sqlite3_exec()] or [sqlite3_step()] recursively does ** not create a new trigger context. ** -** This function returns the number of direct row changes in the +** ^This function returns the number of direct row changes in the ** most recent INSERT, UPDATE, or DELETE statement within the same ** trigger context. ** -** Thus, when called from the top level, this function returns the +** ^Thus, when called from the top level, this function returns the ** number of changes in the most recent INSERT, UPDATE, or DELETE -** that also occurred at the top level. Within the body of a trigger, +** that also occurred at the top level. ^(Within the body of a trigger, ** the sqlite3_changes() interface can be called to find the number of ** changes in the most recently completed INSERT, UPDATE, or DELETE ** statement within the body of the same trigger. ** However, the number returned does not include changes -** caused by subtriggers since those have their own context. -** -** See also the [sqlite3_total_changes()] interface and the -** [count_changes pragma]. +** caused by subtriggers since those have their own context.)^ ** -** Requirements: -** [H12241] [H12243] +** See also the [sqlite3_total_changes()] interface, the +** [count_changes pragma], and the [changes() SQL function]. ** ** If a separate thread makes changes on the same database connection ** while [sqlite3_changes()] is running then the value returned @@ -1811,26 +2307,24 @@ SQLITE_API sqlite3_int64 sqlite3_last_insert_rowid(sqlite3*); SQLITE_API int sqlite3_changes(sqlite3*); /* -** CAPI3REF: Total Number Of Rows Modified {H12260} +** CAPI3REF: Total Number Of Rows Modified ** -** This function returns the number of row changes caused by [INSERT], +** ^This function returns the number of row changes caused by [INSERT], ** [UPDATE] or [DELETE] statements since the [database connection] was opened. -** The count includes all changes from all -** [CREATE TRIGGER | trigger] contexts. However, +** ^(The count returned by sqlite3_total_changes() includes all changes +** from all [CREATE TRIGGER | trigger] contexts and changes made by +** [foreign key actions]. However, ** the count does not include changes used to implement [REPLACE] constraints, ** do rollbacks or ABORT processing, or [DROP TABLE] processing. The ** count does not include rows of views that fire an [INSTEAD OF trigger], ** though if the INSTEAD OF trigger makes changes of its own, those changes -** are counted. -** The changes are counted as soon as the statement that makes them is -** completed (when the statement handle is passed to [sqlite3_reset()] or -** [sqlite3_finalize()]). +** are counted.)^ +** ^The sqlite3_total_changes() function counts the changes as soon as +** the statement that makes them is completed (when the statement handle +** is passed to [sqlite3_reset()] or [sqlite3_finalize()]). ** -** See also the [sqlite3_changes()] interface and the -** [count_changes pragma]. -** -** Requirements: -** [H12261] [H12263] +** See also the [sqlite3_changes()] interface, the +** [count_changes pragma], and the [total_changes() SQL function]. ** ** If a separate thread makes changes on the same database connection ** while [sqlite3_total_changes()] is running then the value @@ -1839,75 +2333,70 @@ SQLITE_API int sqlite3_changes(sqlite3*); SQLITE_API int sqlite3_total_changes(sqlite3*); /* -** CAPI3REF: Interrupt A Long-Running Query {H12270} +** CAPI3REF: Interrupt A Long-Running Query ** -** This function causes any pending database operation to abort and +** ^This function causes any pending database operation to abort and ** return at its earliest opportunity. This routine is typically ** called in response to a user action such as pressing "Cancel" ** or Ctrl-C where the user wants a long query operation to halt ** immediately. ** -** It is safe to call this routine from a thread different from the +** ^It is safe to call this routine from a thread different from the ** thread that is currently running the database operation. But it ** is not safe to call this routine with a [database connection] that ** is closed or might close before sqlite3_interrupt() returns. ** -** If an SQL operation is very nearly finished at the time when +** ^If an SQL operation is very nearly finished at the time when ** sqlite3_interrupt() is called, then it might not have an opportunity ** to be interrupted and might continue to completion. ** -** An SQL operation that is interrupted will return [SQLITE_INTERRUPT]. -** If the interrupted SQL operation is an INSERT, UPDATE, or DELETE +** ^An SQL operation that is interrupted will return [SQLITE_INTERRUPT]. +** ^If the interrupted SQL operation is an INSERT, UPDATE, or DELETE ** that is inside an explicit transaction, then the entire transaction ** will be rolled back automatically. ** -** The sqlite3_interrupt(D) call is in effect until all currently running -** SQL statements on [database connection] D complete. Any new SQL statements +** ^The sqlite3_interrupt(D) call is in effect until all currently running +** SQL statements on [database connection] D complete. ^Any new SQL statements ** that are started after the sqlite3_interrupt() call and before the ** running statements reaches zero are interrupted as if they had been -** running prior to the sqlite3_interrupt() call. New SQL statements +** running prior to the sqlite3_interrupt() call. ^New SQL statements ** that are started after the running statement count reaches zero are ** not effected by the sqlite3_interrupt(). -** A call to sqlite3_interrupt(D) that occurs when there are no running +** ^A call to sqlite3_interrupt(D) that occurs when there are no running ** SQL statements is a no-op and has no effect on SQL statements ** that are started after the sqlite3_interrupt() call returns. ** -** Requirements: -** [H12271] [H12272] -** ** If the database connection closes while [sqlite3_interrupt()] ** is running then bad things will likely happen. */ SQLITE_API void sqlite3_interrupt(sqlite3*); /* -** CAPI3REF: Determine If An SQL Statement Is Complete {H10510} +** CAPI3REF: Determine If An SQL Statement Is Complete ** ** These routines are useful during command-line input to determine if the ** currently entered text seems to form a complete SQL statement or ** if additional input is needed before sending the text into -** SQLite for parsing. These routines return 1 if the input string -** appears to be a complete SQL statement. A statement is judged to be +** SQLite for parsing. ^These routines return 1 if the input string +** appears to be a complete SQL statement. ^A statement is judged to be ** complete if it ends with a semicolon token and is not a prefix of a -** well-formed CREATE TRIGGER statement. Semicolons that are embedded within +** well-formed CREATE TRIGGER statement. ^Semicolons that are embedded within ** string literals or quoted identifier names or comments are not ** independent tokens (they are part of the token in which they are -** embedded) and thus do not count as a statement terminator. Whitespace +** embedded) and thus do not count as a statement terminator. ^Whitespace ** and comments that follow the final semicolon are ignored. ** -** These routines return 0 if the statement is incomplete. If a +** ^These routines return 0 if the statement is incomplete. ^If a ** memory allocation fails, then SQLITE_NOMEM is returned. ** -** These routines do not parse the SQL statements thus +** ^These routines do not parse the SQL statements thus ** will not detect syntactically incorrect SQL. ** -** If SQLite has not been initialized using [sqlite3_initialize()] prior +** ^(If SQLite has not been initialized using [sqlite3_initialize()] prior ** to invoking sqlite3_complete16() then sqlite3_initialize() is invoked ** automatically by sqlite3_complete16(). If that initialization fails, ** then the return value from sqlite3_complete16() will be non-zero -** regardless of whether or not the input SQL is complete. -** -** Requirements: [H10511] [H10512] +** regardless of whether or not the input SQL is complete.)^ ** ** The input to [sqlite3_complete()] must be a zero-terminated ** UTF-8 string. @@ -1919,27 +2408,27 @@ SQLITE_API int sqlite3_complete(const char *sql); SQLITE_API int sqlite3_complete16(const void *sql); /* -** CAPI3REF: Register A Callback To Handle SQLITE_BUSY Errors {H12310} +** CAPI3REF: Register A Callback To Handle SQLITE_BUSY Errors ** -** This routine sets a callback function that might be invoked whenever +** ^This routine sets a callback function that might be invoked whenever ** an attempt is made to open a database table that another thread ** or process has locked. ** -** If the busy callback is NULL, then [SQLITE_BUSY] or [SQLITE_IOERR_BLOCKED] -** is returned immediately upon encountering the lock. If the busy callback -** is not NULL, then the callback will be invoked with two arguments. +** ^If the busy callback is NULL, then [SQLITE_BUSY] or [SQLITE_IOERR_BLOCKED] +** is returned immediately upon encountering the lock. ^If the busy callback +** is not NULL, then the callback might be invoked with two arguments. ** -** The first argument to the handler is a copy of the void* pointer which -** is the third argument to sqlite3_busy_handler(). The second argument to -** the handler callback is the number of times that the busy handler has -** been invoked for this locking event. If the +** ^The first argument to the busy handler is a copy of the void* pointer which +** is the third argument to sqlite3_busy_handler(). ^The second argument to +** the busy handler callback is the number of times that the busy handler has +** been invoked for this locking event. ^If the ** busy callback returns 0, then no additional attempts are made to ** access the database and [SQLITE_BUSY] or [SQLITE_IOERR_BLOCKED] is returned. -** If the callback returns non-zero, then another attempt +** ^If the callback returns non-zero, then another attempt ** is made to open the database for reading and the cycle repeats. ** ** The presence of a busy handler does not guarantee that it will be invoked -** when there is lock contention. If SQLite determines that invoking the busy +** when there is lock contention. ^If SQLite determines that invoking the busy ** handler could result in a deadlock, it will go ahead and return [SQLITE_BUSY] ** or [SQLITE_IOERR_BLOCKED] instead of invoking the busy handler. ** Consider a scenario where one process is holding a read lock that @@ -1953,65 +2442,62 @@ SQLITE_API int sqlite3_complete16(const void *sql); ** will induce the first process to release its read lock and allow ** the second process to proceed. ** -** The default busy callback is NULL. +** ^The default busy callback is NULL. ** -** The [SQLITE_BUSY] error is converted to [SQLITE_IOERR_BLOCKED] +** ^The [SQLITE_BUSY] error is converted to [SQLITE_IOERR_BLOCKED] ** when SQLite is in the middle of a large transaction where all the ** changes will not fit into the in-memory cache. SQLite will ** already hold a RESERVED lock on the database file, but it needs ** to promote this lock to EXCLUSIVE so that it can spill cache ** pages into the database file without harm to concurrent -** readers. If it is unable to promote the lock, then the in-memory +** readers. ^If it is unable to promote the lock, then the in-memory ** cache will be left in an inconsistent state and so the error ** code is promoted from the relatively benign [SQLITE_BUSY] to -** the more severe [SQLITE_IOERR_BLOCKED]. This error code promotion +** the more severe [SQLITE_IOERR_BLOCKED]. ^This error code promotion ** forces an automatic rollback of the changes. See the ** ** CorruptionFollowingBusyError wiki page for a discussion of why ** this is important. ** -** There can only be a single busy handler defined for each +** ^(There can only be a single busy handler defined for each ** [database connection]. Setting a new busy handler clears any -** previously set handler. Note that calling [sqlite3_busy_timeout()] +** previously set handler.)^ ^Note that calling [sqlite3_busy_timeout()] ** will also set or clear the busy handler. ** ** The busy callback should not take any actions which modify the ** database connection that invoked the busy handler. Any such actions ** result in undefined behavior. ** -** Requirements: -** [H12311] [H12312] [H12314] [H12316] [H12318] -** ** A busy handler must not close the database connection ** or [prepared statement] that invoked the busy handler. */ SQLITE_API int sqlite3_busy_handler(sqlite3*, int(*)(void*,int), void*); /* -** CAPI3REF: Set A Busy Timeout {H12340} +** CAPI3REF: Set A Busy Timeout ** -** This routine sets a [sqlite3_busy_handler | busy handler] that sleeps -** for a specified amount of time when a table is locked. The handler +** ^This routine sets a [sqlite3_busy_handler | busy handler] that sleeps +** for a specified amount of time when a table is locked. ^The handler ** will sleep multiple times until at least "ms" milliseconds of sleeping -** have accumulated. {H12343} After "ms" milliseconds of sleeping, +** have accumulated. ^After at least "ms" milliseconds of sleeping, ** the handler returns 0 which causes [sqlite3_step()] to return ** [SQLITE_BUSY] or [SQLITE_IOERR_BLOCKED]. ** -** Calling this routine with an argument less than or equal to zero +** ^Calling this routine with an argument less than or equal to zero ** turns off all busy handlers. ** -** There can only be a single busy handler for a particular +** ^(There can only be a single busy handler for a particular ** [database connection] any any given moment. If another busy handler ** was defined (using [sqlite3_busy_handler()]) prior to calling -** this routine, that other busy handler is cleared. -** -** Requirements: -** [H12341] [H12343] [H12344] +** this routine, that other busy handler is cleared.)^ */ SQLITE_API int sqlite3_busy_timeout(sqlite3*, int ms); /* -** CAPI3REF: Convenience Routines For Running Queries {H12370} +** CAPI3REF: Convenience Routines For Running Queries +** +** This is a legacy interface that is preserved for backwards compatibility. +** Use of this interface is not recommended. ** ** Definition: A result table is memory data structure created by the ** [sqlite3_get_table()] interface. A result table records the @@ -2033,7 +2519,7 @@ SQLITE_API int sqlite3_busy_timeout(sqlite3*, int ms); ** It is not safe to pass a result table directly to [sqlite3_free()]. ** A result table should be deallocated using [sqlite3_free_table()]. ** -** As an example of the result table format, suppose a query result +** ^(As an example of the result table format, suppose a query result ** is as follows: ** **
    @@ -2057,15 +2543,15 @@ SQLITE_API int sqlite3_busy_timeout(sqlite3*, int ms);
     **        azResult[5] = "28";
     **        azResult[6] = "Cindy";
     **        azResult[7] = "21";
    -** 
    +** )^ ** -** The sqlite3_get_table() function evaluates one or more +** ^The sqlite3_get_table() function evaluates one or more ** semicolon-separated SQL statements in the zero-terminated UTF-8 -** string of its 2nd parameter. It returns a result table to the +** string of its 2nd parameter and returns a result table to the ** pointer given in its 3rd parameter. ** -** After the calling function has finished using the result, it should -** pass the pointer to the result table to sqlite3_free_table() in order to +** After the application has finished with the result from sqlite3_get_table(), +** it must pass the result table pointer to sqlite3_free_table() in order to ** release the memory that was malloced. Because of the way the ** [sqlite3_malloc()] happens within sqlite3_get_table(), the calling ** function must not try to call [sqlite3_free()] directly. Only @@ -2076,10 +2562,8 @@ SQLITE_API int sqlite3_busy_timeout(sqlite3*, int ms); ** to any internal data structures of SQLite. It uses only the public ** interface defined here. As a consequence, errors that occur in the ** wrapper layer outside of the internal [sqlite3_exec()] call are not -** reflected in subsequent calls to [sqlite3_errcode()] or [sqlite3_errmsg()]. -** -** Requirements: -** [H12371] [H12373] [H12374] [H12376] [H12379] [H12382] +** reflected in subsequent calls to [sqlite3_errcode()] or +** [sqlite3_errmsg()]. */ SQLITE_API int sqlite3_get_table( sqlite3 *db, /* An open database */ @@ -2092,45 +2576,47 @@ SQLITE_API int sqlite3_get_table( SQLITE_API void sqlite3_free_table(char **result); /* -** CAPI3REF: Formatted String Printing Functions {H17400} +** CAPI3REF: Formatted String Printing Functions ** -** These routines are workalikes of the "printf()" family of functions +** These routines are work-alikes of the "printf()" family of functions ** from the standard C library. ** -** The sqlite3_mprintf() and sqlite3_vmprintf() routines write their +** ^The sqlite3_mprintf() and sqlite3_vmprintf() routines write their ** results into memory obtained from [sqlite3_malloc()]. ** The strings returned by these two routines should be -** released by [sqlite3_free()]. Both routines return a +** released by [sqlite3_free()]. ^Both routines return a ** NULL pointer if [sqlite3_malloc()] is unable to allocate enough ** memory to hold the resulting string. ** -** In sqlite3_snprintf() routine is similar to "snprintf()" from +** ^(The sqlite3_snprintf() routine is similar to "snprintf()" from ** the standard C library. The result is written into the ** buffer supplied as the second parameter whose size is given by ** the first parameter. Note that the order of the -** first two parameters is reversed from snprintf(). This is an +** first two parameters is reversed from snprintf().)^ This is an ** historical accident that cannot be fixed without breaking -** backwards compatibility. Note also that sqlite3_snprintf() +** backwards compatibility. ^(Note also that sqlite3_snprintf() ** returns a pointer to its buffer instead of the number of -** characters actually written into the buffer. We admit that +** characters actually written into the buffer.)^ We admit that ** the number of characters written would be a more useful return ** value but we cannot change the implementation of sqlite3_snprintf() ** now without breaking compatibility. ** -** As long as the buffer size is greater than zero, sqlite3_snprintf() -** guarantees that the buffer is always zero-terminated. The first +** ^As long as the buffer size is greater than zero, sqlite3_snprintf() +** guarantees that the buffer is always zero-terminated. ^The first ** parameter "n" is the total size of the buffer, including space for ** the zero terminator. So the longest string that can be completely ** written will be n-1 characters. ** +** ^The sqlite3_vsnprintf() routine is a varargs version of sqlite3_snprintf(). +** ** These routines all implement some additional formatting ** options that are useful for constructing SQL statements. ** All of the usual printf() formatting options apply. In addition, there ** is are "%q", "%Q", and "%z" options. ** -** The %q option works like %s in that it substitutes a null-terminated +** ^(The %q option works like %s in that it substitutes a nul-terminated ** string from the argument list. But %q also doubles every '\'' character. -** %q is designed for use inside a string literal. By doubling each '\'' +** %q is designed for use inside a string literal.)^ By doubling each '\'' ** character it escapes that character and allows it to be inserted into ** the string. ** @@ -2165,10 +2651,10 @@ SQLITE_API void sqlite3_free_table(char **result); ** This second example is an SQL syntax error. As a general rule you should ** always use %q instead of %s when inserting text into a string literal. ** -** The %Q option works like %q except it also adds single quotes around +** ^(The %Q option works like %q except it also adds single quotes around ** the outside of the total string. Additionally, if the parameter in the ** argument list is a NULL pointer, %Q substitutes the text "NULL" (without -** single quotes) in place of the %Q option. So, for example, one could say: +** single quotes).)^ So, for example, one could say: ** **
     **  char *zSQL = sqlite3_mprintf("INSERT INTO table VALUES(%Q)", zText);
    @@ -2179,35 +2665,33 @@ SQLITE_API void sqlite3_free_table(char **result);
     ** The code above will render a correct SQL statement in the zSQL
     ** variable even if the zText variable is a NULL pointer.
     **
    -** The "%z" formatting option works exactly like "%s" with the
    +** ^(The "%z" formatting option works like "%s" but with the
     ** addition that after the string has been read and copied into
    -** the result, [sqlite3_free()] is called on the input string. {END}
    -**
    -** Requirements:
    -** [H17403] [H17406] [H17407]
    +** the result, [sqlite3_free()] is called on the input string.)^
     */
     SQLITE_API char *sqlite3_mprintf(const char*,...);
     SQLITE_API char *sqlite3_vmprintf(const char*, va_list);
     SQLITE_API char *sqlite3_snprintf(int,char*,const char*, ...);
    +SQLITE_API char *sqlite3_vsnprintf(int,char*,const char*, va_list);
     
     /*
    -** CAPI3REF: Memory Allocation Subsystem {H17300} 
    +** CAPI3REF: Memory Allocation Subsystem
     **
    -** The SQLite core  uses these three routines for all of its own
    +** The SQLite core uses these three routines for all of its own
     ** internal memory allocation needs. "Core" in the previous sentence
     ** does not include operating-system specific VFS implementation.  The
     ** Windows VFS uses native malloc() and free() for some operations.
     **
    -** The sqlite3_malloc() routine returns a pointer to a block
    +** ^The sqlite3_malloc() routine returns a pointer to a block
     ** of memory at least N bytes in length, where N is the parameter.
    -** If sqlite3_malloc() is unable to obtain sufficient free
    -** memory, it returns a NULL pointer.  If the parameter N to
    +** ^If sqlite3_malloc() is unable to obtain sufficient free
    +** memory, it returns a NULL pointer.  ^If the parameter N to
     ** sqlite3_malloc() is zero or negative then sqlite3_malloc() returns
     ** a NULL pointer.
     **
    -** Calling sqlite3_free() with a pointer previously returned
    +** ^Calling sqlite3_free() with a pointer previously returned
     ** by sqlite3_malloc() or sqlite3_realloc() releases that memory so
    -** that it might be reused.  The sqlite3_free() routine is
    +** that it might be reused.  ^The sqlite3_free() routine is
     ** a no-op if is called with a NULL pointer.  Passing a NULL pointer
     ** to sqlite3_free() is harmless.  After being freed, memory
     ** should neither be read nor written.  Even reading previously freed
    @@ -2216,52 +2700,41 @@ SQLITE_API char *sqlite3_snprintf(int,char*,const char*, ...);
     ** might result if sqlite3_free() is called with a non-NULL pointer that
     ** was not obtained from sqlite3_malloc() or sqlite3_realloc().
     **
    -** The sqlite3_realloc() interface attempts to resize a
    +** ^(The sqlite3_realloc() interface attempts to resize a
     ** prior memory allocation to be at least N bytes, where N is the
     ** second parameter.  The memory allocation to be resized is the first
    -** parameter.  If the first parameter to sqlite3_realloc()
    +** parameter.)^ ^ If the first parameter to sqlite3_realloc()
     ** is a NULL pointer then its behavior is identical to calling
     ** sqlite3_malloc(N) where N is the second parameter to sqlite3_realloc().
    -** If the second parameter to sqlite3_realloc() is zero or
    +** ^If the second parameter to sqlite3_realloc() is zero or
     ** negative then the behavior is exactly the same as calling
     ** sqlite3_free(P) where P is the first parameter to sqlite3_realloc().
    -** sqlite3_realloc() returns a pointer to a memory allocation
    +** ^sqlite3_realloc() returns a pointer to a memory allocation
     ** of at least N bytes in size or NULL if sufficient memory is unavailable.
    -** If M is the size of the prior allocation, then min(N,M) bytes
    +** ^If M is the size of the prior allocation, then min(N,M) bytes
     ** of the prior allocation are copied into the beginning of buffer returned
     ** by sqlite3_realloc() and the prior allocation is freed.
    -** If sqlite3_realloc() returns NULL, then the prior allocation
    +** ^If sqlite3_realloc() returns NULL, then the prior allocation
     ** is not freed.
     **
    -** The memory returned by sqlite3_malloc() and sqlite3_realloc()
    -** is always aligned to at least an 8 byte boundary. {END}
    -**
    -** The default implementation of the memory allocation subsystem uses
    -** the malloc(), realloc() and free() provided by the standard C library.
    -** {H17382} However, if SQLite is compiled with the
    -** SQLITE_MEMORY_SIZE=NNN C preprocessor macro (where NNN
    -** is an integer), then SQLite create a static array of at least
    -** NNN bytes in size and uses that array for all of its dynamic
    -** memory allocation needs. {END}  Additional memory allocator options
    -** may be added in future releases.
    +** ^The memory returned by sqlite3_malloc() and sqlite3_realloc()
    +** is always aligned to at least an 8 byte boundary, or to a
    +** 4 byte boundary if the [SQLITE_4_BYTE_ALIGNED_MALLOC] compile-time
    +** option is used.
     **
     ** In SQLite version 3.5.0 and 3.5.1, it was possible to define
     ** the SQLITE_OMIT_MEMORY_ALLOCATION which would cause the built-in
     ** implementation of these routines to be omitted.  That capability
     ** is no longer provided.  Only built-in memory allocators can be used.
     **
    -** The Windows OS interface layer calls
    +** Prior to SQLite version 3.7.10, the Windows OS interface layer called
     ** the system malloc() and free() directly when converting
     ** filenames between the UTF-8 encoding used by SQLite
     ** and whatever filename encoding is used by the particular Windows
    -** installation.  Memory allocation errors are detected, but
    -** they are reported back as [SQLITE_CANTOPEN] or
    +** installation.  Memory allocation errors were detected, but
    +** they were reported back as [SQLITE_CANTOPEN] or
     ** [SQLITE_IOERR] rather than [SQLITE_NOMEM].
     **
    -** Requirements:
    -** [H17303] [H17304] [H17305] [H17306] [H17310] [H17312] [H17315] [H17318]
    -** [H17321] [H17322] [H17323]
    -**
     ** The pointer arguments to [sqlite3_free()] and [sqlite3_realloc()]
     ** must be either NULL or else pointers obtained from a prior
     ** invocation of [sqlite3_malloc()] or [sqlite3_realloc()] that have
    @@ -2276,20 +2749,33 @@ SQLITE_API void *sqlite3_realloc(void*, int);
     SQLITE_API void sqlite3_free(void*);
     
     /*
    -** CAPI3REF: Memory Allocator Statistics {H17370} 
    +** CAPI3REF: Memory Allocator Statistics
     **
     ** SQLite provides these two interfaces for reporting on the status
     ** of the [sqlite3_malloc()], [sqlite3_free()], and [sqlite3_realloc()]
     ** routines, which form the built-in memory allocation subsystem.
     **
    -** Requirements:
    -** [H17371] [H17373] [H17374] [H17375]
    +** ^The [sqlite3_memory_used()] routine returns the number of bytes
    +** of memory currently outstanding (malloced but not freed).
    +** ^The [sqlite3_memory_highwater()] routine returns the maximum
    +** value of [sqlite3_memory_used()] since the high-water mark
    +** was last reset.  ^The values returned by [sqlite3_memory_used()] and
    +** [sqlite3_memory_highwater()] include any overhead
    +** added by SQLite in its implementation of [sqlite3_malloc()],
    +** but not overhead added by the any underlying system library
    +** routines that [sqlite3_malloc()] may call.
    +**
    +** ^The memory high-water mark is reset to the current value of
    +** [sqlite3_memory_used()] if and only if the parameter to
    +** [sqlite3_memory_highwater()] is true.  ^The value returned
    +** by [sqlite3_memory_highwater(1)] is the high-water mark
    +** prior to the reset.
     */
     SQLITE_API sqlite3_int64 sqlite3_memory_used(void);
     SQLITE_API sqlite3_int64 sqlite3_memory_highwater(int resetFlag);
     
     /*
    -** CAPI3REF: Pseudo-Random Number Generator {H17390} 
    +** CAPI3REF: Pseudo-Random Number Generator
     **
     ** SQLite contains a high-quality pseudo-random number generator (PRNG) used to
     ** select random [ROWID | ROWIDs] when inserting new records into a table that
    @@ -2297,60 +2783,57 @@ SQLITE_API sqlite3_int64 sqlite3_memory_highwater(int resetFlag);
     ** the build-in random() and randomblob() SQL functions.  This interface allows
     ** applications to access the same PRNG for other purposes.
     **
    -** A call to this routine stores N bytes of randomness into buffer P.
    +** ^A call to this routine stores N bytes of randomness into buffer P.
     **
    -** The first time this routine is invoked (either internally or by
    +** ^The first time this routine is invoked (either internally or by
     ** the application) the PRNG is seeded using randomness obtained
     ** from the xRandomness method of the default [sqlite3_vfs] object.
    -** On all subsequent invocations, the pseudo-randomness is generated
    +** ^On all subsequent invocations, the pseudo-randomness is generated
     ** internally and without recourse to the [sqlite3_vfs] xRandomness
     ** method.
    -**
    -** Requirements:
    -** [H17392]
     */
     SQLITE_API void sqlite3_randomness(int N, void *P);
     
     /*
    -** CAPI3REF: Compile-Time Authorization Callbacks {H12500} 
    +** CAPI3REF: Compile-Time Authorization Callbacks
     **
    -** This routine registers a authorizer callback with a particular
    +** ^This routine registers an authorizer callback with a particular
     ** [database connection], supplied in the first argument.
    -** The authorizer callback is invoked as SQL statements are being compiled
    +** ^The authorizer callback is invoked as SQL statements are being compiled
     ** by [sqlite3_prepare()] or its variants [sqlite3_prepare_v2()],
    -** [sqlite3_prepare16()] and [sqlite3_prepare16_v2()].  At various
    +** [sqlite3_prepare16()] and [sqlite3_prepare16_v2()].  ^At various
     ** points during the compilation process, as logic is being created
     ** to perform various actions, the authorizer callback is invoked to
    -** see if those actions are allowed.  The authorizer callback should
    +** see if those actions are allowed.  ^The authorizer callback should
     ** return [SQLITE_OK] to allow the action, [SQLITE_IGNORE] to disallow the
     ** specific action but allow the SQL statement to continue to be
     ** compiled, or [SQLITE_DENY] to cause the entire SQL statement to be
    -** rejected with an error.  If the authorizer callback returns
    +** rejected with an error.  ^If the authorizer callback returns
     ** any value other than [SQLITE_IGNORE], [SQLITE_OK], or [SQLITE_DENY]
     ** then the [sqlite3_prepare_v2()] or equivalent call that triggered
     ** the authorizer will fail with an error message.
     **
     ** When the callback returns [SQLITE_OK], that means the operation
    -** requested is ok.  When the callback returns [SQLITE_DENY], the
    +** requested is ok.  ^When the callback returns [SQLITE_DENY], the
     ** [sqlite3_prepare_v2()] or equivalent call that triggered the
     ** authorizer will fail with an error message explaining that
     ** access is denied. 
     **
    -** The first parameter to the authorizer callback is a copy of the third
    -** parameter to the sqlite3_set_authorizer() interface. The second parameter
    +** ^The first parameter to the authorizer callback is a copy of the third
    +** parameter to the sqlite3_set_authorizer() interface. ^The second parameter
     ** to the callback is an integer [SQLITE_COPY | action code] that specifies
    -** the particular action to be authorized. The third through sixth parameters
    +** the particular action to be authorized. ^The third through sixth parameters
     ** to the callback are zero-terminated strings that contain additional
     ** details about the action to be authorized.
     **
    -** If the action code is [SQLITE_READ]
    +** ^If the action code is [SQLITE_READ]
     ** and the callback returns [SQLITE_IGNORE] then the
     ** [prepared statement] statement is constructed to substitute
     ** a NULL value in place of the table column that would have
     ** been read if [SQLITE_OK] had been returned.  The [SQLITE_IGNORE]
     ** return can be used to deny an untrusted user access to individual
     ** columns of a table.
    -** If the action code is [SQLITE_DELETE] and the callback returns
    +** ^If the action code is [SQLITE_DELETE] and the callback returns
     ** [SQLITE_IGNORE] then the [DELETE] operation proceeds but the
     ** [truncate optimization] is disabled and all rows are deleted individually.
     **
    @@ -2370,9 +2853,9 @@ SQLITE_API void sqlite3_randomness(int N, void *P);
     ** and limiting database size using the [max_page_count] [PRAGMA]
     ** in addition to using an authorizer.
     **
    -** Only a single authorizer can be in place on a database connection
    +** ^(Only a single authorizer can be in place on a database connection
     ** at a time.  Each call to sqlite3_set_authorizer overrides the
    -** previous call.  Disable the authorizer by installing a NULL callback.
    +** previous call.)^  ^Disable the authorizer by installing a NULL callback.
     ** The authorizer is disabled by default.
     **
     ** The authorizer callback must not do anything that will modify
    @@ -2380,20 +2863,16 @@ SQLITE_API void sqlite3_randomness(int N, void *P);
     ** Note that [sqlite3_prepare_v2()] and [sqlite3_step()] both modify their
     ** database connections for the meaning of "modify" in this paragraph.
     **
    -** When [sqlite3_prepare_v2()] is used to prepare a statement, the
    -** statement might be reprepared during [sqlite3_step()] due to a 
    +** ^When [sqlite3_prepare_v2()] is used to prepare a statement, the
    +** statement might be re-prepared during [sqlite3_step()] due to a 
     ** schema change.  Hence, the application should ensure that the
     ** correct authorizer callback remains in place during the [sqlite3_step()].
     **
    -** Note that the authorizer callback is invoked only during
    +** ^Note that the authorizer callback is invoked only during
     ** [sqlite3_prepare()] or its variants.  Authorization is not
     ** performed during statement evaluation in [sqlite3_step()], unless
     ** as stated in the previous paragraph, sqlite3_step() invokes
     ** sqlite3_prepare_v2() to reprepare a statement after a schema change.
    -**
    -** Requirements:
    -** [H12501] [H12502] [H12503] [H12504] [H12505] [H12506] [H12507] [H12510]
    -** [H12511] [H12512] [H12520] [H12521] [H12522]
     */
     SQLITE_API int sqlite3_set_authorizer(
       sqlite3*,
    @@ -2402,19 +2881,22 @@ SQLITE_API int sqlite3_set_authorizer(
     );
     
     /*
    -** CAPI3REF: Authorizer Return Codes {H12590} 
    +** CAPI3REF: Authorizer Return Codes
     **
     ** The [sqlite3_set_authorizer | authorizer callback function] must
     ** return either [SQLITE_OK] or one of these two constants in order
     ** to signal SQLite whether or not the action is permitted.  See the
     ** [sqlite3_set_authorizer | authorizer documentation] for additional
     ** information.
    +**
    +** Note that SQLITE_IGNORE is also used as a [SQLITE_ROLLBACK | return code]
    +** from the [sqlite3_vtab_on_conflict()] interface.
     */
     #define SQLITE_DENY   1   /* Abort the SQL statement with an error */
     #define SQLITE_IGNORE 2   /* Don't allow access, but don't generate an error */
     
     /*
    -** CAPI3REF: Authorizer Action Codes {H12550} 
    +** CAPI3REF: Authorizer Action Codes
     **
     ** The [sqlite3_set_authorizer()] interface registers a callback function
     ** that is invoked to authorize certain SQL statement actions.  The
    @@ -2425,15 +2907,12 @@ SQLITE_API int sqlite3_set_authorizer(
     ** These action code values signify what kind of operation is to be
     ** authorized.  The 3rd and 4th parameters to the authorization
     ** callback function will be parameters or NULL depending on which of these
    -** codes is used as the second parameter.  The 5th parameter to the
    +** codes is used as the second parameter.  ^(The 5th parameter to the
     ** authorizer callback is the name of the database ("main", "temp",
    -** etc.) if applicable.  The 6th parameter to the authorizer callback
    +** etc.) if applicable.)^  ^The 6th parameter to the authorizer callback
     ** is the name of the inner-most trigger or view that is responsible for
     ** the access attempt or NULL if this access attempt is directly from
     ** top-level SQL code.
    -**
    -** Requirements:
    -** [H12551] [H12552] [H12553] [H12554]
     */
     /******************************************* 3rd ************ 4th ***********/
     #define SQLITE_CREATE_INDEX          1   /* Index Name      Table Name      */
    @@ -2471,72 +2950,83 @@ SQLITE_API int sqlite3_set_authorizer(
     #define SQLITE_COPY                  0   /* No longer used */
     
     /*
    -** CAPI3REF: Tracing And Profiling Functions {H12280} 
    -** EXPERIMENTAL
    +** CAPI3REF: Tracing And Profiling Functions
     **
     ** These routines register callback functions that can be used for
     ** tracing and profiling the execution of SQL statements.
     **
    -** The callback function registered by sqlite3_trace() is invoked at
    +** ^The callback function registered by sqlite3_trace() is invoked at
     ** various times when an SQL statement is being run by [sqlite3_step()].
    -** The callback returns a UTF-8 rendering of the SQL statement text
    -** as the statement first begins executing.  Additional callbacks occur
    +** ^The sqlite3_trace() callback is invoked with a UTF-8 rendering of the
    +** SQL statement text as the statement first begins executing.
    +** ^(Additional sqlite3_trace() callbacks might occur
     ** as each triggered subprogram is entered.  The callbacks for triggers
    -** contain a UTF-8 SQL comment that identifies the trigger.
    +** contain a UTF-8 SQL comment that identifies the trigger.)^
     **
    -** The callback function registered by sqlite3_profile() is invoked
    -** as each SQL statement finishes.  The profile callback contains
    +** ^The callback function registered by sqlite3_profile() is invoked
    +** as each SQL statement finishes.  ^The profile callback contains
     ** the original statement text and an estimate of wall-clock time
    -** of how long that statement took to run.
    -**
    -** Requirements:
    -** [H12281] [H12282] [H12283] [H12284] [H12285] [H12287] [H12288] [H12289]
    -** [H12290]
    -*/
    -SQLITE_API SQLITE_EXPERIMENTAL void *sqlite3_trace(sqlite3*, void(*xTrace)(void*,const char*), void*);
    +** of how long that statement took to run.  ^The profile callback
    +** time is in units of nanoseconds, however the current implementation
    +** is only capable of millisecond resolution so the six least significant
    +** digits in the time are meaningless.  Future versions of SQLite
    +** might provide greater resolution on the profiler callback.  The
    +** sqlite3_profile() function is considered experimental and is
    +** subject to change in future versions of SQLite.
    +*/
    +SQLITE_API void *sqlite3_trace(sqlite3*, void(*xTrace)(void*,const char*), void*);
     SQLITE_API SQLITE_EXPERIMENTAL void *sqlite3_profile(sqlite3*,
        void(*xProfile)(void*,const char*,sqlite3_uint64), void*);
     
     /*
    -** CAPI3REF: Query Progress Callbacks {H12910} 
    +** CAPI3REF: Query Progress Callbacks
     **
    -** This routine configures a callback function - the
    -** progress callback - that is invoked periodically during long
    -** running calls to [sqlite3_exec()], [sqlite3_step()] and
    -** [sqlite3_get_table()].  An example use for this
    +** ^The sqlite3_progress_handler(D,N,X,P) interface causes the callback
    +** function X to be invoked periodically during long running calls to
    +** [sqlite3_exec()], [sqlite3_step()] and [sqlite3_get_table()] for
    +** database connection D.  An example use for this
     ** interface is to keep a GUI updated during a large query.
     **
    -** If the progress callback returns non-zero, the operation is
    +** ^The parameter P is passed through as the only parameter to the 
    +** callback function X.  ^The parameter N is the number of 
    +** [virtual machine instructions] that are evaluated between successive
    +** invocations of the callback X.
    +**
    +** ^Only a single progress handler may be defined at one time per
    +** [database connection]; setting a new progress handler cancels the
    +** old one.  ^Setting parameter X to NULL disables the progress handler.
    +** ^The progress handler is also disabled by setting N to a value less
    +** than 1.
    +**
    +** ^If the progress callback returns non-zero, the operation is
     ** interrupted.  This feature can be used to implement a
     ** "Cancel" button on a GUI progress dialog box.
     **
    -** The progress handler must not do anything that will modify
    +** The progress handler callback must not do anything that will modify
     ** the database connection that invoked the progress handler.
     ** Note that [sqlite3_prepare_v2()] and [sqlite3_step()] both modify their
     ** database connections for the meaning of "modify" in this paragraph.
     **
    -** Requirements:
    -** [H12911] [H12912] [H12913] [H12914] [H12915] [H12916] [H12917] [H12918]
    -**
     */
     SQLITE_API void sqlite3_progress_handler(sqlite3*, int, int(*)(void*), void*);
     
     /*
    -** CAPI3REF: Opening A New Database Connection {H12700} 
    +** CAPI3REF: Opening A New Database Connection
     **
    -** These routines open an SQLite database file whose name is given by the
    -** filename argument. The filename argument is interpreted as UTF-8 for
    +** ^These routines open an SQLite database file as specified by the 
    +** filename argument. ^The filename argument is interpreted as UTF-8 for
     ** sqlite3_open() and sqlite3_open_v2() and as UTF-16 in the native byte
    -** order for sqlite3_open16(). A [database connection] handle is usually
    +** order for sqlite3_open16(). ^(A [database connection] handle is usually
     ** returned in *ppDb, even if an error occurs.  The only exception is that
     ** if SQLite is unable to allocate memory to hold the [sqlite3] object,
     ** a NULL will be written into *ppDb instead of a pointer to the [sqlite3]
    -** object. If the database is opened (and/or created) successfully, then
    -** [SQLITE_OK] is returned.  Otherwise an [error code] is returned.  The
    +** object.)^ ^(If the database is opened (and/or created) successfully, then
    +** [SQLITE_OK] is returned.  Otherwise an [error code] is returned.)^ ^The
     ** [sqlite3_errmsg()] or [sqlite3_errmsg16()] routines can be used to obtain
    -** an English language description of the error.
    +** an English language description of the error following a failure of any
    +** of the sqlite3_open() routines.
     **
    -** The default encoding for the database will be UTF-8 if
    +** ^The default encoding for the database will be UTF-8 if
     ** sqlite3_open() or sqlite3_open_v2() is called and
     ** UTF-16 in the native byte order if sqlite3_open16() is used.
     **
    @@ -2546,64 +3036,175 @@ SQLITE_API void sqlite3_progress_handler(sqlite3*, int, int(*)(void*), void*);
     **
     ** The sqlite3_open_v2() interface works like sqlite3_open()
     ** except that it accepts two additional parameters for additional control
    -** over the new database connection.  The flags parameter can take one of
    +** over the new database connection.  ^(The flags parameter to
    +** sqlite3_open_v2() can take one of
     ** the following three values, optionally combined with the 
    -** [SQLITE_OPEN_NOMUTEX] or [SQLITE_OPEN_FULLMUTEX] flags:
    +** [SQLITE_OPEN_NOMUTEX], [SQLITE_OPEN_FULLMUTEX], [SQLITE_OPEN_SHAREDCACHE],
    +** [SQLITE_OPEN_PRIVATECACHE], and/or [SQLITE_OPEN_URI] flags:)^
     **
     ** 
    -**
    [SQLITE_OPEN_READONLY]
    +** ^(
    [SQLITE_OPEN_READONLY]
    **
    The database is opened in read-only mode. If the database does not -** already exist, an error is returned.
    +** already exist, an error is returned.)^ ** -**
    [SQLITE_OPEN_READWRITE]
    +** ^(
    [SQLITE_OPEN_READWRITE]
    **
    The database is opened for reading and writing if possible, or reading ** only if the file is write protected by the operating system. In either -** case the database must already exist, otherwise an error is returned.
    +** case the database must already exist, otherwise an error is returned.)^ ** -**
    [SQLITE_OPEN_READWRITE] | [SQLITE_OPEN_CREATE]
    -**
    The database is opened for reading and writing, and is creates it if +** ^(
    [SQLITE_OPEN_READWRITE] | [SQLITE_OPEN_CREATE]
    +**
    The database is opened for reading and writing, and is created if ** it does not already exist. This is the behavior that is always used for -** sqlite3_open() and sqlite3_open16().
    +** sqlite3_open() and sqlite3_open16().)^ **
    ** ** If the 3rd parameter to sqlite3_open_v2() is not one of the -** combinations shown above or one of the combinations shown above combined -** with the [SQLITE_OPEN_NOMUTEX] or [SQLITE_OPEN_FULLMUTEX] flags, +** combinations shown above optionally combined with other +** [SQLITE_OPEN_READONLY | SQLITE_OPEN_* bits] ** then the behavior is undefined. ** -** If the [SQLITE_OPEN_NOMUTEX] flag is set, then the database connection +** ^If the [SQLITE_OPEN_NOMUTEX] flag is set, then the database connection ** opens in the multi-thread [threading mode] as long as the single-thread -** mode has not been set at compile-time or start-time. If the +** mode has not been set at compile-time or start-time. ^If the ** [SQLITE_OPEN_FULLMUTEX] flag is set then the database connection opens ** in the serialized [threading mode] unless single-thread was ** previously selected at compile-time or start-time. +** ^The [SQLITE_OPEN_SHAREDCACHE] flag causes the database connection to be +** eligible to use [shared cache mode], regardless of whether or not shared +** cache is enabled using [sqlite3_enable_shared_cache()]. ^The +** [SQLITE_OPEN_PRIVATECACHE] flag causes the database connection to not +** participate in [shared cache mode] even if it is enabled. +** +** ^The fourth parameter to sqlite3_open_v2() is the name of the +** [sqlite3_vfs] object that defines the operating system interface that +** the new database connection should use. ^If the fourth parameter is +** a NULL pointer then the default [sqlite3_vfs] object is used. ** -** If the filename is ":memory:", then a private, temporary in-memory database -** is created for the connection. This in-memory database will vanish when +** ^If the filename is ":memory:", then a private, temporary in-memory database +** is created for the connection. ^This in-memory database will vanish when ** the database connection is closed. Future versions of SQLite might ** make use of additional special filenames that begin with the ":" character. ** It is recommended that when a database filename actually does begin with ** a ":" character you should prefix the filename with a pathname such as ** "./" to avoid ambiguity. ** -** If the filename is an empty string, then a private, temporary -** on-disk database will be created. This private database will be +** ^If the filename is an empty string, then a private, temporary +** on-disk database will be created. ^This private database will be ** automatically deleted as soon as the database connection is closed. ** -** The fourth parameter to sqlite3_open_v2() is the name of the -** [sqlite3_vfs] object that defines the operating system interface that -** the new database connection should use. If the fourth parameter is -** a NULL pointer then the default [sqlite3_vfs] object is used. +** [[URI filenames in sqlite3_open()]]

    URI Filenames

    +** +** ^If [URI filename] interpretation is enabled, and the filename argument +** begins with "file:", then the filename is interpreted as a URI. ^URI +** filename interpretation is enabled if the [SQLITE_OPEN_URI] flag is +** set in the fourth argument to sqlite3_open_v2(), or if it has +** been enabled globally using the [SQLITE_CONFIG_URI] option with the +** [sqlite3_config()] method or by the [SQLITE_USE_URI] compile-time option. +** As of SQLite version 3.7.7, URI filename interpretation is turned off +** by default, but future releases of SQLite might enable URI filename +** interpretation by default. See "[URI filenames]" for additional +** information. +** +** URI filenames are parsed according to RFC 3986. ^If the URI contains an +** authority, then it must be either an empty string or the string +** "localhost". ^If the authority is not an empty string or "localhost", an +** error is returned to the caller. ^The fragment component of a URI, if +** present, is ignored. +** +** ^SQLite uses the path component of the URI as the name of the disk file +** which contains the database. ^If the path begins with a '/' character, +** then it is interpreted as an absolute path. ^If the path does not begin +** with a '/' (meaning that the authority section is omitted from the URI) +** then the path is interpreted as a relative path. +** ^On windows, the first component of an absolute path +** is a drive specification (e.g. "C:"). +** +** [[core URI query parameters]] +** The query component of a URI may contain parameters that are interpreted +** either by SQLite itself, or by a [VFS | custom VFS implementation]. +** SQLite interprets the following three query parameters: +** +**
      +**
    • vfs: ^The "vfs" parameter may be used to specify the name of +** a VFS object that provides the operating system interface that should +** be used to access the database file on disk. ^If this option is set to +** an empty string the default VFS object is used. ^Specifying an unknown +** VFS is an error. ^If sqlite3_open_v2() is used and the vfs option is +** present, then the VFS specified by the option takes precedence over +** the value passed as the fourth parameter to sqlite3_open_v2(). +** +**
    • mode: ^(The mode parameter may be set to either "ro", "rw", +** "rwc", or "memory". Attempting to set it to any other value is +** an error)^. +** ^If "ro" is specified, then the database is opened for read-only +** access, just as if the [SQLITE_OPEN_READONLY] flag had been set in the +** third argument to sqlite3_prepare_v2(). ^If the mode option is set to +** "rw", then the database is opened for read-write (but not create) +** access, as if SQLITE_OPEN_READWRITE (but not SQLITE_OPEN_CREATE) had +** been set. ^Value "rwc" is equivalent to setting both +** SQLITE_OPEN_READWRITE and SQLITE_OPEN_CREATE. ^If the mode option is +** set to "memory" then a pure [in-memory database] that never reads +** or writes from disk is used. ^It is an error to specify a value for +** the mode parameter that is less restrictive than that specified by +** the flags passed in the third parameter to sqlite3_open_v2(). +** +**
    • cache: ^The cache parameter may be set to either "shared" or +** "private". ^Setting it to "shared" is equivalent to setting the +** SQLITE_OPEN_SHAREDCACHE bit in the flags argument passed to +** sqlite3_open_v2(). ^Setting the cache parameter to "private" is +** equivalent to setting the SQLITE_OPEN_PRIVATECACHE bit. +** ^If sqlite3_open_v2() is used and the "cache" parameter is present in +** a URI filename, its value overrides any behaviour requested by setting +** SQLITE_OPEN_PRIVATECACHE or SQLITE_OPEN_SHAREDCACHE flag. +**
    +** +** ^Specifying an unknown parameter in the query component of a URI is not an +** error. Future versions of SQLite might understand additional query +** parameters. See "[query parameters with special meaning to SQLite]" for +** additional information. +** +** [[URI filename examples]]

    URI filename examples

    +** +** +**
    URI filenames Results +**
    file:data.db +** Open the file "data.db" in the current directory. +**
    file:/home/fred/data.db
    +** file:///home/fred/data.db
    +** file://localhost/home/fred/data.db
    +** Open the database file "/home/fred/data.db". +**
    file://darkstar/home/fred/data.db +** An error. "darkstar" is not a recognized authority. +**
    +** file:///C:/Documents%20and%20Settings/fred/Desktop/data.db +** Windows only: Open the file "data.db" on fred's desktop on drive +** C:. Note that the %20 escaping in this example is not strictly +** necessary - space characters can be used literally +** in URI filenames. +**
    file:data.db?mode=ro&cache=private +** Open file "data.db" in the current directory for read-only access. +** Regardless of whether or not shared-cache mode is enabled by +** default, use a private cache. +**
    file:/home/fred/data.db?vfs=unix-nolock +** Open file "/home/fred/data.db". Use the special VFS "unix-nolock". +**
    file:data.db?mode=readonly +** An error. "readonly" is not a valid option for the "mode" parameter. +**
    +** +** ^URI hexadecimal escape sequences (%HH) are supported within the path and +** query components of a URI. A hexadecimal escape sequence consists of a +** percent sign - "%" - followed by exactly two hexadecimal digits +** specifying an octet value. ^Before the path or query components of a +** URI filename are interpreted, they are encoded using UTF-8 and all +** hexadecimal escape sequences replaced by a single byte containing the +** corresponding octet. If this process generates an invalid UTF-8 encoding, +** the results are undefined. ** ** Note to Windows users: The encoding used for the filename argument ** of sqlite3_open() and sqlite3_open_v2() must be UTF-8, not whatever ** codepage is currently defined. Filenames containing international ** characters must be converted to UTF-8 prior to passing them into ** sqlite3_open() or sqlite3_open_v2(). -** -** Requirements: -** [H12701] [H12702] [H12703] [H12704] [H12706] [H12707] [H12709] [H12711] -** [H12712] [H12713] [H12714] [H12717] [H12719] [H12721] [H12723] */ SQLITE_API int sqlite3_open( const char *filename, /* Database filename (UTF-8) */ @@ -2621,23 +3222,67 @@ SQLITE_API int sqlite3_open_v2( ); /* -** CAPI3REF: Error Codes And Messages {H12800} +** CAPI3REF: Obtain Values For URI Parameters +** +** These are utility routines, useful to VFS implementations, that check +** to see if a database file was a URI that contained a specific query +** parameter, and if so obtains the value of that query parameter. +** +** If F is the database filename pointer passed into the xOpen() method of +** a VFS implementation when the flags parameter to xOpen() has one or +** more of the [SQLITE_OPEN_URI] or [SQLITE_OPEN_MAIN_DB] bits set and +** P is the name of the query parameter, then +** sqlite3_uri_parameter(F,P) returns the value of the P +** parameter if it exists or a NULL pointer if P does not appear as a +** query parameter on F. If P is a query parameter of F +** has no explicit value, then sqlite3_uri_parameter(F,P) returns +** a pointer to an empty string. +** +** The sqlite3_uri_boolean(F,P,B) routine assumes that P is a boolean +** parameter and returns true (1) or false (0) according to the value +** of P. The sqlite3_uri_boolean(F,P,B) routine returns true (1) if the +** value of query parameter P is one of "yes", "true", or "on" in any +** case or if the value begins with a non-zero number. The +** sqlite3_uri_boolean(F,P,B) routines returns false (0) if the value of +** query parameter P is one of "no", "false", or "off" in any case or +** if the value begins with a numeric zero. If P is not a query +** parameter on F or if the value of P is does not match any of the +** above, then sqlite3_uri_boolean(F,P,B) returns (B!=0). +** +** The sqlite3_uri_int64(F,P,D) routine converts the value of P into a +** 64-bit signed integer and returns that integer, or D if P does not +** exist. If the value of P is something other than an integer, then +** zero is returned. +** +** If F is a NULL pointer, then sqlite3_uri_parameter(F,P) returns NULL and +** sqlite3_uri_boolean(F,P,B) returns B. If F is not a NULL pointer and +** is not a database file pathname pointer that SQLite passed into the xOpen +** VFS method, then the behavior of this routine is undefined and probably +** undesirable. +*/ +SQLITE_API const char *sqlite3_uri_parameter(const char *zFilename, const char *zParam); +SQLITE_API int sqlite3_uri_boolean(const char *zFile, const char *zParam, int bDefault); +SQLITE_API sqlite3_int64 sqlite3_uri_int64(const char*, const char*, sqlite3_int64); + + +/* +** CAPI3REF: Error Codes And Messages ** -** The sqlite3_errcode() interface returns the numeric [result code] or +** ^The sqlite3_errcode() interface returns the numeric [result code] or ** [extended result code] for the most recent failed sqlite3_* API call ** associated with a [database connection]. If a prior API call failed ** but the most recent API call succeeded, the return value from -** sqlite3_errcode() is undefined. The sqlite3_extended_errcode() +** sqlite3_errcode() is undefined. ^The sqlite3_extended_errcode() ** interface is the same except that it always returns the ** [extended result code] even when extended result codes are ** disabled. ** -** The sqlite3_errmsg() and sqlite3_errmsg16() return English-language +** ^The sqlite3_errmsg() and sqlite3_errmsg16() return English-language ** text that describes the error, as either UTF-8 or UTF-16 respectively. -** Memory to hold the error message string is managed internally. +** ^(Memory to hold the error message string is managed internally. ** The application does not need to worry about freeing the result. ** However, the error string might be overwritten or deallocated by -** subsequent calls to other SQLite interface functions. +** subsequent calls to other SQLite interface functions.)^ ** ** When the serialized [threading mode] is in use, it might be the ** case that a second error occurs on a separate thread in between @@ -2652,9 +3297,6 @@ SQLITE_API int sqlite3_open_v2( ** If an interface fails with SQLITE_MISUSE, that means the interface ** was invoked incorrectly by the application. In that case, the ** error code and message may or may not be set. -** -** Requirements: -** [H12801] [H12802] [H12803] [H12807] [H12808] [H12809] */ SQLITE_API int sqlite3_errcode(sqlite3 *db); SQLITE_API int sqlite3_extended_errcode(sqlite3 *db); @@ -2662,7 +3304,7 @@ SQLITE_API const char *sqlite3_errmsg(sqlite3*); SQLITE_API const void *sqlite3_errmsg16(sqlite3*); /* -** CAPI3REF: SQL Statement Object {H13000} +** CAPI3REF: SQL Statement Object ** KEYWORDS: {prepared statement} {prepared statements} ** ** An instance of this object represents a single SQL statement. @@ -2688,25 +3330,30 @@ SQLITE_API const void *sqlite3_errmsg16(sqlite3*); typedef struct sqlite3_stmt sqlite3_stmt; /* -** CAPI3REF: Run-time Limits {H12760} +** CAPI3REF: Run-time Limits ** -** This interface allows the size of various constructs to be limited +** ^(This interface allows the size of various constructs to be limited ** on a connection by connection basis. The first parameter is the ** [database connection] whose limit is to be set or queried. The ** second parameter is one of the [limit categories] that define a ** class of constructs to be size limited. The third parameter is the -** new limit for that construct. The function returns the old limit. +** new limit for that construct.)^ ** -** If the new limit is a negative number, the limit is unchanged. -** For the limit category of SQLITE_LIMIT_XYZ there is a +** ^If the new limit is a negative number, the limit is unchanged. +** ^(For each limit category SQLITE_LIMIT_NAME there is a ** [limits | hard upper bound] -** set by a compile-time C preprocessor macro named -** [limits | SQLITE_MAX_XYZ]. -** (The "_LIMIT_" in the name is changed to "_MAX_".) -** Attempts to increase a limit above its hard upper bound are -** silently truncated to the hard upper limit. -** -** Run time limits are intended for use in applications that manage +** set at compile-time by a C preprocessor macro called +** [limits | SQLITE_MAX_NAME]. +** (The "_LIMIT_" in the name is changed to "_MAX_".))^ +** ^Attempts to increase a limit above its hard upper bound are +** silently truncated to the hard upper bound. +** +** ^Regardless of whether or not the limit was changed, the +** [sqlite3_limit()] interface returns the prior value of the limit. +** ^Hence, to find the current value of a limit without changing it, +** simply invoke this interface with the third parameter set to -1. +** +** Run-time limits are intended for use in applications that manage ** both their own internal database and also databases that are controlled ** by untrusted external sources. An example application might be a ** web browser that has its own databases for storing history and @@ -2720,15 +3367,12 @@ typedef struct sqlite3_stmt sqlite3_stmt; ** [max_page_count] [PRAGMA]. ** ** New run-time limit categories may be added in future releases. -** -** Requirements: -** [H12762] [H12766] [H12769] */ SQLITE_API int sqlite3_limit(sqlite3*, int id, int newVal); /* -** CAPI3REF: Run-Time Limit Categories {H12790} -** KEYWORDS: {limit category} {limit categories} +** CAPI3REF: Run-Time Limit Categories +** KEYWORDS: {limit category} {*limit categories} ** ** These constants define various performance limits ** that can be lowered at run-time using [sqlite3_limit()]. @@ -2736,40 +3380,46 @@ SQLITE_API int sqlite3_limit(sqlite3*, int id, int newVal); ** Additional information is available at [limits | Limits in SQLite]. ** **
    -**
    SQLITE_LIMIT_LENGTH
    -**
    The maximum size of any string or BLOB or table row.
    +** [[SQLITE_LIMIT_LENGTH]] ^(
    SQLITE_LIMIT_LENGTH
    +**
    The maximum size of any string or BLOB or table row, in bytes.
    )^ ** -**
    SQLITE_LIMIT_SQL_LENGTH
    -**
    The maximum length of an SQL statement.
    +** [[SQLITE_LIMIT_SQL_LENGTH]] ^(
    SQLITE_LIMIT_SQL_LENGTH
    +**
    The maximum length of an SQL statement, in bytes.
    )^ ** -**
    SQLITE_LIMIT_COLUMN
    +** [[SQLITE_LIMIT_COLUMN]] ^(
    SQLITE_LIMIT_COLUMN
    **
    The maximum number of columns in a table definition or in the ** result set of a [SELECT] or the maximum number of columns in an index -** or in an ORDER BY or GROUP BY clause.
    +** or in an ORDER BY or GROUP BY clause.)^ ** -**
    SQLITE_LIMIT_EXPR_DEPTH
    -**
    The maximum depth of the parse tree on any expression.
    +** [[SQLITE_LIMIT_EXPR_DEPTH]] ^(
    SQLITE_LIMIT_EXPR_DEPTH
    +**
    The maximum depth of the parse tree on any expression.
    )^ ** -**
    SQLITE_LIMIT_COMPOUND_SELECT
    -**
    The maximum number of terms in a compound SELECT statement.
    +** [[SQLITE_LIMIT_COMPOUND_SELECT]] ^(
    SQLITE_LIMIT_COMPOUND_SELECT
    +**
    The maximum number of terms in a compound SELECT statement.
    )^ ** -**
    SQLITE_LIMIT_VDBE_OP
    +** [[SQLITE_LIMIT_VDBE_OP]] ^(
    SQLITE_LIMIT_VDBE_OP
    **
    The maximum number of instructions in a virtual machine program -** used to implement an SQL statement.
    +** used to implement an SQL statement. This limit is not currently +** enforced, though that might be added in some future release of +** SQLite.)^ ** -**
    SQLITE_LIMIT_FUNCTION_ARG
    -**
    The maximum number of arguments on a function.
    +** [[SQLITE_LIMIT_FUNCTION_ARG]] ^(
    SQLITE_LIMIT_FUNCTION_ARG
    +**
    The maximum number of arguments on a function.
    )^ ** -**
    SQLITE_LIMIT_ATTACHED
    -**
    The maximum number of [ATTACH | attached databases].
    +** [[SQLITE_LIMIT_ATTACHED]] ^(
    SQLITE_LIMIT_ATTACHED
    +**
    The maximum number of [ATTACH | attached databases].)^
    ** -**
    SQLITE_LIMIT_LIKE_PATTERN_LENGTH
    +** [[SQLITE_LIMIT_LIKE_PATTERN_LENGTH]] +** ^(
    SQLITE_LIMIT_LIKE_PATTERN_LENGTH
    **
    The maximum length of the pattern argument to the [LIKE] or -** [GLOB] operators.
    +** [GLOB] operators.)^ ** -**
    SQLITE_LIMIT_VARIABLE_NUMBER
    -**
    The maximum number of variables in an SQL statement that can -** be bound.
    +** [[SQLITE_LIMIT_VARIABLE_NUMBER]] +** ^(
    SQLITE_LIMIT_VARIABLE_NUMBER
    +**
    The maximum index number of any [parameter] in an SQL statement.)^ +** +** [[SQLITE_LIMIT_TRIGGER_DEPTH]] ^(
    SQLITE_LIMIT_TRIGGER_DEPTH
    +**
    The maximum depth of recursion for triggers.
    )^ **
    */ #define SQLITE_LIMIT_LENGTH 0 @@ -2782,9 +3432,10 @@ SQLITE_API int sqlite3_limit(sqlite3*, int id, int newVal); #define SQLITE_LIMIT_ATTACHED 7 #define SQLITE_LIMIT_LIKE_PATTERN_LENGTH 8 #define SQLITE_LIMIT_VARIABLE_NUMBER 9 +#define SQLITE_LIMIT_TRIGGER_DEPTH 10 /* -** CAPI3REF: Compiling An SQL Statement {H13010} +** CAPI3REF: Compiling An SQL Statement ** KEYWORDS: {SQL statement compiler} ** ** To execute an SQL query, it must first be compiled into a byte-code @@ -2799,64 +3450,70 @@ SQLITE_API int sqlite3_limit(sqlite3*, int id, int newVal); ** interfaces use UTF-8, and sqlite3_prepare16() and sqlite3_prepare16_v2() ** use UTF-16. ** -** If the nByte argument is less than zero, then zSql is read up to the -** first zero terminator. If nByte is non-negative, then it is the maximum -** number of bytes read from zSql. When nByte is non-negative, the +** ^If the nByte argument is less than zero, then zSql is read up to the +** first zero terminator. ^If nByte is non-negative, then it is the maximum +** number of bytes read from zSql. ^When nByte is non-negative, the ** zSql string ends at either the first '\000' or '\u0000' character or ** the nByte-th byte, whichever comes first. If the caller knows ** that the supplied string is nul-terminated, then there is a small ** performance advantage to be gained by passing an nByte parameter that ** is equal to the number of bytes in the input string including -** the nul-terminator bytes. +** the nul-terminator bytes as this saves SQLite from having to +** make a copy of the input string. ** -** If pzTail is not NULL then *pzTail is made to point to the first byte +** ^If pzTail is not NULL then *pzTail is made to point to the first byte ** past the end of the first SQL statement in zSql. These routines only ** compile the first statement in zSql, so *pzTail is left pointing to ** what remains uncompiled. ** -** *ppStmt is left pointing to a compiled [prepared statement] that can be -** executed using [sqlite3_step()]. If there is an error, *ppStmt is set -** to NULL. If the input text contains no SQL (if the input is an empty +** ^*ppStmt is left pointing to a compiled [prepared statement] that can be +** executed using [sqlite3_step()]. ^If there is an error, *ppStmt is set +** to NULL. ^If the input text contains no SQL (if the input is an empty ** string or a comment) then *ppStmt is set to NULL. ** The calling procedure is responsible for deleting the compiled ** SQL statement using [sqlite3_finalize()] after it has finished with it. ** ppStmt may not be NULL. ** -** On success, [SQLITE_OK] is returned, otherwise an [error code] is returned. +** ^On success, the sqlite3_prepare() family of routines return [SQLITE_OK]; +** otherwise an [error code] is returned. ** ** The sqlite3_prepare_v2() and sqlite3_prepare16_v2() interfaces are ** recommended for all new programs. The two older interfaces are retained ** for backwards compatibility, but their use is discouraged. -** In the "v2" interfaces, the prepared statement +** ^In the "v2" interfaces, the prepared statement ** that is returned (the [sqlite3_stmt] object) contains a copy of the ** original SQL text. This causes the [sqlite3_step()] interface to -** behave a differently in two ways: +** behave differently in three ways: ** **
      **
    1. -** If the database schema changes, instead of returning [SQLITE_SCHEMA] as it +** ^If the database schema changes, instead of returning [SQLITE_SCHEMA] as it ** always used to do, [sqlite3_step()] will automatically recompile the SQL -** statement and try to run it again. If the schema has changed in -** a way that makes the statement no longer valid, [sqlite3_step()] will still -** return [SQLITE_SCHEMA]. But unlike the legacy behavior, [SQLITE_SCHEMA] is -** now a fatal error. Calling [sqlite3_prepare_v2()] again will not make the -** error go away. Note: use [sqlite3_errmsg()] to find the text -** of the parsing error that results in an [SQLITE_SCHEMA] return. +** statement and try to run it again. **
    2. ** **
    3. -** When an error occurs, [sqlite3_step()] will return one of the detailed -** [error codes] or [extended error codes]. The legacy behavior was that +** ^When an error occurs, [sqlite3_step()] will return one of the detailed +** [error codes] or [extended error codes]. ^The legacy behavior was that ** [sqlite3_step()] would only return a generic [SQLITE_ERROR] result code -** and you would have to make a second call to [sqlite3_reset()] in order -** to find the underlying cause of the problem. With the "v2" prepare +** and the application would have to make a second call to [sqlite3_reset()] +** in order to find the underlying cause of the problem. With the "v2" prepare ** interfaces, the underlying reason for the error is returned immediately. **
    4. -**
    -** -** Requirements: -** [H13011] [H13012] [H13013] [H13014] [H13015] [H13016] [H13019] [H13021] ** +**
  • +** ^If the specific value bound to [parameter | host parameter] in the +** WHERE clause might influence the choice of query plan for a statement, +** then the statement will be automatically recompiled, as if there had been +** a schema change, on the first [sqlite3_step()] call following any change +** to the [sqlite3_bind_text | bindings] of that [parameter]. +** ^The specific value of WHERE-clause [parameter] might influence the +** choice of query plan if the parameter is the left-hand side of a [LIKE] +** or [GLOB] operator or if the parameter is compared to an indexed column +** and the [SQLITE_ENABLE_STAT3] compile-time option is enabled. +** the +**
  • +** */ SQLITE_API int sqlite3_prepare( sqlite3 *db, /* Database handle */ @@ -2888,24 +3545,71 @@ SQLITE_API int sqlite3_prepare16_v2( ); /* -** CAPI3REF: Retrieving Statement SQL {H13100} +** CAPI3REF: Retrieving Statement SQL ** -** This interface can be used to retrieve a saved copy of the original +** ^This interface can be used to retrieve a saved copy of the original ** SQL text used to create a [prepared statement] if that statement was ** compiled using either [sqlite3_prepare_v2()] or [sqlite3_prepare16_v2()]. -** -** Requirements: -** [H13101] [H13102] [H13103] */ SQLITE_API const char *sqlite3_sql(sqlite3_stmt *pStmt); /* -** CAPI3REF: Dynamically Typed Value Object {H15000} +** CAPI3REF: Determine If An SQL Statement Writes The Database +** +** ^The sqlite3_stmt_readonly(X) interface returns true (non-zero) if +** and only if the [prepared statement] X makes no direct changes to +** the content of the database file. +** +** Note that [application-defined SQL functions] or +** [virtual tables] might change the database indirectly as a side effect. +** ^(For example, if an application defines a function "eval()" that +** calls [sqlite3_exec()], then the following SQL statement would +** change the database file through side-effects: +** +**
    +**    SELECT eval('DELETE FROM t1') FROM t2;
    +** 
    +** +** But because the [SELECT] statement does not change the database file +** directly, sqlite3_stmt_readonly() would still return true.)^ +** +** ^Transaction control statements such as [BEGIN], [COMMIT], [ROLLBACK], +** [SAVEPOINT], and [RELEASE] cause sqlite3_stmt_readonly() to return true, +** since the statements themselves do not actually modify the database but +** rather they control the timing of when other statements modify the +** database. ^The [ATTACH] and [DETACH] statements also cause +** sqlite3_stmt_readonly() to return true since, while those statements +** change the configuration of a database connection, they do not make +** changes to the content of the database files on disk. +*/ +SQLITE_API int sqlite3_stmt_readonly(sqlite3_stmt *pStmt); + +/* +** CAPI3REF: Determine If A Prepared Statement Has Been Reset +** +** ^The sqlite3_stmt_busy(S) interface returns true (non-zero) if the +** [prepared statement] S has been stepped at least once using +** [sqlite3_step(S)] but has not run to completion and/or has not +** been reset using [sqlite3_reset(S)]. ^The sqlite3_stmt_busy(S) +** interface returns false if S is a NULL pointer. If S is not a +** NULL pointer and is not a pointer to a valid [prepared statement] +** object, then the behavior is undefined and probably undesirable. +** +** This interface can be used in combination [sqlite3_next_stmt()] +** to locate all prepared statements associated with a database +** connection that are in need of being reset. This can be used, +** for example, in diagnostic routines to search for prepared +** statements that are holding a transaction open. +*/ +SQLITE_API int sqlite3_stmt_busy(sqlite3_stmt*); + +/* +** CAPI3REF: Dynamically Typed Value Object ** KEYWORDS: {protected sqlite3_value} {unprotected sqlite3_value} ** ** SQLite uses the sqlite3_value object to represent all values ** that can be stored in a database table. SQLite uses dynamic typing -** for the values it stores. Values stored in sqlite3_value objects +** for the values it stores. ^Values stored in sqlite3_value objects ** can be integers, floating point values, strings, BLOBs, or NULL. ** ** An sqlite3_value object may be either "protected" or "unprotected". @@ -2915,7 +3619,7 @@ SQLITE_API const char *sqlite3_sql(sqlite3_stmt *pStmt); ** whether or not it requires a protected sqlite3_value. ** ** The terms "protected" and "unprotected" refer to whether or not -** a mutex is held. A internal mutex is held for a protected +** a mutex is held. An internal mutex is held for a protected ** sqlite3_value object but no mutex is held for an unprotected ** sqlite3_value object. If SQLite is compiled to be single-threaded ** (with [SQLITE_THREADSAFE=0] and with [sqlite3_threadsafe()] returning 0) @@ -2924,12 +3628,12 @@ SQLITE_API const char *sqlite3_sql(sqlite3_stmt *pStmt); ** then there is no distinction between protected and unprotected ** sqlite3_value objects and they can be used interchangeably. However, ** for maximum code portability it is recommended that applications -** still make the distinction between between protected and unprotected +** still make the distinction between protected and unprotected ** sqlite3_value objects even when not strictly required. ** -** The sqlite3_value objects that are passed as parameters into the +** ^The sqlite3_value objects that are passed as parameters into the ** implementation of [application-defined SQL functions] are protected. -** The sqlite3_value object returned by +** ^The sqlite3_value object returned by ** [sqlite3_column_value()] is unprotected. ** Unprotected sqlite3_value objects may only be used with ** [sqlite3_result_value()] and [sqlite3_bind_value()]. @@ -2939,10 +3643,10 @@ SQLITE_API const char *sqlite3_sql(sqlite3_stmt *pStmt); typedef struct Mem sqlite3_value; /* -** CAPI3REF: SQL Function Context Object {H16001} +** CAPI3REF: SQL Function Context Object ** ** The context in which an SQL function executes is stored in an -** sqlite3_context object. A pointer to an sqlite3_context object +** sqlite3_context object. ^A pointer to an sqlite3_context object ** is always first parameter to [application-defined SQL functions]. ** The application-defined SQL function implementation will pass this ** pointer through into calls to [sqlite3_result_int | sqlite3_result()], @@ -2953,12 +3657,13 @@ typedef struct Mem sqlite3_value; typedef struct sqlite3_context sqlite3_context; /* -** CAPI3REF: Binding Values To Prepared Statements {H13500} +** CAPI3REF: Binding Values To Prepared Statements ** KEYWORDS: {host parameter} {host parameters} {host parameter name} ** KEYWORDS: {SQL parameter} {SQL parameters} {parameter binding} ** -** In the SQL strings input to [sqlite3_prepare_v2()] and its variants, -** literals may be replaced by a [parameter] in one of these forms: +** ^(In the SQL statement text input to [sqlite3_prepare_v2()] and its variants, +** literals may be replaced by a [parameter] that matches one of following +** templates: ** **
      **
    • ? @@ -2968,73 +3673,77 @@ typedef struct sqlite3_context sqlite3_context; **
    • $VVV **
    ** -** In the parameter forms shown above NNN is an integer literal, -** and VVV is an alpha-numeric parameter name. The values of these +** In the templates above, NNN represents an integer literal, +** and VVV represents an alphanumeric identifier.)^ ^The values of these ** parameters (also called "host parameter names" or "SQL parameters") ** can be set using the sqlite3_bind_*() routines defined here. ** -** The first argument to the sqlite3_bind_*() routines is always +** ^The first argument to the sqlite3_bind_*() routines is always ** a pointer to the [sqlite3_stmt] object returned from ** [sqlite3_prepare_v2()] or its variants. ** -** The second argument is the index of the SQL parameter to be set. -** The leftmost SQL parameter has an index of 1. When the same named +** ^The second argument is the index of the SQL parameter to be set. +** ^The leftmost SQL parameter has an index of 1. ^When the same named ** SQL parameter is used more than once, second and subsequent ** occurrences have the same index as the first occurrence. -** The index for named parameters can be looked up using the -** [sqlite3_bind_parameter_index()] API if desired. The index +** ^The index for named parameters can be looked up using the +** [sqlite3_bind_parameter_index()] API if desired. ^The index ** for "?NNN" parameters is the value of NNN. -** The NNN value must be between 1 and the [sqlite3_limit()] +** ^The NNN value must be between 1 and the [sqlite3_limit()] ** parameter [SQLITE_LIMIT_VARIABLE_NUMBER] (default value: 999). ** -** The third argument is the value to bind to the parameter. +** ^The third argument is the value to bind to the parameter. ** -** In those routines that have a fourth argument, its value is the +** ^(In those routines that have a fourth argument, its value is the ** number of bytes in the parameter. To be clear: the value is the -** number of bytes in the value, not the number of characters. -** If the fourth parameter is negative, the length of the string is +** number of bytes in the value, not the number of characters.)^ +** ^If the fourth parameter is negative, the length of the string is ** the number of bytes up to the first zero terminator. -** -** The fifth argument to sqlite3_bind_blob(), sqlite3_bind_text(), and +** If a non-negative fourth parameter is provided to sqlite3_bind_text() +** or sqlite3_bind_text16() then that parameter must be the byte offset +** where the NUL terminator would occur assuming the string were NUL +** terminated. If any NUL characters occur at byte offsets less than +** the value of the fourth parameter then the resulting string value will +** contain embedded NULs. The result of expressions involving strings +** with embedded NULs is undefined. +** +** ^The fifth argument to sqlite3_bind_blob(), sqlite3_bind_text(), and ** sqlite3_bind_text16() is a destructor used to dispose of the BLOB or -** string after SQLite has finished with it. If the fifth argument is +** string after SQLite has finished with it. ^The destructor is called +** to dispose of the BLOB or string even if the call to sqlite3_bind_blob(), +** sqlite3_bind_text(), or sqlite3_bind_text16() fails. +** ^If the fifth argument is ** the special value [SQLITE_STATIC], then SQLite assumes that the ** information is in static, unmanaged space and does not need to be freed. -** If the fifth argument has the value [SQLITE_TRANSIENT], then +** ^If the fifth argument has the value [SQLITE_TRANSIENT], then ** SQLite makes its own private copy of the data immediately, before ** the sqlite3_bind_*() routine returns. ** -** The sqlite3_bind_zeroblob() routine binds a BLOB of length N that -** is filled with zeroes. A zeroblob uses a fixed amount of memory +** ^The sqlite3_bind_zeroblob() routine binds a BLOB of length N that +** is filled with zeroes. ^A zeroblob uses a fixed amount of memory ** (just an integer to hold its size) while it is being processed. ** Zeroblobs are intended to serve as placeholders for BLOBs whose ** content is later written using ** [sqlite3_blob_open | incremental BLOB I/O] routines. -** A negative value for the zeroblob results in a zero-length BLOB. -** -** The sqlite3_bind_*() routines must be called after -** [sqlite3_prepare_v2()] (and its variants) or [sqlite3_reset()] and -** before [sqlite3_step()]. -** Bindings are not cleared by the [sqlite3_reset()] routine. -** Unbound parameters are interpreted as NULL. -** -** These routines return [SQLITE_OK] on success or an error code if -** anything goes wrong. [SQLITE_RANGE] is returned if the parameter -** index is out of range. [SQLITE_NOMEM] is returned if malloc() fails. -** [SQLITE_MISUSE] might be returned if these routines are called on a -** virtual machine that is the wrong state or which has already been finalized. -** Detection of misuse is unreliable. Applications should not depend -** on SQLITE_MISUSE returns. SQLITE_MISUSE is intended to indicate a -** a logic error in the application. Future versions of SQLite might -** panic rather than return SQLITE_MISUSE. +** ^A negative value for the zeroblob results in a zero-length BLOB. ** -** See also: [sqlite3_bind_parameter_count()], -** [sqlite3_bind_parameter_name()], and [sqlite3_bind_parameter_index()]. +** ^If any of the sqlite3_bind_*() routines are called with a NULL pointer +** for the [prepared statement] or with a prepared statement for which +** [sqlite3_step()] has been called more recently than [sqlite3_reset()], +** then the call will return [SQLITE_MISUSE]. If any sqlite3_bind_() +** routine is passed a [prepared statement] that has been finalized, the +** result is undefined and probably harmful. +** +** ^Bindings are not cleared by the [sqlite3_reset()] routine. +** ^Unbound parameters are interpreted as NULL. ** -** Requirements: -** [H13506] [H13509] [H13512] [H13515] [H13518] [H13521] [H13524] [H13527] -** [H13530] [H13533] [H13536] [H13539] [H13542] [H13545] [H13548] [H13551] +** ^The sqlite3_bind_* routines return [SQLITE_OK] on success or an +** [error code] if anything goes wrong. +** ^[SQLITE_RANGE] is returned if the parameter +** index is out of range. ^[SQLITE_NOMEM] is returned if malloc() fails. ** +** See also: [sqlite3_bind_parameter_count()], +** [sqlite3_bind_parameter_name()], and [sqlite3_bind_parameter_index()]. */ SQLITE_API int sqlite3_bind_blob(sqlite3_stmt*, int, const void*, int n, void(*)(void*)); SQLITE_API int sqlite3_bind_double(sqlite3_stmt*, int, double); @@ -3047,45 +3756,42 @@ SQLITE_API int sqlite3_bind_value(sqlite3_stmt*, int, const sqlite3_value*); SQLITE_API int sqlite3_bind_zeroblob(sqlite3_stmt*, int, int n); /* -** CAPI3REF: Number Of SQL Parameters {H13600} +** CAPI3REF: Number Of SQL Parameters ** -** This routine can be used to find the number of [SQL parameters] +** ^This routine can be used to find the number of [SQL parameters] ** in a [prepared statement]. SQL parameters are tokens of the ** form "?", "?NNN", ":AAA", "$AAA", or "@AAA" that serve as ** placeholders for values that are [sqlite3_bind_blob | bound] ** to the parameters at a later time. ** -** This routine actually returns the index of the largest (rightmost) +** ^(This routine actually returns the index of the largest (rightmost) ** parameter. For all forms except ?NNN, this will correspond to the -** number of unique parameters. If parameters of the ?NNN are used, -** there may be gaps in the list. +** number of unique parameters. If parameters of the ?NNN form are used, +** there may be gaps in the list.)^ ** ** See also: [sqlite3_bind_blob|sqlite3_bind()], ** [sqlite3_bind_parameter_name()], and ** [sqlite3_bind_parameter_index()]. -** -** Requirements: -** [H13601] */ SQLITE_API int sqlite3_bind_parameter_count(sqlite3_stmt*); /* -** CAPI3REF: Name Of A Host Parameter {H13620} +** CAPI3REF: Name Of A Host Parameter ** -** This routine returns a pointer to the name of the n-th -** [SQL parameter] in a [prepared statement]. -** SQL parameters of the form "?NNN" or ":AAA" or "@AAA" or "$AAA" +** ^The sqlite3_bind_parameter_name(P,N) interface returns +** the name of the N-th [SQL parameter] in the [prepared statement] P. +** ^(SQL parameters of the form "?NNN" or ":AAA" or "@AAA" or "$AAA" ** have a name which is the string "?NNN" or ":AAA" or "@AAA" or "$AAA" ** respectively. ** In other words, the initial ":" or "$" or "@" or "?" -** is included as part of the name. -** Parameters of the form "?" without a following integer have no name -** and are also referred to as "anonymous parameters". +** is included as part of the name.)^ +** ^Parameters of the form "?" without a following integer have no name +** and are referred to as "nameless" or "anonymous parameters". ** -** The first host parameter has an index of 1, not 0. +** ^The first host parameter has an index of 1, not 0. ** -** If the value n is out of range or if the n-th parameter is -** nameless, then NULL is returned. The returned string is +** ^If the value N is out of range or if the N-th parameter is +** nameless, then NULL is returned. ^The returned string is ** always in UTF-8 encoding even if the named parameter was ** originally specified as UTF-16 in [sqlite3_prepare16()] or ** [sqlite3_prepare16_v2()]. @@ -3093,125 +3799,114 @@ SQLITE_API int sqlite3_bind_parameter_count(sqlite3_stmt*); ** See also: [sqlite3_bind_blob|sqlite3_bind()], ** [sqlite3_bind_parameter_count()], and ** [sqlite3_bind_parameter_index()]. -** -** Requirements: -** [H13621] */ SQLITE_API const char *sqlite3_bind_parameter_name(sqlite3_stmt*, int); /* -** CAPI3REF: Index Of A Parameter With A Given Name {H13640} +** CAPI3REF: Index Of A Parameter With A Given Name ** -** Return the index of an SQL parameter given its name. The +** ^Return the index of an SQL parameter given its name. ^The ** index value returned is suitable for use as the second -** parameter to [sqlite3_bind_blob|sqlite3_bind()]. A zero -** is returned if no matching parameter is found. The parameter +** parameter to [sqlite3_bind_blob|sqlite3_bind()]. ^A zero +** is returned if no matching parameter is found. ^The parameter ** name must be given in UTF-8 even if the original statement ** was prepared from UTF-16 text using [sqlite3_prepare16_v2()]. ** ** See also: [sqlite3_bind_blob|sqlite3_bind()], ** [sqlite3_bind_parameter_count()], and ** [sqlite3_bind_parameter_index()]. -** -** Requirements: -** [H13641] */ SQLITE_API int sqlite3_bind_parameter_index(sqlite3_stmt*, const char *zName); /* -** CAPI3REF: Reset All Bindings On A Prepared Statement {H13660} +** CAPI3REF: Reset All Bindings On A Prepared Statement ** -** Contrary to the intuition of many, [sqlite3_reset()] does not reset +** ^Contrary to the intuition of many, [sqlite3_reset()] does not reset ** the [sqlite3_bind_blob | bindings] on a [prepared statement]. -** Use this routine to reset all host parameters to NULL. -** -** Requirements: -** [H13661] +** ^Use this routine to reset all host parameters to NULL. */ SQLITE_API int sqlite3_clear_bindings(sqlite3_stmt*); /* -** CAPI3REF: Number Of Columns In A Result Set {H13710} +** CAPI3REF: Number Of Columns In A Result Set ** -** Return the number of columns in the result set returned by the -** [prepared statement]. This routine returns 0 if pStmt is an SQL +** ^Return the number of columns in the result set returned by the +** [prepared statement]. ^This routine returns 0 if pStmt is an SQL ** statement that does not return data (for example an [UPDATE]). ** -** Requirements: -** [H13711] +** See also: [sqlite3_data_count()] */ SQLITE_API int sqlite3_column_count(sqlite3_stmt *pStmt); /* -** CAPI3REF: Column Names In A Result Set {H13720} +** CAPI3REF: Column Names In A Result Set ** -** These routines return the name assigned to a particular column -** in the result set of a [SELECT] statement. The sqlite3_column_name() +** ^These routines return the name assigned to a particular column +** in the result set of a [SELECT] statement. ^The sqlite3_column_name() ** interface returns a pointer to a zero-terminated UTF-8 string ** and sqlite3_column_name16() returns a pointer to a zero-terminated -** UTF-16 string. The first parameter is the [prepared statement] -** that implements the [SELECT] statement. The second parameter is the -** column number. The leftmost column is number 0. -** -** The returned string pointer is valid until either the [prepared statement] -** is destroyed by [sqlite3_finalize()] or until the next call to +** UTF-16 string. ^The first parameter is the [prepared statement] +** that implements the [SELECT] statement. ^The second parameter is the +** column number. ^The leftmost column is number 0. +** +** ^The returned string pointer is valid until either the [prepared statement] +** is destroyed by [sqlite3_finalize()] or until the statement is automatically +** reprepared by the first call to [sqlite3_step()] for a particular run +** or until the next call to ** sqlite3_column_name() or sqlite3_column_name16() on the same column. ** -** If sqlite3_malloc() fails during the processing of either routine +** ^If sqlite3_malloc() fails during the processing of either routine ** (for example during a conversion from UTF-8 to UTF-16) then a ** NULL pointer is returned. ** -** The name of a result column is the value of the "AS" clause for +** ^The name of a result column is the value of the "AS" clause for ** that column, if there is an AS clause. If there is no AS clause ** then the name of the column is unspecified and may change from ** one release of SQLite to the next. -** -** Requirements: -** [H13721] [H13723] [H13724] [H13725] [H13726] [H13727] */ SQLITE_API const char *sqlite3_column_name(sqlite3_stmt*, int N); SQLITE_API const void *sqlite3_column_name16(sqlite3_stmt*, int N); /* -** CAPI3REF: Source Of Data In A Query Result {H13740} +** CAPI3REF: Source Of Data In A Query Result ** -** These routines provide a means to determine what column of what -** table in which database a result of a [SELECT] statement comes from. -** The name of the database or table or column can be returned as -** either a UTF-8 or UTF-16 string. The _database_ routines return +** ^These routines provide a means to determine the database, table, and +** table column that is the origin of a particular result column in +** [SELECT] statement. +** ^The name of the database or table or column can be returned as +** either a UTF-8 or UTF-16 string. ^The _database_ routines return ** the database name, the _table_ routines return the table name, and ** the origin_ routines return the column name. -** The returned string is valid until the [prepared statement] is destroyed -** using [sqlite3_finalize()] or until the same information is requested +** ^The returned string is valid until the [prepared statement] is destroyed +** using [sqlite3_finalize()] or until the statement is automatically +** reprepared by the first call to [sqlite3_step()] for a particular run +** or until the same information is requested ** again in a different encoding. ** -** The names returned are the original un-aliased names of the +** ^The names returned are the original un-aliased names of the ** database, table, and column. ** -** The first argument to the following calls is a [prepared statement]. -** These functions return information about the Nth column returned by +** ^The first argument to these interfaces is a [prepared statement]. +** ^These functions return information about the Nth result column returned by ** the statement, where N is the second function argument. +** ^The left-most column is column 0 for these routines. ** -** If the Nth column returned by the statement is an expression or +** ^If the Nth column returned by the statement is an expression or ** subquery and is not a column value, then all of these functions return -** NULL. These routine might also return NULL if a memory allocation error -** occurs. Otherwise, they return the name of the attached database, table -** and column that query result column was extracted from. +** NULL. ^These routine might also return NULL if a memory allocation error +** occurs. ^Otherwise, they return the name of the attached database, table, +** or column that query result column was extracted from. ** -** As with all other SQLite APIs, those postfixed with "16" return -** UTF-16 encoded strings, the other functions return UTF-8. {END} +** ^As with all other SQLite APIs, those whose names end with "16" return +** UTF-16 encoded strings and the other functions return UTF-8. ** -** These APIs are only available if the library was compiled with the -** [SQLITE_ENABLE_COLUMN_METADATA] C-preprocessor symbol defined. +** ^These APIs are only available if the library was compiled with the +** [SQLITE_ENABLE_COLUMN_METADATA] C-preprocessor symbol. ** -** {A13751} ** If two or more threads call one or more of these routines against the same ** prepared statement and column at the same time then the results are ** undefined. ** -** Requirements: -** [H13741] [H13742] [H13743] [H13744] [H13745] [H13746] [H13748] -** ** If two or more threads call one or more ** [sqlite3_column_database_name | column metadata interfaces] ** for the same [prepared statement] and result column @@ -3225,17 +3920,17 @@ SQLITE_API const char *sqlite3_column_origin_name(sqlite3_stmt*,int); SQLITE_API const void *sqlite3_column_origin_name16(sqlite3_stmt*,int); /* -** CAPI3REF: Declared Datatype Of A Query Result {H13760} +** CAPI3REF: Declared Datatype Of A Query Result ** -** The first parameter is a [prepared statement]. +** ^(The first parameter is a [prepared statement]. ** If this statement is a [SELECT] statement and the Nth column of the ** returned result set of that [SELECT] is a table column (not an ** expression or subquery) then the declared type of the table -** column is returned. If the Nth column of the result set is an +** column is returned.)^ ^If the Nth column of the result set is an ** expression or subquery, then a NULL pointer is returned. -** The returned string is always UTF-8 encoded. {END} +** ^The returned string is always UTF-8 encoded. ** -** For example, given the database schema: +** ^(For example, given the database schema: ** ** CREATE TABLE t1(c1 VARIANT); ** @@ -3244,23 +3939,20 @@ SQLITE_API const void *sqlite3_column_origin_name16(sqlite3_stmt*,int); ** SELECT c1 + 1, c1 FROM t1; ** ** this routine would return the string "VARIANT" for the second result -** column (i==1), and a NULL pointer for the first result column (i==0). +** column (i==1), and a NULL pointer for the first result column (i==0).)^ ** -** SQLite uses dynamic run-time typing. So just because a column +** ^SQLite uses dynamic run-time typing. ^So just because a column ** is declared to contain a particular type does not mean that the ** data stored in that column is of the declared type. SQLite is -** strongly typed, but the typing is dynamic not static. Type +** strongly typed, but the typing is dynamic not static. ^Type ** is associated with individual values, not with the containers ** used to hold those values. -** -** Requirements: -** [H13761] [H13762] [H13763] */ SQLITE_API const char *sqlite3_column_decltype(sqlite3_stmt*,int); SQLITE_API const void *sqlite3_column_decltype16(sqlite3_stmt*,int); /* -** CAPI3REF: Evaluate An SQL Statement {H13200} +** CAPI3REF: Evaluate An SQL Statement ** ** After a [prepared statement] has been prepared using either ** [sqlite3_prepare_v2()] or [sqlite3_prepare16_v2()] or one of the legacy @@ -3274,35 +3966,35 @@ SQLITE_API const void *sqlite3_column_decltype16(sqlite3_stmt*,int); ** new "v2" interface is recommended for new applications but the legacy ** interface will continue to be supported. ** -** In the legacy interface, the return value will be either [SQLITE_BUSY], +** ^In the legacy interface, the return value will be either [SQLITE_BUSY], ** [SQLITE_DONE], [SQLITE_ROW], [SQLITE_ERROR], or [SQLITE_MISUSE]. -** With the "v2" interface, any of the other [result codes] or +** ^With the "v2" interface, any of the other [result codes] or ** [extended result codes] might be returned as well. ** -** [SQLITE_BUSY] means that the database engine was unable to acquire the -** database locks it needs to do its job. If the statement is a [COMMIT] +** ^[SQLITE_BUSY] means that the database engine was unable to acquire the +** database locks it needs to do its job. ^If the statement is a [COMMIT] ** or occurs outside of an explicit transaction, then you can retry the -** statement. If the statement is not a [COMMIT] and occurs within a +** statement. If the statement is not a [COMMIT] and occurs within an ** explicit transaction then you should rollback the transaction before ** continuing. ** -** [SQLITE_DONE] means that the statement has finished executing +** ^[SQLITE_DONE] means that the statement has finished executing ** successfully. sqlite3_step() should not be called again on this virtual ** machine without first calling [sqlite3_reset()] to reset the virtual ** machine back to its initial state. ** -** If the SQL statement being executed returns any data, then [SQLITE_ROW] +** ^If the SQL statement being executed returns any data, then [SQLITE_ROW] ** is returned each time a new row of data is ready for processing by the ** caller. The values may be accessed using the [column access functions]. ** sqlite3_step() is called again to retrieve the next row of data. ** -** [SQLITE_ERROR] means that a run-time error (such as a constraint +** ^[SQLITE_ERROR] means that a run-time error (such as a constraint ** violation) has occurred. sqlite3_step() should not be called again on ** the VM. More information may be found by calling [sqlite3_errmsg()]. -** With the legacy interface, a more specific error code (for example, +** ^With the legacy interface, a more specific error code (for example, ** [SQLITE_INTERRUPT], [SQLITE_SCHEMA], [SQLITE_CORRUPT], and so forth) ** can be obtained by calling [sqlite3_reset()] on the -** [prepared statement]. In the "v2" interface, +** [prepared statement]. ^In the "v2" interface, ** the more specific error code is returned directly by sqlite3_step(). ** ** [SQLITE_MISUSE] means that the this routine was called inappropriately. @@ -3312,6 +4004,18 @@ SQLITE_API const void *sqlite3_column_decltype16(sqlite3_stmt*,int); ** be the case that the same database connection is being used by two or ** more threads at the same moment in time. ** +** For all versions of SQLite up to and including 3.6.23.1, a call to +** [sqlite3_reset()] was required after sqlite3_step() returned anything +** other than [SQLITE_ROW] before any subsequent invocation of +** sqlite3_step(). Failure to reset the prepared statement using +** [sqlite3_reset()] would result in an [SQLITE_MISUSE] return from +** sqlite3_step(). But after version 3.6.23.1, sqlite3_step() began +** calling [sqlite3_reset()] automatically in this circumstance rather +** than returning [SQLITE_MISUSE]. This is not considered a compatibility +** break because any application that ever receives an SQLITE_MISUSE error +** is broken by definition. The [SQLITE_OMIT_AUTORESET] compile-time option +** can be used to restore the legacy behavior. +** ** Goofy Interface Alert: In the legacy interface, the sqlite3_step() ** API always returns a generic error code, [SQLITE_ERROR], following any ** error other than [SQLITE_BUSY] and [SQLITE_MISUSE]. You must call @@ -3323,27 +4027,34 @@ SQLITE_API const void *sqlite3_column_decltype16(sqlite3_stmt*,int); ** of the legacy [sqlite3_prepare()] and [sqlite3_prepare16()] interfaces, ** then the more specific [error codes] are returned directly ** by sqlite3_step(). The use of the "v2" interface is recommended. -** -** Requirements: -** [H13202] [H15304] [H15306] [H15308] [H15310] */ SQLITE_API int sqlite3_step(sqlite3_stmt*); /* -** CAPI3REF: Number of columns in a result set {H13770} +** CAPI3REF: Number of columns in a result set ** -** Returns the number of values in the current row of the result set. +** ^The sqlite3_data_count(P) interface returns the number of columns in the +** current row of the result set of [prepared statement] P. +** ^If prepared statement P does not have results ready to return +** (via calls to the [sqlite3_column_int | sqlite3_column_*()] of +** interfaces) then sqlite3_data_count(P) returns 0. +** ^The sqlite3_data_count(P) routine also returns 0 if P is a NULL pointer. +** ^The sqlite3_data_count(P) routine returns 0 if the previous call to +** [sqlite3_step](P) returned [SQLITE_DONE]. ^The sqlite3_data_count(P) +** will return non-zero if previous call to [sqlite3_step](P) returned +** [SQLITE_ROW], except in the case of the [PRAGMA incremental_vacuum] +** where it always returns zero since each step of that multi-step +** pragma returns 0 columns of data. ** -** Requirements: -** [H13771] [H13772] +** See also: [sqlite3_column_count()] */ SQLITE_API int sqlite3_data_count(sqlite3_stmt *pStmt); /* -** CAPI3REF: Fundamental Datatypes {H10265} +** CAPI3REF: Fundamental Datatypes ** KEYWORDS: SQLITE_TEXT ** -** {H10266} Every value in SQLite has one of five fundamental datatypes: +** ^(Every value in SQLite has one of five fundamental datatypes: ** **
      **
    • 64-bit signed integer @@ -3351,7 +4062,7 @@ SQLITE_API int sqlite3_data_count(sqlite3_stmt *pStmt); **
    • string **
    • BLOB **
    • NULL -**
    {END} +** )^ ** ** These constants are codes for each of those types. ** @@ -3372,17 +4083,19 @@ SQLITE_API int sqlite3_data_count(sqlite3_stmt *pStmt); #define SQLITE3_TEXT 3 /* -** CAPI3REF: Result Values From A Query {H13800} +** CAPI3REF: Result Values From A Query ** KEYWORDS: {column access functions} ** -** These routines form the "result set query" interface. +** These routines form the "result set" interface. ** -** These routines return information about a single column of the current -** result row of a query. In every case the first argument is a pointer +** ^These routines return information about a single column of the current +** result row of a query. ^In every case the first argument is a pointer ** to the [prepared statement] that is being evaluated (the [sqlite3_stmt*] ** that was returned from [sqlite3_prepare_v2()] or one of its variants) ** and the second argument is the index of the column for which information -** should be returned. The leftmost column of the result set has the index 0. +** should be returned. ^The leftmost column of the result set has the index 0. +** ^The number of columns in the result can be determined using +** [sqlite3_column_count()]. ** ** If the SQL statement does not currently point to a valid row, or if the ** column index is out of range, the result is undefined. @@ -3396,9 +4109,9 @@ SQLITE_API int sqlite3_data_count(sqlite3_stmt *pStmt); ** are called from a different thread while any of these routines ** are pending, then the results are undefined. ** -** The sqlite3_column_type() routine returns the +** ^The sqlite3_column_type() routine returns the ** [SQLITE_INTEGER | datatype code] for the initial data type -** of the result column. The returned value is one of [SQLITE_INTEGER], +** of the result column. ^The returned value is one of [SQLITE_INTEGER], ** [SQLITE_FLOAT], [SQLITE_TEXT], [SQLITE_BLOB], or [SQLITE_NULL]. The value ** returned by sqlite3_column_type() is only meaningful if no type ** conversions have occurred as described below. After a type conversion, @@ -3406,27 +4119,35 @@ SQLITE_API int sqlite3_data_count(sqlite3_stmt *pStmt); ** versions of SQLite may change the behavior of sqlite3_column_type() ** following a type conversion. ** -** If the result is a BLOB or UTF-8 string then the sqlite3_column_bytes() +** ^If the result is a BLOB or UTF-8 string then the sqlite3_column_bytes() ** routine returns the number of bytes in that BLOB or string. -** If the result is a UTF-16 string, then sqlite3_column_bytes() converts +** ^If the result is a UTF-16 string, then sqlite3_column_bytes() converts ** the string to UTF-8 and then returns the number of bytes. -** If the result is a numeric value then sqlite3_column_bytes() uses +** ^If the result is a numeric value then sqlite3_column_bytes() uses ** [sqlite3_snprintf()] to convert that value to a UTF-8 string and returns ** the number of bytes in that string. -** The value returned does not include the zero terminator at the end -** of the string. For clarity: the value returned is the number of -** bytes in the string, not the number of characters. +** ^If the result is NULL, then sqlite3_column_bytes() returns zero. ** -** Strings returned by sqlite3_column_text() and sqlite3_column_text16(), -** even empty strings, are always zero terminated. The return -** value from sqlite3_column_blob() for a zero-length BLOB is an arbitrary -** pointer, possibly even a NULL pointer. +** ^If the result is a BLOB or UTF-16 string then the sqlite3_column_bytes16() +** routine returns the number of bytes in that BLOB or string. +** ^If the result is a UTF-8 string, then sqlite3_column_bytes16() converts +** the string to UTF-16 and then returns the number of bytes. +** ^If the result is a numeric value then sqlite3_column_bytes16() uses +** [sqlite3_snprintf()] to convert that value to a UTF-16 string and returns +** the number of bytes in that string. +** ^If the result is NULL, then sqlite3_column_bytes16() returns zero. +** +** ^The values returned by [sqlite3_column_bytes()] and +** [sqlite3_column_bytes16()] do not include the zero terminators at the end +** of the string. ^For clarity: the values returned by +** [sqlite3_column_bytes()] and [sqlite3_column_bytes16()] are the number of +** bytes in the string, not the number of characters. ** -** The sqlite3_column_bytes16() routine is similar to sqlite3_column_bytes() -** but leaves the result in UTF-16 in native byte order instead of UTF-8. -** The zero terminator is not included in this count. +** ^Strings returned by sqlite3_column_text() and sqlite3_column_text16(), +** even empty strings, are always zero-terminated. ^The return +** value from sqlite3_column_blob() for a zero-length BLOB is a NULL pointer. ** -** The object returned by [sqlite3_column_value()] is an +** ^The object returned by [sqlite3_column_value()] is an ** [unprotected sqlite3_value] object. An unprotected sqlite3_value object ** may only be used with [sqlite3_bind_value()] and [sqlite3_result_value()]. ** If the [unprotected sqlite3_value] object returned by @@ -3434,10 +4155,10 @@ SQLITE_API int sqlite3_data_count(sqlite3_stmt *pStmt); ** to routines like [sqlite3_value_int()], [sqlite3_value_text()], ** or [sqlite3_value_bytes()], then the behavior is undefined. ** -** These routines attempt to convert the value where appropriate. For +** These routines attempt to convert the value where appropriate. ^For ** example, if the internal representation is FLOAT and a text result ** is requested, [sqlite3_snprintf()] is used internally to perform the -** conversion automatically. The following table details the conversions +** conversion automatically. ^(The following table details the conversions ** that are applied: ** **
    @@ -3461,7 +4182,7 @@ SQLITE_API int sqlite3_data_count(sqlite3_stmt *pStmt); ** BLOB FLOAT Convert to TEXT then use atof() ** BLOB TEXT Add a zero terminator if needed ** -**
    +**
    )^ ** ** The table above makes reference to standard C library functions atoi() ** and atof(). SQLite does not really use these functions. It has its @@ -3487,9 +4208,9 @@ SQLITE_API int sqlite3_data_count(sqlite3_stmt *pStmt); ** to UTF-8.
  • ** ** -** Conversions between UTF-16be and UTF-16le are always done in place and do +** ^Conversions between UTF-16be and UTF-16le are always done in place and do ** not invalidate a prior pointer, though of course the content of the buffer -** that the prior pointer points to will have been modified. Other kinds +** that the prior pointer references will have been modified. Other kinds ** of conversion are done in place when it is possible, but sometimes they ** are not possible and in those cases prior pointers are invalidated. ** @@ -3510,22 +4231,18 @@ SQLITE_API int sqlite3_data_count(sqlite3_stmt *pStmt); ** sqlite3_column_bytes16(), and do not mix calls to sqlite3_column_text16() ** with calls to sqlite3_column_bytes(). ** -** The pointers returned are valid until a type conversion occurs as +** ^The pointers returned are valid until a type conversion occurs as ** described above, or until [sqlite3_step()] or [sqlite3_reset()] or -** [sqlite3_finalize()] is called. The memory space used to hold strings +** [sqlite3_finalize()] is called. ^The memory space used to hold strings ** and BLOBs is freed automatically. Do not pass the pointers returned ** [sqlite3_column_blob()], [sqlite3_column_text()], etc. into ** [sqlite3_free()]. ** -** If a memory allocation error occurs during the evaluation of any +** ^(If a memory allocation error occurs during the evaluation of any ** of these routines, a default value is returned. The default value ** is either the integer 0, the floating point number 0.0, or a NULL ** pointer. Subsequent calls to [sqlite3_errcode()] will return -** [SQLITE_NOMEM]. -** -** Requirements: -** [H13803] [H13806] [H13809] [H13812] [H13815] [H13818] [H13821] [H13824] -** [H13827] [H13830] +** [SQLITE_NOMEM].)^ */ SQLITE_API const void *sqlite3_column_blob(sqlite3_stmt*, int iCol); SQLITE_API int sqlite3_column_bytes(sqlite3_stmt*, int iCol); @@ -3539,135 +4256,145 @@ SQLITE_API int sqlite3_column_type(sqlite3_stmt*, int iCol); SQLITE_API sqlite3_value *sqlite3_column_value(sqlite3_stmt*, int iCol); /* -** CAPI3REF: Destroy A Prepared Statement Object {H13300} +** CAPI3REF: Destroy A Prepared Statement Object +** +** ^The sqlite3_finalize() function is called to delete a [prepared statement]. +** ^If the most recent evaluation of the statement encountered no errors +** or if the statement is never been evaluated, then sqlite3_finalize() returns +** SQLITE_OK. ^If the most recent evaluation of statement S failed, then +** sqlite3_finalize(S) returns the appropriate [error code] or +** [extended error code]. ** -** The sqlite3_finalize() function is called to delete a [prepared statement]. -** If the statement was executed successfully or not executed at all, then -** SQLITE_OK is returned. If execution of the statement failed then an -** [error code] or [extended error code] is returned. +** ^The sqlite3_finalize(S) routine can be called at any point during +** the life cycle of [prepared statement] S: +** before statement S is ever evaluated, after +** one or more calls to [sqlite3_reset()], or after any call +** to [sqlite3_step()] regardless of whether or not the statement has +** completed execution. ** -** This routine can be called at any point during the execution of the -** [prepared statement]. If the virtual machine has not -** completed execution when this routine is called, that is like -** encountering an error or an [sqlite3_interrupt | interrupt]. -** Incomplete updates may be rolled back and transactions canceled, -** depending on the circumstances, and the -** [error code] returned will be [SQLITE_ABORT]. +** ^Invoking sqlite3_finalize() on a NULL pointer is a harmless no-op. ** -** Requirements: -** [H11302] [H11304] +** The application must finalize every [prepared statement] in order to avoid +** resource leaks. It is a grievous error for the application to try to use +** a prepared statement after it has been finalized. Any use of a prepared +** statement after it has been finalized can result in undefined and +** undesirable behavior such as segfaults and heap corruption. */ SQLITE_API int sqlite3_finalize(sqlite3_stmt *pStmt); /* -** CAPI3REF: Reset A Prepared Statement Object {H13330} +** CAPI3REF: Reset A Prepared Statement Object ** ** The sqlite3_reset() function is called to reset a [prepared statement] ** object back to its initial state, ready to be re-executed. -** Any SQL statement variables that had values bound to them using +** ^Any SQL statement variables that had values bound to them using ** the [sqlite3_bind_blob | sqlite3_bind_*() API] retain their values. ** Use [sqlite3_clear_bindings()] to reset the bindings. ** -** {H11332} The [sqlite3_reset(S)] interface resets the [prepared statement] S -** back to the beginning of its program. +** ^The [sqlite3_reset(S)] interface resets the [prepared statement] S +** back to the beginning of its program. ** -** {H11334} If the most recent call to [sqlite3_step(S)] for the -** [prepared statement] S returned [SQLITE_ROW] or [SQLITE_DONE], -** or if [sqlite3_step(S)] has never before been called on S, -** then [sqlite3_reset(S)] returns [SQLITE_OK]. +** ^If the most recent call to [sqlite3_step(S)] for the +** [prepared statement] S returned [SQLITE_ROW] or [SQLITE_DONE], +** or if [sqlite3_step(S)] has never before been called on S, +** then [sqlite3_reset(S)] returns [SQLITE_OK]. ** -** {H11336} If the most recent call to [sqlite3_step(S)] for the -** [prepared statement] S indicated an error, then -** [sqlite3_reset(S)] returns an appropriate [error code]. +** ^If the most recent call to [sqlite3_step(S)] for the +** [prepared statement] S indicated an error, then +** [sqlite3_reset(S)] returns an appropriate [error code]. ** -** {H11338} The [sqlite3_reset(S)] interface does not change the values -** of any [sqlite3_bind_blob|bindings] on the [prepared statement] S. +** ^The [sqlite3_reset(S)] interface does not change the values +** of any [sqlite3_bind_blob|bindings] on the [prepared statement] S. */ SQLITE_API int sqlite3_reset(sqlite3_stmt *pStmt); /* -** CAPI3REF: Create Or Redefine SQL Functions {H16100} +** CAPI3REF: Create Or Redefine SQL Functions ** KEYWORDS: {function creation routines} ** KEYWORDS: {application-defined SQL function} ** KEYWORDS: {application-defined SQL functions} ** -** These two functions (collectively known as "function creation routines") +** ^These functions (collectively known as "function creation routines") ** are used to add SQL functions or aggregates or to redefine the behavior -** of existing SQL functions or aggregates. The only difference between the -** two is that the second parameter, the name of the (scalar) function or -** aggregate, is encoded in UTF-8 for sqlite3_create_function() and UTF-16 -** for sqlite3_create_function16(). -** -** The first parameter is the [database connection] to which the SQL -** function is to be added. If a single program uses more than one database -** connection internally, then SQL functions must be added individually to -** each database connection. -** -** The second parameter is the name of the SQL function to be created or -** redefined. The length of the name is limited to 255 bytes, exclusive of -** the zero-terminator. Note that the name length limit is in bytes, not -** characters. Any attempt to create a function with a longer name -** will result in [SQLITE_ERROR] being returned. -** -** The third parameter (nArg) +** of existing SQL functions or aggregates. The only differences between +** these routines are the text encoding expected for +** the second parameter (the name of the function being created) +** and the presence or absence of a destructor callback for +** the application data pointer. +** +** ^The first parameter is the [database connection] to which the SQL +** function is to be added. ^If an application uses more than one database +** connection then application-defined SQL functions must be added +** to each database connection separately. +** +** ^The second parameter is the name of the SQL function to be created or +** redefined. ^The length of the name is limited to 255 bytes in a UTF-8 +** representation, exclusive of the zero-terminator. ^Note that the name +** length limit is in UTF-8 bytes, not characters nor UTF-16 bytes. +** ^Any attempt to create a function with a longer name +** will result in [SQLITE_MISUSE] being returned. +** +** ^The third parameter (nArg) ** is the number of arguments that the SQL function or -** aggregate takes. If this parameter is -1, then the SQL function or +** aggregate takes. ^If this parameter is -1, then the SQL function or ** aggregate may take any number of arguments between 0 and the limit ** set by [sqlite3_limit]([SQLITE_LIMIT_FUNCTION_ARG]). If the third ** parameter is less than -1 or greater than 127 then the behavior is ** undefined. ** -** The fourth parameter, eTextRep, specifies what +** ^The fourth parameter, eTextRep, specifies what ** [SQLITE_UTF8 | text encoding] this SQL function prefers for -** its parameters. Any SQL function implementation should be able to work -** work with UTF-8, UTF-16le, or UTF-16be. But some implementations may be -** more efficient with one encoding than another. It is allowed to +** its parameters. Every SQL function implementation must be able to work +** with UTF-8, UTF-16le, or UTF-16be. But some implementations may be +** more efficient with one encoding than another. ^An application may ** invoke sqlite3_create_function() or sqlite3_create_function16() multiple ** times with the same function but with different values of eTextRep. -** When multiple implementations of the same function are available, SQLite +** ^When multiple implementations of the same function are available, SQLite ** will pick the one that involves the least amount of data conversion. ** If there is only a single implementation which does not care what text ** encoding is used, then the fourth argument should be [SQLITE_ANY]. ** -** The fifth parameter is an arbitrary pointer. The implementation of the -** function can gain access to this pointer using [sqlite3_user_data()]. +** ^(The fifth parameter is an arbitrary pointer. The implementation of the +** function can gain access to this pointer using [sqlite3_user_data()].)^ ** -** The seventh, eighth and ninth parameters, xFunc, xStep and xFinal, are +** ^The sixth, seventh and eighth parameters, xFunc, xStep and xFinal, are ** pointers to C-language functions that implement the SQL function or -** aggregate. A scalar SQL function requires an implementation of the xFunc -** callback only, NULL pointers should be passed as the xStep and xFinal -** parameters. An aggregate SQL function requires an implementation of xStep -** and xFinal and NULL should be passed for xFunc. To delete an existing -** SQL function or aggregate, pass NULL for all three function callbacks. +** aggregate. ^A scalar SQL function requires an implementation of the xFunc +** callback only; NULL pointers must be passed as the xStep and xFinal +** parameters. ^An aggregate SQL function requires an implementation of xStep +** and xFinal and NULL pointer must be passed for xFunc. ^To delete an existing +** SQL function or aggregate, pass NULL pointers for all three function +** callbacks. ** -** It is permitted to register multiple implementations of the same +** ^(If the ninth parameter to sqlite3_create_function_v2() is not NULL, +** then it is destructor for the application data pointer. +** The destructor is invoked when the function is deleted, either by being +** overloaded or when the database connection closes.)^ +** ^The destructor is also invoked if the call to +** sqlite3_create_function_v2() fails. +** ^When the destructor callback of the tenth parameter is invoked, it +** is passed a single argument which is a copy of the application data +** pointer which was the fifth parameter to sqlite3_create_function_v2(). +** +** ^It is permitted to register multiple implementations of the same ** functions with the same name but with either differing numbers of -** arguments or differing preferred text encodings. SQLite will use -** the implementation most closely matches the way in which the -** SQL function is used. A function implementation with a non-negative +** arguments or differing preferred text encodings. ^SQLite will use +** the implementation that most closely matches the way in which the +** SQL function is used. ^A function implementation with a non-negative ** nArg parameter is a better match than a function implementation with -** a negative nArg. A function where the preferred text encoding +** a negative nArg. ^A function where the preferred text encoding ** matches the database encoding is a better ** match than a function where the encoding is different. -** A function where the encoding difference is between UTF16le and UTF16be +** ^A function where the encoding difference is between UTF16le and UTF16be ** is a closer match than a function where the encoding difference is ** between UTF8 and UTF16. ** -** Built-in functions may be overloaded by new application-defined functions. -** The first application-defined function with a given name overrides all -** built-in functions in the same [database connection] with the same name. -** Subsequent application-defined functions of the same name only override -** prior application-defined functions that are an exact match for the -** number of parameters and preferred encoding. +** ^Built-in functions may be overloaded by new application-defined functions. ** -** An application-defined function is permitted to call other +** ^An application-defined function is permitted to call other ** SQLite interfaces. However, such calls must not ** close the database connection nor finalize or reset the prepared ** statement in which the function is running. -** -** Requirements: -** [H16103] [H16106] [H16109] [H16112] [H16118] [H16121] [H16127] -** [H16130] [H16133] [H16136] [H16139] [H16142] */ SQLITE_API int sqlite3_create_function( sqlite3 *db, @@ -3689,9 +4416,20 @@ SQLITE_API int sqlite3_create_function16( void (*xStep)(sqlite3_context*,int,sqlite3_value**), void (*xFinal)(sqlite3_context*) ); +SQLITE_API int sqlite3_create_function_v2( + sqlite3 *db, + const char *zFunctionName, + int nArg, + int eTextRep, + void *pApp, + void (*xFunc)(sqlite3_context*,int,sqlite3_value**), + void (*xStep)(sqlite3_context*,int,sqlite3_value**), + void (*xFinal)(sqlite3_context*), + void(*xDestroy)(void*) +); /* -** CAPI3REF: Text Encodings {H10267} +** CAPI3REF: Text Encodings ** ** These constant define integer codes that represent the various ** text encodings supported by SQLite. @@ -3723,7 +4461,7 @@ SQLITE_API SQLITE_DEPRECATED int sqlite3_memory_alarm(void(*)(void*,sqlite3_int6 #endif /* -** CAPI3REF: Obtaining SQL Function Parameter Values {H15100} +** CAPI3REF: Obtaining SQL Function Parameter Values ** ** The C-language implementation of SQL functions and aggregates uses ** this set of interface routines to access the parameter values on @@ -3732,7 +4470,7 @@ SQLITE_API SQLITE_DEPRECATED int sqlite3_memory_alarm(void(*)(void*,sqlite3_int6 ** The xFunc (for scalar functions) or xStep (for aggregates) parameters ** to [sqlite3_create_function()] and [sqlite3_create_function16()] ** define callbacks that implement the SQL functions and aggregates. -** The 4th parameter to these callbacks is an array of pointers to +** The 3rd parameter to these callbacks is an array of pointers to ** [protected sqlite3_value] objects. There is one [sqlite3_value] object for ** each parameter to the SQL function. These routines are used to ** extract values from the [sqlite3_value] objects. @@ -3741,22 +4479,22 @@ SQLITE_API SQLITE_DEPRECATED int sqlite3_memory_alarm(void(*)(void*,sqlite3_int6 ** Any attempt to use these routines on an [unprotected sqlite3_value] ** object results in undefined behavior. ** -** These routines work just like the corresponding [column access functions] +** ^These routines work just like the corresponding [column access functions] ** except that these routines take a single [protected sqlite3_value] object ** pointer instead of a [sqlite3_stmt*] pointer and an integer column number. ** -** The sqlite3_value_text16() interface extracts a UTF-16 string -** in the native byte-order of the host machine. The +** ^The sqlite3_value_text16() interface extracts a UTF-16 string +** in the native byte-order of the host machine. ^The ** sqlite3_value_text16be() and sqlite3_value_text16le() interfaces ** extract UTF-16 strings as big-endian and little-endian respectively. ** -** The sqlite3_value_numeric_type() interface attempts to apply +** ^(The sqlite3_value_numeric_type() interface attempts to apply ** numeric affinity to the value. This means that an attempt is ** made to convert the value to an integer or floating point. If ** such a conversion is possible without loss of information (in other ** words, if the value is a string that looks like a number) ** then the conversion is performed. Otherwise no conversion occurs. -** The [SQLITE_INTEGER | datatype] after conversion is returned. +** The [SQLITE_INTEGER | datatype] after conversion is returned.)^ ** ** Please pay particular attention to the fact that the pointer returned ** from [sqlite3_value_blob()], [sqlite3_value_text()], or @@ -3766,10 +4504,6 @@ SQLITE_API SQLITE_DEPRECATED int sqlite3_memory_alarm(void(*)(void*,sqlite3_int6 ** ** These routines must be called from the same thread as ** the SQL function that supplied the [sqlite3_value*] parameters. -** -** Requirements: -** [H15103] [H15106] [H15109] [H15112] [H15115] [H15118] [H15121] [H15124] -** [H15127] [H15130] [H15133] [H15136] */ SQLITE_API const void *sqlite3_value_blob(sqlite3_value*); SQLITE_API int sqlite3_value_bytes(sqlite3_value*); @@ -3785,66 +4519,73 @@ SQLITE_API int sqlite3_value_type(sqlite3_value*); SQLITE_API int sqlite3_value_numeric_type(sqlite3_value*); /* -** CAPI3REF: Obtain Aggregate Function Context {H16210} +** CAPI3REF: Obtain Aggregate Function Context ** -** The implementation of aggregate SQL functions use this routine to allocate -** a structure for storing their state. +** Implementations of aggregate SQL functions use this +** routine to allocate memory for storing their state. ** -** The first time the sqlite3_aggregate_context() routine is called for a -** particular aggregate, SQLite allocates nBytes of memory, zeroes out that -** memory, and returns a pointer to it. On second and subsequent calls to -** sqlite3_aggregate_context() for the same aggregate function index, -** the same buffer is returned. The implementation of the aggregate can use -** the returned buffer to accumulate data. +** ^The first time the sqlite3_aggregate_context(C,N) routine is called +** for a particular aggregate function, SQLite +** allocates N of memory, zeroes out that memory, and returns a pointer +** to the new memory. ^On second and subsequent calls to +** sqlite3_aggregate_context() for the same aggregate function instance, +** the same buffer is returned. Sqlite3_aggregate_context() is normally +** called once for each invocation of the xStep callback and then one +** last time when the xFinal callback is invoked. ^(When no rows match +** an aggregate query, the xStep() callback of the aggregate function +** implementation is never called and xFinal() is called exactly once. +** In those cases, sqlite3_aggregate_context() might be called for the +** first time from within xFinal().)^ ** -** SQLite automatically frees the allocated buffer when the aggregate -** query concludes. +** ^The sqlite3_aggregate_context(C,N) routine returns a NULL pointer if N is +** less than or equal to zero or if a memory allocate error occurs. ** -** The first parameter should be a copy of the +** ^(The amount of space allocated by sqlite3_aggregate_context(C,N) is +** determined by the N parameter on first successful call. Changing the +** value of N in subsequent call to sqlite3_aggregate_context() within +** the same aggregate function instance will not resize the memory +** allocation.)^ +** +** ^SQLite automatically frees the memory allocated by +** sqlite3_aggregate_context() when the aggregate query concludes. +** +** The first parameter must be a copy of the ** [sqlite3_context | SQL function context] that is the first parameter -** to the callback routine that implements the aggregate function. +** to the xStep or xFinal callback routine that implements the aggregate +** function. ** ** This routine must be called from the same thread in which ** the aggregate SQL function is running. -** -** Requirements: -** [H16211] [H16213] [H16215] [H16217] */ SQLITE_API void *sqlite3_aggregate_context(sqlite3_context*, int nBytes); /* -** CAPI3REF: User Data For Functions {H16240} +** CAPI3REF: User Data For Functions ** -** The sqlite3_user_data() interface returns a copy of +** ^The sqlite3_user_data() interface returns a copy of ** the pointer that was the pUserData parameter (the 5th parameter) ** of the [sqlite3_create_function()] ** and [sqlite3_create_function16()] routines that originally -** registered the application defined function. {END} +** registered the application defined function. ** ** This routine must be called from the same thread in which ** the application-defined function is running. -** -** Requirements: -** [H16243] */ SQLITE_API void *sqlite3_user_data(sqlite3_context*); /* -** CAPI3REF: Database Connection For Functions {H16250} +** CAPI3REF: Database Connection For Functions ** -** The sqlite3_context_db_handle() interface returns a copy of +** ^The sqlite3_context_db_handle() interface returns a copy of ** the pointer to the [database connection] (the 1st parameter) ** of the [sqlite3_create_function()] ** and [sqlite3_create_function16()] routines that originally ** registered the application defined function. -** -** Requirements: -** [H16253] */ SQLITE_API sqlite3 *sqlite3_context_db_handle(sqlite3_context*); /* -** CAPI3REF: Function Auxiliary Data {H16270} +** CAPI3REF: Function Auxiliary Data ** ** The following two functions may be used by scalar SQL functions to ** associate metadata with argument values. If the same value is passed to @@ -3857,48 +4598,45 @@ SQLITE_API sqlite3 *sqlite3_context_db_handle(sqlite3_context*); ** invocations of the same function so that the original pattern string ** does not need to be recompiled on each invocation. ** -** The sqlite3_get_auxdata() interface returns a pointer to the metadata +** ^The sqlite3_get_auxdata() interface returns a pointer to the metadata ** associated by the sqlite3_set_auxdata() function with the Nth argument -** value to the application-defined function. If no metadata has been ever +** value to the application-defined function. ^If no metadata has been ever ** been set for the Nth argument of the function, or if the corresponding ** function parameter has changed since the meta-data was set, ** then sqlite3_get_auxdata() returns a NULL pointer. ** -** The sqlite3_set_auxdata() interface saves the metadata +** ^The sqlite3_set_auxdata() interface saves the metadata ** pointed to by its 3rd parameter as the metadata for the N-th ** argument of the application-defined function. Subsequent ** calls to sqlite3_get_auxdata() might return this data, if it has ** not been destroyed. -** If it is not NULL, SQLite will invoke the destructor +** ^If it is not NULL, SQLite will invoke the destructor ** function given by the 4th parameter to sqlite3_set_auxdata() on ** the metadata when the corresponding function parameter changes ** or when the SQL statement completes, whichever comes first. ** ** SQLite is free to call the destructor and drop metadata on any -** parameter of any function at any time. The only guarantee is that +** parameter of any function at any time. ^The only guarantee is that ** the destructor will be called before the metadata is dropped. ** -** In practice, metadata is preserved between function calls for +** ^(In practice, metadata is preserved between function calls for ** expressions that are constant at compile time. This includes literal -** values and SQL variables. +** values and [parameters].)^ ** ** These routines must be called from the same thread in which ** the SQL function is running. -** -** Requirements: -** [H16272] [H16274] [H16276] [H16277] [H16278] [H16279] */ SQLITE_API void *sqlite3_get_auxdata(sqlite3_context*, int N); SQLITE_API void sqlite3_set_auxdata(sqlite3_context*, int N, void*, void (*)(void*)); /* -** CAPI3REF: Constants Defining Special Destructor Behavior {H10280} +** CAPI3REF: Constants Defining Special Destructor Behavior ** ** These are special values for the destructor that is passed in as the -** final argument to routines like [sqlite3_result_blob()]. If the destructor +** final argument to routines like [sqlite3_result_blob()]. ^If the destructor ** argument is SQLITE_STATIC, it means that the content pointer is constant -** and will never change. It does not need to be destroyed. The +** and will never change. It does not need to be destroyed. ^The ** SQLITE_TRANSIENT value means that the content will likely change in ** the near future and that SQLite should make its own private copy of ** the content before returning. @@ -3911,7 +4649,7 @@ typedef void (*sqlite3_destructor_type)(void*); #define SQLITE_TRANSIENT ((sqlite3_destructor_type)-1) /* -** CAPI3REF: Setting The Result Of An SQL Function {H16400} +** CAPI3REF: Setting The Result Of An SQL Function ** ** These routines are used by the xFunc or xFinal callbacks that ** implement SQL functions and aggregates. See @@ -3922,102 +4660,103 @@ typedef void (*sqlite3_destructor_type)(void*); ** functions used to bind values to host parameters in prepared statements. ** Refer to the [SQL parameter] documentation for additional information. ** -** The sqlite3_result_blob() interface sets the result from +** ^The sqlite3_result_blob() interface sets the result from ** an application-defined function to be the BLOB whose content is pointed ** to by the second parameter and which is N bytes long where N is the ** third parameter. ** -** The sqlite3_result_zeroblob() interfaces set the result of +** ^The sqlite3_result_zeroblob() interfaces set the result of ** the application-defined function to be a BLOB containing all zero ** bytes and N bytes in size, where N is the value of the 2nd parameter. ** -** The sqlite3_result_double() interface sets the result from +** ^The sqlite3_result_double() interface sets the result from ** an application-defined function to be a floating point value specified ** by its 2nd argument. ** -** The sqlite3_result_error() and sqlite3_result_error16() functions +** ^The sqlite3_result_error() and sqlite3_result_error16() functions ** cause the implemented SQL function to throw an exception. -** SQLite uses the string pointed to by the +** ^SQLite uses the string pointed to by the ** 2nd parameter of sqlite3_result_error() or sqlite3_result_error16() -** as the text of an error message. SQLite interprets the error -** message string from sqlite3_result_error() as UTF-8. SQLite +** as the text of an error message. ^SQLite interprets the error +** message string from sqlite3_result_error() as UTF-8. ^SQLite ** interprets the string from sqlite3_result_error16() as UTF-16 in native -** byte order. If the third parameter to sqlite3_result_error() +** byte order. ^If the third parameter to sqlite3_result_error() ** or sqlite3_result_error16() is negative then SQLite takes as the error ** message all text up through the first zero character. -** If the third parameter to sqlite3_result_error() or +** ^If the third parameter to sqlite3_result_error() or ** sqlite3_result_error16() is non-negative then SQLite takes that many ** bytes (not characters) from the 2nd parameter as the error message. -** The sqlite3_result_error() and sqlite3_result_error16() +** ^The sqlite3_result_error() and sqlite3_result_error16() ** routines make a private copy of the error message text before ** they return. Hence, the calling function can deallocate or ** modify the text after they return without harm. -** The sqlite3_result_error_code() function changes the error code -** returned by SQLite as a result of an error in a function. By default, -** the error code is SQLITE_ERROR. A subsequent call to sqlite3_result_error() +** ^The sqlite3_result_error_code() function changes the error code +** returned by SQLite as a result of an error in a function. ^By default, +** the error code is SQLITE_ERROR. ^A subsequent call to sqlite3_result_error() ** or sqlite3_result_error16() resets the error code to SQLITE_ERROR. ** -** The sqlite3_result_toobig() interface causes SQLite to throw an error -** indicating that a string or BLOB is to long to represent. +** ^The sqlite3_result_toobig() interface causes SQLite to throw an error +** indicating that a string or BLOB is too long to represent. ** -** The sqlite3_result_nomem() interface causes SQLite to throw an error +** ^The sqlite3_result_nomem() interface causes SQLite to throw an error ** indicating that a memory allocation failed. ** -** The sqlite3_result_int() interface sets the return value +** ^The sqlite3_result_int() interface sets the return value ** of the application-defined function to be the 32-bit signed integer ** value given in the 2nd argument. -** The sqlite3_result_int64() interface sets the return value +** ^The sqlite3_result_int64() interface sets the return value ** of the application-defined function to be the 64-bit signed integer ** value given in the 2nd argument. ** -** The sqlite3_result_null() interface sets the return value +** ^The sqlite3_result_null() interface sets the return value ** of the application-defined function to be NULL. ** -** The sqlite3_result_text(), sqlite3_result_text16(), +** ^The sqlite3_result_text(), sqlite3_result_text16(), ** sqlite3_result_text16le(), and sqlite3_result_text16be() interfaces ** set the return value of the application-defined function to be ** a text string which is represented as UTF-8, UTF-16 native byte order, ** UTF-16 little endian, or UTF-16 big endian, respectively. -** SQLite takes the text result from the application from +** ^SQLite takes the text result from the application from ** the 2nd parameter of the sqlite3_result_text* interfaces. -** If the 3rd parameter to the sqlite3_result_text* interfaces +** ^If the 3rd parameter to the sqlite3_result_text* interfaces ** is negative, then SQLite takes result text from the 2nd parameter ** through the first zero character. -** If the 3rd parameter to the sqlite3_result_text* interfaces +** ^If the 3rd parameter to the sqlite3_result_text* interfaces ** is non-negative, then as many bytes (not characters) of the text ** pointed to by the 2nd parameter are taken as the application-defined -** function result. -** If the 4th parameter to the sqlite3_result_text* interfaces +** function result. If the 3rd parameter is non-negative, then it +** must be the byte offset into the string where the NUL terminator would +** appear if the string where NUL terminated. If any NUL characters occur +** in the string at a byte offset that is less than the value of the 3rd +** parameter, then the resulting string will contain embedded NULs and the +** result of expressions operating on strings with embedded NULs is undefined. +** ^If the 4th parameter to the sqlite3_result_text* interfaces ** or sqlite3_result_blob is a non-NULL pointer, then SQLite calls that ** function as the destructor on the text or BLOB result when it has ** finished using that result. -** If the 4th parameter to the sqlite3_result_text* interfaces or +** ^If the 4th parameter to the sqlite3_result_text* interfaces or to ** sqlite3_result_blob is the special constant SQLITE_STATIC, then SQLite ** assumes that the text or BLOB result is in constant space and does not -** copy the it or call a destructor when it has finished using that result. -** If the 4th parameter to the sqlite3_result_text* interfaces +** copy the content of the parameter nor call a destructor on the content +** when it has finished using that result. +** ^If the 4th parameter to the sqlite3_result_text* interfaces ** or sqlite3_result_blob is the special constant SQLITE_TRANSIENT ** then SQLite makes a copy of the result into space obtained from ** from [sqlite3_malloc()] before it returns. ** -** The sqlite3_result_value() interface sets the result of +** ^The sqlite3_result_value() interface sets the result of ** the application-defined function to be a copy the -** [unprotected sqlite3_value] object specified by the 2nd parameter. The +** [unprotected sqlite3_value] object specified by the 2nd parameter. ^The ** sqlite3_result_value() interface makes a copy of the [sqlite3_value] ** so that the [sqlite3_value] specified in the parameter may change or ** be deallocated after sqlite3_result_value() returns without harm. -** A [protected sqlite3_value] object may always be used where an +** ^A [protected sqlite3_value] object may always be used where an ** [unprotected sqlite3_value] object is required, so either ** kind of [sqlite3_value] object can be used with this interface. ** ** If these routines are called from within the different thread ** than the one containing the application-defined function that received ** the [sqlite3_context] pointer, the results are undefined. -** -** Requirements: -** [H16403] [H16406] [H16409] [H16412] [H16415] [H16418] [H16421] [H16424] -** [H16427] [H16430] [H16433] [H16436] [H16439] [H16442] [H16445] [H16448] -** [H16451] [H16454] [H16457] [H16460] [H16463] */ SQLITE_API void sqlite3_result_blob(sqlite3_context*, const void*, int, void(*)(void*)); SQLITE_API void sqlite3_result_double(sqlite3_context*, double); @@ -4037,67 +4776,96 @@ SQLITE_API void sqlite3_result_value(sqlite3_context*, sqlite3_value*); SQLITE_API void sqlite3_result_zeroblob(sqlite3_context*, int n); /* -** CAPI3REF: Define New Collating Sequences {H16600} +** CAPI3REF: Define New Collating Sequences ** -** These functions are used to add new collation sequences to the -** [database connection] specified as the first argument. +** ^These functions add, remove, or modify a [collation] associated +** with the [database connection] specified as the first argument. ** -** The name of the new collation sequence is specified as a UTF-8 string +** ^The name of the collation is a UTF-8 string ** for sqlite3_create_collation() and sqlite3_create_collation_v2() -** and a UTF-16 string for sqlite3_create_collation16(). In all cases -** the name is passed as the second function argument. -** -** The third argument may be one of the constants [SQLITE_UTF8], -** [SQLITE_UTF16LE], or [SQLITE_UTF16BE], indicating that the user-supplied -** routine expects to be passed pointers to strings encoded using UTF-8, -** UTF-16 little-endian, or UTF-16 big-endian, respectively. The -** third argument might also be [SQLITE_UTF16] to indicate that the routine -** expects pointers to be UTF-16 strings in the native byte order, or the -** argument can be [SQLITE_UTF16_ALIGNED] if the -** the routine expects pointers to 16-bit word aligned strings -** of UTF-16 in the native byte order. -** -** A pointer to the user supplied routine must be passed as the fifth -** argument. If it is NULL, this is the same as deleting the collation -** sequence (so that SQLite cannot call it anymore). -** Each time the application supplied function is invoked, it is passed -** as its first parameter a copy of the void* passed as the fourth argument -** to sqlite3_create_collation() or sqlite3_create_collation16(). -** -** The remaining arguments to the application-supplied routine are two strings, -** each represented by a (length, data) pair and encoded in the encoding -** that was passed as the third argument when the collation sequence was -** registered. {END} The application defined collation routine should -** return negative, zero or positive if the first string is less than, -** equal to, or greater than the second string. i.e. (STRING1 - STRING2). -** -** The sqlite3_create_collation_v2() works like sqlite3_create_collation() -** except that it takes an extra argument which is a destructor for -** the collation. The destructor is called when the collation is -** destroyed and is passed a copy of the fourth parameter void* pointer -** of the sqlite3_create_collation_v2(). -** Collations are destroyed when they are overridden by later calls to the -** collation creation functions or when the [database connection] is closed -** using [sqlite3_close()]. +** and a UTF-16 string in native byte order for sqlite3_create_collation16(). +** ^Collation names that compare equal according to [sqlite3_strnicmp()] are +** considered to be the same name. ** -** See also: [sqlite3_collation_needed()] and [sqlite3_collation_needed16()]. +** ^(The third argument (eTextRep) must be one of the constants: +**
      +**
    • [SQLITE_UTF8], +**
    • [SQLITE_UTF16LE], +**
    • [SQLITE_UTF16BE], +**
    • [SQLITE_UTF16], or +**
    • [SQLITE_UTF16_ALIGNED]. +**
    )^ +** ^The eTextRep argument determines the encoding of strings passed +** to the collating function callback, xCallback. +** ^The [SQLITE_UTF16] and [SQLITE_UTF16_ALIGNED] values for eTextRep +** force strings to be UTF16 with native byte order. +** ^The [SQLITE_UTF16_ALIGNED] value for eTextRep forces strings to begin +** on an even byte address. +** +** ^The fourth argument, pArg, is an application data pointer that is passed +** through as the first argument to the collating function callback. +** +** ^The fifth argument, xCallback, is a pointer to the collating function. +** ^Multiple collating functions can be registered using the same name but +** with different eTextRep parameters and SQLite will use whichever +** function requires the least amount of data transformation. +** ^If the xCallback argument is NULL then the collating function is +** deleted. ^When all collating functions having the same name are deleted, +** that collation is no longer usable. +** +** ^The collating function callback is invoked with a copy of the pArg +** application data pointer and with two strings in the encoding specified +** by the eTextRep argument. The collating function must return an +** integer that is negative, zero, or positive +** if the first string is less than, equal to, or greater than the second, +** respectively. A collating function must always return the same answer +** given the same inputs. If two or more collating functions are registered +** to the same collation name (using different eTextRep values) then all +** must give an equivalent answer when invoked with equivalent strings. +** The collating function must obey the following properties for all +** strings A, B, and C: +** +**
      +**
    1. If A==B then B==A. +**
    2. If A==B and B==C then A==C. +**
    3. If A<B THEN B>A. +**
    4. If A<B and B<C then A<C. +**
    ** -** Requirements: -** [H16603] [H16604] [H16606] [H16609] [H16612] [H16615] [H16618] [H16621] -** [H16624] [H16627] [H16630] +** If a collating function fails any of the above constraints and that +** collating function is registered and used, then the behavior of SQLite +** is undefined. +** +** ^The sqlite3_create_collation_v2() works like sqlite3_create_collation() +** with the addition that the xDestroy callback is invoked on pArg when +** the collating function is deleted. +** ^Collating functions are deleted when they are overridden by later +** calls to the collation creation functions or when the +** [database connection] is closed using [sqlite3_close()]. +** +** ^The xDestroy callback is not called if the +** sqlite3_create_collation_v2() function fails. Applications that invoke +** sqlite3_create_collation_v2() with a non-NULL xDestroy argument should +** check the return code and dispose of the application data pointer +** themselves rather than expecting SQLite to deal with it for them. +** This is different from every other SQLite interface. The inconsistency +** is unfortunate but cannot be changed without breaking backwards +** compatibility. +** +** See also: [sqlite3_collation_needed()] and [sqlite3_collation_needed16()]. */ SQLITE_API int sqlite3_create_collation( sqlite3*, const char *zName, int eTextRep, - void*, + void *pArg, int(*xCompare)(void*,int,const void*,int,const void*) ); SQLITE_API int sqlite3_create_collation_v2( sqlite3*, const char *zName, int eTextRep, - void*, + void *pArg, int(*xCompare)(void*,int,const void*,int,const void*), void(*xDestroy)(void*) ); @@ -4105,38 +4873,35 @@ SQLITE_API int sqlite3_create_collation16( sqlite3*, const void *zName, int eTextRep, - void*, + void *pArg, int(*xCompare)(void*,int,const void*,int,const void*) ); /* -** CAPI3REF: Collation Needed Callbacks {H16700} +** CAPI3REF: Collation Needed Callbacks ** -** To avoid having to register all collation sequences before a database +** ^To avoid having to register all collation sequences before a database ** can be used, a single callback function may be registered with the -** [database connection] to be called whenever an undefined collation +** [database connection] to be invoked whenever an undefined collation ** sequence is required. ** -** If the function is registered using the sqlite3_collation_needed() API, +** ^If the function is registered using the sqlite3_collation_needed() API, ** then it is passed the names of undefined collation sequences as strings -** encoded in UTF-8. {H16703} If sqlite3_collation_needed16() is used, +** encoded in UTF-8. ^If sqlite3_collation_needed16() is used, ** the names are passed as UTF-16 in machine native byte order. -** A call to either function replaces any existing callback. +** ^A call to either function replaces the existing collation-needed callback. ** -** When the callback is invoked, the first argument passed is a copy +** ^(When the callback is invoked, the first argument passed is a copy ** of the second argument to sqlite3_collation_needed() or ** sqlite3_collation_needed16(). The second argument is the database ** connection. The third argument is one of [SQLITE_UTF8], [SQLITE_UTF16BE], ** or [SQLITE_UTF16LE], indicating the most desirable form of the collation ** sequence function required. The fourth parameter is the name of the -** required collation sequence. +** required collation sequence.)^ ** ** The callback function should register the desired collation using ** [sqlite3_create_collation()], [sqlite3_create_collation16()], or ** [sqlite3_create_collation_v2()]. -** -** Requirements: -** [H16702] [H16704] [H16706] */ SQLITE_API int sqlite3_collation_needed( sqlite3*, @@ -4149,6 +4914,7 @@ SQLITE_API int sqlite3_collation_needed16( void(*)(void*,sqlite3*,int eTextRep,const void*) ); +#ifdef SQLITE_HAS_CODEC /* ** Specify the key for an encrypted database. This routine should be ** called right after sqlite3_open(). @@ -4175,7 +4941,26 @@ SQLITE_API int sqlite3_rekey( ); /* -** CAPI3REF: Suspend Execution For A Short Time {H10530} +** Specify the activation key for a SEE database. Unless +** activated, none of the SEE routines will work. +*/ +SQLITE_API void sqlite3_activate_see( + const char *zPassPhrase /* Activation phrase */ +); +#endif + +#ifdef SQLITE_ENABLE_CEROD +/* +** Specify the activation key for a CEROD database. Unless +** activated, none of the CEROD routines will work. +*/ +SQLITE_API void sqlite3_activate_cerod( + const char *zPassPhrase /* Activation phrase */ +); +#endif + +/* +** CAPI3REF: Suspend Execution For A Short Time ** ** The sqlite3_sleep() function causes the current thread to suspend execution ** for at least a number of milliseconds specified in its parameter. @@ -4185,19 +4970,21 @@ SQLITE_API int sqlite3_rekey( ** the nearest second. The number of milliseconds of sleep actually ** requested from the operating system is returned. ** -** SQLite implements this interface by calling the xSleep() -** method of the default [sqlite3_vfs] object. -** -** Requirements: [H10533] [H10536] +** ^SQLite implements this interface by calling the xSleep() +** method of the default [sqlite3_vfs] object. If the xSleep() method +** of the default VFS is not implemented correctly, or not implemented at +** all, then the behavior of sqlite3_sleep() may deviate from the description +** in the previous paragraphs. */ SQLITE_API int sqlite3_sleep(int); /* -** CAPI3REF: Name Of The Folder Holding Temporary Files {H10310} +** CAPI3REF: Name Of The Folder Holding Temporary Files ** -** If this global variable is made to point to a string which is +** ^(If this global variable is made to point to a string which is ** the name of a folder (a.k.a. directory), then all temporary files -** created by SQLite will be placed in that directory. If this variable +** created by SQLite when using a built-in [sqlite3_vfs | VFS] +** will be placed in that directory.)^ ^If this variable ** is a NULL pointer, then SQLite performs a search for an appropriate ** temporary file directory. ** @@ -4210,8 +4997,8 @@ SQLITE_API int sqlite3_sleep(int); ** routines have been called and that this variable remain unchanged ** thereafter. ** -** The [temp_store_directory pragma] may modify this variable and cause -** it to point to memory obtained from [sqlite3_malloc]. Furthermore, +** ^The [temp_store_directory pragma] may modify this variable and cause +** it to point to memory obtained from [sqlite3_malloc]. ^Furthermore, ** the [temp_store_directory pragma] always assumes that any string ** that this variable points to is held in memory obtained from ** [sqlite3_malloc] and the pragma may attempt to free that memory @@ -4223,14 +5010,51 @@ SQLITE_API int sqlite3_sleep(int); SQLITE_API char *sqlite3_temp_directory; /* -** CAPI3REF: Test For Auto-Commit Mode {H12930} +** CAPI3REF: Name Of The Folder Holding Database Files +** +** ^(If this global variable is made to point to a string which is +** the name of a folder (a.k.a. directory), then all database files +** specified with a relative pathname and created or accessed by +** SQLite when using a built-in windows [sqlite3_vfs | VFS] will be assumed +** to be relative to that directory.)^ ^If this variable is a NULL +** pointer, then SQLite assumes that all database files specified +** with a relative pathname are relative to the current directory +** for the process. Only the windows VFS makes use of this global +** variable; it is ignored by the unix VFS. +** +** Changing the value of this variable while a database connection is +** open can result in a corrupt database. +** +** It is not safe to read or modify this variable in more than one +** thread at a time. It is not safe to read or modify this variable +** if a [database connection] is being used at the same time in a separate +** thread. +** It is intended that this variable be set once +** as part of process initialization and before any SQLite interface +** routines have been called and that this variable remain unchanged +** thereafter. +** +** ^The [data_store_directory pragma] may modify this variable and cause +** it to point to memory obtained from [sqlite3_malloc]. ^Furthermore, +** the [data_store_directory pragma] always assumes that any string +** that this variable points to is held in memory obtained from +** [sqlite3_malloc] and the pragma may attempt to free that memory +** using [sqlite3_free]. +** Hence, if this variable is modified directly, either it should be +** made NULL or made to point to memory obtained from [sqlite3_malloc] +** or else the use of the [data_store_directory pragma] should be avoided. +*/ +SQLITE_API char *sqlite3_data_directory; + +/* +** CAPI3REF: Test For Auto-Commit Mode ** KEYWORDS: {autocommit mode} ** -** The sqlite3_get_autocommit() interface returns non-zero or +** ^The sqlite3_get_autocommit() interface returns non-zero or ** zero if the given database connection is or is not in autocommit mode, -** respectively. Autocommit mode is on by default. -** Autocommit mode is disabled by a [BEGIN] statement. -** Autocommit mode is re-enabled by a [COMMIT] or [ROLLBACK]. +** respectively. ^Autocommit mode is on by default. +** ^Autocommit mode is disabled by a [BEGIN] statement. +** ^Autocommit mode is re-enabled by a [COMMIT] or [ROLLBACK]. ** ** If certain kinds of errors occur on a statement within a multi-statement ** transaction (errors including [SQLITE_FULL], [SQLITE_IOERR], @@ -4242,120 +5066,137 @@ SQLITE_API char *sqlite3_temp_directory; ** If another thread changes the autocommit status of the database ** connection while this routine is running, then the return value ** is undefined. -** -** Requirements: [H12931] [H12932] [H12933] [H12934] */ SQLITE_API int sqlite3_get_autocommit(sqlite3*); /* -** CAPI3REF: Find The Database Handle Of A Prepared Statement {H13120} +** CAPI3REF: Find The Database Handle Of A Prepared Statement ** -** The sqlite3_db_handle interface returns the [database connection] handle -** to which a [prepared statement] belongs. The [database connection] -** returned by sqlite3_db_handle is the same [database connection] that was the first argument +** ^The sqlite3_db_handle interface returns the [database connection] handle +** to which a [prepared statement] belongs. ^The [database connection] +** returned by sqlite3_db_handle is the same [database connection] +** that was the first argument ** to the [sqlite3_prepare_v2()] call (or its variants) that was used to ** create the statement in the first place. -** -** Requirements: [H13123] */ SQLITE_API sqlite3 *sqlite3_db_handle(sqlite3_stmt*); /* -** CAPI3REF: Find the next prepared statement {H13140} +** CAPI3REF: Return The Filename For A Database Connection +** +** ^The sqlite3_db_filename(D,N) interface returns a pointer to a filename +** associated with database N of connection D. ^The main database file +** has the name "main". If there is no attached database N on the database +** connection D, or if database N is a temporary or in-memory database, then +** a NULL pointer is returned. +** +** ^The filename returned by this function is the output of the +** xFullPathname method of the [VFS]. ^In other words, the filename +** will be an absolute pathname, even if the filename used +** to open the database originally was a URI or relative pathname. +*/ +SQLITE_API const char *sqlite3_db_filename(sqlite3 *db, const char *zDbName); + +/* +** CAPI3REF: Determine if a database is read-only ** -** This interface returns a pointer to the next [prepared statement] after -** pStmt associated with the [database connection] pDb. If pStmt is NULL +** ^The sqlite3_db_readonly(D,N) interface returns 1 if the database N +** of connection D is read-only, 0 if it is read/write, or -1 if N is not +** the name of a database on connection D. +*/ +SQLITE_API int sqlite3_db_readonly(sqlite3 *db, const char *zDbName); + +/* +** CAPI3REF: Find the next prepared statement +** +** ^This interface returns a pointer to the next [prepared statement] after +** pStmt associated with the [database connection] pDb. ^If pStmt is NULL ** then this interface returns a pointer to the first prepared statement -** associated with the database connection pDb. If no prepared statement +** associated with the database connection pDb. ^If no prepared statement ** satisfies the conditions of this routine, it returns NULL. ** ** The [database connection] pointer D in a call to ** [sqlite3_next_stmt(D,S)] must refer to an open database ** connection and in particular must not be a NULL pointer. -** -** Requirements: [H13143] [H13146] [H13149] [H13152] */ SQLITE_API sqlite3_stmt *sqlite3_next_stmt(sqlite3 *pDb, sqlite3_stmt *pStmt); /* -** CAPI3REF: Commit And Rollback Notification Callbacks {H12950} +** CAPI3REF: Commit And Rollback Notification Callbacks ** -** The sqlite3_commit_hook() interface registers a callback +** ^The sqlite3_commit_hook() interface registers a callback ** function to be invoked whenever a transaction is [COMMIT | committed]. -** Any callback set by a previous call to sqlite3_commit_hook() +** ^Any callback set by a previous call to sqlite3_commit_hook() ** for the same database connection is overridden. -** The sqlite3_rollback_hook() interface registers a callback +** ^The sqlite3_rollback_hook() interface registers a callback ** function to be invoked whenever a transaction is [ROLLBACK | rolled back]. -** Any callback set by a previous call to sqlite3_commit_hook() +** ^Any callback set by a previous call to sqlite3_rollback_hook() ** for the same database connection is overridden. -** The pArg argument is passed through to the callback. -** If the callback on a commit hook function returns non-zero, +** ^The pArg argument is passed through to the callback. +** ^If the callback on a commit hook function returns non-zero, ** then the commit is converted into a rollback. ** -** If another function was previously registered, its -** pArg value is returned. Otherwise NULL is returned. +** ^The sqlite3_commit_hook(D,C,P) and sqlite3_rollback_hook(D,C,P) functions +** return the P argument from the previous call of the same function +** on the same [database connection] D, or NULL for +** the first call for each function on D. ** +** The commit and rollback hook callbacks are not reentrant. ** The callback implementation must not do anything that will modify ** the database connection that invoked the callback. Any actions ** to modify the database connection must be deferred until after the ** completion of the [sqlite3_step()] call that triggered the commit ** or rollback hook in the first place. -** Note that [sqlite3_prepare_v2()] and [sqlite3_step()] both modify their -** database connections for the meaning of "modify" in this paragraph. +** Note that running any other SQL statements, including SELECT statements, +** or merely calling [sqlite3_prepare_v2()] and [sqlite3_step()] will modify +** the database connections for the meaning of "modify" in this paragraph. ** -** Registering a NULL function disables the callback. +** ^Registering a NULL function disables the callback. ** -** When the commit hook callback routine returns zero, the [COMMIT] -** operation is allowed to continue normally. If the commit hook +** ^When the commit hook callback routine returns zero, the [COMMIT] +** operation is allowed to continue normally. ^If the commit hook ** returns non-zero, then the [COMMIT] is converted into a [ROLLBACK]. -** The rollback hook is invoked on a rollback that results from a commit +** ^The rollback hook is invoked on a rollback that results from a commit ** hook returning non-zero, just as it would be with any other rollback. ** -** For the purposes of this API, a transaction is said to have been +** ^For the purposes of this API, a transaction is said to have been ** rolled back if an explicit "ROLLBACK" statement is executed, or ** an error or constraint causes an implicit rollback to occur. -** The rollback callback is not invoked if a transaction is +** ^The rollback callback is not invoked if a transaction is ** automatically rolled back because the database connection is closed. -** The rollback callback is not invoked if a transaction is -** rolled back because a commit callback returned non-zero. -** Check on this ** ** See also the [sqlite3_update_hook()] interface. -** -** Requirements: -** [H12951] [H12952] [H12953] [H12954] [H12955] -** [H12961] [H12962] [H12963] [H12964] */ SQLITE_API void *sqlite3_commit_hook(sqlite3*, int(*)(void*), void*); SQLITE_API void *sqlite3_rollback_hook(sqlite3*, void(*)(void *), void*); /* -** CAPI3REF: Data Change Notification Callbacks {H12970} +** CAPI3REF: Data Change Notification Callbacks ** -** The sqlite3_update_hook() interface registers a callback function +** ^The sqlite3_update_hook() interface registers a callback function ** with the [database connection] identified by the first argument ** to be invoked whenever a row is updated, inserted or deleted. -** Any callback set by a previous call to this function +** ^Any callback set by a previous call to this function ** for the same database connection is overridden. ** -** The second argument is a pointer to the function to invoke when a +** ^The second argument is a pointer to the function to invoke when a ** row is updated, inserted or deleted. -** The first argument to the callback is a copy of the third argument +** ^The first argument to the callback is a copy of the third argument ** to sqlite3_update_hook(). -** The second callback argument is one of [SQLITE_INSERT], [SQLITE_DELETE], +** ^The second callback argument is one of [SQLITE_INSERT], [SQLITE_DELETE], ** or [SQLITE_UPDATE], depending on the operation that caused the callback ** to be invoked. -** The third and fourth arguments to the callback contain pointers to the +** ^The third and fourth arguments to the callback contain pointers to the ** database and table name containing the affected row. -** The final callback parameter is the [rowid] of the row. -** In the case of an update, this is the [rowid] after the update takes place. +** ^The final callback parameter is the [rowid] of the row. +** ^In the case of an update, this is the [rowid] after the update takes place. ** -** The update hook is not invoked when internal system tables are -** modified (i.e. sqlite_master and sqlite_sequence). +** ^(The update hook is not invoked when internal system tables are +** modified (i.e. sqlite_master and sqlite_sequence).)^ ** -** In the current implementation, the update hook +** ^In the current implementation, the update hook ** is not invoked when duplication rows are deleted because of an -** [ON CONFLICT | ON CONFLICT REPLACE] clause. Nor is the update hook +** [ON CONFLICT | ON CONFLICT REPLACE] clause. ^Nor is the update hook ** invoked when rows are deleted using the [truncate optimization]. ** The exceptions defined in this paragraph might change in a future ** release of SQLite. @@ -4367,14 +5208,13 @@ SQLITE_API void *sqlite3_rollback_hook(sqlite3*, void(*)(void *), void*); ** Note that [sqlite3_prepare_v2()] and [sqlite3_step()] both modify their ** database connections for the meaning of "modify" in this paragraph. ** -** If another function was previously registered, its pArg value -** is returned. Otherwise NULL is returned. +** ^The sqlite3_update_hook(D,C,P) function +** returns the P argument from the previous call +** on the same [database connection] D, or NULL for +** the first call on D. ** ** See also the [sqlite3_commit_hook()] and [sqlite3_rollback_hook()] ** interfaces. -** -** Requirements: -** [H12971] [H12973] [H12975] [H12977] [H12979] [H12981] [H12983] [H12986] */ SQLITE_API void *sqlite3_update_hook( sqlite3*, @@ -4383,112 +5223,149 @@ SQLITE_API void *sqlite3_update_hook( ); /* -** CAPI3REF: Enable Or Disable Shared Pager Cache {H10330} -** KEYWORDS: {shared cache} {shared cache mode} +** CAPI3REF: Enable Or Disable Shared Pager Cache ** -** This routine enables or disables the sharing of the database cache +** ^(This routine enables or disables the sharing of the database cache ** and schema data structures between [database connection | connections] ** to the same database. Sharing is enabled if the argument is true -** and disabled if the argument is false. +** and disabled if the argument is false.)^ ** -** Cache sharing is enabled and disabled for an entire process. +** ^Cache sharing is enabled and disabled for an entire process. ** This is a change as of SQLite version 3.5.0. In prior versions of SQLite, ** sharing was enabled or disabled for each thread separately. ** -** The cache sharing mode set by this interface effects all subsequent +** ^(The cache sharing mode set by this interface effects all subsequent ** calls to [sqlite3_open()], [sqlite3_open_v2()], and [sqlite3_open16()]. ** Existing database connections continue use the sharing mode -** that was in effect at the time they were opened. -** -** Virtual tables cannot be used with a shared cache. When shared -** cache is enabled, the [sqlite3_create_module()] API used to register -** virtual tables will always return an error. +** that was in effect at the time they were opened.)^ ** -** This routine returns [SQLITE_OK] if shared cache was enabled or disabled -** successfully. An [error code] is returned otherwise. +** ^(This routine returns [SQLITE_OK] if shared cache was enabled or disabled +** successfully. An [error code] is returned otherwise.)^ ** -** Shared cache is disabled by default. But this might change in +** ^Shared cache is disabled by default. But this might change in ** future releases of SQLite. Applications that care about shared ** cache setting should set it explicitly. ** ** See Also: [SQLite Shared-Cache Mode] -** -** Requirements: [H10331] [H10336] [H10337] [H10339] */ SQLITE_API int sqlite3_enable_shared_cache(int); /* -** CAPI3REF: Attempt To Free Heap Memory {H17340} +** CAPI3REF: Attempt To Free Heap Memory ** -** The sqlite3_release_memory() interface attempts to free N bytes +** ^The sqlite3_release_memory() interface attempts to free N bytes ** of heap memory by deallocating non-essential memory allocations -** held by the database library. {END} Memory used to cache database +** held by the database library. Memory used to cache database ** pages to improve performance is an example of non-essential memory. -** sqlite3_release_memory() returns the number of bytes actually freed, +** ^sqlite3_release_memory() returns the number of bytes actually freed, ** which might be more or less than the amount requested. +** ^The sqlite3_release_memory() routine is a no-op returning zero +** if SQLite is not compiled with [SQLITE_ENABLE_MEMORY_MANAGEMENT]. ** -** Requirements: [H17341] [H17342] +** See also: [sqlite3_db_release_memory()] */ SQLITE_API int sqlite3_release_memory(int); /* -** CAPI3REF: Impose A Limit On Heap Size {H17350} +** CAPI3REF: Free Memory Used By A Database Connection +** +** ^The sqlite3_db_release_memory(D) interface attempts to free as much heap +** memory as possible from database connection D. Unlike the +** [sqlite3_release_memory()] interface, this interface is effect even +** when then [SQLITE_ENABLE_MEMORY_MANAGEMENT] compile-time option is +** omitted. ** -** The sqlite3_soft_heap_limit() interface places a "soft" limit -** on the amount of heap memory that may be allocated by SQLite. -** If an internal allocation is requested that would exceed the -** soft heap limit, [sqlite3_release_memory()] is invoked one or -** more times to free up some space before the allocation is performed. +** See also: [sqlite3_release_memory()] +*/ +SQLITE_API int sqlite3_db_release_memory(sqlite3*); + +/* +** CAPI3REF: Impose A Limit On Heap Size ** -** The limit is called "soft", because if [sqlite3_release_memory()] -** cannot free sufficient memory to prevent the limit from being exceeded, -** the memory is allocated anyway and the current operation proceeds. +** ^The sqlite3_soft_heap_limit64() interface sets and/or queries the +** soft limit on the amount of heap memory that may be allocated by SQLite. +** ^SQLite strives to keep heap memory utilization below the soft heap +** limit by reducing the number of pages held in the page cache +** as heap memory usages approaches the limit. +** ^The soft heap limit is "soft" because even though SQLite strives to stay +** below the limit, it will exceed the limit rather than generate +** an [SQLITE_NOMEM] error. In other words, the soft heap limit +** is advisory only. ** -** A negative or zero value for N means that there is no soft heap limit and -** [sqlite3_release_memory()] will only be called when memory is exhausted. -** The default value for the soft heap limit is zero. +** ^The return value from sqlite3_soft_heap_limit64() is the size of +** the soft heap limit prior to the call, or negative in the case of an +** error. ^If the argument N is negative +** then no change is made to the soft heap limit. Hence, the current +** size of the soft heap limit can be determined by invoking +** sqlite3_soft_heap_limit64() with a negative argument. ** -** SQLite makes a best effort to honor the soft heap limit. -** But if the soft heap limit cannot be honored, execution will -** continue without error or notification. This is why the limit is -** called a "soft" limit. It is advisory only. +** ^If the argument N is zero then the soft heap limit is disabled. ** -** Prior to SQLite version 3.5.0, this routine only constrained the memory -** allocated by a single thread - the same thread in which this routine -** runs. Beginning with SQLite version 3.5.0, the soft heap limit is -** applied to all threads. The value specified for the soft heap limit -** is an upper bound on the total memory allocation for all threads. In -** version 3.5.0 there is no mechanism for limiting the heap usage for -** individual threads. +** ^(The soft heap limit is not enforced in the current implementation +** if one or more of following conditions are true: ** -** Requirements: -** [H16351] [H16352] [H16353] [H16354] [H16355] [H16358] +**
      +**
    • The soft heap limit is set to zero. +**
    • Memory accounting is disabled using a combination of the +** [sqlite3_config]([SQLITE_CONFIG_MEMSTATUS],...) start-time option and +** the [SQLITE_DEFAULT_MEMSTATUS] compile-time option. +**
    • An alternative page cache implementation is specified using +** [sqlite3_config]([SQLITE_CONFIG_PCACHE2],...). +**
    • The page cache allocates from its own memory pool supplied +** by [sqlite3_config]([SQLITE_CONFIG_PAGECACHE],...) rather than +** from the heap. +**
    )^ +** +** Beginning with SQLite version 3.7.3, the soft heap limit is enforced +** regardless of whether or not the [SQLITE_ENABLE_MEMORY_MANAGEMENT] +** compile-time option is invoked. With [SQLITE_ENABLE_MEMORY_MANAGEMENT], +** the soft heap limit is enforced on every memory allocation. Without +** [SQLITE_ENABLE_MEMORY_MANAGEMENT], the soft heap limit is only enforced +** when memory is allocated by the page cache. Testing suggests that because +** the page cache is the predominate memory user in SQLite, most +** applications will achieve adequate soft heap limit enforcement without +** the use of [SQLITE_ENABLE_MEMORY_MANAGEMENT]. +** +** The circumstances under which SQLite will enforce the soft heap limit may +** changes in future releases of SQLite. +*/ +SQLITE_API sqlite3_int64 sqlite3_soft_heap_limit64(sqlite3_int64 N); + +/* +** CAPI3REF: Deprecated Soft Heap Limit Interface +** DEPRECATED +** +** This is a deprecated version of the [sqlite3_soft_heap_limit64()] +** interface. This routine is provided for historical compatibility +** only. All new applications should use the +** [sqlite3_soft_heap_limit64()] interface rather than this one. */ -SQLITE_API void sqlite3_soft_heap_limit(int); +SQLITE_API SQLITE_DEPRECATED void sqlite3_soft_heap_limit(int N); + /* -** CAPI3REF: Extract Metadata About A Column Of A Table {H12850} +** CAPI3REF: Extract Metadata About A Column Of A Table ** -** This routine returns metadata about a specific column of a specific +** ^This routine returns metadata about a specific column of a specific ** database table accessible using the [database connection] handle ** passed as the first function argument. ** -** The column is identified by the second, third and fourth parameters to -** this function. The second parameter is either the name of the database -** (i.e. "main", "temp" or an attached database) containing the specified -** table or NULL. If it is NULL, then all attached databases are searched +** ^The column is identified by the second, third and fourth parameters to +** this function. ^The second parameter is either the name of the database +** (i.e. "main", "temp", or an attached database) containing the specified +** table or NULL. ^If it is NULL, then all attached databases are searched ** for the table using the same algorithm used by the database engine to ** resolve unqualified table references. ** -** The third and fourth parameters to this function are the table and column +** ^The third and fourth parameters to this function are the table and column ** name of the desired column, respectively. Neither of these parameters ** may be NULL. ** -** Metadata is returned by writing to the memory locations passed as the 5th -** and subsequent parameters to this function. Any of these arguments may be +** ^Metadata is returned by writing to the memory locations passed as the 5th +** and subsequent parameters to this function. ^Any of these arguments may be ** NULL, in which case the corresponding element of metadata is omitted. ** -**
    +** ^(
    ** **
    Parameter Output
    Type
    Description ** @@ -4498,17 +5375,17 @@ SQLITE_API void sqlite3_soft_heap_limit(int); **
    8th int True if column is part of the PRIMARY KEY **
    9th int True if column is [AUTOINCREMENT] **
    -**
    +**
    )^ ** -** The memory pointed to by the character pointers returned for the +** ^The memory pointed to by the character pointers returned for the ** declaration type and collation sequence is valid only until the next ** call to any SQLite API function. ** -** If the specified table is actually a view, an [error code] is returned. +** ^If the specified table is actually a view, an [error code] is returned. ** -** If the specified column is "rowid", "oid" or "_rowid_" and an +** ^If the specified column is "rowid", "oid" or "_rowid_" and an ** [INTEGER PRIMARY KEY] column has been explicitly declared, then the output -** parameters are set for the explicitly declared column. If there is no +** parameters are set for the explicitly declared column. ^(If there is no ** explicitly declared [INTEGER PRIMARY KEY] column, then the output ** parameters are set as follows: ** @@ -4518,14 +5395,14 @@ SQLITE_API void sqlite3_soft_heap_limit(int); ** not null: 0 ** primary key: 1 ** auto increment: 0 -** +** )^ ** -** This function may load one or more schemas from database files. If an +** ^(This function may load one or more schemas from database files. If an ** error occurs during this process, or if the requested table or column ** cannot be found, an [error code] is returned and an error message left -** in the [database connection] (to be retrieved using sqlite3_errmsg()). +** in the [database connection] (to be retrieved using sqlite3_errmsg()).)^ ** -** This API is only available if the library was compiled with the +** ^This API is only available if the library was compiled with the ** [SQLITE_ENABLE_COLUMN_METADATA] C-preprocessor symbol defined. */ SQLITE_API int sqlite3_table_column_metadata( @@ -4541,30 +5418,29 @@ SQLITE_API int sqlite3_table_column_metadata( ); /* -** CAPI3REF: Load An Extension {H12600} -** -** This interface loads an SQLite extension library from the named file. -** -** {H12601} The sqlite3_load_extension() interface attempts to load an -** SQLite extension library contained in the file zFile. +** CAPI3REF: Load An Extension ** -** {H12602} The entry point is zProc. +** ^This interface loads an SQLite extension library from the named file. ** -** {H12603} zProc may be 0, in which case the name of the entry point -** defaults to "sqlite3_extension_init". +** ^The sqlite3_load_extension() interface attempts to load an +** SQLite extension library contained in the file zFile. ** -** {H12604} The sqlite3_load_extension() interface shall return -** [SQLITE_OK] on success and [SQLITE_ERROR] if something goes wrong. +** ^The entry point is zProc. +** ^zProc may be 0, in which case the name of the entry point +** defaults to "sqlite3_extension_init". +** ^The sqlite3_load_extension() interface returns +** [SQLITE_OK] on success and [SQLITE_ERROR] if something goes wrong. +** ^If an error occurs and pzErrMsg is not 0, then the +** [sqlite3_load_extension()] interface shall attempt to +** fill *pzErrMsg with error message text stored in memory +** obtained from [sqlite3_malloc()]. The calling function +** should free this memory by calling [sqlite3_free()]. ** -** {H12605} If an error occurs and pzErrMsg is not 0, then the -** [sqlite3_load_extension()] interface shall attempt to -** fill *pzErrMsg with error message text stored in memory -** obtained from [sqlite3_malloc()]. {END} The calling function -** should free this memory by calling [sqlite3_free()]. +** ^Extension loading must be enabled using +** [sqlite3_enable_load_extension()] prior to calling this API, +** otherwise an error will be returned. ** -** {H12606} Extension loading must be enabled using -** [sqlite3_enable_load_extension()] prior to calling this API, -** otherwise an error will be returned. +** See also the [load_extension() SQL function]. */ SQLITE_API int sqlite3_load_extension( sqlite3 *db, /* Load the extension into this database connection */ @@ -4574,67 +5450,66 @@ SQLITE_API int sqlite3_load_extension( ); /* -** CAPI3REF: Enable Or Disable Extension Loading {H12620} +** CAPI3REF: Enable Or Disable Extension Loading ** -** So as not to open security holes in older applications that are +** ^So as not to open security holes in older applications that are ** unprepared to deal with extension loading, and as a means of disabling ** extension loading while evaluating user-entered SQL, the following API ** is provided to turn the [sqlite3_load_extension()] mechanism on and off. ** -** Extension loading is off by default. See ticket #1863. -** -** {H12621} Call the sqlite3_enable_load_extension() routine with onoff==1 -** to turn extension loading on and call it with onoff==0 to turn -** it back off again. -** -** {H12622} Extension loading is off by default. +** ^Extension loading is off by default. See ticket #1863. +** ^Call the sqlite3_enable_load_extension() routine with onoff==1 +** to turn extension loading on and call it with onoff==0 to turn +** it back off again. */ SQLITE_API int sqlite3_enable_load_extension(sqlite3 *db, int onoff); /* -** CAPI3REF: Automatically Load An Extensions {H12640} +** CAPI3REF: Automatically Load Statically Linked Extensions ** -** This API can be invoked at program startup in order to register -** one or more statically linked extensions that will be available -** to all new [database connections]. {END} +** ^This interface causes the xEntryPoint() function to be invoked for +** each new [database connection] that is created. The idea here is that +** xEntryPoint() is the entry point for a statically linked SQLite extension +** that is to be automatically loaded into all new database connections. ** -** This routine stores a pointer to the extension in an array that is -** obtained from [sqlite3_malloc()]. If you run a memory leak checker -** on your program and it reports a leak because of this array, invoke -** [sqlite3_reset_auto_extension()] prior to shutdown to free the memory. +** ^(Even though the function prototype shows that xEntryPoint() takes +** no arguments and returns void, SQLite invokes xEntryPoint() with three +** arguments and expects and integer result as if the signature of the +** entry point where as follows: ** -** {H12641} This function registers an extension entry point that is -** automatically invoked whenever a new [database connection] -** is opened using [sqlite3_open()], [sqlite3_open16()], -** or [sqlite3_open_v2()]. -** -** {H12642} Duplicate extensions are detected so calling this routine -** multiple times with the same extension is harmless. -** -** {H12643} This routine stores a pointer to the extension in an array -** that is obtained from [sqlite3_malloc()]. -** -** {H12644} Automatic extensions apply across all threads. +**
    +**    int xEntryPoint(
    +**      sqlite3 *db,
    +**      const char **pzErrMsg,
    +**      const struct sqlite3_api_routines *pThunk
    +**    );
    +** 
    )^ +** +** If the xEntryPoint routine encounters an error, it should make *pzErrMsg +** point to an appropriate error message (obtained from [sqlite3_mprintf()]) +** and return an appropriate [error code]. ^SQLite ensures that *pzErrMsg +** is NULL before calling the xEntryPoint(). ^SQLite will invoke +** [sqlite3_free()] on *pzErrMsg after xEntryPoint() returns. ^If any +** xEntryPoint() returns an error, the [sqlite3_open()], [sqlite3_open16()], +** or [sqlite3_open_v2()] call that provoked the xEntryPoint() will fail. +** +** ^Calling sqlite3_auto_extension(X) with an entry point X that is already +** on the list of automatic extensions is a harmless no-op. ^No entry point +** will be called more than once for each database connection that is opened. +** +** See also: [sqlite3_reset_auto_extension()]. */ SQLITE_API int sqlite3_auto_extension(void (*xEntryPoint)(void)); /* -** CAPI3REF: Reset Automatic Extension Loading {H12660} -** -** This function disables all previously registered automatic -** extensions. {END} It undoes the effect of all prior -** [sqlite3_auto_extension()] calls. +** CAPI3REF: Reset Automatic Extension Loading ** -** {H12661} This function disables all previously registered -** automatic extensions. -** -** {H12662} This function disables automatic extensions in all threads. +** ^This interface disables all automatic extensions previously +** registered using [sqlite3_auto_extension()]. */ SQLITE_API void sqlite3_reset_auto_extension(void); /* -****** EXPERIMENTAL - subject to change without notice ************** -** ** The interface to the virtual-table mechanism is currently considered ** to be experimental. The interface might change in incompatible ways. ** If this is a problem for you, do not use the interface at this time. @@ -4652,18 +5527,17 @@ typedef struct sqlite3_vtab_cursor sqlite3_vtab_cursor; typedef struct sqlite3_module sqlite3_module; /* -** CAPI3REF: Virtual Table Object {H18000} +** CAPI3REF: Virtual Table Object ** KEYWORDS: sqlite3_module {virtual table module} -** EXPERIMENTAL ** -** This structure, sometimes called a a "virtual table module", +** This structure, sometimes called a "virtual table module", ** defines the implementation of a [virtual tables]. ** This structure consists mostly of methods for the module. ** -** A virtual table module is created by filling in a persistent +** ^A virtual table module is created by filling in a persistent ** instance of this structure and passing a pointer to that instance ** to [sqlite3_create_module()] or [sqlite3_create_module_v2()]. -** The registration remains valid until it is replaced by a different +** ^The registration remains valid until it is replaced by a different ** module or until the [database connection] closes. The content ** of this structure must not change while it is registered with ** any database connection. @@ -4696,55 +5570,62 @@ struct sqlite3_module { void (**pxFunc)(sqlite3_context*,int,sqlite3_value**), void **ppArg); int (*xRename)(sqlite3_vtab *pVtab, const char *zNew); + /* The methods above are in version 1 of the sqlite_module object. Those + ** below are for version 2 and greater. */ + int (*xSavepoint)(sqlite3_vtab *pVTab, int); + int (*xRelease)(sqlite3_vtab *pVTab, int); + int (*xRollbackTo)(sqlite3_vtab *pVTab, int); }; /* -** CAPI3REF: Virtual Table Indexing Information {H18100} +** CAPI3REF: Virtual Table Indexing Information ** KEYWORDS: sqlite3_index_info -** EXPERIMENTAL ** -** The sqlite3_index_info structure and its substructures is used to +** The sqlite3_index_info structure and its substructures is used as part +** of the [virtual table] interface to ** pass information into and receive the reply from the [xBestIndex] ** method of a [virtual table module]. The fields under **Inputs** are the ** inputs to xBestIndex and are read-only. xBestIndex inserts its ** results into the **Outputs** fields. ** -** The aConstraint[] array records WHERE clause constraints of the form: +** ^(The aConstraint[] array records WHERE clause constraints of the form: ** -**
    column OP expr
    +**
    column OP expr
    ** -** where OP is =, <, <=, >, or >=. The particular operator is -** stored in aConstraint[].op. The index of the column is stored in -** aConstraint[].iColumn. aConstraint[].usable is TRUE if the +** where OP is =, <, <=, >, or >=.)^ ^(The particular operator is +** stored in aConstraint[].op using one of the +** [SQLITE_INDEX_CONSTRAINT_EQ | SQLITE_INDEX_CONSTRAINT_ values].)^ +** ^(The index of the column is stored in +** aConstraint[].iColumn.)^ ^(aConstraint[].usable is TRUE if the ** expr on the right-hand side can be evaluated (and thus the constraint -** is usable) and false if it cannot. +** is usable) and false if it cannot.)^ ** -** The optimizer automatically inverts terms of the form "expr OP column" +** ^The optimizer automatically inverts terms of the form "expr OP column" ** and makes other simplifications to the WHERE clause in an attempt to ** get as many WHERE clause terms into the form shown above as possible. -** The aConstraint[] array only reports WHERE clause terms in the correct -** form that refer to the particular virtual table being queried. +** ^The aConstraint[] array only reports WHERE clause terms that are +** relevant to the particular virtual table being queried. ** -** Information about the ORDER BY clause is stored in aOrderBy[]. -** Each term of aOrderBy records a column of the ORDER BY clause. +** ^Information about the ORDER BY clause is stored in aOrderBy[]. +** ^Each term of aOrderBy records a column of the ORDER BY clause. ** ** The [xBestIndex] method must fill aConstraintUsage[] with information -** about what parameters to pass to xFilter. If argvIndex>0 then +** about what parameters to pass to xFilter. ^If argvIndex>0 then ** the right-hand side of the corresponding aConstraint[] is evaluated -** and becomes the argvIndex-th entry in argv. If aConstraintUsage[].omit +** and becomes the argvIndex-th entry in argv. ^(If aConstraintUsage[].omit ** is true, then the constraint is assumed to be fully handled by the -** virtual table and is not checked again by SQLite. +** virtual table and is not checked again by SQLite.)^ ** -** The idxNum and idxPtr values are recorded and passed into the +** ^The idxNum and idxPtr values are recorded and passed into the ** [xFilter] method. -** [sqlite3_free()] is used to free idxPtr if and only iff +** ^[sqlite3_free()] is used to free idxPtr if and only if ** needToFreeIdxPtr is true. ** -** The orderByConsumed means that output from [xFilter]/[xNext] will occur in +** ^The orderByConsumed means that output from [xFilter]/[xNext] will occur in ** the correct order to satisfy the ORDER BY clause so that no separate ** sorting step is required. ** -** The estimatedCost value is an estimate of the cost of doing the +** ^The estimatedCost value is an estimate of the cost of doing the ** particular lookup. A full scan of a table with N entries should have ** a cost of N. A binary search of a table of N entries should have a ** cost of approximately log(N). @@ -4774,6 +5655,15 @@ struct sqlite3_index_info { int orderByConsumed; /* True if output is already ordered */ double estimatedCost; /* Estimated cost of using this index */ }; + +/* +** CAPI3REF: Virtual Table Constraint Operator Codes +** +** These macros defined the allowed values for the +** [sqlite3_index_info].aConstraint[].op field. Each value represents +** an operator that is part of a constraint term in the wHERE clause of +** a query that uses a [virtual table]. +*/ #define SQLITE_INDEX_CONSTRAINT_EQ 2 #define SQLITE_INDEX_CONSTRAINT_GT 4 #define SQLITE_INDEX_CONSTRAINT_LE 8 @@ -4782,43 +5672,37 @@ struct sqlite3_index_info { #define SQLITE_INDEX_CONSTRAINT_MATCH 64 /* -** CAPI3REF: Register A Virtual Table Implementation {H18200} -** EXPERIMENTAL +** CAPI3REF: Register A Virtual Table Implementation ** -** This routine is used to register a new [virtual table module] name. -** Module names must be registered before -** creating a new [virtual table] using the module, or before using a +** ^These routines are used to register a new [virtual table module] name. +** ^Module names must be registered before +** creating a new [virtual table] using the module and before using a ** preexisting [virtual table] for the module. ** -** The module name is registered on the [database connection] specified -** by the first parameter. The name of the module is given by the -** second parameter. The third parameter is a pointer to -** the implementation of the [virtual table module]. The fourth +** ^The module name is registered on the [database connection] specified +** by the first parameter. ^The name of the module is given by the +** second parameter. ^The third parameter is a pointer to +** the implementation of the [virtual table module]. ^The fourth ** parameter is an arbitrary client data pointer that is passed through ** into the [xCreate] and [xConnect] methods of the virtual table module ** when a new virtual table is be being created or reinitialized. ** -** This interface has exactly the same effect as calling -** [sqlite3_create_module_v2()] with a NULL client data destructor. +** ^The sqlite3_create_module_v2() interface has a fifth parameter which +** is a pointer to a destructor for the pClientData. ^SQLite will +** invoke the destructor function (if it is not NULL) when SQLite +** no longer needs the pClientData pointer. ^The destructor will also +** be invoked if the call to sqlite3_create_module_v2() fails. +** ^The sqlite3_create_module() +** interface is equivalent to sqlite3_create_module_v2() with a NULL +** destructor. */ -SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_create_module( +SQLITE_API int sqlite3_create_module( sqlite3 *db, /* SQLite connection to register module with */ const char *zName, /* Name of the module */ const sqlite3_module *p, /* Methods for the module */ void *pClientData /* Client data for xCreate/xConnect */ ); - -/* -** CAPI3REF: Register A Virtual Table Implementation {H18210} -** EXPERIMENTAL -** -** This routine is identical to the [sqlite3_create_module()] method, -** except that it has an extra parameter to specify -** a destructor function for the client data pointer. SQLite will -** invoke the destructor function (if it is not NULL) when SQLite -** no longer needs the pClientData pointer. -*/ -SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_create_module_v2( +SQLITE_API int sqlite3_create_module_v2( sqlite3 *db, /* SQLite connection to register module with */ const char *zName, /* Name of the module */ const sqlite3_module *p, /* Methods for the module */ @@ -4827,42 +5711,40 @@ SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_create_module_v2( ); /* -** CAPI3REF: Virtual Table Instance Object {H18010} +** CAPI3REF: Virtual Table Instance Object ** KEYWORDS: sqlite3_vtab -** EXPERIMENTAL ** ** Every [virtual table module] implementation uses a subclass -** of the following structure to describe a particular instance +** of this object to describe a particular instance ** of the [virtual table]. Each subclass will ** be tailored to the specific needs of the module implementation. ** The purpose of this superclass is to define certain fields that are ** common to all module implementations. ** -** Virtual tables methods can set an error message by assigning a +** ^Virtual tables methods can set an error message by assigning a ** string obtained from [sqlite3_mprintf()] to zErrMsg. The method should ** take care that any prior string is freed by a call to [sqlite3_free()] -** prior to assigning a new string to zErrMsg. After the error message +** prior to assigning a new string to zErrMsg. ^After the error message ** is delivered up to the client application, the string will be automatically ** freed by sqlite3_free() and the zErrMsg field will be zeroed. */ struct sqlite3_vtab { const sqlite3_module *pModule; /* The module for this virtual table */ - int nRef; /* Used internally */ + int nRef; /* NO LONGER USED */ char *zErrMsg; /* Error message from sqlite3_mprintf() */ /* Virtual table implementations will typically add additional fields */ }; /* -** CAPI3REF: Virtual Table Cursor Object {H18020} +** CAPI3REF: Virtual Table Cursor Object ** KEYWORDS: sqlite3_vtab_cursor {virtual table cursor} -** EXPERIMENTAL ** ** Every [virtual table module] implementation uses a subclass of the ** following structure to describe cursors that point into the ** [virtual table] and are used ** to loop through the virtual table. Cursors are created using the ** [sqlite3_module.xOpen | xOpen] method of the module and are destroyed -** by the [sqlite3_module.xClose | xClose] method. Cussors are used +** by the [sqlite3_module.xClose | xClose] method. Cursors are used ** by the [xFilter], [xNext], [xEof], [xColumn], and [xRowid] methods ** of the module. Each module implementation will define ** the content of a cursor structure to suit its own needs. @@ -4876,34 +5758,32 @@ struct sqlite3_vtab_cursor { }; /* -** CAPI3REF: Declare The Schema Of A Virtual Table {H18280} -** EXPERIMENTAL +** CAPI3REF: Declare The Schema Of A Virtual Table ** -** The [xCreate] and [xConnect] methods of a +** ^The [xCreate] and [xConnect] methods of a ** [virtual table module] call this interface ** to declare the format (the names and datatypes of the columns) of ** the virtual tables they implement. */ -SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_declare_vtab(sqlite3*, const char *zSQL); +SQLITE_API int sqlite3_declare_vtab(sqlite3*, const char *zSQL); /* -** CAPI3REF: Overload A Function For A Virtual Table {H18300} -** EXPERIMENTAL +** CAPI3REF: Overload A Function For A Virtual Table ** -** Virtual tables can provide alternative implementations of functions +** ^(Virtual tables can provide alternative implementations of functions ** using the [xFindFunction] method of the [virtual table module]. ** But global versions of those functions -** must exist in order to be overloaded. +** must exist in order to be overloaded.)^ ** -** This API makes sure a global version of a function with a particular +** ^(This API makes sure a global version of a function with a particular ** name and number of parameters exists. If no such function exists -** before this API is called, a new function is created. The implementation +** before this API is called, a new function is created.)^ ^The implementation ** of the new function always causes an exception to be thrown. So ** the new function is not good for anything by itself. Its only ** purpose is to be a placeholder function that can be overloaded ** by a [virtual table]. */ -SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_overload_function(sqlite3*, const char *zFuncName, int nArg); +SQLITE_API int sqlite3_overload_function(sqlite3*, const char *zFuncName, int nArg); /* ** The interface to the virtual-table mechanism defined above (back up @@ -4913,79 +5793,77 @@ SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_overload_function(sqlite3*, const cha ** ** When the virtual-table mechanism stabilizes, we will declare the ** interface fixed, support it indefinitely, and remove this comment. -** -****** EXPERIMENTAL - subject to change without notice ************** */ /* -** CAPI3REF: A Handle To An Open BLOB {H17800} +** CAPI3REF: A Handle To An Open BLOB ** KEYWORDS: {BLOB handle} {BLOB handles} ** ** An instance of this object represents an open BLOB on which ** [sqlite3_blob_open | incremental BLOB I/O] can be performed. -** Objects of this type are created by [sqlite3_blob_open()] +** ^Objects of this type are created by [sqlite3_blob_open()] ** and destroyed by [sqlite3_blob_close()]. -** The [sqlite3_blob_read()] and [sqlite3_blob_write()] interfaces +** ^The [sqlite3_blob_read()] and [sqlite3_blob_write()] interfaces ** can be used to read or write small subsections of the BLOB. -** The [sqlite3_blob_bytes()] interface returns the size of the BLOB in bytes. +** ^The [sqlite3_blob_bytes()] interface returns the size of the BLOB in bytes. */ typedef struct sqlite3_blob sqlite3_blob; /* -** CAPI3REF: Open A BLOB For Incremental I/O {H17810} +** CAPI3REF: Open A BLOB For Incremental I/O ** -** This interfaces opens a [BLOB handle | handle] to the BLOB located +** ^(This interfaces opens a [BLOB handle | handle] to the BLOB located ** in row iRow, column zColumn, table zTable in database zDb; ** in other words, the same BLOB that would be selected by: ** **
     **     SELECT zColumn FROM zDb.zTable WHERE [rowid] = iRow;
    -** 
    {END} +** )^ ** -** If the flags parameter is non-zero, then the BLOB is opened for read -** and write access. If it is zero, the BLOB is opened for read access. +** ^If the flags parameter is non-zero, then the BLOB is opened for read +** and write access. ^If it is zero, the BLOB is opened for read access. +** ^It is not possible to open a column that is part of an index or primary +** key for writing. ^If [foreign key constraints] are enabled, it is +** not possible to open a column that is part of a [child key] for writing. ** -** Note that the database name is not the filename that contains +** ^Note that the database name is not the filename that contains ** the database but rather the symbolic name of the database that -** is assigned when the database is connected using [ATTACH]. -** For the main database file, the database name is "main". -** For TEMP tables, the database name is "temp". +** appears after the AS keyword when the database is connected using [ATTACH]. +** ^For the main database file, the database name is "main". +** ^For TEMP tables, the database name is "temp". ** -** On success, [SQLITE_OK] is returned and the new [BLOB handle] is written +** ^(On success, [SQLITE_OK] is returned and the new [BLOB handle] is written ** to *ppBlob. Otherwise an [error code] is returned and *ppBlob is set -** to be a null pointer. -** This function sets the [database connection] error code and message +** to be a null pointer.)^ +** ^This function sets the [database connection] error code and message ** accessible via [sqlite3_errcode()] and [sqlite3_errmsg()] and related -** functions. Note that the *ppBlob variable is always initialized in a +** functions. ^Note that the *ppBlob variable is always initialized in a ** way that makes it safe to invoke [sqlite3_blob_close()] on *ppBlob ** regardless of the success or failure of this routine. ** -** If the row that a BLOB handle points to is modified by an +** ^(If the row that a BLOB handle points to is modified by an ** [UPDATE], [DELETE], or by [ON CONFLICT] side-effects ** then the BLOB handle is marked as "expired". ** This is true if any column of the row is changed, even a column -** other than the one the BLOB handle is open on. -** Calls to [sqlite3_blob_read()] and [sqlite3_blob_write()] for -** a expired BLOB handle fail with an return code of [SQLITE_ABORT]. -** Changes written into a BLOB prior to the BLOB expiring are not -** rollback by the expiration of the BLOB. Such changes will eventually -** commit if the transaction continues to completion. -** -** Use the [sqlite3_blob_bytes()] interface to determine the size of -** the opened blob. The size of a blob may not be changed by this -** underface. Use the [UPDATE] SQL command to change the size of a +** other than the one the BLOB handle is open on.)^ +** ^Calls to [sqlite3_blob_read()] and [sqlite3_blob_write()] for +** an expired BLOB handle fail with a return code of [SQLITE_ABORT]. +** ^(Changes written into a BLOB prior to the BLOB expiring are not +** rolled back by the expiration of the BLOB. Such changes will eventually +** commit if the transaction continues to completion.)^ +** +** ^Use the [sqlite3_blob_bytes()] interface to determine the size of +** the opened blob. ^The size of a blob may not be changed by this +** interface. Use the [UPDATE] SQL command to change the size of a ** blob. ** -** The [sqlite3_bind_zeroblob()] and [sqlite3_result_zeroblob()] interfaces +** ^The [sqlite3_bind_zeroblob()] and [sqlite3_result_zeroblob()] interfaces ** and the built-in [zeroblob] SQL function can be used, if desired, ** to create an empty, zero-filled blob in which to read or write using ** this interface. ** ** To avoid a resource leak, every open [BLOB handle] should eventually ** be released by a call to [sqlite3_blob_close()]. -** -** Requirements: -** [H17813] [H17814] [H17816] [H17819] [H17821] [H17824] */ SQLITE_API int sqlite3_blob_open( sqlite3*, @@ -4998,37 +5876,58 @@ SQLITE_API int sqlite3_blob_open( ); /* -** CAPI3REF: Close A BLOB Handle {H17830} +** CAPI3REF: Move a BLOB Handle to a New Row +** +** ^This function is used to move an existing blob handle so that it points +** to a different row of the same database table. ^The new row is identified +** by the rowid value passed as the second argument. Only the row can be +** changed. ^The database, table and column on which the blob handle is open +** remain the same. Moving an existing blob handle to a new row can be +** faster than closing the existing handle and opening a new one. ** -** Closes an open [BLOB handle]. +** ^(The new row must meet the same criteria as for [sqlite3_blob_open()] - +** it must exist and there must be either a blob or text value stored in +** the nominated column.)^ ^If the new row is not present in the table, or if +** it does not contain a blob or text value, or if another error occurs, an +** SQLite error code is returned and the blob handle is considered aborted. +** ^All subsequent calls to [sqlite3_blob_read()], [sqlite3_blob_write()] or +** [sqlite3_blob_reopen()] on an aborted blob handle immediately return +** SQLITE_ABORT. ^Calling [sqlite3_blob_bytes()] on an aborted blob handle +** always returns zero. ** -** Closing a BLOB shall cause the current transaction to commit +** ^This function sets the database handle error code and message. +*/ +SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_blob_reopen(sqlite3_blob *, sqlite3_int64); + +/* +** CAPI3REF: Close A BLOB Handle +** +** ^Closes an open [BLOB handle]. +** +** ^Closing a BLOB shall cause the current transaction to commit ** if there are no other BLOBs, no pending prepared statements, and the ** database connection is in [autocommit mode]. -** If any writes were made to the BLOB, they might be held in cache +** ^If any writes were made to the BLOB, they might be held in cache ** until the close operation if they will fit. ** -** Closing the BLOB often forces the changes +** ^(Closing the BLOB often forces the changes ** out to disk and so if any I/O errors occur, they will likely occur ** at the time when the BLOB is closed. Any errors that occur during -** closing are reported as a non-zero return value. +** closing are reported as a non-zero return value.)^ ** -** The BLOB is closed unconditionally. Even if this routine returns -** an error code, the BLOB is still closed. +** ^(The BLOB is closed unconditionally. Even if this routine returns +** an error code, the BLOB is still closed.)^ ** -** Calling this routine with a null pointer (which as would be returned -** by failed call to [sqlite3_blob_open()]) is a harmless no-op. -** -** Requirements: -** [H17833] [H17836] [H17839] +** ^Calling this routine with a null pointer (such as would be returned +** by a failed call to [sqlite3_blob_open()]) is a harmless no-op. */ SQLITE_API int sqlite3_blob_close(sqlite3_blob *); /* -** CAPI3REF: Return The Size Of An Open BLOB {H17840} +** CAPI3REF: Return The Size Of An Open BLOB ** -** Returns the size in bytes of the BLOB accessible via the -** successfully opened [BLOB handle] in its only argument. The +** ^Returns the size in bytes of the BLOB accessible via the +** successfully opened [BLOB handle] in its only argument. ^The ** incremental blob I/O routines can only read or overwriting existing ** blob content; they cannot change the size of a blob. ** @@ -5036,30 +5935,27 @@ SQLITE_API int sqlite3_blob_close(sqlite3_blob *); ** by a prior successful call to [sqlite3_blob_open()] and which has not ** been closed by [sqlite3_blob_close()]. Passing any other pointer in ** to this routine results in undefined and probably undesirable behavior. -** -** Requirements: -** [H17843] */ SQLITE_API int sqlite3_blob_bytes(sqlite3_blob *); /* -** CAPI3REF: Read Data From A BLOB Incrementally {H17850} +** CAPI3REF: Read Data From A BLOB Incrementally ** -** This function is used to read data from an open [BLOB handle] into a +** ^(This function is used to read data from an open [BLOB handle] into a ** caller-supplied buffer. N bytes of data are copied into buffer Z -** from the open BLOB, starting at offset iOffset. +** from the open BLOB, starting at offset iOffset.)^ ** -** If offset iOffset is less than N bytes from the end of the BLOB, -** [SQLITE_ERROR] is returned and no data is read. If N or iOffset is +** ^If offset iOffset is less than N bytes from the end of the BLOB, +** [SQLITE_ERROR] is returned and no data is read. ^If N or iOffset is ** less than zero, [SQLITE_ERROR] is returned and no data is read. -** The size of the blob (and hence the maximum value of N+iOffset) +** ^The size of the blob (and hence the maximum value of N+iOffset) ** can be determined using the [sqlite3_blob_bytes()] interface. ** -** An attempt to read from an expired [BLOB handle] fails with an +** ^An attempt to read from an expired [BLOB handle] fails with an ** error code of [SQLITE_ABORT]. ** -** On success, SQLITE_OK is returned. -** Otherwise, an [error code] or an [extended error code] is returned. +** ^(On success, sqlite3_blob_read() returns SQLITE_OK. +** Otherwise, an [error code] or an [extended error code] is returned.)^ ** ** This routine only works on a [BLOB handle] which has been created ** by a prior successful call to [sqlite3_blob_open()] and which has not @@ -5067,40 +5963,37 @@ SQLITE_API int sqlite3_blob_bytes(sqlite3_blob *); ** to this routine results in undefined and probably undesirable behavior. ** ** See also: [sqlite3_blob_write()]. -** -** Requirements: -** [H17853] [H17856] [H17859] [H17862] [H17863] [H17865] [H17868] */ SQLITE_API int sqlite3_blob_read(sqlite3_blob *, void *Z, int N, int iOffset); /* -** CAPI3REF: Write Data Into A BLOB Incrementally {H17870} +** CAPI3REF: Write Data Into A BLOB Incrementally ** -** This function is used to write data into an open [BLOB handle] from a -** caller-supplied buffer. N bytes of data are copied from the buffer Z +** ^This function is used to write data into an open [BLOB handle] from a +** caller-supplied buffer. ^N bytes of data are copied from the buffer Z ** into the open BLOB, starting at offset iOffset. ** -** If the [BLOB handle] passed as the first argument was not opened for +** ^If the [BLOB handle] passed as the first argument was not opened for ** writing (the flags parameter to [sqlite3_blob_open()] was zero), ** this function returns [SQLITE_READONLY]. ** -** This function may only modify the contents of the BLOB; it is +** ^This function may only modify the contents of the BLOB; it is ** not possible to increase the size of a BLOB using this API. -** If offset iOffset is less than N bytes from the end of the BLOB, -** [SQLITE_ERROR] is returned and no data is written. If N is +** ^If offset iOffset is less than N bytes from the end of the BLOB, +** [SQLITE_ERROR] is returned and no data is written. ^If N is ** less than zero [SQLITE_ERROR] is returned and no data is written. ** The size of the BLOB (and hence the maximum value of N+iOffset) ** can be determined using the [sqlite3_blob_bytes()] interface. ** -** An attempt to write to an expired [BLOB handle] fails with an -** error code of [SQLITE_ABORT]. Writes to the BLOB that occurred +** ^An attempt to write to an expired [BLOB handle] fails with an +** error code of [SQLITE_ABORT]. ^Writes to the BLOB that occurred ** before the [BLOB handle] expired are not rolled back by the ** expiration of the handle, though of course those changes might ** have been overwritten by the statement that expired the BLOB handle ** or by other independent statements. ** -** On success, SQLITE_OK is returned. -** Otherwise, an [error code] or an [extended error code] is returned. +** ^(On success, sqlite3_blob_write() returns SQLITE_OK. +** Otherwise, an [error code] or an [extended error code] is returned.)^ ** ** This routine only works on a [BLOB handle] which has been created ** by a prior successful call to [sqlite3_blob_open()] and which has not @@ -5108,15 +6001,11 @@ SQLITE_API int sqlite3_blob_read(sqlite3_blob *, void *Z, int N, int iOffset); ** to this routine results in undefined and probably undesirable behavior. ** ** See also: [sqlite3_blob_read()]. -** -** Requirements: -** [H17873] [H17874] [H17875] [H17876] [H17877] [H17879] [H17882] [H17885] -** [H17888] */ SQLITE_API int sqlite3_blob_write(sqlite3_blob *, const void *z, int n, int iOffset); /* -** CAPI3REF: Virtual File System Objects {H11200} +** CAPI3REF: Virtual File System Objects ** ** A virtual filesystem (VFS) is an [sqlite3_vfs] object ** that SQLite uses to interact @@ -5125,34 +6014,31 @@ SQLITE_API int sqlite3_blob_write(sqlite3_blob *, const void *z, int n, int iOff ** New VFSes can be registered and existing VFSes can be unregistered. ** The following interfaces are provided. ** -** The sqlite3_vfs_find() interface returns a pointer to a VFS given its name. -** Names are case sensitive. -** Names are zero-terminated UTF-8 strings. -** If there is no match, a NULL pointer is returned. -** If zVfsName is NULL then the default VFS is returned. +** ^The sqlite3_vfs_find() interface returns a pointer to a VFS given its name. +** ^Names are case sensitive. +** ^Names are zero-terminated UTF-8 strings. +** ^If there is no match, a NULL pointer is returned. +** ^If zVfsName is NULL then the default VFS is returned. ** -** New VFSes are registered with sqlite3_vfs_register(). -** Each new VFS becomes the default VFS if the makeDflt flag is set. -** The same VFS can be registered multiple times without injury. -** To make an existing VFS into the default VFS, register it again +** ^New VFSes are registered with sqlite3_vfs_register(). +** ^Each new VFS becomes the default VFS if the makeDflt flag is set. +** ^The same VFS can be registered multiple times without injury. +** ^To make an existing VFS into the default VFS, register it again ** with the makeDflt flag set. If two different VFSes with the ** same name are registered, the behavior is undefined. If a ** VFS is registered with a name that is NULL or an empty string, ** then the behavior is undefined. ** -** Unregister a VFS with the sqlite3_vfs_unregister() interface. -** If the default VFS is unregistered, another VFS is chosen as -** the default. The choice for the new VFS is arbitrary. -** -** Requirements: -** [H11203] [H11206] [H11209] [H11212] [H11215] [H11218] +** ^Unregister a VFS with the sqlite3_vfs_unregister() interface. +** ^(If the default VFS is unregistered, another VFS is chosen as +** the default. The choice for the new VFS is arbitrary.)^ */ SQLITE_API sqlite3_vfs *sqlite3_vfs_find(const char *zVfsName); SQLITE_API int sqlite3_vfs_register(sqlite3_vfs*, int makeDflt); SQLITE_API int sqlite3_vfs_unregister(sqlite3_vfs*); /* -** CAPI3REF: Mutexes {H17000} +** CAPI3REF: Mutexes ** ** The SQLite core uses these routines for thread ** synchronization. Though they are intended for internal @@ -5161,34 +6047,34 @@ SQLITE_API int sqlite3_vfs_unregister(sqlite3_vfs*); ** ** The SQLite source code contains multiple implementations ** of these mutex routines. An appropriate implementation -** is selected automatically at compile-time. The following +** is selected automatically at compile-time. ^(The following ** implementations are available in the SQLite core: ** **
      **
    • SQLITE_MUTEX_OS2 -**
    • SQLITE_MUTEX_PTHREAD +**
    • SQLITE_MUTEX_PTHREADS **
    • SQLITE_MUTEX_W32 **
    • SQLITE_MUTEX_NOOP -**
    +** )^ ** -** The SQLITE_MUTEX_NOOP implementation is a set of routines +** ^The SQLITE_MUTEX_NOOP implementation is a set of routines ** that does no real locking and is appropriate for use in -** a single-threaded application. The SQLITE_MUTEX_OS2, -** SQLITE_MUTEX_PTHREAD, and SQLITE_MUTEX_W32 implementations +** a single-threaded application. ^The SQLITE_MUTEX_OS2, +** SQLITE_MUTEX_PTHREADS, and SQLITE_MUTEX_W32 implementations ** are appropriate for use on OS/2, Unix, and Windows. ** -** If SQLite is compiled with the SQLITE_MUTEX_APPDEF preprocessor +** ^(If SQLite is compiled with the SQLITE_MUTEX_APPDEF preprocessor ** macro defined (with "-DSQLITE_MUTEX_APPDEF=1"), then no mutex ** implementation is included with the library. In this case the ** application must supply a custom mutex implementation using the ** [SQLITE_CONFIG_MUTEX] option of the sqlite3_config() function ** before calling sqlite3_initialize() or any other public sqlite3_ -** function that calls sqlite3_initialize(). +** function that calls sqlite3_initialize().)^ ** -** {H17011} The sqlite3_mutex_alloc() routine allocates a new -** mutex and returns a pointer to it. {H17012} If it returns NULL -** that means that a mutex could not be allocated. {H17013} SQLite -** will unwind its stack and return an error. {H17014} The argument +** ^The sqlite3_mutex_alloc() routine allocates a new +** mutex and returns a pointer to it. ^If it returns NULL +** that means that a mutex could not be allocated. ^SQLite +** will unwind its stack and return an error. ^(The argument ** to sqlite3_mutex_alloc() is one of these integer constants: ** **
      @@ -5200,64 +6086,66 @@ SQLITE_API int sqlite3_vfs_unregister(sqlite3_vfs*); **
    • SQLITE_MUTEX_STATIC_PRNG **
    • SQLITE_MUTEX_STATIC_LRU **
    • SQLITE_MUTEX_STATIC_LRU2 -**
    +** )^ ** -** {H17015} The first two constants cause sqlite3_mutex_alloc() to create -** a new mutex. The new mutex is recursive when SQLITE_MUTEX_RECURSIVE -** is used but not necessarily so when SQLITE_MUTEX_FAST is used. {END} +** ^The first two constants (SQLITE_MUTEX_FAST and SQLITE_MUTEX_RECURSIVE) +** cause sqlite3_mutex_alloc() to create +** a new mutex. ^The new mutex is recursive when SQLITE_MUTEX_RECURSIVE +** is used but not necessarily so when SQLITE_MUTEX_FAST is used. ** The mutex implementation does not need to make a distinction ** between SQLITE_MUTEX_RECURSIVE and SQLITE_MUTEX_FAST if it does -** not want to. {H17016} But SQLite will only request a recursive mutex in -** cases where it really needs one. {END} If a faster non-recursive mutex +** not want to. ^SQLite will only request a recursive mutex in +** cases where it really needs one. ^If a faster non-recursive mutex ** implementation is available on the host platform, the mutex subsystem ** might return such a mutex in response to SQLITE_MUTEX_FAST. ** -** {H17017} The other allowed parameters to sqlite3_mutex_alloc() each return -** a pointer to a static preexisting mutex. {END} Four static mutexes are +** ^The other allowed parameters to sqlite3_mutex_alloc() (anything other +** than SQLITE_MUTEX_FAST and SQLITE_MUTEX_RECURSIVE) each return +** a pointer to a static preexisting mutex. ^Six static mutexes are ** used by the current version of SQLite. Future versions of SQLite ** may add additional static mutexes. Static mutexes are for internal ** use by SQLite only. Applications that use SQLite mutexes should ** use only the dynamic mutexes returned by SQLITE_MUTEX_FAST or ** SQLITE_MUTEX_RECURSIVE. ** -** {H17018} Note that if one of the dynamic mutex parameters (SQLITE_MUTEX_FAST +** ^Note that if one of the dynamic mutex parameters (SQLITE_MUTEX_FAST ** or SQLITE_MUTEX_RECURSIVE) is used then sqlite3_mutex_alloc() -** returns a different mutex on every call. {H17034} But for the static +** returns a different mutex on every call. ^But for the static ** mutex types, the same mutex is returned on every call that has ** the same type number. ** -** {H17019} The sqlite3_mutex_free() routine deallocates a previously -** allocated dynamic mutex. {H17020} SQLite is careful to deallocate every -** dynamic mutex that it allocates. {A17021} The dynamic mutexes must not be in -** use when they are deallocated. {A17022} Attempting to deallocate a static -** mutex results in undefined behavior. {H17023} SQLite never deallocates -** a static mutex. {END} +** ^The sqlite3_mutex_free() routine deallocates a previously +** allocated dynamic mutex. ^SQLite is careful to deallocate every +** dynamic mutex that it allocates. The dynamic mutexes must not be in +** use when they are deallocated. Attempting to deallocate a static +** mutex results in undefined behavior. ^SQLite never deallocates +** a static mutex. ** -** The sqlite3_mutex_enter() and sqlite3_mutex_try() routines attempt -** to enter a mutex. {H17024} If another thread is already within the mutex, +** ^The sqlite3_mutex_enter() and sqlite3_mutex_try() routines attempt +** to enter a mutex. ^If another thread is already within the mutex, ** sqlite3_mutex_enter() will block and sqlite3_mutex_try() will return -** SQLITE_BUSY. {H17025} The sqlite3_mutex_try() interface returns [SQLITE_OK] -** upon successful entry. {H17026} Mutexes created using +** SQLITE_BUSY. ^The sqlite3_mutex_try() interface returns [SQLITE_OK] +** upon successful entry. ^(Mutexes created using ** SQLITE_MUTEX_RECURSIVE can be entered multiple times by the same thread. -** {H17027} In such cases the, +** In such cases the, ** mutex must be exited an equal number of times before another thread -** can enter. {A17028} If the same thread tries to enter any other +** can enter.)^ ^(If the same thread tries to enter any other ** kind of mutex more than once, the behavior is undefined. -** {H17029} SQLite will never exhibit -** such behavior in its own use of mutexes. +** SQLite will never exhibit +** such behavior in its own use of mutexes.)^ ** -** Some systems (for example, Windows 95) do not support the operation +** ^(Some systems (for example, Windows 95) do not support the operation ** implemented by sqlite3_mutex_try(). On those systems, sqlite3_mutex_try() -** will always return SQLITE_BUSY. {H17030} The SQLite core only ever uses -** sqlite3_mutex_try() as an optimization so this is acceptable behavior. +** will always return SQLITE_BUSY. The SQLite core only ever uses +** sqlite3_mutex_try() as an optimization so this is acceptable behavior.)^ ** -** {H17031} The sqlite3_mutex_leave() routine exits a mutex that was -** previously entered by the same thread. {A17032} The behavior +** ^The sqlite3_mutex_leave() routine exits a mutex that was +** previously entered by the same thread. ^(The behavior ** is undefined if the mutex is not currently entered by the -** calling thread or is not currently allocated. {H17033} SQLite will -** never do either. {END} +** calling thread or is not currently allocated. SQLite will +** never do either.)^ ** -** If the argument to sqlite3_mutex_enter(), sqlite3_mutex_try(), or +** ^If the argument to sqlite3_mutex_enter(), sqlite3_mutex_try(), or ** sqlite3_mutex_leave() is a NULL pointer, then all three routines ** behave as no-ops. ** @@ -5270,8 +6158,7 @@ SQLITE_API int sqlite3_mutex_try(sqlite3_mutex*); SQLITE_API void sqlite3_mutex_leave(sqlite3_mutex*); /* -** CAPI3REF: Mutex Methods Object {H17120} -** EXPERIMENTAL +** CAPI3REF: Mutex Methods Object ** ** An instance of this structure defines the low-level routines ** used to allocate and use mutexes. @@ -5286,19 +6173,19 @@ SQLITE_API void sqlite3_mutex_leave(sqlite3_mutex*); ** output variable when querying the system for the current mutex ** implementation, using the [SQLITE_CONFIG_GETMUTEX] option. ** -** The xMutexInit method defined by this structure is invoked as +** ^The xMutexInit method defined by this structure is invoked as ** part of system initialization by the sqlite3_initialize() function. -** {H17001} The xMutexInit routine shall be called by SQLite once for each +** ^The xMutexInit routine is called by SQLite exactly once for each ** effective call to [sqlite3_initialize()]. ** -** The xMutexEnd method defined by this structure is invoked as +** ^The xMutexEnd method defined by this structure is invoked as ** part of system shutdown by the sqlite3_shutdown() function. The ** implementation of this method is expected to release all outstanding ** resources obtained by the mutex methods implementation, especially -** those obtained by the xMutexInit method. {H17003} The xMutexEnd() -** interface shall be invoked once for each call to [sqlite3_shutdown()]. +** those obtained by the xMutexInit method. ^The xMutexEnd() +** interface is invoked exactly once for each call to [sqlite3_shutdown()]. ** -** The remaining seven methods defined by this structure (xMutexAlloc, +** ^(The remaining seven methods defined by this structure (xMutexAlloc, ** xMutexFree, xMutexEnter, xMutexTry, xMutexLeave, xMutexHeld and ** xMutexNotheld) implement the following interfaces (respectively): ** @@ -5310,7 +6197,7 @@ SQLITE_API void sqlite3_mutex_leave(sqlite3_mutex*); **
  • [sqlite3_mutex_leave()]
  • **
  • [sqlite3_mutex_held()]
  • **
  • [sqlite3_mutex_notheld()]
  • -** +** )^ ** ** The only difference is that the public sqlite3_XXX functions enumerated ** above silently ignore any invocations that pass a NULL pointer instead @@ -5319,6 +6206,21 @@ SQLITE_API void sqlite3_mutex_leave(sqlite3_mutex*); ** of passing a NULL pointer instead of a valid mutex handle are undefined ** (i.e. it is acceptable to provide an implementation that segfaults if ** it is passed a NULL pointer). +** +** The xMutexInit() method must be threadsafe. ^It must be harmless to +** invoke xMutexInit() multiple times within the same process and without +** intervening calls to xMutexEnd(). Second and subsequent calls to +** xMutexInit() must be no-ops. +** +** ^xMutexInit() must not use SQLite memory allocation ([sqlite3_malloc()] +** and its associates). ^Similarly, xMutexAlloc() must not use SQLite memory +** allocation for a static mutex. ^However xMutexAlloc() may use SQLite +** memory allocation for a fast or recursive mutex. +** +** ^SQLite will invoke the xMutexEnd() method when [sqlite3_shutdown()] is +** called, but only if the prior call to xMutexInit returned SQLITE_OK. +** If xMutexInit fails in any way, it is expected to clean up after itself +** prior to returning. */ typedef struct sqlite3_mutex_methods sqlite3_mutex_methods; struct sqlite3_mutex_methods { @@ -5334,39 +6236,41 @@ struct sqlite3_mutex_methods { }; /* -** CAPI3REF: Mutex Verification Routines {H17080} +** CAPI3REF: Mutex Verification Routines ** ** The sqlite3_mutex_held() and sqlite3_mutex_notheld() routines -** are intended for use inside assert() statements. {H17081} The SQLite core +** are intended for use inside assert() statements. ^The SQLite core ** never uses these routines except inside an assert() and applications -** are advised to follow the lead of the core. {H17082} The core only +** are advised to follow the lead of the core. ^The SQLite core only ** provides implementations for these routines when it is compiled -** with the SQLITE_DEBUG flag. {A17087} External mutex implementations +** with the SQLITE_DEBUG flag. ^External mutex implementations ** are only required to provide these routines if SQLITE_DEBUG is ** defined and if NDEBUG is not defined. ** -** {H17083} These routines should return true if the mutex in their argument +** ^These routines should return true if the mutex in their argument ** is held or not held, respectively, by the calling thread. ** -** {X17084} The implementation is not required to provided versions of these +** ^The implementation is not required to provide versions of these ** routines that actually work. If the implementation does not provide working ** versions of these routines, it should at least provide stubs that always ** return true so that one does not get spurious assertion failures. ** -** {H17085} If the argument to sqlite3_mutex_held() is a NULL pointer then -** the routine should return 1. {END} This seems counter-intuitive since -** clearly the mutex cannot be held if it does not exist. But the +** ^If the argument to sqlite3_mutex_held() is a NULL pointer then +** the routine should return 1. This seems counter-intuitive since +** clearly the mutex cannot be held if it does not exist. But ** the reason the mutex does not exist is because the build is not ** using mutexes. And we do not want the assert() containing the ** call to sqlite3_mutex_held() to fail, so a non-zero return is -** the appropriate thing to do. {H17086} The sqlite3_mutex_notheld() +** the appropriate thing to do. ^The sqlite3_mutex_notheld() ** interface should also return 1 when given a NULL pointer. */ +#ifndef NDEBUG SQLITE_API int sqlite3_mutex_held(sqlite3_mutex*); SQLITE_API int sqlite3_mutex_notheld(sqlite3_mutex*); +#endif /* -** CAPI3REF: Mutex Types {H17001} +** CAPI3REF: Mutex Types ** ** The [sqlite3_mutex_alloc()] interface takes a single argument ** which is one of these integer constants. @@ -5383,51 +6287,60 @@ SQLITE_API int sqlite3_mutex_notheld(sqlite3_mutex*); #define SQLITE_MUTEX_STATIC_OPEN 4 /* sqlite3BtreeOpen() */ #define SQLITE_MUTEX_STATIC_PRNG 5 /* sqlite3_random() */ #define SQLITE_MUTEX_STATIC_LRU 6 /* lru page list */ -#define SQLITE_MUTEX_STATIC_LRU2 7 /* lru page list */ +#define SQLITE_MUTEX_STATIC_LRU2 7 /* NOT USED */ +#define SQLITE_MUTEX_STATIC_PMEM 7 /* sqlite3PageMalloc() */ /* -** CAPI3REF: Retrieve the mutex for a database connection {H17002} +** CAPI3REF: Retrieve the mutex for a database connection ** -** This interface returns a pointer the [sqlite3_mutex] object that +** ^This interface returns a pointer the [sqlite3_mutex] object that ** serializes access to the [database connection] given in the argument ** when the [threading mode] is Serialized. -** If the [threading mode] is Single-thread or Multi-thread then this +** ^If the [threading mode] is Single-thread or Multi-thread then this ** routine returns a NULL pointer. */ SQLITE_API sqlite3_mutex *sqlite3_db_mutex(sqlite3*); /* -** CAPI3REF: Low-Level Control Of Database Files {H11300} +** CAPI3REF: Low-Level Control Of Database Files ** -** {H11301} The [sqlite3_file_control()] interface makes a direct call to the +** ^The [sqlite3_file_control()] interface makes a direct call to the ** xFileControl method for the [sqlite3_io_methods] object associated -** with a particular database identified by the second argument. {H11302} The -** name of the database is the name assigned to the database by the -** ATTACH SQL command that opened the -** database. {H11303} To control the main database file, use the name "main" -** or a NULL pointer. {H11304} The third and fourth parameters to this routine +** with a particular database identified by the second argument. ^The +** name of the database is "main" for the main database or "temp" for the +** TEMP database, or the name that appears after the AS keyword for +** databases that are added using the [ATTACH] SQL command. +** ^A NULL pointer can be used in place of "main" to refer to the +** main database file. +** ^The third and fourth parameters to this routine ** are passed directly through to the second and third parameters of -** the xFileControl method. {H11305} The return value of the xFileControl +** the xFileControl method. ^The return value of the xFileControl ** method becomes the return value of this routine. ** -** {H11306} If the second parameter (zDbName) does not match the name of any -** open database file, then SQLITE_ERROR is returned. {H11307} This error +** ^The SQLITE_FCNTL_FILE_POINTER value for the op parameter causes +** a pointer to the underlying [sqlite3_file] object to be written into +** the space pointed to by the 4th parameter. ^The SQLITE_FCNTL_FILE_POINTER +** case is a short-circuit path which does not actually invoke the +** underlying sqlite3_io_methods.xFileControl method. +** +** ^If the second parameter (zDbName) does not match the name of any +** open database file, then SQLITE_ERROR is returned. ^This error ** code is not remembered and will not be recalled by [sqlite3_errcode()] -** or [sqlite3_errmsg()]. {A11308} The underlying xFileControl method might -** also return SQLITE_ERROR. {A11309} There is no way to distinguish between +** or [sqlite3_errmsg()]. The underlying xFileControl method might +** also return SQLITE_ERROR. There is no way to distinguish between ** an incorrect zDbName and an SQLITE_ERROR return from the underlying -** xFileControl method. {END} +** xFileControl method. ** ** See also: [SQLITE_FCNTL_LOCKSTATE] */ SQLITE_API int sqlite3_file_control(sqlite3*, const char *zDbName, int op, void*); /* -** CAPI3REF: Testing Interface {H11400} +** CAPI3REF: Testing Interface ** -** The sqlite3_test_control() interface is used to read out internal +** ^The sqlite3_test_control() interface is used to read out internal ** state of SQLite and to inject faults into SQLite for testing -** purposes. The first parameter is an operation code that determines +** purposes. ^The first parameter is an operation code that determines ** the number, meaning, and operation of all subsequent parameters. ** ** This interface is not for use by applications. It exists solely @@ -5442,7 +6355,7 @@ SQLITE_API int sqlite3_file_control(sqlite3*, const char *zDbName, int op, void* SQLITE_API int sqlite3_test_control(int op, ...); /* -** CAPI3REF: Testing Interface Operation Codes {H11410} +** CAPI3REF: Testing Interface Operation Codes ** ** These constants are the valid operation code parameters used ** as the first argument to [sqlite3_test_control()]. @@ -5452,6 +6365,7 @@ SQLITE_API int sqlite3_test_control(int op, ...); ** Applications should not use any of these parameters or the ** [sqlite3_test_control()] interface. */ +#define SQLITE_TESTCTRL_FIRST 5 #define SQLITE_TESTCTRL_PRNG_SAVE 5 #define SQLITE_TESTCTRL_PRNG_RESTORE 6 #define SQLITE_TESTCTRL_PRNG_RESET 7 @@ -5461,29 +6375,35 @@ SQLITE_API int sqlite3_test_control(int op, ...); #define SQLITE_TESTCTRL_PENDING_BYTE 11 #define SQLITE_TESTCTRL_ASSERT 12 #define SQLITE_TESTCTRL_ALWAYS 13 - -/* -** CAPI3REF: SQLite Runtime Status {H17200} -** EXPERIMENTAL -** -** This interface is used to retrieve runtime status information -** about the preformance of SQLite, and optionally to reset various -** highwater marks. The first argument is an integer code for -** the specific parameter to measure. Recognized integer codes -** are of the form [SQLITE_STATUS_MEMORY_USED | SQLITE_STATUS_...]. -** The current value of the parameter is returned into *pCurrent. -** The highest recorded value is returned in *pHighwater. If the +#define SQLITE_TESTCTRL_RESERVE 14 +#define SQLITE_TESTCTRL_OPTIMIZATIONS 15 +#define SQLITE_TESTCTRL_ISKEYWORD 16 +#define SQLITE_TESTCTRL_SCRATCHMALLOC 17 +#define SQLITE_TESTCTRL_LOCALTIME_FAULT 18 +#define SQLITE_TESTCTRL_EXPLAIN_STMT 19 +#define SQLITE_TESTCTRL_LAST 19 + +/* +** CAPI3REF: SQLite Runtime Status +** +** ^This interface is used to retrieve runtime status information +** about the performance of SQLite, and optionally to reset various +** highwater marks. ^The first argument is an integer code for +** the specific parameter to measure. ^(Recognized integer codes +** are of the form [status parameters | SQLITE_STATUS_...].)^ +** ^The current value of the parameter is returned into *pCurrent. +** ^The highest recorded value is returned in *pHighwater. ^If the ** resetFlag is true, then the highest record value is reset after -** *pHighwater is written. Some parameters do not record the highest +** *pHighwater is written. ^(Some parameters do not record the highest ** value. For those parameters -** nothing is written into *pHighwater and the resetFlag is ignored. -** Other parameters record only the highwater mark and not the current -** value. For these latter parameters nothing is written into *pCurrent. +** nothing is written into *pHighwater and the resetFlag is ignored.)^ +** ^(Other parameters record only the highwater mark and not the current +** value. For these latter parameters nothing is written into *pCurrent.)^ ** -** This routine returns SQLITE_OK on success and a non-zero -** [error code] on failure. +** ^The sqlite3_status() routine returns SQLITE_OK on success and a +** non-zero [error code] on failure. ** -** This routine is threadsafe but is not atomic. This routine can +** This routine is threadsafe but is not atomic. This routine can be ** called while other threads are running the same or different SQLite ** interfaces. However the values returned in *pCurrent and ** *pHighwater reflect the status of SQLite at different points in time @@ -5492,18 +6412,18 @@ SQLITE_API int sqlite3_test_control(int op, ...); ** ** See also: [sqlite3_db_status()] */ -SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_status(int op, int *pCurrent, int *pHighwater, int resetFlag); +SQLITE_API int sqlite3_status(int op, int *pCurrent, int *pHighwater, int resetFlag); /* -** CAPI3REF: Status Parameters {H17250} -** EXPERIMENTAL +** CAPI3REF: Status Parameters +** KEYWORDS: {status parameters} ** ** These integer constants designate various run-time status parameters ** that can be returned by [sqlite3_status()]. ** **
    -**
    SQLITE_STATUS_MEMORY_USED
    +** [[SQLITE_STATUS_MEMORY_USED]] ^(
    SQLITE_STATUS_MEMORY_USED
    **
    This parameter is the current amount of memory checked out ** using [sqlite3_malloc()], either directly or indirectly. The ** figure includes calls made to [sqlite3_malloc()] by the application @@ -5511,63 +6431,68 @@ SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_status(int op, int *pCurrent, int *pH ** controlled by [SQLITE_CONFIG_SCRATCH] and auxiliary page-cache ** memory controlled by [SQLITE_CONFIG_PAGECACHE] is not included in ** this parameter. The amount returned is the sum of the allocation -** sizes as reported by the xSize method in [sqlite3_mem_methods].
    +** sizes as reported by the xSize method in [sqlite3_mem_methods].)^ ** -**
    SQLITE_STATUS_MALLOC_SIZE
    +** [[SQLITE_STATUS_MALLOC_SIZE]] ^(
    SQLITE_STATUS_MALLOC_SIZE
    **
    This parameter records the largest memory allocation request ** handed to [sqlite3_malloc()] or [sqlite3_realloc()] (or their ** internal equivalents). Only the value returned in the ** *pHighwater parameter to [sqlite3_status()] is of interest. -** The value written into the *pCurrent parameter is undefined.
    +** The value written into the *pCurrent parameter is undefined.)^ +** +** [[SQLITE_STATUS_MALLOC_COUNT]] ^(
    SQLITE_STATUS_MALLOC_COUNT
    +**
    This parameter records the number of separate memory allocations +** currently checked out.
    )^ ** -**
    SQLITE_STATUS_PAGECACHE_USED
    +** [[SQLITE_STATUS_PAGECACHE_USED]] ^(
    SQLITE_STATUS_PAGECACHE_USED
    **
    This parameter returns the number of pages used out of the ** [pagecache memory allocator] that was configured using ** [SQLITE_CONFIG_PAGECACHE]. The -** value returned is in pages, not in bytes.
    +** value returned is in pages, not in bytes.)^ ** -**
    SQLITE_STATUS_PAGECACHE_OVERFLOW
    +** [[SQLITE_STATUS_PAGECACHE_OVERFLOW]] +** ^(
    SQLITE_STATUS_PAGECACHE_OVERFLOW
    **
    This parameter returns the number of bytes of page cache -** allocation which could not be statisfied by the [SQLITE_CONFIG_PAGECACHE] +** allocation which could not be satisfied by the [SQLITE_CONFIG_PAGECACHE] ** buffer and where forced to overflow to [sqlite3_malloc()]. The ** returned value includes allocations that overflowed because they ** where too large (they were larger than the "sz" parameter to ** [SQLITE_CONFIG_PAGECACHE]) and allocations that overflowed because -** no space was left in the page cache.
    +** no space was left in the page cache.)^ ** -**
    SQLITE_STATUS_PAGECACHE_SIZE
    +** [[SQLITE_STATUS_PAGECACHE_SIZE]] ^(
    SQLITE_STATUS_PAGECACHE_SIZE
    **
    This parameter records the largest memory allocation request ** handed to [pagecache memory allocator]. Only the value returned in the ** *pHighwater parameter to [sqlite3_status()] is of interest. -** The value written into the *pCurrent parameter is undefined.
    +** The value written into the *pCurrent parameter is undefined.)^ ** -**
    SQLITE_STATUS_SCRATCH_USED
    +** [[SQLITE_STATUS_SCRATCH_USED]] ^(
    SQLITE_STATUS_SCRATCH_USED
    **
    This parameter returns the number of allocations used out of the ** [scratch memory allocator] configured using ** [SQLITE_CONFIG_SCRATCH]. The value returned is in allocations, not ** in bytes. Since a single thread may only have one scratch allocation ** outstanding at time, this parameter also reports the number of threads -** using scratch memory at the same time.
    +** using scratch memory at the same time.)^ ** -**
    SQLITE_STATUS_SCRATCH_OVERFLOW
    +** [[SQLITE_STATUS_SCRATCH_OVERFLOW]] ^(
    SQLITE_STATUS_SCRATCH_OVERFLOW
    **
    This parameter returns the number of bytes of scratch memory -** allocation which could not be statisfied by the [SQLITE_CONFIG_SCRATCH] +** allocation which could not be satisfied by the [SQLITE_CONFIG_SCRATCH] ** buffer and where forced to overflow to [sqlite3_malloc()]. The values ** returned include overflows because the requested allocation was too ** larger (that is, because the requested allocation was larger than the ** "sz" parameter to [SQLITE_CONFIG_SCRATCH]) and because no scratch buffer ** slots were available. -**
    +** )^ ** -**
    SQLITE_STATUS_SCRATCH_SIZE
    +** [[SQLITE_STATUS_SCRATCH_SIZE]] ^(
    SQLITE_STATUS_SCRATCH_SIZE
    **
    This parameter records the largest memory allocation request ** handed to [scratch memory allocator]. Only the value returned in the ** *pHighwater parameter to [sqlite3_status()] is of interest. -** The value written into the *pCurrent parameter is undefined.
    +** The value written into the *pCurrent parameter is undefined.)^ ** -**
    SQLITE_STATUS_PARSER_STACK
    +** [[SQLITE_STATUS_PARSER_STACK]] ^(
    SQLITE_STATUS_PARSER_STACK
    **
    This parameter records the deepest parser stack. It is only -** meaningful if SQLite is compiled with [YYTRACKMAXSTACKDEPTH].
    +** meaningful if SQLite is compiled with [YYTRACKMAXSTACKDEPTH].)^ **
    ** ** New status parameters may be added from time to time. @@ -5581,96 +6506,188 @@ SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_status(int op, int *pCurrent, int *pH #define SQLITE_STATUS_PARSER_STACK 6 #define SQLITE_STATUS_PAGECACHE_SIZE 7 #define SQLITE_STATUS_SCRATCH_SIZE 8 +#define SQLITE_STATUS_MALLOC_COUNT 9 /* -** CAPI3REF: Database Connection Status {H17500} -** EXPERIMENTAL +** CAPI3REF: Database Connection Status ** -** This interface is used to retrieve runtime status information -** about a single [database connection]. The first argument is the -** database connection object to be interrogated. The second argument -** is the parameter to interrogate. Currently, the only allowed value -** for the second parameter is [SQLITE_DBSTATUS_LOOKASIDE_USED]. -** Additional options will likely appear in future releases of SQLite. +** ^This interface is used to retrieve runtime status information +** about a single [database connection]. ^The first argument is the +** database connection object to be interrogated. ^The second argument +** is an integer constant, taken from the set of +** [SQLITE_DBSTATUS options], that +** determines the parameter to interrogate. The set of +** [SQLITE_DBSTATUS options] is likely +** to grow in future releases of SQLite. ** -** The current value of the requested parameter is written into *pCur -** and the highest instantaneous value is written into *pHiwtr. If +** ^The current value of the requested parameter is written into *pCur +** and the highest instantaneous value is written into *pHiwtr. ^If ** the resetFlg is true, then the highest instantaneous value is ** reset back down to the current value. ** +** ^The sqlite3_db_status() routine returns SQLITE_OK on success and a +** non-zero [error code] on failure. +** ** See also: [sqlite3_status()] and [sqlite3_stmt_status()]. */ -SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_db_status(sqlite3*, int op, int *pCur, int *pHiwtr, int resetFlg); +SQLITE_API int sqlite3_db_status(sqlite3*, int op, int *pCur, int *pHiwtr, int resetFlg); /* -** CAPI3REF: Status Parameters for database connections {H17520} -** EXPERIMENTAL +** CAPI3REF: Status Parameters for database connections +** KEYWORDS: {SQLITE_DBSTATUS options} ** -** Status verbs for [sqlite3_db_status()]. +** These constants are the available integer "verbs" that can be passed as +** the second argument to the [sqlite3_db_status()] interface. +** +** New verbs may be added in future releases of SQLite. Existing verbs +** might be discontinued. Applications should check the return code from +** [sqlite3_db_status()] to make sure that the call worked. +** The [sqlite3_db_status()] interface will return a non-zero error code +** if a discontinued or unsupported verb is invoked. ** **
    -**
    SQLITE_DBSTATUS_LOOKASIDE_USED
    +** [[SQLITE_DBSTATUS_LOOKASIDE_USED]] ^(
    SQLITE_DBSTATUS_LOOKASIDE_USED
    **
    This parameter returns the number of lookaside memory slots currently -** checked out.
    +** checked out.)^ +** +** [[SQLITE_DBSTATUS_LOOKASIDE_HIT]] ^(
    SQLITE_DBSTATUS_LOOKASIDE_HIT
    +**
    This parameter returns the number malloc attempts that were +** satisfied using lookaside memory. Only the high-water value is meaningful; +** the current value is always zero.)^ +** +** [[SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE]] +** ^(
    SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE
    +**
    This parameter returns the number malloc attempts that might have +** been satisfied using lookaside memory but failed due to the amount of +** memory requested being larger than the lookaside slot size. +** Only the high-water value is meaningful; +** the current value is always zero.)^ +** +** [[SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL]] +** ^(
    SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL
    +**
    This parameter returns the number malloc attempts that might have +** been satisfied using lookaside memory but failed due to all lookaside +** memory already being in use. +** Only the high-water value is meaningful; +** the current value is always zero.)^ +** +** [[SQLITE_DBSTATUS_CACHE_USED]] ^(
    SQLITE_DBSTATUS_CACHE_USED
    +**
    This parameter returns the approximate number of of bytes of heap +** memory used by all pager caches associated with the database connection.)^ +** ^The highwater mark associated with SQLITE_DBSTATUS_CACHE_USED is always 0. +** +** [[SQLITE_DBSTATUS_SCHEMA_USED]] ^(
    SQLITE_DBSTATUS_SCHEMA_USED
    +**
    This parameter returns the approximate number of of bytes of heap +** memory used to store the schema for all databases associated +** with the connection - main, temp, and any [ATTACH]-ed databases.)^ +** ^The full amount of memory used by the schemas is reported, even if the +** schema memory is shared with other database connections due to +** [shared cache mode] being enabled. +** ^The highwater mark associated with SQLITE_DBSTATUS_SCHEMA_USED is always 0. +** +** [[SQLITE_DBSTATUS_STMT_USED]] ^(
    SQLITE_DBSTATUS_STMT_USED
    +**
    This parameter returns the approximate number of of bytes of heap +** and lookaside memory used by all prepared statements associated with +** the database connection.)^ +** ^The highwater mark associated with SQLITE_DBSTATUS_STMT_USED is always 0. +**
    +** +** [[SQLITE_DBSTATUS_CACHE_HIT]] ^(
    SQLITE_DBSTATUS_CACHE_HIT
    +**
    This parameter returns the number of pager cache hits that have +** occurred.)^ ^The highwater mark associated with SQLITE_DBSTATUS_CACHE_HIT +** is always 0. +**
    +** +** [[SQLITE_DBSTATUS_CACHE_MISS]] ^(
    SQLITE_DBSTATUS_CACHE_MISS
    +**
    This parameter returns the number of pager cache misses that have +** occurred.)^ ^The highwater mark associated with SQLITE_DBSTATUS_CACHE_MISS +** is always 0. +**
    +** +** [[SQLITE_DBSTATUS_CACHE_WRITE]] ^(
    SQLITE_DBSTATUS_CACHE_WRITE
    +**
    This parameter returns the number of dirty cache entries that have +** been written to disk. Specifically, the number of pages written to the +** wal file in wal mode databases, or the number of pages written to the +** database file in rollback mode databases. Any pages written as part of +** transaction rollback or database recovery operations are not included. +** If an IO or other error occurs while writing a page to disk, the effect +** on subsequent SQLITE_DBSTATUS_CACHE_WRITE requests is undefined.)^ ^The +** highwater mark associated with SQLITE_DBSTATUS_CACHE_WRITE is always 0. +**
    **
    */ -#define SQLITE_DBSTATUS_LOOKASIDE_USED 0 +#define SQLITE_DBSTATUS_LOOKASIDE_USED 0 +#define SQLITE_DBSTATUS_CACHE_USED 1 +#define SQLITE_DBSTATUS_SCHEMA_USED 2 +#define SQLITE_DBSTATUS_STMT_USED 3 +#define SQLITE_DBSTATUS_LOOKASIDE_HIT 4 +#define SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE 5 +#define SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL 6 +#define SQLITE_DBSTATUS_CACHE_HIT 7 +#define SQLITE_DBSTATUS_CACHE_MISS 8 +#define SQLITE_DBSTATUS_CACHE_WRITE 9 +#define SQLITE_DBSTATUS_MAX 9 /* Largest defined DBSTATUS */ /* -** CAPI3REF: Prepared Statement Status {H17550} -** EXPERIMENTAL +** CAPI3REF: Prepared Statement Status ** -** Each prepared statement maintains various -** [SQLITE_STMTSTATUS_SORT | counters] that measure the number -** of times it has performed specific operations. These counters can +** ^(Each prepared statement maintains various +** [SQLITE_STMTSTATUS counters] that measure the number +** of times it has performed specific operations.)^ These counters can ** be used to monitor the performance characteristics of the prepared ** statements. For example, if the number of table steps greatly exceeds ** the number of table searches or result rows, that would tend to indicate ** that the prepared statement is using a full table scan rather than ** an index. ** -** This interface is used to retrieve and reset counter values from +** ^(This interface is used to retrieve and reset counter values from ** a [prepared statement]. The first argument is the prepared statement ** object to be interrogated. The second argument -** is an integer code for a specific [SQLITE_STMTSTATUS_SORT | counter] -** to be interrogated. -** The current value of the requested counter is returned. -** If the resetFlg is true, then the counter is reset to zero after this +** is an integer code for a specific [SQLITE_STMTSTATUS counter] +** to be interrogated.)^ +** ^The current value of the requested counter is returned. +** ^If the resetFlg is true, then the counter is reset to zero after this ** interface call returns. ** ** See also: [sqlite3_status()] and [sqlite3_db_status()]. */ -SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_stmt_status(sqlite3_stmt*, int op,int resetFlg); +SQLITE_API int sqlite3_stmt_status(sqlite3_stmt*, int op,int resetFlg); /* -** CAPI3REF: Status Parameters for prepared statements {H17570} -** EXPERIMENTAL +** CAPI3REF: Status Parameters for prepared statements +** KEYWORDS: {SQLITE_STMTSTATUS counter} {SQLITE_STMTSTATUS counters} ** ** These preprocessor macros define integer codes that name counter ** values associated with the [sqlite3_stmt_status()] interface. ** The meanings of the various counters are as follows: ** **
    -**
    SQLITE_STMTSTATUS_FULLSCAN_STEP
    -**
    This is the number of times that SQLite has stepped forward in +** [[SQLITE_STMTSTATUS_FULLSCAN_STEP]]
    SQLITE_STMTSTATUS_FULLSCAN_STEP
    +**
    ^This is the number of times that SQLite has stepped forward in ** a table as part of a full table scan. Large numbers for this counter ** may indicate opportunities for performance improvement through ** careful use of indices.
    ** -**
    SQLITE_STMTSTATUS_SORT
    -**
    This is the number of sort operations that have occurred. +** [[SQLITE_STMTSTATUS_SORT]]
    SQLITE_STMTSTATUS_SORT
    +**
    ^This is the number of sort operations that have occurred. ** A non-zero value in this counter may indicate an opportunity to ** improvement performance through careful use of indices.
    ** +** [[SQLITE_STMTSTATUS_AUTOINDEX]]
    SQLITE_STMTSTATUS_AUTOINDEX
    +**
    ^This is the number of rows inserted into transient indices that +** were created automatically in order to help joins run faster. +** A non-zero value in this counter may indicate an opportunity to +** improvement performance by adding permanent indices that do not +** need to be reinitialized each time the statement is run.
    **
    */ #define SQLITE_STMTSTATUS_FULLSCAN_STEP 1 #define SQLITE_STMTSTATUS_SORT 2 +#define SQLITE_STMTSTATUS_AUTOINDEX 3 /* ** CAPI3REF: Custom Page Cache Object -** EXPERIMENTAL ** ** The sqlite3_pcache type is opaque. It is implemented by ** the pluggable module. The SQLite core has no knowledge of @@ -5678,110 +6695,164 @@ SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_stmt_status(sqlite3_stmt*, int op,int ** sqlite3_pcache object except by holding and passing pointers ** to the object. ** -** See [sqlite3_pcache_methods] for additional information. +** See [sqlite3_pcache_methods2] for additional information. */ typedef struct sqlite3_pcache sqlite3_pcache; +/* +** CAPI3REF: Custom Page Cache Object +** +** The sqlite3_pcache_page object represents a single page in the +** page cache. The page cache will allocate instances of this +** object. Various methods of the page cache use pointers to instances +** of this object as parameters or as their return value. +** +** See [sqlite3_pcache_methods2] for additional information. +*/ +typedef struct sqlite3_pcache_page sqlite3_pcache_page; +struct sqlite3_pcache_page { + void *pBuf; /* The content of the page */ + void *pExtra; /* Extra information associated with the page */ +}; + /* ** CAPI3REF: Application Defined Page Cache. -** EXPERIMENTAL +** KEYWORDS: {page cache} ** -** The [sqlite3_config]([SQLITE_CONFIG_PCACHE], ...) interface can +** ^(The [sqlite3_config]([SQLITE_CONFIG_PCACHE2], ...) interface can ** register an alternative page cache implementation by passing in an -** instance of the sqlite3_pcache_methods structure. The majority of the -** heap memory used by sqlite is used by the page cache to cache data read -** from, or ready to be written to, the database file. By implementing a -** custom page cache using this API, an application can control more -** precisely the amount of memory consumed by sqlite, the way in which -** said memory is allocated and released, and the policies used to +** instance of the sqlite3_pcache_methods2 structure.)^ +** In many applications, most of the heap memory allocated by +** SQLite is used for the page cache. +** By implementing a +** custom page cache using this API, an application can better control +** the amount of memory consumed by SQLite, the way in which +** that memory is allocated and released, and the policies used to ** determine exactly which parts of a database file are cached and for ** how long. ** -** The contents of the structure are copied to an internal buffer by sqlite -** within the call to [sqlite3_config]. -** -** The xInit() method is called once for each call to [sqlite3_initialize()] -** (usually only once during the lifetime of the process). It is passed -** a copy of the sqlite3_pcache_methods.pArg value. It can be used to set -** up global structures and mutexes required by the custom page cache -** implementation. The xShutdown() method is called from within -** [sqlite3_shutdown()], if the application invokes this API. It can be used -** to clean up any outstanding resources before process shutdown, if required. -** -** The xCreate() method is used to construct a new cache instance. The +** The alternative page cache mechanism is an +** extreme measure that is only needed by the most demanding applications. +** The built-in page cache is recommended for most uses. +** +** ^(The contents of the sqlite3_pcache_methods2 structure are copied to an +** internal buffer by SQLite within the call to [sqlite3_config]. Hence +** the application may discard the parameter after the call to +** [sqlite3_config()] returns.)^ +** +** [[the xInit() page cache method]] +** ^(The xInit() method is called once for each effective +** call to [sqlite3_initialize()])^ +** (usually only once during the lifetime of the process). ^(The xInit() +** method is passed a copy of the sqlite3_pcache_methods2.pArg value.)^ +** The intent of the xInit() method is to set up global data structures +** required by the custom page cache implementation. +** ^(If the xInit() method is NULL, then the +** built-in default page cache is used instead of the application defined +** page cache.)^ +** +** [[the xShutdown() page cache method]] +** ^The xShutdown() method is called by [sqlite3_shutdown()]. +** It can be used to clean up +** any outstanding resources before process shutdown, if required. +** ^The xShutdown() method may be NULL. +** +** ^SQLite automatically serializes calls to the xInit method, +** so the xInit method need not be threadsafe. ^The +** xShutdown method is only called from [sqlite3_shutdown()] so it does +** not need to be threadsafe either. All other methods must be threadsafe +** in multithreaded applications. +** +** ^SQLite will never invoke xInit() more than once without an intervening +** call to xShutdown(). +** +** [[the xCreate() page cache methods]] +** ^SQLite invokes the xCreate() method to construct a new cache instance. +** SQLite will typically create one cache instance for each open database file, +** though this is not guaranteed. ^The ** first parameter, szPage, is the size in bytes of the pages that must -** be allocated by the cache. szPage will not be a power of two. The -** second argument, bPurgeable, is true if the cache being created will -** be used to cache database pages read from a file stored on disk, or +** be allocated by the cache. ^szPage will always a power of two. ^The +** second parameter szExtra is a number of bytes of extra storage +** associated with each page cache entry. ^The szExtra parameter will +** a number less than 250. SQLite will use the +** extra szExtra bytes on each page to store metadata about the underlying +** database page on disk. The value passed into szExtra depends +** on the SQLite version, the target platform, and how SQLite was compiled. +** ^The third argument to xCreate(), bPurgeable, is true if the cache being +** created will be used to cache database pages of a file stored on disk, or ** false if it is used for an in-memory database. The cache implementation -** does not have to do anything special based on the value of bPurgeable, -** it is purely advisory. -** -** The xCachesize() method may be called at any time by SQLite to set the +** does not have to do anything special based with the value of bPurgeable; +** it is purely advisory. ^On a cache where bPurgeable is false, SQLite will +** never invoke xUnpin() except to deliberately delete a page. +** ^In other words, calls to xUnpin() on a cache with bPurgeable set to +** false will always have the "discard" flag set to true. +** ^Hence, a cache created with bPurgeable false will +** never contain any unpinned pages. +** +** [[the xCachesize() page cache method]] +** ^(The xCachesize() method may be called at any time by SQLite to set the ** suggested maximum cache-size (number of pages stored by) the cache ** instance passed as the first argument. This is the value configured using -** the SQLite "[PRAGMA cache_size]" command. As with the bPurgeable parameter, -** the implementation is not required to do anything special with this -** value, it is advisory only. +** the SQLite "[PRAGMA cache_size]" command.)^ As with the bPurgeable +** parameter, the implementation is not required to do anything with this +** value; it is advisory only. ** -** The xPagecount() method should return the number of pages currently -** stored in the cache supplied as an argument. +** [[the xPagecount() page cache methods]] +** The xPagecount() method must return the number of pages currently +** stored in the cache, both pinned and unpinned. ** -** The xFetch() method is used to fetch a page and return a pointer to it. -** A 'page', in this context, is a buffer of szPage bytes aligned at an -** 8-byte boundary. The page to be fetched is determined by the key. The -** mimimum key value is 1. After it has been retrieved using xFetch, the page -** is considered to be pinned. -** -** If the requested page is already in the page cache, then a pointer to -** the cached buffer should be returned with its contents intact. If the -** page is not already in the cache, then the expected behaviour of the -** cache is determined by the value of the createFlag parameter passed -** to xFetch, according to the following table: +** [[the xFetch() page cache methods]] +** The xFetch() method locates a page in the cache and returns a pointer to +** an sqlite3_pcache_page object associated with that page, or a NULL pointer. +** The pBuf element of the returned sqlite3_pcache_page object will be a +** pointer to a buffer of szPage bytes used to store the content of a +** single database page. The pExtra element of sqlite3_pcache_page will be +** a pointer to the szExtra bytes of extra storage that SQLite has requested +** for each entry in the page cache. +** +** The page to be fetched is determined by the key. ^The minimum key value +** is 1. After it has been retrieved using xFetch, the page is considered +** to be "pinned". +** +** If the requested page is already in the page cache, then the page cache +** implementation must return a pointer to the page buffer with its content +** intact. If the requested page is not already in the cache, then the +** cache implementation should use the value of the createFlag +** parameter to help it determined what action to take: ** ** -**
    createFlagExpected Behaviour -**
    0NULL should be returned. No new cache entry is created. -**
    1If createFlag is set to 1, this indicates that -** SQLite is holding pinned pages that can be unpinned -** by writing their contents to the database file (a -** relatively expensive operation). In this situation the -** cache implementation has two choices: it can return NULL, -** in which case SQLite will attempt to unpin one or more -** pages before re-requesting the same page, or it can -** allocate a new page and return a pointer to it. If a new -** page is allocated, then the first sizeof(void*) bytes of -** it (at least) must be zeroed before it is returned. -**
    2If createFlag is set to 2, then SQLite is not holding any -** pinned pages associated with the specific cache passed -** as the first argument to xFetch() that can be unpinned. The -** cache implementation should attempt to allocate a new -** cache entry and return a pointer to it. Again, the first -** sizeof(void*) bytes of the page should be zeroed before -** it is returned. If the xFetch() method returns NULL when -** createFlag==2, SQLite assumes that a memory allocation -** failed and returns SQLITE_NOMEM to the user. +**
    createFlag Behaviour when page is not already in cache +**
    0 Do not allocate a new page. Return NULL. +**
    1 Allocate a new page if it easy and convenient to do so. +** Otherwise return NULL. +**
    2 Make every effort to allocate a new page. Only return +** NULL if allocating a new page is effectively impossible. **
    ** -** xUnpin() is called by SQLite with a pointer to a currently pinned page -** as its second argument. If the third parameter, discard, is non-zero, -** then the page should be evicted from the cache. In this case SQLite -** assumes that the next time the page is retrieved from the cache using -** the xFetch() method, it will be zeroed. If the discard parameter is -** zero, then the page is considered to be unpinned. The cache implementation -** may choose to reclaim (free or recycle) unpinned pages at any time. -** SQLite assumes that next time the page is retrieved from the cache -** it will either be zeroed, or contain the same data that it did when it -** was unpinned. -** -** The cache is not required to perform any reference counting. A single +** ^(SQLite will normally invoke xFetch() with a createFlag of 0 or 1. SQLite +** will only use a createFlag of 2 after a prior call with a createFlag of 1 +** failed.)^ In between the to xFetch() calls, SQLite may +** attempt to unpin one or more cache pages by spilling the content of +** pinned pages to disk and synching the operating system disk cache. +** +** [[the xUnpin() page cache method]] +** ^xUnpin() is called by SQLite with a pointer to a currently pinned page +** as its second argument. If the third parameter, discard, is non-zero, +** then the page must be evicted from the cache. +** ^If the discard parameter is +** zero, then the page may be discarded or retained at the discretion of +** page cache implementation. ^The page cache implementation +** may choose to evict unpinned pages at any time. +** +** The cache must not perform any reference counting. A single ** call to xUnpin() unpins the page regardless of the number of prior calls ** to xFetch(). ** +** [[the xRekey() page cache methods]] ** The xRekey() method is used to change the key value associated with the -** page passed as the second argument from oldKey to newKey. If the cache -** previously contains an entry associated with newKey, it should be -** discarded. Any prior cache entry associated with newKey is guaranteed not +** page passed as the second argument. If the cache +** previously contains an entry associated with newKey, it must be +** discarded. ^Any prior cache entry associated with newKey is guaranteed not ** to be pinned. ** ** When SQLite calls the xTruncate() method, the cache must discard all @@ -5790,11 +6861,41 @@ typedef struct sqlite3_pcache sqlite3_pcache; ** of these pages are pinned, they are implicitly unpinned, meaning that ** they can be safely discarded. ** -** The xDestroy() method is used to delete a cache allocated by xCreate(). -** All resources associated with the specified cache should be freed. After +** [[the xDestroy() page cache method]] +** ^The xDestroy() method is used to delete a cache allocated by xCreate(). +** All resources associated with the specified cache should be freed. ^After ** calling the xDestroy() method, SQLite considers the [sqlite3_pcache*] -** handle invalid, and will not use it with any other sqlite3_pcache_methods +** handle invalid, and will not use it with any other sqlite3_pcache_methods2 ** functions. +** +** [[the xShrink() page cache method]] +** ^SQLite invokes the xShrink() method when it wants the page cache to +** free up as much of heap memory as possible. The page cache implementation +** is not obligated to free any memory, but well-behaved implementations should +** do their best. +*/ +typedef struct sqlite3_pcache_methods2 sqlite3_pcache_methods2; +struct sqlite3_pcache_methods2 { + int iVersion; + void *pArg; + int (*xInit)(void*); + void (*xShutdown)(void*); + sqlite3_pcache *(*xCreate)(int szPage, int szExtra, int bPurgeable); + void (*xCachesize)(sqlite3_pcache*, int nCachesize); + int (*xPagecount)(sqlite3_pcache*); + sqlite3_pcache_page *(*xFetch)(sqlite3_pcache*, unsigned key, int createFlag); + void (*xUnpin)(sqlite3_pcache*, sqlite3_pcache_page*, int discard); + void (*xRekey)(sqlite3_pcache*, sqlite3_pcache_page*, + unsigned oldKey, unsigned newKey); + void (*xTruncate)(sqlite3_pcache*, unsigned iLimit); + void (*xDestroy)(sqlite3_pcache*); + void (*xShrink)(sqlite3_pcache*); +}; + +/* +** This is the obsolete pcache_methods object that has now been replaced +** by sqlite3_pcache_methods2. This object is not used by SQLite. It is +** retained in the header file for backwards compatibility only. */ typedef struct sqlite3_pcache_methods sqlite3_pcache_methods; struct sqlite3_pcache_methods { @@ -5811,12 +6912,12 @@ struct sqlite3_pcache_methods { void (*xDestroy)(sqlite3_pcache*); }; + /* ** CAPI3REF: Online Backup Object -** EXPERIMENTAL ** ** The sqlite3_backup object records state information about an ongoing -** online backup operation. The sqlite3_backup object is created by +** online backup operation. ^The sqlite3_backup object is created by ** a call to [sqlite3_backup_init()] and is destroyed by a call to ** [sqlite3_backup_finish()]. ** @@ -5826,22 +6927,22 @@ typedef struct sqlite3_backup sqlite3_backup; /* ** CAPI3REF: Online Backup API. -** EXPERIMENTAL ** -** This API is used to overwrite the contents of one database with that -** of another. It is useful either for creating backups of databases or +** The backup API copies the content of one database into another. +** It is useful either for creating backups of databases or ** for copying in-memory databases to or from persistent files. ** ** See Also: [Using the SQLite Online Backup API] ** -** Exclusive access is required to the destination database for the -** duration of the operation. However the source database is only -** read-locked while it is actually being read, it is not locked -** continuously for the entire operation. Thus, the backup may be -** performed on a live database without preventing other users from -** writing to the database for an extended period of time. +** ^SQLite holds a write transaction open on the destination database file +** for the duration of the backup operation. +** ^The source database is read-locked only while it is being read; +** it is not locked continuously for the entire backup operation. +** ^Thus, the backup may be performed on a live source database without +** preventing other database connections from +** reading or writing to the source database while the backup is underway. ** -** To perform a backup operation: +** ^(To perform a backup operation: **
      **
    1. sqlite3_backup_init() is called once to initialize the ** backup, @@ -5849,143 +6950,153 @@ typedef struct sqlite3_backup sqlite3_backup; ** the data between the two databases, and finally **
    2. sqlite3_backup_finish() is called to release all resources ** associated with the backup operation. -**
    +** )^ ** There should be exactly one call to sqlite3_backup_finish() for each ** successful call to sqlite3_backup_init(). ** -** sqlite3_backup_init() -** -** The first two arguments passed to [sqlite3_backup_init()] are the database -** handle associated with the destination database and the database name -** used to attach the destination database to the handle. The database name -** is "main" for the main database, "temp" for the temporary database, or -** the name specified as part of the [ATTACH] statement if the destination is -** an attached database. The third and fourth arguments passed to -** sqlite3_backup_init() identify the [database connection] -** and database name used -** to access the source database. The values passed for the source and -** destination [database connection] parameters must not be the same. -** -** If an error occurs within sqlite3_backup_init(), then NULL is returned -** and an error code and error message written into the [database connection] -** passed as the first argument. They may be retrieved using the -** [sqlite3_errcode()], [sqlite3_errmsg()], and [sqlite3_errmsg16()] functions. -** Otherwise, if successful, a pointer to an [sqlite3_backup] object is -** returned. This pointer may be used with the sqlite3_backup_step() and +** [[sqlite3_backup_init()]] sqlite3_backup_init() +** +** ^The D and N arguments to sqlite3_backup_init(D,N,S,M) are the +** [database connection] associated with the destination database +** and the database name, respectively. +** ^The database name is "main" for the main database, "temp" for the +** temporary database, or the name specified after the AS keyword in +** an [ATTACH] statement for an attached database. +** ^The S and M arguments passed to +** sqlite3_backup_init(D,N,S,M) identify the [database connection] +** and database name of the source database, respectively. +** ^The source and destination [database connections] (parameters S and D) +** must be different or else sqlite3_backup_init(D,N,S,M) will fail with +** an error. +** +** ^If an error occurs within sqlite3_backup_init(D,N,S,M), then NULL is +** returned and an error code and error message are stored in the +** destination [database connection] D. +** ^The error code and message for the failed call to sqlite3_backup_init() +** can be retrieved using the [sqlite3_errcode()], [sqlite3_errmsg()], and/or +** [sqlite3_errmsg16()] functions. +** ^A successful call to sqlite3_backup_init() returns a pointer to an +** [sqlite3_backup] object. +** ^The [sqlite3_backup] object may be used with the sqlite3_backup_step() and ** sqlite3_backup_finish() functions to perform the specified backup ** operation. ** -** sqlite3_backup_step() -** -** Function [sqlite3_backup_step()] is used to copy up to nPage pages between -** the source and destination databases, where nPage is the value of the -** second parameter passed to sqlite3_backup_step(). If nPage is a negative -** value, all remaining source pages are copied. If the required pages are -** succesfully copied, but there are still more pages to copy before the -** backup is complete, it returns [SQLITE_OK]. If no error occured and there -** are no more pages to copy, then [SQLITE_DONE] is returned. If an error -** occurs, then an SQLite error code is returned. As well as [SQLITE_OK] and +** [[sqlite3_backup_step()]] sqlite3_backup_step() +** +** ^Function sqlite3_backup_step(B,N) will copy up to N pages between +** the source and destination databases specified by [sqlite3_backup] object B. +** ^If N is negative, all remaining source pages are copied. +** ^If sqlite3_backup_step(B,N) successfully copies N pages and there +** are still more pages to be copied, then the function returns [SQLITE_OK]. +** ^If sqlite3_backup_step(B,N) successfully finishes copying all pages +** from source to destination, then it returns [SQLITE_DONE]. +** ^If an error occurs while running sqlite3_backup_step(B,N), +** then an [error code] is returned. ^As well as [SQLITE_OK] and ** [SQLITE_DONE], a call to sqlite3_backup_step() may return [SQLITE_READONLY], ** [SQLITE_NOMEM], [SQLITE_BUSY], [SQLITE_LOCKED], or an ** [SQLITE_IOERR_ACCESS | SQLITE_IOERR_XXX] extended error code. ** -** As well as the case where the destination database file was opened for -** read-only access, sqlite3_backup_step() may return [SQLITE_READONLY] if -** the destination is an in-memory database with a different page size -** from the source database. -** -** If sqlite3_backup_step() cannot obtain a required file-system lock, then +** ^(The sqlite3_backup_step() might return [SQLITE_READONLY] if +**
      +**
    1. the destination database was opened read-only, or +**
    2. the destination database is using write-ahead-log journaling +** and the destination and source page sizes differ, or +**
    3. the destination database is an in-memory database and the +** destination and source page sizes differ. +**
    )^ +** +** ^If sqlite3_backup_step() cannot obtain a required file-system lock, then ** the [sqlite3_busy_handler | busy-handler function] -** is invoked (if one is specified). If the +** is invoked (if one is specified). ^If the ** busy-handler returns non-zero before the lock is available, then -** [SQLITE_BUSY] is returned to the caller. In this case the call to -** sqlite3_backup_step() can be retried later. If the source +** [SQLITE_BUSY] is returned to the caller. ^In this case the call to +** sqlite3_backup_step() can be retried later. ^If the source ** [database connection] ** is being used to write to the source database when sqlite3_backup_step() -** is called, then [SQLITE_LOCKED] is returned immediately. Again, in this -** case the call to sqlite3_backup_step() can be retried later on. If +** is called, then [SQLITE_LOCKED] is returned immediately. ^Again, in this +** case the call to sqlite3_backup_step() can be retried later on. ^(If ** [SQLITE_IOERR_ACCESS | SQLITE_IOERR_XXX], [SQLITE_NOMEM], or ** [SQLITE_READONLY] is returned, then ** there is no point in retrying the call to sqlite3_backup_step(). These -** errors are considered fatal. At this point the application must accept +** errors are considered fatal.)^ The application must accept ** that the backup operation has failed and pass the backup operation handle ** to the sqlite3_backup_finish() to release associated resources. ** -** Following the first call to sqlite3_backup_step(), an exclusive lock is -** obtained on the destination file. It is not released until either +** ^The first call to sqlite3_backup_step() obtains an exclusive lock +** on the destination file. ^The exclusive lock is not released until either ** sqlite3_backup_finish() is called or the backup operation is complete -** and sqlite3_backup_step() returns [SQLITE_DONE]. Additionally, each time -** a call to sqlite3_backup_step() is made a [shared lock] is obtained on -** the source database file. This lock is released before the -** sqlite3_backup_step() call returns. Because the source database is not -** locked between calls to sqlite3_backup_step(), it may be modified mid-way -** through the backup procedure. If the source database is modified by an +** and sqlite3_backup_step() returns [SQLITE_DONE]. ^Every call to +** sqlite3_backup_step() obtains a [shared lock] on the source database that +** lasts for the duration of the sqlite3_backup_step() call. +** ^Because the source database is not locked between calls to +** sqlite3_backup_step(), the source database may be modified mid-way +** through the backup process. ^If the source database is modified by an ** external process or via a database connection other than the one being -** used by the backup operation, then the backup will be transparently -** restarted by the next call to sqlite3_backup_step(). If the source +** used by the backup operation, then the backup will be automatically +** restarted by the next call to sqlite3_backup_step(). ^If the source ** database is modified by the using the same database connection as is used -** by the backup operation, then the backup database is transparently +** by the backup operation, then the backup database is automatically ** updated at the same time. ** -** sqlite3_backup_finish() +** [[sqlite3_backup_finish()]] sqlite3_backup_finish() ** -** Once sqlite3_backup_step() has returned [SQLITE_DONE], or when the -** application wishes to abandon the backup operation, the [sqlite3_backup] -** object should be passed to sqlite3_backup_finish(). This releases all -** resources associated with the backup operation. If sqlite3_backup_step() -** has not yet returned [SQLITE_DONE], then any active write-transaction on the -** destination database is rolled back. The [sqlite3_backup] object is invalid +** When sqlite3_backup_step() has returned [SQLITE_DONE], or when the +** application wishes to abandon the backup operation, the application +** should destroy the [sqlite3_backup] by passing it to sqlite3_backup_finish(). +** ^The sqlite3_backup_finish() interfaces releases all +** resources associated with the [sqlite3_backup] object. +** ^If sqlite3_backup_step() has not yet returned [SQLITE_DONE], then any +** active write-transaction on the destination database is rolled back. +** The [sqlite3_backup] object is invalid ** and may not be used following a call to sqlite3_backup_finish(). ** -** The value returned by sqlite3_backup_finish is [SQLITE_OK] if no error -** occurred, regardless or whether or not sqlite3_backup_step() was called -** a sufficient number of times to complete the backup operation. Or, if -** an out-of-memory condition or IO error occured during a call to -** sqlite3_backup_step() then [SQLITE_NOMEM] or an -** [SQLITE_IOERR_ACCESS | SQLITE_IOERR_XXX] error code -** is returned. In this case the error code and an error message are -** written to the destination [database connection]. -** -** A return of [SQLITE_BUSY] or [SQLITE_LOCKED] from sqlite3_backup_step() is -** not a permanent error and does not affect the return value of +** ^The value returned by sqlite3_backup_finish is [SQLITE_OK] if no +** sqlite3_backup_step() errors occurred, regardless or whether or not +** sqlite3_backup_step() completed. +** ^If an out-of-memory condition or IO error occurred during any prior +** sqlite3_backup_step() call on the same [sqlite3_backup] object, then +** sqlite3_backup_finish() returns the corresponding [error code]. +** +** ^A return of [SQLITE_BUSY] or [SQLITE_LOCKED] from sqlite3_backup_step() +** is not a permanent error and does not affect the return value of ** sqlite3_backup_finish(). ** -** sqlite3_backup_remaining(), sqlite3_backup_pagecount() +** [[sqlite3_backup__remaining()]] [[sqlite3_backup_pagecount()]] +** sqlite3_backup_remaining() and sqlite3_backup_pagecount() ** -** Each call to sqlite3_backup_step() sets two values stored internally -** by an [sqlite3_backup] object. The number of pages still to be backed -** up, which may be queried by sqlite3_backup_remaining(), and the total -** number of pages in the source database file, which may be queried by -** sqlite3_backup_pagecount(). +** ^Each call to sqlite3_backup_step() sets two values inside +** the [sqlite3_backup] object: the number of pages still to be backed +** up and the total number of pages in the source database file. +** The sqlite3_backup_remaining() and sqlite3_backup_pagecount() interfaces +** retrieve these two values, respectively. ** -** The values returned by these functions are only updated by -** sqlite3_backup_step(). If the source database is modified during a backup +** ^The values returned by these functions are only updated by +** sqlite3_backup_step(). ^If the source database is modified during a backup ** operation, then the values are not updated to account for any extra ** pages that need to be updated or the size of the source database file ** changing. ** ** Concurrent Usage of Database Handles ** -** The source [database connection] may be used by the application for other +** ^The source [database connection] may be used by the application for other ** purposes while a backup operation is underway or being initialized. -** If SQLite is compiled and configured to support threadsafe database +** ^If SQLite is compiled and configured to support threadsafe database ** connections, then the source database connection may be used concurrently ** from within other threads. ** -** However, the application must guarantee that the destination database -** connection handle is not passed to any other API (by any thread) after +** However, the application must guarantee that the destination +** [database connection] is not passed to any other API (by any thread) after ** sqlite3_backup_init() is called and before the corresponding call to -** sqlite3_backup_finish(). Unfortunately SQLite does not currently check -** for this, if the application does use the destination [database connection] -** for some other purpose during a backup operation, things may appear to -** work correctly but in fact be subtly malfunctioning. Use of the -** destination database connection while a backup is in progress might -** also cause a mutex deadlock. -** -** Furthermore, if running in [shared cache mode], the application must +** sqlite3_backup_finish(). SQLite does not currently check to see +** if the application incorrectly accesses the destination [database connection] +** and so no error code is reported, but the operations may malfunction +** nevertheless. Use of the destination database connection while a +** backup is in progress might also also cause a mutex deadlock. +** +** If running in [shared cache mode], the application must ** guarantee that the shared cache used by the destination database ** is not accessed while the backup is running. In practice this means -** that the application must guarantee that the file-system file being +** that the application must guarantee that the disk file being ** backed up to is not accessed by any connection within the process, ** not just the specific connection that was passed to sqlite3_backup_init(). ** @@ -6009,50 +7120,49 @@ SQLITE_API int sqlite3_backup_pagecount(sqlite3_backup *p); /* ** CAPI3REF: Unlock Notification -** EXPERIMENTAL ** -** When running in shared-cache mode, a database operation may fail with +** ^When running in shared-cache mode, a database operation may fail with ** an [SQLITE_LOCKED] error if the required locks on the shared-cache or ** individual tables within the shared-cache cannot be obtained. See ** [SQLite Shared-Cache Mode] for a description of shared-cache locking. -** This API may be used to register a callback that SQLite will invoke +** ^This API may be used to register a callback that SQLite will invoke ** when the connection currently holding the required lock relinquishes it. -** This API is only available if the library was compiled with the +** ^This API is only available if the library was compiled with the ** [SQLITE_ENABLE_UNLOCK_NOTIFY] C-preprocessor symbol defined. ** ** See Also: [Using the SQLite Unlock Notification Feature]. ** -** Shared-cache locks are released when a database connection concludes +** ^Shared-cache locks are released when a database connection concludes ** its current transaction, either by committing it or rolling it back. ** -** When a connection (known as the blocked connection) fails to obtain a +** ^When a connection (known as the blocked connection) fails to obtain a ** shared-cache lock and SQLITE_LOCKED is returned to the caller, the ** identity of the database connection (the blocking connection) that -** has locked the required resource is stored internally. After an +** has locked the required resource is stored internally. ^After an ** application receives an SQLITE_LOCKED error, it may call the ** sqlite3_unlock_notify() method with the blocked connection handle as ** the first argument to register for a callback that will be invoked -** when the blocking connections current transaction is concluded. The +** when the blocking connections current transaction is concluded. ^The ** callback is invoked from within the [sqlite3_step] or [sqlite3_close] ** call that concludes the blocking connections transaction. ** -** If sqlite3_unlock_notify() is called in a multi-threaded application, +** ^(If sqlite3_unlock_notify() is called in a multi-threaded application, ** there is a chance that the blocking connection will have already ** concluded its transaction by the time sqlite3_unlock_notify() is invoked. ** If this happens, then the specified callback is invoked immediately, -** from within the call to sqlite3_unlock_notify(). +** from within the call to sqlite3_unlock_notify().)^ ** -** If the blocked connection is attempting to obtain a write-lock on a +** ^If the blocked connection is attempting to obtain a write-lock on a ** shared-cache table, and more than one other connection currently holds ** a read-lock on the same table, then SQLite arbitrarily selects one of ** the other connections to use as the blocking connection. ** -** There may be at most one unlock-notify callback registered by a +** ^(There may be at most one unlock-notify callback registered by a ** blocked connection. If sqlite3_unlock_notify() is called when the ** blocked connection already has a registered unlock-notify callback, -** then the new callback replaces the old. If sqlite3_unlock_notify() is +** then the new callback replaces the old.)^ ^If sqlite3_unlock_notify() is ** called with a NULL pointer as its second argument, then any existing -** unlock-notify callback is cancelled. The blocked connections +** unlock-notify callback is canceled. ^The blocked connections ** unlock-notify callback may also be canceled by closing the blocked ** connection using [sqlite3_close()]. ** @@ -6060,7 +7170,7 @@ SQLITE_API int sqlite3_backup_pagecount(sqlite3_backup *p); ** any sqlite3_xxx API functions from within an unlock-notify callback, a ** crash or deadlock may be the result. ** -** Unless deadlock is detected (see below), sqlite3_unlock_notify() always +** ^Unless deadlock is detected (see below), sqlite3_unlock_notify() always ** returns SQLITE_OK. ** ** Callback Invocation Details @@ -6074,7 +7184,7 @@ SQLITE_API int sqlite3_backup_pagecount(sqlite3_backup *p); ** ** When a blocking connections transaction is concluded, there may be ** more than one blocked connection that has registered for an unlock-notify -** callback. If two or more such blocked connections have specified the +** callback. ^If two or more such blocked connections have specified the ** same callback function, then instead of invoking the callback function ** multiple times, it is invoked once with the set of void* context pointers ** specified by the blocked connections bundled together into an array. @@ -6092,16 +7202,16 @@ SQLITE_API int sqlite3_backup_pagecount(sqlite3_backup *p); ** will proceed and the system may remain deadlocked indefinitely. ** ** To avoid this scenario, the sqlite3_unlock_notify() performs deadlock -** detection. If a given call to sqlite3_unlock_notify() would put the +** detection. ^If a given call to sqlite3_unlock_notify() would put the ** system in a deadlocked state, then SQLITE_LOCKED is returned and no ** unlock-notify callback is registered. The system is said to be in ** a deadlocked state if connection A has registered for an unlock-notify ** callback on the conclusion of connection B's transaction, and connection ** B has itself registered for an unlock-notify callback when connection -** A's transaction is concluded. Indirect deadlock is also detected, so +** A's transaction is concluded. ^Indirect deadlock is also detected, so ** the system is also considered to be deadlocked if connection B has ** registered for an unlock-notify callback on the conclusion of connection -** C's transaction, where connection C is waiting on connection A. Any +** C's transaction, where connection C is waiting on connection A. ^Any ** number of levels of indirection are allowed. ** ** The "DROP TABLE" Exception @@ -6117,10 +7227,10 @@ SQLITE_API int sqlite3_backup_pagecount(sqlite3_backup *p); ** or "DROP INDEX" query, an infinite loop might be the result. ** ** One way around this problem is to check the extended error code returned -** by an sqlite3_step() call. If there is a blocking connection, then the +** by an sqlite3_step() call. ^(If there is a blocking connection, then the ** extended error code is set to SQLITE_LOCKED_SHAREDCACHE. Otherwise, in ** the special "DROP TABLE/INDEX" case, the extended error code is just -** SQLITE_LOCKED. +** SQLITE_LOCKED.)^ */ SQLITE_API int sqlite3_unlock_notify( sqlite3 *pBlocked, /* Waiting connection */ @@ -6128,6 +7238,305 @@ SQLITE_API int sqlite3_unlock_notify( void *pNotifyArg /* Argument to pass to xNotify */ ); + +/* +** CAPI3REF: String Comparison +** +** ^The [sqlite3_stricmp()] and [sqlite3_strnicmp()] APIs allow applications +** and extensions to compare the contents of two buffers containing UTF-8 +** strings in a case-independent fashion, using the same definition of "case +** independence" that SQLite uses internally when comparing identifiers. +*/ +SQLITE_API int sqlite3_stricmp(const char *, const char *); +SQLITE_API int sqlite3_strnicmp(const char *, const char *, int); + +/* +** CAPI3REF: Error Logging Interface +** +** ^The [sqlite3_log()] interface writes a message into the error log +** established by the [SQLITE_CONFIG_LOG] option to [sqlite3_config()]. +** ^If logging is enabled, the zFormat string and subsequent arguments are +** used with [sqlite3_snprintf()] to generate the final output string. +** +** The sqlite3_log() interface is intended for use by extensions such as +** virtual tables, collating functions, and SQL functions. While there is +** nothing to prevent an application from calling sqlite3_log(), doing so +** is considered bad form. +** +** The zFormat string must not be NULL. +** +** To avoid deadlocks and other threading problems, the sqlite3_log() routine +** will not use dynamically allocated memory. The log message is stored in +** a fixed-length buffer on the stack. If the log message is longer than +** a few hundred characters, it will be truncated to the length of the +** buffer. +*/ +SQLITE_API void sqlite3_log(int iErrCode, const char *zFormat, ...); + +/* +** CAPI3REF: Write-Ahead Log Commit Hook +** +** ^The [sqlite3_wal_hook()] function is used to register a callback that +** will be invoked each time a database connection commits data to a +** [write-ahead log] (i.e. whenever a transaction is committed in +** [journal_mode | journal_mode=WAL mode]). +** +** ^The callback is invoked by SQLite after the commit has taken place and +** the associated write-lock on the database released, so the implementation +** may read, write or [checkpoint] the database as required. +** +** ^The first parameter passed to the callback function when it is invoked +** is a copy of the third parameter passed to sqlite3_wal_hook() when +** registering the callback. ^The second is a copy of the database handle. +** ^The third parameter is the name of the database that was written to - +** either "main" or the name of an [ATTACH]-ed database. ^The fourth parameter +** is the number of pages currently in the write-ahead log file, +** including those that were just committed. +** +** The callback function should normally return [SQLITE_OK]. ^If an error +** code is returned, that error will propagate back up through the +** SQLite code base to cause the statement that provoked the callback +** to report an error, though the commit will have still occurred. If the +** callback returns [SQLITE_ROW] or [SQLITE_DONE], or if it returns a value +** that does not correspond to any valid SQLite error code, the results +** are undefined. +** +** A single database handle may have at most a single write-ahead log callback +** registered at one time. ^Calling [sqlite3_wal_hook()] replaces any +** previously registered write-ahead log callback. ^Note that the +** [sqlite3_wal_autocheckpoint()] interface and the +** [wal_autocheckpoint pragma] both invoke [sqlite3_wal_hook()] and will +** those overwrite any prior [sqlite3_wal_hook()] settings. +*/ +SQLITE_API void *sqlite3_wal_hook( + sqlite3*, + int(*)(void *,sqlite3*,const char*,int), + void* +); + +/* +** CAPI3REF: Configure an auto-checkpoint +** +** ^The [sqlite3_wal_autocheckpoint(D,N)] is a wrapper around +** [sqlite3_wal_hook()] that causes any database on [database connection] D +** to automatically [checkpoint] +** after committing a transaction if there are N or +** more frames in the [write-ahead log] file. ^Passing zero or +** a negative value as the nFrame parameter disables automatic +** checkpoints entirely. +** +** ^The callback registered by this function replaces any existing callback +** registered using [sqlite3_wal_hook()]. ^Likewise, registering a callback +** using [sqlite3_wal_hook()] disables the automatic checkpoint mechanism +** configured by this function. +** +** ^The [wal_autocheckpoint pragma] can be used to invoke this interface +** from SQL. +** +** ^Every new [database connection] defaults to having the auto-checkpoint +** enabled with a threshold of 1000 or [SQLITE_DEFAULT_WAL_AUTOCHECKPOINT] +** pages. The use of this interface +** is only necessary if the default setting is found to be suboptimal +** for a particular application. +*/ +SQLITE_API int sqlite3_wal_autocheckpoint(sqlite3 *db, int N); + +/* +** CAPI3REF: Checkpoint a database +** +** ^The [sqlite3_wal_checkpoint(D,X)] interface causes database named X +** on [database connection] D to be [checkpointed]. ^If X is NULL or an +** empty string, then a checkpoint is run on all databases of +** connection D. ^If the database connection D is not in +** [WAL | write-ahead log mode] then this interface is a harmless no-op. +** +** ^The [wal_checkpoint pragma] can be used to invoke this interface +** from SQL. ^The [sqlite3_wal_autocheckpoint()] interface and the +** [wal_autocheckpoint pragma] can be used to cause this interface to be +** run whenever the WAL reaches a certain size threshold. +** +** See also: [sqlite3_wal_checkpoint_v2()] +*/ +SQLITE_API int sqlite3_wal_checkpoint(sqlite3 *db, const char *zDb); + +/* +** CAPI3REF: Checkpoint a database +** +** Run a checkpoint operation on WAL database zDb attached to database +** handle db. The specific operation is determined by the value of the +** eMode parameter: +** +**
    +**
    SQLITE_CHECKPOINT_PASSIVE
    +** Checkpoint as many frames as possible without waiting for any database +** readers or writers to finish. Sync the db file if all frames in the log +** are checkpointed. This mode is the same as calling +** sqlite3_wal_checkpoint(). The busy-handler callback is never invoked. +** +**
    SQLITE_CHECKPOINT_FULL
    +** This mode blocks (calls the busy-handler callback) until there is no +** database writer and all readers are reading from the most recent database +** snapshot. It then checkpoints all frames in the log file and syncs the +** database file. This call blocks database writers while it is running, +** but not database readers. +** +**
    SQLITE_CHECKPOINT_RESTART
    +** This mode works the same way as SQLITE_CHECKPOINT_FULL, except after +** checkpointing the log file it blocks (calls the busy-handler callback) +** until all readers are reading from the database file only. This ensures +** that the next client to write to the database file restarts the log file +** from the beginning. This call blocks database writers while it is running, +** but not database readers. +**
    +** +** If pnLog is not NULL, then *pnLog is set to the total number of frames in +** the log file before returning. If pnCkpt is not NULL, then *pnCkpt is set to +** the total number of checkpointed frames (including any that were already +** checkpointed when this function is called). *pnLog and *pnCkpt may be +** populated even if sqlite3_wal_checkpoint_v2() returns other than SQLITE_OK. +** If no values are available because of an error, they are both set to -1 +** before returning to communicate this to the caller. +** +** All calls obtain an exclusive "checkpoint" lock on the database file. If +** any other process is running a checkpoint operation at the same time, the +** lock cannot be obtained and SQLITE_BUSY is returned. Even if there is a +** busy-handler configured, it will not be invoked in this case. +** +** The SQLITE_CHECKPOINT_FULL and RESTART modes also obtain the exclusive +** "writer" lock on the database file. If the writer lock cannot be obtained +** immediately, and a busy-handler is configured, it is invoked and the writer +** lock retried until either the busy-handler returns 0 or the lock is +** successfully obtained. The busy-handler is also invoked while waiting for +** database readers as described above. If the busy-handler returns 0 before +** the writer lock is obtained or while waiting for database readers, the +** checkpoint operation proceeds from that point in the same way as +** SQLITE_CHECKPOINT_PASSIVE - checkpointing as many frames as possible +** without blocking any further. SQLITE_BUSY is returned in this case. +** +** If parameter zDb is NULL or points to a zero length string, then the +** specified operation is attempted on all WAL databases. In this case the +** values written to output parameters *pnLog and *pnCkpt are undefined. If +** an SQLITE_BUSY error is encountered when processing one or more of the +** attached WAL databases, the operation is still attempted on any remaining +** attached databases and SQLITE_BUSY is returned to the caller. If any other +** error occurs while processing an attached database, processing is abandoned +** and the error code returned to the caller immediately. If no error +** (SQLITE_BUSY or otherwise) is encountered while processing the attached +** databases, SQLITE_OK is returned. +** +** If database zDb is the name of an attached database that is not in WAL +** mode, SQLITE_OK is returned and both *pnLog and *pnCkpt set to -1. If +** zDb is not NULL (or a zero length string) and is not the name of any +** attached database, SQLITE_ERROR is returned to the caller. +*/ +SQLITE_API int sqlite3_wal_checkpoint_v2( + sqlite3 *db, /* Database handle */ + const char *zDb, /* Name of attached database (or NULL) */ + int eMode, /* SQLITE_CHECKPOINT_* value */ + int *pnLog, /* OUT: Size of WAL log in frames */ + int *pnCkpt /* OUT: Total number of frames checkpointed */ +); + +/* +** CAPI3REF: Checkpoint operation parameters +** +** These constants can be used as the 3rd parameter to +** [sqlite3_wal_checkpoint_v2()]. See the [sqlite3_wal_checkpoint_v2()] +** documentation for additional information about the meaning and use of +** each of these values. +*/ +#define SQLITE_CHECKPOINT_PASSIVE 0 +#define SQLITE_CHECKPOINT_FULL 1 +#define SQLITE_CHECKPOINT_RESTART 2 + +/* +** CAPI3REF: Virtual Table Interface Configuration +** +** This function may be called by either the [xConnect] or [xCreate] method +** of a [virtual table] implementation to configure +** various facets of the virtual table interface. +** +** If this interface is invoked outside the context of an xConnect or +** xCreate virtual table method then the behavior is undefined. +** +** At present, there is only one option that may be configured using +** this function. (See [SQLITE_VTAB_CONSTRAINT_SUPPORT].) Further options +** may be added in the future. +*/ +SQLITE_API int sqlite3_vtab_config(sqlite3*, int op, ...); + +/* +** CAPI3REF: Virtual Table Configuration Options +** +** These macros define the various options to the +** [sqlite3_vtab_config()] interface that [virtual table] implementations +** can use to customize and optimize their behavior. +** +**
    +**
    SQLITE_VTAB_CONSTRAINT_SUPPORT +**
    Calls of the form +** [sqlite3_vtab_config](db,SQLITE_VTAB_CONSTRAINT_SUPPORT,X) are supported, +** where X is an integer. If X is zero, then the [virtual table] whose +** [xCreate] or [xConnect] method invoked [sqlite3_vtab_config()] does not +** support constraints. In this configuration (which is the default) if +** a call to the [xUpdate] method returns [SQLITE_CONSTRAINT], then the entire +** statement is rolled back as if [ON CONFLICT | OR ABORT] had been +** specified as part of the users SQL statement, regardless of the actual +** ON CONFLICT mode specified. +** +** If X is non-zero, then the virtual table implementation guarantees +** that if [xUpdate] returns [SQLITE_CONSTRAINT], it will do so before +** any modifications to internal or persistent data structures have been made. +** If the [ON CONFLICT] mode is ABORT, FAIL, IGNORE or ROLLBACK, SQLite +** is able to roll back a statement or database transaction, and abandon +** or continue processing the current SQL statement as appropriate. +** If the ON CONFLICT mode is REPLACE and the [xUpdate] method returns +** [SQLITE_CONSTRAINT], SQLite handles this as if the ON CONFLICT mode +** had been ABORT. +** +** Virtual table implementations that are required to handle OR REPLACE +** must do so within the [xUpdate] method. If a call to the +** [sqlite3_vtab_on_conflict()] function indicates that the current ON +** CONFLICT policy is REPLACE, the virtual table implementation should +** silently replace the appropriate rows within the xUpdate callback and +** return SQLITE_OK. Or, if this is not possible, it may return +** SQLITE_CONSTRAINT, in which case SQLite falls back to OR ABORT +** constraint handling. +**
    +*/ +#define SQLITE_VTAB_CONSTRAINT_SUPPORT 1 + +/* +** CAPI3REF: Determine The Virtual Table Conflict Policy +** +** This function may only be called from within a call to the [xUpdate] method +** of a [virtual table] implementation for an INSERT or UPDATE operation. ^The +** value returned is one of [SQLITE_ROLLBACK], [SQLITE_IGNORE], [SQLITE_FAIL], +** [SQLITE_ABORT], or [SQLITE_REPLACE], according to the [ON CONFLICT] mode +** of the SQL statement that triggered the call to the [xUpdate] method of the +** [virtual table]. +*/ +SQLITE_API int sqlite3_vtab_on_conflict(sqlite3 *); + +/* +** CAPI3REF: Conflict resolution modes +** +** These constants are returned by [sqlite3_vtab_on_conflict()] to +** inform a [virtual table] implementation what the [ON CONFLICT] mode +** is for the SQL statement being evaluated. +** +** Note that the [SQLITE_IGNORE] constant is also used as a potential +** return value from the [sqlite3_set_authorizer()] callback and that +** [SQLITE_ABORT] is also a [result code]. +*/ +#define SQLITE_ROLLBACK 1 +/* #define SQLITE_IGNORE 2 // Also used by sqlite3_authorizer() callback */ +#define SQLITE_FAIL 3 +/* #define SQLITE_ABORT 4 // Also an error code */ +#define SQLITE_REPLACE 5 + + + /* ** Undo the hack that converts floating point types to integer for ** builds on processors without floating point support. @@ -6141,6 +7550,67 @@ SQLITE_API int sqlite3_unlock_notify( #endif #endif +/* +** 2010 August 30 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +*/ + +#ifndef _SQLITE3RTREE_H_ +#define _SQLITE3RTREE_H_ + + +#if 0 +extern "C" { +#endif + +typedef struct sqlite3_rtree_geometry sqlite3_rtree_geometry; + +/* +** Register a geometry callback named zGeom that can be used as part of an +** R-Tree geometry query as follows: +** +** SELECT ... FROM WHERE MATCH $zGeom(... params ...) +*/ +SQLITE_API int sqlite3_rtree_geometry_callback( + sqlite3 *db, + const char *zGeom, +#ifdef SQLITE_RTREE_INT_ONLY + int (*xGeom)(sqlite3_rtree_geometry*, int n, sqlite3_int64 *a, int *pRes), +#else + int (*xGeom)(sqlite3_rtree_geometry*, int n, double *a, int *pRes), +#endif + void *pContext +); + + +/* +** A pointer to a structure of the following type is passed as the first +** argument to callbacks registered using rtree_geometry_callback(). +*/ +struct sqlite3_rtree_geometry { + void *pContext; /* Copy of pContext passed to s_r_g_c() */ + int nParam; /* Size of array aParam[] */ + double *aParam; /* Parameters passed to SQL geom function */ + void *pUser; /* Callback implementation user data */ + void (*xDelUser)(void *); /* Called by SQLite to clean up pUser */ +}; + + +#if 0 +} /* end of the 'extern "C"' block */ +#endif + +#endif /* ifndef _SQLITE3RTREE_H_ */ + + /************** End of sqlite3.h *********************************************/ /************** Continuing where we left off in sqliteInt.h ******************/ /************** Include hash.h in the middle of sqliteInt.h ******************/ @@ -6158,8 +7628,6 @@ SQLITE_API int sqlite3_unlock_notify( ************************************************************************* ** This is the header file for the generic hash-table implemenation ** used in SQLite. -** -** $Id: hash.h,v 1.15 2009/05/02 13:29:38 drh Exp $ */ #ifndef _SQLITE_HASH_H_ #define _SQLITE_HASH_H_ @@ -6276,70 +7744,70 @@ SQLITE_PRIVATE void sqlite3HashClear(Hash*); #define TK_ID 26 #define TK_INDEXED 27 #define TK_ABORT 28 -#define TK_AFTER 29 -#define TK_ANALYZE 30 -#define TK_ASC 31 -#define TK_ATTACH 32 -#define TK_BEFORE 33 -#define TK_BY 34 -#define TK_CASCADE 35 -#define TK_CAST 36 -#define TK_COLUMNKW 37 -#define TK_CONFLICT 38 -#define TK_DATABASE 39 -#define TK_DESC 40 -#define TK_DETACH 41 -#define TK_EACH 42 -#define TK_FAIL 43 -#define TK_FOR 44 -#define TK_IGNORE 45 -#define TK_INITIALLY 46 -#define TK_INSTEAD 47 -#define TK_LIKE_KW 48 -#define TK_MATCH 49 -#define TK_KEY 50 -#define TK_OF 51 -#define TK_OFFSET 52 -#define TK_PRAGMA 53 -#define TK_RAISE 54 -#define TK_REPLACE 55 -#define TK_RESTRICT 56 -#define TK_ROW 57 -#define TK_TRIGGER 58 -#define TK_VACUUM 59 -#define TK_VIEW 60 -#define TK_VIRTUAL 61 -#define TK_REINDEX 62 -#define TK_RENAME 63 -#define TK_CTIME_KW 64 -#define TK_ANY 65 -#define TK_OR 66 -#define TK_AND 67 -#define TK_IS 68 -#define TK_BETWEEN 69 -#define TK_IN 70 -#define TK_ISNULL 71 -#define TK_NOTNULL 72 -#define TK_NE 73 -#define TK_EQ 74 -#define TK_GT 75 -#define TK_LE 76 -#define TK_LT 77 -#define TK_GE 78 -#define TK_ESCAPE 79 -#define TK_BITAND 80 -#define TK_BITOR 81 -#define TK_LSHIFT 82 -#define TK_RSHIFT 83 -#define TK_PLUS 84 -#define TK_MINUS 85 -#define TK_STAR 86 -#define TK_SLASH 87 -#define TK_REM 88 -#define TK_CONCAT 89 -#define TK_COLLATE 90 -#define TK_UMINUS 91 -#define TK_UPLUS 92 +#define TK_ACTION 29 +#define TK_AFTER 30 +#define TK_ANALYZE 31 +#define TK_ASC 32 +#define TK_ATTACH 33 +#define TK_BEFORE 34 +#define TK_BY 35 +#define TK_CASCADE 36 +#define TK_CAST 37 +#define TK_COLUMNKW 38 +#define TK_CONFLICT 39 +#define TK_DATABASE 40 +#define TK_DESC 41 +#define TK_DETACH 42 +#define TK_EACH 43 +#define TK_FAIL 44 +#define TK_FOR 45 +#define TK_IGNORE 46 +#define TK_INITIALLY 47 +#define TK_INSTEAD 48 +#define TK_LIKE_KW 49 +#define TK_MATCH 50 +#define TK_NO 51 +#define TK_KEY 52 +#define TK_OF 53 +#define TK_OFFSET 54 +#define TK_PRAGMA 55 +#define TK_RAISE 56 +#define TK_REPLACE 57 +#define TK_RESTRICT 58 +#define TK_ROW 59 +#define TK_TRIGGER 60 +#define TK_VACUUM 61 +#define TK_VIEW 62 +#define TK_VIRTUAL 63 +#define TK_REINDEX 64 +#define TK_RENAME 65 +#define TK_CTIME_KW 66 +#define TK_ANY 67 +#define TK_OR 68 +#define TK_AND 69 +#define TK_IS 70 +#define TK_BETWEEN 71 +#define TK_IN 72 +#define TK_ISNULL 73 +#define TK_NOTNULL 74 +#define TK_NE 75 +#define TK_EQ 76 +#define TK_GT 77 +#define TK_LE 78 +#define TK_LT 79 +#define TK_GE 80 +#define TK_ESCAPE 81 +#define TK_BITAND 82 +#define TK_BITOR 83 +#define TK_LSHIFT 84 +#define TK_RSHIFT 85 +#define TK_PLUS 86 +#define TK_MINUS 87 +#define TK_STAR 88 +#define TK_SLASH 89 +#define TK_REM 90 +#define TK_CONCAT 91 +#define TK_COLLATE 92 #define TK_BITNOT 93 #define TK_STRING 94 #define TK_JOIN_KW 95 @@ -6352,9 +7820,9 @@ SQLITE_PRIVATE void sqlite3HashClear(Hash*); #define TK_REFERENCES 102 #define TK_AUTOINCR 103 #define TK_ON 104 -#define TK_DELETE 105 -#define TK_UPDATE 106 -#define TK_INSERT 107 +#define TK_INSERT 105 +#define TK_DELETE 106 +#define TK_UPDATE 107 #define TK_SET 108 #define TK_DEFERRABLE 109 #define TK_FOREIGN 110 @@ -6393,15 +7861,18 @@ SQLITE_PRIVATE void sqlite3HashClear(Hash*); #define TK_TO_NUMERIC 143 #define TK_TO_INT 144 #define TK_TO_REAL 145 -#define TK_END_OF_FILE 146 -#define TK_ILLEGAL 147 -#define TK_SPACE 148 -#define TK_UNCLOSED_STRING 149 -#define TK_FUNCTION 150 -#define TK_COLUMN 151 -#define TK_AGG_FUNCTION 152 -#define TK_AGG_COLUMN 153 -#define TK_CONST_FUNC 154 +#define TK_ISNOT 146 +#define TK_END_OF_FILE 147 +#define TK_ILLEGAL 148 +#define TK_SPACE 149 +#define TK_UNCLOSED_STRING 150 +#define TK_FUNCTION 151 +#define TK_COLUMN 152 +#define TK_AGG_FUNCTION 153 +#define TK_AGG_COLUMN 154 +#define TK_CONST_FUNC 155 +#define TK_UMINUS 156 +#define TK_UPLUS 157 /************** End of parse.h ***********************************************/ /************** Continuing where we left off in sqliteInt.h ******************/ @@ -6417,9 +7888,10 @@ SQLITE_PRIVATE void sqlite3HashClear(Hash*); */ #ifdef SQLITE_OMIT_FLOATING_POINT # define double sqlite_int64 +# define float sqlite_int64 # define LONGDOUBLE_TYPE sqlite_int64 # ifndef SQLITE_BIG_DBL -# define SQLITE_BIG_DBL (((sqlite3_int64)1)<<60) +# define SQLITE_BIG_DBL (((sqlite3_int64)1)<<50) # endif # define SQLITE_OMIT_DATETIME_FUNCS 1 # define SQLITE_OMIT_TRACE 1 @@ -6441,20 +7913,6 @@ SQLITE_PRIVATE void sqlite3HashClear(Hash*); #define OMIT_TEMPDB 0 #endif -/* -** If the following macro is set to 1, then NULL values are considered -** distinct when determining whether or not two entries are the same -** in a UNIQUE index. This is the way PostgreSQL, Oracle, DB2, MySQL, -** OCELOT, and Firebird all work. The SQL92 spec explicitly says this -** is the way things are suppose to work. -** -** If the following macro is set to 0, the NULLs are indistinct for -** a UNIQUE index. In this mode, you can only have a single NULL entry -** for a column declared UNIQUE. This is the way Informix and SQL Server -** work. -*/ -#define NULL_DISTINCT_FOR_UNIQUE 1 - /* ** The "file format" number is an integer that is incremented whenever ** the VDBE-level file format changes. The following macros define the @@ -6463,7 +7921,15 @@ SQLITE_PRIVATE void sqlite3HashClear(Hash*); */ #define SQLITE_MAX_FILE_FORMAT 4 #ifndef SQLITE_DEFAULT_FILE_FORMAT -# define SQLITE_DEFAULT_FILE_FORMAT 1 +# define SQLITE_DEFAULT_FILE_FORMAT 4 +#endif + +/* +** Determine whether triggers are recursive by default. This can be +** changed at run-time using a pragma. +*/ +#ifndef SQLITE_DEFAULT_RECURSIVE_TRIGGERS +# define SQLITE_DEFAULT_RECURSIVE_TRIGGERS 0 #endif /* @@ -6553,6 +8019,18 @@ typedef INT8_TYPE i8; /* 1-byte signed integer */ */ #define SQLITE_MAX_U32 ((((u64)1)<<32)-1) +/* +** The datatype used to store estimates of the number of rows in a +** table or index. This is an unsigned integer type. For 99.9% of +** the world, a 32-bit integer is sufficient. But a 64-bit integer +** can be used at compile-time if desired. +*/ +#ifdef SQLITE_64BIT_STATS + typedef u64 tRowcnt; /* 64-bit only if requested at compile-time */ +#else + typedef u32 tRowcnt; /* 32-bit is the default */ +#endif + /* ** Macros to determine whether the machine is big or little endian, ** evaluated at runtime. @@ -6593,9 +8071,19 @@ SQLITE_PRIVATE const int sqlite3one; #define ROUNDDOWN8(x) ((x)&~7) /* -** Assert that the pointer X is aligned to an 8-byte boundary. +** Assert that the pointer X is aligned to an 8-byte boundary. This +** macro is used only within assert() to verify that the code gets +** all alignment restrictions correct. +** +** Except, if SQLITE_4_BYTE_ALIGNED_MALLOC is defined, then the +** underlying malloc() implemention might return us 4-byte aligned +** pointers. In that case, only verify 4-byte alignment. */ -#define EIGHT_BYTE_ALIGNMENT(X) ((((char*)(X) - (char*)0)&7)==0) +#ifdef SQLITE_4_BYTE_ALIGNED_MALLOC +# define EIGHT_BYTE_ALIGNMENT(X) ((((char*)(X) - (char*)0)&3)==0) +#else +# define EIGHT_BYTE_ALIGNMENT(X) ((((char*)(X) - (char*)0)&7)==0) +#endif /* @@ -6640,9 +8128,13 @@ struct BusyHandler { /* ** The following value as a destructor means to use sqlite3DbFree(). -** This is an internal extension to SQLITE_STATIC and SQLITE_TRANSIENT. +** The sqlite3DbFree() routine requires two parameters instead of the +** one parameter that destructors normally want. So we have to introduce +** this magic value that the code knows to handle differently. Any +** pointer will work here as long as it is distinct from SQLITE_STATIC +** and SQLITE_TRANSIENT. */ -#define SQLITE_DYNAMIC ((sqlite3_destructor_type)sqlite3DbFree) +#define SQLITE_DYNAMIC ((sqlite3_destructor_type)sqlite3MallocSize) /* ** When SQLITE_OMIT_WSD is defined, it means that the target platform does @@ -6696,7 +8188,6 @@ typedef struct AggInfo AggInfo; typedef struct AuthContext AuthContext; typedef struct AutoincInfo AutoincInfo; typedef struct Bitvec Bitvec; -typedef struct RowSet RowSet; typedef struct CollSeq CollSeq; typedef struct Column Column; typedef struct Db Db; @@ -6705,10 +8196,12 @@ typedef struct Expr Expr; typedef struct ExprList ExprList; typedef struct ExprSpan ExprSpan; typedef struct FKey FKey; +typedef struct FuncDestructor FuncDestructor; typedef struct FuncDef FuncDef; typedef struct FuncDefHash FuncDefHash; typedef struct IdList IdList; typedef struct Index Index; +typedef struct IndexSample IndexSample; typedef struct KeyClass KeyClass; typedef struct KeyInfo KeyInfo; typedef struct Lookaside Lookaside; @@ -6716,6 +8209,7 @@ typedef struct LookasideSlot LookasideSlot; typedef struct Module Module; typedef struct NameContext NameContext; typedef struct Parse Parse; +typedef struct RowSet RowSet; typedef struct Savepoint Savepoint; typedef struct Select Select; typedef struct SrcList SrcList; @@ -6723,10 +8217,12 @@ typedef struct StrAccum StrAccum; typedef struct Table Table; typedef struct TableLock TableLock; typedef struct Token Token; -typedef struct TriggerStack TriggerStack; -typedef struct TriggerStep TriggerStep; typedef struct Trigger Trigger; +typedef struct TriggerPrg TriggerPrg; +typedef struct TriggerStep TriggerStep; typedef struct UnpackedRecord UnpackedRecord; +typedef struct VTable VTable; +typedef struct VtabCtx VtabCtx; typedef struct Walker Walker; typedef struct WherePlan WherePlan; typedef struct WhereInfo WhereInfo; @@ -6753,8 +8249,6 @@ typedef struct WhereLevel WhereLevel; ** This header file defines the interface that the sqlite B-Tree file ** subsystem. See comments in the source code for a detailed description ** of what each interface routine does. -** -** @(#) $Id: btree.h,v 1.116 2009/06/03 11:25:07 danielk1977 Exp $ */ #ifndef _BTREE_H_ #define _BTREE_H_ @@ -6782,21 +8276,10 @@ typedef struct WhereLevel WhereLevel; typedef struct Btree Btree; typedef struct BtCursor BtCursor; typedef struct BtShared BtShared; -typedef struct BtreeMutexArray BtreeMutexArray; - -/* -** This structure records all of the Btrees that need to hold -** a mutex before we enter sqlite3VdbeExec(). The Btrees are -** are placed in aBtree[] in order of aBtree[]->pBt. That way, -** we can always lock and unlock them all quickly. -*/ -struct BtreeMutexArray { - int nMutex; - Btree *aBtree[SQLITE_MAX_ATTACHED+1]; -}; SQLITE_PRIVATE int sqlite3BtreeOpen( + sqlite3_vfs *pVfs, /* VFS to use with this b-tree */ const char *zFilename, /* Name of database file to open */ sqlite3 *db, /* Associated database connection */ Btree **ppBtree, /* Return open Btree* here */ @@ -6810,36 +8293,36 @@ SQLITE_PRIVATE int sqlite3BtreeOpen( ** NOTE: These values must match the corresponding PAGER_ values in ** pager.h. */ -#define BTREE_OMIT_JOURNAL 1 /* Do not use journal. No argument */ -#define BTREE_NO_READLOCK 2 /* Omit readlocks on readonly files */ -#define BTREE_MEMORY 4 /* In-memory DB. No argument */ -#define BTREE_READONLY 8 /* Open the database in read-only mode */ -#define BTREE_READWRITE 16 /* Open for both reading and writing */ -#define BTREE_CREATE 32 /* Create the database if it does not exist */ +#define BTREE_OMIT_JOURNAL 1 /* Do not create or use a rollback journal */ +#define BTREE_MEMORY 2 /* This is an in-memory DB */ +#define BTREE_SINGLE 4 /* The file contains at most 1 b-tree */ +#define BTREE_UNORDERED 8 /* Use of a hash implementation is OK */ SQLITE_PRIVATE int sqlite3BtreeClose(Btree*); SQLITE_PRIVATE int sqlite3BtreeSetCacheSize(Btree*,int); -SQLITE_PRIVATE int sqlite3BtreeSetSafetyLevel(Btree*,int,int); +SQLITE_PRIVATE int sqlite3BtreeSetSafetyLevel(Btree*,int,int,int); SQLITE_PRIVATE int sqlite3BtreeSyncDisabled(Btree*); SQLITE_PRIVATE int sqlite3BtreeSetPageSize(Btree *p, int nPagesize, int nReserve, int eFix); SQLITE_PRIVATE int sqlite3BtreeGetPageSize(Btree*); SQLITE_PRIVATE int sqlite3BtreeMaxPageCount(Btree*,int); +SQLITE_PRIVATE u32 sqlite3BtreeLastPage(Btree*); +SQLITE_PRIVATE int sqlite3BtreeSecureDelete(Btree*,int); SQLITE_PRIVATE int sqlite3BtreeGetReserve(Btree*); SQLITE_PRIVATE int sqlite3BtreeSetAutoVacuum(Btree *, int); SQLITE_PRIVATE int sqlite3BtreeGetAutoVacuum(Btree *); SQLITE_PRIVATE int sqlite3BtreeBeginTrans(Btree*,int); SQLITE_PRIVATE int sqlite3BtreeCommitPhaseOne(Btree*, const char *zMaster); -SQLITE_PRIVATE int sqlite3BtreeCommitPhaseTwo(Btree*); +SQLITE_PRIVATE int sqlite3BtreeCommitPhaseTwo(Btree*, int); SQLITE_PRIVATE int sqlite3BtreeCommit(Btree*); -SQLITE_PRIVATE int sqlite3BtreeRollback(Btree*); +SQLITE_PRIVATE int sqlite3BtreeRollback(Btree*,int); SQLITE_PRIVATE int sqlite3BtreeBeginStmt(Btree*,int); SQLITE_PRIVATE int sqlite3BtreeCreateTable(Btree*, int*, int flags); SQLITE_PRIVATE int sqlite3BtreeIsInTrans(Btree*); SQLITE_PRIVATE int sqlite3BtreeIsInReadTrans(Btree*); SQLITE_PRIVATE int sqlite3BtreeIsInBackup(Btree*); SQLITE_PRIVATE void *sqlite3BtreeSchema(Btree *, int, void(*)(void *)); -SQLITE_PRIVATE int sqlite3BtreeSchemaLocked(Btree *); -SQLITE_PRIVATE int sqlite3BtreeLockTable(Btree *, int, u8); +SQLITE_PRIVATE int sqlite3BtreeSchemaLocked(Btree *pBtree); +SQLITE_PRIVATE int sqlite3BtreeLockTable(Btree *pBtree, int iTab, u8 isWriteLock); SQLITE_PRIVATE int sqlite3BtreeSavepoint(Btree *, int, int); SQLITE_PRIVATE const char *sqlite3BtreeGetFilename(Btree *); @@ -6849,17 +8332,23 @@ SQLITE_PRIVATE int sqlite3BtreeCopyFile(Btree *, Btree *); SQLITE_PRIVATE int sqlite3BtreeIncrVacuum(Btree *); /* The flags parameter to sqlite3BtreeCreateTable can be the bitwise OR -** of the following flags: +** of the flags shown below. +** +** Every SQLite table must have either BTREE_INTKEY or BTREE_BLOBKEY set. +** With BTREE_INTKEY, the table key is a 64-bit integer and arbitrary data +** is stored in the leaves. (BTREE_INTKEY is used for SQL tables.) With +** BTREE_BLOBKEY, the key is an arbitrary BLOB and no content is stored +** anywhere - the key is the content. (BTREE_BLOBKEY is used for SQL +** indices.) */ #define BTREE_INTKEY 1 /* Table has only 64-bit signed integer keys */ -#define BTREE_ZERODATA 2 /* Table has keys only - no data */ -#define BTREE_LEAFDATA 4 /* Data stored in leaves only. Implies INTKEY */ +#define BTREE_BLOBKEY 2 /* Table has keys only - no data */ SQLITE_PRIVATE int sqlite3BtreeDropTable(Btree*, int, int*); SQLITE_PRIVATE int sqlite3BtreeClearTable(Btree*, int, int*); SQLITE_PRIVATE void sqlite3BtreeTripAllCursors(Btree*, int); -SQLITE_PRIVATE int sqlite3BtreeGetMeta(Btree*, int idx, u32 *pValue); +SQLITE_PRIVATE void sqlite3BtreeGetMeta(Btree *pBtree, int idx, u32 *pValue); SQLITE_PRIVATE int sqlite3BtreeUpdateMeta(Btree*, int idx, u32 value); /* @@ -6891,15 +8380,9 @@ SQLITE_PRIVATE int sqlite3BtreeCursor( BtCursor *pCursor /* Space to write cursor structure */ ); SQLITE_PRIVATE int sqlite3BtreeCursorSize(void); +SQLITE_PRIVATE void sqlite3BtreeCursorZero(BtCursor*); SQLITE_PRIVATE int sqlite3BtreeCloseCursor(BtCursor*); -SQLITE_PRIVATE int sqlite3BtreeMoveto( - BtCursor*, - const void *pKey, - i64 nKey, - int bias, - int *pRes -); SQLITE_PRIVATE int sqlite3BtreeMovetoUnpacked( BtCursor*, UnpackedRecord *pUnKey, @@ -6916,7 +8399,6 @@ SQLITE_PRIVATE int sqlite3BtreeFirst(BtCursor*, int *pRes); SQLITE_PRIVATE int sqlite3BtreeLast(BtCursor*, int *pRes); SQLITE_PRIVATE int sqlite3BtreeNext(BtCursor*, int *pRes); SQLITE_PRIVATE int sqlite3BtreeEof(BtCursor*); -SQLITE_PRIVATE int sqlite3BtreeFlags(BtCursor*); SQLITE_PRIVATE int sqlite3BtreePrevious(BtCursor*, int *pRes); SQLITE_PRIVATE int sqlite3BtreeKeySize(BtCursor*, i64 *pSize); SQLITE_PRIVATE int sqlite3BtreeKey(BtCursor*, u32 offset, u32 amt, void*); @@ -6934,6 +8416,12 @@ SQLITE_PRIVATE int sqlite3BtreePutData(BtCursor*, u32 offset, u32 amt, void*); SQLITE_PRIVATE void sqlite3BtreeCacheOverflow(BtCursor *); SQLITE_PRIVATE void sqlite3BtreeClearCursor(BtCursor *); +SQLITE_PRIVATE int sqlite3BtreeSetVersion(Btree *pBt, int iVersion); + +#ifndef NDEBUG +SQLITE_PRIVATE int sqlite3BtreeCursorIsValid(BtCursor*); +#endif + #ifndef SQLITE_OMIT_BTREECOUNT SQLITE_PRIVATE int sqlite3BtreeCount(BtCursor *, i64 *); #endif @@ -6943,6 +8431,10 @@ SQLITE_PRIVATE int sqlite3BtreeCursorInfo(BtCursor*, int*, int); SQLITE_PRIVATE void sqlite3BtreeCursorList(Btree*); #endif +#ifndef SQLITE_OMIT_WAL +SQLITE_PRIVATE int sqlite3BtreeCheckpoint(Btree*, int, int *, int *); +#endif + /* ** If we are not using shared cache, then there is no need to ** use mutexes to access the BtShared structures. So make the @@ -6957,30 +8449,28 @@ SQLITE_PRIVATE void sqlite3BtreeEnterAll(sqlite3*); #endif #if !defined(SQLITE_OMIT_SHARED_CACHE) && SQLITE_THREADSAFE +SQLITE_PRIVATE int sqlite3BtreeSharable(Btree*); SQLITE_PRIVATE void sqlite3BtreeLeave(Btree*); SQLITE_PRIVATE void sqlite3BtreeEnterCursor(BtCursor*); SQLITE_PRIVATE void sqlite3BtreeLeaveCursor(BtCursor*); SQLITE_PRIVATE void sqlite3BtreeLeaveAll(sqlite3*); -SQLITE_PRIVATE void sqlite3BtreeMutexArrayEnter(BtreeMutexArray*); -SQLITE_PRIVATE void sqlite3BtreeMutexArrayLeave(BtreeMutexArray*); -SQLITE_PRIVATE void sqlite3BtreeMutexArrayInsert(BtreeMutexArray*, Btree*); #ifndef NDEBUG /* These routines are used inside assert() statements only. */ SQLITE_PRIVATE int sqlite3BtreeHoldsMutex(Btree*); SQLITE_PRIVATE int sqlite3BtreeHoldsAllMutexes(sqlite3*); +SQLITE_PRIVATE int sqlite3SchemaMutexHeld(sqlite3*,int,Schema*); #endif #else +# define sqlite3BtreeSharable(X) 0 # define sqlite3BtreeLeave(X) # define sqlite3BtreeEnterCursor(X) # define sqlite3BtreeLeaveCursor(X) # define sqlite3BtreeLeaveAll(X) -# define sqlite3BtreeMutexArrayEnter(X) -# define sqlite3BtreeMutexArrayLeave(X) -# define sqlite3BtreeMutexArrayInsert(X,Y) # define sqlite3BtreeHoldsMutex(X) 1 # define sqlite3BtreeHoldsAllMutexes(X) 1 +# define sqlite3SchemaMutexHeld(X,Y,Z) 1 #endif @@ -7006,11 +8496,10 @@ SQLITE_PRIVATE int sqlite3BtreeHoldsAllMutexes(sqlite3*); ** This header defines the interface to the virtual database engine ** or VDBE. The VDBE implements an abstract machine that runs a ** simple program to access and modify the underlying database. -** -** $Id: vdbe.h,v 1.141 2009/04/10 00:56:29 drh Exp $ */ #ifndef _SQLITE_VDBE_H_ #define _SQLITE_VDBE_H_ +/* #include */ /* ** A single VDBE is an opaque structure named "Vdbe". Only routines @@ -7025,6 +8514,7 @@ typedef struct Vdbe Vdbe; */ typedef struct VdbeFunc VdbeFunc; typedef struct Mem Mem; +typedef struct SubProgram SubProgram; /* ** A single instruction of the virtual machine has an opcode @@ -7034,12 +8524,12 @@ typedef struct Mem Mem; struct VdbeOp { u8 opcode; /* What operation to perform */ signed char p4type; /* One of the P4_xxx constants for p4 */ - u8 opflags; /* Not currently used */ + u8 opflags; /* Mask of the OPFLG_* flags in opcodes.h */ u8 p5; /* Fifth parameter is an unsigned character */ int p1; /* First operand */ int p2; /* Second parameter (often the jump destination) */ int p3; /* The third parameter */ - union { /* forth parameter */ + union { /* fourth parameter */ int i; /* Integer value if p4type==P4_INT32 */ void *p; /* Generic pointer */ char *z; /* Pointer to data for string (char array) types */ @@ -7049,9 +8539,11 @@ struct VdbeOp { VdbeFunc *pVdbeFunc; /* Used when p4type is P4_VDBEFUNC */ CollSeq *pColl; /* Used when p4type is P4_COLLSEQ */ Mem *pMem; /* Used when p4type is P4_MEM */ - sqlite3_vtab *pVtab; /* Used when p4type is P4_VTAB */ + VTable *pVtab; /* Used when p4type is P4_VTAB */ KeyInfo *pKeyInfo; /* Used when p4type is P4_KEYINFO */ int *ai; /* Used when p4type is P4_INTARRAY */ + SubProgram *pProgram; /* Used when p4type is P4_SUBPROGRAM */ + int (*xAdvance)(BtCursor *, int *); } p4; #ifdef SQLITE_DEBUG char *zComment; /* Comment to improve readability */ @@ -7063,6 +8555,20 @@ struct VdbeOp { }; typedef struct VdbeOp VdbeOp; + +/* +** A sub-routine used to implement a trigger program. +*/ +struct SubProgram { + VdbeOp *aOp; /* Array of opcodes for sub-program */ + int nOp; /* Elements in aOp[] */ + int nMem; /* Number of memory cells required */ + int nCsr; /* Number of cursors required */ + int nOnce; /* Number of OP_Once instructions */ + void *token; /* id that may be used to recursive triggers */ + SubProgram *pNext; /* Next sub-program already visited */ +}; + /* ** A smaller version of VdbeOp used for the VdbeAddOpList() function because ** it takes up less space. @@ -7076,7 +8582,7 @@ struct VdbeOpList { typedef struct VdbeOpList VdbeOpList; /* -** Allowed values of VdbeOp.p3type +** Allowed values of VdbeOp.p4type */ #define P4_NOTUSED 0 /* The P4 parameter is not used */ #define P4_DYNAMIC (-1) /* Pointer to a string obtained from sqliteMalloc() */ @@ -7086,13 +8592,15 @@ typedef struct VdbeOpList VdbeOpList; #define P4_KEYINFO (-6) /* P4 is a pointer to a KeyInfo structure */ #define P4_VDBEFUNC (-7) /* P4 is a pointer to a VdbeFunc structure */ #define P4_MEM (-8) /* P4 is a pointer to a Mem* structure */ -#define P4_TRANSIENT (-9) /* P4 is a pointer to a transient string */ +#define P4_TRANSIENT 0 /* P4 is a pointer to a transient string */ #define P4_VTAB (-10) /* P4 is a pointer to an sqlite3_vtab structure */ #define P4_MPRINTF (-11) /* P4 is a string obtained from sqlite3_mprintf() */ #define P4_REAL (-12) /* P4 is a 64-bit floating point value */ #define P4_INT64 (-13) /* P4 is a 64-bit signed integer */ #define P4_INT32 (-14) /* P4 is a 32-bit signed integer */ #define P4_INTARRAY (-15) /* P4 is a vector of 32-bit integers */ +#define P4_SUBPROGRAM (-18) /* P4 is a pointer to a SubProgram structure */ +#define P4_ADVANCE (-19) /* P4 is a pointer to BtreeNext() or BtreePrev() */ /* When adding a P4 argument using P4_KEYINFO, a copy of the KeyInfo structure ** is made. That copy is freed when the Vdbe is finalized. But if the @@ -7139,153 +8647,156 @@ typedef struct VdbeOpList VdbeOpList; /************** Begin file opcodes.h *****************************************/ /* Automatically generated. Do not edit */ /* See the mkopcodeh.awk script for details */ -#define OP_VNext 1 -#define OP_Affinity 2 -#define OP_Column 3 -#define OP_SetCookie 4 -#define OP_Seek 5 +#define OP_Goto 1 +#define OP_Gosub 2 +#define OP_Return 3 +#define OP_Yield 4 +#define OP_HaltIfNull 5 +#define OP_Halt 6 +#define OP_Integer 7 +#define OP_Int64 8 #define OP_Real 130 /* same as TK_FLOAT */ -#define OP_Sequence 6 -#define OP_Savepoint 7 -#define OP_Ge 78 /* same as TK_GE */ -#define OP_RowKey 8 -#define OP_SCopy 9 -#define OP_Eq 74 /* same as TK_EQ */ -#define OP_OpenWrite 10 -#define OP_NotNull 72 /* same as TK_NOTNULL */ -#define OP_If 11 -#define OP_ToInt 144 /* same as TK_TO_INT */ #define OP_String8 94 /* same as TK_STRING */ -#define OP_CollSeq 12 -#define OP_OpenRead 13 -#define OP_Expire 14 -#define OP_AutoCommit 15 -#define OP_Gt 75 /* same as TK_GT */ -#define OP_Pagecount 16 -#define OP_IntegrityCk 17 -#define OP_Sort 18 -#define OP_Copy 20 -#define OP_Trace 21 -#define OP_Function 22 -#define OP_IfNeg 23 -#define OP_And 67 /* same as TK_AND */ -#define OP_Subtract 85 /* same as TK_MINUS */ -#define OP_Noop 24 -#define OP_Return 25 -#define OP_Remainder 88 /* same as TK_REM */ -#define OP_NewRowid 26 -#define OP_Multiply 86 /* same as TK_STAR */ -#define OP_Variable 27 -#define OP_String 28 -#define OP_RealAffinity 29 -#define OP_VRename 30 -#define OP_ParseSchema 31 -#define OP_VOpen 32 -#define OP_Close 33 -#define OP_CreateIndex 34 -#define OP_IsUnique 35 -#define OP_NotFound 36 -#define OP_Int64 37 -#define OP_MustBeInt 38 -#define OP_Halt 39 -#define OP_Rowid 40 -#define OP_IdxLT 41 -#define OP_AddImm 42 -#define OP_Statement 43 -#define OP_RowData 44 -#define OP_MemMax 45 -#define OP_Or 66 /* same as TK_OR */ -#define OP_NotExists 46 -#define OP_Gosub 47 -#define OP_Divide 87 /* same as TK_SLASH */ -#define OP_Integer 48 -#define OP_ToNumeric 143 /* same as TK_TO_NUMERIC*/ -#define OP_Prev 49 -#define OP_RowSetRead 50 -#define OP_Concat 89 /* same as TK_CONCAT */ -#define OP_RowSetAdd 51 -#define OP_BitAnd 80 /* same as TK_BITAND */ -#define OP_VColumn 52 -#define OP_CreateTable 53 -#define OP_Last 54 -#define OP_SeekLe 55 -#define OP_IsNull 71 /* same as TK_ISNULL */ -#define OP_IncrVacuum 56 -#define OP_IdxRowid 57 -#define OP_ShiftRight 83 /* same as TK_RSHIFT */ -#define OP_ResetCount 58 -#define OP_ContextPush 59 -#define OP_Yield 60 -#define OP_DropTrigger 61 -#define OP_DropIndex 62 -#define OP_IdxGE 63 -#define OP_IdxDelete 64 -#define OP_Vacuum 65 -#define OP_IfNot 68 -#define OP_DropTable 69 -#define OP_SeekLt 70 -#define OP_MakeRecord 79 -#define OP_ToBlob 142 /* same as TK_TO_BLOB */ -#define OP_ResultRow 90 -#define OP_Delete 91 -#define OP_AggFinal 92 -#define OP_Compare 95 -#define OP_ShiftLeft 82 /* same as TK_LSHIFT */ -#define OP_Goto 96 -#define OP_TableLock 97 -#define OP_Clear 98 -#define OP_Le 76 /* same as TK_LE */ -#define OP_VerifyCookie 99 -#define OP_AggStep 100 +#define OP_String 9 +#define OP_Null 10 +#define OP_Blob 11 +#define OP_Variable 12 +#define OP_Move 13 +#define OP_Copy 14 +#define OP_SCopy 15 +#define OP_ResultRow 16 +#define OP_Concat 91 /* same as TK_CONCAT */ +#define OP_Add 86 /* same as TK_PLUS */ +#define OP_Subtract 87 /* same as TK_MINUS */ +#define OP_Multiply 88 /* same as TK_STAR */ +#define OP_Divide 89 /* same as TK_SLASH */ +#define OP_Remainder 90 /* same as TK_REM */ +#define OP_CollSeq 17 +#define OP_Function 18 +#define OP_BitAnd 82 /* same as TK_BITAND */ +#define OP_BitOr 83 /* same as TK_BITOR */ +#define OP_ShiftLeft 84 /* same as TK_LSHIFT */ +#define OP_ShiftRight 85 /* same as TK_RSHIFT */ +#define OP_AddImm 20 +#define OP_MustBeInt 21 +#define OP_RealAffinity 22 #define OP_ToText 141 /* same as TK_TO_TEXT */ -#define OP_Not 19 /* same as TK_NOT */ +#define OP_ToBlob 142 /* same as TK_TO_BLOB */ +#define OP_ToNumeric 143 /* same as TK_TO_NUMERIC*/ +#define OP_ToInt 144 /* same as TK_TO_INT */ #define OP_ToReal 145 /* same as TK_TO_REAL */ -#define OP_SetNumColumns 101 -#define OP_Transaction 102 -#define OP_VFilter 103 -#define OP_Ne 73 /* same as TK_NE */ -#define OP_VDestroy 104 -#define OP_ContextPop 105 -#define OP_BitOr 81 /* same as TK_BITOR */ -#define OP_Next 106 -#define OP_Count 107 -#define OP_IdxInsert 108 -#define OP_Lt 77 /* same as TK_LT */ -#define OP_SeekGe 109 -#define OP_Insert 110 -#define OP_Destroy 111 -#define OP_ReadCookie 112 -#define OP_RowSetTest 113 -#define OP_LoadAnalysis 114 -#define OP_Explain 115 -#define OP_HaltIfNull 116 -#define OP_OpenPseudo 117 -#define OP_OpenEphemeral 118 -#define OP_Null 119 -#define OP_Move 120 -#define OP_Blob 121 -#define OP_Add 84 /* same as TK_PLUS */ -#define OP_Rewind 122 -#define OP_SeekGt 123 -#define OP_VBegin 124 -#define OP_VUpdate 125 -#define OP_IfZero 126 +#define OP_Eq 76 /* same as TK_EQ */ +#define OP_Ne 75 /* same as TK_NE */ +#define OP_Lt 79 /* same as TK_LT */ +#define OP_Le 78 /* same as TK_LE */ +#define OP_Gt 77 /* same as TK_GT */ +#define OP_Ge 80 /* same as TK_GE */ +#define OP_Permutation 23 +#define OP_Compare 24 +#define OP_Jump 25 +#define OP_And 69 /* same as TK_AND */ +#define OP_Or 68 /* same as TK_OR */ +#define OP_Not 19 /* same as TK_NOT */ #define OP_BitNot 93 /* same as TK_BITNOT */ -#define OP_VCreate 127 -#define OP_Found 128 -#define OP_IfPos 129 -#define OP_NullRow 131 -#define OP_Jump 132 -#define OP_Permutation 133 - -/* The following opcode values are never used */ -#define OP_NotUsed_134 134 -#define OP_NotUsed_135 135 -#define OP_NotUsed_136 136 -#define OP_NotUsed_137 137 -#define OP_NotUsed_138 138 -#define OP_NotUsed_139 139 -#define OP_NotUsed_140 140 +#define OP_Once 26 +#define OP_If 27 +#define OP_IfNot 28 +#define OP_IsNull 73 /* same as TK_ISNULL */ +#define OP_NotNull 74 /* same as TK_NOTNULL */ +#define OP_Column 29 +#define OP_Affinity 30 +#define OP_MakeRecord 31 +#define OP_Count 32 +#define OP_Savepoint 33 +#define OP_AutoCommit 34 +#define OP_Transaction 35 +#define OP_ReadCookie 36 +#define OP_SetCookie 37 +#define OP_VerifyCookie 38 +#define OP_OpenRead 39 +#define OP_OpenWrite 40 +#define OP_OpenAutoindex 41 +#define OP_OpenEphemeral 42 +#define OP_SorterOpen 43 +#define OP_OpenPseudo 44 +#define OP_Close 45 +#define OP_SeekLt 46 +#define OP_SeekLe 47 +#define OP_SeekGe 48 +#define OP_SeekGt 49 +#define OP_Seek 50 +#define OP_NotFound 51 +#define OP_Found 52 +#define OP_IsUnique 53 +#define OP_NotExists 54 +#define OP_Sequence 55 +#define OP_NewRowid 56 +#define OP_Insert 57 +#define OP_InsertInt 58 +#define OP_Delete 59 +#define OP_ResetCount 60 +#define OP_SorterCompare 61 +#define OP_SorterData 62 +#define OP_RowKey 63 +#define OP_RowData 64 +#define OP_Rowid 65 +#define OP_NullRow 66 +#define OP_Last 67 +#define OP_SorterSort 70 +#define OP_Sort 71 +#define OP_Rewind 72 +#define OP_SorterNext 81 +#define OP_Prev 92 +#define OP_Next 95 +#define OP_SorterInsert 96 +#define OP_IdxInsert 97 +#define OP_IdxDelete 98 +#define OP_IdxRowid 99 +#define OP_IdxLT 100 +#define OP_IdxGE 101 +#define OP_Destroy 102 +#define OP_Clear 103 +#define OP_CreateIndex 104 +#define OP_CreateTable 105 +#define OP_ParseSchema 106 +#define OP_LoadAnalysis 107 +#define OP_DropTable 108 +#define OP_DropIndex 109 +#define OP_DropTrigger 110 +#define OP_IntegrityCk 111 +#define OP_RowSetAdd 112 +#define OP_RowSetRead 113 +#define OP_RowSetTest 114 +#define OP_Program 115 +#define OP_Param 116 +#define OP_FkCounter 117 +#define OP_FkIfZero 118 +#define OP_MemMax 119 +#define OP_IfPos 120 +#define OP_IfNeg 121 +#define OP_IfZero 122 +#define OP_AggStep 123 +#define OP_AggFinal 124 +#define OP_Checkpoint 125 +#define OP_JournalMode 126 +#define OP_Vacuum 127 +#define OP_IncrVacuum 128 +#define OP_Expire 129 +#define OP_TableLock 131 +#define OP_VBegin 132 +#define OP_VCreate 133 +#define OP_VDestroy 134 +#define OP_VOpen 135 +#define OP_VFilter 136 +#define OP_VColumn 137 +#define OP_VNext 138 +#define OP_VRename 139 +#define OP_VUpdate 140 +#define OP_Pagecount 146 +#define OP_MaxPgcnt 147 +#define OP_Trace 148 +#define OP_Noop 149 +#define OP_Explain 150 /* Properties such as "out2" or "jump" that are specified in @@ -7297,27 +8808,28 @@ typedef struct VdbeOpList VdbeOpList; #define OPFLG_IN1 0x0004 /* in1: P1 is an input */ #define OPFLG_IN2 0x0008 /* in2: P2 is an input */ #define OPFLG_IN3 0x0010 /* in3: P3 is an input */ -#define OPFLG_OUT3 0x0020 /* out3: P3 is an output */ +#define OPFLG_OUT2 0x0020 /* out2: P2 is an output */ +#define OPFLG_OUT3 0x0040 /* out3: P3 is an output */ #define OPFLG_INITIALIZER {\ -/* 0 */ 0x00, 0x01, 0x00, 0x00, 0x10, 0x08, 0x02, 0x00,\ -/* 8 */ 0x00, 0x04, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00,\ -/* 16 */ 0x02, 0x00, 0x01, 0x04, 0x04, 0x00, 0x00, 0x05,\ -/* 24 */ 0x00, 0x04, 0x02, 0x00, 0x02, 0x04, 0x00, 0x00,\ -/* 32 */ 0x00, 0x00, 0x02, 0x11, 0x11, 0x02, 0x05, 0x00,\ -/* 40 */ 0x02, 0x11, 0x04, 0x00, 0x00, 0x0c, 0x11, 0x01,\ -/* 48 */ 0x02, 0x01, 0x21, 0x08, 0x00, 0x02, 0x01, 0x11,\ -/* 56 */ 0x01, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x11,\ -/* 64 */ 0x00, 0x00, 0x2c, 0x2c, 0x05, 0x00, 0x11, 0x05,\ -/* 72 */ 0x05, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x00,\ -/* 80 */ 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,\ -/* 88 */ 0x2c, 0x2c, 0x00, 0x00, 0x00, 0x04, 0x02, 0x00,\ -/* 96 */ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,\ -/* 104 */ 0x00, 0x00, 0x01, 0x02, 0x08, 0x11, 0x00, 0x02,\ -/* 112 */ 0x02, 0x15, 0x00, 0x00, 0x10, 0x00, 0x00, 0x02,\ -/* 120 */ 0x00, 0x02, 0x01, 0x11, 0x00, 0x00, 0x05, 0x00,\ -/* 128 */ 0x11, 0x05, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00,\ -/* 136 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x04,\ -/* 144 */ 0x04, 0x04,} +/* 0 */ 0x00, 0x01, 0x01, 0x04, 0x04, 0x10, 0x00, 0x02,\ +/* 8 */ 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x24, 0x24,\ +/* 16 */ 0x00, 0x00, 0x00, 0x24, 0x04, 0x05, 0x04, 0x00,\ +/* 24 */ 0x00, 0x01, 0x01, 0x05, 0x05, 0x00, 0x00, 0x00,\ +/* 32 */ 0x02, 0x00, 0x00, 0x00, 0x02, 0x10, 0x00, 0x00,\ +/* 40 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11,\ +/* 48 */ 0x11, 0x11, 0x08, 0x11, 0x11, 0x11, 0x11, 0x02,\ +/* 56 */ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\ +/* 64 */ 0x00, 0x02, 0x00, 0x01, 0x4c, 0x4c, 0x01, 0x01,\ +/* 72 */ 0x01, 0x05, 0x05, 0x15, 0x15, 0x15, 0x15, 0x15,\ +/* 80 */ 0x15, 0x01, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c,\ +/* 88 */ 0x4c, 0x4c, 0x4c, 0x4c, 0x01, 0x24, 0x02, 0x01,\ +/* 96 */ 0x08, 0x08, 0x00, 0x02, 0x01, 0x01, 0x02, 0x00,\ +/* 104 */ 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\ +/* 112 */ 0x0c, 0x45, 0x15, 0x01, 0x02, 0x00, 0x01, 0x08,\ +/* 120 */ 0x05, 0x05, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00,\ +/* 128 */ 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,\ +/* 136 */ 0x01, 0x00, 0x01, 0x00, 0x00, 0x04, 0x04, 0x04,\ +/* 144 */ 0x04, 0x04, 0x02, 0x02, 0x00, 0x00, 0x00,} /************** End of opcodes.h *********************************************/ /************** Continuing where we left off in vdbe.h ***********************/ @@ -7332,26 +8844,32 @@ SQLITE_PRIVATE int sqlite3VdbeAddOp1(Vdbe*,int,int); SQLITE_PRIVATE int sqlite3VdbeAddOp2(Vdbe*,int,int,int); SQLITE_PRIVATE int sqlite3VdbeAddOp3(Vdbe*,int,int,int,int); SQLITE_PRIVATE int sqlite3VdbeAddOp4(Vdbe*,int,int,int,int,const char *zP4,int); +SQLITE_PRIVATE int sqlite3VdbeAddOp4Int(Vdbe*,int,int,int,int,int); SQLITE_PRIVATE int sqlite3VdbeAddOpList(Vdbe*, int nOp, VdbeOpList const *aOp); -SQLITE_PRIVATE void sqlite3VdbeChangeP1(Vdbe*, int addr, int P1); -SQLITE_PRIVATE void sqlite3VdbeChangeP2(Vdbe*, int addr, int P2); -SQLITE_PRIVATE void sqlite3VdbeChangeP3(Vdbe*, int addr, int P3); +SQLITE_PRIVATE void sqlite3VdbeAddParseSchemaOp(Vdbe*,int,char*); +SQLITE_PRIVATE void sqlite3VdbeChangeP1(Vdbe*, u32 addr, int P1); +SQLITE_PRIVATE void sqlite3VdbeChangeP2(Vdbe*, u32 addr, int P2); +SQLITE_PRIVATE void sqlite3VdbeChangeP3(Vdbe*, u32 addr, int P3); SQLITE_PRIVATE void sqlite3VdbeChangeP5(Vdbe*, u8 P5); SQLITE_PRIVATE void sqlite3VdbeJumpHere(Vdbe*, int addr); -SQLITE_PRIVATE void sqlite3VdbeChangeToNoop(Vdbe*, int addr, int N); +SQLITE_PRIVATE void sqlite3VdbeChangeToNoop(Vdbe*, int addr); SQLITE_PRIVATE void sqlite3VdbeChangeP4(Vdbe*, int addr, const char *zP4, int N); SQLITE_PRIVATE void sqlite3VdbeUsesBtree(Vdbe*, int); SQLITE_PRIVATE VdbeOp *sqlite3VdbeGetOp(Vdbe*, int); SQLITE_PRIVATE int sqlite3VdbeMakeLabel(Vdbe*); +SQLITE_PRIVATE void sqlite3VdbeRunOnlyOnce(Vdbe*); SQLITE_PRIVATE void sqlite3VdbeDelete(Vdbe*); -SQLITE_PRIVATE void sqlite3VdbeMakeReady(Vdbe*,int,int,int,int); +SQLITE_PRIVATE void sqlite3VdbeDeleteObject(sqlite3*,Vdbe*); +SQLITE_PRIVATE void sqlite3VdbeMakeReady(Vdbe*,Parse*); SQLITE_PRIVATE int sqlite3VdbeFinalize(Vdbe*); SQLITE_PRIVATE void sqlite3VdbeResolveLabel(Vdbe*, int); SQLITE_PRIVATE int sqlite3VdbeCurrentAddr(Vdbe*); #ifdef SQLITE_DEBUG +SQLITE_PRIVATE int sqlite3VdbeAssertMayAbort(Vdbe *, int); SQLITE_PRIVATE void sqlite3VdbeTrace(Vdbe*,FILE*); #endif SQLITE_PRIVATE void sqlite3VdbeResetStepResult(Vdbe*); +SQLITE_PRIVATE void sqlite3VdbeRewind(Vdbe*); SQLITE_PRIVATE int sqlite3VdbeReset(Vdbe*); SQLITE_PRIVATE void sqlite3VdbeSetNumCols(Vdbe*,int); SQLITE_PRIVATE int sqlite3VdbeSetColName(Vdbe*, int, int, const char *, void(*)(void*)); @@ -7359,13 +8877,20 @@ SQLITE_PRIVATE void sqlite3VdbeCountChanges(Vdbe*); SQLITE_PRIVATE sqlite3 *sqlite3VdbeDb(Vdbe*); SQLITE_PRIVATE void sqlite3VdbeSetSql(Vdbe*, const char *z, int n, int); SQLITE_PRIVATE void sqlite3VdbeSwap(Vdbe*,Vdbe*); - -#ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT -SQLITE_PRIVATE int sqlite3VdbeReleaseMemory(int); +SQLITE_PRIVATE VdbeOp *sqlite3VdbeTakeOpArray(Vdbe*, int*, int*); +SQLITE_PRIVATE sqlite3_value *sqlite3VdbeGetValue(Vdbe*, int, u8); +SQLITE_PRIVATE void sqlite3VdbeSetVarmask(Vdbe*, int); +#ifndef SQLITE_OMIT_TRACE +SQLITE_PRIVATE char *sqlite3VdbeExpandSql(Vdbe*, const char*); #endif -SQLITE_PRIVATE UnpackedRecord *sqlite3VdbeRecordUnpack(KeyInfo*,int,const void*,char*,int); -SQLITE_PRIVATE void sqlite3VdbeDeleteUnpackedRecord(UnpackedRecord*); + +SQLITE_PRIVATE void sqlite3VdbeRecordUnpack(KeyInfo*,int,const void*,UnpackedRecord*); SQLITE_PRIVATE int sqlite3VdbeRecordCompare(int,const void*,UnpackedRecord*); +SQLITE_PRIVATE UnpackedRecord *sqlite3VdbeAllocUnpackedRecord(KeyInfo *, char *, int, char **); + +#ifndef SQLITE_OMIT_TRIGGER +SQLITE_PRIVATE void sqlite3VdbeLinkSubProgram(Vdbe *, SubProgram *); +#endif #ifndef NDEBUG @@ -7398,8 +8923,6 @@ SQLITE_PRIVATE void sqlite3VdbeNoopComment(Vdbe*, const char*, ...); ** This header file defines the interface that the sqlite page cache ** subsystem. The page cache subsystem reads and writes a file a page ** at a time and provides a journal for rollback. -** -** @(#) $Id: pager.h,v 1.102 2009/06/18 17:22:39 drh Exp $ */ #ifndef _PAGER_H_ @@ -7446,7 +8969,7 @@ typedef struct PgHdr DbPage; ** NOTE: These values must match the corresponding BTREE_ values in btree.h. */ #define PAGER_OMIT_JOURNAL 0x0001 /* Do not use a rollback journal */ -#define PAGER_NO_READLOCK 0x0002 /* Omit readlocks on readonly files */ +#define PAGER_MEMORY 0x0002 /* In-memory database */ /* ** Valid values for the second argument to sqlite3PagerLockingMode(). @@ -7456,14 +8979,15 @@ typedef struct PgHdr DbPage; #define PAGER_LOCKINGMODE_EXCLUSIVE 1 /* -** Valid values for the second argument to sqlite3PagerJournalMode(). +** Numeric constants that encode the journalmode. */ -#define PAGER_JOURNALMODE_QUERY -1 +#define PAGER_JOURNALMODE_QUERY (-1) /* Query the value of journalmode */ #define PAGER_JOURNALMODE_DELETE 0 /* Commit by deleting journal file */ #define PAGER_JOURNALMODE_PERSIST 1 /* Commit by zeroing journal header */ #define PAGER_JOURNALMODE_OFF 2 /* Journal omitted. */ #define PAGER_JOURNALMODE_TRUNCATE 3 /* Commit by truncating journal */ #define PAGER_JOURNALMODE_MEMORY 4 /* In-memory journal file */ +#define PAGER_JOURNALMODE_WAL 5 /* Use write-ahead logging */ /* ** The remainder of this file contains the declarations of the functions @@ -7472,19 +8996,29 @@ typedef struct PgHdr DbPage; */ /* Open and close a Pager connection. */ -SQLITE_PRIVATE int sqlite3PagerOpen(sqlite3_vfs *, Pager **ppPager, const char*, int,int,int); +SQLITE_PRIVATE int sqlite3PagerOpen( + sqlite3_vfs*, + Pager **ppPager, + const char*, + int, + int, + int, + void(*)(DbPage*) +); SQLITE_PRIVATE int sqlite3PagerClose(Pager *pPager); SQLITE_PRIVATE int sqlite3PagerReadFileheader(Pager*, int, unsigned char*); /* Functions used to configure a Pager object. */ SQLITE_PRIVATE void sqlite3PagerSetBusyhandler(Pager*, int(*)(void *), void *); -SQLITE_PRIVATE void sqlite3PagerSetReiniter(Pager*, void(*)(DbPage*)); -SQLITE_PRIVATE int sqlite3PagerSetPagesize(Pager*, u16*, int); +SQLITE_PRIVATE int sqlite3PagerSetPagesize(Pager*, u32*, int); SQLITE_PRIVATE int sqlite3PagerMaxPageCount(Pager*, int); SQLITE_PRIVATE void sqlite3PagerSetCachesize(Pager*, int); -SQLITE_PRIVATE void sqlite3PagerSetSafetyLevel(Pager*,int,int); +SQLITE_PRIVATE void sqlite3PagerShrink(Pager*); +SQLITE_PRIVATE void sqlite3PagerSetSafetyLevel(Pager*,int,int,int); SQLITE_PRIVATE int sqlite3PagerLockingMode(Pager *, int); -SQLITE_PRIVATE int sqlite3PagerJournalMode(Pager *, int); +SQLITE_PRIVATE int sqlite3PagerSetJournalMode(Pager *, int); +SQLITE_PRIVATE int sqlite3PagerGetJournalMode(Pager*); +SQLITE_PRIVATE int sqlite3PagerOkToChangeJournalMode(Pager*); SQLITE_PRIVATE i64 sqlite3PagerJournalSizeLimit(Pager *, i64); SQLITE_PRIVATE sqlite3_backup **sqlite3PagerBackupPtr(Pager*); @@ -7504,29 +9038,47 @@ SQLITE_PRIVATE void *sqlite3PagerGetData(DbPage *); SQLITE_PRIVATE void *sqlite3PagerGetExtra(DbPage *); /* Functions used to manage pager transactions and savepoints. */ -SQLITE_PRIVATE int sqlite3PagerPagecount(Pager*, int*); +SQLITE_PRIVATE void sqlite3PagerPagecount(Pager*, int*); SQLITE_PRIVATE int sqlite3PagerBegin(Pager*, int exFlag, int); SQLITE_PRIVATE int sqlite3PagerCommitPhaseOne(Pager*,const char *zMaster, int); +SQLITE_PRIVATE int sqlite3PagerExclusiveLock(Pager*); SQLITE_PRIVATE int sqlite3PagerSync(Pager *pPager); SQLITE_PRIVATE int sqlite3PagerCommitPhaseTwo(Pager*); SQLITE_PRIVATE int sqlite3PagerRollback(Pager*); SQLITE_PRIVATE int sqlite3PagerOpenSavepoint(Pager *pPager, int n); SQLITE_PRIVATE int sqlite3PagerSavepoint(Pager *pPager, int op, int iSavepoint); +SQLITE_PRIVATE int sqlite3PagerSharedLock(Pager *pPager); + +SQLITE_PRIVATE int sqlite3PagerCheckpoint(Pager *pPager, int, int*, int*); +SQLITE_PRIVATE int sqlite3PagerWalSupported(Pager *pPager); +SQLITE_PRIVATE int sqlite3PagerWalCallback(Pager *pPager); +SQLITE_PRIVATE int sqlite3PagerOpenWal(Pager *pPager, int *pisOpen); +SQLITE_PRIVATE int sqlite3PagerCloseWal(Pager *pPager); +#ifdef SQLITE_ENABLE_ZIPVFS +SQLITE_PRIVATE int sqlite3PagerWalFramesize(Pager *pPager); +#endif /* Functions used to query pager state and configuration. */ SQLITE_PRIVATE u8 sqlite3PagerIsreadonly(Pager*); SQLITE_PRIVATE int sqlite3PagerRefcount(Pager*); -SQLITE_PRIVATE const char *sqlite3PagerFilename(Pager*); +SQLITE_PRIVATE int sqlite3PagerMemUsed(Pager*); +SQLITE_PRIVATE const char *sqlite3PagerFilename(Pager*, int); SQLITE_PRIVATE const sqlite3_vfs *sqlite3PagerVfs(Pager*); SQLITE_PRIVATE sqlite3_file *sqlite3PagerFile(Pager*); SQLITE_PRIVATE const char *sqlite3PagerJournalname(Pager*); SQLITE_PRIVATE int sqlite3PagerNosync(Pager*); SQLITE_PRIVATE void *sqlite3PagerTempSpace(Pager*); SQLITE_PRIVATE int sqlite3PagerIsMemdb(Pager*); +SQLITE_PRIVATE void sqlite3PagerCacheStat(Pager *, int, int, int *); +SQLITE_PRIVATE void sqlite3PagerClearCache(Pager *); /* Functions used to truncate the database file. */ SQLITE_PRIVATE void sqlite3PagerTruncateImage(Pager*,Pgno); +#if defined(SQLITE_HAS_CODEC) && !defined(SQLITE_OMIT_WAL) +SQLITE_PRIVATE void *sqlite3PagerCodec(DbPage *); +#endif + /* Functions to support testing and debugging. */ #if !defined(NDEBUG) || defined(SQLITE_TEST) SQLITE_PRIVATE Pgno sqlite3PagerPagenumber(DbPage*); @@ -7561,8 +9113,6 @@ SQLITE_PRIVATE void sqlite3PagerRefdump(Pager*); ************************************************************************* ** This header file defines the interface that the sqlite page cache ** subsystem. -** -** @(#) $Id: pcache.h,v 1.19 2009/01/20 17:06:27 danielk1977 Exp $ */ #ifndef _PCACHE_H_ @@ -7575,11 +9125,12 @@ typedef struct PCache PCache; ** structure. */ struct PgHdr { - void *pData; /* Content of this page */ + sqlite3_pcache_page *pPage; /* Pcache object page handle */ + void *pData; /* Page data */ void *pExtra; /* Extra content */ PgHdr *pDirty; /* Transient list of dirty pages */ - Pgno pgno; /* Page number for this page */ Pager *pPager; /* The pager this page is part of */ + Pgno pgno; /* Page number for this page */ #ifdef SQLITE_CHECK_PAGES u32 pageHash; /* Hash of page content */ #endif @@ -7674,7 +9225,7 @@ SQLITE_PRIVATE int sqlite3PcachePageRefcount(PgHdr*); /* Return the total number of pages stored in the cache */ SQLITE_PRIVATE int sqlite3PcachePagecount(PCache*); -#ifdef SQLITE_CHECK_PAGES +#if defined(SQLITE_CHECK_PAGES) || defined(SQLITE_DEBUG) /* Iterate through all dirty pages currently stored in the cache. This ** interface is only available if SQLITE_CHECK_PAGES is defined when the ** library is built. @@ -7693,6 +9244,9 @@ SQLITE_PRIVATE void sqlite3PcacheSetCachesize(PCache *, int); SQLITE_PRIVATE int sqlite3PcacheGetCachesize(PCache *); #endif +/* Free up as much memory as possible from the page cache */ +SQLITE_PRIVATE void sqlite3PcacheShrink(PCache*); + #ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT /* Try to return memory used by the pcache module to the main memory heap */ SQLITE_PRIVATE int sqlite3PcacheReleaseMemory(int); @@ -7729,8 +9283,6 @@ SQLITE_PRIVATE void sqlite3PCacheSetDefault(void); ** ** This header file is #include-ed by sqliteInt.h and thus ends up ** being included by every source file. -** -** $Id: os.h,v 1.108 2009/02/05 16:31:46 drh Exp $ */ #ifndef _SQLITE_OS_H_ #define _SQLITE_OS_H_ @@ -7780,24 +9332,11 @@ SQLITE_PRIVATE void sqlite3PCacheSetDefault(void); # endif #endif -/* -** Determine if we are dealing with WindowsCE - which has a much -** reduced API. -*/ -#if defined(_WIN32_WCE) -# define SQLITE_OS_WINCE 1 -#else -# define SQLITE_OS_WINCE 0 -#endif - - -/* -** Define the maximum size of a temporary filename -*/ #if SQLITE_OS_WIN # include -# define SQLITE_TEMPNAME_SIZE (MAX_PATH+50) -#elif SQLITE_OS_OS2 +#endif + +#if SQLITE_OS_OS2 # if (__GNUC__ > 3 || __GNUC__ == 3 && __GNUC_MINOR__ >= 3) && defined(OS2_HIGH_MEMORY) # include /* has to be included before os2.h for linking to work */ # endif @@ -7810,9 +9349,53 @@ SQLITE_PRIVATE void sqlite3PCacheSetDefault(void); # define INCL_DOSSEMAPHORES # include # include -# define SQLITE_TEMPNAME_SIZE (CCHMAXPATHCOMP) +#endif + +/* +** Determine if we are dealing with Windows NT. +** +** We ought to be able to determine if we are compiling for win98 or winNT +** using the _WIN32_WINNT macro as follows: +** +** #if defined(_WIN32_WINNT) +** # define SQLITE_OS_WINNT 1 +** #else +** # define SQLITE_OS_WINNT 0 +** #endif +** +** However, vs2005 does not set _WIN32_WINNT by default, as it ought to, +** so the above test does not work. We'll just assume that everything is +** winNT unless the programmer explicitly says otherwise by setting +** SQLITE_OS_WINNT to 0. +*/ +#if SQLITE_OS_WIN && !defined(SQLITE_OS_WINNT) +# define SQLITE_OS_WINNT 1 +#endif + +/* +** Determine if we are dealing with WindowsCE - which has a much +** reduced API. +*/ +#if defined(_WIN32_WCE) +# define SQLITE_OS_WINCE 1 #else -# define SQLITE_TEMPNAME_SIZE 200 +# define SQLITE_OS_WINCE 0 +#endif + +/* +** Determine if we are dealing with WindowsRT (Metro) as this has a different and +** incompatible API from win32. +*/ +#if !defined(SQLITE_OS_WINRT) +# define SQLITE_OS_WINRT 0 +#endif + +/* +** When compiled for WinCE or WinRT, there is no concept of the current +** directory. + */ +#if !SQLITE_OS_WINCE && !SQLITE_OS_WINRT +# define SQLITE_CURDIR 1 #endif /* If the SET_FULLSYNC macro is not defined above, then make it @@ -7826,7 +9409,7 @@ SQLITE_PRIVATE void sqlite3PCacheSetDefault(void); ** The default size of a disk sector */ #ifndef SQLITE_DEFAULT_SECTOR_SIZE -# define SQLITE_DEFAULT_SECTOR_SIZE 512 +# define SQLITE_DEFAULT_SECTOR_SIZE 4096 #endif /* @@ -7932,11 +9515,20 @@ SQLITE_PRIVATE void sqlite3PCacheSetDefault(void); ** 1GB boundary. ** */ -#define PENDING_BYTE sqlite3PendingByte +#ifdef SQLITE_OMIT_WSD +# define PENDING_BYTE (0x40000000) +#else +# define PENDING_BYTE sqlite3PendingByte +#endif #define RESERVED_BYTE (PENDING_BYTE+1) #define SHARED_FIRST (PENDING_BYTE+2) #define SHARED_SIZE 510 +/* +** Wrapper around OS specific sqlite3_os_init() function. +*/ +SQLITE_PRIVATE int sqlite3OsInit(void); + /* ** Functions for accessing sqlite3_file methods */ @@ -7950,9 +9542,15 @@ SQLITE_PRIVATE int sqlite3OsLock(sqlite3_file*, int); SQLITE_PRIVATE int sqlite3OsUnlock(sqlite3_file*, int); SQLITE_PRIVATE int sqlite3OsCheckReservedLock(sqlite3_file *id, int *pResOut); SQLITE_PRIVATE int sqlite3OsFileControl(sqlite3_file*,int,void*); +SQLITE_PRIVATE void sqlite3OsFileControlHint(sqlite3_file*,int,void*); #define SQLITE_FCNTL_DB_UNCHANGED 0xca093fa0 SQLITE_PRIVATE int sqlite3OsSectorSize(sqlite3_file *id); SQLITE_PRIVATE int sqlite3OsDeviceCharacteristics(sqlite3_file *id); +SQLITE_PRIVATE int sqlite3OsShmMap(sqlite3_file *,int,int,int,void volatile **); +SQLITE_PRIVATE int sqlite3OsShmLock(sqlite3_file *id, int, int, int); +SQLITE_PRIVATE void sqlite3OsShmBarrier(sqlite3_file *id); +SQLITE_PRIVATE int sqlite3OsShmUnmap(sqlite3_file *id, int); + /* ** Functions for accessing sqlite3_vfs methods @@ -7969,7 +9567,7 @@ SQLITE_PRIVATE void sqlite3OsDlClose(sqlite3_vfs *, void *); #endif /* SQLITE_OMIT_LOAD_EXTENSION */ SQLITE_PRIVATE int sqlite3OsRandomness(sqlite3_vfs *, int, char *); SQLITE_PRIVATE int sqlite3OsSleep(sqlite3_vfs *, int); -SQLITE_PRIVATE int sqlite3OsCurrentTime(sqlite3_vfs *, double*); +SQLITE_PRIVATE int sqlite3OsCurrentTimeInt64(sqlite3_vfs *, sqlite3_int64*); /* ** Convenience functions for opening and closing files using @@ -8004,8 +9602,6 @@ SQLITE_PRIVATE int sqlite3OsCloseFree(sqlite3_file *); ** NOTE: source files should *not* #include this header file directly. ** Source files should #include the sqliteInt.h file and let that file ** include this one indirectly. -** -** $Id: mutex.h,v 1.9 2008/10/07 15:25:48 drh Exp $ */ @@ -8048,15 +9644,18 @@ SQLITE_PRIVATE int sqlite3OsCloseFree(sqlite3_file *); */ #define sqlite3_mutex_alloc(X) ((sqlite3_mutex*)8) #define sqlite3_mutex_free(X) -#define sqlite3_mutex_enter(X) +#define sqlite3_mutex_enter(X) #define sqlite3_mutex_try(X) SQLITE_OK -#define sqlite3_mutex_leave(X) -#define sqlite3_mutex_held(X) 1 -#define sqlite3_mutex_notheld(X) 1 +#define sqlite3_mutex_leave(X) +#define sqlite3_mutex_held(X) ((void)(X),1) +#define sqlite3_mutex_notheld(X) ((void)(X),1) #define sqlite3MutexAlloc(X) ((sqlite3_mutex*)8) #define sqlite3MutexInit() SQLITE_OK #define sqlite3MutexEnd() -#endif /* defined(SQLITE_OMIT_MUTEX) */ +#define MUTEX_LOGIC(X) +#else +#define MUTEX_LOGIC(X) X +#endif /* defined(SQLITE_MUTEX_OMIT) */ /************** End of mutex.h ***********************************************/ /************** Continuing where we left off in sqliteInt.h ******************/ @@ -8080,32 +9679,37 @@ struct Db { /* ** An instance of the following structure stores a database schema. ** -** If there are no virtual tables configured in this schema, the -** Schema.db variable is set to NULL. After the first virtual table -** has been added, it is set to point to the database connection -** used to create the connection. Once a virtual table has been -** added to the Schema structure and the Schema.db variable populated, -** only that database connection may use the Schema to prepare -** statements. +** Most Schema objects are associated with a Btree. The exception is +** the Schema for the TEMP databaes (sqlite3.aDb[1]) which is free-standing. +** In shared cache mode, a single Schema object can be shared by multiple +** Btrees that refer to the same underlying BtShared object. +** +** Schema objects are automatically deallocated when the last Btree that +** references them is destroyed. The TEMP Schema is manually freed by +** sqlite3_close(). +* +** A thread must be holding a mutex on the corresponding Btree in order +** to access Schema content. This implies that the thread must also be +** holding a mutex on the sqlite3 connection pointer that owns the Btree. +** For a TEMP Schema, only the connection mutex is required. */ struct Schema { int schema_cookie; /* Database schema version number for this file */ + int iGeneration; /* Generation counter. Incremented with each change */ Hash tblHash; /* All tables indexed by name */ Hash idxHash; /* All (named) indices indexed by name */ Hash trigHash; /* All triggers indexed by name */ + Hash fkeyHash; /* All foreign keys by referenced table name */ Table *pSeqTab; /* The sqlite_sequence table used by AUTOINCREMENT */ u8 file_format; /* Schema format version for this file */ u8 enc; /* Text encoding used by this database */ u16 flags; /* Flags associated with this schema */ int cache_size; /* Number of pages to use in the cache */ -#ifndef SQLITE_OMIT_VIRTUALTABLE - sqlite3 *db; /* "Owner" connection. See comment above */ -#endif }; /* ** These macros can be used to test, set, or clear bits in the -** Db.flags field. +** Db.pSchema->flags field. */ #define DbHasProperty(D,I,P) (((D)->aDb[I].pSchema->flags&(P))==(P)) #define DbHasAnyProperty(D,I,P) (((D)->aDb[I].pSchema->flags&(P))!=0) @@ -8113,7 +9717,7 @@ struct Schema { #define DbClearProperty(D,I,P) (D)->aDb[I].pSchema->flags&=~(P) /* -** Allowed values for the DB.flags field. +** Allowed values for the DB.pSchema->flags field. ** ** The DB_SchemaLoaded flag is set after the database schema has been ** read into internal hash tables. @@ -8130,7 +9734,7 @@ struct Schema { ** The number of different kinds of things that can be limited ** using the sqlite3_limit() interface. */ -#define SQLITE_N_LIMIT (SQLITE_LIMIT_VARIABLE_NUMBER+1) +#define SQLITE_N_LIMIT (SQLITE_LIMIT_TRIGGER_DEPTH+1) /* ** Lookaside malloc is a set of fixed-size buffers that can be used @@ -8158,6 +9762,7 @@ struct Lookaside { u8 bMalloced; /* True if pStart obtained from sqlite3_malloc() */ int nOut; /* Number of buffers currently checked out */ int mxOut; /* Highwater mark for nOut */ + int anStat[3]; /* 0: hits. 1: size misses. 2: full misses */ LookasideSlot *pFree; /* List of available buffers */ void *pStart; /* First byte of available memory space */ void *pEnd; /* First byte past end of available space */ @@ -8177,64 +9782,44 @@ struct FuncDefHash { }; /* -** Each database is an instance of the following structure. -** -** The sqlite.lastRowid records the last insert rowid generated by an -** insert statement. Inserts on views do not affect its value. Each -** trigger has its own context, so that lastRowid can be updated inside -** triggers as usual. The previous value will be restored once the trigger -** exits. Upon entering a before or instead of trigger, lastRowid is no -** longer (since after version 2.8.12) reset to -1. -** -** The sqlite.nChange does not count changes within triggers and keeps no -** context. It is reset at start of sqlite3_exec. -** The sqlite.lsChange represents the number of changes made by the last -** insert, update, or delete statement. It remains constant throughout the -** length of a statement and is then updated by OP_SetCounts. It keeps a -** context stack just like lastRowid so that the count of changes -** within a trigger is not seen outside the trigger. Changes to views do not -** affect the value of lsChange. -** The sqlite.csChange keeps track of the number of current changes (since -** the last statement) and is used to update sqlite_lsChange. -** -** The member variables sqlite.errCode, sqlite.zErrMsg and sqlite.zErrMsg16 -** store the most recent error code and, if applicable, string. The -** internal function sqlite3Error() is used to set these variables -** consistently. +** Each database connection is an instance of the following structure. */ struct sqlite3 { sqlite3_vfs *pVfs; /* OS Interface */ - int nDb; /* Number of backends currently in use */ + struct Vdbe *pVdbe; /* List of active virtual machines */ + CollSeq *pDfltColl; /* The default collating sequence (BINARY) */ + sqlite3_mutex *mutex; /* Connection mutex */ Db *aDb; /* All backends */ + int nDb; /* Number of backends currently in use */ int flags; /* Miscellaneous flags. See below */ - int openFlags; /* Flags passed to sqlite3_vfs.xOpen() */ + i64 lastRowid; /* ROWID of most recent insert (see above) */ + unsigned int openFlags; /* Flags passed to sqlite3_vfs.xOpen() */ int errCode; /* Most recent error code (SQLITE_*) */ int errMask; /* & result codes with this before returning */ u8 autoCommit; /* The auto-commit flag. */ u8 temp_store; /* 1: file 2: memory 0: default */ u8 mallocFailed; /* True if we have seen a malloc failure */ u8 dfltLockMode; /* Default locking-mode for attached dbs */ - u8 dfltJournalMode; /* Default journal mode for attached dbs */ signed char nextAutovac; /* Autovac setting after VACUUM if >=0 */ + u8 suppressErr; /* Do not issue error messages if true */ + u8 vtabOnConflict; /* Value to return for s3_vtab_on_conflict() */ + u8 isTransactionSavepoint; /* True if the outermost savepoint is a TS */ int nextPagesize; /* Pagesize after VACUUM if >0 */ - int nTable; /* Number of tables in the database */ - CollSeq *pDfltColl; /* The default collating sequence (BINARY) */ - i64 lastRowid; /* ROWID of most recent insert (see above) */ u32 magic; /* Magic number for detect library misuse */ int nChange; /* Value returned by sqlite3_changes() */ int nTotalChange; /* Value returned by sqlite3_total_changes() */ - sqlite3_mutex *mutex; /* Connection mutex */ int aLimit[SQLITE_N_LIMIT]; /* Limits */ struct sqlite3InitInfo { /* Information used during initialization */ - int iDb; /* When back is being initialized */ int newTnum; /* Rootpage of table being initialized */ + u8 iDb; /* Which db file is being initialized */ u8 busy; /* TRUE if currently initializing */ + u8 orphanTrigger; /* Last statement is orphaned TEMP trigger */ } init; - int nExtension; /* Number of loaded extensions */ - void **aExtension; /* Array of shared library handles */ - struct Vdbe *pVdbe; /* List of active virtual machines */ int activeVdbeCnt; /* Number of VDBEs currently executing */ int writeVdbeCnt; /* Number of active VDBEs that are writing */ + int vdbeExecCnt; /* Number of nested calls to VdbeExec() */ + int nExtension; /* Number of loaded extensions */ + void **aExtension; /* Array of shared library handles */ void (*xTrace)(void*,const char*); /* Trace function */ void *pTraceArg; /* Argument to the trace function */ void (*xProfile)(void*,const char*,u64); /* Profiling function */ @@ -8245,6 +9830,10 @@ struct sqlite3 { void (*xRollbackCallback)(void*); /* Invoked at every commit. */ void *pUpdateArg; void (*xUpdateCallback)(void*,int, const char*,const char*,sqlite_int64); +#ifndef SQLITE_OMIT_WAL + int (*xWalCallback)(void *, sqlite3 *, const char *, int); + void *pWalArg; +#endif void(*xCollNeeded)(void*,sqlite3*,int eTextRep,const char*); void(*xCollNeeded16)(void*,sqlite3*,int eTextRep,const void*); void *pCollNeededArg; @@ -8267,20 +9856,22 @@ struct sqlite3 { int nProgressOps; /* Number of opcodes for progress callback */ #endif #ifndef SQLITE_OMIT_VIRTUALTABLE - Hash aModule; /* populated by sqlite3_create_module() */ - Table *pVTab; /* vtab with active Connect/Create method */ - sqlite3_vtab **aVTrans; /* Virtual tables with open transactions */ int nVTrans; /* Allocated size of aVTrans */ + Hash aModule; /* populated by sqlite3_create_module() */ + VtabCtx *pVtabCtx; /* Context for active vtab connect/create */ + VTable **aVTrans; /* Virtual tables with open transactions */ + VTable *pDisconnect; /* Disconnect these in next sqlite3_prepare() */ #endif FuncDefHash aFunc; /* Hash table of connection functions */ Hash aCollSeq; /* All collating sequences */ BusyHandler busyHandler; /* Busy callback */ - int busyTimeout; /* Busy handler timeout, in msec */ Db aDbStatic[2]; /* Static space for the 2 default backends */ Savepoint *pSavepoint; /* List of active savepoints */ + int busyTimeout; /* Busy handler timeout, in msec */ int nSavepoint; /* Number of non-transaction savepoints */ int nStatement; /* Number of nested statement-transactions */ - u8 isTransactionSavepoint; /* True if the outermost savepoint is a TS */ + i64 nDeferredCons; /* Net deferred constraints this transaction. */ + int *pnBytesFreed; /* If not NULL, increment this in DbFree() */ #ifdef SQLITE_ENABLE_UNLOCK_NOTIFY /* The following variables are all protected by the STATIC_MASTER @@ -8307,37 +9898,50 @@ struct sqlite3 { #define ENC(db) ((db)->aDb[0].pSchema->enc) /* -** Possible values for the sqlite.flags and or Db.flags fields. -** -** On sqlite.flags, the SQLITE_InTrans value means that we have -** executed a BEGIN. On Db.flags, SQLITE_InTrans means a statement -** transaction is active on that particular database file. +** Possible values for the sqlite3.flags. */ -#define SQLITE_VdbeTrace 0x00000001 /* True to trace VDBE execution */ -#define SQLITE_InTrans 0x00000008 /* True if in a transaction */ -#define SQLITE_InternChanges 0x00000010 /* Uncommitted Hash table changes */ -#define SQLITE_FullColNames 0x00000020 /* Show full column names on SELECT */ -#define SQLITE_ShortColNames 0x00000040 /* Show short columns names */ -#define SQLITE_CountRows 0x00000080 /* Count rows changed by INSERT, */ +#define SQLITE_VdbeTrace 0x00000100 /* True to trace VDBE execution */ +#define SQLITE_InternChanges 0x00000200 /* Uncommitted Hash table changes */ +#define SQLITE_FullColNames 0x00000400 /* Show full column names on SELECT */ +#define SQLITE_ShortColNames 0x00000800 /* Show short columns names */ +#define SQLITE_CountRows 0x00001000 /* Count rows changed by INSERT, */ /* DELETE, or UPDATE and return */ /* the count using a callback. */ -#define SQLITE_NullCallback 0x00000100 /* Invoke the callback once if the */ +#define SQLITE_NullCallback 0x00002000 /* Invoke the callback once if the */ /* result set is empty */ -#define SQLITE_SqlTrace 0x00000200 /* Debug print SQL as it executes */ -#define SQLITE_VdbeListing 0x00000400 /* Debug listings of VDBE programs */ -#define SQLITE_WriteSchema 0x00000800 /* OK to update SQLITE_MASTER */ -#define SQLITE_NoReadlock 0x00001000 /* Readlocks are omitted when - ** accessing read-only databases */ -#define SQLITE_IgnoreChecks 0x00002000 /* Do not enforce check constraints */ -#define SQLITE_ReadUncommitted 0x00004000 /* For shared-cache mode */ -#define SQLITE_LegacyFileFmt 0x00008000 /* Create new databases in format 1 */ -#define SQLITE_FullFSync 0x00010000 /* Use full fsync on the backend */ -#define SQLITE_LoadExtension 0x00020000 /* Enable load_extension */ - -#define SQLITE_RecoveryMode 0x00040000 /* Ignore schema errors */ -#define SQLITE_SharedCache 0x00080000 /* Cache sharing is enabled */ -#define SQLITE_CommitBusy 0x00200000 /* In the process of committing */ -#define SQLITE_ReverseOrder 0x00400000 /* Reverse unordered SELECTs */ +#define SQLITE_SqlTrace 0x00004000 /* Debug print SQL as it executes */ +#define SQLITE_VdbeListing 0x00008000 /* Debug listings of VDBE programs */ +#define SQLITE_WriteSchema 0x00010000 /* OK to update SQLITE_MASTER */ + /* 0x00020000 Unused */ +#define SQLITE_IgnoreChecks 0x00040000 /* Do not enforce check constraints */ +#define SQLITE_ReadUncommitted 0x0080000 /* For shared-cache mode */ +#define SQLITE_LegacyFileFmt 0x00100000 /* Create new databases in format 1 */ +#define SQLITE_FullFSync 0x00200000 /* Use full fsync on the backend */ +#define SQLITE_CkptFullFSync 0x00400000 /* Use full fsync for checkpoint */ +#define SQLITE_RecoveryMode 0x00800000 /* Ignore schema errors */ +#define SQLITE_ReverseOrder 0x01000000 /* Reverse unordered SELECTs */ +#define SQLITE_RecTriggers 0x02000000 /* Enable recursive triggers */ +#define SQLITE_ForeignKeys 0x04000000 /* Enforce foreign key constraints */ +#define SQLITE_AutoIndex 0x08000000 /* Enable automatic indexes */ +#define SQLITE_PreferBuiltin 0x10000000 /* Preference to built-in funcs */ +#define SQLITE_LoadExtension 0x20000000 /* Enable load_extension */ +#define SQLITE_EnableTrigger 0x40000000 /* True to enable triggers */ + +/* +** Bits of the sqlite3.flags field that are used by the +** sqlite3_test_control(SQLITE_TESTCTRL_OPTIMIZATIONS,...) interface. +** These must be the low-order bits of the flags field. +*/ +#define SQLITE_QueryFlattener 0x01 /* Disable query flattening */ +#define SQLITE_ColumnCache 0x02 /* Disable the column cache */ +#define SQLITE_IndexSort 0x04 /* Disable indexes for sorting */ +#define SQLITE_IndexSearch 0x08 /* Disable indexes for searching */ +#define SQLITE_IndexCover 0x10 /* Disable index covering table */ +#define SQLITE_GroupByOrder 0x20 /* Disable GROUPBY cover of ORDERBY */ +#define SQLITE_FactorOutConst 0x40 /* Disable factoring out constants */ +#define SQLITE_IdxRealAsInt 0x80 /* Store REAL as INT in indices */ +#define SQLITE_DistinctOpt 0x80 /* DISTINCT using indexes */ +#define SQLITE_OptMask 0xff /* Mask of all disablable opts */ /* ** Possible values for the sqlite.magic field. @@ -8367,17 +9971,42 @@ struct FuncDef { void (*xFinalize)(sqlite3_context*); /* Aggregate finalizer */ char *zName; /* SQL name of the function. */ FuncDef *pHash; /* Next with a different name but the same hash */ + FuncDestructor *pDestructor; /* Reference counted destructor function */ +}; + +/* +** This structure encapsulates a user-function destructor callback (as +** configured using create_function_v2()) and a reference counter. When +** create_function_v2() is called to create a function with a destructor, +** a single object of this type is allocated. FuncDestructor.nRef is set to +** the number of FuncDef objects created (either 1 or 3, depending on whether +** or not the specified encoding is SQLITE_ANY). The FuncDef.pDestructor +** member of each of the new FuncDef objects is set to point to the allocated +** FuncDestructor. +** +** Thereafter, when one of the FuncDef objects is deleted, the reference +** count on this object is decremented. When it reaches 0, the destructor +** is invoked and the FuncDestructor structure freed. +*/ +struct FuncDestructor { + int nRef; + void (*xDestroy)(void *); + void *pUserData; }; /* -** Possible values for FuncDef.flags +** Possible values for FuncDef.flags. Note that the _LENGTH and _TYPEOF +** values must correspond to OPFLAG_LENGTHARG and OPFLAG_TYPEOFARG. There +** are assert() statements in the code to verify this. */ #define SQLITE_FUNC_LIKE 0x01 /* Candidate for the LIKE optimization */ #define SQLITE_FUNC_CASE 0x02 /* Case-sensitive LIKE-type function */ #define SQLITE_FUNC_EPHEM 0x04 /* Ephemeral. Delete with VDBE */ #define SQLITE_FUNC_NEEDCOLL 0x08 /* sqlite3GetFuncCollSeq() might be called */ -#define SQLITE_FUNC_PRIVATE 0x10 /* Allowed for internal use only */ -#define SQLITE_FUNC_COUNT 0x20 /* Built-in count(*) aggregate */ +#define SQLITE_FUNC_COUNT 0x10 /* Built-in count(*) aggregate */ +#define SQLITE_FUNC_COALESCE 0x20 /* Built-in coalesce() or ifnull() function */ +#define SQLITE_FUNC_LENGTH 0x40 /* Built-in length() function */ +#define SQLITE_FUNC_TYPEOF 0x80 /* Built-in typeof() function */ /* ** The following three macros, FUNCTION(), LIKEFUNC() and AGGREGATE() are @@ -8405,16 +10034,19 @@ struct FuncDef { ** parameter. */ #define FUNCTION(zName, nArg, iArg, bNC, xFunc) \ - {nArg, SQLITE_UTF8, bNC*SQLITE_FUNC_NEEDCOLL, \ - SQLITE_INT_TO_PTR(iArg), 0, xFunc, 0, 0, #zName, 0} + {nArg, SQLITE_UTF8, (bNC*SQLITE_FUNC_NEEDCOLL), \ + SQLITE_INT_TO_PTR(iArg), 0, xFunc, 0, 0, #zName, 0, 0} +#define FUNCTION2(zName, nArg, iArg, bNC, xFunc, extraFlags) \ + {nArg, SQLITE_UTF8, (bNC*SQLITE_FUNC_NEEDCOLL)|extraFlags, \ + SQLITE_INT_TO_PTR(iArg), 0, xFunc, 0, 0, #zName, 0, 0} #define STR_FUNCTION(zName, nArg, pArg, bNC, xFunc) \ {nArg, SQLITE_UTF8, bNC*SQLITE_FUNC_NEEDCOLL, \ - pArg, 0, xFunc, 0, 0, #zName, 0} + pArg, 0, xFunc, 0, 0, #zName, 0, 0} #define LIKEFUNC(zName, nArg, arg, flags) \ - {nArg, SQLITE_UTF8, flags, (void *)arg, 0, likeFunc, 0, 0, #zName, 0} + {nArg, SQLITE_UTF8, flags, (void *)arg, 0, likeFunc, 0, 0, #zName, 0, 0} #define AGGREGATE(zName, nArg, arg, nc, xStep, xFinal) \ {nArg, SQLITE_UTF8, nc*SQLITE_FUNC_NEEDCOLL, \ - SQLITE_INT_TO_PTR(arg), 0, 0, xStep,xFinal,#zName,0} + SQLITE_INT_TO_PTR(arg), 0, 0, xStep,xFinal,#zName,0,0} /* ** All current savepoints are stored in a linked list starting at @@ -8424,6 +10056,7 @@ struct FuncDef { */ struct Savepoint { char *zName; /* Savepoint name (nul-terminated) */ + i64 nDeferredCons; /* Number of deferred fk violations */ Savepoint *pNext; /* Parent savepoint (if any) */ }; @@ -8490,20 +10123,11 @@ struct Column { struct CollSeq { char *zName; /* Name of the collating sequence, UTF-8 encoded */ u8 enc; /* Text encoding handled by xCmp() */ - u8 type; /* One of the SQLITE_COLL_... values below */ void *pUser; /* First argument to xCmp() */ int (*xCmp)(void*,int, const void*, int, const void*); void (*xDel)(void*); /* Destructor for pUser */ }; -/* -** Allowed values of CollSeq.type: -*/ -#define SQLITE_COLL_BINARY 1 /* The default memcmp() collating sequence */ -#define SQLITE_COLL_NOCASE 2 /* The built-in NOCASE collating sequence */ -#define SQLITE_COLL_REVERSE 3 /* The built-in REVERSE collating sequence */ -#define SQLITE_COLL_USER 0 /* Any other user-defined collating sequence */ - /* ** A sort order can be either ASC or DESC. */ @@ -8544,6 +10168,59 @@ struct CollSeq { */ #define SQLITE_JUMPIFNULL 0x08 /* jumps if either operand is NULL */ #define SQLITE_STOREP2 0x10 /* Store result in reg[P2] rather than jump */ +#define SQLITE_NULLEQ 0x80 /* NULL=NULL */ + +/* +** An object of this type is created for each virtual table present in +** the database schema. +** +** If the database schema is shared, then there is one instance of this +** structure for each database connection (sqlite3*) that uses the shared +** schema. This is because each database connection requires its own unique +** instance of the sqlite3_vtab* handle used to access the virtual table +** implementation. sqlite3_vtab* handles can not be shared between +** database connections, even when the rest of the in-memory database +** schema is shared, as the implementation often stores the database +** connection handle passed to it via the xConnect() or xCreate() method +** during initialization internally. This database connection handle may +** then be used by the virtual table implementation to access real tables +** within the database. So that they appear as part of the callers +** transaction, these accesses need to be made via the same database +** connection as that used to execute SQL operations on the virtual table. +** +** All VTable objects that correspond to a single table in a shared +** database schema are initially stored in a linked-list pointed to by +** the Table.pVTable member variable of the corresponding Table object. +** When an sqlite3_prepare() operation is required to access the virtual +** table, it searches the list for the VTable that corresponds to the +** database connection doing the preparing so as to use the correct +** sqlite3_vtab* handle in the compiled query. +** +** When an in-memory Table object is deleted (for example when the +** schema is being reloaded for some reason), the VTable objects are not +** deleted and the sqlite3_vtab* handles are not xDisconnect()ed +** immediately. Instead, they are moved from the Table.pVTable list to +** another linked list headed by the sqlite3.pDisconnect member of the +** corresponding sqlite3 structure. They are then deleted/xDisconnected +** next time a statement is prepared using said sqlite3*. This is done +** to avoid deadlock issues involving multiple sqlite3.mutex mutexes. +** Refer to comments above function sqlite3VtabUnlockList() for an +** explanation as to why it is safe to add an entry to an sqlite3.pDisconnect +** list without holding the corresponding sqlite3.mutex mutex. +** +** The memory for objects of this type is always allocated by +** sqlite3DbMalloc(), using the connection handle stored in VTable.db as +** the first argument. +*/ +struct VTable { + sqlite3 *db; /* Database connection associated with this table */ + Module *pMod; /* Pointer to module implementation */ + sqlite3_vtab *pVtab; /* Pointer to vtab instance */ + int nRef; /* Number of pointers to this structure */ + u8 bConstraint; /* True if constraints are supported */ + int iSavepoint; /* Depth of the SAVEPOINT stack */ + VTable *pNext; /* Next in linked list (see above) */ +}; /* ** Each SQL table is represented in memory by an instance of the @@ -8576,13 +10253,13 @@ struct CollSeq { ** of a SELECT statement. */ struct Table { - sqlite3 *dbMem; /* DB connection used for lookaside allocations. */ char *zName; /* Name of the table or view */ int iPKey; /* If not negative, use aCol[iPKey] as the primary key */ int nCol; /* Number of columns in this table */ Column *aCol; /* Information about each column */ Index *pIndex; /* List of SQL indexes on this table. */ int tnum; /* Root BTree node for this table (see note above) */ + tRowcnt nRowEst; /* Estimated rows in table - from sqlite_stat1 table */ Select *pSelect; /* NULL for tables. Points to definition if a view. */ u16 nRef; /* Number of pointers to this Table */ u8 tabFlags; /* Mask of TF_* values */ @@ -8590,14 +10267,13 @@ struct Table { FKey *pFKey; /* Linked list of all foreign keys in this table */ char *zColAff; /* String defining the affinity of each column */ #ifndef SQLITE_OMIT_CHECK - Expr *pCheck; /* The AND of all CHECK constraints */ + ExprList *pCheck; /* All CHECK constraints */ #endif #ifndef SQLITE_OMIT_ALTERTABLE int addColOffset; /* Offset in CREATE TABLE stmt to add a new column */ #endif #ifndef SQLITE_OMIT_VIRTUALTABLE - Module *pMod; /* Pointer to the implementation of the module */ - sqlite3_vtab *pVtab; /* Pointer to the module instance */ + VTable *pVTable; /* List of VTable objects. */ int nModuleArg; /* Number of arguments to the module */ char **azModuleArg; /* Text of all module args. [0] is module name */ #endif @@ -8614,8 +10290,6 @@ struct Table { #define TF_HasPrimaryKey 0x04 /* Table has a primary key */ #define TF_Autoincrement 0x08 /* Integer primary key is autoincrement */ #define TF_Virtual 0x10 /* Is a virtual table */ -#define TF_NeedMetadata 0x20 /* aCol[].zType and aCol[].pColl missing */ - /* @@ -8651,14 +10325,16 @@ struct Table { ** the from-table is created. The existence of the to-table is not checked. */ struct FKey { - Table *pFrom; /* The table that contains the REFERENCES clause */ + Table *pFrom; /* Table containing the REFERENCES clause (aka: Child) */ FKey *pNextFrom; /* Next foreign key in pFrom */ - char *zTo; /* Name of table that the key points to */ + char *zTo; /* Name of table that the key points to (aka: Parent) */ + FKey *pNextTo; /* Next foreign key on table named zTo */ + FKey *pPrevTo; /* Previous foreign key on table named zTo */ int nCol; /* Number of columns in this key */ + /* EV: R-30323-21917 */ u8 isDeferred; /* True if constraint checking is deferred till COMMIT */ - u8 updateConf; /* How to resolve conflicts that occur on UPDATE */ - u8 deleteConf; /* How to resolve conflicts that occur on DELETE */ - u8 insertConf; /* How to resolve conflicts that occur on INSERT */ + u8 aAction[2]; /* ON DELETE and ON UPDATE actions, respectively */ + Trigger *apTrigger[2]; /* Triggers for aAction[] actions */ struct sColMap { /* Mapping of columns in pFrom to columns in zTo */ int iFrom; /* Index of column in pFrom */ char *zCol; /* Name of column in zTo. If 0 use PRIMARY KEY */ @@ -8712,9 +10388,9 @@ struct FKey { */ struct KeyInfo { sqlite3 *db; /* The database connection */ - u8 enc; /* Text encoding - one of the TEXT_Utf* values */ + u8 enc; /* Text encoding - one of the SQLITE_UTF* values */ u16 nField; /* Number of entries in aColl[] */ - u8 *aSortOrder; /* If defined an aSortOrder[i] is true, sort DESC */ + u8 *aSortOrder; /* Sort order for each column. May be NULL */ CollSeq *aColl[1]; /* Collating sequence for each term of the key */ }; @@ -8735,7 +10411,7 @@ struct KeyInfo { struct UnpackedRecord { KeyInfo *pKeyInfo; /* Collation and sort-order information */ u16 nField; /* Number of entries in apMem[] */ - u16 flags; /* Boolean settings. UNPACKED_... below */ + u8 flags; /* Boolean settings. UNPACKED_... below */ i64 rowid; /* Used by UNPACKED_PREFIX_SEARCH */ Mem *aMem; /* Values */ }; @@ -8743,12 +10419,9 @@ struct UnpackedRecord { /* ** Allowed values of UnpackedRecord.flags */ -#define UNPACKED_NEED_FREE 0x0001 /* Memory is from sqlite3Malloc() */ -#define UNPACKED_NEED_DESTROY 0x0002 /* apMem[]s should all be destroyed */ -#define UNPACKED_IGNORE_ROWID 0x0004 /* Ignore trailing rowid on key1 */ -#define UNPACKED_INCRKEY 0x0008 /* Make this key an epsilon larger */ -#define UNPACKED_PREFIX_MATCH 0x0010 /* A prefix match is considered OK */ -#define UNPACKED_PREFIX_SEARCH 0x0020 /* A prefix match is considered OK */ +#define UNPACKED_INCRKEY 0x01 /* Make this key an epsilon larger */ +#define UNPACKED_PREFIX_MATCH 0x02 /* A prefix match is considered OK */ +#define UNPACKED_PREFIX_SEARCH 0x04 /* Ignore final (rowid) field */ /* ** Each SQL index is represented in memory by an @@ -8778,18 +10451,42 @@ struct UnpackedRecord { */ struct Index { char *zName; /* Name of this index */ - int nColumn; /* Number of columns in the table used by this index */ int *aiColumn; /* Which columns are used by this index. 1st is 0 */ - unsigned *aiRowEst; /* Result of ANALYZE: Est. rows selected by each column */ + tRowcnt *aiRowEst; /* Result of ANALYZE: Est. rows selected by each column */ Table *pTable; /* The SQL table being indexed */ - int tnum; /* Page containing root of this index in database file */ - u8 onError; /* OE_Abort, OE_Ignore, OE_Replace, or OE_None */ - u8 autoIndex; /* True if is automatically created (ex: by UNIQUE) */ char *zColAff; /* String defining the affinity of each column */ Index *pNext; /* The next index associated with the same table */ Schema *pSchema; /* Schema containing this index */ u8 *aSortOrder; /* Array of size Index.nColumn. True==DESC, False==ASC */ char **azColl; /* Array of collation sequence names for index */ + int nColumn; /* Number of columns in the table used by this index */ + int tnum; /* Page containing root of this index in database file */ + u8 onError; /* OE_Abort, OE_Ignore, OE_Replace, or OE_None */ + u8 autoIndex; /* True if is automatically created (ex: by UNIQUE) */ + u8 bUnordered; /* Use this index for == or IN queries only */ +#ifdef SQLITE_ENABLE_STAT3 + int nSample; /* Number of elements in aSample[] */ + tRowcnt avgEq; /* Average nEq value for key values not in aSample */ + IndexSample *aSample; /* Samples of the left-most key */ +#endif +}; + +/* +** Each sample stored in the sqlite_stat3 table is represented in memory +** using a structure of this type. See documentation at the top of the +** analyze.c source file for additional information. +*/ +struct IndexSample { + union { + char *z; /* Value if eType is SQLITE_TEXT or SQLITE_BLOB */ + double r; /* Value if eType is SQLITE_FLOAT */ + i64 i; /* Value if eType is SQLITE_INTEGER */ + } u; + u8 eType; /* SQLITE_NULL, SQLITE_INTEGER ... etc. */ + int nByte; /* Size in byte of text or blob. */ + tRowcnt nEq; /* Est. number of rows where the key equals this sample */ + tRowcnt nLt; /* Est. number of rows where key is less than this sample */ + tRowcnt nDLt; /* Est. number of distinct keys less than this sample */ }; /* @@ -8824,8 +10521,9 @@ struct AggInfo { u8 useSortingIdx; /* In direct mode, reference the sorting index rather ** than the source table */ int sortingIdx; /* Cursor number of the sorting index */ - ExprList *pGroupBy; /* The group by clause */ + int sortingIdxPTab; /* Cursor number of pseudo-table */ int nSortingColumn; /* Number of columns in the sorting index */ + ExprList *pGroupBy; /* The group by clause */ struct AggInfo_col { /* For each column used in source tables */ Table *pTab; /* Source table */ int iTable; /* Cursor number of the source table */ @@ -8835,7 +10533,6 @@ struct AggInfo { Expr *pExpr; /* The original expression */ } *aCol; int nColumn; /* Number of used entries in aCol[] */ - int nColumnAlloc; /* Number of slots allocated for aCol[] */ int nAccumulator; /* Number of columns that show through to the output. ** Additional columns are used only as parameters to ** aggregate functions */ @@ -8846,9 +10543,24 @@ struct AggInfo { int iDistinct; /* Ephemeral table used to enforce DISTINCT */ } *aFunc; int nFunc; /* Number of entries in aFunc[] */ - int nFuncAlloc; /* Number of slots allocated for aFunc[] */ }; +/* +** The datatype ynVar is a signed integer, either 16-bit or 32-bit. +** Usually it is 16-bits. But if SQLITE_MAX_VARIABLE_NUMBER is greater +** than 32767 we have to make it 32-bit. 16-bit is preferred because +** it uses less memory in the Expr object, which is a big memory user +** in systems with lots of prepared statements. And few applications +** need more than about 10 or 20 variables. But some extreme users want +** to have prepared statements with over 32767 variables, and for them +** the option is available (at compile-time). +*/ +#if SQLITE_MAX_VARIABLE_NUMBER<=32767 +typedef i16 ynVar; +#else +typedef int ynVar; +#endif + /* ** Each node of an expression in the parse tree is an instance ** of this structure. @@ -8918,7 +10630,7 @@ struct Expr { u16 flags; /* Various flags. EP_* See below */ union { char *zToken; /* Token value. Zero terminated and dequoted */ - int iValue; /* Integer value if EP_IntValue */ + int iValue; /* Non-negative integer value if EP_IntValue */ } u; /* If the EP_TokenOnly flag is set in the Expr.flags mask, then no @@ -8940,11 +10652,15 @@ struct Expr { *********************************************************************/ int iTable; /* TK_COLUMN: cursor number of table holding column - ** TK_REGISTER: register number */ - i16 iColumn; /* TK_COLUMN: column index. -1 for rowid */ + ** TK_REGISTER: register number + ** TK_TRIGGER: 1 -> new, 0 -> old */ + ynVar iColumn; /* TK_COLUMN: column index. -1 for rowid. + ** TK_VARIABLE: variable number (always >= 1). */ i16 iAgg; /* Which entry in pAggInfo->aCol[] or ->aFunc[] */ i16 iRightJoinTable; /* If EP_FromJoin, the right table of the join */ - u16 flags2; /* Second set of flags. EP2_... */ + u8 flags2; /* Second set of flags. EP2_... */ + u8 op2; /* If a TK_REGISTER, the original value of Expr.op */ + /* If TK_COLUMN, the value of p5 for OP_Column */ AggInfo *pAggInfo; /* Used by TK_AGG_COLUMN and TK_AGG_FUNCTION */ Table *pTab; /* Table for TK_COLUMN expressions. */ #if SQLITE_MAX_EXPR_DEPTH>0 @@ -8964,11 +10680,10 @@ struct Expr { #define EP_DblQuoted 0x0040 /* token.z was originally in "..." */ #define EP_InfixFunc 0x0080 /* True for an infix function: LIKE, GLOB, etc */ #define EP_ExpCollate 0x0100 /* Collating sequence specified explicitly */ -#define EP_AnyAff 0x0200 /* Can take a cached column of any affinity */ -#define EP_FixedDest 0x0400 /* Result needed in a specific register */ -#define EP_IntValue 0x0800 /* Integer value contained in u.iValue */ -#define EP_xIsSelect 0x1000 /* x.pSelect is valid (otherwise x.pList is) */ - +#define EP_FixedDest 0x0200 /* Result needed in a specific register */ +#define EP_IntValue 0x0400 /* Integer value contained in u.iValue */ +#define EP_xIsSelect 0x0800 /* x.pSelect is valid (otherwise x.pList is) */ +#define EP_Hint 0x1000 /* Not used */ #define EP_Reduced 0x2000 /* Expr struct is EXPR_REDUCEDSIZE bytes only */ #define EP_TokenOnly 0x4000 /* Expr struct is EXPR_TOKENONLYSIZE bytes only */ #define EP_Static 0x8000 /* Held in memory not obtained from malloc() */ @@ -9025,17 +10740,16 @@ struct Expr { */ struct ExprList { int nExpr; /* Number of expressions on the list */ - int nAlloc; /* Number of entries allocated below */ int iECursor; /* VDBE Cursor associated with this ExprList */ - struct ExprList_item { + struct ExprList_item { /* For each expression in the list */ Expr *pExpr; /* The list of expressions */ char *zName; /* Token associated with this expression */ char *zSpan; /* Original text of the expression */ u8 sortOrder; /* 1 for DESC or 0 for ASC */ u8 done; /* A flag to indicate when processing is finished */ - u16 iCol; /* For ORDER BY, column number in result set */ + u16 iOrderByCol; /* For ORDER BY, column number in result set */ u16 iAlias; /* Index into Parse.aAlias[] for zName */ - } *a; /* One entry for each expression */ + } *a; /* Alloc a power of two greater or equal to nExpr */ }; /* @@ -9070,7 +10784,6 @@ struct IdList { int idx; /* Index in some Table.aCol[] of a column named zName */ } *a; int nId; /* Number of identifiers on the list */ - int nAlloc; /* Number of entries allocated for a[] below */ }; /* @@ -9102,6 +10815,9 @@ typedef u64 Bitmask; ** and the next table on the list. The parser builds the list this way. ** But sqlite3SrcListShiftJoinType() later shifts the jointypes so that each ** jointype expresses the join between the table and the previous table. +** +** In the colUsed field, the high-order bit (bit 63) is set if the table +** contains more than 63 columns and the 64-th or later column is used. */ struct SrcList { i16 nSrc; /* Number of tables or subqueries in the FROM clause */ @@ -9112,9 +10828,14 @@ struct SrcList { char *zAlias; /* The "B" part of a "A AS B" phrase. zName is the "A" */ Table *pTab; /* An SQL table corresponding to zName */ Select *pSelect; /* A SELECT statement used in place of a table name */ - u8 isPopulated; /* Temporary table associated with SELECT is populated */ + int addrFillSub; /* Address of subroutine to manifest a subquery */ + int regReturn; /* Register holding return address of addrFillSub */ u8 jointype; /* Type of join between this able and the previous */ u8 notIndexed; /* True if there is a NOT INDEXED clause */ + u8 isCorrelated; /* True if sub-query is correlated */ +#ifndef SQLITE_OMIT_EXPLAIN + u8 iSelectId; /* If pSelect!=0, the id of the sub-select in EQP */ +#endif int iCursor; /* The VDBE cursor number used to access this table */ Expr *pOn; /* The ON clause of a join */ IdList *pUsing; /* The USING clause of a join */ @@ -9153,6 +10874,7 @@ struct SrcList { struct WherePlan { u32 wsFlags; /* WHERE_* flags that describe the strategy */ u32 nEq; /* Number of == constraints */ + double nRow; /* Estimated number of rows (for EQP) */ union { Index *pIdx; /* Index when WHERE_INDEXED is true */ struct WhereTerm *pTerm; /* WHERE clause term for OR-search */ @@ -9213,9 +10935,10 @@ struct WhereLevel { #define WHERE_ORDERBY_MAX 0x0002 /* ORDER BY processing for max() func */ #define WHERE_ONEPASS_DESIRED 0x0004 /* Want to do one-pass UPDATE/DELETE */ #define WHERE_DUPLICATES_OK 0x0008 /* Ok to return a row more than once */ -#define WHERE_OMIT_OPEN 0x0010 /* Table cursor are already open */ -#define WHERE_OMIT_CLOSE 0x0020 /* Omit close of table & index cursors */ -#define WHERE_FORCE_TABLE 0x0040 /* Do not use an index-only search */ +#define WHERE_OMIT_OPEN_CLOSE 0x0010 /* Table cursors are already open */ +#define WHERE_FORCE_TABLE 0x0020 /* Do not use an index-only search */ +#define WHERE_ONETABLE_ONLY 0x0040 /* Only code the 1st table in pTabList */ +#define WHERE_AND_ONLY 0x0080 /* Don't use indices for OR terms */ /* ** The WHERE clause processing routine has two halves. The @@ -9228,15 +10951,22 @@ struct WhereInfo { Parse *pParse; /* Parsing and code generating context */ u16 wctrlFlags; /* Flags originally passed to sqlite3WhereBegin() */ u8 okOnePass; /* Ok to use one-pass algorithm for UPDATE or DELETE */ + u8 untestedTerms; /* Not all WHERE terms resolved by outer loop */ + u8 eDistinct; SrcList *pTabList; /* List of tables in the join */ int iTop; /* The very beginning of the WHERE loop */ int iContinue; /* Jump here to continue with next record */ int iBreak; /* Jump here to break out of the loop */ int nLevel; /* Number of nested loop */ struct WhereClause *pWC; /* Decomposition of the WHERE clause */ + double savedNQueryLoop; /* pParse->nQueryLoop outside the WHERE loop */ + double nRowOut; /* Estimated number of output rows */ WhereLevel a[1]; /* Information about each nest loop in WHERE */ }; +#define WHERE_DISTINCT_UNIQUE 1 +#define WHERE_DISTINCT_ORDERED 2 + /* ** A NameContext defines a context in which to resolve table and column ** names. The context consists of a list of tables (the pSrcList) field and @@ -9262,16 +10992,21 @@ struct NameContext { Parse *pParse; /* The parser */ SrcList *pSrcList; /* One or more tables used to resolve names */ ExprList *pEList; /* Optional list of named expressions */ - int nRef; /* Number of names resolved by this context */ - int nErr; /* Number of errors encountered while resolving names */ - u8 allowAgg; /* Aggregate functions allowed here */ - u8 hasAgg; /* True if aggregates are seen */ - u8 isCheck; /* True if resolving names in a CHECK constraint */ - int nDepth; /* Depth of subquery recursion. 1 for no recursion */ AggInfo *pAggInfo; /* Information about aggregates at this level */ NameContext *pNext; /* Next outer name context. NULL for outermost */ + int nRef; /* Number of names resolved by this context */ + int nErr; /* Number of errors encountered while resolving names */ + u8 ncFlags; /* Zero or more NC_* flags defined below */ }; +/* +** Allowed values for the NameContext, ncFlags field. +*/ +#define NC_AllowAgg 0x01 /* Aggregate functions are allowed here */ +#define NC_HasAgg 0x02 /* One or more aggregate functions seen */ +#define NC_IsCheck 0x04 /* True if resolving names in a CHECK constraint */ +#define NC_InAggFunc 0x08 /* True if analyzing arguments to an agg func */ + /* ** An instance of the following structure contains all information ** needed to generate code for a single SELECT statement. @@ -9297,6 +11032,9 @@ struct Select { u8 op; /* One of: TK_UNION TK_ALL TK_INTERSECT TK_EXCEPT */ char affinity; /* MakeRecord with this affinity for SRT_Set */ u16 selFlags; /* Various SF_* values */ + int iLimit, iOffset; /* Memory registers holding LIMIT & OFFSET counters */ + int addrOpenEphm[3]; /* OP_OpenEphem opcodes related to this select */ + double nSelectRow; /* Estimated number of result rows */ SrcList *pSrc; /* The FROM clause */ Expr *pWhere; /* The WHERE clause */ ExprList *pGroupBy; /* The GROUP BY clause */ @@ -9307,20 +11045,20 @@ struct Select { Select *pRightmost; /* Right-most select in a compound select statement */ Expr *pLimit; /* LIMIT expression. NULL means not used. */ Expr *pOffset; /* OFFSET expression. NULL means not used. */ - int iLimit, iOffset; /* Memory registers holding LIMIT & OFFSET counters */ - int addrOpenEphm[3]; /* OP_OpenEphem opcodes related to this select */ }; /* ** Allowed values for Select.selFlags. The "SF" prefix stands for ** "Select Flag". */ -#define SF_Distinct 0x0001 /* Output should be DISTINCT */ -#define SF_Resolved 0x0002 /* Identifiers have been resolved */ -#define SF_Aggregate 0x0004 /* Contains aggregate functions */ -#define SF_UsesEphemeral 0x0008 /* Uses the OpenEphemeral opcode */ -#define SF_Expanded 0x0010 /* sqlite3SelectExpand() called on this */ -#define SF_HasTypeInfo 0x0020 /* FROM subqueries have Table metadata */ +#define SF_Distinct 0x01 /* Output should be DISTINCT */ +#define SF_Resolved 0x02 /* Identifiers have been resolved */ +#define SF_Aggregate 0x04 /* Contains aggregate functions */ +#define SF_UsesEphemeral 0x08 /* Uses the OpenEphemeral opcode */ +#define SF_Expanded 0x10 /* sqlite3SelectExpand() called on this */ +#define SF_HasTypeInfo 0x20 /* FROM subqueries have Table metadata */ +#define SF_UseSorter 0x40 /* Sort using a sorter */ +#define SF_Values 0x80 /* Synthesized from VALUES clause */ /* @@ -9378,6 +11116,41 @@ struct AutoincInfo { # define SQLITE_N_COLCACHE 10 #endif +/* +** At least one instance of the following structure is created for each +** trigger that may be fired while parsing an INSERT, UPDATE or DELETE +** statement. All such objects are stored in the linked list headed at +** Parse.pTriggerPrg and deleted once statement compilation has been +** completed. +** +** A Vdbe sub-program that implements the body and WHEN clause of trigger +** TriggerPrg.pTrigger, assuming a default ON CONFLICT clause of +** TriggerPrg.orconf, is stored in the TriggerPrg.pProgram variable. +** The Parse.pTriggerPrg list never contains two entries with the same +** values for both pTrigger and orconf. +** +** The TriggerPrg.aColmask[0] variable is set to a mask of old.* columns +** accessed (or set to 0 for triggers fired as a result of INSERT +** statements). Similarly, the TriggerPrg.aColmask[1] variable is set to +** a mask of new.* columns used by the program. +*/ +struct TriggerPrg { + Trigger *pTrigger; /* Trigger this program was coded from */ + TriggerPrg *pNext; /* Next entry in Parse.pTriggerPrg list */ + SubProgram *pProgram; /* Program implementing pTrigger/orconf */ + int orconf; /* Default ON CONFLICT policy */ + u32 aColmask[2]; /* Masks of old.*, new.* columns accessed */ +}; + +/* +** The yDbMask datatype for the bitmask of all attached databases. +*/ +#if SQLITE_MAX_ATTACHED>30 + typedef sqlite3_uint64 yDbMask; +#else + typedef unsigned int yDbMask; +#endif + /* ** An SQL parser context. A copy of this structure is passed through ** the parser and down into all the parser action routine in order to @@ -9396,16 +11169,18 @@ struct AutoincInfo { */ struct Parse { sqlite3 *db; /* The main database structure */ - int rc; /* Return code from execution */ char *zErrMsg; /* An error message */ Vdbe *pVdbe; /* An engine for executing database bytecode */ + int rc; /* Return code from execution */ u8 colNamesSet; /* TRUE after OP_ColumnName has been issued to pVdbe */ - u8 nameClash; /* A permanent table name clashes with temp table name */ u8 checkSchema; /* Causes schema cookie check after an error */ u8 nested; /* Number of nested calls to the parser/code generator */ - u8 parseError; /* True after a parsing error. Ticket #1794 */ u8 nTempReg; /* Number of temporary registers in aTempReg[] */ u8 nTempInUse; /* Number of aTempReg[] currently checked out */ + u8 nColCache; /* Number of entries in aColCache[] */ + u8 iColCache; /* Next entry in aColCache[] to replace */ + u8 isMultiWrite; /* True if statement may modify/insert multiple rows */ + u8 mayAbort; /* True if statement may throw an ABORT exception */ int aTempReg[8]; /* Holding area for temporary registers */ int nRangeReg; /* Size of the temporary register block */ int iRangeReg; /* First register in temporary register block */ @@ -9413,62 +11188,78 @@ struct Parse { int nTab; /* Number of previously allocated VDBE cursors */ int nMem; /* Number of memory cells used so far */ int nSet; /* Number of sets used so far */ + int nOnce; /* Number of OP_Once instructions so far */ int ckBase; /* Base register of data during check constraints */ int iCacheLevel; /* ColCache valid when aColCache[].iLevel<=iCacheLevel */ int iCacheCnt; /* Counter used to generate aColCache[].lru values */ - u8 nColCache; /* Number of entries in the column cache */ - u8 iColCache; /* Next entry of the cache to replace */ struct yColCache { int iTable; /* Table cursor number */ int iColumn; /* Table column number */ - u8 affChange; /* True if this register has had an affinity change */ u8 tempReg; /* iReg is a temp register that needs to be freed */ int iLevel; /* Nesting level */ int iReg; /* Reg with value of this column. 0 means none. */ int lru; /* Least recently used entry has the smallest value */ } aColCache[SQLITE_N_COLCACHE]; /* One for each column cache entry */ - u32 writeMask; /* Start a write transaction on these databases */ - u32 cookieMask; /* Bitmask of schema verified databases */ + yDbMask writeMask; /* Start a write transaction on these databases */ + yDbMask cookieMask; /* Bitmask of schema verified databases */ int cookieGoto; /* Address of OP_Goto to cookie verifier subroutine */ int cookieValue[SQLITE_MAX_ATTACHED+2]; /* Values of cookies to verify */ + int regRowid; /* Register holding rowid of CREATE TABLE entry */ + int regRoot; /* Register holding root page number for new objects */ + int nMaxArg; /* Max args passed to user function by sub-program */ + Token constraintName;/* Name of the constraint currently being parsed */ #ifndef SQLITE_OMIT_SHARED_CACHE int nTableLock; /* Number of locks in aTableLock */ TableLock *aTableLock; /* Required table locks for shared-cache mode */ #endif - int regRowid; /* Register holding rowid of CREATE TABLE entry */ - int regRoot; /* Register holding root page number for new objects */ AutoincInfo *pAinc; /* Information about AUTOINCREMENT counters */ + /* Information used while coding trigger programs. */ + Parse *pToplevel; /* Parse structure for main program (or NULL) */ + Table *pTriggerTab; /* Table triggers are being coded for */ + double nQueryLoop; /* Estimated number of iterations of a query */ + u32 oldmask; /* Mask of old.* columns referenced */ + u32 newmask; /* Mask of new.* columns referenced */ + u8 eTriggerOp; /* TK_UPDATE, TK_INSERT or TK_DELETE */ + u8 eOrconf; /* Default ON CONFLICT policy for trigger steps */ + u8 disableTriggers; /* True to disable triggers */ + /* Above is constant between recursions. Below is reset before and after ** each recursion */ - int nVar; /* Number of '?' variables seen in the SQL so far */ - int nVarExpr; /* Number of used slots in apVarExpr[] */ - int nVarExprAlloc; /* Number of allocated slots in apVarExpr[] */ - Expr **apVarExpr; /* Pointers to :aaa and $aaaa wildcard expressions */ - int nAlias; /* Number of aliased result set columns */ - int nAliasAlloc; /* Number of allocated slots for aAlias[] */ - int *aAlias; /* Register used to hold aliased result */ - u8 explain; /* True if the EXPLAIN flag is found on the query */ - Token sErrToken; /* The token at which the error occurred */ - Token sNameToken; /* Token with unqualified schema object name */ - Token sLastToken; /* The last token parsed */ - const char *zSql; /* All SQL text */ - const char *zTail; /* All SQL text past the last semicolon parsed */ - Table *pNewTable; /* A table being constructed by CREATE TABLE */ + int nVar; /* Number of '?' variables seen in the SQL so far */ + int nzVar; /* Number of available slots in azVar[] */ + u8 explain; /* True if the EXPLAIN flag is found on the query */ +#ifndef SQLITE_OMIT_VIRTUALTABLE + u8 declareVtab; /* True if inside sqlite3_declare_vtab() */ + int nVtabLock; /* Number of virtual tables to lock */ +#endif + int nAlias; /* Number of aliased result set columns */ + int nHeight; /* Expression tree height of current sub-select */ +#ifndef SQLITE_OMIT_EXPLAIN + int iSelectId; /* ID of current select for EXPLAIN output */ + int iNextSelectId; /* Next available select ID for EXPLAIN output */ +#endif + char **azVar; /* Pointers to names of parameters */ + Vdbe *pReprepare; /* VM being reprepared (sqlite3Reprepare()) */ + int *aAlias; /* Register used to hold aliased result */ + const char *zTail; /* All SQL text past the last semicolon parsed */ + Table *pNewTable; /* A table being constructed by CREATE TABLE */ Trigger *pNewTrigger; /* Trigger under construct by a CREATE TRIGGER */ - TriggerStack *trigStack; /* Trigger actions being coded */ const char *zAuthContext; /* The 6th parameter to db->xAuth callbacks */ + Token sNameToken; /* Token with unqualified schema object name */ + Token sLastToken; /* The last token parsed */ #ifndef SQLITE_OMIT_VIRTUALTABLE - Token sArg; /* Complete text of a module argument */ - u8 declareVtab; /* True if inside sqlite3_declare_vtab() */ - int nVtabLock; /* Number of virtual tables to lock */ - Table **apVtabLock; /* Pointer to virtual tables needing locking */ + Token sArg; /* Complete text of a module argument */ + Table **apVtabLock; /* Pointer to virtual tables needing locking */ #endif - int nHeight; /* Expression tree height of current sub-select */ - Table *pZombieTab; /* List of Table objects to delete after code gen */ + Table *pZombieTab; /* List of Table objects to delete after code gen */ + TriggerPrg *pTriggerPrg; /* Linked list of coded triggers */ }; +/* +** Return true if currently inside an sqlite3_declare_vtab() call. +*/ #ifdef SQLITE_OMIT_VIRTUALTABLE #define IN_DECLARE_VTAB 0 #else @@ -9485,13 +11276,16 @@ struct AuthContext { }; /* -** Bitfield flags for P5 value in OP_Insert and OP_Delete +** Bitfield flags for P5 value in various opcodes. */ -#define OPFLAG_NCHANGE 1 /* Set to update db->nChange */ -#define OPFLAG_LASTROWID 2 /* Set to update db->lastRowid */ -#define OPFLAG_ISUPDATE 4 /* This OP_Insert is an sql UPDATE */ -#define OPFLAG_APPEND 8 /* This is likely to be an append */ -#define OPFLAG_USESEEKRESULT 16 /* Try to avoid a seek in BtreeInsert() */ +#define OPFLAG_NCHANGE 0x01 /* Set to update db->nChange */ +#define OPFLAG_LASTROWID 0x02 /* Set to update db->lastRowid */ +#define OPFLAG_ISUPDATE 0x04 /* This OP_Insert is an sql UPDATE */ +#define OPFLAG_APPEND 0x08 /* This is likely to be an append */ +#define OPFLAG_USESEEKRESULT 0x10 /* Try to avoid a seek in BtreeInsert() */ +#define OPFLAG_CLEARCACHE 0x20 /* Clear pseudo-table cache in OP_Column */ +#define OPFLAG_LENGTHARG 0x40 /* OP_Column only used for length() */ +#define OPFLAG_TYPEOFARG 0x80 /* OP_Column only used for typeof() */ /* * Each trigger present in the database schema is stored as an instance of @@ -9509,7 +11303,7 @@ struct AuthContext { * containing the SQL statements specified as the trigger program. */ struct Trigger { - char *name; /* The name of the trigger */ + char *zName; /* The name of the trigger */ char *table; /* The table or view to which the trigger applies */ u8 op; /* One of TK_DELETE, TK_UPDATE, TK_INSERT */ u8 tr_tm; /* One of TRIGGER_BEFORE, TRIGGER_AFTER */ @@ -9571,60 +11365,18 @@ struct Trigger { * */ struct TriggerStep { - int op; /* One of TK_DELETE, TK_UPDATE, TK_INSERT, TK_SELECT */ - int orconf; /* OE_Rollback etc. */ + u8 op; /* One of TK_DELETE, TK_UPDATE, TK_INSERT, TK_SELECT */ + u8 orconf; /* OE_Rollback etc. */ Trigger *pTrig; /* The trigger that this step is a part of */ - - Select *pSelect; /* Valid for SELECT and sometimes - INSERT steps (when pExprList == 0) */ - Token target; /* Target table for DELETE, UPDATE, INSERT. Quoted */ - Expr *pWhere; /* Valid for DELETE, UPDATE steps */ - ExprList *pExprList; /* Valid for UPDATE statements and sometimes - INSERT steps (when pSelect == 0) */ - IdList *pIdList; /* Valid for INSERT statements only */ + Select *pSelect; /* SELECT statment or RHS of INSERT INTO .. SELECT ... */ + Token target; /* Target table for DELETE, UPDATE, INSERT */ + Expr *pWhere; /* The WHERE clause for DELETE or UPDATE steps */ + ExprList *pExprList; /* SET clause for UPDATE. VALUES clause for INSERT */ + IdList *pIdList; /* Column names for INSERT */ TriggerStep *pNext; /* Next in the link-list */ TriggerStep *pLast; /* Last element in link-list. Valid for 1st elem only */ }; -/* - * An instance of struct TriggerStack stores information required during code - * generation of a single trigger program. While the trigger program is being - * coded, its associated TriggerStack instance is pointed to by the - * "pTriggerStack" member of the Parse structure. - * - * The pTab member points to the table that triggers are being coded on. The - * newIdx member contains the index of the vdbe cursor that points at the temp - * table that stores the new.* references. If new.* references are not valid - * for the trigger being coded (for example an ON DELETE trigger), then newIdx - * is set to -1. The oldIdx member is analogous to newIdx, for old.* references. - * - * The ON CONFLICT policy to be used for the trigger program steps is stored - * as the orconf member. If this is OE_Default, then the ON CONFLICT clause - * specified for individual triggers steps is used. - * - * struct TriggerStack has a "pNext" member, to allow linked lists to be - * constructed. When coding nested triggers (triggers fired by other triggers) - * each nested trigger stores its parent trigger's TriggerStack as the "pNext" - * pointer. Once the nested trigger has been coded, the pNext value is restored - * to the pTriggerStack member of the Parse stucture and coding of the parent - * trigger continues. - * - * Before a nested trigger is coded, the linked list pointed to by the - * pTriggerStack is scanned to ensure that the trigger is not about to be coded - * recursively. If this condition is detected, the nested trigger is not coded. - */ -struct TriggerStack { - Table *pTab; /* Table that triggers are currently being coded on */ - int newIdx; /* Index of vdbe cursor to "new" temp table */ - int oldIdx; /* Index of vdbe cursor to "old" temp table */ - u32 newColMask; - u32 oldColMask; - int orconf; /* Current orconf policy */ - int ignoreJump; /* where to jump to for a RAISE(IGNORE) */ - Trigger *pTrigger; /* The trigger currently being coded */ - TriggerStack *pNext; /* Next trigger down on the trigger stack */ -}; - /* ** The following structure contains information used by the sqliteFix... ** routines as they walk the parse tree to make database references @@ -9650,7 +11402,7 @@ struct StrAccum { int nAlloc; /* Amount of space allocated in zText */ int mxAlloc; /* Maximum allowed string length */ u8 mallocFailed; /* Becomes true if any memory allocation fails */ - u8 useMalloc; /* True if zText is enlargeable using realloc */ + u8 useMalloc; /* 0: none, 1: sqlite3DbMalloc, 2: sqlite3_malloc */ u8 tooBig; /* Becomes true if string size exceeds limits */ }; @@ -9660,8 +11412,8 @@ struct StrAccum { */ typedef struct { sqlite3 *db; /* The database being initialized */ - int iDb; /* 0 for main database. 1 for TEMP, 2.. for ATTACHed */ char **pzErrMsg; /* Error message stored here */ + int iDb; /* 0 for main database. 1 for TEMP, 2.. for ATTACHed */ int rc; /* Result code stored here */ } InitData; @@ -9674,12 +11426,13 @@ struct Sqlite3Config { int bMemstat; /* True to enable memory status */ int bCoreMutex; /* True to enable core mutexing */ int bFullMutex; /* True to enable full mutexing */ + int bOpenUri; /* True to interpret filenames as URIs */ int mxStrlen; /* Maximum string length */ int szLookaside; /* Default lookaside buffer size */ int nLookaside; /* Default lookaside buffer count */ sqlite3_mem_methods m; /* Low-level memory allocation interface */ sqlite3_mutex_methods mutex; /* Low-level mutex interface */ - sqlite3_pcache_methods pcache; /* Low-level page-cache interface */ + sqlite3_pcache_methods2 pcache2; /* Low-level page-cache interface */ void *pHeap; /* Heap storage space */ int nHeap; /* Size of pHeap[] */ int mnReq, mxReq; /* Min and max heap requests sizes */ @@ -9695,9 +11448,14 @@ struct Sqlite3Config { ** initially be zero, however. */ int isInit; /* True after initialization has finished */ int inProgress; /* True while initialization in progress */ + int isMutexInit; /* True after mutexes are initialized */ int isMallocInit; /* True after malloc is initialized */ + int isPCacheInit; /* True after malloc is initialized */ sqlite3_mutex *pInitMutex; /* Mutex used by sqlite3_initialize() */ int nRefInitMutex; /* Number of users of pInitMutex */ + void (*xLog)(void*,int,const char*); /* Function for logging */ + void *pLogArg; /* First argument to xLog() */ + int bLocaltimeFault; /* True to fail localtime() calls */ }; /* @@ -9710,6 +11468,7 @@ struct Walker { union { /* Extra data for callback */ NameContext *pNC; /* Naming context */ int i; /* Integer value */ + SrcList *pSrcList; /* FROM clause */ } u; }; @@ -9739,16 +11498,27 @@ SQLITE_PRIVATE int sqlite3WalkSelectFrom(Walker*, Select*); } /* -** The SQLITE_CORRUPT_BKPT macro can be either a constant (for production -** builds) or a function call (for debugging). If it is a function call, -** it allows the operator to set a breakpoint at the spot where database -** corruption is first detected. +** The SQLITE_*_BKPT macros are substitutes for the error codes with +** the same name but without the _BKPT suffix. These macros invoke +** routines that report the line-number on which the error originated +** using sqlite3_log(). The routines also provide a convenient place +** to set a debugger breakpoint. */ -#ifdef SQLITE_DEBUG -SQLITE_PRIVATE int sqlite3Corrupt(void); -# define SQLITE_CORRUPT_BKPT sqlite3Corrupt() -#else -# define SQLITE_CORRUPT_BKPT SQLITE_CORRUPT +SQLITE_PRIVATE int sqlite3CorruptError(int); +SQLITE_PRIVATE int sqlite3MisuseError(int); +SQLITE_PRIVATE int sqlite3CantopenError(int); +#define SQLITE_CORRUPT_BKPT sqlite3CorruptError(__LINE__) +#define SQLITE_MISUSE_BKPT sqlite3MisuseError(__LINE__) +#define SQLITE_CANTOPEN_BKPT sqlite3CantopenError(__LINE__) + + +/* +** FTS4 is really an extension for FTS3. It is enabled using the +** SQLITE_ENABLE_FTS3 macro. But to avoid confusion we also all +** the SQLITE_ENABLE_FTS4 macro to serve as an alisse for SQLITE_ENABLE_FTS3. +*/ +#if defined(SQLITE_ENABLE_FTS4) && !defined(SQLITE_ENABLE_FTS3) +# define SQLITE_ENABLE_FTS3 #endif /* @@ -9786,10 +11556,9 @@ SQLITE_PRIVATE int sqlite3Corrupt(void); /* ** Internal function prototypes */ -SQLITE_PRIVATE int sqlite3StrICmp(const char *, const char *); -SQLITE_PRIVATE int sqlite3StrNICmp(const char *, const char *, int); -SQLITE_PRIVATE int sqlite3IsNumber(const char*, int*, u8); +#define sqlite3StrICmp sqlite3_stricmp SQLITE_PRIVATE int sqlite3Strlen30(const char*); +#define sqlite3StrNICmp sqlite3_strnicmp SQLITE_PRIVATE int sqlite3MallocInit(void); SQLITE_PRIVATE void sqlite3MallocEnd(void); @@ -9811,7 +11580,7 @@ SQLITE_PRIVATE void *sqlite3PageMalloc(int); SQLITE_PRIVATE void sqlite3PageFree(void*); SQLITE_PRIVATE void sqlite3MemSetDefault(void); SQLITE_PRIVATE void sqlite3BenignMallocHooks(void (*)(void), void (*)(void)); -SQLITE_PRIVATE int sqlite3MemoryAlarm(void (*)(void*, sqlite3_int64, int), void*, sqlite3_int64); +SQLITE_PRIVATE int sqlite3HeapNearlyFull(void); /* ** On systems with ample stack space and that support alloca(), make @@ -9840,7 +11609,8 @@ SQLITE_PRIVATE const sqlite3_mem_methods *sqlite3MemGetMemsys5(void); #ifndef SQLITE_MUTEX_OMIT -SQLITE_PRIVATE sqlite3_mutex_methods *sqlite3DefaultMutex(void); +SQLITE_PRIVATE sqlite3_mutex_methods const *sqlite3DefaultMutex(void); +SQLITE_PRIVATE sqlite3_mutex_methods const *sqlite3NoopMutex(void); SQLITE_PRIVATE sqlite3_mutex *sqlite3MutexAlloc(int); SQLITE_PRIVATE int sqlite3MutexInit(void); SQLITE_PRIVATE int sqlite3MutexEnd(void); @@ -9850,9 +11620,16 @@ SQLITE_PRIVATE int sqlite3StatusValue(int); SQLITE_PRIVATE void sqlite3StatusAdd(int, int); SQLITE_PRIVATE void sqlite3StatusSet(int, int); -SQLITE_PRIVATE int sqlite3IsNaN(double); +#ifndef SQLITE_OMIT_FLOATING_POINT +SQLITE_PRIVATE int sqlite3IsNaN(double); +#else +# define sqlite3IsNaN(X) 0 +#endif SQLITE_PRIVATE void sqlite3VXPrintf(StrAccum*, int, const char*, va_list); +#ifndef SQLITE_OMIT_TRACE +SQLITE_PRIVATE void sqlite3XPrintf(StrAccum*, const char*, ...); +#endif SQLITE_PRIVATE char *sqlite3MPrintf(sqlite3*,const char*, ...); SQLITE_PRIVATE char *sqlite3VMPrintf(sqlite3*,const char*, va_list); SQLITE_PRIVATE char *sqlite3MAppendf(sqlite3*,char*,const char*,...); @@ -9862,9 +11639,31 @@ SQLITE_PRIVATE void sqlite3DebugPrintf(const char*, ...); #if defined(SQLITE_TEST) SQLITE_PRIVATE void *sqlite3TestTextToPtr(const char*); #endif + +/* Output formatting for SQLITE_TESTCTRL_EXPLAIN */ +#if defined(SQLITE_ENABLE_TREE_EXPLAIN) +SQLITE_PRIVATE void sqlite3ExplainBegin(Vdbe*); +SQLITE_PRIVATE void sqlite3ExplainPrintf(Vdbe*, const char*, ...); +SQLITE_PRIVATE void sqlite3ExplainNL(Vdbe*); +SQLITE_PRIVATE void sqlite3ExplainPush(Vdbe*); +SQLITE_PRIVATE void sqlite3ExplainPop(Vdbe*); +SQLITE_PRIVATE void sqlite3ExplainFinish(Vdbe*); +SQLITE_PRIVATE void sqlite3ExplainSelect(Vdbe*, Select*); +SQLITE_PRIVATE void sqlite3ExplainExpr(Vdbe*, Expr*); +SQLITE_PRIVATE void sqlite3ExplainExprList(Vdbe*, ExprList*); +SQLITE_PRIVATE const char *sqlite3VdbeExplanation(Vdbe*); +#else +# define sqlite3ExplainBegin(X) +# define sqlite3ExplainSelect(A,B) +# define sqlite3ExplainExpr(A,B) +# define sqlite3ExplainExprList(A,B) +# define sqlite3ExplainFinish(X) +# define sqlite3VdbeExplanation(X) 0 +#endif + + SQLITE_PRIVATE void sqlite3SetString(char **, sqlite3*, const char*, ...); SQLITE_PRIVATE void sqlite3ErrorMsg(Parse*, const char*, ...); -SQLITE_PRIVATE void sqlite3ErrorClear(Parse*); SQLITE_PRIVATE int sqlite3Dequote(char*); SQLITE_PRIVATE int sqlite3KeywordCode(const unsigned char*, int); SQLITE_PRIVATE int sqlite3RunParser(Parse*, const char*, char **); @@ -9873,6 +11672,7 @@ SQLITE_PRIVATE int sqlite3GetTempReg(Parse*); SQLITE_PRIVATE void sqlite3ReleaseTempReg(Parse*,int); SQLITE_PRIVATE int sqlite3GetTempRange(Parse*,int); SQLITE_PRIVATE void sqlite3ReleaseTempRange(Parse*,int,int); +SQLITE_PRIVATE void sqlite3ClearTempRegCache(Parse*); SQLITE_PRIVATE Expr *sqlite3ExprAlloc(sqlite3*,int,const Token*,int); SQLITE_PRIVATE Expr *sqlite3Expr(sqlite3*,int,const char*); SQLITE_PRIVATE void sqlite3ExprAttachSubtrees(sqlite3*,Expr*,Expr*,Expr*); @@ -9880,7 +11680,6 @@ SQLITE_PRIVATE Expr *sqlite3PExpr(Parse*, int, Expr*, Expr*, const Token*); SQLITE_PRIVATE Expr *sqlite3ExprAnd(sqlite3*,Expr*, Expr*); SQLITE_PRIVATE Expr *sqlite3ExprFunction(Parse*,ExprList*, Token*); SQLITE_PRIVATE void sqlite3ExprAssignVarNumber(Parse*, Expr*); -SQLITE_PRIVATE void sqlite3ExprClear(sqlite3*, Expr*); SQLITE_PRIVATE void sqlite3ExprDelete(sqlite3*, Expr*); SQLITE_PRIVATE ExprList *sqlite3ExprListAppend(Parse*,ExprList*,Expr*); SQLITE_PRIVATE void sqlite3ExprListSetName(Parse*,ExprList*,Token*,int); @@ -9889,7 +11688,9 @@ SQLITE_PRIVATE void sqlite3ExprListDelete(sqlite3*, ExprList*); SQLITE_PRIVATE int sqlite3Init(sqlite3*, char**); SQLITE_PRIVATE int sqlite3InitCallback(void*, int, char**, char**); SQLITE_PRIVATE void sqlite3Pragma(Parse*,Token*,Token*,Token*,int); -SQLITE_PRIVATE void sqlite3ResetInternalSchema(sqlite3*, int); +SQLITE_PRIVATE void sqlite3ResetAllSchemasOfConnection(sqlite3*); +SQLITE_PRIVATE void sqlite3ResetOneSchema(sqlite3*,int); +SQLITE_PRIVATE void sqlite3CollapseDatabaseArray(sqlite3*); SQLITE_PRIVATE void sqlite3BeginParse(Parse*,int); SQLITE_PRIVATE void sqlite3CommitInternalChanges(sqlite3*); SQLITE_PRIVATE Table *sqlite3ResultSetOfSelect(Parse*,Select*); @@ -9903,6 +11704,10 @@ SQLITE_PRIVATE void sqlite3AddColumnType(Parse*,Token*); SQLITE_PRIVATE void sqlite3AddDefaultValue(Parse*,ExprSpan*); SQLITE_PRIVATE void sqlite3AddCollateType(Parse*, Token*); SQLITE_PRIVATE void sqlite3EndTable(Parse*,Token*,Token*,Select*); +SQLITE_PRIVATE int sqlite3ParseUri(const char*,const char*,unsigned int*, + sqlite3_vfs**,char**,char **); +SQLITE_PRIVATE Btree *sqlite3DbNameToBtree(sqlite3*,const char*); +SQLITE_PRIVATE int sqlite3CodeOnce(Parse *); SQLITE_PRIVATE Bitvec *sqlite3BitvecCreate(u32); SQLITE_PRIVATE int sqlite3BitvecTest(Bitvec*, u32); @@ -9927,7 +11732,8 @@ SQLITE_PRIVATE int sqlite3ViewGetColumnNames(Parse*,Table*); #endif SQLITE_PRIVATE void sqlite3DropTable(Parse*, SrcList*, int, int); -SQLITE_PRIVATE void sqlite3DeleteTable(Table*); +SQLITE_PRIVATE void sqlite3CodeDropTable(Parse*, Table*, int, int); +SQLITE_PRIVATE void sqlite3DeleteTable(sqlite3*, Table*); #ifndef SQLITE_OMIT_AUTOINCREMENT SQLITE_PRIVATE void sqlite3AutoincrementBegin(Parse *pParse); SQLITE_PRIVATE void sqlite3AutoincrementEnd(Parse *pParse); @@ -9936,7 +11742,7 @@ SQLITE_PRIVATE void sqlite3AutoincrementEnd(Parse *pParse); # define sqlite3AutoincrementEnd(X) #endif SQLITE_PRIVATE void sqlite3Insert(Parse*, SrcList*, ExprList*, Select*, IdList*, int); -SQLITE_PRIVATE void *sqlite3ArrayAllocate(sqlite3*,void*,int,int,int*,int*,int*); +SQLITE_PRIVATE void *sqlite3ArrayAllocate(sqlite3*,void*,int,int*,int*); SQLITE_PRIVATE IdList *sqlite3IdListAppend(sqlite3*, IdList*, Token*); SQLITE_PRIVATE int sqlite3IdListIndex(IdList*,const char*); SQLITE_PRIVATE SrcList *sqlite3SrcListEnlarge(sqlite3*, SrcList*, int, int); @@ -9949,7 +11755,7 @@ SQLITE_PRIVATE void sqlite3SrcListShiftJoinType(SrcList*); SQLITE_PRIVATE void sqlite3SrcListAssignCursors(Parse*, SrcList*); SQLITE_PRIVATE void sqlite3IdListDelete(sqlite3*, IdList*); SQLITE_PRIVATE void sqlite3SrcListDelete(sqlite3*, SrcList*); -SQLITE_PRIVATE void sqlite3CreateIndex(Parse*,Token*,Token*,SrcList*,ExprList*,int,Token*, +SQLITE_PRIVATE Index *sqlite3CreateIndex(Parse*,Token*,Token*,SrcList*,ExprList*,int,Token*, Token*, int, int); SQLITE_PRIVATE void sqlite3DropIndex(Parse*, SrcList*, int); SQLITE_PRIVATE int sqlite3Select(Parse*, Select*, SelectDest*); @@ -9964,18 +11770,18 @@ SQLITE_PRIVATE Expr *sqlite3LimitWhere(Parse *, SrcList *, Expr *, ExprList *, E #endif SQLITE_PRIVATE void sqlite3DeleteFrom(Parse*, SrcList*, Expr*); SQLITE_PRIVATE void sqlite3Update(Parse*, SrcList*, ExprList*, Expr*, int); -SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin(Parse*, SrcList*, Expr*, ExprList**, u16); +SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin(Parse*, SrcList*, Expr*, ExprList**,ExprList*,u16); SQLITE_PRIVATE void sqlite3WhereEnd(WhereInfo*); -SQLITE_PRIVATE int sqlite3ExprCodeGetColumn(Parse*, Table*, int, int, int, int); +SQLITE_PRIVATE int sqlite3ExprCodeGetColumn(Parse*, Table*, int, int, int, u8); +SQLITE_PRIVATE void sqlite3ExprCodeGetColumnOfTable(Vdbe*, Table*, int, int, int); SQLITE_PRIVATE void sqlite3ExprCodeMove(Parse*, int, int, int); SQLITE_PRIVATE void sqlite3ExprCodeCopy(Parse*, int, int, int); SQLITE_PRIVATE void sqlite3ExprCacheStore(Parse*, int, int, int); SQLITE_PRIVATE void sqlite3ExprCachePush(Parse*); SQLITE_PRIVATE void sqlite3ExprCachePop(Parse*, int); -SQLITE_PRIVATE void sqlite3ExprCacheRemove(Parse*, int); +SQLITE_PRIVATE void sqlite3ExprCacheRemove(Parse*, int, int); SQLITE_PRIVATE void sqlite3ExprCacheClear(Parse*); SQLITE_PRIVATE void sqlite3ExprCacheAffinityChange(Parse*, int, int); -SQLITE_PRIVATE void sqlite3ExprHardCopy(Parse*,int,int); SQLITE_PRIVATE int sqlite3ExprCode(Parse*, Expr*, int); SQLITE_PRIVATE int sqlite3ExprCodeTemp(Parse*, Expr*, int*); SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse*, Expr*, int); @@ -9993,15 +11799,16 @@ SQLITE_PRIVATE void sqlite3Vacuum(Parse*); SQLITE_PRIVATE int sqlite3RunVacuum(char**, sqlite3*); SQLITE_PRIVATE char *sqlite3NameFromToken(sqlite3*, Token*); SQLITE_PRIVATE int sqlite3ExprCompare(Expr*, Expr*); +SQLITE_PRIVATE int sqlite3ExprListCompare(ExprList*, ExprList*); SQLITE_PRIVATE void sqlite3ExprAnalyzeAggregates(NameContext*, Expr*); SQLITE_PRIVATE void sqlite3ExprAnalyzeAggList(NameContext*,ExprList*); SQLITE_PRIVATE Vdbe *sqlite3GetVdbe(Parse*); -SQLITE_PRIVATE Expr *sqlite3CreateIdExpr(Parse *, const char*); SQLITE_PRIVATE void sqlite3PrngSaveState(void); SQLITE_PRIVATE void sqlite3PrngRestoreState(void); SQLITE_PRIVATE void sqlite3PrngResetState(void); -SQLITE_PRIVATE void sqlite3RollbackAll(sqlite3*); +SQLITE_PRIVATE void sqlite3RollbackAll(sqlite3*,int); SQLITE_PRIVATE void sqlite3CodeVerifySchema(Parse*, int); +SQLITE_PRIVATE void sqlite3CodeVerifyNamedSchema(Parse*, const char *zDb); SQLITE_PRIVATE void sqlite3BeginTransaction(Parse*, int); SQLITE_PRIVATE void sqlite3CommitTransaction(Parse*); SQLITE_PRIVATE void sqlite3RollbackTransaction(Parse*); @@ -10011,32 +11818,31 @@ SQLITE_PRIVATE int sqlite3ExprIsConstant(Expr*); SQLITE_PRIVATE int sqlite3ExprIsConstantNotJoin(Expr*); SQLITE_PRIVATE int sqlite3ExprIsConstantOrFunction(Expr*); SQLITE_PRIVATE int sqlite3ExprIsInteger(Expr*, int*); +SQLITE_PRIVATE int sqlite3ExprCanBeNull(const Expr*); +SQLITE_PRIVATE void sqlite3ExprCodeIsNullJump(Vdbe*, const Expr*, int, int); +SQLITE_PRIVATE int sqlite3ExprNeedsNoAffinityChange(const Expr*, char); SQLITE_PRIVATE int sqlite3IsRowid(const char*); -SQLITE_PRIVATE void sqlite3GenerateRowDelete(Parse*, Table*, int, int, int); +SQLITE_PRIVATE void sqlite3GenerateRowDelete(Parse*, Table*, int, int, int, Trigger *, int); SQLITE_PRIVATE void sqlite3GenerateRowIndexDelete(Parse*, Table*, int, int*); SQLITE_PRIVATE int sqlite3GenerateIndexKey(Parse*, Index*, int, int, int); SQLITE_PRIVATE void sqlite3GenerateConstraintChecks(Parse*,Table*,int,int, int*,int,int,int,int,int*); -SQLITE_PRIVATE void sqlite3CompleteInsertion(Parse*, Table*, int, int, int*, int, int,int,int); +SQLITE_PRIVATE void sqlite3CompleteInsertion(Parse*, Table*, int, int, int*, int, int, int); SQLITE_PRIVATE int sqlite3OpenTableAndIndices(Parse*, Table*, int, int); SQLITE_PRIVATE void sqlite3BeginWriteOperation(Parse*, int, int); +SQLITE_PRIVATE void sqlite3MultiWrite(Parse*); +SQLITE_PRIVATE void sqlite3MayAbort(Parse*); +SQLITE_PRIVATE void sqlite3HaltConstraint(Parse*, int, char*, int); SQLITE_PRIVATE Expr *sqlite3ExprDup(sqlite3*,Expr*,int); SQLITE_PRIVATE ExprList *sqlite3ExprListDup(sqlite3*,ExprList*,int); SQLITE_PRIVATE SrcList *sqlite3SrcListDup(sqlite3*,SrcList*,int); SQLITE_PRIVATE IdList *sqlite3IdListDup(sqlite3*,IdList*); SQLITE_PRIVATE Select *sqlite3SelectDup(sqlite3*,Select*,int); SQLITE_PRIVATE void sqlite3FuncDefInsert(FuncDefHash*, FuncDef*); -SQLITE_PRIVATE FuncDef *sqlite3FindFunction(sqlite3*,const char*,int,int,u8,int); +SQLITE_PRIVATE FuncDef *sqlite3FindFunction(sqlite3*,const char*,int,int,u8,u8); SQLITE_PRIVATE void sqlite3RegisterBuiltinFunctions(sqlite3*); SQLITE_PRIVATE void sqlite3RegisterDateTimeFunctions(void); SQLITE_PRIVATE void sqlite3RegisterGlobalFunctions(void); -#ifdef SQLITE_DEBUG -SQLITE_PRIVATE int sqlite3SafetyOn(sqlite3*); -SQLITE_PRIVATE int sqlite3SafetyOff(sqlite3*); -#else -# define sqlite3SafetyOn(A) 0 -# define sqlite3SafetyOff(A) 0 -#endif SQLITE_PRIVATE int sqlite3SafetyCheckOk(sqlite3*); SQLITE_PRIVATE int sqlite3SafetyCheckSickOrOk(sqlite3*); SQLITE_PRIVATE void sqlite3ChangeCookie(Parse*, int); @@ -10053,24 +11859,30 @@ SQLITE_PRIVATE void sqlite3DropTrigger(Parse*, SrcList*, int); SQLITE_PRIVATE void sqlite3DropTriggerPtr(Parse*, Trigger*); SQLITE_PRIVATE Trigger *sqlite3TriggersExist(Parse *, Table*, int, ExprList*, int *pMask); SQLITE_PRIVATE Trigger *sqlite3TriggerList(Parse *, Table *); -SQLITE_PRIVATE int sqlite3CodeRowTrigger(Parse*, Trigger *, int, ExprList*, int, Table *, - int, int, int, int, u32*, u32*); +SQLITE_PRIVATE void sqlite3CodeRowTrigger(Parse*, Trigger *, int, ExprList*, int, Table *, + int, int, int); +SQLITE_PRIVATE void sqlite3CodeRowTriggerDirect(Parse *, Trigger *, Table *, int, int, int); void sqliteViewTriggers(Parse*, Table*, Expr*, int, ExprList*); SQLITE_PRIVATE void sqlite3DeleteTriggerStep(sqlite3*, TriggerStep*); SQLITE_PRIVATE TriggerStep *sqlite3TriggerSelectStep(sqlite3*,Select*); SQLITE_PRIVATE TriggerStep *sqlite3TriggerInsertStep(sqlite3*,Token*, IdList*, - ExprList*,Select*,int); -SQLITE_PRIVATE TriggerStep *sqlite3TriggerUpdateStep(sqlite3*,Token*,ExprList*, Expr*, int); + ExprList*,Select*,u8); +SQLITE_PRIVATE TriggerStep *sqlite3TriggerUpdateStep(sqlite3*,Token*,ExprList*, Expr*, u8); SQLITE_PRIVATE TriggerStep *sqlite3TriggerDeleteStep(sqlite3*,Token*, Expr*); SQLITE_PRIVATE void sqlite3DeleteTrigger(sqlite3*, Trigger*); SQLITE_PRIVATE void sqlite3UnlinkAndDeleteTrigger(sqlite3*,int,const char*); +SQLITE_PRIVATE u32 sqlite3TriggerColmask(Parse*,Trigger*,ExprList*,int,int,Table*,int); +# define sqlite3ParseToplevel(p) ((p)->pToplevel ? (p)->pToplevel : (p)) #else # define sqlite3TriggersExist(B,C,D,E,F) 0 # define sqlite3DeleteTrigger(A,B) # define sqlite3DropTriggerPtr(A,B) # define sqlite3UnlinkAndDeleteTrigger(A,B,C) -# define sqlite3CodeRowTrigger(A,B,C,D,E,F,G,H,I,J,K,L) 0 +# define sqlite3CodeRowTrigger(A,B,C,D,E,F,G,H,I) +# define sqlite3CodeRowTriggerDirect(A,B,C,D,E,F) # define sqlite3TriggerList(X, Y) 0 +# define sqlite3ParseToplevel(p) p +# define sqlite3TriggerColmask(A,B,C,D,E,F,G) 0 #endif SQLITE_PRIVATE int sqlite3JoinType(Parse*, Token*, Token*, Token*); @@ -10081,6 +11893,7 @@ SQLITE_PRIVATE void sqlite3AuthRead(Parse*,Expr*,Schema*,SrcList*); SQLITE_PRIVATE int sqlite3AuthCheck(Parse*,int, const char*, const char*, const char*); SQLITE_PRIVATE void sqlite3AuthContextPush(Parse*, AuthContext*, const char*); SQLITE_PRIVATE void sqlite3AuthContextPop(AuthContext*); +SQLITE_PRIVATE int sqlite3AuthReadCol(Parse*, const char *, const char *, int); #else # define sqlite3AuthRead(a,b,c,d) # define sqlite3AuthCheck(a,b,c,d,e) SQLITE_OK @@ -10089,20 +11902,18 @@ SQLITE_PRIVATE void sqlite3AuthContextPop(AuthContext*); #endif SQLITE_PRIVATE void sqlite3Attach(Parse*, Expr*, Expr*, Expr*); SQLITE_PRIVATE void sqlite3Detach(Parse*, Expr*); -SQLITE_PRIVATE int sqlite3BtreeFactory(const sqlite3 *db, const char *zFilename, - int omitJournal, int nCache, int flags, Btree **ppBtree); SQLITE_PRIVATE int sqlite3FixInit(DbFixer*, Parse*, int, const char*, const Token*); SQLITE_PRIVATE int sqlite3FixSrcList(DbFixer*, SrcList*); SQLITE_PRIVATE int sqlite3FixSelect(DbFixer*, Select*); SQLITE_PRIVATE int sqlite3FixExpr(DbFixer*, Expr*); SQLITE_PRIVATE int sqlite3FixExprList(DbFixer*, ExprList*); SQLITE_PRIVATE int sqlite3FixTriggerStep(DbFixer*, TriggerStep*); -SQLITE_PRIVATE int sqlite3AtoF(const char *z, double*); +SQLITE_PRIVATE int sqlite3AtoF(const char *z, double*, int, u8); SQLITE_PRIVATE int sqlite3GetInt32(const char *, int*); -SQLITE_PRIVATE int sqlite3FitsIn64Bits(const char *, int); +SQLITE_PRIVATE int sqlite3Atoi(const char*); SQLITE_PRIVATE int sqlite3Utf16ByteLen(const void *pData, int nChar); SQLITE_PRIVATE int sqlite3Utf8CharLen(const char *pData, int nByte); -SQLITE_PRIVATE int sqlite3Utf8Read(const u8*, const u8**); +SQLITE_PRIVATE u32 sqlite3Utf8Read(const u8*, const u8**); /* ** Routines to read and write variable-length integers. These used to @@ -10140,24 +11951,36 @@ SQLITE_PRIVATE int sqlite3VarintLen(u64 v); #define putVarint sqlite3PutVarint -SQLITE_PRIVATE void sqlite3IndexAffinityStr(Vdbe *, Index *); +SQLITE_PRIVATE const char *sqlite3IndexAffinityStr(Vdbe *, Index *); SQLITE_PRIVATE void sqlite3TableAffinityStr(Vdbe *, Table *); SQLITE_PRIVATE char sqlite3CompareAffinity(Expr *pExpr, char aff2); SQLITE_PRIVATE int sqlite3IndexAffinityOk(Expr *pExpr, char idx_affinity); SQLITE_PRIVATE char sqlite3ExprAffinity(Expr *pExpr); -SQLITE_PRIVATE int sqlite3Atoi64(const char*, i64*); +SQLITE_PRIVATE int sqlite3Atoi64(const char*, i64*, int, u8); SQLITE_PRIVATE void sqlite3Error(sqlite3*, int, const char*,...); SQLITE_PRIVATE void *sqlite3HexToBlob(sqlite3*, const char *z, int n); +SQLITE_PRIVATE u8 sqlite3HexToInt(int h); SQLITE_PRIVATE int sqlite3TwoPartName(Parse *, Token *, Token *, Token **); SQLITE_PRIVATE const char *sqlite3ErrStr(int); SQLITE_PRIVATE int sqlite3ReadSchema(Parse *pParse); SQLITE_PRIVATE CollSeq *sqlite3FindCollSeq(sqlite3*,u8 enc, const char*,int); SQLITE_PRIVATE CollSeq *sqlite3LocateCollSeq(Parse *pParse, const char*zName); SQLITE_PRIVATE CollSeq *sqlite3ExprCollSeq(Parse *pParse, Expr *pExpr); -SQLITE_PRIVATE Expr *sqlite3ExprSetColl(Parse *pParse, Expr *, Token *); +SQLITE_PRIVATE Expr *sqlite3ExprSetColl(Expr*, CollSeq*); +SQLITE_PRIVATE Expr *sqlite3ExprSetCollByToken(Parse *pParse, Expr*, Token*); SQLITE_PRIVATE int sqlite3CheckCollSeq(Parse *, CollSeq *); SQLITE_PRIVATE int sqlite3CheckObjectName(Parse *, const char *); SQLITE_PRIVATE void sqlite3VdbeSetChanges(sqlite3 *, int); +SQLITE_PRIVATE int sqlite3AddInt64(i64*,i64); +SQLITE_PRIVATE int sqlite3SubInt64(i64*,i64); +SQLITE_PRIVATE int sqlite3MulInt64(i64*,i64); +SQLITE_PRIVATE int sqlite3AbsInt32(int); +#ifdef SQLITE_ENABLE_8_3_NAMES +SQLITE_PRIVATE void sqlite3FileSuffix3(const char*, char*); +#else +# define sqlite3FileSuffix3(X,Y) +#endif +SQLITE_PRIVATE u8 sqlite3GetBoolean(const char *z,int); SQLITE_PRIVATE const void *sqlite3ValueText(sqlite3_value*, u8); SQLITE_PRIVATE int sqlite3ValueBytes(sqlite3_value*, u8); @@ -10165,57 +11988,69 @@ SQLITE_PRIVATE void sqlite3ValueSetStr(sqlite3_value*, int, const void *,u8, void(*)(void*)); SQLITE_PRIVATE void sqlite3ValueFree(sqlite3_value*); SQLITE_PRIVATE sqlite3_value *sqlite3ValueNew(sqlite3 *); -SQLITE_PRIVATE char *sqlite3Utf16to8(sqlite3 *, const void*, int); +SQLITE_PRIVATE char *sqlite3Utf16to8(sqlite3 *, const void*, int, u8); +#ifdef SQLITE_ENABLE_STAT3 +SQLITE_PRIVATE char *sqlite3Utf8to16(sqlite3 *, u8, char *, int, int *); +#endif SQLITE_PRIVATE int sqlite3ValueFromExpr(sqlite3 *, Expr *, u8, u8, sqlite3_value **); SQLITE_PRIVATE void sqlite3ValueApplyAffinity(sqlite3_value *, u8, u8); #ifndef SQLITE_AMALGAMATION +SQLITE_PRIVATE const unsigned char sqlite3OpcodeProperty[]; SQLITE_PRIVATE const unsigned char sqlite3UpperToLower[]; SQLITE_PRIVATE const unsigned char sqlite3CtypeMap[]; +SQLITE_PRIVATE const Token sqlite3IntTokens[]; SQLITE_PRIVATE SQLITE_WSD struct Sqlite3Config sqlite3Config; SQLITE_PRIVATE SQLITE_WSD FuncDefHash sqlite3GlobalFunctions; +#ifndef SQLITE_OMIT_WSD SQLITE_PRIVATE int sqlite3PendingByte; #endif -SQLITE_PRIVATE void sqlite3RootPageMoved(Db*, int, int); +#endif +SQLITE_PRIVATE void sqlite3RootPageMoved(sqlite3*, int, int, int); SQLITE_PRIVATE void sqlite3Reindex(Parse*, Token*, Token*); -SQLITE_PRIVATE void sqlite3AlterFunctions(sqlite3*); +SQLITE_PRIVATE void sqlite3AlterFunctions(void); SQLITE_PRIVATE void sqlite3AlterRenameTable(Parse*, SrcList*, Token*); SQLITE_PRIVATE int sqlite3GetToken(const unsigned char *, int *); SQLITE_PRIVATE void sqlite3NestedParse(Parse*, const char*, ...); SQLITE_PRIVATE void sqlite3ExpirePreparedStatements(sqlite3*); -SQLITE_PRIVATE void sqlite3CodeSubselect(Parse *, Expr *, int, int); +SQLITE_PRIVATE int sqlite3CodeSubselect(Parse *, Expr *, int, int); SQLITE_PRIVATE void sqlite3SelectPrep(Parse*, Select*, NameContext*); SQLITE_PRIVATE int sqlite3ResolveExprNames(NameContext*, Expr*); SQLITE_PRIVATE void sqlite3ResolveSelectNames(Parse*, Select*, NameContext*); SQLITE_PRIVATE int sqlite3ResolveOrderGroupBy(Parse*, Select*, ExprList*, const char*); -SQLITE_PRIVATE void sqlite3ColumnDefault(Vdbe *, Table *, int); +SQLITE_PRIVATE void sqlite3ColumnDefault(Vdbe *, Table *, int, int); SQLITE_PRIVATE void sqlite3AlterFinishAddColumn(Parse *, Token *); SQLITE_PRIVATE void sqlite3AlterBeginAddColumn(Parse *, SrcList *); -SQLITE_PRIVATE CollSeq *sqlite3GetCollSeq(sqlite3*, CollSeq *, const char*); +SQLITE_PRIVATE CollSeq *sqlite3GetCollSeq(sqlite3*, u8, CollSeq *, const char*); SQLITE_PRIVATE char sqlite3AffinityType(const char*); SQLITE_PRIVATE void sqlite3Analyze(Parse*, Token*, Token*); SQLITE_PRIVATE int sqlite3InvokeBusyHandler(BusyHandler*); SQLITE_PRIVATE int sqlite3FindDb(sqlite3*, Token*); SQLITE_PRIVATE int sqlite3FindDbName(sqlite3 *, const char *); SQLITE_PRIVATE int sqlite3AnalysisLoad(sqlite3*,int iDB); +SQLITE_PRIVATE void sqlite3DeleteIndexSamples(sqlite3*,Index*); SQLITE_PRIVATE void sqlite3DefaultRowEst(Index*); SQLITE_PRIVATE void sqlite3RegisterLikeFunctions(sqlite3*, int); SQLITE_PRIVATE int sqlite3IsLikeFunction(sqlite3*,Expr*,int*,char*); SQLITE_PRIVATE void sqlite3MinimumFileFormat(Parse*, int, int); -SQLITE_PRIVATE void sqlite3SchemaFree(void *); +SQLITE_PRIVATE void sqlite3SchemaClear(void *); SQLITE_PRIVATE Schema *sqlite3SchemaGet(sqlite3 *, Btree *); SQLITE_PRIVATE int sqlite3SchemaToIndex(sqlite3 *db, Schema *); SQLITE_PRIVATE KeyInfo *sqlite3IndexKeyinfo(Parse *, Index *); SQLITE_PRIVATE int sqlite3CreateFunc(sqlite3 *, const char *, int, int, void *, void (*)(sqlite3_context*,int,sqlite3_value **), - void (*)(sqlite3_context*,int,sqlite3_value **), void (*)(sqlite3_context*)); + void (*)(sqlite3_context*,int,sqlite3_value **), void (*)(sqlite3_context*), + FuncDestructor *pDestructor +); SQLITE_PRIVATE int sqlite3ApiExit(sqlite3 *db, int); SQLITE_PRIVATE int sqlite3OpenTempDatabase(Parse *); SQLITE_PRIVATE void sqlite3StrAccumInit(StrAccum*, char*, int, int); SQLITE_PRIVATE void sqlite3StrAccumAppend(StrAccum*,const char*,int); +SQLITE_PRIVATE void sqlite3AppendSpace(StrAccum*,int); SQLITE_PRIVATE char *sqlite3StrAccumFinish(StrAccum*); SQLITE_PRIVATE void sqlite3StrAccumReset(StrAccum*); SQLITE_PRIVATE void sqlite3SelectDestInit(SelectDest*,int,int); +SQLITE_PRIVATE Expr *sqlite3CreateColumnExpr(sqlite3 *, SrcList *, int, int); SQLITE_PRIVATE void sqlite3BackupRestart(sqlite3_backup *); SQLITE_PRIVATE void sqlite3BackupUpdate(sqlite3_backup *, Pgno, const u8 *); @@ -10248,37 +12083,76 @@ SQLITE_PRIVATE int sqlite3Utf8To8(unsigned char*); #endif #ifdef SQLITE_OMIT_VIRTUALTABLE -# define sqlite3VtabClear(X) +# define sqlite3VtabClear(Y) # define sqlite3VtabSync(X,Y) SQLITE_OK # define sqlite3VtabRollback(X) # define sqlite3VtabCommit(X) # define sqlite3VtabInSync(db) 0 +# define sqlite3VtabLock(X) +# define sqlite3VtabUnlock(X) +# define sqlite3VtabUnlockList(X) +# define sqlite3VtabSavepoint(X, Y, Z) SQLITE_OK +# define sqlite3GetVTable(X,Y) ((VTable*)0) #else -SQLITE_PRIVATE void sqlite3VtabClear(Table*); +SQLITE_PRIVATE void sqlite3VtabClear(sqlite3 *db, Table*); +SQLITE_PRIVATE void sqlite3VtabDisconnect(sqlite3 *db, Table *p); SQLITE_PRIVATE int sqlite3VtabSync(sqlite3 *db, char **); SQLITE_PRIVATE int sqlite3VtabRollback(sqlite3 *db); SQLITE_PRIVATE int sqlite3VtabCommit(sqlite3 *db); +SQLITE_PRIVATE void sqlite3VtabLock(VTable *); +SQLITE_PRIVATE void sqlite3VtabUnlock(VTable *); +SQLITE_PRIVATE void sqlite3VtabUnlockList(sqlite3*); +SQLITE_PRIVATE int sqlite3VtabSavepoint(sqlite3 *, int, int); +SQLITE_PRIVATE VTable *sqlite3GetVTable(sqlite3*, Table*); # define sqlite3VtabInSync(db) ((db)->nVTrans>0 && (db)->aVTrans==0) #endif SQLITE_PRIVATE void sqlite3VtabMakeWritable(Parse*,Table*); -SQLITE_PRIVATE void sqlite3VtabLock(sqlite3_vtab*); -SQLITE_PRIVATE void sqlite3VtabUnlock(sqlite3*, sqlite3_vtab*); -SQLITE_PRIVATE void sqlite3VtabBeginParse(Parse*, Token*, Token*, Token*); +SQLITE_PRIVATE void sqlite3VtabBeginParse(Parse*, Token*, Token*, Token*, int); SQLITE_PRIVATE void sqlite3VtabFinishParse(Parse*, Token*); SQLITE_PRIVATE void sqlite3VtabArgInit(Parse*); SQLITE_PRIVATE void sqlite3VtabArgExtend(Parse*, Token*); SQLITE_PRIVATE int sqlite3VtabCallCreate(sqlite3*, int, const char *, char **); SQLITE_PRIVATE int sqlite3VtabCallConnect(Parse*, Table*); SQLITE_PRIVATE int sqlite3VtabCallDestroy(sqlite3*, int, const char *); -SQLITE_PRIVATE int sqlite3VtabBegin(sqlite3 *, sqlite3_vtab *); +SQLITE_PRIVATE int sqlite3VtabBegin(sqlite3 *, VTable *); SQLITE_PRIVATE FuncDef *sqlite3VtabOverloadFunction(sqlite3 *,FuncDef*, int nArg, Expr*); SQLITE_PRIVATE void sqlite3InvalidFunction(sqlite3_context*,int,sqlite3_value**); +SQLITE_PRIVATE int sqlite3VdbeParameterIndex(Vdbe*, const char*, int); SQLITE_PRIVATE int sqlite3TransferBindings(sqlite3_stmt *, sqlite3_stmt *); SQLITE_PRIVATE int sqlite3Reprepare(Vdbe*); SQLITE_PRIVATE void sqlite3ExprListCheckLength(Parse*, ExprList*, const char*); SQLITE_PRIVATE CollSeq *sqlite3BinaryCompareCollSeq(Parse *, Expr *, Expr *); SQLITE_PRIVATE int sqlite3TempInMemory(const sqlite3*); - +SQLITE_PRIVATE const char *sqlite3JournalModename(int); +SQLITE_PRIVATE int sqlite3Checkpoint(sqlite3*, int, int, int*, int*); +SQLITE_PRIVATE int sqlite3WalDefaultHook(void*,sqlite3*,const char*,int); + +/* Declarations for functions in fkey.c. All of these are replaced by +** no-op macros if OMIT_FOREIGN_KEY is defined. In this case no foreign +** key functionality is available. If OMIT_TRIGGER is defined but +** OMIT_FOREIGN_KEY is not, only some of the functions are no-oped. In +** this case foreign keys are parsed, but no other functionality is +** provided (enforcement of FK constraints requires the triggers sub-system). +*/ +#if !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER) +SQLITE_PRIVATE void sqlite3FkCheck(Parse*, Table*, int, int); +SQLITE_PRIVATE void sqlite3FkDropTable(Parse*, SrcList *, Table*); +SQLITE_PRIVATE void sqlite3FkActions(Parse*, Table*, ExprList*, int); +SQLITE_PRIVATE int sqlite3FkRequired(Parse*, Table*, int*, int); +SQLITE_PRIVATE u32 sqlite3FkOldmask(Parse*, Table*); +SQLITE_PRIVATE FKey *sqlite3FkReferences(Table *); +#else + #define sqlite3FkActions(a,b,c,d) + #define sqlite3FkCheck(a,b,c,d) + #define sqlite3FkDropTable(a,b,c) + #define sqlite3FkOldmask(a,b) 0 + #define sqlite3FkRequired(a,b,c,d) 0 +#endif +#ifndef SQLITE_OMIT_FOREIGN_KEY +SQLITE_PRIVATE void sqlite3FkDelete(sqlite3 *, Table*); +#else + #define sqlite3FkDelete(a,b) +#endif /* @@ -10358,7 +12232,50 @@ SQLITE_PRIVATE void (*sqlite3IoTrace)(const char*,...); # define sqlite3VdbeIOTraceSql(X) #endif +/* +** These routines are available for the mem2.c debugging memory allocator +** only. They are used to verify that different "types" of memory +** allocations are properly tracked by the system. +** +** sqlite3MemdebugSetType() sets the "type" of an allocation to one of +** the MEMTYPE_* macros defined below. The type must be a bitmask with +** a single bit set. +** +** sqlite3MemdebugHasType() returns true if any of the bits in its second +** argument match the type set by the previous sqlite3MemdebugSetType(). +** sqlite3MemdebugHasType() is intended for use inside assert() statements. +** +** sqlite3MemdebugNoType() returns true if none of the bits in its second +** argument match the type set by the previous sqlite3MemdebugSetType(). +** +** Perhaps the most important point is the difference between MEMTYPE_HEAP +** and MEMTYPE_LOOKASIDE. If an allocation is MEMTYPE_LOOKASIDE, that means +** it might have been allocated by lookaside, except the allocation was +** too large or lookaside was already full. It is important to verify +** that allocations that might have been satisfied by lookaside are not +** passed back to non-lookaside free() routines. Asserts such as the +** example above are placed on the non-lookaside free() routines to verify +** this constraint. +** +** All of this is no-op for a production build. It only comes into +** play when the SQLITE_MEMDEBUG compile-time option is used. +*/ +#ifdef SQLITE_MEMDEBUG +SQLITE_PRIVATE void sqlite3MemdebugSetType(void*,u8); +SQLITE_PRIVATE int sqlite3MemdebugHasType(void*,u8); +SQLITE_PRIVATE int sqlite3MemdebugNoType(void*,u8); +#else +# define sqlite3MemdebugSetType(X,Y) /* no-op */ +# define sqlite3MemdebugHasType(X,Y) 1 +# define sqlite3MemdebugNoType(X,Y) 1 #endif +#define MEMTYPE_HEAP 0x01 /* General heap allocations */ +#define MEMTYPE_LOOKASIDE 0x02 /* Might have been lookaside memory */ +#define MEMTYPE_SCRATCH 0x04 /* Scratch allocations */ +#define MEMTYPE_PCACHE 0x08 /* Page cache allocations */ +#define MEMTYPE_DB 0x10 /* Uses sqlite3DbMalloc, not sqlite_malloc */ + +#endif /* _SQLITEINT_H_ */ /************** End of sqliteInt.h *******************************************/ /************** Begin file global.c ******************************************/ @@ -10375,11 +12292,8 @@ SQLITE_PRIVATE void (*sqlite3IoTrace)(const char*,...); ************************************************************************* ** ** This file contains definitions of global variables and contants. -** -** $Id: global.c,v 1.12 2009/02/05 16:31:46 drh Exp $ */ - /* An array to map all upper-case characters into their corresponding ** lower-case character. ** @@ -10435,6 +12349,7 @@ SQLITE_PRIVATE const unsigned char sqlite3UpperToLower[] = { ** isalnum() 0x06 ** isxdigit() 0x08 ** toupper() 0x20 +** SQLite identifier character 0x40 ** ** Bit 0x20 is set if the mapped character requires translation to upper ** case. i.e. if the character is a lower-case ASCII character. @@ -10446,6 +12361,11 @@ SQLITE_PRIVATE const unsigned char sqlite3UpperToLower[] = { ** Standard function tolower() is implemented using the sqlite3UpperToLower[] ** array. tolower() is used more often than toupper() by SQLite. ** +** Bit 0x40 is set if the character non-alphanumeric and can be used in an +** SQLite identifier. Identifiers are alphanumerics, "_", "$", and any +** non-ASCII UTF character. Hence the test for whether or not a character is +** part of an identifier is 0x46. +** ** SQLite's versions are identical to the standard versions assuming a ** locale of "C". They are implemented as macros in sqliteInt.h. */ @@ -10455,7 +12375,7 @@ SQLITE_PRIVATE const unsigned char sqlite3CtypeMap[256] = { 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, /* 08..0f ........ */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 10..17 ........ */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 18..1f ........ */ - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 20..27 !"#$%&' */ + 0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, /* 20..27 !"#$%&' */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 28..2f ()*+,-./ */ 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, /* 30..37 01234567 */ 0x0c, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 38..3f 89:;<=>? */ @@ -10463,33 +12383,35 @@ SQLITE_PRIVATE const unsigned char sqlite3CtypeMap[256] = { 0x00, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x02, /* 40..47 @ABCDEFG */ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, /* 48..4f HIJKLMNO */ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, /* 50..57 PQRSTUVW */ - 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, /* 58..5f XYZ[\]^_ */ + 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x40, /* 58..5f XYZ[\]^_ */ 0x00, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x22, /* 60..67 `abcdefg */ 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, /* 68..6f hijklmno */ 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, /* 70..77 pqrstuvw */ 0x22, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, /* 78..7f xyz{|}~. */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 80..87 ........ */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 88..8f ........ */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 90..97 ........ */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 98..9f ........ */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* a0..a7 ........ */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* a8..af ........ */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* b0..b7 ........ */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* b8..bf ........ */ - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* c0..c7 ........ */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* c8..cf ........ */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* d0..d7 ........ */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* d8..df ........ */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* e0..e7 ........ */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* e8..ef ........ */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* f0..f7 ........ */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* f8..ff ........ */ + 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* 80..87 ........ */ + 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* 88..8f ........ */ + 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* 90..97 ........ */ + 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* 98..9f ........ */ + 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* a0..a7 ........ */ + 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* a8..af ........ */ + 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* b0..b7 ........ */ + 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* b8..bf ........ */ + + 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* c0..c7 ........ */ + 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* c8..cf ........ */ + 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* d0..d7 ........ */ + 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* d8..df ........ */ + 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* e0..e7 ........ */ + 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* e8..ef ........ */ + 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* f0..f7 ........ */ + 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40 /* f8..ff ........ */ }; #endif - +#ifndef SQLITE_USE_URI +# define SQLITE_USE_URI 0 +#endif /* ** The following singleton contains the global configuration for @@ -10499,12 +12421,13 @@ SQLITE_PRIVATE SQLITE_WSD struct Sqlite3Config sqlite3Config = { SQLITE_DEFAULT_MEMSTATUS, /* bMemstat */ 1, /* bCoreMutex */ SQLITE_THREADSAFE==1, /* bFullMutex */ + SQLITE_USE_URI, /* bOpenUri */ 0x7ffffffe, /* mxStrlen */ - 100, /* szLookaside */ + 128, /* szLookaside */ 500, /* nLookaside */ {0,0,0,0,0,0,0,0}, /* m */ {0,0,0,0,0,0,0,0,0}, /* mutex */ - {0,0,0,0,0,0,0,0,0,0,0}, /* pcache */ + {0,0,0,0,0,0,0,0,0,0,0,0,0},/* pcache2 */ (void*)0, /* pHeap */ 0, /* nHeap */ 0, 0, /* mnHeap, mxHeap */ @@ -10516,12 +12439,17 @@ SQLITE_PRIVATE SQLITE_WSD struct Sqlite3Config sqlite3Config = { 0, /* nPage */ 0, /* mxParserStack */ 0, /* sharedCacheEnabled */ - /* All the rest need to always be zero */ + /* All the rest should always be initialized to zero */ 0, /* isInit */ 0, /* inProgress */ + 0, /* isMutexInit */ 0, /* isMallocInit */ + 0, /* isPCacheInit */ 0, /* pInitMutex */ 0, /* nRefInitMutex */ + 0, /* xLog */ + 0, /* pLogArg */ + 0, /* bLocaltimeFault */ }; @@ -10532,6 +12460,15 @@ SQLITE_PRIVATE SQLITE_WSD struct Sqlite3Config sqlite3Config = { */ SQLITE_PRIVATE SQLITE_WSD FuncDefHash sqlite3GlobalFunctions; +/* +** Constant tokens for values 0 and 1. +*/ +SQLITE_PRIVATE const Token sqlite3IntTokens[] = { + { "0", 1 }, + { "1", 1 } +}; + + /* ** The value of the "pending" byte must be 0x40000000 (1 byte past the ** 1-gibabyte boundary) in a compatible database. SQLite never uses @@ -10550,12 +12487,22 @@ SQLITE_PRIVATE SQLITE_WSD FuncDefHash sqlite3GlobalFunctions; ** Changing the pending byte during operating results in undefined ** and dileterious behavior. */ +#ifndef SQLITE_OMIT_WSD SQLITE_PRIVATE int sqlite3PendingByte = 0x40000000; +#endif + +/* +** Properties of opcodes. The OPFLG_INITIALIZER macro is +** created by mkopcodeh.awk during compilation. Data is obtained +** from the comments following the "case OP_xxxx:" statements in +** the vdbe.c file. +*/ +SQLITE_PRIVATE const unsigned char sqlite3OpcodeProperty[] = OPFLG_INITIALIZER; /************** End of global.c **********************************************/ -/************** Begin file status.c ******************************************/ +/************** Begin file ctime.c *******************************************/ /* -** 2008 June 18 +** 2010 February 23 ** ** The author disclaims copyright to this source code. In place of ** a legal notice, here is a blessing: @@ -10566,120 +12513,400 @@ SQLITE_PRIVATE int sqlite3PendingByte = 0x40000000; ** ************************************************************************* ** -** This module implements the sqlite3_status() interface and related -** functionality. -** -** $Id: status.c,v 1.9 2008/09/02 00:52:52 drh Exp $ +** This file implements routines used to report what compile-time options +** SQLite was built with. */ +#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS + + /* -** Variables in which to record status information. +** An array of names of all compile-time options. This array should +** be sorted A-Z. +** +** This array looks large, but in a typical installation actually uses +** only a handful of compile-time options, so most times this array is usually +** rather short and uses little memory space. */ -typedef struct sqlite3StatType sqlite3StatType; -static SQLITE_WSD struct sqlite3StatType { - int nowValue[9]; /* Current value */ - int mxValue[9]; /* Maximum value */ -} sqlite3Stat = { {0,}, {0,} }; +static const char * const azCompileOpt[] = { +/* These macros are provided to "stringify" the value of the define +** for those options in which the value is meaningful. */ +#define CTIMEOPT_VAL_(opt) #opt +#define CTIMEOPT_VAL(opt) CTIMEOPT_VAL_(opt) -/* The "wsdStat" macro will resolve to the status information -** state vector. If writable static data is unsupported on the target, -** we have to locate the state vector at run-time. In the more common -** case where writable static data is supported, wsdStat can refer directly -** to the "sqlite3Stat" state vector declared above. +#ifdef SQLITE_32BIT_ROWID + "32BIT_ROWID", +#endif +#ifdef SQLITE_4_BYTE_ALIGNED_MALLOC + "4_BYTE_ALIGNED_MALLOC", +#endif +#ifdef SQLITE_CASE_SENSITIVE_LIKE + "CASE_SENSITIVE_LIKE", +#endif +#ifdef SQLITE_CHECK_PAGES + "CHECK_PAGES", +#endif +#ifdef SQLITE_COVERAGE_TEST + "COVERAGE_TEST", +#endif +#ifdef SQLITE_CURDIR + "CURDIR", +#endif +#ifdef SQLITE_DEBUG + "DEBUG", +#endif +#ifdef SQLITE_DEFAULT_LOCKING_MODE + "DEFAULT_LOCKING_MODE=" CTIMEOPT_VAL(SQLITE_DEFAULT_LOCKING_MODE), +#endif +#ifdef SQLITE_DISABLE_DIRSYNC + "DISABLE_DIRSYNC", +#endif +#ifdef SQLITE_DISABLE_LFS + "DISABLE_LFS", +#endif +#ifdef SQLITE_ENABLE_ATOMIC_WRITE + "ENABLE_ATOMIC_WRITE", +#endif +#ifdef SQLITE_ENABLE_CEROD + "ENABLE_CEROD", +#endif +#ifdef SQLITE_ENABLE_COLUMN_METADATA + "ENABLE_COLUMN_METADATA", +#endif +#ifdef SQLITE_ENABLE_EXPENSIVE_ASSERT + "ENABLE_EXPENSIVE_ASSERT", +#endif +#ifdef SQLITE_ENABLE_FTS1 + "ENABLE_FTS1", +#endif +#ifdef SQLITE_ENABLE_FTS2 + "ENABLE_FTS2", +#endif +#ifdef SQLITE_ENABLE_FTS3 + "ENABLE_FTS3", +#endif +#ifdef SQLITE_ENABLE_FTS3_PARENTHESIS + "ENABLE_FTS3_PARENTHESIS", +#endif +#ifdef SQLITE_ENABLE_FTS4 + "ENABLE_FTS4", +#endif +#ifdef SQLITE_ENABLE_ICU + "ENABLE_ICU", +#endif +#ifdef SQLITE_ENABLE_IOTRACE + "ENABLE_IOTRACE", +#endif +#ifdef SQLITE_ENABLE_LOAD_EXTENSION + "ENABLE_LOAD_EXTENSION", +#endif +#ifdef SQLITE_ENABLE_LOCKING_STYLE + "ENABLE_LOCKING_STYLE=" CTIMEOPT_VAL(SQLITE_ENABLE_LOCKING_STYLE), +#endif +#ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT + "ENABLE_MEMORY_MANAGEMENT", +#endif +#ifdef SQLITE_ENABLE_MEMSYS3 + "ENABLE_MEMSYS3", +#endif +#ifdef SQLITE_ENABLE_MEMSYS5 + "ENABLE_MEMSYS5", +#endif +#ifdef SQLITE_ENABLE_OVERSIZE_CELL_CHECK + "ENABLE_OVERSIZE_CELL_CHECK", +#endif +#ifdef SQLITE_ENABLE_RTREE + "ENABLE_RTREE", +#endif +#ifdef SQLITE_ENABLE_STAT3 + "ENABLE_STAT3", +#endif +#ifdef SQLITE_ENABLE_UNLOCK_NOTIFY + "ENABLE_UNLOCK_NOTIFY", +#endif +#ifdef SQLITE_ENABLE_UPDATE_DELETE_LIMIT + "ENABLE_UPDATE_DELETE_LIMIT", +#endif +#ifdef SQLITE_HAS_CODEC + "HAS_CODEC", +#endif +#ifdef SQLITE_HAVE_ISNAN + "HAVE_ISNAN", +#endif +#ifdef SQLITE_HOMEGROWN_RECURSIVE_MUTEX + "HOMEGROWN_RECURSIVE_MUTEX", +#endif +#ifdef SQLITE_IGNORE_AFP_LOCK_ERRORS + "IGNORE_AFP_LOCK_ERRORS", +#endif +#ifdef SQLITE_IGNORE_FLOCK_LOCK_ERRORS + "IGNORE_FLOCK_LOCK_ERRORS", +#endif +#ifdef SQLITE_INT64_TYPE + "INT64_TYPE", +#endif +#ifdef SQLITE_LOCK_TRACE + "LOCK_TRACE", +#endif +#ifdef SQLITE_MAX_SCHEMA_RETRY + "MAX_SCHEMA_RETRY=" CTIMEOPT_VAL(SQLITE_MAX_SCHEMA_RETRY), +#endif +#ifdef SQLITE_MEMDEBUG + "MEMDEBUG", +#endif +#ifdef SQLITE_MIXED_ENDIAN_64BIT_FLOAT + "MIXED_ENDIAN_64BIT_FLOAT", +#endif +#ifdef SQLITE_NO_SYNC + "NO_SYNC", +#endif +#ifdef SQLITE_OMIT_ALTERTABLE + "OMIT_ALTERTABLE", +#endif +#ifdef SQLITE_OMIT_ANALYZE + "OMIT_ANALYZE", +#endif +#ifdef SQLITE_OMIT_ATTACH + "OMIT_ATTACH", +#endif +#ifdef SQLITE_OMIT_AUTHORIZATION + "OMIT_AUTHORIZATION", +#endif +#ifdef SQLITE_OMIT_AUTOINCREMENT + "OMIT_AUTOINCREMENT", +#endif +#ifdef SQLITE_OMIT_AUTOINIT + "OMIT_AUTOINIT", +#endif +#ifdef SQLITE_OMIT_AUTOMATIC_INDEX + "OMIT_AUTOMATIC_INDEX", +#endif +#ifdef SQLITE_OMIT_AUTORESET + "OMIT_AUTORESET", +#endif +#ifdef SQLITE_OMIT_AUTOVACUUM + "OMIT_AUTOVACUUM", +#endif +#ifdef SQLITE_OMIT_BETWEEN_OPTIMIZATION + "OMIT_BETWEEN_OPTIMIZATION", +#endif +#ifdef SQLITE_OMIT_BLOB_LITERAL + "OMIT_BLOB_LITERAL", +#endif +#ifdef SQLITE_OMIT_BTREECOUNT + "OMIT_BTREECOUNT", +#endif +#ifdef SQLITE_OMIT_BUILTIN_TEST + "OMIT_BUILTIN_TEST", +#endif +#ifdef SQLITE_OMIT_CAST + "OMIT_CAST", +#endif +#ifdef SQLITE_OMIT_CHECK + "OMIT_CHECK", +#endif +/* // redundant +** #ifdef SQLITE_OMIT_COMPILEOPTION_DIAGS +** "OMIT_COMPILEOPTION_DIAGS", +** #endif */ +#ifdef SQLITE_OMIT_COMPLETE + "OMIT_COMPLETE", +#endif +#ifdef SQLITE_OMIT_COMPOUND_SELECT + "OMIT_COMPOUND_SELECT", +#endif +#ifdef SQLITE_OMIT_DATETIME_FUNCS + "OMIT_DATETIME_FUNCS", +#endif +#ifdef SQLITE_OMIT_DECLTYPE + "OMIT_DECLTYPE", +#endif +#ifdef SQLITE_OMIT_DEPRECATED + "OMIT_DEPRECATED", +#endif +#ifdef SQLITE_OMIT_DISKIO + "OMIT_DISKIO", +#endif +#ifdef SQLITE_OMIT_EXPLAIN + "OMIT_EXPLAIN", +#endif +#ifdef SQLITE_OMIT_FLAG_PRAGMAS + "OMIT_FLAG_PRAGMAS", +#endif +#ifdef SQLITE_OMIT_FLOATING_POINT + "OMIT_FLOATING_POINT", +#endif +#ifdef SQLITE_OMIT_FOREIGN_KEY + "OMIT_FOREIGN_KEY", +#endif +#ifdef SQLITE_OMIT_GET_TABLE + "OMIT_GET_TABLE", +#endif +#ifdef SQLITE_OMIT_INCRBLOB + "OMIT_INCRBLOB", +#endif +#ifdef SQLITE_OMIT_INTEGRITY_CHECK + "OMIT_INTEGRITY_CHECK", +#endif +#ifdef SQLITE_OMIT_LIKE_OPTIMIZATION + "OMIT_LIKE_OPTIMIZATION", +#endif +#ifdef SQLITE_OMIT_LOAD_EXTENSION + "OMIT_LOAD_EXTENSION", +#endif +#ifdef SQLITE_OMIT_LOCALTIME + "OMIT_LOCALTIME", +#endif +#ifdef SQLITE_OMIT_LOOKASIDE + "OMIT_LOOKASIDE", +#endif +#ifdef SQLITE_OMIT_MEMORYDB + "OMIT_MEMORYDB", +#endif +#ifdef SQLITE_OMIT_MERGE_SORT + "OMIT_MERGE_SORT", +#endif +#ifdef SQLITE_OMIT_OR_OPTIMIZATION + "OMIT_OR_OPTIMIZATION", +#endif +#ifdef SQLITE_OMIT_PAGER_PRAGMAS + "OMIT_PAGER_PRAGMAS", +#endif +#ifdef SQLITE_OMIT_PRAGMA + "OMIT_PRAGMA", +#endif +#ifdef SQLITE_OMIT_PROGRESS_CALLBACK + "OMIT_PROGRESS_CALLBACK", +#endif +#ifdef SQLITE_OMIT_QUICKBALANCE + "OMIT_QUICKBALANCE", +#endif +#ifdef SQLITE_OMIT_REINDEX + "OMIT_REINDEX", +#endif +#ifdef SQLITE_OMIT_SCHEMA_PRAGMAS + "OMIT_SCHEMA_PRAGMAS", +#endif +#ifdef SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS + "OMIT_SCHEMA_VERSION_PRAGMAS", +#endif +#ifdef SQLITE_OMIT_SHARED_CACHE + "OMIT_SHARED_CACHE", +#endif +#ifdef SQLITE_OMIT_SUBQUERY + "OMIT_SUBQUERY", +#endif +#ifdef SQLITE_OMIT_TCL_VARIABLE + "OMIT_TCL_VARIABLE", +#endif +#ifdef SQLITE_OMIT_TEMPDB + "OMIT_TEMPDB", +#endif +#ifdef SQLITE_OMIT_TRACE + "OMIT_TRACE", +#endif +#ifdef SQLITE_OMIT_TRIGGER + "OMIT_TRIGGER", +#endif +#ifdef SQLITE_OMIT_TRUNCATE_OPTIMIZATION + "OMIT_TRUNCATE_OPTIMIZATION", +#endif +#ifdef SQLITE_OMIT_UTF16 + "OMIT_UTF16", +#endif +#ifdef SQLITE_OMIT_VACUUM + "OMIT_VACUUM", +#endif +#ifdef SQLITE_OMIT_VIEW + "OMIT_VIEW", +#endif +#ifdef SQLITE_OMIT_VIRTUALTABLE + "OMIT_VIRTUALTABLE", +#endif +#ifdef SQLITE_OMIT_WAL + "OMIT_WAL", +#endif #ifdef SQLITE_OMIT_WSD -# define wsdStatInit sqlite3StatType *x = &GLOBAL(sqlite3StatType,sqlite3Stat) -# define wsdStat x[0] -#else -# define wsdStatInit -# define wsdStat sqlite3Stat + "OMIT_WSD", #endif +#ifdef SQLITE_OMIT_XFER_OPT + "OMIT_XFER_OPT", +#endif +#ifdef SQLITE_PERFORMANCE_TRACE + "PERFORMANCE_TRACE", +#endif +#ifdef SQLITE_PROXY_DEBUG + "PROXY_DEBUG", +#endif +#ifdef SQLITE_SECURE_DELETE + "SECURE_DELETE", +#endif +#ifdef SQLITE_SMALL_STACK + "SMALL_STACK", +#endif +#ifdef SQLITE_SOUNDEX + "SOUNDEX", +#endif +#ifdef SQLITE_TCL + "TCL", +#endif +#ifdef SQLITE_TEMP_STORE + "TEMP_STORE=" CTIMEOPT_VAL(SQLITE_TEMP_STORE), +#endif +#ifdef SQLITE_TEST + "TEST", +#endif +#ifdef SQLITE_THREADSAFE + "THREADSAFE=" CTIMEOPT_VAL(SQLITE_THREADSAFE), +#endif +#ifdef SQLITE_USE_ALLOCA + "USE_ALLOCA", +#endif +#ifdef SQLITE_ZERO_MALLOC + "ZERO_MALLOC" +#endif +}; /* -** Return the current value of a status parameter. -*/ -SQLITE_PRIVATE int sqlite3StatusValue(int op){ - wsdStatInit; - assert( op>=0 && op=0 && opwsdStat.mxValue[op] ){ - wsdStat.mxValue[op] = wsdStat.nowValue[op]; - } -} +SQLITE_API int sqlite3_compileoption_used(const char *zOptName){ + int i, n; + if( sqlite3StrNICmp(zOptName, "SQLITE_", 7)==0 ) zOptName += 7; + n = sqlite3Strlen30(zOptName); -/* -** Set the value of a status to X. -*/ -SQLITE_PRIVATE void sqlite3StatusSet(int op, int X){ - wsdStatInit; - assert( op>=0 && opwsdStat.mxValue[op] ){ - wsdStat.mxValue[op] = wsdStat.nowValue[op]; + /* Since ArraySize(azCompileOpt) is normally in single digits, a + ** linear search is adequate. No need for a binary search. */ + for(i=0; i=ArraySize(wsdStat.nowValue) ){ - return SQLITE_MISUSE; - } - *pCurrent = wsdStat.nowValue[op]; - *pHighwater = wsdStat.mxValue[op]; - if( resetFlag ){ - wsdStat.mxValue[op] = wsdStat.nowValue[op]; +SQLITE_API const char *sqlite3_compileoption_get(int N){ + if( N>=0 && Nlookaside.nOut; - *pHighwater = db->lookaside.mxOut; - if( resetFlag ){ - db->lookaside.mxOut = db->lookaside.nOut; - } - break; - } - default: { - return SQLITE_ERROR; - } - } - return SQLITE_OK; -} +#endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */ -/************** End of status.c **********************************************/ -/************** Begin file date.c ********************************************/ +/************** End of ctime.c ***********************************************/ +/************** Begin file status.c ******************************************/ /* -** 2003 October 31 +** 2008 June 18 ** ** The author disclaims copyright to this source code. In place of ** a legal notice, here is a blessing: @@ -10689,148 +12916,857 @@ SQLITE_API int sqlite3_db_status( ** May you share freely, never taking more than you give. ** ************************************************************************* -** This file contains the C functions that implement date and time -** functions for SQLite. -** -** There is only one exported symbol in this file - the function -** sqlite3RegisterDateTimeFunctions() found at the bottom of the file. -** All other code has file scope. -** -** $Id: date.c,v 1.107 2009/05/03 20:23:53 drh Exp $ ** -** SQLite processes all times and dates as Julian Day numbers. The -** dates and times are stored as the number of days since noon -** in Greenwich on November 24, 4714 B.C. according to the Gregorian -** calendar system. -** -** 1970-01-01 00:00:00 is JD 2440587.5 -** 2000-01-01 00:00:00 is JD 2451544.5 -** -** This implemention requires years to be expressed as a 4-digit number -** which means that only dates between 0000-01-01 and 9999-12-31 can -** be represented, even though julian day numbers allow a much wider -** range of dates. +** This module implements the sqlite3_status() interface and related +** functionality. +*/ +/************** Include vdbeInt.h in the middle of status.c ******************/ +/************** Begin file vdbeInt.h *****************************************/ +/* +** 2003 September 6 ** -** The Gregorian calendar system is used for all dates and times, -** even those that predate the Gregorian calendar. Historians usually -** use the Julian calendar for dates prior to 1582-10-15 and for some -** dates afterwards, depending on locale. Beware of this difference. +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: ** -** The conversion algorithms are implemented based on descriptions -** in the following text: +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. ** -** Jean Meeus -** Astronomical Algorithms, 2nd Edition, 1998 -** ISBM 0-943396-61-1 -** Willmann-Bell, Inc -** Richmond, Virginia (USA) +************************************************************************* +** This is the header file for information that is private to the +** VDBE. This information used to all be at the top of the single +** source code file "vdbe.c". When that file became too big (over +** 6000 lines long) it was split up into several smaller files and +** this header information was factored out. */ -#include +#ifndef _VDBEINT_H_ +#define _VDBEINT_H_ -#ifndef SQLITE_OMIT_DATETIME_FUNCS +/* +** SQL is translated into a sequence of instructions to be +** executed by a virtual machine. Each instruction is an instance +** of the following structure. +*/ +typedef struct VdbeOp Op; /* -** On recent Windows platforms, the localtime_s() function is available -** as part of the "Secure CRT". It is essentially equivalent to -** localtime_r() available under most POSIX platforms, except that the -** order of the parameters is reversed. -** -** See http://msdn.microsoft.com/en-us/library/a442x3ye(VS.80).aspx. -** -** If the user has not indicated to use localtime_r() or localtime_s() -** already, check for an MSVC build environment that provides -** localtime_s(). +** Boolean values */ -#if !defined(HAVE_LOCALTIME_R) && !defined(HAVE_LOCALTIME_S) && \ - defined(_MSC_VER) && defined(_CRT_INSECURE_DEPRECATE) -#define HAVE_LOCALTIME_S 1 -#endif +typedef unsigned char Bool; + +/* Opaque type used by code in vdbesort.c */ +typedef struct VdbeSorter VdbeSorter; + +/* Opaque type used by the explainer */ +typedef struct Explain Explain; /* -** A structure for holding a single date and time. +** A cursor is a pointer into a single BTree within a database file. +** The cursor can seek to a BTree entry with a particular key, or +** loop over all entries of the Btree. You can also insert new BTree +** entries or retrieve the key or data from the entry that the cursor +** is currently pointing to. +** +** Every cursor that the virtual machine has open is represented by an +** instance of the following structure. */ -typedef struct DateTime DateTime; -struct DateTime { - sqlite3_int64 iJD; /* The julian day number times 86400000 */ - int Y, M, D; /* Year, month, and day */ - int h, m; /* Hour and minutes */ - int tz; /* Timezone offset in minutes */ - double s; /* Seconds */ - char validYMD; /* True (1) if Y,M,D are valid */ - char validHMS; /* True (1) if h,m,s are valid */ - char validJD; /* True (1) if iJD is valid */ - char validTZ; /* True (1) if tz is valid */ +struct VdbeCursor { + BtCursor *pCursor; /* The cursor structure of the backend */ + Btree *pBt; /* Separate file holding temporary table */ + KeyInfo *pKeyInfo; /* Info about index keys needed by index cursors */ + int iDb; /* Index of cursor database in db->aDb[] (or -1) */ + int pseudoTableReg; /* Register holding pseudotable content. */ + int nField; /* Number of fields in the header */ + Bool zeroed; /* True if zeroed out and ready for reuse */ + Bool rowidIsValid; /* True if lastRowid is valid */ + Bool atFirst; /* True if pointing to first entry */ + Bool useRandomRowid; /* Generate new record numbers semi-randomly */ + Bool nullRow; /* True if pointing to a row with no data */ + Bool deferredMoveto; /* A call to sqlite3BtreeMoveto() is needed */ + Bool isTable; /* True if a table requiring integer keys */ + Bool isIndex; /* True if an index containing keys only - no data */ + Bool isOrdered; /* True if the underlying table is BTREE_UNORDERED */ + Bool isSorter; /* True if a new-style sorter */ + sqlite3_vtab_cursor *pVtabCursor; /* The cursor for a virtual table */ + const sqlite3_module *pModule; /* Module for cursor pVtabCursor */ + i64 seqCount; /* Sequence counter */ + i64 movetoTarget; /* Argument to the deferred sqlite3BtreeMoveto() */ + i64 lastRowid; /* Last rowid from a Next or NextIdx operation */ + VdbeSorter *pSorter; /* Sorter object for OP_SorterOpen cursors */ + + /* Result of last sqlite3BtreeMoveto() done by an OP_NotExists or + ** OP_IsUnique opcode on this cursor. */ + int seekResult; + + /* Cached information about the header for the data record that the + ** cursor is currently pointing to. Only valid if cacheStatus matches + ** Vdbe.cacheCtr. Vdbe.cacheCtr will never take on the value of + ** CACHE_STALE and so setting cacheStatus=CACHE_STALE guarantees that + ** the cache is out of date. + ** + ** aRow might point to (ephemeral) data for the current row, or it might + ** be NULL. + */ + u32 cacheStatus; /* Cache is valid if this matches Vdbe.cacheCtr */ + int payloadSize; /* Total number of bytes in the record */ + u32 *aType; /* Type values for all entries in the record */ + u32 *aOffset; /* Cached offsets to the start of each columns data */ + u8 *aRow; /* Data for the current row, if all on one page */ +}; +typedef struct VdbeCursor VdbeCursor; + +/* +** When a sub-program is executed (OP_Program), a structure of this type +** is allocated to store the current value of the program counter, as +** well as the current memory cell array and various other frame specific +** values stored in the Vdbe struct. When the sub-program is finished, +** these values are copied back to the Vdbe from the VdbeFrame structure, +** restoring the state of the VM to as it was before the sub-program +** began executing. +** +** The memory for a VdbeFrame object is allocated and managed by a memory +** cell in the parent (calling) frame. When the memory cell is deleted or +** overwritten, the VdbeFrame object is not freed immediately. Instead, it +** is linked into the Vdbe.pDelFrame list. The contents of the Vdbe.pDelFrame +** list is deleted when the VM is reset in VdbeHalt(). The reason for doing +** this instead of deleting the VdbeFrame immediately is to avoid recursive +** calls to sqlite3VdbeMemRelease() when the memory cells belonging to the +** child frame are released. +** +** The currently executing frame is stored in Vdbe.pFrame. Vdbe.pFrame is +** set to NULL if the currently executing frame is the main program. +*/ +typedef struct VdbeFrame VdbeFrame; +struct VdbeFrame { + Vdbe *v; /* VM this frame belongs to */ + VdbeFrame *pParent; /* Parent of this frame, or NULL if parent is main */ + Op *aOp; /* Program instructions for parent frame */ + Mem *aMem; /* Array of memory cells for parent frame */ + u8 *aOnceFlag; /* Array of OP_Once flags for parent frame */ + VdbeCursor **apCsr; /* Array of Vdbe cursors for parent frame */ + void *token; /* Copy of SubProgram.token */ + i64 lastRowid; /* Last insert rowid (sqlite3.lastRowid) */ + u16 nCursor; /* Number of entries in apCsr */ + int pc; /* Program Counter in parent (calling) frame */ + int nOp; /* Size of aOp array */ + int nMem; /* Number of entries in aMem */ + int nOnceFlag; /* Number of entries in aOnceFlag */ + int nChildMem; /* Number of memory cells for child frame */ + int nChildCsr; /* Number of cursors for child frame */ + int nChange; /* Statement changes (Vdbe.nChanges) */ }; +#define VdbeFrameMem(p) ((Mem *)&((u8 *)p)[ROUND8(sizeof(VdbeFrame))]) /* -** Convert zDate into one or more integers. Additional arguments -** come in groups of 5 as follows: -** -** N number of digits in the integer -** min minimum allowed value of the integer -** max maximum allowed value of the integer -** nextC first character after the integer -** pVal where to write the integers value. -** -** Conversions continue until one with nextC==0 is encountered. -** The function returns the number of successful conversions. +** A value for VdbeCursor.cacheValid that means the cache is always invalid. */ -static int getDigits(const char *zDate, ...){ - va_list ap; - int val; - int N; - int min; - int max; - int nextC; - int *pVal; - int cnt = 0; - va_start(ap, zDate); - do{ - N = va_arg(ap, int); - min = va_arg(ap, int); - max = va_arg(ap, int); - nextC = va_arg(ap, int); - pVal = va_arg(ap, int*); - val = 0; - while( N-- ){ - if( !sqlite3Isdigit(*zDate) ){ - goto end_getDigits; - } - val = val*10 + *zDate - '0'; - zDate++; - } - if( valmax || (nextC!=0 && nextC!=*zDate) ){ - goto end_getDigits; - } - *pVal = val; - zDate++; - cnt++; - }while( nextC ); -end_getDigits: - va_end(ap); - return cnt; -} +#define CACHE_STALE 0 /* -** Read text from z[] and convert into a floating point number. Return -** the number of digits converted. +** Internally, the vdbe manipulates nearly all SQL values as Mem +** structures. Each Mem struct may cache multiple representations (string, +** integer etc.) of the same value. */ -#define getValue sqlite3AtoF +struct Mem { + sqlite3 *db; /* The associated database connection */ + char *z; /* String or BLOB value */ + double r; /* Real value */ + union { + i64 i; /* Integer value used when MEM_Int is set in flags */ + int nZero; /* Used when bit MEM_Zero is set in flags */ + FuncDef *pDef; /* Used only when flags==MEM_Agg */ + RowSet *pRowSet; /* Used only when flags==MEM_RowSet */ + VdbeFrame *pFrame; /* Used when flags==MEM_Frame */ + } u; + int n; /* Number of characters in string value, excluding '\0' */ + u16 flags; /* Some combination of MEM_Null, MEM_Str, MEM_Dyn, etc. */ + u8 type; /* One of SQLITE_NULL, SQLITE_TEXT, SQLITE_INTEGER, etc */ + u8 enc; /* SQLITE_UTF8, SQLITE_UTF16BE, SQLITE_UTF16LE */ +#ifdef SQLITE_DEBUG + Mem *pScopyFrom; /* This Mem is a shallow copy of pScopyFrom */ + void *pFiller; /* So that sizeof(Mem) is a multiple of 8 */ +#endif + void (*xDel)(void *); /* If not null, call this function to delete Mem.z */ + char *zMalloc; /* Dynamic buffer allocated by sqlite3_malloc() */ +}; -/* -** Parse a timezone extension on the end of a date-time. -** The extension is of the form: -** -** (+/-)HH:MM -** -** Or the "zulu" notation: +/* One or more of the following flags are set to indicate the validOK +** representations of the value stored in the Mem struct. ** -** Z +** If the MEM_Null flag is set, then the value is an SQL NULL value. +** No other flags may be set in this case. ** -** If the parse is successful, write the number of minutes -** of change in p->tz and return 0. If a parser error occurs, -** return non-zero. +** If the MEM_Str flag is set then Mem.z points at a string representation. +** Usually this is encoded in the same unicode encoding as the main +** database (see below for exceptions). If the MEM_Term flag is also +** set, then the string is nul terminated. The MEM_Int and MEM_Real +** flags may coexist with the MEM_Str flag. +*/ +#define MEM_Null 0x0001 /* Value is NULL */ +#define MEM_Str 0x0002 /* Value is a string */ +#define MEM_Int 0x0004 /* Value is an integer */ +#define MEM_Real 0x0008 /* Value is a real number */ +#define MEM_Blob 0x0010 /* Value is a BLOB */ +#define MEM_RowSet 0x0020 /* Value is a RowSet object */ +#define MEM_Frame 0x0040 /* Value is a VdbeFrame object */ +#define MEM_Invalid 0x0080 /* Value is undefined */ +#define MEM_TypeMask 0x00ff /* Mask of type bits */ + +/* Whenever Mem contains a valid string or blob representation, one of +** the following flags must be set to determine the memory management +** policy for Mem.z. The MEM_Term flag tells us whether or not the +** string is \000 or \u0000 terminated +*/ +#define MEM_Term 0x0200 /* String rep is nul terminated */ +#define MEM_Dyn 0x0400 /* Need to call sqliteFree() on Mem.z */ +#define MEM_Static 0x0800 /* Mem.z points to a static string */ +#define MEM_Ephem 0x1000 /* Mem.z points to an ephemeral string */ +#define MEM_Agg 0x2000 /* Mem.z points to an agg function context */ +#define MEM_Zero 0x4000 /* Mem.i contains count of 0s appended to blob */ +#ifdef SQLITE_OMIT_INCRBLOB + #undef MEM_Zero + #define MEM_Zero 0x0000 +#endif + +/* +** Clear any existing type flags from a Mem and replace them with f +*/ +#define MemSetTypeFlag(p, f) \ + ((p)->flags = ((p)->flags&~(MEM_TypeMask|MEM_Zero))|f) + +/* +** Return true if a memory cell is not marked as invalid. This macro +** is for use inside assert() statements only. +*/ +#ifdef SQLITE_DEBUG +#define memIsValid(M) ((M)->flags & MEM_Invalid)==0 +#endif + + +/* A VdbeFunc is just a FuncDef (defined in sqliteInt.h) that contains +** additional information about auxiliary information bound to arguments +** of the function. This is used to implement the sqlite3_get_auxdata() +** and sqlite3_set_auxdata() APIs. The "auxdata" is some auxiliary data +** that can be associated with a constant argument to a function. This +** allows functions such as "regexp" to compile their constant regular +** expression argument once and reused the compiled code for multiple +** invocations. +*/ +struct VdbeFunc { + FuncDef *pFunc; /* The definition of the function */ + int nAux; /* Number of entries allocated for apAux[] */ + struct AuxData { + void *pAux; /* Aux data for the i-th argument */ + void (*xDelete)(void *); /* Destructor for the aux data */ + } apAux[1]; /* One slot for each function argument */ +}; + +/* +** The "context" argument for a installable function. A pointer to an +** instance of this structure is the first argument to the routines used +** implement the SQL functions. +** +** There is a typedef for this structure in sqlite.h. So all routines, +** even the public interface to SQLite, can use a pointer to this structure. +** But this file is the only place where the internal details of this +** structure are known. +** +** This structure is defined inside of vdbeInt.h because it uses substructures +** (Mem) which are only defined there. +*/ +struct sqlite3_context { + FuncDef *pFunc; /* Pointer to function information. MUST BE FIRST */ + VdbeFunc *pVdbeFunc; /* Auxilary data, if created. */ + Mem s; /* The return value is stored here */ + Mem *pMem; /* Memory cell used to store aggregate context */ + CollSeq *pColl; /* Collating sequence */ + int isError; /* Error code returned by the function. */ + int skipFlag; /* Skip skip accumulator loading if true */ +}; + +/* +** An Explain object accumulates indented output which is helpful +** in describing recursive data structures. +*/ +struct Explain { + Vdbe *pVdbe; /* Attach the explanation to this Vdbe */ + StrAccum str; /* The string being accumulated */ + int nIndent; /* Number of elements in aIndent */ + u16 aIndent[100]; /* Levels of indentation */ + char zBase[100]; /* Initial space */ +}; + +/* +** An instance of the virtual machine. This structure contains the complete +** state of the virtual machine. +** +** The "sqlite3_stmt" structure pointer that is returned by sqlite3_prepare() +** is really a pointer to an instance of this structure. +** +** The Vdbe.inVtabMethod variable is set to non-zero for the duration of +** any virtual table method invocations made by the vdbe program. It is +** set to 2 for xDestroy method calls and 1 for all other methods. This +** variable is used for two purposes: to allow xDestroy methods to execute +** "DROP TABLE" statements and to prevent some nasty side effects of +** malloc failure when SQLite is invoked recursively by a virtual table +** method function. +*/ +struct Vdbe { + sqlite3 *db; /* The database connection that owns this statement */ + Op *aOp; /* Space to hold the virtual machine's program */ + Mem *aMem; /* The memory locations */ + Mem **apArg; /* Arguments to currently executing user function */ + Mem *aColName; /* Column names to return */ + Mem *pResultSet; /* Pointer to an array of results */ + int nMem; /* Number of memory locations currently allocated */ + int nOp; /* Number of instructions in the program */ + int nOpAlloc; /* Number of slots allocated for aOp[] */ + int nLabel; /* Number of labels used */ + int *aLabel; /* Space to hold the labels */ + u16 nResColumn; /* Number of columns in one row of the result set */ + u16 nCursor; /* Number of slots in apCsr[] */ + u32 magic; /* Magic number for sanity checking */ + char *zErrMsg; /* Error message written here */ + Vdbe *pPrev,*pNext; /* Linked list of VDBEs with the same Vdbe.db */ + VdbeCursor **apCsr; /* One element of this array for each open cursor */ + Mem *aVar; /* Values for the OP_Variable opcode. */ + char **azVar; /* Name of variables */ + ynVar nVar; /* Number of entries in aVar[] */ + ynVar nzVar; /* Number of entries in azVar[] */ + u32 cacheCtr; /* VdbeCursor row cache generation counter */ + int pc; /* The program counter */ + int rc; /* Value to return */ + u8 errorAction; /* Recovery action to do in case of an error */ + u8 explain; /* True if EXPLAIN present on SQL command */ + u8 changeCntOn; /* True to update the change-counter */ + u8 expired; /* True if the VM needs to be recompiled */ + u8 runOnlyOnce; /* Automatically expire on reset */ + u8 minWriteFileFormat; /* Minimum file format for writable database files */ + u8 inVtabMethod; /* See comments above */ + u8 usesStmtJournal; /* True if uses a statement journal */ + u8 readOnly; /* True for read-only statements */ + u8 isPrepareV2; /* True if prepared with prepare_v2() */ + int nChange; /* Number of db changes made since last reset */ + yDbMask btreeMask; /* Bitmask of db->aDb[] entries referenced */ + yDbMask lockMask; /* Subset of btreeMask that requires a lock */ + int iStatement; /* Statement number (or 0 if has not opened stmt) */ + int aCounter[3]; /* Counters used by sqlite3_stmt_status() */ +#ifndef SQLITE_OMIT_TRACE + i64 startTime; /* Time when query started - used for profiling */ +#endif + i64 nFkConstraint; /* Number of imm. FK constraints this VM */ + i64 nStmtDefCons; /* Number of def. constraints when stmt started */ + char *zSql; /* Text of the SQL statement that generated this */ + void *pFree; /* Free this when deleting the vdbe */ +#ifdef SQLITE_DEBUG + FILE *trace; /* Write an execution trace here, if not NULL */ +#endif +#ifdef SQLITE_ENABLE_TREE_EXPLAIN + Explain *pExplain; /* The explainer */ + char *zExplain; /* Explanation of data structures */ +#endif + VdbeFrame *pFrame; /* Parent frame */ + VdbeFrame *pDelFrame; /* List of frame objects to free on VM reset */ + int nFrame; /* Number of frames in pFrame list */ + u32 expmask; /* Binding to these vars invalidates VM */ + SubProgram *pProgram; /* Linked list of all sub-programs used by VM */ + int nOnceFlag; /* Size of array aOnceFlag[] */ + u8 *aOnceFlag; /* Flags for OP_Once */ +}; + +/* +** The following are allowed values for Vdbe.magic +*/ +#define VDBE_MAGIC_INIT 0x26bceaa5 /* Building a VDBE program */ +#define VDBE_MAGIC_RUN 0xbdf20da3 /* VDBE is ready to execute */ +#define VDBE_MAGIC_HALT 0x519c2973 /* VDBE has completed execution */ +#define VDBE_MAGIC_DEAD 0xb606c3c8 /* The VDBE has been deallocated */ + +/* +** Function prototypes +*/ +SQLITE_PRIVATE void sqlite3VdbeFreeCursor(Vdbe *, VdbeCursor*); +void sqliteVdbePopStack(Vdbe*,int); +SQLITE_PRIVATE int sqlite3VdbeCursorMoveto(VdbeCursor*); +#if defined(SQLITE_DEBUG) || defined(VDBE_PROFILE) +SQLITE_PRIVATE void sqlite3VdbePrintOp(FILE*, int, Op*); +#endif +SQLITE_PRIVATE u32 sqlite3VdbeSerialTypeLen(u32); +SQLITE_PRIVATE u32 sqlite3VdbeSerialType(Mem*, int); +SQLITE_PRIVATE u32 sqlite3VdbeSerialPut(unsigned char*, int, Mem*, int); +SQLITE_PRIVATE u32 sqlite3VdbeSerialGet(const unsigned char*, u32, Mem*); +SQLITE_PRIVATE void sqlite3VdbeDeleteAuxData(VdbeFunc*, int); + +int sqlite2BtreeKeyCompare(BtCursor *, const void *, int, int, int *); +SQLITE_PRIVATE int sqlite3VdbeIdxKeyCompare(VdbeCursor*,UnpackedRecord*,int*); +SQLITE_PRIVATE int sqlite3VdbeIdxRowid(sqlite3*, BtCursor *, i64 *); +SQLITE_PRIVATE int sqlite3MemCompare(const Mem*, const Mem*, const CollSeq*); +SQLITE_PRIVATE int sqlite3VdbeExec(Vdbe*); +SQLITE_PRIVATE int sqlite3VdbeList(Vdbe*); +SQLITE_PRIVATE int sqlite3VdbeHalt(Vdbe*); +SQLITE_PRIVATE int sqlite3VdbeChangeEncoding(Mem *, int); +SQLITE_PRIVATE int sqlite3VdbeMemTooBig(Mem*); +SQLITE_PRIVATE int sqlite3VdbeMemCopy(Mem*, const Mem*); +SQLITE_PRIVATE void sqlite3VdbeMemShallowCopy(Mem*, const Mem*, int); +SQLITE_PRIVATE void sqlite3VdbeMemMove(Mem*, Mem*); +SQLITE_PRIVATE int sqlite3VdbeMemNulTerminate(Mem*); +SQLITE_PRIVATE int sqlite3VdbeMemSetStr(Mem*, const char*, int, u8, void(*)(void*)); +SQLITE_PRIVATE void sqlite3VdbeMemSetInt64(Mem*, i64); +#ifdef SQLITE_OMIT_FLOATING_POINT +# define sqlite3VdbeMemSetDouble sqlite3VdbeMemSetInt64 +#else +SQLITE_PRIVATE void sqlite3VdbeMemSetDouble(Mem*, double); +#endif +SQLITE_PRIVATE void sqlite3VdbeMemSetNull(Mem*); +SQLITE_PRIVATE void sqlite3VdbeMemSetZeroBlob(Mem*,int); +SQLITE_PRIVATE void sqlite3VdbeMemSetRowSet(Mem*); +SQLITE_PRIVATE int sqlite3VdbeMemMakeWriteable(Mem*); +SQLITE_PRIVATE int sqlite3VdbeMemStringify(Mem*, int); +SQLITE_PRIVATE i64 sqlite3VdbeIntValue(Mem*); +SQLITE_PRIVATE int sqlite3VdbeMemIntegerify(Mem*); +SQLITE_PRIVATE double sqlite3VdbeRealValue(Mem*); +SQLITE_PRIVATE void sqlite3VdbeIntegerAffinity(Mem*); +SQLITE_PRIVATE int sqlite3VdbeMemRealify(Mem*); +SQLITE_PRIVATE int sqlite3VdbeMemNumerify(Mem*); +SQLITE_PRIVATE int sqlite3VdbeMemFromBtree(BtCursor*,int,int,int,Mem*); +SQLITE_PRIVATE void sqlite3VdbeMemRelease(Mem *p); +SQLITE_PRIVATE void sqlite3VdbeMemReleaseExternal(Mem *p); +#define VdbeMemRelease(X) \ + if((X)->flags&(MEM_Agg|MEM_Dyn|MEM_RowSet|MEM_Frame)) \ + sqlite3VdbeMemReleaseExternal(X); +SQLITE_PRIVATE int sqlite3VdbeMemFinalize(Mem*, FuncDef*); +SQLITE_PRIVATE const char *sqlite3OpcodeName(int); +SQLITE_PRIVATE int sqlite3VdbeMemGrow(Mem *pMem, int n, int preserve); +SQLITE_PRIVATE int sqlite3VdbeCloseStatement(Vdbe *, int); +SQLITE_PRIVATE void sqlite3VdbeFrameDelete(VdbeFrame*); +SQLITE_PRIVATE int sqlite3VdbeFrameRestore(VdbeFrame *); +SQLITE_PRIVATE void sqlite3VdbeMemStoreType(Mem *pMem); +SQLITE_PRIVATE int sqlite3VdbeTransferError(Vdbe *p); + +#ifdef SQLITE_OMIT_MERGE_SORT +# define sqlite3VdbeSorterInit(Y,Z) SQLITE_OK +# define sqlite3VdbeSorterWrite(X,Y,Z) SQLITE_OK +# define sqlite3VdbeSorterClose(Y,Z) +# define sqlite3VdbeSorterRowkey(Y,Z) SQLITE_OK +# define sqlite3VdbeSorterRewind(X,Y,Z) SQLITE_OK +# define sqlite3VdbeSorterNext(X,Y,Z) SQLITE_OK +# define sqlite3VdbeSorterCompare(X,Y,Z) SQLITE_OK +#else +SQLITE_PRIVATE int sqlite3VdbeSorterInit(sqlite3 *, VdbeCursor *); +SQLITE_PRIVATE void sqlite3VdbeSorterClose(sqlite3 *, VdbeCursor *); +SQLITE_PRIVATE int sqlite3VdbeSorterRowkey(VdbeCursor *, Mem *); +SQLITE_PRIVATE int sqlite3VdbeSorterNext(sqlite3 *, VdbeCursor *, int *); +SQLITE_PRIVATE int sqlite3VdbeSorterRewind(sqlite3 *, VdbeCursor *, int *); +SQLITE_PRIVATE int sqlite3VdbeSorterWrite(sqlite3 *, VdbeCursor *, Mem *); +SQLITE_PRIVATE int sqlite3VdbeSorterCompare(VdbeCursor *, Mem *, int *); +#endif + +#if !defined(SQLITE_OMIT_SHARED_CACHE) && SQLITE_THREADSAFE>0 +SQLITE_PRIVATE void sqlite3VdbeEnter(Vdbe*); +SQLITE_PRIVATE void sqlite3VdbeLeave(Vdbe*); +#else +# define sqlite3VdbeEnter(X) +# define sqlite3VdbeLeave(X) +#endif + +#ifdef SQLITE_DEBUG +SQLITE_PRIVATE void sqlite3VdbeMemAboutToChange(Vdbe*,Mem*); +#endif + +#ifndef SQLITE_OMIT_FOREIGN_KEY +SQLITE_PRIVATE int sqlite3VdbeCheckFk(Vdbe *, int); +#else +# define sqlite3VdbeCheckFk(p,i) 0 +#endif + +SQLITE_PRIVATE int sqlite3VdbeMemTranslate(Mem*, u8); +#ifdef SQLITE_DEBUG +SQLITE_PRIVATE void sqlite3VdbePrintSql(Vdbe*); +SQLITE_PRIVATE void sqlite3VdbeMemPrettyPrint(Mem *pMem, char *zBuf); +#endif +SQLITE_PRIVATE int sqlite3VdbeMemHandleBom(Mem *pMem); + +#ifndef SQLITE_OMIT_INCRBLOB +SQLITE_PRIVATE int sqlite3VdbeMemExpandBlob(Mem *); + #define ExpandBlob(P) (((P)->flags&MEM_Zero)?sqlite3VdbeMemExpandBlob(P):0) +#else + #define sqlite3VdbeMemExpandBlob(x) SQLITE_OK + #define ExpandBlob(P) SQLITE_OK +#endif + +#endif /* !defined(_VDBEINT_H_) */ + +/************** End of vdbeInt.h *********************************************/ +/************** Continuing where we left off in status.c *********************/ + +/* +** Variables in which to record status information. +*/ +typedef struct sqlite3StatType sqlite3StatType; +static SQLITE_WSD struct sqlite3StatType { + int nowValue[10]; /* Current value */ + int mxValue[10]; /* Maximum value */ +} sqlite3Stat = { {0,}, {0,} }; + + +/* The "wsdStat" macro will resolve to the status information +** state vector. If writable static data is unsupported on the target, +** we have to locate the state vector at run-time. In the more common +** case where writable static data is supported, wsdStat can refer directly +** to the "sqlite3Stat" state vector declared above. +*/ +#ifdef SQLITE_OMIT_WSD +# define wsdStatInit sqlite3StatType *x = &GLOBAL(sqlite3StatType,sqlite3Stat) +# define wsdStat x[0] +#else +# define wsdStatInit +# define wsdStat sqlite3Stat +#endif + +/* +** Return the current value of a status parameter. +*/ +SQLITE_PRIVATE int sqlite3StatusValue(int op){ + wsdStatInit; + assert( op>=0 && op=0 && opwsdStat.mxValue[op] ){ + wsdStat.mxValue[op] = wsdStat.nowValue[op]; + } +} + +/* +** Set the value of a status to X. +*/ +SQLITE_PRIVATE void sqlite3StatusSet(int op, int X){ + wsdStatInit; + assert( op>=0 && opwsdStat.mxValue[op] ){ + wsdStat.mxValue[op] = wsdStat.nowValue[op]; + } +} + +/* +** Query status information. +** +** This implementation assumes that reading or writing an aligned +** 32-bit integer is an atomic operation. If that assumption is not true, +** then this routine is not threadsafe. +*/ +SQLITE_API int sqlite3_status(int op, int *pCurrent, int *pHighwater, int resetFlag){ + wsdStatInit; + if( op<0 || op>=ArraySize(wsdStat.nowValue) ){ + return SQLITE_MISUSE_BKPT; + } + *pCurrent = wsdStat.nowValue[op]; + *pHighwater = wsdStat.mxValue[op]; + if( resetFlag ){ + wsdStat.mxValue[op] = wsdStat.nowValue[op]; + } + return SQLITE_OK; +} + +/* +** Query status information for a single database connection +*/ +SQLITE_API int sqlite3_db_status( + sqlite3 *db, /* The database connection whose status is desired */ + int op, /* Status verb */ + int *pCurrent, /* Write current value here */ + int *pHighwater, /* Write high-water mark here */ + int resetFlag /* Reset high-water mark if true */ +){ + int rc = SQLITE_OK; /* Return code */ + sqlite3_mutex_enter(db->mutex); + switch( op ){ + case SQLITE_DBSTATUS_LOOKASIDE_USED: { + *pCurrent = db->lookaside.nOut; + *pHighwater = db->lookaside.mxOut; + if( resetFlag ){ + db->lookaside.mxOut = db->lookaside.nOut; + } + break; + } + + case SQLITE_DBSTATUS_LOOKASIDE_HIT: + case SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE: + case SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL: { + testcase( op==SQLITE_DBSTATUS_LOOKASIDE_HIT ); + testcase( op==SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE ); + testcase( op==SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL ); + assert( (op-SQLITE_DBSTATUS_LOOKASIDE_HIT)>=0 ); + assert( (op-SQLITE_DBSTATUS_LOOKASIDE_HIT)<3 ); + *pCurrent = 0; + *pHighwater = db->lookaside.anStat[op - SQLITE_DBSTATUS_LOOKASIDE_HIT]; + if( resetFlag ){ + db->lookaside.anStat[op - SQLITE_DBSTATUS_LOOKASIDE_HIT] = 0; + } + break; + } + + /* + ** Return an approximation for the amount of memory currently used + ** by all pagers associated with the given database connection. The + ** highwater mark is meaningless and is returned as zero. + */ + case SQLITE_DBSTATUS_CACHE_USED: { + int totalUsed = 0; + int i; + sqlite3BtreeEnterAll(db); + for(i=0; inDb; i++){ + Btree *pBt = db->aDb[i].pBt; + if( pBt ){ + Pager *pPager = sqlite3BtreePager(pBt); + totalUsed += sqlite3PagerMemUsed(pPager); + } + } + sqlite3BtreeLeaveAll(db); + *pCurrent = totalUsed; + *pHighwater = 0; + break; + } + + /* + ** *pCurrent gets an accurate estimate of the amount of memory used + ** to store the schema for all databases (main, temp, and any ATTACHed + ** databases. *pHighwater is set to zero. + */ + case SQLITE_DBSTATUS_SCHEMA_USED: { + int i; /* Used to iterate through schemas */ + int nByte = 0; /* Used to accumulate return value */ + + sqlite3BtreeEnterAll(db); + db->pnBytesFreed = &nByte; + for(i=0; inDb; i++){ + Schema *pSchema = db->aDb[i].pSchema; + if( ALWAYS(pSchema!=0) ){ + HashElem *p; + + nByte += sqlite3GlobalConfig.m.xRoundup(sizeof(HashElem)) * ( + pSchema->tblHash.count + + pSchema->trigHash.count + + pSchema->idxHash.count + + pSchema->fkeyHash.count + ); + nByte += sqlite3MallocSize(pSchema->tblHash.ht); + nByte += sqlite3MallocSize(pSchema->trigHash.ht); + nByte += sqlite3MallocSize(pSchema->idxHash.ht); + nByte += sqlite3MallocSize(pSchema->fkeyHash.ht); + + for(p=sqliteHashFirst(&pSchema->trigHash); p; p=sqliteHashNext(p)){ + sqlite3DeleteTrigger(db, (Trigger*)sqliteHashData(p)); + } + for(p=sqliteHashFirst(&pSchema->tblHash); p; p=sqliteHashNext(p)){ + sqlite3DeleteTable(db, (Table *)sqliteHashData(p)); + } + } + } + db->pnBytesFreed = 0; + sqlite3BtreeLeaveAll(db); + + *pHighwater = 0; + *pCurrent = nByte; + break; + } + + /* + ** *pCurrent gets an accurate estimate of the amount of memory used + ** to store all prepared statements. + ** *pHighwater is set to zero. + */ + case SQLITE_DBSTATUS_STMT_USED: { + struct Vdbe *pVdbe; /* Used to iterate through VMs */ + int nByte = 0; /* Used to accumulate return value */ + + db->pnBytesFreed = &nByte; + for(pVdbe=db->pVdbe; pVdbe; pVdbe=pVdbe->pNext){ + sqlite3VdbeDeleteObject(db, pVdbe); + } + db->pnBytesFreed = 0; + + *pHighwater = 0; + *pCurrent = nByte; + + break; + } + + /* + ** Set *pCurrent to the total cache hits or misses encountered by all + ** pagers the database handle is connected to. *pHighwater is always set + ** to zero. + */ + case SQLITE_DBSTATUS_CACHE_HIT: + case SQLITE_DBSTATUS_CACHE_MISS: + case SQLITE_DBSTATUS_CACHE_WRITE:{ + int i; + int nRet = 0; + assert( SQLITE_DBSTATUS_CACHE_MISS==SQLITE_DBSTATUS_CACHE_HIT+1 ); + assert( SQLITE_DBSTATUS_CACHE_WRITE==SQLITE_DBSTATUS_CACHE_HIT+2 ); + + for(i=0; inDb; i++){ + if( db->aDb[i].pBt ){ + Pager *pPager = sqlite3BtreePager(db->aDb[i].pBt); + sqlite3PagerCacheStat(pPager, op, resetFlag, &nRet); + } + } + *pHighwater = 0; + *pCurrent = nRet; + break; + } + + default: { + rc = SQLITE_ERROR; + } + } + sqlite3_mutex_leave(db->mutex); + return rc; +} + +/************** End of status.c **********************************************/ +/************** Begin file date.c ********************************************/ +/* +** 2003 October 31 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** This file contains the C functions that implement date and time +** functions for SQLite. +** +** There is only one exported symbol in this file - the function +** sqlite3RegisterDateTimeFunctions() found at the bottom of the file. +** All other code has file scope. +** +** SQLite processes all times and dates as Julian Day numbers. The +** dates and times are stored as the number of days since noon +** in Greenwich on November 24, 4714 B.C. according to the Gregorian +** calendar system. +** +** 1970-01-01 00:00:00 is JD 2440587.5 +** 2000-01-01 00:00:00 is JD 2451544.5 +** +** This implemention requires years to be expressed as a 4-digit number +** which means that only dates between 0000-01-01 and 9999-12-31 can +** be represented, even though julian day numbers allow a much wider +** range of dates. +** +** The Gregorian calendar system is used for all dates and times, +** even those that predate the Gregorian calendar. Historians usually +** use the Julian calendar for dates prior to 1582-10-15 and for some +** dates afterwards, depending on locale. Beware of this difference. +** +** The conversion algorithms are implemented based on descriptions +** in the following text: +** +** Jean Meeus +** Astronomical Algorithms, 2nd Edition, 1998 +** ISBM 0-943396-61-1 +** Willmann-Bell, Inc +** Richmond, Virginia (USA) +*/ +/* #include */ +/* #include */ +#include + +#ifndef SQLITE_OMIT_DATETIME_FUNCS + + +/* +** A structure for holding a single date and time. +*/ +typedef struct DateTime DateTime; +struct DateTime { + sqlite3_int64 iJD; /* The julian day number times 86400000 */ + int Y, M, D; /* Year, month, and day */ + int h, m; /* Hour and minutes */ + int tz; /* Timezone offset in minutes */ + double s; /* Seconds */ + char validYMD; /* True (1) if Y,M,D are valid */ + char validHMS; /* True (1) if h,m,s are valid */ + char validJD; /* True (1) if iJD is valid */ + char validTZ; /* True (1) if tz is valid */ +}; + + +/* +** Convert zDate into one or more integers. Additional arguments +** come in groups of 5 as follows: +** +** N number of digits in the integer +** min minimum allowed value of the integer +** max maximum allowed value of the integer +** nextC first character after the integer +** pVal where to write the integers value. +** +** Conversions continue until one with nextC==0 is encountered. +** The function returns the number of successful conversions. +*/ +static int getDigits(const char *zDate, ...){ + va_list ap; + int val; + int N; + int min; + int max; + int nextC; + int *pVal; + int cnt = 0; + va_start(ap, zDate); + do{ + N = va_arg(ap, int); + min = va_arg(ap, int); + max = va_arg(ap, int); + nextC = va_arg(ap, int); + pVal = va_arg(ap, int*); + val = 0; + while( N-- ){ + if( !sqlite3Isdigit(*zDate) ){ + goto end_getDigits; + } + val = val*10 + *zDate - '0'; + zDate++; + } + if( valmax || (nextC!=0 && nextC!=*zDate) ){ + goto end_getDigits; + } + *pVal = val; + zDate++; + cnt++; + }while( nextC ); +end_getDigits: + va_end(ap); + return cnt; +} + +/* +** Parse a timezone extension on the end of a date-time. +** The extension is of the form: +** +** (+/-)HH:MM +** +** Or the "zulu" notation: +** +** Z +** +** If the parse is successful, write the number of minutes +** of change in p->tz and return 0. If a parser error occurs, +** return non-zero. ** ** A missing specifier is not considered an error. */ @@ -10990,16 +13926,20 @@ static int parseYyyyMmDd(const char *zDate, DateTime *p){ } /* -** Set the time to the current time reported by the VFS +** Set the time to the current time reported by the VFS. +** +** Return the number of errors. */ -static void setDateTimeToCurrent(sqlite3_context *context, DateTime *p){ - double r; +static int setDateTimeToCurrent(sqlite3_context *context, DateTime *p){ sqlite3 *db = sqlite3_context_db_handle(context); - sqlite3OsCurrentTime(db->pVfs, &r); - p->iJD = (sqlite3_int64)(r*86400000.0 + 0.5); - p->validJD = 1; -} - + if( sqlite3OsCurrentTimeInt64(db->pVfs, &p->iJD)==SQLITE_OK ){ + p->validJD = 1; + return 0; + }else{ + return 1; + } +} + /* ** Attempt to parse the given string into a Julian Day Number. Return ** the number of errors. @@ -11021,17 +13961,14 @@ static int parseDateOrTime( const char *zDate, DateTime *p ){ - int isRealNum; /* Return from sqlite3IsNumber(). Not used */ + double r; if( parseYyyyMmDd(zDate,p)==0 ){ return 0; }else if( parseHhMmSs(zDate, p)==0 ){ return 0; }else if( sqlite3StrICmp(zDate,"now")==0){ - setDateTimeToCurrent(context, p); - return 0; - }else if( sqlite3IsNumber(zDate, &isRealNum, SQLITE_UTF8) ){ - double r; - getValue(zDate, &r); + return setDateTimeToCurrent(context, p); + }else if( sqlite3AtoF(zDate, &r, sqlite3Strlen30(zDate), SQLITE_UTF8) ){ p->iJD = (sqlite3_int64)(r*86400000.0 + 0.5); p->validJD = 1; return 0; @@ -11100,15 +14037,85 @@ static void clearYMD_HMS_TZ(DateTime *p){ p->validTZ = 0; } +/* +** On recent Windows platforms, the localtime_s() function is available +** as part of the "Secure CRT". It is essentially equivalent to +** localtime_r() available under most POSIX platforms, except that the +** order of the parameters is reversed. +** +** See http://msdn.microsoft.com/en-us/library/a442x3ye(VS.80).aspx. +** +** If the user has not indicated to use localtime_r() or localtime_s() +** already, check for an MSVC build environment that provides +** localtime_s(). +*/ +#if !defined(HAVE_LOCALTIME_R) && !defined(HAVE_LOCALTIME_S) && \ + defined(_MSC_VER) && defined(_CRT_INSECURE_DEPRECATE) +#define HAVE_LOCALTIME_S 1 +#endif + +#ifndef SQLITE_OMIT_LOCALTIME +/* +** The following routine implements the rough equivalent of localtime_r() +** using whatever operating-system specific localtime facility that +** is available. This routine returns 0 on success and +** non-zero on any kind of error. +** +** If the sqlite3GlobalConfig.bLocaltimeFault variable is true then this +** routine will always fail. +*/ +static int osLocaltime(time_t *t, struct tm *pTm){ + int rc; +#if (!defined(HAVE_LOCALTIME_R) || !HAVE_LOCALTIME_R) \ + && (!defined(HAVE_LOCALTIME_S) || !HAVE_LOCALTIME_S) + struct tm *pX; +#if SQLITE_THREADSAFE>0 + sqlite3_mutex *mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER); +#endif + sqlite3_mutex_enter(mutex); + pX = localtime(t); +#ifndef SQLITE_OMIT_BUILTIN_TEST + if( sqlite3GlobalConfig.bLocaltimeFault ) pX = 0; +#endif + if( pX ) *pTm = *pX; + sqlite3_mutex_leave(mutex); + rc = pX==0; +#else +#ifndef SQLITE_OMIT_BUILTIN_TEST + if( sqlite3GlobalConfig.bLocaltimeFault ) return 1; +#endif +#if defined(HAVE_LOCALTIME_R) && HAVE_LOCALTIME_R + rc = localtime_r(t, pTm)==0; +#else + rc = localtime_s(pTm, t); +#endif /* HAVE_LOCALTIME_R */ +#endif /* HAVE_LOCALTIME_R || HAVE_LOCALTIME_S */ + return rc; +} +#endif /* SQLITE_OMIT_LOCALTIME */ + + #ifndef SQLITE_OMIT_LOCALTIME /* -** Compute the difference (in milliseconds) -** between localtime and UTC (a.k.a. GMT) -** for the time value p where p is in UTC. +** Compute the difference (in milliseconds) between localtime and UTC +** (a.k.a. GMT) for the time value p where p is in UTC. If no error occurs, +** return this value and set *pRc to SQLITE_OK. +** +** Or, if an error does occur, set *pRc to SQLITE_ERROR. The returned value +** is undefined in this case. */ -static sqlite3_int64 localtimeOffset(DateTime *p){ +static sqlite3_int64 localtimeOffset( + DateTime *p, /* Date at which to calculate offset */ + sqlite3_context *pCtx, /* Write error here if one occurs */ + int *pRc /* OUT: Error code. SQLITE_OK or ERROR */ +){ DateTime x, y; time_t t; + struct tm sLocal; + + /* Initialize the contents of sLocal to avoid a compiler warning. */ + memset(&sLocal, 0, sizeof(sLocal)); + x = *p; computeYMD_HMS(&x); if( x.Y<1971 || x.Y>=2038 ){ @@ -11125,48 +14132,24 @@ static sqlite3_int64 localtimeOffset(DateTime *p){ x.tz = 0; x.validJD = 0; computeJD(&x); - t = x.iJD/1000 - 21086676*(i64)10000; -#ifdef HAVE_LOCALTIME_R - { - struct tm sLocal; - localtime_r(&t, &sLocal); - y.Y = sLocal.tm_year + 1900; - y.M = sLocal.tm_mon + 1; - y.D = sLocal.tm_mday; - y.h = sLocal.tm_hour; - y.m = sLocal.tm_min; - y.s = sLocal.tm_sec; - } -#elif defined(HAVE_LOCALTIME_S) - { - struct tm sLocal; - localtime_s(&sLocal, &t); - y.Y = sLocal.tm_year + 1900; - y.M = sLocal.tm_mon + 1; - y.D = sLocal.tm_mday; - y.h = sLocal.tm_hour; - y.m = sLocal.tm_min; - y.s = sLocal.tm_sec; - } -#else - { - struct tm *pTm; - sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER)); - pTm = localtime(&t); - y.Y = pTm->tm_year + 1900; - y.M = pTm->tm_mon + 1; - y.D = pTm->tm_mday; - y.h = pTm->tm_hour; - y.m = pTm->tm_min; - y.s = pTm->tm_sec; - sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER)); + t = (time_t)(x.iJD/1000 - 21086676*(i64)10000); + if( osLocaltime(&t, &sLocal) ){ + sqlite3_result_error(pCtx, "local time unavailable", -1); + *pRc = SQLITE_ERROR; + return 0; } -#endif + y.Y = sLocal.tm_year + 1900; + y.M = sLocal.tm_mon + 1; + y.D = sLocal.tm_mday; + y.h = sLocal.tm_hour; + y.m = sLocal.tm_min; + y.s = sLocal.tm_sec; y.validYMD = 1; y.validHMS = 1; y.validJD = 0; y.validTZ = 0; computeJD(&y); + *pRc = SQLITE_OK; return y.iJD - x.iJD; } #endif /* SQLITE_OMIT_LOCALTIME */ @@ -11190,9 +14173,12 @@ static sqlite3_int64 localtimeOffset(DateTime *p){ ** localtime ** utc ** -** Return 0 on success and 1 if there is any kind of error. +** Return 0 on success and 1 if there is any kind of error. If the error +** is in a system call (i.e. localtime()), then an error message is written +** to context pCtx. If the error is an unrecognized modifier, no error is +** written to pCtx. */ -static int parseModifier(const char *zMod, DateTime *p){ +static int parseModifier(sqlite3_context *pCtx, const char *zMod, DateTime *p){ int rc = 1; int n; double r; @@ -11212,9 +14198,8 @@ static int parseModifier(const char *zMod, DateTime *p){ */ if( strcmp(z, "localtime")==0 ){ computeJD(p); - p->iJD += localtimeOffset(p); + p->iJD += localtimeOffset(p, pCtx, &rc); clearYMD_HMS_TZ(p); - rc = 0; } break; } @@ -11235,11 +14220,12 @@ static int parseModifier(const char *zMod, DateTime *p){ else if( strcmp(z, "utc")==0 ){ sqlite3_int64 c1; computeJD(p); - c1 = localtimeOffset(p); - p->iJD -= c1; - clearYMD_HMS_TZ(p); - p->iJD += c1 - localtimeOffset(p); - rc = 0; + c1 = localtimeOffset(p, pCtx, &rc); + if( rc==SQLITE_OK ){ + p->iJD -= c1; + clearYMD_HMS_TZ(p); + p->iJD += c1 - localtimeOffset(p, pCtx, &rc); + } } #endif break; @@ -11252,8 +14238,9 @@ static int parseModifier(const char *zMod, DateTime *p){ ** weekday N where 0==Sunday, 1==Monday, and so forth. If the ** date is already on the appropriate weekday, this is a no-op. */ - if( strncmp(z, "weekday ", 8)==0 && getValue(&z[8],&r)>0 - && (n=(int)r)==r && n>=0 && r<7 ){ + if( strncmp(z, "weekday ", 8)==0 + && sqlite3AtoF(&z[8], &r, sqlite3Strlen30(&z[8]), SQLITE_UTF8) + && (n=(int)r)==r && n>=0 && r<7 ){ sqlite3_int64 Z; computeYMD_HMS(p); p->validTZ = 0; @@ -11308,8 +14295,11 @@ static int parseModifier(const char *zMod, DateTime *p){ case '8': case '9': { double rRounder; - n = getValue(z, &r); - assert( n>=1 ); + for(n=1; z[n] && z[n]!=':' && !sqlite3Isspace(z[n]); n++){} + if( !sqlite3AtoF(z, &r, n, SQLITE_UTF8) ){ + rc = 1; + break; + } if( z[n]==':' ){ /* A modifier of the form (+|-)HH:MM:SS.FFF adds (or subtracts) the ** specified number of hours, minutes, seconds, and fractional seconds @@ -11404,8 +14394,9 @@ static int isDate( int eType; memset(p, 0, sizeof(*p)); if( argc==0 ){ - setDateTimeToCurrent(context, p); - }else if( (eType = sqlite3_value_type(argv[0]))==SQLITE_FLOAT + return setDateTimeToCurrent(context, p); + } + if( (eType = sqlite3_value_type(argv[0]))==SQLITE_FLOAT || eType==SQLITE_INTEGER ){ p->iJD = (sqlite3_int64)(sqlite3_value_double(argv[0])*86400000.0 + 0.5); p->validJD = 1; @@ -11416,9 +14407,8 @@ static int isDate( } } for(i=1; ipVfs, &rT); -#ifndef SQLITE_OMIT_FLOATING_POINT - t = 86400.0*(rT - 2440587.5) + 0.5; + if( sqlite3OsCurrentTimeInt64(db->pVfs, &iT) ) return; + t = iT/1000 - 10000*(sqlite3_int64)21086676; +#ifdef HAVE_GMTIME_R + pTm = gmtime_r(&t, &sNow); #else - /* without floating point support, rT will have - ** already lost fractional day precision. - */ - t = 86400 * (rT - 2440587) - 43200; + sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER)); + pTm = gmtime(&t); + if( pTm ) memcpy(&sNow, pTm, sizeof(sNow)); + sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER)); #endif -#ifdef HAVE_GMTIME_R - { - struct tm sNow; - gmtime_r(&t, &sNow); + if( pTm ){ strftime(zBuf, 20, zFormat, &sNow); + sqlite3_result_text(context, zBuf, -1, SQLITE_TRANSIENT); } -#else - { - struct tm *pTm; - sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER)); - pTm = gmtime(&t); - strftime(zBuf, 20, zFormat, pTm); - sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER)); - } -#endif - - sqlite3_result_text(context, zBuf, -1, SQLITE_TRANSIENT); } #endif @@ -11771,8 +14751,8 @@ SQLITE_PRIVATE void sqlite3RegisterDateTimeFunctions(void){ FUNCTION(current_date, 0, 0, 0, cdateFunc ), #else STR_FUNCTION(current_time, 0, "%H:%M:%S", 0, currentTimeFunc), - STR_FUNCTION(current_timestamp, 0, "%Y-%m-%d", 0, currentTimeFunc), - STR_FUNCTION(current_date, 0, "%Y-%m-%d %H:%M:%S", 0, currentTimeFunc), + STR_FUNCTION(current_date, 0, "%Y-%m-%d", 0, currentTimeFunc), + STR_FUNCTION(current_timestamp, 0, "%Y-%m-%d %H:%M:%S", 0, currentTimeFunc), #endif }; int i; @@ -11800,8 +14780,6 @@ SQLITE_PRIVATE void sqlite3RegisterDateTimeFunctions(void){ ** ** This file contains OS interface code that is common to all ** architectures. -** -** $Id: os.c,v 1.126 2009/03/25 14:24:42 drh Exp $ */ #define _SQLITE_OS_C_ 1 #undef _SQLITE_OS_C_ @@ -11816,21 +14794,30 @@ SQLITE_PRIVATE void sqlite3RegisterDateTimeFunctions(void){ ** The following functions are instrumented for malloc() failure ** testing: ** -** sqlite3OsOpen() ** sqlite3OsRead() ** sqlite3OsWrite() ** sqlite3OsSync() +** sqlite3OsFileSize() ** sqlite3OsLock() +** sqlite3OsCheckReservedLock() +** sqlite3OsFileControl() +** sqlite3OsShmMap() +** sqlite3OsOpen() +** sqlite3OsDelete() +** sqlite3OsAccess() +** sqlite3OsFullPathname() ** */ -#if defined(SQLITE_TEST) && (SQLITE_OS_WIN==0) - #define DO_OS_MALLOC_TEST if (1) { \ - void *pTstAlloc = sqlite3Malloc(10); \ - if (!pTstAlloc) return SQLITE_IOERR_NOMEM; \ - sqlite3_free(pTstAlloc); \ +#if defined(SQLITE_TEST) +SQLITE_API int sqlite3_memdebug_vfs_oom_test = 1; + #define DO_OS_MALLOC_TEST(x) \ + if (sqlite3_memdebug_vfs_oom_test && (!x || !sqlite3IsMemJournal(x))) { \ + void *pTstAlloc = sqlite3Malloc(10); \ + if (!pTstAlloc) return SQLITE_IOERR_NOMEM; \ + sqlite3_free(pTstAlloc); \ } #else - #define DO_OS_MALLOC_TEST + #define DO_OS_MALLOC_TEST(x) #endif /* @@ -11848,38 +14835,52 @@ SQLITE_PRIVATE int sqlite3OsClose(sqlite3_file *pId){ return rc; } SQLITE_PRIVATE int sqlite3OsRead(sqlite3_file *id, void *pBuf, int amt, i64 offset){ - DO_OS_MALLOC_TEST; + DO_OS_MALLOC_TEST(id); return id->pMethods->xRead(id, pBuf, amt, offset); } SQLITE_PRIVATE int sqlite3OsWrite(sqlite3_file *id, const void *pBuf, int amt, i64 offset){ - DO_OS_MALLOC_TEST; + DO_OS_MALLOC_TEST(id); return id->pMethods->xWrite(id, pBuf, amt, offset); } SQLITE_PRIVATE int sqlite3OsTruncate(sqlite3_file *id, i64 size){ return id->pMethods->xTruncate(id, size); } SQLITE_PRIVATE int sqlite3OsSync(sqlite3_file *id, int flags){ - DO_OS_MALLOC_TEST; + DO_OS_MALLOC_TEST(id); return id->pMethods->xSync(id, flags); } SQLITE_PRIVATE int sqlite3OsFileSize(sqlite3_file *id, i64 *pSize){ - DO_OS_MALLOC_TEST; + DO_OS_MALLOC_TEST(id); return id->pMethods->xFileSize(id, pSize); } SQLITE_PRIVATE int sqlite3OsLock(sqlite3_file *id, int lockType){ - DO_OS_MALLOC_TEST; + DO_OS_MALLOC_TEST(id); return id->pMethods->xLock(id, lockType); } SQLITE_PRIVATE int sqlite3OsUnlock(sqlite3_file *id, int lockType){ return id->pMethods->xUnlock(id, lockType); } SQLITE_PRIVATE int sqlite3OsCheckReservedLock(sqlite3_file *id, int *pResOut){ - DO_OS_MALLOC_TEST; + DO_OS_MALLOC_TEST(id); return id->pMethods->xCheckReservedLock(id, pResOut); } + +/* +** Use sqlite3OsFileControl() when we are doing something that might fail +** and we need to know about the failures. Use sqlite3OsFileControlHint() +** when simply tossing information over the wall to the VFS and we do not +** really care if the VFS receives and understands the information since it +** is only a hint and can be safely ignored. The sqlite3OsFileControlHint() +** routine has no return value since the return value would be meaningless. +*/ SQLITE_PRIVATE int sqlite3OsFileControl(sqlite3_file *id, int op, void *pArg){ + DO_OS_MALLOC_TEST(id); return id->pMethods->xFileControl(id, op, pArg); } +SQLITE_PRIVATE void sqlite3OsFileControlHint(sqlite3_file *id, int op, void *pArg){ + (void)id->pMethods->xFileControl(id, op, pArg); +} + SQLITE_PRIVATE int sqlite3OsSectorSize(sqlite3_file *id){ int (*xSectorSize)(sqlite3_file*) = id->pMethods->xSectorSize; return (xSectorSize ? xSectorSize(id) : SQLITE_DEFAULT_SECTOR_SIZE); @@ -11887,6 +14888,25 @@ SQLITE_PRIVATE int sqlite3OsSectorSize(sqlite3_file *id){ SQLITE_PRIVATE int sqlite3OsDeviceCharacteristics(sqlite3_file *id){ return id->pMethods->xDeviceCharacteristics(id); } +SQLITE_PRIVATE int sqlite3OsShmLock(sqlite3_file *id, int offset, int n, int flags){ + return id->pMethods->xShmLock(id, offset, n, flags); +} +SQLITE_PRIVATE void sqlite3OsShmBarrier(sqlite3_file *id){ + id->pMethods->xShmBarrier(id); +} +SQLITE_PRIVATE int sqlite3OsShmUnmap(sqlite3_file *id, int deleteFlag){ + return id->pMethods->xShmUnmap(id, deleteFlag); +} +SQLITE_PRIVATE int sqlite3OsShmMap( + sqlite3_file *id, /* Database file handle */ + int iPage, + int pgsz, + int bExtend, /* True to extend file if necessary */ + void volatile **pp /* OUT: Pointer to mapping */ +){ + DO_OS_MALLOC_TEST(id); + return id->pMethods->xShmMap(id, iPage, pgsz, bExtend, pp); +} /* ** The next group of routines are convenience wrappers around the @@ -11900,12 +14920,18 @@ SQLITE_PRIVATE int sqlite3OsOpen( int *pFlagsOut ){ int rc; - DO_OS_MALLOC_TEST; - rc = pVfs->xOpen(pVfs, zPath, pFile, flags, pFlagsOut); + DO_OS_MALLOC_TEST(0); + /* 0x87f7f is a mask of SQLITE_OPEN_ flags that are valid to be passed + ** down into the VFS layer. Some SQLITE_OPEN_ flags (for example, + ** SQLITE_OPEN_FULLMUTEX or SQLITE_OPEN_SHAREDCACHE) are blocked before + ** reaching the VFS. */ + rc = pVfs->xOpen(pVfs, zPath, pFile, flags & 0x87f7f, pFlagsOut); assert( rc==SQLITE_OK || pFile->pMethods==0 ); return rc; } SQLITE_PRIVATE int sqlite3OsDelete(sqlite3_vfs *pVfs, const char *zPath, int dirSync){ + DO_OS_MALLOC_TEST(0); + assert( dirSync==0 || dirSync==1 ); return pVfs->xDelete(pVfs, zPath, dirSync); } SQLITE_PRIVATE int sqlite3OsAccess( @@ -11914,7 +14940,7 @@ SQLITE_PRIVATE int sqlite3OsAccess( int flags, int *pResOut ){ - DO_OS_MALLOC_TEST; + DO_OS_MALLOC_TEST(0); return pVfs->xAccess(pVfs, zPath, flags, pResOut); } SQLITE_PRIVATE int sqlite3OsFullPathname( @@ -11923,6 +14949,8 @@ SQLITE_PRIVATE int sqlite3OsFullPathname( int nPathOut, char *zPathOut ){ + DO_OS_MALLOC_TEST(0); + zPathOut[0] = 0; return pVfs->xFullPathname(pVfs, zPath, nPathOut, zPathOut); } #ifndef SQLITE_OMIT_LOAD_EXTENSION @@ -11945,8 +14973,22 @@ SQLITE_PRIVATE int sqlite3OsRandomness(sqlite3_vfs *pVfs, int nByte, char *zBufO SQLITE_PRIVATE int sqlite3OsSleep(sqlite3_vfs *pVfs, int nMicro){ return pVfs->xSleep(pVfs, nMicro); } -SQLITE_PRIVATE int sqlite3OsCurrentTime(sqlite3_vfs *pVfs, double *pTimeOut){ - return pVfs->xCurrentTime(pVfs, pTimeOut); +SQLITE_PRIVATE int sqlite3OsCurrentTimeInt64(sqlite3_vfs *pVfs, sqlite3_int64 *pTimeOut){ + int rc; + /* IMPLEMENTATION-OF: R-49045-42493 SQLite will use the xCurrentTimeInt64() + ** method to get the current date and time if that method is available + ** (if iVersion is 2 or greater and the function pointer is not NULL) and + ** will fall back to xCurrentTime() if xCurrentTimeInt64() is + ** unavailable. + */ + if( pVfs->iVersion>=2 && pVfs->xCurrentTimeInt64 ){ + rc = pVfs->xCurrentTimeInt64(pVfs, pTimeOut); + }else{ + double r; + rc = pVfs->xCurrentTime(pVfs, &r); + *pTimeOut = (sqlite3_int64)(r*86400000.0); + } + return rc; } SQLITE_PRIVATE int sqlite3OsOpenMalloc( @@ -11958,7 +15000,7 @@ SQLITE_PRIVATE int sqlite3OsOpenMalloc( ){ int rc = SQLITE_NOMEM; sqlite3_file *pFile; - pFile = (sqlite3_file *)sqlite3Malloc(pVfs->szOsFile); + pFile = (sqlite3_file *)sqlite3MallocZero(pVfs->szOsFile); if( pFile ){ rc = sqlite3OsOpen(pVfs, zFile, pFile, flags, pOutFlags); if( rc!=SQLITE_OK ){ @@ -11977,6 +15019,19 @@ SQLITE_PRIVATE int sqlite3OsCloseFree(sqlite3_file *pFile){ return rc; } +/* +** This function is a wrapper around the OS specific implementation of +** sqlite3_os_init(). The purpose of the wrapper is to provide the +** ability to simulate a malloc failure, so that the handling of an +** error in sqlite3_os_init() by the upper layers can be tested. +*/ +SQLITE_PRIVATE int sqlite3OsInit(void){ + void *p = sqlite3_malloc(10); + if( p==0 ) return SQLITE_NOMEM; + sqlite3_free(p); + return sqlite3_os_init(); +} + /* ** The list of all registered VFS implementations. */ @@ -12034,12 +15089,12 @@ static void vfsUnlink(sqlite3_vfs *pVfs){ ** true. */ SQLITE_API int sqlite3_vfs_register(sqlite3_vfs *pVfs, int makeDflt){ - sqlite3_mutex *mutex = 0; + MUTEX_LOGIC(sqlite3_mutex *mutex;) #ifndef SQLITE_OMIT_AUTOINIT int rc = sqlite3_initialize(); if( rc ) return rc; #endif - mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER); + MUTEX_LOGIC( mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER); ) sqlite3_mutex_enter(mutex); vfsUnlink(pVfs); if( makeDflt || vfsList==0 ){ @@ -12081,10 +15136,6 @@ SQLITE_API int sqlite3_vfs_unregister(sqlite3_vfs *pVfs){ ** ************************************************************************* ** -** $Id: fault.c,v 1.11 2008/09/02 00:52:52 drh Exp $ -*/ - -/* ** This file contains code to support the concept of "benign" ** malloc failures (when the xMalloc() or xRealloc() method of the ** sqlite3_mem_methods structure fails to allocate a block of memory @@ -12179,8 +15230,6 @@ SQLITE_PRIVATE void sqlite3EndBenignMalloc(void){ ** here always fail. SQLite will not operate with these drivers. These ** are merely placeholders. Real drivers must be substituted using ** sqlite3_config() before SQLite will operate. -** -** $Id: mem0.c,v 1.1 2008/10/28 18:58:20 drh Exp $ */ /* @@ -12242,9 +15291,31 @@ SQLITE_PRIVATE void sqlite3MemSetDefault(void){ ** to obtain the memory it needs. ** ** This file contains implementations of the low-level memory allocation -** routines specified in the sqlite3_mem_methods object. +** routines specified in the sqlite3_mem_methods object. The content of +** this file is only used if SQLITE_SYSTEM_MALLOC is defined. The +** SQLITE_SYSTEM_MALLOC macro is defined automatically if neither the +** SQLITE_MEMDEBUG nor the SQLITE_WIN32_MALLOC macros are defined. The +** default configuration is to use memory allocation routines in this +** file. +** +** C-preprocessor macro summary: ** -** $Id: mem1.c,v 1.30 2009/03/23 04:33:33 danielk1977 Exp $ +** HAVE_MALLOC_USABLE_SIZE The configure script sets this symbol if +** the malloc_usable_size() interface exists +** on the target platform. Or, this symbol +** can be set manually, if desired. +** If an equivalent interface exists by +** a different name, using a separate -D +** option to rename it. +** +** SQLITE_WITHOUT_ZONEMALLOC Some older macs lack support for the zone +** memory allocator. Set this symbol to enable +** building on older macs. +** +** SQLITE_WITHOUT_MSIZE Set this symbol to disable the use of +** _msize() on windows systems. This might +** be necessary when compiling for Delphi, +** for example. */ /* @@ -12254,6 +15325,55 @@ SQLITE_PRIVATE void sqlite3MemSetDefault(void){ */ #ifdef SQLITE_SYSTEM_MALLOC +/* +** The MSVCRT has malloc_usable_size() but it is called _msize(). +** The use of _msize() is automatic, but can be disabled by compiling +** with -DSQLITE_WITHOUT_MSIZE +*/ +#if defined(_MSC_VER) && !defined(SQLITE_WITHOUT_MSIZE) +# define SQLITE_MALLOCSIZE _msize +#endif + +#if defined(__APPLE__) && !defined(SQLITE_WITHOUT_ZONEMALLOC) + +/* +** Use the zone allocator available on apple products unless the +** SQLITE_WITHOUT_ZONEMALLOC symbol is defined. +*/ +#include +#include +#include +static malloc_zone_t* _sqliteZone_; +#define SQLITE_MALLOC(x) malloc_zone_malloc(_sqliteZone_, (x)) +#define SQLITE_FREE(x) malloc_zone_free(_sqliteZone_, (x)); +#define SQLITE_REALLOC(x,y) malloc_zone_realloc(_sqliteZone_, (x), (y)) +#define SQLITE_MALLOCSIZE(x) \ + (_sqliteZone_ ? _sqliteZone_->size(_sqliteZone_,x) : malloc_size(x)) + +#else /* if not __APPLE__ */ + +/* +** Use standard C library malloc and free on non-Apple systems. +** Also used by Apple systems if SQLITE_WITHOUT_ZONEMALLOC is defined. +*/ +#define SQLITE_MALLOC(x) malloc(x) +#define SQLITE_FREE(x) free(x) +#define SQLITE_REALLOC(x,y) realloc((x),(y)) + +#if (defined(_MSC_VER) && !defined(SQLITE_WITHOUT_MSIZE)) \ + || (defined(HAVE_MALLOC_H) && defined(HAVE_MALLOC_USABLE_SIZE)) +# include /* Needed for malloc_usable_size on linux */ +#endif +#ifdef HAVE_MALLOC_USABLE_SIZE +# ifndef SQLITE_MALLOCSIZE +# define SQLITE_MALLOCSIZE(x) malloc_usable_size(x) +# endif +#else +# undef SQLITE_MALLOCSIZE +#endif + +#endif /* __APPLE__ or not __APPLE__ */ + /* ** Like malloc(), but remember the size of the allocation ** so that we can find it later using sqlite3MemSize(). @@ -12263,15 +15383,27 @@ SQLITE_PRIVATE void sqlite3MemSetDefault(void){ ** routines. */ static void *sqlite3MemMalloc(int nByte){ +#ifdef SQLITE_MALLOCSIZE + void *p = SQLITE_MALLOC( nByte ); + if( p==0 ){ + testcase( sqlite3GlobalConfig.xLog!=0 ); + sqlite3_log(SQLITE_NOMEM, "failed to allocate %u bytes of memory", nByte); + } + return p; +#else sqlite3_int64 *p; assert( nByte>0 ); nByte = ROUND8(nByte); - p = malloc( nByte+8 ); + p = SQLITE_MALLOC( nByte+8 ); if( p ){ p[0] = nByte; p++; + }else{ + testcase( sqlite3GlobalConfig.xLog!=0 ); + sqlite3_log(SQLITE_NOMEM, "failed to allocate %u bytes of memory", nByte); } return (void *)p; +#endif } /* @@ -12283,10 +15415,30 @@ static void *sqlite3MemMalloc(int nByte){ ** by higher-level routines. */ static void sqlite3MemFree(void *pPrior){ +#ifdef SQLITE_MALLOCSIZE + SQLITE_FREE(pPrior); +#else sqlite3_int64 *p = (sqlite3_int64*)pPrior; assert( pPrior!=0 ); p--; - free(p); + SQLITE_FREE(p); +#endif +} + +/* +** Report the allocated size of a prior return from xMalloc() +** or xRealloc(). +*/ +static int sqlite3MemSize(void *pPrior){ +#ifdef SQLITE_MALLOCSIZE + return pPrior ? (int)SQLITE_MALLOCSIZE(pPrior) : 0; +#else + sqlite3_int64 *p; + if( pPrior==0 ) return 0; + p = (sqlite3_int64*)pPrior; + p--; + return (int)p[0]; +#endif } /* @@ -12300,29 +15452,32 @@ static void sqlite3MemFree(void *pPrior){ ** routines and redirected to xFree. */ static void *sqlite3MemRealloc(void *pPrior, int nByte){ +#ifdef SQLITE_MALLOCSIZE + void *p = SQLITE_REALLOC(pPrior, nByte); + if( p==0 ){ + testcase( sqlite3GlobalConfig.xLog!=0 ); + sqlite3_log(SQLITE_NOMEM, + "failed memory resize %u to %u bytes", + SQLITE_MALLOCSIZE(pPrior), nByte); + } + return p; +#else sqlite3_int64 *p = (sqlite3_int64*)pPrior; assert( pPrior!=0 && nByte>0 ); - nByte = ROUND8(nByte); - p = (sqlite3_int64*)pPrior; + assert( nByte==ROUND8(nByte) ); /* EV: R-46199-30249 */ p--; - p = realloc(p, nByte+8 ); + p = SQLITE_REALLOC(p, nByte+8 ); if( p ){ p[0] = nByte; p++; + }else{ + testcase( sqlite3GlobalConfig.xLog!=0 ); + sqlite3_log(SQLITE_NOMEM, + "failed memory resize %u to %u bytes", + sqlite3MemSize(pPrior), nByte); } return (void*)p; -} - -/* -** Report the allocated size of a prior return from xMalloc() -** or xRealloc(). -*/ -static int sqlite3MemSize(void *pPrior){ - sqlite3_int64 *p; - if( pPrior==0 ) return 0; - p = (sqlite3_int64*)pPrior; - p--; - return (int)p[0]; +#endif } /* @@ -12336,6 +15491,34 @@ static int sqlite3MemRoundup(int n){ ** Initialize this module. */ static int sqlite3MemInit(void *NotUsed){ +#if defined(__APPLE__) && !defined(SQLITE_WITHOUT_ZONEMALLOC) + int cpuCount; + size_t len; + if( _sqliteZone_ ){ + return SQLITE_OK; + } + len = sizeof(cpuCount); + /* One usually wants to use hw.acctivecpu for MT decisions, but not here */ + sysctlbyname("hw.ncpu", &cpuCount, &len, NULL, 0); + if( cpuCount>1 ){ + /* defer MT decisions to system malloc */ + _sqliteZone_ = malloc_default_zone(); + }else{ + /* only 1 core, use our own zone to contention over global locks, + ** e.g. we have our own dedicated locks */ + bool success; + malloc_zone_t* newzone = malloc_create_zone(4096, 0); + malloc_set_zone_name(newzone, "Sqlite_Heap"); + do{ + success = OSAtomicCompareAndSwapPtrBarrier(NULL, newzone, + (void * volatile *)&_sqliteZone_); + }while(!_sqliteZone_); + if( !success ){ + /* somebody registered a zone first */ + malloc_destroy_zone(newzone); + } + } +#endif UNUSED_PARAMETER(NotUsed); return SQLITE_OK; } @@ -12392,8 +15575,6 @@ SQLITE_PRIVATE void sqlite3MemSetDefault(void){ ** ** This file contains implementations of the low-level memory allocation ** routines specified in the sqlite3_mem_methods object. -** -** $Id: mem2.c,v 1.45 2009/03/23 04:33:33 danielk1977 Exp $ */ /* @@ -12412,6 +15593,7 @@ SQLITE_PRIVATE void sqlite3MemSetDefault(void){ # define backtrace(A,B) 1 # define backtrace_symbols_fd(A,B,C) #endif +/* #include */ /* ** Each memory allocation looks like this: @@ -12431,7 +15613,8 @@ struct MemBlockHdr { struct MemBlockHdr *pNext, *pPrev; /* Linked list of all unfreed memory */ char nBacktrace; /* Number of backtraces on this alloc */ char nBacktraceSlots; /* Available backtrace slots */ - short nTitle; /* Bytes of title; includes '\0' */ + u8 nTitle; /* Bytes of title; includes '\0' */ + u8 eType; /* Allocation type code */ int iForeGuard; /* Guard word for sanity */ }; @@ -12584,6 +15767,31 @@ static int sqlite3MemRoundup(int n){ return ROUND8(n); } +/* +** Fill a buffer with pseudo-random bytes. This is used to preset +** the content of a new memory allocation to unpredictable values and +** to clear the content of a freed allocation to unpredictable values. +*/ +static void randomFill(char *pBuf, int nByte){ + unsigned int x, y, r; + x = SQLITE_PTR_TO_INT(pBuf); + y = nByte | 1; + while( nByte >= 4 ){ + x = (x>>1) ^ (-(x&1) & 0xd0000001); + y = y*1103515245 + 12345; + r = x ^ y; + *(int*)pBuf = r; + pBuf += 4; + nByte -= 4; + } + while( nByte-- > 0 ){ + x = (x>>1) ^ (-(x&1) & 0xd0000001); + y = y*1103515245 + 12345; + r = x ^ y; + *(pBuf++) = r & 0xff; + } +} + /* ** Allocate nByte bytes of memory. */ @@ -12614,6 +15822,7 @@ static void *sqlite3MemMalloc(int nByte){ } mem.pLast = pHdr; pHdr->iForeGuard = FOREGUARD; + pHdr->eType = MEMTYPE_HEAP; pHdr->nBacktraceSlots = mem.nBacktrace; pHdr->nTitle = mem.nTitle; if( mem.nBacktrace ){ @@ -12634,7 +15843,8 @@ static void *sqlite3MemMalloc(int nByte){ adjustStats(nByte, +1); pInt = (int*)&pHdr[1]; pInt[nReserve/sizeof(int)] = REARGUARD; - memset(pInt, 0x65, nReserve); + randomFill((char*)pInt, nByte); + memset(((char*)pInt)+nByte, 0x65, nReserve-nByte); p = (void*)pInt; } sqlite3_mutex_leave(mem.mutex); @@ -12648,7 +15858,8 @@ static void sqlite3MemFree(void *pPrior){ struct MemBlockHdr *pHdr; void **pBt; char *z; - assert( sqlite3GlobalConfig.bMemstat || mem.mutex!=0 ); + assert( sqlite3GlobalConfig.bMemstat || sqlite3GlobalConfig.bCoreMutex==0 + || mem.mutex!=0 ); pHdr = sqlite3MemsysGetHeader(pPrior); pBt = (void**)pHdr; pBt -= pHdr->nBacktraceSlots; @@ -12670,8 +15881,8 @@ static void sqlite3MemFree(void *pPrior){ z = (char*)pBt; z -= pHdr->nTitle; adjustStats(pHdr->iSize, -1); - memset(z, 0x2b, sizeof(void*)*pHdr->nBacktraceSlots + sizeof(*pHdr) + - pHdr->iSize + sizeof(int) + pHdr->nTitle); + randomFill(z, sizeof(void*)*pHdr->nBacktraceSlots + sizeof(*pHdr) + + pHdr->iSize + sizeof(int) + pHdr->nTitle); free(z); sqlite3_mutex_leave(mem.mutex); } @@ -12689,12 +15900,13 @@ static void *sqlite3MemRealloc(void *pPrior, int nByte){ struct MemBlockHdr *pOldHdr; void *pNew; assert( mem.disallow==0 ); + assert( (nByte & 7)==0 ); /* EV: R-46199-30249 */ pOldHdr = sqlite3MemsysGetHeader(pPrior); pNew = sqlite3MemMalloc(nByte); if( pNew ){ memcpy(pNew, pPrior, nByteiSize ? nByte : pOldHdr->iSize); if( nByte>pOldHdr->iSize ){ - memset(&((char*)pNew)[pOldHdr->iSize], 0x2b, nByte - pOldHdr->iSize); + randomFill(&((char*)pNew)[pOldHdr->iSize], nByte - pOldHdr->iSize); } sqlite3MemFree(pPrior); } @@ -12719,6 +15931,62 @@ SQLITE_PRIVATE void sqlite3MemSetDefault(void){ sqlite3_config(SQLITE_CONFIG_MALLOC, &defaultMethods); } +/* +** Set the "type" of an allocation. +*/ +SQLITE_PRIVATE void sqlite3MemdebugSetType(void *p, u8 eType){ + if( p && sqlite3GlobalConfig.m.xMalloc==sqlite3MemMalloc ){ + struct MemBlockHdr *pHdr; + pHdr = sqlite3MemsysGetHeader(p); + assert( pHdr->iForeGuard==FOREGUARD ); + pHdr->eType = eType; + } +} + +/* +** Return TRUE if the mask of type in eType matches the type of the +** allocation p. Also return true if p==NULL. +** +** This routine is designed for use within an assert() statement, to +** verify the type of an allocation. For example: +** +** assert( sqlite3MemdebugHasType(p, MEMTYPE_DB) ); +*/ +SQLITE_PRIVATE int sqlite3MemdebugHasType(void *p, u8 eType){ + int rc = 1; + if( p && sqlite3GlobalConfig.m.xMalloc==sqlite3MemMalloc ){ + struct MemBlockHdr *pHdr; + pHdr = sqlite3MemsysGetHeader(p); + assert( pHdr->iForeGuard==FOREGUARD ); /* Allocation is valid */ + if( (pHdr->eType&eType)==0 ){ + rc = 0; + } + } + return rc; +} + +/* +** Return TRUE if the mask of type in eType matches no bits of the type of the +** allocation p. Also return true if p==NULL. +** +** This routine is designed for use within an assert() statement, to +** verify the type of an allocation. For example: +** +** assert( sqlite3MemdebugNoType(p, MEMTYPE_DB) ); +*/ +SQLITE_PRIVATE int sqlite3MemdebugNoType(void *p, u8 eType){ + int rc = 1; + if( p && sqlite3GlobalConfig.m.xMalloc==sqlite3MemMalloc ){ + struct MemBlockHdr *pHdr; + pHdr = sqlite3MemsysGetHeader(p); + assert( pHdr->iForeGuard==FOREGUARD ); /* Allocation is valid */ + if( (pHdr->eType&eType)!=0 ){ + rc = 0; + } + } + return rc; +} + /* ** Set the number of backtrace levels kept for each allocation. ** A value of zero turns off backtracing. The number is always rounded @@ -12841,8 +16109,6 @@ SQLITE_PRIVATE int sqlite3MemdebugMallocCount(){ ** ** This version of the memory allocation subsystem is included ** in the build only if SQLITE_ENABLE_MEMSYS3 is defined. -** -** $Id: mem3.c,v 1.25 2008/11/19 16:52:44 danielk1977 Exp $ */ /* @@ -13253,7 +16519,7 @@ static void *memsys3MallocUnsafe(int nByte){ ** This function assumes that the necessary mutexes, if any, are ** already held by the caller. Hence "Unsafe". */ -void memsys3FreeUnsafe(void *pOld){ +static void memsys3FreeUnsafe(void *pOld){ Mem3Block *p = (Mem3Block*)pOld; int i; u32 size, x; @@ -13328,7 +16594,7 @@ static void *memsys3Malloc(int nBytes){ /* ** Free memory. */ -void memsys3Free(void *pPrior){ +static void memsys3Free(void *pPrior){ assert( pPrior ); memsys3Enter(); memsys3FreeUnsafe(pPrior); @@ -13338,7 +16604,7 @@ void memsys3Free(void *pPrior){ /* ** Change the size of an existing memory allocation */ -void *memsys3Realloc(void *pPrior, int nBytes){ +static void *memsys3Realloc(void *pPrior, int nBytes){ int nOld; void *p; if( pPrior==0 ){ @@ -13396,6 +16662,7 @@ static int memsys3Init(void *NotUsed){ */ static void memsys3Shutdown(void *NotUsed){ UNUSED_PARAMETER(NotUsed); + mem3.mutex = 0; return; } @@ -13522,7 +16789,7 @@ SQLITE_PRIVATE const sqlite3_mem_methods *sqlite3MemGetMemsys3(void){ ** allocation subsystem for use by SQLite. ** ** This version of the memory allocation subsystem omits all -** use of malloc(). The SQLite user supplies a block of memory +** use of malloc(). The application gives SQLite a block of memory ** before calling sqlite3_initialize() from which allocations ** are made and returned by the xMalloc() and xRealloc() ** implementations. Once sqlite3_initialize() has been called, @@ -13532,7 +16799,30 @@ SQLITE_PRIVATE const sqlite3_mem_methods *sqlite3MemGetMemsys3(void){ ** This version of the memory allocation subsystem is included ** in the build only if SQLITE_ENABLE_MEMSYS5 is defined. ** -** $Id: mem5.c,v 1.19 2008/11/19 16:52:44 danielk1977 Exp $ +** This memory allocator uses the following algorithm: +** +** 1. All memory allocations sizes are rounded up to a power of 2. +** +** 2. If two adjacent free blocks are the halves of a larger block, +** then the two blocks are coalesed into the single larger block. +** +** 3. New memory is allocated from the first available free block. +** +** This algorithm is described in: J. M. Robson. "Bounds for Some Functions +** Concerning Dynamic Storage Allocation". Journal of the Association for +** Computing Machinery, Volume 21, Number 8, July 1974, pages 491-499. +** +** Let n be the size of the largest allocation divided by the minimum +** allocation size (after rounding all sizes up to a power of 2.) Let M +** be the maximum amount of memory ever outstanding at one time. Let +** N be the total amount of memory available for allocation. Robson +** proved that this memory allocator will never breakdown due to +** fragmentation as long as the following constraint holds: +** +** N >= M*(1 + log2(n)/2) - n + 1 +** +** The sqlite3_status() logic tracks the maximum values of n and M so +** that an application can, at any time, verify this constraint. */ /* @@ -13545,6 +16835,9 @@ SQLITE_PRIVATE const sqlite3_mem_methods *sqlite3MemGetMemsys3(void){ ** A minimum allocation is an instance of the following structure. ** Larger allocations are an array of these structures where the ** size of the array is a power of 2. +** +** The size of this object must be a power of two. That fact is +** verified in memsys5Init(). */ typedef struct Mem5Link Mem5Link; struct Mem5Link { @@ -13553,16 +16846,16 @@ struct Mem5Link { }; /* -** Maximum size of any allocation is ((1<=0 && i0 ); + /* Keep track of the maximum allocation request. Even unfulfilled ** requests are counted */ if( (u32)nByte>mem5.maxRequest ){ mem5.maxRequest = nByte; } + /* Abort if the requested allocation size is larger than the largest + ** power of two that we can represent using 32-bit signed integers. + */ + if( nByte > 0x40000000 ){ + return 0; + } + /* Round nByte up to the next valid power of two */ - for(iFullSz=mem5.nAtom, iLogsize=0; iFullSzLOGMAX ) return 0; + if( iBin>LOGMAX ){ + testcase( sqlite3GlobalConfig.xLog!=0 ); + sqlite3_log(SQLITE_NOMEM, "failed to allocate %u bytes", nByte); + return 0; + } i = memsys5UnlinkFirst(iBin); while( iBin>iLogsize ){ int newSize; @@ -13750,7 +17069,7 @@ static void *memsys5MallocUnsafe(int nByte){ if( mem5.maxOut=0 && iBlock0 ); - assert( mem5.currentOut>=(size*mem5.nAtom) ); + assert( mem5.currentOut>=(size*mem5.szAtom) ); mem5.currentCount--; - mem5.currentOut -= size*mem5.nAtom; + mem5.currentOut -= size*mem5.szAtom; assert( mem5.currentOut>0 || mem5.currentCount==0 ); assert( mem5.currentCount>0 || mem5.currentOut==0 ); mem5.aCtrl[iBlock] = CTRL_FREE | iLogsize; - while( iLogsize>iLogsize) & 1 ){ iBuddy = iBlock - size; @@ -13824,28 +17143,36 @@ static void *memsys5Malloc(int nBytes){ /* ** Free memory. +** +** The outer layer memory allocator prevents this routine from +** being called with pPrior==0. */ static void memsys5Free(void *pPrior){ - if( pPrior==0 ){ -assert(0); - return; - } + assert( pPrior!=0 ); memsys5Enter(); memsys5FreeUnsafe(pPrior); memsys5Leave(); } /* -** Change the size of an existing memory allocation +** Change the size of an existing memory allocation. +** +** The outer layer memory allocator prevents this routine from +** being called with pPrior==0. +** +** nBytes is always a value obtained from a prior call to +** memsys5Round(). Hence nBytes is always a non-negative power +** of two. If nBytes==0 that means that an oversize allocation +** (an allocation larger than 0x40000000) was requested and this +** routine should return 0 without freeing pPrior. */ static void *memsys5Realloc(void *pPrior, int nBytes){ int nOld; void *p; - if( pPrior==0 ){ - return memsys5Malloc(nBytes); - } - if( nBytes<=0 ){ - memsys5Free(pPrior); + assert( pPrior!=0 ); + assert( (nBytes&(nBytes-1))==0 ); /* EV: R-46199-30249 */ + assert( nBytes>=0 ); + if( nBytes==0 ){ return 0; } nOld = memsys5Size(pPrior); @@ -13863,45 +17190,74 @@ static void *memsys5Realloc(void *pPrior, int nBytes){ } /* -** Round up a request size to the next valid allocation size. +** Round up a request size to the next valid allocation size. If +** the allocation is too large to be handled by this allocation system, +** return 0. +** +** All allocations must be a power of two and must be expressed by a +** 32-bit signed integer. Hence the largest allocation is 0x40000000 +** or 1073741824 bytes. */ static int memsys5Roundup(int n){ int iFullSz; - for(iFullSz=mem5.nAtom; iFullSz 0x40000000 ) return 0; + for(iFullSz=mem5.szAtom; iFullSz 0 +** memsys5Log(2) -> 1 +** memsys5Log(4) -> 2 +** memsys5Log(5) -> 3 +** memsys5Log(8) -> 3 +** memsys5Log(9) -> 4 +*/ static int memsys5Log(int iValue){ int iLog; - for(iLog=0; (1<mem5.nAtom ){ - mem5.nAtom = mem5.nAtom << 1; + mem5.szAtom = (1<mem5.szAtom ){ + mem5.szAtom = mem5.szAtom << 1; } - mem5.nBlock = (nByte / (mem5.nAtom+sizeof(u8))); + mem5.nBlock = (nByte / (mem5.szAtom+sizeof(u8))); mem5.zPool = zByte; - mem5.aCtrl = (u8 *)&mem5.zPool[mem5.nBlock*mem5.nAtom]; + mem5.aCtrl = (u8 *)&mem5.zPool[mem5.nBlock*mem5.szAtom]; for(ii=0; ii<=LOGMAX; ii++){ mem5.aiFreelist[ii] = -1; @@ -13918,6 +17274,11 @@ static int memsys5Init(void *NotUsed){ assert((iOffset+nAlloc)>mem5.nBlock); } + /* If a mutex is required for normal operation, allocate one */ + if( sqlite3GlobalConfig.bMemstat==0 ){ + mem5.mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MEM); + } + return SQLITE_OK; } @@ -13926,15 +17287,16 @@ static int memsys5Init(void *NotUsed){ */ static void memsys5Shutdown(void *NotUsed){ UNUSED_PARAMETER(NotUsed); + mem5.mutex = 0; return; } +#ifdef SQLITE_TEST /* ** Open the file indicated and write a log of all unfreed memory ** allocations into that log. */ SQLITE_PRIVATE void sqlite3Memsys5Dump(const char *zFilename){ -#ifdef SQLITE_DEBUG FILE *out; int i, j, n; int nMinLog; @@ -13950,10 +17312,10 @@ SQLITE_PRIVATE void sqlite3Memsys5Dump(const char *zFilename){ } } memsys5Enter(); - nMinLog = memsys5Log(mem5.nAtom); + nMinLog = memsys5Log(mem5.szAtom); for(i=0; i<=LOGMAX && i+nMinLog<32; i++){ for(n=0, j=mem5.aiFreelist[i]; j>=0; j = MEM5LINK(j)->next, n++){} - fprintf(out, "freelist items of size %d: %d\n", mem5.nAtom << i, n); + fprintf(out, "freelist items of size %d: %d\n", mem5.szAtom << i, n); } fprintf(out, "mem5.nAlloc = %llu\n", mem5.nAlloc); fprintf(out, "mem5.totalAlloc = %llu\n", mem5.totalAlloc); @@ -13969,10 +17331,8 @@ SQLITE_PRIVATE void sqlite3Memsys5Dump(const char *zFilename){ }else{ fclose(out); } -#else - UNUSED_PARAMETER(zFilename); -#endif } +#endif /* ** This routine is the only routine in this file with external @@ -14011,10 +17371,17 @@ SQLITE_PRIVATE const sqlite3_mem_methods *sqlite3MemGetMemsys5(void){ ** This file contains the C functions that implement mutexes. ** ** This file contains code that is common across all mutex implementations. +*/ -** -** $Id: mutex.c,v 1.30 2009/02/17 16:29:11 danielk1977 Exp $ +#if defined(SQLITE_DEBUG) && !defined(SQLITE_MUTEX_OMIT) +/* +** For debugging purposes, record when the mutex subsystem is initialized +** and uninitialized so that we can assert() if there is an attempt to +** allocate a mutex while the system is uninitialized. */ +static SQLITE_WSD int mutexIsInit = 0; +#endif /* SQLITE_DEBUG */ + #ifndef SQLITE_MUTEX_OMIT /* @@ -14022,39 +17389,30 @@ SQLITE_PRIVATE const sqlite3_mem_methods *sqlite3MemGetMemsys5(void){ */ SQLITE_PRIVATE int sqlite3MutexInit(void){ int rc = SQLITE_OK; - if( sqlite3GlobalConfig.bCoreMutex ){ - if( !sqlite3GlobalConfig.mutex.xMutexAlloc ){ - /* If the xMutexAlloc method has not been set, then the user did not - ** install a mutex implementation via sqlite3_config() prior to - ** sqlite3_initialize() being called. This block copies pointers to - ** the default implementation into the sqlite3GlobalConfig structure. - ** - ** The danger is that although sqlite3_config() is not a threadsafe - ** API, sqlite3_initialize() is, and so multiple threads may be - ** attempting to run this function simultaneously. To guard write - ** access to the sqlite3GlobalConfig structure, the 'MASTER' static mutex - ** is obtained before modifying it. - */ - sqlite3_mutex_methods *p = sqlite3DefaultMutex(); - sqlite3_mutex *pMaster = 0; - - rc = p->xMutexInit(); - if( rc==SQLITE_OK ){ - pMaster = p->xMutexAlloc(SQLITE_MUTEX_STATIC_MASTER); - assert(pMaster); - p->xMutexEnter(pMaster); - assert( sqlite3GlobalConfig.mutex.xMutexAlloc==0 - || sqlite3GlobalConfig.mutex.xMutexAlloc==p->xMutexAlloc - ); - if( !sqlite3GlobalConfig.mutex.xMutexAlloc ){ - sqlite3GlobalConfig.mutex = *p; - } - p->xMutexLeave(pMaster); - } + if( !sqlite3GlobalConfig.mutex.xMutexAlloc ){ + /* If the xMutexAlloc method has not been set, then the user did not + ** install a mutex implementation via sqlite3_config() prior to + ** sqlite3_initialize() being called. This block copies pointers to + ** the default implementation into the sqlite3GlobalConfig structure. + */ + sqlite3_mutex_methods const *pFrom; + sqlite3_mutex_methods *pTo = &sqlite3GlobalConfig.mutex; + + if( sqlite3GlobalConfig.bCoreMutex ){ + pFrom = sqlite3DefaultMutex(); }else{ - rc = sqlite3GlobalConfig.mutex.xMutexInit(); + pFrom = sqlite3NoopMutex(); } + memcpy(pTo, pFrom, offsetof(sqlite3_mutex_methods, xMutexAlloc)); + memcpy(&pTo->xMutexFree, &pFrom->xMutexFree, + sizeof(*pTo) - offsetof(sqlite3_mutex_methods, xMutexFree)); + pTo->xMutexAlloc = pFrom->xMutexAlloc; } + rc = sqlite3GlobalConfig.mutex.xMutexInit(); + +#ifdef SQLITE_DEBUG + GLOBAL(int, mutexIsInit) = 1; +#endif return rc; } @@ -14068,6 +17426,11 @@ SQLITE_PRIVATE int sqlite3MutexEnd(void){ if( sqlite3GlobalConfig.mutex.xMutexEnd ){ rc = sqlite3GlobalConfig.mutex.xMutexEnd(); } + +#ifdef SQLITE_DEBUG + GLOBAL(int, mutexIsInit) = 0; +#endif + return rc; } @@ -14085,6 +17448,7 @@ SQLITE_PRIVATE sqlite3_mutex *sqlite3MutexAlloc(int id){ if( !sqlite3GlobalConfig.bCoreMutex ){ return 0; } + assert( GLOBAL(int, mutexIsInit) ); return sqlite3GlobalConfig.mutex.xMutexAlloc(id); } @@ -14144,7 +17508,7 @@ SQLITE_API int sqlite3_mutex_notheld(sqlite3_mutex *p){ } #endif -#endif /* SQLITE_OMIT_MUTEX */ +#endif /* !defined(SQLITE_MUTEX_OMIT) */ /************** End of mutex.c ***********************************************/ /************** Begin file mutex_noop.c **************************************/ @@ -14174,29 +17538,32 @@ SQLITE_API int sqlite3_mutex_notheld(sqlite3_mutex *p){ ** If compiled with SQLITE_DEBUG, then additional logic is inserted ** that does error checking on mutexes to make sure they are being ** called correctly. -** -** $Id: mutex_noop.c,v 1.3 2008/12/05 17:17:08 drh Exp $ */ +#ifndef SQLITE_MUTEX_OMIT -#if defined(SQLITE_MUTEX_NOOP) && !defined(SQLITE_DEBUG) +#ifndef SQLITE_DEBUG /* ** Stub routines for all mutex methods. ** ** This routines provide no mutual exclusion or error checking. */ -static int noopMutexHeld(sqlite3_mutex *p){ return 1; } -static int noopMutexNotheld(sqlite3_mutex *p){ return 1; } static int noopMutexInit(void){ return SQLITE_OK; } static int noopMutexEnd(void){ return SQLITE_OK; } -static sqlite3_mutex *noopMutexAlloc(int id){ return (sqlite3_mutex*)8; } -static void noopMutexFree(sqlite3_mutex *p){ return; } -static void noopMutexEnter(sqlite3_mutex *p){ return; } -static int noopMutexTry(sqlite3_mutex *p){ return SQLITE_OK; } -static void noopMutexLeave(sqlite3_mutex *p){ return; } - -SQLITE_PRIVATE sqlite3_mutex_methods *sqlite3DefaultMutex(void){ - static sqlite3_mutex_methods sMutex = { +static sqlite3_mutex *noopMutexAlloc(int id){ + UNUSED_PARAMETER(id); + return (sqlite3_mutex*)8; +} +static void noopMutexFree(sqlite3_mutex *p){ UNUSED_PARAMETER(p); return; } +static void noopMutexEnter(sqlite3_mutex *p){ UNUSED_PARAMETER(p); return; } +static int noopMutexTry(sqlite3_mutex *p){ + UNUSED_PARAMETER(p); + return SQLITE_OK; +} +static void noopMutexLeave(sqlite3_mutex *p){ UNUSED_PARAMETER(p); return; } + +SQLITE_PRIVATE sqlite3_mutex_methods const *sqlite3NoopMutex(void){ + static const sqlite3_mutex_methods sMutex = { noopMutexInit, noopMutexEnd, noopMutexAlloc, @@ -14205,15 +17572,15 @@ SQLITE_PRIVATE sqlite3_mutex_methods *sqlite3DefaultMutex(void){ noopMutexTry, noopMutexLeave, - noopMutexHeld, - noopMutexNotheld + 0, + 0, }; return &sMutex; } -#endif /* defined(SQLITE_MUTEX_NOOP) && !defined(SQLITE_DEBUG) */ +#endif /* !SQLITE_DEBUG */ -#if defined(SQLITE_MUTEX_NOOP) && defined(SQLITE_DEBUG) +#ifdef SQLITE_DEBUG /* ** In this implementation, error checking is provided for testing ** and debugging purposes. The mutexes still do not provide any @@ -14223,19 +17590,21 @@ SQLITE_PRIVATE sqlite3_mutex_methods *sqlite3DefaultMutex(void){ /* ** The mutex object */ -struct sqlite3_mutex { +typedef struct sqlite3_debug_mutex { int id; /* The mutex type */ int cnt; /* Number of entries without a matching leave */ -}; +} sqlite3_debug_mutex; /* ** The sqlite3_mutex_held() and sqlite3_mutex_notheld() routine are ** intended for use inside assert() statements. */ -static int debugMutexHeld(sqlite3_mutex *p){ +static int debugMutexHeld(sqlite3_mutex *pX){ + sqlite3_debug_mutex *p = (sqlite3_debug_mutex*)pX; return p==0 || p->cnt>0; } -static int debugMutexNotheld(sqlite3_mutex *p){ +static int debugMutexNotheld(sqlite3_mutex *pX){ + sqlite3_debug_mutex *p = (sqlite3_debug_mutex*)pX; return p==0 || p->cnt==0; } @@ -14251,8 +17620,8 @@ static int debugMutexEnd(void){ return SQLITE_OK; } ** that means that a mutex could not be allocated. */ static sqlite3_mutex *debugMutexAlloc(int id){ - static sqlite3_mutex aStatic[6]; - sqlite3_mutex *pNew = 0; + static sqlite3_debug_mutex aStatic[6]; + sqlite3_debug_mutex *pNew = 0; switch( id ){ case SQLITE_MUTEX_FAST: case SQLITE_MUTEX_RECURSIVE: { @@ -14271,13 +17640,14 @@ static sqlite3_mutex *debugMutexAlloc(int id){ break; } } - return pNew; + return (sqlite3_mutex*)pNew; } /* ** This routine deallocates a previously allocated mutex. */ -static void debugMutexFree(sqlite3_mutex *p){ +static void debugMutexFree(sqlite3_mutex *pX){ + sqlite3_debug_mutex *p = (sqlite3_debug_mutex*)pX; assert( p->cnt==0 ); assert( p->id==SQLITE_MUTEX_FAST || p->id==SQLITE_MUTEX_RECURSIVE ); sqlite3_free(p); @@ -14294,12 +17664,14 @@ static void debugMutexFree(sqlite3_mutex *p){ ** can enter. If the same thread tries to enter any other kind of mutex ** more than once, the behavior is undefined. */ -static void debugMutexEnter(sqlite3_mutex *p){ - assert( p->id==SQLITE_MUTEX_RECURSIVE || debugMutexNotheld(p) ); +static void debugMutexEnter(sqlite3_mutex *pX){ + sqlite3_debug_mutex *p = (sqlite3_debug_mutex*)pX; + assert( p->id==SQLITE_MUTEX_RECURSIVE || debugMutexNotheld(pX) ); p->cnt++; } -static int debugMutexTry(sqlite3_mutex *p){ - assert( p->id==SQLITE_MUTEX_RECURSIVE || debugMutexNotheld(p) ); +static int debugMutexTry(sqlite3_mutex *pX){ + sqlite3_debug_mutex *p = (sqlite3_debug_mutex*)pX; + assert( p->id==SQLITE_MUTEX_RECURSIVE || debugMutexNotheld(pX) ); p->cnt++; return SQLITE_OK; } @@ -14310,14 +17682,15 @@ static int debugMutexTry(sqlite3_mutex *p){ ** is undefined if the mutex is not currently entered or ** is not currently allocated. SQLite will never do either. */ -static void debugMutexLeave(sqlite3_mutex *p){ - assert( debugMutexHeld(p) ); +static void debugMutexLeave(sqlite3_mutex *pX){ + sqlite3_debug_mutex *p = (sqlite3_debug_mutex*)pX; + assert( debugMutexHeld(pX) ); p->cnt--; - assert( p->id==SQLITE_MUTEX_RECURSIVE || debugMutexNotheld(p) ); + assert( p->id==SQLITE_MUTEX_RECURSIVE || debugMutexNotheld(pX) ); } -SQLITE_PRIVATE sqlite3_mutex_methods *sqlite3DefaultMutex(void){ - static sqlite3_mutex_methods sMutex = { +SQLITE_PRIVATE sqlite3_mutex_methods const *sqlite3NoopMutex(void){ + static const sqlite3_mutex_methods sMutex = { debugMutexInit, debugMutexEnd, debugMutexAlloc, @@ -14332,7 +17705,18 @@ SQLITE_PRIVATE sqlite3_mutex_methods *sqlite3DefaultMutex(void){ return &sMutex; } -#endif /* defined(SQLITE_MUTEX_NOOP) && defined(SQLITE_DEBUG) */ +#endif /* SQLITE_DEBUG */ + +/* +** If compiled with SQLITE_MUTEX_NOOP, then the no-op mutex implementation +** is used regardless of the run-time threadsafety setting. +*/ +#ifdef SQLITE_MUTEX_NOOP +SQLITE_PRIVATE sqlite3_mutex_methods const *sqlite3DefaultMutex(void){ + return sqlite3NoopMutex(); +} +#endif /* defined(SQLITE_MUTEX_NOOP) */ +#endif /* !defined(SQLITE_MUTEX_OMIT) */ /************** End of mutex_noop.c ******************************************/ /************** Begin file mutex_os2.c ***************************************/ @@ -14348,8 +17732,6 @@ SQLITE_PRIVATE sqlite3_mutex_methods *sqlite3DefaultMutex(void){ ** ************************************************************************* ** This file contains the C functions that implement mutexes for OS/2 -** -** $Id: mutex_os2.c,v 1.11 2008/11/22 19:50:54 pweilbacher Exp $ */ /* @@ -14370,11 +17752,16 @@ SQLITE_PRIVATE sqlite3_mutex_methods *sqlite3DefaultMutex(void){ struct sqlite3_mutex { HMTX mutex; /* Mutex controlling the lock */ int id; /* Mutex type */ - int nRef; /* Number of references */ - TID owner; /* Thread holding this mutex */ +#ifdef SQLITE_DEBUG + int trace; /* True to trace changes */ +#endif }; -#define OS2_MUTEX_INITIALIZER 0,0,0,0 +#ifdef SQLITE_DEBUG +#define SQLITE3_MUTEX_INITIALIZER { 0, 0, 0 } +#else +#define SQLITE3_MUTEX_INITIALIZER { 0, 0 } +#endif /* ** Initialize and deinitialize the mutex subsystem. @@ -14390,11 +17777,14 @@ static int os2MutexEnd(void){ return SQLITE_OK; } ** to sqlite3_mutex_alloc() is one of these integer constants: ** **
      -**
    • SQLITE_MUTEX_FAST 0 -**
    • SQLITE_MUTEX_RECURSIVE 1 -**
    • SQLITE_MUTEX_STATIC_MASTER 2 -**
    • SQLITE_MUTEX_STATIC_MEM 3 -**
    • SQLITE_MUTEX_STATIC_PRNG 4 +**
    • SQLITE_MUTEX_FAST +**
    • SQLITE_MUTEX_RECURSIVE +**
    • SQLITE_MUTEX_STATIC_MASTER +**
    • SQLITE_MUTEX_STATIC_MEM +**
    • SQLITE_MUTEX_STATIC_MEM2 +**
    • SQLITE_MUTEX_STATIC_PRNG +**
    • SQLITE_MUTEX_STATIC_LRU +**
    • SQLITE_MUTEX_STATIC_LRU2 **
    ** ** The first two constants cause sqlite3_mutex_alloc() to create @@ -14408,7 +17798,7 @@ static int os2MutexEnd(void){ return SQLITE_OK; } ** might return such a mutex in response to SQLITE_MUTEX_FAST. ** ** The other allowed parameters to sqlite3_mutex_alloc() each return -** a pointer to a static preexisting mutex. Three static mutexes are +** a pointer to a static preexisting mutex. Six static mutexes are ** used by the current version of SQLite. Future versions of SQLite ** may add additional static mutexes. Static mutexes are for internal ** use by SQLite only. Applications that use SQLite mutexes should @@ -14438,13 +17828,13 @@ static sqlite3_mutex *os2MutexAlloc(int iType){ } default: { static volatile int isInit = 0; - static sqlite3_mutex staticMutexes[] = { - { OS2_MUTEX_INITIALIZER, }, - { OS2_MUTEX_INITIALIZER, }, - { OS2_MUTEX_INITIALIZER, }, - { OS2_MUTEX_INITIALIZER, }, - { OS2_MUTEX_INITIALIZER, }, - { OS2_MUTEX_INITIALIZER, }, + static sqlite3_mutex staticMutexes[6] = { + SQLITE3_MUTEX_INITIALIZER, + SQLITE3_MUTEX_INITIALIZER, + SQLITE3_MUTEX_INITIALIZER, + SQLITE3_MUTEX_INITIALIZER, + SQLITE3_MUTEX_INITIALIZER, + SQLITE3_MUTEX_INITIALIZER, }; if ( !isInit ){ APIRET rc; @@ -14490,13 +17880,54 @@ static sqlite3_mutex *os2MutexAlloc(int iType){ ** SQLite is careful to deallocate every mutex that it allocates. */ static void os2MutexFree(sqlite3_mutex *p){ - if( p==0 ) return; - assert( p->nRef==0 ); +#ifdef SQLITE_DEBUG + TID tid; + PID pid; + ULONG ulCount; + DosQueryMutexSem(p->mutex, &pid, &tid, &ulCount); + assert( ulCount==0 ); assert( p->id==SQLITE_MUTEX_FAST || p->id==SQLITE_MUTEX_RECURSIVE ); +#endif DosCloseMutexSem( p->mutex ); sqlite3_free( p ); } +#ifdef SQLITE_DEBUG +/* +** The sqlite3_mutex_held() and sqlite3_mutex_notheld() routine are +** intended for use inside assert() statements. +*/ +static int os2MutexHeld(sqlite3_mutex *p){ + TID tid; + PID pid; + ULONG ulCount; + PTIB ptib; + DosQueryMutexSem(p->mutex, &pid, &tid, &ulCount); + if( ulCount==0 || ( ulCount>1 && p->id!=SQLITE_MUTEX_RECURSIVE ) ) + return 0; + DosGetInfoBlocks(&ptib, NULL); + return tid==ptib->tib_ptib2->tib2_ultid; +} +static int os2MutexNotheld(sqlite3_mutex *p){ + TID tid; + PID pid; + ULONG ulCount; + PTIB ptib; + DosQueryMutexSem(p->mutex, &pid, &tid, &ulCount); + if( ulCount==0 ) + return 1; + DosGetInfoBlocks(&ptib, NULL); + return tid!=ptib->tib_ptib2->tib2_ultid; +} +static void os2MutexTrace(sqlite3_mutex *p, char *pAction){ + TID tid; + PID pid; + ULONG ulCount; + DosQueryMutexSem(p->mutex, &pid, &tid, &ulCount); + printf("%s mutex %p (%d) with nRef=%ld\n", pAction, (void*)p, p->trace, ulCount); +} +#endif + /* ** The sqlite3_mutex_enter() and sqlite3_mutex_try() routines attempt ** to enter a mutex. If another thread is already within the mutex, @@ -14509,32 +17940,21 @@ static void os2MutexFree(sqlite3_mutex *p){ ** more than once, the behavior is undefined. */ static void os2MutexEnter(sqlite3_mutex *p){ - TID tid; - PID holder1; - ULONG holder2; - if( p==0 ) return; assert( p->id==SQLITE_MUTEX_RECURSIVE || os2MutexNotheld(p) ); DosRequestMutexSem(p->mutex, SEM_INDEFINITE_WAIT); - DosQueryMutexSem(p->mutex, &holder1, &tid, &holder2); - p->owner = tid; - p->nRef++; +#ifdef SQLITE_DEBUG + if( p->trace ) os2MutexTrace(p, "enter"); +#endif } static int os2MutexTry(sqlite3_mutex *p){ - int rc; - TID tid; - PID holder1; - ULONG holder2; - if( p==0 ) return SQLITE_OK; + int rc = SQLITE_BUSY; assert( p->id==SQLITE_MUTEX_RECURSIVE || os2MutexNotheld(p) ); - if( DosRequestMutexSem(p->mutex, SEM_IMMEDIATE_RETURN) == NO_ERROR) { - DosQueryMutexSem(p->mutex, &holder1, &tid, &holder2); - p->owner = tid; - p->nRef++; + if( DosRequestMutexSem(p->mutex, SEM_IMMEDIATE_RETURN) == NO_ERROR ) { rc = SQLITE_OK; - } else { - rc = SQLITE_BUSY; +#ifdef SQLITE_DEBUG + if( p->trace ) os2MutexTrace(p, "try"); +#endif } - return rc; } @@ -14545,53 +17965,15 @@ static int os2MutexTry(sqlite3_mutex *p){ ** is not currently allocated. SQLite will never do either. */ static void os2MutexLeave(sqlite3_mutex *p){ - TID tid; - PID holder1; - ULONG holder2; - if( p==0 ) return; - assert( p->nRef>0 ); - DosQueryMutexSem(p->mutex, &holder1, &tid, &holder2); - assert( p->owner==tid ); - p->nRef--; - assert( p->nRef==0 || p->id==SQLITE_MUTEX_RECURSIVE ); + assert( os2MutexHeld(p) ); DosReleaseMutexSem(p->mutex); -} - #ifdef SQLITE_DEBUG -/* -** The sqlite3_mutex_held() and sqlite3_mutex_notheld() routine are -** intended for use inside assert() statements. -*/ -static int os2MutexHeld(sqlite3_mutex *p){ - TID tid; - PID pid; - ULONG ulCount; - PTIB ptib; - if( p!=0 ) { - DosQueryMutexSem(p->mutex, &pid, &tid, &ulCount); - } else { - DosGetInfoBlocks(&ptib, NULL); - tid = ptib->tib_ptib2->tib2_ultid; - } - return p==0 || (p->nRef!=0 && p->owner==tid); -} -static int os2MutexNotheld(sqlite3_mutex *p){ - TID tid; - PID pid; - ULONG ulCount; - PTIB ptib; - if( p!= 0 ) { - DosQueryMutexSem(p->mutex, &pid, &tid, &ulCount); - } else { - DosGetInfoBlocks(&ptib, NULL); - tid = ptib->tib_ptib2->tib2_ultid; - } - return p==0 || p->nRef==0 || p->owner!=tid; -} + if( p->trace ) os2MutexTrace(p, "leave"); #endif +} -SQLITE_PRIVATE sqlite3_mutex_methods *sqlite3DefaultMutex(void){ - static sqlite3_mutex_methods sMutex = { +SQLITE_PRIVATE sqlite3_mutex_methods const *sqlite3DefaultMutex(void){ + static const sqlite3_mutex_methods sMutex = { os2MutexInit, os2MutexEnd, os2MutexAlloc, @@ -14602,6 +17984,9 @@ SQLITE_PRIVATE sqlite3_mutex_methods *sqlite3DefaultMutex(void){ #ifdef SQLITE_DEBUG os2MutexHeld, os2MutexNotheld +#else + 0, + 0 #endif }; @@ -14623,8 +18008,6 @@ SQLITE_PRIVATE sqlite3_mutex_methods *sqlite3DefaultMutex(void){ ** ************************************************************************* ** This file contains the C functions that implement mutexes for pthreads -** -** $Id: mutex_unix.c,v 1.16 2008/12/08 18:19:18 drh Exp $ */ /* @@ -14638,23 +18021,33 @@ SQLITE_PRIVATE sqlite3_mutex_methods *sqlite3DefaultMutex(void){ #include +/* +** The sqlite3_mutex.id, sqlite3_mutex.nRef, and sqlite3_mutex.owner fields +** are necessary under two condidtions: (1) Debug builds and (2) using +** home-grown mutexes. Encapsulate these conditions into a single #define. +*/ +#if defined(SQLITE_DEBUG) || defined(SQLITE_HOMEGROWN_RECURSIVE_MUTEX) +# define SQLITE_MUTEX_NREF 1 +#else +# define SQLITE_MUTEX_NREF 0 +#endif /* ** Each recursive mutex is an instance of the following structure. */ struct sqlite3_mutex { pthread_mutex_t mutex; /* Mutex controlling the lock */ +#if SQLITE_MUTEX_NREF int id; /* Mutex type */ - int nRef; /* Number of entrances */ - pthread_t owner; /* Thread that is within this mutex */ -#ifdef SQLITE_DEBUG + volatile int nRef; /* Number of entrances */ + volatile pthread_t owner; /* Thread that is within this mutex */ int trace; /* True to trace changes */ #endif }; -#ifdef SQLITE_DEBUG +#if SQLITE_MUTEX_NREF #define SQLITE3_MUTEX_INITIALIZER { PTHREAD_MUTEX_INITIALIZER, 0, 0, (pthread_t)0, 0 } #else -#define SQLITE3_MUTEX_INITIALIZER { PTHREAD_MUTEX_INITIALIZER, 0, 0, (pthread_t)0 } +#define SQLITE3_MUTEX_INITIALIZER { PTHREAD_MUTEX_INITIALIZER } #endif /* @@ -14703,6 +18096,7 @@ static int pthreadMutexEnd(void){ return SQLITE_OK; } **
  • SQLITE_MUTEX_STATIC_MEM2 **
  • SQLITE_MUTEX_STATIC_PRNG **
  • SQLITE_MUTEX_STATIC_LRU +**
  • SQLITE_MUTEX_STATIC_PMEM ** ** ** The first two constants cause sqlite3_mutex_alloc() to create @@ -14716,7 +18110,7 @@ static int pthreadMutexEnd(void){ return SQLITE_OK; } ** might return such a mutex in response to SQLITE_MUTEX_FAST. ** ** The other allowed parameters to sqlite3_mutex_alloc() each return -** a pointer to a static preexisting mutex. Three static mutexes are +** a pointer to a static preexisting mutex. Six static mutexes are ** used by the current version of SQLite. Future versions of SQLite ** may add additional static mutexes. Static mutexes are for internal ** use by SQLite only. Applications that use SQLite mutexes should @@ -14755,14 +18149,18 @@ static sqlite3_mutex *pthreadMutexAlloc(int iType){ pthread_mutex_init(&p->mutex, &recursiveAttr); pthread_mutexattr_destroy(&recursiveAttr); #endif +#if SQLITE_MUTEX_NREF p->id = iType; +#endif } break; } case SQLITE_MUTEX_FAST: { p = sqlite3MallocZero( sizeof(*p) ); if( p ){ +#if SQLITE_MUTEX_NREF p->id = iType; +#endif pthread_mutex_init(&p->mutex, 0); } break; @@ -14771,7 +18169,9 @@ static sqlite3_mutex *pthreadMutexAlloc(int iType){ assert( iType-2 >= 0 ); assert( iType-2 < ArraySize(staticMutexes) ); p = &staticMutexes[iType-2]; +#if SQLITE_MUTEX_NREF p->id = iType; +#endif break; } } @@ -14831,9 +18231,12 @@ static void pthreadMutexEnter(sqlite3_mutex *p){ /* Use the built-in recursive mutexes if they are available. */ pthread_mutex_lock(&p->mutex); +#if SQLITE_MUTEX_NREF + assert( p->nRef>0 || p->owner==0 ); p->owner = pthread_self(); p->nRef++; #endif +#endif #ifdef SQLITE_DEBUG if( p->trace ){ @@ -14874,8 +18277,10 @@ static int pthreadMutexTry(sqlite3_mutex *p){ /* Use the built-in recursive mutexes if they are available. */ if( pthread_mutex_trylock(&p->mutex)==0 ){ +#if SQLITE_MUTEX_NREF p->owner = pthread_self(); p->nRef++; +#endif rc = SQLITE_OK; }else{ rc = SQLITE_BUSY; @@ -14898,7 +18303,10 @@ static int pthreadMutexTry(sqlite3_mutex *p){ */ static void pthreadMutexLeave(sqlite3_mutex *p){ assert( pthreadMutexHeld(p) ); +#if SQLITE_MUTEX_NREF p->nRef--; + if( p->nRef==0 ) p->owner = 0; +#endif assert( p->nRef==0 || p->id==SQLITE_MUTEX_RECURSIVE ); #ifdef SQLITE_HOMEGROWN_RECURSIVE_MUTEX @@ -14916,8 +18324,8 @@ static void pthreadMutexLeave(sqlite3_mutex *p){ #endif } -SQLITE_PRIVATE sqlite3_mutex_methods *sqlite3DefaultMutex(void){ - static sqlite3_mutex_methods sMutex = { +SQLITE_PRIVATE sqlite3_mutex_methods const *sqlite3DefaultMutex(void){ + static const sqlite3_mutex_methods sMutex = { pthreadMutexInit, pthreadMutexEnd, pthreadMutexAlloc, @@ -14937,7 +18345,7 @@ SQLITE_PRIVATE sqlite3_mutex_methods *sqlite3DefaultMutex(void){ return &sMutex; } -#endif /* SQLITE_MUTEX_PTHREAD */ +#endif /* SQLITE_MUTEX_PTHREADS */ /************** End of mutex_unix.c ******************************************/ /************** Begin file mutex_w32.c ***************************************/ @@ -14953,8 +18361,6 @@ SQLITE_PRIVATE sqlite3_mutex_methods *sqlite3DefaultMutex(void){ ** ************************************************************************* ** This file contains the C functions that implement mutexes for win32 -** -** $Id: mutex_w32.c,v 1.17 2009/06/01 17:10:22 shane Exp $ */ /* @@ -14969,9 +18375,18 @@ SQLITE_PRIVATE sqlite3_mutex_methods *sqlite3DefaultMutex(void){ struct sqlite3_mutex { CRITICAL_SECTION mutex; /* Mutex controlling the lock */ int id; /* Mutex type */ - int nRef; /* Number of enterances */ - DWORD owner; /* Thread holding this mutex */ +#ifdef SQLITE_DEBUG + volatile int nRef; /* Number of enterances */ + volatile DWORD owner; /* Thread holding this mutex */ + int trace; /* True to trace changes */ +#endif }; +#define SQLITE_W32_MUTEX_INITIALIZER { 0 } +#ifdef SQLITE_DEBUG +#define SQLITE3_MUTEX_INITIALIZER { SQLITE_W32_MUTEX_INITIALIZER, 0, 0L, (DWORD)0, 0 } +#else +#define SQLITE3_MUTEX_INITIALIZER { SQLITE_W32_MUTEX_INITIALIZER, 0 } +#endif /* ** Return true (non-zero) if we are running under WinNT, Win2K, WinXP, @@ -14991,7 +18406,7 @@ struct sqlite3_mutex { ** this out as well. */ #if 0 -#if SQLITE_OS_WINCE +#if SQLITE_OS_WINCE || SQLITE_OS_WINRT # define mutexIsNT() (1) #else static int mutexIsNT(void){ @@ -15015,8 +18430,12 @@ struct sqlite3_mutex { static int winMutexHeld(sqlite3_mutex *p){ return p->nRef!=0 && p->owner==GetCurrentThreadId(); } +static int winMutexNotheld2(sqlite3_mutex *p, DWORD tid){ + return p->nRef==0 || p->owner!=tid; +} static int winMutexNotheld(sqlite3_mutex *p){ - return p->nRef==0 || p->owner!=GetCurrentThreadId(); + DWORD tid = GetCurrentThreadId(); + return winMutexNotheld2(p, tid); } #endif @@ -15024,7 +18443,14 @@ static int winMutexNotheld(sqlite3_mutex *p){ /* ** Initialize and deinitialize the mutex subsystem. */ -static sqlite3_mutex winMutex_staticMutexes[6]; +static sqlite3_mutex winMutex_staticMutexes[6] = { + SQLITE3_MUTEX_INITIALIZER, + SQLITE3_MUTEX_INITIALIZER, + SQLITE3_MUTEX_INITIALIZER, + SQLITE3_MUTEX_INITIALIZER, + SQLITE3_MUTEX_INITIALIZER, + SQLITE3_MUTEX_INITIALIZER +}; static int winMutex_isInit = 0; /* As winMutexInit() and winMutexEnd() are called as part ** of the sqlite3_initialize and sqlite3_shutdown() @@ -15033,17 +18459,24 @@ static int winMutex_isInit = 0; */ static long winMutex_lock = 0; +SQLITE_API extern void sqlite3_win32_sleep(DWORD milliseconds); /* os_win.c */ + static int winMutexInit(void){ /* The first to increment to 1 does actual initialization */ - if( InterlockedIncrement(&winMutex_lock)==1 ){ + if( InterlockedCompareExchange(&winMutex_lock, 1, 0)==0 ){ int i; - for(i=0; i -**
  • SQLITE_MUTEX_FAST 0 -**
  • SQLITE_MUTEX_RECURSIVE 1 -**
  • SQLITE_MUTEX_STATIC_MASTER 2 -**
  • SQLITE_MUTEX_STATIC_MEM 3 -**
  • SQLITE_MUTEX_STATIC_PRNG 4 +**
  • SQLITE_MUTEX_FAST +**
  • SQLITE_MUTEX_RECURSIVE +**
  • SQLITE_MUTEX_STATIC_MASTER +**
  • SQLITE_MUTEX_STATIC_MEM +**
  • SQLITE_MUTEX_STATIC_MEM2 +**
  • SQLITE_MUTEX_STATIC_PRNG +**
  • SQLITE_MUTEX_STATIC_LRU +**
  • SQLITE_MUTEX_STATIC_PMEM ** ** ** The first two constants cause sqlite3_mutex_alloc() to create @@ -15090,7 +18526,7 @@ static int winMutexEnd(void){ ** might return such a mutex in response to SQLITE_MUTEX_FAST. ** ** The other allowed parameters to sqlite3_mutex_alloc() each return -** a pointer to a static preexisting mutex. Three static mutexes are +** a pointer to a static preexisting mutex. Six static mutexes are ** used by the current version of SQLite. Future versions of SQLite ** may add additional static mutexes. Static mutexes are for internal ** use by SQLite only. Applications that use SQLite mutexes should @@ -15111,17 +18547,25 @@ static sqlite3_mutex *winMutexAlloc(int iType){ case SQLITE_MUTEX_RECURSIVE: { p = sqlite3MallocZero( sizeof(*p) ); if( p ){ +#ifdef SQLITE_DEBUG p->id = iType; +#endif +#if SQLITE_OS_WINRT + InitializeCriticalSectionEx(&p->mutex, 0, 0); +#else InitializeCriticalSection(&p->mutex); +#endif } break; } default: { assert( winMutex_isInit==1 ); assert( iType-2 >= 0 ); - assert( iType-2 < sizeof(winMutex_staticMutexes)/sizeof(winMutex_staticMutexes[0]) ); + assert( iType-2 < ArraySize(winMutex_staticMutexes) ); p = &winMutex_staticMutexes[iType-2]; +#ifdef SQLITE_DEBUG p->id = iType; +#endif break; } } @@ -15136,7 +18580,7 @@ static sqlite3_mutex *winMutexAlloc(int iType){ */ static void winMutexFree(sqlite3_mutex *p){ assert( p ); - assert( p->nRef==0 ); + assert( p->nRef==0 && p->owner==0 ); assert( p->id==SQLITE_MUTEX_FAST || p->id==SQLITE_MUTEX_RECURSIVE ); DeleteCriticalSection(&p->mutex); sqlite3_free(p); @@ -15154,14 +18598,26 @@ static void winMutexFree(sqlite3_mutex *p){ ** more than once, the behavior is undefined. */ static void winMutexEnter(sqlite3_mutex *p){ - assert( p->id==SQLITE_MUTEX_RECURSIVE || winMutexNotheld(p) ); +#ifdef SQLITE_DEBUG + DWORD tid = GetCurrentThreadId(); + assert( p->id==SQLITE_MUTEX_RECURSIVE || winMutexNotheld2(p, tid) ); +#endif EnterCriticalSection(&p->mutex); - p->owner = GetCurrentThreadId(); +#ifdef SQLITE_DEBUG + assert( p->nRef>0 || p->owner==0 ); + p->owner = tid; p->nRef++; + if( p->trace ){ + printf("enter mutex %p (%d) with nRef=%d\n", p, p->trace, p->nRef); + } +#endif } static int winMutexTry(sqlite3_mutex *p){ +#ifndef NDEBUG + DWORD tid = GetCurrentThreadId(); +#endif int rc = SQLITE_BUSY; - assert( p->id==SQLITE_MUTEX_RECURSIVE || winMutexNotheld(p) ); + assert( p->id==SQLITE_MUTEX_RECURSIVE || winMutexNotheld2(p, tid) ); /* ** The sqlite3_mutex_try() routine is very rarely used, and when it ** is used it is merely an optimization. So it is OK for it to always @@ -15175,12 +18631,17 @@ static int winMutexTry(sqlite3_mutex *p){ */ #if 0 if( mutexIsNT() && TryEnterCriticalSection(&p->mutex) ){ - p->owner = GetCurrentThreadId(); + p->owner = tid; p->nRef++; rc = SQLITE_OK; } #else UNUSED_PARAMETER(p); +#endif +#ifdef SQLITE_DEBUG + if( rc==SQLITE_OK && p->trace ){ + printf("try mutex %p (%d) with nRef=%d\n", p, p->trace, p->nRef); + } #endif return rc; } @@ -15192,15 +18653,24 @@ static int winMutexTry(sqlite3_mutex *p){ ** is not currently allocated. SQLite will never do either. */ static void winMutexLeave(sqlite3_mutex *p){ +#ifndef NDEBUG + DWORD tid = GetCurrentThreadId(); assert( p->nRef>0 ); - assert( p->owner==GetCurrentThreadId() ); + assert( p->owner==tid ); p->nRef--; + if( p->nRef==0 ) p->owner = 0; assert( p->nRef==0 || p->id==SQLITE_MUTEX_RECURSIVE ); +#endif LeaveCriticalSection(&p->mutex); +#ifdef SQLITE_DEBUG + if( p->trace ){ + printf("leave mutex %p (%d) with nRef=%d\n", p, p->trace, p->nRef); + } +#endif } -SQLITE_PRIVATE sqlite3_mutex_methods *sqlite3DefaultMutex(void){ - static sqlite3_mutex_methods sMutex = { +SQLITE_PRIVATE sqlite3_mutex_methods const *sqlite3DefaultMutex(void){ + static const sqlite3_mutex_methods sMutex = { winMutexInit, winMutexEnd, winMutexAlloc, @@ -15236,47 +18706,8 @@ SQLITE_PRIVATE sqlite3_mutex_methods *sqlite3DefaultMutex(void){ ************************************************************************* ** ** Memory allocation functions used throughout sqlite. -** -** $Id: malloc.c,v 1.64 2009/06/27 00:48:33 drh Exp $ -*/ - -/* -** This routine runs when the memory allocator sees that the -** total memory allocation is about to exceed the soft heap -** limit. -*/ -static void softHeapLimitEnforcer( - void *NotUsed, - sqlite3_int64 NotUsed2, - int allocSize -){ - UNUSED_PARAMETER2(NotUsed, NotUsed2); - sqlite3_release_memory(allocSize); -} - -/* -** Set the soft heap-size limit for the library. Passing a zero or -** negative value indicates no limit. */ -SQLITE_API void sqlite3_soft_heap_limit(int n){ - sqlite3_uint64 iLimit; - int overage; - if( n<0 ){ - iLimit = 0; - }else{ - iLimit = n; - } - sqlite3_initialize(); - if( iLimit>0 ){ - sqlite3MemoryAlarm(softHeapLimitEnforcer, 0, iLimit); - }else{ - sqlite3MemoryAlarm(0, 0, 0); - } - overage = (int)(sqlite3_memory_used() - (i64)n); - if( overage>0 ){ - sqlite3_release_memory(overage); - } -} +/* #include */ /* ** Attempt to release up to n bytes of non-essential memory currently @@ -15285,139 +18716,88 @@ SQLITE_API void sqlite3_soft_heap_limit(int n){ */ SQLITE_API int sqlite3_release_memory(int n){ #ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT - int nRet = 0; -#if 0 - nRet += sqlite3VdbeReleaseMemory(n); -#endif - nRet += sqlite3PcacheReleaseMemory(n-nRet); - return nRet; + return sqlite3PcacheReleaseMemory(n); #else + /* IMPLEMENTATION-OF: R-34391-24921 The sqlite3_release_memory() routine + ** is a no-op returning zero if SQLite is not compiled with + ** SQLITE_ENABLE_MEMORY_MANAGEMENT. */ UNUSED_PARAMETER(n); - return SQLITE_OK; + return 0; #endif } +/* +** An instance of the following object records the location of +** each unused scratch buffer. +*/ +typedef struct ScratchFreeslot { + struct ScratchFreeslot *pNext; /* Next unused scratch buffer */ +} ScratchFreeslot; + /* ** State information local to the memory allocation subsystem. */ static SQLITE_WSD struct Mem0Global { - /* Number of free pages for scratch and page-cache memory */ - u32 nScratchFree; - u32 nPageFree; - sqlite3_mutex *mutex; /* Mutex to serialize access */ /* ** The alarm callback and its arguments. The mem0.mutex lock will ** be held while the callback is running. Recursive calls into ** the memory subsystem are allowed, but no new callbacks will be - ** issued. The alarmBusy variable is set to prevent recursive - ** callbacks. + ** issued. */ sqlite3_int64 alarmThreshold; void (*alarmCallback)(void*, sqlite3_int64,int); void *alarmArg; - int alarmBusy; /* - ** Pointers to the end of sqlite3GlobalConfig.pScratch and - ** sqlite3GlobalConfig.pPage to a block of memory that records - ** which pages are available. + ** Pointers to the end of sqlite3GlobalConfig.pScratch memory + ** (so that a range test can be used to determine if an allocation + ** being freed came from pScratch) and a pointer to the list of + ** unused scratch allocations. */ - u32 *aScratchFree; - u32 *aPageFree; -} mem0 = { 62560955, 0, 0, 0, 0, 0, 0, 0, 0 }; - -#define mem0 GLOBAL(struct Mem0Global, mem0) - -/* -** Initialize the memory allocation subsystem. -*/ -SQLITE_PRIVATE int sqlite3MallocInit(void){ - if( sqlite3GlobalConfig.m.xMalloc==0 ){ - sqlite3MemSetDefault(); - } - memset(&mem0, 0, sizeof(mem0)); - if( sqlite3GlobalConfig.bCoreMutex ){ - mem0.mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MEM); - } - if( sqlite3GlobalConfig.pScratch && sqlite3GlobalConfig.szScratch>=100 - && sqlite3GlobalConfig.nScratch>=0 ){ - int i; - sqlite3GlobalConfig.szScratch = ROUNDDOWN8(sqlite3GlobalConfig.szScratch-4); - mem0.aScratchFree = (u32*)&((char*)sqlite3GlobalConfig.pScratch) - [sqlite3GlobalConfig.szScratch*sqlite3GlobalConfig.nScratch]; - for(i=0; i=512 - && sqlite3GlobalConfig.nPage>=1 ){ - int i; - int overhead; - int sz = ROUNDDOWN8(sqlite3GlobalConfig.szPage); - int n = sqlite3GlobalConfig.nPage; - overhead = (4*n + sz - 1)/sz; - sqlite3GlobalConfig.nPage -= overhead; - mem0.aPageFree = (u32*)&((char*)sqlite3GlobalConfig.pPage) - [sqlite3GlobalConfig.szPage*sqlite3GlobalConfig.nPage]; - for(i=0; i0 && iThreshold<=nUsed); sqlite3_mutex_leave(mem0.mutex); return SQLITE_OK; } @@ -15436,6 +18816,120 @@ SQLITE_API int sqlite3_memory_alarm( } #endif +/* +** Set the soft heap-size limit for the library. Passing a zero or +** negative value indicates no limit. +*/ +SQLITE_API sqlite3_int64 sqlite3_soft_heap_limit64(sqlite3_int64 n){ + sqlite3_int64 priorLimit; + sqlite3_int64 excess; +#ifndef SQLITE_OMIT_AUTOINIT + int rc = sqlite3_initialize(); + if( rc ) return -1; +#endif + sqlite3_mutex_enter(mem0.mutex); + priorLimit = mem0.alarmThreshold; + sqlite3_mutex_leave(mem0.mutex); + if( n<0 ) return priorLimit; + if( n>0 ){ + sqlite3MemoryAlarm(softHeapLimitEnforcer, 0, n); + }else{ + sqlite3MemoryAlarm(0, 0, 0); + } + excess = sqlite3_memory_used() - n; + if( excess>0 ) sqlite3_release_memory((int)(excess & 0x7fffffff)); + return priorLimit; +} +SQLITE_API void sqlite3_soft_heap_limit(int n){ + if( n<0 ) n = 0; + sqlite3_soft_heap_limit64(n); +} + +/* +** Initialize the memory allocation subsystem. +*/ +SQLITE_PRIVATE int sqlite3MallocInit(void){ + if( sqlite3GlobalConfig.m.xMalloc==0 ){ + sqlite3MemSetDefault(); + } + memset(&mem0, 0, sizeof(mem0)); + if( sqlite3GlobalConfig.bCoreMutex ){ + mem0.mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MEM); + } + if( sqlite3GlobalConfig.pScratch && sqlite3GlobalConfig.szScratch>=100 + && sqlite3GlobalConfig.nScratch>0 ){ + int i, n, sz; + ScratchFreeslot *pSlot; + sz = ROUNDDOWN8(sqlite3GlobalConfig.szScratch); + sqlite3GlobalConfig.szScratch = sz; + pSlot = (ScratchFreeslot*)sqlite3GlobalConfig.pScratch; + n = sqlite3GlobalConfig.nScratch; + mem0.pScratchFree = pSlot; + mem0.nScratchFree = n; + for(i=0; ipNext = (ScratchFreeslot*)(sz+(char*)pSlot); + pSlot = pSlot->pNext; + } + pSlot->pNext = 0; + mem0.pScratchEnd = (void*)&pSlot[1]; + }else{ + mem0.pScratchEnd = 0; + sqlite3GlobalConfig.pScratch = 0; + sqlite3GlobalConfig.szScratch = 0; + sqlite3GlobalConfig.nScratch = 0; + } + if( sqlite3GlobalConfig.pPage==0 || sqlite3GlobalConfig.szPage<512 + || sqlite3GlobalConfig.nPage<1 ){ + sqlite3GlobalConfig.pPage = 0; + sqlite3GlobalConfig.szPage = 0; + sqlite3GlobalConfig.nPage = 0; + } + return sqlite3GlobalConfig.m.xInit(sqlite3GlobalConfig.m.pAppData); +} + +/* +** Return true if the heap is currently under memory pressure - in other +** words if the amount of heap used is close to the limit set by +** sqlite3_soft_heap_limit(). +*/ +SQLITE_PRIVATE int sqlite3HeapNearlyFull(void){ + return mem0.nearlyFull; +} + +/* +** Deinitialize the memory allocation subsystem. +*/ +SQLITE_PRIVATE void sqlite3MallocEnd(void){ + if( sqlite3GlobalConfig.m.xShutdown ){ + sqlite3GlobalConfig.m.xShutdown(sqlite3GlobalConfig.m.pAppData); + } + memset(&mem0, 0, sizeof(mem0)); +} + +/* +** Return the amount of memory currently checked out. +*/ +SQLITE_API sqlite3_int64 sqlite3_memory_used(void){ + int n, mx; + sqlite3_int64 res; + sqlite3_status(SQLITE_STATUS_MEMORY_USED, &n, &mx, 0); + res = (sqlite3_int64)n; /* Work around bug in Borland C. Ticket #3216 */ + return res; +} + +/* +** Return the maximum amount of memory that has ever been +** checked out since either the beginning of this process +** or since the most recent reset. +*/ +SQLITE_API sqlite3_int64 sqlite3_memory_highwater(int resetFlag){ + int n, mx; + sqlite3_int64 res; + sqlite3_status(SQLITE_STATUS_MEMORY_USED, &n, &mx, resetFlag); + res = (sqlite3_int64)mx; /* Work around bug in Borland C. Ticket #3216 */ + return res; +} + /* ** Trigger the alarm */ @@ -15443,15 +18937,16 @@ static void sqlite3MallocAlarm(int nByte){ void (*xCallback)(void*,sqlite3_int64,int); sqlite3_int64 nowUsed; void *pArg; - if( mem0.alarmCallback==0 || mem0.alarmBusy ) return; - mem0.alarmBusy = 1; + if( mem0.alarmCallback==0 ) return; xCallback = mem0.alarmCallback; nowUsed = sqlite3StatusValue(SQLITE_STATUS_MEMORY_USED); pArg = mem0.alarmArg; + mem0.alarmCallback = 0; sqlite3_mutex_leave(mem0.mutex); xCallback(pArg, nowUsed, nByte); sqlite3_mutex_enter(mem0.mutex); - mem0.alarmBusy = 0; + mem0.alarmCallback = xCallback; + mem0.alarmArg = pArg; } /* @@ -15466,18 +18961,24 @@ static int mallocWithAlarm(int n, void **pp){ sqlite3StatusSet(SQLITE_STATUS_MALLOC_SIZE, n); if( mem0.alarmCallback!=0 ){ int nUsed = sqlite3StatusValue(SQLITE_STATUS_MEMORY_USED); - if( nUsed+nFull >= mem0.alarmThreshold ){ + if( nUsed >= mem0.alarmThreshold - nFull ){ + mem0.nearlyFull = 1; sqlite3MallocAlarm(nFull); + }else{ + mem0.nearlyFull = 0; } } p = sqlite3GlobalConfig.m.xMalloc(nFull); +#ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT if( p==0 && mem0.alarmCallback ){ sqlite3MallocAlarm(nFull); p = sqlite3GlobalConfig.m.xMalloc(nFull); } +#endif if( p ){ nFull = sqlite3MallocSize(p); sqlite3StatusAdd(SQLITE_STATUS_MEMORY_USED, nFull); + sqlite3StatusAdd(SQLITE_STATUS_MALLOC_COUNT, 1); } *pp = p; return nFull; @@ -15489,7 +18990,9 @@ static int mallocWithAlarm(int n, void **pp){ */ SQLITE_PRIVATE void *sqlite3Malloc(int n){ void *p; - if( n<=0 || n>=0x7fffff00 ){ + if( n<=0 /* IMP: R-65312-04917 */ + || n>=0x7fffff00 + ){ /* A memory allocation of a number of bytes which is near the maximum ** signed integer value might cause an integer overflow inside of the ** xMalloc(). Hence we limit the maximum size to 0x7fffff00, giving @@ -15503,6 +19006,7 @@ SQLITE_PRIVATE void *sqlite3Malloc(int n){ }else{ p = sqlite3GlobalConfig.m.xMalloc(n); } + assert( EIGHT_BYTE_ALIGNMENT(p) ); /* IMP: R-04675-44850 */ return p; } @@ -15541,88 +19045,79 @@ SQLITE_PRIVATE void *sqlite3ScratchMalloc(int n){ void *p; assert( n>0 ); -#if SQLITE_THREADSAFE==0 && !defined(NDEBUG) - /* Verify that no more than one scratch allocation per thread - ** is outstanding at one time. (This is only checked in the - ** single-threaded case since checking in the multi-threaded case - ** would be much more complicated.) */ - assert( scratchAllocOut==0 ); -#endif - - if( sqlite3GlobalConfig.szScratch=n ){ + p = mem0.pScratchFree; + mem0.pScratchFree = mem0.pScratchFree->pNext; + mem0.nScratchFree--; + sqlite3StatusAdd(SQLITE_STATUS_SCRATCH_USED, 1); + sqlite3StatusSet(SQLITE_STATUS_SCRATCH_SIZE, n); + sqlite3_mutex_leave(mem0.mutex); + }else{ + if( sqlite3GlobalConfig.bMemstat ){ + sqlite3StatusSet(SQLITE_STATUS_SCRATCH_SIZE, n); + n = mallocWithAlarm(n, &p); + if( p ) sqlite3StatusAdd(SQLITE_STATUS_SCRATCH_OVERFLOW, n); sqlite3_mutex_leave(mem0.mutex); - goto scratch_overflow; }else{ - int i; - i = mem0.aScratchFree[--mem0.nScratchFree]; - i *= sqlite3GlobalConfig.szScratch; - sqlite3StatusAdd(SQLITE_STATUS_SCRATCH_USED, 1); - sqlite3StatusSet(SQLITE_STATUS_SCRATCH_SIZE, n); sqlite3_mutex_leave(mem0.mutex); - p = (void*)&((char*)sqlite3GlobalConfig.pScratch)[i]; - assert( (((u8*)p - (u8*)0) & 7)==0 ); + p = sqlite3GlobalConfig.m.xMalloc(n); } + sqlite3MemdebugSetType(p, MEMTYPE_SCRATCH); } -#if SQLITE_THREADSAFE==0 && !defined(NDEBUG) - scratchAllocOut = p!=0; -#endif + assert( sqlite3_mutex_notheld(mem0.mutex) ); - return p; -scratch_overflow: - if( sqlite3GlobalConfig.bMemstat ){ - sqlite3_mutex_enter(mem0.mutex); - sqlite3StatusSet(SQLITE_STATUS_SCRATCH_SIZE, n); - n = mallocWithAlarm(n, &p); - if( p ) sqlite3StatusAdd(SQLITE_STATUS_SCRATCH_OVERFLOW, n); - sqlite3_mutex_leave(mem0.mutex); - }else{ - p = sqlite3GlobalConfig.m.xMalloc(n); - } #if SQLITE_THREADSAFE==0 && !defined(NDEBUG) - scratchAllocOut = p!=0; + /* Verify that no more than two scratch allocations per thread + ** are outstanding at one time. (This is only checked in the + ** single-threaded case since checking in the multi-threaded case + ** would be much more complicated.) */ + assert( scratchAllocOut<=1 ); + if( p ) scratchAllocOut++; #endif - return p; + + return p; } SQLITE_PRIVATE void sqlite3ScratchFree(void *p){ if( p ){ #if SQLITE_THREADSAFE==0 && !defined(NDEBUG) - /* Verify that no more than one scratch allocation per thread + /* Verify that no more than two scratch allocation per thread ** is outstanding at one time. (This is only checked in the ** single-threaded case since checking in the multi-threaded case ** would be much more complicated.) */ - assert( scratchAllocOut==1 ); - scratchAllocOut = 0; + assert( scratchAllocOut>=1 && scratchAllocOut<=2 ); + scratchAllocOut--; #endif - if( sqlite3GlobalConfig.pScratch==0 - || p=(void*)mem0.aScratchFree ){ + if( p>=sqlite3GlobalConfig.pScratch && ppNext = mem0.pScratchFree; + mem0.pScratchFree = pSlot; + mem0.nScratchFree++; + assert( mem0.nScratchFree <= (u32)sqlite3GlobalConfig.nScratch ); + sqlite3StatusAdd(SQLITE_STATUS_SCRATCH_USED, -1); + sqlite3_mutex_leave(mem0.mutex); + }else{ + /* Release memory back to the heap */ + assert( sqlite3MemdebugHasType(p, MEMTYPE_SCRATCH) ); + assert( sqlite3MemdebugNoType(p, ~MEMTYPE_SCRATCH) ); + sqlite3MemdebugSetType(p, MEMTYPE_HEAP); if( sqlite3GlobalConfig.bMemstat ){ int iSize = sqlite3MallocSize(p); sqlite3_mutex_enter(mem0.mutex); sqlite3StatusAdd(SQLITE_STATUS_SCRATCH_OVERFLOW, -iSize); sqlite3StatusAdd(SQLITE_STATUS_MEMORY_USED, -iSize); + sqlite3StatusAdd(SQLITE_STATUS_MALLOC_COUNT, -1); sqlite3GlobalConfig.m.xFree(p); sqlite3_mutex_leave(mem0.mutex); }else{ sqlite3GlobalConfig.m.xFree(p); } - }else{ - int i; - i = (int)((u8*)p - (u8*)sqlite3GlobalConfig.pScratch); - i /= sqlite3GlobalConfig.szScratch; - assert( i>=0 && i=db->lookaside.pStart && plookaside.pEnd; + return p && p>=db->lookaside.pStart && plookaside.pEnd; } #else #define isLookaside(A,B) 0 @@ -15643,15 +19138,18 @@ static int isLookaside(sqlite3 *db, void *p){ ** sqlite3Malloc() or sqlite3_malloc(). */ SQLITE_PRIVATE int sqlite3MallocSize(void *p){ + assert( sqlite3MemdebugHasType(p, MEMTYPE_HEAP) ); + assert( sqlite3MemdebugNoType(p, MEMTYPE_DB) ); return sqlite3GlobalConfig.m.xSize(p); } SQLITE_PRIVATE int sqlite3DbMallocSize(sqlite3 *db, void *p){ assert( db==0 || sqlite3_mutex_held(db->mutex) ); - if( p==0 ){ - return 0; - }else if( isLookaside(db, p) ){ + if( db && isLookaside(db, p) ){ return db->lookaside.sz; }else{ + assert( sqlite3MemdebugHasType(p, MEMTYPE_DB) ); + assert( sqlite3MemdebugHasType(p, MEMTYPE_LOOKASIDE|MEMTYPE_HEAP) ); + assert( db!=0 || sqlite3MemdebugNoType(p, MEMTYPE_LOOKASIDE) ); return sqlite3GlobalConfig.m.xSize(p); } } @@ -15660,10 +19158,13 @@ SQLITE_PRIVATE int sqlite3DbMallocSize(sqlite3 *db, void *p){ ** Free memory previously obtained from sqlite3Malloc(). */ SQLITE_API void sqlite3_free(void *p){ - if( p==0 ) return; + if( p==0 ) return; /* IMP: R-49053-54554 */ + assert( sqlite3MemdebugNoType(p, MEMTYPE_DB) ); + assert( sqlite3MemdebugHasType(p, MEMTYPE_HEAP) ); if( sqlite3GlobalConfig.bMemstat ){ sqlite3_mutex_enter(mem0.mutex); sqlite3StatusAdd(SQLITE_STATUS_MEMORY_USED, -sqlite3MallocSize(p)); + sqlite3StatusAdd(SQLITE_STATUS_MALLOC_COUNT, -1); sqlite3GlobalConfig.m.xFree(p); sqlite3_mutex_leave(mem0.mutex); }else{ @@ -15677,27 +19178,41 @@ SQLITE_API void sqlite3_free(void *p){ */ SQLITE_PRIVATE void sqlite3DbFree(sqlite3 *db, void *p){ assert( db==0 || sqlite3_mutex_held(db->mutex) ); - if( isLookaside(db, p) ){ - LookasideSlot *pBuf = (LookasideSlot*)p; - pBuf->pNext = db->lookaside.pFree; - db->lookaside.pFree = pBuf; - db->lookaside.nOut--; - }else{ - sqlite3_free(p); + if( db ){ + if( db->pnBytesFreed ){ + *db->pnBytesFreed += sqlite3DbMallocSize(db, p); + return; + } + if( isLookaside(db, p) ){ + LookasideSlot *pBuf = (LookasideSlot*)p; +#if SQLITE_DEBUG + /* Trash all content in the buffer being freed */ + memset(p, 0xaa, db->lookaside.sz); +#endif + pBuf->pNext = db->lookaside.pFree; + db->lookaside.pFree = pBuf; + db->lookaside.nOut--; + return; + } } + assert( sqlite3MemdebugHasType(p, MEMTYPE_DB) ); + assert( sqlite3MemdebugHasType(p, MEMTYPE_LOOKASIDE|MEMTYPE_HEAP) ); + assert( db!=0 || sqlite3MemdebugNoType(p, MEMTYPE_LOOKASIDE) ); + sqlite3MemdebugSetType(p, MEMTYPE_HEAP); + sqlite3_free(p); } /* ** Change the size of an existing memory allocation */ SQLITE_PRIVATE void *sqlite3Realloc(void *pOld, int nBytes){ - int nOld, nNew; + int nOld, nNew, nDiff; void *pNew; if( pOld==0 ){ - return sqlite3Malloc(nBytes); + return sqlite3Malloc(nBytes); /* IMP: R-28354-25769 */ } if( nBytes<=0 ){ - sqlite3_free(pOld); + sqlite3_free(pOld); /* IMP: R-31593-10574 */ return 0; } if( nBytes>=0x7fffff00 ){ @@ -15705,31 +19220,36 @@ SQLITE_PRIVATE void *sqlite3Realloc(void *pOld, int nBytes){ return 0; } nOld = sqlite3MallocSize(pOld); - if( sqlite3GlobalConfig.bMemstat ){ + /* IMPLEMENTATION-OF: R-46199-30249 SQLite guarantees that the second + ** argument to xRealloc is always a value returned by a prior call to + ** xRoundup. */ + nNew = sqlite3GlobalConfig.m.xRoundup(nBytes); + if( nOld==nNew ){ + pNew = pOld; + }else if( sqlite3GlobalConfig.bMemstat ){ sqlite3_mutex_enter(mem0.mutex); sqlite3StatusSet(SQLITE_STATUS_MALLOC_SIZE, nBytes); - nNew = sqlite3GlobalConfig.m.xRoundup(nBytes); - if( nOld==nNew ){ - pNew = pOld; - }else{ - if( sqlite3StatusValue(SQLITE_STATUS_MEMORY_USED)+nNew-nOld >= - mem0.alarmThreshold ){ - sqlite3MallocAlarm(nNew-nOld); - } + nDiff = nNew - nOld; + if( sqlite3StatusValue(SQLITE_STATUS_MEMORY_USED) >= + mem0.alarmThreshold-nDiff ){ + sqlite3MallocAlarm(nDiff); + } + assert( sqlite3MemdebugHasType(pOld, MEMTYPE_HEAP) ); + assert( sqlite3MemdebugNoType(pOld, ~MEMTYPE_HEAP) ); + pNew = sqlite3GlobalConfig.m.xRealloc(pOld, nNew); + if( pNew==0 && mem0.alarmCallback ){ + sqlite3MallocAlarm(nBytes); pNew = sqlite3GlobalConfig.m.xRealloc(pOld, nNew); - if( pNew==0 && mem0.alarmCallback ){ - sqlite3MallocAlarm(nBytes); - pNew = sqlite3GlobalConfig.m.xRealloc(pOld, nNew); - } - if( pNew ){ - nNew = sqlite3MallocSize(pNew); - sqlite3StatusAdd(SQLITE_STATUS_MEMORY_USED, nNew-nOld); - } + } + if( pNew ){ + nNew = sqlite3MallocSize(pNew); + sqlite3StatusAdd(SQLITE_STATUS_MEMORY_USED, nNew-nOld); } sqlite3_mutex_leave(mem0.mutex); }else{ - pNew = sqlite3GlobalConfig.m.xRealloc(pOld, nBytes); + pNew = sqlite3GlobalConfig.m.xRealloc(pOld, nNew); } + assert( EIGHT_BYTE_ALIGNMENT(pNew) ); /* IMP: R-04675-44850 */ return pNew; } @@ -15789,20 +19309,27 @@ SQLITE_PRIVATE void *sqlite3DbMallocZero(sqlite3 *db, int n){ SQLITE_PRIVATE void *sqlite3DbMallocRaw(sqlite3 *db, int n){ void *p; assert( db==0 || sqlite3_mutex_held(db->mutex) ); + assert( db==0 || db->pnBytesFreed==0 ); #ifndef SQLITE_OMIT_LOOKASIDE if( db ){ LookasideSlot *pBuf; if( db->mallocFailed ){ return 0; } - if( db->lookaside.bEnabled && n<=db->lookaside.sz - && (pBuf = db->lookaside.pFree)!=0 ){ - db->lookaside.pFree = pBuf->pNext; - db->lookaside.nOut++; - if( db->lookaside.nOut>db->lookaside.mxOut ){ - db->lookaside.mxOut = db->lookaside.nOut; + if( db->lookaside.bEnabled ){ + if( n>db->lookaside.sz ){ + db->lookaside.anStat[1]++; + }else if( (pBuf = db->lookaside.pFree)==0 ){ + db->lookaside.anStat[2]++; + }else{ + db->lookaside.pFree = pBuf->pNext; + db->lookaside.nOut++; + db->lookaside.anStat[0]++; + if( db->lookaside.nOut>db->lookaside.mxOut ){ + db->lookaside.mxOut = db->lookaside.nOut; + } + return (void*)pBuf; } - return (void*)pBuf; } } #else @@ -15814,6 +19341,8 @@ SQLITE_PRIVATE void *sqlite3DbMallocRaw(sqlite3 *db, int n){ if( !p && db ){ db->mallocFailed = 1; } + sqlite3MemdebugSetType(p, MEMTYPE_DB | + ((db && db->lookaside.bEnabled) ? MEMTYPE_LOOKASIDE : MEMTYPE_HEAP)); return p; } @@ -15839,10 +19368,16 @@ SQLITE_PRIVATE void *sqlite3DbRealloc(sqlite3 *db, void *p, int n){ sqlite3DbFree(db, p); } }else{ + assert( sqlite3MemdebugHasType(p, MEMTYPE_DB) ); + assert( sqlite3MemdebugHasType(p, MEMTYPE_LOOKASIDE|MEMTYPE_HEAP) ); + sqlite3MemdebugSetType(p, MEMTYPE_HEAP); pNew = sqlite3_realloc(p, n); if( !pNew ){ + sqlite3MemdebugSetType(p, MEMTYPE_DB|MEMTYPE_HEAP); db->mallocFailed = 1; } + sqlite3MemdebugSetType(pNew, MEMTYPE_DB | + (db->lookaside.bEnabled ? MEMTYPE_LOOKASIDE : MEMTYPE_HEAP)); } } return pNew; @@ -15949,52 +19484,12 @@ SQLITE_PRIVATE int sqlite3ApiExit(sqlite3* db, int rc){ ** an historical reference. Most of the "enhancements" have been backed ** out so that the functionality is now the same as standard printf(). ** -** $Id: printf.c,v 1.104 2009/06/03 01:24:54 drh Exp $ -** ************************************************************************** ** -** The following modules is an enhanced replacement for the "printf" subroutines -** found in the standard C library. The following enhancements are -** supported: -** -** + Additional functions. The standard set of "printf" functions -** includes printf, fprintf, sprintf, vprintf, vfprintf, and -** vsprintf. This module adds the following: -** -** * snprintf -- Works like sprintf, but has an extra argument -** which is the size of the buffer written to. -** -** * mprintf -- Similar to sprintf. Writes output to memory -** obtained from malloc. -** -** * xprintf -- Calls a function to dispose of output. -** -** * nprintf -- No output, but returns the number of characters -** that would have been output by printf. -** -** * A v- version (ex: vsnprintf) of every function is also -** supplied. -** -** + A few extensions to the formatting notation are supported: -** -** * The "=" flag (similar to "-") causes the output to be -** be centered in the appropriately sized field. -** -** * The %b field outputs an integer in binary notation. -** -** * The %c field now accepts a precision. The character output -** is repeated by the number of times the precision specifies. -** -** * The %' field works like %c, but takes as its character the -** next character of the format string, instead of the next -** argument. For example, printf("%.78'-") prints 78 minus -** signs, the same as printf("%.78c",'-'). -** -** + When compiled using GCC on a SPARC, this version of printf is -** faster than the library printf for SUN OS 4.1. -** -** + All functions are fully reentrant. -** +** This file contains code for a set of "printf"-like routines. These +** routines format strings much like the printf() from the standard C +** library, though the implementation here has enhancements to support +** SQLlite. */ /* @@ -16119,7 +19614,7 @@ static char et_getdigit(LONGDOUBLE_TYPE *val, int *cnt){ /* ** Append N space characters to the given string buffer. */ -static void appendSpace(StrAccum *pAccum, int N){ +SQLITE_PRIVATE void sqlite3AppendSpace(StrAccum *pAccum, int N){ static const char zSpaces[] = " "; while( N>=(int)sizeof(zSpaces)-1 ){ sqlite3StrAccumAppend(pAccum, zSpaces, sizeof(zSpaces)-1); @@ -16132,43 +19627,15 @@ static void appendSpace(StrAccum *pAccum, int N){ /* ** On machines with a small stack size, you can redefine the -** SQLITE_PRINT_BUF_SIZE to be less than 350. +** SQLITE_PRINT_BUF_SIZE to be something smaller, if desired. */ #ifndef SQLITE_PRINT_BUF_SIZE -# if defined(SQLITE_SMALL_STACK) -# define SQLITE_PRINT_BUF_SIZE 50 -# else -# define SQLITE_PRINT_BUF_SIZE 350 -# endif +# define SQLITE_PRINT_BUF_SIZE 70 #endif #define etBUFSIZE SQLITE_PRINT_BUF_SIZE /* Size of the output buffer */ /* -** The root program. All variations call this core. -** -** INPUTS: -** func This is a pointer to a function taking three arguments -** 1. A pointer to anything. Same as the "arg" parameter. -** 2. A pointer to the list of characters to be output -** (Note, this list is NOT null terminated.) -** 3. An integer number of characters to be output. -** (Note: This number might be zero.) -** -** arg This is the pointer to anything which will be passed as the -** first argument to "func". Use it for whatever you like. -** -** fmt This is the format string, as in the usual print. -** -** ap This is a pointer to a list of arguments. Same as in -** vfprint. -** -** OUTPUTS: -** The return value is the total number of characters sent to -** the function "func". Returns -1 on a error. -** -** Note that the order in which automatic variables are declared below -** seems to make a big difference in determining how fast this beast -** will run. +** Render a string given by "fmt" into the StrAccum object. */ SQLITE_PRIVATE void sqlite3VXPrintf( StrAccum *pAccum, /* Accumulate results here */ @@ -16191,23 +19658,23 @@ SQLITE_PRIVATE void sqlite3VXPrintf( etByte flag_long; /* True if "l" flag is present */ etByte flag_longlong; /* True if the "ll" flag is present */ etByte done; /* Loop termination flag */ + etByte xtype = 0; /* Conversion paradigm */ + char prefix; /* Prefix character. "+" or "-" or " " or '\0'. */ sqlite_uint64 longvalue; /* Value for integer types */ LONGDOUBLE_TYPE realvalue; /* Value for real types */ const et_info *infop; /* Pointer to the appropriate info structure */ - char buf[etBUFSIZE]; /* Conversion buffer */ - char prefix; /* Prefix character. "+" or "-" or " " or '\0'. */ - etByte xtype = 0; /* Conversion paradigm */ - char *zExtra; /* Extra memory used for etTCLESCAPE conversions */ + char *zOut; /* Rendering buffer */ + int nOut; /* Size of the rendering buffer */ + char *zExtra; /* Malloced memory used by some conversion */ #ifndef SQLITE_OMIT_FLOATING_POINT int exp, e2; /* exponent of real numbers */ + int nsd; /* Number of significant digits returned */ double rounder; /* Used for rounding floating point values */ etByte flag_dp; /* True if decimal point should be shown */ etByte flag_rtz; /* True if trailing zeros should be removed */ - etByte flag_exp; /* True to force display of the exponent */ - int nsd; /* Number of significant digits returned */ #endif + char buf[etBUFSIZE]; /* Conversion buffer */ - length = 0; bufpt = 0; for(; (c=(*fmt))!=0; ++fmt){ if( c!='%' ){ @@ -16252,9 +19719,6 @@ SQLITE_PRIVATE void sqlite3VXPrintf( c = *++fmt; } } - if( width > etBUFSIZE-10 ){ - width = etBUFSIZE-10; - } /* Get the precision */ if( c=='.' ){ precision = 0; @@ -16301,12 +19765,6 @@ SQLITE_PRIVATE void sqlite3VXPrintf( } zExtra = 0; - - /* Limit the precision to prevent overflowing buf[] during conversion */ - if( precision>etBUFSIZE-40 && (infop->flags & FLAG_STRING)==0 ){ - precision = etBUFSIZE-40; - } - /* ** At this point, variables are initialized as follows: ** @@ -16345,7 +19803,11 @@ SQLITE_PRIVATE void sqlite3VXPrintf( v = va_arg(ap,int); } if( v<0 ){ - longvalue = -v; + if( v==SMALLEST_INT64 ){ + longvalue = ((u64)1)<<63; + }else{ + longvalue = -v; + } prefix = '-'; }else{ longvalue = v; @@ -16367,16 +19829,26 @@ SQLITE_PRIVATE void sqlite3VXPrintf( if( flag_zeropad && precisionmallocFailed = 1; + return; + } + } + bufpt = &zOut[nOut-1]; if( xtype==etORDINAL ){ static const char zOrd[] = "thstndrd"; int x = (int)(longvalue % 10); if( x>=4 || (longvalue/10)%10==1 ){ x = 0; } - buf[etBUFSIZE-3] = zOrd[x*2]; - buf[etBUFSIZE-2] = zOrd[x*2+1]; - bufpt -= 2; + *(--bufpt) = zOrd[x*2+1]; + *(--bufpt) = zOrd[x*2]; } { register const char *cset; /* Use registers for speed */ @@ -16388,7 +19860,7 @@ SQLITE_PRIVATE void sqlite3VXPrintf( longvalue = longvalue/base; }while( longvalue>0 ); } - length = (int)(&buf[etBUFSIZE-1]-bufpt); + length = (int)(&zOut[nOut-1]-bufpt); for(idx=precision-length; idx>0; idx--){ *(--bufpt) = '0'; /* Zero pad */ } @@ -16399,15 +19871,16 @@ SQLITE_PRIVATE void sqlite3VXPrintf( pre = &aPrefix[infop->prefix]; for(; (x=(*pre))!=0; pre++) *(--bufpt) = x; } - length = (int)(&buf[etBUFSIZE-1]-bufpt); + length = (int)(&zOut[nOut-1]-bufpt); break; case etFLOAT: case etEXP: case etGENERIC: realvalue = va_arg(ap,double); -#ifndef SQLITE_OMIT_FLOATING_POINT +#ifdef SQLITE_OMIT_FLOATING_POINT + length = 0; +#else if( precision<0 ) precision = 6; /* Set default precision */ - if( precision>etBUFSIZE/2-10 ) precision = etBUFSIZE/2-10; if( realvalue<0.0 ){ realvalue = -realvalue; prefix = '-'; @@ -16455,7 +19928,6 @@ SQLITE_PRIVATE void sqlite3VXPrintf( ** If the field type is etGENERIC, then convert to either etEXP ** or etFLOAT, as appropriate. */ - flag_exp = xtype==etEXP; if( xtype!=etFLOAT ){ realvalue += rounder; if( realvalue>=10.0 ){ realvalue *= 0.1; exp++; } @@ -16476,6 +19948,14 @@ SQLITE_PRIVATE void sqlite3VXPrintf( }else{ e2 = exp; } + if( e2+precision+width > etBUFSIZE - 15 ){ + bufpt = zExtra = sqlite3Malloc( e2+precision+width+15 ); + if( bufpt==0 ){ + pAccum->mallocFailed = 1; + return; + } + } + zOut = bufpt; nsd = 0; flag_dp = (precision>0 ?1:0) | flag_alternateform | flag_altform2; /* The sign in front of the number */ @@ -16507,7 +19987,7 @@ SQLITE_PRIVATE void sqlite3VXPrintf( /* Remove trailing zeros and the "." if no digits follow the "." */ if( flag_rtz && flag_dp ){ while( bufpt[-1]=='0' ) *(--bufpt) = 0; - assert( bufpt>buf ); + assert( bufpt>zOut ); if( bufpt[-1]=='.' ){ if( flag_altform2 ){ *(bufpt++) = '0'; @@ -16517,7 +19997,7 @@ SQLITE_PRIVATE void sqlite3VXPrintf( } } /* Add the "eNNN" suffix */ - if( flag_exp || xtype==etEXP ){ + if( xtype==etEXP ){ *(bufpt++) = aDigits[infop->charset]; if( exp<0 ){ *(bufpt++) = '-'; exp = -exp; @@ -16536,8 +20016,8 @@ SQLITE_PRIVATE void sqlite3VXPrintf( /* The converted number is in buf[] and zero terminated. Output it. ** Note that the number is in the usual order, not reversed as with ** integer conversions. */ - length = (int)(bufpt-buf); - bufpt = buf; + length = (int)(bufpt-zOut); + bufpt = zOut; /* Special case: Add leading zeros if the flag_zeropad flag is ** set and we are not left justified */ @@ -16551,7 +20031,7 @@ SQLITE_PRIVATE void sqlite3VXPrintf( while( nPad-- ) bufpt[i++] = '0'; length = width; } -#endif +#endif /* !defined(SQLITE_OMIT_FLOATING_POINT) */ break; case etSIZE: *(va_arg(ap,int*)) = pAccum->nChar; @@ -16590,14 +20070,15 @@ SQLITE_PRIVATE void sqlite3VXPrintf( case etSQLESCAPE: case etSQLESCAPE2: case etSQLESCAPE3: { - int i, j, n, isnull; + int i, j, k, n, isnull; int needQuote; char ch; char q = ((xtype==etSQLESCAPE3)?'"':'\''); /* Quote character */ char *escarg = va_arg(ap,char*); isnull = escarg==0; if( isnull ) escarg = (xtype==etSQLESCAPE2 ? "NULL" : "(NULL)"); - for(i=n=0; (ch=escarg[i])!=0; i++){ + k = precision; + for(i=n=0; k!=0 && (ch=escarg[i])!=0; i++, k--){ if( ch==q ) n++; } needQuote = !isnull && xtype==etSQLESCAPE2; @@ -16613,15 +20094,17 @@ SQLITE_PRIVATE void sqlite3VXPrintf( } j = 0; if( needQuote ) bufpt[j++] = q; - for(i=0; (ch=escarg[i])!=0; i++){ - bufpt[j++] = ch; + k = i; + for(i=0; i=0 && precision=0 && precision0 ){ - appendSpace(pAccum, nspace); + sqlite3AppendSpace(pAccum, nspace); } } if( length>0 ){ @@ -16669,12 +20152,10 @@ SQLITE_PRIVATE void sqlite3VXPrintf( register int nspace; nspace = width-length; if( nspace>0 ){ - appendSpace(pAccum, nspace); + sqlite3AppendSpace(pAccum, nspace); } } - if( zExtra ){ - sqlite3_free(zExtra); - } + sqlite3_free(zExtra); }/* End for loop over the format string */ } /* End of function */ @@ -16688,6 +20169,7 @@ SQLITE_PRIVATE void sqlite3StrAccumAppend(StrAccum *p, const char *z, int N){ testcase(p->mallocFailed); return; } + assert( p->zText!=0 || p->nChar==0 ); if( N<0 ){ N = sqlite3Strlen30(z); } @@ -16703,6 +20185,7 @@ SQLITE_PRIVATE void sqlite3StrAccumAppend(StrAccum *p, const char *z, int N){ return; } }else{ + char *zOld = (p->zText==p->zBase ? 0 : p->zText); i64 szNew = p->nChar; szNew += N + 1; if( szNew > p->mxAlloc ){ @@ -16712,10 +20195,13 @@ SQLITE_PRIVATE void sqlite3StrAccumAppend(StrAccum *p, const char *z, int N){ }else{ p->nAlloc = (int)szNew; } - zNew = sqlite3DbMallocRaw(p->db, p->nAlloc ); + if( p->useMalloc==1 ){ + zNew = sqlite3DbRealloc(p->db, zOld, p->nAlloc); + }else{ + zNew = sqlite3_realloc(zOld, p->nAlloc); + } if( zNew ){ - memcpy(zNew, p->zText, p->nChar); - sqlite3StrAccumReset(p); + if( zOld==0 && p->nChar>0 ) memcpy(zNew, p->zText, p->nChar); p->zText = zNew; }else{ p->mallocFailed = 1; @@ -16724,6 +20210,7 @@ SQLITE_PRIVATE void sqlite3StrAccumAppend(StrAccum *p, const char *z, int N){ } } } + assert( p->zText ); memcpy(&p->zText[p->nChar], z, N); p->nChar += N; } @@ -16737,7 +20224,11 @@ SQLITE_PRIVATE char *sqlite3StrAccumFinish(StrAccum *p){ if( p->zText ){ p->zText[p->nChar] = 0; if( p->useMalloc && p->zText==p->zBase ){ - p->zText = sqlite3DbMallocRaw(p->db, p->nChar+1 ); + if( p->useMalloc==1 ){ + p->zText = sqlite3DbMallocRaw(p->db, p->nChar+1 ); + }else{ + p->zText = sqlite3_malloc(p->nChar+1); + } if( p->zText ){ memcpy(p->zText, p->zBase, p->nChar+1); }else{ @@ -16753,7 +20244,11 @@ SQLITE_PRIVATE char *sqlite3StrAccumFinish(StrAccum *p){ */ SQLITE_PRIVATE void sqlite3StrAccumReset(StrAccum *p){ if( p->zText!=p->zBase ){ - sqlite3DbFree(p->db, p->zText); + if( p->useMalloc==1 ){ + sqlite3DbFree(p->db, p->zText); + }else{ + sqlite3_free(p->zText); + } } p->zText = 0; } @@ -16835,6 +20330,7 @@ SQLITE_API char *sqlite3_vmprintf(const char *zFormat, va_list ap){ if( sqlite3_initialize() ) return 0; #endif sqlite3StrAccumInit(&acc, zBase, sizeof(zBase), SQLITE_MAX_LENGTH); + acc.useMalloc = 2; sqlite3VXPrintf(&acc, 0, zFormat, ap); z = sqlite3StrAccumFinish(&acc); return z; @@ -16861,24 +20357,63 @@ SQLITE_API char *sqlite3_mprintf(const char *zFormat, ...){ ** current locale settings. This is important for SQLite because we ** are not able to use a "," as the decimal point in place of "." as ** specified by some locales. +** +** Oops: The first two arguments of sqlite3_snprintf() are backwards +** from the snprintf() standard. Unfortunately, it is too late to change +** this without breaking compatibility, so we just have to live with the +** mistake. +** +** sqlite3_vsnprintf() is the varargs version. */ -SQLITE_API char *sqlite3_snprintf(int n, char *zBuf, const char *zFormat, ...){ - char *z; - va_list ap; +SQLITE_API char *sqlite3_vsnprintf(int n, char *zBuf, const char *zFormat, va_list ap){ StrAccum acc; - - if( n<=0 ){ - return zBuf; - } + if( n<=0 ) return zBuf; sqlite3StrAccumInit(&acc, zBuf, n, 0); acc.useMalloc = 0; - va_start(ap,zFormat); sqlite3VXPrintf(&acc, 0, zFormat, ap); + return sqlite3StrAccumFinish(&acc); +} +SQLITE_API char *sqlite3_snprintf(int n, char *zBuf, const char *zFormat, ...){ + char *z; + va_list ap; + va_start(ap,zFormat); + z = sqlite3_vsnprintf(n, zBuf, zFormat, ap); va_end(ap); - z = sqlite3StrAccumFinish(&acc); return z; } +/* +** This is the routine that actually formats the sqlite3_log() message. +** We house it in a separate routine from sqlite3_log() to avoid using +** stack space on small-stack systems when logging is disabled. +** +** sqlite3_log() must render into a static buffer. It cannot dynamically +** allocate memory because it might be called while the memory allocator +** mutex is held. +*/ +static void renderLogMsg(int iErrCode, const char *zFormat, va_list ap){ + StrAccum acc; /* String accumulator */ + char zMsg[SQLITE_PRINT_BUF_SIZE*3]; /* Complete log message */ + + sqlite3StrAccumInit(&acc, zMsg, sizeof(zMsg), 0); + acc.useMalloc = 0; + sqlite3VXPrintf(&acc, 0, zFormat, ap); + sqlite3GlobalConfig.xLog(sqlite3GlobalConfig.pLogArg, iErrCode, + sqlite3StrAccumFinish(&acc)); +} + +/* +** Format and write a message to the log if logging is enabled. +*/ +SQLITE_API void sqlite3_log(int iErrCode, const char *zFormat, ...){ + va_list ap; /* Vararg list */ + if( sqlite3GlobalConfig.xLog ){ + va_start(ap, zFormat); + renderLogMsg(iErrCode, zFormat, ap); + va_end(ap); + } +} + #if defined(SQLITE_DEBUG) /* ** A version of printf() that understands %lld. Used for debugging. @@ -16900,6 +20435,18 @@ SQLITE_PRIVATE void sqlite3DebugPrintf(const char *zFormat, ...){ } #endif +#ifndef SQLITE_OMIT_TRACE +/* +** variable-argument wrapper around sqlite3VXPrintf(). +*/ +SQLITE_PRIVATE void sqlite3XPrintf(StrAccum *p, const char *zFormat, ...){ + va_list ap; + va_start(ap,zFormat); + sqlite3VXPrintf(p, 1, zFormat, ap); + va_end(ap); +} +#endif + /************** End of printf.c **********************************************/ /************** Begin file random.c ******************************************/ /* @@ -16918,8 +20465,6 @@ SQLITE_PRIVATE void sqlite3DebugPrintf(const char *zFormat, ...){ ** ** Random numbers are used by some of the database backends in order ** to generate random integer keys for tables or random filenames. -** -** $Id: random.c,v 1.29 2008/12/10 19:26:24 drh Exp $ */ @@ -17065,8 +20610,6 @@ SQLITE_PRIVATE void sqlite3PrngResetState(void){ ** This file contains routines used to translate between UTF-8, ** UTF-16, UTF-16BE, and UTF-16LE. ** -** $Id: utf.c,v 1.73 2009/04/01 18:40:32 drh Exp $ -** ** Notes on UTF-8: ** ** Byte-0 Byte-1 Byte-2 Byte-3 Value @@ -17088,557 +20631,165 @@ SQLITE_PRIVATE void sqlite3PrngResetState(void){ ** 0xfe 0xff big-endian utf-16 follows ** */ -/************** Include vdbeInt.h in the middle of utf.c *********************/ -/************** Begin file vdbeInt.h *****************************************/ -/* -** 2003 September 6 -** -** The author disclaims copyright to this source code. In place of -** a legal notice, here is a blessing: -** -** May you do good and not evil. -** May you find forgiveness for yourself and forgive others. -** May you share freely, never taking more than you give. -** -************************************************************************* -** This is the header file for information that is private to the -** VDBE. This information used to all be at the top of the single -** source code file "vdbe.c". When that file became too big (over -** 6000 lines long) it was split up into several smaller files and -** this header information was factored out. -** -** $Id: vdbeInt.h,v 1.174 2009/06/23 14:15:04 drh Exp $ -*/ -#ifndef _VDBEINT_H_ -#define _VDBEINT_H_ +/* #include */ +#ifndef SQLITE_AMALGAMATION /* -** SQL is translated into a sequence of instructions to be -** executed by a virtual machine. Each instruction is an instance -** of the following structure. +** The following constant value is used by the SQLITE_BIGENDIAN and +** SQLITE_LITTLEENDIAN macros. */ -typedef struct VdbeOp Op; +SQLITE_PRIVATE const int sqlite3one = 1; +#endif /* SQLITE_AMALGAMATION */ /* -** Boolean values +** This lookup table is used to help decode the first byte of +** a multi-byte UTF8 character. */ -typedef unsigned char Bool; +static const unsigned char sqlite3Utf8Trans1[] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x00, 0x01, 0x02, 0x03, 0x00, 0x01, 0x00, 0x00, +}; -/* -** A cursor is a pointer into a single BTree within a database file. -** The cursor can seek to a BTree entry with a particular key, or -** loop over all entries of the Btree. You can also insert new BTree -** entries or retrieve the key or data from the entry that the cursor -** is currently pointing to. -** -** Every cursor that the virtual machine has open is represented by an -** instance of the following structure. -** -** If the VdbeCursor.isTriggerRow flag is set it means that this cursor is -** really a single row that represents the NEW or OLD pseudo-table of -** a row trigger. The data for the row is stored in VdbeCursor.pData and -** the rowid is in VdbeCursor.iKey. -*/ -struct VdbeCursor { - BtCursor *pCursor; /* The cursor structure of the backend */ - int iDb; /* Index of cursor database in db->aDb[] (or -1) */ - i64 lastRowid; /* Last rowid from a Next or NextIdx operation */ - Bool zeroed; /* True if zeroed out and ready for reuse */ - Bool rowidIsValid; /* True if lastRowid is valid */ - Bool atFirst; /* True if pointing to first entry */ - Bool useRandomRowid; /* Generate new record numbers semi-randomly */ - Bool nullRow; /* True if pointing to a row with no data */ - Bool pseudoTable; /* This is a NEW or OLD pseudo-tables of a trigger */ - Bool ephemPseudoTable; - Bool deferredMoveto; /* A call to sqlite3BtreeMoveto() is needed */ - Bool isTable; /* True if a table requiring integer keys */ - Bool isIndex; /* True if an index containing keys only - no data */ - i64 movetoTarget; /* Argument to the deferred sqlite3BtreeMoveto() */ - Btree *pBt; /* Separate file holding temporary table */ - int nData; /* Number of bytes in pData */ - char *pData; /* Data for a NEW or OLD pseudo-table */ - i64 iKey; /* Key for the NEW or OLD pseudo-table row */ - KeyInfo *pKeyInfo; /* Info about index keys needed by index cursors */ - int nField; /* Number of fields in the header */ - i64 seqCount; /* Sequence counter */ - sqlite3_vtab_cursor *pVtabCursor; /* The cursor for a virtual table */ - const sqlite3_module *pModule; /* Module for cursor pVtabCursor */ - /* Result of last sqlite3BtreeMoveto() done by an OP_NotExists or - ** OP_IsUnique opcode on this cursor. */ - int seekResult; +#define WRITE_UTF8(zOut, c) { \ + if( c<0x00080 ){ \ + *zOut++ = (u8)(c&0xFF); \ + } \ + else if( c<0x00800 ){ \ + *zOut++ = 0xC0 + (u8)((c>>6)&0x1F); \ + *zOut++ = 0x80 + (u8)(c & 0x3F); \ + } \ + else if( c<0x10000 ){ \ + *zOut++ = 0xE0 + (u8)((c>>12)&0x0F); \ + *zOut++ = 0x80 + (u8)((c>>6) & 0x3F); \ + *zOut++ = 0x80 + (u8)(c & 0x3F); \ + }else{ \ + *zOut++ = 0xF0 + (u8)((c>>18) & 0x07); \ + *zOut++ = 0x80 + (u8)((c>>12) & 0x3F); \ + *zOut++ = 0x80 + (u8)((c>>6) & 0x3F); \ + *zOut++ = 0x80 + (u8)(c & 0x3F); \ + } \ +} - /* Cached information about the header for the data record that the - ** cursor is currently pointing to. Only valid if cacheValid is true. - ** aRow might point to (ephemeral) data for the current row, or it might - ** be NULL. - */ - int cacheStatus; /* Cache is valid if this matches Vdbe.cacheCtr */ - int payloadSize; /* Total number of bytes in the record */ - u32 *aType; /* Type values for all entries in the record */ - u32 *aOffset; /* Cached offsets to the start of each columns data */ - u8 *aRow; /* Data for the current row, if all on one page */ -}; -typedef struct VdbeCursor VdbeCursor; +#define WRITE_UTF16LE(zOut, c) { \ + if( c<=0xFFFF ){ \ + *zOut++ = (u8)(c&0x00FF); \ + *zOut++ = (u8)((c>>8)&0x00FF); \ + }else{ \ + *zOut++ = (u8)(((c>>10)&0x003F) + (((c-0x10000)>>10)&0x00C0)); \ + *zOut++ = (u8)(0x00D8 + (((c-0x10000)>>18)&0x03)); \ + *zOut++ = (u8)(c&0x00FF); \ + *zOut++ = (u8)(0x00DC + ((c>>8)&0x03)); \ + } \ +} -/* -** A value for VdbeCursor.cacheValid that means the cache is always invalid. -*/ -#define CACHE_STALE 0 +#define WRITE_UTF16BE(zOut, c) { \ + if( c<=0xFFFF ){ \ + *zOut++ = (u8)((c>>8)&0x00FF); \ + *zOut++ = (u8)(c&0x00FF); \ + }else{ \ + *zOut++ = (u8)(0x00D8 + (((c-0x10000)>>18)&0x03)); \ + *zOut++ = (u8)(((c>>10)&0x003F) + (((c-0x10000)>>10)&0x00C0)); \ + *zOut++ = (u8)(0x00DC + ((c>>8)&0x03)); \ + *zOut++ = (u8)(c&0x00FF); \ + } \ +} + +#define READ_UTF16LE(zIn, TERM, c){ \ + c = (*zIn++); \ + c += ((*zIn++)<<8); \ + if( c>=0xD800 && c<0xE000 && TERM ){ \ + int c2 = (*zIn++); \ + c2 += ((*zIn++)<<8); \ + c = (c2&0x03FF) + ((c&0x003F)<<10) + (((c&0x03C0)+0x0040)<<10); \ + } \ +} + +#define READ_UTF16BE(zIn, TERM, c){ \ + c = ((*zIn++)<<8); \ + c += (*zIn++); \ + if( c>=0xD800 && c<0xE000 && TERM ){ \ + int c2 = ((*zIn++)<<8); \ + c2 += (*zIn++); \ + c = (c2&0x03FF) + ((c&0x003F)<<10) + (((c&0x03C0)+0x0040)<<10); \ + } \ +} /* -** Internally, the vdbe manipulates nearly all SQL values as Mem -** structures. Each Mem struct may cache multiple representations (string, -** integer etc.) of the same value. A value (and therefore Mem structure) -** has the following properties: +** Translate a single UTF-8 character. Return the unicode value. ** -** Each value has a manifest type. The manifest type of the value stored -** in a Mem struct is returned by the MemType(Mem*) macro. The type is -** one of SQLITE_NULL, SQLITE_INTEGER, SQLITE_REAL, SQLITE_TEXT or -** SQLITE_BLOB. -*/ -struct Mem { - union { - i64 i; /* Integer value. */ - int nZero; /* Used when bit MEM_Zero is set in flags */ - FuncDef *pDef; /* Used only when flags==MEM_Agg */ - RowSet *pRowSet; /* Used only when flags==MEM_RowSet */ - } u; - double r; /* Real value */ - sqlite3 *db; /* The associated database connection */ - char *z; /* String or BLOB value */ - int n; /* Number of characters in string value, excluding '\0' */ - u16 flags; /* Some combination of MEM_Null, MEM_Str, MEM_Dyn, etc. */ - u8 type; /* One of SQLITE_NULL, SQLITE_TEXT, SQLITE_INTEGER, etc */ - u8 enc; /* SQLITE_UTF8, SQLITE_UTF16BE, SQLITE_UTF16LE */ - void (*xDel)(void *); /* If not null, call this function to delete Mem.z */ - char *zMalloc; /* Dynamic buffer allocated by sqlite3_malloc() */ -}; - -/* One or more of the following flags are set to indicate the validOK -** representations of the value stored in the Mem struct. +** During translation, assume that the byte that zTerm points +** is a 0x00. ** -** If the MEM_Null flag is set, then the value is an SQL NULL value. -** No other flags may be set in this case. +** Write a pointer to the next unread byte back into *pzNext. ** -** If the MEM_Str flag is set then Mem.z points at a string representation. -** Usually this is encoded in the same unicode encoding as the main -** database (see below for exceptions). If the MEM_Term flag is also -** set, then the string is nul terminated. The MEM_Int and MEM_Real -** flags may coexist with the MEM_Str flag. +** Notes On Invalid UTF-8: +** +** * This routine never allows a 7-bit character (0x00 through 0x7f) to +** be encoded as a multi-byte character. Any multi-byte character that +** attempts to encode a value between 0x00 and 0x7f is rendered as 0xfffd. +** +** * This routine never allows a UTF16 surrogate value to be encoded. +** If a multi-byte character attempts to encode a value between +** 0xd800 and 0xe000 then it is rendered as 0xfffd. +** +** * Bytes in the range of 0x80 through 0xbf which occur as the first +** byte of a character are interpreted as single-byte characters +** and rendered as themselves even though they are technically +** invalid characters. ** -** Multiple of these values can appear in Mem.flags. But only one -** at a time can appear in Mem.type. +** * This routine accepts an infinite number of different UTF8 encodings +** for unicode values 0x80 and greater. It do not change over-length +** encodings to 0xfffd as some systems recommend. */ -#define MEM_Null 0x0001 /* Value is NULL */ -#define MEM_Str 0x0002 /* Value is a string */ -#define MEM_Int 0x0004 /* Value is an integer */ -#define MEM_Real 0x0008 /* Value is a real number */ -#define MEM_Blob 0x0010 /* Value is a BLOB */ -#define MEM_RowSet 0x0020 /* Value is a RowSet object */ -#define MEM_TypeMask 0x00ff /* Mask of type bits */ +#define READ_UTF8(zIn, zTerm, c) \ + c = *(zIn++); \ + if( c>=0xc0 ){ \ + c = sqlite3Utf8Trans1[c-0xc0]; \ + while( zIn!=zTerm && (*zIn & 0xc0)==0x80 ){ \ + c = (c<<6) + (0x3f & *(zIn++)); \ + } \ + if( c<0x80 \ + || (c&0xFFFFF800)==0xD800 \ + || (c&0xFFFFFFFE)==0xFFFE ){ c = 0xFFFD; } \ + } +SQLITE_PRIVATE u32 sqlite3Utf8Read( + const unsigned char *zIn, /* First byte of UTF-8 character */ + const unsigned char **pzNext /* Write first byte past UTF-8 char here */ +){ + unsigned int c; -/* Whenever Mem contains a valid string or blob representation, one of -** the following flags must be set to determine the memory management -** policy for Mem.z. The MEM_Term flag tells us whether or not the -** string is \000 or \u0000 terminated -*/ -#define MEM_Term 0x0200 /* String rep is nul terminated */ -#define MEM_Dyn 0x0400 /* Need to call sqliteFree() on Mem.z */ -#define MEM_Static 0x0800 /* Mem.z points to a static string */ -#define MEM_Ephem 0x1000 /* Mem.z points to an ephemeral string */ -#define MEM_Agg 0x2000 /* Mem.z points to an agg function context */ -#define MEM_Zero 0x4000 /* Mem.i contains count of 0s appended to blob */ + /* Same as READ_UTF8() above but without the zTerm parameter. + ** For this routine, we assume the UTF8 string is always zero-terminated. + */ + c = *(zIn++); + if( c>=0xc0 ){ + c = sqlite3Utf8Trans1[c-0xc0]; + while( (*zIn & 0xc0)==0x80 ){ + c = (c<<6) + (0x3f & *(zIn++)); + } + if( c<0x80 + || (c&0xFFFFF800)==0xD800 + || (c&0xFFFFFFFE)==0xFFFE ){ c = 0xFFFD; } + } + *pzNext = zIn; + return c; +} -#ifdef SQLITE_OMIT_INCRBLOB - #undef MEM_Zero - #define MEM_Zero 0x0000 -#endif -/* -** Clear any existing type flags from a Mem and replace them with f -*/ -#define MemSetTypeFlag(p, f) \ - ((p)->flags = ((p)->flags&~(MEM_TypeMask|MEM_Zero))|f) - -/* A VdbeFunc is just a FuncDef (defined in sqliteInt.h) that contains -** additional information about auxiliary information bound to arguments -** of the function. This is used to implement the sqlite3_get_auxdata() -** and sqlite3_set_auxdata() APIs. The "auxdata" is some auxiliary data -** that can be associated with a constant argument to a function. This -** allows functions such as "regexp" to compile their constant regular -** expression argument once and reused the compiled code for multiple -** invocations. -*/ -struct VdbeFunc { - FuncDef *pFunc; /* The definition of the function */ - int nAux; /* Number of entries allocated for apAux[] */ - struct AuxData { - void *pAux; /* Aux data for the i-th argument */ - void (*xDelete)(void *); /* Destructor for the aux data */ - } apAux[1]; /* One slot for each function argument */ -}; - -/* -** The "context" argument for a installable function. A pointer to an -** instance of this structure is the first argument to the routines used -** implement the SQL functions. -** -** There is a typedef for this structure in sqlite.h. So all routines, -** even the public interface to SQLite, can use a pointer to this structure. -** But this file is the only place where the internal details of this -** structure are known. -** -** This structure is defined inside of vdbeInt.h because it uses substructures -** (Mem) which are only defined there. -*/ -struct sqlite3_context { - FuncDef *pFunc; /* Pointer to function information. MUST BE FIRST */ - VdbeFunc *pVdbeFunc; /* Auxilary data, if created. */ - Mem s; /* The return value is stored here */ - Mem *pMem; /* Memory cell used to store aggregate context */ - int isError; /* Error code returned by the function. */ - CollSeq *pColl; /* Collating sequence */ -}; - -/* -** A Set structure is used for quick testing to see if a value -** is part of a small set. Sets are used to implement code like -** this: -** x.y IN ('hi','hoo','hum') -*/ -typedef struct Set Set; -struct Set { - Hash hash; /* A set is just a hash table */ - HashElem *prev; /* Previously accessed hash elemen */ -}; - -/* -** A Context stores the last insert rowid, the last statement change count, -** and the current statement change count (i.e. changes since last statement). -** The current keylist is also stored in the context. -** Elements of Context structure type make up the ContextStack, which is -** updated by the ContextPush and ContextPop opcodes (used by triggers). -** The context is pushed before executing a trigger a popped when the -** trigger finishes. -*/ -typedef struct Context Context; -struct Context { - i64 lastRowid; /* Last insert rowid (sqlite3.lastRowid) */ - int nChange; /* Statement changes (Vdbe.nChanges) */ -}; - -/* -** An instance of the virtual machine. This structure contains the complete -** state of the virtual machine. -** -** The "sqlite3_stmt" structure pointer that is returned by sqlite3_compile() -** is really a pointer to an instance of this structure. -** -** The Vdbe.inVtabMethod variable is set to non-zero for the duration of -** any virtual table method invocations made by the vdbe program. It is -** set to 2 for xDestroy method calls and 1 for all other methods. This -** variable is used for two purposes: to allow xDestroy methods to execute -** "DROP TABLE" statements and to prevent some nasty side effects of -** malloc failure when SQLite is invoked recursively by a virtual table -** method function. -*/ -struct Vdbe { - sqlite3 *db; /* The database connection that owns this statement */ - Vdbe *pPrev,*pNext; /* Linked list of VDBEs with the same Vdbe.db */ - int nOp; /* Number of instructions in the program */ - int nOpAlloc; /* Number of slots allocated for aOp[] */ - Op *aOp; /* Space to hold the virtual machine's program */ - int nLabel; /* Number of labels used */ - int nLabelAlloc; /* Number of slots allocated in aLabel[] */ - int *aLabel; /* Space to hold the labels */ - Mem **apArg; /* Arguments to currently executing user function */ - Mem *aColName; /* Column names to return */ - Mem *pResultSet; /* Pointer to an array of results */ - u16 nResColumn; /* Number of columns in one row of the result set */ - u16 nCursor; /* Number of slots in apCsr[] */ - VdbeCursor **apCsr; /* One element of this array for each open cursor */ - u8 errorAction; /* Recovery action to do in case of an error */ - u8 okVar; /* True if azVar[] has been initialized */ - u16 nVar; /* Number of entries in aVar[] */ - Mem *aVar; /* Values for the OP_Variable opcode. */ - char **azVar; /* Name of variables */ - u32 magic; /* Magic number for sanity checking */ - int nMem; /* Number of memory locations currently allocated */ - Mem *aMem; /* The memory locations */ - int cacheCtr; /* VdbeCursor row cache generation counter */ - int contextStackTop; /* Index of top element in the context stack */ - int contextStackDepth; /* The size of the "context" stack */ - Context *contextStack; /* Stack used by opcodes ContextPush & ContextPop*/ - int pc; /* The program counter */ - int rc; /* Value to return */ - char *zErrMsg; /* Error message written here */ - u8 explain; /* True if EXPLAIN present on SQL command */ - u8 changeCntOn; /* True to update the change-counter */ - u8 expired; /* True if the VM needs to be recompiled */ - u8 minWriteFileFormat; /* Minimum file format for writable database files */ - u8 inVtabMethod; /* See comments above */ - u8 usesStmtJournal; /* True if uses a statement journal */ - u8 readOnly; /* True for read-only statements */ - u8 isPrepareV2; /* True if prepared with prepare_v2() */ - int nChange; /* Number of db changes made since last reset */ - int btreeMask; /* Bitmask of db->aDb[] entries referenced */ - i64 startTime; /* Time when query started - used for profiling */ - BtreeMutexArray aMutex; /* An array of Btree used here and needing locks */ - int aCounter[2]; /* Counters used by sqlite3_stmt_status() */ - char *zSql; /* Text of the SQL statement that generated this */ - void *pFree; /* Free this when deleting the vdbe */ - int iStatement; /* Statement number (or 0 if has not opened stmt) */ -#ifdef SQLITE_DEBUG - FILE *trace; /* Write an execution trace here, if not NULL */ -#endif -}; - -/* -** The following are allowed values for Vdbe.magic -*/ -#define VDBE_MAGIC_INIT 0x26bceaa5 /* Building a VDBE program */ -#define VDBE_MAGIC_RUN 0xbdf20da3 /* VDBE is ready to execute */ -#define VDBE_MAGIC_HALT 0x519c2973 /* VDBE has completed execution */ -#define VDBE_MAGIC_DEAD 0xb606c3c8 /* The VDBE has been deallocated */ - -/* -** Function prototypes -*/ -SQLITE_PRIVATE void sqlite3VdbeFreeCursor(Vdbe *, VdbeCursor*); -void sqliteVdbePopStack(Vdbe*,int); -SQLITE_PRIVATE int sqlite3VdbeCursorMoveto(VdbeCursor*); -#if defined(SQLITE_DEBUG) || defined(VDBE_PROFILE) -SQLITE_PRIVATE void sqlite3VdbePrintOp(FILE*, int, Op*); -#endif -SQLITE_PRIVATE u32 sqlite3VdbeSerialTypeLen(u32); -SQLITE_PRIVATE u32 sqlite3VdbeSerialType(Mem*, int); -SQLITE_PRIVATE u32 sqlite3VdbeSerialPut(unsigned char*, int, Mem*, int); -SQLITE_PRIVATE u32 sqlite3VdbeSerialGet(const unsigned char*, u32, Mem*); -SQLITE_PRIVATE void sqlite3VdbeDeleteAuxData(VdbeFunc*, int); - -int sqlite2BtreeKeyCompare(BtCursor *, const void *, int, int, int *); -SQLITE_PRIVATE int sqlite3VdbeIdxKeyCompare(VdbeCursor*,UnpackedRecord*,int*); -SQLITE_PRIVATE int sqlite3VdbeIdxRowid(sqlite3*, BtCursor *, i64 *); -SQLITE_PRIVATE int sqlite3MemCompare(const Mem*, const Mem*, const CollSeq*); -SQLITE_PRIVATE int sqlite3VdbeExec(Vdbe*); -SQLITE_PRIVATE int sqlite3VdbeList(Vdbe*); -SQLITE_PRIVATE int sqlite3VdbeHalt(Vdbe*); -SQLITE_PRIVATE int sqlite3VdbeChangeEncoding(Mem *, int); -SQLITE_PRIVATE int sqlite3VdbeMemTooBig(Mem*); -SQLITE_PRIVATE int sqlite3VdbeMemCopy(Mem*, const Mem*); -SQLITE_PRIVATE void sqlite3VdbeMemShallowCopy(Mem*, const Mem*, int); -SQLITE_PRIVATE void sqlite3VdbeMemMove(Mem*, Mem*); -SQLITE_PRIVATE int sqlite3VdbeMemNulTerminate(Mem*); -SQLITE_PRIVATE int sqlite3VdbeMemSetStr(Mem*, const char*, int, u8, void(*)(void*)); -SQLITE_PRIVATE void sqlite3VdbeMemSetInt64(Mem*, i64); -SQLITE_PRIVATE void sqlite3VdbeMemSetDouble(Mem*, double); -SQLITE_PRIVATE void sqlite3VdbeMemSetNull(Mem*); -SQLITE_PRIVATE void sqlite3VdbeMemSetZeroBlob(Mem*,int); -SQLITE_PRIVATE void sqlite3VdbeMemSetRowSet(Mem*); -SQLITE_PRIVATE int sqlite3VdbeMemMakeWriteable(Mem*); -SQLITE_PRIVATE int sqlite3VdbeMemStringify(Mem*, int); -SQLITE_PRIVATE i64 sqlite3VdbeIntValue(Mem*); -SQLITE_PRIVATE int sqlite3VdbeMemIntegerify(Mem*); -SQLITE_PRIVATE double sqlite3VdbeRealValue(Mem*); -SQLITE_PRIVATE void sqlite3VdbeIntegerAffinity(Mem*); -SQLITE_PRIVATE int sqlite3VdbeMemRealify(Mem*); -SQLITE_PRIVATE int sqlite3VdbeMemNumerify(Mem*); -SQLITE_PRIVATE int sqlite3VdbeMemFromBtree(BtCursor*,int,int,int,Mem*); -SQLITE_PRIVATE void sqlite3VdbeMemRelease(Mem *p); -SQLITE_PRIVATE void sqlite3VdbeMemReleaseExternal(Mem *p); -SQLITE_PRIVATE int sqlite3VdbeMemFinalize(Mem*, FuncDef*); -SQLITE_PRIVATE const char *sqlite3OpcodeName(int); -SQLITE_PRIVATE int sqlite3VdbeOpcodeHasProperty(int, int); -SQLITE_PRIVATE int sqlite3VdbeMemGrow(Mem *pMem, int n, int preserve); -SQLITE_PRIVATE int sqlite3VdbeCloseStatement(Vdbe *, int); -#ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT -SQLITE_PRIVATE int sqlite3VdbeReleaseBuffers(Vdbe *p); -#endif - -#ifndef SQLITE_OMIT_SHARED_CACHE -SQLITE_PRIVATE void sqlite3VdbeMutexArrayEnter(Vdbe *p); -#else -# define sqlite3VdbeMutexArrayEnter(p) -#endif - -SQLITE_PRIVATE int sqlite3VdbeMemTranslate(Mem*, u8); -#ifdef SQLITE_DEBUG -SQLITE_PRIVATE void sqlite3VdbePrintSql(Vdbe*); -SQLITE_PRIVATE void sqlite3VdbeMemPrettyPrint(Mem *pMem, char *zBuf); -#endif -SQLITE_PRIVATE int sqlite3VdbeMemHandleBom(Mem *pMem); - -#ifndef SQLITE_OMIT_INCRBLOB -SQLITE_PRIVATE int sqlite3VdbeMemExpandBlob(Mem *); -#else - #define sqlite3VdbeMemExpandBlob(x) SQLITE_OK -#endif - -#endif /* !defined(_VDBEINT_H_) */ - -/************** End of vdbeInt.h *********************************************/ -/************** Continuing where we left off in utf.c ************************/ - -#ifndef SQLITE_AMALGAMATION -/* -** The following constant value is used by the SQLITE_BIGENDIAN and -** SQLITE_LITTLEENDIAN macros. -*/ -SQLITE_PRIVATE const int sqlite3one = 1; -#endif /* SQLITE_AMALGAMATION */ - -/* -** This lookup table is used to help decode the first byte of -** a multi-byte UTF8 character. -*/ -static const unsigned char sqlite3Utf8Trans1[] = { - 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, - 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, - 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x00, 0x01, 0x02, 0x03, 0x00, 0x01, 0x00, 0x00, -}; - - -#define WRITE_UTF8(zOut, c) { \ - if( c<0x00080 ){ \ - *zOut++ = (u8)(c&0xFF); \ - } \ - else if( c<0x00800 ){ \ - *zOut++ = 0xC0 + (u8)((c>>6)&0x1F); \ - *zOut++ = 0x80 + (u8)(c & 0x3F); \ - } \ - else if( c<0x10000 ){ \ - *zOut++ = 0xE0 + (u8)((c>>12)&0x0F); \ - *zOut++ = 0x80 + (u8)((c>>6) & 0x3F); \ - *zOut++ = 0x80 + (u8)(c & 0x3F); \ - }else{ \ - *zOut++ = 0xF0 + (u8)((c>>18) & 0x07); \ - *zOut++ = 0x80 + (u8)((c>>12) & 0x3F); \ - *zOut++ = 0x80 + (u8)((c>>6) & 0x3F); \ - *zOut++ = 0x80 + (u8)(c & 0x3F); \ - } \ -} - -#define WRITE_UTF16LE(zOut, c) { \ - if( c<=0xFFFF ){ \ - *zOut++ = (u8)(c&0x00FF); \ - *zOut++ = (u8)((c>>8)&0x00FF); \ - }else{ \ - *zOut++ = (u8)(((c>>10)&0x003F) + (((c-0x10000)>>10)&0x00C0)); \ - *zOut++ = (u8)(0x00D8 + (((c-0x10000)>>18)&0x03)); \ - *zOut++ = (u8)(c&0x00FF); \ - *zOut++ = (u8)(0x00DC + ((c>>8)&0x03)); \ - } \ -} - -#define WRITE_UTF16BE(zOut, c) { \ - if( c<=0xFFFF ){ \ - *zOut++ = (u8)((c>>8)&0x00FF); \ - *zOut++ = (u8)(c&0x00FF); \ - }else{ \ - *zOut++ = (u8)(0x00D8 + (((c-0x10000)>>18)&0x03)); \ - *zOut++ = (u8)(((c>>10)&0x003F) + (((c-0x10000)>>10)&0x00C0)); \ - *zOut++ = (u8)(0x00DC + ((c>>8)&0x03)); \ - *zOut++ = (u8)(c&0x00FF); \ - } \ -} - -#define READ_UTF16LE(zIn, c){ \ - c = (*zIn++); \ - c += ((*zIn++)<<8); \ - if( c>=0xD800 && c<0xE000 ){ \ - int c2 = (*zIn++); \ - c2 += ((*zIn++)<<8); \ - c = (c2&0x03FF) + ((c&0x003F)<<10) + (((c&0x03C0)+0x0040)<<10); \ - } \ -} - -#define READ_UTF16BE(zIn, c){ \ - c = ((*zIn++)<<8); \ - c += (*zIn++); \ - if( c>=0xD800 && c<0xE000 ){ \ - int c2 = ((*zIn++)<<8); \ - c2 += (*zIn++); \ - c = (c2&0x03FF) + ((c&0x003F)<<10) + (((c&0x03C0)+0x0040)<<10); \ - } \ -} - -/* -** Translate a single UTF-8 character. Return the unicode value. -** -** During translation, assume that the byte that zTerm points -** is a 0x00. -** -** Write a pointer to the next unread byte back into *pzNext. -** -** Notes On Invalid UTF-8: -** -** * This routine never allows a 7-bit character (0x00 through 0x7f) to -** be encoded as a multi-byte character. Any multi-byte character that -** attempts to encode a value between 0x00 and 0x7f is rendered as 0xfffd. -** -** * This routine never allows a UTF16 surrogate value to be encoded. -** If a multi-byte character attempts to encode a value between -** 0xd800 and 0xe000 then it is rendered as 0xfffd. -** -** * Bytes in the range of 0x80 through 0xbf which occur as the first -** byte of a character are interpreted as single-byte characters -** and rendered as themselves even though they are technically -** invalid characters. -** -** * This routine accepts an infinite number of different UTF8 encodings -** for unicode values 0x80 and greater. It do not change over-length -** encodings to 0xfffd as some systems recommend. -*/ -#define READ_UTF8(zIn, zTerm, c) \ - c = *(zIn++); \ - if( c>=0xc0 ){ \ - c = sqlite3Utf8Trans1[c-0xc0]; \ - while( zIn!=zTerm && (*zIn & 0xc0)==0x80 ){ \ - c = (c<<6) + (0x3f & *(zIn++)); \ - } \ - if( c<0x80 \ - || (c&0xFFFFF800)==0xD800 \ - || (c&0xFFFFFFFE)==0xFFFE ){ c = 0xFFFD; } \ - } -SQLITE_PRIVATE int sqlite3Utf8Read( - const unsigned char *zIn, /* First byte of UTF-8 character */ - const unsigned char **pzNext /* Write first byte past UTF-8 char here */ -){ - int c; - - /* Same as READ_UTF8() above but without the zTerm parameter. - ** For this routine, we assume the UTF8 string is always zero-terminated. - */ - c = *(zIn++); - if( c>=0xc0 ){ - c = sqlite3Utf8Trans1[c-0xc0]; - while( (*zIn & 0xc0)==0x80 ){ - c = (c<<6) + (0x3f & *(zIn++)); - } - if( c<0x80 - || (c&0xFFFFF800)==0xD800 - || (c&0xFFFFFFFE)==0xFFFE ){ c = 0xFFFD; } - } - *pzNext = zIn; - return c; -} - - - - -/* -** If the TRANSLATE_TRACE macro is defined, the value of each Mem is -** printed on stderr on the way into and out of sqlite3VdbeMemTranslate(). -*/ -/* #define TRANSLATE_TRACE 1 */ +/* +** If the TRANSLATE_TRACE macro is defined, the value of each Mem is +** printed on stderr on the way into and out of sqlite3VdbeMemTranslate(). +*/ +/* #define TRANSLATE_TRACE 1 */ #ifndef SQLITE_OMIT_UTF16 /* @@ -17748,13 +20899,13 @@ SQLITE_PRIVATE int sqlite3VdbeMemTranslate(Mem *pMem, u8 desiredEnc){ if( pMem->enc==SQLITE_UTF16LE ){ /* UTF-16 Little-endian -> UTF-8 */ while( zIn UTF-8 */ while( zInmallocFailed ){ sqlite3VdbeMemRelease(&m); @@ -17894,11 +21045,39 @@ SQLITE_PRIVATE char *sqlite3Utf16to8(sqlite3 *db, const void *z, int nByte){ } assert( (m.flags & MEM_Term)!=0 || db->mallocFailed ); assert( (m.flags & MEM_Str)!=0 || db->mallocFailed ); - return (m.flags & MEM_Dyn)!=0 ? m.z : sqlite3DbStrDup(db, m.z); + assert( (m.flags & MEM_Dyn)!=0 || db->mallocFailed ); + assert( m.z || db->mallocFailed ); + return m.z; } /* -** pZ is a UTF-16 encoded unicode string at least nChar characters long. +** Convert a UTF-8 string to the UTF-16 encoding specified by parameter +** enc. A pointer to the new string is returned, and the value of *pnOut +** is set to the length of the returned string in bytes. The call should +** arrange to call sqlite3DbFree() on the returned pointer when it is +** no longer required. +** +** If a malloc failure occurs, NULL is returned and the db.mallocFailed +** flag set. +*/ +#ifdef SQLITE_ENABLE_STAT3 +SQLITE_PRIVATE char *sqlite3Utf8to16(sqlite3 *db, u8 enc, char *z, int n, int *pnOut){ + Mem m; + memset(&m, 0, sizeof(m)); + m.db = db; + sqlite3VdbeMemSetStr(&m, z, n, SQLITE_UTF8, SQLITE_STATIC); + if( sqlite3VdbeMemTranslate(&m, enc) ){ + assert( db->mallocFailed ); + return 0; + } + assert( m.z==m.zMalloc ); + *pnOut = m.n; + return m.z; +} +#endif + +/* +** zIn is a UTF-16 encoded unicode string at least nChar characters long. ** Return the number of bytes in the first nChar unicode characters ** in pZ. nChar must be non-negative. */ @@ -17906,23 +21085,15 @@ SQLITE_PRIVATE int sqlite3Utf16ByteLen(const void *zIn, int nChar){ int c; unsigned char const *z = zIn; int n = 0; + if( SQLITE_UTF16NATIVE==SQLITE_UTF16BE ){ - /* Using an "if (SQLITE_UTF16NATIVE==SQLITE_UTF16BE)" construct here - ** and in other parts of this file means that at one branch will - ** not be covered by coverage testing on any single host. But coverage - ** will be complete if the tests are run on both a little-endian and - ** big-endian host. Because both the UTF16NATIVE and SQLITE_UTF16BE - ** macros are constant at compile time the compiler can determine - ** which branch will be followed. It is therefore assumed that no runtime - ** penalty is paid for this "if" statement. - */ while( n0 && n<=4 ); z[0] = 0; z = zBuf; - READ_UTF16LE(z, c); + READ_UTF16LE(z, 1, c); assert( c==i ); assert( (z-zBuf)==n ); } @@ -17976,7 +21147,7 @@ SQLITE_PRIVATE void sqlite3UtfSelfTest(void){ assert( n>0 && n<=4 ); z[0] = 0; z = zBuf; - READ_UTF16BE(z, c); + READ_UTF16BE(z, 1, c); assert( c==i ); assert( (z-zBuf)==n ); } @@ -18002,8 +21173,8 @@ SQLITE_PRIVATE void sqlite3UtfSelfTest(void){ ** This file contains functions for allocating memory, comparing ** strings, and stuff like that. ** -** $Id: util.c,v 1.261 2009/06/24 10:26:33 drh Exp $ */ +/* #include */ #ifdef SQLITE_HAVE_ISNAN # include #endif @@ -18013,11 +21184,12 @@ SQLITE_PRIVATE void sqlite3UtfSelfTest(void){ */ #ifdef SQLITE_COVERAGE_TEST SQLITE_PRIVATE void sqlite3Coverage(int x){ - static int dummy = 0; - dummy += x; + static unsigned dummy = 0; + dummy += (unsigned)x; } #endif +#ifndef SQLITE_OMIT_FLOATING_POINT /* ** Return true if the floating point value is Not a Number (NaN). ** @@ -18062,6 +21234,7 @@ SQLITE_PRIVATE int sqlite3IsNaN(double x){ testcase( rc ); return rc; } +#endif /* SQLITE_OMIT_FLOATING_POINT */ /* ** Compute a string length that is limited to what can be stored in @@ -18133,23 +21306,20 @@ SQLITE_PRIVATE void sqlite3Error(sqlite3 *db, int err_code, const char *zFormat, ** (sqlite3_step() etc.). */ SQLITE_PRIVATE void sqlite3ErrorMsg(Parse *pParse, const char *zFormat, ...){ + char *zMsg; va_list ap; sqlite3 *db = pParse->db; - pParse->nErr++; - sqlite3DbFree(db, pParse->zErrMsg); va_start(ap, zFormat); - pParse->zErrMsg = sqlite3VMPrintf(db, zFormat, ap); + zMsg = sqlite3VMPrintf(db, zFormat, ap); va_end(ap); - pParse->rc = SQLITE_ERROR; -} - -/* -** Clear the error message in pParse, if any -*/ -SQLITE_PRIVATE void sqlite3ErrorClear(Parse *pParse){ - sqlite3DbFree(pParse->db, pParse->zErrMsg); - pParse->zErrMsg = 0; - pParse->nErr = 0; + if( db->suppressErr ){ + sqlite3DbFree(db, zMsg); + }else{ + pParse->nErr++; + sqlite3DbFree(db, pParse->zErrMsg); + pParse->zErrMsg = zMsg; + pParse->rc = SQLITE_ERROR; + } } /* @@ -18203,15 +21373,21 @@ SQLITE_PRIVATE int sqlite3Dequote(char *z){ /* ** Some systems have stricmp(). Others have strcasecmp(). Because ** there is no consistency, we will define our own. +** +** IMPLEMENTATION-OF: R-30243-02494 The sqlite3_stricmp() and +** sqlite3_strnicmp() APIs allow applications and extensions to compare +** the contents of two buffers containing UTF-8 strings in a +** case-independent fashion, using the same definition of "case +** independence" that SQLite uses internally when comparing identifiers. */ -SQLITE_PRIVATE int sqlite3StrICmp(const char *zLeft, const char *zRight){ +SQLITE_API int sqlite3_stricmp(const char *zLeft, const char *zRight){ register unsigned char *a, *b; a = (unsigned char *)zLeft; b = (unsigned char *)zRight; while( *a!=0 && UpperToLower[*a]==UpperToLower[*b]){ a++; b++; } return UpperToLower[*a] - UpperToLower[*b]; } -SQLITE_PRIVATE int sqlite3StrNICmp(const char *zLeft, const char *zRight, int N){ +SQLITE_API int sqlite3_strnicmp(const char *zLeft, const char *zRight, int N){ register unsigned char *a, *b; a = (unsigned char *)zLeft; b = (unsigned char *)zRight; @@ -18220,125 +21396,179 @@ SQLITE_PRIVATE int sqlite3StrNICmp(const char *zLeft, const char *zRight, int N) } /* -** Return TRUE if z is a pure numeric string. Return FALSE and leave -** *realnum unchanged if the string contains any character which is not -** part of a number. +** The string z[] is an text representation of a real number. +** Convert this string to a double and write it into *pResult. ** -** If the string is pure numeric, set *realnum to TRUE if the string -** contains the '.' character or an "E+000" style exponentiation suffix. -** Otherwise set *realnum to FALSE. Note that just becaue *realnum is -** false does not mean that the number can be successfully converted into -** an integer - it might be too big. +** The string z[] is length bytes in length (bytes, not characters) and +** uses the encoding enc. The string is not necessarily zero-terminated. ** -** An empty string is considered non-numeric. -*/ -SQLITE_PRIVATE int sqlite3IsNumber(const char *z, int *realnum, u8 enc){ - int incr = (enc==SQLITE_UTF8?1:2); - if( enc==SQLITE_UTF16BE ) z++; - if( *z=='-' || *z=='+' ) z += incr; - if( !sqlite3Isdigit(*z) ){ - return 0; - } - z += incr; - *realnum = 0; - while( sqlite3Isdigit(*z) ){ z += incr; } - if( *z=='.' ){ - z += incr; - if( !sqlite3Isdigit(*z) ) return 0; - while( sqlite3Isdigit(*z) ){ z += incr; } - *realnum = 1; - } - if( *z=='e' || *z=='E' ){ - z += incr; - if( *z=='+' || *z=='-' ) z += incr; - if( !sqlite3Isdigit(*z) ) return 0; - while( sqlite3Isdigit(*z) ){ z += incr; } - *realnum = 1; - } - return *z==0; -} - -/* -** The string z[] is an ascii representation of a real number. -** Convert this string to a double. +** Return TRUE if the result is a valid real number (or integer) and FALSE +** if the string is empty or contains extraneous text. Valid numbers +** are in one of these formats: ** -** This routine assumes that z[] really is a valid number. If it -** is not, the result is undefined. +** [+-]digits[E[+-]digits] +** [+-]digits.[digits][E[+-]digits] +** [+-].digits[E[+-]digits] ** -** This routine is used instead of the library atof() function because -** the library atof() might want to use "," as the decimal point instead -** of "." depending on how locale is set. But that would cause problems -** for SQL. So this routine always uses "." regardless of locale. +** Leading and trailing whitespace is ignored for the purpose of determining +** validity. +** +** If some prefix of the input string is a valid number, this routine +** returns FALSE but it still converts the prefix and writes the result +** into *pResult. */ -SQLITE_PRIVATE int sqlite3AtoF(const char *z, double *pResult){ +SQLITE_PRIVATE int sqlite3AtoF(const char *z, double *pResult, int length, u8 enc){ #ifndef SQLITE_OMIT_FLOATING_POINT - int sign = 1; - const char *zBegin = z; - LONGDOUBLE_TYPE v1 = 0.0; - int nSignificant = 0; - while( sqlite3Isspace(*z) ) z++; + int incr = (enc==SQLITE_UTF8?1:2); + const char *zEnd = z + length; + /* sign * significand * (10 ^ (esign * exponent)) */ + int sign = 1; /* sign of significand */ + i64 s = 0; /* significand */ + int d = 0; /* adjust exponent for shifting decimal point */ + int esign = 1; /* sign of exponent */ + int e = 0; /* exponent */ + int eValid = 1; /* True exponent is either not used or is well-formed */ + double result; + int nDigits = 0; + + *pResult = 0.0; /* Default return value, in case of an error */ + + if( enc==SQLITE_UTF16BE ) z++; + + /* skip leading spaces */ + while( z=zEnd ) return 0; + + /* get sign of significand */ if( *z=='-' ){ sign = -1; - z++; + z+=incr; }else if( *z=='+' ){ - z++; - } - while( z[0]=='0' ){ - z++; + z+=incr; } - while( sqlite3Isdigit(*z) ){ - v1 = v1*10.0 + (*z - '0'); - z++; - nSignificant++; + + /* skip leading zeroes */ + while( z=zEnd ) goto do_atof_calc; + + /* if decimal point is present */ if( *z=='.' ){ - LONGDOUBLE_TYPE divisor = 1.0; - z++; - if( nSignificant==0 ){ - while( z[0]=='0' ){ - divisor *= 10.0; - z++; - } + z+=incr; + /* copy digits from after decimal to significand + ** (decrease exponent by d to shift decimal right) */ + while( z=zEnd ) goto do_atof_calc; + + /* if exponent is present */ if( *z=='e' || *z=='E' ){ - int esign = 1; - int eval = 0; - LONGDOUBLE_TYPE scale = 1.0; - z++; + z+=incr; + eValid = 0; + if( z>=zEnd ) goto do_atof_calc; + /* get sign of exponent */ if( *z=='-' ){ esign = -1; - z++; + z+=incr; }else if( *z=='+' ){ - z++; + z+=incr; } - while( sqlite3Isdigit(*z) ){ - eval = eval*10 + *z - '0'; - z++; + /* copy digits to exponent */ + while( z=64 ){ scale *= 1.0e+64; eval -= 64; } - while( eval>=16 ){ scale *= 1.0e+16; eval -= 16; } - while( eval>=4 ){ scale *= 1.0e+4; eval -= 4; } - while( eval>=1 ){ scale *= 1.0e+1; eval -= 1; } - if( esign<0 ){ - v1 /= scale; + } + + /* skip trailing spaces */ + if( nDigits && eValid ){ + while( z0 ){ + while( s<(LARGEST_INT64/10) && e>0 ) e--,s*=10; }else{ - v1 *= scale; + while( !(s%10) && e>0 ) e--,s/=10; + } + + /* adjust the sign of significand */ + s = sign<0 ? -s : s; + + /* if exponent, scale significand as appropriate + ** and store in result. */ + if( e ){ + double scale = 1.0; + /* attempt to handle extremely small/large numbers better */ + if( e>307 && e<342 ){ + while( e%308 ) { scale *= 1.0e+1; e -= 1; } + if( esign<0 ){ + result = s / scale; + result /= 1.0e+308; + }else{ + result = s * scale; + result *= 1.0e+308; + } + }else if( e>=342 ){ + if( esign<0 ){ + result = 0.0*s; + }else{ + result = 1e308*1e308*s; /* Infinity */ + } + }else{ + /* 1.0e+22 is the largest power of 10 than can be + ** represented exactly. */ + while( e%22 ) { scale *= 1.0e+1; e -= 1; } + while( e>0 ) { scale *= 1.0e+22; e -= 22; } + if( esign<0 ){ + result = s / scale; + }else{ + result = s * scale; + } + } + } else { + result = (double)s; } } - *pResult = (double)(sign<0 ? -v1 : v1); - return (int)(z - zBegin); + + /* store the result */ + *pResult = result; + + /* return true if number and no extra non-whitespace chracters after */ + return z>=zEnd && nDigits>0 && eValid; #else - return sqlite3Atoi64(z, pResult); + return !sqlite3Atoi64(z, pResult, length, enc); #endif /* SQLITE_OMIT_FLOATING_POINT */ } @@ -18346,108 +21576,109 @@ SQLITE_PRIVATE int sqlite3AtoF(const char *z, double *pResult){ ** Compare the 19-character string zNum against the text representation ** value 2^63: 9223372036854775808. Return negative, zero, or positive ** if zNum is less than, equal to, or greater than the string. +** Note that zNum must contain exactly 19 characters. ** ** Unlike memcmp() this routine is guaranteed to return the difference ** in the values of the last digit if the only difference is in the ** last digit. So, for example, ** -** compare2pow63("9223372036854775800") +** compare2pow63("9223372036854775800", 1) ** ** will return -8. */ -static int compare2pow63(const char *zNum){ - int c; - c = memcmp(zNum,"922337203685477580",18)*10; +static int compare2pow63(const char *zNum, int incr){ + int c = 0; + int i; + /* 012345678901234567 */ + const char *pow63 = "922337203685477580"; + for(i=0; c==0 && i<18; i++){ + c = (zNum[i*incr]-pow63[i])*10; + } if( c==0 ){ - c = zNum[18] - '8'; + c = zNum[18*incr] - '8'; + testcase( c==(-1) ); + testcase( c==0 ); + testcase( c==(+1) ); } return c; } /* -** Return TRUE if zNum is a 64-bit signed integer and write -** the value of the integer into *pNum. If zNum is not an integer -** or is an integer that is too large to be expressed with 64 bits, -** then return false. +** Convert zNum to a 64-bit signed integer. ** -** When this routine was originally written it dealt with only -** 32-bit numbers. At that time, it was much faster than the -** atoi() library routine in RedHat 7.2. -*/ -SQLITE_PRIVATE int sqlite3Atoi64(const char *zNum, i64 *pNum){ - i64 v = 0; - int neg; - int i, c; - const char *zStart; - while( sqlite3Isspace(*zNum) ) zNum++; - if( *zNum=='-' ){ - neg = 1; - zNum++; - }else if( *zNum=='+' ){ - neg = 0; - zNum++; - }else{ - neg = 0; - } - zStart = zNum; - while( zNum[0]=='0' ){ zNum++; } /* Skip over leading zeros. Ticket #2454 */ - for(i=0; (c=zNum[i])>='0' && c<='9'; i++){ - v = v*10 + c - '0'; - } - *pNum = neg ? -v : v; - if( c!=0 || (i==0 && zStart==zNum) || i>19 ){ - /* zNum is empty or contains non-numeric text or is longer - ** than 19 digits (thus guaranting that it is too large) */ - return 0; - }else if( i<19 ){ - /* Less than 19 digits, so we know that it fits in 64 bits */ - return 1; - }else{ - /* 19-digit numbers must be no larger than 9223372036854775807 if positive - ** or 9223372036854775808 if negative. Note that 9223372036854665808 - ** is 2^63. */ - return compare2pow63(zNum)='0' && zNum[0]<='9' ); /* zNum is an unsigned number */ - - if( negFlag ) neg = 1-neg; - while( *zNum=='0' ){ - zNum++; /* Skip leading zeros. Ticket #2454 */ + int c = 0; + const char *zStart; + const char *zEnd = zNum + length; + if( enc==SQLITE_UTF16BE ) zNum++; + while( zNum='0' && c<='9'; i+=incr){ + u = u*10 + c - '0'; + } + if( u>LARGEST_INT64 ){ + *pNum = SMALLEST_INT64; + }else if( neg ){ + *pNum = -(i64)u; + }else{ + *pNum = (i64)u; } - for(i=0; zNum[i]; i++){ assert( zNum[i]>='0' && zNum[i]<='9' ); } - if( i<19 ){ - /* Guaranteed to fit if less than 19 digits */ + testcase( i==18 ); + testcase( i==19 ); + testcase( i==20 ); + if( (c!=0 && &zNum[i]19*incr ){ + /* zNum is empty or contains non-numeric text or is longer + ** than 19 digits (thus guaranteeing that it is too large) */ return 1; - }else if( i>19 ){ - /* Guaranteed to be too big if greater than 19 digits */ + }else if( i<19*incr ){ + /* Less than 19 digits, so we know that it fits in 64 bits */ + assert( u<=LARGEST_INT64 ); return 0; }else{ - /* Compare against 2^63. */ - return compare2pow63(zNum)0 ){ + /* zNum is greater than 9223372036854775808 so it overflows */ + return 1; + }else{ + /* zNum is exactly 9223372036854775808. Fits if negative. The + ** special case 2 overflow if positive */ + assert( u-1==LARGEST_INT64 ); + assert( (*pNum)==SMALLEST_INT64 ); + return neg ? 0 : 2; + } } } @@ -18479,9 +21710,11 @@ SQLITE_PRIVATE int sqlite3GetInt32(const char *zNum, int *pValue){ ** 1234567890 ** 2^31 -> 2147483648 */ + testcase( i==10 ); if( i>10 ){ return 0; } + testcase( v-neg==2147483647 ); if( v-neg>2147483647 ){ return 0; } @@ -18492,6 +21725,16 @@ SQLITE_PRIVATE int sqlite3GetInt32(const char *zNum, int *pValue){ return 1; } +/* +** Return a 32-bit integer value extracted from a string. If the +** string is not an integer, just return 0. +*/ +SQLITE_PRIVATE int sqlite3Atoi(const char *z){ + int x = 0; + if( z ) sqlite3GetInt32(z, &x); + return x; +} + /* ** The variable-length integer encoding is as follows: ** @@ -18569,6 +21812,19 @@ SQLITE_PRIVATE int sqlite3PutVarint32(unsigned char *p, u32 v){ return sqlite3PutVarint(p, v); } +/* +** Bitmasks used by sqlite3GetVarint(). These precomputed constants +** are defined here rather than simply putting the constant expressions +** inline in order to work around bugs in the RVT compiler. +** +** SLOT_2_0 A mask for (0x7f<<14) | 0x7f +** +** SLOT_4_2_0 A mask for (0x7f<<28) | SLOT_2_0 +*/ +#define SLOT_2_0 0x001fc07f +#define SLOT_4_2_0 0xf01fc07f + + /* ** Read a 64-bit variable-length integer from memory starting at p[0]. ** Return the number of bytes read. The value is stored in *v. @@ -18596,13 +21852,17 @@ SQLITE_PRIVATE u8 sqlite3GetVarint(const unsigned char *p, u64 *v){ return 2; } + /* Verify that constants are precomputed correctly */ + assert( SLOT_2_0 == ((0x7f<<14) | (0x7f)) ); + assert( SLOT_4_2_0 == ((0xfU<<28) | (0x7f<<14) | (0x7f)) ); + p++; a = a<<14; a |= *p; /* a: p0<<14 | p2 (unmasked) */ if (!(a&0x80)) { - a &= (0x7f<<14)|(0x7f); + a &= SLOT_2_0; b &= 0x7f; b = b<<7; a |= b; @@ -18611,14 +21871,14 @@ SQLITE_PRIVATE u8 sqlite3GetVarint(const unsigned char *p, u64 *v){ } /* CSE1 from below */ - a &= (0x7f<<14)|(0x7f); + a &= SLOT_2_0; p++; b = b<<14; b |= *p; /* b: p1<<14 | p3 (unmasked) */ if (!(b&0x80)) { - b &= (0x7f<<14)|(0x7f); + b &= SLOT_2_0; /* moved CSE1 up */ /* a &= (0x7f<<14)|(0x7f); */ a = a<<7; @@ -18632,7 +21892,7 @@ SQLITE_PRIVATE u8 sqlite3GetVarint(const unsigned char *p, u64 *v){ /* 1:save off p0<<21 | p1<<14 | p2<<7 | p3 (masked) */ /* moved CSE1 up */ /* a &= (0x7f<<14)|(0x7f); */ - b &= (0x7f<<14)|(0x7f); + b &= SLOT_2_0; s = a; /* s: p0<<14 | p2 (masked) */ @@ -18665,7 +21925,7 @@ SQLITE_PRIVATE u8 sqlite3GetVarint(const unsigned char *p, u64 *v){ { /* we can skip this cause it was (effectively) done above in calc'ing s */ /* b &= (0x7f<<28)|(0x7f<<14)|(0x7f); */ - a &= (0x7f<<14)|(0x7f); + a &= SLOT_2_0; a = a<<7; a |= b; s = s>>18; @@ -18679,8 +21939,8 @@ SQLITE_PRIVATE u8 sqlite3GetVarint(const unsigned char *p, u64 *v){ /* a: p2<<28 | p4<<14 | p6 (unmasked) */ if (!(a&0x80)) { - a &= (0x1f<<28)|(0x7f<<14)|(0x7f); - b &= (0x7f<<14)|(0x7f); + a &= SLOT_4_2_0; + b &= SLOT_2_0; b = b<<7; a |= b; s = s>>11; @@ -18689,14 +21949,14 @@ SQLITE_PRIVATE u8 sqlite3GetVarint(const unsigned char *p, u64 *v){ } /* CSE2 from below */ - a &= (0x7f<<14)|(0x7f); + a &= SLOT_2_0; p++; b = b<<14; b |= *p; /* b: p3<<28 | p5<<14 | p7 (unmasked) */ if (!(b&0x80)) { - b &= (0x1f<<28)|(0x7f<<14)|(0x7f); + b &= SLOT_4_2_0; /* moved CSE2 up */ /* a &= (0x7f<<14)|(0x7f); */ a = a<<7; @@ -18713,7 +21973,7 @@ SQLITE_PRIVATE u8 sqlite3GetVarint(const unsigned char *p, u64 *v){ /* moved CSE2 up */ /* a &= (0x7f<<29)|(0x7f<<15)|(0xff); */ - b &= (0x7f<<14)|(0x7f); + b &= SLOT_2_0; b = b<<8; a |= b; @@ -18833,9 +22093,9 @@ SQLITE_PRIVATE u8 sqlite3GetVarint32(const unsigned char *p, u32 *v){ /* a: p0<<28 | p2<<14 | p4 (unmasked) */ if (!(a&0x80)) { - /* Walues between 268435456 and 34359738367 */ - a &= (0x1f<<28)|(0x7f<<14)|(0x7f); - b &= (0x1f<<28)|(0x7f<<14)|(0x7f); + /* Values between 268435456 and 34359738367 */ + a &= SLOT_4_2_0; + b &= SLOT_4_2_0; b = b<<7; *v = a | b; return 5; @@ -18887,13 +22147,12 @@ SQLITE_PRIVATE void sqlite3Put4byte(unsigned char *p, u32 v){ -#if !defined(SQLITE_OMIT_BLOB_LITERAL) || defined(SQLITE_HAS_CODEC) /* ** Translate a single byte of Hex into an integer. -** This routinen only works if h really is a valid hexadecimal +** This routine only works if h really is a valid hexadecimal ** character: 0..9a..fA..F */ -static u8 hexToInt(int h){ +SQLITE_PRIVATE u8 sqlite3HexToInt(int h){ assert( (h>='0' && h<='9') || (h>='a' && h<='f') || (h>='A' && h<='F') ); #ifdef SQLITE_ASCII h += 9*(1&(h>>6)); @@ -18903,7 +22162,6 @@ static u8 hexToInt(int h){ #endif return (u8)(h & 0xf); } -#endif /* !SQLITE_OMIT_BLOB_LITERAL || SQLITE_HAS_CODEC */ #if !defined(SQLITE_OMIT_BLOB_LITERAL) || defined(SQLITE_HAS_CODEC) /* @@ -18920,7 +22178,7 @@ SQLITE_PRIVATE void *sqlite3HexToBlob(sqlite3 *db, const char *z, int n){ n--; if( zBlob ){ for(i=0; imagic is not a valid open value, take care not -** to modify the db structure at all. It could be that db is a stale -** pointer. In other words, it could be that there has been a prior -** call to sqlite3_close(db) and db has been deallocated. And we do -** not want to write into deallocated memory. -*/ -#ifdef SQLITE_DEBUG -SQLITE_PRIVATE int sqlite3SafetyOn(sqlite3 *db){ - if( db->magic==SQLITE_MAGIC_OPEN ){ - db->magic = SQLITE_MAGIC_BUSY; - assert( sqlite3_mutex_held(db->mutex) ); - return 0; - }else if( db->magic==SQLITE_MAGIC_BUSY ){ - db->magic = SQLITE_MAGIC_ERROR; - db->u1.isInterrupted = 1; - } - return 1; -} -#endif - /* -** Change the magic from SQLITE_MAGIC_BUSY to SQLITE_MAGIC_OPEN. -** Return an error (non-zero) if the magic was not SQLITE_MAGIC_BUSY -** when this routine is called. +** Log an error that is an API call on a connection pointer that should +** not have been used. The "type" of connection pointer is given as the +** argument. The zType is a word like "NULL" or "closed" or "invalid". */ -#ifdef SQLITE_DEBUG -SQLITE_PRIVATE int sqlite3SafetyOff(sqlite3 *db){ - if( db->magic==SQLITE_MAGIC_BUSY ){ - db->magic = SQLITE_MAGIC_OPEN; - assert( sqlite3_mutex_held(db->mutex) ); - return 0; - }else{ - db->magic = SQLITE_MAGIC_ERROR; - db->u1.isInterrupted = 1; - return 1; - } +static void logBadConnection(const char *zType){ + sqlite3_log(SQLITE_MISUSE, + "API call with %s database connection pointer", + zType + ); } -#endif /* ** Check to make sure we have a valid db pointer. This test is not @@ -19003,13 +22214,16 @@ SQLITE_PRIVATE int sqlite3SafetyOff(sqlite3 *db){ */ SQLITE_PRIVATE int sqlite3SafetyCheckOk(sqlite3 *db){ u32 magic; - if( db==0 ) return 0; + if( db==0 ){ + logBadConnection("NULL"); + return 0; + } magic = db->magic; - if( magic!=SQLITE_MAGIC_OPEN -#ifdef SQLITE_DEBUG - && magic!=SQLITE_MAGIC_BUSY -#endif - ){ + if( magic!=SQLITE_MAGIC_OPEN ){ + if( sqlite3SafetyCheckSickOrOk(db) ){ + testcase( sqlite3GlobalConfig.xLog!=0 ); + logBadConnection("unopened"); + } return 0; }else{ return 1; @@ -19020,9 +22234,113 @@ SQLITE_PRIVATE int sqlite3SafetyCheckSickOrOk(sqlite3 *db){ magic = db->magic; if( magic!=SQLITE_MAGIC_SICK && magic!=SQLITE_MAGIC_OPEN && - magic!=SQLITE_MAGIC_BUSY ) return 0; - return 1; + magic!=SQLITE_MAGIC_BUSY ){ + testcase( sqlite3GlobalConfig.xLog!=0 ); + logBadConnection("invalid"); + return 0; + }else{ + return 1; + } +} + +/* +** Attempt to add, substract, or multiply the 64-bit signed value iB against +** the other 64-bit signed integer at *pA and store the result in *pA. +** Return 0 on success. Or if the operation would have resulted in an +** overflow, leave *pA unchanged and return 1. +*/ +SQLITE_PRIVATE int sqlite3AddInt64(i64 *pA, i64 iB){ + i64 iA = *pA; + testcase( iA==0 ); testcase( iA==1 ); + testcase( iB==-1 ); testcase( iB==0 ); + if( iB>=0 ){ + testcase( iA>0 && LARGEST_INT64 - iA == iB ); + testcase( iA>0 && LARGEST_INT64 - iA == iB - 1 ); + if( iA>0 && LARGEST_INT64 - iA < iB ) return 1; + *pA += iB; + }else{ + testcase( iA<0 && -(iA + LARGEST_INT64) == iB + 1 ); + testcase( iA<0 && -(iA + LARGEST_INT64) == iB + 2 ); + if( iA<0 && -(iA + LARGEST_INT64) > iB + 1 ) return 1; + *pA += iB; + } + return 0; +} +SQLITE_PRIVATE int sqlite3SubInt64(i64 *pA, i64 iB){ + testcase( iB==SMALLEST_INT64+1 ); + if( iB==SMALLEST_INT64 ){ + testcase( (*pA)==(-1) ); testcase( (*pA)==0 ); + if( (*pA)>=0 ) return 1; + *pA -= iB; + return 0; + }else{ + return sqlite3AddInt64(pA, -iB); + } +} +#define TWOPOWER32 (((i64)1)<<32) +#define TWOPOWER31 (((i64)1)<<31) +SQLITE_PRIVATE int sqlite3MulInt64(i64 *pA, i64 iB){ + i64 iA = *pA; + i64 iA1, iA0, iB1, iB0, r; + + iA1 = iA/TWOPOWER32; + iA0 = iA % TWOPOWER32; + iB1 = iB/TWOPOWER32; + iB0 = iB % TWOPOWER32; + if( iA1*iB1 != 0 ) return 1; + assert( iA1*iB0==0 || iA0*iB1==0 ); + r = iA1*iB0 + iA0*iB1; + testcase( r==(-TWOPOWER31)-1 ); + testcase( r==(-TWOPOWER31) ); + testcase( r==TWOPOWER31 ); + testcase( r==TWOPOWER31-1 ); + if( r<(-TWOPOWER31) || r>=TWOPOWER31 ) return 1; + r *= TWOPOWER32; + if( sqlite3AddInt64(&r, iA0*iB0) ) return 1; + *pA = r; + return 0; +} + +/* +** Compute the absolute value of a 32-bit signed integer, of possible. Or +** if the integer has a value of -2147483648, return +2147483647 +*/ +SQLITE_PRIVATE int sqlite3AbsInt32(int x){ + if( x>=0 ) return x; + if( x==(int)0x80000000 ) return 0x7fffffff; + return -x; +} + +#ifdef SQLITE_ENABLE_8_3_NAMES +/* +** If SQLITE_ENABLE_8_3_NAMES is set at compile-time and if the database +** filename in zBaseFilename is a URI with the "8_3_names=1" parameter and +** if filename in z[] has a suffix (a.k.a. "extension") that is longer than +** three characters, then shorten the suffix on z[] to be the last three +** characters of the original suffix. +** +** If SQLITE_ENABLE_8_3_NAMES is set to 2 at compile-time, then always +** do the suffix shortening regardless of URI parameter. +** +** Examples: +** +** test.db-journal => test.nal +** test.db-wal => test.wal +** test.db-shm => test.shm +** test.db-mj7f3319fa => test.9fa +*/ +SQLITE_PRIVATE void sqlite3FileSuffix3(const char *zBaseFilename, char *z){ +#if SQLITE_ENABLE_8_3_NAMES<2 + if( sqlite3_uri_boolean(zBaseFilename, "8_3_names", 0) ) +#endif + { + int i, sz; + sz = sqlite3Strlen30(z); + for(i=sz-1; i>0 && z[i]!='/' && z[i]!='.'; i--){} + if( z[i]=='.' && ALWAYS(sz>i+4) ) memmove(&z[i+1], &z[sz-3], 4); + } } +#endif /************** End of util.c ************************************************/ /************** Begin file hash.c ********************************************/ @@ -19039,9 +22357,8 @@ SQLITE_PRIVATE int sqlite3SafetyCheckSickOrOk(sqlite3 *db){ ************************************************************************* ** This is the implementation of generic hash-tables ** used in SQLite. -** -** $Id: hash.c,v 1.38 2009/05/09 23:29:12 drh Exp $ */ +/* #include */ /* Turn bulk memory into a hash table object by initializing the ** fields of the Hash structure. @@ -19311,151 +22628,156 @@ SQLITE_PRIVATE void *sqlite3HashInsert(Hash *pH, const char *pKey, int nKey, voi #if !defined(SQLITE_OMIT_EXPLAIN) || !defined(NDEBUG) || defined(VDBE_PROFILE) || defined(SQLITE_DEBUG) SQLITE_PRIVATE const char *sqlite3OpcodeName(int i){ static const char *const azName[] = { "?", - /* 1 */ "VNext", - /* 2 */ "Affinity", - /* 3 */ "Column", - /* 4 */ "SetCookie", - /* 5 */ "Seek", - /* 6 */ "Sequence", - /* 7 */ "Savepoint", - /* 8 */ "RowKey", - /* 9 */ "SCopy", - /* 10 */ "OpenWrite", - /* 11 */ "If", - /* 12 */ "CollSeq", - /* 13 */ "OpenRead", - /* 14 */ "Expire", - /* 15 */ "AutoCommit", - /* 16 */ "Pagecount", - /* 17 */ "IntegrityCk", - /* 18 */ "Sort", + /* 1 */ "Goto", + /* 2 */ "Gosub", + /* 3 */ "Return", + /* 4 */ "Yield", + /* 5 */ "HaltIfNull", + /* 6 */ "Halt", + /* 7 */ "Integer", + /* 8 */ "Int64", + /* 9 */ "String", + /* 10 */ "Null", + /* 11 */ "Blob", + /* 12 */ "Variable", + /* 13 */ "Move", + /* 14 */ "Copy", + /* 15 */ "SCopy", + /* 16 */ "ResultRow", + /* 17 */ "CollSeq", + /* 18 */ "Function", /* 19 */ "Not", - /* 20 */ "Copy", - /* 21 */ "Trace", - /* 22 */ "Function", - /* 23 */ "IfNeg", - /* 24 */ "Noop", - /* 25 */ "Return", - /* 26 */ "NewRowid", - /* 27 */ "Variable", - /* 28 */ "String", - /* 29 */ "RealAffinity", - /* 30 */ "VRename", - /* 31 */ "ParseSchema", - /* 32 */ "VOpen", - /* 33 */ "Close", - /* 34 */ "CreateIndex", - /* 35 */ "IsUnique", - /* 36 */ "NotFound", - /* 37 */ "Int64", - /* 38 */ "MustBeInt", - /* 39 */ "Halt", - /* 40 */ "Rowid", - /* 41 */ "IdxLT", - /* 42 */ "AddImm", - /* 43 */ "Statement", - /* 44 */ "RowData", - /* 45 */ "MemMax", - /* 46 */ "NotExists", - /* 47 */ "Gosub", - /* 48 */ "Integer", - /* 49 */ "Prev", - /* 50 */ "RowSetRead", - /* 51 */ "RowSetAdd", - /* 52 */ "VColumn", - /* 53 */ "CreateTable", - /* 54 */ "Last", - /* 55 */ "SeekLe", - /* 56 */ "IncrVacuum", - /* 57 */ "IdxRowid", - /* 58 */ "ResetCount", - /* 59 */ "ContextPush", - /* 60 */ "Yield", - /* 61 */ "DropTrigger", - /* 62 */ "DropIndex", - /* 63 */ "IdxGE", - /* 64 */ "IdxDelete", - /* 65 */ "Vacuum", - /* 66 */ "Or", - /* 67 */ "And", - /* 68 */ "IfNot", - /* 69 */ "DropTable", - /* 70 */ "SeekLt", - /* 71 */ "IsNull", - /* 72 */ "NotNull", - /* 73 */ "Ne", - /* 74 */ "Eq", - /* 75 */ "Gt", - /* 76 */ "Le", - /* 77 */ "Lt", - /* 78 */ "Ge", - /* 79 */ "MakeRecord", - /* 80 */ "BitAnd", - /* 81 */ "BitOr", - /* 82 */ "ShiftLeft", - /* 83 */ "ShiftRight", - /* 84 */ "Add", - /* 85 */ "Subtract", - /* 86 */ "Multiply", - /* 87 */ "Divide", - /* 88 */ "Remainder", - /* 89 */ "Concat", - /* 90 */ "ResultRow", - /* 91 */ "Delete", - /* 92 */ "AggFinal", + /* 20 */ "AddImm", + /* 21 */ "MustBeInt", + /* 22 */ "RealAffinity", + /* 23 */ "Permutation", + /* 24 */ "Compare", + /* 25 */ "Jump", + /* 26 */ "Once", + /* 27 */ "If", + /* 28 */ "IfNot", + /* 29 */ "Column", + /* 30 */ "Affinity", + /* 31 */ "MakeRecord", + /* 32 */ "Count", + /* 33 */ "Savepoint", + /* 34 */ "AutoCommit", + /* 35 */ "Transaction", + /* 36 */ "ReadCookie", + /* 37 */ "SetCookie", + /* 38 */ "VerifyCookie", + /* 39 */ "OpenRead", + /* 40 */ "OpenWrite", + /* 41 */ "OpenAutoindex", + /* 42 */ "OpenEphemeral", + /* 43 */ "SorterOpen", + /* 44 */ "OpenPseudo", + /* 45 */ "Close", + /* 46 */ "SeekLt", + /* 47 */ "SeekLe", + /* 48 */ "SeekGe", + /* 49 */ "SeekGt", + /* 50 */ "Seek", + /* 51 */ "NotFound", + /* 52 */ "Found", + /* 53 */ "IsUnique", + /* 54 */ "NotExists", + /* 55 */ "Sequence", + /* 56 */ "NewRowid", + /* 57 */ "Insert", + /* 58 */ "InsertInt", + /* 59 */ "Delete", + /* 60 */ "ResetCount", + /* 61 */ "SorterCompare", + /* 62 */ "SorterData", + /* 63 */ "RowKey", + /* 64 */ "RowData", + /* 65 */ "Rowid", + /* 66 */ "NullRow", + /* 67 */ "Last", + /* 68 */ "Or", + /* 69 */ "And", + /* 70 */ "SorterSort", + /* 71 */ "Sort", + /* 72 */ "Rewind", + /* 73 */ "IsNull", + /* 74 */ "NotNull", + /* 75 */ "Ne", + /* 76 */ "Eq", + /* 77 */ "Gt", + /* 78 */ "Le", + /* 79 */ "Lt", + /* 80 */ "Ge", + /* 81 */ "SorterNext", + /* 82 */ "BitAnd", + /* 83 */ "BitOr", + /* 84 */ "ShiftLeft", + /* 85 */ "ShiftRight", + /* 86 */ "Add", + /* 87 */ "Subtract", + /* 88 */ "Multiply", + /* 89 */ "Divide", + /* 90 */ "Remainder", + /* 91 */ "Concat", + /* 92 */ "Prev", /* 93 */ "BitNot", /* 94 */ "String8", - /* 95 */ "Compare", - /* 96 */ "Goto", - /* 97 */ "TableLock", - /* 98 */ "Clear", - /* 99 */ "VerifyCookie", - /* 100 */ "AggStep", - /* 101 */ "SetNumColumns", - /* 102 */ "Transaction", - /* 103 */ "VFilter", - /* 104 */ "VDestroy", - /* 105 */ "ContextPop", - /* 106 */ "Next", - /* 107 */ "Count", - /* 108 */ "IdxInsert", - /* 109 */ "SeekGe", - /* 110 */ "Insert", - /* 111 */ "Destroy", - /* 112 */ "ReadCookie", - /* 113 */ "RowSetTest", - /* 114 */ "LoadAnalysis", - /* 115 */ "Explain", - /* 116 */ "HaltIfNull", - /* 117 */ "OpenPseudo", - /* 118 */ "OpenEphemeral", - /* 119 */ "Null", - /* 120 */ "Move", - /* 121 */ "Blob", - /* 122 */ "Rewind", - /* 123 */ "SeekGt", - /* 124 */ "VBegin", - /* 125 */ "VUpdate", - /* 126 */ "IfZero", - /* 127 */ "VCreate", - /* 128 */ "Found", - /* 129 */ "IfPos", + /* 95 */ "Next", + /* 96 */ "SorterInsert", + /* 97 */ "IdxInsert", + /* 98 */ "IdxDelete", + /* 99 */ "IdxRowid", + /* 100 */ "IdxLT", + /* 101 */ "IdxGE", + /* 102 */ "Destroy", + /* 103 */ "Clear", + /* 104 */ "CreateIndex", + /* 105 */ "CreateTable", + /* 106 */ "ParseSchema", + /* 107 */ "LoadAnalysis", + /* 108 */ "DropTable", + /* 109 */ "DropIndex", + /* 110 */ "DropTrigger", + /* 111 */ "IntegrityCk", + /* 112 */ "RowSetAdd", + /* 113 */ "RowSetRead", + /* 114 */ "RowSetTest", + /* 115 */ "Program", + /* 116 */ "Param", + /* 117 */ "FkCounter", + /* 118 */ "FkIfZero", + /* 119 */ "MemMax", + /* 120 */ "IfPos", + /* 121 */ "IfNeg", + /* 122 */ "IfZero", + /* 123 */ "AggStep", + /* 124 */ "AggFinal", + /* 125 */ "Checkpoint", + /* 126 */ "JournalMode", + /* 127 */ "Vacuum", + /* 128 */ "IncrVacuum", + /* 129 */ "Expire", /* 130 */ "Real", - /* 131 */ "NullRow", - /* 132 */ "Jump", - /* 133 */ "Permutation", - /* 134 */ "NotUsed_134", - /* 135 */ "NotUsed_135", - /* 136 */ "NotUsed_136", - /* 137 */ "NotUsed_137", - /* 138 */ "NotUsed_138", - /* 139 */ "NotUsed_139", - /* 140 */ "NotUsed_140", + /* 131 */ "TableLock", + /* 132 */ "VBegin", + /* 133 */ "VCreate", + /* 134 */ "VDestroy", + /* 135 */ "VOpen", + /* 136 */ "VFilter", + /* 137 */ "VColumn", + /* 138 */ "VNext", + /* 139 */ "VRename", + /* 140 */ "VUpdate", /* 141 */ "ToText", /* 142 */ "ToBlob", /* 143 */ "ToNumeric", /* 144 */ "ToInt", /* 145 */ "ToReal", + /* 146 */ "Pagecount", + /* 147 */ "MaxPgcnt", + /* 148 */ "Trace", + /* 149 */ "Noop", + /* 150 */ "Explain", }; return azName[i]; } @@ -19476,8 +22798,6 @@ SQLITE_PRIVATE const char *sqlite3OpcodeName(int i){ ****************************************************************************** ** ** This file contains code that is specific to OS/2. -** -** $Id: os_os2.c,v 1.63 2008/12/10 19:26:24 drh Exp $ */ @@ -19539,8 +22859,6 @@ SQLITE_PRIVATE const char *sqlite3OpcodeName(int i){ ** ** This file should be #included by the os_*.c files only. It is not a ** general purpose header file. -** -** $Id: os_common.h,v 1.38 2009/02/24 18:40:50 danielk1977 Exp $ */ #ifndef _OS_COMMON_H_ #define _OS_COMMON_H_ @@ -19554,25 +22872,14 @@ SQLITE_PRIVATE const char *sqlite3OpcodeName(int i){ # error "The MEMORY_DEBUG macro is obsolete. Use SQLITE_DEBUG instead." #endif -#ifdef SQLITE_DEBUG -SQLITE_PRIVATE int sqlite3OSTrace = 0; -#define OSTRACE1(X) if( sqlite3OSTrace ) sqlite3DebugPrintf(X) -#define OSTRACE2(X,Y) if( sqlite3OSTrace ) sqlite3DebugPrintf(X,Y) -#define OSTRACE3(X,Y,Z) if( sqlite3OSTrace ) sqlite3DebugPrintf(X,Y,Z) -#define OSTRACE4(X,Y,Z,A) if( sqlite3OSTrace ) sqlite3DebugPrintf(X,Y,Z,A) -#define OSTRACE5(X,Y,Z,A,B) if( sqlite3OSTrace ) sqlite3DebugPrintf(X,Y,Z,A,B) -#define OSTRACE6(X,Y,Z,A,B,C) \ - if(sqlite3OSTrace) sqlite3DebugPrintf(X,Y,Z,A,B,C) -#define OSTRACE7(X,Y,Z,A,B,C,D) \ - if(sqlite3OSTrace) sqlite3DebugPrintf(X,Y,Z,A,B,C,D) +#if defined(SQLITE_TEST) && defined(SQLITE_DEBUG) +# ifndef SQLITE_DEBUG_OS_TRACE +# define SQLITE_DEBUG_OS_TRACE 0 +# endif + int sqlite3OSTrace = SQLITE_DEBUG_OS_TRACE; +# define OSTRACE(X) if( sqlite3OSTrace ) sqlite3DebugPrintf X #else -#define OSTRACE1(X) -#define OSTRACE2(X,Y) -#define OSTRACE3(X,Y,Z) -#define OSTRACE4(X,Y,Z,A) -#define OSTRACE5(X,Y,Z,A,B) -#define OSTRACE6(X,Y,Z,A,B,C) -#define OSTRACE7(X,Y,Z,A,B,C,D) +# define OSTRACE(X) #endif /* @@ -19601,8 +22908,6 @@ SQLITE_PRIVATE int sqlite3OSTrace = 0; ** ** This file contains inline asm code for retrieving "high-performance" ** counters for x86 class CPUs. -** -** $Id: hwtime.h,v 1.3 2008/08/01 14:33:15 shane Exp $ */ #ifndef _HWTIME_H_ #define _HWTIME_H_ @@ -19744,20 +23049,35 @@ SQLITE_API int sqlite3_open_file_count = 0; /************** End of os_common.h *******************************************/ /************** Continuing where we left off in os_os2.c *********************/ +/* Forward references */ +typedef struct os2File os2File; /* The file structure */ +typedef struct os2ShmNode os2ShmNode; /* A shared descritive memory node */ +typedef struct os2ShmLink os2ShmLink; /* A connection to shared-memory */ + /* ** The os2File structure is subclass of sqlite3_file specific for the OS/2 ** protability layer. */ -typedef struct os2File os2File; struct os2File { const sqlite3_io_methods *pMethod; /* Always the first entry */ HFILE h; /* Handle for accessing the file */ - char* pathToDel; /* Name of file to delete on close, NULL if not */ - unsigned char locktype; /* Type of lock currently held on this file */ + int flags; /* Flags provided to os2Open() */ + int locktype; /* Type of lock currently held on this file */ + int szChunk; /* Chunk size configured by FCNTL_CHUNK_SIZE */ + char *zFullPathCp; /* Full path name of this file */ + os2ShmLink *pShmLink; /* Instance of shared memory on this file */ }; #define LOCK_TIMEOUT 10L /* the default locking timeout */ +/* +** Missing from some versions of the OS/2 toolkit - +** used to allocate from high memory if possible +*/ +#ifndef OBJ_ANY +# define OBJ_ANY 0x00000400 +#endif + /***************************************************************************** ** The next group of routines implement the I/O methods specified ** by the sqlite3_io_methods object. @@ -19767,21 +23087,24 @@ struct os2File { ** Close a file. */ static int os2Close( sqlite3_file *id ){ - APIRET rc = NO_ERROR; - os2File *pFile; - if( id && (pFile = (os2File*)id) != 0 ){ - OSTRACE2( "CLOSE %d\n", pFile->h ); - rc = DosClose( pFile->h ); - pFile->locktype = NO_LOCK; - if( pFile->pathToDel != NULL ){ - rc = DosForceDelete( (PSZ)pFile->pathToDel ); - free( pFile->pathToDel ); - pFile->pathToDel = NULL; - } - id = 0; - OpenCounter( -1 ); - } + APIRET rc; + os2File *pFile = (os2File*)id; + + assert( id!=0 ); + OSTRACE(( "CLOSE %d (%s)\n", pFile->h, pFile->zFullPathCp )); + + rc = DosClose( pFile->h ); + + if( pFile->flags & SQLITE_OPEN_DELETEONCLOSE ) + DosForceDelete( (PSZ)pFile->zFullPathCp ); + + free( pFile->zFullPathCp ); + pFile->zFullPathCp = NULL; + pFile->locktype = NO_LOCK; + pFile->h = (HFILE)-1; + pFile->flags = 0; + OpenCounter( -1 ); return rc == NO_ERROR ? SQLITE_OK : SQLITE_IOERR; } @@ -19801,7 +23124,7 @@ static int os2Read( os2File *pFile = (os2File*)id; assert( id!=0 ); SimulateIOError( return SQLITE_IOERR_READ ); - OSTRACE3( "READ %d lock=%d\n", pFile->h, pFile->locktype ); + OSTRACE(( "READ %d lock=%d\n", pFile->h, pFile->locktype )); if( DosSetFilePtr(pFile->h, offset, FILE_BEGIN, &fileLocation) != NO_ERROR ){ return SQLITE_IOERR; } @@ -19834,7 +23157,7 @@ static int os2Write( assert( id!=0 ); SimulateIOError( return SQLITE_IOERR_WRITE ); SimulateDiskfullError( return SQLITE_FULL ); - OSTRACE3( "WRITE %d lock=%d\n", pFile->h, pFile->locktype ); + OSTRACE(( "WRITE %d lock=%d\n", pFile->h, pFile->locktype )); if( DosSetFilePtr(pFile->h, offset, FILE_BEGIN, &fileLocation) != NO_ERROR ){ return SQLITE_IOERR; } @@ -19854,10 +23177,21 @@ static int os2Write( ** Truncate an open file to a specified size */ static int os2Truncate( sqlite3_file *id, i64 nByte ){ - APIRET rc = NO_ERROR; + APIRET rc; os2File *pFile = (os2File*)id; - OSTRACE3( "TRUNCATE %d %lld\n", pFile->h, nByte ); + assert( id!=0 ); + OSTRACE(( "TRUNCATE %d %lld\n", pFile->h, nByte )); SimulateIOError( return SQLITE_IOERR_TRUNCATE ); + + /* If the user has configured a chunk-size for this file, truncate the + ** file so that it consists of an integer number of chunks (i.e. the + ** actual file size after the operation may be larger than the requested + ** size). + */ + if( pFile->szChunk ){ + nByte = ((nByte + pFile->szChunk - 1)/pFile->szChunk) * pFile->szChunk; + } + rc = DosSetFileSize( pFile->h, nByte ); return rc == NO_ERROR ? SQLITE_OK : SQLITE_IOERR_TRUNCATE; } @@ -19876,7 +23210,7 @@ SQLITE_API int sqlite3_fullsync_count = 0; */ static int os2Sync( sqlite3_file *id, int flags ){ os2File *pFile = (os2File*)id; - OSTRACE3( "SYNC %d lock=%d\n", pFile->h, pFile->locktype ); + OSTRACE(( "SYNC %d lock=%d\n", pFile->h, pFile->locktype )); #ifdef SQLITE_TEST if( flags & SQLITE_SYNC_FULL){ sqlite3_fullsync_count++; @@ -19926,7 +23260,7 @@ static int getReadLock( os2File *pFile ){ UnlockArea.lOffset = 0L; UnlockArea.lRange = 0L; res = DosSetFileLocks( pFile->h, &UnlockArea, &LockArea, LOCK_TIMEOUT, 1L ); - OSTRACE3( "GETREADLOCK %d res=%d\n", pFile->h, res ); + OSTRACE(( "GETREADLOCK %d res=%d\n", pFile->h, res )); return res; } @@ -19944,7 +23278,7 @@ static int unlockReadLock( os2File *id ){ UnlockArea.lOffset = SHARED_FIRST; UnlockArea.lRange = SHARED_SIZE; res = DosSetFileLocks( id->h, &UnlockArea, &LockArea, LOCK_TIMEOUT, 1L ); - OSTRACE3( "UNLOCK-READLOCK file handle=%d res=%d?\n", id->h, res ); + OSTRACE(( "UNLOCK-READLOCK file handle=%d res=%d?\n", id->h, res )); return res; } @@ -19985,14 +23319,14 @@ static int os2Lock( sqlite3_file *id, int locktype ){ memset(&LockArea, 0, sizeof(LockArea)); memset(&UnlockArea, 0, sizeof(UnlockArea)); assert( pFile!=0 ); - OSTRACE4( "LOCK %d %d was %d\n", pFile->h, locktype, pFile->locktype ); + OSTRACE(( "LOCK %d %d was %d\n", pFile->h, locktype, pFile->locktype )); /* If there is already a lock of this type or more restrictive on the ** os2File, do nothing. Don't use the end_lock: exit path, as ** sqlite3_mutex_enter() hasn't been called yet. */ if( pFile->locktype>=locktype ){ - OSTRACE3( "LOCK %d %d ok (already held)\n", pFile->h, locktype ); + OSTRACE(( "LOCK %d %d ok (already held)\n", pFile->h, locktype )); return SQLITE_OK; } @@ -20019,7 +23353,7 @@ static int os2Lock( sqlite3_file *id, int locktype ){ res = DosSetFileLocks( pFile->h, &UnlockArea, &LockArea, 100L, 0L ); if( res == NO_ERROR ){ gotPendingLock = 1; - OSTRACE3( "LOCK %d pending lock boolean set. res=%d\n", pFile->h, res ); + OSTRACE(( "LOCK %d pending lock boolean set. res=%d\n", pFile->h, res )); } } @@ -20031,7 +23365,7 @@ static int os2Lock( sqlite3_file *id, int locktype ){ if( res == NO_ERROR ){ newLocktype = SHARED_LOCK; } - OSTRACE3( "LOCK %d acquire shared lock. res=%d\n", pFile->h, res ); + OSTRACE(( "LOCK %d acquire shared lock. res=%d\n", pFile->h, res )); } /* Acquire a RESERVED lock @@ -20046,7 +23380,7 @@ static int os2Lock( sqlite3_file *id, int locktype ){ if( res == NO_ERROR ){ newLocktype = RESERVED_LOCK; } - OSTRACE3( "LOCK %d acquire reserved lock. res=%d\n", pFile->h, res ); + OSTRACE(( "LOCK %d acquire reserved lock. res=%d\n", pFile->h, res )); } /* Acquire a PENDING lock @@ -20054,7 +23388,8 @@ static int os2Lock( sqlite3_file *id, int locktype ){ if( locktype==EXCLUSIVE_LOCK && res == NO_ERROR ){ newLocktype = PENDING_LOCK; gotPendingLock = 0; - OSTRACE2( "LOCK %d acquire pending lock. pending lock boolean unset.\n", pFile->h ); + OSTRACE(( "LOCK %d acquire pending lock. pending lock boolean unset.\n", + pFile->h )); } /* Acquire an EXCLUSIVE lock @@ -20062,7 +23397,7 @@ static int os2Lock( sqlite3_file *id, int locktype ){ if( locktype==EXCLUSIVE_LOCK && res == NO_ERROR ){ assert( pFile->locktype>=SHARED_LOCK ); res = unlockReadLock(pFile); - OSTRACE2( "unreadlock = %d\n", res ); + OSTRACE(( "unreadlock = %d\n", res )); LockArea.lOffset = SHARED_FIRST; LockArea.lRange = SHARED_SIZE; UnlockArea.lOffset = 0L; @@ -20071,10 +23406,10 @@ static int os2Lock( sqlite3_file *id, int locktype ){ if( res == NO_ERROR ){ newLocktype = EXCLUSIVE_LOCK; }else{ - OSTRACE2( "OS/2 error-code = %d\n", res ); + OSTRACE(( "OS/2 error-code = %d\n", res )); getReadLock(pFile); } - OSTRACE3( "LOCK %d acquire exclusive lock. res=%d\n", pFile->h, res ); + OSTRACE(( "LOCK %d acquire exclusive lock. res=%d\n", pFile->h, res )); } /* If we are holding a PENDING lock that ought to be released, then @@ -20087,7 +23422,7 @@ static int os2Lock( sqlite3_file *id, int locktype ){ UnlockArea.lOffset = PENDING_BYTE; UnlockArea.lRange = 1L; r = DosSetFileLocks( pFile->h, &UnlockArea, &LockArea, LOCK_TIMEOUT, 0L ); - OSTRACE3( "LOCK %d unlocking pending/is shared. r=%d\n", pFile->h, r ); + OSTRACE(( "LOCK %d unlocking pending/is shared. r=%d\n", pFile->h, r )); } /* Update the state of the lock has held in the file descriptor then @@ -20096,12 +23431,12 @@ static int os2Lock( sqlite3_file *id, int locktype ){ if( res == NO_ERROR ){ rc = SQLITE_OK; }else{ - OSTRACE4( "LOCK FAILED %d trying for %d but got %d\n", pFile->h, - locktype, newLocktype ); + OSTRACE(( "LOCK FAILED %d trying for %d but got %d\n", pFile->h, + locktype, newLocktype )); rc = SQLITE_BUSY; } pFile->locktype = newLocktype; - OSTRACE3( "LOCK %d now %d\n", pFile->h, pFile->locktype ); + OSTRACE(( "LOCK %d now %d\n", pFile->h, pFile->locktype )); return rc; } @@ -20116,7 +23451,7 @@ static int os2CheckReservedLock( sqlite3_file *id, int *pOut ){ assert( pFile!=0 ); if( pFile->locktype>=RESERVED_LOCK ){ r = 1; - OSTRACE3( "TEST WR-LOCK %d %d (local)\n", pFile->h, r ); + OSTRACE(( "TEST WR-LOCK %d %d (local)\n", pFile->h, r )); }else{ FILELOCK LockArea, UnlockArea; @@ -20128,7 +23463,7 @@ static int os2CheckReservedLock( sqlite3_file *id, int *pOut ){ UnlockArea.lOffset = 0L; UnlockArea.lRange = 0L; rc = DosSetFileLocks( pFile->h, &UnlockArea, &LockArea, LOCK_TIMEOUT, 0L ); - OSTRACE3( "TEST WR-LOCK %d lock reserved byte rc=%d\n", pFile->h, rc ); + OSTRACE(( "TEST WR-LOCK %d lock reserved byte rc=%d\n", pFile->h, rc )); if( rc == NO_ERROR ){ APIRET rcu = NO_ERROR; /* return code for unlocking */ LockArea.lOffset = 0L; @@ -20136,10 +23471,10 @@ static int os2CheckReservedLock( sqlite3_file *id, int *pOut ){ UnlockArea.lOffset = RESERVED_BYTE; UnlockArea.lRange = 1L; rcu = DosSetFileLocks( pFile->h, &UnlockArea, &LockArea, LOCK_TIMEOUT, 0L ); - OSTRACE3( "TEST WR-LOCK %d unlock reserved byte r=%d\n", pFile->h, rcu ); + OSTRACE(( "TEST WR-LOCK %d unlock reserved byte r=%d\n", pFile->h, rcu )); } r = !(rc == NO_ERROR); - OSTRACE3( "TEST WR-LOCK %d %d (remote)\n", pFile->h, r ); + OSTRACE(( "TEST WR-LOCK %d %d (remote)\n", pFile->h, r )); } *pOut = r; return SQLITE_OK; @@ -20167,7 +23502,7 @@ static int os2Unlock( sqlite3_file *id, int locktype ){ memset(&UnlockArea, 0, sizeof(UnlockArea)); assert( pFile!=0 ); assert( locktype<=SHARED_LOCK ); - OSTRACE4( "UNLOCK %d to %d was %d\n", pFile->h, locktype, pFile->locktype ); + OSTRACE(( "UNLOCK %d to %d was %d\n", pFile->h, locktype, pFile->locktype )); type = pFile->locktype; if( type>=EXCLUSIVE_LOCK ){ LockArea.lOffset = 0L; @@ -20175,11 +23510,11 @@ static int os2Unlock( sqlite3_file *id, int locktype ){ UnlockArea.lOffset = SHARED_FIRST; UnlockArea.lRange = SHARED_SIZE; res = DosSetFileLocks( pFile->h, &UnlockArea, &LockArea, LOCK_TIMEOUT, 0L ); - OSTRACE3( "UNLOCK %d exclusive lock res=%d\n", pFile->h, res ); + OSTRACE(( "UNLOCK %d exclusive lock res=%d\n", pFile->h, res )); if( locktype==SHARED_LOCK && getReadLock(pFile) != NO_ERROR ){ /* This should never happen. We should always be able to ** reacquire the read lock */ - OSTRACE3( "UNLOCK %d to %d getReadLock() failed\n", pFile->h, locktype ); + OSTRACE(( "UNLOCK %d to %d getReadLock() failed\n", pFile->h, locktype )); rc = SQLITE_IOERR_UNLOCK; } } @@ -20189,11 +23524,12 @@ static int os2Unlock( sqlite3_file *id, int locktype ){ UnlockArea.lOffset = RESERVED_BYTE; UnlockArea.lRange = 1L; res = DosSetFileLocks( pFile->h, &UnlockArea, &LockArea, LOCK_TIMEOUT, 0L ); - OSTRACE3( "UNLOCK %d reserved res=%d\n", pFile->h, res ); + OSTRACE(( "UNLOCK %d reserved res=%d\n", pFile->h, res )); } if( locktype==NO_LOCK && type>=SHARED_LOCK ){ res = unlockReadLock(pFile); - OSTRACE5( "UNLOCK %d is %d want %d res=%d\n", pFile->h, type, locktype, res ); + OSTRACE(( "UNLOCK %d is %d want %d res=%d\n", + pFile->h, type, locktype, res )); } if( type>=PENDING_LOCK ){ LockArea.lOffset = 0L; @@ -20201,10 +23537,10 @@ static int os2Unlock( sqlite3_file *id, int locktype ){ UnlockArea.lOffset = PENDING_BYTE; UnlockArea.lRange = 1L; res = DosSetFileLocks( pFile->h, &UnlockArea, &LockArea, LOCK_TIMEOUT, 0L ); - OSTRACE3( "UNLOCK %d pending res=%d\n", pFile->h, res ); + OSTRACE(( "UNLOCK %d pending res=%d\n", pFile->h, res )); } pFile->locktype = locktype; - OSTRACE3( "UNLOCK %d now %d\n", pFile->h, pFile->locktype ); + OSTRACE(( "UNLOCK %d now %d\n", pFile->h, pFile->locktype )); return rc; } @@ -20215,11 +23551,26 @@ static int os2FileControl(sqlite3_file *id, int op, void *pArg){ switch( op ){ case SQLITE_FCNTL_LOCKSTATE: { *(int*)pArg = ((os2File*)id)->locktype; - OSTRACE3( "FCNTL_LOCKSTATE %d lock=%d\n", ((os2File*)id)->h, ((os2File*)id)->locktype ); + OSTRACE(( "FCNTL_LOCKSTATE %d lock=%d\n", + ((os2File*)id)->h, ((os2File*)id)->locktype )); + return SQLITE_OK; + } + case SQLITE_FCNTL_CHUNK_SIZE: { + ((os2File*)id)->szChunk = *(int*)pArg; + return SQLITE_OK; + } + case SQLITE_FCNTL_SIZE_HINT: { + sqlite3_int64 sz = *(sqlite3_int64*)pArg; + SimulateIOErrorBenign(1); + os2Truncate(id, sz); + SimulateIOErrorBenign(0); + return SQLITE_OK; + } + case SQLITE_FCNTL_SYNC_OMITTED: { return SQLITE_OK; } } - return SQLITE_ERROR; + return SQLITE_NOTFOUND; } /* @@ -20233,6 +23584,7 @@ static int os2FileControl(sqlite3_file *id, int op, void *pArg){ ** same for both. */ static int os2SectorSize(sqlite3_file *id){ + UNUSED_PARAMETER(id); return SQLITE_DEFAULT_SECTOR_SIZE; } @@ -20240,7 +23592,8 @@ static int os2SectorSize(sqlite3_file *id){ ** Return a vector of device characteristics. */ static int os2DeviceCharacteristics(sqlite3_file *id){ - return 0; + UNUSED_PARAMETER(id); + return SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN; } @@ -20327,26 +23680,682 @@ char *convertCpPathToUtf8( const char *in ){ return out; } + +#ifndef SQLITE_OMIT_WAL + +/* +** Use main database file for interprocess locking. If un-defined +** a separate file is created for this purpose. The file will be +** used only to set file locks. There will be no data written to it. +*/ +#define SQLITE_OS2_NO_WAL_LOCK_FILE + +#if 0 +static void _ERR_TRACE( const char *fmt, ... ) { + va_list ap; + va_start(ap, fmt); + vfprintf(stderr, fmt, ap); + fflush(stderr); +} +#define ERR_TRACE(rc, msg) \ + if( (rc) != SQLITE_OK ) _ERR_TRACE msg; +#else +#define ERR_TRACE(rc, msg) +#endif + +/* +** Helper functions to obtain and relinquish the global mutex. The +** global mutex is used to protect os2ShmNodeList. +** +** Function os2ShmMutexHeld() is used to assert() that the global mutex +** is held when required. This function is only used as part of assert() +** statements. e.g. +** +** os2ShmEnterMutex() +** assert( os2ShmMutexHeld() ); +** os2ShmLeaveMutex() +*/ +static void os2ShmEnterMutex(void){ + sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER)); +} +static void os2ShmLeaveMutex(void){ + sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER)); +} +#ifdef SQLITE_DEBUG +static int os2ShmMutexHeld(void) { + return sqlite3_mutex_held(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER)); +} +int GetCurrentProcessId(void) { + PPIB pib; + DosGetInfoBlocks(NULL, &pib); + return (int)pib->pib_ulpid; +} +#endif + +/* +** Object used to represent a the shared memory area for a single log file. +** When multiple threads all reference the same log-summary, each thread has +** its own os2File object, but they all point to a single instance of this +** object. In other words, each log-summary is opened only once per process. +** +** os2ShmMutexHeld() must be true when creating or destroying +** this object or while reading or writing the following fields: +** +** nRef +** pNext +** +** The following fields are read-only after the object is created: +** +** szRegion +** hLockFile +** shmBaseName +** +** Either os2ShmNode.mutex must be held or os2ShmNode.nRef==0 and +** os2ShmMutexHeld() is true when reading or writing any other field +** in this structure. +** +*/ +struct os2ShmNode { + sqlite3_mutex *mutex; /* Mutex to access this object */ + os2ShmNode *pNext; /* Next in list of all os2ShmNode objects */ + + int szRegion; /* Size of shared-memory regions */ + + int nRegion; /* Size of array apRegion */ + void **apRegion; /* Array of pointers to shared-memory regions */ + + int nRef; /* Number of os2ShmLink objects pointing to this */ + os2ShmLink *pFirst; /* First os2ShmLink object pointing to this */ + + HFILE hLockFile; /* File used for inter-process memory locking */ + char shmBaseName[1]; /* Name of the memory object !!! must last !!! */ +}; + + +/* +** Structure used internally by this VFS to record the state of an +** open shared memory connection. +** +** The following fields are initialized when this object is created and +** are read-only thereafter: +** +** os2Shm.pShmNode +** os2Shm.id +** +** All other fields are read/write. The os2Shm.pShmNode->mutex must be held +** while accessing any read/write fields. +*/ +struct os2ShmLink { + os2ShmNode *pShmNode; /* The underlying os2ShmNode object */ + os2ShmLink *pNext; /* Next os2Shm with the same os2ShmNode */ + u32 sharedMask; /* Mask of shared locks held */ + u32 exclMask; /* Mask of exclusive locks held */ +#ifdef SQLITE_DEBUG + u8 id; /* Id of this connection with its os2ShmNode */ +#endif +}; + + +/* +** A global list of all os2ShmNode objects. +** +** The os2ShmMutexHeld() must be true while reading or writing this list. +*/ +static os2ShmNode *os2ShmNodeList = NULL; + +/* +** Constants used for locking +*/ +#ifdef SQLITE_OS2_NO_WAL_LOCK_FILE +#define OS2_SHM_BASE (PENDING_BYTE + 0x10000) /* first lock byte */ +#else +#define OS2_SHM_BASE ((22+SQLITE_SHM_NLOCK)*4) /* first lock byte */ +#endif + +#define OS2_SHM_DMS (OS2_SHM_BASE+SQLITE_SHM_NLOCK) /* deadman switch */ + +/* +** Apply advisory locks for all n bytes beginning at ofst. +*/ +#define _SHM_UNLCK 1 /* no lock */ +#define _SHM_RDLCK 2 /* shared lock, no wait */ +#define _SHM_WRLCK 3 /* exlusive lock, no wait */ +#define _SHM_WRLCK_WAIT 4 /* exclusive lock, wait */ +static int os2ShmSystemLock( + os2ShmNode *pNode, /* Apply locks to this open shared-memory segment */ + int lockType, /* _SHM_UNLCK, _SHM_RDLCK, _SHM_WRLCK or _SHM_WRLCK_WAIT */ + int ofst, /* Offset to first byte to be locked/unlocked */ + int nByte /* Number of bytes to lock or unlock */ +){ + APIRET rc; + FILELOCK area; + ULONG mode, timeout; + + /* Access to the os2ShmNode object is serialized by the caller */ + assert( sqlite3_mutex_held(pNode->mutex) || pNode->nRef==0 ); + + mode = 1; /* shared lock */ + timeout = 0; /* no wait */ + area.lOffset = ofst; + area.lRange = nByte; + + switch( lockType ) { + case _SHM_WRLCK_WAIT: + timeout = (ULONG)-1; /* wait forever */ + case _SHM_WRLCK: + mode = 0; /* exclusive lock */ + case _SHM_RDLCK: + rc = DosSetFileLocks(pNode->hLockFile, + NULL, &area, timeout, mode); + break; + /* case _SHM_UNLCK: */ + default: + rc = DosSetFileLocks(pNode->hLockFile, + &area, NULL, 0, 0); + break; + } + + OSTRACE(("SHM-LOCK %d %s %s 0x%08lx\n", + pNode->hLockFile, + rc==SQLITE_OK ? "ok" : "failed", + lockType==_SHM_UNLCK ? "Unlock" : "Lock", + rc)); + + ERR_TRACE(rc, ("os2ShmSystemLock: %d %s\n", rc, pNode->shmBaseName)) + + return ( rc == 0 ) ? SQLITE_OK : SQLITE_BUSY; +} + +/* +** Find an os2ShmNode in global list or allocate a new one, if not found. +** +** This is not a VFS shared-memory method; it is a utility function called +** by VFS shared-memory methods. +*/ +static int os2OpenSharedMemory( os2File *fd, int szRegion ) { + os2ShmLink *pLink; + os2ShmNode *pNode; + int cbShmName, rc = SQLITE_OK; + char shmName[CCHMAXPATH + 30]; +#ifndef SQLITE_OS2_NO_WAL_LOCK_FILE + ULONG action; +#endif + + /* We need some additional space at the end to append the region number */ + cbShmName = sprintf(shmName, "\\SHAREMEM\\%s", fd->zFullPathCp ); + if( cbShmName >= CCHMAXPATH-8 ) + return SQLITE_IOERR_SHMOPEN; + + /* Replace colon in file name to form a valid shared memory name */ + shmName[10+1] = '!'; + + /* Allocate link object (we free it later in case of failure) */ + pLink = sqlite3_malloc( sizeof(*pLink) ); + if( !pLink ) + return SQLITE_NOMEM; + + /* Access node list */ + os2ShmEnterMutex(); + + /* Find node by it's shared memory base name */ + for( pNode = os2ShmNodeList; + pNode && stricmp(shmName, pNode->shmBaseName) != 0; + pNode = pNode->pNext ) ; + + /* Not found: allocate a new node */ + if( !pNode ) { + pNode = sqlite3_malloc( sizeof(*pNode) + cbShmName ); + if( pNode ) { + memset(pNode, 0, sizeof(*pNode) ); + pNode->szRegion = szRegion; + pNode->hLockFile = (HFILE)-1; + strcpy(pNode->shmBaseName, shmName); + +#ifdef SQLITE_OS2_NO_WAL_LOCK_FILE + if( DosDupHandle(fd->h, &pNode->hLockFile) != 0 ) { +#else + sprintf(shmName, "%s-lck", fd->zFullPathCp); + if( DosOpen((PSZ)shmName, &pNode->hLockFile, &action, 0, FILE_NORMAL, + OPEN_ACTION_OPEN_IF_EXISTS | OPEN_ACTION_CREATE_IF_NEW, + OPEN_ACCESS_READWRITE | OPEN_SHARE_DENYNONE | + OPEN_FLAGS_NOINHERIT | OPEN_FLAGS_FAIL_ON_ERROR, + NULL) != 0 ) { +#endif + sqlite3_free(pNode); + rc = SQLITE_IOERR; + } else { + pNode->mutex = sqlite3_mutex_alloc(SQLITE_MUTEX_FAST); + if( !pNode->mutex ) { + sqlite3_free(pNode); + rc = SQLITE_NOMEM; + } + } + } else { + rc = SQLITE_NOMEM; + } + + if( rc == SQLITE_OK ) { + pNode->pNext = os2ShmNodeList; + os2ShmNodeList = pNode; + } else { + pNode = NULL; + } + } else if( pNode->szRegion != szRegion ) { + rc = SQLITE_IOERR_SHMSIZE; + pNode = NULL; + } + + if( pNode ) { + sqlite3_mutex_enter(pNode->mutex); + + memset(pLink, 0, sizeof(*pLink)); + + pLink->pShmNode = pNode; + pLink->pNext = pNode->pFirst; + pNode->pFirst = pLink; + pNode->nRef++; + + fd->pShmLink = pLink; + + sqlite3_mutex_leave(pNode->mutex); + + } else { + /* Error occured. Free our link object. */ + sqlite3_free(pLink); + } + + os2ShmLeaveMutex(); + + ERR_TRACE(rc, ("os2OpenSharedMemory: %d %s\n", rc, fd->zFullPathCp)) + + return rc; +} + +/* +** Purge the os2ShmNodeList list of all entries with nRef==0. +** +** This is not a VFS shared-memory method; it is a utility function called +** by VFS shared-memory methods. +*/ +static void os2PurgeShmNodes( int deleteFlag ) { + os2ShmNode *pNode; + os2ShmNode **ppNode; + + os2ShmEnterMutex(); + + ppNode = &os2ShmNodeList; + + while( *ppNode ) { + pNode = *ppNode; + + if( pNode->nRef == 0 ) { + *ppNode = pNode->pNext; + + if( pNode->apRegion ) { + /* Prevent other processes from resizing the shared memory */ + os2ShmSystemLock(pNode, _SHM_WRLCK_WAIT, OS2_SHM_DMS, 1); + + while( pNode->nRegion-- ) { +#ifdef SQLITE_DEBUG + int rc = +#endif + DosFreeMem(pNode->apRegion[pNode->nRegion]); + + OSTRACE(("SHM-PURGE pid-%d unmap region=%d %s\n", + (int)GetCurrentProcessId(), pNode->nRegion, + rc == 0 ? "ok" : "failed")); + } + + /* Allow other processes to resize the shared memory */ + os2ShmSystemLock(pNode, _SHM_UNLCK, OS2_SHM_DMS, 1); + + sqlite3_free(pNode->apRegion); + } + + DosClose(pNode->hLockFile); + +#ifndef SQLITE_OS2_NO_WAL_LOCK_FILE + if( deleteFlag ) { + char fileName[CCHMAXPATH]; + /* Skip "\\SHAREMEM\\" */ + sprintf(fileName, "%s-lck", pNode->shmBaseName + 10); + /* restore colon */ + fileName[1] = ':'; + + DosForceDelete(fileName); + } +#endif + + sqlite3_mutex_free(pNode->mutex); + + sqlite3_free(pNode); + + } else { + ppNode = &pNode->pNext; + } + } + + os2ShmLeaveMutex(); +} + +/* +** This function is called to obtain a pointer to region iRegion of the +** shared-memory associated with the database file id. Shared-memory regions +** are numbered starting from zero. Each shared-memory region is szRegion +** bytes in size. +** +** If an error occurs, an error code is returned and *pp is set to NULL. +** +** Otherwise, if the bExtend parameter is 0 and the requested shared-memory +** region has not been allocated (by any client, including one running in a +** separate process), then *pp is set to NULL and SQLITE_OK returned. If +** bExtend is non-zero and the requested shared-memory region has not yet +** been allocated, it is allocated by this function. +** +** If the shared-memory region has already been allocated or is allocated by +** this call as described above, then it is mapped into this processes +** address space (if it is not already), *pp is set to point to the mapped +** memory and SQLITE_OK returned. +*/ +static int os2ShmMap( + sqlite3_file *id, /* Handle open on database file */ + int iRegion, /* Region to retrieve */ + int szRegion, /* Size of regions */ + int bExtend, /* True to extend block if necessary */ + void volatile **pp /* OUT: Mapped memory */ +){ + PVOID pvTemp; + void **apRegion; + os2ShmNode *pNode; + int n, rc = SQLITE_OK; + char shmName[CCHMAXPATH]; + os2File *pFile = (os2File*)id; + + *pp = NULL; + + if( !pFile->pShmLink ) + rc = os2OpenSharedMemory( pFile, szRegion ); + + if( rc == SQLITE_OK ) { + pNode = pFile->pShmLink->pShmNode ; + + sqlite3_mutex_enter(pNode->mutex); + + assert( szRegion==pNode->szRegion ); + + /* Unmapped region ? */ + if( iRegion >= pNode->nRegion ) { + /* Prevent other processes from resizing the shared memory */ + os2ShmSystemLock(pNode, _SHM_WRLCK_WAIT, OS2_SHM_DMS, 1); + + apRegion = sqlite3_realloc( + pNode->apRegion, (iRegion + 1) * sizeof(apRegion[0])); + + if( apRegion ) { + pNode->apRegion = apRegion; + + while( pNode->nRegion <= iRegion ) { + sprintf(shmName, "%s-%u", + pNode->shmBaseName, pNode->nRegion); + + if( DosGetNamedSharedMem(&pvTemp, (PSZ)shmName, + PAG_READ | PAG_WRITE) != NO_ERROR ) { + if( !bExtend ) + break; + + if( DosAllocSharedMem(&pvTemp, (PSZ)shmName, szRegion, + PAG_READ | PAG_WRITE | PAG_COMMIT | OBJ_ANY) != NO_ERROR && + DosAllocSharedMem(&pvTemp, (PSZ)shmName, szRegion, + PAG_READ | PAG_WRITE | PAG_COMMIT) != NO_ERROR ) { + rc = SQLITE_NOMEM; + break; + } + } + + apRegion[pNode->nRegion++] = pvTemp; + } + + /* zero out remaining entries */ + for( n = pNode->nRegion; n <= iRegion; n++ ) + pNode->apRegion[n] = NULL; + + /* Return this region (maybe zero) */ + *pp = pNode->apRegion[iRegion]; + } else { + rc = SQLITE_NOMEM; + } + + /* Allow other processes to resize the shared memory */ + os2ShmSystemLock(pNode, _SHM_UNLCK, OS2_SHM_DMS, 1); + + } else { + /* Region has been mapped previously */ + *pp = pNode->apRegion[iRegion]; + } + + sqlite3_mutex_leave(pNode->mutex); + } + + ERR_TRACE(rc, ("os2ShmMap: %s iRgn = %d, szRgn = %d, bExt = %d : %d\n", + pFile->zFullPathCp, iRegion, szRegion, bExtend, rc)) + + return rc; +} + +/* +** Close a connection to shared-memory. Delete the underlying +** storage if deleteFlag is true. +** +** If there is no shared memory associated with the connection then this +** routine is a harmless no-op. +*/ +static int os2ShmUnmap( + sqlite3_file *id, /* The underlying database file */ + int deleteFlag /* Delete shared-memory if true */ +){ + os2File *pFile = (os2File*)id; + os2ShmLink *pLink = pFile->pShmLink; + + if( pLink ) { + int nRef = -1; + os2ShmLink **ppLink; + os2ShmNode *pNode = pLink->pShmNode; + + sqlite3_mutex_enter(pNode->mutex); + + for( ppLink = &pNode->pFirst; + *ppLink && *ppLink != pLink; + ppLink = &(*ppLink)->pNext ) ; + + assert(*ppLink); + + if( *ppLink ) { + *ppLink = pLink->pNext; + nRef = --pNode->nRef; + } else { + ERR_TRACE(1, ("os2ShmUnmap: link not found ! %s\n", + pNode->shmBaseName)) + } + + pFile->pShmLink = NULL; + sqlite3_free(pLink); + + sqlite3_mutex_leave(pNode->mutex); + + if( nRef == 0 ) + os2PurgeShmNodes( deleteFlag ); + } + + return SQLITE_OK; +} + +/* +** Change the lock state for a shared-memory segment. +** +** Note that the relationship between SHAREd and EXCLUSIVE locks is a little +** different here than in posix. In xShmLock(), one can go from unlocked +** to shared and back or from unlocked to exclusive and back. But one may +** not go from shared to exclusive or from exclusive to shared. +*/ +static int os2ShmLock( + sqlite3_file *id, /* Database file holding the shared memory */ + int ofst, /* First lock to acquire or release */ + int n, /* Number of locks to acquire or release */ + int flags /* What to do with the lock */ +){ + u32 mask; /* Mask of locks to take or release */ + int rc = SQLITE_OK; /* Result code */ + os2File *pFile = (os2File*)id; + os2ShmLink *p = pFile->pShmLink; /* The shared memory being locked */ + os2ShmLink *pX; /* For looping over all siblings */ + os2ShmNode *pShmNode = p->pShmNode; /* Our node */ + + assert( ofst>=0 && ofst+n<=SQLITE_SHM_NLOCK ); + assert( n>=1 ); + assert( flags==(SQLITE_SHM_LOCK | SQLITE_SHM_SHARED) + || flags==(SQLITE_SHM_LOCK | SQLITE_SHM_EXCLUSIVE) + || flags==(SQLITE_SHM_UNLOCK | SQLITE_SHM_SHARED) + || flags==(SQLITE_SHM_UNLOCK | SQLITE_SHM_EXCLUSIVE) ); + assert( n==1 || (flags & SQLITE_SHM_EXCLUSIVE)!=0 ); + + mask = (u32)((1U<<(ofst+n)) - (1U<1 || mask==(1<mutex); + + if( flags & SQLITE_SHM_UNLOCK ){ + u32 allMask = 0; /* Mask of locks held by siblings */ + + /* See if any siblings hold this same lock */ + for(pX=pShmNode->pFirst; pX; pX=pX->pNext){ + if( pX==p ) continue; + assert( (pX->exclMask & (p->exclMask|p->sharedMask))==0 ); + allMask |= pX->sharedMask; + } + + /* Unlock the system-level locks */ + if( (mask & allMask)==0 ){ + rc = os2ShmSystemLock(pShmNode, _SHM_UNLCK, ofst+OS2_SHM_BASE, n); + }else{ + rc = SQLITE_OK; + } + + /* Undo the local locks */ + if( rc==SQLITE_OK ){ + p->exclMask &= ~mask; + p->sharedMask &= ~mask; + } + }else if( flags & SQLITE_SHM_SHARED ){ + u32 allShared = 0; /* Union of locks held by connections other than "p" */ + + /* Find out which shared locks are already held by sibling connections. + ** If any sibling already holds an exclusive lock, go ahead and return + ** SQLITE_BUSY. + */ + for(pX=pShmNode->pFirst; pX; pX=pX->pNext){ + if( (pX->exclMask & mask)!=0 ){ + rc = SQLITE_BUSY; + break; + } + allShared |= pX->sharedMask; + } + + /* Get shared locks at the system level, if necessary */ + if( rc==SQLITE_OK ){ + if( (allShared & mask)==0 ){ + rc = os2ShmSystemLock(pShmNode, _SHM_RDLCK, ofst+OS2_SHM_BASE, n); + }else{ + rc = SQLITE_OK; + } + } + + /* Get the local shared locks */ + if( rc==SQLITE_OK ){ + p->sharedMask |= mask; + } + }else{ + /* Make sure no sibling connections hold locks that will block this + ** lock. If any do, return SQLITE_BUSY right away. + */ + for(pX=pShmNode->pFirst; pX; pX=pX->pNext){ + if( (pX->exclMask & mask)!=0 || (pX->sharedMask & mask)!=0 ){ + rc = SQLITE_BUSY; + break; + } + } + + /* Get the exclusive locks at the system level. Then if successful + ** also mark the local connection as being locked. + */ + if( rc==SQLITE_OK ){ + rc = os2ShmSystemLock(pShmNode, _SHM_WRLCK, ofst+OS2_SHM_BASE, n); + if( rc==SQLITE_OK ){ + assert( (p->sharedMask & mask)==0 ); + p->exclMask |= mask; + } + } + } + + sqlite3_mutex_leave(pShmNode->mutex); + + OSTRACE(("SHM-LOCK shmid-%d, pid-%d got %03x,%03x %s\n", + p->id, (int)GetCurrentProcessId(), p->sharedMask, p->exclMask, + rc ? "failed" : "ok")); + + ERR_TRACE(rc, ("os2ShmLock: ofst = %d, n = %d, flags = 0x%x -> %d \n", + ofst, n, flags, rc)) + + return rc; +} + +/* +** Implement a memory barrier or memory fence on shared memory. +** +** All loads and stores begun before the barrier must complete before +** any load or store begun after the barrier. +*/ +static void os2ShmBarrier( + sqlite3_file *id /* Database file holding the shared memory */ +){ + UNUSED_PARAMETER(id); + os2ShmEnterMutex(); + os2ShmLeaveMutex(); +} + +#else +# define os2ShmMap 0 +# define os2ShmLock 0 +# define os2ShmBarrier 0 +# define os2ShmUnmap 0 +#endif /* #ifndef SQLITE_OMIT_WAL */ + + /* ** This vector defines all the methods that can operate on an ** sqlite3_file for os2. */ static const sqlite3_io_methods os2IoMethod = { - 1, /* iVersion */ - os2Close, - os2Read, - os2Write, - os2Truncate, - os2Sync, - os2FileSize, - os2Lock, - os2Unlock, - os2CheckReservedLock, - os2FileControl, - os2SectorSize, - os2DeviceCharacteristics + 2, /* iVersion */ + os2Close, /* xClose */ + os2Read, /* xRead */ + os2Write, /* xWrite */ + os2Truncate, /* xTruncate */ + os2Sync, /* xSync */ + os2FileSize, /* xFileSize */ + os2Lock, /* xLock */ + os2Unlock, /* xUnlock */ + os2CheckReservedLock, /* xCheckReservedLock */ + os2FileControl, /* xFileControl */ + os2SectorSize, /* xSectorSize */ + os2DeviceCharacteristics, /* xDeviceCharacteristics */ + os2ShmMap, /* xShmMap */ + os2ShmLock, /* xShmLock */ + os2ShmBarrier, /* xShmBarrier */ + os2ShmUnmap /* xShmUnmap */ }; + /*************************************************************************** ** Here ends the I/O methods that form the sqlite3_io_methods object. ** @@ -20358,51 +24367,58 @@ static const sqlite3_io_methods os2IoMethod = { ** hold at pVfs->mxPathname characters. */ static int getTempname(int nBuf, char *zBuf ){ - static const unsigned char zChars[] = + static const char zChars[] = "abcdefghijklmnopqrstuvwxyz" "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "0123456789"; int i, j; - char zTempPathBuf[3]; - PSZ zTempPath = (PSZ)&zTempPathBuf; - if( sqlite3_temp_directory ){ - zTempPath = sqlite3_temp_directory; - }else{ - if( DosScanEnv( (PSZ)"TEMP", &zTempPath ) ){ - if( DosScanEnv( (PSZ)"TMP", &zTempPath ) ){ - if( DosScanEnv( (PSZ)"TMPDIR", &zTempPath ) ){ - ULONG ulDriveNum = 0, ulDriveMap = 0; - DosQueryCurrentDisk( &ulDriveNum, &ulDriveMap ); - sprintf( (char*)zTempPath, "%c:", (char)( 'A' + ulDriveNum - 1 ) ); - } - } - } + PSZ zTempPathCp; + char zTempPath[CCHMAXPATH]; + ULONG ulDriveNum, ulDriveMap; + + /* It's odd to simulate an io-error here, but really this is just + ** using the io-error infrastructure to test that SQLite handles this + ** function failing. + */ + SimulateIOError( return SQLITE_IOERR ); + + if( sqlite3_temp_directory ) { + sqlite3_snprintf(CCHMAXPATH-30, zTempPath, "%s", sqlite3_temp_directory); + } else if( DosScanEnv( (PSZ)"TEMP", &zTempPathCp ) == NO_ERROR || + DosScanEnv( (PSZ)"TMP", &zTempPathCp ) == NO_ERROR || + DosScanEnv( (PSZ)"TMPDIR", &zTempPathCp ) == NO_ERROR ) { + char *zTempPathUTF = convertCpPathToUtf8( (char *)zTempPathCp ); + sqlite3_snprintf(CCHMAXPATH-30, zTempPath, "%s", zTempPathUTF); + free( zTempPathUTF ); + } else if( DosQueryCurrentDisk( &ulDriveNum, &ulDriveMap ) == NO_ERROR ) { + zTempPath[0] = (char)('A' + ulDriveNum - 1); + zTempPath[1] = ':'; + zTempPath[2] = '\0'; + } else { + zTempPath[0] = '\0'; } + /* Strip off a trailing slashes or backslashes, otherwise we would get * * multiple (back)slashes which causes DosOpen() to fail. * * Trailing spaces are not allowed, either. */ j = sqlite3Strlen30(zTempPath); - while( j > 0 && ( zTempPath[j-1] == '\\' || zTempPath[j-1] == '/' - || zTempPath[j-1] == ' ' ) ){ + while( j > 0 && ( zTempPath[j-1] == '\\' || zTempPath[j-1] == '/' || + zTempPath[j-1] == ' ' ) ){ j--; } zTempPath[j] = '\0'; - if( !sqlite3_temp_directory ){ - char *zTempPathUTF = convertCpPathToUtf8( zTempPath ); - sqlite3_snprintf( nBuf-30, zBuf, - "%s\\"SQLITE_TEMP_FILE_PREFIX, zTempPathUTF ); - free( zTempPathUTF ); - }else{ - sqlite3_snprintf( nBuf-30, zBuf, - "%s\\"SQLITE_TEMP_FILE_PREFIX, zTempPath ); - } - j = sqlite3Strlen30( zBuf ); + + /* We use 20 bytes to randomize the name */ + sqlite3_snprintf(nBuf-22, zBuf, + "%s\\"SQLITE_TEMP_FILE_PREFIX, zTempPath); + j = sqlite3Strlen30(zBuf); sqlite3_randomness( 20, &zBuf[j] ); for( i = 0; i < 20; i++, j++ ){ - zBuf[j] = (char)zChars[ ((unsigned char)zBuf[j])%(sizeof(zChars)-1) ]; + zBuf[j] = zChars[ ((unsigned char)zBuf[j])%(sizeof(zChars)-1) ]; } zBuf[j] = 0; - OSTRACE2( "TEMP FILENAME: %s\n", zBuf ); + + OSTRACE(( "TEMP FILENAME: %s\n", zBuf )); return SQLITE_OK; } @@ -20421,8 +24437,8 @@ static int os2FullPathname( char *zRelativeCp = convertUtf8PathToCp( zRelative ); char zFullCp[CCHMAXPATH] = "\0"; char *zFullUTF; - APIRET rc = DosQueryPathInfo( zRelativeCp, FIL_QUERYFULLNAME, zFullCp, - CCHMAXPATH ); + APIRET rc = DosQueryPathInfo( (PSZ)zRelativeCp, FIL_QUERYFULLNAME, + zFullCp, CCHMAXPATH ); free( zRelativeCp ); zFullUTF = convertCpPathToUtf8( zFullCp ); sqlite3_snprintf( nFull, zFull, zFullUTF ); @@ -20436,99 +24452,127 @@ static int os2FullPathname( */ static int os2Open( sqlite3_vfs *pVfs, /* Not used */ - const char *zName, /* Name of the file */ + const char *zName, /* Name of the file (UTF-8) */ sqlite3_file *id, /* Write the SQLite file handle here */ int flags, /* Open mode flags */ int *pOutFlags /* Status return flags */ ){ HFILE h; - ULONG ulFileAttribute = FILE_NORMAL; ULONG ulOpenFlags = 0; ULONG ulOpenMode = 0; + ULONG ulAction = 0; + ULONG rc; os2File *pFile = (os2File*)id; - APIRET rc = NO_ERROR; - ULONG ulAction; + const char *zUtf8Name = zName; char *zNameCp; - char zTmpname[CCHMAXPATH+1]; /* Buffer to hold name of temp file */ + char zTmpname[CCHMAXPATH]; + + int isExclusive = (flags & SQLITE_OPEN_EXCLUSIVE); + int isCreate = (flags & SQLITE_OPEN_CREATE); + int isReadWrite = (flags & SQLITE_OPEN_READWRITE); +#ifndef NDEBUG + int isDelete = (flags & SQLITE_OPEN_DELETEONCLOSE); + int isReadonly = (flags & SQLITE_OPEN_READONLY); + int eType = (flags & 0xFFFFFF00); + int isOpenJournal = (isCreate && ( + eType==SQLITE_OPEN_MASTER_JOURNAL + || eType==SQLITE_OPEN_MAIN_JOURNAL + || eType==SQLITE_OPEN_WAL + )); +#endif + + UNUSED_PARAMETER(pVfs); + assert( id!=0 ); + + /* Check the following statements are true: + ** + ** (a) Exactly one of the READWRITE and READONLY flags must be set, and + ** (b) if CREATE is set, then READWRITE must also be set, and + ** (c) if EXCLUSIVE is set, then CREATE must also be set. + ** (d) if DELETEONCLOSE is set, then CREATE must also be set. + */ + assert((isReadonly==0 || isReadWrite==0) && (isReadWrite || isReadonly)); + assert(isCreate==0 || isReadWrite); + assert(isExclusive==0 || isCreate); + assert(isDelete==0 || isCreate); + + /* The main DB, main journal, WAL file and master journal are never + ** automatically deleted. Nor are they ever temporary files. */ + assert( (!isDelete && zName) || eType!=SQLITE_OPEN_MAIN_DB ); + assert( (!isDelete && zName) || eType!=SQLITE_OPEN_MAIN_JOURNAL ); + assert( (!isDelete && zName) || eType!=SQLITE_OPEN_MASTER_JOURNAL ); + assert( (!isDelete && zName) || eType!=SQLITE_OPEN_WAL ); + + /* Assert that the upper layer has set one of the "file-type" flags. */ + assert( eType==SQLITE_OPEN_MAIN_DB || eType==SQLITE_OPEN_TEMP_DB + || eType==SQLITE_OPEN_MAIN_JOURNAL || eType==SQLITE_OPEN_TEMP_JOURNAL + || eType==SQLITE_OPEN_SUBJOURNAL || eType==SQLITE_OPEN_MASTER_JOURNAL + || eType==SQLITE_OPEN_TRANSIENT_DB || eType==SQLITE_OPEN_WAL + ); + + memset( pFile, 0, sizeof(*pFile) ); + pFile->h = (HFILE)-1; /* If the second argument to this function is NULL, generate a ** temporary file name to use */ - if( !zName ){ - int rc = getTempname(CCHMAXPATH+1, zTmpname); + if( !zUtf8Name ){ + assert(isDelete && !isOpenJournal); + rc = getTempname(CCHMAXPATH, zTmpname); if( rc!=SQLITE_OK ){ return rc; } - zName = zTmpname; + zUtf8Name = zTmpname; } - - memset( pFile, 0, sizeof(*pFile) ); - - OSTRACE2( "OPEN want %d\n", flags ); - - if( flags & SQLITE_OPEN_READWRITE ){ + if( isReadWrite ){ ulOpenMode |= OPEN_ACCESS_READWRITE; - OSTRACE1( "OPEN read/write\n" ); }else{ ulOpenMode |= OPEN_ACCESS_READONLY; - OSTRACE1( "OPEN read only\n" ); - } - - if( flags & SQLITE_OPEN_CREATE ){ - ulOpenFlags |= OPEN_ACTION_OPEN_IF_EXISTS | OPEN_ACTION_CREATE_IF_NEW; - OSTRACE1( "OPEN open new/create\n" ); - }else{ - ulOpenFlags |= OPEN_ACTION_OPEN_IF_EXISTS | OPEN_ACTION_FAIL_IF_NEW; - OSTRACE1( "OPEN open existing\n" ); } - if( flags & SQLITE_OPEN_MAIN_DB ){ - ulOpenMode |= OPEN_SHARE_DENYNONE; - OSTRACE1( "OPEN share read/write\n" ); - }else{ - ulOpenMode |= OPEN_SHARE_DENYWRITE; - OSTRACE1( "OPEN share read only\n" ); - } + /* Open in random access mode for possibly better speed. Allow full + ** sharing because file locks will provide exclusive access when needed. + ** The handle should not be inherited by child processes and we don't + ** want popups from the critical error handler. + */ + ulOpenMode |= OPEN_FLAGS_RANDOM | OPEN_SHARE_DENYNONE | + OPEN_FLAGS_NOINHERIT | OPEN_FLAGS_FAIL_ON_ERROR; - if( flags & SQLITE_OPEN_DELETEONCLOSE ){ - char pathUtf8[CCHMAXPATH]; -#ifdef NDEBUG /* when debugging we want to make sure it is deleted */ - ulFileAttribute = FILE_HIDDEN; -#endif - os2FullPathname( pVfs, zName, CCHMAXPATH, pathUtf8 ); - pFile->pathToDel = convertUtf8PathToCp( pathUtf8 ); - OSTRACE1( "OPEN hidden/delete on close file attributes\n" ); + /* SQLITE_OPEN_EXCLUSIVE is used to make sure that a new file is + ** created. SQLite doesn't use it to indicate "exclusive access" + ** as it is usually understood. + */ + if( isExclusive ){ + /* Creates a new file, only if it does not already exist. */ + /* If the file exists, it fails. */ + ulOpenFlags |= OPEN_ACTION_CREATE_IF_NEW | OPEN_ACTION_FAIL_IF_EXISTS; + }else if( isCreate ){ + /* Open existing file, or create if it doesn't exist */ + ulOpenFlags |= OPEN_ACTION_CREATE_IF_NEW | OPEN_ACTION_OPEN_IF_EXISTS; }else{ - pFile->pathToDel = NULL; - OSTRACE1( "OPEN normal file attribute\n" ); + /* Opens a file, only if it exists. */ + ulOpenFlags |= OPEN_ACTION_FAIL_IF_NEW | OPEN_ACTION_OPEN_IF_EXISTS; } - /* always open in random access mode for possibly better speed */ - ulOpenMode |= OPEN_FLAGS_RANDOM; - ulOpenMode |= OPEN_FLAGS_FAIL_ON_ERROR; - ulOpenMode |= OPEN_FLAGS_NOINHERIT; - - zNameCp = convertUtf8PathToCp( zName ); + zNameCp = convertUtf8PathToCp( zUtf8Name ); rc = DosOpen( (PSZ)zNameCp, &h, &ulAction, 0L, - ulFileAttribute, + FILE_NORMAL, ulOpenFlags, ulOpenMode, (PEAOP2)NULL ); free( zNameCp ); + if( rc != NO_ERROR ){ - OSTRACE7( "OPEN Invalid handle rc=%d: zName=%s, ulAction=%#lx, ulAttr=%#lx, ulFlags=%#lx, ulMode=%#lx\n", - rc, zName, ulAction, ulFileAttribute, ulOpenFlags, ulOpenMode ); - if( pFile->pathToDel ) - free( pFile->pathToDel ); - pFile->pathToDel = NULL; - if( flags & SQLITE_OPEN_READWRITE ){ - OSTRACE2( "OPEN %d Invalid handle\n", ((flags | SQLITE_OPEN_READONLY) & ~SQLITE_OPEN_READWRITE) ); + OSTRACE(( "OPEN Invalid handle rc=%d: zName=%s, ulAction=%#lx, ulFlags=%#lx, ulMode=%#lx\n", + rc, zUtf8Name, ulAction, ulOpenFlags, ulOpenMode )); + + if( isReadWrite ){ return os2Open( pVfs, zName, id, - ((flags | SQLITE_OPEN_READONLY) & ~SQLITE_OPEN_READWRITE), + ((flags|SQLITE_OPEN_READONLY)&~(SQLITE_OPEN_CREATE|SQLITE_OPEN_READWRITE)), pOutFlags ); }else{ return SQLITE_CANTOPEN; @@ -20536,13 +24580,17 @@ static int os2Open( } if( pOutFlags ){ - *pOutFlags = flags & SQLITE_OPEN_READWRITE ? SQLITE_OPEN_READWRITE : SQLITE_OPEN_READONLY; + *pOutFlags = isReadWrite ? SQLITE_OPEN_READWRITE : SQLITE_OPEN_READONLY; } + os2FullPathname( pVfs, zUtf8Name, sizeof( zTmpname ), zTmpname ); + pFile->zFullPathCp = convertUtf8PathToCp( zTmpname ); pFile->pMethod = &os2IoMethod; + pFile->flags = flags; pFile->h = h; + OpenCounter(+1); - OSTRACE3( "OPEN %d pOutFlags=%d\n", pFile->h, pOutFlags ); + OSTRACE(( "OPEN %d pOutFlags=%d\n", pFile->h, pOutFlags )); return SQLITE_OK; } @@ -20554,13 +24602,16 @@ static int os2Delete( const char *zFilename, /* Name of file to delete */ int syncDir /* Not used on os2 */ ){ - APIRET rc = NO_ERROR; - char *zFilenameCp = convertUtf8PathToCp( zFilename ); + APIRET rc; + char *zFilenameCp; SimulateIOError( return SQLITE_IOERR_DELETE ); + zFilenameCp = convertUtf8PathToCp( zFilename ); rc = DosDelete( (PSZ)zFilenameCp ); free( zFilenameCp ); - OSTRACE2( "DELETE \"%s\"\n", zFilename ); - return rc == NO_ERROR ? SQLITE_OK : SQLITE_IOERR_DELETE; + OSTRACE(( "DELETE \"%s\"\n", zFilename )); + return (rc == NO_ERROR || + rc == ERROR_FILE_NOT_FOUND || + rc == ERROR_PATH_NOT_FOUND ) ? SQLITE_OK : SQLITE_IOERR_DELETE; } /* @@ -20572,30 +24623,42 @@ static int os2Access( int flags, /* Type of test to make on this file */ int *pOut /* Write results here */ ){ + APIRET rc; FILESTATUS3 fsts3ConfigInfo; - APIRET rc = NO_ERROR; - char *zFilenameCp = convertUtf8PathToCp( zFilename ); + char *zFilenameCp; - memset( &fsts3ConfigInfo, 0, sizeof(fsts3ConfigInfo) ); + UNUSED_PARAMETER(pVfs); + SimulateIOError( return SQLITE_IOERR_ACCESS; ); + + zFilenameCp = convertUtf8PathToCp( zFilename ); rc = DosQueryPathInfo( (PSZ)zFilenameCp, FIL_STANDARD, &fsts3ConfigInfo, sizeof(FILESTATUS3) ); free( zFilenameCp ); - OSTRACE4( "ACCESS fsts3ConfigInfo.attrFile=%d flags=%d rc=%d\n", - fsts3ConfigInfo.attrFile, flags, rc ); + OSTRACE(( "ACCESS fsts3ConfigInfo.attrFile=%d flags=%d rc=%d\n", + fsts3ConfigInfo.attrFile, flags, rc )); + switch( flags ){ - case SQLITE_ACCESS_READ: case SQLITE_ACCESS_EXISTS: - rc = (rc == NO_ERROR); - OSTRACE3( "ACCESS %s access of read and exists rc=%d\n", zFilename, rc ); + /* For an SQLITE_ACCESS_EXISTS query, treat a zero-length file + ** as if it does not exist. + */ + if( fsts3ConfigInfo.cbFile == 0 ) + rc = ERROR_FILE_NOT_FOUND; + break; + case SQLITE_ACCESS_READ: break; case SQLITE_ACCESS_READWRITE: - rc = (rc == NO_ERROR) && ( (fsts3ConfigInfo.attrFile & FILE_READONLY) == 0 ); - OSTRACE3( "ACCESS %s access of read/write rc=%d\n", zFilename, rc ); + if( fsts3ConfigInfo.attrFile & FILE_READONLY ) + rc = ERROR_ACCESS_DENIED; break; default: + rc = ERROR_FILE_NOT_FOUND; assert( !"Invalid flags argument" ); } - *pOut = rc; + + *pOut = (rc == NO_ERROR); + OSTRACE(( "ACCESS %s flags %d: rc=%d\n", zFilename, flags, *pOut )); + return SQLITE_OK; } @@ -20610,11 +24673,10 @@ static int os2Access( ** within the shared library, and closing the shared library. */ static void *os2DlOpen(sqlite3_vfs *pVfs, const char *zFilename){ - UCHAR loadErr[256]; HMODULE hmod; APIRET rc; char *zFilenameCp = convertUtf8PathToCp(zFilename); - rc = DosLoadModule((PSZ)loadErr, sizeof(loadErr), zFilenameCp, &hmod); + rc = DosLoadModule(NULL, 0, (PSZ)zFilenameCp, &hmod); free(zFilenameCp); return rc != NO_ERROR ? 0 : (void*)hmod; } @@ -20625,19 +24687,19 @@ static void *os2DlOpen(sqlite3_vfs *pVfs, const char *zFilename){ static void os2DlError(sqlite3_vfs *pVfs, int nBuf, char *zBufOut){ /* no-op */ } -static void *os2DlSym(sqlite3_vfs *pVfs, void *pHandle, const char *zSymbol){ +static void (*os2DlSym(sqlite3_vfs *pVfs, void *pHandle, const char *zSymbol))(void){ PFN pfn; APIRET rc; - rc = DosQueryProcAddr((HMODULE)pHandle, 0L, zSymbol, &pfn); + rc = DosQueryProcAddr((HMODULE)pHandle, 0L, (PSZ)zSymbol, &pfn); if( rc != NO_ERROR ){ /* if the symbol itself was not found, search again for the same * symbol with an extra underscore, that might be needed depending * on the calling convention */ char _zSymbol[256] = "_"; - strncat(_zSymbol, zSymbol, 255); - rc = DosQueryProcAddr((HMODULE)pHandle, 0L, _zSymbol, &pfn); + strncat(_zSymbol, zSymbol, 254); + rc = DosQueryProcAddr((HMODULE)pHandle, 0L, (PSZ)_zSymbol, &pfn); } - return rc != NO_ERROR ? 0 : (void*)pfn; + return rc != NO_ERROR ? 0 : (void(*)(void))pfn; } static void os2DlClose(sqlite3_vfs *pVfs, void *pHandle){ DosFreeModule((HMODULE)pHandle); @@ -20659,54 +24721,39 @@ static int os2Randomness(sqlite3_vfs *pVfs, int nBuf, char *zBuf ){ n = nBuf; memset(zBuf, 0, nBuf); #else - int sizeofULong = sizeof(ULONG); - if( (int)sizeof(DATETIME) <= nBuf - n ){ - DATETIME x; - DosGetDateTime(&x); - memcpy(&zBuf[n], &x, sizeof(x)); - n += sizeof(x); - } - - if( sizeofULong <= nBuf - n ){ - PPIB ppib; - DosGetInfoBlocks(NULL, &ppib); - memcpy(&zBuf[n], &ppib->pib_ulpid, sizeofULong); - n += sizeofULong; - } - - if( sizeofULong <= nBuf - n ){ - PTIB ptib; - DosGetInfoBlocks(&ptib, NULL); - memcpy(&zBuf[n], &ptib->tib_ptib2->tib2_ultid, sizeofULong); - n += sizeofULong; - } - - /* if we still haven't filled the buffer yet the following will */ - /* grab everything once instead of making several calls for a single item */ - if( sizeofULong <= nBuf - n ){ - ULONG ulSysInfo[QSV_MAX]; - DosQuerySysInfo(1L, QSV_MAX, ulSysInfo, sizeofULong * QSV_MAX); - - memcpy(&zBuf[n], &ulSysInfo[QSV_MS_COUNT - 1], sizeofULong); - n += sizeofULong; - - if( sizeofULong <= nBuf - n ){ - memcpy(&zBuf[n], &ulSysInfo[QSV_TIMER_INTERVAL - 1], sizeofULong); - n += sizeofULong; - } - if( sizeofULong <= nBuf - n ){ - memcpy(&zBuf[n], &ulSysInfo[QSV_TIME_LOW - 1], sizeofULong); - n += sizeofULong; - } - if( sizeofULong <= nBuf - n ){ - memcpy(&zBuf[n], &ulSysInfo[QSV_TIME_HIGH - 1], sizeofULong); - n += sizeofULong; - } - if( sizeofULong <= nBuf - n ){ - memcpy(&zBuf[n], &ulSysInfo[QSV_TOTAVAILMEM - 1], sizeofULong); - n += sizeofULong; - } - } + int i; + PPIB ppib; + PTIB ptib; + DATETIME dt; + static unsigned c = 0; + /* Ordered by variation probability */ + static ULONG svIdx[6] = { QSV_MS_COUNT, QSV_TIME_LOW, + QSV_MAXPRMEM, QSV_MAXSHMEM, + QSV_TOTAVAILMEM, QSV_TOTRESMEM }; + + /* 8 bytes; timezone and weekday don't increase the randomness much */ + if( (int)sizeof(dt)-3 <= nBuf - n ){ + c += 0x0100; + DosGetDateTime(&dt); + dt.year = (USHORT)((dt.year - 1900) | c); + memcpy(&zBuf[n], &dt, sizeof(dt)-3); + n += sizeof(dt)-3; + } + + /* 4 bytes; PIDs and TIDs are 16 bit internally, so combine them */ + if( (int)sizeof(ULONG) <= nBuf - n ){ + DosGetInfoBlocks(&ptib, &ppib); + *(PULONG)&zBuf[n] = MAKELONG(ppib->pib_ulpid, + ptib->tib_ptib2->tib2_ultid); + n += sizeof(ULONG); + } + + /* Up to 6 * 4 bytes; variables depend on the system state */ + for( i = 0; i < 6 && (int)sizeof(ULONG) <= nBuf - n; i++ ){ + DosQuerySysInfo(svIdx[i], svIdx[i], + (PULONG)&zBuf[n], sizeof(ULONG)); + n += sizeof(ULONG); + } #endif return n; @@ -20734,46 +24781,98 @@ SQLITE_API int sqlite3_current_time = 0; #endif /* -** Find the current time (in Universal Coordinated Time). Write the -** current time and date as a Julian Day number into *prNow and -** return 0. Return 1 if the time and date cannot be found. +** Find the current time (in Universal Coordinated Time). Write into *piNow +** the current time and date as a Julian Day number times 86_400_000. In +** other words, write into *piNow the number of milliseconds since the Julian +** epoch of noon in Greenwich on November 24, 4714 B.C according to the +** proleptic Gregorian calendar. +** +** On success, return 0. Return 1 if the time and date cannot be found. */ -int os2CurrentTime( sqlite3_vfs *pVfs, double *prNow ){ - double now; - SHORT minute; /* needs to be able to cope with negative timezone offset */ - USHORT second, hour, - day, month, year; +static int os2CurrentTimeInt64(sqlite3_vfs *pVfs, sqlite3_int64 *piNow){ +#ifdef SQLITE_TEST + static const sqlite3_int64 unixEpoch = 24405875*(sqlite3_int64)8640000; +#endif + int year, month, datepart, timepart; + DATETIME dt; DosGetDateTime( &dt ); - second = (USHORT)dt.seconds; - minute = (SHORT)dt.minutes + dt.timezone; - hour = (USHORT)dt.hours; - day = (USHORT)dt.day; - month = (USHORT)dt.month; - year = (USHORT)dt.year; + + year = dt.year; + month = dt.month; /* Calculations from http://www.astro.keele.ac.uk/~rno/Astronomy/hjd.html - http://www.astro.keele.ac.uk/~rno/Astronomy/hjd-0.1.c */ - /* Calculate the Julian days */ - now = day - 32076 + + ** http://www.astro.keele.ac.uk/~rno/Astronomy/hjd-0.1.c + ** Calculate the Julian days + */ + datepart = (int)dt.day - 32076 + 1461*(year + 4800 + (month - 14)/12)/4 + 367*(month - 2 - (month - 14)/12*12)/12 - 3*((year + 4900 + (month - 14)/12)/100)/4; - /* Add the fractional hours, mins and seconds */ - now += (hour + 12.0)/24.0; - now += minute/1440.0; - now += second/86400.0; - *prNow = now; + /* Time in milliseconds, hours to noon added */ + timepart = 12*3600*1000 + dt.hundredths*10 + dt.seconds*1000 + + ((int)dt.minutes + dt.timezone)*60*1000 + dt.hours*3600*1000; + + *piNow = (sqlite3_int64)datepart*86400*1000 + timepart; + #ifdef SQLITE_TEST if( sqlite3_current_time ){ - *prNow = sqlite3_current_time/86400.0 + 2440587.5; + *piNow = 1000*(sqlite3_int64)sqlite3_current_time + unixEpoch; } #endif + + UNUSED_PARAMETER(pVfs); return 0; } +/* +** Find the current time (in Universal Coordinated Time). Write the +** current time and date as a Julian Day number into *prNow and +** return 0. Return 1 if the time and date cannot be found. +*/ +static int os2CurrentTime( sqlite3_vfs *pVfs, double *prNow ){ + int rc; + sqlite3_int64 i; + rc = os2CurrentTimeInt64(pVfs, &i); + if( !rc ){ + *prNow = i/86400000.0; + } + return rc; +} + +/* +** The idea is that this function works like a combination of +** GetLastError() and FormatMessage() on windows (or errno and +** strerror_r() on unix). After an error is returned by an OS +** function, SQLite calls this function with zBuf pointing to +** a buffer of nBuf bytes. The OS layer should populate the +** buffer with a nul-terminated UTF-8 encoded error message +** describing the last IO error to have occurred within the calling +** thread. +** +** If the error message is too large for the supplied buffer, +** it should be truncated. The return value of xGetLastError +** is zero if the error message fits in the buffer, or non-zero +** otherwise (if the message was truncated). If non-zero is returned, +** then it is not necessary to include the nul-terminator character +** in the output buffer. +** +** Not supplying an error message will have no adverse effect +** on SQLite. It is fine to have an implementation that never +** returns an error message: +** +** int xGetLastError(sqlite3_vfs *pVfs, int nBuf, char *zBuf){ +** assert(zBuf[0]=='\0'); +** return 0; +** } +** +** However if an error message is supplied, it will be incorporated +** by sqlite into the error message available to the user using +** sqlite3_errmsg(), possibly making IO errors easier to debug. +*/ static int os2GetLastError(sqlite3_vfs *pVfs, int nBuf, char *zBuf){ + assert(zBuf[0]=='\0'); return 0; } @@ -20782,7 +24881,7 @@ static int os2GetLastError(sqlite3_vfs *pVfs, int nBuf, char *zBuf){ */ SQLITE_API int sqlite3_os_init(void){ static sqlite3_vfs os2Vfs = { - 1, /* iVersion */ + 3, /* iVersion */ sizeof(os2File), /* szOsFile */ CCHMAXPATH, /* mxPathname */ 0, /* pNext */ @@ -20800,10 +24899,15 @@ SQLITE_API int sqlite3_os_init(void){ os2Randomness, /* xRandomness */ os2Sleep, /* xSleep */ os2CurrentTime, /* xCurrentTime */ - os2GetLastError /* xGetLastError */ + os2GetLastError, /* xGetLastError */ + os2CurrentTimeInt64, /* xCurrentTimeInt64 */ + 0, /* xSetSystemCall */ + 0, /* xGetSystemCall */ + 0 /* xNextSystemCall */ }; sqlite3_vfs_register(&os2Vfs, 1); initUconvObjects(); +/* sqlite3OSTrace = 1; */ return SQLITE_OK; } SQLITE_API int sqlite3_os_end(void){ @@ -20859,8 +24963,6 @@ SQLITE_API int sqlite3_os_end(void){ ** * Locking primitives for the proxy uber-locking-method. (MacOSX only) ** * Definitions of sqlite3_vfs objects for all locking methods ** plus implementations of sqlite3_os_init() and sqlite3_os_end(). -** -** $Id: os_unix.c,v 1.253 2009/06/17 13:09:39 drh Exp $ */ #if SQLITE_OS_UNIX /* This file is used on unix only */ @@ -20934,8 +25036,13 @@ SQLITE_API int sqlite3_os_end(void){ #include #include #include +/* #include */ #include #include +#ifndef SQLITE_OMIT_WAL +#include +#endif + #if SQLITE_ENABLE_LOCKING_STYLE # include @@ -20945,15 +25052,28 @@ SQLITE_API int sqlite3_os_end(void){ # else # include # include -# include # endif #endif /* SQLITE_ENABLE_LOCKING_STYLE */ +#if defined(__APPLE__) || (SQLITE_ENABLE_LOCKING_STYLE && !OS_VXWORKS) +# include +#endif + +#ifdef HAVE_UTIME +# include +#endif + +/* +** Allowed values of unixFile.fsFlags +*/ +#define SQLITE_FSFLAGS_IS_MSDOS 0x1 + /* ** If we are to be thread-safe, include the pthreads header and define ** the SQLITE_UNIX_THREADS macro. */ #if SQLITE_THREADSAFE +/* # include */ # define SQLITE_UNIX_THREADS 1 #endif @@ -20965,8 +25085,8 @@ SQLITE_API int sqlite3_os_end(void){ #endif /* - ** Default permissions when creating auto proxy dir - */ +** Default permissions when creating auto proxy dir +*/ #ifndef SQLITE_DEFAULT_PROXYDIR_PERMISSIONS # define SQLITE_DEFAULT_PROXYDIR_PERMISSIONS 0755 #endif @@ -20982,6 +25102,23 @@ SQLITE_API int sqlite3_os_end(void){ */ #define IS_LOCK_ERROR(x) ((x != SQLITE_OK) && (x != SQLITE_BUSY)) +/* Forward references */ +typedef struct unixShm unixShm; /* Connection shared memory */ +typedef struct unixShmNode unixShmNode; /* Shared memory instance */ +typedef struct unixInodeInfo unixInodeInfo; /* An i-node */ +typedef struct UnixUnusedFd UnixUnusedFd; /* An unused file descriptor */ + +/* +** Sometimes, after a file handle is closed by SQLite, the file descriptor +** cannot be closed immediately. In these cases, instances of the following +** structure are used to store the file descriptor while waiting for an +** opportunity to either close or reuse it. +*/ +struct UnixUnusedFd { + int fd; /* File descriptor to close */ + int flags; /* Flags this file descriptor was opened with */ + UnixUnusedFd *pNext; /* Next unused file descriptor on same file */ +}; /* ** The unixFile structure is subclass of sqlite3_file specific to the unix @@ -20990,24 +25127,27 @@ SQLITE_API int sqlite3_os_end(void){ typedef struct unixFile unixFile; struct unixFile { sqlite3_io_methods const *pMethod; /* Always the first entry */ - struct unixOpenCnt *pOpen; /* Info about all open fd's on this inode */ - struct unixLockInfo *pLock; /* Info about locks on this inode */ - int h; /* The file descriptor */ - int dirfd; /* File descriptor for the directory */ - unsigned char locktype; /* The type of lock held on this fd */ - int lastErrno; /* The unix errno from the last I/O error */ - void *lockingContext; /* Locking style specific state */ + sqlite3_vfs *pVfs; /* The VFS that created this unixFile */ + unixInodeInfo *pInode; /* Info about locks on this inode */ + int h; /* The file descriptor */ + unsigned char eFileLock; /* The type of lock held on this fd */ + unsigned short int ctrlFlags; /* Behavioral bits. UNIXFILE_* flags */ + int lastErrno; /* The unix errno from last I/O error */ + void *lockingContext; /* Locking style specific state */ + UnixUnusedFd *pUnused; /* Pre-allocated UnixUnusedFd */ + const char *zPath; /* Name of the file */ + unixShm *pShm; /* Shared memory segment information */ + int szChunk; /* Configured by FCNTL_CHUNK_SIZE */ #if SQLITE_ENABLE_LOCKING_STYLE - int openFlags; /* The flags specified at open() */ + int openFlags; /* The flags specified at open() */ #endif -#if SQLITE_THREADSAFE && defined(__linux__) - pthread_t tid; /* The thread that "owns" this unixFile */ +#if SQLITE_ENABLE_LOCKING_STYLE || defined(__APPLE__) + unsigned fsFlags; /* cached details from statfs() */ #endif #if OS_VXWORKS - int isDelete; /* Delete on close if true */ - struct vxworksFileId *pId; /* Unique file ID */ + struct vxworksFileId *pId; /* Unique file ID */ #endif -#ifndef NDEBUG +#ifdef SQLITE_DEBUG /* The next group of variables are used to track whether or not the ** transaction counter in bytes 24-27 of database files are updated ** whenever any part of the database changes. An assertion fault will @@ -21018,11 +25158,6 @@ struct unixFile { unsigned char transCntrChng; /* True if the transaction counter changed */ unsigned char dbUpdate; /* True if any part of database file changed */ unsigned char inNormalWrite; /* True if in a normal write operation */ - - /* If true, that means we are dealing with a database file that has - ** a range of locking bytes from PENDING_BYTE through PENDING_BYTE+511 - ** which should never be read or written. Asserts() will verify this */ - unsigned char isLockable; /* True if file might be locked */ #endif #ifdef SQLITE_TEST /* In test mode, increase the size of this structure a bit so that @@ -21032,6 +25167,22 @@ struct unixFile { #endif }; +/* +** Allowed values for the unixFile.ctrlFlags bitmask: +*/ +#define UNIXFILE_EXCL 0x01 /* Connections from one process only */ +#define UNIXFILE_RDONLY 0x02 /* Connection is read only */ +#define UNIXFILE_PERSIST_WAL 0x04 /* Persistent WAL mode */ +#ifndef SQLITE_DISABLE_DIRSYNC +# define UNIXFILE_DIRSYNC 0x08 /* Directory sync needed */ +#else +# define UNIXFILE_DIRSYNC 0x00 +#endif +#define UNIXFILE_PSOW 0x10 /* SQLITE_IOCAP_POWERSAFE_OVERWRITE */ +#define UNIXFILE_DELETE 0x20 /* Delete on close */ +#define UNIXFILE_URI 0x40 /* Filename might have query parameters */ +#define UNIXFILE_NOLOCK 0x80 /* Do no file locking */ + /* ** Include code that is common to all os_*.c files */ @@ -21055,8 +25206,6 @@ struct unixFile { ** ** This file should be #included by the os_*.c files only. It is not a ** general purpose header file. -** -** $Id: os_common.h,v 1.38 2009/02/24 18:40:50 danielk1977 Exp $ */ #ifndef _OS_COMMON_H_ #define _OS_COMMON_H_ @@ -21070,25 +25219,14 @@ struct unixFile { # error "The MEMORY_DEBUG macro is obsolete. Use SQLITE_DEBUG instead." #endif -#ifdef SQLITE_DEBUG -SQLITE_PRIVATE int sqlite3OSTrace = 0; -#define OSTRACE1(X) if( sqlite3OSTrace ) sqlite3DebugPrintf(X) -#define OSTRACE2(X,Y) if( sqlite3OSTrace ) sqlite3DebugPrintf(X,Y) -#define OSTRACE3(X,Y,Z) if( sqlite3OSTrace ) sqlite3DebugPrintf(X,Y,Z) -#define OSTRACE4(X,Y,Z,A) if( sqlite3OSTrace ) sqlite3DebugPrintf(X,Y,Z,A) -#define OSTRACE5(X,Y,Z,A,B) if( sqlite3OSTrace ) sqlite3DebugPrintf(X,Y,Z,A,B) -#define OSTRACE6(X,Y,Z,A,B,C) \ - if(sqlite3OSTrace) sqlite3DebugPrintf(X,Y,Z,A,B,C) -#define OSTRACE7(X,Y,Z,A,B,C,D) \ - if(sqlite3OSTrace) sqlite3DebugPrintf(X,Y,Z,A,B,C,D) +#if defined(SQLITE_TEST) && defined(SQLITE_DEBUG) +# ifndef SQLITE_DEBUG_OS_TRACE +# define SQLITE_DEBUG_OS_TRACE 0 +# endif + int sqlite3OSTrace = SQLITE_DEBUG_OS_TRACE; +# define OSTRACE(X) if( sqlite3OSTrace ) sqlite3DebugPrintf X #else -#define OSTRACE1(X) -#define OSTRACE2(X,Y) -#define OSTRACE3(X,Y,Z) -#define OSTRACE4(X,Y,Z,A) -#define OSTRACE5(X,Y,Z,A,B) -#define OSTRACE6(X,Y,Z,A,B,C) -#define OSTRACE7(X,Y,Z,A,B,C,D) +# define OSTRACE(X) #endif /* @@ -21117,8 +25255,6 @@ SQLITE_PRIVATE int sqlite3OSTrace = 0; ** ** This file contains inline asm code for retrieving "high-performance" ** counters for x86 class CPUs. -** -** $Id: hwtime.h,v 1.3 2008/08/01 14:33:15 shane Exp $ */ #ifndef _HWTIME_H_ #define _HWTIME_H_ @@ -21277,6 +25413,66 @@ SQLITE_API int sqlite3_open_file_count = 0; # define O_BINARY 0 #endif +/* +** The threadid macro resolves to the thread-id or to 0. Used for +** testing and debugging only. +*/ +#if SQLITE_THREADSAFE +#define threadid pthread_self() +#else +#define threadid 0 +#endif + +/* +** Different Unix systems declare open() in different ways. Same use +** open(const char*,int,mode_t). Others use open(const char*,int,...). +** The difference is important when using a pointer to the function. +** +** The safest way to deal with the problem is to always use this wrapper +** which always has the same well-defined interface. +*/ +static int posixOpen(const char *zFile, int flags, int mode){ + return open(zFile, flags, mode); +} + +/* +** On some systems, calls to fchown() will trigger a message in a security +** log if they come from non-root processes. So avoid calling fchown() if +** we are not running as root. +*/ +static int posixFchown(int fd, uid_t uid, gid_t gid){ + return geteuid() ? 0 : fchown(fd,uid,gid); +} + +/* Forward reference */ +static int openDirectory(const char*, int*); + +/* +** Many system calls are accessed through pointer-to-functions so that +** they may be overridden at runtime to facilitate fault injection during +** testing and sandboxing. The following array holds the names and pointers +** to all overrideable system calls. +*/ +static struct unix_syscall { + const char *zName; /* Name of the sytem call */ + sqlite3_syscall_ptr pCurrent; /* Current value of the system call */ + sqlite3_syscall_ptr pDefault; /* Default value */ +} aSyscall[] = { + { "open", (sqlite3_syscall_ptr)posixOpen, 0 }, +#define osOpen ((int(*)(const char*,int,int))aSyscall[0].pCurrent) + + { "close", (sqlite3_syscall_ptr)close, 0 }, +#define osClose ((int(*)(int))aSyscall[1].pCurrent) + + { "access", (sqlite3_syscall_ptr)access, 0 }, +#define osAccess ((int(*)(const char*,int))aSyscall[2].pCurrent) + + { "getcwd", (sqlite3_syscall_ptr)getcwd, 0 }, +#define osGetcwd ((char*(*)(char*,size_t))aSyscall[3].pCurrent) + + { "stat", (sqlite3_syscall_ptr)stat, 0 }, +#define osStat ((int(*)(const char*,struct stat*))aSyscall[4].pCurrent) + /* ** The DJGPP compiler environment looks mostly like Unix, but it ** lacks the fcntl() system call. So redefine fcntl() to be something @@ -21284,22 +25480,228 @@ SQLITE_API int sqlite3_open_file_count = 0; ** DJGPP. But it is DOS - what did you expect? */ #ifdef __DJGPP__ -# define fcntl(A,B,C) 0 + { "fstat", 0, 0 }, +#define osFstat(a,b,c) 0 +#else + { "fstat", (sqlite3_syscall_ptr)fstat, 0 }, +#define osFstat ((int(*)(int,struct stat*))aSyscall[5].pCurrent) +#endif + + { "ftruncate", (sqlite3_syscall_ptr)ftruncate, 0 }, +#define osFtruncate ((int(*)(int,off_t))aSyscall[6].pCurrent) + + { "fcntl", (sqlite3_syscall_ptr)fcntl, 0 }, +#define osFcntl ((int(*)(int,int,...))aSyscall[7].pCurrent) + + { "read", (sqlite3_syscall_ptr)read, 0 }, +#define osRead ((ssize_t(*)(int,void*,size_t))aSyscall[8].pCurrent) + +#if defined(USE_PREAD) || SQLITE_ENABLE_LOCKING_STYLE + { "pread", (sqlite3_syscall_ptr)pread, 0 }, +#else + { "pread", (sqlite3_syscall_ptr)0, 0 }, +#endif +#define osPread ((ssize_t(*)(int,void*,size_t,off_t))aSyscall[9].pCurrent) + +#if defined(USE_PREAD64) + { "pread64", (sqlite3_syscall_ptr)pread64, 0 }, +#else + { "pread64", (sqlite3_syscall_ptr)0, 0 }, +#endif +#define osPread64 ((ssize_t(*)(int,void*,size_t,off_t))aSyscall[10].pCurrent) + + { "write", (sqlite3_syscall_ptr)write, 0 }, +#define osWrite ((ssize_t(*)(int,const void*,size_t))aSyscall[11].pCurrent) + +#if defined(USE_PREAD) || SQLITE_ENABLE_LOCKING_STYLE + { "pwrite", (sqlite3_syscall_ptr)pwrite, 0 }, +#else + { "pwrite", (sqlite3_syscall_ptr)0, 0 }, +#endif +#define osPwrite ((ssize_t(*)(int,const void*,size_t,off_t))\ + aSyscall[12].pCurrent) + +#if defined(USE_PREAD64) + { "pwrite64", (sqlite3_syscall_ptr)pwrite64, 0 }, +#else + { "pwrite64", (sqlite3_syscall_ptr)0, 0 }, +#endif +#define osPwrite64 ((ssize_t(*)(int,const void*,size_t,off_t))\ + aSyscall[13].pCurrent) + +#if SQLITE_ENABLE_LOCKING_STYLE + { "fchmod", (sqlite3_syscall_ptr)fchmod, 0 }, +#else + { "fchmod", (sqlite3_syscall_ptr)0, 0 }, #endif +#define osFchmod ((int(*)(int,mode_t))aSyscall[14].pCurrent) + +#if defined(HAVE_POSIX_FALLOCATE) && HAVE_POSIX_FALLOCATE + { "fallocate", (sqlite3_syscall_ptr)posix_fallocate, 0 }, +#else + { "fallocate", (sqlite3_syscall_ptr)0, 0 }, +#endif +#define osFallocate ((int(*)(int,off_t,off_t))aSyscall[15].pCurrent) + + { "unlink", (sqlite3_syscall_ptr)unlink, 0 }, +#define osUnlink ((int(*)(const char*))aSyscall[16].pCurrent) + + { "openDirectory", (sqlite3_syscall_ptr)openDirectory, 0 }, +#define osOpenDirectory ((int(*)(const char*,int*))aSyscall[17].pCurrent) + + { "mkdir", (sqlite3_syscall_ptr)mkdir, 0 }, +#define osMkdir ((int(*)(const char*,mode_t))aSyscall[18].pCurrent) + + { "rmdir", (sqlite3_syscall_ptr)rmdir, 0 }, +#define osRmdir ((int(*)(const char*))aSyscall[19].pCurrent) + + { "fchown", (sqlite3_syscall_ptr)posixFchown, 0 }, +#define osFchown ((int(*)(int,uid_t,gid_t))aSyscall[20].pCurrent) + + { "umask", (sqlite3_syscall_ptr)umask, 0 }, +#define osUmask ((mode_t(*)(mode_t))aSyscall[21].pCurrent) + +}; /* End of the overrideable system calls */ /* -** The threadid macro resolves to the thread-id or to 0. Used for -** testing and debugging only. +** This is the xSetSystemCall() method of sqlite3_vfs for all of the +** "unix" VFSes. Return SQLITE_OK opon successfully updating the +** system call pointer, or SQLITE_NOTFOUND if there is no configurable +** system call named zName. */ -#if SQLITE_THREADSAFE -#define threadid pthread_self() +static int unixSetSystemCall( + sqlite3_vfs *pNotUsed, /* The VFS pointer. Not used */ + const char *zName, /* Name of system call to override */ + sqlite3_syscall_ptr pNewFunc /* Pointer to new system call value */ +){ + unsigned int i; + int rc = SQLITE_NOTFOUND; + + UNUSED_PARAMETER(pNotUsed); + if( zName==0 ){ + /* If no zName is given, restore all system calls to their default + ** settings and return NULL + */ + rc = SQLITE_OK; + for(i=0; i=0 ) osFcntl(fd, F_SETFD, osFcntl(fd, F_GETFD, 0) | FD_CLOEXEC); +#endif + return fd; +} /* -** Helper functions to obtain and relinquish the global mutex. +** Helper functions to obtain and relinquish the global mutex. The +** global mutex is used to protect the unixInodeInfo and +** vxworksFileId objects used by this file, all of which may be +** shared by multiple threads. +** +** Function unixMutexHeld() is used to assert() that the global mutex +** is held when required. This function is only used as part of assert() +** statements. e.g. +** +** unixEnterMutex() +** assert( unixMutexHeld() ); +** unixEnterLeave() */ static void unixEnterMutex(void){ sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER)); @@ -21307,21 +25709,26 @@ static void unixEnterMutex(void){ static void unixLeaveMutex(void){ sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER)); } +#ifdef SQLITE_DEBUG +static int unixMutexHeld(void) { + return sqlite3_mutex_held(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER)); +} +#endif -#ifdef SQLITE_DEBUG +#if defined(SQLITE_TEST) && defined(SQLITE_DEBUG) /* ** Helper function for printing out trace information from debugging ** binaries. This returns the string represetation of the supplied ** integer lock-type. */ -static const char *locktypeName(int locktype){ - switch( locktype ){ - case NO_LOCK: return "NONE"; - case SHARED_LOCK: return "SHARED"; - case RESERVED_LOCK: return "RESERVED"; - case PENDING_LOCK: return "PENDING"; - case EXCLUSIVE_LOCK: return "EXCLUSIVE"; +static const char *azFileLock(int eFileLock){ + switch( eFileLock ){ + case NO_LOCK: return "NONE"; + case SHARED_LOCK: return "SHARED"; + case RESERVED_LOCK: return "RESERVED"; + case PENDING_LOCK: return "PENDING"; + case EXCLUSIVE_LOCK: return "EXCLUSIVE"; } return "ERROR"; } @@ -21345,7 +25752,7 @@ static int lockTrace(int fd, int op, struct flock *p){ }else if( op==F_SETLK ){ zOpName = "SETLK"; }else{ - s = fcntl(fd, op, p); + s = osFcntl(fd, op, p); sqlite3DebugPrintf("fcntl unknown %d %d %d\n", fd, op, s); return s; } @@ -21359,7 +25766,7 @@ static int lockTrace(int fd, int op, struct flock *p){ assert( 0 ); } assert( p->l_whence==SEEK_SET ); - s = fcntl(fd, op, p); + s = osFcntl(fd, op, p); savedErrno = errno; sqlite3DebugPrintf("fcntl %d %d %s %s %d %d %d %d\n", threadid, fd, zOpName, zType, (int)p->l_start, (int)p->l_len, @@ -21367,7 +25774,7 @@ static int lockTrace(int fd, int op, struct flock *p){ if( s==(-1) && op==F_SETLK && (p->l_type==F_RDLCK || p->l_type==F_WRLCK) ){ struct flock l2; l2 = *p; - fcntl(fd, F_GETLK, &l2); + osFcntl(fd, F_GETLK, &l2); if( l2.l_type==F_RDLCK ){ zType = "RDLCK"; }else if( l2.l_type==F_WRLCK ){ @@ -21383,10 +25790,18 @@ static int lockTrace(int fd, int op, struct flock *p){ errno = savedErrno; return s; } -#define fcntl lockTrace +#undef osFcntl +#define osFcntl lockTrace #endif /* SQLITE_LOCK_TRACE */ - +/* +** Retry ftruncate() calls that fail due to EINTR +*/ +static int robust_ftruncate(int h, sqlite3_int64 sz){ + int rc; + do{ rc = osFtruncate(h,sz); }while( rc<0 && errno==EINTR ); + return rc; +} /* ** This routine translates a standard POSIX errno code into something @@ -21400,9 +25815,22 @@ static int lockTrace(int fd, int op, struct flock *p){ */ static int sqliteErrorFromPosixError(int posixError, int sqliteIOErr) { switch (posixError) { +#if 0 + /* At one point this code was not commented out. In theory, this branch + ** should never be hit, as this function should only be called after + ** a locking-related function (i.e. fcntl()) has returned non-zero with + ** the value of errno as the first argument. Since a system call has failed, + ** errno should be non-zero. + ** + ** Despite this, if errno really is zero, we still don't want to return + ** SQLITE_OK. The system call failed, and *some* SQLite error should be + ** propagated back to the caller. Commenting this branch out means errno==0 + ** will be handled by the "default:" case below. + */ case 0: return SQLITE_OK; - +#endif + case EAGAIN: case ETIMEDOUT: case EBUSY: @@ -21424,8 +25852,15 @@ static int sqliteErrorFromPosixError(int posixError, int sqliteIOErr) { case EPERM: return SQLITE_PERM; + /* EDEADLK is only possible if a call to fcntl(F_SETLKW) is made. And + ** this module never makes such a call. And the code in SQLite itself + ** asserts that SQLITE_IOERR_BLOCKED is never returned. For these reasons + ** this case is also commented out. If the system does set errno to EDEADLK, + ** the default SQLITE_IOERR_XXX code will be returned. */ +#if 0 case EDEADLK: return SQLITE_IOERR_BLOCKED; +#endif #if EOPNOTSUPP!=ENOTSUP case EOPNOTSUPP: @@ -21444,7 +25879,9 @@ static int sqliteErrorFromPosixError(int posixError, int sqliteIOErr) { case ENODEV: case ENXIO: case ENOENT: +#ifdef ESTALE /* ESTALE is not defined on Interix systems */ case ESTALE: +#endif case ENOSYS: /* these should force the client to close the file and reconnect */ @@ -21653,13 +26090,12 @@ static void vxworksReleaseFileId(struct vxworksFileId *pId){ ** ** If you close a file descriptor that points to a file that has locks, ** all locks on that file that are owned by the current process are -** released. To work around this problem, each unixFile structure contains -** a pointer to an unixOpenCnt structure. There is one unixOpenCnt structure -** per open inode, which means that multiple unixFile can point to a single -** unixOpenCnt. When an attempt is made to close an unixFile, if there are +** released. To work around this problem, each unixInodeInfo object +** maintains a count of the number of pending locks on tha inode. +** When an attempt is made to close an unixFile, if there are ** other unixFile open on the same inode that are holding locks, the call ** to close() the file descriptor is deferred until all of the locks clear. -** The unixOpenCnt structure keeps a list of file descriptors that need to +** The unixInodeInfo structure keeps a list of file descriptors that need to ** be closed and that list is walked (and cleared) when the last lock ** clears. ** @@ -21674,46 +26110,19 @@ static void vxworksReleaseFileId(struct vxworksFileId *pId){ ** in thread B. But there is no way to know at compile-time which ** threading library is being used. So there is no way to know at ** compile-time whether or not thread A can override locks on thread B. -** We have to do a run-time check to discover the behavior of the +** One has to do a run-time check to discover the behavior of the ** current process. ** -** On systems where thread A is unable to modify locks created by -** thread B, we have to keep track of which thread created each -** lock. Hence there is an extra field in the key to the unixLockInfo -** structure to record this information. And on those systems it -** is illegal to begin a transaction in one thread and finish it -** in another. For this latter restriction, there is no work-around. -** It is a limitation of LinuxThreads. -*/ - -/* -** Set or check the unixFile.tid field. This field is set when an unixFile -** is first opened. All subsequent uses of the unixFile verify that the -** same thread is operating on the unixFile. Some operating systems do -** not allow locks to be overridden by other threads and that restriction -** means that sqlite3* database handles cannot be moved from one thread -** to another while locks are held. -** -** Version 3.3.1 (2006-01-15): unixFile can be moved from one thread to -** another as long as we are running on a system that supports threads -** overriding each others locks (which is now the most common behavior) -** or if no locks are held. But the unixFile.pLock field needs to be -** recomputed because its key includes the thread-id. See the -** transferOwnership() function below for additional information -*/ -#if SQLITE_THREADSAFE && defined(__linux__) -# define SET_THREADID(X) (X)->tid = pthread_self() -# define CHECK_THREADID(X) (threadsOverrideEachOthersLocks==0 && \ - !pthread_equal((X)->tid, pthread_self())) -#else -# define SET_THREADID(X) -# define CHECK_THREADID(X) 0 -#endif +** SQLite used to support LinuxThreads. But support for LinuxThreads +** was dropped beginning with version 3.7.0. SQLite will still work with +** LinuxThreads provided that (1) there is no more than one connection +** per database file in the same process and (2) database connections +** do not move across threads. +*/ /* ** An instance of the following structure serves as the key used -** to locate a particular unixOpenCnt structure given its inode. This -** is the same as the unixLockKey except that the thread ID is omitted. +** to locate a particular unixInodeInfo object. */ struct unixFileId { dev_t dev; /* Device number */ @@ -21724,23 +26133,6 @@ struct unixFileId { #endif }; -/* -** An instance of the following structure serves as the key used -** to locate a particular unixLockInfo structure given its inode. -** -** If threads cannot override each others locks (LinuxThreads), then we -** set the unixLockKey.tid field to the thread ID. If threads can override -** each others locks (Posix and NPTL) then tid is always set to zero. -** tid is omitted if we compile without threading support or on an OS -** other than linux. -*/ -struct unixLockKey { - struct unixFileId fid; /* Unique identifier for the file */ -#if SQLITE_THREADSAFE && defined(__linux__) - pthread_t tid; /* Thread ID of lock owner. Zero if not using LinuxThreads */ -#endif -}; - /* ** An instance of the following structure is allocated for each open ** inode. Or, on LinuxThreads, there is one of these structures for @@ -21750,212 +26142,193 @@ struct unixLockKey { ** structure contains a pointer to an instance of this object and this ** object keeps a count of the number of unixFile pointing to it. */ -struct unixLockInfo { - struct unixLockKey lockKey; /* The lookup key */ - int cnt; /* Number of SHARED locks held */ - int locktype; /* One of SHARED_LOCK, RESERVED_LOCK etc. */ +struct unixInodeInfo { + struct unixFileId fileId; /* The lookup key */ + int nShared; /* Number of SHARED locks held */ + unsigned char eFileLock; /* One of SHARED_LOCK, RESERVED_LOCK etc. */ + unsigned char bProcessLock; /* An exclusive process lock is held */ int nRef; /* Number of pointers to this structure */ - struct unixLockInfo *pNext; /* List of all unixLockInfo objects */ - struct unixLockInfo *pPrev; /* .... doubly linked */ -}; - -/* -** An instance of the following structure is allocated for each open -** inode. This structure keeps track of the number of locks on that -** inode. If a close is attempted against an inode that is holding -** locks, the close is deferred until all locks clear by adding the -** file descriptor to be closed to the pending list. -** -** TODO: Consider changing this so that there is only a single file -** descriptor for each open file, even when it is opened multiple times. -** The close() system call would only occur when the last database -** using the file closes. -*/ -struct unixOpenCnt { - struct unixFileId fileId; /* The lookup key */ - int nRef; /* Number of pointers to this structure */ - int nLock; /* Number of outstanding locks */ - int nPending; /* Number of pending close() operations */ - int *aPending; /* Malloced space holding fd's awaiting a close() */ + unixShmNode *pShmNode; /* Shared memory associated with this inode */ + int nLock; /* Number of outstanding file locks */ + UnixUnusedFd *pUnused; /* Unused file descriptors to close */ + unixInodeInfo *pNext; /* List of all unixInodeInfo objects */ + unixInodeInfo *pPrev; /* .... doubly linked */ +#if SQLITE_ENABLE_LOCKING_STYLE + unsigned long long sharedByte; /* for AFP simulated shared lock */ +#endif #if OS_VXWORKS - sem_t *pSem; /* Named POSIX semaphore */ - char aSemName[MAX_PATHNAME+1]; /* Name of that semaphore */ + sem_t *pSem; /* Named POSIX semaphore */ + char aSemName[MAX_PATHNAME+2]; /* Name of that semaphore */ #endif - struct unixOpenCnt *pNext, *pPrev; /* List of all unixOpenCnt objects */ }; /* -** Lists of all unixLockInfo and unixOpenCnt objects. These used to be hash -** tables. But the number of objects is rarely more than a dozen and -** never exceeds a few thousand. And lookup is not on a critical -** path so a simple linked list will suffice. +** A lists of all unixInodeInfo objects. */ -static struct unixLockInfo *lockList = 0; -static struct unixOpenCnt *openList = 0; +static unixInodeInfo *inodeList = 0; /* -** This variable remembers whether or not threads can override each others -** locks. ** -** 0: No. Threads cannot override each others locks. (LinuxThreads) -** 1: Yes. Threads can override each others locks. (Posix & NLPT) -** -1: We don't know yet. +** This function - unixLogError_x(), is only ever called via the macro +** unixLogError(). ** -** On some systems, we know at compile-time if threads can override each -** others locks. On those systems, the SQLITE_THREAD_OVERRIDE_LOCK macro -** will be set appropriately. On other systems, we have to check at -** runtime. On these latter systems, SQLTIE_THREAD_OVERRIDE_LOCK is -** undefined. +** It is invoked after an error occurs in an OS function and errno has been +** set. It logs a message using sqlite3_log() containing the current value of +** errno and, if possible, the human-readable equivalent from strerror() or +** strerror_r(). ** -** This variable normally has file scope only. But during testing, we make -** it a global so that the test code can change its value in order to verify -** that the right stuff happens in either case. +** The first argument passed to the macro should be the error code that +** will be returned to SQLite (e.g. SQLITE_IOERR_DELETE, SQLITE_CANTOPEN). +** The two subsequent arguments should be the name of the OS function that +** failed (e.g. "unlink", "open") and the the associated file-system path, +** if any. */ -#if SQLITE_THREADSAFE && defined(__linux__) -# ifndef SQLITE_THREAD_OVERRIDE_LOCK -# define SQLITE_THREAD_OVERRIDE_LOCK -1 -# endif -# ifdef SQLITE_TEST -int threadsOverrideEachOthersLocks = SQLITE_THREAD_OVERRIDE_LOCK; -# else -static int threadsOverrideEachOthersLocks = SQLITE_THREAD_OVERRIDE_LOCK; -# endif +#define unixLogError(a,b,c) unixLogErrorAtLine(a,b,c,__LINE__) +static int unixLogErrorAtLine( + int errcode, /* SQLite error code */ + const char *zFunc, /* Name of OS function that failed */ + const char *zPath, /* File path associated with error */ + int iLine /* Source line number where error occurred */ +){ + char *zErr; /* Message from strerror() or equivalent */ + int iErrno = errno; /* Saved syscall error number */ + + /* If this is not a threadsafe build (SQLITE_THREADSAFE==0), then use + ** the strerror() function to obtain the human-readable error message + ** equivalent to errno. Otherwise, use strerror_r(). + */ +#if SQLITE_THREADSAFE && defined(HAVE_STRERROR_R) + char aErr[80]; + memset(aErr, 0, sizeof(aErr)); + zErr = aErr; + + /* If STRERROR_R_CHAR_P (set by autoconf scripts) or __USE_GNU is defined, + ** assume that the system provides the the GNU version of strerror_r() that + ** returns a pointer to a buffer containing the error message. That pointer + ** may point to aErr[], or it may point to some static storage somewhere. + ** Otherwise, assume that the system provides the POSIX version of + ** strerror_r(), which always writes an error message into aErr[]. + ** + ** If the code incorrectly assumes that it is the POSIX version that is + ** available, the error message will often be an empty string. Not a + ** huge problem. Incorrectly concluding that the GNU version is available + ** could lead to a segfault though. + */ +#if defined(STRERROR_R_CHAR_P) || defined(__USE_GNU) + zErr = +# endif + strerror_r(iErrno, aErr, sizeof(aErr)-1); + +#elif SQLITE_THREADSAFE + /* This is a threadsafe build, but strerror_r() is not available. */ + zErr = ""; +#else + /* Non-threadsafe build, use strerror(). */ + zErr = strerror(iErrno); #endif -/* -** This structure holds information passed into individual test -** threads by the testThreadLockingBehavior() routine. -*/ -struct threadTestData { - int fd; /* File to be locked */ - struct flock lock; /* The locking operation */ - int result; /* Result of the locking operation */ -}; + assert( errcode!=SQLITE_OK ); + if( zPath==0 ) zPath = ""; + sqlite3_log(errcode, + "os_unix.c:%d: (%d) %s(%s) - %s", + iLine, iErrno, zFunc, zPath, zErr + ); + + return errcode; +} -#if SQLITE_THREADSAFE && defined(__linux__) /* -** This function is used as the main routine for a thread launched by -** testThreadLockingBehavior(). It tests whether the shared-lock obtained -** by the main thread in testThreadLockingBehavior() conflicts with a -** hypothetical write-lock obtained by this thread on the same file. +** Close a file descriptor. ** -** The write-lock is not actually acquired, as this is not possible if -** the file is open in read-only mode (see ticket #3472). -*/ -static void *threadLockingTest(void *pArg){ - struct threadTestData *pData = (struct threadTestData*)pArg; - pData->result = fcntl(pData->fd, F_GETLK, &pData->lock); - return pArg; +** We assume that close() almost always works, since it is only in a +** very sick application or on a very sick platform that it might fail. +** If it does fail, simply leak the file descriptor, but do log the +** error. +** +** Note that it is not safe to retry close() after EINTR since the +** file descriptor might have already been reused by another thread. +** So we don't even try to recover from an EINTR. Just log the error +** and move on. +*/ +static void robust_close(unixFile *pFile, int h, int lineno){ + if( osClose(h) ){ + unixLogErrorAtLine(SQLITE_IOERR_CLOSE, "close", + pFile ? pFile->zPath : 0, lineno); + } } -#endif /* SQLITE_THREADSAFE && defined(__linux__) */ - -#if SQLITE_THREADSAFE && defined(__linux__) /* -** This procedure attempts to determine whether or not threads -** can override each others locks then sets the -** threadsOverrideEachOthersLocks variable appropriately. -*/ -static void testThreadLockingBehavior(int fd_orig){ - int fd; - int rc; - struct threadTestData d; - struct flock l; - pthread_t t; - - fd = dup(fd_orig); - if( fd<0 ) return; - memset(&l, 0, sizeof(l)); - l.l_type = F_RDLCK; - l.l_len = 1; - l.l_start = 0; - l.l_whence = SEEK_SET; - rc = fcntl(fd_orig, F_SETLK, &l); - if( rc!=0 ) return; - memset(&d, 0, sizeof(d)); - d.fd = fd; - d.lock = l; - d.lock.l_type = F_WRLCK; - pthread_create(&t, 0, threadLockingTest, &d); - pthread_join(t, 0); - close(fd); - if( d.result!=0 ) return; - threadsOverrideEachOthersLocks = (d.lock.l_type==F_UNLCK); -} -#endif /* SQLITE_THERADSAFE && defined(__linux__) */ - -/* -** Release a unixLockInfo structure previously allocated by findLockInfo(). -*/ -static void releaseLockInfo(struct unixLockInfo *pLock){ - if( pLock ){ - pLock->nRef--; - if( pLock->nRef==0 ){ - if( pLock->pPrev ){ - assert( pLock->pPrev->pNext==pLock ); - pLock->pPrev->pNext = pLock->pNext; - }else{ - assert( lockList==pLock ); - lockList = pLock->pNext; - } - if( pLock->pNext ){ - assert( pLock->pNext->pPrev==pLock ); - pLock->pNext->pPrev = pLock->pPrev; - } - sqlite3_free(pLock); - } +** Close all file descriptors accumuated in the unixInodeInfo->pUnused list. +*/ +static void closePendingFds(unixFile *pFile){ + unixInodeInfo *pInode = pFile->pInode; + UnixUnusedFd *p; + UnixUnusedFd *pNext; + for(p=pInode->pUnused; p; p=pNext){ + pNext = p->pNext; + robust_close(pFile, p->fd, __LINE__); + sqlite3_free(p); } + pInode->pUnused = 0; } /* -** Release a unixOpenCnt structure previously allocated by findLockInfo(). +** Release a unixInodeInfo structure previously allocated by findInodeInfo(). +** +** The mutex entered using the unixEnterMutex() function must be held +** when this function is called. */ -static void releaseOpenCnt(struct unixOpenCnt *pOpen){ - if( pOpen ){ - pOpen->nRef--; - if( pOpen->nRef==0 ){ - if( pOpen->pPrev ){ - assert( pOpen->pPrev->pNext==pOpen ); - pOpen->pPrev->pNext = pOpen->pNext; +static void releaseInodeInfo(unixFile *pFile){ + unixInodeInfo *pInode = pFile->pInode; + assert( unixMutexHeld() ); + if( ALWAYS(pInode) ){ + pInode->nRef--; + if( pInode->nRef==0 ){ + assert( pInode->pShmNode==0 ); + closePendingFds(pFile); + if( pInode->pPrev ){ + assert( pInode->pPrev->pNext==pInode ); + pInode->pPrev->pNext = pInode->pNext; }else{ - assert( openList==pOpen ); - openList = pOpen->pNext; + assert( inodeList==pInode ); + inodeList = pInode->pNext; } - if( pOpen->pNext ){ - assert( pOpen->pNext->pPrev==pOpen ); - pOpen->pNext->pPrev = pOpen->pPrev; + if( pInode->pNext ){ + assert( pInode->pNext->pPrev==pInode ); + pInode->pNext->pPrev = pInode->pPrev; } - sqlite3_free(pOpen->aPending); - sqlite3_free(pOpen); + sqlite3_free(pInode); } } } /* -** Given a file descriptor, locate unixLockInfo and unixOpenCnt structures that -** describes that file descriptor. Create new ones if necessary. The -** return values might be uninitialized if an error occurs. +** Given a file descriptor, locate the unixInodeInfo object that +** describes that file descriptor. Create a new one if necessary. The +** return value might be uninitialized if an error occurs. +** +** The mutex entered using the unixEnterMutex() function must be held +** when this function is called. ** ** Return an appropriate error code. */ -static int findLockInfo( +static int findInodeInfo( unixFile *pFile, /* Unix file with file desc used in the key */ - struct unixLockInfo **ppLock, /* Return the unixLockInfo structure here */ - struct unixOpenCnt **ppOpen /* Return the unixOpenCnt structure here */ + unixInodeInfo **ppInode /* Return the unixInodeInfo object here */ ){ int rc; /* System call return code */ int fd; /* The file descriptor for pFile */ - struct unixLockKey lockKey; /* Lookup key for the unixLockInfo structure */ - struct unixFileId fileId; /* Lookup key for the unixOpenCnt struct */ + struct unixFileId fileId; /* Lookup key for the unixInodeInfo */ struct stat statbuf; /* Low-level file information */ - struct unixLockInfo *pLock = 0;/* Candidate unixLockInfo object */ - struct unixOpenCnt *pOpen; /* Candidate unixOpenCnt object */ + unixInodeInfo *pInode = 0; /* Candidate unixInodeInfo object */ + + assert( unixMutexHeld() ); /* Get low-level information about the file that we can used to ** create a unique name for the file. */ fd = pFile->h; - rc = fstat(fd, &statbuf); + rc = osFstat(fd, &statbuf); if( rc!=0 ){ pFile->lastErrno = errno; #ifdef EOVERFLOW @@ -21975,12 +26348,13 @@ static int findLockInfo( ** is a race condition such that another thread has already populated ** the first page of the database, no damage is done. */ - if( statbuf.st_size==0 ){ - rc = write(fd, "S", 1); + if( statbuf.st_size==0 && (pFile->fsFlags & SQLITE_FSFLAGS_IS_MSDOS)!=0 ){ + do{ rc = osWrite(fd, "S", 1); }while( rc<0 && errno==EINTR ); if( rc!=1 ){ + pFile->lastErrno = errno; return SQLITE_IOERR; } - rc = fstat(fd, &statbuf); + rc = osFstat(fd, &statbuf); if( rc!=0 ){ pFile->lastErrno = errno; return SQLITE_IOERR; @@ -21988,126 +26362,35 @@ static int findLockInfo( } #endif - memset(&lockKey, 0, sizeof(lockKey)); - lockKey.fid.dev = statbuf.st_dev; + memset(&fileId, 0, sizeof(fileId)); + fileId.dev = statbuf.st_dev; #if OS_VXWORKS - lockKey.fid.pId = pFile->pId; + fileId.pId = pFile->pId; #else - lockKey.fid.ino = statbuf.st_ino; + fileId.ino = statbuf.st_ino; #endif -#if SQLITE_THREADSAFE && defined(__linux__) - if( threadsOverrideEachOthersLocks<0 ){ - testThreadLockingBehavior(fd); + pInode = inodeList; + while( pInode && memcmp(&fileId, &pInode->fileId, sizeof(fileId)) ){ + pInode = pInode->pNext; } - lockKey.tid = threadsOverrideEachOthersLocks ? 0 : pthread_self(); -#endif - fileId = lockKey.fid; - if( ppLock!=0 ){ - pLock = lockList; - while( pLock && memcmp(&lockKey, &pLock->lockKey, sizeof(lockKey)) ){ - pLock = pLock->pNext; - } - if( pLock==0 ){ - pLock = sqlite3_malloc( sizeof(*pLock) ); - if( pLock==0 ){ - rc = SQLITE_NOMEM; - goto exit_findlockinfo; - } - pLock->lockKey = lockKey; - pLock->nRef = 1; - pLock->cnt = 0; - pLock->locktype = 0; - pLock->pNext = lockList; - pLock->pPrev = 0; - if( lockList ) lockList->pPrev = pLock; - lockList = pLock; - }else{ - pLock->nRef++; - } - *ppLock = pLock; - } - if( ppOpen!=0 ){ - pOpen = openList; - while( pOpen && memcmp(&fileId, &pOpen->fileId, sizeof(fileId)) ){ - pOpen = pOpen->pNext; - } - if( pOpen==0 ){ - pOpen = sqlite3_malloc( sizeof(*pOpen) ); - if( pOpen==0 ){ - releaseLockInfo(pLock); - rc = SQLITE_NOMEM; - goto exit_findlockinfo; - } - pOpen->fileId = fileId; - pOpen->nRef = 1; - pOpen->nLock = 0; - pOpen->nPending = 0; - pOpen->aPending = 0; - pOpen->pNext = openList; - pOpen->pPrev = 0; - if( openList ) openList->pPrev = pOpen; - openList = pOpen; -#if OS_VXWORKS - pOpen->pSem = NULL; - pOpen->aSemName[0] = '\0'; -#endif - }else{ - pOpen->nRef++; + if( pInode==0 ){ + pInode = sqlite3_malloc( sizeof(*pInode) ); + if( pInode==0 ){ + return SQLITE_NOMEM; } - *ppOpen = pOpen; - } - -exit_findlockinfo: - return rc; -} - -/* -** If we are currently in a different thread than the thread that the -** unixFile argument belongs to, then transfer ownership of the unixFile -** over to the current thread. -** -** A unixFile is only owned by a thread on systems that use LinuxThreads. -** -** Ownership transfer is only allowed if the unixFile is currently unlocked. -** If the unixFile is locked and an ownership is wrong, then return -** SQLITE_MISUSE. SQLITE_OK is returned if everything works. -*/ -#if SQLITE_THREADSAFE && defined(__linux__) -static int transferOwnership(unixFile *pFile){ - int rc; - pthread_t hSelf; - if( threadsOverrideEachOthersLocks ){ - /* Ownership transfers not needed on this system */ - return SQLITE_OK; - } - hSelf = pthread_self(); - if( pthread_equal(pFile->tid, hSelf) ){ - /* We are still in the same thread */ - OSTRACE1("No-transfer, same thread\n"); - return SQLITE_OK; - } - if( pFile->locktype!=NO_LOCK ){ - /* We cannot change ownership while we are holding a lock! */ - return SQLITE_MISUSE; - } - OSTRACE4("Transfer ownership of %d from %d to %d\n", - pFile->h, pFile->tid, hSelf); - pFile->tid = hSelf; - if (pFile->pLock != NULL) { - releaseLockInfo(pFile->pLock); - rc = findLockInfo(pFile, &pFile->pLock, 0); - OSTRACE5("LOCK %d is now %s(%s,%d)\n", pFile->h, - locktypeName(pFile->locktype), - locktypeName(pFile->pLock->locktype), pFile->pLock->cnt); - return rc; - } else { - return SQLITE_OK; + memset(pInode, 0, sizeof(*pInode)); + memcpy(&pInode->fileId, &fileId, sizeof(fileId)); + pInode->nRef = 1; + pInode->pNext = inodeList; + pInode->pPrev = 0; + if( inodeList ) inodeList->pPrev = pInode; + inodeList = pInode; + }else{ + pInode->nRef++; } + *ppInode = pInode; + return SQLITE_OK; } -#else /* if not SQLITE_THREADSAFE */ - /* On single-threaded builds, ownership transfer is a no-op */ -# define transferOwnership(X) SQLITE_OK -#endif /* SQLITE_THREADSAFE */ /* @@ -22124,26 +26407,25 @@ static int unixCheckReservedLock(sqlite3_file *id, int *pResOut){ SimulateIOError( return SQLITE_IOERR_CHECKRESERVEDLOCK; ); assert( pFile ); - unixEnterMutex(); /* Because pFile->pLock is shared across threads */ + unixEnterMutex(); /* Because pFile->pInode is shared across threads */ /* Check if a thread in this process holds such a lock */ - if( pFile->pLock->locktype>SHARED_LOCK ){ + if( pFile->pInode->eFileLock>SHARED_LOCK ){ reserved = 1; } /* Otherwise see if some other process holds it. */ #ifndef __DJGPP__ - if( !reserved ){ + if( !reserved && !pFile->pInode->bProcessLock ){ struct flock lock; lock.l_whence = SEEK_SET; lock.l_start = RESERVED_BYTE; lock.l_len = 1; lock.l_type = F_WRLCK; - if (-1 == fcntl(pFile->h, F_GETLK, &lock)) { - int tErrno = errno; - rc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_CHECKRESERVEDLOCK); - pFile->lastErrno = tErrno; + if( osFcntl(pFile->h, F_GETLK, &lock) ){ + rc = SQLITE_IOERR_CHECKRESERVEDLOCK; + pFile->lastErrno = errno; } else if( lock.l_type!=F_UNLCK ){ reserved = 1; } @@ -22151,14 +26433,61 @@ static int unixCheckReservedLock(sqlite3_file *id, int *pResOut){ #endif unixLeaveMutex(); - OSTRACE4("TEST WR-LOCK %d %d %d\n", pFile->h, rc, reserved); + OSTRACE(("TEST WR-LOCK %d %d %d (unix)\n", pFile->h, rc, reserved)); *pResOut = reserved; return rc; } /* -** Lock the file with the lock specified by parameter locktype - one +** Attempt to set a system-lock on the file pFile. The lock is +** described by pLock. +** +** If the pFile was opened read/write from unix-excl, then the only lock +** ever obtained is an exclusive lock, and it is obtained exactly once +** the first time any lock is attempted. All subsequent system locking +** operations become no-ops. Locking operations still happen internally, +** in order to coordinate access between separate database connections +** within this process, but all of that is handled in memory and the +** operating system does not participate. +** +** This function is a pass-through to fcntl(F_SETLK) if pFile is using +** any VFS other than "unix-excl" or if pFile is opened on "unix-excl" +** and is read-only. +** +** Zero is returned if the call completes successfully, or -1 if a call +** to fcntl() fails. In this case, errno is set appropriately (by fcntl()). +*/ +static int unixFileLock(unixFile *pFile, struct flock *pLock){ + int rc; + unixInodeInfo *pInode = pFile->pInode; + assert( unixMutexHeld() ); + assert( pInode!=0 ); + if( ((pFile->ctrlFlags & UNIXFILE_EXCL)!=0 || pInode->bProcessLock) + && ((pFile->ctrlFlags & UNIXFILE_RDONLY)==0) + ){ + if( pInode->bProcessLock==0 ){ + struct flock lock; + assert( pInode->nLock==0 ); + lock.l_whence = SEEK_SET; + lock.l_start = SHARED_FIRST; + lock.l_len = SHARED_SIZE; + lock.l_type = F_WRLCK; + rc = osFcntl(pFile->h, F_SETLK, &lock); + if( rc<0 ) return rc; + pInode->bProcessLock = 1; + pInode->nLock++; + }else{ + rc = 0; + } + }else{ + rc = osFcntl(pFile->h, F_SETLK, pLock); + } + return rc; +} + +/* +** Lock the file with the lock specified by parameter eFileLock - one ** of the following: ** ** (1) SHARED_LOCK @@ -22181,7 +26510,7 @@ static int unixCheckReservedLock(sqlite3_file *id, int *pResOut){ ** This routine will only increase a lock. Use the sqlite3OsUnlock() ** routine to lower a locking level. */ -static int unixLock(sqlite3_file *id, int locktype){ +static int unixLock(sqlite3_file *id, int eFileLock){ /* The following describes the implementation of the various locks and ** lock transitions in terms of the POSIX advisory shared and exclusive ** lock primitives (called read-locks and write-locks below, to avoid @@ -22222,49 +26551,44 @@ static int unixLock(sqlite3_file *id, int locktype){ */ int rc = SQLITE_OK; unixFile *pFile = (unixFile*)id; - struct unixLockInfo *pLock = pFile->pLock; + unixInodeInfo *pInode; struct flock lock; - int s; + int tErrno = 0; assert( pFile ); - OSTRACE7("LOCK %d %s was %s(%s,%d) pid=%d\n", pFile->h, - locktypeName(locktype), locktypeName(pFile->locktype), - locktypeName(pLock->locktype), pLock->cnt , getpid()); + OSTRACE(("LOCK %d %s was %s(%s,%d) pid=%d (unix)\n", pFile->h, + azFileLock(eFileLock), azFileLock(pFile->eFileLock), + azFileLock(pFile->pInode->eFileLock), pFile->pInode->nShared , getpid())); /* If there is already a lock of this type or more restrictive on the ** unixFile, do nothing. Don't use the end_lock: exit path, as ** unixEnterMutex() hasn't been called yet. */ - if( pFile->locktype>=locktype ){ - OSTRACE3("LOCK %d %s ok (already held)\n", pFile->h, - locktypeName(locktype)); + if( pFile->eFileLock>=eFileLock ){ + OSTRACE(("LOCK %d %s ok (already held) (unix)\n", pFile->h, + azFileLock(eFileLock))); return SQLITE_OK; } - /* Make sure the locking sequence is correct + /* Make sure the locking sequence is correct. + ** (1) We never move from unlocked to anything higher than shared lock. + ** (2) SQLite never explicitly requests a pendig lock. + ** (3) A shared lock is always held when a reserve lock is requested. */ - assert( pFile->locktype!=NO_LOCK || locktype==SHARED_LOCK ); - assert( locktype!=PENDING_LOCK ); - assert( locktype!=RESERVED_LOCK || pFile->locktype==SHARED_LOCK ); + assert( pFile->eFileLock!=NO_LOCK || eFileLock==SHARED_LOCK ); + assert( eFileLock!=PENDING_LOCK ); + assert( eFileLock!=RESERVED_LOCK || pFile->eFileLock==SHARED_LOCK ); - /* This mutex is needed because pFile->pLock is shared across threads + /* This mutex is needed because pFile->pInode is shared across threads */ unixEnterMutex(); - - /* Make sure the current thread owns the pFile. - */ - rc = transferOwnership(pFile); - if( rc!=SQLITE_OK ){ - unixLeaveMutex(); - return rc; - } - pLock = pFile->pLock; + pInode = pFile->pInode; /* If some thread using this PID has a lock via a different unixFile* ** handle that precludes the requested lock, return BUSY. */ - if( (pFile->locktype!=pLock->locktype && - (pLock->locktype>=PENDING_LOCK || locktype>SHARED_LOCK)) + if( (pFile->eFileLock!=pInode->eFileLock && + (pInode->eFileLock>=PENDING_LOCK || eFileLock>SHARED_LOCK)) ){ rc = SQLITE_BUSY; goto end_lock; @@ -22274,35 +26598,33 @@ static int unixLock(sqlite3_file *id, int locktype){ ** has a SHARED or RESERVED lock, then increment reference counts and ** return SQLITE_OK. */ - if( locktype==SHARED_LOCK && - (pLock->locktype==SHARED_LOCK || pLock->locktype==RESERVED_LOCK) ){ - assert( locktype==SHARED_LOCK ); - assert( pFile->locktype==0 ); - assert( pLock->cnt>0 ); - pFile->locktype = SHARED_LOCK; - pLock->cnt++; - pFile->pOpen->nLock++; + if( eFileLock==SHARED_LOCK && + (pInode->eFileLock==SHARED_LOCK || pInode->eFileLock==RESERVED_LOCK) ){ + assert( eFileLock==SHARED_LOCK ); + assert( pFile->eFileLock==0 ); + assert( pInode->nShared>0 ); + pFile->eFileLock = SHARED_LOCK; + pInode->nShared++; + pInode->nLock++; goto end_lock; } - lock.l_len = 1L; - - lock.l_whence = SEEK_SET; /* A PENDING lock is needed before acquiring a SHARED lock and before ** acquiring an EXCLUSIVE lock. For the SHARED lock, the PENDING will ** be released. */ - if( locktype==SHARED_LOCK - || (locktype==EXCLUSIVE_LOCK && pFile->locktypeeFileLockh, F_SETLK, &lock); - if( s==(-1) ){ - int tErrno = errno; + if( unixFileLock(pFile, &lock) ){ + tErrno = errno; rc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_LOCK); - if( IS_LOCK_ERROR(rc) ){ + if( rc!=SQLITE_BUSY ){ pFile->lastErrno = tErrno; } goto end_lock; @@ -22313,43 +26635,40 @@ static int unixLock(sqlite3_file *id, int locktype){ /* If control gets to this point, then actually go ahead and make ** operating system calls for the specified lock. */ - if( locktype==SHARED_LOCK ){ - int tErrno = 0; - assert( pLock->cnt==0 ); - assert( pLock->locktype==0 ); + if( eFileLock==SHARED_LOCK ){ + assert( pInode->nShared==0 ); + assert( pInode->eFileLock==0 ); + assert( rc==SQLITE_OK ); /* Now get the read-lock */ lock.l_start = SHARED_FIRST; lock.l_len = SHARED_SIZE; - if( (s = fcntl(pFile->h, F_SETLK, &lock))==(-1) ){ + if( unixFileLock(pFile, &lock) ){ tErrno = errno; + rc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_LOCK); } + /* Drop the temporary PENDING lock */ lock.l_start = PENDING_BYTE; lock.l_len = 1L; lock.l_type = F_UNLCK; - if( fcntl(pFile->h, F_SETLK, &lock)!=0 ){ - if( s != -1 ){ - /* This could happen with a network mount */ - tErrno = errno; - rc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_UNLOCK); - if( IS_LOCK_ERROR(rc) ){ - pFile->lastErrno = tErrno; - } - goto end_lock; - } + if( unixFileLock(pFile, &lock) && rc==SQLITE_OK ){ + /* This could happen with a network mount */ + tErrno = errno; + rc = SQLITE_IOERR_UNLOCK; } - if( s==(-1) ){ - rc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_LOCK); - if( IS_LOCK_ERROR(rc) ){ + + if( rc ){ + if( rc!=SQLITE_BUSY ){ pFile->lastErrno = tErrno; } + goto end_lock; }else{ - pFile->locktype = SHARED_LOCK; - pFile->pOpen->nLock++; - pLock->cnt = 1; + pFile->eFileLock = SHARED_LOCK; + pInode->nLock++; + pInode->nShared = 1; } - }else if( locktype==EXCLUSIVE_LOCK && pLock->cnt>1 ){ + }else if( eFileLock==EXCLUSIVE_LOCK && pInode->nShared>1 ){ /* We are trying for an exclusive lock but another thread in this ** same process is still holding a shared lock. */ rc = SQLITE_BUSY; @@ -22358,39 +26677,37 @@ static int unixLock(sqlite3_file *id, int locktype){ ** assumed that there is a SHARED or greater lock on the file ** already. */ - assert( 0!=pFile->locktype ); + assert( 0!=pFile->eFileLock ); lock.l_type = F_WRLCK; - switch( locktype ){ - case RESERVED_LOCK: - lock.l_start = RESERVED_BYTE; - break; - case EXCLUSIVE_LOCK: - lock.l_start = SHARED_FIRST; - lock.l_len = SHARED_SIZE; - break; - default: - assert(0); + + assert( eFileLock==RESERVED_LOCK || eFileLock==EXCLUSIVE_LOCK ); + if( eFileLock==RESERVED_LOCK ){ + lock.l_start = RESERVED_BYTE; + lock.l_len = 1L; + }else{ + lock.l_start = SHARED_FIRST; + lock.l_len = SHARED_SIZE; } - s = fcntl(pFile->h, F_SETLK, &lock); - if( s==(-1) ){ - int tErrno = errno; + + if( unixFileLock(pFile, &lock) ){ + tErrno = errno; rc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_LOCK); - if( IS_LOCK_ERROR(rc) ){ + if( rc!=SQLITE_BUSY ){ pFile->lastErrno = tErrno; } } } -#ifndef NDEBUG +#ifdef SQLITE_DEBUG /* Set up the transaction-counter change checking flags when ** transitioning from a SHARED to a RESERVED lock. The change ** from SHARED to RESERVED marks the beginning of a normal ** write operation (not a hot journal rollback). */ if( rc==SQLITE_OK - && pFile->locktype<=SHARED_LOCK - && locktype==RESERVED_LOCK + && pFile->eFileLock<=SHARED_LOCK + && eFileLock==RESERVED_LOCK ){ pFile->transCntrChng = 0; pFile->dbUpdate = 0; @@ -22400,56 +26717,68 @@ static int unixLock(sqlite3_file *id, int locktype){ if( rc==SQLITE_OK ){ - pFile->locktype = locktype; - pLock->locktype = locktype; - }else if( locktype==EXCLUSIVE_LOCK ){ - pFile->locktype = PENDING_LOCK; - pLock->locktype = PENDING_LOCK; + pFile->eFileLock = eFileLock; + pInode->eFileLock = eFileLock; + }else if( eFileLock==EXCLUSIVE_LOCK ){ + pFile->eFileLock = PENDING_LOCK; + pInode->eFileLock = PENDING_LOCK; } end_lock: unixLeaveMutex(); - OSTRACE4("LOCK %d %s %s\n", pFile->h, locktypeName(locktype), - rc==SQLITE_OK ? "ok" : "failed"); + OSTRACE(("LOCK %d %s %s (unix)\n", pFile->h, azFileLock(eFileLock), + rc==SQLITE_OK ? "ok" : "failed")); return rc; } /* -** Lower the locking level on file descriptor pFile to locktype. locktype +** Add the file descriptor used by file handle pFile to the corresponding +** pUnused list. +*/ +static void setPendingFd(unixFile *pFile){ + unixInodeInfo *pInode = pFile->pInode; + UnixUnusedFd *p = pFile->pUnused; + p->pNext = pInode->pUnused; + pInode->pUnused = p; + pFile->h = -1; + pFile->pUnused = 0; +} + +/* +** Lower the locking level on file descriptor pFile to eFileLock. eFileLock ** must be either NO_LOCK or SHARED_LOCK. ** ** If the locking level of the file descriptor is already at or below ** the requested locking level, this routine is a no-op. +** +** If handleNFSUnlock is true, then on downgrading an EXCLUSIVE_LOCK to SHARED +** the byte range is divided into 2 parts and the first part is unlocked then +** set to a read lock, then the other part is simply unlocked. This works +** around a bug in BSD NFS lockd (also seen on MacOSX 10.3+) that fails to +** remove the write lock on a region when a read lock is set. */ -static int unixUnlock(sqlite3_file *id, int locktype){ - struct unixLockInfo *pLock; +static int posixUnlock(sqlite3_file *id, int eFileLock, int handleNFSUnlock){ + unixFile *pFile = (unixFile*)id; + unixInodeInfo *pInode; struct flock lock; int rc = SQLITE_OK; - unixFile *pFile = (unixFile*)id; - int h; assert( pFile ); - OSTRACE7("UNLOCK %d %d was %d(%d,%d) pid=%d\n", pFile->h, locktype, - pFile->locktype, pFile->pLock->locktype, pFile->pLock->cnt, getpid()); + OSTRACE(("UNLOCK %d %d was %d(%d,%d) pid=%d (unix)\n", pFile->h, eFileLock, + pFile->eFileLock, pFile->pInode->eFileLock, pFile->pInode->nShared, + getpid())); - assert( locktype<=SHARED_LOCK ); - if( pFile->locktype<=locktype ){ + assert( eFileLock<=SHARED_LOCK ); + if( pFile->eFileLock<=eFileLock ){ return SQLITE_OK; } - if( CHECK_THREADID(pFile) ){ - return SQLITE_MISUSE; - } unixEnterMutex(); - h = pFile->h; - pLock = pFile->pLock; - assert( pLock->cnt!=0 ); - if( pFile->locktype>SHARED_LOCK ){ - assert( pLock->locktype==pFile->locktype ); - SimulateIOErrorBenign(1); - SimulateIOError( h=(-1) ) - SimulateIOErrorBenign(0); + pInode = pFile->pInode; + assert( pInode->nShared!=0 ); + if( pFile->eFileLock>SHARED_LOCK ){ + assert( pInode->eFileLock==pFile->eFileLock ); -#ifndef NDEBUG +#ifdef SQLITE_DEBUG /* When reducing a lock such that other processes can start ** reading the database file again, make sure that the ** transaction counter was updated if any part of the database @@ -22458,68 +26787,114 @@ static int unixUnlock(sqlite3_file *id, int locktype){ ** the file has changed and hence might not know to flush their ** cache. The use of a stale cache can lead to database corruption. */ - assert( pFile->inNormalWrite==0 - || pFile->dbUpdate==0 - || pFile->transCntrChng==1 ); pFile->inNormalWrite = 0; #endif + /* downgrading to a shared lock on NFS involves clearing the write lock + ** before establishing the readlock - to avoid a race condition we downgrade + ** the lock in 2 blocks, so that part of the range will be covered by a + ** write lock until the rest is covered by a read lock: + ** 1: [WWWWW] + ** 2: [....W] + ** 3: [RRRRW] + ** 4: [RRRR.] + */ + if( eFileLock==SHARED_LOCK ){ - if( locktype==SHARED_LOCK ){ - lock.l_type = F_RDLCK; - lock.l_whence = SEEK_SET; - lock.l_start = SHARED_FIRST; - lock.l_len = SHARED_SIZE; - if( fcntl(h, F_SETLK, &lock)==(-1) ){ - int tErrno = errno; - rc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_RDLOCK); - if( IS_LOCK_ERROR(rc) ){ - pFile->lastErrno = tErrno; +#if !defined(__APPLE__) || !SQLITE_ENABLE_LOCKING_STYLE + (void)handleNFSUnlock; + assert( handleNFSUnlock==0 ); +#endif +#if defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE + if( handleNFSUnlock ){ + int tErrno; /* Error code from system call errors */ + off_t divSize = SHARED_SIZE - 1; + + lock.l_type = F_UNLCK; + lock.l_whence = SEEK_SET; + lock.l_start = SHARED_FIRST; + lock.l_len = divSize; + if( unixFileLock(pFile, &lock)==(-1) ){ + tErrno = errno; + rc = SQLITE_IOERR_UNLOCK; + if( IS_LOCK_ERROR(rc) ){ + pFile->lastErrno = tErrno; + } + goto end_unlock; + } + lock.l_type = F_RDLCK; + lock.l_whence = SEEK_SET; + lock.l_start = SHARED_FIRST; + lock.l_len = divSize; + if( unixFileLock(pFile, &lock)==(-1) ){ + tErrno = errno; + rc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_RDLOCK); + if( IS_LOCK_ERROR(rc) ){ + pFile->lastErrno = tErrno; + } + goto end_unlock; + } + lock.l_type = F_UNLCK; + lock.l_whence = SEEK_SET; + lock.l_start = SHARED_FIRST+divSize; + lock.l_len = SHARED_SIZE-divSize; + if( unixFileLock(pFile, &lock)==(-1) ){ + tErrno = errno; + rc = SQLITE_IOERR_UNLOCK; + if( IS_LOCK_ERROR(rc) ){ + pFile->lastErrno = tErrno; + } + goto end_unlock; + } + }else +#endif /* defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE */ + { + lock.l_type = F_RDLCK; + lock.l_whence = SEEK_SET; + lock.l_start = SHARED_FIRST; + lock.l_len = SHARED_SIZE; + if( unixFileLock(pFile, &lock) ){ + /* In theory, the call to unixFileLock() cannot fail because another + ** process is holding an incompatible lock. If it does, this + ** indicates that the other process is not following the locking + ** protocol. If this happens, return SQLITE_IOERR_RDLOCK. Returning + ** SQLITE_BUSY would confuse the upper layer (in practice it causes + ** an assert to fail). */ + rc = SQLITE_IOERR_RDLOCK; + pFile->lastErrno = errno; + goto end_unlock; } - goto end_unlock; } } lock.l_type = F_UNLCK; lock.l_whence = SEEK_SET; lock.l_start = PENDING_BYTE; lock.l_len = 2L; assert( PENDING_BYTE+1==RESERVED_BYTE ); - if( fcntl(h, F_SETLK, &lock)!=(-1) ){ - pLock->locktype = SHARED_LOCK; + if( unixFileLock(pFile, &lock)==0 ){ + pInode->eFileLock = SHARED_LOCK; }else{ - int tErrno = errno; - rc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_UNLOCK); - if( IS_LOCK_ERROR(rc) ){ - pFile->lastErrno = tErrno; - } + rc = SQLITE_IOERR_UNLOCK; + pFile->lastErrno = errno; goto end_unlock; } } - if( locktype==NO_LOCK ){ - struct unixOpenCnt *pOpen; - int rc2 = SQLITE_OK; - + if( eFileLock==NO_LOCK ){ /* Decrement the shared lock counter. Release the lock using an ** OS call only when all threads in this same process have released ** the lock. */ - pLock->cnt--; - if( pLock->cnt==0 ){ + pInode->nShared--; + if( pInode->nShared==0 ){ lock.l_type = F_UNLCK; lock.l_whence = SEEK_SET; lock.l_start = lock.l_len = 0L; - SimulateIOErrorBenign(1); - SimulateIOError( h=(-1) ) - SimulateIOErrorBenign(0); - if( fcntl(h, F_SETLK, &lock)!=(-1) ){ - pLock->locktype = NO_LOCK; + if( unixFileLock(pFile, &lock)==0 ){ + pInode->eFileLock = NO_LOCK; }else{ - int tErrno = errno; - rc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_UNLOCK); - if( IS_LOCK_ERROR(rc) ){ - pFile->lastErrno = tErrno; - } - pLock->locktype = NO_LOCK; - pFile->locktype = NO_LOCK; + rc = SQLITE_IOERR_UNLOCK; + pFile->lastErrno = errno; + pInode->eFileLock = NO_LOCK; + pFile->eFileLock = NO_LOCK; } } @@ -22527,40 +26902,30 @@ static int unixUnlock(sqlite3_file *id, int locktype){ ** count reaches zero, close any other file descriptors whose close ** was deferred because of outstanding locks. */ - pOpen = pFile->pOpen; - pOpen->nLock--; - assert( pOpen->nLock>=0 ); - if( pOpen->nLock==0 && pOpen->nPending>0 ){ - int i; - for(i=0; inPending; i++){ - /* close pending fds, but if closing fails don't free the array - ** assign -1 to the successfully closed descriptors and record the - ** error. The next attempt to unlock will try again. */ - if( pOpen->aPending[i] < 0 ) continue; - if( close(pOpen->aPending[i]) ){ - pFile->lastErrno = errno; - rc2 = SQLITE_IOERR_CLOSE; - }else{ - pOpen->aPending[i] = -1; - } - } - if( rc2==SQLITE_OK ){ - sqlite3_free(pOpen->aPending); - pOpen->nPending = 0; - pOpen->aPending = 0; - } - } - if( rc==SQLITE_OK ){ - rc = rc2; + pInode->nLock--; + assert( pInode->nLock>=0 ); + if( pInode->nLock==0 ){ + closePendingFds(pFile); } } end_unlock: unixLeaveMutex(); - if( rc==SQLITE_OK ) pFile->locktype = locktype; + if( rc==SQLITE_OK ) pFile->eFileLock = eFileLock; return rc; } +/* +** Lower the locking level on file descriptor pFile to eFileLock. eFileLock +** must be either NO_LOCK or SHARED_LOCK. +** +** If the locking level of the file descriptor is already at or below +** the requested locking level, this routine is a no-op. +*/ +static int unixUnlock(sqlite3_file *id, int eFileLock){ + return posixUnlock(id, eFileLock, 0); +} + /* ** This function performs the parts of the "close file" operation ** common to all locking schemes. It closes the directory and file @@ -22573,36 +26938,23 @@ static int unixUnlock(sqlite3_file *id, int locktype){ */ static int closeUnixFile(sqlite3_file *id){ unixFile *pFile = (unixFile*)id; - if( pFile ){ - if( pFile->dirfd>=0 ){ - int err = close(pFile->dirfd); - if( err ){ - pFile->lastErrno = errno; - return SQLITE_IOERR_DIR_CLOSE; - }else{ - pFile->dirfd=-1; - } - } - if( pFile->h>=0 ){ - int err = close(pFile->h); - if( err ){ - pFile->lastErrno = errno; - return SQLITE_IOERR_CLOSE; - } - } + if( pFile->h>=0 ){ + robust_close(pFile, pFile->h, __LINE__); + pFile->h = -1; + } #if OS_VXWORKS - if( pFile->pId ){ - if( pFile->isDelete ){ - unlink(pFile->pId->zCanonicalName); - } - vxworksReleaseFileId(pFile->pId); - pFile->pId = 0; + if( pFile->pId ){ + if( pFile->ctrlFlags & UNIXFILE_DELETE ){ + osUnlink(pFile->pId->zCanonicalName); } -#endif - OSTRACE2("CLOSE %-3d\n", pFile->h); - OpenCounter(-1); - memset(pFile, 0, sizeof(unixFile)); + vxworksReleaseFileId(pFile->pId); + pFile->pId = 0; } +#endif + OSTRACE(("CLOSE %-3d\n", pFile->h)); + OpenCounter(-1); + sqlite3_free(pFile->pUnused); + memset(pFile, 0, sizeof(unixFile)); return SQLITE_OK; } @@ -22611,33 +26963,25 @@ static int closeUnixFile(sqlite3_file *id){ */ static int unixClose(sqlite3_file *id){ int rc = SQLITE_OK; - if( id ){ - unixFile *pFile = (unixFile *)id; - unixUnlock(id, NO_LOCK); - unixEnterMutex(); - if( pFile->pOpen && pFile->pOpen->nLock ){ - /* If there are outstanding locks, do not actually close the file just - ** yet because that would clear those locks. Instead, add the file - ** descriptor to pOpen->aPending. It will be automatically closed when - ** the last lock is cleared. - */ - int *aNew; - struct unixOpenCnt *pOpen = pFile->pOpen; - aNew = sqlite3_realloc(pOpen->aPending, (pOpen->nPending+1)*sizeof(int) ); - if( aNew==0 ){ - /* If a malloc fails, just leak the file descriptor */ - }else{ - pOpen->aPending = aNew; - pOpen->aPending[pOpen->nPending] = pFile->h; - pOpen->nPending++; - pFile->h = -1; - } - } - releaseLockInfo(pFile->pLock); - releaseOpenCnt(pFile->pOpen); - rc = closeUnixFile(id); - unixLeaveMutex(); + unixFile *pFile = (unixFile *)id; + unixUnlock(id, NO_LOCK); + unixEnterMutex(); + + /* unixFile.pInode is always valid here. Otherwise, a different close + ** routine (e.g. nolockClose()) would be called instead. + */ + assert( pFile->pInode->nLock>0 || pFile->pInode->bProcessLock==0 ); + if( ALWAYS(pFile->pInode) && pFile->pInode->nLock ){ + /* If there are outstanding locks, do not actually close the file just + ** yet because that would clear those locks. Instead, add the file + ** descriptor to pInode->pUnused list. It will be automatically closed + ** when the last lock is cleared. + */ + setPendingFd(pFile); } + releaseInodeInfo(pFile); + rc = closeUnixFile(id); + unixLeaveMutex(); return rc; } @@ -22688,9 +27032,9 @@ static int nolockClose(sqlite3_file *id) { /****************************************************************************** ************************* Begin dot-file Locking ****************************** ** -** The dotfile locking implementation uses the existing of separate lock -** files in order to control access to the database. This works on just -** about every filesystem imaginable. But there are serious downsides: +** The dotfile locking implementation uses the existance of separate lock +** files (really a directory) to control access to the database. This works +** on just about every filesystem imaginable. But there are serious downsides: ** ** (1) There is zero concurrency. A single reader blocks all other ** connections from reading or writing the database. @@ -22701,15 +27045,15 @@ static int nolockClose(sqlite3_file *id) { ** Nevertheless, a dotlock is an appropriate locking mode for use if no ** other locking strategy is available. ** -** Dotfile locking works by creating a file in the same directory as the -** database and with the same name but with a ".lock" extension added. -** The existance of a lock file implies an EXCLUSIVE lock. All other lock -** types (SHARED, RESERVED, PENDING) are mapped into EXCLUSIVE. +** Dotfile locking works by creating a subdirectory in the same directory as +** the database and with the same name but with a ".lock" extension added. +** The existance of a lock directory implies an EXCLUSIVE lock. All other +** lock types (SHARED, RESERVED, PENDING) are mapped into EXCLUSIVE. */ /* ** The file suffix added to the data base filename in order to create the -** lock file. +** lock directory. */ #define DOTLOCK_SUFFIX ".lock" @@ -22733,22 +27077,22 @@ static int dotlockCheckReservedLock(sqlite3_file *id, int *pResOut) { assert( pFile ); /* Check if a thread in this process holds such a lock */ - if( pFile->locktype>SHARED_LOCK ){ + if( pFile->eFileLock>SHARED_LOCK ){ /* Either this connection or some other connection in the same process ** holds a lock on the file. No need to check further. */ reserved = 1; }else{ /* The lock is held if and only if the lockfile exists */ const char *zLockFile = (const char*)pFile->lockingContext; - reserved = access(zLockFile, 0)==0; + reserved = osAccess(zLockFile, 0)==0; } - OSTRACE4("TEST WR-LOCK %d %d %d\n", pFile->h, rc, reserved); + OSTRACE(("TEST WR-LOCK %d %d %d (dotlock)\n", pFile->h, rc, reserved)); *pResOut = reserved; return rc; } /* -** Lock the file with the lock specified by parameter locktype - one +** Lock the file with the lock specified by parameter eFileLock - one ** of the following: ** ** (1) SHARED_LOCK @@ -22774,9 +27118,8 @@ static int dotlockCheckReservedLock(sqlite3_file *id, int *pResOut) { ** With dotfile locking, we really only support state (4): EXCLUSIVE. ** But we track the other locking levels internally. */ -static int dotlockLock(sqlite3_file *id, int locktype) { +static int dotlockLock(sqlite3_file *id, int eFileLock) { unixFile *pFile = (unixFile*)id; - int fd; char *zLockFile = (char *)pFile->lockingContext; int rc = SQLITE_OK; @@ -22784,19 +27127,21 @@ static int dotlockLock(sqlite3_file *id, int locktype) { /* If we have any lock, then the lock file already exists. All we have ** to do is adjust our internal record of the lock level. */ - if( pFile->locktype > NO_LOCK ){ - pFile->locktype = locktype; -#if !OS_VXWORKS + if( pFile->eFileLock > NO_LOCK ){ + pFile->eFileLock = eFileLock; /* Always update the timestamp on the old file */ +#ifdef HAVE_UTIME + utime(zLockFile, NULL); +#else utimes(zLockFile, NULL); #endif return SQLITE_OK; } /* grab an exclusive lock */ - fd = open(zLockFile,O_RDONLY|O_CREAT|O_EXCL,0600); - if( fd<0 ){ - /* failed to open/create the file, someone else may have stolen the lock */ + rc = osMkdir(zLockFile, 0777); + if( rc<0 ){ + /* failed to open/create the lock directory */ int tErrno = errno; if( EEXIST == tErrno ){ rc = SQLITE_BUSY; @@ -22808,18 +27153,14 @@ static int dotlockLock(sqlite3_file *id, int locktype) { } return rc; } - if( close(fd) ){ - pFile->lastErrno = errno; - rc = SQLITE_IOERR_CLOSE; - } /* got it, set the type and return ok */ - pFile->locktype = locktype; + pFile->eFileLock = eFileLock; return rc; } /* -** Lower the locking level on file descriptor pFile to locktype. locktype +** Lower the locking level on file descriptor pFile to eFileLock. eFileLock ** must be either NO_LOCK or SHARED_LOCK. ** ** If the locking level of the file descriptor is already at or below @@ -22827,42 +27168,45 @@ static int dotlockLock(sqlite3_file *id, int locktype) { ** ** When the locking level reaches NO_LOCK, delete the lock file. */ -static int dotlockUnlock(sqlite3_file *id, int locktype) { +static int dotlockUnlock(sqlite3_file *id, int eFileLock) { unixFile *pFile = (unixFile*)id; char *zLockFile = (char *)pFile->lockingContext; + int rc; assert( pFile ); - OSTRACE5("UNLOCK %d %d was %d pid=%d\n", pFile->h, locktype, - pFile->locktype, getpid()); - assert( locktype<=SHARED_LOCK ); + OSTRACE(("UNLOCK %d %d was %d pid=%d (dotlock)\n", pFile->h, eFileLock, + pFile->eFileLock, getpid())); + assert( eFileLock<=SHARED_LOCK ); /* no-op if possible */ - if( pFile->locktype==locktype ){ + if( pFile->eFileLock==eFileLock ){ return SQLITE_OK; } /* To downgrade to shared, simply update our internal notion of the ** lock state. No need to mess with the file on disk. */ - if( locktype==SHARED_LOCK ){ - pFile->locktype = SHARED_LOCK; + if( eFileLock==SHARED_LOCK ){ + pFile->eFileLock = SHARED_LOCK; return SQLITE_OK; } /* To fully unlock the database, delete the lock file */ - assert( locktype==NO_LOCK ); - if( unlink(zLockFile) ){ - int rc = 0; + assert( eFileLock==NO_LOCK ); + rc = osRmdir(zLockFile); + if( rc<0 && errno==ENOTDIR ) rc = osUnlink(zLockFile); + if( rc<0 ){ int tErrno = errno; + rc = 0; if( ENOENT != tErrno ){ - rc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_UNLOCK); + rc = SQLITE_IOERR_UNLOCK; } if( IS_LOCK_ERROR(rc) ){ pFile->lastErrno = tErrno; } return rc; } - pFile->locktype = NO_LOCK; + pFile->eFileLock = NO_LOCK; return SQLITE_OK; } @@ -22899,6 +27243,20 @@ static int dotlockClose(sqlite3_file *id) { */ #if SQLITE_ENABLE_LOCKING_STYLE && !OS_VXWORKS +/* +** Retry flock() calls that fail with EINTR +*/ +#ifdef EINTR +static int robust_flock(int fd, int op){ + int rc; + do{ rc = flock(fd,op); }while( rc<0 && errno==EINTR ); + return rc; +} +#else +# define robust_flock(a,b) flock(a,b) +#endif + + /* ** This routine checks if there is a RESERVED lock held on the specified ** file by this or any other process. If such a lock is held, set *pResOut @@ -22915,21 +27273,21 @@ static int flockCheckReservedLock(sqlite3_file *id, int *pResOut){ assert( pFile ); /* Check if a thread in this process holds such a lock */ - if( pFile->locktype>SHARED_LOCK ){ + if( pFile->eFileLock>SHARED_LOCK ){ reserved = 1; } /* Otherwise see if some other process holds it. */ if( !reserved ){ /* attempt to get the lock */ - int lrc = flock(pFile->h, LOCK_EX | LOCK_NB); + int lrc = robust_flock(pFile->h, LOCK_EX | LOCK_NB); if( !lrc ){ /* got the lock, unlock it */ - lrc = flock(pFile->h, LOCK_UN); + lrc = robust_flock(pFile->h, LOCK_UN); if ( lrc ) { int tErrno = errno; /* unlock failed with an error */ - lrc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_UNLOCK); + lrc = SQLITE_IOERR_UNLOCK; if( IS_LOCK_ERROR(lrc) ){ pFile->lastErrno = tErrno; rc = lrc; @@ -22946,7 +27304,7 @@ static int flockCheckReservedLock(sqlite3_file *id, int *pResOut){ } } } - OSTRACE4("TEST WR-LOCK %d %d %d\n", pFile->h, rc, reserved); + OSTRACE(("TEST WR-LOCK %d %d %d (flock)\n", pFile->h, rc, reserved)); #ifdef SQLITE_IGNORE_FLOCK_LOCK_ERRORS if( (rc & SQLITE_IOERR) == SQLITE_IOERR ){ @@ -22959,7 +27317,7 @@ static int flockCheckReservedLock(sqlite3_file *id, int *pResOut){ } /* -** Lock the file with the lock specified by parameter locktype - one +** Lock the file with the lock specified by parameter eFileLock - one ** of the following: ** ** (1) SHARED_LOCK @@ -22987,7 +27345,7 @@ static int flockCheckReservedLock(sqlite3_file *id, int *pResOut){ ** This routine will only increase a lock. Use the sqlite3OsUnlock() ** routine to lower a locking level. */ -static int flockLock(sqlite3_file *id, int locktype) { +static int flockLock(sqlite3_file *id, int eFileLock) { int rc = SQLITE_OK; unixFile *pFile = (unixFile*)id; @@ -22995,14 +27353,14 @@ static int flockLock(sqlite3_file *id, int locktype) { /* if we already have a lock, it is exclusive. ** Just adjust level and punt on outta here. */ - if (pFile->locktype > NO_LOCK) { - pFile->locktype = locktype; + if (pFile->eFileLock > NO_LOCK) { + pFile->eFileLock = eFileLock; return SQLITE_OK; } /* grab an exclusive lock */ - if (flock(pFile->h, LOCK_EX | LOCK_NB)) { + if (robust_flock(pFile->h, LOCK_EX | LOCK_NB)) { int tErrno = errno; /* didn't get, must be busy */ rc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_LOCK); @@ -23011,10 +27369,10 @@ static int flockLock(sqlite3_file *id, int locktype) { } } else { /* got it, set the type and return ok */ - pFile->locktype = locktype; + pFile->eFileLock = eFileLock; } - OSTRACE4("LOCK %d %s %s\n", pFile->h, locktypeName(locktype), - rc==SQLITE_OK ? "ok" : "failed"); + OSTRACE(("LOCK %d %s %s (flock)\n", pFile->h, azFileLock(eFileLock), + rc==SQLITE_OK ? "ok" : "failed")); #ifdef SQLITE_IGNORE_FLOCK_LOCK_ERRORS if( (rc & SQLITE_IOERR) == SQLITE_IOERR ){ rc = SQLITE_BUSY; @@ -23025,48 +27383,39 @@ static int flockLock(sqlite3_file *id, int locktype) { /* -** Lower the locking level on file descriptor pFile to locktype. locktype +** Lower the locking level on file descriptor pFile to eFileLock. eFileLock ** must be either NO_LOCK or SHARED_LOCK. ** ** If the locking level of the file descriptor is already at or below ** the requested locking level, this routine is a no-op. */ -static int flockUnlock(sqlite3_file *id, int locktype) { +static int flockUnlock(sqlite3_file *id, int eFileLock) { unixFile *pFile = (unixFile*)id; assert( pFile ); - OSTRACE5("UNLOCK %d %d was %d pid=%d\n", pFile->h, locktype, - pFile->locktype, getpid()); - assert( locktype<=SHARED_LOCK ); + OSTRACE(("UNLOCK %d %d was %d pid=%d (flock)\n", pFile->h, eFileLock, + pFile->eFileLock, getpid())); + assert( eFileLock<=SHARED_LOCK ); /* no-op if possible */ - if( pFile->locktype==locktype ){ + if( pFile->eFileLock==eFileLock ){ return SQLITE_OK; } /* shared can just be set because we always have an exclusive */ - if (locktype==SHARED_LOCK) { - pFile->locktype = locktype; + if (eFileLock==SHARED_LOCK) { + pFile->eFileLock = eFileLock; return SQLITE_OK; } /* no, really, unlock. */ - int rc = flock(pFile->h, LOCK_UN); - if (rc) { - int r, tErrno = errno; - r = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_UNLOCK); - if( IS_LOCK_ERROR(r) ){ - pFile->lastErrno = tErrno; - } + if( robust_flock(pFile->h, LOCK_UN) ){ #ifdef SQLITE_IGNORE_FLOCK_LOCK_ERRORS - if( (r & SQLITE_IOERR) == SQLITE_IOERR ){ - r = SQLITE_BUSY; - } + return SQLITE_OK; #endif /* SQLITE_IGNORE_FLOCK_LOCK_ERRORS */ - - return r; - } else { - pFile->locktype = NO_LOCK; + return SQLITE_IOERR_UNLOCK; + }else{ + pFile->eFileLock = NO_LOCK; return SQLITE_OK; } } @@ -23114,13 +27463,13 @@ static int semCheckReservedLock(sqlite3_file *id, int *pResOut) { assert( pFile ); /* Check if a thread in this process holds such a lock */ - if( pFile->locktype>SHARED_LOCK ){ + if( pFile->eFileLock>SHARED_LOCK ){ reserved = 1; } /* Otherwise see if some other process holds it. */ if( !reserved ){ - sem_t *pSem = pFile->pOpen->pSem; + sem_t *pSem = pFile->pInode->pSem; struct stat statBuf; if( sem_trywait(pSem)==-1 ){ @@ -23130,21 +27479,21 @@ static int semCheckReservedLock(sqlite3_file *id, int *pResOut) { pFile->lastErrno = tErrno; } else { /* someone else has the lock when we are in NO_LOCK */ - reserved = (pFile->locktype < SHARED_LOCK); + reserved = (pFile->eFileLock < SHARED_LOCK); } }else{ /* we could have it if we want it */ sem_post(pSem); } } - OSTRACE4("TEST WR-LOCK %d %d %d\n", pFile->h, rc, reserved); + OSTRACE(("TEST WR-LOCK %d %d %d (sem)\n", pFile->h, rc, reserved)); *pResOut = reserved; return rc; } /* -** Lock the file with the lock specified by parameter locktype - one +** Lock the file with the lock specified by parameter eFileLock - one ** of the following: ** ** (1) SHARED_LOCK @@ -23172,16 +27521,16 @@ static int semCheckReservedLock(sqlite3_file *id, int *pResOut) { ** This routine will only increase a lock. Use the sqlite3OsUnlock() ** routine to lower a locking level. */ -static int semLock(sqlite3_file *id, int locktype) { +static int semLock(sqlite3_file *id, int eFileLock) { unixFile *pFile = (unixFile*)id; int fd; - sem_t *pSem = pFile->pOpen->pSem; + sem_t *pSem = pFile->pInode->pSem; int rc = SQLITE_OK; /* if we already have a lock, it is exclusive. ** Just adjust level and punt on outta here. */ - if (pFile->locktype > NO_LOCK) { - pFile->locktype = locktype; + if (pFile->eFileLock > NO_LOCK) { + pFile->eFileLock = eFileLock; rc = SQLITE_OK; goto sem_end_lock; } @@ -23193,37 +27542,37 @@ static int semLock(sqlite3_file *id, int locktype) { } /* got it, set the type and return ok */ - pFile->locktype = locktype; + pFile->eFileLock = eFileLock; sem_end_lock: return rc; } /* -** Lower the locking level on file descriptor pFile to locktype. locktype +** Lower the locking level on file descriptor pFile to eFileLock. eFileLock ** must be either NO_LOCK or SHARED_LOCK. ** ** If the locking level of the file descriptor is already at or below ** the requested locking level, this routine is a no-op. */ -static int semUnlock(sqlite3_file *id, int locktype) { +static int semUnlock(sqlite3_file *id, int eFileLock) { unixFile *pFile = (unixFile*)id; - sem_t *pSem = pFile->pOpen->pSem; + sem_t *pSem = pFile->pInode->pSem; assert( pFile ); assert( pSem ); - OSTRACE5("UNLOCK %d %d was %d pid=%d\n", pFile->h, locktype, - pFile->locktype, getpid()); - assert( locktype<=SHARED_LOCK ); + OSTRACE(("UNLOCK %d %d was %d pid=%d (sem)\n", pFile->h, eFileLock, + pFile->eFileLock, getpid())); + assert( eFileLock<=SHARED_LOCK ); /* no-op if possible */ - if( pFile->locktype==locktype ){ + if( pFile->eFileLock==eFileLock ){ return SQLITE_OK; } /* shared can just be set because we always have an exclusive */ - if (locktype==SHARED_LOCK) { - pFile->locktype = locktype; + if (eFileLock==SHARED_LOCK) { + pFile->eFileLock = eFileLock; return SQLITE_OK; } @@ -23236,7 +27585,7 @@ static int semUnlock(sqlite3_file *id, int locktype) { } return rc; } - pFile->locktype = NO_LOCK; + pFile->eFileLock = NO_LOCK; return SQLITE_OK; } @@ -23249,8 +27598,7 @@ static int semClose(sqlite3_file *id) { semUnlock(id, NO_LOCK); assert( pFile ); unixEnterMutex(); - releaseLockInfo(pFile->pLock); - releaseOpenCnt(pFile->pOpen); + releaseInodeInfo(pFile); unixLeaveMutex(); closeUnixFile(id); } @@ -23281,7 +27629,7 @@ static int semClose(sqlite3_file *id) { */ typedef struct afpLockingContext afpLockingContext; struct afpLockingContext { - unsigned long long sharedByte; + int reserved; const char *dbPath; /* Name of the open file */ }; @@ -23319,15 +27667,15 @@ static int afpSetLock( pb.length = length; pb.fd = pFile->h; - OSTRACE6("AFPSETLOCK [%s] for %d%s in range %llx:%llx\n", + OSTRACE(("AFPSETLOCK [%s] for %d%s in range %llx:%llx\n", (setLockFlag?"ON":"OFF"), pFile->h, (pb.fd==-1?"[testval-1]":""), - offset, length); + offset, length)); err = fsctl(path, afpfsByteRangeLock2FSCTL, &pb, 0); if ( err==-1 ) { int rc; int tErrno = errno; - OSTRACE4("AFPSETLOCK failed to fsctl() '%s' %d %s\n", - path, tErrno, strerror(tErrno)); + OSTRACE(("AFPSETLOCK failed to fsctl() '%s' %d %s\n", + path, tErrno, strerror(tErrno))); #ifdef SQLITE_IGNORE_AFP_LOCK_ERRORS rc = SQLITE_BUSY; #else @@ -23353,14 +27701,20 @@ static int afpCheckReservedLock(sqlite3_file *id, int *pResOut){ int rc = SQLITE_OK; int reserved = 0; unixFile *pFile = (unixFile*)id; + afpLockingContext *context; SimulateIOError( return SQLITE_IOERR_CHECKRESERVEDLOCK; ); assert( pFile ); - afpLockingContext *context = (afpLockingContext *) pFile->lockingContext; + context = (afpLockingContext *) pFile->lockingContext; + if( context->reserved ){ + *pResOut = 1; + return SQLITE_OK; + } + unixEnterMutex(); /* Because pFile->pInode is shared across threads */ /* Check if a thread in this process holds such a lock */ - if( pFile->locktype>SHARED_LOCK ){ + if( pFile->pInode->eFileLock>SHARED_LOCK ){ reserved = 1; } @@ -23382,14 +27736,15 @@ static int afpCheckReservedLock(sqlite3_file *id, int *pResOut){ } } - OSTRACE4("TEST WR-LOCK %d %d %d\n", pFile->h, rc, reserved); + unixLeaveMutex(); + OSTRACE(("TEST WR-LOCK %d %d %d (afp)\n", pFile->h, rc, reserved)); *pResOut = reserved; return rc; } /* -** Lock the file with the lock specified by parameter locktype - one +** Lock the file with the lock specified by parameter eFileLock - one ** of the following: ** ** (1) SHARED_LOCK @@ -23412,49 +27767,72 @@ static int afpCheckReservedLock(sqlite3_file *id, int *pResOut){ ** This routine will only increase a lock. Use the sqlite3OsUnlock() ** routine to lower a locking level. */ -static int afpLock(sqlite3_file *id, int locktype){ +static int afpLock(sqlite3_file *id, int eFileLock){ int rc = SQLITE_OK; unixFile *pFile = (unixFile*)id; + unixInodeInfo *pInode = pFile->pInode; afpLockingContext *context = (afpLockingContext *) pFile->lockingContext; assert( pFile ); - OSTRACE5("LOCK %d %s was %s pid=%d\n", pFile->h, - locktypeName(locktype), locktypeName(pFile->locktype), getpid()); + OSTRACE(("LOCK %d %s was %s(%s,%d) pid=%d (afp)\n", pFile->h, + azFileLock(eFileLock), azFileLock(pFile->eFileLock), + azFileLock(pInode->eFileLock), pInode->nShared , getpid())); /* If there is already a lock of this type or more restrictive on the ** unixFile, do nothing. Don't use the afp_end_lock: exit path, as ** unixEnterMutex() hasn't been called yet. */ - if( pFile->locktype>=locktype ){ - OSTRACE3("LOCK %d %s ok (already held)\n", pFile->h, - locktypeName(locktype)); + if( pFile->eFileLock>=eFileLock ){ + OSTRACE(("LOCK %d %s ok (already held) (afp)\n", pFile->h, + azFileLock(eFileLock))); return SQLITE_OK; } /* Make sure the locking sequence is correct + ** (1) We never move from unlocked to anything higher than shared lock. + ** (2) SQLite never explicitly requests a pendig lock. + ** (3) A shared lock is always held when a reserve lock is requested. */ - assert( pFile->locktype!=NO_LOCK || locktype==SHARED_LOCK ); - assert( locktype!=PENDING_LOCK ); - assert( locktype!=RESERVED_LOCK || pFile->locktype==SHARED_LOCK ); + assert( pFile->eFileLock!=NO_LOCK || eFileLock==SHARED_LOCK ); + assert( eFileLock!=PENDING_LOCK ); + assert( eFileLock!=RESERVED_LOCK || pFile->eFileLock==SHARED_LOCK ); - /* This mutex is needed because pFile->pLock is shared across threads + /* This mutex is needed because pFile->pInode is shared across threads */ unixEnterMutex(); + pInode = pFile->pInode; - /* Make sure the current thread owns the pFile. + /* If some thread using this PID has a lock via a different unixFile* + ** handle that precludes the requested lock, return BUSY. */ - rc = transferOwnership(pFile); - if( rc!=SQLITE_OK ){ - unixLeaveMutex(); - return rc; + if( (pFile->eFileLock!=pInode->eFileLock && + (pInode->eFileLock>=PENDING_LOCK || eFileLock>SHARED_LOCK)) + ){ + rc = SQLITE_BUSY; + goto afp_end_lock; + } + + /* If a SHARED lock is requested, and some thread using this PID already + ** has a SHARED or RESERVED lock, then increment reference counts and + ** return SQLITE_OK. + */ + if( eFileLock==SHARED_LOCK && + (pInode->eFileLock==SHARED_LOCK || pInode->eFileLock==RESERVED_LOCK) ){ + assert( eFileLock==SHARED_LOCK ); + assert( pFile->eFileLock==0 ); + assert( pInode->nShared>0 ); + pFile->eFileLock = SHARED_LOCK; + pInode->nShared++; + pInode->nLock++; + goto afp_end_lock; } /* A PENDING lock is needed before acquiring a SHARED lock and before ** acquiring an EXCLUSIVE lock. For the SHARED lock, the PENDING will ** be released. */ - if( locktype==SHARED_LOCK - || (locktype==EXCLUSIVE_LOCK && pFile->locktypeeFileLockdbPath, pFile, PENDING_BYTE, 1, 1); @@ -23467,15 +27845,20 @@ static int afpLock(sqlite3_file *id, int locktype){ /* If control gets to this point, then actually go ahead and make ** operating system calls for the specified lock. */ - if( locktype==SHARED_LOCK ){ - int lk, lrc1, lrc2, lrc1Errno; + if( eFileLock==SHARED_LOCK ){ + int lrc1, lrc2, lrc1Errno = 0; + long lk, mask; + assert( pInode->nShared==0 ); + assert( pInode->eFileLock==0 ); + + mask = (sizeof(long)==8) ? LARGEST_INT64 : 0x7fffffff; /* Now get the read-lock SHARED_LOCK */ /* note that the quality of the randomness doesn't matter that much */ lk = random(); - context->sharedByte = (lk & 0x7fffffff)%(SHARED_SIZE - 1); + pInode->sharedByte = (lk & mask)%(SHARED_SIZE - 1); lrc1 = afpSetLock(context->dbPath, pFile, - SHARED_FIRST+context->sharedByte, 1, 1); + SHARED_FIRST+pInode->sharedByte, 1, 1); if( IS_LOCK_ERROR(lrc1) ){ lrc1Errno = pFile->lastErrno; } @@ -23492,34 +27875,42 @@ static int afpLock(sqlite3_file *id, int locktype){ } else if( lrc1 != SQLITE_OK ) { rc = lrc1; } else { - pFile->locktype = SHARED_LOCK; - pFile->pOpen->nLock++; + pFile->eFileLock = SHARED_LOCK; + pInode->nLock++; + pInode->nShared = 1; } + }else if( eFileLock==EXCLUSIVE_LOCK && pInode->nShared>1 ){ + /* We are trying for an exclusive lock but another thread in this + ** same process is still holding a shared lock. */ + rc = SQLITE_BUSY; }else{ /* The request was for a RESERVED or EXCLUSIVE lock. It is ** assumed that there is a SHARED or greater lock on the file ** already. */ int failed = 0; - assert( 0!=pFile->locktype ); - if (locktype >= RESERVED_LOCK && pFile->locktype < RESERVED_LOCK) { + assert( 0!=pFile->eFileLock ); + if (eFileLock >= RESERVED_LOCK && pFile->eFileLock < RESERVED_LOCK) { /* Acquire a RESERVED lock */ failed = afpSetLock(context->dbPath, pFile, RESERVED_BYTE, 1,1); + if( !failed ){ + context->reserved = 1; + } } - if (!failed && locktype == EXCLUSIVE_LOCK) { + if (!failed && eFileLock == EXCLUSIVE_LOCK) { /* Acquire an EXCLUSIVE lock */ /* Remove the shared lock before trying the range. we'll need to ** reestablish the shared lock if we can't get the afpUnlock */ if( !(failed = afpSetLock(context->dbPath, pFile, SHARED_FIRST + - context->sharedByte, 1, 0)) ){ + pInode->sharedByte, 1, 0)) ){ int failed2 = SQLITE_OK; /* now attemmpt to get the exclusive lock range */ failed = afpSetLock(context->dbPath, pFile, SHARED_FIRST, SHARED_SIZE, 1); if( failed && (failed2 = afpSetLock(context->dbPath, pFile, - SHARED_FIRST + context->sharedByte, 1, 1)) ){ + SHARED_FIRST + pInode->sharedByte, 1, 1)) ){ /* Can't reestablish the shared lock. Sqlite can't deal, this is ** a critical I/O error */ @@ -23537,90 +27928,124 @@ static int afpLock(sqlite3_file *id, int locktype){ } if( rc==SQLITE_OK ){ - pFile->locktype = locktype; - }else if( locktype==EXCLUSIVE_LOCK ){ - pFile->locktype = PENDING_LOCK; + pFile->eFileLock = eFileLock; + pInode->eFileLock = eFileLock; + }else if( eFileLock==EXCLUSIVE_LOCK ){ + pFile->eFileLock = PENDING_LOCK; + pInode->eFileLock = PENDING_LOCK; } afp_end_lock: unixLeaveMutex(); - OSTRACE4("LOCK %d %s %s\n", pFile->h, locktypeName(locktype), - rc==SQLITE_OK ? "ok" : "failed"); + OSTRACE(("LOCK %d %s %s (afp)\n", pFile->h, azFileLock(eFileLock), + rc==SQLITE_OK ? "ok" : "failed")); return rc; } /* -** Lower the locking level on file descriptor pFile to locktype. locktype +** Lower the locking level on file descriptor pFile to eFileLock. eFileLock ** must be either NO_LOCK or SHARED_LOCK. ** ** If the locking level of the file descriptor is already at or below ** the requested locking level, this routine is a no-op. */ -static int afpUnlock(sqlite3_file *id, int locktype) { +static int afpUnlock(sqlite3_file *id, int eFileLock) { int rc = SQLITE_OK; unixFile *pFile = (unixFile*)id; - afpLockingContext *pCtx = (afpLockingContext *) pFile->lockingContext; + unixInodeInfo *pInode; + afpLockingContext *context = (afpLockingContext *) pFile->lockingContext; + int skipShared = 0; +#ifdef SQLITE_TEST + int h = pFile->h; +#endif assert( pFile ); - OSTRACE5("UNLOCK %d %d was %d pid=%d\n", pFile->h, locktype, - pFile->locktype, getpid()); + OSTRACE(("UNLOCK %d %d was %d(%d,%d) pid=%d (afp)\n", pFile->h, eFileLock, + pFile->eFileLock, pFile->pInode->eFileLock, pFile->pInode->nShared, + getpid())); - assert( locktype<=SHARED_LOCK ); - if( pFile->locktype<=locktype ){ + assert( eFileLock<=SHARED_LOCK ); + if( pFile->eFileLock<=eFileLock ){ return SQLITE_OK; } - if( CHECK_THREADID(pFile) ){ - return SQLITE_MISUSE; - } unixEnterMutex(); - if( pFile->locktype>SHARED_LOCK ){ + pInode = pFile->pInode; + assert( pInode->nShared!=0 ); + if( pFile->eFileLock>SHARED_LOCK ){ + assert( pInode->eFileLock==pFile->eFileLock ); + SimulateIOErrorBenign(1); + SimulateIOError( h=(-1) ) + SimulateIOErrorBenign(0); - if( pFile->locktype==EXCLUSIVE_LOCK ){ - rc = afpSetLock(pCtx->dbPath, pFile, SHARED_FIRST, SHARED_SIZE, 0); - if( rc==SQLITE_OK && locktype==SHARED_LOCK ){ +#ifdef SQLITE_DEBUG + /* When reducing a lock such that other processes can start + ** reading the database file again, make sure that the + ** transaction counter was updated if any part of the database + ** file changed. If the transaction counter is not updated, + ** other connections to the same file might not realize that + ** the file has changed and hence might not know to flush their + ** cache. The use of a stale cache can lead to database corruption. + */ + assert( pFile->inNormalWrite==0 + || pFile->dbUpdate==0 + || pFile->transCntrChng==1 ); + pFile->inNormalWrite = 0; +#endif + + if( pFile->eFileLock==EXCLUSIVE_LOCK ){ + rc = afpSetLock(context->dbPath, pFile, SHARED_FIRST, SHARED_SIZE, 0); + if( rc==SQLITE_OK && (eFileLock==SHARED_LOCK || pInode->nShared>1) ){ /* only re-establish the shared lock if necessary */ - int sharedLockByte = SHARED_FIRST+pCtx->sharedByte; - rc = afpSetLock(pCtx->dbPath, pFile, sharedLockByte, 1, 1); + int sharedLockByte = SHARED_FIRST+pInode->sharedByte; + rc = afpSetLock(context->dbPath, pFile, sharedLockByte, 1, 1); + } else { + skipShared = 1; } } - if( rc==SQLITE_OK && pFile->locktype>=PENDING_LOCK ){ - rc = afpSetLock(pCtx->dbPath, pFile, PENDING_BYTE, 1, 0); + if( rc==SQLITE_OK && pFile->eFileLock>=PENDING_LOCK ){ + rc = afpSetLock(context->dbPath, pFile, PENDING_BYTE, 1, 0); } - if( rc==SQLITE_OK && pFile->locktype>=RESERVED_LOCK ){ - rc = afpSetLock(pCtx->dbPath, pFile, RESERVED_BYTE, 1, 0); + if( rc==SQLITE_OK && pFile->eFileLock>=RESERVED_LOCK && context->reserved ){ + rc = afpSetLock(context->dbPath, pFile, RESERVED_BYTE, 1, 0); + if( !rc ){ + context->reserved = 0; + } + } + if( rc==SQLITE_OK && (eFileLock==SHARED_LOCK || pInode->nShared>1)){ + pInode->eFileLock = SHARED_LOCK; } - }else if( locktype==NO_LOCK ){ - /* clear the shared lock */ - int sharedLockByte = SHARED_FIRST+pCtx->sharedByte; - rc = afpSetLock(pCtx->dbPath, pFile, sharedLockByte, 1, 0); } + if( rc==SQLITE_OK && eFileLock==NO_LOCK ){ - if( rc==SQLITE_OK ){ - if( locktype==NO_LOCK ){ - struct unixOpenCnt *pOpen = pFile->pOpen; - pOpen->nLock--; - assert( pOpen->nLock>=0 ); - if( pOpen->nLock==0 && pOpen->nPending>0 ){ - int i; - for(i=0; inPending; i++){ - if( pOpen->aPending[i] < 0 ) continue; - if( close(pOpen->aPending[i]) ){ - pFile->lastErrno = errno; - rc = SQLITE_IOERR_CLOSE; - }else{ - pOpen->aPending[i] = -1; - } - } - if( rc==SQLITE_OK ){ - sqlite3_free(pOpen->aPending); - pOpen->nPending = 0; - pOpen->aPending = 0; - } + /* Decrement the shared lock counter. Release the lock using an + ** OS call only when all threads in this same process have released + ** the lock. + */ + unsigned long long sharedLockByte = SHARED_FIRST+pInode->sharedByte; + pInode->nShared--; + if( pInode->nShared==0 ){ + SimulateIOErrorBenign(1); + SimulateIOError( h=(-1) ) + SimulateIOErrorBenign(0); + if( !skipShared ){ + rc = afpSetLock(context->dbPath, pFile, sharedLockByte, 1, 0); + } + if( !rc ){ + pInode->eFileLock = NO_LOCK; + pFile->eFileLock = NO_LOCK; + } + } + if( rc==SQLITE_OK ){ + pInode->nLock--; + assert( pInode->nLock>=0 ); + if( pInode->nLock==0 ){ + closePendingFds(pFile); } } } + unixLeaveMutex(); - if( rc==SQLITE_OK ) pFile->locktype = locktype; + if( rc==SQLITE_OK ) pFile->eFileLock = eFileLock; return rc; } @@ -23628,34 +28053,25 @@ static int afpUnlock(sqlite3_file *id, int locktype) { ** Close a file & cleanup AFP specific locking context */ static int afpClose(sqlite3_file *id) { + int rc = SQLITE_OK; if( id ){ unixFile *pFile = (unixFile*)id; afpUnlock(id, NO_LOCK); unixEnterMutex(); - if( pFile->pOpen && pFile->pOpen->nLock ){ + if( pFile->pInode && pFile->pInode->nLock ){ /* If there are outstanding locks, do not actually close the file just ** yet because that would clear those locks. Instead, add the file - ** descriptor to pOpen->aPending. It will be automatically closed when + ** descriptor to pInode->aPending. It will be automatically closed when ** the last lock is cleared. */ - int *aNew; - struct unixOpenCnt *pOpen = pFile->pOpen; - aNew = sqlite3_realloc(pOpen->aPending, (pOpen->nPending+1)*sizeof(int) ); - if( aNew==0 ){ - /* If a malloc fails, just leak the file descriptor */ - }else{ - pOpen->aPending = aNew; - pOpen->aPending[pOpen->nPending] = pFile->h; - pOpen->nPending++; - pFile->h = -1; - } + setPendingFd(pFile); } - releaseOpenCnt(pFile->pOpen); + releaseInodeInfo(pFile); sqlite3_free(pFile->lockingContext); - closeUnixFile(id); + rc = closeUnixFile(id); unixLeaveMutex(); } - return SQLITE_OK; + return rc; } #endif /* defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE */ @@ -23668,6 +28084,29 @@ static int afpClose(sqlite3_file *id) { ********************* End of the AFP lock implementation ********************** ******************************************************************************/ +/****************************************************************************** +*************************** Begin NFS Locking ********************************/ + +#if defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE +/* + ** Lower the locking level on file descriptor pFile to eFileLock. eFileLock + ** must be either NO_LOCK or SHARED_LOCK. + ** + ** If the locking level of the file descriptor is already at or below + ** the requested locking level, this routine is a no-op. + */ +static int nfsUnlock(sqlite3_file *id, int eFileLock){ + return posixUnlock(id, eFileLock, 1); +} + +#endif /* defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE */ +/* +** The code above is the NFS lock implementation. The code is specific +** to MacOSX and does not work on other unix platforms. No alternative +** is available. +** +********************* End of the NFS lock implementation ********************** +******************************************************************************/ /****************************************************************************** **************** Non-locking sqlite3_file methods ***************************** @@ -23694,33 +28133,48 @@ static int afpClose(sqlite3_file *id) { */ static int seekAndRead(unixFile *id, sqlite3_int64 offset, void *pBuf, int cnt){ int got; + int prior = 0; +#if (!defined(USE_PREAD) && !defined(USE_PREAD64)) i64 newOffset; +#endif TIMER_START; + do{ #if defined(USE_PREAD) - got = pread(id->h, pBuf, cnt, offset); - SimulateIOError( got = -1 ); + got = osPread(id->h, pBuf, cnt, offset); + SimulateIOError( got = -1 ); #elif defined(USE_PREAD64) - got = pread64(id->h, pBuf, cnt, offset); - SimulateIOError( got = -1 ); + got = osPread64(id->h, pBuf, cnt, offset); + SimulateIOError( got = -1 ); #else - newOffset = lseek(id->h, offset, SEEK_SET); - SimulateIOError( newOffset-- ); - if( newOffset!=offset ){ - if( newOffset == -1 ){ - ((unixFile*)id)->lastErrno = errno; - }else{ - ((unixFile*)id)->lastErrno = 0; + newOffset = lseek(id->h, offset, SEEK_SET); + SimulateIOError( newOffset-- ); + if( newOffset!=offset ){ + if( newOffset == -1 ){ + ((unixFile*)id)->lastErrno = errno; + }else{ + ((unixFile*)id)->lastErrno = 0; + } + return -1; } - return -1; - } - got = read(id->h, pBuf, cnt); + got = osRead(id->h, pBuf, cnt); #endif + if( got==cnt ) break; + if( got<0 ){ + if( errno==EINTR ){ got = 1; continue; } + prior = 0; + ((unixFile*)id)->lastErrno = errno; + break; + }else if( got>0 ){ + cnt -= got; + offset += got; + prior += got; + pBuf = (void*)(got + (char*)pBuf); + } + }while( got>0 ); TIMER_END; - if( got<0 ){ - ((unixFile*)id)->lastErrno = errno; - } - OSTRACE5("READ %-3d %5d %7lld %llu\n", id->h, got, offset, TIMER_ELAPSED); - return got; + OSTRACE(("READ %-3d %5d %7lld %llu\n", + id->h, got+prior, offset-prior, TIMER_ELAPSED)); + return got+prior; } /* @@ -23734,22 +28188,27 @@ static int unixRead( int amt, sqlite3_int64 offset ){ + unixFile *pFile = (unixFile *)id; int got; assert( id ); - /* Never read or write any of the bytes in the locking range */ - assert( ((unixFile*)id)->isLockable==0 - || offset>=PENDING_BYTE+512 - || offset+amt<=PENDING_BYTE ); + /* If this is a database file (not a journal, master-journal or temp + ** file), the bytes in the locking range should never be read or written. */ +#if 0 + assert( pFile->pUnused==0 + || offset>=PENDING_BYTE+512 + || offset+amt<=PENDING_BYTE + ); +#endif - got = seekAndRead((unixFile*)id, offset, pBuf, amt); + got = seekAndRead(pFile, offset, pBuf, amt); if( got==amt ){ return SQLITE_OK; }else if( got<0 ){ /* lastErrno set by seekAndRead */ return SQLITE_IOERR_READ; }else{ - ((unixFile*)id)->lastErrno = 0; /* not a system error */ + pFile->lastErrno = 0; /* not a system error */ /* Unread parts of the buffer must be zero-filled */ memset(&((char*)pBuf)[got], 0, amt-got); return SQLITE_IOERR_SHORT_READ; @@ -23765,30 +28224,35 @@ static int unixRead( */ static int seekAndWrite(unixFile *id, i64 offset, const void *pBuf, int cnt){ int got; +#if (!defined(USE_PREAD) && !defined(USE_PREAD64)) i64 newOffset; +#endif TIMER_START; #if defined(USE_PREAD) - got = pwrite(id->h, pBuf, cnt, offset); + do{ got = osPwrite(id->h, pBuf, cnt, offset); }while( got<0 && errno==EINTR ); #elif defined(USE_PREAD64) - got = pwrite64(id->h, pBuf, cnt, offset); + do{ got = osPwrite64(id->h, pBuf, cnt, offset);}while( got<0 && errno==EINTR); #else - newOffset = lseek(id->h, offset, SEEK_SET); - if( newOffset!=offset ){ - if( newOffset == -1 ){ - ((unixFile*)id)->lastErrno = errno; - }else{ - ((unixFile*)id)->lastErrno = 0; + do{ + newOffset = lseek(id->h, offset, SEEK_SET); + SimulateIOError( newOffset-- ); + if( newOffset!=offset ){ + if( newOffset == -1 ){ + ((unixFile*)id)->lastErrno = errno; + }else{ + ((unixFile*)id)->lastErrno = 0; + } + return -1; } - return -1; - } - got = write(id->h, pBuf, cnt); + got = osWrite(id->h, pBuf, cnt); + }while( got<0 && errno==EINTR ); #endif TIMER_END; if( got<0 ){ ((unixFile*)id)->lastErrno = errno; } - OSTRACE5("WRITE %-3d %5d %7lld %llu\n", id->h, got, offset, TIMER_ELAPSED); + OSTRACE(("WRITE %-3d %5d %7lld %llu\n", id->h, got, offset, TIMER_ELAPSED)); return got; } @@ -23803,24 +28267,28 @@ static int unixWrite( int amt, sqlite3_int64 offset ){ + unixFile *pFile = (unixFile*)id; int wrote = 0; assert( id ); assert( amt>0 ); - /* Never read or write any of the bytes in the locking range */ - assert( ((unixFile*)id)->isLockable==0 - || offset>=PENDING_BYTE+512 - || offset+amt<=PENDING_BYTE ); + /* If this is a database file (not a journal, master-journal or temp + ** file), the bytes in the locking range should never be read or written. */ +#if 0 + assert( pFile->pUnused==0 + || offset>=PENDING_BYTE+512 + || offset+amt<=PENDING_BYTE + ); +#endif -#ifndef NDEBUG +#ifdef SQLITE_DEBUG /* If we are doing a normal write to a database file (as opposed to ** doing a hot-journal rollback or a write to some file other than a ** normal database file) then record the fact that the database ** has changed. If the transaction counter is modified, record that ** fact too. */ - if( ((unixFile*)id)->inNormalWrite ){ - unixFile *pFile = (unixFile*)id; + if( pFile->inNormalWrite ){ pFile->dbUpdate = 1; /* The database has been modified */ if( offset<=24 && offset+amt>=27 ){ int rc; @@ -23835,22 +28303,24 @@ static int unixWrite( } #endif - while( amt>0 && (wrote = seekAndWrite((unixFile*)id, offset, pBuf, amt))>0 ){ + while( amt>0 && (wrote = seekAndWrite(pFile, offset, pBuf, amt))>0 ){ amt -= wrote; offset += wrote; pBuf = &((char*)pBuf)[wrote]; } SimulateIOError(( wrote=(-1), amt=1 )); SimulateDiskfullError(( wrote=0, amt=1 )); + if( amt>0 ){ - if( wrote<0 ){ + if( wrote<0 && pFile->lastErrno!=ENOSPC ){ /* lastErrno set by seekAndWrite */ return SQLITE_IOERR_WRITE; }else{ - ((unixFile*)id)->lastErrno = 0; /* not a system error */ + pFile->lastErrno = 0; /* not a system error */ return SQLITE_FULL; } } + return SQLITE_OK; } @@ -23865,11 +28335,11 @@ SQLITE_API int sqlite3_fullsync_count = 0; /* ** We do not trust systems to provide a working fdatasync(). Some do. -** Others do no. To be safe, we will stick with the (slower) fsync(). -** If you know that your system does support fdatasync() correctly, +** Others do no. To be safe, we will stick with the (slightly slower) +** fsync(). If you know that your system does support fdatasync() correctly, ** then simply compile with -Dfdatasync=fdatasync */ -#if !defined(fdatasync) && !defined(__linux__) +#if !defined(fdatasync) # define fdatasync fsync #endif @@ -23943,7 +28413,7 @@ static int full_fsync(int fd, int fullSync, int dataOnly){ rc = SQLITE_OK; #elif HAVE_FULLFSYNC if( fullSync ){ - rc = fcntl(fd, F_FULLFSYNC, 0); + rc = osFcntl(fd, F_FULLFSYNC, 0); }else{ rc = 1; } @@ -23957,6 +28427,11 @@ static int full_fsync(int fd, int fullSync, int dataOnly){ */ if( rc ) rc = fsync(fd); +#elif defined(__APPLE__) + /* fdatasync() on HFS+ doesn't yet flush the file size if it changed correctly + ** so currently we default to the macro that redefines fdatasync to fsync + */ + rc = fsync(fd); #else rc = fdatasync(fd); #if OS_VXWORKS @@ -23972,6 +28447,47 @@ static int full_fsync(int fd, int fullSync, int dataOnly){ return rc; } +/* +** Open a file descriptor to the directory containing file zFilename. +** If successful, *pFd is set to the opened file descriptor and +** SQLITE_OK is returned. If an error occurs, either SQLITE_NOMEM +** or SQLITE_CANTOPEN is returned and *pFd is set to an undefined +** value. +** +** The directory file descriptor is used for only one thing - to +** fsync() a directory to make sure file creation and deletion events +** are flushed to disk. Such fsyncs are not needed on newer +** journaling filesystems, but are required on older filesystems. +** +** This routine can be overridden using the xSetSysCall interface. +** The ability to override this routine was added in support of the +** chromium sandbox. Opening a directory is a security risk (we are +** told) so making it overrideable allows the chromium sandbox to +** replace this routine with a harmless no-op. To make this routine +** a no-op, replace it with a stub that returns SQLITE_OK but leaves +** *pFd set to a negative number. +** +** If SQLITE_OK is returned, the caller is responsible for closing +** the file descriptor *pFd using close(). +*/ +static int openDirectory(const char *zFilename, int *pFd){ + int ii; + int fd = -1; + char zDirname[MAX_PATHNAME+1]; + + sqlite3_snprintf(MAX_PATHNAME, zDirname, "%s", zFilename); + for(ii=(int)strlen(zDirname); ii>1 && zDirname[ii]!='/'; ii--); + if( ii>0 ){ + zDirname[ii] = '\0'; + fd = robust_open(zDirname, O_RDONLY|O_BINARY, 0); + if( fd>=0 ){ + OSTRACE(("OPENDIR %-3d %s\n", fd, zDirname)); + } + } + *pFd = fd; + return (fd>=0?SQLITE_OK:unixLogError(SQLITE_CANTOPEN_BKPT, "open", zDirname)); +} + /* ** Make sure all writes to a particular file are committed to disk. ** @@ -24005,40 +28521,30 @@ static int unixSync(sqlite3_file *id, int flags){ SimulateDiskfullError( return SQLITE_FULL ); assert( pFile ); - OSTRACE2("SYNC %-3d\n", pFile->h); + OSTRACE(("SYNC %-3d\n", pFile->h)); rc = full_fsync(pFile->h, isFullsync, isDataOnly); SimulateIOError( rc=1 ); if( rc ){ pFile->lastErrno = errno; - return SQLITE_IOERR_FSYNC; - } - if( pFile->dirfd>=0 ){ - int err; - OSTRACE4("DIRSYNC %-3d (have_fullfsync=%d fullsync=%d)\n", pFile->dirfd, - HAVE_FULLFSYNC, isFullsync); -#ifndef SQLITE_DISABLE_DIRSYNC - /* The directory sync is only attempted if full_fsync is - ** turned off or unavailable. If a full_fsync occurred above, - ** then the directory sync is superfluous. - */ - if( (!HAVE_FULLFSYNC || !isFullsync) && full_fsync(pFile->dirfd,0,0) ){ - /* - ** We have received multiple reports of fsync() returning - ** errors when applied to directories on certain file systems. - ** A failed directory sync is not a big deal. So it seems - ** better to ignore the error. Ticket #1657 - */ - /* pFile->lastErrno = errno; */ - /* return SQLITE_IOERR; */ - } -#endif - err = close(pFile->dirfd); /* Only need to sync once, so close the */ - if( err==0 ){ /* directory when we are done */ - pFile->dirfd = -1; - }else{ - pFile->lastErrno = errno; - rc = SQLITE_IOERR_DIR_CLOSE; + return unixLogError(SQLITE_IOERR_FSYNC, "full_fsync", pFile->zPath); + } + + /* Also fsync the directory containing the file if the DIRSYNC flag + ** is set. This is a one-time occurrance. Many systems (examples: AIX) + ** are unable to fsync a directory, so ignore errors on the fsync. + */ + if( pFile->ctrlFlags & UNIXFILE_DIRSYNC ){ + int dirfd; + OSTRACE(("DIRSYNC %s (have_fullfsync=%d fullsync=%d)\n", pFile->zPath, + HAVE_FULLFSYNC, isFullsync)); + rc = osOpenDirectory(pFile->zPath, &dirfd); + if( rc==SQLITE_OK && dirfd>=0 ){ + full_fsync(dirfd, 0, 0); + robust_close(pFile, dirfd, __LINE__); + }else if( rc==SQLITE_CANTOPEN ){ + rc = SQLITE_OK; } + pFile->ctrlFlags &= ~UNIXFILE_DIRSYNC; } return rc; } @@ -24047,14 +28553,38 @@ static int unixSync(sqlite3_file *id, int flags){ ** Truncate an open file to a specified size */ static int unixTruncate(sqlite3_file *id, i64 nByte){ + unixFile *pFile = (unixFile *)id; int rc; - assert( id ); + assert( pFile ); SimulateIOError( return SQLITE_IOERR_TRUNCATE ); - rc = ftruncate(((unixFile*)id)->h, (off_t)nByte); + + /* If the user has configured a chunk-size for this file, truncate the + ** file so that it consists of an integer number of chunks (i.e. the + ** actual file size after the operation may be larger than the requested + ** size). + */ + if( pFile->szChunk>0 ){ + nByte = ((nByte + pFile->szChunk - 1)/pFile->szChunk) * pFile->szChunk; + } + + rc = robust_ftruncate(pFile->h, (off_t)nByte); if( rc ){ - ((unixFile*)id)->lastErrno = errno; - return SQLITE_IOERR_TRUNCATE; + pFile->lastErrno = errno; + return unixLogError(SQLITE_IOERR_TRUNCATE, "ftruncate", pFile->zPath); }else{ +#ifdef SQLITE_DEBUG + /* If we are doing a normal write to a database file (as opposed to + ** doing a hot-journal rollback or a write to some file other than a + ** normal database file) and we truncate the file to zero length, + ** that effectively updates the change counter. This might happen + ** when restoring a database using the backup API from a zero-length + ** source. + */ + if( pFile->inNormalWrite && nByte==0 ){ + pFile->transCntrChng = 1; + } +#endif + return SQLITE_OK; } } @@ -24066,7 +28596,7 @@ static int unixFileSize(sqlite3_file *id, i64 *pSize){ int rc; struct stat buf; assert( id ); - rc = fstat(((unixFile*)id)->h, &buf); + rc = osFstat(((unixFile*)id)->h, &buf); SimulateIOError( rc=1 ); if( rc!=0 ){ ((unixFile*)id)->lastErrno = errno; @@ -24074,7 +28604,7 @@ static int unixFileSize(sqlite3_file *id, i64 *pSize){ } *pSize = buf.st_size; - /* When opening a zero-size database, the findLockInfo() procedure + /* When opening a zero-size database, the findInodeInfo() procedure ** writes a single byte into that file in order to work around a bug ** in the OS-X msdos filesystem. In order to avoid problems with upper ** layers, we need to report this file size as zero even though it is @@ -24094,21 +28624,112 @@ static int unixFileSize(sqlite3_file *id, i64 *pSize){ static int proxyFileControl(sqlite3_file*,int,void*); #endif +/* +** This function is called to handle the SQLITE_FCNTL_SIZE_HINT +** file-control operation. Enlarge the database to nBytes in size +** (rounded up to the next chunk-size). If the database is already +** nBytes or larger, this routine is a no-op. +*/ +static int fcntlSizeHint(unixFile *pFile, i64 nByte){ + if( pFile->szChunk>0 ){ + i64 nSize; /* Required file size */ + struct stat buf; /* Used to hold return values of fstat() */ + + if( osFstat(pFile->h, &buf) ) return SQLITE_IOERR_FSTAT; + + nSize = ((nByte+pFile->szChunk-1) / pFile->szChunk) * pFile->szChunk; + if( nSize>(i64)buf.st_size ){ + +#if defined(HAVE_POSIX_FALLOCATE) && HAVE_POSIX_FALLOCATE + /* The code below is handling the return value of osFallocate() + ** correctly. posix_fallocate() is defined to "returns zero on success, + ** or an error number on failure". See the manpage for details. */ + int err; + do{ + err = osFallocate(pFile->h, buf.st_size, nSize-buf.st_size); + }while( err==EINTR ); + if( err ) return SQLITE_IOERR_WRITE; +#else + /* If the OS does not have posix_fallocate(), fake it. First use + ** ftruncate() to set the file size, then write a single byte to + ** the last byte in each block within the extended region. This + ** is the same technique used by glibc to implement posix_fallocate() + ** on systems that do not have a real fallocate() system call. + */ + int nBlk = buf.st_blksize; /* File-system block size */ + i64 iWrite; /* Next offset to write to */ + + if( robust_ftruncate(pFile->h, nSize) ){ + pFile->lastErrno = errno; + return unixLogError(SQLITE_IOERR_TRUNCATE, "ftruncate", pFile->zPath); + } + iWrite = ((buf.st_size + 2*nBlk - 1)/nBlk)*nBlk-1; + while( iWritectrlFlags is set. +** +** If *pArg is 0 or 1, then clear or set the mask bit of pFile->ctrlFlags. +*/ +static void unixModeBit(unixFile *pFile, unsigned char mask, int *pArg){ + if( *pArg<0 ){ + *pArg = (pFile->ctrlFlags & mask)!=0; + }else if( (*pArg)==0 ){ + pFile->ctrlFlags &= ~mask; + }else{ + pFile->ctrlFlags |= mask; + } +} /* ** Information and control of an open file handle. */ static int unixFileControl(sqlite3_file *id, int op, void *pArg){ + unixFile *pFile = (unixFile*)id; switch( op ){ case SQLITE_FCNTL_LOCKSTATE: { - *(int*)pArg = ((unixFile*)id)->locktype; + *(int*)pArg = pFile->eFileLock; return SQLITE_OK; } case SQLITE_LAST_ERRNO: { - *(int*)pArg = ((unixFile*)id)->lastErrno; + *(int*)pArg = pFile->lastErrno; return SQLITE_OK; } -#ifndef NDEBUG + case SQLITE_FCNTL_CHUNK_SIZE: { + pFile->szChunk = *(int *)pArg; + return SQLITE_OK; + } + case SQLITE_FCNTL_SIZE_HINT: { + int rc; + SimulateIOErrorBenign(1); + rc = fcntlSizeHint(pFile, *(i64 *)pArg); + SimulateIOErrorBenign(0); + return rc; + } + case SQLITE_FCNTL_PERSIST_WAL: { + unixModeBit(pFile, UNIXFILE_PERSIST_WAL, (int*)pArg); + return SQLITE_OK; + } + case SQLITE_FCNTL_POWERSAFE_OVERWRITE: { + unixModeBit(pFile, UNIXFILE_PSOW, (int*)pArg); + return SQLITE_OK; + } + case SQLITE_FCNTL_VFSNAME: { + *(char**)pArg = sqlite3_mprintf("%s", pFile->pVfs->zName); + return SQLITE_OK; + } +#ifdef SQLITE_DEBUG /* The pager calls this method to signal that it has done ** a rollback and that the database is therefore unchanged and ** it hence it is OK for the transaction change counter to be @@ -24126,7 +28747,7 @@ static int unixFileControl(sqlite3_file *id, int op, void *pArg){ } #endif /* SQLITE_ENABLE_LOCKING_STYLE && defined(__APPLE__) */ } - return SQLITE_ERROR; + return SQLITE_NOTFOUND; } /* @@ -24139,19 +28760,683 @@ static int unixFileControl(sqlite3_file *id, int op, void *pArg){ ** a database and its journal file) that the sector size will be the ** same for both. */ -static int unixSectorSize(sqlite3_file *NotUsed){ - UNUSED_PARAMETER(NotUsed); +static int unixSectorSize(sqlite3_file *pFile){ + (void)pFile; return SQLITE_DEFAULT_SECTOR_SIZE; } /* -** Return the device characteristics for the file. This is always 0 for unix. +** Return the device characteristics for the file. +** +** This VFS is set up to return SQLITE_IOCAP_POWERSAFE_OVERWRITE by default. +** However, that choice is contraversial since technically the underlying +** file system does not always provide powersafe overwrites. (In other +** words, after a power-loss event, parts of the file that were never +** written might end up being altered.) However, non-PSOW behavior is very, +** very rare. And asserting PSOW makes a large reduction in the amount +** of required I/O for journaling, since a lot of padding is eliminated. +** Hence, while POWERSAFE_OVERWRITE is on by default, there is a file-control +** available to turn it off and URI query parameter available to turn it off. */ -static int unixDeviceCharacteristics(sqlite3_file *NotUsed){ - UNUSED_PARAMETER(NotUsed); - return 0; +static int unixDeviceCharacteristics(sqlite3_file *id){ + unixFile *p = (unixFile*)id; + if( p->ctrlFlags & UNIXFILE_PSOW ){ + return SQLITE_IOCAP_POWERSAFE_OVERWRITE; + }else{ + return 0; + } } +#ifndef SQLITE_OMIT_WAL + + +/* +** Object used to represent an shared memory buffer. +** +** When multiple threads all reference the same wal-index, each thread +** has its own unixShm object, but they all point to a single instance +** of this unixShmNode object. In other words, each wal-index is opened +** only once per process. +** +** Each unixShmNode object is connected to a single unixInodeInfo object. +** We could coalesce this object into unixInodeInfo, but that would mean +** every open file that does not use shared memory (in other words, most +** open files) would have to carry around this extra information. So +** the unixInodeInfo object contains a pointer to this unixShmNode object +** and the unixShmNode object is created only when needed. +** +** unixMutexHeld() must be true when creating or destroying +** this object or while reading or writing the following fields: +** +** nRef +** +** The following fields are read-only after the object is created: +** +** fid +** zFilename +** +** Either unixShmNode.mutex must be held or unixShmNode.nRef==0 and +** unixMutexHeld() is true when reading or writing any other field +** in this structure. +*/ +struct unixShmNode { + unixInodeInfo *pInode; /* unixInodeInfo that owns this SHM node */ + sqlite3_mutex *mutex; /* Mutex to access this object */ + char *zFilename; /* Name of the mmapped file */ + int h; /* Open file descriptor */ + int szRegion; /* Size of shared-memory regions */ + u16 nRegion; /* Size of array apRegion */ + u8 isReadonly; /* True if read-only */ + char **apRegion; /* Array of mapped shared-memory regions */ + int nRef; /* Number of unixShm objects pointing to this */ + unixShm *pFirst; /* All unixShm objects pointing to this */ +#ifdef SQLITE_DEBUG + u8 exclMask; /* Mask of exclusive locks held */ + u8 sharedMask; /* Mask of shared locks held */ + u8 nextShmId; /* Next available unixShm.id value */ +#endif +}; + +/* +** Structure used internally by this VFS to record the state of an +** open shared memory connection. +** +** The following fields are initialized when this object is created and +** are read-only thereafter: +** +** unixShm.pFile +** unixShm.id +** +** All other fields are read/write. The unixShm.pFile->mutex must be held +** while accessing any read/write fields. +*/ +struct unixShm { + unixShmNode *pShmNode; /* The underlying unixShmNode object */ + unixShm *pNext; /* Next unixShm with the same unixShmNode */ + u8 hasMutex; /* True if holding the unixShmNode mutex */ + u8 id; /* Id of this connection within its unixShmNode */ + u16 sharedMask; /* Mask of shared locks held */ + u16 exclMask; /* Mask of exclusive locks held */ +}; + +/* +** Constants used for locking +*/ +#define UNIX_SHM_BASE ((22+SQLITE_SHM_NLOCK)*4) /* first lock byte */ +#define UNIX_SHM_DMS (UNIX_SHM_BASE+SQLITE_SHM_NLOCK) /* deadman switch */ + +/* +** Apply posix advisory locks for all bytes from ofst through ofst+n-1. +** +** Locks block if the mask is exactly UNIX_SHM_C and are non-blocking +** otherwise. +*/ +static int unixShmSystemLock( + unixShmNode *pShmNode, /* Apply locks to this open shared-memory segment */ + int lockType, /* F_UNLCK, F_RDLCK, or F_WRLCK */ + int ofst, /* First byte of the locking range */ + int n /* Number of bytes to lock */ +){ + struct flock f; /* The posix advisory locking structure */ + int rc = SQLITE_OK; /* Result code form fcntl() */ + + /* Access to the unixShmNode object is serialized by the caller */ + assert( sqlite3_mutex_held(pShmNode->mutex) || pShmNode->nRef==0 ); + + /* Shared locks never span more than one byte */ + assert( n==1 || lockType!=F_RDLCK ); + + /* Locks are within range */ + assert( n>=1 && nh>=0 ){ + /* Initialize the locking parameters */ + memset(&f, 0, sizeof(f)); + f.l_type = lockType; + f.l_whence = SEEK_SET; + f.l_start = ofst; + f.l_len = n; + + rc = osFcntl(pShmNode->h, F_SETLK, &f); + rc = (rc!=(-1)) ? SQLITE_OK : SQLITE_BUSY; + } + + /* Update the global lock state and do debug tracing */ +#ifdef SQLITE_DEBUG + { u16 mask; + OSTRACE(("SHM-LOCK ")); + mask = (1<<(ofst+n)) - (1<exclMask &= ~mask; + pShmNode->sharedMask &= ~mask; + }else if( lockType==F_RDLCK ){ + OSTRACE(("read-lock %d ok", ofst)); + pShmNode->exclMask &= ~mask; + pShmNode->sharedMask |= mask; + }else{ + assert( lockType==F_WRLCK ); + OSTRACE(("write-lock %d ok", ofst)); + pShmNode->exclMask |= mask; + pShmNode->sharedMask &= ~mask; + } + }else{ + if( lockType==F_UNLCK ){ + OSTRACE(("unlock %d failed", ofst)); + }else if( lockType==F_RDLCK ){ + OSTRACE(("read-lock failed")); + }else{ + assert( lockType==F_WRLCK ); + OSTRACE(("write-lock %d failed", ofst)); + } + } + OSTRACE((" - afterwards %03x,%03x\n", + pShmNode->sharedMask, pShmNode->exclMask)); + } +#endif + + return rc; +} + + +/* +** Purge the unixShmNodeList list of all entries with unixShmNode.nRef==0. +** +** This is not a VFS shared-memory method; it is a utility function called +** by VFS shared-memory methods. +*/ +static void unixShmPurge(unixFile *pFd){ + unixShmNode *p = pFd->pInode->pShmNode; + assert( unixMutexHeld() ); + if( p && p->nRef==0 ){ + int i; + assert( p->pInode==pFd->pInode ); + sqlite3_mutex_free(p->mutex); + for(i=0; inRegion; i++){ + if( p->h>=0 ){ + munmap(p->apRegion[i], p->szRegion); + }else{ + sqlite3_free(p->apRegion[i]); + } + } + sqlite3_free(p->apRegion); + if( p->h>=0 ){ + robust_close(pFd, p->h, __LINE__); + p->h = -1; + } + p->pInode->pShmNode = 0; + sqlite3_free(p); + } +} + +/* +** Open a shared-memory area associated with open database file pDbFd. +** This particular implementation uses mmapped files. +** +** The file used to implement shared-memory is in the same directory +** as the open database file and has the same name as the open database +** file with the "-shm" suffix added. For example, if the database file +** is "/home/user1/config.db" then the file that is created and mmapped +** for shared memory will be called "/home/user1/config.db-shm". +** +** Another approach to is to use files in /dev/shm or /dev/tmp or an +** some other tmpfs mount. But if a file in a different directory +** from the database file is used, then differing access permissions +** or a chroot() might cause two different processes on the same +** database to end up using different files for shared memory - +** meaning that their memory would not really be shared - resulting +** in database corruption. Nevertheless, this tmpfs file usage +** can be enabled at compile-time using -DSQLITE_SHM_DIRECTORY="/dev/shm" +** or the equivalent. The use of the SQLITE_SHM_DIRECTORY compile-time +** option results in an incompatible build of SQLite; builds of SQLite +** that with differing SQLITE_SHM_DIRECTORY settings attempt to use the +** same database file at the same time, database corruption will likely +** result. The SQLITE_SHM_DIRECTORY compile-time option is considered +** "unsupported" and may go away in a future SQLite release. +** +** When opening a new shared-memory file, if no other instances of that +** file are currently open, in this process or in other processes, then +** the file must be truncated to zero length or have its header cleared. +** +** If the original database file (pDbFd) is using the "unix-excl" VFS +** that means that an exclusive lock is held on the database file and +** that no other processes are able to read or write the database. In +** that case, we do not really need shared memory. No shared memory +** file is created. The shared memory will be simulated with heap memory. +*/ +static int unixOpenSharedMemory(unixFile *pDbFd){ + struct unixShm *p = 0; /* The connection to be opened */ + struct unixShmNode *pShmNode; /* The underlying mmapped file */ + int rc; /* Result code */ + unixInodeInfo *pInode; /* The inode of fd */ + char *zShmFilename; /* Name of the file used for SHM */ + int nShmFilename; /* Size of the SHM filename in bytes */ + + /* Allocate space for the new unixShm object. */ + p = sqlite3_malloc( sizeof(*p) ); + if( p==0 ) return SQLITE_NOMEM; + memset(p, 0, sizeof(*p)); + assert( pDbFd->pShm==0 ); + + /* Check to see if a unixShmNode object already exists. Reuse an existing + ** one if present. Create a new one if necessary. + */ + unixEnterMutex(); + pInode = pDbFd->pInode; + pShmNode = pInode->pShmNode; + if( pShmNode==0 ){ + struct stat sStat; /* fstat() info for database file */ + + /* Call fstat() to figure out the permissions on the database file. If + ** a new *-shm file is created, an attempt will be made to create it + ** with the same permissions. + */ + if( osFstat(pDbFd->h, &sStat) && pInode->bProcessLock==0 ){ + rc = SQLITE_IOERR_FSTAT; + goto shm_open_err; + } + +#ifdef SQLITE_SHM_DIRECTORY + nShmFilename = sizeof(SQLITE_SHM_DIRECTORY) + 31; +#else + nShmFilename = 6 + (int)strlen(pDbFd->zPath); +#endif + pShmNode = sqlite3_malloc( sizeof(*pShmNode) + nShmFilename ); + if( pShmNode==0 ){ + rc = SQLITE_NOMEM; + goto shm_open_err; + } + memset(pShmNode, 0, sizeof(*pShmNode)+nShmFilename); + zShmFilename = pShmNode->zFilename = (char*)&pShmNode[1]; +#ifdef SQLITE_SHM_DIRECTORY + sqlite3_snprintf(nShmFilename, zShmFilename, + SQLITE_SHM_DIRECTORY "/sqlite-shm-%x-%x", + (u32)sStat.st_ino, (u32)sStat.st_dev); +#else + sqlite3_snprintf(nShmFilename, zShmFilename, "%s-shm", pDbFd->zPath); + sqlite3FileSuffix3(pDbFd->zPath, zShmFilename); +#endif + pShmNode->h = -1; + pDbFd->pInode->pShmNode = pShmNode; + pShmNode->pInode = pDbFd->pInode; + pShmNode->mutex = sqlite3_mutex_alloc(SQLITE_MUTEX_FAST); + if( pShmNode->mutex==0 ){ + rc = SQLITE_NOMEM; + goto shm_open_err; + } + + if( pInode->bProcessLock==0 ){ + int openFlags = O_RDWR | O_CREAT; + if( sqlite3_uri_boolean(pDbFd->zPath, "readonly_shm", 0) ){ + openFlags = O_RDONLY; + pShmNode->isReadonly = 1; + } + pShmNode->h = robust_open(zShmFilename, openFlags, (sStat.st_mode&0777)); + if( pShmNode->h<0 ){ + rc = unixLogError(SQLITE_CANTOPEN_BKPT, "open", zShmFilename); + goto shm_open_err; + } + + /* If this process is running as root, make sure that the SHM file + ** is owned by the same user that owns the original database. Otherwise, + ** the original owner will not be able to connect. + */ + osFchown(pShmNode->h, sStat.st_uid, sStat.st_gid); + + /* Check to see if another process is holding the dead-man switch. + ** If not, truncate the file to zero length. + */ + rc = SQLITE_OK; + if( unixShmSystemLock(pShmNode, F_WRLCK, UNIX_SHM_DMS, 1)==SQLITE_OK ){ + if( robust_ftruncate(pShmNode->h, 0) ){ + rc = unixLogError(SQLITE_IOERR_SHMOPEN, "ftruncate", zShmFilename); + } + } + if( rc==SQLITE_OK ){ + rc = unixShmSystemLock(pShmNode, F_RDLCK, UNIX_SHM_DMS, 1); + } + if( rc ) goto shm_open_err; + } + } + + /* Make the new connection a child of the unixShmNode */ + p->pShmNode = pShmNode; +#ifdef SQLITE_DEBUG + p->id = pShmNode->nextShmId++; +#endif + pShmNode->nRef++; + pDbFd->pShm = p; + unixLeaveMutex(); + + /* The reference count on pShmNode has already been incremented under + ** the cover of the unixEnterMutex() mutex and the pointer from the + ** new (struct unixShm) object to the pShmNode has been set. All that is + ** left to do is to link the new object into the linked list starting + ** at pShmNode->pFirst. This must be done while holding the pShmNode->mutex + ** mutex. + */ + sqlite3_mutex_enter(pShmNode->mutex); + p->pNext = pShmNode->pFirst; + pShmNode->pFirst = p; + sqlite3_mutex_leave(pShmNode->mutex); + return SQLITE_OK; + + /* Jump here on any error */ +shm_open_err: + unixShmPurge(pDbFd); /* This call frees pShmNode if required */ + sqlite3_free(p); + unixLeaveMutex(); + return rc; +} + +/* +** This function is called to obtain a pointer to region iRegion of the +** shared-memory associated with the database file fd. Shared-memory regions +** are numbered starting from zero. Each shared-memory region is szRegion +** bytes in size. +** +** If an error occurs, an error code is returned and *pp is set to NULL. +** +** Otherwise, if the bExtend parameter is 0 and the requested shared-memory +** region has not been allocated (by any client, including one running in a +** separate process), then *pp is set to NULL and SQLITE_OK returned. If +** bExtend is non-zero and the requested shared-memory region has not yet +** been allocated, it is allocated by this function. +** +** If the shared-memory region has already been allocated or is allocated by +** this call as described above, then it is mapped into this processes +** address space (if it is not already), *pp is set to point to the mapped +** memory and SQLITE_OK returned. +*/ +static int unixShmMap( + sqlite3_file *fd, /* Handle open on database file */ + int iRegion, /* Region to retrieve */ + int szRegion, /* Size of regions */ + int bExtend, /* True to extend file if necessary */ + void volatile **pp /* OUT: Mapped memory */ +){ + unixFile *pDbFd = (unixFile*)fd; + unixShm *p; + unixShmNode *pShmNode; + int rc = SQLITE_OK; + + /* If the shared-memory file has not yet been opened, open it now. */ + if( pDbFd->pShm==0 ){ + rc = unixOpenSharedMemory(pDbFd); + if( rc!=SQLITE_OK ) return rc; + } + + p = pDbFd->pShm; + pShmNode = p->pShmNode; + sqlite3_mutex_enter(pShmNode->mutex); + assert( szRegion==pShmNode->szRegion || pShmNode->nRegion==0 ); + assert( pShmNode->pInode==pDbFd->pInode ); + assert( pShmNode->h>=0 || pDbFd->pInode->bProcessLock==1 ); + assert( pShmNode->h<0 || pDbFd->pInode->bProcessLock==0 ); + + if( pShmNode->nRegion<=iRegion ){ + char **apNew; /* New apRegion[] array */ + int nByte = (iRegion+1)*szRegion; /* Minimum required file size */ + struct stat sStat; /* Used by fstat() */ + + pShmNode->szRegion = szRegion; + + if( pShmNode->h>=0 ){ + /* The requested region is not mapped into this processes address space. + ** Check to see if it has been allocated (i.e. if the wal-index file is + ** large enough to contain the requested region). + */ + if( osFstat(pShmNode->h, &sStat) ){ + rc = SQLITE_IOERR_SHMSIZE; + goto shmpage_out; + } + + if( sStat.st_sizeh, nByte) ){ + rc = unixLogError(SQLITE_IOERR_SHMSIZE, "ftruncate", + pShmNode->zFilename); + goto shmpage_out; + } + } + } + + /* Map the requested memory region into this processes address space. */ + apNew = (char **)sqlite3_realloc( + pShmNode->apRegion, (iRegion+1)*sizeof(char *) + ); + if( !apNew ){ + rc = SQLITE_IOERR_NOMEM; + goto shmpage_out; + } + pShmNode->apRegion = apNew; + while(pShmNode->nRegion<=iRegion){ + void *pMem; + if( pShmNode->h>=0 ){ + pMem = mmap(0, szRegion, + pShmNode->isReadonly ? PROT_READ : PROT_READ|PROT_WRITE, + MAP_SHARED, pShmNode->h, pShmNode->nRegion*szRegion + ); + if( pMem==MAP_FAILED ){ + rc = unixLogError(SQLITE_IOERR_SHMMAP, "mmap", pShmNode->zFilename); + goto shmpage_out; + } + }else{ + pMem = sqlite3_malloc(szRegion); + if( pMem==0 ){ + rc = SQLITE_NOMEM; + goto shmpage_out; + } + memset(pMem, 0, szRegion); + } + pShmNode->apRegion[pShmNode->nRegion] = pMem; + pShmNode->nRegion++; + } + } + +shmpage_out: + if( pShmNode->nRegion>iRegion ){ + *pp = pShmNode->apRegion[iRegion]; + }else{ + *pp = 0; + } + if( pShmNode->isReadonly && rc==SQLITE_OK ) rc = SQLITE_READONLY; + sqlite3_mutex_leave(pShmNode->mutex); + return rc; +} + +/* +** Change the lock state for a shared-memory segment. +** +** Note that the relationship between SHAREd and EXCLUSIVE locks is a little +** different here than in posix. In xShmLock(), one can go from unlocked +** to shared and back or from unlocked to exclusive and back. But one may +** not go from shared to exclusive or from exclusive to shared. +*/ +static int unixShmLock( + sqlite3_file *fd, /* Database file holding the shared memory */ + int ofst, /* First lock to acquire or release */ + int n, /* Number of locks to acquire or release */ + int flags /* What to do with the lock */ +){ + unixFile *pDbFd = (unixFile*)fd; /* Connection holding shared memory */ + unixShm *p = pDbFd->pShm; /* The shared memory being locked */ + unixShm *pX; /* For looping over all siblings */ + unixShmNode *pShmNode = p->pShmNode; /* The underlying file iNode */ + int rc = SQLITE_OK; /* Result code */ + u16 mask; /* Mask of locks to take or release */ + + assert( pShmNode==pDbFd->pInode->pShmNode ); + assert( pShmNode->pInode==pDbFd->pInode ); + assert( ofst>=0 && ofst+n<=SQLITE_SHM_NLOCK ); + assert( n>=1 ); + assert( flags==(SQLITE_SHM_LOCK | SQLITE_SHM_SHARED) + || flags==(SQLITE_SHM_LOCK | SQLITE_SHM_EXCLUSIVE) + || flags==(SQLITE_SHM_UNLOCK | SQLITE_SHM_SHARED) + || flags==(SQLITE_SHM_UNLOCK | SQLITE_SHM_EXCLUSIVE) ); + assert( n==1 || (flags & SQLITE_SHM_EXCLUSIVE)!=0 ); + assert( pShmNode->h>=0 || pDbFd->pInode->bProcessLock==1 ); + assert( pShmNode->h<0 || pDbFd->pInode->bProcessLock==0 ); + + mask = (1<<(ofst+n)) - (1<1 || mask==(1<mutex); + if( flags & SQLITE_SHM_UNLOCK ){ + u16 allMask = 0; /* Mask of locks held by siblings */ + + /* See if any siblings hold this same lock */ + for(pX=pShmNode->pFirst; pX; pX=pX->pNext){ + if( pX==p ) continue; + assert( (pX->exclMask & (p->exclMask|p->sharedMask))==0 ); + allMask |= pX->sharedMask; + } + + /* Unlock the system-level locks */ + if( (mask & allMask)==0 ){ + rc = unixShmSystemLock(pShmNode, F_UNLCK, ofst+UNIX_SHM_BASE, n); + }else{ + rc = SQLITE_OK; + } + + /* Undo the local locks */ + if( rc==SQLITE_OK ){ + p->exclMask &= ~mask; + p->sharedMask &= ~mask; + } + }else if( flags & SQLITE_SHM_SHARED ){ + u16 allShared = 0; /* Union of locks held by connections other than "p" */ + + /* Find out which shared locks are already held by sibling connections. + ** If any sibling already holds an exclusive lock, go ahead and return + ** SQLITE_BUSY. + */ + for(pX=pShmNode->pFirst; pX; pX=pX->pNext){ + if( (pX->exclMask & mask)!=0 ){ + rc = SQLITE_BUSY; + break; + } + allShared |= pX->sharedMask; + } + + /* Get shared locks at the system level, if necessary */ + if( rc==SQLITE_OK ){ + if( (allShared & mask)==0 ){ + rc = unixShmSystemLock(pShmNode, F_RDLCK, ofst+UNIX_SHM_BASE, n); + }else{ + rc = SQLITE_OK; + } + } + + /* Get the local shared locks */ + if( rc==SQLITE_OK ){ + p->sharedMask |= mask; + } + }else{ + /* Make sure no sibling connections hold locks that will block this + ** lock. If any do, return SQLITE_BUSY right away. + */ + for(pX=pShmNode->pFirst; pX; pX=pX->pNext){ + if( (pX->exclMask & mask)!=0 || (pX->sharedMask & mask)!=0 ){ + rc = SQLITE_BUSY; + break; + } + } + + /* Get the exclusive locks at the system level. Then if successful + ** also mark the local connection as being locked. + */ + if( rc==SQLITE_OK ){ + rc = unixShmSystemLock(pShmNode, F_WRLCK, ofst+UNIX_SHM_BASE, n); + if( rc==SQLITE_OK ){ + assert( (p->sharedMask & mask)==0 ); + p->exclMask |= mask; + } + } + } + sqlite3_mutex_leave(pShmNode->mutex); + OSTRACE(("SHM-LOCK shmid-%d, pid-%d got %03x,%03x\n", + p->id, getpid(), p->sharedMask, p->exclMask)); + return rc; +} + +/* +** Implement a memory barrier or memory fence on shared memory. +** +** All loads and stores begun before the barrier must complete before +** any load or store begun after the barrier. +*/ +static void unixShmBarrier( + sqlite3_file *fd /* Database file holding the shared memory */ +){ + UNUSED_PARAMETER(fd); + unixEnterMutex(); + unixLeaveMutex(); +} + +/* +** Close a connection to shared-memory. Delete the underlying +** storage if deleteFlag is true. +** +** If there is no shared memory associated with the connection then this +** routine is a harmless no-op. +*/ +static int unixShmUnmap( + sqlite3_file *fd, /* The underlying database file */ + int deleteFlag /* Delete shared-memory if true */ +){ + unixShm *p; /* The connection to be closed */ + unixShmNode *pShmNode; /* The underlying shared-memory file */ + unixShm **pp; /* For looping over sibling connections */ + unixFile *pDbFd; /* The underlying database file */ + + pDbFd = (unixFile*)fd; + p = pDbFd->pShm; + if( p==0 ) return SQLITE_OK; + pShmNode = p->pShmNode; + + assert( pShmNode==pDbFd->pInode->pShmNode ); + assert( pShmNode->pInode==pDbFd->pInode ); + + /* Remove connection p from the set of connections associated + ** with pShmNode */ + sqlite3_mutex_enter(pShmNode->mutex); + for(pp=&pShmNode->pFirst; (*pp)!=p; pp = &(*pp)->pNext){} + *pp = p->pNext; + + /* Free the connection p */ + sqlite3_free(p); + pDbFd->pShm = 0; + sqlite3_mutex_leave(pShmNode->mutex); + + /* If pShmNode->nRef has reached 0, then close the underlying + ** shared-memory file, too */ + unixEnterMutex(); + assert( pShmNode->nRef>0 ); + pShmNode->nRef--; + if( pShmNode->nRef==0 ){ + if( deleteFlag && pShmNode->h>=0 ) osUnlink(pShmNode->zFilename); + unixShmPurge(pDbFd); + } + unixLeaveMutex(); + + return SQLITE_OK; +} + + +#else +# define unixShmMap 0 +# define unixShmLock 0 +# define unixShmBarrier 0 +# define unixShmUnmap 0 +#endif /* #ifndef SQLITE_OMIT_WAL */ + /* ** Here ends the implementation of all sqlite3_file methods. ** @@ -24175,7 +29460,7 @@ static int unixDeviceCharacteristics(sqlite3_file *NotUsed){ ** ** (1) The real finder-function named "FImpt()". ** -** (2) A constant pointer to this functio named just "F". +** (2) A constant pointer to this function named just "F". ** ** ** A pointer to the F pointer is used as the pAppData value for VFS @@ -24192,9 +29477,9 @@ static int unixDeviceCharacteristics(sqlite3_file *NotUsed){ ** * An I/O method finder function called FINDER that returns a pointer ** to the METHOD object in the previous bullet. */ -#define IOMETHODS(FINDER, METHOD, CLOSE, LOCK, UNLOCK, CKLOCK) \ +#define IOMETHODS(FINDER, METHOD, VERSION, CLOSE, LOCK, UNLOCK, CKLOCK) \ static const sqlite3_io_methods METHOD = { \ - 1, /* iVersion */ \ + VERSION, /* iVersion */ \ CLOSE, /* xClose */ \ unixRead, /* xRead */ \ unixWrite, /* xWrite */ \ @@ -24206,13 +29491,17 @@ static const sqlite3_io_methods METHOD = { \ CKLOCK, /* xCheckReservedLock */ \ unixFileControl, /* xFileControl */ \ unixSectorSize, /* xSectorSize */ \ - unixDeviceCharacteristics /* xDeviceCapabilities */ \ + unixDeviceCharacteristics, /* xDeviceCapabilities */ \ + unixShmMap, /* xShmMap */ \ + unixShmLock, /* xShmLock */ \ + unixShmBarrier, /* xShmBarrier */ \ + unixShmUnmap /* xShmUnmap */ \ }; \ -static const sqlite3_io_methods *FINDER##Impl(const char *z, int h){ \ - UNUSED_PARAMETER(z); UNUSED_PARAMETER(h); \ +static const sqlite3_io_methods *FINDER##Impl(const char *z, unixFile *p){ \ + UNUSED_PARAMETER(z); UNUSED_PARAMETER(p); \ return &METHOD; \ } \ -static const sqlite3_io_methods *(*const FINDER)(const char*,int) \ +static const sqlite3_io_methods *(*const FINDER)(const char*,unixFile *p) \ = FINDER##Impl; /* @@ -24223,6 +29512,7 @@ static const sqlite3_io_methods *(*const FINDER)(const char*,int) \ IOMETHODS( posixIoFinder, /* Finder function name */ posixIoMethods, /* sqlite3_io_methods object name */ + 2, /* shared memory is enabled */ unixClose, /* xClose method */ unixLock, /* xLock method */ unixUnlock, /* xUnlock method */ @@ -24231,6 +29521,7 @@ IOMETHODS( IOMETHODS( nolockIoFinder, /* Finder function name */ nolockIoMethods, /* sqlite3_io_methods object name */ + 1, /* shared memory is disabled */ nolockClose, /* xClose method */ nolockLock, /* xLock method */ nolockUnlock, /* xUnlock method */ @@ -24239,6 +29530,7 @@ IOMETHODS( IOMETHODS( dotlockIoFinder, /* Finder function name */ dotlockIoMethods, /* sqlite3_io_methods object name */ + 1, /* shared memory is disabled */ dotlockClose, /* xClose method */ dotlockLock, /* xLock method */ dotlockUnlock, /* xUnlock method */ @@ -24249,6 +29541,7 @@ IOMETHODS( IOMETHODS( flockIoFinder, /* Finder function name */ flockIoMethods, /* sqlite3_io_methods object name */ + 1, /* shared memory is disabled */ flockClose, /* xClose method */ flockLock, /* xLock method */ flockUnlock, /* xUnlock method */ @@ -24260,6 +29553,7 @@ IOMETHODS( IOMETHODS( semIoFinder, /* Finder function name */ semIoMethods, /* sqlite3_io_methods object name */ + 1, /* shared memory is disabled */ semClose, /* xClose method */ semLock, /* xLock method */ semUnlock, /* xUnlock method */ @@ -24271,6 +29565,7 @@ IOMETHODS( IOMETHODS( afpIoFinder, /* Finder function name */ afpIoMethods, /* sqlite3_io_methods object name */ + 1, /* shared memory is disabled */ afpClose, /* xClose method */ afpLock, /* xLock method */ afpUnlock, /* xUnlock method */ @@ -24295,6 +29590,7 @@ static int proxyCheckReservedLock(sqlite3_file*, int*); IOMETHODS( proxyIoFinder, /* Finder function name */ proxyIoMethods, /* sqlite3_io_methods object name */ + 1, /* shared memory is disabled */ proxyClose, /* xClose method */ proxyLock, /* xLock method */ proxyUnlock, /* xUnlock method */ @@ -24302,6 +29598,18 @@ IOMETHODS( ) #endif +/* nfs lockd on OSX 10.3+ doesn't clear write locks when a read lock is set */ +#if defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE +IOMETHODS( + nfsIoFinder, /* Finder function name */ + nfsIoMethods, /* sqlite3_io_methods object name */ + 1, /* shared memory is disabled */ + unixClose, /* xClose method */ + unixLock, /* xLock method */ + nfsUnlock, /* xUnlock method */ + unixCheckReservedLock /* xCheckReservedLock method */ +) +#endif #if defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE /* @@ -24313,7 +29621,7 @@ IOMETHODS( */ static const sqlite3_io_methods *autolockIoFinderImpl( const char *filePath, /* name of the database file */ - int fd /* file descriptor open on the database file */ + unixFile *pNew /* open file object for the database file */ ){ static const struct Mapping { const char *zFilesystem; /* Filesystem type name */ @@ -24322,11 +29630,7 @@ static const sqlite3_io_methods *autolockIoFinderImpl( { "hfs", &posixIoMethods }, { "ufs", &posixIoMethods }, { "afpfs", &afpIoMethods }, -#ifdef SQLITE_ENABLE_AFP_LOCKING_SMB { "smbfs", &afpIoMethods }, -#else - { "smbfs", &flockIoMethods }, -#endif { "webdav", &nolockIoMethods }, { 0, 0 } }; @@ -24358,14 +29662,18 @@ static const sqlite3_io_methods *autolockIoFinderImpl( lockInfo.l_start = 0; lockInfo.l_whence = SEEK_SET; lockInfo.l_type = F_RDLCK; - if( fcntl(fd, F_GETLK, &lockInfo)!=-1 ) { - return &posixIoMethods; + if( osFcntl(pNew->h, F_GETLK, &lockInfo)!=-1 ) { + if( strcmp(fsInfo.f_fstypename, "nfs")==0 ){ + return &nfsIoMethods; + } else { + return &posixIoMethods; + } }else{ return &dotlockIoMethods; } } -static const sqlite3_io_methods *(*const autolockIoFinder)(const char*,int) - = autolockIoFinderImpl; +static const sqlite3_io_methods + *(*const autolockIoFinder)(const char*,unixFile*) = autolockIoFinderImpl; #endif /* defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE */ @@ -24379,7 +29687,7 @@ static const sqlite3_io_methods *(*const autolockIoFinder)(const char*,int) */ static const sqlite3_io_methods *autolockIoFinderImpl( const char *filePath, /* name of the database file */ - int fd /* file descriptor open on the database file */ + unixFile *pNew /* the open file object */ ){ struct flock lockInfo; @@ -24396,21 +29704,21 @@ static const sqlite3_io_methods *autolockIoFinderImpl( lockInfo.l_start = 0; lockInfo.l_whence = SEEK_SET; lockInfo.l_type = F_RDLCK; - if( fcntl(fd, F_GETLK, &lockInfo)!=-1 ) { + if( osFcntl(pNew->h, F_GETLK, &lockInfo)!=-1 ) { return &posixIoMethods; }else{ return &semIoMethods; } } -static const sqlite3_io_methods *(*const autolockIoFinder)(const char*,int) - = autolockIoFinderImpl; +static const sqlite3_io_methods + *(*const autolockIoFinder)(const char*,unixFile*) = autolockIoFinderImpl; #endif /* OS_VXWORKS && SQLITE_ENABLE_LOCKING_STYLE */ /* ** An abstract type for a pointer to a IO method finder function: */ -typedef const sqlite3_io_methods *(*finder_type)(const char*,int); +typedef const sqlite3_io_methods *(*finder_type)(const char*,unixFile*); /**************************************************************************** @@ -24426,44 +29734,55 @@ typedef const sqlite3_io_methods *(*finder_type)(const char*,int); static int fillInUnixFile( sqlite3_vfs *pVfs, /* Pointer to vfs object */ int h, /* Open file descriptor of file being opened */ - int dirfd, /* Directory file descriptor */ sqlite3_file *pId, /* Write to the unixFile structure here */ const char *zFilename, /* Name of the file being opened */ - int noLock, /* Omit locking if true */ - int isDelete /* Delete on close if true */ + int ctrlFlags /* Zero or more UNIXFILE_* values */ ){ const sqlite3_io_methods *pLockingStyle; unixFile *pNew = (unixFile *)pId; int rc = SQLITE_OK; - assert( pNew->pLock==NULL ); - assert( pNew->pOpen==NULL ); + assert( pNew->pInode==NULL ); - /* Parameter isDelete is only used on vxworks. - ** Express this explicitly here to prevent compiler warnings - ** about unused parameters. + /* Usually the path zFilename should not be a relative pathname. The + ** exception is when opening the proxy "conch" file in builds that + ** include the special Apple locking styles. */ -#if !OS_VXWORKS - UNUSED_PARAMETER(isDelete); +#if defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE + assert( zFilename==0 || zFilename[0]=='/' + || pVfs->pAppData==(void*)&autolockIoFinder ); +#else + assert( zFilename==0 || zFilename[0]=='/' ); #endif - OSTRACE3("OPEN %-3d %s\n", h, zFilename); + /* No locking occurs in temporary files */ + assert( zFilename!=0 || (ctrlFlags & UNIXFILE_NOLOCK)!=0 ); + + OSTRACE(("OPEN %-3d %s\n", h, zFilename)); pNew->h = h; - pNew->dirfd = dirfd; - SET_THREADID(pNew); + pNew->pVfs = pVfs; + pNew->zPath = zFilename; + pNew->ctrlFlags = (u8)ctrlFlags; + if( sqlite3_uri_boolean(((ctrlFlags & UNIXFILE_URI) ? zFilename : 0), + "psow", SQLITE_POWERSAFE_OVERWRITE) ){ + pNew->ctrlFlags |= UNIXFILE_PSOW; + } + if( memcmp(pVfs->zName,"unix-excl",10)==0 ){ + pNew->ctrlFlags |= UNIXFILE_EXCL; + } #if OS_VXWORKS pNew->pId = vxworksFindFileId(zFilename); if( pNew->pId==0 ){ - noLock = 1; + ctrlFlags |= UNIXFILE_NOLOCK; rc = SQLITE_NOMEM; } #endif - if( noLock ){ + if( ctrlFlags & UNIXFILE_NOLOCK ){ pLockingStyle = &nolockIoMethods; }else{ - pLockingStyle = (**(finder_type*)pVfs->pAppData)(zFilename, h); + pLockingStyle = (**(finder_type*)pVfs->pAppData)(zFilename, pNew); #if SQLITE_ENABLE_LOCKING_STYLE /* Cache zFilename in the locking context (AFP and dotlock override) for ** proxyLock activation is possible (remote proxy is based on db name) @@ -24472,9 +29791,35 @@ static int fillInUnixFile( #endif } - if( pLockingStyle == &posixIoMethods ){ + if( pLockingStyle == &posixIoMethods +#if defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE + || pLockingStyle == &nfsIoMethods +#endif + ){ unixEnterMutex(); - rc = findLockInfo(pNew, &pNew->pLock, &pNew->pOpen); + rc = findInodeInfo(pNew, &pNew->pInode); + if( rc!=SQLITE_OK ){ + /* If an error occured in findInodeInfo(), close the file descriptor + ** immediately, before releasing the mutex. findInodeInfo() may fail + ** in two scenarios: + ** + ** (a) A call to fstat() failed. + ** (b) A malloc failed. + ** + ** Scenario (b) may only occur if the process is holding no other + ** file descriptors open on the same file. If there were other file + ** descriptors on this file, then no malloc would be required by + ** findInodeInfo(). If this is the case, it is quite safe to close + ** handle h - as it is guaranteed that no posix locks will be released + ** by doing so. + ** + ** If scenario (a) caused the error then things are not so safe. The + ** implicit assumption here is that if fstat() fails, things are in + ** such bad shape that dropping a lock or two doesn't matter much. + */ + robust_close(pNew, h, __LINE__); + h = -1; + } unixLeaveMutex(); } @@ -24492,9 +29837,15 @@ static int fillInUnixFile( ** according to requirement F11141. So we do not need to make a ** copy of the filename. */ pCtx->dbPath = zFilename; + pCtx->reserved = 0; srandomdev(); unixEnterMutex(); - rc = findLockInfo(pNew, NULL, &pNew->pOpen); + rc = findInodeInfo(pNew, &pNew->pInode); + if( rc!=SQLITE_OK ){ + sqlite3_free(pNew->lockingContext); + robust_close(pNew, h, __LINE__); + h = -1; + } unixLeaveMutex(); } } @@ -24506,6 +29857,7 @@ static int fillInUnixFile( */ char *zLockFile; int nFilename; + assert( zFilename!=0 ); nFilename = (int)strlen(zFilename) + 6; zLockFile = (char *)sqlite3_malloc(nFilename); if( zLockFile==0 ){ @@ -24522,18 +29874,18 @@ static int fillInUnixFile( ** included in the semLockingContext */ unixEnterMutex(); - rc = findLockInfo(pNew, &pNew->pLock, &pNew->pOpen); - if( (rc==SQLITE_OK) && (pNew->pOpen->pSem==NULL) ){ - char *zSemName = pNew->pOpen->aSemName; + rc = findInodeInfo(pNew, &pNew->pInode); + if( (rc==SQLITE_OK) && (pNew->pInode->pSem==NULL) ){ + char *zSemName = pNew->pInode->aSemName; int n; - sqlite3_snprintf(MAX_PATHNAME, zSemName, "%s.sem", + sqlite3_snprintf(MAX_PATHNAME, zSemName, "/%s.sem", pNew->pId->zCanonicalName); - for( n=0; zSemName[n]; n++ ) + for( n=1; zSemName[n]; n++ ) if( zSemName[n]=='/' ) zSemName[n] = '_'; - pNew->pOpen->pSem = sem_open(zSemName, O_CREAT, 0666, 1); - if( pNew->pOpen->pSem == SEM_FAILED ){ + pNew->pInode->pSem = sem_open(zSemName, O_CREAT, 0666, 1); + if( pNew->pInode->pSem == SEM_FAILED ){ rc = SQLITE_NOMEM; - pNew->pOpen->aSemName[0] = '\0'; + pNew->pInode->aSemName[0] = '\0'; } } unixLeaveMutex(); @@ -24543,14 +29895,15 @@ static int fillInUnixFile( pNew->lastErrno = 0; #if OS_VXWORKS if( rc!=SQLITE_OK ){ - unlink(zFilename); + if( h>=0 ) robust_close(pNew, h, __LINE__); + h = -1; + osUnlink(zFilename); isDelete = 0; } - pNew->isDelete = isDelete; + if( isDelete ) pNew->ctrlFlags |= UNIXFILE_DELETE; #endif if( rc!=SQLITE_OK ){ - if( dirfd>=0 ) close(dirfd); /* silent leak if fail, already in error */ - close(h); + if( h>=0 ) robust_close(pNew, h, __LINE__); }else{ pNew->pMethod = pLockingStyle; OpenCounter(+1); @@ -24559,34 +29912,32 @@ static int fillInUnixFile( } /* -** Open a file descriptor to the directory containing file zFilename. -** If successful, *pFd is set to the opened file descriptor and -** SQLITE_OK is returned. If an error occurs, either SQLITE_NOMEM -** or SQLITE_CANTOPEN is returned and *pFd is set to an undefined -** value. -** -** If SQLITE_OK is returned, the caller is responsible for closing -** the file descriptor *pFd using close(). +** Return the name of a directory in which to put temporary files. +** If no suitable temporary file directory can be found, return NULL. */ -static int openDirectory(const char *zFilename, int *pFd){ - int ii; - int fd = -1; - char zDirname[MAX_PATHNAME+1]; +static const char *unixTempFileDir(void){ + static const char *azDirs[] = { + 0, + 0, + "/var/tmp", + "/usr/tmp", + "/tmp", + 0 /* List terminator */ + }; + unsigned int i; + struct stat buf; + const char *zDir = 0; - sqlite3_snprintf(MAX_PATHNAME, zDirname, "%s", zFilename); - for(ii=(int)strlen(zDirname); ii>1 && zDirname[ii]!='/'; ii--); - if( ii>0 ){ - zDirname[ii] = '\0'; - fd = open(zDirname, O_RDONLY|O_BINARY, 0); - if( fd>=0 ){ -#ifdef FD_CLOEXEC - fcntl(fd, F_SETFD, fcntl(fd, F_GETFD, 0) | FD_CLOEXEC); -#endif - OSTRACE3("OPENDIR %-3d %s\n", fd, zDirname); - } + azDirs[0] = sqlite3_temp_directory; + if( !azDirs[1] ) azDirs[1] = getenv("TMPDIR"); + for(i=0; i=0?SQLITE_OK:SQLITE_CANTOPEN); + return zDir; } /* @@ -24594,22 +29945,13 @@ static int openDirectory(const char *zFilename, int *pFd){ ** by the calling process and must be big enough to hold at least ** pVfs->mxPathname bytes. */ -static int getTempname(int nBuf, char *zBuf){ - static const char *azDirs[] = { - 0, - 0, - "/var/tmp", - "/usr/tmp", - "/tmp", - ".", - }; +static int unixGetTempname(int nBuf, char *zBuf){ static const unsigned char zChars[] = "abcdefghijklmnopqrstuvwxyz" "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "0123456789"; unsigned int i, j; - struct stat buf; - const char *zDir = "."; + const char *zDir; /* It's odd to simulate an io-error here, but really this is just ** using the io-error infrastructure to test that SQLite handles this @@ -24617,36 +29959,26 @@ static int getTempname(int nBuf, char *zBuf){ */ SimulateIOError( return SQLITE_IOERR ); - azDirs[0] = sqlite3_temp_directory; - if (NULL == azDirs[1]) { - azDirs[1] = getenv("TMPDIR"); - } - - for(i=0; i= (size_t)nBuf ){ + if( (strlen(zDir) + strlen(SQLITE_TEMP_FILE_PREFIX) + 18) >= (size_t)nBuf ){ return SQLITE_ERROR; } do{ - sqlite3_snprintf(nBuf-17, zBuf, "%s/"SQLITE_TEMP_FILE_PREFIX, zDir); + sqlite3_snprintf(nBuf-18, zBuf, "%s/"SQLITE_TEMP_FILE_PREFIX, zDir); j = (int)strlen(zBuf); sqlite3_randomness(15, &zBuf[j]); for(i=0; i<15; i++, j++){ zBuf[j] = (char)zChars[ ((unsigned char)zBuf[j])%(sizeof(zChars)-1) ]; } zBuf[j] = 0; - }while( access(zBuf,0)==0 ); + zBuf[j+1] = 0; + }while( osAccess(zBuf,0)==0 ); return SQLITE_OK; } @@ -24659,6 +29991,139 @@ static int getTempname(int nBuf, char *zBuf){ static int proxyTransformUnixFile(unixFile*, const char*); #endif +/* +** Search for an unused file descriptor that was opened on the database +** file (not a journal or master-journal file) identified by pathname +** zPath with SQLITE_OPEN_XXX flags matching those passed as the second +** argument to this function. +** +** Such a file descriptor may exist if a database connection was closed +** but the associated file descriptor could not be closed because some +** other file descriptor open on the same file is holding a file-lock. +** Refer to comments in the unixClose() function and the lengthy comment +** describing "Posix Advisory Locking" at the start of this file for +** further details. Also, ticket #4018. +** +** If a suitable file descriptor is found, then it is returned. If no +** such file descriptor is located, -1 is returned. +*/ +static UnixUnusedFd *findReusableFd(const char *zPath, int flags){ + UnixUnusedFd *pUnused = 0; + + /* Do not search for an unused file descriptor on vxworks. Not because + ** vxworks would not benefit from the change (it might, we're not sure), + ** but because no way to test it is currently available. It is better + ** not to risk breaking vxworks support for the sake of such an obscure + ** feature. */ +#if !OS_VXWORKS + struct stat sStat; /* Results of stat() call */ + + /* A stat() call may fail for various reasons. If this happens, it is + ** almost certain that an open() call on the same path will also fail. + ** For this reason, if an error occurs in the stat() call here, it is + ** ignored and -1 is returned. The caller will try to open a new file + ** descriptor on the same path, fail, and return an error to SQLite. + ** + ** Even if a subsequent open() call does succeed, the consequences of + ** not searching for a resusable file descriptor are not dire. */ + if( 0==osStat(zPath, &sStat) ){ + unixInodeInfo *pInode; + + unixEnterMutex(); + pInode = inodeList; + while( pInode && (pInode->fileId.dev!=sStat.st_dev + || pInode->fileId.ino!=sStat.st_ino) ){ + pInode = pInode->pNext; + } + if( pInode ){ + UnixUnusedFd **pp; + for(pp=&pInode->pUnused; *pp && (*pp)->flags!=flags; pp=&((*pp)->pNext)); + pUnused = *pp; + if( pUnused ){ + *pp = pUnused->pNext; + } + } + unixLeaveMutex(); + } +#endif /* if !OS_VXWORKS */ + return pUnused; +} + +/* +** This function is called by unixOpen() to determine the unix permissions +** to create new files with. If no error occurs, then SQLITE_OK is returned +** and a value suitable for passing as the third argument to open(2) is +** written to *pMode. If an IO error occurs, an SQLite error code is +** returned and the value of *pMode is not modified. +** +** In most cases cases, this routine sets *pMode to 0, which will become +** an indication to robust_open() to create the file using +** SQLITE_DEFAULT_FILE_PERMISSIONS adjusted by the umask. +** But if the file being opened is a WAL or regular journal file, then +** this function queries the file-system for the permissions on the +** corresponding database file and sets *pMode to this value. Whenever +** possible, WAL and journal files are created using the same permissions +** as the associated database file. +** +** If the SQLITE_ENABLE_8_3_NAMES option is enabled, then the +** original filename is unavailable. But 8_3_NAMES is only used for +** FAT filesystems and permissions do not matter there, so just use +** the default permissions. +*/ +static int findCreateFileMode( + const char *zPath, /* Path of file (possibly) being created */ + int flags, /* Flags passed as 4th argument to xOpen() */ + mode_t *pMode, /* OUT: Permissions to open file with */ + uid_t *pUid, /* OUT: uid to set on the file */ + gid_t *pGid /* OUT: gid to set on the file */ +){ + int rc = SQLITE_OK; /* Return Code */ + *pMode = 0; + *pUid = 0; + *pGid = 0; + if( flags & (SQLITE_OPEN_WAL|SQLITE_OPEN_MAIN_JOURNAL) ){ + char zDb[MAX_PATHNAME+1]; /* Database file path */ + int nDb; /* Number of valid bytes in zDb */ + struct stat sStat; /* Output of stat() on database file */ + + /* zPath is a path to a WAL or journal file. The following block derives + ** the path to the associated database file from zPath. This block handles + ** the following naming conventions: + ** + ** "-journal" + ** "-wal" + ** "-journalNN" + ** "-walNN" + ** + ** where NN is a decimal number. The NN naming schemes are + ** used by the test_multiplex.c module. + */ + nDb = sqlite3Strlen30(zPath) - 1; +#ifdef SQLITE_ENABLE_8_3_NAMES + while( nDb>0 && sqlite3Isalnum(zPath[nDb]) ) nDb--; + if( nDb==0 || zPath[nDb]!='-' ) return SQLITE_OK; +#else + while( zPath[nDb]!='-' ){ + assert( nDb>0 ); + assert( zPath[nDb]!='\n' ); + nDb--; + } +#endif + memcpy(zDb, zPath, nDb); + zDb[nDb] = '\0'; + + if( 0==osStat(zDb, &sStat) ){ + *pMode = sStat.st_mode & 0777; + *pUid = sStat.st_uid; + *pGid = sStat.st_gid; + }else{ + rc = SQLITE_IOERR_FSTAT; + } + }else if( flags & SQLITE_OPEN_DELETEONCLOSE ){ + *pMode = 0600; + } + return rc; +} /* ** Open the file zPath. @@ -24689,31 +30154,40 @@ static int unixOpen( int flags, /* Input flags to control the opening */ int *pOutFlags /* Output flags returned to SQLite core */ ){ - int fd = -1; /* File descriptor returned by open() */ - int dirfd = -1; /* Directory file descriptor */ + unixFile *p = (unixFile *)pFile; + int fd = -1; /* File descriptor returned by open() */ int openFlags = 0; /* Flags to pass to open() */ int eType = flags&0xFFFFFF00; /* Type of file to open */ int noLock; /* True to omit locking primitives */ - int rc = SQLITE_OK; + int rc = SQLITE_OK; /* Function Return Code */ + int ctrlFlags = 0; /* UNIXFILE_* flags */ int isExclusive = (flags & SQLITE_OPEN_EXCLUSIVE); int isDelete = (flags & SQLITE_OPEN_DELETEONCLOSE); int isCreate = (flags & SQLITE_OPEN_CREATE); int isReadonly = (flags & SQLITE_OPEN_READONLY); int isReadWrite = (flags & SQLITE_OPEN_READWRITE); +#if SQLITE_ENABLE_LOCKING_STYLE + int isAutoProxy = (flags & SQLITE_OPEN_AUTOPROXY); +#endif +#if defined(__APPLE__) || SQLITE_ENABLE_LOCKING_STYLE + struct statfs fsInfo; +#endif /* If creating a master or main-file journal, this function will open ** a file-descriptor on the directory too. The first time unixSync() ** is called the directory file descriptor will be fsync()ed and close()d. */ - int isOpenDirectory = (isCreate && - (eType==SQLITE_OPEN_MASTER_JOURNAL || eType==SQLITE_OPEN_MAIN_JOURNAL) - ); + int syncDir = (isCreate && ( + eType==SQLITE_OPEN_MASTER_JOURNAL + || eType==SQLITE_OPEN_MAIN_JOURNAL + || eType==SQLITE_OPEN_WAL + )); /* If argument zPath is a NULL pointer, this function is required to open ** a temporary file. Use this buffer to store the file name in. */ - char zTmpname[MAX_PATHNAME+1]; + char zTmpname[MAX_PATHNAME+2]; const char *zName = zPath; /* Check the following statements are true: @@ -24728,119 +30202,198 @@ static int unixOpen( assert(isExclusive==0 || isCreate); assert(isDelete==0 || isCreate); - /* The main DB, main journal, and master journal are never automatically - ** deleted - */ - assert( eType!=SQLITE_OPEN_MAIN_DB || !isDelete ); - assert( eType!=SQLITE_OPEN_MAIN_JOURNAL || !isDelete ); - assert( eType!=SQLITE_OPEN_MASTER_JOURNAL || !isDelete ); + /* The main DB, main journal, WAL file and master journal are never + ** automatically deleted. Nor are they ever temporary files. */ + assert( (!isDelete && zName) || eType!=SQLITE_OPEN_MAIN_DB ); + assert( (!isDelete && zName) || eType!=SQLITE_OPEN_MAIN_JOURNAL ); + assert( (!isDelete && zName) || eType!=SQLITE_OPEN_MASTER_JOURNAL ); + assert( (!isDelete && zName) || eType!=SQLITE_OPEN_WAL ); /* Assert that the upper layer has set one of the "file-type" flags. */ assert( eType==SQLITE_OPEN_MAIN_DB || eType==SQLITE_OPEN_TEMP_DB || eType==SQLITE_OPEN_MAIN_JOURNAL || eType==SQLITE_OPEN_TEMP_JOURNAL || eType==SQLITE_OPEN_SUBJOURNAL || eType==SQLITE_OPEN_MASTER_JOURNAL - || eType==SQLITE_OPEN_TRANSIENT_DB + || eType==SQLITE_OPEN_TRANSIENT_DB || eType==SQLITE_OPEN_WAL ); - memset(pFile, 0, sizeof(unixFile)); + memset(p, 0, sizeof(unixFile)); + + if( eType==SQLITE_OPEN_MAIN_DB ){ + UnixUnusedFd *pUnused; + pUnused = findReusableFd(zName, flags); + if( pUnused ){ + fd = pUnused->fd; + }else{ + pUnused = sqlite3_malloc(sizeof(*pUnused)); + if( !pUnused ){ + return SQLITE_NOMEM; + } + } + p->pUnused = pUnused; - if( !zName ){ - assert(isDelete && !isOpenDirectory); - rc = getTempname(MAX_PATHNAME+1, zTmpname); + /* Database filenames are double-zero terminated if they are not + ** URIs with parameters. Hence, they can always be passed into + ** sqlite3_uri_parameter(). */ + assert( (flags & SQLITE_OPEN_URI) || zName[strlen(zName)+1]==0 ); + + }else if( !zName ){ + /* If zName is NULL, the upper layer is requesting a temp file. */ + assert(isDelete && !syncDir); + rc = unixGetTempname(MAX_PATHNAME+2, zTmpname); if( rc!=SQLITE_OK ){ return rc; } zName = zTmpname; + + /* Generated temporary filenames are always double-zero terminated + ** for use by sqlite3_uri_parameter(). */ + assert( zName[strlen(zName)+1]==0 ); } + /* Determine the value of the flags parameter passed to POSIX function + ** open(). These must be calculated even if open() is not called, as + ** they may be stored as part of the file handle and used by the + ** 'conch file' locking functions later on. */ if( isReadonly ) openFlags |= O_RDONLY; if( isReadWrite ) openFlags |= O_RDWR; if( isCreate ) openFlags |= O_CREAT; if( isExclusive ) openFlags |= (O_EXCL|O_NOFOLLOW); openFlags |= (O_LARGEFILE|O_BINARY); - fd = open(zName, openFlags, isDelete?0600:SQLITE_DEFAULT_FILE_PERMISSIONS); - OSTRACE4("OPENX %-3d %s 0%o\n", fd, zName, openFlags); - if( fd<0 && errno!=EISDIR && isReadWrite && !isExclusive ){ - /* Failed to open the file for read/write access. Try read-only. */ - flags &= ~(SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE); - flags |= SQLITE_OPEN_READONLY; - return unixOpen(pVfs, zPath, pFile, flags, pOutFlags); - } if( fd<0 ){ - return SQLITE_CANTOPEN; + mode_t openMode; /* Permissions to create file with */ + uid_t uid; /* Userid for the file */ + gid_t gid; /* Groupid for the file */ + rc = findCreateFileMode(zName, flags, &openMode, &uid, &gid); + if( rc!=SQLITE_OK ){ + assert( !p->pUnused ); + assert( eType==SQLITE_OPEN_WAL || eType==SQLITE_OPEN_MAIN_JOURNAL ); + return rc; + } + fd = robust_open(zName, openFlags, openMode); + OSTRACE(("OPENX %-3d %s 0%o\n", fd, zName, openFlags)); + if( fd<0 && errno!=EISDIR && isReadWrite && !isExclusive ){ + /* Failed to open the file for read/write access. Try read-only. */ + flags &= ~(SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE); + openFlags &= ~(O_RDWR|O_CREAT); + flags |= SQLITE_OPEN_READONLY; + openFlags |= O_RDONLY; + isReadonly = 1; + fd = robust_open(zName, openFlags, openMode); + } + if( fd<0 ){ + rc = unixLogError(SQLITE_CANTOPEN_BKPT, "open", zName); + goto open_finished; + } + + /* If this process is running as root and if creating a new rollback + ** journal or WAL file, set the ownership of the journal or WAL to be + ** the same as the original database. + */ + if( flags & (SQLITE_OPEN_WAL|SQLITE_OPEN_MAIN_JOURNAL) ){ + osFchown(fd, uid, gid); + } + } + assert( fd>=0 ); + if( pOutFlags ){ + *pOutFlags = flags; + } + + if( p->pUnused ){ + p->pUnused->fd = fd; + p->pUnused->flags = flags; } + if( isDelete ){ #if OS_VXWORKS zPath = zName; #else - unlink(zName); + osUnlink(zName); #endif } #if SQLITE_ENABLE_LOCKING_STYLE else{ - ((unixFile*)pFile)->openFlags = openFlags; + p->openFlags = openFlags; } #endif - if( pOutFlags ){ - *pOutFlags = flags; - } -#ifndef NDEBUG - if( (flags & SQLITE_OPEN_MAIN_DB)!=0 ){ - ((unixFile*)pFile)->isLockable = 1; - } -#endif + noLock = eType!=SQLITE_OPEN_MAIN_DB; - assert( fd>=0 ); - if( isOpenDirectory ){ - rc = openDirectory(zPath, &dirfd); - if( rc!=SQLITE_OK ){ - close(fd); /* silently leak if fail, already in error */ - return rc; - } + +#if defined(__APPLE__) || SQLITE_ENABLE_LOCKING_STYLE + if( fstatfs(fd, &fsInfo) == -1 ){ + ((unixFile*)pFile)->lastErrno = errno; + robust_close(p, fd, __LINE__); + return SQLITE_IOERR_ACCESS; + } + if (0 == strncmp("msdos", fsInfo.f_fstypename, 5)) { + ((unixFile*)pFile)->fsFlags |= SQLITE_FSFLAGS_IS_MSDOS; } - -#ifdef FD_CLOEXEC - fcntl(fd, F_SETFD, fcntl(fd, F_GETFD, 0) | FD_CLOEXEC); #endif - noLock = eType!=SQLITE_OPEN_MAIN_DB; + /* Set up appropriate ctrlFlags */ + if( isDelete ) ctrlFlags |= UNIXFILE_DELETE; + if( isReadonly ) ctrlFlags |= UNIXFILE_RDONLY; + if( noLock ) ctrlFlags |= UNIXFILE_NOLOCK; + if( syncDir ) ctrlFlags |= UNIXFILE_DIRSYNC; + if( flags & SQLITE_OPEN_URI ) ctrlFlags |= UNIXFILE_URI; +#if SQLITE_ENABLE_LOCKING_STYLE #if SQLITE_PREFER_PROXY_LOCKING - if( zPath!=NULL && !noLock ){ + isAutoProxy = 1; +#endif + if( isAutoProxy && (zPath!=NULL) && (!noLock) && pVfs->xOpen ){ char *envforce = getenv("SQLITE_FORCE_PROXY_LOCKING"); int useProxy = 0; - /* SQLITE_FORCE_PROXY_LOCKING==1 means force always use proxy, - ** 0 means never use proxy, NULL means use proxy for non-local files only - */ + /* SQLITE_FORCE_PROXY_LOCKING==1 means force always use proxy, 0 means + ** never use proxy, NULL means use proxy for non-local files only. */ if( envforce!=NULL ){ useProxy = atoi(envforce)>0; }else{ - struct statfs fsInfo; - if( statfs(zPath, &fsInfo) == -1 ){ - ((unixFile*)pFile)->lastErrno = errno; - if( dirfd>=0 ) close(dirfd); /* silently leak if fail, in error */ - close(fd); /* silently leak if fail, in error */ - return SQLITE_IOERR_ACCESS; + /* In theory, the close(fd) call is sub-optimal. If the file opened + ** with fd is a database file, and there are other connections open + ** on that file that are currently holding advisory locks on it, + ** then the call to close() will cancel those locks. In practice, + ** we're assuming that statfs() doesn't fail very often. At least + ** not while other file descriptors opened by the same process on + ** the same file are working. */ + p->lastErrno = errno; + robust_close(p, fd, __LINE__); + rc = SQLITE_IOERR_ACCESS; + goto open_finished; } useProxy = !(fsInfo.f_flags&MNT_LOCAL); } if( useProxy ){ - rc = fillInUnixFile(pVfs, fd, dirfd, pFile, zPath, noLock, isDelete); + rc = fillInUnixFile(pVfs, fd, pFile, zPath, ctrlFlags); if( rc==SQLITE_OK ){ rc = proxyTransformUnixFile((unixFile*)pFile, ":auto:"); + if( rc!=SQLITE_OK ){ + /* Use unixClose to clean up the resources added in fillInUnixFile + ** and clear all the structure's references. Specifically, + ** pFile->pMethods will be NULL so sqlite3OsClose will be a no-op + */ + unixClose(pFile); + return rc; + } } - return rc; + goto open_finished; } } #endif - return fillInUnixFile(pVfs, fd, dirfd, pFile, zPath, noLock, isDelete); + rc = fillInUnixFile(pVfs, fd, pFile, zPath, ctrlFlags); + +open_finished: + if( rc!=SQLITE_OK ){ + sqlite3_free(p->pUnused); + } + return rc; } + /* ** Delete the file at zPath. If the dirSync argument is true, fsync() ** the directory after deleting the file. @@ -24853,11 +30406,13 @@ static int unixDelete( int rc = SQLITE_OK; UNUSED_PARAMETER(NotUsed); SimulateIOError(return SQLITE_IOERR_DELETE); - unlink(zPath); + if( osUnlink(zPath)==(-1) && errno!=ENOENT ){ + return unixLogError(SQLITE_IOERR_DELETE, "unlink", zPath); + } #ifndef SQLITE_DISABLE_DIRSYNC - if( dirSync ){ + if( (dirSync & 1)!=0 ){ int fd; - rc = openDirectory(zPath, &fd); + rc = osOpenDirectory(zPath, &fd); if( rc==SQLITE_OK ){ #if OS_VXWORKS if( fsync(fd)==-1 ) @@ -24865,11 +30420,11 @@ static int unixDelete( if( fsync(fd) ) #endif { - rc = SQLITE_IOERR_DIR_FSYNC; - } - if( close(fd)&&!rc ){ - rc = SQLITE_IOERR_DIR_CLOSE; + rc = unixLogError(SQLITE_IOERR_DIR_FSYNC, "fsync", zPath); } + robust_close(0, fd, __LINE__); + }else if( rc==SQLITE_CANTOPEN ){ + rc = SQLITE_OK; } } #endif @@ -24909,7 +30464,13 @@ static int unixAccess( default: assert(!"Invalid flags argument"); } - *pResOut = (access(zPath, amode)==0); + *pResOut = (osAccess(zPath, amode)==0); + if( flags==SQLITE_ACCESS_EXISTS && *pResOut ){ + struct stat buf; + if( 0==osStat(zPath, &buf) && buf.st_size==0 ){ + *pResOut = 0; + } + } return SQLITE_OK; } @@ -24945,8 +30506,8 @@ static int unixFullPathname( sqlite3_snprintf(nOut, zOut, "%s", zPath); }else{ int nCwd; - if( getcwd(zOut, nOut-1)==0 ){ - return SQLITE_CANTOPEN; + if( osGetcwd(zOut, nOut-1)==0 ){ + return unixLogError(SQLITE_CANTOPEN_BKPT, "getcwd", zPath); } nCwd = (int)strlen(zOut); sqlite3_snprintf(nOut-nCwd, &zOut[nCwd], "/%s", zPath); @@ -24974,7 +30535,7 @@ static void *unixDlOpen(sqlite3_vfs *NotUsed, const char *zFilename){ ** error message. */ static void unixDlError(sqlite3_vfs *NotUsed, int nBuf, char *zBufOut){ - char *zErr; + const char *zErr; UNUSED_PARAMETER(NotUsed); unixEnterMutex(); zErr = dlerror(); @@ -25039,8 +30600,8 @@ static int unixRandomness(sqlite3_vfs *NotUsed, int nBuf, char *zBuf){ memset(zBuf, 0, nBuf); #if !defined(SQLITE_TEST) { - int pid, fd; - fd = open("/dev/urandom", O_RDONLY); + int pid, fd, got; + fd = robust_open("/dev/urandom", O_RDONLY, 0); if( fd<0 ){ time_t t; time(&t); @@ -25050,8 +30611,8 @@ static int unixRandomness(sqlite3_vfs *NotUsed, int nBuf, char *zBuf){ assert( sizeof(t)+sizeof(pid)<=(size_t)nBuf ); nBuf = sizeof(t) + sizeof(pid); }else{ - nBuf = read(fd, zBuf, nBuf); - close(fd); + do{ got = osRead(fd, zBuf, nBuf); }while( got<0 && errno==EINTR ); + robust_close(0, fd, __LINE__); } } #endif @@ -25098,36 +30659,56 @@ SQLITE_API int sqlite3_current_time = 0; /* Fake system time in seconds since 1 #endif /* -** Find the current time (in Universal Coordinated Time). Write the -** current time and date as a Julian Day number into *prNow and -** return 0. Return 1 if the time and date cannot be found. +** Find the current time (in Universal Coordinated Time). Write into *piNow +** the current time and date as a Julian Day number times 86_400_000. In +** other words, write into *piNow the number of milliseconds since the Julian +** epoch of noon in Greenwich on November 24, 4714 B.C according to the +** proleptic Gregorian calendar. +** +** On success, return SQLITE_OK. Return SQLITE_ERROR if the time and date +** cannot be found. */ -static int unixCurrentTime(sqlite3_vfs *NotUsed, double *prNow){ -#if defined(SQLITE_OMIT_FLOATING_POINT) - time_t t; - time(&t); - *prNow = (((sqlite3_int64)t)/8640 + 24405875)/10; -#elif defined(NO_GETTOD) +static int unixCurrentTimeInt64(sqlite3_vfs *NotUsed, sqlite3_int64 *piNow){ + static const sqlite3_int64 unixEpoch = 24405875*(sqlite3_int64)8640000; + int rc = SQLITE_OK; +#if defined(NO_GETTOD) time_t t; time(&t); - *prNow = t/86400.0 + 2440587.5; + *piNow = ((sqlite3_int64)t)*1000 + unixEpoch; #elif OS_VXWORKS struct timespec sNow; clock_gettime(CLOCK_REALTIME, &sNow); - *prNow = 2440587.5 + sNow.tv_sec/86400.0 + sNow.tv_nsec/86400000000000.0; + *piNow = unixEpoch + 1000*(sqlite3_int64)sNow.tv_sec + sNow.tv_nsec/1000000; #else struct timeval sNow; - gettimeofday(&sNow, 0); - *prNow = 2440587.5 + sNow.tv_sec/86400.0 + sNow.tv_usec/86400000000.0; + if( gettimeofday(&sNow, 0)==0 ){ + *piNow = unixEpoch + 1000*(sqlite3_int64)sNow.tv_sec + sNow.tv_usec/1000; + }else{ + rc = SQLITE_ERROR; + } #endif #ifdef SQLITE_TEST if( sqlite3_current_time ){ - *prNow = sqlite3_current_time/86400.0 + 2440587.5; + *piNow = 1000*(sqlite3_int64)sqlite3_current_time + unixEpoch; } #endif UNUSED_PARAMETER(NotUsed); - return 0; + return rc; +} + +/* +** Find the current time (in Universal Coordinated Time). Write the +** current time and date as a Julian Day number into *prNow and +** return 0. Return 1 if the time and date cannot be found. +*/ +static int unixCurrentTime(sqlite3_vfs *NotUsed, double *prNow){ + sqlite3_int64 i = 0; + int rc; + UNUSED_PARAMETER(NotUsed); + rc = unixCurrentTimeInt64(0, &i); + *prNow = i/86400000.0; + return rc; } /* @@ -25144,6 +30725,7 @@ static int unixGetLastError(sqlite3_vfs *NotUsed, int NotUsed2, char *NotUsed3){ return 0; } + /* ************************ End of sqlite3_vfs methods *************************** ******************************************************************************/ @@ -25253,11 +30835,6 @@ static int unixGetLastError(sqlite3_vfs *NotUsed, int NotUsed2, char *NotUsed3){ ** of the database file for multiple readers and writers on the same ** host (the conch ensures that they all use the same local lock file). ** -** There is a third file - the host ID file - used as a persistent record -** of a unique identifier for the host, a 128-byte unique host id file -** in the path defined by the HOSTIDPATH macro (default value is -** /Library/Caches/.com.apple.sqliteConchHostId). -** ** Requesting the lock proxy does not immediately take the conch, it is ** only taken when the first request to lock database file is made. ** This matches the semantics of the traditional locking behavior, where @@ -25283,10 +30860,6 @@ static int unixGetLastError(sqlite3_vfs *NotUsed, int NotUsed2, char *NotUsed3){ ** Enables the logging of error messages during host id file ** retrieval and creation ** -** HOSTIDPATH -** -** Overrides the default host ID file path location -** ** LOCKPROXYDIR ** ** Overrides the default directory used for lock proxy files that @@ -25311,11 +30884,6 @@ static int unixGetLastError(sqlite3_vfs *NotUsed, int NotUsed2, char *NotUsed3){ */ #if defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE -#ifdef SQLITE_TEST -/* simulate multiple hosts by creating unique hostid file paths */ -SQLITE_API int sqlite3_hostid_num = 0; -#endif - /* ** The proxyLockingContext has the path and file structures for the remote ** and local proxy files in it @@ -25327,134 +30895,16 @@ struct proxyLockingContext { unixFile *lockProxy; /* Open proxy lock file */ char *lockProxyPath; /* Name of the proxy lock file */ char *dbPath; /* Name of the open file */ - int conchHeld; /* True if the conch is currently held */ + int conchHeld; /* 1 if the conch is held, -1 if lockless */ void *oldLockingContext; /* Original lockingcontext to restore on close */ sqlite3_io_methods const *pOldMethod; /* Original I/O methods for close */ }; -/* HOSTIDLEN and CONCHLEN both include space for the string -** terminating nul -*/ -#define HOSTIDLEN 128 -#define CONCHLEN (MAXPATHLEN+HOSTIDLEN+1) -#ifndef HOSTIDPATH -# define HOSTIDPATH "/Library/Caches/.com.apple.sqliteConchHostId" -#endif - -/* basically a copy of unixRandomness with different -** test behavior built in */ -static int proxyGenerateHostID(char *pHostID){ - int pid, fd, len; - unsigned char *key = (unsigned char *)pHostID; - - memset(key, 0, HOSTIDLEN); - len = 0; - fd = open("/dev/urandom", O_RDONLY); - if( fd>=0 ){ - len = read(fd, key, HOSTIDLEN); - close(fd); /* silently leak the fd if it fails */ - } - if( len < HOSTIDLEN ){ - time_t t; - time(&t); - memcpy(key, &t, sizeof(t)); - pid = getpid(); - memcpy(&key[sizeof(t)], &pid, sizeof(pid)); - } - -#ifdef MAKE_PRETTY_HOSTID - { - int i; - /* filter the bytes into printable ascii characters and NUL terminate */ - key[(HOSTIDLEN-1)] = 0x00; - for( i=0; i<(HOSTIDLEN-1); i++ ){ - unsigned char pa = key[i]&0x7F; - if( pa<0x20 ){ - key[i] = (key[i]&0x80 == 0x80) ? pa+0x40 : pa+0x20; - }else if( pa==0x7F ){ - key[i] = (key[i]&0x80 == 0x80) ? pa=0x20 : pa+0x7E; - } - } - } -#endif - return SQLITE_OK; -} - -/* writes the host id path to path, path should be an pre-allocated buffer -** with enough space for a path -*/ -static void proxyGetHostIDPath(char *path, size_t len){ - strlcpy(path, HOSTIDPATH, len); -#ifdef SQLITE_TEST - if( sqlite3_hostid_num>0 ){ - char suffix[2] = "1"; - suffix[0] = suffix[0] + sqlite3_hostid_num; - strlcat(path, suffix, len); - } -#endif - OSTRACE3("GETHOSTIDPATH %s pid=%d\n", path, getpid()); -} - -/* get the host ID from a sqlite hostid file stored in the -** user-specific tmp directory, create the ID if it's not there already +/* +** The proxy lock file path for the database at dbPath is written into lPath, +** which must point to valid, writable memory large enough for a maxLen length +** file path. */ -static int proxyGetHostID(char *pHostID, int *pError){ - int fd; - char path[MAXPATHLEN]; - size_t len; - int rc=SQLITE_OK; - - proxyGetHostIDPath(path, MAXPATHLEN); - /* try to create the host ID file, if it already exists read the contents */ - fd = open(path, O_CREAT|O_WRONLY|O_EXCL, 0644); - if( fd<0 ){ - int err=errno; - - if( err!=EEXIST ){ -#ifdef SQLITE_PROXY_DEBUG /* set the sqlite error message instead */ - fprintf(stderr, "sqlite error creating host ID file %s: %s\n", - path, strerror(err)); -#endif - return SQLITE_PERM; - } - /* couldn't create the file, read it instead */ - fd = open(path, O_RDONLY|O_EXCL); - if( fd<0 ){ -#ifdef SQLITE_PROXY_DEBUG /* set the sqlite error message instead */ - int err = errno; - fprintf(stderr, "sqlite error opening host ID file %s: %s\n", - path, strerror(err)); -#endif - return SQLITE_PERM; - } - len = pread(fd, pHostID, HOSTIDLEN, 0); - if( len<0 ){ - *pError = errno; - rc = SQLITE_IOERR_READ; - }else if( len 0) ){ + /* only mkdir if leaf dir != "." or "/" or ".." */ + if( i-start>2 || (i-start==1 && buf[start] != '.' && buf[start] != '/') + || (i-start==2 && buf[start] != '.' && buf[start+1] != '.') ){ + buf[i]='\0'; + if( osMkdir(buf, SQLITE_DEFAULT_PROXYDIR_PERMISSIONS) ){ + int err=errno; + if( err!=EEXIST ) { + OSTRACE(("CREATELOCKPATH FAILED creating %s, " + "'%s' proxy lock path=%s pid=%d\n", + buf, strerror(err), lockPath, getpid())); + return err; + } + } + } + start=i+1; + } + buf[i] = lockPath[i]; + } + OSTRACE(("CREATELOCKPATH proxy lock path=%s pid=%d\n", lockPath, getpid())); + return 0; +} + /* ** Create a new VFS file descriptor (stored in memory obtained from ** sqlite3_malloc) and open the file named "path" in the file descriptor. @@ -25508,38 +30986,275 @@ static int proxyGetLockPath(const char *dbPath, char *lPath, size_t maxLen){ ** The caller is responsible not only for closing the file descriptor ** but also for freeing the memory associated with the file descriptor. */ -static int proxyCreateUnixFile(const char *path, unixFile **ppFile) { - int fd; - int dirfd = -1; +static int proxyCreateUnixFile( + const char *path, /* path for the new unixFile */ + unixFile **ppFile, /* unixFile created and returned by ref */ + int islockfile /* if non zero missing dirs will be created */ +) { + int fd = -1; unixFile *pNew; int rc = SQLITE_OK; + int openFlags = O_RDWR | O_CREAT; sqlite3_vfs dummyVfs; - - fd = open(path, O_RDWR | O_CREAT, SQLITE_DEFAULT_FILE_PERMISSIONS); + int terrno = 0; + UnixUnusedFd *pUnused = NULL; + + /* 1. first try to open/create the file + ** 2. if that fails, and this is a lock file (not-conch), try creating + ** the parent directories and then try again. + ** 3. if that fails, try to open the file read-only + ** otherwise return BUSY (if lock file) or CANTOPEN for the conch file + */ + pUnused = findReusableFd(path, openFlags); + if( pUnused ){ + fd = pUnused->fd; + }else{ + pUnused = sqlite3_malloc(sizeof(*pUnused)); + if( !pUnused ){ + return SQLITE_NOMEM; + } + } + if( fd<0 ){ + fd = robust_open(path, openFlags, 0); + terrno = errno; + if( fd<0 && errno==ENOENT && islockfile ){ + if( proxyCreateLockPath(path) == SQLITE_OK ){ + fd = robust_open(path, openFlags, 0); + } + } + } if( fd<0 ){ - return SQLITE_CANTOPEN; + openFlags = O_RDONLY; + fd = robust_open(path, openFlags, 0); + terrno = errno; + } + if( fd<0 ){ + if( islockfile ){ + return SQLITE_BUSY; + } + switch (terrno) { + case EACCES: + return SQLITE_PERM; + case EIO: + return SQLITE_IOERR_LOCK; /* even though it is the conch */ + default: + return SQLITE_CANTOPEN_BKPT; + } } - pNew = (unixFile *)sqlite3_malloc(sizeof(unixFile)); + pNew = (unixFile *)sqlite3_malloc(sizeof(*pNew)); if( pNew==NULL ){ rc = SQLITE_NOMEM; goto end_create_proxy; } memset(pNew, 0, sizeof(unixFile)); - + pNew->openFlags = openFlags; + memset(&dummyVfs, 0, sizeof(dummyVfs)); dummyVfs.pAppData = (void*)&autolockIoFinder; - rc = fillInUnixFile(&dummyVfs, fd, dirfd, (sqlite3_file*)pNew, path, 0, 0); + dummyVfs.zName = "dummy"; + pUnused->fd = fd; + pUnused->flags = openFlags; + pNew->pUnused = pUnused; + + rc = fillInUnixFile(&dummyVfs, fd, (sqlite3_file*)pNew, path, 0); if( rc==SQLITE_OK ){ *ppFile = pNew; return SQLITE_OK; } end_create_proxy: - close(fd); /* silently leak fd if error, we're already in error */ + robust_close(pNew, fd, __LINE__); sqlite3_free(pNew); + sqlite3_free(pUnused); + return rc; +} + +#ifdef SQLITE_TEST +/* simulate multiple hosts by creating unique hostid file paths */ +SQLITE_API int sqlite3_hostid_num = 0; +#endif + +#define PROXY_HOSTIDLEN 16 /* conch file host id length */ + +/* Not always defined in the headers as it ought to be */ +extern int gethostuuid(uuid_t id, const struct timespec *wait); + +/* get the host ID via gethostuuid(), pHostID must point to PROXY_HOSTIDLEN +** bytes of writable memory. +*/ +static int proxyGetHostID(unsigned char *pHostID, int *pError){ + assert(PROXY_HOSTIDLEN == sizeof(uuid_t)); + memset(pHostID, 0, PROXY_HOSTIDLEN); +#if defined(__MAX_OS_X_VERSION_MIN_REQUIRED)\ + && __MAC_OS_X_VERSION_MIN_REQUIRED<1050 + { + static const struct timespec timeout = {1, 0}; /* 1 sec timeout */ + if( gethostuuid(pHostID, &timeout) ){ + int err = errno; + if( pError ){ + *pError = err; + } + return SQLITE_IOERR; + } + } +#else + UNUSED_PARAMETER(pError); +#endif +#ifdef SQLITE_TEST + /* simulate multiple hosts by creating unique hostid file paths */ + if( sqlite3_hostid_num != 0){ + pHostID[0] = (char)(pHostID[0] + (char)(sqlite3_hostid_num & 0xFF)); + } +#endif + + return SQLITE_OK; +} + +/* The conch file contains the header, host id and lock file path + */ +#define PROXY_CONCHVERSION 2 /* 1-byte header, 16-byte host id, path */ +#define PROXY_HEADERLEN 1 /* conch file header length */ +#define PROXY_PATHINDEX (PROXY_HEADERLEN+PROXY_HOSTIDLEN) +#define PROXY_MAXCONCHLEN (PROXY_HEADERLEN+PROXY_HOSTIDLEN+MAXPATHLEN) + +/* +** Takes an open conch file, copies the contents to a new path and then moves +** it back. The newly created file's file descriptor is assigned to the +** conch file structure and finally the original conch file descriptor is +** closed. Returns zero if successful. +*/ +static int proxyBreakConchLock(unixFile *pFile, uuid_t myHostID){ + proxyLockingContext *pCtx = (proxyLockingContext *)pFile->lockingContext; + unixFile *conchFile = pCtx->conchFile; + char tPath[MAXPATHLEN]; + char buf[PROXY_MAXCONCHLEN]; + char *cPath = pCtx->conchFilePath; + size_t readLen = 0; + size_t pathLen = 0; + char errmsg[64] = ""; + int fd = -1; + int rc = -1; + UNUSED_PARAMETER(myHostID); + + /* create a new path by replace the trailing '-conch' with '-break' */ + pathLen = strlcpy(tPath, cPath, MAXPATHLEN); + if( pathLen>MAXPATHLEN || pathLen<6 || + (strlcpy(&tPath[pathLen-5], "break", 6) != 5) ){ + sqlite3_snprintf(sizeof(errmsg),errmsg,"path error (len %d)",(int)pathLen); + goto end_breaklock; + } + /* read the conch content */ + readLen = osPread(conchFile->h, buf, PROXY_MAXCONCHLEN, 0); + if( readLenh, __LINE__); + conchFile->h = fd; + conchFile->openFlags = O_RDWR | O_CREAT; + +end_breaklock: + if( rc ){ + if( fd>=0 ){ + osUnlink(tPath); + robust_close(pFile, fd, __LINE__); + } + fprintf(stderr, "failed to break stale lock on %s, %s\n", cPath, errmsg); + } return rc; } -/* takes the conch by taking a shared lock and read the contents conch, if +/* Take the requested lock on the conch file and break a stale lock if the +** host id matches. +*/ +static int proxyConchLock(unixFile *pFile, uuid_t myHostID, int lockType){ + proxyLockingContext *pCtx = (proxyLockingContext *)pFile->lockingContext; + unixFile *conchFile = pCtx->conchFile; + int rc = SQLITE_OK; + int nTries = 0; + struct timespec conchModTime; + + memset(&conchModTime, 0, sizeof(conchModTime)); + do { + rc = conchFile->pMethod->xLock((sqlite3_file*)conchFile, lockType); + nTries ++; + if( rc==SQLITE_BUSY ){ + /* If the lock failed (busy): + * 1st try: get the mod time of the conch, wait 0.5s and try again. + * 2nd try: fail if the mod time changed or host id is different, wait + * 10 sec and try again + * 3rd try: break the lock unless the mod time has changed. + */ + struct stat buf; + if( osFstat(conchFile->h, &buf) ){ + pFile->lastErrno = errno; + return SQLITE_IOERR_LOCK; + } + + if( nTries==1 ){ + conchModTime = buf.st_mtimespec; + usleep(500000); /* wait 0.5 sec and try the lock again*/ + continue; + } + + assert( nTries>1 ); + if( conchModTime.tv_sec != buf.st_mtimespec.tv_sec || + conchModTime.tv_nsec != buf.st_mtimespec.tv_nsec ){ + return SQLITE_BUSY; + } + + if( nTries==2 ){ + char tBuf[PROXY_MAXCONCHLEN]; + int len = osPread(conchFile->h, tBuf, PROXY_MAXCONCHLEN, 0); + if( len<0 ){ + pFile->lastErrno = errno; + return SQLITE_IOERR_LOCK; + } + if( len>PROXY_PATHINDEX && tBuf[0]==(char)PROXY_CONCHVERSION){ + /* don't break the lock if the host id doesn't match */ + if( 0!=memcmp(&tBuf[PROXY_HEADERLEN], myHostID, PROXY_HOSTIDLEN) ){ + return SQLITE_BUSY; + } + }else{ + /* don't break the lock on short read or a version mismatch */ + return SQLITE_BUSY; + } + usleep(10000000); /* wait 10 sec and try the lock again */ + continue; + } + + assert( nTries==3 ); + if( 0==proxyBreakConchLock(pFile, myHostID) ){ + rc = SQLITE_OK; + if( lockType==EXCLUSIVE_LOCK ){ + rc = conchFile->pMethod->xLock((sqlite3_file*)conchFile, SHARED_LOCK); + } + if( !rc ){ + rc = conchFile->pMethod->xLock((sqlite3_file*)conchFile, lockType); + } + } + } + } while( rc==SQLITE_BUSY && nTries<3 ); + + return rc; +} + +/* Takes the conch by taking a shared lock and read the contents conch, if ** lockPath is non-NULL, the host ID and lock file path must match. A NULL ** lockPath means that the lockPath in the conch file will be used if the ** host IDs match, or a new lock path will be generated automatically @@ -25548,149 +31263,217 @@ static int proxyCreateUnixFile(const char *path, unixFile **ppFile) { static int proxyTakeConch(unixFile *pFile){ proxyLockingContext *pCtx = (proxyLockingContext *)pFile->lockingContext; - if( pCtx->conchHeld>0 ){ + if( pCtx->conchHeld!=0 ){ return SQLITE_OK; }else{ unixFile *conchFile = pCtx->conchFile; - char testValue[CONCHLEN]; - char conchValue[CONCHLEN]; + uuid_t myHostID; + int pError = 0; + char readBuf[PROXY_MAXCONCHLEN]; char lockPath[MAXPATHLEN]; - char *tLockPath = NULL; + char *tempLockPath = NULL; int rc = SQLITE_OK; - int readRc = SQLITE_OK; - int syncPerms = 0; - - OSTRACE4("TAKECONCH %d for %s pid=%d\n", conchFile->h, - (pCtx->lockProxyPath ? pCtx->lockProxyPath : ":auto:"), getpid()); + int createConch = 0; + int hostIdMatch = 0; + int readLen = 0; + int tryOldLockPath = 0; + int forceNewLockPath = 0; + + OSTRACE(("TAKECONCH %d for %s pid=%d\n", conchFile->h, + (pCtx->lockProxyPath ? pCtx->lockProxyPath : ":auto:"), getpid())); - rc = conchFile->pMethod->xLock((sqlite3_file*)conchFile, SHARED_LOCK); - if( rc==SQLITE_OK ){ - int pError = 0; - memset(testValue, 0, CONCHLEN); /* conch is fixed size */ - rc = proxyGetHostID(testValue, &pError); - if( (rc&0xff)==SQLITE_IOERR ){ - pFile->lastErrno = pError; - } - if( pCtx->lockProxyPath ){ - strlcpy(&testValue[HOSTIDLEN], pCtx->lockProxyPath, MAXPATHLEN); - } + rc = proxyGetHostID(myHostID, &pError); + if( (rc&0xff)==SQLITE_IOERR ){ + pFile->lastErrno = pError; + goto end_takeconch; } + rc = proxyConchLock(pFile, myHostID, SHARED_LOCK); if( rc!=SQLITE_OK ){ goto end_takeconch; } - - readRc = unixRead((sqlite3_file *)conchFile, conchValue, CONCHLEN, 0); - if( readRc!=SQLITE_IOERR_SHORT_READ ){ - if( readRc!=SQLITE_OK ){ - if( (rc&0xff)==SQLITE_IOERR ){ - pFile->lastErrno = conchFile->lastErrno; + /* read the existing conch file */ + readLen = seekAndRead((unixFile*)conchFile, 0, readBuf, PROXY_MAXCONCHLEN); + if( readLen<0 ){ + /* I/O error: lastErrno set by seekAndRead */ + pFile->lastErrno = conchFile->lastErrno; + rc = SQLITE_IOERR_READ; + goto end_takeconch; + }else if( readLen<=(PROXY_HEADERLEN+PROXY_HOSTIDLEN) || + readBuf[0]!=(char)PROXY_CONCHVERSION ){ + /* a short read or version format mismatch means we need to create a new + ** conch file. + */ + createConch = 1; + } + /* if the host id matches and the lock path already exists in the conch + ** we'll try to use the path there, if we can't open that path, we'll + ** retry with a new auto-generated path + */ + do { /* in case we need to try again for an :auto: named lock file */ + + if( !createConch && !forceNewLockPath ){ + hostIdMatch = !memcmp(&readBuf[PROXY_HEADERLEN], myHostID, + PROXY_HOSTIDLEN); + /* if the conch has data compare the contents */ + if( !pCtx->lockProxyPath ){ + /* for auto-named local lock file, just check the host ID and we'll + ** use the local lock file path that's already in there + */ + if( hostIdMatch ){ + size_t pathLen = (readLen - PROXY_PATHINDEX); + + if( pathLen>=MAXPATHLEN ){ + pathLen=MAXPATHLEN-1; + } + memcpy(lockPath, &readBuf[PROXY_PATHINDEX], pathLen); + lockPath[pathLen] = 0; + tempLockPath = lockPath; + tryOldLockPath = 1; + /* create a copy of the lock path if the conch is taken */ + goto end_takeconch; + } + }else if( hostIdMatch + && !strncmp(pCtx->lockProxyPath, &readBuf[PROXY_PATHINDEX], + readLen-PROXY_PATHINDEX) + ){ + /* conch host and lock path match */ + goto end_takeconch; } - rc = readRc; + } + + /* if the conch isn't writable and doesn't match, we can't take it */ + if( (conchFile->openFlags&O_RDWR) == 0 ){ + rc = SQLITE_BUSY; goto end_takeconch; } - /* if the conch has data compare the contents */ + + /* either the conch didn't match or we need to create a new one */ if( !pCtx->lockProxyPath ){ - /* for auto-named local lock file, just check the host ID and we'll - ** use the local lock file path that's already in there */ - if( !memcmp(testValue, conchValue, HOSTIDLEN) ){ - tLockPath = (char *)&conchValue[HOSTIDLEN]; - goto end_takeconch; + proxyGetLockPath(pCtx->dbPath, lockPath, MAXPATHLEN); + tempLockPath = lockPath; + /* create a copy of the lock path _only_ if the conch is taken */ + } + + /* update conch with host and path (this will fail if other process + ** has a shared lock already), if the host id matches, use the big + ** stick. + */ + futimes(conchFile->h, NULL); + if( hostIdMatch && !createConch ){ + if( conchFile->pInode && conchFile->pInode->nShared>1 ){ + /* We are trying for an exclusive lock but another thread in this + ** same process is still holding a shared lock. */ + rc = SQLITE_BUSY; + } else { + rc = proxyConchLock(pFile, myHostID, EXCLUSIVE_LOCK); } }else{ - /* we've got the conch if conchValue matches our path and host ID */ - if( !memcmp(testValue, conchValue, CONCHLEN) ){ - goto end_takeconch; - } + rc = conchFile->pMethod->xLock((sqlite3_file*)conchFile, EXCLUSIVE_LOCK); } - }else{ - /* a short read means we're "creating" the conch (even though it could - ** have been user-intervention), if we acquire the exclusive lock, - ** we'll try to match the current on-disk permissions of the database - */ - syncPerms = 1; - } - - /* either conch was emtpy or didn't match */ - if( !pCtx->lockProxyPath ){ - proxyGetLockPath(pCtx->dbPath, lockPath, MAXPATHLEN); - tLockPath = lockPath; - strlcpy(&testValue[HOSTIDLEN], lockPath, MAXPATHLEN); - } - - /* update conch with host and path (this will fail if other process - ** has a shared lock already) */ - rc = conchFile->pMethod->xLock((sqlite3_file*)conchFile, EXCLUSIVE_LOCK); - if( rc==SQLITE_OK ){ - rc = unixWrite((sqlite3_file *)conchFile, testValue, CONCHLEN, 0); - if( rc==SQLITE_OK && syncPerms ){ - struct stat buf; - int err = fstat(pFile->h, &buf); - if( err==0 ){ - /* try to match the database file permissions, ignore failure */ + if( rc==SQLITE_OK ){ + char writeBuffer[PROXY_MAXCONCHLEN]; + int writeSize = 0; + + writeBuffer[0] = (char)PROXY_CONCHVERSION; + memcpy(&writeBuffer[PROXY_HEADERLEN], myHostID, PROXY_HOSTIDLEN); + if( pCtx->lockProxyPath!=NULL ){ + strlcpy(&writeBuffer[PROXY_PATHINDEX], pCtx->lockProxyPath, MAXPATHLEN); + }else{ + strlcpy(&writeBuffer[PROXY_PATHINDEX], tempLockPath, MAXPATHLEN); + } + writeSize = PROXY_PATHINDEX + strlen(&writeBuffer[PROXY_PATHINDEX]); + robust_ftruncate(conchFile->h, writeSize); + rc = unixWrite((sqlite3_file *)conchFile, writeBuffer, writeSize, 0); + fsync(conchFile->h); + /* If we created a new conch file (not just updated the contents of a + ** valid conch file), try to match the permissions of the database + */ + if( rc==SQLITE_OK && createConch ){ + struct stat buf; + int err = osFstat(pFile->h, &buf); + if( err==0 ){ + mode_t cmode = buf.st_mode&(S_IRUSR|S_IWUSR | S_IRGRP|S_IWGRP | + S_IROTH|S_IWOTH); + /* try to match the database file R/W permissions, ignore failure */ #ifndef SQLITE_PROXY_DEBUG - fchmod(conchFile->h, buf.st_mode); + osFchmod(conchFile->h, cmode); #else - if( fchmod(conchFile->h, buf.st_mode)!=0 ){ + do{ + rc = osFchmod(conchFile->h, cmode); + }while( rc==(-1) && errno==EINTR ); + if( rc!=0 ){ + int code = errno; + fprintf(stderr, "fchmod %o FAILED with %d %s\n", + cmode, code, strerror(code)); + } else { + fprintf(stderr, "fchmod %o SUCCEDED\n",cmode); + } + }else{ int code = errno; - fprintf(stderr, "fchmod %o FAILED with %d %s\n", - buf.st_mode, code, strerror(code)); - } else { - fprintf(stderr, "fchmod %o SUCCEDED\n",buf.st_mode); + fprintf(stderr, "STAT FAILED[%d] with %d %s\n", + err, code, strerror(code)); +#endif } + } + } + conchFile->pMethod->xUnlock((sqlite3_file*)conchFile, SHARED_LOCK); + + end_takeconch: + OSTRACE(("TRANSPROXY: CLOSE %d\n", pFile->h)); + if( rc==SQLITE_OK && pFile->openFlags ){ + int fd; + if( pFile->h>=0 ){ + robust_close(pFile, pFile->h, __LINE__); + } + pFile->h = -1; + fd = robust_open(pCtx->dbPath, pFile->openFlags, 0); + OSTRACE(("TRANSPROXY: OPEN %d\n", fd)); + if( fd>=0 ){ + pFile->h = fd; }else{ - int code = errno; - fprintf(stderr, "STAT FAILED[%d] with %d %s\n", - err, code, strerror(code)); -#endif + rc=SQLITE_CANTOPEN_BKPT; /* SQLITE_BUSY? proxyTakeConch called + during locking */ } } - } - conchFile->pMethod->xUnlock((sqlite3_file*)conchFile, SHARED_LOCK); - -end_takeconch: - OSTRACE2("TRANSPROXY: CLOSE %d\n", pFile->h); - if( rc==SQLITE_OK && pFile->openFlags ){ - if( pFile->h>=0 ){ -#ifdef STRICT_CLOSE_ERROR - if( close(pFile->h) ){ - pFile->lastErrno = errno; - return SQLITE_IOERR_CLOSE; + if( rc==SQLITE_OK && !pCtx->lockProxy ){ + char *path = tempLockPath ? tempLockPath : pCtx->lockProxyPath; + rc = proxyCreateUnixFile(path, &pCtx->lockProxy, 1); + if( rc!=SQLITE_OK && rc!=SQLITE_NOMEM && tryOldLockPath ){ + /* we couldn't create the proxy lock file with the old lock file path + ** so try again via auto-naming + */ + forceNewLockPath = 1; + tryOldLockPath = 0; + continue; /* go back to the do {} while start point, try again */ } -#else - close(pFile->h); /* silently leak fd if fail */ -#endif } - pFile->h = -1; - int fd = open(pCtx->dbPath, pFile->openFlags, - SQLITE_DEFAULT_FILE_PERMISSIONS); - OSTRACE2("TRANSPROXY: OPEN %d\n", fd); - if( fd>=0 ){ - pFile->h = fd; - }else{ - rc=SQLITE_CANTOPEN; /* SQLITE_BUSY? proxyTakeConch called - during locking */ + if( rc==SQLITE_OK ){ + /* Need to make a copy of path if we extracted the value + ** from the conch file or the path was allocated on the stack + */ + if( tempLockPath ){ + pCtx->lockProxyPath = sqlite3DbStrDup(0, tempLockPath); + if( !pCtx->lockProxyPath ){ + rc = SQLITE_NOMEM; + } + } } - } - if( rc==SQLITE_OK && !pCtx->lockProxy ){ - char *path = tLockPath ? tLockPath : pCtx->lockProxyPath; - /* ACS: Need to make a copy of path sometimes */ - rc = proxyCreateUnixFile(path, &pCtx->lockProxy); - } - if( rc==SQLITE_OK ){ - pCtx->conchHeld = 1; - - if( tLockPath ){ - pCtx->lockProxyPath = sqlite3DbStrDup(0, tLockPath); + if( rc==SQLITE_OK ){ + pCtx->conchHeld = 1; + if( pCtx->lockProxy->pMethod == &afpIoMethods ){ - ((afpLockingContext *)pCtx->lockProxy->lockingContext)->dbPath = - pCtx->lockProxyPath; + afpLockingContext *afpCtx; + afpCtx = (afpLockingContext *)pCtx->lockProxy->lockingContext; + afpCtx->dbPath = pCtx->lockProxyPath; } + } else { + conchFile->pMethod->xUnlock((sqlite3_file*)conchFile, NO_LOCK); } - } else { - conchFile->pMethod->xUnlock((sqlite3_file*)conchFile, NO_LOCK); - } - OSTRACE3("TAKECONCH %d %s\n", conchFile->h, rc==SQLITE_OK?"ok":"failed"); - return rc; + OSTRACE(("TAKECONCH %d %s\n", conchFile->h, + rc==SQLITE_OK?"ok":"failed")); + return rc; + } while (1); /* in case we need to retry the :auto: lock file - + ** we should never get here except via the 'continue' call. */ } } @@ -25698,19 +31481,21 @@ static int proxyTakeConch(unixFile *pFile){ ** If pFile holds a lock on a conch file, then release that lock. */ static int proxyReleaseConch(unixFile *pFile){ - int rc; /* Subroutine return code */ + int rc = SQLITE_OK; /* Subroutine return code */ proxyLockingContext *pCtx; /* The locking context for the proxy lock */ unixFile *conchFile; /* Name of the conch file */ pCtx = (proxyLockingContext *)pFile->lockingContext; conchFile = pCtx->conchFile; - OSTRACE4("RELEASECONCH %d for %s pid=%d\n", conchFile->h, + OSTRACE(("RELEASECONCH %d for %s pid=%d\n", conchFile->h, (pCtx->lockProxyPath ? pCtx->lockProxyPath : ":auto:"), - getpid()); + getpid())); + if( pCtx->conchHeld>0 ){ + rc = conchFile->pMethod->xUnlock((sqlite3_file*)conchFile, NO_LOCK); + } pCtx->conchHeld = 0; - rc = conchFile->pMethod->xUnlock((sqlite3_file*)conchFile, NO_LOCK); - OSTRACE3("RELEASECONCH %d %s\n", conchFile->h, - (rc==SQLITE_OK ? "ok" : "failed")); + OSTRACE(("RELEASECONCH %d %s\n", conchFile->h, + (rc==SQLITE_OK ? "ok" : "failed"))); return rc; } @@ -25767,7 +31552,7 @@ static int switchLockProxyPath(unixFile *pFile, const char *path) { char *oldPath = pCtx->lockProxyPath; int rc = SQLITE_OK; - if( pFile->locktype!=NO_LOCK ){ + if( pFile->eFileLock!=NO_LOCK ){ return SQLITE_BUSY; } @@ -25804,8 +31589,8 @@ static int proxyGetDbPathForUnixFile(unixFile *pFile, char *dbPath){ /* afp style keeps a reference to the db path in the filePath field ** of the struct */ assert( (int)strlen((char*)pFile->lockingContext)<=MAXPATHLEN ); - strcpy(dbPath, ((afpLockingContext *)pFile->lockingContext)->dbPath); - }else + strlcpy(dbPath, ((afpLockingContext *)pFile->lockingContext)->dbPath, MAXPATHLEN); + } else #endif if( pFile->pMethod == &dotlockIoMethods ){ /* dot lock style uses the locking context to store the dot lock @@ -25815,7 +31600,7 @@ static int proxyGetDbPathForUnixFile(unixFile *pFile, char *dbPath){ }else{ /* all other styles use the locking context to store the db file path */ assert( strlen((char*)pFile->lockingContext)<=MAXPATHLEN ); - strcpy(dbPath, (char *)pFile->lockingContext); + strlcpy(dbPath, (char *)pFile->lockingContext, MAXPATHLEN); } return SQLITE_OK; } @@ -25834,7 +31619,7 @@ static int proxyTransformUnixFile(unixFile *pFile, const char *path) { char *lockPath=NULL; int rc = SQLITE_OK; - if( pFile->locktype!=NO_LOCK ){ + if( pFile->eFileLock!=NO_LOCK ){ return SQLITE_BUSY; } proxyGetDbPathForUnixFile(pFile, dbPath); @@ -25844,8 +31629,8 @@ static int proxyTransformUnixFile(unixFile *pFile, const char *path) { lockPath=(char *)path; } - OSTRACE4("TRANSPROXY %d for %s pid=%d\n", pFile->h, - (lockPath ? lockPath : ":auto:"), getpid()); + OSTRACE(("TRANSPROXY %d for %s pid=%d\n", pFile->h, + (lockPath ? lockPath : ":auto:"), getpid())); pCtx = sqlite3_malloc( sizeof(*pCtx) ); if( pCtx==0 ){ @@ -25855,32 +31640,58 @@ static int proxyTransformUnixFile(unixFile *pFile, const char *path) { rc = proxyCreateConchPathname(dbPath, &pCtx->conchFilePath); if( rc==SQLITE_OK ){ - rc = proxyCreateUnixFile(pCtx->conchFilePath, &pCtx->conchFile); + rc = proxyCreateUnixFile(pCtx->conchFilePath, &pCtx->conchFile, 0); + if( rc==SQLITE_CANTOPEN && ((pFile->openFlags&O_RDWR) == 0) ){ + /* if (a) the open flags are not O_RDWR, (b) the conch isn't there, and + ** (c) the file system is read-only, then enable no-locking access. + ** Ugh, since O_RDONLY==0x0000 we test for !O_RDWR since unixOpen asserts + ** that openFlags will have only one of O_RDONLY or O_RDWR. + */ + struct statfs fsInfo; + struct stat conchInfo; + int goLockless = 0; + + if( osStat(pCtx->conchFilePath, &conchInfo) == -1 ) { + int err = errno; + if( (err==ENOENT) && (statfs(dbPath, &fsInfo) != -1) ){ + goLockless = (fsInfo.f_flags&MNT_RDONLY) == MNT_RDONLY; + } + } + if( goLockless ){ + pCtx->conchHeld = -1; /* read only FS/ lockless */ + rc = SQLITE_OK; + } + } } if( rc==SQLITE_OK && lockPath ){ pCtx->lockProxyPath = sqlite3DbStrDup(0, lockPath); } + if( rc==SQLITE_OK ){ + pCtx->dbPath = sqlite3DbStrDup(0, dbPath); + if( pCtx->dbPath==NULL ){ + rc = SQLITE_NOMEM; + } + } if( rc==SQLITE_OK ){ /* all memory is allocated, proxys are created and assigned, ** switch the locking context and pMethod then return. */ - pCtx->dbPath = sqlite3DbStrDup(0, dbPath); pCtx->oldLockingContext = pFile->lockingContext; pFile->lockingContext = pCtx; pCtx->pOldMethod = pFile->pMethod; pFile->pMethod = &proxyIoMethods; }else{ if( pCtx->conchFile ){ - rc = pCtx->conchFile->pMethod->xClose((sqlite3_file *)pCtx->conchFile); - if( rc ) return rc; + pCtx->conchFile->pMethod->xClose((sqlite3_file *)pCtx->conchFile); sqlite3_free(pCtx->conchFile); } + sqlite3DbFree(0, pCtx->lockProxyPath); sqlite3_free(pCtx->conchFilePath); sqlite3_free(pCtx); } - OSTRACE3("TRANSPROXY %d %s\n", pFile->h, - (rc==SQLITE_OK ? "ok" : "failed")); + OSTRACE(("TRANSPROXY %d %s\n", pFile->h, + (rc==SQLITE_OK ? "ok" : "failed"))); return rc; } @@ -25964,14 +31775,18 @@ static int proxyCheckReservedLock(sqlite3_file *id, int *pResOut) { int rc = proxyTakeConch(pFile); if( rc==SQLITE_OK ){ proxyLockingContext *pCtx = (proxyLockingContext *)pFile->lockingContext; - unixFile *proxy = pCtx->lockProxy; - return proxy->pMethod->xCheckReservedLock((sqlite3_file*)proxy, pResOut); + if( pCtx->conchHeld>0 ){ + unixFile *proxy = pCtx->lockProxy; + return proxy->pMethod->xCheckReservedLock((sqlite3_file*)proxy, pResOut); + }else{ /* conchHeld < 0 is lockless */ + pResOut=0; + } } return rc; } /* -** Lock the file with the lock specified by parameter locktype - one +** Lock the file with the lock specified by parameter eFileLock - one ** of the following: ** ** (1) SHARED_LOCK @@ -25994,34 +31809,42 @@ static int proxyCheckReservedLock(sqlite3_file *id, int *pResOut) { ** This routine will only increase a lock. Use the sqlite3OsUnlock() ** routine to lower a locking level. */ -static int proxyLock(sqlite3_file *id, int locktype) { +static int proxyLock(sqlite3_file *id, int eFileLock) { unixFile *pFile = (unixFile*)id; int rc = proxyTakeConch(pFile); if( rc==SQLITE_OK ){ proxyLockingContext *pCtx = (proxyLockingContext *)pFile->lockingContext; - unixFile *proxy = pCtx->lockProxy; - rc = proxy->pMethod->xLock((sqlite3_file*)proxy, locktype); - pFile->locktype = proxy->locktype; + if( pCtx->conchHeld>0 ){ + unixFile *proxy = pCtx->lockProxy; + rc = proxy->pMethod->xLock((sqlite3_file*)proxy, eFileLock); + pFile->eFileLock = proxy->eFileLock; + }else{ + /* conchHeld < 0 is lockless */ + } } return rc; } /* -** Lower the locking level on file descriptor pFile to locktype. locktype +** Lower the locking level on file descriptor pFile to eFileLock. eFileLock ** must be either NO_LOCK or SHARED_LOCK. ** ** If the locking level of the file descriptor is already at or below ** the requested locking level, this routine is a no-op. */ -static int proxyUnlock(sqlite3_file *id, int locktype) { +static int proxyUnlock(sqlite3_file *id, int eFileLock) { unixFile *pFile = (unixFile*)id; int rc = proxyTakeConch(pFile); if( rc==SQLITE_OK ){ proxyLockingContext *pCtx = (proxyLockingContext *)pFile->lockingContext; - unixFile *proxy = pCtx->lockProxy; - rc = proxy->pMethod->xUnlock((sqlite3_file*)proxy, locktype); - pFile->locktype = proxy->locktype; + if( pCtx->conchHeld>0 ){ + unixFile *proxy = pCtx->lockProxy; + rc = proxy->pMethod->xUnlock((sqlite3_file*)proxy, eFileLock); + pFile->eFileLock = proxy->eFileLock; + }else{ + /* conchHeld < 0 is lockless */ + } } return rc; } @@ -26054,9 +31877,9 @@ static int proxyClose(sqlite3_file *id) { if( rc ) return rc; sqlite3_free(conchFile); } - sqlite3_free(pCtx->lockProxyPath); + sqlite3DbFree(0, pCtx->lockProxyPath); sqlite3_free(pCtx->conchFilePath); - sqlite3_free(pCtx->dbPath); + sqlite3DbFree(0, pCtx->dbPath); /* restore the original locking context and pMethod then close it */ pFile->lockingContext = pCtx->oldLockingContext; pFile->pMethod = pCtx->pOldMethod; @@ -26113,7 +31936,7 @@ SQLITE_API int sqlite3_os_init(void){ ** that filesystem time. */ #define UNIXVFS(VFSNAME, FINDER) { \ - 1, /* iVersion */ \ + 3, /* iVersion */ \ sizeof(unixFile), /* szOsFile */ \ MAX_PATHNAME, /* mxPathname */ \ 0, /* pNext */ \ @@ -26130,7 +31953,11 @@ SQLITE_API int sqlite3_os_init(void){ unixRandomness, /* xRandomness */ \ unixSleep, /* xSleep */ \ unixCurrentTime, /* xCurrentTime */ \ - unixGetLastError /* xGetLastError */ \ + unixGetLastError, /* xGetLastError */ \ + unixCurrentTimeInt64, /* xCurrentTimeInt64 */ \ + unixSetSystemCall, /* xSetSystemCall */ \ + unixGetSystemCall, /* xGetSystemCall */ \ + unixNextSystemCall, /* xNextSystemCall */ \ } /* @@ -26148,6 +31975,7 @@ SQLITE_API int sqlite3_os_init(void){ #endif UNIXVFS("unix-none", nolockIoFinder ), UNIXVFS("unix-dotfile", dotlockIoFinder ), + UNIXVFS("unix-excl", posixIoFinder ), #if OS_VXWORKS UNIXVFS("unix-namedsem", semIoFinder ), #endif @@ -26159,11 +31987,16 @@ SQLITE_API int sqlite3_os_init(void){ #endif #if SQLITE_ENABLE_LOCKING_STYLE && defined(__APPLE__) UNIXVFS("unix-afp", afpIoFinder ), + UNIXVFS("unix-nfs", nfsIoFinder ), UNIXVFS("unix-proxy", proxyIoFinder ), #endif }; unsigned int i; /* Loop counter */ + /* Double-check that the aSyscall[] array has been constructed + ** correctly. See ticket [bb3a86e890c8e96ab] */ + assert( ArraySize(aSyscall)==22 ); + /* Register all VFSes defined in the aVfs[] array */ for(i=0; i<(sizeof(aVfs)/sizeof(sqlite3_vfs)); i++){ sqlite3_vfs_register(&aVfs[i], i==0); @@ -26198,52 +32031,14 @@ SQLITE_API int sqlite3_os_end(void){ ** ****************************************************************************** ** -** This file contains code that is specific to windows. -** -** $Id: os_win.c,v 1.156 2009/04/23 19:08:33 shane Exp $ -*/ -#if SQLITE_OS_WIN /* This file is used for windows only */ - - -/* -** A Note About Memory Allocation: -** -** This driver uses malloc()/free() directly rather than going through -** the SQLite-wrappers sqlite3_malloc()/sqlite3_free(). Those wrappers -** are designed for use on embedded systems where memory is scarce and -** malloc failures happen frequently. Win32 does not typically run on -** embedded systems, and when it does the developers normally have bigger -** problems to worry about than running out of memory. So there is not -** a compelling need to use the wrappers. -** -** But there is a good reason to not use the wrappers. If we use the -** wrappers then we will get simulated malloc() failures within this -** driver. And that causes all kinds of problems for our tests. We -** could enhance SQLite to deal with simulated malloc failures within -** the OS driver, but the code to deal with those failure would not -** be exercised on Linux (which does not need to malloc() in the driver) -** and so we would have difficulty writing coverage tests for that -** code. Better to leave the code out, we think. -** -** The point of this discussion is as follows: When creating a new -** OS layer for an embedded system, if you use this file as an example, -** avoid the use of malloc()/free(). Those routines work ok on windows -** desktops but not so well in embedded systems. +** This file contains code that is specific to Windows. */ - -#include +#if SQLITE_OS_WIN /* This file is used for Windows only */ #ifdef __CYGWIN__ # include #endif -/* -** Macros used to determine whether or not to use threads. -*/ -#if defined(THREADSAFE) && THREADSAFE -# define SQLITE_W32_THREADS 1 -#endif - /* ** Include code that is common to all os_*.c files */ @@ -26267,8 +32062,6 @@ SQLITE_API int sqlite3_os_end(void){ ** ** This file should be #included by the os_*.c files only. It is not a ** general purpose header file. -** -** $Id: os_common.h,v 1.38 2009/02/24 18:40:50 danielk1977 Exp $ */ #ifndef _OS_COMMON_H_ #define _OS_COMMON_H_ @@ -26282,25 +32075,14 @@ SQLITE_API int sqlite3_os_end(void){ # error "The MEMORY_DEBUG macro is obsolete. Use SQLITE_DEBUG instead." #endif -#ifdef SQLITE_DEBUG -SQLITE_PRIVATE int sqlite3OSTrace = 0; -#define OSTRACE1(X) if( sqlite3OSTrace ) sqlite3DebugPrintf(X) -#define OSTRACE2(X,Y) if( sqlite3OSTrace ) sqlite3DebugPrintf(X,Y) -#define OSTRACE3(X,Y,Z) if( sqlite3OSTrace ) sqlite3DebugPrintf(X,Y,Z) -#define OSTRACE4(X,Y,Z,A) if( sqlite3OSTrace ) sqlite3DebugPrintf(X,Y,Z,A) -#define OSTRACE5(X,Y,Z,A,B) if( sqlite3OSTrace ) sqlite3DebugPrintf(X,Y,Z,A,B) -#define OSTRACE6(X,Y,Z,A,B,C) \ - if(sqlite3OSTrace) sqlite3DebugPrintf(X,Y,Z,A,B,C) -#define OSTRACE7(X,Y,Z,A,B,C,D) \ - if(sqlite3OSTrace) sqlite3DebugPrintf(X,Y,Z,A,B,C,D) +#if defined(SQLITE_TEST) && defined(SQLITE_DEBUG) +# ifndef SQLITE_DEBUG_OS_TRACE +# define SQLITE_DEBUG_OS_TRACE 0 +# endif + int sqlite3OSTrace = SQLITE_DEBUG_OS_TRACE; +# define OSTRACE(X) if( sqlite3OSTrace ) sqlite3DebugPrintf X #else -#define OSTRACE1(X) -#define OSTRACE2(X,Y) -#define OSTRACE3(X,Y,Z) -#define OSTRACE4(X,Y,Z,A) -#define OSTRACE5(X,Y,Z,A,B) -#define OSTRACE6(X,Y,Z,A,B,C) -#define OSTRACE7(X,Y,Z,A,B,C,D) +# define OSTRACE(X) #endif /* @@ -26329,8 +32111,6 @@ SQLITE_PRIVATE int sqlite3OSTrace = 0; ** ** This file contains inline asm code for retrieving "high-performance" ** counters for x86 class CPUs. -** -** $Id: hwtime.h,v 1.3 2008/08/01 14:33:15 shane Exp $ */ #ifndef _HWTIME_H_ #define _HWTIME_H_ @@ -26473,21 +32253,31 @@ SQLITE_API int sqlite3_open_file_count = 0; /************** Continuing where we left off in os_win.c *********************/ /* -** Some microsoft compilers lack this definition. +** Macro to find the minimum of two numeric values. */ -#ifndef INVALID_FILE_ATTRIBUTES -# define INVALID_FILE_ATTRIBUTES ((DWORD)-1) +#ifndef MIN +# define MIN(x,y) ((x)<(y)?(x):(y)) #endif /* -** Determine if we are dealing with WindowsCE - which has a much -** reduced API. +** Some Microsoft compilers lack this definition. */ -#if SQLITE_OS_WINCE -# define AreFileApisANSI() 1 -# define GetDiskFreeSpaceW() 0 +#ifndef INVALID_FILE_ATTRIBUTES +# define INVALID_FILE_ATTRIBUTES ((DWORD)-1) +#endif + +#ifndef FILE_FLAG_MASK +# define FILE_FLAG_MASK (0xFF3C0000) +#endif + +#ifndef FILE_ATTRIBUTE_MASK +# define FILE_ATTRIBUTE_MASK (0x0003FFF7) #endif +/* Forward references */ +typedef struct winShm winShm; /* A connection to shared-memory */ +typedef struct winShmNode winShmNode; /* A region of shared-memory */ + /* ** WinCE lacks native support for file locking so we have to fake it ** with some code of our own. @@ -26507,14 +32297,18 @@ typedef struct winceLock { */ typedef struct winFile winFile; struct winFile { - const sqlite3_io_methods *pMethod;/* Must be first */ + const sqlite3_io_methods *pMethod; /*** Must be first ***/ + sqlite3_vfs *pVfs; /* The VFS used to open this file */ HANDLE h; /* Handle for accessing the file */ - unsigned char locktype; /* Type of lock currently held on this file */ + u8 locktype; /* Type of lock currently held on this file */ short sharedLockByte; /* Randomly chosen byte used as a shared lock */ + u8 ctrlFlags; /* Flags. See WINFILE_* below */ DWORD lastErrno; /* The Windows errno from the last I/O error */ - DWORD sectorSize; /* Sector size of the device file is on */ + winShm *pShm; /* Instance of shared memory on this file */ + const char *zPath; /* Full pathname of this file */ + int szChunk; /* Chunk size configured by FCNTL_CHUNK_SIZE */ #if SQLITE_OS_WINCE - WCHAR *zDeleteOnClose; /* Name of file to delete when closing */ + LPWSTR zDeleteOnClose; /* Name of file to delete when closing */ HANDLE hMutex; /* Mutex used to control access to shared lock */ HANDLE hShared; /* Shared memory segment used for locking */ winceLock local; /* Locks obtained by this instance of winFile */ @@ -26523,20 +32317,115 @@ struct winFile { }; /* -** Forward prototypes. +** Allowed values for winFile.ctrlFlags */ -static int getSectorSize( - sqlite3_vfs *pVfs, - const char *zRelative /* UTF-8 file name */ -); +#define WINFILE_PERSIST_WAL 0x04 /* Persistent WAL mode */ +#define WINFILE_PSOW 0x10 /* SQLITE_IOCAP_POWERSAFE_OVERWRITE */ + +/* + * The size of the buffer used by sqlite3_win32_write_debug(). + */ +#ifndef SQLITE_WIN32_DBG_BUF_SIZE +# define SQLITE_WIN32_DBG_BUF_SIZE ((int)(4096-sizeof(DWORD))) +#endif + +/* + * If compiled with SQLITE_WIN32_MALLOC on Windows, we will use the + * various Win32 API heap functions instead of our own. + */ +#ifdef SQLITE_WIN32_MALLOC + +/* + * If this is non-zero, an isolated heap will be created by the native Win32 + * allocator subsystem; otherwise, the default process heap will be used. This + * setting has no effect when compiling for WinRT. By default, this is enabled + * and an isolated heap will be created to store all allocated data. + * + ****************************************************************************** + * WARNING: It is important to note that when this setting is non-zero and the + * winMemShutdown function is called (e.g. by the sqlite3_shutdown + * function), all data that was allocated using the isolated heap will + * be freed immediately and any attempt to access any of that freed + * data will almost certainly result in an immediate access violation. + ****************************************************************************** + */ +#ifndef SQLITE_WIN32_HEAP_CREATE +# define SQLITE_WIN32_HEAP_CREATE (TRUE) +#endif + +/* + * The initial size of the Win32-specific heap. This value may be zero. + */ +#ifndef SQLITE_WIN32_HEAP_INIT_SIZE +# define SQLITE_WIN32_HEAP_INIT_SIZE ((SQLITE_DEFAULT_CACHE_SIZE) * \ + (SQLITE_DEFAULT_PAGE_SIZE) + 4194304) +#endif + +/* + * The maximum size of the Win32-specific heap. This value may be zero. + */ +#ifndef SQLITE_WIN32_HEAP_MAX_SIZE +# define SQLITE_WIN32_HEAP_MAX_SIZE (0) +#endif + +/* + * The extra flags to use in calls to the Win32 heap APIs. This value may be + * zero for the default behavior. + */ +#ifndef SQLITE_WIN32_HEAP_FLAGS +# define SQLITE_WIN32_HEAP_FLAGS (0) +#endif + +/* +** The winMemData structure stores information required by the Win32-specific +** sqlite3_mem_methods implementation. +*/ +typedef struct winMemData winMemData; +struct winMemData { +#ifndef NDEBUG + u32 magic; /* Magic number to detect structure corruption. */ +#endif + HANDLE hHeap; /* The handle to our heap. */ + BOOL bOwned; /* Do we own the heap (i.e. destroy it on shutdown)? */ +}; + +#ifndef NDEBUG +#define WINMEM_MAGIC 0x42b2830b +#endif + +static struct winMemData win_mem_data = { +#ifndef NDEBUG + WINMEM_MAGIC, +#endif + NULL, FALSE +}; + +#ifndef NDEBUG +#define winMemAssertMagic() assert( win_mem_data.magic==WINMEM_MAGIC ) +#else +#define winMemAssertMagic() +#endif + +#define winMemGetHeap() win_mem_data.hHeap + +static void *winMemMalloc(int nBytes); +static void winMemFree(void *pPrior); +static void *winMemRealloc(void *pPrior, int nBytes); +static int winMemSize(void *p); +static int winMemRoundup(int n); +static int winMemInit(void *pAppData); +static void winMemShutdown(void *pAppData); + +SQLITE_PRIVATE const sqlite3_mem_methods *sqlite3MemGetWin32(void); +#endif /* SQLITE_WIN32_MALLOC */ /* ** The following variable is (normally) set once and never changes -** thereafter. It records whether the operating system is Win95 +** thereafter. It records whether the operating system is Win9x ** or WinNT. ** ** 0: Operating system unknown. -** 1: Operating system is Win95. +** 1: Operating system is Win9x. ** 2: Operating system is WinNT. ** ** In order to facilitate testing on a WinNT system, the test fixture @@ -26548,3939 +32437,4519 @@ SQLITE_API int sqlite3_os_type = 0; static int sqlite3_os_type = 0; #endif -/* -** Return true (non-zero) if we are running under WinNT, Win2K, WinXP, -** or WinCE. Return false (zero) for Win95, Win98, or WinME. -** -** Here is an interesting observation: Win95, Win98, and WinME lack -** the LockFileEx() API. But we can still statically link against that -** API as long as we don't call it when running Win95/98/ME. A call to -** this routine is used to determine if the host is Win95/98/ME or -** WinNT/2K/XP so that we will know whether or not we can safely call -** the LockFileEx() API. -*/ -#if SQLITE_OS_WINCE -# define isNT() (1) -#else - static int isNT(void){ - if( sqlite3_os_type==0 ){ - OSVERSIONINFO sInfo; - sInfo.dwOSVersionInfoSize = sizeof(sInfo); - GetVersionEx(&sInfo); - sqlite3_os_type = sInfo.dwPlatformId==VER_PLATFORM_WIN32_NT ? 2 : 1; - } - return sqlite3_os_type==2; - } -#endif /* SQLITE_OS_WINCE */ +#if !SQLITE_OS_WINCE && !SQLITE_OS_WINRT +# define SQLITE_WIN32_HAS_ANSI +#endif -/* -** Convert a UTF-8 string to microsoft unicode (UTF-16?). -** -** Space to hold the returned string is obtained from malloc. -*/ -static WCHAR *utf8ToUnicode(const char *zFilename){ - int nChar; - WCHAR *zWideFilename; +#if SQLITE_OS_WINCE || SQLITE_OS_WINNT || SQLITE_OS_WINRT +# define SQLITE_WIN32_HAS_WIDE +#endif - nChar = MultiByteToWideChar(CP_UTF8, 0, zFilename, -1, NULL, 0); - zWideFilename = malloc( nChar*sizeof(zWideFilename[0]) ); - if( zWideFilename==0 ){ - return 0; - } - nChar = MultiByteToWideChar(CP_UTF8, 0, zFilename, -1, zWideFilename, nChar); - if( nChar==0 ){ - free(zWideFilename); - zWideFilename = 0; - } - return zWideFilename; -} +#ifndef SYSCALL +# define SYSCALL sqlite3_syscall_ptr +#endif /* -** Convert microsoft unicode to UTF-8. Space to hold the returned string is -** obtained from malloc(). -*/ -static char *unicodeToUtf8(const WCHAR *zWideFilename){ - int nByte; - char *zFilename; +** This function is not available on Windows CE or WinRT. + */ - nByte = WideCharToMultiByte(CP_UTF8, 0, zWideFilename, -1, 0, 0, 0, 0); - zFilename = malloc( nByte ); - if( zFilename==0 ){ - return 0; - } - nByte = WideCharToMultiByte(CP_UTF8, 0, zWideFilename, -1, zFilename, nByte, - 0, 0); - if( nByte == 0 ){ - free(zFilename); - zFilename = 0; - } - return zFilename; -} +#if SQLITE_OS_WINCE || SQLITE_OS_WINRT +# define osAreFileApisANSI() 1 +#endif /* -** Convert an ansi string to microsoft unicode, based on the -** current codepage settings for file apis. -** -** Space to hold the returned string is obtained -** from malloc. +** Many system calls are accessed through pointer-to-functions so that +** they may be overridden at runtime to facilitate fault injection during +** testing and sandboxing. The following array holds the names and pointers +** to all overrideable system calls. */ -static WCHAR *mbcsToUnicode(const char *zFilename){ - int nByte; - WCHAR *zMbcsFilename; - int codepage = AreFileApisANSI() ? CP_ACP : CP_OEMCP; +static struct win_syscall { + const char *zName; /* Name of the sytem call */ + sqlite3_syscall_ptr pCurrent; /* Current value of the system call */ + sqlite3_syscall_ptr pDefault; /* Default value */ +} aSyscall[] = { +#if !SQLITE_OS_WINCE && !SQLITE_OS_WINRT + { "AreFileApisANSI", (SYSCALL)AreFileApisANSI, 0 }, +#else + { "AreFileApisANSI", (SYSCALL)0, 0 }, +#endif - nByte = MultiByteToWideChar(codepage, 0, zFilename, -1, NULL,0)*sizeof(WCHAR); - zMbcsFilename = malloc( nByte*sizeof(zMbcsFilename[0]) ); - if( zMbcsFilename==0 ){ - return 0; - } - nByte = MultiByteToWideChar(codepage, 0, zFilename, -1, zMbcsFilename, nByte); - if( nByte==0 ){ - free(zMbcsFilename); - zMbcsFilename = 0; - } - return zMbcsFilename; -} +#ifndef osAreFileApisANSI +#define osAreFileApisANSI ((BOOL(WINAPI*)(VOID))aSyscall[0].pCurrent) +#endif -/* -** Convert microsoft unicode to multibyte character string, based on the -** user's Ansi codepage. -** -** Space to hold the returned string is obtained from -** malloc(). -*/ -static char *unicodeToMbcs(const WCHAR *zWideFilename){ - int nByte; - char *zFilename; - int codepage = AreFileApisANSI() ? CP_ACP : CP_OEMCP; +#if SQLITE_OS_WINCE && defined(SQLITE_WIN32_HAS_WIDE) + { "CharLowerW", (SYSCALL)CharLowerW, 0 }, +#else + { "CharLowerW", (SYSCALL)0, 0 }, +#endif - nByte = WideCharToMultiByte(codepage, 0, zWideFilename, -1, 0, 0, 0, 0); - zFilename = malloc( nByte ); - if( zFilename==0 ){ - return 0; - } - nByte = WideCharToMultiByte(codepage, 0, zWideFilename, -1, zFilename, nByte, - 0, 0); - if( nByte == 0 ){ - free(zFilename); - zFilename = 0; - } - return zFilename; -} +#define osCharLowerW ((LPWSTR(WINAPI*)(LPWSTR))aSyscall[1].pCurrent) -/* -** Convert multibyte character string to UTF-8. Space to hold the -** returned string is obtained from malloc(). -*/ -SQLITE_API char *sqlite3_win32_mbcs_to_utf8(const char *zFilename){ - char *zFilenameUtf8; - WCHAR *zTmpWide; +#if SQLITE_OS_WINCE && defined(SQLITE_WIN32_HAS_WIDE) + { "CharUpperW", (SYSCALL)CharUpperW, 0 }, +#else + { "CharUpperW", (SYSCALL)0, 0 }, +#endif - zTmpWide = mbcsToUnicode(zFilename); - if( zTmpWide==0 ){ - return 0; - } - zFilenameUtf8 = unicodeToUtf8(zTmpWide); - free(zTmpWide); - return zFilenameUtf8; -} +#define osCharUpperW ((LPWSTR(WINAPI*)(LPWSTR))aSyscall[2].pCurrent) -/* -** Convert UTF-8 to multibyte character string. Space to hold the -** returned string is obtained from malloc(). -*/ -static char *utf8ToMbcs(const char *zFilename){ - char *zFilenameMbcs; - WCHAR *zTmpWide; + { "CloseHandle", (SYSCALL)CloseHandle, 0 }, - zTmpWide = utf8ToUnicode(zFilename); - if( zTmpWide==0 ){ - return 0; - } - zFilenameMbcs = unicodeToMbcs(zTmpWide); - free(zTmpWide); - return zFilenameMbcs; -} +#define osCloseHandle ((BOOL(WINAPI*)(HANDLE))aSyscall[3].pCurrent) -#if SQLITE_OS_WINCE -/************************************************************************* -** This section contains code for WinCE only. -*/ -/* -** WindowsCE does not have a localtime() function. So create a -** substitute. -*/ -struct tm *__cdecl localtime(const time_t *t) -{ - static struct tm y; - FILETIME uTm, lTm; - SYSTEMTIME pTm; - sqlite3_int64 t64; - t64 = *t; - t64 = (t64 + 11644473600)*10000000; - uTm.dwLowDateTime = t64 & 0xFFFFFFFF; - uTm.dwHighDateTime= t64 >> 32; - FileTimeToLocalFileTime(&uTm,&lTm); - FileTimeToSystemTime(&lTm,&pTm); - y.tm_year = pTm.wYear - 1900; - y.tm_mon = pTm.wMonth - 1; - y.tm_wday = pTm.wDayOfWeek; - y.tm_mday = pTm.wDay; - y.tm_hour = pTm.wHour; - y.tm_min = pTm.wMinute; - y.tm_sec = pTm.wSecond; - return &y; -} +#if defined(SQLITE_WIN32_HAS_ANSI) + { "CreateFileA", (SYSCALL)CreateFileA, 0 }, +#else + { "CreateFileA", (SYSCALL)0, 0 }, +#endif -/* This will never be called, but defined to make the code compile */ -#define GetTempPathA(a,b) +#define osCreateFileA ((HANDLE(WINAPI*)(LPCSTR,DWORD,DWORD, \ + LPSECURITY_ATTRIBUTES,DWORD,DWORD,HANDLE))aSyscall[4].pCurrent) -#define LockFile(a,b,c,d,e) winceLockFile(&a, b, c, d, e) -#define UnlockFile(a,b,c,d,e) winceUnlockFile(&a, b, c, d, e) -#define LockFileEx(a,b,c,d,e,f) winceLockFileEx(&a, b, c, d, e, f) +#if !SQLITE_OS_WINRT && defined(SQLITE_WIN32_HAS_WIDE) + { "CreateFileW", (SYSCALL)CreateFileW, 0 }, +#else + { "CreateFileW", (SYSCALL)0, 0 }, +#endif -#define HANDLE_TO_WINFILE(a) (winFile*)&((char*)a)[-offsetof(winFile,h)] +#define osCreateFileW ((HANDLE(WINAPI*)(LPCWSTR,DWORD,DWORD, \ + LPSECURITY_ATTRIBUTES,DWORD,DWORD,HANDLE))aSyscall[5].pCurrent) -/* -** Acquire a lock on the handle h -*/ -static void winceMutexAcquire(HANDLE h){ - DWORD dwErr; - do { - dwErr = WaitForSingleObject(h, INFINITE); - } while (dwErr != WAIT_OBJECT_0 && dwErr != WAIT_ABANDONED); -} -/* -** Release a lock acquired by winceMutexAcquire() -*/ -#define winceMutexRelease(h) ReleaseMutex(h) +#if !SQLITE_OS_WINRT && defined(SQLITE_WIN32_HAS_WIDE) + { "CreateFileMappingW", (SYSCALL)CreateFileMappingW, 0 }, +#else + { "CreateFileMappingW", (SYSCALL)0, 0 }, +#endif -/* -** Create the mutex and shared memory used for locking in the file -** descriptor pFile -*/ -static BOOL winceCreateLock(const char *zFilename, winFile *pFile){ - WCHAR *zTok; - WCHAR *zName = utf8ToUnicode(zFilename); - BOOL bInit = TRUE; +#define osCreateFileMappingW ((HANDLE(WINAPI*)(HANDLE,LPSECURITY_ATTRIBUTES, \ + DWORD,DWORD,DWORD,LPCWSTR))aSyscall[6].pCurrent) - /* Initialize the local lockdata */ - ZeroMemory(&pFile->local, sizeof(pFile->local)); +#if !SQLITE_OS_WINRT && defined(SQLITE_WIN32_HAS_WIDE) + { "CreateMutexW", (SYSCALL)CreateMutexW, 0 }, +#else + { "CreateMutexW", (SYSCALL)0, 0 }, +#endif - /* Replace the backslashes from the filename and lowercase it - ** to derive a mutex name. */ - zTok = CharLowerW(zName); - for (;*zTok;zTok++){ - if (*zTok == '\\') *zTok = '_'; - } +#define osCreateMutexW ((HANDLE(WINAPI*)(LPSECURITY_ATTRIBUTES,BOOL, \ + LPCWSTR))aSyscall[7].pCurrent) - /* Create/open the named mutex */ - pFile->hMutex = CreateMutexW(NULL, FALSE, zName); - if (!pFile->hMutex){ - pFile->lastErrno = GetLastError(); - free(zName); - return FALSE; - } +#if defined(SQLITE_WIN32_HAS_ANSI) + { "DeleteFileA", (SYSCALL)DeleteFileA, 0 }, +#else + { "DeleteFileA", (SYSCALL)0, 0 }, +#endif - /* Acquire the mutex before continuing */ - winceMutexAcquire(pFile->hMutex); - - /* Since the names of named mutexes, semaphores, file mappings etc are - ** case-sensitive, take advantage of that by uppercasing the mutex name - ** and using that as the shared filemapping name. - */ - CharUpperW(zName); - pFile->hShared = CreateFileMappingW(INVALID_HANDLE_VALUE, NULL, - PAGE_READWRITE, 0, sizeof(winceLock), - zName); +#define osDeleteFileA ((BOOL(WINAPI*)(LPCSTR))aSyscall[8].pCurrent) - /* Set a flag that indicates we're the first to create the memory so it - ** must be zero-initialized */ - if (GetLastError() == ERROR_ALREADY_EXISTS){ - bInit = FALSE; - } +#if defined(SQLITE_WIN32_HAS_WIDE) + { "DeleteFileW", (SYSCALL)DeleteFileW, 0 }, +#else + { "DeleteFileW", (SYSCALL)0, 0 }, +#endif - free(zName); +#define osDeleteFileW ((BOOL(WINAPI*)(LPCWSTR))aSyscall[9].pCurrent) - /* If we succeeded in making the shared memory handle, map it. */ - if (pFile->hShared){ - pFile->shared = (winceLock*)MapViewOfFile(pFile->hShared, - FILE_MAP_READ|FILE_MAP_WRITE, 0, 0, sizeof(winceLock)); - /* If mapping failed, close the shared memory handle and erase it */ - if (!pFile->shared){ - pFile->lastErrno = GetLastError(); - CloseHandle(pFile->hShared); - pFile->hShared = NULL; - } - } +#if SQLITE_OS_WINCE + { "FileTimeToLocalFileTime", (SYSCALL)FileTimeToLocalFileTime, 0 }, +#else + { "FileTimeToLocalFileTime", (SYSCALL)0, 0 }, +#endif - /* If shared memory could not be created, then close the mutex and fail */ - if (pFile->hShared == NULL){ - winceMutexRelease(pFile->hMutex); - CloseHandle(pFile->hMutex); - pFile->hMutex = NULL; - return FALSE; - } - - /* Initialize the shared memory if we're supposed to */ - if (bInit) { - ZeroMemory(pFile->shared, sizeof(winceLock)); - } +#define osFileTimeToLocalFileTime ((BOOL(WINAPI*)(CONST FILETIME*, \ + LPFILETIME))aSyscall[10].pCurrent) - winceMutexRelease(pFile->hMutex); - return TRUE; -} +#if SQLITE_OS_WINCE + { "FileTimeToSystemTime", (SYSCALL)FileTimeToSystemTime, 0 }, +#else + { "FileTimeToSystemTime", (SYSCALL)0, 0 }, +#endif -/* -** Destroy the part of winFile that deals with wince locks -*/ -static void winceDestroyLock(winFile *pFile){ - if (pFile->hMutex){ - /* Acquire the mutex */ - winceMutexAcquire(pFile->hMutex); +#define osFileTimeToSystemTime ((BOOL(WINAPI*)(CONST FILETIME*, \ + LPSYSTEMTIME))aSyscall[11].pCurrent) - /* The following blocks should probably assert in debug mode, but they - are to cleanup in case any locks remained open */ - if (pFile->local.nReaders){ - pFile->shared->nReaders --; - } - if (pFile->local.bReserved){ - pFile->shared->bReserved = FALSE; - } - if (pFile->local.bPending){ - pFile->shared->bPending = FALSE; - } - if (pFile->local.bExclusive){ - pFile->shared->bExclusive = FALSE; - } + { "FlushFileBuffers", (SYSCALL)FlushFileBuffers, 0 }, - /* De-reference and close our copy of the shared memory handle */ - UnmapViewOfFile(pFile->shared); - CloseHandle(pFile->hShared); +#define osFlushFileBuffers ((BOOL(WINAPI*)(HANDLE))aSyscall[12].pCurrent) - /* Done with the mutex */ - winceMutexRelease(pFile->hMutex); - CloseHandle(pFile->hMutex); - pFile->hMutex = NULL; - } -} +#if defined(SQLITE_WIN32_HAS_ANSI) + { "FormatMessageA", (SYSCALL)FormatMessageA, 0 }, +#else + { "FormatMessageA", (SYSCALL)0, 0 }, +#endif -/* -** An implementation of the LockFile() API of windows for wince -*/ -static BOOL winceLockFile( - HANDLE *phFile, - DWORD dwFileOffsetLow, - DWORD dwFileOffsetHigh, - DWORD nNumberOfBytesToLockLow, - DWORD nNumberOfBytesToLockHigh -){ - winFile *pFile = HANDLE_TO_WINFILE(phFile); - BOOL bReturn = FALSE; +#define osFormatMessageA ((DWORD(WINAPI*)(DWORD,LPCVOID,DWORD,DWORD,LPSTR, \ + DWORD,va_list*))aSyscall[13].pCurrent) - if (!pFile->hMutex) return TRUE; - winceMutexAcquire(pFile->hMutex); +#if defined(SQLITE_WIN32_HAS_WIDE) + { "FormatMessageW", (SYSCALL)FormatMessageW, 0 }, +#else + { "FormatMessageW", (SYSCALL)0, 0 }, +#endif - /* Wanting an exclusive lock? */ - if (dwFileOffsetLow == SHARED_FIRST - && nNumberOfBytesToLockLow == SHARED_SIZE){ - if (pFile->shared->nReaders == 0 && pFile->shared->bExclusive == 0){ - pFile->shared->bExclusive = TRUE; - pFile->local.bExclusive = TRUE; - bReturn = TRUE; - } - } +#define osFormatMessageW ((DWORD(WINAPI*)(DWORD,LPCVOID,DWORD,DWORD,LPWSTR, \ + DWORD,va_list*))aSyscall[14].pCurrent) - /* Want a read-only lock? */ - else if ((dwFileOffsetLow >= SHARED_FIRST && - dwFileOffsetLow < SHARED_FIRST + SHARED_SIZE) && - nNumberOfBytesToLockLow == 1){ - if (pFile->shared->bExclusive == 0){ - pFile->local.nReaders ++; - if (pFile->local.nReaders == 1){ - pFile->shared->nReaders ++; - } - bReturn = TRUE; - } - } + { "FreeLibrary", (SYSCALL)FreeLibrary, 0 }, - /* Want a pending lock? */ - else if (dwFileOffsetLow == PENDING_BYTE && nNumberOfBytesToLockLow == 1){ - /* If no pending lock has been acquired, then acquire it */ - if (pFile->shared->bPending == 0) { - pFile->shared->bPending = TRUE; - pFile->local.bPending = TRUE; - bReturn = TRUE; - } - } - /* Want a reserved lock? */ - else if (dwFileOffsetLow == RESERVED_BYTE && nNumberOfBytesToLockLow == 1){ - if (pFile->shared->bReserved == 0) { - pFile->shared->bReserved = TRUE; - pFile->local.bReserved = TRUE; - bReturn = TRUE; - } - } +#define osFreeLibrary ((BOOL(WINAPI*)(HMODULE))aSyscall[15].pCurrent) - winceMutexRelease(pFile->hMutex); - return bReturn; -} + { "GetCurrentProcessId", (SYSCALL)GetCurrentProcessId, 0 }, -/* -** An implementation of the UnlockFile API of windows for wince -*/ -static BOOL winceUnlockFile( - HANDLE *phFile, - DWORD dwFileOffsetLow, - DWORD dwFileOffsetHigh, - DWORD nNumberOfBytesToUnlockLow, - DWORD nNumberOfBytesToUnlockHigh -){ - winFile *pFile = HANDLE_TO_WINFILE(phFile); - BOOL bReturn = FALSE; +#define osGetCurrentProcessId ((DWORD(WINAPI*)(VOID))aSyscall[16].pCurrent) - if (!pFile->hMutex) return TRUE; - winceMutexAcquire(pFile->hMutex); +#if !SQLITE_OS_WINCE && defined(SQLITE_WIN32_HAS_ANSI) + { "GetDiskFreeSpaceA", (SYSCALL)GetDiskFreeSpaceA, 0 }, +#else + { "GetDiskFreeSpaceA", (SYSCALL)0, 0 }, +#endif - /* Releasing a reader lock or an exclusive lock */ - if (dwFileOffsetLow >= SHARED_FIRST && - dwFileOffsetLow < SHARED_FIRST + SHARED_SIZE){ - /* Did we have an exclusive lock? */ - if (pFile->local.bExclusive){ - pFile->local.bExclusive = FALSE; - pFile->shared->bExclusive = FALSE; - bReturn = TRUE; - } +#define osGetDiskFreeSpaceA ((BOOL(WINAPI*)(LPCSTR,LPDWORD,LPDWORD,LPDWORD, \ + LPDWORD))aSyscall[17].pCurrent) - /* Did we just have a reader lock? */ - else if (pFile->local.nReaders){ - pFile->local.nReaders --; - if (pFile->local.nReaders == 0) - { - pFile->shared->nReaders --; - } - bReturn = TRUE; - } - } +#if !SQLITE_OS_WINCE && !SQLITE_OS_WINRT && defined(SQLITE_WIN32_HAS_WIDE) + { "GetDiskFreeSpaceW", (SYSCALL)GetDiskFreeSpaceW, 0 }, +#else + { "GetDiskFreeSpaceW", (SYSCALL)0, 0 }, +#endif - /* Releasing a pending lock */ - else if (dwFileOffsetLow == PENDING_BYTE && nNumberOfBytesToUnlockLow == 1){ - if (pFile->local.bPending){ - pFile->local.bPending = FALSE; - pFile->shared->bPending = FALSE; - bReturn = TRUE; - } - } - /* Releasing a reserved lock */ - else if (dwFileOffsetLow == RESERVED_BYTE && nNumberOfBytesToUnlockLow == 1){ - if (pFile->local.bReserved) { - pFile->local.bReserved = FALSE; - pFile->shared->bReserved = FALSE; - bReturn = TRUE; - } - } +#define osGetDiskFreeSpaceW ((BOOL(WINAPI*)(LPCWSTR,LPDWORD,LPDWORD,LPDWORD, \ + LPDWORD))aSyscall[18].pCurrent) - winceMutexRelease(pFile->hMutex); - return bReturn; -} +#if defined(SQLITE_WIN32_HAS_ANSI) + { "GetFileAttributesA", (SYSCALL)GetFileAttributesA, 0 }, +#else + { "GetFileAttributesA", (SYSCALL)0, 0 }, +#endif -/* -** An implementation of the LockFileEx() API of windows for wince -*/ -static BOOL winceLockFileEx( - HANDLE *phFile, - DWORD dwFlags, - DWORD dwReserved, - DWORD nNumberOfBytesToLockLow, - DWORD nNumberOfBytesToLockHigh, - LPOVERLAPPED lpOverlapped -){ - /* If the caller wants a shared read lock, forward this call - ** to winceLockFile */ - if (lpOverlapped->Offset == SHARED_FIRST && - dwFlags == 1 && - nNumberOfBytesToLockLow == SHARED_SIZE){ - return winceLockFile(phFile, SHARED_FIRST, 0, 1, 0); - } - return FALSE; -} -/* -** End of the special code for wince -*****************************************************************************/ -#endif /* SQLITE_OS_WINCE */ +#define osGetFileAttributesA ((DWORD(WINAPI*)(LPCSTR))aSyscall[19].pCurrent) -/***************************************************************************** -** The next group of routines implement the I/O methods specified -** by the sqlite3_io_methods object. -******************************************************************************/ +#if !SQLITE_OS_WINRT && defined(SQLITE_WIN32_HAS_WIDE) + { "GetFileAttributesW", (SYSCALL)GetFileAttributesW, 0 }, +#else + { "GetFileAttributesW", (SYSCALL)0, 0 }, +#endif -/* -** Close a file. -** -** It is reported that an attempt to close a handle might sometimes -** fail. This is a very unreasonable result, but windows is notorious -** for being unreasonable so I do not doubt that it might happen. If -** the close fails, we pause for 100 milliseconds and try again. As -** many as MX_CLOSE_ATTEMPT attempts to close the handle are made before -** giving up and returning an error. -*/ -#define MX_CLOSE_ATTEMPT 3 -static int winClose(sqlite3_file *id){ - int rc, cnt = 0; - winFile *pFile = (winFile*)id; +#define osGetFileAttributesW ((DWORD(WINAPI*)(LPCWSTR))aSyscall[20].pCurrent) - assert( id!=0 ); - OSTRACE2("CLOSE %d\n", pFile->h); - do{ - rc = CloseHandle(pFile->h); - }while( rc==0 && ++cnt < MX_CLOSE_ATTEMPT && (Sleep(100), 1) ); -#if SQLITE_OS_WINCE -#define WINCE_DELETION_ATTEMPTS 3 - winceDestroyLock(pFile); - if( pFile->zDeleteOnClose ){ - int cnt = 0; - while( - DeleteFileW(pFile->zDeleteOnClose)==0 - && GetFileAttributesW(pFile->zDeleteOnClose)!=0xffffffff - && cnt++ < WINCE_DELETION_ATTEMPTS - ){ - Sleep(100); /* Wait a little before trying again */ - } - free(pFile->zDeleteOnClose); - } +#if defined(SQLITE_WIN32_HAS_WIDE) + { "GetFileAttributesExW", (SYSCALL)GetFileAttributesExW, 0 }, +#else + { "GetFileAttributesExW", (SYSCALL)0, 0 }, #endif - OpenCounter(-1); - return rc ? SQLITE_OK : SQLITE_IOERR; -} -/* -** Some microsoft compilers lack this definition. -*/ -#ifndef INVALID_SET_FILE_POINTER -# define INVALID_SET_FILE_POINTER ((DWORD)-1) +#define osGetFileAttributesExW ((BOOL(WINAPI*)(LPCWSTR,GET_FILEEX_INFO_LEVELS, \ + LPVOID))aSyscall[21].pCurrent) + +#if !SQLITE_OS_WINRT + { "GetFileSize", (SYSCALL)GetFileSize, 0 }, +#else + { "GetFileSize", (SYSCALL)0, 0 }, #endif -/* -** Read data from a file into a buffer. Return SQLITE_OK if all -** bytes were read successfully and SQLITE_IOERR if anything goes -** wrong. +#define osGetFileSize ((DWORD(WINAPI*)(HANDLE,LPDWORD))aSyscall[22].pCurrent) + +#if !SQLITE_OS_WINCE && defined(SQLITE_WIN32_HAS_ANSI) + { "GetFullPathNameA", (SYSCALL)GetFullPathNameA, 0 }, +#else + { "GetFullPathNameA", (SYSCALL)0, 0 }, +#endif + +#define osGetFullPathNameA ((DWORD(WINAPI*)(LPCSTR,DWORD,LPSTR, \ + LPSTR*))aSyscall[23].pCurrent) + +#if !SQLITE_OS_WINCE && !SQLITE_OS_WINRT && defined(SQLITE_WIN32_HAS_WIDE) + { "GetFullPathNameW", (SYSCALL)GetFullPathNameW, 0 }, +#else + { "GetFullPathNameW", (SYSCALL)0, 0 }, +#endif + +#define osGetFullPathNameW ((DWORD(WINAPI*)(LPCWSTR,DWORD,LPWSTR, \ + LPWSTR*))aSyscall[24].pCurrent) + + { "GetLastError", (SYSCALL)GetLastError, 0 }, + +#define osGetLastError ((DWORD(WINAPI*)(VOID))aSyscall[25].pCurrent) + +#if SQLITE_OS_WINCE + /* The GetProcAddressA() routine is only available on Windows CE. */ + { "GetProcAddressA", (SYSCALL)GetProcAddressA, 0 }, +#else + /* All other Windows platforms expect GetProcAddress() to take + ** an ANSI string regardless of the _UNICODE setting */ + { "GetProcAddressA", (SYSCALL)GetProcAddress, 0 }, +#endif + +#define osGetProcAddressA ((FARPROC(WINAPI*)(HMODULE, \ + LPCSTR))aSyscall[26].pCurrent) + +#if !SQLITE_OS_WINRT + { "GetSystemInfo", (SYSCALL)GetSystemInfo, 0 }, +#else + { "GetSystemInfo", (SYSCALL)0, 0 }, +#endif + +#define osGetSystemInfo ((VOID(WINAPI*)(LPSYSTEM_INFO))aSyscall[27].pCurrent) + + { "GetSystemTime", (SYSCALL)GetSystemTime, 0 }, + +#define osGetSystemTime ((VOID(WINAPI*)(LPSYSTEMTIME))aSyscall[28].pCurrent) + +#if !SQLITE_OS_WINCE + { "GetSystemTimeAsFileTime", (SYSCALL)GetSystemTimeAsFileTime, 0 }, +#else + { "GetSystemTimeAsFileTime", (SYSCALL)0, 0 }, +#endif + +#define osGetSystemTimeAsFileTime ((VOID(WINAPI*)( \ + LPFILETIME))aSyscall[29].pCurrent) + +#if defined(SQLITE_WIN32_HAS_ANSI) + { "GetTempPathA", (SYSCALL)GetTempPathA, 0 }, +#else + { "GetTempPathA", (SYSCALL)0, 0 }, +#endif + +#define osGetTempPathA ((DWORD(WINAPI*)(DWORD,LPSTR))aSyscall[30].pCurrent) + +#if !SQLITE_OS_WINRT && defined(SQLITE_WIN32_HAS_WIDE) + { "GetTempPathW", (SYSCALL)GetTempPathW, 0 }, +#else + { "GetTempPathW", (SYSCALL)0, 0 }, +#endif + +#define osGetTempPathW ((DWORD(WINAPI*)(DWORD,LPWSTR))aSyscall[31].pCurrent) + +#if !SQLITE_OS_WINRT + { "GetTickCount", (SYSCALL)GetTickCount, 0 }, +#else + { "GetTickCount", (SYSCALL)0, 0 }, +#endif + +#define osGetTickCount ((DWORD(WINAPI*)(VOID))aSyscall[32].pCurrent) + +#if defined(SQLITE_WIN32_HAS_ANSI) + { "GetVersionExA", (SYSCALL)GetVersionExA, 0 }, +#else + { "GetVersionExA", (SYSCALL)0, 0 }, +#endif + +#define osGetVersionExA ((BOOL(WINAPI*)( \ + LPOSVERSIONINFOA))aSyscall[33].pCurrent) + + { "HeapAlloc", (SYSCALL)HeapAlloc, 0 }, + +#define osHeapAlloc ((LPVOID(WINAPI*)(HANDLE,DWORD, \ + SIZE_T))aSyscall[34].pCurrent) + +#if !SQLITE_OS_WINRT + { "HeapCreate", (SYSCALL)HeapCreate, 0 }, +#else + { "HeapCreate", (SYSCALL)0, 0 }, +#endif + +#define osHeapCreate ((HANDLE(WINAPI*)(DWORD,SIZE_T, \ + SIZE_T))aSyscall[35].pCurrent) + +#if !SQLITE_OS_WINRT + { "HeapDestroy", (SYSCALL)HeapDestroy, 0 }, +#else + { "HeapDestroy", (SYSCALL)0, 0 }, +#endif + +#define osHeapDestroy ((BOOL(WINAPI*)(HANDLE))aSyscall[36].pCurrent) + + { "HeapFree", (SYSCALL)HeapFree, 0 }, + +#define osHeapFree ((BOOL(WINAPI*)(HANDLE,DWORD,LPVOID))aSyscall[37].pCurrent) + + { "HeapReAlloc", (SYSCALL)HeapReAlloc, 0 }, + +#define osHeapReAlloc ((LPVOID(WINAPI*)(HANDLE,DWORD,LPVOID, \ + SIZE_T))aSyscall[38].pCurrent) + + { "HeapSize", (SYSCALL)HeapSize, 0 }, + +#define osHeapSize ((SIZE_T(WINAPI*)(HANDLE,DWORD, \ + LPCVOID))aSyscall[39].pCurrent) + +#if !SQLITE_OS_WINRT + { "HeapValidate", (SYSCALL)HeapValidate, 0 }, +#else + { "HeapValidate", (SYSCALL)0, 0 }, +#endif + +#define osHeapValidate ((BOOL(WINAPI*)(HANDLE,DWORD, \ + LPCVOID))aSyscall[40].pCurrent) + +#if defined(SQLITE_WIN32_HAS_ANSI) + { "LoadLibraryA", (SYSCALL)LoadLibraryA, 0 }, +#else + { "LoadLibraryA", (SYSCALL)0, 0 }, +#endif + +#define osLoadLibraryA ((HMODULE(WINAPI*)(LPCSTR))aSyscall[41].pCurrent) + +#if !SQLITE_OS_WINRT && defined(SQLITE_WIN32_HAS_WIDE) + { "LoadLibraryW", (SYSCALL)LoadLibraryW, 0 }, +#else + { "LoadLibraryW", (SYSCALL)0, 0 }, +#endif + +#define osLoadLibraryW ((HMODULE(WINAPI*)(LPCWSTR))aSyscall[42].pCurrent) + +#if !SQLITE_OS_WINRT + { "LocalFree", (SYSCALL)LocalFree, 0 }, +#else + { "LocalFree", (SYSCALL)0, 0 }, +#endif + +#define osLocalFree ((HLOCAL(WINAPI*)(HLOCAL))aSyscall[43].pCurrent) + +#if !SQLITE_OS_WINCE && !SQLITE_OS_WINRT + { "LockFile", (SYSCALL)LockFile, 0 }, +#else + { "LockFile", (SYSCALL)0, 0 }, +#endif + +#ifndef osLockFile +#define osLockFile ((BOOL(WINAPI*)(HANDLE,DWORD,DWORD,DWORD, \ + DWORD))aSyscall[44].pCurrent) +#endif + +#if !SQLITE_OS_WINCE + { "LockFileEx", (SYSCALL)LockFileEx, 0 }, +#else + { "LockFileEx", (SYSCALL)0, 0 }, +#endif + +#ifndef osLockFileEx +#define osLockFileEx ((BOOL(WINAPI*)(HANDLE,DWORD,DWORD,DWORD,DWORD, \ + LPOVERLAPPED))aSyscall[45].pCurrent) +#endif + +#if !SQLITE_OS_WINRT + { "MapViewOfFile", (SYSCALL)MapViewOfFile, 0 }, +#else + { "MapViewOfFile", (SYSCALL)0, 0 }, +#endif + +#define osMapViewOfFile ((LPVOID(WINAPI*)(HANDLE,DWORD,DWORD,DWORD, \ + SIZE_T))aSyscall[46].pCurrent) + + { "MultiByteToWideChar", (SYSCALL)MultiByteToWideChar, 0 }, + +#define osMultiByteToWideChar ((int(WINAPI*)(UINT,DWORD,LPCSTR,int,LPWSTR, \ + int))aSyscall[47].pCurrent) + + { "QueryPerformanceCounter", (SYSCALL)QueryPerformanceCounter, 0 }, + +#define osQueryPerformanceCounter ((BOOL(WINAPI*)( \ + LARGE_INTEGER*))aSyscall[48].pCurrent) + + { "ReadFile", (SYSCALL)ReadFile, 0 }, + +#define osReadFile ((BOOL(WINAPI*)(HANDLE,LPVOID,DWORD,LPDWORD, \ + LPOVERLAPPED))aSyscall[49].pCurrent) + + { "SetEndOfFile", (SYSCALL)SetEndOfFile, 0 }, + +#define osSetEndOfFile ((BOOL(WINAPI*)(HANDLE))aSyscall[50].pCurrent) + +#if !SQLITE_OS_WINRT + { "SetFilePointer", (SYSCALL)SetFilePointer, 0 }, +#else + { "SetFilePointer", (SYSCALL)0, 0 }, +#endif + +#define osSetFilePointer ((DWORD(WINAPI*)(HANDLE,LONG,PLONG, \ + DWORD))aSyscall[51].pCurrent) + +#if !SQLITE_OS_WINRT + { "Sleep", (SYSCALL)Sleep, 0 }, +#else + { "Sleep", (SYSCALL)0, 0 }, +#endif + +#define osSleep ((VOID(WINAPI*)(DWORD))aSyscall[52].pCurrent) + + { "SystemTimeToFileTime", (SYSCALL)SystemTimeToFileTime, 0 }, + +#define osSystemTimeToFileTime ((BOOL(WINAPI*)(CONST SYSTEMTIME*, \ + LPFILETIME))aSyscall[53].pCurrent) + +#if !SQLITE_OS_WINCE && !SQLITE_OS_WINRT + { "UnlockFile", (SYSCALL)UnlockFile, 0 }, +#else + { "UnlockFile", (SYSCALL)0, 0 }, +#endif + +#ifndef osUnlockFile +#define osUnlockFile ((BOOL(WINAPI*)(HANDLE,DWORD,DWORD,DWORD, \ + DWORD))aSyscall[54].pCurrent) +#endif + +#if !SQLITE_OS_WINCE + { "UnlockFileEx", (SYSCALL)UnlockFileEx, 0 }, +#else + { "UnlockFileEx", (SYSCALL)0, 0 }, +#endif + +#define osUnlockFileEx ((BOOL(WINAPI*)(HANDLE,DWORD,DWORD,DWORD, \ + LPOVERLAPPED))aSyscall[55].pCurrent) + + { "UnmapViewOfFile", (SYSCALL)UnmapViewOfFile, 0 }, + +#define osUnmapViewOfFile ((BOOL(WINAPI*)(LPCVOID))aSyscall[56].pCurrent) + + { "WideCharToMultiByte", (SYSCALL)WideCharToMultiByte, 0 }, + +#define osWideCharToMultiByte ((int(WINAPI*)(UINT,DWORD,LPCWSTR,int,LPSTR,int, \ + LPCSTR,LPBOOL))aSyscall[57].pCurrent) + + { "WriteFile", (SYSCALL)WriteFile, 0 }, + +#define osWriteFile ((BOOL(WINAPI*)(HANDLE,LPCVOID,DWORD,LPDWORD, \ + LPOVERLAPPED))aSyscall[58].pCurrent) + +#if SQLITE_OS_WINRT + { "CreateEventExW", (SYSCALL)CreateEventExW, 0 }, +#else + { "CreateEventExW", (SYSCALL)0, 0 }, +#endif + +#define osCreateEventExW ((HANDLE(WINAPI*)(LPSECURITY_ATTRIBUTES,LPCWSTR, \ + DWORD,DWORD))aSyscall[59].pCurrent) + +#if !SQLITE_OS_WINRT + { "WaitForSingleObject", (SYSCALL)WaitForSingleObject, 0 }, +#else + { "WaitForSingleObject", (SYSCALL)0, 0 }, +#endif + +#define osWaitForSingleObject ((DWORD(WINAPI*)(HANDLE, \ + DWORD))aSyscall[60].pCurrent) + +#if !SQLITE_OS_WINCE + { "WaitForSingleObjectEx", (SYSCALL)WaitForSingleObjectEx, 0 }, +#else + { "WaitForSingleObjectEx", (SYSCALL)0, 0 }, +#endif + +#define osWaitForSingleObjectEx ((DWORD(WINAPI*)(HANDLE,DWORD, \ + BOOL))aSyscall[61].pCurrent) + +#if !SQLITE_OS_WINCE + { "SetFilePointerEx", (SYSCALL)SetFilePointerEx, 0 }, +#else + { "SetFilePointerEx", (SYSCALL)0, 0 }, +#endif + +#define osSetFilePointerEx ((BOOL(WINAPI*)(HANDLE,LARGE_INTEGER, \ + PLARGE_INTEGER,DWORD))aSyscall[62].pCurrent) + +#if SQLITE_OS_WINRT + { "GetFileInformationByHandleEx", (SYSCALL)GetFileInformationByHandleEx, 0 }, +#else + { "GetFileInformationByHandleEx", (SYSCALL)0, 0 }, +#endif + +#define osGetFileInformationByHandleEx ((BOOL(WINAPI*)(HANDLE, \ + FILE_INFO_BY_HANDLE_CLASS,LPVOID,DWORD))aSyscall[63].pCurrent) + +#if SQLITE_OS_WINRT + { "MapViewOfFileFromApp", (SYSCALL)MapViewOfFileFromApp, 0 }, +#else + { "MapViewOfFileFromApp", (SYSCALL)0, 0 }, +#endif + +#define osMapViewOfFileFromApp ((LPVOID(WINAPI*)(HANDLE,ULONG,ULONG64, \ + SIZE_T))aSyscall[64].pCurrent) + +#if SQLITE_OS_WINRT + { "CreateFile2", (SYSCALL)CreateFile2, 0 }, +#else + { "CreateFile2", (SYSCALL)0, 0 }, +#endif + +#define osCreateFile2 ((HANDLE(WINAPI*)(LPCWSTR,DWORD,DWORD,DWORD, \ + LPCREATEFILE2_EXTENDED_PARAMETERS))aSyscall[65].pCurrent) + +#if SQLITE_OS_WINRT + { "LoadPackagedLibrary", (SYSCALL)LoadPackagedLibrary, 0 }, +#else + { "LoadPackagedLibrary", (SYSCALL)0, 0 }, +#endif + +#define osLoadPackagedLibrary ((HMODULE(WINAPI*)(LPCWSTR, \ + DWORD))aSyscall[66].pCurrent) + +#if SQLITE_OS_WINRT + { "GetTickCount64", (SYSCALL)GetTickCount64, 0 }, +#else + { "GetTickCount64", (SYSCALL)0, 0 }, +#endif + +#define osGetTickCount64 ((ULONGLONG(WINAPI*)(VOID))aSyscall[67].pCurrent) + +#if SQLITE_OS_WINRT + { "GetNativeSystemInfo", (SYSCALL)GetNativeSystemInfo, 0 }, +#else + { "GetNativeSystemInfo", (SYSCALL)0, 0 }, +#endif + +#define osGetNativeSystemInfo ((VOID(WINAPI*)( \ + LPSYSTEM_INFO))aSyscall[68].pCurrent) + +#if defined(SQLITE_WIN32_HAS_ANSI) + { "OutputDebugStringA", (SYSCALL)OutputDebugStringA, 0 }, +#else + { "OutputDebugStringA", (SYSCALL)0, 0 }, +#endif + +#define osOutputDebugStringA ((VOID(WINAPI*)(LPCSTR))aSyscall[69].pCurrent) + +#if defined(SQLITE_WIN32_HAS_WIDE) + { "OutputDebugStringW", (SYSCALL)OutputDebugStringW, 0 }, +#else + { "OutputDebugStringW", (SYSCALL)0, 0 }, +#endif + +#define osOutputDebugStringW ((VOID(WINAPI*)(LPCWSTR))aSyscall[70].pCurrent) + + { "GetProcessHeap", (SYSCALL)GetProcessHeap, 0 }, + +#define osGetProcessHeap ((HANDLE(WINAPI*)(VOID))aSyscall[71].pCurrent) + +#if SQLITE_OS_WINRT + { "CreateFileMappingFromApp", (SYSCALL)CreateFileMappingFromApp, 0 }, +#else + { "CreateFileMappingFromApp", (SYSCALL)0, 0 }, +#endif + +#define osCreateFileMappingFromApp ((HANDLE(WINAPI*)(HANDLE, \ + LPSECURITY_ATTRIBUTES,ULONG,ULONG64,LPCWSTR))aSyscall[72].pCurrent) + +}; /* End of the overrideable system calls */ + +/* +** This is the xSetSystemCall() method of sqlite3_vfs for all of the +** "win32" VFSes. Return SQLITE_OK opon successfully updating the +** system call pointer, or SQLITE_NOTFOUND if there is no configurable +** system call named zName. */ -static int winRead( - sqlite3_file *id, /* File to read from */ - void *pBuf, /* Write content into this buffer */ - int amt, /* Number of bytes to read */ - sqlite3_int64 offset /* Begin reading at this offset */ +static int winSetSystemCall( + sqlite3_vfs *pNotUsed, /* The VFS pointer. Not used */ + const char *zName, /* Name of system call to override */ + sqlite3_syscall_ptr pNewFunc /* Pointer to new system call value */ ){ - LONG upperBits = (LONG)((offset>>32) & 0x7fffffff); - LONG lowerBits = (LONG)(offset & 0xffffffff); - DWORD rc; - winFile *pFile = (winFile*)id; - DWORD error; - DWORD got; + unsigned int i; + int rc = SQLITE_NOTFOUND; - assert( id!=0 ); - SimulateIOError(return SQLITE_IOERR_READ); - OSTRACE3("READ %d lock=%d\n", pFile->h, pFile->locktype); - rc = SetFilePointer(pFile->h, lowerBits, &upperBits, FILE_BEGIN); - if( rc==INVALID_SET_FILE_POINTER && (error=GetLastError())!=NO_ERROR ){ - pFile->lastErrno = error; - return SQLITE_FULL; - } - if( !ReadFile(pFile->h, pBuf, amt, &got, 0) ){ - pFile->lastErrno = GetLastError(); - return SQLITE_IOERR_READ; - } - if( got==(DWORD)amt ){ - return SQLITE_OK; + UNUSED_PARAMETER(pNotUsed); + if( zName==0 ){ + /* If no zName is given, restore all system calls to their default + ** settings and return NULL + */ + rc = SQLITE_OK; + for(i=0; i>32) & 0x7fffffff); - LONG lowerBits = (LONG)(offset & 0xffffffff); - DWORD rc; - winFile *pFile = (winFile*)id; - DWORD error; - DWORD wrote = 0; +static sqlite3_syscall_ptr winGetSystemCall( + sqlite3_vfs *pNotUsed, + const char *zName +){ + unsigned int i; - assert( id!=0 ); - SimulateIOError(return SQLITE_IOERR_WRITE); - SimulateDiskfullError(return SQLITE_FULL); - OSTRACE3("WRITE %d lock=%d\n", pFile->h, pFile->locktype); - rc = SetFilePointer(pFile->h, lowerBits, &upperBits, FILE_BEGIN); - if( rc==INVALID_SET_FILE_POINTER && (error=GetLastError())!=NO_ERROR ){ - pFile->lastErrno = error; - return SQLITE_FULL; - } - assert( amt>0 ); - while( - amt>0 - && (rc = WriteFile(pFile->h, pBuf, amt, &wrote, 0))!=0 - && wrote>0 - ){ - amt -= wrote; - pBuf = &((char*)pBuf)[wrote]; - } - if( !rc || amt>(int)wrote ){ - pFile->lastErrno = GetLastError(); - return SQLITE_FULL; + UNUSED_PARAMETER(pNotUsed); + for(i=0; i>32) & 0x7fffffff); - LONG lowerBits = (LONG)(nByte & 0xffffffff); - DWORD rc; - winFile *pFile = (winFile*)id; - DWORD error; +static const char *winNextSystemCall(sqlite3_vfs *p, const char *zName){ + int i = -1; - assert( id!=0 ); - OSTRACE3("TRUNCATE %d %lld\n", pFile->h, nByte); - SimulateIOError(return SQLITE_IOERR_TRUNCATE); - rc = SetFilePointer(pFile->h, lowerBits, &upperBits, FILE_BEGIN); - if( rc==INVALID_SET_FILE_POINTER && (error=GetLastError())!=NO_ERROR ){ - pFile->lastErrno = error; - return SQLITE_IOERR_TRUNCATE; + UNUSED_PARAMETER(p); + if( zName ){ + for(i=0; ih) ){ - pFile->lastErrno = GetLastError(); - return SQLITE_IOERR_TRUNCATE; + for(i++; ih, pFile->locktype); -#else - UNUSED_PARAMETER(id); -#endif -#ifndef SQLITE_TEST - UNUSED_PARAMETER(flags); -#else - if( flags & SQLITE_SYNC_FULL ){ - sqlite3_fullsync_count++; +SQLITE_API void sqlite3_win32_write_debug(char *zBuf, int nBuf){ + char zDbgBuf[SQLITE_WIN32_DBG_BUF_SIZE]; + int nMin = MIN(nBuf, (SQLITE_WIN32_DBG_BUF_SIZE - 1)); /* may be negative. */ + if( nMin<-1 ) nMin = -1; /* all negative values become -1. */ + assert( nMin==-1 || nMin==0 || nMin0 ){ + memset(zDbgBuf, 0, SQLITE_WIN32_DBG_BUF_SIZE); + memcpy(zDbgBuf, zBuf, nMin); + osOutputDebugStringA(zDbgBuf); + }else{ + osOutputDebugStringA(zBuf); } - sqlite3_sync_count++; -#endif - /* If we compiled with the SQLITE_NO_SYNC flag, then syncing is a - ** no-op - */ -#ifdef SQLITE_NO_SYNC - return SQLITE_OK; +#elif defined(SQLITE_WIN32_HAS_WIDE) + memset(zDbgBuf, 0, SQLITE_WIN32_DBG_BUF_SIZE); + if ( osMultiByteToWideChar( + osAreFileApisANSI() ? CP_ACP : CP_OEMCP, 0, zBuf, + nMin, (LPWSTR)zDbgBuf, SQLITE_WIN32_DBG_BUF_SIZE/sizeof(WCHAR))<=0 ){ + return; + } + osOutputDebugStringW((LPCWSTR)zDbgBuf); #else - if( FlushFileBuffers(pFile->h) ){ - return SQLITE_OK; + if( nMin>0 ){ + memset(zDbgBuf, 0, SQLITE_WIN32_DBG_BUF_SIZE); + memcpy(zDbgBuf, zBuf, nMin); + fprintf(stderr, "%s", zDbgBuf); }else{ - pFile->lastErrno = GetLastError(); - return SQLITE_IOERR; + fprintf(stderr, "%s", zBuf); } #endif } /* -** Determine the current size of a file in bytes +** The following routine suspends the current thread for at least ms +** milliseconds. This is equivalent to the Win32 Sleep() interface. */ -static int winFileSize(sqlite3_file *id, sqlite3_int64 *pSize){ - DWORD upperBits; - DWORD lowerBits; - winFile *pFile = (winFile*)id; - DWORD error; +#if SQLITE_OS_WINRT +static HANDLE sleepObj = NULL; +#endif - assert( id!=0 ); - SimulateIOError(return SQLITE_IOERR_FSTAT); - lowerBits = GetFileSize(pFile->h, &upperBits); - if( (lowerBits == INVALID_FILE_SIZE) - && ((error = GetLastError()) != NO_ERROR) ) - { - pFile->lastErrno = error; - return SQLITE_IOERR_FSTAT; +SQLITE_API void sqlite3_win32_sleep(DWORD milliseconds){ +#if SQLITE_OS_WINRT + if ( sleepObj==NULL ){ + sleepObj = osCreateEventExW(NULL, NULL, CREATE_EVENT_MANUAL_RESET, + SYNCHRONIZE); } - *pSize = (((sqlite3_int64)upperBits)<<32) + lowerBits; - return SQLITE_OK; + assert( sleepObj!=NULL ); + osWaitForSingleObjectEx(sleepObj, milliseconds, FALSE); +#else + osSleep(milliseconds); +#endif } /* -** LOCKFILE_FAIL_IMMEDIATELY is undefined on some Windows systems. +** Return true (non-zero) if we are running under WinNT, Win2K, WinXP, +** or WinCE. Return false (zero) for Win95, Win98, or WinME. +** +** Here is an interesting observation: Win95, Win98, and WinME lack +** the LockFileEx() API. But we can still statically link against that +** API as long as we don't call it when running Win95/98/ME. A call to +** this routine is used to determine if the host is Win95/98/ME or +** WinNT/2K/XP so that we will know whether or not we can safely call +** the LockFileEx() API. */ -#ifndef LOCKFILE_FAIL_IMMEDIATELY -# define LOCKFILE_FAIL_IMMEDIATELY 1 -#endif +#if SQLITE_OS_WINCE || SQLITE_OS_WINRT +# define isNT() (1) +#else + static int isNT(void){ + if( sqlite3_os_type==0 ){ + OSVERSIONINFOA sInfo; + sInfo.dwOSVersionInfoSize = sizeof(sInfo); + osGetVersionExA(&sInfo); + sqlite3_os_type = sInfo.dwPlatformId==VER_PLATFORM_WIN32_NT ? 2 : 1; + } + return sqlite3_os_type==2; + } +#endif /* SQLITE_OS_WINCE */ +#ifdef SQLITE_WIN32_MALLOC /* -** Acquire a reader lock. -** Different API routines are called depending on whether or not this -** is Win95 or WinNT. -*/ -static int getReadLock(winFile *pFile){ - int res; - if( isNT() ){ - OVERLAPPED ovlp; - ovlp.Offset = SHARED_FIRST; - ovlp.OffsetHigh = 0; - ovlp.hEvent = 0; - res = LockFileEx(pFile->h, LOCKFILE_FAIL_IMMEDIATELY, - 0, SHARED_SIZE, 0, &ovlp); -/* isNT() is 1 if SQLITE_OS_WINCE==1, so this else is never executed. +** Allocate nBytes of memory. */ -#if SQLITE_OS_WINCE==0 - }else{ - int lk; - sqlite3_randomness(sizeof(lk), &lk); - pFile->sharedLockByte = (short)((lk & 0x7fffffff)%(SHARED_SIZE - 1)); - res = LockFile(pFile->h, SHARED_FIRST+pFile->sharedLockByte, 0, 1, 0); +static void *winMemMalloc(int nBytes){ + HANDLE hHeap; + void *p; + + winMemAssertMagic(); + hHeap = winMemGetHeap(); + assert( hHeap!=0 ); + assert( hHeap!=INVALID_HANDLE_VALUE ); +#if !SQLITE_OS_WINRT && defined(SQLITE_WIN32_MALLOC_VALIDATE) + assert ( osHeapValidate(hHeap, SQLITE_WIN32_HEAP_FLAGS, NULL) ); #endif + assert( nBytes>=0 ); + p = osHeapAlloc(hHeap, SQLITE_WIN32_HEAP_FLAGS, (SIZE_T)nBytes); + if( !p ){ + sqlite3_log(SQLITE_NOMEM, "failed to HeapAlloc %u bytes (%d), heap=%p", + nBytes, osGetLastError(), (void*)hHeap); } - if( res == 0 ){ - pFile->lastErrno = GetLastError(); - } - return res; + return p; } /* -** Undo a readlock -*/ -static int unlockReadLock(winFile *pFile){ - int res; - if( isNT() ){ - res = UnlockFile(pFile->h, SHARED_FIRST, 0, SHARED_SIZE, 0); -/* isNT() is 1 if SQLITE_OS_WINCE==1, so this else is never executed. +** Free memory. */ -#if SQLITE_OS_WINCE==0 - }else{ - res = UnlockFile(pFile->h, SHARED_FIRST + pFile->sharedLockByte, 0, 1, 0); +static void winMemFree(void *pPrior){ + HANDLE hHeap; + + winMemAssertMagic(); + hHeap = winMemGetHeap(); + assert( hHeap!=0 ); + assert( hHeap!=INVALID_HANDLE_VALUE ); +#if !SQLITE_OS_WINRT && defined(SQLITE_WIN32_MALLOC_VALIDATE) + assert ( osHeapValidate(hHeap, SQLITE_WIN32_HEAP_FLAGS, pPrior) ); #endif + if( !pPrior ) return; /* Passing NULL to HeapFree is undefined. */ + if( !osHeapFree(hHeap, SQLITE_WIN32_HEAP_FLAGS, pPrior) ){ + sqlite3_log(SQLITE_NOMEM, "failed to HeapFree block %p (%d), heap=%p", + pPrior, osGetLastError(), (void*)hHeap); } - if( res == 0 ){ - pFile->lastErrno = GetLastError(); - } - return res; } /* -** Lock the file with the lock specified by parameter locktype - one -** of the following: -** -** (1) SHARED_LOCK -** (2) RESERVED_LOCK -** (3) PENDING_LOCK -** (4) EXCLUSIVE_LOCK -** -** Sometimes when requesting one lock state, additional lock states -** are inserted in between. The locking might fail on one of the later -** transitions leaving the lock state different from what it started but -** still short of its goal. The following chart shows the allowed -** transitions and the inserted intermediate states: -** -** UNLOCKED -> SHARED -** SHARED -> RESERVED -** SHARED -> (PENDING) -> EXCLUSIVE -** RESERVED -> (PENDING) -> EXCLUSIVE -** PENDING -> EXCLUSIVE -** -** This routine will only increase a lock. The winUnlock() routine -** erases all locks at once and returns us immediately to locking level 0. -** It is not possible to lower the locking level one step at a time. You -** must go straight to locking level 0. +** Change the size of an existing memory allocation */ -static int winLock(sqlite3_file *id, int locktype){ - int rc = SQLITE_OK; /* Return code from subroutines */ - int res = 1; /* Result of a windows lock call */ - int newLocktype; /* Set pFile->locktype to this value before exiting */ - int gotPendingLock = 0;/* True if we acquired a PENDING lock this time */ - winFile *pFile = (winFile*)id; - DWORD error = NO_ERROR; - - assert( id!=0 ); - OSTRACE5("LOCK %d %d was %d(%d)\n", - pFile->h, locktype, pFile->locktype, pFile->sharedLockByte); +static void *winMemRealloc(void *pPrior, int nBytes){ + HANDLE hHeap; + void *p; - /* If there is already a lock of this type or more restrictive on the - ** OsFile, do nothing. Don't use the end_lock: exit path, as - ** sqlite3OsEnterMutex() hasn't been called yet. - */ - if( pFile->locktype>=locktype ){ - return SQLITE_OK; + winMemAssertMagic(); + hHeap = winMemGetHeap(); + assert( hHeap!=0 ); + assert( hHeap!=INVALID_HANDLE_VALUE ); +#if !SQLITE_OS_WINRT && defined(SQLITE_WIN32_MALLOC_VALIDATE) + assert ( osHeapValidate(hHeap, SQLITE_WIN32_HEAP_FLAGS, pPrior) ); +#endif + assert( nBytes>=0 ); + if( !pPrior ){ + p = osHeapAlloc(hHeap, SQLITE_WIN32_HEAP_FLAGS, (SIZE_T)nBytes); + }else{ + p = osHeapReAlloc(hHeap, SQLITE_WIN32_HEAP_FLAGS, pPrior, (SIZE_T)nBytes); } - - /* Make sure the locking sequence is correct - */ - assert( pFile->locktype!=NO_LOCK || locktype==SHARED_LOCK ); - assert( locktype!=PENDING_LOCK ); - assert( locktype!=RESERVED_LOCK || pFile->locktype==SHARED_LOCK ); - - /* Lock the PENDING_LOCK byte if we need to acquire a PENDING lock or - ** a SHARED lock. If we are acquiring a SHARED lock, the acquisition of - ** the PENDING_LOCK byte is temporary. - */ - newLocktype = pFile->locktype; - if( (pFile->locktype==NO_LOCK) - || ( (locktype==EXCLUSIVE_LOCK) - && (pFile->locktype==RESERVED_LOCK)) - ){ - int cnt = 3; - while( cnt-->0 && (res = LockFile(pFile->h, PENDING_BYTE, 0, 1, 0))==0 ){ - /* Try 3 times to get the pending lock. The pending lock might be - ** held by another reader process who will release it momentarily. - */ - OSTRACE2("could not get a PENDING lock. cnt=%d\n", cnt); - Sleep(1); - } - gotPendingLock = res; - if( !res ){ - error = GetLastError(); - } + if( !p ){ + sqlite3_log(SQLITE_NOMEM, "failed to %s %u bytes (%d), heap=%p", + pPrior ? "HeapReAlloc" : "HeapAlloc", nBytes, osGetLastError(), + (void*)hHeap); } + return p; +} - /* Acquire a shared lock - */ - if( locktype==SHARED_LOCK && res ){ - assert( pFile->locktype==NO_LOCK ); - res = getReadLock(pFile); - if( res ){ - newLocktype = SHARED_LOCK; - }else{ - error = GetLastError(); - } - } +/* +** Return the size of an outstanding allocation, in bytes. +*/ +static int winMemSize(void *p){ + HANDLE hHeap; + SIZE_T n; - /* Acquire a RESERVED lock - */ - if( locktype==RESERVED_LOCK && res ){ - assert( pFile->locktype==SHARED_LOCK ); - res = LockFile(pFile->h, RESERVED_BYTE, 0, 1, 0); - if( res ){ - newLocktype = RESERVED_LOCK; - }else{ - error = GetLastError(); - } + winMemAssertMagic(); + hHeap = winMemGetHeap(); + assert( hHeap!=0 ); + assert( hHeap!=INVALID_HANDLE_VALUE ); +#if !SQLITE_OS_WINRT && defined(SQLITE_WIN32_MALLOC_VALIDATE) + assert ( osHeapValidate(hHeap, SQLITE_WIN32_HEAP_FLAGS, NULL) ); +#endif + if( !p ) return 0; + n = osHeapSize(hHeap, SQLITE_WIN32_HEAP_FLAGS, p); + if( n==(SIZE_T)-1 ){ + sqlite3_log(SQLITE_NOMEM, "failed to HeapSize block %p (%d), heap=%p", + p, osGetLastError(), (void*)hHeap); + return 0; } + return (int)n; +} - /* Acquire a PENDING lock - */ - if( locktype==EXCLUSIVE_LOCK && res ){ - newLocktype = PENDING_LOCK; - gotPendingLock = 0; - } +/* +** Round up a request size to the next valid allocation size. +*/ +static int winMemRoundup(int n){ + return n; +} - /* Acquire an EXCLUSIVE lock - */ - if( locktype==EXCLUSIVE_LOCK && res ){ - assert( pFile->locktype>=SHARED_LOCK ); - res = unlockReadLock(pFile); - OSTRACE2("unreadlock = %d\n", res); - res = LockFile(pFile->h, SHARED_FIRST, 0, SHARED_SIZE, 0); - if( res ){ - newLocktype = EXCLUSIVE_LOCK; - }else{ - error = GetLastError(); - OSTRACE2("error-code = %d\n", error); - getReadLock(pFile); +/* +** Initialize this module. +*/ +static int winMemInit(void *pAppData){ + winMemData *pWinMemData = (winMemData *)pAppData; + + if( !pWinMemData ) return SQLITE_ERROR; + assert( pWinMemData->magic==WINMEM_MAGIC ); + +#if !SQLITE_OS_WINRT && SQLITE_WIN32_HEAP_CREATE + if( !pWinMemData->hHeap ){ + pWinMemData->hHeap = osHeapCreate(SQLITE_WIN32_HEAP_FLAGS, + SQLITE_WIN32_HEAP_INIT_SIZE, + SQLITE_WIN32_HEAP_MAX_SIZE); + if( !pWinMemData->hHeap ){ + sqlite3_log(SQLITE_NOMEM, + "failed to HeapCreate (%d), flags=%u, initSize=%u, maxSize=%u", + osGetLastError(), SQLITE_WIN32_HEAP_FLAGS, + SQLITE_WIN32_HEAP_INIT_SIZE, SQLITE_WIN32_HEAP_MAX_SIZE); + return SQLITE_NOMEM; } + pWinMemData->bOwned = TRUE; + assert( pWinMemData->bOwned ); } - - /* If we are holding a PENDING lock that ought to be released, then - ** release it now. - */ - if( gotPendingLock && locktype==SHARED_LOCK ){ - UnlockFile(pFile->h, PENDING_BYTE, 0, 1, 0); - } - - /* Update the state of the lock has held in the file descriptor then - ** return the appropriate result code. - */ - if( res ){ - rc = SQLITE_OK; - }else{ - OSTRACE4("LOCK FAILED %d trying for %d but got %d\n", pFile->h, - locktype, newLocktype); - pFile->lastErrno = error; - rc = SQLITE_BUSY; +#else + pWinMemData->hHeap = osGetProcessHeap(); + if( !pWinMemData->hHeap ){ + sqlite3_log(SQLITE_NOMEM, + "failed to GetProcessHeap (%d)", osGetLastError()); + return SQLITE_NOMEM; } - pFile->locktype = (u8)newLocktype; - return rc; + pWinMemData->bOwned = FALSE; + assert( !pWinMemData->bOwned ); +#endif + assert( pWinMemData->hHeap!=0 ); + assert( pWinMemData->hHeap!=INVALID_HANDLE_VALUE ); +#if !SQLITE_OS_WINRT && defined(SQLITE_WIN32_MALLOC_VALIDATE) + assert( osHeapValidate(pWinMemData->hHeap, SQLITE_WIN32_HEAP_FLAGS, NULL) ); +#endif + return SQLITE_OK; } /* -** This routine checks if there is a RESERVED lock held on the specified -** file by this or any other process. If such a lock is held, return -** non-zero, otherwise zero. +** Deinitialize this module. */ -static int winCheckReservedLock(sqlite3_file *id, int *pResOut){ - int rc; - winFile *pFile = (winFile*)id; +static void winMemShutdown(void *pAppData){ + winMemData *pWinMemData = (winMemData *)pAppData; - assert( id!=0 ); - if( pFile->locktype>=RESERVED_LOCK ){ - rc = 1; - OSTRACE3("TEST WR-LOCK %d %d (local)\n", pFile->h, rc); - }else{ - rc = LockFile(pFile->h, RESERVED_BYTE, 0, 1, 0); - if( rc ){ - UnlockFile(pFile->h, RESERVED_BYTE, 0, 1, 0); + if( !pWinMemData ) return; + if( pWinMemData->hHeap ){ + assert( pWinMemData->hHeap!=INVALID_HANDLE_VALUE ); +#if !SQLITE_OS_WINRT && defined(SQLITE_WIN32_MALLOC_VALIDATE) + assert( osHeapValidate(pWinMemData->hHeap, SQLITE_WIN32_HEAP_FLAGS, NULL) ); +#endif + if( pWinMemData->bOwned ){ + if( !osHeapDestroy(pWinMemData->hHeap) ){ + sqlite3_log(SQLITE_NOMEM, "failed to HeapDestroy (%d), heap=%p", + osGetLastError(), (void*)pWinMemData->hHeap); + } + pWinMemData->bOwned = FALSE; } - rc = !rc; - OSTRACE3("TEST WR-LOCK %d %d (remote)\n", pFile->h, rc); + pWinMemData->hHeap = NULL; } - *pResOut = rc; - return SQLITE_OK; } /* -** Lower the locking level on file descriptor id to locktype. locktype -** must be either NO_LOCK or SHARED_LOCK. +** Populate the low-level memory allocation function pointers in +** sqlite3GlobalConfig.m with pointers to the routines in this file. The +** arguments specify the block of memory to manage. ** -** If the locking level of the file descriptor is already at or below -** the requested locking level, this routine is a no-op. +** This routine is only called by sqlite3_config(), and therefore +** is not required to be threadsafe (it is not). +*/ +SQLITE_PRIVATE const sqlite3_mem_methods *sqlite3MemGetWin32(void){ + static const sqlite3_mem_methods winMemMethods = { + winMemMalloc, + winMemFree, + winMemRealloc, + winMemSize, + winMemRoundup, + winMemInit, + winMemShutdown, + &win_mem_data + }; + return &winMemMethods; +} + +SQLITE_PRIVATE void sqlite3MemSetDefault(void){ + sqlite3_config(SQLITE_CONFIG_MALLOC, sqlite3MemGetWin32()); +} +#endif /* SQLITE_WIN32_MALLOC */ + +/* +** Convert a UTF-8 string to Microsoft Unicode (UTF-16?). ** -** It is not possible for this routine to fail if the second argument -** is NO_LOCK. If the second argument is SHARED_LOCK then this routine -** might return SQLITE_IOERR; +** Space to hold the returned string is obtained from malloc. */ -static int winUnlock(sqlite3_file *id, int locktype){ - int type; - winFile *pFile = (winFile*)id; - int rc = SQLITE_OK; - assert( pFile!=0 ); - assert( locktype<=SHARED_LOCK ); - OSTRACE5("UNLOCK %d to %d was %d(%d)\n", pFile->h, locktype, - pFile->locktype, pFile->sharedLockByte); - type = pFile->locktype; - if( type>=EXCLUSIVE_LOCK ){ - UnlockFile(pFile->h, SHARED_FIRST, 0, SHARED_SIZE, 0); - if( locktype==SHARED_LOCK && !getReadLock(pFile) ){ - /* This should never happen. We should always be able to - ** reacquire the read lock */ - rc = SQLITE_IOERR_UNLOCK; - } - } - if( type>=RESERVED_LOCK ){ - UnlockFile(pFile->h, RESERVED_BYTE, 0, 1, 0); +static LPWSTR utf8ToUnicode(const char *zFilename){ + int nChar; + LPWSTR zWideFilename; + + nChar = osMultiByteToWideChar(CP_UTF8, 0, zFilename, -1, NULL, 0); + if( nChar==0 ){ + return 0; } - if( locktype==NO_LOCK && type>=SHARED_LOCK ){ - unlockReadLock(pFile); + zWideFilename = sqlite3_malloc( nChar*sizeof(zWideFilename[0]) ); + if( zWideFilename==0 ){ + return 0; } - if( type>=PENDING_LOCK ){ - UnlockFile(pFile->h, PENDING_BYTE, 0, 1, 0); + nChar = osMultiByteToWideChar(CP_UTF8, 0, zFilename, -1, zWideFilename, + nChar); + if( nChar==0 ){ + sqlite3_free(zWideFilename); + zWideFilename = 0; } - pFile->locktype = (u8)locktype; - return rc; + return zWideFilename; } /* -** Control and query of the open file handle. +** Convert Microsoft Unicode to UTF-8. Space to hold the returned string is +** obtained from sqlite3_malloc(). */ -static int winFileControl(sqlite3_file *id, int op, void *pArg){ - switch( op ){ - case SQLITE_FCNTL_LOCKSTATE: { - *(int*)pArg = ((winFile*)id)->locktype; - return SQLITE_OK; - } - case SQLITE_LAST_ERRNO: { - *(int*)pArg = (int)((winFile*)id)->lastErrno; - return SQLITE_OK; - } +static char *unicodeToUtf8(LPCWSTR zWideFilename){ + int nByte; + char *zFilename; + + nByte = osWideCharToMultiByte(CP_UTF8, 0, zWideFilename, -1, 0, 0, 0, 0); + if( nByte == 0 ){ + return 0; } - return SQLITE_ERROR; + zFilename = sqlite3_malloc( nByte ); + if( zFilename==0 ){ + return 0; + } + nByte = osWideCharToMultiByte(CP_UTF8, 0, zWideFilename, -1, zFilename, nByte, + 0, 0); + if( nByte == 0 ){ + sqlite3_free(zFilename); + zFilename = 0; + } + return zFilename; } /* -** Return the sector size in bytes of the underlying block device for -** the specified file. This is almost always 512 bytes, but may be -** larger for some devices. -** -** SQLite code assumes this function cannot fail. It also assumes that -** if two files are created in the same file-system directory (i.e. -** a database and its journal file) that the sector size will be the -** same for both. +** Convert an ANSI string to Microsoft Unicode, based on the +** current codepage settings for file apis. +** +** Space to hold the returned string is obtained +** from sqlite3_malloc. */ -static int winSectorSize(sqlite3_file *id){ - assert( id!=0 ); - return (int)(((winFile*)id)->sectorSize); -} +static LPWSTR mbcsToUnicode(const char *zFilename){ + int nByte; + LPWSTR zMbcsFilename; + int codepage = osAreFileApisANSI() ? CP_ACP : CP_OEMCP; -/* -** Return a vector of device characteristics. -*/ -static int winDeviceCharacteristics(sqlite3_file *id){ - UNUSED_PARAMETER(id); - return 0; + nByte = osMultiByteToWideChar(codepage, 0, zFilename, -1, NULL, + 0)*sizeof(WCHAR); + if( nByte==0 ){ + return 0; + } + zMbcsFilename = sqlite3_malloc( nByte*sizeof(zMbcsFilename[0]) ); + if( zMbcsFilename==0 ){ + return 0; + } + nByte = osMultiByteToWideChar(codepage, 0, zFilename, -1, zMbcsFilename, + nByte); + if( nByte==0 ){ + sqlite3_free(zMbcsFilename); + zMbcsFilename = 0; + } + return zMbcsFilename; } /* -** This vector defines all the methods that can operate on an -** sqlite3_file for win32. +** Convert Microsoft Unicode to multi-byte character string, based on the +** user's ANSI codepage. +** +** Space to hold the returned string is obtained from +** sqlite3_malloc(). */ -static const sqlite3_io_methods winIoMethod = { - 1, /* iVersion */ - winClose, - winRead, - winWrite, - winTruncate, - winSync, - winFileSize, - winLock, - winUnlock, - winCheckReservedLock, - winFileControl, - winSectorSize, - winDeviceCharacteristics -}; +static char *unicodeToMbcs(LPCWSTR zWideFilename){ + int nByte; + char *zFilename; + int codepage = osAreFileApisANSI() ? CP_ACP : CP_OEMCP; -/*************************************************************************** -** Here ends the I/O methods that form the sqlite3_io_methods object. -** -** The next block of code implements the VFS methods. -****************************************************************************/ + nByte = osWideCharToMultiByte(codepage, 0, zWideFilename, -1, 0, 0, 0, 0); + if( nByte == 0 ){ + return 0; + } + zFilename = sqlite3_malloc( nByte ); + if( zFilename==0 ){ + return 0; + } + nByte = osWideCharToMultiByte(codepage, 0, zWideFilename, -1, zFilename, + nByte, 0, 0); + if( nByte == 0 ){ + sqlite3_free(zFilename); + zFilename = 0; + } + return zFilename; +} /* -** Convert a UTF-8 filename into whatever form the underlying -** operating system wants filenames in. Space to hold the result -** is obtained from malloc and must be freed by the calling -** function. -*/ -static void *convertUtf8Filename(const char *zFilename){ - void *zConverted = 0; - if( isNT() ){ - zConverted = utf8ToUnicode(zFilename); -/* isNT() is 1 if SQLITE_OS_WINCE==1, so this else is never executed. +** Convert multibyte character string to UTF-8. Space to hold the +** returned string is obtained from sqlite3_malloc(). */ -#if SQLITE_OS_WINCE==0 - }else{ - zConverted = utf8ToMbcs(zFilename); -#endif +SQLITE_API char *sqlite3_win32_mbcs_to_utf8(const char *zFilename){ + char *zFilenameUtf8; + LPWSTR zTmpWide; + + zTmpWide = mbcsToUnicode(zFilename); + if( zTmpWide==0 ){ + return 0; } - /* caller will handle out of memory */ - return zConverted; + zFilenameUtf8 = unicodeToUtf8(zTmpWide); + sqlite3_free(zTmpWide); + return zFilenameUtf8; } /* -** Create a temporary file name in zBuf. zBuf must be big enough to -** hold at pVfs->mxPathname characters. -*/ -static int getTempname(int nBuf, char *zBuf){ - static char zChars[] = - "abcdefghijklmnopqrstuvwxyz" - "ABCDEFGHIJKLMNOPQRSTUVWXYZ" - "0123456789"; - size_t i, j; - char zTempPath[MAX_PATH+1]; - if( sqlite3_temp_directory ){ - sqlite3_snprintf(MAX_PATH-30, zTempPath, "%s", sqlite3_temp_directory); - }else if( isNT() ){ - char *zMulti; - WCHAR zWidePath[MAX_PATH]; - GetTempPathW(MAX_PATH-30, zWidePath); - zMulti = unicodeToUtf8(zWidePath); - if( zMulti ){ - sqlite3_snprintf(MAX_PATH-30, zTempPath, "%s", zMulti); - free(zMulti); - }else{ - return SQLITE_NOMEM; - } -/* isNT() is 1 if SQLITE_OS_WINCE==1, so this else is never executed. -** Since the ASCII version of these Windows API do not exist for WINCE, -** it's important to not reference them for WINCE builds. +** Convert UTF-8 to multibyte character string. Space to hold the +** returned string is obtained from sqlite3_malloc(). */ -#if SQLITE_OS_WINCE==0 - }else{ - char *zUtf8; - char zMbcsPath[MAX_PATH]; - GetTempPathA(MAX_PATH-30, zMbcsPath); - zUtf8 = sqlite3_win32_mbcs_to_utf8(zMbcsPath); - if( zUtf8 ){ - sqlite3_snprintf(MAX_PATH-30, zTempPath, "%s", zUtf8); - free(zUtf8); - }else{ - return SQLITE_NOMEM; - } -#endif - } - for(i=sqlite3Strlen30(zTempPath); i>0 && zTempPath[i-1]=='\\'; i--){} - zTempPath[i] = 0; - sqlite3_snprintf(nBuf-30, zBuf, - "%s\\"SQLITE_TEMP_FILE_PREFIX, zTempPath); - j = sqlite3Strlen30(zBuf); - sqlite3_randomness(20, &zBuf[j]); - for(i=0; i<20; i++, j++){ - zBuf[j] = (char)zChars[ ((unsigned char)zBuf[j])%(sizeof(zChars)-1) ]; +SQLITE_API char *sqlite3_win32_utf8_to_mbcs(const char *zFilename){ + char *zFilenameMbcs; + LPWSTR zTmpWide; + + zTmpWide = utf8ToUnicode(zFilename); + if( zTmpWide==0 ){ + return 0; } - zBuf[j] = 0; - OSTRACE2("TEMP FILENAME: %s\n", zBuf); - return SQLITE_OK; + zFilenameMbcs = unicodeToMbcs(zTmpWide); + sqlite3_free(zTmpWide); + return zFilenameMbcs; } + /* ** The return value of getLastErrorMsg ** is zero if the error message fits in the buffer, or non-zero ** otherwise (if the message was truncated). */ -static int getLastErrorMsg(int nBuf, char *zBuf){ - DWORD error = GetLastError(); - -#if SQLITE_OS_WINCE - sqlite3_snprintf(nBuf, zBuf, "OsError 0x%x (%u)", error, error); -#else +static int getLastErrorMsg(DWORD lastErrno, int nBuf, char *zBuf){ /* FormatMessage returns 0 on failure. Otherwise it ** returns the number of TCHARs written to the output ** buffer, excluding the terminating null char. */ - if (!FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM, - NULL, - error, - 0, - zBuf, - nBuf-1, - 0)) - { - sqlite3_snprintf(nBuf, zBuf, "OsError 0x%x (%u)", error, error); + DWORD dwLen = 0; + char *zOut = 0; + + if( isNT() ){ +#if SQLITE_OS_WINRT + WCHAR zTempWide[MAX_PATH+1]; /* NOTE: Somewhat arbitrary. */ + dwLen = osFormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM | + FORMAT_MESSAGE_IGNORE_INSERTS, + NULL, + lastErrno, + 0, + zTempWide, + MAX_PATH, + 0); +#else + LPWSTR zTempWide = NULL; + dwLen = osFormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | + FORMAT_MESSAGE_FROM_SYSTEM | + FORMAT_MESSAGE_IGNORE_INSERTS, + NULL, + lastErrno, + 0, + (LPWSTR) &zTempWide, + 0, + 0); +#endif + if( dwLen > 0 ){ + /* allocate a buffer and convert to UTF8 */ + sqlite3BeginBenignMalloc(); + zOut = unicodeToUtf8(zTempWide); + sqlite3EndBenignMalloc(); +#if !SQLITE_OS_WINRT + /* free the system buffer allocated by FormatMessage */ + osLocalFree(zTempWide); +#endif + } + } +#ifdef SQLITE_WIN32_HAS_ANSI + else{ + char *zTemp = NULL; + dwLen = osFormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | + FORMAT_MESSAGE_FROM_SYSTEM | + FORMAT_MESSAGE_IGNORE_INSERTS, + NULL, + lastErrno, + 0, + (LPSTR) &zTemp, + 0, + 0); + if( dwLen > 0 ){ + /* allocate a buffer and convert to UTF8 */ + sqlite3BeginBenignMalloc(); + zOut = sqlite3_win32_mbcs_to_utf8(zTemp); + sqlite3EndBenignMalloc(); + /* free the system buffer allocated by FormatMessage */ + osLocalFree(zTemp); + } } #endif - + if( 0 == dwLen ){ + sqlite3_snprintf(nBuf, zBuf, "OsError 0x%x (%u)", lastErrno, lastErrno); + }else{ + /* copy a maximum of nBuf chars to output buffer */ + sqlite3_snprintf(nBuf, zBuf, "%s", zOut); + /* free the UTF8 buffer */ + sqlite3_free(zOut); + } return 0; } /* -** Open a file. +** +** This function - winLogErrorAtLine() - is only ever called via the macro +** winLogError(). +** +** This routine is invoked after an error occurs in an OS function. +** It logs a message using sqlite3_log() containing the current value of +** error code and, if possible, the human-readable equivalent from +** FormatMessage. +** +** The first argument passed to the macro should be the error code that +** will be returned to SQLite (e.g. SQLITE_IOERR_DELETE, SQLITE_CANTOPEN). +** The two subsequent arguments should be the name of the OS function that +** failed and the the associated file-system path, if any. */ -static int winOpen( - sqlite3_vfs *pVfs, /* Not used */ - const char *zName, /* Name of the file (UTF-8) */ - sqlite3_file *id, /* Write the SQLite file handle here */ - int flags, /* Open mode flags */ - int *pOutFlags /* Status return flags */ +#define winLogError(a,b,c,d) winLogErrorAtLine(a,b,c,d,__LINE__) +static int winLogErrorAtLine( + int errcode, /* SQLite error code */ + DWORD lastErrno, /* Win32 last error */ + const char *zFunc, /* Name of OS function that failed */ + const char *zPath, /* File path associated with error */ + int iLine /* Source line number where error occurred */ ){ - HANDLE h; - DWORD dwDesiredAccess; - DWORD dwShareMode; - DWORD dwCreationDisposition; - DWORD dwFlagsAndAttributes = 0; -#if SQLITE_OS_WINCE - int isTemp = 0; -#endif - winFile *pFile = (winFile*)id; - void *zConverted; /* Filename in OS encoding */ - const char *zUtf8Name = zName; /* Filename in UTF-8 encoding */ - char zTmpname[MAX_PATH+1]; /* Buffer used to create temp filename */ - - assert( id!=0 ); - UNUSED_PARAMETER(pVfs); + char zMsg[500]; /* Human readable error text */ + int i; /* Loop counter */ - /* If the second argument to this function is NULL, generate a - ** temporary file name to use - */ - if( !zUtf8Name ){ - int rc = getTempname(MAX_PATH+1, zTmpname); - if( rc!=SQLITE_OK ){ - return rc; - } - zUtf8Name = zTmpname; - } + zMsg[0] = 0; + getLastErrorMsg(lastErrno, sizeof(zMsg), zMsg); + assert( errcode!=SQLITE_OK ); + if( zPath==0 ) zPath = ""; + for(i=0; zMsg[i] && zMsg[i]!='\r' && zMsg[i]!='\n'; i++){} + zMsg[i] = 0; + sqlite3_log(errcode, + "os_win.c:%d: (%d) %s(%s) - %s", + iLine, lastErrno, zFunc, zPath, zMsg + ); - /* Convert the filename to the system encoding. */ - zConverted = convertUtf8Filename(zUtf8Name); - if( zConverted==0 ){ - return SQLITE_NOMEM; - } + return errcode; +} - if( flags & SQLITE_OPEN_READWRITE ){ - dwDesiredAccess = GENERIC_READ | GENERIC_WRITE; - }else{ - dwDesiredAccess = GENERIC_READ; - } - /* SQLITE_OPEN_EXCLUSIVE is used to make sure that a new file is - ** created. SQLite doesn't use it to indicate "exclusive access" - ** as it is usually understood. - */ - assert(!(flags & SQLITE_OPEN_EXCLUSIVE) || (flags & SQLITE_OPEN_CREATE)); - if( flags & SQLITE_OPEN_EXCLUSIVE ){ - /* Creates a new file, only if it does not already exist. */ - /* If the file exists, it fails. */ - dwCreationDisposition = CREATE_NEW; - }else if( flags & SQLITE_OPEN_CREATE ){ - /* Open existing file, or create if it doesn't exist */ - dwCreationDisposition = OPEN_ALWAYS; - }else{ - /* Opens a file, only if it exists. */ - dwCreationDisposition = OPEN_EXISTING; - } - dwShareMode = FILE_SHARE_READ | FILE_SHARE_WRITE; - if( flags & SQLITE_OPEN_DELETEONCLOSE ){ -#if SQLITE_OS_WINCE - dwFlagsAndAttributes = FILE_ATTRIBUTE_HIDDEN; - isTemp = 1; -#else - dwFlagsAndAttributes = FILE_ATTRIBUTE_TEMPORARY - | FILE_ATTRIBUTE_HIDDEN - | FILE_FLAG_DELETE_ON_CLOSE; +/* +** The number of times that a ReadFile(), WriteFile(), and DeleteFile() +** will be retried following a locking error - probably caused by +** antivirus software. Also the initial delay before the first retry. +** The delay increases linearly with each retry. +*/ +#ifndef SQLITE_WIN32_IOERR_RETRY +# define SQLITE_WIN32_IOERR_RETRY 10 #endif - }else{ - dwFlagsAndAttributes = FILE_ATTRIBUTE_NORMAL; - } - /* Reports from the internet are that performance is always - ** better if FILE_FLAG_RANDOM_ACCESS is used. Ticket #2699. */ -#if SQLITE_OS_WINCE - dwFlagsAndAttributes |= FILE_FLAG_RANDOM_ACCESS; +#ifndef SQLITE_WIN32_IOERR_RETRY_DELAY +# define SQLITE_WIN32_IOERR_RETRY_DELAY 25 #endif - if( isNT() ){ - h = CreateFileW((WCHAR*)zConverted, - dwDesiredAccess, - dwShareMode, - NULL, - dwCreationDisposition, - dwFlagsAndAttributes, - NULL - ); -/* isNT() is 1 if SQLITE_OS_WINCE==1, so this else is never executed. -** Since the ASCII version of these Windows API do not exist for WINCE, -** it's important to not reference them for WINCE builds. +static int win32IoerrRetry = SQLITE_WIN32_IOERR_RETRY; +static int win32IoerrRetryDelay = SQLITE_WIN32_IOERR_RETRY_DELAY; + +/* +** If a ReadFile() or WriteFile() error occurs, invoke this routine +** to see if it should be retried. Return TRUE to retry. Return FALSE +** to give up with an error. */ -#if SQLITE_OS_WINCE==0 - }else{ - h = CreateFileA((char*)zConverted, - dwDesiredAccess, - dwShareMode, - NULL, - dwCreationDisposition, - dwFlagsAndAttributes, - NULL - ); -#endif - } - if( h==INVALID_HANDLE_VALUE ){ - free(zConverted); - if( flags & SQLITE_OPEN_READWRITE ){ - return winOpen(pVfs, zName, id, - ((flags|SQLITE_OPEN_READONLY)&~SQLITE_OPEN_READWRITE), pOutFlags); - }else{ - return SQLITE_CANTOPEN; - } - } - if( pOutFlags ){ - if( flags & SQLITE_OPEN_READWRITE ){ - *pOutFlags = SQLITE_OPEN_READWRITE; - }else{ - *pOutFlags = SQLITE_OPEN_READONLY; +static int retryIoerr(int *pnRetry, DWORD *pError){ + DWORD e = osGetLastError(); + if( *pnRetry>=win32IoerrRetry ){ + if( pError ){ + *pError = e; } + return 0; } - memset(pFile, 0, sizeof(*pFile)); - pFile->pMethod = &winIoMethod; - pFile->h = h; - pFile->lastErrno = NO_ERROR; - pFile->sectorSize = getSectorSize(pVfs, zUtf8Name); -#if SQLITE_OS_WINCE - if( (flags & (SQLITE_OPEN_READWRITE|SQLITE_OPEN_MAIN_DB)) == - (SQLITE_OPEN_READWRITE|SQLITE_OPEN_MAIN_DB) - && !winceCreateLock(zName, pFile) - ){ - CloseHandle(h); - free(zConverted); - return SQLITE_CANTOPEN; + if( e==ERROR_ACCESS_DENIED || + e==ERROR_LOCK_VIOLATION || + e==ERROR_SHARING_VIOLATION ){ + sqlite3_win32_sleep(win32IoerrRetryDelay*(1+*pnRetry)); + ++*pnRetry; + return 1; } - if( isTemp ){ - pFile->zDeleteOnClose = zConverted; - }else -#endif - { - free(zConverted); + if( pError ){ + *pError = e; } - OpenCounter(+1); - return SQLITE_OK; + return 0; } /* -** Delete the named file. -** -** Note that windows does not allow a file to be deleted if some other -** process has it open. Sometimes a virus scanner or indexing program -** will open a journal file shortly after it is created in order to do -** whatever it does. While this other process is holding the -** file open, we will be unable to delete it. To work around this -** problem, we delay 100 milliseconds and try to delete again. Up -** to MX_DELETION_ATTEMPTs deletion attempts are run before giving -** up and returning an error. +** Log a I/O error retry episode. */ -#define MX_DELETION_ATTEMPTS 5 -static int winDelete( - sqlite3_vfs *pVfs, /* Not used on win32 */ - const char *zFilename, /* Name of file to delete */ - int syncDir /* Not used on win32 */ -){ - int cnt = 0; - DWORD rc; - DWORD error = 0; - void *zConverted = convertUtf8Filename(zFilename); - UNUSED_PARAMETER(pVfs); - UNUSED_PARAMETER(syncDir); - if( zConverted==0 ){ - return SQLITE_NOMEM; +static void logIoerr(int nRetry){ + if( nRetry ){ + sqlite3_log(SQLITE_IOERR, + "delayed %dms for lock/sharing conflict", + win32IoerrRetryDelay*nRetry*(nRetry+1)/2 + ); } - SimulateIOError(return SQLITE_IOERR_DELETE); - if( isNT() ){ - do{ - DeleteFileW(zConverted); - }while( ( ((rc = GetFileAttributesW(zConverted)) != INVALID_FILE_ATTRIBUTES) - || ((error = GetLastError()) == ERROR_ACCESS_DENIED)) - && (++cnt < MX_DELETION_ATTEMPTS) - && (Sleep(100), 1) ); -/* isNT() is 1 if SQLITE_OS_WINCE==1, so this else is never executed. -** Since the ASCII version of these Windows API do not exist for WINCE, -** it's important to not reference them for WINCE builds. +} + +#if SQLITE_OS_WINCE +/************************************************************************* +** This section contains code for WinCE only. */ -#if SQLITE_OS_WINCE==0 - }else{ - do{ - DeleteFileA(zConverted); - }while( ( ((rc = GetFileAttributesA(zConverted)) != INVALID_FILE_ATTRIBUTES) - || ((error = GetLastError()) == ERROR_ACCESS_DENIED)) - && (++cnt < MX_DELETION_ATTEMPTS) - && (Sleep(100), 1) ); -#endif - } - free(zConverted); - OSTRACE2("DELETE \"%s\"\n", zFilename); - return ( (rc == INVALID_FILE_ATTRIBUTES) - && (error == ERROR_FILE_NOT_FOUND)) ? SQLITE_OK : SQLITE_IOERR_DELETE; +/* +** Windows CE does not have a localtime() function. So create a +** substitute. +*/ +/* #include */ +struct tm *__cdecl localtime(const time_t *t) +{ + static struct tm y; + FILETIME uTm, lTm; + SYSTEMTIME pTm; + sqlite3_int64 t64; + t64 = *t; + t64 = (t64 + 11644473600)*10000000; + uTm.dwLowDateTime = (DWORD)(t64 & 0xFFFFFFFF); + uTm.dwHighDateTime= (DWORD)(t64 >> 32); + osFileTimeToLocalFileTime(&uTm,&lTm); + osFileTimeToSystemTime(&lTm,&pTm); + y.tm_year = pTm.wYear - 1900; + y.tm_mon = pTm.wMonth - 1; + y.tm_wday = pTm.wDayOfWeek; + y.tm_mday = pTm.wDay; + y.tm_hour = pTm.wHour; + y.tm_min = pTm.wMinute; + y.tm_sec = pTm.wSecond; + return &y; } +#define HANDLE_TO_WINFILE(a) (winFile*)&((char*)a)[-(int)offsetof(winFile,h)] + /* -** Check the existance and status of a file. +** Acquire a lock on the handle h */ -static int winAccess( - sqlite3_vfs *pVfs, /* Not used on win32 */ - const char *zFilename, /* Name of file to check */ - int flags, /* Type of test to make on this file */ - int *pResOut /* OUT: Result */ -){ - DWORD attr; - int rc = 0; - void *zConverted = convertUtf8Filename(zFilename); - UNUSED_PARAMETER(pVfs); - if( zConverted==0 ){ - return SQLITE_NOMEM; - } - if( isNT() ){ - attr = GetFileAttributesW((WCHAR*)zConverted); -/* isNT() is 1 if SQLITE_OS_WINCE==1, so this else is never executed. -** Since the ASCII version of these Windows API do not exist for WINCE, -** it's important to not reference them for WINCE builds. +static void winceMutexAcquire(HANDLE h){ + DWORD dwErr; + do { + dwErr = osWaitForSingleObject(h, INFINITE); + } while (dwErr != WAIT_OBJECT_0 && dwErr != WAIT_ABANDONED); +} +/* +** Release a lock acquired by winceMutexAcquire() */ -#if SQLITE_OS_WINCE==0 - }else{ - attr = GetFileAttributesA((char*)zConverted); -#endif +#define winceMutexRelease(h) ReleaseMutex(h) + +/* +** Create the mutex and shared memory used for locking in the file +** descriptor pFile +*/ +static BOOL winceCreateLock(const char *zFilename, winFile *pFile){ + LPWSTR zTok; + LPWSTR zName; + BOOL bInit = TRUE; + + zName = utf8ToUnicode(zFilename); + if( zName==0 ){ + /* out of memory */ + return FALSE; } - free(zConverted); - switch( flags ){ - case SQLITE_ACCESS_READ: - case SQLITE_ACCESS_EXISTS: - rc = attr!=INVALID_FILE_ATTRIBUTES; - break; - case SQLITE_ACCESS_READWRITE: - rc = (attr & FILE_ATTRIBUTE_READONLY)==0; - break; - default: - assert(!"Invalid flags argument"); + + /* Initialize the local lockdata */ + memset(&pFile->local, 0, sizeof(pFile->local)); + + /* Replace the backslashes from the filename and lowercase it + ** to derive a mutex name. */ + zTok = osCharLowerW(zName); + for (;*zTok;zTok++){ + if (*zTok == '\\') *zTok = '_'; } - *pResOut = rc; - return SQLITE_OK; -} + /* Create/open the named mutex */ + pFile->hMutex = osCreateMutexW(NULL, FALSE, zName); + if (!pFile->hMutex){ + pFile->lastErrno = osGetLastError(); + winLogError(SQLITE_ERROR, pFile->lastErrno, "winceCreateLock1", zFilename); + sqlite3_free(zName); + return FALSE; + } -/* -** Turn a relative pathname into a full pathname. Write the full -** pathname into zOut[]. zOut[] will be at least pVfs->mxPathname -** bytes in size. -*/ -static int winFullPathname( - sqlite3_vfs *pVfs, /* Pointer to vfs object */ - const char *zRelative, /* Possibly relative input path */ - int nFull, /* Size of output buffer in bytes */ - char *zFull /* Output buffer */ -){ + /* Acquire the mutex before continuing */ + winceMutexAcquire(pFile->hMutex); -#if defined(__CYGWIN__) - UNUSED_PARAMETER(nFull); - cygwin_conv_to_full_win32_path(zRelative, zFull); - return SQLITE_OK; -#endif + /* Since the names of named mutexes, semaphores, file mappings etc are + ** case-sensitive, take advantage of that by uppercasing the mutex name + ** and using that as the shared filemapping name. + */ + osCharUpperW(zName); + pFile->hShared = osCreateFileMappingW(INVALID_HANDLE_VALUE, NULL, + PAGE_READWRITE, 0, sizeof(winceLock), + zName); -#if SQLITE_OS_WINCE - UNUSED_PARAMETER(nFull); - /* WinCE has no concept of a relative pathname, or so I am told. */ - sqlite3_snprintf(pVfs->mxPathname, zFull, "%s", zRelative); - return SQLITE_OK; -#endif + /* Set a flag that indicates we're the first to create the memory so it + ** must be zero-initialized */ + if (osGetLastError() == ERROR_ALREADY_EXISTS){ + bInit = FALSE; + } -#if !SQLITE_OS_WINCE && !defined(__CYGWIN__) - int nByte; - void *zConverted; - char *zOut; - UNUSED_PARAMETER(nFull); - zConverted = convertUtf8Filename(zRelative); - if( isNT() ){ - WCHAR *zTemp; - nByte = GetFullPathNameW((WCHAR*)zConverted, 0, 0, 0) + 3; - zTemp = malloc( nByte*sizeof(zTemp[0]) ); - if( zTemp==0 ){ - free(zConverted); - return SQLITE_NOMEM; - } - GetFullPathNameW((WCHAR*)zConverted, nByte, zTemp, 0); - free(zConverted); - zOut = unicodeToUtf8(zTemp); - free(zTemp); -/* isNT() is 1 if SQLITE_OS_WINCE==1, so this else is never executed. -** Since the ASCII version of these Windows API do not exist for WINCE, -** it's important to not reference them for WINCE builds. -*/ -#if SQLITE_OS_WINCE==0 - }else{ - char *zTemp; - nByte = GetFullPathNameA((char*)zConverted, 0, 0, 0) + 3; - zTemp = malloc( nByte*sizeof(zTemp[0]) ); - if( zTemp==0 ){ - free(zConverted); - return SQLITE_NOMEM; + sqlite3_free(zName); + + /* If we succeeded in making the shared memory handle, map it. */ + if (pFile->hShared){ + pFile->shared = (winceLock*)osMapViewOfFile(pFile->hShared, + FILE_MAP_READ|FILE_MAP_WRITE, 0, 0, sizeof(winceLock)); + /* If mapping failed, close the shared memory handle and erase it */ + if (!pFile->shared){ + pFile->lastErrno = osGetLastError(); + winLogError(SQLITE_ERROR, pFile->lastErrno, + "winceCreateLock2", zFilename); + osCloseHandle(pFile->hShared); + pFile->hShared = NULL; } - GetFullPathNameA((char*)zConverted, nByte, zTemp, 0); - free(zConverted); - zOut = sqlite3_win32_mbcs_to_utf8(zTemp); - free(zTemp); -#endif } - if( zOut ){ - sqlite3_snprintf(pVfs->mxPathname, zFull, "%s", zOut); - free(zOut); - return SQLITE_OK; - }else{ - return SQLITE_NOMEM; + + /* If shared memory could not be created, then close the mutex and fail */ + if (pFile->hShared == NULL){ + winceMutexRelease(pFile->hMutex); + osCloseHandle(pFile->hMutex); + pFile->hMutex = NULL; + return FALSE; } -#endif + + /* Initialize the shared memory if we're supposed to */ + if (bInit) { + memset(pFile->shared, 0, sizeof(winceLock)); + } + + winceMutexRelease(pFile->hMutex); + return TRUE; } /* -** Get the sector size of the device used to store -** file. +** Destroy the part of winFile that deals with wince locks */ -static int getSectorSize( - sqlite3_vfs *pVfs, - const char *zRelative /* UTF-8 file name */ -){ - DWORD bytesPerSector = SQLITE_DEFAULT_SECTOR_SIZE; - char zFullpath[MAX_PATH+1]; - int rc; - DWORD dwRet = 0, dwDummy; +static void winceDestroyLock(winFile *pFile){ + if (pFile->hMutex){ + /* Acquire the mutex */ + winceMutexAcquire(pFile->hMutex); - /* - ** We need to get the full path name of the file - ** to get the drive letter to look up the sector - ** size. - */ - rc = winFullPathname(pVfs, zRelative, MAX_PATH, zFullpath); - if( rc == SQLITE_OK ) - { - void *zConverted = convertUtf8Filename(zFullpath); - if( zConverted ){ - if( isNT() ){ - /* trim path to just drive reference */ - WCHAR *p = zConverted; - for(;*p;p++){ - if( *p == '\\' ){ - *p = '\0'; - break; - } - } - dwRet = GetDiskFreeSpaceW((WCHAR*)zConverted, - &dwDummy, - &bytesPerSector, - &dwDummy, - &dwDummy); -#if SQLITE_OS_WINCE==0 - }else{ - /* trim path to just drive reference */ - CHAR *p = (CHAR *)zConverted; - for(;*p;p++){ - if( *p == '\\' ){ - *p = '\0'; - break; - } - } - dwRet = GetDiskFreeSpaceA((CHAR*)zConverted, - &dwDummy, - &bytesPerSector, - &dwDummy, - &dwDummy); -#endif - } - free(zConverted); + /* The following blocks should probably assert in debug mode, but they + are to cleanup in case any locks remained open */ + if (pFile->local.nReaders){ + pFile->shared->nReaders --; } - if( !dwRet ){ - bytesPerSector = SQLITE_DEFAULT_SECTOR_SIZE; + if (pFile->local.bReserved){ + pFile->shared->bReserved = FALSE; } + if (pFile->local.bPending){ + pFile->shared->bPending = FALSE; + } + if (pFile->local.bExclusive){ + pFile->shared->bExclusive = FALSE; + } + + /* De-reference and close our copy of the shared memory handle */ + osUnmapViewOfFile(pFile->shared); + osCloseHandle(pFile->hShared); + + /* Done with the mutex */ + winceMutexRelease(pFile->hMutex); + osCloseHandle(pFile->hMutex); + pFile->hMutex = NULL; } - return (int) bytesPerSector; } -#ifndef SQLITE_OMIT_LOAD_EXTENSION -/* -** Interfaces for opening a shared library, finding entry points -** within the shared library, and closing the shared library. +/* +** An implementation of the LockFile() API of Windows for CE */ +static BOOL winceLockFile( + LPHANDLE phFile, + DWORD dwFileOffsetLow, + DWORD dwFileOffsetHigh, + DWORD nNumberOfBytesToLockLow, + DWORD nNumberOfBytesToLockHigh +){ + winFile *pFile = HANDLE_TO_WINFILE(phFile); + BOOL bReturn = FALSE; + + UNUSED_PARAMETER(dwFileOffsetHigh); + UNUSED_PARAMETER(nNumberOfBytesToLockHigh); + + if (!pFile->hMutex) return TRUE; + winceMutexAcquire(pFile->hMutex); + + /* Wanting an exclusive lock? */ + if (dwFileOffsetLow == (DWORD)SHARED_FIRST + && nNumberOfBytesToLockLow == (DWORD)SHARED_SIZE){ + if (pFile->shared->nReaders == 0 && pFile->shared->bExclusive == 0){ + pFile->shared->bExclusive = TRUE; + pFile->local.bExclusive = TRUE; + bReturn = TRUE; + } + } + + /* Want a read-only lock? */ + else if (dwFileOffsetLow == (DWORD)SHARED_FIRST && + nNumberOfBytesToLockLow == 1){ + if (pFile->shared->bExclusive == 0){ + pFile->local.nReaders ++; + if (pFile->local.nReaders == 1){ + pFile->shared->nReaders ++; + } + bReturn = TRUE; + } + } + + /* Want a pending lock? */ + else if (dwFileOffsetLow == (DWORD)PENDING_BYTE && nNumberOfBytesToLockLow == 1){ + /* If no pending lock has been acquired, then acquire it */ + if (pFile->shared->bPending == 0) { + pFile->shared->bPending = TRUE; + pFile->local.bPending = TRUE; + bReturn = TRUE; + } + } + + /* Want a reserved lock? */ + else if (dwFileOffsetLow == (DWORD)RESERVED_BYTE && nNumberOfBytesToLockLow == 1){ + if (pFile->shared->bReserved == 0) { + pFile->shared->bReserved = TRUE; + pFile->local.bReserved = TRUE; + bReturn = TRUE; + } + } + + winceMutexRelease(pFile->hMutex); + return bReturn; +} + /* -** Interfaces for opening a shared library, finding entry points -** within the shared library, and closing the shared library. +** An implementation of the UnlockFile API of Windows for CE */ -static void *winDlOpen(sqlite3_vfs *pVfs, const char *zFilename){ - HANDLE h; - void *zConverted = convertUtf8Filename(zFilename); - UNUSED_PARAMETER(pVfs); - if( zConverted==0 ){ - return 0; +static BOOL winceUnlockFile( + LPHANDLE phFile, + DWORD dwFileOffsetLow, + DWORD dwFileOffsetHigh, + DWORD nNumberOfBytesToUnlockLow, + DWORD nNumberOfBytesToUnlockHigh +){ + winFile *pFile = HANDLE_TO_WINFILE(phFile); + BOOL bReturn = FALSE; + + UNUSED_PARAMETER(dwFileOffsetHigh); + UNUSED_PARAMETER(nNumberOfBytesToUnlockHigh); + + if (!pFile->hMutex) return TRUE; + winceMutexAcquire(pFile->hMutex); + + /* Releasing a reader lock or an exclusive lock */ + if (dwFileOffsetLow == (DWORD)SHARED_FIRST){ + /* Did we have an exclusive lock? */ + if (pFile->local.bExclusive){ + assert(nNumberOfBytesToUnlockLow == (DWORD)SHARED_SIZE); + pFile->local.bExclusive = FALSE; + pFile->shared->bExclusive = FALSE; + bReturn = TRUE; + } + + /* Did we just have a reader lock? */ + else if (pFile->local.nReaders){ + assert(nNumberOfBytesToUnlockLow == (DWORD)SHARED_SIZE || nNumberOfBytesToUnlockLow == 1); + pFile->local.nReaders --; + if (pFile->local.nReaders == 0) + { + pFile->shared->nReaders --; + } + bReturn = TRUE; + } } - if( isNT() ){ - h = LoadLibraryW((WCHAR*)zConverted); -/* isNT() is 1 if SQLITE_OS_WINCE==1, so this else is never executed. -** Since the ASCII version of these Windows API do not exist for WINCE, -** it's important to not reference them for WINCE builds. -*/ -#if SQLITE_OS_WINCE==0 - }else{ - h = LoadLibraryA((char*)zConverted); -#endif + + /* Releasing a pending lock */ + else if (dwFileOffsetLow == (DWORD)PENDING_BYTE && nNumberOfBytesToUnlockLow == 1){ + if (pFile->local.bPending){ + pFile->local.bPending = FALSE; + pFile->shared->bPending = FALSE; + bReturn = TRUE; + } } - free(zConverted); - return (void*)h; -} -static void winDlError(sqlite3_vfs *pVfs, int nBuf, char *zBufOut){ - UNUSED_PARAMETER(pVfs); - getLastErrorMsg(nBuf, zBufOut); + /* Releasing a reserved lock */ + else if (dwFileOffsetLow == (DWORD)RESERVED_BYTE && nNumberOfBytesToUnlockLow == 1){ + if (pFile->local.bReserved) { + pFile->local.bReserved = FALSE; + pFile->shared->bReserved = FALSE; + bReturn = TRUE; + } + } + + winceMutexRelease(pFile->hMutex); + return bReturn; } -void (*winDlSym(sqlite3_vfs *pVfs, void *pHandle, const char *zSymbol))(void){ - UNUSED_PARAMETER(pVfs); +/* +** End of the special code for wince +*****************************************************************************/ +#endif /* SQLITE_OS_WINCE */ + +/* +** Lock a file region. +*/ +static BOOL winLockFile( + LPHANDLE phFile, + DWORD flags, + DWORD offsetLow, + DWORD offsetHigh, + DWORD numBytesLow, + DWORD numBytesHigh +){ #if SQLITE_OS_WINCE - /* The GetProcAddressA() routine is only available on wince. */ - return (void(*)(void))GetProcAddressA((HANDLE)pHandle, zSymbol); + /* + ** NOTE: Windows CE is handled differently here due its lack of the Win32 + ** API LockFile. + */ + return winceLockFile(phFile, offsetLow, offsetHigh, + numBytesLow, numBytesHigh); #else - /* All other windows platforms expect GetProcAddress() to take - ** an Ansi string regardless of the _UNICODE setting */ - return (void(*)(void))GetProcAddress((HANDLE)pHandle, zSymbol); + if( isNT() ){ + OVERLAPPED ovlp; + memset(&ovlp, 0, sizeof(OVERLAPPED)); + ovlp.Offset = offsetLow; + ovlp.OffsetHigh = offsetHigh; + return osLockFileEx(*phFile, flags, 0, numBytesLow, numBytesHigh, &ovlp); + }else{ + return osLockFile(*phFile, offsetLow, offsetHigh, numBytesLow, + numBytesHigh); + } #endif } -void winDlClose(sqlite3_vfs *pVfs, void *pHandle){ - UNUSED_PARAMETER(pVfs); - FreeLibrary((HANDLE)pHandle); -} -#else /* if SQLITE_OMIT_LOAD_EXTENSION is defined: */ - #define winDlOpen 0 - #define winDlError 0 - #define winDlSym 0 - #define winDlClose 0 -#endif - /* -** Write up to nBuf bytes of randomness into zBuf. -*/ -static int winRandomness(sqlite3_vfs *pVfs, int nBuf, char *zBuf){ - int n = 0; - UNUSED_PARAMETER(pVfs); -#if defined(SQLITE_TEST) - n = nBuf; - memset(zBuf, 0, nBuf); +** Unlock a file region. + */ +static BOOL winUnlockFile( + LPHANDLE phFile, + DWORD offsetLow, + DWORD offsetHigh, + DWORD numBytesLow, + DWORD numBytesHigh +){ +#if SQLITE_OS_WINCE + /* + ** NOTE: Windows CE is handled differently here due its lack of the Win32 + ** API UnlockFile. + */ + return winceUnlockFile(phFile, offsetLow, offsetHigh, + numBytesLow, numBytesHigh); #else - if( sizeof(SYSTEMTIME)<=nBuf-n ){ - SYSTEMTIME x; - GetSystemTime(&x); - memcpy(&zBuf[n], &x, sizeof(x)); - n += sizeof(x); - } - if( sizeof(DWORD)<=nBuf-n ){ - DWORD pid = GetCurrentProcessId(); - memcpy(&zBuf[n], &pid, sizeof(pid)); - n += sizeof(pid); - } - if( sizeof(DWORD)<=nBuf-n ){ - DWORD cnt = GetTickCount(); - memcpy(&zBuf[n], &cnt, sizeof(cnt)); - n += sizeof(cnt); - } - if( sizeof(LARGE_INTEGER)<=nBuf-n ){ - LARGE_INTEGER i; - QueryPerformanceCounter(&i); - memcpy(&zBuf[n], &i, sizeof(i)); - n += sizeof(i); + if( isNT() ){ + OVERLAPPED ovlp; + memset(&ovlp, 0, sizeof(OVERLAPPED)); + ovlp.Offset = offsetLow; + ovlp.OffsetHigh = offsetHigh; + return osUnlockFileEx(*phFile, 0, numBytesLow, numBytesHigh, &ovlp); + }else{ + return osUnlockFile(*phFile, offsetLow, offsetHigh, numBytesLow, + numBytesHigh); } #endif - return n; } +/***************************************************************************** +** The next group of routines implement the I/O methods specified +** by the sqlite3_io_methods object. +******************************************************************************/ /* -** Sleep for a little while. Return the amount of time slept. -*/ -static int winSleep(sqlite3_vfs *pVfs, int microsec){ - Sleep((microsec+999)/1000); - UNUSED_PARAMETER(pVfs); - return ((microsec+999)/1000)*1000; -} - -/* -** The following variable, if set to a non-zero value, becomes the result -** returned from sqlite3OsCurrentTime(). This is used for testing. +** Some Microsoft compilers lack this definition. */ -#ifdef SQLITE_TEST -SQLITE_API int sqlite3_current_time = 0; +#ifndef INVALID_SET_FILE_POINTER +# define INVALID_SET_FILE_POINTER ((DWORD)-1) #endif /* -** Find the current time (in Universal Coordinated Time). Write the -** current time and date as a Julian Day number into *prNow and -** return 0. Return 1 if the time and date cannot be found. +** Move the current position of the file handle passed as the first +** argument to offset iOffset within the file. If successful, return 0. +** Otherwise, set pFile->lastErrno and return non-zero. */ -int winCurrentTime(sqlite3_vfs *pVfs, double *prNow){ - FILETIME ft; - /* FILETIME structure is a 64-bit value representing the number of - 100-nanosecond intervals since January 1, 1601 (= JD 2305813.5). - */ - sqlite3_int64 timeW; /* Whole days */ - sqlite3_int64 timeF; /* Fractional Days */ +static int seekWinFile(winFile *pFile, sqlite3_int64 iOffset){ +#if !SQLITE_OS_WINRT + LONG upperBits; /* Most sig. 32 bits of new offset */ + LONG lowerBits; /* Least sig. 32 bits of new offset */ + DWORD dwRet; /* Value returned by SetFilePointer() */ + DWORD lastErrno; /* Value returned by GetLastError() */ - /* Number of 100-nanosecond intervals in a single day */ - static const sqlite3_int64 ntuPerDay = - 10000000*(sqlite3_int64)86400; + upperBits = (LONG)((iOffset>>32) & 0x7fffffff); + lowerBits = (LONG)(iOffset & 0xffffffff); - /* Number of 100-nanosecond intervals in half of a day */ - static const sqlite3_int64 ntuPerHalfDay = - 10000000*(sqlite3_int64)43200; - - /* 2^32 - to avoid use of LL and warnings in gcc */ - static const sqlite3_int64 max32BitValue = - (sqlite3_int64)2000000000 + (sqlite3_int64)2000000000 + (sqlite3_int64)294967296; + /* API oddity: If successful, SetFilePointer() returns a dword + ** containing the lower 32-bits of the new file-offset. Or, if it fails, + ** it returns INVALID_SET_FILE_POINTER. However according to MSDN, + ** INVALID_SET_FILE_POINTER may also be a valid new offset. So to determine + ** whether an error has actually occured, it is also necessary to call + ** GetLastError(). + */ + dwRet = osSetFilePointer(pFile->h, lowerBits, &upperBits, FILE_BEGIN); -#if SQLITE_OS_WINCE - SYSTEMTIME time; - GetSystemTime(&time); - /* if SystemTimeToFileTime() fails, it returns zero. */ - if (!SystemTimeToFileTime(&time,&ft)){ + if( (dwRet==INVALID_SET_FILE_POINTER + && ((lastErrno = osGetLastError())!=NO_ERROR)) ){ + pFile->lastErrno = lastErrno; + winLogError(SQLITE_IOERR_SEEK, pFile->lastErrno, + "seekWinFile", pFile->zPath); return 1; } + + return 0; #else - GetSystemTimeAsFileTime( &ft ); -#endif - UNUSED_PARAMETER(pVfs); - timeW = (((sqlite3_int64)ft.dwHighDateTime)*max32BitValue) + (sqlite3_int64)ft.dwLowDateTime; - timeF = timeW % ntuPerDay; /* fractional days (100-nanoseconds) */ - timeW = timeW / ntuPerDay; /* whole days */ - timeW = timeW + 2305813; /* add whole days (from 2305813.5) */ - timeF = timeF + ntuPerHalfDay; /* add half a day (from 2305813.5) */ - timeW = timeW + (timeF/ntuPerDay); /* add whole day if half day made one */ - timeF = timeF % ntuPerDay; /* compute new fractional days */ - *prNow = (double)timeW + ((double)timeF / (double)ntuPerDay); -#ifdef SQLITE_TEST - if( sqlite3_current_time ){ - *prNow = ((double)sqlite3_current_time + (double)43200) / (double)86400 + (double)2440587; + /* + ** Same as above, except that this implementation works for WinRT. + */ + + LARGE_INTEGER x; /* The new offset */ + BOOL bRet; /* Value returned by SetFilePointerEx() */ + + x.QuadPart = iOffset; + bRet = osSetFilePointerEx(pFile->h, x, 0, FILE_BEGIN); + + if(!bRet){ + pFile->lastErrno = osGetLastError(); + winLogError(SQLITE_IOERR_SEEK, pFile->lastErrno, + "seekWinFile", pFile->zPath); + return 1; } -#endif + return 0; +#endif } /* -** The idea is that this function works like a combination of -** GetLastError() and FormatMessage() on windows (or errno and -** strerror_r() on unix). After an error is returned by an OS -** function, SQLite calls this function with zBuf pointing to -** a buffer of nBuf bytes. The OS layer should populate the -** buffer with a nul-terminated UTF-8 encoded error message -** describing the last IO error to have occurred within the calling -** thread. -** -** If the error message is too large for the supplied buffer, -** it should be truncated. The return value of xGetLastError -** is zero if the error message fits in the buffer, or non-zero -** otherwise (if the message was truncated). If non-zero is returned, -** then it is not necessary to include the nul-terminator character -** in the output buffer. -** -** Not supplying an error message will have no adverse effect -** on SQLite. It is fine to have an implementation that never -** returns an error message: -** -** int xGetLastError(sqlite3_vfs *pVfs, int nBuf, char *zBuf){ -** assert(zBuf[0]=='\0'); -** return 0; -** } +** Close a file. ** -** However if an error message is supplied, it will be incorporated -** by sqlite into the error message available to the user using -** sqlite3_errmsg(), possibly making IO errors easier to debug. +** It is reported that an attempt to close a handle might sometimes +** fail. This is a very unreasonable result, but Windows is notorious +** for being unreasonable so I do not doubt that it might happen. If +** the close fails, we pause for 100 milliseconds and try again. As +** many as MX_CLOSE_ATTEMPT attempts to close the handle are made before +** giving up and returning an error. */ -static int winGetLastError(sqlite3_vfs *pVfs, int nBuf, char *zBuf){ - UNUSED_PARAMETER(pVfs); - return getLastErrorMsg(nBuf, zBuf); +#define MX_CLOSE_ATTEMPT 3 +static int winClose(sqlite3_file *id){ + int rc, cnt = 0; + winFile *pFile = (winFile*)id; + + assert( id!=0 ); + assert( pFile->pShm==0 ); + OSTRACE(("CLOSE %d\n", pFile->h)); + do{ + rc = osCloseHandle(pFile->h); + /* SimulateIOError( rc=0; cnt=MX_CLOSE_ATTEMPT; ); */ + }while( rc==0 && ++cnt < MX_CLOSE_ATTEMPT && (sqlite3_win32_sleep(100), 1) ); +#if SQLITE_OS_WINCE +#define WINCE_DELETION_ATTEMPTS 3 + winceDestroyLock(pFile); + if( pFile->zDeleteOnClose ){ + int cnt = 0; + while( + osDeleteFileW(pFile->zDeleteOnClose)==0 + && osGetFileAttributesW(pFile->zDeleteOnClose)!=0xffffffff + && cnt++ < WINCE_DELETION_ATTEMPTS + ){ + sqlite3_win32_sleep(100); /* Wait a little before trying again */ + } + sqlite3_free(pFile->zDeleteOnClose); + } +#endif + OSTRACE(("CLOSE %d %s\n", pFile->h, rc ? "ok" : "failed")); + if( rc ){ + pFile->h = NULL; + } + OpenCounter(-1); + return rc ? SQLITE_OK + : winLogError(SQLITE_IOERR_CLOSE, osGetLastError(), + "winClose", pFile->zPath); } /* -** Initialize and deinitialize the operating system interface. +** Read data from a file into a buffer. Return SQLITE_OK if all +** bytes were read successfully and SQLITE_IOERR if anything goes +** wrong. */ -SQLITE_API int sqlite3_os_init(void){ - static sqlite3_vfs winVfs = { - 1, /* iVersion */ - sizeof(winFile), /* szOsFile */ - MAX_PATH, /* mxPathname */ - 0, /* pNext */ - "win32", /* zName */ - 0, /* pAppData */ - - winOpen, /* xOpen */ - winDelete, /* xDelete */ - winAccess, /* xAccess */ - winFullPathname, /* xFullPathname */ - winDlOpen, /* xDlOpen */ - winDlError, /* xDlError */ - winDlSym, /* xDlSym */ - winDlClose, /* xDlClose */ - winRandomness, /* xRandomness */ - winSleep, /* xSleep */ - winCurrentTime, /* xCurrentTime */ - winGetLastError /* xGetLastError */ - }; - sqlite3_vfs_register(&winVfs, 1); - return SQLITE_OK; -} -SQLITE_API int sqlite3_os_end(void){ +static int winRead( + sqlite3_file *id, /* File to read from */ + void *pBuf, /* Write content into this buffer */ + int amt, /* Number of bytes to read */ + sqlite3_int64 offset /* Begin reading at this offset */ +){ +#if !SQLITE_OS_WINCE + OVERLAPPED overlapped; /* The offset for ReadFile. */ +#endif + winFile *pFile = (winFile*)id; /* file handle */ + DWORD nRead; /* Number of bytes actually read from file */ + int nRetry = 0; /* Number of retrys */ + + assert( id!=0 ); + SimulateIOError(return SQLITE_IOERR_READ); + OSTRACE(("READ %d lock=%d\n", pFile->h, pFile->locktype)); + +#if SQLITE_OS_WINCE + if( seekWinFile(pFile, offset) ){ + return SQLITE_FULL; + } + while( !osReadFile(pFile->h, pBuf, amt, &nRead, 0) ){ +#else + memset(&overlapped, 0, sizeof(OVERLAPPED)); + overlapped.Offset = (LONG)(offset & 0xffffffff); + overlapped.OffsetHigh = (LONG)((offset>>32) & 0x7fffffff); + while( !osReadFile(pFile->h, pBuf, amt, &nRead, &overlapped) && + osGetLastError()!=ERROR_HANDLE_EOF ){ +#endif + DWORD lastErrno; + if( retryIoerr(&nRetry, &lastErrno) ) continue; + pFile->lastErrno = lastErrno; + return winLogError(SQLITE_IOERR_READ, pFile->lastErrno, + "winRead", pFile->zPath); + } + logIoerr(nRetry); + if( nRead<(DWORD)amt ){ + /* Unread parts of the buffer must be zero-filled */ + memset(&((char*)pBuf)[nRead], 0, amt-nRead); + return SQLITE_IOERR_SHORT_READ; + } + return SQLITE_OK; } -#endif /* SQLITE_OS_WIN */ - -/************** End of os_win.c **********************************************/ -/************** Begin file bitvec.c ******************************************/ /* -** 2008 February 16 -** -** The author disclaims copyright to this source code. In place of -** a legal notice, here is a blessing: -** -** May you do good and not evil. -** May you find forgiveness for yourself and forgive others. -** May you share freely, never taking more than you give. -** -************************************************************************* -** This file implements an object that represents a fixed-length -** bitmap. Bits are numbered starting with 1. -** -** A bitmap is used to record which pages of a database file have been -** journalled during a transaction, or which pages have the "dont-write" -** property. Usually only a few pages are meet either condition. -** So the bitmap is usually sparse and has low cardinality. -** But sometimes (for example when during a DROP of a large table) most -** or all of the pages in a database can get journalled. In those cases, -** the bitmap becomes dense with high cardinality. The algorithm needs -** to handle both cases well. -** -** The size of the bitmap is fixed when the object is created. -** -** All bits are clear when the bitmap is created. Individual bits -** may be set or cleared one at a time. -** -** Test operations are about 100 times more common that set operations. -** Clear operations are exceedingly rare. There are usually between -** 5 and 500 set operations per Bitvec object, though the number of sets can -** sometimes grow into tens of thousands or larger. The size of the -** Bitvec object is the number of pages in the database file at the -** start of a transaction, and is thus usually less than a few thousand, -** but can be as large as 2 billion for a really big database. -** -** @(#) $Id: bitvec.c,v 1.15 2009/06/02 21:31:39 drh Exp $ +** Write data from a buffer into a file. Return SQLITE_OK on success +** or some other error code on failure. */ +static int winWrite( + sqlite3_file *id, /* File to write into */ + const void *pBuf, /* The bytes to be written */ + int amt, /* Number of bytes to write */ + sqlite3_int64 offset /* Offset into the file to begin writing at */ +){ + int rc = 0; /* True if error has occured, else false */ + winFile *pFile = (winFile*)id; /* File handle */ + int nRetry = 0; /* Number of retries */ -/* Size of the Bitvec structure in bytes. */ -#define BITVEC_SZ 512 + assert( amt>0 ); + assert( pFile ); + SimulateIOError(return SQLITE_IOERR_WRITE); + SimulateDiskfullError(return SQLITE_FULL); -/* Round the union size down to the nearest pointer boundary, since that's how -** it will be aligned within the Bitvec struct. */ -#define BITVEC_USIZE (((BITVEC_SZ-(3*sizeof(u32)))/sizeof(Bitvec*))*sizeof(Bitvec*)) + OSTRACE(("WRITE %d lock=%d\n", pFile->h, pFile->locktype)); -/* Type of the array "element" for the bitmap representation. -** Should be a power of 2, and ideally, evenly divide into BITVEC_USIZE. -** Setting this to the "natural word" size of your CPU may improve -** performance. */ -#define BITVEC_TELEM u8 -/* Size, in bits, of the bitmap element. */ -#define BITVEC_SZELEM 8 -/* Number of elements in a bitmap array. */ -#define BITVEC_NELEM (BITVEC_USIZE/sizeof(BITVEC_TELEM)) -/* Number of bits in the bitmap array. */ -#define BITVEC_NBIT (BITVEC_NELEM*BITVEC_SZELEM) +#if SQLITE_OS_WINCE + rc = seekWinFile(pFile, offset); + if( rc==0 ){ +#else + { +#endif +#if !SQLITE_OS_WINCE + OVERLAPPED overlapped; /* The offset for WriteFile. */ +#endif + u8 *aRem = (u8 *)pBuf; /* Data yet to be written */ + int nRem = amt; /* Number of bytes yet to be written */ + DWORD nWrite; /* Bytes written by each WriteFile() call */ + DWORD lastErrno = NO_ERROR; /* Value returned by GetLastError() */ -/* Number of u32 values in hash table. */ -#define BITVEC_NINT (BITVEC_USIZE/sizeof(u32)) -/* Maximum number of entries in hash table before -** sub-dividing and re-hashing. */ -#define BITVEC_MXHASH (BITVEC_NINT/2) -/* Hashing function for the aHash representation. -** Empirical testing showed that the *37 multiplier -** (an arbitrary prime)in the hash function provided -** no fewer collisions than the no-op *1. */ -#define BITVEC_HASH(X) (((X)*1)%BITVEC_NINT) +#if !SQLITE_OS_WINCE + memset(&overlapped, 0, sizeof(OVERLAPPED)); + overlapped.Offset = (LONG)(offset & 0xffffffff); + overlapped.OffsetHigh = (LONG)((offset>>32) & 0x7fffffff); +#endif -#define BITVEC_NPTR (BITVEC_USIZE/sizeof(Bitvec *)) + while( nRem>0 ){ +#if SQLITE_OS_WINCE + if( !osWriteFile(pFile->h, aRem, nRem, &nWrite, 0) ){ +#else + if( !osWriteFile(pFile->h, aRem, nRem, &nWrite, &overlapped) ){ +#endif + if( retryIoerr(&nRetry, &lastErrno) ) continue; + break; + } + if( nWrite<=0 ){ + lastErrno = osGetLastError(); + break; + } +#if !SQLITE_OS_WINCE + offset += nWrite; + overlapped.Offset = (LONG)(offset & 0xffffffff); + overlapped.OffsetHigh = (LONG)((offset>>32) & 0x7fffffff); +#endif + aRem += nWrite; + nRem -= nWrite; + } + if( nRem>0 ){ + pFile->lastErrno = lastErrno; + rc = 1; + } + } + if( rc ){ + if( ( pFile->lastErrno==ERROR_HANDLE_DISK_FULL ) + || ( pFile->lastErrno==ERROR_DISK_FULL )){ + return SQLITE_FULL; + } + return winLogError(SQLITE_IOERR_WRITE, pFile->lastErrno, + "winWrite", pFile->zPath); + }else{ + logIoerr(nRetry); + } + return SQLITE_OK; +} /* -** A bitmap is an instance of the following structure. -** -** This bitmap records the existance of zero or more bits -** with values between 1 and iSize, inclusive. -** -** There are three possible representations of the bitmap. -** If iSize<=BITVEC_NBIT, then Bitvec.u.aBitmap[] is a straight -** bitmap. The least significant bit is bit 1. -** -** If iSize>BITVEC_NBIT and iDivisor==0 then Bitvec.u.aHash[] is -** a hash table that will hold up to BITVEC_MXHASH distinct values. -** -** Otherwise, the value i is redirected into one of BITVEC_NPTR -** sub-bitmaps pointed to by Bitvec.u.apSub[]. Each subbitmap -** handles up to iDivisor separate values of i. apSub[0] holds -** values between 1 and iDivisor. apSub[1] holds values between -** iDivisor+1 and 2*iDivisor. apSub[N] holds values between -** N*iDivisor+1 and (N+1)*iDivisor. Each subbitmap is normalized -** to hold deal with values between 1 and iDivisor. +** Truncate an open file to a specified size */ -struct Bitvec { - u32 iSize; /* Maximum bit index. Max iSize is 4,294,967,296. */ - u32 nSet; /* Number of bits that are set - only valid for aHash - ** element. Max is BITVEC_NINT. For BITVEC_SZ of 512, - ** this would be 125. */ - u32 iDivisor; /* Number of bits handled by each apSub[] entry. */ - /* Should >=0 for apSub element. */ - /* Max iDivisor is max(u32) / BITVEC_NPTR + 1. */ - /* For a BITVEC_SZ of 512, this would be 34,359,739. */ - union { - BITVEC_TELEM aBitmap[BITVEC_NELEM]; /* Bitmap representation */ - u32 aHash[BITVEC_NINT]; /* Hash table representation */ - Bitvec *apSub[BITVEC_NPTR]; /* Recursive representation */ - } u; -}; +static int winTruncate(sqlite3_file *id, sqlite3_int64 nByte){ + winFile *pFile = (winFile*)id; /* File handle object */ + int rc = SQLITE_OK; /* Return code for this function */ -/* -** Create a new bitmap object able to handle bits between 0 and iSize, -** inclusive. Return a pointer to the new object. Return NULL if -** malloc fails. -*/ -SQLITE_PRIVATE Bitvec *sqlite3BitvecCreate(u32 iSize){ - Bitvec *p; - assert( sizeof(*p)==BITVEC_SZ ); - p = sqlite3MallocZero( sizeof(*p) ); - if( p ){ - p->iSize = iSize; + assert( pFile ); + + OSTRACE(("TRUNCATE %d %lld\n", pFile->h, nByte)); + SimulateIOError(return SQLITE_IOERR_TRUNCATE); + + /* If the user has configured a chunk-size for this file, truncate the + ** file so that it consists of an integer number of chunks (i.e. the + ** actual file size after the operation may be larger than the requested + ** size). + */ + if( pFile->szChunk>0 ){ + nByte = ((nByte + pFile->szChunk - 1)/pFile->szChunk) * pFile->szChunk; } - return p; + + /* SetEndOfFile() returns non-zero when successful, or zero when it fails. */ + if( seekWinFile(pFile, nByte) ){ + rc = winLogError(SQLITE_IOERR_TRUNCATE, pFile->lastErrno, + "winTruncate1", pFile->zPath); + }else if( 0==osSetEndOfFile(pFile->h) ){ + pFile->lastErrno = osGetLastError(); + rc = winLogError(SQLITE_IOERR_TRUNCATE, pFile->lastErrno, + "winTruncate2", pFile->zPath); + } + + OSTRACE(("TRUNCATE %d %lld %s\n", pFile->h, nByte, rc ? "failed" : "ok")); + return rc; } +#ifdef SQLITE_TEST /* -** Check to see if the i-th bit is set. Return true or false. -** If p is NULL (if the bitmap has not been created) or if -** i is out of range, then return false. +** Count the number of fullsyncs and normal syncs. This is used to test +** that syncs and fullsyncs are occuring at the right times. */ -SQLITE_PRIVATE int sqlite3BitvecTest(Bitvec *p, u32 i){ - if( p==0 ) return 0; - if( i>p->iSize || i==0 ) return 0; - i--; - while( p->iDivisor ){ - u32 bin = i/p->iDivisor; - i = i%p->iDivisor; - p = p->u.apSub[bin]; - if (!p) { - return 0; - } - } - if( p->iSize<=BITVEC_NBIT ){ - return (p->u.aBitmap[i/BITVEC_SZELEM] & (1<<(i&(BITVEC_SZELEM-1))))!=0; - } else{ - u32 h = BITVEC_HASH(i++); - while( p->u.aHash[h] ){ - if( p->u.aHash[h]==i ) return 1; - h++; - if( h>=BITVEC_NINT ) h = 0; - } - return 0; - } -} +SQLITE_API int sqlite3_sync_count = 0; +SQLITE_API int sqlite3_fullsync_count = 0; +#endif /* -** Set the i-th bit. Return 0 on success and an error code if -** anything goes wrong. -** -** This routine might cause sub-bitmaps to be allocated. Failing -** to get the memory needed to hold the sub-bitmap is the only -** that can go wrong with an insert, assuming p and i are valid. -** -** The calling function must ensure that p is a valid Bitvec object -** and that the value for "i" is within range of the Bitvec object. -** Otherwise the behavior is undefined. +** Make sure all writes to a particular file are committed to disk. */ -SQLITE_PRIVATE int sqlite3BitvecSet(Bitvec *p, u32 i){ - u32 h; - assert( p!=0 ); - assert( i>0 ); - assert( i<=p->iSize ); - i--; - while((p->iSize > BITVEC_NBIT) && p->iDivisor) { - u32 bin = i/p->iDivisor; - i = i%p->iDivisor; - if( p->u.apSub[bin]==0 ){ - p->u.apSub[bin] = sqlite3BitvecCreate( p->iDivisor ); - if( p->u.apSub[bin]==0 ) return SQLITE_NOMEM; - } - p = p->u.apSub[bin]; +static int winSync(sqlite3_file *id, int flags){ +#ifndef SQLITE_NO_SYNC + /* + ** Used only when SQLITE_NO_SYNC is not defined. + */ + BOOL rc; +#endif +#if !defined(NDEBUG) || !defined(SQLITE_NO_SYNC) || \ + (defined(SQLITE_TEST) && defined(SQLITE_DEBUG)) + /* + ** Used when SQLITE_NO_SYNC is not defined and by the assert() and/or + ** OSTRACE() macros. + */ + winFile *pFile = (winFile*)id; +#else + UNUSED_PARAMETER(id); +#endif + + assert( pFile ); + /* Check that one of SQLITE_SYNC_NORMAL or FULL was passed */ + assert((flags&0x0F)==SQLITE_SYNC_NORMAL + || (flags&0x0F)==SQLITE_SYNC_FULL + ); + + OSTRACE(("SYNC %d lock=%d\n", pFile->h, pFile->locktype)); + + /* Unix cannot, but some systems may return SQLITE_FULL from here. This + ** line is to test that doing so does not cause any problems. + */ + SimulateDiskfullError( return SQLITE_FULL ); + +#ifndef SQLITE_TEST + UNUSED_PARAMETER(flags); +#else + if( (flags&0x0F)==SQLITE_SYNC_FULL ){ + sqlite3_fullsync_count++; } - if( p->iSize<=BITVEC_NBIT ){ - p->u.aBitmap[i/BITVEC_SZELEM] |= 1 << (i&(BITVEC_SZELEM-1)); + sqlite3_sync_count++; +#endif + + /* If we compiled with the SQLITE_NO_SYNC flag, then syncing is a + ** no-op + */ +#ifdef SQLITE_NO_SYNC + return SQLITE_OK; +#else + rc = osFlushFileBuffers(pFile->h); + SimulateIOError( rc=FALSE ); + if( rc ){ return SQLITE_OK; + }else{ + pFile->lastErrno = osGetLastError(); + return winLogError(SQLITE_IOERR_FSYNC, pFile->lastErrno, + "winSync", pFile->zPath); } - h = BITVEC_HASH(i++); - /* if there wasn't a hash collision, and this doesn't */ - /* completely fill the hash, then just add it without */ - /* worring about sub-dividing and re-hashing. */ - if( !p->u.aHash[h] ){ - if (p->nSet<(BITVEC_NINT-1)) { - goto bitvec_set_end; - } else { - goto bitvec_set_rehash; - } - } - /* there was a collision, check to see if it's already */ - /* in hash, if not, try to find a spot for it */ - do { - if( p->u.aHash[h]==i ) return SQLITE_OK; - h++; - if( h>=BITVEC_NINT ) h = 0; - } while( p->u.aHash[h] ); - /* we didn't find it in the hash. h points to the first */ - /* available free spot. check to see if this is going to */ - /* make our hash too "full". */ -bitvec_set_rehash: - if( p->nSet>=BITVEC_MXHASH ){ - unsigned int j; - int rc; - u32 *aiValues = sqlite3StackAllocRaw(0, sizeof(p->u.aHash)); - if( aiValues==0 ){ - return SQLITE_NOMEM; - }else{ - memcpy(aiValues, p->u.aHash, sizeof(p->u.aHash)); - memset(p->u.apSub, 0, sizeof(p->u.apSub)); - p->iDivisor = (p->iSize + BITVEC_NPTR - 1)/BITVEC_NPTR; - rc = sqlite3BitvecSet(p, i); - for(j=0; jnSet++; - p->u.aHash[h] = i; - return SQLITE_OK; +#endif } /* -** Clear the i-th bit. -** -** pBuf must be a pointer to at least BITVEC_SZ bytes of temporary storage -** that BitvecClear can use to rebuilt its hash table. +** Determine the current size of a file in bytes */ -SQLITE_PRIVATE void sqlite3BitvecClear(Bitvec *p, u32 i, void *pBuf){ - assert( p!=0 ); - assert( i>0 ); - i--; - while( p->iDivisor ){ - u32 bin = i/p->iDivisor; - i = i%p->iDivisor; - p = p->u.apSub[bin]; - if (!p) { - return; +static int winFileSize(sqlite3_file *id, sqlite3_int64 *pSize){ + winFile *pFile = (winFile*)id; + int rc = SQLITE_OK; + + assert( id!=0 ); + SimulateIOError(return SQLITE_IOERR_FSTAT); +#if SQLITE_OS_WINRT + { + FILE_STANDARD_INFO info; + if( osGetFileInformationByHandleEx(pFile->h, FileStandardInfo, + &info, sizeof(info)) ){ + *pSize = info.EndOfFile.QuadPart; + }else{ + pFile->lastErrno = osGetLastError(); + rc = winLogError(SQLITE_IOERR_FSTAT, pFile->lastErrno, + "winFileSize", pFile->zPath); } } - if( p->iSize<=BITVEC_NBIT ){ - p->u.aBitmap[i/BITVEC_SZELEM] &= ~(1 << (i&(BITVEC_SZELEM-1))); - }else{ - unsigned int j; - u32 *aiValues = pBuf; - memcpy(aiValues, p->u.aHash, sizeof(p->u.aHash)); - memset(p->u.aHash, 0, sizeof(p->u.aHash)); - p->nSet = 0; - for(j=0; jnSet++; - while( p->u.aHash[h] ){ - h++; - if( h>=BITVEC_NINT ) h = 0; - } - p->u.aHash[h] = aiValues[j]; - } +#else + { + DWORD upperBits; + DWORD lowerBits; + DWORD lastErrno; + + lowerBits = osGetFileSize(pFile->h, &upperBits); + *pSize = (((sqlite3_int64)upperBits)<<32) + lowerBits; + if( (lowerBits == INVALID_FILE_SIZE) + && ((lastErrno = osGetLastError())!=NO_ERROR) ){ + pFile->lastErrno = lastErrno; + rc = winLogError(SQLITE_IOERR_FSTAT, pFile->lastErrno, + "winFileSize", pFile->zPath); } } +#endif + return rc; } /* -** Destroy a bitmap object. Reclaim all memory used. +** LOCKFILE_FAIL_IMMEDIATELY is undefined on some Windows systems. */ -SQLITE_PRIVATE void sqlite3BitvecDestroy(Bitvec *p){ - if( p==0 ) return; - if( p->iDivisor ){ - unsigned int i; - for(i=0; iu.apSub[i]); - } - } - sqlite3_free(p); -} +#ifndef LOCKFILE_FAIL_IMMEDIATELY +# define LOCKFILE_FAIL_IMMEDIATELY 1 +#endif + +#ifndef LOCKFILE_EXCLUSIVE_LOCK +# define LOCKFILE_EXCLUSIVE_LOCK 2 +#endif /* -** Return the value of the iSize parameter specified when Bitvec *p -** was created. +** Historically, SQLite has used both the LockFile and LockFileEx functions. +** When the LockFile function was used, it was always expected to fail +** immediately if the lock could not be obtained. Also, it always expected to +** obtain an exclusive lock. These flags are used with the LockFileEx function +** and reflect those expectations; therefore, they should not be changed. */ -SQLITE_PRIVATE u32 sqlite3BitvecSize(Bitvec *p){ - return p->iSize; -} +#ifndef SQLITE_LOCKFILE_FLAGS +# define SQLITE_LOCKFILE_FLAGS (LOCKFILE_FAIL_IMMEDIATELY | \ + LOCKFILE_EXCLUSIVE_LOCK) +#endif -#ifndef SQLITE_OMIT_BUILTIN_TEST /* -** Let V[] be an array of unsigned characters sufficient to hold -** up to N bits. Let I be an integer between 0 and N. 0<=I>3] |= (1<<(I&7)) -#define CLEARBIT(V,I) V[I>>3] &= ~(1<<(I&7)) -#define TESTBIT(V,I) (V[I>>3]&(1<<(I&7)))!=0 +#ifndef SQLITE_LOCKFILEEX_FLAGS +# define SQLITE_LOCKFILEEX_FLAGS (LOCKFILE_FAIL_IMMEDIATELY) +#endif /* -** This routine runs an extensive test of the Bitvec code. -** -** The input is an array of integers that acts as a program -** to test the Bitvec. The integers are opcodes followed -** by 0, 1, or 3 operands, depending on the opcode. Another -** opcode follows immediately after the last operand. -** -** There are 6 opcodes numbered from 0 through 5. 0 is the -** "halt" opcode and causes the test to end. -** -** 0 Halt and return the number of errors -** 1 N S X Set N bits beginning with S and incrementing by X -** 2 N S X Clear N bits beginning with S and incrementing by X -** 3 N Set N randomly chosen bits -** 4 N Clear N randomly chosen bits -** 5 N S X Set N bits from S increment X in array only, not in bitvec -** -** The opcodes 1 through 4 perform set and clear operations are performed -** on both a Bitvec object and on a linear array of bits obtained from malloc. -** Opcode 5 works on the linear array only, not on the Bitvec. -** Opcode 5 is used to deliberately induce a fault in order to -** confirm that error detection works. -** -** At the conclusion of the test the linear array is compared -** against the Bitvec object. If there are any differences, -** an error is returned. If they are the same, zero is returned. -** -** If a memory allocation error occurs, return -1. +** Acquire a reader lock. +** Different API routines are called depending on whether or not this +** is Win9x or WinNT. */ -SQLITE_PRIVATE int sqlite3BitvecBuiltinTest(int sz, int *aOp){ - Bitvec *pBitvec = 0; - unsigned char *pV = 0; - int rc = -1; - int i, nx, pc, op; - void *pTmpSpace; - - /* Allocate the Bitvec to be tested and a linear array of - ** bits to act as the reference */ - pBitvec = sqlite3BitvecCreate( sz ); - pV = sqlite3_malloc( (sz+7)/8 + 1 ); - pTmpSpace = sqlite3_malloc(BITVEC_SZ); - if( pBitvec==0 || pV==0 || pTmpSpace==0 ) goto bitvec_end; - memset(pV, 0, (sz+7)/8 + 1); - - /* Run the program */ - pc = 0; - while( (op = aOp[pc])!=0 ){ - switch( op ){ - case 1: - case 2: - case 5: { - nx = 4; - i = aOp[pc+2] - 1; - aOp[pc+2] += aOp[pc+3]; - break; - } - case 3: - case 4: - default: { - nx = 2; - sqlite3_randomness(sizeof(i), &i); - break; - } - } - if( (--aOp[pc+1]) > 0 ) nx = 0; - pc += nx; - i = (i & 0x7fffffff)%sz; - if( (op & 1)!=0 ){ - SETBIT(pV, (i+1)); - if( op!=5 ){ - if( sqlite3BitvecSet(pBitvec, i+1) ) goto bitvec_end; - } - }else{ - CLEARBIT(pV, (i+1)); - sqlite3BitvecClear(pBitvec, i+1, pTmpSpace); - } +static int getReadLock(winFile *pFile){ + int res; + if( isNT() ){ +#if SQLITE_OS_WINCE + /* + ** NOTE: Windows CE is handled differently here due its lack of the Win32 + ** API LockFileEx. + */ + res = winceLockFile(&pFile->h, SHARED_FIRST, 0, 1, 0); +#else + res = winLockFile(&pFile->h, SQLITE_LOCKFILEEX_FLAGS, SHARED_FIRST, 0, + SHARED_SIZE, 0); +#endif } - - /* Test to make sure the linear array exactly matches the - ** Bitvec object. Start with the assumption that they do - ** match (rc==0). Change rc to non-zero if a discrepancy - ** is found. - */ - rc = sqlite3BitvecTest(0,0) + sqlite3BitvecTest(pBitvec, sz+1) - + sqlite3BitvecTest(pBitvec, 0) - + (sqlite3BitvecSize(pBitvec) - sz); - for(i=1; i<=sz; i++){ - if( (TESTBIT(pV,i))!=sqlite3BitvecTest(pBitvec,i) ){ - rc = i; - break; - } +#ifdef SQLITE_WIN32_HAS_ANSI + else{ + int lk; + sqlite3_randomness(sizeof(lk), &lk); + pFile->sharedLockByte = (short)((lk & 0x7fffffff)%(SHARED_SIZE - 1)); + res = winLockFile(&pFile->h, SQLITE_LOCKFILE_FLAGS, + SHARED_FIRST+pFile->sharedLockByte, 0, 1, 0); } +#endif + if( res == 0 ){ + pFile->lastErrno = osGetLastError(); + /* No need to log a failure to lock */ + } + return res; +} - /* Free allocated structure */ -bitvec_end: - sqlite3_free(pTmpSpace); - sqlite3_free(pV); - sqlite3BitvecDestroy(pBitvec); - return rc; +/* +** Undo a readlock +*/ +static int unlockReadLock(winFile *pFile){ + int res; + DWORD lastErrno; + if( isNT() ){ + res = winUnlockFile(&pFile->h, SHARED_FIRST, 0, SHARED_SIZE, 0); + } +#ifdef SQLITE_WIN32_HAS_ANSI + else{ + res = winUnlockFile(&pFile->h, SHARED_FIRST+pFile->sharedLockByte, 0, 1, 0); + } +#endif + if( res==0 && ((lastErrno = osGetLastError())!=ERROR_NOT_LOCKED) ){ + pFile->lastErrno = lastErrno; + winLogError(SQLITE_IOERR_UNLOCK, pFile->lastErrno, + "unlockReadLock", pFile->zPath); + } + return res; } -#endif /* SQLITE_OMIT_BUILTIN_TEST */ -/************** End of bitvec.c **********************************************/ -/************** Begin file pcache.c ******************************************/ /* -** 2008 August 05 +** Lock the file with the lock specified by parameter locktype - one +** of the following: ** -** The author disclaims copyright to this source code. In place of -** a legal notice, here is a blessing: +** (1) SHARED_LOCK +** (2) RESERVED_LOCK +** (3) PENDING_LOCK +** (4) EXCLUSIVE_LOCK ** -** May you do good and not evil. -** May you find forgiveness for yourself and forgive others. -** May you share freely, never taking more than you give. +** Sometimes when requesting one lock state, additional lock states +** are inserted in between. The locking might fail on one of the later +** transitions leaving the lock state different from what it started but +** still short of its goal. The following chart shows the allowed +** transitions and the inserted intermediate states: ** -************************************************************************* -** This file implements that page cache. +** UNLOCKED -> SHARED +** SHARED -> RESERVED +** SHARED -> (PENDING) -> EXCLUSIVE +** RESERVED -> (PENDING) -> EXCLUSIVE +** PENDING -> EXCLUSIVE ** -** @(#) $Id: pcache.c,v 1.44 2009/03/31 01:32:18 drh Exp $ +** This routine will only increase a lock. The winUnlock() routine +** erases all locks at once and returns us immediately to locking level 0. +** It is not possible to lower the locking level one step at a time. You +** must go straight to locking level 0. */ +static int winLock(sqlite3_file *id, int locktype){ + int rc = SQLITE_OK; /* Return code from subroutines */ + int res = 1; /* Result of a Windows lock call */ + int newLocktype; /* Set pFile->locktype to this value before exiting */ + int gotPendingLock = 0;/* True if we acquired a PENDING lock this time */ + winFile *pFile = (winFile*)id; + DWORD lastErrno = NO_ERROR; -/* -** A complete page cache is an instance of this structure. -*/ -struct PCache { - PgHdr *pDirty, *pDirtyTail; /* List of dirty pages in LRU order */ - PgHdr *pSynced; /* Last synced page in dirty page list */ - int nRef; /* Number of referenced pages */ - int nMax; /* Configured cache size */ - int szPage; /* Size of every page in this cache */ - int szExtra; /* Size of extra space for each page */ - int bPurgeable; /* True if pages are on backing store */ - int (*xStress)(void*,PgHdr*); /* Call to try make a page clean */ - void *pStress; /* Argument to xStress */ - sqlite3_pcache *pCache; /* Pluggable cache module */ - PgHdr *pPage1; /* Reference to page 1 */ -}; + assert( id!=0 ); + OSTRACE(("LOCK %d %d was %d(%d)\n", + pFile->h, locktype, pFile->locktype, pFile->sharedLockByte)); -/* -** Some of the assert() macros in this code are too expensive to run -** even during normal debugging. Use them only rarely on long-running -** tests. Enable the expensive asserts using the -** -DSQLITE_ENABLE_EXPENSIVE_ASSERT=1 compile-time option. -*/ -#ifdef SQLITE_ENABLE_EXPENSIVE_ASSERT -# define expensive_assert(X) assert(X) -#else -# define expensive_assert(X) -#endif + /* If there is already a lock of this type or more restrictive on the + ** OsFile, do nothing. Don't use the end_lock: exit path, as + ** sqlite3OsEnterMutex() hasn't been called yet. + */ + if( pFile->locktype>=locktype ){ + return SQLITE_OK; + } -/********************************** Linked List Management ********************/ + /* Make sure the locking sequence is correct + */ + assert( pFile->locktype!=NO_LOCK || locktype==SHARED_LOCK ); + assert( locktype!=PENDING_LOCK ); + assert( locktype!=RESERVED_LOCK || pFile->locktype==SHARED_LOCK ); -#if !defined(NDEBUG) && defined(SQLITE_ENABLE_EXPENSIVE_ASSERT) -/* -** Check that the pCache->pSynced variable is set correctly. If it -** is not, either fail an assert or return zero. Otherwise, return -** non-zero. This is only used in debugging builds, as follows: -** -** expensive_assert( pcacheCheckSynced(pCache) ); -*/ -static int pcacheCheckSynced(PCache *pCache){ - PgHdr *p; - for(p=pCache->pDirtyTail; p!=pCache->pSynced; p=p->pDirtyPrev){ - assert( p->nRef || (p->flags&PGHDR_NEED_SYNC) ); + /* Lock the PENDING_LOCK byte if we need to acquire a PENDING lock or + ** a SHARED lock. If we are acquiring a SHARED lock, the acquisition of + ** the PENDING_LOCK byte is temporary. + */ + newLocktype = pFile->locktype; + if( (pFile->locktype==NO_LOCK) + || ( (locktype==EXCLUSIVE_LOCK) + && (pFile->locktype==RESERVED_LOCK)) + ){ + int cnt = 3; + while( cnt-->0 && (res = winLockFile(&pFile->h, SQLITE_LOCKFILE_FLAGS, + PENDING_BYTE, 0, 1, 0))==0 ){ + /* Try 3 times to get the pending lock. This is needed to work + ** around problems caused by indexing and/or anti-virus software on + ** Windows systems. + ** If you are using this code as a model for alternative VFSes, do not + ** copy this retry logic. It is a hack intended for Windows only. + */ + OSTRACE(("could not get a PENDING lock. cnt=%d\n", cnt)); + if( cnt ) sqlite3_win32_sleep(1); + } + gotPendingLock = res; + if( !res ){ + lastErrno = osGetLastError(); + } } - return (p==0 || p->nRef || (p->flags&PGHDR_NEED_SYNC)==0); -} -#endif /* !NDEBUG && SQLITE_ENABLE_EXPENSIVE_ASSERT */ -/* -** Remove page pPage from the list of dirty pages. -*/ -static void pcacheRemoveFromDirtyList(PgHdr *pPage){ - PCache *p = pPage->pCache; + /* Acquire a shared lock + */ + if( locktype==SHARED_LOCK && res ){ + assert( pFile->locktype==NO_LOCK ); + res = getReadLock(pFile); + if( res ){ + newLocktype = SHARED_LOCK; + }else{ + lastErrno = osGetLastError(); + } + } - assert( pPage->pDirtyNext || pPage==p->pDirtyTail ); - assert( pPage->pDirtyPrev || pPage==p->pDirty ); + /* Acquire a RESERVED lock + */ + if( locktype==RESERVED_LOCK && res ){ + assert( pFile->locktype==SHARED_LOCK ); + res = winLockFile(&pFile->h, SQLITE_LOCKFILE_FLAGS, RESERVED_BYTE, 0, 1, 0); + if( res ){ + newLocktype = RESERVED_LOCK; + }else{ + lastErrno = osGetLastError(); + } + } - /* Update the PCache1.pSynced variable if necessary. */ - if( p->pSynced==pPage ){ - PgHdr *pSynced = pPage->pDirtyPrev; - while( pSynced && (pSynced->flags&PGHDR_NEED_SYNC) ){ - pSynced = pSynced->pDirtyPrev; + /* Acquire a PENDING lock + */ + if( locktype==EXCLUSIVE_LOCK && res ){ + newLocktype = PENDING_LOCK; + gotPendingLock = 0; + } + + /* Acquire an EXCLUSIVE lock + */ + if( locktype==EXCLUSIVE_LOCK && res ){ + assert( pFile->locktype>=SHARED_LOCK ); + res = unlockReadLock(pFile); + OSTRACE(("unreadlock = %d\n", res)); + res = winLockFile(&pFile->h, SQLITE_LOCKFILE_FLAGS, SHARED_FIRST, 0, + SHARED_SIZE, 0); + if( res ){ + newLocktype = EXCLUSIVE_LOCK; + }else{ + lastErrno = osGetLastError(); + OSTRACE(("error-code = %d\n", lastErrno)); + getReadLock(pFile); } - p->pSynced = pSynced; } - if( pPage->pDirtyNext ){ - pPage->pDirtyNext->pDirtyPrev = pPage->pDirtyPrev; - }else{ - assert( pPage==p->pDirtyTail ); - p->pDirtyTail = pPage->pDirtyPrev; + /* If we are holding a PENDING lock that ought to be released, then + ** release it now. + */ + if( gotPendingLock && locktype==SHARED_LOCK ){ + winUnlockFile(&pFile->h, PENDING_BYTE, 0, 1, 0); } - if( pPage->pDirtyPrev ){ - pPage->pDirtyPrev->pDirtyNext = pPage->pDirtyNext; + + /* Update the state of the lock has held in the file descriptor then + ** return the appropriate result code. + */ + if( res ){ + rc = SQLITE_OK; }else{ - assert( pPage==p->pDirty ); - p->pDirty = pPage->pDirtyNext; + OSTRACE(("LOCK FAILED %d trying for %d but got %d\n", pFile->h, + locktype, newLocktype)); + pFile->lastErrno = lastErrno; + rc = SQLITE_BUSY; } - pPage->pDirtyNext = 0; - pPage->pDirtyPrev = 0; - - expensive_assert( pcacheCheckSynced(p) ); + pFile->locktype = (u8)newLocktype; + return rc; } /* -** Add page pPage to the head of the dirty list (PCache1.pDirty is set to -** pPage). +** This routine checks if there is a RESERVED lock held on the specified +** file by this or any other process. If such a lock is held, return +** non-zero, otherwise zero. */ -static void pcacheAddToDirtyList(PgHdr *pPage){ - PCache *p = pPage->pCache; - - assert( pPage->pDirtyNext==0 && pPage->pDirtyPrev==0 && p->pDirty!=pPage ); +static int winCheckReservedLock(sqlite3_file *id, int *pResOut){ + int rc; + winFile *pFile = (winFile*)id; - pPage->pDirtyNext = p->pDirty; - if( pPage->pDirtyNext ){ - assert( pPage->pDirtyNext->pDirtyPrev==0 ); - pPage->pDirtyNext->pDirtyPrev = pPage; - } - p->pDirty = pPage; - if( !p->pDirtyTail ){ - p->pDirtyTail = pPage; - } - if( !p->pSynced && 0==(pPage->flags&PGHDR_NEED_SYNC) ){ - p->pSynced = pPage; - } - expensive_assert( pcacheCheckSynced(p) ); -} + SimulateIOError( return SQLITE_IOERR_CHECKRESERVEDLOCK; ); -/* -** Wrapper around the pluggable caches xUnpin method. If the cache is -** being used for an in-memory database, this function is a no-op. -*/ -static void pcacheUnpin(PgHdr *p){ - PCache *pCache = p->pCache; - if( pCache->bPurgeable ){ - if( p->pgno==1 ){ - pCache->pPage1 = 0; + assert( id!=0 ); + if( pFile->locktype>=RESERVED_LOCK ){ + rc = 1; + OSTRACE(("TEST WR-LOCK %d %d (local)\n", pFile->h, rc)); + }else{ + rc = winLockFile(&pFile->h, SQLITE_LOCKFILE_FLAGS, RESERVED_BYTE, 0, 1, 0); + if( rc ){ + winUnlockFile(&pFile->h, RESERVED_BYTE, 0, 1, 0); } - sqlite3GlobalConfig.pcache.xUnpin(pCache->pCache, p, 0); + rc = !rc; + OSTRACE(("TEST WR-LOCK %d %d (remote)\n", pFile->h, rc)); } + *pResOut = rc; + return SQLITE_OK; } -/*************************************************** General Interfaces ****** +/* +** Lower the locking level on file descriptor id to locktype. locktype +** must be either NO_LOCK or SHARED_LOCK. ** -** Initialize and shutdown the page cache subsystem. Neither of these -** functions are threadsafe. +** If the locking level of the file descriptor is already at or below +** the requested locking level, this routine is a no-op. +** +** It is not possible for this routine to fail if the second argument +** is NO_LOCK. If the second argument is SHARED_LOCK then this routine +** might return SQLITE_IOERR; */ -SQLITE_PRIVATE int sqlite3PcacheInitialize(void){ - if( sqlite3GlobalConfig.pcache.xInit==0 ){ - sqlite3PCacheSetDefault(); +static int winUnlock(sqlite3_file *id, int locktype){ + int type; + winFile *pFile = (winFile*)id; + int rc = SQLITE_OK; + assert( pFile!=0 ); + assert( locktype<=SHARED_LOCK ); + OSTRACE(("UNLOCK %d to %d was %d(%d)\n", pFile->h, locktype, + pFile->locktype, pFile->sharedLockByte)); + type = pFile->locktype; + if( type>=EXCLUSIVE_LOCK ){ + winUnlockFile(&pFile->h, SHARED_FIRST, 0, SHARED_SIZE, 0); + if( locktype==SHARED_LOCK && !getReadLock(pFile) ){ + /* This should never happen. We should always be able to + ** reacquire the read lock */ + rc = winLogError(SQLITE_IOERR_UNLOCK, osGetLastError(), + "winUnlock", pFile->zPath); + } } - return sqlite3GlobalConfig.pcache.xInit(sqlite3GlobalConfig.pcache.pArg); -} -SQLITE_PRIVATE void sqlite3PcacheShutdown(void){ - if( sqlite3GlobalConfig.pcache.xShutdown ){ - sqlite3GlobalConfig.pcache.xShutdown(sqlite3GlobalConfig.pcache.pArg); + if( type>=RESERVED_LOCK ){ + winUnlockFile(&pFile->h, RESERVED_BYTE, 0, 1, 0); } + if( locktype==NO_LOCK && type>=SHARED_LOCK ){ + unlockReadLock(pFile); + } + if( type>=PENDING_LOCK ){ + winUnlockFile(&pFile->h, PENDING_BYTE, 0, 1, 0); + } + pFile->locktype = (u8)locktype; + return rc; } /* -** Return the size in bytes of a PCache object. -*/ -SQLITE_PRIVATE int sqlite3PcacheSize(void){ return sizeof(PCache); } - -/* -** Create a new PCache object. Storage space to hold the object -** has already been allocated and is passed in as the p pointer. -** The caller discovers how much space needs to be allocated by -** calling sqlite3PcacheSize(). -*/ -SQLITE_PRIVATE void sqlite3PcacheOpen( - int szPage, /* Size of every page */ - int szExtra, /* Extra space associated with each page */ - int bPurgeable, /* True if pages are on backing store */ - int (*xStress)(void*,PgHdr*),/* Call to try to make pages clean */ - void *pStress, /* Argument to xStress */ - PCache *p /* Preallocated space for the PCache */ -){ - memset(p, 0, sizeof(PCache)); - p->szPage = szPage; - p->szExtra = szExtra; - p->bPurgeable = bPurgeable; - p->xStress = xStress; - p->pStress = pStress; - p->nMax = 100; -} - -/* -** Change the page size for PCache object. The caller must ensure that there -** are no outstanding page references when this function is called. +** If *pArg is inititially negative then this is a query. Set *pArg to +** 1 or 0 depending on whether or not bit mask of pFile->ctrlFlags is set. +** +** If *pArg is 0 or 1, then clear or set the mask bit of pFile->ctrlFlags. */ -SQLITE_PRIVATE void sqlite3PcacheSetPageSize(PCache *pCache, int szPage){ - assert( pCache->nRef==0 && pCache->pDirty==0 ); - if( pCache->pCache ){ - sqlite3GlobalConfig.pcache.xDestroy(pCache->pCache); - pCache->pCache = 0; +static void winModeBit(winFile *pFile, unsigned char mask, int *pArg){ + if( *pArg<0 ){ + *pArg = (pFile->ctrlFlags & mask)!=0; + }else if( (*pArg)==0 ){ + pFile->ctrlFlags &= ~mask; + }else{ + pFile->ctrlFlags |= mask; } - pCache->szPage = szPage; } /* -** Try to obtain a page from the cache. +** Control and query of the open file handle. */ -SQLITE_PRIVATE int sqlite3PcacheFetch( - PCache *pCache, /* Obtain the page from this cache */ - Pgno pgno, /* Page number to obtain */ - int createFlag, /* If true, create page if it does not exist already */ - PgHdr **ppPage /* Write the page here */ -){ - PgHdr *pPage = 0; - int eCreate; - - assert( pCache!=0 ); - assert( pgno>0 ); - - /* If the pluggable cache (sqlite3_pcache*) has not been allocated, - ** allocate it now. - */ - if( !pCache->pCache && createFlag ){ - sqlite3_pcache *p; - int nByte; - nByte = pCache->szPage + pCache->szExtra + sizeof(PgHdr); - p = sqlite3GlobalConfig.pcache.xCreate(nByte, pCache->bPurgeable); - if( !p ){ - return SQLITE_NOMEM; +static int winFileControl(sqlite3_file *id, int op, void *pArg){ + winFile *pFile = (winFile*)id; + switch( op ){ + case SQLITE_FCNTL_LOCKSTATE: { + *(int*)pArg = pFile->locktype; + return SQLITE_OK; } - sqlite3GlobalConfig.pcache.xCachesize(p, pCache->nMax); - pCache->pCache = p; - } - - eCreate = createFlag ? 1 : 0; - if( eCreate && (!pCache->bPurgeable || !pCache->pDirty) ){ - eCreate = 2; - } - if( pCache->pCache ){ - pPage = sqlite3GlobalConfig.pcache.xFetch(pCache->pCache, pgno, eCreate); - } - - if( !pPage && eCreate==1 ){ - PgHdr *pPg; - - /* Find a dirty page to write-out and recycle. First try to find a - ** page that does not require a journal-sync (one with PGHDR_NEED_SYNC - ** cleared), but if that is not possible settle for any other - ** unreferenced dirty page. - */ - expensive_assert( pcacheCheckSynced(pCache) ); - for(pPg=pCache->pSynced; - pPg && (pPg->nRef || (pPg->flags&PGHDR_NEED_SYNC)); - pPg=pPg->pDirtyPrev - ); - if( !pPg ){ - for(pPg=pCache->pDirtyTail; pPg && pPg->nRef; pPg=pPg->pDirtyPrev); + case SQLITE_LAST_ERRNO: { + *(int*)pArg = (int)pFile->lastErrno; + return SQLITE_OK; } - if( pPg ){ - int rc; - rc = pCache->xStress(pCache->pStress, pPg); - if( rc!=SQLITE_OK && rc!=SQLITE_BUSY ){ + case SQLITE_FCNTL_CHUNK_SIZE: { + pFile->szChunk = *(int *)pArg; + return SQLITE_OK; + } + case SQLITE_FCNTL_SIZE_HINT: { + if( pFile->szChunk>0 ){ + sqlite3_int64 oldSz; + int rc = winFileSize(id, &oldSz); + if( rc==SQLITE_OK ){ + sqlite3_int64 newSz = *(sqlite3_int64*)pArg; + if( newSz>oldSz ){ + SimulateIOErrorBenign(1); + rc = winTruncate(id, newSz); + SimulateIOErrorBenign(0); + } + } return rc; } + return SQLITE_OK; } - - pPage = sqlite3GlobalConfig.pcache.xFetch(pCache->pCache, pgno, 2); - } - - if( pPage ){ - if( !pPage->pData ){ - memset(pPage, 0, sizeof(PgHdr) + pCache->szExtra); - pPage->pExtra = (void*)&pPage[1]; - pPage->pData = (void *)&((char *)pPage)[sizeof(PgHdr) + pCache->szExtra]; - pPage->pCache = pCache; - pPage->pgno = pgno; - } - assert( pPage->pCache==pCache ); - assert( pPage->pgno==pgno ); - assert( pPage->pExtra==(void *)&pPage[1] ); - - if( 0==pPage->nRef ){ - pCache->nRef++; + case SQLITE_FCNTL_PERSIST_WAL: { + winModeBit(pFile, WINFILE_PERSIST_WAL, (int*)pArg); + return SQLITE_OK; } - pPage->nRef++; - if( pgno==1 ){ - pCache->pPage1 = pPage; + case SQLITE_FCNTL_POWERSAFE_OVERWRITE: { + winModeBit(pFile, WINFILE_PSOW, (int*)pArg); + return SQLITE_OK; + } + case SQLITE_FCNTL_VFSNAME: { + *(char**)pArg = sqlite3_mprintf("win32"); + return SQLITE_OK; + } + case SQLITE_FCNTL_WIN32_AV_RETRY: { + int *a = (int*)pArg; + if( a[0]>0 ){ + win32IoerrRetry = a[0]; + }else{ + a[0] = win32IoerrRetry; + } + if( a[1]>0 ){ + win32IoerrRetryDelay = a[1]; + }else{ + a[1] = win32IoerrRetryDelay; + } + return SQLITE_OK; } } - *ppPage = pPage; - return (pPage==0 && eCreate) ? SQLITE_NOMEM : SQLITE_OK; + return SQLITE_NOTFOUND; } /* -** Decrement the reference count on a page. If the page is clean and the -** reference count drops to 0, then it is made elible for recycling. +** Return the sector size in bytes of the underlying block device for +** the specified file. This is almost always 512 bytes, but may be +** larger for some devices. +** +** SQLite code assumes this function cannot fail. It also assumes that +** if two files are created in the same file-system directory (i.e. +** a database and its journal file) that the sector size will be the +** same for both. */ -SQLITE_PRIVATE void sqlite3PcacheRelease(PgHdr *p){ - assert( p->nRef>0 ); - p->nRef--; - if( p->nRef==0 ){ - PCache *pCache = p->pCache; - pCache->nRef--; - if( (p->flags&PGHDR_DIRTY)==0 ){ - pcacheUnpin(p); - }else{ - /* Move the page to the head of the dirty list. */ - pcacheRemoveFromDirtyList(p); - pcacheAddToDirtyList(p); - } - } +static int winSectorSize(sqlite3_file *id){ + (void)id; + return SQLITE_DEFAULT_SECTOR_SIZE; } /* -** Increase the reference count of a supplied page by 1. +** Return a vector of device characteristics. */ -SQLITE_PRIVATE void sqlite3PcacheRef(PgHdr *p){ - assert(p->nRef>0); - p->nRef++; +static int winDeviceCharacteristics(sqlite3_file *id){ + winFile *p = (winFile*)id; + return SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN | + ((p->ctrlFlags & WINFILE_PSOW)?SQLITE_IOCAP_POWERSAFE_OVERWRITE:0); } +#ifndef SQLITE_OMIT_WAL + +/* +** Windows will only let you create file view mappings +** on allocation size granularity boundaries. +** During sqlite3_os_init() we do a GetSystemInfo() +** to get the granularity size. +*/ +SYSTEM_INFO winSysInfo; + /* -** Drop a page from the cache. There must be exactly one reference to the -** page. This function deletes that reference, so after it returns the -** page pointed to by p is invalid. +** Helper functions to obtain and relinquish the global mutex. The +** global mutex is used to protect the winLockInfo objects used by +** this file, all of which may be shared by multiple threads. +** +** Function winShmMutexHeld() is used to assert() that the global mutex +** is held when required. This function is only used as part of assert() +** statements. e.g. +** +** winShmEnterMutex() +** assert( winShmMutexHeld() ); +** winShmLeaveMutex() */ -SQLITE_PRIVATE void sqlite3PcacheDrop(PgHdr *p){ - PCache *pCache; - assert( p->nRef==1 ); - if( p->flags&PGHDR_DIRTY ){ - pcacheRemoveFromDirtyList(p); - } - pCache = p->pCache; - pCache->nRef--; - if( p->pgno==1 ){ - pCache->pPage1 = 0; - } - sqlite3GlobalConfig.pcache.xUnpin(pCache->pCache, p, 1); +static void winShmEnterMutex(void){ + sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER)); +} +static void winShmLeaveMutex(void){ + sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER)); +} +#ifdef SQLITE_DEBUG +static int winShmMutexHeld(void) { + return sqlite3_mutex_held(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER)); } +#endif /* -** Make sure the page is marked as dirty. If it isn't dirty already, -** make it so. +** Object used to represent a single file opened and mmapped to provide +** shared memory. When multiple threads all reference the same +** log-summary, each thread has its own winFile object, but they all +** point to a single instance of this object. In other words, each +** log-summary is opened only once per process. +** +** winShmMutexHeld() must be true when creating or destroying +** this object or while reading or writing the following fields: +** +** nRef +** pNext +** +** The following fields are read-only after the object is created: +** +** fid +** zFilename +** +** Either winShmNode.mutex must be held or winShmNode.nRef==0 and +** winShmMutexHeld() is true when reading or writing any other field +** in this structure. +** +*/ +struct winShmNode { + sqlite3_mutex *mutex; /* Mutex to access this object */ + char *zFilename; /* Name of the file */ + winFile hFile; /* File handle from winOpen */ + + int szRegion; /* Size of shared-memory regions */ + int nRegion; /* Size of array apRegion */ + struct ShmRegion { + HANDLE hMap; /* File handle from CreateFileMapping */ + void *pMap; + } *aRegion; + DWORD lastErrno; /* The Windows errno from the last I/O error */ + + int nRef; /* Number of winShm objects pointing to this */ + winShm *pFirst; /* All winShm objects pointing to this */ + winShmNode *pNext; /* Next in list of all winShmNode objects */ +#ifdef SQLITE_DEBUG + u8 nextShmId; /* Next available winShm.id value */ +#endif +}; + +/* +** A global array of all winShmNode objects. +** +** The winShmMutexHeld() must be true while reading or writing this list. */ -SQLITE_PRIVATE void sqlite3PcacheMakeDirty(PgHdr *p){ - p->flags &= ~PGHDR_DONT_WRITE; - assert( p->nRef>0 ); - if( 0==(p->flags & PGHDR_DIRTY) ){ - p->flags |= PGHDR_DIRTY; - pcacheAddToDirtyList( p); - } -} +static winShmNode *winShmNodeList = 0; /* -** Make sure the page is marked as clean. If it isn't clean already, -** make it so. +** Structure used internally by this VFS to record the state of an +** open shared memory connection. +** +** The following fields are initialized when this object is created and +** are read-only thereafter: +** +** winShm.pShmNode +** winShm.id +** +** All other fields are read/write. The winShm.pShmNode->mutex must be held +** while accessing any read/write fields. */ -SQLITE_PRIVATE void sqlite3PcacheMakeClean(PgHdr *p){ - if( (p->flags & PGHDR_DIRTY) ){ - pcacheRemoveFromDirtyList(p); - p->flags &= ~(PGHDR_DIRTY|PGHDR_NEED_SYNC); - if( p->nRef==0 ){ - pcacheUnpin(p); - } - } -} +struct winShm { + winShmNode *pShmNode; /* The underlying winShmNode object */ + winShm *pNext; /* Next winShm with the same winShmNode */ + u8 hasMutex; /* True if holding the winShmNode mutex */ + u16 sharedMask; /* Mask of shared locks held */ + u16 exclMask; /* Mask of exclusive locks held */ +#ifdef SQLITE_DEBUG + u8 id; /* Id of this connection with its winShmNode */ +#endif +}; /* -** Make every page in the cache clean. +** Constants used for locking */ -SQLITE_PRIVATE void sqlite3PcacheCleanAll(PCache *pCache){ - PgHdr *p; - while( (p = pCache->pDirty)!=0 ){ - sqlite3PcacheMakeClean(p); - } -} +#define WIN_SHM_BASE ((22+SQLITE_SHM_NLOCK)*4) /* first lock byte */ +#define WIN_SHM_DMS (WIN_SHM_BASE+SQLITE_SHM_NLOCK) /* deadman switch */ /* -** Clear the PGHDR_NEED_SYNC flag from all dirty pages. +** Apply advisory locks for all n bytes beginning at ofst. */ -SQLITE_PRIVATE void sqlite3PcacheClearSyncFlags(PCache *pCache){ - PgHdr *p; - for(p=pCache->pDirty; p; p=p->pDirtyNext){ - p->flags &= ~PGHDR_NEED_SYNC; +#define _SHM_UNLCK 1 +#define _SHM_RDLCK 2 +#define _SHM_WRLCK 3 +static int winShmSystemLock( + winShmNode *pFile, /* Apply locks to this open shared-memory segment */ + int lockType, /* _SHM_UNLCK, _SHM_RDLCK, or _SHM_WRLCK */ + int ofst, /* Offset to first byte to be locked/unlocked */ + int nByte /* Number of bytes to lock or unlock */ +){ + int rc = 0; /* Result code form Lock/UnlockFileEx() */ + + /* Access to the winShmNode object is serialized by the caller */ + assert( sqlite3_mutex_held(pFile->mutex) || pFile->nRef==0 ); + + /* Release/Acquire the system-level lock */ + if( lockType==_SHM_UNLCK ){ + rc = winUnlockFile(&pFile->hFile.h, ofst, 0, nByte, 0); + }else{ + /* Initialize the locking parameters */ + DWORD dwFlags = LOCKFILE_FAIL_IMMEDIATELY; + if( lockType == _SHM_WRLCK ) dwFlags |= LOCKFILE_EXCLUSIVE_LOCK; + rc = winLockFile(&pFile->hFile.h, dwFlags, ofst, 0, nByte, 0); } - pCache->pSynced = pCache->pDirtyTail; + + if( rc!= 0 ){ + rc = SQLITE_OK; + }else{ + pFile->lastErrno = osGetLastError(); + rc = SQLITE_BUSY; + } + + OSTRACE(("SHM-LOCK %d %s %s 0x%08lx\n", + pFile->hFile.h, + rc==SQLITE_OK ? "ok" : "failed", + lockType==_SHM_UNLCK ? "UnlockFileEx" : "LockFileEx", + pFile->lastErrno)); + + return rc; } +/* Forward references to VFS methods */ +static int winOpen(sqlite3_vfs*,const char*,sqlite3_file*,int,int*); +static int winDelete(sqlite3_vfs *,const char*,int); + /* -** Change the page number of page p to newPgno. +** Purge the winShmNodeList list of all entries with winShmNode.nRef==0. +** +** This is not a VFS shared-memory method; it is a utility function called +** by VFS shared-memory methods. */ -SQLITE_PRIVATE void sqlite3PcacheMove(PgHdr *p, Pgno newPgno){ - PCache *pCache = p->pCache; - assert( p->nRef>0 ); - assert( newPgno>0 ); - sqlite3GlobalConfig.pcache.xRekey(pCache->pCache, p, p->pgno, newPgno); - p->pgno = newPgno; - if( (p->flags&PGHDR_DIRTY) && (p->flags&PGHDR_NEED_SYNC) ){ - pcacheRemoveFromDirtyList(p); - pcacheAddToDirtyList(p); +static void winShmPurge(sqlite3_vfs *pVfs, int deleteFlag){ + winShmNode **pp; + winShmNode *p; + BOOL bRc; + assert( winShmMutexHeld() ); + pp = &winShmNodeList; + while( (p = *pp)!=0 ){ + if( p->nRef==0 ){ + int i; + if( p->mutex ) sqlite3_mutex_free(p->mutex); + for(i=0; inRegion; i++){ + bRc = osUnmapViewOfFile(p->aRegion[i].pMap); + OSTRACE(("SHM-PURGE pid-%d unmap region=%d %s\n", + (int)osGetCurrentProcessId(), i, + bRc ? "ok" : "failed")); + bRc = osCloseHandle(p->aRegion[i].hMap); + OSTRACE(("SHM-PURGE pid-%d close region=%d %s\n", + (int)osGetCurrentProcessId(), i, + bRc ? "ok" : "failed")); + } + if( p->hFile.h != INVALID_HANDLE_VALUE ){ + SimulateIOErrorBenign(1); + winClose((sqlite3_file *)&p->hFile); + SimulateIOErrorBenign(0); + } + if( deleteFlag ){ + SimulateIOErrorBenign(1); + sqlite3BeginBenignMalloc(); + winDelete(pVfs, p->zFilename, 0); + sqlite3EndBenignMalloc(); + SimulateIOErrorBenign(0); + } + *pp = p->pNext; + sqlite3_free(p->aRegion); + sqlite3_free(p); + }else{ + pp = &p->pNext; + } } } /* -** Drop every cache entry whose page number is greater than "pgno". The -** caller must ensure that there are no outstanding references to any pages -** other than page 1 with a page number greater than pgno. +** Open the shared-memory area associated with database file pDbFd. ** -** If there is a reference to page 1 and the pgno parameter passed to this -** function is 0, then the data area associated with page 1 is zeroed, but -** the page object is not dropped. +** When opening a new shared-memory file, if no other instances of that +** file are currently open, in this process or in other processes, then +** the file must be truncated to zero length or have its header cleared. */ -SQLITE_PRIVATE void sqlite3PcacheTruncate(PCache *pCache, Pgno pgno){ - if( pCache->pCache ){ - PgHdr *p; - PgHdr *pNext; - for(p=pCache->pDirty; p; p=pNext){ - pNext = p->pDirtyNext; - if( p->pgno>pgno ){ - assert( p->flags&PGHDR_DIRTY ); - sqlite3PcacheMakeClean(p); +static int winOpenSharedMemory(winFile *pDbFd){ + struct winShm *p; /* The connection to be opened */ + struct winShmNode *pShmNode = 0; /* The underlying mmapped file */ + int rc; /* Result code */ + struct winShmNode *pNew; /* Newly allocated winShmNode */ + int nName; /* Size of zName in bytes */ + + assert( pDbFd->pShm==0 ); /* Not previously opened */ + + /* Allocate space for the new sqlite3_shm object. Also speculatively + ** allocate space for a new winShmNode and filename. + */ + p = sqlite3_malloc( sizeof(*p) ); + if( p==0 ) return SQLITE_IOERR_NOMEM; + memset(p, 0, sizeof(*p)); + nName = sqlite3Strlen30(pDbFd->zPath); + pNew = sqlite3_malloc( sizeof(*pShmNode) + nName + 17 ); + if( pNew==0 ){ + sqlite3_free(p); + return SQLITE_IOERR_NOMEM; + } + memset(pNew, 0, sizeof(*pNew) + nName + 17); + pNew->zFilename = (char*)&pNew[1]; + sqlite3_snprintf(nName+15, pNew->zFilename, "%s-shm", pDbFd->zPath); + sqlite3FileSuffix3(pDbFd->zPath, pNew->zFilename); + + /* Look to see if there is an existing winShmNode that can be used. + ** If no matching winShmNode currently exists, create a new one. + */ + winShmEnterMutex(); + for(pShmNode = winShmNodeList; pShmNode; pShmNode=pShmNode->pNext){ + /* TBD need to come up with better match here. Perhaps + ** use FILE_ID_BOTH_DIR_INFO Structure. + */ + if( sqlite3StrICmp(pShmNode->zFilename, pNew->zFilename)==0 ) break; + } + if( pShmNode ){ + sqlite3_free(pNew); + }else{ + pShmNode = pNew; + pNew = 0; + ((winFile*)(&pShmNode->hFile))->h = INVALID_HANDLE_VALUE; + pShmNode->pNext = winShmNodeList; + winShmNodeList = pShmNode; + + pShmNode->mutex = sqlite3_mutex_alloc(SQLITE_MUTEX_FAST); + if( pShmNode->mutex==0 ){ + rc = SQLITE_IOERR_NOMEM; + goto shm_open_err; + } + + rc = winOpen(pDbFd->pVfs, + pShmNode->zFilename, /* Name of the file (UTF-8) */ + (sqlite3_file*)&pShmNode->hFile, /* File handle here */ + SQLITE_OPEN_WAL | SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, /* Mode flags */ + 0); + if( SQLITE_OK!=rc ){ + goto shm_open_err; + } + + /* Check to see if another process is holding the dead-man switch. + ** If not, truncate the file to zero length. + */ + if( winShmSystemLock(pShmNode, _SHM_WRLCK, WIN_SHM_DMS, 1)==SQLITE_OK ){ + rc = winTruncate((sqlite3_file *)&pShmNode->hFile, 0); + if( rc!=SQLITE_OK ){ + rc = winLogError(SQLITE_IOERR_SHMOPEN, osGetLastError(), + "winOpenShm", pDbFd->zPath); } } - if( pgno==0 && pCache->pPage1 ){ - memset(pCache->pPage1->pData, 0, pCache->szPage); - pgno = 1; + if( rc==SQLITE_OK ){ + winShmSystemLock(pShmNode, _SHM_UNLCK, WIN_SHM_DMS, 1); + rc = winShmSystemLock(pShmNode, _SHM_RDLCK, WIN_SHM_DMS, 1); } - sqlite3GlobalConfig.pcache.xTruncate(pCache->pCache, pgno+1); + if( rc ) goto shm_open_err; } + + /* Make the new connection a child of the winShmNode */ + p->pShmNode = pShmNode; +#ifdef SQLITE_DEBUG + p->id = pShmNode->nextShmId++; +#endif + pShmNode->nRef++; + pDbFd->pShm = p; + winShmLeaveMutex(); + + /* The reference count on pShmNode has already been incremented under + ** the cover of the winShmEnterMutex() mutex and the pointer from the + ** new (struct winShm) object to the pShmNode has been set. All that is + ** left to do is to link the new object into the linked list starting + ** at pShmNode->pFirst. This must be done while holding the pShmNode->mutex + ** mutex. + */ + sqlite3_mutex_enter(pShmNode->mutex); + p->pNext = pShmNode->pFirst; + pShmNode->pFirst = p; + sqlite3_mutex_leave(pShmNode->mutex); + return SQLITE_OK; + + /* Jump here on any error */ +shm_open_err: + winShmSystemLock(pShmNode, _SHM_UNLCK, WIN_SHM_DMS, 1); + winShmPurge(pDbFd->pVfs, 0); /* This call frees pShmNode if required */ + sqlite3_free(p); + sqlite3_free(pNew); + winShmLeaveMutex(); + return rc; } /* -** Close a cache. +** Close a connection to shared-memory. Delete the underlying +** storage if deleteFlag is true. */ -SQLITE_PRIVATE void sqlite3PcacheClose(PCache *pCache){ - if( pCache->pCache ){ - sqlite3GlobalConfig.pcache.xDestroy(pCache->pCache); +static int winShmUnmap( + sqlite3_file *fd, /* Database holding shared memory */ + int deleteFlag /* Delete after closing if true */ +){ + winFile *pDbFd; /* Database holding shared-memory */ + winShm *p; /* The connection to be closed */ + winShmNode *pShmNode; /* The underlying shared-memory file */ + winShm **pp; /* For looping over sibling connections */ + + pDbFd = (winFile*)fd; + p = pDbFd->pShm; + if( p==0 ) return SQLITE_OK; + pShmNode = p->pShmNode; + + /* Remove connection p from the set of connections associated + ** with pShmNode */ + sqlite3_mutex_enter(pShmNode->mutex); + for(pp=&pShmNode->pFirst; (*pp)!=p; pp = &(*pp)->pNext){} + *pp = p->pNext; + + /* Free the connection p */ + sqlite3_free(p); + pDbFd->pShm = 0; + sqlite3_mutex_leave(pShmNode->mutex); + + /* If pShmNode->nRef has reached 0, then close the underlying + ** shared-memory file, too */ + winShmEnterMutex(); + assert( pShmNode->nRef>0 ); + pShmNode->nRef--; + if( pShmNode->nRef==0 ){ + winShmPurge(pDbFd->pVfs, deleteFlag); } -} + winShmLeaveMutex(); -/* -** Discard the contents of the cache. -*/ -SQLITE_PRIVATE void sqlite3PcacheClear(PCache *pCache){ - sqlite3PcacheTruncate(pCache, 0); + return SQLITE_OK; } /* -** Merge two lists of pages connected by pDirty and in pgno order. -** Do not both fixing the pDirtyPrev pointers. +** Change the lock state for a shared-memory segment. */ -static PgHdr *pcacheMergeDirtyList(PgHdr *pA, PgHdr *pB){ - PgHdr result, *pTail; - pTail = &result; - while( pA && pB ){ - if( pA->pgnopgno ){ - pTail->pDirty = pA; - pTail = pA; - pA = pA->pDirty; +static int winShmLock( + sqlite3_file *fd, /* Database file holding the shared memory */ + int ofst, /* First lock to acquire or release */ + int n, /* Number of locks to acquire or release */ + int flags /* What to do with the lock */ +){ + winFile *pDbFd = (winFile*)fd; /* Connection holding shared memory */ + winShm *p = pDbFd->pShm; /* The shared memory being locked */ + winShm *pX; /* For looping over all siblings */ + winShmNode *pShmNode = p->pShmNode; + int rc = SQLITE_OK; /* Result code */ + u16 mask; /* Mask of locks to take or release */ + + assert( ofst>=0 && ofst+n<=SQLITE_SHM_NLOCK ); + assert( n>=1 ); + assert( flags==(SQLITE_SHM_LOCK | SQLITE_SHM_SHARED) + || flags==(SQLITE_SHM_LOCK | SQLITE_SHM_EXCLUSIVE) + || flags==(SQLITE_SHM_UNLOCK | SQLITE_SHM_SHARED) + || flags==(SQLITE_SHM_UNLOCK | SQLITE_SHM_EXCLUSIVE) ); + assert( n==1 || (flags & SQLITE_SHM_EXCLUSIVE)!=0 ); + + mask = (u16)((1U<<(ofst+n)) - (1U<1 || mask==(1<mutex); + if( flags & SQLITE_SHM_UNLOCK ){ + u16 allMask = 0; /* Mask of locks held by siblings */ + + /* See if any siblings hold this same lock */ + for(pX=pShmNode->pFirst; pX; pX=pX->pNext){ + if( pX==p ) continue; + assert( (pX->exclMask & (p->exclMask|p->sharedMask))==0 ); + allMask |= pX->sharedMask; + } + + /* Unlock the system-level locks */ + if( (mask & allMask)==0 ){ + rc = winShmSystemLock(pShmNode, _SHM_UNLCK, ofst+WIN_SHM_BASE, n); }else{ - pTail->pDirty = pB; - pTail = pB; - pB = pB->pDirty; + rc = SQLITE_OK; } - } - if( pA ){ - pTail->pDirty = pA; - }else if( pB ){ - pTail->pDirty = pB; - }else{ - pTail->pDirty = 0; - } - return result.pDirty; -} -/* -** Sort the list of pages in accending order by pgno. Pages are -** connected by pDirty pointers. The pDirtyPrev pointers are -** corrupted by this sort. -*/ -#define N_SORT_BUCKET_ALLOC 25 -#define N_SORT_BUCKET 25 -#ifdef SQLITE_TEST - int sqlite3_pager_n_sort_bucket = 0; - #undef N_SORT_BUCKET - #define N_SORT_BUCKET \ - (sqlite3_pager_n_sort_bucket?sqlite3_pager_n_sort_bucket:N_SORT_BUCKET_ALLOC) -#endif -static PgHdr *pcacheSortDirtyList(PgHdr *pIn){ - PgHdr *a[N_SORT_BUCKET_ALLOC], *p; - int i; - memset(a, 0, sizeof(a)); - while( pIn ){ - p = pIn; - pIn = p->pDirty; - p->pDirty = 0; - for(i=0; iexclMask &= ~mask; + p->sharedMask &= ~mask; + } + }else if( flags & SQLITE_SHM_SHARED ){ + u16 allShared = 0; /* Union of locks held by connections other than "p" */ + + /* Find out which shared locks are already held by sibling connections. + ** If any sibling already holds an exclusive lock, go ahead and return + ** SQLITE_BUSY. + */ + for(pX=pShmNode->pFirst; pX; pX=pX->pNext){ + if( (pX->exclMask & mask)!=0 ){ + rc = SQLITE_BUSY; break; + } + allShared |= pX->sharedMask; + } + + /* Get shared locks at the system level, if necessary */ + if( rc==SQLITE_OK ){ + if( (allShared & mask)==0 ){ + rc = winShmSystemLock(pShmNode, _SHM_RDLCK, ofst+WIN_SHM_BASE, n); }else{ - p = pcacheMergeDirtyList(a[i], p); - a[i] = 0; + rc = SQLITE_OK; } } - if( i==N_SORT_BUCKET-1 ){ - /* Coverage: To get here, there need to be 2^(N_SORT_BUCKET) - ** elements in the input list. This is possible, but impractical. - ** Testing this line is the point of global variable - ** sqlite3_pager_n_sort_bucket. - */ - a[i] = pcacheMergeDirtyList(a[i], p); + + /* Get the local shared locks */ + if( rc==SQLITE_OK ){ + p->sharedMask |= mask; + } + }else{ + /* Make sure no sibling connections hold locks that will block this + ** lock. If any do, return SQLITE_BUSY right away. + */ + for(pX=pShmNode->pFirst; pX; pX=pX->pNext){ + if( (pX->exclMask & mask)!=0 || (pX->sharedMask & mask)!=0 ){ + rc = SQLITE_BUSY; + break; + } + } + + /* Get the exclusive locks at the system level. Then if successful + ** also mark the local connection as being locked. + */ + if( rc==SQLITE_OK ){ + rc = winShmSystemLock(pShmNode, _SHM_WRLCK, ofst+WIN_SHM_BASE, n); + if( rc==SQLITE_OK ){ + assert( (p->sharedMask & mask)==0 ); + p->exclMask |= mask; + } } } - p = a[0]; - for(i=1; imutex); + OSTRACE(("SHM-LOCK shmid-%d, pid-%d got %03x,%03x %s\n", + p->id, (int)osGetCurrentProcessId(), p->sharedMask, p->exclMask, + rc ? "failed" : "ok")); + return rc; } /* -** Return a list of all dirty pages in the cache, sorted by page number. -*/ -SQLITE_PRIVATE PgHdr *sqlite3PcacheDirtyList(PCache *pCache){ - PgHdr *p; - for(p=pCache->pDirty; p; p=p->pDirtyNext){ - p->pDirty = p->pDirtyNext; - } - return pcacheSortDirtyList(pCache->pDirty); -} - -/* -** Return the total number of referenced pages held by the cache. +** Implement a memory barrier or memory fence on shared memory. +** +** All loads and stores begun before the barrier must complete before +** any load or store begun after the barrier. */ -SQLITE_PRIVATE int sqlite3PcacheRefCount(PCache *pCache){ - return pCache->nRef; +static void winShmBarrier( + sqlite3_file *fd /* Database holding the shared memory */ +){ + UNUSED_PARAMETER(fd); + /* MemoryBarrier(); // does not work -- do not know why not */ + winShmEnterMutex(); + winShmLeaveMutex(); } /* -** Return the number of references to the page supplied as an argument. -*/ -SQLITE_PRIVATE int sqlite3PcachePageRefcount(PgHdr *p){ - return p->nRef; -} +** This function is called to obtain a pointer to region iRegion of the +** shared-memory associated with the database file fd. Shared-memory regions +** are numbered starting from zero. Each shared-memory region is szRegion +** bytes in size. +** +** If an error occurs, an error code is returned and *pp is set to NULL. +** +** Otherwise, if the isWrite parameter is 0 and the requested shared-memory +** region has not been allocated (by any client, including one running in a +** separate process), then *pp is set to NULL and SQLITE_OK returned. If +** isWrite is non-zero and the requested shared-memory region has not yet +** been allocated, it is allocated by this function. +** +** If the shared-memory region has already been allocated or is allocated by +** this call as described above, then it is mapped into this processes +** address space (if it is not already), *pp is set to point to the mapped +** memory and SQLITE_OK returned. +*/ +static int winShmMap( + sqlite3_file *fd, /* Handle open on database file */ + int iRegion, /* Region to retrieve */ + int szRegion, /* Size of regions */ + int isWrite, /* True to extend file if necessary */ + void volatile **pp /* OUT: Mapped memory */ +){ + winFile *pDbFd = (winFile*)fd; + winShm *p = pDbFd->pShm; + winShmNode *pShmNode; + int rc = SQLITE_OK; -/* -** Return the total number of pages in the cache. -*/ -SQLITE_PRIVATE int sqlite3PcachePagecount(PCache *pCache){ - int nPage = 0; - if( pCache->pCache ){ - nPage = sqlite3GlobalConfig.pcache.xPagecount(pCache->pCache); + if( !p ){ + rc = winOpenSharedMemory(pDbFd); + if( rc!=SQLITE_OK ) return rc; + p = pDbFd->pShm; } - return nPage; -} + pShmNode = p->pShmNode; -#ifdef SQLITE_TEST -/* -** Get the suggested cache-size value. -*/ -SQLITE_PRIVATE int sqlite3PcacheGetCachesize(PCache *pCache){ - return pCache->nMax; -} -#endif + sqlite3_mutex_enter(pShmNode->mutex); + assert( szRegion==pShmNode->szRegion || pShmNode->nRegion==0 ); -/* -** Set the suggested cache-size value. -*/ -SQLITE_PRIVATE void sqlite3PcacheSetCachesize(PCache *pCache, int mxPage){ - pCache->nMax = mxPage; - if( pCache->pCache ){ - sqlite3GlobalConfig.pcache.xCachesize(pCache->pCache, mxPage); - } -} + if( pShmNode->nRegion<=iRegion ){ + struct ShmRegion *apNew; /* New aRegion[] array */ + int nByte = (iRegion+1)*szRegion; /* Minimum required file size */ + sqlite3_int64 sz; /* Current size of wal-index file */ -#ifdef SQLITE_CHECK_PAGES -/* -** For all dirty pages currently in the cache, invoke the specified -** callback. This is only used if the SQLITE_CHECK_PAGES macro is -** defined. -*/ -SQLITE_PRIVATE void sqlite3PcacheIterateDirty(PCache *pCache, void (*xIter)(PgHdr *)){ - PgHdr *pDirty; - for(pDirty=pCache->pDirty; pDirty; pDirty=pDirty->pDirtyNext){ - xIter(pDirty); - } -} -#endif + pShmNode->szRegion = szRegion; -/************** End of pcache.c **********************************************/ -/************** Begin file pcache1.c *****************************************/ -/* -** 2008 November 05 -** -** The author disclaims copyright to this source code. In place of -** a legal notice, here is a blessing: -** -** May you do good and not evil. -** May you find forgiveness for yourself and forgive others. -** May you share freely, never taking more than you give. -** -************************************************************************* -** -** This file implements the default page cache implementation (the -** sqlite3_pcache interface). It also contains part of the implementation -** of the SQLITE_CONFIG_PAGECACHE and sqlite3_release_memory() features. -** If the default page cache implementation is overriden, then neither of -** these two features are available. -** -** @(#) $Id: pcache1.c,v 1.17 2009/06/09 18:58:53 shane Exp $ -*/ + /* The requested region is not mapped into this processes address space. + ** Check to see if it has been allocated (i.e. if the wal-index file is + ** large enough to contain the requested region). + */ + rc = winFileSize((sqlite3_file *)&pShmNode->hFile, &sz); + if( rc!=SQLITE_OK ){ + rc = winLogError(SQLITE_IOERR_SHMSIZE, osGetLastError(), + "winShmMap1", pDbFd->zPath); + goto shmpage_out; + } + if( szhFile, nByte); + if( rc!=SQLITE_OK ){ + rc = winLogError(SQLITE_IOERR_SHMSIZE, osGetLastError(), + "winShmMap2", pDbFd->zPath); + goto shmpage_out; + } + } -typedef struct PCache1 PCache1; -typedef struct PgHdr1 PgHdr1; -typedef struct PgFreeslot PgFreeslot; + /* Map the requested memory region into this processes address space. */ + apNew = (struct ShmRegion *)sqlite3_realloc( + pShmNode->aRegion, (iRegion+1)*sizeof(apNew[0]) + ); + if( !apNew ){ + rc = SQLITE_IOERR_NOMEM; + goto shmpage_out; + } + pShmNode->aRegion = apNew; -/* Pointers to structures of this type are cast and returned as -** opaque sqlite3_pcache* handles -*/ -struct PCache1 { - /* Cache configuration parameters. Page size (szPage) and the purgeable - ** flag (bPurgeable) are set when the cache is created. nMax may be - ** modified at any time by a call to the pcache1CacheSize() method. - ** The global mutex must be held when accessing nMax. - */ - int szPage; /* Size of allocated pages in bytes */ - int bPurgeable; /* True if cache is purgeable */ - unsigned int nMin; /* Minimum number of pages reserved */ - unsigned int nMax; /* Configured "cache_size" value */ + while( pShmNode->nRegion<=iRegion ){ + HANDLE hMap; /* file-mapping handle */ + void *pMap = 0; /* Mapped memory region */ + +#if SQLITE_OS_WINRT + hMap = osCreateFileMappingFromApp(pShmNode->hFile.h, + NULL, PAGE_READWRITE, nByte, NULL + ); +#else + hMap = osCreateFileMappingW(pShmNode->hFile.h, + NULL, PAGE_READWRITE, 0, nByte, NULL + ); +#endif + OSTRACE(("SHM-MAP pid-%d create region=%d nbyte=%d %s\n", + (int)osGetCurrentProcessId(), pShmNode->nRegion, nByte, + hMap ? "ok" : "failed")); + if( hMap ){ + int iOffset = pShmNode->nRegion*szRegion; + int iOffsetShift = iOffset % winSysInfo.dwAllocationGranularity; +#if SQLITE_OS_WINRT + pMap = osMapViewOfFileFromApp(hMap, FILE_MAP_WRITE | FILE_MAP_READ, + iOffset - iOffsetShift, szRegion + iOffsetShift + ); +#else + pMap = osMapViewOfFile(hMap, FILE_MAP_WRITE | FILE_MAP_READ, + 0, iOffset - iOffsetShift, szRegion + iOffsetShift + ); +#endif + OSTRACE(("SHM-MAP pid-%d map region=%d offset=%d size=%d %s\n", + (int)osGetCurrentProcessId(), pShmNode->nRegion, iOffset, + szRegion, pMap ? "ok" : "failed")); + } + if( !pMap ){ + pShmNode->lastErrno = osGetLastError(); + rc = winLogError(SQLITE_IOERR_SHMMAP, pShmNode->lastErrno, + "winShmMap3", pDbFd->zPath); + if( hMap ) osCloseHandle(hMap); + goto shmpage_out; + } - /* Hash table of all pages. The following variables may only be accessed - ** when the accessor is holding the global mutex (see pcache1EnterMutex() - ** and pcache1LeaveMutex()). - */ - unsigned int nRecyclable; /* Number of pages in the LRU list */ - unsigned int nPage; /* Total number of pages in apHash */ - unsigned int nHash; /* Number of slots in apHash[] */ - PgHdr1 **apHash; /* Hash table for fast lookup by key */ + pShmNode->aRegion[pShmNode->nRegion].pMap = pMap; + pShmNode->aRegion[pShmNode->nRegion].hMap = hMap; + pShmNode->nRegion++; + } + } - unsigned int iMaxKey; /* Largest key seen since xTruncate() */ -}; +shmpage_out: + if( pShmNode->nRegion>iRegion ){ + int iOffset = iRegion*szRegion; + int iOffsetShift = iOffset % winSysInfo.dwAllocationGranularity; + char *p = (char *)pShmNode->aRegion[iRegion].pMap; + *pp = (void *)&p[iOffsetShift]; + }else{ + *pp = 0; + } + sqlite3_mutex_leave(pShmNode->mutex); + return rc; +} + +#else +# define winShmMap 0 +# define winShmLock 0 +# define winShmBarrier 0 +# define winShmUnmap 0 +#endif /* #ifndef SQLITE_OMIT_WAL */ /* -** Each cache entry is represented by an instance of the following -** structure. A buffer of PgHdr1.pCache->szPage bytes is allocated -** directly before this structure in memory (see the PGHDR1_TO_PAGE() -** macro below). -*/ -struct PgHdr1 { - unsigned int iKey; /* Key value (page number) */ - PgHdr1 *pNext; /* Next in hash table chain */ - PCache1 *pCache; /* Cache that currently owns this page */ - PgHdr1 *pLruNext; /* Next in LRU list of unpinned pages */ - PgHdr1 *pLruPrev; /* Previous in LRU list of unpinned pages */ -}; +** Here ends the implementation of all sqlite3_file methods. +** +********************** End sqlite3_file Methods ******************************* +******************************************************************************/ /* -** Free slots in the allocator used to divide up the buffer provided using -** the SQLITE_CONFIG_PAGECACHE mechanism. +** This vector defines all the methods that can operate on an +** sqlite3_file for win32. */ -struct PgFreeslot { - PgFreeslot *pNext; /* Next free slot */ +static const sqlite3_io_methods winIoMethod = { + 2, /* iVersion */ + winClose, /* xClose */ + winRead, /* xRead */ + winWrite, /* xWrite */ + winTruncate, /* xTruncate */ + winSync, /* xSync */ + winFileSize, /* xFileSize */ + winLock, /* xLock */ + winUnlock, /* xUnlock */ + winCheckReservedLock, /* xCheckReservedLock */ + winFileControl, /* xFileControl */ + winSectorSize, /* xSectorSize */ + winDeviceCharacteristics, /* xDeviceCharacteristics */ + winShmMap, /* xShmMap */ + winShmLock, /* xShmLock */ + winShmBarrier, /* xShmBarrier */ + winShmUnmap /* xShmUnmap */ }; -/* -** Global data used by this cache. +/**************************************************************************** +**************************** sqlite3_vfs methods **************************** +** +** This division contains the implementation of methods on the +** sqlite3_vfs object. */ -static SQLITE_WSD struct PCacheGlobal { - sqlite3_mutex *mutex; /* static mutex MUTEX_STATIC_LRU */ - - int nMaxPage; /* Sum of nMaxPage for purgeable caches */ - int nMinPage; /* Sum of nMinPage for purgeable caches */ - int nCurrentPage; /* Number of purgeable pages allocated */ - PgHdr1 *pLruHead, *pLruTail; /* LRU list of unpinned pages */ - - /* Variables related to SQLITE_CONFIG_PAGECACHE settings. */ - int szSlot; /* Size of each free slot */ - void *pStart, *pEnd; /* Bounds of pagecache malloc range */ - PgFreeslot *pFree; /* Free page blocks */ - int isInit; /* True if initialized */ -} pcache1_g; /* -** All code in this file should access the global structure above via the -** alias "pcache1". This ensures that the WSD emulation is used when -** compiling for systems that do not support real WSD. +** Convert a UTF-8 filename into whatever form the underlying +** operating system wants filenames in. Space to hold the result +** is obtained from malloc and must be freed by the calling +** function. */ -#define pcache1 (GLOBAL(struct PCacheGlobal, pcache1_g)) +static void *convertUtf8Filename(const char *zFilename){ + void *zConverted = 0; + if( isNT() ){ + zConverted = utf8ToUnicode(zFilename); + } +#ifdef SQLITE_WIN32_HAS_ANSI + else{ + zConverted = sqlite3_win32_utf8_to_mbcs(zFilename); + } +#endif + /* caller will handle out of memory */ + return zConverted; +} /* -** When a PgHdr1 structure is allocated, the associated PCache1.szPage -** bytes of data are located directly before it in memory (i.e. the total -** size of the allocation is sizeof(PgHdr1)+PCache1.szPage byte). The -** PGHDR1_TO_PAGE() macro takes a pointer to a PgHdr1 structure as -** an argument and returns a pointer to the associated block of szPage -** bytes. The PAGE_TO_PGHDR1() macro does the opposite: its argument is -** a pointer to a block of szPage bytes of data and the return value is -** a pointer to the associated PgHdr1 structure. -** -** assert( PGHDR1_TO_PAGE(PAGE_TO_PGHDR1(pCache, X))==X ); +** Create a temporary file name in zBuf. zBuf must be big enough to +** hold at pVfs->mxPathname characters. */ -#define PGHDR1_TO_PAGE(p) (void*)(((char*)p) - p->pCache->szPage) -#define PAGE_TO_PGHDR1(c, p) (PgHdr1*)(((char*)p) + c->szPage) +static int getTempname(int nBuf, char *zBuf){ + static char zChars[] = + "abcdefghijklmnopqrstuvwxyz" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "0123456789"; + size_t i, j; + int nTempPath; + char zTempPath[MAX_PATH+2]; -/* -** Macros to enter and leave the global LRU mutex. -*/ -#define pcache1EnterMutex() sqlite3_mutex_enter(pcache1.mutex) -#define pcache1LeaveMutex() sqlite3_mutex_leave(pcache1.mutex) + /* It's odd to simulate an io-error here, but really this is just + ** using the io-error infrastructure to test that SQLite handles this + ** function failing. + */ + SimulateIOError( return SQLITE_IOERR ); -/******************************************************************************/ -/******** Page Allocation/SQLITE_CONFIG_PCACHE Related Functions **************/ + memset(zTempPath, 0, MAX_PATH+2); -/* -** This function is called during initialization if a static buffer is -** supplied to use for the page-cache by passing the SQLITE_CONFIG_PAGECACHE -** verb to sqlite3_config(). Parameter pBuf points to an allocation large -** enough to contain 'n' buffers of 'sz' bytes each. -*/ -SQLITE_PRIVATE void sqlite3PCacheBufferSetup(void *pBuf, int sz, int n){ - if( pcache1.isInit ){ - PgFreeslot *p; - sz = ROUNDDOWN8(sz); - pcache1.szSlot = sz; - pcache1.pStart = pBuf; - pcache1.pFree = 0; - while( n-- ){ - p = (PgFreeslot*)pBuf; - p->pNext = pcache1.pFree; - pcache1.pFree = p; - pBuf = (void*)&((char*)pBuf)[sz]; + if( sqlite3_temp_directory ){ + sqlite3_snprintf(MAX_PATH-30, zTempPath, "%s", sqlite3_temp_directory); + } +#if !SQLITE_OS_WINRT + else if( isNT() ){ + char *zMulti; + WCHAR zWidePath[MAX_PATH]; + osGetTempPathW(MAX_PATH-30, zWidePath); + zMulti = unicodeToUtf8(zWidePath); + if( zMulti ){ + sqlite3_snprintf(MAX_PATH-30, zTempPath, "%s", zMulti); + sqlite3_free(zMulti); + }else{ + return SQLITE_IOERR_NOMEM; } - pcache1.pEnd = pBuf; } -} +#ifdef SQLITE_WIN32_HAS_ANSI + else{ + char *zUtf8; + char zMbcsPath[MAX_PATH]; + osGetTempPathA(MAX_PATH-30, zMbcsPath); + zUtf8 = sqlite3_win32_mbcs_to_utf8(zMbcsPath); + if( zUtf8 ){ + sqlite3_snprintf(MAX_PATH-30, zTempPath, "%s", zUtf8); + sqlite3_free(zUtf8); + }else{ + return SQLITE_IOERR_NOMEM; + } + } +#endif +#endif -/* -** Malloc function used within this file to allocate space from the buffer -** configured using sqlite3_config(SQLITE_CONFIG_PAGECACHE) option. If no -** such buffer exists or there is no space left in it, this function falls -** back to sqlite3Malloc(). -*/ -static void *pcache1Alloc(int nByte){ - void *p; - assert( sqlite3_mutex_held(pcache1.mutex) ); - if( nByte<=pcache1.szSlot && pcache1.pFree ){ - assert( pcache1.isInit ); - p = (PgHdr1 *)pcache1.pFree; - pcache1.pFree = pcache1.pFree->pNext; - sqlite3StatusSet(SQLITE_STATUS_PAGECACHE_SIZE, nByte); - sqlite3StatusAdd(SQLITE_STATUS_PAGECACHE_USED, 1); - }else{ + /* Check that the output buffer is large enough for the temporary file + ** name. If it is not, return SQLITE_ERROR. + */ + nTempPath = sqlite3Strlen30(zTempPath); - /* Allocate a new buffer using sqlite3Malloc. Before doing so, exit the - ** global pcache mutex and unlock the pager-cache object pCache. This is - ** so that if the attempt to allocate a new buffer causes the the - ** configured soft-heap-limit to be breached, it will be possible to - ** reclaim memory from this pager-cache. - */ - pcache1LeaveMutex(); - p = sqlite3Malloc(nByte); - pcache1EnterMutex(); - if( p ){ - int sz = sqlite3MallocSize(p); - sqlite3StatusAdd(SQLITE_STATUS_PAGECACHE_OVERFLOW, sz); - } + if( (nTempPath + sqlite3Strlen30(SQLITE_TEMP_FILE_PREFIX) + 18) >= nBuf ){ + return SQLITE_ERROR; } - return p; -} -/* -** Free an allocated buffer obtained from pcache1Alloc(). -*/ -static void pcache1Free(void *p){ - assert( sqlite3_mutex_held(pcache1.mutex) ); - if( p==0 ) return; - if( p>=pcache1.pStart && ppNext = pcache1.pFree; - pcache1.pFree = pSlot; - }else{ - int iSize = sqlite3MallocSize(p); - sqlite3StatusAdd(SQLITE_STATUS_PAGECACHE_OVERFLOW, -iSize); - sqlite3_free(p); + for(i=nTempPath; i>0 && zTempPath[i-1]=='\\'; i--){} + zTempPath[i] = 0; + + sqlite3_snprintf(nBuf-18, zBuf, (nTempPath > 0) ? + "%s\\"SQLITE_TEMP_FILE_PREFIX : SQLITE_TEMP_FILE_PREFIX, + zTempPath); + j = sqlite3Strlen30(zBuf); + sqlite3_randomness(15, &zBuf[j]); + for(i=0; i<15; i++, j++){ + zBuf[j] = (char)zChars[ ((unsigned char)zBuf[j])%(sizeof(zChars)-1) ]; } + zBuf[j] = 0; + zBuf[j+1] = 0; + + OSTRACE(("TEMP FILENAME: %s\n", zBuf)); + return SQLITE_OK; } /* -** Allocate a new page object initially associated with cache pCache. +** Return TRUE if the named file is really a directory. Return false if +** it is something other than a directory, or if there is any kind of memory +** allocation failure. */ -static PgHdr1 *pcache1AllocPage(PCache1 *pCache){ - int nByte = sizeof(PgHdr1) + pCache->szPage; - void *pPg = pcache1Alloc(nByte); - PgHdr1 *p; - if( pPg ){ - p = PAGE_TO_PGHDR1(pCache, pPg); - if( pCache->bPurgeable ){ - pcache1.nCurrentPage++; - } +static int winIsDir(const void *zConverted){ + DWORD attr; + int rc = 0; + DWORD lastErrno; + + if( isNT() ){ + int cnt = 0; + WIN32_FILE_ATTRIBUTE_DATA sAttrData; + memset(&sAttrData, 0, sizeof(sAttrData)); + while( !(rc = osGetFileAttributesExW((LPCWSTR)zConverted, + GetFileExInfoStandard, + &sAttrData)) && retryIoerr(&cnt, &lastErrno) ){} + if( !rc ){ + return 0; /* Invalid name? */ + } + attr = sAttrData.dwFileAttributes; +#if SQLITE_OS_WINCE==0 }else{ - p = 0; + attr = osGetFileAttributesA((char*)zConverted); +#endif } - return p; + return (attr!=INVALID_FILE_ATTRIBUTES) && (attr&FILE_ATTRIBUTE_DIRECTORY); } /* -** Free a page object allocated by pcache1AllocPage(). +** Open a file. */ -static void pcache1FreePage(PgHdr1 *p){ - if( p ){ - if( p->pCache->bPurgeable ){ - pcache1.nCurrentPage--; - } - pcache1Free(PGHDR1_TO_PAGE(p)); - } -} +static int winOpen( + sqlite3_vfs *pVfs, /* Not used */ + const char *zName, /* Name of the file (UTF-8) */ + sqlite3_file *id, /* Write the SQLite file handle here */ + int flags, /* Open mode flags */ + int *pOutFlags /* Status return flags */ +){ + HANDLE h; + DWORD lastErrno; + DWORD dwDesiredAccess; + DWORD dwShareMode; + DWORD dwCreationDisposition; + DWORD dwFlagsAndAttributes = 0; +#if SQLITE_OS_WINCE + int isTemp = 0; +#endif + winFile *pFile = (winFile*)id; + void *zConverted; /* Filename in OS encoding */ + const char *zUtf8Name = zName; /* Filename in UTF-8 encoding */ + int cnt = 0; -/* -** Malloc function used by SQLite to obtain space from the buffer configured -** using sqlite3_config(SQLITE_CONFIG_PAGECACHE) option. If no such buffer -** exists, this function falls back to sqlite3Malloc(). -*/ -SQLITE_PRIVATE void *sqlite3PageMalloc(int sz){ - void *p; - pcache1EnterMutex(); - p = pcache1Alloc(sz); - pcache1LeaveMutex(); - return p; -} + /* If argument zPath is a NULL pointer, this function is required to open + ** a temporary file. Use this buffer to store the file name in. + */ + char zTmpname[MAX_PATH+2]; /* Buffer used to create temp filename */ -/* -** Free an allocated buffer obtained from sqlite3PageMalloc(). -*/ -SQLITE_PRIVATE void sqlite3PageFree(void *p){ - pcache1EnterMutex(); - pcache1Free(p); - pcache1LeaveMutex(); -} + int rc = SQLITE_OK; /* Function Return Code */ +#if !defined(NDEBUG) || SQLITE_OS_WINCE + int eType = flags&0xFFFFFF00; /* Type of file to open */ +#endif -/******************************************************************************/ -/******** General Implementation Functions ************************************/ + int isExclusive = (flags & SQLITE_OPEN_EXCLUSIVE); + int isDelete = (flags & SQLITE_OPEN_DELETEONCLOSE); + int isCreate = (flags & SQLITE_OPEN_CREATE); +#ifndef NDEBUG + int isReadonly = (flags & SQLITE_OPEN_READONLY); +#endif + int isReadWrite = (flags & SQLITE_OPEN_READWRITE); -/* -** This function is used to resize the hash table used by the cache passed -** as the first argument. -** -** The global mutex must be held when this function is called. -*/ -static int pcache1ResizeHash(PCache1 *p){ - PgHdr1 **apNew; - unsigned int nNew; - unsigned int i; +#ifndef NDEBUG + int isOpenJournal = (isCreate && ( + eType==SQLITE_OPEN_MASTER_JOURNAL + || eType==SQLITE_OPEN_MAIN_JOURNAL + || eType==SQLITE_OPEN_WAL + )); +#endif - assert( sqlite3_mutex_held(pcache1.mutex) ); + /* Check the following statements are true: + ** + ** (a) Exactly one of the READWRITE and READONLY flags must be set, and + ** (b) if CREATE is set, then READWRITE must also be set, and + ** (c) if EXCLUSIVE is set, then CREATE must also be set. + ** (d) if DELETEONCLOSE is set, then CREATE must also be set. + */ + assert((isReadonly==0 || isReadWrite==0) && (isReadWrite || isReadonly)); + assert(isCreate==0 || isReadWrite); + assert(isExclusive==0 || isCreate); + assert(isDelete==0 || isCreate); - nNew = p->nHash*2; - if( nNew<256 ){ - nNew = 256; - } + /* The main DB, main journal, WAL file and master journal are never + ** automatically deleted. Nor are they ever temporary files. */ + assert( (!isDelete && zName) || eType!=SQLITE_OPEN_MAIN_DB ); + assert( (!isDelete && zName) || eType!=SQLITE_OPEN_MAIN_JOURNAL ); + assert( (!isDelete && zName) || eType!=SQLITE_OPEN_MASTER_JOURNAL ); + assert( (!isDelete && zName) || eType!=SQLITE_OPEN_WAL ); - pcache1LeaveMutex(); - if( p->nHash ){ sqlite3BeginBenignMalloc(); } - apNew = (PgHdr1 **)sqlite3_malloc(sizeof(PgHdr1 *)*nNew); - if( p->nHash ){ sqlite3EndBenignMalloc(); } - pcache1EnterMutex(); - if( apNew ){ - memset(apNew, 0, sizeof(PgHdr1 *)*nNew); - for(i=0; inHash; i++){ - PgHdr1 *pPage; - PgHdr1 *pNext = p->apHash[i]; - while( (pPage = pNext)!=0 ){ - unsigned int h = pPage->iKey % nNew; - pNext = pPage->pNext; - pPage->pNext = apNew[h]; - apNew[h] = pPage; - } + /* Assert that the upper layer has set one of the "file-type" flags. */ + assert( eType==SQLITE_OPEN_MAIN_DB || eType==SQLITE_OPEN_TEMP_DB + || eType==SQLITE_OPEN_MAIN_JOURNAL || eType==SQLITE_OPEN_TEMP_JOURNAL + || eType==SQLITE_OPEN_SUBJOURNAL || eType==SQLITE_OPEN_MASTER_JOURNAL + || eType==SQLITE_OPEN_TRANSIENT_DB || eType==SQLITE_OPEN_WAL + ); + + assert( id!=0 ); + UNUSED_PARAMETER(pVfs); + + pFile->h = INVALID_HANDLE_VALUE; + + /* If the second argument to this function is NULL, generate a + ** temporary file name to use + */ + if( !zUtf8Name ){ + assert(isDelete && !isOpenJournal); + rc = getTempname(MAX_PATH+2, zTmpname); + if( rc!=SQLITE_OK ){ + return rc; } - sqlite3_free(p->apHash); - p->apHash = apNew; - p->nHash = nNew; + zUtf8Name = zTmpname; } - return (p->apHash ? SQLITE_OK : SQLITE_NOMEM); -} + /* Database filenames are double-zero terminated if they are not + ** URIs with parameters. Hence, they can always be passed into + ** sqlite3_uri_parameter(). + */ + assert( (eType!=SQLITE_OPEN_MAIN_DB) || (flags & SQLITE_OPEN_URI) || + zUtf8Name[strlen(zUtf8Name)+1]==0 ); -/* -** This function is used internally to remove the page pPage from the -** global LRU list, if is part of it. If pPage is not part of the global -** LRU list, then this function is a no-op. -** -** The global mutex must be held when this function is called. -*/ -static void pcache1PinPage(PgHdr1 *pPage){ - assert( sqlite3_mutex_held(pcache1.mutex) ); - if( pPage && (pPage->pLruNext || pPage==pcache1.pLruTail) ){ - if( pPage->pLruPrev ){ - pPage->pLruPrev->pLruNext = pPage->pLruNext; - } - if( pPage->pLruNext ){ - pPage->pLruNext->pLruPrev = pPage->pLruPrev; - } - if( pcache1.pLruHead==pPage ){ - pcache1.pLruHead = pPage->pLruNext; - } - if( pcache1.pLruTail==pPage ){ - pcache1.pLruTail = pPage->pLruPrev; - } - pPage->pLruNext = 0; - pPage->pLruPrev = 0; - pPage->pCache->nRecyclable--; + /* Convert the filename to the system encoding. */ + zConverted = convertUtf8Filename(zUtf8Name); + if( zConverted==0 ){ + return SQLITE_IOERR_NOMEM; } -} + if( winIsDir(zConverted) ){ + sqlite3_free(zConverted); + return SQLITE_CANTOPEN_ISDIR; + } -/* -** Remove the page supplied as an argument from the hash table -** (PCache1.apHash structure) that it is currently stored in. -** -** The global mutex must be held when this function is called. -*/ -static void pcache1RemoveFromHash(PgHdr1 *pPage){ - unsigned int h; - PCache1 *pCache = pPage->pCache; - PgHdr1 **pp; + if( isReadWrite ){ + dwDesiredAccess = GENERIC_READ | GENERIC_WRITE; + }else{ + dwDesiredAccess = GENERIC_READ; + } - h = pPage->iKey % pCache->nHash; - for(pp=&pCache->apHash[h]; (*pp)!=pPage; pp=&(*pp)->pNext); - *pp = (*pp)->pNext; + /* SQLITE_OPEN_EXCLUSIVE is used to make sure that a new file is + ** created. SQLite doesn't use it to indicate "exclusive access" + ** as it is usually understood. + */ + if( isExclusive ){ + /* Creates a new file, only if it does not already exist. */ + /* If the file exists, it fails. */ + dwCreationDisposition = CREATE_NEW; + }else if( isCreate ){ + /* Open existing file, or create if it doesn't exist */ + dwCreationDisposition = OPEN_ALWAYS; + }else{ + /* Opens a file, only if it exists. */ + dwCreationDisposition = OPEN_EXISTING; + } - pCache->nPage--; -} + dwShareMode = FILE_SHARE_READ | FILE_SHARE_WRITE; -/* -** If there are currently more than pcache.nMaxPage pages allocated, try -** to recycle pages to reduce the number allocated to pcache.nMaxPage. -*/ -static void pcache1EnforceMaxPage(void){ - assert( sqlite3_mutex_held(pcache1.mutex) ); - while( pcache1.nCurrentPage>pcache1.nMaxPage && pcache1.pLruTail ){ - PgHdr1 *p = pcache1.pLruTail; - pcache1PinPage(p); - pcache1RemoveFromHash(p); - pcache1FreePage(p); + if( isDelete ){ +#if SQLITE_OS_WINCE + dwFlagsAndAttributes = FILE_ATTRIBUTE_HIDDEN; + isTemp = 1; +#else + dwFlagsAndAttributes = FILE_ATTRIBUTE_TEMPORARY + | FILE_ATTRIBUTE_HIDDEN + | FILE_FLAG_DELETE_ON_CLOSE; +#endif + }else{ + dwFlagsAndAttributes = FILE_ATTRIBUTE_NORMAL; } -} + /* Reports from the internet are that performance is always + ** better if FILE_FLAG_RANDOM_ACCESS is used. Ticket #2699. */ +#if SQLITE_OS_WINCE + dwFlagsAndAttributes |= FILE_FLAG_RANDOM_ACCESS; +#endif -/* -** Discard all pages from cache pCache with a page number (key value) -** greater than or equal to iLimit. Any pinned pages that meet this -** criteria are unpinned before they are discarded. -** -** The global mutex must be held when this function is called. -*/ -static void pcache1TruncateUnsafe( - PCache1 *pCache, - unsigned int iLimit -){ - TESTONLY( unsigned int nPage = 0; ) /* Used to assert pCache->nPage is correct */ - unsigned int h; - assert( sqlite3_mutex_held(pcache1.mutex) ); - for(h=0; hnHash; h++){ - PgHdr1 **pp = &pCache->apHash[h]; - PgHdr1 *pPage; - while( (pPage = *pp)!=0 ){ - if( pPage->iKey>=iLimit ){ - pCache->nPage--; - *pp = pPage->pNext; - pcache1PinPage(pPage); - pcache1FreePage(pPage); - }else{ - pp = &pPage->pNext; - TESTONLY( nPage++; ) - } + if( isNT() ){ +#if SQLITE_OS_WINRT + CREATEFILE2_EXTENDED_PARAMETERS extendedParameters; + extendedParameters.dwSize = sizeof(CREATEFILE2_EXTENDED_PARAMETERS); + extendedParameters.dwFileAttributes = + dwFlagsAndAttributes & FILE_ATTRIBUTE_MASK; + extendedParameters.dwFileFlags = dwFlagsAndAttributes & FILE_FLAG_MASK; + extendedParameters.dwSecurityQosFlags = SECURITY_ANONYMOUS; + extendedParameters.lpSecurityAttributes = NULL; + extendedParameters.hTemplateFile = NULL; + while( (h = osCreateFile2((LPCWSTR)zConverted, + dwDesiredAccess, + dwShareMode, + dwCreationDisposition, + &extendedParameters))==INVALID_HANDLE_VALUE && + retryIoerr(&cnt, &lastErrno) ){ + /* Noop */ + } +#else + while( (h = osCreateFileW((LPCWSTR)zConverted, + dwDesiredAccess, + dwShareMode, NULL, + dwCreationDisposition, + dwFlagsAndAttributes, + NULL))==INVALID_HANDLE_VALUE && + retryIoerr(&cnt, &lastErrno) ){ + /* Noop */ } +#endif } - assert( pCache->nPage==nPage ); -} - -/******************************************************************************/ -/******** sqlite3_pcache Methods **********************************************/ - -/* -** Implementation of the sqlite3_pcache.xInit method. -*/ -static int pcache1Init(void *NotUsed){ - UNUSED_PARAMETER(NotUsed); - assert( pcache1.isInit==0 ); - memset(&pcache1, 0, sizeof(pcache1)); - if( sqlite3GlobalConfig.bCoreMutex ){ - pcache1.mutex = sqlite3_mutex_alloc(SQLITE_MUTEX_STATIC_LRU); +#ifdef SQLITE_WIN32_HAS_ANSI + else{ + while( (h = osCreateFileA((LPCSTR)zConverted, + dwDesiredAccess, + dwShareMode, NULL, + dwCreationDisposition, + dwFlagsAndAttributes, + NULL))==INVALID_HANDLE_VALUE && + retryIoerr(&cnt, &lastErrno) ){ + /* Noop */ + } } - pcache1.isInit = 1; - return SQLITE_OK; -} +#endif + logIoerr(cnt); -/* -** Implementation of the sqlite3_pcache.xShutdown method. -*/ -static void pcache1Shutdown(void *NotUsed){ - UNUSED_PARAMETER(NotUsed); - assert( pcache1.isInit!=0 ); - memset(&pcache1, 0, sizeof(pcache1)); -} + OSTRACE(("OPEN %d %s 0x%lx %s\n", + h, zName, dwDesiredAccess, + h==INVALID_HANDLE_VALUE ? "failed" : "ok")); -/* -** Implementation of the sqlite3_pcache.xCreate method. -** -** Allocate a new cache. -*/ -static sqlite3_pcache *pcache1Create(int szPage, int bPurgeable){ - PCache1 *pCache; + if( h==INVALID_HANDLE_VALUE ){ + pFile->lastErrno = lastErrno; + winLogError(SQLITE_CANTOPEN, pFile->lastErrno, "winOpen", zUtf8Name); + sqlite3_free(zConverted); + if( isReadWrite && !isExclusive ){ + return winOpen(pVfs, zName, id, + ((flags|SQLITE_OPEN_READONLY)&~(SQLITE_OPEN_CREATE|SQLITE_OPEN_READWRITE)), pOutFlags); + }else{ + return SQLITE_CANTOPEN_BKPT; + } + } - pCache = (PCache1 *)sqlite3_malloc(sizeof(PCache1)); - if( pCache ){ - memset(pCache, 0, sizeof(PCache1)); - pCache->szPage = szPage; - pCache->bPurgeable = (bPurgeable ? 1 : 0); - if( bPurgeable ){ - pCache->nMin = 10; - pcache1EnterMutex(); - pcache1.nMinPage += pCache->nMin; - pcache1LeaveMutex(); + if( pOutFlags ){ + if( isReadWrite ){ + *pOutFlags = SQLITE_OPEN_READWRITE; + }else{ + *pOutFlags = SQLITE_OPEN_READONLY; } } - return (sqlite3_pcache *)pCache; -} -/* -** Implementation of the sqlite3_pcache.xCachesize method. -** -** Configure the cache_size limit for a cache. -*/ -static void pcache1Cachesize(sqlite3_pcache *p, int nMax){ - PCache1 *pCache = (PCache1 *)p; - if( pCache->bPurgeable ){ - pcache1EnterMutex(); - pcache1.nMaxPage += (nMax - pCache->nMax); - pCache->nMax = nMax; - pcache1EnforceMaxPage(); - pcache1LeaveMutex(); + memset(pFile, 0, sizeof(*pFile)); + pFile->pMethod = &winIoMethod; + pFile->h = h; + pFile->lastErrno = NO_ERROR; + pFile->pVfs = pVfs; + pFile->pShm = 0; + pFile->zPath = zName; + if( sqlite3_uri_boolean(zName, "psow", SQLITE_POWERSAFE_OVERWRITE) ){ + pFile->ctrlFlags |= WINFILE_PSOW; } -} -/* -** Implementation of the sqlite3_pcache.xPagecount method. -*/ -static int pcache1Pagecount(sqlite3_pcache *p){ - int n; - pcache1EnterMutex(); - n = ((PCache1 *)p)->nPage; - pcache1LeaveMutex(); - return n; +#if SQLITE_OS_WINCE + if( isReadWrite && eType==SQLITE_OPEN_MAIN_DB + && !winceCreateLock(zName, pFile) + ){ + osCloseHandle(h); + sqlite3_free(zConverted); + return SQLITE_CANTOPEN_BKPT; + } + if( isTemp ){ + pFile->zDeleteOnClose = zConverted; + }else +#endif + { + sqlite3_free(zConverted); + } + + OpenCounter(+1); + return rc; } /* -** Implementation of the sqlite3_pcache.xFetch method. -** -** Fetch a page by key value. -** -** Whether or not a new page may be allocated by this function depends on -** the value of the createFlag argument. -** -** There are three different approaches to obtaining space for a page, -** depending on the value of parameter createFlag (which may be 0, 1 or 2). -** -** 1. Regardless of the value of createFlag, the cache is searched for a -** copy of the requested page. If one is found, it is returned. -** -** 2. If createFlag==0 and the page is not already in the cache, NULL is -** returned. -** -** 3. If createFlag is 1, the cache is marked as purgeable and the page is -** not already in the cache, and if either of the following are true, -** return NULL: -** -** (a) the number of pages pinned by the cache is greater than -** PCache1.nMax, or -** (b) the number of pages pinned by the cache is greater than -** the sum of nMax for all purgeable caches, less the sum of -** nMin for all other purgeable caches. -** -** 4. If none of the first three conditions apply and the cache is marked -** as purgeable, and if one of the following is true: -** -** (a) The number of pages allocated for the cache is already -** PCache1.nMax, or -** -** (b) The number of pages allocated for all purgeable caches is -** already equal to or greater than the sum of nMax for all -** purgeable caches, -** -** then attempt to recycle a page from the LRU list. If it is the right -** size, return the recycled buffer. Otherwise, free the buffer and -** proceed to step 5. +** Delete the named file. ** -** 5. Otherwise, allocate and return a new page buffer. +** Note that Windows does not allow a file to be deleted if some other +** process has it open. Sometimes a virus scanner or indexing program +** will open a journal file shortly after it is created in order to do +** whatever it does. While this other process is holding the +** file open, we will be unable to delete it. To work around this +** problem, we delay 100 milliseconds and try to delete again. Up +** to MX_DELETION_ATTEMPTs deletion attempts are run before giving +** up and returning an error. */ -static void *pcache1Fetch(sqlite3_pcache *p, unsigned int iKey, int createFlag){ - unsigned int nPinned; - PCache1 *pCache = (PCache1 *)p; - PgHdr1 *pPage = 0; - - pcache1EnterMutex(); - if( createFlag==1 ) sqlite3BeginBenignMalloc(); +static int winDelete( + sqlite3_vfs *pVfs, /* Not used on win32 */ + const char *zFilename, /* Name of file to delete */ + int syncDir /* Not used on win32 */ +){ + int cnt = 0; + int rc; + DWORD attr; + DWORD lastErrno; + void *zConverted; + UNUSED_PARAMETER(pVfs); + UNUSED_PARAMETER(syncDir); - /* Search the hash table for an existing entry. */ - if( pCache->nHash>0 ){ - unsigned int h = iKey % pCache->nHash; - for(pPage=pCache->apHash[h]; pPage&&pPage->iKey!=iKey; pPage=pPage->pNext); + SimulateIOError(return SQLITE_IOERR_DELETE); + zConverted = convertUtf8Filename(zFilename); + if( zConverted==0 ){ + return SQLITE_IOERR_NOMEM; } - - if( pPage || createFlag==0 ){ - pcache1PinPage(pPage); - goto fetch_out; + if( isNT() ){ + do { +#if SQLITE_OS_WINRT + WIN32_FILE_ATTRIBUTE_DATA sAttrData; + memset(&sAttrData, 0, sizeof(sAttrData)); + if ( osGetFileAttributesExW(zConverted, GetFileExInfoStandard, + &sAttrData) ){ + attr = sAttrData.dwFileAttributes; + }else{ + rc = SQLITE_OK; /* Already gone? */ + break; + } +#else + attr = osGetFileAttributesW(zConverted); +#endif + if ( attr==INVALID_FILE_ATTRIBUTES ){ + rc = SQLITE_OK; /* Already gone? */ + break; + } + if ( attr&FILE_ATTRIBUTE_DIRECTORY ){ + rc = SQLITE_ERROR; /* Files only. */ + break; + } + if ( osDeleteFileW(zConverted) ){ + rc = SQLITE_OK; /* Deleted OK. */ + break; + } + if ( !retryIoerr(&cnt, &lastErrno) ){ + rc = SQLITE_ERROR; /* No more retries. */ + break; + } + } while(1); } - - /* Step 3 of header comment. */ - nPinned = pCache->nPage - pCache->nRecyclable; - if( createFlag==1 && pCache->bPurgeable && ( - nPinned>=(pcache1.nMaxPage+pCache->nMin-pcache1.nMinPage) - || nPinned>=(pCache->nMax * 9 / 10) - )){ - goto fetch_out; +#ifdef SQLITE_WIN32_HAS_ANSI + else{ + do { + attr = osGetFileAttributesA(zConverted); + if ( attr==INVALID_FILE_ATTRIBUTES ){ + rc = SQLITE_OK; /* Already gone? */ + break; + } + if ( attr&FILE_ATTRIBUTE_DIRECTORY ){ + rc = SQLITE_ERROR; /* Files only. */ + break; + } + if ( osDeleteFileA(zConverted) ){ + rc = SQLITE_OK; /* Deleted OK. */ + break; + } + if ( !retryIoerr(&cnt, &lastErrno) ){ + rc = SQLITE_ERROR; /* No more retries. */ + break; + } + } while(1); } - - if( pCache->nPage>=pCache->nHash && pcache1ResizeHash(pCache) ){ - goto fetch_out; +#endif + if( rc ){ + rc = winLogError(SQLITE_IOERR_DELETE, lastErrno, + "winDelete", zFilename); + }else{ + logIoerr(cnt); } + sqlite3_free(zConverted); + OSTRACE(("DELETE \"%s\" %s\n", zFilename, (rc ? "failed" : "ok" ))); + return rc; +} - /* Step 4. Try to recycle a page buffer if appropriate. */ - if( pCache->bPurgeable && pcache1.pLruTail && ( - (pCache->nPage+1>=pCache->nMax) || pcache1.nCurrentPage>=pcache1.nMaxPage - )){ - pPage = pcache1.pLruTail; - pcache1RemoveFromHash(pPage); - pcache1PinPage(pPage); - if( pPage->pCache->szPage!=pCache->szPage ){ - pcache1FreePage(pPage); - pPage = 0; +/* +** Check the existance and status of a file. +*/ +static int winAccess( + sqlite3_vfs *pVfs, /* Not used on win32 */ + const char *zFilename, /* Name of file to check */ + int flags, /* Type of test to make on this file */ + int *pResOut /* OUT: Result */ +){ + DWORD attr; + int rc = 0; + DWORD lastErrno; + void *zConverted; + UNUSED_PARAMETER(pVfs); + + SimulateIOError( return SQLITE_IOERR_ACCESS; ); + zConverted = convertUtf8Filename(zFilename); + if( zConverted==0 ){ + return SQLITE_IOERR_NOMEM; + } + if( isNT() ){ + int cnt = 0; + WIN32_FILE_ATTRIBUTE_DATA sAttrData; + memset(&sAttrData, 0, sizeof(sAttrData)); + while( !(rc = osGetFileAttributesExW((LPCWSTR)zConverted, + GetFileExInfoStandard, + &sAttrData)) && retryIoerr(&cnt, &lastErrno) ){} + if( rc ){ + /* For an SQLITE_ACCESS_EXISTS query, treat a zero-length file + ** as if it does not exist. + */ + if( flags==SQLITE_ACCESS_EXISTS + && sAttrData.nFileSizeHigh==0 + && sAttrData.nFileSizeLow==0 ){ + attr = INVALID_FILE_ATTRIBUTES; + }else{ + attr = sAttrData.dwFileAttributes; + } }else{ - pcache1.nCurrentPage -= (pPage->pCache->bPurgeable - pCache->bPurgeable); + logIoerr(cnt); + if( lastErrno!=ERROR_FILE_NOT_FOUND ){ + winLogError(SQLITE_IOERR_ACCESS, lastErrno, "winAccess", zFilename); + sqlite3_free(zConverted); + return SQLITE_IOERR_ACCESS; + }else{ + attr = INVALID_FILE_ATTRIBUTES; + } } } - - /* Step 5. If a usable page buffer has still not been found, - ** attempt to allocate a new one. - */ - if( !pPage ){ - pPage = pcache1AllocPage(pCache); - } - - if( pPage ){ - unsigned int h = iKey % pCache->nHash; - pCache->nPage++; - pPage->iKey = iKey; - pPage->pNext = pCache->apHash[h]; - pPage->pCache = pCache; - pPage->pLruPrev = 0; - pPage->pLruNext = 0; - *(void **)(PGHDR1_TO_PAGE(pPage)) = 0; - pCache->apHash[h] = pPage; +#ifdef SQLITE_WIN32_HAS_ANSI + else{ + attr = osGetFileAttributesA((char*)zConverted); } - -fetch_out: - if( pPage && iKey>pCache->iMaxKey ){ - pCache->iMaxKey = iKey; +#endif + sqlite3_free(zConverted); + switch( flags ){ + case SQLITE_ACCESS_READ: + case SQLITE_ACCESS_EXISTS: + rc = attr!=INVALID_FILE_ATTRIBUTES; + break; + case SQLITE_ACCESS_READWRITE: + rc = attr!=INVALID_FILE_ATTRIBUTES && + (attr & FILE_ATTRIBUTE_READONLY)==0; + break; + default: + assert(!"Invalid flags argument"); } - if( createFlag==1 ) sqlite3EndBenignMalloc(); - pcache1LeaveMutex(); - return (pPage ? PGHDR1_TO_PAGE(pPage) : 0); + *pResOut = rc; + return SQLITE_OK; } /* -** Implementation of the sqlite3_pcache.xUnpin method. -** -** Mark a page as unpinned (eligible for asynchronous recycling). +** Returns non-zero if the specified path name should be used verbatim. If +** non-zero is returned from this function, the calling function must simply +** use the provided path name verbatim -OR- resolve it into a full path name +** using the GetFullPathName Win32 API function (if available). */ -static void pcache1Unpin(sqlite3_pcache *p, void *pPg, int reuseUnlikely){ - PCache1 *pCache = (PCache1 *)p; - PgHdr1 *pPage = PAGE_TO_PGHDR1(pCache, pPg); - - assert( pPage->pCache==pCache ); - pcache1EnterMutex(); - - /* It is an error to call this function if the page is already - ** part of the global LRU list. +static BOOL winIsVerbatimPathname( + const char *zPathname +){ + /* + ** If the path name starts with a forward slash or a backslash, it is either + ** a legal UNC name, a volume relative path, or an absolute path name in the + ** "Unix" format on Windows. There is no easy way to differentiate between + ** the final two cases; therefore, we return the safer return value of TRUE + ** so that callers of this function will simply use it verbatim. */ - assert( pPage->pLruPrev==0 && pPage->pLruNext==0 ); - assert( pcache1.pLruHead!=pPage && pcache1.pLruTail!=pPage ); + if ( zPathname[0]=='/' || zPathname[0]=='\\' ){ + return TRUE; + } - if( reuseUnlikely || pcache1.nCurrentPage>pcache1.nMaxPage ){ - pcache1RemoveFromHash(pPage); - pcache1FreePage(pPage); - }else{ - /* Add the page to the global LRU list. Normally, the page is added to - ** the head of the list (last page to be recycled). However, if the - ** reuseUnlikely flag passed to this function is true, the page is added - ** to the tail of the list (first page to be recycled). - */ - if( pcache1.pLruHead ){ - pcache1.pLruHead->pLruPrev = pPage; - pPage->pLruNext = pcache1.pLruHead; - pcache1.pLruHead = pPage; - }else{ - pcache1.pLruTail = pPage; - pcache1.pLruHead = pPage; - } - pCache->nRecyclable++; + /* + ** If the path name starts with a letter and a colon it is either a volume + ** relative path or an absolute path. Callers of this function must not + ** attempt to treat it as a relative path name (i.e. they should simply use + ** it verbatim). + */ + if ( sqlite3Isalpha(zPathname[0]) && zPathname[1]==':' ){ + return TRUE; } - pcache1LeaveMutex(); + /* + ** If we get to this point, the path name should almost certainly be a purely + ** relative one (i.e. not a UNC name, not absolute, and not volume relative). + */ + return FALSE; } /* -** Implementation of the sqlite3_pcache.xRekey method. +** Turn a relative pathname into a full pathname. Write the full +** pathname into zOut[]. zOut[] will be at least pVfs->mxPathname +** bytes in size. */ -static void pcache1Rekey( - sqlite3_pcache *p, - void *pPg, - unsigned int iOld, - unsigned int iNew +static int winFullPathname( + sqlite3_vfs *pVfs, /* Pointer to vfs object */ + const char *zRelative, /* Possibly relative input path */ + int nFull, /* Size of output buffer in bytes */ + char *zFull /* Output buffer */ ){ - PCache1 *pCache = (PCache1 *)p; - PgHdr1 *pPage = PAGE_TO_PGHDR1(pCache, pPg); - PgHdr1 **pp; - unsigned int h; - assert( pPage->iKey==iOld ); - assert( pPage->pCache==pCache ); - - pcache1EnterMutex(); + +#if defined(__CYGWIN__) + SimulateIOError( return SQLITE_ERROR ); + UNUSED_PARAMETER(nFull); + assert( pVfs->mxPathname>=MAX_PATH ); + assert( nFull>=pVfs->mxPathname ); + if ( sqlite3_data_directory && !winIsVerbatimPathname(zRelative) ){ + /* + ** NOTE: We are dealing with a relative path name and the data + ** directory has been set. Therefore, use it as the basis + ** for converting the relative path name to an absolute + ** one by prepending the data directory and a slash. + */ + char zOut[MAX_PATH+1]; + memset(zOut, 0, MAX_PATH+1); + cygwin_conv_to_win32_path(zRelative, zOut); /* POSIX to Win32 */ + sqlite3_snprintf(MIN(nFull, pVfs->mxPathname), zFull, "%s\\%s", + sqlite3_data_directory, zOut); + }else{ + /* + ** NOTE: The Cygwin docs state that the maximum length needed + ** for the buffer passed to cygwin_conv_to_full_win32_path + ** is MAX_PATH. + */ + cygwin_conv_to_full_win32_path(zRelative, zFull); + } + return SQLITE_OK; +#endif - h = iOld%pCache->nHash; - pp = &pCache->apHash[h]; - while( (*pp)!=pPage ){ - pp = &(*pp)->pNext; +#if (SQLITE_OS_WINCE || SQLITE_OS_WINRT) && !defined(__CYGWIN__) + SimulateIOError( return SQLITE_ERROR ); + /* WinCE has no concept of a relative pathname, or so I am told. */ + /* WinRT has no way to convert a relative path to an absolute one. */ + if ( sqlite3_data_directory && !winIsVerbatimPathname(zRelative) ){ + /* + ** NOTE: We are dealing with a relative path name and the data + ** directory has been set. Therefore, use it as the basis + ** for converting the relative path name to an absolute + ** one by prepending the data directory and a backslash. + */ + sqlite3_snprintf(MIN(nFull, pVfs->mxPathname), zFull, "%s\\%s", + sqlite3_data_directory, zRelative); + }else{ + sqlite3_snprintf(MIN(nFull, pVfs->mxPathname), zFull, "%s", zRelative); } - *pp = pPage->pNext; + return SQLITE_OK; +#endif - h = iNew%pCache->nHash; - pPage->iKey = iNew; - pPage->pNext = pCache->apHash[h]; - pCache->apHash[h] = pPage; +#if !SQLITE_OS_WINCE && !SQLITE_OS_WINRT && !defined(__CYGWIN__) + int nByte; + void *zConverted; + char *zOut; - if( iNew>pCache->iMaxKey ){ - pCache->iMaxKey = iNew; + /* If this path name begins with "/X:", where "X" is any alphabetic + ** character, discard the initial "/" from the pathname. + */ + if( zRelative[0]=='/' && sqlite3Isalpha(zRelative[1]) && zRelative[2]==':' ){ + zRelative++; } - pcache1LeaveMutex(); + /* It's odd to simulate an io-error here, but really this is just + ** using the io-error infrastructure to test that SQLite handles this + ** function failing. This function could fail if, for example, the + ** current working directory has been unlinked. + */ + SimulateIOError( return SQLITE_ERROR ); + if ( sqlite3_data_directory && !winIsVerbatimPathname(zRelative) ){ + /* + ** NOTE: We are dealing with a relative path name and the data + ** directory has been set. Therefore, use it as the basis + ** for converting the relative path name to an absolute + ** one by prepending the data directory and a backslash. + */ + sqlite3_snprintf(MIN(nFull, pVfs->mxPathname), zFull, "%s\\%s", + sqlite3_data_directory, zRelative); + return SQLITE_OK; + } + zConverted = convertUtf8Filename(zRelative); + if( zConverted==0 ){ + return SQLITE_IOERR_NOMEM; + } + if( isNT() ){ + LPWSTR zTemp; + nByte = osGetFullPathNameW((LPCWSTR)zConverted, 0, 0, 0) + 3; + zTemp = sqlite3_malloc( nByte*sizeof(zTemp[0]) ); + if( zTemp==0 ){ + sqlite3_free(zConverted); + return SQLITE_IOERR_NOMEM; + } + osGetFullPathNameW((LPCWSTR)zConverted, nByte, zTemp, 0); + sqlite3_free(zConverted); + zOut = unicodeToUtf8(zTemp); + sqlite3_free(zTemp); + } +#ifdef SQLITE_WIN32_HAS_ANSI + else{ + char *zTemp; + nByte = osGetFullPathNameA((char*)zConverted, 0, 0, 0) + 3; + zTemp = sqlite3_malloc( nByte*sizeof(zTemp[0]) ); + if( zTemp==0 ){ + sqlite3_free(zConverted); + return SQLITE_IOERR_NOMEM; + } + osGetFullPathNameA((char*)zConverted, nByte, zTemp, 0); + sqlite3_free(zConverted); + zOut = sqlite3_win32_mbcs_to_utf8(zTemp); + sqlite3_free(zTemp); + } +#endif + if( zOut ){ + sqlite3_snprintf(MIN(nFull, pVfs->mxPathname), zFull, "%s", zOut); + sqlite3_free(zOut); + return SQLITE_OK; + }else{ + return SQLITE_IOERR_NOMEM; + } +#endif } +#ifndef SQLITE_OMIT_LOAD_EXTENSION /* -** Implementation of the sqlite3_pcache.xTruncate method. -** -** Discard all unpinned pages in the cache with a page number equal to -** or greater than parameter iLimit. Any pinned pages with a page number -** equal to or greater than iLimit are implicitly unpinned. +** Interfaces for opening a shared library, finding entry points +** within the shared library, and closing the shared library. */ -static void pcache1Truncate(sqlite3_pcache *p, unsigned int iLimit){ - PCache1 *pCache = (PCache1 *)p; - pcache1EnterMutex(); - if( iLimit<=pCache->iMaxKey ){ - pcache1TruncateUnsafe(pCache, iLimit); - pCache->iMaxKey = iLimit-1; +/* +** Interfaces for opening a shared library, finding entry points +** within the shared library, and closing the shared library. +*/ +static void *winDlOpen(sqlite3_vfs *pVfs, const char *zFilename){ + HANDLE h; + void *zConverted = convertUtf8Filename(zFilename); + UNUSED_PARAMETER(pVfs); + if( zConverted==0 ){ + return 0; + } + if( isNT() ){ +#if SQLITE_OS_WINRT + h = osLoadPackagedLibrary((LPCWSTR)zConverted, 0); +#else + h = osLoadLibraryW((LPCWSTR)zConverted); +#endif } - pcache1LeaveMutex(); +#ifdef SQLITE_WIN32_HAS_ANSI + else{ + h = osLoadLibraryA((char*)zConverted); + } +#endif + sqlite3_free(zConverted); + return (void*)h; +} +static void winDlError(sqlite3_vfs *pVfs, int nBuf, char *zBufOut){ + UNUSED_PARAMETER(pVfs); + getLastErrorMsg(osGetLastError(), nBuf, zBufOut); +} +static void (*winDlSym(sqlite3_vfs *pVfs, void *pHandle, const char *zSymbol))(void){ + UNUSED_PARAMETER(pVfs); + return (void(*)(void))osGetProcAddressA((HANDLE)pHandle, zSymbol); +} +static void winDlClose(sqlite3_vfs *pVfs, void *pHandle){ + UNUSED_PARAMETER(pVfs); + osFreeLibrary((HANDLE)pHandle); } +#else /* if SQLITE_OMIT_LOAD_EXTENSION is defined: */ + #define winDlOpen 0 + #define winDlError 0 + #define winDlSym 0 + #define winDlClose 0 +#endif + /* -** Implementation of the sqlite3_pcache.xDestroy method. -** -** Destroy a cache allocated using pcache1Create(). +** Write up to nBuf bytes of randomness into zBuf. */ -static void pcache1Destroy(sqlite3_pcache *p){ - PCache1 *pCache = (PCache1 *)p; - pcache1EnterMutex(); - pcache1TruncateUnsafe(pCache, 0); - pcache1.nMaxPage -= pCache->nMax; - pcache1.nMinPage -= pCache->nMin; - pcache1EnforceMaxPage(); - pcache1LeaveMutex(); - sqlite3_free(pCache->apHash); - sqlite3_free(pCache); +static int winRandomness(sqlite3_vfs *pVfs, int nBuf, char *zBuf){ + int n = 0; + UNUSED_PARAMETER(pVfs); +#if defined(SQLITE_TEST) + n = nBuf; + memset(zBuf, 0, nBuf); +#else + if( sizeof(SYSTEMTIME)<=nBuf-n ){ + SYSTEMTIME x; + osGetSystemTime(&x); + memcpy(&zBuf[n], &x, sizeof(x)); + n += sizeof(x); + } + if( sizeof(DWORD)<=nBuf-n ){ + DWORD pid = osGetCurrentProcessId(); + memcpy(&zBuf[n], &pid, sizeof(pid)); + n += sizeof(pid); + } +#if SQLITE_OS_WINRT + if( sizeof(ULONGLONG)<=nBuf-n ){ + ULONGLONG cnt = osGetTickCount64(); + memcpy(&zBuf[n], &cnt, sizeof(cnt)); + n += sizeof(cnt); + } +#else + if( sizeof(DWORD)<=nBuf-n ){ + DWORD cnt = osGetTickCount(); + memcpy(&zBuf[n], &cnt, sizeof(cnt)); + n += sizeof(cnt); + } +#endif + if( sizeof(LARGE_INTEGER)<=nBuf-n ){ + LARGE_INTEGER i; + osQueryPerformanceCounter(&i); + memcpy(&zBuf[n], &i, sizeof(i)); + n += sizeof(i); + } +#endif + return n; } + /* -** This function is called during initialization (sqlite3_initialize()) to -** install the default pluggable cache module, assuming the user has not -** already provided an alternative. +** Sleep for a little while. Return the amount of time slept. */ -SQLITE_PRIVATE void sqlite3PCacheSetDefault(void){ - static sqlite3_pcache_methods defaultMethods = { - 0, /* pArg */ - pcache1Init, /* xInit */ - pcache1Shutdown, /* xShutdown */ - pcache1Create, /* xCreate */ - pcache1Cachesize, /* xCachesize */ - pcache1Pagecount, /* xPagecount */ - pcache1Fetch, /* xFetch */ - pcache1Unpin, /* xUnpin */ - pcache1Rekey, /* xRekey */ - pcache1Truncate, /* xTruncate */ - pcache1Destroy /* xDestroy */ - }; - sqlite3_config(SQLITE_CONFIG_PCACHE, &defaultMethods); +static int winSleep(sqlite3_vfs *pVfs, int microsec){ + sqlite3_win32_sleep((microsec+999)/1000); + UNUSED_PARAMETER(pVfs); + return ((microsec+999)/1000)*1000; } -#ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT /* -** This function is called to free superfluous dynamically allocated memory -** held by the pager system. Memory in use by any SQLite pager allocated -** by the current thread may be sqlite3_free()ed. +** The following variable, if set to a non-zero value, is interpreted as +** the number of seconds since 1970 and is used to set the result of +** sqlite3OsCurrentTime() during testing. +*/ +#ifdef SQLITE_TEST +SQLITE_API int sqlite3_current_time = 0; /* Fake system time in seconds since 1970. */ +#endif + +/* +** Find the current time (in Universal Coordinated Time). Write into *piNow +** the current time and date as a Julian Day number times 86_400_000. In +** other words, write into *piNow the number of milliseconds since the Julian +** epoch of noon in Greenwich on November 24, 4714 B.C according to the +** proleptic Gregorian calendar. ** -** nReq is the number of bytes of memory required. Once this much has -** been released, the function returns. The return value is the total number -** of bytes of memory released. +** On success, return SQLITE_OK. Return SQLITE_ERROR if the time and date +** cannot be found. */ -SQLITE_PRIVATE int sqlite3PcacheReleaseMemory(int nReq){ - int nFree = 0; - if( pcache1.pStart==0 ){ - PgHdr1 *p; - pcache1EnterMutex(); - while( (nReq<0 || nFreepLruNext){ - nRecyclable++; +static int winCurrentTime(sqlite3_vfs *pVfs, double *prNow){ + int rc; + sqlite3_int64 i; + rc = winCurrentTimeInt64(pVfs, &i); + if( !rc ){ + *prNow = i/86400000.0; } - *pnCurrent = pcache1.nCurrentPage; - *pnMax = pcache1.nMaxPage; - *pnMin = pcache1.nMinPage; - *pnRecyclable = nRecyclable; + return rc; } -#endif -/************** End of pcache1.c *********************************************/ -/************** Begin file rowset.c ******************************************/ /* -** 2008 December 3 -** -** The author disclaims copyright to this source code. In place of -** a legal notice, here is a blessing: -** -** May you do good and not evil. -** May you find forgiveness for yourself and forgive others. -** May you share freely, never taking more than you give. +** The idea is that this function works like a combination of +** GetLastError() and FormatMessage() on Windows (or errno and +** strerror_r() on Unix). After an error is returned by an OS +** function, SQLite calls this function with zBuf pointing to +** a buffer of nBuf bytes. The OS layer should populate the +** buffer with a nul-terminated UTF-8 encoded error message +** describing the last IO error to have occurred within the calling +** thread. ** -************************************************************************* +** If the error message is too large for the supplied buffer, +** it should be truncated. The return value of xGetLastError +** is zero if the error message fits in the buffer, or non-zero +** otherwise (if the message was truncated). If non-zero is returned, +** then it is not necessary to include the nul-terminator character +** in the output buffer. ** -** This module implements an object we call a "RowSet". +** Not supplying an error message will have no adverse effect +** on SQLite. It is fine to have an implementation that never +** returns an error message: ** -** The RowSet object is a collection of rowids. Rowids -** are inserted into the RowSet in an arbitrary order. Inserts -** can be intermixed with tests to see if a given rowid has been -** previously inserted into the RowSet. -** -** After all inserts are finished, it is possible to extract the -** elements of the RowSet in sorted order. Once this extraction -** process has started, no new elements may be inserted. -** -** Hence, the primitive operations for a RowSet are: +** int xGetLastError(sqlite3_vfs *pVfs, int nBuf, char *zBuf){ +** assert(zBuf[0]=='\0'); +** return 0; +** } ** -** CREATE -** INSERT -** TEST -** SMALLEST -** DESTROY +** However if an error message is supplied, it will be incorporated +** by sqlite into the error message available to the user using +** sqlite3_errmsg(), possibly making IO errors easier to debug. +*/ +static int winGetLastError(sqlite3_vfs *pVfs, int nBuf, char *zBuf){ + UNUSED_PARAMETER(pVfs); + return getLastErrorMsg(osGetLastError(), nBuf, zBuf); +} + +/* +** Initialize and deinitialize the operating system interface. +*/ +SQLITE_API int sqlite3_os_init(void){ + static sqlite3_vfs winVfs = { + 3, /* iVersion */ + sizeof(winFile), /* szOsFile */ + MAX_PATH, /* mxPathname */ + 0, /* pNext */ + "win32", /* zName */ + 0, /* pAppData */ + winOpen, /* xOpen */ + winDelete, /* xDelete */ + winAccess, /* xAccess */ + winFullPathname, /* xFullPathname */ + winDlOpen, /* xDlOpen */ + winDlError, /* xDlError */ + winDlSym, /* xDlSym */ + winDlClose, /* xDlClose */ + winRandomness, /* xRandomness */ + winSleep, /* xSleep */ + winCurrentTime, /* xCurrentTime */ + winGetLastError, /* xGetLastError */ + winCurrentTimeInt64, /* xCurrentTimeInt64 */ + winSetSystemCall, /* xSetSystemCall */ + winGetSystemCall, /* xGetSystemCall */ + winNextSystemCall, /* xNextSystemCall */ + }; + + /* Double-check that the aSyscall[] array has been constructed + ** correctly. See ticket [bb3a86e890c8e96ab] */ + assert( ArraySize(aSyscall)==73 ); + +#ifndef SQLITE_OMIT_WAL + /* get memory map allocation granularity */ + memset(&winSysInfo, 0, sizeof(SYSTEM_INFO)); +#if SQLITE_OS_WINRT + osGetNativeSystemInfo(&winSysInfo); +#else + osGetSystemInfo(&winSysInfo); +#endif + assert(winSysInfo.dwAllocationGranularity > 0); +#endif + + sqlite3_vfs_register(&winVfs, 1); + return SQLITE_OK; +} + +SQLITE_API int sqlite3_os_end(void){ +#if SQLITE_OS_WINRT + if( sleepObj != NULL ){ + osCloseHandle(sleepObj); + sleepObj = NULL; + } +#endif + return SQLITE_OK; +} + +#endif /* SQLITE_OS_WIN */ + +/************** End of os_win.c **********************************************/ +/************** Begin file bitvec.c ******************************************/ +/* +** 2008 February 16 ** -** The CREATE and DESTROY primitives are the constructor and destructor, -** obviously. The INSERT primitive adds a new element to the RowSet. -** TEST checks to see if an element is already in the RowSet. SMALLEST -** extracts the least value from the RowSet. +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: ** -** The INSERT primitive might allocate additional memory. Memory is -** allocated in chunks so most INSERTs do no allocation. There is an -** upper bound on the size of allocated memory. No memory is freed -** until DESTROY. +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. ** -** The TEST primitive includes a "batch" number. The TEST primitive -** will only see elements that were inserted before the last change -** in the batch number. In other words, if an INSERT occurs between -** two TESTs where the TESTs have the same batch nubmer, then the -** value added by the INSERT will not be visible to the second TEST. -** The initial batch number is zero, so if the very first TEST contains -** a non-zero batch number, it will see all prior INSERTs. +************************************************************************* +** This file implements an object that represents a fixed-length +** bitmap. Bits are numbered starting with 1. ** -** No INSERTs may occurs after a SMALLEST. An assertion will fail if -** that is attempted. +** A bitmap is used to record which pages of a database file have been +** journalled during a transaction, or which pages have the "dont-write" +** property. Usually only a few pages are meet either condition. +** So the bitmap is usually sparse and has low cardinality. +** But sometimes (for example when during a DROP of a large table) most +** or all of the pages in a database can get journalled. In those cases, +** the bitmap becomes dense with high cardinality. The algorithm needs +** to handle both cases well. ** -** The cost of an INSERT is roughly constant. (Sometime new memory -** has to be allocated on an INSERT.) The cost of a TEST with a new -** batch number is O(NlogN) where N is the number of elements in the RowSet. -** The cost of a TEST using the same batch number is O(logN). The cost -** of the first SMALLEST is O(NlogN). Second and subsequent SMALLEST -** primitives are constant time. The cost of DESTROY is O(N). +** The size of the bitmap is fixed when the object is created. ** -** There is an added cost of O(N) when switching between TEST and -** SMALLEST primitives. +** All bits are clear when the bitmap is created. Individual bits +** may be set or cleared one at a time. ** -** $Id: rowset.c,v 1.7 2009/05/22 01:00:13 drh Exp $ +** Test operations are about 100 times more common that set operations. +** Clear operations are exceedingly rare. There are usually between +** 5 and 500 set operations per Bitvec object, though the number of sets can +** sometimes grow into tens of thousands or larger. The size of the +** Bitvec object is the number of pages in the database file at the +** start of a transaction, and is thus usually less than a few thousand, +** but can be as large as 2 billion for a really big database. */ +/* Size of the Bitvec structure in bytes. */ +#define BITVEC_SZ 512 -/* -** Target size for allocation chunks. -*/ -#define ROWSET_ALLOCATION_SIZE 1024 +/* Round the union size down to the nearest pointer boundary, since that's how +** it will be aligned within the Bitvec struct. */ +#define BITVEC_USIZE (((BITVEC_SZ-(3*sizeof(u32)))/sizeof(Bitvec*))*sizeof(Bitvec*)) -/* -** The number of rowset entries per allocation chunk. -*/ -#define ROWSET_ENTRY_PER_CHUNK \ - ((ROWSET_ALLOCATION_SIZE-8)/sizeof(struct RowSetEntry)) +/* Type of the array "element" for the bitmap representation. +** Should be a power of 2, and ideally, evenly divide into BITVEC_USIZE. +** Setting this to the "natural word" size of your CPU may improve +** performance. */ +#define BITVEC_TELEM u8 +/* Size, in bits, of the bitmap element. */ +#define BITVEC_SZELEM 8 +/* Number of elements in a bitmap array. */ +#define BITVEC_NELEM (BITVEC_USIZE/sizeof(BITVEC_TELEM)) +/* Number of bits in the bitmap array. */ +#define BITVEC_NBIT (BITVEC_NELEM*BITVEC_SZELEM) -/* -** Each entry in a RowSet is an instance of the following object. -*/ -struct RowSetEntry { - i64 v; /* ROWID value for this entry */ - struct RowSetEntry *pRight; /* Right subtree (larger entries) or list */ - struct RowSetEntry *pLeft; /* Left subtree (smaller entries) */ -}; +/* Number of u32 values in hash table. */ +#define BITVEC_NINT (BITVEC_USIZE/sizeof(u32)) +/* Maximum number of entries in hash table before +** sub-dividing and re-hashing. */ +#define BITVEC_MXHASH (BITVEC_NINT/2) +/* Hashing function for the aHash representation. +** Empirical testing showed that the *37 multiplier +** (an arbitrary prime)in the hash function provided +** no fewer collisions than the no-op *1. */ +#define BITVEC_HASH(X) (((X)*1)%BITVEC_NINT) + +#define BITVEC_NPTR (BITVEC_USIZE/sizeof(Bitvec *)) -/* -** RowSetEntry objects are allocated in large chunks (instances of the -** following structure) to reduce memory allocation overhead. The -** chunks are kept on a linked list so that they can be deallocated -** when the RowSet is destroyed. -*/ -struct RowSetChunk { - struct RowSetChunk *pNextChunk; /* Next chunk on list of them all */ - struct RowSetEntry aEntry[ROWSET_ENTRY_PER_CHUNK]; /* Allocated entries */ -}; /* -** A RowSet in an instance of the following structure. +** A bitmap is an instance of the following structure. ** -** A typedef of this structure if found in sqliteInt.h. +** This bitmap records the existance of zero or more bits +** with values between 1 and iSize, inclusive. +** +** There are three possible representations of the bitmap. +** If iSize<=BITVEC_NBIT, then Bitvec.u.aBitmap[] is a straight +** bitmap. The least significant bit is bit 1. +** +** If iSize>BITVEC_NBIT and iDivisor==0 then Bitvec.u.aHash[] is +** a hash table that will hold up to BITVEC_MXHASH distinct values. +** +** Otherwise, the value i is redirected into one of BITVEC_NPTR +** sub-bitmaps pointed to by Bitvec.u.apSub[]. Each subbitmap +** handles up to iDivisor separate values of i. apSub[0] holds +** values between 1 and iDivisor. apSub[1] holds values between +** iDivisor+1 and 2*iDivisor. apSub[N] holds values between +** N*iDivisor+1 and (N+1)*iDivisor. Each subbitmap is normalized +** to hold deal with values between 1 and iDivisor. */ -struct RowSet { - struct RowSetChunk *pChunk; /* List of all chunk allocations */ - sqlite3 *db; /* The database connection */ - struct RowSetEntry *pEntry; /* List of entries using pRight */ - struct RowSetEntry *pLast; /* Last entry on the pEntry list */ - struct RowSetEntry *pFresh; /* Source of new entry objects */ - struct RowSetEntry *pTree; /* Binary tree of entries */ - u16 nFresh; /* Number of objects on pFresh */ - u8 isSorted; /* True if pEntry is sorted */ - u8 iBatch; /* Current insert batch */ +struct Bitvec { + u32 iSize; /* Maximum bit index. Max iSize is 4,294,967,296. */ + u32 nSet; /* Number of bits that are set - only valid for aHash + ** element. Max is BITVEC_NINT. For BITVEC_SZ of 512, + ** this would be 125. */ + u32 iDivisor; /* Number of bits handled by each apSub[] entry. */ + /* Should >=0 for apSub element. */ + /* Max iDivisor is max(u32) / BITVEC_NPTR + 1. */ + /* For a BITVEC_SZ of 512, this would be 34,359,739. */ + union { + BITVEC_TELEM aBitmap[BITVEC_NELEM]; /* Bitmap representation */ + u32 aHash[BITVEC_NINT]; /* Hash table representation */ + Bitvec *apSub[BITVEC_NPTR]; /* Recursive representation */ + } u; }; /* -** Turn bulk memory into a RowSet object. N bytes of memory -** are available at pSpace. The db pointer is used as a memory context -** for any subsequent allocations that need to occur. -** Return a pointer to the new RowSet object. -** -** It must be the case that N is sufficient to make a Rowset. If not -** an assertion fault occurs. -** -** If N is larger than the minimum, use the surplus as an initial -** allocation of entries available to be filled. +** Create a new bitmap object able to handle bits between 0 and iSize, +** inclusive. Return a pointer to the new object. Return NULL if +** malloc fails. */ -SQLITE_PRIVATE RowSet *sqlite3RowSetInit(sqlite3 *db, void *pSpace, unsigned int N){ - RowSet *p; - assert( N >= ROUND8(sizeof(*p)) ); - p = pSpace; - p->pChunk = 0; - p->db = db; - p->pEntry = 0; - p->pLast = 0; - p->pTree = 0; - p->pFresh = (struct RowSetEntry*)(ROUND8(sizeof(*p)) + (char*)p); - p->nFresh = (u16)((N - ROUND8(sizeof(*p)))/sizeof(struct RowSetEntry)); - p->isSorted = 1; - p->iBatch = 0; +SQLITE_PRIVATE Bitvec *sqlite3BitvecCreate(u32 iSize){ + Bitvec *p; + assert( sizeof(*p)==BITVEC_SZ ); + p = sqlite3MallocZero( sizeof(*p) ); + if( p ){ + p->iSize = iSize; + } return p; } /* -** Deallocate all chunks from a RowSet. This frees all memory that -** the RowSet has allocated over its lifetime. This routine is -** the destructor for the RowSet. +** Check to see if the i-th bit is set. Return true or false. +** If p is NULL (if the bitmap has not been created) or if +** i is out of range, then return false. */ -SQLITE_PRIVATE void sqlite3RowSetClear(RowSet *p){ - struct RowSetChunk *pChunk, *pNextChunk; - for(pChunk=p->pChunk; pChunk; pChunk = pNextChunk){ - pNextChunk = pChunk->pNextChunk; - sqlite3DbFree(p->db, pChunk); +SQLITE_PRIVATE int sqlite3BitvecTest(Bitvec *p, u32 i){ + if( p==0 ) return 0; + if( i>p->iSize || i==0 ) return 0; + i--; + while( p->iDivisor ){ + u32 bin = i/p->iDivisor; + i = i%p->iDivisor; + p = p->u.apSub[bin]; + if (!p) { + return 0; + } + } + if( p->iSize<=BITVEC_NBIT ){ + return (p->u.aBitmap[i/BITVEC_SZELEM] & (1<<(i&(BITVEC_SZELEM-1))))!=0; + } else{ + u32 h = BITVEC_HASH(i++); + while( p->u.aHash[h] ){ + if( p->u.aHash[h]==i ) return 1; + h = (h+1) % BITVEC_NINT; + } + return 0; } - p->pChunk = 0; - p->nFresh = 0; - p->pEntry = 0; - p->pLast = 0; - p->pTree = 0; - p->isSorted = 1; } /* -** Insert a new value into a RowSet. +** Set the i-th bit. Return 0 on success and an error code if +** anything goes wrong. ** -** The mallocFailed flag of the database connection is set if a -** memory allocation fails. +** This routine might cause sub-bitmaps to be allocated. Failing +** to get the memory needed to hold the sub-bitmap is the only +** that can go wrong with an insert, assuming p and i are valid. +** +** The calling function must ensure that p is a valid Bitvec object +** and that the value for "i" is within range of the Bitvec object. +** Otherwise the behavior is undefined. */ -SQLITE_PRIVATE void sqlite3RowSetInsert(RowSet *p, i64 rowid){ - struct RowSetEntry *pEntry; /* The new entry */ - struct RowSetEntry *pLast; /* The last prior entry */ - assert( p!=0 ); - if( p->nFresh==0 ){ - struct RowSetChunk *pNew; - pNew = sqlite3DbMallocRaw(p->db, sizeof(*pNew)); - if( pNew==0 ){ - return; +SQLITE_PRIVATE int sqlite3BitvecSet(Bitvec *p, u32 i){ + u32 h; + if( p==0 ) return SQLITE_OK; + assert( i>0 ); + assert( i<=p->iSize ); + i--; + while((p->iSize > BITVEC_NBIT) && p->iDivisor) { + u32 bin = i/p->iDivisor; + i = i%p->iDivisor; + if( p->u.apSub[bin]==0 ){ + p->u.apSub[bin] = sqlite3BitvecCreate( p->iDivisor ); + if( p->u.apSub[bin]==0 ) return SQLITE_NOMEM; } - pNew->pNextChunk = p->pChunk; - p->pChunk = pNew; - p->pFresh = pNew->aEntry; - p->nFresh = ROWSET_ENTRY_PER_CHUNK; + p = p->u.apSub[bin]; } - pEntry = p->pFresh++; - p->nFresh--; - pEntry->v = rowid; - pEntry->pRight = 0; - pLast = p->pLast; - if( pLast ){ - if( p->isSorted && rowid<=pLast->v ){ - p->isSorted = 0; + if( p->iSize<=BITVEC_NBIT ){ + p->u.aBitmap[i/BITVEC_SZELEM] |= 1 << (i&(BITVEC_SZELEM-1)); + return SQLITE_OK; + } + h = BITVEC_HASH(i++); + /* if there wasn't a hash collision, and this doesn't */ + /* completely fill the hash, then just add it without */ + /* worring about sub-dividing and re-hashing. */ + if( !p->u.aHash[h] ){ + if (p->nSet<(BITVEC_NINT-1)) { + goto bitvec_set_end; + } else { + goto bitvec_set_rehash; } - pLast->pRight = pEntry; - }else{ - assert( p->pEntry==0 ); /* Fires if INSERT after SMALLEST */ - p->pEntry = pEntry; } - p->pLast = pEntry; + /* there was a collision, check to see if it's already */ + /* in hash, if not, try to find a spot for it */ + do { + if( p->u.aHash[h]==i ) return SQLITE_OK; + h++; + if( h>=BITVEC_NINT ) h = 0; + } while( p->u.aHash[h] ); + /* we didn't find it in the hash. h points to the first */ + /* available free spot. check to see if this is going to */ + /* make our hash too "full". */ +bitvec_set_rehash: + if( p->nSet>=BITVEC_MXHASH ){ + unsigned int j; + int rc; + u32 *aiValues = sqlite3StackAllocRaw(0, sizeof(p->u.aHash)); + if( aiValues==0 ){ + return SQLITE_NOMEM; + }else{ + memcpy(aiValues, p->u.aHash, sizeof(p->u.aHash)); + memset(p->u.apSub, 0, sizeof(p->u.apSub)); + p->iDivisor = (p->iSize + BITVEC_NPTR - 1)/BITVEC_NPTR; + rc = sqlite3BitvecSet(p, i); + for(j=0; jnSet++; + p->u.aHash[h] = i; + return SQLITE_OK; } /* -** Merge two lists of RowSetEntry objects. Remove duplicates. +** Clear the i-th bit. ** -** The input lists are connected via pRight pointers and are -** assumed to each already be in sorted order. +** pBuf must be a pointer to at least BITVEC_SZ bytes of temporary storage +** that BitvecClear can use to rebuilt its hash table. */ -static struct RowSetEntry *rowSetMerge( - struct RowSetEntry *pA, /* First sorted list to be merged */ - struct RowSetEntry *pB /* Second sorted list to be merged */ -){ - struct RowSetEntry head; - struct RowSetEntry *pTail; - - pTail = &head; - while( pA && pB ){ - assert( pA->pRight==0 || pA->v<=pA->pRight->v ); - assert( pB->pRight==0 || pB->v<=pB->pRight->v ); - if( pA->vv ){ - pTail->pRight = pA; - pA = pA->pRight; - pTail = pTail->pRight; - }else if( pB->vv ){ - pTail->pRight = pB; - pB = pB->pRight; - pTail = pTail->pRight; - }else{ - pA = pA->pRight; +SQLITE_PRIVATE void sqlite3BitvecClear(Bitvec *p, u32 i, void *pBuf){ + if( p==0 ) return; + assert( i>0 ); + i--; + while( p->iDivisor ){ + u32 bin = i/p->iDivisor; + i = i%p->iDivisor; + p = p->u.apSub[bin]; + if (!p) { + return; } } - if( pA ){ - assert( pA->pRight==0 || pA->v<=pA->pRight->v ); - pTail->pRight = pA; + if( p->iSize<=BITVEC_NBIT ){ + p->u.aBitmap[i/BITVEC_SZELEM] &= ~(1 << (i&(BITVEC_SZELEM-1))); }else{ - assert( pB==0 || pB->pRight==0 || pB->v<=pB->pRight->v ); - pTail->pRight = pB; + unsigned int j; + u32 *aiValues = pBuf; + memcpy(aiValues, p->u.aHash, sizeof(p->u.aHash)); + memset(p->u.aHash, 0, sizeof(p->u.aHash)); + p->nSet = 0; + for(j=0; jnSet++; + while( p->u.aHash[h] ){ + h++; + if( h>=BITVEC_NINT ) h = 0; + } + p->u.aHash[h] = aiValues[j]; + } + } } - return head.pRight; } /* -** Sort all elements on the pEntry list of the RowSet into ascending order. -*/ -static void rowSetSort(RowSet *p){ - unsigned int i; - struct RowSetEntry *pEntry; - struct RowSetEntry *aBucket[40]; - - assert( p->isSorted==0 ); - memset(aBucket, 0, sizeof(aBucket)); - while( p->pEntry ){ - pEntry = p->pEntry; - p->pEntry = pEntry->pRight; - pEntry->pRight = 0; - for(i=0; aBucket[i]; i++){ - pEntry = rowSetMerge(aBucket[i], pEntry); - aBucket[i] = 0; +** Destroy a bitmap object. Reclaim all memory used. +*/ +SQLITE_PRIVATE void sqlite3BitvecDestroy(Bitvec *p){ + if( p==0 ) return; + if( p->iDivisor ){ + unsigned int i; + for(i=0; iu.apSub[i]); } - aBucket[i] = pEntry; } - pEntry = 0; - for(i=0; ipEntry = pEntry; - p->pLast = 0; - p->isSorted = 1; + sqlite3_free(p); } - /* -** The input, pIn, is a binary tree (or subtree) of RowSetEntry objects. -** Convert this tree into a linked list connected by the pRight pointers -** and return pointers to the first and last elements of the new list. +** Return the value of the iSize parameter specified when Bitvec *p +** was created. */ -static void rowSetTreeToList( - struct RowSetEntry *pIn, /* Root of the input tree */ - struct RowSetEntry **ppFirst, /* Write head of the output list here */ - struct RowSetEntry **ppLast /* Write tail of the output list here */ -){ - assert( pIn!=0 ); - if( pIn->pLeft ){ - struct RowSetEntry *p; - rowSetTreeToList(pIn->pLeft, ppFirst, &p); - p->pRight = pIn; - }else{ - *ppFirst = pIn; - } - if( pIn->pRight ){ - rowSetTreeToList(pIn->pRight, &pIn->pRight, ppLast); - }else{ - *ppLast = pIn; - } - assert( (*ppLast)->pRight==0 ); +SQLITE_PRIVATE u32 sqlite3BitvecSize(Bitvec *p){ + return p->iSize; } +#ifndef SQLITE_OMIT_BUILTIN_TEST +/* +** Let V[] be an array of unsigned characters sufficient to hold +** up to N bits. Let I be an integer between 0 and N. 0<=I>3] |= (1<<(I&7)) +#define CLEARBIT(V,I) V[I>>3] &= ~(1<<(I&7)) +#define TESTBIT(V,I) (V[I>>3]&(1<<(I&7)))!=0 /* -** Convert a sorted list of elements (connected by pRight) into a binary -** tree with depth of iDepth. A depth of 1 means the tree contains a single -** node taken from the head of *ppList. A depth of 2 means a tree with -** three nodes. And so forth. +** This routine runs an extensive test of the Bitvec code. ** -** Use as many entries from the input list as required and update the -** *ppList to point to the unused elements of the list. If the input -** list contains too few elements, then construct an incomplete tree -** and leave *ppList set to NULL. +** The input is an array of integers that acts as a program +** to test the Bitvec. The integers are opcodes followed +** by 0, 1, or 3 operands, depending on the opcode. Another +** opcode follows immediately after the last operand. ** -** Return a pointer to the root of the constructed binary tree. +** There are 6 opcodes numbered from 0 through 5. 0 is the +** "halt" opcode and causes the test to end. +** +** 0 Halt and return the number of errors +** 1 N S X Set N bits beginning with S and incrementing by X +** 2 N S X Clear N bits beginning with S and incrementing by X +** 3 N Set N randomly chosen bits +** 4 N Clear N randomly chosen bits +** 5 N S X Set N bits from S increment X in array only, not in bitvec +** +** The opcodes 1 through 4 perform set and clear operations are performed +** on both a Bitvec object and on a linear array of bits obtained from malloc. +** Opcode 5 works on the linear array only, not on the Bitvec. +** Opcode 5 is used to deliberately induce a fault in order to +** confirm that error detection works. +** +** At the conclusion of the test the linear array is compared +** against the Bitvec object. If there are any differences, +** an error is returned. If they are the same, zero is returned. +** +** If a memory allocation error occurs, return -1. */ -static struct RowSetEntry *rowSetNDeepTree( - struct RowSetEntry **ppList, - int iDepth -){ - struct RowSetEntry *p; /* Root of the new tree */ - struct RowSetEntry *pLeft; /* Left subtree */ - if( *ppList==0 ){ - return 0; - } - if( iDepth==1 ){ - p = *ppList; - *ppList = p->pRight; - p->pLeft = p->pRight = 0; - return p; - } - pLeft = rowSetNDeepTree(ppList, iDepth-1); - p = *ppList; - if( p==0 ){ - return pLeft; - } - p->pLeft = pLeft; - *ppList = p->pRight; - p->pRight = rowSetNDeepTree(ppList, iDepth-1); - return p; -} - -/* -** Convert a sorted list of elements into a binary tree. Make the tree -** as deep as it needs to be in order to contain the entire list. -*/ -static struct RowSetEntry *rowSetListToTree(struct RowSetEntry *pList){ - int iDepth; /* Depth of the tree so far */ - struct RowSetEntry *p; /* Current tree root */ - struct RowSetEntry *pLeft; /* Left subtree */ +SQLITE_PRIVATE int sqlite3BitvecBuiltinTest(int sz, int *aOp){ + Bitvec *pBitvec = 0; + unsigned char *pV = 0; + int rc = -1; + int i, nx, pc, op; + void *pTmpSpace; - assert( pList!=0 ); - p = pList; - pList = p->pRight; - p->pLeft = p->pRight = 0; - for(iDepth=1; pList; iDepth++){ - pLeft = p; - p = pList; - pList = p->pRight; - p->pLeft = pLeft; - p->pRight = rowSetNDeepTree(&pList, iDepth); - } - return p; -} + /* Allocate the Bitvec to be tested and a linear array of + ** bits to act as the reference */ + pBitvec = sqlite3BitvecCreate( sz ); + pV = sqlite3_malloc( (sz+7)/8 + 1 ); + pTmpSpace = sqlite3_malloc(BITVEC_SZ); + if( pBitvec==0 || pV==0 || pTmpSpace==0 ) goto bitvec_end; + memset(pV, 0, (sz+7)/8 + 1); -/* -** Convert the list in p->pEntry into a sorted list if it is not -** sorted already. If there is a binary tree on p->pTree, then -** convert it into a list too and merge it into the p->pEntry list. -*/ -static void rowSetToList(RowSet *p){ - if( !p->isSorted ){ - rowSetSort(p); - } - if( p->pTree ){ - struct RowSetEntry *pHead, *pTail; - rowSetTreeToList(p->pTree, &pHead, &pTail); - p->pTree = 0; - p->pEntry = rowSetMerge(p->pEntry, pHead); - } -} + /* NULL pBitvec tests */ + sqlite3BitvecSet(0, 1); + sqlite3BitvecClear(0, 1, pTmpSpace); -/* -** Extract the smallest element from the RowSet. -** Write the element into *pRowid. Return 1 on success. Return -** 0 if the RowSet is already empty. -** -** After this routine has been called, the sqlite3RowSetInsert() -** routine may not be called again. -*/ -SQLITE_PRIVATE int sqlite3RowSetNext(RowSet *p, i64 *pRowid){ - rowSetToList(p); - if( p->pEntry ){ - *pRowid = p->pEntry->v; - p->pEntry = p->pEntry->pRight; - if( p->pEntry==0 ){ - sqlite3RowSetClear(p); + /* Run the program */ + pc = 0; + while( (op = aOp[pc])!=0 ){ + switch( op ){ + case 1: + case 2: + case 5: { + nx = 4; + i = aOp[pc+2] - 1; + aOp[pc+2] += aOp[pc+3]; + break; + } + case 3: + case 4: + default: { + nx = 2; + sqlite3_randomness(sizeof(i), &i); + break; + } } - return 1; - }else{ - return 0; - } -} - -/* -** Check to see if element iRowid was inserted into the the rowset as -** part of any insert batch prior to iBatch. Return 1 or 0. -*/ -SQLITE_PRIVATE int sqlite3RowSetTest(RowSet *pRowSet, u8 iBatch, sqlite3_int64 iRowid){ - struct RowSetEntry *p; - if( iBatch!=pRowSet->iBatch ){ - if( pRowSet->pEntry ){ - rowSetToList(pRowSet); - pRowSet->pTree = rowSetListToTree(pRowSet->pEntry); - pRowSet->pEntry = 0; - pRowSet->pLast = 0; + if( (--aOp[pc+1]) > 0 ) nx = 0; + pc += nx; + i = (i & 0x7fffffff)%sz; + if( (op & 1)!=0 ){ + SETBIT(pV, (i+1)); + if( op!=5 ){ + if( sqlite3BitvecSet(pBitvec, i+1) ) goto bitvec_end; + } + }else{ + CLEARBIT(pV, (i+1)); + sqlite3BitvecClear(pBitvec, i+1, pTmpSpace); } - pRowSet->iBatch = iBatch; } - p = pRowSet->pTree; - while( p ){ - if( p->vpRight; - }else if( p->v>iRowid ){ - p = p->pLeft; - }else{ - return 1; + + /* Test to make sure the linear array exactly matches the + ** Bitvec object. Start with the assumption that they do + ** match (rc==0). Change rc to non-zero if a discrepancy + ** is found. + */ + rc = sqlite3BitvecTest(0,0) + sqlite3BitvecTest(pBitvec, sz+1) + + sqlite3BitvecTest(pBitvec, 0) + + (sqlite3BitvecSize(pBitvec) - sz); + for(i=1; i<=sz; i++){ + if( (TESTBIT(pV,i))!=sqlite3BitvecTest(pBitvec,i) ){ + rc = i; + break; } } - return 0; + + /* Free allocated structure */ +bitvec_end: + sqlite3_free(pTmpSpace); + sqlite3_free(pV); + sqlite3BitvecDestroy(pBitvec); + return rc; } +#endif /* SQLITE_OMIT_BUILTIN_TEST */ -/************** End of rowset.c **********************************************/ -/************** Begin file pager.c *******************************************/ +/************** End of bitvec.c **********************************************/ +/************** Begin file pcache.c ******************************************/ /* -** 2001 September 15 +** 2008 August 05 ** ** The author disclaims copyright to this source code. In place of ** a legal notice, here is a blessing: @@ -30490,19768 +36959,22283 @@ SQLITE_PRIVATE int sqlite3RowSetTest(RowSet *pRowSet, u8 iBatch, sqlite3_int64 i ** May you share freely, never taking more than you give. ** ************************************************************************* -** This is the implementation of the page cache subsystem or "pager". -** -** The pager is used to access a database disk file. It implements -** atomic commit and rollback through the use of a journal file that -** is separate from the database file. The pager also implements file -** locking to prevent two processes from writing the same database -** file simultaneously, or one process from reading the database while -** another is writing. -** -** @(#) $Id: pager.c,v 1.603 2009/06/26 12:15:23 drh Exp $ -*/ -#ifndef SQLITE_OMIT_DISKIO - -/* -** Macros for troubleshooting. Normally turned off +** This file implements that page cache. */ -#if 0 -int sqlite3PagerTrace=1; /* True to enable tracing */ -#define sqlite3DebugPrintf printf -#define PAGERTRACE(X) if( sqlite3PagerTrace ){ sqlite3DebugPrintf X; } -#else -#define PAGERTRACE(X) -#endif /* -** The following two macros are used within the PAGERTRACE() macros above -** to print out file-descriptors. -** -** PAGERID() takes a pointer to a Pager struct as its argument. The -** associated file-descriptor is returned. FILEHANDLEID() takes an sqlite3_file -** struct as its argument. +** A complete page cache is an instance of this structure. */ -#define PAGERID(p) ((int)(p->fd)) -#define FILEHANDLEID(fd) ((int)fd) - -/* -** The page cache as a whole is always in one of the following -** states: -** -** PAGER_UNLOCK The page cache is not currently reading or -** writing the database file. There is no -** data held in memory. This is the initial -** state. -** -** PAGER_SHARED The page cache is reading the database. -** Writing is not permitted. There can be -** multiple readers accessing the same database -** file at the same time. -** -** PAGER_RESERVED This process has reserved the database for writing -** but has not yet made any changes. Only one process -** at a time can reserve the database. The original -** database file has not been modified so other -** processes may still be reading the on-disk -** database file. -** -** PAGER_EXCLUSIVE The page cache is writing the database. -** Access is exclusive. No other processes or -** threads can be reading or writing while one -** process is writing. -** -** PAGER_SYNCED The pager moves to this state from PAGER_EXCLUSIVE -** after all dirty pages have been written to the -** database file and the file has been synced to -** disk. All that remains to do is to remove or -** truncate the journal file and the transaction -** will be committed. -** -** The page cache comes up in PAGER_UNLOCK. The first time a -** sqlite3PagerGet() occurs, the state transitions to PAGER_SHARED. -** After all pages have been released using sqlite_page_unref(), -** the state transitions back to PAGER_UNLOCK. The first time -** that sqlite3PagerWrite() is called, the state transitions to -** PAGER_RESERVED. (Note that sqlite3PagerWrite() can only be -** called on an outstanding page which means that the pager must -** be in PAGER_SHARED before it transitions to PAGER_RESERVED.) -** PAGER_RESERVED means that there is an open rollback journal. -** The transition to PAGER_EXCLUSIVE occurs before any changes -** are made to the database file, though writes to the rollback -** journal occurs with just PAGER_RESERVED. After an sqlite3PagerRollback() -** or sqlite3PagerCommitPhaseTwo(), the state can go back to PAGER_SHARED, -** or it can stay at PAGER_EXCLUSIVE if we are in exclusive access mode. -*/ -#define PAGER_UNLOCK 0 -#define PAGER_SHARED 1 /* same as SHARED_LOCK */ -#define PAGER_RESERVED 2 /* same as RESERVED_LOCK */ -#define PAGER_EXCLUSIVE 4 /* same as EXCLUSIVE_LOCK */ -#define PAGER_SYNCED 5 +struct PCache { + PgHdr *pDirty, *pDirtyTail; /* List of dirty pages in LRU order */ + PgHdr *pSynced; /* Last synced page in dirty page list */ + int nRef; /* Number of referenced pages */ + int szCache; /* Configured cache size */ + int szPage; /* Size of every page in this cache */ + int szExtra; /* Size of extra space for each page */ + int bPurgeable; /* True if pages are on backing store */ + int (*xStress)(void*,PgHdr*); /* Call to try make a page clean */ + void *pStress; /* Argument to xStress */ + sqlite3_pcache *pCache; /* Pluggable cache module */ + PgHdr *pPage1; /* Reference to page 1 */ +}; /* -** A macro used for invoking the codec if there is one +** Some of the assert() macros in this code are too expensive to run +** even during normal debugging. Use them only rarely on long-running +** tests. Enable the expensive asserts using the +** -DSQLITE_ENABLE_EXPENSIVE_ASSERT=1 compile-time option. */ -#ifdef SQLITE_HAS_CODEC -# define CODEC1(P,D,N,X,E) \ - if( P->xCodec && P->xCodec(P->pCodec,D,N,X)==0 ){ E; } -# define CODEC2(P,D,N,X,E,O) \ - if( P->xCodec==0 ){ O=(char*)D; }else \ - if( (O=(char*)(P->xCodec(P->pCodec,D,N,X)))==0 ){ E; } +#ifdef SQLITE_ENABLE_EXPENSIVE_ASSERT +# define expensive_assert(X) assert(X) #else -# define CODEC1(P,D,N,X,E) /* NO-OP */ -# define CODEC2(P,D,N,X,E,O) O=(char*)D +# define expensive_assert(X) #endif -/* -** The maximum allowed sector size. 16MB. If the xSectorsize() method -** returns a value larger than this, then MAX_SECTOR_SIZE is used instead. -** This could conceivably cause corruption following a power failure on -** such a system. This is currently an undocumented limit. -*/ -#define MAX_SECTOR_SIZE 0x0100000 +/********************************** Linked List Management ********************/ +#if !defined(NDEBUG) && defined(SQLITE_ENABLE_EXPENSIVE_ASSERT) /* -** An instance of the following structure is allocated for each active -** savepoint and statement transaction in the system. All such structures -** are stored in the Pager.aSavepoint[] array, which is allocated and -** resized using sqlite3Realloc(). +** Check that the pCache->pSynced variable is set correctly. If it +** is not, either fail an assert or return zero. Otherwise, return +** non-zero. This is only used in debugging builds, as follows: ** -** When a savepoint is created, the PagerSavepoint.iHdrOffset field is -** set to 0. If a journal-header is written into the main journal while -** the savepoint is active, then iHdrOffset is set to the byte offset -** immediately following the last journal record written into the main -** journal before the journal-header. This is required during savepoint -** rollback (see pagerPlaybackSavepoint()). +** expensive_assert( pcacheCheckSynced(pCache) ); */ -typedef struct PagerSavepoint PagerSavepoint; -struct PagerSavepoint { - i64 iOffset; /* Starting offset in main journal */ - i64 iHdrOffset; /* See above */ - Bitvec *pInSavepoint; /* Set of pages in this savepoint */ - Pgno nOrig; /* Original number of pages in file */ - Pgno iSubRec; /* Index of first record in sub-journal */ -}; +static int pcacheCheckSynced(PCache *pCache){ + PgHdr *p; + for(p=pCache->pDirtyTail; p!=pCache->pSynced; p=p->pDirtyPrev){ + assert( p->nRef || (p->flags&PGHDR_NEED_SYNC) ); + } + return (p==0 || p->nRef || (p->flags&PGHDR_NEED_SYNC)==0); +} +#endif /* !NDEBUG && SQLITE_ENABLE_EXPENSIVE_ASSERT */ /* -** A open page cache is an instance of the following structure. -** -** errCode -** -** Pager.errCode may be set to SQLITE_IOERR, SQLITE_CORRUPT, or -** or SQLITE_FULL. Once one of the first three errors occurs, it persists -** and is returned as the result of every major pager API call. The -** SQLITE_FULL return code is slightly different. It persists only until the -** next successful rollback is performed on the pager cache. Also, -** SQLITE_FULL does not affect the sqlite3PagerGet() and sqlite3PagerLookup() -** APIs, they may still be used successfully. -** -** dbSizeValid, dbSize, dbOrigSize, dbFileSize -** -** Managing the size of the database file in pages is a little complicated. -** The variable Pager.dbSize contains the number of pages that the database -** image currently contains. As the database image grows or shrinks this -** variable is updated. The variable Pager.dbFileSize contains the number -** of pages in the database file. This may be different from Pager.dbSize -** if some pages have been appended to the database image but not yet written -** out from the cache to the actual file on disk. Or if the image has been -** truncated by an incremental-vacuum operation. The Pager.dbOrigSize variable -** contains the number of pages in the database image when the current -** transaction was opened. The contents of all three of these variables is -** only guaranteed to be correct if the boolean Pager.dbSizeValid is true. -** -** TODO: Under what conditions is dbSizeValid set? Cleared? -** -** changeCountDone -** -** This boolean variable is used to make sure that the change-counter -** (the 4-byte header field at byte offset 24 of the database file) is -** not updated more often than necessary. -** -** It is set to true when the change-counter field is updated, which -** can only happen if an exclusive lock is held on the database file. -** It is cleared (set to false) whenever an exclusive lock is -** relinquished on the database file. Each time a transaction is committed, -** The changeCountDone flag is inspected. If it is true, the work of -** updating the change-counter is omitted for the current transaction. -** -** This mechanism means that when running in exclusive mode, a connection -** need only update the change-counter once, for the first transaction -** committed. -** -** dbModified -** -** The dbModified flag is set whenever a database page is dirtied. -** It is cleared at the end of each transaction. -** -** It is used when committing or otherwise ending a transaction. If -** the dbModified flag is clear then less work has to be done. -** -** journalStarted -** -** This flag is set whenever the the main journal is synced. -** -** The point of this flag is that it must be set after the -** first journal header in a journal file has been synced to disk. -** After this has happened, new pages appended to the database -** do not need the PGHDR_NEED_SYNC flag set, as they do not need -** to wait for a journal sync before they can be written out to -** the database file (see function pager_write()). -** -** setMaster -** -** This variable is used to ensure that the master journal file name -** (if any) is only written into the journal file once. -** -** When committing a transaction, the master journal file name (if any) -** may be written into the journal file while the pager is still in -** PAGER_RESERVED state (see CommitPhaseOne() for the action). It -** then attempts to upgrade to an exclusive lock. If this attempt -** fails, then SQLITE_BUSY may be returned to the user and the user -** may attempt to commit the transaction again later (calling -** CommitPhaseOne() again). This flag is used to ensure that the -** master journal name is only written to the journal file the first -** time CommitPhaseOne() is called. -** -** doNotSync -** -** This variable is set and cleared by sqlite3PagerWrite(). -** -** needSync -** -** TODO: It might be easier to set this variable in writeJournalHdr() -** and writeMasterJournal() only. Change its meaning to "unsynced data -** has been written to the journal". -** -** subjInMemory -** -** This is a boolean variable. If true, then any required sub-journal -** is opened as an in-memory journal file. If false, then in-memory -** sub-journals are only used for in-memory pager files. +** Remove page pPage from the list of dirty pages. */ -struct Pager { - sqlite3_vfs *pVfs; /* OS functions to use for IO */ - u8 exclusiveMode; /* Boolean. True if locking_mode==EXCLUSIVE */ - u8 journalMode; /* On of the PAGER_JOURNALMODE_* values */ - u8 useJournal; /* Use a rollback journal on this file */ - u8 noReadlock; /* Do not bother to obtain readlocks */ - u8 noSync; /* Do not sync the journal if true */ - u8 fullSync; /* Do extra syncs of the journal for robustness */ - u8 sync_flags; /* One of SYNC_NORMAL or SYNC_FULL */ - u8 tempFile; /* zFilename is a temporary file */ - u8 readOnly; /* True for a read-only database */ - u8 memDb; /* True to inhibit all file I/O */ +static void pcacheRemoveFromDirtyList(PgHdr *pPage){ + PCache *p = pPage->pCache; - /* The following block contains those class members that are dynamically - ** modified during normal operations. The other variables in this structure - ** are either constant throughout the lifetime of the pager, or else - ** used to store configuration parameters that affect the way the pager - ** operates. - ** - ** The 'state' variable is described in more detail along with the - ** descriptions of the values it may take - PAGER_UNLOCK etc. Many of the - ** other variables in this block are described in the comment directly - ** above this class definition. - */ - u8 state; /* PAGER_UNLOCK, _SHARED, _RESERVED, etc. */ - u8 dbModified; /* True if there are any changes to the Db */ - u8 needSync; /* True if an fsync() is needed on the journal */ - u8 journalStarted; /* True if header of journal is synced */ - u8 changeCountDone; /* Set after incrementing the change-counter */ - u8 setMaster; /* True if a m-j name has been written to jrnl */ - u8 doNotSync; /* Boolean. While true, do not spill the cache */ - u8 dbSizeValid; /* Set when dbSize is correct */ - u8 subjInMemory; /* True to use in-memory sub-journals */ - Pgno dbSize; /* Number of pages in the database */ - Pgno dbOrigSize; /* dbSize before the current transaction */ - Pgno dbFileSize; /* Number of pages in the database file */ - int errCode; /* One of several kinds of errors */ - int nRec; /* Pages journalled since last j-header written */ - u32 cksumInit; /* Quasi-random value added to every checksum */ - u32 nSubRec; /* Number of records written to sub-journal */ - Bitvec *pInJournal; /* One bit for each page in the database file */ - sqlite3_file *fd; /* File descriptor for database */ - sqlite3_file *jfd; /* File descriptor for main journal */ - sqlite3_file *sjfd; /* File descriptor for sub-journal */ - i64 journalOff; /* Current write offset in the journal file */ - i64 journalHdr; /* Byte offset to previous journal header */ - PagerSavepoint *aSavepoint; /* Array of active savepoints */ - int nSavepoint; /* Number of elements in aSavepoint[] */ - char dbFileVers[16]; /* Changes whenever database file changes */ - u32 sectorSize; /* Assumed sector size during rollback */ + assert( pPage->pDirtyNext || pPage==p->pDirtyTail ); + assert( pPage->pDirtyPrev || pPage==p->pDirty ); - u16 nExtra; /* Add this many bytes to each in-memory page */ - i16 nReserve; /* Number of unused bytes at end of each page */ - u32 vfsFlags; /* Flags for sqlite3_vfs.xOpen() */ - int pageSize; /* Number of bytes in a page */ - Pgno mxPgno; /* Maximum allowed size of the database */ - char *zFilename; /* Name of the database file */ - char *zJournal; /* Name of the journal file */ - int (*xBusyHandler)(void*); /* Function to call when busy */ - void *pBusyHandlerArg; /* Context argument for xBusyHandler */ -#ifdef SQLITE_TEST - int nHit, nMiss; /* Cache hits and missing */ - int nRead, nWrite; /* Database pages read/written */ -#endif - void (*xReiniter)(DbPage*); /* Call this routine when reloading pages */ -#ifdef SQLITE_HAS_CODEC - void *(*xCodec)(void*,void*,Pgno,int); /* Routine for en/decoding data */ - void (*xCodecSizeChng)(void*,int,int); /* Notify of page size changes */ - void (*xCodecFree)(void*); /* Destructor for the codec */ - void *pCodec; /* First argument to xCodec... methods */ -#endif - char *pTmpSpace; /* Pager.pageSize bytes of space for tmp use */ - i64 journalSizeLimit; /* Size limit for persistent journal files */ - PCache *pPCache; /* Pointer to page cache object */ - sqlite3_backup *pBackup; /* Pointer to list of ongoing backup processes */ -}; + /* Update the PCache1.pSynced variable if necessary. */ + if( p->pSynced==pPage ){ + PgHdr *pSynced = pPage->pDirtyPrev; + while( pSynced && (pSynced->flags&PGHDR_NEED_SYNC) ){ + pSynced = pSynced->pDirtyPrev; + } + p->pSynced = pSynced; + } + + if( pPage->pDirtyNext ){ + pPage->pDirtyNext->pDirtyPrev = pPage->pDirtyPrev; + }else{ + assert( pPage==p->pDirtyTail ); + p->pDirtyTail = pPage->pDirtyPrev; + } + if( pPage->pDirtyPrev ){ + pPage->pDirtyPrev->pDirtyNext = pPage->pDirtyNext; + }else{ + assert( pPage==p->pDirty ); + p->pDirty = pPage->pDirtyNext; + } + pPage->pDirtyNext = 0; + pPage->pDirtyPrev = 0; + + expensive_assert( pcacheCheckSynced(p) ); +} /* -** The following global variables hold counters used for -** testing purposes only. These variables do not exist in -** a non-testing build. These variables are not thread-safe. +** Add page pPage to the head of the dirty list (PCache1.pDirty is set to +** pPage). */ -#ifdef SQLITE_TEST -SQLITE_API int sqlite3_pager_readdb_count = 0; /* Number of full pages read from DB */ -SQLITE_API int sqlite3_pager_writedb_count = 0; /* Number of full pages written to DB */ -SQLITE_API int sqlite3_pager_writej_count = 0; /* Number of pages written to journal */ -# define PAGER_INCR(v) v++ -#else -# define PAGER_INCR(v) -#endif +static void pcacheAddToDirtyList(PgHdr *pPage){ + PCache *p = pPage->pCache; + assert( pPage->pDirtyNext==0 && pPage->pDirtyPrev==0 && p->pDirty!=pPage ); + pPage->pDirtyNext = p->pDirty; + if( pPage->pDirtyNext ){ + assert( pPage->pDirtyNext->pDirtyPrev==0 ); + pPage->pDirtyNext->pDirtyPrev = pPage; + } + p->pDirty = pPage; + if( !p->pDirtyTail ){ + p->pDirtyTail = pPage; + } + if( !p->pSynced && 0==(pPage->flags&PGHDR_NEED_SYNC) ){ + p->pSynced = pPage; + } + expensive_assert( pcacheCheckSynced(p) ); +} /* -** Journal files begin with the following magic string. The data -** was obtained from /dev/random. It is used only as a sanity check. -** -** Since version 2.8.0, the journal format contains additional sanity -** checking information. If the power fails while the journal is being -** written, semi-random garbage data might appear in the journal -** file after power is restored. If an attempt is then made -** to roll the journal back, the database could be corrupted. The additional -** sanity checking data is an attempt to discover the garbage in the -** journal and ignore it. +** Wrapper around the pluggable caches xUnpin method. If the cache is +** being used for an in-memory database, this function is a no-op. +*/ +static void pcacheUnpin(PgHdr *p){ + PCache *pCache = p->pCache; + if( pCache->bPurgeable ){ + if( p->pgno==1 ){ + pCache->pPage1 = 0; + } + sqlite3GlobalConfig.pcache2.xUnpin(pCache->pCache, p->pPage, 0); + } +} + +/*************************************************** General Interfaces ****** ** -** The sanity checking information for the new journal format consists -** of a 32-bit checksum on each page of data. The checksum covers both -** the page number and the pPager->pageSize bytes of data for the page. -** This cksum is initialized to a 32-bit random value that appears in the -** journal file right after the header. The random initializer is important, -** because garbage data that appears at the end of a journal is likely -** data that was once in other files that have now been deleted. If the -** garbage data came from an obsolete journal file, the checksums might -** be correct. But by initializing the checksum to random value which -** is different for every journal, we minimize that risk. +** Initialize and shutdown the page cache subsystem. Neither of these +** functions are threadsafe. */ -static const unsigned char aJournalMagic[] = { - 0xd9, 0xd5, 0x05, 0xf9, 0x20, 0xa1, 0x63, 0xd7, -}; +SQLITE_PRIVATE int sqlite3PcacheInitialize(void){ + if( sqlite3GlobalConfig.pcache2.xInit==0 ){ + /* IMPLEMENTATION-OF: R-26801-64137 If the xInit() method is NULL, then the + ** built-in default page cache is used instead of the application defined + ** page cache. */ + sqlite3PCacheSetDefault(); + } + return sqlite3GlobalConfig.pcache2.xInit(sqlite3GlobalConfig.pcache2.pArg); +} +SQLITE_PRIVATE void sqlite3PcacheShutdown(void){ + if( sqlite3GlobalConfig.pcache2.xShutdown ){ + /* IMPLEMENTATION-OF: R-26000-56589 The xShutdown() method may be NULL. */ + sqlite3GlobalConfig.pcache2.xShutdown(sqlite3GlobalConfig.pcache2.pArg); + } +} /* -** The size of the of each page record in the journal is given by -** the following macro. +** Return the size in bytes of a PCache object. */ -#define JOURNAL_PG_SZ(pPager) ((pPager->pageSize) + 8) +SQLITE_PRIVATE int sqlite3PcacheSize(void){ return sizeof(PCache); } /* -** The journal header size for this pager. This is usually the same -** size as a single disk sector. See also setSectorSize(). +** Create a new PCache object. Storage space to hold the object +** has already been allocated and is passed in as the p pointer. +** The caller discovers how much space needs to be allocated by +** calling sqlite3PcacheSize(). */ -#define JOURNAL_HDR_SZ(pPager) (pPager->sectorSize) +SQLITE_PRIVATE void sqlite3PcacheOpen( + int szPage, /* Size of every page */ + int szExtra, /* Extra space associated with each page */ + int bPurgeable, /* True if pages are on backing store */ + int (*xStress)(void*,PgHdr*),/* Call to try to make pages clean */ + void *pStress, /* Argument to xStress */ + PCache *p /* Preallocated space for the PCache */ +){ + memset(p, 0, sizeof(PCache)); + p->szPage = szPage; + p->szExtra = szExtra; + p->bPurgeable = bPurgeable; + p->xStress = xStress; + p->pStress = pStress; + p->szCache = 100; +} /* -** The macro MEMDB is true if we are dealing with an in-memory database. -** We do this as a macro so that if the SQLITE_OMIT_MEMORYDB macro is set, -** the value of MEMDB will be a constant and the compiler will optimize -** out code that would never execute. +** Change the page size for PCache object. The caller must ensure that there +** are no outstanding page references when this function is called. */ -#ifdef SQLITE_OMIT_MEMORYDB -# define MEMDB 0 -#else -# define MEMDB pPager->memDb -#endif +SQLITE_PRIVATE void sqlite3PcacheSetPageSize(PCache *pCache, int szPage){ + assert( pCache->nRef==0 && pCache->pDirty==0 ); + if( pCache->pCache ){ + sqlite3GlobalConfig.pcache2.xDestroy(pCache->pCache); + pCache->pCache = 0; + pCache->pPage1 = 0; + } + pCache->szPage = szPage; +} /* -** The maximum legal page number is (2^31 - 1). +** Compute the number of pages of cache requested. */ -#define PAGER_MAX_PGNO 2147483647 +static int numberOfCachePages(PCache *p){ + if( p->szCache>=0 ){ + return p->szCache; + }else{ + return (int)((-1024*(i64)p->szCache)/(p->szPage+p->szExtra)); + } +} -#ifndef NDEBUG /* -** Usage: -** -** assert( assert_pager_state(pPager) ); +** Try to obtain a page from the cache. */ -static int assert_pager_state(Pager *pPager){ - - /* A temp-file is always in PAGER_EXCLUSIVE or PAGER_SYNCED state. */ - assert( pPager->tempFile==0 || pPager->state>=PAGER_EXCLUSIVE ); - - /* The changeCountDone flag is always set for temp-files */ - assert( pPager->tempFile==0 || pPager->changeCountDone ); - - return 1; -} +SQLITE_PRIVATE int sqlite3PcacheFetch( + PCache *pCache, /* Obtain the page from this cache */ + Pgno pgno, /* Page number to obtain */ + int createFlag, /* If true, create page if it does not exist already */ + PgHdr **ppPage /* Write the page here */ +){ + sqlite3_pcache_page *pPage = 0; + PgHdr *pPgHdr = 0; + int eCreate; + + assert( pCache!=0 ); + assert( createFlag==1 || createFlag==0 ); + assert( pgno>0 ); + + /* If the pluggable cache (sqlite3_pcache*) has not been allocated, + ** allocate it now. + */ + if( !pCache->pCache && createFlag ){ + sqlite3_pcache *p; + p = sqlite3GlobalConfig.pcache2.xCreate( + pCache->szPage, pCache->szExtra + sizeof(PgHdr), pCache->bPurgeable + ); + if( !p ){ + return SQLITE_NOMEM; + } + sqlite3GlobalConfig.pcache2.xCachesize(p, numberOfCachePages(pCache)); + pCache->pCache = p; + } + + eCreate = createFlag * (1 + (!pCache->bPurgeable || !pCache->pDirty)); + if( pCache->pCache ){ + pPage = sqlite3GlobalConfig.pcache2.xFetch(pCache->pCache, pgno, eCreate); + } + + if( !pPage && eCreate==1 ){ + PgHdr *pPg; + + /* Find a dirty page to write-out and recycle. First try to find a + ** page that does not require a journal-sync (one with PGHDR_NEED_SYNC + ** cleared), but if that is not possible settle for any other + ** unreferenced dirty page. + */ + expensive_assert( pcacheCheckSynced(pCache) ); + for(pPg=pCache->pSynced; + pPg && (pPg->nRef || (pPg->flags&PGHDR_NEED_SYNC)); + pPg=pPg->pDirtyPrev + ); + pCache->pSynced = pPg; + if( !pPg ){ + for(pPg=pCache->pDirtyTail; pPg && pPg->nRef; pPg=pPg->pDirtyPrev); + } + if( pPg ){ + int rc; +#ifdef SQLITE_LOG_CACHE_SPILL + sqlite3_log(SQLITE_FULL, + "spill page %d making room for %d - cache used: %d/%d", + pPg->pgno, pgno, + sqlite3GlobalConfig.pcache.xPagecount(pCache->pCache), + numberOfCachePages(pCache)); #endif + rc = pCache->xStress(pCache->pStress, pPg); + if( rc!=SQLITE_OK && rc!=SQLITE_BUSY ){ + return rc; + } + } + + pPage = sqlite3GlobalConfig.pcache2.xFetch(pCache->pCache, pgno, 2); + } + + if( pPage ){ + pPgHdr = (PgHdr *)pPage->pExtra; + + if( !pPgHdr->pPage ){ + memset(pPgHdr, 0, sizeof(PgHdr)); + pPgHdr->pPage = pPage; + pPgHdr->pData = pPage->pBuf; + pPgHdr->pExtra = (void *)&pPgHdr[1]; + memset(pPgHdr->pExtra, 0, pCache->szExtra); + pPgHdr->pCache = pCache; + pPgHdr->pgno = pgno; + } + assert( pPgHdr->pCache==pCache ); + assert( pPgHdr->pgno==pgno ); + assert( pPgHdr->pData==pPage->pBuf ); + assert( pPgHdr->pExtra==(void *)&pPgHdr[1] ); + + if( 0==pPgHdr->nRef ){ + pCache->nRef++; + } + pPgHdr->nRef++; + if( pgno==1 ){ + pCache->pPage1 = pPgHdr; + } + } + *ppPage = pPgHdr; + return (pPgHdr==0 && eCreate) ? SQLITE_NOMEM : SQLITE_OK; +} /* -** Return true if it is necessary to write page *pPg into the sub-journal. -** A page needs to be written into the sub-journal if there exists one -** or more open savepoints for which: -** -** * The page-number is less than or equal to PagerSavepoint.nOrig, and -** * The bit corresponding to the page-number is not set in -** PagerSavepoint.pInSavepoint. +** Decrement the reference count on a page. If the page is clean and the +** reference count drops to 0, then it is made elible for recycling. */ -static int subjRequiresPage(PgHdr *pPg){ - Pgno pgno = pPg->pgno; - Pager *pPager = pPg->pPager; - int i; - for(i=0; inSavepoint; i++){ - PagerSavepoint *p = &pPager->aSavepoint[i]; - if( p->nOrig>=pgno && 0==sqlite3BitvecTest(p->pInSavepoint, pgno) ){ - return 1; +SQLITE_PRIVATE void sqlite3PcacheRelease(PgHdr *p){ + assert( p->nRef>0 ); + p->nRef--; + if( p->nRef==0 ){ + PCache *pCache = p->pCache; + pCache->nRef--; + if( (p->flags&PGHDR_DIRTY)==0 ){ + pcacheUnpin(p); + }else{ + /* Move the page to the head of the dirty list. */ + pcacheRemoveFromDirtyList(p); + pcacheAddToDirtyList(p); } } - return 0; } /* -** Return true if the page is already in the journal file. +** Increase the reference count of a supplied page by 1. */ -static int pageInJournal(PgHdr *pPg){ - return sqlite3BitvecTest(pPg->pPager->pInJournal, pPg->pgno); +SQLITE_PRIVATE void sqlite3PcacheRef(PgHdr *p){ + assert(p->nRef>0); + p->nRef++; } /* -** Read a 32-bit integer from the given file descriptor. Store the integer -** that is read in *pRes. Return SQLITE_OK if everything worked, or an -** error code is something goes wrong. -** -** All values are stored on disk as big-endian. +** Drop a page from the cache. There must be exactly one reference to the +** page. This function deletes that reference, so after it returns the +** page pointed to by p is invalid. */ -static int read32bits(sqlite3_file *fd, i64 offset, u32 *pRes){ - unsigned char ac[4]; - int rc = sqlite3OsRead(fd, ac, sizeof(ac), offset); - if( rc==SQLITE_OK ){ - *pRes = sqlite3Get4byte(ac); +SQLITE_PRIVATE void sqlite3PcacheDrop(PgHdr *p){ + PCache *pCache; + assert( p->nRef==1 ); + if( p->flags&PGHDR_DIRTY ){ + pcacheRemoveFromDirtyList(p); } - return rc; + pCache = p->pCache; + pCache->nRef--; + if( p->pgno==1 ){ + pCache->pPage1 = 0; + } + sqlite3GlobalConfig.pcache2.xUnpin(pCache->pCache, p->pPage, 1); } /* -** Write a 32-bit integer into a string buffer in big-endian byte order. +** Make sure the page is marked as dirty. If it isn't dirty already, +** make it so. */ -#define put32bits(A,B) sqlite3Put4byte((u8*)A,B) +SQLITE_PRIVATE void sqlite3PcacheMakeDirty(PgHdr *p){ + p->flags &= ~PGHDR_DONT_WRITE; + assert( p->nRef>0 ); + if( 0==(p->flags & PGHDR_DIRTY) ){ + p->flags |= PGHDR_DIRTY; + pcacheAddToDirtyList( p); + } +} /* -** Write a 32-bit integer into the given file descriptor. Return SQLITE_OK -** on success or an error code is something goes wrong. +** Make sure the page is marked as clean. If it isn't clean already, +** make it so. */ -static int write32bits(sqlite3_file *fd, i64 offset, u32 val){ - char ac[4]; - put32bits(ac, val); - return sqlite3OsWrite(fd, ac, 4, offset); +SQLITE_PRIVATE void sqlite3PcacheMakeClean(PgHdr *p){ + if( (p->flags & PGHDR_DIRTY) ){ + pcacheRemoveFromDirtyList(p); + p->flags &= ~(PGHDR_DIRTY|PGHDR_NEED_SYNC); + if( p->nRef==0 ){ + pcacheUnpin(p); + } + } } /* -** The argument to this macro is a file descriptor (type sqlite3_file*). -** Return 0 if it is not open, or non-zero (but not 1) if it is. -** -** This is so that expressions can be written as: -** -** if( isOpen(pPager->jfd) ){ ... -** -** instead of -** -** if( pPager->jfd->pMethods ){ ... +** Make every page in the cache clean. */ -#define isOpen(pFd) ((pFd)->pMethods) +SQLITE_PRIVATE void sqlite3PcacheCleanAll(PCache *pCache){ + PgHdr *p; + while( (p = pCache->pDirty)!=0 ){ + sqlite3PcacheMakeClean(p); + } +} /* -** If file pFd is open, call sqlite3OsUnlock() on it. +** Clear the PGHDR_NEED_SYNC flag from all dirty pages. */ -static int osUnlock(sqlite3_file *pFd, int eLock){ - if( !isOpen(pFd) ){ - return SQLITE_OK; +SQLITE_PRIVATE void sqlite3PcacheClearSyncFlags(PCache *pCache){ + PgHdr *p; + for(p=pCache->pDirty; p; p=p->pDirtyNext){ + p->flags &= ~PGHDR_NEED_SYNC; } - return sqlite3OsUnlock(pFd, eLock); + pCache->pSynced = pCache->pDirtyTail; } /* -** This function determines whether or not the atomic-write optimization -** can be used with this pager. The optimization can be used if: -** -** (a) the value returned by OsDeviceCharacteristics() indicates that -** a database page may be written atomically, and -** (b) the value returned by OsSectorSize() is less than or equal -** to the page size. -** -** The optimization is also always enabled for temporary files. It is -** an error to call this function if pPager is opened on an in-memory -** database. -** -** If the optimization cannot be used, 0 is returned. If it can be used, -** then the value returned is the size of the journal file when it -** contains rollback data for exactly one page. +** Change the page number of page p to newPgno. */ -#ifdef SQLITE_ENABLE_ATOMIC_WRITE -static int jrnlBufferSize(Pager *pPager){ - assert( !MEMDB ); - if( !pPager->tempFile ){ - int dc; /* Device characteristics */ - int nSector; /* Sector size */ - int szPage; /* Page size */ - - assert( isOpen(pPager->fd) ); - dc = sqlite3OsDeviceCharacteristics(pPager->fd); - nSector = pPager->sectorSize; - szPage = pPager->pageSize; +SQLITE_PRIVATE void sqlite3PcacheMove(PgHdr *p, Pgno newPgno){ + PCache *pCache = p->pCache; + assert( p->nRef>0 ); + assert( newPgno>0 ); + sqlite3GlobalConfig.pcache2.xRekey(pCache->pCache, p->pPage, p->pgno,newPgno); + p->pgno = newPgno; + if( (p->flags&PGHDR_DIRTY) && (p->flags&PGHDR_NEED_SYNC) ){ + pcacheRemoveFromDirtyList(p); + pcacheAddToDirtyList(p); + } +} - assert(SQLITE_IOCAP_ATOMIC512==(512>>8)); - assert(SQLITE_IOCAP_ATOMIC64K==(65536>>8)); - if( 0==(dc&(SQLITE_IOCAP_ATOMIC|(szPage>>8)) || nSector>szPage) ){ - return 0; +/* +** Drop every cache entry whose page number is greater than "pgno". The +** caller must ensure that there are no outstanding references to any pages +** other than page 1 with a page number greater than pgno. +** +** If there is a reference to page 1 and the pgno parameter passed to this +** function is 0, then the data area associated with page 1 is zeroed, but +** the page object is not dropped. +*/ +SQLITE_PRIVATE void sqlite3PcacheTruncate(PCache *pCache, Pgno pgno){ + if( pCache->pCache ){ + PgHdr *p; + PgHdr *pNext; + for(p=pCache->pDirty; p; p=pNext){ + pNext = p->pDirtyNext; + /* This routine never gets call with a positive pgno except right + ** after sqlite3PcacheCleanAll(). So if there are dirty pages, + ** it must be that pgno==0. + */ + assert( p->pgno>0 ); + if( ALWAYS(p->pgno>pgno) ){ + assert( p->flags&PGHDR_DIRTY ); + sqlite3PcacheMakeClean(p); + } + } + if( pgno==0 && pCache->pPage1 ){ + memset(pCache->pPage1->pData, 0, pCache->szPage); + pgno = 1; } + sqlite3GlobalConfig.pcache2.xTruncate(pCache->pCache, pgno+1); } +} - return JOURNAL_HDR_SZ(pPager) + JOURNAL_PG_SZ(pPager); +/* +** Close a cache. +*/ +SQLITE_PRIVATE void sqlite3PcacheClose(PCache *pCache){ + if( pCache->pCache ){ + sqlite3GlobalConfig.pcache2.xDestroy(pCache->pCache); + } +} + +/* +** Discard the contents of the cache. +*/ +SQLITE_PRIVATE void sqlite3PcacheClear(PCache *pCache){ + sqlite3PcacheTruncate(pCache, 0); } -#endif /* -** If SQLITE_CHECK_PAGES is defined then we do some sanity checking -** on the cache using a hash function. This is used for testing -** and debugging only. +** Merge two lists of pages connected by pDirty and in pgno order. +** Do not both fixing the pDirtyPrev pointers. */ -#ifdef SQLITE_CHECK_PAGES +static PgHdr *pcacheMergeDirtyList(PgHdr *pA, PgHdr *pB){ + PgHdr result, *pTail; + pTail = &result; + while( pA && pB ){ + if( pA->pgnopgno ){ + pTail->pDirty = pA; + pTail = pA; + pA = pA->pDirty; + }else{ + pTail->pDirty = pB; + pTail = pB; + pB = pB->pDirty; + } + } + if( pA ){ + pTail->pDirty = pA; + }else if( pB ){ + pTail->pDirty = pB; + }else{ + pTail->pDirty = 0; + } + return result.pDirty; +} + /* -** Return a 32-bit hash of the page data for pPage. +** Sort the list of pages in accending order by pgno. Pages are +** connected by pDirty pointers. The pDirtyPrev pointers are +** corrupted by this sort. +** +** Since there cannot be more than 2^31 distinct pages in a database, +** there cannot be more than 31 buckets required by the merge sorter. +** One extra bucket is added to catch overflow in case something +** ever changes to make the previous sentence incorrect. */ -static u32 pager_datahash(int nByte, unsigned char *pData){ - u32 hash = 0; +#define N_SORT_BUCKET 32 +static PgHdr *pcacheSortDirtyList(PgHdr *pIn){ + PgHdr *a[N_SORT_BUCKET], *p; int i; - for(i=0; ipDirty; + p->pDirty = 0; + for(i=0; ALWAYS(ipPager->pageSize, (unsigned char *)pPage->pData); + +/* +** Return a list of all dirty pages in the cache, sorted by page number. +*/ +SQLITE_PRIVATE PgHdr *sqlite3PcacheDirtyList(PCache *pCache){ + PgHdr *p; + for(p=pCache->pDirty; p; p=p->pDirtyNext){ + p->pDirty = p->pDirtyNext; + } + return pcacheSortDirtyList(pCache->pDirty); } -static void pager_set_pagehash(PgHdr *pPage){ - pPage->pageHash = pager_pagehash(pPage); + +/* +** Return the total number of referenced pages held by the cache. +*/ +SQLITE_PRIVATE int sqlite3PcacheRefCount(PCache *pCache){ + return pCache->nRef; } /* -** The CHECK_PAGE macro takes a PgHdr* as an argument. If SQLITE_CHECK_PAGES -** is defined, and NDEBUG is not defined, an assert() statement checks -** that the page is either dirty or still matches the calculated page-hash. +** Return the number of references to the page supplied as an argument. */ -#define CHECK_PAGE(x) checkPage(x) -static void checkPage(PgHdr *pPg){ - Pager *pPager = pPg->pPager; - assert( !pPg->pageHash || pPager->errCode - || (pPg->flags&PGHDR_DIRTY) || pPg->pageHash==pager_pagehash(pPg) ); +SQLITE_PRIVATE int sqlite3PcachePageRefcount(PgHdr *p){ + return p->nRef; } -#else -#define pager_datahash(X,Y) 0 -#define pager_pagehash(X) 0 -#define CHECK_PAGE(x) -#endif /* SQLITE_CHECK_PAGES */ +/* +** Return the total number of pages in the cache. +*/ +SQLITE_PRIVATE int sqlite3PcachePagecount(PCache *pCache){ + int nPage = 0; + if( pCache->pCache ){ + nPage = sqlite3GlobalConfig.pcache2.xPagecount(pCache->pCache); + } + return nPage; +} +#ifdef SQLITE_TEST /* -** When this is called the journal file for pager pPager must be open. -** This function attempts to read a master journal file name from the -** end of the file and, if successful, copies it into memory supplied -** by the caller. See comments above writeMasterJournal() for the format -** used to store a master journal file name at the end of a journal file. -** -** zMaster must point to a buffer of at least nMaster bytes allocated by -** the caller. This should be sqlite3_vfs.mxPathname+1 (to ensure there is -** enough space to write the master journal name). If the master journal -** name in the journal is longer than nMaster bytes (including a -** nul-terminator), then this is handled as if no master journal name -** were present in the journal. -** -** If a master journal file name is present at the end of the journal -** file, then it is copied into the buffer pointed to by zMaster. A -** nul-terminator byte is appended to the buffer following the master -** journal file name. -** -** If it is determined that no master journal file name is present -** zMaster[0] is set to 0 and SQLITE_OK returned. -** -** If an error occurs while reading from the journal file, an SQLite -** error code is returned. +** Get the suggested cache-size value. */ -static int readMasterJournal(sqlite3_file *pJrnl, char *zMaster, u32 nMaster){ - int rc; /* Return code */ - u32 len; /* Length in bytes of master journal name */ - i64 szJ; /* Total size in bytes of journal file pJrnl */ - u32 cksum; /* MJ checksum value read from journal */ - u32 u; /* Unsigned loop counter */ - unsigned char aMagic[8]; /* A buffer to hold the magic header */ - zMaster[0] = '\0'; +SQLITE_PRIVATE int sqlite3PcacheGetCachesize(PCache *pCache){ + return numberOfCachePages(pCache); +} +#endif - if( SQLITE_OK!=(rc = sqlite3OsFileSize(pJrnl, &szJ)) - || szJ<16 - || SQLITE_OK!=(rc = read32bits(pJrnl, szJ-16, &len)) - || len>=nMaster - || SQLITE_OK!=(rc = read32bits(pJrnl, szJ-12, &cksum)) - || SQLITE_OK!=(rc = sqlite3OsRead(pJrnl, aMagic, 8, szJ-8)) - || memcmp(aMagic, aJournalMagic, 8) - || SQLITE_OK!=(rc = sqlite3OsRead(pJrnl, zMaster, len, szJ-16-len)) - ){ - return rc; +/* +** Set the suggested cache-size value. +*/ +SQLITE_PRIVATE void sqlite3PcacheSetCachesize(PCache *pCache, int mxPage){ + pCache->szCache = mxPage; + if( pCache->pCache ){ + sqlite3GlobalConfig.pcache2.xCachesize(pCache->pCache, + numberOfCachePages(pCache)); } +} - /* See if the checksum matches the master journal name */ - for(u=0; upCache ){ + sqlite3GlobalConfig.pcache2.xShrink(pCache->pCache); } - zMaster[len] = '\0'; - - return SQLITE_OK; } +#if defined(SQLITE_CHECK_PAGES) || defined(SQLITE_DEBUG) /* -** Return the offset of the sector boundary at or immediately -** following the value in pPager->journalOff, assuming a sector -** size of pPager->sectorSize bytes. -** -** i.e for a sector size of 512: -** -** Pager.journalOff Return value -** --------------------------------------- -** 0 0 -** 512 512 -** 100 512 -** 2000 2048 -** +** For all dirty pages currently in the cache, invoke the specified +** callback. This is only used if the SQLITE_CHECK_PAGES macro is +** defined. */ -static i64 journalHdrOffset(Pager *pPager){ - i64 offset = 0; - i64 c = pPager->journalOff; - if( c ){ - offset = ((c-1)/JOURNAL_HDR_SZ(pPager) + 1) * JOURNAL_HDR_SZ(pPager); +SQLITE_PRIVATE void sqlite3PcacheIterateDirty(PCache *pCache, void (*xIter)(PgHdr *)){ + PgHdr *pDirty; + for(pDirty=pCache->pDirty; pDirty; pDirty=pDirty->pDirtyNext){ + xIter(pDirty); } - assert( offset%JOURNAL_HDR_SZ(pPager)==0 ); - assert( offset>=c ); - assert( (offset-c)jfd) ); - if( pPager->journalOff ){ - const i64 iLimit = pPager->journalSizeLimit; /* Local cache of jsl */ - IOTRACE(("JZEROHDR %p\n", pPager)) - if( doTruncate || iLimit==0 ){ - rc = sqlite3OsTruncate(pPager->jfd, 0); - }else{ - static const char zeroHdr[28] = {0}; - rc = sqlite3OsWrite(pPager->jfd, zeroHdr, sizeof(zeroHdr), 0); - } - if( rc==SQLITE_OK && !pPager->noSync ){ - rc = sqlite3OsSync(pPager->jfd, SQLITE_SYNC_DATAONLY|pPager->sync_flags); - } - /* At this point the transaction is committed but the write lock - ** is still held on the file. If there is a size limit configured for - ** the persistent journal and the journal file currently consumes more - ** space than that limit allows for, truncate it now. There is no need - ** to sync the file following this operation. - */ - if( rc==SQLITE_OK && iLimit>0 ){ - i64 sz; - rc = sqlite3OsFileSize(pPager->jfd, &sz); - if( rc==SQLITE_OK && sz>iLimit ){ - rc = sqlite3OsTruncate(pPager->jfd, iLimit); - } - } - } - return rc; -} +typedef struct PCache1 PCache1; +typedef struct PgHdr1 PgHdr1; +typedef struct PgFreeslot PgFreeslot; +typedef struct PGroup PGroup; -/* -** The journal file must be open when this routine is called. A journal -** header (JOURNAL_HDR_SZ bytes) is written into the journal file at the -** current location. +/* Each page cache (or PCache) belongs to a PGroup. A PGroup is a set +** of one or more PCaches that are able to recycle each others unpinned +** pages when they are under memory pressure. A PGroup is an instance of +** the following object. ** -** The format for the journal header is as follows: -** - 8 bytes: Magic identifying journal format. -** - 4 bytes: Number of records in journal, or -1 no-sync mode is on. -** - 4 bytes: Random number used for page hash. -** - 4 bytes: Initial database page count. -** - 4 bytes: Sector size used by the process that wrote this journal. -** - 4 bytes: Database page size. -** -** Followed by (JOURNAL_HDR_SZ - 28) bytes of unused space. +** This page cache implementation works in one of two modes: +** +** (1) Every PCache is the sole member of its own PGroup. There is +** one PGroup per PCache. +** +** (2) There is a single global PGroup that all PCaches are a member +** of. +** +** Mode 1 uses more memory (since PCache instances are not able to rob +** unused pages from other PCaches) but it also operates without a mutex, +** and is therefore often faster. Mode 2 requires a mutex in order to be +** threadsafe, but recycles pages more efficiently. +** +** For mode (1), PGroup.mutex is NULL. For mode (2) there is only a single +** PGroup which is the pcache1.grp global variable and its mutex is +** SQLITE_MUTEX_STATIC_LRU. */ -static int writeJournalHdr(Pager *pPager){ - int rc = SQLITE_OK; /* Return code */ - char *zHeader = pPager->pTmpSpace; /* Temporary space used to build header */ - u32 nHeader = pPager->pageSize; /* Size of buffer pointed to by zHeader */ - u32 nWrite; /* Bytes of header sector written */ - int ii; /* Loop counter */ - - assert( isOpen(pPager->jfd) ); /* Journal file must be open. */ - - if( nHeader>JOURNAL_HDR_SZ(pPager) ){ - nHeader = JOURNAL_HDR_SZ(pPager); - } +struct PGroup { + sqlite3_mutex *mutex; /* MUTEX_STATIC_LRU or NULL */ + unsigned int nMaxPage; /* Sum of nMax for purgeable caches */ + unsigned int nMinPage; /* Sum of nMin for purgeable caches */ + unsigned int mxPinned; /* nMaxpage + 10 - nMinPage */ + unsigned int nCurrentPage; /* Number of purgeable pages allocated */ + PgHdr1 *pLruHead, *pLruTail; /* LRU list of unpinned pages */ +}; - /* If there are active savepoints and any of them were created - ** since the most recent journal header was written, update the - ** PagerSavepoint.iHdrOffset fields now. +/* Each page cache is an instance of the following object. Every +** open database file (including each in-memory database and each +** temporary or transient database) has a single page cache which +** is an instance of this object. +** +** Pointers to structures of this type are cast and returned as +** opaque sqlite3_pcache* handles. +*/ +struct PCache1 { + /* Cache configuration parameters. Page size (szPage) and the purgeable + ** flag (bPurgeable) are set when the cache is created. nMax may be + ** modified at any time by a call to the pcache1Cachesize() method. + ** The PGroup mutex must be held when accessing nMax. */ - for(ii=0; iinSavepoint; ii++){ - if( pPager->aSavepoint[ii].iHdrOffset==0 ){ - pPager->aSavepoint[ii].iHdrOffset = pPager->journalOff; - } - } - - pPager->journalHdr = pPager->journalOff = journalHdrOffset(pPager); + PGroup *pGroup; /* PGroup this cache belongs to */ + int szPage; /* Size of allocated pages in bytes */ + int szExtra; /* Size of extra space in bytes */ + int bPurgeable; /* True if cache is purgeable */ + unsigned int nMin; /* Minimum number of pages reserved */ + unsigned int nMax; /* Configured "cache_size" value */ + unsigned int n90pct; /* nMax*9/10 */ + unsigned int iMaxKey; /* Largest key seen since xTruncate() */ - /* - ** Write the nRec Field - the number of page records that follow this - ** journal header. Normally, zero is written to this value at this time. - ** After the records are added to the journal (and the journal synced, - ** if in full-sync mode), the zero is overwritten with the true number - ** of records (see syncJournal()). - ** - ** A faster alternative is to write 0xFFFFFFFF to the nRec field. When - ** reading the journal this value tells SQLite to assume that the - ** rest of the journal file contains valid page records. This assumption - ** is dangerous, as if a failure occurred whilst writing to the journal - ** file it may contain some garbage data. There are two scenarios - ** where this risk can be ignored: - ** - ** * When the pager is in no-sync mode. Corruption can follow a - ** power failure in this case anyway. - ** - ** * When the SQLITE_IOCAP_SAFE_APPEND flag is set. This guarantees - ** that garbage data is never appended to the journal file. + /* Hash table of all pages. The following variables may only be accessed + ** when the accessor is holding the PGroup mutex. */ - assert( isOpen(pPager->fd) || pPager->noSync ); - if( (pPager->noSync) || (pPager->journalMode==PAGER_JOURNALMODE_MEMORY) - || (sqlite3OsDeviceCharacteristics(pPager->fd)&SQLITE_IOCAP_SAFE_APPEND) - ){ - memcpy(zHeader, aJournalMagic, sizeof(aJournalMagic)); - put32bits(&zHeader[sizeof(aJournalMagic)], 0xffffffff); - }else{ - zHeader[0] = '\0'; - put32bits(&zHeader[sizeof(aJournalMagic)], 0); - } - - /* The random check-hash initialiser */ - sqlite3_randomness(sizeof(pPager->cksumInit), &pPager->cksumInit); - put32bits(&zHeader[sizeof(aJournalMagic)+4], pPager->cksumInit); - /* The initial database size */ - put32bits(&zHeader[sizeof(aJournalMagic)+8], pPager->dbOrigSize); - /* The assumed sector size for this process */ - put32bits(&zHeader[sizeof(aJournalMagic)+12], pPager->sectorSize); - - /* The page size */ - put32bits(&zHeader[sizeof(aJournalMagic)+16], pPager->pageSize); + unsigned int nRecyclable; /* Number of pages in the LRU list */ + unsigned int nPage; /* Total number of pages in apHash */ + unsigned int nHash; /* Number of slots in apHash[] */ + PgHdr1 **apHash; /* Hash table for fast lookup by key */ +}; - /* Initializing the tail of the buffer is not necessary. Everything - ** works find if the following memset() is omitted. But initializing - ** the memory prevents valgrind from complaining, so we are willing to - ** take the performance hit. - */ - memset(&zHeader[sizeof(aJournalMagic)+20], 0, - nHeader-(sizeof(aJournalMagic)+20)); +/* +** Each cache entry is represented by an instance of the following +** structure. Unless SQLITE_PCACHE_SEPARATE_HEADER is defined, a buffer of +** PgHdr1.pCache->szPage bytes is allocated directly before this structure +** in memory. +*/ +struct PgHdr1 { + sqlite3_pcache_page page; + unsigned int iKey; /* Key value (page number) */ + PgHdr1 *pNext; /* Next in hash table chain */ + PCache1 *pCache; /* Cache that currently owns this page */ + PgHdr1 *pLruNext; /* Next in LRU list of unpinned pages */ + PgHdr1 *pLruPrev; /* Previous in LRU list of unpinned pages */ +}; - /* In theory, it is only necessary to write the 28 bytes that the - ** journal header consumes to the journal file here. Then increment the - ** Pager.journalOff variable by JOURNAL_HDR_SZ so that the next - ** record is written to the following sector (leaving a gap in the file - ** that will be implicitly filled in by the OS). - ** - ** However it has been discovered that on some systems this pattern can - ** be significantly slower than contiguously writing data to the file, - ** even if that means explicitly writing data to the block of - ** (JOURNAL_HDR_SZ - 28) bytes that will not be used. So that is what - ** is done. - ** - ** The loop is required here in case the sector-size is larger than the - ** database page size. Since the zHeader buffer is only Pager.pageSize - ** bytes in size, more than one call to sqlite3OsWrite() may be required - ** to populate the entire journal header sector. - */ - for(nWrite=0; rc==SQLITE_OK&&nWritejournalHdr, nHeader)) - rc = sqlite3OsWrite(pPager->jfd, zHeader, nHeader, pPager->journalOff); - pPager->journalOff += nHeader; - } +/* +** Free slots in the allocator used to divide up the buffer provided using +** the SQLITE_CONFIG_PAGECACHE mechanism. +*/ +struct PgFreeslot { + PgFreeslot *pNext; /* Next free slot */ +}; - return rc; -} +/* +** Global data used by this cache. +*/ +static SQLITE_WSD struct PCacheGlobal { + PGroup grp; /* The global PGroup for mode (2) */ + + /* Variables related to SQLITE_CONFIG_PAGECACHE settings. The + ** szSlot, nSlot, pStart, pEnd, nReserve, and isInit values are all + ** fixed at sqlite3_initialize() time and do not require mutex protection. + ** The nFreeSlot and pFree values do require mutex protection. + */ + int isInit; /* True if initialized */ + int szSlot; /* Size of each free slot */ + int nSlot; /* The number of pcache slots */ + int nReserve; /* Try to keep nFreeSlot above this */ + void *pStart, *pEnd; /* Bounds of pagecache malloc range */ + /* Above requires no mutex. Use mutex below for variable that follow. */ + sqlite3_mutex *mutex; /* Mutex for accessing the following: */ + PgFreeslot *pFree; /* Free page blocks */ + int nFreeSlot; /* Number of unused pcache slots */ + /* The following value requires a mutex to change. We skip the mutex on + ** reading because (1) most platforms read a 32-bit integer atomically and + ** (2) even if an incorrect value is read, no great harm is done since this + ** is really just an optimization. */ + int bUnderPressure; /* True if low on PAGECACHE memory */ +} pcache1_g; /* -** The journal file must be open when this is called. A journal header file -** (JOURNAL_HDR_SZ bytes) is read from the current location in the journal -** file. The current location in the journal file is given by -** pPager->journalOff. See comments above function writeJournalHdr() for -** a description of the journal header format. -** -** If the header is read successfully, *pNRec is set to the number of -** page records following this header and *pDbSize is set to the size of the -** database before the transaction began, in pages. Also, pPager->cksumInit -** is set to the value read from the journal header. SQLITE_OK is returned -** in this case. -** -** If the journal header file appears to be corrupted, SQLITE_DONE is -** returned and *pNRec and *PDbSize are undefined. If JOURNAL_HDR_SZ bytes -** cannot be read from the journal file an error code is returned. +** All code in this file should access the global structure above via the +** alias "pcache1". This ensures that the WSD emulation is used when +** compiling for systems that do not support real WSD. */ -static int readJournalHdr( - Pager *pPager, /* Pager object */ - int isHot, - i64 journalSize, /* Size of the open journal file in bytes */ - u32 *pNRec, /* OUT: Value read from the nRec field */ - u32 *pDbSize /* OUT: Value of original database size field */ -){ - int rc; /* Return code */ - unsigned char aMagic[8]; /* A buffer to hold the magic header */ - i64 iHdrOff; /* Offset of journal header being read */ +#define pcache1 (GLOBAL(struct PCacheGlobal, pcache1_g)) - assert( isOpen(pPager->jfd) ); /* Journal file must be open. */ +/* +** Macros to enter and leave the PCache LRU mutex. +*/ +#define pcache1EnterMutex(X) sqlite3_mutex_enter((X)->mutex) +#define pcache1LeaveMutex(X) sqlite3_mutex_leave((X)->mutex) - /* Advance Pager.journalOff to the start of the next sector. If the - ** journal file is too small for there to be a header stored at this - ** point, return SQLITE_DONE. - */ - pPager->journalOff = journalHdrOffset(pPager); - if( pPager->journalOff+JOURNAL_HDR_SZ(pPager) > journalSize ){ - return SQLITE_DONE; - } - iHdrOff = pPager->journalOff; +/******************************************************************************/ +/******** Page Allocation/SQLITE_CONFIG_PCACHE Related Functions **************/ - /* Read in the first 8 bytes of the journal header. If they do not match - ** the magic string found at the start of each journal header, return - ** SQLITE_DONE. If an IO error occurs, return an error code. Otherwise, - ** proceed. - */ - if( isHot || iHdrOff!=pPager->journalHdr ){ - rc = sqlite3OsRead(pPager->jfd, aMagic, sizeof(aMagic), iHdrOff); - if( rc ){ - return rc; - } - if( memcmp(aMagic, aJournalMagic, sizeof(aMagic))!=0 ){ - return SQLITE_DONE; +/* +** This function is called during initialization if a static buffer is +** supplied to use for the page-cache by passing the SQLITE_CONFIG_PAGECACHE +** verb to sqlite3_config(). Parameter pBuf points to an allocation large +** enough to contain 'n' buffers of 'sz' bytes each. +** +** This routine is called from sqlite3_initialize() and so it is guaranteed +** to be serialized already. There is no need for further mutexing. +*/ +SQLITE_PRIVATE void sqlite3PCacheBufferSetup(void *pBuf, int sz, int n){ + if( pcache1.isInit ){ + PgFreeslot *p; + sz = ROUNDDOWN8(sz); + pcache1.szSlot = sz; + pcache1.nSlot = pcache1.nFreeSlot = n; + pcache1.nReserve = n>90 ? 10 : (n/10 + 1); + pcache1.pStart = pBuf; + pcache1.pFree = 0; + pcache1.bUnderPressure = 0; + while( n-- ){ + p = (PgFreeslot*)pBuf; + p->pNext = pcache1.pFree; + pcache1.pFree = p; + pBuf = (void*)&((char*)pBuf)[sz]; } + pcache1.pEnd = pBuf; } +} - /* Read the first three 32-bit fields of the journal header: The nRec - ** field, the checksum-initializer and the database size at the start - ** of the transaction. Return an error code if anything goes wrong. - */ - if( SQLITE_OK!=(rc = read32bits(pPager->jfd, iHdrOff+8, pNRec)) - || SQLITE_OK!=(rc = read32bits(pPager->jfd, iHdrOff+12, &pPager->cksumInit)) - || SQLITE_OK!=(rc = read32bits(pPager->jfd, iHdrOff+16, pDbSize)) - ){ - return rc; - } - - if( pPager->journalOff==0 ){ - u32 iPageSize; /* Page-size field of journal header */ - u32 iSectorSize; /* Sector-size field of journal header */ - u16 iPageSize16; /* Copy of iPageSize in 16-bit variable */ - - /* Read the page-size and sector-size journal header fields. */ - if( SQLITE_OK!=(rc = read32bits(pPager->jfd, iHdrOff+20, &iSectorSize)) - || SQLITE_OK!=(rc = read32bits(pPager->jfd, iHdrOff+24, &iPageSize)) - ){ - return rc; +/* +** Malloc function used within this file to allocate space from the buffer +** configured using sqlite3_config(SQLITE_CONFIG_PAGECACHE) option. If no +** such buffer exists or there is no space left in it, this function falls +** back to sqlite3Malloc(). +** +** Multiple threads can run this routine at the same time. Global variables +** in pcache1 need to be protected via mutex. +*/ +static void *pcache1Alloc(int nByte){ + void *p = 0; + assert( sqlite3_mutex_notheld(pcache1.grp.mutex) ); + sqlite3StatusSet(SQLITE_STATUS_PAGECACHE_SIZE, nByte); + if( nByte<=pcache1.szSlot ){ + sqlite3_mutex_enter(pcache1.mutex); + p = (PgHdr1 *)pcache1.pFree; + if( p ){ + pcache1.pFree = pcache1.pFree->pNext; + pcache1.nFreeSlot--; + pcache1.bUnderPressure = pcache1.nFreeSlot=0 ); + sqlite3StatusAdd(SQLITE_STATUS_PAGECACHE_USED, 1); } - - /* Check that the values read from the page-size and sector-size fields - ** are within range. To be 'in range', both values need to be a power - ** of two greater than or equal to 512, and not greater than their - ** respective compile time maximum limits. + sqlite3_mutex_leave(pcache1.mutex); + } + if( p==0 ){ + /* Memory is not available in the SQLITE_CONFIG_PAGECACHE pool. Get + ** it from sqlite3Malloc instead. */ - if( iPageSize<512 || iSectorSize<512 - || iPageSize>SQLITE_MAX_PAGE_SIZE || iSectorSize>MAX_SECTOR_SIZE - || ((iPageSize-1)&iPageSize)!=0 || ((iSectorSize-1)&iSectorSize)!=0 - ){ - /* If the either the page-size or sector-size in the journal-header is - ** invalid, then the process that wrote the journal-header must have - ** crashed before the header was synced. In this case stop reading - ** the journal file here. - */ - return SQLITE_DONE; + p = sqlite3Malloc(nByte); +#ifndef SQLITE_DISABLE_PAGECACHE_OVERFLOW_STATS + if( p ){ + int sz = sqlite3MallocSize(p); + sqlite3_mutex_enter(pcache1.mutex); + sqlite3StatusAdd(SQLITE_STATUS_PAGECACHE_OVERFLOW, sz); + sqlite3_mutex_leave(pcache1.mutex); } - - /* Update the page-size to match the value read from the journal. - ** Use a testcase() macro to make sure that malloc failure within - ** PagerSetPagesize() is tested. - */ - iPageSize16 = (u16)iPageSize; - rc = sqlite3PagerSetPagesize(pPager, &iPageSize16, -1); - testcase( rc!=SQLITE_OK ); - assert( rc!=SQLITE_OK || iPageSize16==(u16)iPageSize ); - - /* Update the assumed sector-size to match the value used by - ** the process that created this journal. If this journal was - ** created by a process other than this one, then this routine - ** is being called from within pager_playback(). The local value - ** of Pager.sectorSize is restored at the end of that routine. - */ - pPager->sectorSize = iSectorSize; +#endif + sqlite3MemdebugSetType(p, MEMTYPE_PCACHE); } - - pPager->journalOff += JOURNAL_HDR_SZ(pPager); - return rc; + return p; } - /* -** Write the supplied master journal name into the journal file for pager -** pPager at the current location. The master journal name must be the last -** thing written to a journal file. If the pager is in full-sync mode, the -** journal file descriptor is advanced to the next sector boundary before -** anything is written. The format is: -** -** + 4 bytes: PAGER_MJ_PGNO. -** + N bytes: Master journal filename in utf-8. -** + 4 bytes: N (length of master journal name in bytes, no nul-terminator). -** + 4 bytes: Master journal name checksum. -** + 8 bytes: aJournalMagic[]. -** -** The master journal page checksum is the sum of the bytes in the master -** journal name, where each byte is interpreted as a signed 8-bit integer. -** -** If zMaster is a NULL pointer (occurs for a single database transaction), -** this call is a no-op. +** Free an allocated buffer obtained from pcache1Alloc(). */ -static int writeMasterJournal(Pager *pPager, const char *zMaster){ - int rc; /* Return code */ - int nMaster; /* Length of string zMaster */ - i64 iHdrOff; /* Offset of header in journal file */ - i64 jrnlSize; /* Size of journal file on disk */ - u32 cksum = 0; /* Checksum of string zMaster */ - - if( !zMaster || pPager->setMaster - || pPager->journalMode==PAGER_JOURNALMODE_MEMORY - || pPager->journalMode==PAGER_JOURNALMODE_OFF - ){ - return SQLITE_OK; - } - pPager->setMaster = 1; - assert( isOpen(pPager->jfd) ); - - /* Calculate the length in bytes and the checksum of zMaster */ - for(nMaster=0; zMaster[nMaster]; nMaster++){ - cksum += zMaster[nMaster]; - } - - /* If in full-sync mode, advance to the next disk sector before writing - ** the master journal name. This is in case the previous page written to - ** the journal has already been synced. - */ - if( pPager->fullSync ){ - pPager->journalOff = journalHdrOffset(pPager); - } - iHdrOff = pPager->journalOff; - - /* Write the master journal data to the end of the journal file. If - ** an error occurs, return the error code to the caller. - */ - if( (0 != (rc = write32bits(pPager->jfd, iHdrOff, PAGER_MJ_PGNO(pPager)))) - || (0 != (rc = sqlite3OsWrite(pPager->jfd, zMaster, nMaster, iHdrOff+4))) - || (0 != (rc = write32bits(pPager->jfd, iHdrOff+4+nMaster, nMaster))) - || (0 != (rc = write32bits(pPager->jfd, iHdrOff+4+nMaster+4, cksum))) - || (0 != (rc = sqlite3OsWrite(pPager->jfd, aJournalMagic, 8, iHdrOff+4+nMaster+8))) - ){ - return rc; +static int pcache1Free(void *p){ + int nFreed = 0; + if( p==0 ) return 0; + if( p>=pcache1.pStart && ppNext = pcache1.pFree; + pcache1.pFree = pSlot; + pcache1.nFreeSlot++; + pcache1.bUnderPressure = pcache1.nFreeSlotjournalOff += (nMaster+20); - pPager->needSync = !pPager->noSync; + return nFreed; +} - /* If the pager is in peristent-journal mode, then the physical - ** journal-file may extend past the end of the master-journal name - ** and 8 bytes of magic data just written to the file. This is - ** dangerous because the code to rollback a hot-journal file - ** will not be able to find the master-journal name to determine - ** whether or not the journal is hot. - ** - ** Easiest thing to do in this scenario is to truncate the journal - ** file to the required size. - */ - if( SQLITE_OK==(rc = sqlite3OsFileSize(pPager->jfd, &jrnlSize)) - && jrnlSize>pPager->journalOff - ){ - rc = sqlite3OsTruncate(pPager->jfd, pPager->journalOff); +#ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT +/* +** Return the size of a pcache allocation +*/ +static int pcache1MemSize(void *p){ + if( p>=pcache1.pStart && ppGroup->mutex) ); + pcache1LeaveMutex(pCache->pGroup); +#ifdef SQLITE_PCACHE_SEPARATE_HEADER + pPg = pcache1Alloc(pCache->szPage); + p = sqlite3Malloc(sizeof(PgHdr1) + pCache->szExtra); + if( !pPg || !p ){ + pcache1Free(pPg); + sqlite3_free(p); + pPg = 0; + } +#else + pPg = pcache1Alloc(sizeof(PgHdr1) + pCache->szPage + pCache->szExtra); + p = (PgHdr1 *)&((u8 *)pPg)[pCache->szPage]; +#endif + pcache1EnterMutex(pCache->pGroup); - /* It is not possible for a call to PcacheFetch() with createFlag==0 to - ** fail, since no attempt to allocate dynamic memory will be made. - */ - (void)sqlite3PcacheFetch(pPager->pPCache, pgno, 0, &p); - return p; + if( pPg ){ + p->page.pBuf = pPg; + p->page.pExtra = &p[1]; + if( pCache->bPurgeable ){ + pCache->pGroup->nCurrentPage++; + } + return p; + } + return 0; } /* -** Unless the pager is in error-state, discard all in-memory pages. If -** the pager is in error-state, then this call is a no-op. +** Free a page object allocated by pcache1AllocPage(). ** -** TODO: Why can we not reset the pager while in error state? +** The pointer is allowed to be NULL, which is prudent. But it turns out +** that the current implementation happens to never call this routine +** with a NULL pointer, so we mark the NULL test with ALWAYS(). */ -static void pager_reset(Pager *pPager){ - if( SQLITE_OK==pPager->errCode ){ - sqlite3BackupRestart(pPager->pBackup); - sqlite3PcacheClear(pPager->pPCache); - pPager->dbSizeValid = 0; +static void pcache1FreePage(PgHdr1 *p){ + if( ALWAYS(p) ){ + PCache1 *pCache = p->pCache; + assert( sqlite3_mutex_held(p->pCache->pGroup->mutex) ); + pcache1Free(p->page.pBuf); +#ifdef SQLITE_PCACHE_SEPARATE_HEADER + sqlite3_free(p); +#endif + if( pCache->bPurgeable ){ + pCache->pGroup->nCurrentPage--; + } } } /* -** Free all structures in the Pager.aSavepoint[] array and set both -** Pager.aSavepoint and Pager.nSavepoint to zero. Close the sub-journal -** if it is open and the pager is not in exclusive mode. +** Malloc function used by SQLite to obtain space from the buffer configured +** using sqlite3_config(SQLITE_CONFIG_PAGECACHE) option. If no such buffer +** exists, this function falls back to sqlite3Malloc(). */ -static void releaseAllSavepoints(Pager *pPager){ - int ii; /* Iterator for looping through Pager.aSavepoint */ - for(ii=0; iinSavepoint; ii++){ - sqlite3BitvecDestroy(pPager->aSavepoint[ii].pInSavepoint); - } - if( !pPager->exclusiveMode || sqlite3IsMemJournal(pPager->sjfd) ){ - sqlite3OsClose(pPager->sjfd); - } - sqlite3_free(pPager->aSavepoint); - pPager->aSavepoint = 0; - pPager->nSavepoint = 0; - pPager->nSubRec = 0; +SQLITE_PRIVATE void *sqlite3PageMalloc(int sz){ + return pcache1Alloc(sz); } /* -** Set the bit number pgno in the PagerSavepoint.pInSavepoint -** bitvecs of all open savepoints. Return SQLITE_OK if successful -** or SQLITE_NOMEM if a malloc failure occurs. +** Free an allocated buffer obtained from sqlite3PageMalloc(). */ -static int addToSavepointBitvecs(Pager *pPager, Pgno pgno){ - int ii; /* Loop counter */ - int rc = SQLITE_OK; /* Result code */ +SQLITE_PRIVATE void sqlite3PageFree(void *p){ + pcache1Free(p); +} - for(ii=0; iinSavepoint; ii++){ - PagerSavepoint *p = &pPager->aSavepoint[ii]; - if( pgno<=p->nOrig ){ - rc |= sqlite3BitvecSet(p->pInSavepoint, pgno); - testcase( rc==SQLITE_NOMEM ); - assert( rc==SQLITE_OK || rc==SQLITE_NOMEM ); - } + +/* +** Return true if it desirable to avoid allocating a new page cache +** entry. +** +** If memory was allocated specifically to the page cache using +** SQLITE_CONFIG_PAGECACHE but that memory has all been used, then +** it is desirable to avoid allocating a new page cache entry because +** presumably SQLITE_CONFIG_PAGECACHE was suppose to be sufficient +** for all page cache needs and we should not need to spill the +** allocation onto the heap. +** +** Or, the heap is used for all page cache memory but the heap is +** under memory pressure, then again it is desirable to avoid +** allocating a new page cache entry in order to avoid stressing +** the heap even further. +*/ +static int pcache1UnderMemoryPressure(PCache1 *pCache){ + if( pcache1.nSlot && (pCache->szPage+pCache->szExtra)<=pcache1.szSlot ){ + return pcache1.bUnderPressure; + }else{ + return sqlite3HeapNearlyFull(); } - return rc; } +/******************************************************************************/ +/******** General Implementation Functions ************************************/ + /* -** Unlock the database file. This function is a no-op if the pager -** is in exclusive mode. +** This function is used to resize the hash table used by the cache passed +** as the first argument. ** -** If the pager is currently in error state, discard the contents of -** the cache and reset the Pager structure internal state. If there is -** an open journal-file, then the next time a shared-lock is obtained -** on the pager file (by this or any other process), it will be -** treated as a hot-journal and rolled back. +** The PCache mutex must be held when this function is called. */ -static void pager_unlock(Pager *pPager){ - if( !pPager->exclusiveMode ){ - int rc; /* Return code */ - - /* Always close the journal file when dropping the database lock. - ** Otherwise, another connection with journal_mode=delete might - ** delete the file out from under us. - */ - sqlite3OsClose(pPager->jfd); - sqlite3BitvecDestroy(pPager->pInJournal); - pPager->pInJournal = 0; - releaseAllSavepoints(pPager); +static int pcache1ResizeHash(PCache1 *p){ + PgHdr1 **apNew; + unsigned int nNew; + unsigned int i; - /* If the file is unlocked, somebody else might change it. The - ** values stored in Pager.dbSize etc. might become invalid if - ** this happens. TODO: Really, this doesn't need to be cleared - ** until the change-counter check fails in pagerSharedLock(). - */ - pPager->dbSizeValid = 0; + assert( sqlite3_mutex_held(p->pGroup->mutex) ); - rc = osUnlock(pPager->fd, NO_LOCK); - if( rc ){ - pPager->errCode = rc; - } - IOTRACE(("UNLOCK %p\n", pPager)) + nNew = p->nHash*2; + if( nNew<256 ){ + nNew = 256; + } - /* If Pager.errCode is set, the contents of the pager cache cannot be - ** trusted. Now that the pager file is unlocked, the contents of the - ** cache can be discarded and the error code safely cleared. - */ - if( pPager->errCode ){ - if( rc==SQLITE_OK ){ - pPager->errCode = SQLITE_OK; + pcache1LeaveMutex(p->pGroup); + if( p->nHash ){ sqlite3BeginBenignMalloc(); } + apNew = (PgHdr1 **)sqlite3_malloc(sizeof(PgHdr1 *)*nNew); + if( p->nHash ){ sqlite3EndBenignMalloc(); } + pcache1EnterMutex(p->pGroup); + if( apNew ){ + memset(apNew, 0, sizeof(PgHdr1 *)*nNew); + for(i=0; inHash; i++){ + PgHdr1 *pPage; + PgHdr1 *pNext = p->apHash[i]; + while( (pPage = pNext)!=0 ){ + unsigned int h = pPage->iKey % nNew; + pNext = pPage->pNext; + pPage->pNext = apNew[h]; + apNew[h] = pPage; } - pager_reset(pPager); } - - pPager->changeCountDone = 0; - pPager->state = PAGER_UNLOCK; + sqlite3_free(p->apHash); + p->apHash = apNew; + p->nHash = nNew; } + + return (p->apHash ? SQLITE_OK : SQLITE_NOMEM); } /* -** This function should be called when an IOERR, CORRUPT or FULL error -** may have occurred. The first argument is a pointer to the pager -** structure, the second the error-code about to be returned by a pager -** API function. The value returned is a copy of the second argument -** to this function. +** This function is used internally to remove the page pPage from the +** PGroup LRU list, if is part of it. If pPage is not part of the PGroup +** LRU list, then this function is a no-op. ** -** If the second argument is SQLITE_IOERR, SQLITE_CORRUPT, or SQLITE_FULL -** the error becomes persistent. Until the persisten error is cleared, -** subsequent API calls on this Pager will immediately return the same -** error code. +** The PGroup mutex must be held when this function is called. ** -** A persistent error indicates that the contents of the pager-cache -** cannot be trusted. This state can be cleared by completely discarding -** the contents of the pager-cache. If a transaction was active when -** the persistent error occurred, then the rollback journal may need -** to be replayed to restore the contents of the database file (as if -** it were a hot-journal). +** If pPage is NULL then this routine is a no-op. */ -static int pager_error(Pager *pPager, int rc){ - int rc2 = rc & 0xff; - assert( - pPager->errCode==SQLITE_FULL || - pPager->errCode==SQLITE_OK || - (pPager->errCode & 0xff)==SQLITE_IOERR - ); - if( - rc2==SQLITE_FULL || - rc2==SQLITE_IOERR || - rc2==SQLITE_CORRUPT - ){ - pPager->errCode = rc; - if( pPager->state==PAGER_UNLOCK - && sqlite3PcacheRefCount(pPager->pPCache)==0 - ){ - /* If the pager is already unlocked, call pager_unlock() now to - ** clear the error state and ensure that the pager-cache is - ** completely empty. - */ - pager_unlock(pPager); +static void pcache1PinPage(PgHdr1 *pPage){ + PCache1 *pCache; + PGroup *pGroup; + + if( pPage==0 ) return; + pCache = pPage->pCache; + pGroup = pCache->pGroup; + assert( sqlite3_mutex_held(pGroup->mutex) ); + if( pPage->pLruNext || pPage==pGroup->pLruTail ){ + if( pPage->pLruPrev ){ + pPage->pLruPrev->pLruNext = pPage->pLruNext; + } + if( pPage->pLruNext ){ + pPage->pLruNext->pLruPrev = pPage->pLruPrev; + } + if( pGroup->pLruHead==pPage ){ + pGroup->pLruHead = pPage->pLruNext; } + if( pGroup->pLruTail==pPage ){ + pGroup->pLruTail = pPage->pLruPrev; + } + pPage->pLruNext = 0; + pPage->pLruPrev = 0; + pPage->pCache->nRecyclable--; } - return rc; } + /* -** Execute a rollback if a transaction is active and unlock the -** database file. -** -** If the pager has already entered the error state, do not attempt -** the rollback at this time. Instead, pager_unlock() is called. The -** call to pager_unlock() will discard all in-memory pages, unlock -** the database file and clear the error state. If this means that -** there is a hot-journal left in the file-system, the next connection -** to obtain a shared lock on the pager (which may be this one) will -** roll it back. +** Remove the page supplied as an argument from the hash table +** (PCache1.apHash structure) that it is currently stored in. ** -** If the pager has not already entered the error state, but an IO or -** malloc error occurs during a rollback, then this will itself cause -** the pager to enter the error state. Which will be cleared by the -** call to pager_unlock(), as described above. +** The PGroup mutex must be held when this function is called. */ -static void pagerUnlockAndRollback(Pager *pPager){ - if( pPager->errCode==SQLITE_OK && pPager->state>=PAGER_RESERVED ){ - sqlite3BeginBenignMalloc(); - sqlite3PagerRollback(pPager); - sqlite3EndBenignMalloc(); +static void pcache1RemoveFromHash(PgHdr1 *pPage){ + unsigned int h; + PCache1 *pCache = pPage->pCache; + PgHdr1 **pp; + + assert( sqlite3_mutex_held(pCache->pGroup->mutex) ); + h = pPage->iKey % pCache->nHash; + for(pp=&pCache->apHash[h]; (*pp)!=pPage; pp=&(*pp)->pNext); + *pp = (*pp)->pNext; + + pCache->nPage--; +} + +/* +** If there are currently more than nMaxPage pages allocated, try +** to recycle pages to reduce the number allocated to nMaxPage. +*/ +static void pcache1EnforceMaxPage(PGroup *pGroup){ + assert( sqlite3_mutex_held(pGroup->mutex) ); + while( pGroup->nCurrentPage>pGroup->nMaxPage && pGroup->pLruTail ){ + PgHdr1 *p = pGroup->pLruTail; + assert( p->pCache->pGroup==pGroup ); + pcache1PinPage(p); + pcache1RemoveFromHash(p); + pcache1FreePage(p); } - pager_unlock(pPager); } /* -** This routine ends a transaction. A transaction is usually ended by -** either a COMMIT or a ROLLBACK operation. This routine may be called -** after rollback of a hot-journal, or if an error occurs while opening -** the journal file or writing the very first journal-header of a -** database transaction. -** -** If the pager is in PAGER_SHARED or PAGER_UNLOCK state when this -** routine is called, it is a no-op (returns SQLITE_OK). -** -** Otherwise, any active savepoints are released. -** -** If the journal file is open, then it is "finalized". Once a journal -** file has been finalized it is not possible to use it to roll back a -** transaction. Nor will it be considered to be a hot-journal by this -** or any other database connection. Exactly how a journal is finalized -** depends on whether or not the pager is running in exclusive mode and -** the current journal-mode (Pager.journalMode value), as follows: -** -** journalMode==MEMORY -** Journal file descriptor is simply closed. This destroys an -** in-memory journal. -** -** journalMode==TRUNCATE -** Journal file is truncated to zero bytes in size. -** -** journalMode==PERSIST -** The first 28 bytes of the journal file are zeroed. This invalidates -** the first journal header in the file, and hence the entire journal -** file. An invalid journal file cannot be rolled back. -** -** journalMode==DELETE -** The journal file is closed and deleted using sqlite3OsDelete(). -** -** If the pager is running in exclusive mode, this method of finalizing -** the journal file is never used. Instead, if the journalMode is -** DELETE and the pager is in exclusive mode, the method described under -** journalMode==PERSIST is used instead. -** -** After the journal is finalized, if running in non-exclusive mode, the -** pager moves to PAGER_SHARED state (and downgrades the lock on the -** database file accordingly). -** -** If the pager is running in exclusive mode and is in PAGER_SYNCED state, -** it moves to PAGER_EXCLUSIVE. No locks are downgraded when running in -** exclusive mode. +** Discard all pages from cache pCache with a page number (key value) +** greater than or equal to iLimit. Any pinned pages that meet this +** criteria are unpinned before they are discarded. ** -** SQLITE_OK is returned if no error occurs. If an error occurs during -** any of the IO operations to finalize the journal file or unlock the -** database then the IO error code is returned to the user. If the -** operation to finalize the journal file fails, then the code still -** tries to unlock the database file if not in exclusive mode. If the -** unlock operation fails as well, then the first error code related -** to the first error encountered (the journal finalization one) is -** returned. +** The PCache mutex must be held when this function is called. */ -static int pager_end_transaction(Pager *pPager, int hasMaster){ - int rc = SQLITE_OK; /* Error code from journal finalization operation */ - int rc2 = SQLITE_OK; /* Error code from db file unlock operation */ - - if( pPager->statenPage is correct */ + unsigned int h; + assert( sqlite3_mutex_held(pCache->pGroup->mutex) ); + for(h=0; hnHash; h++){ + PgHdr1 **pp = &pCache->apHash[h]; + PgHdr1 *pPage; + while( (pPage = *pp)!=0 ){ + if( pPage->iKey>=iLimit ){ + pCache->nPage--; + *pp = pPage->pNext; + pcache1PinPage(pPage); + pcache1FreePage(pPage); + }else{ + pp = &pPage->pNext; + TESTONLY( nPage++; ) + } + } } - releaseAllSavepoints(pPager); + assert( pCache->nPage==nPage ); +} - assert( isOpen(pPager->jfd) || pPager->pInJournal==0 ); - if( isOpen(pPager->jfd) ){ +/******************************************************************************/ +/******** sqlite3_pcache Methods **********************************************/ - /* TODO: There's a problem here if a journal-file was opened in MEMORY - ** mode and then the journal-mode is changed to TRUNCATE or PERSIST - ** during the transaction. This code should be changed to assume - ** that the journal mode has not changed since the transaction was - ** started. And the sqlite3PagerJournalMode() function should be - ** changed to make sure that this is the case too. - */ +/* +** Implementation of the sqlite3_pcache.xInit method. +*/ +static int pcache1Init(void *NotUsed){ + UNUSED_PARAMETER(NotUsed); + assert( pcache1.isInit==0 ); + memset(&pcache1, 0, sizeof(pcache1)); + if( sqlite3GlobalConfig.bCoreMutex ){ + pcache1.grp.mutex = sqlite3_mutex_alloc(SQLITE_MUTEX_STATIC_LRU); + pcache1.mutex = sqlite3_mutex_alloc(SQLITE_MUTEX_STATIC_PMEM); + } + pcache1.grp.mxPinned = 10; + pcache1.isInit = 1; + return SQLITE_OK; +} - /* Finalize the journal file. */ - if( pPager->journalMode==PAGER_JOURNALMODE_MEMORY ){ - int isMemoryJournal = sqlite3IsMemJournal(pPager->jfd); - sqlite3OsClose(pPager->jfd); - if( !isMemoryJournal ){ - rc = sqlite3OsDelete(pPager->pVfs, pPager->zJournal, 0); - } - }else if( pPager->journalMode==PAGER_JOURNALMODE_TRUNCATE ){ - if( pPager->journalOff==0 ){ - rc = SQLITE_OK; - }else{ - rc = sqlite3OsTruncate(pPager->jfd, 0); - } - pPager->journalOff = 0; - pPager->journalStarted = 0; - }else if( pPager->exclusiveMode - || pPager->journalMode==PAGER_JOURNALMODE_PERSIST - ){ - rc = zeroJournalHdr(pPager, hasMaster); - pager_error(pPager, rc); - pPager->journalOff = 0; - pPager->journalStarted = 0; - }else{ - assert( pPager->journalMode==PAGER_JOURNALMODE_DELETE || rc ); - sqlite3OsClose(pPager->jfd); - if( rc==SQLITE_OK && !pPager->tempFile ){ - rc = sqlite3OsDelete(pPager->pVfs, pPager->zJournal, 0); - } - } +/* +** Implementation of the sqlite3_pcache.xShutdown method. +** Note that the static mutex allocated in xInit does +** not need to be freed. +*/ +static void pcache1Shutdown(void *NotUsed){ + UNUSED_PARAMETER(NotUsed); + assert( pcache1.isInit!=0 ); + memset(&pcache1, 0, sizeof(pcache1)); +} -#ifdef SQLITE_CHECK_PAGES - sqlite3PcacheIterateDirty(pPager->pPCache, pager_set_pagehash); +/* +** Implementation of the sqlite3_pcache.xCreate method. +** +** Allocate a new cache. +*/ +static sqlite3_pcache *pcache1Create(int szPage, int szExtra, int bPurgeable){ + PCache1 *pCache; /* The newly created page cache */ + PGroup *pGroup; /* The group the new page cache will belong to */ + int sz; /* Bytes of memory required to allocate the new cache */ + + /* + ** The seperateCache variable is true if each PCache has its own private + ** PGroup. In other words, separateCache is true for mode (1) where no + ** mutexing is required. + ** + ** * Always use a unified cache (mode-2) if ENABLE_MEMORY_MANAGEMENT + ** + ** * Always use a unified cache in single-threaded applications + ** + ** * Otherwise (if multi-threaded and ENABLE_MEMORY_MANAGEMENT is off) + ** use separate caches (mode-1) + */ +#if defined(SQLITE_ENABLE_MEMORY_MANAGEMENT) || SQLITE_THREADSAFE==0 + const int separateCache = 0; +#else + int separateCache = sqlite3GlobalConfig.bCoreMutex>0; #endif - sqlite3PcacheCleanAll(pPager->pPCache); - sqlite3BitvecDestroy(pPager->pInJournal); - pPager->pInJournal = 0; - pPager->nRec = 0; - } + assert( (szPage & (szPage-1))==0 && szPage>=512 && szPage<=65536 ); + assert( szExtra < 300 ); - if( !pPager->exclusiveMode ){ - rc2 = osUnlock(pPager->fd, SHARED_LOCK); - pPager->state = PAGER_SHARED; - pPager->changeCountDone = 0; - }else if( pPager->state==PAGER_SYNCED ){ - pPager->state = PAGER_EXCLUSIVE; + sz = sizeof(PCache1) + sizeof(PGroup)*separateCache; + pCache = (PCache1 *)sqlite3_malloc(sz); + if( pCache ){ + memset(pCache, 0, sz); + if( separateCache ){ + pGroup = (PGroup*)&pCache[1]; + pGroup->mxPinned = 10; + }else{ + pGroup = &pcache1.grp; + } + pCache->pGroup = pGroup; + pCache->szPage = szPage; + pCache->szExtra = szExtra; + pCache->bPurgeable = (bPurgeable ? 1 : 0); + if( bPurgeable ){ + pCache->nMin = 10; + pcache1EnterMutex(pGroup); + pGroup->nMinPage += pCache->nMin; + pGroup->mxPinned = pGroup->nMaxPage + 10 - pGroup->nMinPage; + pcache1LeaveMutex(pGroup); + } } - pPager->setMaster = 0; - pPager->needSync = 0; - pPager->dbModified = 0; + return (sqlite3_pcache *)pCache; +} - /* TODO: Is this optimal? Why is the db size invalidated here - ** when the database file is not unlocked? */ - pPager->dbOrigSize = 0; - sqlite3PcacheTruncate(pPager->pPCache, pPager->dbSize); - if( !MEMDB ){ - pPager->dbSizeValid = 0; +/* +** Implementation of the sqlite3_pcache.xCachesize method. +** +** Configure the cache_size limit for a cache. +*/ +static void pcache1Cachesize(sqlite3_pcache *p, int nMax){ + PCache1 *pCache = (PCache1 *)p; + if( pCache->bPurgeable ){ + PGroup *pGroup = pCache->pGroup; + pcache1EnterMutex(pGroup); + pGroup->nMaxPage += (nMax - pCache->nMax); + pGroup->mxPinned = pGroup->nMaxPage + 10 - pGroup->nMinPage; + pCache->nMax = nMax; + pCache->n90pct = pCache->nMax*9/10; + pcache1EnforceMaxPage(pGroup); + pcache1LeaveMutex(pGroup); } - - return (rc==SQLITE_OK?rc2:rc); } /* -** Parameter aData must point to a buffer of pPager->pageSize bytes -** of data. Compute and return a checksum based ont the contents of the -** page of data and the current value of pPager->cksumInit. -** -** This is not a real checksum. It is really just the sum of the -** random initial value (pPager->cksumInit) and every 200th byte -** of the page data, starting with byte offset (pPager->pageSize%200). -** Each byte is interpreted as an 8-bit unsigned integer. -** -** Changing the formula used to compute this checksum results in an -** incompatible journal file format. +** Implementation of the sqlite3_pcache.xShrink method. ** -** If journal corruption occurs due to a power failure, the most likely -** scenario is that one end or the other of the record will be changed. -** It is much less likely that the two ends of the journal record will be -** correct and the middle be corrupt. Thus, this "checksum" scheme, -** though fast and simple, catches the mostly likely kind of corruption. +** Free up as much memory as possible. */ -static u32 pager_cksum(Pager *pPager, const u8 *aData){ - u32 cksum = pPager->cksumInit; /* Checksum value to return */ - int i = pPager->pageSize-200; /* Loop counter */ - while( i>0 ){ - cksum += aData[i]; - i -= 200; +static void pcache1Shrink(sqlite3_pcache *p){ + PCache1 *pCache = (PCache1*)p; + if( pCache->bPurgeable ){ + PGroup *pGroup = pCache->pGroup; + int savedMaxPage; + pcache1EnterMutex(pGroup); + savedMaxPage = pGroup->nMaxPage; + pGroup->nMaxPage = 0; + pcache1EnforceMaxPage(pGroup); + pGroup->nMaxPage = savedMaxPage; + pcache1LeaveMutex(pGroup); } - return cksum; } /* -** Read a single page from either the journal file (if isMainJrnl==1) or -** from the sub-journal (if isMainJrnl==0) and playback that page. -** The page begins at offset *pOffset into the file. The *pOffset -** value is increased to the start of the next page in the journal. +** Implementation of the sqlite3_pcache.xPagecount method. +*/ +static int pcache1Pagecount(sqlite3_pcache *p){ + int n; + PCache1 *pCache = (PCache1*)p; + pcache1EnterMutex(pCache->pGroup); + n = pCache->nPage; + pcache1LeaveMutex(pCache->pGroup); + return n; +} + +/* +** Implementation of the sqlite3_pcache.xFetch method. ** -** The isMainJrnl flag is true if this is the main rollback journal and -** false for the statement journal. The main rollback journal uses -** checksums - the statement journal does not. +** Fetch a page by key value. ** -** If the page number of the page record read from the (sub-)journal file -** is greater than the current value of Pager.dbSize, then playback is -** skipped and SQLITE_OK is returned. +** Whether or not a new page may be allocated by this function depends on +** the value of the createFlag argument. 0 means do not allocate a new +** page. 1 means allocate a new page if space is easily available. 2 +** means to try really hard to allocate a new page. ** -** If pDone is not NULL, then it is a record of pages that have already -** been played back. If the page at *pOffset has already been played back -** (if the corresponding pDone bit is set) then skip the playback. -** Make sure the pDone bit corresponding to the *pOffset page is set -** prior to returning. +** For a non-purgeable cache (a cache used as the storage for an in-memory +** database) there is really no difference between createFlag 1 and 2. So +** the calling function (pcache.c) will never have a createFlag of 1 on +** a non-purgeable cache. ** -** If the page record is successfully read from the (sub-)journal file -** and played back, then SQLITE_OK is returned. If an IO error occurs -** while reading the record from the (sub-)journal file or while writing -** to the database file, then the IO error code is returned. If data -** is successfully read from the (sub-)journal file but appears to be -** corrupted, SQLITE_DONE is returned. Data is considered corrupted in -** two circumstances: -** -** * If the record page-number is illegal (0 or PAGER_MJ_PGNO), or -** * If the record is being rolled back from the main journal file -** and the checksum field does not match the record content. +** There are three different approaches to obtaining space for a page, +** depending on the value of parameter createFlag (which may be 0, 1 or 2). ** -** Neither of these two scenarios are possible during a savepoint rollback. +** 1. Regardless of the value of createFlag, the cache is searched for a +** copy of the requested page. If one is found, it is returned. ** -** If this is a savepoint rollback, then memory may have to be dynamically -** allocated by this function. If this is the case and an allocation fails, -** SQLITE_NOMEM is returned. +** 2. If createFlag==0 and the page is not already in the cache, NULL is +** returned. +** +** 3. If createFlag is 1, and the page is not already in the cache, then +** return NULL (do not allocate a new page) if any of the following +** conditions are true: +** +** (a) the number of pages pinned by the cache is greater than +** PCache1.nMax, or +** +** (b) the number of pages pinned by the cache is greater than +** the sum of nMax for all purgeable caches, less the sum of +** nMin for all other purgeable caches, or +** +** 4. If none of the first three conditions apply and the cache is marked +** as purgeable, and if one of the following is true: +** +** (a) The number of pages allocated for the cache is already +** PCache1.nMax, or +** +** (b) The number of pages allocated for all purgeable caches is +** already equal to or greater than the sum of nMax for all +** purgeable caches, +** +** (c) The system is under memory pressure and wants to avoid +** unnecessary pages cache entry allocations +** +** then attempt to recycle a page from the LRU list. If it is the right +** size, return the recycled buffer. Otherwise, free the buffer and +** proceed to step 5. +** +** 5. Otherwise, allocate and return a new page buffer. */ -static int pager_playback_one_page( - Pager *pPager, /* The pager being played back */ - int isMainJrnl, /* 1 -> main journal. 0 -> sub-journal. */ - int isUnsync, /* True if reading from unsynced main journal */ - i64 *pOffset, /* Offset of record to playback */ - int isSavepnt, /* True for a savepoint rollback */ - Bitvec *pDone /* Bitvec of pages already played back */ +static sqlite3_pcache_page *pcache1Fetch( + sqlite3_pcache *p, + unsigned int iKey, + int createFlag ){ - int rc; - PgHdr *pPg; /* An existing page in the cache */ - Pgno pgno; /* The page number of a page in journal */ - u32 cksum; /* Checksum used for sanity checking */ - u8 *aData; /* Temporary storage for the page */ - sqlite3_file *jfd; /* The file descriptor for the journal file */ + unsigned int nPinned; + PCache1 *pCache = (PCache1 *)p; + PGroup *pGroup; + PgHdr1 *pPage = 0; - assert( (isMainJrnl&~1)==0 ); /* isMainJrnl is 0 or 1 */ - assert( (isSavepnt&~1)==0 ); /* isSavepnt is 0 or 1 */ - assert( isMainJrnl || pDone ); /* pDone always used on sub-journals */ - assert( isSavepnt || pDone==0 ); /* pDone never used on non-savepoint */ + assert( pCache->bPurgeable || createFlag!=1 ); + assert( pCache->bPurgeable || pCache->nMin==0 ); + assert( pCache->bPurgeable==0 || pCache->nMin==10 ); + assert( pCache->nMin==0 || pCache->bPurgeable ); + pcache1EnterMutex(pGroup = pCache->pGroup); - aData = (u8*)pPager->pTmpSpace; - assert( aData ); /* Temp storage must have already been allocated */ + /* Step 1: Search the hash table for an existing entry. */ + if( pCache->nHash>0 ){ + unsigned int h = iKey % pCache->nHash; + for(pPage=pCache->apHash[h]; pPage&&pPage->iKey!=iKey; pPage=pPage->pNext); + } - /* Read the page number and page data from the journal or sub-journal - ** file. Return an error code to the caller if an IO error occurs. - */ - jfd = isMainJrnl ? pPager->jfd : pPager->sjfd; - rc = read32bits(jfd, *pOffset, &pgno); - if( rc!=SQLITE_OK ) return rc; - rc = sqlite3OsRead(jfd, aData, pPager->pageSize, (*pOffset)+4); - if( rc!=SQLITE_OK ) return rc; - *pOffset += pPager->pageSize + 4 + isMainJrnl*4; + /* Step 2: Abort if no existing page is found and createFlag is 0 */ + if( pPage || createFlag==0 ){ + pcache1PinPage(pPage); + goto fetch_out; + } - /* Sanity checking on the page. This is more important that I originally - ** thought. If a power failure occurs while the journal is being written, - ** it could cause invalid data to be written into the journal. We need to - ** detect this invalid data (with high probability) and ignore it. + /* The pGroup local variable will normally be initialized by the + ** pcache1EnterMutex() macro above. But if SQLITE_MUTEX_OMIT is defined, + ** then pcache1EnterMutex() is a no-op, so we have to initialize the + ** local variable here. Delaying the initialization of pGroup is an + ** optimization: The common case is to exit the module before reaching + ** this point. */ - if( pgno==0 || pgno==PAGER_MJ_PGNO(pPager) ){ - assert( !isSavepnt ); - return SQLITE_DONE; +#ifdef SQLITE_MUTEX_OMIT + pGroup = pCache->pGroup; +#endif + + /* Step 3: Abort if createFlag is 1 but the cache is nearly full */ + assert( pCache->nPage >= pCache->nRecyclable ); + nPinned = pCache->nPage - pCache->nRecyclable; + assert( pGroup->mxPinned == pGroup->nMaxPage + 10 - pGroup->nMinPage ); + assert( pCache->n90pct == pCache->nMax*9/10 ); + if( createFlag==1 && ( + nPinned>=pGroup->mxPinned + || nPinned>=pCache->n90pct + || pcache1UnderMemoryPressure(pCache) + )){ + goto fetch_out; } - if( pgno>(Pgno)pPager->dbSize || sqlite3BitvecTest(pDone, pgno) ){ - return SQLITE_OK; + + if( pCache->nPage>=pCache->nHash && pcache1ResizeHash(pCache) ){ + goto fetch_out; } - if( isMainJrnl ){ - rc = read32bits(jfd, (*pOffset)-4, &cksum); - if( rc ) return rc; - if( !isSavepnt && pager_cksum(pPager, aData)!=cksum ){ - return SQLITE_DONE; + + /* Step 4. Try to recycle a page. */ + if( pCache->bPurgeable && pGroup->pLruTail && ( + (pCache->nPage+1>=pCache->nMax) + || pGroup->nCurrentPage>=pGroup->nMaxPage + || pcache1UnderMemoryPressure(pCache) + )){ + PCache1 *pOther; + pPage = pGroup->pLruTail; + pcache1RemoveFromHash(pPage); + pcache1PinPage(pPage); + pOther = pPage->pCache; + + /* We want to verify that szPage and szExtra are the same for pOther + ** and pCache. Assert that we can verify this by comparing sums. */ + assert( (pCache->szPage & (pCache->szPage-1))==0 && pCache->szPage>=512 ); + assert( pCache->szExtra<512 ); + assert( (pOther->szPage & (pOther->szPage-1))==0 && pOther->szPage>=512 ); + assert( pOther->szExtra<512 ); + + if( pOther->szPage+pOther->szExtra != pCache->szPage+pCache->szExtra ){ + pcache1FreePage(pPage); + pPage = 0; + }else{ + pGroup->nCurrentPage -= (pOther->bPurgeable - pCache->bPurgeable); } } - if( pDone && (rc = sqlite3BitvecSet(pDone, pgno))!=SQLITE_OK ){ - return rc; + /* Step 5. If a usable page buffer has still not been found, + ** attempt to allocate a new one. + */ + if( !pPage ){ + if( createFlag==1 ) sqlite3BeginBenignMalloc(); + pPage = pcache1AllocPage(pCache); + if( createFlag==1 ) sqlite3EndBenignMalloc(); } - assert( pPager->state==PAGER_RESERVED || pPager->state>=PAGER_EXCLUSIVE ); - - /* If the pager is in RESERVED state, then there must be a copy of this - ** page in the pager cache. In this case just update the pager cache, - ** not the database file. The page is left marked dirty in this case. - ** - ** An exception to the above rule: If the database is in no-sync mode - ** and a page is moved during an incremental vacuum then the page may - ** not be in the pager cache. Later: if a malloc() or IO error occurs - ** during a Movepage() call, then the page may not be in the cache - ** either. So the condition described in the above paragraph is not - ** assert()able. - ** - ** If in EXCLUSIVE state, then we update the pager cache if it exists - ** and the main file. The page is then marked not dirty. - ** - ** Ticket #1171: The statement journal might contain page content that is - ** different from the page content at the start of the transaction. - ** This occurs when a page is changed prior to the start of a statement - ** then changed again within the statement. When rolling back such a - ** statement we must not write to the original database unless we know - ** for certain that original page contents are synced into the main rollback - ** journal. Otherwise, a power loss might leave modified data in the - ** database file without an entry in the rollback journal that can - ** restore the database to its original form. Two conditions must be - ** met before writing to the database files. (1) the database must be - ** locked. (2) we know that the original page content is fully synced - ** in the main journal either because the page is not in cache or else - ** the page is marked as needSync==0. - ** - ** 2008-04-14: When attempting to vacuum a corrupt database file, it - ** is possible to fail a statement on a database that does not yet exist. - ** Do not attempt to write if database file has never been opened. - */ - pPg = pager_lookup(pPager, pgno); - assert( pPg || !MEMDB ); - PAGERTRACE(("PLAYBACK %d page %d hash(%08x) %s\n", - PAGERID(pPager), pgno, pager_datahash(pPager->pageSize, aData), - (isMainJrnl?"main-journal":"sub-journal") - )); - if( (pPager->state>=PAGER_EXCLUSIVE) - && (pPg==0 || 0==(pPg->flags&PGHDR_NEED_SYNC)) - && isOpen(pPager->fd) - && !isUnsync - ){ - i64 ofst = (pgno-1)*(i64)pPager->pageSize; - rc = sqlite3OsWrite(pPager->fd, aData, pPager->pageSize, ofst); - if( pgno>pPager->dbFileSize ){ - pPager->dbFileSize = pgno; - } - if( pPager->pBackup ){ - CODEC1(pPager, aData, pgno, 3, rc=SQLITE_NOMEM); - sqlite3BackupUpdate(pPager->pBackup, pgno, aData); - CODEC1(pPager, aData, pgno, 0, rc=SQLITE_NOMEM); - } - }else if( !isMainJrnl && pPg==0 ){ - /* If this is a rollback of a savepoint and data was not written to - ** the database and the page is not in-memory, there is a potential - ** problem. When the page is next fetched by the b-tree layer, it - ** will be read from the database file, which may or may not be - ** current. - ** - ** There are a couple of different ways this can happen. All are quite - ** obscure. When running in synchronous mode, this can only happen - ** if the page is on the free-list at the start of the transaction, then - ** populated, then moved using sqlite3PagerMovepage(). - ** - ** The solution is to add an in-memory page to the cache containing - ** the data just read from the sub-journal. Mark the page as dirty - ** and if the pager requires a journal-sync, then mark the page as - ** requiring a journal-sync before it is written. - */ - assert( isSavepnt ); - if( (rc = sqlite3PagerAcquire(pPager, pgno, &pPg, 1))!=SQLITE_OK ){ - return rc; - } - pPg->flags &= ~PGHDR_NEED_READ; - sqlite3PcacheMakeDirty(pPg); + if( pPage ){ + unsigned int h = iKey % pCache->nHash; + pCache->nPage++; + pPage->iKey = iKey; + pPage->pNext = pCache->apHash[h]; + pPage->pCache = pCache; + pPage->pLruPrev = 0; + pPage->pLruNext = 0; + *(void **)pPage->page.pExtra = 0; + pCache->apHash[h] = pPage; } - if( pPg ){ - /* No page should ever be explicitly rolled back that is in use, except - ** for page 1 which is held in use in order to keep the lock on the - ** database active. However such a page may be rolled back as a result - ** of an internal error resulting in an automatic call to - ** sqlite3PagerRollback(). - */ - void *pData; - pData = pPg->pData; - memcpy(pData, aData, pPager->pageSize); - if( pPager->xReiniter ){ - pPager->xReiniter(pPg); - } - if( isMainJrnl && (!isSavepnt || *pOffset<=pPager->journalHdr) ){ - /* If the contents of this page were just restored from the main - ** journal file, then its content must be as they were when the - ** transaction was first opened. In this case we can mark the page - ** as clean, since there will be no need to write it out to the. - ** - ** There is one exception to this rule. If the page is being rolled - ** back as part of a savepoint (or statement) rollback from an - ** unsynced portion of the main journal file, then it is not safe - ** to mark the page as clean. This is because marking the page as - ** clean will clear the PGHDR_NEED_SYNC flag. Since the page is - ** already in the journal file (recorded in Pager.pInJournal) and - ** the PGHDR_NEED_SYNC flag is cleared, if the page is written to - ** again within this transaction, it will be marked as dirty but - ** the PGHDR_NEED_SYNC flag will not be set. It could then potentially - ** be written out into the database file before its journal file - ** segment is synced. If a crash occurs during or following this, - ** database corruption may ensue. - */ - sqlite3PcacheMakeClean(pPg); - } -#ifdef SQLITE_CHECK_PAGES - pPg->pageHash = pager_pagehash(pPg); -#endif - /* If this was page 1, then restore the value of Pager.dbFileVers. - ** Do this before any decoding. */ - if( pgno==1 ){ - memcpy(&pPager->dbFileVers, &((u8*)pData)[24],sizeof(pPager->dbFileVers)); - } - /* Decode the page just read from disk */ - CODEC1(pPager, pData, pPg->pgno, 3, rc=SQLITE_NOMEM); - sqlite3PcacheRelease(pPg); +fetch_out: + if( pPage && iKey>pCache->iMaxKey ){ + pCache->iMaxKey = iKey; } - return rc; + pcache1LeaveMutex(pGroup); + return &pPage->page; } -#if !defined(NDEBUG) || defined(SQLITE_COVERAGE_TEST) -/* -** This routine looks ahead into the main journal file and determines -** whether or not the next record (the record that begins at file -** offset pPager->journalOff) is a well-formed page record consisting -** of a valid page number, pPage->pageSize bytes of content, followed -** by a valid checksum. -** -** The pager never needs to know this in order to do its job. This -** routine is only used from with assert() and testcase() macros. -*/ -static int pagerNextJournalPageIsValid(Pager *pPager){ - Pgno pgno; /* The page number of the page */ - u32 cksum; /* The page checksum */ - int rc; /* Return code from read operations */ - sqlite3_file *fd; /* The file descriptor from which we are reading */ - u8 *aData; /* Content of the page */ - - /* Read the page number header */ - fd = pPager->jfd; - rc = read32bits(fd, pPager->journalOff, &pgno); - if( rc!=SQLITE_OK ){ return 0; } /*NO_TEST*/ - if( pgno==0 || pgno==PAGER_MJ_PGNO(pPager) ){ return 0; } /*NO_TEST*/ - if( pgno>(Pgno)pPager->dbSize ){ return 0; } /*NO_TEST*/ - - /* Read the checksum */ - rc = read32bits(fd, pPager->journalOff+pPager->pageSize+4, &cksum); - if( rc!=SQLITE_OK ){ return 0; } /*NO_TEST*/ - - /* Read the data and verify the checksum */ - aData = (u8*)pPager->pTmpSpace; - rc = sqlite3OsRead(fd, aData, pPager->pageSize, pPager->journalOff+4); - if( rc!=SQLITE_OK ){ return 0; } /*NO_TEST*/ - if( pager_cksum(pPager, aData)!=cksum ){ return 0; } /*NO_TEST*/ - - /* Reach this point only if the page is valid */ - return 1; -} -#endif /* !defined(NDEBUG) || defined(SQLITE_COVERAGE_TEST) */ /* -** Parameter zMaster is the name of a master journal file. A single journal -** file that referred to the master journal file has just been rolled back. -** This routine checks if it is possible to delete the master journal file, -** and does so if it is. -** -** Argument zMaster may point to Pager.pTmpSpace. So that buffer is not -** available for use within this function. +** Implementation of the sqlite3_pcache.xUnpin method. ** -** When a master journal file is created, it is populated with the names -** of all of its child journals, one after another, formatted as utf-8 -** encoded text. The end of each child journal file is marked with a -** nul-terminator byte (0x00). i.e. the entire contents of a master journal -** file for a transaction involving two databases might be: -** -** "/home/bill/a.db-journal\x00/home/bill/b.db-journal\x00" -** -** A master journal file may only be deleted once all of its child -** journals have been rolled back. -** -** This function reads the contents of the master-journal file into -** memory and loops through each of the child journal names. For -** each child journal, it checks if: -** -** * if the child journal exists, and if so -** * if the child journal contains a reference to master journal -** file zMaster -** -** If a child journal can be found that matches both of the criteria -** above, this function returns without doing anything. Otherwise, if -** no such child journal can be found, file zMaster is deleted from -** the file-system using sqlite3OsDelete(). -** -** If an IO error within this function, an error code is returned. This -** function allocates memory by calling sqlite3Malloc(). If an allocation -** fails, SQLITE_NOMEM is returned. Otherwise, if no IO or malloc errors -** occur, SQLITE_OK is returned. -** -** TODO: This function allocates a single block of memory to load -** the entire contents of the master journal file. This could be -** a couple of kilobytes or so - potentially larger than the page -** size. +** Mark a page as unpinned (eligible for asynchronous recycling). */ -static int pager_delmaster(Pager *pPager, const char *zMaster){ - sqlite3_vfs *pVfs = pPager->pVfs; - int rc; /* Return code */ - sqlite3_file *pMaster; /* Malloc'd master-journal file descriptor */ - sqlite3_file *pJournal; /* Malloc'd child-journal file descriptor */ - char *zMasterJournal = 0; /* Contents of master journal file */ - i64 nMasterJournal; /* Size of master journal file */ +static void pcache1Unpin( + sqlite3_pcache *p, + sqlite3_pcache_page *pPg, + int reuseUnlikely +){ + PCache1 *pCache = (PCache1 *)p; + PgHdr1 *pPage = (PgHdr1 *)pPg; + PGroup *pGroup = pCache->pGroup; + + assert( pPage->pCache==pCache ); + pcache1EnterMutex(pGroup); - /* Allocate space for both the pJournal and pMaster file descriptors. - ** If successful, open the master journal file for reading. + /* It is an error to call this function if the page is already + ** part of the PGroup LRU list. */ - pMaster = (sqlite3_file *)sqlite3MallocZero(pVfs->szOsFile * 2); - pJournal = (sqlite3_file *)(((u8 *)pMaster) + pVfs->szOsFile); - if( !pMaster ){ - rc = SQLITE_NOMEM; + assert( pPage->pLruPrev==0 && pPage->pLruNext==0 ); + assert( pGroup->pLruHead!=pPage && pGroup->pLruTail!=pPage ); + + if( reuseUnlikely || pGroup->nCurrentPage>pGroup->nMaxPage ){ + pcache1RemoveFromHash(pPage); + pcache1FreePage(pPage); }else{ - const int flags = (SQLITE_OPEN_READONLY|SQLITE_OPEN_MASTER_JOURNAL); - rc = sqlite3OsOpen(pVfs, zMaster, pMaster, flags, 0); + /* Add the page to the PGroup LRU list. */ + if( pGroup->pLruHead ){ + pGroup->pLruHead->pLruPrev = pPage; + pPage->pLruNext = pGroup->pLruHead; + pGroup->pLruHead = pPage; + }else{ + pGroup->pLruTail = pPage; + pGroup->pLruHead = pPage; + } + pCache->nRecyclable++; } - if( rc!=SQLITE_OK ) goto delmaster_out; - - rc = sqlite3OsFileSize(pMaster, &nMasterJournal); - if( rc!=SQLITE_OK ) goto delmaster_out; - - if( nMasterJournal>0 ){ - char *zJournal; - char *zMasterPtr = 0; - int nMasterPtr = pVfs->mxPathname+1; - /* Load the entire master journal file into space obtained from - ** sqlite3_malloc() and pointed to by zMasterJournal. - */ - zMasterJournal = (char *)sqlite3Malloc((int)nMasterJournal + nMasterPtr); - if( !zMasterJournal ){ - rc = SQLITE_NOMEM; - goto delmaster_out; - } - zMasterPtr = &zMasterJournal[nMasterJournal]; - rc = sqlite3OsRead(pMaster, zMasterJournal, (int)nMasterJournal, 0); - if( rc!=SQLITE_OK ) goto delmaster_out; + pcache1LeaveMutex(pCache->pGroup); +} - zJournal = zMasterJournal; - while( (zJournal-zMasterJournal)iKey==iOld ); + assert( pPage->pCache==pCache ); - rc = readMasterJournal(pJournal, zMasterPtr, nMasterPtr); - sqlite3OsClose(pJournal); - if( rc!=SQLITE_OK ){ - goto delmaster_out; - } + pcache1EnterMutex(pCache->pGroup); - c = zMasterPtr[0]!=0 && strcmp(zMasterPtr, zMaster)==0; - if( c ){ - /* We have a match. Do not delete the master journal file. */ - goto delmaster_out; - } - } - zJournal += (sqlite3Strlen30(zJournal)+1); - } + h = iOld%pCache->nHash; + pp = &pCache->apHash[h]; + while( (*pp)!=pPage ){ + pp = &(*pp)->pNext; } - - rc = sqlite3OsDelete(pVfs, zMaster, 0); + *pp = pPage->pNext; -delmaster_out: - if( zMasterJournal ){ - sqlite3_free(zMasterJournal); - } - if( pMaster ){ - sqlite3OsClose(pMaster); - assert( !isOpen(pJournal) ); + h = iNew%pCache->nHash; + pPage->iKey = iNew; + pPage->pNext = pCache->apHash[h]; + pCache->apHash[h] = pPage; + if( iNew>pCache->iMaxKey ){ + pCache->iMaxKey = iNew; } - sqlite3_free(pMaster); - return rc; -} + pcache1LeaveMutex(pCache->pGroup); +} /* -** This function is used to change the actual size of the database -** file in the file-system. This only happens when committing a transaction, -** or rolling back a transaction (including rolling back a hot-journal). -** -** If the main database file is not open, or an exclusive lock is not -** held, this function is a no-op. Otherwise, the size of the file is -** changed to nPage pages (nPage*pPager->pageSize bytes). If the file -** on disk is currently larger than nPage pages, then use the VFS -** xTruncate() method to truncate it. -** -** Or, it might might be the case that the file on disk is smaller than -** nPage pages. Some operating system implementations can get confused if -** you try to truncate a file to some size that is larger than it -** currently is, so detect this case and write a single zero byte to -** the end of the new file instead. +** Implementation of the sqlite3_pcache.xTruncate method. ** -** If successful, return SQLITE_OK. If an IO error occurs while modifying -** the database file, return the error code to the caller. +** Discard all unpinned pages in the cache with a page number equal to +** or greater than parameter iLimit. Any pinned pages with a page number +** equal to or greater than iLimit are implicitly unpinned. */ -static int pager_truncate(Pager *pPager, Pgno nPage){ - int rc = SQLITE_OK; - if( pPager->state>=PAGER_EXCLUSIVE && isOpen(pPager->fd) ){ - i64 currentSize, newSize; - /* TODO: Is it safe to use Pager.dbFileSize here? */ - rc = sqlite3OsFileSize(pPager->fd, ¤tSize); - newSize = pPager->pageSize*(i64)nPage; - if( rc==SQLITE_OK && currentSize!=newSize ){ - if( currentSize>newSize ){ - rc = sqlite3OsTruncate(pPager->fd, newSize); - }else{ - rc = sqlite3OsWrite(pPager->fd, "", 1, newSize-1); - } - if( rc==SQLITE_OK ){ - pPager->dbFileSize = nPage; - } - } +static void pcache1Truncate(sqlite3_pcache *p, unsigned int iLimit){ + PCache1 *pCache = (PCache1 *)p; + pcache1EnterMutex(pCache->pGroup); + if( iLimit<=pCache->iMaxKey ){ + pcache1TruncateUnsafe(pCache, iLimit); + pCache->iMaxKey = iLimit-1; } - return rc; + pcache1LeaveMutex(pCache->pGroup); } /* -** Set the value of the Pager.sectorSize variable for the given -** pager based on the value returned by the xSectorSize method -** of the open database file. The sector size will be used used -** to determine the size and alignment of journal header and -** master journal pointers within created journal files. -** -** For temporary files the effective sector size is always 512 bytes. +** Implementation of the sqlite3_pcache.xDestroy method. ** -** Otherwise, for non-temporary files, the effective sector size is -** the value returned by the xSectorSize() method rounded up to 512 if -** it is less than 512, or rounded down to MAX_SECTOR_SIZE if it -** is greater than MAX_SECTOR_SIZE. +** Destroy a cache allocated using pcache1Create(). */ -static void setSectorSize(Pager *pPager){ - assert( isOpen(pPager->fd) || pPager->tempFile ); +static void pcache1Destroy(sqlite3_pcache *p){ + PCache1 *pCache = (PCache1 *)p; + PGroup *pGroup = pCache->pGroup; + assert( pCache->bPurgeable || (pCache->nMax==0 && pCache->nMin==0) ); + pcache1EnterMutex(pGroup); + pcache1TruncateUnsafe(pCache, 0); + assert( pGroup->nMaxPage >= pCache->nMax ); + pGroup->nMaxPage -= pCache->nMax; + assert( pGroup->nMinPage >= pCache->nMin ); + pGroup->nMinPage -= pCache->nMin; + pGroup->mxPinned = pGroup->nMaxPage + 10 - pGroup->nMinPage; + pcache1EnforceMaxPage(pGroup); + pcache1LeaveMutex(pGroup); + sqlite3_free(pCache->apHash); + sqlite3_free(pCache); +} - if( !pPager->tempFile ){ - /* Sector size doesn't matter for temporary files. Also, the file - ** may not have been opened yet, in which case the OsSectorSize() - ** call will segfault. - */ - pPager->sectorSize = sqlite3OsSectorSize(pPager->fd); - } - if( pPager->sectorSize<512 ){ - pPager->sectorSize = 512; +/* +** This function is called during initialization (sqlite3_initialize()) to +** install the default pluggable cache module, assuming the user has not +** already provided an alternative. +*/ +SQLITE_PRIVATE void sqlite3PCacheSetDefault(void){ + static const sqlite3_pcache_methods2 defaultMethods = { + 1, /* iVersion */ + 0, /* pArg */ + pcache1Init, /* xInit */ + pcache1Shutdown, /* xShutdown */ + pcache1Create, /* xCreate */ + pcache1Cachesize, /* xCachesize */ + pcache1Pagecount, /* xPagecount */ + pcache1Fetch, /* xFetch */ + pcache1Unpin, /* xUnpin */ + pcache1Rekey, /* xRekey */ + pcache1Truncate, /* xTruncate */ + pcache1Destroy, /* xDestroy */ + pcache1Shrink /* xShrink */ + }; + sqlite3_config(SQLITE_CONFIG_PCACHE2, &defaultMethods); +} + +#ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT +/* +** This function is called to free superfluous dynamically allocated memory +** held by the pager system. Memory in use by any SQLite pager allocated +** by the current thread may be sqlite3_free()ed. +** +** nReq is the number of bytes of memory required. Once this much has +** been released, the function returns. The return value is the total number +** of bytes of memory released. +*/ +SQLITE_PRIVATE int sqlite3PcacheReleaseMemory(int nReq){ + int nFree = 0; + assert( sqlite3_mutex_notheld(pcache1.grp.mutex) ); + assert( sqlite3_mutex_notheld(pcache1.mutex) ); + if( pcache1.pStart==0 ){ + PgHdr1 *p; + pcache1EnterMutex(&pcache1.grp); + while( (nReq<0 || nFreepage.pBuf); +#ifdef SQLITE_PCACHE_SEPARATE_HEADER + nFree += sqlite3MemSize(p); +#endif + pcache1PinPage(p); + pcache1RemoveFromHash(p); + pcache1FreePage(p); + } + pcache1LeaveMutex(&pcache1.grp); } - if( pPager->sectorSize>MAX_SECTOR_SIZE ){ - assert( MAX_SECTOR_SIZE>=512 ); - pPager->sectorSize = MAX_SECTOR_SIZE; + return nFree; +} +#endif /* SQLITE_ENABLE_MEMORY_MANAGEMENT */ + +#ifdef SQLITE_TEST +/* +** This function is used by test procedures to inspect the internal state +** of the global cache. +*/ +SQLITE_PRIVATE void sqlite3PcacheStats( + int *pnCurrent, /* OUT: Total number of pages cached */ + int *pnMax, /* OUT: Global maximum cache size */ + int *pnMin, /* OUT: Sum of PCache1.nMin for purgeable caches */ + int *pnRecyclable /* OUT: Total number of pages available for recycling */ +){ + PgHdr1 *p; + int nRecyclable = 0; + for(p=pcache1.grp.pLruHead; p; p=p->pLruNext){ + nRecyclable++; } + *pnCurrent = pcache1.grp.nCurrentPage; + *pnMax = (int)pcache1.grp.nMaxPage; + *pnMin = (int)pcache1.grp.nMinPage; + *pnRecyclable = nRecyclable; } +#endif +/************** End of pcache1.c *********************************************/ +/************** Begin file rowset.c ******************************************/ /* -** Playback the journal and thus restore the database file to -** the state it was in before we started making changes. +** 2008 December 3 ** -** The journal file format is as follows: +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: ** -** (1) 8 byte prefix. A copy of aJournalMagic[]. -** (2) 4 byte big-endian integer which is the number of valid page records -** in the journal. If this value is 0xffffffff, then compute the -** number of page records from the journal size. -** (3) 4 byte big-endian integer which is the initial value for the -** sanity checksum. -** (4) 4 byte integer which is the number of pages to truncate the -** database to during a rollback. -** (5) 4 byte big-endian integer which is the sector size. The header -** is this many bytes in size. -** (6) 4 byte big-endian integer which is the page case. -** (7) 4 byte integer which is the number of bytes in the master journal -** name. The value may be zero (indicate that there is no master -** journal.) -** (8) N bytes of the master journal name. The name will be nul-terminated -** and might be shorter than the value read from (5). If the first byte -** of the name is \000 then there is no master journal. The master -** journal name is stored in UTF-8. -** (9) Zero or more pages instances, each as follows: -** + 4 byte page number. -** + pPager->pageSize bytes of data. -** + 4 byte checksum +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. ** -** When we speak of the journal header, we mean the first 8 items above. -** Each entry in the journal is an instance of the 9th item. +************************************************************************* ** -** Call the value from the second bullet "nRec". nRec is the number of -** valid page entries in the journal. In most cases, you can compute the -** value of nRec from the size of the journal file. But if a power -** failure occurred while the journal was being written, it could be the -** case that the size of the journal file had already been increased but -** the extra entries had not yet made it safely to disk. In such a case, -** the value of nRec computed from the file size would be too large. For -** that reason, we always use the nRec value in the header. +** This module implements an object we call a "RowSet". ** -** If the nRec value is 0xffffffff it means that nRec should be computed -** from the file size. This value is used when the user selects the -** no-sync option for the journal. A power failure could lead to corruption -** in this case. But for things like temporary table (which will be -** deleted when the power is restored) we don't care. +** The RowSet object is a collection of rowids. Rowids +** are inserted into the RowSet in an arbitrary order. Inserts +** can be intermixed with tests to see if a given rowid has been +** previously inserted into the RowSet. ** -** If the file opened as the journal file is not a well-formed -** journal file then all pages up to the first corrupted page are rolled -** back (or no pages if the journal header is corrupted). The journal file -** is then deleted and SQLITE_OK returned, just as if no corruption had -** been encountered. +** After all inserts are finished, it is possible to extract the +** elements of the RowSet in sorted order. Once this extraction +** process has started, no new elements may be inserted. ** -** If an I/O or malloc() error occurs, the journal-file is not deleted -** and an error code is returned. +** Hence, the primitive operations for a RowSet are: ** -** The isHot parameter indicates that we are trying to rollback a journal -** that might be a hot journal. Or, it could be that the journal is -** preserved because of JOURNALMODE_PERSIST or JOURNALMODE_TRUNCATE. -** If the journal really is hot, reset the pager cache prior rolling -** back any content. If the journal is merely persistent, no reset is -** needed. +** CREATE +** INSERT +** TEST +** SMALLEST +** DESTROY +** +** The CREATE and DESTROY primitives are the constructor and destructor, +** obviously. The INSERT primitive adds a new element to the RowSet. +** TEST checks to see if an element is already in the RowSet. SMALLEST +** extracts the least value from the RowSet. +** +** The INSERT primitive might allocate additional memory. Memory is +** allocated in chunks so most INSERTs do no allocation. There is an +** upper bound on the size of allocated memory. No memory is freed +** until DESTROY. +** +** The TEST primitive includes a "batch" number. The TEST primitive +** will only see elements that were inserted before the last change +** in the batch number. In other words, if an INSERT occurs between +** two TESTs where the TESTs have the same batch nubmer, then the +** value added by the INSERT will not be visible to the second TEST. +** The initial batch number is zero, so if the very first TEST contains +** a non-zero batch number, it will see all prior INSERTs. +** +** No INSERTs may occurs after a SMALLEST. An assertion will fail if +** that is attempted. +** +** The cost of an INSERT is roughly constant. (Sometime new memory +** has to be allocated on an INSERT.) The cost of a TEST with a new +** batch number is O(NlogN) where N is the number of elements in the RowSet. +** The cost of a TEST using the same batch number is O(logN). The cost +** of the first SMALLEST is O(NlogN). Second and subsequent SMALLEST +** primitives are constant time. The cost of DESTROY is O(N). +** +** There is an added cost of O(N) when switching between TEST and +** SMALLEST primitives. */ -static int pager_playback(Pager *pPager, int isHot){ - sqlite3_vfs *pVfs = pPager->pVfs; - i64 szJ; /* Size of the journal file in bytes */ - u32 nRec; /* Number of Records in the journal */ - u32 u; /* Unsigned loop counter */ - Pgno mxPg = 0; /* Size of the original file in pages */ - int rc; /* Result code of a subroutine */ - int res = 1; /* Value returned by sqlite3OsAccess() */ - char *zMaster = 0; /* Name of master journal file if any */ - int needPagerReset; /* True to reset page prior to first page rollback */ - - /* Figure out how many records are in the journal. Abort early if - ** the journal is empty. - */ - assert( isOpen(pPager->jfd) ); - rc = sqlite3OsFileSize(pPager->jfd, &szJ); - if( rc!=SQLITE_OK || szJ==0 ){ - goto end_playback; - } - - /* Read the master journal name from the journal, if it is present. - ** If a master journal file name is specified, but the file is not - ** present on disk, then the journal is not hot and does not need to be - ** played back. - ** - ** TODO: Technically the following is an error because it assumes that - ** buffer Pager.pTmpSpace is (mxPathname+1) bytes or larger. i.e. that - ** (pPager->pageSize >= pPager->pVfs->mxPathname+1). Using os_unix.c, - ** mxPathname is 512, which is the same as the minimum allowable value - ** for pageSize. - */ - zMaster = pPager->pTmpSpace; - rc = readMasterJournal(pPager->jfd, zMaster, pPager->pVfs->mxPathname+1); - if( rc==SQLITE_OK && zMaster[0] ){ - rc = sqlite3OsAccess(pVfs, zMaster, SQLITE_ACCESS_EXISTS, &res); - } - zMaster = 0; - if( rc!=SQLITE_OK || !res ){ - goto end_playback; - } - pPager->journalOff = 0; - needPagerReset = isHot; - /* This loop terminates either when a readJournalHdr() or - ** pager_playback_one_page() call returns SQLITE_DONE or an IO error - ** occurs. - */ - while( 1 ){ - int isUnsync = 0; - /* Read the next journal header from the journal file. If there are - ** not enough bytes left in the journal file for a complete header, or - ** it is corrupted, then a process must of failed while writing it. - ** This indicates nothing more needs to be rolled back. - */ - rc = readJournalHdr(pPager, isHot, szJ, &nRec, &mxPg); - if( rc!=SQLITE_OK ){ - if( rc==SQLITE_DONE ){ - rc = SQLITE_OK; - } - goto end_playback; - } +/* +** Target size for allocation chunks. +*/ +#define ROWSET_ALLOCATION_SIZE 1024 - /* If nRec is 0xffffffff, then this journal was created by a process - ** working in no-sync mode. This means that the rest of the journal - ** file consists of pages, there are no more journal headers. Compute - ** the value of nRec based on this assumption. - */ - if( nRec==0xffffffff ){ - assert( pPager->journalOff==JOURNAL_HDR_SZ(pPager) ); - nRec = (int)((szJ - JOURNAL_HDR_SZ(pPager))/JOURNAL_PG_SZ(pPager)); - } +/* +** The number of rowset entries per allocation chunk. +*/ +#define ROWSET_ENTRY_PER_CHUNK \ + ((ROWSET_ALLOCATION_SIZE-8)/sizeof(struct RowSetEntry)) - /* If nRec is 0 and this rollback is of a transaction created by this - ** process and if this is the final header in the journal, then it means - ** that this part of the journal was being filled but has not yet been - ** synced to disk. Compute the number of pages based on the remaining - ** size of the file. - ** - ** The third term of the test was added to fix ticket #2565. - ** When rolling back a hot journal, nRec==0 always means that the next - ** chunk of the journal contains zero pages to be rolled back. But - ** when doing a ROLLBACK and the nRec==0 chunk is the last chunk in - ** the journal, it means that the journal might contain additional - ** pages that need to be rolled back and that the number of pages - ** should be computed based on the journal file size. - */ - testcase( nRec==0 && !isHot - && pPager->journalHdr+JOURNAL_HDR_SZ(pPager)!=pPager->journalOff - && ((szJ - pPager->journalOff) / JOURNAL_PG_SZ(pPager))>0 - && pagerNextJournalPageIsValid(pPager) - ); - if( nRec==0 && !isHot && - pPager->journalHdr+JOURNAL_HDR_SZ(pPager)==pPager->journalOff ){ - nRec = (int)((szJ - pPager->journalOff) / JOURNAL_PG_SZ(pPager)); - isUnsync = 1; - } +/* +** Each entry in a RowSet is an instance of the following object. +** +** This same object is reused to store a linked list of trees of RowSetEntry +** objects. In that alternative use, pRight points to the next entry +** in the list, pLeft points to the tree, and v is unused. The +** RowSet.pForest value points to the head of this forest list. +*/ +struct RowSetEntry { + i64 v; /* ROWID value for this entry */ + struct RowSetEntry *pRight; /* Right subtree (larger entries) or list */ + struct RowSetEntry *pLeft; /* Left subtree (smaller entries) */ +}; - /* If this is the first header read from the journal, truncate the - ** database file back to its original size. - */ - if( pPager->journalOff==JOURNAL_HDR_SZ(pPager) ){ - rc = pager_truncate(pPager, mxPg); - if( rc!=SQLITE_OK ){ - goto end_playback; - } - pPager->dbSize = mxPg; - } +/* +** RowSetEntry objects are allocated in large chunks (instances of the +** following structure) to reduce memory allocation overhead. The +** chunks are kept on a linked list so that they can be deallocated +** when the RowSet is destroyed. +*/ +struct RowSetChunk { + struct RowSetChunk *pNextChunk; /* Next chunk on list of them all */ + struct RowSetEntry aEntry[ROWSET_ENTRY_PER_CHUNK]; /* Allocated entries */ +}; - /* Copy original pages out of the journal and back into the - ** database file and/or page cache. - */ - for(u=0; ujournalOff,0,0); - if( rc!=SQLITE_OK ){ - if( rc==SQLITE_DONE ){ - rc = SQLITE_OK; - pPager->journalOff = szJ; - break; - }else{ - /* If we are unable to rollback, quit and return the error - ** code. This will cause the pager to enter the error state - ** so that no further harm will be done. Perhaps the next - ** process to come along will be able to rollback the database. - */ - goto end_playback; - } - } - } - } - /*NOTREACHED*/ - assert( 0 ); +/* +** A RowSet in an instance of the following structure. +** +** A typedef of this structure if found in sqliteInt.h. +*/ +struct RowSet { + struct RowSetChunk *pChunk; /* List of all chunk allocations */ + sqlite3 *db; /* The database connection */ + struct RowSetEntry *pEntry; /* List of entries using pRight */ + struct RowSetEntry *pLast; /* Last entry on the pEntry list */ + struct RowSetEntry *pFresh; /* Source of new entry objects */ + struct RowSetEntry *pForest; /* List of binary trees of entries */ + u16 nFresh; /* Number of objects on pFresh */ + u8 rsFlags; /* Various flags */ + u8 iBatch; /* Current insert batch */ +}; -end_playback: - /* Following a rollback, the database file should be back in its original - ** state prior to the start of the transaction, so invoke the - ** SQLITE_FCNTL_DB_UNCHANGED file-control method to disable the - ** assertion that the transaction counter was modified. - */ - assert( - pPager->fd->pMethods==0 || - sqlite3OsFileControl(pPager->fd,SQLITE_FCNTL_DB_UNCHANGED,0)>=SQLITE_OK - ); +/* +** Allowed values for RowSet.rsFlags +*/ +#define ROWSET_SORTED 0x01 /* True if RowSet.pEntry is sorted */ +#define ROWSET_NEXT 0x02 /* True if sqlite3RowSetNext() has been called */ - /* If this playback is happening automatically as a result of an IO or - ** malloc error that occurred after the change-counter was updated but - ** before the transaction was committed, then the change-counter - ** modification may just have been reverted. If this happens in exclusive - ** mode, then subsequent transactions performed by the connection will not - ** update the change-counter at all. This may lead to cache inconsistency - ** problems for other processes at some point in the future. So, just - ** in case this has happened, clear the changeCountDone flag now. - */ - pPager->changeCountDone = pPager->tempFile; +/* +** Turn bulk memory into a RowSet object. N bytes of memory +** are available at pSpace. The db pointer is used as a memory context +** for any subsequent allocations that need to occur. +** Return a pointer to the new RowSet object. +** +** It must be the case that N is sufficient to make a Rowset. If not +** an assertion fault occurs. +** +** If N is larger than the minimum, use the surplus as an initial +** allocation of entries available to be filled. +*/ +SQLITE_PRIVATE RowSet *sqlite3RowSetInit(sqlite3 *db, void *pSpace, unsigned int N){ + RowSet *p; + assert( N >= ROUND8(sizeof(*p)) ); + p = pSpace; + p->pChunk = 0; + p->db = db; + p->pEntry = 0; + p->pLast = 0; + p->pForest = 0; + p->pFresh = (struct RowSetEntry*)(ROUND8(sizeof(*p)) + (char*)p); + p->nFresh = (u16)((N - ROUND8(sizeof(*p)))/sizeof(struct RowSetEntry)); + p->rsFlags = ROWSET_SORTED; + p->iBatch = 0; + return p; +} - if( rc==SQLITE_OK ){ - zMaster = pPager->pTmpSpace; - rc = readMasterJournal(pPager->jfd, zMaster, pPager->pVfs->mxPathname+1); - testcase( rc!=SQLITE_OK ); - } - if( rc==SQLITE_OK ){ - rc = pager_end_transaction(pPager, zMaster[0]!='\0'); - testcase( rc!=SQLITE_OK ); - } - if( rc==SQLITE_OK && zMaster[0] && res ){ - /* If there was a master journal and this routine will return success, - ** see if it is possible to delete the master journal. - */ - rc = pager_delmaster(pPager, zMaster); - testcase( rc!=SQLITE_OK ); +/* +** Deallocate all chunks from a RowSet. This frees all memory that +** the RowSet has allocated over its lifetime. This routine is +** the destructor for the RowSet. +*/ +SQLITE_PRIVATE void sqlite3RowSetClear(RowSet *p){ + struct RowSetChunk *pChunk, *pNextChunk; + for(pChunk=p->pChunk; pChunk; pChunk = pNextChunk){ + pNextChunk = pChunk->pNextChunk; + sqlite3DbFree(p->db, pChunk); } - - /* The Pager.sectorSize variable may have been updated while rolling - ** back a journal created by a process with a different sector size - ** value. Reset it to the correct value for this process. - */ - setSectorSize(pPager); - return rc; + p->pChunk = 0; + p->nFresh = 0; + p->pEntry = 0; + p->pLast = 0; + p->pForest = 0; + p->rsFlags = ROWSET_SORTED; } /* -** Playback savepoint pSavepoint. Or, if pSavepoint==NULL, then playback -** the entire master journal file. The case pSavepoint==NULL occurs when -** a ROLLBACK TO command is invoked on a SAVEPOINT that is a transaction -** savepoint. -** -** When pSavepoint is not NULL (meaning a non-transaction savepoint is -** being rolled back), then the rollback consists of up to three stages, -** performed in the order specified: -** -** * Pages are played back from the main journal starting at byte -** offset PagerSavepoint.iOffset and continuing to -** PagerSavepoint.iHdrOffset, or to the end of the main journal -** file if PagerSavepoint.iHdrOffset is zero. -** -** * If PagerSavepoint.iHdrOffset is not zero, then pages are played -** back starting from the journal header immediately following -** PagerSavepoint.iHdrOffset to the end of the main journal file. -** -** * Pages are then played back from the sub-journal file, starting -** with the PagerSavepoint.iSubRec and continuing to the end of -** the journal file. -** -** Throughout the rollback process, each time a page is rolled back, the -** corresponding bit is set in a bitvec structure (variable pDone in the -** implementation below). This is used to ensure that a page is only -** rolled back the first time it is encountered in either journal. -** -** If pSavepoint is NULL, then pages are only played back from the main -** journal file. There is no need for a bitvec in this case. +** Allocate a new RowSetEntry object that is associated with the +** given RowSet. Return a pointer to the new and completely uninitialized +** objected. ** -** In either case, before playback commences the Pager.dbSize variable -** is reset to the value that it held at the start of the savepoint -** (or transaction). No page with a page-number greater than this value -** is played back. If one is encountered it is simply skipped. +** In an OOM situation, the RowSet.db->mallocFailed flag is set and this +** routine returns NULL. */ -static int pagerPlaybackSavepoint(Pager *pPager, PagerSavepoint *pSavepoint){ - i64 szJ; /* Effective size of the main journal */ - i64 iHdrOff; /* End of first segment of main-journal records */ - int rc = SQLITE_OK; /* Return code */ - Bitvec *pDone = 0; /* Bitvec to ensure pages played back only once */ - - assert( pPager->state>=PAGER_SHARED ); - - /* Allocate a bitvec to use to store the set of pages rolled back */ - if( pSavepoint ){ - pDone = sqlite3BitvecCreate(pSavepoint->nOrig); - if( !pDone ){ - return SQLITE_NOMEM; +static struct RowSetEntry *rowSetEntryAlloc(RowSet *p){ + assert( p!=0 ); + if( p->nFresh==0 ){ + struct RowSetChunk *pNew; + pNew = sqlite3DbMallocRaw(p->db, sizeof(*pNew)); + if( pNew==0 ){ + return 0; } + pNew->pNextChunk = p->pChunk; + p->pChunk = pNew; + p->pFresh = pNew->aEntry; + p->nFresh = ROWSET_ENTRY_PER_CHUNK; } + p->nFresh--; + return p->pFresh++; +} - /* Set the database size back to the value it was before the savepoint - ** being reverted was opened. - */ - pPager->dbSize = pSavepoint ? pSavepoint->nOrig : pPager->dbOrigSize; +/* +** Insert a new value into a RowSet. +** +** The mallocFailed flag of the database connection is set if a +** memory allocation fails. +*/ +SQLITE_PRIVATE void sqlite3RowSetInsert(RowSet *p, i64 rowid){ + struct RowSetEntry *pEntry; /* The new entry */ + struct RowSetEntry *pLast; /* The last prior entry */ - /* Use pPager->journalOff as the effective size of the main rollback - ** journal. The actual file might be larger than this in - ** PAGER_JOURNALMODE_TRUNCATE or PAGER_JOURNALMODE_PERSIST. But anything - ** past pPager->journalOff is off-limits to us. - */ - szJ = pPager->journalOff; + /* This routine is never called after sqlite3RowSetNext() */ + assert( p!=0 && (p->rsFlags & ROWSET_NEXT)==0 ); - /* Begin by rolling back records from the main journal starting at - ** PagerSavepoint.iOffset and continuing to the next journal header. - ** There might be records in the main journal that have a page number - ** greater than the current database size (pPager->dbSize) but those - ** will be skipped automatically. Pages are added to pDone as they - ** are played back. - */ - if( pSavepoint ){ - iHdrOff = pSavepoint->iHdrOffset ? pSavepoint->iHdrOffset : szJ; - pPager->journalOff = pSavepoint->iOffset; - while( rc==SQLITE_OK && pPager->journalOffjournalOff, 1, pDone); + pEntry = rowSetEntryAlloc(p); + if( pEntry==0 ) return; + pEntry->v = rowid; + pEntry->pRight = 0; + pLast = p->pLast; + if( pLast ){ + if( (p->rsFlags & ROWSET_SORTED)!=0 && rowid<=pLast->v ){ + p->rsFlags &= ~ROWSET_SORTED; } - assert( rc!=SQLITE_DONE ); + pLast->pRight = pEntry; }else{ - pPager->journalOff = 0; + p->pEntry = pEntry; } + p->pLast = pEntry; +} - /* Continue rolling back records out of the main journal starting at - ** the first journal header seen and continuing until the effective end - ** of the main journal file. Continue to skip out-of-range pages and - ** continue adding pages rolled back to pDone. - */ - while( rc==SQLITE_OK && pPager->journalOffjournalHdr+JOURNAL_HDR_SZ(pPager)==pPager->journalOff" - ** test is related to ticket #2565. See the discussion in the - ** pager_playback() function for additional information. - */ - assert( !(nJRec==0 - && pPager->journalHdr+JOURNAL_HDR_SZ(pPager)!=pPager->journalOff - && ((szJ - pPager->journalOff) / JOURNAL_PG_SZ(pPager))>0 - && pagerNextJournalPageIsValid(pPager)) - ); - if( nJRec==0 - && pPager->journalHdr+JOURNAL_HDR_SZ(pPager)==pPager->journalOff - ){ - nJRec = (u32)((szJ - pPager->journalOff)/JOURNAL_PG_SZ(pPager)); - } - for(ii=0; rc==SQLITE_OK && iijournalOffjournalOff, 1, pDone); + pTail = &head; + while( pA && pB ){ + assert( pA->pRight==0 || pA->v<=pA->pRight->v ); + assert( pB->pRight==0 || pB->v<=pB->pRight->v ); + if( pA->vv ){ + pTail->pRight = pA; + pA = pA->pRight; + pTail = pTail->pRight; + }else if( pB->vv ){ + pTail->pRight = pB; + pB = pB->pRight; + pTail = pTail->pRight; + }else{ + pA = pA->pRight; } - assert( rc!=SQLITE_DONE ); } - assert( rc!=SQLITE_OK || pPager->journalOff==szJ ); + if( pA ){ + assert( pA->pRight==0 || pA->v<=pA->pRight->v ); + pTail->pRight = pA; + }else{ + assert( pB==0 || pB->pRight==0 || pB->v<=pB->pRight->v ); + pTail->pRight = pB; + } + return head.pRight; +} - /* Finally, rollback pages from the sub-journal. Page that were - ** previously rolled back out of the main journal (and are hence in pDone) - ** will be skipped. Out-of-range pages are also skipped. - */ - if( pSavepoint ){ - u32 ii; /* Loop counter */ - i64 offset = pSavepoint->iSubRec*(4+pPager->pageSize); - for(ii=pSavepoint->iSubRec; rc==SQLITE_OK && iinSubRec; ii++){ - assert( offset==ii*(4+pPager->pageSize) ); - rc = pager_playback_one_page(pPager, 0, 0, &offset, 1, pDone); +/* +** Sort all elements on the list of RowSetEntry objects into order of +** increasing v. +*/ +static struct RowSetEntry *rowSetEntrySort(struct RowSetEntry *pIn){ + unsigned int i; + struct RowSetEntry *pNext, *aBucket[40]; + + memset(aBucket, 0, sizeof(aBucket)); + while( pIn ){ + pNext = pIn->pRight; + pIn->pRight = 0; + for(i=0; aBucket[i]; i++){ + pIn = rowSetEntryMerge(aBucket[i], pIn); + aBucket[i] = 0; } - assert( rc!=SQLITE_DONE ); + aBucket[i] = pIn; + pIn = pNext; } - - sqlite3BitvecDestroy(pDone); - if( rc==SQLITE_OK ){ - pPager->journalOff = szJ; + pIn = 0; + for(i=0; ipPCache, mxPage); +static void rowSetTreeToList( + struct RowSetEntry *pIn, /* Root of the input tree */ + struct RowSetEntry **ppFirst, /* Write head of the output list here */ + struct RowSetEntry **ppLast /* Write tail of the output list here */ +){ + assert( pIn!=0 ); + if( pIn->pLeft ){ + struct RowSetEntry *p; + rowSetTreeToList(pIn->pLeft, ppFirst, &p); + p->pRight = pIn; + }else{ + *ppFirst = pIn; + } + if( pIn->pRight ){ + rowSetTreeToList(pIn->pRight, &pIn->pRight, ppLast); + }else{ + *ppLast = pIn; + } + assert( (*ppLast)->pRight==0 ); } + /* -** Adjust the robustness of the database to damage due to OS crashes -** or power failures by changing the number of syncs()s when writing -** the rollback journal. There are three levels: -** -** OFF sqlite3OsSync() is never called. This is the default -** for temporary and transient files. -** -** NORMAL The journal is synced once before writes begin on the -** database. This is normally adequate protection, but -** it is theoretically possible, though very unlikely, -** that an inopertune power failure could leave the journal -** in a state which would cause damage to the database -** when it is rolled back. +** Convert a sorted list of elements (connected by pRight) into a binary +** tree with depth of iDepth. A depth of 1 means the tree contains a single +** node taken from the head of *ppList. A depth of 2 means a tree with +** three nodes. And so forth. ** -** FULL The journal is synced twice before writes begin on the -** database (with some additional information - the nRec field -** of the journal header - being written in between the two -** syncs). If we assume that writing a -** single disk sector is atomic, then this mode provides -** assurance that the journal will not be corrupted to the -** point of causing damage to the database during rollback. +** Use as many entries from the input list as required and update the +** *ppList to point to the unused elements of the list. If the input +** list contains too few elements, then construct an incomplete tree +** and leave *ppList set to NULL. ** -** Numeric values associated with these states are OFF==1, NORMAL=2, -** and FULL=3. +** Return a pointer to the root of the constructed binary tree. */ -#ifndef SQLITE_OMIT_PAGER_PRAGMAS -SQLITE_PRIVATE void sqlite3PagerSetSafetyLevel(Pager *pPager, int level, int bFullFsync){ - pPager->noSync = (level==1 || pPager->tempFile) ?1:0; - pPager->fullSync = (level==3 && !pPager->tempFile) ?1:0; - pPager->sync_flags = (bFullFsync?SQLITE_SYNC_FULL:SQLITE_SYNC_NORMAL); - if( pPager->noSync ) pPager->needSync = 0; +static struct RowSetEntry *rowSetNDeepTree( + struct RowSetEntry **ppList, + int iDepth +){ + struct RowSetEntry *p; /* Root of the new tree */ + struct RowSetEntry *pLeft; /* Left subtree */ + if( *ppList==0 ){ + return 0; + } + if( iDepth==1 ){ + p = *ppList; + *ppList = p->pRight; + p->pLeft = p->pRight = 0; + return p; + } + pLeft = rowSetNDeepTree(ppList, iDepth-1); + p = *ppList; + if( p==0 ){ + return pLeft; + } + p->pLeft = pLeft; + *ppList = p->pRight; + p->pRight = rowSetNDeepTree(ppList, iDepth-1); + return p; } -#endif /* -** The following global variable is incremented whenever the library -** attempts to open a temporary file. This information is used for -** testing and analysis only. +** Convert a sorted list of elements into a binary tree. Make the tree +** as deep as it needs to be in order to contain the entire list. */ -#ifdef SQLITE_TEST -SQLITE_API int sqlite3_opentemp_count = 0; -#endif +static struct RowSetEntry *rowSetListToTree(struct RowSetEntry *pList){ + int iDepth; /* Depth of the tree so far */ + struct RowSetEntry *p; /* Current tree root */ + struct RowSetEntry *pLeft; /* Left subtree */ + + assert( pList!=0 ); + p = pList; + pList = p->pRight; + p->pLeft = p->pRight = 0; + for(iDepth=1; pList; iDepth++){ + pLeft = p; + p = pList; + pList = p->pRight; + p->pLeft = pLeft; + p->pRight = rowSetNDeepTree(&pList, iDepth); + } + return p; +} /* -** Open a temporary file. -** -** Write the file descriptor into *pFile. Return SQLITE_OK on success -** or some other error code if we fail. The OS will automatically -** delete the temporary file when it is closed. -** -** The flags passed to the VFS layer xOpen() call are those specified -** by parameter vfsFlags ORed with the following: +** Take all the entries on p->pEntry and on the trees in p->pForest and +** sort them all together into one big ordered list on p->pEntry. ** -** SQLITE_OPEN_READWRITE -** SQLITE_OPEN_CREATE -** SQLITE_OPEN_EXCLUSIVE -** SQLITE_OPEN_DELETEONCLOSE +** This routine should only be called once in the life of a RowSet. */ -static int pagerOpentemp( - Pager *pPager, /* The pager object */ - sqlite3_file *pFile, /* Write the file descriptor here */ - int vfsFlags /* Flags passed through to the VFS */ -){ - int rc; /* Return code */ +static void rowSetToList(RowSet *p){ -#ifdef SQLITE_TEST - sqlite3_opentemp_count++; /* Used for testing and analysis only */ -#endif + /* This routine is called only once */ + assert( p!=0 && (p->rsFlags & ROWSET_NEXT)==0 ); - vfsFlags |= SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE | - SQLITE_OPEN_EXCLUSIVE | SQLITE_OPEN_DELETEONCLOSE; - rc = sqlite3OsOpen(pPager->pVfs, 0, pFile, vfsFlags, 0); - assert( rc!=SQLITE_OK || isOpen(pFile) ); - return rc; + if( (p->rsFlags & ROWSET_SORTED)==0 ){ + p->pEntry = rowSetEntrySort(p->pEntry); + } + + /* While this module could theoretically support it, sqlite3RowSetNext() + ** is never called after sqlite3RowSetText() for the same RowSet. So + ** there is never a forest to deal with. Should this change, simply + ** remove the assert() and the #if 0. */ + assert( p->pForest==0 ); +#if 0 + while( p->pForest ){ + struct RowSetEntry *pTree = p->pForest->pLeft; + if( pTree ){ + struct RowSetEntry *pHead, *pTail; + rowSetTreeToList(pTree, &pHead, &pTail); + p->pEntry = rowSetEntryMerge(p->pEntry, pHead); + } + p->pForest = p->pForest->pRight; + } +#endif + p->rsFlags |= ROWSET_NEXT; /* Verify this routine is never called again */ } /* -** Set the busy handler function. -** -** The pager invokes the busy-handler if sqlite3OsLock() returns -** SQLITE_BUSY when trying to upgrade from no-lock to a SHARED lock, -** or when trying to upgrade from a RESERVED lock to an EXCLUSIVE -** lock. It does *not* invoke the busy handler when upgrading from -** SHARED to RESERVED, or when upgrading from SHARED to EXCLUSIVE -** (which occurs during hot-journal rollback). Summary: -** -** Transition | Invokes xBusyHandler -** -------------------------------------------------------- -** NO_LOCK -> SHARED_LOCK | Yes -** SHARED_LOCK -> RESERVED_LOCK | No -** SHARED_LOCK -> EXCLUSIVE_LOCK | No -** RESERVED_LOCK -> EXCLUSIVE_LOCK | Yes +** Extract the smallest element from the RowSet. +** Write the element into *pRowid. Return 1 on success. Return +** 0 if the RowSet is already empty. ** -** If the busy-handler callback returns non-zero, the lock is -** retried. If it returns zero, then the SQLITE_BUSY error is -** returned to the caller of the pager API function. +** After this routine has been called, the sqlite3RowSetInsert() +** routine may not be called again. */ -SQLITE_PRIVATE void sqlite3PagerSetBusyhandler( - Pager *pPager, /* Pager object */ - int (*xBusyHandler)(void *), /* Pointer to busy-handler function */ - void *pBusyHandlerArg /* Argument to pass to xBusyHandler */ -){ - pPager->xBusyHandler = xBusyHandler; - pPager->pBusyHandlerArg = pBusyHandlerArg; -} +SQLITE_PRIVATE int sqlite3RowSetNext(RowSet *p, i64 *pRowid){ + assert( p!=0 ); -/* -** Set the reinitializer for this pager. If not NULL, the reinitializer -** is called when the content of a page in cache is modified (restored) -** as part of a transaction or savepoint rollback. The callback gives -** higher-level code an opportunity to restore the EXTRA section to -** agree with the restored page data. -*/ -SQLITE_PRIVATE void sqlite3PagerSetReiniter(Pager *pPager, void (*xReinit)(DbPage*)){ - pPager->xReiniter = xReinit; -} + /* Merge the forest into a single sorted list on first call */ + if( (p->rsFlags & ROWSET_NEXT)==0 ) rowSetToList(p); -/* -** Report the current page size and number of reserved bytes back -** to the codec. -*/ -#ifdef SQLITE_HAS_CODEC -static void pagerReportSize(Pager *pPager){ - if( pPager->xCodecSizeChng ){ - pPager->xCodecSizeChng(pPager->pCodec, pPager->pageSize, - (int)pPager->nReserve); + /* Return the next entry on the list */ + if( p->pEntry ){ + *pRowid = p->pEntry->v; + p->pEntry = p->pEntry->pRight; + if( p->pEntry==0 ){ + sqlite3RowSetClear(p); + } + return 1; + }else{ + return 0; } } -#else -# define pagerReportSize(X) /* No-op if we do not support a codec */ -#endif /* -** Change the page size used by the Pager object. The new page size -** is passed in *pPageSize. -** -** If the pager is in the error state when this function is called, it -** is a no-op. The value returned is the error state error code (i.e. -** one of SQLITE_IOERR, SQLITE_CORRUPT or SQLITE_FULL). -** -** Otherwise, if all of the following are true: -** -** * the new page size (value of *pPageSize) is valid (a power -** of two between 512 and SQLITE_MAX_PAGE_SIZE, inclusive), and -** -** * there are no outstanding page references, and -** -** * the database is either not an in-memory database or it is -** an in-memory database that currently consists of zero pages. -** -** then the pager object page size is set to *pPageSize. -** -** If the page size is changed, then this function uses sqlite3PagerMalloc() -** to obtain a new Pager.pTmpSpace buffer. If this allocation attempt -** fails, SQLITE_NOMEM is returned and the page size remains unchanged. -** In all other cases, SQLITE_OK is returned. +** Check to see if element iRowid was inserted into the the rowset as +** part of any insert batch prior to iBatch. Return 1 or 0. ** -** If the page size is not changed, either because one of the enumerated -** conditions above is not true, the pager was in error state when this -** function was called, or because the memory allocation attempt failed, -** then *pPageSize is set to the old, retained page size before returning. +** If this is the first test of a new batch and if there exist entires +** on pRowSet->pEntry, then sort those entires into the forest at +** pRowSet->pForest so that they can be tested. */ -SQLITE_PRIVATE int sqlite3PagerSetPagesize(Pager *pPager, u16 *pPageSize, int nReserve){ - int rc = pPager->errCode; - if( rc==SQLITE_OK ){ - u16 pageSize = *pPageSize; - assert( pageSize==0 || (pageSize>=512 && pageSize<=SQLITE_MAX_PAGE_SIZE) ); - if( pageSize && pageSize!=pPager->pageSize - && (pPager->memDb==0 || pPager->dbSize==0) - && sqlite3PcacheRefCount(pPager->pPCache)==0 - ){ - char *pNew = (char *)sqlite3PageMalloc(pageSize); - if( !pNew ){ - rc = SQLITE_NOMEM; +SQLITE_PRIVATE int sqlite3RowSetTest(RowSet *pRowSet, u8 iBatch, sqlite3_int64 iRowid){ + struct RowSetEntry *p, *pTree; + + /* This routine is never called after sqlite3RowSetNext() */ + assert( pRowSet!=0 && (pRowSet->rsFlags & ROWSET_NEXT)==0 ); + + /* Sort entries into the forest on the first test of a new batch + */ + if( iBatch!=pRowSet->iBatch ){ + p = pRowSet->pEntry; + if( p ){ + struct RowSetEntry **ppPrevTree = &pRowSet->pForest; + if( (pRowSet->rsFlags & ROWSET_SORTED)==0 ){ + p = rowSetEntrySort(p); + } + for(pTree = pRowSet->pForest; pTree; pTree=pTree->pRight){ + ppPrevTree = &pTree->pRight; + if( pTree->pLeft==0 ){ + pTree->pLeft = rowSetListToTree(p); + break; + }else{ + struct RowSetEntry *pAux, *pTail; + rowSetTreeToList(pTree->pLeft, &pAux, &pTail); + pTree->pLeft = 0; + p = rowSetEntryMerge(pAux, p); + } + } + if( pTree==0 ){ + *ppPrevTree = pTree = rowSetEntryAlloc(pRowSet); + if( pTree ){ + pTree->v = 0; + pTree->pRight = 0; + pTree->pLeft = rowSetListToTree(p); + } + } + pRowSet->pEntry = 0; + pRowSet->pLast = 0; + pRowSet->rsFlags |= ROWSET_SORTED; + } + pRowSet->iBatch = iBatch; + } + + /* Test to see if the iRowid value appears anywhere in the forest. + ** Return 1 if it does and 0 if not. + */ + for(pTree = pRowSet->pForest; pTree; pTree=pTree->pRight){ + p = pTree->pLeft; + while( p ){ + if( p->vpRight; + }else if( p->v>iRowid ){ + p = p->pLeft; }else{ - pager_reset(pPager); - pPager->pageSize = pageSize; - sqlite3PageFree(pPager->pTmpSpace); - pPager->pTmpSpace = pNew; - sqlite3PcacheSetPageSize(pPager->pPCache, pageSize); + return 1; } } - *pPageSize = (u16)pPager->pageSize; - if( nReserve<0 ) nReserve = pPager->nReserve; - assert( nReserve>=0 && nReserve<1000 ); - pPager->nReserve = (i16)nReserve; - pagerReportSize(pPager); } - return rc; + return 0; } +/************** End of rowset.c **********************************************/ +/************** Begin file pager.c *******************************************/ /* -** Return a pointer to the "temporary page" buffer held internally -** by the pager. This is a buffer that is big enough to hold the -** entire content of a database page. This buffer is used internally -** during rollback and will be overwritten whenever a rollback -** occurs. But other modules are free to use it too, as long as -** no rollbacks are happening. -*/ -SQLITE_PRIVATE void *sqlite3PagerTempSpace(Pager *pPager){ - return pPager->pTmpSpace; -} - -/* -** Attempt to set the maximum database page count if mxPage is positive. -** Make no changes if mxPage is zero or negative. And never reduce the -** maximum page count below the current size of the database. -** -** Regardless of mxPage, return the current maximum page count. -*/ -SQLITE_PRIVATE int sqlite3PagerMaxPageCount(Pager *pPager, int mxPage){ - if( mxPage>0 ){ - pPager->mxPgno = mxPage; - } - sqlite3PagerPagecount(pPager, 0); - return pPager->mxPgno; -} - -/* -** The following set of routines are used to disable the simulated -** I/O error mechanism. These routines are used to avoid simulated -** errors in places where we do not care about errors. +** 2001 September 15 ** -** Unless -DSQLITE_TEST=1 is used, these routines are all no-ops -** and generate no code. -*/ -#ifdef SQLITE_TEST -SQLITE_API extern int sqlite3_io_error_pending; -SQLITE_API extern int sqlite3_io_error_hit; -static int saved_cnt; -void disable_simulated_io_errors(void){ - saved_cnt = sqlite3_io_error_pending; - sqlite3_io_error_pending = -1; -} -void enable_simulated_io_errors(void){ - sqlite3_io_error_pending = saved_cnt; -} -#else -# define disable_simulated_io_errors() -# define enable_simulated_io_errors() -#endif - -/* -** Read the first N bytes from the beginning of the file into memory -** that pDest points to. +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: ** -** If the pager was opened on a transient file (zFilename==""), or -** opened on a file less than N bytes in size, the output buffer is -** zeroed and SQLITE_OK returned. The rationale for this is that this -** function is used to read database headers, and a new transient or -** zero sized database has a header than consists entirely of zeroes. +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. ** -** If any IO error apart from SQLITE_IOERR_SHORT_READ is encountered, -** the error code is returned to the caller and the contents of the -** output buffer undefined. +************************************************************************* +** This is the implementation of the page cache subsystem or "pager". +** +** The pager is used to access a database disk file. It implements +** atomic commit and rollback through the use of a journal file that +** is separate from the database file. The pager also implements file +** locking to prevent two processes from writing the same database +** file simultaneously, or one process from reading the database while +** another is writing. */ -SQLITE_PRIVATE int sqlite3PagerReadFileheader(Pager *pPager, int N, unsigned char *pDest){ - int rc = SQLITE_OK; - memset(pDest, 0, N); - assert( isOpen(pPager->fd) || pPager->tempFile ); - if( isOpen(pPager->fd) ){ - IOTRACE(("DBHDR %p 0 %d\n", pPager, N)) - rc = sqlite3OsRead(pPager->fd, pDest, N, 0); - if( rc==SQLITE_IOERR_SHORT_READ ){ - rc = SQLITE_OK; - } - } - return rc; -} - +#ifndef SQLITE_OMIT_DISKIO +/************** Include wal.h in the middle of pager.c ***********************/ +/************** Begin file wal.h *********************************************/ /* -** Return the total number of pages in the database file associated -** with pPager. Normally, this is calculated as (/). -** However, if the file is between 1 and bytes in size, then -** this is considered a 1 page file. +** 2010 February 1 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: ** -** If the pager is in error state when this function is called, then the -** error state error code is returned and *pnPage left unchanged. Or, -** if the file system has to be queried for the size of the file and -** the query attempt returns an IO error, the IO error code is returned -** and *pnPage is left unchanged. +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. ** -** Otherwise, if everything is successful, then SQLITE_OK is returned -** and *pnPage is set to the number of pages in the database. +************************************************************************* +** This header file defines the interface to the write-ahead logging +** system. Refer to the comments below and the header comment attached to +** the implementation of each function in log.c for further details. +*/ + +#ifndef _WAL_H_ +#define _WAL_H_ + + +/* Additional values that can be added to the sync_flags argument of +** sqlite3WalFrames(): +*/ +#define WAL_SYNC_TRANSACTIONS 0x20 /* Sync at the end of each transaction */ +#define SQLITE_SYNC_MASK 0x13 /* Mask off the SQLITE_SYNC_* values */ + +#ifdef SQLITE_OMIT_WAL +# define sqlite3WalOpen(x,y,z) 0 +# define sqlite3WalLimit(x,y) +# define sqlite3WalClose(w,x,y,z) 0 +# define sqlite3WalBeginReadTransaction(y,z) 0 +# define sqlite3WalEndReadTransaction(z) +# define sqlite3WalRead(v,w,x,y,z) 0 +# define sqlite3WalDbsize(y) 0 +# define sqlite3WalBeginWriteTransaction(y) 0 +# define sqlite3WalEndWriteTransaction(x) 0 +# define sqlite3WalUndo(x,y,z) 0 +# define sqlite3WalSavepoint(y,z) +# define sqlite3WalSavepointUndo(y,z) 0 +# define sqlite3WalFrames(u,v,w,x,y,z) 0 +# define sqlite3WalCheckpoint(r,s,t,u,v,w,x,y,z) 0 +# define sqlite3WalCallback(z) 0 +# define sqlite3WalExclusiveMode(y,z) 0 +# define sqlite3WalHeapMemory(z) 0 +# define sqlite3WalFramesize(z) 0 +#else + +#define WAL_SAVEPOINT_NDATA 4 + +/* Connection to a write-ahead log (WAL) file. +** There is one object of this type for each pager. */ -SQLITE_PRIVATE int sqlite3PagerPagecount(Pager *pPager, int *pnPage){ - Pgno nPage; /* Value to return via *pnPage */ +typedef struct Wal Wal; - /* If the pager is already in the error state, return the error code. */ - if( pPager->errCode ){ - return pPager->errCode; - } +/* Open and close a connection to a write-ahead log. */ +SQLITE_PRIVATE int sqlite3WalOpen(sqlite3_vfs*, sqlite3_file*, const char *, int, i64, Wal**); +SQLITE_PRIVATE int sqlite3WalClose(Wal *pWal, int sync_flags, int, u8 *); - /* Determine the number of pages in the file. Store this in nPage. */ - if( pPager->dbSizeValid ){ - nPage = pPager->dbSize; - }else{ - int rc; /* Error returned by OsFileSize() */ - i64 n = 0; /* File size in bytes returned by OsFileSize() */ +/* Set the limiting size of a WAL file. */ +SQLITE_PRIVATE void sqlite3WalLimit(Wal*, i64); - assert( isOpen(pPager->fd) || pPager->tempFile ); - if( isOpen(pPager->fd) && (0 != (rc = sqlite3OsFileSize(pPager->fd, &n))) ){ - pager_error(pPager, rc); - return rc; - } - if( n>0 && npageSize ){ - nPage = 1; - }else{ - nPage = (Pgno)(n / pPager->pageSize); - } - if( pPager->state!=PAGER_UNLOCK ){ - pPager->dbSize = nPage; - pPager->dbFileSize = nPage; - pPager->dbSizeValid = 1; - } - } +/* Used by readers to open (lock) and close (unlock) a snapshot. A +** snapshot is like a read-transaction. It is the state of the database +** at an instant in time. sqlite3WalOpenSnapshot gets a read lock and +** preserves the current state even if the other threads or processes +** write to or checkpoint the WAL. sqlite3WalCloseSnapshot() closes the +** transaction and releases the lock. +*/ +SQLITE_PRIVATE int sqlite3WalBeginReadTransaction(Wal *pWal, int *); +SQLITE_PRIVATE void sqlite3WalEndReadTransaction(Wal *pWal); - /* If the current number of pages in the file is greater than the - ** configured maximum pager number, increase the allowed limit so - ** that the file can be read. - */ - if( nPage>pPager->mxPgno ){ - pPager->mxPgno = (Pgno)nPage; - } +/* Read a page from the write-ahead log, if it is present. */ +SQLITE_PRIVATE int sqlite3WalRead(Wal *pWal, Pgno pgno, int *pInWal, int nOut, u8 *pOut); - /* Set the output variable and return SQLITE_OK */ - if( pnPage ){ - *pnPage = nPage; - } - return SQLITE_OK; -} +/* If the WAL is not empty, return the size of the database. */ +SQLITE_PRIVATE Pgno sqlite3WalDbsize(Wal *pWal); +/* Obtain or release the WRITER lock. */ +SQLITE_PRIVATE int sqlite3WalBeginWriteTransaction(Wal *pWal); +SQLITE_PRIVATE int sqlite3WalEndWriteTransaction(Wal *pWal); -/* -** Try to obtain a lock of type locktype on the database file. If -** a similar or greater lock is already held, this function is a no-op -** (returning SQLITE_OK immediately). -** -** Otherwise, attempt to obtain the lock using sqlite3OsLock(). Invoke -** the busy callback if the lock is currently not available. Repeat -** until the busy callback returns false or until the attempt to -** obtain the lock succeeds. -** -** Return SQLITE_OK on success and an error code if we cannot obtain -** the lock. If the lock is obtained successfully, set the Pager.state -** variable to locktype before returning. -*/ -static int pager_wait_on_lock(Pager *pPager, int locktype){ - int rc; /* Return code */ +/* Undo any frames written (but not committed) to the log */ +SQLITE_PRIVATE int sqlite3WalUndo(Wal *pWal, int (*xUndo)(void *, Pgno), void *pUndoCtx); - /* The OS lock values must be the same as the Pager lock values */ - assert( PAGER_SHARED==SHARED_LOCK ); - assert( PAGER_RESERVED==RESERVED_LOCK ); - assert( PAGER_EXCLUSIVE==EXCLUSIVE_LOCK ); +/* Return an integer that records the current (uncommitted) write +** position in the WAL */ +SQLITE_PRIVATE void sqlite3WalSavepoint(Wal *pWal, u32 *aWalData); - /* If the file is currently unlocked then the size must be unknown */ - assert( pPager->state>=PAGER_SHARED || pPager->dbSizeValid==0 ); +/* Move the write position of the WAL back to iFrame. Called in +** response to a ROLLBACK TO command. */ +SQLITE_PRIVATE int sqlite3WalSavepointUndo(Wal *pWal, u32 *aWalData); - /* Check that this is either a no-op (because the requested lock is - ** already held, or one of the transistions that the busy-handler - ** may be invoked during, according to the comment above - ** sqlite3PagerSetBusyhandler(). - */ - assert( (pPager->state>=locktype) - || (pPager->state==PAGER_UNLOCK && locktype==PAGER_SHARED) - || (pPager->state==PAGER_RESERVED && locktype==PAGER_EXCLUSIVE) - ); +/* Write a frame or frames to the log. */ +SQLITE_PRIVATE int sqlite3WalFrames(Wal *pWal, int, PgHdr *, Pgno, int, int); - if( pPager->state>=locktype ){ - rc = SQLITE_OK; - }else{ - do { - rc = sqlite3OsLock(pPager->fd, locktype); - }while( rc==SQLITE_BUSY && pPager->xBusyHandler(pPager->pBusyHandlerArg) ); - if( rc==SQLITE_OK ){ - pPager->state = (u8)locktype; - IOTRACE(("LOCK %p %d\n", pPager, locktype)) - } - } - return rc; -} +/* Copy pages from the log to the database file */ +SQLITE_PRIVATE int sqlite3WalCheckpoint( + Wal *pWal, /* Write-ahead log connection */ + int eMode, /* One of PASSIVE, FULL and RESTART */ + int (*xBusy)(void*), /* Function to call when busy */ + void *pBusyArg, /* Context argument for xBusyHandler */ + int sync_flags, /* Flags to sync db file with (or 0) */ + int nBuf, /* Size of buffer nBuf */ + u8 *zBuf, /* Temporary buffer to use */ + int *pnLog, /* OUT: Number of frames in WAL */ + int *pnCkpt /* OUT: Number of backfilled frames in WAL */ +); -/* -** Truncate the in-memory database file image to nPage pages. This -** function does not actually modify the database file on disk. It -** just sets the internal state of the pager object so that the -** truncation will be done when the current transaction is committed. +/* Return the value to pass to a sqlite3_wal_hook callback, the +** number of frames in the WAL at the point of the last commit since +** sqlite3WalCallback() was called. If no commits have occurred since +** the last call, then return 0. */ -SQLITE_PRIVATE void sqlite3PagerTruncateImage(Pager *pPager, Pgno nPage){ - assert( pPager->dbSizeValid ); - assert( pPager->dbSize>=nPage ); - assert( pPager->state>=PAGER_RESERVED ); - pPager->dbSize = nPage; -} +SQLITE_PRIVATE int sqlite3WalCallback(Wal *pWal); -/* -** Shutdown the page cache. Free all memory and close all files. -** -** If a transaction was in progress when this routine is called, that -** transaction is rolled back. All outstanding pages are invalidated -** and their memory is freed. Any attempt to use a page associated -** with this page cache after this function returns will likely -** result in a coredump. -** -** This function always succeeds. If a transaction is active an attempt -** is made to roll it back. If an error occurs during the rollback -** a hot journal may be left in the filesystem but no error is returned -** to the caller. +/* Tell the wal layer that an EXCLUSIVE lock has been obtained (or released) +** by the pager layer on the database file. */ -SQLITE_PRIVATE int sqlite3PagerClose(Pager *pPager){ - disable_simulated_io_errors(); - sqlite3BeginBenignMalloc(); - pPager->errCode = 0; - pPager->exclusiveMode = 0; - pager_reset(pPager); - if( MEMDB ){ - pager_unlock(pPager); - }else{ - /* Set Pager.journalHdr to -1 for the benefit of the pager_playback() - ** call which may be made from within pagerUnlockAndRollback(). If it - ** is not -1, then the unsynced portion of an open journal file may - ** be played back into the database. If a power failure occurs while - ** this is happening, the database may become corrupt. - */ - pPager->journalHdr = -1; - pagerUnlockAndRollback(pPager); - } - sqlite3EndBenignMalloc(); - enable_simulated_io_errors(); - PAGERTRACE(("CLOSE %d\n", PAGERID(pPager))); - IOTRACE(("CLOSE %p\n", pPager)) - sqlite3OsClose(pPager->fd); - sqlite3PageFree(pPager->pTmpSpace); - sqlite3PcacheClose(pPager->pPCache); +SQLITE_PRIVATE int sqlite3WalExclusiveMode(Wal *pWal, int op); -#ifdef SQLITE_HAS_CODEC - if( pPager->xCodecFree ) pPager->xCodecFree(pPager->pCodec); +/* Return true if the argument is non-NULL and the WAL module is using +** heap-memory for the wal-index. Otherwise, if the argument is NULL or the +** WAL module is using shared-memory, return false. +*/ +SQLITE_PRIVATE int sqlite3WalHeapMemory(Wal *pWal); + +#ifdef SQLITE_ENABLE_ZIPVFS +/* If the WAL file is not empty, return the number of bytes of content +** stored in each frame (i.e. the db page-size when the WAL was created). +*/ +SQLITE_PRIVATE int sqlite3WalFramesize(Wal *pWal); #endif - assert( !pPager->aSavepoint && !pPager->pInJournal ); - assert( !isOpen(pPager->jfd) && !isOpen(pPager->sjfd) ); +#endif /* ifndef SQLITE_OMIT_WAL */ +#endif /* _WAL_H_ */ - sqlite3_free(pPager); - return SQLITE_OK; -} +/************** End of wal.h *************************************************/ +/************** Continuing where we left off in pager.c **********************/ + + +/******************* NOTES ON THE DESIGN OF THE PAGER ************************ +** +** This comment block describes invariants that hold when using a rollback +** journal. These invariants do not apply for journal_mode=WAL, +** journal_mode=MEMORY, or journal_mode=OFF. +** +** Within this comment block, a page is deemed to have been synced +** automatically as soon as it is written when PRAGMA synchronous=OFF. +** Otherwise, the page is not synced until the xSync method of the VFS +** is called successfully on the file containing the page. +** +** Definition: A page of the database file is said to be "overwriteable" if +** one or more of the following are true about the page: +** +** (a) The original content of the page as it was at the beginning of +** the transaction has been written into the rollback journal and +** synced. +** +** (b) The page was a freelist leaf page at the start of the transaction. +** +** (c) The page number is greater than the largest page that existed in +** the database file at the start of the transaction. +** +** (1) A page of the database file is never overwritten unless one of the +** following are true: +** +** (a) The page and all other pages on the same sector are overwriteable. +** +** (b) The atomic page write optimization is enabled, and the entire +** transaction other than the update of the transaction sequence +** number consists of a single page change. +** +** (2) The content of a page written into the rollback journal exactly matches +** both the content in the database when the rollback journal was written +** and the content in the database at the beginning of the current +** transaction. +** +** (3) Writes to the database file are an integer multiple of the page size +** in length and are aligned on a page boundary. +** +** (4) Reads from the database file are either aligned on a page boundary and +** an integer multiple of the page size in length or are taken from the +** first 100 bytes of the database file. +** +** (5) All writes to the database file are synced prior to the rollback journal +** being deleted, truncated, or zeroed. +** +** (6) If a master journal file is used, then all writes to the database file +** are synced prior to the master journal being deleted. +** +** Definition: Two databases (or the same database at two points it time) +** are said to be "logically equivalent" if they give the same answer to +** all queries. Note in particular the the content of freelist leaf +** pages can be changed arbitarily without effecting the logical equivalence +** of the database. +** +** (7) At any time, if any subset, including the empty set and the total set, +** of the unsynced changes to a rollback journal are removed and the +** journal is rolled back, the resulting database file will be logical +** equivalent to the database file at the beginning of the transaction. +** +** (8) When a transaction is rolled back, the xTruncate method of the VFS +** is called to restore the database file to the same size it was at +** the beginning of the transaction. (In some VFSes, the xTruncate +** method is a no-op, but that does not change the fact the SQLite will +** invoke it.) +** +** (9) Whenever the database file is modified, at least one bit in the range +** of bytes from 24 through 39 inclusive will be changed prior to releasing +** the EXCLUSIVE lock, thus signaling other connections on the same +** database to flush their caches. +** +** (10) The pattern of bits in bytes 24 through 39 shall not repeat in less +** than one billion transactions. +** +** (11) A database file is well-formed at the beginning and at the conclusion +** of every transaction. +** +** (12) An EXCLUSIVE lock is held on the database file when writing to +** the database file. +** +** (13) A SHARED lock is held on the database file while reading any +** content out of the database file. +** +******************************************************************************/ -#if !defined(NDEBUG) || defined(SQLITE_TEST) /* -** Return the page number for page pPg. +** Macros for troubleshooting. Normally turned off */ -SQLITE_PRIVATE Pgno sqlite3PagerPagenumber(DbPage *pPg){ - return pPg->pgno; -} +#if 0 +int sqlite3PagerTrace=1; /* True to enable tracing */ +#define sqlite3DebugPrintf printf +#define PAGERTRACE(X) if( sqlite3PagerTrace ){ sqlite3DebugPrintf X; } +#else +#define PAGERTRACE(X) #endif /* -** Increment the reference count for page pPg. +** The following two macros are used within the PAGERTRACE() macros above +** to print out file-descriptors. +** +** PAGERID() takes a pointer to a Pager struct as its argument. The +** associated file-descriptor is returned. FILEHANDLEID() takes an sqlite3_file +** struct as its argument. */ -SQLITE_PRIVATE void sqlite3PagerRef(DbPage *pPg){ - sqlite3PcacheRef(pPg); -} +#define PAGERID(p) ((int)(p->fd)) +#define FILEHANDLEID(fd) ((int)fd) /* -** Sync the journal. In other words, make sure all the pages that have -** been written to the journal have actually reached the surface of the -** disk and can be restored in the event of a hot-journal rollback. +** The Pager.eState variable stores the current 'state' of a pager. A +** pager may be in any one of the seven states shown in the following +** state diagram. +** +** OPEN <------+------+ +** | | | +** V | | +** +---------> READER-------+ | +** | | | +** | V | +** |<-------WRITER_LOCKED------> ERROR +** | | ^ +** | V | +** |<------WRITER_CACHEMOD-------->| +** | | | +** | V | +** |<-------WRITER_DBMOD---------->| +** | | | +** | V | +** +<------WRITER_FINISHED-------->+ +** +** +** List of state transitions and the C [function] that performs each: +** +** OPEN -> READER [sqlite3PagerSharedLock] +** READER -> OPEN [pager_unlock] ** -** If the Pager.needSync flag is not set, then this function is a -** no-op. Otherwise, the actions required depend on the journal-mode -** and the device characteristics of the the file-system, as follows: +** READER -> WRITER_LOCKED [sqlite3PagerBegin] +** WRITER_LOCKED -> WRITER_CACHEMOD [pager_open_journal] +** WRITER_CACHEMOD -> WRITER_DBMOD [syncJournal] +** WRITER_DBMOD -> WRITER_FINISHED [sqlite3PagerCommitPhaseOne] +** WRITER_*** -> READER [pager_end_transaction] ** -** * If the journal file is an in-memory journal file, no action need -** be taken. +** WRITER_*** -> ERROR [pager_error] +** ERROR -> OPEN [pager_unlock] +** ** -** * Otherwise, if the device does not support the SAFE_APPEND property, -** then the nRec field of the most recently written journal header -** is updated to contain the number of journal records that have -** been written following it. If the pager is operating in full-sync -** mode, then the journal file is synced before this field is updated. +** OPEN: ** -** * If the device does not support the SEQUENTIAL property, then -** journal file is synced. +** The pager starts up in this state. Nothing is guaranteed in this +** state - the file may or may not be locked and the database size is +** unknown. The database may not be read or written. ** -** Or, in pseudo-code: +** * No read or write transaction is active. +** * Any lock, or no lock at all, may be held on the database file. +** * The dbSize, dbOrigSize and dbFileSize variables may not be trusted. ** -** if( NOT ){ -** if( NOT SAFE_APPEND ){ -** if( ) xSync(); -** -** } -** if( NOT SEQUENTIAL ) xSync(); -** } +** READER: ** -** The Pager.needSync flag is never be set for temporary files, or any -** file operating in no-sync mode (Pager.noSync set to non-zero). +** In this state all the requirements for reading the database in +** rollback (non-WAL) mode are met. Unless the pager is (or recently +** was) in exclusive-locking mode, a user-level read transaction is +** open. The database size is known in this state. ** -** If successful, this routine clears the PGHDR_NEED_SYNC flag of every -** page currently held in memory before returning SQLITE_OK. If an IO -** error is encountered, then the IO error code is returned to the caller. -*/ -static int syncJournal(Pager *pPager){ - if( pPager->needSync ){ - assert( !pPager->tempFile ); - if( pPager->journalMode!=PAGER_JOURNALMODE_MEMORY ){ - int rc; /* Return code */ - const int iDc = sqlite3OsDeviceCharacteristics(pPager->fd); - assert( isOpen(pPager->jfd) ); - - if( 0==(iDc&SQLITE_IOCAP_SAFE_APPEND) ){ - /* This block deals with an obscure problem. If the last connection - ** that wrote to this database was operating in persistent-journal - ** mode, then the journal file may at this point actually be larger - ** than Pager.journalOff bytes. If the next thing in the journal - ** file happens to be a journal-header (written as part of the - ** previous connections transaction), and a crash or power-failure - ** occurs after nRec is updated but before this connection writes - ** anything else to the journal file (or commits/rolls back its - ** transaction), then SQLite may become confused when doing the - ** hot-journal rollback following recovery. It may roll back all - ** of this connections data, then proceed to rolling back the old, - ** out-of-date data that follows it. Database corruption. - ** - ** To work around this, if the journal file does appear to contain - ** a valid header following Pager.journalOff, then write a 0x00 - ** byte to the start of it to prevent it from being recognized. - ** - ** Variable iNextHdrOffset is set to the offset at which this - ** problematic header will occur, if it exists. aMagic is used - ** as a temporary buffer to inspect the first couple of bytes of - ** the potential journal header. - */ - i64 iNextHdrOffset; - u8 aMagic[8]; - u8 zHeader[sizeof(aJournalMagic)+4]; - - memcpy(zHeader, aJournalMagic, sizeof(aJournalMagic)); - put32bits(&zHeader[sizeof(aJournalMagic)], pPager->nRec); - - iNextHdrOffset = journalHdrOffset(pPager); - rc = sqlite3OsRead(pPager->jfd, aMagic, 8, iNextHdrOffset); - if( rc==SQLITE_OK && 0==memcmp(aMagic, aJournalMagic, 8) ){ - static const u8 zerobyte = 0; - rc = sqlite3OsWrite(pPager->jfd, &zerobyte, 1, iNextHdrOffset); - } - if( rc!=SQLITE_OK && rc!=SQLITE_IOERR_SHORT_READ ){ - return rc; - } +** A connection running with locking_mode=normal enters this state when +** it opens a read-transaction on the database and returns to state +** OPEN after the read-transaction is completed. However a connection +** running in locking_mode=exclusive (including temp databases) remains in +** this state even after the read-transaction is closed. The only way +** a locking_mode=exclusive connection can transition from READER to OPEN +** is via the ERROR state (see below). +** +** * A read transaction may be active (but a write-transaction cannot). +** * A SHARED or greater lock is held on the database file. +** * The dbSize variable may be trusted (even if a user-level read +** transaction is not active). The dbOrigSize and dbFileSize variables +** may not be trusted at this point. +** * If the database is a WAL database, then the WAL connection is open. +** * Even if a read-transaction is not open, it is guaranteed that +** there is no hot-journal in the file-system. +** +** WRITER_LOCKED: +** +** The pager moves to this state from READER when a write-transaction +** is first opened on the database. In WRITER_LOCKED state, all locks +** required to start a write-transaction are held, but no actual +** modifications to the cache or database have taken place. +** +** In rollback mode, a RESERVED or (if the transaction was opened with +** BEGIN EXCLUSIVE) EXCLUSIVE lock is obtained on the database file when +** moving to this state, but the journal file is not written to or opened +** to in this state. If the transaction is committed or rolled back while +** in WRITER_LOCKED state, all that is required is to unlock the database +** file. +** +** IN WAL mode, WalBeginWriteTransaction() is called to lock the log file. +** If the connection is running with locking_mode=exclusive, an attempt +** is made to obtain an EXCLUSIVE lock on the database file. +** +** * A write transaction is active. +** * If the connection is open in rollback-mode, a RESERVED or greater +** lock is held on the database file. +** * If the connection is open in WAL-mode, a WAL write transaction +** is open (i.e. sqlite3WalBeginWriteTransaction() has been successfully +** called). +** * The dbSize, dbOrigSize and dbFileSize variables are all valid. +** * The contents of the pager cache have not been modified. +** * The journal file may or may not be open. +** * Nothing (not even the first header) has been written to the journal. +** +** WRITER_CACHEMOD: +** +** A pager moves from WRITER_LOCKED state to this state when a page is +** first modified by the upper layer. In rollback mode the journal file +** is opened (if it is not already open) and a header written to the +** start of it. The database file on disk has not been modified. +** +** * A write transaction is active. +** * A RESERVED or greater lock is held on the database file. +** * The journal file is open and the first header has been written +** to it, but the header has not been synced to disk. +** * The contents of the page cache have been modified. +** +** WRITER_DBMOD: +** +** The pager transitions from WRITER_CACHEMOD into WRITER_DBMOD state +** when it modifies the contents of the database file. WAL connections +** never enter this state (since they do not modify the database file, +** just the log file). +** +** * A write transaction is active. +** * An EXCLUSIVE or greater lock is held on the database file. +** * The journal file is open and the first header has been written +** and synced to disk. +** * The contents of the page cache have been modified (and possibly +** written to disk). +** +** WRITER_FINISHED: +** +** It is not possible for a WAL connection to enter this state. +** +** A rollback-mode pager changes to WRITER_FINISHED state from WRITER_DBMOD +** state after the entire transaction has been successfully written into the +** database file. In this state the transaction may be committed simply +** by finalizing the journal file. Once in WRITER_FINISHED state, it is +** not possible to modify the database further. At this point, the upper +** layer must either commit or rollback the transaction. +** +** * A write transaction is active. +** * An EXCLUSIVE or greater lock is held on the database file. +** * All writing and syncing of journal and database data has finished. +** If no error occured, all that remains is to finalize the journal to +** commit the transaction. If an error did occur, the caller will need +** to rollback the transaction. +** +** ERROR: +** +** The ERROR state is entered when an IO or disk-full error (including +** SQLITE_IOERR_NOMEM) occurs at a point in the code that makes it +** difficult to be sure that the in-memory pager state (cache contents, +** db size etc.) are consistent with the contents of the file-system. +** +** Temporary pager files may enter the ERROR state, but in-memory pagers +** cannot. +** +** For example, if an IO error occurs while performing a rollback, +** the contents of the page-cache may be left in an inconsistent state. +** At this point it would be dangerous to change back to READER state +** (as usually happens after a rollback). Any subsequent readers might +** report database corruption (due to the inconsistent cache), and if +** they upgrade to writers, they may inadvertently corrupt the database +** file. To avoid this hazard, the pager switches into the ERROR state +** instead of READER following such an error. +** +** Once it has entered the ERROR state, any attempt to use the pager +** to read or write data returns an error. Eventually, once all +** outstanding transactions have been abandoned, the pager is able to +** transition back to OPEN state, discarding the contents of the +** page-cache and any other in-memory state at the same time. Everything +** is reloaded from disk (and, if necessary, hot-journal rollback peformed) +** when a read-transaction is next opened on the pager (transitioning +** the pager into READER state). At that point the system has recovered +** from the error. +** +** Specifically, the pager jumps into the ERROR state if: +** +** 1. An error occurs while attempting a rollback. This happens in +** function sqlite3PagerRollback(). +** +** 2. An error occurs while attempting to finalize a journal file +** following a commit in function sqlite3PagerCommitPhaseTwo(). +** +** 3. An error occurs while attempting to write to the journal or +** database file in function pagerStress() in order to free up +** memory. +** +** In other cases, the error is returned to the b-tree layer. The b-tree +** layer then attempts a rollback operation. If the error condition +** persists, the pager enters the ERROR state via condition (1) above. +** +** Condition (3) is necessary because it can be triggered by a read-only +** statement executed within a transaction. In this case, if the error +** code were simply returned to the user, the b-tree layer would not +** automatically attempt a rollback, as it assumes that an error in a +** read-only statement cannot leave the pager in an internally inconsistent +** state. +** +** * The Pager.errCode variable is set to something other than SQLITE_OK. +** * There are one or more outstanding references to pages (after the +** last reference is dropped the pager should move back to OPEN state). +** * The pager is not an in-memory pager. +** +** +** Notes: +** +** * A pager is never in WRITER_DBMOD or WRITER_FINISHED state if the +** connection is open in WAL mode. A WAL connection is always in one +** of the first four states. +** +** * Normally, a connection open in exclusive mode is never in PAGER_OPEN +** state. There are two exceptions: immediately after exclusive-mode has +** been turned on (and before any read or write transactions are +** executed), and when the pager is leaving the "error state". +** +** * See also: assert_pager_state(). +*/ +#define PAGER_OPEN 0 +#define PAGER_READER 1 +#define PAGER_WRITER_LOCKED 2 +#define PAGER_WRITER_CACHEMOD 3 +#define PAGER_WRITER_DBMOD 4 +#define PAGER_WRITER_FINISHED 5 +#define PAGER_ERROR 6 + +/* +** The Pager.eLock variable is almost always set to one of the +** following locking-states, according to the lock currently held on +** the database file: NO_LOCK, SHARED_LOCK, RESERVED_LOCK or EXCLUSIVE_LOCK. +** This variable is kept up to date as locks are taken and released by +** the pagerLockDb() and pagerUnlockDb() wrappers. +** +** If the VFS xLock() or xUnlock() returns an error other than SQLITE_BUSY +** (i.e. one of the SQLITE_IOERR subtypes), it is not clear whether or not +** the operation was successful. In these circumstances pagerLockDb() and +** pagerUnlockDb() take a conservative approach - eLock is always updated +** when unlocking the file, and only updated when locking the file if the +** VFS call is successful. This way, the Pager.eLock variable may be set +** to a less exclusive (lower) value than the lock that is actually held +** at the system level, but it is never set to a more exclusive value. +** +** This is usually safe. If an xUnlock fails or appears to fail, there may +** be a few redundant xLock() calls or a lock may be held for longer than +** required, but nothing really goes wrong. +** +** The exception is when the database file is unlocked as the pager moves +** from ERROR to OPEN state. At this point there may be a hot-journal file +** in the file-system that needs to be rolled back (as part of a OPEN->SHARED +** transition, by the same pager or any other). If the call to xUnlock() +** fails at this point and the pager is left holding an EXCLUSIVE lock, this +** can confuse the call to xCheckReservedLock() call made later as part +** of hot-journal detection. +** +** xCheckReservedLock() is defined as returning true "if there is a RESERVED +** lock held by this process or any others". So xCheckReservedLock may +** return true because the caller itself is holding an EXCLUSIVE lock (but +** doesn't know it because of a previous error in xUnlock). If this happens +** a hot-journal may be mistaken for a journal being created by an active +** transaction in another process, causing SQLite to read from the database +** without rolling it back. +** +** To work around this, if a call to xUnlock() fails when unlocking the +** database in the ERROR state, Pager.eLock is set to UNKNOWN_LOCK. It +** is only changed back to a real locking state after a successful call +** to xLock(EXCLUSIVE). Also, the code to do the OPEN->SHARED state transition +** omits the check for a hot-journal if Pager.eLock is set to UNKNOWN_LOCK +** lock. Instead, it assumes a hot-journal exists and obtains an EXCLUSIVE +** lock on the database file before attempting to roll it back. See function +** PagerSharedLock() for more detail. +** +** Pager.eLock may only be set to UNKNOWN_LOCK when the pager is in +** PAGER_OPEN state. +*/ +#define UNKNOWN_LOCK (EXCLUSIVE_LOCK+1) - /* Write the nRec value into the journal file header. If in - ** full-synchronous mode, sync the journal first. This ensures that - ** all data has really hit the disk before nRec is updated to mark - ** it as a candidate for rollback. - ** - ** This is not required if the persistent media supports the - ** SAFE_APPEND property. Because in this case it is not possible - ** for garbage data to be appended to the file, the nRec field - ** is populated with 0xFFFFFFFF when the journal header is written - ** and never needs to be updated. - */ - if( pPager->fullSync && 0==(iDc&SQLITE_IOCAP_SEQUENTIAL) ){ - PAGERTRACE(("SYNC journal of %d\n", PAGERID(pPager))); - IOTRACE(("JSYNC %p\n", pPager)) - rc = sqlite3OsSync(pPager->jfd, pPager->sync_flags); - if( rc!=SQLITE_OK ) return rc; - } - IOTRACE(("JHDR %p %lld\n", pPager, pPager->journalHdr)); - rc = sqlite3OsWrite( - pPager->jfd, zHeader, sizeof(zHeader), pPager->journalHdr - ); - if( rc!=SQLITE_OK ) return rc; - } - if( 0==(iDc&SQLITE_IOCAP_SEQUENTIAL) ){ - PAGERTRACE(("SYNC journal of %d\n", PAGERID(pPager))); - IOTRACE(("JSYNC %p\n", pPager)) - rc = sqlite3OsSync(pPager->jfd, pPager->sync_flags| - (pPager->sync_flags==SQLITE_SYNC_FULL?SQLITE_SYNC_DATAONLY:0) - ); - if( rc!=SQLITE_OK ) return rc; - } - } +/* +** A macro used for invoking the codec if there is one +*/ +#ifdef SQLITE_HAS_CODEC +# define CODEC1(P,D,N,X,E) \ + if( P->xCodec && P->xCodec(P->pCodec,D,N,X)==0 ){ E; } +# define CODEC2(P,D,N,X,E,O) \ + if( P->xCodec==0 ){ O=(char*)D; }else \ + if( (O=(char*)(P->xCodec(P->pCodec,D,N,X)))==0 ){ E; } +#else +# define CODEC1(P,D,N,X,E) /* NO-OP */ +# define CODEC2(P,D,N,X,E,O) O=(char*)D +#endif - /* The journal file was just successfully synced. Set Pager.needSync - ** to zero and clear the PGHDR_NEED_SYNC flag on all pagess. - */ - pPager->needSync = 0; - pPager->journalStarted = 1; - sqlite3PcacheClearSyncFlags(pPager->pPCache); - } +/* +** The maximum allowed sector size. 64KiB. If the xSectorsize() method +** returns a value larger than this, then MAX_SECTOR_SIZE is used instead. +** This could conceivably cause corruption following a power failure on +** such a system. This is currently an undocumented limit. +*/ +#define MAX_SECTOR_SIZE 0x10000 - return SQLITE_OK; -} +/* +** An instance of the following structure is allocated for each active +** savepoint and statement transaction in the system. All such structures +** are stored in the Pager.aSavepoint[] array, which is allocated and +** resized using sqlite3Realloc(). +** +** When a savepoint is created, the PagerSavepoint.iHdrOffset field is +** set to 0. If a journal-header is written into the main journal while +** the savepoint is active, then iHdrOffset is set to the byte offset +** immediately following the last journal record written into the main +** journal before the journal-header. This is required during savepoint +** rollback (see pagerPlaybackSavepoint()). +*/ +typedef struct PagerSavepoint PagerSavepoint; +struct PagerSavepoint { + i64 iOffset; /* Starting offset in main journal */ + i64 iHdrOffset; /* See above */ + Bitvec *pInSavepoint; /* Set of pages in this savepoint */ + Pgno nOrig; /* Original number of pages in file */ + Pgno iSubRec; /* Index of first record in sub-journal */ +#ifndef SQLITE_OMIT_WAL + u32 aWalData[WAL_SAVEPOINT_NDATA]; /* WAL savepoint context */ +#endif +}; /* -** The argument is the first in a linked list of dirty pages connected -** by the PgHdr.pDirty pointer. This function writes each one of the -** in-memory pages in the list to the database file. The argument may -** be NULL, representing an empty list. In this case this function is -** a no-op. +** A open page cache is an instance of struct Pager. A description of +** some of the more important member variables follows: ** -** The pager must hold at least a RESERVED lock when this function -** is called. Before writing anything to the database file, this lock -** is upgraded to an EXCLUSIVE lock. If the lock cannot be obtained, -** SQLITE_BUSY is returned and no data is written to the database file. +** eState +** +** The current 'state' of the pager object. See the comment and state +** diagram above for a description of the pager state. +** +** eLock +** +** For a real on-disk database, the current lock held on the database file - +** NO_LOCK, SHARED_LOCK, RESERVED_LOCK or EXCLUSIVE_LOCK. +** +** For a temporary or in-memory database (neither of which require any +** locks), this variable is always set to EXCLUSIVE_LOCK. Since such +** databases always have Pager.exclusiveMode==1, this tricks the pager +** logic into thinking that it already has all the locks it will ever +** need (and no reason to release them). +** +** In some (obscure) circumstances, this variable may also be set to +** UNKNOWN_LOCK. See the comment above the #define of UNKNOWN_LOCK for +** details. +** +** changeCountDone +** +** This boolean variable is used to make sure that the change-counter +** (the 4-byte header field at byte offset 24 of the database file) is +** not updated more often than necessary. +** +** It is set to true when the change-counter field is updated, which +** can only happen if an exclusive lock is held on the database file. +** It is cleared (set to false) whenever an exclusive lock is +** relinquished on the database file. Each time a transaction is committed, +** The changeCountDone flag is inspected. If it is true, the work of +** updating the change-counter is omitted for the current transaction. +** +** This mechanism means that when running in exclusive mode, a connection +** need only update the change-counter once, for the first transaction +** committed. +** +** setMaster +** +** When PagerCommitPhaseOne() is called to commit a transaction, it may +** (or may not) specify a master-journal name to be written into the +** journal file before it is synced to disk. +** +** Whether or not a journal file contains a master-journal pointer affects +** the way in which the journal file is finalized after the transaction is +** committed or rolled back when running in "journal_mode=PERSIST" mode. +** If a journal file does not contain a master-journal pointer, it is +** finalized by overwriting the first journal header with zeroes. If +** it does contain a master-journal pointer the journal file is finalized +** by truncating it to zero bytes, just as if the connection were +** running in "journal_mode=truncate" mode. +** +** Journal files that contain master journal pointers cannot be finalized +** simply by overwriting the first journal-header with zeroes, as the +** master journal pointer could interfere with hot-journal rollback of any +** subsequently interrupted transaction that reuses the journal file. +** +** The flag is cleared as soon as the journal file is finalized (either +** by PagerCommitPhaseTwo or PagerRollback). If an IO error prevents the +** journal file from being successfully finalized, the setMaster flag +** is cleared anyway (and the pager will move to ERROR state). +** +** doNotSpill, doNotSyncSpill +** +** These two boolean variables control the behaviour of cache-spills +** (calls made by the pcache module to the pagerStress() routine to +** write cached data to the file-system in order to free up memory). +** +** When doNotSpill is non-zero, writing to the database from pagerStress() +** is disabled altogether. This is done in a very obscure case that +** comes up during savepoint rollback that requires the pcache module +** to allocate a new page to prevent the journal file from being written +** while it is being traversed by code in pager_playback(). ** -** If the pager is a temp-file pager and the actual file-system file -** is not yet open, it is created and opened before any data is -** written out. +** If doNotSyncSpill is non-zero, writing to the database from pagerStress() +** is permitted, but syncing the journal file is not. This flag is set +** by sqlite3PagerWrite() when the file-system sector-size is larger than +** the database page-size in order to prevent a journal sync from happening +** in between the journalling of two pages on the same sector. ** -** Once the lock has been upgraded and, if necessary, the file opened, -** the pages are written out to the database file in list order. Writing -** a page is skipped if it meets either of the following criteria: +** subjInMemory ** -** * The page number is greater than Pager.dbSize, or -** * The PGHDR_DONT_WRITE flag is set on the page. +** This is a boolean variable. If true, then any required sub-journal +** is opened as an in-memory journal file. If false, then in-memory +** sub-journals are only used for in-memory pager files. ** -** If writing out a page causes the database file to grow, Pager.dbFileSize -** is updated accordingly. If page 1 is written out, then the value cached -** in Pager.dbFileVers[] is updated to match the new value stored in -** the database file. +** This variable is updated by the upper layer each time a new +** write-transaction is opened. +** +** dbSize, dbOrigSize, dbFileSize +** +** Variable dbSize is set to the number of pages in the database file. +** It is valid in PAGER_READER and higher states (all states except for +** OPEN and ERROR). +** +** dbSize is set based on the size of the database file, which may be +** larger than the size of the database (the value stored at offset +** 28 of the database header by the btree). If the size of the file +** is not an integer multiple of the page-size, the value stored in +** dbSize is rounded down (i.e. a 5KB file with 2K page-size has dbSize==2). +** Except, any file that is greater than 0 bytes in size is considered +** to have at least one page. (i.e. a 1KB file with 2K page-size leads +** to dbSize==1). +** +** During a write-transaction, if pages with page-numbers greater than +** dbSize are modified in the cache, dbSize is updated accordingly. +** Similarly, if the database is truncated using PagerTruncateImage(), +** dbSize is updated. +** +** Variables dbOrigSize and dbFileSize are valid in states +** PAGER_WRITER_LOCKED and higher. dbOrigSize is a copy of the dbSize +** variable at the start of the transaction. It is used during rollback, +** and to determine whether or not pages need to be journalled before +** being modified. +** +** Throughout a write-transaction, dbFileSize contains the size of +** the file on disk in pages. It is set to a copy of dbSize when the +** write-transaction is first opened, and updated when VFS calls are made +** to write or truncate the database file on disk. +** +** The only reason the dbFileSize variable is required is to suppress +** unnecessary calls to xTruncate() after committing a transaction. If, +** when a transaction is committed, the dbFileSize variable indicates +** that the database file is larger than the database image (Pager.dbSize), +** pager_truncate() is called. The pager_truncate() call uses xFilesize() +** to measure the database file on disk, and then truncates it if required. +** dbFileSize is not used when rolling back a transaction. In this case +** pager_truncate() is called unconditionally (which means there may be +** a call to xFilesize() that is not strictly required). In either case, +** pager_truncate() may cause the file to become smaller or larger. +** +** dbHintSize +** +** The dbHintSize variable is used to limit the number of calls made to +** the VFS xFileControl(FCNTL_SIZE_HINT) method. +** +** dbHintSize is set to a copy of the dbSize variable when a +** write-transaction is opened (at the same time as dbFileSize and +** dbOrigSize). If the xFileControl(FCNTL_SIZE_HINT) method is called, +** dbHintSize is increased to the number of pages that correspond to the +** size-hint passed to the method call. See pager_write_pagelist() for +** details. ** -** If everything is successful, SQLITE_OK is returned. If an IO error -** occurs, an IO error code is returned. Or, if the EXCLUSIVE lock cannot -** be obtained, SQLITE_BUSY is returned. +** errCode +** +** The Pager.errCode variable is only ever used in PAGER_ERROR state. It +** is set to zero in all other states. In PAGER_ERROR state, Pager.errCode +** is always set to SQLITE_FULL, SQLITE_IOERR or one of the SQLITE_IOERR_XXX +** sub-codes. */ -static int pager_write_pagelist(PgHdr *pList){ - Pager *pPager; /* Pager object */ - int rc; /* Return code */ +struct Pager { + sqlite3_vfs *pVfs; /* OS functions to use for IO */ + u8 exclusiveMode; /* Boolean. True if locking_mode==EXCLUSIVE */ + u8 journalMode; /* One of the PAGER_JOURNALMODE_* values */ + u8 useJournal; /* Use a rollback journal on this file */ + u8 noSync; /* Do not sync the journal if true */ + u8 fullSync; /* Do extra syncs of the journal for robustness */ + u8 ckptSyncFlags; /* SYNC_NORMAL or SYNC_FULL for checkpoint */ + u8 walSyncFlags; /* SYNC_NORMAL or SYNC_FULL for wal writes */ + u8 syncFlags; /* SYNC_NORMAL or SYNC_FULL otherwise */ + u8 tempFile; /* zFilename is a temporary file */ + u8 readOnly; /* True for a read-only database */ + u8 memDb; /* True to inhibit all file I/O */ - if( pList==0 ) return SQLITE_OK; - pPager = pList->pPager; + /************************************************************************** + ** The following block contains those class members that change during + ** routine opertion. Class members not in this block are either fixed + ** when the pager is first created or else only change when there is a + ** significant mode change (such as changing the page_size, locking_mode, + ** or the journal_mode). From another view, these class members describe + ** the "state" of the pager, while other class members describe the + ** "configuration" of the pager. + */ + u8 eState; /* Pager state (OPEN, READER, WRITER_LOCKED..) */ + u8 eLock; /* Current lock held on database file */ + u8 changeCountDone; /* Set after incrementing the change-counter */ + u8 setMaster; /* True if a m-j name has been written to jrnl */ + u8 doNotSpill; /* Do not spill the cache when non-zero */ + u8 doNotSyncSpill; /* Do not do a spill that requires jrnl sync */ + u8 subjInMemory; /* True to use in-memory sub-journals */ + Pgno dbSize; /* Number of pages in the database */ + Pgno dbOrigSize; /* dbSize before the current transaction */ + Pgno dbFileSize; /* Number of pages in the database file */ + Pgno dbHintSize; /* Value passed to FCNTL_SIZE_HINT call */ + int errCode; /* One of several kinds of errors */ + int nRec; /* Pages journalled since last j-header written */ + u32 cksumInit; /* Quasi-random value added to every checksum */ + u32 nSubRec; /* Number of records written to sub-journal */ + Bitvec *pInJournal; /* One bit for each page in the database file */ + sqlite3_file *fd; /* File descriptor for database */ + sqlite3_file *jfd; /* File descriptor for main journal */ + sqlite3_file *sjfd; /* File descriptor for sub-journal */ + i64 journalOff; /* Current write offset in the journal file */ + i64 journalHdr; /* Byte offset to previous journal header */ + sqlite3_backup *pBackup; /* Pointer to list of ongoing backup processes */ + PagerSavepoint *aSavepoint; /* Array of active savepoints */ + int nSavepoint; /* Number of elements in aSavepoint[] */ + char dbFileVers[16]; /* Changes whenever database file changes */ + /* + ** End of the routinely-changing class members + ***************************************************************************/ - /* At this point there may be either a RESERVED or EXCLUSIVE lock on the - ** database file. If there is already an EXCLUSIVE lock, the following - ** call is a no-op. - ** - ** Moving the lock from RESERVED to EXCLUSIVE actually involves going - ** through an intermediate state PENDING. A PENDING lock prevents new - ** readers from attaching to the database but is unsufficient for us to - ** write. The idea of a PENDING lock is to prevent new readers from - ** coming in while we wait for existing readers to clear. - ** - ** While the pager is in the RESERVED state, the original database file - ** is unchanged and we can rollback without having to playback the - ** journal into the original database file. Once we transition to - ** EXCLUSIVE, it means the database file has been changed and any rollback - ** will require a journal playback. - */ - assert( pPager->state>=PAGER_RESERVED ); - rc = pager_wait_on_lock(pPager, EXCLUSIVE_LOCK); + u16 nExtra; /* Add this many bytes to each in-memory page */ + i16 nReserve; /* Number of unused bytes at end of each page */ + u32 vfsFlags; /* Flags for sqlite3_vfs.xOpen() */ + u32 sectorSize; /* Assumed sector size during rollback */ + int pageSize; /* Number of bytes in a page */ + Pgno mxPgno; /* Maximum allowed size of the database */ + i64 journalSizeLimit; /* Size limit for persistent journal files */ + char *zFilename; /* Name of the database file */ + char *zJournal; /* Name of the journal file */ + int (*xBusyHandler)(void*); /* Function to call when busy */ + void *pBusyHandlerArg; /* Context argument for xBusyHandler */ + int aStat[3]; /* Total cache hits, misses and writes */ +#ifdef SQLITE_TEST + int nRead; /* Database pages read */ +#endif + void (*xReiniter)(DbPage*); /* Call this routine when reloading pages */ +#ifdef SQLITE_HAS_CODEC + void *(*xCodec)(void*,void*,Pgno,int); /* Routine for en/decoding data */ + void (*xCodecSizeChng)(void*,int,int); /* Notify of page size changes */ + void (*xCodecFree)(void*); /* Destructor for the codec */ + void *pCodec; /* First argument to xCodec... methods */ +#endif + char *pTmpSpace; /* Pager.pageSize bytes of space for tmp use */ + PCache *pPCache; /* Pointer to page cache object */ +#ifndef SQLITE_OMIT_WAL + Wal *pWal; /* Write-ahead log used by "journal_mode=wal" */ + char *zWal; /* File name for write-ahead log */ +#endif +}; - /* If the file is a temp-file has not yet been opened, open it now. It - ** is not possible for rc to be other than SQLITE_OK if this branch - ** is taken, as pager_wait_on_lock() is a no-op for temp-files. - */ - if( !isOpen(pPager->fd) ){ - assert( pPager->tempFile && rc==SQLITE_OK ); - rc = pagerOpentemp(pPager, pPager->fd, pPager->vfsFlags); - } +/* +** Indexes for use with Pager.aStat[]. The Pager.aStat[] array contains +** the values accessed by passing SQLITE_DBSTATUS_CACHE_HIT, CACHE_MISS +** or CACHE_WRITE to sqlite3_db_status(). +*/ +#define PAGER_STAT_HIT 0 +#define PAGER_STAT_MISS 1 +#define PAGER_STAT_WRITE 2 - while( rc==SQLITE_OK && pList ){ - Pgno pgno = pList->pgno; +/* +** The following global variables hold counters used for +** testing purposes only. These variables do not exist in +** a non-testing build. These variables are not thread-safe. +*/ +#ifdef SQLITE_TEST +SQLITE_API int sqlite3_pager_readdb_count = 0; /* Number of full pages read from DB */ +SQLITE_API int sqlite3_pager_writedb_count = 0; /* Number of full pages written to DB */ +SQLITE_API int sqlite3_pager_writej_count = 0; /* Number of pages written to journal */ +# define PAGER_INCR(v) v++ +#else +# define PAGER_INCR(v) +#endif - /* If there are dirty pages in the page cache with page numbers greater - ** than Pager.dbSize, this means sqlite3PagerTruncateImage() was called to - ** make the file smaller (presumably by auto-vacuum code). Do not write - ** any such pages to the file. - ** - ** Also, do not write out any page that has the PGHDR_DONT_WRITE flag - ** set (set by sqlite3PagerDontWrite()). - */ - if( pgno<=pPager->dbSize && 0==(pList->flags&PGHDR_DONT_WRITE) ){ - i64 offset = (pgno-1)*(i64)pPager->pageSize; /* Offset to write */ - char *pData; /* Data to write */ - /* Encode the database */ - CODEC2(pPager, pList->pData, pgno, 6, return SQLITE_NOMEM, pData); - /* Write out the page data. */ - rc = sqlite3OsWrite(pPager->fd, pData, pPager->pageSize, offset); +/* +** Journal files begin with the following magic string. The data +** was obtained from /dev/random. It is used only as a sanity check. +** +** Since version 2.8.0, the journal format contains additional sanity +** checking information. If the power fails while the journal is being +** written, semi-random garbage data might appear in the journal +** file after power is restored. If an attempt is then made +** to roll the journal back, the database could be corrupted. The additional +** sanity checking data is an attempt to discover the garbage in the +** journal and ignore it. +** +** The sanity checking information for the new journal format consists +** of a 32-bit checksum on each page of data. The checksum covers both +** the page number and the pPager->pageSize bytes of data for the page. +** This cksum is initialized to a 32-bit random value that appears in the +** journal file right after the header. The random initializer is important, +** because garbage data that appears at the end of a journal is likely +** data that was once in other files that have now been deleted. If the +** garbage data came from an obsolete journal file, the checksums might +** be correct. But by initializing the checksum to random value which +** is different for every journal, we minimize that risk. +*/ +static const unsigned char aJournalMagic[] = { + 0xd9, 0xd5, 0x05, 0xf9, 0x20, 0xa1, 0x63, 0xd7, +}; - /* If page 1 was just written, update Pager.dbFileVers to match - ** the value now stored in the database file. If writing this - ** page caused the database file to grow, update dbFileSize. - */ - if( pgno==1 ){ - memcpy(&pPager->dbFileVers, &pData[24], sizeof(pPager->dbFileVers)); - } - if( pgno>pPager->dbFileSize ){ - pPager->dbFileSize = pgno; - } +/* +** The size of the of each page record in the journal is given by +** the following macro. +*/ +#define JOURNAL_PG_SZ(pPager) ((pPager->pageSize) + 8) - /* Update any backup objects copying the contents of this pager. */ - sqlite3BackupUpdate(pPager->pBackup, pgno, (u8*)pList->pData); +/* +** The journal header size for this pager. This is usually the same +** size as a single disk sector. See also setSectorSize(). +*/ +#define JOURNAL_HDR_SZ(pPager) (pPager->sectorSize) - PAGERTRACE(("STORE %d page %d hash(%08x)\n", - PAGERID(pPager), pgno, pager_pagehash(pList))); - IOTRACE(("PGOUT %p %d\n", pPager, pgno)); - PAGER_INCR(sqlite3_pager_writedb_count); - PAGER_INCR(pPager->nWrite); - }else{ - PAGERTRACE(("NOSTORE %d page %d\n", PAGERID(pPager), pgno)); - } -#ifdef SQLITE_CHECK_PAGES - pList->pageHash = pager_pagehash(pList); +/* +** The macro MEMDB is true if we are dealing with an in-memory database. +** We do this as a macro so that if the SQLITE_OMIT_MEMORYDB macro is set, +** the value of MEMDB will be a constant and the compiler will optimize +** out code that would never execute. +*/ +#ifdef SQLITE_OMIT_MEMORYDB +# define MEMDB 0 +#else +# define MEMDB pPager->memDb #endif - pList = pList->pDirty; - } - return rc; -} +/* +** The maximum legal page number is (2^31 - 1). +*/ +#define PAGER_MAX_PGNO 2147483647 /* -** Append a record of the current state of page pPg to the sub-journal. -** It is the callers responsibility to use subjRequiresPage() to check -** that it is really required before calling this function. +** The argument to this macro is a file descriptor (type sqlite3_file*). +** Return 0 if it is not open, or non-zero (but not 1) if it is. ** -** If successful, set the bit corresponding to pPg->pgno in the bitvecs -** for all open savepoints before returning. +** This is so that expressions can be written as: ** -** This function returns SQLITE_OK if everything is successful, an IO -** error code if the attempt to write to the sub-journal fails, or -** SQLITE_NOMEM if a malloc fails while setting a bit in a savepoint -** bitvec. +** if( isOpen(pPager->jfd) ){ ... +** +** instead of +** +** if( pPager->jfd->pMethods ){ ... */ -static int subjournalPage(PgHdr *pPg){ - int rc = SQLITE_OK; - Pager *pPager = pPg->pPager; - if( isOpen(pPager->sjfd) ){ - void *pData = pPg->pData; - i64 offset = pPager->nSubRec*(4+pPager->pageSize); - char *pData2; +#define isOpen(pFd) ((pFd)->pMethods) - CODEC2(pPager, pData, pPg->pgno, 7, return SQLITE_NOMEM, pData2); - PAGERTRACE(("STMT-JOURNAL %d page %d\n", PAGERID(pPager), pPg->pgno)); - - assert( pageInJournal(pPg) || pPg->pgno>pPager->dbOrigSize ); - rc = write32bits(pPager->sjfd, offset, pPg->pgno); - if( rc==SQLITE_OK ){ - rc = sqlite3OsWrite(pPager->sjfd, pData2, pPager->pageSize, offset+4); - } - } - if( rc==SQLITE_OK ){ - pPager->nSubRec++; - assert( pPager->nSavepoint>0 ); - rc = addToSavepointBitvecs(pPager, pPg->pgno); - testcase( rc!=SQLITE_OK ); - } - return rc; +/* +** Return true if this pager uses a write-ahead log instead of the usual +** rollback journal. Otherwise false. +*/ +#ifndef SQLITE_OMIT_WAL +static int pagerUseWal(Pager *pPager){ + return (pPager->pWal!=0); } +#else +# define pagerUseWal(x) 0 +# define pagerRollbackWal(x) 0 +# define pagerWalFrames(v,w,x,y) 0 +# define pagerOpenWalIfPresent(z) SQLITE_OK +# define pagerBeginReadTransaction(z) SQLITE_OK +#endif - +#ifndef NDEBUG /* -** This function is called by the pcache layer when it has reached some -** soft memory limit. The first argument is a pointer to a Pager object -** (cast as a void*). The pager is always 'purgeable' (not an in-memory -** database). The second argument is a reference to a page that is -** currently dirty but has no outstanding references. The page -** is always associated with the Pager object passed as the first -** argument. +** Usage: ** -** The job of this function is to make pPg clean by writing its contents -** out to the database file, if possible. This may involve syncing the -** journal file. +** assert( assert_pager_state(pPager) ); ** -** If successful, sqlite3PcacheMakeClean() is called on the page and -** SQLITE_OK returned. If an IO error occurs while trying to make the -** page clean, the IO error code is returned. If the page cannot be -** made clean for some other reason, but no error occurs, then SQLITE_OK -** is returned by sqlite3PcacheMakeClean() is not called. +** This function runs many asserts to try to find inconsistencies in +** the internal state of the Pager object. */ -static int pagerStress(void *p, PgHdr *pPg){ - Pager *pPager = (Pager *)p; - int rc = SQLITE_OK; +static int assert_pager_state(Pager *p){ + Pager *pPager = p; - assert( pPg->pPager==pPager ); - assert( pPg->flags&PGHDR_DIRTY ); + /* State must be valid. */ + assert( p->eState==PAGER_OPEN + || p->eState==PAGER_READER + || p->eState==PAGER_WRITER_LOCKED + || p->eState==PAGER_WRITER_CACHEMOD + || p->eState==PAGER_WRITER_DBMOD + || p->eState==PAGER_WRITER_FINISHED + || p->eState==PAGER_ERROR + ); - /* The doNotSync flag is set by the sqlite3PagerWrite() function while it - ** is journalling a set of two or more database pages that are stored - ** on the same disk sector. Syncing the journal is not allowed while - ** this is happening as it is important that all members of such a - ** set of pages are synced to disk together. So, if the page this function - ** is trying to make clean will require a journal sync and the doNotSync - ** flag is set, return without doing anything. The pcache layer will - ** just have to go ahead and allocate a new page buffer instead of - ** reusing pPg. - ** - ** Similarly, if the pager has already entered the error state, do not - ** try to write the contents of pPg to disk. + /* Regardless of the current state, a temp-file connection always behaves + ** as if it has an exclusive lock on the database file. It never updates + ** the change-counter field, so the changeCountDone flag is always set. */ - if( pPager->errCode || (pPager->doNotSync && pPg->flags&PGHDR_NEED_SYNC) ){ - return SQLITE_OK; - } - - /* Sync the journal file if required. */ - if( pPg->flags&PGHDR_NEED_SYNC ){ - rc = syncJournal(pPager); - if( rc==SQLITE_OK && pPager->fullSync && - !(pPager->journalMode==PAGER_JOURNALMODE_MEMORY) && - !(sqlite3OsDeviceCharacteristics(pPager->fd)&SQLITE_IOCAP_SAFE_APPEND) - ){ - pPager->nRec = 0; - rc = writeJournalHdr(pPager); - } - } + assert( p->tempFile==0 || p->eLock==EXCLUSIVE_LOCK ); + assert( p->tempFile==0 || pPager->changeCountDone ); - /* If the page number of this page is larger than the current size of - ** the database image, it may need to be written to the sub-journal. - ** This is because the call to pager_write_pagelist() below will not - ** actually write data to the file in this case. - ** - ** Consider the following sequence of events: - ** - ** BEGIN; - ** - ** - ** SAVEPOINT sp; - ** - ** pagerStress(page X) - ** ROLLBACK TO sp; - ** - ** If (X>Y), then when pagerStress is called page X will not be written - ** out to the database file, but will be dropped from the cache. Then, - ** following the "ROLLBACK TO sp" statement, reading page X will read - ** data from the database file. This will be the copy of page X as it - ** was when the transaction started, not as it was when "SAVEPOINT sp" - ** was executed. - ** - ** The solution is to write the current data for page X into the - ** sub-journal file now (if it is not already there), so that it will - ** be restored to its current value when the "ROLLBACK TO sp" is - ** executed. + /* If the useJournal flag is clear, the journal-mode must be "OFF". + ** And if the journal-mode is "OFF", the journal file must not be open. */ - if( rc==SQLITE_OK && pPg->pgno>pPager->dbSize && subjRequiresPage(pPg) ){ - rc = subjournalPage(pPg); - } + assert( p->journalMode==PAGER_JOURNALMODE_OFF || p->useJournal ); + assert( p->journalMode!=PAGER_JOURNALMODE_OFF || !isOpen(p->jfd) ); - /* Write the contents of the page out to the database file. */ - if( rc==SQLITE_OK ){ - pPg->pDirty = 0; - rc = pager_write_pagelist(pPg); + /* Check that MEMDB implies noSync. And an in-memory journal. Since + ** this means an in-memory pager performs no IO at all, it cannot encounter + ** either SQLITE_IOERR or SQLITE_FULL during rollback or while finalizing + ** a journal file. (although the in-memory journal implementation may + ** return SQLITE_IOERR_NOMEM while the journal file is being written). It + ** is therefore not possible for an in-memory pager to enter the ERROR + ** state. + */ + if( MEMDB ){ + assert( p->noSync ); + assert( p->journalMode==PAGER_JOURNALMODE_OFF + || p->journalMode==PAGER_JOURNALMODE_MEMORY + ); + assert( p->eState!=PAGER_ERROR && p->eState!=PAGER_OPEN ); + assert( pagerUseWal(p)==0 ); } - /* Mark the page as clean. */ - if( rc==SQLITE_OK ){ - PAGERTRACE(("STRESS %d page %d\n", PAGERID(pPager), pPg->pgno)); - sqlite3PcacheMakeClean(pPg); - } + /* If changeCountDone is set, a RESERVED lock or greater must be held + ** on the file. + */ + assert( pPager->changeCountDone==0 || pPager->eLock>=RESERVED_LOCK ); + assert( p->eLock!=PENDING_LOCK ); - return pager_error(pPager, rc); -} + switch( p->eState ){ + case PAGER_OPEN: + assert( !MEMDB ); + assert( pPager->errCode==SQLITE_OK ); + assert( sqlite3PcacheRefCount(pPager->pPCache)==0 || pPager->tempFile ); + break; + case PAGER_READER: + assert( pPager->errCode==SQLITE_OK ); + assert( p->eLock!=UNKNOWN_LOCK ); + assert( p->eLock>=SHARED_LOCK ); + break; -/* -** Allocate and initialize a new Pager object and put a pointer to it -** in *ppPager. The pager should eventually be freed by passing it -** to sqlite3PagerClose(). -** -** The zFilename argument is the path to the database file to open. -** If zFilename is NULL then a randomly-named temporary file is created -** and used as the file to be cached. Temporary files are be deleted -** automatically when they are closed. If zFilename is ":memory:" then -** all information is held in cache. It is never written to disk. -** This can be used to implement an in-memory database. -** -** The nExtra parameter specifies the number of bytes of space allocated -** along with each page reference. This space is available to the user -** via the sqlite3PagerGetExtra() API. -** -** The flags argument is used to specify properties that affect the -** operation of the pager. It should be passed some bitwise combination -** of the PAGER_OMIT_JOURNAL and PAGER_NO_READLOCK flags. -** -** The vfsFlags parameter is a bitmask to pass to the flags parameter -** of the xOpen() method of the supplied VFS when opening files. -** -** If the pager object is allocated and the specified file opened -** successfully, SQLITE_OK is returned and *ppPager set to point to -** the new pager object. If an error occurs, *ppPager is set to NULL -** and error code returned. This function may return SQLITE_NOMEM -** (sqlite3Malloc() is used to allocate memory), SQLITE_CANTOPEN or -** various SQLITE_IO_XXX errors. -*/ -SQLITE_PRIVATE int sqlite3PagerOpen( - sqlite3_vfs *pVfs, /* The virtual file system to use */ - Pager **ppPager, /* OUT: Return the Pager structure here */ - const char *zFilename, /* Name of the database file to open */ - int nExtra, /* Extra bytes append to each in-memory page */ - int flags, /* flags controlling this file */ - int vfsFlags /* flags passed through to sqlite3_vfs.xOpen() */ -){ - u8 *pPtr; - Pager *pPager = 0; /* Pager object to allocate and return */ - int rc = SQLITE_OK; /* Return code */ - int tempFile = 0; /* True for temp files (incl. in-memory files) */ - int memDb = 0; /* True if this is an in-memory file */ - int readOnly = 0; /* True if this is a read-only file */ - int journalFileSize; /* Bytes to allocate for each journal fd */ - char *zPathname = 0; /* Full path to database file */ - int nPathname = 0; /* Number of bytes in zPathname */ - int useJournal = (flags & PAGER_OMIT_JOURNAL)==0; /* False to omit journal */ - int noReadlock = (flags & PAGER_NO_READLOCK)!=0; /* True to omit read-lock */ - int pcacheSize = sqlite3PcacheSize(); /* Bytes to allocate for PCache */ - u16 szPageDflt = SQLITE_DEFAULT_PAGE_SIZE; /* Default page size */ + case PAGER_WRITER_LOCKED: + assert( p->eLock!=UNKNOWN_LOCK ); + assert( pPager->errCode==SQLITE_OK ); + if( !pagerUseWal(pPager) ){ + assert( p->eLock>=RESERVED_LOCK ); + } + assert( pPager->dbSize==pPager->dbOrigSize ); + assert( pPager->dbOrigSize==pPager->dbFileSize ); + assert( pPager->dbOrigSize==pPager->dbHintSize ); + assert( pPager->setMaster==0 ); + break; - /* Figure out how much space is required for each journal file-handle - ** (there are two of them, the main journal and the sub-journal). This - ** is the maximum space required for an in-memory journal file handle - ** and a regular journal file-handle. Note that a "regular journal-handle" - ** may be a wrapper capable of caching the first portion of the journal - ** file in memory to implement the atomic-write optimization (see - ** source file journal.c). - */ - if( sqlite3JournalSize(pVfs)>sqlite3MemJournalSize() ){ - journalFileSize = ROUND8(sqlite3JournalSize(pVfs)); - }else{ - journalFileSize = ROUND8(sqlite3MemJournalSize()); - } + case PAGER_WRITER_CACHEMOD: + assert( p->eLock!=UNKNOWN_LOCK ); + assert( pPager->errCode==SQLITE_OK ); + if( !pagerUseWal(pPager) ){ + /* It is possible that if journal_mode=wal here that neither the + ** journal file nor the WAL file are open. This happens during + ** a rollback transaction that switches from journal_mode=off + ** to journal_mode=wal. + */ + assert( p->eLock>=RESERVED_LOCK ); + assert( isOpen(p->jfd) + || p->journalMode==PAGER_JOURNALMODE_OFF + || p->journalMode==PAGER_JOURNALMODE_WAL + ); + } + assert( pPager->dbOrigSize==pPager->dbFileSize ); + assert( pPager->dbOrigSize==pPager->dbHintSize ); + break; - /* Set the output variable to NULL in case an error occurs. */ - *ppPager = 0; + case PAGER_WRITER_DBMOD: + assert( p->eLock==EXCLUSIVE_LOCK ); + assert( pPager->errCode==SQLITE_OK ); + assert( !pagerUseWal(pPager) ); + assert( p->eLock>=EXCLUSIVE_LOCK ); + assert( isOpen(p->jfd) + || p->journalMode==PAGER_JOURNALMODE_OFF + || p->journalMode==PAGER_JOURNALMODE_WAL + ); + assert( pPager->dbOrigSize<=pPager->dbHintSize ); + break; - /* Compute and store the full pathname in an allocated buffer pointed - ** to by zPathname, length nPathname. Or, if this is a temporary file, - ** leave both nPathname and zPathname set to 0. - */ - if( zFilename && zFilename[0] ){ - nPathname = pVfs->mxPathname+1; - zPathname = sqlite3Malloc(nPathname*2); - if( zPathname==0 ){ - return SQLITE_NOMEM; - } -#ifndef SQLITE_OMIT_MEMORYDB - if( strcmp(zFilename,":memory:")==0 ){ - memDb = 1; - zPathname[0] = 0; - }else -#endif - { - zPathname[0] = 0; /* Make sure initialized even if FullPathname() fails */ - rc = sqlite3OsFullPathname(pVfs, zFilename, nPathname, zPathname); - } + case PAGER_WRITER_FINISHED: + assert( p->eLock==EXCLUSIVE_LOCK ); + assert( pPager->errCode==SQLITE_OK ); + assert( !pagerUseWal(pPager) ); + assert( isOpen(p->jfd) + || p->journalMode==PAGER_JOURNALMODE_OFF + || p->journalMode==PAGER_JOURNALMODE_WAL + ); + break; - nPathname = sqlite3Strlen30(zPathname); - if( rc==SQLITE_OK && nPathname+8>pVfs->mxPathname ){ - /* This branch is taken when the journal path required by - ** the database being opened will be more than pVfs->mxPathname - ** bytes in length. This means the database cannot be opened, - ** as it will not be possible to open the journal file or even - ** check for a hot-journal before reading. + case PAGER_ERROR: + /* There must be at least one outstanding reference to the pager if + ** in ERROR state. Otherwise the pager should have already dropped + ** back to OPEN state. */ - rc = SQLITE_CANTOPEN; - } - if( rc!=SQLITE_OK ){ - sqlite3_free(zPathname); - return rc; - } + assert( pPager->errCode!=SQLITE_OK ); + assert( sqlite3PcacheRefCount(pPager->pPCache)>0 ); + break; } - /* Allocate memory for the Pager structure, PCache object, the - ** three file descriptors, the database file name and the journal - ** file name. The layout in memory is as follows: - ** - ** Pager object (sizeof(Pager) bytes) - ** PCache object (sqlite3PcacheSize() bytes) - ** Database file handle (pVfs->szOsFile bytes) - ** Sub-journal file handle (journalFileSize bytes) - ** Main journal file handle (journalFileSize bytes) - ** Database file name (nPathname+1 bytes) - ** Journal file name (nPathname+8+1 bytes) - */ - pPtr = (u8 *)sqlite3MallocZero( - ROUND8(sizeof(*pPager)) + /* Pager structure */ - ROUND8(pcacheSize) + /* PCache object */ - ROUND8(pVfs->szOsFile) + /* The main db file */ - journalFileSize * 2 + /* The two journal files */ - nPathname + 1 + /* zFilename */ - nPathname + 8 + 1 /* zJournal */ + return 1; +} +#endif /* ifndef NDEBUG */ + +#ifdef SQLITE_DEBUG +/* +** Return a pointer to a human readable string in a static buffer +** containing the state of the Pager object passed as an argument. This +** is intended to be used within debuggers. For example, as an alternative +** to "print *pPager" in gdb: +** +** (gdb) printf "%s", print_pager_state(pPager) +*/ +static char *print_pager_state(Pager *p){ + static char zRet[1024]; + + sqlite3_snprintf(1024, zRet, + "Filename: %s\n" + "State: %s errCode=%d\n" + "Lock: %s\n" + "Locking mode: locking_mode=%s\n" + "Journal mode: journal_mode=%s\n" + "Backing store: tempFile=%d memDb=%d useJournal=%d\n" + "Journal: journalOff=%lld journalHdr=%lld\n" + "Size: dbsize=%d dbOrigSize=%d dbFileSize=%d\n" + , p->zFilename + , p->eState==PAGER_OPEN ? "OPEN" : + p->eState==PAGER_READER ? "READER" : + p->eState==PAGER_WRITER_LOCKED ? "WRITER_LOCKED" : + p->eState==PAGER_WRITER_CACHEMOD ? "WRITER_CACHEMOD" : + p->eState==PAGER_WRITER_DBMOD ? "WRITER_DBMOD" : + p->eState==PAGER_WRITER_FINISHED ? "WRITER_FINISHED" : + p->eState==PAGER_ERROR ? "ERROR" : "?error?" + , (int)p->errCode + , p->eLock==NO_LOCK ? "NO_LOCK" : + p->eLock==RESERVED_LOCK ? "RESERVED" : + p->eLock==EXCLUSIVE_LOCK ? "EXCLUSIVE" : + p->eLock==SHARED_LOCK ? "SHARED" : + p->eLock==UNKNOWN_LOCK ? "UNKNOWN" : "?error?" + , p->exclusiveMode ? "exclusive" : "normal" + , p->journalMode==PAGER_JOURNALMODE_MEMORY ? "memory" : + p->journalMode==PAGER_JOURNALMODE_OFF ? "off" : + p->journalMode==PAGER_JOURNALMODE_DELETE ? "delete" : + p->journalMode==PAGER_JOURNALMODE_PERSIST ? "persist" : + p->journalMode==PAGER_JOURNALMODE_TRUNCATE ? "truncate" : + p->journalMode==PAGER_JOURNALMODE_WAL ? "wal" : "?error?" + , (int)p->tempFile, (int)p->memDb, (int)p->useJournal + , p->journalOff, p->journalHdr + , (int)p->dbSize, (int)p->dbOrigSize, (int)p->dbFileSize ); - assert( EIGHT_BYTE_ALIGNMENT(SQLITE_INT_TO_PTR(journalFileSize)) ); - if( !pPtr ){ - sqlite3_free(zPathname); - return SQLITE_NOMEM; - } - pPager = (Pager*)(pPtr); - pPager->pPCache = (PCache*)(pPtr += ROUND8(sizeof(*pPager))); - pPager->fd = (sqlite3_file*)(pPtr += ROUND8(pcacheSize)); - pPager->sjfd = (sqlite3_file*)(pPtr += ROUND8(pVfs->szOsFile)); - pPager->jfd = (sqlite3_file*)(pPtr += journalFileSize); - pPager->zFilename = (char*)(pPtr += journalFileSize); - assert( EIGHT_BYTE_ALIGNMENT(pPager->jfd) ); - - /* Fill in the Pager.zFilename and Pager.zJournal buffers, if required. */ - if( zPathname ){ - pPager->zJournal = (char*)(pPtr += nPathname + 1); - memcpy(pPager->zFilename, zPathname, nPathname); - memcpy(pPager->zJournal, zPathname, nPathname); - memcpy(&pPager->zJournal[nPathname], "-journal", 8); - sqlite3_free(zPathname); - } - pPager->pVfs = pVfs; - pPager->vfsFlags = vfsFlags; - - /* Open the pager file. - */ - if( zFilename && zFilename[0] && !memDb ){ - int fout = 0; /* VFS flags returned by xOpen() */ - rc = sqlite3OsOpen(pVfs, pPager->zFilename, pPager->fd, vfsFlags, &fout); - readOnly = (fout&SQLITE_OPEN_READONLY); - /* If the file was successfully opened for read/write access, - ** choose a default page size in case we have to create the - ** database file. The default page size is the maximum of: - ** - ** + SQLITE_DEFAULT_PAGE_SIZE, - ** + The value returned by sqlite3OsSectorSize() - ** + The largest page size that can be written atomically. - */ - if( rc==SQLITE_OK && !readOnly ){ - setSectorSize(pPager); - assert(SQLITE_DEFAULT_PAGE_SIZE<=SQLITE_MAX_DEFAULT_PAGE_SIZE); - if( szPageDfltsectorSize ){ - if( pPager->sectorSize>SQLITE_MAX_DEFAULT_PAGE_SIZE ){ - szPageDflt = SQLITE_MAX_DEFAULT_PAGE_SIZE; - }else{ - szPageDflt = (u16)pPager->sectorSize; - } - } -#ifdef SQLITE_ENABLE_ATOMIC_WRITE - { - int iDc = sqlite3OsDeviceCharacteristics(pPager->fd); - int ii; - assert(SQLITE_IOCAP_ATOMIC512==(512>>8)); - assert(SQLITE_IOCAP_ATOMIC64K==(65536>>8)); - assert(SQLITE_MAX_DEFAULT_PAGE_SIZE<=65536); - for(ii=szPageDflt; ii<=SQLITE_MAX_DEFAULT_PAGE_SIZE; ii=ii*2){ - if( iDc&(SQLITE_IOCAP_ATOMIC|(ii>>8)) ){ - szPageDflt = ii; - } - } - } + return zRet; +} #endif + +/* +** Return true if it is necessary to write page *pPg into the sub-journal. +** A page needs to be written into the sub-journal if there exists one +** or more open savepoints for which: +** +** * The page-number is less than or equal to PagerSavepoint.nOrig, and +** * The bit corresponding to the page-number is not set in +** PagerSavepoint.pInSavepoint. +*/ +static int subjRequiresPage(PgHdr *pPg){ + Pgno pgno = pPg->pgno; + Pager *pPager = pPg->pPager; + int i; + for(i=0; inSavepoint; i++){ + PagerSavepoint *p = &pPager->aSavepoint[i]; + if( p->nOrig>=pgno && 0==sqlite3BitvecTest(p->pInSavepoint, pgno) ){ + return 1; } - }else{ - /* If a temporary file is requested, it is not opened immediately. - ** In this case we accept the default page size and delay actually - ** opening the file until the first call to OsWrite(). - ** - ** This branch is also run for an in-memory database. An in-memory - ** database is the same as a temp-file that is never written out to - ** disk and uses an in-memory rollback journal. - */ - tempFile = 1; - pPager->state = PAGER_EXCLUSIVE; - readOnly = (vfsFlags&SQLITE_OPEN_READONLY); } + return 0; +} - /* The following call to PagerSetPagesize() serves to set the value of - ** Pager.pageSize and to allocate the Pager.pTmpSpace buffer. - */ +/* +** Return true if the page is already in the journal file. +*/ +static int pageInJournal(PgHdr *pPg){ + return sqlite3BitvecTest(pPg->pPager->pInJournal, pPg->pgno); +} + +/* +** Read a 32-bit integer from the given file descriptor. Store the integer +** that is read in *pRes. Return SQLITE_OK if everything worked, or an +** error code is something goes wrong. +** +** All values are stored on disk as big-endian. +*/ +static int read32bits(sqlite3_file *fd, i64 offset, u32 *pRes){ + unsigned char ac[4]; + int rc = sqlite3OsRead(fd, ac, sizeof(ac), offset); if( rc==SQLITE_OK ){ - assert( pPager->memDb==0 ); - rc = sqlite3PagerSetPagesize(pPager, &szPageDflt, -1); - testcase( rc!=SQLITE_OK ); + *pRes = sqlite3Get4byte(ac); } + return rc; +} - /* If an error occurred in either of the blocks above, free the - ** Pager structure and close the file. - */ - if( rc!=SQLITE_OK ){ - assert( !pPager->pTmpSpace ); - sqlite3OsClose(pPager->fd); - sqlite3_free(pPager); - return rc; - } +/* +** Write a 32-bit integer into a string buffer in big-endian byte order. +*/ +#define put32bits(A,B) sqlite3Put4byte((u8*)A,B) - /* Initialize the PCache object. */ - assert( nExtra<1000 ); - nExtra = ROUND8(nExtra); - sqlite3PcacheOpen(szPageDflt, nExtra, !memDb, - !memDb?pagerStress:0, (void *)pPager, pPager->pPCache); - PAGERTRACE(("OPEN %d %s\n", FILEHANDLEID(pPager->fd), pPager->zFilename)); - IOTRACE(("OPEN %p %s\n", pPager, pPager->zFilename)) +/* +** Write a 32-bit integer into the given file descriptor. Return SQLITE_OK +** on success or an error code is something goes wrong. +*/ +static int write32bits(sqlite3_file *fd, i64 offset, u32 val){ + char ac[4]; + put32bits(ac, val); + return sqlite3OsWrite(fd, ac, 4, offset); +} - pPager->useJournal = (u8)useJournal; - pPager->noReadlock = (noReadlock && readOnly) ?1:0; - /* pPager->stmtOpen = 0; */ - /* pPager->stmtInUse = 0; */ - /* pPager->nRef = 0; */ - pPager->dbSizeValid = (u8)memDb; - /* pPager->stmtSize = 0; */ - /* pPager->stmtJSize = 0; */ - /* pPager->nPage = 0; */ - pPager->mxPgno = SQLITE_MAX_PAGE_COUNT; - /* pPager->state = PAGER_UNLOCK; */ - assert( pPager->state == (tempFile ? PAGER_EXCLUSIVE : PAGER_UNLOCK) ); - /* pPager->errMask = 0; */ - pPager->tempFile = (u8)tempFile; - assert( tempFile==PAGER_LOCKINGMODE_NORMAL - || tempFile==PAGER_LOCKINGMODE_EXCLUSIVE ); - assert( PAGER_LOCKINGMODE_EXCLUSIVE==1 ); - pPager->exclusiveMode = (u8)tempFile; - pPager->changeCountDone = pPager->tempFile; - pPager->memDb = (u8)memDb; - pPager->readOnly = (u8)readOnly; - /* pPager->needSync = 0; */ - pPager->noSync = (pPager->tempFile || !useJournal) ?1:0; - pPager->fullSync = pPager->noSync ?0:1; - pPager->sync_flags = SQLITE_SYNC_NORMAL; - /* pPager->pFirst = 0; */ - /* pPager->pFirstSynced = 0; */ - /* pPager->pLast = 0; */ - pPager->nExtra = (u16)nExtra; - pPager->journalSizeLimit = SQLITE_DEFAULT_JOURNAL_SIZE_LIMIT; - assert( isOpen(pPager->fd) || tempFile ); - setSectorSize(pPager); - if( memDb ){ - pPager->journalMode = PAGER_JOURNALMODE_MEMORY; +/* +** Unlock the database file to level eLock, which must be either NO_LOCK +** or SHARED_LOCK. Regardless of whether or not the call to xUnlock() +** succeeds, set the Pager.eLock variable to match the (attempted) new lock. +** +** Except, if Pager.eLock is set to UNKNOWN_LOCK when this function is +** called, do not modify it. See the comment above the #define of +** UNKNOWN_LOCK for an explanation of this. +*/ +static int pagerUnlockDb(Pager *pPager, int eLock){ + int rc = SQLITE_OK; + + assert( !pPager->exclusiveMode || pPager->eLock==eLock ); + assert( eLock==NO_LOCK || eLock==SHARED_LOCK ); + assert( eLock!=NO_LOCK || pagerUseWal(pPager)==0 ); + if( isOpen(pPager->fd) ){ + assert( pPager->eLock>=eLock ); + rc = sqlite3OsUnlock(pPager->fd, eLock); + if( pPager->eLock!=UNKNOWN_LOCK ){ + pPager->eLock = (u8)eLock; + } + IOTRACE(("UNLOCK %p %d\n", pPager, eLock)) } - /* pPager->xBusyHandler = 0; */ - /* pPager->pBusyHandlerArg = 0; */ - /* memset(pPager->aHash, 0, sizeof(pPager->aHash)); */ - *ppPager = pPager; - return SQLITE_OK; + return rc; } +/* +** Lock the database file to level eLock, which must be either SHARED_LOCK, +** RESERVED_LOCK or EXCLUSIVE_LOCK. If the caller is successful, set the +** Pager.eLock variable to the new locking state. +** +** Except, if Pager.eLock is set to UNKNOWN_LOCK when this function is +** called, do not modify it unless the new locking state is EXCLUSIVE_LOCK. +** See the comment above the #define of UNKNOWN_LOCK for an explanation +** of this. +*/ +static int pagerLockDb(Pager *pPager, int eLock){ + int rc = SQLITE_OK; + assert( eLock==SHARED_LOCK || eLock==RESERVED_LOCK || eLock==EXCLUSIVE_LOCK ); + if( pPager->eLockeLock==UNKNOWN_LOCK ){ + rc = sqlite3OsLock(pPager->fd, eLock); + if( rc==SQLITE_OK && (pPager->eLock!=UNKNOWN_LOCK||eLock==EXCLUSIVE_LOCK) ){ + pPager->eLock = (u8)eLock; + IOTRACE(("LOCK %p %d\n", pPager, eLock)) + } + } + return rc; +} /* -** This function is called after transitioning from PAGER_UNLOCK to -** PAGER_SHARED state. It tests if there is a hot journal present in -** the file-system for the given pager. A hot journal is one that -** needs to be played back. According to this function, a hot-journal -** file exists if the following criteria are met: -** -** * The journal file exists in the file system, and -** * No process holds a RESERVED or greater lock on the database file, and -** * The database file itself is greater than 0 bytes in size, and -** * The first byte of the journal file exists and is not 0x00. +** This function determines whether or not the atomic-write optimization +** can be used with this pager. The optimization can be used if: ** -** If the current size of the database file is 0 but a journal file -** exists, that is probably an old journal left over from a prior -** database with the same name. In this case the journal file is -** just deleted using OsDelete, *pExists is set to 0 and SQLITE_OK -** is returned. +** (a) the value returned by OsDeviceCharacteristics() indicates that +** a database page may be written atomically, and +** (b) the value returned by OsSectorSize() is less than or equal +** to the page size. ** -** This routine does not check if there is a master journal filename -** at the end of the file. If there is, and that master journal file -** does not exist, then the journal file is not really hot. In this -** case this routine will return a false-positive. The pager_playback() -** routine will discover that the journal file is not really hot and -** will not roll it back. +** The optimization is also always enabled for temporary files. It is +** an error to call this function if pPager is opened on an in-memory +** database. ** -** If a hot-journal file is found to exist, *pExists is set to 1 and -** SQLITE_OK returned. If no hot-journal file is present, *pExists is -** set to 0 and SQLITE_OK returned. If an IO error occurs while trying -** to determine whether or not a hot-journal file exists, the IO error -** code is returned and the value of *pExists is undefined. +** If the optimization cannot be used, 0 is returned. If it can be used, +** then the value returned is the size of the journal file when it +** contains rollback data for exactly one page. */ -static int hasHotJournal(Pager *pPager, int *pExists){ - sqlite3_vfs * const pVfs = pPager->pVfs; - int rc; /* Return code */ - int exists; /* True if a journal file is present */ - - assert( pPager!=0 ); - assert( pPager->useJournal ); - assert( isOpen(pPager->fd) ); - assert( !isOpen(pPager->jfd) ); - - *pExists = 0; - rc = sqlite3OsAccess(pVfs, pPager->zJournal, SQLITE_ACCESS_EXISTS, &exists); - if( rc==SQLITE_OK && exists ){ - int locked; /* True if some process holds a RESERVED lock */ +#ifdef SQLITE_ENABLE_ATOMIC_WRITE +static int jrnlBufferSize(Pager *pPager){ + assert( !MEMDB ); + if( !pPager->tempFile ){ + int dc; /* Device characteristics */ + int nSector; /* Sector size */ + int szPage; /* Page size */ - /* Race condition here: Another process might have been holding the - ** the RESERVED lock and have a journal open at the sqlite3OsAccess() - ** call above, but then delete the journal and drop the lock before - ** we get to the following sqlite3OsCheckReservedLock() call. If that - ** is the case, this routine might think there is a hot journal when - ** in fact there is none. This results in a false-positive which will - ** be dealt with by the playback routine. Ticket #3883. - */ - rc = sqlite3OsCheckReservedLock(pPager->fd, &locked); - if( rc==SQLITE_OK && !locked ){ - int nPage; + assert( isOpen(pPager->fd) ); + dc = sqlite3OsDeviceCharacteristics(pPager->fd); + nSector = pPager->sectorSize; + szPage = pPager->pageSize; - /* Check the size of the database file. If it consists of 0 pages, - ** then delete the journal file. See the header comment above for - ** the reasoning here. Delete the obsolete journal file under - ** a RESERVED lock to avoid race conditions and to avoid violating - ** [H33020]. - */ - rc = sqlite3PagerPagecount(pPager, &nPage); - if( rc==SQLITE_OK ){ - if( nPage==0 ){ - sqlite3BeginBenignMalloc(); - if( pPager->state>=PAGER_RESERVED - || sqlite3OsLock(pPager->fd, RESERVED_LOCK)==SQLITE_OK ){ - sqlite3OsDelete(pVfs, pPager->zJournal, 0); - assert( pPager->state>=PAGER_SHARED ); - if( pPager->state==PAGER_SHARED ){ - sqlite3OsUnlock(pPager->fd, SHARED_LOCK); - } - } - sqlite3EndBenignMalloc(); - }else{ - /* The journal file exists and no other connection has a reserved - ** or greater lock on the database file. Now check that there is - ** at least one non-zero bytes at the start of the journal file. - ** If there is, then we consider this journal to be hot. If not, - ** it can be ignored. - */ - int f = SQLITE_OPEN_READONLY|SQLITE_OPEN_MAIN_JOURNAL; - rc = sqlite3OsOpen(pVfs, pPager->zJournal, pPager->jfd, f, &f); - if( rc==SQLITE_OK ){ - u8 first = 0; - rc = sqlite3OsRead(pPager->jfd, (void *)&first, 1, 0); - if( rc==SQLITE_IOERR_SHORT_READ ){ - rc = SQLITE_OK; - } - sqlite3OsClose(pPager->jfd); - *pExists = (first!=0); - }else if( rc==SQLITE_CANTOPEN ){ - /* If we cannot open the rollback journal file in order to see if - ** its has a zero header, that might be due to an I/O error, or - ** it might be due to the race condition described above and in - ** ticket #3883. Either way, assume that the journal is hot. - ** This might be a false positive. But if it is, then the - ** automatic journal playback and recovery mechanism will deal - ** with it under an EXCLUSIVE lock where we do not need to - ** worry so much with race conditions. - */ - *pExists = 1; - rc = SQLITE_OK; - } - } - } + assert(SQLITE_IOCAP_ATOMIC512==(512>>8)); + assert(SQLITE_IOCAP_ATOMIC64K==(65536>>8)); + if( 0==(dc&(SQLITE_IOCAP_ATOMIC|(szPage>>8)) || nSector>szPage) ){ + return 0; } } - return rc; + return JOURNAL_HDR_SZ(pPager) + JOURNAL_PG_SZ(pPager); } +#endif /* -** Read the content for page pPg out of the database file and into -** pPg->pData. A shared lock or greater must be held on the database -** file before this function is called. -** -** If page 1 is read, then the value of Pager.dbFileVers[] is set to -** the value read from the database file. -** -** If an IO error occurs, then the IO error is returned to the caller. -** Otherwise, SQLITE_OK is returned. +** If SQLITE_CHECK_PAGES is defined then we do some sanity checking +** on the cache using a hash function. This is used for testing +** and debugging only. */ -static int readDbPage(PgHdr *pPg){ - Pager *pPager = pPg->pPager; /* Pager object associated with page pPg */ - Pgno pgno = pPg->pgno; /* Page number to read */ - int rc; /* Return code */ - i64 iOffset; /* Byte offset of file to read from */ - - assert( pPager->state>=PAGER_SHARED && !MEMDB ); - - if( !isOpen(pPager->fd) ){ - assert( pPager->tempFile ); - memset(pPg->pData, 0, pPager->pageSize); - return SQLITE_OK; - } - iOffset = (pgno-1)*(i64)pPager->pageSize; - rc = sqlite3OsRead(pPager->fd, pPg->pData, pPager->pageSize, iOffset); - if( rc==SQLITE_IOERR_SHORT_READ ){ - rc = SQLITE_OK; - } - if( pgno==1 ){ - u8 *dbFileVers = &((u8*)pPg->pData)[24]; - memcpy(&pPager->dbFileVers, dbFileVers, sizeof(pPager->dbFileVers)); +#ifdef SQLITE_CHECK_PAGES +/* +** Return a 32-bit hash of the page data for pPage. +*/ +static u32 pager_datahash(int nByte, unsigned char *pData){ + u32 hash = 0; + int i; + for(i=0; ipData, pgno, 3, rc = SQLITE_NOMEM); - - PAGER_INCR(sqlite3_pager_readdb_count); - PAGER_INCR(pPager->nRead); - IOTRACE(("PGIN %p %d\n", pPager, pgno)); - PAGERTRACE(("FETCH %d page %d hash(%08x)\n", - PAGERID(pPager), pgno, pager_pagehash(pPg))); + return hash; +} +static u32 pager_pagehash(PgHdr *pPage){ + return pager_datahash(pPage->pPager->pageSize, (unsigned char *)pPage->pData); +} +static void pager_set_pagehash(PgHdr *pPage){ + pPage->pageHash = pager_pagehash(pPage); +} - return rc; +/* +** The CHECK_PAGE macro takes a PgHdr* as an argument. If SQLITE_CHECK_PAGES +** is defined, and NDEBUG is not defined, an assert() statement checks +** that the page is either dirty or still matches the calculated page-hash. +*/ +#define CHECK_PAGE(x) checkPage(x) +static void checkPage(PgHdr *pPg){ + Pager *pPager = pPg->pPager; + assert( pPager->eState!=PAGER_ERROR ); + assert( (pPg->flags&PGHDR_DIRTY) || pPg->pageHash==pager_pagehash(pPg) ); } +#else +#define pager_datahash(X,Y) 0 +#define pager_pagehash(X) 0 +#define pager_set_pagehash(X) +#define CHECK_PAGE(x) +#endif /* SQLITE_CHECK_PAGES */ + /* -** This function is called whenever the upper layer requests a database -** page is requested, before the cache is checked for a suitable page -** or any data is read from the database. It performs the following -** two functions: +** When this is called the journal file for pager pPager must be open. +** This function attempts to read a master journal file name from the +** end of the file and, if successful, copies it into memory supplied +** by the caller. See comments above writeMasterJournal() for the format +** used to store a master journal file name at the end of a journal file. ** -** 1) If the pager is currently in PAGER_UNLOCK state (no lock held -** on the database file), then an attempt is made to obtain a -** SHARED lock on the database file. Immediately after obtaining -** the SHARED lock, the file-system is checked for a hot-journal, -** which is played back if present. Following any hot-journal -** rollback, the contents of the cache are validated by checking -** the 'change-counter' field of the database file header and -** discarded if they are found to be invalid. +** zMaster must point to a buffer of at least nMaster bytes allocated by +** the caller. This should be sqlite3_vfs.mxPathname+1 (to ensure there is +** enough space to write the master journal name). If the master journal +** name in the journal is longer than nMaster bytes (including a +** nul-terminator), then this is handled as if no master journal name +** were present in the journal. ** -** 2) If the pager is running in exclusive-mode, and there are currently -** no outstanding references to any pages, and is in the error state, -** then an attempt is made to clear the error state by discarding -** the contents of the page cache and rolling back any open journal -** file. +** If a master journal file name is present at the end of the journal +** file, then it is copied into the buffer pointed to by zMaster. A +** nul-terminator byte is appended to the buffer following the master +** journal file name. ** -** If the operation described by (2) above is not attempted, and if the -** pager is in an error state other than SQLITE_FULL when this is called, -** the error state error code is returned. It is permitted to read the -** database when in SQLITE_FULL error state. +** If it is determined that no master journal file name is present +** zMaster[0] is set to 0 and SQLITE_OK returned. ** -** Otherwise, if everything is successful, SQLITE_OK is returned. If an -** IO error occurs while locking the database, checking for a hot-journal -** file or rolling back a journal file, the IO error code is returned. +** If an error occurs while reading from the journal file, an SQLite +** error code is returned. */ -static int pagerSharedLock(Pager *pPager){ - int rc = SQLITE_OK; /* Return code */ - int isErrorReset = 0; /* True if recovering from error state */ +static int readMasterJournal(sqlite3_file *pJrnl, char *zMaster, u32 nMaster){ + int rc; /* Return code */ + u32 len; /* Length in bytes of master journal name */ + i64 szJ; /* Total size in bytes of journal file pJrnl */ + u32 cksum; /* MJ checksum value read from journal */ + u32 u; /* Unsigned loop counter */ + unsigned char aMagic[8]; /* A buffer to hold the magic header */ + zMaster[0] = '\0'; - /* If this database has no outstanding page references and is in an - ** error-state, this is a chance to clear the error. Discard the - ** contents of the pager-cache and rollback any hot journal in the - ** file-system. - */ - if( !MEMDB && sqlite3PcacheRefCount(pPager->pPCache)==0 && pPager->errCode ){ - if( isOpen(pPager->jfd) || pPager->zJournal ){ - isErrorReset = 1; - } - pPager->errCode = SQLITE_OK; - pager_reset(pPager); + if( SQLITE_OK!=(rc = sqlite3OsFileSize(pJrnl, &szJ)) + || szJ<16 + || SQLITE_OK!=(rc = read32bits(pJrnl, szJ-16, &len)) + || len>=nMaster + || SQLITE_OK!=(rc = read32bits(pJrnl, szJ-12, &cksum)) + || SQLITE_OK!=(rc = sqlite3OsRead(pJrnl, aMagic, 8, szJ-8)) + || memcmp(aMagic, aJournalMagic, 8) + || SQLITE_OK!=(rc = sqlite3OsRead(pJrnl, zMaster, len, szJ-16-len)) + ){ + return rc; } - /* If the pager is still in an error state, do not proceed. The error - ** state will be cleared at some point in the future when all page - ** references are dropped and the cache can be discarded. - */ - if( pPager->errCode && pPager->errCode!=SQLITE_FULL ){ - return pPager->errCode; + /* See if the checksum matches the master journal name */ + for(u=0; ustate==PAGER_UNLOCK || isErrorReset ){ - sqlite3_vfs * const pVfs = pPager->pVfs; - int isHotJournal = 0; - assert( !MEMDB ); - assert( sqlite3PcacheRefCount(pPager->pPCache)==0 ); - if( !pPager->noReadlock ){ - rc = pager_wait_on_lock(pPager, SHARED_LOCK); - if( rc!=SQLITE_OK ){ - assert( pPager->state==PAGER_UNLOCK ); - return pager_error(pPager, rc); - } - }else if( pPager->state==PAGER_UNLOCK ){ - pPager->state = PAGER_SHARED; - } - assert( pPager->state>=SHARED_LOCK ); - - /* If a journal file exists, and there is no RESERVED lock on the - ** database file, then it either needs to be played back or deleted. + if( cksum ){ + /* If the checksum doesn't add up, then one or more of the disk sectors + ** containing the master journal filename is corrupted. This means + ** definitely roll back, so just return SQLITE_OK and report a (nul) + ** master-journal filename. */ - if( !isErrorReset ){ - rc = hasHotJournal(pPager, &isHotJournal); - if( rc!=SQLITE_OK ){ - goto failed; - } - } - if( isErrorReset || isHotJournal ){ - /* Get an EXCLUSIVE lock on the database file. At this point it is - ** important that a RESERVED lock is not obtained on the way to the - ** EXCLUSIVE lock. If it were, another process might open the - ** database file, detect the RESERVED lock, and conclude that the - ** database is safe to read while this process is still rolling the - ** hot-journal back. - ** - ** Because the intermediate RESERVED lock is not requested, any - ** other process attempting to access the database file will get to - ** this point in the code and fail to obtain its own EXCLUSIVE lock - ** on the database file. - */ - if( pPager->statefd, EXCLUSIVE_LOCK); - if( rc!=SQLITE_OK ){ - rc = pager_error(pPager, rc); - goto failed; - } - pPager->state = PAGER_EXCLUSIVE; - } - - /* Open the journal for read/write access. This is because in - ** exclusive-access mode the file descriptor will be kept open and - ** possibly used for a transaction later on. On some systems, the - ** OsTruncate() call used in exclusive-access mode also requires - ** a read/write file handle. - */ - if( !isOpen(pPager->jfd) ){ - int res; - rc = sqlite3OsAccess(pVfs,pPager->zJournal,SQLITE_ACCESS_EXISTS,&res); - if( rc==SQLITE_OK ){ - if( res ){ - int fout = 0; - int f = SQLITE_OPEN_READWRITE|SQLITE_OPEN_MAIN_JOURNAL; - assert( !pPager->tempFile ); - rc = sqlite3OsOpen(pVfs, pPager->zJournal, pPager->jfd, f, &fout); - assert( rc!=SQLITE_OK || isOpen(pPager->jfd) ); - if( rc==SQLITE_OK && fout&SQLITE_OPEN_READONLY ){ - rc = SQLITE_CANTOPEN; - sqlite3OsClose(pPager->jfd); - } - }else{ - /* If the journal does not exist, it usually means that some - ** other connection managed to get in and roll it back before - ** this connection obtained the exclusive lock above. Or, it - ** may mean that the pager was in the error-state when this - ** function was called and the journal file does not exist. */ - rc = pager_end_transaction(pPager, 0); - } - } - } - if( rc!=SQLITE_OK ){ - goto failed; - } - - /* TODO: Why are these cleared here? Is it necessary? */ - pPager->journalStarted = 0; - pPager->journalOff = 0; - pPager->setMaster = 0; - pPager->journalHdr = 0; - - /* Playback and delete the journal. Drop the database write - ** lock and reacquire the read lock. Purge the cache before - ** playing back the hot-journal so that we don't end up with - ** an inconsistent cache. - */ - if( isOpen(pPager->jfd) ){ - rc = pager_playback(pPager, 1); - if( rc!=SQLITE_OK ){ - rc = pager_error(pPager, rc); - goto failed; - } - } - assert( (pPager->state==PAGER_SHARED) - || (pPager->exclusiveMode && pPager->state>PAGER_SHARED) - ); - } - - if( pPager->pBackup || sqlite3PcachePagecount(pPager->pPCache)>0 ){ - /* The shared-lock has just been acquired on the database file - ** and there are already pages in the cache (from a previous - ** read or write transaction). Check to see if the database - ** has been modified. If the database has changed, flush the - ** cache. - ** - ** Database changes is detected by looking at 15 bytes beginning - ** at offset 24 into the file. The first 4 of these 16 bytes are - ** a 32-bit counter that is incremented with each change. The - ** other bytes change randomly with each file change when - ** a codec is in use. - ** - ** There is a vanishingly small chance that a change will not be - ** detected. The chance of an undetected change is so small that - ** it can be neglected. - */ - char dbFileVers[sizeof(pPager->dbFileVers)]; - sqlite3PagerPagecount(pPager, 0); - - if( pPager->errCode ){ - rc = pPager->errCode; - goto failed; - } - - assert( pPager->dbSizeValid ); - if( pPager->dbSize>0 ){ - IOTRACE(("CKVERS %p %d\n", pPager, sizeof(dbFileVers))); - rc = sqlite3OsRead(pPager->fd, &dbFileVers, sizeof(dbFileVers), 24); - if( rc!=SQLITE_OK ){ - goto failed; - } - }else{ - memset(dbFileVers, 0, sizeof(dbFileVers)); - } - - if( memcmp(pPager->dbFileVers, dbFileVers, sizeof(dbFileVers))!=0 ){ - pager_reset(pPager); - } - } - assert( pPager->exclusiveMode || pPager->state==PAGER_SHARED ); - } - - failed: - if( rc!=SQLITE_OK ){ - /* pager_unlock() is a no-op for exclusive mode and in-memory databases. */ - pager_unlock(pPager); + len = 0; } - return rc; + zMaster[len] = '\0'; + + return SQLITE_OK; } /* -** If the reference count has reached zero, rollback any active -** transaction and unlock the pager. +** Return the offset of the sector boundary at or immediately +** following the value in pPager->journalOff, assuming a sector +** size of pPager->sectorSize bytes. ** -** Except, in locking_mode=EXCLUSIVE when there is nothing to in -** the rollback journal, the unlock is not performed and there is -** nothing to rollback, so this routine is a no-op. -*/ -static void pagerUnlockIfUnused(Pager *pPager){ - if( (sqlite3PcacheRefCount(pPager->pPCache)==0) - && (!pPager->exclusiveMode || pPager->journalOff>0) - ){ - pagerUnlockAndRollback(pPager); - } -} - -/* -** Drop a page from the cache using sqlite3PcacheDrop(). +** i.e for a sector size of 512: ** -** If this means there are now no pages with references to them, a rollback -** occurs and the lock on the database is removed. +** Pager.journalOff Return value +** --------------------------------------- +** 0 0 +** 512 512 +** 100 512 +** 2000 2048 +** */ -static void pagerDropPage(DbPage *pPg){ - Pager *pPager = pPg->pPager; - sqlite3PcacheDrop(pPg); - pagerUnlockIfUnused(pPager); +static i64 journalHdrOffset(Pager *pPager){ + i64 offset = 0; + i64 c = pPager->journalOff; + if( c ){ + offset = ((c-1)/JOURNAL_HDR_SZ(pPager) + 1) * JOURNAL_HDR_SZ(pPager); + } + assert( offset%JOURNAL_HDR_SZ(pPager)==0 ); + assert( offset>=c ); + assert( (offset-c)jfd) ); + if( pPager->journalOff ){ + const i64 iLimit = pPager->journalSizeLimit; /* Local cache of jsl */ - assert( assert_pager_state(pPager) ); - assert( pPager->state==PAGER_UNLOCK - || sqlite3PcacheRefCount(pPager->pPCache)>0 - || pgno==1 - ); + IOTRACE(("JZEROHDR %p\n", pPager)) + if( doTruncate || iLimit==0 ){ + rc = sqlite3OsTruncate(pPager->jfd, 0); + }else{ + static const char zeroHdr[28] = {0}; + rc = sqlite3OsWrite(pPager->jfd, zeroHdr, sizeof(zeroHdr), 0); + } + if( rc==SQLITE_OK && !pPager->noSync ){ + rc = sqlite3OsSync(pPager->jfd, SQLITE_SYNC_DATAONLY|pPager->syncFlags); + } - /* The maximum page number is 2^31. Return SQLITE_CORRUPT if a page - ** number greater than this, or zero, is requested. - */ - if( pgno>PAGER_MAX_PGNO || pgno==0 || pgno==PAGER_MJ_PGNO(pPager) ){ - return SQLITE_CORRUPT_BKPT; + /* At this point the transaction is committed but the write lock + ** is still held on the file. If there is a size limit configured for + ** the persistent journal and the journal file currently consumes more + ** space than that limit allows for, truncate it now. There is no need + ** to sync the file following this operation. + */ + if( rc==SQLITE_OK && iLimit>0 ){ + i64 sz; + rc = sqlite3OsFileSize(pPager->jfd, &sz); + if( rc==SQLITE_OK && sz>iLimit ){ + rc = sqlite3OsTruncate(pPager->jfd, iLimit); + } + } } + return rc; +} - /* Make sure we have not hit any critical errors. - */ - assert( pPager!=0 ); - *ppPage = 0; +/* +** The journal file must be open when this routine is called. A journal +** header (JOURNAL_HDR_SZ bytes) is written into the journal file at the +** current location. +** +** The format for the journal header is as follows: +** - 8 bytes: Magic identifying journal format. +** - 4 bytes: Number of records in journal, or -1 no-sync mode is on. +** - 4 bytes: Random number used for page hash. +** - 4 bytes: Initial database page count. +** - 4 bytes: Sector size used by the process that wrote this journal. +** - 4 bytes: Database page size. +** +** Followed by (JOURNAL_HDR_SZ - 28) bytes of unused space. +*/ +static int writeJournalHdr(Pager *pPager){ + int rc = SQLITE_OK; /* Return code */ + char *zHeader = pPager->pTmpSpace; /* Temporary space used to build header */ + u32 nHeader = (u32)pPager->pageSize;/* Size of buffer pointed to by zHeader */ + u32 nWrite; /* Bytes of header sector written */ + int ii; /* Loop counter */ - /* If this is the first page accessed, then get a SHARED lock - ** on the database file. pagerSharedLock() is a no-op if - ** a database lock is already held. - */ - rc = pagerSharedLock(pPager); - if( rc!=SQLITE_OK ){ - return rc; - } - assert( pPager->state!=PAGER_UNLOCK ); + assert( isOpen(pPager->jfd) ); /* Journal file must be open. */ - rc = sqlite3PcacheFetch(pPager->pPCache, pgno, 1, &pPg); - if( rc!=SQLITE_OK ){ - pagerUnlockIfUnused(pPager); - return rc; + if( nHeader>JOURNAL_HDR_SZ(pPager) ){ + nHeader = JOURNAL_HDR_SZ(pPager); } - assert( pPg->pgno==pgno ); - assert( pPg->pPager==pPager || pPg->pPager==0 ); - if( pPg->pPager==0 ){ - /* The pager cache has created a new page. Its content needs to - ** be initialized. - */ - int nMax; - PAGER_INCR(pPager->nMiss); - pPg->pPager = pPager; - rc = sqlite3PagerPagecount(pPager, &nMax); - if( rc!=SQLITE_OK ){ - sqlite3PagerUnref(pPg); - return rc; + /* If there are active savepoints and any of them were created + ** since the most recent journal header was written, update the + ** PagerSavepoint.iHdrOffset fields now. + */ + for(ii=0; iinSavepoint; ii++){ + if( pPager->aSavepoint[ii].iHdrOffset==0 ){ + pPager->aSavepoint[ii].iHdrOffset = pPager->journalOff; } + } - if( nMax<(int)pgno || MEMDB || noContent ){ - if( pgno>pPager->mxPgno ){ - sqlite3PagerUnref(pPg); - return SQLITE_FULL; - } - if( noContent ){ - /* Failure to set the bits in the InJournal bit-vectors is benign. - ** It merely means that we might do some extra work to journal a - ** page that does not need to be journaled. Nevertheless, be sure - ** to test the case where a malloc error occurs while trying to set - ** a bit in a bit vector. - */ - sqlite3BeginBenignMalloc(); - if( pgno<=pPager->dbOrigSize ){ - TESTONLY( rc = ) sqlite3BitvecSet(pPager->pInJournal, pgno); - testcase( rc==SQLITE_NOMEM ); - } - TESTONLY( rc = ) addToSavepointBitvecs(pPager, pgno); - testcase( rc==SQLITE_NOMEM ); - sqlite3EndBenignMalloc(); - }else{ - memset(pPg->pData, 0, pPager->pageSize); - } - IOTRACE(("ZERO %p %d\n", pPager, pgno)); - }else{ - assert( pPg->pPager==pPager ); - rc = readDbPage(pPg); - if( rc!=SQLITE_OK ){ - pagerDropPage(pPg); - return rc; - } - } -#ifdef SQLITE_CHECK_PAGES - pPg->pageHash = pager_pagehash(pPg); -#endif + pPager->journalHdr = pPager->journalOff = journalHdrOffset(pPager); + + /* + ** Write the nRec Field - the number of page records that follow this + ** journal header. Normally, zero is written to this value at this time. + ** After the records are added to the journal (and the journal synced, + ** if in full-sync mode), the zero is overwritten with the true number + ** of records (see syncJournal()). + ** + ** A faster alternative is to write 0xFFFFFFFF to the nRec field. When + ** reading the journal this value tells SQLite to assume that the + ** rest of the journal file contains valid page records. This assumption + ** is dangerous, as if a failure occurred whilst writing to the journal + ** file it may contain some garbage data. There are two scenarios + ** where this risk can be ignored: + ** + ** * When the pager is in no-sync mode. Corruption can follow a + ** power failure in this case anyway. + ** + ** * When the SQLITE_IOCAP_SAFE_APPEND flag is set. This guarantees + ** that garbage data is never appended to the journal file. + */ + assert( isOpen(pPager->fd) || pPager->noSync ); + if( pPager->noSync || (pPager->journalMode==PAGER_JOURNALMODE_MEMORY) + || (sqlite3OsDeviceCharacteristics(pPager->fd)&SQLITE_IOCAP_SAFE_APPEND) + ){ + memcpy(zHeader, aJournalMagic, sizeof(aJournalMagic)); + put32bits(&zHeader[sizeof(aJournalMagic)], 0xffffffff); }else{ - /* The requested page is in the page cache. */ - PAGER_INCR(pPager->nHit); + memset(zHeader, 0, sizeof(aJournalMagic)+4); } - *ppPage = pPg; - return SQLITE_OK; -} + /* The random check-hash initialiser */ + sqlite3_randomness(sizeof(pPager->cksumInit), &pPager->cksumInit); + put32bits(&zHeader[sizeof(aJournalMagic)+4], pPager->cksumInit); + /* The initial database size */ + put32bits(&zHeader[sizeof(aJournalMagic)+8], pPager->dbOrigSize); + /* The assumed sector size for this process */ + put32bits(&zHeader[sizeof(aJournalMagic)+12], pPager->sectorSize); -/* -** Acquire a page if it is already in the in-memory cache. Do -** not read the page from disk. Return a pointer to the page, -** or 0 if the page is not in cache. Also, return 0 if the -** pager is in PAGER_UNLOCK state when this function is called, -** or if the pager is in an error state other than SQLITE_FULL. -** -** See also sqlite3PagerGet(). The difference between this routine -** and sqlite3PagerGet() is that _get() will go to the disk and read -** in the page if the page is not already in cache. This routine -** returns NULL if the page is not in cache or if a disk I/O error -** has ever happened. -*/ -SQLITE_PRIVATE DbPage *sqlite3PagerLookup(Pager *pPager, Pgno pgno){ - PgHdr *pPg = 0; - assert( pPager!=0 ); - assert( pgno!=0 ); + /* The page size */ + put32bits(&zHeader[sizeof(aJournalMagic)+16], pPager->pageSize); - if( (pPager->state!=PAGER_UNLOCK) - && (pPager->errCode==SQLITE_OK || pPager->errCode==SQLITE_FULL) - ){ - sqlite3PcacheFetch(pPager->pPCache, pgno, 0, &pPg); + /* Initializing the tail of the buffer is not necessary. Everything + ** works find if the following memset() is omitted. But initializing + ** the memory prevents valgrind from complaining, so we are willing to + ** take the performance hit. + */ + memset(&zHeader[sizeof(aJournalMagic)+20], 0, + nHeader-(sizeof(aJournalMagic)+20)); + + /* In theory, it is only necessary to write the 28 bytes that the + ** journal header consumes to the journal file here. Then increment the + ** Pager.journalOff variable by JOURNAL_HDR_SZ so that the next + ** record is written to the following sector (leaving a gap in the file + ** that will be implicitly filled in by the OS). + ** + ** However it has been discovered that on some systems this pattern can + ** be significantly slower than contiguously writing data to the file, + ** even if that means explicitly writing data to the block of + ** (JOURNAL_HDR_SZ - 28) bytes that will not be used. So that is what + ** is done. + ** + ** The loop is required here in case the sector-size is larger than the + ** database page size. Since the zHeader buffer is only Pager.pageSize + ** bytes in size, more than one call to sqlite3OsWrite() may be required + ** to populate the entire journal header sector. + */ + for(nWrite=0; rc==SQLITE_OK&&nWritejournalHdr, nHeader)) + rc = sqlite3OsWrite(pPager->jfd, zHeader, nHeader, pPager->journalOff); + assert( pPager->journalHdr <= pPager->journalOff ); + pPager->journalOff += nHeader; } - return pPg; + return rc; } /* -** Release a page reference. +** The journal file must be open when this is called. A journal header file +** (JOURNAL_HDR_SZ bytes) is read from the current location in the journal +** file. The current location in the journal file is given by +** pPager->journalOff. See comments above function writeJournalHdr() for +** a description of the journal header format. ** -** If the number of references to the page drop to zero, then the -** page is added to the LRU list. When all references to all pages -** are released, a rollback occurs and the lock on the database is -** removed. +** If the header is read successfully, *pNRec is set to the number of +** page records following this header and *pDbSize is set to the size of the +** database before the transaction began, in pages. Also, pPager->cksumInit +** is set to the value read from the journal header. SQLITE_OK is returned +** in this case. +** +** If the journal header file appears to be corrupted, SQLITE_DONE is +** returned and *pNRec and *PDbSize are undefined. If JOURNAL_HDR_SZ bytes +** cannot be read from the journal file an error code is returned. */ -SQLITE_PRIVATE void sqlite3PagerUnref(DbPage *pPg){ - if( pPg ){ - Pager *pPager = pPg->pPager; - sqlite3PcacheRelease(pPg); - pagerUnlockIfUnused(pPager); +static int readJournalHdr( + Pager *pPager, /* Pager object */ + int isHot, + i64 journalSize, /* Size of the open journal file in bytes */ + u32 *pNRec, /* OUT: Value read from the nRec field */ + u32 *pDbSize /* OUT: Value of original database size field */ +){ + int rc; /* Return code */ + unsigned char aMagic[8]; /* A buffer to hold the magic header */ + i64 iHdrOff; /* Offset of journal header being read */ + + assert( isOpen(pPager->jfd) ); /* Journal file must be open. */ + + /* Advance Pager.journalOff to the start of the next sector. If the + ** journal file is too small for there to be a header stored at this + ** point, return SQLITE_DONE. + */ + pPager->journalOff = journalHdrOffset(pPager); + if( pPager->journalOff+JOURNAL_HDR_SZ(pPager) > journalSize ){ + return SQLITE_DONE; } -} + iHdrOff = pPager->journalOff; -/* -** If the main journal file has already been opened, ensure that the -** sub-journal file is open too. If the main journal is not open, -** this function is a no-op. -** -** SQLITE_OK is returned if everything goes according to plan. -** An SQLITE_IOERR_XXX error code is returned if a call to -** sqlite3OsOpen() fails. -*/ -static int openSubJournal(Pager *pPager){ - int rc = SQLITE_OK; - if( isOpen(pPager->jfd) && !isOpen(pPager->sjfd) ){ - if( pPager->journalMode==PAGER_JOURNALMODE_MEMORY || pPager->subjInMemory ){ - sqlite3MemJournalOpen(pPager->sjfd); - }else{ - rc = pagerOpentemp(pPager, pPager->sjfd, SQLITE_OPEN_SUBJOURNAL); + /* Read in the first 8 bytes of the journal header. If they do not match + ** the magic string found at the start of each journal header, return + ** SQLITE_DONE. If an IO error occurs, return an error code. Otherwise, + ** proceed. + */ + if( isHot || iHdrOff!=pPager->journalHdr ){ + rc = sqlite3OsRead(pPager->jfd, aMagic, sizeof(aMagic), iHdrOff); + if( rc ){ + return rc; + } + if( memcmp(aMagic, aJournalMagic, sizeof(aMagic))!=0 ){ + return SQLITE_DONE; + } + } + + /* Read the first three 32-bit fields of the journal header: The nRec + ** field, the checksum-initializer and the database size at the start + ** of the transaction. Return an error code if anything goes wrong. + */ + if( SQLITE_OK!=(rc = read32bits(pPager->jfd, iHdrOff+8, pNRec)) + || SQLITE_OK!=(rc = read32bits(pPager->jfd, iHdrOff+12, &pPager->cksumInit)) + || SQLITE_OK!=(rc = read32bits(pPager->jfd, iHdrOff+16, pDbSize)) + ){ + return rc; + } + + if( pPager->journalOff==0 ){ + u32 iPageSize; /* Page-size field of journal header */ + u32 iSectorSize; /* Sector-size field of journal header */ + + /* Read the page-size and sector-size journal header fields. */ + if( SQLITE_OK!=(rc = read32bits(pPager->jfd, iHdrOff+20, &iSectorSize)) + || SQLITE_OK!=(rc = read32bits(pPager->jfd, iHdrOff+24, &iPageSize)) + ){ + return rc; + } + + /* Versions of SQLite prior to 3.5.8 set the page-size field of the + ** journal header to zero. In this case, assume that the Pager.pageSize + ** variable is already set to the correct page size. + */ + if( iPageSize==0 ){ + iPageSize = pPager->pageSize; + } + + /* Check that the values read from the page-size and sector-size fields + ** are within range. To be 'in range', both values need to be a power + ** of two greater than or equal to 512 or 32, and not greater than their + ** respective compile time maximum limits. + */ + if( iPageSize<512 || iSectorSize<32 + || iPageSize>SQLITE_MAX_PAGE_SIZE || iSectorSize>MAX_SECTOR_SIZE + || ((iPageSize-1)&iPageSize)!=0 || ((iSectorSize-1)&iSectorSize)!=0 + ){ + /* If the either the page-size or sector-size in the journal-header is + ** invalid, then the process that wrote the journal-header must have + ** crashed before the header was synced. In this case stop reading + ** the journal file here. + */ + return SQLITE_DONE; } + + /* Update the page-size to match the value read from the journal. + ** Use a testcase() macro to make sure that malloc failure within + ** PagerSetPagesize() is tested. + */ + rc = sqlite3PagerSetPagesize(pPager, &iPageSize, -1); + testcase( rc!=SQLITE_OK ); + + /* Update the assumed sector-size to match the value used by + ** the process that created this journal. If this journal was + ** created by a process other than this one, then this routine + ** is being called from within pager_playback(). The local value + ** of Pager.sectorSize is restored at the end of that routine. + */ + pPager->sectorSize = iSectorSize; } + + pPager->journalOff += JOURNAL_HDR_SZ(pPager); return rc; } + /* -** This function is called at the start of every write transaction. -** There must already be a RESERVED or EXCLUSIVE lock on the database -** file when this routine is called. -** -** Open the journal file for pager pPager and write a journal header -** to the start of it. If there are active savepoints, open the sub-journal -** as well. This function is only used when the journal file is being -** opened to write a rollback log for a transaction. It is not used -** when opening a hot journal file to roll it back. +** Write the supplied master journal name into the journal file for pager +** pPager at the current location. The master journal name must be the last +** thing written to a journal file. If the pager is in full-sync mode, the +** journal file descriptor is advanced to the next sector boundary before +** anything is written. The format is: ** -** If the journal file is already open (as it may be in exclusive mode), -** then this function just writes a journal header to the start of the -** already open file. +** + 4 bytes: PAGER_MJ_PGNO. +** + N bytes: Master journal filename in utf-8. +** + 4 bytes: N (length of master journal name in bytes, no nul-terminator). +** + 4 bytes: Master journal name checksum. +** + 8 bytes: aJournalMagic[]. ** -** Whether or not the journal file is opened by this function, the -** Pager.pInJournal bitvec structure is allocated. +** The master journal page checksum is the sum of the bytes in the master +** journal name, where each byte is interpreted as a signed 8-bit integer. ** -** Return SQLITE_OK if everything is successful. Otherwise, return -** SQLITE_NOMEM if the attempt to allocate Pager.pInJournal fails, or -** an IO error code if opening or writing the journal file fails. +** If zMaster is a NULL pointer (occurs for a single database transaction), +** this call is a no-op. */ -static int pager_open_journal(Pager *pPager){ - int rc = SQLITE_OK; /* Return code */ - sqlite3_vfs * const pVfs = pPager->pVfs; /* Local cache of vfs pointer */ - - assert( pPager->state>=PAGER_RESERVED ); - assert( pPager->useJournal ); - assert( pPager->pInJournal==0 ); - - /* If already in the error state, this function is a no-op. */ - if( pPager->errCode ){ - return pPager->errCode; - } +static int writeMasterJournal(Pager *pPager, const char *zMaster){ + int rc; /* Return code */ + int nMaster; /* Length of string zMaster */ + i64 iHdrOff; /* Offset of header in journal file */ + i64 jrnlSize; /* Size of journal file on disk */ + u32 cksum = 0; /* Checksum of string zMaster */ - /* TODO: Is it really possible to get here with dbSizeValid==0? If not, - ** the call to PagerPagecount() can be removed. - */ - testcase( pPager->dbSizeValid==0 ); - sqlite3PagerPagecount(pPager, 0); + assert( pPager->setMaster==0 ); + assert( !pagerUseWal(pPager) ); - pPager->pInJournal = sqlite3BitvecCreate(pPager->dbSize); - if( pPager->pInJournal==0 ){ - return SQLITE_NOMEM; + if( !zMaster + || pPager->journalMode==PAGER_JOURNALMODE_MEMORY + || pPager->journalMode==PAGER_JOURNALMODE_OFF + ){ + return SQLITE_OK; } + pPager->setMaster = 1; + assert( isOpen(pPager->jfd) ); + assert( pPager->journalHdr <= pPager->journalOff ); - /* Open the journal file if it is not already open. */ - if( !isOpen(pPager->jfd) ){ - if( pPager->journalMode==PAGER_JOURNALMODE_MEMORY ){ - sqlite3MemJournalOpen(pPager->jfd); - }else{ - const int flags = /* VFS flags to open journal file */ - SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE| - (pPager->tempFile ? - (SQLITE_OPEN_DELETEONCLOSE|SQLITE_OPEN_TEMP_JOURNAL): - (SQLITE_OPEN_MAIN_JOURNAL) - ); -#ifdef SQLITE_ENABLE_ATOMIC_WRITE - rc = sqlite3JournalOpen( - pVfs, pPager->zJournal, pPager->jfd, flags, jrnlBufferSize(pPager) - ); -#else - rc = sqlite3OsOpen(pVfs, pPager->zJournal, pPager->jfd, flags, 0); -#endif - } - assert( rc!=SQLITE_OK || isOpen(pPager->jfd) ); + /* Calculate the length in bytes and the checksum of zMaster */ + for(nMaster=0; zMaster[nMaster]; nMaster++){ + cksum += zMaster[nMaster]; } - - /* Write the first journal header to the journal file and open - ** the sub-journal if necessary. + /* If in full-sync mode, advance to the next disk sector before writing + ** the master journal name. This is in case the previous page written to + ** the journal has already been synced. */ - if( rc==SQLITE_OK ){ - /* TODO: Check if all of these are really required. */ - pPager->dbOrigSize = pPager->dbSize; - pPager->journalStarted = 0; - pPager->needSync = 0; - pPager->nRec = 0; - pPager->journalOff = 0; - pPager->setMaster = 0; - pPager->journalHdr = 0; - rc = writeJournalHdr(pPager); + if( pPager->fullSync ){ + pPager->journalOff = journalHdrOffset(pPager); } - if( rc==SQLITE_OK && pPager->nSavepoint ){ - rc = openSubJournal(pPager); + iHdrOff = pPager->journalOff; + + /* Write the master journal data to the end of the journal file. If + ** an error occurs, return the error code to the caller. + */ + if( (0 != (rc = write32bits(pPager->jfd, iHdrOff, PAGER_MJ_PGNO(pPager)))) + || (0 != (rc = sqlite3OsWrite(pPager->jfd, zMaster, nMaster, iHdrOff+4))) + || (0 != (rc = write32bits(pPager->jfd, iHdrOff+4+nMaster, nMaster))) + || (0 != (rc = write32bits(pPager->jfd, iHdrOff+4+nMaster+4, cksum))) + || (0 != (rc = sqlite3OsWrite(pPager->jfd, aJournalMagic, 8, iHdrOff+4+nMaster+8))) + ){ + return rc; } + pPager->journalOff += (nMaster+20); - if( rc!=SQLITE_OK ){ - sqlite3BitvecDestroy(pPager->pInJournal); - pPager->pInJournal = 0; + /* If the pager is in peristent-journal mode, then the physical + ** journal-file may extend past the end of the master-journal name + ** and 8 bytes of magic data just written to the file. This is + ** dangerous because the code to rollback a hot-journal file + ** will not be able to find the master-journal name to determine + ** whether or not the journal is hot. + ** + ** Easiest thing to do in this scenario is to truncate the journal + ** file to the required size. + */ + if( SQLITE_OK==(rc = sqlite3OsFileSize(pPager->jfd, &jrnlSize)) + && jrnlSize>pPager->journalOff + ){ + rc = sqlite3OsTruncate(pPager->jfd, pPager->journalOff); } return rc; } /* -** Begin a write-transaction on the specified pager object. If a -** write-transaction has already been opened, this function is a no-op. -** -** If the exFlag argument is false, then acquire at least a RESERVED -** lock on the database file. If exFlag is true, then acquire at least -** an EXCLUSIVE lock. If such a lock is already held, no locking -** functions need be called. -** -** If this is not a temporary or in-memory file and, the journal file is -** opened if it has not been already. For a temporary file, the opening -** of the journal file is deferred until there is an actual need to -** write to the journal. TODO: Why handle temporary files differently? -** -** If the journal file is opened (or if it is already open), then a -** journal-header is written to the start of it. -** -** If the subjInMemory argument is non-zero, then any sub-journal opened -** within this transaction will be opened as an in-memory file. This -** has no effect if the sub-journal is already opened (as it may be when -** running in exclusive mode) or if the transaction does not require a -** sub-journal. If the subjInMemory argument is zero, then any required -** sub-journal is implemented in-memory if pPager is an in-memory database, -** or using a temporary file otherwise. +** Find a page in the hash table given its page number. Return +** a pointer to the page or NULL if the requested page is not +** already in memory. */ -SQLITE_PRIVATE int sqlite3PagerBegin(Pager *pPager, int exFlag, int subjInMemory){ - int rc = SQLITE_OK; - assert( pPager->state!=PAGER_UNLOCK ); - pPager->subjInMemory = (u8)subjInMemory; - if( pPager->state==PAGER_SHARED ){ - assert( pPager->pInJournal==0 ); - assert( !MEMDB && !pPager->tempFile ); +static PgHdr *pager_lookup(Pager *pPager, Pgno pgno){ + PgHdr *p; /* Return value */ - /* Obtain a RESERVED lock on the database file. If the exFlag parameter - ** is true, then immediately upgrade this to an EXCLUSIVE lock. The - ** busy-handler callback can be used when upgrading to the EXCLUSIVE - ** lock, but not when obtaining the RESERVED lock. - */ - rc = sqlite3OsLock(pPager->fd, RESERVED_LOCK); - if( rc==SQLITE_OK ){ - pPager->state = PAGER_RESERVED; - if( exFlag ){ - rc = pager_wait_on_lock(pPager, EXCLUSIVE_LOCK); - } - } + /* It is not possible for a call to PcacheFetch() with createFlag==0 to + ** fail, since no attempt to allocate dynamic memory will be made. + */ + (void)sqlite3PcacheFetch(pPager->pPCache, pgno, 0, &p); + return p; +} - /* If the required locks were successfully obtained, open the journal - ** file and write the first journal-header to it. - */ - if( rc==SQLITE_OK && pPager->useJournal - && pPager->journalMode!=PAGER_JOURNALMODE_OFF - ){ - rc = pager_open_journal(pPager); - } - }else if( isOpen(pPager->jfd) && pPager->journalOff==0 ){ - /* This happens when the pager was in exclusive-access mode the last - ** time a (read or write) transaction was successfully concluded - ** by this connection. Instead of deleting the journal file it was - ** kept open and either was truncated to 0 bytes or its header was - ** overwritten with zeros. - */ - assert( pPager->nRec==0 ); - assert( pPager->dbOrigSize==0 ); - assert( pPager->pInJournal==0 ); - rc = pager_open_journal(pPager); - } +/* +** Discard the entire contents of the in-memory page-cache. +*/ +static void pager_reset(Pager *pPager){ + sqlite3BackupRestart(pPager->pBackup); + sqlite3PcacheClear(pPager->pPCache); +} - PAGERTRACE(("TRANSACTION %d\n", PAGERID(pPager))); - assert( !isOpen(pPager->jfd) || pPager->journalOff>0 || rc!=SQLITE_OK ); - return rc; +/* +** Free all structures in the Pager.aSavepoint[] array and set both +** Pager.aSavepoint and Pager.nSavepoint to zero. Close the sub-journal +** if it is open and the pager is not in exclusive mode. +*/ +static void releaseAllSavepoints(Pager *pPager){ + int ii; /* Iterator for looping through Pager.aSavepoint */ + for(ii=0; iinSavepoint; ii++){ + sqlite3BitvecDestroy(pPager->aSavepoint[ii].pInSavepoint); + } + if( !pPager->exclusiveMode || sqlite3IsMemJournal(pPager->sjfd) ){ + sqlite3OsClose(pPager->sjfd); + } + sqlite3_free(pPager->aSavepoint); + pPager->aSavepoint = 0; + pPager->nSavepoint = 0; + pPager->nSubRec = 0; } /* -** Mark a single data page as writeable. The page is written into the -** main journal or sub-journal as required. If the page is written into -** one of the journals, the corresponding bit is set in the -** Pager.pInJournal bitvec and the PagerSavepoint.pInSavepoint bitvecs -** of any open savepoints as appropriate. +** Set the bit number pgno in the PagerSavepoint.pInSavepoint +** bitvecs of all open savepoints. Return SQLITE_OK if successful +** or SQLITE_NOMEM if a malloc failure occurs. */ -static int pager_write(PgHdr *pPg){ - void *pData = pPg->pData; - Pager *pPager = pPg->pPager; - int rc = SQLITE_OK; +static int addToSavepointBitvecs(Pager *pPager, Pgno pgno){ + int ii; /* Loop counter */ + int rc = SQLITE_OK; /* Result code */ - /* Check for errors - */ - if( pPager->errCode ){ - return pPager->errCode; - } - if( pPager->readOnly ){ - return SQLITE_PERM; + for(ii=0; iinSavepoint; ii++){ + PagerSavepoint *p = &pPager->aSavepoint[ii]; + if( pgno<=p->nOrig ){ + rc |= sqlite3BitvecSet(p->pInSavepoint, pgno); + testcase( rc==SQLITE_NOMEM ); + assert( rc==SQLITE_OK || rc==SQLITE_NOMEM ); + } } + return rc; +} - assert( !pPager->setMaster ); +/* +** This function is a no-op if the pager is in exclusive mode and not +** in the ERROR state. Otherwise, it switches the pager to PAGER_OPEN +** state. +** +** If the pager is not in exclusive-access mode, the database file is +** completely unlocked. If the file is unlocked and the file-system does +** not exhibit the UNDELETABLE_WHEN_OPEN property, the journal file is +** closed (if it is open). +** +** If the pager is in ERROR state when this function is called, the +** contents of the pager cache are discarded before switching back to +** the OPEN state. Regardless of whether the pager is in exclusive-mode +** or not, any journal file left in the file-system will be treated +** as a hot-journal and rolled back the next time a read-transaction +** is opened (by this or by any other connection). +*/ +static void pager_unlock(Pager *pPager){ - CHECK_PAGE(pPg); + assert( pPager->eState==PAGER_READER + || pPager->eState==PAGER_OPEN + || pPager->eState==PAGER_ERROR + ); - /* Mark the page as dirty. If the page has already been written - ** to the journal then we can return right away. - */ - sqlite3PcacheMakeDirty(pPg); - if( pageInJournal(pPg) && !subjRequiresPage(pPg) ){ - pPager->dbModified = 1; - }else{ + sqlite3BitvecDestroy(pPager->pInJournal); + pPager->pInJournal = 0; + releaseAllSavepoints(pPager); - /* If we get this far, it means that the page needs to be - ** written to the transaction journal or the ckeckpoint journal - ** or both. - ** - ** First check to see that the transaction journal exists and - ** create it if it does not. + if( pagerUseWal(pPager) ){ + assert( !isOpen(pPager->jfd) ); + sqlite3WalEndReadTransaction(pPager->pWal); + pPager->eState = PAGER_OPEN; + }else if( !pPager->exclusiveMode ){ + int rc; /* Error code returned by pagerUnlockDb() */ + int iDc = isOpen(pPager->fd)?sqlite3OsDeviceCharacteristics(pPager->fd):0; + + /* If the operating system support deletion of open files, then + ** close the journal file when dropping the database lock. Otherwise + ** another connection with journal_mode=delete might delete the file + ** out from under us. */ - assert( pPager->state!=PAGER_UNLOCK ); - rc = sqlite3PagerBegin(pPager, 0, pPager->subjInMemory); - if( rc!=SQLITE_OK ){ - return rc; - } - assert( pPager->state>=PAGER_RESERVED ); - if( !isOpen(pPager->jfd) && pPager->useJournal - && pPager->journalMode!=PAGER_JOURNALMODE_OFF ){ - rc = pager_open_journal(pPager); - if( rc!=SQLITE_OK ) return rc; + assert( (PAGER_JOURNALMODE_MEMORY & 5)!=1 ); + assert( (PAGER_JOURNALMODE_OFF & 5)!=1 ); + assert( (PAGER_JOURNALMODE_WAL & 5)!=1 ); + assert( (PAGER_JOURNALMODE_DELETE & 5)!=1 ); + assert( (PAGER_JOURNALMODE_TRUNCATE & 5)==1 ); + assert( (PAGER_JOURNALMODE_PERSIST & 5)==1 ); + if( 0==(iDc & SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN) + || 1!=(pPager->journalMode & 5) + ){ + sqlite3OsClose(pPager->jfd); } - pPager->dbModified = 1; - - /* The transaction journal now exists and we have a RESERVED or an - ** EXCLUSIVE lock on the main database file. Write the current page to - ** the transaction journal if it is not there already. + + /* If the pager is in the ERROR state and the call to unlock the database + ** file fails, set the current lock to UNKNOWN_LOCK. See the comment + ** above the #define for UNKNOWN_LOCK for an explanation of why this + ** is necessary. */ - if( !pageInJournal(pPg) && isOpen(pPager->jfd) ){ - if( pPg->pgno<=pPager->dbOrigSize ){ - u32 cksum; - char *pData2; + rc = pagerUnlockDb(pPager, NO_LOCK); + if( rc!=SQLITE_OK && pPager->eState==PAGER_ERROR ){ + pPager->eLock = UNKNOWN_LOCK; + } - /* We should never write to the journal file the page that - ** contains the database locks. The following assert verifies - ** that we do not. */ - assert( pPg->pgno!=PAGER_MJ_PGNO(pPager) ); - CODEC2(pPager, pData, pPg->pgno, 7, return SQLITE_NOMEM, pData2); - cksum = pager_cksum(pPager, (u8*)pData2); - rc = write32bits(pPager->jfd, pPager->journalOff, pPg->pgno); - if( rc==SQLITE_OK ){ - rc = sqlite3OsWrite(pPager->jfd, pData2, pPager->pageSize, - pPager->journalOff + 4); - pPager->journalOff += pPager->pageSize+4; - } - if( rc==SQLITE_OK ){ - rc = write32bits(pPager->jfd, pPager->journalOff, cksum); - pPager->journalOff += 4; - } - IOTRACE(("JOUT %p %d %lld %d\n", pPager, pPg->pgno, - pPager->journalOff, pPager->pageSize)); - PAGER_INCR(sqlite3_pager_writej_count); - PAGERTRACE(("JOURNAL %d page %d needSync=%d hash(%08x)\n", - PAGERID(pPager), pPg->pgno, - ((pPg->flags&PGHDR_NEED_SYNC)?1:0), pager_pagehash(pPg))); + /* The pager state may be changed from PAGER_ERROR to PAGER_OPEN here + ** without clearing the error code. This is intentional - the error + ** code is cleared and the cache reset in the block below. + */ + assert( pPager->errCode || pPager->eState!=PAGER_ERROR ); + pPager->changeCountDone = 0; + pPager->eState = PAGER_OPEN; + } - /* Even if an IO or diskfull error occurred while journalling the - ** page in the block above, set the need-sync flag for the page. - ** Otherwise, when the transaction is rolled back, the logic in - ** playback_one_page() will think that the page needs to be restored - ** in the database file. And if an IO error occurs while doing so, - ** then corruption may follow. - */ - if( !pPager->noSync ){ - pPg->flags |= PGHDR_NEED_SYNC; - pPager->needSync = 1; - } + /* If Pager.errCode is set, the contents of the pager cache cannot be + ** trusted. Now that there are no outstanding references to the pager, + ** it can safely move back to PAGER_OPEN state. This happens in both + ** normal and exclusive-locking mode. + */ + if( pPager->errCode ){ + assert( !MEMDB ); + pager_reset(pPager); + pPager->changeCountDone = pPager->tempFile; + pPager->eState = PAGER_OPEN; + pPager->errCode = SQLITE_OK; + } - /* An error has occurred writing to the journal file. The - ** transaction will be rolled back by the layer above. - */ - if( rc!=SQLITE_OK ){ - return rc; - } + pPager->journalOff = 0; + pPager->journalHdr = 0; + pPager->setMaster = 0; +} - pPager->nRec++; - assert( pPager->pInJournal!=0 ); - rc = sqlite3BitvecSet(pPager->pInJournal, pPg->pgno); - testcase( rc==SQLITE_NOMEM ); - assert( rc==SQLITE_OK || rc==SQLITE_NOMEM ); - rc |= addToSavepointBitvecs(pPager, pPg->pgno); - if( rc!=SQLITE_OK ){ - assert( rc==SQLITE_NOMEM ); - return rc; - } - }else{ - if( !pPager->journalStarted && !pPager->noSync ){ - pPg->flags |= PGHDR_NEED_SYNC; - pPager->needSync = 1; - } - PAGERTRACE(("APPEND %d page %d needSync=%d\n", - PAGERID(pPager), pPg->pgno, - ((pPg->flags&PGHDR_NEED_SYNC)?1:0))); - } - } - - /* If the statement journal is open and the page is not in it, - ** then write the current page to the statement journal. Note that - ** the statement journal format differs from the standard journal format - ** in that it omits the checksums and the header. - */ - if( subjRequiresPage(pPg) ){ - rc = subjournalPage(pPg); - } - } - - /* Update the database size and return. - */ - assert( pPager->state>=PAGER_SHARED ); - if( pPager->dbSizepgno ){ - pPager->dbSize = pPg->pgno; +/* +** This function is called whenever an IOERR or FULL error that requires +** the pager to transition into the ERROR state may ahve occurred. +** The first argument is a pointer to the pager structure, the second +** the error-code about to be returned by a pager API function. The +** value returned is a copy of the second argument to this function. +** +** If the second argument is SQLITE_FULL, SQLITE_IOERR or one of the +** IOERR sub-codes, the pager enters the ERROR state and the error code +** is stored in Pager.errCode. While the pager remains in the ERROR state, +** all major API calls on the Pager will immediately return Pager.errCode. +** +** The ERROR state indicates that the contents of the pager-cache +** cannot be trusted. This state can be cleared by completely discarding +** the contents of the pager-cache. If a transaction was active when +** the persistent error occurred, then the rollback journal may need +** to be replayed to restore the contents of the database file (as if +** it were a hot-journal). +*/ +static int pager_error(Pager *pPager, int rc){ + int rc2 = rc & 0xff; + assert( rc==SQLITE_OK || !MEMDB ); + assert( + pPager->errCode==SQLITE_FULL || + pPager->errCode==SQLITE_OK || + (pPager->errCode & 0xff)==SQLITE_IOERR + ); + if( rc2==SQLITE_FULL || rc2==SQLITE_IOERR ){ + pPager->errCode = rc; + pPager->eState = PAGER_ERROR; } return rc; } /* -** Mark a data page as writeable. This routine must be called before -** making changes to a page. The caller must check the return value -** of this function and be careful not to change any page data unless -** this routine returns SQLITE_OK. +** This routine ends a transaction. A transaction is usually ended by +** either a COMMIT or a ROLLBACK operation. This routine may be called +** after rollback of a hot-journal, or if an error occurs while opening +** the journal file or writing the very first journal-header of a +** database transaction. +** +** This routine is never called in PAGER_ERROR state. If it is called +** in PAGER_NONE or PAGER_SHARED state and the lock held is less +** exclusive than a RESERVED lock, it is a no-op. ** -** The difference between this function and pager_write() is that this -** function also deals with the special case where 2 or more pages -** fit on a single disk sector. In this case all co-resident pages -** must have been written to the journal file before returning. +** Otherwise, any active savepoints are released. ** -** If an error occurs, SQLITE_NOMEM or an IO error code is returned -** as appropriate. Otherwise, SQLITE_OK. +** If the journal file is open, then it is "finalized". Once a journal +** file has been finalized it is not possible to use it to roll back a +** transaction. Nor will it be considered to be a hot-journal by this +** or any other database connection. Exactly how a journal is finalized +** depends on whether or not the pager is running in exclusive mode and +** the current journal-mode (Pager.journalMode value), as follows: +** +** journalMode==MEMORY +** Journal file descriptor is simply closed. This destroys an +** in-memory journal. +** +** journalMode==TRUNCATE +** Journal file is truncated to zero bytes in size. +** +** journalMode==PERSIST +** The first 28 bytes of the journal file are zeroed. This invalidates +** the first journal header in the file, and hence the entire journal +** file. An invalid journal file cannot be rolled back. +** +** journalMode==DELETE +** The journal file is closed and deleted using sqlite3OsDelete(). +** +** If the pager is running in exclusive mode, this method of finalizing +** the journal file is never used. Instead, if the journalMode is +** DELETE and the pager is in exclusive mode, the method described under +** journalMode==PERSIST is used instead. +** +** After the journal is finalized, the pager moves to PAGER_READER state. +** If running in non-exclusive rollback mode, the lock on the file is +** downgraded to a SHARED_LOCK. +** +** SQLITE_OK is returned if no error occurs. If an error occurs during +** any of the IO operations to finalize the journal file or unlock the +** database then the IO error code is returned to the user. If the +** operation to finalize the journal file fails, then the code still +** tries to unlock the database file if not in exclusive mode. If the +** unlock operation fails as well, then the first error code related +** to the first error encountered (the journal finalization one) is +** returned. */ -SQLITE_PRIVATE int sqlite3PagerWrite(DbPage *pDbPage){ - int rc = SQLITE_OK; - - PgHdr *pPg = pDbPage; - Pager *pPager = pPg->pPager; - Pgno nPagePerSector = (pPager->sectorSize/pPager->pageSize); - - if( nPagePerSector>1 ){ - Pgno nPageCount; /* Total number of pages in database file */ - Pgno pg1; /* First page of the sector pPg is located on. */ - int nPage; /* Number of pages starting at pg1 to journal */ - int ii; /* Loop counter */ - int needSync = 0; /* True if any page has PGHDR_NEED_SYNC */ +static int pager_end_transaction(Pager *pPager, int hasMaster){ + int rc = SQLITE_OK; /* Error code from journal finalization operation */ + int rc2 = SQLITE_OK; /* Error code from db file unlock operation */ - /* Set the doNotSync flag to 1. This is because we cannot allow a journal - ** header to be written between the pages journaled by this function. - */ - assert( !MEMDB ); - assert( pPager->doNotSync==0 ); - pPager->doNotSync = 1; + /* Do nothing if the pager does not have an open write transaction + ** or at least a RESERVED lock. This function may be called when there + ** is no write-transaction active but a RESERVED or greater lock is + ** held under two circumstances: + ** + ** 1. After a successful hot-journal rollback, it is called with + ** eState==PAGER_NONE and eLock==EXCLUSIVE_LOCK. + ** + ** 2. If a connection with locking_mode=exclusive holding an EXCLUSIVE + ** lock switches back to locking_mode=normal and then executes a + ** read-transaction, this function is called with eState==PAGER_READER + ** and eLock==EXCLUSIVE_LOCK when the read-transaction is closed. + */ + assert( assert_pager_state(pPager) ); + assert( pPager->eState!=PAGER_ERROR ); + if( pPager->eStateeLockpgno-1) & ~(nPagePerSector-1)) + 1; + releaseAllSavepoints(pPager); + assert( isOpen(pPager->jfd) || pPager->pInJournal==0 ); + if( isOpen(pPager->jfd) ){ + assert( !pagerUseWal(pPager) ); - sqlite3PagerPagecount(pPager, (int *)&nPageCount); - if( pPg->pgno>nPageCount ){ - nPage = (pPg->pgno - pg1)+1; - }else if( (pg1+nPagePerSector-1)>nPageCount ){ - nPage = nPageCount+1-pg1; + /* Finalize the journal file. */ + if( sqlite3IsMemJournal(pPager->jfd) ){ + assert( pPager->journalMode==PAGER_JOURNALMODE_MEMORY ); + sqlite3OsClose(pPager->jfd); + }else if( pPager->journalMode==PAGER_JOURNALMODE_TRUNCATE ){ + if( pPager->journalOff==0 ){ + rc = SQLITE_OK; + }else{ + rc = sqlite3OsTruncate(pPager->jfd, 0); + } + pPager->journalOff = 0; + }else if( pPager->journalMode==PAGER_JOURNALMODE_PERSIST + || (pPager->exclusiveMode && pPager->journalMode!=PAGER_JOURNALMODE_WAL) + ){ + rc = zeroJournalHdr(pPager, hasMaster); + pPager->journalOff = 0; }else{ - nPage = nPagePerSector; - } - assert(nPage>0); - assert(pg1<=pPg->pgno); - assert((pg1+nPage)>pPg->pgno); - - for(ii=0; iipgno || !sqlite3BitvecTest(pPager->pInJournal, pg) ){ - if( pg!=PAGER_MJ_PGNO(pPager) ){ - rc = sqlite3PagerGet(pPager, pg, &pPage); - if( rc==SQLITE_OK ){ - rc = pager_write(pPage); - if( pPage->flags&PGHDR_NEED_SYNC ){ - needSync = 1; - assert(pPager->needSync); - } - sqlite3PagerUnref(pPage); - } - } - }else if( (pPage = pager_lookup(pPager, pg))!=0 ){ - if( pPage->flags&PGHDR_NEED_SYNC ){ - needSync = 1; - } - sqlite3PagerUnref(pPage); + /* This branch may be executed with Pager.journalMode==MEMORY if + ** a hot-journal was just rolled back. In this case the journal + ** file should be closed and deleted. If this connection writes to + ** the database file, it will do so using an in-memory journal. + */ + assert( pPager->journalMode==PAGER_JOURNALMODE_DELETE + || pPager->journalMode==PAGER_JOURNALMODE_MEMORY + || pPager->journalMode==PAGER_JOURNALMODE_WAL + ); + sqlite3OsClose(pPager->jfd); + if( !pPager->tempFile ){ + rc = sqlite3OsDelete(pPager->pVfs, pPager->zJournal, 0); } } + } - /* If the PGHDR_NEED_SYNC flag is set for any of the nPage pages - ** starting at pg1, then it needs to be set for all of them. Because - ** writing to any of these nPage pages may damage the others, the - ** journal file must contain sync()ed copies of all of them - ** before any of them can be written out to the database file. - */ - if( needSync ){ - assert( !MEMDB && pPager->noSync==0 ); - for(ii=0; iiflags |= PGHDR_NEED_SYNC; - sqlite3PagerUnref(pPage); - } - } - assert(pPager->needSync); +#ifdef SQLITE_CHECK_PAGES + sqlite3PcacheIterateDirty(pPager->pPCache, pager_set_pagehash); + if( pPager->dbSize==0 && sqlite3PcacheRefCount(pPager->pPCache)>0 ){ + PgHdr *p = pager_lookup(pPager, 1); + if( p ){ + p->pageHash = 0; + sqlite3PagerUnref(p); } + } +#endif - assert( pPager->doNotSync==1 ); - pPager->doNotSync = 0; - }else{ - rc = pager_write(pDbPage); + sqlite3BitvecDestroy(pPager->pInJournal); + pPager->pInJournal = 0; + pPager->nRec = 0; + sqlite3PcacheCleanAll(pPager->pPCache); + sqlite3PcacheTruncate(pPager->pPCache, pPager->dbSize); + + if( pagerUseWal(pPager) ){ + /* Drop the WAL write-lock, if any. Also, if the connection was in + ** locking_mode=exclusive mode but is no longer, drop the EXCLUSIVE + ** lock held on the database file. + */ + rc2 = sqlite3WalEndWriteTransaction(pPager->pWal); + assert( rc2==SQLITE_OK ); } - return rc; -} + if( !pPager->exclusiveMode + && (!pagerUseWal(pPager) || sqlite3WalExclusiveMode(pPager->pWal, 0)) + ){ + rc2 = pagerUnlockDb(pPager, SHARED_LOCK); + pPager->changeCountDone = 0; + } + pPager->eState = PAGER_READER; + pPager->setMaster = 0; -/* -** Return TRUE if the page given in the argument was previously passed -** to sqlite3PagerWrite(). In other words, return TRUE if it is ok -** to change the content of the page. -*/ -#ifndef NDEBUG -SQLITE_PRIVATE int sqlite3PagerIswriteable(DbPage *pPg){ - return pPg->flags&PGHDR_DIRTY; + return (rc==SQLITE_OK?rc2:rc); } -#endif /* -** A call to this routine tells the pager that it is not necessary to -** write the information on page pPg back to the disk, even though -** that page might be marked as dirty. This happens, for example, when -** the page has been added as a leaf of the freelist and so its -** content no longer matters. +** Execute a rollback if a transaction is active and unlock the +** database file. ** -** The overlying software layer calls this routine when all of the data -** on the given page is unused. The pager marks the page as clean so -** that it does not get written to disk. +** If the pager has already entered the ERROR state, do not attempt +** the rollback at this time. Instead, pager_unlock() is called. The +** call to pager_unlock() will discard all in-memory pages, unlock +** the database file and move the pager back to OPEN state. If this +** means that there is a hot-journal left in the file-system, the next +** connection to obtain a shared lock on the pager (which may be this one) +** will roll it back. ** -** Tests show that this optimization can quadruple the speed of large -** DELETE operations. +** If the pager has not already entered the ERROR state, but an IO or +** malloc error occurs during a rollback, then this will itself cause +** the pager to enter the ERROR state. Which will be cleared by the +** call to pager_unlock(), as described above. */ -SQLITE_PRIVATE void sqlite3PagerDontWrite(PgHdr *pPg){ - Pager *pPager = pPg->pPager; - if( (pPg->flags&PGHDR_DIRTY) && pPager->nSavepoint==0 ){ - PAGERTRACE(("DONT_WRITE page %d of %d\n", pPg->pgno, PAGERID(pPager))); - IOTRACE(("CLEAN %p %d\n", pPager, pPg->pgno)) - pPg->flags |= PGHDR_DONT_WRITE; -#ifdef SQLITE_CHECK_PAGES - pPg->pageHash = pager_pagehash(pPg); -#endif +static void pagerUnlockAndRollback(Pager *pPager){ + if( pPager->eState!=PAGER_ERROR && pPager->eState!=PAGER_OPEN ){ + assert( assert_pager_state(pPager) ); + if( pPager->eState>=PAGER_WRITER_LOCKED ){ + sqlite3BeginBenignMalloc(); + sqlite3PagerRollback(pPager); + sqlite3EndBenignMalloc(); + }else if( !pPager->exclusiveMode ){ + assert( pPager->eState==PAGER_READER ); + pager_end_transaction(pPager, 0); + } } + pager_unlock(pPager); } /* -** This routine is called to increment the value of the database file -** change-counter, stored as a 4-byte big-endian integer starting at -** byte offset 24 of the pager file. +** Parameter aData must point to a buffer of pPager->pageSize bytes +** of data. Compute and return a checksum based ont the contents of the +** page of data and the current value of pPager->cksumInit. ** -** If the isDirect flag is zero, then this is done by calling -** sqlite3PagerWrite() on page 1, then modifying the contents of the -** page data. In this case the file will be updated when the current -** transaction is committed. +** This is not a real checksum. It is really just the sum of the +** random initial value (pPager->cksumInit) and every 200th byte +** of the page data, starting with byte offset (pPager->pageSize%200). +** Each byte is interpreted as an 8-bit unsigned integer. ** -** The isDirect flag may only be non-zero if the library was compiled -** with the SQLITE_ENABLE_ATOMIC_WRITE macro defined. In this case, -** if isDirect is non-zero, then the database file is updated directly -** by writing an updated version of page 1 using a call to the -** sqlite3OsWrite() function. +** Changing the formula used to compute this checksum results in an +** incompatible journal file format. +** +** If journal corruption occurs due to a power failure, the most likely +** scenario is that one end or the other of the record will be changed. +** It is much less likely that the two ends of the journal record will be +** correct and the middle be corrupt. Thus, this "checksum" scheme, +** though fast and simple, catches the mostly likely kind of corruption. */ -static int pager_incr_changecounter(Pager *pPager, int isDirectMode){ - int rc = SQLITE_OK; - - /* Declare and initialize constant integer 'isDirect'. If the - ** atomic-write optimization is enabled in this build, then isDirect - ** is initialized to the value passed as the isDirectMode parameter - ** to this function. Otherwise, it is always set to zero. - ** - ** The idea is that if the atomic-write optimization is not - ** enabled at compile time, the compiler can omit the tests of - ** 'isDirect' below, as well as the block enclosed in the - ** "if( isDirect )" condition. - */ -#ifndef SQLITE_ENABLE_ATOMIC_WRITE - const int isDirect = 0; - assert( isDirectMode==0 ); - UNUSED_PARAMETER(isDirectMode); -#else - const int isDirect = isDirectMode; -#endif - - assert( pPager->state>=PAGER_RESERVED ); - if( !pPager->changeCountDone && pPager->dbSize>0 ){ - PgHdr *pPgHdr; /* Reference to page 1 */ - u32 change_counter; /* Initial value of change-counter field */ - - assert( !pPager->tempFile && isOpen(pPager->fd) ); - - /* Open page 1 of the file for writing. */ - rc = sqlite3PagerGet(pPager, 1, &pPgHdr); - assert( pPgHdr==0 || rc==SQLITE_OK ); - - /* If page one was fetched successfully, and this function is not - ** operating in direct-mode, make page 1 writable. - */ - if( rc==SQLITE_OK && !isDirect ){ - rc = sqlite3PagerWrite(pPgHdr); - } - - if( rc==SQLITE_OK ){ - /* Increment the value just read and write it back to byte 24. */ - change_counter = sqlite3Get4byte((u8*)pPager->dbFileVers); - change_counter++; - put32bits(((char*)pPgHdr->pData)+24, change_counter); - - /* If running in direct mode, write the contents of page 1 to the file. */ - if( isDirect ){ - const void *zBuf = pPgHdr->pData; - assert( pPager->dbFileSize>0 ); - rc = sqlite3OsWrite(pPager->fd, zBuf, pPager->pageSize, 0); - } - - /* If everything worked, set the changeCountDone flag. */ - if( rc==SQLITE_OK ){ - pPager->changeCountDone = 1; - } - } - - /* Release the page reference. */ - sqlite3PagerUnref(pPgHdr); +static u32 pager_cksum(Pager *pPager, const u8 *aData){ + u32 cksum = pPager->cksumInit; /* Checksum value to return */ + int i = pPager->pageSize-200; /* Loop counter */ + while( i>0 ){ + cksum += aData[i]; + i -= 200; } - return rc; + return cksum; } /* -** Sync the pager file to disk. This is a no-op for in-memory files -** or pages with the Pager.noSync flag set. -** -** If successful, or called on a pager for which it is a no-op, this -** function returns SQLITE_OK. Otherwise, an IO error code is returned. +** Report the current page size and number of reserved bytes back +** to the codec. */ -SQLITE_PRIVATE int sqlite3PagerSync(Pager *pPager){ - int rc; /* Return code */ - if( MEMDB || pPager->noSync ){ - rc = SQLITE_OK; - }else{ - rc = sqlite3OsSync(pPager->fd, pPager->sync_flags); +#ifdef SQLITE_HAS_CODEC +static void pagerReportSize(Pager *pPager){ + if( pPager->xCodecSizeChng ){ + pPager->xCodecSizeChng(pPager->pCodec, pPager->pageSize, + (int)pPager->nReserve); } - return rc; } +#else +# define pagerReportSize(X) /* No-op if we do not support a codec */ +#endif /* -** Sync the database file for the pager pPager. zMaster points to the name -** of a master journal file that should be written into the individual -** journal file. zMaster may be NULL, which is interpreted as no master -** journal (a single database transaction). +** Read a single page from either the journal file (if isMainJrnl==1) or +** from the sub-journal (if isMainJrnl==0) and playback that page. +** The page begins at offset *pOffset into the file. The *pOffset +** value is increased to the start of the next page in the journal. ** -** This routine ensures that: +** The main rollback journal uses checksums - the statement journal does +** not. ** -** * The database file change-counter is updated, -** * the journal is synced (unless the atomic-write optimization is used), -** * all dirty pages are written to the database file, -** * the database file is truncated (if required), and -** * the database file synced. +** If the page number of the page record read from the (sub-)journal file +** is greater than the current value of Pager.dbSize, then playback is +** skipped and SQLITE_OK is returned. ** -** The only thing that remains to commit the transaction is to finalize -** (delete, truncate or zero the first part of) the journal file (or -** delete the master journal file if specified). +** If pDone is not NULL, then it is a record of pages that have already +** been played back. If the page at *pOffset has already been played back +** (if the corresponding pDone bit is set) then skip the playback. +** Make sure the pDone bit corresponding to the *pOffset page is set +** prior to returning. ** -** Note that if zMaster==NULL, this does not overwrite a previous value -** passed to an sqlite3PagerCommitPhaseOne() call. +** If the page record is successfully read from the (sub-)journal file +** and played back, then SQLITE_OK is returned. If an IO error occurs +** while reading the record from the (sub-)journal file or while writing +** to the database file, then the IO error code is returned. If data +** is successfully read from the (sub-)journal file but appears to be +** corrupted, SQLITE_DONE is returned. Data is considered corrupted in +** two circumstances: +** +** * If the record page-number is illegal (0 or PAGER_MJ_PGNO), or +** * If the record is being rolled back from the main journal file +** and the checksum field does not match the record content. ** -** If the final parameter - noSync - is true, then the database file itself -** is not synced. The caller must call sqlite3PagerSync() directly to -** sync the database file before calling CommitPhaseTwo() to delete the -** journal file in this case. +** Neither of these two scenarios are possible during a savepoint rollback. +** +** If this is a savepoint rollback, then memory may have to be dynamically +** allocated by this function. If this is the case and an allocation fails, +** SQLITE_NOMEM is returned. */ -SQLITE_PRIVATE int sqlite3PagerCommitPhaseOne( - Pager *pPager, /* Pager object */ - const char *zMaster, /* If not NULL, the master journal name */ - int noSync /* True to omit the xSync on the db file */ +static int pager_playback_one_page( + Pager *pPager, /* The pager being played back */ + i64 *pOffset, /* Offset of record to playback */ + Bitvec *pDone, /* Bitvec of pages already played back */ + int isMainJrnl, /* 1 -> main journal. 0 -> sub-journal. */ + int isSavepnt /* True for a savepoint rollback */ ){ - int rc = SQLITE_OK; /* Return code */ + int rc; + PgHdr *pPg; /* An existing page in the cache */ + Pgno pgno; /* The page number of a page in journal */ + u32 cksum; /* Checksum used for sanity checking */ + char *aData; /* Temporary storage for the page */ + sqlite3_file *jfd; /* The file descriptor for the journal file */ + int isSynced; /* True if journal page is synced */ - if( pPager->errCode ){ - return pPager->errCode; - } + assert( (isMainJrnl&~1)==0 ); /* isMainJrnl is 0 or 1 */ + assert( (isSavepnt&~1)==0 ); /* isSavepnt is 0 or 1 */ + assert( isMainJrnl || pDone ); /* pDone always used on sub-journals */ + assert( isSavepnt || pDone==0 ); /* pDone never used on non-savepoint */ - PAGERTRACE(("DATABASE SYNC: File=%s zMaster=%s nSize=%d\n", - pPager->zFilename, zMaster, pPager->dbSize)); + aData = pPager->pTmpSpace; + assert( aData ); /* Temp storage must have already been allocated */ + assert( pagerUseWal(pPager)==0 || (!isMainJrnl && isSavepnt) ); - /* If this is an in-memory db, or no pages have been written to, or this - ** function has already been called, it is a no-op. + /* Either the state is greater than PAGER_WRITER_CACHEMOD (a transaction + ** or savepoint rollback done at the request of the caller) or this is + ** a hot-journal rollback. If it is a hot-journal rollback, the pager + ** is in state OPEN and holds an EXCLUSIVE lock. Hot-journal rollback + ** only reads from the main journal, not the sub-journal. */ - if( MEMDB && pPager->dbModified ){ - sqlite3BackupRestart(pPager->pBackup); - }else if( pPager->state!=PAGER_SYNCED && pPager->dbModified ){ - - /* The following block updates the change-counter. Exactly how it - ** does this depends on whether or not the atomic-update optimization - ** was enabled at compile time, and if this transaction meets the - ** runtime criteria to use the operation: - ** - ** * The file-system supports the atomic-write property for - ** blocks of size page-size, and - ** * This commit is not part of a multi-file transaction, and - ** * Exactly one page has been modified and store in the journal file. - ** - ** If the optimization was not enabled at compile time, then the - ** pager_incr_changecounter() function is called to update the change - ** counter in 'indirect-mode'. If the optimization is compiled in but - ** is not applicable to this transaction, call sqlite3JournalCreate() - ** to make sure the journal file has actually been created, then call - ** pager_incr_changecounter() to update the change-counter in indirect - ** mode. - ** - ** Otherwise, if the optimization is both enabled and applicable, - ** then call pager_incr_changecounter() to update the change-counter - ** in 'direct' mode. In this case the journal file will never be - ** created for this transaction. - */ -#ifdef SQLITE_ENABLE_ATOMIC_WRITE - PgHdr *pPg; - assert( isOpen(pPager->jfd) || pPager->journalMode==PAGER_JOURNALMODE_OFF ); - if( !zMaster && isOpen(pPager->jfd) - && pPager->journalOff==jrnlBufferSize(pPager) - && pPager->dbSize>=pPager->dbFileSize - && (0==(pPg = sqlite3PcacheDirtyList(pPager->pPCache)) || 0==pPg->pDirty) - ){ - /* Update the db file change counter via the direct-write method. The - ** following call will modify the in-memory representation of page 1 - ** to include the updated change counter and then write page 1 - ** directly to the database file. Because of the atomic-write - ** property of the host file-system, this is safe. - */ - rc = pager_incr_changecounter(pPager, 1); - }else{ - rc = sqlite3JournalCreate(pPager->jfd); - if( rc==SQLITE_OK ){ - rc = pager_incr_changecounter(pPager, 0); - } - } -#else - rc = pager_incr_changecounter(pPager, 0); -#endif - if( rc!=SQLITE_OK ) goto commit_phase_one_exit; - - /* If this transaction has made the database smaller, then all pages - ** being discarded by the truncation must be written to the journal - ** file. This can only happen in auto-vacuum mode. - ** - ** Before reading the pages with page numbers larger than the - ** current value of Pager.dbSize, set dbSize back to the value - ** that it took at the start of the transaction. Otherwise, the - ** calls to sqlite3PagerGet() return zeroed pages instead of - ** reading data from the database file. - */ -#ifndef SQLITE_OMIT_AUTOVACUUM - if( pPager->dbSizedbOrigSize - && pPager->journalMode!=PAGER_JOURNALMODE_OFF - ){ - Pgno i; /* Iterator variable */ - const Pgno iSkip = PAGER_MJ_PGNO(pPager); /* Pending lock page */ - const Pgno dbSize = pPager->dbSize; /* Database image size */ - pPager->dbSize = pPager->dbOrigSize; - for( i=dbSize+1; i<=pPager->dbOrigSize; i++ ){ - if( !sqlite3BitvecTest(pPager->pInJournal, i) && i!=iSkip ){ - PgHdr *pPage; /* Page to journal */ - rc = sqlite3PagerGet(pPager, i, &pPage); - if( rc!=SQLITE_OK ) goto commit_phase_one_exit; - rc = sqlite3PagerWrite(pPage); - sqlite3PagerUnref(pPage); - if( rc!=SQLITE_OK ) goto commit_phase_one_exit; - } - } - pPager->dbSize = dbSize; - } -#endif - - /* Write the master journal name into the journal file. If a master - ** journal file name has already been written to the journal file, - ** or if zMaster is NULL (no master journal), then this call is a no-op. - */ - rc = writeMasterJournal(pPager, zMaster); - if( rc!=SQLITE_OK ) goto commit_phase_one_exit; - - /* Sync the journal file. If the atomic-update optimization is being - ** used, this call will not create the journal file or perform any - ** real IO. - */ - rc = syncJournal(pPager); - if( rc!=SQLITE_OK ) goto commit_phase_one_exit; - - /* Write all dirty pages to the database file. */ - rc = pager_write_pagelist(sqlite3PcacheDirtyList(pPager->pPCache)); - if( rc!=SQLITE_OK ){ - assert( rc!=SQLITE_IOERR_BLOCKED ); - goto commit_phase_one_exit; - } - sqlite3PcacheCleanAll(pPager->pPCache); - - /* If the file on disk is not the same size as the database image, - ** then use pager_truncate to grow or shrink the file here. - */ - if( pPager->dbSize!=pPager->dbFileSize ){ - Pgno nNew = pPager->dbSize - (pPager->dbSize==PAGER_MJ_PGNO(pPager)); - assert( pPager->state>=PAGER_EXCLUSIVE ); - rc = pager_truncate(pPager, nNew); - if( rc!=SQLITE_OK ) goto commit_phase_one_exit; - } + assert( pPager->eState>=PAGER_WRITER_CACHEMOD + || (pPager->eState==PAGER_OPEN && pPager->eLock==EXCLUSIVE_LOCK) + ); + assert( pPager->eState>=PAGER_WRITER_CACHEMOD || isMainJrnl ); - /* Finally, sync the database file. */ - if( !pPager->noSync && !noSync ){ - rc = sqlite3OsSync(pPager->fd, pPager->sync_flags); - } - IOTRACE(("DBSYNC %p\n", pPager)) + /* Read the page number and page data from the journal or sub-journal + ** file. Return an error code to the caller if an IO error occurs. + */ + jfd = isMainJrnl ? pPager->jfd : pPager->sjfd; + rc = read32bits(jfd, *pOffset, &pgno); + if( rc!=SQLITE_OK ) return rc; + rc = sqlite3OsRead(jfd, (u8*)aData, pPager->pageSize, (*pOffset)+4); + if( rc!=SQLITE_OK ) return rc; + *pOffset += pPager->pageSize + 4 + isMainJrnl*4; - pPager->state = PAGER_SYNCED; + /* Sanity checking on the page. This is more important that I originally + ** thought. If a power failure occurs while the journal is being written, + ** it could cause invalid data to be written into the journal. We need to + ** detect this invalid data (with high probability) and ignore it. + */ + if( pgno==0 || pgno==PAGER_MJ_PGNO(pPager) ){ + assert( !isSavepnt ); + return SQLITE_DONE; } - -commit_phase_one_exit: - if( rc==SQLITE_IOERR_BLOCKED ){ - /* pager_incr_changecounter() may attempt to obtain an exclusive - ** lock to spill the cache and return IOERR_BLOCKED. But since - ** there is no chance the cache is inconsistent, it is - ** better to return SQLITE_BUSY. - **/ - rc = SQLITE_BUSY; + if( pgno>(Pgno)pPager->dbSize || sqlite3BitvecTest(pDone, pgno) ){ + return SQLITE_OK; + } + if( isMainJrnl ){ + rc = read32bits(jfd, (*pOffset)-4, &cksum); + if( rc ) return rc; + if( !isSavepnt && pager_cksum(pPager, (u8*)aData)!=cksum ){ + return SQLITE_DONE; + } } - return rc; -} - - -/* -** When this function is called, the database file has been completely -** updated to reflect the changes made by the current transaction and -** synced to disk. The journal file still exists in the file-system -** though, and if a failure occurs at this point it will eventually -** be used as a hot-journal and the current transaction rolled back. -** -** This function finalizes the journal file, either by deleting, -** truncating or partially zeroing it, so that it cannot be used -** for hot-journal rollback. Once this is done the transaction is -** irrevocably committed. -** -** If an error occurs, an IO error code is returned and the pager -** moves into the error state. Otherwise, SQLITE_OK is returned. -*/ -SQLITE_PRIVATE int sqlite3PagerCommitPhaseTwo(Pager *pPager){ - int rc = SQLITE_OK; /* Return code */ - /* Do not proceed if the pager is already in the error state. */ - if( pPager->errCode ){ - return pPager->errCode; + /* If this page has already been played by before during the current + ** rollback, then don't bother to play it back again. + */ + if( pDone && (rc = sqlite3BitvecSet(pDone, pgno))!=SQLITE_OK ){ + return rc; } - /* This function should not be called if the pager is not in at least - ** PAGER_RESERVED state. And indeed SQLite never does this. But it is - ** nice to have this defensive block here anyway. + /* When playing back page 1, restore the nReserve setting */ - if( NEVER(pPager->statenReserve!=((u8*)aData)[20] ){ + pPager->nReserve = ((u8*)aData)[20]; + pagerReportSize(pPager); } - /* An optimization. If the database was not actually modified during - ** this transaction, the pager is running in exclusive-mode and is - ** using persistent journals, then this function is a no-op. + /* If the pager is in CACHEMOD state, then there must be a copy of this + ** page in the pager cache. In this case just update the pager cache, + ** not the database file. The page is left marked dirty in this case. ** - ** The start of the journal file currently contains a single journal - ** header with the nRec field set to 0. If such a journal is used as - ** a hot-journal during hot-journal rollback, 0 changes will be made - ** to the database file. So there is no need to zero the journal - ** header. Since the pager is in exclusive mode, there is no need - ** to drop any locks either. + ** An exception to the above rule: If the database is in no-sync mode + ** and a page is moved during an incremental vacuum then the page may + ** not be in the pager cache. Later: if a malloc() or IO error occurs + ** during a Movepage() call, then the page may not be in the cache + ** either. So the condition described in the above paragraph is not + ** assert()able. + ** + ** If in WRITER_DBMOD, WRITER_FINISHED or OPEN state, then we update the + ** pager cache if it exists and the main file. The page is then marked + ** not dirty. Since this code is only executed in PAGER_OPEN state for + ** a hot-journal rollback, it is guaranteed that the page-cache is empty + ** if the pager is in OPEN state. + ** + ** Ticket #1171: The statement journal might contain page content that is + ** different from the page content at the start of the transaction. + ** This occurs when a page is changed prior to the start of a statement + ** then changed again within the statement. When rolling back such a + ** statement we must not write to the original database unless we know + ** for certain that original page contents are synced into the main rollback + ** journal. Otherwise, a power loss might leave modified data in the + ** database file without an entry in the rollback journal that can + ** restore the database to its original form. Two conditions must be + ** met before writing to the database files. (1) the database must be + ** locked. (2) we know that the original page content is fully synced + ** in the main journal either because the page is not in cache or else + ** the page is marked as needSync==0. + ** + ** 2008-04-14: When attempting to vacuum a corrupt database file, it + ** is possible to fail a statement on a database that does not yet exist. + ** Do not attempt to write if database file has never been opened. */ - if( pPager->dbModified==0 && pPager->exclusiveMode - && pPager->journalMode==PAGER_JOURNALMODE_PERSIST + if( pagerUseWal(pPager) ){ + pPg = 0; + }else{ + pPg = pager_lookup(pPager, pgno); + } + assert( pPg || !MEMDB ); + assert( pPager->eState!=PAGER_OPEN || pPg==0 ); + PAGERTRACE(("PLAYBACK %d page %d hash(%08x) %s\n", + PAGERID(pPager), pgno, pager_datahash(pPager->pageSize, (u8*)aData), + (isMainJrnl?"main-journal":"sub-journal") + )); + if( isMainJrnl ){ + isSynced = pPager->noSync || (*pOffset <= pPager->journalHdr); + }else{ + isSynced = (pPg==0 || 0==(pPg->flags & PGHDR_NEED_SYNC)); + } + if( isOpen(pPager->fd) + && (pPager->eState>=PAGER_WRITER_DBMOD || pPager->eState==PAGER_OPEN) + && isSynced ){ - assert( pPager->journalOff==JOURNAL_HDR_SZ(pPager) ); - return SQLITE_OK; + i64 ofst = (pgno-1)*(i64)pPager->pageSize; + testcase( !isSavepnt && pPg!=0 && (pPg->flags&PGHDR_NEED_SYNC)!=0 ); + assert( !pagerUseWal(pPager) ); + rc = sqlite3OsWrite(pPager->fd, (u8*)aData, pPager->pageSize, ofst); + if( pgno>pPager->dbFileSize ){ + pPager->dbFileSize = pgno; + } + if( pPager->pBackup ){ + CODEC1(pPager, aData, pgno, 3, rc=SQLITE_NOMEM); + sqlite3BackupUpdate(pPager->pBackup, pgno, (u8*)aData); + CODEC2(pPager, aData, pgno, 7, rc=SQLITE_NOMEM, aData); + } + }else if( !isMainJrnl && pPg==0 ){ + /* If this is a rollback of a savepoint and data was not written to + ** the database and the page is not in-memory, there is a potential + ** problem. When the page is next fetched by the b-tree layer, it + ** will be read from the database file, which may or may not be + ** current. + ** + ** There are a couple of different ways this can happen. All are quite + ** obscure. When running in synchronous mode, this can only happen + ** if the page is on the free-list at the start of the transaction, then + ** populated, then moved using sqlite3PagerMovepage(). + ** + ** The solution is to add an in-memory page to the cache containing + ** the data just read from the sub-journal. Mark the page as dirty + ** and if the pager requires a journal-sync, then mark the page as + ** requiring a journal-sync before it is written. + */ + assert( isSavepnt ); + assert( pPager->doNotSpill==0 ); + pPager->doNotSpill++; + rc = sqlite3PagerAcquire(pPager, pgno, &pPg, 1); + assert( pPager->doNotSpill==1 ); + pPager->doNotSpill--; + if( rc!=SQLITE_OK ) return rc; + pPg->flags &= ~PGHDR_NEED_READ; + sqlite3PcacheMakeDirty(pPg); } + if( pPg ){ + /* No page should ever be explicitly rolled back that is in use, except + ** for page 1 which is held in use in order to keep the lock on the + ** database active. However such a page may be rolled back as a result + ** of an internal error resulting in an automatic call to + ** sqlite3PagerRollback(). + */ + void *pData; + pData = pPg->pData; + memcpy(pData, (u8*)aData, pPager->pageSize); + pPager->xReiniter(pPg); + if( isMainJrnl && (!isSavepnt || *pOffset<=pPager->journalHdr) ){ + /* If the contents of this page were just restored from the main + ** journal file, then its content must be as they were when the + ** transaction was first opened. In this case we can mark the page + ** as clean, since there will be no need to write it out to the + ** database. + ** + ** There is one exception to this rule. If the page is being rolled + ** back as part of a savepoint (or statement) rollback from an + ** unsynced portion of the main journal file, then it is not safe + ** to mark the page as clean. This is because marking the page as + ** clean will clear the PGHDR_NEED_SYNC flag. Since the page is + ** already in the journal file (recorded in Pager.pInJournal) and + ** the PGHDR_NEED_SYNC flag is cleared, if the page is written to + ** again within this transaction, it will be marked as dirty but + ** the PGHDR_NEED_SYNC flag will not be set. It could then potentially + ** be written out into the database file before its journal file + ** segment is synced. If a crash occurs during or following this, + ** database corruption may ensue. + */ + assert( !pagerUseWal(pPager) ); + sqlite3PcacheMakeClean(pPg); + } + pager_set_pagehash(pPg); - PAGERTRACE(("COMMIT %d\n", PAGERID(pPager))); - assert( pPager->state==PAGER_SYNCED || MEMDB || !pPager->dbModified ); - rc = pager_end_transaction(pPager, pPager->setMaster); - return pager_error(pPager, rc); + /* If this was page 1, then restore the value of Pager.dbFileVers. + ** Do this before any decoding. */ + if( pgno==1 ){ + memcpy(&pPager->dbFileVers, &((u8*)pData)[24],sizeof(pPager->dbFileVers)); + } + + /* Decode the page just read from disk */ + CODEC1(pPager, pData, pPg->pgno, 3, rc=SQLITE_NOMEM); + sqlite3PcacheRelease(pPg); + } + return rc; } /* -** Rollback all changes. The database falls back to PAGER_SHARED mode. +** Parameter zMaster is the name of a master journal file. A single journal +** file that referred to the master journal file has just been rolled back. +** This routine checks if it is possible to delete the master journal file, +** and does so if it is. ** -** This function performs two tasks: +** Argument zMaster may point to Pager.pTmpSpace. So that buffer is not +** available for use within this function. ** -** 1) It rolls back the journal file, restoring all database file and -** in-memory cache pages to the state they were in when the transaction -** was opened, and -** 2) It finalizes the journal file, so that it is not used for hot -** rollback at any point in the future. +** When a master journal file is created, it is populated with the names +** of all of its child journals, one after another, formatted as utf-8 +** encoded text. The end of each child journal file is marked with a +** nul-terminator byte (0x00). i.e. the entire contents of a master journal +** file for a transaction involving two databases might be: ** -** subject to the following qualifications: +** "/home/bill/a.db-journal\x00/home/bill/b.db-journal\x00" ** -** * If the journal file is not yet open when this function is called, -** then only (2) is performed. In this case there is no journal file -** to roll back. +** A master journal file may only be deleted once all of its child +** journals have been rolled back. ** -** * If in an error state other than SQLITE_FULL, then task (1) is -** performed. If successful, task (2). Regardless of the outcome -** of either, the error state error code is returned to the caller -** (i.e. either SQLITE_IOERR or SQLITE_CORRUPT). +** This function reads the contents of the master-journal file into +** memory and loops through each of the child journal names. For +** each child journal, it checks if: ** -** * If the pager is in PAGER_RESERVED state, then attempt (1). Whether -** or not (1) is succussful, also attempt (2). If successful, return -** SQLITE_OK. Otherwise, enter the error state and return the first -** error code encountered. +** * if the child journal exists, and if so +** * if the child journal contains a reference to master journal +** file zMaster ** -** In this case there is no chance that the database was written to. -** So is safe to finalize the journal file even if the playback -** (operation 1) failed. However the pager must enter the error state -** as the contents of the in-memory cache are now suspect. +** If a child journal can be found that matches both of the criteria +** above, this function returns without doing anything. Otherwise, if +** no such child journal can be found, file zMaster is deleted from +** the file-system using sqlite3OsDelete(). ** -** * Finally, if in PAGER_EXCLUSIVE state, then attempt (1). Only -** attempt (2) if (1) is successful. Return SQLITE_OK if successful, -** otherwise enter the error state and return the error code from the -** failing operation. +** If an IO error within this function, an error code is returned. This +** function allocates memory by calling sqlite3Malloc(). If an allocation +** fails, SQLITE_NOMEM is returned. Otherwise, if no IO or malloc errors +** occur, SQLITE_OK is returned. ** -** In this case the database file may have been written to. So if the -** playback operation did not succeed it would not be safe to finalize -** the journal file. It needs to be left in the file-system so that -** some other process can use it to restore the database state (by -** hot-journal rollback). +** TODO: This function allocates a single block of memory to load +** the entire contents of the master journal file. This could be +** a couple of kilobytes or so - potentially larger than the page +** size. */ -SQLITE_PRIVATE int sqlite3PagerRollback(Pager *pPager){ - int rc = SQLITE_OK; /* Return code */ - PAGERTRACE(("ROLLBACK %d\n", PAGERID(pPager))); - if( !pPager->dbModified || !isOpen(pPager->jfd) ){ - rc = pager_end_transaction(pPager, pPager->setMaster); - }else if( pPager->errCode && pPager->errCode!=SQLITE_FULL ){ - if( pPager->state>=PAGER_EXCLUSIVE ){ - pager_playback(pPager, 0); - } - rc = pPager->errCode; +static int pager_delmaster(Pager *pPager, const char *zMaster){ + sqlite3_vfs *pVfs = pPager->pVfs; + int rc; /* Return code */ + sqlite3_file *pMaster; /* Malloc'd master-journal file descriptor */ + sqlite3_file *pJournal; /* Malloc'd child-journal file descriptor */ + char *zMasterJournal = 0; /* Contents of master journal file */ + i64 nMasterJournal; /* Size of master journal file */ + char *zJournal; /* Pointer to one journal within MJ file */ + char *zMasterPtr; /* Space to hold MJ filename from a journal file */ + int nMasterPtr; /* Amount of space allocated to zMasterPtr[] */ + + /* Allocate space for both the pJournal and pMaster file descriptors. + ** If successful, open the master journal file for reading. + */ + pMaster = (sqlite3_file *)sqlite3MallocZero(pVfs->szOsFile * 2); + pJournal = (sqlite3_file *)(((u8 *)pMaster) + pVfs->szOsFile); + if( !pMaster ){ + rc = SQLITE_NOMEM; }else{ - if( pPager->state==PAGER_RESERVED ){ - int rc2; - rc = pager_playback(pPager, 0); - rc2 = pager_end_transaction(pPager, pPager->setMaster); - if( rc==SQLITE_OK ){ - rc = rc2; - } - }else{ - rc = pager_playback(pPager, 0); + const int flags = (SQLITE_OPEN_READONLY|SQLITE_OPEN_MASTER_JOURNAL); + rc = sqlite3OsOpen(pVfs, zMaster, pMaster, flags, 0); + } + if( rc!=SQLITE_OK ) goto delmaster_out; + + /* Load the entire master journal file into space obtained from + ** sqlite3_malloc() and pointed to by zMasterJournal. Also obtain + ** sufficient space (in zMasterPtr) to hold the names of master + ** journal files extracted from regular rollback-journals. + */ + rc = sqlite3OsFileSize(pMaster, &nMasterJournal); + if( rc!=SQLITE_OK ) goto delmaster_out; + nMasterPtr = pVfs->mxPathname+1; + zMasterJournal = sqlite3Malloc((int)nMasterJournal + nMasterPtr + 1); + if( !zMasterJournal ){ + rc = SQLITE_NOMEM; + goto delmaster_out; + } + zMasterPtr = &zMasterJournal[nMasterJournal+1]; + rc = sqlite3OsRead(pMaster, zMasterJournal, (int)nMasterJournal, 0); + if( rc!=SQLITE_OK ) goto delmaster_out; + zMasterJournal[nMasterJournal] = 0; + + zJournal = zMasterJournal; + while( (zJournal-zMasterJournal)dbSizeValid = 0; + rc = readMasterJournal(pJournal, zMasterPtr, nMasterPtr); + sqlite3OsClose(pJournal); + if( rc!=SQLITE_OK ){ + goto delmaster_out; + } + + c = zMasterPtr[0]!=0 && strcmp(zMasterPtr, zMaster)==0; + if( c ){ + /* We have a match. Do not delete the master journal file. */ + goto delmaster_out; + } } + zJournal += (sqlite3Strlen30(zJournal)+1); + } + + sqlite3OsClose(pMaster); + rc = sqlite3OsDelete(pVfs, zMaster, 0); - /* If an error occurs during a ROLLBACK, we can no longer trust the pager - ** cache. So call pager_error() on the way out to make any error - ** persistent. - */ - rc = pager_error(pPager, rc); +delmaster_out: + sqlite3_free(zMasterJournal); + if( pMaster ){ + sqlite3OsClose(pMaster); + assert( !isOpen(pJournal) ); + sqlite3_free(pMaster); } return rc; } -/* -** Return TRUE if the database file is opened read-only. Return FALSE -** if the database is (in theory) writable. -*/ -SQLITE_PRIVATE u8 sqlite3PagerIsreadonly(Pager *pPager){ - return pPager->readOnly; -} - -/* -** Return the number of references to the pager. -*/ -SQLITE_PRIVATE int sqlite3PagerRefcount(Pager *pPager){ - return sqlite3PcacheRefCount(pPager->pPCache); -} - -/* -** Return the number of references to the specified page. -*/ -SQLITE_PRIVATE int sqlite3PagerPageRefcount(DbPage *pPage){ - return sqlite3PcachePageRefcount(pPage); -} - -#ifdef SQLITE_TEST -/* -** This routine is used for testing and analysis only. -*/ -SQLITE_PRIVATE int *sqlite3PagerStats(Pager *pPager){ - static int a[11]; - a[0] = sqlite3PcacheRefCount(pPager->pPCache); - a[1] = sqlite3PcachePagecount(pPager->pPCache); - a[2] = sqlite3PcacheGetCachesize(pPager->pPCache); - a[3] = pPager->dbSizeValid ? (int) pPager->dbSize : -1; - a[4] = pPager->state; - a[5] = pPager->errCode; - a[6] = pPager->nHit; - a[7] = pPager->nMiss; - a[8] = 0; /* Used to be pPager->nOvfl */ - a[9] = pPager->nRead; - a[10] = pPager->nWrite; - return a; -} -#endif /* -** Return true if this is an in-memory pager. +** This function is used to change the actual size of the database +** file in the file-system. This only happens when committing a transaction, +** or rolling back a transaction (including rolling back a hot-journal). +** +** If the main database file is not open, or the pager is not in either +** DBMOD or OPEN state, this function is a no-op. Otherwise, the size +** of the file is changed to nPage pages (nPage*pPager->pageSize bytes). +** If the file on disk is currently larger than nPage pages, then use the VFS +** xTruncate() method to truncate it. +** +** Or, it might might be the case that the file on disk is smaller than +** nPage pages. Some operating system implementations can get confused if +** you try to truncate a file to some size that is larger than it +** currently is, so detect this case and write a single zero byte to +** the end of the new file instead. +** +** If successful, return SQLITE_OK. If an IO error occurs while modifying +** the database file, return the error code to the caller. */ -SQLITE_PRIVATE int sqlite3PagerIsMemdb(Pager *pPager){ - return MEMDB; +static int pager_truncate(Pager *pPager, Pgno nPage){ + int rc = SQLITE_OK; + assert( pPager->eState!=PAGER_ERROR ); + assert( pPager->eState!=PAGER_READER ); + + if( isOpen(pPager->fd) + && (pPager->eState>=PAGER_WRITER_DBMOD || pPager->eState==PAGER_OPEN) + ){ + i64 currentSize, newSize; + int szPage = pPager->pageSize; + assert( pPager->eLock==EXCLUSIVE_LOCK ); + /* TODO: Is it safe to use Pager.dbFileSize here? */ + rc = sqlite3OsFileSize(pPager->fd, ¤tSize); + newSize = szPage*(i64)nPage; + if( rc==SQLITE_OK && currentSize!=newSize ){ + if( currentSize>newSize ){ + rc = sqlite3OsTruncate(pPager->fd, newSize); + }else if( (currentSize+szPage)<=newSize ){ + char *pTmp = pPager->pTmpSpace; + memset(pTmp, 0, szPage); + testcase( (newSize-szPage) == currentSize ); + testcase( (newSize-szPage) > currentSize ); + rc = sqlite3OsWrite(pPager->fd, pTmp, szPage, newSize-szPage); + } + if( rc==SQLITE_OK ){ + pPager->dbFileSize = nPage; + } + } + } + return rc; } /* -** Check that there are at least nSavepoint savepoints open. If there are -** currently less than nSavepoints open, then open one or more savepoints -** to make up the difference. If the number of savepoints is already -** equal to nSavepoint, then this function is a no-op. +** Set the value of the Pager.sectorSize variable for the given +** pager based on the value returned by the xSectorSize method +** of the open database file. The sector size will be used used +** to determine the size and alignment of journal header and +** master journal pointers within created journal files. ** -** If a memory allocation fails, SQLITE_NOMEM is returned. If an error -** occurs while opening the sub-journal file, then an IO error code is -** returned. Otherwise, SQLITE_OK. +** For temporary files the effective sector size is always 512 bytes. +** +** Otherwise, for non-temporary files, the effective sector size is +** the value returned by the xSectorSize() method rounded up to 32 if +** it is less than 32, or rounded down to MAX_SECTOR_SIZE if it +** is greater than MAX_SECTOR_SIZE. +** +** If the file has the SQLITE_IOCAP_POWERSAFE_OVERWRITE property, then set +** the effective sector size to its minimum value (512). The purpose of +** pPager->sectorSize is to define the "blast radius" of bytes that +** might change if a crash occurs while writing to a single byte in +** that range. But with POWERSAFE_OVERWRITE, the blast radius is zero +** (that is what POWERSAFE_OVERWRITE means), so we minimize the sector +** size. For backwards compatibility of the rollback journal file format, +** we cannot reduce the effective sector size below 512. */ -SQLITE_PRIVATE int sqlite3PagerOpenSavepoint(Pager *pPager, int nSavepoint){ - int rc = SQLITE_OK; /* Return code */ - int nCurrent = pPager->nSavepoint; /* Current number of savepoints */ - - if( nSavepoint>nCurrent && pPager->useJournal ){ - int ii; /* Iterator variable */ - PagerSavepoint *aNew; /* New Pager.aSavepoint array */ - - /* Either there is no active journal or the sub-journal is open or - ** the journal is always stored in memory */ - assert( pPager->nSavepoint==0 || isOpen(pPager->sjfd) || - pPager->journalMode==PAGER_JOURNALMODE_MEMORY ); +static void setSectorSize(Pager *pPager){ + assert( isOpen(pPager->fd) || pPager->tempFile ); - /* Grow the Pager.aSavepoint array using realloc(). Return SQLITE_NOMEM - ** if the allocation fails. Otherwise, zero the new portion in case a - ** malloc failure occurs while populating it in the for(...) loop below. - */ - aNew = (PagerSavepoint *)sqlite3Realloc( - pPager->aSavepoint, sizeof(PagerSavepoint)*nSavepoint - ); - if( !aNew ){ - return SQLITE_NOMEM; + if( pPager->tempFile + || (sqlite3OsDeviceCharacteristics(pPager->fd) & + SQLITE_IOCAP_POWERSAFE_OVERWRITE)!=0 + ){ + /* Sector size doesn't matter for temporary files. Also, the file + ** may not have been opened yet, in which case the OsSectorSize() + ** call will segfault. */ + pPager->sectorSize = 512; + }else{ + pPager->sectorSize = sqlite3OsSectorSize(pPager->fd); + if( pPager->sectorSize<32 ){ + pPager->sectorSize = 512; } - memset(&aNew[nCurrent], 0, (nSavepoint-nCurrent) * sizeof(PagerSavepoint)); - pPager->aSavepoint = aNew; - pPager->nSavepoint = nSavepoint; - - /* Populate the PagerSavepoint structures just allocated. */ - for(ii=nCurrent; iidbSizeValid ); - aNew[ii].nOrig = pPager->dbSize; - if( isOpen(pPager->jfd) && pPager->journalOff>0 ){ - aNew[ii].iOffset = pPager->journalOff; - }else{ - aNew[ii].iOffset = JOURNAL_HDR_SZ(pPager); - } - aNew[ii].iSubRec = pPager->nSubRec; - aNew[ii].pInSavepoint = sqlite3BitvecCreate(pPager->dbSize); - if( !aNew[ii].pInSavepoint ){ - return SQLITE_NOMEM; - } + if( pPager->sectorSize>MAX_SECTOR_SIZE ){ + assert( MAX_SECTOR_SIZE>=512 ); + pPager->sectorSize = MAX_SECTOR_SIZE; } - - /* Open the sub-journal, if it is not already opened. */ - rc = openSubJournal(pPager); } - - return rc; } /* -** This function is called to rollback or release (commit) a savepoint. -** The savepoint to release or rollback need not be the most recently -** created savepoint. +** Playback the journal and thus restore the database file to +** the state it was in before we started making changes. ** -** Parameter op is always either SAVEPOINT_ROLLBACK or SAVEPOINT_RELEASE. -** If it is SAVEPOINT_RELEASE, then release and destroy the savepoint with -** index iSavepoint. If it is SAVEPOINT_ROLLBACK, then rollback all changes -** that have occurred since the specified savepoint was created. +** The journal file format is as follows: ** -** The savepoint to rollback or release is identified by parameter -** iSavepoint. A value of 0 means to operate on the outermost savepoint -** (the first created). A value of (Pager.nSavepoint-1) means operate -** on the most recently created savepoint. If iSavepoint is greater than -** (Pager.nSavepoint-1), then this function is a no-op. +** (1) 8 byte prefix. A copy of aJournalMagic[]. +** (2) 4 byte big-endian integer which is the number of valid page records +** in the journal. If this value is 0xffffffff, then compute the +** number of page records from the journal size. +** (3) 4 byte big-endian integer which is the initial value for the +** sanity checksum. +** (4) 4 byte integer which is the number of pages to truncate the +** database to during a rollback. +** (5) 4 byte big-endian integer which is the sector size. The header +** is this many bytes in size. +** (6) 4 byte big-endian integer which is the page size. +** (7) zero padding out to the next sector size. +** (8) Zero or more pages instances, each as follows: +** + 4 byte page number. +** + pPager->pageSize bytes of data. +** + 4 byte checksum ** -** If a negative value is passed to this function, then the current -** transaction is rolled back. This is different to calling -** sqlite3PagerRollback() because this function does not terminate -** the transaction or unlock the database, it just restores the -** contents of the database to its original state. +** When we speak of the journal header, we mean the first 7 items above. +** Each entry in the journal is an instance of the 8th item. ** -** In any case, all savepoints with an index greater than iSavepoint -** are destroyed. If this is a release operation (op==SAVEPOINT_RELEASE), -** then savepoint iSavepoint is also destroyed. +** Call the value from the second bullet "nRec". nRec is the number of +** valid page entries in the journal. In most cases, you can compute the +** value of nRec from the size of the journal file. But if a power +** failure occurred while the journal was being written, it could be the +** case that the size of the journal file had already been increased but +** the extra entries had not yet made it safely to disk. In such a case, +** the value of nRec computed from the file size would be too large. For +** that reason, we always use the nRec value in the header. ** -** This function may return SQLITE_NOMEM if a memory allocation fails, -** or an IO error code if an IO error occurs while rolling back a -** savepoint. If no errors occur, SQLITE_OK is returned. -*/ -SQLITE_PRIVATE int sqlite3PagerSavepoint(Pager *pPager, int op, int iSavepoint){ - int rc = SQLITE_OK; +** If the nRec value is 0xffffffff it means that nRec should be computed +** from the file size. This value is used when the user selects the +** no-sync option for the journal. A power failure could lead to corruption +** in this case. But for things like temporary table (which will be +** deleted when the power is restored) we don't care. +** +** If the file opened as the journal file is not a well-formed +** journal file then all pages up to the first corrupted page are rolled +** back (or no pages if the journal header is corrupted). The journal file +** is then deleted and SQLITE_OK returned, just as if no corruption had +** been encountered. +** +** If an I/O or malloc() error occurs, the journal-file is not deleted +** and an error code is returned. +** +** The isHot parameter indicates that we are trying to rollback a journal +** that might be a hot journal. Or, it could be that the journal is +** preserved because of JOURNALMODE_PERSIST or JOURNALMODE_TRUNCATE. +** If the journal really is hot, reset the pager cache prior rolling +** back any content. If the journal is merely persistent, no reset is +** needed. +*/ +static int pager_playback(Pager *pPager, int isHot){ + sqlite3_vfs *pVfs = pPager->pVfs; + i64 szJ; /* Size of the journal file in bytes */ + u32 nRec; /* Number of Records in the journal */ + u32 u; /* Unsigned loop counter */ + Pgno mxPg = 0; /* Size of the original file in pages */ + int rc; /* Result code of a subroutine */ + int res = 1; /* Value returned by sqlite3OsAccess() */ + char *zMaster = 0; /* Name of master journal file if any */ + int needPagerReset; /* True to reset page prior to first page rollback */ - assert( op==SAVEPOINT_RELEASE || op==SAVEPOINT_ROLLBACK ); - assert( iSavepoint>=0 || op==SAVEPOINT_ROLLBACK ); + /* Figure out how many records are in the journal. Abort early if + ** the journal is empty. + */ + assert( isOpen(pPager->jfd) ); + rc = sqlite3OsFileSize(pPager->jfd, &szJ); + if( rc!=SQLITE_OK ){ + goto end_playback; + } - if( iSavepointnSavepoint ){ - int ii; /* Iterator variable */ - int nNew; /* Number of remaining savepoints after this op. */ + /* Read the master journal name from the journal, if it is present. + ** If a master journal file name is specified, but the file is not + ** present on disk, then the journal is not hot and does not need to be + ** played back. + ** + ** TODO: Technically the following is an error because it assumes that + ** buffer Pager.pTmpSpace is (mxPathname+1) bytes or larger. i.e. that + ** (pPager->pageSize >= pPager->pVfs->mxPathname+1). Using os_unix.c, + ** mxPathname is 512, which is the same as the minimum allowable value + ** for pageSize. + */ + zMaster = pPager->pTmpSpace; + rc = readMasterJournal(pPager->jfd, zMaster, pPager->pVfs->mxPathname+1); + if( rc==SQLITE_OK && zMaster[0] ){ + rc = sqlite3OsAccess(pVfs, zMaster, SQLITE_ACCESS_EXISTS, &res); + } + zMaster = 0; + if( rc!=SQLITE_OK || !res ){ + goto end_playback; + } + pPager->journalOff = 0; + needPagerReset = isHot; - /* Figure out how many savepoints will still be active after this - ** operation. Store this value in nNew. Then free resources associated - ** with any savepoints that are destroyed by this operation. + /* This loop terminates either when a readJournalHdr() or + ** pager_playback_one_page() call returns SQLITE_DONE or an IO error + ** occurs. + */ + while( 1 ){ + /* Read the next journal header from the journal file. If there are + ** not enough bytes left in the journal file for a complete header, or + ** it is corrupted, then a process must have failed while writing it. + ** This indicates nothing more needs to be rolled back. */ - nNew = iSavepoint + (op==SAVEPOINT_ROLLBACK); - for(ii=nNew; iinSavepoint; ii++){ - sqlite3BitvecDestroy(pPager->aSavepoint[ii].pInSavepoint); + rc = readJournalHdr(pPager, isHot, szJ, &nRec, &mxPg); + if( rc!=SQLITE_OK ){ + if( rc==SQLITE_DONE ){ + rc = SQLITE_OK; + } + goto end_playback; } - pPager->nSavepoint = nNew; - /* If this is a rollback operation, playback the specified savepoint. - ** If this is a temp-file, it is possible that the journal file has - ** not yet been opened. In this case there have been no changes to - ** the database file, so the playback operation can be skipped. + /* If nRec is 0xffffffff, then this journal was created by a process + ** working in no-sync mode. This means that the rest of the journal + ** file consists of pages, there are no more journal headers. Compute + ** the value of nRec based on this assumption. */ - if( op==SAVEPOINT_ROLLBACK && isOpen(pPager->jfd) ){ - PagerSavepoint *pSavepoint = (nNew==0)?0:&pPager->aSavepoint[nNew-1]; - rc = pagerPlaybackSavepoint(pPager, pSavepoint); - assert(rc!=SQLITE_DONE); - } - - /* If this is a release of the outermost savepoint, truncate - ** the sub-journal to zero bytes in size. */ - if( nNew==0 && op==SAVEPOINT_RELEASE && isOpen(pPager->sjfd) ){ - assert( rc==SQLITE_OK ); - rc = sqlite3OsTruncate(pPager->sjfd, 0); - pPager->nSubRec = 0; + if( nRec==0xffffffff ){ + assert( pPager->journalOff==JOURNAL_HDR_SZ(pPager) ); + nRec = (int)((szJ - JOURNAL_HDR_SZ(pPager))/JOURNAL_PG_SZ(pPager)); } - } - return rc; -} -/* -** Return the full pathname of the database file. -*/ -SQLITE_PRIVATE const char *sqlite3PagerFilename(Pager *pPager){ - return pPager->zFilename; -} - -/* -** Return the VFS structure for the pager. -*/ -SQLITE_PRIVATE const sqlite3_vfs *sqlite3PagerVfs(Pager *pPager){ - return pPager->pVfs; -} - -/* -** Return the file handle for the database file associated -** with the pager. This might return NULL if the file has -** not yet been opened. -*/ -SQLITE_PRIVATE sqlite3_file *sqlite3PagerFile(Pager *pPager){ - return pPager->fd; -} + /* If nRec is 0 and this rollback is of a transaction created by this + ** process and if this is the final header in the journal, then it means + ** that this part of the journal was being filled but has not yet been + ** synced to disk. Compute the number of pages based on the remaining + ** size of the file. + ** + ** The third term of the test was added to fix ticket #2565. + ** When rolling back a hot journal, nRec==0 always means that the next + ** chunk of the journal contains zero pages to be rolled back. But + ** when doing a ROLLBACK and the nRec==0 chunk is the last chunk in + ** the journal, it means that the journal might contain additional + ** pages that need to be rolled back and that the number of pages + ** should be computed based on the journal file size. + */ + if( nRec==0 && !isHot && + pPager->journalHdr+JOURNAL_HDR_SZ(pPager)==pPager->journalOff ){ + nRec = (int)((szJ - pPager->journalOff) / JOURNAL_PG_SZ(pPager)); + } -/* -** Return the full pathname of the journal file. -*/ -SQLITE_PRIVATE const char *sqlite3PagerJournalname(Pager *pPager){ - return pPager->zJournal; -} + /* If this is the first header read from the journal, truncate the + ** database file back to its original size. + */ + if( pPager->journalOff==JOURNAL_HDR_SZ(pPager) ){ + rc = pager_truncate(pPager, mxPg); + if( rc!=SQLITE_OK ){ + goto end_playback; + } + pPager->dbSize = mxPg; + } -/* -** Return true if fsync() calls are disabled for this pager. Return FALSE -** if fsync()s are executed normally. -*/ -SQLITE_PRIVATE int sqlite3PagerNosync(Pager *pPager){ - return pPager->noSync; -} + /* Copy original pages out of the journal and back into the + ** database file and/or page cache. + */ + for(u=0; ujournalOff,0,1,0); + if( rc!=SQLITE_OK ){ + if( rc==SQLITE_DONE ){ + pPager->journalOff = szJ; + break; + }else if( rc==SQLITE_IOERR_SHORT_READ ){ + /* If the journal has been truncated, simply stop reading and + ** processing the journal. This might happen if the journal was + ** not completely written and synced prior to a crash. In that + ** case, the database should have never been written in the + ** first place so it is OK to simply abandon the rollback. */ + rc = SQLITE_OK; + goto end_playback; + }else{ + /* If we are unable to rollback, quit and return the error + ** code. This will cause the pager to enter the error state + ** so that no further harm will be done. Perhaps the next + ** process to come along will be able to rollback the database. + */ + goto end_playback; + } + } + } + } + /*NOTREACHED*/ + assert( 0 ); -#ifdef SQLITE_HAS_CODEC -/* -** Set or retrieve the codec for this pager -*/ -static void sqlite3PagerSetCodec( - Pager *pPager, - void *(*xCodec)(void*,void*,Pgno,int), - void (*xCodecSizeChng)(void*,int,int), - void (*xCodecFree)(void*), - void *pCodec -){ - if( pPager->xCodecFree ) pPager->xCodecFree(pPager->pCodec); - pPager->xCodec = xCodec; - pPager->xCodecSizeChng = xCodecSizeChng; - pPager->xCodecFree = xCodecFree; - pPager->pCodec = pCodec; - pagerReportSize(pPager); -} -static void *sqlite3PagerGetCodec(Pager *pPager){ - return pPager->pCodec; -} +end_playback: + /* Following a rollback, the database file should be back in its original + ** state prior to the start of the transaction, so invoke the + ** SQLITE_FCNTL_DB_UNCHANGED file-control method to disable the + ** assertion that the transaction counter was modified. + */ +#ifdef SQLITE_DEBUG + if( pPager->fd->pMethods ){ + sqlite3OsFileControlHint(pPager->fd,SQLITE_FCNTL_DB_UNCHANGED,0); + } #endif -#ifndef SQLITE_OMIT_AUTOVACUUM + /* If this playback is happening automatically as a result of an IO or + ** malloc error that occurred after the change-counter was updated but + ** before the transaction was committed, then the change-counter + ** modification may just have been reverted. If this happens in exclusive + ** mode, then subsequent transactions performed by the connection will not + ** update the change-counter at all. This may lead to cache inconsistency + ** problems for other processes at some point in the future. So, just + ** in case this has happened, clear the changeCountDone flag now. + */ + pPager->changeCountDone = pPager->tempFile; + + if( rc==SQLITE_OK ){ + zMaster = pPager->pTmpSpace; + rc = readMasterJournal(pPager->jfd, zMaster, pPager->pVfs->mxPathname+1); + testcase( rc!=SQLITE_OK ); + } + if( rc==SQLITE_OK + && (pPager->eState>=PAGER_WRITER_DBMOD || pPager->eState==PAGER_OPEN) + ){ + rc = sqlite3PagerSync(pPager); + } + if( rc==SQLITE_OK ){ + rc = pager_end_transaction(pPager, zMaster[0]!='\0'); + testcase( rc!=SQLITE_OK ); + } + if( rc==SQLITE_OK && zMaster[0] && res ){ + /* If there was a master journal and this routine will return success, + ** see if it is possible to delete the master journal. + */ + rc = pager_delmaster(pPager, zMaster); + testcase( rc!=SQLITE_OK ); + } + + /* The Pager.sectorSize variable may have been updated while rolling + ** back a journal created by a process with a different sector size + ** value. Reset it to the correct value for this process. + */ + setSectorSize(pPager); + return rc; +} + + /* -** Move the page pPg to location pgno in the file. -** -** There must be no references to the page previously located at -** pgno (which we call pPgOld) though that page is allowed to be -** in cache. If the page previously located at pgno is not already -** in the rollback journal, it is not put there by by this routine. -** -** References to the page pPg remain valid. Updating any -** meta-data associated with pPg (i.e. data stored in the nExtra bytes -** allocated along with the page) is the responsibility of the caller. -** -** A transaction must be active when this routine is called. It used to be -** required that a statement transaction was not active, but this restriction -** has been removed (CREATE INDEX needs to move a page when a statement -** transaction is active). +** Read the content for page pPg out of the database file and into +** pPg->pData. A shared lock or greater must be held on the database +** file before this function is called. ** -** If the fourth argument, isCommit, is non-zero, then this page is being -** moved as part of a database reorganization just before the transaction -** is being committed. In this case, it is guaranteed that the database page -** pPg refers to will not be written to again within this transaction. +** If page 1 is read, then the value of Pager.dbFileVers[] is set to +** the value read from the database file. ** -** This function may return SQLITE_NOMEM or an IO error code if an error -** occurs. Otherwise, it returns SQLITE_OK. +** If an IO error occurs, then the IO error is returned to the caller. +** Otherwise, SQLITE_OK is returned. */ -SQLITE_PRIVATE int sqlite3PagerMovepage(Pager *pPager, DbPage *pPg, Pgno pgno, int isCommit){ - PgHdr *pPgOld; /* The page being overwritten. */ - Pgno needSyncPgno = 0; /* Old value of pPg->pgno, if sync is required */ - int rc; /* Return code */ - Pgno origPgno; /* The original page number */ +static int readDbPage(PgHdr *pPg){ + Pager *pPager = pPg->pPager; /* Pager object associated with page pPg */ + Pgno pgno = pPg->pgno; /* Page number to read */ + int rc = SQLITE_OK; /* Return code */ + int isInWal = 0; /* True if page is in log file */ + int pgsz = pPager->pageSize; /* Number of bytes to read */ - assert( pPg->nRef>0 ); + assert( pPager->eState>=PAGER_READER && !MEMDB ); + assert( isOpen(pPager->fd) ); - /* If the page being moved is dirty and has not been saved by the latest - ** savepoint, then save the current contents of the page into the - ** sub-journal now. This is required to handle the following scenario: - ** - ** BEGIN; - ** - ** SAVEPOINT one; - ** - ** ROLLBACK TO one; - ** - ** If page X were not written to the sub-journal here, it would not - ** be possible to restore its contents when the "ROLLBACK TO one" - ** statement were is processed. - ** - ** subjournalPage() may need to allocate space to store pPg->pgno into - ** one or more savepoint bitvecs. This is the reason this function - ** may return SQLITE_NOMEM. - */ - if( pPg->flags&PGHDR_DIRTY - && subjRequiresPage(pPg) - && SQLITE_OK!=(rc = subjournalPage(pPg)) - ){ - return rc; + if( NEVER(!isOpen(pPager->fd)) ){ + assert( pPager->tempFile ); + memset(pPg->pData, 0, pPager->pageSize); + return SQLITE_OK; } - PAGERTRACE(("MOVE %d page %d (needSync=%d) moves to %d\n", - PAGERID(pPager), pPg->pgno, (pPg->flags&PGHDR_NEED_SYNC)?1:0, pgno)); - IOTRACE(("MOVE %p %d %d\n", pPager, pPg->pgno, pgno)) - - /* If the journal needs to be sync()ed before page pPg->pgno can - ** be written to, store pPg->pgno in local variable needSyncPgno. - ** - ** If the isCommit flag is set, there is no need to remember that - ** the journal needs to be sync()ed before database page pPg->pgno - ** can be written to. The caller has already promised not to write to it. - */ - if( (pPg->flags&PGHDR_NEED_SYNC) && !isCommit ){ - needSyncPgno = pPg->pgno; - assert( pageInJournal(pPg) || pPg->pgno>pPager->dbOrigSize ); - assert( pPg->flags&PGHDR_DIRTY ); - assert( pPager->needSync ); + if( pagerUseWal(pPager) ){ + /* Try to pull the page from the write-ahead log. */ + rc = sqlite3WalRead(pPager->pWal, pgno, &isInWal, pgsz, pPg->pData); } - - /* If the cache contains a page with page-number pgno, remove it - ** from its hash chain. Also, if the PgHdr.needSync was set for - ** page pgno before the 'move' operation, it needs to be retained - ** for the page moved there. - */ - pPg->flags &= ~PGHDR_NEED_SYNC; - pPgOld = pager_lookup(pPager, pgno); - assert( !pPgOld || pPgOld->nRef==1 ); - if( pPgOld ){ - pPg->flags |= (pPgOld->flags&PGHDR_NEED_SYNC); - sqlite3PcacheDrop(pPgOld); + if( rc==SQLITE_OK && !isInWal ){ + i64 iOffset = (pgno-1)*(i64)pPager->pageSize; + rc = sqlite3OsRead(pPager->fd, pPg->pData, pgsz, iOffset); + if( rc==SQLITE_IOERR_SHORT_READ ){ + rc = SQLITE_OK; + } } - origPgno = pPg->pgno; - sqlite3PcacheMove(pPg, pgno); - sqlite3PcacheMakeDirty(pPg); - pPager->dbModified = 1; - - if( needSyncPgno ){ - /* If needSyncPgno is non-zero, then the journal file needs to be - ** sync()ed before any data is written to database file page needSyncPgno. - ** Currently, no such page exists in the page-cache and the - ** "is journaled" bitvec flag has been set. This needs to be remedied by - ** loading the page into the pager-cache and setting the PgHdr.needSync - ** flag. - ** - ** If the attempt to load the page into the page-cache fails, (due - ** to a malloc() or IO failure), clear the bit in the pInJournal[] - ** array. Otherwise, if the page is loaded and written again in - ** this transaction, it may be written to the database file before - ** it is synced into the journal file. This way, it may end up in - ** the journal file twice, but that is not a problem. - ** - ** The sqlite3PagerGet() call may cause the journal to sync. So make - ** sure the Pager.needSync flag is set too. - */ - PgHdr *pPgHdr; - assert( pPager->needSync ); - rc = sqlite3PagerGet(pPager, needSyncPgno, &pPgHdr); - if( rc!=SQLITE_OK ){ - if( pPager->pInJournal && needSyncPgno<=pPager->dbOrigSize ){ - assert( pPager->pTmpSpace!=0 ); - sqlite3BitvecClear(pPager->pInJournal, needSyncPgno, pPager->pTmpSpace); - } - return rc; + if( pgno==1 ){ + if( rc ){ + /* If the read is unsuccessful, set the dbFileVers[] to something + ** that will never be a valid file version. dbFileVers[] is a copy + ** of bytes 24..39 of the database. Bytes 28..31 should always be + ** zero or the size of the database in page. Bytes 32..35 and 35..39 + ** should be page numbers which are never 0xffffffff. So filling + ** pPager->dbFileVers[] with all 0xff bytes should suffice. + ** + ** For an encrypted database, the situation is more complex: bytes + ** 24..39 of the database are white noise. But the probability of + ** white noising equaling 16 bytes of 0xff is vanishingly small so + ** we should still be ok. + */ + memset(pPager->dbFileVers, 0xff, sizeof(pPager->dbFileVers)); + }else{ + u8 *dbFileVers = &((u8*)pPg->pData)[24]; + memcpy(&pPager->dbFileVers, dbFileVers, sizeof(pPager->dbFileVers)); } - pPager->needSync = 1; - assert( pPager->noSync==0 && !MEMDB ); - pPgHdr->flags |= PGHDR_NEED_SYNC; - sqlite3PcacheMakeDirty(pPgHdr); - sqlite3PagerUnref(pPgHdr); } + CODEC1(pPager, pPg->pData, pgno, 3, rc = SQLITE_NOMEM); - /* - ** For an in-memory database, make sure the original page continues - ** to exist, in case the transaction needs to roll back. We allocate - ** the page now, instead of at rollback, because we can better deal - ** with an out-of-memory error now. Ticket #3761. - */ - if( MEMDB ){ - DbPage *pNew; - rc = sqlite3PagerAcquire(pPager, origPgno, &pNew, 1); - if( rc!=SQLITE_OK ) return rc; - sqlite3PagerUnref(pNew); - } + PAGER_INCR(sqlite3_pager_readdb_count); + PAGER_INCR(pPager->nRead); + IOTRACE(("PGIN %p %d\n", pPager, pgno)); + PAGERTRACE(("FETCH %d page %d hash(%08x)\n", + PAGERID(pPager), pgno, pager_pagehash(pPg))); - return SQLITE_OK; + return rc; } -#endif /* -** Return a pointer to the data for the specified page. +** Update the value of the change-counter at offsets 24 and 92 in +** the header and the sqlite version number at offset 96. +** +** This is an unconditional update. See also the pager_incr_changecounter() +** routine which only updates the change-counter if the update is actually +** needed, as determined by the pPager->changeCountDone state variable. */ -SQLITE_PRIVATE void *sqlite3PagerGetData(DbPage *pPg){ - assert( pPg->nRef>0 || pPg->pPager->memDb ); - return pPg->pData; +static void pager_write_changecounter(PgHdr *pPg){ + u32 change_counter; + + /* Increment the value just read and write it back to byte 24. */ + change_counter = sqlite3Get4byte((u8*)pPg->pPager->dbFileVers)+1; + put32bits(((char*)pPg->pData)+24, change_counter); + + /* Also store the SQLite version number in bytes 96..99 and in + ** bytes 92..95 store the change counter for which the version number + ** is valid. */ + put32bits(((char*)pPg->pData)+92, change_counter); + put32bits(((char*)pPg->pData)+96, SQLITE_VERSION_NUMBER); } +#ifndef SQLITE_OMIT_WAL /* -** Return a pointer to the Pager.nExtra bytes of "extra" space -** allocated along with the specified page. +** This function is invoked once for each page that has already been +** written into the log file when a WAL transaction is rolled back. +** Parameter iPg is the page number of said page. The pCtx argument +** is actually a pointer to the Pager structure. +** +** If page iPg is present in the cache, and has no outstanding references, +** it is discarded. Otherwise, if there are one or more outstanding +** references, the page content is reloaded from the database. If the +** attempt to reload content from the database is required and fails, +** return an SQLite error code. Otherwise, SQLITE_OK. */ -SQLITE_PRIVATE void *sqlite3PagerGetExtra(DbPage *pPg){ - Pager *pPager = pPg->pPager; - return (pPager?pPg->pExtra:0); +static int pagerUndoCallback(void *pCtx, Pgno iPg){ + int rc = SQLITE_OK; + Pager *pPager = (Pager *)pCtx; + PgHdr *pPg; + + pPg = sqlite3PagerLookup(pPager, iPg); + if( pPg ){ + if( sqlite3PcachePageRefcount(pPg)==1 ){ + sqlite3PcacheDrop(pPg); + }else{ + rc = readDbPage(pPg); + if( rc==SQLITE_OK ){ + pPager->xReiniter(pPg); + } + sqlite3PagerUnref(pPg); + } + } + + /* Normally, if a transaction is rolled back, any backup processes are + ** updated as data is copied out of the rollback journal and into the + ** database. This is not generally possible with a WAL database, as + ** rollback involves simply truncating the log file. Therefore, if one + ** or more frames have already been written to the log (and therefore + ** also copied into the backup databases) as part of this transaction, + ** the backups must be restarted. + */ + sqlite3BackupRestart(pPager->pBackup); + + return rc; } /* -** Get/set the locking-mode for this pager. Parameter eMode must be one -** of PAGER_LOCKINGMODE_QUERY, PAGER_LOCKINGMODE_NORMAL or -** PAGER_LOCKINGMODE_EXCLUSIVE. If the parameter is not _QUERY, then -** the locking-mode is set to the value specified. -** -** The returned value is either PAGER_LOCKINGMODE_NORMAL or -** PAGER_LOCKINGMODE_EXCLUSIVE, indicating the current (possibly updated) -** locking-mode. +** This function is called to rollback a transaction on a WAL database. */ -SQLITE_PRIVATE int sqlite3PagerLockingMode(Pager *pPager, int eMode){ - assert( eMode==PAGER_LOCKINGMODE_QUERY - || eMode==PAGER_LOCKINGMODE_NORMAL - || eMode==PAGER_LOCKINGMODE_EXCLUSIVE ); - assert( PAGER_LOCKINGMODE_QUERY<0 ); - assert( PAGER_LOCKINGMODE_NORMAL>=0 && PAGER_LOCKINGMODE_EXCLUSIVE>=0 ); - if( eMode>=0 && !pPager->tempFile ){ - pPager->exclusiveMode = (u8)eMode; +static int pagerRollbackWal(Pager *pPager){ + int rc; /* Return Code */ + PgHdr *pList; /* List of dirty pages to revert */ + + /* For all pages in the cache that are currently dirty or have already + ** been written (but not committed) to the log file, do one of the + ** following: + ** + ** + Discard the cached page (if refcount==0), or + ** + Reload page content from the database (if refcount>0). + */ + pPager->dbSize = pPager->dbOrigSize; + rc = sqlite3WalUndo(pPager->pWal, pagerUndoCallback, (void *)pPager); + pList = sqlite3PcacheDirtyList(pPager->pPCache); + while( pList && rc==SQLITE_OK ){ + PgHdr *pNext = pList->pDirty; + rc = pagerUndoCallback((void *)pPager, pList->pgno); + pList = pNext; } - return (int)pPager->exclusiveMode; + + return rc; } /* -** Get/set the journal-mode for this pager. Parameter eMode must be one of: -** -** PAGER_JOURNALMODE_QUERY -** PAGER_JOURNALMODE_DELETE -** PAGER_JOURNALMODE_TRUNCATE -** PAGER_JOURNALMODE_PERSIST -** PAGER_JOURNALMODE_OFF -** PAGER_JOURNALMODE_MEMORY -** -** If the parameter is not _QUERY, then the journal_mode is set to the -** value specified if the change is allowed. The change is disallowed -** for the following reasons: -** -** * An in-memory database can only have its journal_mode set to _OFF -** or _MEMORY. -** -** * The journal mode may not be changed while a transaction is active. +** This function is a wrapper around sqlite3WalFrames(). As well as logging +** the contents of the list of pages headed by pList (connected by pDirty), +** this function notifies any active backup processes that the pages have +** changed. ** -** The returned indicate the current (possibly updated) journal-mode. -*/ -SQLITE_PRIVATE int sqlite3PagerJournalMode(Pager *pPager, int eMode){ - assert( eMode==PAGER_JOURNALMODE_QUERY - || eMode==PAGER_JOURNALMODE_DELETE - || eMode==PAGER_JOURNALMODE_TRUNCATE - || eMode==PAGER_JOURNALMODE_PERSIST - || eMode==PAGER_JOURNALMODE_OFF - || eMode==PAGER_JOURNALMODE_MEMORY ); - assert( PAGER_JOURNALMODE_QUERY<0 ); - if( eMode>=0 - && (!MEMDB || eMode==PAGER_JOURNALMODE_MEMORY - || eMode==PAGER_JOURNALMODE_OFF) - && !pPager->dbModified - && (!isOpen(pPager->jfd) || 0==pPager->journalOff) - ){ - if( isOpen(pPager->jfd) ){ - sqlite3OsClose(pPager->jfd); +** The list of pages passed into this routine is always sorted by page number. +** Hence, if page 1 appears anywhere on the list, it will be the first page. +*/ +static int pagerWalFrames( + Pager *pPager, /* Pager object */ + PgHdr *pList, /* List of frames to log */ + Pgno nTruncate, /* Database size after this commit */ + int isCommit /* True if this is a commit */ +){ + int rc; /* Return code */ + int nList; /* Number of pages in pList */ +#if defined(SQLITE_DEBUG) || defined(SQLITE_CHECK_PAGES) + PgHdr *p; /* For looping over pages */ +#endif + + assert( pPager->pWal ); + assert( pList ); +#ifdef SQLITE_DEBUG + /* Verify that the page list is in accending order */ + for(p=pList; p && p->pDirty; p=p->pDirty){ + assert( p->pgno < p->pDirty->pgno ); + } +#endif + + assert( pList->pDirty==0 || isCommit ); + if( isCommit ){ + /* If a WAL transaction is being committed, there is no point in writing + ** any pages with page numbers greater than nTruncate into the WAL file. + ** They will never be read by any client. So remove them from the pDirty + ** list here. */ + PgHdr *p; + PgHdr **ppNext = &pList; + nList = 0; + for(p=pList; (*ppNext = p)!=0; p=p->pDirty){ + if( p->pgno<=nTruncate ){ + ppNext = &p->pDirty; + nList++; + } } - pPager->journalMode = (u8)eMode; + assert( pList ); + }else{ + nList = 1; } - return (int)pPager->journalMode; + pPager->aStat[PAGER_STAT_WRITE] += nList; + + if( pList->pgno==1 ) pager_write_changecounter(pList); + rc = sqlite3WalFrames(pPager->pWal, + pPager->pageSize, pList, nTruncate, isCommit, pPager->walSyncFlags + ); + if( rc==SQLITE_OK && pPager->pBackup ){ + PgHdr *p; + for(p=pList; p; p=p->pDirty){ + sqlite3BackupUpdate(pPager->pBackup, p->pgno, (u8 *)p->pData); + } + } + +#ifdef SQLITE_CHECK_PAGES + pList = sqlite3PcacheDirtyList(pPager->pPCache); + for(p=pList; p; p=p->pDirty){ + pager_set_pagehash(p); + } +#endif + + return rc; } /* -** Get/set the size-limit used for persistent journal files. +** Begin a read transaction on the WAL. ** -** Setting the size limit to -1 means no limit is enforced. -** An attempt to set a limit smaller than -1 is a no-op. +** This routine used to be called "pagerOpenSnapshot()" because it essentially +** makes a snapshot of the database at the current point in time and preserves +** that snapshot for use by the reader in spite of concurrently changes by +** other writers or checkpointers. */ -SQLITE_PRIVATE i64 sqlite3PagerJournalSizeLimit(Pager *pPager, i64 iLimit){ - if( iLimit>=-1 ){ - pPager->journalSizeLimit = iLimit; +static int pagerBeginReadTransaction(Pager *pPager){ + int rc; /* Return code */ + int changed = 0; /* True if cache must be reset */ + + assert( pagerUseWal(pPager) ); + assert( pPager->eState==PAGER_OPEN || pPager->eState==PAGER_READER ); + + /* sqlite3WalEndReadTransaction() was not called for the previous + ** transaction in locking_mode=EXCLUSIVE. So call it now. If we + ** are in locking_mode=NORMAL and EndRead() was previously called, + ** the duplicate call is harmless. + */ + sqlite3WalEndReadTransaction(pPager->pWal); + + rc = sqlite3WalBeginReadTransaction(pPager->pWal, &changed); + if( rc!=SQLITE_OK || changed ){ + pager_reset(pPager); } - return pPager->journalSizeLimit; + + return rc; } +#endif /* -** Return a pointer to the pPager->pBackup variable. The backup module -** in backup.c maintains the content of this variable. This module -** uses it opaquely as an argument to sqlite3BackupRestart() and -** sqlite3BackupUpdate() only. +** This function is called as part of the transition from PAGER_OPEN +** to PAGER_READER state to determine the size of the database file +** in pages (assuming the page size currently stored in Pager.pageSize). +** +** If no error occurs, SQLITE_OK is returned and the size of the database +** in pages is stored in *pnPage. Otherwise, an error code (perhaps +** SQLITE_IOERR_FSTAT) is returned and *pnPage is left unmodified. */ -SQLITE_PRIVATE sqlite3_backup **sqlite3PagerBackupPtr(Pager *pPager){ - return &pPager->pBackup; -} +static int pagerPagecount(Pager *pPager, Pgno *pnPage){ + Pgno nPage; /* Value to return via *pnPage */ -#endif /* SQLITE_OMIT_DISKIO */ + /* Query the WAL sub-system for the database size. The WalDbsize() + ** function returns zero if the WAL is not open (i.e. Pager.pWal==0), or + ** if the database size is not available. The database size is not + ** available from the WAL sub-system if the log file is empty or + ** contains no valid committed transactions. + */ + assert( pPager->eState==PAGER_OPEN ); + assert( pPager->eLock>=SHARED_LOCK ); + nPage = sqlite3WalDbsize(pPager->pWal); -/************** End of pager.c ***********************************************/ -/************** Begin file btmutex.c *****************************************/ + /* If the database size was not available from the WAL sub-system, + ** determine it based on the size of the database file. If the size + ** of the database file is not an integer multiple of the page-size, + ** round down to the nearest page. Except, any file larger than 0 + ** bytes in size is considered to contain at least one page. + */ + if( nPage==0 ){ + i64 n = 0; /* Size of db file in bytes */ + assert( isOpen(pPager->fd) || pPager->tempFile ); + if( isOpen(pPager->fd) ){ + int rc = sqlite3OsFileSize(pPager->fd, &n); + if( rc!=SQLITE_OK ){ + return rc; + } + } + nPage = (Pgno)((n+pPager->pageSize-1) / pPager->pageSize); + } + + /* If the current number of pages in the file is greater than the + ** configured maximum pager number, increase the allowed limit so + ** that the file can be read. + */ + if( nPage>pPager->mxPgno ){ + pPager->mxPgno = (Pgno)nPage; + } + + *pnPage = nPage; + return SQLITE_OK; +} + +#ifndef SQLITE_OMIT_WAL /* -** 2007 August 27 +** Check if the *-wal file that corresponds to the database opened by pPager +** exists if the database is not empy, or verify that the *-wal file does +** not exist (by deleting it) if the database file is empty. ** -** The author disclaims copyright to this source code. In place of -** a legal notice, here is a blessing: -** -** May you do good and not evil. -** May you find forgiveness for yourself and forgive others. -** May you share freely, never taking more than you give. -** -************************************************************************* +** If the database is not empty and the *-wal file exists, open the pager +** in WAL mode. If the database is empty or if no *-wal file exists and +** if no error occurs, make sure Pager.journalMode is not set to +** PAGER_JOURNALMODE_WAL. ** -** $Id: btmutex.c,v 1.15 2009/04/10 12:55:17 danielk1977 Exp $ +** Return SQLITE_OK or an error code. ** -** This file contains code used to implement mutexes on Btree objects. -** This code really belongs in btree.c. But btree.c is getting too -** big and we want to break it down some. This packaged seemed like -** a good breakout. +** The caller must hold a SHARED lock on the database file to call this +** function. Because an EXCLUSIVE lock on the db file is required to delete +** a WAL on a none-empty database, this ensures there is no race condition +** between the xAccess() below and an xDelete() being executed by some +** other connection. */ -/************** Include btreeInt.h in the middle of btmutex.c ****************/ -/************** Begin file btreeInt.h ****************************************/ +static int pagerOpenWalIfPresent(Pager *pPager){ + int rc = SQLITE_OK; + assert( pPager->eState==PAGER_OPEN ); + assert( pPager->eLock>=SHARED_LOCK ); + + if( !pPager->tempFile ){ + int isWal; /* True if WAL file exists */ + Pgno nPage; /* Size of the database file */ + + rc = pagerPagecount(pPager, &nPage); + if( rc ) return rc; + if( nPage==0 ){ + rc = sqlite3OsDelete(pPager->pVfs, pPager->zWal, 0); + isWal = 0; + }else{ + rc = sqlite3OsAccess( + pPager->pVfs, pPager->zWal, SQLITE_ACCESS_EXISTS, &isWal + ); + } + if( rc==SQLITE_OK ){ + if( isWal ){ + testcase( sqlite3PcachePagecount(pPager->pPCache)==0 ); + rc = sqlite3PagerOpenWal(pPager, 0); + }else if( pPager->journalMode==PAGER_JOURNALMODE_WAL ){ + pPager->journalMode = PAGER_JOURNALMODE_DELETE; + } + } + } + return rc; +} +#endif + /* -** 2004 April 6 -** -** The author disclaims copyright to this source code. In place of -** a legal notice, here is a blessing: -** -** May you do good and not evil. -** May you find forgiveness for yourself and forgive others. -** May you share freely, never taking more than you give. -** -************************************************************************* -** $Id: btreeInt.h,v 1.49 2009/06/24 05:40:34 danielk1977 Exp $ -** -** This file implements a external (disk-based) database using BTrees. -** For a detailed discussion of BTrees, refer to -** -** Donald E. Knuth, THE ART OF COMPUTER PROGRAMMING, Volume 3: -** "Sorting And Searching", pages 473-480. Addison-Wesley -** Publishing Company, Reading, Massachusetts. -** -** The basic idea is that each page of the file contains N database -** entries and N+1 pointers to subpages. +** Playback savepoint pSavepoint. Or, if pSavepoint==NULL, then playback +** the entire master journal file. The case pSavepoint==NULL occurs when +** a ROLLBACK TO command is invoked on a SAVEPOINT that is a transaction +** savepoint. ** -** ---------------------------------------------------------------- -** | Ptr(0) | Key(0) | Ptr(1) | Key(1) | ... | Key(N-1) | Ptr(N) | -** ---------------------------------------------------------------- +** When pSavepoint is not NULL (meaning a non-transaction savepoint is +** being rolled back), then the rollback consists of up to three stages, +** performed in the order specified: ** -** All of the keys on the page that Ptr(0) points to have values less -** than Key(0). All of the keys on page Ptr(1) and its subpages have -** values greater than Key(0) and less than Key(1). All of the keys -** on Ptr(N) and its subpages have values greater than Key(N-1). And -** so forth. +** * Pages are played back from the main journal starting at byte +** offset PagerSavepoint.iOffset and continuing to +** PagerSavepoint.iHdrOffset, or to the end of the main journal +** file if PagerSavepoint.iHdrOffset is zero. ** -** Finding a particular key requires reading O(log(M)) pages from the -** disk where M is the number of entries in the tree. +** * If PagerSavepoint.iHdrOffset is not zero, then pages are played +** back starting from the journal header immediately following +** PagerSavepoint.iHdrOffset to the end of the main journal file. ** -** In this implementation, a single file can hold one or more separate -** BTrees. Each BTree is identified by the index of its root page. The -** key and data for any entry are combined to form the "payload". A -** fixed amount of payload can be carried directly on the database -** page. If the payload is larger than the preset amount then surplus -** bytes are stored on overflow pages. The payload for an entry -** and the preceding pointer are combined to form a "Cell". Each -** page has a small header which contains the Ptr(N) pointer and other -** information such as the size of key and data. +** * Pages are then played back from the sub-journal file, starting +** with the PagerSavepoint.iSubRec and continuing to the end of +** the journal file. ** -** FORMAT DETAILS +** Throughout the rollback process, each time a page is rolled back, the +** corresponding bit is set in a bitvec structure (variable pDone in the +** implementation below). This is used to ensure that a page is only +** rolled back the first time it is encountered in either journal. ** -** The file is divided into pages. The first page is called page 1, -** the second is page 2, and so forth. A page number of zero indicates -** "no such page". The page size can be anything between 512 and 65536. -** Each page can be either a btree page, a freelist page or an overflow -** page. +** If pSavepoint is NULL, then pages are only played back from the main +** journal file. There is no need for a bitvec in this case. ** -** The first page is always a btree page. The first 100 bytes of the first -** page contain a special header (the "file header") that describes the file. -** The format of the file header is as follows: -** -** OFFSET SIZE DESCRIPTION -** 0 16 Header string: "SQLite format 3\000" -** 16 2 Page size in bytes. -** 18 1 File format write version -** 19 1 File format read version -** 20 1 Bytes of unused space at the end of each page -** 21 1 Max embedded payload fraction -** 22 1 Min embedded payload fraction -** 23 1 Min leaf payload fraction -** 24 4 File change counter -** 28 4 Reserved for future use -** 32 4 First freelist page -** 36 4 Number of freelist pages in the file -** 40 60 15 4-byte meta values passed to higher layers -** -** 40 4 Schema cookie -** 44 4 File format of schema layer -** 48 4 Size of page cache -** 52 4 Largest root-page (auto/incr_vacuum) -** 56 4 1=UTF-8 2=UTF16le 3=UTF16be -** 60 4 User version -** 64 4 Incremental vacuum mode -** 68 4 unused -** 72 4 unused -** 76 4 unused -** -** All of the integer values are big-endian (most significant byte first). -** -** The file change counter is incremented when the database is changed -** This counter allows other processes to know when the file has changed -** and thus when they need to flush their cache. -** -** The max embedded payload fraction is the amount of the total usable -** space in a page that can be consumed by a single cell for standard -** B-tree (non-LEAFDATA) tables. A value of 255 means 100%. The default -** is to limit the maximum cell size so that at least 4 cells will fit -** on one page. Thus the default max embedded payload fraction is 64. -** -** If the payload for a cell is larger than the max payload, then extra -** payload is spilled to overflow pages. Once an overflow page is allocated, -** as many bytes as possible are moved into the overflow pages without letting -** the cell size drop below the min embedded payload fraction. -** -** The min leaf payload fraction is like the min embedded payload fraction -** except that it applies to leaf nodes in a LEAFDATA tree. The maximum -** payload fraction for a LEAFDATA tree is always 100% (or 255) and it -** not specified in the header. -** -** Each btree pages is divided into three sections: The header, the -** cell pointer array, and the cell content area. Page 1 also has a 100-byte -** file header that occurs before the page header. -** -** |----------------| -** | file header | 100 bytes. Page 1 only. -** |----------------| -** | page header | 8 bytes for leaves. 12 bytes for interior nodes -** |----------------| -** | cell pointer | | 2 bytes per cell. Sorted order. -** | array | | Grows downward -** | | v -** |----------------| -** | unallocated | -** | space | -** |----------------| ^ Grows upwards -** | cell content | | Arbitrary order interspersed with freeblocks. -** | area | | and free space fragments. -** |----------------| -** -** The page headers looks like this: -** -** OFFSET SIZE DESCRIPTION -** 0 1 Flags. 1: intkey, 2: zerodata, 4: leafdata, 8: leaf -** 1 2 byte offset to the first freeblock -** 3 2 number of cells on this page -** 5 2 first byte of the cell content area -** 7 1 number of fragmented free bytes -** 8 4 Right child (the Ptr(N) value). Omitted on leaves. -** -** The flags define the format of this btree page. The leaf flag means that -** this page has no children. The zerodata flag means that this page carries -** only keys and no data. The intkey flag means that the key is a integer -** which is stored in the key size entry of the cell header rather than in -** the payload area. -** -** The cell pointer array begins on the first byte after the page header. -** The cell pointer array contains zero or more 2-byte numbers which are -** offsets from the beginning of the page to the cell content in the cell -** content area. The cell pointers occur in sorted order. The system strives -** to keep free space after the last cell pointer so that new cells can -** be easily added without having to defragment the page. -** -** Cell content is stored at the very end of the page and grows toward the -** beginning of the page. -** -** Unused space within the cell content area is collected into a linked list of -** freeblocks. Each freeblock is at least 4 bytes in size. The byte offset -** to the first freeblock is given in the header. Freeblocks occur in -** increasing order. Because a freeblock must be at least 4 bytes in size, -** any group of 3 or fewer unused bytes in the cell content area cannot -** exist on the freeblock chain. A group of 3 or fewer free bytes is called -** a fragment. The total number of bytes in all fragments is recorded. -** in the page header at offset 7. -** -** SIZE DESCRIPTION -** 2 Byte offset of the next freeblock -** 2 Bytes in this freeblock -** -** Cells are of variable length. Cells are stored in the cell content area at -** the end of the page. Pointers to the cells are in the cell pointer array -** that immediately follows the page header. Cells is not necessarily -** contiguous or in order, but cell pointers are contiguous and in order. -** -** Cell content makes use of variable length integers. A variable -** length integer is 1 to 9 bytes where the lower 7 bits of each -** byte are used. The integer consists of all bytes that have bit 8 set and -** the first byte with bit 8 clear. The most significant byte of the integer -** appears first. A variable-length integer may not be more than 9 bytes long. -** As a special case, all 8 bytes of the 9th byte are used as data. This -** allows a 64-bit integer to be encoded in 9 bytes. -** -** 0x00 becomes 0x00000000 -** 0x7f becomes 0x0000007f -** 0x81 0x00 becomes 0x00000080 -** 0x82 0x00 becomes 0x00000100 -** 0x80 0x7f becomes 0x0000007f -** 0x8a 0x91 0xd1 0xac 0x78 becomes 0x12345678 -** 0x81 0x81 0x81 0x81 0x01 becomes 0x10204081 -** -** Variable length integers are used for rowids and to hold the number of -** bytes of key and data in a btree cell. -** -** The content of a cell looks like this: -** -** SIZE DESCRIPTION -** 4 Page number of the left child. Omitted if leaf flag is set. -** var Number of bytes of data. Omitted if the zerodata flag is set. -** var Number of bytes of key. Or the key itself if intkey flag is set. -** * Payload -** 4 First page of the overflow chain. Omitted if no overflow -** -** Overflow pages form a linked list. Each page except the last is completely -** filled with data (pagesize - 4 bytes). The last page can have as little -** as 1 byte of data. -** -** SIZE DESCRIPTION -** 4 Page number of next overflow page -** * Data -** -** Freelist pages come in two subtypes: trunk pages and leaf pages. The -** file header points to the first in a linked list of trunk page. Each trunk -** page points to multiple leaf pages. The content of a leaf page is -** unspecified. A trunk page looks like this: -** -** SIZE DESCRIPTION -** 4 Page number of next trunk page -** 4 Number of leaf pointers on this page -** * zero or more pages numbers of leaves +** In either case, before playback commences the Pager.dbSize variable +** is reset to the value that it held at the start of the savepoint +** (or transaction). No page with a page-number greater than this value +** is played back. If one is encountered it is simply skipped. */ +static int pagerPlaybackSavepoint(Pager *pPager, PagerSavepoint *pSavepoint){ + i64 szJ; /* Effective size of the main journal */ + i64 iHdrOff; /* End of first segment of main-journal records */ + int rc = SQLITE_OK; /* Return code */ + Bitvec *pDone = 0; /* Bitvec to ensure pages played back only once */ + assert( pPager->eState!=PAGER_ERROR ); + assert( pPager->eState>=PAGER_WRITER_LOCKED ); -/* The following value is the maximum cell size assuming a maximum page -** size give above. -*/ -#define MX_CELL_SIZE(pBt) (pBt->pageSize-8) + /* Allocate a bitvec to use to store the set of pages rolled back */ + if( pSavepoint ){ + pDone = sqlite3BitvecCreate(pSavepoint->nOrig); + if( !pDone ){ + return SQLITE_NOMEM; + } + } -/* The maximum number of cells on a single page of the database. This -** assumes a minimum cell size of 6 bytes (4 bytes for the cell itself -** plus 2 bytes for the index to the cell in the page header). Such -** small cells will be rare, but they are possible. -*/ -#define MX_CELL(pBt) ((pBt->pageSize-8)/6) + /* Set the database size back to the value it was before the savepoint + ** being reverted was opened. + */ + pPager->dbSize = pSavepoint ? pSavepoint->nOrig : pPager->dbOrigSize; + pPager->changeCountDone = pPager->tempFile; -/* Forward declarations */ -typedef struct MemPage MemPage; -typedef struct BtLock BtLock; + if( !pSavepoint && pagerUseWal(pPager) ){ + return pagerRollbackWal(pPager); + } + + /* Use pPager->journalOff as the effective size of the main rollback + ** journal. The actual file might be larger than this in + ** PAGER_JOURNALMODE_TRUNCATE or PAGER_JOURNALMODE_PERSIST. But anything + ** past pPager->journalOff is off-limits to us. + */ + szJ = pPager->journalOff; + assert( pagerUseWal(pPager)==0 || szJ==0 ); + + /* Begin by rolling back records from the main journal starting at + ** PagerSavepoint.iOffset and continuing to the next journal header. + ** There might be records in the main journal that have a page number + ** greater than the current database size (pPager->dbSize) but those + ** will be skipped automatically. Pages are added to pDone as they + ** are played back. + */ + if( pSavepoint && !pagerUseWal(pPager) ){ + iHdrOff = pSavepoint->iHdrOffset ? pSavepoint->iHdrOffset : szJ; + pPager->journalOff = pSavepoint->iOffset; + while( rc==SQLITE_OK && pPager->journalOffjournalOff, pDone, 1, 1); + } + assert( rc!=SQLITE_DONE ); + }else{ + pPager->journalOff = 0; + } + + /* Continue rolling back records out of the main journal starting at + ** the first journal header seen and continuing until the effective end + ** of the main journal file. Continue to skip out-of-range pages and + ** continue adding pages rolled back to pDone. + */ + while( rc==SQLITE_OK && pPager->journalOffjournalHdr+JOURNAL_HDR_SZ(pPager)==pPager->journalOff" + ** test is related to ticket #2565. See the discussion in the + ** pager_playback() function for additional information. + */ + if( nJRec==0 + && pPager->journalHdr+JOURNAL_HDR_SZ(pPager)==pPager->journalOff + ){ + nJRec = (u32)((szJ - pPager->journalOff)/JOURNAL_PG_SZ(pPager)); + } + for(ii=0; rc==SQLITE_OK && iijournalOffjournalOff, pDone, 1, 1); + } + assert( rc!=SQLITE_DONE ); + } + assert( rc!=SQLITE_OK || pPager->journalOff>=szJ ); + + /* Finally, rollback pages from the sub-journal. Page that were + ** previously rolled back out of the main journal (and are hence in pDone) + ** will be skipped. Out-of-range pages are also skipped. + */ + if( pSavepoint ){ + u32 ii; /* Loop counter */ + i64 offset = (i64)pSavepoint->iSubRec*(4+pPager->pageSize); + + if( pagerUseWal(pPager) ){ + rc = sqlite3WalSavepointUndo(pPager->pWal, pSavepoint->aWalData); + } + for(ii=pSavepoint->iSubRec; rc==SQLITE_OK && iinSubRec; ii++){ + assert( offset==(i64)ii*(4+pPager->pageSize) ); + rc = pager_playback_one_page(pPager, &offset, pDone, 0, 1); + } + assert( rc!=SQLITE_DONE ); + } + + sqlite3BitvecDestroy(pDone); + if( rc==SQLITE_OK ){ + pPager->journalOff = szJ; + } + + return rc; +} /* -** This is a magic string that appears at the beginning of every -** SQLite database in order to identify the file as a real database. -** -** You can change this value at compile-time by specifying a -** -DSQLITE_FILE_HEADER="..." on the compiler command-line. The -** header must be exactly 16 bytes including the zero-terminator so -** the string itself should be 15 characters long. If you change -** the header, then your custom library will not be able to read -** databases generated by the standard tools and the standard tools -** will not be able to read databases created by your custom library. +** Change the maximum number of in-memory pages that are allowed. */ -#ifndef SQLITE_FILE_HEADER /* 123456789 123456 */ -# define SQLITE_FILE_HEADER "SQLite format 3" -#endif +SQLITE_PRIVATE void sqlite3PagerSetCachesize(Pager *pPager, int mxPage){ + sqlite3PcacheSetCachesize(pPager->pPCache, mxPage); +} /* -** Page type flags. An ORed combination of these flags appear as the -** first byte of on-disk image of every BTree page. +** Free as much memory as possible from the pager. */ -#define PTF_INTKEY 0x01 -#define PTF_ZERODATA 0x02 -#define PTF_LEAFDATA 0x04 -#define PTF_LEAF 0x08 +SQLITE_PRIVATE void sqlite3PagerShrink(Pager *pPager){ + sqlite3PcacheShrink(pPager->pPCache); +} /* -** As each page of the file is loaded into memory, an instance of the following -** structure is appended and initialized to zero. This structure stores -** information about the page that is decoded from the raw file page. +** Adjust the robustness of the database to damage due to OS crashes +** or power failures by changing the number of syncs()s when writing +** the rollback journal. There are three levels: ** -** The pParent field points back to the parent page. This allows us to -** walk up the BTree from any leaf to the root. Care must be taken to -** unref() the parent page pointer when this page is no longer referenced. -** The pageDestructor() routine handles that chore. +** OFF sqlite3OsSync() is never called. This is the default +** for temporary and transient files. ** -** Access to all fields of this structure is controlled by the mutex -** stored in MemPage.pBt->mutex. +** NORMAL The journal is synced once before writes begin on the +** database. This is normally adequate protection, but +** it is theoretically possible, though very unlikely, +** that an inopertune power failure could leave the journal +** in a state which would cause damage to the database +** when it is rolled back. +** +** FULL The journal is synced twice before writes begin on the +** database (with some additional information - the nRec field +** of the journal header - being written in between the two +** syncs). If we assume that writing a +** single disk sector is atomic, then this mode provides +** assurance that the journal will not be corrupted to the +** point of causing damage to the database during rollback. +** +** The above is for a rollback-journal mode. For WAL mode, OFF continues +** to mean that no syncs ever occur. NORMAL means that the WAL is synced +** prior to the start of checkpoint and that the database file is synced +** at the conclusion of the checkpoint if the entire content of the WAL +** was written back into the database. But no sync operations occur for +** an ordinary commit in NORMAL mode with WAL. FULL means that the WAL +** file is synced following each commit operation, in addition to the +** syncs associated with NORMAL. +** +** Do not confuse synchronous=FULL with SQLITE_SYNC_FULL. The +** SQLITE_SYNC_FULL macro means to use the MacOSX-style full-fsync +** using fcntl(F_FULLFSYNC). SQLITE_SYNC_NORMAL means to do an +** ordinary fsync() call. There is no difference between SQLITE_SYNC_FULL +** and SQLITE_SYNC_NORMAL on platforms other than MacOSX. But the +** synchronous=FULL versus synchronous=NORMAL setting determines when +** the xSync primitive is called and is relevant to all platforms. +** +** Numeric values associated with these states are OFF==1, NORMAL=2, +** and FULL=3. */ -struct MemPage { - u8 isInit; /* True if previously initialized. MUST BE FIRST! */ - u8 nOverflow; /* Number of overflow cell bodies in aCell[] */ - u8 intKey; /* True if intkey flag is set */ - u8 leaf; /* True if leaf flag is set */ - u8 hasData; /* True if this page stores data */ - u8 hdrOffset; /* 100 for page 1. 0 otherwise */ - u8 childPtrSize; /* 0 if leaf==1. 4 if leaf==0 */ - u16 maxLocal; /* Copy of BtShared.maxLocal or BtShared.maxLeaf */ - u16 minLocal; /* Copy of BtShared.minLocal or BtShared.minLeaf */ - u16 cellOffset; /* Index in aData of first cell pointer */ - u16 nFree; /* Number of free bytes on the page */ - u16 nCell; /* Number of cells on this page, local and ovfl */ - u16 maskPage; /* Mask for page offset */ - struct _OvflCell { /* Cells that will not fit on aData[] */ - u8 *pCell; /* Pointers to the body of the overflow cell */ - u16 idx; /* Insert this cell before idx-th non-overflow cell */ - } aOvfl[5]; - BtShared *pBt; /* Pointer to BtShared that this page is part of */ - u8 *aData; /* Pointer to disk image of the page data */ - DbPage *pDbPage; /* Pager page handle */ - Pgno pgno; /* Page number for this page */ -}; +#ifndef SQLITE_OMIT_PAGER_PRAGMAS +SQLITE_PRIVATE void sqlite3PagerSetSafetyLevel( + Pager *pPager, /* The pager to set safety level for */ + int level, /* PRAGMA synchronous. 1=OFF, 2=NORMAL, 3=FULL */ + int bFullFsync, /* PRAGMA fullfsync */ + int bCkptFullFsync /* PRAGMA checkpoint_fullfsync */ +){ + assert( level>=1 && level<=3 ); + pPager->noSync = (level==1 || pPager->tempFile) ?1:0; + pPager->fullSync = (level==3 && !pPager->tempFile) ?1:0; + if( pPager->noSync ){ + pPager->syncFlags = 0; + pPager->ckptSyncFlags = 0; + }else if( bFullFsync ){ + pPager->syncFlags = SQLITE_SYNC_FULL; + pPager->ckptSyncFlags = SQLITE_SYNC_FULL; + }else if( bCkptFullFsync ){ + pPager->syncFlags = SQLITE_SYNC_NORMAL; + pPager->ckptSyncFlags = SQLITE_SYNC_FULL; + }else{ + pPager->syncFlags = SQLITE_SYNC_NORMAL; + pPager->ckptSyncFlags = SQLITE_SYNC_NORMAL; + } + pPager->walSyncFlags = pPager->syncFlags; + if( pPager->fullSync ){ + pPager->walSyncFlags |= WAL_SYNC_TRANSACTIONS; + } +} +#endif /* -** The in-memory image of a disk page has the auxiliary information appended -** to the end. EXTRA_SIZE is the number of bytes of space needed to hold -** that extra information. +** The following global variable is incremented whenever the library +** attempts to open a temporary file. This information is used for +** testing and analysis only. */ -#define EXTRA_SIZE sizeof(MemPage) +#ifdef SQLITE_TEST +SQLITE_API int sqlite3_opentemp_count = 0; +#endif -/* A Btree handle +/* +** Open a temporary file. ** -** A database connection contains a pointer to an instance of -** this object for every database file that it has open. This structure -** is opaque to the database connection. The database connection cannot -** see the internals of this structure and only deals with pointers to -** this structure. +** Write the file descriptor into *pFile. Return SQLITE_OK on success +** or some other error code if we fail. The OS will automatically +** delete the temporary file when it is closed. ** -** For some database files, the same underlying database cache might be -** shared between multiple connections. In that case, each contection -** has it own pointer to this object. But each instance of this object -** points to the same BtShared object. The database cache and the -** schema associated with the database file are all contained within -** the BtShared object. +** The flags passed to the VFS layer xOpen() call are those specified +** by parameter vfsFlags ORed with the following: ** -** All fields in this structure are accessed under sqlite3.mutex. -** The pBt pointer itself may not be changed while there exists cursors -** in the referenced BtShared that point back to this Btree since those -** cursors have to do go through this Btree to find their BtShared and -** they often do so without holding sqlite3.mutex. +** SQLITE_OPEN_READWRITE +** SQLITE_OPEN_CREATE +** SQLITE_OPEN_EXCLUSIVE +** SQLITE_OPEN_DELETEONCLOSE */ -struct Btree { - sqlite3 *db; /* The database connection holding this btree */ - BtShared *pBt; /* Sharable content of this btree */ - u8 inTrans; /* TRANS_NONE, TRANS_READ or TRANS_WRITE */ - u8 sharable; /* True if we can share pBt with another db */ - u8 locked; /* True if db currently has pBt locked */ - int wantToLock; /* Number of nested calls to sqlite3BtreeEnter() */ - int nBackup; /* Number of backup operations reading this btree */ - Btree *pNext; /* List of other sharable Btrees from the same db */ - Btree *pPrev; /* Back pointer of the same list */ -}; +static int pagerOpentemp( + Pager *pPager, /* The pager object */ + sqlite3_file *pFile, /* Write the file descriptor here */ + int vfsFlags /* Flags passed through to the VFS */ +){ + int rc; /* Return code */ + +#ifdef SQLITE_TEST + sqlite3_opentemp_count++; /* Used for testing and analysis only */ +#endif + + vfsFlags |= SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE | + SQLITE_OPEN_EXCLUSIVE | SQLITE_OPEN_DELETEONCLOSE; + rc = sqlite3OsOpen(pPager->pVfs, 0, pFile, vfsFlags, 0); + assert( rc!=SQLITE_OK || isOpen(pFile) ); + return rc; +} /* -** Btree.inTrans may take one of the following values. +** Set the busy handler function. ** -** If the shared-data extension is enabled, there may be multiple users -** of the Btree structure. At most one of these may open a write transaction, -** but any number may have active read transactions. +** The pager invokes the busy-handler if sqlite3OsLock() returns +** SQLITE_BUSY when trying to upgrade from no-lock to a SHARED lock, +** or when trying to upgrade from a RESERVED lock to an EXCLUSIVE +** lock. It does *not* invoke the busy handler when upgrading from +** SHARED to RESERVED, or when upgrading from SHARED to EXCLUSIVE +** (which occurs during hot-journal rollback). Summary: +** +** Transition | Invokes xBusyHandler +** -------------------------------------------------------- +** NO_LOCK -> SHARED_LOCK | Yes +** SHARED_LOCK -> RESERVED_LOCK | No +** SHARED_LOCK -> EXCLUSIVE_LOCK | No +** RESERVED_LOCK -> EXCLUSIVE_LOCK | Yes +** +** If the busy-handler callback returns non-zero, the lock is +** retried. If it returns zero, then the SQLITE_BUSY error is +** returned to the caller of the pager API function. */ -#define TRANS_NONE 0 -#define TRANS_READ 1 -#define TRANS_WRITE 2 +SQLITE_PRIVATE void sqlite3PagerSetBusyhandler( + Pager *pPager, /* Pager object */ + int (*xBusyHandler)(void *), /* Pointer to busy-handler function */ + void *pBusyHandlerArg /* Argument to pass to xBusyHandler */ +){ + pPager->xBusyHandler = xBusyHandler; + pPager->pBusyHandlerArg = pBusyHandlerArg; +} /* -** An instance of this object represents a single database file. -** -** A single database file can be in use as the same time by two -** or more database connections. When two or more connections are -** sharing the same database file, each connection has it own -** private Btree object for the file and each of those Btrees points -** to this one BtShared object. BtShared.nRef is the number of -** connections currently sharing this database file. +** Change the page size used by the Pager object. The new page size +** is passed in *pPageSize. ** -** Fields in this structure are accessed under the BtShared.mutex -** mutex, except for nRef and pNext which are accessed under the -** global SQLITE_MUTEX_STATIC_MASTER mutex. The pPager field -** may not be modified once it is initially set as long as nRef>0. -** The pSchema field may be set once under BtShared.mutex and -** thereafter is unchanged as long as nRef>0. +** If the pager is in the error state when this function is called, it +** is a no-op. The value returned is the error state error code (i.e. +** one of SQLITE_IOERR, an SQLITE_IOERR_xxx sub-code or SQLITE_FULL). ** -** isPending: +** Otherwise, if all of the following are true: ** -** If a BtShared client fails to obtain a write-lock on a database -** table (because there exists one or more read-locks on the table), -** the shared-cache enters 'pending-lock' state and isPending is -** set to true. +** * the new page size (value of *pPageSize) is valid (a power +** of two between 512 and SQLITE_MAX_PAGE_SIZE, inclusive), and ** -** The shared-cache leaves the 'pending lock' state when either of -** the following occur: +** * there are no outstanding page references, and ** -** 1) The current writer (BtShared.pWriter) concludes its transaction, OR -** 2) The number of locks held by other connections drops to zero. +** * the database is either not an in-memory database or it is +** an in-memory database that currently consists of zero pages. ** -** while in the 'pending-lock' state, no connection may start a new -** transaction. +** then the pager object page size is set to *pPageSize. ** -** This feature is included to help prevent writer-starvation. +** If the page size is changed, then this function uses sqlite3PagerMalloc() +** to obtain a new Pager.pTmpSpace buffer. If this allocation attempt +** fails, SQLITE_NOMEM is returned and the page size remains unchanged. +** In all other cases, SQLITE_OK is returned. +** +** If the page size is not changed, either because one of the enumerated +** conditions above is not true, the pager was in error state when this +** function was called, or because the memory allocation attempt failed, +** then *pPageSize is set to the old, retained page size before returning. */ -struct BtShared { - Pager *pPager; /* The page cache */ - sqlite3 *db; /* Database connection currently using this Btree */ - BtCursor *pCursor; /* A list of all open cursors */ - MemPage *pPage1; /* First page of the database */ - u8 readOnly; /* True if the underlying file is readonly */ - u8 pageSizeFixed; /* True if the page size can no longer be changed */ -#ifndef SQLITE_OMIT_AUTOVACUUM - u8 autoVacuum; /* True if auto-vacuum is enabled */ - u8 incrVacuum; /* True if incr-vacuum is enabled */ -#endif - u16 pageSize; /* Total number of bytes on a page */ - u16 usableSize; /* Number of usable bytes on each page */ - u16 maxLocal; /* Maximum local payload in non-LEAFDATA tables */ - u16 minLocal; /* Minimum local payload in non-LEAFDATA tables */ - u16 maxLeaf; /* Maximum local payload in a LEAFDATA table */ - u16 minLeaf; /* Minimum local payload in a LEAFDATA table */ - u8 inTransaction; /* Transaction state */ - int nTransaction; /* Number of open transactions (read + write) */ - void *pSchema; /* Pointer to space allocated by sqlite3BtreeSchema() */ - void (*xFreeSchema)(void*); /* Destructor for BtShared.pSchema */ - sqlite3_mutex *mutex; /* Non-recursive mutex required to access this struct */ - Bitvec *pHasContent; /* Set of pages moved to free-list this transaction */ -#ifndef SQLITE_OMIT_SHARED_CACHE - int nRef; /* Number of references to this structure */ - BtShared *pNext; /* Next on a list of sharable BtShared structs */ - BtLock *pLock; /* List of locks held on this shared-btree struct */ - Btree *pWriter; /* Btree with currently open write transaction */ - u8 isExclusive; /* True if pWriter has an EXCLUSIVE lock on the db */ - u8 isPending; /* If waiting for read-locks to clear */ -#endif - u8 *pTmpSpace; /* BtShared.pageSize bytes of space for tmp use */ -}; +SQLITE_PRIVATE int sqlite3PagerSetPagesize(Pager *pPager, u32 *pPageSize, int nReserve){ + int rc = SQLITE_OK; + + /* It is not possible to do a full assert_pager_state() here, as this + ** function may be called from within PagerOpen(), before the state + ** of the Pager object is internally consistent. + ** + ** At one point this function returned an error if the pager was in + ** PAGER_ERROR state. But since PAGER_ERROR state guarantees that + ** there is at least one outstanding page reference, this function + ** is a no-op for that case anyhow. + */ + + u32 pageSize = *pPageSize; + assert( pageSize==0 || (pageSize>=512 && pageSize<=SQLITE_MAX_PAGE_SIZE) ); + if( (pPager->memDb==0 || pPager->dbSize==0) + && sqlite3PcacheRefCount(pPager->pPCache)==0 + && pageSize && pageSize!=(u32)pPager->pageSize + ){ + char *pNew = NULL; /* New temp space */ + i64 nByte = 0; + + if( pPager->eState>PAGER_OPEN && isOpen(pPager->fd) ){ + rc = sqlite3OsFileSize(pPager->fd, &nByte); + } + if( rc==SQLITE_OK ){ + pNew = (char *)sqlite3PageMalloc(pageSize); + if( !pNew ) rc = SQLITE_NOMEM; + } + + if( rc==SQLITE_OK ){ + pager_reset(pPager); + pPager->dbSize = (Pgno)((nByte+pageSize-1)/pageSize); + pPager->pageSize = pageSize; + sqlite3PageFree(pPager->pTmpSpace); + pPager->pTmpSpace = pNew; + sqlite3PcacheSetPageSize(pPager->pPCache, pageSize); + } + } + + *pPageSize = pPager->pageSize; + if( rc==SQLITE_OK ){ + if( nReserve<0 ) nReserve = pPager->nReserve; + assert( nReserve>=0 && nReserve<1000 ); + pPager->nReserve = (i16)nReserve; + pagerReportSize(pPager); + } + return rc; +} /* -** An instance of the following structure is used to hold information -** about a cell. The parseCellPtr() function fills in this structure -** based on information extract from the raw disk page. +** Return a pointer to the "temporary page" buffer held internally +** by the pager. This is a buffer that is big enough to hold the +** entire content of a database page. This buffer is used internally +** during rollback and will be overwritten whenever a rollback +** occurs. But other modules are free to use it too, as long as +** no rollbacks are happening. */ -typedef struct CellInfo CellInfo; -struct CellInfo { - u8 *pCell; /* Pointer to the start of cell content */ - i64 nKey; /* The key for INTKEY tables, or number of bytes in key */ - u32 nData; /* Number of bytes of data */ - u32 nPayload; /* Total amount of payload */ - u16 nHeader; /* Size of the cell content header in bytes */ - u16 nLocal; /* Amount of payload held locally */ - u16 iOverflow; /* Offset to overflow page number. Zero if no overflow */ - u16 nSize; /* Size of the cell content on the main b-tree page */ -}; +SQLITE_PRIVATE void *sqlite3PagerTempSpace(Pager *pPager){ + return pPager->pTmpSpace; +} /* -** Maximum depth of an SQLite B-Tree structure. Any B-Tree deeper than -** this will be declared corrupt. This value is calculated based on a -** maximum database size of 2^31 pages a minimum fanout of 2 for a -** root-node and 3 for all other internal nodes. +** Attempt to set the maximum database page count if mxPage is positive. +** Make no changes if mxPage is zero or negative. And never reduce the +** maximum page count below the current size of the database. ** -** If a tree that appears to be taller than this is encountered, it is -** assumed that the database is corrupt. +** Regardless of mxPage, return the current maximum page count. */ -#define BTCURSOR_MAX_DEPTH 20 +SQLITE_PRIVATE int sqlite3PagerMaxPageCount(Pager *pPager, int mxPage){ + if( mxPage>0 ){ + pPager->mxPgno = mxPage; + } + assert( pPager->eState!=PAGER_OPEN ); /* Called only by OP_MaxPgcnt */ + assert( pPager->mxPgno>=pPager->dbSize ); /* OP_MaxPgcnt enforces this */ + return pPager->mxPgno; +} /* -** A cursor is a pointer to a particular entry within a particular -** b-tree within a database file. -** -** The entry is identified by its MemPage and the index in -** MemPage.aCell[] of the entry. -** -** When a single database file can shared by two more database connections, -** but cursors cannot be shared. Each cursor is associated with a -** particular database connection identified BtCursor.pBtree.db. +** The following set of routines are used to disable the simulated +** I/O error mechanism. These routines are used to avoid simulated +** errors in places where we do not care about errors. ** -** Fields in this structure are accessed under the BtShared.mutex -** found at self->pBt->mutex. +** Unless -DSQLITE_TEST=1 is used, these routines are all no-ops +** and generate no code. */ -struct BtCursor { - Btree *pBtree; /* The Btree to which this cursor belongs */ - BtShared *pBt; /* The BtShared this cursor points to */ - BtCursor *pNext, *pPrev; /* Forms a linked list of all cursors */ - struct KeyInfo *pKeyInfo; /* Argument passed to comparison function */ - Pgno pgnoRoot; /* The root page of this tree */ - sqlite3_int64 cachedRowid; /* Next rowid cache. 0 means not valid */ - CellInfo info; /* A parse of the cell we are pointing at */ - u8 wrFlag; /* True if writable */ - u8 atLast; /* Cursor pointing to the last entry */ - u8 validNKey; /* True if info.nKey is valid */ - u8 eState; /* One of the CURSOR_XXX constants (see below) */ - void *pKey; /* Saved key that was cursor's last known position */ - i64 nKey; /* Size of pKey, or last integer key */ - int skip; /* (skip<0) -> Prev() is a no-op. (skip>0) -> Next() is */ -#ifndef SQLITE_OMIT_INCRBLOB - u8 isIncrblobHandle; /* True if this cursor is an incr. io handle */ - Pgno *aOverflow; /* Cache of overflow page locations */ +#ifdef SQLITE_TEST +SQLITE_API extern int sqlite3_io_error_pending; +SQLITE_API extern int sqlite3_io_error_hit; +static int saved_cnt; +void disable_simulated_io_errors(void){ + saved_cnt = sqlite3_io_error_pending; + sqlite3_io_error_pending = -1; +} +void enable_simulated_io_errors(void){ + sqlite3_io_error_pending = saved_cnt; +} +#else +# define disable_simulated_io_errors() +# define enable_simulated_io_errors() #endif - i16 iPage; /* Index of current page in apPage */ - MemPage *apPage[BTCURSOR_MAX_DEPTH]; /* Pages from root to current page */ - u16 aiIdx[BTCURSOR_MAX_DEPTH]; /* Current index in apPage[i] */ -}; /* -** Potential values for BtCursor.eState. -** -** CURSOR_VALID: -** Cursor points to a valid entry. getPayload() etc. may be called. -** -** CURSOR_INVALID: -** Cursor does not point to a valid entry. This can happen (for example) -** because the table is empty or because BtreeCursorFirst() has not been -** called. +** Read the first N bytes from the beginning of the file into memory +** that pDest points to. ** -** CURSOR_REQUIRESEEK: -** The table that this cursor was opened on still exists, but has been -** modified since the cursor was last used. The cursor position is saved -** in variables BtCursor.pKey and BtCursor.nKey. When a cursor is in -** this state, restoreCursorPosition() can be called to attempt to -** seek the cursor to the saved position. +** If the pager was opened on a transient file (zFilename==""), or +** opened on a file less than N bytes in size, the output buffer is +** zeroed and SQLITE_OK returned. The rationale for this is that this +** function is used to read database headers, and a new transient or +** zero sized database has a header than consists entirely of zeroes. ** -** CURSOR_FAULT: -** A unrecoverable error (an I/O error or a malloc failure) has occurred -** on a different connection that shares the BtShared cache with this -** cursor. The error has left the cache in an inconsistent state. -** Do nothing else with this cursor. Any attempt to use the cursor -** should return the error code stored in BtCursor.skip -*/ -#define CURSOR_INVALID 0 -#define CURSOR_VALID 1 -#define CURSOR_REQUIRESEEK 2 -#define CURSOR_FAULT 3 - -/* -** The database page the PENDING_BYTE occupies. This page is never used. +** If any IO error apart from SQLITE_IOERR_SHORT_READ is encountered, +** the error code is returned to the caller and the contents of the +** output buffer undefined. */ -# define PENDING_BYTE_PAGE(pBt) PAGER_MJ_PGNO(pBt) +SQLITE_PRIVATE int sqlite3PagerReadFileheader(Pager *pPager, int N, unsigned char *pDest){ + int rc = SQLITE_OK; + memset(pDest, 0, N); + assert( isOpen(pPager->fd) || pPager->tempFile ); -/* -** A linked list of the following structures is stored at BtShared.pLock. -** Locks are added (or upgraded from READ_LOCK to WRITE_LOCK) when a cursor -** is opened on the table with root page BtShared.iTable. Locks are removed -** from this list when a transaction is committed or rolled back, or when -** a btree handle is closed. -*/ -struct BtLock { - Btree *pBtree; /* Btree handle holding this lock */ - Pgno iTable; /* Root page of table */ - u8 eLock; /* READ_LOCK or WRITE_LOCK */ - BtLock *pNext; /* Next in BtShared.pLock list */ -}; + /* This routine is only called by btree immediately after creating + ** the Pager object. There has not been an opportunity to transition + ** to WAL mode yet. + */ + assert( !pagerUseWal(pPager) ); -/* Candidate values for BtLock.eLock */ -#define READ_LOCK 1 -#define WRITE_LOCK 2 + if( isOpen(pPager->fd) ){ + IOTRACE(("DBHDR %p 0 %d\n", pPager, N)) + rc = sqlite3OsRead(pPager->fd, pDest, N, 0); + if( rc==SQLITE_IOERR_SHORT_READ ){ + rc = SQLITE_OK; + } + } + return rc; +} /* -** These macros define the location of the pointer-map entry for a -** database page. The first argument to each is the number of usable -** bytes on each page of the database (often 1024). The second is the -** page number to look up in the pointer map. -** -** PTRMAP_PAGENO returns the database page number of the pointer-map -** page that stores the required pointer. PTRMAP_PTROFFSET returns -** the offset of the requested map entry. +** This function may only be called when a read-transaction is open on +** the pager. It returns the total number of pages in the database. ** -** If the pgno argument passed to PTRMAP_PAGENO is a pointer-map page, -** then pgno is returned. So (pgno==PTRMAP_PAGENO(pgsz, pgno)) can be -** used to test if pgno is a pointer-map page. PTRMAP_ISPAGE implements -** this test. +** However, if the file is between 1 and bytes in size, then +** this is considered a 1 page file. */ -#define PTRMAP_PAGENO(pBt, pgno) ptrmapPageno(pBt, pgno) -#define PTRMAP_PTROFFSET(pgptrmap, pgno) (5*(pgno-pgptrmap-1)) -#define PTRMAP_ISPAGE(pBt, pgno) (PTRMAP_PAGENO((pBt),(pgno))==(pgno)) +SQLITE_PRIVATE void sqlite3PagerPagecount(Pager *pPager, int *pnPage){ + assert( pPager->eState>=PAGER_READER ); + assert( pPager->eState!=PAGER_WRITER_FINISHED ); + *pnPage = (int)pPager->dbSize; +} + /* -** The pointer map is a lookup table that identifies the parent page for -** each child page in the database file. The parent page is the page that -** contains a pointer to the child. Every page in the database contains -** 0 or 1 parent pages. (In this context 'database page' refers -** to any page that is not part of the pointer map itself.) Each pointer map -** entry consists of a single byte 'type' and a 4 byte parent page number. -** The PTRMAP_XXX identifiers below are the valid types. -** -** The purpose of the pointer map is to facility moving pages from one -** position in the file to another as part of autovacuum. When a page -** is moved, the pointer in its parent must be updated to point to the -** new location. The pointer map is used to locate the parent page quickly. -** -** PTRMAP_ROOTPAGE: The database page is a root-page. The page-number is not -** used in this case. -** -** PTRMAP_FREEPAGE: The database page is an unused (free) page. The page-number -** is not used in this case. -** -** PTRMAP_OVERFLOW1: The database page is the first page in a list of -** overflow pages. The page number identifies the page that -** contains the cell with a pointer to this overflow page. +** Try to obtain a lock of type locktype on the database file. If +** a similar or greater lock is already held, this function is a no-op +** (returning SQLITE_OK immediately). ** -** PTRMAP_OVERFLOW2: The database page is the second or later page in a list of -** overflow pages. The page-number identifies the previous -** page in the overflow page list. +** Otherwise, attempt to obtain the lock using sqlite3OsLock(). Invoke +** the busy callback if the lock is currently not available. Repeat +** until the busy callback returns false or until the attempt to +** obtain the lock succeeds. ** -** PTRMAP_BTREE: The database page is a non-root btree page. The page number -** identifies the parent page in the btree. +** Return SQLITE_OK on success and an error code if we cannot obtain +** the lock. If the lock is obtained successfully, set the Pager.state +** variable to locktype before returning. */ -#define PTRMAP_ROOTPAGE 1 -#define PTRMAP_FREEPAGE 2 -#define PTRMAP_OVERFLOW1 3 -#define PTRMAP_OVERFLOW2 4 -#define PTRMAP_BTREE 5 +static int pager_wait_on_lock(Pager *pPager, int locktype){ + int rc; /* Return code */ -/* A bunch of assert() statements to check the transaction state variables -** of handle p (type Btree*) are internally consistent. -*/ -#define btreeIntegrity(p) \ - assert( p->pBt->inTransaction!=TRANS_NONE || p->pBt->nTransaction==0 ); \ - assert( p->pBt->inTransaction>=p->inTrans ); + /* Check that this is either a no-op (because the requested lock is + ** already held, or one of the transistions that the busy-handler + ** may be invoked during, according to the comment above + ** sqlite3PagerSetBusyhandler(). + */ + assert( (pPager->eLock>=locktype) + || (pPager->eLock==NO_LOCK && locktype==SHARED_LOCK) + || (pPager->eLock==RESERVED_LOCK && locktype==EXCLUSIVE_LOCK) + ); + do { + rc = pagerLockDb(pPager, locktype); + }while( rc==SQLITE_BUSY && pPager->xBusyHandler(pPager->pBusyHandlerArg) ); + return rc; +} /* -** The ISAUTOVACUUM macro is used within balance_nonroot() to determine -** if the database supports auto-vacuum or not. Because it is used -** within an expression that is an argument to another macro -** (sqliteMallocRaw), it is not possible to use conditional compilation. -** So, this macro is defined instead. +** Function assertTruncateConstraint(pPager) checks that one of the +** following is true for all dirty pages currently in the page-cache: +** +** a) The page number is less than or equal to the size of the +** current database image, in pages, OR +** +** b) if the page content were written at this time, it would not +** be necessary to write the current content out to the sub-journal +** (as determined by function subjRequiresPage()). +** +** If the condition asserted by this function were not true, and the +** dirty page were to be discarded from the cache via the pagerStress() +** routine, pagerStress() would not write the current page content to +** the database file. If a savepoint transaction were rolled back after +** this happened, the correct behaviour would be to restore the current +** content of the page. However, since this content is not present in either +** the database file or the portion of the rollback journal and +** sub-journal rolled back the content could not be restored and the +** database image would become corrupt. It is therefore fortunate that +** this circumstance cannot arise. */ -#ifndef SQLITE_OMIT_AUTOVACUUM -#define ISAUTOVACUUM (pBt->autoVacuum) +#if defined(SQLITE_DEBUG) +static void assertTruncateConstraintCb(PgHdr *pPg){ + assert( pPg->flags&PGHDR_DIRTY ); + assert( !subjRequiresPage(pPg) || pPg->pgno<=pPg->pPager->dbSize ); +} +static void assertTruncateConstraint(Pager *pPager){ + sqlite3PcacheIterateDirty(pPager->pPCache, assertTruncateConstraintCb); +} #else -#define ISAUTOVACUUM 0 -#endif - - -/* -** This structure is passed around through all the sanity checking routines -** in order to keep track of some global state information. -*/ -typedef struct IntegrityCk IntegrityCk; -struct IntegrityCk { - BtShared *pBt; /* The tree being checked out */ - Pager *pPager; /* The associated pager. Also accessible by pBt->pPager */ - Pgno nPage; /* Number of pages in the database */ - int *anRef; /* Number of times each page is referenced */ - int mxErr; /* Stop accumulating errors when this reaches zero */ - int nErr; /* Number of messages written to zErrMsg so far */ - int mallocFailed; /* A memory allocation error has occurred */ - StrAccum errMsg; /* Accumulate the error message text here */ -}; - -/* -** Read or write a two- and four-byte big-endian integer values. -*/ -#define get2byte(x) ((x)[0]<<8 | (x)[1]) -#define put2byte(p,v) ((p)[0] = (u8)((v)>>8), (p)[1] = (u8)(v)) -#define get4byte sqlite3Get4byte -#define put4byte sqlite3Put4byte - -/* -** Internal routines that should be accessed by the btree layer only. -*/ -SQLITE_PRIVATE int sqlite3BtreeGetPage(BtShared*, Pgno, MemPage**, int); -SQLITE_PRIVATE int sqlite3BtreeInitPage(MemPage *pPage); -SQLITE_PRIVATE void sqlite3BtreeParseCellPtr(MemPage*, u8*, CellInfo*); -SQLITE_PRIVATE void sqlite3BtreeParseCell(MemPage*, int, CellInfo*); -SQLITE_PRIVATE int sqlite3BtreeRestoreCursorPosition(BtCursor *pCur); -SQLITE_PRIVATE void sqlite3BtreeMoveToParent(BtCursor *pCur); - -#ifdef SQLITE_TEST -SQLITE_PRIVATE void sqlite3BtreeGetTempCursor(BtCursor *pCur, BtCursor *pTempCur); -SQLITE_PRIVATE void sqlite3BtreeReleaseTempCursor(BtCursor *pCur); +# define assertTruncateConstraint(pPager) #endif -/************** End of btreeInt.h ********************************************/ -/************** Continuing where we left off in btmutex.c ********************/ -#ifndef SQLITE_OMIT_SHARED_CACHE -#if SQLITE_THREADSAFE - /* -** Obtain the BtShared mutex associated with B-Tree handle p. Also, -** set BtShared.db to the database handle associated with p and the -** p->locked boolean to true. +** Truncate the in-memory database file image to nPage pages. This +** function does not actually modify the database file on disk. It +** just sets the internal state of the pager object so that the +** truncation will be done when the current transaction is committed. */ -static void lockBtreeMutex(Btree *p){ - assert( p->locked==0 ); - assert( sqlite3_mutex_notheld(p->pBt->mutex) ); - assert( sqlite3_mutex_held(p->db->mutex) ); - - sqlite3_mutex_enter(p->pBt->mutex); - p->pBt->db = p->db; - p->locked = 1; +SQLITE_PRIVATE void sqlite3PagerTruncateImage(Pager *pPager, Pgno nPage){ + assert( pPager->dbSize>=nPage ); + assert( pPager->eState>=PAGER_WRITER_CACHEMOD ); + pPager->dbSize = nPage; + assertTruncateConstraint(pPager); } -/* -** Release the BtShared mutex associated with B-Tree handle p and -** clear the p->locked boolean. -*/ -static void unlockBtreeMutex(Btree *p){ - assert( p->locked==1 ); - assert( sqlite3_mutex_held(p->pBt->mutex) ); - assert( sqlite3_mutex_held(p->db->mutex) ); - assert( p->db==p->pBt->db ); - - sqlite3_mutex_leave(p->pBt->mutex); - p->locked = 0; -} /* -** Enter a mutex on the given BTree object. +** This function is called before attempting a hot-journal rollback. It +** syncs the journal file to disk, then sets pPager->journalHdr to the +** size of the journal file so that the pager_playback() routine knows +** that the entire journal file has been synced. ** -** If the object is not sharable, then no mutex is ever required -** and this routine is a no-op. The underlying mutex is non-recursive. -** But we keep a reference count in Btree.wantToLock so the behavior -** of this interface is recursive. +** Syncing a hot-journal to disk before attempting to roll it back ensures +** that if a power-failure occurs during the rollback, the process that +** attempts rollback following system recovery sees the same journal +** content as this process. ** -** To avoid deadlocks, multiple Btrees are locked in the same order -** by all database connections. The p->pNext is a list of other -** Btrees belonging to the same database connection as the p Btree -** which need to be locked after p. If we cannot get a lock on -** p, then first unlock all of the others on p->pNext, then wait -** for the lock to become available on p, then relock all of the -** subsequent Btrees that desire a lock. +** If everything goes as planned, SQLITE_OK is returned. Otherwise, +** an SQLite error code. */ -SQLITE_PRIVATE void sqlite3BtreeEnter(Btree *p){ - Btree *pLater; - - /* Some basic sanity checking on the Btree. The list of Btrees - ** connected by pNext and pPrev should be in sorted order by - ** Btree.pBt value. All elements of the list should belong to - ** the same connection. Only shared Btrees are on the list. */ - assert( p->pNext==0 || p->pNext->pBt>p->pBt ); - assert( p->pPrev==0 || p->pPrev->pBtpBt ); - assert( p->pNext==0 || p->pNext->db==p->db ); - assert( p->pPrev==0 || p->pPrev->db==p->db ); - assert( p->sharable || (p->pNext==0 && p->pPrev==0) ); - - /* Check for locking consistency */ - assert( !p->locked || p->wantToLock>0 ); - assert( p->sharable || p->wantToLock==0 ); - - /* We should already hold a lock on the database connection */ - assert( sqlite3_mutex_held(p->db->mutex) ); - - /* Unless the database is sharable and unlocked, then BtShared.db - ** should already be set correctly. */ - assert( (p->locked==0 && p->sharable) || p->pBt->db==p->db ); - - if( !p->sharable ) return; - p->wantToLock++; - if( p->locked ) return; - - /* In most cases, we should be able to acquire the lock we - ** want without having to go throught the ascending lock - ** procedure that follows. Just be sure not to block. - */ - if( sqlite3_mutex_try(p->pBt->mutex)==SQLITE_OK ){ - p->pBt->db = p->db; - p->locked = 1; - return; - } - - /* To avoid deadlock, first release all locks with a larger - ** BtShared address. Then acquire our lock. Then reacquire - ** the other BtShared locks that we used to hold in ascending - ** order. - */ - for(pLater=p->pNext; pLater; pLater=pLater->pNext){ - assert( pLater->sharable ); - assert( pLater->pNext==0 || pLater->pNext->pBt>pLater->pBt ); - assert( !pLater->locked || pLater->wantToLock>0 ); - if( pLater->locked ){ - unlockBtreeMutex(pLater); - } +static int pagerSyncHotJournal(Pager *pPager){ + int rc = SQLITE_OK; + if( !pPager->noSync ){ + rc = sqlite3OsSync(pPager->jfd, SQLITE_SYNC_NORMAL); } - lockBtreeMutex(p); - for(pLater=p->pNext; pLater; pLater=pLater->pNext){ - if( pLater->wantToLock ){ - lockBtreeMutex(pLater); - } + if( rc==SQLITE_OK ){ + rc = sqlite3OsFileSize(pPager->jfd, &pPager->journalHdr); } + return rc; } /* -** Exit the recursive mutex on a Btree. +** Shutdown the page cache. Free all memory and close all files. +** +** If a transaction was in progress when this routine is called, that +** transaction is rolled back. All outstanding pages are invalidated +** and their memory is freed. Any attempt to use a page associated +** with this page cache after this function returns will likely +** result in a coredump. +** +** This function always succeeds. If a transaction is active an attempt +** is made to roll it back. If an error occurs during the rollback +** a hot journal may be left in the filesystem but no error is returned +** to the caller. */ -SQLITE_PRIVATE void sqlite3BtreeLeave(Btree *p){ - if( p->sharable ){ - assert( p->wantToLock>0 ); - p->wantToLock--; - if( p->wantToLock==0 ){ - unlockBtreeMutex(p); +SQLITE_PRIVATE int sqlite3PagerClose(Pager *pPager){ + u8 *pTmp = (u8 *)pPager->pTmpSpace; + + assert( assert_pager_state(pPager) ); + disable_simulated_io_errors(); + sqlite3BeginBenignMalloc(); + /* pPager->errCode = 0; */ + pPager->exclusiveMode = 0; +#ifndef SQLITE_OMIT_WAL + sqlite3WalClose(pPager->pWal, pPager->ckptSyncFlags, pPager->pageSize, pTmp); + pPager->pWal = 0; +#endif + pager_reset(pPager); + if( MEMDB ){ + pager_unlock(pPager); + }else{ + /* If it is open, sync the journal file before calling UnlockAndRollback. + ** If this is not done, then an unsynced portion of the open journal + ** file may be played back into the database. If a power failure occurs + ** while this is happening, the database could become corrupt. + ** + ** If an error occurs while trying to sync the journal, shift the pager + ** into the ERROR state. This causes UnlockAndRollback to unlock the + ** database and close the journal file without attempting to roll it + ** back or finalize it. The next database user will have to do hot-journal + ** rollback before accessing the database file. + */ + if( isOpen(pPager->jfd) ){ + pager_error(pPager, pagerSyncHotJournal(pPager)); } + pagerUnlockAndRollback(pPager); } + sqlite3EndBenignMalloc(); + enable_simulated_io_errors(); + PAGERTRACE(("CLOSE %d\n", PAGERID(pPager))); + IOTRACE(("CLOSE %p\n", pPager)) + sqlite3OsClose(pPager->jfd); + sqlite3OsClose(pPager->fd); + sqlite3PageFree(pTmp); + sqlite3PcacheClose(pPager->pPCache); + +#ifdef SQLITE_HAS_CODEC + if( pPager->xCodecFree ) pPager->xCodecFree(pPager->pCodec); +#endif + + assert( !pPager->aSavepoint && !pPager->pInJournal ); + assert( !isOpen(pPager->jfd) && !isOpen(pPager->sjfd) ); + + sqlite3_free(pPager); + return SQLITE_OK; } -#ifndef NDEBUG +#if !defined(NDEBUG) || defined(SQLITE_TEST) /* -** Return true if the BtShared mutex is held on the btree, or if the -** B-Tree is not marked as sharable. -** -** This routine is used only from within assert() statements. +** Return the page number for page pPg. */ -SQLITE_PRIVATE int sqlite3BtreeHoldsMutex(Btree *p){ - assert( p->sharable==0 || p->locked==0 || p->wantToLock>0 ); - assert( p->sharable==0 || p->locked==0 || p->db==p->pBt->db ); - assert( p->sharable==0 || p->locked==0 || sqlite3_mutex_held(p->pBt->mutex) ); - assert( p->sharable==0 || p->locked==0 || sqlite3_mutex_held(p->db->mutex) ); - - return (p->sharable==0 || p->locked); +SQLITE_PRIVATE Pgno sqlite3PagerPagenumber(DbPage *pPg){ + return pPg->pgno; } #endif - -#ifndef SQLITE_OMIT_INCRBLOB /* -** Enter and leave a mutex on a Btree given a cursor owned by that -** Btree. These entry points are used by incremental I/O and can be -** omitted if that module is not used. +** Increment the reference count for page pPg. */ -SQLITE_PRIVATE void sqlite3BtreeEnterCursor(BtCursor *pCur){ - sqlite3BtreeEnter(pCur->pBtree); -} -SQLITE_PRIVATE void sqlite3BtreeLeaveCursor(BtCursor *pCur){ - sqlite3BtreeLeave(pCur->pBtree); +SQLITE_PRIVATE void sqlite3PagerRef(DbPage *pPg){ + sqlite3PcacheRef(pPg); } -#endif /* SQLITE_OMIT_INCRBLOB */ - /* -** Enter the mutex on every Btree associated with a database -** connection. This is needed (for example) prior to parsing -** a statement since we will be comparing table and column names -** against all schemas and we do not want those schemas being -** reset out from under us. +** Sync the journal. In other words, make sure all the pages that have +** been written to the journal have actually reached the surface of the +** disk and can be restored in the event of a hot-journal rollback. ** -** There is a corresponding leave-all procedures. +** If the Pager.noSync flag is set, then this function is a no-op. +** Otherwise, the actions required depend on the journal-mode and the +** device characteristics of the the file-system, as follows: ** -** Enter the mutexes in accending order by BtShared pointer address -** to avoid the possibility of deadlock when two threads with -** two or more btrees in common both try to lock all their btrees -** at the same instant. -*/ -SQLITE_PRIVATE void sqlite3BtreeEnterAll(sqlite3 *db){ - int i; - Btree *p, *pLater; - assert( sqlite3_mutex_held(db->mutex) ); - for(i=0; inDb; i++){ - p = db->aDb[i].pBt; - assert( !p || (p->locked==0 && p->sharable) || p->pBt->db==p->db ); - if( p && p->sharable ){ - p->wantToLock++; - if( !p->locked ){ - assert( p->wantToLock==1 ); - while( p->pPrev ) p = p->pPrev; - while( p->locked && p->pNext ) p = p->pNext; - for(pLater = p->pNext; pLater; pLater=pLater->pNext){ - if( pLater->locked ){ - unlockBtreeMutex(pLater); - } - } - while( p ){ - lockBtreeMutex(p); - p = p->pNext; - } - } - } - } -} -SQLITE_PRIVATE void sqlite3BtreeLeaveAll(sqlite3 *db){ - int i; - Btree *p; - assert( sqlite3_mutex_held(db->mutex) ); - for(i=0; inDb; i++){ - p = db->aDb[i].pBt; - if( p && p->sharable ){ - assert( p->wantToLock>0 ); - p->wantToLock--; - if( p->wantToLock==0 ){ - unlockBtreeMutex(p); - } - } - } -} - -#ifndef NDEBUG -/* -** Return true if the current thread holds the database connection -** mutex and all required BtShared mutexes. +** * If the journal file is an in-memory journal file, no action need +** be taken. ** -** This routine is used inside assert() statements only. -*/ -SQLITE_PRIVATE int sqlite3BtreeHoldsAllMutexes(sqlite3 *db){ - int i; - if( !sqlite3_mutex_held(db->mutex) ){ - return 0; - } - for(i=0; inDb; i++){ - Btree *p; - p = db->aDb[i].pBt; - if( p && p->sharable && - (p->wantToLock==0 || !sqlite3_mutex_held(p->pBt->mutex)) ){ - return 0; - } - } - return 1; -} -#endif /* NDEBUG */ - -/* -** Add a new Btree pointer to a BtreeMutexArray. -** if the pointer can possibly be shared with -** another database connection. +** * Otherwise, if the device does not support the SAFE_APPEND property, +** then the nRec field of the most recently written journal header +** is updated to contain the number of journal records that have +** been written following it. If the pager is operating in full-sync +** mode, then the journal file is synced before this field is updated. +** +** * If the device does not support the SEQUENTIAL property, then +** journal file is synced. +** +** Or, in pseudo-code: ** -** The pointers are kept in sorted order by pBtree->pBt. That -** way when we go to enter all the mutexes, we can enter them -** in order without every having to backup and retry and without -** worrying about deadlock. +** if( NOT ){ +** if( NOT SAFE_APPEND ){ +** if( ) xSync(); +** +** } +** if( NOT SEQUENTIAL ) xSync(); +** } ** -** The number of shared btrees will always be small (usually 0 or 1) -** so an insertion sort is an adequate algorithm here. +** If successful, this routine clears the PGHDR_NEED_SYNC flag of every +** page currently held in memory before returning SQLITE_OK. If an IO +** error is encountered, then the IO error code is returned to the caller. */ -SQLITE_PRIVATE void sqlite3BtreeMutexArrayInsert(BtreeMutexArray *pArray, Btree *pBtree){ - int i, j; - BtShared *pBt; - if( pBtree==0 || pBtree->sharable==0 ) return; -#ifndef NDEBUG - { - for(i=0; inMutex; i++){ - assert( pArray->aBtree[i]!=pBtree ); - } - } -#endif - assert( pArray->nMutex>=0 ); - assert( pArray->nMutexaBtree)-1 ); - pBt = pBtree->pBt; - for(i=0; inMutex; i++){ - assert( pArray->aBtree[i]!=pBtree ); - if( pArray->aBtree[i]->pBt>pBt ){ - for(j=pArray->nMutex; j>i; j--){ - pArray->aBtree[j] = pArray->aBtree[j-1]; - } - pArray->aBtree[i] = pBtree; - pArray->nMutex++; - return; - } - } - pArray->aBtree[pArray->nMutex++] = pBtree; -} +static int syncJournal(Pager *pPager, int newHdr){ + int rc; /* Return code */ -/* -** Enter the mutex of every btree in the array. This routine is -** called at the beginning of sqlite3VdbeExec(). The mutexes are -** exited at the end of the same function. -*/ -SQLITE_PRIVATE void sqlite3BtreeMutexArrayEnter(BtreeMutexArray *pArray){ - int i; - for(i=0; inMutex; i++){ - Btree *p = pArray->aBtree[i]; - /* Some basic sanity checking */ - assert( i==0 || pArray->aBtree[i-1]->pBtpBt ); - assert( !p->locked || p->wantToLock>0 ); + assert( pPager->eState==PAGER_WRITER_CACHEMOD + || pPager->eState==PAGER_WRITER_DBMOD + ); + assert( assert_pager_state(pPager) ); + assert( !pagerUseWal(pPager) ); - /* We should already hold a lock on the database connection */ - assert( sqlite3_mutex_held(p->db->mutex) ); + rc = sqlite3PagerExclusiveLock(pPager); + if( rc!=SQLITE_OK ) return rc; - p->wantToLock++; - if( !p->locked && p->sharable ){ - lockBtreeMutex(p); - } - } -} + if( !pPager->noSync ){ + assert( !pPager->tempFile ); + if( isOpen(pPager->jfd) && pPager->journalMode!=PAGER_JOURNALMODE_MEMORY ){ + const int iDc = sqlite3OsDeviceCharacteristics(pPager->fd); + assert( isOpen(pPager->jfd) ); -/* -** Leave the mutex of every btree in the group. -*/ -SQLITE_PRIVATE void sqlite3BtreeMutexArrayLeave(BtreeMutexArray *pArray){ - int i; - for(i=0; inMutex; i++){ - Btree *p = pArray->aBtree[i]; - /* Some basic sanity checking */ - assert( i==0 || pArray->aBtree[i-1]->pBtpBt ); - assert( p->locked || !p->sharable ); - assert( p->wantToLock>0 ); + if( 0==(iDc&SQLITE_IOCAP_SAFE_APPEND) ){ + /* This block deals with an obscure problem. If the last connection + ** that wrote to this database was operating in persistent-journal + ** mode, then the journal file may at this point actually be larger + ** than Pager.journalOff bytes. If the next thing in the journal + ** file happens to be a journal-header (written as part of the + ** previous connection's transaction), and a crash or power-failure + ** occurs after nRec is updated but before this connection writes + ** anything else to the journal file (or commits/rolls back its + ** transaction), then SQLite may become confused when doing the + ** hot-journal rollback following recovery. It may roll back all + ** of this connections data, then proceed to rolling back the old, + ** out-of-date data that follows it. Database corruption. + ** + ** To work around this, if the journal file does appear to contain + ** a valid header following Pager.journalOff, then write a 0x00 + ** byte to the start of it to prevent it from being recognized. + ** + ** Variable iNextHdrOffset is set to the offset at which this + ** problematic header will occur, if it exists. aMagic is used + ** as a temporary buffer to inspect the first couple of bytes of + ** the potential journal header. + */ + i64 iNextHdrOffset; + u8 aMagic[8]; + u8 zHeader[sizeof(aJournalMagic)+4]; - /* We should already hold a lock on the database connection */ - assert( sqlite3_mutex_held(p->db->mutex) ); + memcpy(zHeader, aJournalMagic, sizeof(aJournalMagic)); + put32bits(&zHeader[sizeof(aJournalMagic)], pPager->nRec); - p->wantToLock--; - if( p->wantToLock==0 && p->locked ){ - unlockBtreeMutex(p); - } - } -} + iNextHdrOffset = journalHdrOffset(pPager); + rc = sqlite3OsRead(pPager->jfd, aMagic, 8, iNextHdrOffset); + if( rc==SQLITE_OK && 0==memcmp(aMagic, aJournalMagic, 8) ){ + static const u8 zerobyte = 0; + rc = sqlite3OsWrite(pPager->jfd, &zerobyte, 1, iNextHdrOffset); + } + if( rc!=SQLITE_OK && rc!=SQLITE_IOERR_SHORT_READ ){ + return rc; + } -#else -SQLITE_PRIVATE void sqlite3BtreeEnter(Btree *p){ - p->pBt->db = p->db; -} -SQLITE_PRIVATE void sqlite3BtreeEnterAll(sqlite3 *db){ - int i; - for(i=0; inDb; i++){ - Btree *p = db->aDb[i].pBt; - if( p ){ - p->pBt->db = p->db; + /* Write the nRec value into the journal file header. If in + ** full-synchronous mode, sync the journal first. This ensures that + ** all data has really hit the disk before nRec is updated to mark + ** it as a candidate for rollback. + ** + ** This is not required if the persistent media supports the + ** SAFE_APPEND property. Because in this case it is not possible + ** for garbage data to be appended to the file, the nRec field + ** is populated with 0xFFFFFFFF when the journal header is written + ** and never needs to be updated. + */ + if( pPager->fullSync && 0==(iDc&SQLITE_IOCAP_SEQUENTIAL) ){ + PAGERTRACE(("SYNC journal of %d\n", PAGERID(pPager))); + IOTRACE(("JSYNC %p\n", pPager)) + rc = sqlite3OsSync(pPager->jfd, pPager->syncFlags); + if( rc!=SQLITE_OK ) return rc; + } + IOTRACE(("JHDR %p %lld\n", pPager, pPager->journalHdr)); + rc = sqlite3OsWrite( + pPager->jfd, zHeader, sizeof(zHeader), pPager->journalHdr + ); + if( rc!=SQLITE_OK ) return rc; + } + if( 0==(iDc&SQLITE_IOCAP_SEQUENTIAL) ){ + PAGERTRACE(("SYNC journal of %d\n", PAGERID(pPager))); + IOTRACE(("JSYNC %p\n", pPager)) + rc = sqlite3OsSync(pPager->jfd, pPager->syncFlags| + (pPager->syncFlags==SQLITE_SYNC_FULL?SQLITE_SYNC_DATAONLY:0) + ); + if( rc!=SQLITE_OK ) return rc; + } + + pPager->journalHdr = pPager->journalOff; + if( newHdr && 0==(iDc&SQLITE_IOCAP_SAFE_APPEND) ){ + pPager->nRec = 0; + rc = writeJournalHdr(pPager); + if( rc!=SQLITE_OK ) return rc; + } + }else{ + pPager->journalHdr = pPager->journalOff; } } + + /* Unless the pager is in noSync mode, the journal file was just + ** successfully synced. Either way, clear the PGHDR_NEED_SYNC flag on + ** all pages. + */ + sqlite3PcacheClearSyncFlags(pPager->pPCache); + pPager->eState = PAGER_WRITER_DBMOD; + assert( assert_pager_state(pPager) ); + return SQLITE_OK; } -#endif /* if SQLITE_THREADSAFE */ -#endif /* ifndef SQLITE_OMIT_SHARED_CACHE */ -/************** End of btmutex.c *********************************************/ -/************** Begin file btree.c *******************************************/ /* -** 2004 April 6 +** The argument is the first in a linked list of dirty pages connected +** by the PgHdr.pDirty pointer. This function writes each one of the +** in-memory pages in the list to the database file. The argument may +** be NULL, representing an empty list. In this case this function is +** a no-op. ** -** The author disclaims copyright to this source code. In place of -** a legal notice, here is a blessing: +** The pager must hold at least a RESERVED lock when this function +** is called. Before writing anything to the database file, this lock +** is upgraded to an EXCLUSIVE lock. If the lock cannot be obtained, +** SQLITE_BUSY is returned and no data is written to the database file. +** +** If the pager is a temp-file pager and the actual file-system file +** is not yet open, it is created and opened before any data is +** written out. ** -** May you do good and not evil. -** May you find forgiveness for yourself and forgive others. -** May you share freely, never taking more than you give. +** Once the lock has been upgraded and, if necessary, the file opened, +** the pages are written out to the database file in list order. Writing +** a page is skipped if it meets either of the following criteria: ** -************************************************************************* -** $Id: btree.c,v 1.645 2009/06/26 16:32:13 shane Exp $ +** * The page number is greater than Pager.dbSize, or +** * The PGHDR_DONT_WRITE flag is set on the page. ** -** This file implements a external (disk-based) database using BTrees. -** See the header comment on "btreeInt.h" for additional information. -** Including a description of file format and an overview of operation. +** If writing out a page causes the database file to grow, Pager.dbFileSize +** is updated accordingly. If page 1 is written out, then the value cached +** in Pager.dbFileVers[] is updated to match the new value stored in +** the database file. +** +** If everything is successful, SQLITE_OK is returned. If an IO error +** occurs, an IO error code is returned. Or, if the EXCLUSIVE lock cannot +** be obtained, SQLITE_BUSY is returned. */ +static int pager_write_pagelist(Pager *pPager, PgHdr *pList){ + int rc = SQLITE_OK; /* Return code */ -/* -** The header string that appears at the beginning of every -** SQLite database. -*/ -static const char zMagicHeader[] = SQLITE_FILE_HEADER; + /* This function is only called for rollback pagers in WRITER_DBMOD state. */ + assert( !pagerUseWal(pPager) ); + assert( pPager->eState==PAGER_WRITER_DBMOD ); + assert( pPager->eLock==EXCLUSIVE_LOCK ); -/* -** Set this global variable to 1 to enable tracing using the TRACE -** macro. -*/ -#if 0 -int sqlite3BtreeTrace=1; /* True to enable tracing */ -# define TRACE(X) if(sqlite3BtreeTrace){printf X;fflush(stdout);} -#else -# define TRACE(X) -#endif + /* If the file is a temp-file has not yet been opened, open it now. It + ** is not possible for rc to be other than SQLITE_OK if this branch + ** is taken, as pager_wait_on_lock() is a no-op for temp-files. + */ + if( !isOpen(pPager->fd) ){ + assert( pPager->tempFile && rc==SQLITE_OK ); + rc = pagerOpentemp(pPager, pPager->fd, pPager->vfsFlags); + } + /* Before the first write, give the VFS a hint of what the final + ** file size will be. + */ + assert( rc!=SQLITE_OK || isOpen(pPager->fd) ); + if( rc==SQLITE_OK && pPager->dbSize>pPager->dbHintSize ){ + sqlite3_int64 szFile = pPager->pageSize * (sqlite3_int64)pPager->dbSize; + sqlite3OsFileControlHint(pPager->fd, SQLITE_FCNTL_SIZE_HINT, &szFile); + pPager->dbHintSize = pPager->dbSize; + } + while( rc==SQLITE_OK && pList ){ + Pgno pgno = pList->pgno; -#ifndef SQLITE_OMIT_SHARED_CACHE -/* -** A list of BtShared objects that are eligible for participation -** in shared cache. This variable has file scope during normal builds, -** but the test harness needs to access it so we make it global for -** test builds. -** -** Access to this variable is protected by SQLITE_MUTEX_STATIC_MASTER. -*/ -#ifdef SQLITE_TEST -SQLITE_PRIVATE BtShared *SQLITE_WSD sqlite3SharedCacheList = 0; -#else -static BtShared *SQLITE_WSD sqlite3SharedCacheList = 0; -#endif -#endif /* SQLITE_OMIT_SHARED_CACHE */ + /* If there are dirty pages in the page cache with page numbers greater + ** than Pager.dbSize, this means sqlite3PagerTruncateImage() was called to + ** make the file smaller (presumably by auto-vacuum code). Do not write + ** any such pages to the file. + ** + ** Also, do not write out any page that has the PGHDR_DONT_WRITE flag + ** set (set by sqlite3PagerDontWrite()). + */ + if( pgno<=pPager->dbSize && 0==(pList->flags&PGHDR_DONT_WRITE) ){ + i64 offset = (pgno-1)*(i64)pPager->pageSize; /* Offset to write */ + char *pData; /* Data to write */ -#ifndef SQLITE_OMIT_SHARED_CACHE -/* -** Enable or disable the shared pager and schema features. -** -** This routine has no effect on existing database connections. -** The shared cache setting effects only future calls to -** sqlite3_open(), sqlite3_open16(), or sqlite3_open_v2(). -*/ -SQLITE_API int sqlite3_enable_shared_cache(int enable){ - sqlite3GlobalConfig.sharedCacheEnabled = enable; - return SQLITE_OK; -} -#endif + assert( (pList->flags&PGHDR_NEED_SYNC)==0 ); + if( pList->pgno==1 ) pager_write_changecounter(pList); + /* Encode the database */ + CODEC2(pPager, pList->pData, pgno, 6, return SQLITE_NOMEM, pData); -/* -** Forward declaration -*/ -static int checkForReadConflicts(Btree*, Pgno, BtCursor*, i64); + /* Write out the page data. */ + rc = sqlite3OsWrite(pPager->fd, pData, pPager->pageSize, offset); + /* If page 1 was just written, update Pager.dbFileVers to match + ** the value now stored in the database file. If writing this + ** page caused the database file to grow, update dbFileSize. + */ + if( pgno==1 ){ + memcpy(&pPager->dbFileVers, &pData[24], sizeof(pPager->dbFileVers)); + } + if( pgno>pPager->dbFileSize ){ + pPager->dbFileSize = pgno; + } + pPager->aStat[PAGER_STAT_WRITE]++; -#ifdef SQLITE_OMIT_SHARED_CACHE - /* - ** The functions querySharedCacheTableLock(), setSharedCacheTableLock(), - ** and clearAllSharedCacheTableLocks() - ** manipulate entries in the BtShared.pLock linked list used to store - ** shared-cache table level locks. If the library is compiled with the - ** shared-cache feature disabled, then there is only ever one user - ** of each BtShared structure and so this locking is not necessary. - ** So define the lock related functions as no-ops. - */ - #define querySharedCacheTableLock(a,b,c) SQLITE_OK - #define setSharedCacheTableLock(a,b,c) SQLITE_OK - #define clearAllSharedCacheTableLocks(a) -#endif + /* Update any backup objects copying the contents of this pager. */ + sqlite3BackupUpdate(pPager->pBackup, pgno, (u8*)pList->pData); + + PAGERTRACE(("STORE %d page %d hash(%08x)\n", + PAGERID(pPager), pgno, pager_pagehash(pList))); + IOTRACE(("PGOUT %p %d\n", pPager, pgno)); + PAGER_INCR(sqlite3_pager_writedb_count); + }else{ + PAGERTRACE(("NOSTORE %d page %d\n", PAGERID(pPager), pgno)); + } + pager_set_pagehash(pList); + pList = pList->pDirty; + } + + return rc; +} -#ifndef SQLITE_OMIT_SHARED_CACHE /* -** Query to see if btree handle p may obtain a lock of type eLock -** (READ_LOCK or WRITE_LOCK) on the table with root-page iTab. Return -** SQLITE_OK if the lock may be obtained (by calling -** setSharedCacheTableLock()), or SQLITE_LOCKED if not. +** Ensure that the sub-journal file is open. If it is already open, this +** function is a no-op. +** +** SQLITE_OK is returned if everything goes according to plan. An +** SQLITE_IOERR_XXX error code is returned if a call to sqlite3OsOpen() +** fails. */ -static int querySharedCacheTableLock(Btree *p, Pgno iTab, u8 eLock){ - BtShared *pBt = p->pBt; - BtLock *pIter; - - assert( sqlite3BtreeHoldsMutex(p) ); - assert( eLock==READ_LOCK || eLock==WRITE_LOCK ); - assert( p->db!=0 ); - - /* If requesting a write-lock, then the Btree must have an open write - ** transaction on this file. And, obviously, for this to be so there - ** must be an open write transaction on the file itself. - */ - assert( eLock==READ_LOCK || (p==pBt->pWriter && p->inTrans==TRANS_WRITE) ); - assert( eLock==READ_LOCK || pBt->inTransaction==TRANS_WRITE ); - - /* This is a no-op if the shared-cache is not enabled */ - if( !p->sharable ){ - return SQLITE_OK; +static int openSubJournal(Pager *pPager){ + int rc = SQLITE_OK; + if( !isOpen(pPager->sjfd) ){ + if( pPager->journalMode==PAGER_JOURNALMODE_MEMORY || pPager->subjInMemory ){ + sqlite3MemJournalOpen(pPager->sjfd); + }else{ + rc = pagerOpentemp(pPager, pPager->sjfd, SQLITE_OPEN_SUBJOURNAL); + } } + return rc; +} - /* If some other connection is holding an exclusive lock, the - ** requested lock may not be obtained. - */ - if( pBt->pWriter!=p && pBt->isExclusive ){ - sqlite3ConnectionBlocked(p->db, pBt->pWriter->db); - return SQLITE_LOCKED_SHAREDCACHE; - } +/* +** Append a record of the current state of page pPg to the sub-journal. +** It is the callers responsibility to use subjRequiresPage() to check +** that it is really required before calling this function. +** +** If successful, set the bit corresponding to pPg->pgno in the bitvecs +** for all open savepoints before returning. +** +** This function returns SQLITE_OK if everything is successful, an IO +** error code if the attempt to write to the sub-journal fails, or +** SQLITE_NOMEM if a malloc fails while setting a bit in a savepoint +** bitvec. +*/ +static int subjournalPage(PgHdr *pPg){ + int rc = SQLITE_OK; + Pager *pPager = pPg->pPager; + if( pPager->journalMode!=PAGER_JOURNALMODE_OFF ){ + + /* Open the sub-journal, if it has not already been opened */ + assert( pPager->useJournal ); + assert( isOpen(pPager->jfd) || pagerUseWal(pPager) ); + assert( isOpen(pPager->sjfd) || pPager->nSubRec==0 ); + assert( pagerUseWal(pPager) + || pageInJournal(pPg) + || pPg->pgno>pPager->dbOrigSize + ); + rc = openSubJournal(pPager); - /* This (along with setSharedCacheTableLock()) is where - ** the ReadUncommitted flag is dealt with. - ** If the caller is querying for a read-lock on any table - ** other than the sqlite_master table (table 1) and if the ReadUncommitted - ** flag is set, then the lock granted even if there are write-locks - ** on the table. If a write-lock is requested, the ReadUncommitted flag - ** is not considered. - ** - ** In function setSharedCacheTableLock(), if a read-lock is demanded and the - ** ReadUncommitted flag is set, no entry is added to the locks list - ** (BtShared.pLock). - ** - ** To summarize: If the ReadUncommitted flag is set, then read cursors - ** on non-schema tables do not create or respect table locks. The locking - ** procedure for a write-cursor does not change. - */ - if( - 0==(p->db->flags&SQLITE_ReadUncommitted) || - eLock==WRITE_LOCK || - iTab==MASTER_ROOT - ){ - for(pIter=pBt->pLock; pIter; pIter=pIter->pNext){ - /* The condition (pIter->eLock!=eLock) in the following if(...) - ** statement is a simplification of: - ** - ** (eLock==WRITE_LOCK || pIter->eLock==WRITE_LOCK) - ** - ** since we know that if eLock==WRITE_LOCK, then no other connection - ** may hold a WRITE_LOCK on any table in this file (since there can - ** only be a single writer). - */ - assert( pIter->eLock==READ_LOCK || pIter->eLock==WRITE_LOCK ); - assert( eLock==READ_LOCK || pIter->pBtree==p || pIter->eLock==READ_LOCK); - if( pIter->pBtree!=p && pIter->iTable==iTab && pIter->eLock!=eLock ){ - sqlite3ConnectionBlocked(p->db, pIter->pBtree->db); - if( eLock==WRITE_LOCK ){ - assert( p==pBt->pWriter ); - pBt->isPending = 1; - } - return SQLITE_LOCKED_SHAREDCACHE; + /* If the sub-journal was opened successfully (or was already open), + ** write the journal record into the file. */ + if( rc==SQLITE_OK ){ + void *pData = pPg->pData; + i64 offset = (i64)pPager->nSubRec*(4+pPager->pageSize); + char *pData2; + + CODEC2(pPager, pData, pPg->pgno, 7, return SQLITE_NOMEM, pData2); + PAGERTRACE(("STMT-JOURNAL %d page %d\n", PAGERID(pPager), pPg->pgno)); + rc = write32bits(pPager->sjfd, offset, pPg->pgno); + if( rc==SQLITE_OK ){ + rc = sqlite3OsWrite(pPager->sjfd, pData2, pPager->pageSize, offset+4); } } } - return SQLITE_OK; + if( rc==SQLITE_OK ){ + pPager->nSubRec++; + assert( pPager->nSavepoint>0 ); + rc = addToSavepointBitvecs(pPager, pPg->pgno); + } + return rc; } -#endif /* !SQLITE_OMIT_SHARED_CACHE */ -#ifndef SQLITE_OMIT_SHARED_CACHE /* -** Add a lock on the table with root-page iTable to the shared-btree used -** by Btree handle p. Parameter eLock must be either READ_LOCK or -** WRITE_LOCK. +** This function is called by the pcache layer when it has reached some +** soft memory limit. The first argument is a pointer to a Pager object +** (cast as a void*). The pager is always 'purgeable' (not an in-memory +** database). The second argument is a reference to a page that is +** currently dirty but has no outstanding references. The page +** is always associated with the Pager object passed as the first +** argument. +** +** The job of this function is to make pPg clean by writing its contents +** out to the database file, if possible. This may involve syncing the +** journal file. ** -** SQLITE_OK is returned if the lock is added successfully. SQLITE_BUSY and -** SQLITE_NOMEM may also be returned. +** If successful, sqlite3PcacheMakeClean() is called on the page and +** SQLITE_OK returned. If an IO error occurs while trying to make the +** page clean, the IO error code is returned. If the page cannot be +** made clean for some other reason, but no error occurs, then SQLITE_OK +** is returned by sqlite3PcacheMakeClean() is not called. */ -static int setSharedCacheTableLock(Btree *p, Pgno iTable, u8 eLock){ - BtShared *pBt = p->pBt; - BtLock *pLock = 0; - BtLock *pIter; - - assert( sqlite3BtreeHoldsMutex(p) ); - assert( eLock==READ_LOCK || eLock==WRITE_LOCK ); - assert( p->db!=0 ); - - /* This is a no-op if the shared-cache is not enabled */ - if( !p->sharable ){ - return SQLITE_OK; - } +static int pagerStress(void *p, PgHdr *pPg){ + Pager *pPager = (Pager *)p; + int rc = SQLITE_OK; - assert( SQLITE_OK==querySharedCacheTableLock(p, iTable, eLock) ); + assert( pPg->pPager==pPager ); + assert( pPg->flags&PGHDR_DIRTY ); - /* If the read-uncommitted flag is set and a read-lock is requested on - ** a non-schema table, then the lock is always granted. Return early - ** without adding an entry to the BtShared.pLock list. See - ** comment in function querySharedCacheTableLock() for more info - ** on handling the ReadUncommitted flag. - */ - if( - (p->db->flags&SQLITE_ReadUncommitted) && - (eLock==READ_LOCK) && - iTable!=MASTER_ROOT - ){ + /* The doNotSyncSpill flag is set during times when doing a sync of + ** journal (and adding a new header) is not allowed. This occurs + ** during calls to sqlite3PagerWrite() while trying to journal multiple + ** pages belonging to the same sector. + ** + ** The doNotSpill flag inhibits all cache spilling regardless of whether + ** or not a sync is required. This is set during a rollback. + ** + ** Spilling is also prohibited when in an error state since that could + ** lead to database corruption. In the current implementaton it + ** is impossible for sqlite3PcacheFetch() to be called with createFlag==1 + ** while in the error state, hence it is impossible for this routine to + ** be called in the error state. Nevertheless, we include a NEVER() + ** test for the error state as a safeguard against future changes. + */ + if( NEVER(pPager->errCode) ) return SQLITE_OK; + if( pPager->doNotSpill ) return SQLITE_OK; + if( pPager->doNotSyncSpill && (pPg->flags & PGHDR_NEED_SYNC)!=0 ){ return SQLITE_OK; } - /* First search the list for an existing lock on this table. */ - for(pIter=pBt->pLock; pIter; pIter=pIter->pNext){ - if( pIter->iTable==iTable && pIter->pBtree==p ){ - pLock = pIter; - break; + pPg->pDirty = 0; + if( pagerUseWal(pPager) ){ + /* Write a single frame for this page to the log. */ + if( subjRequiresPage(pPg) ){ + rc = subjournalPage(pPg); } - } - - /* If the above search did not find a BtLock struct associating Btree p - ** with table iTable, allocate one and link it into the list. - */ - if( !pLock ){ - pLock = (BtLock *)sqlite3MallocZero(sizeof(BtLock)); - if( !pLock ){ - return SQLITE_NOMEM; + if( rc==SQLITE_OK ){ + rc = pagerWalFrames(pPager, pPg, 0, 0); + } + }else{ + + /* Sync the journal file if required. */ + if( pPg->flags&PGHDR_NEED_SYNC + || pPager->eState==PAGER_WRITER_CACHEMOD + ){ + rc = syncJournal(pPager, 1); + } + + /* If the page number of this page is larger than the current size of + ** the database image, it may need to be written to the sub-journal. + ** This is because the call to pager_write_pagelist() below will not + ** actually write data to the file in this case. + ** + ** Consider the following sequence of events: + ** + ** BEGIN; + ** + ** + ** SAVEPOINT sp; + ** + ** pagerStress(page X) + ** ROLLBACK TO sp; + ** + ** If (X>Y), then when pagerStress is called page X will not be written + ** out to the database file, but will be dropped from the cache. Then, + ** following the "ROLLBACK TO sp" statement, reading page X will read + ** data from the database file. This will be the copy of page X as it + ** was when the transaction started, not as it was when "SAVEPOINT sp" + ** was executed. + ** + ** The solution is to write the current data for page X into the + ** sub-journal file now (if it is not already there), so that it will + ** be restored to its current value when the "ROLLBACK TO sp" is + ** executed. + */ + if( NEVER( + rc==SQLITE_OK && pPg->pgno>pPager->dbSize && subjRequiresPage(pPg) + ) ){ + rc = subjournalPage(pPg); + } + + /* Write the contents of the page out to the database file. */ + if( rc==SQLITE_OK ){ + assert( (pPg->flags&PGHDR_NEED_SYNC)==0 ); + rc = pager_write_pagelist(pPager, pPg); } - pLock->iTable = iTable; - pLock->pBtree = p; - pLock->pNext = pBt->pLock; - pBt->pLock = pLock; } - /* Set the BtLock.eLock variable to the maximum of the current lock - ** and the requested lock. This means if a write-lock was already held - ** and a read-lock requested, we don't incorrectly downgrade the lock. - */ - assert( WRITE_LOCK>READ_LOCK ); - if( eLock>pLock->eLock ){ - pLock->eLock = eLock; + /* Mark the page as clean. */ + if( rc==SQLITE_OK ){ + PAGERTRACE(("STRESS %d page %d\n", PAGERID(pPager), pPg->pgno)); + sqlite3PcacheMakeClean(pPg); } - return SQLITE_OK; + return pager_error(pPager, rc); } -#endif /* !SQLITE_OMIT_SHARED_CACHE */ -#ifndef SQLITE_OMIT_SHARED_CACHE + /* -** Release all the table locks (locks obtained via calls to -** the setSharedCacheTableLock() procedure) held by Btree handle p. +** Allocate and initialize a new Pager object and put a pointer to it +** in *ppPager. The pager should eventually be freed by passing it +** to sqlite3PagerClose(). ** -** This function assumes that handle p has an open read or write -** transaction. If it does not, then the BtShared.isPending variable -** may be incorrectly cleared. -*/ -static void clearAllSharedCacheTableLocks(Btree *p){ - BtShared *pBt = p->pBt; - BtLock **ppIter = &pBt->pLock; - - assert( sqlite3BtreeHoldsMutex(p) ); - assert( p->sharable || 0==*ppIter ); - assert( p->inTrans>0 ); +** The zFilename argument is the path to the database file to open. +** If zFilename is NULL then a randomly-named temporary file is created +** and used as the file to be cached. Temporary files are be deleted +** automatically when they are closed. If zFilename is ":memory:" then +** all information is held in cache. It is never written to disk. +** This can be used to implement an in-memory database. +** +** The nExtra parameter specifies the number of bytes of space allocated +** along with each page reference. This space is available to the user +** via the sqlite3PagerGetExtra() API. +** +** The flags argument is used to specify properties that affect the +** operation of the pager. It should be passed some bitwise combination +** of the PAGER_* flags. +** +** The vfsFlags parameter is a bitmask to pass to the flags parameter +** of the xOpen() method of the supplied VFS when opening files. +** +** If the pager object is allocated and the specified file opened +** successfully, SQLITE_OK is returned and *ppPager set to point to +** the new pager object. If an error occurs, *ppPager is set to NULL +** and error code returned. This function may return SQLITE_NOMEM +** (sqlite3Malloc() is used to allocate memory), SQLITE_CANTOPEN or +** various SQLITE_IO_XXX errors. +*/ +SQLITE_PRIVATE int sqlite3PagerOpen( + sqlite3_vfs *pVfs, /* The virtual file system to use */ + Pager **ppPager, /* OUT: Return the Pager structure here */ + const char *zFilename, /* Name of the database file to open */ + int nExtra, /* Extra bytes append to each in-memory page */ + int flags, /* flags controlling this file */ + int vfsFlags, /* flags passed through to sqlite3_vfs.xOpen() */ + void (*xReinit)(DbPage*) /* Function to reinitialize pages */ +){ + u8 *pPtr; + Pager *pPager = 0; /* Pager object to allocate and return */ + int rc = SQLITE_OK; /* Return code */ + int tempFile = 0; /* True for temp files (incl. in-memory files) */ + int memDb = 0; /* True if this is an in-memory file */ + int readOnly = 0; /* True if this is a read-only file */ + int journalFileSize; /* Bytes to allocate for each journal fd */ + char *zPathname = 0; /* Full path to database file */ + int nPathname = 0; /* Number of bytes in zPathname */ + int useJournal = (flags & PAGER_OMIT_JOURNAL)==0; /* False to omit journal */ + int pcacheSize = sqlite3PcacheSize(); /* Bytes to allocate for PCache */ + u32 szPageDflt = SQLITE_DEFAULT_PAGE_SIZE; /* Default page size */ + const char *zUri = 0; /* URI args to copy */ + int nUri = 0; /* Number of bytes of URI args at *zUri */ - while( *ppIter ){ - BtLock *pLock = *ppIter; - assert( pBt->isExclusive==0 || pBt->pWriter==pLock->pBtree ); - assert( pLock->pBtree->inTrans>=pLock->eLock ); - if( pLock->pBtree==p ){ - *ppIter = pLock->pNext; - sqlite3_free(pLock); - }else{ - ppIter = &pLock->pNext; + /* Figure out how much space is required for each journal file-handle + ** (there are two of them, the main journal and the sub-journal). This + ** is the maximum space required for an in-memory journal file handle + ** and a regular journal file-handle. Note that a "regular journal-handle" + ** may be a wrapper capable of caching the first portion of the journal + ** file in memory to implement the atomic-write optimization (see + ** source file journal.c). + */ + if( sqlite3JournalSize(pVfs)>sqlite3MemJournalSize() ){ + journalFileSize = ROUND8(sqlite3JournalSize(pVfs)); + }else{ + journalFileSize = ROUND8(sqlite3MemJournalSize()); + } + + /* Set the output variable to NULL in case an error occurs. */ + *ppPager = 0; + +#ifndef SQLITE_OMIT_MEMORYDB + if( flags & PAGER_MEMORY ){ + memDb = 1; + if( zFilename && zFilename[0] ){ + zPathname = sqlite3DbStrDup(0, zFilename); + if( zPathname==0 ) return SQLITE_NOMEM; + nPathname = sqlite3Strlen30(zPathname); + zFilename = 0; } } +#endif - assert( pBt->isPending==0 || pBt->pWriter ); - if( pBt->pWriter==p ){ - pBt->pWriter = 0; - pBt->isExclusive = 0; - pBt->isPending = 0; - }else if( pBt->nTransaction==2 ){ - /* This function is called when connection p is concluding its - ** transaction. If there currently exists a writer, and p is not - ** that writer, then the number of locks held by connections other - ** than the writer must be about to drop to zero. In this case - ** set the isPending flag to 0. + /* Compute and store the full pathname in an allocated buffer pointed + ** to by zPathname, length nPathname. Or, if this is a temporary file, + ** leave both nPathname and zPathname set to 0. + */ + if( zFilename && zFilename[0] ){ + const char *z; + nPathname = pVfs->mxPathname+1; + zPathname = sqlite3DbMallocRaw(0, nPathname*2); + if( zPathname==0 ){ + return SQLITE_NOMEM; + } + zPathname[0] = 0; /* Make sure initialized even if FullPathname() fails */ + rc = sqlite3OsFullPathname(pVfs, zFilename, nPathname, zPathname); + nPathname = sqlite3Strlen30(zPathname); + z = zUri = &zFilename[sqlite3Strlen30(zFilename)+1]; + while( *z ){ + z += sqlite3Strlen30(z)+1; + z += sqlite3Strlen30(z)+1; + } + nUri = (int)(&z[1] - zUri); + assert( nUri>=0 ); + if( rc==SQLITE_OK && nPathname+8>pVfs->mxPathname ){ + /* This branch is taken when the journal path required by + ** the database being opened will be more than pVfs->mxPathname + ** bytes in length. This means the database cannot be opened, + ** as it will not be possible to open the journal file or even + ** check for a hot-journal before reading. + */ + rc = SQLITE_CANTOPEN_BKPT; + } + if( rc!=SQLITE_OK ){ + sqlite3DbFree(0, zPathname); + return rc; + } + } + + /* Allocate memory for the Pager structure, PCache object, the + ** three file descriptors, the database file name and the journal + ** file name. The layout in memory is as follows: + ** + ** Pager object (sizeof(Pager) bytes) + ** PCache object (sqlite3PcacheSize() bytes) + ** Database file handle (pVfs->szOsFile bytes) + ** Sub-journal file handle (journalFileSize bytes) + ** Main journal file handle (journalFileSize bytes) + ** Database file name (nPathname+1 bytes) + ** Journal file name (nPathname+8+1 bytes) + */ + pPtr = (u8 *)sqlite3MallocZero( + ROUND8(sizeof(*pPager)) + /* Pager structure */ + ROUND8(pcacheSize) + /* PCache object */ + ROUND8(pVfs->szOsFile) + /* The main db file */ + journalFileSize * 2 + /* The two journal files */ + nPathname + 1 + nUri + /* zFilename */ + nPathname + 8 + 2 /* zJournal */ +#ifndef SQLITE_OMIT_WAL + + nPathname + 4 + 2 /* zWal */ +#endif + ); + assert( EIGHT_BYTE_ALIGNMENT(SQLITE_INT_TO_PTR(journalFileSize)) ); + if( !pPtr ){ + sqlite3DbFree(0, zPathname); + return SQLITE_NOMEM; + } + pPager = (Pager*)(pPtr); + pPager->pPCache = (PCache*)(pPtr += ROUND8(sizeof(*pPager))); + pPager->fd = (sqlite3_file*)(pPtr += ROUND8(pcacheSize)); + pPager->sjfd = (sqlite3_file*)(pPtr += ROUND8(pVfs->szOsFile)); + pPager->jfd = (sqlite3_file*)(pPtr += journalFileSize); + pPager->zFilename = (char*)(pPtr += journalFileSize); + assert( EIGHT_BYTE_ALIGNMENT(pPager->jfd) ); + + /* Fill in the Pager.zFilename and Pager.zJournal buffers, if required. */ + if( zPathname ){ + assert( nPathname>0 ); + pPager->zJournal = (char*)(pPtr += nPathname + 1 + nUri); + memcpy(pPager->zFilename, zPathname, nPathname); + if( nUri ) memcpy(&pPager->zFilename[nPathname+1], zUri, nUri); + memcpy(pPager->zJournal, zPathname, nPathname); + memcpy(&pPager->zJournal[nPathname], "-journal\000", 8+1); + sqlite3FileSuffix3(pPager->zFilename, pPager->zJournal); +#ifndef SQLITE_OMIT_WAL + pPager->zWal = &pPager->zJournal[nPathname+8+1]; + memcpy(pPager->zWal, zPathname, nPathname); + memcpy(&pPager->zWal[nPathname], "-wal\000", 4+1); + sqlite3FileSuffix3(pPager->zFilename, pPager->zWal); +#endif + sqlite3DbFree(0, zPathname); + } + pPager->pVfs = pVfs; + pPager->vfsFlags = vfsFlags; + + /* Open the pager file. + */ + if( zFilename && zFilename[0] ){ + int fout = 0; /* VFS flags returned by xOpen() */ + rc = sqlite3OsOpen(pVfs, pPager->zFilename, pPager->fd, vfsFlags, &fout); + assert( !memDb ); + readOnly = (fout&SQLITE_OPEN_READONLY); + + /* If the file was successfully opened for read/write access, + ** choose a default page size in case we have to create the + ** database file. The default page size is the maximum of: ** - ** If there is not currently a writer, then BtShared.isPending must - ** be zero already. So this next line is harmless in that case. + ** + SQLITE_DEFAULT_PAGE_SIZE, + ** + The value returned by sqlite3OsSectorSize() + ** + The largest page size that can be written atomically. */ - pBt->isPending = 0; + if( rc==SQLITE_OK && !readOnly ){ + setSectorSize(pPager); + assert(SQLITE_DEFAULT_PAGE_SIZE<=SQLITE_MAX_DEFAULT_PAGE_SIZE); + if( szPageDfltsectorSize ){ + if( pPager->sectorSize>SQLITE_MAX_DEFAULT_PAGE_SIZE ){ + szPageDflt = SQLITE_MAX_DEFAULT_PAGE_SIZE; + }else{ + szPageDflt = (u32)pPager->sectorSize; + } + } +#ifdef SQLITE_ENABLE_ATOMIC_WRITE + { + int iDc = sqlite3OsDeviceCharacteristics(pPager->fd); + int ii; + assert(SQLITE_IOCAP_ATOMIC512==(512>>8)); + assert(SQLITE_IOCAP_ATOMIC64K==(65536>>8)); + assert(SQLITE_MAX_DEFAULT_PAGE_SIZE<=65536); + for(ii=szPageDflt; ii<=SQLITE_MAX_DEFAULT_PAGE_SIZE; ii=ii*2){ + if( iDc&(SQLITE_IOCAP_ATOMIC|(ii>>8)) ){ + szPageDflt = ii; + } + } + } +#endif + } + }else{ + /* If a temporary file is requested, it is not opened immediately. + ** In this case we accept the default page size and delay actually + ** opening the file until the first call to OsWrite(). + ** + ** This branch is also run for an in-memory database. An in-memory + ** database is the same as a temp-file that is never written out to + ** disk and uses an in-memory rollback journal. + */ + tempFile = 1; + pPager->eState = PAGER_READER; + pPager->eLock = EXCLUSIVE_LOCK; + readOnly = (vfsFlags&SQLITE_OPEN_READONLY); } -} -#endif /* SQLITE_OMIT_SHARED_CACHE */ -static void releasePage(MemPage *pPage); /* Forward reference */ + /* The following call to PagerSetPagesize() serves to set the value of + ** Pager.pageSize and to allocate the Pager.pTmpSpace buffer. + */ + if( rc==SQLITE_OK ){ + assert( pPager->memDb==0 ); + rc = sqlite3PagerSetPagesize(pPager, &szPageDflt, -1); + testcase( rc!=SQLITE_OK ); + } -/* -** Verify that the cursor holds a mutex on the BtShared -*/ -#ifndef NDEBUG -static int cursorHoldsMutex(BtCursor *p){ - return sqlite3_mutex_held(p->pBt->mutex); -} -#endif + /* If an error occurred in either of the blocks above, free the + ** Pager structure and close the file. + */ + if( rc!=SQLITE_OK ){ + assert( !pPager->pTmpSpace ); + sqlite3OsClose(pPager->fd); + sqlite3_free(pPager); + return rc; + } + /* Initialize the PCache object. */ + assert( nExtra<1000 ); + nExtra = ROUND8(nExtra); + sqlite3PcacheOpen(szPageDflt, nExtra, !memDb, + !memDb?pagerStress:0, (void *)pPager, pPager->pPCache); -#ifndef SQLITE_OMIT_INCRBLOB -/* -** Invalidate the overflow page-list cache for cursor pCur, if any. -*/ -static void invalidateOverflowCache(BtCursor *pCur){ - assert( cursorHoldsMutex(pCur) ); - sqlite3_free(pCur->aOverflow); - pCur->aOverflow = 0; -} + PAGERTRACE(("OPEN %d %s\n", FILEHANDLEID(pPager->fd), pPager->zFilename)); + IOTRACE(("OPEN %p %s\n", pPager, pPager->zFilename)) -/* -** Invalidate the overflow page-list cache for all cursors opened -** on the shared btree structure pBt. -*/ -static void invalidateAllOverflowCache(BtShared *pBt){ - BtCursor *p; - assert( sqlite3_mutex_held(pBt->mutex) ); - for(p=pBt->pCursor; p; p=p->pNext){ - invalidateOverflowCache(p); + pPager->useJournal = (u8)useJournal; + /* pPager->stmtOpen = 0; */ + /* pPager->stmtInUse = 0; */ + /* pPager->nRef = 0; */ + /* pPager->stmtSize = 0; */ + /* pPager->stmtJSize = 0; */ + /* pPager->nPage = 0; */ + pPager->mxPgno = SQLITE_MAX_PAGE_COUNT; + /* pPager->state = PAGER_UNLOCK; */ +#if 0 + assert( pPager->state == (tempFile ? PAGER_EXCLUSIVE : PAGER_UNLOCK) ); +#endif + /* pPager->errMask = 0; */ + pPager->tempFile = (u8)tempFile; + assert( tempFile==PAGER_LOCKINGMODE_NORMAL + || tempFile==PAGER_LOCKINGMODE_EXCLUSIVE ); + assert( PAGER_LOCKINGMODE_EXCLUSIVE==1 ); + pPager->exclusiveMode = (u8)tempFile; + pPager->changeCountDone = pPager->tempFile; + pPager->memDb = (u8)memDb; + pPager->readOnly = (u8)readOnly; + assert( useJournal || pPager->tempFile ); + pPager->noSync = pPager->tempFile; + if( pPager->noSync ){ + assert( pPager->fullSync==0 ); + assert( pPager->syncFlags==0 ); + assert( pPager->walSyncFlags==0 ); + assert( pPager->ckptSyncFlags==0 ); + }else{ + pPager->fullSync = 1; + pPager->syncFlags = SQLITE_SYNC_NORMAL; + pPager->walSyncFlags = SQLITE_SYNC_NORMAL | WAL_SYNC_TRANSACTIONS; + pPager->ckptSyncFlags = SQLITE_SYNC_NORMAL; + } + /* pPager->pFirst = 0; */ + /* pPager->pFirstSynced = 0; */ + /* pPager->pLast = 0; */ + pPager->nExtra = (u16)nExtra; + pPager->journalSizeLimit = SQLITE_DEFAULT_JOURNAL_SIZE_LIMIT; + assert( isOpen(pPager->fd) || tempFile ); + setSectorSize(pPager); + if( !useJournal ){ + pPager->journalMode = PAGER_JOURNALMODE_OFF; + }else if( memDb ){ + pPager->journalMode = PAGER_JOURNALMODE_MEMORY; } + /* pPager->xBusyHandler = 0; */ + /* pPager->pBusyHandlerArg = 0; */ + pPager->xReiniter = xReinit; + /* memset(pPager->aHash, 0, sizeof(pPager->aHash)); */ + + *ppPager = pPager; + return SQLITE_OK; } -#else - #define invalidateOverflowCache(x) - #define invalidateAllOverflowCache(x) -#endif + + /* -** Set bit pgno of the BtShared.pHasContent bitvec. This is called -** when a page that previously contained data becomes a free-list leaf -** page. -** -** The BtShared.pHasContent bitvec exists to work around an obscure -** bug caused by the interaction of two useful IO optimizations surrounding -** free-list leaf pages: -** -** 1) When all data is deleted from a page and the page becomes -** a free-list leaf page, the page is not written to the database -** (as free-list leaf pages contain no meaningful data). Sometimes -** such a page is not even journalled (as it will not be modified, -** why bother journalling it?). +** This function is called after transitioning from PAGER_UNLOCK to +** PAGER_SHARED state. It tests if there is a hot journal present in +** the file-system for the given pager. A hot journal is one that +** needs to be played back. According to this function, a hot-journal +** file exists if the following criteria are met: ** -** 2) When a free-list leaf page is reused, its content is not read -** from the database or written to the journal file (why should it -** be, if it is not at all meaningful?). +** * The journal file exists in the file system, and +** * No process holds a RESERVED or greater lock on the database file, and +** * The database file itself is greater than 0 bytes in size, and +** * The first byte of the journal file exists and is not 0x00. ** -** By themselves, these optimizations work fine and provide a handy -** performance boost to bulk delete or insert operations. However, if -** a page is moved to the free-list and then reused within the same -** transaction, a problem comes up. If the page is not journalled when -** it is moved to the free-list and it is also not journalled when it -** is extracted from the free-list and reused, then the original data -** may be lost. In the event of a rollback, it may not be possible -** to restore the database to its original configuration. +** If the current size of the database file is 0 but a journal file +** exists, that is probably an old journal left over from a prior +** database with the same name. In this case the journal file is +** just deleted using OsDelete, *pExists is set to 0 and SQLITE_OK +** is returned. ** -** The solution is the BtShared.pHasContent bitvec. Whenever a page is -** moved to become a free-list leaf page, the corresponding bit is -** set in the bitvec. Whenever a leaf page is extracted from the free-list, -** optimization 2 above is ommitted if the corresponding bit is already -** set in BtShared.pHasContent. The contents of the bitvec are cleared -** at the end of every transaction. -*/ -static int btreeSetHasContent(BtShared *pBt, Pgno pgno){ - int rc = SQLITE_OK; - if( !pBt->pHasContent ){ - int nPage; - rc = sqlite3PagerPagecount(pBt->pPager, &nPage); - if( rc==SQLITE_OK ){ - pBt->pHasContent = sqlite3BitvecCreate((u32)nPage); - if( !pBt->pHasContent ){ - rc = SQLITE_NOMEM; - } - } - } - if( rc==SQLITE_OK && pgno<=sqlite3BitvecSize(pBt->pHasContent) ){ - rc = sqlite3BitvecSet(pBt->pHasContent, pgno); - } - return rc; -} - -/* -** Query the BtShared.pHasContent vector. +** This routine does not check if there is a master journal filename +** at the end of the file. If there is, and that master journal file +** does not exist, then the journal file is not really hot. In this +** case this routine will return a false-positive. The pager_playback() +** routine will discover that the journal file is not really hot and +** will not roll it back. ** -** This function is called when a free-list leaf page is removed from the -** free-list for reuse. It returns false if it is safe to retrieve the -** page from the pager layer with the 'no-content' flag set. True otherwise. +** If a hot-journal file is found to exist, *pExists is set to 1 and +** SQLITE_OK returned. If no hot-journal file is present, *pExists is +** set to 0 and SQLITE_OK returned. If an IO error occurs while trying +** to determine whether or not a hot-journal file exists, the IO error +** code is returned and the value of *pExists is undefined. */ -static int btreeGetHasContent(BtShared *pBt, Pgno pgno){ - Bitvec *p = pBt->pHasContent; - return (p && (pgno>sqlite3BitvecSize(p) || sqlite3BitvecTest(p, pgno))); -} +static int hasHotJournal(Pager *pPager, int *pExists){ + sqlite3_vfs * const pVfs = pPager->pVfs; + int rc = SQLITE_OK; /* Return code */ + int exists = 1; /* True if a journal file is present */ + int jrnlOpen = !!isOpen(pPager->jfd); -/* -** Clear (destroy) the BtShared.pHasContent bitvec. This should be -** invoked at the conclusion of each write-transaction. -*/ -static void btreeClearHasContent(BtShared *pBt){ - sqlite3BitvecDestroy(pBt->pHasContent); - pBt->pHasContent = 0; -} + assert( pPager->useJournal ); + assert( isOpen(pPager->fd) ); + assert( pPager->eState==PAGER_OPEN ); -/* -** Save the current cursor position in the variables BtCursor.nKey -** and BtCursor.pKey. The cursor's state is set to CURSOR_REQUIRESEEK. -*/ -static int saveCursorPosition(BtCursor *pCur){ - int rc; + assert( jrnlOpen==0 || ( sqlite3OsDeviceCharacteristics(pPager->jfd) & + SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN + )); - assert( CURSOR_VALID==pCur->eState ); - assert( 0==pCur->pKey ); - assert( cursorHoldsMutex(pCur) ); + *pExists = 0; + if( !jrnlOpen ){ + rc = sqlite3OsAccess(pVfs, pPager->zJournal, SQLITE_ACCESS_EXISTS, &exists); + } + if( rc==SQLITE_OK && exists ){ + int locked = 0; /* True if some process holds a RESERVED lock */ - rc = sqlite3BtreeKeySize(pCur, &pCur->nKey); + /* Race condition here: Another process might have been holding the + ** the RESERVED lock and have a journal open at the sqlite3OsAccess() + ** call above, but then delete the journal and drop the lock before + ** we get to the following sqlite3OsCheckReservedLock() call. If that + ** is the case, this routine might think there is a hot journal when + ** in fact there is none. This results in a false-positive which will + ** be dealt with by the playback routine. Ticket #3883. + */ + rc = sqlite3OsCheckReservedLock(pPager->fd, &locked); + if( rc==SQLITE_OK && !locked ){ + Pgno nPage; /* Number of pages in database file */ - /* If this is an intKey table, then the above call to BtreeKeySize() - ** stores the integer key in pCur->nKey. In this case this value is - ** all that is required. Otherwise, if pCur is not open on an intKey - ** table, then malloc space for and store the pCur->nKey bytes of key - ** data. - */ - if( rc==SQLITE_OK && 0==pCur->apPage[0]->intKey){ - void *pKey = sqlite3Malloc( (int)pCur->nKey ); - if( pKey ){ - rc = sqlite3BtreeKey(pCur, 0, (int)pCur->nKey, pKey); + /* Check the size of the database file. If it consists of 0 pages, + ** then delete the journal file. See the header comment above for + ** the reasoning here. Delete the obsolete journal file under + ** a RESERVED lock to avoid race conditions and to avoid violating + ** [H33020]. + */ + rc = pagerPagecount(pPager, &nPage); if( rc==SQLITE_OK ){ - pCur->pKey = pKey; - }else{ - sqlite3_free(pKey); + if( nPage==0 ){ + sqlite3BeginBenignMalloc(); + if( pagerLockDb(pPager, RESERVED_LOCK)==SQLITE_OK ){ + sqlite3OsDelete(pVfs, pPager->zJournal, 0); + if( !pPager->exclusiveMode ) pagerUnlockDb(pPager, SHARED_LOCK); + } + sqlite3EndBenignMalloc(); + }else{ + /* The journal file exists and no other connection has a reserved + ** or greater lock on the database file. Now check that there is + ** at least one non-zero bytes at the start of the journal file. + ** If there is, then we consider this journal to be hot. If not, + ** it can be ignored. + */ + if( !jrnlOpen ){ + int f = SQLITE_OPEN_READONLY|SQLITE_OPEN_MAIN_JOURNAL; + rc = sqlite3OsOpen(pVfs, pPager->zJournal, pPager->jfd, f, &f); + } + if( rc==SQLITE_OK ){ + u8 first = 0; + rc = sqlite3OsRead(pPager->jfd, (void *)&first, 1, 0); + if( rc==SQLITE_IOERR_SHORT_READ ){ + rc = SQLITE_OK; + } + if( !jrnlOpen ){ + sqlite3OsClose(pPager->jfd); + } + *pExists = (first!=0); + }else if( rc==SQLITE_CANTOPEN ){ + /* If we cannot open the rollback journal file in order to see if + ** its has a zero header, that might be due to an I/O error, or + ** it might be due to the race condition described above and in + ** ticket #3883. Either way, assume that the journal is hot. + ** This might be a false positive. But if it is, then the + ** automatic journal playback and recovery mechanism will deal + ** with it under an EXCLUSIVE lock where we do not need to + ** worry so much with race conditions. + */ + *pExists = 1; + rc = SQLITE_OK; + } + } } - }else{ - rc = SQLITE_NOMEM; - } - } - assert( !pCur->apPage[0]->intKey || !pCur->pKey ); - - if( rc==SQLITE_OK ){ - int i; - for(i=0; i<=pCur->iPage; i++){ - releasePage(pCur->apPage[i]); - pCur->apPage[i] = 0; } - pCur->iPage = -1; - pCur->eState = CURSOR_REQUIRESEEK; } - invalidateOverflowCache(pCur); return rc; } /* -** Save the positions of all cursors except pExcept open on the table -** with root-page iRoot. Usually, this is called just before cursor -** pExcept is used to modify the table (BtreeDelete() or BtreeInsert()). +** This function is called to obtain a shared lock on the database file. +** It is illegal to call sqlite3PagerAcquire() until after this function +** has been successfully called. If a shared-lock is already held when +** this function is called, it is a no-op. +** +** The following operations are also performed by this function. +** +** 1) If the pager is currently in PAGER_OPEN state (no lock held +** on the database file), then an attempt is made to obtain a +** SHARED lock on the database file. Immediately after obtaining +** the SHARED lock, the file-system is checked for a hot-journal, +** which is played back if present. Following any hot-journal +** rollback, the contents of the cache are validated by checking +** the 'change-counter' field of the database file header and +** discarded if they are found to be invalid. +** +** 2) If the pager is running in exclusive-mode, and there are currently +** no outstanding references to any pages, and is in the error state, +** then an attempt is made to clear the error state by discarding +** the contents of the page cache and rolling back any open journal +** file. +** +** If everything is successful, SQLITE_OK is returned. If an IO error +** occurs while locking the database, checking for a hot-journal file or +** rolling back a journal file, the IO error code is returned. */ -static int saveAllCursors(BtShared *pBt, Pgno iRoot, BtCursor *pExcept){ - BtCursor *p; - assert( sqlite3_mutex_held(pBt->mutex) ); - assert( pExcept==0 || pExcept->pBt==pBt ); - for(p=pBt->pCursor; p; p=p->pNext){ - if( p!=pExcept && (0==iRoot || p->pgnoRoot==iRoot) && - p->eState==CURSOR_VALID ){ - int rc = saveCursorPosition(p); - if( SQLITE_OK!=rc ){ - return rc; - } - } - } - return SQLITE_OK; -} +SQLITE_PRIVATE int sqlite3PagerSharedLock(Pager *pPager){ + int rc = SQLITE_OK; /* Return code */ -/* -** Clear the current cursor position. -*/ -SQLITE_PRIVATE void sqlite3BtreeClearCursor(BtCursor *pCur){ - assert( cursorHoldsMutex(pCur) ); - sqlite3_free(pCur->pKey); - pCur->pKey = 0; - pCur->eState = CURSOR_INVALID; -} + /* This routine is only called from b-tree and only when there are no + ** outstanding pages. This implies that the pager state should either + ** be OPEN or READER. READER is only possible if the pager is or was in + ** exclusive access mode. + */ + assert( sqlite3PcacheRefCount(pPager->pPCache)==0 ); + assert( assert_pager_state(pPager) ); + assert( pPager->eState==PAGER_OPEN || pPager->eState==PAGER_READER ); + if( NEVER(MEMDB && pPager->errCode) ){ return pPager->errCode; } -/* -** Restore the cursor to the position it was in (or as close to as possible) -** when saveCursorPosition() was called. Note that this call deletes the -** saved position info stored by saveCursorPosition(), so there can be -** at most one effective restoreCursorPosition() call after each -** saveCursorPosition(). -*/ -SQLITE_PRIVATE int sqlite3BtreeRestoreCursorPosition(BtCursor *pCur){ - int rc; - assert( cursorHoldsMutex(pCur) ); - assert( pCur->eState>=CURSOR_REQUIRESEEK ); - if( pCur->eState==CURSOR_FAULT ){ - return pCur->skip; - } - pCur->eState = CURSOR_INVALID; - rc = sqlite3BtreeMoveto(pCur, pCur->pKey, pCur->nKey, 0, &pCur->skip); - if( rc==SQLITE_OK ){ - sqlite3_free(pCur->pKey); - pCur->pKey = 0; - assert( pCur->eState==CURSOR_VALID || pCur->eState==CURSOR_INVALID ); - } - return rc; -} + if( !pagerUseWal(pPager) && pPager->eState==PAGER_OPEN ){ + int bHotJournal = 1; /* True if there exists a hot journal-file */ -#define restoreCursorPosition(p) \ - (p->eState>=CURSOR_REQUIRESEEK ? \ - sqlite3BtreeRestoreCursorPosition(p) : \ - SQLITE_OK) + assert( !MEMDB ); -/* -** Determine whether or not a cursor has moved from the position it -** was last placed at. Cursors can move when the row they are pointing -** at is deleted out from under them. -** -** This routine returns an error code if something goes wrong. The -** integer *pHasMoved is set to one if the cursor has moved and 0 if not. -*/ -SQLITE_PRIVATE int sqlite3BtreeCursorHasMoved(BtCursor *pCur, int *pHasMoved){ - int rc; + rc = pager_wait_on_lock(pPager, SHARED_LOCK); + if( rc!=SQLITE_OK ){ + assert( pPager->eLock==NO_LOCK || pPager->eLock==UNKNOWN_LOCK ); + goto failed; + } - rc = restoreCursorPosition(pCur); - if( rc ){ - *pHasMoved = 1; - return rc; + /* If a journal file exists, and there is no RESERVED lock on the + ** database file, then it either needs to be played back or deleted. + */ + if( pPager->eLock<=SHARED_LOCK ){ + rc = hasHotJournal(pPager, &bHotJournal); + } + if( rc!=SQLITE_OK ){ + goto failed; + } + if( bHotJournal ){ + /* Get an EXCLUSIVE lock on the database file. At this point it is + ** important that a RESERVED lock is not obtained on the way to the + ** EXCLUSIVE lock. If it were, another process might open the + ** database file, detect the RESERVED lock, and conclude that the + ** database is safe to read while this process is still rolling the + ** hot-journal back. + ** + ** Because the intermediate RESERVED lock is not requested, any + ** other process attempting to access the database file will get to + ** this point in the code and fail to obtain its own EXCLUSIVE lock + ** on the database file. + ** + ** Unless the pager is in locking_mode=exclusive mode, the lock is + ** downgraded to SHARED_LOCK before this function returns. + */ + rc = pagerLockDb(pPager, EXCLUSIVE_LOCK); + if( rc!=SQLITE_OK ){ + goto failed; + } + + /* If it is not already open and the file exists on disk, open the + ** journal for read/write access. Write access is required because + ** in exclusive-access mode the file descriptor will be kept open + ** and possibly used for a transaction later on. Also, write-access + ** is usually required to finalize the journal in journal_mode=persist + ** mode (and also for journal_mode=truncate on some systems). + ** + ** If the journal does not exist, it usually means that some + ** other connection managed to get in and roll it back before + ** this connection obtained the exclusive lock above. Or, it + ** may mean that the pager was in the error-state when this + ** function was called and the journal file does not exist. + */ + if( !isOpen(pPager->jfd) ){ + sqlite3_vfs * const pVfs = pPager->pVfs; + int bExists; /* True if journal file exists */ + rc = sqlite3OsAccess( + pVfs, pPager->zJournal, SQLITE_ACCESS_EXISTS, &bExists); + if( rc==SQLITE_OK && bExists ){ + int fout = 0; + int f = SQLITE_OPEN_READWRITE|SQLITE_OPEN_MAIN_JOURNAL; + assert( !pPager->tempFile ); + rc = sqlite3OsOpen(pVfs, pPager->zJournal, pPager->jfd, f, &fout); + assert( rc!=SQLITE_OK || isOpen(pPager->jfd) ); + if( rc==SQLITE_OK && fout&SQLITE_OPEN_READONLY ){ + rc = SQLITE_CANTOPEN_BKPT; + sqlite3OsClose(pPager->jfd); + } + } + } + + /* Playback and delete the journal. Drop the database write + ** lock and reacquire the read lock. Purge the cache before + ** playing back the hot-journal so that we don't end up with + ** an inconsistent cache. Sync the hot journal before playing + ** it back since the process that crashed and left the hot journal + ** probably did not sync it and we are required to always sync + ** the journal before playing it back. + */ + if( isOpen(pPager->jfd) ){ + assert( rc==SQLITE_OK ); + rc = pagerSyncHotJournal(pPager); + if( rc==SQLITE_OK ){ + rc = pager_playback(pPager, 1); + pPager->eState = PAGER_OPEN; + } + }else if( !pPager->exclusiveMode ){ + pagerUnlockDb(pPager, SHARED_LOCK); + } + + if( rc!=SQLITE_OK ){ + /* This branch is taken if an error occurs while trying to open + ** or roll back a hot-journal while holding an EXCLUSIVE lock. The + ** pager_unlock() routine will be called before returning to unlock + ** the file. If the unlock attempt fails, then Pager.eLock must be + ** set to UNKNOWN_LOCK (see the comment above the #define for + ** UNKNOWN_LOCK above for an explanation). + ** + ** In order to get pager_unlock() to do this, set Pager.eState to + ** PAGER_ERROR now. This is not actually counted as a transition + ** to ERROR state in the state diagram at the top of this file, + ** since we know that the same call to pager_unlock() will very + ** shortly transition the pager object to the OPEN state. Calling + ** assert_pager_state() would fail now, as it should not be possible + ** to be in ERROR state when there are zero outstanding page + ** references. + */ + pager_error(pPager, rc); + goto failed; + } + + assert( pPager->eState==PAGER_OPEN ); + assert( (pPager->eLock==SHARED_LOCK) + || (pPager->exclusiveMode && pPager->eLock>SHARED_LOCK) + ); + } + + if( !pPager->tempFile + && (pPager->pBackup || sqlite3PcachePagecount(pPager->pPCache)>0) + ){ + /* The shared-lock has just been acquired on the database file + ** and there are already pages in the cache (from a previous + ** read or write transaction). Check to see if the database + ** has been modified. If the database has changed, flush the + ** cache. + ** + ** Database changes is detected by looking at 15 bytes beginning + ** at offset 24 into the file. The first 4 of these 16 bytes are + ** a 32-bit counter that is incremented with each change. The + ** other bytes change randomly with each file change when + ** a codec is in use. + ** + ** There is a vanishingly small chance that a change will not be + ** detected. The chance of an undetected change is so small that + ** it can be neglected. + */ + Pgno nPage = 0; + char dbFileVers[sizeof(pPager->dbFileVers)]; + + rc = pagerPagecount(pPager, &nPage); + if( rc ) goto failed; + + if( nPage>0 ){ + IOTRACE(("CKVERS %p %d\n", pPager, sizeof(dbFileVers))); + rc = sqlite3OsRead(pPager->fd, &dbFileVers, sizeof(dbFileVers), 24); + if( rc!=SQLITE_OK ){ + goto failed; + } + }else{ + memset(dbFileVers, 0, sizeof(dbFileVers)); + } + + if( memcmp(pPager->dbFileVers, dbFileVers, sizeof(dbFileVers))!=0 ){ + pager_reset(pPager); + } + } + + /* If there is a WAL file in the file-system, open this database in WAL + ** mode. Otherwise, the following function call is a no-op. + */ + rc = pagerOpenWalIfPresent(pPager); +#ifndef SQLITE_OMIT_WAL + assert( pPager->pWal==0 || rc==SQLITE_OK ); +#endif } - if( pCur->eState!=CURSOR_VALID || pCur->skip!=0 ){ - *pHasMoved = 1; + + if( pagerUseWal(pPager) ){ + assert( rc==SQLITE_OK ); + rc = pagerBeginReadTransaction(pPager); + } + + if( pPager->eState==PAGER_OPEN && rc==SQLITE_OK ){ + rc = pagerPagecount(pPager, &pPager->dbSize); + } + + failed: + if( rc!=SQLITE_OK ){ + assert( !MEMDB ); + pager_unlock(pPager); + assert( pPager->eState==PAGER_OPEN ); }else{ - *pHasMoved = 0; + pPager->eState = PAGER_READER; } - return SQLITE_OK; + return rc; } -#ifndef SQLITE_OMIT_AUTOVACUUM /* -** Given a page number of a regular database page, return the page -** number for the pointer-map page that contains the entry for the -** input page number. -*/ -static Pgno ptrmapPageno(BtShared *pBt, Pgno pgno){ - int nPagesPerMapPage; - Pgno iPtrMap, ret; - assert( sqlite3_mutex_held(pBt->mutex) ); - nPagesPerMapPage = (pBt->usableSize/5)+1; - iPtrMap = (pgno-2)/nPagesPerMapPage; - ret = (iPtrMap*nPagesPerMapPage) + 2; - if( ret==PENDING_BYTE_PAGE(pBt) ){ - ret++; +** If the reference count has reached zero, rollback any active +** transaction and unlock the pager. +** +** Except, in locking_mode=EXCLUSIVE when there is nothing to in +** the rollback journal, the unlock is not performed and there is +** nothing to rollback, so this routine is a no-op. +*/ +static void pagerUnlockIfUnused(Pager *pPager){ + if( (sqlite3PcacheRefCount(pPager->pPCache)==0) ){ + pagerUnlockAndRollback(pPager); } - return ret; } /* -** Write an entry into the pointer map. +** Acquire a reference to page number pgno in pager pPager (a page +** reference has type DbPage*). If the requested reference is +** successfully obtained, it is copied to *ppPage and SQLITE_OK returned. ** -** This routine updates the pointer map entry for page number 'key' -** so that it maps to type 'eType' and parent page number 'pgno'. -** An error code is returned if something goes wrong, otherwise SQLITE_OK. +** If the requested page is already in the cache, it is returned. +** Otherwise, a new page object is allocated and populated with data +** read from the database file. In some cases, the pcache module may +** choose not to allocate a new page object and may reuse an existing +** object with no outstanding references. +** +** The extra data appended to a page is always initialized to zeros the +** first time a page is loaded into memory. If the page requested is +** already in the cache when this function is called, then the extra +** data is left as it was when the page object was last used. +** +** If the database image is smaller than the requested page or if a +** non-zero value is passed as the noContent parameter and the +** requested page is not already stored in the cache, then no +** actual disk read occurs. In this case the memory image of the +** page is initialized to all zeros. +** +** If noContent is true, it means that we do not care about the contents +** of the page. This occurs in two seperate scenarios: +** +** a) When reading a free-list leaf page from the database, and +** +** b) When a savepoint is being rolled back and we need to load +** a new page into the cache to be filled with the data read +** from the savepoint journal. +** +** If noContent is true, then the data returned is zeroed instead of +** being read from the database. Additionally, the bits corresponding +** to pgno in Pager.pInJournal (bitvec of pages already written to the +** journal file) and the PagerSavepoint.pInSavepoint bitvecs of any open +** savepoints are set. This means if the page is made writable at any +** point in the future, using a call to sqlite3PagerWrite(), its contents +** will not be journaled. This saves IO. +** +** The acquisition might fail for several reasons. In all cases, +** an appropriate error code is returned and *ppPage is set to NULL. +** +** See also sqlite3PagerLookup(). Both this routine and Lookup() attempt +** to find a page in the in-memory cache first. If the page is not already +** in memory, this routine goes to disk to read it in whereas Lookup() +** just returns 0. This routine acquires a read-lock the first time it +** has to go to disk, and could also playback an old journal if necessary. +** Since Lookup() never goes to disk, it never has to deal with locks +** or journal files. */ -static int ptrmapPut(BtShared *pBt, Pgno key, u8 eType, Pgno parent){ - DbPage *pDbPage; /* The pointer map page */ - u8 *pPtrmap; /* The pointer map data */ - Pgno iPtrmap; /* The pointer map page number */ - int offset; /* Offset in pointer map page */ +SQLITE_PRIVATE int sqlite3PagerAcquire( + Pager *pPager, /* The pager open on the database file */ + Pgno pgno, /* Page number to fetch */ + DbPage **ppPage, /* Write a pointer to the page here */ + int noContent /* Do not bother reading content from disk if true */ +){ int rc; + PgHdr *pPg; - assert( sqlite3_mutex_held(pBt->mutex) ); - /* The master-journal page number must never be used as a pointer map page */ - assert( 0==PTRMAP_ISPAGE(pBt, PENDING_BYTE_PAGE(pBt)) ); + assert( pPager->eState>=PAGER_READER ); + assert( assert_pager_state(pPager) ); - assert( pBt->autoVacuum ); - if( key==0 ){ - return SQLITE_CORRUPT_BKPT; - } - iPtrmap = PTRMAP_PAGENO(pBt, key); - rc = sqlite3PagerGet(pBt->pPager, iPtrmap, &pDbPage); - if( rc!=SQLITE_OK ){ - return rc; - } - offset = PTRMAP_PTROFFSET(iPtrmap, key); - if( offset<0 ){ + if( pgno==0 ){ return SQLITE_CORRUPT_BKPT; } - pPtrmap = (u8 *)sqlite3PagerGetData(pDbPage); - if( eType!=pPtrmap[offset] || get4byte(&pPtrmap[offset+1])!=parent ){ - TRACE(("PTRMAP_UPDATE: %d->(%d,%d)\n", key, eType, parent)); - rc = sqlite3PagerWrite(pDbPage); - if( rc==SQLITE_OK ){ - pPtrmap[offset] = eType; - put4byte(&pPtrmap[offset+1], parent); - } + /* If the pager is in the error state, return an error immediately. + ** Otherwise, request the page from the PCache layer. */ + if( pPager->errCode!=SQLITE_OK ){ + rc = pPager->errCode; + }else{ + rc = sqlite3PcacheFetch(pPager->pPCache, pgno, 1, ppPage); } - sqlite3PagerUnref(pDbPage); - return rc; -} + if( rc!=SQLITE_OK ){ + /* Either the call to sqlite3PcacheFetch() returned an error or the + ** pager was already in the error-state when this function was called. + ** Set pPg to 0 and jump to the exception handler. */ + pPg = 0; + goto pager_acquire_err; + } + assert( (*ppPage)->pgno==pgno ); + assert( (*ppPage)->pPager==pPager || (*ppPage)->pPager==0 ); + + if( (*ppPage)->pPager && !noContent ){ + /* In this case the pcache already contains an initialized copy of + ** the page. Return without further ado. */ + assert( pgno<=PAGER_MAX_PGNO && pgno!=PAGER_MJ_PGNO(pPager) ); + pPager->aStat[PAGER_STAT_HIT]++; + return SQLITE_OK; -/* -** Read an entry from the pointer map. -** -** This routine retrieves the pointer map entry for page 'key', writing -** the type and parent page number to *pEType and *pPgno respectively. -** An error code is returned if something goes wrong, otherwise SQLITE_OK. -*/ -static int ptrmapGet(BtShared *pBt, Pgno key, u8 *pEType, Pgno *pPgno){ - DbPage *pDbPage; /* The pointer map page */ - int iPtrmap; /* Pointer map page index */ - u8 *pPtrmap; /* Pointer map page data */ - int offset; /* Offset of entry in pointer map */ - int rc; + }else{ + /* The pager cache has created a new page. Its content needs to + ** be initialized. */ - assert( sqlite3_mutex_held(pBt->mutex) ); + pPg = *ppPage; + pPg->pPager = pPager; - iPtrmap = PTRMAP_PAGENO(pBt, key); - rc = sqlite3PagerGet(pBt->pPager, iPtrmap, &pDbPage); - if( rc!=0 ){ - return rc; - } - pPtrmap = (u8 *)sqlite3PagerGetData(pDbPage); + /* The maximum page number is 2^31. Return SQLITE_CORRUPT if a page + ** number greater than this, or the unused locking-page, is requested. */ + if( pgno>PAGER_MAX_PGNO || pgno==PAGER_MJ_PGNO(pPager) ){ + rc = SQLITE_CORRUPT_BKPT; + goto pager_acquire_err; + } - offset = PTRMAP_PTROFFSET(iPtrmap, key); - assert( pEType!=0 ); - *pEType = pPtrmap[offset]; - if( pPgno ) *pPgno = get4byte(&pPtrmap[offset+1]); + if( MEMDB || pPager->dbSizefd) ){ + if( pgno>pPager->mxPgno ){ + rc = SQLITE_FULL; + goto pager_acquire_err; + } + if( noContent ){ + /* Failure to set the bits in the InJournal bit-vectors is benign. + ** It merely means that we might do some extra work to journal a + ** page that does not need to be journaled. Nevertheless, be sure + ** to test the case where a malloc error occurs while trying to set + ** a bit in a bit vector. + */ + sqlite3BeginBenignMalloc(); + if( pgno<=pPager->dbOrigSize ){ + TESTONLY( rc = ) sqlite3BitvecSet(pPager->pInJournal, pgno); + testcase( rc==SQLITE_NOMEM ); + } + TESTONLY( rc = ) addToSavepointBitvecs(pPager, pgno); + testcase( rc==SQLITE_NOMEM ); + sqlite3EndBenignMalloc(); + } + memset(pPg->pData, 0, pPager->pageSize); + IOTRACE(("ZERO %p %d\n", pPager, pgno)); + }else{ + assert( pPg->pPager==pPager ); + pPager->aStat[PAGER_STAT_MISS]++; + rc = readDbPage(pPg); + if( rc!=SQLITE_OK ){ + goto pager_acquire_err; + } + } + pager_set_pagehash(pPg); + } - sqlite3PagerUnref(pDbPage); - if( *pEType<1 || *pEType>5 ) return SQLITE_CORRUPT_BKPT; return SQLITE_OK; -} -#else /* if defined SQLITE_OMIT_AUTOVACUUM */ - #define ptrmapPut(w,x,y,z) SQLITE_OK - #define ptrmapGet(w,x,y,z) SQLITE_OK -#endif +pager_acquire_err: + assert( rc!=SQLITE_OK ); + if( pPg ){ + sqlite3PcacheDrop(pPg); + } + pagerUnlockIfUnused(pPager); + + *ppPage = 0; + return rc; +} /* -** Given a btree page and a cell index (0 means the first cell on -** the page, 1 means the second cell, and so forth) return a pointer -** to the cell content. +** Acquire a page if it is already in the in-memory cache. Do +** not read the page from disk. Return a pointer to the page, +** or 0 if the page is not in cache. ** -** This routine works only for pages that do not contain overflow cells. +** See also sqlite3PagerGet(). The difference between this routine +** and sqlite3PagerGet() is that _get() will go to the disk and read +** in the page if the page is not already in cache. This routine +** returns NULL if the page is not in cache or if a disk I/O error +** has ever happened. */ -#define findCell(P,I) \ - ((P)->aData + ((P)->maskPage & get2byte(&(P)->aData[(P)->cellOffset+2*(I)]))) +SQLITE_PRIVATE DbPage *sqlite3PagerLookup(Pager *pPager, Pgno pgno){ + PgHdr *pPg = 0; + assert( pPager!=0 ); + assert( pgno!=0 ); + assert( pPager->pPCache!=0 ); + assert( pPager->eState>=PAGER_READER && pPager->eState!=PAGER_ERROR ); + sqlite3PcacheFetch(pPager->pPCache, pgno, 0, &pPg); + return pPg; +} /* -** This a more complex version of findCell() that works for -** pages that do contain overflow cells. See insert +** Release a page reference. +** +** If the number of references to the page drop to zero, then the +** page is added to the LRU list. When all references to all pages +** are released, a rollback occurs and the lock on the database is +** removed. */ -static u8 *findOverflowCell(MemPage *pPage, int iCell){ - int i; - assert( sqlite3_mutex_held(pPage->pBt->mutex) ); - for(i=pPage->nOverflow-1; i>=0; i--){ - int k; - struct _OvflCell *pOvfl; - pOvfl = &pPage->aOvfl[i]; - k = pOvfl->idx; - if( k<=iCell ){ - if( k==iCell ){ - return pOvfl->pCell; - } - iCell--; - } +SQLITE_PRIVATE void sqlite3PagerUnref(DbPage *pPg){ + if( pPg ){ + Pager *pPager = pPg->pPager; + sqlite3PcacheRelease(pPg); + pagerUnlockIfUnused(pPager); } - return findCell(pPage, iCell); } /* -** Parse a cell content block and fill in the CellInfo structure. There -** are two versions of this function. sqlite3BtreeParseCell() takes a -** cell index as the second argument and sqlite3BtreeParseCellPtr() -** takes a pointer to the body of the cell as its second argument. +** This function is called at the start of every write transaction. +** There must already be a RESERVED or EXCLUSIVE lock on the database +** file when this routine is called. ** -** Within this file, the parseCell() macro can be called instead of -** sqlite3BtreeParseCellPtr(). Using some compilers, this will be faster. +** Open the journal file for pager pPager and write a journal header +** to the start of it. If there are active savepoints, open the sub-journal +** as well. This function is only used when the journal file is being +** opened to write a rollback log for a transaction. It is not used +** when opening a hot journal file to roll it back. +** +** If the journal file is already open (as it may be in exclusive mode), +** then this function just writes a journal header to the start of the +** already open file. +** +** Whether or not the journal file is opened by this function, the +** Pager.pInJournal bitvec structure is allocated. +** +** Return SQLITE_OK if everything is successful. Otherwise, return +** SQLITE_NOMEM if the attempt to allocate Pager.pInJournal fails, or +** an IO error code if opening or writing the journal file fails. */ -SQLITE_PRIVATE void sqlite3BtreeParseCellPtr( - MemPage *pPage, /* Page containing the cell */ - u8 *pCell, /* Pointer to the cell text. */ - CellInfo *pInfo /* Fill in this structure */ -){ - u16 n; /* Number bytes in cell content header */ - u32 nPayload; /* Number of bytes of cell payload */ - - assert( sqlite3_mutex_held(pPage->pBt->mutex) ); +static int pager_open_journal(Pager *pPager){ + int rc = SQLITE_OK; /* Return code */ + sqlite3_vfs * const pVfs = pPager->pVfs; /* Local cache of vfs pointer */ - pInfo->pCell = pCell; - assert( pPage->leaf==0 || pPage->leaf==1 ); - n = pPage->childPtrSize; - assert( n==4-4*pPage->leaf ); - if( pPage->intKey ){ - if( pPage->hasData ){ - n += getVarint32(&pCell[n], nPayload); - }else{ - nPayload = 0; + assert( pPager->eState==PAGER_WRITER_LOCKED ); + assert( assert_pager_state(pPager) ); + assert( pPager->pInJournal==0 ); + + /* If already in the error state, this function is a no-op. But on + ** the other hand, this routine is never called if we are already in + ** an error state. */ + if( NEVER(pPager->errCode) ) return pPager->errCode; + + if( !pagerUseWal(pPager) && pPager->journalMode!=PAGER_JOURNALMODE_OFF ){ + pPager->pInJournal = sqlite3BitvecCreate(pPager->dbSize); + if( pPager->pInJournal==0 ){ + return SQLITE_NOMEM; } - n += getVarint(&pCell[n], (u64*)&pInfo->nKey); - pInfo->nData = nPayload; - }else{ - pInfo->nData = 0; - n += getVarint32(&pCell[n], nPayload); - pInfo->nKey = nPayload; - } - pInfo->nPayload = nPayload; - pInfo->nHeader = n; - if( likely(nPayload<=pPage->maxLocal) ){ - /* This is the (easy) common case where the entire payload fits - ** on the local page. No overflow is required. - */ - int nSize; /* Total size of cell content in bytes */ - nSize = nPayload + n; - pInfo->nLocal = (u16)nPayload; - pInfo->iOverflow = 0; - if( (nSize & ~3)==0 ){ - nSize = 4; /* Minimum cell size is 4 */ + + /* Open the journal file if it is not already open. */ + if( !isOpen(pPager->jfd) ){ + if( pPager->journalMode==PAGER_JOURNALMODE_MEMORY ){ + sqlite3MemJournalOpen(pPager->jfd); + }else{ + const int flags = /* VFS flags to open journal file */ + SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE| + (pPager->tempFile ? + (SQLITE_OPEN_DELETEONCLOSE|SQLITE_OPEN_TEMP_JOURNAL): + (SQLITE_OPEN_MAIN_JOURNAL) + ); + #ifdef SQLITE_ENABLE_ATOMIC_WRITE + rc = sqlite3JournalOpen( + pVfs, pPager->zJournal, pPager->jfd, flags, jrnlBufferSize(pPager) + ); + #else + rc = sqlite3OsOpen(pVfs, pPager->zJournal, pPager->jfd, flags, 0); + #endif + } + assert( rc!=SQLITE_OK || isOpen(pPager->jfd) ); } - pInfo->nSize = (u16)nSize; - }else{ - /* If the payload will not fit completely on the local page, we have - ** to decide how much to store locally and how much to spill onto - ** overflow pages. The strategy is to minimize the amount of unused - ** space on overflow pages while keeping the amount of local storage - ** in between minLocal and maxLocal. - ** - ** Warning: changing the way overflow payload is distributed in any - ** way will result in an incompatible file format. + + + /* Write the first journal header to the journal file and open + ** the sub-journal if necessary. */ - int minLocal; /* Minimum amount of payload held locally */ - int maxLocal; /* Maximum amount of payload held locally */ - int surplus; /* Overflow payload available for local storage */ - - minLocal = pPage->minLocal; - maxLocal = pPage->maxLocal; - surplus = minLocal + (nPayload - minLocal)%(pPage->pBt->usableSize - 4); - if( surplus <= maxLocal ){ - pInfo->nLocal = (u16)surplus; - }else{ - pInfo->nLocal = (u16)minLocal; + if( rc==SQLITE_OK ){ + /* TODO: Check if all of these are really required. */ + pPager->nRec = 0; + pPager->journalOff = 0; + pPager->setMaster = 0; + pPager->journalHdr = 0; + rc = writeJournalHdr(pPager); } - pInfo->iOverflow = (u16)(pInfo->nLocal + n); - pInfo->nSize = pInfo->iOverflow + 4; } -} -#define parseCell(pPage, iCell, pInfo) \ - sqlite3BtreeParseCellPtr((pPage), findCell((pPage), (iCell)), (pInfo)) -SQLITE_PRIVATE void sqlite3BtreeParseCell( - MemPage *pPage, /* Page containing the cell */ - int iCell, /* The cell index. First cell is 0 */ - CellInfo *pInfo /* Fill in this structure */ -){ - parseCell(pPage, iCell, pInfo); + + if( rc!=SQLITE_OK ){ + sqlite3BitvecDestroy(pPager->pInJournal); + pPager->pInJournal = 0; + }else{ + assert( pPager->eState==PAGER_WRITER_LOCKED ); + pPager->eState = PAGER_WRITER_CACHEMOD; + } + + return rc; } /* -** Compute the total number of bytes that a Cell needs in the cell -** data area of the btree-page. The return number includes the cell -** data header and the local payload, but not any overflow page or -** the space used by the cell pointer. +** Begin a write-transaction on the specified pager object. If a +** write-transaction has already been opened, this function is a no-op. +** +** If the exFlag argument is false, then acquire at least a RESERVED +** lock on the database file. If exFlag is true, then acquire at least +** an EXCLUSIVE lock. If such a lock is already held, no locking +** functions need be called. +** +** If the subjInMemory argument is non-zero, then any sub-journal opened +** within this transaction will be opened as an in-memory file. This +** has no effect if the sub-journal is already opened (as it may be when +** running in exclusive mode) or if the transaction does not require a +** sub-journal. If the subjInMemory argument is zero, then any required +** sub-journal is implemented in-memory if pPager is an in-memory database, +** or using a temporary file otherwise. */ -static u16 cellSizePtr(MemPage *pPage, u8 *pCell){ - u8 *pIter = &pCell[pPage->childPtrSize]; - u32 nSize; +SQLITE_PRIVATE int sqlite3PagerBegin(Pager *pPager, int exFlag, int subjInMemory){ + int rc = SQLITE_OK; -#ifdef SQLITE_DEBUG - /* The value returned by this function should always be the same as - ** the (CellInfo.nSize) value found by doing a full parse of the - ** cell. If SQLITE_DEBUG is defined, an assert() at the bottom of - ** this function verifies that this invariant is not violated. */ - CellInfo debuginfo; - sqlite3BtreeParseCellPtr(pPage, pCell, &debuginfo); -#endif + if( pPager->errCode ) return pPager->errCode; + assert( pPager->eState>=PAGER_READER && pPager->eStatesubjInMemory = (u8)subjInMemory; - if( pPage->intKey ){ - u8 *pEnd; - if( pPage->hasData ){ - pIter += getVarint32(pIter, nSize); + if( ALWAYS(pPager->eState==PAGER_READER) ){ + assert( pPager->pInJournal==0 ); + + if( pagerUseWal(pPager) ){ + /* If the pager is configured to use locking_mode=exclusive, and an + ** exclusive lock on the database is not already held, obtain it now. + */ + if( pPager->exclusiveMode && sqlite3WalExclusiveMode(pPager->pWal, -1) ){ + rc = pagerLockDb(pPager, EXCLUSIVE_LOCK); + if( rc!=SQLITE_OK ){ + return rc; + } + sqlite3WalExclusiveMode(pPager->pWal, 1); + } + + /* Grab the write lock on the log file. If successful, upgrade to + ** PAGER_RESERVED state. Otherwise, return an error code to the caller. + ** The busy-handler is not invoked if another connection already + ** holds the write-lock. If possible, the upper layer will call it. + */ + rc = sqlite3WalBeginWriteTransaction(pPager->pWal); }else{ - nSize = 0; + /* Obtain a RESERVED lock on the database file. If the exFlag parameter + ** is true, then immediately upgrade this to an EXCLUSIVE lock. The + ** busy-handler callback can be used when upgrading to the EXCLUSIVE + ** lock, but not when obtaining the RESERVED lock. + */ + rc = pagerLockDb(pPager, RESERVED_LOCK); + if( rc==SQLITE_OK && exFlag ){ + rc = pager_wait_on_lock(pPager, EXCLUSIVE_LOCK); + } } - /* pIter now points at the 64-bit integer key value, a variable length - ** integer. The following block moves pIter to point at the first byte - ** past the end of the key value. */ - pEnd = &pIter[9]; - while( (*pIter++)&0x80 && pIterpPage->maxLocal ){ - int minLocal = pPage->minLocal; - nSize = minLocal + (nSize - minLocal) % (pPage->pBt->usableSize - 4); - if( nSize>pPage->maxLocal ){ - nSize = minLocal; + if( rc==SQLITE_OK ){ + /* Change to WRITER_LOCKED state. + ** + ** WAL mode sets Pager.eState to PAGER_WRITER_LOCKED or CACHEMOD + ** when it has an open transaction, but never to DBMOD or FINISHED. + ** This is because in those states the code to roll back savepoint + ** transactions may copy data from the sub-journal into the database + ** file as well as into the page cache. Which would be incorrect in + ** WAL mode. + */ + pPager->eState = PAGER_WRITER_LOCKED; + pPager->dbHintSize = pPager->dbSize; + pPager->dbFileSize = pPager->dbSize; + pPager->dbOrigSize = pPager->dbSize; + pPager->journalOff = 0; } - nSize += 4; - } - nSize += (u32)(pIter - pCell); - /* The minimum size of any cell is 4 bytes. */ - if( nSize<4 ){ - nSize = 4; + assert( rc==SQLITE_OK || pPager->eState==PAGER_READER ); + assert( rc!=SQLITE_OK || pPager->eState==PAGER_WRITER_LOCKED ); + assert( assert_pager_state(pPager) ); } - assert( nSize==debuginfo.nSize ); - return (u16)nSize; -} -#ifndef NDEBUG -static u16 cellSize(MemPage *pPage, int iCell){ - return cellSizePtr(pPage, findCell(pPage, iCell)); + PAGERTRACE(("TRANSACTION %d\n", PAGERID(pPager))); + return rc; } -#endif -#ifndef SQLITE_OMIT_AUTOVACUUM /* -** If the cell pCell, part of page pPage contains a pointer -** to an overflow page, insert an entry into the pointer-map -** for the overflow page. +** Mark a single data page as writeable. The page is written into the +** main journal or sub-journal as required. If the page is written into +** one of the journals, the corresponding bit is set in the +** Pager.pInJournal bitvec and the PagerSavepoint.pInSavepoint bitvecs +** of any open savepoints as appropriate. */ -static int ptrmapPutOvflPtr(MemPage *pPage, u8 *pCell){ - CellInfo info; - assert( pCell!=0 ); - sqlite3BtreeParseCellPtr(pPage, pCell, &info); - assert( (info.nData+(pPage->intKey?0:info.nKey))==info.nPayload ); - if( info.iOverflow ){ - Pgno ovfl = get4byte(&pCell[info.iOverflow]); - return ptrmapPut(pPage->pBt, ovfl, PTRMAP_OVERFLOW1, pPage->pgno); - } - return SQLITE_OK; -} -#endif +static int pager_write(PgHdr *pPg){ + void *pData = pPg->pData; + Pager *pPager = pPg->pPager; + int rc = SQLITE_OK; + /* This routine is not called unless a write-transaction has already + ** been started. The journal file may or may not be open at this point. + ** It is never called in the ERROR state. + */ + assert( pPager->eState==PAGER_WRITER_LOCKED + || pPager->eState==PAGER_WRITER_CACHEMOD + || pPager->eState==PAGER_WRITER_DBMOD + ); + assert( assert_pager_state(pPager) ); -/* -** Defragment the page given. All Cells are moved to the -** end of the page and all free space is collected into one -** big FreeBlk that occurs in between the header and cell -** pointer array and the cell content area. -*/ -static int defragmentPage(MemPage *pPage){ - int i; /* Loop counter */ - int pc; /* Address of a i-th cell */ - int addr; /* Offset of first byte after cell pointer array */ - int hdr; /* Offset to the page header */ - int size; /* Size of a cell */ - int usableSize; /* Number of usable bytes on a page */ - int cellOffset; /* Offset to the cell pointer array */ - int cbrk; /* Offset to the cell content area */ - int nCell; /* Number of cells on the page */ - unsigned char *data; /* The page data */ - unsigned char *temp; /* Temp area for cell content */ + /* If an error has been previously detected, report the same error + ** again. This should not happen, but the check provides robustness. */ + if( NEVER(pPager->errCode) ) return pPager->errCode; - assert( sqlite3PagerIswriteable(pPage->pDbPage) ); - assert( pPage->pBt!=0 ); - assert( pPage->pBt->usableSize <= SQLITE_MAX_PAGE_SIZE ); - assert( pPage->nOverflow==0 ); - assert( sqlite3_mutex_held(pPage->pBt->mutex) ); - temp = sqlite3PagerTempSpace(pPage->pBt->pPager); - data = pPage->aData; - hdr = pPage->hdrOffset; - cellOffset = pPage->cellOffset; - nCell = pPage->nCell; - assert( nCell==get2byte(&data[hdr+3]) ); - usableSize = pPage->pBt->usableSize; - cbrk = get2byte(&data[hdr+5]); - memcpy(&temp[cbrk], &data[cbrk], usableSize - cbrk); - cbrk = usableSize; - for(i=0; i=usableSize ){ - return SQLITE_CORRUPT_BKPT; - } - size = cellSizePtr(pPage, &temp[pc]); - cbrk -= size; - if( cbrkusableSize ){ - return SQLITE_CORRUPT_BKPT; - } - assert( cbrk+size<=usableSize && cbrk>=0 ); - memcpy(&data[cbrk], &temp[pc], size); - put2byte(pAddr, cbrk); - } - assert( cbrk>=cellOffset+2*nCell ); - put2byte(&data[hdr+5], cbrk); - data[hdr+1] = 0; - data[hdr+2] = 0; - data[hdr+7] = 0; - addr = cellOffset+2*nCell; - memset(&data[addr], 0, cbrk-addr); - assert( sqlite3PagerIswriteable(pPage->pDbPage) ); - if( cbrk-addr!=pPage->nFree ){ - return SQLITE_CORRUPT_BKPT; - } - return SQLITE_OK; -} + /* Higher-level routines never call this function if database is not + ** writable. But check anyway, just for robustness. */ + if( NEVER(pPager->readOnly) ) return SQLITE_PERM; -/* -** Allocate nByte bytes of space from within the B-Tree page passed -** as the first argument. Return the index into pPage->aData[] of the -** first byte of allocated space. -** -** The caller guarantees that the space between the end of the cell-offset -** array and the start of the cell-content area is at least nByte bytes -** in size. So this routine can never fail. -** -** If there are already 60 or more bytes of fragments within the page, -** the page is defragmented before returning. If this were not done there -** is a chance that the number of fragmented bytes could eventually -** overflow the single-byte field of the page-header in which this value -** is stored. -*/ -static int allocateSpace(MemPage *pPage, int nByte){ - const int hdr = pPage->hdrOffset; /* Local cache of pPage->hdrOffset */ - u8 * const data = pPage->aData; /* Local cache of pPage->aData */ - int nFrag; /* Number of fragmented bytes on pPage */ - int top; - - assert( sqlite3PagerIswriteable(pPage->pDbPage) ); - assert( pPage->pBt ); - assert( sqlite3_mutex_held(pPage->pBt->mutex) ); - assert( nByte>=0 ); /* Minimum cell size is 4 */ - assert( pPage->nFree>=nByte ); - assert( pPage->nOverflow==0 ); + CHECK_PAGE(pPg); - /* Assert that the space between the cell-offset array and the - ** cell-content area is greater than nByte bytes. + /* The journal file needs to be opened. Higher level routines have already + ** obtained the necessary locks to begin the write-transaction, but the + ** rollback journal might not yet be open. Open it now if this is the case. + ** + ** This is done before calling sqlite3PcacheMakeDirty() on the page. + ** Otherwise, if it were done after calling sqlite3PcacheMakeDirty(), then + ** an error might occur and the pager would end up in WRITER_LOCKED state + ** with pages marked as dirty in the cache. */ - assert( nByte <= ( - get2byte(&data[hdr+5])-(hdr+8+(pPage->leaf?0:4)+2*get2byte(&data[hdr+3])) - )); + if( pPager->eState==PAGER_WRITER_LOCKED ){ + rc = pager_open_journal(pPager); + if( rc!=SQLITE_OK ) return rc; + } + assert( pPager->eState>=PAGER_WRITER_CACHEMOD ); + assert( assert_pager_state(pPager) ); - nFrag = data[hdr+7]; - if( nFrag>=60 ){ - defragmentPage(pPage); + /* Mark the page as dirty. If the page has already been written + ** to the journal then we can return right away. + */ + sqlite3PcacheMakeDirty(pPg); + if( pageInJournal(pPg) && !subjRequiresPage(pPg) ){ + assert( !pagerUseWal(pPager) ); }else{ - /* Search the freelist looking for a free slot big enough to satisfy - ** the request. The allocation is made from the first free slot in - ** the list that is large enough to accomadate it. + + /* The transaction journal now exists and we have a RESERVED or an + ** EXCLUSIVE lock on the main database file. Write the current page to + ** the transaction journal if it is not there already. */ - int pc, addr; - for(addr=hdr+1; (pc = get2byte(&data[addr]))>0; addr=pc){ - int size = get2byte(&data[pc+2]); /* Size of free slot */ - if( size>=nByte ){ - int x = size - nByte; - if( x<4 ){ - /* Remove the slot from the free-list. Update the number of - ** fragmented bytes within the page. */ - memcpy(&data[addr], &data[pc], 2); - data[hdr+7] = (u8)(nFrag + x); - }else{ - /* The slot remains on the free-list. Reduce its size to account - ** for the portion used by the new allocation. */ - put2byte(&data[pc+2], x); - } - return pc + x; - } - } - } + if( !pageInJournal(pPg) && !pagerUseWal(pPager) ){ + assert( pagerUseWal(pPager)==0 ); + if( pPg->pgno<=pPager->dbOrigSize && isOpen(pPager->jfd) ){ + u32 cksum; + char *pData2; + i64 iOff = pPager->journalOff; - /* Allocate memory from the gap in between the cell pointer array - ** and the cell content area. - */ - top = get2byte(&data[hdr+5]) - nByte; - put2byte(&data[hdr+5], top); - return top; -} + /* We should never write to the journal file the page that + ** contains the database locks. The following assert verifies + ** that we do not. */ + assert( pPg->pgno!=PAGER_MJ_PGNO(pPager) ); -/* -** Return a section of the pPage->aData to the freelist. -** The first byte of the new free block is pPage->aDisk[start] -** and the size of the block is "size" bytes. -** -** Most of the effort here is involved in coalesing adjacent -** free blocks into a single big free block. -*/ -static int freeSpace(MemPage *pPage, int start, int size){ - int addr, pbegin, hdr; - unsigned char *data = pPage->aData; + assert( pPager->journalHdr<=pPager->journalOff ); + CODEC2(pPager, pData, pPg->pgno, 7, return SQLITE_NOMEM, pData2); + cksum = pager_cksum(pPager, (u8*)pData2); - assert( pPage->pBt!=0 ); - assert( sqlite3PagerIswriteable(pPage->pDbPage) ); - assert( start>=pPage->hdrOffset+6+(pPage->leaf?0:4) ); - assert( (start + size)<=pPage->pBt->usableSize ); - assert( sqlite3_mutex_held(pPage->pBt->mutex) ); - assert( size>=0 ); /* Minimum cell size is 4 */ + /* Even if an IO or diskfull error occurs while journalling the + ** page in the block above, set the need-sync flag for the page. + ** Otherwise, when the transaction is rolled back, the logic in + ** playback_one_page() will think that the page needs to be restored + ** in the database file. And if an IO error occurs while doing so, + ** then corruption may follow. + */ + pPg->flags |= PGHDR_NEED_SYNC; -#ifdef SQLITE_SECURE_DELETE - /* Overwrite deleted information with zeros when the SECURE_DELETE - ** option is enabled at compile-time */ - memset(&data[start], 0, size); -#endif + rc = write32bits(pPager->jfd, iOff, pPg->pgno); + if( rc!=SQLITE_OK ) return rc; + rc = sqlite3OsWrite(pPager->jfd, pData2, pPager->pageSize, iOff+4); + if( rc!=SQLITE_OK ) return rc; + rc = write32bits(pPager->jfd, iOff+pPager->pageSize+4, cksum); + if( rc!=SQLITE_OK ) return rc; - /* Add the space back into the linked list of freeblocks */ - hdr = pPage->hdrOffset; - addr = hdr + 1; - while( (pbegin = get2byte(&data[addr]))0 ){ - assert( pbegin<=pPage->pBt->usableSize-4 ); - if( pbegin<=addr ) { - return SQLITE_CORRUPT_BKPT; - } - addr = pbegin; - } - if ( pbegin>pPage->pBt->usableSize-4 ) { - return SQLITE_CORRUPT_BKPT; - } - assert( pbegin>addr || pbegin==0 ); - put2byte(&data[addr], start); - put2byte(&data[start], pbegin); - put2byte(&data[start+2], size); - pPage->nFree = pPage->nFree + (u16)size; + IOTRACE(("JOUT %p %d %lld %d\n", pPager, pPg->pgno, + pPager->journalOff, pPager->pageSize)); + PAGER_INCR(sqlite3_pager_writej_count); + PAGERTRACE(("JOURNAL %d page %d needSync=%d hash(%08x)\n", + PAGERID(pPager), pPg->pgno, + ((pPg->flags&PGHDR_NEED_SYNC)?1:0), pager_pagehash(pPg))); - /* Coalesce adjacent free blocks */ - addr = pPage->hdrOffset + 1; - while( (pbegin = get2byte(&data[addr]))>0 ){ - int pnext, psize, x; - assert( pbegin>addr ); - assert( pbegin<=pPage->pBt->usableSize-4 ); - pnext = get2byte(&data[pbegin]); - psize = get2byte(&data[pbegin+2]); - if( pbegin + psize + 3 >= pnext && pnext>0 ){ - int frag = pnext - (pbegin+psize); - if( (frag<0) || (frag>(int)data[pPage->hdrOffset+7]) ){ - return SQLITE_CORRUPT_BKPT; + pPager->journalOff += 8 + pPager->pageSize; + pPager->nRec++; + assert( pPager->pInJournal!=0 ); + rc = sqlite3BitvecSet(pPager->pInJournal, pPg->pgno); + testcase( rc==SQLITE_NOMEM ); + assert( rc==SQLITE_OK || rc==SQLITE_NOMEM ); + rc |= addToSavepointBitvecs(pPager, pPg->pgno); + if( rc!=SQLITE_OK ){ + assert( rc==SQLITE_NOMEM ); + return rc; + } + }else{ + if( pPager->eState!=PAGER_WRITER_DBMOD ){ + pPg->flags |= PGHDR_NEED_SYNC; + } + PAGERTRACE(("APPEND %d page %d needSync=%d\n", + PAGERID(pPager), pPg->pgno, + ((pPg->flags&PGHDR_NEED_SYNC)?1:0))); } - data[pPage->hdrOffset+7] -= (u8)frag; - x = get2byte(&data[pnext]); - put2byte(&data[pbegin], x); - x = pnext + get2byte(&data[pnext+2]) - pbegin; - put2byte(&data[pbegin+2], x); - }else{ - addr = pbegin; + } + + /* If the statement journal is open and the page is not in it, + ** then write the current page to the statement journal. Note that + ** the statement journal format differs from the standard journal format + ** in that it omits the checksums and the header. + */ + if( subjRequiresPage(pPg) ){ + rc = subjournalPage(pPg); } } - /* If the cell content area begins with a freeblock, remove it. */ - if( data[hdr+1]==data[hdr+5] && data[hdr+2]==data[hdr+6] ){ - int top; - pbegin = get2byte(&data[hdr+1]); - memcpy(&data[hdr+1], &data[pbegin], 2); - top = get2byte(&data[hdr+5]) + get2byte(&data[pbegin+2]); - put2byte(&data[hdr+5], top); + /* Update the database size and return. + */ + if( pPager->dbSizepgno ){ + pPager->dbSize = pPg->pgno; } - assert( sqlite3PagerIswriteable(pPage->pDbPage) ); - return SQLITE_OK; + return rc; } /* -** Decode the flags byte (the first byte of the header) for a page -** and initialize fields of the MemPage structure accordingly. +** Mark a data page as writeable. This routine must be called before +** making changes to a page. The caller must check the return value +** of this function and be careful not to change any page data unless +** this routine returns SQLITE_OK. ** -** Only the following combinations are supported. Anything different -** indicates a corrupt database files: +** The difference between this function and pager_write() is that this +** function also deals with the special case where 2 or more pages +** fit on a single disk sector. In this case all co-resident pages +** must have been written to the journal file before returning. ** -** PTF_ZERODATA -** PTF_ZERODATA | PTF_LEAF -** PTF_LEAFDATA | PTF_INTKEY -** PTF_LEAFDATA | PTF_INTKEY | PTF_LEAF +** If an error occurs, SQLITE_NOMEM or an IO error code is returned +** as appropriate. Otherwise, SQLITE_OK. */ -static int decodeFlags(MemPage *pPage, int flagByte){ - BtShared *pBt; /* A copy of pPage->pBt */ +SQLITE_PRIVATE int sqlite3PagerWrite(DbPage *pDbPage){ + int rc = SQLITE_OK; - assert( pPage->hdrOffset==(pPage->pgno==1 ? 100 : 0) ); - assert( sqlite3_mutex_held(pPage->pBt->mutex) ); - pPage->leaf = (u8)(flagByte>>3); assert( PTF_LEAF == 1<<3 ); - flagByte &= ~PTF_LEAF; - pPage->childPtrSize = 4-4*pPage->leaf; - pBt = pPage->pBt; - if( flagByte==(PTF_LEAFDATA | PTF_INTKEY) ){ - pPage->intKey = 1; - pPage->hasData = pPage->leaf; - pPage->maxLocal = pBt->maxLeaf; - pPage->minLocal = pBt->minLeaf; - }else if( flagByte==PTF_ZERODATA ){ - pPage->intKey = 0; - pPage->hasData = 0; - pPage->maxLocal = pBt->maxLocal; - pPage->minLocal = pBt->minLocal; - }else{ - return SQLITE_CORRUPT_BKPT; - } - return SQLITE_OK; -} + PgHdr *pPg = pDbPage; + Pager *pPager = pPg->pPager; + Pgno nPagePerSector = (pPager->sectorSize/pPager->pageSize); -/* -** Initialize the auxiliary information for a disk block. -** -** Return SQLITE_OK on success. If we see that the page does -** not contain a well-formed database page, then return -** SQLITE_CORRUPT. Note that a return of SQLITE_OK does not -** guarantee that the page is well-formed. It only shows that -** we failed to detect any corruption. -*/ -SQLITE_PRIVATE int sqlite3BtreeInitPage(MemPage *pPage){ + assert( pPager->eState>=PAGER_WRITER_LOCKED ); + assert( pPager->eState!=PAGER_ERROR ); + assert( assert_pager_state(pPager) ); - assert( pPage->pBt!=0 ); - assert( sqlite3_mutex_held(pPage->pBt->mutex) ); - assert( pPage->pgno==sqlite3PagerPagenumber(pPage->pDbPage) ); - assert( pPage == sqlite3PagerGetExtra(pPage->pDbPage) ); - assert( pPage->aData == sqlite3PagerGetData(pPage->pDbPage) ); + if( nPagePerSector>1 ){ + Pgno nPageCount; /* Total number of pages in database file */ + Pgno pg1; /* First page of the sector pPg is located on. */ + int nPage = 0; /* Number of pages starting at pg1 to journal */ + int ii; /* Loop counter */ + int needSync = 0; /* True if any page has PGHDR_NEED_SYNC */ - if( !pPage->isInit ){ - u16 pc; /* Address of a freeblock within pPage->aData[] */ - u8 hdr; /* Offset to beginning of page header */ - u8 *data; /* Equal to pPage->aData */ - BtShared *pBt; /* The main btree structure */ - u16 usableSize; /* Amount of usable space on each page */ - u16 cellOffset; /* Offset from start of page to first cell pointer */ - u16 nFree; /* Number of unused bytes on the page */ - u16 top; /* First byte of the cell content area */ + /* Set the doNotSyncSpill flag to 1. This is because we cannot allow + ** a journal header to be written between the pages journaled by + ** this function. + */ + assert( !MEMDB ); + assert( pPager->doNotSyncSpill==0 ); + pPager->doNotSyncSpill++; - pBt = pPage->pBt; + /* This trick assumes that both the page-size and sector-size are + ** an integer power of 2. It sets variable pg1 to the identifier + ** of the first page of the sector pPg is located on. + */ + pg1 = ((pPg->pgno-1) & ~(nPagePerSector-1)) + 1; - hdr = pPage->hdrOffset; - data = pPage->aData; - if( decodeFlags(pPage, data[hdr]) ) return SQLITE_CORRUPT_BKPT; - assert( pBt->pageSize>=512 && pBt->pageSize<=32768 ); - pPage->maskPage = pBt->pageSize - 1; - pPage->nOverflow = 0; - usableSize = pBt->usableSize; - pPage->cellOffset = cellOffset = hdr + 12 - 4*pPage->leaf; - top = get2byte(&data[hdr+5]); - pPage->nCell = get2byte(&data[hdr+3]); - if( pPage->nCell>MX_CELL(pBt) ){ - /* To many cells for a single page. The page must be corrupt */ - return SQLITE_CORRUPT_BKPT; + nPageCount = pPager->dbSize; + if( pPg->pgno>nPageCount ){ + nPage = (pPg->pgno - pg1)+1; + }else if( (pg1+nPagePerSector-1)>nPageCount ){ + nPage = nPageCount+1-pg1; + }else{ + nPage = nPagePerSector; } + assert(nPage>0); + assert(pg1<=pPg->pgno); + assert((pg1+nPage)>pPg->pgno); - /* A malformed database page might cause use to read past the end - ** of page when parsing a cell. - ** - ** The following block of code checks early to see if a cell extends - ** past the end of a page boundary and causes SQLITE_CORRUPT to be - ** returned if it does. - */ -#if defined(SQLITE_ENABLE_OVERSIZE_CELL_CHECK) - { - int iCellFirst; /* First allowable cell index */ - int iCellLast; /* Last possible cell index */ - int i; /* Index into the cell pointer array */ - int sz; /* Size of a cell */ - - iCellFirst = cellOffset + 2*pPage->nCell; - iCellLast = usableSize - 4; - if( !pPage->leaf ) iCellLast--; - for(i=0; inCell; i++){ - pc = get2byte(&data[cellOffset+i*2]); - if( pciCellLast ){ - return SQLITE_CORRUPT_BKPT; + for(ii=0; iipgno || !sqlite3BitvecTest(pPager->pInJournal, pg) ){ + if( pg!=PAGER_MJ_PGNO(pPager) ){ + rc = sqlite3PagerGet(pPager, pg, &pPage); + if( rc==SQLITE_OK ){ + rc = pager_write(pPage); + if( pPage->flags&PGHDR_NEED_SYNC ){ + needSync = 1; + } + sqlite3PagerUnref(pPage); + } } - sz = cellSizePtr(pPage, &data[pc]); - if( pc+sz>usableSize ){ - return SQLITE_CORRUPT_BKPT; + }else if( (pPage = pager_lookup(pPager, pg))!=0 ){ + if( pPage->flags&PGHDR_NEED_SYNC ){ + needSync = 1; } + sqlite3PagerUnref(pPage); } - } -#endif - - /* Compute the total free space on the page */ - pc = get2byte(&data[hdr+1]); - nFree = data[hdr+7] + top; - while( pc>0 ){ - u16 next, size; - if( pc>usableSize-4 ){ - /* Free block is off the page */ - return SQLITE_CORRUPT_BKPT; - } - next = get2byte(&data[pc]); - size = get2byte(&data[pc+2]); - if( next>0 && next<=pc+size+3 ){ - /* Free blocks must be in accending order */ - return SQLITE_CORRUPT_BKPT; - } - nFree = nFree + size; - pc = next; } - /* At this point, nFree contains the sum of the offset to the start - ** of the cell-content area plus the number of free bytes within - ** the cell-content area. If this is greater than the usable-size - ** of the page, then the page must be corrupted. This check also - ** serves to verify that the offset to the start of the cell-content - ** area, according to the page header, lies within the page. + /* If the PGHDR_NEED_SYNC flag is set for any of the nPage pages + ** starting at pg1, then it needs to be set for all of them. Because + ** writing to any of these nPage pages may damage the others, the + ** journal file must contain sync()ed copies of all of them + ** before any of them can be written out to the database file. */ - if( nFree>usableSize ){ - return SQLITE_CORRUPT_BKPT; - } - pPage->nFree = nFree - (cellOffset + 2*pPage->nCell); - -#if 0 - /* Check that all the offsets in the cell offset array are within range. - ** - ** Omitting this consistency check and using the pPage->maskPage mask - ** to prevent overrunning the page buffer in findCell() results in a - ** 2.5% performance gain. - */ - { - u8 *pOff; /* Iterator used to check all cell offsets are in range */ - u8 *pEnd; /* Pointer to end of cell offset array */ - u8 mask; /* Mask of bits that must be zero in MSB of cell offsets */ - mask = ~(((u8)(pBt->pageSize>>8))-1); - pEnd = &data[cellOffset + pPage->nCell*2]; - for(pOff=&data[cellOffset]; pOff!=pEnd && !((*pOff)&mask); pOff+=2); - if( pOff!=pEnd ){ - return SQLITE_CORRUPT_BKPT; + if( rc==SQLITE_OK && needSync ){ + assert( !MEMDB ); + for(ii=0; iiflags |= PGHDR_NEED_SYNC; + sqlite3PagerUnref(pPage); + } + } } - } -#endif - pPage->isInit = 1; + assert( pPager->doNotSyncSpill==1 ); + pPager->doNotSyncSpill--; + }else{ + rc = pager_write(pDbPage); } - return SQLITE_OK; + return rc; } /* -** Set up a raw page so that it looks like a database page holding -** no entries. +** Return TRUE if the page given in the argument was previously passed +** to sqlite3PagerWrite(). In other words, return TRUE if it is ok +** to change the content of the page. */ -static void zeroPage(MemPage *pPage, int flags){ - unsigned char *data = pPage->aData; - BtShared *pBt = pPage->pBt; - u8 hdr = pPage->hdrOffset; - u16 first; - - assert( sqlite3PagerPagenumber(pPage->pDbPage)==pPage->pgno ); - assert( sqlite3PagerGetExtra(pPage->pDbPage) == (void*)pPage ); - assert( sqlite3PagerGetData(pPage->pDbPage) == data ); - assert( sqlite3PagerIswriteable(pPage->pDbPage) ); - assert( sqlite3_mutex_held(pBt->mutex) ); - /*memset(&data[hdr], 0, pBt->usableSize - hdr);*/ - data[hdr] = (char)flags; - first = hdr + 8 + 4*((flags&PTF_LEAF)==0 ?1:0); - memset(&data[hdr+1], 0, 4); - data[hdr+7] = 0; - put2byte(&data[hdr+5], pBt->usableSize); - pPage->nFree = pBt->usableSize - first; - decodeFlags(pPage, flags); - pPage->hdrOffset = hdr; - pPage->cellOffset = first; - pPage->nOverflow = 0; - assert( pBt->pageSize>=512 && pBt->pageSize<=32768 ); - pPage->maskPage = pBt->pageSize - 1; - pPage->nCell = 0; - pPage->isInit = 1; +#ifndef NDEBUG +SQLITE_PRIVATE int sqlite3PagerIswriteable(DbPage *pPg){ + return pPg->flags&PGHDR_DIRTY; } - +#endif /* -** Convert a DbPage obtained from the pager into a MemPage used by -** the btree layer. -*/ -static MemPage *btreePageFromDbPage(DbPage *pDbPage, Pgno pgno, BtShared *pBt){ - MemPage *pPage = (MemPage*)sqlite3PagerGetExtra(pDbPage); - pPage->aData = sqlite3PagerGetData(pDbPage); - pPage->pDbPage = pDbPage; - pPage->pBt = pBt; - pPage->pgno = pgno; - pPage->hdrOffset = pPage->pgno==1 ? 100 : 0; - return pPage; +** A call to this routine tells the pager that it is not necessary to +** write the information on page pPg back to the disk, even though +** that page might be marked as dirty. This happens, for example, when +** the page has been added as a leaf of the freelist and so its +** content no longer matters. +** +** The overlying software layer calls this routine when all of the data +** on the given page is unused. The pager marks the page as clean so +** that it does not get written to disk. +** +** Tests show that this optimization can quadruple the speed of large +** DELETE operations. +*/ +SQLITE_PRIVATE void sqlite3PagerDontWrite(PgHdr *pPg){ + Pager *pPager = pPg->pPager; + if( (pPg->flags&PGHDR_DIRTY) && pPager->nSavepoint==0 ){ + PAGERTRACE(("DONT_WRITE page %d of %d\n", pPg->pgno, PAGERID(pPager))); + IOTRACE(("CLEAN %p %d\n", pPager, pPg->pgno)) + pPg->flags |= PGHDR_DONT_WRITE; + pager_set_pagehash(pPg); + } } /* -** Get a page from the pager. Initialize the MemPage.pBt and -** MemPage.aData elements if needed. +** This routine is called to increment the value of the database file +** change-counter, stored as a 4-byte big-endian integer starting at +** byte offset 24 of the pager file. The secondary change counter at +** 92 is also updated, as is the SQLite version number at offset 96. ** -** If the noContent flag is set, it means that we do not care about -** the content of the page at this time. So do not go to the disk -** to fetch the content. Just fill in the content with zeros for now. -** If in the future we call sqlite3PagerWrite() on this page, that -** means we have started to be concerned about content and the disk -** read should occur at that point. +** But this only happens if the pPager->changeCountDone flag is false. +** To avoid excess churning of page 1, the update only happens once. +** See also the pager_write_changecounter() routine that does an +** unconditional update of the change counters. +** +** If the isDirectMode flag is zero, then this is done by calling +** sqlite3PagerWrite() on page 1, then modifying the contents of the +** page data. In this case the file will be updated when the current +** transaction is committed. +** +** The isDirectMode flag may only be non-zero if the library was compiled +** with the SQLITE_ENABLE_ATOMIC_WRITE macro defined. In this case, +** if isDirect is non-zero, then the database file is updated directly +** by writing an updated version of page 1 using a call to the +** sqlite3OsWrite() function. */ -SQLITE_PRIVATE int sqlite3BtreeGetPage( - BtShared *pBt, /* The btree */ - Pgno pgno, /* Number of the page to fetch */ - MemPage **ppPage, /* Return the page in this parameter */ - int noContent /* Do not load page content if true */ -){ - int rc; - DbPage *pDbPage; +static int pager_incr_changecounter(Pager *pPager, int isDirectMode){ + int rc = SQLITE_OK; - assert( sqlite3_mutex_held(pBt->mutex) ); - rc = sqlite3PagerAcquire(pBt->pPager, pgno, (DbPage**)&pDbPage, noContent); - if( rc ) return rc; - *ppPage = btreePageFromDbPage(pDbPage, pgno, pBt); - return SQLITE_OK; + assert( pPager->eState==PAGER_WRITER_CACHEMOD + || pPager->eState==PAGER_WRITER_DBMOD + ); + assert( assert_pager_state(pPager) ); + + /* Declare and initialize constant integer 'isDirect'. If the + ** atomic-write optimization is enabled in this build, then isDirect + ** is initialized to the value passed as the isDirectMode parameter + ** to this function. Otherwise, it is always set to zero. + ** + ** The idea is that if the atomic-write optimization is not + ** enabled at compile time, the compiler can omit the tests of + ** 'isDirect' below, as well as the block enclosed in the + ** "if( isDirect )" condition. + */ +#ifndef SQLITE_ENABLE_ATOMIC_WRITE +# define DIRECT_MODE 0 + assert( isDirectMode==0 ); + UNUSED_PARAMETER(isDirectMode); +#else +# define DIRECT_MODE isDirectMode +#endif + + if( !pPager->changeCountDone && pPager->dbSize>0 ){ + PgHdr *pPgHdr; /* Reference to page 1 */ + + assert( !pPager->tempFile && isOpen(pPager->fd) ); + + /* Open page 1 of the file for writing. */ + rc = sqlite3PagerGet(pPager, 1, &pPgHdr); + assert( pPgHdr==0 || rc==SQLITE_OK ); + + /* If page one was fetched successfully, and this function is not + ** operating in direct-mode, make page 1 writable. When not in + ** direct mode, page 1 is always held in cache and hence the PagerGet() + ** above is always successful - hence the ALWAYS on rc==SQLITE_OK. + */ + if( !DIRECT_MODE && ALWAYS(rc==SQLITE_OK) ){ + rc = sqlite3PagerWrite(pPgHdr); + } + + if( rc==SQLITE_OK ){ + /* Actually do the update of the change counter */ + pager_write_changecounter(pPgHdr); + + /* If running in direct mode, write the contents of page 1 to the file. */ + if( DIRECT_MODE ){ + const void *zBuf; + assert( pPager->dbFileSize>0 ); + CODEC2(pPager, pPgHdr->pData, 1, 6, rc=SQLITE_NOMEM, zBuf); + if( rc==SQLITE_OK ){ + rc = sqlite3OsWrite(pPager->fd, zBuf, pPager->pageSize, 0); + pPager->aStat[PAGER_STAT_WRITE]++; + } + if( rc==SQLITE_OK ){ + pPager->changeCountDone = 1; + } + }else{ + pPager->changeCountDone = 1; + } + } + + /* Release the page reference. */ + sqlite3PagerUnref(pPgHdr); + } + return rc; } /* -** Retrieve a page from the pager cache. If the requested page is not -** already in the pager cache return NULL. Initialize the MemPage.pBt and -** MemPage.aData elements if needed. +** Sync the database file to disk. This is a no-op for in-memory databases +** or pages with the Pager.noSync flag set. +** +** If successful, or if called on a pager for which it is a no-op, this +** function returns SQLITE_OK. Otherwise, an IO error code is returned. */ -static MemPage *btreePageLookup(BtShared *pBt, Pgno pgno){ - DbPage *pDbPage; - assert( sqlite3_mutex_held(pBt->mutex) ); - pDbPage = sqlite3PagerLookup(pBt->pPager, pgno); - if( pDbPage ){ - return btreePageFromDbPage(pDbPage, pgno, pBt); +SQLITE_PRIVATE int sqlite3PagerSync(Pager *pPager){ + int rc = SQLITE_OK; + if( !pPager->noSync ){ + assert( !MEMDB ); + rc = sqlite3OsSync(pPager->fd, pPager->syncFlags); + }else if( isOpen(pPager->fd) ){ + assert( !MEMDB ); + rc = sqlite3OsFileControl(pPager->fd, SQLITE_FCNTL_SYNC_OMITTED, 0); + if( rc==SQLITE_NOTFOUND ){ + rc = SQLITE_OK; + } } - return 0; + return rc; } /* -** Return the size of the database file in pages. If there is any kind of -** error, return ((unsigned int)-1). +** This function may only be called while a write-transaction is active in +** rollback. If the connection is in WAL mode, this call is a no-op. +** Otherwise, if the connection does not already have an EXCLUSIVE lock on +** the database file, an attempt is made to obtain one. +** +** If the EXCLUSIVE lock is already held or the attempt to obtain it is +** successful, or the connection is in WAL mode, SQLITE_OK is returned. +** Otherwise, either SQLITE_BUSY or an SQLITE_IOERR_XXX error code is +** returned. */ -static Pgno pagerPagecount(BtShared *pBt){ - int nPage = -1; - int rc; - assert( pBt->pPage1 ); - rc = sqlite3PagerPagecount(pBt->pPager, &nPage); - assert( rc==SQLITE_OK || nPage==-1 ); - return (Pgno)nPage; +SQLITE_PRIVATE int sqlite3PagerExclusiveLock(Pager *pPager){ + int rc = SQLITE_OK; + assert( pPager->eState==PAGER_WRITER_CACHEMOD + || pPager->eState==PAGER_WRITER_DBMOD + || pPager->eState==PAGER_WRITER_LOCKED + ); + assert( assert_pager_state(pPager) ); + if( 0==pagerUseWal(pPager) ){ + rc = pager_wait_on_lock(pPager, EXCLUSIVE_LOCK); + } + return rc; } /* -** Get a page from the pager and initialize it. This routine -** is just a convenience wrapper around separate calls to -** sqlite3BtreeGetPage() and sqlite3BtreeInitPage(). +** Sync the database file for the pager pPager. zMaster points to the name +** of a master journal file that should be written into the individual +** journal file. zMaster may be NULL, which is interpreted as no master +** journal (a single database transaction). +** +** This routine ensures that: +** +** * The database file change-counter is updated, +** * the journal is synced (unless the atomic-write optimization is used), +** * all dirty pages are written to the database file, +** * the database file is truncated (if required), and +** * the database file synced. +** +** The only thing that remains to commit the transaction is to finalize +** (delete, truncate or zero the first part of) the journal file (or +** delete the master journal file if specified). +** +** Note that if zMaster==NULL, this does not overwrite a previous value +** passed to an sqlite3PagerCommitPhaseOne() call. +** +** If the final parameter - noSync - is true, then the database file itself +** is not synced. The caller must call sqlite3PagerSync() directly to +** sync the database file before calling CommitPhaseTwo() to delete the +** journal file in this case. */ -static int getAndInitPage( - BtShared *pBt, /* The database file */ - Pgno pgno, /* Number of the page to get */ - MemPage **ppPage /* Write the page pointer here */ +SQLITE_PRIVATE int sqlite3PagerCommitPhaseOne( + Pager *pPager, /* Pager object */ + const char *zMaster, /* If not NULL, the master journal name */ + int noSync /* True to omit the xSync on the db file */ ){ - int rc; - MemPage *pPage; + int rc = SQLITE_OK; /* Return code */ - assert( sqlite3_mutex_held(pBt->mutex) ); - if( pgno==0 ){ - return SQLITE_CORRUPT_BKPT; - } + assert( pPager->eState==PAGER_WRITER_LOCKED + || pPager->eState==PAGER_WRITER_CACHEMOD + || pPager->eState==PAGER_WRITER_DBMOD + || pPager->eState==PAGER_ERROR + ); + assert( assert_pager_state(pPager) ); - /* It is often the case that the page we want is already in cache. - ** If so, get it directly. This saves us from having to call - ** pagerPagecount() to make sure pgno is within limits, which results - ** in a measureable performance improvements. - */ - *ppPage = pPage = btreePageLookup(pBt, pgno); - if( pPage ){ - /* Page is already in cache */ - rc = SQLITE_OK; + /* If a prior error occurred, report that error again. */ + if( NEVER(pPager->errCode) ) return pPager->errCode; + + PAGERTRACE(("DATABASE SYNC: File=%s zMaster=%s nSize=%d\n", + pPager->zFilename, zMaster, pPager->dbSize)); + + /* If no database changes have been made, return early. */ + if( pPager->eStatepBackup); }else{ - /* Page not in cache. Acquire it. */ - if( pgno>pagerPagecount(pBt) ){ - return SQLITE_CORRUPT_BKPT; + if( pagerUseWal(pPager) ){ + PgHdr *pList = sqlite3PcacheDirtyList(pPager->pPCache); + PgHdr *pPageOne = 0; + if( pList==0 ){ + /* Must have at least one page for the WAL commit flag. + ** Ticket [2d1a5c67dfc2363e44f29d9bbd57f] 2011-05-18 */ + rc = sqlite3PagerGet(pPager, 1, &pPageOne); + pList = pPageOne; + pList->pDirty = 0; + } + assert( rc==SQLITE_OK ); + if( ALWAYS(pList) ){ + rc = pagerWalFrames(pPager, pList, pPager->dbSize, 1); + } + sqlite3PagerUnref(pPageOne); + if( rc==SQLITE_OK ){ + sqlite3PcacheCleanAll(pPager->pPCache); + } + }else{ + /* The following block updates the change-counter. Exactly how it + ** does this depends on whether or not the atomic-update optimization + ** was enabled at compile time, and if this transaction meets the + ** runtime criteria to use the operation: + ** + ** * The file-system supports the atomic-write property for + ** blocks of size page-size, and + ** * This commit is not part of a multi-file transaction, and + ** * Exactly one page has been modified and store in the journal file. + ** + ** If the optimization was not enabled at compile time, then the + ** pager_incr_changecounter() function is called to update the change + ** counter in 'indirect-mode'. If the optimization is compiled in but + ** is not applicable to this transaction, call sqlite3JournalCreate() + ** to make sure the journal file has actually been created, then call + ** pager_incr_changecounter() to update the change-counter in indirect + ** mode. + ** + ** Otherwise, if the optimization is both enabled and applicable, + ** then call pager_incr_changecounter() to update the change-counter + ** in 'direct' mode. In this case the journal file will never be + ** created for this transaction. + */ + #ifdef SQLITE_ENABLE_ATOMIC_WRITE + PgHdr *pPg; + assert( isOpen(pPager->jfd) + || pPager->journalMode==PAGER_JOURNALMODE_OFF + || pPager->journalMode==PAGER_JOURNALMODE_WAL + ); + if( !zMaster && isOpen(pPager->jfd) + && pPager->journalOff==jrnlBufferSize(pPager) + && pPager->dbSize>=pPager->dbOrigSize + && (0==(pPg = sqlite3PcacheDirtyList(pPager->pPCache)) || 0==pPg->pDirty) + ){ + /* Update the db file change counter via the direct-write method. The + ** following call will modify the in-memory representation of page 1 + ** to include the updated change counter and then write page 1 + ** directly to the database file. Because of the atomic-write + ** property of the host file-system, this is safe. + */ + rc = pager_incr_changecounter(pPager, 1); + }else{ + rc = sqlite3JournalCreate(pPager->jfd); + if( rc==SQLITE_OK ){ + rc = pager_incr_changecounter(pPager, 0); + } + } + #else + rc = pager_incr_changecounter(pPager, 0); + #endif + if( rc!=SQLITE_OK ) goto commit_phase_one_exit; + + /* If this transaction has made the database smaller, then all pages + ** being discarded by the truncation must be written to the journal + ** file. This can only happen in auto-vacuum mode. + ** + ** Before reading the pages with page numbers larger than the + ** current value of Pager.dbSize, set dbSize back to the value + ** that it took at the start of the transaction. Otherwise, the + ** calls to sqlite3PagerGet() return zeroed pages instead of + ** reading data from the database file. + */ + #ifndef SQLITE_OMIT_AUTOVACUUM + if( pPager->dbSizedbOrigSize + && pPager->journalMode!=PAGER_JOURNALMODE_OFF + ){ + Pgno i; /* Iterator variable */ + const Pgno iSkip = PAGER_MJ_PGNO(pPager); /* Pending lock page */ + const Pgno dbSize = pPager->dbSize; /* Database image size */ + pPager->dbSize = pPager->dbOrigSize; + for( i=dbSize+1; i<=pPager->dbOrigSize; i++ ){ + if( !sqlite3BitvecTest(pPager->pInJournal, i) && i!=iSkip ){ + PgHdr *pPage; /* Page to journal */ + rc = sqlite3PagerGet(pPager, i, &pPage); + if( rc!=SQLITE_OK ) goto commit_phase_one_exit; + rc = sqlite3PagerWrite(pPage); + sqlite3PagerUnref(pPage); + if( rc!=SQLITE_OK ) goto commit_phase_one_exit; + } + } + pPager->dbSize = dbSize; + } + #endif + + /* Write the master journal name into the journal file. If a master + ** journal file name has already been written to the journal file, + ** or if zMaster is NULL (no master journal), then this call is a no-op. + */ + rc = writeMasterJournal(pPager, zMaster); + if( rc!=SQLITE_OK ) goto commit_phase_one_exit; + + /* Sync the journal file and write all dirty pages to the database. + ** If the atomic-update optimization is being used, this sync will not + ** create the journal file or perform any real IO. + ** + ** Because the change-counter page was just modified, unless the + ** atomic-update optimization is used it is almost certain that the + ** journal requires a sync here. However, in locking_mode=exclusive + ** on a system under memory pressure it is just possible that this is + ** not the case. In this case it is likely enough that the redundant + ** xSync() call will be changed to a no-op by the OS anyhow. + */ + rc = syncJournal(pPager, 0); + if( rc!=SQLITE_OK ) goto commit_phase_one_exit; + + rc = pager_write_pagelist(pPager,sqlite3PcacheDirtyList(pPager->pPCache)); + if( rc!=SQLITE_OK ){ + assert( rc!=SQLITE_IOERR_BLOCKED ); + goto commit_phase_one_exit; + } + sqlite3PcacheCleanAll(pPager->pPCache); + + /* If the file on disk is not the same size as the database image, + ** then use pager_truncate to grow or shrink the file here. + */ + if( pPager->dbSize!=pPager->dbFileSize ){ + Pgno nNew = pPager->dbSize - (pPager->dbSize==PAGER_MJ_PGNO(pPager)); + assert( pPager->eState==PAGER_WRITER_DBMOD ); + rc = pager_truncate(pPager, nNew); + if( rc!=SQLITE_OK ) goto commit_phase_one_exit; + } + + /* Finally, sync the database file. */ + if( !noSync ){ + rc = sqlite3PagerSync(pPager); + } + IOTRACE(("DBSYNC %p\n", pPager)) } - rc = sqlite3BtreeGetPage(pBt, pgno, ppPage, 0); - if( rc ) return rc; - pPage = *ppPage; } - if( !pPage->isInit ){ - rc = sqlite3BtreeInitPage(pPage); - } - if( rc!=SQLITE_OK ){ - releasePage(pPage); - *ppPage = 0; + +commit_phase_one_exit: + if( rc==SQLITE_OK && !pagerUseWal(pPager) ){ + pPager->eState = PAGER_WRITER_FINISHED; } return rc; } + /* -** Release a MemPage. This should be called once for each prior -** call to sqlite3BtreeGetPage. +** When this function is called, the database file has been completely +** updated to reflect the changes made by the current transaction and +** synced to disk. The journal file still exists in the file-system +** though, and if a failure occurs at this point it will eventually +** be used as a hot-journal and the current transaction rolled back. +** +** This function finalizes the journal file, either by deleting, +** truncating or partially zeroing it, so that it cannot be used +** for hot-journal rollback. Once this is done the transaction is +** irrevocably committed. +** +** If an error occurs, an IO error code is returned and the pager +** moves into the error state. Otherwise, SQLITE_OK is returned. */ -static void releasePage(MemPage *pPage){ - if( pPage ){ - assert( pPage->nOverflow==0 || sqlite3PagerPageRefcount(pPage->pDbPage)>1 ); - assert( pPage->aData ); - assert( pPage->pBt ); - assert( sqlite3PagerGetExtra(pPage->pDbPage) == (void*)pPage ); - assert( sqlite3PagerGetData(pPage->pDbPage)==pPage->aData ); - assert( sqlite3_mutex_held(pPage->pBt->mutex) ); - sqlite3PagerUnref(pPage->pDbPage); +SQLITE_PRIVATE int sqlite3PagerCommitPhaseTwo(Pager *pPager){ + int rc = SQLITE_OK; /* Return code */ + + /* This routine should not be called if a prior error has occurred. + ** But if (due to a coding error elsewhere in the system) it does get + ** called, just return the same error code without doing anything. */ + if( NEVER(pPager->errCode) ) return pPager->errCode; + + assert( pPager->eState==PAGER_WRITER_LOCKED + || pPager->eState==PAGER_WRITER_FINISHED + || (pagerUseWal(pPager) && pPager->eState==PAGER_WRITER_CACHEMOD) + ); + assert( assert_pager_state(pPager) ); + + /* An optimization. If the database was not actually modified during + ** this transaction, the pager is running in exclusive-mode and is + ** using persistent journals, then this function is a no-op. + ** + ** The start of the journal file currently contains a single journal + ** header with the nRec field set to 0. If such a journal is used as + ** a hot-journal during hot-journal rollback, 0 changes will be made + ** to the database file. So there is no need to zero the journal + ** header. Since the pager is in exclusive mode, there is no need + ** to drop any locks either. + */ + if( pPager->eState==PAGER_WRITER_LOCKED + && pPager->exclusiveMode + && pPager->journalMode==PAGER_JOURNALMODE_PERSIST + ){ + assert( pPager->journalOff==JOURNAL_HDR_SZ(pPager) || !pPager->journalOff ); + pPager->eState = PAGER_READER; + return SQLITE_OK; } + + PAGERTRACE(("COMMIT %d\n", PAGERID(pPager))); + rc = pager_end_transaction(pPager, pPager->setMaster); + return pager_error(pPager, rc); } /* -** During a rollback, when the pager reloads information into the cache -** so that the cache is restored to its original state at the start of -** the transaction, for each page restored this routine is called. +** If a write transaction is open, then all changes made within the +** transaction are reverted and the current write-transaction is closed. +** The pager falls back to PAGER_READER state if successful, or PAGER_ERROR +** state if an error occurs. ** -** This routine needs to reset the extra data section at the end of the -** page to agree with the restored data. +** If the pager is already in PAGER_ERROR state when this function is called, +** it returns Pager.errCode immediately. No work is performed in this case. +** +** Otherwise, in rollback mode, this function performs two functions: +** +** 1) It rolls back the journal file, restoring all database file and +** in-memory cache pages to the state they were in when the transaction +** was opened, and +** +** 2) It finalizes the journal file, so that it is not used for hot +** rollback at any point in the future. +** +** Finalization of the journal file (task 2) is only performed if the +** rollback is successful. +** +** In WAL mode, all cache-entries containing data modified within the +** current transaction are either expelled from the cache or reverted to +** their pre-transaction state by re-reading data from the database or +** WAL files. The WAL transaction is then closed. */ -static void pageReinit(DbPage *pData){ - MemPage *pPage; - pPage = (MemPage *)sqlite3PagerGetExtra(pData); - assert( sqlite3PagerPageRefcount(pData)>0 ); - if( pPage->isInit ){ - assert( sqlite3_mutex_held(pPage->pBt->mutex) ); - pPage->isInit = 0; - if( sqlite3PagerPageRefcount(pData)>1 ){ - /* pPage might not be a btree page; it might be an overflow page - ** or ptrmap page or a free page. In those cases, the following - ** call to sqlite3BtreeInitPage() will likely return SQLITE_CORRUPT. - ** But no harm is done by this. And it is very important that - ** sqlite3BtreeInitPage() be called on every btree page so we make - ** the call for every page that comes in for re-initing. */ - sqlite3BtreeInitPage(pPage); +SQLITE_PRIVATE int sqlite3PagerRollback(Pager *pPager){ + int rc = SQLITE_OK; /* Return code */ + PAGERTRACE(("ROLLBACK %d\n", PAGERID(pPager))); + + /* PagerRollback() is a no-op if called in READER or OPEN state. If + ** the pager is already in the ERROR state, the rollback is not + ** attempted here. Instead, the error code is returned to the caller. + */ + assert( assert_pager_state(pPager) ); + if( pPager->eState==PAGER_ERROR ) return pPager->errCode; + if( pPager->eState<=PAGER_READER ) return SQLITE_OK; + + if( pagerUseWal(pPager) ){ + int rc2; + rc = sqlite3PagerSavepoint(pPager, SAVEPOINT_ROLLBACK, -1); + rc2 = pager_end_transaction(pPager, pPager->setMaster); + if( rc==SQLITE_OK ) rc = rc2; + }else if( !isOpen(pPager->jfd) || pPager->eState==PAGER_WRITER_LOCKED ){ + int eState = pPager->eState; + rc = pager_end_transaction(pPager, 0); + if( !MEMDB && eState>PAGER_WRITER_LOCKED ){ + /* This can happen using journal_mode=off. Move the pager to the error + ** state to indicate that the contents of the cache may not be trusted. + ** Any active readers will get SQLITE_ABORT. + */ + pPager->errCode = SQLITE_ABORT; + pPager->eState = PAGER_ERROR; + return rc; } + }else{ + rc = pager_playback(pPager, 0); } + + assert( pPager->eState==PAGER_READER || rc!=SQLITE_OK ); + assert( rc==SQLITE_OK || rc==SQLITE_FULL + || rc==SQLITE_NOMEM || (rc&0xFF)==SQLITE_IOERR ); + + /* If an error occurs during a ROLLBACK, we can no longer trust the pager + ** cache. So call pager_error() on the way out to make any error persistent. + */ + return pager_error(pPager, rc); } /* -** Invoke the busy handler for a btree. +** Return TRUE if the database file is opened read-only. Return FALSE +** if the database is (in theory) writable. */ -static int btreeInvokeBusyHandler(void *pArg){ - BtShared *pBt = (BtShared*)pArg; - assert( pBt->db ); - assert( sqlite3_mutex_held(pBt->db->mutex) ); - return sqlite3InvokeBusyHandler(&pBt->db->busyHandler); +SQLITE_PRIVATE u8 sqlite3PagerIsreadonly(Pager *pPager){ + return pPager->readOnly; } /* -** Open a database file. -** -** zFilename is the name of the database file. If zFilename is NULL -** a new database with a random name is created. This randomly named -** database file will be deleted when sqlite3BtreeClose() is called. -** If zFilename is ":memory:" then an in-memory database is created -** that is automatically destroyed when it is closed. -** -** If the database is already opened in the same database connection -** and we are in shared cache mode, then the open will fail with an -** SQLITE_CONSTRAINT error. We cannot allow two or more BtShared -** objects in the same database connection since doing so will lead -** to problems with locking. +** Return the number of references to the pager. */ -SQLITE_PRIVATE int sqlite3BtreeOpen( - const char *zFilename, /* Name of the file containing the BTree database */ - sqlite3 *db, /* Associated database handle */ - Btree **ppBtree, /* Pointer to new Btree object written here */ - int flags, /* Options */ - int vfsFlags /* Flags passed through to sqlite3_vfs.xOpen() */ -){ - sqlite3_vfs *pVfs; /* The VFS to use for this btree */ - BtShared *pBt = 0; /* Shared part of btree structure */ - Btree *p; /* Handle to return */ - sqlite3_mutex *mutexOpen = 0; /* Prevents a race condition. Ticket #3537 */ - int rc = SQLITE_OK; /* Result code from this function */ - u8 nReserve; /* Byte of unused space on each page */ - unsigned char zDbHeader[100]; /* Database header content */ +SQLITE_PRIVATE int sqlite3PagerRefcount(Pager *pPager){ + return sqlite3PcacheRefCount(pPager->pPCache); +} - /* Set the variable isMemdb to true for an in-memory database, or - ** false for a file-based database. This symbol is only required if - ** either of the shared-data or autovacuum features are compiled - ** into the library. - */ -#if !defined(SQLITE_OMIT_SHARED_CACHE) || !defined(SQLITE_OMIT_AUTOVACUUM) - #ifdef SQLITE_OMIT_MEMORYDB - const int isMemdb = 0; - #else - const int isMemdb = zFilename && !strcmp(zFilename, ":memory:"); - #endif +/* +** Return the approximate number of bytes of memory currently +** used by the pager and its associated cache. +*/ +SQLITE_PRIVATE int sqlite3PagerMemUsed(Pager *pPager){ + int perPageSize = pPager->pageSize + pPager->nExtra + sizeof(PgHdr) + + 5*sizeof(void*); + return perPageSize*sqlite3PcachePagecount(pPager->pPCache) + + sqlite3MallocSize(pPager) + + pPager->pageSize; +} + +/* +** Return the number of references to the specified page. +*/ +SQLITE_PRIVATE int sqlite3PagerPageRefcount(DbPage *pPage){ + return sqlite3PcachePageRefcount(pPage); +} + +#ifdef SQLITE_TEST +/* +** This routine is used for testing and analysis only. +*/ +SQLITE_PRIVATE int *sqlite3PagerStats(Pager *pPager){ + static int a[11]; + a[0] = sqlite3PcacheRefCount(pPager->pPCache); + a[1] = sqlite3PcachePagecount(pPager->pPCache); + a[2] = sqlite3PcacheGetCachesize(pPager->pPCache); + a[3] = pPager->eState==PAGER_OPEN ? -1 : (int) pPager->dbSize; + a[4] = pPager->eState; + a[5] = pPager->errCode; + a[6] = pPager->aStat[PAGER_STAT_HIT]; + a[7] = pPager->aStat[PAGER_STAT_MISS]; + a[8] = 0; /* Used to be pPager->nOvfl */ + a[9] = pPager->nRead; + a[10] = pPager->aStat[PAGER_STAT_WRITE]; + return a; +} #endif - assert( db!=0 ); - assert( sqlite3_mutex_held(db->mutex) ); +/* +** Parameter eStat must be either SQLITE_DBSTATUS_CACHE_HIT or +** SQLITE_DBSTATUS_CACHE_MISS. Before returning, *pnVal is incremented by the +** current cache hit or miss count, according to the value of eStat. If the +** reset parameter is non-zero, the cache hit or miss count is zeroed before +** returning. +*/ +SQLITE_PRIVATE void sqlite3PagerCacheStat(Pager *pPager, int eStat, int reset, int *pnVal){ - pVfs = db->pVfs; - p = sqlite3MallocZero(sizeof(Btree)); - if( !p ){ - return SQLITE_NOMEM; + assert( eStat==SQLITE_DBSTATUS_CACHE_HIT + || eStat==SQLITE_DBSTATUS_CACHE_MISS + || eStat==SQLITE_DBSTATUS_CACHE_WRITE + ); + + assert( SQLITE_DBSTATUS_CACHE_HIT+1==SQLITE_DBSTATUS_CACHE_MISS ); + assert( SQLITE_DBSTATUS_CACHE_HIT+2==SQLITE_DBSTATUS_CACHE_WRITE ); + assert( PAGER_STAT_HIT==0 && PAGER_STAT_MISS==1 && PAGER_STAT_WRITE==2 ); + + *pnVal += pPager->aStat[eStat - SQLITE_DBSTATUS_CACHE_HIT]; + if( reset ){ + pPager->aStat[eStat - SQLITE_DBSTATUS_CACHE_HIT] = 0; } - p->inTrans = TRANS_NONE; - p->db = db; +} -#if !defined(SQLITE_OMIT_SHARED_CACHE) && !defined(SQLITE_OMIT_DISKIO) - /* - ** If this Btree is a candidate for shared cache, try to find an - ** existing BtShared object that we can share with - */ - if( isMemdb==0 && zFilename && zFilename[0] ){ - if( sqlite3GlobalConfig.sharedCacheEnabled ){ - int nFullPathname = pVfs->mxPathname+1; - char *zFullPathname = sqlite3Malloc(nFullPathname); - sqlite3_mutex *mutexShared; - p->sharable = 1; - db->flags |= SQLITE_SharedCache; - if( !zFullPathname ){ - sqlite3_free(p); +/* +** Return true if this is an in-memory pager. +*/ +SQLITE_PRIVATE int sqlite3PagerIsMemdb(Pager *pPager){ + return MEMDB; +} + +/* +** Check that there are at least nSavepoint savepoints open. If there are +** currently less than nSavepoints open, then open one or more savepoints +** to make up the difference. If the number of savepoints is already +** equal to nSavepoint, then this function is a no-op. +** +** If a memory allocation fails, SQLITE_NOMEM is returned. If an error +** occurs while opening the sub-journal file, then an IO error code is +** returned. Otherwise, SQLITE_OK. +*/ +SQLITE_PRIVATE int sqlite3PagerOpenSavepoint(Pager *pPager, int nSavepoint){ + int rc = SQLITE_OK; /* Return code */ + int nCurrent = pPager->nSavepoint; /* Current number of savepoints */ + + assert( pPager->eState>=PAGER_WRITER_LOCKED ); + assert( assert_pager_state(pPager) ); + + if( nSavepoint>nCurrent && pPager->useJournal ){ + int ii; /* Iterator variable */ + PagerSavepoint *aNew; /* New Pager.aSavepoint array */ + + /* Grow the Pager.aSavepoint array using realloc(). Return SQLITE_NOMEM + ** if the allocation fails. Otherwise, zero the new portion in case a + ** malloc failure occurs while populating it in the for(...) loop below. + */ + aNew = (PagerSavepoint *)sqlite3Realloc( + pPager->aSavepoint, sizeof(PagerSavepoint)*nSavepoint + ); + if( !aNew ){ + return SQLITE_NOMEM; + } + memset(&aNew[nCurrent], 0, (nSavepoint-nCurrent) * sizeof(PagerSavepoint)); + pPager->aSavepoint = aNew; + + /* Populate the PagerSavepoint structures just allocated. */ + for(ii=nCurrent; iidbSize; + if( isOpen(pPager->jfd) && pPager->journalOff>0 ){ + aNew[ii].iOffset = pPager->journalOff; + }else{ + aNew[ii].iOffset = JOURNAL_HDR_SZ(pPager); + } + aNew[ii].iSubRec = pPager->nSubRec; + aNew[ii].pInSavepoint = sqlite3BitvecCreate(pPager->dbSize); + if( !aNew[ii].pInSavepoint ){ return SQLITE_NOMEM; } - sqlite3OsFullPathname(pVfs, zFilename, nFullPathname, zFullPathname); - mutexOpen = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_OPEN); - sqlite3_mutex_enter(mutexOpen); - mutexShared = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER); - sqlite3_mutex_enter(mutexShared); - for(pBt=GLOBAL(BtShared*,sqlite3SharedCacheList); pBt; pBt=pBt->pNext){ - assert( pBt->nRef>0 ); - if( 0==strcmp(zFullPathname, sqlite3PagerFilename(pBt->pPager)) - && sqlite3PagerVfs(pBt->pPager)==pVfs ){ - int iDb; - for(iDb=db->nDb-1; iDb>=0; iDb--){ - Btree *pExisting = db->aDb[iDb].pBt; - if( pExisting && pExisting->pBt==pBt ){ - sqlite3_mutex_leave(mutexShared); - sqlite3_mutex_leave(mutexOpen); - sqlite3_free(zFullPathname); - sqlite3_free(p); - return SQLITE_CONSTRAINT; - } - } - p->pBt = pBt; - pBt->nRef++; - break; - } + if( pagerUseWal(pPager) ){ + sqlite3WalSavepoint(pPager->pWal, aNew[ii].aWalData); } - sqlite3_mutex_leave(mutexShared); - sqlite3_free(zFullPathname); - } -#ifdef SQLITE_DEBUG - else{ - /* In debug mode, we mark all persistent databases as sharable - ** even when they are not. This exercises the locking code and - ** gives more opportunity for asserts(sqlite3_mutex_held()) - ** statements to find locking problems. - */ - p->sharable = 1; + pPager->nSavepoint = ii+1; } -#endif + assert( pPager->nSavepoint==nSavepoint ); + assertTruncateConstraint(pPager); } -#endif - if( pBt==0 ){ - /* - ** The following asserts make sure that structures used by the btree are - ** the right size. This is to guard against size changes that result - ** when compiling on a different architecture. - */ - assert( sizeof(i64)==8 || sizeof(i64)==4 ); - assert( sizeof(u64)==8 || sizeof(u64)==4 ); - assert( sizeof(u32)==4 ); - assert( sizeof(u16)==2 ); - assert( sizeof(Pgno)==4 ); - - pBt = sqlite3MallocZero( sizeof(*pBt) ); - if( pBt==0 ){ - rc = SQLITE_NOMEM; - goto btree_open_out; - } - rc = sqlite3PagerOpen(pVfs, &pBt->pPager, zFilename, - EXTRA_SIZE, flags, vfsFlags); - if( rc==SQLITE_OK ){ - rc = sqlite3PagerReadFileheader(pBt->pPager,sizeof(zDbHeader),zDbHeader); - } - if( rc!=SQLITE_OK ){ - goto btree_open_out; - } - pBt->db = db; - sqlite3PagerSetBusyhandler(pBt->pPager, btreeInvokeBusyHandler, pBt); - p->pBt = pBt; - - sqlite3PagerSetReiniter(pBt->pPager, pageReinit); - pBt->pCursor = 0; - pBt->pPage1 = 0; - pBt->readOnly = sqlite3PagerIsreadonly(pBt->pPager); - pBt->pageSize = get2byte(&zDbHeader[16]); - if( pBt->pageSize<512 || pBt->pageSize>SQLITE_MAX_PAGE_SIZE - || ((pBt->pageSize-1)&pBt->pageSize)!=0 ){ - pBt->pageSize = 0; -#ifndef SQLITE_OMIT_AUTOVACUUM - /* If the magic name ":memory:" will create an in-memory database, then - ** leave the autoVacuum mode at 0 (do not auto-vacuum), even if - ** SQLITE_DEFAULT_AUTOVACUUM is true. On the other hand, if - ** SQLITE_OMIT_MEMORYDB has been defined, then ":memory:" is just a - ** regular file-name. In this case the auto-vacuum applies as per normal. - */ - if( zFilename && !isMemdb ){ - pBt->autoVacuum = (SQLITE_DEFAULT_AUTOVACUUM ? 1 : 0); - pBt->incrVacuum = (SQLITE_DEFAULT_AUTOVACUUM==2 ? 1 : 0); - } -#endif - nReserve = 0; - }else{ - nReserve = zDbHeader[20]; - pBt->pageSizeFixed = 1; -#ifndef SQLITE_OMIT_AUTOVACUUM - pBt->autoVacuum = (get4byte(&zDbHeader[36 + 4*4])?1:0); - pBt->incrVacuum = (get4byte(&zDbHeader[36 + 7*4])?1:0); -#endif - } - rc = sqlite3PagerSetPagesize(pBt->pPager, &pBt->pageSize, nReserve); - if( rc ) goto btree_open_out; - pBt->usableSize = pBt->pageSize - nReserve; - assert( (pBt->pageSize & 7)==0 ); /* 8-byte alignment of pageSize */ - -#if !defined(SQLITE_OMIT_SHARED_CACHE) && !defined(SQLITE_OMIT_DISKIO) - /* Add the new BtShared object to the linked list sharable BtShareds. + + return rc; +} + +/* +** This function is called to rollback or release (commit) a savepoint. +** The savepoint to release or rollback need not be the most recently +** created savepoint. +** +** Parameter op is always either SAVEPOINT_ROLLBACK or SAVEPOINT_RELEASE. +** If it is SAVEPOINT_RELEASE, then release and destroy the savepoint with +** index iSavepoint. If it is SAVEPOINT_ROLLBACK, then rollback all changes +** that have occurred since the specified savepoint was created. +** +** The savepoint to rollback or release is identified by parameter +** iSavepoint. A value of 0 means to operate on the outermost savepoint +** (the first created). A value of (Pager.nSavepoint-1) means operate +** on the most recently created savepoint. If iSavepoint is greater than +** (Pager.nSavepoint-1), then this function is a no-op. +** +** If a negative value is passed to this function, then the current +** transaction is rolled back. This is different to calling +** sqlite3PagerRollback() because this function does not terminate +** the transaction or unlock the database, it just restores the +** contents of the database to its original state. +** +** In any case, all savepoints with an index greater than iSavepoint +** are destroyed. If this is a release operation (op==SAVEPOINT_RELEASE), +** then savepoint iSavepoint is also destroyed. +** +** This function may return SQLITE_NOMEM if a memory allocation fails, +** or an IO error code if an IO error occurs while rolling back a +** savepoint. If no errors occur, SQLITE_OK is returned. +*/ +SQLITE_PRIVATE int sqlite3PagerSavepoint(Pager *pPager, int op, int iSavepoint){ + int rc = pPager->errCode; /* Return code */ + + assert( op==SAVEPOINT_RELEASE || op==SAVEPOINT_ROLLBACK ); + assert( iSavepoint>=0 || op==SAVEPOINT_ROLLBACK ); + + if( rc==SQLITE_OK && iSavepointnSavepoint ){ + int ii; /* Iterator variable */ + int nNew; /* Number of remaining savepoints after this op. */ + + /* Figure out how many savepoints will still be active after this + ** operation. Store this value in nNew. Then free resources associated + ** with any savepoints that are destroyed by this operation. */ - if( p->sharable ){ - sqlite3_mutex *mutexShared; - pBt->nRef = 1; - mutexShared = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER); - if( SQLITE_THREADSAFE && sqlite3GlobalConfig.bCoreMutex ){ - pBt->mutex = sqlite3MutexAlloc(SQLITE_MUTEX_FAST); - if( pBt->mutex==0 ){ - rc = SQLITE_NOMEM; - db->mallocFailed = 0; - goto btree_open_out; - } - } - sqlite3_mutex_enter(mutexShared); - pBt->pNext = GLOBAL(BtShared*,sqlite3SharedCacheList); - GLOBAL(BtShared*,sqlite3SharedCacheList) = pBt; - sqlite3_mutex_leave(mutexShared); + nNew = iSavepoint + (( op==SAVEPOINT_RELEASE ) ? 0 : 1); + for(ii=nNew; iinSavepoint; ii++){ + sqlite3BitvecDestroy(pPager->aSavepoint[ii].pInSavepoint); } -#endif - } + pPager->nSavepoint = nNew; -#if !defined(SQLITE_OMIT_SHARED_CACHE) && !defined(SQLITE_OMIT_DISKIO) - /* If the new Btree uses a sharable pBtShared, then link the new - ** Btree into the list of all sharable Btrees for the same connection. - ** The list is kept in ascending order by pBt address. - */ - if( p->sharable ){ - int i; - Btree *pSib; - for(i=0; inDb; i++){ - if( (pSib = db->aDb[i].pBt)!=0 && pSib->sharable ){ - while( pSib->pPrev ){ pSib = pSib->pPrev; } - if( p->pBtpBt ){ - p->pNext = pSib; - p->pPrev = 0; - pSib->pPrev = p; - }else{ - while( pSib->pNext && pSib->pNext->pBtpBt ){ - pSib = pSib->pNext; - } - p->pNext = pSib->pNext; - p->pPrev = pSib; - if( p->pNext ){ - p->pNext->pPrev = p; - } - pSib->pNext = p; + /* If this is a release of the outermost savepoint, truncate + ** the sub-journal to zero bytes in size. */ + if( op==SAVEPOINT_RELEASE ){ + if( nNew==0 && isOpen(pPager->sjfd) ){ + /* Only truncate if it is an in-memory sub-journal. */ + if( sqlite3IsMemJournal(pPager->sjfd) ){ + rc = sqlite3OsTruncate(pPager->sjfd, 0); + assert( rc==SQLITE_OK ); } - break; + pPager->nSubRec = 0; } } - } -#endif - *ppBtree = p; - -btree_open_out: - if( rc!=SQLITE_OK ){ - if( pBt && pBt->pPager ){ - sqlite3PagerClose(pBt->pPager); + /* Else this is a rollback operation, playback the specified savepoint. + ** If this is a temp-file, it is possible that the journal file has + ** not yet been opened. In this case there have been no changes to + ** the database file, so the playback operation can be skipped. + */ + else if( pagerUseWal(pPager) || isOpen(pPager->jfd) ){ + PagerSavepoint *pSavepoint = (nNew==0)?0:&pPager->aSavepoint[nNew-1]; + rc = pagerPlaybackSavepoint(pPager, pSavepoint); + assert(rc!=SQLITE_DONE); } - sqlite3_free(pBt); - sqlite3_free(p); - *ppBtree = 0; - } - if( mutexOpen ){ - assert( sqlite3_mutex_held(mutexOpen) ); - sqlite3_mutex_leave(mutexOpen); } + return rc; } /* -** Decrement the BtShared.nRef counter. When it reaches zero, -** remove the BtShared structure from the sharing list. Return -** true if the BtShared.nRef counter reaches zero and return -** false if it is still positive. +** Return the full pathname of the database file. +** +** Except, if the pager is in-memory only, then return an empty string if +** nullIfMemDb is true. This routine is called with nullIfMemDb==1 when +** used to report the filename to the user, for compatibility with legacy +** behavior. But when the Btree needs to know the filename for matching to +** shared cache, it uses nullIfMemDb==0 so that in-memory databases can +** participate in shared-cache. */ -static int removeFromSharingList(BtShared *pBt){ -#ifndef SQLITE_OMIT_SHARED_CACHE - sqlite3_mutex *pMaster; - BtShared *pList; - int removed = 0; +SQLITE_PRIVATE const char *sqlite3PagerFilename(Pager *pPager, int nullIfMemDb){ + return (nullIfMemDb && pPager->memDb) ? "" : pPager->zFilename; +} - assert( sqlite3_mutex_notheld(pBt->mutex) ); - pMaster = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER); - sqlite3_mutex_enter(pMaster); - pBt->nRef--; - if( pBt->nRef<=0 ){ - if( GLOBAL(BtShared*,sqlite3SharedCacheList)==pBt ){ - GLOBAL(BtShared*,sqlite3SharedCacheList) = pBt->pNext; - }else{ - pList = GLOBAL(BtShared*,sqlite3SharedCacheList); - while( ALWAYS(pList) && pList->pNext!=pBt ){ - pList=pList->pNext; - } - if( ALWAYS(pList) ){ - pList->pNext = pBt->pNext; - } - } - if( SQLITE_THREADSAFE ){ - sqlite3_mutex_free(pBt->mutex); - } - removed = 1; - } - sqlite3_mutex_leave(pMaster); - return removed; -#else - return 1; -#endif +/* +** Return the VFS structure for the pager. +*/ +SQLITE_PRIVATE const sqlite3_vfs *sqlite3PagerVfs(Pager *pPager){ + return pPager->pVfs; } /* -** Make sure pBt->pTmpSpace points to an allocation of -** MX_CELL_SIZE(pBt) bytes. +** Return the file handle for the database file associated +** with the pager. This might return NULL if the file has +** not yet been opened. */ -static void allocateTempSpace(BtShared *pBt){ - if( !pBt->pTmpSpace ){ - pBt->pTmpSpace = sqlite3PageMalloc( pBt->pageSize ); - } +SQLITE_PRIVATE sqlite3_file *sqlite3PagerFile(Pager *pPager){ + return pPager->fd; } /* -** Free the pBt->pTmpSpace allocation +** Return the full pathname of the journal file. */ -static void freeTempSpace(BtShared *pBt){ - sqlite3PageFree( pBt->pTmpSpace); - pBt->pTmpSpace = 0; +SQLITE_PRIVATE const char *sqlite3PagerJournalname(Pager *pPager){ + return pPager->zJournal; } /* -** Close an open database and invalidate all cursors. +** Return true if fsync() calls are disabled for this pager. Return FALSE +** if fsync()s are executed normally. */ -SQLITE_PRIVATE int sqlite3BtreeClose(Btree *p){ - BtShared *pBt = p->pBt; - BtCursor *pCur; +SQLITE_PRIVATE int sqlite3PagerNosync(Pager *pPager){ + return pPager->noSync; +} - /* Close all cursors opened via this handle. */ - assert( sqlite3_mutex_held(p->db->mutex) ); - sqlite3BtreeEnter(p); - pCur = pBt->pCursor; - while( pCur ){ - BtCursor *pTmp = pCur; - pCur = pCur->pNext; - if( pTmp->pBtree==p ){ - sqlite3BtreeCloseCursor(pTmp); - } +#ifdef SQLITE_HAS_CODEC +/* +** Set or retrieve the codec for this pager +*/ +SQLITE_PRIVATE void sqlite3PagerSetCodec( + Pager *pPager, + void *(*xCodec)(void*,void*,Pgno,int), + void (*xCodecSizeChng)(void*,int,int), + void (*xCodecFree)(void*), + void *pCodec +){ + if( pPager->xCodecFree ) pPager->xCodecFree(pPager->pCodec); + pPager->xCodec = pPager->memDb ? 0 : xCodec; + pPager->xCodecSizeChng = xCodecSizeChng; + pPager->xCodecFree = xCodecFree; + pPager->pCodec = pCodec; + pagerReportSize(pPager); +} +SQLITE_PRIVATE void *sqlite3PagerGetCodec(Pager *pPager){ + return pPager->pCodec; +} +#endif + +#ifndef SQLITE_OMIT_AUTOVACUUM +/* +** Move the page pPg to location pgno in the file. +** +** There must be no references to the page previously located at +** pgno (which we call pPgOld) though that page is allowed to be +** in cache. If the page previously located at pgno is not already +** in the rollback journal, it is not put there by by this routine. +** +** References to the page pPg remain valid. Updating any +** meta-data associated with pPg (i.e. data stored in the nExtra bytes +** allocated along with the page) is the responsibility of the caller. +** +** A transaction must be active when this routine is called. It used to be +** required that a statement transaction was not active, but this restriction +** has been removed (CREATE INDEX needs to move a page when a statement +** transaction is active). +** +** If the fourth argument, isCommit, is non-zero, then this page is being +** moved as part of a database reorganization just before the transaction +** is being committed. In this case, it is guaranteed that the database page +** pPg refers to will not be written to again within this transaction. +** +** This function may return SQLITE_NOMEM or an IO error code if an error +** occurs. Otherwise, it returns SQLITE_OK. +*/ +SQLITE_PRIVATE int sqlite3PagerMovepage(Pager *pPager, DbPage *pPg, Pgno pgno, int isCommit){ + PgHdr *pPgOld; /* The page being overwritten. */ + Pgno needSyncPgno = 0; /* Old value of pPg->pgno, if sync is required */ + int rc; /* Return code */ + Pgno origPgno; /* The original page number */ + + assert( pPg->nRef>0 ); + assert( pPager->eState==PAGER_WRITER_CACHEMOD + || pPager->eState==PAGER_WRITER_DBMOD + ); + assert( assert_pager_state(pPager) ); + + /* In order to be able to rollback, an in-memory database must journal + ** the page we are moving from. + */ + if( MEMDB ){ + rc = sqlite3PagerWrite(pPg); + if( rc ) return rc; } - /* Rollback any active transaction and free the handle structure. - ** The call to sqlite3BtreeRollback() drops any table-locks held by - ** this handle. + /* If the page being moved is dirty and has not been saved by the latest + ** savepoint, then save the current contents of the page into the + ** sub-journal now. This is required to handle the following scenario: + ** + ** BEGIN; + ** + ** SAVEPOINT one; + ** + ** ROLLBACK TO one; + ** + ** If page X were not written to the sub-journal here, it would not + ** be possible to restore its contents when the "ROLLBACK TO one" + ** statement were is processed. + ** + ** subjournalPage() may need to allocate space to store pPg->pgno into + ** one or more savepoint bitvecs. This is the reason this function + ** may return SQLITE_NOMEM. */ - sqlite3BtreeRollback(p); - sqlite3BtreeLeave(p); + if( pPg->flags&PGHDR_DIRTY + && subjRequiresPage(pPg) + && SQLITE_OK!=(rc = subjournalPage(pPg)) + ){ + return rc; + } - /* If there are still other outstanding references to the shared-btree - ** structure, return now. The remainder of this procedure cleans - ** up the shared-btree. + PAGERTRACE(("MOVE %d page %d (needSync=%d) moves to %d\n", + PAGERID(pPager), pPg->pgno, (pPg->flags&PGHDR_NEED_SYNC)?1:0, pgno)); + IOTRACE(("MOVE %p %d %d\n", pPager, pPg->pgno, pgno)) + + /* If the journal needs to be sync()ed before page pPg->pgno can + ** be written to, store pPg->pgno in local variable needSyncPgno. + ** + ** If the isCommit flag is set, there is no need to remember that + ** the journal needs to be sync()ed before database page pPg->pgno + ** can be written to. The caller has already promised not to write to it. */ - assert( p->wantToLock==0 && p->locked==0 ); - if( !p->sharable || removeFromSharingList(pBt) ){ - /* The pBt is no longer on the sharing list, so we can access - ** it without having to hold the mutex. + if( (pPg->flags&PGHDR_NEED_SYNC) && !isCommit ){ + needSyncPgno = pPg->pgno; + assert( pageInJournal(pPg) || pPg->pgno>pPager->dbOrigSize ); + assert( pPg->flags&PGHDR_DIRTY ); + } + + /* If the cache contains a page with page-number pgno, remove it + ** from its hash chain. Also, if the PGHDR_NEED_SYNC flag was set for + ** page pgno before the 'move' operation, it needs to be retained + ** for the page moved there. + */ + pPg->flags &= ~PGHDR_NEED_SYNC; + pPgOld = pager_lookup(pPager, pgno); + assert( !pPgOld || pPgOld->nRef==1 ); + if( pPgOld ){ + pPg->flags |= (pPgOld->flags&PGHDR_NEED_SYNC); + if( MEMDB ){ + /* Do not discard pages from an in-memory database since we might + ** need to rollback later. Just move the page out of the way. */ + sqlite3PcacheMove(pPgOld, pPager->dbSize+1); + }else{ + sqlite3PcacheDrop(pPgOld); + } + } + + origPgno = pPg->pgno; + sqlite3PcacheMove(pPg, pgno); + sqlite3PcacheMakeDirty(pPg); + + /* For an in-memory database, make sure the original page continues + ** to exist, in case the transaction needs to roll back. Use pPgOld + ** as the original page since it has already been allocated. + */ + if( MEMDB ){ + assert( pPgOld ); + sqlite3PcacheMove(pPgOld, origPgno); + sqlite3PagerUnref(pPgOld); + } + + if( needSyncPgno ){ + /* If needSyncPgno is non-zero, then the journal file needs to be + ** sync()ed before any data is written to database file page needSyncPgno. + ** Currently, no such page exists in the page-cache and the + ** "is journaled" bitvec flag has been set. This needs to be remedied by + ** loading the page into the pager-cache and setting the PGHDR_NEED_SYNC + ** flag. ** - ** Clean out and delete the BtShared object. + ** If the attempt to load the page into the page-cache fails, (due + ** to a malloc() or IO failure), clear the bit in the pInJournal[] + ** array. Otherwise, if the page is loaded and written again in + ** this transaction, it may be written to the database file before + ** it is synced into the journal file. This way, it may end up in + ** the journal file twice, but that is not a problem. */ - assert( !pBt->pCursor ); - sqlite3PagerClose(pBt->pPager); - if( pBt->xFreeSchema && pBt->pSchema ){ - pBt->xFreeSchema(pBt->pSchema); + PgHdr *pPgHdr; + rc = sqlite3PagerGet(pPager, needSyncPgno, &pPgHdr); + if( rc!=SQLITE_OK ){ + if( needSyncPgno<=pPager->dbOrigSize ){ + assert( pPager->pTmpSpace!=0 ); + sqlite3BitvecClear(pPager->pInJournal, needSyncPgno, pPager->pTmpSpace); + } + return rc; } - sqlite3_free(pBt->pSchema); - freeTempSpace(pBt); - sqlite3_free(pBt); + pPgHdr->flags |= PGHDR_NEED_SYNC; + sqlite3PcacheMakeDirty(pPgHdr); + sqlite3PagerUnref(pPgHdr); } -#ifndef SQLITE_OMIT_SHARED_CACHE - assert( p->wantToLock==0 ); - assert( p->locked==0 ); - if( p->pPrev ) p->pPrev->pNext = p->pNext; - if( p->pNext ) p->pNext->pPrev = p->pPrev; -#endif - - sqlite3_free(p); return SQLITE_OK; } +#endif /* -** Change the limit on the number of pages allowed in the cache. -** -** The maximum number of cache pages is set to the absolute -** value of mxPage. If mxPage is negative, the pager will -** operate asynchronously - it will not stop to do fsync()s -** to insure data is written to the disk surface before -** continuing. Transactions still work if synchronous is off, -** and the database cannot be corrupted if this program -** crashes. But if the operating system crashes or there is -** an abrupt power failure when synchronous is off, the database -** could be left in an inconsistent and unrecoverable state. -** Synchronous is on by default so database corruption is not -** normally a worry. +** Return a pointer to the data for the specified page. */ -SQLITE_PRIVATE int sqlite3BtreeSetCacheSize(Btree *p, int mxPage){ - BtShared *pBt = p->pBt; - assert( sqlite3_mutex_held(p->db->mutex) ); - sqlite3BtreeEnter(p); - sqlite3PagerSetCachesize(pBt->pPager, mxPage); - sqlite3BtreeLeave(p); - return SQLITE_OK; +SQLITE_PRIVATE void *sqlite3PagerGetData(DbPage *pPg){ + assert( pPg->nRef>0 || pPg->pPager->memDb ); + return pPg->pData; } /* -** Change the way data is synced to disk in order to increase or decrease -** how well the database resists damage due to OS crashes and power -** failures. Level 1 is the same as asynchronous (no syncs() occur and -** there is a high probability of damage) Level 2 is the default. There -** is a very low but non-zero probability of damage. Level 3 reduces the -** probability of damage to near zero but with a write performance reduction. +** Return a pointer to the Pager.nExtra bytes of "extra" space +** allocated along with the specified page. */ -#ifndef SQLITE_OMIT_PAGER_PRAGMAS -SQLITE_PRIVATE int sqlite3BtreeSetSafetyLevel(Btree *p, int level, int fullSync){ - BtShared *pBt = p->pBt; - assert( sqlite3_mutex_held(p->db->mutex) ); - sqlite3BtreeEnter(p); - sqlite3PagerSetSafetyLevel(pBt->pPager, level, fullSync); - sqlite3BtreeLeave(p); - return SQLITE_OK; +SQLITE_PRIVATE void *sqlite3PagerGetExtra(DbPage *pPg){ + return pPg->pExtra; } -#endif /* -** Return TRUE if the given btree is set to safety level 1. In other -** words, return TRUE if no sync() occurs on the disk files. +** Get/set the locking-mode for this pager. Parameter eMode must be one +** of PAGER_LOCKINGMODE_QUERY, PAGER_LOCKINGMODE_NORMAL or +** PAGER_LOCKINGMODE_EXCLUSIVE. If the parameter is not _QUERY, then +** the locking-mode is set to the value specified. +** +** The returned value is either PAGER_LOCKINGMODE_NORMAL or +** PAGER_LOCKINGMODE_EXCLUSIVE, indicating the current (possibly updated) +** locking-mode. */ -SQLITE_PRIVATE int sqlite3BtreeSyncDisabled(Btree *p){ - BtShared *pBt = p->pBt; - int rc; - assert( sqlite3_mutex_held(p->db->mutex) ); - sqlite3BtreeEnter(p); - assert( pBt && pBt->pPager ); - rc = sqlite3PagerNosync(pBt->pPager); - sqlite3BtreeLeave(p); - return rc; +SQLITE_PRIVATE int sqlite3PagerLockingMode(Pager *pPager, int eMode){ + assert( eMode==PAGER_LOCKINGMODE_QUERY + || eMode==PAGER_LOCKINGMODE_NORMAL + || eMode==PAGER_LOCKINGMODE_EXCLUSIVE ); + assert( PAGER_LOCKINGMODE_QUERY<0 ); + assert( PAGER_LOCKINGMODE_NORMAL>=0 && PAGER_LOCKINGMODE_EXCLUSIVE>=0 ); + assert( pPager->exclusiveMode || 0==sqlite3WalHeapMemory(pPager->pWal) ); + if( eMode>=0 && !pPager->tempFile && !sqlite3WalHeapMemory(pPager->pWal) ){ + pPager->exclusiveMode = (u8)eMode; + } + return (int)pPager->exclusiveMode; } -#if !defined(SQLITE_OMIT_PAGER_PRAGMAS) || !defined(SQLITE_OMIT_VACUUM) /* -** Change the default pages size and the number of reserved bytes per page. -** Or, if the page size has already been fixed, return SQLITE_READONLY -** without changing anything. +** Set the journal-mode for this pager. Parameter eMode must be one of: ** -** The page size must be a power of 2 between 512 and 65536. If the page -** size supplied does not meet this constraint then the page size is not -** changed. +** PAGER_JOURNALMODE_DELETE +** PAGER_JOURNALMODE_TRUNCATE +** PAGER_JOURNALMODE_PERSIST +** PAGER_JOURNALMODE_OFF +** PAGER_JOURNALMODE_MEMORY +** PAGER_JOURNALMODE_WAL ** -** Page sizes are constrained to be a power of two so that the region -** of the database file used for locking (beginning at PENDING_BYTE, -** the first byte past the 1GB boundary, 0x40000000) needs to occur -** at the beginning of a page. +** The journalmode is set to the value specified if the change is allowed. +** The change may be disallowed for the following reasons: ** -** If parameter nReserve is less than zero, then the number of reserved -** bytes per page is left unchanged. +** * An in-memory database can only have its journal_mode set to _OFF +** or _MEMORY. ** -** If the iFix!=0 then the pageSizeFixed flag is set so that the page size -** and autovacuum mode can no longer be changed. +** * Temporary databases cannot have _WAL journalmode. +** +** The returned indicate the current (possibly updated) journal-mode. */ -SQLITE_PRIVATE int sqlite3BtreeSetPageSize(Btree *p, int pageSize, int nReserve, int iFix){ - int rc = SQLITE_OK; - BtShared *pBt = p->pBt; - assert( nReserve>=-1 && nReserve<=255 ); - sqlite3BtreeEnter(p); - if( pBt->pageSizeFixed ){ - sqlite3BtreeLeave(p); - return SQLITE_READONLY; - } - if( nReserve<0 ){ - nReserve = pBt->pageSize - pBt->usableSize; +SQLITE_PRIVATE int sqlite3PagerSetJournalMode(Pager *pPager, int eMode){ + u8 eOld = pPager->journalMode; /* Prior journalmode */ + +#ifdef SQLITE_DEBUG + /* The print_pager_state() routine is intended to be used by the debugger + ** only. We invoke it once here to suppress a compiler warning. */ + print_pager_state(pPager); +#endif + + + /* The eMode parameter is always valid */ + assert( eMode==PAGER_JOURNALMODE_DELETE + || eMode==PAGER_JOURNALMODE_TRUNCATE + || eMode==PAGER_JOURNALMODE_PERSIST + || eMode==PAGER_JOURNALMODE_OFF + || eMode==PAGER_JOURNALMODE_WAL + || eMode==PAGER_JOURNALMODE_MEMORY ); + + /* This routine is only called from the OP_JournalMode opcode, and + ** the logic there will never allow a temporary file to be changed + ** to WAL mode. + */ + assert( pPager->tempFile==0 || eMode!=PAGER_JOURNALMODE_WAL ); + + /* Do allow the journalmode of an in-memory database to be set to + ** anything other than MEMORY or OFF + */ + if( MEMDB ){ + assert( eOld==PAGER_JOURNALMODE_MEMORY || eOld==PAGER_JOURNALMODE_OFF ); + if( eMode!=PAGER_JOURNALMODE_MEMORY && eMode!=PAGER_JOURNALMODE_OFF ){ + eMode = eOld; + } } - assert( nReserve>=0 && nReserve<=255 ); - if( pageSize>=512 && pageSize<=SQLITE_MAX_PAGE_SIZE && - ((pageSize-1)&pageSize)==0 ){ - assert( (pageSize & 7)==0 ); - assert( !pBt->pPage1 && !pBt->pCursor ); - pBt->pageSize = (u16)pageSize; - freeTempSpace(pBt); + + if( eMode!=eOld ){ + + /* Change the journal mode. */ + assert( pPager->eState!=PAGER_ERROR ); + pPager->journalMode = (u8)eMode; + + /* When transistioning from TRUNCATE or PERSIST to any other journal + ** mode except WAL, unless the pager is in locking_mode=exclusive mode, + ** delete the journal file. + */ + assert( (PAGER_JOURNALMODE_TRUNCATE & 5)==1 ); + assert( (PAGER_JOURNALMODE_PERSIST & 5)==1 ); + assert( (PAGER_JOURNALMODE_DELETE & 5)==0 ); + assert( (PAGER_JOURNALMODE_MEMORY & 5)==4 ); + assert( (PAGER_JOURNALMODE_OFF & 5)==0 ); + assert( (PAGER_JOURNALMODE_WAL & 5)==5 ); + + assert( isOpen(pPager->fd) || pPager->exclusiveMode ); + if( !pPager->exclusiveMode && (eOld & 5)==1 && (eMode & 1)==0 ){ + + /* In this case we would like to delete the journal file. If it is + ** not possible, then that is not a problem. Deleting the journal file + ** here is an optimization only. + ** + ** Before deleting the journal file, obtain a RESERVED lock on the + ** database file. This ensures that the journal file is not deleted + ** while it is in use by some other client. + */ + sqlite3OsClose(pPager->jfd); + if( pPager->eLock>=RESERVED_LOCK ){ + sqlite3OsDelete(pPager->pVfs, pPager->zJournal, 0); + }else{ + int rc = SQLITE_OK; + int state = pPager->eState; + assert( state==PAGER_OPEN || state==PAGER_READER ); + if( state==PAGER_OPEN ){ + rc = sqlite3PagerSharedLock(pPager); + } + if( pPager->eState==PAGER_READER ){ + assert( rc==SQLITE_OK ); + rc = pagerLockDb(pPager, RESERVED_LOCK); + } + if( rc==SQLITE_OK ){ + sqlite3OsDelete(pPager->pVfs, pPager->zJournal, 0); + } + if( rc==SQLITE_OK && state==PAGER_READER ){ + pagerUnlockDb(pPager, SHARED_LOCK); + }else if( state==PAGER_OPEN ){ + pager_unlock(pPager); + } + assert( state==pPager->eState ); + } + } } - rc = sqlite3PagerSetPagesize(pBt->pPager, &pBt->pageSize, nReserve); - pBt->usableSize = pBt->pageSize - (u16)nReserve; - if( iFix ) pBt->pageSizeFixed = 1; - sqlite3BtreeLeave(p); - return rc; + + /* Return the new journal mode */ + return (int)pPager->journalMode; } /* -** Return the currently defined page size +** Return the current journal mode. */ -SQLITE_PRIVATE int sqlite3BtreeGetPageSize(Btree *p){ - return p->pBt->pageSize; +SQLITE_PRIVATE int sqlite3PagerGetJournalMode(Pager *pPager){ + return (int)pPager->journalMode; } /* -** Return the number of bytes of space at the end of every page that -** are intentually left unused. This is the "reserved" space that is -** sometimes used by extensions. +** Return TRUE if the pager is in a state where it is OK to change the +** journalmode. Journalmode changes can only happen when the database +** is unmodified. */ -SQLITE_PRIVATE int sqlite3BtreeGetReserve(Btree *p){ - int n; - sqlite3BtreeEnter(p); - n = p->pBt->pageSize - p->pBt->usableSize; - sqlite3BtreeLeave(p); - return n; +SQLITE_PRIVATE int sqlite3PagerOkToChangeJournalMode(Pager *pPager){ + assert( assert_pager_state(pPager) ); + if( pPager->eState>=PAGER_WRITER_CACHEMOD ) return 0; + if( NEVER(isOpen(pPager->jfd) && pPager->journalOff>0) ) return 0; + return 1; } /* -** Set the maximum page count for a database if mxPage is positive. -** No changes are made if mxPage is 0 or negative. -** Regardless of the value of mxPage, return the maximum page count. +** Get/set the size-limit used for persistent journal files. +** +** Setting the size limit to -1 means no limit is enforced. +** An attempt to set a limit smaller than -1 is a no-op. */ -SQLITE_PRIVATE int sqlite3BtreeMaxPageCount(Btree *p, int mxPage){ - int n; - sqlite3BtreeEnter(p); - n = sqlite3PagerMaxPageCount(p->pBt->pPager, mxPage); - sqlite3BtreeLeave(p); - return n; +SQLITE_PRIVATE i64 sqlite3PagerJournalSizeLimit(Pager *pPager, i64 iLimit){ + if( iLimit>=-1 ){ + pPager->journalSizeLimit = iLimit; + sqlite3WalLimit(pPager->pWal, iLimit); + } + return pPager->journalSizeLimit; } -#endif /* !defined(SQLITE_OMIT_PAGER_PRAGMAS) || !defined(SQLITE_OMIT_VACUUM) */ /* -** Change the 'auto-vacuum' property of the database. If the 'autoVacuum' -** parameter is non-zero, then auto-vacuum mode is enabled. If zero, it -** is disabled. The default value for the auto-vacuum property is -** determined by the SQLITE_DEFAULT_AUTOVACUUM macro. +** Return a pointer to the pPager->pBackup variable. The backup module +** in backup.c maintains the content of this variable. This module +** uses it opaquely as an argument to sqlite3BackupRestart() and +** sqlite3BackupUpdate() only. */ -SQLITE_PRIVATE int sqlite3BtreeSetAutoVacuum(Btree *p, int autoVacuum){ -#ifdef SQLITE_OMIT_AUTOVACUUM - return SQLITE_READONLY; -#else - BtShared *pBt = p->pBt; - int rc = SQLITE_OK; - u8 av = (u8)autoVacuum; +SQLITE_PRIVATE sqlite3_backup **sqlite3PagerBackupPtr(Pager *pPager){ + return &pPager->pBackup; +} - sqlite3BtreeEnter(p); - if( pBt->pageSizeFixed && (av ?1:0)!=pBt->autoVacuum ){ - rc = SQLITE_READONLY; - }else{ - pBt->autoVacuum = av ?1:0; - pBt->incrVacuum = av==2 ?1:0; - } - sqlite3BtreeLeave(p); - return rc; -#endif +#ifndef SQLITE_OMIT_VACUUM +/* +** Unless this is an in-memory or temporary database, clear the pager cache. +*/ +SQLITE_PRIVATE void sqlite3PagerClearCache(Pager *pPager){ + if( !MEMDB && pPager->tempFile==0 ) pager_reset(pPager); } +#endif +#ifndef SQLITE_OMIT_WAL /* -** Return the value of the 'auto-vacuum' property. If auto-vacuum is -** enabled 1 is returned. Otherwise 0. +** This function is called when the user invokes "PRAGMA wal_checkpoint", +** "PRAGMA wal_blocking_checkpoint" or calls the sqlite3_wal_checkpoint() +** or wal_blocking_checkpoint() API functions. +** +** Parameter eMode is one of SQLITE_CHECKPOINT_PASSIVE, FULL or RESTART. */ -SQLITE_PRIVATE int sqlite3BtreeGetAutoVacuum(Btree *p){ -#ifdef SQLITE_OMIT_AUTOVACUUM - return BTREE_AUTOVACUUM_NONE; -#else - int rc; - sqlite3BtreeEnter(p); - rc = ( - (!p->pBt->autoVacuum)?BTREE_AUTOVACUUM_NONE: - (!p->pBt->incrVacuum)?BTREE_AUTOVACUUM_FULL: - BTREE_AUTOVACUUM_INCR - ); - sqlite3BtreeLeave(p); +SQLITE_PRIVATE int sqlite3PagerCheckpoint(Pager *pPager, int eMode, int *pnLog, int *pnCkpt){ + int rc = SQLITE_OK; + if( pPager->pWal ){ + rc = sqlite3WalCheckpoint(pPager->pWal, eMode, + pPager->xBusyHandler, pPager->pBusyHandlerArg, + pPager->ckptSyncFlags, pPager->pageSize, (u8 *)pPager->pTmpSpace, + pnLog, pnCkpt + ); + } return rc; -#endif } +SQLITE_PRIVATE int sqlite3PagerWalCallback(Pager *pPager){ + return sqlite3WalCallback(pPager->pWal); +} /* -** Get a reference to pPage1 of the database file. This will -** also acquire a readlock on that file. -** -** SQLITE_OK is returned on success. If the file is not a -** well-formed database file, then SQLITE_CORRUPT is returned. -** SQLITE_BUSY is returned if the database is locked. SQLITE_NOMEM -** is returned if we run out of memory. +** Return true if the underlying VFS for the given pager supports the +** primitives necessary for write-ahead logging. */ -static int lockBtree(BtShared *pBt){ - int rc; - MemPage *pPage1; - int nPage; +SQLITE_PRIVATE int sqlite3PagerWalSupported(Pager *pPager){ + const sqlite3_io_methods *pMethods = pPager->fd->pMethods; + return pPager->exclusiveMode || (pMethods->iVersion>=2 && pMethods->xShmMap); +} - assert( sqlite3_mutex_held(pBt->mutex) ); - assert( pBt->pPage1==0 ); - rc = sqlite3BtreeGetPage(pBt, 1, &pPage1, 0); - if( rc!=SQLITE_OK ) return rc; +/* +** Attempt to take an exclusive lock on the database file. If a PENDING lock +** is obtained instead, immediately release it. +*/ +static int pagerExclusiveLock(Pager *pPager){ + int rc; /* Return code */ - /* Do some checking to help insure the file we opened really is - ** a valid database file. - */ - rc = sqlite3PagerPagecount(pBt->pPager, &nPage); + assert( pPager->eLock==SHARED_LOCK || pPager->eLock==EXCLUSIVE_LOCK ); + rc = pagerLockDb(pPager, EXCLUSIVE_LOCK); if( rc!=SQLITE_OK ){ - goto page1_init_failed; - }else if( nPage>0 ){ - int pageSize; - int usableSize; - u8 *page1 = pPage1->aData; - rc = SQLITE_NOTADB; - if( memcmp(page1, zMagicHeader, 16)!=0 ){ - goto page1_init_failed; - } - if( page1[18]>1 ){ - pBt->readOnly = 1; - } - if( page1[19]>1 ){ - goto page1_init_failed; - } + /* If the attempt to grab the exclusive lock failed, release the + ** pending lock that may have been obtained instead. */ + pagerUnlockDb(pPager, SHARED_LOCK); + } - /* The maximum embedded fraction must be exactly 25%. And the minimum - ** embedded fraction must be 12.5% for both leaf-data and non-leaf-data. - ** The original design allowed these amounts to vary, but as of - ** version 3.6.0, we require them to be fixed. - */ - if( memcmp(&page1[21], "\100\040\040",3)!=0 ){ - goto page1_init_failed; - } - pageSize = get2byte(&page1[16]); - if( ((pageSize-1)&pageSize)!=0 || pageSize<512 || - (SQLITE_MAX_PAGE_SIZE<32768 && pageSize>SQLITE_MAX_PAGE_SIZE) - ){ - goto page1_init_failed; - } - assert( (pageSize & 7)==0 ); - usableSize = pageSize - page1[20]; - if( pageSize!=pBt->pageSize ){ - /* After reading the first page of the database assuming a page size - ** of BtShared.pageSize, we have discovered that the page-size is - ** actually pageSize. Unlock the database, leave pBt->pPage1 at - ** zero and return SQLITE_OK. The caller will call this function - ** again with the correct page-size. - */ - releasePage(pPage1); - pBt->usableSize = (u16)usableSize; - pBt->pageSize = (u16)pageSize; - freeTempSpace(pBt); - rc = sqlite3PagerSetPagesize(pBt->pPager, &pBt->pageSize, - pageSize-usableSize); - if( rc ) goto page1_init_failed; - return SQLITE_OK; - } - if( usableSize<480 ){ - goto page1_init_failed; - } - pBt->pageSize = (u16)pageSize; - pBt->usableSize = (u16)usableSize; -#ifndef SQLITE_OMIT_AUTOVACUUM - pBt->autoVacuum = (get4byte(&page1[36 + 4*4])?1:0); - pBt->incrVacuum = (get4byte(&page1[36 + 7*4])?1:0); -#endif + return rc; +} + +/* +** Call sqlite3WalOpen() to open the WAL handle. If the pager is in +** exclusive-locking mode when this function is called, take an EXCLUSIVE +** lock on the database file and use heap-memory to store the wal-index +** in. Otherwise, use the normal shared-memory. +*/ +static int pagerOpenWal(Pager *pPager){ + int rc = SQLITE_OK; + + assert( pPager->pWal==0 && pPager->tempFile==0 ); + assert( pPager->eLock==SHARED_LOCK || pPager->eLock==EXCLUSIVE_LOCK ); + + /* If the pager is already in exclusive-mode, the WAL module will use + ** heap-memory for the wal-index instead of the VFS shared-memory + ** implementation. Take the exclusive lock now, before opening the WAL + ** file, to make sure this is safe. + */ + if( pPager->exclusiveMode ){ + rc = pagerExclusiveLock(pPager); } - /* maxLocal is the maximum amount of payload to store locally for - ** a cell. Make sure it is small enough so that at least minFanout - ** cells can will fit on one page. We assume a 10-byte page header. - ** Besides the payload, the cell must store: - ** 2-byte pointer to the cell - ** 4-byte child pointer - ** 9-byte nKey value - ** 4-byte nData value - ** 4-byte overflow page pointer - ** So a cell consists of a 2-byte poiner, a header which is as much as - ** 17 bytes long, 0 to N bytes of payload, and an optional 4 byte overflow - ** page pointer. + /* Open the connection to the log file. If this operation fails, + ** (e.g. due to malloc() failure), return an error code. */ - pBt->maxLocal = (pBt->usableSize-12)*64/255 - 23; - pBt->minLocal = (pBt->usableSize-12)*32/255 - 23; - pBt->maxLeaf = pBt->usableSize - 35; - pBt->minLeaf = (pBt->usableSize-12)*32/255 - 23; - assert( pBt->maxLeaf + 23 <= MX_CELL_SIZE(pBt) ); - pBt->pPage1 = pPage1; - return SQLITE_OK; + if( rc==SQLITE_OK ){ + rc = sqlite3WalOpen(pPager->pVfs, + pPager->fd, pPager->zWal, pPager->exclusiveMode, + pPager->journalSizeLimit, &pPager->pWal + ); + } -page1_init_failed: - releasePage(pPage1); - pBt->pPage1 = 0; return rc; } + /* -** This routine works like lockBtree() except that it also invokes the -** busy callback if there is lock contention. +** The caller must be holding a SHARED lock on the database file to call +** this function. +** +** If the pager passed as the first argument is open on a real database +** file (not a temp file or an in-memory database), and the WAL file +** is not already open, make an attempt to open it now. If successful, +** return SQLITE_OK. If an error occurs or the VFS used by the pager does +** not support the xShmXXX() methods, return an error code. *pbOpen is +** not modified in either case. +** +** If the pager is open on a temp-file (or in-memory database), or if +** the WAL file is already open, set *pbOpen to 1 and return SQLITE_OK +** without doing anything. */ -static int lockBtreeWithRetry(Btree *pRef){ - int rc = SQLITE_OK; +SQLITE_PRIVATE int sqlite3PagerOpenWal( + Pager *pPager, /* Pager object */ + int *pbOpen /* OUT: Set to true if call is a no-op */ +){ + int rc = SQLITE_OK; /* Return code */ + + assert( assert_pager_state(pPager) ); + assert( pPager->eState==PAGER_OPEN || pbOpen ); + assert( pPager->eState==PAGER_READER || !pbOpen ); + assert( pbOpen==0 || *pbOpen==0 ); + assert( pbOpen!=0 || (!pPager->tempFile && !pPager->pWal) ); + + if( !pPager->tempFile && !pPager->pWal ){ + if( !sqlite3PagerWalSupported(pPager) ) return SQLITE_CANTOPEN; + + /* Close any rollback journal previously open */ + sqlite3OsClose(pPager->jfd); - assert( sqlite3BtreeHoldsMutex(pRef) ); - if( pRef->inTrans==TRANS_NONE ){ - u8 inTransaction = pRef->pBt->inTransaction; - btreeIntegrity(pRef); - rc = sqlite3BtreeBeginTrans(pRef, 0); - pRef->pBt->inTransaction = inTransaction; - pRef->inTrans = TRANS_NONE; + rc = pagerOpenWal(pPager); if( rc==SQLITE_OK ){ - pRef->pBt->nTransaction--; + pPager->journalMode = PAGER_JOURNALMODE_WAL; + pPager->eState = PAGER_OPEN; } - btreeIntegrity(pRef); + }else{ + *pbOpen = 1; } + return rc; } - /* -** If there are no outstanding cursors and we are not in the middle -** of a transaction but there is a read lock on the database, then -** this routine unrefs the first page of the database file which -** has the effect of releasing the read lock. +** This function is called to close the connection to the log file prior +** to switching from WAL to rollback mode. ** -** If there are any outstanding cursors, this routine is a no-op. -** -** If there is a transaction in progress, this routine is a no-op. +** Before closing the log file, this function attempts to take an +** EXCLUSIVE lock on the database file. If this cannot be obtained, an +** error (SQLITE_BUSY) is returned and the log connection is not closed. +** If successful, the EXCLUSIVE lock is not released before returning. */ -static void unlockBtreeIfUnused(BtShared *pBt){ - assert( sqlite3_mutex_held(pBt->mutex) ); - if( pBt->inTransaction==TRANS_NONE && pBt->pCursor==0 && pBt->pPage1!=0 ){ - assert( pBt->pPage1->aData ); - assert( sqlite3PagerRefcount(pBt->pPager)==1 ); - assert( pBt->pPage1->aData ); - releasePage(pBt->pPage1); - pBt->pPage1 = 0; +SQLITE_PRIVATE int sqlite3PagerCloseWal(Pager *pPager){ + int rc = SQLITE_OK; + + assert( pPager->journalMode==PAGER_JOURNALMODE_WAL ); + + /* If the log file is not already open, but does exist in the file-system, + ** it may need to be checkpointed before the connection can switch to + ** rollback mode. Open it now so this can happen. + */ + if( !pPager->pWal ){ + int logexists = 0; + rc = pagerLockDb(pPager, SHARED_LOCK); + if( rc==SQLITE_OK ){ + rc = sqlite3OsAccess( + pPager->pVfs, pPager->zWal, SQLITE_ACCESS_EXISTS, &logexists + ); + } + if( rc==SQLITE_OK && logexists ){ + rc = pagerOpenWal(pPager); + } + } + + /* Checkpoint and close the log. Because an EXCLUSIVE lock is held on + ** the database file, the log and log-summary files will be deleted. + */ + if( rc==SQLITE_OK && pPager->pWal ){ + rc = pagerExclusiveLock(pPager); + if( rc==SQLITE_OK ){ + rc = sqlite3WalClose(pPager->pWal, pPager->ckptSyncFlags, + pPager->pageSize, (u8*)pPager->pTmpSpace); + pPager->pWal = 0; + } } + return rc; } +#ifdef SQLITE_ENABLE_ZIPVFS /* -** Create a new database by initializing the first page of the -** file. +** A read-lock must be held on the pager when this function is called. If +** the pager is in WAL mode and the WAL file currently contains one or more +** frames, return the size in bytes of the page images stored within the +** WAL frames. Otherwise, if this is not a WAL database or the WAL file +** is empty, return 0. */ -static int newDatabase(BtShared *pBt){ - MemPage *pP1; - unsigned char *data; - int rc; - int nPage; - - assert( sqlite3_mutex_held(pBt->mutex) ); - rc = sqlite3PagerPagecount(pBt->pPager, &nPage); - if( rc!=SQLITE_OK || nPage>0 ){ - return rc; - } - pP1 = pBt->pPage1; - assert( pP1!=0 ); - data = pP1->aData; - rc = sqlite3PagerWrite(pP1->pDbPage); - if( rc ) return rc; - memcpy(data, zMagicHeader, sizeof(zMagicHeader)); - assert( sizeof(zMagicHeader)==16 ); - put2byte(&data[16], pBt->pageSize); - data[18] = 1; - data[19] = 1; - assert( pBt->usableSize<=pBt->pageSize && pBt->usableSize+255>=pBt->pageSize); - data[20] = (u8)(pBt->pageSize - pBt->usableSize); - data[21] = 64; - data[22] = 32; - data[23] = 32; - memset(&data[24], 0, 100-24); - zeroPage(pP1, PTF_INTKEY|PTF_LEAF|PTF_LEAFDATA ); - pBt->pageSizeFixed = 1; -#ifndef SQLITE_OMIT_AUTOVACUUM - assert( pBt->autoVacuum==1 || pBt->autoVacuum==0 ); - assert( pBt->incrVacuum==1 || pBt->incrVacuum==0 ); - put4byte(&data[36 + 4*4], pBt->autoVacuum); - put4byte(&data[36 + 7*4], pBt->incrVacuum); +SQLITE_PRIVATE int sqlite3PagerWalFramesize(Pager *pPager){ + assert( pPager->eState==PAGER_READER ); + return sqlite3WalFramesize(pPager->pWal); +} #endif - return SQLITE_OK; + +#ifdef SQLITE_HAS_CODEC +/* +** This function is called by the wal module when writing page content +** into the log file. +** +** This function returns a pointer to a buffer containing the encrypted +** page content. If a malloc fails, this function may return NULL. +*/ +SQLITE_PRIVATE void *sqlite3PagerCodec(PgHdr *pPg){ + void *aData = 0; + CODEC2(pPg->pPager, pPg->pData, pPg->pgno, 6, return 0, aData); + return aData; } +#endif /* SQLITE_HAS_CODEC */ + +#endif /* !SQLITE_OMIT_WAL */ + +#endif /* SQLITE_OMIT_DISKIO */ +/************** End of pager.c ***********************************************/ +/************** Begin file wal.c *********************************************/ /* -** Attempt to start a new transaction. A write-transaction -** is started if the second argument is nonzero, otherwise a read- -** transaction. If the second argument is 2 or more and exclusive -** transaction is started, meaning that no other process is allowed -** to access the database. A preexisting transaction may not be -** upgraded to exclusive by calling this routine a second time - the -** exclusivity flag only works for a new transaction. +** 2010 February 1 ** -** A write-transaction must be started before attempting any -** changes to the database. None of the following routines -** will work unless a transaction is started first: +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: ** -** sqlite3BtreeCreateTable() -** sqlite3BtreeCreateIndex() -** sqlite3BtreeClearTable() -** sqlite3BtreeDropTable() -** sqlite3BtreeInsert() -** sqlite3BtreeDelete() -** sqlite3BtreeUpdateMeta() +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. ** -** If an initial attempt to acquire the lock fails because of lock contention -** and the database was previously unlocked, then invoke the busy handler -** if there is one. But if there was previously a read-lock, do not -** invoke the busy handler - just return SQLITE_BUSY. SQLITE_BUSY is -** returned when there is already a read-lock in order to avoid a deadlock. +************************************************************************* ** -** Suppose there are two processes A and B. A has a read lock and B has -** a reserved lock. B tries to promote to exclusive but is blocked because -** of A's read lock. A tries to promote to reserved but is blocked by B. -** One or the other of the two processes must give way or there can be -** no progress. By returning SQLITE_BUSY and not invoking the busy callback -** when A already has a read lock, we encourage A to give up and let B -** proceed. +** This file contains the implementation of a write-ahead log (WAL) used in +** "journal_mode=WAL" mode. +** +** WRITE-AHEAD LOG (WAL) FILE FORMAT +** +** A WAL file consists of a header followed by zero or more "frames". +** Each frame records the revised content of a single page from the +** database file. All changes to the database are recorded by writing +** frames into the WAL. Transactions commit when a frame is written that +** contains a commit marker. A single WAL can and usually does record +** multiple transactions. Periodically, the content of the WAL is +** transferred back into the database file in an operation called a +** "checkpoint". +** +** A single WAL file can be used multiple times. In other words, the +** WAL can fill up with frames and then be checkpointed and then new +** frames can overwrite the old ones. A WAL always grows from beginning +** toward the end. Checksums and counters attached to each frame are +** used to determine which frames within the WAL are valid and which +** are leftovers from prior checkpoints. +** +** The WAL header is 32 bytes in size and consists of the following eight +** big-endian 32-bit unsigned integer values: +** +** 0: Magic number. 0x377f0682 or 0x377f0683 +** 4: File format version. Currently 3007000 +** 8: Database page size. Example: 1024 +** 12: Checkpoint sequence number +** 16: Salt-1, random integer incremented with each checkpoint +** 20: Salt-2, a different random integer changing with each ckpt +** 24: Checksum-1 (first part of checksum for first 24 bytes of header). +** 28: Checksum-2 (second part of checksum for first 24 bytes of header). +** +** Immediately following the wal-header are zero or more frames. Each +** frame consists of a 24-byte frame-header followed by a bytes +** of page data. The frame-header is six big-endian 32-bit unsigned +** integer values, as follows: +** +** 0: Page number. +** 4: For commit records, the size of the database image in pages +** after the commit. For all other records, zero. +** 8: Salt-1 (copied from the header) +** 12: Salt-2 (copied from the header) +** 16: Checksum-1. +** 20: Checksum-2. +** +** A frame is considered valid if and only if the following conditions are +** true: +** +** (1) The salt-1 and salt-2 values in the frame-header match +** salt values in the wal-header +** +** (2) The checksum values in the final 8 bytes of the frame-header +** exactly match the checksum computed consecutively on the +** WAL header and the first 8 bytes and the content of all frames +** up to and including the current frame. +** +** The checksum is computed using 32-bit big-endian integers if the +** magic number in the first 4 bytes of the WAL is 0x377f0683 and it +** is computed using little-endian if the magic number is 0x377f0682. +** The checksum values are always stored in the frame header in a +** big-endian format regardless of which byte order is used to compute +** the checksum. The checksum is computed by interpreting the input as +** an even number of unsigned 32-bit integers: x[0] through x[N]. The +** algorithm used for the checksum is as follows: +** +** for i from 0 to n-1 step 2: +** s0 += x[i] + s1; +** s1 += x[i+1] + s0; +** endfor +** +** Note that s0 and s1 are both weighted checksums using fibonacci weights +** in reverse order (the largest fibonacci weight occurs on the first element +** of the sequence being summed.) The s1 value spans all 32-bit +** terms of the sequence whereas s0 omits the final term. +** +** On a checkpoint, the WAL is first VFS.xSync-ed, then valid content of the +** WAL is transferred into the database, then the database is VFS.xSync-ed. +** The VFS.xSync operations serve as write barriers - all writes launched +** before the xSync must complete before any write that launches after the +** xSync begins. +** +** After each checkpoint, the salt-1 value is incremented and the salt-2 +** value is randomized. This prevents old and new frames in the WAL from +** being considered valid at the same time and being checkpointing together +** following a crash. +** +** READER ALGORITHM +** +** To read a page from the database (call it page number P), a reader +** first checks the WAL to see if it contains page P. If so, then the +** last valid instance of page P that is a followed by a commit frame +** or is a commit frame itself becomes the value read. If the WAL +** contains no copies of page P that are valid and which are a commit +** frame or are followed by a commit frame, then page P is read from +** the database file. +** +** To start a read transaction, the reader records the index of the last +** valid frame in the WAL. The reader uses this recorded "mxFrame" value +** for all subsequent read operations. New transactions can be appended +** to the WAL, but as long as the reader uses its original mxFrame value +** and ignores the newly appended content, it will see a consistent snapshot +** of the database from a single point in time. This technique allows +** multiple concurrent readers to view different versions of the database +** content simultaneously. +** +** The reader algorithm in the previous paragraphs works correctly, but +** because frames for page P can appear anywhere within the WAL, the +** reader has to scan the entire WAL looking for page P frames. If the +** WAL is large (multiple megabytes is typical) that scan can be slow, +** and read performance suffers. To overcome this problem, a separate +** data structure called the wal-index is maintained to expedite the +** search for frames of a particular page. +** +** WAL-INDEX FORMAT +** +** Conceptually, the wal-index is shared memory, though VFS implementations +** might choose to implement the wal-index using a mmapped file. Because +** the wal-index is shared memory, SQLite does not support journal_mode=WAL +** on a network filesystem. All users of the database must be able to +** share memory. +** +** The wal-index is transient. After a crash, the wal-index can (and should +** be) reconstructed from the original WAL file. In fact, the VFS is required +** to either truncate or zero the header of the wal-index when the last +** connection to it closes. Because the wal-index is transient, it can +** use an architecture-specific format; it does not have to be cross-platform. +** Hence, unlike the database and WAL file formats which store all values +** as big endian, the wal-index can store multi-byte values in the native +** byte order of the host computer. +** +** The purpose of the wal-index is to answer this question quickly: Given +** a page number P, return the index of the last frame for page P in the WAL, +** or return NULL if there are no frames for page P in the WAL. +** +** The wal-index consists of a header region, followed by an one or +** more index blocks. +** +** The wal-index header contains the total number of frames within the WAL +** in the the mxFrame field. +** +** Each index block except for the first contains information on +** HASHTABLE_NPAGE frames. The first index block contains information on +** HASHTABLE_NPAGE_ONE frames. The values of HASHTABLE_NPAGE_ONE and +** HASHTABLE_NPAGE are selected so that together the wal-index header and +** first index block are the same size as all other index blocks in the +** wal-index. +** +** Each index block contains two sections, a page-mapping that contains the +** database page number associated with each wal frame, and a hash-table +** that allows readers to query an index block for a specific page number. +** The page-mapping is an array of HASHTABLE_NPAGE (or HASHTABLE_NPAGE_ONE +** for the first index block) 32-bit page numbers. The first entry in the +** first index-block contains the database page number corresponding to the +** first frame in the WAL file. The first entry in the second index block +** in the WAL file corresponds to the (HASHTABLE_NPAGE_ONE+1)th frame in +** the log, and so on. +** +** The last index block in a wal-index usually contains less than the full +** complement of HASHTABLE_NPAGE (or HASHTABLE_NPAGE_ONE) page-numbers, +** depending on the contents of the WAL file. This does not change the +** allocated size of the page-mapping array - the page-mapping array merely +** contains unused entries. +** +** Even without using the hash table, the last frame for page P +** can be found by scanning the page-mapping sections of each index block +** starting with the last index block and moving toward the first, and +** within each index block, starting at the end and moving toward the +** beginning. The first entry that equals P corresponds to the frame +** holding the content for that page. +** +** The hash table consists of HASHTABLE_NSLOT 16-bit unsigned integers. +** HASHTABLE_NSLOT = 2*HASHTABLE_NPAGE, and there is one entry in the +** hash table for each page number in the mapping section, so the hash +** table is never more than half full. The expected number of collisions +** prior to finding a match is 1. Each entry of the hash table is an +** 1-based index of an entry in the mapping section of the same +** index block. Let K be the 1-based index of the largest entry in +** the mapping section. (For index blocks other than the last, K will +** always be exactly HASHTABLE_NPAGE (4096) and for the last index block +** K will be (mxFrame%HASHTABLE_NPAGE).) Unused slots of the hash table +** contain a value of 0. +** +** To look for page P in the hash table, first compute a hash iKey on +** P as follows: +** +** iKey = (P * 383) % HASHTABLE_NSLOT +** +** Then start scanning entries of the hash table, starting with iKey +** (wrapping around to the beginning when the end of the hash table is +** reached) until an unused hash slot is found. Let the first unused slot +** be at index iUnused. (iUnused might be less than iKey if there was +** wrap-around.) Because the hash table is never more than half full, +** the search is guaranteed to eventually hit an unused entry. Let +** iMax be the value between iKey and iUnused, closest to iUnused, +** where aHash[iMax]==P. If there is no iMax entry (if there exists +** no hash slot such that aHash[i]==p) then page P is not in the +** current index block. Otherwise the iMax-th mapping entry of the +** current index block corresponds to the last entry that references +** page P. +** +** A hash search begins with the last index block and moves toward the +** first index block, looking for entries corresponding to page P. On +** average, only two or three slots in each index block need to be +** examined in order to either find the last entry for page P, or to +** establish that no such entry exists in the block. Each index block +** holds over 4000 entries. So two or three index blocks are sufficient +** to cover a typical 10 megabyte WAL file, assuming 1K pages. 8 or 10 +** comparisons (on average) suffice to either locate a frame in the +** WAL or to establish that the frame does not exist in the WAL. This +** is much faster than scanning the entire 10MB WAL. +** +** Note that entries are added in order of increasing K. Hence, one +** reader might be using some value K0 and a second reader that started +** at a later time (after additional transactions were added to the WAL +** and to the wal-index) might be using a different value K1, where K1>K0. +** Both readers can use the same hash table and mapping section to get +** the correct result. There may be entries in the hash table with +** K>K0 but to the first reader, those entries will appear to be unused +** slots in the hash table and so the first reader will get an answer as +** if no values greater than K0 had ever been inserted into the hash table +** in the first place - which is what reader one wants. Meanwhile, the +** second reader using K1 will see additional values that were inserted +** later, which is exactly what reader two wants. +** +** When a rollback occurs, the value of K is decreased. Hash table entries +** that correspond to frames greater than the new K value are removed +** from the hash table at this point. +*/ +#ifndef SQLITE_OMIT_WAL + + +/* +** Trace output macros */ -SQLITE_PRIVATE int sqlite3BtreeBeginTrans(Btree *p, int wrflag){ - sqlite3 *pBlock = 0; - BtShared *pBt = p->pBt; - int rc = SQLITE_OK; +#if defined(SQLITE_TEST) && defined(SQLITE_DEBUG) +SQLITE_PRIVATE int sqlite3WalTrace = 0; +# define WALTRACE(X) if(sqlite3WalTrace) sqlite3DebugPrintf X +#else +# define WALTRACE(X) +#endif - sqlite3BtreeEnter(p); - btreeIntegrity(p); +/* +** The maximum (and only) versions of the wal and wal-index formats +** that may be interpreted by this version of SQLite. +** +** If a client begins recovering a WAL file and finds that (a) the checksum +** values in the wal-header are correct and (b) the version field is not +** WAL_MAX_VERSION, recovery fails and SQLite returns SQLITE_CANTOPEN. +** +** Similarly, if a client successfully reads a wal-index header (i.e. the +** checksum test is successful) and finds that the version field is not +** WALINDEX_MAX_VERSION, then no read-transaction is opened and SQLite +** returns SQLITE_CANTOPEN. +*/ +#define WAL_MAX_VERSION 3007000 +#define WALINDEX_MAX_VERSION 3007000 - /* If the btree is already in a write-transaction, or it - ** is already in a read-transaction and a read-transaction - ** is requested, this is a no-op. - */ - if( p->inTrans==TRANS_WRITE || (p->inTrans==TRANS_READ && !wrflag) ){ - goto trans_begun; - } +/* +** Indices of various locking bytes. WAL_NREADER is the number +** of available reader locks and should be at least 3. +*/ +#define WAL_WRITE_LOCK 0 +#define WAL_ALL_BUT_WRITE 1 +#define WAL_CKPT_LOCK 1 +#define WAL_RECOVER_LOCK 2 +#define WAL_READ_LOCK(I) (3+(I)) +#define WAL_NREADER (SQLITE_SHM_NLOCK-3) - /* Write transactions are not possible on a read-only database */ - if( pBt->readOnly && wrflag ){ - rc = SQLITE_READONLY; - goto trans_begun; - } -#ifndef SQLITE_OMIT_SHARED_CACHE - /* If another database handle has already opened a write transaction - ** on this shared-btree structure and a second write transaction is - ** requested, return SQLITE_LOCKED. - */ - if( (wrflag && pBt->inTransaction==TRANS_WRITE) || pBt->isPending ){ - pBlock = pBt->pWriter->db; - }else if( wrflag>1 ){ - BtLock *pIter; - for(pIter=pBt->pLock; pIter; pIter=pIter->pNext){ - if( pIter->pBtree!=p ){ - pBlock = pIter->pBtree->db; - break; - } - } - } - if( pBlock ){ - sqlite3ConnectionBlocked(p->db, pBlock); - rc = SQLITE_LOCKED_SHAREDCACHE; - goto trans_begun; - } -#endif +/* Object declarations */ +typedef struct WalIndexHdr WalIndexHdr; +typedef struct WalIterator WalIterator; +typedef struct WalCkptInfo WalCkptInfo; - do { - /* Call lockBtree() until either pBt->pPage1 is populated or - ** lockBtree() returns something other than SQLITE_OK. lockBtree() - ** may return SQLITE_OK but leave pBt->pPage1 set to 0 if after - ** reading page 1 it discovers that the page-size of the database - ** file is not pBt->pageSize. In this case lockBtree() will update - ** pBt->pageSize to the page-size of the file on disk. - */ - while( pBt->pPage1==0 && SQLITE_OK==(rc = lockBtree(pBt)) ); - if( rc==SQLITE_OK && wrflag ){ - if( pBt->readOnly ){ - rc = SQLITE_READONLY; - }else{ - rc = sqlite3PagerBegin(pBt->pPager,wrflag>1,sqlite3TempInMemory(p->db)); - if( rc==SQLITE_OK ){ - rc = newDatabase(pBt); - } - } - } - - if( rc!=SQLITE_OK ){ - unlockBtreeIfUnused(pBt); - } - }while( rc==SQLITE_BUSY && pBt->inTransaction==TRANS_NONE && - btreeInvokeBusyHandler(pBt) ); +/* +** The following object holds a copy of the wal-index header content. +** +** The actual header in the wal-index consists of two copies of this +** object. +** +** The szPage value can be any power of 2 between 512 and 32768, inclusive. +** Or it can be 1 to represent a 65536-byte page. The latter case was +** added in 3.7.1 when support for 64K pages was added. +*/ +struct WalIndexHdr { + u32 iVersion; /* Wal-index version */ + u32 unused; /* Unused (padding) field */ + u32 iChange; /* Counter incremented each transaction */ + u8 isInit; /* 1 when initialized */ + u8 bigEndCksum; /* True if checksums in WAL are big-endian */ + u16 szPage; /* Database page size in bytes. 1==64K */ + u32 mxFrame; /* Index of last valid frame in the WAL */ + u32 nPage; /* Size of database in pages */ + u32 aFrameCksum[2]; /* Checksum of last frame in log */ + u32 aSalt[2]; /* Two salt values copied from WAL header */ + u32 aCksum[2]; /* Checksum over all prior fields */ +}; - if( rc==SQLITE_OK ){ - if( p->inTrans==TRANS_NONE ){ - pBt->nTransaction++; - } - p->inTrans = (wrflag?TRANS_WRITE:TRANS_READ); - if( p->inTrans>pBt->inTransaction ){ - pBt->inTransaction = p->inTrans; - } -#ifndef SQLITE_OMIT_SHARED_CACHE - if( wrflag ){ - assert( !pBt->pWriter ); - pBt->pWriter = p; - pBt->isExclusive = (u8)(wrflag>1); - } -#endif - } +/* +** A copy of the following object occurs in the wal-index immediately +** following the second copy of the WalIndexHdr. This object stores +** information used by checkpoint. +** +** nBackfill is the number of frames in the WAL that have been written +** back into the database. (We call the act of moving content from WAL to +** database "backfilling".) The nBackfill number is never greater than +** WalIndexHdr.mxFrame. nBackfill can only be increased by threads +** holding the WAL_CKPT_LOCK lock (which includes a recovery thread). +** However, a WAL_WRITE_LOCK thread can move the value of nBackfill from +** mxFrame back to zero when the WAL is reset. +** +** There is one entry in aReadMark[] for each reader lock. If a reader +** holds read-lock K, then the value in aReadMark[K] is no greater than +** the mxFrame for that reader. The value READMARK_NOT_USED (0xffffffff) +** for any aReadMark[] means that entry is unused. aReadMark[0] is +** a special case; its value is never used and it exists as a place-holder +** to avoid having to offset aReadMark[] indexs by one. Readers holding +** WAL_READ_LOCK(0) always ignore the entire WAL and read all content +** directly from the database. +** +** The value of aReadMark[K] may only be changed by a thread that +** is holding an exclusive lock on WAL_READ_LOCK(K). Thus, the value of +** aReadMark[K] cannot changed while there is a reader is using that mark +** since the reader will be holding a shared lock on WAL_READ_LOCK(K). +** +** The checkpointer may only transfer frames from WAL to database where +** the frame numbers are less than or equal to every aReadMark[] that is +** in use (that is, every aReadMark[j] for which there is a corresponding +** WAL_READ_LOCK(j)). New readers (usually) pick the aReadMark[] with the +** largest value and will increase an unused aReadMark[] to mxFrame if there +** is not already an aReadMark[] equal to mxFrame. The exception to the +** previous sentence is when nBackfill equals mxFrame (meaning that everything +** in the WAL has been backfilled into the database) then new readers +** will choose aReadMark[0] which has value 0 and hence such reader will +** get all their all content directly from the database file and ignore +** the WAL. +** +** Writers normally append new frames to the end of the WAL. However, +** if nBackfill equals mxFrame (meaning that all WAL content has been +** written back into the database) and if no readers are using the WAL +** (in other words, if there are no WAL_READ_LOCK(i) where i>0) then +** the writer will first "reset" the WAL back to the beginning and start +** writing new content beginning at frame 1. +** +** We assume that 32-bit loads are atomic and so no locks are needed in +** order to read from any aReadMark[] entries. +*/ +struct WalCkptInfo { + u32 nBackfill; /* Number of WAL frames backfilled into DB */ + u32 aReadMark[WAL_NREADER]; /* Reader marks */ +}; +#define READMARK_NOT_USED 0xffffffff -trans_begun: - if( rc==SQLITE_OK && wrflag ){ - /* This call makes sure that the pager has the correct number of - ** open savepoints. If the second parameter is greater than 0 and - ** the sub-journal is not already open, then it will be opened here. - */ - rc = sqlite3PagerOpenSavepoint(pBt->pPager, p->db->nSavepoint); - } +/* A block of WALINDEX_LOCK_RESERVED bytes beginning at +** WALINDEX_LOCK_OFFSET is reserved for locks. Since some systems +** only support mandatory file-locks, we do not read or write data +** from the region of the file on which locks are applied. +*/ +#define WALINDEX_LOCK_OFFSET (sizeof(WalIndexHdr)*2 + sizeof(WalCkptInfo)) +#define WALINDEX_LOCK_RESERVED 16 +#define WALINDEX_HDR_SIZE (WALINDEX_LOCK_OFFSET+WALINDEX_LOCK_RESERVED) - btreeIntegrity(p); - sqlite3BtreeLeave(p); - return rc; -} +/* Size of header before each frame in wal */ +#define WAL_FRAME_HDRSIZE 24 -#ifndef SQLITE_OMIT_AUTOVACUUM +/* Size of write ahead log header, including checksum. */ +/* #define WAL_HDRSIZE 24 */ +#define WAL_HDRSIZE 32 -/* -** Set the pointer-map entries for all children of page pPage. Also, if -** pPage contains cells that point to overflow pages, set the pointer -** map entries for the overflow pages as well. +/* WAL magic value. Either this value, or the same value with the least +** significant bit also set (WAL_MAGIC | 0x00000001) is stored in 32-bit +** big-endian format in the first 4 bytes of a WAL file. +** +** If the LSB is set, then the checksums for each frame within the WAL +** file are calculated by treating all data as an array of 32-bit +** big-endian words. Otherwise, they are calculated by interpreting +** all data as 32-bit little-endian words. */ -static int setChildPtrmaps(MemPage *pPage){ - int i; /* Counter variable */ - int nCell; /* Number of cells in page pPage */ - int rc; /* Return code */ - BtShared *pBt = pPage->pBt; - u8 isInitOrig = pPage->isInit; - Pgno pgno = pPage->pgno; - - assert( sqlite3_mutex_held(pPage->pBt->mutex) ); - rc = sqlite3BtreeInitPage(pPage); - if( rc!=SQLITE_OK ){ - goto set_child_ptrmaps_out; - } - nCell = pPage->nCell; +#define WAL_MAGIC 0x377f0682 - for(i=0; ileaf ){ - Pgno childPgno = get4byte(pCell); - rc = ptrmapPut(pBt, childPgno, PTRMAP_BTREE, pgno); - if( rc!=SQLITE_OK ) goto set_child_ptrmaps_out; - } - } +/* +** Candidate values for Wal.exclusiveMode. +*/ +#define WAL_NORMAL_MODE 0 +#define WAL_EXCLUSIVE_MODE 1 +#define WAL_HEAPMEMORY_MODE 2 - if( !pPage->leaf ){ - Pgno childPgno = get4byte(&pPage->aData[pPage->hdrOffset+8]); - rc = ptrmapPut(pBt, childPgno, PTRMAP_BTREE, pgno); - } +/* +** Possible values for WAL.readOnly +*/ +#define WAL_RDWR 0 /* Normal read/write connection */ +#define WAL_RDONLY 1 /* The WAL file is readonly */ +#define WAL_SHM_RDONLY 2 /* The SHM file is readonly */ -set_child_ptrmaps_out: - pPage->isInit = isInitOrig; - return rc; -} +/* +** Each page of the wal-index mapping contains a hash-table made up of +** an array of HASHTABLE_NSLOT elements of the following type. +*/ +typedef u16 ht_slot; /* -** Somewhere on pPage, which is guaranteed to be a btree page, not an overflow -** page, is a pointer to page iFrom. Modify this pointer so that it points to -** iTo. Parameter eType describes the type of pointer to be modified, as -** follows: +** This structure is used to implement an iterator that loops through +** all frames in the WAL in database page order. Where two or more frames +** correspond to the same database page, the iterator visits only the +** frame most recently written to the WAL (in other words, the frame with +** the largest index). ** -** PTRMAP_BTREE: pPage is a btree-page. The pointer points at a child -** page of pPage. +** The internals of this structure are only accessed by: ** -** PTRMAP_OVERFLOW1: pPage is a btree-page. The pointer points at an overflow -** page pointed to by one of the cells on pPage. +** walIteratorInit() - Create a new iterator, +** walIteratorNext() - Step an iterator, +** walIteratorFree() - Free an iterator. ** -** PTRMAP_OVERFLOW2: pPage is an overflow-page. The pointer points at the next -** overflow page in the list. +** This functionality is used by the checkpoint code (see walCheckpoint()). */ -static int modifyPagePointer(MemPage *pPage, Pgno iFrom, Pgno iTo, u8 eType){ - assert( sqlite3_mutex_held(pPage->pBt->mutex) ); - assert( sqlite3PagerIswriteable(pPage->pDbPage) ); - if( eType==PTRMAP_OVERFLOW2 ){ - /* The pointer is always the first 4 bytes of the page in this case. */ - if( get4byte(pPage->aData)!=iFrom ){ - return SQLITE_CORRUPT_BKPT; - } - put4byte(pPage->aData, iTo); - }else{ - u8 isInitOrig = pPage->isInit; - int i; - int nCell; +struct WalIterator { + int iPrior; /* Last result returned from the iterator */ + int nSegment; /* Number of entries in aSegment[] */ + struct WalSegment { + int iNext; /* Next slot in aIndex[] not yet returned */ + ht_slot *aIndex; /* i0, i1, i2... such that aPgno[iN] ascend */ + u32 *aPgno; /* Array of page numbers. */ + int nEntry; /* Nr. of entries in aPgno[] and aIndex[] */ + int iZero; /* Frame number associated with aPgno[0] */ + } aSegment[1]; /* One for every 32KB page in the wal-index */ +}; - sqlite3BtreeInitPage(pPage); - nCell = pPage->nCell; +/* +** Define the parameters of the hash tables in the wal-index file. There +** is a hash-table following every HASHTABLE_NPAGE page numbers in the +** wal-index. +** +** Changing any of these constants will alter the wal-index format and +** create incompatibilities. +*/ +#define HASHTABLE_NPAGE 4096 /* Must be power of 2 */ +#define HASHTABLE_HASH_1 383 /* Should be prime */ +#define HASHTABLE_NSLOT (HASHTABLE_NPAGE*2) /* Must be a power of 2 */ - for(i=0; iapWiData[] array if required */ + if( pWal->nWiData<=iPage ){ + int nByte = sizeof(u32*)*(iPage+1); + volatile u32 **apNew; + apNew = (volatile u32 **)sqlite3_realloc((void *)pWal->apWiData, nByte); + if( !apNew ){ + *ppPage = 0; + return SQLITE_NOMEM; } - - if( i==nCell ){ - if( eType!=PTRMAP_BTREE || - get4byte(&pPage->aData[pPage->hdrOffset+8])!=iFrom ){ - return SQLITE_CORRUPT_BKPT; + memset((void*)&apNew[pWal->nWiData], 0, + sizeof(u32*)*(iPage+1-pWal->nWiData)); + pWal->apWiData = apNew; + pWal->nWiData = iPage+1; + } + + /* Request a pointer to the required page from the VFS */ + if( pWal->apWiData[iPage]==0 ){ + if( pWal->exclusiveMode==WAL_HEAPMEMORY_MODE ){ + pWal->apWiData[iPage] = (u32 volatile *)sqlite3MallocZero(WALINDEX_PGSZ); + if( !pWal->apWiData[iPage] ) rc = SQLITE_NOMEM; + }else{ + rc = sqlite3OsShmMap(pWal->pDbFd, iPage, WALINDEX_PGSZ, + pWal->writeLock, (void volatile **)&pWal->apWiData[iPage] + ); + if( rc==SQLITE_READONLY ){ + pWal->readOnly |= WAL_SHM_RDONLY; + rc = SQLITE_OK; } - put4byte(&pPage->aData[pPage->hdrOffset+8], iTo); } - - pPage->isInit = isInitOrig; } - return SQLITE_OK; + + *ppPage = pWal->apWiData[iPage]; + assert( iPage==0 || *ppPage || rc!=SQLITE_OK ); + return rc; } +/* +** Return a pointer to the WalCkptInfo structure in the wal-index. +*/ +static volatile WalCkptInfo *walCkptInfo(Wal *pWal){ + assert( pWal->nWiData>0 && pWal->apWiData[0] ); + return (volatile WalCkptInfo*)&(pWal->apWiData[0][sizeof(WalIndexHdr)/2]); +} /* -** Move the open database page pDbPage to location iFreePage in the -** database. The pDbPage reference remains valid. +** Return a pointer to the WalIndexHdr structure in the wal-index. */ -static int relocatePage( - BtShared *pBt, /* Btree */ - MemPage *pDbPage, /* Open page to move */ - u8 eType, /* Pointer map 'type' entry for pDbPage */ - Pgno iPtrPage, /* Pointer map 'page-no' entry for pDbPage */ - Pgno iFreePage, /* The location to move pDbPage to */ - int isCommit -){ - MemPage *pPtrPage; /* The page that contains a pointer to pDbPage */ - Pgno iDbPage = pDbPage->pgno; - Pager *pPager = pBt->pPager; - int rc; +static volatile WalIndexHdr *walIndexHdr(Wal *pWal){ + assert( pWal->nWiData>0 && pWal->apWiData[0] ); + return (volatile WalIndexHdr*)pWal->apWiData[0]; +} - assert( eType==PTRMAP_OVERFLOW2 || eType==PTRMAP_OVERFLOW1 || - eType==PTRMAP_BTREE || eType==PTRMAP_ROOTPAGE ); - assert( sqlite3_mutex_held(pBt->mutex) ); - assert( pDbPage->pBt==pBt ); +/* +** The argument to this macro must be of type u32. On a little-endian +** architecture, it returns the u32 value that results from interpreting +** the 4 bytes as a big-endian value. On a big-endian architecture, it +** returns the value that would be produced by intepreting the 4 bytes +** of the input value as a little-endian integer. +*/ +#define BYTESWAP32(x) ( \ + (((x)&0x000000FF)<<24) + (((x)&0x0000FF00)<<8) \ + + (((x)&0x00FF0000)>>8) + (((x)&0xFF000000)>>24) \ +) - /* Move page iDbPage from its current location to page number iFreePage */ - TRACE(("AUTOVACUUM: Moving %d to free page %d (ptr page %d type %d)\n", - iDbPage, iFreePage, iPtrPage, eType)); - rc = sqlite3PagerMovepage(pPager, pDbPage->pDbPage, iFreePage, isCommit); - if( rc!=SQLITE_OK ){ - return rc; - } - pDbPage->pgno = iFreePage; +/* +** Generate or extend an 8 byte checksum based on the data in +** array aByte[] and the initial values of aIn[0] and aIn[1] (or +** initial values of 0 and 0 if aIn==NULL). +** +** The checksum is written back into aOut[] before returning. +** +** nByte must be a positive multiple of 8. +*/ +static void walChecksumBytes( + int nativeCksum, /* True for native byte-order, false for non-native */ + u8 *a, /* Content to be checksummed */ + int nByte, /* Bytes of content in a[]. Must be a multiple of 8. */ + const u32 *aIn, /* Initial checksum value input */ + u32 *aOut /* OUT: Final checksum value output */ +){ + u32 s1, s2; + u32 *aData = (u32 *)a; + u32 *aEnd = (u32 *)&a[nByte]; - /* If pDbPage was a btree-page, then it may have child pages and/or cells - ** that point to overflow pages. The pointer map entries for all these - ** pages need to be changed. - ** - ** If pDbPage is an overflow page, then the first 4 bytes may store a - ** pointer to a subsequent overflow page. If this is the case, then - ** the pointer map needs to be updated for the subsequent overflow page. - */ - if( eType==PTRMAP_BTREE || eType==PTRMAP_ROOTPAGE ){ - rc = setChildPtrmaps(pDbPage); - if( rc!=SQLITE_OK ){ - return rc; - } + if( aIn ){ + s1 = aIn[0]; + s2 = aIn[1]; }else{ - Pgno nextOvfl = get4byte(pDbPage->aData); - if( nextOvfl!=0 ){ - rc = ptrmapPut(pBt, nextOvfl, PTRMAP_OVERFLOW2, iFreePage); - if( rc!=SQLITE_OK ){ - return rc; - } - } + s1 = s2 = 0; } - /* Fix the database pointer on page iPtrPage that pointed at iDbPage so - ** that it points at iFreePage. Also fix the pointer map entry for - ** iPtrPage. - */ - if( eType!=PTRMAP_ROOTPAGE ){ - rc = sqlite3BtreeGetPage(pBt, iPtrPage, &pPtrPage, 0); - if( rc!=SQLITE_OK ){ - return rc; - } - rc = sqlite3PagerWrite(pPtrPage->pDbPage); - if( rc!=SQLITE_OK ){ - releasePage(pPtrPage); - return rc; - } - rc = modifyPagePointer(pPtrPage, iDbPage, iFreePage, eType); - releasePage(pPtrPage); - if( rc==SQLITE_OK ){ - rc = ptrmapPut(pBt, iFreePage, eType, iPtrPage); - } + assert( nByte>=8 ); + assert( (nByte&0x00000007)==0 ); + + if( nativeCksum ){ + do { + s1 += *aData++ + s2; + s2 += *aData++ + s1; + }while( aDataexclusiveMode!=WAL_HEAPMEMORY_MODE ){ + sqlite3OsShmBarrier(pWal->pDbFd); + } +} /* -** Perform a single step of an incremental-vacuum. If successful, -** return SQLITE_OK. If there is no work to do (and therefore no -** point in calling this function again), return SQLITE_DONE. -** -** More specificly, this function attempts to re-organize the -** database so that the last page of the file currently in use -** is no longer in use. +** Write the header information in pWal->hdr into the wal-index. ** -** If the nFin parameter is non-zero, the implementation assumes -** that the caller will keep calling incrVacuumStep() until -** it returns SQLITE_DONE or an error, and that nFin is the -** number of pages the database file will contain after this -** process is complete. +** The checksum on pWal->hdr is updated before it is written. */ -static int incrVacuumStep(BtShared *pBt, Pgno nFin, Pgno iLastPg){ - Pgno nFreeList; /* Number of pages still on the free-list */ +static void walIndexWriteHdr(Wal *pWal){ + volatile WalIndexHdr *aHdr = walIndexHdr(pWal); + const int nCksum = offsetof(WalIndexHdr, aCksum); - assert( sqlite3_mutex_held(pBt->mutex) ); - assert( iLastPg>nFin ); + assert( pWal->writeLock ); + pWal->hdr.isInit = 1; + pWal->hdr.iVersion = WALINDEX_MAX_VERSION; + walChecksumBytes(1, (u8*)&pWal->hdr, nCksum, 0, pWal->hdr.aCksum); + memcpy((void *)&aHdr[1], (void *)&pWal->hdr, sizeof(WalIndexHdr)); + walShmBarrier(pWal); + memcpy((void *)&aHdr[0], (void *)&pWal->hdr, sizeof(WalIndexHdr)); +} - if( !PTRMAP_ISPAGE(pBt, iLastPg) && iLastPg!=PENDING_BYTE_PAGE(pBt) ){ - int rc; - u8 eType; - Pgno iPtrPage; +/* +** This function encodes a single frame header and writes it to a buffer +** supplied by the caller. A frame-header is made up of a series of +** 4-byte big-endian integers, as follows: +** +** 0: Page number. +** 4: For commit records, the size of the database image in pages +** after the commit. For all other records, zero. +** 8: Salt-1 (copied from the wal-header) +** 12: Salt-2 (copied from the wal-header) +** 16: Checksum-1. +** 20: Checksum-2. +*/ +static void walEncodeFrame( + Wal *pWal, /* The write-ahead log */ + u32 iPage, /* Database page number for frame */ + u32 nTruncate, /* New db size (or 0 for non-commit frames) */ + u8 *aData, /* Pointer to page data */ + u8 *aFrame /* OUT: Write encoded frame here */ +){ + int nativeCksum; /* True for native byte-order checksums */ + u32 *aCksum = pWal->hdr.aFrameCksum; + assert( WAL_FRAME_HDRSIZE==24 ); + sqlite3Put4byte(&aFrame[0], iPage); + sqlite3Put4byte(&aFrame[4], nTruncate); + memcpy(&aFrame[8], pWal->hdr.aSalt, 8); - nFreeList = get4byte(&pBt->pPage1->aData[36]); - if( nFreeList==0 ){ - return SQLITE_DONE; - } + nativeCksum = (pWal->hdr.bigEndCksum==SQLITE_BIGENDIAN); + walChecksumBytes(nativeCksum, aFrame, 8, aCksum, aCksum); + walChecksumBytes(nativeCksum, aData, pWal->szPage, aCksum, aCksum); - rc = ptrmapGet(pBt, iLastPg, &eType, &iPtrPage); - if( rc!=SQLITE_OK ){ - return rc; - } - if( eType==PTRMAP_ROOTPAGE ){ - return SQLITE_CORRUPT_BKPT; - } + sqlite3Put4byte(&aFrame[16], aCksum[0]); + sqlite3Put4byte(&aFrame[20], aCksum[1]); +} - if( eType==PTRMAP_FREEPAGE ){ - if( nFin==0 ){ - /* Remove the page from the files free-list. This is not required - ** if nFin is non-zero. In that case, the free-list will be - ** truncated to zero after this function returns, so it doesn't - ** matter if it still contains some garbage entries. - */ - Pgno iFreePg; - MemPage *pFreePg; - rc = allocateBtreePage(pBt, &pFreePg, &iFreePg, iLastPg, 1); - if( rc!=SQLITE_OK ){ - return rc; - } - assert( iFreePg==iLastPg ); - releasePage(pFreePg); - } - } else { - Pgno iFreePg; /* Index of free page to move pLastPg to */ - MemPage *pLastPg; +/* +** Check to see if the frame with header in aFrame[] and content +** in aData[] is valid. If it is a valid frame, fill *piPage and +** *pnTruncate and return true. Return if the frame is not valid. +*/ +static int walDecodeFrame( + Wal *pWal, /* The write-ahead log */ + u32 *piPage, /* OUT: Database page number for frame */ + u32 *pnTruncate, /* OUT: New db size (or 0 if not commit) */ + u8 *aData, /* Pointer to page data (for checksum) */ + u8 *aFrame /* Frame data */ +){ + int nativeCksum; /* True for native byte-order checksums */ + u32 *aCksum = pWal->hdr.aFrameCksum; + u32 pgno; /* Page number of the frame */ + assert( WAL_FRAME_HDRSIZE==24 ); - rc = sqlite3BtreeGetPage(pBt, iLastPg, &pLastPg, 0); - if( rc!=SQLITE_OK ){ - return rc; - } + /* A frame is only valid if the salt values in the frame-header + ** match the salt values in the wal-header. + */ + if( memcmp(&pWal->hdr.aSalt, &aFrame[8], 8)!=0 ){ + return 0; + } - /* If nFin is zero, this loop runs exactly once and page pLastPg - ** is swapped with the first free page pulled off the free list. - ** - ** On the other hand, if nFin is greater than zero, then keep - ** looping until a free-page located within the first nFin pages - ** of the file is found. - */ - do { - MemPage *pFreePg; - rc = allocateBtreePage(pBt, &pFreePg, &iFreePg, 0, 0); - if( rc!=SQLITE_OK ){ - releasePage(pLastPg); - return rc; - } - releasePage(pFreePg); - }while( nFin!=0 && iFreePg>nFin ); - assert( iFreePgpDbPage); - if( rc==SQLITE_OK ){ - rc = relocatePage(pBt, pLastPg, eType, iPtrPage, iFreePg, nFin!=0); - } - releasePage(pLastPg); - if( rc!=SQLITE_OK ){ - return rc; - } - } + /* A frame is only valid if the page number is creater than zero. + */ + pgno = sqlite3Get4byte(&aFrame[0]); + if( pgno==0 ){ + return 0; } - if( nFin==0 ){ - iLastPg--; - while( iLastPg==PENDING_BYTE_PAGE(pBt)||PTRMAP_ISPAGE(pBt, iLastPg) ){ - if( PTRMAP_ISPAGE(pBt, iLastPg) ){ - MemPage *pPg; - int rc = sqlite3BtreeGetPage(pBt, iLastPg, &pPg, 0); - if( rc!=SQLITE_OK ){ - return rc; - } - rc = sqlite3PagerWrite(pPg->pDbPage); - releasePage(pPg); - if( rc!=SQLITE_OK ){ - return rc; - } - } - iLastPg--; - } - sqlite3PagerTruncateImage(pBt->pPager, iLastPg); + /* A frame is only valid if a checksum of the WAL header, + ** all prior frams, the first 16 bytes of this frame-header, + ** and the frame-data matches the checksum in the last 8 + ** bytes of this frame-header. + */ + nativeCksum = (pWal->hdr.bigEndCksum==SQLITE_BIGENDIAN); + walChecksumBytes(nativeCksum, aFrame, 8, aCksum, aCksum); + walChecksumBytes(nativeCksum, aData, pWal->szPage, aCksum, aCksum); + if( aCksum[0]!=sqlite3Get4byte(&aFrame[16]) + || aCksum[1]!=sqlite3Get4byte(&aFrame[20]) + ){ + /* Checksum failed. */ + return 0; } - return SQLITE_OK; + + /* If we reach this point, the frame is valid. Return the page number + ** and the new database size. + */ + *piPage = pgno; + *pnTruncate = sqlite3Get4byte(&aFrame[4]); + return 1; } + +#if defined(SQLITE_TEST) && defined(SQLITE_DEBUG) /* -** A write-transaction must be opened before calling this function. -** It performs a single unit of work towards an incremental vacuum. -** -** If the incremental vacuum is finished after this function has run, -** SQLITE_DONE is returned. If it is not finished, but no error occurred, -** SQLITE_OK is returned. Otherwise an SQLite error code. +** Names of locks. This routine is used to provide debugging output and is not +** a part of an ordinary build. */ -SQLITE_PRIVATE int sqlite3BtreeIncrVacuum(Btree *p){ - int rc; - BtShared *pBt = p->pBt; - - sqlite3BtreeEnter(p); - assert( pBt->inTransaction==TRANS_WRITE && p->inTrans==TRANS_WRITE ); - if( !pBt->autoVacuum ){ - rc = SQLITE_DONE; +static const char *walLockName(int lockIdx){ + if( lockIdx==WAL_WRITE_LOCK ){ + return "WRITE-LOCK"; + }else if( lockIdx==WAL_CKPT_LOCK ){ + return "CKPT-LOCK"; + }else if( lockIdx==WAL_RECOVER_LOCK ){ + return "RECOVER-LOCK"; }else{ - invalidateAllOverflowCache(pBt); - rc = incrVacuumStep(pBt, 0, pagerPagecount(pBt)); + static char zName[15]; + sqlite3_snprintf(sizeof(zName), zName, "READ-LOCK[%d]", + lockIdx-WAL_READ_LOCK(0)); + return zName; } - sqlite3BtreeLeave(p); - return rc; } +#endif /*defined(SQLITE_TEST) || defined(SQLITE_DEBUG) */ + /* -** This routine is called prior to sqlite3PagerCommit when a transaction -** is commited for an auto-vacuum database. +** Set or release locks on the WAL. Locks are either shared or exclusive. +** A lock cannot be moved directly between shared and exclusive - it must go +** through the unlocked state first. ** -** If SQLITE_OK is returned, then *pnTrunc is set to the number of pages -** the database file should be truncated to during the commit process. -** i.e. the database has been reorganized so that only the first *pnTrunc -** pages are in use. +** In locking_mode=EXCLUSIVE, all of these routines become no-ops. */ -static int autoVacuumCommit(BtShared *pBt){ - int rc = SQLITE_OK; - Pager *pPager = pBt->pPager; - VVA_ONLY( int nRef = sqlite3PagerRefcount(pPager) ); +static int walLockShared(Wal *pWal, int lockIdx){ + int rc; + if( pWal->exclusiveMode ) return SQLITE_OK; + rc = sqlite3OsShmLock(pWal->pDbFd, lockIdx, 1, + SQLITE_SHM_LOCK | SQLITE_SHM_SHARED); + WALTRACE(("WAL%p: acquire SHARED-%s %s\n", pWal, + walLockName(lockIdx), rc ? "failed" : "ok")); + VVA_ONLY( pWal->lockError = (u8)(rc!=SQLITE_OK && rc!=SQLITE_BUSY); ) + return rc; +} +static void walUnlockShared(Wal *pWal, int lockIdx){ + if( pWal->exclusiveMode ) return; + (void)sqlite3OsShmLock(pWal->pDbFd, lockIdx, 1, + SQLITE_SHM_UNLOCK | SQLITE_SHM_SHARED); + WALTRACE(("WAL%p: release SHARED-%s\n", pWal, walLockName(lockIdx))); +} +static int walLockExclusive(Wal *pWal, int lockIdx, int n){ + int rc; + if( pWal->exclusiveMode ) return SQLITE_OK; + rc = sqlite3OsShmLock(pWal->pDbFd, lockIdx, n, + SQLITE_SHM_LOCK | SQLITE_SHM_EXCLUSIVE); + WALTRACE(("WAL%p: acquire EXCLUSIVE-%s cnt=%d %s\n", pWal, + walLockName(lockIdx), n, rc ? "failed" : "ok")); + VVA_ONLY( pWal->lockError = (u8)(rc!=SQLITE_OK && rc!=SQLITE_BUSY); ) + return rc; +} +static void walUnlockExclusive(Wal *pWal, int lockIdx, int n){ + if( pWal->exclusiveMode ) return; + (void)sqlite3OsShmLock(pWal->pDbFd, lockIdx, n, + SQLITE_SHM_UNLOCK | SQLITE_SHM_EXCLUSIVE); + WALTRACE(("WAL%p: release EXCLUSIVE-%s cnt=%d\n", pWal, + walLockName(lockIdx), n)); +} - assert( sqlite3_mutex_held(pBt->mutex) ); - invalidateAllOverflowCache(pBt); - assert(pBt->autoVacuum); - if( !pBt->incrVacuum ){ - Pgno nFin; - Pgno nFree; - Pgno nPtrmap; - Pgno iFree; - const int pgsz = pBt->pageSize; - Pgno nOrig = pagerPagecount(pBt); +/* +** Compute a hash on a page number. The resulting hash value must land +** between 0 and (HASHTABLE_NSLOT-1). The walHashNext() function advances +** the hash to the next value in the event of a collision. +*/ +static int walHash(u32 iPage){ + assert( iPage>0 ); + assert( (HASHTABLE_NSLOT & (HASHTABLE_NSLOT-1))==0 ); + return (iPage*HASHTABLE_HASH_1) & (HASHTABLE_NSLOT-1); +} +static int walNextHash(int iPriorHash){ + return (iPriorHash+1)&(HASHTABLE_NSLOT-1); +} - if( PTRMAP_ISPAGE(pBt, nOrig) || nOrig==PENDING_BYTE_PAGE(pBt) ){ - /* It is not possible to create a database for which the final page - ** is either a pointer-map page or the pending-byte page. If one - ** is encountered, this indicates corruption. - */ - return SQLITE_CORRUPT_BKPT; - } +/* +** Return pointers to the hash table and page number array stored on +** page iHash of the wal-index. The wal-index is broken into 32KB pages +** numbered starting from 0. +** +** Set output variable *paHash to point to the start of the hash table +** in the wal-index file. Set *piZero to one less than the frame +** number of the first frame indexed by this hash table. If a +** slot in the hash table is set to N, it refers to frame number +** (*piZero+N) in the log. +** +** Finally, set *paPgno so that *paPgno[1] is the page number of the +** first frame indexed by the hash table, frame (*piZero+1). +*/ +static int walHashGet( + Wal *pWal, /* WAL handle */ + int iHash, /* Find the iHash'th table */ + volatile ht_slot **paHash, /* OUT: Pointer to hash index */ + volatile u32 **paPgno, /* OUT: Pointer to page number array */ + u32 *piZero /* OUT: Frame associated with *paPgno[0] */ +){ + int rc; /* Return code */ + volatile u32 *aPgno; - nFree = get4byte(&pBt->pPage1->aData[36]); - nPtrmap = (nFree-nOrig+PTRMAP_PAGENO(pBt, nOrig)+pgsz/5)/(pgsz/5); - nFin = nOrig - nFree - nPtrmap; - if( nOrig>PENDING_BYTE_PAGE(pBt) && nFinnOrig ) return SQLITE_CORRUPT_BKPT; + rc = walIndexPage(pWal, iHash, &aPgno); + assert( rc==SQLITE_OK || iHash>0 ); - for(iFree=nOrig; iFree>nFin && rc==SQLITE_OK; iFree--){ - rc = incrVacuumStep(pBt, nFin, iFree); - } - if( (rc==SQLITE_DONE || rc==SQLITE_OK) && nFree>0 ){ - rc = SQLITE_OK; - rc = sqlite3PagerWrite(pBt->pPage1->pDbPage); - put4byte(&pBt->pPage1->aData[32], 0); - put4byte(&pBt->pPage1->aData[36], 0); - sqlite3PagerTruncateImage(pBt->pPager, nFin); - } - if( rc!=SQLITE_OK ){ - sqlite3PagerRollback(pPager); + if( rc==SQLITE_OK ){ + u32 iZero; + volatile ht_slot *aHash; + + aHash = (volatile ht_slot *)&aPgno[HASHTABLE_NPAGE]; + if( iHash==0 ){ + aPgno = &aPgno[WALINDEX_HDR_SIZE/sizeof(u32)]; + iZero = 0; + }else{ + iZero = HASHTABLE_NPAGE_ONE + (iHash-1)*HASHTABLE_NPAGE; } + + *paPgno = &aPgno[-1]; + *paHash = aHash; + *piZero = iZero; } - - assert( nRef==sqlite3PagerRefcount(pPager) ); return rc; } -#else /* ifndef SQLITE_OMIT_AUTOVACUUM */ -# define setChildPtrmaps(x) SQLITE_OK -#endif +/* +** Return the number of the wal-index page that contains the hash-table +** and page-number array that contain entries corresponding to WAL frame +** iFrame. The wal-index is broken up into 32KB pages. Wal-index pages +** are numbered starting from 0. +*/ +static int walFramePage(u32 iFrame){ + int iHash = (iFrame+HASHTABLE_NPAGE-HASHTABLE_NPAGE_ONE-1) / HASHTABLE_NPAGE; + assert( (iHash==0 || iFrame>HASHTABLE_NPAGE_ONE) + && (iHash>=1 || iFrame<=HASHTABLE_NPAGE_ONE) + && (iHash<=1 || iFrame>(HASHTABLE_NPAGE_ONE+HASHTABLE_NPAGE)) + && (iHash>=2 || iFrame<=HASHTABLE_NPAGE_ONE+HASHTABLE_NPAGE) + && (iHash<=2 || iFrame>(HASHTABLE_NPAGE_ONE+2*HASHTABLE_NPAGE)) + ); + return iHash; +} /* -** This routine does the first phase of a two-phase commit. This routine -** causes a rollback journal to be created (if it does not already exist) -** and populated with enough information so that if a power loss occurs -** the database can be restored to its original state by playing back -** the journal. Then the contents of the journal are flushed out to -** the disk. After the journal is safely on oxide, the changes to the -** database are written into the database file and flushed to oxide. -** At the end of this call, the rollback journal still exists on the -** disk and we are still holding all locks, so the transaction has not -** committed. See sqlite3BtreeCommitPhaseTwo() for the second phase of the -** commit process. -** -** This call is a no-op if no write-transaction is currently active on pBt. -** -** Otherwise, sync the database file for the btree pBt. zMaster points to -** the name of a master journal file that should be written into the -** individual journal file, or is NULL, indicating no master journal file -** (single database transaction). -** -** When this is called, the master journal should already have been -** created, populated with this journal pointer and synced to disk. -** -** Once this is routine has returned, the only thing required to commit -** the write-transaction for this database file is to delete the journal. +** Return the page number associated with frame iFrame in this WAL. */ -SQLITE_PRIVATE int sqlite3BtreeCommitPhaseOne(Btree *p, const char *zMaster){ - int rc = SQLITE_OK; - if( p->inTrans==TRANS_WRITE ){ - BtShared *pBt = p->pBt; - sqlite3BtreeEnter(p); -#ifndef SQLITE_OMIT_AUTOVACUUM - if( pBt->autoVacuum ){ - rc = autoVacuumCommit(pBt); - if( rc!=SQLITE_OK ){ - sqlite3BtreeLeave(p); - return rc; - } - } -#endif - rc = sqlite3PagerCommitPhaseOne(pBt->pPager, zMaster, 0); - sqlite3BtreeLeave(p); +static u32 walFramePgno(Wal *pWal, u32 iFrame){ + int iHash = walFramePage(iFrame); + if( iHash==0 ){ + return pWal->apWiData[0][WALINDEX_HDR_SIZE/sizeof(u32) + iFrame - 1]; } - return rc; + return pWal->apWiData[iHash][(iFrame-1-HASHTABLE_NPAGE_ONE)%HASHTABLE_NPAGE]; } /* -** Commit the transaction currently in progress. +** Remove entries from the hash table that point to WAL slots greater +** than pWal->hdr.mxFrame. ** -** This routine implements the second phase of a 2-phase commit. The -** sqlite3BtreeCommitPhaseOne() routine does the first phase and should -** be invoked prior to calling this routine. The sqlite3BtreeCommitPhaseOne() -** routine did all the work of writing information out to disk and flushing the -** contents so that they are written onto the disk platter. All this -** routine has to do is delete or truncate or zero the header in the -** the rollback journal (which causes the transaction to commit) and -** drop locks. +** This function is called whenever pWal->hdr.mxFrame is decreased due +** to a rollback or savepoint. ** -** This will release the write lock on the database file. If there -** are no active cursors, it also releases the read lock. +** At most only the hash table containing pWal->hdr.mxFrame needs to be +** updated. Any later hash tables will be automatically cleared when +** pWal->hdr.mxFrame advances to the point where those hash tables are +** actually needed. */ -SQLITE_PRIVATE int sqlite3BtreeCommitPhaseTwo(Btree *p){ - BtShared *pBt = p->pBt; +static void walCleanupHash(Wal *pWal){ + volatile ht_slot *aHash = 0; /* Pointer to hash table to clear */ + volatile u32 *aPgno = 0; /* Page number array for hash table */ + u32 iZero = 0; /* frame == (aHash[x]+iZero) */ + int iLimit = 0; /* Zero values greater than this */ + int nByte; /* Number of bytes to zero in aPgno[] */ + int i; /* Used to iterate through aHash[] */ - sqlite3BtreeEnter(p); - btreeIntegrity(p); + assert( pWal->writeLock ); + testcase( pWal->hdr.mxFrame==HASHTABLE_NPAGE_ONE-1 ); + testcase( pWal->hdr.mxFrame==HASHTABLE_NPAGE_ONE ); + testcase( pWal->hdr.mxFrame==HASHTABLE_NPAGE_ONE+1 ); - /* If the handle has a write-transaction open, commit the shared-btrees - ** transaction and set the shared state to TRANS_READ. + if( pWal->hdr.mxFrame==0 ) return; + + /* Obtain pointers to the hash-table and page-number array containing + ** the entry that corresponds to frame pWal->hdr.mxFrame. It is guaranteed + ** that the page said hash-table and array reside on is already mapped. */ - if( p->inTrans==TRANS_WRITE ){ - int rc; - assert( pBt->inTransaction==TRANS_WRITE ); - assert( pBt->nTransaction>0 ); - rc = sqlite3PagerCommitPhaseTwo(pBt->pPager); - if( rc!=SQLITE_OK ){ - sqlite3BtreeLeave(p); - return rc; - } - pBt->inTransaction = TRANS_READ; - } + assert( pWal->nWiData>walFramePage(pWal->hdr.mxFrame) ); + assert( pWal->apWiData[walFramePage(pWal->hdr.mxFrame)] ); + walHashGet(pWal, walFramePage(pWal->hdr.mxFrame), &aHash, &aPgno, &iZero); - /* If the handle has any kind of transaction open, decrement the transaction - ** count of the shared btree. If the transaction count reaches 0, set - ** the shared state to TRANS_NONE. The unlockBtreeIfUnused() call below - ** will unlock the pager. + /* Zero all hash-table entries that correspond to frame numbers greater + ** than pWal->hdr.mxFrame. */ - if( p->inTrans!=TRANS_NONE ){ - clearAllSharedCacheTableLocks(p); - pBt->nTransaction--; - if( 0==pBt->nTransaction ){ - pBt->inTransaction = TRANS_NONE; + iLimit = pWal->hdr.mxFrame - iZero; + assert( iLimit>0 ); + for(i=0; iiLimit ){ + aHash[i] = 0; } } - - /* Set the current transaction state to TRANS_NONE and unlock - ** the pager if this call closed the only read or write transaction. + + /* Zero the entries in the aPgno array that correspond to frames with + ** frame numbers greater than pWal->hdr.mxFrame. */ - btreeClearHasContent(pBt); - p->inTrans = TRANS_NONE; - unlockBtreeIfUnused(pBt); + nByte = (int)((char *)aHash - (char *)&aPgno[iLimit+1]); + memset((void *)&aPgno[iLimit+1], 0, nByte); - btreeIntegrity(p); - sqlite3BtreeLeave(p); - return SQLITE_OK; +#ifdef SQLITE_ENABLE_EXPENSIVE_ASSERT + /* Verify that the every entry in the mapping region is still reachable + ** via the hash table even after the cleanup. + */ + if( iLimit ){ + int i; /* Loop counter */ + int iKey; /* Hash key */ + for(i=1; i<=iLimit; i++){ + for(iKey=walHash(aPgno[i]); aHash[iKey]; iKey=walNextHash(iKey)){ + if( aHash[iKey]==i ) break; + } + assert( aHash[iKey]==i ); + } + } +#endif /* SQLITE_ENABLE_EXPENSIVE_ASSERT */ } + /* -** Do both phases of a commit. +** Set an entry in the wal-index that will map database page number +** pPage into WAL frame iFrame. */ -SQLITE_PRIVATE int sqlite3BtreeCommit(Btree *p){ - int rc; - sqlite3BtreeEnter(p); - rc = sqlite3BtreeCommitPhaseOne(p, 0); +static int walIndexAppend(Wal *pWal, u32 iFrame, u32 iPage){ + int rc; /* Return code */ + u32 iZero = 0; /* One less than frame number of aPgno[1] */ + volatile u32 *aPgno = 0; /* Page number array */ + volatile ht_slot *aHash = 0; /* Hash table */ + + rc = walHashGet(pWal, walFramePage(iFrame), &aHash, &aPgno, &iZero); + + /* Assuming the wal-index file was successfully mapped, populate the + ** page number array and hash table entry. + */ if( rc==SQLITE_OK ){ - rc = sqlite3BtreeCommitPhaseTwo(p); + int iKey; /* Hash table key */ + int idx; /* Value to write to hash-table slot */ + int nCollide; /* Number of hash collisions */ + + idx = iFrame - iZero; + assert( idx <= HASHTABLE_NSLOT/2 + 1 ); + + /* If this is the first entry to be added to this hash-table, zero the + ** entire hash table and aPgno[] array before proceding. + */ + if( idx==1 ){ + int nByte = (int)((u8 *)&aHash[HASHTABLE_NSLOT] - (u8 *)&aPgno[1]); + memset((void*)&aPgno[1], 0, nByte); + } + + /* If the entry in aPgno[] is already set, then the previous writer + ** must have exited unexpectedly in the middle of a transaction (after + ** writing one or more dirty pages to the WAL to free up memory). + ** Remove the remnants of that writers uncommitted transaction from + ** the hash-table before writing any new entries. + */ + if( aPgno[idx] ){ + walCleanupHash(pWal); + assert( !aPgno[idx] ); + } + + /* Write the aPgno[] array entry and the hash-table slot. */ + nCollide = idx; + for(iKey=walHash(iPage); aHash[iKey]; iKey=walNextHash(iKey)){ + if( (nCollide--)==0 ) return SQLITE_CORRUPT_BKPT; + } + aPgno[idx] = iPage; + aHash[iKey] = (ht_slot)idx; + +#ifdef SQLITE_ENABLE_EXPENSIVE_ASSERT + /* Verify that the number of entries in the hash table exactly equals + ** the number of entries in the mapping region. + */ + { + int i; /* Loop counter */ + int nEntry = 0; /* Number of entries in the hash table */ + for(i=0; ipCursor; pCur; pCur=pCur->pNext){ - if( pCur->wrFlag && pCur->eState!=CURSOR_FAULT ) r++; - } - return r; -} -#endif /* -** This routine sets the state to CURSOR_FAULT and the error -** code to errCode for every cursor on BtShared that pBtree -** references. -** -** Every cursor is tripped, including cursors that belong -** to other database connections that happen to be sharing -** the cache with pBtree. +** Recover the wal-index by reading the write-ahead log file. ** -** This routine gets called when a rollback occurs. -** All cursors using the same cache must be tripped -** to prevent them from trying to use the btree after -** the rollback. The rollback may have deleted tables -** or moved root pages, so it is not sufficient to -** save the state of the cursor. The cursor must be -** invalidated. +** This routine first tries to establish an exclusive lock on the +** wal-index to prevent other threads/processes from doing anything +** with the WAL or wal-index while recovery is running. The +** WAL_RECOVER_LOCK is also held so that other threads will know +** that this thread is running recovery. If unable to establish +** the necessary locks, this routine returns SQLITE_BUSY. */ -SQLITE_PRIVATE void sqlite3BtreeTripAllCursors(Btree *pBtree, int errCode){ - BtCursor *p; - sqlite3BtreeEnter(pBtree); - for(p=pBtree->pBt->pCursor; p; p=p->pNext){ - int i; - sqlite3BtreeClearCursor(p); - p->eState = CURSOR_FAULT; - p->skip = errCode; - for(i=0; i<=p->iPage; i++){ - releasePage(p->apPage[i]); - p->apPage[i] = 0; - } - } - sqlite3BtreeLeave(pBtree); -} +static int walIndexRecover(Wal *pWal){ + int rc; /* Return Code */ + i64 nSize; /* Size of log file */ + u32 aFrameCksum[2] = {0, 0}; + int iLock; /* Lock offset to lock for checkpoint */ + int nLock; /* Number of locks to hold */ -/* -** Rollback the transaction in progress. All cursors will be -** invalided by this operation. Any attempt to use a cursor -** that was open at the beginning of this operation will result -** in an error. -** -** This will release the write lock on the database file. If there -** are no active cursors, it also releases the read lock. -*/ -SQLITE_PRIVATE int sqlite3BtreeRollback(Btree *p){ - int rc; - BtShared *pBt = p->pBt; - MemPage *pPage1; + /* Obtain an exclusive lock on all byte in the locking range not already + ** locked by the caller. The caller is guaranteed to have locked the + ** WAL_WRITE_LOCK byte, and may have also locked the WAL_CKPT_LOCK byte. + ** If successful, the same bytes that are locked here are unlocked before + ** this function returns. + */ + assert( pWal->ckptLock==1 || pWal->ckptLock==0 ); + assert( WAL_ALL_BUT_WRITE==WAL_WRITE_LOCK+1 ); + assert( WAL_CKPT_LOCK==WAL_ALL_BUT_WRITE ); + assert( pWal->writeLock ); + iLock = WAL_ALL_BUT_WRITE + pWal->ckptLock; + nLock = SQLITE_SHM_NLOCK - iLock; + rc = walLockExclusive(pWal, iLock, nLock); + if( rc ){ + return rc; + } + WALTRACE(("WAL%p: recovery begin...\n", pWal)); - sqlite3BtreeEnter(p); - rc = saveAllCursors(pBt, 0, 0); -#ifndef SQLITE_OMIT_SHARED_CACHE + memset(&pWal->hdr, 0, sizeof(WalIndexHdr)); + + rc = sqlite3OsFileSize(pWal->pWalFd, &nSize); if( rc!=SQLITE_OK ){ - /* This is a horrible situation. An IO or malloc() error occurred whilst - ** trying to save cursor positions. If this is an automatic rollback (as - ** the result of a constraint, malloc() failure or IO error) then - ** the cache may be internally inconsistent (not contain valid trees) so - ** we cannot simply return the error to the caller. Instead, abort - ** all queries that may be using any of the cursors that failed to save. + goto recovery_error; + } + + if( nSize>WAL_HDRSIZE ){ + u8 aBuf[WAL_HDRSIZE]; /* Buffer to load WAL header into */ + u8 *aFrame = 0; /* Malloc'd buffer to load entire frame */ + int szFrame; /* Number of bytes in buffer aFrame[] */ + u8 *aData; /* Pointer to data part of aFrame buffer */ + int iFrame; /* Index of last frame read */ + i64 iOffset; /* Next offset to read from log file */ + int szPage; /* Page size according to the log */ + u32 magic; /* Magic value read from WAL header */ + u32 version; /* Magic value read from WAL header */ + int isValid; /* True if this frame is valid */ + + /* Read in the WAL header. */ + rc = sqlite3OsRead(pWal->pWalFd, aBuf, WAL_HDRSIZE, 0); + if( rc!=SQLITE_OK ){ + goto recovery_error; + } + + /* If the database page size is not a power of two, or is greater than + ** SQLITE_MAX_PAGE_SIZE, conclude that the WAL file contains no valid + ** data. Similarly, if the 'magic' value is invalid, ignore the whole + ** WAL file. */ - sqlite3BtreeTripAllCursors(p, rc); - } -#endif - btreeIntegrity(p); + magic = sqlite3Get4byte(&aBuf[0]); + szPage = sqlite3Get4byte(&aBuf[8]); + if( (magic&0xFFFFFFFE)!=WAL_MAGIC + || szPage&(szPage-1) + || szPage>SQLITE_MAX_PAGE_SIZE + || szPage<512 + ){ + goto finished; + } + pWal->hdr.bigEndCksum = (u8)(magic&0x00000001); + pWal->szPage = szPage; + pWal->nCkpt = sqlite3Get4byte(&aBuf[12]); + memcpy(&pWal->hdr.aSalt, &aBuf[16], 8); - if( p->inTrans==TRANS_WRITE ){ - int rc2; + /* Verify that the WAL header checksum is correct */ + walChecksumBytes(pWal->hdr.bigEndCksum==SQLITE_BIGENDIAN, + aBuf, WAL_HDRSIZE-2*4, 0, pWal->hdr.aFrameCksum + ); + if( pWal->hdr.aFrameCksum[0]!=sqlite3Get4byte(&aBuf[24]) + || pWal->hdr.aFrameCksum[1]!=sqlite3Get4byte(&aBuf[28]) + ){ + goto finished; + } - assert( TRANS_WRITE==pBt->inTransaction ); - rc2 = sqlite3PagerRollback(pBt->pPager); - if( rc2!=SQLITE_OK ){ - rc = rc2; + /* Verify that the version number on the WAL format is one that + ** are able to understand */ + version = sqlite3Get4byte(&aBuf[4]); + if( version!=WAL_MAX_VERSION ){ + rc = SQLITE_CANTOPEN_BKPT; + goto finished; } - /* The rollback may have destroyed the pPage1->aData value. So - ** call sqlite3BtreeGetPage() on page 1 again to make - ** sure pPage1->aData is set correctly. */ - if( sqlite3BtreeGetPage(pBt, 1, &pPage1, 0)==SQLITE_OK ){ - releasePage(pPage1); + /* Malloc a buffer to read frames into. */ + szFrame = szPage + WAL_FRAME_HDRSIZE; + aFrame = (u8 *)sqlite3_malloc(szFrame); + if( !aFrame ){ + rc = SQLITE_NOMEM; + goto recovery_error; } - assert( countWriteCursors(pBt)==0 ); - pBt->inTransaction = TRANS_READ; - } + aData = &aFrame[WAL_FRAME_HDRSIZE]; - if( p->inTrans!=TRANS_NONE ){ - clearAllSharedCacheTableLocks(p); - assert( pBt->nTransaction>0 ); - pBt->nTransaction--; - if( 0==pBt->nTransaction ){ - pBt->inTransaction = TRANS_NONE; + /* Read all frames from the log file. */ + iFrame = 0; + for(iOffset=WAL_HDRSIZE; (iOffset+szFrame)<=nSize; iOffset+=szFrame){ + u32 pgno; /* Database page number for frame */ + u32 nTruncate; /* dbsize field from frame header */ + + /* Read and decode the next log frame. */ + iFrame++; + rc = sqlite3OsRead(pWal->pWalFd, aFrame, szFrame, iOffset); + if( rc!=SQLITE_OK ) break; + isValid = walDecodeFrame(pWal, &pgno, &nTruncate, aData, aFrame); + if( !isValid ) break; + rc = walIndexAppend(pWal, iFrame, pgno); + if( rc!=SQLITE_OK ) break; + + /* If nTruncate is non-zero, this is a commit record. */ + if( nTruncate ){ + pWal->hdr.mxFrame = iFrame; + pWal->hdr.nPage = nTruncate; + pWal->hdr.szPage = (u16)((szPage&0xff00) | (szPage>>16)); + testcase( szPage<=32768 ); + testcase( szPage>=65536 ); + aFrameCksum[0] = pWal->hdr.aFrameCksum[0]; + aFrameCksum[1] = pWal->hdr.aFrameCksum[1]; + } } + + sqlite3_free(aFrame); } - btreeClearHasContent(pBt); - p->inTrans = TRANS_NONE; - unlockBtreeIfUnused(pBt); +finished: + if( rc==SQLITE_OK ){ + volatile WalCkptInfo *pInfo; + int i; + pWal->hdr.aFrameCksum[0] = aFrameCksum[0]; + pWal->hdr.aFrameCksum[1] = aFrameCksum[1]; + walIndexWriteHdr(pWal); - btreeIntegrity(p); - sqlite3BtreeLeave(p); + /* Reset the checkpoint-header. This is safe because this thread is + ** currently holding locks that exclude all other readers, writers and + ** checkpointers. + */ + pInfo = walCkptInfo(pWal); + pInfo->nBackfill = 0; + pInfo->aReadMark[0] = 0; + for(i=1; iaReadMark[i] = READMARK_NOT_USED; + + /* If more than one frame was recovered from the log file, report an + ** event via sqlite3_log(). This is to help with identifying performance + ** problems caused by applications routinely shutting down without + ** checkpointing the log file. + */ + if( pWal->hdr.nPage ){ + sqlite3_log(SQLITE_OK, "Recovered %d frames from WAL file %s", + pWal->hdr.nPage, pWal->zWalName + ); + } + } + +recovery_error: + WALTRACE(("WAL%p: recovery %s\n", pWal, rc ? "failed" : "ok")); + walUnlockExclusive(pWal, iLock, nLock); return rc; } /* -** Start a statement subtransaction. The subtransaction can can be rolled -** back independently of the main transaction. You must start a transaction -** before starting a subtransaction. The subtransaction is ended automatically -** if the main transaction commits or rolls back. -** -** Statement subtransactions are used around individual SQL statements -** that are contained within a BEGIN...COMMIT block. If a constraint -** error occurs within the statement, the effect of that one statement -** can be rolled back without having to rollback the entire transaction. -** -** A statement sub-transaction is implemented as an anonymous savepoint. The -** value passed as the second parameter is the total number of savepoints, -** including the new anonymous savepoint, open on the B-Tree. i.e. if there -** are no active savepoints and no other statement-transactions open, -** iStatement is 1. This anonymous savepoint can be released or rolled back -** using the sqlite3BtreeSavepoint() function. +** Close an open wal-index. */ -SQLITE_PRIVATE int sqlite3BtreeBeginStmt(Btree *p, int iStatement){ - int rc; - BtShared *pBt = p->pBt; - sqlite3BtreeEnter(p); - assert( p->inTrans==TRANS_WRITE ); - assert( pBt->readOnly==0 ); - assert( iStatement>0 ); - assert( iStatement>p->db->nSavepoint ); - if( NEVER(p->inTrans!=TRANS_WRITE || pBt->readOnly) ){ - rc = SQLITE_INTERNAL; +static void walIndexClose(Wal *pWal, int isDelete){ + if( pWal->exclusiveMode==WAL_HEAPMEMORY_MODE ){ + int i; + for(i=0; inWiData; i++){ + sqlite3_free((void *)pWal->apWiData[i]); + pWal->apWiData[i] = 0; + } }else{ - assert( pBt->inTransaction==TRANS_WRITE ); - /* At the pager level, a statement transaction is a savepoint with - ** an index greater than all savepoints created explicitly using - ** SQL statements. It is illegal to open, release or rollback any - ** such savepoints while the statement transaction savepoint is active. - */ - rc = sqlite3PagerOpenSavepoint(pBt->pPager, iStatement); + sqlite3OsShmUnmap(pWal->pDbFd, isDelete); + } +} + +/* +** Open a connection to the WAL file zWalName. The database file must +** already be opened on connection pDbFd. The buffer that zWalName points +** to must remain valid for the lifetime of the returned Wal* handle. +** +** A SHARED lock should be held on the database file when this function +** is called. The purpose of this SHARED lock is to prevent any other +** client from unlinking the WAL or wal-index file. If another process +** were to do this just after this client opened one of these files, the +** system would be badly broken. +** +** If the log file is successfully opened, SQLITE_OK is returned and +** *ppWal is set to point to a new WAL handle. If an error occurs, +** an SQLite error code is returned and *ppWal is left unmodified. +*/ +SQLITE_PRIVATE int sqlite3WalOpen( + sqlite3_vfs *pVfs, /* vfs module to open wal and wal-index */ + sqlite3_file *pDbFd, /* The open database file */ + const char *zWalName, /* Name of the WAL file */ + int bNoShm, /* True to run in heap-memory mode */ + i64 mxWalSize, /* Truncate WAL to this size on reset */ + Wal **ppWal /* OUT: Allocated Wal handle */ +){ + int rc; /* Return Code */ + Wal *pRet; /* Object to allocate and return */ + int flags; /* Flags passed to OsOpen() */ + + assert( zWalName && zWalName[0] ); + assert( pDbFd ); + + /* In the amalgamation, the os_unix.c and os_win.c source files come before + ** this source file. Verify that the #defines of the locking byte offsets + ** in os_unix.c and os_win.c agree with the WALINDEX_LOCK_OFFSET value. + */ +#ifdef WIN_SHM_BASE + assert( WIN_SHM_BASE==WALINDEX_LOCK_OFFSET ); +#endif +#ifdef UNIX_SHM_BASE + assert( UNIX_SHM_BASE==WALINDEX_LOCK_OFFSET ); +#endif + + + /* Allocate an instance of struct Wal to return. */ + *ppWal = 0; + pRet = (Wal*)sqlite3MallocZero(sizeof(Wal) + pVfs->szOsFile); + if( !pRet ){ + return SQLITE_NOMEM; + } + + pRet->pVfs = pVfs; + pRet->pWalFd = (sqlite3_file *)&pRet[1]; + pRet->pDbFd = pDbFd; + pRet->readLock = -1; + pRet->mxWalSize = mxWalSize; + pRet->zWalName = zWalName; + pRet->syncHeader = 1; + pRet->padToSectorBoundary = 1; + pRet->exclusiveMode = (bNoShm ? WAL_HEAPMEMORY_MODE: WAL_NORMAL_MODE); + + /* Open file handle on the write-ahead log file. */ + flags = (SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE|SQLITE_OPEN_WAL); + rc = sqlite3OsOpen(pVfs, zWalName, pRet->pWalFd, flags, &flags); + if( rc==SQLITE_OK && flags&SQLITE_OPEN_READONLY ){ + pRet->readOnly = WAL_RDONLY; + } + + if( rc!=SQLITE_OK ){ + walIndexClose(pRet, 0); + sqlite3OsClose(pRet->pWalFd); + sqlite3_free(pRet); + }else{ + int iDC = sqlite3OsDeviceCharacteristics(pRet->pWalFd); + if( iDC & SQLITE_IOCAP_SEQUENTIAL ){ pRet->syncHeader = 0; } + if( iDC & SQLITE_IOCAP_POWERSAFE_OVERWRITE ){ + pRet->padToSectorBoundary = 0; + } + *ppWal = pRet; + WALTRACE(("WAL%d: opened\n", pRet)); } - sqlite3BtreeLeave(p); return rc; } /* -** The second argument to this function, op, is always SAVEPOINT_ROLLBACK -** or SAVEPOINT_RELEASE. This function either releases or rolls back the -** savepoint identified by parameter iSavepoint, depending on the value -** of op. +** Change the size to which the WAL file is trucated on each reset. +*/ +SQLITE_PRIVATE void sqlite3WalLimit(Wal *pWal, i64 iLimit){ + if( pWal ) pWal->mxWalSize = iLimit; +} + +/* +** Find the smallest page number out of all pages held in the WAL that +** has not been returned by any prior invocation of this method on the +** same WalIterator object. Write into *piFrame the frame index where +** that page was last written into the WAL. Write into *piPage the page +** number. ** -** Normally, iSavepoint is greater than or equal to zero. However, if op is -** SAVEPOINT_ROLLBACK, then iSavepoint may also be -1. In this case the -** contents of the entire transaction are rolled back. This is different -** from a normal transaction rollback, as no locks are released and the -** transaction remains open. +** Return 0 on success. If there are no pages in the WAL with a page +** number larger than *piPage, then return 1. */ -SQLITE_PRIVATE int sqlite3BtreeSavepoint(Btree *p, int op, int iSavepoint){ - int rc = SQLITE_OK; - if( p && p->inTrans==TRANS_WRITE ){ - BtShared *pBt = p->pBt; - assert( op==SAVEPOINT_RELEASE || op==SAVEPOINT_ROLLBACK ); - assert( iSavepoint>=0 || (iSavepoint==-1 && op==SAVEPOINT_ROLLBACK) ); - sqlite3BtreeEnter(p); - rc = sqlite3PagerSavepoint(pBt->pPager, op, iSavepoint); - if( rc==SQLITE_OK ){ - rc = newDatabase(pBt); +static int walIteratorNext( + WalIterator *p, /* Iterator */ + u32 *piPage, /* OUT: The page number of the next page */ + u32 *piFrame /* OUT: Wal frame index of next page */ +){ + u32 iMin; /* Result pgno must be greater than iMin */ + u32 iRet = 0xFFFFFFFF; /* 0xffffffff is never a valid page number */ + int i; /* For looping through segments */ + + iMin = p->iPrior; + assert( iMin<0xffffffff ); + for(i=p->nSegment-1; i>=0; i--){ + struct WalSegment *pSegment = &p->aSegment[i]; + while( pSegment->iNextnEntry ){ + u32 iPg = pSegment->aPgno[pSegment->aIndex[pSegment->iNext]]; + if( iPg>iMin ){ + if( iPgiZero + pSegment->aIndex[pSegment->iNext]; + } + break; + } + pSegment->iNext++; } - sqlite3BtreeLeave(p); } - return rc; + + *piPage = p->iPrior = iRet; + return (iRet==0xFFFFFFFF); } /* -** Create a new cursor for the BTree whose root is on the page -** iTable. The act of acquiring a cursor gets a read lock on -** the database file. +** This function merges two sorted lists into a single sorted list. ** -** If wrFlag==0, then the cursor can only be used for reading. -** If wrFlag==1, then the cursor can be used for reading or for -** writing if other conditions for writing are also met. These -** are the conditions that must be met in order for writing to -** be allowed: +** aLeft[] and aRight[] are arrays of indices. The sort key is +** aContent[aLeft[]] and aContent[aRight[]]. Upon entry, the following +** is guaranteed for all J0 && nRight>0 ); + while( iRight=nRight || aContent[aLeft[iLeft]]=nLeft || aContent[aLeft[iLeft]]>dbpage ); + assert( iRight>=nRight || aContent[aRight[iRight]]>dbpage ); + } + + *paRight = aLeft; + *pnRight = iOut; + memcpy(aLeft, aTmp, sizeof(aTmp[0])*iOut); +} + +/* +** Sort the elements in list aList using aContent[] as the sort key. +** Remove elements with duplicate keys, preferring to keep the +** larger aList[] values. +** +** The aList[] entries are indices into aContent[]. The values in +** aList[] are to be sorted so that for all JpBt; + struct Sublist { + int nList; /* Number of elements in aList */ + ht_slot *aList; /* Pointer to sub-list content */ + }; - assert( sqlite3BtreeHoldsMutex(p) ); - assert( wrFlag==0 || wrFlag==1 ); - if( wrFlag ){ - assert( !pBt->readOnly ); - if( NEVER(pBt->readOnly) ){ - return SQLITE_READONLY; - } - rc = checkForReadConflicts(p, iTable, 0, 0); - if( rc!=SQLITE_OK ){ - assert( rc==SQLITE_LOCKED_SHAREDCACHE ); - return rc; + const int nList = *pnList; /* Size of input list */ + int nMerge = 0; /* Number of elements in list aMerge */ + ht_slot *aMerge = 0; /* List to be merged */ + int iList; /* Index into input list */ + int iSub = 0; /* Index into aSub array */ + struct Sublist aSub[13]; /* Array of sub-lists */ + + memset(aSub, 0, sizeof(aSub)); + assert( nList<=HASHTABLE_NPAGE && nList>0 ); + assert( HASHTABLE_NPAGE==(1<<(ArraySize(aSub)-1)) ); + + for(iList=0; iListaList && p->nList<=(1<aList==&aList[iList&~((2<aList, p->nList, &aMerge, &nMerge, aBuffer); } + aSub[iSub].aList = aMerge; + aSub[iSub].nList = nMerge; } - if( pBt->pPage1==0 ){ - rc = lockBtreeWithRetry(p); - if( rc!=SQLITE_OK ){ - return rc; + for(iSub++; iSubnList<=(1<aList==&aList[nList&~((2<aList, p->nList, &aMerge, &nMerge, aBuffer); } } - pCur->pgnoRoot = (Pgno)iTable; - rc = sqlite3PagerPagecount(pBt->pPager, (int *)&nPage); - if( rc!=SQLITE_OK ){ - return rc; - } - if( iTable==1 && nPage==0 ){ - rc = SQLITE_EMPTY; - goto create_cursor_exception; + assert( aMerge==aList ); + *pnList = nMerge; + +#ifdef SQLITE_DEBUG + { + int i; + for(i=1; i<*pnList; i++){ + assert( aContent[aList[i]] > aContent[aList[i-1]] ); + } } - rc = getAndInitPage(pBt, pCur->pgnoRoot, &pCur->apPage[0]); - if( rc!=SQLITE_OK ){ - goto create_cursor_exception; +#endif +} + +/* +** Free an iterator allocated by walIteratorInit(). +*/ +static void walIteratorFree(WalIterator *p){ + sqlite3ScratchFree(p); +} + +/* +** Construct a WalInterator object that can be used to loop over all +** pages in the WAL in ascending order. The caller must hold the checkpoint +** lock. +** +** On success, make *pp point to the newly allocated WalInterator object +** return SQLITE_OK. Otherwise, return an error code. If this routine +** returns an error, the value of *pp is undefined. +** +** The calling routine should invoke walIteratorFree() to destroy the +** WalIterator object when it has finished with it. +*/ +static int walIteratorInit(Wal *pWal, WalIterator **pp){ + WalIterator *p; /* Return value */ + int nSegment; /* Number of segments to merge */ + u32 iLast; /* Last frame in log */ + int nByte; /* Number of bytes to allocate */ + int i; /* Iterator variable */ + ht_slot *aTmp; /* Temp space used by merge-sort */ + int rc = SQLITE_OK; /* Return Code */ + + /* This routine only runs while holding the checkpoint lock. And + ** it only runs if there is actually content in the log (mxFrame>0). + */ + assert( pWal->ckptLock && pWal->hdr.mxFrame>0 ); + iLast = pWal->hdr.mxFrame; + + /* Allocate space for the WalIterator object. */ + nSegment = walFramePage(iLast) + 1; + nByte = sizeof(WalIterator) + + (nSegment-1)*sizeof(struct WalSegment) + + iLast*sizeof(ht_slot); + p = (WalIterator *)sqlite3ScratchMalloc(nByte); + if( !p ){ + return SQLITE_NOMEM; } + memset(p, 0, nByte); + p->nSegment = nSegment; - /* Now that no other errors can occur, finish filling in the BtCursor - ** variables, link the cursor into the BtShared list and set *ppCur (the - ** output argument to this function). + /* Allocate temporary space used by the merge-sort routine. This block + ** of memory will be freed before this function returns. */ - pCur->pKeyInfo = pKeyInfo; - pCur->pBtree = p; - pCur->pBt = pBt; - pCur->wrFlag = (u8)wrFlag; - pCur->pNext = pBt->pCursor; - if( pCur->pNext ){ - pCur->pNext->pPrev = pCur; + aTmp = (ht_slot *)sqlite3ScratchMalloc( + sizeof(ht_slot) * (iLast>HASHTABLE_NPAGE?HASHTABLE_NPAGE:iLast) + ); + if( !aTmp ){ + rc = SQLITE_NOMEM; } - pBt->pCursor = pCur; - pCur->eState = CURSOR_INVALID; - pCur->cachedRowid = 0; - return SQLITE_OK; + for(i=0; rc==SQLITE_OK && iaSegment[p->nSegment])[iZero]; + iZero++; + + for(j=0; jaSegment[i].iZero = iZero; + p->aSegment[i].nEntry = nEntry; + p->aSegment[i].aIndex = aIndex; + p->aSegment[i].aPgno = (u32 *)aPgno; + } + } + sqlite3ScratchFree(aTmp); -create_cursor_exception: - releasePage(pCur->apPage[0]); - unlockBtreeIfUnused(pBt); + if( rc!=SQLITE_OK ){ + walIteratorFree(p); + } + *pp = p; return rc; } -SQLITE_PRIVATE int sqlite3BtreeCursor( - Btree *p, /* The btree */ - int iTable, /* Root page of table to open */ - int wrFlag, /* 1 to write. 0 read-only */ - struct KeyInfo *pKeyInfo, /* First arg to xCompare() */ - BtCursor *pCur /* Write new cursor here */ + +/* +** Attempt to obtain the exclusive WAL lock defined by parameters lockIdx and +** n. If the attempt fails and parameter xBusy is not NULL, then it is a +** busy-handler function. Invoke it and retry the lock until either the +** lock is successfully obtained or the busy-handler returns 0. +*/ +static int walBusyLock( + Wal *pWal, /* WAL connection */ + int (*xBusy)(void*), /* Function to call when busy */ + void *pBusyArg, /* Context argument for xBusyHandler */ + int lockIdx, /* Offset of first byte to lock */ + int n /* Number of bytes to lock */ ){ int rc; - sqlite3BtreeEnter(p); - rc = btreeCursor(p, iTable, wrFlag, pKeyInfo, pCur); - sqlite3BtreeLeave(p); + do { + rc = walLockExclusive(pWal, lockIdx, n); + }while( xBusy && rc==SQLITE_BUSY && xBusy(pBusyArg) ); return rc; } /* -** Return the size of a BtCursor object in bytes. -** -** This interfaces is needed so that users of cursors can preallocate -** sufficient storage to hold a cursor. The BtCursor object is opaque -** to users so they cannot do the sizeof() themselves - they must call -** this routine. +** The cache of the wal-index header must be valid to call this function. +** Return the page-size in bytes used by the database. */ -SQLITE_PRIVATE int sqlite3BtreeCursorSize(void){ - return sizeof(BtCursor); +static int walPagesize(Wal *pWal){ + return (pWal->hdr.szPage&0xfe00) + ((pWal->hdr.szPage&0x0001)<<16); } /* -** Set the cached rowid value of every cursor in the same database file -** as pCur and having the same root page number as pCur. The value is -** set to iRowid. +** Copy as much content as we can from the WAL back into the database file +** in response to an sqlite3_wal_checkpoint() request or the equivalent. ** -** Only positive rowid values are considered valid for this cache. -** The cache is initialized to zero, indicating an invalid cache. -** A btree will work fine with zero or negative rowids. We just cannot -** cache zero or negative rowids, which means tables that use zero or -** negative rowids might run a little slower. But in practice, zero -** or negative rowids are very uncommon so this should not be a problem. +** The amount of information copies from WAL to database might be limited +** by active readers. This routine will never overwrite a database page +** that a concurrent reader might be using. +** +** All I/O barrier operations (a.k.a fsyncs) occur in this routine when +** SQLite is in WAL-mode in synchronous=NORMAL. That means that if +** checkpoints are always run by a background thread or background +** process, foreground threads will never block on a lengthy fsync call. +** +** Fsync is called on the WAL before writing content out of the WAL and +** into the database. This ensures that if the new content is persistent +** in the WAL and can be recovered following a power-loss or hard reset. +** +** Fsync is also called on the database file if (and only if) the entire +** WAL content is copied into the database file. This second fsync makes +** it safe to delete the WAL since the new content will persist in the +** database file. +** +** This routine uses and updates the nBackfill field of the wal-index header. +** This is the only routine tha will increase the value of nBackfill. +** (A WAL reset or recovery will revert nBackfill to zero, but not increase +** its value.) +** +** The caller must be holding sufficient locks to ensure that no other +** checkpoint is running (in any other thread or process) at the same +** time. */ -SQLITE_PRIVATE void sqlite3BtreeSetCachedRowid(BtCursor *pCur, sqlite3_int64 iRowid){ - BtCursor *p; - for(p=pCur->pBt->pCursor; p; p=p->pNext){ - if( p->pgnoRoot==pCur->pgnoRoot ) p->cachedRowid = iRowid; +static int walCheckpoint( + Wal *pWal, /* Wal connection */ + int eMode, /* One of PASSIVE, FULL or RESTART */ + int (*xBusyCall)(void*), /* Function to call when busy */ + void *pBusyArg, /* Context argument for xBusyHandler */ + int sync_flags, /* Flags for OsSync() (or 0) */ + u8 *zBuf /* Temporary buffer to use */ +){ + int rc; /* Return code */ + int szPage; /* Database page-size */ + WalIterator *pIter = 0; /* Wal iterator context */ + u32 iDbpage = 0; /* Next database page to write */ + u32 iFrame = 0; /* Wal frame containing data for iDbpage */ + u32 mxSafeFrame; /* Max frame that can be backfilled */ + u32 mxPage; /* Max database page to write */ + int i; /* Loop counter */ + volatile WalCkptInfo *pInfo; /* The checkpoint status information */ + int (*xBusy)(void*) = 0; /* Function to call when waiting for locks */ + + szPage = walPagesize(pWal); + testcase( szPage<=32768 ); + testcase( szPage>=65536 ); + pInfo = walCkptInfo(pWal); + if( pInfo->nBackfill>=pWal->hdr.mxFrame ) return SQLITE_OK; + + /* Allocate the iterator */ + rc = walIteratorInit(pWal, &pIter); + if( rc!=SQLITE_OK ){ + return rc; } - assert( pCur->cachedRowid==iRowid ); -} + assert( pIter ); -/* -** Return the cached rowid for the given cursor. A negative or zero -** return value indicates that the rowid cache is invalid and should be -** ignored. If the rowid cache has never before been set, then a -** zero is returned. -*/ -SQLITE_PRIVATE sqlite3_int64 sqlite3BtreeGetCachedRowid(BtCursor *pCur){ - return pCur->cachedRowid; -} + if( eMode!=SQLITE_CHECKPOINT_PASSIVE ) xBusy = xBusyCall; -/* -** Close a cursor. The read lock on the database file is released -** when the last cursor is closed. -*/ -SQLITE_PRIVATE int sqlite3BtreeCloseCursor(BtCursor *pCur){ - Btree *pBtree = pCur->pBtree; - if( pBtree ){ - int i; - BtShared *pBt = pCur->pBt; - sqlite3BtreeEnter(pBtree); - sqlite3BtreeClearCursor(pCur); - if( pCur->pPrev ){ - pCur->pPrev->pNext = pCur->pNext; - }else{ - pBt->pCursor = pCur->pNext; + /* Compute in mxSafeFrame the index of the last frame of the WAL that is + ** safe to write into the database. Frames beyond mxSafeFrame might + ** overwrite database pages that are in use by active readers and thus + ** cannot be backfilled from the WAL. + */ + mxSafeFrame = pWal->hdr.mxFrame; + mxPage = pWal->hdr.nPage; + for(i=1; iaReadMark[i]; + if( mxSafeFrame>y ){ + assert( y<=pWal->hdr.mxFrame ); + rc = walBusyLock(pWal, xBusy, pBusyArg, WAL_READ_LOCK(i), 1); + if( rc==SQLITE_OK ){ + pInfo->aReadMark[i] = READMARK_NOT_USED; + walUnlockExclusive(pWal, WAL_READ_LOCK(i), 1); + }else if( rc==SQLITE_BUSY ){ + mxSafeFrame = y; + xBusy = 0; + }else{ + goto walcheckpoint_out; + } } - if( pCur->pNext ){ - pCur->pNext->pPrev = pCur->pPrev; + } + + if( pInfo->nBackfillnBackfill; + + /* Sync the WAL to disk */ + if( sync_flags ){ + rc = sqlite3OsSync(pWal->pWalFd, sync_flags); } - for(i=0; i<=pCur->iPage; i++){ - releasePage(pCur->apPage[i]); + + /* If the database file may grow as a result of this checkpoint, hint + ** about the eventual size of the db file to the VFS layer. + */ + if( rc==SQLITE_OK ){ + i64 nReq = ((i64)mxPage * szPage); + rc = sqlite3OsFileSize(pWal->pDbFd, &nSize); + if( rc==SQLITE_OK && nSizepDbFd, SQLITE_FCNTL_SIZE_HINT, &nReq); + } } - unlockBtreeIfUnused(pBt); - invalidateOverflowCache(pCur); - /* sqlite3_free(pCur); */ - sqlite3BtreeLeave(pBtree); + + /* Iterate through the contents of the WAL, copying data to the db file. */ + while( rc==SQLITE_OK && 0==walIteratorNext(pIter, &iDbpage, &iFrame) ){ + i64 iOffset; + assert( walFramePgno(pWal, iFrame)==iDbpage ); + if( iFrame<=nBackfill || iFrame>mxSafeFrame || iDbpage>mxPage ) continue; + iOffset = walFrameOffset(iFrame, szPage) + WAL_FRAME_HDRSIZE; + /* testcase( IS_BIG_INT(iOffset) ); // requires a 4GiB WAL file */ + rc = sqlite3OsRead(pWal->pWalFd, zBuf, szPage, iOffset); + if( rc!=SQLITE_OK ) break; + iOffset = (iDbpage-1)*(i64)szPage; + testcase( IS_BIG_INT(iOffset) ); + rc = sqlite3OsWrite(pWal->pDbFd, zBuf, szPage, iOffset); + if( rc!=SQLITE_OK ) break; + } + + /* If work was actually accomplished... */ + if( rc==SQLITE_OK ){ + if( mxSafeFrame==walIndexHdr(pWal)->mxFrame ){ + i64 szDb = pWal->hdr.nPage*(i64)szPage; + testcase( IS_BIG_INT(szDb) ); + rc = sqlite3OsTruncate(pWal->pDbFd, szDb); + if( rc==SQLITE_OK && sync_flags ){ + rc = sqlite3OsSync(pWal->pDbFd, sync_flags); + } + } + if( rc==SQLITE_OK ){ + pInfo->nBackfill = mxSafeFrame; + } + } + + /* Release the reader lock held while backfilling */ + walUnlockExclusive(pWal, WAL_READ_LOCK(0), 1); } - return SQLITE_OK; + + if( rc==SQLITE_BUSY ){ + /* Reset the return code so as not to report a checkpoint failure + ** just because there are active readers. */ + rc = SQLITE_OK; + } + + /* If this is an SQLITE_CHECKPOINT_RESTART operation, and the entire wal + ** file has been copied into the database file, then block until all + ** readers have finished using the wal file. This ensures that the next + ** process to write to the database restarts the wal file. + */ + if( rc==SQLITE_OK && eMode!=SQLITE_CHECKPOINT_PASSIVE ){ + assert( pWal->writeLock ); + if( pInfo->nBackfillhdr.mxFrame ){ + rc = SQLITE_BUSY; + }else if( eMode==SQLITE_CHECKPOINT_RESTART ){ + assert( mxSafeFrame==pWal->hdr.mxFrame ); + rc = walBusyLock(pWal, xBusy, pBusyArg, WAL_READ_LOCK(1), WAL_NREADER-1); + if( rc==SQLITE_OK ){ + walUnlockExclusive(pWal, WAL_READ_LOCK(1), WAL_NREADER-1); + } + } + } + + walcheckpoint_out: + walIteratorFree(pIter); + return rc; } -#ifdef SQLITE_TEST /* -** Make a temporary cursor by filling in the fields of pTempCur. -** The temporary cursor is not on the cursor list for the Btree. +** If the WAL file is currently larger than nMax bytes in size, truncate +** it to exactly nMax bytes. If an error occurs while doing so, ignore it. */ -SQLITE_PRIVATE void sqlite3BtreeGetTempCursor(BtCursor *pCur, BtCursor *pTempCur){ - int i; - assert( cursorHoldsMutex(pCur) ); - memcpy(pTempCur, pCur, sizeof(BtCursor)); - pTempCur->pNext = 0; - pTempCur->pPrev = 0; - for(i=0; i<=pTempCur->iPage; i++){ - sqlite3PagerRef(pTempCur->apPage[i]->pDbPage); +static void walLimitSize(Wal *pWal, i64 nMax){ + i64 sz; + int rx; + sqlite3BeginBenignMalloc(); + rx = sqlite3OsFileSize(pWal->pWalFd, &sz); + if( rx==SQLITE_OK && (sz > nMax ) ){ + rx = sqlite3OsTruncate(pWal->pWalFd, nMax); + } + sqlite3EndBenignMalloc(); + if( rx ){ + sqlite3_log(rx, "cannot limit WAL size: %s", pWal->zWalName); } - assert( pTempCur->pKey==0 ); } -#endif /* SQLITE_TEST */ -#ifdef SQLITE_TEST /* -** Delete a temporary cursor such as was made by the CreateTemporaryCursor() -** function above. +** Close a connection to a log file. */ -SQLITE_PRIVATE void sqlite3BtreeReleaseTempCursor(BtCursor *pCur){ - int i; - assert( cursorHoldsMutex(pCur) ); - for(i=0; i<=pCur->iPage; i++){ - sqlite3PagerUnref(pCur->apPage[i]->pDbPage); +SQLITE_PRIVATE int sqlite3WalClose( + Wal *pWal, /* Wal to close */ + int sync_flags, /* Flags to pass to OsSync() (or 0) */ + int nBuf, + u8 *zBuf /* Buffer of at least nBuf bytes */ +){ + int rc = SQLITE_OK; + if( pWal ){ + int isDelete = 0; /* True to unlink wal and wal-index files */ + + /* If an EXCLUSIVE lock can be obtained on the database file (using the + ** ordinary, rollback-mode locking methods, this guarantees that the + ** connection associated with this log file is the only connection to + ** the database. In this case checkpoint the database and unlink both + ** the wal and wal-index files. + ** + ** The EXCLUSIVE lock is not released before returning. + */ + rc = sqlite3OsLock(pWal->pDbFd, SQLITE_LOCK_EXCLUSIVE); + if( rc==SQLITE_OK ){ + if( pWal->exclusiveMode==WAL_NORMAL_MODE ){ + pWal->exclusiveMode = WAL_EXCLUSIVE_MODE; + } + rc = sqlite3WalCheckpoint( + pWal, SQLITE_CHECKPOINT_PASSIVE, 0, 0, sync_flags, nBuf, zBuf, 0, 0 + ); + if( rc==SQLITE_OK ){ + int bPersist = -1; + sqlite3OsFileControlHint( + pWal->pDbFd, SQLITE_FCNTL_PERSIST_WAL, &bPersist + ); + if( bPersist!=1 ){ + /* Try to delete the WAL file if the checkpoint completed and + ** fsyned (rc==SQLITE_OK) and if we are not in persistent-wal + ** mode (!bPersist) */ + isDelete = 1; + }else if( pWal->mxWalSize>=0 ){ + /* Try to truncate the WAL file to zero bytes if the checkpoint + ** completed and fsynced (rc==SQLITE_OK) and we are in persistent + ** WAL mode (bPersist) and if the PRAGMA journal_size_limit is a + ** non-negative value (pWal->mxWalSize>=0). Note that we truncate + ** to zero bytes as truncating to the journal_size_limit might + ** leave a corrupt WAL file on disk. */ + walLimitSize(pWal, 0); + } + } + } + + walIndexClose(pWal, isDelete); + sqlite3OsClose(pWal->pWalFd); + if( isDelete ){ + sqlite3BeginBenignMalloc(); + sqlite3OsDelete(pWal->pVfs, pWal->zWalName, 0); + sqlite3EndBenignMalloc(); + } + WALTRACE(("WAL%p: closed\n", pWal)); + sqlite3_free((void *)pWal->apWiData); + sqlite3_free(pWal); } - sqlite3_free(pCur->pKey); + return rc; } -#endif /* SQLITE_TEST */ /* -** Make sure the BtCursor* given in the argument has a valid -** BtCursor.info structure. If it is not already valid, call -** sqlite3BtreeParseCell() to fill it in. +** Try to read the wal-index header. Return 0 on success and 1 if +** there is a problem. ** -** BtCursor.info is a cache of the information in the current cell. -** Using this cache reduces the number of calls to sqlite3BtreeParseCell(). +** The wal-index is in shared memory. Another thread or process might +** be writing the header at the same time this procedure is trying to +** read it, which might result in inconsistency. A dirty read is detected +** by verifying that both copies of the header are the same and also by +** a checksum on the header. ** -** 2007-06-25: There is a bug in some versions of MSVC that cause the -** compiler to crash when getCellInfo() is implemented as a macro. -** But there is a measureable speed advantage to using the macro on gcc -** (when less compiler optimizations like -Os or -O0 are used and the -** compiler is not doing agressive inlining.) So we use a real function -** for MSVC and a macro for everything else. Ticket #2457. +** If and only if the read is consistent and the header is different from +** pWal->hdr, then pWal->hdr is updated to the content of the new header +** and *pChanged is set to 1. +** +** If the checksum cannot be verified return non-zero. If the header +** is read successfully and the checksum verified, return zero. */ -#ifndef NDEBUG - static void assertCellInfo(BtCursor *pCur){ - CellInfo info; - int iPage = pCur->iPage; - memset(&info, 0, sizeof(info)); - sqlite3BtreeParseCell(pCur->apPage[iPage], pCur->aiIdx[iPage], &info); - assert( memcmp(&info, &pCur->info, sizeof(info))==0 ); +static int walIndexTryHdr(Wal *pWal, int *pChanged){ + u32 aCksum[2]; /* Checksum on the header content */ + WalIndexHdr h1, h2; /* Two copies of the header content */ + WalIndexHdr volatile *aHdr; /* Header in shared memory */ + + /* The first page of the wal-index must be mapped at this point. */ + assert( pWal->nWiData>0 && pWal->apWiData[0] ); + + /* Read the header. This might happen concurrently with a write to the + ** same area of shared memory on a different CPU in a SMP, + ** meaning it is possible that an inconsistent snapshot is read + ** from the file. If this happens, return non-zero. + ** + ** There are two copies of the header at the beginning of the wal-index. + ** When reading, read [0] first then [1]. Writes are in the reverse order. + ** Memory barriers are used to prevent the compiler or the hardware from + ** reordering the reads and writes. + */ + aHdr = walIndexHdr(pWal); + memcpy(&h1, (void *)&aHdr[0], sizeof(h1)); + walShmBarrier(pWal); + memcpy(&h2, (void *)&aHdr[1], sizeof(h2)); + + if( memcmp(&h1, &h2, sizeof(h1))!=0 ){ + return 1; /* Dirty read */ + } + if( h1.isInit==0 ){ + return 1; /* Malformed header - probably all zeros */ } -#else - #define assertCellInfo(x) -#endif -#ifdef _MSC_VER - /* Use a real function in MSVC to work around bugs in that compiler. */ - static void getCellInfo(BtCursor *pCur){ - if( pCur->info.nSize==0 ){ - int iPage = pCur->iPage; - sqlite3BtreeParseCell(pCur->apPage[iPage],pCur->aiIdx[iPage],&pCur->info); - pCur->validNKey = 1; - }else{ - assertCellInfo(pCur); - } + walChecksumBytes(1, (u8*)&h1, sizeof(h1)-sizeof(h1.aCksum), 0, aCksum); + if( aCksum[0]!=h1.aCksum[0] || aCksum[1]!=h1.aCksum[1] ){ + return 1; /* Checksum does not match */ } -#else /* if not _MSC_VER */ - /* Use a macro in all other compilers so that the function is inlined */ -#define getCellInfo(pCur) \ - if( pCur->info.nSize==0 ){ \ - int iPage = pCur->iPage; \ - sqlite3BtreeParseCell(pCur->apPage[iPage],pCur->aiIdx[iPage],&pCur->info); \ - pCur->validNKey = 1; \ - }else{ \ - assertCellInfo(pCur); \ + + if( memcmp(&pWal->hdr, &h1, sizeof(WalIndexHdr)) ){ + *pChanged = 1; + memcpy(&pWal->hdr, &h1, sizeof(WalIndexHdr)); + pWal->szPage = (pWal->hdr.szPage&0xfe00) + ((pWal->hdr.szPage&0x0001)<<16); + testcase( pWal->szPage<=32768 ); + testcase( pWal->szPage>=65536 ); } -#endif /* _MSC_VER */ + + /* The header was successfully read. Return zero. */ + return 0; +} /* -** Set *pSize to the size of the buffer needed to hold the value of -** the key for the current entry. If the cursor is not pointing -** to a valid entry, *pSize is set to 0. +** Read the wal-index header from the wal-index and into pWal->hdr. +** If the wal-header appears to be corrupt, try to reconstruct the +** wal-index from the WAL before returning. ** -** For a table with the INTKEY flag set, this routine returns the key -** itself, not the number of bytes in the key. +** Set *pChanged to 1 if the wal-index header value in pWal->hdr is +** changed by this opertion. If pWal->hdr is unchanged, set *pChanged +** to 0. +** +** If the wal-index header is successfully read, return SQLITE_OK. +** Otherwise an SQLite error code. */ -SQLITE_PRIVATE int sqlite3BtreeKeySize(BtCursor *pCur, i64 *pSize){ - int rc; +static int walIndexReadHdr(Wal *pWal, int *pChanged){ + int rc; /* Return code */ + int badHdr; /* True if a header read failed */ + volatile u32 *page0; /* Chunk of wal-index containing header */ - assert( cursorHoldsMutex(pCur) ); - rc = restoreCursorPosition(pCur); - if( rc==SQLITE_OK ){ - assert( pCur->eState==CURSOR_INVALID || pCur->eState==CURSOR_VALID ); - if( pCur->eState==CURSOR_INVALID ){ - *pSize = 0; - }else{ - getCellInfo(pCur); - *pSize = pCur->info.nKey; + /* Ensure that page 0 of the wal-index (the page that contains the + ** wal-index header) is mapped. Return early if an error occurs here. + */ + assert( pChanged ); + rc = walIndexPage(pWal, 0, &page0); + if( rc!=SQLITE_OK ){ + return rc; + }; + assert( page0 || pWal->writeLock==0 ); + + /* If the first page of the wal-index has been mapped, try to read the + ** wal-index header immediately, without holding any lock. This usually + ** works, but may fail if the wal-index header is corrupt or currently + ** being modified by another thread or process. + */ + badHdr = (page0 ? walIndexTryHdr(pWal, pChanged) : 1); + + /* If the first attempt failed, it might have been due to a race + ** with a writer. So get a WRITE lock and try again. + */ + assert( badHdr==0 || pWal->writeLock==0 ); + if( badHdr ){ + if( pWal->readOnly & WAL_SHM_RDONLY ){ + if( SQLITE_OK==(rc = walLockShared(pWal, WAL_WRITE_LOCK)) ){ + walUnlockShared(pWal, WAL_WRITE_LOCK); + rc = SQLITE_READONLY_RECOVERY; + } + }else if( SQLITE_OK==(rc = walLockExclusive(pWal, WAL_WRITE_LOCK, 1)) ){ + pWal->writeLock = 1; + if( SQLITE_OK==(rc = walIndexPage(pWal, 0, &page0)) ){ + badHdr = walIndexTryHdr(pWal, pChanged); + if( badHdr ){ + /* If the wal-index header is still malformed even while holding + ** a WRITE lock, it can only mean that the header is corrupted and + ** needs to be reconstructed. So run recovery to do exactly that. + */ + rc = walIndexRecover(pWal); + *pChanged = 1; + } + } + pWal->writeLock = 0; + walUnlockExclusive(pWal, WAL_WRITE_LOCK, 1); } } - return rc; -} - -/* -** Set *pSize to the number of bytes of data in the entry the -** cursor currently points to. Always return SQLITE_OK. -** Failure is not possible. If the cursor is not currently -** pointing to an entry (which can happen, for example, if -** the database is empty) then *pSize is set to 0. -*/ -SQLITE_PRIVATE int sqlite3BtreeDataSize(BtCursor *pCur, u32 *pSize){ - int rc; - assert( cursorHoldsMutex(pCur) ); - rc = restoreCursorPosition(pCur); - if( rc==SQLITE_OK ){ - assert( pCur->eState==CURSOR_INVALID || pCur->eState==CURSOR_VALID ); - if( pCur->eState==CURSOR_INVALID ){ - /* Not pointing at a valid entry - set *pSize to 0. */ - *pSize = 0; - }else{ - getCellInfo(pCur); - *pSize = pCur->info.nData; - } + /* If the header is read successfully, check the version number to make + ** sure the wal-index was not constructed with some future format that + ** this version of SQLite cannot understand. + */ + if( badHdr==0 && pWal->hdr.iVersion!=WALINDEX_MAX_VERSION ){ + rc = SQLITE_CANTOPEN_BKPT; } + return rc; } /* -** Given the page number of an overflow page in the database (parameter -** ovfl), this function finds the page number of the next page in the -** linked list of overflow pages. If possible, it uses the auto-vacuum -** pointer-map data instead of reading the content of page ovfl to do so. -** -** If an error occurs an SQLite error code is returned. Otherwise: -** -** The page number of the next overflow page in the linked list is -** written to *pPgnoNext. If page ovfl is the last page in its linked -** list, *pPgnoNext is set to zero. -** -** If ppPage is not NULL, and a reference to the MemPage object corresponding -** to page number pOvfl was obtained, then *ppPage is set to point to that -** reference. It is the responsibility of the caller to call releasePage() -** on *ppPage to free the reference. In no reference was obtained (because -** the pointer-map was used to obtain the value for *pPgnoNext), then -** *ppPage is set to zero. -*/ -static int getOverflowPage( - BtShared *pBt, - Pgno ovfl, /* Overflow page */ - MemPage **ppPage, /* OUT: MemPage handle (may be NULL) */ - Pgno *pPgnoNext /* OUT: Next overflow page number */ -){ - Pgno next = 0; - MemPage *pPage = 0; - int rc = SQLITE_OK; +** This is the value that walTryBeginRead returns when it needs to +** be retried. +*/ +#define WAL_RETRY (-1) + +/* +** Attempt to start a read transaction. This might fail due to a race or +** other transient condition. When that happens, it returns WAL_RETRY to +** indicate to the caller that it is safe to retry immediately. +** +** On success return SQLITE_OK. On a permanent failure (such an +** I/O error or an SQLITE_BUSY because another process is running +** recovery) return a positive error code. +** +** The useWal parameter is true to force the use of the WAL and disable +** the case where the WAL is bypassed because it has been completely +** checkpointed. If useWal==0 then this routine calls walIndexReadHdr() +** to make a copy of the wal-index header into pWal->hdr. If the +** wal-index header has changed, *pChanged is set to 1 (as an indication +** to the caller that the local paget cache is obsolete and needs to be +** flushed.) When useWal==1, the wal-index header is assumed to already +** be loaded and the pChanged parameter is unused. +** +** The caller must set the cnt parameter to the number of prior calls to +** this routine during the current read attempt that returned WAL_RETRY. +** This routine will start taking more aggressive measures to clear the +** race conditions after multiple WAL_RETRY returns, and after an excessive +** number of errors will ultimately return SQLITE_PROTOCOL. The +** SQLITE_PROTOCOL return indicates that some other process has gone rogue +** and is not honoring the locking protocol. There is a vanishingly small +** chance that SQLITE_PROTOCOL could be returned because of a run of really +** bad luck when there is lots of contention for the wal-index, but that +** possibility is so small that it can be safely neglected, we believe. +** +** On success, this routine obtains a read lock on +** WAL_READ_LOCK(pWal->readLock). The pWal->readLock integer is +** in the range 0 <= pWal->readLock < WAL_NREADER. If pWal->readLock==(-1) +** that means the Wal does not hold any read lock. The reader must not +** access any database page that is modified by a WAL frame up to and +** including frame number aReadMark[pWal->readLock]. The reader will +** use WAL frames up to and including pWal->hdr.mxFrame if pWal->readLock>0 +** Or if pWal->readLock==0, then the reader will ignore the WAL +** completely and get all content directly from the database file. +** If the useWal parameter is 1 then the WAL will never be ignored and +** this routine will always set pWal->readLock>0 on success. +** When the read transaction is completed, the caller must release the +** lock on WAL_READ_LOCK(pWal->readLock) and set pWal->readLock to -1. +** +** This routine uses the nBackfill and aReadMark[] fields of the header +** to select a particular WAL_READ_LOCK() that strives to let the +** checkpoint process do as much work as possible. This routine might +** update values of the aReadMark[] array in the header, but if it does +** so it takes care to hold an exclusive lock on the corresponding +** WAL_READ_LOCK() while changing values. +*/ +static int walTryBeginRead(Wal *pWal, int *pChanged, int useWal, int cnt){ + volatile WalCkptInfo *pInfo; /* Checkpoint information in wal-index */ + u32 mxReadMark; /* Largest aReadMark[] value */ + int mxI; /* Index of largest aReadMark[] value */ + int i; /* Loop counter */ + int rc = SQLITE_OK; /* Return code */ - assert( sqlite3_mutex_held(pBt->mutex) ); - assert(pPgnoNext); + assert( pWal->readLock<0 ); /* Not currently locked */ -#ifndef SQLITE_OMIT_AUTOVACUUM - /* Try to find the next page in the overflow list using the - ** autovacuum pointer-map pages. Guess that the next page in - ** the overflow list is page number (ovfl+1). If that guess turns - ** out to be wrong, fall back to loading the data of page - ** number ovfl to determine the next page number. + /* Take steps to avoid spinning forever if there is a protocol error. + ** + ** Circumstances that cause a RETRY should only last for the briefest + ** instances of time. No I/O or other system calls are done while the + ** locks are held, so the locks should not be held for very long. But + ** if we are unlucky, another process that is holding a lock might get + ** paged out or take a page-fault that is time-consuming to resolve, + ** during the few nanoseconds that it is holding the lock. In that case, + ** it might take longer than normal for the lock to free. + ** + ** After 5 RETRYs, we begin calling sqlite3OsSleep(). The first few + ** calls to sqlite3OsSleep() have a delay of 1 microsecond. Really this + ** is more of a scheduler yield than an actual delay. But on the 10th + ** an subsequent retries, the delays start becoming longer and longer, + ** so that on the 100th (and last) RETRY we delay for 21 milliseconds. + ** The total delay time before giving up is less than 1 second. */ - if( pBt->autoVacuum ){ - Pgno pgno; - Pgno iGuess = ovfl+1; - u8 eType; + if( cnt>5 ){ + int nDelay = 1; /* Pause time in microseconds */ + if( cnt>100 ){ + VVA_ONLY( pWal->lockError = 1; ) + return SQLITE_PROTOCOL; + } + if( cnt>=10 ) nDelay = (cnt-9)*238; /* Max delay 21ms. Total delay 996ms */ + sqlite3OsSleep(pWal->pVfs, nDelay); + } - while( PTRMAP_ISPAGE(pBt, iGuess) || iGuess==PENDING_BYTE_PAGE(pBt) ){ - iGuess++; + if( !useWal ){ + rc = walIndexReadHdr(pWal, pChanged); + if( rc==SQLITE_BUSY ){ + /* If there is not a recovery running in another thread or process + ** then convert BUSY errors to WAL_RETRY. If recovery is known to + ** be running, convert BUSY to BUSY_RECOVERY. There is a race here + ** which might cause WAL_RETRY to be returned even if BUSY_RECOVERY + ** would be technically correct. But the race is benign since with + ** WAL_RETRY this routine will be called again and will probably be + ** right on the second iteration. + */ + if( pWal->apWiData[0]==0 ){ + /* This branch is taken when the xShmMap() method returns SQLITE_BUSY. + ** We assume this is a transient condition, so return WAL_RETRY. The + ** xShmMap() implementation used by the default unix and win32 VFS + ** modules may return SQLITE_BUSY due to a race condition in the + ** code that determines whether or not the shared-memory region + ** must be zeroed before the requested page is returned. + */ + rc = WAL_RETRY; + }else if( SQLITE_OK==(rc = walLockShared(pWal, WAL_RECOVER_LOCK)) ){ + walUnlockShared(pWal, WAL_RECOVER_LOCK); + rc = WAL_RETRY; + }else if( rc==SQLITE_BUSY ){ + rc = SQLITE_BUSY_RECOVERY; + } } + if( rc!=SQLITE_OK ){ + return rc; + } + } - if( iGuess<=pagerPagecount(pBt) ){ - rc = ptrmapGet(pBt, iGuess, &eType, &pgno); - if( rc==SQLITE_OK && eType==PTRMAP_OVERFLOW2 && pgno==ovfl ){ - next = iGuess; - rc = SQLITE_DONE; + pInfo = walCkptInfo(pWal); + if( !useWal && pInfo->nBackfill==pWal->hdr.mxFrame ){ + /* The WAL has been completely backfilled (or it is empty). + ** and can be safely ignored. + */ + rc = walLockShared(pWal, WAL_READ_LOCK(0)); + walShmBarrier(pWal); + if( rc==SQLITE_OK ){ + if( memcmp((void *)walIndexHdr(pWal), &pWal->hdr, sizeof(WalIndexHdr)) ){ + /* It is not safe to allow the reader to continue here if frames + ** may have been appended to the log before READ_LOCK(0) was obtained. + ** When holding READ_LOCK(0), the reader ignores the entire log file, + ** which implies that the database file contains a trustworthy + ** snapshoT. Since holding READ_LOCK(0) prevents a checkpoint from + ** happening, this is usually correct. + ** + ** However, if frames have been appended to the log (or if the log + ** is wrapped and written for that matter) before the READ_LOCK(0) + ** is obtained, that is not necessarily true. A checkpointer may + ** have started to backfill the appended frames but crashed before + ** it finished. Leaving a corrupt image in the database file. + */ + walUnlockShared(pWal, WAL_READ_LOCK(0)); + return WAL_RETRY; } + pWal->readLock = 0; + return SQLITE_OK; + }else if( rc!=SQLITE_BUSY ){ + return rc; } } -#endif - if( rc==SQLITE_OK ){ - rc = sqlite3BtreeGetPage(pBt, ovfl, &pPage, 0); - assert(rc==SQLITE_OK || pPage==0); - if( next==0 && rc==SQLITE_OK ){ - next = get4byte(pPage->aData); + /* If we get this far, it means that the reader will want to use + ** the WAL to get at content from recent commits. The job now is + ** to select one of the aReadMark[] entries that is closest to + ** but not exceeding pWal->hdr.mxFrame and lock that entry. + */ + mxReadMark = 0; + mxI = 0; + for(i=1; iaReadMark[i]; + if( mxReadMark<=thisMark && thisMark<=pWal->hdr.mxFrame ){ + assert( thisMark!=READMARK_NOT_USED ); + mxReadMark = thisMark; + mxI = i; } } + /* There was once an "if" here. The extra "{" is to preserve indentation. */ + { + if( (pWal->readOnly & WAL_SHM_RDONLY)==0 + && (mxReadMarkhdr.mxFrame || mxI==0) + ){ + for(i=1; iaReadMark[i] = pWal->hdr.mxFrame; + mxI = i; + walUnlockExclusive(pWal, WAL_READ_LOCK(i), 1); + break; + }else if( rc!=SQLITE_BUSY ){ + return rc; + } + } + } + if( mxI==0 ){ + assert( rc==SQLITE_BUSY || (pWal->readOnly & WAL_SHM_RDONLY)!=0 ); + return rc==SQLITE_BUSY ? WAL_RETRY : SQLITE_READONLY_CANTLOCK; + } - *pPgnoNext = next; - if( ppPage ){ - *ppPage = pPage; - }else{ - releasePage(pPage); + rc = walLockShared(pWal, WAL_READ_LOCK(mxI)); + if( rc ){ + return rc==SQLITE_BUSY ? WAL_RETRY : rc; + } + /* Now that the read-lock has been obtained, check that neither the + ** value in the aReadMark[] array or the contents of the wal-index + ** header have changed. + ** + ** It is necessary to check that the wal-index header did not change + ** between the time it was read and when the shared-lock was obtained + ** on WAL_READ_LOCK(mxI) was obtained to account for the possibility + ** that the log file may have been wrapped by a writer, or that frames + ** that occur later in the log than pWal->hdr.mxFrame may have been + ** copied into the database by a checkpointer. If either of these things + ** happened, then reading the database with the current value of + ** pWal->hdr.mxFrame risks reading a corrupted snapshot. So, retry + ** instead. + ** + ** This does not guarantee that the copy of the wal-index header is up to + ** date before proceeding. That would not be possible without somehow + ** blocking writers. It only guarantees that a dangerous checkpoint or + ** log-wrap (either of which would require an exclusive lock on + ** WAL_READ_LOCK(mxI)) has not occurred since the snapshot was valid. + */ + walShmBarrier(pWal); + if( pInfo->aReadMark[mxI]!=mxReadMark + || memcmp((void *)walIndexHdr(pWal), &pWal->hdr, sizeof(WalIndexHdr)) + ){ + walUnlockShared(pWal, WAL_READ_LOCK(mxI)); + return WAL_RETRY; + }else{ + assert( mxReadMark<=pWal->hdr.mxFrame ); + pWal->readLock = (i16)mxI; + } } - return (rc==SQLITE_DONE ? SQLITE_OK : rc); + return rc; } /* -** Copy data from a buffer to a page, or from a page to a buffer. +** Begin a read transaction on the database. ** -** pPayload is a pointer to data stored on database page pDbPage. -** If argument eOp is false, then nByte bytes of data are copied -** from pPayload to the buffer pointed at by pBuf. If eOp is true, -** then sqlite3PagerWrite() is called on pDbPage and nByte bytes -** of data are copied from the buffer pBuf to pPayload. +** This routine used to be called sqlite3OpenSnapshot() and with good reason: +** it takes a snapshot of the state of the WAL and wal-index for the current +** instant in time. The current thread will continue to use this snapshot. +** Other threads might append new content to the WAL and wal-index but +** that extra content is ignored by the current thread. ** -** SQLITE_OK is returned on success, otherwise an error code. +** If the database contents have changes since the previous read +** transaction, then *pChanged is set to 1 before returning. The +** Pager layer will use this to know that is cache is stale and +** needs to be flushed. */ -static int copyPayload( - void *pPayload, /* Pointer to page data */ - void *pBuf, /* Pointer to buffer */ - int nByte, /* Number of bytes to copy */ - int eOp, /* 0 -> copy from page, 1 -> copy to page */ - DbPage *pDbPage /* Page containing pPayload */ -){ - if( eOp ){ - /* Copy data from buffer to page (a write operation) */ - int rc = sqlite3PagerWrite(pDbPage); - if( rc!=SQLITE_OK ){ - return rc; - } - memcpy(pPayload, pBuf, nByte); - }else{ - /* Copy data from page to buffer (a read operation) */ - memcpy(pBuf, pPayload, nByte); +SQLITE_PRIVATE int sqlite3WalBeginReadTransaction(Wal *pWal, int *pChanged){ + int rc; /* Return code */ + int cnt = 0; /* Number of TryBeginRead attempts */ + + do{ + rc = walTryBeginRead(pWal, pChanged, 0, ++cnt); + }while( rc==WAL_RETRY ); + testcase( (rc&0xff)==SQLITE_BUSY ); + testcase( (rc&0xff)==SQLITE_IOERR ); + testcase( rc==SQLITE_PROTOCOL ); + testcase( rc==SQLITE_OK ); + return rc; +} + +/* +** Finish with a read transaction. All this does is release the +** read-lock. +*/ +SQLITE_PRIVATE void sqlite3WalEndReadTransaction(Wal *pWal){ + sqlite3WalEndWriteTransaction(pWal); + if( pWal->readLock>=0 ){ + walUnlockShared(pWal, WAL_READ_LOCK(pWal->readLock)); + pWal->readLock = -1; } - return SQLITE_OK; } /* -** This function is used to read or overwrite payload information -** for the entry that the pCur cursor is pointing to. If the eOp -** parameter is 0, this is a read operation (data copied into -** buffer pBuf). If it is non-zero, a write (data copied from -** buffer pBuf). -** -** A total of "amt" bytes are read or written beginning at "offset". -** Data is read to or from the buffer pBuf. -** -** This routine does not make a distinction between key and data. -** It just reads or writes bytes from the payload area. Data might -** appear on the main page or be scattered out on multiple overflow -** pages. -** -** If the BtCursor.isIncrblobHandle flag is set, and the current -** cursor entry uses one or more overflow pages, this function -** allocates space for and lazily popluates the overflow page-list -** cache array (BtCursor.aOverflow). Subsequent calls use this -** cache to make seeking to the supplied offset more efficient. -** -** Once an overflow page-list cache has been allocated, it may be -** invalidated if some other cursor writes to the same table, or if -** the cursor is moved to a different row. Additionally, in auto-vacuum -** mode, the following events may invalidate an overflow page-list cache. +** Read a page from the WAL, if it is present in the WAL and if the +** current read transaction is configured to use the WAL. ** -** * An incremental vacuum, -** * A commit in auto_vacuum="full" mode, -** * Creating a table (may require moving an overflow page). +** The *pInWal is set to 1 if the requested page is in the WAL and +** has been loaded. Or *pInWal is set to 0 if the page was not in +** the WAL and needs to be read out of the database. */ -static int accessPayload( - BtCursor *pCur, /* Cursor pointing to entry to read from */ - u32 offset, /* Begin reading this far into payload */ - u32 amt, /* Read this many bytes */ - unsigned char *pBuf, /* Write the bytes into this buffer */ - int skipKey, /* offset begins at data if this is true */ - int eOp /* zero to read. non-zero to write. */ +SQLITE_PRIVATE int sqlite3WalRead( + Wal *pWal, /* WAL handle */ + Pgno pgno, /* Database page number to read data for */ + int *pInWal, /* OUT: True if data is read from WAL */ + int nOut, /* Size of buffer pOut in bytes */ + u8 *pOut /* Buffer to write page data to */ ){ - unsigned char *aPayload; - int rc = SQLITE_OK; - u32 nKey; - int iIdx = 0; - MemPage *pPage = pCur->apPage[pCur->iPage]; /* Btree page of current entry */ - BtShared *pBt = pCur->pBt; /* Btree this cursor belongs to */ - - assert( pPage ); - assert( pCur->eState==CURSOR_VALID ); - assert( pCur->aiIdx[pCur->iPage]nCell ); - assert( cursorHoldsMutex(pCur) ); + u32 iRead = 0; /* If !=0, WAL frame to return data from */ + u32 iLast = pWal->hdr.mxFrame; /* Last page in WAL for this reader */ + int iHash; /* Used to loop through N hash tables */ - getCellInfo(pCur); - aPayload = pCur->info.pCell + pCur->info.nHeader; - nKey = (pPage->intKey ? 0 : (int)pCur->info.nKey); + /* This routine is only be called from within a read transaction. */ + assert( pWal->readLock>=0 || pWal->lockError ); - if( skipKey ){ - offset += nKey; - } - if( offset+amt > nKey+pCur->info.nData - || &aPayload[pCur->info.nLocal] > &pPage->aData[pBt->usableSize] - ){ - /* Trying to read or write past the end of the data is an error */ - return SQLITE_CORRUPT_BKPT; + /* If the "last page" field of the wal-index header snapshot is 0, then + ** no data will be read from the wal under any circumstances. Return early + ** in this case as an optimization. Likewise, if pWal->readLock==0, + ** then the WAL is ignored by the reader so return early, as if the + ** WAL were empty. + */ + if( iLast==0 || pWal->readLock==0 ){ + *pInWal = 0; + return SQLITE_OK; } - /* Check if data must be read/written to/from the btree page itself. */ - if( offsetinfo.nLocal ){ - int a = amt; - if( a+offset>pCur->info.nLocal ){ - a = pCur->info.nLocal - offset; + /* Search the hash table or tables for an entry matching page number + ** pgno. Each iteration of the following for() loop searches one + ** hash table (each hash table indexes up to HASHTABLE_NPAGE frames). + ** + ** This code might run concurrently to the code in walIndexAppend() + ** that adds entries to the wal-index (and possibly to this hash + ** table). This means the value just read from the hash + ** slot (aHash[iKey]) may have been added before or after the + ** current read transaction was opened. Values added after the + ** read transaction was opened may have been written incorrectly - + ** i.e. these slots may contain garbage data. However, we assume + ** that any slots written before the current read transaction was + ** opened remain unmodified. + ** + ** For the reasons above, the if(...) condition featured in the inner + ** loop of the following block is more stringent that would be required + ** if we had exclusive access to the hash-table: + ** + ** (aPgno[iFrame]==pgno): + ** This condition filters out normal hash-table collisions. + ** + ** (iFrame<=iLast): + ** This condition filters out entries that were added to the hash + ** table after the current read-transaction had started. + */ + for(iHash=walFramePage(iLast); iHash>=0 && iRead==0; iHash--){ + volatile ht_slot *aHash; /* Pointer to hash table */ + volatile u32 *aPgno; /* Pointer to array of page numbers */ + u32 iZero; /* Frame number corresponding to aPgno[0] */ + int iKey; /* Hash slot index */ + int nCollide; /* Number of hash collisions remaining */ + int rc; /* Error code */ + + rc = walHashGet(pWal, iHash, &aHash, &aPgno, &iZero); + if( rc!=SQLITE_OK ){ + return rc; } - rc = copyPayload(&aPayload[offset], pBuf, a, eOp, pPage->pDbPage); - offset = 0; - pBuf += a; - amt -= a; - }else{ - offset -= pCur->info.nLocal; - } - - if( rc==SQLITE_OK && amt>0 ){ - const u32 ovflSize = pBt->usableSize - 4; /* Bytes content per ovfl page */ - Pgno nextPage; - - nextPage = get4byte(&aPayload[pCur->info.nLocal]); - -#ifndef SQLITE_OMIT_INCRBLOB - /* If the isIncrblobHandle flag is set and the BtCursor.aOverflow[] - ** has not been allocated, allocate it now. The array is sized at - ** one entry for each overflow page in the overflow chain. The - ** page number of the first overflow page is stored in aOverflow[0], - ** etc. A value of 0 in the aOverflow[] array means "not yet known" - ** (the cache is lazily populated). - */ - if( pCur->isIncrblobHandle && !pCur->aOverflow ){ - int nOvfl = (pCur->info.nPayload-pCur->info.nLocal+ovflSize-1)/ovflSize; - pCur->aOverflow = (Pgno *)sqlite3MallocZero(sizeof(Pgno)*nOvfl); - if( nOvfl && !pCur->aOverflow ){ - rc = SQLITE_NOMEM; + nCollide = HASHTABLE_NSLOT; + for(iKey=walHash(pgno); aHash[iKey]; iKey=walNextHash(iKey)){ + u32 iFrame = aHash[iKey] + iZero; + if( iFrame<=iLast && aPgno[aHash[iKey]]==pgno ){ + /* assert( iFrame>iRead ); -- not true if there is corruption */ + iRead = iFrame; } - } - - /* If the overflow page-list cache has been allocated and the - ** entry for the first required overflow page is valid, skip - ** directly to it. - */ - if( pCur->aOverflow && pCur->aOverflow[offset/ovflSize] ){ - iIdx = (offset/ovflSize); - nextPage = pCur->aOverflow[iIdx]; - offset = (offset%ovflSize); - } -#endif - - for( ; rc==SQLITE_OK && amt>0 && nextPage; iIdx++){ - -#ifndef SQLITE_OMIT_INCRBLOB - /* If required, populate the overflow page-list cache. */ - if( pCur->aOverflow ){ - assert(!pCur->aOverflow[iIdx] || pCur->aOverflow[iIdx]==nextPage); - pCur->aOverflow[iIdx] = nextPage; + if( (nCollide--)==0 ){ + return SQLITE_CORRUPT_BKPT; } -#endif + } + } - if( offset>=ovflSize ){ - /* The only reason to read this page is to obtain the page - ** number for the next page in the overflow chain. The page - ** data is not required. So first try to lookup the overflow - ** page-list cache, if any, then fall back to the getOverflowPage() - ** function. - */ -#ifndef SQLITE_OMIT_INCRBLOB - if( pCur->aOverflow && pCur->aOverflow[iIdx+1] ){ - nextPage = pCur->aOverflow[iIdx+1]; - } else -#endif - rc = getOverflowPage(pBt, nextPage, 0, &nextPage); - offset -= ovflSize; - }else{ - /* Need to read this page properly. It contains some of the - ** range of data that is being read (eOp==0) or written (eOp!=0). - */ - DbPage *pDbPage; - int a = amt; - rc = sqlite3PagerGet(pBt->pPager, nextPage, &pDbPage); - if( rc==SQLITE_OK ){ - aPayload = sqlite3PagerGetData(pDbPage); - nextPage = get4byte(aPayload); - if( a + offset > ovflSize ){ - a = ovflSize - offset; - } - rc = copyPayload(&aPayload[offset+4], pBuf, a, eOp, pDbPage); - sqlite3PagerUnref(pDbPage); - offset = 0; - amt -= a; - pBuf += a; - } +#ifdef SQLITE_ENABLE_EXPENSIVE_ASSERT + /* If expensive assert() statements are available, do a linear search + ** of the wal-index file content. Make sure the results agree with the + ** result obtained using the hash indexes above. */ + { + u32 iRead2 = 0; + u32 iTest; + for(iTest=iLast; iTest>0; iTest--){ + if( walFramePgno(pWal, iTest)==pgno ){ + iRead2 = iTest; + break; } } + assert( iRead==iRead2 ); } +#endif - if( rc==SQLITE_OK && amt>0 ){ - return SQLITE_CORRUPT_BKPT; + /* If iRead is non-zero, then it is the log frame number that contains the + ** required page. Read and return data from the log file. + */ + if( iRead ){ + int sz; + i64 iOffset; + sz = pWal->hdr.szPage; + sz = (sz&0xfe00) + ((sz&0x0001)<<16); + testcase( sz<=32768 ); + testcase( sz>=65536 ); + iOffset = walFrameOffset(iRead, sz) + WAL_FRAME_HDRSIZE; + *pInWal = 1; + /* testcase( IS_BIG_INT(iOffset) ); // requires a 4GiB WAL */ + return sqlite3OsRead(pWal->pWalFd, pOut, (nOut>sz ? sz : nOut), iOffset); } - return rc; + + *pInWal = 0; + return SQLITE_OK; } -/* -** Read part of the key associated with cursor pCur. Exactly -** "amt" bytes will be transfered into pBuf[]. The transfer -** begins at "offset". -** -** Return SQLITE_OK on success or an error code if anything goes -** wrong. An error is returned if "offset+amt" is larger than -** the available payload. -*/ -SQLITE_PRIVATE int sqlite3BtreeKey(BtCursor *pCur, u32 offset, u32 amt, void *pBuf){ - int rc; - assert( cursorHoldsMutex(pCur) ); - rc = restoreCursorPosition(pCur); - if( rc==SQLITE_OK ){ - assert( pCur->eState==CURSOR_VALID ); - assert( pCur->iPage>=0 && pCur->apPage[pCur->iPage] ); - if( pCur->apPage[0]->intKey ){ - return SQLITE_CORRUPT_BKPT; - } - assert( pCur->aiIdx[pCur->iPage]apPage[pCur->iPage]->nCell ); - rc = accessPayload(pCur, offset, amt, (unsigned char*)pBuf, 0, 0); +/* +** Return the size of the database in pages (or zero, if unknown). +*/ +SQLITE_PRIVATE Pgno sqlite3WalDbsize(Wal *pWal){ + if( pWal && ALWAYS(pWal->readLock>=0) ){ + return pWal->hdr.nPage; } - return rc; + return 0; } -/* -** Read part of the data associated with cursor pCur. Exactly -** "amt" bytes will be transfered into pBuf[]. The transfer -** begins at "offset". + +/* +** This function starts a write transaction on the WAL. ** -** Return SQLITE_OK on success or an error code if anything goes -** wrong. An error is returned if "offset+amt" is larger than -** the available payload. +** A read transaction must have already been started by a prior call +** to sqlite3WalBeginReadTransaction(). +** +** If another thread or process has written into the database since +** the read transaction was started, then it is not possible for this +** thread to write as doing so would cause a fork. So this routine +** returns SQLITE_BUSY in that case and no write transaction is started. +** +** There can only be a single writer active at a time. */ -SQLITE_PRIVATE int sqlite3BtreeData(BtCursor *pCur, u32 offset, u32 amt, void *pBuf){ +SQLITE_PRIVATE int sqlite3WalBeginWriteTransaction(Wal *pWal){ int rc; -#ifndef SQLITE_OMIT_INCRBLOB - if ( pCur->eState==CURSOR_INVALID ){ - return SQLITE_ABORT; + /* Cannot start a write transaction without first holding a read + ** transaction. */ + assert( pWal->readLock>=0 ); + + if( pWal->readOnly ){ + return SQLITE_READONLY; } -#endif - assert( cursorHoldsMutex(pCur) ); - rc = restoreCursorPosition(pCur); - if( rc==SQLITE_OK ){ - assert( pCur->eState==CURSOR_VALID ); - assert( pCur->iPage>=0 && pCur->apPage[pCur->iPage] ); - assert( pCur->aiIdx[pCur->iPage]apPage[pCur->iPage]->nCell ); - rc = accessPayload(pCur, offset, amt, pBuf, 1, 0); + /* Only one writer allowed at a time. Get the write lock. Return + ** SQLITE_BUSY if unable. + */ + rc = walLockExclusive(pWal, WAL_WRITE_LOCK, 1); + if( rc ){ + return rc; + } + pWal->writeLock = 1; + + /* If another connection has written to the database file since the + ** time the read transaction on this connection was started, then + ** the write is disallowed. + */ + if( memcmp(&pWal->hdr, (void *)walIndexHdr(pWal), sizeof(WalIndexHdr))!=0 ){ + walUnlockExclusive(pWal, WAL_WRITE_LOCK, 1); + pWal->writeLock = 0; + rc = SQLITE_BUSY; } + return rc; } /* -** Return a pointer to payload information from the entry that the -** pCur cursor is pointing to. The pointer is to the beginning of -** the key if skipKey==0 and it points to the beginning of data if -** skipKey==1. The number of bytes of available key/data is written -** into *pAmt. If *pAmt==0, then the value returned will not be -** a valid pointer. -** -** This routine is an optimization. It is common for the entire key -** and data to fit on the local page and for there to be no overflow -** pages. When that is so, this routine can be used to access the -** key and data without making a copy. If the key and/or data spills -** onto overflow pages, then accessPayload() must be used to reassemble -** the key/data and copy it into a preallocated buffer. -** -** The pointer returned by this routine looks directly into the cached -** page of the database. The data might change or move the next time -** any btree routine is called. +** End a write transaction. The commit has already been done. This +** routine merely releases the lock. */ -static const unsigned char *fetchPayload( - BtCursor *pCur, /* Cursor pointing to entry to read from */ - int *pAmt, /* Write the number of available bytes here */ - int skipKey /* read beginning at data if this is true */ -){ - unsigned char *aPayload; - MemPage *pPage; - u32 nKey; - u32 nLocal; - - assert( pCur!=0 && pCur->iPage>=0 && pCur->apPage[pCur->iPage]); - assert( pCur->eState==CURSOR_VALID ); - assert( cursorHoldsMutex(pCur) ); - pPage = pCur->apPage[pCur->iPage]; - assert( pCur->aiIdx[pCur->iPage]nCell ); - getCellInfo(pCur); - aPayload = pCur->info.pCell; - aPayload += pCur->info.nHeader; - if( pPage->intKey ){ - nKey = 0; - }else{ - nKey = (int)pCur->info.nKey; +SQLITE_PRIVATE int sqlite3WalEndWriteTransaction(Wal *pWal){ + if( pWal->writeLock ){ + walUnlockExclusive(pWal, WAL_WRITE_LOCK, 1); + pWal->writeLock = 0; + pWal->truncateOnCommit = 0; } - if( skipKey ){ - aPayload += nKey; - nLocal = pCur->info.nLocal - nKey; - }else{ - nLocal = pCur->info.nLocal; - if( nLocal>nKey ){ - nLocal = nKey; - } - } - *pAmt = nLocal; - return aPayload; + return SQLITE_OK; } - /* -** For the entry that cursor pCur is point to, return as -** many bytes of the key or data as are available on the local -** b-tree page. Write the number of available bytes into *pAmt. +** If any data has been written (but not committed) to the log file, this +** function moves the write-pointer back to the start of the transaction. ** -** The pointer returned is ephemeral. The key/data may move -** or be destroyed on the next call to any Btree routine, -** including calls from other threads against the same cache. -** Hence, a mutex on the BtShared should be held prior to calling -** this routine. +** Additionally, the callback function is invoked for each frame written +** to the WAL since the start of the transaction. If the callback returns +** other than SQLITE_OK, it is not invoked again and the error code is +** returned to the caller. ** -** These routines is used to get quick access to key and data -** in the common case where no overflow pages are used. +** Otherwise, if the callback function does not return an error, this +** function returns SQLITE_OK. */ -SQLITE_PRIVATE const void *sqlite3BtreeKeyFetch(BtCursor *pCur, int *pAmt){ - assert( sqlite3_mutex_held(pCur->pBtree->db->mutex) ); - assert( cursorHoldsMutex(pCur) ); - if( pCur->eState==CURSOR_VALID ){ - return (const void*)fetchPayload(pCur, pAmt, 0); - } - return 0; -} -SQLITE_PRIVATE const void *sqlite3BtreeDataFetch(BtCursor *pCur, int *pAmt){ - assert( sqlite3_mutex_held(pCur->pBtree->db->mutex) ); - assert( cursorHoldsMutex(pCur) ); - if( pCur->eState==CURSOR_VALID ){ - return (const void*)fetchPayload(pCur, pAmt, 1); +SQLITE_PRIVATE int sqlite3WalUndo(Wal *pWal, int (*xUndo)(void *, Pgno), void *pUndoCtx){ + int rc = SQLITE_OK; + if( ALWAYS(pWal->writeLock) ){ + Pgno iMax = pWal->hdr.mxFrame; + Pgno iFrame; + + /* Restore the clients cache of the wal-index header to the state it + ** was in before the client began writing to the database. + */ + memcpy(&pWal->hdr, (void *)walIndexHdr(pWal), sizeof(WalIndexHdr)); + + for(iFrame=pWal->hdr.mxFrame+1; + ALWAYS(rc==SQLITE_OK) && iFrame<=iMax; + iFrame++ + ){ + /* This call cannot fail. Unless the page for which the page number + ** is passed as the second argument is (a) in the cache and + ** (b) has an outstanding reference, then xUndo is either a no-op + ** (if (a) is false) or simply expels the page from the cache (if (b) + ** is false). + ** + ** If the upper layer is doing a rollback, it is guaranteed that there + ** are no outstanding references to any page other than page 1. And + ** page 1 is never written to the log until the transaction is + ** committed. As a result, the call to xUndo may not fail. + */ + assert( walFramePgno(pWal, iFrame)!=1 ); + rc = xUndo(pUndoCtx, walFramePgno(pWal, iFrame)); + } + walCleanupHash(pWal); } - return 0; + assert( rc==SQLITE_OK ); + return rc; } +/* +** Argument aWalData must point to an array of WAL_SAVEPOINT_NDATA u32 +** values. This function populates the array with values required to +** "rollback" the write position of the WAL handle back to the current +** point in the event of a savepoint rollback (via WalSavepointUndo()). +*/ +SQLITE_PRIVATE void sqlite3WalSavepoint(Wal *pWal, u32 *aWalData){ + assert( pWal->writeLock ); + aWalData[0] = pWal->hdr.mxFrame; + aWalData[1] = pWal->hdr.aFrameCksum[0]; + aWalData[2] = pWal->hdr.aFrameCksum[1]; + aWalData[3] = pWal->nCkpt; +} -/* -** Move the cursor down to a new child page. The newPgno argument is the -** page number of the child page to move to. +/* +** Move the write position of the WAL back to the point identified by +** the values in the aWalData[] array. aWalData must point to an array +** of WAL_SAVEPOINT_NDATA u32 values that has been previously populated +** by a call to WalSavepoint(). */ -static int moveToChild(BtCursor *pCur, u32 newPgno){ - int rc; - int i = pCur->iPage; - MemPage *pNewPage; - BtShared *pBt = pCur->pBt; +SQLITE_PRIVATE int sqlite3WalSavepointUndo(Wal *pWal, u32 *aWalData){ + int rc = SQLITE_OK; - assert( cursorHoldsMutex(pCur) ); - assert( pCur->eState==CURSOR_VALID ); - assert( pCur->iPageiPage>=(BTCURSOR_MAX_DEPTH-1) ){ - return SQLITE_CORRUPT_BKPT; + assert( pWal->writeLock ); + assert( aWalData[3]!=pWal->nCkpt || aWalData[0]<=pWal->hdr.mxFrame ); + + if( aWalData[3]!=pWal->nCkpt ){ + /* This savepoint was opened immediately after the write-transaction + ** was started. Right after that, the writer decided to wrap around + ** to the start of the log. Update the savepoint values to match. + */ + aWalData[0] = 0; + aWalData[3] = pWal->nCkpt; } - rc = getAndInitPage(pBt, newPgno, &pNewPage); - if( rc ) return rc; - pCur->apPage[i+1] = pNewPage; - pCur->aiIdx[i+1] = 0; - pCur->iPage++; - pCur->info.nSize = 0; - pCur->validNKey = 0; - if( pNewPage->nCell<1 ){ - return SQLITE_CORRUPT_BKPT; + if( aWalData[0]hdr.mxFrame ){ + pWal->hdr.mxFrame = aWalData[0]; + pWal->hdr.aFrameCksum[0] = aWalData[1]; + pWal->hdr.aFrameCksum[1] = aWalData[2]; + walCleanupHash(pWal); } - return SQLITE_OK; + + return rc; } -#ifndef NDEBUG + /* -** Page pParent is an internal (non-leaf) tree page. This function -** asserts that page number iChild is the left-child if the iIdx'th -** cell in page pParent. Or, if iIdx is equal to the total number of -** cells in pParent, that page number iChild is the right-child of -** the page. +** This function is called just before writing a set of frames to the log +** file (see sqlite3WalFrames()). It checks to see if, instead of appending +** to the current log file, it is possible to overwrite the start of the +** existing log file with the new frames (i.e. "reset" the log). If so, +** it sets pWal->hdr.mxFrame to 0. Otherwise, pWal->hdr.mxFrame is left +** unchanged. +** +** SQLITE_OK is returned if no error is encountered (regardless of whether +** or not pWal->hdr.mxFrame is modified). An SQLite error code is returned +** if an error occurs. */ -static void assertParentIndex(MemPage *pParent, int iIdx, Pgno iChild){ - assert( iIdx<=pParent->nCell ); - if( iIdx==pParent->nCell ){ - assert( get4byte(&pParent->aData[pParent->hdrOffset+8])==iChild ); - }else{ - assert( get4byte(findCell(pParent, iIdx))==iChild ); +static int walRestartLog(Wal *pWal){ + int rc = SQLITE_OK; + int cnt; + + if( pWal->readLock==0 ){ + volatile WalCkptInfo *pInfo = walCkptInfo(pWal); + assert( pInfo->nBackfill==pWal->hdr.mxFrame ); + if( pInfo->nBackfill>0 ){ + u32 salt1; + sqlite3_randomness(4, &salt1); + rc = walLockExclusive(pWal, WAL_READ_LOCK(1), WAL_NREADER-1); + if( rc==SQLITE_OK ){ + /* If all readers are using WAL_READ_LOCK(0) (in other words if no + ** readers are currently using the WAL), then the transactions + ** frames will overwrite the start of the existing log. Update the + ** wal-index header to reflect this. + ** + ** In theory it would be Ok to update the cache of the header only + ** at this point. But updating the actual wal-index header is also + ** safe and means there is no special case for sqlite3WalUndo() + ** to handle if this transaction is rolled back. + */ + int i; /* Loop counter */ + u32 *aSalt = pWal->hdr.aSalt; /* Big-endian salt values */ + + pWal->nCkpt++; + pWal->hdr.mxFrame = 0; + sqlite3Put4byte((u8*)&aSalt[0], 1 + sqlite3Get4byte((u8*)&aSalt[0])); + aSalt[1] = salt1; + walIndexWriteHdr(pWal); + pInfo->nBackfill = 0; + for(i=1; iaReadMark[i] = READMARK_NOT_USED; + assert( pInfo->aReadMark[0]==0 ); + walUnlockExclusive(pWal, WAL_READ_LOCK(1), WAL_NREADER-1); + }else if( rc!=SQLITE_BUSY ){ + return rc; + } + } + walUnlockShared(pWal, WAL_READ_LOCK(0)); + pWal->readLock = -1; + cnt = 0; + do{ + int notUsed; + rc = walTryBeginRead(pWal, ¬Used, 1, ++cnt); + }while( rc==WAL_RETRY ); + assert( (rc&0xff)!=SQLITE_BUSY ); /* BUSY not possible when useWal==1 */ + testcase( (rc&0xff)==SQLITE_IOERR ); + testcase( rc==SQLITE_PROTOCOL ); + testcase( rc==SQLITE_OK ); } + return rc; } -#else -# define assertParentIndex(x,y,z) -#endif /* -** Move the cursor up to the parent page. +** Information about the current state of the WAL file and where +** the next fsync should occur - passed from sqlite3WalFrames() into +** walWriteToLog(). +*/ +typedef struct WalWriter { + Wal *pWal; /* The complete WAL information */ + sqlite3_file *pFd; /* The WAL file to which we write */ + sqlite3_int64 iSyncPoint; /* Fsync at this offset */ + int syncFlags; /* Flags for the fsync */ + int szPage; /* Size of one page */ +} WalWriter; + +/* +** Write iAmt bytes of content into the WAL file beginning at iOffset. +** Do a sync when crossing the p->iSyncPoint boundary. ** -** pCur->idx is set to the cell index that contains the pointer -** to the page we are coming from. If we are coming from the -** right-most child page then pCur->idx is set to one more than -** the largest cell index. +** In other words, if iSyncPoint is in between iOffset and iOffset+iAmt, +** first write the part before iSyncPoint, then sync, then write the +** rest. */ -SQLITE_PRIVATE void sqlite3BtreeMoveToParent(BtCursor *pCur){ - assert( cursorHoldsMutex(pCur) ); - assert( pCur->eState==CURSOR_VALID ); - assert( pCur->iPage>0 ); - assert( pCur->apPage[pCur->iPage] ); - assertParentIndex( - pCur->apPage[pCur->iPage-1], - pCur->aiIdx[pCur->iPage-1], - pCur->apPage[pCur->iPage]->pgno - ); - releasePage(pCur->apPage[pCur->iPage]); - pCur->iPage--; - pCur->info.nSize = 0; - pCur->validNKey = 0; +static int walWriteToLog( + WalWriter *p, /* WAL to write to */ + void *pContent, /* Content to be written */ + int iAmt, /* Number of bytes to write */ + sqlite3_int64 iOffset /* Start writing at this offset */ +){ + int rc; + if( iOffsetiSyncPoint && iOffset+iAmt>=p->iSyncPoint ){ + int iFirstAmt = (int)(p->iSyncPoint - iOffset); + rc = sqlite3OsWrite(p->pFd, pContent, iFirstAmt, iOffset); + if( rc ) return rc; + iOffset += iFirstAmt; + iAmt -= iFirstAmt; + pContent = (void*)(iFirstAmt + (char*)pContent); + assert( p->syncFlags & (SQLITE_SYNC_NORMAL|SQLITE_SYNC_FULL) ); + rc = sqlite3OsSync(p->pFd, p->syncFlags); + if( iAmt==0 || rc ) return rc; + } + rc = sqlite3OsWrite(p->pFd, pContent, iAmt, iOffset); + return rc; } /* -** Move the cursor to the root page +** Write out a single frame of the WAL */ -static int moveToRoot(BtCursor *pCur){ - MemPage *pRoot; - int rc = SQLITE_OK; - Btree *p = pCur->pBtree; - BtShared *pBt = p->pBt; +static int walWriteOneFrame( + WalWriter *p, /* Where to write the frame */ + PgHdr *pPage, /* The page of the frame to be written */ + int nTruncate, /* The commit flag. Usually 0. >0 for commit */ + sqlite3_int64 iOffset /* Byte offset at which to write */ +){ + int rc; /* Result code from subfunctions */ + void *pData; /* Data actually written */ + u8 aFrame[WAL_FRAME_HDRSIZE]; /* Buffer to assemble frame-header in */ +#if defined(SQLITE_HAS_CODEC) + if( (pData = sqlite3PagerCodec(pPage))==0 ) return SQLITE_NOMEM; +#else + pData = pPage->pData; +#endif + walEncodeFrame(p->pWal, pPage->pgno, nTruncate, pData, aFrame); + rc = walWriteToLog(p, aFrame, sizeof(aFrame), iOffset); + if( rc ) return rc; + /* Write the page data */ + rc = walWriteToLog(p, pData, p->szPage, iOffset+sizeof(aFrame)); + return rc; +} - assert( cursorHoldsMutex(pCur) ); - assert( CURSOR_INVALID < CURSOR_REQUIRESEEK ); - assert( CURSOR_VALID < CURSOR_REQUIRESEEK ); - assert( CURSOR_FAULT > CURSOR_REQUIRESEEK ); - if( pCur->eState>=CURSOR_REQUIRESEEK ){ - if( pCur->eState==CURSOR_FAULT ){ - return pCur->skip; +/* +** Write a set of frames to the log. The caller must hold the write-lock +** on the log file (obtained using sqlite3WalBeginWriteTransaction()). +*/ +SQLITE_PRIVATE int sqlite3WalFrames( + Wal *pWal, /* Wal handle to write to */ + int szPage, /* Database page-size in bytes */ + PgHdr *pList, /* List of dirty pages to write */ + Pgno nTruncate, /* Database size after this commit */ + int isCommit, /* True if this is a commit */ + int sync_flags /* Flags to pass to OsSync() (or 0) */ +){ + int rc; /* Used to catch return codes */ + u32 iFrame; /* Next frame address */ + PgHdr *p; /* Iterator to run through pList with. */ + PgHdr *pLast = 0; /* Last frame in list */ + int nExtra = 0; /* Number of extra copies of last page */ + int szFrame; /* The size of a single frame */ + i64 iOffset; /* Next byte to write in WAL file */ + WalWriter w; /* The writer */ + + assert( pList ); + assert( pWal->writeLock ); + + /* If this frame set completes a transaction, then nTruncate>0. If + ** nTruncate==0 then this frame set does not complete the transaction. */ + assert( (isCommit!=0)==(nTruncate!=0) ); + +#if defined(SQLITE_TEST) && defined(SQLITE_DEBUG) + { int cnt; for(cnt=0, p=pList; p; p=p->pDirty, cnt++){} + WALTRACE(("WAL%p: frame write begin. %d frames. mxFrame=%d. %s\n", + pWal, cnt, pWal->hdr.mxFrame, isCommit ? "Commit" : "Spill")); + } +#endif + + /* See if it is possible to write these frames into the start of the + ** log file, instead of appending to it at pWal->hdr.mxFrame. + */ + if( SQLITE_OK!=(rc = walRestartLog(pWal)) ){ + return rc; + } + + /* If this is the first frame written into the log, write the WAL + ** header to the start of the WAL file. See comments at the top of + ** this source file for a description of the WAL header format. + */ + iFrame = pWal->hdr.mxFrame; + if( iFrame==0 ){ + u8 aWalHdr[WAL_HDRSIZE]; /* Buffer to assemble wal-header in */ + u32 aCksum[2]; /* Checksum for wal-header */ + + sqlite3Put4byte(&aWalHdr[0], (WAL_MAGIC | SQLITE_BIGENDIAN)); + sqlite3Put4byte(&aWalHdr[4], WAL_MAX_VERSION); + sqlite3Put4byte(&aWalHdr[8], szPage); + sqlite3Put4byte(&aWalHdr[12], pWal->nCkpt); + if( pWal->nCkpt==0 ) sqlite3_randomness(8, pWal->hdr.aSalt); + memcpy(&aWalHdr[16], pWal->hdr.aSalt, 8); + walChecksumBytes(1, aWalHdr, WAL_HDRSIZE-2*4, 0, aCksum); + sqlite3Put4byte(&aWalHdr[24], aCksum[0]); + sqlite3Put4byte(&aWalHdr[28], aCksum[1]); + + pWal->szPage = szPage; + pWal->hdr.bigEndCksum = SQLITE_BIGENDIAN; + pWal->hdr.aFrameCksum[0] = aCksum[0]; + pWal->hdr.aFrameCksum[1] = aCksum[1]; + pWal->truncateOnCommit = 1; + + rc = sqlite3OsWrite(pWal->pWalFd, aWalHdr, sizeof(aWalHdr), 0); + WALTRACE(("WAL%p: wal-header write %s\n", pWal, rc ? "failed" : "ok")); + if( rc!=SQLITE_OK ){ + return rc; } - sqlite3BtreeClearCursor(pCur); + + /* Sync the header (unless SQLITE_IOCAP_SEQUENTIAL is true or unless + ** all syncing is turned off by PRAGMA synchronous=OFF). Otherwise + ** an out-of-order write following a WAL restart could result in + ** database corruption. See the ticket: + ** + ** http://localhost:591/sqlite/info/ff5be73dee + */ + if( pWal->syncHeader && sync_flags ){ + rc = sqlite3OsSync(pWal->pWalFd, sync_flags & SQLITE_SYNC_MASK); + if( rc ) return rc; + } + } + assert( (int)pWal->szPage==szPage ); + + /* Setup information needed to write frames into the WAL */ + w.pWal = pWal; + w.pFd = pWal->pWalFd; + w.iSyncPoint = 0; + w.syncFlags = sync_flags; + w.szPage = szPage; + iOffset = walFrameOffset(iFrame+1, szPage); + szFrame = szPage + WAL_FRAME_HDRSIZE; + + /* Write all frames into the log file exactly once */ + for(p=pList; p; p=p->pDirty){ + int nDbSize; /* 0 normally. Positive == commit flag */ + iFrame++; + assert( iOffset==walFrameOffset(iFrame, szPage) ); + nDbSize = (isCommit && p->pDirty==0) ? nTruncate : 0; + rc = walWriteOneFrame(&w, p, nDbSize, iOffset); + if( rc ) return rc; + pLast = p; + iOffset += szFrame; } - if( pCur->iPage>=0 ){ - int i; - for(i=1; i<=pCur->iPage; i++){ - releasePage(pCur->apPage[i]); + /* If this is the end of a transaction, then we might need to pad + ** the transaction and/or sync the WAL file. + ** + ** Padding and syncing only occur if this set of frames complete a + ** transaction and if PRAGMA synchronous=FULL. If synchronous==NORMAL + ** or synchonous==OFF, then no padding or syncing are needed. + ** + ** If SQLITE_IOCAP_POWERSAFE_OVERWRITE is defined, then padding is not + ** needed and only the sync is done. If padding is needed, then the + ** final frame is repeated (with its commit mark) until the next sector + ** boundary is crossed. Only the part of the WAL prior to the last + ** sector boundary is synced; the part of the last frame that extends + ** past the sector boundary is written after the sync. + */ + if( isCommit && (sync_flags & WAL_SYNC_TRANSACTIONS)!=0 ){ + if( pWal->padToSectorBoundary ){ + int sectorSize = sqlite3OsSectorSize(pWal->pWalFd); + w.iSyncPoint = ((iOffset+sectorSize-1)/sectorSize)*sectorSize; + while( iOffsetpgnoRoot, &pCur->apPage[0])) - ){ - pCur->eState = CURSOR_INVALID; - return rc; + } + + /* If this frame set completes the first transaction in the WAL and + ** if PRAGMA journal_size_limit is set, then truncate the WAL to the + ** journal size limit, if possible. + */ + if( isCommit && pWal->truncateOnCommit && pWal->mxWalSize>=0 ){ + i64 sz = pWal->mxWalSize; + if( walFrameOffset(iFrame+nExtra+1, szPage)>pWal->mxWalSize ){ + sz = walFrameOffset(iFrame+nExtra+1, szPage); } + walLimitSize(pWal, sz); + pWal->truncateOnCommit = 0; } - pRoot = pCur->apPage[0]; - assert( pRoot->pgno==pCur->pgnoRoot ); - pCur->iPage = 0; - pCur->aiIdx[0] = 0; - pCur->info.nSize = 0; - pCur->atLast = 0; - pCur->validNKey = 0; + /* Append data to the wal-index. It is not necessary to lock the + ** wal-index to do this as the SQLITE_SHM_WRITE lock held on the wal-index + ** guarantees that there are no other writers, and no data that may + ** be in use by existing readers is being overwritten. + */ + iFrame = pWal->hdr.mxFrame; + for(p=pList; p && rc==SQLITE_OK; p=p->pDirty){ + iFrame++; + rc = walIndexAppend(pWal, iFrame, p->pgno); + } + while( rc==SQLITE_OK && nExtra>0 ){ + iFrame++; + nExtra--; + rc = walIndexAppend(pWal, iFrame, pLast->pgno); + } - if( pRoot->nCell==0 && !pRoot->leaf ){ - Pgno subpage; - if( pRoot->pgno!=1 ) return SQLITE_CORRUPT_BKPT; - assert( pRoot->pgno==1 ); - subpage = get4byte(&pRoot->aData[pRoot->hdrOffset+8]); - assert( subpage>0 ); - pCur->eState = CURSOR_VALID; - rc = moveToChild(pCur, subpage); - }else{ - pCur->eState = ((pRoot->nCell>0)?CURSOR_VALID:CURSOR_INVALID); + if( rc==SQLITE_OK ){ + /* Update the private copy of the header. */ + pWal->hdr.szPage = (u16)((szPage&0xff00) | (szPage>>16)); + testcase( szPage<=32768 ); + testcase( szPage>=65536 ); + pWal->hdr.mxFrame = iFrame; + if( isCommit ){ + pWal->hdr.iChange++; + pWal->hdr.nPage = nTruncate; + } + /* If this is a commit, update the wal-index header too. */ + if( isCommit ){ + walIndexWriteHdr(pWal); + pWal->iCallback = iFrame; + } } - return rc; -} - -/* -** Move the cursor down to the left-most leaf entry beneath the -** entry to which it is currently pointing. -** -** The left-most leaf is the one with the smallest key - the first -** in ascending order. -*/ -static int moveToLeftmost(BtCursor *pCur){ - Pgno pgno; - int rc = SQLITE_OK; - MemPage *pPage; - assert( cursorHoldsMutex(pCur) ); - assert( pCur->eState==CURSOR_VALID ); - while( rc==SQLITE_OK && !(pPage = pCur->apPage[pCur->iPage])->leaf ){ - assert( pCur->aiIdx[pCur->iPage]nCell ); - pgno = get4byte(findCell(pPage, pCur->aiIdx[pCur->iPage])); - rc = moveToChild(pCur, pgno); - } + WALTRACE(("WAL%p: frame write %s\n", pWal, rc ? "failed" : "ok")); return rc; } -/* -** Move the cursor down to the right-most leaf entry beneath the -** page to which it is currently pointing. Notice the difference -** between moveToLeftmost() and moveToRightmost(). moveToLeftmost() -** finds the left-most entry beneath the *entry* whereas moveToRightmost() -** finds the right-most entry beneath the *page*. -** -** The right-most entry is the one with the largest key - the last -** key in ascending order. -*/ -static int moveToRightmost(BtCursor *pCur){ - Pgno pgno; - int rc = SQLITE_OK; - MemPage *pPage = 0; +/* +** This routine is called to implement sqlite3_wal_checkpoint() and +** related interfaces. +** +** Obtain a CHECKPOINT lock and then backfill as much information as +** we can from WAL into the database. +** +** If parameter xBusy is not NULL, it is a pointer to a busy-handler +** callback. In this case this function runs a blocking checkpoint. +*/ +SQLITE_PRIVATE int sqlite3WalCheckpoint( + Wal *pWal, /* Wal connection */ + int eMode, /* PASSIVE, FULL or RESTART */ + int (*xBusy)(void*), /* Function to call when busy */ + void *pBusyArg, /* Context argument for xBusyHandler */ + int sync_flags, /* Flags to sync db file with (or 0) */ + int nBuf, /* Size of temporary buffer */ + u8 *zBuf, /* Temporary buffer to use */ + int *pnLog, /* OUT: Number of frames in WAL */ + int *pnCkpt /* OUT: Number of backfilled frames in WAL */ +){ + int rc; /* Return code */ + int isChanged = 0; /* True if a new wal-index header is loaded */ + int eMode2 = eMode; /* Mode to pass to walCheckpoint() */ - assert( cursorHoldsMutex(pCur) ); - assert( pCur->eState==CURSOR_VALID ); - while( rc==SQLITE_OK && !(pPage = pCur->apPage[pCur->iPage])->leaf ){ - pgno = get4byte(&pPage->aData[pPage->hdrOffset+8]); - pCur->aiIdx[pCur->iPage] = pPage->nCell; - rc = moveToChild(pCur, pgno); - } - if( rc==SQLITE_OK ){ - pCur->aiIdx[pCur->iPage] = pPage->nCell-1; - pCur->info.nSize = 0; - pCur->validNKey = 0; - } - return rc; -} + assert( pWal->ckptLock==0 ); + assert( pWal->writeLock==0 ); -/* Move the cursor to the first entry in the table. Return SQLITE_OK -** on success. Set *pRes to 0 if the cursor actually points to something -** or set *pRes to 1 if the table is empty. -*/ -SQLITE_PRIVATE int sqlite3BtreeFirst(BtCursor *pCur, int *pRes){ - int rc; + if( pWal->readOnly ) return SQLITE_READONLY; + WALTRACE(("WAL%p: checkpoint begins\n", pWal)); + rc = walLockExclusive(pWal, WAL_CKPT_LOCK, 1); + if( rc ){ + /* Usually this is SQLITE_BUSY meaning that another thread or process + ** is already running a checkpoint, or maybe a recovery. But it might + ** also be SQLITE_IOERR. */ + return rc; + } + pWal->ckptLock = 1; - assert( cursorHoldsMutex(pCur) ); - assert( sqlite3_mutex_held(pCur->pBtree->db->mutex) ); - rc = moveToRoot(pCur); - if( rc==SQLITE_OK ){ - if( pCur->eState==CURSOR_INVALID ){ - assert( pCur->apPage[pCur->iPage]->nCell==0 ); - *pRes = 1; + /* If this is a blocking-checkpoint, then obtain the write-lock as well + ** to prevent any writers from running while the checkpoint is underway. + ** This has to be done before the call to walIndexReadHdr() below. + ** + ** If the writer lock cannot be obtained, then a passive checkpoint is + ** run instead. Since the checkpointer is not holding the writer lock, + ** there is no point in blocking waiting for any readers. Assuming no + ** other error occurs, this function will return SQLITE_BUSY to the caller. + */ + if( eMode!=SQLITE_CHECKPOINT_PASSIVE ){ + rc = walBusyLock(pWal, xBusy, pBusyArg, WAL_WRITE_LOCK, 1); + if( rc==SQLITE_OK ){ + pWal->writeLock = 1; + }else if( rc==SQLITE_BUSY ){ + eMode2 = SQLITE_CHECKPOINT_PASSIVE; rc = SQLITE_OK; - }else{ - assert( pCur->apPage[pCur->iPage]->nCell>0 ); - *pRes = 0; - rc = moveToLeftmost(pCur); } } - return rc; -} - -/* Move the cursor to the last entry in the table. Return SQLITE_OK -** on success. Set *pRes to 0 if the cursor actually points to something -** or set *pRes to 1 if the table is empty. -*/ -SQLITE_PRIVATE int sqlite3BtreeLast(BtCursor *pCur, int *pRes){ - int rc; - - assert( cursorHoldsMutex(pCur) ); - assert( sqlite3_mutex_held(pCur->pBtree->db->mutex) ); - /* If the cursor already points to the last entry, this is a no-op. */ - if( CURSOR_VALID==pCur->eState && pCur->atLast ){ -#ifdef SQLITE_DEBUG - /* This block serves to assert() that the cursor really does point - ** to the last entry in the b-tree. */ - int ii; - for(ii=0; iiiPage; ii++){ - assert( pCur->aiIdx[ii]==pCur->apPage[ii]->nCell ); - } - assert( pCur->aiIdx[pCur->iPage]==pCur->apPage[pCur->iPage]->nCell-1 ); - assert( pCur->apPage[pCur->iPage]->leaf ); -#endif - return SQLITE_OK; + /* Read the wal-index header. */ + if( rc==SQLITE_OK ){ + rc = walIndexReadHdr(pWal, &isChanged); } - rc = moveToRoot(pCur); + /* Copy data from the log to the database file. */ if( rc==SQLITE_OK ){ - if( CURSOR_INVALID==pCur->eState ){ - assert( pCur->apPage[pCur->iPage]->nCell==0 ); - *pRes = 1; + if( pWal->hdr.mxFrame && walPagesize(pWal)!=nBuf ){ + rc = SQLITE_CORRUPT_BKPT; }else{ - assert( pCur->eState==CURSOR_VALID ); - *pRes = 0; - rc = moveToRightmost(pCur); - pCur->atLast = rc==SQLITE_OK ?1:0; + rc = walCheckpoint(pWal, eMode2, xBusy, pBusyArg, sync_flags, zBuf); } - } - return rc; -} - -/* Move the cursor so that it points to an entry near the key -** specified by pIdxKey or intKey. Return a success code. -** -** For INTKEY tables, the intKey parameter is used. pIdxKey -** must be NULL. For index tables, pIdxKey is used and intKey -** is ignored. -** -** If an exact match is not found, then the cursor is always -** left pointing at a leaf page which would hold the entry if it -** were present. The cursor might point to an entry that comes -** before or after the key. -** -** An integer is written into *pRes which is the result of -** comparing the key with the entry to which the cursor is -** pointing. The meaning of the integer written into -** *pRes is as follows: -** -** *pRes<0 The cursor is left pointing at an entry that -** is smaller than intKey/pIdxKey or if the table is empty -** and the cursor is therefore left point to nothing. -** -** *pRes==0 The cursor is left pointing at an entry that -** exactly matches intKey/pIdxKey. -** -** *pRes>0 The cursor is left pointing at an entry that -** is larger than intKey/pIdxKey. -** -*/ -SQLITE_PRIVATE int sqlite3BtreeMovetoUnpacked( - BtCursor *pCur, /* The cursor to be moved */ - UnpackedRecord *pIdxKey, /* Unpacked index key */ - i64 intKey, /* The table key */ - int biasRight, /* If true, bias the search to the high end */ - int *pRes /* Write search results here */ -){ - int rc; - - assert( cursorHoldsMutex(pCur) ); - assert( sqlite3_mutex_held(pCur->pBtree->db->mutex) ); - /* If the cursor is already positioned at the point we are trying - ** to move to, then just return without doing any work */ - if( pCur->eState==CURSOR_VALID && pCur->validNKey - && pCur->apPage[0]->intKey - ){ - if( pCur->info.nKey==intKey ){ - *pRes = 0; - return SQLITE_OK; - } - if( pCur->atLast && pCur->info.nKeyhdr.mxFrame; + if( pnCkpt ) *pnCkpt = (int)(walCkptInfo(pWal)->nBackfill); } } - rc = moveToRoot(pCur); - if( rc ){ - return rc; - } - assert( pCur->apPage[pCur->iPage] ); - assert( pCur->apPage[pCur->iPage]->isInit ); - if( pCur->eState==CURSOR_INVALID ){ - *pRes = -1; - assert( pCur->apPage[pCur->iPage]->nCell==0 ); - return SQLITE_OK; + if( isChanged ){ + /* If a new wal-index header was loaded before the checkpoint was + ** performed, then the pager-cache associated with pWal is now + ** out of date. So zero the cached wal-index header to ensure that + ** next time the pager opens a snapshot on this database it knows that + ** the cache needs to be reset. + */ + memset(&pWal->hdr, 0, sizeof(WalIndexHdr)); } - assert( pCur->apPage[0]->intKey || pIdxKey ); - for(;;){ - int lwr, upr; - Pgno chldPg; - MemPage *pPage = pCur->apPage[pCur->iPage]; - int c = -1; /* pRes return if table is empty must be -1 */ - lwr = 0; - upr = pPage->nCell-1; - if( (!pPage->intKey && pIdxKey==0) || upr<0 ){ - rc = SQLITE_CORRUPT_BKPT; - goto moveto_finish; - } - if( biasRight ){ - pCur->aiIdx[pCur->iPage] = (u16)upr; - }else{ - pCur->aiIdx[pCur->iPage] = (u16)((upr+lwr)/2); - } - for(;;){ - int idx = pCur->aiIdx[pCur->iPage]; /* Index of current cell in pPage */ - u8 *pCell; /* Pointer to current cell in pPage */ - pCur->info.nSize = 0; - pCell = findCell(pPage, idx) + pPage->childPtrSize; - if( pPage->intKey ){ - i64 nCellKey; - if( pPage->hasData ){ - u32 dummy; - pCell += getVarint32(pCell, dummy); - } - getVarint(pCell, (u64*)&nCellKey); - if( nCellKey==intKey ){ - c = 0; - }else if( nCellKeyintKey ); - c = +1; - } - pCur->validNKey = 1; - pCur->info.nKey = nCellKey; - }else{ - /* The maximum supported page-size is 32768 bytes. This means that - ** the maximum number of record bytes stored on an index B-Tree - ** page is at most 8198 bytes, which may be stored as a 2-byte - ** varint. This information is used to attempt to avoid parsing - ** the entire cell by checking for the cases where the record is - ** stored entirely within the b-tree page by inspecting the first - ** 2 bytes of the cell. - */ - int nCell = pCell[0]; - if( !(nCell & 0x80) && nCell<=pPage->maxLocal ){ - /* This branch runs if the record-size field of the cell is a - ** single byte varint and the record fits entirely on the main - ** b-tree page. */ - c = sqlite3VdbeRecordCompare(nCell, (void*)&pCell[1], pIdxKey); - }else if( !(pCell[1] & 0x80) - && (nCell = ((nCell&0x7f)<<7) + pCell[1])<=pPage->maxLocal - ){ - /* The record-size field is a 2 byte varint and the record - ** fits entirely on the main b-tree page. */ - c = sqlite3VdbeRecordCompare(nCell, (void*)&pCell[2], pIdxKey); - }else{ - /* The record flows over onto one or more overflow pages. In - ** this case the whole cell needs to be parsed, a buffer allocated - ** and accessPayload() used to retrieve the record into the - ** buffer before VdbeRecordCompare() can be called. */ - void *pCellKey; - u8 * const pCellBody = pCell - pPage->childPtrSize; - sqlite3BtreeParseCellPtr(pPage, pCellBody, &pCur->info); - nCell = (int)pCur->info.nKey; - pCellKey = sqlite3Malloc( nCell ); - if( pCellKey==0 ){ - rc = SQLITE_NOMEM; - goto moveto_finish; - } - rc = accessPayload(pCur, 0, nCell, (unsigned char*)pCellKey, 0, 0); - c = sqlite3VdbeRecordCompare(nCell, pCellKey, pIdxKey); - sqlite3_free(pCellKey); - if( rc ) goto moveto_finish; - } - } - if( c==0 ){ - if( pPage->intKey && !pPage->leaf ){ - lwr = idx; - upr = lwr - 1; - break; - }else{ - *pRes = 0; - rc = SQLITE_OK; - goto moveto_finish; - } - } - if( c<0 ){ - lwr = idx+1; - }else{ - upr = idx-1; - } - if( lwr>upr ){ - break; - } - pCur->aiIdx[pCur->iPage] = (u16)((lwr+upr)/2); - } - assert( lwr==upr+1 ); - assert( pPage->isInit ); - if( pPage->leaf ){ - chldPg = 0; - }else if( lwr>=pPage->nCell ){ - chldPg = get4byte(&pPage->aData[pPage->hdrOffset+8]); - }else{ - chldPg = get4byte(findCell(pPage, lwr)); - } - if( chldPg==0 ){ - assert( pCur->aiIdx[pCur->iPage]apPage[pCur->iPage]->nCell ); - if( pRes ) *pRes = c; - rc = SQLITE_OK; - goto moveto_finish; - } - pCur->aiIdx[pCur->iPage] = (u16)lwr; - pCur->info.nSize = 0; - pCur->validNKey = 0; - rc = moveToChild(pCur, chldPg); - if( rc ) goto moveto_finish; - } -moveto_finish: - return rc; + /* Release the locks. */ + sqlite3WalEndWriteTransaction(pWal); + walUnlockExclusive(pWal, WAL_CKPT_LOCK, 1); + pWal->ckptLock = 0; + WALTRACE(("WAL%p: checkpoint %s\n", pWal, rc ? "failed" : "ok")); + return (rc==SQLITE_OK && eMode!=eMode2 ? SQLITE_BUSY : rc); } -/* -** In this version of BtreeMoveto, pKey is a packed index record -** such as is generated by the OP_MakeRecord opcode. Unpack the -** record and then call BtreeMovetoUnpacked() to do the work. +/* Return the value to pass to a sqlite3_wal_hook callback, the +** number of frames in the WAL at the point of the last commit since +** sqlite3WalCallback() was called. If no commits have occurred since +** the last call, then return 0. */ -SQLITE_PRIVATE int sqlite3BtreeMoveto( - BtCursor *pCur, /* Cursor open on the btree to be searched */ - const void *pKey, /* Packed key if the btree is an index */ - i64 nKey, /* Integer key for tables. Size of pKey for indices */ - int bias, /* Bias search to the high end */ - int *pRes /* Write search results here */ -){ - int rc; /* Status code */ - UnpackedRecord *pIdxKey; /* Unpacked index key */ - char aSpace[150]; /* Temp space for pIdxKey - to avoid a malloc */ - - - if( pKey ){ - assert( nKey==(i64)(int)nKey ); - pIdxKey = sqlite3VdbeRecordUnpack(pCur->pKeyInfo, (int)nKey, pKey, - aSpace, sizeof(aSpace)); - if( pIdxKey==0 ) return SQLITE_NOMEM; - }else{ - pIdxKey = 0; - } - rc = sqlite3BtreeMovetoUnpacked(pCur, pIdxKey, nKey, bias, pRes); - if( pKey ){ - sqlite3VdbeDeleteUnpackedRecord(pIdxKey); +SQLITE_PRIVATE int sqlite3WalCallback(Wal *pWal){ + u32 ret = 0; + if( pWal ){ + ret = pWal->iCallback; + pWal->iCallback = 0; } - return rc; + return (int)ret; } - /* -** Return TRUE if the cursor is not pointing at an entry of the table. +** This function is called to change the WAL subsystem into or out +** of locking_mode=EXCLUSIVE. ** -** TRUE will be returned after a call to sqlite3BtreeNext() moves -** past the last entry in the table or sqlite3BtreePrev() moves past -** the first entry. TRUE is also returned if the table is empty. -*/ -SQLITE_PRIVATE int sqlite3BtreeEof(BtCursor *pCur){ - /* TODO: What if the cursor is in CURSOR_REQUIRESEEK but all table entries - ** have been deleted? This API will need to change to return an error code - ** as well as the boolean result value. - */ - return (CURSOR_VALID!=pCur->eState); -} - -/* -** Advance the cursor to the next entry in the database. If -** successful then set *pRes=0. If the cursor -** was already pointing to the last entry in the database before -** this routine was called, then set *pRes=1. +** If op is zero, then attempt to change from locking_mode=EXCLUSIVE +** into locking_mode=NORMAL. This means that we must acquire a lock +** on the pWal->readLock byte. If the WAL is already in locking_mode=NORMAL +** or if the acquisition of the lock fails, then return 0. If the +** transition out of exclusive-mode is successful, return 1. This +** operation must occur while the pager is still holding the exclusive +** lock on the main database file. +** +** If op is one, then change from locking_mode=NORMAL into +** locking_mode=EXCLUSIVE. This means that the pWal->readLock must +** be released. Return 1 if the transition is made and 0 if the +** WAL is already in exclusive-locking mode - meaning that this +** routine is a no-op. The pager must already hold the exclusive lock +** on the main database file before invoking this operation. +** +** If op is negative, then do a dry-run of the op==1 case but do +** not actually change anything. The pager uses this to see if it +** should acquire the database exclusive lock prior to invoking +** the op==1 case. */ -SQLITE_PRIVATE int sqlite3BtreeNext(BtCursor *pCur, int *pRes){ +SQLITE_PRIVATE int sqlite3WalExclusiveMode(Wal *pWal, int op){ int rc; - int idx; - MemPage *pPage; - - assert( cursorHoldsMutex(pCur) ); - rc = restoreCursorPosition(pCur); - if( rc!=SQLITE_OK ){ - return rc; - } - assert( pRes!=0 ); - if( CURSOR_INVALID==pCur->eState ){ - *pRes = 1; - return SQLITE_OK; - } - if( pCur->skip>0 ){ - pCur->skip = 0; - *pRes = 0; - return SQLITE_OK; - } - pCur->skip = 0; + assert( pWal->writeLock==0 ); + assert( pWal->exclusiveMode!=WAL_HEAPMEMORY_MODE || op==-1 ); - pPage = pCur->apPage[pCur->iPage]; - idx = ++pCur->aiIdx[pCur->iPage]; - assert( pPage->isInit ); - assert( idx<=pPage->nCell ); + /* pWal->readLock is usually set, but might be -1 if there was a + ** prior error while attempting to acquire are read-lock. This cannot + ** happen if the connection is actually in exclusive mode (as no xShmLock + ** locks are taken in this case). Nor should the pager attempt to + ** upgrade to exclusive-mode following such an error. + */ + assert( pWal->readLock>=0 || pWal->lockError ); + assert( pWal->readLock>=0 || (op<=0 && pWal->exclusiveMode==0) ); - pCur->info.nSize = 0; - pCur->validNKey = 0; - if( idx>=pPage->nCell ){ - if( !pPage->leaf ){ - rc = moveToChild(pCur, get4byte(&pPage->aData[pPage->hdrOffset+8])); - if( rc ) return rc; - rc = moveToLeftmost(pCur); - *pRes = 0; - return rc; - } - do{ - if( pCur->iPage==0 ){ - *pRes = 1; - pCur->eState = CURSOR_INVALID; - return SQLITE_OK; + if( op==0 ){ + if( pWal->exclusiveMode ){ + pWal->exclusiveMode = 0; + if( walLockShared(pWal, WAL_READ_LOCK(pWal->readLock))!=SQLITE_OK ){ + pWal->exclusiveMode = 1; } - sqlite3BtreeMoveToParent(pCur); - pPage = pCur->apPage[pCur->iPage]; - }while( pCur->aiIdx[pCur->iPage]>=pPage->nCell ); - *pRes = 0; - if( pPage->intKey ){ - rc = sqlite3BtreeNext(pCur, pRes); + rc = pWal->exclusiveMode==0; }else{ - rc = SQLITE_OK; + /* Already in locking_mode=NORMAL */ + rc = 0; } - return rc; - } - *pRes = 0; - if( pPage->leaf ){ - return SQLITE_OK; + }else if( op>0 ){ + assert( pWal->exclusiveMode==0 ); + assert( pWal->readLock>=0 ); + walUnlockShared(pWal, WAL_READ_LOCK(pWal->readLock)); + pWal->exclusiveMode = 1; + rc = 1; + }else{ + rc = pWal->exclusiveMode==0; } - rc = moveToLeftmost(pCur); return rc; } +/* +** Return true if the argument is non-NULL and the WAL module is using +** heap-memory for the wal-index. Otherwise, if the argument is NULL or the +** WAL module is using shared-memory, return false. +*/ +SQLITE_PRIVATE int sqlite3WalHeapMemory(Wal *pWal){ + return (pWal && pWal->exclusiveMode==WAL_HEAPMEMORY_MODE ); +} +#ifdef SQLITE_ENABLE_ZIPVFS /* -** Step the cursor to the back to the previous entry in the database. If -** successful then set *pRes=0. If the cursor -** was already pointing to the first entry in the database before -** this routine was called, then set *pRes=1. +** If the argument is not NULL, it points to a Wal object that holds a +** read-lock. This function returns the database page-size if it is known, +** or zero if it is not (or if pWal is NULL). */ -SQLITE_PRIVATE int sqlite3BtreePrevious(BtCursor *pCur, int *pRes){ - int rc; - MemPage *pPage; - - assert( cursorHoldsMutex(pCur) ); - rc = restoreCursorPosition(pCur); - if( rc!=SQLITE_OK ){ - return rc; - } - pCur->atLast = 0; - if( CURSOR_INVALID==pCur->eState ){ - *pRes = 1; - return SQLITE_OK; - } - if( pCur->skip<0 ){ - pCur->skip = 0; - *pRes = 0; - return SQLITE_OK; - } - pCur->skip = 0; - - pPage = pCur->apPage[pCur->iPage]; - assert( pPage->isInit ); - if( !pPage->leaf ){ - int idx = pCur->aiIdx[pCur->iPage]; - rc = moveToChild(pCur, get4byte(findCell(pPage, idx))); - if( rc ){ - return rc; - } - rc = moveToRightmost(pCur); - }else{ - while( pCur->aiIdx[pCur->iPage]==0 ){ - if( pCur->iPage==0 ){ - pCur->eState = CURSOR_INVALID; - *pRes = 1; - return SQLITE_OK; - } - sqlite3BtreeMoveToParent(pCur); - } - pCur->info.nSize = 0; - pCur->validNKey = 0; - - pCur->aiIdx[pCur->iPage]--; - pPage = pCur->apPage[pCur->iPage]; - if( pPage->intKey && !pPage->leaf ){ - rc = sqlite3BtreePrevious(pCur, pRes); - }else{ - rc = SQLITE_OK; - } - } - *pRes = 0; - return rc; +SQLITE_PRIVATE int sqlite3WalFramesize(Wal *pWal){ + assert( pWal==0 || pWal->readLock>=0 ); + return (pWal ? pWal->szPage : 0); } +#endif + +#endif /* #ifndef SQLITE_OMIT_WAL */ +/************** End of wal.c *************************************************/ +/************** Begin file btmutex.c *****************************************/ /* -** Allocate a new page from the database file. +** 2007 August 27 ** -** The new page is marked as dirty. (In other words, sqlite3PagerWrite() -** has already been called on the new page.) The new page has also -** been referenced and the calling routine is responsible for calling -** sqlite3PagerUnref() on the new page when it is done. +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: ** -** SQLITE_OK is returned on success. Any other return value indicates -** an error. *ppPage and *pPgno are undefined in the event of an error. -** Do not invoke sqlite3PagerUnref() on *ppPage if an error is returned. +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. ** -** If the "nearby" parameter is not 0, then a (feeble) effort is made to -** locate a page close to the page number "nearby". This can be used in an -** attempt to keep related pages close to each other in the database file, -** which in turn can make database access faster. +************************************************************************* ** -** If the "exact" parameter is not 0, and the page-number nearby exists -** anywhere on the free-list, then it is guarenteed to be returned. This -** is only used by auto-vacuum databases when allocating a new table. +** This file contains code used to implement mutexes on Btree objects. +** This code really belongs in btree.c. But btree.c is getting too +** big and we want to break it down some. This packaged seemed like +** a good breakout. +*/ +/************** Include btreeInt.h in the middle of btmutex.c ****************/ +/************** Begin file btreeInt.h ****************************************/ +/* +** 2004 April 6 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** This file implements a external (disk-based) database using BTrees. +** For a detailed discussion of BTrees, refer to +** +** Donald E. Knuth, THE ART OF COMPUTER PROGRAMMING, Volume 3: +** "Sorting And Searching", pages 473-480. Addison-Wesley +** Publishing Company, Reading, Massachusetts. +** +** The basic idea is that each page of the file contains N database +** entries and N+1 pointers to subpages. +** +** ---------------------------------------------------------------- +** | Ptr(0) | Key(0) | Ptr(1) | Key(1) | ... | Key(N-1) | Ptr(N) | +** ---------------------------------------------------------------- +** +** All of the keys on the page that Ptr(0) points to have values less +** than Key(0). All of the keys on page Ptr(1) and its subpages have +** values greater than Key(0) and less than Key(1). All of the keys +** on Ptr(N) and its subpages have values greater than Key(N-1). And +** so forth. +** +** Finding a particular key requires reading O(log(M)) pages from the +** disk where M is the number of entries in the tree. +** +** In this implementation, a single file can hold one or more separate +** BTrees. Each BTree is identified by the index of its root page. The +** key and data for any entry are combined to form the "payload". A +** fixed amount of payload can be carried directly on the database +** page. If the payload is larger than the preset amount then surplus +** bytes are stored on overflow pages. The payload for an entry +** and the preceding pointer are combined to form a "Cell". Each +** page has a small header which contains the Ptr(N) pointer and other +** information such as the size of key and data. +** +** FORMAT DETAILS +** +** The file is divided into pages. The first page is called page 1, +** the second is page 2, and so forth. A page number of zero indicates +** "no such page". The page size can be any power of 2 between 512 and 65536. +** Each page can be either a btree page, a freelist page, an overflow +** page, or a pointer-map page. +** +** The first page is always a btree page. The first 100 bytes of the first +** page contain a special header (the "file header") that describes the file. +** The format of the file header is as follows: +** +** OFFSET SIZE DESCRIPTION +** 0 16 Header string: "SQLite format 3\000" +** 16 2 Page size in bytes. +** 18 1 File format write version +** 19 1 File format read version +** 20 1 Bytes of unused space at the end of each page +** 21 1 Max embedded payload fraction +** 22 1 Min embedded payload fraction +** 23 1 Min leaf payload fraction +** 24 4 File change counter +** 28 4 Reserved for future use +** 32 4 First freelist page +** 36 4 Number of freelist pages in the file +** 40 60 15 4-byte meta values passed to higher layers +** +** 40 4 Schema cookie +** 44 4 File format of schema layer +** 48 4 Size of page cache +** 52 4 Largest root-page (auto/incr_vacuum) +** 56 4 1=UTF-8 2=UTF16le 3=UTF16be +** 60 4 User version +** 64 4 Incremental vacuum mode +** 68 4 unused +** 72 4 unused +** 76 4 unused +** +** All of the integer values are big-endian (most significant byte first). +** +** The file change counter is incremented when the database is changed +** This counter allows other processes to know when the file has changed +** and thus when they need to flush their cache. +** +** The max embedded payload fraction is the amount of the total usable +** space in a page that can be consumed by a single cell for standard +** B-tree (non-LEAFDATA) tables. A value of 255 means 100%. The default +** is to limit the maximum cell size so that at least 4 cells will fit +** on one page. Thus the default max embedded payload fraction is 64. +** +** If the payload for a cell is larger than the max payload, then extra +** payload is spilled to overflow pages. Once an overflow page is allocated, +** as many bytes as possible are moved into the overflow pages without letting +** the cell size drop below the min embedded payload fraction. +** +** The min leaf payload fraction is like the min embedded payload fraction +** except that it applies to leaf nodes in a LEAFDATA tree. The maximum +** payload fraction for a LEAFDATA tree is always 100% (or 255) and it +** not specified in the header. +** +** Each btree pages is divided into three sections: The header, the +** cell pointer array, and the cell content area. Page 1 also has a 100-byte +** file header that occurs before the page header. +** +** |----------------| +** | file header | 100 bytes. Page 1 only. +** |----------------| +** | page header | 8 bytes for leaves. 12 bytes for interior nodes +** |----------------| +** | cell pointer | | 2 bytes per cell. Sorted order. +** | array | | Grows downward +** | | v +** |----------------| +** | unallocated | +** | space | +** |----------------| ^ Grows upwards +** | cell content | | Arbitrary order interspersed with freeblocks. +** | area | | and free space fragments. +** |----------------| +** +** The page headers looks like this: +** +** OFFSET SIZE DESCRIPTION +** 0 1 Flags. 1: intkey, 2: zerodata, 4: leafdata, 8: leaf +** 1 2 byte offset to the first freeblock +** 3 2 number of cells on this page +** 5 2 first byte of the cell content area +** 7 1 number of fragmented free bytes +** 8 4 Right child (the Ptr(N) value). Omitted on leaves. +** +** The flags define the format of this btree page. The leaf flag means that +** this page has no children. The zerodata flag means that this page carries +** only keys and no data. The intkey flag means that the key is a integer +** which is stored in the key size entry of the cell header rather than in +** the payload area. +** +** The cell pointer array begins on the first byte after the page header. +** The cell pointer array contains zero or more 2-byte numbers which are +** offsets from the beginning of the page to the cell content in the cell +** content area. The cell pointers occur in sorted order. The system strives +** to keep free space after the last cell pointer so that new cells can +** be easily added without having to defragment the page. +** +** Cell content is stored at the very end of the page and grows toward the +** beginning of the page. +** +** Unused space within the cell content area is collected into a linked list of +** freeblocks. Each freeblock is at least 4 bytes in size. The byte offset +** to the first freeblock is given in the header. Freeblocks occur in +** increasing order. Because a freeblock must be at least 4 bytes in size, +** any group of 3 or fewer unused bytes in the cell content area cannot +** exist on the freeblock chain. A group of 3 or fewer free bytes is called +** a fragment. The total number of bytes in all fragments is recorded. +** in the page header at offset 7. +** +** SIZE DESCRIPTION +** 2 Byte offset of the next freeblock +** 2 Bytes in this freeblock +** +** Cells are of variable length. Cells are stored in the cell content area at +** the end of the page. Pointers to the cells are in the cell pointer array +** that immediately follows the page header. Cells is not necessarily +** contiguous or in order, but cell pointers are contiguous and in order. +** +** Cell content makes use of variable length integers. A variable +** length integer is 1 to 9 bytes where the lower 7 bits of each +** byte are used. The integer consists of all bytes that have bit 8 set and +** the first byte with bit 8 clear. The most significant byte of the integer +** appears first. A variable-length integer may not be more than 9 bytes long. +** As a special case, all 8 bytes of the 9th byte are used as data. This +** allows a 64-bit integer to be encoded in 9 bytes. +** +** 0x00 becomes 0x00000000 +** 0x7f becomes 0x0000007f +** 0x81 0x00 becomes 0x00000080 +** 0x82 0x00 becomes 0x00000100 +** 0x80 0x7f becomes 0x0000007f +** 0x8a 0x91 0xd1 0xac 0x78 becomes 0x12345678 +** 0x81 0x81 0x81 0x81 0x01 becomes 0x10204081 +** +** Variable length integers are used for rowids and to hold the number of +** bytes of key and data in a btree cell. +** +** The content of a cell looks like this: +** +** SIZE DESCRIPTION +** 4 Page number of the left child. Omitted if leaf flag is set. +** var Number of bytes of data. Omitted if the zerodata flag is set. +** var Number of bytes of key. Or the key itself if intkey flag is set. +** * Payload +** 4 First page of the overflow chain. Omitted if no overflow +** +** Overflow pages form a linked list. Each page except the last is completely +** filled with data (pagesize - 4 bytes). The last page can have as little +** as 1 byte of data. +** +** SIZE DESCRIPTION +** 4 Page number of next overflow page +** * Data +** +** Freelist pages come in two subtypes: trunk pages and leaf pages. The +** file header points to the first in a linked list of trunk page. Each trunk +** page points to multiple leaf pages. The content of a leaf page is +** unspecified. A trunk page looks like this: +** +** SIZE DESCRIPTION +** 4 Page number of next trunk page +** 4 Number of leaf pointers on this page +** * zero or more pages numbers of leaves */ -static int allocateBtreePage( - BtShared *pBt, - MemPage **ppPage, - Pgno *pPgno, - Pgno nearby, - u8 exact -){ - MemPage *pPage1; - int rc; - u32 n; /* Number of pages on the freelist */ - u32 k; /* Number of leaves on the trunk of the freelist */ - MemPage *pTrunk = 0; - MemPage *pPrevTrunk = 0; - Pgno mxPage; /* Total size of the database file */ - - assert( sqlite3_mutex_held(pBt->mutex) ); - pPage1 = pBt->pPage1; - mxPage = pagerPagecount(pBt); - n = get4byte(&pPage1->aData[36]); - if( n>mxPage ){ - return SQLITE_CORRUPT_BKPT; - } - if( n>0 ){ - /* There are pages on the freelist. Reuse one of those pages. */ - Pgno iTrunk; - u8 searchList = 0; /* If the free-list must be searched for 'nearby' */ - - /* If the 'exact' parameter was true and a query of the pointer-map - ** shows that the page 'nearby' is somewhere on the free-list, then - ** the entire-list will be searched for that page. - */ -#ifndef SQLITE_OMIT_AUTOVACUUM - if( exact && nearby<=mxPage ){ - u8 eType; - assert( nearby>0 ); - assert( pBt->autoVacuum ); - rc = ptrmapGet(pBt, nearby, &eType, 0); - if( rc ) return rc; - if( eType==PTRMAP_FREEPAGE ){ - searchList = 1; - } - *pPgno = nearby; - } -#endif - - /* Decrement the free-list count by 1. Set iTrunk to the index of the - ** first free-list trunk page. iPrevTrunk is initially 1. - */ - rc = sqlite3PagerWrite(pPage1->pDbPage); - if( rc ) return rc; - put4byte(&pPage1->aData[36], n-1); - /* The code within this loop is run only once if the 'searchList' variable - ** is not true. Otherwise, it runs once for each trunk-page on the - ** free-list until the page 'nearby' is located. - */ - do { - pPrevTrunk = pTrunk; - if( pPrevTrunk ){ - iTrunk = get4byte(&pPrevTrunk->aData[0]); - }else{ - iTrunk = get4byte(&pPage1->aData[32]); - } - if( iTrunk>mxPage ){ - rc = SQLITE_CORRUPT_BKPT; - }else{ - rc = sqlite3BtreeGetPage(pBt, iTrunk, &pTrunk, 0); - } - if( rc ){ - pTrunk = 0; - goto end_allocate_page; - } - k = get4byte(&pTrunk->aData[4]); - if( k==0 && !searchList ){ - /* The trunk has no leaves and the list is not being searched. - ** So extract the trunk page itself and use it as the newly - ** allocated page */ - assert( pPrevTrunk==0 ); - rc = sqlite3PagerWrite(pTrunk->pDbPage); - if( rc ){ - goto end_allocate_page; - } - *pPgno = iTrunk; - memcpy(&pPage1->aData[32], &pTrunk->aData[0], 4); - *ppPage = pTrunk; - pTrunk = 0; - TRACE(("ALLOCATE: %d trunk - %d free pages left\n", *pPgno, n-1)); - }else if( k>(u32)(pBt->usableSize/4 - 2) ){ - /* Value of k is out of range. Database corruption */ - rc = SQLITE_CORRUPT_BKPT; - goto end_allocate_page; -#ifndef SQLITE_OMIT_AUTOVACUUM - }else if( searchList && nearby==iTrunk ){ - /* The list is being searched and this trunk page is the page - ** to allocate, regardless of whether it has leaves. - */ - assert( *pPgno==iTrunk ); - *ppPage = pTrunk; - searchList = 0; - rc = sqlite3PagerWrite(pTrunk->pDbPage); - if( rc ){ - goto end_allocate_page; - } - if( k==0 ){ - if( !pPrevTrunk ){ - memcpy(&pPage1->aData[32], &pTrunk->aData[0], 4); - }else{ - memcpy(&pPrevTrunk->aData[0], &pTrunk->aData[0], 4); - } - }else{ - /* The trunk page is required by the caller but it contains - ** pointers to free-list leaves. The first leaf becomes a trunk - ** page in this case. - */ - MemPage *pNewTrunk; - Pgno iNewTrunk = get4byte(&pTrunk->aData[8]); - if( iNewTrunk>mxPage ){ - rc = SQLITE_CORRUPT_BKPT; - goto end_allocate_page; - } - rc = sqlite3BtreeGetPage(pBt, iNewTrunk, &pNewTrunk, 0); - if( rc!=SQLITE_OK ){ - goto end_allocate_page; - } - rc = sqlite3PagerWrite(pNewTrunk->pDbPage); - if( rc!=SQLITE_OK ){ - releasePage(pNewTrunk); - goto end_allocate_page; - } - memcpy(&pNewTrunk->aData[0], &pTrunk->aData[0], 4); - put4byte(&pNewTrunk->aData[4], k-1); - memcpy(&pNewTrunk->aData[8], &pTrunk->aData[12], (k-1)*4); - releasePage(pNewTrunk); - if( !pPrevTrunk ){ - assert( sqlite3PagerIswriteable(pPage1->pDbPage) ); - put4byte(&pPage1->aData[32], iNewTrunk); - }else{ - rc = sqlite3PagerWrite(pPrevTrunk->pDbPage); - if( rc ){ - goto end_allocate_page; - } - put4byte(&pPrevTrunk->aData[0], iNewTrunk); - } - } - pTrunk = 0; - TRACE(("ALLOCATE: %d trunk - %d free pages left\n", *pPgno, n-1)); -#endif - }else if( k>0 ){ - /* Extract a leaf from the trunk */ - u32 closest; - Pgno iPage; - unsigned char *aData = pTrunk->aData; - rc = sqlite3PagerWrite(pTrunk->pDbPage); - if( rc ){ - goto end_allocate_page; - } - if( nearby>0 ){ - u32 i; - int dist; - closest = 0; - dist = get4byte(&aData[8]) - nearby; - if( dist<0 ) dist = -dist; - for(i=1; ipageSize-8)) - iPage = get4byte(&aData[8+closest*4]); - if( iPage>mxPage ){ - rc = SQLITE_CORRUPT_BKPT; - goto end_allocate_page; - } - if( !searchList || iPage==nearby ){ - int noContent; - Pgno nPage; - *pPgno = iPage; - nPage = pagerPagecount(pBt); - if( iPage>nPage ){ - /* Free page off the end of the file */ - rc = SQLITE_CORRUPT_BKPT; - goto end_allocate_page; - } - TRACE(("ALLOCATE: %d was leaf %d of %d on trunk %d" - ": %d more free pages\n", - *pPgno, closest+1, k, pTrunk->pgno, n-1)); - if( closestpDbPage) ); - noContent = !btreeGetHasContent(pBt, *pPgno); - rc = sqlite3BtreeGetPage(pBt, *pPgno, ppPage, noContent); - if( rc==SQLITE_OK ){ - rc = sqlite3PagerWrite((*ppPage)->pDbPage); - if( rc!=SQLITE_OK ){ - releasePage(*ppPage); - } - } - searchList = 0; - } - } - releasePage(pPrevTrunk); - pPrevTrunk = 0; - }while( searchList ); - }else{ - /* There are no pages on the freelist, so create a new page at the - ** end of the file */ - int nPage = pagerPagecount(pBt); - *pPgno = nPage + 1; +/* The maximum number of cells on a single page of the database. This +** assumes a minimum cell size of 6 bytes (4 bytes for the cell itself +** plus 2 bytes for the index to the cell in the page header). Such +** small cells will be rare, but they are possible. +*/ +#define MX_CELL(pBt) ((pBt->pageSize-8)/6) - if( *pPgno==PENDING_BYTE_PAGE(pBt) ){ - (*pPgno)++; - } +/* Forward declarations */ +typedef struct MemPage MemPage; +typedef struct BtLock BtLock; -#ifndef SQLITE_OMIT_AUTOVACUUM - if( pBt->autoVacuum && PTRMAP_ISPAGE(pBt, *pPgno) ){ - /* If *pPgno refers to a pointer-map page, allocate two new pages - ** at the end of the file instead of one. The first allocated page - ** becomes a new pointer-map page, the second is used by the caller. - */ - MemPage *pPg = 0; - TRACE(("ALLOCATE: %d from end of file (pointer-map page)\n", *pPgno)); - assert( *pPgno!=PENDING_BYTE_PAGE(pBt) ); - rc = sqlite3BtreeGetPage(pBt, *pPgno, &pPg, 0); - if( rc==SQLITE_OK ){ - rc = sqlite3PagerWrite(pPg->pDbPage); - releasePage(pPg); - } - if( rc ) return rc; - (*pPgno)++; - if( *pPgno==PENDING_BYTE_PAGE(pBt) ){ (*pPgno)++; } - } +/* +** This is a magic string that appears at the beginning of every +** SQLite database in order to identify the file as a real database. +** +** You can change this value at compile-time by specifying a +** -DSQLITE_FILE_HEADER="..." on the compiler command-line. The +** header must be exactly 16 bytes including the zero-terminator so +** the string itself should be 15 characters long. If you change +** the header, then your custom library will not be able to read +** databases generated by the standard tools and the standard tools +** will not be able to read databases created by your custom library. +*/ +#ifndef SQLITE_FILE_HEADER /* 123456789 123456 */ +# define SQLITE_FILE_HEADER "SQLite format 3" #endif - assert( *pPgno!=PENDING_BYTE_PAGE(pBt) ); - rc = sqlite3BtreeGetPage(pBt, *pPgno, ppPage, 0); - if( rc ) return rc; - rc = sqlite3PagerWrite((*ppPage)->pDbPage); - if( rc!=SQLITE_OK ){ - releasePage(*ppPage); - } - TRACE(("ALLOCATE: %d from end of file\n", *pPgno)); - } - - assert( *pPgno!=PENDING_BYTE_PAGE(pBt) ); - -end_allocate_page: - releasePage(pTrunk); - releasePage(pPrevTrunk); - if( rc==SQLITE_OK ){ - if( sqlite3PagerPageRefcount((*ppPage)->pDbPage)>1 ){ - releasePage(*ppPage); - return SQLITE_CORRUPT_BKPT; - } - (*ppPage)->isInit = 0; - }else{ - *ppPage = 0; - } - return rc; -} +/* +** Page type flags. An ORed combination of these flags appear as the +** first byte of on-disk image of every BTree page. +*/ +#define PTF_INTKEY 0x01 +#define PTF_ZERODATA 0x02 +#define PTF_LEAFDATA 0x04 +#define PTF_LEAF 0x08 /* -** This function is used to add page iPage to the database file free-list. -** It is assumed that the page is not already a part of the free-list. +** As each page of the file is loaded into memory, an instance of the following +** structure is appended and initialized to zero. This structure stores +** information about the page that is decoded from the raw file page. ** -** The value passed as the second argument to this function is optional. -** If the caller happens to have a pointer to the MemPage object -** corresponding to page iPage handy, it may pass it as the second value. -** Otherwise, it may pass NULL. +** The pParent field points back to the parent page. This allows us to +** walk up the BTree from any leaf to the root. Care must be taken to +** unref() the parent page pointer when this page is no longer referenced. +** The pageDestructor() routine handles that chore. ** -** If a pointer to a MemPage object is passed as the second argument, -** its reference count is not altered by this function. +** Access to all fields of this structure is controlled by the mutex +** stored in MemPage.pBt->mutex. */ -static int freePage2(BtShared *pBt, MemPage *pMemPage, Pgno iPage){ - MemPage *pTrunk = 0; /* Free-list trunk page */ - Pgno iTrunk = 0; /* Page number of free-list trunk page */ - MemPage *pPage1 = pBt->pPage1; /* Local reference to page 1 */ - MemPage *pPage; /* Page being freed. May be NULL. */ - int rc; /* Return Code */ - int nFree; /* Initial number of pages on free-list */ +struct MemPage { + u8 isInit; /* True if previously initialized. MUST BE FIRST! */ + u8 nOverflow; /* Number of overflow cell bodies in aCell[] */ + u8 intKey; /* True if intkey flag is set */ + u8 leaf; /* True if leaf flag is set */ + u8 hasData; /* True if this page stores data */ + u8 hdrOffset; /* 100 for page 1. 0 otherwise */ + u8 childPtrSize; /* 0 if leaf==1. 4 if leaf==0 */ + u8 max1bytePayload; /* min(maxLocal,127) */ + u16 maxLocal; /* Copy of BtShared.maxLocal or BtShared.maxLeaf */ + u16 minLocal; /* Copy of BtShared.minLocal or BtShared.minLeaf */ + u16 cellOffset; /* Index in aData of first cell pointer */ + u16 nFree; /* Number of free bytes on the page */ + u16 nCell; /* Number of cells on this page, local and ovfl */ + u16 maskPage; /* Mask for page offset */ + u16 aiOvfl[5]; /* Insert the i-th overflow cell before the aiOvfl-th + ** non-overflow cell */ + u8 *apOvfl[5]; /* Pointers to the body of overflow cells */ + BtShared *pBt; /* Pointer to BtShared that this page is part of */ + u8 *aData; /* Pointer to disk image of the page data */ + u8 *aDataEnd; /* One byte past the end of usable data */ + u8 *aCellIdx; /* The cell index area */ + DbPage *pDbPage; /* Pager page handle */ + Pgno pgno; /* Page number for this page */ +}; - assert( sqlite3_mutex_held(pBt->mutex) ); - assert( iPage>1 ); - assert( !pMemPage || pMemPage->pgno==iPage ); +/* +** The in-memory image of a disk page has the auxiliary information appended +** to the end. EXTRA_SIZE is the number of bytes of space needed to hold +** that extra information. +*/ +#define EXTRA_SIZE sizeof(MemPage) - if( pMemPage ){ - pPage = pMemPage; - sqlite3PagerRef(pPage->pDbPage); - }else{ - pPage = btreePageLookup(pBt, iPage); - } +/* +** A linked list of the following structures is stored at BtShared.pLock. +** Locks are added (or upgraded from READ_LOCK to WRITE_LOCK) when a cursor +** is opened on the table with root page BtShared.iTable. Locks are removed +** from this list when a transaction is committed or rolled back, or when +** a btree handle is closed. +*/ +struct BtLock { + Btree *pBtree; /* Btree handle holding this lock */ + Pgno iTable; /* Root page of table */ + u8 eLock; /* READ_LOCK or WRITE_LOCK */ + BtLock *pNext; /* Next in BtShared.pLock list */ +}; - /* Increment the free page count on pPage1 */ - rc = sqlite3PagerWrite(pPage1->pDbPage); - if( rc ) goto freepage_out; - nFree = get4byte(&pPage1->aData[36]); - put4byte(&pPage1->aData[36], nFree+1); - -#ifdef SQLITE_SECURE_DELETE - /* If the SQLITE_SECURE_DELETE compile-time option is enabled, then - ** always fully overwrite deleted information with zeros. - */ - if( (!pPage && (rc = sqlite3BtreeGetPage(pBt, iPage, &pPage, 0))) - || (rc = sqlite3PagerWrite(pPage->pDbPage)) - ){ - goto freepage_out; - } - memset(pPage->aData, 0, pPage->pBt->pageSize); -#endif - - /* If the database supports auto-vacuum, write an entry in the pointer-map - ** to indicate that the page is free. - */ - if( ISAUTOVACUUM ){ - rc = ptrmapPut(pBt, iPage, PTRMAP_FREEPAGE, 0); - if( rc ) goto freepage_out; - } - - /* Now manipulate the actual database free-list structure. There are two - ** possibilities. If the free-list is currently empty, or if the first - ** trunk page in the free-list is full, then this page will become a - ** new free-list trunk page. Otherwise, it will become a leaf of the - ** first trunk page in the current free-list. This block tests if it - ** is possible to add the page as a new free-list leaf. - */ - if( nFree!=0 ){ - int nLeaf; /* Initial number of leaf cells on trunk page */ - - iTrunk = get4byte(&pPage1->aData[32]); - rc = sqlite3BtreeGetPage(pBt, iTrunk, &pTrunk, 0); - if( rc!=SQLITE_OK ){ - goto freepage_out; - } +/* Candidate values for BtLock.eLock */ +#define READ_LOCK 1 +#define WRITE_LOCK 2 - nLeaf = get4byte(&pTrunk->aData[4]); - if( nLeaf<0 ){ - rc = SQLITE_CORRUPT_BKPT; - goto freepage_out; - } - if( nLeafusableSize/4 - 8 ){ - /* In this case there is room on the trunk page to insert the page - ** being freed as a new leaf. - ** - ** Note that the trunk page is not really full until it contains - ** usableSize/4 - 2 entries, not usableSize/4 - 8 entries as we have - ** coded. But due to a coding error in versions of SQLite prior to - ** 3.6.0, databases with freelist trunk pages holding more than - ** usableSize/4 - 8 entries will be reported as corrupt. In order - ** to maintain backwards compatibility with older versions of SQLite, - ** we will contain to restrict the number of entries to usableSize/4 - 8 - ** for now. At some point in the future (once everyone has upgraded - ** to 3.6.0 or later) we should consider fixing the conditional above - ** to read "usableSize/4-2" instead of "usableSize/4-8". - */ - rc = sqlite3PagerWrite(pTrunk->pDbPage); - if( rc==SQLITE_OK ){ - put4byte(&pTrunk->aData[4], nLeaf+1); - put4byte(&pTrunk->aData[8+nLeaf*4], iPage); -#ifndef SQLITE_SECURE_DELETE - if( pPage ){ - sqlite3PagerDontWrite(pPage->pDbPage); - } +/* A Btree handle +** +** A database connection contains a pointer to an instance of +** this object for every database file that it has open. This structure +** is opaque to the database connection. The database connection cannot +** see the internals of this structure and only deals with pointers to +** this structure. +** +** For some database files, the same underlying database cache might be +** shared between multiple connections. In that case, each connection +** has it own instance of this object. But each instance of this object +** points to the same BtShared object. The database cache and the +** schema associated with the database file are all contained within +** the BtShared object. +** +** All fields in this structure are accessed under sqlite3.mutex. +** The pBt pointer itself may not be changed while there exists cursors +** in the referenced BtShared that point back to this Btree since those +** cursors have to go through this Btree to find their BtShared and +** they often do so without holding sqlite3.mutex. +*/ +struct Btree { + sqlite3 *db; /* The database connection holding this btree */ + BtShared *pBt; /* Sharable content of this btree */ + u8 inTrans; /* TRANS_NONE, TRANS_READ or TRANS_WRITE */ + u8 sharable; /* True if we can share pBt with another db */ + u8 locked; /* True if db currently has pBt locked */ + int wantToLock; /* Number of nested calls to sqlite3BtreeEnter() */ + int nBackup; /* Number of backup operations reading this btree */ + Btree *pNext; /* List of other sharable Btrees from the same db */ + Btree *pPrev; /* Back pointer of the same list */ +#ifndef SQLITE_OMIT_SHARED_CACHE + BtLock lock; /* Object used to lock page 1 */ #endif - rc = btreeSetHasContent(pBt, iPage); - } - TRACE(("FREE-PAGE: %d leaf on trunk page %d\n",pPage->pgno,pTrunk->pgno)); - goto freepage_out; - } - } - - /* If control flows to this point, then it was not possible to add the - ** the page being freed as a leaf page of the first trunk in the free-list. - ** Possibly because the free-list is empty, or possibly because the - ** first trunk in the free-list is full. Either way, the page being freed - ** will become the new first trunk page in the free-list. - */ - if( ((!pPage) && (0 != (rc = sqlite3BtreeGetPage(pBt, iPage, &pPage, 0)))) - || (0 != (rc = sqlite3PagerWrite(pPage->pDbPage))) - ){ - goto freepage_out; - } - put4byte(pPage->aData, iTrunk); - put4byte(&pPage->aData[4], 0); - put4byte(&pPage1->aData[32], iPage); - TRACE(("FREE-PAGE: %d new trunk page replacing %d\n", pPage->pgno, iTrunk)); - -freepage_out: - if( pPage ){ - pPage->isInit = 0; - } - releasePage(pPage); - releasePage(pTrunk); - return rc; -} -static int freePage(MemPage *pPage){ - return freePage2(pPage->pBt, pPage, pPage->pgno); -} +}; /* -** Free any overflow pages associated with the given Cell. +** Btree.inTrans may take one of the following values. +** +** If the shared-data extension is enabled, there may be multiple users +** of the Btree structure. At most one of these may open a write transaction, +** but any number may have active read transactions. */ -static int clearCell(MemPage *pPage, unsigned char *pCell){ - BtShared *pBt = pPage->pBt; - CellInfo info; - Pgno ovflPgno; - int rc; - int nOvfl; - u16 ovflPageSize; - - assert( sqlite3_mutex_held(pPage->pBt->mutex) ); - sqlite3BtreeParseCellPtr(pPage, pCell, &info); - if( info.iOverflow==0 ){ - return SQLITE_OK; /* No overflow pages. Return without doing anything */ - } - ovflPgno = get4byte(&pCell[info.iOverflow]); - assert( pBt->usableSize > 4 ); - ovflPageSize = pBt->usableSize - 4; - nOvfl = (info.nPayload - info.nLocal + ovflPageSize - 1)/ovflPageSize; - assert( ovflPgno==0 || nOvfl>0 ); - while( nOvfl-- ){ - Pgno iNext = 0; - MemPage *pOvfl = 0; - if( ovflPgno<2 || ovflPgno>pagerPagecount(pBt) ){ - /* 0 is not a legal page number and page 1 cannot be an - ** overflow page. Therefore if ovflPgno<2 or past the end of the - ** file the database must be corrupt. */ - return SQLITE_CORRUPT_BKPT; - } - if( nOvfl ){ - rc = getOverflowPage(pBt, ovflPgno, &pOvfl, &iNext); - if( rc ) return rc; - } - rc = freePage2(pBt, pOvfl, ovflPgno); - if( pOvfl ){ - sqlite3PagerUnref(pOvfl->pDbPage); - } - if( rc ) return rc; - ovflPgno = iNext; - } - return SQLITE_OK; -} +#define TRANS_NONE 0 +#define TRANS_READ 1 +#define TRANS_WRITE 2 /* -** Create the byte sequence used to represent a cell on page pPage -** and write that byte sequence into pCell[]. Overflow pages are -** allocated and filled in as necessary. The calling procedure -** is responsible for making sure sufficient space has been allocated -** for pCell[]. +** An instance of this object represents a single database file. +** +** A single database file can be in use at the same time by two +** or more database connections. When two or more connections are +** sharing the same database file, each connection has it own +** private Btree object for the file and each of those Btrees points +** to this one BtShared object. BtShared.nRef is the number of +** connections currently sharing this database file. ** -** Note that pCell does not necessary need to point to the pPage->aData -** area. pCell might point to some temporary storage. The cell will -** be constructed in this temporary area then copied into pPage->aData -** later. +** Fields in this structure are accessed under the BtShared.mutex +** mutex, except for nRef and pNext which are accessed under the +** global SQLITE_MUTEX_STATIC_MASTER mutex. The pPager field +** may not be modified once it is initially set as long as nRef>0. +** The pSchema field may be set once under BtShared.mutex and +** thereafter is unchanged as long as nRef>0. +** +** isPending: +** +** If a BtShared client fails to obtain a write-lock on a database +** table (because there exists one or more read-locks on the table), +** the shared-cache enters 'pending-lock' state and isPending is +** set to true. +** +** The shared-cache leaves the 'pending lock' state when either of +** the following occur: +** +** 1) The current writer (BtShared.pWriter) concludes its transaction, OR +** 2) The number of locks held by other connections drops to zero. +** +** while in the 'pending-lock' state, no connection may start a new +** transaction. +** +** This feature is included to help prevent writer-starvation. */ -static int fillInCell( - MemPage *pPage, /* The page that contains the cell */ - unsigned char *pCell, /* Complete text of the cell */ - const void *pKey, i64 nKey, /* The key */ - const void *pData,int nData, /* The data */ - int nZero, /* Extra zero bytes to append to pData */ - int *pnSize /* Write cell size here */ -){ - int nPayload; - const u8 *pSrc; - int nSrc, n, rc; - int spaceLeft; - MemPage *pOvfl = 0; - MemPage *pToRelease = 0; - unsigned char *pPrior; - unsigned char *pPayload; - BtShared *pBt = pPage->pBt; - Pgno pgnoOvfl = 0; - int nHeader; - CellInfo info; - - assert( sqlite3_mutex_held(pPage->pBt->mutex) ); - - /* pPage is not necessarily writeable since pCell might be auxiliary - ** buffer space that is separate from the pPage buffer area */ - assert( pCellaData || pCell>=&pPage->aData[pBt->pageSize] - || sqlite3PagerIswriteable(pPage->pDbPage) ); - - /* Fill in the header. */ - nHeader = 0; - if( !pPage->leaf ){ - nHeader += 4; - } - if( pPage->hasData ){ - nHeader += putVarint(&pCell[nHeader], nData+nZero); - }else{ - nData = nZero = 0; - } - nHeader += putVarint(&pCell[nHeader], *(u64*)&nKey); - sqlite3BtreeParseCellPtr(pPage, pCell, &info); - assert( info.nHeader==nHeader ); - assert( info.nKey==nKey ); - assert( info.nData==(u32)(nData+nZero) ); - - /* Fill in the payload */ - nPayload = nData + nZero; - if( pPage->intKey ){ - pSrc = pData; - nSrc = nData; - nData = 0; - }else{ - if( nKey>0x7fffffff || pKey==0 ){ - return SQLITE_CORRUPT; - } - nPayload += (int)nKey; - pSrc = pKey; - nSrc = (int)nKey; - } - *pnSize = info.nSize; - spaceLeft = info.nLocal; - pPayload = &pCell[nHeader]; - pPrior = &pCell[info.iOverflow]; - - while( nPayload>0 ){ - if( spaceLeft==0 ){ +struct BtShared { + Pager *pPager; /* The page cache */ + sqlite3 *db; /* Database connection currently using this Btree */ + BtCursor *pCursor; /* A list of all open cursors */ + MemPage *pPage1; /* First page of the database */ + u8 openFlags; /* Flags to sqlite3BtreeOpen() */ #ifndef SQLITE_OMIT_AUTOVACUUM - Pgno pgnoPtrmap = pgnoOvfl; /* Overflow page pointer-map entry page */ - if( pBt->autoVacuum ){ - do{ - pgnoOvfl++; - } while( - PTRMAP_ISPAGE(pBt, pgnoOvfl) || pgnoOvfl==PENDING_BYTE_PAGE(pBt) - ); - } + u8 autoVacuum; /* True if auto-vacuum is enabled */ + u8 incrVacuum; /* True if incr-vacuum is enabled */ #endif - rc = allocateBtreePage(pBt, &pOvfl, &pgnoOvfl, pgnoOvfl, 0); -#ifndef SQLITE_OMIT_AUTOVACUUM - /* If the database supports auto-vacuum, and the second or subsequent - ** overflow page is being allocated, add an entry to the pointer-map - ** for that page now. - ** - ** If this is the first overflow page, then write a partial entry - ** to the pointer-map. If we write nothing to this pointer-map slot, - ** then the optimistic overflow chain processing in clearCell() - ** may misinterpret the uninitialised values and delete the - ** wrong pages from the database. - */ - if( pBt->autoVacuum && rc==SQLITE_OK ){ - u8 eType = (pgnoPtrmap?PTRMAP_OVERFLOW2:PTRMAP_OVERFLOW1); - rc = ptrmapPut(pBt, pgnoOvfl, eType, pgnoPtrmap); - if( rc ){ - releasePage(pOvfl); - } - } + u8 inTransaction; /* Transaction state */ + u8 max1bytePayload; /* Maximum first byte of cell for a 1-byte payload */ + u16 btsFlags; /* Boolean parameters. See BTS_* macros below */ + u16 maxLocal; /* Maximum local payload in non-LEAFDATA tables */ + u16 minLocal; /* Minimum local payload in non-LEAFDATA tables */ + u16 maxLeaf; /* Maximum local payload in a LEAFDATA table */ + u16 minLeaf; /* Minimum local payload in a LEAFDATA table */ + u32 pageSize; /* Total number of bytes on a page */ + u32 usableSize; /* Number of usable bytes on each page */ + int nTransaction; /* Number of open transactions (read + write) */ + u32 nPage; /* Number of pages in the database */ + void *pSchema; /* Pointer to space allocated by sqlite3BtreeSchema() */ + void (*xFreeSchema)(void*); /* Destructor for BtShared.pSchema */ + sqlite3_mutex *mutex; /* Non-recursive mutex required to access this object */ + Bitvec *pHasContent; /* Set of pages moved to free-list this transaction */ +#ifndef SQLITE_OMIT_SHARED_CACHE + int nRef; /* Number of references to this structure */ + BtShared *pNext; /* Next on a list of sharable BtShared structs */ + BtLock *pLock; /* List of locks held on this shared-btree struct */ + Btree *pWriter; /* Btree with currently open write transaction */ #endif - if( rc ){ - releasePage(pToRelease); - return rc; - } - - /* If pToRelease is not zero than pPrior points into the data area - ** of pToRelease. Make sure pToRelease is still writeable. */ - assert( pToRelease==0 || sqlite3PagerIswriteable(pToRelease->pDbPage) ); - - /* If pPrior is part of the data area of pPage, then make sure pPage - ** is still writeable */ - assert( pPrioraData || pPrior>=&pPage->aData[pBt->pageSize] - || sqlite3PagerIswriteable(pPage->pDbPage) ); - - put4byte(pPrior, pgnoOvfl); - releasePage(pToRelease); - pToRelease = pOvfl; - pPrior = pOvfl->aData; - put4byte(pPrior, 0); - pPayload = &pOvfl->aData[4]; - spaceLeft = pBt->usableSize - 4; - } - n = nPayload; - if( n>spaceLeft ) n = spaceLeft; - - /* If pToRelease is not zero than pPayload points into the data area - ** of pToRelease. Make sure pToRelease is still writeable. */ - assert( pToRelease==0 || sqlite3PagerIswriteable(pToRelease->pDbPage) ); + u8 *pTmpSpace; /* BtShared.pageSize bytes of space for tmp use */ +}; - /* If pPayload is part of the data area of pPage, then make sure pPage - ** is still writeable */ - assert( pPayloadaData || pPayload>=&pPage->aData[pBt->pageSize] - || sqlite3PagerIswriteable(pPage->pDbPage) ); +/* +** Allowed values for BtShared.btsFlags +*/ +#define BTS_READ_ONLY 0x0001 /* Underlying file is readonly */ +#define BTS_PAGESIZE_FIXED 0x0002 /* Page size can no longer be changed */ +#define BTS_SECURE_DELETE 0x0004 /* PRAGMA secure_delete is enabled */ +#define BTS_INITIALLY_EMPTY 0x0008 /* Database was empty at trans start */ +#define BTS_NO_WAL 0x0010 /* Do not open write-ahead-log files */ +#define BTS_EXCLUSIVE 0x0020 /* pWriter has an exclusive lock */ +#define BTS_PENDING 0x0040 /* Waiting for read-locks to clear */ - if( nSrc>0 ){ - if( n>nSrc ) n = nSrc; - assert( pSrc ); - memcpy(pPayload, pSrc, n); - }else{ - memset(pPayload, 0, n); - } - nPayload -= n; - pPayload += n; - pSrc += n; - nSrc -= n; - spaceLeft -= n; - if( nSrc==0 ){ - nSrc = nData; - pSrc = pData; - } - } - releasePage(pToRelease); - return SQLITE_OK; -} +/* +** An instance of the following structure is used to hold information +** about a cell. The parseCellPtr() function fills in this structure +** based on information extract from the raw disk page. +*/ +typedef struct CellInfo CellInfo; +struct CellInfo { + i64 nKey; /* The key for INTKEY tables, or number of bytes in key */ + u8 *pCell; /* Pointer to the start of cell content */ + u32 nData; /* Number of bytes of data */ + u32 nPayload; /* Total amount of payload */ + u16 nHeader; /* Size of the cell content header in bytes */ + u16 nLocal; /* Amount of payload held locally */ + u16 iOverflow; /* Offset to overflow page number. Zero if no overflow */ + u16 nSize; /* Size of the cell content on the main b-tree page */ +}; /* -** Remove the i-th cell from pPage. This routine effects pPage only. -** The cell content is not freed or deallocated. It is assumed that -** the cell content has been copied someplace else. This routine just -** removes the reference to the cell from pPage. +** Maximum depth of an SQLite B-Tree structure. Any B-Tree deeper than +** this will be declared corrupt. This value is calculated based on a +** maximum database size of 2^31 pages a minimum fanout of 2 for a +** root-node and 3 for all other internal nodes. ** -** "sz" must be the number of bytes in the cell. +** If a tree that appears to be taller than this is encountered, it is +** assumed that the database is corrupt. */ -static int dropCell(MemPage *pPage, int idx, int sz){ - int i; /* Loop counter */ - int pc; /* Offset to cell content of cell being deleted */ - u8 *data; /* pPage->aData */ - u8 *ptr; /* Used to move bytes around within data[] */ - int rc; /* The return code */ +#define BTCURSOR_MAX_DEPTH 20 - assert( idx>=0 && idxnCell ); - assert( sz==cellSize(pPage, idx) ); - assert( sqlite3PagerIswriteable(pPage->pDbPage) ); - assert( sqlite3_mutex_held(pPage->pBt->mutex) ); - data = pPage->aData; - ptr = &data[pPage->cellOffset + 2*idx]; - pc = get2byte(ptr); - if( (pchdrOffset+6+(pPage->leaf?0:4)) - || (pc+sz>pPage->pBt->usableSize) ){ - return SQLITE_CORRUPT_BKPT; - } - rc = freeSpace(pPage, pc, sz); - if( rc!=SQLITE_OK ){ - return rc; - } - for(i=idx+1; inCell; i++, ptr+=2){ - ptr[0] = ptr[2]; - ptr[1] = ptr[3]; - } - pPage->nCell--; - put2byte(&data[pPage->hdrOffset+3], pPage->nCell); - pPage->nFree += 2; - return SQLITE_OK; -} +/* +** A cursor is a pointer to a particular entry within a particular +** b-tree within a database file. +** +** The entry is identified by its MemPage and the index in +** MemPage.aCell[] of the entry. +** +** A single database file can be shared by two more database connections, +** but cursors cannot be shared. Each cursor is associated with a +** particular database connection identified BtCursor.pBtree.db. +** +** Fields in this structure are accessed under the BtShared.mutex +** found at self->pBt->mutex. +*/ +struct BtCursor { + Btree *pBtree; /* The Btree to which this cursor belongs */ + BtShared *pBt; /* The BtShared this cursor points to */ + BtCursor *pNext, *pPrev; /* Forms a linked list of all cursors */ + struct KeyInfo *pKeyInfo; /* Argument passed to comparison function */ +#ifndef SQLITE_OMIT_INCRBLOB + Pgno *aOverflow; /* Cache of overflow page locations */ +#endif + Pgno pgnoRoot; /* The root page of this tree */ + sqlite3_int64 cachedRowid; /* Next rowid cache. 0 means not valid */ + CellInfo info; /* A parse of the cell we are pointing at */ + i64 nKey; /* Size of pKey, or last integer key */ + void *pKey; /* Saved key that was cursor's last known position */ + int skipNext; /* Prev() is noop if negative. Next() is noop if positive */ + u8 wrFlag; /* True if writable */ + u8 atLast; /* Cursor pointing to the last entry */ + u8 validNKey; /* True if info.nKey is valid */ + u8 eState; /* One of the CURSOR_XXX constants (see below) */ +#ifndef SQLITE_OMIT_INCRBLOB + u8 isIncrblobHandle; /* True if this cursor is an incr. io handle */ +#endif + i16 iPage; /* Index of current page in apPage */ + u16 aiIdx[BTCURSOR_MAX_DEPTH]; /* Current index in apPage[i] */ + MemPage *apPage[BTCURSOR_MAX_DEPTH]; /* Pages from root to current page */ +}; /* -** Insert a new cell on pPage at cell index "i". pCell points to the -** content of the cell. +** Potential values for BtCursor.eState. ** -** If the cell content will fit on the page, then put it there. If it -** will not fit, then make a copy of the cell content into pTemp if -** pTemp is not null. Regardless of pTemp, allocate a new entry -** in pPage->aOvfl[] and make it point to the cell content (either -** in pTemp or the original pCell) and also record its index. -** Allocating a new entry in pPage->aCell[] implies that -** pPage->nOverflow is incremented. +** CURSOR_VALID: +** Cursor points to a valid entry. getPayload() etc. may be called. ** -** If nSkip is non-zero, then do not copy the first nSkip bytes of the -** cell. The caller will overwrite them after this function returns. If -** nSkip is non-zero, then pCell may not point to an invalid memory location -** (but pCell+nSkip is always valid). +** CURSOR_INVALID: +** Cursor does not point to a valid entry. This can happen (for example) +** because the table is empty or because BtreeCursorFirst() has not been +** called. +** +** CURSOR_REQUIRESEEK: +** The table that this cursor was opened on still exists, but has been +** modified since the cursor was last used. The cursor position is saved +** in variables BtCursor.pKey and BtCursor.nKey. When a cursor is in +** this state, restoreCursorPosition() can be called to attempt to +** seek the cursor to the saved position. +** +** CURSOR_FAULT: +** A unrecoverable error (an I/O error or a malloc failure) has occurred +** on a different connection that shares the BtShared cache with this +** cursor. The error has left the cache in an inconsistent state. +** Do nothing else with this cursor. Any attempt to use the cursor +** should return the error code stored in BtCursor.skip */ -static int insertCell( - MemPage *pPage, /* Page into which we are copying */ - int i, /* New cell becomes the i-th cell of the page */ - u8 *pCell, /* Content of the new cell */ - int sz, /* Bytes of content in pCell */ - u8 *pTemp, /* Temp storage space for pCell, if needed */ - Pgno iChild /* If non-zero, replace first 4 bytes with this value */ -){ - int idx; /* Where to write new cell content in data[] */ - int j; /* Loop counter */ - int top; /* First byte of content for any cell in data[] */ - int end; /* First byte past the last cell pointer in data[] */ - int ins; /* Index in data[] where new cell pointer is inserted */ - int hdr; /* Offset into data[] of the page header */ - int cellOffset; /* Address of first cell pointer in data[] */ - u8 *data; /* The content of the whole page */ - u8 *ptr; /* Used for moving information around in data[] */ +#define CURSOR_INVALID 0 +#define CURSOR_VALID 1 +#define CURSOR_REQUIRESEEK 2 +#define CURSOR_FAULT 3 - int nSkip = (iChild ? 4 : 0); +/* +** The database page the PENDING_BYTE occupies. This page is never used. +*/ +# define PENDING_BYTE_PAGE(pBt) PAGER_MJ_PGNO(pBt) - assert( i>=0 && i<=pPage->nCell+pPage->nOverflow ); - assert( pPage->nCell<=MX_CELL(pPage->pBt) && MX_CELL(pPage->pBt)<=5460 ); - assert( pPage->nOverflow<=ArraySize(pPage->aOvfl) ); - assert( sz==cellSizePtr(pPage, pCell) ); - assert( sqlite3_mutex_held(pPage->pBt->mutex) ); - if( pPage->nOverflow || sz+2>pPage->nFree ){ - if( pTemp ){ - memcpy(pTemp+nSkip, pCell+nSkip, sz-nSkip); - pCell = pTemp; - } - if( iChild ){ - put4byte(pCell, iChild); - } - j = pPage->nOverflow++; - assert( j<(int)(sizeof(pPage->aOvfl)/sizeof(pPage->aOvfl[0])) ); - pPage->aOvfl[j].pCell = pCell; - pPage->aOvfl[j].idx = (u16)i; - }else{ - int rc = sqlite3PagerWrite(pPage->pDbPage); - if( rc!=SQLITE_OK ){ - return rc; - } - assert( sqlite3PagerIswriteable(pPage->pDbPage) ); - data = pPage->aData; - hdr = pPage->hdrOffset; - top = get2byte(&data[hdr+5]); - cellOffset = pPage->cellOffset; - end = cellOffset + 2*pPage->nCell + 2; - ins = cellOffset + 2*i; - if( end > top - sz ){ - rc = defragmentPage(pPage); - if( rc!=SQLITE_OK ){ - return rc; - } - top = get2byte(&data[hdr+5]); - assert( end + sz <= top ); - } - idx = allocateSpace(pPage, sz); - assert( idx>0 ); - assert( end <= get2byte(&data[hdr+5]) ); - if (idx+sz > pPage->pBt->usableSize) { - return SQLITE_CORRUPT_BKPT; - } - pPage->nCell++; - pPage->nFree = pPage->nFree - (u16)(2 + sz); - memcpy(&data[idx+nSkip], pCell+nSkip, sz-nSkip); - if( iChild ){ - put4byte(&data[idx], iChild); - } - for(j=end-2, ptr=&data[j]; j>ins; j-=2, ptr-=2){ - ptr[0] = ptr[-2]; - ptr[1] = ptr[-1]; - } - put2byte(&data[ins], idx); - put2byte(&data[hdr+3], pPage->nCell); +/* +** These macros define the location of the pointer-map entry for a +** database page. The first argument to each is the number of usable +** bytes on each page of the database (often 1024). The second is the +** page number to look up in the pointer map. +** +** PTRMAP_PAGENO returns the database page number of the pointer-map +** page that stores the required pointer. PTRMAP_PTROFFSET returns +** the offset of the requested map entry. +** +** If the pgno argument passed to PTRMAP_PAGENO is a pointer-map page, +** then pgno is returned. So (pgno==PTRMAP_PAGENO(pgsz, pgno)) can be +** used to test if pgno is a pointer-map page. PTRMAP_ISPAGE implements +** this test. +*/ +#define PTRMAP_PAGENO(pBt, pgno) ptrmapPageno(pBt, pgno) +#define PTRMAP_PTROFFSET(pgptrmap, pgno) (5*(pgno-pgptrmap-1)) +#define PTRMAP_ISPAGE(pBt, pgno) (PTRMAP_PAGENO((pBt),(pgno))==(pgno)) + +/* +** The pointer map is a lookup table that identifies the parent page for +** each child page in the database file. The parent page is the page that +** contains a pointer to the child. Every page in the database contains +** 0 or 1 parent pages. (In this context 'database page' refers +** to any page that is not part of the pointer map itself.) Each pointer map +** entry consists of a single byte 'type' and a 4 byte parent page number. +** The PTRMAP_XXX identifiers below are the valid types. +** +** The purpose of the pointer map is to facility moving pages from one +** position in the file to another as part of autovacuum. When a page +** is moved, the pointer in its parent must be updated to point to the +** new location. The pointer map is used to locate the parent page quickly. +** +** PTRMAP_ROOTPAGE: The database page is a root-page. The page-number is not +** used in this case. +** +** PTRMAP_FREEPAGE: The database page is an unused (free) page. The page-number +** is not used in this case. +** +** PTRMAP_OVERFLOW1: The database page is the first page in a list of +** overflow pages. The page number identifies the page that +** contains the cell with a pointer to this overflow page. +** +** PTRMAP_OVERFLOW2: The database page is the second or later page in a list of +** overflow pages. The page-number identifies the previous +** page in the overflow page list. +** +** PTRMAP_BTREE: The database page is a non-root btree page. The page number +** identifies the parent page in the btree. +*/ +#define PTRMAP_ROOTPAGE 1 +#define PTRMAP_FREEPAGE 2 +#define PTRMAP_OVERFLOW1 3 +#define PTRMAP_OVERFLOW2 4 +#define PTRMAP_BTREE 5 + +/* A bunch of assert() statements to check the transaction state variables +** of handle p (type Btree*) are internally consistent. +*/ +#define btreeIntegrity(p) \ + assert( p->pBt->inTransaction!=TRANS_NONE || p->pBt->nTransaction==0 ); \ + assert( p->pBt->inTransaction>=p->inTrans ); + + +/* +** The ISAUTOVACUUM macro is used within balance_nonroot() to determine +** if the database supports auto-vacuum or not. Because it is used +** within an expression that is an argument to another macro +** (sqliteMallocRaw), it is not possible to use conditional compilation. +** So, this macro is defined instead. +*/ #ifndef SQLITE_OMIT_AUTOVACUUM - if( pPage->pBt->autoVacuum ){ - /* The cell may contain a pointer to an overflow page. If so, write - ** the entry for the overflow page into the pointer map. - */ - return ptrmapPutOvflPtr(pPage, pCell); - } +#define ISAUTOVACUUM (pBt->autoVacuum) +#else +#define ISAUTOVACUUM 0 #endif - } - return SQLITE_OK; -} /* -** Add a list of cells to a page. The page should be initially empty. -** The cells are guaranteed to fit on the page. +** This structure is passed around through all the sanity checking routines +** in order to keep track of some global state information. +** +** The aRef[] array is allocated so that there is 1 bit for each page in +** the database. As the integrity-check proceeds, for each page used in +** the database the corresponding bit is set. This allows integrity-check to +** detect pages that are used twice and orphaned pages (both of which +** indicate corruption). */ -static void assemblePage( - MemPage *pPage, /* The page to be assemblied */ - int nCell, /* The number of cells to add to this page */ - u8 **apCell, /* Pointers to cell bodies */ - u16 *aSize /* Sizes of the cells */ -){ - int i; /* Loop counter */ - u8 *pCellptr; /* Address of next cell pointer */ - int cellbody; /* Address of next cell body */ - u8 * const data = pPage->aData; /* Pointer to data for pPage */ - const int hdr = pPage->hdrOffset; /* Offset of header on pPage */ - const int nUsable = pPage->pBt->usableSize; /* Usable size of page */ +typedef struct IntegrityCk IntegrityCk; +struct IntegrityCk { + BtShared *pBt; /* The tree being checked out */ + Pager *pPager; /* The associated pager. Also accessible by pBt->pPager */ + u8 *aPgRef; /* 1 bit per page in the db (see above) */ + Pgno nPage; /* Number of pages in the database */ + int mxErr; /* Stop accumulating errors when this reaches zero */ + int nErr; /* Number of messages written to zErrMsg so far */ + int mallocFailed; /* A memory allocation error has occurred */ + StrAccum errMsg; /* Accumulate the error message text here */ +}; - assert( pPage->nOverflow==0 ); - assert( sqlite3_mutex_held(pPage->pBt->mutex) ); - assert( nCell>=0 && nCell<=MX_CELL(pPage->pBt) && MX_CELL(pPage->pBt)<=5460 ); - assert( sqlite3PagerIswriteable(pPage->pDbPage) ); +/* +** Routines to read or write a two- and four-byte big-endian integer values. +*/ +#define get2byte(x) ((x)[0]<<8 | (x)[1]) +#define put2byte(p,v) ((p)[0] = (u8)((v)>>8), (p)[1] = (u8)(v)) +#define get4byte sqlite3Get4byte +#define put4byte sqlite3Put4byte - /* Check that the page has just been zeroed by zeroPage() */ - assert( pPage->nCell==0 ); - assert( get2byte(&data[hdr+5])==nUsable ); +/************** End of btreeInt.h ********************************************/ +/************** Continuing where we left off in btmutex.c ********************/ +#ifndef SQLITE_OMIT_SHARED_CACHE +#if SQLITE_THREADSAFE - pCellptr = &data[pPage->cellOffset + nCell*2]; - cellbody = nUsable; - for(i=nCell-1; i>=0; i--){ - pCellptr -= 2; - cellbody -= aSize[i]; - put2byte(pCellptr, cellbody); - memcpy(&data[cellbody], apCell[i], aSize[i]); - } - put2byte(&data[hdr+3], nCell); - put2byte(&data[hdr+5], cellbody); - pPage->nFree -= (nCell*2 + nUsable - cellbody); - pPage->nCell = (u16)nCell; +/* +** Obtain the BtShared mutex associated with B-Tree handle p. Also, +** set BtShared.db to the database handle associated with p and the +** p->locked boolean to true. +*/ +static void lockBtreeMutex(Btree *p){ + assert( p->locked==0 ); + assert( sqlite3_mutex_notheld(p->pBt->mutex) ); + assert( sqlite3_mutex_held(p->db->mutex) ); + + sqlite3_mutex_enter(p->pBt->mutex); + p->pBt->db = p->db; + p->locked = 1; } /* -** The following parameters determine how many adjacent pages get involved -** in a balancing operation. NN is the number of neighbors on either side -** of the page that participate in the balancing operation. NB is the -** total number of pages that participate, including the target page and -** NN neighbors on either side. -** -** The minimum value of NN is 1 (of course). Increasing NN above 1 -** (to 2 or 3) gives a modest improvement in SELECT and DELETE performance -** in exchange for a larger degradation in INSERT and UPDATE performance. -** The value of NN appears to give the best results overall. +** Release the BtShared mutex associated with B-Tree handle p and +** clear the p->locked boolean. */ -#define NN 1 /* Number of neighbors on either side of pPage */ -#define NB (NN*2+1) /* Total pages involved in the balance */ +static void unlockBtreeMutex(Btree *p){ + BtShared *pBt = p->pBt; + assert( p->locked==1 ); + assert( sqlite3_mutex_held(pBt->mutex) ); + assert( sqlite3_mutex_held(p->db->mutex) ); + assert( p->db==pBt->db ); + sqlite3_mutex_leave(pBt->mutex); + p->locked = 0; +} -#ifndef SQLITE_OMIT_QUICKBALANCE /* -** This version of balance() handles the common special case where -** a new entry is being inserted on the extreme right-end of the -** tree, in other words, when the new entry will become the largest -** entry in the tree. -** -** Instead of trying balance the 3 right-most leaf pages, just add -** a new page to the right-hand side and put the one new entry in -** that page. This leaves the right side of the tree somewhat -** unbalanced. But odds are that we will be inserting new entries -** at the end soon afterwards so the nearly empty page will quickly -** fill up. On average. +** Enter a mutex on the given BTree object. ** -** pPage is the leaf page which is the right-most page in the tree. -** pParent is its parent. pPage must have a single overflow entry -** which is also the right-most entry on the page. +** If the object is not sharable, then no mutex is ever required +** and this routine is a no-op. The underlying mutex is non-recursive. +** But we keep a reference count in Btree.wantToLock so the behavior +** of this interface is recursive. ** -** The pSpace buffer is used to store a temporary copy of the divider -** cell that will be inserted into pParent. Such a cell consists of a 4 -** byte page number followed by a variable length integer. In other -** words, at most 13 bytes. Hence the pSpace buffer must be at -** least 13 bytes in size. +** To avoid deadlocks, multiple Btrees are locked in the same order +** by all database connections. The p->pNext is a list of other +** Btrees belonging to the same database connection as the p Btree +** which need to be locked after p. If we cannot get a lock on +** p, then first unlock all of the others on p->pNext, then wait +** for the lock to become available on p, then relock all of the +** subsequent Btrees that desire a lock. */ -static int balance_quick(MemPage *pParent, MemPage *pPage, u8 *pSpace){ - BtShared *const pBt = pPage->pBt; /* B-Tree Database */ - MemPage *pNew; /* Newly allocated page */ - int rc; /* Return Code */ - Pgno pgnoNew; /* Page number of pNew */ +SQLITE_PRIVATE void sqlite3BtreeEnter(Btree *p){ + Btree *pLater; - assert( sqlite3_mutex_held(pPage->pBt->mutex) ); - assert( sqlite3PagerIswriteable(pParent->pDbPage) ); - assert( pPage->nOverflow==1 ); + /* Some basic sanity checking on the Btree. The list of Btrees + ** connected by pNext and pPrev should be in sorted order by + ** Btree.pBt value. All elements of the list should belong to + ** the same connection. Only shared Btrees are on the list. */ + assert( p->pNext==0 || p->pNext->pBt>p->pBt ); + assert( p->pPrev==0 || p->pPrev->pBtpBt ); + assert( p->pNext==0 || p->pNext->db==p->db ); + assert( p->pPrev==0 || p->pPrev->db==p->db ); + assert( p->sharable || (p->pNext==0 && p->pPrev==0) ); - if( pPage->nCell<=0 ) return SQLITE_CORRUPT_BKPT; + /* Check for locking consistency */ + assert( !p->locked || p->wantToLock>0 ); + assert( p->sharable || p->wantToLock==0 ); - /* Allocate a new page. This page will become the right-sibling of - ** pPage. Make the parent page writable, so that the new divider cell - ** may be inserted. If both these operations are successful, proceed. - */ - rc = allocateBtreePage(pBt, &pNew, &pgnoNew, 0, 0); + /* We should already hold a lock on the database connection */ + assert( sqlite3_mutex_held(p->db->mutex) ); - if( rc==SQLITE_OK ){ + /* Unless the database is sharable and unlocked, then BtShared.db + ** should already be set correctly. */ + assert( (p->locked==0 && p->sharable) || p->pBt->db==p->db ); - u8 *pOut = &pSpace[4]; - u8 *pCell = pPage->aOvfl[0].pCell; - u16 szCell = cellSizePtr(pPage, pCell); - u8 *pStop; + if( !p->sharable ) return; + p->wantToLock++; + if( p->locked ) return; - assert( sqlite3PagerIswriteable(pNew->pDbPage) ); - assert( pPage->aData[0]==(PTF_INTKEY|PTF_LEAFDATA|PTF_LEAF) ); - zeroPage(pNew, PTF_INTKEY|PTF_LEAFDATA|PTF_LEAF); - assemblePage(pNew, 1, &pCell, &szCell); + /* In most cases, we should be able to acquire the lock we + ** want without having to go throught the ascending lock + ** procedure that follows. Just be sure not to block. + */ + if( sqlite3_mutex_try(p->pBt->mutex)==SQLITE_OK ){ + p->pBt->db = p->db; + p->locked = 1; + return; + } - /* If this is an auto-vacuum database, update the pointer map - ** with entries for the new page, and any pointer from the - ** cell on the page to an overflow page. If either of these - ** operations fails, the return code is set, but the contents - ** of the parent page are still manipulated by thh code below. - ** That is Ok, at this point the parent page is guaranteed to - ** be marked as dirty. Returning an error code will cause a - ** rollback, undoing any changes made to the parent page. - */ - if( ISAUTOVACUUM ){ - rc = ptrmapPut(pBt, pgnoNew, PTRMAP_BTREE, pParent->pgno); - if( szCell>pNew->minLocal && rc==SQLITE_OK ){ - rc = ptrmapPutOvflPtr(pNew, pCell); - } + /* To avoid deadlock, first release all locks with a larger + ** BtShared address. Then acquire our lock. Then reacquire + ** the other BtShared locks that we used to hold in ascending + ** order. + */ + for(pLater=p->pNext; pLater; pLater=pLater->pNext){ + assert( pLater->sharable ); + assert( pLater->pNext==0 || pLater->pNext->pBt>pLater->pBt ); + assert( !pLater->locked || pLater->wantToLock>0 ); + if( pLater->locked ){ + unlockBtreeMutex(pLater); } - - /* Create a divider cell to insert into pParent. The divider cell - ** consists of a 4-byte page number (the page number of pPage) and - ** a variable length key value (which must be the same value as the - ** largest key on pPage). - ** - ** To find the largest key value on pPage, first find the right-most - ** cell on pPage. The first two fields of this cell are the - ** record-length (a variable length integer at most 32-bits in size) - ** and the key value (a variable length integer, may have any value). - ** The first of the while(...) loops below skips over the record-length - ** field. The second while(...) loop copies the key value from the - ** cell on pPage into the pSpace buffer. - */ - pCell = findCell(pPage, pPage->nCell-1); - pStop = &pCell[9]; - while( (*(pCell++)&0x80) && pCellnCell,pSpace,(int)(pOut-pSpace),0,pPage->pgno); + } + lockBtreeMutex(p); + for(pLater=p->pNext; pLater; pLater=pLater->pNext){ + if( pLater->wantToLock ){ + lockBtreeMutex(pLater); + } + } +} - /* Set the right-child pointer of pParent to point to the new page. */ - put4byte(&pParent->aData[pParent->hdrOffset+8], pgnoNew); - - /* Release the reference to the new page. */ - releasePage(pNew); +/* +** Exit the recursive mutex on a Btree. +*/ +SQLITE_PRIVATE void sqlite3BtreeLeave(Btree *p){ + if( p->sharable ){ + assert( p->wantToLock>0 ); + p->wantToLock--; + if( p->wantToLock==0 ){ + unlockBtreeMutex(p); + } } +} - return rc; +#ifndef NDEBUG +/* +** Return true if the BtShared mutex is held on the btree, or if the +** B-Tree is not marked as sharable. +** +** This routine is used only from within assert() statements. +*/ +SQLITE_PRIVATE int sqlite3BtreeHoldsMutex(Btree *p){ + assert( p->sharable==0 || p->locked==0 || p->wantToLock>0 ); + assert( p->sharable==0 || p->locked==0 || p->db==p->pBt->db ); + assert( p->sharable==0 || p->locked==0 || sqlite3_mutex_held(p->pBt->mutex) ); + assert( p->sharable==0 || p->locked==0 || sqlite3_mutex_held(p->db->mutex) ); + + return (p->sharable==0 || p->locked); } -#endif /* SQLITE_OMIT_QUICKBALANCE */ +#endif -#if 0 + +#ifndef SQLITE_OMIT_INCRBLOB /* -** This function does not contribute anything to the operation of SQLite. -** it is sometimes activated temporarily while debugging code responsible -** for setting pointer-map entries. +** Enter and leave a mutex on a Btree given a cursor owned by that +** Btree. These entry points are used by incremental I/O and can be +** omitted if that module is not used. */ -static int ptrmapCheckPages(MemPage **apPage, int nPage){ - int i, j; - for(i=0; ipBt; - assert( pPage->isInit ); +SQLITE_PRIVATE void sqlite3BtreeEnterCursor(BtCursor *pCur){ + sqlite3BtreeEnter(pCur->pBtree); +} +SQLITE_PRIVATE void sqlite3BtreeLeaveCursor(BtCursor *pCur){ + sqlite3BtreeLeave(pCur->pBtree); +} +#endif /* SQLITE_OMIT_INCRBLOB */ - for(j=0; jnCell; j++){ - CellInfo info; - u8 *z; - - z = findCell(pPage, j); - sqlite3BtreeParseCellPtr(pPage, z, &info); - if( info.iOverflow ){ - Pgno ovfl = get4byte(&z[info.iOverflow]); - ptrmapGet(pBt, ovfl, &e, &n); - assert( n==pPage->pgno && e==PTRMAP_OVERFLOW1 ); - } - if( !pPage->leaf ){ - Pgno child = get4byte(z); - ptrmapGet(pBt, child, &e, &n); - assert( n==pPage->pgno && e==PTRMAP_BTREE ); - } - } - if( !pPage->leaf ){ - Pgno child = get4byte(&pPage->aData[pPage->hdrOffset+8]); - ptrmapGet(pBt, child, &e, &n); - assert( n==pPage->pgno && e==PTRMAP_BTREE ); + +/* +** Enter the mutex on every Btree associated with a database +** connection. This is needed (for example) prior to parsing +** a statement since we will be comparing table and column names +** against all schemas and we do not want those schemas being +** reset out from under us. +** +** There is a corresponding leave-all procedures. +** +** Enter the mutexes in accending order by BtShared pointer address +** to avoid the possibility of deadlock when two threads with +** two or more btrees in common both try to lock all their btrees +** at the same instant. +*/ +SQLITE_PRIVATE void sqlite3BtreeEnterAll(sqlite3 *db){ + int i; + Btree *p; + assert( sqlite3_mutex_held(db->mutex) ); + for(i=0; inDb; i++){ + p = db->aDb[i].pBt; + if( p ) sqlite3BtreeEnter(p); + } +} +SQLITE_PRIVATE void sqlite3BtreeLeaveAll(sqlite3 *db){ + int i; + Btree *p; + assert( sqlite3_mutex_held(db->mutex) ); + for(i=0; inDb; i++){ + p = db->aDb[i].pBt; + if( p ) sqlite3BtreeLeave(p); + } +} + +/* +** Return true if a particular Btree requires a lock. Return FALSE if +** no lock is ever required since it is not sharable. +*/ +SQLITE_PRIVATE int sqlite3BtreeSharable(Btree *p){ + return p->sharable; +} + +#ifndef NDEBUG +/* +** Return true if the current thread holds the database connection +** mutex and all required BtShared mutexes. +** +** This routine is used inside assert() statements only. +*/ +SQLITE_PRIVATE int sqlite3BtreeHoldsAllMutexes(sqlite3 *db){ + int i; + if( !sqlite3_mutex_held(db->mutex) ){ + return 0; + } + for(i=0; inDb; i++){ + Btree *p; + p = db->aDb[i].pBt; + if( p && p->sharable && + (p->wantToLock==0 || !sqlite3_mutex_held(p->pBt->mutex)) ){ + return 0; } } return 1; } -#endif +#endif /* NDEBUG */ +#ifndef NDEBUG /* -** This function is used to copy the contents of the b-tree node stored -** on page pFrom to page pTo. If page pFrom was not a leaf page, then -** the pointer-map entries for each child page are updated so that the -** parent page stored in the pointer map is page pTo. If pFrom contained -** any cells with overflow page pointers, then the corresponding pointer -** map entries are also updated so that the parent page is page pTo. +** Return true if the correct mutexes are held for accessing the +** db->aDb[iDb].pSchema structure. The mutexes required for schema +** access are: ** -** If pFrom is currently carrying any overflow cells (entries in the -** MemPage.aOvfl[] array), they are not copied to pTo. +** (1) The mutex on db +** (2) if iDb!=1, then the mutex on db->aDb[iDb].pBt. ** -** Before returning, page pTo is reinitialized using sqlite3BtreeInitPage(). +** If pSchema is not NULL, then iDb is computed from pSchema and +** db using sqlite3SchemaToIndex(). +*/ +SQLITE_PRIVATE int sqlite3SchemaMutexHeld(sqlite3 *db, int iDb, Schema *pSchema){ + Btree *p; + assert( db!=0 ); + if( pSchema ) iDb = sqlite3SchemaToIndex(db, pSchema); + assert( iDb>=0 && iDbnDb ); + if( !sqlite3_mutex_held(db->mutex) ) return 0; + if( iDb==1 ) return 1; + p = db->aDb[iDb].pBt; + assert( p!=0 ); + return p->sharable==0 || p->locked==1; +} +#endif /* NDEBUG */ + +#else /* SQLITE_THREADSAFE>0 above. SQLITE_THREADSAFE==0 below */ +/* +** The following are special cases for mutex enter routines for use +** in single threaded applications that use shared cache. Except for +** these two routines, all mutex operations are no-ops in that case and +** are null #defines in btree.h. ** -** The performance of this function is not critical. It is only used by -** the balance_shallower() and balance_deeper() procedures, neither of -** which are called often under normal circumstances. +** If shared cache is disabled, then all btree mutex routines, including +** the ones below, are no-ops and are null #defines in btree.h. */ -static int copyNodeContent(MemPage *pFrom, MemPage *pTo){ - BtShared * const pBt = pFrom->pBt; - u8 * const aFrom = pFrom->aData; - u8 * const aTo = pTo->aData; - int const iFromHdr = pFrom->hdrOffset; - int const iToHdr = ((pTo->pgno==1) ? 100 : 0); - int rc = SQLITE_OK; - int iData; - - assert( pFrom->isInit ); - assert( pFrom->nFree>=iToHdr ); - assert( get2byte(&aFrom[iFromHdr+5])<=pBt->usableSize ); - - /* Copy the b-tree node content from page pFrom to page pTo. */ - iData = get2byte(&aFrom[iFromHdr+5]); - memcpy(&aTo[iData], &aFrom[iData], pBt->usableSize-iData); - memcpy(&aTo[iToHdr], &aFrom[iFromHdr], pFrom->cellOffset + 2*pFrom->nCell); - - /* Reinitialize page pTo so that the contents of the MemPage structure - ** match the new data. The initialization of pTo "cannot" fail, as the - ** data copied from pFrom is known to be valid. */ - pTo->isInit = 0; - TESTONLY(rc = ) sqlite3BtreeInitPage(pTo); - assert( rc==SQLITE_OK ); - /* If this is an auto-vacuum database, update the pointer-map entries - ** for any b-tree or overflow pages that pTo now contains the pointers to. */ - if( ISAUTOVACUUM ){ - rc = setChildPtrmaps(pTo); +SQLITE_PRIVATE void sqlite3BtreeEnter(Btree *p){ + p->pBt->db = p->db; +} +SQLITE_PRIVATE void sqlite3BtreeEnterAll(sqlite3 *db){ + int i; + for(i=0; inDb; i++){ + Btree *p = db->aDb[i].pBt; + if( p ){ + p->pBt->db = p->db; + } } - return rc; } +#endif /* if SQLITE_THREADSAFE */ +#endif /* ifndef SQLITE_OMIT_SHARED_CACHE */ +/************** End of btmutex.c *********************************************/ +/************** Begin file btree.c *******************************************/ /* -** This routine redistributes cells on the iParentIdx'th child of pParent -** (hereafter "the page") and up to 2 siblings so that all pages have about the -** same amount of free space. Usually a single sibling on either side of the -** page are used in the balancing, though both siblings might come from one -** side if the page is the first or last child of its parent. If the page -** has fewer than 2 siblings (something which can only happen if the page -** is a root page or a child of a root page) then all available siblings -** participate in the balancing. -** -** The number of siblings of the page might be increased or decreased by -** one or two in an effort to keep pages nearly full but not over full. +** 2004 April 6 ** -** Note that when this routine is called, some of the cells on the page -** might not actually be stored in MemPage.aData[]. This can happen -** if the page is overfull. This routine ensures that all cells allocated -** to the page and its siblings fit into MemPage.aData[] before returning. +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: ** -** In the course of balancing the page and its siblings, cells may be -** inserted into or removed from the parent page (pParent). Doing so -** may cause the parent page to become overfull or underfull. If this -** happens, it is the responsibility of the caller to invoke the correct -** balancing routine to fix this problem (see the balance() routine). +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. ** -** If this routine fails for any reason, it might leave the database -** in a corrupted state. So if this routine fails, the database should -** be rolled back. +************************************************************************* +** This file implements a external (disk-based) database using BTrees. +** See the header comment on "btreeInt.h" for additional information. +** Including a description of file format and an overview of operation. +*/ + +/* +** The header string that appears at the beginning of every +** SQLite database. +*/ +static const char zMagicHeader[] = SQLITE_FILE_HEADER; + +/* +** Set this global variable to 1 to enable tracing using the TRACE +** macro. +*/ +#if 0 +int sqlite3BtreeTrace=1; /* True to enable tracing */ +# define TRACE(X) if(sqlite3BtreeTrace){printf X;fflush(stdout);} +#else +# define TRACE(X) +#endif + +/* +** Extract a 2-byte big-endian integer from an array of unsigned bytes. +** But if the value is zero, make it 65536. ** -** The third argument to this function, aOvflSpace, is a pointer to a -** buffer page-size bytes in size. If, in inserting cells into the parent -** page (pParent), the parent page becomes overfull, this buffer is -** used to store the parents overflow cells. Because this function inserts -** a maximum of four divider cells into the parent page, and the maximum -** size of a cell stored within an internal node is always less than 1/4 -** of the page-size, the aOvflSpace[] buffer is guaranteed to be large -** enough for all overflow cells. +** This routine is used to extract the "offset to cell content area" value +** from the header of a btree page. If the page size is 65536 and the page +** is empty, the offset should be 65536, but the 2-byte value stores zero. +** This routine makes the necessary adjustment to 65536. +*/ +#define get2byteNotZero(X) (((((int)get2byte(X))-1)&0xffff)+1) + +#ifndef SQLITE_OMIT_SHARED_CACHE +/* +** A list of BtShared objects that are eligible for participation +** in shared cache. This variable has file scope during normal builds, +** but the test harness needs to access it so we make it global for +** test builds. ** -** If aOvflSpace is set to a null pointer, this function returns -** SQLITE_NOMEM. +** Access to this variable is protected by SQLITE_MUTEX_STATIC_MASTER. */ -static int balance_nonroot( - MemPage *pParent, /* Parent page of siblings being balanced */ - int iParentIdx, /* Index of "the page" in pParent */ - u8 *aOvflSpace, /* page-size bytes of space for parent ovfl */ - int isRoot /* True if pParent is a root-page */ -){ - BtShared *pBt; /* The whole database */ - int nCell = 0; /* Number of cells in apCell[] */ - int nMaxCells = 0; /* Allocated size of apCell, szCell, aFrom. */ - int nNew = 0; /* Number of pages in apNew[] */ - int nOld; /* Number of pages in apOld[] */ - int i, j, k; /* Loop counters */ - int nxDiv; /* Next divider slot in pParent->aCell[] */ - int rc = SQLITE_OK; /* The return code */ - u16 leafCorrection; /* 4 if pPage is a leaf. 0 if not */ - int leafData; /* True if pPage is a leaf of a LEAFDATA tree */ - int usableSpace; /* Bytes in pPage beyond the header */ - int pageFlags; /* Value of pPage->aData[0] */ - int subtotal; /* Subtotal of bytes in cells on one page */ - int iSpace1 = 0; /* First unused byte of aSpace1[] */ - int iOvflSpace = 0; /* First unused byte of aOvflSpace[] */ - int szScratch; /* Size of scratch memory requested */ - MemPage *apOld[NB]; /* pPage and up to two siblings */ - MemPage *apCopy[NB]; /* Private copies of apOld[] pages */ - MemPage *apNew[NB+2]; /* pPage and up to NB siblings after balancing */ - u8 *pRight; /* Location in parent of right-sibling pointer */ - u8 *apDiv[NB-1]; /* Divider cells in pParent */ - int cntNew[NB+2]; /* Index in aCell[] of cell after i-th page */ - int szNew[NB+2]; /* Combined size of cells place on i-th page */ - u8 **apCell = 0; /* All cells begin balanced */ - u16 *szCell; /* Local size of all cells in apCell[] */ - u8 *aSpace1; /* Space for copies of dividers cells */ - Pgno pgno; /* Temp var to store a page number in */ +#ifdef SQLITE_TEST +SQLITE_PRIVATE BtShared *SQLITE_WSD sqlite3SharedCacheList = 0; +#else +static BtShared *SQLITE_WSD sqlite3SharedCacheList = 0; +#endif +#endif /* SQLITE_OMIT_SHARED_CACHE */ - pBt = pParent->pBt; - assert( sqlite3_mutex_held(pBt->mutex) ); - assert( sqlite3PagerIswriteable(pParent->pDbPage) ); +#ifndef SQLITE_OMIT_SHARED_CACHE +/* +** Enable or disable the shared pager and schema features. +** +** This routine has no effect on existing database connections. +** The shared cache setting effects only future calls to +** sqlite3_open(), sqlite3_open16(), or sqlite3_open_v2(). +*/ +SQLITE_API int sqlite3_enable_shared_cache(int enable){ + sqlite3GlobalConfig.sharedCacheEnabled = enable; + return SQLITE_OK; +} +#endif -#if 0 - TRACE(("BALANCE: begin page %d child of %d\n", pPage->pgno, pParent->pgno)); + + +#ifdef SQLITE_OMIT_SHARED_CACHE + /* + ** The functions querySharedCacheTableLock(), setSharedCacheTableLock(), + ** and clearAllSharedCacheTableLocks() + ** manipulate entries in the BtShared.pLock linked list used to store + ** shared-cache table level locks. If the library is compiled with the + ** shared-cache feature disabled, then there is only ever one user + ** of each BtShared structure and so this locking is not necessary. + ** So define the lock related functions as no-ops. + */ + #define querySharedCacheTableLock(a,b,c) SQLITE_OK + #define setSharedCacheTableLock(a,b,c) SQLITE_OK + #define clearAllSharedCacheTableLocks(a) + #define downgradeAllSharedCacheTableLocks(a) + #define hasSharedCacheTableLock(a,b,c,d) 1 + #define hasReadConflicts(a, b) 0 #endif - /* At this point pParent may have at most one overflow cell. And if - ** this overflow cell is present, it must be the cell with - ** index iParentIdx. This scenario comes about when this function - ** is called (indirectly) from sqlite3BtreeDelete(). */ - assert( pParent->nOverflow==0 || pParent->nOverflow==1 ); - assert( pParent->nOverflow==0 || pParent->aOvfl[0].idx==iParentIdx ); +#ifndef SQLITE_OMIT_SHARED_CACHE - if( !aOvflSpace ){ - return SQLITE_NOMEM; +#ifdef SQLITE_DEBUG +/* +**** This function is only used as part of an assert() statement. *** +** +** Check to see if pBtree holds the required locks to read or write to the +** table with root page iRoot. Return 1 if it does and 0 if not. +** +** For example, when writing to a table with root-page iRoot via +** Btree connection pBtree: +** +** assert( hasSharedCacheTableLock(pBtree, iRoot, 0, WRITE_LOCK) ); +** +** When writing to an index that resides in a sharable database, the +** caller should have first obtained a lock specifying the root page of +** the corresponding table. This makes things a bit more complicated, +** as this module treats each table as a separate structure. To determine +** the table corresponding to the index being written, this +** function has to search through the database schema. +** +** Instead of a lock on the table/index rooted at page iRoot, the caller may +** hold a write-lock on the schema table (root page 1). This is also +** acceptable. +*/ +static int hasSharedCacheTableLock( + Btree *pBtree, /* Handle that must hold lock */ + Pgno iRoot, /* Root page of b-tree */ + int isIndex, /* True if iRoot is the root of an index b-tree */ + int eLockType /* Required lock type (READ_LOCK or WRITE_LOCK) */ +){ + Schema *pSchema = (Schema *)pBtree->pBt->pSchema; + Pgno iTab = 0; + BtLock *pLock; + + /* If this database is not shareable, or if the client is reading + ** and has the read-uncommitted flag set, then no lock is required. + ** Return true immediately. + */ + if( (pBtree->sharable==0) + || (eLockType==READ_LOCK && (pBtree->db->flags & SQLITE_ReadUncommitted)) + ){ + return 1; } - /* Find the sibling pages to balance. Also locate the cells in pParent - ** that divide the siblings. An attempt is made to find NN siblings on - ** either side of pPage. More siblings are taken from one side, however, - ** if there are fewer than NN siblings on the other side. If pParent - ** has NB or fewer children then all children of pParent are taken. - ** - ** This loop also drops the divider cells from the parent page. This - ** way, the remainder of the function does not have to deal with any - ** overflow cells in the parent page, as if one existed it has already - ** been removed. */ - i = pParent->nOverflow + pParent->nCell; - if( i<2 ){ - nxDiv = 0; - nOld = i+1; - }else{ - nOld = 3; - if( iParentIdx==0 ){ - nxDiv = 0; - }else if( iParentIdx==i ){ - nxDiv = i-2; - }else{ - nxDiv = iParentIdx-1; - } - i = 2; + /* If the client is reading or writing an index and the schema is + ** not loaded, then it is too difficult to actually check to see if + ** the correct locks are held. So do not bother - just return true. + ** This case does not come up very often anyhow. + */ + if( isIndex && (!pSchema || (pSchema->flags&DB_SchemaLoaded)==0) ){ + return 1; } - if( (i+nxDiv-pParent->nOverflow)==pParent->nCell ){ - pRight = &pParent->aData[pParent->hdrOffset+8]; + + /* Figure out the root-page that the lock should be held on. For table + ** b-trees, this is just the root page of the b-tree being read or + ** written. For index b-trees, it is the root page of the associated + ** table. */ + if( isIndex ){ + HashElem *p; + for(p=sqliteHashFirst(&pSchema->idxHash); p; p=sqliteHashNext(p)){ + Index *pIdx = (Index *)sqliteHashData(p); + if( pIdx->tnum==(int)iRoot ){ + iTab = pIdx->pTable->tnum; + } + } }else{ - pRight = findCell(pParent, i+nxDiv-pParent->nOverflow); + iTab = iRoot; } - pgno = get4byte(pRight); - while( 1 ){ - rc = getAndInitPage(pBt, pgno, &apOld[i]); - if( rc ){ - memset(apOld, 0, i*sizeof(MemPage*)); - goto balance_cleanup; + + /* Search for the required lock. Either a write-lock on root-page iTab, a + ** write-lock on the schema table, or (if the client is reading) a + ** read-lock on iTab will suffice. Return 1 if any of these are found. */ + for(pLock=pBtree->pBt->pLock; pLock; pLock=pLock->pNext){ + if( pLock->pBtree==pBtree + && (pLock->iTable==iTab || (pLock->eLock==WRITE_LOCK && pLock->iTable==1)) + && pLock->eLock>=eLockType + ){ + return 1; } - nMaxCells += 1+apOld[i]->nCell+apOld[i]->nOverflow; - if( (i--)==0 ) break; + } - if( pParent->nOverflow && i+nxDiv==pParent->aOvfl[0].idx ){ - apDiv[i] = pParent->aOvfl[0].pCell; - pgno = get4byte(apDiv[i]); - szNew[i] = cellSizePtr(pParent, apDiv[i]); - pParent->nOverflow = 0; - }else{ - apDiv[i] = findCell(pParent, i+nxDiv-pParent->nOverflow); - pgno = get4byte(apDiv[i]); - szNew[i] = cellSizePtr(pParent, apDiv[i]); + /* Failed to find the required lock. */ + return 0; +} +#endif /* SQLITE_DEBUG */ - /* Drop the cell from the parent page. apDiv[i] still points to - ** the cell within the parent, even though it has been dropped. - ** This is safe because dropping a cell only overwrites the first - ** four bytes of it, and this function does not need the first - ** four bytes of the divider cell. So the pointer is safe to use - ** later on. - ** - ** Unless SQLite is compiled in secure-delete mode. In this case, - ** the dropCell() routine will overwrite the entire cell with zeroes. - ** In this case, temporarily copy the cell into the aOvflSpace[] - ** buffer. It will be copied out again as soon as the aSpace[] buffer - ** is allocated. */ -#ifdef SQLITE_SECURE_DELETE - memcpy(&aOvflSpace[apDiv[i]-pParent->aData], apDiv[i], szNew[i]); - apDiv[i] = &aOvflSpace[apDiv[i]-pParent->aData]; -#endif - dropCell(pParent, i+nxDiv-pParent->nOverflow, szNew[i]); +#ifdef SQLITE_DEBUG +/* +**** This function may be used as part of assert() statements only. **** +** +** Return true if it would be illegal for pBtree to write into the +** table or index rooted at iRoot because other shared connections are +** simultaneously reading that same table or index. +** +** It is illegal for pBtree to write if some other Btree object that +** shares the same BtShared object is currently reading or writing +** the iRoot table. Except, if the other Btree object has the +** read-uncommitted flag set, then it is OK for the other object to +** have a read cursor. +** +** For example, before writing to any part of the table or index +** rooted at page iRoot, one should call: +** +** assert( !hasReadConflicts(pBtree, iRoot) ); +*/ +static int hasReadConflicts(Btree *pBtree, Pgno iRoot){ + BtCursor *p; + for(p=pBtree->pBt->pCursor; p; p=p->pNext){ + if( p->pgnoRoot==iRoot + && p->pBtree!=pBtree + && 0==(p->pBtree->db->flags & SQLITE_ReadUncommitted) + ){ + return 1; } } + return 0; +} +#endif /* #ifdef SQLITE_DEBUG */ - /* Make nMaxCells a multiple of 4 in order to preserve 8-byte - ** alignment */ - nMaxCells = (nMaxCells + 3)&~3; +/* +** Query to see if Btree handle p may obtain a lock of type eLock +** (READ_LOCK or WRITE_LOCK) on the table with root-page iTab. Return +** SQLITE_OK if the lock may be obtained (by calling +** setSharedCacheTableLock()), or SQLITE_LOCKED if not. +*/ +static int querySharedCacheTableLock(Btree *p, Pgno iTab, u8 eLock){ + BtShared *pBt = p->pBt; + BtLock *pIter; - /* - ** Allocate space for memory structures + assert( sqlite3BtreeHoldsMutex(p) ); + assert( eLock==READ_LOCK || eLock==WRITE_LOCK ); + assert( p->db!=0 ); + assert( !(p->db->flags&SQLITE_ReadUncommitted)||eLock==WRITE_LOCK||iTab==1 ); + + /* If requesting a write-lock, then the Btree must have an open write + ** transaction on this file. And, obviously, for this to be so there + ** must be an open write transaction on the file itself. */ - k = pBt->pageSize + ROUND8(sizeof(MemPage)); - szScratch = - nMaxCells*sizeof(u8*) /* apCell */ - + nMaxCells*sizeof(u16) /* szCell */ - + pBt->pageSize /* aSpace1 */ - + k*nOld; /* Page copies (apCopy) */ - apCell = sqlite3ScratchMalloc( szScratch ); - if( apCell==0 ){ - rc = SQLITE_NOMEM; - goto balance_cleanup; + assert( eLock==READ_LOCK || (p==pBt->pWriter && p->inTrans==TRANS_WRITE) ); + assert( eLock==READ_LOCK || pBt->inTransaction==TRANS_WRITE ); + + /* This routine is a no-op if the shared-cache is not enabled */ + if( !p->sharable ){ + return SQLITE_OK; } - szCell = (u16*)&apCell[nMaxCells]; - aSpace1 = (u8*)&szCell[nMaxCells]; - assert( EIGHT_BYTE_ALIGNMENT(aSpace1) ); - /* - ** Load pointers to all cells on sibling pages and the divider cells - ** into the local apCell[] array. Make copies of the divider cells - ** into space obtained from aSpace1[] and remove the the divider Cells - ** from pParent. - ** - ** If the siblings are on leaf pages, then the child pointers of the - ** divider cells are stripped from the cells before they are copied - ** into aSpace1[]. In this way, all cells in apCell[] are without - ** child pointers. If siblings are not leaves, then all cell in - ** apCell[] include child pointers. Either way, all cells in apCell[] - ** are alike. - ** - ** leafCorrection: 4 if pPage is a leaf. 0 if pPage is not a leaf. - ** leafData: 1 if pPage holds key+data and pParent holds only keys. + /* If some other connection is holding an exclusive lock, the + ** requested lock may not be obtained. */ - leafCorrection = apOld[0]->leaf*4; - leafData = apOld[0]->hasData; - for(i=0; ipageSize + k*i]; - memcpy(pOld, apOld[i], sizeof(MemPage)); - pOld->aData = (void*)&pOld[1]; - memcpy(pOld->aData, apOld[i]->aData, pBt->pageSize); + if( pBt->pWriter!=p && (pBt->btsFlags & BTS_EXCLUSIVE)!=0 ){ + sqlite3ConnectionBlocked(p->db, pBt->pWriter->db); + return SQLITE_LOCKED_SHAREDCACHE; + } - limit = pOld->nCell+pOld->nOverflow; - for(j=0; jpageSize/4 ); - assert( iSpace1<=pBt->pageSize ); - memcpy(pTemp, apDiv[i], sz); - apCell[nCell] = pTemp+leafCorrection; - assert( leafCorrection==0 || leafCorrection==4 ); - szCell[nCell] = szCell[nCell] - leafCorrection; - if( !pOld->leaf ){ - assert( leafCorrection==0 ); - assert( pOld->hdrOffset==0 ); - /* The right pointer of the child page pOld becomes the left - ** pointer of the divider cell */ - memcpy(apCell[nCell], &pOld->aData[8], 4); - }else{ - assert( leafCorrection==4 ); - if( szCell[nCell]<4 ){ - /* Do not allow any cells smaller than 4 bytes. */ - szCell[nCell] = 4; - } + for(pIter=pBt->pLock; pIter; pIter=pIter->pNext){ + /* The condition (pIter->eLock!=eLock) in the following if(...) + ** statement is a simplification of: + ** + ** (eLock==WRITE_LOCK || pIter->eLock==WRITE_LOCK) + ** + ** since we know that if eLock==WRITE_LOCK, then no other connection + ** may hold a WRITE_LOCK on any table in this file (since there can + ** only be a single writer). + */ + assert( pIter->eLock==READ_LOCK || pIter->eLock==WRITE_LOCK ); + assert( eLock==READ_LOCK || pIter->pBtree==p || pIter->eLock==READ_LOCK); + if( pIter->pBtree!=p && pIter->iTable==iTab && pIter->eLock!=eLock ){ + sqlite3ConnectionBlocked(p->db, pIter->pBtree->db); + if( eLock==WRITE_LOCK ){ + assert( p==pBt->pWriter ); + pBt->btsFlags |= BTS_PENDING; } - nCell++; + return SQLITE_LOCKED_SHAREDCACHE; } } + return SQLITE_OK; +} +#endif /* !SQLITE_OMIT_SHARED_CACHE */ - /* - ** Figure out the number of pages needed to hold all nCell cells. - ** Store this number in "k". Also compute szNew[] which is the total - ** size of all cells on the i-th page and cntNew[] which is the index - ** in apCell[] of the cell that divides page i from page i+1. - ** cntNew[k] should equal nCell. - ** - ** Values computed by this block: - ** - ** k: The total number of sibling pages - ** szNew[i]: Spaced used on the i-th sibling page. - ** cntNew[i]: Index in apCell[] and szCell[] for the first cell to - ** the right of the i-th sibling page. - ** usableSpace: Number of bytes of space available on each sibling. - ** - */ - usableSpace = pBt->usableSize - 12 + leafCorrection; - for(subtotal=k=i=0; i usableSpace ){ - szNew[k] = subtotal - szCell[i]; - cntNew[k] = i; - if( leafData ){ i--; } - subtotal = 0; - k++; - if( k>NB+1 ){ rc = SQLITE_CORRUPT; goto balance_cleanup; } +#ifndef SQLITE_OMIT_SHARED_CACHE +/* +** Add a lock on the table with root-page iTable to the shared-btree used +** by Btree handle p. Parameter eLock must be either READ_LOCK or +** WRITE_LOCK. +** +** This function assumes the following: +** +** (a) The specified Btree object p is connected to a sharable +** database (one with the BtShared.sharable flag set), and +** +** (b) No other Btree objects hold a lock that conflicts +** with the requested lock (i.e. querySharedCacheTableLock() has +** already been called and returned SQLITE_OK). +** +** SQLITE_OK is returned if the lock is added successfully. SQLITE_NOMEM +** is returned if a malloc attempt fails. +*/ +static int setSharedCacheTableLock(Btree *p, Pgno iTable, u8 eLock){ + BtShared *pBt = p->pBt; + BtLock *pLock = 0; + BtLock *pIter; + + assert( sqlite3BtreeHoldsMutex(p) ); + assert( eLock==READ_LOCK || eLock==WRITE_LOCK ); + assert( p->db!=0 ); + + /* A connection with the read-uncommitted flag set will never try to + ** obtain a read-lock using this function. The only read-lock obtained + ** by a connection in read-uncommitted mode is on the sqlite_master + ** table, and that lock is obtained in BtreeBeginTrans(). */ + assert( 0==(p->db->flags&SQLITE_ReadUncommitted) || eLock==WRITE_LOCK ); + + /* This function should only be called on a sharable b-tree after it + ** has been determined that no other b-tree holds a conflicting lock. */ + assert( p->sharable ); + assert( SQLITE_OK==querySharedCacheTableLock(p, iTable, eLock) ); + + /* First search the list for an existing lock on this table. */ + for(pIter=pBt->pLock; pIter; pIter=pIter->pNext){ + if( pIter->iTable==iTable && pIter->pBtree==p ){ + pLock = pIter; + break; } } - szNew[k] = subtotal; - cntNew[k] = nCell; - k++; - /* - ** The packing computed by the previous block is biased toward the siblings - ** on the left side. The left siblings are always nearly full, while the - ** right-most sibling might be nearly empty. This block of code attempts - ** to adjust the packing of siblings to get a better balance. - ** - ** This adjustment is more than an optimization. The packing above might - ** be so out of balance as to be illegal. For example, the right-most - ** sibling might be completely empty. This adjustment is not optional. + /* If the above search did not find a BtLock struct associating Btree p + ** with table iTable, allocate one and link it into the list. */ - for(i=k-1; i>0; i--){ - int szRight = szNew[i]; /* Size of sibling on the right */ - int szLeft = szNew[i-1]; /* Size of sibling on the left */ - int r; /* Index of right-most cell in left sibling */ - int d; /* Index of first cell to the left of right sibling */ - - r = cntNew[i-1] - 1; - d = r + 1 - leafData; - assert( diTable = iTable; + pLock->pBtree = p; + pLock->pNext = pBt->pLock; + pBt->pLock = pLock; } - /* Either we found one or more cells (cntnew[0])>0) or pPage is - ** a virtual root page. A virtual root page is when the real root - ** page is page 1 and we are the only child of that page. + /* Set the BtLock.eLock variable to the maximum of the current lock + ** and the requested lock. This means if a write-lock was already held + ** and a read-lock requested, we don't incorrectly downgrade the lock. */ - assert( cntNew[0]>0 || (pParent->pgno==1 && pParent->nCell==0) ); + assert( WRITE_LOCK>READ_LOCK ); + if( eLock>pLock->eLock ){ + pLock->eLock = eLock; + } - TRACE(("BALANCE: old: %d %d %d ", - apOld[0]->pgno, - nOld>=2 ? apOld[1]->pgno : 0, - nOld>=3 ? apOld[2]->pgno : 0 - )); + return SQLITE_OK; +} +#endif /* !SQLITE_OMIT_SHARED_CACHE */ - /* - ** Allocate k new pages. Reuse old pages where possible. - */ - if( apOld[0]->pgno<=1 ){ - rc = SQLITE_CORRUPT; - goto balance_cleanup; - } - pageFlags = apOld[0]->aData[0]; - for(i=0; ipDbPage); - nNew++; - if( rc ) goto balance_cleanup; - }else{ - assert( i>0 ); - rc = allocateBtreePage(pBt, &pNew, &pgno, pgno, 0); - if( rc ) goto balance_cleanup; - apNew[i] = pNew; - nNew++; +#ifndef SQLITE_OMIT_SHARED_CACHE +/* +** Release all the table locks (locks obtained via calls to +** the setSharedCacheTableLock() procedure) held by Btree object p. +** +** This function assumes that Btree p has an open read or write +** transaction. If it does not, then the BTS_PENDING flag +** may be incorrectly cleared. +*/ +static void clearAllSharedCacheTableLocks(Btree *p){ + BtShared *pBt = p->pBt; + BtLock **ppIter = &pBt->pLock; - /* Set the pointer-map entry for the new sibling page. */ - if( ISAUTOVACUUM ){ - rc = ptrmapPut(pBt, pNew->pgno, PTRMAP_BTREE, pParent->pgno); - if( rc!=SQLITE_OK ){ - goto balance_cleanup; - } + assert( sqlite3BtreeHoldsMutex(p) ); + assert( p->sharable || 0==*ppIter ); + assert( p->inTrans>0 ); + + while( *ppIter ){ + BtLock *pLock = *ppIter; + assert( (pBt->btsFlags & BTS_EXCLUSIVE)==0 || pBt->pWriter==pLock->pBtree ); + assert( pLock->pBtree->inTrans>=pLock->eLock ); + if( pLock->pBtree==p ){ + *ppIter = pLock->pNext; + assert( pLock->iTable!=1 || pLock==&p->lock ); + if( pLock->iTable!=1 ){ + sqlite3_free(pLock); } + }else{ + ppIter = &pLock->pNext; } } - /* Free any old pages that were not reused as new pages. - */ - while( ibtsFlags & BTS_PENDING)==0 || pBt->pWriter ); + if( pBt->pWriter==p ){ + pBt->pWriter = 0; + pBt->btsFlags &= ~(BTS_EXCLUSIVE|BTS_PENDING); + }else if( pBt->nTransaction==2 ){ + /* This function is called when Btree p is concluding its + ** transaction. If there currently exists a writer, and p is not + ** that writer, then the number of locks held by connections other + ** than the writer must be about to drop to zero. In this case + ** set the BTS_PENDING flag to 0. + ** + ** If there is not currently a writer, then BTS_PENDING must + ** be zero already. So this next line is harmless in that case. + */ + pBt->btsFlags &= ~BTS_PENDING; } +} - /* - ** Put the new pages in accending order. This helps to - ** keep entries in the disk file in order so that a scan - ** of the table is a linear scan through the file. That - ** in turn helps the operating system to deliver pages - ** from the disk more rapidly. - ** - ** An O(n^2) insertion sort algorithm is used, but since - ** n is never more than NB (a small constant), that should - ** not be a problem. - ** - ** When NB==3, this one optimization makes the database - ** about 25% faster for large insertions and deletions. - */ - for(i=0; ipgno; - int minI = i; - for(j=i+1; jpgno<(unsigned)minV ){ - minI = j; - minV = apNew[j]->pgno; - } - } - if( minI>i ){ - int t; - MemPage *pT; - t = apNew[i]->pgno; - pT = apNew[i]; - apNew[i] = apNew[minI]; - apNew[minI] = pT; +/* +** This function changes all write-locks held by Btree p into read-locks. +*/ +static void downgradeAllSharedCacheTableLocks(Btree *p){ + BtShared *pBt = p->pBt; + if( pBt->pWriter==p ){ + BtLock *pLock; + pBt->pWriter = 0; + pBt->btsFlags &= ~(BTS_EXCLUSIVE|BTS_PENDING); + for(pLock=pBt->pLock; pLock; pLock=pLock->pNext){ + assert( pLock->eLock==READ_LOCK || pLock->pBtree==p ); + pLock->eLock = READ_LOCK; } } - TRACE(("new: %d(%d) %d(%d) %d(%d) %d(%d) %d(%d)\n", - apNew[0]->pgno, szNew[0], - nNew>=2 ? apNew[1]->pgno : 0, nNew>=2 ? szNew[1] : 0, - nNew>=3 ? apNew[2]->pgno : 0, nNew>=3 ? szNew[2] : 0, - nNew>=4 ? apNew[3]->pgno : 0, nNew>=4 ? szNew[3] : 0, - nNew>=5 ? apNew[4]->pgno : 0, nNew>=5 ? szNew[4] : 0)); +} - assert( sqlite3PagerIswriteable(pParent->pDbPage) ); - put4byte(pRight, apNew[nNew-1]->pgno); +#endif /* SQLITE_OMIT_SHARED_CACHE */ - /* - ** Evenly distribute the data in apCell[] across the new pages. - ** Insert divider cells into pParent as necessary. - */ - j = 0; - for(i=0; inCell>0 || (nNew==1 && cntNew[0]==0) ); - assert( pNew->nOverflow==0 ); +static void releasePage(MemPage *pPage); /* Forward reference */ - j = cntNew[i]; +/* +***** This routine is used inside of assert() only **** +** +** Verify that the cursor holds the mutex on its BtShared +*/ +#ifdef SQLITE_DEBUG +static int cursorHoldsMutex(BtCursor *p){ + return sqlite3_mutex_held(p->pBt->mutex); +} +#endif - /* If the sibling page assembled above was not the right-most sibling, - ** insert a divider cell into the parent page. - */ - assert( ileaf ){ - memcpy(&pNew->aData[8], pCell, 4); - }else if( leafData ){ - /* If the tree is a leaf-data tree, and the siblings are leaves, - ** then there is no divider cell in apCell[]. Instead, the divider - ** cell consists of the integer key for the right-most cell of - ** the sibling-page assembled above only. - */ - CellInfo info; - j--; - sqlite3BtreeParseCellPtr(pNew, apCell[j], &info); - pCell = pTemp; - sz = 4 + putVarint(&pCell[4], info.nKey); - pTemp = 0; - }else{ - pCell -= 4; - /* Obscure case for non-leaf-data trees: If the cell at pCell was - ** previously stored on a leaf node, and its reported size was 4 - ** bytes, then it may actually be smaller than this - ** (see sqlite3BtreeParseCellPtr(), 4 bytes is the minimum size of - ** any cell). But it is important to pass the correct size to - ** insertCell(), so reparse the cell now. - ** - ** Note that this can never happen in an SQLite data file, as all - ** cells are at least 4 bytes. It only happens in b-trees used - ** to evaluate "IN (SELECT ...)" and similar clauses. - */ - if( szCell[j]==4 ){ - assert(leafCorrection==4); - sz = cellSizePtr(pParent, pCell); - } - } - iOvflSpace += sz; - assert( sz<=pBt->pageSize/4 ); - assert( iOvflSpace<=pBt->pageSize ); - rc = insertCell(pParent, nxDiv, pCell, sz, pTemp, pNew->pgno); - if( rc!=SQLITE_OK ) goto balance_cleanup; - assert( sqlite3PagerIswriteable(pParent->pDbPage) ); +#ifndef SQLITE_OMIT_INCRBLOB +/* +** Invalidate the overflow page-list cache for cursor pCur, if any. +*/ +static void invalidateOverflowCache(BtCursor *pCur){ + assert( cursorHoldsMutex(pCur) ); + sqlite3_free(pCur->aOverflow); + pCur->aOverflow = 0; +} - j++; - nxDiv++; - } +/* +** Invalidate the overflow page-list cache for all cursors opened +** on the shared btree structure pBt. +*/ +static void invalidateAllOverflowCache(BtShared *pBt){ + BtCursor *p; + assert( sqlite3_mutex_held(pBt->mutex) ); + for(p=pBt->pCursor; p; p=p->pNext){ + invalidateOverflowCache(p); } - assert( j==nCell ); - assert( nOld>0 ); - assert( nNew>0 ); - if( (pageFlags & PTF_LEAF)==0 ){ - u8 *zChild = &apCopy[nOld-1]->aData[8]; - memcpy(&apNew[nNew-1]->aData[8], zChild, 4); +} + +/* +** This function is called before modifying the contents of a table +** to invalidate any incrblob cursors that are open on the +** row or one of the rows being modified. +** +** If argument isClearTable is true, then the entire contents of the +** table is about to be deleted. In this case invalidate all incrblob +** cursors open on any row within the table with root-page pgnoRoot. +** +** Otherwise, if argument isClearTable is false, then the row with +** rowid iRow is being replaced or deleted. In this case invalidate +** only those incrblob cursors open on that specific row. +*/ +static void invalidateIncrblobCursors( + Btree *pBtree, /* The database file to check */ + i64 iRow, /* The rowid that might be changing */ + int isClearTable /* True if all rows are being deleted */ +){ + BtCursor *p; + BtShared *pBt = pBtree->pBt; + assert( sqlite3BtreeHoldsMutex(pBtree) ); + for(p=pBt->pCursor; p; p=p->pNext){ + if( p->isIncrblobHandle && (isClearTable || p->info.nKey==iRow) ){ + p->eState = CURSOR_INVALID; + } } +} - if( isRoot && pParent->nCell==0 && pParent->hdrOffset<=apNew[0]->nFree ){ - /* The root page of the b-tree now contains no cells. The only sibling - ** page is the right-child of the parent. Copy the contents of the - ** child page into the parent, decreasing the overall height of the - ** b-tree structure by one. This is described as the "balance-shallower" - ** sub-algorithm in some documentation. - ** - ** If this is an auto-vacuum database, the call to copyNodeContent() - ** sets all pointer-map entries corresponding to database image pages - ** for which the pointer is stored within the content being copied. - ** - ** The second assert below verifies that the child page is defragmented - ** (it must be, as it was just reconstructed using assemblePage()). This - ** is important if the parent page happens to be page 1 of the database - ** image. */ - assert( nNew==1 ); - assert( apNew[0]->nFree == - (get2byte(&apNew[0]->aData[5])-apNew[0]->cellOffset-apNew[0]->nCell*2) - ); - if( SQLITE_OK==(rc = copyNodeContent(apNew[0], pParent)) ){ - rc = freePage(apNew[0]); +#else + /* Stub functions when INCRBLOB is omitted */ + #define invalidateOverflowCache(x) + #define invalidateAllOverflowCache(x) + #define invalidateIncrblobCursors(x,y,z) +#endif /* SQLITE_OMIT_INCRBLOB */ + +/* +** Set bit pgno of the BtShared.pHasContent bitvec. This is called +** when a page that previously contained data becomes a free-list leaf +** page. +** +** The BtShared.pHasContent bitvec exists to work around an obscure +** bug caused by the interaction of two useful IO optimizations surrounding +** free-list leaf pages: +** +** 1) When all data is deleted from a page and the page becomes +** a free-list leaf page, the page is not written to the database +** (as free-list leaf pages contain no meaningful data). Sometimes +** such a page is not even journalled (as it will not be modified, +** why bother journalling it?). +** +** 2) When a free-list leaf page is reused, its content is not read +** from the database or written to the journal file (why should it +** be, if it is not at all meaningful?). +** +** By themselves, these optimizations work fine and provide a handy +** performance boost to bulk delete or insert operations. However, if +** a page is moved to the free-list and then reused within the same +** transaction, a problem comes up. If the page is not journalled when +** it is moved to the free-list and it is also not journalled when it +** is extracted from the free-list and reused, then the original data +** may be lost. In the event of a rollback, it may not be possible +** to restore the database to its original configuration. +** +** The solution is the BtShared.pHasContent bitvec. Whenever a page is +** moved to become a free-list leaf page, the corresponding bit is +** set in the bitvec. Whenever a leaf page is extracted from the free-list, +** optimization 2 above is omitted if the corresponding bit is already +** set in BtShared.pHasContent. The contents of the bitvec are cleared +** at the end of every transaction. +*/ +static int btreeSetHasContent(BtShared *pBt, Pgno pgno){ + int rc = SQLITE_OK; + if( !pBt->pHasContent ){ + assert( pgno<=pBt->nPage ); + pBt->pHasContent = sqlite3BitvecCreate(pBt->nPage); + if( !pBt->pHasContent ){ + rc = SQLITE_NOMEM; } - }else if( ISAUTOVACUUM ){ - /* Fix the pointer-map entries for all the cells that were shifted around. - ** There are several different types of pointer-map entries that need to - ** be dealt with by this routine. Some of these have been set already, but - ** many have not. The following is a summary: - ** - ** 1) The entries associated with new sibling pages that were not - ** siblings when this function was called. These have already - ** been set. We don't need to worry about old siblings that were - ** moved to the free-list - the freePage() code has taken care - ** of those. - ** - ** 2) The pointer-map entries associated with the first overflow - ** page in any overflow chains used by new divider cells. These - ** have also already been taken care of by the insertCell() code. - ** - ** 3) If the sibling pages are not leaves, then the child pages of - ** cells stored on the sibling pages may need to be updated. - ** - ** 4) If the sibling pages are not internal intkey nodes, then any - ** overflow pages used by these cells may need to be updated - ** (internal intkey nodes never contain pointers to overflow pages). - ** - ** 5) If the sibling pages are not leaves, then the pointer-map - ** entries for the right-child pages of each sibling may need - ** to be updated. - ** - ** Cases 1 and 2 are dealt with above by other code. The next - ** block deals with cases 3 and 4 and the one after that, case 5. Since - ** setting a pointer map entry is a relatively expensive operation, this - ** code only sets pointer map entries for child or overflow pages that have - ** actually moved between pages. */ - MemPage *pNew = apNew[0]; - MemPage *pOld = apCopy[0]; - int nOverflow = pOld->nOverflow; - int iNextOld = pOld->nCell + nOverflow; - int iOverflow = (nOverflow ? pOld->aOvfl[0].idx : -1); - j = 0; /* Current 'old' sibling page */ - k = 0; /* Current 'new' sibling page */ - for(i=0; inCell + pOld->nOverflow; - if( pOld->nOverflow ){ - nOverflow = pOld->nOverflow; - iOverflow = i + !leafData + pOld->aOvfl[0].idx; - } - isDivider = !leafData; - } + } + if( rc==SQLITE_OK && pgno<=sqlite3BitvecSize(pBt->pHasContent) ){ + rc = sqlite3BitvecSet(pBt->pHasContent, pgno); + } + return rc; +} - assert(nOverflow>0 || iOverflowaOvfl[0].idx==pOld->aOvfl[1].idx-1); - assert(nOverflow<3 || pOld->aOvfl[1].idx==pOld->aOvfl[2].idx-1); - if( i==iOverflow ){ - isDivider = 1; - if( (--nOverflow)>0 ){ - iOverflow++; - } - } +/* +** Query the BtShared.pHasContent vector. +** +** This function is called when a free-list leaf page is removed from the +** free-list for reuse. It returns false if it is safe to retrieve the +** page from the pager layer with the 'no-content' flag set. True otherwise. +*/ +static int btreeGetHasContent(BtShared *pBt, Pgno pgno){ + Bitvec *p = pBt->pHasContent; + return (p && (pgno>sqlite3BitvecSize(p) || sqlite3BitvecTest(p, pgno))); +} - if( i==cntNew[k] ){ - /* Cell i is the cell immediately following the last cell on new - ** sibling page k. If the siblings are not leaf pages of an - ** intkey b-tree, then cell i is a divider cell. */ - pNew = apNew[++k]; - if( !leafData ) continue; - } - assert( rc==SQLITE_OK ); - assert( jpHasContent); + pBt->pHasContent = 0; +} - /* If the cell was originally divider cell (and is not now) or - ** an overflow cell, or if the cell was located on a different sibling - ** page before the balancing, then the pointer map entries associated - ** with any child or overflow pages need to be updated. */ - if( isDivider || pOld->pgno!=pNew->pgno ){ - if( !leafCorrection ){ - rc = ptrmapPut(pBt, get4byte(apCell[i]), PTRMAP_BTREE, pNew->pgno); - } - if( szCell[i]>pNew->minLocal && rc==SQLITE_OK ){ - rc = ptrmapPutOvflPtr(pNew, apCell[i]); - } +/* +** Save the current cursor position in the variables BtCursor.nKey +** and BtCursor.pKey. The cursor's state is set to CURSOR_REQUIRESEEK. +** +** The caller must ensure that the cursor is valid (has eState==CURSOR_VALID) +** prior to calling this routine. +*/ +static int saveCursorPosition(BtCursor *pCur){ + int rc; + + assert( CURSOR_VALID==pCur->eState ); + assert( 0==pCur->pKey ); + assert( cursorHoldsMutex(pCur) ); + + rc = sqlite3BtreeKeySize(pCur, &pCur->nKey); + assert( rc==SQLITE_OK ); /* KeySize() cannot fail */ + + /* If this is an intKey table, then the above call to BtreeKeySize() + ** stores the integer key in pCur->nKey. In this case this value is + ** all that is required. Otherwise, if pCur is not open on an intKey + ** table, then malloc space for and store the pCur->nKey bytes of key + ** data. + */ + if( 0==pCur->apPage[0]->intKey ){ + void *pKey = sqlite3Malloc( (int)pCur->nKey ); + if( pKey ){ + rc = sqlite3BtreeKey(pCur, 0, (int)pCur->nKey, pKey); + if( rc==SQLITE_OK ){ + pCur->pKey = pKey; + }else{ + sqlite3_free(pKey); } + }else{ + rc = SQLITE_NOMEM; } + } + assert( !pCur->apPage[0]->intKey || !pCur->pKey ); - if( !leafCorrection ){ - for(i=0; rc==SQLITE_OK && iaData[8]), PTRMAP_BTREE, apNew[i]->pgno); - } + if( rc==SQLITE_OK ){ + int i; + for(i=0; i<=pCur->iPage; i++){ + releasePage(pCur->apPage[i]); + pCur->apPage[i] = 0; } + pCur->iPage = -1; + pCur->eState = CURSOR_REQUIRESEEK; + } -#if 0 - /* The ptrmapCheckPages() contains assert() statements that verify that - ** all pointer map pages are set correctly. This is helpful while - ** debugging. This is usually disabled because a corrupt database may - ** cause an assert() statement to fail. */ - ptrmapCheckPages(apNew, nNew); - ptrmapCheckPages(&pParent, 1); -#endif + invalidateOverflowCache(pCur); + return rc; +} + +/* +** Save the positions of all cursors (except pExcept) that are open on +** the table with root-page iRoot. Usually, this is called just before cursor +** pExcept is used to modify the table (BtreeDelete() or BtreeInsert()). +*/ +static int saveAllCursors(BtShared *pBt, Pgno iRoot, BtCursor *pExcept){ + BtCursor *p; + assert( sqlite3_mutex_held(pBt->mutex) ); + assert( pExcept==0 || pExcept->pBt==pBt ); + for(p=pBt->pCursor; p; p=p->pNext){ + if( p!=pExcept && (0==iRoot || p->pgnoRoot==iRoot) && + p->eState==CURSOR_VALID ){ + int rc = saveCursorPosition(p); + if( SQLITE_OK!=rc ){ + return rc; + } + } } + return SQLITE_OK; +} - assert( pParent->isInit ); - TRACE(("BALANCE: finished: old=%d new=%d cells=%d\n", - nOld, nNew, nCell)); +/* +** Clear the current cursor position. +*/ +SQLITE_PRIVATE void sqlite3BtreeClearCursor(BtCursor *pCur){ + assert( cursorHoldsMutex(pCur) ); + sqlite3_free(pCur->pKey); + pCur->pKey = 0; + pCur->eState = CURSOR_INVALID; +} - /* - ** Cleanup before returning. - */ -balance_cleanup: - sqlite3ScratchFree(apCell); - for(i=0; ipKeyInfo, aSpace, sizeof(aSpace), &pFree + ); + if( pIdxKey==0 ) return SQLITE_NOMEM; + sqlite3VdbeRecordUnpack(pCur->pKeyInfo, (int)nKey, pKey, pIdxKey); + }else{ + pIdxKey = 0; } - for(i=0; ipKeyInfo->db, pFree); } + return rc; +} +/* +** Restore the cursor to the position it was in (or as close to as possible) +** when saveCursorPosition() was called. Note that this call deletes the +** saved position info stored by saveCursorPosition(), so there can be +** at most one effective restoreCursorPosition() call after each +** saveCursorPosition(). +*/ +static int btreeRestoreCursorPosition(BtCursor *pCur){ + int rc; + assert( cursorHoldsMutex(pCur) ); + assert( pCur->eState>=CURSOR_REQUIRESEEK ); + if( pCur->eState==CURSOR_FAULT ){ + return pCur->skipNext; + } + pCur->eState = CURSOR_INVALID; + rc = btreeMoveto(pCur, pCur->pKey, pCur->nKey, 0, &pCur->skipNext); + if( rc==SQLITE_OK ){ + sqlite3_free(pCur->pKey); + pCur->pKey = 0; + assert( pCur->eState==CURSOR_VALID || pCur->eState==CURSOR_INVALID ); + } return rc; } +#define restoreCursorPosition(p) \ + (p->eState>=CURSOR_REQUIRESEEK ? \ + btreeRestoreCursorPosition(p) : \ + SQLITE_OK) /* -** This function is called when the root page of a b-tree structure is -** overfull (has one or more overflow pages). -** -** A new child page is allocated and the contents of the current root -** page, including overflow cells, are copied into the child. The root -** page is then overwritten to make it an empty page with the right-child -** pointer pointing to the new page. -** -** Before returning, all pointer-map entries corresponding to pages -** that the new child-page now contains pointers to are updated. The -** entry corresponding to the new right-child pointer of the root -** page is also updated. +** Determine whether or not a cursor has moved from the position it +** was last placed at. Cursors can move when the row they are pointing +** at is deleted out from under them. ** -** If successful, *ppChild is set to contain a reference to the child -** page and SQLITE_OK is returned. In this case the caller is required -** to call releasePage() on *ppChild exactly once. If an error occurs, -** an error code is returned and *ppChild is set to 0. +** This routine returns an error code if something goes wrong. The +** integer *pHasMoved is set to one if the cursor has moved and 0 if not. */ -static int balance_deeper(MemPage *pRoot, MemPage **ppChild){ - int rc; /* Return value from subprocedures */ - MemPage *pChild = 0; /* Pointer to a new child page */ - Pgno pgnoChild; /* Page number of the new child page */ - BtShared *pBt = pRoot->pBt; /* The BTree */ - - assert( pRoot->nOverflow>0 ); - assert( sqlite3_mutex_held(pBt->mutex) ); +SQLITE_PRIVATE int sqlite3BtreeCursorHasMoved(BtCursor *pCur, int *pHasMoved){ + int rc; - /* Make pRoot, the root page of the b-tree, writable. Allocate a new - ** page that will become the new right-child of pPage. Copy the contents - ** of the node stored on pRoot into the new child page. - */ - if( SQLITE_OK!=(rc = sqlite3PagerWrite(pRoot->pDbPage)) - || SQLITE_OK!=(rc = allocateBtreePage(pBt,&pChild,&pgnoChild,pRoot->pgno,0)) - || SQLITE_OK!=(rc = copyNodeContent(pRoot, pChild)) - || (ISAUTOVACUUM && - SQLITE_OK!=(rc = ptrmapPut(pBt, pgnoChild, PTRMAP_BTREE, pRoot->pgno))) - ){ - *ppChild = 0; - releasePage(pChild); + rc = restoreCursorPosition(pCur); + if( rc ){ + *pHasMoved = 1; return rc; } - assert( sqlite3PagerIswriteable(pChild->pDbPage) ); - assert( sqlite3PagerIswriteable(pRoot->pDbPage) ); - assert( pChild->nCell==pRoot->nCell ); - - TRACE(("BALANCE: copy root %d into %d\n", pRoot->pgno, pChild->pgno)); - - /* Copy the overflow cells from pRoot to pChild */ - memcpy(pChild->aOvfl, pRoot->aOvfl, pRoot->nOverflow*sizeof(pRoot->aOvfl[0])); - pChild->nOverflow = pRoot->nOverflow; - - /* Zero the contents of pRoot. Then install pChild as the right-child. */ - zeroPage(pRoot, pChild->aData[0] & ~PTF_LEAF); - put4byte(&pRoot->aData[pRoot->hdrOffset+8], pgnoChild); - - *ppChild = pChild; + if( pCur->eState!=CURSOR_VALID || pCur->skipNext!=0 ){ + *pHasMoved = 1; + }else{ + *pHasMoved = 0; + } return SQLITE_OK; } +#ifndef SQLITE_OMIT_AUTOVACUUM /* -** The page that pCur currently points to has just been modified in -** some way. This function figures out if this modification means the -** tree needs to be balanced, and if so calls the appropriate balancing -** routine. Balancing routines are: -** -** balance_quick() -** balance_deeper() -** balance_nonroot() +** Given a page number of a regular database page, return the page +** number for the pointer-map page that contains the entry for the +** input page number. +** +** Return 0 (not a valid page) for pgno==1 since there is +** no pointer map associated with page 1. The integrity_check logic +** requires that ptrmapPageno(*,1)!=1. */ -static int balance(BtCursor *pCur){ - int rc = SQLITE_OK; - const int nMin = pCur->pBt->usableSize * 2 / 3; - u8 aBalanceQuickSpace[13]; - u8 *pFree = 0; +static Pgno ptrmapPageno(BtShared *pBt, Pgno pgno){ + int nPagesPerMapPage; + Pgno iPtrMap, ret; + assert( sqlite3_mutex_held(pBt->mutex) ); + if( pgno<2 ) return 0; + nPagesPerMapPage = (pBt->usableSize/5)+1; + iPtrMap = (pgno-2)/nPagesPerMapPage; + ret = (iPtrMap*nPagesPerMapPage) + 2; + if( ret==PENDING_BYTE_PAGE(pBt) ){ + ret++; + } + return ret; +} - TESTONLY( int balance_quick_called = 0 ); - TESTONLY( int balance_deeper_called = 0 ); +/* +** Write an entry into the pointer map. +** +** This routine updates the pointer map entry for page number 'key' +** so that it maps to type 'eType' and parent page number 'pgno'. +** +** If *pRC is initially non-zero (non-SQLITE_OK) then this routine is +** a no-op. If an error occurs, the appropriate error code is written +** into *pRC. +*/ +static void ptrmapPut(BtShared *pBt, Pgno key, u8 eType, Pgno parent, int *pRC){ + DbPage *pDbPage; /* The pointer map page */ + u8 *pPtrmap; /* The pointer map data */ + Pgno iPtrmap; /* The pointer map page number */ + int offset; /* Offset in pointer map page */ + int rc; /* Return code from subfunctions */ - do { - int iPage = pCur->iPage; - MemPage *pPage = pCur->apPage[iPage]; + if( *pRC ) return; - if( iPage==0 ){ - if( pPage->nOverflow ){ - /* The root page of the b-tree is overfull. In this case call the - ** balance_deeper() function to create a new child for the root-page - ** and copy the current contents of the root-page to it. The - ** next iteration of the do-loop will balance the child page. - */ - assert( (balance_deeper_called++)==0 ); - rc = balance_deeper(pPage, &pCur->apPage[1]); - if( rc==SQLITE_OK ){ - pCur->iPage = 1; - pCur->aiIdx[0] = 0; - pCur->aiIdx[1] = 0; - assert( pCur->apPage[1]->nOverflow ); - } - }else{ - break; - } - }else if( pPage->nOverflow==0 && pPage->nFree<=nMin ){ - break; - }else{ - MemPage * const pParent = pCur->apPage[iPage-1]; - int const iIdx = pCur->aiIdx[iPage-1]; + assert( sqlite3_mutex_held(pBt->mutex) ); + /* The master-journal page number must never be used as a pointer map page */ + assert( 0==PTRMAP_ISPAGE(pBt, PENDING_BYTE_PAGE(pBt)) ); - rc = sqlite3PagerWrite(pParent->pDbPage); - if( rc==SQLITE_OK ){ -#ifndef SQLITE_OMIT_QUICKBALANCE - if( pPage->hasData - && pPage->nOverflow==1 - && pPage->aOvfl[0].idx==pPage->nCell - && pParent->pgno!=1 - && pParent->nCell==iIdx - ){ - /* Call balance_quick() to create a new sibling of pPage on which - ** to store the overflow cell. balance_quick() inserts a new cell - ** into pParent, which may cause pParent overflow. If this - ** happens, the next interation of the do-loop will balance pParent - ** use either balance_nonroot() or balance_deeper(). Until this - ** happens, the overflow cell is stored in the aBalanceQuickSpace[] - ** buffer. - ** - ** The purpose of the following assert() is to check that only a - ** single call to balance_quick() is made for each call to this - ** function. If this were not verified, a subtle bug involving reuse - ** of the aBalanceQuickSpace[] might sneak in. - */ - assert( (balance_quick_called++)==0 ); - rc = balance_quick(pParent, pPage, aBalanceQuickSpace); - }else -#endif - { - /* In this case, call balance_nonroot() to redistribute cells - ** between pPage and up to 2 of its sibling pages. This involves - ** modifying the contents of pParent, which may cause pParent to - ** become overfull or underfull. The next iteration of the do-loop - ** will balance the parent page to correct this. - ** - ** If the parent page becomes overfull, the overflow cell or cells - ** are stored in the pSpace buffer allocated immediately below. - ** A subsequent iteration of the do-loop will deal with this by - ** calling balance_nonroot() (balance_deeper() may be called first, - ** but it doesn't deal with overflow cells - just moves them to a - ** different page). Once this subsequent call to balance_nonroot() - ** has completed, it is safe to release the pSpace buffer used by - ** the previous call, as the overflow cell data will have been - ** copied either into the body of a database page or into the new - ** pSpace buffer passed to the latter call to balance_nonroot(). - */ - u8 *pSpace = sqlite3PageMalloc(pCur->pBt->pageSize); - rc = balance_nonroot(pParent, iIdx, pSpace, iPage==1); - if( pFree ){ - /* If pFree is not NULL, it points to the pSpace buffer used - ** by a previous call to balance_nonroot(). Its contents are - ** now stored either on real database pages or within the - ** new pSpace buffer, so it may be safely freed here. */ - sqlite3PageFree(pFree); - } + assert( pBt->autoVacuum ); + if( key==0 ){ + *pRC = SQLITE_CORRUPT_BKPT; + return; + } + iPtrmap = PTRMAP_PAGENO(pBt, key); + rc = sqlite3PagerGet(pBt->pPager, iPtrmap, &pDbPage); + if( rc!=SQLITE_OK ){ + *pRC = rc; + return; + } + offset = PTRMAP_PTROFFSET(iPtrmap, key); + if( offset<0 ){ + *pRC = SQLITE_CORRUPT_BKPT; + goto ptrmap_exit; + } + assert( offset <= (int)pBt->usableSize-5 ); + pPtrmap = (u8 *)sqlite3PagerGetData(pDbPage); - /* The pSpace buffer will be freed after the next call to - ** balance_nonroot(), or just before this function returns, whichever - ** comes first. */ - pFree = pSpace; - } - } + if( eType!=pPtrmap[offset] || get4byte(&pPtrmap[offset+1])!=parent ){ + TRACE(("PTRMAP_UPDATE: %d->(%d,%d)\n", key, eType, parent)); + *pRC= rc = sqlite3PagerWrite(pDbPage); + if( rc==SQLITE_OK ){ + pPtrmap[offset] = eType; + put4byte(&pPtrmap[offset+1], parent); + } + } - pPage->nOverflow = 0; +ptrmap_exit: + sqlite3PagerUnref(pDbPage); +} - /* The next iteration of the do-loop balances the parent page. */ - releasePage(pPage); - pCur->iPage--; - } - }while( rc==SQLITE_OK ); +/* +** Read an entry from the pointer map. +** +** This routine retrieves the pointer map entry for page 'key', writing +** the type and parent page number to *pEType and *pPgno respectively. +** An error code is returned if something goes wrong, otherwise SQLITE_OK. +*/ +static int ptrmapGet(BtShared *pBt, Pgno key, u8 *pEType, Pgno *pPgno){ + DbPage *pDbPage; /* The pointer map page */ + int iPtrmap; /* Pointer map page index */ + u8 *pPtrmap; /* Pointer map page data */ + int offset; /* Offset of entry in pointer map */ + int rc; - if( pFree ){ - sqlite3PageFree(pFree); + assert( sqlite3_mutex_held(pBt->mutex) ); + + iPtrmap = PTRMAP_PAGENO(pBt, key); + rc = sqlite3PagerGet(pBt->pPager, iPtrmap, &pDbPage); + if( rc!=0 ){ + return rc; } - return rc; + pPtrmap = (u8 *)sqlite3PagerGetData(pDbPage); + + offset = PTRMAP_PTROFFSET(iPtrmap, key); + if( offset<0 ){ + sqlite3PagerUnref(pDbPage); + return SQLITE_CORRUPT_BKPT; + } + assert( offset <= (int)pBt->usableSize-5 ); + assert( pEType!=0 ); + *pEType = pPtrmap[offset]; + if( pPgno ) *pPgno = get4byte(&pPtrmap[offset+1]); + + sqlite3PagerUnref(pDbPage); + if( *pEType<1 || *pEType>5 ) return SQLITE_CORRUPT_BKPT; + return SQLITE_OK; } +#else /* if defined SQLITE_OMIT_AUTOVACUUM */ + #define ptrmapPut(w,x,y,z,rc) + #define ptrmapGet(w,x,y,z) SQLITE_OK + #define ptrmapPutOvflPtr(x, y, rc) +#endif + /* -** This routine checks all cursors that point to table pgnoRoot. -** If any of those cursors were opened with wrFlag==0 in a different -** database connection (a database connection that shares the pager -** cache with the current connection) and that other connection -** is not in the ReadUncommmitted state, then this routine returns -** SQLITE_LOCKED. -** -** As well as cursors with wrFlag==0, cursors with -** isIncrblobHandle==1 are also considered 'read' cursors because -** incremental blob cursors are used for both reading and writing. -** -** When pgnoRoot is the root page of an intkey table, this function is also -** responsible for invalidating incremental blob cursors when the table row -** on which they are opened is deleted or modified. Cursors are invalidated -** according to the following rules: -** -** 1) When BtreeClearTable() is called to completely delete the contents -** of a B-Tree table, pExclude is set to zero and parameter iRow is -** set to non-zero. In this case all incremental blob cursors open -** on the table rooted at pgnoRoot are invalidated. -** -** 2) When BtreeInsert(), BtreeDelete() or BtreePutData() is called to -** modify a table row via an SQL statement, pExclude is set to the -** write cursor used to do the modification and parameter iRow is set -** to the integer row id of the B-Tree entry being modified. Unless -** pExclude is itself an incremental blob cursor, then all incremental -** blob cursors open on row iRow of the B-Tree are invalidated. +** Given a btree page and a cell index (0 means the first cell on +** the page, 1 means the second cell, and so forth) return a pointer +** to the cell content. ** -** 3) If both pExclude and iRow are set to zero, no incremental blob -** cursors are invalidated. +** This routine works only for pages that do not contain overflow cells. */ -static int checkForReadConflicts( - Btree *pBtree, /* The database file to check */ - Pgno pgnoRoot, /* Look for read cursors on this btree */ - BtCursor *pExclude, /* Ignore this cursor */ - i64 iRow /* The rowid that might be changing */ -){ - BtCursor *p; - BtShared *pBt = pBtree->pBt; - sqlite3 *db = pBtree->db; - assert( sqlite3BtreeHoldsMutex(pBtree) ); - for(p=pBt->pCursor; p; p=p->pNext){ - if( p==pExclude ) continue; - if( p->pgnoRoot!=pgnoRoot ) continue; -#ifndef SQLITE_OMIT_INCRBLOB - if( p->isIncrblobHandle && ( - (!pExclude && iRow) - || (pExclude && !pExclude->isIncrblobHandle && p->info.nKey==iRow) - )){ - p->eState = CURSOR_INVALID; - } -#endif - if( p->eState!=CURSOR_VALID ) continue; - if( p->wrFlag==0 -#ifndef SQLITE_OMIT_INCRBLOB - || p->isIncrblobHandle -#endif - ){ - sqlite3 *dbOther = p->pBtree->db; - assert(dbOther); - if( dbOther!=db && (dbOther->flags & SQLITE_ReadUncommitted)==0 ){ - sqlite3ConnectionBlocked(db, dbOther); - return SQLITE_LOCKED_SHAREDCACHE; +#define findCell(P,I) \ + ((P)->aData + ((P)->maskPage & get2byte(&(P)->aCellIdx[2*(I)]))) +#define findCellv2(D,M,O,I) (D+(M&get2byte(D+(O+2*(I))))) + + +/* +** This a more complex version of findCell() that works for +** pages that do contain overflow cells. +*/ +static u8 *findOverflowCell(MemPage *pPage, int iCell){ + int i; + assert( sqlite3_mutex_held(pPage->pBt->mutex) ); + for(i=pPage->nOverflow-1; i>=0; i--){ + int k; + k = pPage->aiOvfl[i]; + if( k<=iCell ){ + if( k==iCell ){ + return pPage->apOvfl[i]; } + iCell--; } } - return SQLITE_OK; + return findCell(pPage, iCell); } /* -** Insert a new record into the BTree. The key is given by (pKey,nKey) -** and the data is given by (pData,nData). The cursor is used only to -** define what table the record should be inserted into. The cursor -** is left pointing at a random location. -** -** For an INTKEY table, only the nKey value of the key is used. pKey is -** ignored. For a ZERODATA table, the pData and nData are both ignored. -** -** If the seekResult parameter is non-zero, then a successful call to -** sqlite3BtreeMoveto() to seek cursor pCur to (pKey, nKey) has already -** been performed. seekResult is the search result returned (a negative -** number if pCur points at an entry that is smaller than (pKey, nKey), or -** a positive value if pCur points at an etry that is larger than -** (pKey, nKey)). +** Parse a cell content block and fill in the CellInfo structure. There +** are two versions of this function. btreeParseCell() takes a +** cell index as the second argument and btreeParseCellPtr() +** takes a pointer to the body of the cell as its second argument. ** -** If the seekResult parameter is 0, then cursor pCur may point to any -** entry or to no entry at all. In this case this function has to seek -** the cursor before the new key can be inserted. +** Within this file, the parseCell() macro can be called instead of +** btreeParseCellPtr(). Using some compilers, this will be faster. */ -SQLITE_PRIVATE int sqlite3BtreeInsert( - BtCursor *pCur, /* Insert data into the table of this cursor */ - const void *pKey, i64 nKey, /* The key of the new record */ - const void *pData, int nData, /* The data of the new record */ - int nZero, /* Number of extra 0 bytes to append to data */ - int appendBias, /* True if this is likely an append */ - int seekResult /* Result of prior sqlite3BtreeMoveto() call */ +static void btreeParseCellPtr( + MemPage *pPage, /* Page containing the cell */ + u8 *pCell, /* Pointer to the cell text. */ + CellInfo *pInfo /* Fill in this structure */ ){ - int rc; - int loc = seekResult; - int szNew; - int idx; - MemPage *pPage; - Btree *p = pCur->pBtree; - BtShared *pBt = p->pBt; - unsigned char *oldCell; - unsigned char *newCell = 0; - - assert( cursorHoldsMutex(pCur) ); - assert( pBt->inTransaction==TRANS_WRITE ); - assert( !pBt->readOnly ); - assert( pCur->wrFlag ); - rc = checkForReadConflicts(pCur->pBtree, pCur->pgnoRoot, pCur, nKey); - if( rc ){ - /* The table pCur points to has a read lock */ - assert( rc==SQLITE_LOCKED_SHAREDCACHE ); - return rc; - } - if( pCur->eState==CURSOR_FAULT ){ - return pCur->skip; - } + u16 n; /* Number bytes in cell content header */ + u32 nPayload; /* Number of bytes of cell payload */ - /* Save the positions of any other cursors open on this table. - ** - ** In some cases, the call to sqlite3BtreeMoveto() below is a no-op. For - ** example, when inserting data into a table with auto-generated integer - ** keys, the VDBE layer invokes sqlite3BtreeLast() to figure out the - ** integer key to use. It then calls this function to actually insert the - ** data into the intkey B-Tree. In this case sqlite3BtreeMoveto() recognizes - ** that the cursor is already where it needs to be and returns without - ** doing any work. To avoid thwarting these optimizations, it is important - ** not to clear the cursor here. - */ - if( - SQLITE_OK!=(rc = saveAllCursors(pBt, pCur->pgnoRoot, pCur)) || (!loc && - SQLITE_OK!=(rc = sqlite3BtreeMoveto(pCur, pKey, nKey, appendBias, &loc)) - )){ - return rc; - } - assert( pCur->eState==CURSOR_VALID || (pCur->eState==CURSOR_INVALID && loc) ); + assert( sqlite3_mutex_held(pPage->pBt->mutex) ); - pPage = pCur->apPage[pCur->iPage]; - assert( pPage->intKey || nKey>=0 ); - assert( pPage->leaf || !pPage->intKey ); - TRACE(("INSERT: table=%d nkey=%lld ndata=%d page=%d %s\n", - pCur->pgnoRoot, nKey, nData, pPage->pgno, - loc==0 ? "overwrite" : "new entry")); - assert( pPage->isInit ); - allocateTempSpace(pBt); - newCell = pBt->pTmpSpace; - if( newCell==0 ) return SQLITE_NOMEM; - rc = fillInCell(pPage, newCell, pKey, nKey, pData, nData, nZero, &szNew); - if( rc ) goto end_insert; - assert( szNew==cellSizePtr(pPage, newCell) ); - assert( szNew<=MX_CELL_SIZE(pBt) ); - idx = pCur->aiIdx[pCur->iPage]; - if( loc==0 ){ - u16 szOld; - assert( idxnCell ); - rc = sqlite3PagerWrite(pPage->pDbPage); - if( rc ){ - goto end_insert; - } - oldCell = findCell(pPage, idx); - if( !pPage->leaf ){ - memcpy(newCell, oldCell, 4); - } - szOld = cellSizePtr(pPage, oldCell); - rc = clearCell(pPage, oldCell); - if( rc ) goto end_insert; - rc = dropCell(pPage, idx, szOld); - if( rc!=SQLITE_OK ) { - goto end_insert; + pInfo->pCell = pCell; + assert( pPage->leaf==0 || pPage->leaf==1 ); + n = pPage->childPtrSize; + assert( n==4-4*pPage->leaf ); + if( pPage->intKey ){ + if( pPage->hasData ){ + n += getVarint32(&pCell[n], nPayload); + }else{ + nPayload = 0; } - }else if( loc<0 && pPage->nCell>0 ){ - assert( pPage->leaf ); - idx = ++pCur->aiIdx[pCur->iPage]; + n += getVarint(&pCell[n], (u64*)&pInfo->nKey); + pInfo->nData = nPayload; }else{ - assert( pPage->leaf ); + pInfo->nData = 0; + n += getVarint32(&pCell[n], nPayload); + pInfo->nKey = nPayload; } - rc = insertCell(pPage, idx, newCell, szNew, 0, 0); - assert( rc!=SQLITE_OK || pPage->nCell>0 || pPage->nOverflow>0 ); - - /* If no error has occured and pPage has an overflow cell, call balance() - ** to redistribute the cells within the tree. Since balance() may move - ** the cursor, zero the BtCursor.info.nSize and BtCursor.validNKey - ** variables. - ** - ** Previous versions of SQLite called moveToRoot() to move the cursor - ** back to the root page as balance() used to invalidate the contents - ** of BtCursor.apPage[] and BtCursor.aiIdx[]. Instead of doing that, - ** set the cursor state to "invalid". This makes common insert operations - ** slightly faster. - ** - ** There is a subtle but important optimization here too. When inserting - ** multiple records into an intkey b-tree using a single cursor (as can - ** happen while processing an "INSERT INTO ... SELECT" statement), it - ** is advantageous to leave the cursor pointing to the last entry in - ** the b-tree if possible. If the cursor is left pointing to the last - ** entry in the table, and the next row inserted has an integer key - ** larger than the largest existing key, it is possible to insert the - ** row without seeking the cursor. This can be a big performance boost. - */ - pCur->info.nSize = 0; - pCur->validNKey = 0; - if( rc==SQLITE_OK && pPage->nOverflow ){ - rc = balance(pCur); + pInfo->nPayload = nPayload; + pInfo->nHeader = n; + testcase( nPayload==pPage->maxLocal ); + testcase( nPayload==pPage->maxLocal+1 ); + if( likely(nPayload<=pPage->maxLocal) ){ + /* This is the (easy) common case where the entire payload fits + ** on the local page. No overflow is required. + */ + if( (pInfo->nSize = (u16)(n+nPayload))<4 ) pInfo->nSize = 4; + pInfo->nLocal = (u16)nPayload; + pInfo->iOverflow = 0; + }else{ + /* If the payload will not fit completely on the local page, we have + ** to decide how much to store locally and how much to spill onto + ** overflow pages. The strategy is to minimize the amount of unused + ** space on overflow pages while keeping the amount of local storage + ** in between minLocal and maxLocal. + ** + ** Warning: changing the way overflow payload is distributed in any + ** way will result in an incompatible file format. + */ + int minLocal; /* Minimum amount of payload held locally */ + int maxLocal; /* Maximum amount of payload held locally */ + int surplus; /* Overflow payload available for local storage */ - /* Must make sure nOverflow is reset to zero even if the balance() - ** fails. Internal data structure corruption will result otherwise. - ** Also, set the cursor state to invalid. This stops saveCursorPosition() - ** from trying to save the current position of the cursor. */ - pCur->apPage[pCur->iPage]->nOverflow = 0; - pCur->eState = CURSOR_INVALID; + minLocal = pPage->minLocal; + maxLocal = pPage->maxLocal; + surplus = minLocal + (nPayload - minLocal)%(pPage->pBt->usableSize - 4); + testcase( surplus==maxLocal ); + testcase( surplus==maxLocal+1 ); + if( surplus <= maxLocal ){ + pInfo->nLocal = (u16)surplus; + }else{ + pInfo->nLocal = (u16)minLocal; + } + pInfo->iOverflow = (u16)(pInfo->nLocal + n); + pInfo->nSize = pInfo->iOverflow + 4; } - assert( pCur->apPage[pCur->iPage]->nOverflow==0 ); - -end_insert: - return rc; +} +#define parseCell(pPage, iCell, pInfo) \ + btreeParseCellPtr((pPage), findCell((pPage), (iCell)), (pInfo)) +static void btreeParseCell( + MemPage *pPage, /* Page containing the cell */ + int iCell, /* The cell index. First cell is 0 */ + CellInfo *pInfo /* Fill in this structure */ +){ + parseCell(pPage, iCell, pInfo); } /* -** Delete the entry that the cursor is pointing to. The cursor -** is left pointing at a arbitrary location. +** Compute the total number of bytes that a Cell needs in the cell +** data area of the btree-page. The return number includes the cell +** data header and the local payload, but not any overflow page or +** the space used by the cell pointer. */ -SQLITE_PRIVATE int sqlite3BtreeDelete(BtCursor *pCur){ - Btree *p = pCur->pBtree; - BtShared *pBt = p->pBt; - int rc; /* Return code */ - MemPage *pPage; /* Page to delete cell from */ - unsigned char *pCell; /* Pointer to cell to delete */ - int iCellIdx; /* Index of cell to delete */ - int iCellDepth; /* Depth of node containing pCell */ +static u16 cellSizePtr(MemPage *pPage, u8 *pCell){ + u8 *pIter = &pCell[pPage->childPtrSize]; + u32 nSize; - assert( cursorHoldsMutex(pCur) ); - assert( pBt->inTransaction==TRANS_WRITE ); - assert( !pBt->readOnly ); - assert( pCur->wrFlag ); - if( NEVER(pCur->aiIdx[pCur->iPage]>=pCur->apPage[pCur->iPage]->nCell) - || NEVER(pCur->eState!=CURSOR_VALID) - ){ - return SQLITE_ERROR; /* Something has gone awry. */ - } +#ifdef SQLITE_DEBUG + /* The value returned by this function should always be the same as + ** the (CellInfo.nSize) value found by doing a full parse of the + ** cell. If SQLITE_DEBUG is defined, an assert() at the bottom of + ** this function verifies that this invariant is not violated. */ + CellInfo debuginfo; + btreeParseCellPtr(pPage, pCell, &debuginfo); +#endif - rc = checkForReadConflicts(p, pCur->pgnoRoot, pCur, pCur->info.nKey); - if( rc!=SQLITE_OK ){ - assert( rc==SQLITE_LOCKED_SHAREDCACHE ); - return rc; /* The table pCur points to has a read lock */ - } + if( pPage->intKey ){ + u8 *pEnd; + if( pPage->hasData ){ + pIter += getVarint32(pIter, nSize); + }else{ + nSize = 0; + } - iCellDepth = pCur->iPage; - iCellIdx = pCur->aiIdx[iCellDepth]; - pPage = pCur->apPage[iCellDepth]; - pCell = findCell(pPage, iCellIdx); + /* pIter now points at the 64-bit integer key value, a variable length + ** integer. The following block moves pIter to point at the first byte + ** past the end of the key value. */ + pEnd = &pIter[9]; + while( (*pIter++)&0x80 && pIterleaf ){ - int notUsed; - if( SQLITE_OK!=(rc = sqlite3BtreePrevious(pCur, ¬Used)) ){ - return rc; + testcase( nSize==pPage->maxLocal ); + testcase( nSize==pPage->maxLocal+1 ); + if( nSize>pPage->maxLocal ){ + int minLocal = pPage->minLocal; + nSize = minLocal + (nSize - minLocal) % (pPage->pBt->usableSize - 4); + testcase( nSize==pPage->maxLocal ); + testcase( nSize==pPage->maxLocal+1 ); + if( nSize>pPage->maxLocal ){ + nSize = minLocal; } + nSize += 4; } + nSize += (u32)(pIter - pCell); - /* Save the positions of any other cursors open on this table before - ** making any modifications. Make the page containing the entry to be - ** deleted writable. Then free any overflow pages associated with the - ** entry and finally remove the cell itself from within the page. */ - if( SQLITE_OK!=(rc = saveAllCursors(pBt, pCur->pgnoRoot, pCur)) - || SQLITE_OK!=(rc = sqlite3PagerWrite(pPage->pDbPage)) - || SQLITE_OK!=(rc = clearCell(pPage, pCell)) - || SQLITE_OK!=(rc = dropCell(pPage, iCellIdx, cellSizePtr(pPage, pCell))) - ){ - return rc; + /* The minimum size of any cell is 4 bytes. */ + if( nSize<4 ){ + nSize = 4; } - /* If the cell deleted was not located on a leaf page, then the cursor - ** is currently pointing to the largest entry in the sub-tree headed - ** by the child-page of the cell that was just deleted from an internal - ** node. The cell from the leaf node needs to be moved to the internal - ** node to replace the deleted cell. */ - if( !pPage->leaf ){ - MemPage *pLeaf = pCur->apPage[pCur->iPage]; - int nCell; - Pgno n = pCur->apPage[iCellDepth+1]->pgno; - unsigned char *pTmp; - - pCell = findCell(pLeaf, pLeaf->nCell-1); - nCell = cellSizePtr(pLeaf, pCell); - assert( MX_CELL_SIZE(pBt)>=nCell ); + assert( nSize==debuginfo.nSize ); + return (u16)nSize; +} - allocateTempSpace(pBt); - pTmp = pBt->pTmpSpace; +#ifdef SQLITE_DEBUG +/* This variation on cellSizePtr() is used inside of assert() statements +** only. */ +static u16 cellSize(MemPage *pPage, int iCell){ + return cellSizePtr(pPage, findCell(pPage, iCell)); +} +#endif - if( SQLITE_OK!=(rc = sqlite3PagerWrite(pLeaf->pDbPage)) - || SQLITE_OK!=(rc = insertCell(pPage, iCellIdx, pCell-4, nCell+4, pTmp, n)) - || SQLITE_OK!=(rc = dropCell(pLeaf, pLeaf->nCell-1, nCell)) - ){ - return rc; - } - } - - /* Balance the tree. If the entry deleted was located on a leaf page, - ** then the cursor still points to that page. In this case the first - ** call to balance() repairs the tree, and the if(...) condition is - ** never true. - ** - ** Otherwise, if the entry deleted was on an internal node page, then - ** pCur is pointing to the leaf page from which a cell was removed to - ** replace the cell deleted from the internal node. This is slightly - ** tricky as the leaf node may be underfull, and the internal node may - ** be either under or overfull. In this case run the balancing algorithm - ** on the leaf node first. If the balance proceeds far enough up the - ** tree that we can be sure that any problem in the internal node has - ** been corrected, so be it. Otherwise, after balancing the leaf node, - ** walk the cursor up the tree to the internal node and balance it as - ** well. */ - rc = balance(pCur); - if( rc==SQLITE_OK && pCur->iPage>iCellDepth ){ - while( pCur->iPage>iCellDepth ){ - releasePage(pCur->apPage[pCur->iPage--]); - } - rc = balance(pCur); - } - - if( rc==SQLITE_OK ){ - moveToRoot(pCur); +#ifndef SQLITE_OMIT_AUTOVACUUM +/* +** If the cell pCell, part of page pPage contains a pointer +** to an overflow page, insert an entry into the pointer-map +** for the overflow page. +*/ +static void ptrmapPutOvflPtr(MemPage *pPage, u8 *pCell, int *pRC){ + CellInfo info; + if( *pRC ) return; + assert( pCell!=0 ); + btreeParseCellPtr(pPage, pCell, &info); + assert( (info.nData+(pPage->intKey?0:info.nKey))==info.nPayload ); + if( info.iOverflow ){ + Pgno ovfl = get4byte(&pCell[info.iOverflow]); + ptrmapPut(pPage->pBt, ovfl, PTRMAP_OVERFLOW1, pPage->pgno, pRC); } - return rc; } +#endif + /* -** Create a new BTree table. Write into *piTable the page -** number for the root page of the new table. -** -** The type of type is determined by the flags parameter. Only the -** following values of flags are currently in use. Other values for -** flags might not work: -** -** BTREE_INTKEY|BTREE_LEAFDATA Used for SQL tables with rowid keys -** BTREE_ZERODATA Used for SQL indices +** Defragment the page given. All Cells are moved to the +** end of the page and all free space is collected into one +** big FreeBlk that occurs in between the header and cell +** pointer array and the cell content area. */ -static int btreeCreateTable(Btree *p, int *piTable, int flags){ - BtShared *pBt = p->pBt; - MemPage *pRoot; - Pgno pgnoRoot; - int rc; - - assert( sqlite3BtreeHoldsMutex(p) ); - assert( pBt->inTransaction==TRANS_WRITE ); - assert( !pBt->readOnly ); - -#ifdef SQLITE_OMIT_AUTOVACUUM - rc = allocateBtreePage(pBt, &pRoot, &pgnoRoot, 1, 0); - if( rc ){ - return rc; - } -#else - if( pBt->autoVacuum ){ - Pgno pgnoMove; /* Move a page here to make room for the root-page */ - MemPage *pPageMove; /* The page to move to. */ +static int defragmentPage(MemPage *pPage){ + int i; /* Loop counter */ + int pc; /* Address of a i-th cell */ + int hdr; /* Offset to the page header */ + int size; /* Size of a cell */ + int usableSize; /* Number of usable bytes on a page */ + int cellOffset; /* Offset to the cell pointer array */ + int cbrk; /* Offset to the cell content area */ + int nCell; /* Number of cells on the page */ + unsigned char *data; /* The page data */ + unsigned char *temp; /* Temp area for cell content */ + int iCellFirst; /* First allowable cell index */ + int iCellLast; /* Last possible cell index */ - /* Creating a new table may probably require moving an existing database - ** to make room for the new tables root page. In case this page turns - ** out to be an overflow page, delete all overflow page-map caches - ** held by open cursors. - */ - invalidateAllOverflowCache(pBt); - /* Read the value of meta[3] from the database to determine where the - ** root page of the new table should go. meta[3] is the largest root-page - ** created so far, so the new root-page is (meta[3]+1). + assert( sqlite3PagerIswriteable(pPage->pDbPage) ); + assert( pPage->pBt!=0 ); + assert( pPage->pBt->usableSize <= SQLITE_MAX_PAGE_SIZE ); + assert( pPage->nOverflow==0 ); + assert( sqlite3_mutex_held(pPage->pBt->mutex) ); + temp = sqlite3PagerTempSpace(pPage->pBt->pPager); + data = pPage->aData; + hdr = pPage->hdrOffset; + cellOffset = pPage->cellOffset; + nCell = pPage->nCell; + assert( nCell==get2byte(&data[hdr+3]) ); + usableSize = pPage->pBt->usableSize; + cbrk = get2byte(&data[hdr+5]); + memcpy(&temp[cbrk], &data[cbrk], usableSize - cbrk); + cbrk = usableSize; + iCellFirst = cellOffset + 2*nCell; + iCellLast = usableSize - 4; + for(i=0; iiCellLast ){ + return SQLITE_CORRUPT_BKPT; } - pgnoRoot++; - - /* The new root-page may not be allocated on a pointer-map page, or the - ** PENDING_BYTE page. - */ - while( pgnoRoot==PTRMAP_PAGENO(pBt, pgnoRoot) || - pgnoRoot==PENDING_BYTE_PAGE(pBt) ){ - pgnoRoot++; +#endif + assert( pc>=iCellFirst && pc<=iCellLast ); + size = cellSizePtr(pPage, &temp[pc]); + cbrk -= size; +#if defined(SQLITE_ENABLE_OVERSIZE_CELL_CHECK) + if( cbrk=3 ); - - /* Allocate a page. The page that currently resides at pgnoRoot will - ** be moved to the allocated page (unless the allocated page happens - ** to reside at pgnoRoot). - */ - rc = allocateBtreePage(pBt, &pPageMove, &pgnoMove, pgnoRoot, 1); - if( rc!=SQLITE_OK ){ - return rc; +#else + if( cbrkusableSize ){ + return SQLITE_CORRUPT_BKPT; } +#endif + assert( cbrk+size<=usableSize && cbrk>=iCellFirst ); + testcase( cbrk+size==usableSize ); + testcase( pc+size==usableSize ); + memcpy(&data[cbrk], &temp[pc], size); + put2byte(pAddr, cbrk); + } + assert( cbrk>=iCellFirst ); + put2byte(&data[hdr+5], cbrk); + data[hdr+1] = 0; + data[hdr+2] = 0; + data[hdr+7] = 0; + memset(&data[iCellFirst], 0, cbrk-iCellFirst); + assert( sqlite3PagerIswriteable(pPage->pDbPage) ); + if( cbrk-iCellFirst!=pPage->nFree ){ + return SQLITE_CORRUPT_BKPT; + } + return SQLITE_OK; +} - if( pgnoMove!=pgnoRoot ){ - /* pgnoRoot is the page that will be used for the root-page of - ** the new table (assuming an error did not occur). But we were - ** allocated pgnoMove. If required (i.e. if it was not allocated - ** by extending the file), the current page at position pgnoMove - ** is already journaled. - */ - u8 eType; - Pgno iPtrPage; - - releasePage(pPageMove); +/* +** Allocate nByte bytes of space from within the B-Tree page passed +** as the first argument. Write into *pIdx the index into pPage->aData[] +** of the first byte of allocated space. Return either SQLITE_OK or +** an error code (usually SQLITE_CORRUPT). +** +** The caller guarantees that there is sufficient space to make the +** allocation. This routine might need to defragment in order to bring +** all the space together, however. This routine will avoid using +** the first two bytes past the cell pointer area since presumably this +** allocation is being made in order to insert a new cell, so we will +** also end up needing a new cell pointer. +*/ +static int allocateSpace(MemPage *pPage, int nByte, int *pIdx){ + const int hdr = pPage->hdrOffset; /* Local cache of pPage->hdrOffset */ + u8 * const data = pPage->aData; /* Local cache of pPage->aData */ + int nFrag; /* Number of fragmented bytes on pPage */ + int top; /* First byte of cell content area */ + int gap; /* First byte of gap between cell pointers and cell content */ + int rc; /* Integer return code */ + int usableSize; /* Usable size of the page */ + + assert( sqlite3PagerIswriteable(pPage->pDbPage) ); + assert( pPage->pBt ); + assert( sqlite3_mutex_held(pPage->pBt->mutex) ); + assert( nByte>=0 ); /* Minimum cell size is 4 */ + assert( pPage->nFree>=nByte ); + assert( pPage->nOverflow==0 ); + usableSize = pPage->pBt->usableSize; + assert( nByte < usableSize-8 ); - /* Move the page currently at pgnoRoot to pgnoMove. */ - rc = sqlite3BtreeGetPage(pBt, pgnoRoot, &pRoot, 0); - if( rc!=SQLITE_OK ){ - return rc; - } - rc = ptrmapGet(pBt, pgnoRoot, &eType, &iPtrPage); - if( eType==PTRMAP_ROOTPAGE || eType==PTRMAP_FREEPAGE ){ - rc = SQLITE_CORRUPT_BKPT; - } - if( rc!=SQLITE_OK ){ - releasePage(pRoot); - return rc; - } - assert( eType!=PTRMAP_ROOTPAGE ); - assert( eType!=PTRMAP_FREEPAGE ); - rc = relocatePage(pBt, pRoot, eType, iPtrPage, pgnoMove, 0); - releasePage(pRoot); + nFrag = data[hdr+7]; + assert( pPage->cellOffset == hdr + 12 - 4*pPage->leaf ); + gap = pPage->cellOffset + 2*pPage->nCell; + top = get2byteNotZero(&data[hdr+5]); + if( gap>top ) return SQLITE_CORRUPT_BKPT; + testcase( gap+2==top ); + testcase( gap+1==top ); + testcase( gap==top ); - /* Obtain the page at pgnoRoot */ - if( rc!=SQLITE_OK ){ - return rc; - } - rc = sqlite3BtreeGetPage(pBt, pgnoRoot, &pRoot, 0); - if( rc!=SQLITE_OK ){ - return rc; + if( nFrag>=60 ){ + /* Always defragment highly fragmented pages */ + rc = defragmentPage(pPage); + if( rc ) return rc; + top = get2byteNotZero(&data[hdr+5]); + }else if( gap+2<=top ){ + /* Search the freelist looking for a free slot big enough to satisfy + ** the request. The allocation is made from the first free slot in + ** the list that is large enough to accomadate it. + */ + int pc, addr; + for(addr=hdr+1; (pc = get2byte(&data[addr]))>0; addr=pc){ + int size; /* Size of the free slot */ + if( pc>usableSize-4 || pcpDbPage); - if( rc!=SQLITE_OK ){ - releasePage(pRoot); - return rc; + size = get2byte(&data[pc+2]); + if( size>=nByte ){ + int x = size - nByte; + testcase( x==4 ); + testcase( x==3 ); + if( x<4 ){ + /* Remove the slot from the free-list. Update the number of + ** fragmented bytes within the page. */ + memcpy(&data[addr], &data[pc], 2); + data[hdr+7] = (u8)(nFrag + x); + }else if( size+pc > usableSize ){ + return SQLITE_CORRUPT_BKPT; + }else{ + /* The slot remains on the free-list. Reduce its size to account + ** for the portion used by the new allocation. */ + put2byte(&data[pc+2], x); + } + *pIdx = pc + x; + return SQLITE_OK; } - }else{ - pRoot = pPageMove; - } - - /* Update the pointer-map and meta-data with the new root-page number. */ - rc = ptrmapPut(pBt, pgnoRoot, PTRMAP_ROOTPAGE, 0); - if( rc ){ - releasePage(pRoot); - return rc; - } - rc = sqlite3BtreeUpdateMeta(p, 4, pgnoRoot); - if( rc ){ - releasePage(pRoot); - return rc; } + } - }else{ - rc = allocateBtreePage(pBt, &pRoot, &pgnoRoot, 1, 0); + /* Check to make sure there is enough space in the gap to satisfy + ** the allocation. If not, defragment. + */ + testcase( gap+2+nByte==top ); + if( gap+2+nByte>top ){ + rc = defragmentPage(pPage); if( rc ) return rc; + top = get2byteNotZero(&data[hdr+5]); + assert( gap+nByte<=top ); } -#endif - assert( sqlite3PagerIswriteable(pRoot->pDbPage) ); - zeroPage(pRoot, flags | PTF_LEAF); - sqlite3PagerUnref(pRoot->pDbPage); - *piTable = (int)pgnoRoot; + + + /* Allocate memory from the gap in between the cell pointer array + ** and the cell content area. The btreeInitPage() call has already + ** validated the freelist. Given that the freelist is valid, there + ** is no way that the allocation can extend off the end of the page. + ** The assert() below verifies the previous sentence. + */ + top -= nByte; + put2byte(&data[hdr+5], top); + assert( top+nByte <= (int)pPage->pBt->usableSize ); + *pIdx = top; return SQLITE_OK; } -SQLITE_PRIVATE int sqlite3BtreeCreateTable(Btree *p, int *piTable, int flags){ - int rc; - sqlite3BtreeEnter(p); - rc = btreeCreateTable(p, piTable, flags); - sqlite3BtreeLeave(p); - return rc; -} /* -** Erase the given database page and all its children. Return -** the page to the freelist. +** Return a section of the pPage->aData to the freelist. +** The first byte of the new free block is pPage->aDisk[start] +** and the size of the block is "size" bytes. +** +** Most of the effort here is involved in coalesing adjacent +** free blocks into a single big free block. */ -static int clearDatabasePage( - BtShared *pBt, /* The BTree that contains the table */ - Pgno pgno, /* Page number to clear */ - int freePageFlag, /* Deallocate page if true */ - int *pnChange -){ - MemPage *pPage = 0; - int rc; - unsigned char *pCell; - int i; +static int freeSpace(MemPage *pPage, int start, int size){ + int addr, pbegin, hdr; + int iLast; /* Largest possible freeblock offset */ + unsigned char *data = pPage->aData; - assert( sqlite3_mutex_held(pBt->mutex) ); - if( pgno>pagerPagecount(pBt) ){ - return SQLITE_CORRUPT_BKPT; + assert( pPage->pBt!=0 ); + assert( sqlite3PagerIswriteable(pPage->pDbPage) ); + assert( start>=pPage->hdrOffset+6+pPage->childPtrSize ); + assert( (start + size) <= (int)pPage->pBt->usableSize ); + assert( sqlite3_mutex_held(pPage->pBt->mutex) ); + assert( size>=0 ); /* Minimum cell size is 4 */ + + if( pPage->pBt->btsFlags & BTS_SECURE_DELETE ){ + /* Overwrite deleted information with zeros when the secure_delete + ** option is enabled */ + memset(&data[start], 0, size); } - rc = getAndInitPage(pBt, pgno, &pPage); - if( rc ) goto cleardatabasepage_out; - for(i=0; inCell; i++){ - pCell = findCell(pPage, i); - if( !pPage->leaf ){ - rc = clearDatabasePage(pBt, get4byte(pCell), 1, pnChange); - if( rc ) goto cleardatabasepage_out; + /* Add the space back into the linked list of freeblocks. Note that + ** even though the freeblock list was checked by btreeInitPage(), + ** btreeInitPage() did not detect overlapping cells or + ** freeblocks that overlapped cells. Nor does it detect when the + ** cell content area exceeds the value in the page header. If these + ** situations arise, then subsequent insert operations might corrupt + ** the freelist. So we do need to check for corruption while scanning + ** the freelist. + */ + hdr = pPage->hdrOffset; + addr = hdr + 1; + iLast = pPage->pBt->usableSize - 4; + assert( start<=iLast ); + while( (pbegin = get2byte(&data[addr]))0 ){ + if( pbeginleaf ){ - rc = clearDatabasePage(pBt, get4byte(&pPage->aData[8]), 1, pnChange); - if( rc ) goto cleardatabasepage_out; - }else if( pnChange ){ - assert( pPage->intKey ); - *pnChange += pPage->nCell; + if( pbegin>iLast ){ + return SQLITE_CORRUPT_BKPT; } - if( freePageFlag ){ - rc = freePage(pPage); - }else if( (rc = sqlite3PagerWrite(pPage->pDbPage))==0 ){ - zeroPage(pPage, pPage->aData[0] | PTF_LEAF); + assert( pbegin>addr || pbegin==0 ); + put2byte(&data[addr], start); + put2byte(&data[start], pbegin); + put2byte(&data[start+2], size); + pPage->nFree = pPage->nFree + (u16)size; + + /* Coalesce adjacent free blocks */ + addr = hdr + 1; + while( (pbegin = get2byte(&data[addr]))>0 ){ + int pnext, psize, x; + assert( pbegin>addr ); + assert( pbegin <= (int)pPage->pBt->usableSize-4 ); + pnext = get2byte(&data[pbegin]); + psize = get2byte(&data[pbegin+2]); + if( pbegin + psize + 3 >= pnext && pnext>0 ){ + int frag = pnext - (pbegin+psize); + if( (frag<0) || (frag>(int)data[hdr+7]) ){ + return SQLITE_CORRUPT_BKPT; + } + data[hdr+7] -= (u8)frag; + x = get2byte(&data[pnext]); + put2byte(&data[pbegin], x); + x = pnext + get2byte(&data[pnext+2]) - pbegin; + put2byte(&data[pbegin+2], x); + }else{ + addr = pbegin; + } } -cleardatabasepage_out: - releasePage(pPage); - return rc; + /* If the cell content area begins with a freeblock, remove it. */ + if( data[hdr+1]==data[hdr+5] && data[hdr+2]==data[hdr+6] ){ + int top; + pbegin = get2byte(&data[hdr+1]); + memcpy(&data[hdr+1], &data[pbegin], 2); + top = get2byte(&data[hdr+5]) + get2byte(&data[pbegin+2]); + put2byte(&data[hdr+5], top); + } + assert( sqlite3PagerIswriteable(pPage->pDbPage) ); + return SQLITE_OK; } /* -** Delete all information from a single table in the database. iTable is -** the page number of the root of the table. After this routine returns, -** the root page is empty, but still exists. +** Decode the flags byte (the first byte of the header) for a page +** and initialize fields of the MemPage structure accordingly. ** -** This routine will fail with SQLITE_LOCKED if there are any open -** read cursors on the table. Open write cursors are moved to the -** root of the table. +** Only the following combinations are supported. Anything different +** indicates a corrupt database files: ** -** If pnChange is not NULL, then table iTable must be an intkey table. The -** integer value pointed to by pnChange is incremented by the number of -** entries in the table. +** PTF_ZERODATA +** PTF_ZERODATA | PTF_LEAF +** PTF_LEAFDATA | PTF_INTKEY +** PTF_LEAFDATA | PTF_INTKEY | PTF_LEAF */ -SQLITE_PRIVATE int sqlite3BtreeClearTable(Btree *p, int iTable, int *pnChange){ - int rc; - BtShared *pBt = p->pBt; - sqlite3BtreeEnter(p); - assert( p->inTrans==TRANS_WRITE ); - if( (rc = checkForReadConflicts(p, iTable, 0, 1))!=SQLITE_OK ){ - /* nothing to do */ - }else if( SQLITE_OK!=(rc = saveAllCursors(pBt, iTable, 0)) ){ - /* nothing to do */ +static int decodeFlags(MemPage *pPage, int flagByte){ + BtShared *pBt; /* A copy of pPage->pBt */ + + assert( pPage->hdrOffset==(pPage->pgno==1 ? 100 : 0) ); + assert( sqlite3_mutex_held(pPage->pBt->mutex) ); + pPage->leaf = (u8)(flagByte>>3); assert( PTF_LEAF == 1<<3 ); + flagByte &= ~PTF_LEAF; + pPage->childPtrSize = 4-4*pPage->leaf; + pBt = pPage->pBt; + if( flagByte==(PTF_LEAFDATA | PTF_INTKEY) ){ + pPage->intKey = 1; + pPage->hasData = pPage->leaf; + pPage->maxLocal = pBt->maxLeaf; + pPage->minLocal = pBt->minLeaf; + }else if( flagByte==PTF_ZERODATA ){ + pPage->intKey = 0; + pPage->hasData = 0; + pPage->maxLocal = pBt->maxLocal; + pPage->minLocal = pBt->minLocal; }else{ - rc = clearDatabasePage(pBt, (Pgno)iTable, 0, pnChange); + return SQLITE_CORRUPT_BKPT; } - sqlite3BtreeLeave(p); - return rc; + pPage->max1bytePayload = pBt->max1bytePayload; + return SQLITE_OK; } /* -** Erase all information in a table and add the root of the table to -** the freelist. Except, the root of the principle table (the one on -** page 1) is never added to the freelist. -** -** This routine will fail with SQLITE_LOCKED if there are any open -** cursors on the table. +** Initialize the auxiliary information for a disk block. ** -** If AUTOVACUUM is enabled and the page at iTable is not the last -** root page in the database file, then the last root page -** in the database file is moved into the slot formerly occupied by -** iTable and that last slot formerly occupied by the last root page -** is added to the freelist instead of iTable. In this say, all -** root pages are kept at the beginning of the database file, which -** is necessary for AUTOVACUUM to work right. *piMoved is set to the -** page number that used to be the last root page in the file before -** the move. If no page gets moved, *piMoved is set to 0. -** The last root page is recorded in meta[3] and the value of -** meta[3] is updated by this procedure. +** Return SQLITE_OK on success. If we see that the page does +** not contain a well-formed database page, then return +** SQLITE_CORRUPT. Note that a return of SQLITE_OK does not +** guarantee that the page is well-formed. It only shows that +** we failed to detect any corruption. */ -static int btreeDropTable(Btree *p, Pgno iTable, int *piMoved){ - int rc; - MemPage *pPage = 0; - BtShared *pBt = p->pBt; +static int btreeInitPage(MemPage *pPage){ - assert( sqlite3BtreeHoldsMutex(p) ); - assert( p->inTrans==TRANS_WRITE ); + assert( pPage->pBt!=0 ); + assert( sqlite3_mutex_held(pPage->pBt->mutex) ); + assert( pPage->pgno==sqlite3PagerPagenumber(pPage->pDbPage) ); + assert( pPage == sqlite3PagerGetExtra(pPage->pDbPage) ); + assert( pPage->aData == sqlite3PagerGetData(pPage->pDbPage) ); - /* It is illegal to drop a table if any cursors are open on the - ** database. This is because in auto-vacuum mode the backend may - ** need to move another root-page to fill a gap left by the deleted - ** root page. If an open cursor was using this page a problem would - ** occur. - */ - if( pBt->pCursor ){ - sqlite3ConnectionBlocked(p->db, pBt->pCursor->pBtree->db); - return SQLITE_LOCKED_SHAREDCACHE; - } + if( !pPage->isInit ){ + u16 pc; /* Address of a freeblock within pPage->aData[] */ + u8 hdr; /* Offset to beginning of page header */ + u8 *data; /* Equal to pPage->aData */ + BtShared *pBt; /* The main btree structure */ + int usableSize; /* Amount of usable space on each page */ + u16 cellOffset; /* Offset from start of page to first cell pointer */ + int nFree; /* Number of unused bytes on the page */ + int top; /* First byte of the cell content area */ + int iCellFirst; /* First allowable cell or freeblock offset */ + int iCellLast; /* Last possible cell or freeblock offset */ - rc = sqlite3BtreeGetPage(pBt, (Pgno)iTable, &pPage, 0); - if( rc ) return rc; - rc = sqlite3BtreeClearTable(p, iTable, 0); - if( rc ){ - releasePage(pPage); - return rc; - } + pBt = pPage->pBt; - *piMoved = 0; + hdr = pPage->hdrOffset; + data = pPage->aData; + if( decodeFlags(pPage, data[hdr]) ) return SQLITE_CORRUPT_BKPT; + assert( pBt->pageSize>=512 && pBt->pageSize<=65536 ); + pPage->maskPage = (u16)(pBt->pageSize - 1); + pPage->nOverflow = 0; + usableSize = pBt->usableSize; + pPage->cellOffset = cellOffset = hdr + 12 - 4*pPage->leaf; + pPage->aDataEnd = &data[usableSize]; + pPage->aCellIdx = &data[cellOffset]; + top = get2byteNotZero(&data[hdr+5]); + pPage->nCell = get2byte(&data[hdr+3]); + if( pPage->nCell>MX_CELL(pBt) ){ + /* To many cells for a single page. The page must be corrupt */ + return SQLITE_CORRUPT_BKPT; + } + testcase( pPage->nCell==MX_CELL(pBt) ); - if( iTable>1 ){ -#ifdef SQLITE_OMIT_AUTOVACUUM - rc = freePage(pPage); - releasePage(pPage); -#else - if( pBt->autoVacuum ){ - Pgno maxRootPgno; - rc = sqlite3BtreeGetMeta(p, BTREE_LARGEST_ROOT_PAGE, &maxRootPgno); - if( rc!=SQLITE_OK ){ - releasePage(pPage); - return rc; - } + /* A malformed database page might cause us to read past the end + ** of page when parsing a cell. + ** + ** The following block of code checks early to see if a cell extends + ** past the end of a page boundary and causes SQLITE_CORRUPT to be + ** returned if it does. + */ + iCellFirst = cellOffset + 2*pPage->nCell; + iCellLast = usableSize - 4; +#if defined(SQLITE_ENABLE_OVERSIZE_CELL_CHECK) + { + int i; /* Index into the cell pointer array */ + int sz; /* Size of a cell */ - if( iTable==maxRootPgno ){ - /* If the table being dropped is the table with the largest root-page - ** number in the database, put the root page on the free list. - */ - rc = freePage(pPage); - releasePage(pPage); - if( rc!=SQLITE_OK ){ - return rc; - } - }else{ - /* The table being dropped does not have the largest root-page - ** number in the database. So move the page that does into the - ** gap left by the deleted root-page. - */ - MemPage *pMove; - releasePage(pPage); - rc = sqlite3BtreeGetPage(pBt, maxRootPgno, &pMove, 0); - if( rc!=SQLITE_OK ){ - return rc; - } - rc = relocatePage(pBt, pMove, PTRMAP_ROOTPAGE, 0, iTable, 0); - releasePage(pMove); - if( rc!=SQLITE_OK ){ - return rc; + if( !pPage->leaf ) iCellLast--; + for(i=0; inCell; i++){ + pc = get2byte(&data[cellOffset+i*2]); + testcase( pc==iCellFirst ); + testcase( pc==iCellLast ); + if( pciCellLast ){ + return SQLITE_CORRUPT_BKPT; } - rc = sqlite3BtreeGetPage(pBt, maxRootPgno, &pMove, 0); - if( rc!=SQLITE_OK ){ - return rc; + sz = cellSizePtr(pPage, &data[pc]); + testcase( pc+sz==usableSize ); + if( pc+sz>usableSize ){ + return SQLITE_CORRUPT_BKPT; } - rc = freePage(pMove); - releasePage(pMove); - if( rc!=SQLITE_OK ){ - return rc; - } - *piMoved = maxRootPgno; } + if( !pPage->leaf ) iCellLast++; + } +#endif - /* Set the new 'max-root-page' value in the database header. This - ** is the old value less one, less one more if that happens to - ** be a root-page number, less one again if that is the - ** PENDING_BYTE_PAGE. - */ - maxRootPgno--; - if( maxRootPgno==PENDING_BYTE_PAGE(pBt) ){ - maxRootPgno--; + /* Compute the total free space on the page */ + pc = get2byte(&data[hdr+1]); + nFree = data[hdr+7] + top; + while( pc>0 ){ + u16 next, size; + if( pciCellLast ){ + /* Start of free block is off the page */ + return SQLITE_CORRUPT_BKPT; } - if( maxRootPgno==PTRMAP_PAGENO(pBt, maxRootPgno) ){ - maxRootPgno--; + next = get2byte(&data[pc]); + size = get2byte(&data[pc+2]); + if( (next>0 && next<=pc+size+3) || pc+size>usableSize ){ + /* Free blocks must be in ascending order. And the last byte of + ** the free-block must lie on the database page. */ + return SQLITE_CORRUPT_BKPT; } - assert( maxRootPgno!=PENDING_BYTE_PAGE(pBt) ); + nFree = nFree + size; + pc = next; + } - rc = sqlite3BtreeUpdateMeta(p, 4, maxRootPgno); - }else{ - rc = freePage(pPage); - releasePage(pPage); + /* At this point, nFree contains the sum of the offset to the start + ** of the cell-content area plus the number of free bytes within + ** the cell-content area. If this is greater than the usable-size + ** of the page, then the page must be corrupted. This check also + ** serves to verify that the offset to the start of the cell-content + ** area, according to the page header, lies within the page. + */ + if( nFree>usableSize ){ + return SQLITE_CORRUPT_BKPT; } -#endif - }else{ - /* If sqlite3BtreeDropTable was called on page 1. */ - zeroPage(pPage, PTF_INTKEY|PTF_LEAF ); - releasePage(pPage); + pPage->nFree = (u16)(nFree - iCellFirst); + pPage->isInit = 1; } - return rc; -} -SQLITE_PRIVATE int sqlite3BtreeDropTable(Btree *p, int iTable, int *piMoved){ - int rc; - sqlite3BtreeEnter(p); - rc = btreeDropTable(p, iTable, piMoved); - sqlite3BtreeLeave(p); - return rc; + return SQLITE_OK; } - /* -** Read the meta-information out of a database file. Meta[0] -** is the number of free pages currently in the database. Meta[1] -** through meta[15] are available for use by higher layers. Meta[0] -** is read-only, the others are read/write. -** -** The schema layer numbers meta values differently. At the schema -** layer (and the SetCookie and ReadCookie opcodes) the number of -** free pages is not visible. So Cookie[0] is the same as Meta[1]. +** Set up a raw page so that it looks like a database page holding +** no entries. */ -SQLITE_PRIVATE int sqlite3BtreeGetMeta(Btree *p, int idx, u32 *pMeta){ - DbPage *pDbPage = 0; - int rc; - unsigned char *pP1; - BtShared *pBt = p->pBt; - - sqlite3BtreeEnter(p); +static void zeroPage(MemPage *pPage, int flags){ + unsigned char *data = pPage->aData; + BtShared *pBt = pPage->pBt; + u8 hdr = pPage->hdrOffset; + u16 first; - /* Reading a meta-data value requires a read-lock on page 1 (and hence - ** the sqlite_master table. We grab this lock regardless of whether or - ** not the SQLITE_ReadUncommitted flag is set (the table rooted at page - ** 1 is treated as a special case by querySharedCacheTableLock() - ** and setSharedCacheTableLock()). - */ - rc = querySharedCacheTableLock(p, 1, READ_LOCK); - if( rc!=SQLITE_OK ){ - sqlite3BtreeLeave(p); - return rc; + assert( sqlite3PagerPagenumber(pPage->pDbPage)==pPage->pgno ); + assert( sqlite3PagerGetExtra(pPage->pDbPage) == (void*)pPage ); + assert( sqlite3PagerGetData(pPage->pDbPage) == data ); + assert( sqlite3PagerIswriteable(pPage->pDbPage) ); + assert( sqlite3_mutex_held(pBt->mutex) ); + if( pBt->btsFlags & BTS_SECURE_DELETE ){ + memset(&data[hdr], 0, pBt->usableSize - hdr); } + data[hdr] = (char)flags; + first = hdr + 8 + 4*((flags&PTF_LEAF)==0 ?1:0); + memset(&data[hdr+1], 0, 4); + data[hdr+7] = 0; + put2byte(&data[hdr+5], pBt->usableSize); + pPage->nFree = (u16)(pBt->usableSize - first); + decodeFlags(pPage, flags); + pPage->hdrOffset = hdr; + pPage->cellOffset = first; + pPage->aDataEnd = &data[pBt->usableSize]; + pPage->aCellIdx = &data[first]; + pPage->nOverflow = 0; + assert( pBt->pageSize>=512 && pBt->pageSize<=65536 ); + pPage->maskPage = (u16)(pBt->pageSize - 1); + pPage->nCell = 0; + pPage->isInit = 1; +} - assert( idx>=0 && idx<=15 ); - if( pBt->pPage1 ){ - /* The b-tree is already holding a reference to page 1 of the database - ** file. In this case the required meta-data value can be read directly - ** from the page data of this reference. This is slightly faster than - ** requesting a new reference from the pager layer. - */ - pP1 = (unsigned char *)pBt->pPage1->aData; - }else{ - /* The b-tree does not have a reference to page 1 of the database file. - ** Obtain one from the pager layer. - */ - rc = sqlite3PagerGet(pBt->pPager, 1, &pDbPage); - if( rc ){ - sqlite3BtreeLeave(p); - return rc; - } - pP1 = (unsigned char *)sqlite3PagerGetData(pDbPage); - } - *pMeta = get4byte(&pP1[36 + idx*4]); - /* If the b-tree is not holding a reference to page 1, then one was - ** requested from the pager layer in the above block. Release it now. - */ - if( !pBt->pPage1 ){ - sqlite3PagerUnref(pDbPage); - } +/* +** Convert a DbPage obtained from the pager into a MemPage used by +** the btree layer. +*/ +static MemPage *btreePageFromDbPage(DbPage *pDbPage, Pgno pgno, BtShared *pBt){ + MemPage *pPage = (MemPage*)sqlite3PagerGetExtra(pDbPage); + pPage->aData = sqlite3PagerGetData(pDbPage); + pPage->pDbPage = pDbPage; + pPage->pBt = pBt; + pPage->pgno = pgno; + pPage->hdrOffset = pPage->pgno==1 ? 100 : 0; + return pPage; +} - /* If autovacuumed is disabled in this build but we are trying to - ** access an autovacuumed database, then make the database readonly. - */ -#ifdef SQLITE_OMIT_AUTOVACUUM - if( idx==BTREE_LARGEST_ROOT_PAGE && *pMeta>0 ) pBt->readOnly = 1; -#endif +/* +** Get a page from the pager. Initialize the MemPage.pBt and +** MemPage.aData elements if needed. +** +** If the noContent flag is set, it means that we do not care about +** the content of the page at this time. So do not go to the disk +** to fetch the content. Just fill in the content with zeros for now. +** If in the future we call sqlite3PagerWrite() on this page, that +** means we have started to be concerned about content and the disk +** read should occur at that point. +*/ +static int btreeGetPage( + BtShared *pBt, /* The btree */ + Pgno pgno, /* Number of the page to fetch */ + MemPage **ppPage, /* Return the page in this parameter */ + int noContent /* Do not load page content if true */ +){ + int rc; + DbPage *pDbPage; - /* If there is currently an open transaction, grab a read-lock - ** on page 1 of the database file. This is done to make sure that - ** no other connection can modify the meta value just read from - ** the database until the transaction is concluded. - */ - if( p->inTrans>0 ){ - rc = setSharedCacheTableLock(p, 1, READ_LOCK); - } - sqlite3BtreeLeave(p); - return rc; + assert( sqlite3_mutex_held(pBt->mutex) ); + rc = sqlite3PagerAcquire(pBt->pPager, pgno, (DbPage**)&pDbPage, noContent); + if( rc ) return rc; + *ppPage = btreePageFromDbPage(pDbPage, pgno, pBt); + return SQLITE_OK; } /* -** Write meta-information back into the database. Meta[0] is -** read-only and may not be written. +** Retrieve a page from the pager cache. If the requested page is not +** already in the pager cache return NULL. Initialize the MemPage.pBt and +** MemPage.aData elements if needed. */ -SQLITE_PRIVATE int sqlite3BtreeUpdateMeta(Btree *p, int idx, u32 iMeta){ - BtShared *pBt = p->pBt; - unsigned char *pP1; - int rc; - assert( idx>=1 && idx<=15 ); - sqlite3BtreeEnter(p); - assert( p->inTrans==TRANS_WRITE ); - assert( pBt->pPage1!=0 ); - pP1 = pBt->pPage1->aData; - rc = sqlite3PagerWrite(pBt->pPage1->pDbPage); - if( rc==SQLITE_OK ){ - put4byte(&pP1[36 + idx*4], iMeta); -#ifndef SQLITE_OMIT_AUTOVACUUM - if( idx==BTREE_INCR_VACUUM ){ - assert( pBt->autoVacuum || iMeta==0 ); - assert( iMeta==0 || iMeta==1 ); - pBt->incrVacuum = (u8)iMeta; - } -#endif +static MemPage *btreePageLookup(BtShared *pBt, Pgno pgno){ + DbPage *pDbPage; + assert( sqlite3_mutex_held(pBt->mutex) ); + pDbPage = sqlite3PagerLookup(pBt->pPager, pgno); + if( pDbPage ){ + return btreePageFromDbPage(pDbPage, pgno, pBt); } - sqlite3BtreeLeave(p); - return rc; + return 0; } /* -** Return the flag byte at the beginning of the page that the cursor -** is currently pointing to. +** Return the size of the database file in pages. If there is any kind of +** error, return ((unsigned int)-1). */ -SQLITE_PRIVATE int sqlite3BtreeFlags(BtCursor *pCur){ - /* TODO: What about CURSOR_REQUIRESEEK state? Probably need to call - ** restoreCursorPosition() here. - */ - MemPage *pPage; - restoreCursorPosition(pCur); - pPage = pCur->apPage[pCur->iPage]; - assert( cursorHoldsMutex(pCur) ); - assert( pPage!=0 ); - assert( pPage->pBt==pCur->pBt ); - return pPage->aData[pPage->hdrOffset]; +static Pgno btreePagecount(BtShared *pBt){ + return pBt->nPage; +} +SQLITE_PRIVATE u32 sqlite3BtreeLastPage(Btree *p){ + assert( sqlite3BtreeHoldsMutex(p) ); + assert( ((p->pBt->nPage)&0x8000000)==0 ); + return (int)btreePagecount(p->pBt); } -#ifndef SQLITE_OMIT_BTREECOUNT /* -** The first argument, pCur, is a cursor opened on some b-tree. Count the -** number of entries in the b-tree and write the result to *pnEntry. +** Get a page from the pager and initialize it. This routine is just a +** convenience wrapper around separate calls to btreeGetPage() and +** btreeInitPage(). ** -** SQLITE_OK is returned if the operation is successfully executed. -** Otherwise, if an error is encountered (i.e. an IO error or database -** corruption) an SQLite error code is returned. +** If an error occurs, then the value *ppPage is set to is undefined. It +** may remain unchanged, or it may be set to an invalid value. */ -SQLITE_PRIVATE int sqlite3BtreeCount(BtCursor *pCur, i64 *pnEntry){ - i64 nEntry = 0; /* Value to return in *pnEntry */ - int rc; /* Return code */ - rc = moveToRoot(pCur); - - /* Unless an error occurs, the following loop runs one iteration for each - ** page in the B-Tree structure (not including overflow pages). - */ - while( rc==SQLITE_OK ){ - int iIdx; /* Index of child node in parent */ - MemPage *pPage; /* Current page of the b-tree */ - - /* If this is a leaf page or the tree is not an int-key tree, then - ** this page contains countable entries. Increment the entry counter - ** accordingly. - */ - pPage = pCur->apPage[pCur->iPage]; - if( pPage->leaf || !pPage->intKey ){ - nEntry += pPage->nCell; - } - - /* pPage is a leaf node. This loop navigates the cursor so that it - ** points to the first interior cell that it points to the parent of - ** the next page in the tree that has not yet been visited. The - ** pCur->aiIdx[pCur->iPage] value is set to the index of the parent cell - ** of the page, or to the number of cells in the page if the next page - ** to visit is the right-child of its parent. - ** - ** If all pages in the tree have been visited, return SQLITE_OK to the - ** caller. - */ - if( pPage->leaf ){ - do { - if( pCur->iPage==0 ){ - /* All pages of the b-tree have been visited. Return successfully. */ - *pnEntry = nEntry; - return SQLITE_OK; - } - sqlite3BtreeMoveToParent(pCur); - }while ( pCur->aiIdx[pCur->iPage]>=pCur->apPage[pCur->iPage]->nCell ); - - pCur->aiIdx[pCur->iPage]++; - pPage = pCur->apPage[pCur->iPage]; - } +static int getAndInitPage( + BtShared *pBt, /* The database file */ + Pgno pgno, /* Number of the page to get */ + MemPage **ppPage /* Write the page pointer here */ +){ + int rc; + assert( sqlite3_mutex_held(pBt->mutex) ); - /* Descend to the child node of the cell that the cursor currently - ** points at. This is the right-child if (iIdx==pPage->nCell). - */ - iIdx = pCur->aiIdx[pCur->iPage]; - if( iIdx==pPage->nCell ){ - rc = moveToChild(pCur, get4byte(&pPage->aData[pPage->hdrOffset+8])); - }else{ - rc = moveToChild(pCur, get4byte(findCell(pPage, iIdx))); + if( pgno>btreePagecount(pBt) ){ + rc = SQLITE_CORRUPT_BKPT; + }else{ + rc = btreeGetPage(pBt, pgno, ppPage, 0); + if( rc==SQLITE_OK ){ + rc = btreeInitPage(*ppPage); + if( rc!=SQLITE_OK ){ + releasePage(*ppPage); + } } } - /* An error has occurred. Return an error code. */ + testcase( pgno==0 ); + assert( pgno!=0 || rc==SQLITE_CORRUPT ); return rc; } -#endif /* -** Return the pager associated with a BTree. This routine is used for -** testing and debugging only. +** Release a MemPage. This should be called once for each prior +** call to btreeGetPage. */ -SQLITE_PRIVATE Pager *sqlite3BtreePager(Btree *p){ - return p->pBt->pPager; +static void releasePage(MemPage *pPage){ + if( pPage ){ + assert( pPage->aData ); + assert( pPage->pBt ); + assert( sqlite3PagerGetExtra(pPage->pDbPage) == (void*)pPage ); + assert( sqlite3PagerGetData(pPage->pDbPage)==pPage->aData ); + assert( sqlite3_mutex_held(pPage->pBt->mutex) ); + sqlite3PagerUnref(pPage->pDbPage); + } } -#ifndef SQLITE_OMIT_INTEGRITY_CHECK /* -** Append a message to the error message string. +** During a rollback, when the pager reloads information into the cache +** so that the cache is restored to its original state at the start of +** the transaction, for each page restored this routine is called. +** +** This routine needs to reset the extra data section at the end of the +** page to agree with the restored data. */ -static void checkAppendMsg( - IntegrityCk *pCheck, - char *zMsg1, - const char *zFormat, - ... -){ - va_list ap; - if( !pCheck->mxErr ) return; - pCheck->mxErr--; - pCheck->nErr++; - va_start(ap, zFormat); - if( pCheck->errMsg.nChar ){ - sqlite3StrAccumAppend(&pCheck->errMsg, "\n", 1); - } - if( zMsg1 ){ - sqlite3StrAccumAppend(&pCheck->errMsg, zMsg1, -1); - } - sqlite3VXPrintf(&pCheck->errMsg, 1, zFormat, ap); - va_end(ap); - if( pCheck->errMsg.mallocFailed ){ - pCheck->mallocFailed = 1; +static void pageReinit(DbPage *pData){ + MemPage *pPage; + pPage = (MemPage *)sqlite3PagerGetExtra(pData); + assert( sqlite3PagerPageRefcount(pData)>0 ); + if( pPage->isInit ){ + assert( sqlite3_mutex_held(pPage->pBt->mutex) ); + pPage->isInit = 0; + if( sqlite3PagerPageRefcount(pData)>1 ){ + /* pPage might not be a btree page; it might be an overflow page + ** or ptrmap page or a free page. In those cases, the following + ** call to btreeInitPage() will likely return SQLITE_CORRUPT. + ** But no harm is done by this. And it is very important that + ** btreeInitPage() be called on every btree page so we make + ** the call for every page that comes in for re-initing. */ + btreeInitPage(pPage); + } } } -#endif /* SQLITE_OMIT_INTEGRITY_CHECK */ -#ifndef SQLITE_OMIT_INTEGRITY_CHECK /* -** Add 1 to the reference count for page iPage. If this is the second -** reference to the page, add an error message to pCheck->zErrMsg. -** Return 1 if there are 2 ore more references to the page and 0 if -** if this is the first reference to the page. -** -** Also check that the page number is in bounds. +** Invoke the busy handler for a btree. */ -static int checkRef(IntegrityCk *pCheck, Pgno iPage, char *zContext){ - if( iPage==0 ) return 1; - if( iPage>pCheck->nPage ){ - checkAppendMsg(pCheck, zContext, "invalid page number %d", iPage); - return 1; - } - if( pCheck->anRef[iPage]==1 ){ - checkAppendMsg(pCheck, zContext, "2nd reference to page %d", iPage); - return 1; - } - return (pCheck->anRef[iPage]++)>1; +static int btreeInvokeBusyHandler(void *pArg){ + BtShared *pBt = (BtShared*)pArg; + assert( pBt->db ); + assert( sqlite3_mutex_held(pBt->db->mutex) ); + return sqlite3InvokeBusyHandler(&pBt->db->busyHandler); } -#ifndef SQLITE_OMIT_AUTOVACUUM /* -** Check that the entry in the pointer-map for page iChild maps to -** page iParent, pointer type ptrType. If not, append an error message -** to pCheck. +** Open a database file. +** +** zFilename is the name of the database file. If zFilename is NULL +** then an ephemeral database is created. The ephemeral database might +** be exclusively in memory, or it might use a disk-based memory cache. +** Either way, the ephemeral database will be automatically deleted +** when sqlite3BtreeClose() is called. +** +** If zFilename is ":memory:" then an in-memory database is created +** that is automatically destroyed when it is closed. +** +** The "flags" parameter is a bitmask that might contain bits like +** BTREE_OMIT_JOURNAL and/or BTREE_MEMORY. +** +** If the database is already opened in the same database connection +** and we are in shared cache mode, then the open will fail with an +** SQLITE_CONSTRAINT error. We cannot allow two or more BtShared +** objects in the same database connection since doing so will lead +** to problems with locking. */ -static void checkPtrmap( - IntegrityCk *pCheck, /* Integrity check context */ - Pgno iChild, /* Child page number */ - u8 eType, /* Expected pointer map type */ - Pgno iParent, /* Expected pointer map parent page number */ - char *zContext /* Context description (used for error msg) */ +SQLITE_PRIVATE int sqlite3BtreeOpen( + sqlite3_vfs *pVfs, /* VFS to use for this b-tree */ + const char *zFilename, /* Name of the file containing the BTree database */ + sqlite3 *db, /* Associated database handle */ + Btree **ppBtree, /* Pointer to new Btree object written here */ + int flags, /* Options */ + int vfsFlags /* Flags passed through to sqlite3_vfs.xOpen() */ ){ - int rc; - u8 ePtrmapType; - Pgno iPtrmapParent; + BtShared *pBt = 0; /* Shared part of btree structure */ + Btree *p; /* Handle to return */ + sqlite3_mutex *mutexOpen = 0; /* Prevents a race condition. Ticket #3537 */ + int rc = SQLITE_OK; /* Result code from this function */ + u8 nReserve; /* Byte of unused space on each page */ + unsigned char zDbHeader[100]; /* Database header content */ - rc = ptrmapGet(pCheck->pBt, iChild, &ePtrmapType, &iPtrmapParent); - if( rc!=SQLITE_OK ){ - if( rc==SQLITE_NOMEM || rc==SQLITE_IOERR_NOMEM ) pCheck->mallocFailed = 1; - checkAppendMsg(pCheck, zContext, "Failed to read ptrmap key=%d", iChild); - return; - } + /* True if opening an ephemeral, temporary database */ + const int isTempDb = zFilename==0 || zFilename[0]==0; - if( ePtrmapType!=eType || iPtrmapParent!=iParent ){ - checkAppendMsg(pCheck, zContext, - "Bad ptr map entry key=%d expected=(%d,%d) got=(%d,%d)", - iChild, eType, iParent, ePtrmapType, iPtrmapParent); + /* Set the variable isMemdb to true for an in-memory database, or + ** false for a file-based database. + */ +#ifdef SQLITE_OMIT_MEMORYDB + const int isMemdb = 0; +#else + const int isMemdb = (zFilename && strcmp(zFilename, ":memory:")==0) + || (isTempDb && sqlite3TempInMemory(db)) + || (vfsFlags & SQLITE_OPEN_MEMORY)!=0; +#endif + + assert( db!=0 ); + assert( pVfs!=0 ); + assert( sqlite3_mutex_held(db->mutex) ); + assert( (flags&0xff)==flags ); /* flags fit in 8 bits */ + + /* Only a BTREE_SINGLE database can be BTREE_UNORDERED */ + assert( (flags & BTREE_UNORDERED)==0 || (flags & BTREE_SINGLE)!=0 ); + + /* A BTREE_SINGLE database is always a temporary and/or ephemeral */ + assert( (flags & BTREE_SINGLE)==0 || isTempDb ); + + if( isMemdb ){ + flags |= BTREE_MEMORY; } -} + if( (vfsFlags & SQLITE_OPEN_MAIN_DB)!=0 && (isMemdb || isTempDb) ){ + vfsFlags = (vfsFlags & ~SQLITE_OPEN_MAIN_DB) | SQLITE_OPEN_TEMP_DB; + } + p = sqlite3MallocZero(sizeof(Btree)); + if( !p ){ + return SQLITE_NOMEM; + } + p->inTrans = TRANS_NONE; + p->db = db; +#ifndef SQLITE_OMIT_SHARED_CACHE + p->lock.pBtree = p; + p->lock.iTable = 1; #endif -/* -** Check the integrity of the freelist or of an overflow page list. -** Verify that the number of pages on the list is N. -*/ -static void checkList( - IntegrityCk *pCheck, /* Integrity checking context */ - int isFreeList, /* True for a freelist. False for overflow page list */ - int iPage, /* Page number for first page in the list */ - int N, /* Expected number of pages in the list */ - char *zContext /* Context for error messages */ -){ - int i; - int expected = N; - int iFirst = iPage; - while( N-- > 0 && pCheck->mxErr ){ - DbPage *pOvflPage; - unsigned char *pOvflData; - if( iPage<1 ){ - checkAppendMsg(pCheck, zContext, - "%d of %d pages missing from overflow list starting at %d", - N+1, expected, iFirst); - break; - } - if( checkRef(pCheck, iPage, zContext) ) break; - if( sqlite3PagerGet(pCheck->pPager, (Pgno)iPage, &pOvflPage) ){ - checkAppendMsg(pCheck, zContext, "failed to get page %d", iPage); - break; - } - pOvflData = (unsigned char *)sqlite3PagerGetData(pOvflPage); - if( isFreeList ){ - int n = get4byte(&pOvflData[4]); -#ifndef SQLITE_OMIT_AUTOVACUUM - if( pCheck->pBt->autoVacuum ){ - checkPtrmap(pCheck, iPage, PTRMAP_FREEPAGE, 0, zContext); +#if !defined(SQLITE_OMIT_SHARED_CACHE) && !defined(SQLITE_OMIT_DISKIO) + /* + ** If this Btree is a candidate for shared cache, try to find an + ** existing BtShared object that we can share with + */ + if( isTempDb==0 && (isMemdb==0 || (vfsFlags&SQLITE_OPEN_URI)!=0) ){ + if( vfsFlags & SQLITE_OPEN_SHAREDCACHE ){ + int nFullPathname = pVfs->mxPathname+1; + char *zFullPathname = sqlite3Malloc(nFullPathname); + MUTEX_LOGIC( sqlite3_mutex *mutexShared; ) + p->sharable = 1; + if( !zFullPathname ){ + sqlite3_free(p); + return SQLITE_NOMEM; } -#endif - if( n>pCheck->pBt->usableSize/4-2 ){ - checkAppendMsg(pCheck, zContext, - "freelist leaf count too big on page %d", iPage); - N--; + if( isMemdb ){ + memcpy(zFullPathname, zFilename, sqlite3Strlen30(zFilename)+1); }else{ - for(i=0; ipBt->autoVacuum ){ - checkPtrmap(pCheck, iFreePage, PTRMAP_FREEPAGE, 0, zContext); - } + rc = sqlite3OsFullPathname(pVfs, zFilename, + nFullPathname, zFullPathname); + if( rc ){ + sqlite3_free(zFullPathname); + sqlite3_free(p); + return rc; + } + } +#if SQLITE_THREADSAFE + mutexOpen = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_OPEN); + sqlite3_mutex_enter(mutexOpen); + mutexShared = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER); + sqlite3_mutex_enter(mutexShared); #endif - checkRef(pCheck, iFreePage, zContext); + for(pBt=GLOBAL(BtShared*,sqlite3SharedCacheList); pBt; pBt=pBt->pNext){ + assert( pBt->nRef>0 ); + if( 0==strcmp(zFullPathname, sqlite3PagerFilename(pBt->pPager, 0)) + && sqlite3PagerVfs(pBt->pPager)==pVfs ){ + int iDb; + for(iDb=db->nDb-1; iDb>=0; iDb--){ + Btree *pExisting = db->aDb[iDb].pBt; + if( pExisting && pExisting->pBt==pBt ){ + sqlite3_mutex_leave(mutexShared); + sqlite3_mutex_leave(mutexOpen); + sqlite3_free(zFullPathname); + sqlite3_free(p); + return SQLITE_CONSTRAINT; + } + } + p->pBt = pBt; + pBt->nRef++; + break; } - N -= n; } + sqlite3_mutex_leave(mutexShared); + sqlite3_free(zFullPathname); } -#ifndef SQLITE_OMIT_AUTOVACUUM +#ifdef SQLITE_DEBUG else{ - /* If this database supports auto-vacuum and iPage is not the last - ** page in this overflow list, check that the pointer-map entry for - ** the following page matches iPage. + /* In debug mode, we mark all persistent databases as sharable + ** even when they are not. This exercises the locking code and + ** gives more opportunity for asserts(sqlite3_mutex_held()) + ** statements to find locking problems. */ - if( pCheck->pBt->autoVacuum && N>0 ){ - i = get4byte(pOvflData); - checkPtrmap(pCheck, i, PTRMAP_OVERFLOW2, iPage, zContext); - } + p->sharable = 1; } #endif - iPage = get4byte(pOvflData); - sqlite3PagerUnref(pOvflPage); } -} -#endif /* SQLITE_OMIT_INTEGRITY_CHECK */ - -#ifndef SQLITE_OMIT_INTEGRITY_CHECK -/* -** Do various sanity checks on a single page of a tree. Return -** the tree depth. Root pages return 0. Parents of root pages -** return 1, and so forth. -** -** These checks are done: -** -** 1. Make sure that cells and freeblocks do not overlap -** but combine to completely cover the page. -** NO 2. Make sure cell keys are in order. -** NO 3. Make sure no key is less than or equal to zLowerBound. -** NO 4. Make sure no key is greater than or equal to zUpperBound. -** 5. Check the integrity of overflow pages. -** 6. Recursively call checkTreePage on all children. -** 7. Verify that the depth of all children is the same. -** 8. Make sure this page is at least 33% full or else it is -** the root of the tree. -*/ -static int checkTreePage( - IntegrityCk *pCheck, /* Context for the sanity check */ - int iPage, /* Page number of the page to check */ - char *zParentContext /* Parent context */ -){ - MemPage *pPage; - int i, rc, depth, d2, pgno, cnt; - int hdr, cellStart; - int nCell; - u8 *data; - BtShared *pBt; - int usableSize; - char zContext[100]; - char *hit = 0; - - sqlite3_snprintf(sizeof(zContext), zContext, "Page %d: ", iPage); - - /* Check that the page exists - */ - pBt = pCheck->pBt; - usableSize = pBt->usableSize; - if( iPage==0 ) return 0; - if( checkRef(pCheck, iPage, zParentContext) ) return 0; - if( (rc = sqlite3BtreeGetPage(pBt, (Pgno)iPage, &pPage, 0))!=0 ){ - if( rc==SQLITE_NOMEM || rc==SQLITE_IOERR_NOMEM ) pCheck->mallocFailed = 1; - checkAppendMsg(pCheck, zContext, - "unable to get the page. error code=%d", rc); - return 0; - } - if( (rc = sqlite3BtreeInitPage(pPage))!=0 ){ - assert( rc==SQLITE_CORRUPT ); /* The only possible error from InitPage */ - checkAppendMsg(pCheck, zContext, - "sqlite3BtreeInitPage() returns error code %d", rc); - releasePage(pPage); - return 0; - } - - /* Check out all the cells. - */ - depth = 0; - for(i=0; inCell && pCheck->mxErr; i++){ - u8 *pCell; - u32 sz; - CellInfo info; - - /* Check payload overflow pages +#endif + if( pBt==0 ){ + /* + ** The following asserts make sure that structures used by the btree are + ** the right size. This is to guard against size changes that result + ** when compiling on a different architecture. */ - sqlite3_snprintf(sizeof(zContext), zContext, - "On tree page %d cell %d: ", iPage, i); - pCell = findCell(pPage,i); - sqlite3BtreeParseCellPtr(pPage, pCell, &info); - sz = info.nData; - if( !pPage->intKey ) sz += (int)info.nKey; - assert( sz==info.nPayload ); - if( (sz>info.nLocal) - && (&pCell[info.iOverflow]<=&pPage->aData[pBt->usableSize]) - ){ - int nPage = (sz - info.nLocal + usableSize - 5)/(usableSize - 4); - Pgno pgnoOvfl = get4byte(&pCell[info.iOverflow]); + assert( sizeof(i64)==8 || sizeof(i64)==4 ); + assert( sizeof(u64)==8 || sizeof(u64)==4 ); + assert( sizeof(u32)==4 ); + assert( sizeof(u16)==2 ); + assert( sizeof(Pgno)==4 ); + + pBt = sqlite3MallocZero( sizeof(*pBt) ); + if( pBt==0 ){ + rc = SQLITE_NOMEM; + goto btree_open_out; + } + rc = sqlite3PagerOpen(pVfs, &pBt->pPager, zFilename, + EXTRA_SIZE, flags, vfsFlags, pageReinit); + if( rc==SQLITE_OK ){ + rc = sqlite3PagerReadFileheader(pBt->pPager,sizeof(zDbHeader),zDbHeader); + } + if( rc!=SQLITE_OK ){ + goto btree_open_out; + } + pBt->openFlags = (u8)flags; + pBt->db = db; + sqlite3PagerSetBusyhandler(pBt->pPager, btreeInvokeBusyHandler, pBt); + p->pBt = pBt; + + pBt->pCursor = 0; + pBt->pPage1 = 0; + if( sqlite3PagerIsreadonly(pBt->pPager) ) pBt->btsFlags |= BTS_READ_ONLY; +#ifdef SQLITE_SECURE_DELETE + pBt->btsFlags |= BTS_SECURE_DELETE; +#endif + pBt->pageSize = (zDbHeader[16]<<8) | (zDbHeader[17]<<16); + if( pBt->pageSize<512 || pBt->pageSize>SQLITE_MAX_PAGE_SIZE + || ((pBt->pageSize-1)&pBt->pageSize)!=0 ){ + pBt->pageSize = 0; #ifndef SQLITE_OMIT_AUTOVACUUM - if( pBt->autoVacuum ){ - checkPtrmap(pCheck, pgnoOvfl, PTRMAP_OVERFLOW1, iPage, zContext); + /* If the magic name ":memory:" will create an in-memory database, then + ** leave the autoVacuum mode at 0 (do not auto-vacuum), even if + ** SQLITE_DEFAULT_AUTOVACUUM is true. On the other hand, if + ** SQLITE_OMIT_MEMORYDB has been defined, then ":memory:" is just a + ** regular file-name. In this case the auto-vacuum applies as per normal. + */ + if( zFilename && !isMemdb ){ + pBt->autoVacuum = (SQLITE_DEFAULT_AUTOVACUUM ? 1 : 0); + pBt->incrVacuum = (SQLITE_DEFAULT_AUTOVACUUM==2 ? 1 : 0); } #endif - checkList(pCheck, 0, pgnoOvfl, nPage, zContext); + nReserve = 0; + }else{ + nReserve = zDbHeader[20]; + pBt->btsFlags |= BTS_PAGESIZE_FIXED; +#ifndef SQLITE_OMIT_AUTOVACUUM + pBt->autoVacuum = (get4byte(&zDbHeader[36 + 4*4])?1:0); + pBt->incrVacuum = (get4byte(&zDbHeader[36 + 7*4])?1:0); +#endif } - - /* Check sanity of left child page. + rc = sqlite3PagerSetPagesize(pBt->pPager, &pBt->pageSize, nReserve); + if( rc ) goto btree_open_out; + pBt->usableSize = pBt->pageSize - nReserve; + assert( (pBt->pageSize & 7)==0 ); /* 8-byte alignment of pageSize */ + +#if !defined(SQLITE_OMIT_SHARED_CACHE) && !defined(SQLITE_OMIT_DISKIO) + /* Add the new BtShared object to the linked list sharable BtShareds. */ - if( !pPage->leaf ){ - pgno = get4byte(pCell); -#ifndef SQLITE_OMIT_AUTOVACUUM - if( pBt->autoVacuum ){ - checkPtrmap(pCheck, pgno, PTRMAP_BTREE, iPage, zContext); + if( p->sharable ){ + MUTEX_LOGIC( sqlite3_mutex *mutexShared; ) + pBt->nRef = 1; + MUTEX_LOGIC( mutexShared = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER);) + if( SQLITE_THREADSAFE && sqlite3GlobalConfig.bCoreMutex ){ + pBt->mutex = sqlite3MutexAlloc(SQLITE_MUTEX_FAST); + if( pBt->mutex==0 ){ + rc = SQLITE_NOMEM; + db->mallocFailed = 0; + goto btree_open_out; + } } + sqlite3_mutex_enter(mutexShared); + pBt->pNext = GLOBAL(BtShared*,sqlite3SharedCacheList); + GLOBAL(BtShared*,sqlite3SharedCacheList) = pBt; + sqlite3_mutex_leave(mutexShared); + } #endif - d2 = checkTreePage(pCheck, pgno, zContext); - if( i>0 && d2!=depth ){ - checkAppendMsg(pCheck, zContext, "Child page depth differs"); + } + +#if !defined(SQLITE_OMIT_SHARED_CACHE) && !defined(SQLITE_OMIT_DISKIO) + /* If the new Btree uses a sharable pBtShared, then link the new + ** Btree into the list of all sharable Btrees for the same connection. + ** The list is kept in ascending order by pBt address. + */ + if( p->sharable ){ + int i; + Btree *pSib; + for(i=0; inDb; i++){ + if( (pSib = db->aDb[i].pBt)!=0 && pSib->sharable ){ + while( pSib->pPrev ){ pSib = pSib->pPrev; } + if( p->pBtpBt ){ + p->pNext = pSib; + p->pPrev = 0; + pSib->pPrev = p; + }else{ + while( pSib->pNext && pSib->pNext->pBtpBt ){ + pSib = pSib->pNext; + } + p->pNext = pSib->pNext; + p->pPrev = pSib; + if( p->pNext ){ + p->pNext->pPrev = p; + } + pSib->pNext = p; + } + break; } - depth = d2; } } - if( !pPage->leaf ){ - pgno = get4byte(&pPage->aData[pPage->hdrOffset+8]); - sqlite3_snprintf(sizeof(zContext), zContext, - "On page %d at right child: ", iPage); -#ifndef SQLITE_OMIT_AUTOVACUUM - if( pBt->autoVacuum ){ - checkPtrmap(pCheck, pgno, PTRMAP_BTREE, iPage, 0); - } #endif - checkTreePage(pCheck, pgno, zContext); - } - - /* Check for complete coverage of the page - */ - data = pPage->aData; - hdr = pPage->hdrOffset; - hit = sqlite3PageMalloc( pBt->pageSize ); - if( hit==0 ){ - pCheck->mallocFailed = 1; - }else{ - u16 contentOffset = get2byte(&data[hdr+5]); - if (contentOffset > usableSize) { - checkAppendMsg(pCheck, 0, - "Corruption detected in header on page %d",iPage,0); - goto check_page_abort; + *ppBtree = p; + +btree_open_out: + if( rc!=SQLITE_OK ){ + if( pBt && pBt->pPager ){ + sqlite3PagerClose(pBt->pPager); } - memset(hit+contentOffset, 0, usableSize-contentOffset); - memset(hit, 1, contentOffset); - nCell = get2byte(&data[hdr+3]); - cellStart = hdr + 12 - 4*pPage->leaf; - for(i=0; i=usableSize || pc<0 ){ - checkAppendMsg(pCheck, 0, - "Corruption detected in cell %d on page %d",i,iPage,0); - }else{ - for(j=pc+size-1; j>=pc; j--) hit[j]++; - } + sqlite3_free(pBt); + sqlite3_free(p); + *ppBtree = 0; + }else{ + /* If the B-Tree was successfully opened, set the pager-cache size to the + ** default value. Except, when opening on an existing shared pager-cache, + ** do not change the pager-cache size. + */ + if( sqlite3BtreeSchema(p, 0, 0)==0 ){ + sqlite3PagerSetCachesize(p->pBt->pPager, SQLITE_DEFAULT_CACHE_SIZE); } - for(cnt=0, i=get2byte(&data[hdr+1]); i>0 && i=usableSize || i<0 ){ - checkAppendMsg(pCheck, 0, - "Corruption detected in cell %d on page %d",i,iPage,0); - }else{ - for(j=i+size-1; j>=i; j--) hit[j]++; + } + if( mutexOpen ){ + assert( sqlite3_mutex_held(mutexOpen) ); + sqlite3_mutex_leave(mutexOpen); + } + return rc; +} + +/* +** Decrement the BtShared.nRef counter. When it reaches zero, +** remove the BtShared structure from the sharing list. Return +** true if the BtShared.nRef counter reaches zero and return +** false if it is still positive. +*/ +static int removeFromSharingList(BtShared *pBt){ +#ifndef SQLITE_OMIT_SHARED_CACHE + MUTEX_LOGIC( sqlite3_mutex *pMaster; ) + BtShared *pList; + int removed = 0; + + assert( sqlite3_mutex_notheld(pBt->mutex) ); + MUTEX_LOGIC( pMaster = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER); ) + sqlite3_mutex_enter(pMaster); + pBt->nRef--; + if( pBt->nRef<=0 ){ + if( GLOBAL(BtShared*,sqlite3SharedCacheList)==pBt ){ + GLOBAL(BtShared*,sqlite3SharedCacheList) = pBt->pNext; + }else{ + pList = GLOBAL(BtShared*,sqlite3SharedCacheList); + while( ALWAYS(pList) && pList->pNext!=pBt ){ + pList=pList->pNext; } - i = get2byte(&data[i]); - } - for(i=cnt=0; i1 ){ - checkAppendMsg(pCheck, 0, - "Multiple uses for byte %d of page %d", i, iPage); - break; + if( ALWAYS(pList) ){ + pList->pNext = pBt->pNext; } } - if( cnt!=data[hdr+7] ){ - checkAppendMsg(pCheck, 0, - "Fragmented space is %d byte reported as %d on page %d", - cnt, data[hdr+7], iPage); + if( SQLITE_THREADSAFE ){ + sqlite3_mutex_free(pBt->mutex); } + removed = 1; } -check_page_abort: - if (hit) sqlite3PageFree(hit); + sqlite3_mutex_leave(pMaster); + return removed; +#else + return 1; +#endif +} - releasePage(pPage); - return depth+1; +/* +** Make sure pBt->pTmpSpace points to an allocation of +** MX_CELL_SIZE(pBt) bytes. +*/ +static void allocateTempSpace(BtShared *pBt){ + if( !pBt->pTmpSpace ){ + pBt->pTmpSpace = sqlite3PageMalloc( pBt->pageSize ); + } } -#endif /* SQLITE_OMIT_INTEGRITY_CHECK */ -#ifndef SQLITE_OMIT_INTEGRITY_CHECK /* -** This routine does a complete check of the given BTree file. aRoot[] is -** an array of pages numbers were each page number is the root page of -** a table. nRoot is the number of entries in aRoot. -** -** Write the number of error seen in *pnErr. Except for some memory -** allocation errors, an error message held in memory obtained from -** malloc is returned if *pnErr is non-zero. If *pnErr==0 then NULL is -** returned. If a memory allocation error occurs, NULL is returned. +** Free the pBt->pTmpSpace allocation */ -SQLITE_PRIVATE char *sqlite3BtreeIntegrityCheck( - Btree *p, /* The btree to be checked */ - int *aRoot, /* An array of root pages numbers for individual trees */ - int nRoot, /* Number of entries in aRoot[] */ - int mxErr, /* Stop reporting errors after this many */ - int *pnErr /* Write number of errors seen to this variable */ -){ - Pgno i; - int nRef; - IntegrityCk sCheck; +static void freeTempSpace(BtShared *pBt){ + sqlite3PageFree( pBt->pTmpSpace); + pBt->pTmpSpace = 0; +} + +/* +** Close an open database and invalidate all cursors. +*/ +SQLITE_PRIVATE int sqlite3BtreeClose(Btree *p){ BtShared *pBt = p->pBt; - char zErr[100]; + BtCursor *pCur; + /* Close all cursors opened via this handle. */ + assert( sqlite3_mutex_held(p->db->mutex) ); sqlite3BtreeEnter(p); - nRef = sqlite3PagerRefcount(pBt->pPager); - if( lockBtreeWithRetry(p)!=SQLITE_OK ){ - *pnErr = 1; - sqlite3BtreeLeave(p); - return sqlite3DbStrDup(0, "cannot acquire a read lock on the database"); - } - sCheck.pBt = pBt; - sCheck.pPager = pBt->pPager; - sCheck.nPage = pagerPagecount(sCheck.pBt); - sCheck.mxErr = mxErr; - sCheck.nErr = 0; - sCheck.mallocFailed = 0; - *pnErr = 0; - if( sCheck.nPage==0 ){ - unlockBtreeIfUnused(pBt); - sqlite3BtreeLeave(p); - return 0; - } - sCheck.anRef = sqlite3Malloc( (sCheck.nPage+1)*sizeof(sCheck.anRef[0]) ); - if( !sCheck.anRef ){ - unlockBtreeIfUnused(pBt); - *pnErr = 1; - sqlite3BtreeLeave(p); - return 0; - } - for(i=0; i<=sCheck.nPage; i++){ sCheck.anRef[i] = 0; } - i = PENDING_BYTE_PAGE(pBt); - if( i<=sCheck.nPage ){ - sCheck.anRef[i] = 1; + pCur = pBt->pCursor; + while( pCur ){ + BtCursor *pTmp = pCur; + pCur = pCur->pNext; + if( pTmp->pBtree==p ){ + sqlite3BtreeCloseCursor(pTmp); + } } - sqlite3StrAccumInit(&sCheck.errMsg, zErr, sizeof(zErr), 20000); - - /* Check the integrity of the freelist - */ - checkList(&sCheck, 1, get4byte(&pBt->pPage1->aData[32]), - get4byte(&pBt->pPage1->aData[36]), "Main freelist: "); - /* Check all the tables. + /* Rollback any active transaction and free the handle structure. + ** The call to sqlite3BtreeRollback() drops any table-locks held by + ** this handle. */ - for(i=0; (int)iautoVacuum && aRoot[i]>1 ){ - checkPtrmap(&sCheck, aRoot[i], PTRMAP_ROOTPAGE, 0, 0); - } -#endif - checkTreePage(&sCheck, aRoot[i], "List of tree roots: "); - } + sqlite3BtreeRollback(p, SQLITE_OK); + sqlite3BtreeLeave(p); - /* Make sure every page in the file is referenced + /* If there are still other outstanding references to the shared-btree + ** structure, return now. The remainder of this procedure cleans + ** up the shared-btree. */ - for(i=1; i<=sCheck.nPage && sCheck.mxErr; i++){ -#ifdef SQLITE_OMIT_AUTOVACUUM - if( sCheck.anRef[i]==0 ){ - checkAppendMsg(&sCheck, 0, "Page %d is never used", i); - } -#else - /* If the database supports auto-vacuum, make sure no tables contain - ** references to pointer-map pages. + assert( p->wantToLock==0 && p->locked==0 ); + if( !p->sharable || removeFromSharingList(pBt) ){ + /* The pBt is no longer on the sharing list, so we can access + ** it without having to hold the mutex. + ** + ** Clean out and delete the BtShared object. */ - if( sCheck.anRef[i]==0 && - (PTRMAP_PAGENO(pBt, i)!=i || !pBt->autoVacuum) ){ - checkAppendMsg(&sCheck, 0, "Page %d is never used", i); - } - if( sCheck.anRef[i]!=0 && - (PTRMAP_PAGENO(pBt, i)==i && pBt->autoVacuum) ){ - checkAppendMsg(&sCheck, 0, "Pointer map page %d is referenced", i); + assert( !pBt->pCursor ); + sqlite3PagerClose(pBt->pPager); + if( pBt->xFreeSchema && pBt->pSchema ){ + pBt->xFreeSchema(pBt->pSchema); } -#endif + sqlite3DbFree(0, pBt->pSchema); + freeTempSpace(pBt); + sqlite3_free(pBt); } - /* Make sure this analysis did not leave any unref() pages. - ** This is an internal consistency check; an integrity check - ** of the integrity check. - */ - unlockBtreeIfUnused(pBt); - if( NEVER(nRef != sqlite3PagerRefcount(pBt->pPager)) ){ - checkAppendMsg(&sCheck, 0, - "Outstanding page count goes from %d to %d during this analysis", - nRef, sqlite3PagerRefcount(pBt->pPager) - ); - } +#ifndef SQLITE_OMIT_SHARED_CACHE + assert( p->wantToLock==0 ); + assert( p->locked==0 ); + if( p->pPrev ) p->pPrev->pNext = p->pNext; + if( p->pNext ) p->pNext->pPrev = p->pPrev; +#endif - /* Clean up and report errors. - */ - sqlite3BtreeLeave(p); - sqlite3_free(sCheck.anRef); - if( sCheck.mallocFailed ){ - sqlite3StrAccumReset(&sCheck.errMsg); - *pnErr = sCheck.nErr+1; - return 0; - } - *pnErr = sCheck.nErr; - if( sCheck.nErr==0 ) sqlite3StrAccumReset(&sCheck.errMsg); - return sqlite3StrAccumFinish(&sCheck.errMsg); + sqlite3_free(p); + return SQLITE_OK; } -#endif /* SQLITE_OMIT_INTEGRITY_CHECK */ /* -** Return the full pathname of the underlying database file. +** Change the limit on the number of pages allowed in the cache. ** -** The pager filename is invariant as long as the pager is -** open so it is safe to access without the BtShared mutex. +** The maximum number of cache pages is set to the absolute +** value of mxPage. If mxPage is negative, the pager will +** operate asynchronously - it will not stop to do fsync()s +** to insure data is written to the disk surface before +** continuing. Transactions still work if synchronous is off, +** and the database cannot be corrupted if this program +** crashes. But if the operating system crashes or there is +** an abrupt power failure when synchronous is off, the database +** could be left in an inconsistent and unrecoverable state. +** Synchronous is on by default so database corruption is not +** normally a worry. */ -SQLITE_PRIVATE const char *sqlite3BtreeGetFilename(Btree *p){ - assert( p->pBt->pPager!=0 ); - return sqlite3PagerFilename(p->pBt->pPager); +SQLITE_PRIVATE int sqlite3BtreeSetCacheSize(Btree *p, int mxPage){ + BtShared *pBt = p->pBt; + assert( sqlite3_mutex_held(p->db->mutex) ); + sqlite3BtreeEnter(p); + sqlite3PagerSetCachesize(pBt->pPager, mxPage); + sqlite3BtreeLeave(p); + return SQLITE_OK; } /* -** Return the pathname of the journal file for this database. The return -** value of this routine is the same regardless of whether the journal file -** has been created or not. -** -** The pager journal filename is invariant as long as the pager is -** open so it is safe to access without the BtShared mutex. +** Change the way data is synced to disk in order to increase or decrease +** how well the database resists damage due to OS crashes and power +** failures. Level 1 is the same as asynchronous (no syncs() occur and +** there is a high probability of damage) Level 2 is the default. There +** is a very low but non-zero probability of damage. Level 3 reduces the +** probability of damage to near zero but with a write performance reduction. */ -SQLITE_PRIVATE const char *sqlite3BtreeGetJournalname(Btree *p){ - assert( p->pBt->pPager!=0 ); - return sqlite3PagerJournalname(p->pBt->pPager); +#ifndef SQLITE_OMIT_PAGER_PRAGMAS +SQLITE_PRIVATE int sqlite3BtreeSetSafetyLevel( + Btree *p, /* The btree to set the safety level on */ + int level, /* PRAGMA synchronous. 1=OFF, 2=NORMAL, 3=FULL */ + int fullSync, /* PRAGMA fullfsync. */ + int ckptFullSync /* PRAGMA checkpoint_fullfync */ +){ + BtShared *pBt = p->pBt; + assert( sqlite3_mutex_held(p->db->mutex) ); + assert( level>=1 && level<=3 ); + sqlite3BtreeEnter(p); + sqlite3PagerSetSafetyLevel(pBt->pPager, level, fullSync, ckptFullSync); + sqlite3BtreeLeave(p); + return SQLITE_OK; } +#endif /* -** Return non-zero if a transaction is active. +** Return TRUE if the given btree is set to safety level 1. In other +** words, return TRUE if no sync() occurs on the disk files. */ -SQLITE_PRIVATE int sqlite3BtreeIsInTrans(Btree *p){ - assert( p==0 || sqlite3_mutex_held(p->db->mutex) ); - return (p && (p->inTrans==TRANS_WRITE)); +SQLITE_PRIVATE int sqlite3BtreeSyncDisabled(Btree *p){ + BtShared *pBt = p->pBt; + int rc; + assert( sqlite3_mutex_held(p->db->mutex) ); + sqlite3BtreeEnter(p); + assert( pBt && pBt->pPager ); + rc = sqlite3PagerNosync(pBt->pPager); + sqlite3BtreeLeave(p); + return rc; } /* -** Return non-zero if a read (or write) transaction is active. +** Change the default pages size and the number of reserved bytes per page. +** Or, if the page size has already been fixed, return SQLITE_READONLY +** without changing anything. +** +** The page size must be a power of 2 between 512 and 65536. If the page +** size supplied does not meet this constraint then the page size is not +** changed. +** +** Page sizes are constrained to be a power of two so that the region +** of the database file used for locking (beginning at PENDING_BYTE, +** the first byte past the 1GB boundary, 0x40000000) needs to occur +** at the beginning of a page. +** +** If parameter nReserve is less than zero, then the number of reserved +** bytes per page is left unchanged. +** +** If the iFix!=0 then the BTS_PAGESIZE_FIXED flag is set so that the page size +** and autovacuum mode can no longer be changed. */ -SQLITE_PRIVATE int sqlite3BtreeIsInReadTrans(Btree *p){ - assert( p ); - assert( sqlite3_mutex_held(p->db->mutex) ); - return p->inTrans!=TRANS_NONE; +SQLITE_PRIVATE int sqlite3BtreeSetPageSize(Btree *p, int pageSize, int nReserve, int iFix){ + int rc = SQLITE_OK; + BtShared *pBt = p->pBt; + assert( nReserve>=-1 && nReserve<=255 ); + sqlite3BtreeEnter(p); + if( pBt->btsFlags & BTS_PAGESIZE_FIXED ){ + sqlite3BtreeLeave(p); + return SQLITE_READONLY; + } + if( nReserve<0 ){ + nReserve = pBt->pageSize - pBt->usableSize; + } + assert( nReserve>=0 && nReserve<=255 ); + if( pageSize>=512 && pageSize<=SQLITE_MAX_PAGE_SIZE && + ((pageSize-1)&pageSize)==0 ){ + assert( (pageSize & 7)==0 ); + assert( !pBt->pPage1 && !pBt->pCursor ); + pBt->pageSize = (u32)pageSize; + freeTempSpace(pBt); + } + rc = sqlite3PagerSetPagesize(pBt->pPager, &pBt->pageSize, nReserve); + pBt->usableSize = pBt->pageSize - (u16)nReserve; + if( iFix ) pBt->btsFlags |= BTS_PAGESIZE_FIXED; + sqlite3BtreeLeave(p); + return rc; } -SQLITE_PRIVATE int sqlite3BtreeIsInBackup(Btree *p){ - assert( p ); - assert( sqlite3_mutex_held(p->db->mutex) ); - return p->nBackup!=0; +/* +** Return the currently defined page size +*/ +SQLITE_PRIVATE int sqlite3BtreeGetPageSize(Btree *p){ + return p->pBt->pageSize; } +#if !defined(SQLITE_OMIT_PAGER_PRAGMAS) || !defined(SQLITE_OMIT_VACUUM) /* -** This function returns a pointer to a blob of memory associated with -** a single shared-btree. The memory is used by client code for its own -** purposes (for example, to store a high-level schema associated with -** the shared-btree). The btree layer manages reference counting issues. -** -** The first time this is called on a shared-btree, nBytes bytes of memory -** are allocated, zeroed, and returned to the caller. For each subsequent -** call the nBytes parameter is ignored and a pointer to the same blob -** of memory returned. -** -** If the nBytes parameter is 0 and the blob of memory has not yet been -** allocated, a null pointer is returned. If the blob has already been -** allocated, it is returned as normal. -** -** Just before the shared-btree is closed, the function passed as the -** xFree argument when the memory allocation was made is invoked on the -** blob of allocated memory. This function should not call sqlite3_free() -** on the memory, the btree layer does that. +** Return the number of bytes of space at the end of every page that +** are intentually left unused. This is the "reserved" space that is +** sometimes used by extensions. */ -SQLITE_PRIVATE void *sqlite3BtreeSchema(Btree *p, int nBytes, void(*xFree)(void *)){ - BtShared *pBt = p->pBt; +SQLITE_PRIVATE int sqlite3BtreeGetReserve(Btree *p){ + int n; sqlite3BtreeEnter(p); - if( !pBt->pSchema && nBytes ){ - pBt->pSchema = sqlite3MallocZero(nBytes); - pBt->xFreeSchema = xFree; - } + n = p->pBt->pageSize - p->pBt->usableSize; sqlite3BtreeLeave(p); - return pBt->pSchema; + return n; } /* -** Return SQLITE_LOCKED_SHAREDCACHE if another user of the same shared -** btree as the argument handle holds an exclusive lock on the -** sqlite_master table. Otherwise SQLITE_OK. +** Set the maximum page count for a database if mxPage is positive. +** No changes are made if mxPage is 0 or negative. +** Regardless of the value of mxPage, return the maximum page count. */ -SQLITE_PRIVATE int sqlite3BtreeSchemaLocked(Btree *p){ - int rc; - assert( sqlite3_mutex_held(p->db->mutex) ); +SQLITE_PRIVATE int sqlite3BtreeMaxPageCount(Btree *p, int mxPage){ + int n; sqlite3BtreeEnter(p); - rc = querySharedCacheTableLock(p, MASTER_ROOT, READ_LOCK); - assert( rc==SQLITE_OK || rc==SQLITE_LOCKED_SHAREDCACHE ); + n = sqlite3PagerMaxPageCount(p->pBt->pPager, mxPage); sqlite3BtreeLeave(p); - return rc; + return n; } +/* +** Set the BTS_SECURE_DELETE flag if newFlag is 0 or 1. If newFlag is -1, +** then make no changes. Always return the value of the BTS_SECURE_DELETE +** setting after the change. +*/ +SQLITE_PRIVATE int sqlite3BtreeSecureDelete(Btree *p, int newFlag){ + int b; + if( p==0 ) return 0; + sqlite3BtreeEnter(p); + if( newFlag>=0 ){ + p->pBt->btsFlags &= ~BTS_SECURE_DELETE; + if( newFlag ) p->pBt->btsFlags |= BTS_SECURE_DELETE; + } + b = (p->pBt->btsFlags & BTS_SECURE_DELETE)!=0; + sqlite3BtreeLeave(p); + return b; +} +#endif /* !defined(SQLITE_OMIT_PAGER_PRAGMAS) || !defined(SQLITE_OMIT_VACUUM) */ -#ifndef SQLITE_OMIT_SHARED_CACHE /* -** Obtain a lock on the table whose root page is iTab. The -** lock is a write lock if isWritelock is true or a read lock -** if it is false. +** Change the 'auto-vacuum' property of the database. If the 'autoVacuum' +** parameter is non-zero, then auto-vacuum mode is enabled. If zero, it +** is disabled. The default value for the auto-vacuum property is +** determined by the SQLITE_DEFAULT_AUTOVACUUM macro. */ -SQLITE_PRIVATE int sqlite3BtreeLockTable(Btree *p, int iTab, u8 isWriteLock){ +SQLITE_PRIVATE int sqlite3BtreeSetAutoVacuum(Btree *p, int autoVacuum){ +#ifdef SQLITE_OMIT_AUTOVACUUM + return SQLITE_READONLY; +#else + BtShared *pBt = p->pBt; int rc = SQLITE_OK; - if( p->sharable ){ - u8 lockType = READ_LOCK + isWriteLock; - assert( READ_LOCK+1==WRITE_LOCK ); - assert( isWriteLock==0 || isWriteLock==1 ); - sqlite3BtreeEnter(p); - rc = querySharedCacheTableLock(p, iTab, lockType); - if( rc==SQLITE_OK ){ - rc = setSharedCacheTableLock(p, iTab, lockType); - } - sqlite3BtreeLeave(p); + u8 av = (u8)autoVacuum; + + sqlite3BtreeEnter(p); + if( (pBt->btsFlags & BTS_PAGESIZE_FIXED)!=0 && (av ?1:0)!=pBt->autoVacuum ){ + rc = SQLITE_READONLY; + }else{ + pBt->autoVacuum = av ?1:0; + pBt->incrVacuum = av==2 ?1:0; } + sqlite3BtreeLeave(p); return rc; -} #endif +} -#ifndef SQLITE_OMIT_INCRBLOB /* -** Argument pCsr must be a cursor opened for writing on an -** INTKEY table currently pointing at a valid table entry. -** This function modifies the data stored as part of that entry. -** Only the data content may only be modified, it is not possible -** to change the length of the data stored. +** Return the value of the 'auto-vacuum' property. If auto-vacuum is +** enabled 1 is returned. Otherwise 0. */ -SQLITE_PRIVATE int sqlite3BtreePutData(BtCursor *pCsr, u32 offset, u32 amt, void *z){ +SQLITE_PRIVATE int sqlite3BtreeGetAutoVacuum(Btree *p){ +#ifdef SQLITE_OMIT_AUTOVACUUM + return BTREE_AUTOVACUUM_NONE; +#else int rc; + sqlite3BtreeEnter(p); + rc = ( + (!p->pBt->autoVacuum)?BTREE_AUTOVACUUM_NONE: + (!p->pBt->incrVacuum)?BTREE_AUTOVACUUM_FULL: + BTREE_AUTOVACUUM_INCR + ); + sqlite3BtreeLeave(p); + return rc; +#endif +} - assert( cursorHoldsMutex(pCsr) ); - assert( sqlite3_mutex_held(pCsr->pBtree->db->mutex) ); - assert(pCsr->isIncrblobHandle); - restoreCursorPosition(pCsr); - assert( pCsr->eState!=CURSOR_REQUIRESEEK ); - if( pCsr->eState!=CURSOR_VALID ){ - return SQLITE_ABORT; - } +/* +** Get a reference to pPage1 of the database file. This will +** also acquire a readlock on that file. +** +** SQLITE_OK is returned on success. If the file is not a +** well-formed database file, then SQLITE_CORRUPT is returned. +** SQLITE_BUSY is returned if the database is locked. SQLITE_NOMEM +** is returned if we run out of memory. +*/ +static int lockBtree(BtShared *pBt){ + int rc; /* Result code from subfunctions */ + MemPage *pPage1; /* Page 1 of the database file */ + int nPage; /* Number of pages in the database */ + int nPageFile = 0; /* Number of pages in the database file */ + int nPageHeader; /* Number of pages in the database according to hdr */ - /* Check some preconditions: - ** (a) the cursor is open for writing, - ** (b) there is no read-lock on the table being modified and - ** (c) the cursor points at a valid row of an intKey table. + assert( sqlite3_mutex_held(pBt->mutex) ); + assert( pBt->pPage1==0 ); + rc = sqlite3PagerSharedLock(pBt->pPager); + if( rc!=SQLITE_OK ) return rc; + rc = btreeGetPage(pBt, 1, &pPage1, 0); + if( rc!=SQLITE_OK ) return rc; + + /* Do some checking to help insure the file we opened really is + ** a valid database file. */ - if( !pCsr->wrFlag ){ - return SQLITE_READONLY; + nPage = nPageHeader = get4byte(28+(u8*)pPage1->aData); + sqlite3PagerPagecount(pBt->pPager, &nPageFile); + if( nPage==0 || memcmp(24+(u8*)pPage1->aData, 92+(u8*)pPage1->aData,4)!=0 ){ + nPage = nPageFile; } - assert( !pCsr->pBt->readOnly - && pCsr->pBt->inTransaction==TRANS_WRITE ); - rc = checkForReadConflicts(pCsr->pBtree, pCsr->pgnoRoot, pCsr, 0); - if( rc!=SQLITE_OK ){ - /* The table pCur points to has a read lock */ - assert( rc==SQLITE_LOCKED_SHAREDCACHE ); - return rc; + if( nPage>0 ){ + u32 pageSize; + u32 usableSize; + u8 *page1 = pPage1->aData; + rc = SQLITE_NOTADB; + if( memcmp(page1, zMagicHeader, 16)!=0 ){ + goto page1_init_failed; + } + +#ifdef SQLITE_OMIT_WAL + if( page1[18]>1 ){ + pBt->btsFlags |= BTS_READ_ONLY; + } + if( page1[19]>1 ){ + goto page1_init_failed; + } +#else + if( page1[18]>2 ){ + pBt->btsFlags |= BTS_READ_ONLY; + } + if( page1[19]>2 ){ + goto page1_init_failed; + } + + /* If the write version is set to 2, this database should be accessed + ** in WAL mode. If the log is not already open, open it now. Then + ** return SQLITE_OK and return without populating BtShared.pPage1. + ** The caller detects this and calls this function again. This is + ** required as the version of page 1 currently in the page1 buffer + ** may not be the latest version - there may be a newer one in the log + ** file. + */ + if( page1[19]==2 && (pBt->btsFlags & BTS_NO_WAL)==0 ){ + int isOpen = 0; + rc = sqlite3PagerOpenWal(pBt->pPager, &isOpen); + if( rc!=SQLITE_OK ){ + goto page1_init_failed; + }else if( isOpen==0 ){ + releasePage(pPage1); + return SQLITE_OK; + } + rc = SQLITE_NOTADB; + } +#endif + + /* The maximum embedded fraction must be exactly 25%. And the minimum + ** embedded fraction must be 12.5% for both leaf-data and non-leaf-data. + ** The original design allowed these amounts to vary, but as of + ** version 3.6.0, we require them to be fixed. + */ + if( memcmp(&page1[21], "\100\040\040",3)!=0 ){ + goto page1_init_failed; + } + pageSize = (page1[16]<<8) | (page1[17]<<16); + if( ((pageSize-1)&pageSize)!=0 + || pageSize>SQLITE_MAX_PAGE_SIZE + || pageSize<=256 + ){ + goto page1_init_failed; + } + assert( (pageSize & 7)==0 ); + usableSize = pageSize - page1[20]; + if( (u32)pageSize!=pBt->pageSize ){ + /* After reading the first page of the database assuming a page size + ** of BtShared.pageSize, we have discovered that the page-size is + ** actually pageSize. Unlock the database, leave pBt->pPage1 at + ** zero and return SQLITE_OK. The caller will call this function + ** again with the correct page-size. + */ + releasePage(pPage1); + pBt->usableSize = usableSize; + pBt->pageSize = pageSize; + freeTempSpace(pBt); + rc = sqlite3PagerSetPagesize(pBt->pPager, &pBt->pageSize, + pageSize-usableSize); + return rc; + } + if( (pBt->db->flags & SQLITE_RecoveryMode)==0 && nPage>nPageFile ){ + rc = SQLITE_CORRUPT_BKPT; + goto page1_init_failed; + } + if( usableSize<480 ){ + goto page1_init_failed; + } + pBt->pageSize = pageSize; + pBt->usableSize = usableSize; +#ifndef SQLITE_OMIT_AUTOVACUUM + pBt->autoVacuum = (get4byte(&page1[36 + 4*4])?1:0); + pBt->incrVacuum = (get4byte(&page1[36 + 7*4])?1:0); +#endif } - if( pCsr->eState==CURSOR_INVALID || !pCsr->apPage[pCsr->iPage]->intKey ){ - return SQLITE_ERROR; + + /* maxLocal is the maximum amount of payload to store locally for + ** a cell. Make sure it is small enough so that at least minFanout + ** cells can will fit on one page. We assume a 10-byte page header. + ** Besides the payload, the cell must store: + ** 2-byte pointer to the cell + ** 4-byte child pointer + ** 9-byte nKey value + ** 4-byte nData value + ** 4-byte overflow page pointer + ** So a cell consists of a 2-byte pointer, a header which is as much as + ** 17 bytes long, 0 to N bytes of payload, and an optional 4 byte overflow + ** page pointer. + */ + pBt->maxLocal = (u16)((pBt->usableSize-12)*64/255 - 23); + pBt->minLocal = (u16)((pBt->usableSize-12)*32/255 - 23); + pBt->maxLeaf = (u16)(pBt->usableSize - 35); + pBt->minLeaf = (u16)((pBt->usableSize-12)*32/255 - 23); + if( pBt->maxLocal>127 ){ + pBt->max1bytePayload = 127; + }else{ + pBt->max1bytePayload = (u8)pBt->maxLocal; } + assert( pBt->maxLeaf + 23 <= MX_CELL_SIZE(pBt) ); + pBt->pPage1 = pPage1; + pBt->nPage = nPage; + return SQLITE_OK; - return accessPayload(pCsr, offset, amt, (unsigned char *)z, 0, 1); +page1_init_failed: + releasePage(pPage1); + pBt->pPage1 = 0; + return rc; } -/* -** Set a flag on this cursor to cache the locations of pages from the -** overflow list for the current row. This is used by cursors opened -** for incremental blob IO only. +/* +** If there are no outstanding cursors and we are not in the middle +** of a transaction but there is a read lock on the database, then +** this routine unrefs the first page of the database file which +** has the effect of releasing the read lock. ** -** This function sets a flag only. The actual page location cache -** (stored in BtCursor.aOverflow[]) is allocated and used by function -** accessPayload() (the worker function for sqlite3BtreeData() and -** sqlite3BtreePutData()). +** If there is a transaction in progress, this routine is a no-op. */ -SQLITE_PRIVATE void sqlite3BtreeCacheOverflow(BtCursor *pCur){ - assert( cursorHoldsMutex(pCur) ); - assert( sqlite3_mutex_held(pCur->pBtree->db->mutex) ); - assert(!pCur->isIncrblobHandle); - assert(!pCur->aOverflow); - pCur->isIncrblobHandle = 1; +static void unlockBtreeIfUnused(BtShared *pBt){ + assert( sqlite3_mutex_held(pBt->mutex) ); + assert( pBt->pCursor==0 || pBt->inTransaction>TRANS_NONE ); + if( pBt->inTransaction==TRANS_NONE && pBt->pPage1!=0 ){ + assert( pBt->pPage1->aData ); + assert( sqlite3PagerRefcount(pBt->pPager)==1 ); + assert( pBt->pPage1->aData ); + releasePage(pBt->pPage1); + pBt->pPage1 = 0; + } } -#endif -/************** End of btree.c ***********************************************/ -/************** Begin file backup.c ******************************************/ /* -** 2009 January 28 -** -** The author disclaims copyright to this source code. In place of -** a legal notice, here is a blessing: -** -** May you do good and not evil. -** May you find forgiveness for yourself and forgive others. -** May you share freely, never taking more than you give. -** -************************************************************************* -** This file contains the implementation of the sqlite3_backup_XXX() -** API functions and the related features. -** -** $Id: backup.c,v 1.17 2009/06/03 11:25:07 danielk1977 Exp $ +** If pBt points to an empty file then convert that empty file +** into a new empty database by initializing the first page of +** the database. */ +static int newDatabase(BtShared *pBt){ + MemPage *pP1; + unsigned char *data; + int rc; -/* Macro to find the minimum of two numeric values. -*/ -#ifndef MIN -# define MIN(x,y) ((x)<(y)?(x):(y)) + assert( sqlite3_mutex_held(pBt->mutex) ); + if( pBt->nPage>0 ){ + return SQLITE_OK; + } + pP1 = pBt->pPage1; + assert( pP1!=0 ); + data = pP1->aData; + rc = sqlite3PagerWrite(pP1->pDbPage); + if( rc ) return rc; + memcpy(data, zMagicHeader, sizeof(zMagicHeader)); + assert( sizeof(zMagicHeader)==16 ); + data[16] = (u8)((pBt->pageSize>>8)&0xff); + data[17] = (u8)((pBt->pageSize>>16)&0xff); + data[18] = 1; + data[19] = 1; + assert( pBt->usableSize<=pBt->pageSize && pBt->usableSize+255>=pBt->pageSize); + data[20] = (u8)(pBt->pageSize - pBt->usableSize); + data[21] = 64; + data[22] = 32; + data[23] = 32; + memset(&data[24], 0, 100-24); + zeroPage(pP1, PTF_INTKEY|PTF_LEAF|PTF_LEAFDATA ); + pBt->btsFlags |= BTS_PAGESIZE_FIXED; +#ifndef SQLITE_OMIT_AUTOVACUUM + assert( pBt->autoVacuum==1 || pBt->autoVacuum==0 ); + assert( pBt->incrVacuum==1 || pBt->incrVacuum==0 ); + put4byte(&data[36 + 4*4], pBt->autoVacuum); + put4byte(&data[36 + 7*4], pBt->incrVacuum); #endif + pBt->nPage = 1; + data[31] = 1; + return SQLITE_OK; +} /* -** Structure allocated for each backup operation. -*/ -struct sqlite3_backup { - sqlite3* pDestDb; /* Destination database handle */ - Btree *pDest; /* Destination b-tree file */ - u32 iDestSchema; /* Original schema cookie in destination */ - int bDestLocked; /* True once a write-transaction is open on pDest */ - - Pgno iNext; /* Page number of the next source page to copy */ - sqlite3* pSrcDb; /* Source database handle */ - Btree *pSrc; /* Source b-tree file */ - - int rc; /* Backup process error code */ - - /* These two variables are set by every call to backup_step(). They are - ** read by calls to backup_remaining() and backup_pagecount(). - */ - Pgno nRemaining; /* Number of pages left to copy */ - Pgno nPagecount; /* Total number of pages to copy */ - - int isAttached; /* True once backup has been registered with pager */ - sqlite3_backup *pNext; /* Next backup associated with source pager */ -}; - -/* -** THREAD SAFETY NOTES: -** -** Once it has been created using backup_init(), a single sqlite3_backup -** structure may be accessed via two groups of thread-safe entry points: +** Attempt to start a new transaction. A write-transaction +** is started if the second argument is nonzero, otherwise a read- +** transaction. If the second argument is 2 or more and exclusive +** transaction is started, meaning that no other process is allowed +** to access the database. A preexisting transaction may not be +** upgraded to exclusive by calling this routine a second time - the +** exclusivity flag only works for a new transaction. ** -** * Via the sqlite3_backup_XXX() API function backup_step() and -** backup_finish(). Both these functions obtain the source database -** handle mutex and the mutex associated with the source BtShared -** structure, in that order. +** A write-transaction must be started before attempting any +** changes to the database. None of the following routines +** will work unless a transaction is started first: ** -** * Via the BackupUpdate() and BackupRestart() functions, which are -** invoked by the pager layer to report various state changes in -** the page cache associated with the source database. The mutex -** associated with the source database BtShared structure will always -** be held when either of these functions are invoked. +** sqlite3BtreeCreateTable() +** sqlite3BtreeCreateIndex() +** sqlite3BtreeClearTable() +** sqlite3BtreeDropTable() +** sqlite3BtreeInsert() +** sqlite3BtreeDelete() +** sqlite3BtreeUpdateMeta() ** -** The other sqlite3_backup_XXX() API functions, backup_remaining() and -** backup_pagecount() are not thread-safe functions. If they are called -** while some other thread is calling backup_step() or backup_finish(), -** the values returned may be invalid. There is no way for a call to -** BackupUpdate() or BackupRestart() to interfere with backup_remaining() -** or backup_pagecount(). +** If an initial attempt to acquire the lock fails because of lock contention +** and the database was previously unlocked, then invoke the busy handler +** if there is one. But if there was previously a read-lock, do not +** invoke the busy handler - just return SQLITE_BUSY. SQLITE_BUSY is +** returned when there is already a read-lock in order to avoid a deadlock. ** -** Depending on the SQLite configuration, the database handles and/or -** the Btree objects may have their own mutexes that require locking. -** Non-sharable Btrees (in-memory databases for example), do not have -** associated mutexes. +** Suppose there are two processes A and B. A has a read lock and B has +** a reserved lock. B tries to promote to exclusive but is blocked because +** of A's read lock. A tries to promote to reserved but is blocked by B. +** One or the other of the two processes must give way or there can be +** no progress. By returning SQLITE_BUSY and not invoking the busy callback +** when A already has a read lock, we encourage A to give up and let B +** proceed. */ +SQLITE_PRIVATE int sqlite3BtreeBeginTrans(Btree *p, int wrflag){ + sqlite3 *pBlock = 0; + BtShared *pBt = p->pBt; + int rc = SQLITE_OK; -/* -** Return a pointer corresponding to database zDb (i.e. "main", "temp") -** in connection handle pDb. If such a database cannot be found, return -** a NULL pointer and write an error message to pErrorDb. -** -** If the "temp" database is requested, it may need to be opened by this -** function. If an error occurs while doing so, return 0 and write an -** error message to pErrorDb. -*/ -static Btree *findBtree(sqlite3 *pErrorDb, sqlite3 *pDb, const char *zDb){ - int i = sqlite3FindDbName(pDb, zDb); + sqlite3BtreeEnter(p); + btreeIntegrity(p); - if( i==1 ){ - Parse *pParse; - int rc = 0; - pParse = sqlite3StackAllocZero(pErrorDb, sizeof(*pParse)); - if( pParse==0 ){ - sqlite3Error(pErrorDb, SQLITE_NOMEM, "out of memory"); - rc = SQLITE_NOMEM; - }else{ - pParse->db = pDb; - if( sqlite3OpenTempDatabase(pParse) ){ - sqlite3ErrorClear(pParse); - sqlite3Error(pErrorDb, pParse->rc, "%s", pParse->zErrMsg); - rc = SQLITE_ERROR; - } - sqlite3StackFree(pErrorDb, pParse); - } - if( rc ){ - return 0; - } + /* If the btree is already in a write-transaction, or it + ** is already in a read-transaction and a read-transaction + ** is requested, this is a no-op. + */ + if( p->inTrans==TRANS_WRITE || (p->inTrans==TRANS_READ && !wrflag) ){ + goto trans_begun; } - if( i<0 ){ - sqlite3Error(pErrorDb, SQLITE_ERROR, "unknown database %s", zDb); - return 0; + /* Write transactions are not possible on a read-only database */ + if( (pBt->btsFlags & BTS_READ_ONLY)!=0 && wrflag ){ + rc = SQLITE_READONLY; + goto trans_begun; } - return pDb->aDb[i].pBt; -} - -/* -** Create an sqlite3_backup process to copy the contents of zSrcDb from -** connection handle pSrcDb to zDestDb in pDestDb. If successful, return -** a pointer to the new sqlite3_backup object. -** -** If an error occurs, NULL is returned and an error code and error message -** stored in database handle pDestDb. -*/ -SQLITE_API sqlite3_backup *sqlite3_backup_init( - sqlite3* pDestDb, /* Database to write to */ - const char *zDestDb, /* Name of database within pDestDb */ - sqlite3* pSrcDb, /* Database connection to read from */ - const char *zSrcDb /* Name of database within pSrcDb */ -){ - sqlite3_backup *p; /* Value to return */ - - /* Lock the source database handle. The destination database - ** handle is not locked in this routine, but it is locked in - ** sqlite3_backup_step(). The user is required to ensure that no - ** other thread accesses the destination handle for the duration - ** of the backup operation. Any attempt to use the destination - ** database connection while a backup is in progress may cause - ** a malfunction or a deadlock. +#ifndef SQLITE_OMIT_SHARED_CACHE + /* If another database handle has already opened a write transaction + ** on this shared-btree structure and a second write transaction is + ** requested, return SQLITE_LOCKED. */ - sqlite3_mutex_enter(pSrcDb->mutex); - sqlite3_mutex_enter(pDestDb->mutex); - - if( pSrcDb==pDestDb ){ - sqlite3Error( - pDestDb, SQLITE_ERROR, "source and destination must be distinct" - ); - p = 0; - }else { - /* Allocate space for a new sqlite3_backup object */ - p = (sqlite3_backup *)sqlite3_malloc(sizeof(sqlite3_backup)); - if( !p ){ - sqlite3Error(pDestDb, SQLITE_NOMEM, 0); + if( (wrflag && pBt->inTransaction==TRANS_WRITE) + || (pBt->btsFlags & BTS_PENDING)!=0 + ){ + pBlock = pBt->pWriter->db; + }else if( wrflag>1 ){ + BtLock *pIter; + for(pIter=pBt->pLock; pIter; pIter=pIter->pNext){ + if( pIter->pBtree!=p ){ + pBlock = pIter->pBtree->db; + break; + } } } + if( pBlock ){ + sqlite3ConnectionBlocked(p->db, pBlock); + rc = SQLITE_LOCKED_SHAREDCACHE; + goto trans_begun; + } +#endif - /* If the allocation succeeded, populate the new object. */ - if( p ){ - memset(p, 0, sizeof(sqlite3_backup)); - p->pSrc = findBtree(pDestDb, pSrcDb, zSrcDb); - p->pDest = findBtree(pDestDb, pDestDb, zDestDb); - p->pDestDb = pDestDb; - p->pSrcDb = pSrcDb; - p->iNext = 1; - p->isAttached = 0; + /* Any read-only or read-write transaction implies a read-lock on + ** page 1. So if some other shared-cache client already has a write-lock + ** on page 1, the transaction cannot be opened. */ + rc = querySharedCacheTableLock(p, MASTER_ROOT, READ_LOCK); + if( SQLITE_OK!=rc ) goto trans_begun; + + pBt->btsFlags &= ~BTS_INITIALLY_EMPTY; + if( pBt->nPage==0 ) pBt->btsFlags |= BTS_INITIALLY_EMPTY; + do { + /* Call lockBtree() until either pBt->pPage1 is populated or + ** lockBtree() returns something other than SQLITE_OK. lockBtree() + ** may return SQLITE_OK but leave pBt->pPage1 set to 0 if after + ** reading page 1 it discovers that the page-size of the database + ** file is not pBt->pageSize. In this case lockBtree() will update + ** pBt->pageSize to the page-size of the file on disk. + */ + while( pBt->pPage1==0 && SQLITE_OK==(rc = lockBtree(pBt)) ); + + if( rc==SQLITE_OK && wrflag ){ + if( (pBt->btsFlags & BTS_READ_ONLY)!=0 ){ + rc = SQLITE_READONLY; + }else{ + rc = sqlite3PagerBegin(pBt->pPager,wrflag>1,sqlite3TempInMemory(p->db)); + if( rc==SQLITE_OK ){ + rc = newDatabase(pBt); + } + } + } + + if( rc!=SQLITE_OK ){ + unlockBtreeIfUnused(pBt); + } + }while( (rc&0xFF)==SQLITE_BUSY && pBt->inTransaction==TRANS_NONE && + btreeInvokeBusyHandler(pBt) ); - if( 0==p->pSrc || 0==p->pDest ){ - /* One (or both) of the named databases did not exist. An error has - ** already been written into the pDestDb handle. All that is left - ** to do here is free the sqlite3_backup structure. + if( rc==SQLITE_OK ){ + if( p->inTrans==TRANS_NONE ){ + pBt->nTransaction++; +#ifndef SQLITE_OMIT_SHARED_CACHE + if( p->sharable ){ + assert( p->lock.pBtree==p && p->lock.iTable==1 ); + p->lock.eLock = READ_LOCK; + p->lock.pNext = pBt->pLock; + pBt->pLock = &p->lock; + } +#endif + } + p->inTrans = (wrflag?TRANS_WRITE:TRANS_READ); + if( p->inTrans>pBt->inTransaction ){ + pBt->inTransaction = p->inTrans; + } + if( wrflag ){ + MemPage *pPage1 = pBt->pPage1; +#ifndef SQLITE_OMIT_SHARED_CACHE + assert( !pBt->pWriter ); + pBt->pWriter = p; + pBt->btsFlags &= ~BTS_EXCLUSIVE; + if( wrflag>1 ) pBt->btsFlags |= BTS_EXCLUSIVE; +#endif + + /* If the db-size header field is incorrect (as it may be if an old + ** client has been writing the database file), update it now. Doing + ** this sooner rather than later means the database size can safely + ** re-read the database size from page 1 if a savepoint or transaction + ** rollback occurs within the transaction. */ - sqlite3_free(p); - p = 0; + if( pBt->nPage!=get4byte(&pPage1->aData[28]) ){ + rc = sqlite3PagerWrite(pPage1->pDbPage); + if( rc==SQLITE_OK ){ + put4byte(&pPage1->aData[28], pBt->nPage); + } + } } } - if( p ){ - p->pSrc->nBackup++; + + +trans_begun: + if( rc==SQLITE_OK && wrflag ){ + /* This call makes sure that the pager has the correct number of + ** open savepoints. If the second parameter is greater than 0 and + ** the sub-journal is not already open, then it will be opened here. + */ + rc = sqlite3PagerOpenSavepoint(pBt->pPager, p->db->nSavepoint); } - sqlite3_mutex_leave(pDestDb->mutex); - sqlite3_mutex_leave(pSrcDb->mutex); - return p; + btreeIntegrity(p); + sqlite3BtreeLeave(p); + return rc; } -/* -** Argument rc is an SQLite error code. Return true if this error is -** considered fatal if encountered during a backup operation. All errors -** are considered fatal except for SQLITE_BUSY and SQLITE_LOCKED. -*/ -static int isFatalError(int rc){ - return (rc!=SQLITE_OK && rc!=SQLITE_BUSY && ALWAYS(rc!=SQLITE_LOCKED)); -} +#ifndef SQLITE_OMIT_AUTOVACUUM /* -** Parameter zSrcData points to a buffer containing the data for -** page iSrcPg from the source database. Copy this data into the -** destination database. +** Set the pointer-map entries for all children of page pPage. Also, if +** pPage contains cells that point to overflow pages, set the pointer +** map entries for the overflow pages as well. */ -static int backupOnePage(sqlite3_backup *p, Pgno iSrcPg, const u8 *zSrcData){ - Pager * const pDestPager = sqlite3BtreePager(p->pDest); - const int nSrcPgsz = sqlite3BtreeGetPageSize(p->pSrc); - int nDestPgsz = sqlite3BtreeGetPageSize(p->pDest); - const int nCopy = MIN(nSrcPgsz, nDestPgsz); - const i64 iEnd = (i64)iSrcPg*(i64)nSrcPgsz; - - int rc = SQLITE_OK; - i64 iOff; - - assert( p->bDestLocked ); - assert( !isFatalError(p->rc) ); - assert( iSrcPg!=PENDING_BYTE_PAGE(p->pSrc->pBt) ); - assert( zSrcData ); +static int setChildPtrmaps(MemPage *pPage){ + int i; /* Counter variable */ + int nCell; /* Number of cells in page pPage */ + int rc; /* Return code */ + BtShared *pBt = pPage->pBt; + u8 isInitOrig = pPage->isInit; + Pgno pgno = pPage->pgno; - /* Catch the case where the destination is an in-memory database and the - ** page sizes of the source and destination differ. - */ - if( nSrcPgsz!=nDestPgsz && sqlite3PagerIsMemdb(sqlite3BtreePager(p->pDest)) ){ - rc = SQLITE_READONLY; + assert( sqlite3_mutex_held(pPage->pBt->mutex) ); + rc = btreeInitPage(pPage); + if( rc!=SQLITE_OK ){ + goto set_child_ptrmaps_out; } + nCell = pPage->nCell; - /* This loop runs once for each destination page spanned by the source - ** page. For each iteration, variable iOff is set to the byte offset - ** of the destination page. - */ - for(iOff=iEnd-(i64)nSrcPgsz; rc==SQLITE_OK && iOffpDest->pBt) ) continue; - if( SQLITE_OK==(rc = sqlite3PagerGet(pDestPager, iDest, &pDestPg)) - && SQLITE_OK==(rc = sqlite3PagerWrite(pDestPg)) - ){ - const u8 *zIn = &zSrcData[iOff%nSrcPgsz]; - u8 *zDestData = sqlite3PagerGetData(pDestPg); - u8 *zOut = &zDestData[iOff%nDestPgsz]; + for(i=0; ileaf ){ + Pgno childPgno = get4byte(pCell); + ptrmapPut(pBt, childPgno, PTRMAP_BTREE, pgno, &rc); } - sqlite3PagerUnref(pDestPg); } + if( !pPage->leaf ){ + Pgno childPgno = get4byte(&pPage->aData[pPage->hdrOffset+8]); + ptrmapPut(pBt, childPgno, PTRMAP_BTREE, pgno, &rc); + } + +set_child_ptrmaps_out: + pPage->isInit = isInitOrig; return rc; } /* -** If pFile is currently larger than iSize bytes, then truncate it to -** exactly iSize bytes. If pFile is not larger than iSize bytes, then -** this function is a no-op. +** Somewhere on pPage is a pointer to page iFrom. Modify this pointer so +** that it points to iTo. Parameter eType describes the type of pointer to +** be modified, as follows: ** -** Return SQLITE_OK if everything is successful, or an SQLite error -** code if an error occurs. +** PTRMAP_BTREE: pPage is a btree-page. The pointer points at a child +** page of pPage. +** +** PTRMAP_OVERFLOW1: pPage is a btree-page. The pointer points at an overflow +** page pointed to by one of the cells on pPage. +** +** PTRMAP_OVERFLOW2: pPage is an overflow-page. The pointer points at the next +** overflow page in the list. */ -static int backupTruncateFile(sqlite3_file *pFile, i64 iSize){ - i64 iCurrent; - int rc = sqlite3OsFileSize(pFile, &iCurrent); - if( rc==SQLITE_OK && iCurrent>iSize ){ - rc = sqlite3OsTruncate(pFile, iSize); +static int modifyPagePointer(MemPage *pPage, Pgno iFrom, Pgno iTo, u8 eType){ + assert( sqlite3_mutex_held(pPage->pBt->mutex) ); + assert( sqlite3PagerIswriteable(pPage->pDbPage) ); + if( eType==PTRMAP_OVERFLOW2 ){ + /* The pointer is always the first 4 bytes of the page in this case. */ + if( get4byte(pPage->aData)!=iFrom ){ + return SQLITE_CORRUPT_BKPT; + } + put4byte(pPage->aData, iTo); + }else{ + u8 isInitOrig = pPage->isInit; + int i; + int nCell; + + btreeInitPage(pPage); + nCell = pPage->nCell; + + for(i=0; iaData+pPage->maskPage + && iFrom==get4byte(&pCell[info.iOverflow]) + ){ + put4byte(&pCell[info.iOverflow], iTo); + break; + } + }else{ + if( get4byte(pCell)==iFrom ){ + put4byte(pCell, iTo); + break; + } + } + } + + if( i==nCell ){ + if( eType!=PTRMAP_BTREE || + get4byte(&pPage->aData[pPage->hdrOffset+8])!=iFrom ){ + return SQLITE_CORRUPT_BKPT; + } + put4byte(&pPage->aData[pPage->hdrOffset+8], iTo); + } + + pPage->isInit = isInitOrig; } - return rc; + return SQLITE_OK; } -/* -** Register this backup object with the associated source pager for -** callbacks when pages are changed or the cache invalidated. -*/ -static void attachBackupObject(sqlite3_backup *p){ - sqlite3_backup **pp; - assert( sqlite3BtreeHoldsMutex(p->pSrc) ); - pp = sqlite3PagerBackupPtr(sqlite3BtreePager(p->pSrc)); - p->pNext = *pp; - *pp = p; - p->isAttached = 1; -} /* -** Copy nPage pages from the source b-tree to the destination. +** Move the open database page pDbPage to location iFreePage in the +** database. The pDbPage reference remains valid. +** +** The isCommit flag indicates that there is no need to remember that +** the journal needs to be sync()ed before database page pDbPage->pgno +** can be written to. The caller has already promised not to write to that +** page. */ -SQLITE_API int sqlite3_backup_step(sqlite3_backup *p, int nPage){ +static int relocatePage( + BtShared *pBt, /* Btree */ + MemPage *pDbPage, /* Open page to move */ + u8 eType, /* Pointer map 'type' entry for pDbPage */ + Pgno iPtrPage, /* Pointer map 'page-no' entry for pDbPage */ + Pgno iFreePage, /* The location to move pDbPage to */ + int isCommit /* isCommit flag passed to sqlite3PagerMovepage */ +){ + MemPage *pPtrPage; /* The page that contains a pointer to pDbPage */ + Pgno iDbPage = pDbPage->pgno; + Pager *pPager = pBt->pPager; int rc; - sqlite3_mutex_enter(p->pSrcDb->mutex); - sqlite3BtreeEnter(p->pSrc); - if( p->pDestDb ){ - sqlite3_mutex_enter(p->pDestDb->mutex); + assert( eType==PTRMAP_OVERFLOW2 || eType==PTRMAP_OVERFLOW1 || + eType==PTRMAP_BTREE || eType==PTRMAP_ROOTPAGE ); + assert( sqlite3_mutex_held(pBt->mutex) ); + assert( pDbPage->pBt==pBt ); + + /* Move page iDbPage from its current location to page number iFreePage */ + TRACE(("AUTOVACUUM: Moving %d to free page %d (ptr page %d type %d)\n", + iDbPage, iFreePage, iPtrPage, eType)); + rc = sqlite3PagerMovepage(pPager, pDbPage->pDbPage, iFreePage, isCommit); + if( rc!=SQLITE_OK ){ + return rc; } + pDbPage->pgno = iFreePage; - rc = p->rc; - if( !isFatalError(rc) ){ - Pager * const pSrcPager = sqlite3BtreePager(p->pSrc); /* Source pager */ - Pager * const pDestPager = sqlite3BtreePager(p->pDest); /* Dest pager */ - int ii; /* Iterator variable */ - int nSrcPage = -1; /* Size of source db in pages */ - int bCloseTrans = 0; /* True if src db requires unlocking */ + /* If pDbPage was a btree-page, then it may have child pages and/or cells + ** that point to overflow pages. The pointer map entries for all these + ** pages need to be changed. + ** + ** If pDbPage is an overflow page, then the first 4 bytes may store a + ** pointer to a subsequent overflow page. If this is the case, then + ** the pointer map needs to be updated for the subsequent overflow page. + */ + if( eType==PTRMAP_BTREE || eType==PTRMAP_ROOTPAGE ){ + rc = setChildPtrmaps(pDbPage); + if( rc!=SQLITE_OK ){ + return rc; + } + }else{ + Pgno nextOvfl = get4byte(pDbPage->aData); + if( nextOvfl!=0 ){ + ptrmapPut(pBt, nextOvfl, PTRMAP_OVERFLOW2, iFreePage, &rc); + if( rc!=SQLITE_OK ){ + return rc; + } + } + } - /* If the source pager is currently in a write-transaction, return - ** SQLITE_BUSY immediately. - */ - if( p->pDestDb && p->pSrc->pBt->inTransaction==TRANS_WRITE ){ - rc = SQLITE_BUSY; - }else{ - rc = SQLITE_OK; + /* Fix the database pointer on page iPtrPage that pointed at iDbPage so + ** that it points at iFreePage. Also fix the pointer map entry for + ** iPtrPage. + */ + if( eType!=PTRMAP_ROOTPAGE ){ + rc = btreeGetPage(pBt, iPtrPage, &pPtrPage, 0); + if( rc!=SQLITE_OK ){ + return rc; + } + rc = sqlite3PagerWrite(pPtrPage->pDbPage); + if( rc!=SQLITE_OK ){ + releasePage(pPtrPage); + return rc; + } + rc = modifyPagePointer(pPtrPage, iDbPage, iFreePage, eType); + releasePage(pPtrPage); + if( rc==SQLITE_OK ){ + ptrmapPut(pBt, iFreePage, eType, iPtrPage, &rc); } + } + return rc; +} - /* Lock the destination database, if it is not locked already. */ - if( SQLITE_OK==rc && p->bDestLocked==0 - && SQLITE_OK==(rc = sqlite3BtreeBeginTrans(p->pDest, 2)) - ){ - p->bDestLocked = 1; - rc = sqlite3BtreeGetMeta(p->pDest, BTREE_SCHEMA_VERSION, &p->iDestSchema); +/* Forward declaration required by incrVacuumStep(). */ +static int allocateBtreePage(BtShared *, MemPage **, Pgno *, Pgno, u8); + +/* +** Perform a single step of an incremental-vacuum. If successful, +** return SQLITE_OK. If there is no work to do (and therefore no +** point in calling this function again), return SQLITE_DONE. +** +** More specificly, this function attempts to re-organize the +** database so that the last page of the file currently in use +** is no longer in use. +** +** If the nFin parameter is non-zero, this function assumes +** that the caller will keep calling incrVacuumStep() until +** it returns SQLITE_DONE or an error, and that nFin is the +** number of pages the database file will contain after this +** process is complete. If nFin is zero, it is assumed that +** incrVacuumStep() will be called a finite amount of times +** which may or may not empty the freelist. A full autovacuum +** has nFin>0. A "PRAGMA incremental_vacuum" has nFin==0. +*/ +static int incrVacuumStep(BtShared *pBt, Pgno nFin, Pgno iLastPg){ + Pgno nFreeList; /* Number of pages still on the free-list */ + int rc; + + assert( sqlite3_mutex_held(pBt->mutex) ); + assert( iLastPg>nFin ); + + if( !PTRMAP_ISPAGE(pBt, iLastPg) && iLastPg!=PENDING_BYTE_PAGE(pBt) ){ + u8 eType; + Pgno iPtrPage; + + nFreeList = get4byte(&pBt->pPage1->aData[36]); + if( nFreeList==0 ){ + return SQLITE_DONE; } - /* If there is no open read-transaction on the source database, open - ** one now. If a transaction is opened here, then it will be closed - ** before this function exits. - */ - if( rc==SQLITE_OK && 0==sqlite3BtreeIsInReadTrans(p->pSrc) ){ - rc = sqlite3BtreeBeginTrans(p->pSrc, 0); - bCloseTrans = 1; + rc = ptrmapGet(pBt, iLastPg, &eType, &iPtrPage); + if( rc!=SQLITE_OK ){ + return rc; } - - /* Now that there is a read-lock on the source database, query the - ** source pager for the number of pages in the database. - */ - if( rc==SQLITE_OK ){ - rc = sqlite3PagerPagecount(pSrcPager, &nSrcPage); + if( eType==PTRMAP_ROOTPAGE ){ + return SQLITE_CORRUPT_BKPT; } - for(ii=0; (nPage<0 || iiiNext<=(Pgno)nSrcPage && !rc; ii++){ - const Pgno iSrcPg = p->iNext; /* Source page number */ - if( iSrcPg!=PENDING_BYTE_PAGE(p->pSrc->pBt) ){ - DbPage *pSrcPg; /* Source page object */ - rc = sqlite3PagerGet(pSrcPager, iSrcPg, &pSrcPg); - if( rc==SQLITE_OK ){ - rc = backupOnePage(p, iSrcPg, sqlite3PagerGetData(pSrcPg)); - sqlite3PagerUnref(pSrcPg); + + if( eType==PTRMAP_FREEPAGE ){ + if( nFin==0 ){ + /* Remove the page from the files free-list. This is not required + ** if nFin is non-zero. In that case, the free-list will be + ** truncated to zero after this function returns, so it doesn't + ** matter if it still contains some garbage entries. + */ + Pgno iFreePg; + MemPage *pFreePg; + rc = allocateBtreePage(pBt, &pFreePg, &iFreePg, iLastPg, 1); + if( rc!=SQLITE_OK ){ + return rc; } + assert( iFreePg==iLastPg ); + releasePage(pFreePg); } - p->iNext++; - } - if( rc==SQLITE_OK ){ - p->nPagecount = nSrcPage; - p->nRemaining = nSrcPage+1-p->iNext; - if( p->iNext>(Pgno)nSrcPage ){ - rc = SQLITE_DONE; - }else if( !p->isAttached ){ - attachBackupObject(p); - } - } - - if( rc==SQLITE_DONE ){ - const int nSrcPagesize = sqlite3BtreeGetPageSize(p->pSrc); - const int nDestPagesize = sqlite3BtreeGetPageSize(p->pDest); - int nDestTruncate; - - /* Update the schema version field in the destination database. This - ** is to make sure that the schema-version really does change in - ** the case where the source and destination databases have the - ** same schema version. - */ - sqlite3BtreeUpdateMeta(p->pDest, 1, p->iDestSchema+1); - if( p->pDestDb ){ - sqlite3ResetInternalSchema(p->pDestDb, 0); + } else { + Pgno iFreePg; /* Index of free page to move pLastPg to */ + MemPage *pLastPg; + + rc = btreeGetPage(pBt, iLastPg, &pLastPg, 0); + if( rc!=SQLITE_OK ){ + return rc; } - /* Set nDestTruncate to the final number of pages in the destination - ** database. The complication here is that the destination page - ** size may be different to the source page size. + /* If nFin is zero, this loop runs exactly once and page pLastPg + ** is swapped with the first free page pulled off the free list. ** - ** If the source page size is smaller than the destination page size, - ** round up. In this case the call to sqlite3OsTruncate() below will - ** fix the size of the file. However it is important to call - ** sqlite3PagerTruncateImage() here so that any pages in the - ** destination file that lie beyond the nDestTruncate page mark are - ** journalled by PagerCommitPhaseOne() before they are destroyed - ** by the file truncation. + ** On the other hand, if nFin is greater than zero, then keep + ** looping until a free-page located within the first nFin pages + ** of the file is found. */ - if( nSrcPagesizepDest->pBt) ){ - nDestTruncate--; + do { + MemPage *pFreePg; + rc = allocateBtreePage(pBt, &pFreePg, &iFreePg, 0, 0); + if( rc!=SQLITE_OK ){ + releasePage(pLastPg); + return rc; } - }else{ - nDestTruncate = nSrcPage * (nSrcPagesize/nDestPagesize); + releasePage(pFreePg); + }while( nFin!=0 && iFreePg>nFin ); + assert( iFreePgpDbPage); + if( rc==SQLITE_OK ){ + rc = relocatePage(pBt, pLastPg, eType, iPtrPage, iFreePg, nFin!=0); } - sqlite3PagerTruncateImage(pDestPager, nDestTruncate); - - if( nSrcPagesize= iSize || ( - nDestTruncate==(int)(PENDING_BYTE_PAGE(p->pDest->pBt)-1) - && iSize>=PENDING_BYTE && iSize<=PENDING_BYTE+nDestPagesize - )); - if( SQLITE_OK==(rc = sqlite3PagerCommitPhaseOne(pDestPager, 0, 1)) - && SQLITE_OK==(rc = backupTruncateFile(pFile, iSize)) - && SQLITE_OK==(rc = sqlite3PagerSync(pDestPager)) - ){ - i64 iOff; - i64 iEnd = MIN(PENDING_BYTE + nDestPagesize, iSize); - for( - iOff=PENDING_BYTE+nSrcPagesize; - rc==SQLITE_OK && iOffpDbPage); + releasePage(pPg); + if( rc!=SQLITE_OK ){ + return rc; } - }else{ - rc = sqlite3PagerCommitPhaseOne(pDestPager, 0, 0); - } - - /* Finish committing the transaction to the destination database. */ - if( SQLITE_OK==rc - && SQLITE_OK==(rc = sqlite3BtreeCommitPhaseTwo(p->pDest)) - ){ - rc = SQLITE_DONE; } + iLastPg--; } - - /* If bCloseTrans is true, then this function opened a read transaction - ** on the source database. Close the read transaction here. There is - ** no need to check the return values of the btree methods here, as - ** "committing" a read-only transaction cannot fail. - */ - if( bCloseTrans ){ - TESTONLY( int rc2 ); - TESTONLY( rc2 = ) sqlite3BtreeCommitPhaseOne(p->pSrc, 0); - TESTONLY( rc2 |= ) sqlite3BtreeCommitPhaseTwo(p->pSrc); - assert( rc2==SQLITE_OK ); - } - - p->rc = rc; - } - if( p->pDestDb ){ - sqlite3_mutex_leave(p->pDestDb->mutex); + sqlite3PagerTruncateImage(pBt->pPager, iLastPg); + pBt->nPage = iLastPg; } - sqlite3BtreeLeave(p->pSrc); - sqlite3_mutex_leave(p->pSrcDb->mutex); - return rc; + return SQLITE_OK; } /* -** Release all resources associated with an sqlite3_backup* handle. +** A write-transaction must be opened before calling this function. +** It performs a single unit of work towards an incremental vacuum. +** +** If the incremental vacuum is finished after this function has run, +** SQLITE_DONE is returned. If it is not finished, but no error occurred, +** SQLITE_OK is returned. Otherwise an SQLite error code. */ -SQLITE_API int sqlite3_backup_finish(sqlite3_backup *p){ - sqlite3_backup **pp; /* Ptr to head of pagers backup list */ - sqlite3_mutex *mutex; /* Mutex to protect source database */ - int rc; /* Value to return */ - - /* Enter the mutexes */ - if( p==0 ) return SQLITE_OK; - sqlite3_mutex_enter(p->pSrcDb->mutex); - sqlite3BtreeEnter(p->pSrc); - mutex = p->pSrcDb->mutex; - if( p->pDestDb ){ - sqlite3_mutex_enter(p->pDestDb->mutex); - } +SQLITE_PRIVATE int sqlite3BtreeIncrVacuum(Btree *p){ + int rc; + BtShared *pBt = p->pBt; - /* Detach this backup from the source pager. */ - if( p->pDestDb ){ - p->pSrc->nBackup--; - } - if( p->isAttached ){ - pp = sqlite3PagerBackupPtr(sqlite3BtreePager(p->pSrc)); - while( *pp!=p ){ - pp = &(*pp)->pNext; + sqlite3BtreeEnter(p); + assert( pBt->inTransaction==TRANS_WRITE && p->inTrans==TRANS_WRITE ); + if( !pBt->autoVacuum ){ + rc = SQLITE_DONE; + }else{ + invalidateAllOverflowCache(pBt); + rc = incrVacuumStep(pBt, 0, btreePagecount(pBt)); + if( rc==SQLITE_OK ){ + rc = sqlite3PagerWrite(pBt->pPage1->pDbPage); + put4byte(&pBt->pPage1->aData[28], pBt->nPage); } - *pp = p->pNext; - } - - /* If a transaction is still open on the Btree, roll it back. */ - sqlite3BtreeRollback(p->pDest); - - /* Set the error code of the destination database handle. */ - rc = (p->rc==SQLITE_DONE) ? SQLITE_OK : p->rc; - sqlite3Error(p->pDestDb, rc, 0); - - /* Exit the mutexes and free the backup context structure. */ - if( p->pDestDb ){ - sqlite3_mutex_leave(p->pDestDb->mutex); - } - sqlite3BtreeLeave(p->pSrc); - if( p->pDestDb ){ - sqlite3_free(p); } - sqlite3_mutex_leave(mutex); + sqlite3BtreeLeave(p); return rc; } /* -** Return the number of pages still to be backed up as of the most recent -** call to sqlite3_backup_step(). -*/ -SQLITE_API int sqlite3_backup_remaining(sqlite3_backup *p){ - return p->nRemaining; -} - -/* -** Return the total number of pages in the source database as of the most -** recent call to sqlite3_backup_step(). -*/ -SQLITE_API int sqlite3_backup_pagecount(sqlite3_backup *p){ - return p->nPagecount; -} - -/* -** This function is called after the contents of page iPage of the -** source database have been modified. If page iPage has already been -** copied into the destination database, then the data written to the -** destination is now invalidated. The destination copy of iPage needs -** to be updated with the new data before the backup operation is -** complete. +** This routine is called prior to sqlite3PagerCommit when a transaction +** is commited for an auto-vacuum database. ** -** It is assumed that the mutex associated with the BtShared object -** corresponding to the source database is held when this function is -** called. +** If SQLITE_OK is returned, then *pnTrunc is set to the number of pages +** the database file should be truncated to during the commit process. +** i.e. the database has been reorganized so that only the first *pnTrunc +** pages are in use. */ -SQLITE_PRIVATE void sqlite3BackupUpdate(sqlite3_backup *pBackup, Pgno iPage, const u8 *aData){ - sqlite3_backup *p; /* Iterator variable */ - for(p=pBackup; p; p=p->pNext){ - assert( sqlite3_mutex_held(p->pSrc->pBt->mutex) ); - if( !isFatalError(p->rc) && iPageiNext ){ - /* The backup process p has already copied page iPage. But now it - ** has been modified by a transaction on the source pager. Copy - ** the new data into the backup. +static int autoVacuumCommit(BtShared *pBt){ + int rc = SQLITE_OK; + Pager *pPager = pBt->pPager; + VVA_ONLY( int nRef = sqlite3PagerRefcount(pPager) ); + + assert( sqlite3_mutex_held(pBt->mutex) ); + invalidateAllOverflowCache(pBt); + assert(pBt->autoVacuum); + if( !pBt->incrVacuum ){ + Pgno nFin; /* Number of pages in database after autovacuuming */ + Pgno nFree; /* Number of pages on the freelist initially */ + Pgno nPtrmap; /* Number of PtrMap pages to be freed */ + Pgno iFree; /* The next page to be freed */ + int nEntry; /* Number of entries on one ptrmap page */ + Pgno nOrig; /* Database size before freeing */ + + nOrig = btreePagecount(pBt); + if( PTRMAP_ISPAGE(pBt, nOrig) || nOrig==PENDING_BYTE_PAGE(pBt) ){ + /* It is not possible to create a database for which the final page + ** is either a pointer-map page or the pending-byte page. If one + ** is encountered, this indicates corruption. */ - int rc = backupOnePage(p, iPage, aData); - assert( rc!=SQLITE_BUSY && rc!=SQLITE_LOCKED ); - if( rc!=SQLITE_OK ){ - p->rc = rc; - } + return SQLITE_CORRUPT_BKPT; } - } -} - -/* -** Restart the backup process. This is called when the pager layer -** detects that the database has been modified by an external database -** connection. In this case there is no way of knowing which of the -** pages that have been copied into the destination database are still -** valid and which are not, so the entire process needs to be restarted. -** -** It is assumed that the mutex associated with the BtShared object -** corresponding to the source database is held when this function is -** called. -*/ -SQLITE_PRIVATE void sqlite3BackupRestart(sqlite3_backup *pBackup){ - sqlite3_backup *p; /* Iterator variable */ - for(p=pBackup; p; p=p->pNext){ - assert( sqlite3_mutex_held(p->pSrc->pBt->mutex) ); - p->iNext = 1; - } -} - -#ifndef SQLITE_OMIT_VACUUM -/* -** Copy the complete content of pBtFrom into pBtTo. A transaction -** must be active for both files. -** -** The size of file pTo may be reduced by this operation. If anything -** goes wrong, the transaction on pTo is rolled back. If successful, the -** transaction is committed before returning. -*/ -SQLITE_PRIVATE int sqlite3BtreeCopyFile(Btree *pTo, Btree *pFrom){ - int rc; - sqlite3_backup b; - sqlite3BtreeEnter(pTo); - sqlite3BtreeEnter(pFrom); - /* Set up an sqlite3_backup object. sqlite3_backup.pDestDb must be set - ** to 0. This is used by the implementations of sqlite3_backup_step() - ** and sqlite3_backup_finish() to detect that they are being called - ** from this function, not directly by the user. - */ - memset(&b, 0, sizeof(b)); - b.pSrcDb = pFrom->db; - b.pSrc = pFrom; - b.pDest = pTo; - b.iNext = 1; + nFree = get4byte(&pBt->pPage1->aData[36]); + nEntry = pBt->usableSize/5; + nPtrmap = (nFree-nOrig+PTRMAP_PAGENO(pBt, nOrig)+nEntry)/nEntry; + nFin = nOrig - nFree - nPtrmap; + if( nOrig>PENDING_BYTE_PAGE(pBt) && nFinnOrig ) return SQLITE_CORRUPT_BKPT; - /* 0x7FFFFFFF is the hard limit for the number of pages in a database - ** file. By passing this as the number of pages to copy to - ** sqlite3_backup_step(), we can guarantee that the copy finishes - ** within a single call (unless an error occurs). The assert() statement - ** checks this assumption - (p->rc) should be set to either SQLITE_DONE - ** or an error code. - */ - sqlite3_backup_step(&b, 0x7FFFFFFF); - assert( b.rc!=SQLITE_OK ); - rc = sqlite3_backup_finish(&b); - if( rc==SQLITE_OK ){ - pTo->pBt->pageSizeFixed = 0; + for(iFree=nOrig; iFree>nFin && rc==SQLITE_OK; iFree--){ + rc = incrVacuumStep(pBt, nFin, iFree); + } + if( (rc==SQLITE_DONE || rc==SQLITE_OK) && nFree>0 ){ + rc = sqlite3PagerWrite(pBt->pPage1->pDbPage); + put4byte(&pBt->pPage1->aData[32], 0); + put4byte(&pBt->pPage1->aData[36], 0); + put4byte(&pBt->pPage1->aData[28], nFin); + sqlite3PagerTruncateImage(pBt->pPager, nFin); + pBt->nPage = nFin; + } + if( rc!=SQLITE_OK ){ + sqlite3PagerRollback(pPager); + } } - sqlite3BtreeLeave(pFrom); - sqlite3BtreeLeave(pTo); + assert( nRef==sqlite3PagerRefcount(pPager) ); return rc; } -#endif /* SQLITE_OMIT_VACUUM */ -/************** End of backup.c **********************************************/ -/************** Begin file vdbemem.c *****************************************/ +#else /* ifndef SQLITE_OMIT_AUTOVACUUM */ +# define setChildPtrmaps(x) SQLITE_OK +#endif + /* -** 2004 May 26 -** -** The author disclaims copyright to this source code. In place of -** a legal notice, here is a blessing: -** -** May you do good and not evil. -** May you find forgiveness for yourself and forgive others. -** May you share freely, never taking more than you give. -** -************************************************************************* +** This routine does the first phase of a two-phase commit. This routine +** causes a rollback journal to be created (if it does not already exist) +** and populated with enough information so that if a power loss occurs +** the database can be restored to its original state by playing back +** the journal. Then the contents of the journal are flushed out to +** the disk. After the journal is safely on oxide, the changes to the +** database are written into the database file and flushed to oxide. +** At the end of this call, the rollback journal still exists on the +** disk and we are still holding all locks, so the transaction has not +** committed. See sqlite3BtreeCommitPhaseTwo() for the second phase of the +** commit process. ** -** This file contains code use to manipulate "Mem" structure. A "Mem" -** stores a single value in the VDBE. Mem is an opaque structure visible -** only within the VDBE. Interface routines refer to a Mem using the -** name sqlite_value +** This call is a no-op if no write-transaction is currently active on pBt. ** -** $Id: vdbemem.c,v 1.150 2009/06/25 01:47:12 drh Exp $ -*/ - -/* -** Call sqlite3VdbeMemExpandBlob() on the supplied value (type Mem*) -** P if required. -*/ -#define expandBlob(P) (((P)->flags&MEM_Zero)?sqlite3VdbeMemExpandBlob(P):0) - -/* -** If pMem is an object with a valid string representation, this routine -** ensures the internal encoding for the string representation is -** 'desiredEnc', one of SQLITE_UTF8, SQLITE_UTF16LE or SQLITE_UTF16BE. +** Otherwise, sync the database file for the btree pBt. zMaster points to +** the name of a master journal file that should be written into the +** individual journal file, or is NULL, indicating no master journal file +** (single database transaction). ** -** If pMem is not a string object, or the encoding of the string -** representation is already stored using the requested encoding, then this -** routine is a no-op. +** When this is called, the master journal should already have been +** created, populated with this journal pointer and synced to disk. ** -** SQLITE_OK is returned if the conversion is successful (or not required). -** SQLITE_NOMEM may be returned if a malloc() fails during conversion -** between formats. +** Once this is routine has returned, the only thing required to commit +** the write-transaction for this database file is to delete the journal. */ -SQLITE_PRIVATE int sqlite3VdbeChangeEncoding(Mem *pMem, int desiredEnc){ - int rc; - assert( (pMem->flags&MEM_RowSet)==0 ); - assert( desiredEnc==SQLITE_UTF8 || desiredEnc==SQLITE_UTF16LE - || desiredEnc==SQLITE_UTF16BE ); - if( !(pMem->flags&MEM_Str) || pMem->enc==desiredEnc ){ - return SQLITE_OK; +SQLITE_PRIVATE int sqlite3BtreeCommitPhaseOne(Btree *p, const char *zMaster){ + int rc = SQLITE_OK; + if( p->inTrans==TRANS_WRITE ){ + BtShared *pBt = p->pBt; + sqlite3BtreeEnter(p); +#ifndef SQLITE_OMIT_AUTOVACUUM + if( pBt->autoVacuum ){ + rc = autoVacuumCommit(pBt); + if( rc!=SQLITE_OK ){ + sqlite3BtreeLeave(p); + return rc; + } + } +#endif + rc = sqlite3PagerCommitPhaseOne(pBt->pPager, zMaster, 0); + sqlite3BtreeLeave(p); } - assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) ); -#ifdef SQLITE_OMIT_UTF16 - return SQLITE_ERROR; -#else - - /* MemTranslate() may return SQLITE_OK or SQLITE_NOMEM. If NOMEM is returned, - ** then the encoding of the value may not have changed. - */ - rc = sqlite3VdbeMemTranslate(pMem, (u8)desiredEnc); - assert(rc==SQLITE_OK || rc==SQLITE_NOMEM); - assert(rc==SQLITE_OK || pMem->enc!=desiredEnc); - assert(rc==SQLITE_NOMEM || pMem->enc==desiredEnc); return rc; -#endif } /* -** Make sure pMem->z points to a writable allocation of at least -** n bytes. -** -** If the memory cell currently contains string or blob data -** and the third argument passed to this function is true, the -** current content of the cell is preserved. Otherwise, it may -** be discarded. -** -** This function sets the MEM_Dyn flag and clears any xDel callback. -** It also clears MEM_Ephem and MEM_Static. If the preserve flag is -** not set, Mem.n is zeroed. +** This function is called from both BtreeCommitPhaseTwo() and BtreeRollback() +** at the conclusion of a transaction. */ -SQLITE_PRIVATE int sqlite3VdbeMemGrow(Mem *pMem, int n, int preserve){ - assert( 1 >= - ((pMem->zMalloc && pMem->zMalloc==pMem->z) ? 1 : 0) + - (((pMem->flags&MEM_Dyn)&&pMem->xDel) ? 1 : 0) + - ((pMem->flags&MEM_Ephem) ? 1 : 0) + - ((pMem->flags&MEM_Static) ? 1 : 0) - ); - assert( (pMem->flags&MEM_RowSet)==0 ); +static void btreeEndTransaction(Btree *p){ + BtShared *pBt = p->pBt; + assert( sqlite3BtreeHoldsMutex(p) ); - if( n<32 ) n = 32; - if( sqlite3DbMallocSize(pMem->db, pMem->zMalloc)z==pMem->zMalloc ){ - pMem->z = pMem->zMalloc = sqlite3DbReallocOrFree(pMem->db, pMem->z, n); - preserve = 0; - }else{ - sqlite3DbFree(pMem->db, pMem->zMalloc); - pMem->zMalloc = sqlite3DbMallocRaw(pMem->db, n); + btreeClearHasContent(pBt); + if( p->inTrans>TRANS_NONE && p->db->activeVdbeCnt>1 ){ + /* If there are other active statements that belong to this database + ** handle, downgrade to a read-only transaction. The other statements + ** may still be reading from the database. */ + downgradeAllSharedCacheTableLocks(p); + p->inTrans = TRANS_READ; + }else{ + /* If the handle had any kind of transaction open, decrement the + ** transaction count of the shared btree. If the transaction count + ** reaches 0, set the shared state to TRANS_NONE. The unlockBtreeIfUnused() + ** call below will unlock the pager. */ + if( p->inTrans!=TRANS_NONE ){ + clearAllSharedCacheTableLocks(p); + pBt->nTransaction--; + if( 0==pBt->nTransaction ){ + pBt->inTransaction = TRANS_NONE; + } } - } - if( pMem->z && preserve && pMem->zMalloc && pMem->z!=pMem->zMalloc ){ - memcpy(pMem->zMalloc, pMem->z, pMem->n); - } - if( pMem->flags&MEM_Dyn && pMem->xDel ){ - pMem->xDel((void *)(pMem->z)); + /* Set the current transaction state to TRANS_NONE and unlock the + ** pager if this call closed the only read or write transaction. */ + p->inTrans = TRANS_NONE; + unlockBtreeIfUnused(pBt); } - pMem->z = pMem->zMalloc; - if( pMem->z==0 ){ - pMem->flags = MEM_Null; - }else{ - pMem->flags &= ~(MEM_Ephem|MEM_Static); - } - pMem->xDel = 0; - return (pMem->z ? SQLITE_OK : SQLITE_NOMEM); + btreeIntegrity(p); } /* -** Make the given Mem object MEM_Dyn. In other words, make it so -** that any TEXT or BLOB content is stored in memory obtained from -** malloc(). In this way, we know that the memory is safe to be -** overwritten or altered. +** Commit the transaction currently in progress. ** -** Return SQLITE_OK on success or SQLITE_NOMEM if malloc fails. +** This routine implements the second phase of a 2-phase commit. The +** sqlite3BtreeCommitPhaseOne() routine does the first phase and should +** be invoked prior to calling this routine. The sqlite3BtreeCommitPhaseOne() +** routine did all the work of writing information out to disk and flushing the +** contents so that they are written onto the disk platter. All this +** routine has to do is delete or truncate or zero the header in the +** the rollback journal (which causes the transaction to commit) and +** drop locks. +** +** Normally, if an error occurs while the pager layer is attempting to +** finalize the underlying journal file, this function returns an error and +** the upper layer will attempt a rollback. However, if the second argument +** is non-zero then this b-tree transaction is part of a multi-file +** transaction. In this case, the transaction has already been committed +** (by deleting a master journal file) and the caller will ignore this +** functions return code. So, even if an error occurs in the pager layer, +** reset the b-tree objects internal state to indicate that the write +** transaction has been closed. This is quite safe, as the pager will have +** transitioned to the error state. +** +** This will release the write lock on the database file. If there +** are no active cursors, it also releases the read lock. */ -SQLITE_PRIVATE int sqlite3VdbeMemMakeWriteable(Mem *pMem){ - int f; - assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) ); - assert( (pMem->flags&MEM_RowSet)==0 ); - expandBlob(pMem); - f = pMem->flags; - if( (f&(MEM_Str|MEM_Blob)) && pMem->z!=pMem->zMalloc ){ - if( sqlite3VdbeMemGrow(pMem, pMem->n + 2, 1) ){ - return SQLITE_NOMEM; +SQLITE_PRIVATE int sqlite3BtreeCommitPhaseTwo(Btree *p, int bCleanup){ + + if( p->inTrans==TRANS_NONE ) return SQLITE_OK; + sqlite3BtreeEnter(p); + btreeIntegrity(p); + + /* If the handle has a write-transaction open, commit the shared-btrees + ** transaction and set the shared state to TRANS_READ. + */ + if( p->inTrans==TRANS_WRITE ){ + int rc; + BtShared *pBt = p->pBt; + assert( pBt->inTransaction==TRANS_WRITE ); + assert( pBt->nTransaction>0 ); + rc = sqlite3PagerCommitPhaseTwo(pBt->pPager); + if( rc!=SQLITE_OK && bCleanup==0 ){ + sqlite3BtreeLeave(p); + return rc; } - pMem->z[pMem->n] = 0; - pMem->z[pMem->n+1] = 0; - pMem->flags |= MEM_Term; + pBt->inTransaction = TRANS_READ; } + btreeEndTransaction(p); + sqlite3BtreeLeave(p); return SQLITE_OK; } /* -** If the given Mem* has a zero-filled tail, turn it into an ordinary -** blob stored in dynamically allocated space. +** Do both phases of a commit. */ -#ifndef SQLITE_OMIT_INCRBLOB -SQLITE_PRIVATE int sqlite3VdbeMemExpandBlob(Mem *pMem){ - if( pMem->flags & MEM_Zero ){ - int nByte; - assert( pMem->flags&MEM_Blob ); - assert( (pMem->flags&MEM_RowSet)==0 ); - assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) ); - - /* Set nByte to the number of bytes required to store the expanded blob. */ - nByte = pMem->n + pMem->u.nZero; - if( nByte<=0 ){ - nByte = 1; - } - if( sqlite3VdbeMemGrow(pMem, nByte, 1) ){ - return SQLITE_NOMEM; - } +SQLITE_PRIVATE int sqlite3BtreeCommit(Btree *p){ + int rc; + sqlite3BtreeEnter(p); + rc = sqlite3BtreeCommitPhaseOne(p, 0); + if( rc==SQLITE_OK ){ + rc = sqlite3BtreeCommitPhaseTwo(p, 0); + } + sqlite3BtreeLeave(p); + return rc; +} - memset(&pMem->z[pMem->n], 0, pMem->u.nZero); - pMem->n += pMem->u.nZero; - pMem->flags &= ~(MEM_Zero|MEM_Term); +#ifndef NDEBUG +/* +** Return the number of write-cursors open on this handle. This is for use +** in assert() expressions, so it is only compiled if NDEBUG is not +** defined. +** +** For the purposes of this routine, a write-cursor is any cursor that +** is capable of writing to the databse. That means the cursor was +** originally opened for writing and the cursor has not be disabled +** by having its state changed to CURSOR_FAULT. +*/ +static int countWriteCursors(BtShared *pBt){ + BtCursor *pCur; + int r = 0; + for(pCur=pBt->pCursor; pCur; pCur=pCur->pNext){ + if( pCur->wrFlag && pCur->eState!=CURSOR_FAULT ) r++; } - return SQLITE_OK; + return r; } #endif - /* -** Make sure the given Mem is \u0000 terminated. +** This routine sets the state to CURSOR_FAULT and the error +** code to errCode for every cursor on BtShared that pBtree +** references. +** +** Every cursor is tripped, including cursors that belong +** to other database connections that happen to be sharing +** the cache with pBtree. +** +** This routine gets called when a rollback occurs. +** All cursors using the same cache must be tripped +** to prevent them from trying to use the btree after +** the rollback. The rollback may have deleted tables +** or moved root pages, so it is not sufficient to +** save the state of the cursor. The cursor must be +** invalidated. */ -SQLITE_PRIVATE int sqlite3VdbeMemNulTerminate(Mem *pMem){ - assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) ); - if( (pMem->flags & MEM_Term)!=0 || (pMem->flags & MEM_Str)==0 ){ - return SQLITE_OK; /* Nothing to do */ - } - if( sqlite3VdbeMemGrow(pMem, pMem->n+2, 1) ){ - return SQLITE_NOMEM; +SQLITE_PRIVATE void sqlite3BtreeTripAllCursors(Btree *pBtree, int errCode){ + BtCursor *p; + if( pBtree==0 ) return; + sqlite3BtreeEnter(pBtree); + for(p=pBtree->pBt->pCursor; p; p=p->pNext){ + int i; + sqlite3BtreeClearCursor(p); + p->eState = CURSOR_FAULT; + p->skipNext = errCode; + for(i=0; i<=p->iPage; i++){ + releasePage(p->apPage[i]); + p->apPage[i] = 0; + } } - pMem->z[pMem->n] = 0; - pMem->z[pMem->n+1] = 0; - pMem->flags |= MEM_Term; - return SQLITE_OK; + sqlite3BtreeLeave(pBtree); } /* -** Add MEM_Str to the set of representations for the given Mem. Numbers -** are converted using sqlite3_snprintf(). Converting a BLOB to a string -** is a no-op. -** -** Existing representations MEM_Int and MEM_Real are *not* invalidated. +** Rollback the transaction in progress. All cursors will be +** invalided by this operation. Any attempt to use a cursor +** that was open at the beginning of this operation will result +** in an error. ** -** A MEM_Null value will never be passed to this function. This function is -** used for converting values to text for returning to the user (i.e. via -** sqlite3_value_text()), or for ensuring that values to be used as btree -** keys are strings. In the former case a NULL pointer is returned the -** user and the later is an internal programming error. +** This will release the write lock on the database file. If there +** are no active cursors, it also releases the read lock. */ -SQLITE_PRIVATE int sqlite3VdbeMemStringify(Mem *pMem, int enc){ - int rc = SQLITE_OK; - int fg = pMem->flags; - const int nByte = 32; +SQLITE_PRIVATE int sqlite3BtreeRollback(Btree *p, int tripCode){ + int rc; + BtShared *pBt = p->pBt; + MemPage *pPage1; - assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) ); - assert( !(fg&MEM_Zero) ); - assert( !(fg&(MEM_Str|MEM_Blob)) ); - assert( fg&(MEM_Int|MEM_Real) ); - assert( (pMem->flags&MEM_RowSet)==0 ); - assert( EIGHT_BYTE_ALIGNMENT(pMem) ); + sqlite3BtreeEnter(p); + if( tripCode==SQLITE_OK ){ + rc = tripCode = saveAllCursors(pBt, 0, 0); + }else{ + rc = SQLITE_OK; + } + if( tripCode ){ + sqlite3BtreeTripAllCursors(p, tripCode); + } + btreeIntegrity(p); + if( p->inTrans==TRANS_WRITE ){ + int rc2; - if( sqlite3VdbeMemGrow(pMem, nByte, 0) ){ - return SQLITE_NOMEM; - } + assert( TRANS_WRITE==pBt->inTransaction ); + rc2 = sqlite3PagerRollback(pBt->pPager); + if( rc2!=SQLITE_OK ){ + rc = rc2; + } - /* For a Real or Integer, use sqlite3_mprintf() to produce the UTF-8 - ** string representation of the value. Then, if the required encoding - ** is UTF-16le or UTF-16be do a translation. - ** - ** FIX ME: It would be better if sqlite3_snprintf() could do UTF-16. - */ - if( fg & MEM_Int ){ - sqlite3_snprintf(nByte, pMem->z, "%lld", pMem->u.i); - }else{ - assert( fg & MEM_Real ); - sqlite3_snprintf(nByte, pMem->z, "%!.15g", pMem->r); + /* The rollback may have destroyed the pPage1->aData value. So + ** call btreeGetPage() on page 1 again to make + ** sure pPage1->aData is set correctly. */ + if( btreeGetPage(pBt, 1, &pPage1, 0)==SQLITE_OK ){ + int nPage = get4byte(28+(u8*)pPage1->aData); + testcase( nPage==0 ); + if( nPage==0 ) sqlite3PagerPagecount(pBt->pPager, &nPage); + testcase( pBt->nPage!=nPage ); + pBt->nPage = nPage; + releasePage(pPage1); + } + assert( countWriteCursors(pBt)==0 ); + pBt->inTransaction = TRANS_READ; } - pMem->n = sqlite3Strlen30(pMem->z); - pMem->enc = SQLITE_UTF8; - pMem->flags |= MEM_Str|MEM_Term; - sqlite3VdbeChangeEncoding(pMem, enc); + + btreeEndTransaction(p); + sqlite3BtreeLeave(p); return rc; } /* -** Memory cell pMem contains the context of an aggregate function. -** This routine calls the finalize method for that function. The -** result of the aggregate is stored back into pMem. +** Start a statement subtransaction. The subtransaction can can be rolled +** back independently of the main transaction. You must start a transaction +** before starting a subtransaction. The subtransaction is ended automatically +** if the main transaction commits or rolls back. ** -** Return SQLITE_ERROR if the finalizer reports an error. SQLITE_OK -** otherwise. +** Statement subtransactions are used around individual SQL statements +** that are contained within a BEGIN...COMMIT block. If a constraint +** error occurs within the statement, the effect of that one statement +** can be rolled back without having to rollback the entire transaction. +** +** A statement sub-transaction is implemented as an anonymous savepoint. The +** value passed as the second parameter is the total number of savepoints, +** including the new anonymous savepoint, open on the B-Tree. i.e. if there +** are no active savepoints and no other statement-transactions open, +** iStatement is 1. This anonymous savepoint can be released or rolled back +** using the sqlite3BtreeSavepoint() function. */ -SQLITE_PRIVATE int sqlite3VdbeMemFinalize(Mem *pMem, FuncDef *pFunc){ - int rc = SQLITE_OK; - if( ALWAYS(pFunc && pFunc->xFinalize) ){ - sqlite3_context ctx; - assert( (pMem->flags & MEM_Null)!=0 || pFunc==pMem->u.pDef ); - assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) ); - memset(&ctx, 0, sizeof(ctx)); - ctx.s.flags = MEM_Null; - ctx.s.db = pMem->db; - ctx.pMem = pMem; - ctx.pFunc = pFunc; - pFunc->xFinalize(&ctx); - assert( 0==(pMem->flags&MEM_Dyn) && !pMem->xDel ); - sqlite3DbFree(pMem->db, pMem->zMalloc); - memcpy(pMem, &ctx.s, sizeof(ctx.s)); - rc = ctx.isError; - } +SQLITE_PRIVATE int sqlite3BtreeBeginStmt(Btree *p, int iStatement){ + int rc; + BtShared *pBt = p->pBt; + sqlite3BtreeEnter(p); + assert( p->inTrans==TRANS_WRITE ); + assert( (pBt->btsFlags & BTS_READ_ONLY)==0 ); + assert( iStatement>0 ); + assert( iStatement>p->db->nSavepoint ); + assert( pBt->inTransaction==TRANS_WRITE ); + /* At the pager level, a statement transaction is a savepoint with + ** an index greater than all savepoints created explicitly using + ** SQL statements. It is illegal to open, release or rollback any + ** such savepoints while the statement transaction savepoint is active. + */ + rc = sqlite3PagerOpenSavepoint(pBt->pPager, iStatement); + sqlite3BtreeLeave(p); return rc; } /* -** If the memory cell contains a string value that must be freed by -** invoking an external callback, free it now. Calling this function -** does not free any Mem.zMalloc buffer. -*/ -SQLITE_PRIVATE void sqlite3VdbeMemReleaseExternal(Mem *p){ - assert( p->db==0 || sqlite3_mutex_held(p->db->mutex) ); - if( p->flags&(MEM_Agg|MEM_Dyn|MEM_RowSet) ){ - if( p->flags&MEM_Agg ){ - sqlite3VdbeMemFinalize(p, p->u.pDef); - assert( (p->flags & MEM_Agg)==0 ); - sqlite3VdbeMemRelease(p); - }else if( p->flags&MEM_Dyn && p->xDel ){ - assert( (p->flags&MEM_RowSet)==0 ); - p->xDel((void *)p->z); - p->xDel = 0; - }else if( p->flags&MEM_RowSet ){ - sqlite3RowSetClear(p->u.pRowSet); - } - } -} - -/* -** Release any memory held by the Mem. This may leave the Mem in an -** inconsistent state, for example with (Mem.z==0) and -** (Mem.type==SQLITE_TEXT). -*/ -SQLITE_PRIVATE void sqlite3VdbeMemRelease(Mem *p){ - sqlite3VdbeMemReleaseExternal(p); - sqlite3DbFree(p->db, p->zMalloc); - p->z = 0; - p->zMalloc = 0; - p->xDel = 0; -} - -/* -** Convert a 64-bit IEEE double into a 64-bit signed integer. -** If the double is too large, return 0x8000000000000000. +** The second argument to this function, op, is always SAVEPOINT_ROLLBACK +** or SAVEPOINT_RELEASE. This function either releases or rolls back the +** savepoint identified by parameter iSavepoint, depending on the value +** of op. ** -** Most systems appear to do this simply by assigning -** variables and without the extra range tests. But -** there are reports that windows throws an expection -** if the floating point value is out of range. (See ticket #2880.) -** Because we do not completely understand the problem, we will -** take the conservative approach and always do range tests -** before attempting the conversion. +** Normally, iSavepoint is greater than or equal to zero. However, if op is +** SAVEPOINT_ROLLBACK, then iSavepoint may also be -1. In this case the +** contents of the entire transaction are rolled back. This is different +** from a normal transaction rollback, as no locks are released and the +** transaction remains open. */ -static i64 doubleToInt64(double r){ - /* - ** Many compilers we encounter do not define constants for the - ** minimum and maximum 64-bit integers, or they define them - ** inconsistently. And many do not understand the "LL" notation. - ** So we define our own static constants here using nothing - ** larger than a 32-bit integer constant. - */ - static const i64 maxInt = LARGEST_INT64; - static const i64 minInt = SMALLEST_INT64; +SQLITE_PRIVATE int sqlite3BtreeSavepoint(Btree *p, int op, int iSavepoint){ + int rc = SQLITE_OK; + if( p && p->inTrans==TRANS_WRITE ){ + BtShared *pBt = p->pBt; + assert( op==SAVEPOINT_RELEASE || op==SAVEPOINT_ROLLBACK ); + assert( iSavepoint>=0 || (iSavepoint==-1 && op==SAVEPOINT_ROLLBACK) ); + sqlite3BtreeEnter(p); + rc = sqlite3PagerSavepoint(pBt->pPager, op, iSavepoint); + if( rc==SQLITE_OK ){ + if( iSavepoint<0 && (pBt->btsFlags & BTS_INITIALLY_EMPTY)!=0 ){ + pBt->nPage = 0; + } + rc = newDatabase(pBt); + pBt->nPage = get4byte(28 + pBt->pPage1->aData); - if( r<(double)minInt ){ - return minInt; - }else if( r>(double)maxInt ){ - /* minInt is correct here - not maxInt. It turns out that assigning - ** a very large positive number to an integer results in a very large - ** negative integer. This makes no sense, but it is what x86 hardware - ** does so for compatibility we will do the same in software. */ - return minInt; - }else{ - return (i64)r; + /* The database size was written into the offset 28 of the header + ** when the transaction started, so we know that the value at offset + ** 28 is nonzero. */ + assert( pBt->nPage>0 ); + } + sqlite3BtreeLeave(p); } + return rc; } /* -** Return some kind of integer value which is the best we can do -** at representing the value that *pMem describes as an integer. -** If pMem is an integer, then the value is exact. If pMem is -** a floating-point then the value returned is the integer part. -** If pMem is a string or blob, then we make an attempt to convert -** it into a integer and return that. If pMem represents an -** an SQL-NULL value, return 0. +** Create a new cursor for the BTree whose root is on the page +** iTable. If a read-only cursor is requested, it is assumed that +** the caller already has at least a read-only transaction open +** on the database already. If a write-cursor is requested, then +** the caller is assumed to have an open write transaction. ** -** If pMem represents a string value, its encoding might be changed. +** If wrFlag==0, then the cursor can only be used for reading. +** If wrFlag==1, then the cursor can be used for reading or for +** writing if other conditions for writing are also met. These +** are the conditions that must be met in order for writing to +** be allowed: +** +** 1: The cursor must have been opened with wrFlag==1 +** +** 2: Other database connections that share the same pager cache +** but which are not in the READ_UNCOMMITTED state may not have +** cursors open with wrFlag==0 on the same table. Otherwise +** the changes made by this write cursor would be visible to +** the read cursors in the other database connection. +** +** 3: The database must be writable (not on read-only media) +** +** 4: There must be an active transaction. +** +** No checking is done to make sure that page iTable really is the +** root page of a b-tree. If it is not, then the cursor acquired +** will not work correctly. +** +** It is assumed that the sqlite3BtreeCursorZero() has been called +** on pCur to initialize the memory space prior to invoking this routine. */ -SQLITE_PRIVATE i64 sqlite3VdbeIntValue(Mem *pMem){ - int flags; - assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) ); - assert( EIGHT_BYTE_ALIGNMENT(pMem) ); - flags = pMem->flags; - if( flags & MEM_Int ){ - return pMem->u.i; - }else if( flags & MEM_Real ){ - return doubleToInt64(pMem->r); - }else if( flags & (MEM_Str|MEM_Blob) ){ - i64 value; - pMem->flags |= MEM_Str; - if( sqlite3VdbeChangeEncoding(pMem, SQLITE_UTF8) - || sqlite3VdbeMemNulTerminate(pMem) ){ - return 0; - } - assert( pMem->z ); - sqlite3Atoi64(pMem->z, &value); - return value; - }else{ - return 0; - } -} +static int btreeCursor( + Btree *p, /* The btree */ + int iTable, /* Root page of table to open */ + int wrFlag, /* 1 to write. 0 read-only */ + struct KeyInfo *pKeyInfo, /* First arg to comparison function */ + BtCursor *pCur /* Space for new cursor */ +){ + BtShared *pBt = p->pBt; /* Shared b-tree handle */ -/* -** Return the best representation of pMem that we can get into a -** double. If pMem is already a double or an integer, return its -** value. If it is a string or blob, try to convert it to a double. -** If it is a NULL, return 0.0. -*/ -SQLITE_PRIVATE double sqlite3VdbeRealValue(Mem *pMem){ - assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) ); - assert( EIGHT_BYTE_ALIGNMENT(pMem) ); - if( pMem->flags & MEM_Real ){ - return pMem->r; - }else if( pMem->flags & MEM_Int ){ - return (double)pMem->u.i; - }else if( pMem->flags & (MEM_Str|MEM_Blob) ){ - /* (double)0 In case of SQLITE_OMIT_FLOATING_POINT... */ - double val = (double)0; - pMem->flags |= MEM_Str; - if( sqlite3VdbeChangeEncoding(pMem, SQLITE_UTF8) - || sqlite3VdbeMemNulTerminate(pMem) ){ - /* (double)0 In case of SQLITE_OMIT_FLOATING_POINT... */ - return (double)0; - } - assert( pMem->z ); - sqlite3AtoF(pMem->z, &val); - return val; - }else{ - /* (double)0 In case of SQLITE_OMIT_FLOATING_POINT... */ - return (double)0; - } -} + assert( sqlite3BtreeHoldsMutex(p) ); + assert( wrFlag==0 || wrFlag==1 ); -/* -** The MEM structure is already a MEM_Real. Try to also make it a -** MEM_Int if we can. -*/ -SQLITE_PRIVATE void sqlite3VdbeIntegerAffinity(Mem *pMem){ - assert( pMem->flags & MEM_Real ); - assert( (pMem->flags & MEM_RowSet)==0 ); - assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) ); - assert( EIGHT_BYTE_ALIGNMENT(pMem) ); + /* The following assert statements verify that if this is a sharable + ** b-tree database, the connection is holding the required table locks, + ** and that no other connection has any open cursor that conflicts with + ** this lock. */ + assert( hasSharedCacheTableLock(p, iTable, pKeyInfo!=0, wrFlag+1) ); + assert( wrFlag==0 || !hasReadConflicts(p, iTable) ); - pMem->u.i = doubleToInt64(pMem->r); + /* Assert that the caller has opened the required transaction. */ + assert( p->inTrans>TRANS_NONE ); + assert( wrFlag==0 || p->inTrans==TRANS_WRITE ); + assert( pBt->pPage1 && pBt->pPage1->aData ); - /* Only mark the value as an integer if - ** - ** (1) the round-trip conversion real->int->real is a no-op, and - ** (2) The integer is neither the largest nor the smallest - ** possible integer (ticket #3922) - ** - ** The second term in the following conditional enforces the second - ** condition under the assumption that additional overflow causes - ** values to wrap around. - */ - if( pMem->r==(double)pMem->u.i && (pMem->u.i-1) < (pMem->u.i+1) ){ - pMem->flags |= MEM_Int; + if( NEVER(wrFlag && (pBt->btsFlags & BTS_READ_ONLY)!=0) ){ + return SQLITE_READONLY; + } + if( iTable==1 && btreePagecount(pBt)==0 ){ + assert( wrFlag==0 ); + iTable = 0; } -} - -/* -** Convert pMem to type integer. Invalidate any prior representations. -*/ -SQLITE_PRIVATE int sqlite3VdbeMemIntegerify(Mem *pMem){ - assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) ); - assert( (pMem->flags & MEM_RowSet)==0 ); - assert( EIGHT_BYTE_ALIGNMENT(pMem) ); - - pMem->u.i = sqlite3VdbeIntValue(pMem); - MemSetTypeFlag(pMem, MEM_Int); - return SQLITE_OK; -} - -/* -** Convert pMem so that it is of type MEM_Real. -** Invalidate any prior representations. -*/ -SQLITE_PRIVATE int sqlite3VdbeMemRealify(Mem *pMem){ - assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) ); - assert( EIGHT_BYTE_ALIGNMENT(pMem) ); - - pMem->r = sqlite3VdbeRealValue(pMem); - MemSetTypeFlag(pMem, MEM_Real); - return SQLITE_OK; -} -/* -** Convert pMem so that it has types MEM_Real or MEM_Int or both. -** Invalidate any prior representations. -*/ -SQLITE_PRIVATE int sqlite3VdbeMemNumerify(Mem *pMem){ - double r1, r2; - i64 i; - assert( (pMem->flags & (MEM_Int|MEM_Real|MEM_Null))==0 ); - assert( (pMem->flags & (MEM_Blob|MEM_Str))!=0 ); - assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) ); - r1 = sqlite3VdbeRealValue(pMem); - i = doubleToInt64(r1); - r2 = (double)i; - if( r1==r2 ){ - sqlite3VdbeMemIntegerify(pMem); - }else{ - pMem->r = r1; - MemSetTypeFlag(pMem, MEM_Real); + /* Now that no other errors can occur, finish filling in the BtCursor + ** variables and link the cursor into the BtShared list. */ + pCur->pgnoRoot = (Pgno)iTable; + pCur->iPage = -1; + pCur->pKeyInfo = pKeyInfo; + pCur->pBtree = p; + pCur->pBt = pBt; + pCur->wrFlag = (u8)wrFlag; + pCur->pNext = pBt->pCursor; + if( pCur->pNext ){ + pCur->pNext->pPrev = pCur; } + pBt->pCursor = pCur; + pCur->eState = CURSOR_INVALID; + pCur->cachedRowid = 0; return SQLITE_OK; } - -/* -** Delete any previous value and set the value stored in *pMem to NULL. -*/ -SQLITE_PRIVATE void sqlite3VdbeMemSetNull(Mem *pMem){ - if( pMem->flags & MEM_RowSet ){ - sqlite3RowSetClear(pMem->u.pRowSet); - } - MemSetTypeFlag(pMem, MEM_Null); - pMem->type = SQLITE_NULL; +SQLITE_PRIVATE int sqlite3BtreeCursor( + Btree *p, /* The btree */ + int iTable, /* Root page of table to open */ + int wrFlag, /* 1 to write. 0 read-only */ + struct KeyInfo *pKeyInfo, /* First arg to xCompare() */ + BtCursor *pCur /* Write new cursor here */ +){ + int rc; + sqlite3BtreeEnter(p); + rc = btreeCursor(p, iTable, wrFlag, pKeyInfo, pCur); + sqlite3BtreeLeave(p); + return rc; } /* -** Delete any previous value and set the value to be a BLOB of length -** n containing all zeros. +** Return the size of a BtCursor object in bytes. +** +** This interfaces is needed so that users of cursors can preallocate +** sufficient storage to hold a cursor. The BtCursor object is opaque +** to users so they cannot do the sizeof() themselves - they must call +** this routine. */ -SQLITE_PRIVATE void sqlite3VdbeMemSetZeroBlob(Mem *pMem, int n){ - sqlite3VdbeMemRelease(pMem); - pMem->flags = MEM_Blob|MEM_Zero; - pMem->type = SQLITE_BLOB; - pMem->n = 0; - if( n<0 ) n = 0; - pMem->u.nZero = n; - pMem->enc = SQLITE_UTF8; +SQLITE_PRIVATE int sqlite3BtreeCursorSize(void){ + return ROUND8(sizeof(BtCursor)); } /* -** Delete any previous value and set the value stored in *pMem to val, -** manifest type INTEGER. +** Initialize memory that will be converted into a BtCursor object. +** +** The simple approach here would be to memset() the entire object +** to zero. But it turns out that the apPage[] and aiIdx[] arrays +** do not need to be zeroed and they are large, so we can save a lot +** of run-time by skipping the initialization of those elements. */ -SQLITE_PRIVATE void sqlite3VdbeMemSetInt64(Mem *pMem, i64 val){ - sqlite3VdbeMemRelease(pMem); - pMem->u.i = val; - pMem->flags = MEM_Int; - pMem->type = SQLITE_INTEGER; +SQLITE_PRIVATE void sqlite3BtreeCursorZero(BtCursor *p){ + memset(p, 0, offsetof(BtCursor, iPage)); } /* -** Delete any previous value and set the value stored in *pMem to val, -** manifest type REAL. +** Set the cached rowid value of every cursor in the same database file +** as pCur and having the same root page number as pCur. The value is +** set to iRowid. +** +** Only positive rowid values are considered valid for this cache. +** The cache is initialized to zero, indicating an invalid cache. +** A btree will work fine with zero or negative rowids. We just cannot +** cache zero or negative rowids, which means tables that use zero or +** negative rowids might run a little slower. But in practice, zero +** or negative rowids are very uncommon so this should not be a problem. */ -SQLITE_PRIVATE void sqlite3VdbeMemSetDouble(Mem *pMem, double val){ - if( sqlite3IsNaN(val) ){ - sqlite3VdbeMemSetNull(pMem); - }else{ - sqlite3VdbeMemRelease(pMem); - pMem->r = val; - pMem->flags = MEM_Real; - pMem->type = SQLITE_FLOAT; +SQLITE_PRIVATE void sqlite3BtreeSetCachedRowid(BtCursor *pCur, sqlite3_int64 iRowid){ + BtCursor *p; + for(p=pCur->pBt->pCursor; p; p=p->pNext){ + if( p->pgnoRoot==pCur->pgnoRoot ) p->cachedRowid = iRowid; } + assert( pCur->cachedRowid==iRowid ); } /* -** Delete any previous value and set the value of pMem to be an -** empty boolean index. +** Return the cached rowid for the given cursor. A negative or zero +** return value indicates that the rowid cache is invalid and should be +** ignored. If the rowid cache has never before been set, then a +** zero is returned. */ -SQLITE_PRIVATE void sqlite3VdbeMemSetRowSet(Mem *pMem){ - sqlite3 *db = pMem->db; - assert( db!=0 ); - assert( (pMem->flags & MEM_RowSet)==0 ); - sqlite3VdbeMemRelease(pMem); - pMem->zMalloc = sqlite3DbMallocRaw(db, 64); - if( db->mallocFailed ){ - pMem->flags = MEM_Null; - }else{ - assert( pMem->zMalloc ); - pMem->u.pRowSet = sqlite3RowSetInit(db, pMem->zMalloc, - sqlite3DbMallocSize(db, pMem->zMalloc)); - assert( pMem->u.pRowSet!=0 ); - pMem->flags = MEM_RowSet; - } +SQLITE_PRIVATE sqlite3_int64 sqlite3BtreeGetCachedRowid(BtCursor *pCur){ + return pCur->cachedRowid; } /* -** Return true if the Mem object contains a TEXT or BLOB that is -** too large - whose size exceeds SQLITE_MAX_LENGTH. +** Close a cursor. The read lock on the database file is released +** when the last cursor is closed. */ -SQLITE_PRIVATE int sqlite3VdbeMemTooBig(Mem *p){ - assert( p->db!=0 ); - if( p->flags & (MEM_Str|MEM_Blob) ){ - int n = p->n; - if( p->flags & MEM_Zero ){ - n += p->u.nZero; +SQLITE_PRIVATE int sqlite3BtreeCloseCursor(BtCursor *pCur){ + Btree *pBtree = pCur->pBtree; + if( pBtree ){ + int i; + BtShared *pBt = pCur->pBt; + sqlite3BtreeEnter(pBtree); + sqlite3BtreeClearCursor(pCur); + if( pCur->pPrev ){ + pCur->pPrev->pNext = pCur->pNext; + }else{ + pBt->pCursor = pCur->pNext; } - return n>p->db->aLimit[SQLITE_LIMIT_LENGTH]; + if( pCur->pNext ){ + pCur->pNext->pPrev = pCur->pPrev; + } + for(i=0; i<=pCur->iPage; i++){ + releasePage(pCur->apPage[i]); + } + unlockBtreeIfUnused(pBt); + invalidateOverflowCache(pCur); + /* sqlite3_free(pCur); */ + sqlite3BtreeLeave(pBtree); } - return 0; + return SQLITE_OK; } /* -** Size of struct Mem not including the Mem.zMalloc member. +** Make sure the BtCursor* given in the argument has a valid +** BtCursor.info structure. If it is not already valid, call +** btreeParseCell() to fill it in. +** +** BtCursor.info is a cache of the information in the current cell. +** Using this cache reduces the number of calls to btreeParseCell(). +** +** 2007-06-25: There is a bug in some versions of MSVC that cause the +** compiler to crash when getCellInfo() is implemented as a macro. +** But there is a measureable speed advantage to using the macro on gcc +** (when less compiler optimizations like -Os or -O0 are used and the +** compiler is not doing agressive inlining.) So we use a real function +** for MSVC and a macro for everything else. Ticket #2457. */ -#define MEMCELLSIZE (size_t)(&(((Mem *)0)->zMalloc)) +#ifndef NDEBUG + static void assertCellInfo(BtCursor *pCur){ + CellInfo info; + int iPage = pCur->iPage; + memset(&info, 0, sizeof(info)); + btreeParseCell(pCur->apPage[iPage], pCur->aiIdx[iPage], &info); + assert( memcmp(&info, &pCur->info, sizeof(info))==0 ); + } +#else + #define assertCellInfo(x) +#endif +#ifdef _MSC_VER + /* Use a real function in MSVC to work around bugs in that compiler. */ + static void getCellInfo(BtCursor *pCur){ + if( pCur->info.nSize==0 ){ + int iPage = pCur->iPage; + btreeParseCell(pCur->apPage[iPage],pCur->aiIdx[iPage],&pCur->info); + pCur->validNKey = 1; + }else{ + assertCellInfo(pCur); + } + } +#else /* if not _MSC_VER */ + /* Use a macro in all other compilers so that the function is inlined */ +#define getCellInfo(pCur) \ + if( pCur->info.nSize==0 ){ \ + int iPage = pCur->iPage; \ + btreeParseCell(pCur->apPage[iPage],pCur->aiIdx[iPage],&pCur->info); \ + pCur->validNKey = 1; \ + }else{ \ + assertCellInfo(pCur); \ + } +#endif /* _MSC_VER */ +#ifndef NDEBUG /* The next routine used only within assert() statements */ /* -** Make an shallow copy of pFrom into pTo. Prior contents of -** pTo are freed. The pFrom->z field is not duplicated. If -** pFrom->z is used, then pTo->z points to the same thing as pFrom->z -** and flags gets srcType (either MEM_Ephem or MEM_Static). +** Return true if the given BtCursor is valid. A valid cursor is one +** that is currently pointing to a row in a (non-empty) table. +** This is a verification routine is used only within assert() statements. */ -SQLITE_PRIVATE void sqlite3VdbeMemShallowCopy(Mem *pTo, const Mem *pFrom, int srcType){ - assert( (pFrom->flags & MEM_RowSet)==0 ); - sqlite3VdbeMemReleaseExternal(pTo); - memcpy(pTo, pFrom, MEMCELLSIZE); - pTo->xDel = 0; - if( (pFrom->flags&MEM_Dyn)!=0 || pFrom->z==pFrom->zMalloc ){ - pTo->flags &= ~(MEM_Dyn|MEM_Static|MEM_Ephem); - assert( srcType==MEM_Ephem || srcType==MEM_Static ); - pTo->flags |= srcType; - } +SQLITE_PRIVATE int sqlite3BtreeCursorIsValid(BtCursor *pCur){ + return pCur && pCur->eState==CURSOR_VALID; } +#endif /* NDEBUG */ /* -** Make a full copy of pFrom into pTo. Prior contents of pTo are -** freed before the copy is made. +** Set *pSize to the size of the buffer needed to hold the value of +** the key for the current entry. If the cursor is not pointing +** to a valid entry, *pSize is set to 0. +** +** For a table with the INTKEY flag set, this routine returns the key +** itself, not the number of bytes in the key. +** +** The caller must position the cursor prior to invoking this routine. +** +** This routine cannot fail. It always returns SQLITE_OK. */ -SQLITE_PRIVATE int sqlite3VdbeMemCopy(Mem *pTo, const Mem *pFrom){ - int rc = SQLITE_OK; - - assert( (pFrom->flags & MEM_RowSet)==0 ); - sqlite3VdbeMemReleaseExternal(pTo); - memcpy(pTo, pFrom, MEMCELLSIZE); - pTo->flags &= ~MEM_Dyn; - - if( pTo->flags&(MEM_Str|MEM_Blob) ){ - if( 0==(pFrom->flags&MEM_Static) ){ - pTo->flags |= MEM_Ephem; - rc = sqlite3VdbeMemMakeWriteable(pTo); - } +SQLITE_PRIVATE int sqlite3BtreeKeySize(BtCursor *pCur, i64 *pSize){ + assert( cursorHoldsMutex(pCur) ); + assert( pCur->eState==CURSOR_INVALID || pCur->eState==CURSOR_VALID ); + if( pCur->eState!=CURSOR_VALID ){ + *pSize = 0; + }else{ + getCellInfo(pCur); + *pSize = pCur->info.nKey; } - - return rc; + return SQLITE_OK; } /* -** Transfer the contents of pFrom to pTo. Any existing value in pTo is -** freed. If pFrom contains ephemeral data, a copy is made. +** Set *pSize to the number of bytes of data in the entry the +** cursor currently points to. ** -** pFrom contains an SQL NULL when this routine returns. +** The caller must guarantee that the cursor is pointing to a non-NULL +** valid entry. In other words, the calling procedure must guarantee +** that the cursor has Cursor.eState==CURSOR_VALID. +** +** Failure is not possible. This function always returns SQLITE_OK. +** It might just as well be a procedure (returning void) but we continue +** to return an integer result code for historical reasons. */ -SQLITE_PRIVATE void sqlite3VdbeMemMove(Mem *pTo, Mem *pFrom){ - assert( pFrom->db==0 || sqlite3_mutex_held(pFrom->db->mutex) ); - assert( pTo->db==0 || sqlite3_mutex_held(pTo->db->mutex) ); - assert( pFrom->db==0 || pTo->db==0 || pFrom->db==pTo->db ); - - sqlite3VdbeMemRelease(pTo); - memcpy(pTo, pFrom, sizeof(Mem)); - pFrom->flags = MEM_Null; - pFrom->xDel = 0; - pFrom->zMalloc = 0; +SQLITE_PRIVATE int sqlite3BtreeDataSize(BtCursor *pCur, u32 *pSize){ + assert( cursorHoldsMutex(pCur) ); + assert( pCur->eState==CURSOR_VALID ); + getCellInfo(pCur); + *pSize = pCur->info.nData; + return SQLITE_OK; } /* -** Change the value of a Mem to be a string or a BLOB. +** Given the page number of an overflow page in the database (parameter +** ovfl), this function finds the page number of the next page in the +** linked list of overflow pages. If possible, it uses the auto-vacuum +** pointer-map data instead of reading the content of page ovfl to do so. ** -** The memory management strategy depends on the value of the xDel -** parameter. If the value passed is SQLITE_TRANSIENT, then the -** string is copied into a (possibly existing) buffer managed by the -** Mem structure. Otherwise, any existing buffer is freed and the -** pointer copied. +** If an error occurs an SQLite error code is returned. Otherwise: ** -** If the string is too large (if it exceeds the SQLITE_LIMIT_LENGTH -** size limit) then no memory allocation occurs. If the string can be -** stored without allocating memory, then it is. If a memory allocation -** is required to store the string, then value of pMem is unchanged. In -** either case, SQLITE_TOOBIG is returned. -*/ -SQLITE_PRIVATE int sqlite3VdbeMemSetStr( - Mem *pMem, /* Memory cell to set to string value */ - const char *z, /* String pointer */ - int n, /* Bytes in string, or negative */ - u8 enc, /* Encoding of z. 0 for BLOBs */ - void (*xDel)(void*) /* Destructor function */ +** The page number of the next overflow page in the linked list is +** written to *pPgnoNext. If page ovfl is the last page in its linked +** list, *pPgnoNext is set to zero. +** +** If ppPage is not NULL, and a reference to the MemPage object corresponding +** to page number pOvfl was obtained, then *ppPage is set to point to that +** reference. It is the responsibility of the caller to call releasePage() +** on *ppPage to free the reference. In no reference was obtained (because +** the pointer-map was used to obtain the value for *pPgnoNext), then +** *ppPage is set to zero. +*/ +static int getOverflowPage( + BtShared *pBt, /* The database file */ + Pgno ovfl, /* Current overflow page number */ + MemPage **ppPage, /* OUT: MemPage handle (may be NULL) */ + Pgno *pPgnoNext /* OUT: Next overflow page number */ ){ - int nByte = n; /* New value for pMem->n */ - int iLimit; /* Maximum allowed string or blob size */ - u16 flags = 0; /* New value for pMem->flags */ + Pgno next = 0; + MemPage *pPage = 0; + int rc = SQLITE_OK; - assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) ); - assert( (pMem->flags & MEM_RowSet)==0 ); + assert( sqlite3_mutex_held(pBt->mutex) ); + assert(pPgnoNext); - /* If z is a NULL pointer, set pMem to contain an SQL NULL. */ - if( !z ){ - sqlite3VdbeMemSetNull(pMem); - return SQLITE_OK; - } +#ifndef SQLITE_OMIT_AUTOVACUUM + /* Try to find the next page in the overflow list using the + ** autovacuum pointer-map pages. Guess that the next page in + ** the overflow list is page number (ovfl+1). If that guess turns + ** out to be wrong, fall back to loading the data of page + ** number ovfl to determine the next page number. + */ + if( pBt->autoVacuum ){ + Pgno pgno; + Pgno iGuess = ovfl+1; + u8 eType; - if( pMem->db ){ - iLimit = pMem->db->aLimit[SQLITE_LIMIT_LENGTH]; - }else{ - iLimit = SQLITE_MAX_LENGTH; - } - flags = (enc==0?MEM_Blob:MEM_Str); - if( nByte<0 ){ - assert( enc!=0 ); - if( enc==SQLITE_UTF8 ){ - for(nByte=0; nByte<=iLimit && z[nByte]; nByte++){} - }else{ - for(nByte=0; nByte<=iLimit && (z[nByte] | z[nByte+1]); nByte+=2){} + while( PTRMAP_ISPAGE(pBt, iGuess) || iGuess==PENDING_BYTE_PAGE(pBt) ){ + iGuess++; } - flags |= MEM_Term; - } - /* The following block sets the new values of Mem.z and Mem.xDel. It - ** also sets a flag in local variable "flags" to indicate the memory - ** management (one of MEM_Dyn or MEM_Static). - */ - if( xDel==SQLITE_TRANSIENT ){ - int nAlloc = nByte; - if( flags&MEM_Term ){ - nAlloc += (enc==SQLITE_UTF8?1:2); - } - if( nByte>iLimit ){ - return SQLITE_TOOBIG; - } - if( sqlite3VdbeMemGrow(pMem, nAlloc, 0) ){ - return SQLITE_NOMEM; + if( iGuess<=btreePagecount(pBt) ){ + rc = ptrmapGet(pBt, iGuess, &eType, &pgno); + if( rc==SQLITE_OK && eType==PTRMAP_OVERFLOW2 && pgno==ovfl ){ + next = iGuess; + rc = SQLITE_DONE; + } } - memcpy(pMem->z, z, nAlloc); - }else if( xDel==SQLITE_DYNAMIC ){ - sqlite3VdbeMemRelease(pMem); - pMem->zMalloc = pMem->z = (char *)z; - pMem->xDel = 0; - }else{ - sqlite3VdbeMemRelease(pMem); - pMem->z = (char *)z; - pMem->xDel = xDel; - flags |= ((xDel==SQLITE_STATIC)?MEM_Static:MEM_Dyn); } +#endif - pMem->n = nByte; - pMem->flags = flags; - pMem->enc = (enc==0 ? SQLITE_UTF8 : enc); - pMem->type = (enc==0 ? SQLITE_BLOB : SQLITE_TEXT); - -#ifndef SQLITE_OMIT_UTF16 - if( pMem->enc!=SQLITE_UTF8 && sqlite3VdbeMemHandleBom(pMem) ){ - return SQLITE_NOMEM; + assert( next==0 || rc==SQLITE_DONE ); + if( rc==SQLITE_OK ){ + rc = btreeGetPage(pBt, ovfl, &pPage, 0); + assert( rc==SQLITE_OK || pPage==0 ); + if( rc==SQLITE_OK ){ + next = get4byte(pPage->aData); + } } -#endif - if( nByte>iLimit ){ - return SQLITE_TOOBIG; + *pPgnoNext = next; + if( ppPage ){ + *ppPage = pPage; + }else{ + releasePage(pPage); } + return (rc==SQLITE_DONE ? SQLITE_OK : rc); +} +/* +** Copy data from a buffer to a page, or from a page to a buffer. +** +** pPayload is a pointer to data stored on database page pDbPage. +** If argument eOp is false, then nByte bytes of data are copied +** from pPayload to the buffer pointed at by pBuf. If eOp is true, +** then sqlite3PagerWrite() is called on pDbPage and nByte bytes +** of data are copied from the buffer pBuf to pPayload. +** +** SQLITE_OK is returned on success, otherwise an error code. +*/ +static int copyPayload( + void *pPayload, /* Pointer to page data */ + void *pBuf, /* Pointer to buffer */ + int nByte, /* Number of bytes to copy */ + int eOp, /* 0 -> copy from page, 1 -> copy to page */ + DbPage *pDbPage /* Page containing pPayload */ +){ + if( eOp ){ + /* Copy data from buffer to page (a write operation) */ + int rc = sqlite3PagerWrite(pDbPage); + if( rc!=SQLITE_OK ){ + return rc; + } + memcpy(pPayload, pBuf, nByte); + }else{ + /* Copy data from page to buffer (a read operation) */ + memcpy(pBuf, pPayload, nByte); + } return SQLITE_OK; } /* -** Compare the values contained by the two memory cells, returning -** negative, zero or positive if pMem1 is less than, equal to, or greater -** than pMem2. Sorting order is NULL's first, followed by numbers (integers -** and reals) sorted numerically, followed by text ordered by the collating -** sequence pColl and finally blob's ordered by memcmp(). +** This function is used to read or overwrite payload information +** for the entry that the pCur cursor is pointing to. If the eOp +** parameter is 0, this is a read operation (data copied into +** buffer pBuf). If it is non-zero, a write (data copied from +** buffer pBuf). ** -** Two NULL values are considered equal by this function. +** A total of "amt" bytes are read or written beginning at "offset". +** Data is read to or from the buffer pBuf. +** +** The content being read or written might appear on the main page +** or be scattered out on multiple overflow pages. +** +** If the BtCursor.isIncrblobHandle flag is set, and the current +** cursor entry uses one or more overflow pages, this function +** allocates space for and lazily popluates the overflow page-list +** cache array (BtCursor.aOverflow). Subsequent calls use this +** cache to make seeking to the supplied offset more efficient. +** +** Once an overflow page-list cache has been allocated, it may be +** invalidated if some other cursor writes to the same table, or if +** the cursor is moved to a different row. Additionally, in auto-vacuum +** mode, the following events may invalidate an overflow page-list cache. +** +** * An incremental vacuum, +** * A commit in auto_vacuum="full" mode, +** * Creating a table (may require moving an overflow page). */ -SQLITE_PRIVATE int sqlite3MemCompare(const Mem *pMem1, const Mem *pMem2, const CollSeq *pColl){ - int rc; - int f1, f2; - int combined_flags; +static int accessPayload( + BtCursor *pCur, /* Cursor pointing to entry to read from */ + u32 offset, /* Begin reading this far into payload */ + u32 amt, /* Read this many bytes */ + unsigned char *pBuf, /* Write the bytes into this buffer */ + int eOp /* zero to read. non-zero to write. */ +){ + unsigned char *aPayload; + int rc = SQLITE_OK; + u32 nKey; + int iIdx = 0; + MemPage *pPage = pCur->apPage[pCur->iPage]; /* Btree page of current entry */ + BtShared *pBt = pCur->pBt; /* Btree this cursor belongs to */ - /* Interchange pMem1 and pMem2 if the collating sequence specifies - ** DESC order. - */ - f1 = pMem1->flags; - f2 = pMem2->flags; - combined_flags = f1|f2; - assert( (combined_flags & MEM_RowSet)==0 ); - - /* If one value is NULL, it is less than the other. If both values - ** are NULL, return 0. - */ - if( combined_flags&MEM_Null ){ - return (f2&MEM_Null) - (f1&MEM_Null); + assert( pPage ); + assert( pCur->eState==CURSOR_VALID ); + assert( pCur->aiIdx[pCur->iPage]nCell ); + assert( cursorHoldsMutex(pCur) ); + + getCellInfo(pCur); + aPayload = pCur->info.pCell + pCur->info.nHeader; + nKey = (pPage->intKey ? 0 : (int)pCur->info.nKey); + + if( NEVER(offset+amt > nKey+pCur->info.nData) + || &aPayload[pCur->info.nLocal] > &pPage->aData[pBt->usableSize] + ){ + /* Trying to read or write past the end of the data is an error */ + return SQLITE_CORRUPT_BKPT; } - /* If one value is a number and the other is not, the number is less. - ** If both are numbers, compare as reals if one is a real, or as integers - ** if both values are integers. - */ - if( combined_flags&(MEM_Int|MEM_Real) ){ - if( !(f1&(MEM_Int|MEM_Real)) ){ - return 1; - } - if( !(f2&(MEM_Int|MEM_Real)) ){ - return -1; - } - if( (f1 & f2 & MEM_Int)==0 ){ - double r1, r2; - if( (f1&MEM_Real)==0 ){ - r1 = (double)pMem1->u.i; - }else{ - r1 = pMem1->r; - } - if( (f2&MEM_Real)==0 ){ - r2 = (double)pMem2->u.i; - }else{ - r2 = pMem2->r; - } - if( r1r2 ) return 1; - return 0; - }else{ - assert( f1&MEM_Int ); - assert( f2&MEM_Int ); - if( pMem1->u.i < pMem2->u.i ) return -1; - if( pMem1->u.i > pMem2->u.i ) return 1; - return 0; + /* Check if data must be read/written to/from the btree page itself. */ + if( offsetinfo.nLocal ){ + int a = amt; + if( a+offset>pCur->info.nLocal ){ + a = pCur->info.nLocal - offset; } + rc = copyPayload(&aPayload[offset], pBuf, a, eOp, pPage->pDbPage); + offset = 0; + pBuf += a; + amt -= a; + }else{ + offset -= pCur->info.nLocal; } - /* If one value is a string and the other is a blob, the string is less. - ** If both are strings, compare using the collating functions. - */ - if( combined_flags&MEM_Str ){ - if( (f1 & MEM_Str)==0 ){ - return 1; + if( rc==SQLITE_OK && amt>0 ){ + const u32 ovflSize = pBt->usableSize - 4; /* Bytes content per ovfl page */ + Pgno nextPage; + + nextPage = get4byte(&aPayload[pCur->info.nLocal]); + +#ifndef SQLITE_OMIT_INCRBLOB + /* If the isIncrblobHandle flag is set and the BtCursor.aOverflow[] + ** has not been allocated, allocate it now. The array is sized at + ** one entry for each overflow page in the overflow chain. The + ** page number of the first overflow page is stored in aOverflow[0], + ** etc. A value of 0 in the aOverflow[] array means "not yet known" + ** (the cache is lazily populated). + */ + if( pCur->isIncrblobHandle && !pCur->aOverflow ){ + int nOvfl = (pCur->info.nPayload-pCur->info.nLocal+ovflSize-1)/ovflSize; + pCur->aOverflow = (Pgno *)sqlite3MallocZero(sizeof(Pgno)*nOvfl); + /* nOvfl is always positive. If it were zero, fetchPayload would have + ** been used instead of this routine. */ + if( ALWAYS(nOvfl) && !pCur->aOverflow ){ + rc = SQLITE_NOMEM; + } } - if( (f2 & MEM_Str)==0 ){ - return -1; + + /* If the overflow page-list cache has been allocated and the + ** entry for the first required overflow page is valid, skip + ** directly to it. + */ + if( pCur->aOverflow && pCur->aOverflow[offset/ovflSize] ){ + iIdx = (offset/ovflSize); + nextPage = pCur->aOverflow[iIdx]; + offset = (offset%ovflSize); } +#endif - assert( pMem1->enc==pMem2->enc ); - assert( pMem1->enc==SQLITE_UTF8 || - pMem1->enc==SQLITE_UTF16LE || pMem1->enc==SQLITE_UTF16BE ); + for( ; rc==SQLITE_OK && amt>0 && nextPage; iIdx++){ - /* The collation sequence must be defined at this point, even if - ** the user deletes the collation sequence after the vdbe program is - ** compiled (this was not always the case). - */ - assert( !pColl || pColl->xCmp ); +#ifndef SQLITE_OMIT_INCRBLOB + /* If required, populate the overflow page-list cache. */ + if( pCur->aOverflow ){ + assert(!pCur->aOverflow[iIdx] || pCur->aOverflow[iIdx]==nextPage); + pCur->aOverflow[iIdx] = nextPage; + } +#endif - if( pColl ){ - if( pMem1->enc==pColl->enc ){ - /* The strings are already in the correct encoding. Call the - ** comparison function directly */ - return pColl->xCmp(pColl->pUser,pMem1->n,pMem1->z,pMem2->n,pMem2->z); + if( offset>=ovflSize ){ + /* The only reason to read this page is to obtain the page + ** number for the next page in the overflow chain. The page + ** data is not required. So first try to lookup the overflow + ** page-list cache, if any, then fall back to the getOverflowPage() + ** function. + */ +#ifndef SQLITE_OMIT_INCRBLOB + if( pCur->aOverflow && pCur->aOverflow[iIdx+1] ){ + nextPage = pCur->aOverflow[iIdx+1]; + } else +#endif + rc = getOverflowPage(pBt, nextPage, 0, &nextPage); + offset -= ovflSize; }else{ - const void *v1, *v2; - int n1, n2; - Mem c1; - Mem c2; - memset(&c1, 0, sizeof(c1)); - memset(&c2, 0, sizeof(c2)); - sqlite3VdbeMemShallowCopy(&c1, pMem1, MEM_Ephem); - sqlite3VdbeMemShallowCopy(&c2, pMem2, MEM_Ephem); - v1 = sqlite3ValueText((sqlite3_value*)&c1, pColl->enc); - n1 = v1==0 ? 0 : c1.n; - v2 = sqlite3ValueText((sqlite3_value*)&c2, pColl->enc); - n2 = v2==0 ? 0 : c2.n; - rc = pColl->xCmp(pColl->pUser, n1, v1, n2, v2); - sqlite3VdbeMemRelease(&c1); - sqlite3VdbeMemRelease(&c2); - return rc; + /* Need to read this page properly. It contains some of the + ** range of data that is being read (eOp==0) or written (eOp!=0). + */ +#ifdef SQLITE_DIRECT_OVERFLOW_READ + sqlite3_file *fd; +#endif + int a = amt; + if( a + offset > ovflSize ){ + a = ovflSize - offset; + } + +#ifdef SQLITE_DIRECT_OVERFLOW_READ + /* If all the following are true: + ** + ** 1) this is a read operation, and + ** 2) data is required from the start of this overflow page, and + ** 3) the database is file-backed, and + ** 4) there is no open write-transaction, and + ** 5) the database is not a WAL database, + ** + ** then data can be read directly from the database file into the + ** output buffer, bypassing the page-cache altogether. This speeds + ** up loading large records that span many overflow pages. + */ + if( eOp==0 /* (1) */ + && offset==0 /* (2) */ + && pBt->inTransaction==TRANS_READ /* (4) */ + && (fd = sqlite3PagerFile(pBt->pPager))->pMethods /* (3) */ + && pBt->pPage1->aData[19]==0x01 /* (5) */ + ){ + u8 aSave[4]; + u8 *aWrite = &pBuf[-4]; + memcpy(aSave, aWrite, 4); + rc = sqlite3OsRead(fd, aWrite, a+4, (i64)pBt->pageSize*(nextPage-1)); + nextPage = get4byte(aWrite); + memcpy(aWrite, aSave, 4); + }else +#endif + + { + DbPage *pDbPage; + rc = sqlite3PagerGet(pBt->pPager, nextPage, &pDbPage); + if( rc==SQLITE_OK ){ + aPayload = sqlite3PagerGetData(pDbPage); + nextPage = get4byte(aPayload); + rc = copyPayload(&aPayload[offset+4], pBuf, a, eOp, pDbPage); + sqlite3PagerUnref(pDbPage); + offset = 0; + } + } + amt -= a; + pBuf += a; } } - /* If a NULL pointer was passed as the collate function, fall through - ** to the blob case and use memcmp(). */ } - - /* Both values must be blobs. Compare using memcmp(). */ - rc = memcmp(pMem1->z, pMem2->z, (pMem1->n>pMem2->n)?pMem2->n:pMem1->n); - if( rc==0 ){ - rc = pMem1->n - pMem2->n; + + if( rc==SQLITE_OK && amt>0 ){ + return SQLITE_CORRUPT_BKPT; } return rc; } /* -** Move data out of a btree key or data field and into a Mem structure. -** The data or key is taken from the entry that pCur is currently pointing -** to. offset and amt determine what portion of the data or key to retrieve. -** key is true to get the key or false to get data. The result is written -** into the pMem element. +** Read part of the key associated with cursor pCur. Exactly +** "amt" bytes will be transfered into pBuf[]. The transfer +** begins at "offset". ** -** The pMem structure is assumed to be uninitialized. Any prior content -** is overwritten without being freed. +** The caller must ensure that pCur is pointing to a valid row +** in the table. ** -** If this routine fails for any reason (malloc returns NULL or unable -** to read from the disk) then the pMem is left in an inconsistent state. +** Return SQLITE_OK on success or an error code if anything goes +** wrong. An error is returned if "offset+amt" is larger than +** the available payload. */ -SQLITE_PRIVATE int sqlite3VdbeMemFromBtree( - BtCursor *pCur, /* Cursor pointing at record to retrieve. */ - int offset, /* Offset from the start of data to return bytes from. */ - int amt, /* Number of bytes to return. */ - int key, /* If true, retrieve from the btree key, not data. */ - Mem *pMem /* OUT: Return data in this Mem structure. */ -){ - char *zData; /* Data from the btree layer */ - int available = 0; /* Number of bytes available on the local btree page */ - int rc = SQLITE_OK; /* Return code */ - - /* Note: the calls to BtreeKeyFetch() and DataFetch() below assert() - ** that both the BtShared and database handle mutexes are held. */ - assert( (pMem->flags & MEM_RowSet)==0 ); - if( key ){ - zData = (char *)sqlite3BtreeKeyFetch(pCur, &available); - }else{ - zData = (char *)sqlite3BtreeDataFetch(pCur, &available); - } - assert( zData!=0 ); - - if( offset+amt<=available && (pMem->flags&MEM_Dyn)==0 ){ - sqlite3VdbeMemRelease(pMem); - pMem->z = &zData[offset]; - pMem->flags = MEM_Blob|MEM_Ephem; - }else if( SQLITE_OK==(rc = sqlite3VdbeMemGrow(pMem, amt+2, 0)) ){ - pMem->flags = MEM_Blob|MEM_Dyn|MEM_Term; - pMem->enc = 0; - pMem->type = SQLITE_BLOB; - if( key ){ - rc = sqlite3BtreeKey(pCur, offset, amt, pMem->z); - }else{ - rc = sqlite3BtreeData(pCur, offset, amt, pMem->z); - } - pMem->z[amt] = 0; - pMem->z[amt+1] = 0; - if( rc!=SQLITE_OK ){ - sqlite3VdbeMemRelease(pMem); - } - } - pMem->n = amt; - - return rc; +SQLITE_PRIVATE int sqlite3BtreeKey(BtCursor *pCur, u32 offset, u32 amt, void *pBuf){ + assert( cursorHoldsMutex(pCur) ); + assert( pCur->eState==CURSOR_VALID ); + assert( pCur->iPage>=0 && pCur->apPage[pCur->iPage] ); + assert( pCur->aiIdx[pCur->iPage]apPage[pCur->iPage]->nCell ); + return accessPayload(pCur, offset, amt, (unsigned char*)pBuf, 0); } -/* This function is only available internally, it is not part of the -** external API. It works in a similar way to sqlite3_value_text(), -** except the data returned is in the encoding specified by the second -** parameter, which must be one of SQLITE_UTF16BE, SQLITE_UTF16LE or -** SQLITE_UTF8. +/* +** Read part of the data associated with cursor pCur. Exactly +** "amt" bytes will be transfered into pBuf[]. The transfer +** begins at "offset". ** -** (2006-02-16:) The enc value can be or-ed with SQLITE_UTF16_ALIGNED. -** If that is the case, then the result must be aligned on an even byte -** boundary. +** Return SQLITE_OK on success or an error code if anything goes +** wrong. An error is returned if "offset+amt" is larger than +** the available payload. */ -SQLITE_PRIVATE const void *sqlite3ValueText(sqlite3_value* pVal, u8 enc){ - if( !pVal ) return 0; - - assert( pVal->db==0 || sqlite3_mutex_held(pVal->db->mutex) ); - assert( (enc&3)==(enc&~SQLITE_UTF16_ALIGNED) ); - assert( (pVal->flags & MEM_RowSet)==0 ); +SQLITE_PRIVATE int sqlite3BtreeData(BtCursor *pCur, u32 offset, u32 amt, void *pBuf){ + int rc; - if( pVal->flags&MEM_Null ){ - return 0; - } - assert( (MEM_Blob>>3) == MEM_Str ); - pVal->flags |= (pVal->flags & MEM_Blob)>>3; - expandBlob(pVal); - if( pVal->flags&MEM_Str ){ - sqlite3VdbeChangeEncoding(pVal, enc & ~SQLITE_UTF16_ALIGNED); - if( (enc & SQLITE_UTF16_ALIGNED)!=0 && 1==(1&SQLITE_PTR_TO_INT(pVal->z)) ){ - assert( (pVal->flags & (MEM_Ephem|MEM_Static))!=0 ); - if( sqlite3VdbeMemMakeWriteable(pVal)!=SQLITE_OK ){ - return 0; - } - } - sqlite3VdbeMemNulTerminate(pVal); - }else{ - assert( (pVal->flags&MEM_Blob)==0 ); - sqlite3VdbeMemStringify(pVal, enc); - assert( 0==(1&SQLITE_PTR_TO_INT(pVal->z)) ); - } - assert(pVal->enc==(enc & ~SQLITE_UTF16_ALIGNED) || pVal->db==0 - || pVal->db->mallocFailed ); - if( pVal->enc==(enc & ~SQLITE_UTF16_ALIGNED) ){ - return pVal->z; - }else{ - return 0; +#ifndef SQLITE_OMIT_INCRBLOB + if ( pCur->eState==CURSOR_INVALID ){ + return SQLITE_ABORT; } -} +#endif -/* -** Create a new sqlite3_value object. -*/ -SQLITE_PRIVATE sqlite3_value *sqlite3ValueNew(sqlite3 *db){ - Mem *p = sqlite3DbMallocZero(db, sizeof(*p)); - if( p ){ - p->flags = MEM_Null; - p->type = SQLITE_NULL; - p->db = db; + assert( cursorHoldsMutex(pCur) ); + rc = restoreCursorPosition(pCur); + if( rc==SQLITE_OK ){ + assert( pCur->eState==CURSOR_VALID ); + assert( pCur->iPage>=0 && pCur->apPage[pCur->iPage] ); + assert( pCur->aiIdx[pCur->iPage]apPage[pCur->iPage]->nCell ); + rc = accessPayload(pCur, offset, amt, pBuf, 0); } - return p; + return rc; } /* -** Create a new sqlite3_value object, containing the value of pExpr. +** Return a pointer to payload information from the entry that the +** pCur cursor is pointing to. The pointer is to the beginning of +** the key if skipKey==0 and it points to the beginning of data if +** skipKey==1. The number of bytes of available key/data is written +** into *pAmt. If *pAmt==0, then the value returned will not be +** a valid pointer. ** -** This only works for very simple expressions that consist of one constant -** token (i.e. "5", "5.1", "'a string'"). If the expression can -** be converted directly into a value, then the value is allocated and -** a pointer written to *ppVal. The caller is responsible for deallocating -** the value by passing it to sqlite3ValueFree() later on. If the expression -** cannot be converted to a value, then *ppVal is set to NULL. +** This routine is an optimization. It is common for the entire key +** and data to fit on the local page and for there to be no overflow +** pages. When that is so, this routine can be used to access the +** key and data without making a copy. If the key and/or data spills +** onto overflow pages, then accessPayload() must be used to reassemble +** the key/data and copy it into a preallocated buffer. +** +** The pointer returned by this routine looks directly into the cached +** page of the database. The data might change or move the next time +** any btree routine is called. */ -SQLITE_PRIVATE int sqlite3ValueFromExpr( - sqlite3 *db, /* The database connection */ - Expr *pExpr, /* The expression to evaluate */ - u8 enc, /* Encoding to use */ - u8 affinity, /* Affinity to use */ - sqlite3_value **ppVal /* Write the new value here */ +static const unsigned char *fetchPayload( + BtCursor *pCur, /* Cursor pointing to entry to read from */ + int *pAmt, /* Write the number of available bytes here */ + int skipKey /* read beginning at data if this is true */ ){ - int op; - char *zVal = 0; - sqlite3_value *pVal = 0; + unsigned char *aPayload; + MemPage *pPage; + u32 nKey; + u32 nLocal; - if( !pExpr ){ - *ppVal = 0; - return SQLITE_OK; + assert( pCur!=0 && pCur->iPage>=0 && pCur->apPage[pCur->iPage]); + assert( pCur->eState==CURSOR_VALID ); + assert( cursorHoldsMutex(pCur) ); + pPage = pCur->apPage[pCur->iPage]; + assert( pCur->aiIdx[pCur->iPage]nCell ); + if( NEVER(pCur->info.nSize==0) ){ + btreeParseCell(pCur->apPage[pCur->iPage], pCur->aiIdx[pCur->iPage], + &pCur->info); } - op = pExpr->op; - - if( op==TK_STRING || op==TK_FLOAT || op==TK_INTEGER ){ - pVal = sqlite3ValueNew(db); - if( pVal==0 ) goto no_mem; - if( ExprHasProperty(pExpr, EP_IntValue) ){ - sqlite3VdbeMemSetInt64(pVal, (i64)pExpr->u.iValue); - }else{ - zVal = sqlite3DbStrDup(db, pExpr->u.zToken); - if( zVal==0 ) goto no_mem; - sqlite3ValueSetStr(pVal, -1, zVal, SQLITE_UTF8, SQLITE_DYNAMIC); - } - if( (op==TK_INTEGER || op==TK_FLOAT ) && affinity==SQLITE_AFF_NONE ){ - sqlite3ValueApplyAffinity(pVal, SQLITE_AFF_NUMERIC, SQLITE_UTF8); - }else{ - sqlite3ValueApplyAffinity(pVal, affinity, SQLITE_UTF8); - } - if( enc!=SQLITE_UTF8 ){ - sqlite3VdbeChangeEncoding(pVal, enc); - } - }else if( op==TK_UMINUS ) { - if( SQLITE_OK==sqlite3ValueFromExpr(db,pExpr->pLeft,enc,affinity,&pVal) ){ - pVal->u.i = -1 * pVal->u.i; - /* (double)-1 In case of SQLITE_OMIT_FLOATING_POINT... */ - pVal->r = (double)-1 * pVal->r; - } + aPayload = pCur->info.pCell; + aPayload += pCur->info.nHeader; + if( pPage->intKey ){ + nKey = 0; + }else{ + nKey = (int)pCur->info.nKey; } -#ifndef SQLITE_OMIT_BLOB_LITERAL - else if( op==TK_BLOB ){ - int nVal; - assert( pExpr->u.zToken[0]=='x' || pExpr->u.zToken[0]=='X' ); - assert( pExpr->u.zToken[1]=='\'' ); - pVal = sqlite3ValueNew(db); - if( !pVal ) goto no_mem; - zVal = &pExpr->u.zToken[2]; - nVal = sqlite3Strlen30(zVal)-1; - assert( zVal[nVal]=='\'' ); - sqlite3VdbeMemSetStr(pVal, sqlite3HexToBlob(db, zVal, nVal), nVal/2, - 0, SQLITE_DYNAMIC); + if( skipKey ){ + aPayload += nKey; + nLocal = pCur->info.nLocal - nKey; + }else{ + nLocal = pCur->info.nLocal; + assert( nLocal<=nKey ); } -#endif - - *ppVal = pVal; - return SQLITE_OK; - -no_mem: - db->mallocFailed = 1; - sqlite3DbFree(db, zVal); - sqlite3ValueFree(pVal); - *ppVal = 0; - return SQLITE_NOMEM; + *pAmt = nLocal; + return aPayload; } + /* -** Change the string value of an sqlite3_value object +** For the entry that cursor pCur is point to, return as +** many bytes of the key or data as are available on the local +** b-tree page. Write the number of available bytes into *pAmt. +** +** The pointer returned is ephemeral. The key/data may move +** or be destroyed on the next call to any Btree routine, +** including calls from other threads against the same cache. +** Hence, a mutex on the BtShared should be held prior to calling +** this routine. +** +** These routines is used to get quick access to key and data +** in the common case where no overflow pages are used. */ -SQLITE_PRIVATE void sqlite3ValueSetStr( - sqlite3_value *v, /* Value to be set */ - int n, /* Length of string z */ - const void *z, /* Text of the new string */ - u8 enc, /* Encoding to use */ - void (*xDel)(void*) /* Destructor for the string */ -){ - if( v ) sqlite3VdbeMemSetStr((Mem *)v, z, n, enc, xDel); +SQLITE_PRIVATE const void *sqlite3BtreeKeyFetch(BtCursor *pCur, int *pAmt){ + const void *p = 0; + assert( sqlite3_mutex_held(pCur->pBtree->db->mutex) ); + assert( cursorHoldsMutex(pCur) ); + if( ALWAYS(pCur->eState==CURSOR_VALID) ){ + p = (const void*)fetchPayload(pCur, pAmt, 0); + } + return p; +} +SQLITE_PRIVATE const void *sqlite3BtreeDataFetch(BtCursor *pCur, int *pAmt){ + const void *p = 0; + assert( sqlite3_mutex_held(pCur->pBtree->db->mutex) ); + assert( cursorHoldsMutex(pCur) ); + if( ALWAYS(pCur->eState==CURSOR_VALID) ){ + p = (const void*)fetchPayload(pCur, pAmt, 1); + } + return p; } + /* -** Free an sqlite3_value object +** Move the cursor down to a new child page. The newPgno argument is the +** page number of the child page to move to. +** +** This function returns SQLITE_CORRUPT if the page-header flags field of +** the new child page does not match the flags field of the parent (i.e. +** if an intkey page appears to be the parent of a non-intkey page, or +** vice-versa). */ -SQLITE_PRIVATE void sqlite3ValueFree(sqlite3_value *v){ - if( !v ) return; - sqlite3VdbeMemRelease((Mem *)v); - sqlite3DbFree(((Mem*)v)->db, v); +static int moveToChild(BtCursor *pCur, u32 newPgno){ + int rc; + int i = pCur->iPage; + MemPage *pNewPage; + BtShared *pBt = pCur->pBt; + + assert( cursorHoldsMutex(pCur) ); + assert( pCur->eState==CURSOR_VALID ); + assert( pCur->iPageiPage>=(BTCURSOR_MAX_DEPTH-1) ){ + return SQLITE_CORRUPT_BKPT; + } + rc = getAndInitPage(pBt, newPgno, &pNewPage); + if( rc ) return rc; + pCur->apPage[i+1] = pNewPage; + pCur->aiIdx[i+1] = 0; + pCur->iPage++; + + pCur->info.nSize = 0; + pCur->validNKey = 0; + if( pNewPage->nCell<1 || pNewPage->intKey!=pCur->apPage[i]->intKey ){ + return SQLITE_CORRUPT_BKPT; + } + return SQLITE_OK; } +#if 0 /* -** Return the number of bytes in the sqlite3_value object assuming -** that it uses the encoding "enc" +** Page pParent is an internal (non-leaf) tree page. This function +** asserts that page number iChild is the left-child if the iIdx'th +** cell in page pParent. Or, if iIdx is equal to the total number of +** cells in pParent, that page number iChild is the right-child of +** the page. */ -SQLITE_PRIVATE int sqlite3ValueBytes(sqlite3_value *pVal, u8 enc){ - Mem *p = (Mem*)pVal; - if( (p->flags & MEM_Blob)!=0 || sqlite3ValueText(pVal, enc) ){ - if( p->flags & MEM_Zero ){ - return p->n + p->u.nZero; - }else{ - return p->n; - } +static void assertParentIndex(MemPage *pParent, int iIdx, Pgno iChild){ + assert( iIdx<=pParent->nCell ); + if( iIdx==pParent->nCell ){ + assert( get4byte(&pParent->aData[pParent->hdrOffset+8])==iChild ); + }else{ + assert( get4byte(findCell(pParent, iIdx))==iChild ); } - return 0; } +#else +# define assertParentIndex(x,y,z) +#endif -/************** End of vdbemem.c *********************************************/ -/************** Begin file vdbeaux.c *****************************************/ /* -** 2003 September 6 +** Move the cursor up to the parent page. ** -** The author disclaims copyright to this source code. In place of -** a legal notice, here is a blessing: +** pCur->idx is set to the cell index that contains the pointer +** to the page we are coming from. If we are coming from the +** right-most child page then pCur->idx is set to one more than +** the largest cell index. +*/ +static void moveToParent(BtCursor *pCur){ + assert( cursorHoldsMutex(pCur) ); + assert( pCur->eState==CURSOR_VALID ); + assert( pCur->iPage>0 ); + assert( pCur->apPage[pCur->iPage] ); + + /* UPDATE: It is actually possible for the condition tested by the assert + ** below to be untrue if the database file is corrupt. This can occur if + ** one cursor has modified page pParent while a reference to it is held + ** by a second cursor. Which can only happen if a single page is linked + ** into more than one b-tree structure in a corrupt database. */ +#if 0 + assertParentIndex( + pCur->apPage[pCur->iPage-1], + pCur->aiIdx[pCur->iPage-1], + pCur->apPage[pCur->iPage]->pgno + ); +#endif + testcase( pCur->aiIdx[pCur->iPage-1] > pCur->apPage[pCur->iPage-1]->nCell ); + + releasePage(pCur->apPage[pCur->iPage]); + pCur->iPage--; + pCur->info.nSize = 0; + pCur->validNKey = 0; +} + +/* +** Move the cursor to point to the root page of its b-tree structure. ** -** May you do good and not evil. -** May you find forgiveness for yourself and forgive others. -** May you share freely, never taking more than you give. +** If the table has a virtual root page, then the cursor is moved to point +** to the virtual root page instead of the actual root page. A table has a +** virtual root page when the actual root page contains no cells and a +** single child page. This can only happen with the table rooted at page 1. ** -************************************************************************* -** This file contains code used for creating, destroying, and populating -** a VDBE (or an "sqlite3_stmt" as it is known to the outside world.) Prior -** to version 2.8.7, all this code was combined into the vdbe.c source file. -** But that file was getting too big so this subroutines were split out. +** If the b-tree structure is empty, the cursor state is set to +** CURSOR_INVALID. Otherwise, the cursor is set to point to the first +** cell located on the root (or virtual root) page and the cursor state +** is set to CURSOR_VALID. ** -** $Id: vdbeaux.c,v 1.467 2009/06/26 16:32:13 shane Exp $ +** If this function returns successfully, it may be assumed that the +** page-header flags indicate that the [virtual] root-page is the expected +** kind of b-tree page (i.e. if when opening the cursor the caller did not +** specify a KeyInfo structure the flags byte is set to 0x05 or 0x0D, +** indicating a table b-tree, or if the caller did specify a KeyInfo +** structure the flags byte is set to 0x02 or 0x0A, indicating an index +** b-tree). */ +static int moveToRoot(BtCursor *pCur){ + MemPage *pRoot; + int rc = SQLITE_OK; + Btree *p = pCur->pBtree; + BtShared *pBt = p->pBt; + assert( cursorHoldsMutex(pCur) ); + assert( CURSOR_INVALID < CURSOR_REQUIRESEEK ); + assert( CURSOR_VALID < CURSOR_REQUIRESEEK ); + assert( CURSOR_FAULT > CURSOR_REQUIRESEEK ); + if( pCur->eState>=CURSOR_REQUIRESEEK ){ + if( pCur->eState==CURSOR_FAULT ){ + assert( pCur->skipNext!=SQLITE_OK ); + return pCur->skipNext; + } + sqlite3BtreeClearCursor(pCur); + } + if( pCur->iPage>=0 ){ + int i; + for(i=1; i<=pCur->iPage; i++){ + releasePage(pCur->apPage[i]); + } + pCur->iPage = 0; + }else if( pCur->pgnoRoot==0 ){ + pCur->eState = CURSOR_INVALID; + return SQLITE_OK; + }else{ + rc = getAndInitPage(pBt, pCur->pgnoRoot, &pCur->apPage[0]); + if( rc!=SQLITE_OK ){ + pCur->eState = CURSOR_INVALID; + return rc; + } + pCur->iPage = 0; -/* -** When debugging the code generator in a symbolic debugger, one can -** set the sqlite3VdbeAddopTrace to 1 and all opcodes will be printed -** as they are added to the instruction stream. -*/ -#ifdef SQLITE_DEBUG -SQLITE_PRIVATE int sqlite3VdbeAddopTrace = 0; -#endif + /* If pCur->pKeyInfo is not NULL, then the caller that opened this cursor + ** expected to open it on an index b-tree. Otherwise, if pKeyInfo is + ** NULL, the caller expects a table b-tree. If this is not the case, + ** return an SQLITE_CORRUPT error. */ + assert( pCur->apPage[0]->intKey==1 || pCur->apPage[0]->intKey==0 ); + if( (pCur->pKeyInfo==0)!=pCur->apPage[0]->intKey ){ + return SQLITE_CORRUPT_BKPT; + } + } + /* Assert that the root page is of the correct type. This must be the + ** case as the call to this function that loaded the root-page (either + ** this call or a previous invocation) would have detected corruption + ** if the assumption were not true, and it is not possible for the flags + ** byte to have been modified while this cursor is holding a reference + ** to the page. */ + pRoot = pCur->apPage[0]; + assert( pRoot->pgno==pCur->pgnoRoot ); + assert( pRoot->isInit && (pCur->pKeyInfo==0)==pRoot->intKey ); -/* -** Create a new virtual database engine. -*/ -SQLITE_PRIVATE Vdbe *sqlite3VdbeCreate(sqlite3 *db){ - Vdbe *p; - p = sqlite3DbMallocZero(db, sizeof(Vdbe) ); - if( p==0 ) return 0; - p->db = db; - if( db->pVdbe ){ - db->pVdbe->pPrev = p; + pCur->aiIdx[0] = 0; + pCur->info.nSize = 0; + pCur->atLast = 0; + pCur->validNKey = 0; + + if( pRoot->nCell==0 && !pRoot->leaf ){ + Pgno subpage; + if( pRoot->pgno!=1 ) return SQLITE_CORRUPT_BKPT; + subpage = get4byte(&pRoot->aData[pRoot->hdrOffset+8]); + pCur->eState = CURSOR_VALID; + rc = moveToChild(pCur, subpage); + }else{ + pCur->eState = ((pRoot->nCell>0)?CURSOR_VALID:CURSOR_INVALID); } - p->pNext = db->pVdbe; - p->pPrev = 0; - db->pVdbe = p; - p->magic = VDBE_MAGIC_INIT; - return p; + return rc; } /* -** Remember the SQL string for a prepared statement. +** Move the cursor down to the left-most leaf entry beneath the +** entry to which it is currently pointing. +** +** The left-most leaf is the one with the smallest key - the first +** in ascending order. */ -SQLITE_PRIVATE void sqlite3VdbeSetSql(Vdbe *p, const char *z, int n, int isPrepareV2){ - if( p==0 ) return; -#ifdef SQLITE_OMIT_TRACE - if( !isPrepareV2 ) return; -#endif - assert( p->zSql==0 ); - p->zSql = sqlite3DbStrNDup(p->db, z, n); - p->isPrepareV2 = isPrepareV2 ? 1 : 0; +static int moveToLeftmost(BtCursor *pCur){ + Pgno pgno; + int rc = SQLITE_OK; + MemPage *pPage; + + assert( cursorHoldsMutex(pCur) ); + assert( pCur->eState==CURSOR_VALID ); + while( rc==SQLITE_OK && !(pPage = pCur->apPage[pCur->iPage])->leaf ){ + assert( pCur->aiIdx[pCur->iPage]nCell ); + pgno = get4byte(findCell(pPage, pCur->aiIdx[pCur->iPage])); + rc = moveToChild(pCur, pgno); + } + return rc; } /* -** Return the SQL associated with a prepared statement +** Move the cursor down to the right-most leaf entry beneath the +** page to which it is currently pointing. Notice the difference +** between moveToLeftmost() and moveToRightmost(). moveToLeftmost() +** finds the left-most entry beneath the *entry* whereas moveToRightmost() +** finds the right-most entry beneath the *page*. +** +** The right-most entry is the one with the largest key - the last +** key in ascending order. */ -SQLITE_API const char *sqlite3_sql(sqlite3_stmt *pStmt){ - Vdbe *p = (Vdbe *)pStmt; - return (p->isPrepareV2 ? p->zSql : 0); +static int moveToRightmost(BtCursor *pCur){ + Pgno pgno; + int rc = SQLITE_OK; + MemPage *pPage = 0; + + assert( cursorHoldsMutex(pCur) ); + assert( pCur->eState==CURSOR_VALID ); + while( rc==SQLITE_OK && !(pPage = pCur->apPage[pCur->iPage])->leaf ){ + pgno = get4byte(&pPage->aData[pPage->hdrOffset+8]); + pCur->aiIdx[pCur->iPage] = pPage->nCell; + rc = moveToChild(pCur, pgno); + } + if( rc==SQLITE_OK ){ + pCur->aiIdx[pCur->iPage] = pPage->nCell-1; + pCur->info.nSize = 0; + pCur->validNKey = 0; + } + return rc; } -/* -** Swap all content between two VDBE structures. +/* Move the cursor to the first entry in the table. Return SQLITE_OK +** on success. Set *pRes to 0 if the cursor actually points to something +** or set *pRes to 1 if the table is empty. */ -SQLITE_PRIVATE void sqlite3VdbeSwap(Vdbe *pA, Vdbe *pB){ - Vdbe tmp, *pTmp; - char *zTmp; - tmp = *pA; - *pA = *pB; - *pB = tmp; - pTmp = pA->pNext; - pA->pNext = pB->pNext; - pB->pNext = pTmp; - pTmp = pA->pPrev; - pA->pPrev = pB->pPrev; - pB->pPrev = pTmp; - zTmp = pA->zSql; - pA->zSql = pB->zSql; - pB->zSql = zTmp; - pB->isPrepareV2 = pA->isPrepareV2; +SQLITE_PRIVATE int sqlite3BtreeFirst(BtCursor *pCur, int *pRes){ + int rc; + + assert( cursorHoldsMutex(pCur) ); + assert( sqlite3_mutex_held(pCur->pBtree->db->mutex) ); + rc = moveToRoot(pCur); + if( rc==SQLITE_OK ){ + if( pCur->eState==CURSOR_INVALID ){ + assert( pCur->pgnoRoot==0 || pCur->apPage[pCur->iPage]->nCell==0 ); + *pRes = 1; + }else{ + assert( pCur->apPage[pCur->iPage]->nCell>0 ); + *pRes = 0; + rc = moveToLeftmost(pCur); + } + } + return rc; } -#ifdef SQLITE_DEBUG -/* -** Turn tracing on or off +/* Move the cursor to the last entry in the table. Return SQLITE_OK +** on success. Set *pRes to 0 if the cursor actually points to something +** or set *pRes to 1 if the table is empty. */ -SQLITE_PRIVATE void sqlite3VdbeTrace(Vdbe *p, FILE *trace){ - p->trace = trace; -} +SQLITE_PRIVATE int sqlite3BtreeLast(BtCursor *pCur, int *pRes){ + int rc; + + assert( cursorHoldsMutex(pCur) ); + assert( sqlite3_mutex_held(pCur->pBtree->db->mutex) ); + + /* If the cursor already points to the last entry, this is a no-op. */ + if( CURSOR_VALID==pCur->eState && pCur->atLast ){ +#ifdef SQLITE_DEBUG + /* This block serves to assert() that the cursor really does point + ** to the last entry in the b-tree. */ + int ii; + for(ii=0; iiiPage; ii++){ + assert( pCur->aiIdx[ii]==pCur->apPage[ii]->nCell ); + } + assert( pCur->aiIdx[pCur->iPage]==pCur->apPage[pCur->iPage]->nCell-1 ); + assert( pCur->apPage[pCur->iPage]->leaf ); #endif + return SQLITE_OK; + } -/* -** Resize the Vdbe.aOp array so that it is at least one op larger than -** it was. -** -** If an out-of-memory error occurs while resizing the array, return -** SQLITE_NOMEM. In this case Vdbe.aOp and Vdbe.nOpAlloc remain -** unchanged (this is so that any opcodes already allocated can be -** correctly deallocated along with the rest of the Vdbe). -*/ -static int growOpArray(Vdbe *p){ - VdbeOp *pNew; - int nNew = (p->nOpAlloc ? p->nOpAlloc*2 : (int)(1024/sizeof(Op))); - pNew = sqlite3DbRealloc(p->db, p->aOp, nNew*sizeof(Op)); - if( pNew ){ - p->nOpAlloc = sqlite3DbMallocSize(p->db, pNew)/sizeof(Op); - p->aOp = pNew; + rc = moveToRoot(pCur); + if( rc==SQLITE_OK ){ + if( CURSOR_INVALID==pCur->eState ){ + assert( pCur->pgnoRoot==0 || pCur->apPage[pCur->iPage]->nCell==0 ); + *pRes = 1; + }else{ + assert( pCur->eState==CURSOR_VALID ); + *pRes = 0; + rc = moveToRightmost(pCur); + pCur->atLast = rc==SQLITE_OK ?1:0; + } } - return (pNew ? SQLITE_OK : SQLITE_NOMEM); + return rc; } -/* -** Add a new instruction to the list of instructions current in the -** VDBE. Return the address of the new instruction. +/* Move the cursor so that it points to an entry near the key +** specified by pIdxKey or intKey. Return a success code. ** -** Parameters: +** For INTKEY tables, the intKey parameter is used. pIdxKey +** must be NULL. For index tables, pIdxKey is used and intKey +** is ignored. ** -** p Pointer to the VDBE +** If an exact match is not found, then the cursor is always +** left pointing at a leaf page which would hold the entry if it +** were present. The cursor might point to an entry that comes +** before or after the key. ** -** op The opcode for this instruction +** An integer is written into *pRes which is the result of +** comparing the key with the entry to which the cursor is +** pointing. The meaning of the integer written into +** *pRes is as follows: ** -** p1, p2, p3 Operands +** *pRes<0 The cursor is left pointing at an entry that +** is smaller than intKey/pIdxKey or if the table is empty +** and the cursor is therefore left point to nothing. +** +** *pRes==0 The cursor is left pointing at an entry that +** exactly matches intKey/pIdxKey. +** +** *pRes>0 The cursor is left pointing at an entry that +** is larger than intKey/pIdxKey. ** -** Use the sqlite3VdbeResolveLabel() function to fix an address and -** the sqlite3VdbeChangeP4() function to change the value of the P4 -** operand. */ -SQLITE_PRIVATE int sqlite3VdbeAddOp3(Vdbe *p, int op, int p1, int p2, int p3){ - int i; - VdbeOp *pOp; +SQLITE_PRIVATE int sqlite3BtreeMovetoUnpacked( + BtCursor *pCur, /* The cursor to be moved */ + UnpackedRecord *pIdxKey, /* Unpacked index key */ + i64 intKey, /* The table key */ + int biasRight, /* If true, bias the search to the high end */ + int *pRes /* Write search results here */ +){ + int rc; - i = p->nOp; - assert( p->magic==VDBE_MAGIC_INIT ); - assert( op>0 && op<0xff ); - if( p->nOpAlloc<=i ){ - if( growOpArray(p) ){ - return 1; + assert( cursorHoldsMutex(pCur) ); + assert( sqlite3_mutex_held(pCur->pBtree->db->mutex) ); + assert( pRes ); + assert( (pIdxKey==0)==(pCur->pKeyInfo==0) ); + + /* If the cursor is already positioned at the point we are trying + ** to move to, then just return without doing any work */ + if( pCur->eState==CURSOR_VALID && pCur->validNKey + && pCur->apPage[0]->intKey + ){ + if( pCur->info.nKey==intKey ){ + *pRes = 0; + return SQLITE_OK; + } + if( pCur->atLast && pCur->info.nKeynOp++; - pOp = &p->aOp[i]; - pOp->opcode = (u8)op; - pOp->p5 = 0; - pOp->p1 = p1; - pOp->p2 = p2; - pOp->p3 = p3; - pOp->p4.p = 0; - pOp->p4type = P4_NOTUSED; - p->expired = 0; -#ifdef SQLITE_DEBUG - pOp->zComment = 0; - if( sqlite3VdbeAddopTrace ) sqlite3VdbePrintOp(0, i, &p->aOp[i]); -#endif -#ifdef VDBE_PROFILE - pOp->cycles = 0; - pOp->cnt = 0; -#endif - return i; -} -SQLITE_PRIVATE int sqlite3VdbeAddOp0(Vdbe *p, int op){ - return sqlite3VdbeAddOp3(p, op, 0, 0, 0); -} -SQLITE_PRIVATE int sqlite3VdbeAddOp1(Vdbe *p, int op, int p1){ - return sqlite3VdbeAddOp3(p, op, p1, 0, 0); -} -SQLITE_PRIVATE int sqlite3VdbeAddOp2(Vdbe *p, int op, int p1, int p2){ - return sqlite3VdbeAddOp3(p, op, p1, p2, 0); -} - - -/* -** Add an opcode that includes the p4 value as a pointer. -*/ -SQLITE_PRIVATE int sqlite3VdbeAddOp4( - Vdbe *p, /* Add the opcode to this VM */ - int op, /* The new opcode */ - int p1, /* The P1 operand */ - int p2, /* The P2 operand */ - int p3, /* The P3 operand */ - const char *zP4, /* The P4 operand */ - int p4type /* P4 operand type */ -){ - int addr = sqlite3VdbeAddOp3(p, op, p1, p2, p3); - sqlite3VdbeChangeP4(p, addr, zP4, p4type); - return addr; -} -/* -** Create a new symbolic label for an instruction that has yet to be -** coded. The symbolic label is really just a negative number. The -** label can be used as the P2 value of an operation. Later, when -** the label is resolved to a specific address, the VDBE will scan -** through its operation list and change all values of P2 which match -** the label into the resolved address. -** -** The VDBE knows that a P2 value is a label because labels are -** always negative and P2 values are suppose to be non-negative. -** Hence, a negative P2 value is a label that has yet to be resolved. -** -** Zero is returned if a malloc() fails. -*/ -SQLITE_PRIVATE int sqlite3VdbeMakeLabel(Vdbe *p){ - int i; - i = p->nLabel++; - assert( p->magic==VDBE_MAGIC_INIT ); - if( i>=p->nLabelAlloc ){ - int n = p->nLabelAlloc*2 + 5; - p->aLabel = sqlite3DbReallocOrFree(p->db, p->aLabel, - n*sizeof(p->aLabel[0])); - p->nLabelAlloc = sqlite3DbMallocSize(p->db, p->aLabel)/sizeof(p->aLabel[0]); - } - if( p->aLabel ){ - p->aLabel[i] = -1; + rc = moveToRoot(pCur); + if( rc ){ + return rc; } - return -1-i; -} - -/* -** Resolve label "x" to be the address of the next instruction to -** be inserted. The parameter "x" must have been obtained from -** a prior call to sqlite3VdbeMakeLabel(). -*/ -SQLITE_PRIVATE void sqlite3VdbeResolveLabel(Vdbe *p, int x){ - int j = -1-x; - assert( p->magic==VDBE_MAGIC_INIT ); - assert( j>=0 && jnLabel ); - if( p->aLabel ){ - p->aLabel[j] = p->nOp; + assert( pCur->pgnoRoot==0 || pCur->apPage[pCur->iPage] ); + assert( pCur->pgnoRoot==0 || pCur->apPage[pCur->iPage]->isInit ); + assert( pCur->eState==CURSOR_INVALID || pCur->apPage[pCur->iPage]->nCell>0 ); + if( pCur->eState==CURSOR_INVALID ){ + *pRes = -1; + assert( pCur->pgnoRoot==0 || pCur->apPage[pCur->iPage]->nCell==0 ); + return SQLITE_OK; } -} - -/* -** Loop through the program looking for P2 values that are negative -** on jump instructions. Each such value is a label. Resolve the -** label by setting the P2 value to its correct non-zero value. -** -** This routine is called once after all opcodes have been inserted. -** -** Variable *pMaxFuncArgs is set to the maximum value of any P2 argument -** to an OP_Function, OP_AggStep or OP_VFilter opcode. This is used by -** sqlite3VdbeMakeReady() to size the Vdbe.apArg[] array. -** -** This routine also does the following optimization: It scans for -** instructions that might cause a statement rollback. Such instructions -** are: -** -** * OP_Halt with P1=SQLITE_CONSTRAINT and P2=OE_Abort. -** * OP_Destroy -** * OP_VUpdate -** * OP_VRename -** -** If no such instruction is found, then every Statement instruction -** is changed to a Noop. In this way, we avoid creating the statement -** journal file unnecessarily. -*/ -static void resolveP2Values(Vdbe *p, int *pMaxFuncArgs){ - int i; - int nMaxArgs = 0; - Op *pOp; - int *aLabel = p->aLabel; - int doesStatementRollback = 0; - int hasStatementBegin = 0; - p->readOnly = 1; - p->usesStmtJournal = 0; - for(pOp=p->aOp, i=p->nOp-1; i>=0; i--, pOp++){ - u8 opcode = pOp->opcode; - - if( opcode==OP_Function || opcode==OP_AggStep ){ - if( pOp->p5>nMaxArgs ) nMaxArgs = pOp->p5; -#ifndef SQLITE_OMIT_VIRTUALTABLE - }else if( opcode==OP_VUpdate ){ - if( pOp->p2>nMaxArgs ) nMaxArgs = pOp->p2; -#endif + assert( pCur->apPage[0]->intKey || pIdxKey ); + for(;;){ + int lwr, upr, idx; + Pgno chldPg; + MemPage *pPage = pCur->apPage[pCur->iPage]; + int c; + + /* pPage->nCell must be greater than zero. If this is the root-page + ** the cursor would have been INVALID above and this for(;;) loop + ** not run. If this is not the root-page, then the moveToChild() routine + ** would have already detected db corruption. Similarly, pPage must + ** be the right kind (index or table) of b-tree page. Otherwise + ** a moveToChild() or moveToRoot() call would have detected corruption. */ + assert( pPage->nCell>0 ); + assert( pPage->intKey==(pIdxKey==0) ); + lwr = 0; + upr = pPage->nCell-1; + if( biasRight ){ + pCur->aiIdx[pCur->iPage] = (u16)(idx = upr); + }else{ + pCur->aiIdx[pCur->iPage] = (u16)(idx = (upr+lwr)/2); } - if( opcode==OP_Halt ){ - if( pOp->p1==SQLITE_CONSTRAINT && pOp->p2==OE_Abort ){ - doesStatementRollback = 1; + for(;;){ + u8 *pCell; /* Pointer to current cell in pPage */ + + assert( idx==pCur->aiIdx[pCur->iPage] ); + pCur->info.nSize = 0; + pCell = findCell(pPage, idx) + pPage->childPtrSize; + if( pPage->intKey ){ + i64 nCellKey; + if( pPage->hasData ){ + u32 dummy; + pCell += getVarint32(pCell, dummy); + } + getVarint(pCell, (u64*)&nCellKey); + if( nCellKey==intKey ){ + c = 0; + }else if( nCellKeyintKey ); + c = +1; + } + pCur->validNKey = 1; + pCur->info.nKey = nCellKey; + }else{ + /* The maximum supported page-size is 65536 bytes. This means that + ** the maximum number of record bytes stored on an index B-Tree + ** page is less than 16384 bytes and may be stored as a 2-byte + ** varint. This information is used to attempt to avoid parsing + ** the entire cell by checking for the cases where the record is + ** stored entirely within the b-tree page by inspecting the first + ** 2 bytes of the cell. + */ + int nCell = pCell[0]; + if( nCell<=pPage->max1bytePayload + /* && (pCell+nCell)aDataEnd */ + ){ + /* This branch runs if the record-size field of the cell is a + ** single byte varint and the record fits entirely on the main + ** b-tree page. */ + testcase( pCell+nCell+1==pPage->aDataEnd ); + c = sqlite3VdbeRecordCompare(nCell, (void*)&pCell[1], pIdxKey); + }else if( !(pCell[1] & 0x80) + && (nCell = ((nCell&0x7f)<<7) + pCell[1])<=pPage->maxLocal + /* && (pCell+nCell+2)<=pPage->aDataEnd */ + ){ + /* The record-size field is a 2 byte varint and the record + ** fits entirely on the main b-tree page. */ + testcase( pCell+nCell+2==pPage->aDataEnd ); + c = sqlite3VdbeRecordCompare(nCell, (void*)&pCell[2], pIdxKey); + }else{ + /* The record flows over onto one or more overflow pages. In + ** this case the whole cell needs to be parsed, a buffer allocated + ** and accessPayload() used to retrieve the record into the + ** buffer before VdbeRecordCompare() can be called. */ + void *pCellKey; + u8 * const pCellBody = pCell - pPage->childPtrSize; + btreeParseCellPtr(pPage, pCellBody, &pCur->info); + nCell = (int)pCur->info.nKey; + pCellKey = sqlite3Malloc( nCell ); + if( pCellKey==0 ){ + rc = SQLITE_NOMEM; + goto moveto_finish; + } + rc = accessPayload(pCur, 0, nCell, (unsigned char*)pCellKey, 0); + if( rc ){ + sqlite3_free(pCellKey); + goto moveto_finish; + } + c = sqlite3VdbeRecordCompare(nCell, pCellKey, pIdxKey); + sqlite3_free(pCellKey); + } } - }else if( opcode==OP_Statement ){ - hasStatementBegin = 1; - p->usesStmtJournal = 1; - }else if( opcode==OP_Destroy ){ - doesStatementRollback = 1; - }else if( opcode==OP_Transaction && pOp->p2!=0 ){ - p->readOnly = 0; -#ifndef SQLITE_OMIT_VIRTUALTABLE - }else if( opcode==OP_VUpdate || opcode==OP_VRename ){ - doesStatementRollback = 1; - }else if( opcode==OP_VFilter ){ - int n; - assert( p->nOp - i >= 3 ); - assert( pOp[-1].opcode==OP_Integer ); - n = pOp[-1].p1; - if( n>nMaxArgs ) nMaxArgs = n; -#endif + if( c==0 ){ + if( pPage->intKey && !pPage->leaf ){ + lwr = idx; + break; + }else{ + *pRes = 0; + rc = SQLITE_OK; + goto moveto_finish; + } + } + if( c<0 ){ + lwr = idx+1; + }else{ + upr = idx-1; + } + if( lwr>upr ){ + break; + } + pCur->aiIdx[pCur->iPage] = (u16)(idx = (lwr+upr)/2); } - - if( sqlite3VdbeOpcodeHasProperty(opcode, OPFLG_JUMP) && pOp->p2<0 ){ - assert( -1-pOp->p2nLabel ); - pOp->p2 = aLabel[-1-pOp->p2]; + assert( lwr==upr+1 || (pPage->intKey && !pPage->leaf) ); + assert( pPage->isInit ); + if( pPage->leaf ){ + chldPg = 0; + }else if( lwr>=pPage->nCell ){ + chldPg = get4byte(&pPage->aData[pPage->hdrOffset+8]); + }else{ + chldPg = get4byte(findCell(pPage, lwr)); } - } - sqlite3DbFree(p->db, p->aLabel); - p->aLabel = 0; - - *pMaxFuncArgs = nMaxArgs; - - /* If we never rollback a statement transaction, then statement - ** transactions are not needed. So change every OP_Statement - ** opcode into an OP_Noop. This avoid a call to sqlite3OsOpenExclusive() - ** which can be expensive on some platforms. - */ - if( hasStatementBegin && !doesStatementRollback ){ - p->usesStmtJournal = 0; - for(pOp=p->aOp, i=p->nOp-1; i>=0; i--, pOp++){ - if( pOp->opcode==OP_Statement ){ - pOp->opcode = OP_Noop; - } + if( chldPg==0 ){ + assert( pCur->aiIdx[pCur->iPage]apPage[pCur->iPage]->nCell ); + *pRes = c; + rc = SQLITE_OK; + goto moveto_finish; } + pCur->aiIdx[pCur->iPage] = (u16)lwr; + pCur->info.nSize = 0; + pCur->validNKey = 0; + rc = moveToChild(pCur, chldPg); + if( rc ) goto moveto_finish; } +moveto_finish: + return rc; } + /* -** Return the address of the next instruction to be inserted. +** Return TRUE if the cursor is not pointing at an entry of the table. +** +** TRUE will be returned after a call to sqlite3BtreeNext() moves +** past the last entry in the table or sqlite3BtreePrev() moves past +** the first entry. TRUE is also returned if the table is empty. */ -SQLITE_PRIVATE int sqlite3VdbeCurrentAddr(Vdbe *p){ - assert( p->magic==VDBE_MAGIC_INIT ); - return p->nOp; +SQLITE_PRIVATE int sqlite3BtreeEof(BtCursor *pCur){ + /* TODO: What if the cursor is in CURSOR_REQUIRESEEK but all table entries + ** have been deleted? This API will need to change to return an error code + ** as well as the boolean result value. + */ + return (CURSOR_VALID!=pCur->eState); } /* -** Add a whole list of operations to the operation stack. Return the -** address of the first operation added. +** Advance the cursor to the next entry in the database. If +** successful then set *pRes=0. If the cursor +** was already pointing to the last entry in the database before +** this routine was called, then set *pRes=1. */ -SQLITE_PRIVATE int sqlite3VdbeAddOpList(Vdbe *p, int nOp, VdbeOpList const *aOp){ - int addr; - assert( p->magic==VDBE_MAGIC_INIT ); - if( p->nOp + nOp > p->nOpAlloc && growOpArray(p) ){ - return 0; +SQLITE_PRIVATE int sqlite3BtreeNext(BtCursor *pCur, int *pRes){ + int rc; + int idx; + MemPage *pPage; + + assert( cursorHoldsMutex(pCur) ); + rc = restoreCursorPosition(pCur); + if( rc!=SQLITE_OK ){ + return rc; } - addr = p->nOp; - if( ALWAYS(nOp>0) ){ - int i; - VdbeOpList const *pIn = aOp; - for(i=0; ip2; - VdbeOp *pOut = &p->aOp[i+addr]; - pOut->opcode = pIn->opcode; - pOut->p1 = pIn->p1; - if( p2<0 && sqlite3VdbeOpcodeHasProperty(pOut->opcode, OPFLG_JUMP) ){ - pOut->p2 = addr + ADDR(p2); - }else{ - pOut->p2 = p2; - } - pOut->p3 = pIn->p3; - pOut->p4type = P4_NOTUSED; - pOut->p4.p = 0; - pOut->p5 = 0; -#ifdef SQLITE_DEBUG - pOut->zComment = 0; - if( sqlite3VdbeAddopTrace ){ - sqlite3VdbePrintOp(0, i+addr, &p->aOp[i+addr]); - } -#endif - } - p->nOp += nOp; + assert( pRes!=0 ); + if( CURSOR_INVALID==pCur->eState ){ + *pRes = 1; + return SQLITE_OK; } - return addr; -} - -/* -** Change the value of the P1 operand for a specific instruction. -** This routine is useful when a large program is loaded from a -** static array using sqlite3VdbeAddOpList but we want to make a -** few minor changes to the program. -*/ -SQLITE_PRIVATE void sqlite3VdbeChangeP1(Vdbe *p, int addr, int val){ - assert( p!=0 ); - assert( addr>=0 ); - if( p->nOp>addr ){ - p->aOp[addr].p1 = val; + if( pCur->skipNext>0 ){ + pCur->skipNext = 0; + *pRes = 0; + return SQLITE_OK; } -} + pCur->skipNext = 0; -/* -** Change the value of the P2 operand for a specific instruction. -** This routine is useful for setting a jump destination. -*/ -SQLITE_PRIVATE void sqlite3VdbeChangeP2(Vdbe *p, int addr, int val){ - assert( p!=0 ); - assert( addr>=0 ); - if( p->nOp>addr ){ - p->aOp[addr].p2 = val; - } -} + pPage = pCur->apPage[pCur->iPage]; + idx = ++pCur->aiIdx[pCur->iPage]; + assert( pPage->isInit ); -/* -** Change the value of the P3 operand for a specific instruction. -*/ -SQLITE_PRIVATE void sqlite3VdbeChangeP3(Vdbe *p, int addr, int val){ - assert( p!=0 ); - assert( addr>=0 ); - if( p->nOp>addr ){ - p->aOp[addr].p3 = val; - } -} + /* If the database file is corrupt, it is possible for the value of idx + ** to be invalid here. This can only occur if a second cursor modifies + ** the page while cursor pCur is holding a reference to it. Which can + ** only happen if the database is corrupt in such a way as to link the + ** page into more than one b-tree structure. */ + testcase( idx>pPage->nCell ); -/* -** Change the value of the P5 operand for the most recently -** added operation. -*/ -SQLITE_PRIVATE void sqlite3VdbeChangeP5(Vdbe *p, u8 val){ - assert( p!=0 ); - if( p->aOp ){ - assert( p->nOp>0 ); - p->aOp[p->nOp-1].p5 = val; + pCur->info.nSize = 0; + pCur->validNKey = 0; + if( idx>=pPage->nCell ){ + if( !pPage->leaf ){ + rc = moveToChild(pCur, get4byte(&pPage->aData[pPage->hdrOffset+8])); + if( rc ) return rc; + rc = moveToLeftmost(pCur); + *pRes = 0; + return rc; + } + do{ + if( pCur->iPage==0 ){ + *pRes = 1; + pCur->eState = CURSOR_INVALID; + return SQLITE_OK; + } + moveToParent(pCur); + pPage = pCur->apPage[pCur->iPage]; + }while( pCur->aiIdx[pCur->iPage]>=pPage->nCell ); + *pRes = 0; + if( pPage->intKey ){ + rc = sqlite3BtreeNext(pCur, pRes); + }else{ + rc = SQLITE_OK; + } + return rc; } -} - -/* -** Change the P2 operand of instruction addr so that it points to -** the address of the next instruction to be coded. -*/ -SQLITE_PRIVATE void sqlite3VdbeJumpHere(Vdbe *p, int addr){ - sqlite3VdbeChangeP2(p, addr, p->nOp); + *pRes = 0; + if( pPage->leaf ){ + return SQLITE_OK; + } + rc = moveToLeftmost(pCur); + return rc; } /* -** If the input FuncDef structure is ephemeral, then free it. If -** the FuncDef is not ephermal, then do nothing. +** Step the cursor to the back to the previous entry in the database. If +** successful then set *pRes=0. If the cursor +** was already pointing to the first entry in the database before +** this routine was called, then set *pRes=1. */ -static void freeEphemeralFunction(sqlite3 *db, FuncDef *pDef){ - if( ALWAYS(pDef) && (pDef->flags & SQLITE_FUNC_EPHEM)!=0 ){ - sqlite3DbFree(db, pDef); +SQLITE_PRIVATE int sqlite3BtreePrevious(BtCursor *pCur, int *pRes){ + int rc; + MemPage *pPage; + + assert( cursorHoldsMutex(pCur) ); + rc = restoreCursorPosition(pCur); + if( rc!=SQLITE_OK ){ + return rc; } -} + pCur->atLast = 0; + if( CURSOR_INVALID==pCur->eState ){ + *pRes = 1; + return SQLITE_OK; + } + if( pCur->skipNext<0 ){ + pCur->skipNext = 0; + *pRes = 0; + return SQLITE_OK; + } + pCur->skipNext = 0; -/* -** Delete a P4 value if necessary. -*/ -static void freeP4(sqlite3 *db, int p4type, void *p4){ - if( p4 ){ - switch( p4type ){ - case P4_REAL: - case P4_INT64: - case P4_MPRINTF: - case P4_DYNAMIC: - case P4_KEYINFO: - case P4_INTARRAY: - case P4_KEYINFO_HANDOFF: { - sqlite3DbFree(db, p4); - break; - } - case P4_VDBEFUNC: { - VdbeFunc *pVdbeFunc = (VdbeFunc *)p4; - freeEphemeralFunction(db, pVdbeFunc->pFunc); - sqlite3VdbeDeleteAuxData(pVdbeFunc, 0); - sqlite3DbFree(db, pVdbeFunc); - break; - } - case P4_FUNCDEF: { - freeEphemeralFunction(db, (FuncDef*)p4); - break; - } - case P4_MEM: { - sqlite3ValueFree((sqlite3_value*)p4); - break; + pPage = pCur->apPage[pCur->iPage]; + assert( pPage->isInit ); + if( !pPage->leaf ){ + int idx = pCur->aiIdx[pCur->iPage]; + rc = moveToChild(pCur, get4byte(findCell(pPage, idx))); + if( rc ){ + return rc; + } + rc = moveToRightmost(pCur); + }else{ + while( pCur->aiIdx[pCur->iPage]==0 ){ + if( pCur->iPage==0 ){ + pCur->eState = CURSOR_INVALID; + *pRes = 1; + return SQLITE_OK; } + moveToParent(pCur); } - } -} - + pCur->info.nSize = 0; + pCur->validNKey = 0; -/* -** Change N opcodes starting at addr to No-ops. -*/ -SQLITE_PRIVATE void sqlite3VdbeChangeToNoop(Vdbe *p, int addr, int N){ - if( p->aOp ){ - VdbeOp *pOp = &p->aOp[addr]; - sqlite3 *db = p->db; - while( N-- ){ - freeP4(db, pOp->p4type, pOp->p4.p); - memset(pOp, 0, sizeof(pOp[0])); - pOp->opcode = OP_Noop; - pOp++; + pCur->aiIdx[pCur->iPage]--; + pPage = pCur->apPage[pCur->iPage]; + if( pPage->intKey && !pPage->leaf ){ + rc = sqlite3BtreePrevious(pCur, pRes); + }else{ + rc = SQLITE_OK; } } + *pRes = 0; + return rc; } /* -** Change the value of the P4 operand for a specific instruction. -** This routine is useful when a large program is loaded from a -** static array using sqlite3VdbeAddOpList but we want to make a -** few minor changes to the program. +** Allocate a new page from the database file. ** -** If n>=0 then the P4 operand is dynamic, meaning that a copy of -** the string is made into memory obtained from sqlite3_malloc(). -** A value of n==0 means copy bytes of zP4 up to and including the -** first null byte. If n>0 then copy n+1 bytes of zP4. +** The new page is marked as dirty. (In other words, sqlite3PagerWrite() +** has already been called on the new page.) The new page has also +** been referenced and the calling routine is responsible for calling +** sqlite3PagerUnref() on the new page when it is done. ** -** If n==P4_KEYINFO it means that zP4 is a pointer to a KeyInfo structure. -** A copy is made of the KeyInfo structure into memory obtained from -** sqlite3_malloc, to be freed when the Vdbe is finalized. -** n==P4_KEYINFO_HANDOFF indicates that zP4 points to a KeyInfo structure -** stored in memory that the caller has obtained from sqlite3_malloc. The -** caller should not free the allocation, it will be freed when the Vdbe is -** finalized. -** -** Other values of n (P4_STATIC, P4_COLLSEQ etc.) indicate that zP4 points -** to a string or structure that is guaranteed to exist for the lifetime of -** the Vdbe. In these cases we can just copy the pointer. +** SQLITE_OK is returned on success. Any other return value indicates +** an error. *ppPage and *pPgno are undefined in the event of an error. +** Do not invoke sqlite3PagerUnref() on *ppPage if an error is returned. ** -** If addr<0 then change P4 on the most recently inserted instruction. +** If the "nearby" parameter is not 0, then a (feeble) effort is made to +** locate a page close to the page number "nearby". This can be used in an +** attempt to keep related pages close to each other in the database file, +** which in turn can make database access faster. +** +** If the "exact" parameter is not 0, and the page-number nearby exists +** anywhere on the free-list, then it is guarenteed to be returned. This +** is only used by auto-vacuum databases when allocating a new table. */ -SQLITE_PRIVATE void sqlite3VdbeChangeP4(Vdbe *p, int addr, const char *zP4, int n){ - Op *pOp; - sqlite3 *db; - assert( p!=0 ); - db = p->db; - assert( p->magic==VDBE_MAGIC_INIT ); - if( p->aOp==0 || db->mallocFailed ){ - if (n != P4_KEYINFO) { - freeP4(db, n, (void*)*(char**)&zP4); - } - return; - } - assert( p->nOp>0 ); - assert( addrnOp ); - if( addr<0 ){ - addr = p->nOp - 1; - } - pOp = &p->aOp[addr]; - freeP4(db, pOp->p4type, pOp->p4.p); - pOp->p4.p = 0; - if( n==P4_INT32 ){ - /* Note: this cast is safe, because the origin data point was an int - ** that was cast to a (const char *). */ - pOp->p4.i = SQLITE_PTR_TO_INT(zP4); - pOp->p4type = P4_INT32; - }else if( zP4==0 ){ - pOp->p4.p = 0; - pOp->p4type = P4_NOTUSED; - }else if( n==P4_KEYINFO ){ - KeyInfo *pKeyInfo; - int nField, nByte; +static int allocateBtreePage( + BtShared *pBt, + MemPage **ppPage, + Pgno *pPgno, + Pgno nearby, + u8 exact +){ + MemPage *pPage1; + int rc; + u32 n; /* Number of pages on the freelist */ + u32 k; /* Number of leaves on the trunk of the freelist */ + MemPage *pTrunk = 0; + MemPage *pPrevTrunk = 0; + Pgno mxPage; /* Total size of the database file */ - nField = ((KeyInfo*)zP4)->nField; - nByte = sizeof(*pKeyInfo) + (nField-1)*sizeof(pKeyInfo->aColl[0]) + nField; - pKeyInfo = sqlite3Malloc( nByte ); - pOp->p4.pKeyInfo = pKeyInfo; - if( pKeyInfo ){ - u8 *aSortOrder; - memcpy(pKeyInfo, zP4, nByte); - aSortOrder = pKeyInfo->aSortOrder; - if( aSortOrder ){ - pKeyInfo->aSortOrder = (unsigned char*)&pKeyInfo->aColl[nField]; - memcpy(pKeyInfo->aSortOrder, aSortOrder, nField); + assert( sqlite3_mutex_held(pBt->mutex) ); + pPage1 = pBt->pPage1; + mxPage = btreePagecount(pBt); + n = get4byte(&pPage1->aData[36]); + testcase( n==mxPage-1 ); + if( n>=mxPage ){ + return SQLITE_CORRUPT_BKPT; + } + if( n>0 ){ + /* There are pages on the freelist. Reuse one of those pages. */ + Pgno iTrunk; + u8 searchList = 0; /* If the free-list must be searched for 'nearby' */ + + /* If the 'exact' parameter was true and a query of the pointer-map + ** shows that the page 'nearby' is somewhere on the free-list, then + ** the entire-list will be searched for that page. + */ +#ifndef SQLITE_OMIT_AUTOVACUUM + if( exact && nearby<=mxPage ){ + u8 eType; + assert( nearby>0 ); + assert( pBt->autoVacuum ); + rc = ptrmapGet(pBt, nearby, &eType, 0); + if( rc ) return rc; + if( eType==PTRMAP_FREEPAGE ){ + searchList = 1; } - pOp->p4type = P4_KEYINFO; - }else{ - p->db->mallocFailed = 1; - pOp->p4type = P4_NOTUSED; + *pPgno = nearby; } - }else if( n==P4_KEYINFO_HANDOFF ){ - pOp->p4.p = (void*)zP4; - pOp->p4type = P4_KEYINFO; - }else if( n<0 ){ - pOp->p4.p = (void*)zP4; - pOp->p4type = (signed char)n; - }else{ - if( n==0 ) n = sqlite3Strlen30(zP4); - pOp->p4.z = sqlite3DbStrNDup(p->db, zP4, n); - pOp->p4type = P4_DYNAMIC; - } -} +#endif -#ifndef NDEBUG -/* -** Change the comment on the the most recently coded instruction. Or -** insert a No-op and add the comment to that new instruction. This -** makes the code easier to read during debugging. None of this happens -** in a production build. -*/ -SQLITE_PRIVATE void sqlite3VdbeComment(Vdbe *p, const char *zFormat, ...){ - va_list ap; - assert( p->nOp>0 || p->aOp==0 ); - assert( p->aOp==0 || p->aOp[p->nOp-1].zComment==0 || p->db->mallocFailed ); - if( p->nOp ){ - char **pz = &p->aOp[p->nOp-1].zComment; - va_start(ap, zFormat); - sqlite3DbFree(p->db, *pz); - *pz = sqlite3VMPrintf(p->db, zFormat, ap); - va_end(ap); - } -} -SQLITE_PRIVATE void sqlite3VdbeNoopComment(Vdbe *p, const char *zFormat, ...){ - va_list ap; - sqlite3VdbeAddOp0(p, OP_Noop); - assert( p->nOp>0 || p->aOp==0 ); - assert( p->aOp==0 || p->aOp[p->nOp-1].zComment==0 || p->db->mallocFailed ); - if( p->nOp ){ - char **pz = &p->aOp[p->nOp-1].zComment; - va_start(ap, zFormat); - sqlite3DbFree(p->db, *pz); - *pz = sqlite3VMPrintf(p->db, zFormat, ap); - va_end(ap); - } -} -#endif /* NDEBUG */ + /* Decrement the free-list count by 1. Set iTrunk to the index of the + ** first free-list trunk page. iPrevTrunk is initially 1. + */ + rc = sqlite3PagerWrite(pPage1->pDbPage); + if( rc ) return rc; + put4byte(&pPage1->aData[36], n-1); -/* -** Return the opcode for a given address. If the address is -1, then -** return the most recently inserted opcode. -** -** If a memory allocation error has occurred prior to the calling of this -** routine, then a pointer to a dummy VdbeOp will be returned. That opcode -** is readable and writable, but it has no effect. The return of a dummy -** opcode allows the call to continue functioning after a OOM fault without -** having to check to see if the return from this routine is a valid pointer. -** -** About the #ifdef SQLITE_OMIT_TRACE: Normally, this routine is never called -** unless p->nOp>0. This is because in the absense of SQLITE_OMIT_TRACE, -** an OP_Trace instruction is always inserted by sqlite3VdbeGet() as soon as -** a new VDBE is created. So we are free to set addr to p->nOp-1 without -** having to double-check to make sure that the result is non-negative. But -** if SQLITE_OMIT_TRACE is defined, the OP_Trace is omitted and we do need to -** check the value of p->nOp-1 before continuing. -*/ -SQLITE_PRIVATE VdbeOp *sqlite3VdbeGetOp(Vdbe *p, int addr){ - static VdbeOp dummy; - assert( p->magic==VDBE_MAGIC_INIT ); - if( addr<0 ){ -#ifdef SQLITE_OMIT_TRACE - if( p->nOp==0 ) return &dummy; + /* The code within this loop is run only once if the 'searchList' variable + ** is not true. Otherwise, it runs once for each trunk-page on the + ** free-list until the page 'nearby' is located. + */ + do { + pPrevTrunk = pTrunk; + if( pPrevTrunk ){ + iTrunk = get4byte(&pPrevTrunk->aData[0]); + }else{ + iTrunk = get4byte(&pPage1->aData[32]); + } + testcase( iTrunk==mxPage ); + if( iTrunk>mxPage ){ + rc = SQLITE_CORRUPT_BKPT; + }else{ + rc = btreeGetPage(pBt, iTrunk, &pTrunk, 0); + } + if( rc ){ + pTrunk = 0; + goto end_allocate_page; + } + assert( pTrunk!=0 ); + assert( pTrunk->aData!=0 ); + + k = get4byte(&pTrunk->aData[4]); /* # of leaves on this trunk page */ + if( k==0 && !searchList ){ + /* The trunk has no leaves and the list is not being searched. + ** So extract the trunk page itself and use it as the newly + ** allocated page */ + assert( pPrevTrunk==0 ); + rc = sqlite3PagerWrite(pTrunk->pDbPage); + if( rc ){ + goto end_allocate_page; + } + *pPgno = iTrunk; + memcpy(&pPage1->aData[32], &pTrunk->aData[0], 4); + *ppPage = pTrunk; + pTrunk = 0; + TRACE(("ALLOCATE: %d trunk - %d free pages left\n", *pPgno, n-1)); + }else if( k>(u32)(pBt->usableSize/4 - 2) ){ + /* Value of k is out of range. Database corruption */ + rc = SQLITE_CORRUPT_BKPT; + goto end_allocate_page; +#ifndef SQLITE_OMIT_AUTOVACUUM + }else if( searchList && nearby==iTrunk ){ + /* The list is being searched and this trunk page is the page + ** to allocate, regardless of whether it has leaves. + */ + assert( *pPgno==iTrunk ); + *ppPage = pTrunk; + searchList = 0; + rc = sqlite3PagerWrite(pTrunk->pDbPage); + if( rc ){ + goto end_allocate_page; + } + if( k==0 ){ + if( !pPrevTrunk ){ + memcpy(&pPage1->aData[32], &pTrunk->aData[0], 4); + }else{ + rc = sqlite3PagerWrite(pPrevTrunk->pDbPage); + if( rc!=SQLITE_OK ){ + goto end_allocate_page; + } + memcpy(&pPrevTrunk->aData[0], &pTrunk->aData[0], 4); + } + }else{ + /* The trunk page is required by the caller but it contains + ** pointers to free-list leaves. The first leaf becomes a trunk + ** page in this case. + */ + MemPage *pNewTrunk; + Pgno iNewTrunk = get4byte(&pTrunk->aData[8]); + if( iNewTrunk>mxPage ){ + rc = SQLITE_CORRUPT_BKPT; + goto end_allocate_page; + } + testcase( iNewTrunk==mxPage ); + rc = btreeGetPage(pBt, iNewTrunk, &pNewTrunk, 0); + if( rc!=SQLITE_OK ){ + goto end_allocate_page; + } + rc = sqlite3PagerWrite(pNewTrunk->pDbPage); + if( rc!=SQLITE_OK ){ + releasePage(pNewTrunk); + goto end_allocate_page; + } + memcpy(&pNewTrunk->aData[0], &pTrunk->aData[0], 4); + put4byte(&pNewTrunk->aData[4], k-1); + memcpy(&pNewTrunk->aData[8], &pTrunk->aData[12], (k-1)*4); + releasePage(pNewTrunk); + if( !pPrevTrunk ){ + assert( sqlite3PagerIswriteable(pPage1->pDbPage) ); + put4byte(&pPage1->aData[32], iNewTrunk); + }else{ + rc = sqlite3PagerWrite(pPrevTrunk->pDbPage); + if( rc ){ + goto end_allocate_page; + } + put4byte(&pPrevTrunk->aData[0], iNewTrunk); + } + } + pTrunk = 0; + TRACE(("ALLOCATE: %d trunk - %d free pages left\n", *pPgno, n-1)); #endif - addr = p->nOp - 1; - } - assert( (addr>=0 && addrnOp) || p->db->mallocFailed ); - if( p->db->mallocFailed ){ - return &dummy; - }else{ - return &p->aOp[addr]; - } -} + }else if( k>0 ){ + /* Extract a leaf from the trunk */ + u32 closest; + Pgno iPage; + unsigned char *aData = pTrunk->aData; + if( nearby>0 ){ + u32 i; + int dist; + closest = 0; + dist = sqlite3AbsInt32(get4byte(&aData[8]) - nearby); + for(i=1; i=20 ); - switch( pOp->p4type ){ - case P4_KEYINFO_STATIC: - case P4_KEYINFO: { - int i, j; - KeyInfo *pKeyInfo = pOp->p4.pKeyInfo; - sqlite3_snprintf(nTemp, zTemp, "keyinfo(%d", pKeyInfo->nField); - i = sqlite3Strlen30(zTemp); - for(j=0; jnField; j++){ - CollSeq *pColl = pKeyInfo->aColl[j]; - if( pColl ){ - int n = sqlite3Strlen30(pColl->zName); - if( i+n>nTemp-6 ){ - memcpy(&zTemp[i],",...",4); - break; + iPage = get4byte(&aData[8+closest*4]); + testcase( iPage==mxPage ); + if( iPage>mxPage ){ + rc = SQLITE_CORRUPT_BKPT; + goto end_allocate_page; + } + testcase( iPage==mxPage ); + if( !searchList || iPage==nearby ){ + int noContent; + *pPgno = iPage; + TRACE(("ALLOCATE: %d was leaf %d of %d on trunk %d" + ": %d more free pages\n", + *pPgno, closest+1, k, pTrunk->pgno, n-1)); + rc = sqlite3PagerWrite(pTrunk->pDbPage); + if( rc ) goto end_allocate_page; + if( closestaSortOrder && pKeyInfo->aSortOrder[j] ){ - zTemp[i++] = '-'; + put4byte(&aData[4], k-1); + noContent = !btreeGetHasContent(pBt, *pPgno); + rc = btreeGetPage(pBt, *pPgno, ppPage, noContent); + if( rc==SQLITE_OK ){ + rc = sqlite3PagerWrite((*ppPage)->pDbPage); + if( rc!=SQLITE_OK ){ + releasePage(*ppPage); + } } - memcpy(&zTemp[i], pColl->zName,n+1); - i += n; - }else if( i+4p4.pColl; - sqlite3_snprintf(nTemp, zTemp, "collseq(%.20s)", pColl->zName); - break; - } - case P4_FUNCDEF: { - FuncDef *pDef = pOp->p4.pFunc; - sqlite3_snprintf(nTemp, zTemp, "%s(%d)", pDef->zName, pDef->nArg); - break; - } - case P4_INT64: { - sqlite3_snprintf(nTemp, zTemp, "%lld", *pOp->p4.pI64); - break; - } - case P4_INT32: { - sqlite3_snprintf(nTemp, zTemp, "%d", pOp->p4.i); - break; - } - case P4_REAL: { - sqlite3_snprintf(nTemp, zTemp, "%.16g", *pOp->p4.pReal); - break; - } - case P4_MEM: { - Mem *pMem = pOp->p4.pMem; - assert( (pMem->flags & MEM_Null)==0 ); - if( pMem->flags & MEM_Str ){ - zP4 = pMem->z; - }else if( pMem->flags & MEM_Int ){ - sqlite3_snprintf(nTemp, zTemp, "%lld", pMem->u.i); - }else if( pMem->flags & MEM_Real ){ - sqlite3_snprintf(nTemp, zTemp, "%.16g", pMem->r); + releasePage(pPrevTrunk); + pPrevTrunk = 0; + }while( searchList ); + }else{ + /* There are no pages on the freelist, so create a new page at the + ** end of the file */ + rc = sqlite3PagerWrite(pBt->pPage1->pDbPage); + if( rc ) return rc; + pBt->nPage++; + if( pBt->nPage==PENDING_BYTE_PAGE(pBt) ) pBt->nPage++; + +#ifndef SQLITE_OMIT_AUTOVACUUM + if( pBt->autoVacuum && PTRMAP_ISPAGE(pBt, pBt->nPage) ){ + /* If *pPgno refers to a pointer-map page, allocate two new pages + ** at the end of the file instead of one. The first allocated page + ** becomes a new pointer-map page, the second is used by the caller. + */ + MemPage *pPg = 0; + TRACE(("ALLOCATE: %d from end of file (pointer-map page)\n", pBt->nPage)); + assert( pBt->nPage!=PENDING_BYTE_PAGE(pBt) ); + rc = btreeGetPage(pBt, pBt->nPage, &pPg, 1); + if( rc==SQLITE_OK ){ + rc = sqlite3PagerWrite(pPg->pDbPage); + releasePage(pPg); } - break; - } -#ifndef SQLITE_OMIT_VIRTUALTABLE - case P4_VTAB: { - sqlite3_vtab *pVtab = pOp->p4.pVtab; - sqlite3_snprintf(nTemp, zTemp, "vtab:%p:%p", pVtab, pVtab->pModule); - break; + if( rc ) return rc; + pBt->nPage++; + if( pBt->nPage==PENDING_BYTE_PAGE(pBt) ){ pBt->nPage++; } } #endif - case P4_INTARRAY: { - sqlite3_snprintf(nTemp, zTemp, "intarray"); - break; + put4byte(28 + (u8*)pBt->pPage1->aData, pBt->nPage); + *pPgno = pBt->nPage; + + assert( *pPgno!=PENDING_BYTE_PAGE(pBt) ); + rc = btreeGetPage(pBt, *pPgno, ppPage, 1); + if( rc ) return rc; + rc = sqlite3PagerWrite((*ppPage)->pDbPage); + if( rc!=SQLITE_OK ){ + releasePage(*ppPage); } - default: { - zP4 = pOp->p4.z; - if( zP4==0 ){ - zP4 = zTemp; - zTemp[0] = 0; - } + TRACE(("ALLOCATE: %d from end of file\n", *pPgno)); + } + + assert( *pPgno!=PENDING_BYTE_PAGE(pBt) ); + +end_allocate_page: + releasePage(pTrunk); + releasePage(pPrevTrunk); + if( rc==SQLITE_OK ){ + if( sqlite3PagerPageRefcount((*ppPage)->pDbPage)>1 ){ + releasePage(*ppPage); + return SQLITE_CORRUPT_BKPT; } + (*ppPage)->isInit = 0; + }else{ + *ppPage = 0; } - assert( zP4!=0 ); - return zP4; + assert( rc!=SQLITE_OK || sqlite3PagerIswriteable((*ppPage)->pDbPage) ); + return rc; } -#endif /* -** Declare to the Vdbe that the BTree object at db->aDb[i] is used. +** This function is used to add page iPage to the database file free-list. +** It is assumed that the page is not already a part of the free-list. +** +** The value passed as the second argument to this function is optional. +** If the caller happens to have a pointer to the MemPage object +** corresponding to page iPage handy, it may pass it as the second value. +** Otherwise, it may pass NULL. ** +** If a pointer to a MemPage object is passed as the second argument, +** its reference count is not altered by this function. */ -SQLITE_PRIVATE void sqlite3VdbeUsesBtree(Vdbe *p, int i){ - int mask; - assert( i>=0 && idb->nDb && ibtreeMask)*8 ); - mask = ((u32)1)<btreeMask & mask)==0 ){ - p->btreeMask |= mask; - sqlite3BtreeMutexArrayInsert(&p->aMutex, p->db->aDb[i].pBt); - } -} - +static int freePage2(BtShared *pBt, MemPage *pMemPage, Pgno iPage){ + MemPage *pTrunk = 0; /* Free-list trunk page */ + Pgno iTrunk = 0; /* Page number of free-list trunk page */ + MemPage *pPage1 = pBt->pPage1; /* Local reference to page 1 */ + MemPage *pPage; /* Page being freed. May be NULL. */ + int rc; /* Return Code */ + int nFree; /* Initial number of pages on free-list */ -#if defined(VDBE_PROFILE) || defined(SQLITE_DEBUG) -/* -** Print a single opcode. This routine is used for debugging only. -*/ -SQLITE_PRIVATE void sqlite3VdbePrintOp(FILE *pOut, int pc, Op *pOp){ - char *zP4; - char zPtr[50]; - static const char *zFormat1 = "%4d %-13s %4d %4d %4d %-4s %.2X %s\n"; - if( pOut==0 ) pOut = stdout; - zP4 = displayP4(pOp, zPtr, sizeof(zPtr)); - fprintf(pOut, zFormat1, pc, - sqlite3OpcodeName(pOp->opcode), pOp->p1, pOp->p2, pOp->p3, zP4, pOp->p5, -#ifdef SQLITE_DEBUG - pOp->zComment ? pOp->zComment : "" -#else - "" -#endif - ); - fflush(pOut); -} -#endif + assert( sqlite3_mutex_held(pBt->mutex) ); + assert( iPage>1 ); + assert( !pMemPage || pMemPage->pgno==iPage ); -/* -** Release an array of N Mem elements -*/ -static void releaseMemArray(Mem *p, int N){ - if( p && N ){ - Mem *pEnd; - sqlite3 *db = p->db; - u8 malloc_failed = db->mallocFailed; - for(pEnd=&p[N]; ppDbPage); + }else{ + pPage = btreePageLookup(pBt, iPage); + } - /* This block is really an inlined version of sqlite3VdbeMemRelease() - ** that takes advantage of the fact that the memory cell value is - ** being set to NULL after releasing any dynamic resources. - ** - ** The justification for duplicating code is that according to - ** callgrind, this causes a certain test case to hit the CPU 4.7 - ** percent less (x86 linux, gcc version 4.1.2, -O6) than if - ** sqlite3MemRelease() were called from here. With -O2, this jumps - ** to 6.6 percent. The test case is inserting 1000 rows into a table - ** with no indexes using a single prepared INSERT statement, bind() - ** and reset(). Inserts are grouped into a transaction. - */ - if( p->flags&(MEM_Agg|MEM_Dyn) ){ - sqlite3VdbeMemRelease(p); - }else if( p->zMalloc ){ - sqlite3DbFree(db, p->zMalloc); - p->zMalloc = 0; - } + /* Increment the free page count on pPage1 */ + rc = sqlite3PagerWrite(pPage1->pDbPage); + if( rc ) goto freepage_out; + nFree = get4byte(&pPage1->aData[36]); + put4byte(&pPage1->aData[36], nFree+1); - p->flags = MEM_Null; + if( pBt->btsFlags & BTS_SECURE_DELETE ){ + /* If the secure_delete option is enabled, then + ** always fully overwrite deleted information with zeros. + */ + if( (!pPage && ((rc = btreeGetPage(pBt, iPage, &pPage, 0))!=0) ) + || ((rc = sqlite3PagerWrite(pPage->pDbPage))!=0) + ){ + goto freepage_out; } - db->mallocFailed = malloc_failed; + memset(pPage->aData, 0, pPage->pBt->pageSize); } -} -#ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT -SQLITE_PRIVATE int sqlite3VdbeReleaseBuffers(Vdbe *p){ - int ii; - int nFree = 0; - assert( sqlite3_mutex_held(p->db->mutex) ); - for(ii=1; ii<=p->nMem; ii++){ - Mem *pMem = &p->aMem[ii]; - if( pMem->flags & MEM_RowSet ){ - sqlite3RowSetClear(pMem->u.pRowSet); - } - if( pMem->z && pMem->flags&MEM_Dyn ){ - assert( !pMem->xDel ); - nFree += sqlite3DbMallocSize(pMem->db, pMem->z); - sqlite3VdbeMemRelease(pMem); - } + /* If the database supports auto-vacuum, write an entry in the pointer-map + ** to indicate that the page is free. + */ + if( ISAUTOVACUUM ){ + ptrmapPut(pBt, iPage, PTRMAP_FREEPAGE, 0, &rc); + if( rc ) goto freepage_out; } - return nFree; -} -#endif -#ifndef SQLITE_OMIT_EXPLAIN -/* -** Give a listing of the program in the virtual machine. -** -** The interface is the same as sqlite3VdbeExec(). But instead of -** running the code, it invokes the callback once for each instruction. -** This feature is used to implement "EXPLAIN". -** -** When p->explain==1, each instruction is listed. When -** p->explain==2, only OP_Explain instructions are listed and these -** are shown in a different format. p->explain==2 is used to implement -** EXPLAIN QUERY PLAN. -*/ -SQLITE_PRIVATE int sqlite3VdbeList( - Vdbe *p /* The VDBE */ -){ - sqlite3 *db = p->db; - int i; - int rc = SQLITE_OK; - Mem *pMem = p->pResultSet = &p->aMem[1]; - - assert( p->explain ); - if( p->magic!=VDBE_MAGIC_RUN ) return SQLITE_MISUSE; - assert( db->magic==SQLITE_MAGIC_BUSY ); - assert( p->rc==SQLITE_OK || p->rc==SQLITE_BUSY || p->rc==SQLITE_NOMEM ); - - /* Even though this opcode does not use dynamic strings for - ** the result, result columns may become dynamic if the user calls - ** sqlite3_column_text16(), causing a translation to UTF-16 encoding. + /* Now manipulate the actual database free-list structure. There are two + ** possibilities. If the free-list is currently empty, or if the first + ** trunk page in the free-list is full, then this page will become a + ** new free-list trunk page. Otherwise, it will become a leaf of the + ** first trunk page in the current free-list. This block tests if it + ** is possible to add the page as a new free-list leaf. */ - releaseMemArray(pMem, p->nMem); - - if( p->rc==SQLITE_NOMEM ){ - /* This happens if a malloc() inside a call to sqlite3_column_text() or - ** sqlite3_column_text16() failed. */ - db->mallocFailed = 1; - return SQLITE_ERROR; - } - - do{ - i = p->pc++; - }while( inOp && p->explain==2 && p->aOp[i].opcode!=OP_Explain ); - if( i>=p->nOp ){ - p->rc = SQLITE_OK; - rc = SQLITE_DONE; - }else if( db->u1.isInterrupted ){ - p->rc = SQLITE_INTERRUPT; - rc = SQLITE_ERROR; - sqlite3SetString(&p->zErrMsg, db, "%s", sqlite3ErrStr(p->rc)); - }else{ - char *z; - Op *pOp = &p->aOp[i]; - if( p->explain==1 ){ - pMem->flags = MEM_Int; - pMem->type = SQLITE_INTEGER; - pMem->u.i = i; /* Program counter */ - pMem++; - - pMem->flags = MEM_Static|MEM_Str|MEM_Term; - pMem->z = (char*)sqlite3OpcodeName(pOp->opcode); /* Opcode */ - assert( pMem->z!=0 ); - pMem->n = sqlite3Strlen30(pMem->z); - pMem->type = SQLITE_TEXT; - pMem->enc = SQLITE_UTF8; - pMem++; - } - - pMem->flags = MEM_Int; - pMem->u.i = pOp->p1; /* P1 */ - pMem->type = SQLITE_INTEGER; - pMem++; - - pMem->flags = MEM_Int; - pMem->u.i = pOp->p2; /* P2 */ - pMem->type = SQLITE_INTEGER; - pMem++; + if( nFree!=0 ){ + u32 nLeaf; /* Initial number of leaf cells on trunk page */ - if( p->explain==1 ){ - pMem->flags = MEM_Int; - pMem->u.i = pOp->p3; /* P3 */ - pMem->type = SQLITE_INTEGER; - pMem++; + iTrunk = get4byte(&pPage1->aData[32]); + rc = btreeGetPage(pBt, iTrunk, &pTrunk, 0); + if( rc!=SQLITE_OK ){ + goto freepage_out; } - if( sqlite3VdbeMemGrow(pMem, 32, 0) ){ /* P4 */ - assert( p->db->mallocFailed ); - return SQLITE_ERROR; - } - pMem->flags = MEM_Dyn|MEM_Str|MEM_Term; - z = displayP4(pOp, pMem->z, 32); - if( z!=pMem->z ){ - sqlite3VdbeMemSetStr(pMem, z, -1, SQLITE_UTF8, 0); - }else{ - assert( pMem->z!=0 ); - pMem->n = sqlite3Strlen30(pMem->z); - pMem->enc = SQLITE_UTF8; + nLeaf = get4byte(&pTrunk->aData[4]); + assert( pBt->usableSize>32 ); + if( nLeaf > (u32)pBt->usableSize/4 - 2 ){ + rc = SQLITE_CORRUPT_BKPT; + goto freepage_out; } - pMem->type = SQLITE_TEXT; - pMem++; - - if( p->explain==1 ){ - if( sqlite3VdbeMemGrow(pMem, 4, 0) ){ - assert( p->db->mallocFailed ); - return SQLITE_ERROR; - } - pMem->flags = MEM_Dyn|MEM_Str|MEM_Term; - pMem->n = 2; - sqlite3_snprintf(3, pMem->z, "%.2x", pOp->p5); /* P5 */ - pMem->type = SQLITE_TEXT; - pMem->enc = SQLITE_UTF8; - pMem++; - -#ifdef SQLITE_DEBUG - if( pOp->zComment ){ - pMem->flags = MEM_Str|MEM_Term; - pMem->z = pOp->zComment; - pMem->n = sqlite3Strlen30(pMem->z); - pMem->enc = SQLITE_UTF8; - pMem->type = SQLITE_TEXT; - }else -#endif - { - pMem->flags = MEM_Null; /* Comment */ - pMem->type = SQLITE_NULL; + if( nLeaf < (u32)pBt->usableSize/4 - 8 ){ + /* In this case there is room on the trunk page to insert the page + ** being freed as a new leaf. + ** + ** Note that the trunk page is not really full until it contains + ** usableSize/4 - 2 entries, not usableSize/4 - 8 entries as we have + ** coded. But due to a coding error in versions of SQLite prior to + ** 3.6.0, databases with freelist trunk pages holding more than + ** usableSize/4 - 8 entries will be reported as corrupt. In order + ** to maintain backwards compatibility with older versions of SQLite, + ** we will continue to restrict the number of entries to usableSize/4 - 8 + ** for now. At some point in the future (once everyone has upgraded + ** to 3.6.0 or later) we should consider fixing the conditional above + ** to read "usableSize/4-2" instead of "usableSize/4-8". + */ + rc = sqlite3PagerWrite(pTrunk->pDbPage); + if( rc==SQLITE_OK ){ + put4byte(&pTrunk->aData[4], nLeaf+1); + put4byte(&pTrunk->aData[8+nLeaf*4], iPage); + if( pPage && (pBt->btsFlags & BTS_SECURE_DELETE)==0 ){ + sqlite3PagerDontWrite(pPage->pDbPage); + } + rc = btreeSetHasContent(pBt, iPage); } + TRACE(("FREE-PAGE: %d leaf on trunk page %d\n",pPage->pgno,pTrunk->pgno)); + goto freepage_out; } + } - p->nResColumn = 8 - 5*(p->explain-1); - p->rc = SQLITE_OK; - rc = SQLITE_ROW; + /* If control flows to this point, then it was not possible to add the + ** the page being freed as a leaf page of the first trunk in the free-list. + ** Possibly because the free-list is empty, or possibly because the + ** first trunk in the free-list is full. Either way, the page being freed + ** will become the new first trunk page in the free-list. + */ + if( pPage==0 && SQLITE_OK!=(rc = btreeGetPage(pBt, iPage, &pPage, 0)) ){ + goto freepage_out; + } + rc = sqlite3PagerWrite(pPage->pDbPage); + if( rc!=SQLITE_OK ){ + goto freepage_out; + } + put4byte(pPage->aData, iTrunk); + put4byte(&pPage->aData[4], 0); + put4byte(&pPage1->aData[32], iPage); + TRACE(("FREE-PAGE: %d new trunk page replacing %d\n", pPage->pgno, iTrunk)); + +freepage_out: + if( pPage ){ + pPage->isInit = 0; } + releasePage(pPage); + releasePage(pTrunk); return rc; } -#endif /* SQLITE_OMIT_EXPLAIN */ - -#ifdef SQLITE_DEBUG -/* -** Print the SQL that was used to generate a VDBE program. -*/ -SQLITE_PRIVATE void sqlite3VdbePrintSql(Vdbe *p){ - int nOp = p->nOp; - VdbeOp *pOp; - if( nOp<1 ) return; - pOp = &p->aOp[0]; - if( pOp->opcode==OP_Trace && pOp->p4.z!=0 ){ - const char *z = pOp->p4.z; - while( sqlite3Isspace(*z) ) z++; - printf("SQL: [%s]\n", z); +static void freePage(MemPage *pPage, int *pRC){ + if( (*pRC)==SQLITE_OK ){ + *pRC = freePage2(pPage->pBt, pPage, pPage->pgno); } } -#endif -#if !defined(SQLITE_OMIT_TRACE) && defined(SQLITE_ENABLE_IOTRACE) /* -** Print an IOTRACE message showing SQL content. +** Free any overflow pages associated with the given Cell. */ -SQLITE_PRIVATE void sqlite3VdbeIOTraceSql(Vdbe *p){ - int nOp = p->nOp; - VdbeOp *pOp; - if( sqlite3IoTrace==0 ) return; - if( nOp<1 ) return; - pOp = &p->aOp[0]; - if( pOp->opcode==OP_Trace && pOp->p4.z!=0 ){ - int i, j; - char z[1000]; - sqlite3_snprintf(sizeof(z), z, "%s", pOp->p4.z); - for(i=0; sqlite3Isspace(z[i]); i++){} - for(j=0; z[i]; i++){ - if( sqlite3Isspace(z[i]) ){ - if( z[i-1]!=' ' ){ - z[j++] = ' '; - } - }else{ - z[j++] = z[i]; - } - } - z[j] = 0; - sqlite3IoTrace("SQL %s\n", z); +static int clearCell(MemPage *pPage, unsigned char *pCell){ + BtShared *pBt = pPage->pBt; + CellInfo info; + Pgno ovflPgno; + int rc; + int nOvfl; + u32 ovflPageSize; + + assert( sqlite3_mutex_held(pPage->pBt->mutex) ); + btreeParseCellPtr(pPage, pCell, &info); + if( info.iOverflow==0 ){ + return SQLITE_OK; /* No overflow pages. Return without doing anything */ } -} -#endif /* !SQLITE_OMIT_TRACE && SQLITE_ENABLE_IOTRACE */ + if( pCell+info.iOverflow+3 > pPage->aData+pPage->maskPage ){ + return SQLITE_CORRUPT; /* Cell extends past end of page */ + } + ovflPgno = get4byte(&pCell[info.iOverflow]); + assert( pBt->usableSize > 4 ); + ovflPageSize = pBt->usableSize - 4; + nOvfl = (info.nPayload - info.nLocal + ovflPageSize - 1)/ovflPageSize; + assert( ovflPgno==0 || nOvfl>0 ); + while( nOvfl-- ){ + Pgno iNext = 0; + MemPage *pOvfl = 0; + if( ovflPgno<2 || ovflPgno>btreePagecount(pBt) ){ + /* 0 is not a legal page number and page 1 cannot be an + ** overflow page. Therefore if ovflPgno<2 or past the end of the + ** file the database must be corrupt. */ + return SQLITE_CORRUPT_BKPT; + } + if( nOvfl ){ + rc = getOverflowPage(pBt, ovflPgno, &pOvfl, &iNext); + if( rc ) return rc; + } -/* -** Allocate space from a fixed size buffer. Make *pp point to the -** allocated space. (Note: pp is a char* rather than a void** to -** work around the pointer aliasing rules of C.) *pp should initially -** be zero. If *pp is not zero, that means that the space has already -** been allocated and this routine is a noop. -** -** nByte is the number of bytes of space needed. -** -** *ppFrom point to available space and pEnd points to the end of the -** available space. -** -** *pnByte is a counter of the number of bytes of space that have failed -** to allocate. If there is insufficient space in *ppFrom to satisfy the -** request, then increment *pnByte by the amount of the request. -*/ -static void allocSpace( - char *pp, /* IN/OUT: Set *pp to point to allocated buffer */ - int nByte, /* Number of bytes to allocate */ - u8 **ppFrom, /* IN/OUT: Allocate from *ppFrom */ - u8 *pEnd, /* Pointer to 1 byte past the end of *ppFrom buffer */ - int *pnByte /* If allocation cannot be made, increment *pnByte */ -){ - assert( EIGHT_BYTE_ALIGNMENT(*ppFrom) ); - if( (*(void**)pp)==0 ){ - nByte = ROUND8(nByte); - if( (pEnd - *ppFrom)>=nByte ){ - *(void**)pp = (void *)*ppFrom; - *ppFrom += nByte; + if( ( pOvfl || ((pOvfl = btreePageLookup(pBt, ovflPgno))!=0) ) + && sqlite3PagerPageRefcount(pOvfl->pDbPage)!=1 + ){ + /* There is no reason any cursor should have an outstanding reference + ** to an overflow page belonging to a cell that is being deleted/updated. + ** So if there exists more than one reference to this page, then it + ** must not really be an overflow page and the database must be corrupt. + ** It is helpful to detect this before calling freePage2(), as + ** freePage2() may zero the page contents if secure-delete mode is + ** enabled. If this 'overflow' page happens to be a page that the + ** caller is iterating through or using in some other way, this + ** can be problematic. + */ + rc = SQLITE_CORRUPT_BKPT; }else{ - *pnByte += nByte; + rc = freePage2(pBt, pOvfl, ovflPgno); + } + + if( pOvfl ){ + sqlite3PagerUnref(pOvfl->pDbPage); } + if( rc ) return rc; + ovflPgno = iNext; } + return SQLITE_OK; } /* -** Prepare a virtual machine for execution. This involves things such -** as allocating stack space and initializing the program counter. -** After the VDBE has be prepped, it can be executed by one or more -** calls to sqlite3VdbeExec(). -** -** This is the only way to move a VDBE from VDBE_MAGIC_INIT to -** VDBE_MAGIC_RUN. +** Create the byte sequence used to represent a cell on page pPage +** and write that byte sequence into pCell[]. Overflow pages are +** allocated and filled in as necessary. The calling procedure +** is responsible for making sure sufficient space has been allocated +** for pCell[]. ** -** This function may be called more than once on a single virtual machine. -** The first call is made while compiling the SQL statement. Subsequent -** calls are made as part of the process of resetting a statement to be -** re-executed (from a call to sqlite3_reset()). The nVar, nMem, nCursor -** and isExplain parameters are only passed correct values the first time -** the function is called. On subsequent calls, from sqlite3_reset(), nVar -** is passed -1 and nMem, nCursor and isExplain are all passed zero. +** Note that pCell does not necessary need to point to the pPage->aData +** area. pCell might point to some temporary storage. The cell will +** be constructed in this temporary area then copied into pPage->aData +** later. */ -SQLITE_PRIVATE void sqlite3VdbeMakeReady( - Vdbe *p, /* The VDBE */ - int nVar, /* Number of '?' see in the SQL statement */ - int nMem, /* Number of memory cells to allocate */ - int nCursor, /* Number of cursors to allocate */ - int isExplain /* True if the EXPLAIN keywords is present */ +static int fillInCell( + MemPage *pPage, /* The page that contains the cell */ + unsigned char *pCell, /* Complete text of the cell */ + const void *pKey, i64 nKey, /* The key */ + const void *pData,int nData, /* The data */ + int nZero, /* Extra zero bytes to append to pData */ + int *pnSize /* Write cell size here */ ){ - int n; - sqlite3 *db = p->db; - - assert( p!=0 ); - assert( p->magic==VDBE_MAGIC_INIT ); - - /* There should be at least one opcode. - */ - assert( p->nOp>0 ); + int nPayload; + const u8 *pSrc; + int nSrc, n, rc; + int spaceLeft; + MemPage *pOvfl = 0; + MemPage *pToRelease = 0; + unsigned char *pPrior; + unsigned char *pPayload; + BtShared *pBt = pPage->pBt; + Pgno pgnoOvfl = 0; + int nHeader; + CellInfo info; - /* Set the magic to VDBE_MAGIC_RUN sooner rather than later. */ - p->magic = VDBE_MAGIC_RUN; + assert( sqlite3_mutex_held(pPage->pBt->mutex) ); - /* For each cursor required, also allocate a memory cell. Memory - ** cells (nMem+1-nCursor)..nMem, inclusive, will never be used by - ** the vdbe program. Instead they are used to allocate space for - ** VdbeCursor/BtCursor structures. The blob of memory associated with - ** cursor 0 is stored in memory cell nMem. Memory cell (nMem-1) - ** stores the blob of memory associated with cursor 1, etc. - ** - ** See also: allocateCursor(). - */ - nMem += nCursor; + /* pPage is not necessarily writeable since pCell might be auxiliary + ** buffer space that is separate from the pPage buffer area */ + assert( pCellaData || pCell>=&pPage->aData[pBt->pageSize] + || sqlite3PagerIswriteable(pPage->pDbPage) ); - /* Allocate space for memory registers, SQL variables, VDBE cursors and - ** an array to marshal SQL function arguments in. This is only done the - ** first time this function is called for a given VDBE, not when it is - ** being called from sqlite3_reset() to reset the virtual machine. - */ - if( nVar>=0 && !db->mallocFailed ){ - u8 *zCsr = (u8 *)&p->aOp[p->nOp]; - u8 *zEnd = (u8 *)&p->aOp[p->nOpAlloc]; - int nByte; - int nArg; /* Maximum number of args passed to a user function. */ - resolveP2Values(p, &nArg); - if( isExplain && nMem<10 ){ - nMem = 10; + /* Fill in the header. */ + nHeader = 0; + if( !pPage->leaf ){ + nHeader += 4; + } + if( pPage->hasData ){ + nHeader += putVarint(&pCell[nHeader], nData+nZero); + }else{ + nData = nZero = 0; + } + nHeader += putVarint(&pCell[nHeader], *(u64*)&nKey); + btreeParseCellPtr(pPage, pCell, &info); + assert( info.nHeader==nHeader ); + assert( info.nKey==nKey ); + assert( info.nData==(u32)(nData+nZero) ); + + /* Fill in the payload */ + nPayload = nData + nZero; + if( pPage->intKey ){ + pSrc = pData; + nSrc = nData; + nData = 0; + }else{ + if( NEVER(nKey>0x7fffffff || pKey==0) ){ + return SQLITE_CORRUPT_BKPT; } - zCsr += (zCsr - (u8*)0)&7; - assert( EIGHT_BYTE_ALIGNMENT(zCsr) ); - if( zEndaMem, nMem*sizeof(Mem), &zCsr, zEnd, &nByte); - allocSpace((char*)&p->aVar, nVar*sizeof(Mem), &zCsr, zEnd, &nByte); - allocSpace((char*)&p->apArg, nArg*sizeof(Mem*), &zCsr, zEnd, &nByte); - allocSpace((char*)&p->azVar, nVar*sizeof(char*), &zCsr, zEnd, &nByte); - allocSpace((char*)&p->apCsr, - nCursor*sizeof(VdbeCursor*), &zCsr, zEnd, &nByte - ); - if( nByte ){ - p->pFree = sqlite3DbMallocRaw(db, nByte); + while( nPayload>0 ){ + if( spaceLeft==0 ){ +#ifndef SQLITE_OMIT_AUTOVACUUM + Pgno pgnoPtrmap = pgnoOvfl; /* Overflow page pointer-map entry page */ + if( pBt->autoVacuum ){ + do{ + pgnoOvfl++; + } while( + PTRMAP_ISPAGE(pBt, pgnoOvfl) || pgnoOvfl==PENDING_BYTE_PAGE(pBt) + ); } - zCsr = p->pFree; - zEnd = &zCsr[nByte]; - }while( nByte && !db->mallocFailed ); - - p->nCursor = (u16)nCursor; - if( p->aVar ){ - p->nVar = (u16)nVar; - for(n=0; naVar[n].flags = MEM_Null; - p->aVar[n].db = db; +#endif + rc = allocateBtreePage(pBt, &pOvfl, &pgnoOvfl, pgnoOvfl, 0); +#ifndef SQLITE_OMIT_AUTOVACUUM + /* If the database supports auto-vacuum, and the second or subsequent + ** overflow page is being allocated, add an entry to the pointer-map + ** for that page now. + ** + ** If this is the first overflow page, then write a partial entry + ** to the pointer-map. If we write nothing to this pointer-map slot, + ** then the optimistic overflow chain processing in clearCell() + ** may misinterpret the uninitialised values and delete the + ** wrong pages from the database. + */ + if( pBt->autoVacuum && rc==SQLITE_OK ){ + u8 eType = (pgnoPtrmap?PTRMAP_OVERFLOW2:PTRMAP_OVERFLOW1); + ptrmapPut(pBt, pgnoOvfl, eType, pgnoPtrmap, &rc); + if( rc ){ + releasePage(pOvfl); + } } - } - if( p->aMem ){ - p->aMem--; /* aMem[] goes from 1..nMem */ - p->nMem = nMem; /* not from 0..nMem-1 */ - for(n=1; n<=nMem; n++){ - p->aMem[n].flags = MEM_Null; - p->aMem[n].db = db; +#endif + if( rc ){ + releasePage(pToRelease); + return rc; } + + /* If pToRelease is not zero than pPrior points into the data area + ** of pToRelease. Make sure pToRelease is still writeable. */ + assert( pToRelease==0 || sqlite3PagerIswriteable(pToRelease->pDbPage) ); + + /* If pPrior is part of the data area of pPage, then make sure pPage + ** is still writeable */ + assert( pPrioraData || pPrior>=&pPage->aData[pBt->pageSize] + || sqlite3PagerIswriteable(pPage->pDbPage) ); + + put4byte(pPrior, pgnoOvfl); + releasePage(pToRelease); + pToRelease = pOvfl; + pPrior = pOvfl->aData; + put4byte(pPrior, 0); + pPayload = &pOvfl->aData[4]; + spaceLeft = pBt->usableSize - 4; } - } -#ifdef SQLITE_DEBUG - for(n=1; nnMem; n++){ - assert( p->aMem[n].db==db ); - } -#endif + n = nPayload; + if( n>spaceLeft ) n = spaceLeft; - p->pc = -1; - p->rc = SQLITE_OK; - p->errorAction = OE_Abort; - p->explain |= isExplain; - p->magic = VDBE_MAGIC_RUN; - p->nChange = 0; - p->cacheCtr = 1; - p->minWriteFileFormat = 255; - p->iStatement = 0; -#ifdef VDBE_PROFILE - { - int i; - for(i=0; inOp; i++){ - p->aOp[i].cnt = 0; - p->aOp[i].cycles = 0; + /* If pToRelease is not zero than pPayload points into the data area + ** of pToRelease. Make sure pToRelease is still writeable. */ + assert( pToRelease==0 || sqlite3PagerIswriteable(pToRelease->pDbPage) ); + + /* If pPayload is part of the data area of pPage, then make sure pPage + ** is still writeable */ + assert( pPayloadaData || pPayload>=&pPage->aData[pBt->pageSize] + || sqlite3PagerIswriteable(pPage->pDbPage) ); + + if( nSrc>0 ){ + if( n>nSrc ) n = nSrc; + assert( pSrc ); + memcpy(pPayload, pSrc, n); + }else{ + memset(pPayload, 0, n); + } + nPayload -= n; + pPayload += n; + pSrc += n; + nSrc -= n; + spaceLeft -= n; + if( nSrc==0 ){ + nSrc = nData; + pSrc = pData; } } -#endif + releasePage(pToRelease); + return SQLITE_OK; } /* -** Close a VDBE cursor and release all the resources that cursor -** happens to hold. +** Remove the i-th cell from pPage. This routine effects pPage only. +** The cell content is not freed or deallocated. It is assumed that +** the cell content has been copied someplace else. This routine just +** removes the reference to the cell from pPage. +** +** "sz" must be the number of bytes in the cell. */ -SQLITE_PRIVATE void sqlite3VdbeFreeCursor(Vdbe *p, VdbeCursor *pCx){ - if( pCx==0 ){ +static void dropCell(MemPage *pPage, int idx, int sz, int *pRC){ + u32 pc; /* Offset to cell content of cell being deleted */ + u8 *data; /* pPage->aData */ + u8 *ptr; /* Used to move bytes around within data[] */ + u8 *endPtr; /* End of loop */ + int rc; /* The return code */ + int hdr; /* Beginning of the header. 0 most pages. 100 page 1 */ + + if( *pRC ) return; + + assert( idx>=0 && idxnCell ); + assert( sz==cellSize(pPage, idx) ); + assert( sqlite3PagerIswriteable(pPage->pDbPage) ); + assert( sqlite3_mutex_held(pPage->pBt->mutex) ); + data = pPage->aData; + ptr = &pPage->aCellIdx[2*idx]; + pc = get2byte(ptr); + hdr = pPage->hdrOffset; + testcase( pc==get2byte(&data[hdr+5]) ); + testcase( pc+sz==pPage->pBt->usableSize ); + if( pc < (u32)get2byte(&data[hdr+5]) || pc+sz > pPage->pBt->usableSize ){ + *pRC = SQLITE_CORRUPT_BKPT; return; } - if( pCx->pBt ){ - sqlite3BtreeClose(pCx->pBt); - /* The pCx->pCursor will be close automatically, if it exists, by - ** the call above. */ - }else if( pCx->pCursor ){ - sqlite3BtreeCloseCursor(pCx->pCursor); - } -#ifndef SQLITE_OMIT_VIRTUALTABLE - if( pCx->pVtabCursor ){ - sqlite3_vtab_cursor *pVtabCursor = pCx->pVtabCursor; - const sqlite3_module *pModule = pCx->pModule; - p->inVtabMethod = 1; - (void)sqlite3SafetyOff(p->db); - pModule->xClose(pVtabCursor); - (void)sqlite3SafetyOn(p->db); - p->inVtabMethod = 0; - } -#endif - if( !pCx->ephemPseudoTable ){ - sqlite3DbFree(p->db, pCx->pData); + rc = freeSpace(pPage, pc, sz); + if( rc ){ + *pRC = rc; + return; } -} - -/* -** Close all cursors except for VTab cursors that are currently -** in use. -*/ -static void closeAllCursorsExceptActiveVtabs(Vdbe *p){ - int i; - if( p->apCsr==0 ) return; - for(i=0; inCursor; i++){ - VdbeCursor *pC = p->apCsr[i]; - if( pC && (!p->inVtabMethod || !pC->pVtabCursor) ){ - sqlite3VdbeFreeCursor(p, pC); - p->apCsr[i] = 0; - } + endPtr = &pPage->aCellIdx[2*pPage->nCell - 2]; + assert( (SQLITE_PTR_TO_INT(ptr)&1)==0 ); /* ptr is always 2-byte aligned */ + while( ptrnCell--; + put2byte(&data[hdr+3], pPage->nCell); + pPage->nFree += 2; } /* -** Clean up the VM after execution. +** Insert a new cell on pPage at cell index "i". pCell points to the +** content of the cell. ** -** This routine will automatically close any cursors, lists, and/or -** sorters that were left open. It also deletes the values of -** variables in the aVar[] array. -*/ -static void Cleanup(Vdbe *p){ - int i; - sqlite3 *db = p->db; - Mem *pMem; - closeAllCursorsExceptActiveVtabs(p); - for(pMem=&p->aMem[1], i=1; i<=p->nMem; i++, pMem++){ - if( pMem->flags & MEM_RowSet ){ - sqlite3RowSetClear(pMem->u.pRowSet); +** If the cell content will fit on the page, then put it there. If it +** will not fit, then make a copy of the cell content into pTemp if +** pTemp is not null. Regardless of pTemp, allocate a new entry +** in pPage->apOvfl[] and make it point to the cell content (either +** in pTemp or the original pCell) and also record its index. +** Allocating a new entry in pPage->aCell[] implies that +** pPage->nOverflow is incremented. +** +** If nSkip is non-zero, then do not copy the first nSkip bytes of the +** cell. The caller will overwrite them after this function returns. If +** nSkip is non-zero, then pCell may not point to an invalid memory location +** (but pCell+nSkip is always valid). +*/ +static void insertCell( + MemPage *pPage, /* Page into which we are copying */ + int i, /* New cell becomes the i-th cell of the page */ + u8 *pCell, /* Content of the new cell */ + int sz, /* Bytes of content in pCell */ + u8 *pTemp, /* Temp storage space for pCell, if needed */ + Pgno iChild, /* If non-zero, replace first 4 bytes with this value */ + int *pRC /* Read and write return code from here */ +){ + int idx = 0; /* Where to write new cell content in data[] */ + int j; /* Loop counter */ + int end; /* First byte past the last cell pointer in data[] */ + int ins; /* Index in data[] where new cell pointer is inserted */ + int cellOffset; /* Address of first cell pointer in data[] */ + u8 *data; /* The content of the whole page */ + u8 *ptr; /* Used for moving information around in data[] */ + u8 *endPtr; /* End of the loop */ + + int nSkip = (iChild ? 4 : 0); + + if( *pRC ) return; + + assert( i>=0 && i<=pPage->nCell+pPage->nOverflow ); + assert( pPage->nCell<=MX_CELL(pPage->pBt) && MX_CELL(pPage->pBt)<=10921 ); + assert( pPage->nOverflow<=ArraySize(pPage->apOvfl) ); + assert( ArraySize(pPage->apOvfl)==ArraySize(pPage->aiOvfl) ); + assert( sqlite3_mutex_held(pPage->pBt->mutex) ); + /* The cell should normally be sized correctly. However, when moving a + ** malformed cell from a leaf page to an interior page, if the cell size + ** wanted to be less than 4 but got rounded up to 4 on the leaf, then size + ** might be less than 8 (leaf-size + pointer) on the interior node. Hence + ** the term after the || in the following assert(). */ + assert( sz==cellSizePtr(pPage, pCell) || (sz==8 && iChild>0) ); + if( pPage->nOverflow || sz+2>pPage->nFree ){ + if( pTemp ){ + memcpy(pTemp+nSkip, pCell+nSkip, sz-nSkip); + pCell = pTemp; } - MemSetTypeFlag(pMem, MEM_Null); - } - releaseMemArray(&p->aMem[1], p->nMem); - if( p->contextStack ){ - sqlite3DbFree(db, p->contextStack); + if( iChild ){ + put4byte(pCell, iChild); + } + j = pPage->nOverflow++; + assert( j<(int)(sizeof(pPage->apOvfl)/sizeof(pPage->apOvfl[0])) ); + pPage->apOvfl[j] = pCell; + pPage->aiOvfl[j] = (u16)i; + }else{ + int rc = sqlite3PagerWrite(pPage->pDbPage); + if( rc!=SQLITE_OK ){ + *pRC = rc; + return; + } + assert( sqlite3PagerIswriteable(pPage->pDbPage) ); + data = pPage->aData; + cellOffset = pPage->cellOffset; + end = cellOffset + 2*pPage->nCell; + ins = cellOffset + 2*i; + rc = allocateSpace(pPage, sz, &idx); + if( rc ){ *pRC = rc; return; } + /* The allocateSpace() routine guarantees the following two properties + ** if it returns success */ + assert( idx >= end+2 ); + assert( idx+sz <= (int)pPage->pBt->usableSize ); + pPage->nCell++; + pPage->nFree -= (u16)(2 + sz); + memcpy(&data[idx+nSkip], pCell+nSkip, sz-nSkip); + if( iChild ){ + put4byte(&data[idx], iChild); + } + ptr = &data[end]; + endPtr = &data[ins]; + assert( (SQLITE_PTR_TO_INT(ptr)&1)==0 ); /* ptr is always 2-byte aligned */ + while( ptr>endPtr ){ + *(u16*)ptr = *(u16*)&ptr[-2]; + ptr -= 2; + } + put2byte(&data[ins], idx); + put2byte(&data[pPage->hdrOffset+3], pPage->nCell); +#ifndef SQLITE_OMIT_AUTOVACUUM + if( pPage->pBt->autoVacuum ){ + /* The cell may contain a pointer to an overflow page. If so, write + ** the entry for the overflow page into the pointer map. + */ + ptrmapPutOvflPtr(pPage, pCell, pRC); + } +#endif } - p->contextStack = 0; - p->contextStackDepth = 0; - p->contextStackTop = 0; - sqlite3DbFree(db, p->zErrMsg); - p->zErrMsg = 0; - p->pResultSet = 0; } /* -** Set the number of result columns that will be returned by this SQL -** statement. This is now set at compile time, rather than during -** execution of the vdbe program so that sqlite3_column_count() can -** be called on an SQL statement before sqlite3_step(). +** Add a list of cells to a page. The page should be initially empty. +** The cells are guaranteed to fit on the page. */ -SQLITE_PRIVATE void sqlite3VdbeSetNumCols(Vdbe *p, int nResColumn){ - Mem *pColName; - int n; - sqlite3 *db = p->db; +static void assemblePage( + MemPage *pPage, /* The page to be assemblied */ + int nCell, /* The number of cells to add to this page */ + u8 **apCell, /* Pointers to cell bodies */ + u16 *aSize /* Sizes of the cells */ +){ + int i; /* Loop counter */ + u8 *pCellptr; /* Address of next cell pointer */ + int cellbody; /* Address of next cell body */ + u8 * const data = pPage->aData; /* Pointer to data for pPage */ + const int hdr = pPage->hdrOffset; /* Offset of header on pPage */ + const int nUsable = pPage->pBt->usableSize; /* Usable size of page */ - releaseMemArray(p->aColName, p->nResColumn*COLNAME_N); - sqlite3DbFree(db, p->aColName); - n = nResColumn*COLNAME_N; - p->nResColumn = (u16)nResColumn; - p->aColName = pColName = (Mem*)sqlite3DbMallocZero(db, sizeof(Mem)*n ); - if( p->aColName==0 ) return; - while( n-- > 0 ){ - pColName->flags = MEM_Null; - pColName->db = p->db; - pColName++; + assert( pPage->nOverflow==0 ); + assert( sqlite3_mutex_held(pPage->pBt->mutex) ); + assert( nCell>=0 && nCell<=(int)MX_CELL(pPage->pBt) + && (int)MX_CELL(pPage->pBt)<=10921); + assert( sqlite3PagerIswriteable(pPage->pDbPage) ); + + /* Check that the page has just been zeroed by zeroPage() */ + assert( pPage->nCell==0 ); + assert( get2byteNotZero(&data[hdr+5])==nUsable ); + + pCellptr = &pPage->aCellIdx[nCell*2]; + cellbody = nUsable; + for(i=nCell-1; i>=0; i--){ + u16 sz = aSize[i]; + pCellptr -= 2; + cellbody -= sz; + put2byte(pCellptr, cellbody); + memcpy(&data[cellbody], apCell[i], sz); } + put2byte(&data[hdr+3], nCell); + put2byte(&data[hdr+5], cellbody); + pPage->nFree -= (nCell*2 + nUsable - cellbody); + pPage->nCell = (u16)nCell; } /* -** Set the name of the idx'th column to be returned by the SQL statement. -** zName must be a pointer to a nul terminated string. -** -** This call must be made after a call to sqlite3VdbeSetNumCols(). +** The following parameters determine how many adjacent pages get involved +** in a balancing operation. NN is the number of neighbors on either side +** of the page that participate in the balancing operation. NB is the +** total number of pages that participate, including the target page and +** NN neighbors on either side. ** -** The final parameter, xDel, must be one of SQLITE_DYNAMIC, SQLITE_STATIC -** or SQLITE_TRANSIENT. If it is SQLITE_DYNAMIC, then the buffer pointed -** to by zName will be freed by sqlite3DbFree() when the vdbe is destroyed. +** The minimum value of NN is 1 (of course). Increasing NN above 1 +** (to 2 or 3) gives a modest improvement in SELECT and DELETE performance +** in exchange for a larger degradation in INSERT and UPDATE performance. +** The value of NN appears to give the best results overall. */ -SQLITE_PRIVATE int sqlite3VdbeSetColName( - Vdbe *p, /* Vdbe being configured */ - int idx, /* Index of column zName applies to */ - int var, /* One of the COLNAME_* constants */ - const char *zName, /* Pointer to buffer containing name */ - void (*xDel)(void*) /* Memory management strategy for zName */ -){ - int rc; - Mem *pColName; - assert( idxnResColumn ); - assert( vardb->mallocFailed ){ - assert( !zName || xDel!=SQLITE_DYNAMIC ); - return SQLITE_NOMEM; - } - assert( p->aColName!=0 ); - pColName = &(p->aColName[idx+var*p->nResColumn]); - rc = sqlite3VdbeMemSetStr(pColName, zName, -1, SQLITE_UTF8, xDel); - assert( rc!=0 || !zName || (pColName->flags&MEM_Term)!=0 ); - return rc; -} +#define NN 1 /* Number of neighbors on either side of pPage */ +#define NB (NN*2+1) /* Total pages involved in the balance */ + +#ifndef SQLITE_OMIT_QUICKBALANCE /* -** A read or write transaction may or may not be active on database handle -** db. If a transaction is active, commit it. If there is a -** write-transaction spanning more than one database file, this routine -** takes care of the master journal trickery. +** This version of balance() handles the common special case where +** a new entry is being inserted on the extreme right-end of the +** tree, in other words, when the new entry will become the largest +** entry in the tree. +** +** Instead of trying to balance the 3 right-most leaf pages, just add +** a new page to the right-hand side and put the one new entry in +** that page. This leaves the right side of the tree somewhat +** unbalanced. But odds are that we will be inserting new entries +** at the end soon afterwards so the nearly empty page will quickly +** fill up. On average. +** +** pPage is the leaf page which is the right-most page in the tree. +** pParent is its parent. pPage must have a single overflow entry +** which is also the right-most entry on the page. +** +** The pSpace buffer is used to store a temporary copy of the divider +** cell that will be inserted into pParent. Such a cell consists of a 4 +** byte page number followed by a variable length integer. In other +** words, at most 13 bytes. Hence the pSpace buffer must be at +** least 13 bytes in size. */ -static int vdbeCommit(sqlite3 *db, Vdbe *p){ - int i; - int nTrans = 0; /* Number of databases with an active write-transaction */ - int rc = SQLITE_OK; - int needXcommit = 0; - -#ifdef SQLITE_OMIT_VIRTUALTABLE - /* With this option, sqlite3VtabSync() is defined to be simply - ** SQLITE_OK so p is not used. - */ - UNUSED_PARAMETER(p); -#endif - - /* Before doing anything else, call the xSync() callback for any - ** virtual module tables written in this transaction. This has to - ** be done before determining whether a master journal file is - ** required, as an xSync() callback may add an attached database - ** to the transaction. - */ - rc = sqlite3VtabSync(db, &p->zErrMsg); - if( rc!=SQLITE_OK ){ - return rc; - } +static int balance_quick(MemPage *pParent, MemPage *pPage, u8 *pSpace){ + BtShared *const pBt = pPage->pBt; /* B-Tree Database */ + MemPage *pNew; /* Newly allocated page */ + int rc; /* Return Code */ + Pgno pgnoNew; /* Page number of pNew */ - /* This loop determines (a) if the commit hook should be invoked and - ** (b) how many database files have open write transactions, not - ** including the temp database. (b) is important because if more than - ** one database file has an open write transaction, a master journal - ** file is required for an atomic commit. - */ - for(i=0; inDb; i++){ - Btree *pBt = db->aDb[i].pBt; - if( sqlite3BtreeIsInTrans(pBt) ){ - needXcommit = 1; - if( i!=1 ) nTrans++; - } - } + assert( sqlite3_mutex_held(pPage->pBt->mutex) ); + assert( sqlite3PagerIswriteable(pParent->pDbPage) ); + assert( pPage->nOverflow==1 ); - /* If there are any write-transactions at all, invoke the commit hook */ - if( needXcommit && db->xCommitCallback ){ - assert( (db->flags & SQLITE_CommitBusy)==0 ); - db->flags |= SQLITE_CommitBusy; - (void)sqlite3SafetyOff(db); - rc = db->xCommitCallback(db->pCommitArg); - (void)sqlite3SafetyOn(db); - db->flags &= ~SQLITE_CommitBusy; - if( rc ){ - return SQLITE_CONSTRAINT; - } - } + /* This error condition is now caught prior to reaching this function */ + if( pPage->nCell<=0 ) return SQLITE_CORRUPT_BKPT; - /* The simple case - no more than one database file (not counting the - ** TEMP database) has a transaction active. There is no need for the - ** master-journal. - ** - ** If the return value of sqlite3BtreeGetFilename() is a zero length - ** string, it means the main database is :memory: or a temp file. In - ** that case we do not support atomic multi-file commits, so use the - ** simple case then too. + /* Allocate a new page. This page will become the right-sibling of + ** pPage. Make the parent page writable, so that the new divider cell + ** may be inserted. If both these operations are successful, proceed. */ - if( 0==sqlite3Strlen30(sqlite3BtreeGetFilename(db->aDb[0].pBt)) - || nTrans<=1 - ){ - for(i=0; rc==SQLITE_OK && inDb; i++){ - Btree *pBt = db->aDb[i].pBt; - if( pBt ){ - rc = sqlite3BtreeCommitPhaseOne(pBt, 0); - } - } - - /* Do the commit only if all databases successfully complete phase 1. - ** If one of the BtreeCommitPhaseOne() calls fails, this indicates an - ** IO error while deleting or truncating a journal file. It is unlikely, - ** but could happen. In this case abandon processing and return the error. - */ - for(i=0; rc==SQLITE_OK && inDb; i++){ - Btree *pBt = db->aDb[i].pBt; - if( pBt ){ - rc = sqlite3BtreeCommitPhaseTwo(pBt); - } - } - if( rc==SQLITE_OK ){ - sqlite3VtabCommit(db); - } - } + rc = allocateBtreePage(pBt, &pNew, &pgnoNew, 0, 0); - /* The complex case - There is a multi-file write-transaction active. - ** This requires a master journal file to ensure the transaction is - ** committed atomicly. - */ -#ifndef SQLITE_OMIT_DISKIO - else{ - sqlite3_vfs *pVfs = db->pVfs; - int needSync = 0; - char *zMaster = 0; /* File-name for the master journal */ - char const *zMainFile = sqlite3BtreeGetFilename(db->aDb[0].pBt); - sqlite3_file *pMaster = 0; - i64 offset = 0; - int res; + if( rc==SQLITE_OK ){ - /* Select a master journal file name */ - do { - u32 iRandom; - sqlite3DbFree(db, zMaster); - sqlite3_randomness(sizeof(iRandom), &iRandom); - zMaster = sqlite3MPrintf(db, "%s-mj%08X", zMainFile, iRandom&0x7fffffff); - if( !zMaster ){ - return SQLITE_NOMEM; - } - rc = sqlite3OsAccess(pVfs, zMaster, SQLITE_ACCESS_EXISTS, &res); - }while( rc==SQLITE_OK && res ); - if( rc==SQLITE_OK ){ - /* Open the master journal. */ - rc = sqlite3OsOpenMalloc(pVfs, zMaster, &pMaster, - SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE| - SQLITE_OPEN_EXCLUSIVE|SQLITE_OPEN_MASTER_JOURNAL, 0 - ); - } - if( rc!=SQLITE_OK ){ - sqlite3DbFree(db, zMaster); - return rc; - } - - /* Write the name of each database file in the transaction into the new - ** master journal file. If an error occurs at this point close - ** and delete the master journal file. All the individual journal files - ** still have 'null' as the master journal pointer, so they will roll - ** back independently if a failure occurs. - */ - for(i=0; inDb; i++){ - Btree *pBt = db->aDb[i].pBt; - if( i==1 ) continue; /* Ignore the TEMP database */ - if( sqlite3BtreeIsInTrans(pBt) ){ - char const *zFile = sqlite3BtreeGetJournalname(pBt); - if( zFile[0]==0 ) continue; /* Ignore :memory: databases */ - if( !needSync && !sqlite3BtreeSyncDisabled(pBt) ){ - needSync = 1; - } - rc = sqlite3OsWrite(pMaster, zFile, sqlite3Strlen30(zFile)+1, offset); - offset += sqlite3Strlen30(zFile)+1; - if( rc!=SQLITE_OK ){ - sqlite3OsCloseFree(pMaster); - sqlite3OsDelete(pVfs, zMaster, 0); - sqlite3DbFree(db, zMaster); - return rc; - } - } - } + u8 *pOut = &pSpace[4]; + u8 *pCell = pPage->apOvfl[0]; + u16 szCell = cellSizePtr(pPage, pCell); + u8 *pStop; - /* Sync the master journal file. If the IOCAP_SEQUENTIAL device - ** flag is set this is not required. - */ - if( needSync - && 0==(sqlite3OsDeviceCharacteristics(pMaster)&SQLITE_IOCAP_SEQUENTIAL) - && SQLITE_OK!=(rc = sqlite3OsSync(pMaster, SQLITE_SYNC_NORMAL)) - ){ - sqlite3OsCloseFree(pMaster); - sqlite3OsDelete(pVfs, zMaster, 0); - sqlite3DbFree(db, zMaster); - return rc; - } + assert( sqlite3PagerIswriteable(pNew->pDbPage) ); + assert( pPage->aData[0]==(PTF_INTKEY|PTF_LEAFDATA|PTF_LEAF) ); + zeroPage(pNew, PTF_INTKEY|PTF_LEAFDATA|PTF_LEAF); + assemblePage(pNew, 1, &pCell, &szCell); - /* Sync all the db files involved in the transaction. The same call - ** sets the master journal pointer in each individual journal. If - ** an error occurs here, do not delete the master journal file. - ** - ** If the error occurs during the first call to - ** sqlite3BtreeCommitPhaseOne(), then there is a chance that the - ** master journal file will be orphaned. But we cannot delete it, - ** in case the master journal file name was written into the journal - ** file before the failure occurred. + /* If this is an auto-vacuum database, update the pointer map + ** with entries for the new page, and any pointer from the + ** cell on the page to an overflow page. If either of these + ** operations fails, the return code is set, but the contents + ** of the parent page are still manipulated by thh code below. + ** That is Ok, at this point the parent page is guaranteed to + ** be marked as dirty. Returning an error code will cause a + ** rollback, undoing any changes made to the parent page. */ - for(i=0; rc==SQLITE_OK && inDb; i++){ - Btree *pBt = db->aDb[i].pBt; - if( pBt ){ - rc = sqlite3BtreeCommitPhaseOne(pBt, zMaster); + if( ISAUTOVACUUM ){ + ptrmapPut(pBt, pgnoNew, PTRMAP_BTREE, pParent->pgno, &rc); + if( szCell>pNew->minLocal ){ + ptrmapPutOvflPtr(pNew, pCell, &rc); } } - sqlite3OsCloseFree(pMaster); - if( rc!=SQLITE_OK ){ - sqlite3DbFree(db, zMaster); - return rc; - } - - /* Delete the master journal file. This commits the transaction. After - ** doing this the directory is synced again before any individual - ** transaction files are deleted. + + /* Create a divider cell to insert into pParent. The divider cell + ** consists of a 4-byte page number (the page number of pPage) and + ** a variable length key value (which must be the same value as the + ** largest key on pPage). + ** + ** To find the largest key value on pPage, first find the right-most + ** cell on pPage. The first two fields of this cell are the + ** record-length (a variable length integer at most 32-bits in size) + ** and the key value (a variable length integer, may have any value). + ** The first of the while(...) loops below skips over the record-length + ** field. The second while(...) loop copies the key value from the + ** cell on pPage into the pSpace buffer. */ - rc = sqlite3OsDelete(pVfs, zMaster, 1); - sqlite3DbFree(db, zMaster); - zMaster = 0; - if( rc ){ - return rc; - } + pCell = findCell(pPage, pPage->nCell-1); + pStop = &pCell[9]; + while( (*(pCell++)&0x80) && pCellnDb; i++){ - Btree *pBt = db->aDb[i].pBt; - if( pBt ){ - sqlite3BtreeCommitPhaseTwo(pBt); - } - } - sqlite3EndBenignMalloc(); - enable_simulated_io_errors(); + /* Insert the new divider cell into pParent. */ + insertCell(pParent, pParent->nCell, pSpace, (int)(pOut-pSpace), + 0, pPage->pgno, &rc); - sqlite3VtabCommit(db); + /* Set the right-child pointer of pParent to point to the new page. */ + put4byte(&pParent->aData[pParent->hdrOffset+8], pgnoNew); + + /* Release the reference to the new page. */ + releasePage(pNew); } -#endif return rc; } +#endif /* SQLITE_OMIT_QUICKBALANCE */ -/* -** This routine checks that the sqlite3.activeVdbeCnt count variable -** matches the number of vdbe's in the list sqlite3.pVdbe that are -** currently active. An assertion fails if the two counts do not match. -** This is an internal self-check only - it is not an essential processing -** step. -** -** This is a no-op if NDEBUG is defined. +#if 0 +/* +** This function does not contribute anything to the operation of SQLite. +** it is sometimes activated temporarily while debugging code responsible +** for setting pointer-map entries. */ -#ifndef NDEBUG -static void checkActiveVdbeCnt(sqlite3 *db){ - Vdbe *p; - int cnt = 0; - int nWrite = 0; - p = db->pVdbe; - while( p ){ - if( p->magic==VDBE_MAGIC_RUN && p->pc>=0 ){ - cnt++; - if( p->readOnly==0 ) nWrite++; +static int ptrmapCheckPages(MemPage **apPage, int nPage){ + int i, j; + for(i=0; ipBt; + assert( pPage->isInit ); + + for(j=0; jnCell; j++){ + CellInfo info; + u8 *z; + + z = findCell(pPage, j); + btreeParseCellPtr(pPage, z, &info); + if( info.iOverflow ){ + Pgno ovfl = get4byte(&z[info.iOverflow]); + ptrmapGet(pBt, ovfl, &e, &n); + assert( n==pPage->pgno && e==PTRMAP_OVERFLOW1 ); + } + if( !pPage->leaf ){ + Pgno child = get4byte(z); + ptrmapGet(pBt, child, &e, &n); + assert( n==pPage->pgno && e==PTRMAP_BTREE ); + } + } + if( !pPage->leaf ){ + Pgno child = get4byte(&pPage->aData[pPage->hdrOffset+8]); + ptrmapGet(pBt, child, &e, &n); + assert( n==pPage->pgno && e==PTRMAP_BTREE ); } - p = p->pNext; } - assert( cnt==db->activeVdbeCnt ); - assert( nWrite==db->writeVdbeCnt ); + return 1; } -#else -#define checkActiveVdbeCnt(x) #endif /* -** For every Btree that in database connection db which -** has been modified, "trip" or invalidate each cursor in -** that Btree might have been modified so that the cursor -** can never be used again. This happens when a rollback -*** occurs. We have to trip all the other cursors, even -** cursor from other VMs in different database connections, -** so that none of them try to use the data at which they -** were pointing and which now may have been changed due -** to the rollback. +** This function is used to copy the contents of the b-tree node stored +** on page pFrom to page pTo. If page pFrom was not a leaf page, then +** the pointer-map entries for each child page are updated so that the +** parent page stored in the pointer map is page pTo. If pFrom contained +** any cells with overflow page pointers, then the corresponding pointer +** map entries are also updated so that the parent page is page pTo. +** +** If pFrom is currently carrying any overflow cells (entries in the +** MemPage.apOvfl[] array), they are not copied to pTo. ** -** Remember that a rollback can delete tables complete and -** reorder rootpages. So it is not sufficient just to save -** the state of the cursor. We have to invalidate the cursor -** so that it is never used again. +** Before returning, page pTo is reinitialized using btreeInitPage(). +** +** The performance of this function is not critical. It is only used by +** the balance_shallower() and balance_deeper() procedures, neither of +** which are called often under normal circumstances. */ -static void invalidateCursorsOnModifiedBtrees(sqlite3 *db){ - int i; - for(i=0; inDb; i++){ - Btree *p = db->aDb[i].pBt; - if( p && sqlite3BtreeIsInTrans(p) ){ - sqlite3BtreeTripAllCursors(p, SQLITE_ABORT); +static void copyNodeContent(MemPage *pFrom, MemPage *pTo, int *pRC){ + if( (*pRC)==SQLITE_OK ){ + BtShared * const pBt = pFrom->pBt; + u8 * const aFrom = pFrom->aData; + u8 * const aTo = pTo->aData; + int const iFromHdr = pFrom->hdrOffset; + int const iToHdr = ((pTo->pgno==1) ? 100 : 0); + int rc; + int iData; + + + assert( pFrom->isInit ); + assert( pFrom->nFree>=iToHdr ); + assert( get2byte(&aFrom[iFromHdr+5]) <= (int)pBt->usableSize ); + + /* Copy the b-tree node content from page pFrom to page pTo. */ + iData = get2byte(&aFrom[iFromHdr+5]); + memcpy(&aTo[iData], &aFrom[iData], pBt->usableSize-iData); + memcpy(&aTo[iToHdr], &aFrom[iFromHdr], pFrom->cellOffset + 2*pFrom->nCell); + + /* Reinitialize page pTo so that the contents of the MemPage structure + ** match the new data. The initialization of pTo can actually fail under + ** fairly obscure circumstances, even though it is a copy of initialized + ** page pFrom. + */ + pTo->isInit = 0; + rc = btreeInitPage(pTo); + if( rc!=SQLITE_OK ){ + *pRC = rc; + return; + } + + /* If this is an auto-vacuum database, update the pointer-map entries + ** for any b-tree or overflow pages that pTo now contains the pointers to. + */ + if( ISAUTOVACUUM ){ + *pRC = setChildPtrmaps(pTo); } } } /* -** If the Vdbe passed as the first argument opened a statement-transaction, -** close it now. Argument eOp must be either SAVEPOINT_ROLLBACK or -** SAVEPOINT_RELEASE. If it is SAVEPOINT_ROLLBACK, then the statement -** transaction is rolled back. If eOp is SAVEPOINT_RELEASE, then the -** statement transaction is commtted. +** This routine redistributes cells on the iParentIdx'th child of pParent +** (hereafter "the page") and up to 2 siblings so that all pages have about the +** same amount of free space. Usually a single sibling on either side of the +** page are used in the balancing, though both siblings might come from one +** side if the page is the first or last child of its parent. If the page +** has fewer than 2 siblings (something which can only happen if the page +** is a root page or a child of a root page) then all available siblings +** participate in the balancing. ** -** If an IO error occurs, an SQLITE_IOERR_XXX error code is returned. -** Otherwise SQLITE_OK. -*/ -SQLITE_PRIVATE int sqlite3VdbeCloseStatement(Vdbe *p, int eOp){ - sqlite3 *const db = p->db; - int rc = SQLITE_OK; - if( p->iStatement && db->nStatement ){ - int i; - const int iSavepoint = p->iStatement-1; - - assert( eOp==SAVEPOINT_ROLLBACK || eOp==SAVEPOINT_RELEASE); - assert( db->nStatement>0 ); - assert( p->iStatement==(db->nStatement+db->nSavepoint) ); - - for(i=0; inDb; i++){ - int rc2 = SQLITE_OK; - Btree *pBt = db->aDb[i].pBt; - if( pBt ){ - if( eOp==SAVEPOINT_ROLLBACK ){ - rc2 = sqlite3BtreeSavepoint(pBt, SAVEPOINT_ROLLBACK, iSavepoint); - } - if( rc2==SQLITE_OK ){ - rc2 = sqlite3BtreeSavepoint(pBt, SAVEPOINT_RELEASE, iSavepoint); - } - if( rc==SQLITE_OK ){ - rc = rc2; - } - } - } - db->nStatement--; - p->iStatement = 0; - } - return rc; -} - -/* -** If SQLite is compiled to support shared-cache mode and to be threadsafe, -** this routine obtains the mutex associated with each BtShared structure -** that may be accessed by the VM passed as an argument. In doing so it -** sets the BtShared.db member of each of the BtShared structures, ensuring -** that the correct busy-handler callback is invoked if required. +** The number of siblings of the page might be increased or decreased by +** one or two in an effort to keep pages nearly full but not over full. ** -** If SQLite is not threadsafe but does support shared-cache mode, then -** sqlite3BtreeEnterAll() is invoked to set the BtShared.db variables -** of all of BtShared structures accessible via the database handle -** associated with the VM. Of course only a subset of these structures -** will be accessed by the VM, and we could use Vdbe.btreeMask to figure -** that subset out, but there is no advantage to doing so. +** Note that when this routine is called, some of the cells on the page +** might not actually be stored in MemPage.aData[]. This can happen +** if the page is overfull. This routine ensures that all cells allocated +** to the page and its siblings fit into MemPage.aData[] before returning. ** -** If SQLite is not threadsafe and does not support shared-cache mode, this -** function is a no-op. -*/ -#ifndef SQLITE_OMIT_SHARED_CACHE -SQLITE_PRIVATE void sqlite3VdbeMutexArrayEnter(Vdbe *p){ -#if SQLITE_THREADSAFE - sqlite3BtreeMutexArrayEnter(&p->aMutex); -#else - sqlite3BtreeEnterAll(p->db); -#endif -} -#endif - -/* -** This routine is called the when a VDBE tries to halt. If the VDBE -** has made changes and is in autocommit mode, then commit those -** changes. If a rollback is needed, then do the rollback. +** In the course of balancing the page and its siblings, cells may be +** inserted into or removed from the parent page (pParent). Doing so +** may cause the parent page to become overfull or underfull. If this +** happens, it is the responsibility of the caller to invoke the correct +** balancing routine to fix this problem (see the balance() routine). ** -** This routine is the only way to move the state of a VM from -** SQLITE_MAGIC_RUN to SQLITE_MAGIC_HALT. It is harmless to -** call this on a VM that is in the SQLITE_MAGIC_HALT state. +** If this routine fails for any reason, it might leave the database +** in a corrupted state. So if this routine fails, the database should +** be rolled back. ** -** Return an error code. If the commit could not complete because of -** lock contention, return SQLITE_BUSY. If SQLITE_BUSY is returned, it -** means the close did not happen and needs to be repeated. +** The third argument to this function, aOvflSpace, is a pointer to a +** buffer big enough to hold one page. If while inserting cells into the parent +** page (pParent) the parent page becomes overfull, this buffer is +** used to store the parent's overflow cells. Because this function inserts +** a maximum of four divider cells into the parent page, and the maximum +** size of a cell stored within an internal node is always less than 1/4 +** of the page-size, the aOvflSpace[] buffer is guaranteed to be large +** enough for all overflow cells. +** +** If aOvflSpace is set to a null pointer, this function returns +** SQLITE_NOMEM. */ -SQLITE_PRIVATE int sqlite3VdbeHalt(Vdbe *p){ - int rc; /* Used to store transient return codes */ - sqlite3 *db = p->db; +static int balance_nonroot( + MemPage *pParent, /* Parent page of siblings being balanced */ + int iParentIdx, /* Index of "the page" in pParent */ + u8 *aOvflSpace, /* page-size bytes of space for parent ovfl */ + int isRoot /* True if pParent is a root-page */ +){ + BtShared *pBt; /* The whole database */ + int nCell = 0; /* Number of cells in apCell[] */ + int nMaxCells = 0; /* Allocated size of apCell, szCell, aFrom. */ + int nNew = 0; /* Number of pages in apNew[] */ + int nOld; /* Number of pages in apOld[] */ + int i, j, k; /* Loop counters */ + int nxDiv; /* Next divider slot in pParent->aCell[] */ + int rc = SQLITE_OK; /* The return code */ + u16 leafCorrection; /* 4 if pPage is a leaf. 0 if not */ + int leafData; /* True if pPage is a leaf of a LEAFDATA tree */ + int usableSpace; /* Bytes in pPage beyond the header */ + int pageFlags; /* Value of pPage->aData[0] */ + int subtotal; /* Subtotal of bytes in cells on one page */ + int iSpace1 = 0; /* First unused byte of aSpace1[] */ + int iOvflSpace = 0; /* First unused byte of aOvflSpace[] */ + int szScratch; /* Size of scratch memory requested */ + MemPage *apOld[NB]; /* pPage and up to two siblings */ + MemPage *apCopy[NB]; /* Private copies of apOld[] pages */ + MemPage *apNew[NB+2]; /* pPage and up to NB siblings after balancing */ + u8 *pRight; /* Location in parent of right-sibling pointer */ + u8 *apDiv[NB-1]; /* Divider cells in pParent */ + int cntNew[NB+2]; /* Index in aCell[] of cell after i-th page */ + int szNew[NB+2]; /* Combined size of cells place on i-th page */ + u8 **apCell = 0; /* All cells begin balanced */ + u16 *szCell; /* Local size of all cells in apCell[] */ + u8 *aSpace1; /* Space for copies of dividers cells */ + Pgno pgno; /* Temp var to store a page number in */ - /* This function contains the logic that determines if a statement or - ** transaction will be committed or rolled back as a result of the - ** execution of this virtual machine. - ** - ** If any of the following errors occur: - ** - ** SQLITE_NOMEM - ** SQLITE_IOERR - ** SQLITE_FULL - ** SQLITE_INTERRUPT - ** - ** Then the internal cache might have been left in an inconsistent - ** state. We need to rollback the statement transaction, if there is - ** one, or the complete transaction if there is no statement transaction. + pBt = pParent->pBt; + assert( sqlite3_mutex_held(pBt->mutex) ); + assert( sqlite3PagerIswriteable(pParent->pDbPage) ); + +#if 0 + TRACE(("BALANCE: begin page %d child of %d\n", pPage->pgno, pParent->pgno)); +#endif + + /* At this point pParent may have at most one overflow cell. And if + ** this overflow cell is present, it must be the cell with + ** index iParentIdx. This scenario comes about when this function + ** is called (indirectly) from sqlite3BtreeDelete(). */ + assert( pParent->nOverflow==0 || pParent->nOverflow==1 ); + assert( pParent->nOverflow==0 || pParent->aiOvfl[0]==iParentIdx ); - if( p->db->mallocFailed ){ - p->rc = SQLITE_NOMEM; + if( !aOvflSpace ){ + return SQLITE_NOMEM; } - closeAllCursorsExceptActiveVtabs(p); - if( p->magic!=VDBE_MAGIC_RUN ){ - return SQLITE_OK; + + /* Find the sibling pages to balance. Also locate the cells in pParent + ** that divide the siblings. An attempt is made to find NN siblings on + ** either side of pPage. More siblings are taken from one side, however, + ** if there are fewer than NN siblings on the other side. If pParent + ** has NB or fewer children then all children of pParent are taken. + ** + ** This loop also drops the divider cells from the parent page. This + ** way, the remainder of the function does not have to deal with any + ** overflow cells in the parent page, since if any existed they will + ** have already been removed. + */ + i = pParent->nOverflow + pParent->nCell; + if( i<2 ){ + nxDiv = 0; + nOld = i+1; + }else{ + nOld = 3; + if( iParentIdx==0 ){ + nxDiv = 0; + }else if( iParentIdx==i ){ + nxDiv = i-2; + }else{ + nxDiv = iParentIdx-1; + } + i = 2; } - checkActiveVdbeCnt(db); + if( (i+nxDiv-pParent->nOverflow)==pParent->nCell ){ + pRight = &pParent->aData[pParent->hdrOffset+8]; + }else{ + pRight = findCell(pParent, i+nxDiv-pParent->nOverflow); + } + pgno = get4byte(pRight); + while( 1 ){ + rc = getAndInitPage(pBt, pgno, &apOld[i]); + if( rc ){ + memset(apOld, 0, (i+1)*sizeof(MemPage*)); + goto balance_cleanup; + } + nMaxCells += 1+apOld[i]->nCell+apOld[i]->nOverflow; + if( (i--)==0 ) break; - /* No commit or rollback needed if the program never started */ - if( p->pc>=0 ){ - int mrc; /* Primary error code from p->rc */ - int eStatementOp = 0; - int isSpecialError; /* Set to true if a 'special' error */ + if( i+nxDiv==pParent->aiOvfl[0] && pParent->nOverflow ){ + apDiv[i] = pParent->apOvfl[0]; + pgno = get4byte(apDiv[i]); + szNew[i] = cellSizePtr(pParent, apDiv[i]); + pParent->nOverflow = 0; + }else{ + apDiv[i] = findCell(pParent, i+nxDiv-pParent->nOverflow); + pgno = get4byte(apDiv[i]); + szNew[i] = cellSizePtr(pParent, apDiv[i]); - /* Lock all btrees used by the statement */ - sqlite3VdbeMutexArrayEnter(p); + /* Drop the cell from the parent page. apDiv[i] still points to + ** the cell within the parent, even though it has been dropped. + ** This is safe because dropping a cell only overwrites the first + ** four bytes of it, and this function does not need the first + ** four bytes of the divider cell. So the pointer is safe to use + ** later on. + ** + ** But not if we are in secure-delete mode. In secure-delete mode, + ** the dropCell() routine will overwrite the entire cell with zeroes. + ** In this case, temporarily copy the cell into the aOvflSpace[] + ** buffer. It will be copied out again as soon as the aSpace[] buffer + ** is allocated. */ + if( pBt->btsFlags & BTS_SECURE_DELETE ){ + int iOff; - /* Check for one of the special errors */ - mrc = p->rc & 0xff; - isSpecialError = mrc==SQLITE_NOMEM || mrc==SQLITE_IOERR - || mrc==SQLITE_INTERRUPT || mrc==SQLITE_FULL; - if( isSpecialError ){ - /* If the query was read-only, we need do no rollback at all. Otherwise, - ** proceed with the special handling. - */ - if( !p->readOnly || mrc!=SQLITE_INTERRUPT ){ - if( p->rc==SQLITE_IOERR_BLOCKED && p->usesStmtJournal ){ - eStatementOp = SAVEPOINT_ROLLBACK; - p->rc = SQLITE_BUSY; - }else if( (mrc==SQLITE_NOMEM || mrc==SQLITE_FULL) - && p->usesStmtJournal ){ - eStatementOp = SAVEPOINT_ROLLBACK; - }else{ - /* We are forced to roll back the active transaction. Before doing - ** so, abort any other statements this handle currently has active. - */ - invalidateCursorsOnModifiedBtrees(db); - sqlite3RollbackAll(db); - sqlite3CloseSavepoints(db); - db->autoCommit = 1; - } - } - } - - /* If the auto-commit flag is set and this is the only active writer - ** VM, then we do either a commit or rollback of the current transaction. - ** - ** Note: This block also runs if one of the special errors handled - ** above has occurred. - */ - if( !sqlite3VtabInSync(db) - && db->autoCommit - && db->writeVdbeCnt==(p->readOnly==0) - && (db->flags & SQLITE_CommitBusy)==0 - ){ - if( p->rc==SQLITE_OK || (p->errorAction==OE_Fail && !isSpecialError) ){ - /* The auto-commit flag is true, and the vdbe program was - ** successful or hit an 'OR FAIL' constraint. This means a commit - ** is required. - */ - rc = vdbeCommit(db, p); - if( rc==SQLITE_BUSY ){ - sqlite3BtreeMutexArrayLeave(&p->aMutex); - return SQLITE_BUSY; - }else if( rc!=SQLITE_OK ){ - p->rc = rc; - sqlite3RollbackAll(db); + iOff = SQLITE_PTR_TO_INT(apDiv[i]) - SQLITE_PTR_TO_INT(pParent->aData); + if( (iOff+szNew[i])>(int)pBt->usableSize ){ + rc = SQLITE_CORRUPT_BKPT; + memset(apOld, 0, (i+1)*sizeof(MemPage*)); + goto balance_cleanup; }else{ - sqlite3CommitInternalChanges(db); + memcpy(&aOvflSpace[iOff], apDiv[i], szNew[i]); + apDiv[i] = &aOvflSpace[apDiv[i]-pParent->aData]; } - }else{ - sqlite3RollbackAll(db); - } - db->nStatement = 0; - }else if( eStatementOp==0 ){ - if( p->rc==SQLITE_OK || p->errorAction==OE_Fail ){ - eStatementOp = SAVEPOINT_RELEASE; - }else if( p->errorAction==OE_Abort ){ - eStatementOp = SAVEPOINT_ROLLBACK; - }else{ - invalidateCursorsOnModifiedBtrees(db); - sqlite3RollbackAll(db); - sqlite3CloseSavepoints(db); - db->autoCommit = 1; - } - } - - /* If eStatementOp is non-zero, then a statement transaction needs to - ** be committed or rolled back. Call sqlite3VdbeCloseStatement() to - ** do so. If this operation returns an error, and the current statement - ** error code is SQLITE_OK or SQLITE_CONSTRAINT, then set the error - ** code to the new value. - */ - if( eStatementOp ){ - rc = sqlite3VdbeCloseStatement(p, eStatementOp); - if( rc && (p->rc==SQLITE_OK || p->rc==SQLITE_CONSTRAINT) ){ - p->rc = rc; - sqlite3DbFree(db, p->zErrMsg); - p->zErrMsg = 0; - } - } - - /* If this was an INSERT, UPDATE or DELETE and no statement transaction - ** has been rolled back, update the database connection change-counter. - */ - if( p->changeCntOn && p->pc>=0 ){ - if( eStatementOp!=SAVEPOINT_ROLLBACK ){ - sqlite3VdbeSetChanges(db, p->nChange); - }else{ - sqlite3VdbeSetChanges(db, 0); } - p->nChange = 0; - } - - /* Rollback or commit any schema changes that occurred. */ - if( p->rc!=SQLITE_OK && db->flags&SQLITE_InternChanges ){ - sqlite3ResetInternalSchema(db, 0); - db->flags = (db->flags | SQLITE_InternChanges); + dropCell(pParent, i+nxDiv-pParent->nOverflow, szNew[i], &rc); } - - /* Release the locks */ - sqlite3BtreeMutexArrayLeave(&p->aMutex); } - /* We have successfully halted and closed the VM. Record this fact. */ - if( p->pc>=0 ){ - db->activeVdbeCnt--; - if( !p->readOnly ){ - db->writeVdbeCnt--; - } - assert( db->activeVdbeCnt>=db->writeVdbeCnt ); - } - p->magic = VDBE_MAGIC_HALT; - checkActiveVdbeCnt(db); - if( p->db->mallocFailed ){ - p->rc = SQLITE_NOMEM; - } + /* Make nMaxCells a multiple of 4 in order to preserve 8-byte + ** alignment */ + nMaxCells = (nMaxCells + 3)&~3; - /* If the auto-commit flag is set to true, then any locks that were held - ** by connection db have now been released. Call sqlite3ConnectionUnlocked() - ** to invoke any required unlock-notify callbacks. + /* + ** Allocate space for memory structures */ - if( db->autoCommit ){ - sqlite3ConnectionUnlocked(db); + k = pBt->pageSize + ROUND8(sizeof(MemPage)); + szScratch = + nMaxCells*sizeof(u8*) /* apCell */ + + nMaxCells*sizeof(u16) /* szCell */ + + pBt->pageSize /* aSpace1 */ + + k*nOld; /* Page copies (apCopy) */ + apCell = sqlite3ScratchMalloc( szScratch ); + if( apCell==0 ){ + rc = SQLITE_NOMEM; + goto balance_cleanup; } + szCell = (u16*)&apCell[nMaxCells]; + aSpace1 = (u8*)&szCell[nMaxCells]; + assert( EIGHT_BYTE_ALIGNMENT(aSpace1) ); - assert( db->activeVdbeCnt>0 || db->autoCommit==0 || db->nStatement==0 ); - return SQLITE_OK; -} - - -/* -** Each VDBE holds the result of the most recent sqlite3_step() call -** in p->rc. This routine sets that result back to SQLITE_OK. -*/ -SQLITE_PRIVATE void sqlite3VdbeResetStepResult(Vdbe *p){ - p->rc = SQLITE_OK; -} + /* + ** Load pointers to all cells on sibling pages and the divider cells + ** into the local apCell[] array. Make copies of the divider cells + ** into space obtained from aSpace1[] and remove the the divider Cells + ** from pParent. + ** + ** If the siblings are on leaf pages, then the child pointers of the + ** divider cells are stripped from the cells before they are copied + ** into aSpace1[]. In this way, all cells in apCell[] are without + ** child pointers. If siblings are not leaves, then all cell in + ** apCell[] include child pointers. Either way, all cells in apCell[] + ** are alike. + ** + ** leafCorrection: 4 if pPage is a leaf. 0 if pPage is not a leaf. + ** leafData: 1 if pPage holds key+data and pParent holds only keys. + */ + leafCorrection = apOld[0]->leaf*4; + leafData = apOld[0]->hasData; + for(i=0; ipageSize + k*i]; + memcpy(pOld, apOld[i], sizeof(MemPage)); + pOld->aData = (void*)&pOld[1]; + memcpy(pOld->aData, apOld[i]->aData, pBt->pageSize); -/* -** Clean up a VDBE after execution but do not delete the VDBE just yet. -** Write any error messages into *pzErrMsg. Return the result code. -** -** After this routine is run, the VDBE should be ready to be executed -** again. -** -** To look at it another way, this routine resets the state of the -** virtual machine from VDBE_MAGIC_RUN or VDBE_MAGIC_HALT back to -** VDBE_MAGIC_INIT. -*/ -SQLITE_PRIVATE int sqlite3VdbeReset(Vdbe *p){ - sqlite3 *db; - db = p->db; + limit = pOld->nCell+pOld->nOverflow; + if( pOld->nOverflow>0 ){ + for(j=0; jaData; + u16 maskPage = pOld->maskPage; + u16 cellOffset = pOld->cellOffset; + for(j=0; jmaxLocal+23 ); + assert( iSpace1 <= (int)pBt->pageSize ); + memcpy(pTemp, apDiv[i], sz); + apCell[nCell] = pTemp+leafCorrection; + assert( leafCorrection==0 || leafCorrection==4 ); + szCell[nCell] = szCell[nCell] - leafCorrection; + if( !pOld->leaf ){ + assert( leafCorrection==0 ); + assert( pOld->hdrOffset==0 ); + /* The right pointer of the child page pOld becomes the left + ** pointer of the divider cell */ + memcpy(apCell[nCell], &pOld->aData[8], 4); + }else{ + assert( leafCorrection==4 ); + if( szCell[nCell]<4 ){ + /* Do not allow any cells smaller than 4 bytes. */ + szCell[nCell] = 4; + } + } + nCell++; + } + } - /* If the VM did not run to completion or if it encountered an - ** error, then it might not have been halted properly. So halt - ** it now. + /* + ** Figure out the number of pages needed to hold all nCell cells. + ** Store this number in "k". Also compute szNew[] which is the total + ** size of all cells on the i-th page and cntNew[] which is the index + ** in apCell[] of the cell that divides page i from page i+1. + ** cntNew[k] should equal nCell. + ** + ** Values computed by this block: + ** + ** k: The total number of sibling pages + ** szNew[i]: Spaced used on the i-th sibling page. + ** cntNew[i]: Index in apCell[] and szCell[] for the first cell to + ** the right of the i-th sibling page. + ** usableSpace: Number of bytes of space available on each sibling. + ** */ - (void)sqlite3SafetyOn(db); - sqlite3VdbeHalt(p); - (void)sqlite3SafetyOff(db); + usableSpace = pBt->usableSize - 12 + leafCorrection; + for(subtotal=k=i=0; i usableSpace ){ + szNew[k] = subtotal - szCell[i]; + cntNew[k] = i; + if( leafData ){ i--; } + subtotal = 0; + k++; + if( k>NB+1 ){ rc = SQLITE_CORRUPT_BKPT; goto balance_cleanup; } + } + } + szNew[k] = subtotal; + cntNew[k] = nCell; + k++; - /* If the VDBE has be run even partially, then transfer the error code - ** and error message from the VDBE into the main database structure. But - ** if the VDBE has just been set to run but has not actually executed any - ** instructions yet, leave the main database error information unchanged. + /* + ** The packing computed by the previous block is biased toward the siblings + ** on the left side. The left siblings are always nearly full, while the + ** right-most sibling might be nearly empty. This block of code attempts + ** to adjust the packing of siblings to get a better balance. + ** + ** This adjustment is more than an optimization. The packing above might + ** be so out of balance as to be illegal. For example, the right-most + ** sibling might be completely empty. This adjustment is not optional. */ - if( p->pc>=0 ){ - if( p->zErrMsg ){ - sqlite3BeginBenignMalloc(); - sqlite3ValueSetStr(db->pErr,-1,p->zErrMsg,SQLITE_UTF8,SQLITE_TRANSIENT); - sqlite3EndBenignMalloc(); - db->errCode = p->rc; - sqlite3DbFree(db, p->zErrMsg); - p->zErrMsg = 0; - }else if( p->rc ){ - sqlite3Error(db, p->rc, 0); - }else{ - sqlite3Error(db, SQLITE_OK, 0); + for(i=k-1; i>0; i--){ + int szRight = szNew[i]; /* Size of sibling on the right */ + int szLeft = szNew[i-1]; /* Size of sibling on the left */ + int r; /* Index of right-most cell in left sibling */ + int d; /* Index of first cell to the left of right sibling */ + + r = cntNew[i-1] - 1; + d = r + 1 - leafData; + assert( drc && p->expired ){ - /* The expired flag was set on the VDBE before the first call - ** to sqlite3_step(). For consistency (since sqlite3_step() was - ** called), set the database error in this case as well. - */ - sqlite3Error(db, p->rc, 0); - sqlite3ValueSetStr(db->pErr, -1, p->zErrMsg, SQLITE_UTF8, SQLITE_TRANSIENT); - sqlite3DbFree(db, p->zErrMsg); - p->zErrMsg = 0; + szNew[i] = szRight; + szNew[i-1] = szLeft; } - /* Reclaim all memory used by the VDBE + /* Either we found one or more cells (cntnew[0])>0) or pPage is + ** a virtual root page. A virtual root page is when the real root + ** page is page 1 and we are the only child of that page. + ** + ** UPDATE: The assert() below is not necessarily true if the database + ** file is corrupt. The corruption will be detected and reported later + ** in this procedure so there is no need to act upon it now. */ - Cleanup(p); +#if 0 + assert( cntNew[0]>0 || (pParent->pgno==1 && pParent->nCell==0) ); +#endif - /* Save profiling information from this VDBE run. + TRACE(("BALANCE: old: %d %d %d ", + apOld[0]->pgno, + nOld>=2 ? apOld[1]->pgno : 0, + nOld>=3 ? apOld[2]->pgno : 0 + )); + + /* + ** Allocate k new pages. Reuse old pages where possible. */ -#ifdef VDBE_PROFILE - { - FILE *out = fopen("vdbe_profile.out", "a"); - if( out ){ - int i; - fprintf(out, "---- "); - for(i=0; inOp; i++){ - fprintf(out, "%02x", p->aOp[i].opcode); - } - fprintf(out, "\n"); - for(i=0; inOp; i++){ - fprintf(out, "%6d %10lld %8lld ", - p->aOp[i].cnt, - p->aOp[i].cycles, - p->aOp[i].cnt>0 ? p->aOp[i].cycles/p->aOp[i].cnt : 0 - ); - sqlite3VdbePrintOp(out, i, &p->aOp[i]); + if( apOld[0]->pgno<=1 ){ + rc = SQLITE_CORRUPT_BKPT; + goto balance_cleanup; + } + pageFlags = apOld[0]->aData[0]; + for(i=0; ipDbPage); + nNew++; + if( rc ) goto balance_cleanup; + }else{ + assert( i>0 ); + rc = allocateBtreePage(pBt, &pNew, &pgno, pgno, 0); + if( rc ) goto balance_cleanup; + apNew[i] = pNew; + nNew++; + + /* Set the pointer-map entry for the new sibling page. */ + if( ISAUTOVACUUM ){ + ptrmapPut(pBt, pNew->pgno, PTRMAP_BTREE, pParent->pgno, &rc); + if( rc!=SQLITE_OK ){ + goto balance_cleanup; + } } - fclose(out); } } -#endif - p->magic = VDBE_MAGIC_INIT; - return p->rc & db->errMask; -} - -/* -** Clean up and delete a VDBE after execution. Return an integer which is -** the result code. Write any error message text into *pzErrMsg. -*/ -SQLITE_PRIVATE int sqlite3VdbeFinalize(Vdbe *p){ - int rc = SQLITE_OK; - if( p->magic==VDBE_MAGIC_RUN || p->magic==VDBE_MAGIC_HALT ){ - rc = sqlite3VdbeReset(p); - assert( (rc & p->db->errMask)==rc ); - }else if( p->magic!=VDBE_MAGIC_INIT ){ - return SQLITE_MISUSE; + + /* Free any old pages that were not reused as new pages. + */ + while( inAux; i++){ - struct AuxData *pAux = &pVdbeFunc->apAux[i]; - if( (i>31 || !(mask&(((u32)1)<pAux ){ - if( pAux->xDelete ){ - pAux->xDelete(pAux->pAux); + /* + ** Put the new pages in accending order. This helps to + ** keep entries in the disk file in order so that a scan + ** of the table is a linear scan through the file. That + ** in turn helps the operating system to deliver pages + ** from the disk more rapidly. + ** + ** An O(n^2) insertion sort algorithm is used, but since + ** n is never more than NB (a small constant), that should + ** not be a problem. + ** + ** When NB==3, this one optimization makes the database + ** about 25% faster for large insertions and deletions. + */ + for(i=0; ipgno; + int minI = i; + for(j=i+1; jpgno<(unsigned)minV ){ + minI = j; + minV = apNew[j]->pgno; } - pAux->pAux = 0; + } + if( minI>i ){ + MemPage *pT; + pT = apNew[i]; + apNew[i] = apNew[minI]; + apNew[minI] = pT; } } -} + TRACE(("new: %d(%d) %d(%d) %d(%d) %d(%d) %d(%d)\n", + apNew[0]->pgno, szNew[0], + nNew>=2 ? apNew[1]->pgno : 0, nNew>=2 ? szNew[1] : 0, + nNew>=3 ? apNew[2]->pgno : 0, nNew>=3 ? szNew[2] : 0, + nNew>=4 ? apNew[3]->pgno : 0, nNew>=4 ? szNew[3] : 0, + nNew>=5 ? apNew[4]->pgno : 0, nNew>=5 ? szNew[4] : 0)); -/* -** Delete an entire VDBE. -*/ -SQLITE_PRIVATE void sqlite3VdbeDelete(Vdbe *p){ - int i; - sqlite3 *db; + assert( sqlite3PagerIswriteable(pParent->pDbPage) ); + put4byte(pRight, apNew[nNew-1]->pgno); - if( p==0 ) return; - db = p->db; - if( p->pPrev ){ - p->pPrev->pNext = p->pNext; - }else{ - assert( db->pVdbe==p ); - db->pVdbe = p->pNext; + /* + ** Evenly distribute the data in apCell[] across the new pages. + ** Insert divider cells into pParent as necessary. + */ + j = 0; + for(i=0; inCell>0 || (nNew==1 && cntNew[0]==0) ); + assert( pNew->nOverflow==0 ); + + j = cntNew[i]; + + /* If the sibling page assembled above was not the right-most sibling, + ** insert a divider cell into the parent page. + */ + assert( ileaf ){ + memcpy(&pNew->aData[8], pCell, 4); + }else if( leafData ){ + /* If the tree is a leaf-data tree, and the siblings are leaves, + ** then there is no divider cell in apCell[]. Instead, the divider + ** cell consists of the integer key for the right-most cell of + ** the sibling-page assembled above only. + */ + CellInfo info; + j--; + btreeParseCellPtr(pNew, apCell[j], &info); + pCell = pTemp; + sz = 4 + putVarint(&pCell[4], info.nKey); + pTemp = 0; + }else{ + pCell -= 4; + /* Obscure case for non-leaf-data trees: If the cell at pCell was + ** previously stored on a leaf node, and its reported size was 4 + ** bytes, then it may actually be smaller than this + ** (see btreeParseCellPtr(), 4 bytes is the minimum size of + ** any cell). But it is important to pass the correct size to + ** insertCell(), so reparse the cell now. + ** + ** Note that this can never happen in an SQLite data file, as all + ** cells are at least 4 bytes. It only happens in b-trees used + ** to evaluate "IN (SELECT ...)" and similar clauses. + */ + if( szCell[j]==4 ){ + assert(leafCorrection==4); + sz = cellSizePtr(pParent, pCell); + } + } + iOvflSpace += sz; + assert( sz<=pBt->maxLocal+23 ); + assert( iOvflSpace <= (int)pBt->pageSize ); + insertCell(pParent, nxDiv, pCell, sz, pTemp, pNew->pgno, &rc); + if( rc!=SQLITE_OK ) goto balance_cleanup; + assert( sqlite3PagerIswriteable(pParent->pDbPage) ); + + j++; + nxDiv++; + } } - if( p->pNext ){ - p->pNext->pPrev = p->pPrev; + assert( j==nCell ); + assert( nOld>0 ); + assert( nNew>0 ); + if( (pageFlags & PTF_LEAF)==0 ){ + u8 *zChild = &apCopy[nOld-1]->aData[8]; + memcpy(&apNew[nNew-1]->aData[8], zChild, 4); } - if( p->aOp ){ - Op *pOp = p->aOp; - for(i=0; inOp; i++, pOp++){ - freeP4(db, pOp->p4type, pOp->p4.p); -#ifdef SQLITE_DEBUG - sqlite3DbFree(db, pOp->zComment); -#endif + + if( isRoot && pParent->nCell==0 && pParent->hdrOffset<=apNew[0]->nFree ){ + /* The root page of the b-tree now contains no cells. The only sibling + ** page is the right-child of the parent. Copy the contents of the + ** child page into the parent, decreasing the overall height of the + ** b-tree structure by one. This is described as the "balance-shallower" + ** sub-algorithm in some documentation. + ** + ** If this is an auto-vacuum database, the call to copyNodeContent() + ** sets all pointer-map entries corresponding to database image pages + ** for which the pointer is stored within the content being copied. + ** + ** The second assert below verifies that the child page is defragmented + ** (it must be, as it was just reconstructed using assemblePage()). This + ** is important if the parent page happens to be page 1 of the database + ** image. */ + assert( nNew==1 ); + assert( apNew[0]->nFree == + (get2byte(&apNew[0]->aData[5])-apNew[0]->cellOffset-apNew[0]->nCell*2) + ); + copyNodeContent(apNew[0], pParent, &rc); + freePage(apNew[0], &rc); + }else if( ISAUTOVACUUM ){ + /* Fix the pointer-map entries for all the cells that were shifted around. + ** There are several different types of pointer-map entries that need to + ** be dealt with by this routine. Some of these have been set already, but + ** many have not. The following is a summary: + ** + ** 1) The entries associated with new sibling pages that were not + ** siblings when this function was called. These have already + ** been set. We don't need to worry about old siblings that were + ** moved to the free-list - the freePage() code has taken care + ** of those. + ** + ** 2) The pointer-map entries associated with the first overflow + ** page in any overflow chains used by new divider cells. These + ** have also already been taken care of by the insertCell() code. + ** + ** 3) If the sibling pages are not leaves, then the child pages of + ** cells stored on the sibling pages may need to be updated. + ** + ** 4) If the sibling pages are not internal intkey nodes, then any + ** overflow pages used by these cells may need to be updated + ** (internal intkey nodes never contain pointers to overflow pages). + ** + ** 5) If the sibling pages are not leaves, then the pointer-map + ** entries for the right-child pages of each sibling may need + ** to be updated. + ** + ** Cases 1 and 2 are dealt with above by other code. The next + ** block deals with cases 3 and 4 and the one after that, case 5. Since + ** setting a pointer map entry is a relatively expensive operation, this + ** code only sets pointer map entries for child or overflow pages that have + ** actually moved between pages. */ + MemPage *pNew = apNew[0]; + MemPage *pOld = apCopy[0]; + int nOverflow = pOld->nOverflow; + int iNextOld = pOld->nCell + nOverflow; + int iOverflow = (nOverflow ? pOld->aiOvfl[0] : -1); + j = 0; /* Current 'old' sibling page */ + k = 0; /* Current 'new' sibling page */ + for(i=0; inCell + pOld->nOverflow; + if( pOld->nOverflow ){ + nOverflow = pOld->nOverflow; + iOverflow = i + !leafData + pOld->aiOvfl[0]; + } + isDivider = !leafData; + } + + assert(nOverflow>0 || iOverflowaiOvfl[0]==pOld->aiOvfl[1]-1); + assert(nOverflow<3 || pOld->aiOvfl[1]==pOld->aiOvfl[2]-1); + if( i==iOverflow ){ + isDivider = 1; + if( (--nOverflow)>0 ){ + iOverflow++; + } + } + + if( i==cntNew[k] ){ + /* Cell i is the cell immediately following the last cell on new + ** sibling page k. If the siblings are not leaf pages of an + ** intkey b-tree, then cell i is a divider cell. */ + pNew = apNew[++k]; + if( !leafData ) continue; + } + assert( jpgno!=pNew->pgno ){ + if( !leafCorrection ){ + ptrmapPut(pBt, get4byte(apCell[i]), PTRMAP_BTREE, pNew->pgno, &rc); + } + if( szCell[i]>pNew->minLocal ){ + ptrmapPutOvflPtr(pNew, apCell[i], &rc); + } + } } - } - releaseMemArray(p->aVar, p->nVar); - sqlite3DbFree(db, p->aLabel); - releaseMemArray(p->aColName, p->nResColumn*COLNAME_N); - sqlite3DbFree(db, p->aColName); - sqlite3DbFree(db, p->zSql); - p->magic = VDBE_MAGIC_DEAD; - sqlite3DbFree(db, p->aOp); - sqlite3DbFree(db, p->pFree); - sqlite3DbFree(db, p); -} -/* -** Make sure the cursor p is ready to read or write the row to which it -** was last positioned. Return an error code if an OOM fault or I/O error -** prevents us from positioning the cursor to its correct position. -** -** If a MoveTo operation is pending on the given cursor, then do that -** MoveTo now. If no move is pending, check to see if the row has been -** deleted out from under the cursor and if it has, mark the row as -** a NULL row. -** -** If the cursor is already pointing to the correct row and that row has -** not been deleted out from under the cursor, then this routine is a no-op. -*/ -SQLITE_PRIVATE int sqlite3VdbeCursorMoveto(VdbeCursor *p){ - if( p->deferredMoveto ){ - int res, rc; -#ifdef SQLITE_TEST - extern int sqlite3_search_count; -#endif - assert( p->isTable ); - rc = sqlite3BtreeMovetoUnpacked(p->pCursor, 0, p->movetoTarget, 0, &res); - if( rc ) return rc; - p->lastRowid = p->movetoTarget; - p->rowidIsValid = ALWAYS(res==0) ?1:0; - if( NEVER(res<0) ){ - rc = sqlite3BtreeNext(p->pCursor, &res); - if( rc ) return rc; + if( !leafCorrection ){ + for(i=0; iaData[8]); + ptrmapPut(pBt, key, PTRMAP_BTREE, apNew[i]->pgno, &rc); + } } -#ifdef SQLITE_TEST - sqlite3_search_count++; + +#if 0 + /* The ptrmapCheckPages() contains assert() statements that verify that + ** all pointer map pages are set correctly. This is helpful while + ** debugging. This is usually disabled because a corrupt database may + ** cause an assert() statement to fail. */ + ptrmapCheckPages(apNew, nNew); + ptrmapCheckPages(&pParent, 1); #endif - p->deferredMoveto = 0; - p->cacheStatus = CACHE_STALE; - }else if( p->pCursor ){ - int hasMoved; - int rc = sqlite3BtreeCursorHasMoved(p->pCursor, &hasMoved); - if( rc ) return rc; - if( hasMoved ){ - p->cacheStatus = CACHE_STALE; - p->nullRow = 1; - } } - return SQLITE_OK; + + assert( pParent->isInit ); + TRACE(("BALANCE: finished: old=%d new=%d cells=%d\n", + nOld, nNew, nCell)); + + /* + ** Cleanup before returning. + */ +balance_cleanup: + sqlite3ScratchFree(apCell); + for(i=0; i=12 and even (N-12)/2 BLOB -** N>=13 and odd (N-13)/2 text +** Before returning, all pointer-map entries corresponding to pages +** that the new child-page now contains pointers to are updated. The +** entry corresponding to the new right-child pointer of the root +** page is also updated. ** -** The 8 and 9 types were added in 3.3.0, file format 4. Prior versions -** of SQLite will not understand those serial types. +** If successful, *ppChild is set to contain a reference to the child +** page and SQLITE_OK is returned. In this case the caller is required +** to call releasePage() on *ppChild exactly once. If an error occurs, +** an error code is returned and *ppChild is set to 0. */ +static int balance_deeper(MemPage *pRoot, MemPage **ppChild){ + int rc; /* Return value from subprocedures */ + MemPage *pChild = 0; /* Pointer to a new child page */ + Pgno pgnoChild = 0; /* Page number of the new child page */ + BtShared *pBt = pRoot->pBt; /* The BTree */ -/* -** Return the serial-type for the value stored in pMem. -*/ -SQLITE_PRIVATE u32 sqlite3VdbeSerialType(Mem *pMem, int file_format){ - int flags = pMem->flags; - int n; + assert( pRoot->nOverflow>0 ); + assert( sqlite3_mutex_held(pBt->mutex) ); - if( flags&MEM_Null ){ - return 0; - } - if( flags&MEM_Int ){ - /* Figure out whether to use 1, 2, 4, 6 or 8 bytes. */ -# define MAX_6BYTE ((((i64)0x00008000)<<32)-1) - i64 i = pMem->u.i; - u64 u; - if( file_format>=4 && (i&1)==i ){ - return 8+(u32)i; + /* Make pRoot, the root page of the b-tree, writable. Allocate a new + ** page that will become the new right-child of pPage. Copy the contents + ** of the node stored on pRoot into the new child page. + */ + rc = sqlite3PagerWrite(pRoot->pDbPage); + if( rc==SQLITE_OK ){ + rc = allocateBtreePage(pBt,&pChild,&pgnoChild,pRoot->pgno,0); + copyNodeContent(pRoot, pChild, &rc); + if( ISAUTOVACUUM ){ + ptrmapPut(pBt, pgnoChild, PTRMAP_BTREE, pRoot->pgno, &rc); } - u = i<0 ? -i : i; - if( u<=127 ) return 1; - if( u<=32767 ) return 2; - if( u<=8388607 ) return 3; - if( u<=2147483647 ) return 4; - if( u<=MAX_6BYTE ) return 5; - return 6; - } - if( flags&MEM_Real ){ - return 7; } - assert( pMem->db->mallocFailed || flags&(MEM_Str|MEM_Blob) ); - n = pMem->n; - if( flags & MEM_Zero ){ - n += pMem->u.nZero; + if( rc ){ + *ppChild = 0; + releasePage(pChild); + return rc; } - assert( n>=0 ); - return ((n*2) + 12 + ((flags&MEM_Str)!=0)); -} + assert( sqlite3PagerIswriteable(pChild->pDbPage) ); + assert( sqlite3PagerIswriteable(pRoot->pDbPage) ); + assert( pChild->nCell==pRoot->nCell ); -/* -** Return the length of the data corresponding to the supplied serial-type. -*/ -SQLITE_PRIVATE u32 sqlite3VdbeSerialTypeLen(u32 serial_type){ - if( serial_type>=12 ){ - return (serial_type-12)/2; - }else{ - static const u8 aSize[] = { 0, 1, 2, 3, 4, 6, 8, 8, 0, 0, 0, 0 }; - return aSize[serial_type]; - } + TRACE(("BALANCE: copy root %d into %d\n", pRoot->pgno, pChild->pgno)); + + /* Copy the overflow cells from pRoot to pChild */ + memcpy(pChild->aiOvfl, pRoot->aiOvfl, + pRoot->nOverflow*sizeof(pRoot->aiOvfl[0])); + memcpy(pChild->apOvfl, pRoot->apOvfl, + pRoot->nOverflow*sizeof(pRoot->apOvfl[0])); + pChild->nOverflow = pRoot->nOverflow; + + /* Zero the contents of pRoot. Then install pChild as the right-child. */ + zeroPage(pRoot, pChild->aData[0] & ~PTF_LEAF); + put4byte(&pRoot->aData[pRoot->hdrOffset+8], pgnoChild); + + *ppChild = pChild; + return SQLITE_OK; } /* -** If we are on an architecture with mixed-endian floating -** points (ex: ARM7) then swap the lower 4 bytes with the -** upper 4 bytes. Return the result. +** The page that pCur currently points to has just been modified in +** some way. This function figures out if this modification means the +** tree needs to be balanced, and if so calls the appropriate balancing +** routine. Balancing routines are: ** -** For most architectures, this is a no-op. -** -** (later): It is reported to me that the mixed-endian problem -** on ARM7 is an issue with GCC, not with the ARM7 chip. It seems -** that early versions of GCC stored the two words of a 64-bit -** float in the wrong order. And that error has been propagated -** ever since. The blame is not necessarily with GCC, though. -** GCC might have just copying the problem from a prior compiler. -** I am also told that newer versions of GCC that follow a different -** ABI get the byte order right. -** -** Developers using SQLite on an ARM7 should compile and run their -** application using -DSQLITE_DEBUG=1 at least once. With DEBUG -** enabled, some asserts below will ensure that the byte order of -** floating point values is correct. -** -** (2007-08-30) Frank van Vugt has studied this problem closely -** and has send his findings to the SQLite developers. Frank -** writes that some Linux kernels offer floating point hardware -** emulation that uses only 32-bit mantissas instead of a full -** 48-bits as required by the IEEE standard. (This is the -** CONFIG_FPE_FASTFPE option.) On such systems, floating point -** byte swapping becomes very complicated. To avoid problems, -** the necessary byte swapping is carried out using a 64-bit integer -** rather than a 64-bit float. Frank assures us that the code here -** works for him. We, the developers, have no way to independently -** verify this, but Frank seems to know what he is talking about -** so we trust him. +** balance_quick() +** balance_deeper() +** balance_nonroot() */ -#ifdef SQLITE_MIXED_ENDIAN_64BIT_FLOAT -static u64 floatSwap(u64 in){ - union { - u64 r; - u32 i[2]; - } u; - u32 t; +static int balance(BtCursor *pCur){ + int rc = SQLITE_OK; + const int nMin = pCur->pBt->usableSize * 2 / 3; + u8 aBalanceQuickSpace[13]; + u8 *pFree = 0; - u.r = in; - t = u.i[0]; - u.i[0] = u.i[1]; - u.i[1] = t; - return u.r; -} -# define swapMixedEndianFloat(X) X = floatSwap(X) -#else -# define swapMixedEndianFloat(X) -#endif + TESTONLY( int balance_quick_called = 0 ); + TESTONLY( int balance_deeper_called = 0 ); -/* -** Write the serialized data blob for the value stored in pMem into -** buf. It is assumed that the caller has allocated sufficient space. -** Return the number of bytes written. -** -** nBuf is the amount of space left in buf[]. nBuf must always be -** large enough to hold the entire field. Except, if the field is -** a blob with a zero-filled tail, then buf[] might be just the right -** size to hold everything except for the zero-filled tail. If buf[] -** is only big enough to hold the non-zero prefix, then only write that -** prefix into buf[]. But if buf[] is large enough to hold both the -** prefix and the tail then write the prefix and set the tail to all -** zeros. -** -** Return the number of bytes actually written into buf[]. The number -** of bytes in the zero-filled tail is included in the return value only -** if those bytes were zeroed in buf[]. -*/ -SQLITE_PRIVATE u32 sqlite3VdbeSerialPut(u8 *buf, int nBuf, Mem *pMem, int file_format){ - u32 serial_type = sqlite3VdbeSerialType(pMem, file_format); - u32 len; + do { + int iPage = pCur->iPage; + MemPage *pPage = pCur->apPage[iPage]; - /* Integer and Real */ - if( serial_type<=7 && serial_type>0 ){ - u64 v; - u32 i; - if( serial_type==7 ){ - assert( sizeof(v)==sizeof(pMem->r) ); - memcpy(&v, &pMem->r, sizeof(v)); - swapMixedEndianFloat(v); + if( iPage==0 ){ + if( pPage->nOverflow ){ + /* The root page of the b-tree is overfull. In this case call the + ** balance_deeper() function to create a new child for the root-page + ** and copy the current contents of the root-page to it. The + ** next iteration of the do-loop will balance the child page. + */ + assert( (balance_deeper_called++)==0 ); + rc = balance_deeper(pPage, &pCur->apPage[1]); + if( rc==SQLITE_OK ){ + pCur->iPage = 1; + pCur->aiIdx[0] = 0; + pCur->aiIdx[1] = 0; + assert( pCur->apPage[1]->nOverflow ); + } + }else{ + break; + } + }else if( pPage->nOverflow==0 && pPage->nFree<=nMin ){ + break; }else{ - v = pMem->u.i; - } - len = i = sqlite3VdbeSerialTypeLen(serial_type); - assert( len<=(u32)nBuf ); - while( i-- ){ - buf[i] = (u8)(v&0xFF); - v >>= 8; - } - return len; - } + MemPage * const pParent = pCur->apPage[iPage-1]; + int const iIdx = pCur->aiIdx[iPage-1]; - /* String or blob */ - if( serial_type>=12 ){ - assert( pMem->n + ((pMem->flags & MEM_Zero)?pMem->u.nZero:0) - == (int)sqlite3VdbeSerialTypeLen(serial_type) ); - assert( pMem->n<=nBuf ); - len = pMem->n; - memcpy(buf, pMem->z, len); - if( pMem->flags & MEM_Zero ){ - len += pMem->u.nZero; - assert( nBuf>=0 ); - if( len > (u32)nBuf ){ - len = (u32)nBuf; + rc = sqlite3PagerWrite(pParent->pDbPage); + if( rc==SQLITE_OK ){ +#ifndef SQLITE_OMIT_QUICKBALANCE + if( pPage->hasData + && pPage->nOverflow==1 + && pPage->aiOvfl[0]==pPage->nCell + && pParent->pgno!=1 + && pParent->nCell==iIdx + ){ + /* Call balance_quick() to create a new sibling of pPage on which + ** to store the overflow cell. balance_quick() inserts a new cell + ** into pParent, which may cause pParent overflow. If this + ** happens, the next interation of the do-loop will balance pParent + ** use either balance_nonroot() or balance_deeper(). Until this + ** happens, the overflow cell is stored in the aBalanceQuickSpace[] + ** buffer. + ** + ** The purpose of the following assert() is to check that only a + ** single call to balance_quick() is made for each call to this + ** function. If this were not verified, a subtle bug involving reuse + ** of the aBalanceQuickSpace[] might sneak in. + */ + assert( (balance_quick_called++)==0 ); + rc = balance_quick(pParent, pPage, aBalanceQuickSpace); + }else +#endif + { + /* In this case, call balance_nonroot() to redistribute cells + ** between pPage and up to 2 of its sibling pages. This involves + ** modifying the contents of pParent, which may cause pParent to + ** become overfull or underfull. The next iteration of the do-loop + ** will balance the parent page to correct this. + ** + ** If the parent page becomes overfull, the overflow cell or cells + ** are stored in the pSpace buffer allocated immediately below. + ** A subsequent iteration of the do-loop will deal with this by + ** calling balance_nonroot() (balance_deeper() may be called first, + ** but it doesn't deal with overflow cells - just moves them to a + ** different page). Once this subsequent call to balance_nonroot() + ** has completed, it is safe to release the pSpace buffer used by + ** the previous call, as the overflow cell data will have been + ** copied either into the body of a database page or into the new + ** pSpace buffer passed to the latter call to balance_nonroot(). + */ + u8 *pSpace = sqlite3PageMalloc(pCur->pBt->pageSize); + rc = balance_nonroot(pParent, iIdx, pSpace, iPage==1); + if( pFree ){ + /* If pFree is not NULL, it points to the pSpace buffer used + ** by a previous call to balance_nonroot(). Its contents are + ** now stored either on real database pages or within the + ** new pSpace buffer, so it may be safely freed here. */ + sqlite3PageFree(pFree); + } + + /* The pSpace buffer will be freed after the next call to + ** balance_nonroot(), or just before this function returns, whichever + ** comes first. */ + pFree = pSpace; + } } - memset(&buf[pMem->n], 0, len-pMem->n); - } - return len; - } - /* NULL or constants 0 or 1 */ - return 0; -} + pPage->nOverflow = 0; -/* -** Deserialize the data blob pointed to by buf as serial type serial_type -** and store the result in pMem. Return the number of bytes read. -*/ -SQLITE_PRIVATE u32 sqlite3VdbeSerialGet( - const unsigned char *buf, /* Buffer to deserialize from */ - u32 serial_type, /* Serial type to deserialize */ - Mem *pMem /* Memory cell to write value into */ -){ - switch( serial_type ){ - case 10: /* Reserved for future use */ - case 11: /* Reserved for future use */ - case 0: { /* NULL */ - pMem->flags = MEM_Null; - break; - } - case 1: { /* 1-byte signed integer */ - pMem->u.i = (signed char)buf[0]; - pMem->flags = MEM_Int; - return 1; - } - case 2: { /* 2-byte signed integer */ - pMem->u.i = (((signed char)buf[0])<<8) | buf[1]; - pMem->flags = MEM_Int; - return 2; - } - case 3: { /* 3-byte signed integer */ - pMem->u.i = (((signed char)buf[0])<<16) | (buf[1]<<8) | buf[2]; - pMem->flags = MEM_Int; - return 3; - } - case 4: { /* 4-byte signed integer */ - pMem->u.i = (buf[0]<<24) | (buf[1]<<16) | (buf[2]<<8) | buf[3]; - pMem->flags = MEM_Int; - return 4; - } - case 5: { /* 6-byte signed integer */ - u64 x = (((signed char)buf[0])<<8) | buf[1]; - u32 y = (buf[2]<<24) | (buf[3]<<16) | (buf[4]<<8) | buf[5]; - x = (x<<32) | y; - pMem->u.i = *(i64*)&x; - pMem->flags = MEM_Int; - return 6; + /* The next iteration of the do-loop balances the parent page. */ + releasePage(pPage); + pCur->iPage--; } - case 6: /* 8-byte signed integer */ - case 7: { /* IEEE floating point */ - u64 x; - u32 y; -#if !defined(NDEBUG) && !defined(SQLITE_OMIT_FLOATING_POINT) - /* Verify that integers and floating point values use the same - ** byte order. Or, that if SQLITE_MIXED_ENDIAN_64BIT_FLOAT is - ** defined that 64-bit floating point values really are mixed - ** endian. - */ - static const u64 t1 = ((u64)0x3ff00000)<<32; - static const double r1 = 1.0; - u64 t2 = t1; - swapMixedEndianFloat(t2); - assert( sizeof(r1)==sizeof(t2) && memcmp(&r1, &t2, sizeof(r1))==0 ); -#endif + }while( rc==SQLITE_OK ); - x = (buf[0]<<24) | (buf[1]<<16) | (buf[2]<<8) | buf[3]; - y = (buf[4]<<24) | (buf[5]<<16) | (buf[6]<<8) | buf[7]; - x = (x<<32) | y; - if( serial_type==6 ){ - pMem->u.i = *(i64*)&x; - pMem->flags = MEM_Int; - }else{ - assert( sizeof(x)==8 && sizeof(pMem->r)==8 ); - swapMixedEndianFloat(x); - memcpy(&pMem->r, &x, sizeof(x)); - pMem->flags = sqlite3IsNaN(pMem->r) ? MEM_Null : MEM_Real; - } - return 8; - } - case 8: /* Integer 0 */ - case 9: { /* Integer 1 */ - pMem->u.i = serial_type-8; - pMem->flags = MEM_Int; - return 0; - } - default: { - u32 len = (serial_type-12)/2; - pMem->z = (char *)buf; - pMem->n = len; - pMem->xDel = 0; - if( serial_type&0x01 ){ - pMem->flags = MEM_Str | MEM_Ephem; - }else{ - pMem->flags = MEM_Blob | MEM_Ephem; - } - return len; - } + if( pFree ){ + sqlite3PageFree(pFree); } - return 0; + return rc; } /* -** Given the nKey-byte encoding of a record in pKey[], parse the -** record into a UnpackedRecord structure. Return a pointer to -** that structure. +** Insert a new record into the BTree. The key is given by (pKey,nKey) +** and the data is given by (pData,nData). The cursor is used only to +** define what table the record should be inserted into. The cursor +** is left pointing at a random location. ** -** The calling function might provide szSpace bytes of memory -** space at pSpace. This space can be used to hold the returned -** VDbeParsedRecord structure if it is large enough. If it is -** not big enough, space is obtained from sqlite3_malloc(). +** For an INTKEY table, only the nKey value of the key is used. pKey is +** ignored. For a ZERODATA table, the pData and nData are both ignored. ** -** The returned structure should be closed by a call to -** sqlite3VdbeDeleteUnpackedRecord(). -*/ -SQLITE_PRIVATE UnpackedRecord *sqlite3VdbeRecordUnpack( - KeyInfo *pKeyInfo, /* Information about the record format */ - int nKey, /* Size of the binary record */ - const void *pKey, /* The binary record */ - char *pSpace, /* Unaligned space available to hold the object */ - int szSpace /* Size of pSpace[] in bytes */ +** If the seekResult parameter is non-zero, then a successful call to +** MovetoUnpacked() to seek cursor pCur to (pKey, nKey) has already +** been performed. seekResult is the search result returned (a negative +** number if pCur points at an entry that is smaller than (pKey, nKey), or +** a positive value if pCur points at an etry that is larger than +** (pKey, nKey)). +** +** If the seekResult parameter is non-zero, then the caller guarantees that +** cursor pCur is pointing at the existing copy of a row that is to be +** overwritten. If the seekResult parameter is 0, then cursor pCur may +** point to any entry or to no entry at all and so this function has to seek +** the cursor before the new key can be inserted. +*/ +SQLITE_PRIVATE int sqlite3BtreeInsert( + BtCursor *pCur, /* Insert data into the table of this cursor */ + const void *pKey, i64 nKey, /* The key of the new record */ + const void *pData, int nData, /* The data of the new record */ + int nZero, /* Number of extra 0 bytes to append to data */ + int appendBias, /* True if this is likely an append */ + int seekResult /* Result of prior MovetoUnpacked() call */ ){ - const unsigned char *aKey = (const unsigned char *)pKey; - UnpackedRecord *p; /* The unpacked record that we will return */ - int nByte; /* Memory space needed to hold p, in bytes */ - int d; - u32 idx; - u16 u; /* Unsigned loop counter */ - u32 szHdr; - Mem *pMem; - int nOff; /* Increase pSpace by this much to 8-byte align it */ - - /* - ** We want to shift the pointer pSpace up such that it is 8-byte aligned. - ** Thus, we need to calculate a value, nOff, between 0 and 7, to shift - ** it by. If pSpace is already 8-byte aligned, nOff should be zero. - */ - nOff = (8 - (SQLITE_PTR_TO_INT(pSpace) & 7)) & 7; - pSpace += nOff; - szSpace -= nOff; - nByte = ROUND8(sizeof(UnpackedRecord)) + sizeof(Mem)*(pKeyInfo->nField+1); - if( nByte>szSpace ){ - p = sqlite3DbMallocRaw(pKeyInfo->db, nByte); - if( p==0 ) return 0; - p->flags = UNPACKED_NEED_FREE | UNPACKED_NEED_DESTROY; - }else{ - p = (UnpackedRecord*)pSpace; - p->flags = UNPACKED_NEED_DESTROY; - } - p->pKeyInfo = pKeyInfo; - p->nField = pKeyInfo->nField + 1; - p->aMem = pMem = (Mem*)&((char*)p)[ROUND8(sizeof(UnpackedRecord))]; - assert( EIGHT_BYTE_ALIGNMENT(pMem) ); - idx = getVarint32(aKey, szHdr); - d = szHdr; - u = 0; - while( idxnField ){ - u32 serial_type; + int rc; + int loc = seekResult; /* -1: before desired location +1: after */ + int szNew = 0; + int idx; + MemPage *pPage; + Btree *p = pCur->pBtree; + BtShared *pBt = p->pBt; + unsigned char *oldCell; + unsigned char *newCell = 0; - idx += getVarint32(&aKey[idx], serial_type); - if( d>=nKey && sqlite3VdbeSerialTypeLen(serial_type)>0 ) break; - pMem->enc = pKeyInfo->enc; - pMem->db = pKeyInfo->db; - pMem->flags = 0; - pMem->zMalloc = 0; - d += sqlite3VdbeSerialGet(&aKey[d], serial_type, pMem); - pMem++; - u++; + if( pCur->eState==CURSOR_FAULT ){ + assert( pCur->skipNext!=SQLITE_OK ); + return pCur->skipNext; } - assert( u<=pKeyInfo->nField + 1 ); - p->nField = u; - return (void*)p; -} -/* -** This routine destroys a UnpackedRecord object. -*/ -SQLITE_PRIVATE void sqlite3VdbeDeleteUnpackedRecord(UnpackedRecord *p){ - int i; - Mem *pMem; + assert( cursorHoldsMutex(pCur) ); + assert( pCur->wrFlag && pBt->inTransaction==TRANS_WRITE + && (pBt->btsFlags & BTS_READ_ONLY)==0 ); + assert( hasSharedCacheTableLock(p, pCur->pgnoRoot, pCur->pKeyInfo!=0, 2) ); - assert( p!=0 ); - assert( p->flags & UNPACKED_NEED_DESTROY ); - for(i=0, pMem=p->aMem; inField; i++, pMem++){ - if( pMem->zMalloc ){ - sqlite3VdbeMemRelease(pMem); - } - } - if( p->flags & UNPACKED_NEED_FREE ){ - sqlite3DbFree(p->pKeyInfo->db, p); - } -} + /* Assert that the caller has been consistent. If this cursor was opened + ** expecting an index b-tree, then the caller should be inserting blob + ** keys with no associated data. If the cursor was opened expecting an + ** intkey table, the caller should be inserting integer keys with a + ** blob of associated data. */ + assert( (pKey==0)==(pCur->pKeyInfo==0) ); -/* -** This function compares the two table rows or index records -** specified by {nKey1, pKey1} and pPKey2. It returns a negative, zero -** or positive integer if key1 is less than, equal to or -** greater than key2. The {nKey1, pKey1} key must be a blob -** created by th OP_MakeRecord opcode of the VDBE. The pPKey2 -** key must be a parsed key such as obtained from -** sqlite3VdbeParseRecord. -** -** Key1 and Key2 do not have to contain the same number of fields. -** The key with fewer fields is usually compares less than the -** longer key. However if the UNPACKED_INCRKEY flags in pPKey2 is set -** and the common prefixes are equal, then key1 is less than key2. -** Or if the UNPACKED_MATCH_PREFIX flag is set and the prefixes are -** equal, then the keys are considered to be equal and -** the parts beyond the common prefix are ignored. -** -** If the UNPACKED_IGNORE_ROWID flag is set, then the last byte of -** the header of pKey1 is ignored. It is assumed that pKey1 is -** an index key, and thus ends with a rowid value. The last byte -** of the header will therefore be the serial type of the rowid: -** one of 1, 2, 3, 4, 5, 6, 8, or 9 - the integer serial types. -** The serial type of the final rowid will always be a single byte. -** By ignoring this last byte of the header, we force the comparison -** to ignore the rowid at the end of key1. -*/ -SQLITE_PRIVATE int sqlite3VdbeRecordCompare( - int nKey1, const void *pKey1, /* Left key */ - UnpackedRecord *pPKey2 /* Right key */ -){ - int d1; /* Offset into aKey[] of next data element */ - u32 idx1; /* Offset into aKey[] of next header element */ - u32 szHdr1; /* Number of bytes in header */ - int i = 0; - int nField; - int rc = 0; - const unsigned char *aKey1 = (const unsigned char *)pKey1; - KeyInfo *pKeyInfo; - Mem mem1; + /* Save the positions of any other cursors open on this table. + ** + ** In some cases, the call to btreeMoveto() below is a no-op. For + ** example, when inserting data into a table with auto-generated integer + ** keys, the VDBE layer invokes sqlite3BtreeLast() to figure out the + ** integer key to use. It then calls this function to actually insert the + ** data into the intkey B-Tree. In this case btreeMoveto() recognizes + ** that the cursor is already where it needs to be and returns without + ** doing any work. To avoid thwarting these optimizations, it is important + ** not to clear the cursor here. + */ + rc = saveAllCursors(pBt, pCur->pgnoRoot, pCur); + if( rc ) return rc; - pKeyInfo = pPKey2->pKeyInfo; - mem1.enc = pKeyInfo->enc; - mem1.db = pKeyInfo->db; - mem1.flags = 0; - mem1.u.i = 0; /* not needed, here to silence compiler warning */ - mem1.zMalloc = 0; - - idx1 = getVarint32(aKey1, szHdr1); - d1 = szHdr1; - if( pPKey2->flags & UNPACKED_IGNORE_ROWID ){ - szHdr1--; + /* If this is an insert into a table b-tree, invalidate any incrblob + ** cursors open on the row being replaced (assuming this is a replace + ** operation - if it is not, the following is a no-op). */ + if( pCur->pKeyInfo==0 ){ + invalidateIncrblobCursors(p, nKey, 0); } - nField = pKeyInfo->nField; - while( idx1nField ){ - u32 serial_type1; - /* Read the serial types for the next element in each key. */ - idx1 += getVarint32( aKey1+idx1, serial_type1 ); - if( d1>=nKey1 && sqlite3VdbeSerialTypeLen(serial_type1)>0 ) break; + if( !loc ){ + rc = btreeMoveto(pCur, pKey, nKey, appendBias, &loc); + if( rc ) return rc; + } + assert( pCur->eState==CURSOR_VALID || (pCur->eState==CURSOR_INVALID && loc) ); - /* Extract the values to be compared. - */ - d1 += sqlite3VdbeSerialGet(&aKey1[d1], serial_type1, &mem1); + pPage = pCur->apPage[pCur->iPage]; + assert( pPage->intKey || nKey>=0 ); + assert( pPage->leaf || !pPage->intKey ); - /* Do the comparison - */ - rc = sqlite3MemCompare(&mem1, &pPKey2->aMem[i], - iaColl[i] : 0); - if( rc!=0 ){ - break; + TRACE(("INSERT: table=%d nkey=%lld ndata=%d page=%d %s\n", + pCur->pgnoRoot, nKey, nData, pPage->pgno, + loc==0 ? "overwrite" : "new entry")); + assert( pPage->isInit ); + allocateTempSpace(pBt); + newCell = pBt->pTmpSpace; + if( newCell==0 ) return SQLITE_NOMEM; + rc = fillInCell(pPage, newCell, pKey, nKey, pData, nData, nZero, &szNew); + if( rc ) goto end_insert; + assert( szNew==cellSizePtr(pPage, newCell) ); + assert( szNew <= MX_CELL_SIZE(pBt) ); + idx = pCur->aiIdx[pCur->iPage]; + if( loc==0 ){ + u16 szOld; + assert( idxnCell ); + rc = sqlite3PagerWrite(pPage->pDbPage); + if( rc ){ + goto end_insert; } - i++; + oldCell = findCell(pPage, idx); + if( !pPage->leaf ){ + memcpy(newCell, oldCell, 4); + } + szOld = cellSizePtr(pPage, oldCell); + rc = clearCell(pPage, oldCell); + dropCell(pPage, idx, szOld, &rc); + if( rc ) goto end_insert; + }else if( loc<0 && pPage->nCell>0 ){ + assert( pPage->leaf ); + idx = ++pCur->aiIdx[pCur->iPage]; + }else{ + assert( pPage->leaf ); } - if( mem1.zMalloc ) sqlite3VdbeMemRelease(&mem1); + insertCell(pPage, idx, newCell, szNew, 0, 0, &rc); + assert( rc!=SQLITE_OK || pPage->nCell>0 || pPage->nOverflow>0 ); - /* If the PREFIX_SEARCH flag is set and all fields except the final - ** rowid field were equal, then clear the PREFIX_SEARCH flag and set - ** pPKey2->rowid to the value of the rowid field in (pKey1, nKey1). - ** This is used by the OP_IsUnique opcode. + /* If no error has occured and pPage has an overflow cell, call balance() + ** to redistribute the cells within the tree. Since balance() may move + ** the cursor, zero the BtCursor.info.nSize and BtCursor.validNKey + ** variables. + ** + ** Previous versions of SQLite called moveToRoot() to move the cursor + ** back to the root page as balance() used to invalidate the contents + ** of BtCursor.apPage[] and BtCursor.aiIdx[]. Instead of doing that, + ** set the cursor state to "invalid". This makes common insert operations + ** slightly faster. + ** + ** There is a subtle but important optimization here too. When inserting + ** multiple records into an intkey b-tree using a single cursor (as can + ** happen while processing an "INSERT INTO ... SELECT" statement), it + ** is advantageous to leave the cursor pointing to the last entry in + ** the b-tree if possible. If the cursor is left pointing to the last + ** entry in the table, and the next row inserted has an integer key + ** larger than the largest existing key, it is possible to insert the + ** row without seeking the cursor. This can be a big performance boost. */ - if( (pPKey2->flags & UNPACKED_PREFIX_SEARCH) && i==(pPKey2->nField-1) ){ - assert( idx1==szHdr1 && rc ); - assert( mem1.flags & MEM_Int ); - pPKey2->flags &= ~UNPACKED_PREFIX_SEARCH; - pPKey2->rowid = mem1.u.i; - } + pCur->info.nSize = 0; + pCur->validNKey = 0; + if( rc==SQLITE_OK && pPage->nOverflow ){ + rc = balance(pCur); - if( rc==0 ){ - /* rc==0 here means that one of the keys ran out of fields and - ** all the fields up to that point were equal. If the UNPACKED_INCRKEY - ** flag is set, then break the tie by treating key2 as larger. - ** If the UPACKED_PREFIX_MATCH flag is set, then keys with common prefixes - ** are considered to be equal. Otherwise, the longer key is the - ** larger. As it happens, the pPKey2 will always be the longer - ** if there is a difference. - */ - if( pPKey2->flags & UNPACKED_INCRKEY ){ - rc = -1; - }else if( pPKey2->flags & UNPACKED_PREFIX_MATCH ){ - /* Leave rc==0 */ - }else if( idx1aSortOrder && inField - && pKeyInfo->aSortOrder[i] ){ - rc = -rc; + /* Must make sure nOverflow is reset to zero even if the balance() + ** fails. Internal data structure corruption will result otherwise. + ** Also, set the cursor state to invalid. This stops saveCursorPosition() + ** from trying to save the current position of the cursor. */ + pCur->apPage[pCur->iPage]->nOverflow = 0; + pCur->eState = CURSOR_INVALID; } + assert( pCur->apPage[pCur->iPage]->nOverflow==0 ); +end_insert: return rc; } - /* -** pCur points at an index entry created using the OP_MakeRecord opcode. -** Read the rowid (the last field in the record) and store it in *rowid. -** Return SQLITE_OK if everything works, or an error code otherwise. -** -** pCur might be pointing to text obtained from a corrupt database file. -** So the content cannot be trusted. Do appropriate checks on the content. -*/ -SQLITE_PRIVATE int sqlite3VdbeIdxRowid(sqlite3 *db, BtCursor *pCur, i64 *rowid){ - i64 nCellKey = 0; - int rc; - u32 szHdr; /* Size of the header */ - u32 typeRowid; /* Serial type of the rowid */ - u32 lenRowid; /* Size of the rowid */ - Mem m, v; +** Delete the entry that the cursor is pointing to. The cursor +** is left pointing at a arbitrary location. +*/ +SQLITE_PRIVATE int sqlite3BtreeDelete(BtCursor *pCur){ + Btree *p = pCur->pBtree; + BtShared *pBt = p->pBt; + int rc; /* Return code */ + MemPage *pPage; /* Page to delete cell from */ + unsigned char *pCell; /* Pointer to cell to delete */ + int iCellIdx; /* Index of cell to delete */ + int iCellDepth; /* Depth of node containing pCell */ - /* Get the size of the index entry. Only indices entries of less - ** than 2GiB are support - anything large must be database corruption. - ** Any corruption is detected in sqlite3BtreeParseCellPtr(), though, so - ** this code can safely assume that nCellKey is 32-bits */ - sqlite3BtreeKeySize(pCur, &nCellKey); - assert( (nCellKey & SQLITE_MAX_U32)==(u64)nCellKey ); + assert( cursorHoldsMutex(pCur) ); + assert( pBt->inTransaction==TRANS_WRITE ); + assert( (pBt->btsFlags & BTS_READ_ONLY)==0 ); + assert( pCur->wrFlag ); + assert( hasSharedCacheTableLock(p, pCur->pgnoRoot, pCur->pKeyInfo!=0, 2) ); + assert( !hasReadConflicts(p, pCur->pgnoRoot) ); - /* Read in the complete content of the index entry */ - m.flags = 0; - m.db = db; - m.zMalloc = 0; - rc = sqlite3VdbeMemFromBtree(pCur, 0, (int)nCellKey, 1, &m); - if( rc ){ - return rc; + if( NEVER(pCur->aiIdx[pCur->iPage]>=pCur->apPage[pCur->iPage]->nCell) + || NEVER(pCur->eState!=CURSOR_VALID) + ){ + return SQLITE_ERROR; /* Something has gone awry. */ } - /* The index entry must begin with a header size */ - (void)getVarint32((u8*)m.z, szHdr); - testcase( szHdr==3 ); - testcase( szHdr==m.n ); - if( unlikely(szHdr<3 || (int)szHdr>m.n) ){ - goto idx_rowid_corruption; + iCellDepth = pCur->iPage; + iCellIdx = pCur->aiIdx[iCellDepth]; + pPage = pCur->apPage[iCellDepth]; + pCell = findCell(pPage, iCellIdx); + + /* If the page containing the entry to delete is not a leaf page, move + ** the cursor to the largest entry in the tree that is smaller than + ** the entry being deleted. This cell will replace the cell being deleted + ** from the internal node. The 'previous' entry is used for this instead + ** of the 'next' entry, as the previous entry is always a part of the + ** sub-tree headed by the child page of the cell being deleted. This makes + ** balancing the tree following the delete operation easier. */ + if( !pPage->leaf ){ + int notUsed; + rc = sqlite3BtreePrevious(pCur, ¬Used); + if( rc ) return rc; } - /* The last field of the index should be an integer - the ROWID. - ** Verify that the last entry really is an integer. */ - (void)getVarint32((u8*)&m.z[szHdr-1], typeRowid); - testcase( typeRowid==1 ); - testcase( typeRowid==2 ); - testcase( typeRowid==3 ); - testcase( typeRowid==4 ); - testcase( typeRowid==5 ); - testcase( typeRowid==6 ); - testcase( typeRowid==8 ); - testcase( typeRowid==9 ); - if( unlikely(typeRowid<1 || typeRowid>9 || typeRowid==7) ){ - goto idx_rowid_corruption; + /* Save the positions of any other cursors open on this table before + ** making any modifications. Make the page containing the entry to be + ** deleted writable. Then free any overflow pages associated with the + ** entry and finally remove the cell itself from within the page. + */ + rc = saveAllCursors(pBt, pCur->pgnoRoot, pCur); + if( rc ) return rc; + + /* If this is a delete operation to remove a row from a table b-tree, + ** invalidate any incrblob cursors open on the row being deleted. */ + if( pCur->pKeyInfo==0 ){ + invalidateIncrblobCursors(p, pCur->info.nKey, 0); } - lenRowid = sqlite3VdbeSerialTypeLen(typeRowid); - testcase( m.n-lenRowid==szHdr ); - if( unlikely(m.n-lenRowidpDbPage); + if( rc ) return rc; + rc = clearCell(pPage, pCell); + dropCell(pPage, iCellIdx, cellSizePtr(pPage, pCell), &rc); + if( rc ) return rc; + + /* If the cell deleted was not located on a leaf page, then the cursor + ** is currently pointing to the largest entry in the sub-tree headed + ** by the child-page of the cell that was just deleted from an internal + ** node. The cell from the leaf node needs to be moved to the internal + ** node to replace the deleted cell. */ + if( !pPage->leaf ){ + MemPage *pLeaf = pCur->apPage[pCur->iPage]; + int nCell; + Pgno n = pCur->apPage[iCellDepth+1]->pgno; + unsigned char *pTmp; + + pCell = findCell(pLeaf, pLeaf->nCell-1); + nCell = cellSizePtr(pLeaf, pCell); + assert( MX_CELL_SIZE(pBt) >= nCell ); + + allocateTempSpace(pBt); + pTmp = pBt->pTmpSpace; + + rc = sqlite3PagerWrite(pLeaf->pDbPage); + insertCell(pPage, iCellIdx, pCell-4, nCell+4, pTmp, n, &rc); + dropCell(pLeaf, pLeaf->nCell-1, nCell, &rc); + if( rc ) return rc; } - /* Fetch the integer off the end of the index record */ - sqlite3VdbeSerialGet((u8*)&m.z[m.n-lenRowid], typeRowid, &v); - *rowid = v.u.i; - sqlite3VdbeMemRelease(&m); - return SQLITE_OK; + /* Balance the tree. If the entry deleted was located on a leaf page, + ** then the cursor still points to that page. In this case the first + ** call to balance() repairs the tree, and the if(...) condition is + ** never true. + ** + ** Otherwise, if the entry deleted was on an internal node page, then + ** pCur is pointing to the leaf page from which a cell was removed to + ** replace the cell deleted from the internal node. This is slightly + ** tricky as the leaf node may be underfull, and the internal node may + ** be either under or overfull. In this case run the balancing algorithm + ** on the leaf node first. If the balance proceeds far enough up the + ** tree that we can be sure that any problem in the internal node has + ** been corrected, so be it. Otherwise, after balancing the leaf node, + ** walk the cursor up the tree to the internal node and balance it as + ** well. */ + rc = balance(pCur); + if( rc==SQLITE_OK && pCur->iPage>iCellDepth ){ + while( pCur->iPage>iCellDepth ){ + releasePage(pCur->apPage[pCur->iPage--]); + } + rc = balance(pCur); + } - /* Jump here if database corruption is detected after m has been - ** allocated. Free the m object and return SQLITE_CORRUPT. */ -idx_rowid_corruption: - testcase( m.zMalloc!=0 ); - sqlite3VdbeMemRelease(&m); - return SQLITE_CORRUPT_BKPT; + if( rc==SQLITE_OK ){ + moveToRoot(pCur); + } + return rc; } /* -** Compare the key of the index entry that cursor pC is point to against -** the key string in pKey (of length nKey). Write into *pRes a number -** that is negative, zero, or positive if pC is less than, equal to, -** or greater than pKey. Return SQLITE_OK on success. +** Create a new BTree table. Write into *piTable the page +** number for the root page of the new table. ** -** pKey is either created without a rowid or is truncated so that it -** omits the rowid at the end. The rowid at the end of the index entry -** is ignored as well. Hence, this routine only compares the prefixes -** of the keys prior to the final rowid, not the entire key. +** The type of type is determined by the flags parameter. Only the +** following values of flags are currently in use. Other values for +** flags might not work: ** -** pUnpacked may be an unpacked version of pKey,nKey. If pUnpacked is -** supplied it is used in place of pKey,nKey. +** BTREE_INTKEY|BTREE_LEAFDATA Used for SQL tables with rowid keys +** BTREE_ZERODATA Used for SQL indices */ -SQLITE_PRIVATE int sqlite3VdbeIdxKeyCompare( - VdbeCursor *pC, /* The cursor to compare against */ - UnpackedRecord *pUnpacked, /* Unpacked version of pKey and nKey */ - int *res /* Write the comparison result here */ -){ - i64 nCellKey = 0; +static int btreeCreateTable(Btree *p, int *piTable, int createTabFlags){ + BtShared *pBt = p->pBt; + MemPage *pRoot; + Pgno pgnoRoot; int rc; - BtCursor *pCur = pC->pCursor; - Mem m; + int ptfFlags; /* Page-type flage for the root page of new table */ - sqlite3BtreeKeySize(pCur, &nCellKey); - if( nCellKey<=0 || nCellKey>0x7fffffff ){ - *res = 0; - return SQLITE_OK; - } - m.db = 0; - m.flags = 0; - m.zMalloc = 0; - rc = sqlite3VdbeMemFromBtree(pC->pCursor, 0, (int)nCellKey, 1, &m); + assert( sqlite3BtreeHoldsMutex(p) ); + assert( pBt->inTransaction==TRANS_WRITE ); + assert( (pBt->btsFlags & BTS_READ_ONLY)==0 ); + +#ifdef SQLITE_OMIT_AUTOVACUUM + rc = allocateBtreePage(pBt, &pRoot, &pgnoRoot, 1, 0); if( rc ){ return rc; } - assert( pUnpacked->flags & UNPACKED_IGNORE_ROWID ); - *res = sqlite3VdbeRecordCompare(m.n, m.z, pUnpacked); - sqlite3VdbeMemRelease(&m); +#else + if( pBt->autoVacuum ){ + Pgno pgnoMove; /* Move a page here to make room for the root-page */ + MemPage *pPageMove; /* The page to move to. */ + + /* Creating a new table may probably require moving an existing database + ** to make room for the new tables root page. In case this page turns + ** out to be an overflow page, delete all overflow page-map caches + ** held by open cursors. + */ + invalidateAllOverflowCache(pBt); + + /* Read the value of meta[3] from the database to determine where the + ** root page of the new table should go. meta[3] is the largest root-page + ** created so far, so the new root-page is (meta[3]+1). + */ + sqlite3BtreeGetMeta(p, BTREE_LARGEST_ROOT_PAGE, &pgnoRoot); + pgnoRoot++; + + /* The new root-page may not be allocated on a pointer-map page, or the + ** PENDING_BYTE page. + */ + while( pgnoRoot==PTRMAP_PAGENO(pBt, pgnoRoot) || + pgnoRoot==PENDING_BYTE_PAGE(pBt) ){ + pgnoRoot++; + } + assert( pgnoRoot>=3 ); + + /* Allocate a page. The page that currently resides at pgnoRoot will + ** be moved to the allocated page (unless the allocated page happens + ** to reside at pgnoRoot). + */ + rc = allocateBtreePage(pBt, &pPageMove, &pgnoMove, pgnoRoot, 1); + if( rc!=SQLITE_OK ){ + return rc; + } + + if( pgnoMove!=pgnoRoot ){ + /* pgnoRoot is the page that will be used for the root-page of + ** the new table (assuming an error did not occur). But we were + ** allocated pgnoMove. If required (i.e. if it was not allocated + ** by extending the file), the current page at position pgnoMove + ** is already journaled. + */ + u8 eType = 0; + Pgno iPtrPage = 0; + + releasePage(pPageMove); + + /* Move the page currently at pgnoRoot to pgnoMove. */ + rc = btreeGetPage(pBt, pgnoRoot, &pRoot, 0); + if( rc!=SQLITE_OK ){ + return rc; + } + rc = ptrmapGet(pBt, pgnoRoot, &eType, &iPtrPage); + if( eType==PTRMAP_ROOTPAGE || eType==PTRMAP_FREEPAGE ){ + rc = SQLITE_CORRUPT_BKPT; + } + if( rc!=SQLITE_OK ){ + releasePage(pRoot); + return rc; + } + assert( eType!=PTRMAP_ROOTPAGE ); + assert( eType!=PTRMAP_FREEPAGE ); + rc = relocatePage(pBt, pRoot, eType, iPtrPage, pgnoMove, 0); + releasePage(pRoot); + + /* Obtain the page at pgnoRoot */ + if( rc!=SQLITE_OK ){ + return rc; + } + rc = btreeGetPage(pBt, pgnoRoot, &pRoot, 0); + if( rc!=SQLITE_OK ){ + return rc; + } + rc = sqlite3PagerWrite(pRoot->pDbPage); + if( rc!=SQLITE_OK ){ + releasePage(pRoot); + return rc; + } + }else{ + pRoot = pPageMove; + } + + /* Update the pointer-map and meta-data with the new root-page number. */ + ptrmapPut(pBt, pgnoRoot, PTRMAP_ROOTPAGE, 0, &rc); + if( rc ){ + releasePage(pRoot); + return rc; + } + + /* When the new root page was allocated, page 1 was made writable in + ** order either to increase the database filesize, or to decrement the + ** freelist count. Hence, the sqlite3BtreeUpdateMeta() call cannot fail. + */ + assert( sqlite3PagerIswriteable(pBt->pPage1->pDbPage) ); + rc = sqlite3BtreeUpdateMeta(p, 4, pgnoRoot); + if( NEVER(rc) ){ + releasePage(pRoot); + return rc; + } + + }else{ + rc = allocateBtreePage(pBt, &pRoot, &pgnoRoot, 1, 0); + if( rc ) return rc; + } +#endif + assert( sqlite3PagerIswriteable(pRoot->pDbPage) ); + if( createTabFlags & BTREE_INTKEY ){ + ptfFlags = PTF_INTKEY | PTF_LEAFDATA | PTF_LEAF; + }else{ + ptfFlags = PTF_ZERODATA | PTF_LEAF; + } + zeroPage(pRoot, ptfFlags); + sqlite3PagerUnref(pRoot->pDbPage); + assert( (pBt->openFlags & BTREE_SINGLE)==0 || pgnoRoot==2 ); + *piTable = (int)pgnoRoot; return SQLITE_OK; } - -/* -** This routine sets the value to be returned by subsequent calls to -** sqlite3_changes() on the database handle 'db'. -*/ -SQLITE_PRIVATE void sqlite3VdbeSetChanges(sqlite3 *db, int nChange){ - assert( sqlite3_mutex_held(db->mutex) ); - db->nChange = nChange; - db->nTotalChange += nChange; +SQLITE_PRIVATE int sqlite3BtreeCreateTable(Btree *p, int *piTable, int flags){ + int rc; + sqlite3BtreeEnter(p); + rc = btreeCreateTable(p, piTable, flags); + sqlite3BtreeLeave(p); + return rc; } /* -** Set a flag in the vdbe to update the change counter when it is finalised -** or reset. +** Erase the given database page and all its children. Return +** the page to the freelist. */ -SQLITE_PRIVATE void sqlite3VdbeCountChanges(Vdbe *v){ - v->changeCntOn = 1; -} +static int clearDatabasePage( + BtShared *pBt, /* The BTree that contains the table */ + Pgno pgno, /* Page number to clear */ + int freePageFlag, /* Deallocate page if true */ + int *pnChange /* Add number of Cells freed to this counter */ +){ + MemPage *pPage; + int rc; + unsigned char *pCell; + int i; -/* -** Mark every prepared statement associated with a database connection -** as expired. -** -** An expired statement means that recompilation of the statement is -** recommend. Statements expire when things happen that make their -** programs obsolete. Removing user-defined functions or collating -** sequences, or changing an authorization function are the types of -** things that make prepared statements obsolete. -*/ -SQLITE_PRIVATE void sqlite3ExpirePreparedStatements(sqlite3 *db){ - Vdbe *p; - for(p = db->pVdbe; p; p=p->pNext){ - p->expired = 1; + assert( sqlite3_mutex_held(pBt->mutex) ); + if( pgno>btreePagecount(pBt) ){ + return SQLITE_CORRUPT_BKPT; } -} -/* -** Return the database associated with the Vdbe. -*/ -SQLITE_PRIVATE sqlite3 *sqlite3VdbeDb(Vdbe *v){ - return v->db; + rc = getAndInitPage(pBt, pgno, &pPage); + if( rc ) return rc; + for(i=0; inCell; i++){ + pCell = findCell(pPage, i); + if( !pPage->leaf ){ + rc = clearDatabasePage(pBt, get4byte(pCell), 1, pnChange); + if( rc ) goto cleardatabasepage_out; + } + rc = clearCell(pPage, pCell); + if( rc ) goto cleardatabasepage_out; + } + if( !pPage->leaf ){ + rc = clearDatabasePage(pBt, get4byte(&pPage->aData[8]), 1, pnChange); + if( rc ) goto cleardatabasepage_out; + }else if( pnChange ){ + assert( pPage->intKey ); + *pnChange += pPage->nCell; + } + if( freePageFlag ){ + freePage(pPage, &rc); + }else if( (rc = sqlite3PagerWrite(pPage->pDbPage))==0 ){ + zeroPage(pPage, pPage->aData[0] | PTF_LEAF); + } + +cleardatabasepage_out: + releasePage(pPage); + return rc; } -/************** End of vdbeaux.c *********************************************/ -/************** Begin file vdbeapi.c *****************************************/ /* -** 2004 May 26 -** -** The author disclaims copyright to this source code. In place of -** a legal notice, here is a blessing: -** -** May you do good and not evil. -** May you find forgiveness for yourself and forgive others. -** May you share freely, never taking more than you give. -** -************************************************************************* +** Delete all information from a single table in the database. iTable is +** the page number of the root of the table. After this routine returns, +** the root page is empty, but still exists. ** -** This file contains code use to implement APIs that are part of the -** VDBE. +** This routine will fail with SQLITE_LOCKED if there are any open +** read cursors on the table. Open write cursors are moved to the +** root of the table. ** -** $Id: vdbeapi.c,v 1.167 2009/06/25 01:47:12 drh Exp $ +** If pnChange is not NULL, then table iTable must be an intkey table. The +** integer value pointed to by pnChange is incremented by the number of +** entries in the table. */ +SQLITE_PRIVATE int sqlite3BtreeClearTable(Btree *p, int iTable, int *pnChange){ + int rc; + BtShared *pBt = p->pBt; + sqlite3BtreeEnter(p); + assert( p->inTrans==TRANS_WRITE ); -#ifndef SQLITE_OMIT_DEPRECATED -/* -** Return TRUE (non-zero) of the statement supplied as an argument needs -** to be recompiled. A statement needs to be recompiled whenever the -** execution environment changes in a way that would alter the program -** that sqlite3_prepare() generates. For example, if new functions or -** collating sequences are registered or if an authorizer function is -** added or changed. -*/ -SQLITE_API int sqlite3_expired(sqlite3_stmt *pStmt){ - Vdbe *p = (Vdbe*)pStmt; - return p==0 || p->expired; -} -#endif + rc = saveAllCursors(pBt, (Pgno)iTable, 0); -/* -** The following routine destroys a virtual machine that is created by -** the sqlite3_compile() routine. The integer returned is an SQLITE_ -** success/failure code that describes the result of executing the virtual -** machine. -** -** This routine sets the error code and string returned by -** sqlite3_errcode(), sqlite3_errmsg() and sqlite3_errmsg16(). -*/ -SQLITE_API int sqlite3_finalize(sqlite3_stmt *pStmt){ - int rc; - if( pStmt==0 ){ - rc = SQLITE_OK; - }else{ - Vdbe *v = (Vdbe*)pStmt; - sqlite3 *db = v->db; -#if SQLITE_THREADSAFE - sqlite3_mutex *mutex = v->db->mutex; -#endif - sqlite3_mutex_enter(mutex); - rc = sqlite3VdbeFinalize(v); - rc = sqlite3ApiExit(db, rc); - sqlite3_mutex_leave(mutex); + if( SQLITE_OK==rc ){ + /* Invalidate all incrblob cursors open on table iTable (assuming iTable + ** is the root of a table b-tree - if it is not, the following call is + ** a no-op). */ + invalidateIncrblobCursors(p, 0, 1); + rc = clearDatabasePage(pBt, (Pgno)iTable, 0, pnChange); } + sqlite3BtreeLeave(p); return rc; } /* -** Terminate the current execution of an SQL statement and reset it -** back to its starting state so that it can be reused. A success code from -** the prior execution is returned. +** Erase all information in a table and add the root of the table to +** the freelist. Except, the root of the principle table (the one on +** page 1) is never added to the freelist. ** -** This routine sets the error code and string returned by -** sqlite3_errcode(), sqlite3_errmsg() and sqlite3_errmsg16(). +** This routine will fail with SQLITE_LOCKED if there are any open +** cursors on the table. +** +** If AUTOVACUUM is enabled and the page at iTable is not the last +** root page in the database file, then the last root page +** in the database file is moved into the slot formerly occupied by +** iTable and that last slot formerly occupied by the last root page +** is added to the freelist instead of iTable. In this say, all +** root pages are kept at the beginning of the database file, which +** is necessary for AUTOVACUUM to work right. *piMoved is set to the +** page number that used to be the last root page in the file before +** the move. If no page gets moved, *piMoved is set to 0. +** The last root page is recorded in meta[3] and the value of +** meta[3] is updated by this procedure. */ -SQLITE_API int sqlite3_reset(sqlite3_stmt *pStmt){ +static int btreeDropTable(Btree *p, Pgno iTable, int *piMoved){ int rc; - if( pStmt==0 ){ - rc = SQLITE_OK; - }else{ - Vdbe *v = (Vdbe*)pStmt; - sqlite3_mutex_enter(v->db->mutex); - rc = sqlite3VdbeReset(v); - sqlite3VdbeMakeReady(v, -1, 0, 0, 0); - assert( (rc & (v->db->errMask))==rc ); - rc = sqlite3ApiExit(v->db, rc); - sqlite3_mutex_leave(v->db->mutex); + MemPage *pPage = 0; + BtShared *pBt = p->pBt; + + assert( sqlite3BtreeHoldsMutex(p) ); + assert( p->inTrans==TRANS_WRITE ); + + /* It is illegal to drop a table if any cursors are open on the + ** database. This is because in auto-vacuum mode the backend may + ** need to move another root-page to fill a gap left by the deleted + ** root page. If an open cursor was using this page a problem would + ** occur. + ** + ** This error is caught long before control reaches this point. + */ + if( NEVER(pBt->pCursor) ){ + sqlite3ConnectionBlocked(p->db, pBt->pCursor->pBtree->db); + return SQLITE_LOCKED_SHAREDCACHE; } - return rc; -} -/* -** Set all the parameters in the compiled SQL statement to NULL. -*/ -SQLITE_API int sqlite3_clear_bindings(sqlite3_stmt *pStmt){ - int i; - int rc = SQLITE_OK; - Vdbe *p = (Vdbe*)pStmt; -#if SQLITE_THREADSAFE - sqlite3_mutex *mutex = ((Vdbe*)pStmt)->db->mutex; -#endif - sqlite3_mutex_enter(mutex); - for(i=0; inVar; i++){ - sqlite3VdbeMemRelease(&p->aVar[i]); - p->aVar[i].flags = MEM_Null; + rc = btreeGetPage(pBt, (Pgno)iTable, &pPage, 0); + if( rc ) return rc; + rc = sqlite3BtreeClearTable(p, iTable, 0); + if( rc ){ + releasePage(pPage); + return rc; } - sqlite3_mutex_leave(mutex); - return rc; -} + *piMoved = 0; -/**************************** sqlite3_value_ ******************************* -** The following routines extract information from a Mem or sqlite3_value -** structure. -*/ -SQLITE_API const void *sqlite3_value_blob(sqlite3_value *pVal){ - Mem *p = (Mem*)pVal; - if( p->flags & (MEM_Blob|MEM_Str) ){ - sqlite3VdbeMemExpandBlob(p); - p->flags &= ~MEM_Str; - p->flags |= MEM_Blob; - return p->z; - }else{ - return sqlite3_value_text(pVal); - } -} -SQLITE_API int sqlite3_value_bytes(sqlite3_value *pVal){ - return sqlite3ValueBytes(pVal, SQLITE_UTF8); -} -SQLITE_API int sqlite3_value_bytes16(sqlite3_value *pVal){ - return sqlite3ValueBytes(pVal, SQLITE_UTF16NATIVE); -} -SQLITE_API double sqlite3_value_double(sqlite3_value *pVal){ - return sqlite3VdbeRealValue((Mem*)pVal); -} -SQLITE_API int sqlite3_value_int(sqlite3_value *pVal){ - return (int)sqlite3VdbeIntValue((Mem*)pVal); -} -SQLITE_API sqlite_int64 sqlite3_value_int64(sqlite3_value *pVal){ - return sqlite3VdbeIntValue((Mem*)pVal); -} -SQLITE_API const unsigned char *sqlite3_value_text(sqlite3_value *pVal){ - return (const unsigned char *)sqlite3ValueText(pVal, SQLITE_UTF8); -} -#ifndef SQLITE_OMIT_UTF16 -SQLITE_API const void *sqlite3_value_text16(sqlite3_value* pVal){ - return sqlite3ValueText(pVal, SQLITE_UTF16NATIVE); -} -SQLITE_API const void *sqlite3_value_text16be(sqlite3_value *pVal){ - return sqlite3ValueText(pVal, SQLITE_UTF16BE); -} -SQLITE_API const void *sqlite3_value_text16le(sqlite3_value *pVal){ - return sqlite3ValueText(pVal, SQLITE_UTF16LE); -} -#endif /* SQLITE_OMIT_UTF16 */ -SQLITE_API int sqlite3_value_type(sqlite3_value* pVal){ - return pVal->type; -} + if( iTable>1 ){ +#ifdef SQLITE_OMIT_AUTOVACUUM + freePage(pPage, &rc); + releasePage(pPage); +#else + if( pBt->autoVacuum ){ + Pgno maxRootPgno; + sqlite3BtreeGetMeta(p, BTREE_LARGEST_ROOT_PAGE, &maxRootPgno); -/**************************** sqlite3_result_ ******************************* -** The following routines are used by user-defined functions to specify -** the function result. -** -** The setStrOrError() funtion calls sqlite3VdbeMemSetStr() to store the -** result as a string or blob but if the string or blob is too large, it -** then sets the error code to SQLITE_TOOBIG -*/ -static void setResultStrOrError( - sqlite3_context *pCtx, /* Function context */ - const char *z, /* String pointer */ - int n, /* Bytes in string, or negative */ - u8 enc, /* Encoding of z. 0 for BLOBs */ - void (*xDel)(void*) /* Destructor function */ -){ - if( sqlite3VdbeMemSetStr(&pCtx->s, z, n, enc, xDel)==SQLITE_TOOBIG ){ - sqlite3_result_error_toobig(pCtx); - } -} -SQLITE_API void sqlite3_result_blob( - sqlite3_context *pCtx, - const void *z, - int n, - void (*xDel)(void *) -){ - assert( n>=0 ); - assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); - setResultStrOrError(pCtx, z, n, 0, xDel); -} -SQLITE_API void sqlite3_result_double(sqlite3_context *pCtx, double rVal){ - assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); - sqlite3VdbeMemSetDouble(&pCtx->s, rVal); -} -SQLITE_API void sqlite3_result_error(sqlite3_context *pCtx, const char *z, int n){ - assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); - pCtx->isError = SQLITE_ERROR; - sqlite3VdbeMemSetStr(&pCtx->s, z, n, SQLITE_UTF8, SQLITE_TRANSIENT); -} -#ifndef SQLITE_OMIT_UTF16 -SQLITE_API void sqlite3_result_error16(sqlite3_context *pCtx, const void *z, int n){ - assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); - pCtx->isError = SQLITE_ERROR; - sqlite3VdbeMemSetStr(&pCtx->s, z, n, SQLITE_UTF16NATIVE, SQLITE_TRANSIENT); -} + if( iTable==maxRootPgno ){ + /* If the table being dropped is the table with the largest root-page + ** number in the database, put the root page on the free list. + */ + freePage(pPage, &rc); + releasePage(pPage); + if( rc!=SQLITE_OK ){ + return rc; + } + }else{ + /* The table being dropped does not have the largest root-page + ** number in the database. So move the page that does into the + ** gap left by the deleted root-page. + */ + MemPage *pMove; + releasePage(pPage); + rc = btreeGetPage(pBt, maxRootPgno, &pMove, 0); + if( rc!=SQLITE_OK ){ + return rc; + } + rc = relocatePage(pBt, pMove, PTRMAP_ROOTPAGE, 0, iTable, 0); + releasePage(pMove); + if( rc!=SQLITE_OK ){ + return rc; + } + pMove = 0; + rc = btreeGetPage(pBt, maxRootPgno, &pMove, 0); + freePage(pMove, &rc); + releasePage(pMove); + if( rc!=SQLITE_OK ){ + return rc; + } + *piMoved = maxRootPgno; + } + + /* Set the new 'max-root-page' value in the database header. This + ** is the old value less one, less one more if that happens to + ** be a root-page number, less one again if that is the + ** PENDING_BYTE_PAGE. + */ + maxRootPgno--; + while( maxRootPgno==PENDING_BYTE_PAGE(pBt) + || PTRMAP_ISPAGE(pBt, maxRootPgno) ){ + maxRootPgno--; + } + assert( maxRootPgno!=PENDING_BYTE_PAGE(pBt) ); + + rc = sqlite3BtreeUpdateMeta(p, 4, maxRootPgno); + }else{ + freePage(pPage, &rc); + releasePage(pPage); + } #endif -SQLITE_API void sqlite3_result_int(sqlite3_context *pCtx, int iVal){ - assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); - sqlite3VdbeMemSetInt64(&pCtx->s, (i64)iVal); -} -SQLITE_API void sqlite3_result_int64(sqlite3_context *pCtx, i64 iVal){ - assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); - sqlite3VdbeMemSetInt64(&pCtx->s, iVal); -} -SQLITE_API void sqlite3_result_null(sqlite3_context *pCtx){ - assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); - sqlite3VdbeMemSetNull(&pCtx->s); -} -SQLITE_API void sqlite3_result_text( - sqlite3_context *pCtx, - const char *z, - int n, - void (*xDel)(void *) -){ - assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); - setResultStrOrError(pCtx, z, n, SQLITE_UTF8, xDel); -} -#ifndef SQLITE_OMIT_UTF16 -SQLITE_API void sqlite3_result_text16( - sqlite3_context *pCtx, - const void *z, - int n, - void (*xDel)(void *) -){ - assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); - setResultStrOrError(pCtx, z, n, SQLITE_UTF16NATIVE, xDel); -} -SQLITE_API void sqlite3_result_text16be( - sqlite3_context *pCtx, - const void *z, - int n, - void (*xDel)(void *) -){ - assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); - setResultStrOrError(pCtx, z, n, SQLITE_UTF16BE, xDel); -} -SQLITE_API void sqlite3_result_text16le( - sqlite3_context *pCtx, - const void *z, - int n, - void (*xDel)(void *) -){ - assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); - setResultStrOrError(pCtx, z, n, SQLITE_UTF16LE, xDel); -} -#endif /* SQLITE_OMIT_UTF16 */ -SQLITE_API void sqlite3_result_value(sqlite3_context *pCtx, sqlite3_value *pValue){ - assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); - sqlite3VdbeMemCopy(&pCtx->s, pValue); -} -SQLITE_API void sqlite3_result_zeroblob(sqlite3_context *pCtx, int n){ - assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); - sqlite3VdbeMemSetZeroBlob(&pCtx->s, n); -} -SQLITE_API void sqlite3_result_error_code(sqlite3_context *pCtx, int errCode){ - pCtx->isError = errCode; - if( pCtx->s.flags & MEM_Null ){ - sqlite3VdbeMemSetStr(&pCtx->s, sqlite3ErrStr(errCode), -1, - SQLITE_UTF8, SQLITE_STATIC); + }else{ + /* If sqlite3BtreeDropTable was called on page 1. + ** This really never should happen except in a corrupt + ** database. + */ + zeroPage(pPage, PTF_INTKEY|PTF_LEAF ); + releasePage(pPage); } + return rc; } - -/* Force an SQLITE_TOOBIG error. */ -SQLITE_API void sqlite3_result_error_toobig(sqlite3_context *pCtx){ - assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); - pCtx->isError = SQLITE_TOOBIG; - sqlite3VdbeMemSetStr(&pCtx->s, "string or blob too big", -1, - SQLITE_UTF8, SQLITE_STATIC); +SQLITE_PRIVATE int sqlite3BtreeDropTable(Btree *p, int iTable, int *piMoved){ + int rc; + sqlite3BtreeEnter(p); + rc = btreeDropTable(p, iTable, piMoved); + sqlite3BtreeLeave(p); + return rc; } -/* An SQLITE_NOMEM error. */ -SQLITE_API void sqlite3_result_error_nomem(sqlite3_context *pCtx){ - assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); - sqlite3VdbeMemSetNull(&pCtx->s); - pCtx->isError = SQLITE_NOMEM; - pCtx->s.db->mallocFailed = 1; -} /* -** Execute the statement pStmt, either until a row of data is ready, the -** statement is completely executed or an error occurs. +** This function may only be called if the b-tree connection already +** has a read or write transaction open on the database. ** -** This routine implements the bulk of the logic behind the sqlite_step() -** API. The only thing omitted is the automatic recompile if a -** schema change has occurred. That detail is handled by the -** outer sqlite3_step() wrapper procedure. +** Read the meta-information out of a database file. Meta[0] +** is the number of free pages currently in the database. Meta[1] +** through meta[15] are available for use by higher layers. Meta[0] +** is read-only, the others are read/write. +** +** The schema layer numbers meta values differently. At the schema +** layer (and the SetCookie and ReadCookie opcodes) the number of +** free pages is not visible. So Cookie[0] is the same as Meta[1]. */ -static int sqlite3Step(Vdbe *p){ - sqlite3 *db; - int rc; +SQLITE_PRIVATE void sqlite3BtreeGetMeta(Btree *p, int idx, u32 *pMeta){ + BtShared *pBt = p->pBt; - assert(p); - if( p->magic!=VDBE_MAGIC_RUN ){ - return SQLITE_MISUSE; - } + sqlite3BtreeEnter(p); + assert( p->inTrans>TRANS_NONE ); + assert( SQLITE_OK==querySharedCacheTableLock(p, MASTER_ROOT, READ_LOCK) ); + assert( pBt->pPage1 ); + assert( idx>=0 && idx<=15 ); - /* Assert that malloc() has not failed */ - db = p->db; - if( db->mallocFailed ){ - return SQLITE_NOMEM; - } + *pMeta = get4byte(&pBt->pPage1->aData[36 + idx*4]); - if( p->pc<=0 && p->expired ){ - if( ALWAYS(p->rc==SQLITE_OK) ){ - p->rc = SQLITE_SCHEMA; - } - rc = SQLITE_ERROR; - goto end_of_step; - } - if( sqlite3SafetyOn(db) ){ - p->rc = SQLITE_MISUSE; - return SQLITE_MISUSE; + /* If auto-vacuum is disabled in this build and this is an auto-vacuum + ** database, mark the database as read-only. */ +#ifdef SQLITE_OMIT_AUTOVACUUM + if( idx==BTREE_LARGEST_ROOT_PAGE && *pMeta>0 ){ + pBt->btsFlags |= BTS_READ_ONLY; } - if( p->pc<0 ){ - /* If there are no other statements currently running, then - ** reset the interrupt flag. This prevents a call to sqlite3_interrupt - ** from interrupting a statement that has not yet started. - */ - if( db->activeVdbeCnt==0 ){ - db->u1.isInterrupted = 0; - } +#endif -#ifndef SQLITE_OMIT_TRACE - if( db->xProfile && !db->init.busy ){ - double rNow; - sqlite3OsCurrentTime(db->pVfs, &rNow); - p->startTime = (u64)((rNow - (int)rNow)*3600.0*24.0*1000000000.0); + sqlite3BtreeLeave(p); +} + +/* +** Write meta-information back into the database. Meta[0] is +** read-only and may not be written. +*/ +SQLITE_PRIVATE int sqlite3BtreeUpdateMeta(Btree *p, int idx, u32 iMeta){ + BtShared *pBt = p->pBt; + unsigned char *pP1; + int rc; + assert( idx>=1 && idx<=15 ); + sqlite3BtreeEnter(p); + assert( p->inTrans==TRANS_WRITE ); + assert( pBt->pPage1!=0 ); + pP1 = pBt->pPage1->aData; + rc = sqlite3PagerWrite(pBt->pPage1->pDbPage); + if( rc==SQLITE_OK ){ + put4byte(&pP1[36 + idx*4], iMeta); +#ifndef SQLITE_OMIT_AUTOVACUUM + if( idx==BTREE_INCR_VACUUM ){ + assert( pBt->autoVacuum || iMeta==0 ); + assert( iMeta==0 || iMeta==1 ); + pBt->incrVacuum = (u8)iMeta; } #endif - - db->activeVdbeCnt++; - if( p->readOnly==0 ) db->writeVdbeCnt++; - p->pc = 0; - } -#ifndef SQLITE_OMIT_EXPLAIN - if( p->explain ){ - rc = sqlite3VdbeList(p); - }else -#endif /* SQLITE_OMIT_EXPLAIN */ - { - rc = sqlite3VdbeExec(p); } + sqlite3BtreeLeave(p); + return rc; +} - if( sqlite3SafetyOff(db) ){ - rc = SQLITE_MISUSE; +#ifndef SQLITE_OMIT_BTREECOUNT +/* +** The first argument, pCur, is a cursor opened on some b-tree. Count the +** number of entries in the b-tree and write the result to *pnEntry. +** +** SQLITE_OK is returned if the operation is successfully executed. +** Otherwise, if an error is encountered (i.e. an IO error or database +** corruption) an SQLite error code is returned. +*/ +SQLITE_PRIVATE int sqlite3BtreeCount(BtCursor *pCur, i64 *pnEntry){ + i64 nEntry = 0; /* Value to return in *pnEntry */ + int rc; /* Return code */ + + if( pCur->pgnoRoot==0 ){ + *pnEntry = 0; + return SQLITE_OK; } + rc = moveToRoot(pCur); -#ifndef SQLITE_OMIT_TRACE - /* Invoke the profile callback if there is one + /* Unless an error occurs, the following loop runs one iteration for each + ** page in the B-Tree structure (not including overflow pages). */ - if( rc!=SQLITE_ROW && db->xProfile && !db->init.busy && p->zSql ){ - double rNow; - u64 elapseTime; + while( rc==SQLITE_OK ){ + int iIdx; /* Index of child node in parent */ + MemPage *pPage; /* Current page of the b-tree */ - sqlite3OsCurrentTime(db->pVfs, &rNow); - elapseTime = (u64)((rNow - (int)rNow)*3600.0*24.0*1000000000.0); - elapseTime -= p->startTime; - db->xProfile(db->pProfileArg, p->zSql, elapseTime); - } -#endif + /* If this is a leaf page or the tree is not an int-key tree, then + ** this page contains countable entries. Increment the entry counter + ** accordingly. + */ + pPage = pCur->apPage[pCur->iPage]; + if( pPage->leaf || !pPage->intKey ){ + nEntry += pPage->nCell; + } - db->errCode = rc; - if( SQLITE_NOMEM==sqlite3ApiExit(p->db, p->rc) ){ - p->rc = SQLITE_NOMEM; - } -end_of_step: - /* At this point local variable rc holds the value that should be - ** returned if this statement was compiled using the legacy - ** sqlite3_prepare() interface. According to the docs, this can only - ** be one of the values in the first assert() below. Variable p->rc - ** contains the value that would be returned if sqlite3_finalize() - ** were called on statement p. - */ - assert( rc==SQLITE_ROW || rc==SQLITE_DONE || rc==SQLITE_ERROR - || rc==SQLITE_BUSY || rc==SQLITE_MISUSE - ); - assert( p->rc!=SQLITE_ROW && p->rc!=SQLITE_DONE ); - if( p->isPrepareV2 && rc!=SQLITE_ROW && rc!=SQLITE_DONE ){ - /* If this statement was prepared using sqlite3_prepare_v2(), and an - ** error has occured, then return the error code in p->rc to the - ** caller. Set the error code in the database handle to the same value. - */ - rc = db->errCode = p->rc; - } - return (rc&db->errMask); -} + /* pPage is a leaf node. This loop navigates the cursor so that it + ** points to the first interior cell that it points to the parent of + ** the next page in the tree that has not yet been visited. The + ** pCur->aiIdx[pCur->iPage] value is set to the index of the parent cell + ** of the page, or to the number of cells in the page if the next page + ** to visit is the right-child of its parent. + ** + ** If all pages in the tree have been visited, return SQLITE_OK to the + ** caller. + */ + if( pPage->leaf ){ + do { + if( pCur->iPage==0 ){ + /* All pages of the b-tree have been visited. Return successfully. */ + *pnEntry = nEntry; + return SQLITE_OK; + } + moveToParent(pCur); + }while ( pCur->aiIdx[pCur->iPage]>=pCur->apPage[pCur->iPage]->nCell ); -/* -** This is the top-level implementation of sqlite3_step(). Call -** sqlite3Step() to do most of the work. If a schema error occurs, -** call sqlite3Reprepare() and try again. -*/ -SQLITE_API int sqlite3_step(sqlite3_stmt *pStmt){ - int rc = SQLITE_MISUSE; - if( pStmt ){ - int cnt = 0; - Vdbe *v = (Vdbe*)pStmt; - sqlite3 *db = v->db; - sqlite3_mutex_enter(db->mutex); - while( (rc = sqlite3Step(v))==SQLITE_SCHEMA - && cnt++ < 5 - && (rc = sqlite3Reprepare(v))==SQLITE_OK ){ - sqlite3_reset(pStmt); - v->expired = 0; - } - if( rc==SQLITE_SCHEMA && ALWAYS(v->isPrepareV2) && ALWAYS(db->pErr) ){ - /* This case occurs after failing to recompile an sql statement. - ** The error message from the SQL compiler has already been loaded - ** into the database handle. This block copies the error message - ** from the database handle into the statement and sets the statement - ** program counter to 0 to ensure that when the statement is - ** finalized or reset the parser error message is available via - ** sqlite3_errmsg() and sqlite3_errcode(). - */ - const char *zErr = (const char *)sqlite3_value_text(db->pErr); - sqlite3DbFree(db, v->zErrMsg); - if( !db->mallocFailed ){ - v->zErrMsg = sqlite3DbStrDup(db, zErr); - } else { - v->zErrMsg = 0; - v->rc = SQLITE_NOMEM; - } + pCur->aiIdx[pCur->iPage]++; + pPage = pCur->apPage[pCur->iPage]; + } + + /* Descend to the child node of the cell that the cursor currently + ** points at. This is the right-child if (iIdx==pPage->nCell). + */ + iIdx = pCur->aiIdx[pCur->iPage]; + if( iIdx==pPage->nCell ){ + rc = moveToChild(pCur, get4byte(&pPage->aData[pPage->hdrOffset+8])); + }else{ + rc = moveToChild(pCur, get4byte(findCell(pPage, iIdx))); } - rc = sqlite3ApiExit(db, rc); - sqlite3_mutex_leave(db->mutex); } + + /* An error has occurred. Return an error code. */ return rc; } +#endif /* -** Extract the user data from a sqlite3_context structure and return a -** pointer to it. +** Return the pager associated with a BTree. This routine is used for +** testing and debugging only. */ -SQLITE_API void *sqlite3_user_data(sqlite3_context *p){ - assert( p && p->pFunc ); - return p->pFunc->pUserData; +SQLITE_PRIVATE Pager *sqlite3BtreePager(Btree *p){ + return p->pBt->pPager; } +#ifndef SQLITE_OMIT_INTEGRITY_CHECK /* -** Extract the user data from a sqlite3_context structure and return a -** pointer to it. +** Append a message to the error message string. */ -SQLITE_API sqlite3 *sqlite3_context_db_handle(sqlite3_context *p){ - assert( p && p->pFunc ); - return p->s.db; +static void checkAppendMsg( + IntegrityCk *pCheck, + char *zMsg1, + const char *zFormat, + ... +){ + va_list ap; + if( !pCheck->mxErr ) return; + pCheck->mxErr--; + pCheck->nErr++; + va_start(ap, zFormat); + if( pCheck->errMsg.nChar ){ + sqlite3StrAccumAppend(&pCheck->errMsg, "\n", 1); + } + if( zMsg1 ){ + sqlite3StrAccumAppend(&pCheck->errMsg, zMsg1, -1); + } + sqlite3VXPrintf(&pCheck->errMsg, 1, zFormat, ap); + va_end(ap); + if( pCheck->errMsg.mallocFailed ){ + pCheck->mallocFailed = 1; + } } +#endif /* SQLITE_OMIT_INTEGRITY_CHECK */ + +#ifndef SQLITE_OMIT_INTEGRITY_CHECK /* -** The following is the implementation of an SQL function that always -** fails with an error message stating that the function is used in the -** wrong context. The sqlite3_overload_function() API might construct -** SQL function that use this routine so that the functions will exist -** for name resolution but are actually overloaded by the xFindFunction -** method of virtual tables. +** Return non-zero if the bit in the IntegrityCk.aPgRef[] array that +** corresponds to page iPg is already set. */ -SQLITE_PRIVATE void sqlite3InvalidFunction( - sqlite3_context *context, /* The function calling context */ - int NotUsed, /* Number of arguments to the function */ - sqlite3_value **NotUsed2 /* Value of each argument */ -){ - const char *zName = context->pFunc->zName; - char *zErr; - UNUSED_PARAMETER2(NotUsed, NotUsed2); - zErr = sqlite3_mprintf( - "unable to use function %s in the requested context", zName); - sqlite3_result_error(context, zErr, -1); - sqlite3_free(zErr); +static int getPageReferenced(IntegrityCk *pCheck, Pgno iPg){ + assert( iPg<=pCheck->nPage && sizeof(pCheck->aPgRef[0])==1 ); + return (pCheck->aPgRef[iPg/8] & (1 << (iPg & 0x07))); } /* -** Allocate or return the aggregate context for a user function. A new -** context is allocated on the first call. Subsequent calls return the -** same context that was returned on prior calls. +** Set the bit in the IntegrityCk.aPgRef[] array that corresponds to page iPg. */ -SQLITE_API void *sqlite3_aggregate_context(sqlite3_context *p, int nByte){ - Mem *pMem; - assert( p && p->pFunc && p->pFunc->xStep ); - assert( sqlite3_mutex_held(p->s.db->mutex) ); - pMem = p->pMem; - if( (pMem->flags & MEM_Agg)==0 ){ - if( nByte==0 ){ - sqlite3VdbeMemReleaseExternal(pMem); - pMem->flags = MEM_Null; - pMem->z = 0; - }else{ - sqlite3VdbeMemGrow(pMem, nByte, 0); - pMem->flags = MEM_Agg; - pMem->u.pDef = p->pFunc; - if( pMem->z ){ - memset(pMem->z, 0, nByte); - } - } - } - return (void*)pMem->z; +static void setPageReferenced(IntegrityCk *pCheck, Pgno iPg){ + assert( iPg<=pCheck->nPage && sizeof(pCheck->aPgRef[0])==1 ); + pCheck->aPgRef[iPg/8] |= (1 << (iPg & 0x07)); } + /* -** Return the auxilary data pointer, if any, for the iArg'th argument to -** the user-function defined by pCtx. +** Add 1 to the reference count for page iPage. If this is the second +** reference to the page, add an error message to pCheck->zErrMsg. +** Return 1 if there are 2 ore more references to the page and 0 if +** if this is the first reference to the page. +** +** Also check that the page number is in bounds. */ -SQLITE_API void *sqlite3_get_auxdata(sqlite3_context *pCtx, int iArg){ - VdbeFunc *pVdbeFunc; - - assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); - pVdbeFunc = pCtx->pVdbeFunc; - if( !pVdbeFunc || iArg>=pVdbeFunc->nAux || iArg<0 ){ - return 0; +static int checkRef(IntegrityCk *pCheck, Pgno iPage, char *zContext){ + if( iPage==0 ) return 1; + if( iPage>pCheck->nPage ){ + checkAppendMsg(pCheck, zContext, "invalid page number %d", iPage); + return 1; } - return pVdbeFunc->apAux[iArg].pAux; + if( getPageReferenced(pCheck, iPage) ){ + checkAppendMsg(pCheck, zContext, "2nd reference to page %d", iPage); + return 1; + } + setPageReferenced(pCheck, iPage); + return 0; } +#ifndef SQLITE_OMIT_AUTOVACUUM /* -** Set the auxilary data pointer and delete function, for the iArg'th -** argument to the user-function defined by pCtx. Any previous value is -** deleted by calling the delete function specified when it was set. +** Check that the entry in the pointer-map for page iChild maps to +** page iParent, pointer type ptrType. If not, append an error message +** to pCheck. */ -SQLITE_API void sqlite3_set_auxdata( - sqlite3_context *pCtx, - int iArg, - void *pAux, - void (*xDelete)(void*) +static void checkPtrmap( + IntegrityCk *pCheck, /* Integrity check context */ + Pgno iChild, /* Child page number */ + u8 eType, /* Expected pointer map type */ + Pgno iParent, /* Expected pointer map parent page number */ + char *zContext /* Context description (used for error msg) */ ){ - struct AuxData *pAuxData; - VdbeFunc *pVdbeFunc; - if( iArg<0 ) goto failed; + int rc; + u8 ePtrmapType; + Pgno iPtrmapParent; - assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); - pVdbeFunc = pCtx->pVdbeFunc; - if( !pVdbeFunc || pVdbeFunc->nAux<=iArg ){ - int nAux = (pVdbeFunc ? pVdbeFunc->nAux : 0); - int nMalloc = sizeof(VdbeFunc) + sizeof(struct AuxData)*iArg; - pVdbeFunc = sqlite3DbRealloc(pCtx->s.db, pVdbeFunc, nMalloc); - if( !pVdbeFunc ){ - goto failed; - } - pCtx->pVdbeFunc = pVdbeFunc; - memset(&pVdbeFunc->apAux[nAux], 0, sizeof(struct AuxData)*(iArg+1-nAux)); - pVdbeFunc->nAux = iArg+1; - pVdbeFunc->pFunc = pCtx->pFunc; + rc = ptrmapGet(pCheck->pBt, iChild, &ePtrmapType, &iPtrmapParent); + if( rc!=SQLITE_OK ){ + if( rc==SQLITE_NOMEM || rc==SQLITE_IOERR_NOMEM ) pCheck->mallocFailed = 1; + checkAppendMsg(pCheck, zContext, "Failed to read ptrmap key=%d", iChild); + return; } - pAuxData = &pVdbeFunc->apAux[iArg]; - if( pAuxData->pAux && pAuxData->xDelete ){ - pAuxData->xDelete(pAuxData->pAux); + if( ePtrmapType!=eType || iPtrmapParent!=iParent ){ + checkAppendMsg(pCheck, zContext, + "Bad ptr map entry key=%d expected=(%d,%d) got=(%d,%d)", + iChild, eType, iParent, ePtrmapType, iPtrmapParent); } - pAuxData->pAux = pAux; - pAuxData->xDelete = xDelete; - return; +} +#endif -failed: - if( xDelete ){ - xDelete(pAux); +/* +** Check the integrity of the freelist or of an overflow page list. +** Verify that the number of pages on the list is N. +*/ +static void checkList( + IntegrityCk *pCheck, /* Integrity checking context */ + int isFreeList, /* True for a freelist. False for overflow page list */ + int iPage, /* Page number for first page in the list */ + int N, /* Expected number of pages in the list */ + char *zContext /* Context for error messages */ +){ + int i; + int expected = N; + int iFirst = iPage; + while( N-- > 0 && pCheck->mxErr ){ + DbPage *pOvflPage; + unsigned char *pOvflData; + if( iPage<1 ){ + checkAppendMsg(pCheck, zContext, + "%d of %d pages missing from overflow list starting at %d", + N+1, expected, iFirst); + break; + } + if( checkRef(pCheck, iPage, zContext) ) break; + if( sqlite3PagerGet(pCheck->pPager, (Pgno)iPage, &pOvflPage) ){ + checkAppendMsg(pCheck, zContext, "failed to get page %d", iPage); + break; + } + pOvflData = (unsigned char *)sqlite3PagerGetData(pOvflPage); + if( isFreeList ){ + int n = get4byte(&pOvflData[4]); +#ifndef SQLITE_OMIT_AUTOVACUUM + if( pCheck->pBt->autoVacuum ){ + checkPtrmap(pCheck, iPage, PTRMAP_FREEPAGE, 0, zContext); + } +#endif + if( n>(int)pCheck->pBt->usableSize/4-2 ){ + checkAppendMsg(pCheck, zContext, + "freelist leaf count too big on page %d", iPage); + N--; + }else{ + for(i=0; ipBt->autoVacuum ){ + checkPtrmap(pCheck, iFreePage, PTRMAP_FREEPAGE, 0, zContext); + } +#endif + checkRef(pCheck, iFreePage, zContext); + } + N -= n; + } + } +#ifndef SQLITE_OMIT_AUTOVACUUM + else{ + /* If this database supports auto-vacuum and iPage is not the last + ** page in this overflow list, check that the pointer-map entry for + ** the following page matches iPage. + */ + if( pCheck->pBt->autoVacuum && N>0 ){ + i = get4byte(pOvflData); + checkPtrmap(pCheck, i, PTRMAP_OVERFLOW2, iPage, zContext); + } + } +#endif + iPage = get4byte(pOvflData); + sqlite3PagerUnref(pOvflPage); } } +#endif /* SQLITE_OMIT_INTEGRITY_CHECK */ -#ifndef SQLITE_OMIT_DEPRECATED +#ifndef SQLITE_OMIT_INTEGRITY_CHECK /* -** Return the number of times the Step function of a aggregate has been -** called. +** Do various sanity checks on a single page of a tree. Return +** the tree depth. Root pages return 0. Parents of root pages +** return 1, and so forth. +** +** These checks are done: ** -** This function is deprecated. Do not use it for new code. It is -** provide only to avoid breaking legacy code. New aggregate function -** implementations should keep their own counts within their aggregate -** context. +** 1. Make sure that cells and freeblocks do not overlap +** but combine to completely cover the page. +** NO 2. Make sure cell keys are in order. +** NO 3. Make sure no key is less than or equal to zLowerBound. +** NO 4. Make sure no key is greater than or equal to zUpperBound. +** 5. Check the integrity of overflow pages. +** 6. Recursively call checkTreePage on all children. +** 7. Verify that the depth of all children is the same. +** 8. Make sure this page is at least 33% full or else it is +** the root of the tree. */ -SQLITE_API int sqlite3_aggregate_count(sqlite3_context *p){ - assert( p && p->pMem && p->pFunc && p->pFunc->xStep ); - return p->pMem->n; -} +static int checkTreePage( + IntegrityCk *pCheck, /* Context for the sanity check */ + int iPage, /* Page number of the page to check */ + char *zParentContext, /* Parent context */ + i64 *pnParentMinKey, + i64 *pnParentMaxKey +){ + MemPage *pPage; + int i, rc, depth, d2, pgno, cnt; + int hdr, cellStart; + int nCell; + u8 *data; + BtShared *pBt; + int usableSize; + char zContext[100]; + char *hit = 0; + i64 nMinKey = 0; + i64 nMaxKey = 0; + + sqlite3_snprintf(sizeof(zContext), zContext, "Page %d: ", iPage); + + /* Check that the page exists + */ + pBt = pCheck->pBt; + usableSize = pBt->usableSize; + if( iPage==0 ) return 0; + if( checkRef(pCheck, iPage, zParentContext) ) return 0; + if( (rc = btreeGetPage(pBt, (Pgno)iPage, &pPage, 0))!=0 ){ + checkAppendMsg(pCheck, zContext, + "unable to get the page. error code=%d", rc); + return 0; + } + + /* Clear MemPage.isInit to make sure the corruption detection code in + ** btreeInitPage() is executed. */ + pPage->isInit = 0; + if( (rc = btreeInitPage(pPage))!=0 ){ + assert( rc==SQLITE_CORRUPT ); /* The only possible error from InitPage */ + checkAppendMsg(pCheck, zContext, + "btreeInitPage() returns error code %d", rc); + releasePage(pPage); + return 0; + } + + /* Check out all the cells. + */ + depth = 0; + for(i=0; inCell && pCheck->mxErr; i++){ + u8 *pCell; + u32 sz; + CellInfo info; + + /* Check payload overflow pages + */ + sqlite3_snprintf(sizeof(zContext), zContext, + "On tree page %d cell %d: ", iPage, i); + pCell = findCell(pPage,i); + btreeParseCellPtr(pPage, pCell, &info); + sz = info.nData; + if( !pPage->intKey ) sz += (int)info.nKey; + /* For intKey pages, check that the keys are in order. + */ + else if( i==0 ) nMinKey = nMaxKey = info.nKey; + else{ + if( info.nKey <= nMaxKey ){ + checkAppendMsg(pCheck, zContext, + "Rowid %lld out of order (previous was %lld)", info.nKey, nMaxKey); + } + nMaxKey = info.nKey; + } + assert( sz==info.nPayload ); + if( (sz>info.nLocal) + && (&pCell[info.iOverflow]<=&pPage->aData[pBt->usableSize]) + ){ + int nPage = (sz - info.nLocal + usableSize - 5)/(usableSize - 4); + Pgno pgnoOvfl = get4byte(&pCell[info.iOverflow]); +#ifndef SQLITE_OMIT_AUTOVACUUM + if( pBt->autoVacuum ){ + checkPtrmap(pCheck, pgnoOvfl, PTRMAP_OVERFLOW1, iPage, zContext); + } #endif + checkList(pCheck, 0, pgnoOvfl, nPage, zContext); + } -/* -** Return the number of columns in the result set for the statement pStmt. -*/ -SQLITE_API int sqlite3_column_count(sqlite3_stmt *pStmt){ - Vdbe *pVm = (Vdbe *)pStmt; - return pVm ? pVm->nResColumn : 0; + /* Check sanity of left child page. + */ + if( !pPage->leaf ){ + pgno = get4byte(pCell); +#ifndef SQLITE_OMIT_AUTOVACUUM + if( pBt->autoVacuum ){ + checkPtrmap(pCheck, pgno, PTRMAP_BTREE, iPage, zContext); + } +#endif + d2 = checkTreePage(pCheck, pgno, zContext, &nMinKey, i==0 ? NULL : &nMaxKey); + if( i>0 && d2!=depth ){ + checkAppendMsg(pCheck, zContext, "Child page depth differs"); + } + depth = d2; + } + } + + if( !pPage->leaf ){ + pgno = get4byte(&pPage->aData[pPage->hdrOffset+8]); + sqlite3_snprintf(sizeof(zContext), zContext, + "On page %d at right child: ", iPage); +#ifndef SQLITE_OMIT_AUTOVACUUM + if( pBt->autoVacuum ){ + checkPtrmap(pCheck, pgno, PTRMAP_BTREE, iPage, zContext); + } +#endif + checkTreePage(pCheck, pgno, zContext, NULL, !pPage->nCell ? NULL : &nMaxKey); + } + + /* For intKey leaf pages, check that the min/max keys are in order + ** with any left/parent/right pages. + */ + if( pPage->leaf && pPage->intKey ){ + /* if we are a left child page */ + if( pnParentMinKey ){ + /* if we are the left most child page */ + if( !pnParentMaxKey ){ + if( nMaxKey > *pnParentMinKey ){ + checkAppendMsg(pCheck, zContext, + "Rowid %lld out of order (max larger than parent min of %lld)", + nMaxKey, *pnParentMinKey); + } + }else{ + if( nMinKey <= *pnParentMinKey ){ + checkAppendMsg(pCheck, zContext, + "Rowid %lld out of order (min less than parent min of %lld)", + nMinKey, *pnParentMinKey); + } + if( nMaxKey > *pnParentMaxKey ){ + checkAppendMsg(pCheck, zContext, + "Rowid %lld out of order (max larger than parent max of %lld)", + nMaxKey, *pnParentMaxKey); + } + *pnParentMinKey = nMaxKey; + } + /* else if we're a right child page */ + } else if( pnParentMaxKey ){ + if( nMinKey <= *pnParentMaxKey ){ + checkAppendMsg(pCheck, zContext, + "Rowid %lld out of order (min less than parent max of %lld)", + nMinKey, *pnParentMaxKey); + } + } + } + + /* Check for complete coverage of the page + */ + data = pPage->aData; + hdr = pPage->hdrOffset; + hit = sqlite3PageMalloc( pBt->pageSize ); + if( hit==0 ){ + pCheck->mallocFailed = 1; + }else{ + int contentOffset = get2byteNotZero(&data[hdr+5]); + assert( contentOffset<=usableSize ); /* Enforced by btreeInitPage() */ + memset(hit+contentOffset, 0, usableSize-contentOffset); + memset(hit, 1, contentOffset); + nCell = get2byte(&data[hdr+3]); + cellStart = hdr + 12 - 4*pPage->leaf; + for(i=0; i=usableSize ){ + checkAppendMsg(pCheck, 0, + "Corruption detected in cell %d on page %d",i,iPage); + }else{ + for(j=pc+size-1; j>=pc; j--) hit[j]++; + } + } + i = get2byte(&data[hdr+1]); + while( i>0 ){ + int size, j; + assert( i<=usableSize-4 ); /* Enforced by btreeInitPage() */ + size = get2byte(&data[i+2]); + assert( i+size<=usableSize ); /* Enforced by btreeInitPage() */ + for(j=i+size-1; j>=i; j--) hit[j]++; + j = get2byte(&data[i]); + assert( j==0 || j>i+size ); /* Enforced by btreeInitPage() */ + assert( j<=usableSize-4 ); /* Enforced by btreeInitPage() */ + i = j; + } + for(i=cnt=0; i1 ){ + checkAppendMsg(pCheck, 0, + "Multiple uses for byte %d of page %d", i, iPage); + break; + } + } + if( cnt!=data[hdr+7] ){ + checkAppendMsg(pCheck, 0, + "Fragmentation of %d bytes reported as %d on page %d", + cnt, data[hdr+7], iPage); + } + } + sqlite3PageFree(hit); + releasePage(pPage); + return depth+1; } +#endif /* SQLITE_OMIT_INTEGRITY_CHECK */ +#ifndef SQLITE_OMIT_INTEGRITY_CHECK /* -** Return the number of values available from the current row of the -** currently executing statement pStmt. +** This routine does a complete check of the given BTree file. aRoot[] is +** an array of pages numbers were each page number is the root page of +** a table. nRoot is the number of entries in aRoot. +** +** A read-only or read-write transaction must be opened before calling +** this function. +** +** Write the number of error seen in *pnErr. Except for some memory +** allocation errors, an error message held in memory obtained from +** malloc is returned if *pnErr is non-zero. If *pnErr==0 then NULL is +** returned. If a memory allocation error occurs, NULL is returned. */ -SQLITE_API int sqlite3_data_count(sqlite3_stmt *pStmt){ - Vdbe *pVm = (Vdbe *)pStmt; - if( pVm==0 || pVm->pResultSet==0 ) return 0; - return pVm->nResColumn; -} +SQLITE_PRIVATE char *sqlite3BtreeIntegrityCheck( + Btree *p, /* The btree to be checked */ + int *aRoot, /* An array of root pages numbers for individual trees */ + int nRoot, /* Number of entries in aRoot[] */ + int mxErr, /* Stop reporting errors after this many */ + int *pnErr /* Write number of errors seen to this variable */ +){ + Pgno i; + int nRef; + IntegrityCk sCheck; + BtShared *pBt = p->pBt; + char zErr[100]; + + sqlite3BtreeEnter(p); + assert( p->inTrans>TRANS_NONE && pBt->inTransaction>TRANS_NONE ); + nRef = sqlite3PagerRefcount(pBt->pPager); + sCheck.pBt = pBt; + sCheck.pPager = pBt->pPager; + sCheck.nPage = btreePagecount(sCheck.pBt); + sCheck.mxErr = mxErr; + sCheck.nErr = 0; + sCheck.mallocFailed = 0; + *pnErr = 0; + if( sCheck.nPage==0 ){ + sqlite3BtreeLeave(p); + return 0; + } + sCheck.aPgRef = sqlite3MallocZero((sCheck.nPage / 8)+ 1); + if( !sCheck.aPgRef ){ + *pnErr = 1; + sqlite3BtreeLeave(p); + return 0; + } + i = PENDING_BYTE_PAGE(pBt); + if( i<=sCheck.nPage ) setPageReferenced(&sCheck, i); + sqlite3StrAccumInit(&sCheck.errMsg, zErr, sizeof(zErr), 20000); + sCheck.errMsg.useMalloc = 2; -/* -** Check to see if column iCol of the given statement is valid. If -** it is, return a pointer to the Mem for the value of that column. -** If iCol is not valid, return a pointer to a Mem which has a value -** of NULL. -*/ -static Mem *columnMem(sqlite3_stmt *pStmt, int i){ - Vdbe *pVm; - int vals; - Mem *pOut; + /* Check the integrity of the freelist + */ + checkList(&sCheck, 1, get4byte(&pBt->pPage1->aData[32]), + get4byte(&pBt->pPage1->aData[36]), "Main freelist: "); - pVm = (Vdbe *)pStmt; - if( pVm && pVm->pResultSet!=0 && inResColumn && i>=0 ){ - sqlite3_mutex_enter(pVm->db->mutex); - vals = sqlite3_data_count(pStmt); - pOut = &pVm->pResultSet[i]; - }else{ - /* If the value passed as the second argument is out of range, return - ** a pointer to the following static Mem object which contains the - ** value SQL NULL. Even though the Mem structure contains an element - ** of type i64, on certain architecture (x86) with certain compiler - ** switches (-Os), gcc may align this Mem object on a 4-byte boundary - ** instead of an 8-byte one. This all works fine, except that when - ** running with SQLITE_DEBUG defined the SQLite code sometimes assert()s - ** that a Mem structure is located on an 8-byte boundary. To prevent - ** this assert() from failing, when building with SQLITE_DEBUG defined - ** using gcc, force nullMem to be 8-byte aligned using the magical - ** __attribute__((aligned(8))) macro. */ - static const Mem nullMem -#if defined(SQLITE_DEBUG) && defined(__GNUC__) - __attribute__((aligned(8))) + /* Check all the tables. + */ + for(i=0; (int)iautoVacuum && aRoot[i]>1 ){ + checkPtrmap(&sCheck, aRoot[i], PTRMAP_ROOTPAGE, 0, 0); + } #endif - = {{0}, (double)0, 0, "", 0, MEM_Null, SQLITE_NULL, 0, 0, 0 }; + checkTreePage(&sCheck, aRoot[i], "List of tree roots: ", NULL, NULL); + } - if( pVm && ALWAYS(pVm->db) ){ - sqlite3_mutex_enter(pVm->db->mutex); - sqlite3Error(pVm->db, SQLITE_RANGE, 0); + /* Make sure every page in the file is referenced + */ + for(i=1; i<=sCheck.nPage && sCheck.mxErr; i++){ +#ifdef SQLITE_OMIT_AUTOVACUUM + if( getPageReferenced(&sCheck, i)==0 ){ + checkAppendMsg(&sCheck, 0, "Page %d is never used", i); } - pOut = (Mem*)&nullMem; +#else + /* If the database supports auto-vacuum, make sure no tables contain + ** references to pointer-map pages. + */ + if( getPageReferenced(&sCheck, i)==0 && + (PTRMAP_PAGENO(pBt, i)!=i || !pBt->autoVacuum) ){ + checkAppendMsg(&sCheck, 0, "Page %d is never used", i); + } + if( getPageReferenced(&sCheck, i)!=0 && + (PTRMAP_PAGENO(pBt, i)==i && pBt->autoVacuum) ){ + checkAppendMsg(&sCheck, 0, "Pointer map page %d is referenced", i); + } +#endif } - return pOut; + + /* Make sure this analysis did not leave any unref() pages. + ** This is an internal consistency check; an integrity check + ** of the integrity check. + */ + if( NEVER(nRef != sqlite3PagerRefcount(pBt->pPager)) ){ + checkAppendMsg(&sCheck, 0, + "Outstanding page count goes from %d to %d during this analysis", + nRef, sqlite3PagerRefcount(pBt->pPager) + ); + } + + /* Clean up and report errors. + */ + sqlite3BtreeLeave(p); + sqlite3_free(sCheck.aPgRef); + if( sCheck.mallocFailed ){ + sqlite3StrAccumReset(&sCheck.errMsg); + *pnErr = sCheck.nErr+1; + return 0; + } + *pnErr = sCheck.nErr; + if( sCheck.nErr==0 ) sqlite3StrAccumReset(&sCheck.errMsg); + return sqlite3StrAccumFinish(&sCheck.errMsg); } +#endif /* SQLITE_OMIT_INTEGRITY_CHECK */ /* -** This function is called after invoking an sqlite3_value_XXX function on a -** column value (i.e. a value returned by evaluating an SQL expression in the -** select list of a SELECT statement) that may cause a malloc() failure. If -** malloc() has failed, the threads mallocFailed flag is cleared and the result -** code of statement pStmt set to SQLITE_NOMEM. +** Return the full pathname of the underlying database file. Return +** an empty string if the database is in-memory or a TEMP database. ** -** Specifically, this is called from within: +** The pager filename is invariant as long as the pager is +** open so it is safe to access without the BtShared mutex. +*/ +SQLITE_PRIVATE const char *sqlite3BtreeGetFilename(Btree *p){ + assert( p->pBt->pPager!=0 ); + return sqlite3PagerFilename(p->pBt->pPager, 1); +} + +/* +** Return the pathname of the journal file for this database. The return +** value of this routine is the same regardless of whether the journal file +** has been created or not. ** -** sqlite3_column_int() -** sqlite3_column_int64() -** sqlite3_column_text() -** sqlite3_column_text16() -** sqlite3_column_real() -** sqlite3_column_bytes() -** sqlite3_column_bytes16() +** The pager journal filename is invariant as long as the pager is +** open so it is safe to access without the BtShared mutex. +*/ +SQLITE_PRIVATE const char *sqlite3BtreeGetJournalname(Btree *p){ + assert( p->pBt->pPager!=0 ); + return sqlite3PagerJournalname(p->pBt->pPager); +} + +/* +** Return non-zero if a transaction is active. +*/ +SQLITE_PRIVATE int sqlite3BtreeIsInTrans(Btree *p){ + assert( p==0 || sqlite3_mutex_held(p->db->mutex) ); + return (p && (p->inTrans==TRANS_WRITE)); +} + +#ifndef SQLITE_OMIT_WAL +/* +** Run a checkpoint on the Btree passed as the first argument. ** -** But not for sqlite3_column_blob(), which never calls malloc(). +** Return SQLITE_LOCKED if this or any other connection has an open +** transaction on the shared-cache the argument Btree is connected to. +** +** Parameter eMode is one of SQLITE_CHECKPOINT_PASSIVE, FULL or RESTART. */ -static void columnMallocFailure(sqlite3_stmt *pStmt) -{ - /* If malloc() failed during an encoding conversion within an - ** sqlite3_column_XXX API, then set the return code of the statement to - ** SQLITE_NOMEM. The next call to _step() (if any) will return SQLITE_ERROR - ** and _finalize() will return NOMEM. - */ - Vdbe *p = (Vdbe *)pStmt; +SQLITE_PRIVATE int sqlite3BtreeCheckpoint(Btree *p, int eMode, int *pnLog, int *pnCkpt){ + int rc = SQLITE_OK; if( p ){ - p->rc = sqlite3ApiExit(p->db, p->rc); - sqlite3_mutex_leave(p->db->mutex); + BtShared *pBt = p->pBt; + sqlite3BtreeEnter(p); + if( pBt->inTransaction!=TRANS_NONE ){ + rc = SQLITE_LOCKED; + }else{ + rc = sqlite3PagerCheckpoint(pBt->pPager, eMode, pnLog, pnCkpt); + } + sqlite3BtreeLeave(p); } + return rc; } +#endif -/**************************** sqlite3_column_ ******************************* -** The following routines are used to access elements of the current row -** in the result set. +/* +** Return non-zero if a read (or write) transaction is active. */ -SQLITE_API const void *sqlite3_column_blob(sqlite3_stmt *pStmt, int i){ - const void *val; - val = sqlite3_value_blob( columnMem(pStmt,i) ); - /* Even though there is no encoding conversion, value_blob() might - ** need to call malloc() to expand the result of a zeroblob() - ** expression. - */ - columnMallocFailure(pStmt); - return val; -} -SQLITE_API int sqlite3_column_bytes(sqlite3_stmt *pStmt, int i){ - int val = sqlite3_value_bytes( columnMem(pStmt,i) ); - columnMallocFailure(pStmt); - return val; +SQLITE_PRIVATE int sqlite3BtreeIsInReadTrans(Btree *p){ + assert( p ); + assert( sqlite3_mutex_held(p->db->mutex) ); + return p->inTrans!=TRANS_NONE; } -SQLITE_API int sqlite3_column_bytes16(sqlite3_stmt *pStmt, int i){ - int val = sqlite3_value_bytes16( columnMem(pStmt,i) ); - columnMallocFailure(pStmt); - return val; + +SQLITE_PRIVATE int sqlite3BtreeIsInBackup(Btree *p){ + assert( p ); + assert( sqlite3_mutex_held(p->db->mutex) ); + return p->nBackup!=0; } -SQLITE_API double sqlite3_column_double(sqlite3_stmt *pStmt, int i){ - double val = sqlite3_value_double( columnMem(pStmt,i) ); - columnMallocFailure(pStmt); - return val; -} -SQLITE_API int sqlite3_column_int(sqlite3_stmt *pStmt, int i){ - int val = sqlite3_value_int( columnMem(pStmt,i) ); - columnMallocFailure(pStmt); - return val; -} -SQLITE_API sqlite_int64 sqlite3_column_int64(sqlite3_stmt *pStmt, int i){ - sqlite_int64 val = sqlite3_value_int64( columnMem(pStmt,i) ); - columnMallocFailure(pStmt); - return val; -} -SQLITE_API const unsigned char *sqlite3_column_text(sqlite3_stmt *pStmt, int i){ - const unsigned char *val = sqlite3_value_text( columnMem(pStmt,i) ); - columnMallocFailure(pStmt); - return val; -} -SQLITE_API sqlite3_value *sqlite3_column_value(sqlite3_stmt *pStmt, int i){ - Mem *pOut = columnMem(pStmt, i); - if( pOut->flags&MEM_Static ){ - pOut->flags &= ~MEM_Static; - pOut->flags |= MEM_Ephem; - } - columnMallocFailure(pStmt); - return (sqlite3_value *)pOut; -} -#ifndef SQLITE_OMIT_UTF16 -SQLITE_API const void *sqlite3_column_text16(sqlite3_stmt *pStmt, int i){ - const void *val = sqlite3_value_text16( columnMem(pStmt,i) ); - columnMallocFailure(pStmt); - return val; -} -#endif /* SQLITE_OMIT_UTF16 */ -SQLITE_API int sqlite3_column_type(sqlite3_stmt *pStmt, int i){ - int iType = sqlite3_value_type( columnMem(pStmt,i) ); - columnMallocFailure(pStmt); - return iType; -} - -/* The following function is experimental and subject to change or -** removal */ -/*int sqlite3_column_numeric_type(sqlite3_stmt *pStmt, int i){ -** return sqlite3_value_numeric_type( columnMem(pStmt,i) ); -**} -*/ /* -** Convert the N-th element of pStmt->pColName[] into a string using -** xFunc() then return that string. If N is out of range, return 0. +** This function returns a pointer to a blob of memory associated with +** a single shared-btree. The memory is used by client code for its own +** purposes (for example, to store a high-level schema associated with +** the shared-btree). The btree layer manages reference counting issues. ** -** There are up to 5 names for each column. useType determines which -** name is returned. Here are the names: +** The first time this is called on a shared-btree, nBytes bytes of memory +** are allocated, zeroed, and returned to the caller. For each subsequent +** call the nBytes parameter is ignored and a pointer to the same blob +** of memory returned. ** -** 0 The column name as it should be displayed for output -** 1 The datatype name for the column -** 2 The name of the database that the column derives from -** 3 The name of the table that the column derives from -** 4 The name of the table column that the result column derives from +** If the nBytes parameter is 0 and the blob of memory has not yet been +** allocated, a null pointer is returned. If the blob has already been +** allocated, it is returned as normal. ** -** If the result is not a simple column reference (if it is an expression -** or a constant) then useTypes 2, 3, and 4 return NULL. +** Just before the shared-btree is closed, the function passed as the +** xFree argument when the memory allocation was made is invoked on the +** blob of allocated memory. The xFree function should not call sqlite3_free() +** on the memory, the btree layer does that. */ -static const void *columnName( - sqlite3_stmt *pStmt, - int N, - const void *(*xFunc)(Mem*), - int useType -){ - const void *ret = 0; - Vdbe *p = (Vdbe *)pStmt; - int n; - sqlite3 *db = p->db; - - assert( db!=0 ); - n = sqlite3_column_count(pStmt); - if( N=0 ){ - N += useType*n; - sqlite3_mutex_enter(db->mutex); - assert( db->mallocFailed==0 ); - ret = xFunc(&p->aColName[N]); - /* A malloc may have failed inside of the xFunc() call. If this - ** is the case, clear the mallocFailed flag and return NULL. - */ - if( db->mallocFailed ){ - db->mallocFailed = 0; - ret = 0; - } - sqlite3_mutex_leave(db->mutex); +SQLITE_PRIVATE void *sqlite3BtreeSchema(Btree *p, int nBytes, void(*xFree)(void *)){ + BtShared *pBt = p->pBt; + sqlite3BtreeEnter(p); + if( !pBt->pSchema && nBytes ){ + pBt->pSchema = sqlite3DbMallocZero(0, nBytes); + pBt->xFreeSchema = xFree; } - return ret; + sqlite3BtreeLeave(p); + return pBt->pSchema; } /* -** Return the name of the Nth column of the result set returned by SQL -** statement pStmt. +** Return SQLITE_LOCKED_SHAREDCACHE if another user of the same shared +** btree as the argument handle holds an exclusive lock on the +** sqlite_master table. Otherwise SQLITE_OK. */ -SQLITE_API const char *sqlite3_column_name(sqlite3_stmt *pStmt, int N){ - return columnName( - pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_NAME); -} -#ifndef SQLITE_OMIT_UTF16 -SQLITE_API const void *sqlite3_column_name16(sqlite3_stmt *pStmt, int N){ - return columnName( - pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_NAME); +SQLITE_PRIVATE int sqlite3BtreeSchemaLocked(Btree *p){ + int rc; + assert( sqlite3_mutex_held(p->db->mutex) ); + sqlite3BtreeEnter(p); + rc = querySharedCacheTableLock(p, MASTER_ROOT, READ_LOCK); + assert( rc==SQLITE_OK || rc==SQLITE_LOCKED_SHAREDCACHE ); + sqlite3BtreeLeave(p); + return rc; } -#endif + +#ifndef SQLITE_OMIT_SHARED_CACHE /* -** Constraint: If you have ENABLE_COLUMN_METADATA then you must -** not define OMIT_DECLTYPE. +** Obtain a lock on the table whose root page is iTab. The +** lock is a write lock if isWritelock is true or a read lock +** if it is false. */ -#if defined(SQLITE_OMIT_DECLTYPE) && defined(SQLITE_ENABLE_COLUMN_METADATA) -# error "Must not define both SQLITE_OMIT_DECLTYPE \ - and SQLITE_ENABLE_COLUMN_METADATA" +SQLITE_PRIVATE int sqlite3BtreeLockTable(Btree *p, int iTab, u8 isWriteLock){ + int rc = SQLITE_OK; + assert( p->inTrans!=TRANS_NONE ); + if( p->sharable ){ + u8 lockType = READ_LOCK + isWriteLock; + assert( READ_LOCK+1==WRITE_LOCK ); + assert( isWriteLock==0 || isWriteLock==1 ); + + sqlite3BtreeEnter(p); + rc = querySharedCacheTableLock(p, iTab, lockType); + if( rc==SQLITE_OK ){ + rc = setSharedCacheTableLock(p, iTab, lockType); + } + sqlite3BtreeLeave(p); + } + return rc; +} #endif -#ifndef SQLITE_OMIT_DECLTYPE +#ifndef SQLITE_OMIT_INCRBLOB /* -** Return the column declaration type (if applicable) of the 'i'th column -** of the result set of SQL statement pStmt. +** Argument pCsr must be a cursor opened for writing on an +** INTKEY table currently pointing at a valid table entry. +** This function modifies the data stored as part of that entry. +** +** Only the data content may only be modified, it is not possible to +** change the length of the data stored. If this function is called with +** parameters that attempt to write past the end of the existing data, +** no modifications are made and SQLITE_CORRUPT is returned. */ -SQLITE_API const char *sqlite3_column_decltype(sqlite3_stmt *pStmt, int N){ - return columnName( - pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_DECLTYPE); -} -#ifndef SQLITE_OMIT_UTF16 -SQLITE_API const void *sqlite3_column_decltype16(sqlite3_stmt *pStmt, int N){ - return columnName( - pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_DECLTYPE); +SQLITE_PRIVATE int sqlite3BtreePutData(BtCursor *pCsr, u32 offset, u32 amt, void *z){ + int rc; + assert( cursorHoldsMutex(pCsr) ); + assert( sqlite3_mutex_held(pCsr->pBtree->db->mutex) ); + assert( pCsr->isIncrblobHandle ); + + rc = restoreCursorPosition(pCsr); + if( rc!=SQLITE_OK ){ + return rc; + } + assert( pCsr->eState!=CURSOR_REQUIRESEEK ); + if( pCsr->eState!=CURSOR_VALID ){ + return SQLITE_ABORT; + } + + /* Check some assumptions: + ** (a) the cursor is open for writing, + ** (b) there is a read/write transaction open, + ** (c) the connection holds a write-lock on the table (if required), + ** (d) there are no conflicting read-locks, and + ** (e) the cursor points at a valid row of an intKey table. + */ + if( !pCsr->wrFlag ){ + return SQLITE_READONLY; + } + assert( (pCsr->pBt->btsFlags & BTS_READ_ONLY)==0 + && pCsr->pBt->inTransaction==TRANS_WRITE ); + assert( hasSharedCacheTableLock(pCsr->pBtree, pCsr->pgnoRoot, 0, 2) ); + assert( !hasReadConflicts(pCsr->pBtree, pCsr->pgnoRoot) ); + assert( pCsr->apPage[pCsr->iPage]->intKey ); + + return accessPayload(pCsr, offset, amt, (unsigned char *)z, 1); } -#endif /* SQLITE_OMIT_UTF16 */ -#endif /* SQLITE_OMIT_DECLTYPE */ -#ifdef SQLITE_ENABLE_COLUMN_METADATA -/* -** Return the name of the database from which a result column derives. -** NULL is returned if the result column is an expression or constant or -** anything else which is not an unabiguous reference to a database column. +/* +** Set a flag on this cursor to cache the locations of pages from the +** overflow list for the current row. This is used by cursors opened +** for incremental blob IO only. +** +** This function sets a flag only. The actual page location cache +** (stored in BtCursor.aOverflow[]) is allocated and used by function +** accessPayload() (the worker function for sqlite3BtreeData() and +** sqlite3BtreePutData()). */ -SQLITE_API const char *sqlite3_column_database_name(sqlite3_stmt *pStmt, int N){ - return columnName( - pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_DATABASE); -} -#ifndef SQLITE_OMIT_UTF16 -SQLITE_API const void *sqlite3_column_database_name16(sqlite3_stmt *pStmt, int N){ - return columnName( - pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_DATABASE); +SQLITE_PRIVATE void sqlite3BtreeCacheOverflow(BtCursor *pCur){ + assert( cursorHoldsMutex(pCur) ); + assert( sqlite3_mutex_held(pCur->pBtree->db->mutex) ); + invalidateOverflowCache(pCur); + pCur->isIncrblobHandle = 1; } -#endif /* SQLITE_OMIT_UTF16 */ +#endif /* -** Return the name of the table from which a result column derives. -** NULL is returned if the result column is an expression or constant or -** anything else which is not an unabiguous reference to a database column. +** Set both the "read version" (single byte at byte offset 18) and +** "write version" (single byte at byte offset 19) fields in the database +** header to iVersion. */ -SQLITE_API const char *sqlite3_column_table_name(sqlite3_stmt *pStmt, int N){ - return columnName( - pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_TABLE); -} -#ifndef SQLITE_OMIT_UTF16 -SQLITE_API const void *sqlite3_column_table_name16(sqlite3_stmt *pStmt, int N){ - return columnName( - pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_TABLE); +SQLITE_PRIVATE int sqlite3BtreeSetVersion(Btree *pBtree, int iVersion){ + BtShared *pBt = pBtree->pBt; + int rc; /* Return code */ + + assert( iVersion==1 || iVersion==2 ); + + /* If setting the version fields to 1, do not automatically open the + ** WAL connection, even if the version fields are currently set to 2. + */ + pBt->btsFlags &= ~BTS_NO_WAL; + if( iVersion==1 ) pBt->btsFlags |= BTS_NO_WAL; + + rc = sqlite3BtreeBeginTrans(pBtree, 0); + if( rc==SQLITE_OK ){ + u8 *aData = pBt->pPage1->aData; + if( aData[18]!=(u8)iVersion || aData[19]!=(u8)iVersion ){ + rc = sqlite3BtreeBeginTrans(pBtree, 2); + if( rc==SQLITE_OK ){ + rc = sqlite3PagerWrite(pBt->pPage1->pDbPage); + if( rc==SQLITE_OK ){ + aData[18] = (u8)iVersion; + aData[19] = (u8)iVersion; + } + } + } + } + + pBt->btsFlags &= ~BTS_NO_WAL; + return rc; } -#endif /* SQLITE_OMIT_UTF16 */ +/************** End of btree.c ***********************************************/ +/************** Begin file backup.c ******************************************/ /* -** Return the name of the table column from which a result column derives. -** NULL is returned if the result column is an expression or constant or -** anything else which is not an unabiguous reference to a database column. +** 2009 January 28 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** This file contains the implementation of the sqlite3_backup_XXX() +** API functions and the related features. */ -SQLITE_API const char *sqlite3_column_origin_name(sqlite3_stmt *pStmt, int N){ - return columnName( - pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_COLUMN); -} -#ifndef SQLITE_OMIT_UTF16 -SQLITE_API const void *sqlite3_column_origin_name16(sqlite3_stmt *pStmt, int N){ - return columnName( - pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_COLUMN); -} -#endif /* SQLITE_OMIT_UTF16 */ -#endif /* SQLITE_ENABLE_COLUMN_METADATA */ +/* Macro to find the minimum of two numeric values. +*/ +#ifndef MIN +# define MIN(x,y) ((x)<(y)?(x):(y)) +#endif -/******************************* sqlite3_bind_ *************************** -** -** Routines used to attach values to wildcards in a compiled SQL statement. +/* +** Structure allocated for each backup operation. */ +struct sqlite3_backup { + sqlite3* pDestDb; /* Destination database handle */ + Btree *pDest; /* Destination b-tree file */ + u32 iDestSchema; /* Original schema cookie in destination */ + int bDestLocked; /* True once a write-transaction is open on pDest */ + + Pgno iNext; /* Page number of the next source page to copy */ + sqlite3* pSrcDb; /* Source database handle */ + Btree *pSrc; /* Source b-tree file */ + + int rc; /* Backup process error code */ + + /* These two variables are set by every call to backup_step(). They are + ** read by calls to backup_remaining() and backup_pagecount(). + */ + Pgno nRemaining; /* Number of pages left to copy */ + Pgno nPagecount; /* Total number of pages to copy */ + + int isAttached; /* True once backup has been registered with pager */ + sqlite3_backup *pNext; /* Next backup associated with source pager */ +}; + /* -** Unbind the value bound to variable i in virtual machine p. This is the -** the same as binding a NULL value to the column. If the "i" parameter is -** out of range, then SQLITE_RANGE is returned. Othewise SQLITE_OK. +** THREAD SAFETY NOTES: ** -** A successful evaluation of this routine acquires the mutex on p. -** the mutex is released if any kind of error occurs. +** Once it has been created using backup_init(), a single sqlite3_backup +** structure may be accessed via two groups of thread-safe entry points: ** -** The error code stored in database p->db is overwritten with the return -** value in any case. +** * Via the sqlite3_backup_XXX() API function backup_step() and +** backup_finish(). Both these functions obtain the source database +** handle mutex and the mutex associated with the source BtShared +** structure, in that order. +** +** * Via the BackupUpdate() and BackupRestart() functions, which are +** invoked by the pager layer to report various state changes in +** the page cache associated with the source database. The mutex +** associated with the source database BtShared structure will always +** be held when either of these functions are invoked. +** +** The other sqlite3_backup_XXX() API functions, backup_remaining() and +** backup_pagecount() are not thread-safe functions. If they are called +** while some other thread is calling backup_step() or backup_finish(), +** the values returned may be invalid. There is no way for a call to +** BackupUpdate() or BackupRestart() to interfere with backup_remaining() +** or backup_pagecount(). +** +** Depending on the SQLite configuration, the database handles and/or +** the Btree objects may have their own mutexes that require locking. +** Non-sharable Btrees (in-memory databases for example), do not have +** associated mutexes. */ -static int vdbeUnbind(Vdbe *p, int i){ - Mem *pVar; - if( p==0 ) return SQLITE_MISUSE; - sqlite3_mutex_enter(p->db->mutex); - if( p->magic!=VDBE_MAGIC_RUN || p->pc>=0 ){ - sqlite3Error(p->db, SQLITE_MISUSE, 0); - sqlite3_mutex_leave(p->db->mutex); - return SQLITE_MISUSE; - } - if( i<1 || i>p->nVar ){ - sqlite3Error(p->db, SQLITE_RANGE, 0); - sqlite3_mutex_leave(p->db->mutex); - return SQLITE_RANGE; - } - i--; - pVar = &p->aVar[i]; - sqlite3VdbeMemRelease(pVar); - pVar->flags = MEM_Null; - sqlite3Error(p->db, SQLITE_OK, 0); - return SQLITE_OK; -} /* -** Bind a text or BLOB value. +** Return a pointer corresponding to database zDb (i.e. "main", "temp") +** in connection handle pDb. If such a database cannot be found, return +** a NULL pointer and write an error message to pErrorDb. +** +** If the "temp" database is requested, it may need to be opened by this +** function. If an error occurs while doing so, return 0 and write an +** error message to pErrorDb. */ -static int bindText( - sqlite3_stmt *pStmt, /* The statement to bind against */ - int i, /* Index of the parameter to bind */ - const void *zData, /* Pointer to the data to be bound */ - int nData, /* Number of bytes of data to be bound */ - void (*xDel)(void*), /* Destructor for the data */ - u8 encoding /* Encoding for the data */ -){ - Vdbe *p = (Vdbe *)pStmt; - Mem *pVar; - int rc; +static Btree *findBtree(sqlite3 *pErrorDb, sqlite3 *pDb, const char *zDb){ + int i = sqlite3FindDbName(pDb, zDb); - rc = vdbeUnbind(p, i); - if( rc==SQLITE_OK ){ - if( zData!=0 ){ - pVar = &p->aVar[i-1]; - rc = sqlite3VdbeMemSetStr(pVar, zData, nData, encoding, xDel); - if( rc==SQLITE_OK && encoding!=0 ){ - rc = sqlite3VdbeChangeEncoding(pVar, ENC(p->db)); + if( i==1 ){ + Parse *pParse; + int rc = 0; + pParse = sqlite3StackAllocZero(pErrorDb, sizeof(*pParse)); + if( pParse==0 ){ + sqlite3Error(pErrorDb, SQLITE_NOMEM, "out of memory"); + rc = SQLITE_NOMEM; + }else{ + pParse->db = pDb; + if( sqlite3OpenTempDatabase(pParse) ){ + sqlite3Error(pErrorDb, pParse->rc, "%s", pParse->zErrMsg); + rc = SQLITE_ERROR; } - sqlite3Error(p->db, rc, 0); - rc = sqlite3ApiExit(p->db, rc); + sqlite3DbFree(pErrorDb, pParse->zErrMsg); + sqlite3StackFree(pErrorDb, pParse); + } + if( rc ){ + return 0; } - sqlite3_mutex_leave(p->db->mutex); } - return rc; -} + if( i<0 ){ + sqlite3Error(pErrorDb, SQLITE_ERROR, "unknown database %s", zDb); + return 0; + } + + return pDb->aDb[i].pBt; +} /* -** Bind a blob value to an SQL statement variable. +** Attempt to set the page size of the destination to match the page size +** of the source. */ -SQLITE_API int sqlite3_bind_blob( - sqlite3_stmt *pStmt, - int i, - const void *zData, - int nData, - void (*xDel)(void*) -){ - return bindText(pStmt, i, zData, nData, xDel, 0); -} -SQLITE_API int sqlite3_bind_double(sqlite3_stmt *pStmt, int i, double rValue){ +static int setDestPgsz(sqlite3_backup *p){ int rc; - Vdbe *p = (Vdbe *)pStmt; - rc = vdbeUnbind(p, i); - if( rc==SQLITE_OK ){ - sqlite3VdbeMemSetDouble(&p->aVar[i-1], rValue); - sqlite3_mutex_leave(p->db->mutex); - } + rc = sqlite3BtreeSetPageSize(p->pDest,sqlite3BtreeGetPageSize(p->pSrc),-1,0); return rc; } -SQLITE_API int sqlite3_bind_int(sqlite3_stmt *p, int i, int iValue){ - return sqlite3_bind_int64(p, i, (i64)iValue); -} -SQLITE_API int sqlite3_bind_int64(sqlite3_stmt *pStmt, int i, sqlite_int64 iValue){ - int rc; - Vdbe *p = (Vdbe *)pStmt; - rc = vdbeUnbind(p, i); - if( rc==SQLITE_OK ){ - sqlite3VdbeMemSetInt64(&p->aVar[i-1], iValue); - sqlite3_mutex_leave(p->db->mutex); + +/* +** Create an sqlite3_backup process to copy the contents of zSrcDb from +** connection handle pSrcDb to zDestDb in pDestDb. If successful, return +** a pointer to the new sqlite3_backup object. +** +** If an error occurs, NULL is returned and an error code and error message +** stored in database handle pDestDb. +*/ +SQLITE_API sqlite3_backup *sqlite3_backup_init( + sqlite3* pDestDb, /* Database to write to */ + const char *zDestDb, /* Name of database within pDestDb */ + sqlite3* pSrcDb, /* Database connection to read from */ + const char *zSrcDb /* Name of database within pSrcDb */ +){ + sqlite3_backup *p; /* Value to return */ + + /* Lock the source database handle. The destination database + ** handle is not locked in this routine, but it is locked in + ** sqlite3_backup_step(). The user is required to ensure that no + ** other thread accesses the destination handle for the duration + ** of the backup operation. Any attempt to use the destination + ** database connection while a backup is in progress may cause + ** a malfunction or a deadlock. + */ + sqlite3_mutex_enter(pSrcDb->mutex); + sqlite3_mutex_enter(pDestDb->mutex); + + if( pSrcDb==pDestDb ){ + sqlite3Error( + pDestDb, SQLITE_ERROR, "source and destination must be distinct" + ); + p = 0; + }else { + /* Allocate space for a new sqlite3_backup object... + ** EVIDENCE-OF: R-64852-21591 The sqlite3_backup object is created by a + ** call to sqlite3_backup_init() and is destroyed by a call to + ** sqlite3_backup_finish(). */ + p = (sqlite3_backup *)sqlite3_malloc(sizeof(sqlite3_backup)); + if( !p ){ + sqlite3Error(pDestDb, SQLITE_NOMEM, 0); + } } - return rc; -} -SQLITE_API int sqlite3_bind_null(sqlite3_stmt *pStmt, int i){ - int rc; - Vdbe *p = (Vdbe*)pStmt; - rc = vdbeUnbind(p, i); - if( rc==SQLITE_OK ){ - sqlite3_mutex_leave(p->db->mutex); + + /* If the allocation succeeded, populate the new object. */ + if( p ){ + memset(p, 0, sizeof(sqlite3_backup)); + p->pSrc = findBtree(pDestDb, pSrcDb, zSrcDb); + p->pDest = findBtree(pDestDb, pDestDb, zDestDb); + p->pDestDb = pDestDb; + p->pSrcDb = pSrcDb; + p->iNext = 1; + p->isAttached = 0; + + if( 0==p->pSrc || 0==p->pDest || setDestPgsz(p)==SQLITE_NOMEM ){ + /* One (or both) of the named databases did not exist or an OOM + ** error was hit. The error has already been written into the + ** pDestDb handle. All that is left to do here is free the + ** sqlite3_backup structure. + */ + sqlite3_free(p); + p = 0; + } } - return rc; + if( p ){ + p->pSrc->nBackup++; + } + + sqlite3_mutex_leave(pDestDb->mutex); + sqlite3_mutex_leave(pSrcDb->mutex); + return p; } -SQLITE_API int sqlite3_bind_text( - sqlite3_stmt *pStmt, - int i, - const char *zData, - int nData, - void (*xDel)(void*) -){ - return bindText(pStmt, i, zData, nData, xDel, SQLITE_UTF8); -} -#ifndef SQLITE_OMIT_UTF16 -SQLITE_API int sqlite3_bind_text16( - sqlite3_stmt *pStmt, - int i, - const void *zData, - int nData, - void (*xDel)(void*) -){ - return bindText(pStmt, i, zData, nData, xDel, SQLITE_UTF16NATIVE); + +/* +** Argument rc is an SQLite error code. Return true if this error is +** considered fatal if encountered during a backup operation. All errors +** are considered fatal except for SQLITE_BUSY and SQLITE_LOCKED. +*/ +static int isFatalError(int rc){ + return (rc!=SQLITE_OK && rc!=SQLITE_BUSY && ALWAYS(rc!=SQLITE_LOCKED)); } -#endif /* SQLITE_OMIT_UTF16 */ -SQLITE_API int sqlite3_bind_value(sqlite3_stmt *pStmt, int i, const sqlite3_value *pValue){ - int rc; - switch( pValue->type ){ - case SQLITE_INTEGER: { - rc = sqlite3_bind_int64(pStmt, i, pValue->u.i); - break; - } - case SQLITE_FLOAT: { - rc = sqlite3_bind_double(pStmt, i, pValue->r); - break; - } - case SQLITE_BLOB: { - if( pValue->flags & MEM_Zero ){ - rc = sqlite3_bind_zeroblob(pStmt, i, pValue->u.nZero); - }else{ - rc = sqlite3_bind_blob(pStmt, i, pValue->z, pValue->n,SQLITE_TRANSIENT); - } - break; - } - case SQLITE_TEXT: { - rc = bindText(pStmt,i, pValue->z, pValue->n, SQLITE_TRANSIENT, - pValue->enc); - break; - } - default: { - rc = sqlite3_bind_null(pStmt, i); - break; + +/* +** Parameter zSrcData points to a buffer containing the data for +** page iSrcPg from the source database. Copy this data into the +** destination database. +*/ +static int backupOnePage(sqlite3_backup *p, Pgno iSrcPg, const u8 *zSrcData){ + Pager * const pDestPager = sqlite3BtreePager(p->pDest); + const int nSrcPgsz = sqlite3BtreeGetPageSize(p->pSrc); + int nDestPgsz = sqlite3BtreeGetPageSize(p->pDest); + const int nCopy = MIN(nSrcPgsz, nDestPgsz); + const i64 iEnd = (i64)iSrcPg*(i64)nSrcPgsz; +#ifdef SQLITE_HAS_CODEC + int nSrcReserve = sqlite3BtreeGetReserve(p->pSrc); + int nDestReserve = sqlite3BtreeGetReserve(p->pDest); +#endif + + int rc = SQLITE_OK; + i64 iOff; + + assert( p->bDestLocked ); + assert( !isFatalError(p->rc) ); + assert( iSrcPg!=PENDING_BYTE_PAGE(p->pSrc->pBt) ); + assert( zSrcData ); + + /* Catch the case where the destination is an in-memory database and the + ** page sizes of the source and destination differ. + */ + if( nSrcPgsz!=nDestPgsz && sqlite3PagerIsMemdb(pDestPager) ){ + rc = SQLITE_READONLY; + } + +#ifdef SQLITE_HAS_CODEC + /* Backup is not possible if the page size of the destination is changing + ** and a codec is in use. + */ + if( nSrcPgsz!=nDestPgsz && sqlite3PagerGetCodec(pDestPager)!=0 ){ + rc = SQLITE_READONLY; + } + + /* Backup is not possible if the number of bytes of reserve space differ + ** between source and destination. If there is a difference, try to + ** fix the destination to agree with the source. If that is not possible, + ** then the backup cannot proceed. + */ + if( nSrcReserve!=nDestReserve ){ + u32 newPgsz = nSrcPgsz; + rc = sqlite3PagerSetPagesize(pDestPager, &newPgsz, nSrcReserve); + if( rc==SQLITE_OK && newPgsz!=nSrcPgsz ) rc = SQLITE_READONLY; + } +#endif + + /* This loop runs once for each destination page spanned by the source + ** page. For each iteration, variable iOff is set to the byte offset + ** of the destination page. + */ + for(iOff=iEnd-(i64)nSrcPgsz; rc==SQLITE_OK && iOffpDest->pBt) ) continue; + if( SQLITE_OK==(rc = sqlite3PagerGet(pDestPager, iDest, &pDestPg)) + && SQLITE_OK==(rc = sqlite3PagerWrite(pDestPg)) + ){ + const u8 *zIn = &zSrcData[iOff%nSrcPgsz]; + u8 *zDestData = sqlite3PagerGetData(pDestPg); + u8 *zOut = &zDestData[iOff%nDestPgsz]; + + /* Copy the data from the source page into the destination page. + ** Then clear the Btree layer MemPage.isInit flag. Both this module + ** and the pager code use this trick (clearing the first byte + ** of the page 'extra' space to invalidate the Btree layers + ** cached parse of the page). MemPage.isInit is marked + ** "MUST BE FIRST" for this purpose. + */ + memcpy(zOut, zIn, nCopy); + ((u8 *)sqlite3PagerGetExtra(pDestPg))[0] = 0; } + sqlite3PagerUnref(pDestPg); } + return rc; } -SQLITE_API int sqlite3_bind_zeroblob(sqlite3_stmt *pStmt, int i, int n){ - int rc; - Vdbe *p = (Vdbe *)pStmt; - rc = vdbeUnbind(p, i); - if( rc==SQLITE_OK ){ - sqlite3VdbeMemSetZeroBlob(&p->aVar[i-1], n); - sqlite3_mutex_leave(p->db->mutex); + +/* +** If pFile is currently larger than iSize bytes, then truncate it to +** exactly iSize bytes. If pFile is not larger than iSize bytes, then +** this function is a no-op. +** +** Return SQLITE_OK if everything is successful, or an SQLite error +** code if an error occurs. +*/ +static int backupTruncateFile(sqlite3_file *pFile, i64 iSize){ + i64 iCurrent; + int rc = sqlite3OsFileSize(pFile, &iCurrent); + if( rc==SQLITE_OK && iCurrent>iSize ){ + rc = sqlite3OsTruncate(pFile, iSize); } return rc; } /* -** Return the number of wildcards that can be potentially bound to. -** This routine is added to support DBD::SQLite. +** Register this backup object with the associated source pager for +** callbacks when pages are changed or the cache invalidated. */ -SQLITE_API int sqlite3_bind_parameter_count(sqlite3_stmt *pStmt){ - Vdbe *p = (Vdbe*)pStmt; - return p ? p->nVar : 0; +static void attachBackupObject(sqlite3_backup *p){ + sqlite3_backup **pp; + assert( sqlite3BtreeHoldsMutex(p->pSrc) ); + pp = sqlite3PagerBackupPtr(sqlite3BtreePager(p->pSrc)); + p->pNext = *pp; + *pp = p; + p->isAttached = 1; } /* -** Create a mapping from variable numbers to variable names -** in the Vdbe.azVar[] array, if such a mapping does not already -** exist. +** Copy nPage pages from the source b-tree to the destination. */ -static void createVarMap(Vdbe *p){ - if( !p->okVar ){ - int j; - Op *pOp; - sqlite3_mutex_enter(p->db->mutex); - /* The race condition here is harmless. If two threads call this - ** routine on the same Vdbe at the same time, they both might end - ** up initializing the Vdbe.azVar[] array. That is a little extra - ** work but it results in the same answer. +SQLITE_API int sqlite3_backup_step(sqlite3_backup *p, int nPage){ + int rc; + int destMode; /* Destination journal mode */ + int pgszSrc = 0; /* Source page size */ + int pgszDest = 0; /* Destination page size */ + + sqlite3_mutex_enter(p->pSrcDb->mutex); + sqlite3BtreeEnter(p->pSrc); + if( p->pDestDb ){ + sqlite3_mutex_enter(p->pDestDb->mutex); + } + + rc = p->rc; + if( !isFatalError(rc) ){ + Pager * const pSrcPager = sqlite3BtreePager(p->pSrc); /* Source pager */ + Pager * const pDestPager = sqlite3BtreePager(p->pDest); /* Dest pager */ + int ii; /* Iterator variable */ + int nSrcPage = -1; /* Size of source db in pages */ + int bCloseTrans = 0; /* True if src db requires unlocking */ + + /* If the source pager is currently in a write-transaction, return + ** SQLITE_BUSY immediately. + */ + if( p->pDestDb && p->pSrc->pBt->inTransaction==TRANS_WRITE ){ + rc = SQLITE_BUSY; + }else{ + rc = SQLITE_OK; + } + + /* Lock the destination database, if it is not locked already. */ + if( SQLITE_OK==rc && p->bDestLocked==0 + && SQLITE_OK==(rc = sqlite3BtreeBeginTrans(p->pDest, 2)) + ){ + p->bDestLocked = 1; + sqlite3BtreeGetMeta(p->pDest, BTREE_SCHEMA_VERSION, &p->iDestSchema); + } + + /* If there is no open read-transaction on the source database, open + ** one now. If a transaction is opened here, then it will be closed + ** before this function exits. + */ + if( rc==SQLITE_OK && 0==sqlite3BtreeIsInReadTrans(p->pSrc) ){ + rc = sqlite3BtreeBeginTrans(p->pSrc, 0); + bCloseTrans = 1; + } + + /* Do not allow backup if the destination database is in WAL mode + ** and the page sizes are different between source and destination */ + pgszSrc = sqlite3BtreeGetPageSize(p->pSrc); + pgszDest = sqlite3BtreeGetPageSize(p->pDest); + destMode = sqlite3PagerGetJournalMode(sqlite3BtreePager(p->pDest)); + if( SQLITE_OK==rc && destMode==PAGER_JOURNALMODE_WAL && pgszSrc!=pgszDest ){ + rc = SQLITE_READONLY; + } + + /* Now that there is a read-lock on the source database, query the + ** source pager for the number of pages in the database. */ - for(j=0, pOp=p->aOp; jnOp; j++, pOp++){ - if( pOp->opcode==OP_Variable ){ - assert( pOp->p1>0 && pOp->p1<=p->nVar ); - p->azVar[pOp->p1-1] = pOp->p4.z; + nSrcPage = (int)sqlite3BtreeLastPage(p->pSrc); + assert( nSrcPage>=0 ); + for(ii=0; (nPage<0 || iiiNext<=(Pgno)nSrcPage && !rc; ii++){ + const Pgno iSrcPg = p->iNext; /* Source page number */ + if( iSrcPg!=PENDING_BYTE_PAGE(p->pSrc->pBt) ){ + DbPage *pSrcPg; /* Source page object */ + rc = sqlite3PagerGet(pSrcPager, iSrcPg, &pSrcPg); + if( rc==SQLITE_OK ){ + rc = backupOnePage(p, iSrcPg, sqlite3PagerGetData(pSrcPg)); + sqlite3PagerUnref(pSrcPg); + } + } + p->iNext++; + } + if( rc==SQLITE_OK ){ + p->nPagecount = nSrcPage; + p->nRemaining = nSrcPage+1-p->iNext; + if( p->iNext>(Pgno)nSrcPage ){ + rc = SQLITE_DONE; + }else if( !p->isAttached ){ + attachBackupObject(p); } } - p->okVar = 1; - sqlite3_mutex_leave(p->db->mutex); + + /* Update the schema version field in the destination database. This + ** is to make sure that the schema-version really does change in + ** the case where the source and destination databases have the + ** same schema version. + */ + if( rc==SQLITE_DONE ){ + rc = sqlite3BtreeUpdateMeta(p->pDest,1,p->iDestSchema+1); + if( rc==SQLITE_OK ){ + if( p->pDestDb ){ + sqlite3ResetAllSchemasOfConnection(p->pDestDb); + } + if( destMode==PAGER_JOURNALMODE_WAL ){ + rc = sqlite3BtreeSetVersion(p->pDest, 2); + } + } + if( rc==SQLITE_OK ){ + int nDestTruncate; + /* Set nDestTruncate to the final number of pages in the destination + ** database. The complication here is that the destination page + ** size may be different to the source page size. + ** + ** If the source page size is smaller than the destination page size, + ** round up. In this case the call to sqlite3OsTruncate() below will + ** fix the size of the file. However it is important to call + ** sqlite3PagerTruncateImage() here so that any pages in the + ** destination file that lie beyond the nDestTruncate page mark are + ** journalled by PagerCommitPhaseOne() before they are destroyed + ** by the file truncation. + */ + assert( pgszSrc==sqlite3BtreeGetPageSize(p->pSrc) ); + assert( pgszDest==sqlite3BtreeGetPageSize(p->pDest) ); + if( pgszSrcpDest->pBt) ){ + nDestTruncate--; + } + }else{ + nDestTruncate = nSrcPage * (pgszSrc/pgszDest); + } + sqlite3PagerTruncateImage(pDestPager, nDestTruncate); + + if( pgszSrc= iSize || ( + nDestTruncate==(int)(PENDING_BYTE_PAGE(p->pDest->pBt)-1) + && iSize>=PENDING_BYTE && iSize<=PENDING_BYTE+pgszDest + )); + + /* This call ensures that all data required to recreate the original + ** database has been stored in the journal for pDestPager and the + ** journal synced to disk. So at this point we may safely modify + ** the database file in any way, knowing that if a power failure + ** occurs, the original database will be reconstructed from the + ** journal file. */ + rc = sqlite3PagerCommitPhaseOne(pDestPager, 0, 1); + + /* Write the extra pages and truncate the database file as required */ + iEnd = MIN(PENDING_BYTE + pgszDest, iSize); + for( + iOff=PENDING_BYTE+pgszSrc; + rc==SQLITE_OK && iOffpDest, 0)) + ){ + rc = SQLITE_DONE; + } + } + } + + /* If bCloseTrans is true, then this function opened a read transaction + ** on the source database. Close the read transaction here. There is + ** no need to check the return values of the btree methods here, as + ** "committing" a read-only transaction cannot fail. + */ + if( bCloseTrans ){ + TESTONLY( int rc2 ); + TESTONLY( rc2 = ) sqlite3BtreeCommitPhaseOne(p->pSrc, 0); + TESTONLY( rc2 |= ) sqlite3BtreeCommitPhaseTwo(p->pSrc, 0); + assert( rc2==SQLITE_OK ); + } + + if( rc==SQLITE_IOERR_NOMEM ){ + rc = SQLITE_NOMEM; + } + p->rc = rc; + } + if( p->pDestDb ){ + sqlite3_mutex_leave(p->pDestDb->mutex); } + sqlite3BtreeLeave(p->pSrc); + sqlite3_mutex_leave(p->pSrcDb->mutex); + return rc; } /* -** Return the name of a wildcard parameter. Return NULL if the index -** is out of range or if the wildcard is unnamed. -** -** The result is always UTF-8. +** Release all resources associated with an sqlite3_backup* handle. */ -SQLITE_API const char *sqlite3_bind_parameter_name(sqlite3_stmt *pStmt, int i){ - Vdbe *p = (Vdbe*)pStmt; - if( p==0 || i<1 || i>p->nVar ){ - return 0; +SQLITE_API int sqlite3_backup_finish(sqlite3_backup *p){ + sqlite3_backup **pp; /* Ptr to head of pagers backup list */ + MUTEX_LOGIC( sqlite3_mutex *mutex; ) /* Mutex to protect source database */ + int rc; /* Value to return */ + + /* Enter the mutexes */ + if( p==0 ) return SQLITE_OK; + sqlite3_mutex_enter(p->pSrcDb->mutex); + sqlite3BtreeEnter(p->pSrc); + MUTEX_LOGIC( mutex = p->pSrcDb->mutex; ) + if( p->pDestDb ){ + sqlite3_mutex_enter(p->pDestDb->mutex); } - createVarMap(p); - return p->azVar[i-1]; -} -/* -** Given a wildcard parameter name, return the index of the variable -** with that name. If there is no variable with the given name, -** return 0. -*/ -SQLITE_API int sqlite3_bind_parameter_index(sqlite3_stmt *pStmt, const char *zName){ - Vdbe *p = (Vdbe*)pStmt; - int i; - if( p==0 ){ - return 0; + /* Detach this backup from the source pager. */ + if( p->pDestDb ){ + p->pSrc->nBackup--; } - createVarMap(p); - if( zName ){ - for(i=0; inVar; i++){ - const char *z = p->azVar[i]; - if( z && strcmp(z,zName)==0 ){ - return i+1; - } + if( p->isAttached ){ + pp = sqlite3PagerBackupPtr(sqlite3BtreePager(p->pSrc)); + while( *pp!=p ){ + pp = &(*pp)->pNext; } + *pp = p->pNext; } - return 0; + + /* If a transaction is still open on the Btree, roll it back. */ + sqlite3BtreeRollback(p->pDest, SQLITE_OK); + + /* Set the error code of the destination database handle. */ + rc = (p->rc==SQLITE_DONE) ? SQLITE_OK : p->rc; + sqlite3Error(p->pDestDb, rc, 0); + + /* Exit the mutexes and free the backup context structure. */ + if( p->pDestDb ){ + sqlite3_mutex_leave(p->pDestDb->mutex); + } + sqlite3BtreeLeave(p->pSrc); + if( p->pDestDb ){ + /* EVIDENCE-OF: R-64852-21591 The sqlite3_backup object is created by a + ** call to sqlite3_backup_init() and is destroyed by a call to + ** sqlite3_backup_finish(). */ + sqlite3_free(p); + } + sqlite3_mutex_leave(mutex); + return rc; } /* -** Transfer all bindings from the first statement over to the second. +** Return the number of pages still to be backed up as of the most recent +** call to sqlite3_backup_step(). */ -SQLITE_PRIVATE int sqlite3TransferBindings(sqlite3_stmt *pFromStmt, sqlite3_stmt *pToStmt){ - Vdbe *pFrom = (Vdbe*)pFromStmt; - Vdbe *pTo = (Vdbe*)pToStmt; - int i; - assert( pTo->db==pFrom->db ); - assert( pTo->nVar==pFrom->nVar ); - sqlite3_mutex_enter(pTo->db->mutex); - for(i=0; inVar; i++){ - sqlite3VdbeMemMove(&pTo->aVar[i], &pFrom->aVar[i]); - } - sqlite3_mutex_leave(pTo->db->mutex); - return SQLITE_OK; +SQLITE_API int sqlite3_backup_remaining(sqlite3_backup *p){ + return p->nRemaining; } -#ifndef SQLITE_OMIT_DEPRECATED /* -** Deprecated external interface. Internal/core SQLite code -** should call sqlite3TransferBindings. -** -** Is is misuse to call this routine with statements from different -** database connections. But as this is a deprecated interface, we -** will not bother to check for that condition. -** -** If the two statements contain a different number of bindings, then -** an SQLITE_ERROR is returned. Nothing else can go wrong, so otherwise -** SQLITE_OK is returned. +** Return the total number of pages in the source database as of the most +** recent call to sqlite3_backup_step(). */ -SQLITE_API int sqlite3_transfer_bindings(sqlite3_stmt *pFromStmt, sqlite3_stmt *pToStmt){ - Vdbe *pFrom = (Vdbe*)pFromStmt; - Vdbe *pTo = (Vdbe*)pToStmt; - if( pFrom->nVar!=pTo->nVar ){ - return SQLITE_ERROR; - } - return sqlite3TransferBindings(pFromStmt, pToStmt); +SQLITE_API int sqlite3_backup_pagecount(sqlite3_backup *p){ + return p->nPagecount; } -#endif /* -** Return the sqlite3* database handle to which the prepared statement given -** in the argument belongs. This is the same database handle that was -** the first argument to the sqlite3_prepare() that was used to create -** the statement in the first place. +** This function is called after the contents of page iPage of the +** source database have been modified. If page iPage has already been +** copied into the destination database, then the data written to the +** destination is now invalidated. The destination copy of iPage needs +** to be updated with the new data before the backup operation is +** complete. +** +** It is assumed that the mutex associated with the BtShared object +** corresponding to the source database is held when this function is +** called. */ -SQLITE_API sqlite3 *sqlite3_db_handle(sqlite3_stmt *pStmt){ - return pStmt ? ((Vdbe*)pStmt)->db : 0; +SQLITE_PRIVATE void sqlite3BackupUpdate(sqlite3_backup *pBackup, Pgno iPage, const u8 *aData){ + sqlite3_backup *p; /* Iterator variable */ + for(p=pBackup; p; p=p->pNext){ + assert( sqlite3_mutex_held(p->pSrc->pBt->mutex) ); + if( !isFatalError(p->rc) && iPageiNext ){ + /* The backup process p has already copied page iPage. But now it + ** has been modified by a transaction on the source pager. Copy + ** the new data into the backup. + */ + int rc; + assert( p->pDestDb ); + sqlite3_mutex_enter(p->pDestDb->mutex); + rc = backupOnePage(p, iPage, aData); + sqlite3_mutex_leave(p->pDestDb->mutex); + assert( rc!=SQLITE_BUSY && rc!=SQLITE_LOCKED ); + if( rc!=SQLITE_OK ){ + p->rc = rc; + } + } + } } /* -** Return a pointer to the next prepared statement after pStmt associated -** with database connection pDb. If pStmt is NULL, return the first -** prepared statement for the database connection. Return NULL if there -** are no more. +** Restart the backup process. This is called when the pager layer +** detects that the database has been modified by an external database +** connection. In this case there is no way of knowing which of the +** pages that have been copied into the destination database are still +** valid and which are not, so the entire process needs to be restarted. +** +** It is assumed that the mutex associated with the BtShared object +** corresponding to the source database is held when this function is +** called. */ -SQLITE_API sqlite3_stmt *sqlite3_next_stmt(sqlite3 *pDb, sqlite3_stmt *pStmt){ - sqlite3_stmt *pNext; - sqlite3_mutex_enter(pDb->mutex); - if( pStmt==0 ){ - pNext = (sqlite3_stmt*)pDb->pVdbe; - }else{ - pNext = (sqlite3_stmt*)((Vdbe*)pStmt)->pNext; +SQLITE_PRIVATE void sqlite3BackupRestart(sqlite3_backup *pBackup){ + sqlite3_backup *p; /* Iterator variable */ + for(p=pBackup; p; p=p->pNext){ + assert( sqlite3_mutex_held(p->pSrc->pBt->mutex) ); + p->iNext = 1; } - sqlite3_mutex_leave(pDb->mutex); - return pNext; } +#ifndef SQLITE_OMIT_VACUUM /* -** Return the value of a status counter for a prepared statement +** Copy the complete content of pBtFrom into pBtTo. A transaction +** must be active for both files. +** +** The size of file pTo may be reduced by this operation. If anything +** goes wrong, the transaction on pTo is rolled back. If successful, the +** transaction is committed before returning. */ -SQLITE_API int sqlite3_stmt_status(sqlite3_stmt *pStmt, int op, int resetFlag){ - Vdbe *pVdbe = (Vdbe*)pStmt; - int v = pVdbe->aCounter[op-1]; - if( resetFlag ) pVdbe->aCounter[op-1] = 0; - return v; +SQLITE_PRIVATE int sqlite3BtreeCopyFile(Btree *pTo, Btree *pFrom){ + int rc; + sqlite3_file *pFd; /* File descriptor for database pTo */ + sqlite3_backup b; + sqlite3BtreeEnter(pTo); + sqlite3BtreeEnter(pFrom); + + assert( sqlite3BtreeIsInTrans(pTo) ); + pFd = sqlite3PagerFile(sqlite3BtreePager(pTo)); + if( pFd->pMethods ){ + i64 nByte = sqlite3BtreeGetPageSize(pFrom)*(i64)sqlite3BtreeLastPage(pFrom); + rc = sqlite3OsFileControl(pFd, SQLITE_FCNTL_OVERWRITE, &nByte); + if( rc==SQLITE_NOTFOUND ) rc = SQLITE_OK; + if( rc ) goto copy_finished; + } + + /* Set up an sqlite3_backup object. sqlite3_backup.pDestDb must be set + ** to 0. This is used by the implementations of sqlite3_backup_step() + ** and sqlite3_backup_finish() to detect that they are being called + ** from this function, not directly by the user. + */ + memset(&b, 0, sizeof(b)); + b.pSrcDb = pFrom->db; + b.pSrc = pFrom; + b.pDest = pTo; + b.iNext = 1; + + /* 0x7FFFFFFF is the hard limit for the number of pages in a database + ** file. By passing this as the number of pages to copy to + ** sqlite3_backup_step(), we can guarantee that the copy finishes + ** within a single call (unless an error occurs). The assert() statement + ** checks this assumption - (p->rc) should be set to either SQLITE_DONE + ** or an error code. + */ + sqlite3_backup_step(&b, 0x7FFFFFFF); + assert( b.rc!=SQLITE_OK ); + rc = sqlite3_backup_finish(&b); + if( rc==SQLITE_OK ){ + pTo->pBt->btsFlags &= ~BTS_PAGESIZE_FIXED; + }else{ + sqlite3PagerClearCache(sqlite3BtreePager(b.pDest)); + } + + assert( sqlite3BtreeIsInTrans(pTo)==0 ); +copy_finished: + sqlite3BtreeLeave(pFrom); + sqlite3BtreeLeave(pTo); + return rc; } +#endif /* SQLITE_OMIT_VACUUM */ -/************** End of vdbeapi.c *********************************************/ -/************** Begin file vdbe.c ********************************************/ +/************** End of backup.c **********************************************/ +/************** Begin file vdbemem.c *****************************************/ /* -** 2001 September 15 +** 2004 May 26 ** ** The author disclaims copyright to this source code. In place of ** a legal notice, here is a blessing: @@ -50261,6187 +59245,5982 @@ SQLITE_API int sqlite3_stmt_status(sqlite3_stmt *pStmt, int op, int resetFlag){ ** May you share freely, never taking more than you give. ** ************************************************************************* -** The code in this file implements execution method of the -** Virtual Database Engine (VDBE). A separate file ("vdbeaux.c") -** handles housekeeping details such as creating and deleting -** VDBE instances. This file is solely interested in executing -** the VDBE program. ** -** In the external interface, an "sqlite3_stmt*" is an opaque pointer -** to a VDBE. +** This file contains code use to manipulate "Mem" structure. A "Mem" +** stores a single value in the VDBE. Mem is an opaque structure visible +** only within the VDBE. Interface routines refer to a Mem using the +** name sqlite_value +*/ + +/* +** If pMem is an object with a valid string representation, this routine +** ensures the internal encoding for the string representation is +** 'desiredEnc', one of SQLITE_UTF8, SQLITE_UTF16LE or SQLITE_UTF16BE. ** -** The SQL parser generates a program which is then executed by -** the VDBE to do the work of the SQL statement. VDBE programs are -** similar in form to assembly language. The program consists of -** a linear sequence of operations. Each operation has an opcode -** and 5 operands. Operands P1, P2, and P3 are integers. Operand P4 -** is a null-terminated string. Operand P5 is an unsigned character. -** Few opcodes use all 5 operands. -** -** Computation results are stored on a set of registers numbered beginning -** with 1 and going up to Vdbe.nMem. Each register can store -** either an integer, a null-terminated string, a floating point -** number, or the SQL "NULL" value. An implicit conversion from one -** type to the other occurs as necessary. -** -** Most of the code in this file is taken up by the sqlite3VdbeExec() -** function which does the work of interpreting a VDBE program. -** But other routines are also provided to help in building up -** a program instruction by instruction. -** -** Various scripts scan this source file in order to generate HTML -** documentation, headers files, or other derived files. The formatting -** of the code in this file is, therefore, important. See other comments -** in this file for details. If in doubt, do not deviate from existing -** commenting and indentation practices when changing or adding code. +** If pMem is not a string object, or the encoding of the string +** representation is already stored using the requested encoding, then this +** routine is a no-op. ** -** $Id: vdbe.c,v 1.866 2009/06/26 16:32:13 shane Exp $ +** SQLITE_OK is returned if the conversion is successful (or not required). +** SQLITE_NOMEM may be returned if a malloc() fails during conversion +** between formats. */ +SQLITE_PRIVATE int sqlite3VdbeChangeEncoding(Mem *pMem, int desiredEnc){ + int rc; + assert( (pMem->flags&MEM_RowSet)==0 ); + assert( desiredEnc==SQLITE_UTF8 || desiredEnc==SQLITE_UTF16LE + || desiredEnc==SQLITE_UTF16BE ); + if( !(pMem->flags&MEM_Str) || pMem->enc==desiredEnc ){ + return SQLITE_OK; + } + assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) ); +#ifdef SQLITE_OMIT_UTF16 + return SQLITE_ERROR; +#else -/* -** The following global variable is incremented every time a cursor -** moves, either by the OP_SeekXX, OP_Next, or OP_Prev opcodes. The test -** procedures use this information to make sure that indices are -** working correctly. This variable has no function other than to -** help verify the correct operation of the library. -*/ -#ifdef SQLITE_TEST -SQLITE_API int sqlite3_search_count = 0; + /* MemTranslate() may return SQLITE_OK or SQLITE_NOMEM. If NOMEM is returned, + ** then the encoding of the value may not have changed. + */ + rc = sqlite3VdbeMemTranslate(pMem, (u8)desiredEnc); + assert(rc==SQLITE_OK || rc==SQLITE_NOMEM); + assert(rc==SQLITE_OK || pMem->enc!=desiredEnc); + assert(rc==SQLITE_NOMEM || pMem->enc==desiredEnc); + return rc; #endif +} /* -** When this global variable is positive, it gets decremented once before -** each instruction in the VDBE. When reaches zero, the u1.isInterrupted -** field of the sqlite3 structure is set in order to simulate and interrupt. +** Make sure pMem->z points to a writable allocation of at least +** n bytes. ** -** This facility is used for testing purposes only. It does not function -** in an ordinary build. +** If the third argument passed to this function is true, then memory +** cell pMem must contain a string or blob. In this case the content is +** preserved. Otherwise, if the third parameter to this function is false, +** any current string or blob value may be discarded. +** +** This function sets the MEM_Dyn flag and clears any xDel callback. +** It also clears MEM_Ephem and MEM_Static. If the preserve flag is +** not set, Mem.n is zeroed. */ -#ifdef SQLITE_TEST -SQLITE_API int sqlite3_interrupt_count = 0; -#endif +SQLITE_PRIVATE int sqlite3VdbeMemGrow(Mem *pMem, int n, int preserve){ + assert( 1 >= + ((pMem->zMalloc && pMem->zMalloc==pMem->z) ? 1 : 0) + + (((pMem->flags&MEM_Dyn)&&pMem->xDel) ? 1 : 0) + + ((pMem->flags&MEM_Ephem) ? 1 : 0) + + ((pMem->flags&MEM_Static) ? 1 : 0) + ); + assert( (pMem->flags&MEM_RowSet)==0 ); + + /* If the preserve flag is set to true, then the memory cell must already + ** contain a valid string or blob value. */ + assert( preserve==0 || pMem->flags&(MEM_Blob|MEM_Str) ); + + if( n<32 ) n = 32; + if( sqlite3DbMallocSize(pMem->db, pMem->zMalloc)z==pMem->zMalloc ){ + pMem->z = pMem->zMalloc = sqlite3DbReallocOrFree(pMem->db, pMem->z, n); + preserve = 0; + }else{ + sqlite3DbFree(pMem->db, pMem->zMalloc); + pMem->zMalloc = sqlite3DbMallocRaw(pMem->db, n); + } + } + + if( pMem->z && preserve && pMem->zMalloc && pMem->z!=pMem->zMalloc ){ + memcpy(pMem->zMalloc, pMem->z, pMem->n); + } + if( pMem->flags&MEM_Dyn && pMem->xDel ){ + assert( pMem->xDel!=SQLITE_DYNAMIC ); + pMem->xDel((void *)(pMem->z)); + } + + pMem->z = pMem->zMalloc; + if( pMem->z==0 ){ + pMem->flags = MEM_Null; + }else{ + pMem->flags &= ~(MEM_Ephem|MEM_Static); + } + pMem->xDel = 0; + return (pMem->z ? SQLITE_OK : SQLITE_NOMEM); +} /* -** The next global variable is incremented each type the OP_Sort opcode -** is executed. The test procedures use this information to make sure that -** sorting is occurring or not occurring at appropriate times. This variable -** has no function other than to help verify the correct operation of the -** library. +** Make the given Mem object MEM_Dyn. In other words, make it so +** that any TEXT or BLOB content is stored in memory obtained from +** malloc(). In this way, we know that the memory is safe to be +** overwritten or altered. +** +** Return SQLITE_OK on success or SQLITE_NOMEM if malloc fails. */ -#ifdef SQLITE_TEST -SQLITE_API int sqlite3_sort_count = 0; +SQLITE_PRIVATE int sqlite3VdbeMemMakeWriteable(Mem *pMem){ + int f; + assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) ); + assert( (pMem->flags&MEM_RowSet)==0 ); + ExpandBlob(pMem); + f = pMem->flags; + if( (f&(MEM_Str|MEM_Blob)) && pMem->z!=pMem->zMalloc ){ + if( sqlite3VdbeMemGrow(pMem, pMem->n + 2, 1) ){ + return SQLITE_NOMEM; + } + pMem->z[pMem->n] = 0; + pMem->z[pMem->n+1] = 0; + pMem->flags |= MEM_Term; +#ifdef SQLITE_DEBUG + pMem->pScopyFrom = 0; #endif + } + + return SQLITE_OK; +} /* -** The next global variable records the size of the largest MEM_Blob -** or MEM_Str that has been used by a VDBE opcode. The test procedures -** use this information to make sure that the zero-blob functionality -** is working correctly. This variable has no function other than to -** help verify the correct operation of the library. +** If the given Mem* has a zero-filled tail, turn it into an ordinary +** blob stored in dynamically allocated space. */ -#ifdef SQLITE_TEST -SQLITE_API int sqlite3_max_blobsize = 0; -static void updateMaxBlobsize(Mem *p){ - if( (p->flags & (MEM_Str|MEM_Blob))!=0 && p->n>sqlite3_max_blobsize ){ - sqlite3_max_blobsize = p->n; +#ifndef SQLITE_OMIT_INCRBLOB +SQLITE_PRIVATE int sqlite3VdbeMemExpandBlob(Mem *pMem){ + if( pMem->flags & MEM_Zero ){ + int nByte; + assert( pMem->flags&MEM_Blob ); + assert( (pMem->flags&MEM_RowSet)==0 ); + assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) ); + + /* Set nByte to the number of bytes required to store the expanded blob. */ + nByte = pMem->n + pMem->u.nZero; + if( nByte<=0 ){ + nByte = 1; + } + if( sqlite3VdbeMemGrow(pMem, nByte, 1) ){ + return SQLITE_NOMEM; + } + + memset(&pMem->z[pMem->n], 0, pMem->u.nZero); + pMem->n += pMem->u.nZero; + pMem->flags &= ~(MEM_Zero|MEM_Term); } + return SQLITE_OK; } #endif -/* -** Test a register to see if it exceeds the current maximum blob size. -** If it does, record the new maximum blob size. -*/ -#if defined(SQLITE_TEST) && !defined(SQLITE_OMIT_BUILTIN_TEST) -# define UPDATE_MAX_BLOBSIZE(P) updateMaxBlobsize(P) -#else -# define UPDATE_MAX_BLOBSIZE(P) -#endif /* -** Convert the given register into a string if it isn't one -** already. Return non-zero if a malloc() fails. +** Make sure the given Mem is \u0000 terminated. */ -#define Stringify(P, enc) \ - if(((P)->flags&(MEM_Str|MEM_Blob))==0 && sqlite3VdbeMemStringify(P,enc)) \ - { goto no_mem; } +SQLITE_PRIVATE int sqlite3VdbeMemNulTerminate(Mem *pMem){ + assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) ); + if( (pMem->flags & MEM_Term)!=0 || (pMem->flags & MEM_Str)==0 ){ + return SQLITE_OK; /* Nothing to do */ + } + if( sqlite3VdbeMemGrow(pMem, pMem->n+2, 1) ){ + return SQLITE_NOMEM; + } + pMem->z[pMem->n] = 0; + pMem->z[pMem->n+1] = 0; + pMem->flags |= MEM_Term; + return SQLITE_OK; +} /* -** An ephemeral string value (signified by the MEM_Ephem flag) contains -** a pointer to a dynamically allocated string where some other entity -** is responsible for deallocating that string. Because the register -** does not control the string, it might be deleted without the register -** knowing it. +** Add MEM_Str to the set of representations for the given Mem. Numbers +** are converted using sqlite3_snprintf(). Converting a BLOB to a string +** is a no-op. ** -** This routine converts an ephemeral string into a dynamically allocated -** string that the register itself controls. In other words, it -** converts an MEM_Ephem string into an MEM_Dyn string. +** Existing representations MEM_Int and MEM_Real are *not* invalidated. +** +** A MEM_Null value will never be passed to this function. This function is +** used for converting values to text for returning to the user (i.e. via +** sqlite3_value_text()), or for ensuring that values to be used as btree +** keys are strings. In the former case a NULL pointer is returned the +** user and the later is an internal programming error. */ -#define Deephemeralize(P) \ - if( ((P)->flags&MEM_Ephem)!=0 \ - && sqlite3VdbeMemMakeWriteable(P) ){ goto no_mem;} +SQLITE_PRIVATE int sqlite3VdbeMemStringify(Mem *pMem, int enc){ + int rc = SQLITE_OK; + int fg = pMem->flags; + const int nByte = 32; -/* -** Call sqlite3VdbeMemExpandBlob() on the supplied value (type Mem*) -** P if required. -*/ -#define ExpandBlob(P) (((P)->flags&MEM_Zero)?sqlite3VdbeMemExpandBlob(P):0) + assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) ); + assert( !(fg&MEM_Zero) ); + assert( !(fg&(MEM_Str|MEM_Blob)) ); + assert( fg&(MEM_Int|MEM_Real) ); + assert( (pMem->flags&MEM_RowSet)==0 ); + assert( EIGHT_BYTE_ALIGNMENT(pMem) ); -/* -** Argument pMem points at a register that will be passed to a -** user-defined function or returned to the user as the result of a query. -** The second argument, 'db_enc' is the text encoding used by the vdbe for -** register variables. This routine sets the pMem->enc and pMem->type -** variables used by the sqlite3_value_*() routines. -*/ -#define storeTypeInfo(A,B) _storeTypeInfo(A) -static void _storeTypeInfo(Mem *pMem){ - int flags = pMem->flags; - if( flags & MEM_Null ){ - pMem->type = SQLITE_NULL; - } - else if( flags & MEM_Int ){ - pMem->type = SQLITE_INTEGER; - } - else if( flags & MEM_Real ){ - pMem->type = SQLITE_FLOAT; + + if( sqlite3VdbeMemGrow(pMem, nByte, 0) ){ + return SQLITE_NOMEM; } - else if( flags & MEM_Str ){ - pMem->type = SQLITE_TEXT; + + /* For a Real or Integer, use sqlite3_mprintf() to produce the UTF-8 + ** string representation of the value. Then, if the required encoding + ** is UTF-16le or UTF-16be do a translation. + ** + ** FIX ME: It would be better if sqlite3_snprintf() could do UTF-16. + */ + if( fg & MEM_Int ){ + sqlite3_snprintf(nByte, pMem->z, "%lld", pMem->u.i); }else{ - pMem->type = SQLITE_BLOB; + assert( fg & MEM_Real ); + sqlite3_snprintf(nByte, pMem->z, "%!.15g", pMem->r); } + pMem->n = sqlite3Strlen30(pMem->z); + pMem->enc = SQLITE_UTF8; + pMem->flags |= MEM_Str|MEM_Term; + sqlite3VdbeChangeEncoding(pMem, enc); + return rc; } /* -** Properties of opcodes. The OPFLG_INITIALIZER macro is -** created by mkopcodeh.awk during compilation. Data is obtained -** from the comments following the "case OP_xxxx:" statements in -** this file. -*/ -static const unsigned char opcodeProperty[] = OPFLG_INITIALIZER; - -/* -** Return true if an opcode has any of the OPFLG_xxx properties -** specified by mask. +** Memory cell pMem contains the context of an aggregate function. +** This routine calls the finalize method for that function. The +** result of the aggregate is stored back into pMem. +** +** Return SQLITE_ERROR if the finalizer reports an error. SQLITE_OK +** otherwise. */ -SQLITE_PRIVATE int sqlite3VdbeOpcodeHasProperty(int opcode, int mask){ - assert( opcode>0 && opcode<(int)sizeof(opcodeProperty) ); - return (opcodeProperty[opcode]&mask)!=0; +SQLITE_PRIVATE int sqlite3VdbeMemFinalize(Mem *pMem, FuncDef *pFunc){ + int rc = SQLITE_OK; + if( ALWAYS(pFunc && pFunc->xFinalize) ){ + sqlite3_context ctx; + assert( (pMem->flags & MEM_Null)!=0 || pFunc==pMem->u.pDef ); + assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) ); + memset(&ctx, 0, sizeof(ctx)); + ctx.s.flags = MEM_Null; + ctx.s.db = pMem->db; + ctx.pMem = pMem; + ctx.pFunc = pFunc; + pFunc->xFinalize(&ctx); /* IMP: R-24505-23230 */ + assert( 0==(pMem->flags&MEM_Dyn) && !pMem->xDel ); + sqlite3DbFree(pMem->db, pMem->zMalloc); + memcpy(pMem, &ctx.s, sizeof(ctx.s)); + rc = ctx.isError; + } + return rc; } /* -** Allocate VdbeCursor number iCur. Return a pointer to it. Return NULL -** if we run out of memory. +** If the memory cell contains a string value that must be freed by +** invoking an external callback, free it now. Calling this function +** does not free any Mem.zMalloc buffer. */ -static VdbeCursor *allocateCursor( - Vdbe *p, /* The virtual machine */ - int iCur, /* Index of the new VdbeCursor */ - int nField, /* Number of fields in the table or index */ - int iDb, /* When database the cursor belongs to, or -1 */ - int isBtreeCursor /* True for B-Tree vs. pseudo-table or vtab */ -){ - /* Find the memory cell that will be used to store the blob of memory - ** required for this VdbeCursor structure. It is convenient to use a - ** vdbe memory cell to manage the memory allocation required for a - ** VdbeCursor structure for the following reasons: - ** - ** * Sometimes cursor numbers are used for a couple of different - ** purposes in a vdbe program. The different uses might require - ** different sized allocations. Memory cells provide growable - ** allocations. - ** - ** * When using ENABLE_MEMORY_MANAGEMENT, memory cell buffers can - ** be freed lazily via the sqlite3_release_memory() API. This - ** minimizes the number of malloc calls made by the system. - ** - ** Memory cells for cursors are allocated at the top of the address - ** space. Memory cell (p->nMem) corresponds to cursor 0. Space for - ** cursor 1 is managed by memory cell (p->nMem-1), etc. - */ - Mem *pMem = &p->aMem[p->nMem-iCur]; - - int nByte; - VdbeCursor *pCx = 0; - nByte = - sizeof(VdbeCursor) + - (isBtreeCursor?sqlite3BtreeCursorSize():0) + - 2*nField*sizeof(u32); - - assert( iCurnCursor ); - if( p->apCsr[iCur] ){ - sqlite3VdbeFreeCursor(p, p->apCsr[iCur]); - p->apCsr[iCur] = 0; - } - if( SQLITE_OK==sqlite3VdbeMemGrow(pMem, nByte, 0) ){ - p->apCsr[iCur] = pCx = (VdbeCursor*)pMem->z; - memset(pMem->z, 0, nByte); - pCx->iDb = iDb; - pCx->nField = nField; - if( nField ){ - pCx->aType = (u32 *)&pMem->z[sizeof(VdbeCursor)]; - } - if( isBtreeCursor ){ - pCx->pCursor = (BtCursor*) - &pMem->z[sizeof(VdbeCursor)+2*nField*sizeof(u32)]; - } +SQLITE_PRIVATE void sqlite3VdbeMemReleaseExternal(Mem *p){ + assert( p->db==0 || sqlite3_mutex_held(p->db->mutex) ); + if( p->flags&MEM_Agg ){ + sqlite3VdbeMemFinalize(p, p->u.pDef); + assert( (p->flags & MEM_Agg)==0 ); + sqlite3VdbeMemRelease(p); + }else if( p->flags&MEM_Dyn && p->xDel ){ + assert( (p->flags&MEM_RowSet)==0 ); + assert( p->xDel!=SQLITE_DYNAMIC ); + p->xDel((void *)p->z); + p->xDel = 0; + }else if( p->flags&MEM_RowSet ){ + sqlite3RowSetClear(p->u.pRowSet); + }else if( p->flags&MEM_Frame ){ + sqlite3VdbeMemSetNull(p); } - return pCx; } /* -** Try to convert a value into a numeric representation if we can -** do so without loss of information. In other words, if the string -** looks like a number, convert it into a number. If it does not -** look like a number, leave it alone. +** Release any memory held by the Mem. This may leave the Mem in an +** inconsistent state, for example with (Mem.z==0) and +** (Mem.type==SQLITE_TEXT). */ -static void applyNumericAffinity(Mem *pRec){ - if( (pRec->flags & (MEM_Real|MEM_Int))==0 ){ - int realnum; - sqlite3VdbeMemNulTerminate(pRec); - if( (pRec->flags&MEM_Str) - && sqlite3IsNumber(pRec->z, &realnum, pRec->enc) ){ - i64 value; - sqlite3VdbeChangeEncoding(pRec, SQLITE_UTF8); - if( !realnum && sqlite3Atoi64(pRec->z, &value) ){ - pRec->u.i = value; - MemSetTypeFlag(pRec, MEM_Int); - }else{ - sqlite3VdbeMemRealify(pRec); - } - } - } +SQLITE_PRIVATE void sqlite3VdbeMemRelease(Mem *p){ + VdbeMemRelease(p); + sqlite3DbFree(p->db, p->zMalloc); + p->z = 0; + p->zMalloc = 0; + p->xDel = 0; } /* -** Processing is determine by the affinity parameter: -** -** SQLITE_AFF_INTEGER: -** SQLITE_AFF_REAL: -** SQLITE_AFF_NUMERIC: -** Try to convert pRec to an integer representation or a -** floating-point representation if an integer representation -** is not possible. Note that the integer representation is -** always preferred, even if the affinity is REAL, because -** an integer representation is more space efficient on disk. -** -** SQLITE_AFF_TEXT: -** Convert pRec to a text representation. +** Convert a 64-bit IEEE double into a 64-bit signed integer. +** If the double is too large, return 0x8000000000000000. ** -** SQLITE_AFF_NONE: -** No-op. pRec is unchanged. +** Most systems appear to do this simply by assigning +** variables and without the extra range tests. But +** there are reports that windows throws an expection +** if the floating point value is out of range. (See ticket #2880.) +** Because we do not completely understand the problem, we will +** take the conservative approach and always do range tests +** before attempting the conversion. */ -static void applyAffinity( - Mem *pRec, /* The value to apply affinity to */ - char affinity, /* The affinity to be applied */ - u8 enc /* Use this text encoding */ -){ - if( affinity==SQLITE_AFF_TEXT ){ - /* Only attempt the conversion to TEXT if there is an integer or real - ** representation (blob and NULL do not get converted) but no string - ** representation. - */ - if( 0==(pRec->flags&MEM_Str) && (pRec->flags&(MEM_Real|MEM_Int)) ){ - sqlite3VdbeMemStringify(pRec, enc); - } - pRec->flags &= ~(MEM_Real|MEM_Int); - }else if( affinity!=SQLITE_AFF_NONE ){ - assert( affinity==SQLITE_AFF_INTEGER || affinity==SQLITE_AFF_REAL - || affinity==SQLITE_AFF_NUMERIC ); - applyNumericAffinity(pRec); - if( pRec->flags & MEM_Real ){ - sqlite3VdbeIntegerAffinity(pRec); - } +static i64 doubleToInt64(double r){ +#ifdef SQLITE_OMIT_FLOATING_POINT + /* When floating-point is omitted, double and int64 are the same thing */ + return r; +#else + /* + ** Many compilers we encounter do not define constants for the + ** minimum and maximum 64-bit integers, or they define them + ** inconsistently. And many do not understand the "LL" notation. + ** So we define our own static constants here using nothing + ** larger than a 32-bit integer constant. + */ + static const i64 maxInt = LARGEST_INT64; + static const i64 minInt = SMALLEST_INT64; + + if( r<(double)minInt ){ + return minInt; + }else if( r>(double)maxInt ){ + /* minInt is correct here - not maxInt. It turns out that assigning + ** a very large positive number to an integer results in a very large + ** negative integer. This makes no sense, but it is what x86 hardware + ** does so for compatibility we will do the same in software. */ + return minInt; + }else{ + return (i64)r; } +#endif } /* -** Try to convert the type of a function argument or a result column -** into a numeric representation. Use either INTEGER or REAL whichever -** is appropriate. But only do the conversion if it is possible without -** loss of information and return the revised type of the argument. +** Return some kind of integer value which is the best we can do +** at representing the value that *pMem describes as an integer. +** If pMem is an integer, then the value is exact. If pMem is +** a floating-point then the value returned is the integer part. +** If pMem is a string or blob, then we make an attempt to convert +** it into a integer and return that. If pMem represents an +** an SQL-NULL value, return 0. ** -** This is an EXPERIMENTAL api and is subject to change or removal. +** If pMem represents a string value, its encoding might be changed. */ -SQLITE_API int sqlite3_value_numeric_type(sqlite3_value *pVal){ - Mem *pMem = (Mem*)pVal; - applyNumericAffinity(pMem); - storeTypeInfo(pMem, 0); - return pMem->type; +SQLITE_PRIVATE i64 sqlite3VdbeIntValue(Mem *pMem){ + int flags; + assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) ); + assert( EIGHT_BYTE_ALIGNMENT(pMem) ); + flags = pMem->flags; + if( flags & MEM_Int ){ + return pMem->u.i; + }else if( flags & MEM_Real ){ + return doubleToInt64(pMem->r); + }else if( flags & (MEM_Str|MEM_Blob) ){ + i64 value = 0; + assert( pMem->z || pMem->n==0 ); + testcase( pMem->z==0 ); + sqlite3Atoi64(pMem->z, &value, pMem->n, pMem->enc); + return value; + }else{ + return 0; + } } /* -** Exported version of applyAffinity(). This one works on sqlite3_value*, -** not the internal Mem* type. +** Return the best representation of pMem that we can get into a +** double. If pMem is already a double or an integer, return its +** value. If it is a string or blob, try to convert it to a double. +** If it is a NULL, return 0.0. */ -SQLITE_PRIVATE void sqlite3ValueApplyAffinity( - sqlite3_value *pVal, - u8 affinity, - u8 enc -){ - applyAffinity((Mem *)pVal, affinity, enc); +SQLITE_PRIVATE double sqlite3VdbeRealValue(Mem *pMem){ + assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) ); + assert( EIGHT_BYTE_ALIGNMENT(pMem) ); + if( pMem->flags & MEM_Real ){ + return pMem->r; + }else if( pMem->flags & MEM_Int ){ + return (double)pMem->u.i; + }else if( pMem->flags & (MEM_Str|MEM_Blob) ){ + /* (double)0 In case of SQLITE_OMIT_FLOATING_POINT... */ + double val = (double)0; + sqlite3AtoF(pMem->z, &val, pMem->n, pMem->enc); + return val; + }else{ + /* (double)0 In case of SQLITE_OMIT_FLOATING_POINT... */ + return (double)0; + } } -#ifdef SQLITE_DEBUG /* -** Write a nice string representation of the contents of cell pMem -** into buffer zBuf, length nBuf. +** The MEM structure is already a MEM_Real. Try to also make it a +** MEM_Int if we can. */ -SQLITE_PRIVATE void sqlite3VdbeMemPrettyPrint(Mem *pMem, char *zBuf){ - char *zCsr = zBuf; - int f = pMem->flags; +SQLITE_PRIVATE void sqlite3VdbeIntegerAffinity(Mem *pMem){ + assert( pMem->flags & MEM_Real ); + assert( (pMem->flags & MEM_RowSet)==0 ); + assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) ); + assert( EIGHT_BYTE_ALIGNMENT(pMem) ); - static const char *const encnames[] = {"(X)", "(8)", "(16LE)", "(16BE)"}; + pMem->u.i = doubleToInt64(pMem->r); - if( f&MEM_Blob ){ - int i; - char c; - if( f & MEM_Dyn ){ - c = 'z'; - assert( (f & (MEM_Static|MEM_Ephem))==0 ); - }else if( f & MEM_Static ){ - c = 't'; - assert( (f & (MEM_Dyn|MEM_Ephem))==0 ); - }else if( f & MEM_Ephem ){ - c = 'e'; - assert( (f & (MEM_Static|MEM_Dyn))==0 ); - }else{ - c = 's'; - } + /* Only mark the value as an integer if + ** + ** (1) the round-trip conversion real->int->real is a no-op, and + ** (2) The integer is neither the largest nor the smallest + ** possible integer (ticket #3922) + ** + ** The second and third terms in the following conditional enforces + ** the second condition under the assumption that addition overflow causes + ** values to wrap around. On x86 hardware, the third term is always + ** true and could be omitted. But we leave it in because other + ** architectures might behave differently. + */ + if( pMem->r==(double)pMem->u.i + && pMem->u.i>SMALLEST_INT64 +#if defined(__i486__) || defined(__x86_64__) + && ALWAYS(pMem->u.iu.iflags |= MEM_Int; + } +} - sqlite3_snprintf(100, zCsr, "%c", c); - zCsr += sqlite3Strlen30(zCsr); - sqlite3_snprintf(100, zCsr, "%d[", pMem->n); - zCsr += sqlite3Strlen30(zCsr); - for(i=0; i<16 && in; i++){ - sqlite3_snprintf(100, zCsr, "%02X", ((int)pMem->z[i] & 0xFF)); - zCsr += sqlite3Strlen30(zCsr); - } - for(i=0; i<16 && in; i++){ - char z = pMem->z[i]; - if( z<32 || z>126 ) *zCsr++ = '.'; - else *zCsr++ = z; - } +/* +** Convert pMem to type integer. Invalidate any prior representations. +*/ +SQLITE_PRIVATE int sqlite3VdbeMemIntegerify(Mem *pMem){ + assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) ); + assert( (pMem->flags & MEM_RowSet)==0 ); + assert( EIGHT_BYTE_ALIGNMENT(pMem) ); - sqlite3_snprintf(100, zCsr, "]%s", encnames[pMem->enc]); - zCsr += sqlite3Strlen30(zCsr); - if( f & MEM_Zero ){ - sqlite3_snprintf(100, zCsr,"+%dz",pMem->u.nZero); - zCsr += sqlite3Strlen30(zCsr); - } - *zCsr = '\0'; - }else if( f & MEM_Str ){ - int j, k; - zBuf[0] = ' '; - if( f & MEM_Dyn ){ - zBuf[1] = 'z'; - assert( (f & (MEM_Static|MEM_Ephem))==0 ); - }else if( f & MEM_Static ){ - zBuf[1] = 't'; - assert( (f & (MEM_Dyn|MEM_Ephem))==0 ); - }else if( f & MEM_Ephem ){ - zBuf[1] = 'e'; - assert( (f & (MEM_Static|MEM_Dyn))==0 ); + pMem->u.i = sqlite3VdbeIntValue(pMem); + MemSetTypeFlag(pMem, MEM_Int); + return SQLITE_OK; +} + +/* +** Convert pMem so that it is of type MEM_Real. +** Invalidate any prior representations. +*/ +SQLITE_PRIVATE int sqlite3VdbeMemRealify(Mem *pMem){ + assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) ); + assert( EIGHT_BYTE_ALIGNMENT(pMem) ); + + pMem->r = sqlite3VdbeRealValue(pMem); + MemSetTypeFlag(pMem, MEM_Real); + return SQLITE_OK; +} + +/* +** Convert pMem so that it has types MEM_Real or MEM_Int or both. +** Invalidate any prior representations. +** +** Every effort is made to force the conversion, even if the input +** is a string that does not look completely like a number. Convert +** as much of the string as we can and ignore the rest. +*/ +SQLITE_PRIVATE int sqlite3VdbeMemNumerify(Mem *pMem){ + if( (pMem->flags & (MEM_Int|MEM_Real|MEM_Null))==0 ){ + assert( (pMem->flags & (MEM_Blob|MEM_Str))!=0 ); + assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) ); + if( 0==sqlite3Atoi64(pMem->z, &pMem->u.i, pMem->n, pMem->enc) ){ + MemSetTypeFlag(pMem, MEM_Int); }else{ - zBuf[1] = 's'; - } - k = 2; - sqlite3_snprintf(100, &zBuf[k], "%d", pMem->n); - k += sqlite3Strlen30(&zBuf[k]); - zBuf[k++] = '['; - for(j=0; j<15 && jn; j++){ - u8 c = pMem->z[j]; - if( c>=0x20 && c<0x7f ){ - zBuf[k++] = c; - }else{ - zBuf[k++] = '.'; - } + pMem->r = sqlite3VdbeRealValue(pMem); + MemSetTypeFlag(pMem, MEM_Real); + sqlite3VdbeIntegerAffinity(pMem); } - zBuf[k++] = ']'; - sqlite3_snprintf(100,&zBuf[k], encnames[pMem->enc]); - k += sqlite3Strlen30(&zBuf[k]); - zBuf[k++] = 0; } + assert( (pMem->flags & (MEM_Int|MEM_Real|MEM_Null))!=0 ); + pMem->flags &= ~(MEM_Str|MEM_Blob); + return SQLITE_OK; +} + +/* +** Delete any previous value and set the value stored in *pMem to NULL. +*/ +SQLITE_PRIVATE void sqlite3VdbeMemSetNull(Mem *pMem){ + if( pMem->flags & MEM_Frame ){ + VdbeFrame *pFrame = pMem->u.pFrame; + pFrame->pParent = pFrame->v->pDelFrame; + pFrame->v->pDelFrame = pFrame; + } + if( pMem->flags & MEM_RowSet ){ + sqlite3RowSetClear(pMem->u.pRowSet); + } + MemSetTypeFlag(pMem, MEM_Null); + pMem->type = SQLITE_NULL; } + +/* +** Delete any previous value and set the value to be a BLOB of length +** n containing all zeros. +*/ +SQLITE_PRIVATE void sqlite3VdbeMemSetZeroBlob(Mem *pMem, int n){ + sqlite3VdbeMemRelease(pMem); + pMem->flags = MEM_Blob|MEM_Zero; + pMem->type = SQLITE_BLOB; + pMem->n = 0; + if( n<0 ) n = 0; + pMem->u.nZero = n; + pMem->enc = SQLITE_UTF8; + +#ifdef SQLITE_OMIT_INCRBLOB + sqlite3VdbeMemGrow(pMem, n, 0); + if( pMem->z ){ + pMem->n = n; + memset(pMem->z, 0, n); + } #endif +} -#ifdef SQLITE_DEBUG /* -** Print the value of a register for tracing purposes: +** Delete any previous value and set the value stored in *pMem to val, +** manifest type INTEGER. */ -static void memTracePrint(FILE *out, Mem *p){ - if( p->flags & MEM_Null ){ - fprintf(out, " NULL"); - }else if( (p->flags & (MEM_Int|MEM_Str))==(MEM_Int|MEM_Str) ){ - fprintf(out, " si:%lld", p->u.i); - }else if( p->flags & MEM_Int ){ - fprintf(out, " i:%lld", p->u.i); +SQLITE_PRIVATE void sqlite3VdbeMemSetInt64(Mem *pMem, i64 val){ + sqlite3VdbeMemRelease(pMem); + pMem->u.i = val; + pMem->flags = MEM_Int; + pMem->type = SQLITE_INTEGER; +} + #ifndef SQLITE_OMIT_FLOATING_POINT - }else if( p->flags & MEM_Real ){ - fprintf(out, " r:%g", p->r); -#endif - }else if( p->flags & MEM_RowSet ){ - fprintf(out, " (rowset)"); +/* +** Delete any previous value and set the value stored in *pMem to val, +** manifest type REAL. +*/ +SQLITE_PRIVATE void sqlite3VdbeMemSetDouble(Mem *pMem, double val){ + if( sqlite3IsNaN(val) ){ + sqlite3VdbeMemSetNull(pMem); }else{ - char zBuf[200]; - sqlite3VdbeMemPrettyPrint(p, zBuf); - fprintf(out, " "); - fprintf(out, "%s", zBuf); + sqlite3VdbeMemRelease(pMem); + pMem->r = val; + pMem->flags = MEM_Real; + pMem->type = SQLITE_FLOAT; } } -static void registerTrace(FILE *out, int iReg, Mem *p){ - fprintf(out, "REG[%d] = ", iReg); - memTracePrint(out, p); - fprintf(out, "\n"); -} #endif -#ifdef SQLITE_DEBUG -# define REGISTER_TRACE(R,M) if(p->trace)registerTrace(p->trace,R,M) -#else -# define REGISTER_TRACE(R,M) -#endif +/* +** Delete any previous value and set the value of pMem to be an +** empty boolean index. +*/ +SQLITE_PRIVATE void sqlite3VdbeMemSetRowSet(Mem *pMem){ + sqlite3 *db = pMem->db; + assert( db!=0 ); + assert( (pMem->flags & MEM_RowSet)==0 ); + sqlite3VdbeMemRelease(pMem); + pMem->zMalloc = sqlite3DbMallocRaw(db, 64); + if( db->mallocFailed ){ + pMem->flags = MEM_Null; + }else{ + assert( pMem->zMalloc ); + pMem->u.pRowSet = sqlite3RowSetInit(db, pMem->zMalloc, + sqlite3DbMallocSize(db, pMem->zMalloc)); + assert( pMem->u.pRowSet!=0 ); + pMem->flags = MEM_RowSet; + } +} +/* +** Return true if the Mem object contains a TEXT or BLOB that is +** too large - whose size exceeds SQLITE_MAX_LENGTH. +*/ +SQLITE_PRIVATE int sqlite3VdbeMemTooBig(Mem *p){ + assert( p->db!=0 ); + if( p->flags & (MEM_Str|MEM_Blob) ){ + int n = p->n; + if( p->flags & MEM_Zero ){ + n += p->u.nZero; + } + return n>p->db->aLimit[SQLITE_LIMIT_LENGTH]; + } + return 0; +} -#ifdef VDBE_PROFILE +#ifdef SQLITE_DEBUG +/* +** This routine prepares a memory cell for modication by breaking +** its link to a shallow copy and by marking any current shallow +** copies of this cell as invalid. +** +** This is used for testing and debugging only - to make sure shallow +** copies are not misused. +*/ +SQLITE_PRIVATE void sqlite3VdbeMemAboutToChange(Vdbe *pVdbe, Mem *pMem){ + int i; + Mem *pX; + for(i=1, pX=&pVdbe->aMem[1]; i<=pVdbe->nMem; i++, pX++){ + if( pX->pScopyFrom==pMem ){ + pX->flags |= MEM_Invalid; + pX->pScopyFrom = 0; + } + } + pMem->pScopyFrom = 0; +} +#endif /* SQLITE_DEBUG */ -/* -** hwtime.h contains inline assembler code for implementing -** high-performance timing routines. +/* +** Size of struct Mem not including the Mem.zMalloc member. */ -/************** Include hwtime.h in the middle of vdbe.c *********************/ -/************** Begin file hwtime.h ******************************************/ +#define MEMCELLSIZE (size_t)(&(((Mem *)0)->zMalloc)) + /* -** 2008 May 27 -** -** The author disclaims copyright to this source code. In place of -** a legal notice, here is a blessing: -** -** May you do good and not evil. -** May you find forgiveness for yourself and forgive others. -** May you share freely, never taking more than you give. -** -****************************************************************************** -** -** This file contains inline asm code for retrieving "high-performance" -** counters for x86 class CPUs. -** -** $Id: hwtime.h,v 1.3 2008/08/01 14:33:15 shane Exp $ +** Make an shallow copy of pFrom into pTo. Prior contents of +** pTo are freed. The pFrom->z field is not duplicated. If +** pFrom->z is used, then pTo->z points to the same thing as pFrom->z +** and flags gets srcType (either MEM_Ephem or MEM_Static). */ -#ifndef _HWTIME_H_ -#define _HWTIME_H_ +SQLITE_PRIVATE void sqlite3VdbeMemShallowCopy(Mem *pTo, const Mem *pFrom, int srcType){ + assert( (pFrom->flags & MEM_RowSet)==0 ); + VdbeMemRelease(pTo); + memcpy(pTo, pFrom, MEMCELLSIZE); + pTo->xDel = 0; + if( (pFrom->flags&MEM_Static)==0 ){ + pTo->flags &= ~(MEM_Dyn|MEM_Static|MEM_Ephem); + assert( srcType==MEM_Ephem || srcType==MEM_Static ); + pTo->flags |= srcType; + } +} /* -** The following routine only works on pentium-class (or newer) processors. -** It uses the RDTSC opcode to read the cycle count value out of the -** processor and returns that value. This can be used for high-res -** profiling. +** Make a full copy of pFrom into pTo. Prior contents of pTo are +** freed before the copy is made. */ -#if (defined(__GNUC__) || defined(_MSC_VER)) && \ - (defined(i386) || defined(__i386__) || defined(_M_IX86)) +SQLITE_PRIVATE int sqlite3VdbeMemCopy(Mem *pTo, const Mem *pFrom){ + int rc = SQLITE_OK; - #if defined(__GNUC__) + assert( (pFrom->flags & MEM_RowSet)==0 ); + VdbeMemRelease(pTo); + memcpy(pTo, pFrom, MEMCELLSIZE); + pTo->flags &= ~MEM_Dyn; - __inline__ sqlite_uint64 sqlite3Hwtime(void){ - unsigned int lo, hi; - __asm__ __volatile__ ("rdtsc" : "=a" (lo), "=d" (hi)); - return (sqlite_uint64)hi << 32 | lo; + if( pTo->flags&(MEM_Str|MEM_Blob) ){ + if( 0==(pFrom->flags&MEM_Static) ){ + pTo->flags |= MEM_Ephem; + rc = sqlite3VdbeMemMakeWriteable(pTo); + } } - #elif defined(_MSC_VER) + return rc; +} - __declspec(naked) __inline sqlite_uint64 __cdecl sqlite3Hwtime(void){ - __asm { - rdtsc - ret ; return value at EDX:EAX - } - } +/* +** Transfer the contents of pFrom to pTo. Any existing value in pTo is +** freed. If pFrom contains ephemeral data, a copy is made. +** +** pFrom contains an SQL NULL when this routine returns. +*/ +SQLITE_PRIVATE void sqlite3VdbeMemMove(Mem *pTo, Mem *pFrom){ + assert( pFrom->db==0 || sqlite3_mutex_held(pFrom->db->mutex) ); + assert( pTo->db==0 || sqlite3_mutex_held(pTo->db->mutex) ); + assert( pFrom->db==0 || pTo->db==0 || pFrom->db==pTo->db ); - #endif + sqlite3VdbeMemRelease(pTo); + memcpy(pTo, pFrom, sizeof(Mem)); + pFrom->flags = MEM_Null; + pFrom->xDel = 0; + pFrom->zMalloc = 0; +} -#elif (defined(__GNUC__) && defined(__x86_64__)) +/* +** Change the value of a Mem to be a string or a BLOB. +** +** The memory management strategy depends on the value of the xDel +** parameter. If the value passed is SQLITE_TRANSIENT, then the +** string is copied into a (possibly existing) buffer managed by the +** Mem structure. Otherwise, any existing buffer is freed and the +** pointer copied. +** +** If the string is too large (if it exceeds the SQLITE_LIMIT_LENGTH +** size limit) then no memory allocation occurs. If the string can be +** stored without allocating memory, then it is. If a memory allocation +** is required to store the string, then value of pMem is unchanged. In +** either case, SQLITE_TOOBIG is returned. +*/ +SQLITE_PRIVATE int sqlite3VdbeMemSetStr( + Mem *pMem, /* Memory cell to set to string value */ + const char *z, /* String pointer */ + int n, /* Bytes in string, or negative */ + u8 enc, /* Encoding of z. 0 for BLOBs */ + void (*xDel)(void*) /* Destructor function */ +){ + int nByte = n; /* New value for pMem->n */ + int iLimit; /* Maximum allowed string or blob size */ + u16 flags = 0; /* New value for pMem->flags */ - __inline__ sqlite_uint64 sqlite3Hwtime(void){ - unsigned long val; - __asm__ __volatile__ ("rdtsc" : "=A" (val)); - return val; - } - -#elif (defined(__GNUC__) && defined(__ppc__)) + assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) ); + assert( (pMem->flags & MEM_RowSet)==0 ); - __inline__ sqlite_uint64 sqlite3Hwtime(void){ - unsigned long long retval; - unsigned long junk; - __asm__ __volatile__ ("\n\ - 1: mftbu %1\n\ - mftb %L0\n\ - mftbu %0\n\ - cmpw %0,%1\n\ - bne 1b" - : "=r" (retval), "=r" (junk)); - return retval; + /* If z is a NULL pointer, set pMem to contain an SQL NULL. */ + if( !z ){ + sqlite3VdbeMemSetNull(pMem); + return SQLITE_OK; } -#else - - #error Need implementation of sqlite3Hwtime() for your platform. + if( pMem->db ){ + iLimit = pMem->db->aLimit[SQLITE_LIMIT_LENGTH]; + }else{ + iLimit = SQLITE_MAX_LENGTH; + } + flags = (enc==0?MEM_Blob:MEM_Str); + if( nByte<0 ){ + assert( enc!=0 ); + if( enc==SQLITE_UTF8 ){ + for(nByte=0; nByte<=iLimit && z[nByte]; nByte++){} + }else{ + for(nByte=0; nByte<=iLimit && (z[nByte] | z[nByte+1]); nByte+=2){} + } + flags |= MEM_Term; + } - /* - ** To compile without implementing sqlite3Hwtime() for your platform, - ** you can remove the above #error and use the following - ** stub function. You will lose timing support for many - ** of the debugging and testing utilities, but it should at - ** least compile and run. + /* The following block sets the new values of Mem.z and Mem.xDel. It + ** also sets a flag in local variable "flags" to indicate the memory + ** management (one of MEM_Dyn or MEM_Static). */ -SQLITE_PRIVATE sqlite_uint64 sqlite3Hwtime(void){ return ((sqlite_uint64)0); } - -#endif - -#endif /* !defined(_HWTIME_H_) */ + if( xDel==SQLITE_TRANSIENT ){ + int nAlloc = nByte; + if( flags&MEM_Term ){ + nAlloc += (enc==SQLITE_UTF8?1:2); + } + if( nByte>iLimit ){ + return SQLITE_TOOBIG; + } + if( sqlite3VdbeMemGrow(pMem, nAlloc, 0) ){ + return SQLITE_NOMEM; + } + memcpy(pMem->z, z, nAlloc); + }else if( xDel==SQLITE_DYNAMIC ){ + sqlite3VdbeMemRelease(pMem); + pMem->zMalloc = pMem->z = (char *)z; + pMem->xDel = 0; + }else{ + sqlite3VdbeMemRelease(pMem); + pMem->z = (char *)z; + pMem->xDel = xDel; + flags |= ((xDel==SQLITE_STATIC)?MEM_Static:MEM_Dyn); + } -/************** End of hwtime.h **********************************************/ -/************** Continuing where we left off in vdbe.c ***********************/ + pMem->n = nByte; + pMem->flags = flags; + pMem->enc = (enc==0 ? SQLITE_UTF8 : enc); + pMem->type = (enc==0 ? SQLITE_BLOB : SQLITE_TEXT); +#ifndef SQLITE_OMIT_UTF16 + if( pMem->enc!=SQLITE_UTF8 && sqlite3VdbeMemHandleBom(pMem) ){ + return SQLITE_NOMEM; + } #endif -/* -** The CHECK_FOR_INTERRUPT macro defined here looks to see if the -** sqlite3_interrupt() routine has been called. If it has been, then -** processing of the VDBE program is interrupted. -** -** This macro added to every instruction that does a jump in order to -** implement a loop. This test used to be on every single instruction, -** but that meant we more testing that we needed. By only testing the -** flag on jump instructions, we get a (small) speed improvement. -*/ -#define CHECK_FOR_INTERRUPT \ - if( db->u1.isInterrupted ) goto abort_due_to_interrupt; + if( nByte>iLimit ){ + return SQLITE_TOOBIG; + } -#ifdef SQLITE_DEBUG -static int fileExists(sqlite3 *db, const char *zFile){ - int res = 0; - int rc = SQLITE_OK; -#ifdef SQLITE_TEST - /* If we are currently testing IO errors, then do not call OsAccess() to - ** test for the presence of zFile. This is because any IO error that - ** occurs here will not be reported, causing the test to fail. - */ - extern int sqlite3_io_error_pending; - if( sqlite3_io_error_pending<=0 ) -#endif - rc = sqlite3OsAccess(db->pVfs, zFile, SQLITE_ACCESS_EXISTS, &res); - return (res && rc==SQLITE_OK); + return SQLITE_OK; } -#endif -#ifndef NDEBUG /* -** This function is only called from within an assert() expression. It -** checks that the sqlite3.nTransaction variable is correctly set to -** the number of non-transaction savepoints currently in the -** linked list starting at sqlite3.pSavepoint. -** -** Usage: +** Compare the values contained by the two memory cells, returning +** negative, zero or positive if pMem1 is less than, equal to, or greater +** than pMem2. Sorting order is NULL's first, followed by numbers (integers +** and reals) sorted numerically, followed by text ordered by the collating +** sequence pColl and finally blob's ordered by memcmp(). ** -** assert( checkSavepointCount(db) ); +** Two NULL values are considered equal by this function. */ -static int checkSavepointCount(sqlite3 *db){ - int n = 0; - Savepoint *p; - for(p=db->pSavepoint; p; p=p->pNext) n++; - assert( n==(db->nSavepoint + db->isTransactionSavepoint) ); - return 1; -} -#endif +SQLITE_PRIVATE int sqlite3MemCompare(const Mem *pMem1, const Mem *pMem2, const CollSeq *pColl){ + int rc; + int f1, f2; + int combined_flags; -/* -** Execute as much of a VDBE program as we can then return. -** -** sqlite3VdbeMakeReady() must be called before this routine in order to -** close the program with a final OP_Halt and to set up the callbacks -** and the error message pointer. -** -** Whenever a row or result data is available, this routine will either -** invoke the result callback (if there is one) or return with -** SQLITE_ROW. -** -** If an attempt is made to open a locked database, then this routine -** will either invoke the busy callback (if there is one) or it will -** return SQLITE_BUSY. -** -** If an error occurs, an error message is written to memory obtained -** from sqlite3_malloc() and p->zErrMsg is made to point to that memory. -** The error code is stored in p->rc and this routine returns SQLITE_ERROR. -** -** If the callback ever returns non-zero, then the program exits -** immediately. There will be no error message but the p->rc field is -** set to SQLITE_ABORT and this routine will return SQLITE_ERROR. -** -** A memory allocation error causes p->rc to be set to SQLITE_NOMEM and this -** routine to return SQLITE_ERROR. -** -** Other fatal errors return SQLITE_ERROR. -** -** After this routine has finished, sqlite3VdbeFinalize() should be -** used to clean up the mess that was left behind. -*/ -SQLITE_PRIVATE int sqlite3VdbeExec( - Vdbe *p /* The VDBE */ -){ - int pc; /* The program counter */ - Op *pOp; /* Current operation */ - int rc = SQLITE_OK; /* Value to return */ - sqlite3 *db = p->db; /* The database */ - u8 encoding = ENC(db); /* The database encoding */ - Mem *pIn1 = 0; /* 1st input operand */ - Mem *pIn2 = 0; /* 2nd input operand */ - Mem *pIn3 = 0; /* 3rd input operand */ - Mem *pOut = 0; /* Output operand */ - u8 opProperty; - int iCompare = 0; /* Result of last OP_Compare operation */ - int *aPermute = 0; /* Permutation of columns for OP_Compare */ -#ifdef VDBE_PROFILE - u64 start; /* CPU clock count at start of opcode */ - int origPc; /* Program counter at start of opcode */ -#endif -#ifndef SQLITE_OMIT_PROGRESS_CALLBACK - int nProgressOps = 0; /* Opcodes executed since progress callback. */ -#endif - /******************************************************************** - ** Automatically generated code - ** - ** The following union is automatically generated by the - ** vdbe-compress.tcl script. The purpose of this union is to - ** reduce the amount of stack space required by this function. - ** See comments in the vdbe-compress.tcl script for details. + f1 = pMem1->flags; + f2 = pMem2->flags; + combined_flags = f1|f2; + assert( (combined_flags & MEM_RowSet)==0 ); + + /* If one value is NULL, it is less than the other. If both values + ** are NULL, return 0. */ - union vdbeExecUnion { - struct OP_Yield_stack_vars { - int pcDest; - } aa; - struct OP_Variable_stack_vars { - int p1; /* Variable to copy from */ - int p2; /* Register to copy to */ - int n; /* Number of values left to copy */ - Mem *pVar; /* Value being transferred */ - } ab; - struct OP_Move_stack_vars { - char *zMalloc; /* Holding variable for allocated memory */ - int n; /* Number of registers left to copy */ - int p1; /* Register to copy from */ - int p2; /* Register to copy to */ - } ac; - struct OP_ResultRow_stack_vars { - Mem *pMem; - int i; - } ad; - struct OP_Concat_stack_vars { - i64 nByte; - } ae; - struct OP_Remainder_stack_vars { - int flags; /* Combined MEM_* flags from both inputs */ - i64 iA; /* Integer value of left operand */ - i64 iB; /* Integer value of right operand */ - double rA; /* Real value of left operand */ - double rB; /* Real value of right operand */ - } af; - struct OP_Function_stack_vars { - int i; - Mem *pArg; - sqlite3_context ctx; - sqlite3_value **apVal; - int n; - } ag; - struct OP_ShiftRight_stack_vars { - i64 a; - i64 b; - } ah; - struct OP_Ge_stack_vars { - int flags; - int res; - char affinity; - } ai; - struct OP_Compare_stack_vars { - int n; - int i; - int p1; - int p2; - const KeyInfo *pKeyInfo; - int idx; - CollSeq *pColl; /* Collating sequence to use on this term */ - int bRev; /* True for DESCENDING sort order */ - } aj; - struct OP_Or_stack_vars { - int v1; /* Left operand: 0==FALSE, 1==TRUE, 2==UNKNOWN or NULL */ - int v2; /* Right operand: 0==FALSE, 1==TRUE, 2==UNKNOWN or NULL */ - } ak; - struct OP_IfNot_stack_vars { - int c; - } al; - struct OP_Column_stack_vars { - u32 payloadSize; /* Number of bytes in the record */ - i64 payloadSize64; /* Number of bytes in the record */ - int p1; /* P1 value of the opcode */ - int p2; /* column number to retrieve */ - VdbeCursor *pC; /* The VDBE cursor */ - char *zRec; /* Pointer to complete record-data */ - BtCursor *pCrsr; /* The BTree cursor */ - u32 *aType; /* aType[i] holds the numeric type of the i-th column */ - u32 *aOffset; /* aOffset[i] is offset to start of data for i-th column */ - int nField; /* number of fields in the record */ - int len; /* The length of the serialized data for the column */ - int i; /* Loop counter */ - char *zData; /* Part of the record being decoded */ - Mem *pDest; /* Where to write the extracted value */ - Mem sMem; /* For storing the record being decoded */ - u8 *zIdx; /* Index into header */ - u8 *zEndHdr; /* Pointer to first byte after the header */ - u32 offset; /* Offset into the data */ - u64 offset64; /* 64-bit offset. 64 bits needed to catch overflow */ - int szHdr; /* Size of the header size field at start of record */ - int avail; /* Number of bytes of available data */ - } am; - struct OP_Affinity_stack_vars { - char *zAffinity; /* The affinity to be applied */ - Mem *pData0; /* First register to which to apply affinity */ - Mem *pLast; /* Last register to which to apply affinity */ - Mem *pRec; /* Current register */ - } an; - struct OP_MakeRecord_stack_vars { - u8 *zNewRecord; /* A buffer to hold the data for the new record */ - Mem *pRec; /* The new record */ - u64 nData; /* Number of bytes of data space */ - int nHdr; /* Number of bytes of header space */ - i64 nByte; /* Data space required for this record */ - int nZero; /* Number of zero bytes at the end of the record */ - int nVarint; /* Number of bytes in a varint */ - u32 serial_type; /* Type field */ - Mem *pData0; /* First field to be combined into the record */ - Mem *pLast; /* Last field of the record */ - int nField; /* Number of fields in the record */ - char *zAffinity; /* The affinity string for the record */ - int file_format; /* File format to use for encoding */ - int i; /* Space used in zNewRecord[] */ - int len; /* Length of a field */ - } ao; - struct OP_Count_stack_vars { - i64 nEntry; - BtCursor *pCrsr; - } ap; - struct OP_Statement_stack_vars { - Btree *pBt; - } aq; - struct OP_Savepoint_stack_vars { - int p1; /* Value of P1 operand */ - char *zName; /* Name of savepoint */ - int nName; - Savepoint *pNew; - Savepoint *pSavepoint; - Savepoint *pTmp; - int iSavepoint; - int ii; - } ar; - struct OP_AutoCommit_stack_vars { - int desiredAutoCommit; - int iRollback; - int turnOnAC; - } as; - struct OP_Transaction_stack_vars { - Btree *pBt; - } at; - struct OP_ReadCookie_stack_vars { - int iMeta; - int iDb; - int iCookie; - } au; - struct OP_SetCookie_stack_vars { - Db *pDb; - } av; - struct OP_VerifyCookie_stack_vars { - int iMeta; - Btree *pBt; - } aw; - struct OP_OpenWrite_stack_vars { - int nField; - KeyInfo *pKeyInfo; - int p2; - int iDb; - int wrFlag; - Btree *pX; - VdbeCursor *pCur; - Db *pDb; - int flags; - } ax; - struct OP_OpenEphemeral_stack_vars { - VdbeCursor *pCx; - } ay; - struct OP_OpenPseudo_stack_vars { - VdbeCursor *pCx; - } az; - struct OP_SeekGt_stack_vars { - int res; - int oc; - VdbeCursor *pC; - UnpackedRecord r; - int nField; - i64 iKey; /* The rowid we are to seek to */ - } ba; - struct OP_Seek_stack_vars { - VdbeCursor *pC; - } bb; - struct OP_Found_stack_vars { - int alreadyExists; - VdbeCursor *pC; - int res; - UnpackedRecord *pIdxKey; - char aTempRec[ROUND8(sizeof(UnpackedRecord)) + sizeof(Mem)*3 + 7]; - } bc; - struct OP_IsUnique_stack_vars { - u16 ii; - VdbeCursor *pCx; - BtCursor *pCrsr; - u16 nField; - Mem *aMem; - UnpackedRecord r; /* B-Tree index search key */ - i64 R; /* Rowid stored in register P3 */ - } bd; - struct OP_NotExists_stack_vars { - VdbeCursor *pC; - BtCursor *pCrsr; - int res; - u64 iKey; - } be; - struct OP_NewRowid_stack_vars { - i64 v; /* The new rowid */ - VdbeCursor *pC; /* Cursor of table to get the new rowid */ - int res; /* Result of an sqlite3BtreeLast() */ - int cnt; /* Counter to limit the number of searches */ - Mem *pMem; /* Register holding largest rowid for AUTOINCREMENT */ - } bf; - struct OP_Insert_stack_vars { - Mem *pData; - Mem *pKey; - i64 iKey; /* The integer ROWID or key for the record to be inserted */ - VdbeCursor *pC; - int nZero; - int seekResult; - const char *zDb; - const char *zTbl; - int op; - } bg; - struct OP_Delete_stack_vars { - i64 iKey; - VdbeCursor *pC; - } bh; - struct OP_RowData_stack_vars { - VdbeCursor *pC; - BtCursor *pCrsr; - u32 n; - i64 n64; - } bi; - struct OP_Rowid_stack_vars { - VdbeCursor *pC; - i64 v; - sqlite3_vtab *pVtab; - const sqlite3_module *pModule; - } bj; - struct OP_NullRow_stack_vars { - VdbeCursor *pC; - } bk; - struct OP_Last_stack_vars { - VdbeCursor *pC; - BtCursor *pCrsr; - int res; - } bl; - struct OP_Rewind_stack_vars { - VdbeCursor *pC; - BtCursor *pCrsr; - int res; - } bm; - struct OP_Next_stack_vars { - VdbeCursor *pC; - BtCursor *pCrsr; - int res; - } bn; - struct OP_IdxInsert_stack_vars { - VdbeCursor *pC; - BtCursor *pCrsr; - int nKey; - const char *zKey; - } bo; - struct OP_IdxDelete_stack_vars { - VdbeCursor *pC; - BtCursor *pCrsr; - int res; - UnpackedRecord r; - } bp; - struct OP_IdxRowid_stack_vars { - BtCursor *pCrsr; - VdbeCursor *pC; - i64 rowid; - } bq; - struct OP_IdxGE_stack_vars { - VdbeCursor *pC; - int res; - UnpackedRecord r; - } br; - struct OP_Destroy_stack_vars { - int iMoved; - int iCnt; - Vdbe *pVdbe; - int iDb; - } bs; - struct OP_Clear_stack_vars { - int nChange; - } bt; - struct OP_CreateTable_stack_vars { - int pgno; - int flags; - Db *pDb; - } bu; - struct OP_ParseSchema_stack_vars { - int iDb; - const char *zMaster; - char *zSql; - InitData initData; - } bv; - struct OP_IntegrityCk_stack_vars { - int nRoot; /* Number of tables to check. (Number of root pages.) */ - int *aRoot; /* Array of rootpage numbers for tables to be checked */ - int j; /* Loop counter */ - int nErr; /* Number of errors reported */ - char *z; /* Text of the error report */ - Mem *pnErr; /* Register keeping track of errors remaining */ - } bw; - struct OP_RowSetAdd_stack_vars { - Mem *pIdx; - Mem *pVal; - } bx; - struct OP_RowSetRead_stack_vars { - Mem *pIdx; - i64 val; - } by; - struct OP_RowSetTest_stack_vars { - int iSet; - int exists; - } bz; - struct OP_ContextPush_stack_vars { - int i; - Context *pContext; - } ca; - struct OP_ContextPop_stack_vars { - Context *pContext; - } cb; - struct OP_AggStep_stack_vars { - int n; - int i; - Mem *pMem; - Mem *pRec; - sqlite3_context ctx; - sqlite3_value **apVal; - } cc; - struct OP_AggFinal_stack_vars { - Mem *pMem; - } cd; - struct OP_IncrVacuum_stack_vars { - Btree *pBt; - } ce; - struct OP_TableLock_stack_vars { - int p1; - u8 isWriteLock; - } cf; - struct OP_VBegin_stack_vars { - sqlite3_vtab *pVtab; - } cg; - struct OP_VOpen_stack_vars { - VdbeCursor *pCur; - sqlite3_vtab_cursor *pVtabCursor; - sqlite3_vtab *pVtab; - sqlite3_module *pModule; - } ch; - struct OP_VFilter_stack_vars { - int nArg; - int iQuery; - const sqlite3_module *pModule; - Mem *pQuery; - Mem *pArgc; - sqlite3_vtab_cursor *pVtabCursor; - sqlite3_vtab *pVtab; - VdbeCursor *pCur; - int res; - int i; - Mem **apArg; - } ci; - struct OP_VColumn_stack_vars { - sqlite3_vtab *pVtab; - const sqlite3_module *pModule; - Mem *pDest; - sqlite3_context sContext; - } cj; - struct OP_VNext_stack_vars { - sqlite3_vtab *pVtab; - const sqlite3_module *pModule; - int res; - VdbeCursor *pCur; - } ck; - struct OP_VRename_stack_vars { - sqlite3_vtab *pVtab; - Mem *pName; - } cl; - struct OP_VUpdate_stack_vars { - sqlite3_vtab *pVtab; - sqlite3_module *pModule; - int nArg; - int i; - sqlite_int64 rowid; - Mem **apArg; - Mem *pX; - } cm; - struct OP_Pagecount_stack_vars { - int p1; - int nPage; - Pager *pPager; - } cn; - struct OP_Trace_stack_vars { - char *zTrace; - } co; - } u; - /* End automatically generated code - ********************************************************************/ - - assert( p->magic==VDBE_MAGIC_RUN ); /* sqlite3_step() verifies this */ - assert( db->magic==SQLITE_MAGIC_BUSY ); - sqlite3VdbeMutexArrayEnter(p); - if( p->rc==SQLITE_NOMEM ){ - /* This happens if a malloc() inside a call to sqlite3_column_text() or - ** sqlite3_column_text16() failed. */ - goto no_mem; - } - assert( p->rc==SQLITE_OK || p->rc==SQLITE_BUSY ); - p->rc = SQLITE_OK; - assert( p->explain==0 ); - p->pResultSet = 0; - db->busyHandler.nBusy = 0; - CHECK_FOR_INTERRUPT; - sqlite3VdbeIOTraceSql(p); -#ifdef SQLITE_DEBUG - sqlite3BeginBenignMalloc(); - if( p->pc==0 - && ((p->db->flags & SQLITE_VdbeListing) || fileExists(db, "vdbe_explain")) - ){ - int i; - printf("VDBE Program Listing:\n"); - sqlite3VdbePrintSql(p); - for(i=0; inOp; i++){ - sqlite3VdbePrintOp(stdout, i, &p->aOp[i]); - } - } - if( fileExists(db, "vdbe_trace") ){ - p->trace = stdout; + if( combined_flags&MEM_Null ){ + return (f2&MEM_Null) - (f1&MEM_Null); } - sqlite3EndBenignMalloc(); -#endif - for(pc=p->pc; rc==SQLITE_OK; pc++){ - assert( pc>=0 && pcnOp ); - if( db->mallocFailed ) goto no_mem; -#ifdef VDBE_PROFILE - origPc = pc; - start = sqlite3Hwtime(); -#endif - pOp = &p->aOp[pc]; - /* Only allow tracing if SQLITE_DEBUG is defined. - */ -#ifdef SQLITE_DEBUG - if( p->trace ){ - if( pc==0 ){ - printf("VDBE Execution Trace:\n"); - sqlite3VdbePrintSql(p); - } - sqlite3VdbePrintOp(p->trace, pc, pOp); + /* If one value is a number and the other is not, the number is less. + ** If both are numbers, compare as reals if one is a real, or as integers + ** if both values are integers. + */ + if( combined_flags&(MEM_Int|MEM_Real) ){ + if( !(f1&(MEM_Int|MEM_Real)) ){ + return 1; } - if( p->trace==0 && pc==0 ){ - sqlite3BeginBenignMalloc(); - if( fileExists(db, "vdbe_sqltrace") ){ - sqlite3VdbePrintSql(p); - } - sqlite3EndBenignMalloc(); + if( !(f2&(MEM_Int|MEM_Real)) ){ + return -1; } -#endif - - - /* Check to see if we need to simulate an interrupt. This only happens - ** if we have a special test build. - */ -#ifdef SQLITE_TEST - if( sqlite3_interrupt_count>0 ){ - sqlite3_interrupt_count--; - if( sqlite3_interrupt_count==0 ){ - sqlite3_interrupt(db); + if( (f1 & f2 & MEM_Int)==0 ){ + double r1, r2; + if( (f1&MEM_Real)==0 ){ + r1 = (double)pMem1->u.i; + }else{ + r1 = pMem1->r; + } + if( (f2&MEM_Real)==0 ){ + r2 = (double)pMem2->u.i; + }else{ + r2 = pMem2->r; } + if( r1r2 ) return 1; + return 0; + }else{ + assert( f1&MEM_Int ); + assert( f2&MEM_Int ); + if( pMem1->u.i < pMem2->u.i ) return -1; + if( pMem1->u.i > pMem2->u.i ) return 1; + return 0; } -#endif + } -#ifndef SQLITE_OMIT_PROGRESS_CALLBACK - /* Call the progress callback if it is configured and the required number - ** of VDBE ops have been executed (either since this invocation of - ** sqlite3VdbeExec() or since last time the progress callback was called). - ** If the progress callback returns non-zero, exit the virtual machine with - ** a return code SQLITE_ABORT. - */ - if( db->xProgress ){ - if( db->nProgressOps==nProgressOps ){ - int prc; - if( sqlite3SafetyOff(db) ) goto abort_due_to_misuse; - prc =db->xProgress(db->pProgressArg); - if( sqlite3SafetyOn(db) ) goto abort_due_to_misuse; - if( prc!=0 ){ - rc = SQLITE_INTERRUPT; - goto vdbe_error_halt; - } - nProgressOps = 0; - } - nProgressOps++; + /* If one value is a string and the other is a blob, the string is less. + ** If both are strings, compare using the collating functions. + */ + if( combined_flags&MEM_Str ){ + if( (f1 & MEM_Str)==0 ){ + return 1; + } + if( (f2 & MEM_Str)==0 ){ + return -1; } -#endif - /* Do common setup processing for any opcode that is marked - ** with the "out2-prerelease" tag. Such opcodes have a single - ** output which is specified by the P2 parameter. The P2 register - ** is initialized to a NULL. - */ - opProperty = opcodeProperty[pOp->opcode]; - if( (opProperty & OPFLG_OUT2_PRERELEASE)!=0 ){ - assert( pOp->p2>0 ); - assert( pOp->p2<=p->nMem ); - pOut = &p->aMem[pOp->p2]; - sqlite3VdbeMemReleaseExternal(pOut); - pOut->flags = MEM_Null; - pOut->n = 0; - }else - - /* Do common setup for opcodes marked with one of the following - ** combinations of properties. - ** - ** in1 - ** in1 in2 - ** in1 in2 out3 - ** in1 in3 - ** - ** Variables pIn1, pIn2, and pIn3 are made to point to appropriate - ** registers for inputs. Variable pOut points to the output register. + assert( pMem1->enc==pMem2->enc ); + assert( pMem1->enc==SQLITE_UTF8 || + pMem1->enc==SQLITE_UTF16LE || pMem1->enc==SQLITE_UTF16BE ); + + /* The collation sequence must be defined at this point, even if + ** the user deletes the collation sequence after the vdbe program is + ** compiled (this was not always the case). */ - if( (opProperty & OPFLG_IN1)!=0 ){ - assert( pOp->p1>0 ); - assert( pOp->p1<=p->nMem ); - pIn1 = &p->aMem[pOp->p1]; - REGISTER_TRACE(pOp->p1, pIn1); - if( (opProperty & OPFLG_IN2)!=0 ){ - assert( pOp->p2>0 ); - assert( pOp->p2<=p->nMem ); - pIn2 = &p->aMem[pOp->p2]; - REGISTER_TRACE(pOp->p2, pIn2); - if( (opProperty & OPFLG_OUT3)!=0 ){ - assert( pOp->p3>0 ); - assert( pOp->p3<=p->nMem ); - pOut = &p->aMem[pOp->p3]; - } - }else if( (opProperty & OPFLG_IN3)!=0 ){ - assert( pOp->p3>0 ); - assert( pOp->p3<=p->nMem ); - pIn3 = &p->aMem[pOp->p3]; - REGISTER_TRACE(pOp->p3, pIn3); + assert( !pColl || pColl->xCmp ); + + if( pColl ){ + if( pMem1->enc==pColl->enc ){ + /* The strings are already in the correct encoding. Call the + ** comparison function directly */ + return pColl->xCmp(pColl->pUser,pMem1->n,pMem1->z,pMem2->n,pMem2->z); + }else{ + const void *v1, *v2; + int n1, n2; + Mem c1; + Mem c2; + memset(&c1, 0, sizeof(c1)); + memset(&c2, 0, sizeof(c2)); + sqlite3VdbeMemShallowCopy(&c1, pMem1, MEM_Ephem); + sqlite3VdbeMemShallowCopy(&c2, pMem2, MEM_Ephem); + v1 = sqlite3ValueText((sqlite3_value*)&c1, pColl->enc); + n1 = v1==0 ? 0 : c1.n; + v2 = sqlite3ValueText((sqlite3_value*)&c2, pColl->enc); + n2 = v2==0 ? 0 : c2.n; + rc = pColl->xCmp(pColl->pUser, n1, v1, n2, v2); + sqlite3VdbeMemRelease(&c1); + sqlite3VdbeMemRelease(&c2); + return rc; } - }else if( (opProperty & OPFLG_IN2)!=0 ){ - assert( pOp->p2>0 ); - assert( pOp->p2<=p->nMem ); - pIn2 = &p->aMem[pOp->p2]; - REGISTER_TRACE(pOp->p2, pIn2); - }else if( (opProperty & OPFLG_IN3)!=0 ){ - assert( pOp->p3>0 ); - assert( pOp->p3<=p->nMem ); - pIn3 = &p->aMem[pOp->p3]; - REGISTER_TRACE(pOp->p3, pIn3); } + /* If a NULL pointer was passed as the collate function, fall through + ** to the blob case and use memcmp(). */ + } + + /* Both values must be blobs. Compare using memcmp(). */ + rc = memcmp(pMem1->z, pMem2->z, (pMem1->n>pMem2->n)?pMem2->n:pMem1->n); + if( rc==0 ){ + rc = pMem1->n - pMem2->n; + } + return rc; +} - switch( pOp->opcode ){ - -/***************************************************************************** -** What follows is a massive switch statement where each case implements a -** separate instruction in the virtual machine. If we follow the usual -** indentation conventions, each case should be indented by 6 spaces. But -** that is a lot of wasted space on the left margin. So the code within -** the switch statement will break with convention and be flush-left. Another -** big comment (similar to this one) will mark the point in the code where -** we transition back to normal indentation. -** -** The formatting of each case is important. The makefile for SQLite -** generates two C files "opcodes.h" and "opcodes.c" by scanning this -** file looking for lines that begin with "case OP_". The opcodes.h files -** will be filled with #defines that give unique integer values to each -** opcode and the opcodes.c file is filled with an array of strings where -** each string is the symbolic name for the corresponding opcode. If the -** case statement is followed by a comment of the form "/# same as ... #/" -** that comment is used to determine the particular value of the opcode. -** -** Other keywords in the comment that follows each case are used to -** construct the OPFLG_INITIALIZER value that initializes opcodeProperty[]. -** Keywords include: in1, in2, in3, out2_prerelease, out2, out3. See -** the mkopcodeh.awk script for additional information. -** -** Documentation about VDBE opcodes is generated by scanning this file -** for lines of that contain "Opcode:". That line and all subsequent -** comment lines are used in the generation of the opcode.html documentation -** file. -** -** SUMMARY: -** -** Formatting is important to scripts that scan this file. -** Do not deviate from the formatting style currently in use. +/* +** Move data out of a btree key or data field and into a Mem structure. +** The data or key is taken from the entry that pCur is currently pointing +** to. offset and amt determine what portion of the data or key to retrieve. +** key is true to get the key or false to get data. The result is written +** into the pMem element. ** -*****************************************************************************/ - -/* Opcode: Goto * P2 * * * +** The pMem structure is assumed to be uninitialized. Any prior content +** is overwritten without being freed. ** -** An unconditional jump to address P2. -** The next instruction executed will be -** the one at index P2 from the beginning of -** the program. +** If this routine fails for any reason (malloc returns NULL or unable +** to read from the disk) then the pMem is left in an inconsistent state. */ -case OP_Goto: { /* jump */ - CHECK_FOR_INTERRUPT; - pc = pOp->p2 - 1; - break; -} +SQLITE_PRIVATE int sqlite3VdbeMemFromBtree( + BtCursor *pCur, /* Cursor pointing at record to retrieve. */ + int offset, /* Offset from the start of data to return bytes from. */ + int amt, /* Number of bytes to return. */ + int key, /* If true, retrieve from the btree key, not data. */ + Mem *pMem /* OUT: Return data in this Mem structure. */ +){ + char *zData; /* Data from the btree layer */ + int available = 0; /* Number of bytes available on the local btree page */ + int rc = SQLITE_OK; /* Return code */ -/* Opcode: Gosub P1 P2 * * * -** -** Write the current address onto register P1 -** and then jump to address P2. -*/ -case OP_Gosub: { /* jump */ - assert( pOp->p1>0 ); - assert( pOp->p1<=p->nMem ); - pIn1 = &p->aMem[pOp->p1]; - assert( (pIn1->flags & MEM_Dyn)==0 ); - pIn1->flags = MEM_Int; - pIn1->u.i = pc; - REGISTER_TRACE(pOp->p1, pIn1); - pc = pOp->p2 - 1; - break; -} + assert( sqlite3BtreeCursorIsValid(pCur) ); -/* Opcode: Return P1 * * * * -** -** Jump to the next instruction after the address in register P1. -*/ -case OP_Return: { /* in1 */ - assert( pIn1->flags & MEM_Int ); - pc = (int)pIn1->u.i; - break; -} + /* Note: the calls to BtreeKeyFetch() and DataFetch() below assert() + ** that both the BtShared and database handle mutexes are held. */ + assert( (pMem->flags & MEM_RowSet)==0 ); + if( key ){ + zData = (char *)sqlite3BtreeKeyFetch(pCur, &available); + }else{ + zData = (char *)sqlite3BtreeDataFetch(pCur, &available); + } + assert( zData!=0 ); -/* Opcode: Yield P1 * * * * -** -** Swap the program counter with the value in register P1. -*/ -case OP_Yield: { /* in1 */ -#if 0 /* local variables moved into u.aa */ - int pcDest; -#endif /* local variables moved into u.aa */ - assert( (pIn1->flags & MEM_Dyn)==0 ); - pIn1->flags = MEM_Int; - u.aa.pcDest = (int)pIn1->u.i; - pIn1->u.i = pc; - REGISTER_TRACE(pOp->p1, pIn1); - pc = u.aa.pcDest; - break; -} + if( offset+amt<=available && (pMem->flags&MEM_Dyn)==0 ){ + sqlite3VdbeMemRelease(pMem); + pMem->z = &zData[offset]; + pMem->flags = MEM_Blob|MEM_Ephem; + }else if( SQLITE_OK==(rc = sqlite3VdbeMemGrow(pMem, amt+2, 0)) ){ + pMem->flags = MEM_Blob|MEM_Dyn|MEM_Term; + pMem->enc = 0; + pMem->type = SQLITE_BLOB; + if( key ){ + rc = sqlite3BtreeKey(pCur, offset, amt, pMem->z); + }else{ + rc = sqlite3BtreeData(pCur, offset, amt, pMem->z); + } + pMem->z[amt] = 0; + pMem->z[amt+1] = 0; + if( rc!=SQLITE_OK ){ + sqlite3VdbeMemRelease(pMem); + } + } + pMem->n = amt; -/* Opcode: HaltIfNull P1 P2 P3 P4 * -** -** Check the value in register P3. If is is NULL then Halt using -** parameter P1, P2, and P4 as if this were a Halt instruction. If the -** value in register P3 is not NULL, then this routine is a no-op. -*/ -case OP_HaltIfNull: { /* in3 */ - if( (pIn3->flags & MEM_Null)==0 ) break; - /* Fall through into OP_Halt */ + return rc; } -/* Opcode: Halt P1 P2 * P4 * -** -** Exit immediately. All open cursors, etc are closed -** automatically. -** -** P1 is the result code returned by sqlite3_exec(), sqlite3_reset(), -** or sqlite3_finalize(). For a normal halt, this should be SQLITE_OK (0). -** For errors, it can be some other value. If P1!=0 then P2 will determine -** whether or not to rollback the current transaction. Do not rollback -** if P2==OE_Fail. Do the rollback if P2==OE_Rollback. If P2==OE_Abort, -** then back out all changes that have occurred during this execution of the -** VDBE, but do not rollback the transaction. -** -** If P4 is not null then it is an error message string. +/* This function is only available internally, it is not part of the +** external API. It works in a similar way to sqlite3_value_text(), +** except the data returned is in the encoding specified by the second +** parameter, which must be one of SQLITE_UTF16BE, SQLITE_UTF16LE or +** SQLITE_UTF8. ** -** There is an implied "Halt 0 0 0" instruction inserted at the very end of -** every program. So a jump past the last instruction of the program -** is the same as executing Halt. +** (2006-02-16:) The enc value can be or-ed with SQLITE_UTF16_ALIGNED. +** If that is the case, then the result must be aligned on an even byte +** boundary. */ -case OP_Halt: { - p->rc = pOp->p1; - p->pc = pc; - p->errorAction = (u8)pOp->p2; - if( pOp->p4.z ){ - sqlite3SetString(&p->zErrMsg, db, "%s", pOp->p4.z); +SQLITE_PRIVATE const void *sqlite3ValueText(sqlite3_value* pVal, u8 enc){ + if( !pVal ) return 0; + + assert( pVal->db==0 || sqlite3_mutex_held(pVal->db->mutex) ); + assert( (enc&3)==(enc&~SQLITE_UTF16_ALIGNED) ); + assert( (pVal->flags & MEM_RowSet)==0 ); + + if( pVal->flags&MEM_Null ){ + return 0; } - rc = sqlite3VdbeHalt(p); - assert( rc==SQLITE_BUSY || rc==SQLITE_OK ); - if( rc==SQLITE_BUSY ){ - p->rc = rc = SQLITE_BUSY; + assert( (MEM_Blob>>3) == MEM_Str ); + pVal->flags |= (pVal->flags & MEM_Blob)>>3; + ExpandBlob(pVal); + if( pVal->flags&MEM_Str ){ + sqlite3VdbeChangeEncoding(pVal, enc & ~SQLITE_UTF16_ALIGNED); + if( (enc & SQLITE_UTF16_ALIGNED)!=0 && 1==(1&SQLITE_PTR_TO_INT(pVal->z)) ){ + assert( (pVal->flags & (MEM_Ephem|MEM_Static))!=0 ); + if( sqlite3VdbeMemMakeWriteable(pVal)!=SQLITE_OK ){ + return 0; + } + } + sqlite3VdbeMemNulTerminate(pVal); /* IMP: R-31275-44060 */ }else{ - rc = p->rc ? SQLITE_ERROR : SQLITE_DONE; + assert( (pVal->flags&MEM_Blob)==0 ); + sqlite3VdbeMemStringify(pVal, enc); + assert( 0==(1&SQLITE_PTR_TO_INT(pVal->z)) ); + } + assert(pVal->enc==(enc & ~SQLITE_UTF16_ALIGNED) || pVal->db==0 + || pVal->db->mallocFailed ); + if( pVal->enc==(enc & ~SQLITE_UTF16_ALIGNED) ){ + return pVal->z; + }else{ + return 0; } - goto vdbe_return; } -/* Opcode: Integer P1 P2 * * * -** -** The 32-bit integer value P1 is written into register P2. +/* +** Create a new sqlite3_value object. */ -case OP_Integer: { /* out2-prerelease */ - pOut->flags = MEM_Int; - pOut->u.i = pOp->p1; - break; +SQLITE_PRIVATE sqlite3_value *sqlite3ValueNew(sqlite3 *db){ + Mem *p = sqlite3DbMallocZero(db, sizeof(*p)); + if( p ){ + p->flags = MEM_Null; + p->type = SQLITE_NULL; + p->db = db; + } + return p; } -/* Opcode: Int64 * P2 * P4 * +/* +** Create a new sqlite3_value object, containing the value of pExpr. ** -** P4 is a pointer to a 64-bit integer value. -** Write that value into register P2. +** This only works for very simple expressions that consist of one constant +** token (i.e. "5", "5.1", "'a string'"). If the expression can +** be converted directly into a value, then the value is allocated and +** a pointer written to *ppVal. The caller is responsible for deallocating +** the value by passing it to sqlite3ValueFree() later on. If the expression +** cannot be converted to a value, then *ppVal is set to NULL. */ -case OP_Int64: { /* out2-prerelease */ - assert( pOp->p4.pI64!=0 ); - pOut->flags = MEM_Int; - pOut->u.i = *pOp->p4.pI64; - break; -} +SQLITE_PRIVATE int sqlite3ValueFromExpr( + sqlite3 *db, /* The database connection */ + Expr *pExpr, /* The expression to evaluate */ + u8 enc, /* Encoding to use */ + u8 affinity, /* Affinity to use */ + sqlite3_value **ppVal /* Write the new value here */ +){ + int op; + char *zVal = 0; + sqlite3_value *pVal = 0; + int negInt = 1; + const char *zNeg = ""; -/* Opcode: Real * P2 * P4 * -** -** P4 is a pointer to a 64-bit floating point value. -** Write that value into register P2. -*/ -case OP_Real: { /* same as TK_FLOAT, out2-prerelease */ - pOut->flags = MEM_Real; - assert( !sqlite3IsNaN(*pOp->p4.pReal) ); - pOut->r = *pOp->p4.pReal; - break; -} + if( !pExpr ){ + *ppVal = 0; + return SQLITE_OK; + } + op = pExpr->op; -/* Opcode: String8 * P2 * P4 * -** -** P4 points to a nul terminated UTF-8 string. This opcode is transformed -** into an OP_String before it is executed for the first time. -*/ -case OP_String8: { /* same as TK_STRING, out2-prerelease */ - assert( pOp->p4.z!=0 ); - pOp->opcode = OP_String; - pOp->p1 = sqlite3Strlen30(pOp->p4.z); + /* op can only be TK_REGISTER if we have compiled with SQLITE_ENABLE_STAT3. + ** The ifdef here is to enable us to achieve 100% branch test coverage even + ** when SQLITE_ENABLE_STAT3 is omitted. + */ +#ifdef SQLITE_ENABLE_STAT3 + if( op==TK_REGISTER ) op = pExpr->op2; +#else + if( NEVER(op==TK_REGISTER) ) op = pExpr->op2; +#endif -#ifndef SQLITE_OMIT_UTF16 - if( encoding!=SQLITE_UTF8 ){ - rc = sqlite3VdbeMemSetStr(pOut, pOp->p4.z, -1, SQLITE_UTF8, SQLITE_STATIC); - if( rc==SQLITE_TOOBIG ) goto too_big; - if( SQLITE_OK!=sqlite3VdbeChangeEncoding(pOut, encoding) ) goto no_mem; - assert( pOut->zMalloc==pOut->z ); - assert( pOut->flags & MEM_Dyn ); - pOut->zMalloc = 0; - pOut->flags |= MEM_Static; - pOut->flags &= ~MEM_Dyn; - if( pOp->p4type==P4_DYNAMIC ){ - sqlite3DbFree(db, pOp->p4.z); + /* Handle negative integers in a single step. This is needed in the + ** case when the value is -9223372036854775808. + */ + if( op==TK_UMINUS + && (pExpr->pLeft->op==TK_INTEGER || pExpr->pLeft->op==TK_FLOAT) ){ + pExpr = pExpr->pLeft; + op = pExpr->op; + negInt = -1; + zNeg = "-"; + } + + if( op==TK_STRING || op==TK_FLOAT || op==TK_INTEGER ){ + pVal = sqlite3ValueNew(db); + if( pVal==0 ) goto no_mem; + if( ExprHasProperty(pExpr, EP_IntValue) ){ + sqlite3VdbeMemSetInt64(pVal, (i64)pExpr->u.iValue*negInt); + }else{ + zVal = sqlite3MPrintf(db, "%s%s", zNeg, pExpr->u.zToken); + if( zVal==0 ) goto no_mem; + sqlite3ValueSetStr(pVal, -1, zVal, SQLITE_UTF8, SQLITE_DYNAMIC); + if( op==TK_FLOAT ) pVal->type = SQLITE_FLOAT; } - pOp->p4type = P4_DYNAMIC; - pOp->p4.z = pOut->z; - pOp->p1 = pOut->n; + if( (op==TK_INTEGER || op==TK_FLOAT ) && affinity==SQLITE_AFF_NONE ){ + sqlite3ValueApplyAffinity(pVal, SQLITE_AFF_NUMERIC, SQLITE_UTF8); + }else{ + sqlite3ValueApplyAffinity(pVal, affinity, SQLITE_UTF8); + } + if( pVal->flags & (MEM_Int|MEM_Real) ) pVal->flags &= ~MEM_Str; + if( enc!=SQLITE_UTF8 ){ + sqlite3VdbeChangeEncoding(pVal, enc); + } + }else if( op==TK_UMINUS ) { + /* This branch happens for multiple negative signs. Ex: -(-5) */ + if( SQLITE_OK==sqlite3ValueFromExpr(db,pExpr->pLeft,enc,affinity,&pVal) ){ + sqlite3VdbeMemNumerify(pVal); + if( pVal->u.i==SMALLEST_INT64 ){ + pVal->flags &= MEM_Int; + pVal->flags |= MEM_Real; + pVal->r = (double)LARGEST_INT64; + }else{ + pVal->u.i = -pVal->u.i; + } + pVal->r = -pVal->r; + sqlite3ValueApplyAffinity(pVal, affinity, enc); + } + }else if( op==TK_NULL ){ + pVal = sqlite3ValueNew(db); + if( pVal==0 ) goto no_mem; + } +#ifndef SQLITE_OMIT_BLOB_LITERAL + else if( op==TK_BLOB ){ + int nVal; + assert( pExpr->u.zToken[0]=='x' || pExpr->u.zToken[0]=='X' ); + assert( pExpr->u.zToken[1]=='\'' ); + pVal = sqlite3ValueNew(db); + if( !pVal ) goto no_mem; + zVal = &pExpr->u.zToken[2]; + nVal = sqlite3Strlen30(zVal)-1; + assert( zVal[nVal]=='\'' ); + sqlite3VdbeMemSetStr(pVal, sqlite3HexToBlob(db, zVal, nVal), nVal/2, + 0, SQLITE_DYNAMIC); } #endif - if( pOp->p1>db->aLimit[SQLITE_LIMIT_LENGTH] ){ - goto too_big; + + if( pVal ){ + sqlite3VdbeMemStoreType(pVal); } - /* Fall through to the next case, OP_String */ + *ppVal = pVal; + return SQLITE_OK; + +no_mem: + db->mallocFailed = 1; + sqlite3DbFree(db, zVal); + sqlite3ValueFree(pVal); + *ppVal = 0; + return SQLITE_NOMEM; } - -/* Opcode: String P1 P2 * P4 * -** -** The string value P4 of length P1 (bytes) is stored in register P2. + +/* +** Change the string value of an sqlite3_value object */ -case OP_String: { /* out2-prerelease */ - assert( pOp->p4.z!=0 ); - pOut->flags = MEM_Str|MEM_Static|MEM_Term; - pOut->z = pOp->p4.z; - pOut->n = pOp->p1; - pOut->enc = encoding; - UPDATE_MAX_BLOBSIZE(pOut); - break; +SQLITE_PRIVATE void sqlite3ValueSetStr( + sqlite3_value *v, /* Value to be set */ + int n, /* Length of string z */ + const void *z, /* Text of the new string */ + u8 enc, /* Encoding to use */ + void (*xDel)(void*) /* Destructor for the string */ +){ + if( v ) sqlite3VdbeMemSetStr((Mem *)v, z, n, enc, xDel); } -/* Opcode: Null * P2 * * * -** -** Write a NULL into register P2. +/* +** Free an sqlite3_value object */ -case OP_Null: { /* out2-prerelease */ - break; +SQLITE_PRIVATE void sqlite3ValueFree(sqlite3_value *v){ + if( !v ) return; + sqlite3VdbeMemRelease((Mem *)v); + sqlite3DbFree(((Mem*)v)->db, v); } - -/* Opcode: Blob P1 P2 * P4 -** -** P4 points to a blob of data P1 bytes long. Store this -** blob in register P2. This instruction is not coded directly -** by the compiler. Instead, the compiler layer specifies -** an OP_HexBlob opcode, with the hex string representation of -** the blob as P4. This opcode is transformed to an OP_Blob -** the first time it is executed. +/* +** Return the number of bytes in the sqlite3_value object assuming +** that it uses the encoding "enc" */ -case OP_Blob: { /* out2-prerelease */ - assert( pOp->p1 <= SQLITE_MAX_LENGTH ); - sqlite3VdbeMemSetStr(pOut, pOp->p4.z, pOp->p1, 0, 0); - pOut->enc = encoding; - UPDATE_MAX_BLOBSIZE(pOut); - break; +SQLITE_PRIVATE int sqlite3ValueBytes(sqlite3_value *pVal, u8 enc){ + Mem *p = (Mem*)pVal; + if( (p->flags & MEM_Blob)!=0 || sqlite3ValueText(pVal, enc) ){ + if( p->flags & MEM_Zero ){ + return p->n + p->u.nZero; + }else{ + return p->n; + } + } + return 0; } -/* Opcode: Variable P1 P2 P3 P4 * +/************** End of vdbemem.c *********************************************/ +/************** Begin file vdbeaux.c *****************************************/ +/* +** 2003 September 6 ** -** Transfer the values of bound parameters P1..P1+P3-1 into registers -** P2..P2+P3-1. +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: ** -** If the parameter is named, then its name appears in P4 and P3==1. -** The P4 value is used by sqlite3_bind_parameter_name(). +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** This file contains code used for creating, destroying, and populating +** a VDBE (or an "sqlite3_stmt" as it is known to the outside world.) Prior +** to version 2.8.7, all this code was combined into the vdbe.c source file. +** But that file was getting too big so this subroutines were split out. */ -case OP_Variable: { -#if 0 /* local variables moved into u.ab */ - int p1; /* Variable to copy from */ - int p2; /* Register to copy to */ - int n; /* Number of values left to copy */ - Mem *pVar; /* Value being transferred */ -#endif /* local variables moved into u.ab */ - u.ab.p1 = pOp->p1 - 1; - u.ab.p2 = pOp->p2; - u.ab.n = pOp->p3; - assert( u.ab.p1>=0 && u.ab.p1+u.ab.n<=p->nVar ); - assert( u.ab.p2>=1 && u.ab.p2+u.ab.n-1<=p->nMem ); - assert( pOp->p4.z==0 || pOp->p3==1 ); - while( u.ab.n-- > 0 ){ - u.ab.pVar = &p->aVar[u.ab.p1++]; - if( sqlite3VdbeMemTooBig(u.ab.pVar) ){ - goto too_big; - } - pOut = &p->aMem[u.ab.p2++]; - sqlite3VdbeMemReleaseExternal(pOut); - pOut->flags = MEM_Null; - sqlite3VdbeMemShallowCopy(pOut, u.ab.pVar, MEM_Static); - UPDATE_MAX_BLOBSIZE(pOut); - } - break; -} -/* Opcode: Move P1 P2 P3 * * -** -** Move the values in register P1..P1+P3-1 over into -** registers P2..P2+P3-1. Registers P1..P1+P1-1 are -** left holding a NULL. It is an error for register ranges -** P1..P1+P3-1 and P2..P2+P3-1 to overlap. +/* +** When debugging the code generator in a symbolic debugger, one can +** set the sqlite3VdbeAddopTrace to 1 and all opcodes will be printed +** as they are added to the instruction stream. */ -case OP_Move: { -#if 0 /* local variables moved into u.ac */ - char *zMalloc; /* Holding variable for allocated memory */ - int n; /* Number of registers left to copy */ - int p1; /* Register to copy from */ - int p2; /* Register to copy to */ -#endif /* local variables moved into u.ac */ +#ifdef SQLITE_DEBUG +SQLITE_PRIVATE int sqlite3VdbeAddopTrace = 0; +#endif - u.ac.n = pOp->p3; - u.ac.p1 = pOp->p1; - u.ac.p2 = pOp->p2; - assert( u.ac.n>0 && u.ac.p1>0 && u.ac.p2>0 ); - assert( u.ac.p1+u.ac.n<=u.ac.p2 || u.ac.p2+u.ac.n<=u.ac.p1 ); - - pIn1 = &p->aMem[u.ac.p1]; - pOut = &p->aMem[u.ac.p2]; - while( u.ac.n-- ){ - assert( pOut<=&p->aMem[p->nMem] ); - assert( pIn1<=&p->aMem[p->nMem] ); - u.ac.zMalloc = pOut->zMalloc; - pOut->zMalloc = 0; - sqlite3VdbeMemMove(pOut, pIn1); - pIn1->zMalloc = u.ac.zMalloc; - REGISTER_TRACE(u.ac.p2++, pOut); - pIn1++; - pOut++; - } - break; -} -/* Opcode: Copy P1 P2 * * * -** -** Make a copy of register P1 into register P2. -** -** This instruction makes a deep copy of the value. A duplicate -** is made of any string or blob constant. See also OP_SCopy. +/* +** Create a new virtual database engine. */ -case OP_Copy: { /* in1 */ - assert( pOp->p2>0 ); - assert( pOp->p2<=p->nMem ); - pOut = &p->aMem[pOp->p2]; - assert( pOut!=pIn1 ); - sqlite3VdbeMemShallowCopy(pOut, pIn1, MEM_Ephem); - Deephemeralize(pOut); - REGISTER_TRACE(pOp->p2, pOut); - break; +SQLITE_PRIVATE Vdbe *sqlite3VdbeCreate(sqlite3 *db){ + Vdbe *p; + p = sqlite3DbMallocZero(db, sizeof(Vdbe) ); + if( p==0 ) return 0; + p->db = db; + if( db->pVdbe ){ + db->pVdbe->pPrev = p; + } + p->pNext = db->pVdbe; + p->pPrev = 0; + db->pVdbe = p; + p->magic = VDBE_MAGIC_INIT; + return p; } -/* Opcode: SCopy P1 P2 * * * -** -** Make a shallow copy of register P1 into register P2. -** -** This instruction makes a shallow copy of the value. If the value -** is a string or blob, then the copy is only a pointer to the -** original and hence if the original changes so will the copy. -** Worse, if the original is deallocated, the copy becomes invalid. -** Thus the program must guarantee that the original will not change -** during the lifetime of the copy. Use OP_Copy to make a complete -** copy. +/* +** Remember the SQL string for a prepared statement. */ -case OP_SCopy: { /* in1 */ - REGISTER_TRACE(pOp->p1, pIn1); - assert( pOp->p2>0 ); - assert( pOp->p2<=p->nMem ); - pOut = &p->aMem[pOp->p2]; - assert( pOut!=pIn1 ); - sqlite3VdbeMemShallowCopy(pOut, pIn1, MEM_Ephem); - REGISTER_TRACE(pOp->p2, pOut); - break; +SQLITE_PRIVATE void sqlite3VdbeSetSql(Vdbe *p, const char *z, int n, int isPrepareV2){ + assert( isPrepareV2==1 || isPrepareV2==0 ); + if( p==0 ) return; +#ifdef SQLITE_OMIT_TRACE + if( !isPrepareV2 ) return; +#endif + assert( p->zSql==0 ); + p->zSql = sqlite3DbStrNDup(p->db, z, n); + p->isPrepareV2 = (u8)isPrepareV2; } -/* Opcode: ResultRow P1 P2 * * * -** -** The registers P1 through P1+P2-1 contain a single row of -** results. This opcode causes the sqlite3_step() call to terminate -** with an SQLITE_ROW return code and it sets up the sqlite3_stmt -** structure to provide access to the top P1 values as the result -** row. +/* +** Return the SQL associated with a prepared statement */ -case OP_ResultRow: { -#if 0 /* local variables moved into u.ad */ - Mem *pMem; - int i; -#endif /* local variables moved into u.ad */ - assert( p->nResColumn==pOp->p2 ); - assert( pOp->p1>0 ); - assert( pOp->p1+pOp->p2<=p->nMem+1 ); +SQLITE_API const char *sqlite3_sql(sqlite3_stmt *pStmt){ + Vdbe *p = (Vdbe *)pStmt; + return (p && p->isPrepareV2) ? p->zSql : 0; +} - /* If the SQLITE_CountRows flag is set in sqlite3.flags mask, then - ** DML statements invoke this opcode to return the number of rows - ** modified to the user. This is the only way that a VM that - ** opens a statement transaction may invoke this opcode. - ** - ** In case this is such a statement, close any statement transaction - ** opened by this VM before returning control to the user. This is to - ** ensure that statement-transactions are always nested, not overlapping. - ** If the open statement-transaction is not closed here, then the user - ** may step another VM that opens its own statement transaction. This - ** may lead to overlapping statement transactions. - ** - ** The statement transaction is never a top-level transaction. Hence - ** the RELEASE call below can never fail. - */ - assert( p->iStatement==0 || db->flags&SQLITE_CountRows ); - rc = sqlite3VdbeCloseStatement(p, SAVEPOINT_RELEASE); - if( NEVER(rc!=SQLITE_OK) ){ - break; - } +/* +** Swap all content between two VDBE structures. +*/ +SQLITE_PRIVATE void sqlite3VdbeSwap(Vdbe *pA, Vdbe *pB){ + Vdbe tmp, *pTmp; + char *zTmp; + tmp = *pA; + *pA = *pB; + *pB = tmp; + pTmp = pA->pNext; + pA->pNext = pB->pNext; + pB->pNext = pTmp; + pTmp = pA->pPrev; + pA->pPrev = pB->pPrev; + pB->pPrev = pTmp; + zTmp = pA->zSql; + pA->zSql = pB->zSql; + pB->zSql = zTmp; + pB->isPrepareV2 = pA->isPrepareV2; +} - /* Invalidate all ephemeral cursor row caches */ - p->cacheCtr = (p->cacheCtr + 2)|1; +#ifdef SQLITE_DEBUG +/* +** Turn tracing on or off +*/ +SQLITE_PRIVATE void sqlite3VdbeTrace(Vdbe *p, FILE *trace){ + p->trace = trace; +} +#endif - /* Make sure the results of the current row are \000 terminated - ** and have an assigned type. The results are de-ephemeralized as - ** as side effect. - */ - u.ad.pMem = p->pResultSet = &p->aMem[pOp->p1]; - for(u.ad.i=0; u.ad.ip2; u.ad.i++){ - sqlite3VdbeMemNulTerminate(&u.ad.pMem[u.ad.i]); - storeTypeInfo(&u.ad.pMem[u.ad.i], encoding); - REGISTER_TRACE(pOp->p1+u.ad.i, &u.ad.pMem[u.ad.i]); +/* +** Resize the Vdbe.aOp array so that it is at least one op larger than +** it was. +** +** If an out-of-memory error occurs while resizing the array, return +** SQLITE_NOMEM. In this case Vdbe.aOp and Vdbe.nOpAlloc remain +** unchanged (this is so that any opcodes already allocated can be +** correctly deallocated along with the rest of the Vdbe). +*/ +static int growOpArray(Vdbe *p){ + VdbeOp *pNew; + int nNew = (p->nOpAlloc ? p->nOpAlloc*2 : (int)(1024/sizeof(Op))); + pNew = sqlite3DbRealloc(p->db, p->aOp, nNew*sizeof(Op)); + if( pNew ){ + p->nOpAlloc = sqlite3DbMallocSize(p->db, pNew)/sizeof(Op); + p->aOp = pNew; } - if( db->mallocFailed ) goto no_mem; - - /* Return SQLITE_ROW - */ - p->pc = pc + 1; - rc = SQLITE_ROW; - goto vdbe_return; + return (pNew ? SQLITE_OK : SQLITE_NOMEM); } -/* Opcode: Concat P1 P2 P3 * * +/* +** Add a new instruction to the list of instructions current in the +** VDBE. Return the address of the new instruction. ** -** Add the text in register P1 onto the end of the text in -** register P2 and store the result in register P3. -** If either the P1 or P2 text are NULL then store NULL in P3. +** Parameters: ** -** P3 = P2 || P1 +** p Pointer to the VDBE ** -** It is illegal for P1 and P3 to be the same register. Sometimes, -** if P3 is the same register as P2, the implementation is able -** to avoid a memcpy(). +** op The opcode for this instruction +** +** p1, p2, p3 Operands +** +** Use the sqlite3VdbeResolveLabel() function to fix an address and +** the sqlite3VdbeChangeP4() function to change the value of the P4 +** operand. */ -case OP_Concat: { /* same as TK_CONCAT, in1, in2, out3 */ -#if 0 /* local variables moved into u.ae */ - i64 nByte; -#endif /* local variables moved into u.ae */ +SQLITE_PRIVATE int sqlite3VdbeAddOp3(Vdbe *p, int op, int p1, int p2, int p3){ + int i; + VdbeOp *pOp; - assert( pIn1!=pOut ); - if( (pIn1->flags | pIn2->flags) & MEM_Null ){ - sqlite3VdbeMemSetNull(pOut); - break; - } - if( ExpandBlob(pIn1) || ExpandBlob(pIn2) ) goto no_mem; - Stringify(pIn1, encoding); - Stringify(pIn2, encoding); - u.ae.nByte = pIn1->n + pIn2->n; - if( u.ae.nByte>db->aLimit[SQLITE_LIMIT_LENGTH] ){ - goto too_big; - } - MemSetTypeFlag(pOut, MEM_Str); - if( sqlite3VdbeMemGrow(pOut, (int)u.ae.nByte+2, pOut==pIn2) ){ - goto no_mem; - } - if( pOut!=pIn2 ){ - memcpy(pOut->z, pIn2->z, pIn2->n); + i = p->nOp; + assert( p->magic==VDBE_MAGIC_INIT ); + assert( op>0 && op<0xff ); + if( p->nOpAlloc<=i ){ + if( growOpArray(p) ){ + return 1; + } } - memcpy(&pOut->z[pIn2->n], pIn1->z, pIn1->n); - pOut->z[u.ae.nByte] = 0; - pOut->z[u.ae.nByte+1] = 0; - pOut->flags |= MEM_Term; - pOut->n = (int)u.ae.nByte; - pOut->enc = encoding; - UPDATE_MAX_BLOBSIZE(pOut); - break; + p->nOp++; + pOp = &p->aOp[i]; + pOp->opcode = (u8)op; + pOp->p5 = 0; + pOp->p1 = p1; + pOp->p2 = p2; + pOp->p3 = p3; + pOp->p4.p = 0; + pOp->p4type = P4_NOTUSED; +#ifdef SQLITE_DEBUG + pOp->zComment = 0; + if( sqlite3VdbeAddopTrace ) sqlite3VdbePrintOp(0, i, &p->aOp[i]); +#endif +#ifdef VDBE_PROFILE + pOp->cycles = 0; + pOp->cnt = 0; +#endif + return i; +} +SQLITE_PRIVATE int sqlite3VdbeAddOp0(Vdbe *p, int op){ + return sqlite3VdbeAddOp3(p, op, 0, 0, 0); +} +SQLITE_PRIVATE int sqlite3VdbeAddOp1(Vdbe *p, int op, int p1){ + return sqlite3VdbeAddOp3(p, op, p1, 0, 0); +} +SQLITE_PRIVATE int sqlite3VdbeAddOp2(Vdbe *p, int op, int p1, int p2){ + return sqlite3VdbeAddOp3(p, op, p1, p2, 0); } -/* Opcode: Add P1 P2 P3 * * + +/* +** Add an opcode that includes the p4 value as a pointer. +*/ +SQLITE_PRIVATE int sqlite3VdbeAddOp4( + Vdbe *p, /* Add the opcode to this VM */ + int op, /* The new opcode */ + int p1, /* The P1 operand */ + int p2, /* The P2 operand */ + int p3, /* The P3 operand */ + const char *zP4, /* The P4 operand */ + int p4type /* P4 operand type */ +){ + int addr = sqlite3VdbeAddOp3(p, op, p1, p2, p3); + sqlite3VdbeChangeP4(p, addr, zP4, p4type); + return addr; +} + +/* +** Add an OP_ParseSchema opcode. This routine is broken out from +** sqlite3VdbeAddOp4() since it needs to also needs to mark all btrees +** as having been used. ** -** Add the value in register P1 to the value in register P2 -** and store the result in register P3. -** If either input is NULL, the result is NULL. +** The zWhere string must have been obtained from sqlite3_malloc(). +** This routine will take ownership of the allocated memory. */ -/* Opcode: Multiply P1 P2 P3 * * +SQLITE_PRIVATE void sqlite3VdbeAddParseSchemaOp(Vdbe *p, int iDb, char *zWhere){ + int j; + int addr = sqlite3VdbeAddOp3(p, OP_ParseSchema, iDb, 0, 0); + sqlite3VdbeChangeP4(p, addr, zWhere, P4_DYNAMIC); + for(j=0; jdb->nDb; j++) sqlite3VdbeUsesBtree(p, j); +} + +/* +** Add an opcode that includes the p4 value as an integer. +*/ +SQLITE_PRIVATE int sqlite3VdbeAddOp4Int( + Vdbe *p, /* Add the opcode to this VM */ + int op, /* The new opcode */ + int p1, /* The P1 operand */ + int p2, /* The P2 operand */ + int p3, /* The P3 operand */ + int p4 /* The P4 operand as an integer */ +){ + int addr = sqlite3VdbeAddOp3(p, op, p1, p2, p3); + sqlite3VdbeChangeP4(p, addr, SQLITE_INT_TO_PTR(p4), P4_INT32); + return addr; +} + +/* +** Create a new symbolic label for an instruction that has yet to be +** coded. The symbolic label is really just a negative number. The +** label can be used as the P2 value of an operation. Later, when +** the label is resolved to a specific address, the VDBE will scan +** through its operation list and change all values of P2 which match +** the label into the resolved address. ** +** The VDBE knows that a P2 value is a label because labels are +** always negative and P2 values are suppose to be non-negative. +** Hence, a negative P2 value is a label that has yet to be resolved. ** -** Multiply the value in register P1 by the value in register P2 -** and store the result in register P3. -** If either input is NULL, the result is NULL. +** Zero is returned if a malloc() fails. */ -/* Opcode: Subtract P1 P2 P3 * * -** -** Subtract the value in register P1 from the value in register P2 -** and store the result in register P3. -** If either input is NULL, the result is NULL. +SQLITE_PRIVATE int sqlite3VdbeMakeLabel(Vdbe *p){ + int i = p->nLabel++; + assert( p->magic==VDBE_MAGIC_INIT ); + if( (i & (i-1))==0 ){ + p->aLabel = sqlite3DbReallocOrFree(p->db, p->aLabel, + (i*2+1)*sizeof(p->aLabel[0])); + } + if( p->aLabel ){ + p->aLabel[i] = -1; + } + return -1-i; +} + +/* +** Resolve label "x" to be the address of the next instruction to +** be inserted. The parameter "x" must have been obtained from +** a prior call to sqlite3VdbeMakeLabel(). */ -/* Opcode: Divide P1 P2 P3 * * -** -** Divide the value in register P1 by the value in register P2 -** and store the result in register P3. If the value in register P2 -** is zero, then the result is NULL. -** If either input is NULL, the result is NULL. +SQLITE_PRIVATE void sqlite3VdbeResolveLabel(Vdbe *p, int x){ + int j = -1-x; + assert( p->magic==VDBE_MAGIC_INIT ); + assert( j>=0 && jnLabel ); + if( p->aLabel ){ + p->aLabel[j] = p->nOp; + } +} + +/* +** Mark the VDBE as one that can only be run one time. */ -/* Opcode: Remainder P1 P2 P3 * * +SQLITE_PRIVATE void sqlite3VdbeRunOnlyOnce(Vdbe *p){ + p->runOnlyOnce = 1; +} + +#ifdef SQLITE_DEBUG /* sqlite3AssertMayAbort() logic */ + +/* +** The following type and function are used to iterate through all opcodes +** in a Vdbe main program and each of the sub-programs (triggers) it may +** invoke directly or indirectly. It should be used as follows: ** -** Compute the remainder after integer division of the value in -** register P1 by the value in register P2 and store the result in P3. -** If the value in register P2 is zero the result is NULL. -** If either operand is NULL, the result is NULL. +** Op *pOp; +** VdbeOpIter sIter; +** +** memset(&sIter, 0, sizeof(sIter)); +** sIter.v = v; // v is of type Vdbe* +** while( (pOp = opIterNext(&sIter)) ){ +** // Do something with pOp +** } +** sqlite3DbFree(v->db, sIter.apSub); +** */ -case OP_Add: /* same as TK_PLUS, in1, in2, out3 */ -case OP_Subtract: /* same as TK_MINUS, in1, in2, out3 */ -case OP_Multiply: /* same as TK_STAR, in1, in2, out3 */ -case OP_Divide: /* same as TK_SLASH, in1, in2, out3 */ -case OP_Remainder: { /* same as TK_REM, in1, in2, out3 */ -#if 0 /* local variables moved into u.af */ - int flags; /* Combined MEM_* flags from both inputs */ - i64 iA; /* Integer value of left operand */ - i64 iB; /* Integer value of right operand */ - double rA; /* Real value of left operand */ - double rB; /* Real value of right operand */ -#endif /* local variables moved into u.af */ +typedef struct VdbeOpIter VdbeOpIter; +struct VdbeOpIter { + Vdbe *v; /* Vdbe to iterate through the opcodes of */ + SubProgram **apSub; /* Array of subprograms */ + int nSub; /* Number of entries in apSub */ + int iAddr; /* Address of next instruction to return */ + int iSub; /* 0 = main program, 1 = first sub-program etc. */ +}; +static Op *opIterNext(VdbeOpIter *p){ + Vdbe *v = p->v; + Op *pRet = 0; + Op *aOp; + int nOp; - applyNumericAffinity(pIn1); - applyNumericAffinity(pIn2); - u.af.flags = pIn1->flags | pIn2->flags; - if( (u.af.flags & MEM_Null)!=0 ) goto arithmetic_result_is_null; - if( (pIn1->flags & pIn2->flags & MEM_Int)==MEM_Int ){ - u.af.iA = pIn1->u.i; - u.af.iB = pIn2->u.i; - switch( pOp->opcode ){ - case OP_Add: u.af.iB += u.af.iA; break; - case OP_Subtract: u.af.iB -= u.af.iA; break; - case OP_Multiply: u.af.iB *= u.af.iA; break; - case OP_Divide: { - if( u.af.iA==0 ) goto arithmetic_result_is_null; - /* Dividing the largest possible negative 64-bit integer (1<<63) by - ** -1 returns an integer too large to store in a 64-bit data-type. On - ** some architectures, the value overflows to (1<<63). On others, - ** a SIGFPE is issued. The following statement normalizes this - ** behavior so that all architectures behave as if integer - ** overflow occurred. - */ - if( u.af.iA==-1 && u.af.iB==SMALLEST_INT64 ) u.af.iA = 1; - u.af.iB /= u.af.iA; - break; - } - default: { - if( u.af.iA==0 ) goto arithmetic_result_is_null; - if( u.af.iA==-1 ) u.af.iA = 1; - u.af.iB %= u.af.iA; - break; - } + if( p->iSub<=p->nSub ){ + + if( p->iSub==0 ){ + aOp = v->aOp; + nOp = v->nOp; + }else{ + aOp = p->apSub[p->iSub-1]->aOp; + nOp = p->apSub[p->iSub-1]->nOp; } - pOut->u.i = u.af.iB; - MemSetTypeFlag(pOut, MEM_Int); - }else{ - u.af.rA = sqlite3VdbeRealValue(pIn1); - u.af.rB = sqlite3VdbeRealValue(pIn2); - switch( pOp->opcode ){ - case OP_Add: u.af.rB += u.af.rA; break; - case OP_Subtract: u.af.rB -= u.af.rA; break; - case OP_Multiply: u.af.rB *= u.af.rA; break; - case OP_Divide: { - /* (double)0 In case of SQLITE_OMIT_FLOATING_POINT... */ - if( u.af.rA==(double)0 ) goto arithmetic_result_is_null; - u.af.rB /= u.af.rA; - break; + assert( p->iAddriAddr]; + p->iAddr++; + if( p->iAddr==nOp ){ + p->iSub++; + p->iAddr = 0; + } + + if( pRet->p4type==P4_SUBPROGRAM ){ + int nByte = (p->nSub+1)*sizeof(SubProgram*); + int j; + for(j=0; jnSub; j++){ + if( p->apSub[j]==pRet->p4.pProgram ) break; } - default: { - u.af.iA = (i64)u.af.rA; - u.af.iB = (i64)u.af.rB; - if( u.af.iA==0 ) goto arithmetic_result_is_null; - if( u.af.iA==-1 ) u.af.iA = 1; - u.af.rB = (double)(u.af.iB % u.af.iA); - break; + if( j==p->nSub ){ + p->apSub = sqlite3DbReallocOrFree(v->db, p->apSub, nByte); + if( !p->apSub ){ + pRet = 0; + }else{ + p->apSub[p->nSub++] = pRet->p4.pProgram; + } } } - if( sqlite3IsNaN(u.af.rB) ){ - goto arithmetic_result_is_null; - } - pOut->r = u.af.rB; - MemSetTypeFlag(pOut, MEM_Real); - if( (u.af.flags & MEM_Real)==0 ){ - sqlite3VdbeIntegerAffinity(pOut); - } } - break; -arithmetic_result_is_null: - sqlite3VdbeMemSetNull(pOut); - break; + return pRet; } -/* Opcode: CollSeq * * P4 +/* +** Check if the program stored in the VM associated with pParse may +** throw an ABORT exception (causing the statement, but not entire transaction +** to be rolled back). This condition is true if the main program or any +** sub-programs contains any of the following: ** -** P4 is a pointer to a CollSeq struct. If the next call to a user function -** or aggregate calls sqlite3GetFuncCollSeq(), this collation sequence will -** be returned. This is used by the built-in min(), max() and nullif() -** functions. +** * OP_Halt with P1=SQLITE_CONSTRAINT and P2=OE_Abort. +** * OP_HaltIfNull with P1=SQLITE_CONSTRAINT and P2=OE_Abort. +** * OP_Destroy +** * OP_VUpdate +** * OP_VRename +** * OP_FkCounter with P2==0 (immediate foreign key constraint) ** -** The interface used by the implementation of the aforementioned functions -** to retrieve the collation sequence set by this opcode is not available -** publicly, only to user functions defined in func.c. +** Then check that the value of Parse.mayAbort is true if an +** ABORT may be thrown, or false otherwise. Return true if it does +** match, or false otherwise. This function is intended to be used as +** part of an assert statement in the compiler. Similar to: +** +** assert( sqlite3VdbeAssertMayAbort(pParse->pVdbe, pParse->mayAbort) ); */ -case OP_CollSeq: { - assert( pOp->p4type==P4_COLLSEQ ); - break; +SQLITE_PRIVATE int sqlite3VdbeAssertMayAbort(Vdbe *v, int mayAbort){ + int hasAbort = 0; + Op *pOp; + VdbeOpIter sIter; + memset(&sIter, 0, sizeof(sIter)); + sIter.v = v; + + while( (pOp = opIterNext(&sIter))!=0 ){ + int opcode = pOp->opcode; + if( opcode==OP_Destroy || opcode==OP_VUpdate || opcode==OP_VRename +#ifndef SQLITE_OMIT_FOREIGN_KEY + || (opcode==OP_FkCounter && pOp->p1==0 && pOp->p2==1) +#endif + || ((opcode==OP_Halt || opcode==OP_HaltIfNull) + && (pOp->p1==SQLITE_CONSTRAINT && pOp->p2==OE_Abort)) + ){ + hasAbort = 1; + break; + } + } + sqlite3DbFree(v->db, sIter.apSub); + + /* Return true if hasAbort==mayAbort. Or if a malloc failure occured. + ** If malloc failed, then the while() loop above may not have iterated + ** through all opcodes and hasAbort may be set incorrectly. Return + ** true for this case to prevent the assert() in the callers frame + ** from failing. */ + return ( v->db->mallocFailed || hasAbort==mayAbort ); } +#endif /* SQLITE_DEBUG - the sqlite3AssertMayAbort() function */ -/* Opcode: Function P1 P2 P3 P4 P5 +/* +** Loop through the program looking for P2 values that are negative +** on jump instructions. Each such value is a label. Resolve the +** label by setting the P2 value to its correct non-zero value. ** -** Invoke a user function (P4 is a pointer to a Function structure that -** defines the function) with P5 arguments taken from register P2 and -** successors. The result of the function is stored in register P3. -** Register P3 must not be one of the function inputs. +** This routine is called once after all opcodes have been inserted. ** -** P1 is a 32-bit bitmask indicating whether or not each argument to the -** function was determined to be constant at compile time. If the first -** argument was constant then bit 0 of P1 is set. This is used to determine -** whether meta data associated with a user function argument using the -** sqlite3_set_auxdata() API may be safely retained until the next -** invocation of this opcode. +** Variable *pMaxFuncArgs is set to the maximum value of any P2 argument +** to an OP_Function, OP_AggStep or OP_VFilter opcode. This is used by +** sqlite3VdbeMakeReady() to size the Vdbe.apArg[] array. ** -** See also: AggStep and AggFinal +** The Op.opflags field is set on all opcodes. */ -case OP_Function: { -#if 0 /* local variables moved into u.ag */ +static void resolveP2Values(Vdbe *p, int *pMaxFuncArgs){ int i; - Mem *pArg; - sqlite3_context ctx; - sqlite3_value **apVal; - int n; -#endif /* local variables moved into u.ag */ - - u.ag.n = pOp->p5; - u.ag.apVal = p->apArg; - assert( u.ag.apVal || u.ag.n==0 ); + int nMaxArgs = *pMaxFuncArgs; + Op *pOp; + int *aLabel = p->aLabel; + p->readOnly = 1; + for(pOp=p->aOp, i=p->nOp-1; i>=0; i--, pOp++){ + u8 opcode = pOp->opcode; - assert( u.ag.n==0 || (pOp->p2>0 && pOp->p2+u.ag.n<=p->nMem+1) ); - assert( pOp->p3p2 || pOp->p3>=pOp->p2+u.ag.n ); - u.ag.pArg = &p->aMem[pOp->p2]; - for(u.ag.i=0; u.ag.ip2, u.ag.pArg); - } + pOp->opflags = sqlite3OpcodeProperty[opcode]; + if( opcode==OP_Function || opcode==OP_AggStep ){ + if( pOp->p5>nMaxArgs ) nMaxArgs = pOp->p5; + }else if( (opcode==OP_Transaction && pOp->p2!=0) || opcode==OP_Vacuum ){ + p->readOnly = 0; +#ifndef SQLITE_OMIT_VIRTUALTABLE + }else if( opcode==OP_VUpdate ){ + if( pOp->p2>nMaxArgs ) nMaxArgs = pOp->p2; + }else if( opcode==OP_VFilter ){ + int n; + assert( p->nOp - i >= 3 ); + assert( pOp[-1].opcode==OP_Integer ); + n = pOp[-1].p1; + if( n>nMaxArgs ) nMaxArgs = n; +#endif + }else if( opcode==OP_Next || opcode==OP_SorterNext ){ + pOp->p4.xAdvance = sqlite3BtreeNext; + pOp->p4type = P4_ADVANCE; + }else if( opcode==OP_Prev ){ + pOp->p4.xAdvance = sqlite3BtreePrevious; + pOp->p4type = P4_ADVANCE; + } - assert( pOp->p4type==P4_FUNCDEF || pOp->p4type==P4_VDBEFUNC ); - if( pOp->p4type==P4_FUNCDEF ){ - u.ag.ctx.pFunc = pOp->p4.pFunc; - u.ag.ctx.pVdbeFunc = 0; - }else{ - u.ag.ctx.pVdbeFunc = (VdbeFunc*)pOp->p4.pVdbeFunc; - u.ag.ctx.pFunc = u.ag.ctx.pVdbeFunc->pFunc; + if( (pOp->opflags & OPFLG_JUMP)!=0 && pOp->p2<0 ){ + assert( -1-pOp->p2nLabel ); + pOp->p2 = aLabel[-1-pOp->p2]; + } } + sqlite3DbFree(p->db, p->aLabel); + p->aLabel = 0; - assert( pOp->p3>0 && pOp->p3<=p->nMem ); - pOut = &p->aMem[pOp->p3]; - u.ag.ctx.s.flags = MEM_Null; - u.ag.ctx.s.db = db; - u.ag.ctx.s.xDel = 0; - u.ag.ctx.s.zMalloc = 0; - - /* The output cell may already have a buffer allocated. Move - ** the pointer to u.ag.ctx.s so in case the user-function can use - ** the already allocated buffer instead of allocating a new one. - */ - sqlite3VdbeMemMove(&u.ag.ctx.s, pOut); - MemSetTypeFlag(&u.ag.ctx.s, MEM_Null); + *pMaxFuncArgs = nMaxArgs; +} - u.ag.ctx.isError = 0; - if( u.ag.ctx.pFunc->flags & SQLITE_FUNC_NEEDCOLL ){ - assert( pOp>p->aOp ); - assert( pOp[-1].p4type==P4_COLLSEQ ); - assert( pOp[-1].opcode==OP_CollSeq ); - u.ag.ctx.pColl = pOp[-1].p4.pColl; - } - if( sqlite3SafetyOff(db) ) goto abort_due_to_misuse; - (*u.ag.ctx.pFunc->xFunc)(&u.ag.ctx, u.ag.n, u.ag.apVal); - if( sqlite3SafetyOn(db) ){ - sqlite3VdbeMemRelease(&u.ag.ctx.s); - goto abort_due_to_misuse; - } - if( db->mallocFailed ){ - /* Even though a malloc() has failed, the implementation of the - ** user function may have called an sqlite3_result_XXX() function - ** to return a value. The following call releases any resources - ** associated with such a value. - ** - ** Note: Maybe MemRelease() should be called if sqlite3SafetyOn() - ** fails also (the if(...) statement above). But if people are - ** misusing sqlite, they have bigger problems than a leaked value. - */ - sqlite3VdbeMemRelease(&u.ag.ctx.s); - goto no_mem; - } +/* +** Return the address of the next instruction to be inserted. +*/ +SQLITE_PRIVATE int sqlite3VdbeCurrentAddr(Vdbe *p){ + assert( p->magic==VDBE_MAGIC_INIT ); + return p->nOp; +} - /* If any auxiliary data functions have been called by this user function, - ** immediately call the destructor for any non-static values. - */ - if( u.ag.ctx.pVdbeFunc ){ - sqlite3VdbeDeleteAuxData(u.ag.ctx.pVdbeFunc, pOp->p1); - pOp->p4.pVdbeFunc = u.ag.ctx.pVdbeFunc; - pOp->p4type = P4_VDBEFUNC; - } +/* +** This function returns a pointer to the array of opcodes associated with +** the Vdbe passed as the first argument. It is the callers responsibility +** to arrange for the returned array to be eventually freed using the +** vdbeFreeOpArray() function. +** +** Before returning, *pnOp is set to the number of entries in the returned +** array. Also, *pnMaxArg is set to the larger of its current value and +** the number of entries in the Vdbe.apArg[] array required to execute the +** returned program. +*/ +SQLITE_PRIVATE VdbeOp *sqlite3VdbeTakeOpArray(Vdbe *p, int *pnOp, int *pnMaxArg){ + VdbeOp *aOp = p->aOp; + assert( aOp && !p->db->mallocFailed ); - /* If the function returned an error, throw an exception */ - if( u.ag.ctx.isError ){ - sqlite3SetString(&p->zErrMsg, db, "%s", sqlite3_value_text(&u.ag.ctx.s)); - rc = u.ag.ctx.isError; - } + /* Check that sqlite3VdbeUsesBtree() was not called on this VM */ + assert( p->btreeMask==0 ); - /* Copy the result of the function into register P3 */ - sqlite3VdbeChangeEncoding(&u.ag.ctx.s, encoding); - sqlite3VdbeMemMove(pOut, &u.ag.ctx.s); - if( sqlite3VdbeMemTooBig(pOut) ){ - goto too_big; - } - REGISTER_TRACE(pOp->p3, pOut); - UPDATE_MAX_BLOBSIZE(pOut); - break; + resolveP2Values(p, pnMaxArg); + *pnOp = p->nOp; + p->aOp = 0; + return aOp; } -/* Opcode: BitAnd P1 P2 P3 * * -** -** Take the bit-wise AND of the values in register P1 and P2 and -** store the result in register P3. -** If either input is NULL, the result is NULL. +/* +** Add a whole list of operations to the operation stack. Return the +** address of the first operation added. */ -/* Opcode: BitOr P1 P2 P3 * * -** -** Take the bit-wise OR of the values in register P1 and P2 and -** store the result in register P3. -** If either input is NULL, the result is NULL. -*/ -/* Opcode: ShiftLeft P1 P2 P3 * * -** -** Shift the integer value in register P2 to the left by the -** number of bits specified by the integer in regiser P1. -** Store the result in register P3. -** If either input is NULL, the result is NULL. -*/ -/* Opcode: ShiftRight P1 P2 P3 * * -** -** Shift the integer value in register P2 to the right by the -** number of bits specified by the integer in register P1. -** Store the result in register P3. -** If either input is NULL, the result is NULL. -*/ -case OP_BitAnd: /* same as TK_BITAND, in1, in2, out3 */ -case OP_BitOr: /* same as TK_BITOR, in1, in2, out3 */ -case OP_ShiftLeft: /* same as TK_LSHIFT, in1, in2, out3 */ -case OP_ShiftRight: { /* same as TK_RSHIFT, in1, in2, out3 */ -#if 0 /* local variables moved into u.ah */ - i64 a; - i64 b; -#endif /* local variables moved into u.ah */ - - if( (pIn1->flags | pIn2->flags) & MEM_Null ){ - sqlite3VdbeMemSetNull(pOut); - break; +SQLITE_PRIVATE int sqlite3VdbeAddOpList(Vdbe *p, int nOp, VdbeOpList const *aOp){ + int addr; + assert( p->magic==VDBE_MAGIC_INIT ); + if( p->nOp + nOp > p->nOpAlloc && growOpArray(p) ){ + return 0; } - u.ah.a = sqlite3VdbeIntValue(pIn2); - u.ah.b = sqlite3VdbeIntValue(pIn1); - switch( pOp->opcode ){ - case OP_BitAnd: u.ah.a &= u.ah.b; break; - case OP_BitOr: u.ah.a |= u.ah.b; break; - case OP_ShiftLeft: u.ah.a <<= u.ah.b; break; - default: assert( pOp->opcode==OP_ShiftRight ); - u.ah.a >>= u.ah.b; break; + addr = p->nOp; + if( ALWAYS(nOp>0) ){ + int i; + VdbeOpList const *pIn = aOp; + for(i=0; ip2; + VdbeOp *pOut = &p->aOp[i+addr]; + pOut->opcode = pIn->opcode; + pOut->p1 = pIn->p1; + if( p2<0 && (sqlite3OpcodeProperty[pOut->opcode] & OPFLG_JUMP)!=0 ){ + pOut->p2 = addr + ADDR(p2); + }else{ + pOut->p2 = p2; + } + pOut->p3 = pIn->p3; + pOut->p4type = P4_NOTUSED; + pOut->p4.p = 0; + pOut->p5 = 0; +#ifdef SQLITE_DEBUG + pOut->zComment = 0; + if( sqlite3VdbeAddopTrace ){ + sqlite3VdbePrintOp(0, i+addr, &p->aOp[i+addr]); + } +#endif + } + p->nOp += nOp; } - pOut->u.i = u.ah.a; - MemSetTypeFlag(pOut, MEM_Int); - break; + return addr; } -/* Opcode: AddImm P1 P2 * * * -** -** Add the constant P2 to the value in register P1. -** The result is always an integer. -** -** To force any register to be an integer, just add 0. +/* +** Change the value of the P1 operand for a specific instruction. +** This routine is useful when a large program is loaded from a +** static array using sqlite3VdbeAddOpList but we want to make a +** few minor changes to the program. */ -case OP_AddImm: { /* in1 */ - sqlite3VdbeMemIntegerify(pIn1); - pIn1->u.i += pOp->p2; - break; +SQLITE_PRIVATE void sqlite3VdbeChangeP1(Vdbe *p, u32 addr, int val){ + assert( p!=0 ); + if( ((u32)p->nOp)>addr ){ + p->aOp[addr].p1 = val; + } } -/* Opcode: MustBeInt P1 P2 * * * -** -** Force the value in register P1 to be an integer. If the value -** in P1 is not an integer and cannot be converted into an integer -** without data loss, then jump immediately to P2, or if P2==0 -** raise an SQLITE_MISMATCH exception. +/* +** Change the value of the P2 operand for a specific instruction. +** This routine is useful for setting a jump destination. */ -case OP_MustBeInt: { /* jump, in1 */ - applyAffinity(pIn1, SQLITE_AFF_NUMERIC, encoding); - if( (pIn1->flags & MEM_Int)==0 ){ - if( pOp->p2==0 ){ - rc = SQLITE_MISMATCH; - goto abort_due_to_error; - }else{ - pc = pOp->p2 - 1; - } - }else{ - MemSetTypeFlag(pIn1, MEM_Int); +SQLITE_PRIVATE void sqlite3VdbeChangeP2(Vdbe *p, u32 addr, int val){ + assert( p!=0 ); + if( ((u32)p->nOp)>addr ){ + p->aOp[addr].p2 = val; } - break; } -/* Opcode: RealAffinity P1 * * * * -** -** If register P1 holds an integer convert it to a real value. -** -** This opcode is used when extracting information from a column that -** has REAL affinity. Such column values may still be stored as -** integers, for space efficiency, but after extraction we want them -** to have only a real value. +/* +** Change the value of the P3 operand for a specific instruction. */ -case OP_RealAffinity: { /* in1 */ - if( pIn1->flags & MEM_Int ){ - sqlite3VdbeMemRealify(pIn1); +SQLITE_PRIVATE void sqlite3VdbeChangeP3(Vdbe *p, u32 addr, int val){ + assert( p!=0 ); + if( ((u32)p->nOp)>addr ){ + p->aOp[addr].p3 = val; } - break; } -#ifndef SQLITE_OMIT_CAST -/* Opcode: ToText P1 * * * * -** -** Force the value in register P1 to be text. -** If the value is numeric, convert it to a string using the -** equivalent of printf(). Blob values are unchanged and -** are afterwards simply interpreted as text. -** -** A NULL value is not changed by this routine. It remains NULL. +/* +** Change the value of the P5 operand for the most recently +** added operation. */ -case OP_ToText: { /* same as TK_TO_TEXT, in1 */ - if( pIn1->flags & MEM_Null ) break; - assert( MEM_Str==(MEM_Blob>>3) ); - pIn1->flags |= (pIn1->flags&MEM_Blob)>>3; - applyAffinity(pIn1, SQLITE_AFF_TEXT, encoding); - rc = ExpandBlob(pIn1); - assert( pIn1->flags & MEM_Str || db->mallocFailed ); - pIn1->flags &= ~(MEM_Int|MEM_Real|MEM_Blob|MEM_Zero); - UPDATE_MAX_BLOBSIZE(pIn1); - break; +SQLITE_PRIVATE void sqlite3VdbeChangeP5(Vdbe *p, u8 val){ + assert( p!=0 ); + if( p->aOp ){ + assert( p->nOp>0 ); + p->aOp[p->nOp-1].p5 = val; + } } -/* Opcode: ToBlob P1 * * * * -** -** Force the value in register P1 to be a BLOB. -** If the value is numeric, convert it to a string first. -** Strings are simply reinterpreted as blobs with no change -** to the underlying data. -** -** A NULL value is not changed by this routine. It remains NULL. +/* +** Change the P2 operand of instruction addr so that it points to +** the address of the next instruction to be coded. */ -case OP_ToBlob: { /* same as TK_TO_BLOB, in1 */ - if( pIn1->flags & MEM_Null ) break; - if( (pIn1->flags & MEM_Blob)==0 ){ - applyAffinity(pIn1, SQLITE_AFF_TEXT, encoding); - assert( pIn1->flags & MEM_Str || db->mallocFailed ); - MemSetTypeFlag(pIn1, MEM_Blob); - }else{ - pIn1->flags &= ~(MEM_TypeMask&~MEM_Blob); - } - UPDATE_MAX_BLOBSIZE(pIn1); - break; +SQLITE_PRIVATE void sqlite3VdbeJumpHere(Vdbe *p, int addr){ + assert( addr>=0 || p->db->mallocFailed ); + if( addr>=0 ) sqlite3VdbeChangeP2(p, addr, p->nOp); } -/* Opcode: ToNumeric P1 * * * * -** -** Force the value in register P1 to be numeric (either an -** integer or a floating-point number.) -** If the value is text or blob, try to convert it to an using the -** equivalent of atoi() or atof() and store 0 if no such conversion -** is possible. -** -** A NULL value is not changed by this routine. It remains NULL. + +/* +** If the input FuncDef structure is ephemeral, then free it. If +** the FuncDef is not ephermal, then do nothing. */ -case OP_ToNumeric: { /* same as TK_TO_NUMERIC, in1 */ - if( (pIn1->flags & (MEM_Null|MEM_Int|MEM_Real))==0 ){ - sqlite3VdbeMemNumerify(pIn1); +static void freeEphemeralFunction(sqlite3 *db, FuncDef *pDef){ + if( ALWAYS(pDef) && (pDef->flags & SQLITE_FUNC_EPHEM)!=0 ){ + sqlite3DbFree(db, pDef); } - break; } -#endif /* SQLITE_OMIT_CAST */ -/* Opcode: ToInt P1 * * * * -** -** Force the value in register P1 be an integer. If -** The value is currently a real number, drop its fractional part. -** If the value is text or blob, try to convert it to an integer using the -** equivalent of atoi() and store 0 if no such conversion is possible. -** -** A NULL value is not changed by this routine. It remains NULL. +static void vdbeFreeOpArray(sqlite3 *, Op *, int); + +/* +** Delete a P4 value if necessary. */ -case OP_ToInt: { /* same as TK_TO_INT, in1 */ - if( (pIn1->flags & MEM_Null)==0 ){ - sqlite3VdbeMemIntegerify(pIn1); +static void freeP4(sqlite3 *db, int p4type, void *p4){ + if( p4 ){ + assert( db ); + switch( p4type ){ + case P4_REAL: + case P4_INT64: + case P4_DYNAMIC: + case P4_KEYINFO: + case P4_INTARRAY: + case P4_KEYINFO_HANDOFF: { + sqlite3DbFree(db, p4); + break; + } + case P4_MPRINTF: { + if( db->pnBytesFreed==0 ) sqlite3_free(p4); + break; + } + case P4_VDBEFUNC: { + VdbeFunc *pVdbeFunc = (VdbeFunc *)p4; + freeEphemeralFunction(db, pVdbeFunc->pFunc); + if( db->pnBytesFreed==0 ) sqlite3VdbeDeleteAuxData(pVdbeFunc, 0); + sqlite3DbFree(db, pVdbeFunc); + break; + } + case P4_FUNCDEF: { + freeEphemeralFunction(db, (FuncDef*)p4); + break; + } + case P4_MEM: { + if( db->pnBytesFreed==0 ){ + sqlite3ValueFree((sqlite3_value*)p4); + }else{ + Mem *p = (Mem*)p4; + sqlite3DbFree(db, p->zMalloc); + sqlite3DbFree(db, p); + } + break; + } + case P4_VTAB : { + if( db->pnBytesFreed==0 ) sqlite3VtabUnlock((VTable *)p4); + break; + } + } } - break; } -#ifndef SQLITE_OMIT_CAST -/* Opcode: ToReal P1 * * * * -** -** Force the value in register P1 to be a floating point number. -** If The value is currently an integer, convert it. -** If the value is text or blob, try to convert it to an integer using the -** equivalent of atoi() and store 0.0 if no such conversion is possible. -** -** A NULL value is not changed by this routine. It remains NULL. +/* +** Free the space allocated for aOp and any p4 values allocated for the +** opcodes contained within. If aOp is not NULL it is assumed to contain +** nOp entries. */ -case OP_ToReal: { /* same as TK_TO_REAL, in1 */ - if( (pIn1->flags & MEM_Null)==0 ){ - sqlite3VdbeMemRealify(pIn1); +static void vdbeFreeOpArray(sqlite3 *db, Op *aOp, int nOp){ + if( aOp ){ + Op *pOp; + for(pOp=aOp; pOp<&aOp[nOp]; pOp++){ + freeP4(db, pOp->p4type, pOp->p4.p); +#ifdef SQLITE_DEBUG + sqlite3DbFree(db, pOp->zComment); +#endif + } } - break; + sqlite3DbFree(db, aOp); } -#endif /* SQLITE_OMIT_CAST */ -/* Opcode: Lt P1 P2 P3 P4 P5 -** -** Compare the values in register P1 and P3. If reg(P3)pNext = pVdbe->pProgram; + pVdbe->pProgram = p; +} + +/* +** Change the opcode at addr into OP_Noop */ -/* Opcode: Le P1 P2 P3 P4 P5 +SQLITE_PRIVATE void sqlite3VdbeChangeToNoop(Vdbe *p, int addr){ + if( p->aOp ){ + VdbeOp *pOp = &p->aOp[addr]; + sqlite3 *db = p->db; + freeP4(db, pOp->p4type, pOp->p4.p); + memset(pOp, 0, sizeof(pOp[0])); + pOp->opcode = OP_Noop; + } +} + +/* +** Change the value of the P4 operand for a specific instruction. +** This routine is useful when a large program is loaded from a +** static array using sqlite3VdbeAddOpList but we want to make a +** few minor changes to the program. ** -** This works just like the Lt opcode except that the jump is taken if -** the content of register P3 is less than or equal to the content of -** register P1. See the Lt opcode for additional information. -*/ -/* Opcode: Gt P1 P2 P3 P4 P5 +** If n>=0 then the P4 operand is dynamic, meaning that a copy of +** the string is made into memory obtained from sqlite3_malloc(). +** A value of n==0 means copy bytes of zP4 up to and including the +** first null byte. If n>0 then copy n+1 bytes of zP4. ** -** This works just like the Lt opcode except that the jump is taken if -** the content of register P3 is greater than the content of -** register P1. See the Lt opcode for additional information. -*/ -/* Opcode: Ge P1 P2 P3 P4 P5 +** If n==P4_KEYINFO it means that zP4 is a pointer to a KeyInfo structure. +** A copy is made of the KeyInfo structure into memory obtained from +** sqlite3_malloc, to be freed when the Vdbe is finalized. +** n==P4_KEYINFO_HANDOFF indicates that zP4 points to a KeyInfo structure +** stored in memory that the caller has obtained from sqlite3_malloc. The +** caller should not free the allocation, it will be freed when the Vdbe is +** finalized. +** +** Other values of n (P4_STATIC, P4_COLLSEQ etc.) indicate that zP4 points +** to a string or structure that is guaranteed to exist for the lifetime of +** the Vdbe. In these cases we can just copy the pointer. ** -** This works just like the Lt opcode except that the jump is taken if -** the content of register P3 is greater than or equal to the content of -** register P1. See the Lt opcode for additional information. +** If addr<0 then change P4 on the most recently inserted instruction. */ -case OP_Eq: /* same as TK_EQ, jump, in1, in3 */ -case OP_Ne: /* same as TK_NE, jump, in1, in3 */ -case OP_Lt: /* same as TK_LT, jump, in1, in3 */ -case OP_Le: /* same as TK_LE, jump, in1, in3 */ -case OP_Gt: /* same as TK_GT, jump, in1, in3 */ -case OP_Ge: { /* same as TK_GE, jump, in1, in3 */ -#if 0 /* local variables moved into u.ai */ - int flags; - int res; - char affinity; -#endif /* local variables moved into u.ai */ - - u.ai.flags = pIn1->flags|pIn3->flags; - - if( u.ai.flags&MEM_Null ){ - /* If either operand is NULL then the result is always NULL. - ** The jump is taken if the SQLITE_JUMPIFNULL bit is set. - */ - if( pOp->p5 & SQLITE_STOREP2 ){ - pOut = &p->aMem[pOp->p2]; - MemSetTypeFlag(pOut, MEM_Null); - REGISTER_TRACE(pOp->p2, pOut); - }else if( pOp->p5 & SQLITE_JUMPIFNULL ){ - pc = pOp->p2-1; +SQLITE_PRIVATE void sqlite3VdbeChangeP4(Vdbe *p, int addr, const char *zP4, int n){ + Op *pOp; + sqlite3 *db; + assert( p!=0 ); + db = p->db; + assert( p->magic==VDBE_MAGIC_INIT ); + if( p->aOp==0 || db->mallocFailed ){ + if ( n!=P4_KEYINFO && n!=P4_VTAB ) { + freeP4(db, n, (void*)*(char**)&zP4); } - break; - } - - u.ai.affinity = pOp->p5 & SQLITE_AFF_MASK; - if( u.ai.affinity ){ - applyAffinity(pIn1, u.ai.affinity, encoding); - applyAffinity(pIn3, u.ai.affinity, encoding); - if( db->mallocFailed ) goto no_mem; + return; } - - assert( pOp->p4type==P4_COLLSEQ || pOp->p4.pColl==0 ); - ExpandBlob(pIn1); - ExpandBlob(pIn3); - u.ai.res = sqlite3MemCompare(pIn3, pIn1, pOp->p4.pColl); - switch( pOp->opcode ){ - case OP_Eq: u.ai.res = u.ai.res==0; break; - case OP_Ne: u.ai.res = u.ai.res!=0; break; - case OP_Lt: u.ai.res = u.ai.res<0; break; - case OP_Le: u.ai.res = u.ai.res<=0; break; - case OP_Gt: u.ai.res = u.ai.res>0; break; - default: u.ai.res = u.ai.res>=0; break; + assert( p->nOp>0 ); + assert( addrnOp ); + if( addr<0 ){ + addr = p->nOp - 1; } + pOp = &p->aOp[addr]; + freeP4(db, pOp->p4type, pOp->p4.p); + pOp->p4.p = 0; + if( n==P4_INT32 ){ + /* Note: this cast is safe, because the origin data point was an int + ** that was cast to a (const char *). */ + pOp->p4.i = SQLITE_PTR_TO_INT(zP4); + pOp->p4type = P4_INT32; + }else if( zP4==0 ){ + pOp->p4.p = 0; + pOp->p4type = P4_NOTUSED; + }else if( n==P4_KEYINFO ){ + KeyInfo *pKeyInfo; + int nField, nByte; - if( pOp->p5 & SQLITE_STOREP2 ){ - pOut = &p->aMem[pOp->p2]; - MemSetTypeFlag(pOut, MEM_Int); - pOut->u.i = u.ai.res; - REGISTER_TRACE(pOp->p2, pOut); - }else if( u.ai.res ){ - pc = pOp->p2-1; + nField = ((KeyInfo*)zP4)->nField; + nByte = sizeof(*pKeyInfo) + (nField-1)*sizeof(pKeyInfo->aColl[0]) + nField; + pKeyInfo = sqlite3DbMallocRaw(0, nByte); + pOp->p4.pKeyInfo = pKeyInfo; + if( pKeyInfo ){ + u8 *aSortOrder; + memcpy((char*)pKeyInfo, zP4, nByte - nField); + aSortOrder = pKeyInfo->aSortOrder; + if( aSortOrder ){ + pKeyInfo->aSortOrder = (unsigned char*)&pKeyInfo->aColl[nField]; + memcpy(pKeyInfo->aSortOrder, aSortOrder, nField); + } + pOp->p4type = P4_KEYINFO; + }else{ + p->db->mallocFailed = 1; + pOp->p4type = P4_NOTUSED; + } + }else if( n==P4_KEYINFO_HANDOFF ){ + pOp->p4.p = (void*)zP4; + pOp->p4type = P4_KEYINFO; + }else if( n==P4_VTAB ){ + pOp->p4.p = (void*)zP4; + pOp->p4type = P4_VTAB; + sqlite3VtabLock((VTable *)zP4); + assert( ((VTable *)zP4)->db==p->db ); + }else if( n<0 ){ + pOp->p4.p = (void*)zP4; + pOp->p4type = (signed char)n; + }else{ + if( n==0 ) n = sqlite3Strlen30(zP4); + pOp->p4.z = sqlite3DbStrNDup(p->db, zP4, n); + pOp->p4type = P4_DYNAMIC; } - break; } -/* Opcode: Permutation * * * P4 * -** -** Set the permutation used by the OP_Compare operator to be the array -** of integers in P4. -** -** The permutation is only valid until the next OP_Permutation, OP_Compare, -** OP_Halt, or OP_ResultRow. Typically the OP_Permutation should occur -** immediately prior to the OP_Compare. +#ifndef NDEBUG +/* +** Change the comment on the the most recently coded instruction. Or +** insert a No-op and add the comment to that new instruction. This +** makes the code easier to read during debugging. None of this happens +** in a production build. */ -case OP_Permutation: { - assert( pOp->p4type==P4_INTARRAY ); - assert( pOp->p4.ai ); - aPermute = pOp->p4.ai; - break; +static void vdbeVComment(Vdbe *p, const char *zFormat, va_list ap){ + assert( p->nOp>0 || p->aOp==0 ); + assert( p->aOp==0 || p->aOp[p->nOp-1].zComment==0 || p->db->mallocFailed ); + if( p->nOp ){ + assert( p->aOp ); + sqlite3DbFree(p->db, p->aOp[p->nOp-1].zComment); + p->aOp[p->nOp-1].zComment = sqlite3VMPrintf(p->db, zFormat, ap); + } } - -/* Opcode: Compare P1 P2 P3 P4 * -** -** Compare to vectors of registers in reg(P1)..reg(P1+P3-1) (all this -** one "A") and in reg(P2)..reg(P2+P3-1) ("B"). Save the result of -** the comparison for use by the next OP_Jump instruct. -** -** P4 is a KeyInfo structure that defines collating sequences and sort -** orders for the comparison. The permutation applies to registers -** only. The KeyInfo elements are used sequentially. -** -** The comparison is a sort comparison, so NULLs compare equal, -** NULLs are less than numbers, numbers are less than strings, -** and strings are less than blobs. -*/ -case OP_Compare: { -#if 0 /* local variables moved into u.aj */ - int n; - int i; - int p1; - int p2; - const KeyInfo *pKeyInfo; - int idx; - CollSeq *pColl; /* Collating sequence to use on this term */ - int bRev; /* True for DESCENDING sort order */ -#endif /* local variables moved into u.aj */ - - u.aj.n = pOp->p3; - u.aj.pKeyInfo = pOp->p4.pKeyInfo; - assert( u.aj.n>0 ); - assert( u.aj.pKeyInfo!=0 ); - u.aj.p1 = pOp->p1; - assert( u.aj.p1>0 && u.aj.p1+u.aj.n<=p->nMem+1 ); - u.aj.p2 = pOp->p2; - assert( u.aj.p2>0 && u.aj.p2+u.aj.n<=p->nMem+1 ); - for(u.aj.i=0; u.aj.iaMem[u.aj.p1+u.aj.idx]); - REGISTER_TRACE(u.aj.p2+u.aj.idx, &p->aMem[u.aj.p2+u.aj.idx]); - assert( u.aj.inField ); - u.aj.pColl = u.aj.pKeyInfo->aColl[u.aj.i]; - u.aj.bRev = u.aj.pKeyInfo->aSortOrder[u.aj.i]; - iCompare = sqlite3MemCompare(&p->aMem[u.aj.p1+u.aj.idx], &p->aMem[u.aj.p2+u.aj.idx], u.aj.pColl); - if( iCompare ){ - if( u.aj.bRev ) iCompare = -iCompare; - break; - } +SQLITE_PRIVATE void sqlite3VdbeComment(Vdbe *p, const char *zFormat, ...){ + va_list ap; + if( p ){ + va_start(ap, zFormat); + vdbeVComment(p, zFormat, ap); + va_end(ap); } - aPermute = 0; - break; } - -/* Opcode: Jump P1 P2 P3 * * -** -** Jump to the instruction at address P1, P2, or P3 depending on whether -** in the most recent OP_Compare instruction the P1 vector was less than -** equal to, or greater than the P2 vector, respectively. -*/ -case OP_Jump: { /* jump */ - if( iCompare<0 ){ - pc = pOp->p1 - 1; - }else if( iCompare==0 ){ - pc = pOp->p2 - 1; - }else{ - pc = pOp->p3 - 1; +SQLITE_PRIVATE void sqlite3VdbeNoopComment(Vdbe *p, const char *zFormat, ...){ + va_list ap; + if( p ){ + sqlite3VdbeAddOp0(p, OP_Noop); + va_start(ap, zFormat); + vdbeVComment(p, zFormat, ap); + va_end(ap); } - break; } +#endif /* NDEBUG */ -/* Opcode: And P1 P2 P3 * * +/* +** Return the opcode for a given address. If the address is -1, then +** return the most recently inserted opcode. ** -** Take the logical AND of the values in registers P1 and P2 and -** write the result into register P3. +** If a memory allocation error has occurred prior to the calling of this +** routine, then a pointer to a dummy VdbeOp will be returned. That opcode +** is readable but not writable, though it is cast to a writable value. +** The return of a dummy opcode allows the call to continue functioning +** after a OOM fault without having to check to see if the return from +** this routine is a valid pointer. But because the dummy.opcode is 0, +** dummy will never be written to. This is verified by code inspection and +** by running with Valgrind. ** -** If either P1 or P2 is 0 (false) then the result is 0 even if -** the other input is NULL. A NULL and true or two NULLs give -** a NULL output. +** About the #ifdef SQLITE_OMIT_TRACE: Normally, this routine is never called +** unless p->nOp>0. This is because in the absense of SQLITE_OMIT_TRACE, +** an OP_Trace instruction is always inserted by sqlite3VdbeGet() as soon as +** a new VDBE is created. So we are free to set addr to p->nOp-1 without +** having to double-check to make sure that the result is non-negative. But +** if SQLITE_OMIT_TRACE is defined, the OP_Trace is omitted and we do need to +** check the value of p->nOp-1 before continuing. */ -/* Opcode: Or P1 P2 P3 * * -** -** Take the logical OR of the values in register P1 and P2 and -** store the answer in register P3. -** -** If either P1 or P2 is nonzero (true) then the result is 1 (true) -** even if the other input is NULL. A NULL and false or two NULLs -** give a NULL output. -*/ -case OP_And: /* same as TK_AND, in1, in2, out3 */ -case OP_Or: { /* same as TK_OR, in1, in2, out3 */ -#if 0 /* local variables moved into u.ak */ - int v1; /* Left operand: 0==FALSE, 1==TRUE, 2==UNKNOWN or NULL */ - int v2; /* Right operand: 0==FALSE, 1==TRUE, 2==UNKNOWN or NULL */ -#endif /* local variables moved into u.ak */ - - if( pIn1->flags & MEM_Null ){ - u.ak.v1 = 2; - }else{ - u.ak.v1 = sqlite3VdbeIntValue(pIn1)!=0; - } - if( pIn2->flags & MEM_Null ){ - u.ak.v2 = 2; - }else{ - u.ak.v2 = sqlite3VdbeIntValue(pIn2)!=0; - } - if( pOp->opcode==OP_And ){ - static const unsigned char and_logic[] = { 0, 0, 0, 0, 1, 2, 0, 2, 2 }; - u.ak.v1 = and_logic[u.ak.v1*3+u.ak.v2]; - }else{ - static const unsigned char or_logic[] = { 0, 1, 2, 1, 1, 1, 2, 1, 2 }; - u.ak.v1 = or_logic[u.ak.v1*3+u.ak.v2]; +SQLITE_PRIVATE VdbeOp *sqlite3VdbeGetOp(Vdbe *p, int addr){ + /* C89 specifies that the constant "dummy" will be initialized to all + ** zeros, which is correct. MSVC generates a warning, nevertheless. */ + static VdbeOp dummy; /* Ignore the MSVC warning about no initializer */ + assert( p->magic==VDBE_MAGIC_INIT ); + if( addr<0 ){ +#ifdef SQLITE_OMIT_TRACE + if( p->nOp==0 ) return (VdbeOp*)&dummy; +#endif + addr = p->nOp - 1; } - if( u.ak.v1==2 ){ - MemSetTypeFlag(pOut, MEM_Null); + assert( (addr>=0 && addrnOp) || p->db->mallocFailed ); + if( p->db->mallocFailed ){ + return (VdbeOp*)&dummy; }else{ - pOut->u.i = u.ak.v1; - MemSetTypeFlag(pOut, MEM_Int); + return &p->aOp[addr]; } - break; } -/* Opcode: Not P1 P2 * * * -** -** Interpret the value in register P1 as a boolean value. Store the -** boolean complement in register P2. If the value in register P1 is -** NULL, then a NULL is stored in P2. +#if !defined(SQLITE_OMIT_EXPLAIN) || !defined(NDEBUG) \ + || defined(VDBE_PROFILE) || defined(SQLITE_DEBUG) +/* +** Compute a string that describes the P4 parameter for an opcode. +** Use zTemp for any required temporary buffer space. */ -case OP_Not: { /* same as TK_NOT, in1 */ - pOut = &p->aMem[pOp->p2]; - if( pIn1->flags & MEM_Null ){ - sqlite3VdbeMemSetNull(pOut); - }else{ - sqlite3VdbeMemSetInt64(pOut, !sqlite3VdbeIntValue(pIn1)); +static char *displayP4(Op *pOp, char *zTemp, int nTemp){ + char *zP4 = zTemp; + assert( nTemp>=20 ); + switch( pOp->p4type ){ + case P4_KEYINFO_STATIC: + case P4_KEYINFO: { + int i, j; + KeyInfo *pKeyInfo = pOp->p4.pKeyInfo; + sqlite3_snprintf(nTemp, zTemp, "keyinfo(%d", pKeyInfo->nField); + i = sqlite3Strlen30(zTemp); + for(j=0; jnField; j++){ + CollSeq *pColl = pKeyInfo->aColl[j]; + if( pColl ){ + int n = sqlite3Strlen30(pColl->zName); + if( i+n>nTemp-6 ){ + memcpy(&zTemp[i],",...",4); + break; + } + zTemp[i++] = ','; + if( pKeyInfo->aSortOrder && pKeyInfo->aSortOrder[j] ){ + zTemp[i++] = '-'; + } + memcpy(&zTemp[i], pColl->zName,n+1); + i += n; + }else if( i+4p4.pColl; + sqlite3_snprintf(nTemp, zTemp, "collseq(%.20s)", pColl->zName); + break; + } + case P4_FUNCDEF: { + FuncDef *pDef = pOp->p4.pFunc; + sqlite3_snprintf(nTemp, zTemp, "%s(%d)", pDef->zName, pDef->nArg); + break; + } + case P4_INT64: { + sqlite3_snprintf(nTemp, zTemp, "%lld", *pOp->p4.pI64); + break; + } + case P4_INT32: { + sqlite3_snprintf(nTemp, zTemp, "%d", pOp->p4.i); + break; + } + case P4_REAL: { + sqlite3_snprintf(nTemp, zTemp, "%.16g", *pOp->p4.pReal); + break; + } + case P4_MEM: { + Mem *pMem = pOp->p4.pMem; + if( pMem->flags & MEM_Str ){ + zP4 = pMem->z; + }else if( pMem->flags & MEM_Int ){ + sqlite3_snprintf(nTemp, zTemp, "%lld", pMem->u.i); + }else if( pMem->flags & MEM_Real ){ + sqlite3_snprintf(nTemp, zTemp, "%.16g", pMem->r); + }else if( pMem->flags & MEM_Null ){ + sqlite3_snprintf(nTemp, zTemp, "NULL"); + }else{ + assert( pMem->flags & MEM_Blob ); + zP4 = "(blob)"; + } + break; + } +#ifndef SQLITE_OMIT_VIRTUALTABLE + case P4_VTAB: { + sqlite3_vtab *pVtab = pOp->p4.pVtab->pVtab; + sqlite3_snprintf(nTemp, zTemp, "vtab:%p:%p", pVtab, pVtab->pModule); + break; + } +#endif + case P4_INTARRAY: { + sqlite3_snprintf(nTemp, zTemp, "intarray"); + break; + } + case P4_SUBPROGRAM: { + sqlite3_snprintf(nTemp, zTemp, "program"); + break; + } + case P4_ADVANCE: { + zTemp[0] = 0; + break; + } + default: { + zP4 = pOp->p4.z; + if( zP4==0 ){ + zP4 = zTemp; + zTemp[0] = 0; + } + } } - break; + assert( zP4!=0 ); + return zP4; } +#endif -/* Opcode: BitNot P1 P2 * * * +/* +** Declare to the Vdbe that the BTree object at db->aDb[i] is used. ** -** Interpret the content of register P1 as an integer. Store the -** ones-complement of the P1 value into register P2. If P1 holds -** a NULL then store a NULL in P2. +** The prepared statements need to know in advance the complete set of +** attached databases that will be use. A mask of these databases +** is maintained in p->btreeMask. The p->lockMask value is the subset of +** p->btreeMask of databases that will require a lock. */ -case OP_BitNot: { /* same as TK_BITNOT, in1 */ - pOut = &p->aMem[pOp->p2]; - if( pIn1->flags & MEM_Null ){ - sqlite3VdbeMemSetNull(pOut); - }else{ - sqlite3VdbeMemSetInt64(pOut, ~sqlite3VdbeIntValue(pIn1)); +SQLITE_PRIVATE void sqlite3VdbeUsesBtree(Vdbe *p, int i){ + assert( i>=0 && idb->nDb && i<(int)sizeof(yDbMask)*8 ); + assert( i<(int)sizeof(p->btreeMask)*8 ); + p->btreeMask |= ((yDbMask)1)<db->aDb[i].pBt) ){ + p->lockMask |= ((yDbMask)1)<0 +/* +** If SQLite is compiled to support shared-cache mode and to be threadsafe, +** this routine obtains the mutex associated with each BtShared structure +** that may be accessed by the VM passed as an argument. In doing so it also +** sets the BtShared.db member of each of the BtShared structures, ensuring +** that the correct busy-handler callback is invoked if required. ** -** Jump to P2 if the value in register P1 is true. The value is -** is considered true if it is numeric and non-zero. If the value -** in P1 is NULL then take the jump if P3 is true. -*/ -/* Opcode: IfNot P1 P2 P3 * * +** If SQLite is not threadsafe but does support shared-cache mode, then +** sqlite3BtreeEnter() is invoked to set the BtShared.db variables +** of all of BtShared structures accessible via the database handle +** associated with the VM. +** +** If SQLite is not threadsafe and does not support shared-cache mode, this +** function is a no-op. ** -** Jump to P2 if the value in register P1 is False. The value is -** is considered true if it has a numeric value of zero. If the value -** in P1 is NULL then take the jump if P3 is true. +** The p->btreeMask field is a bitmask of all btrees that the prepared +** statement p will ever use. Let N be the number of bits in p->btreeMask +** corresponding to btrees that use shared cache. Then the runtime of +** this routine is N*N. But as N is rarely more than 1, this should not +** be a problem. */ -case OP_If: /* jump, in1 */ -case OP_IfNot: { /* jump, in1 */ -#if 0 /* local variables moved into u.al */ - int c; -#endif /* local variables moved into u.al */ - if( pIn1->flags & MEM_Null ){ - u.al.c = pOp->p3; - }else{ -#ifdef SQLITE_OMIT_FLOATING_POINT - u.al.c = sqlite3VdbeIntValue(pIn1)!=0; -#else - u.al.c = sqlite3VdbeRealValue(pIn1)!=0.0; -#endif - if( pOp->opcode==OP_IfNot ) u.al.c = !u.al.c; - } - if( u.al.c ){ - pc = pOp->p2-1; +SQLITE_PRIVATE void sqlite3VdbeEnter(Vdbe *p){ + int i; + yDbMask mask; + sqlite3 *db; + Db *aDb; + int nDb; + if( p->lockMask==0 ) return; /* The common case */ + db = p->db; + aDb = db->aDb; + nDb = db->nDb; + for(i=0, mask=1; ilockMask)!=0 && ALWAYS(aDb[i].pBt!=0) ){ + sqlite3BtreeEnter(aDb[i].pBt); + } } - break; } +#endif -/* Opcode: IsNull P1 P2 * * * -** -** Jump to P2 if the value in register P1 is NULL. +#if !defined(SQLITE_OMIT_SHARED_CACHE) && SQLITE_THREADSAFE>0 +/* +** Unlock all of the btrees previously locked by a call to sqlite3VdbeEnter(). */ -case OP_IsNull: { /* same as TK_ISNULL, jump, in1 */ - if( (pIn1->flags & MEM_Null)!=0 ){ - pc = pOp->p2 - 1; +SQLITE_PRIVATE void sqlite3VdbeLeave(Vdbe *p){ + int i; + yDbMask mask; + sqlite3 *db; + Db *aDb; + int nDb; + if( p->lockMask==0 ) return; /* The common case */ + db = p->db; + aDb = db->aDb; + nDb = db->nDb; + for(i=0, mask=1; ilockMask)!=0 && ALWAYS(aDb[i].pBt!=0) ){ + sqlite3BtreeLeave(aDb[i].pBt); + } } - break; } +#endif -/* Opcode: NotNull P1 P2 * * * -** -** Jump to P2 if the value in register P1 is not NULL. +#if defined(VDBE_PROFILE) || defined(SQLITE_DEBUG) +/* +** Print a single opcode. This routine is used for debugging only. */ -case OP_NotNull: { /* same as TK_NOTNULL, jump, in1 */ - if( (pIn1->flags & MEM_Null)==0 ){ - pc = pOp->p2 - 1; +SQLITE_PRIVATE void sqlite3VdbePrintOp(FILE *pOut, int pc, Op *pOp){ + char *zP4; + char zPtr[50]; + static const char *zFormat1 = "%4d %-13s %4d %4d %4d %-4s %.2X %s\n"; + if( pOut==0 ) pOut = stdout; + zP4 = displayP4(pOp, zPtr, sizeof(zPtr)); + fprintf(pOut, zFormat1, pc, + sqlite3OpcodeName(pOp->opcode), pOp->p1, pOp->p2, pOp->p3, zP4, pOp->p5, +#ifdef SQLITE_DEBUG + pOp->zComment ? pOp->zComment : "" +#else + "" +#endif + ); + fflush(pOut); +} +#endif + +/* +** Release an array of N Mem elements +*/ +static void releaseMemArray(Mem *p, int N){ + if( p && N ){ + Mem *pEnd; + sqlite3 *db = p->db; + u8 malloc_failed = db->mallocFailed; + if( db->pnBytesFreed ){ + for(pEnd=&p[N]; pzMalloc); + } + return; + } + for(pEnd=&p[N]; pflags&(MEM_Agg|MEM_Dyn|MEM_Frame|MEM_RowSet) ){ + sqlite3VdbeMemRelease(p); + }else if( p->zMalloc ){ + sqlite3DbFree(db, p->zMalloc); + p->zMalloc = 0; + } + + p->flags = MEM_Invalid; + } + db->mallocFailed = malloc_failed; } - break; } -/* Opcode: SetNumColumns * P2 * * * -** -** This opcode sets the number of columns for the cursor opened by the -** following instruction to P2. -** -** An OP_SetNumColumns is only useful if it occurs immediately before -** one of the following opcodes: -** -** OpenRead -** OpenWrite -** OpenPseudo -** -** If the OP_Column opcode is to be executed on a cursor, then -** this opcode must be present immediately before the opcode that -** opens the cursor. +/* +** Delete a VdbeFrame object and its contents. VdbeFrame objects are +** allocated by the OP_Program opcode in sqlite3VdbeExec(). */ -#if 0 -case OP_SetNumColumns: { - break; +SQLITE_PRIVATE void sqlite3VdbeFrameDelete(VdbeFrame *p){ + int i; + Mem *aMem = VdbeFrameMem(p); + VdbeCursor **apCsr = (VdbeCursor **)&aMem[p->nChildMem]; + for(i=0; inChildCsr; i++){ + sqlite3VdbeFreeCursor(p->v, apCsr[i]); + } + releaseMemArray(aMem, p->nChildMem); + sqlite3DbFree(p->v->db, p); } -#endif -/* Opcode: Column P1 P2 P3 P4 * +#ifndef SQLITE_OMIT_EXPLAIN +/* +** Give a listing of the program in the virtual machine. ** -** Interpret the data that cursor P1 points to as a structure built using -** the MakeRecord instruction. (See the MakeRecord opcode for additional -** information about the format of the data.) Extract the P2-th column -** from this record. If there are less that (P2+1) -** values in the record, extract a NULL. +** The interface is the same as sqlite3VdbeExec(). But instead of +** running the code, it invokes the callback once for each instruction. +** This feature is used to implement "EXPLAIN". ** -** The value extracted is stored in register P3. +** When p->explain==1, each instruction is listed. When +** p->explain==2, only OP_Explain instructions are listed and these +** are shown in a different format. p->explain==2 is used to implement +** EXPLAIN QUERY PLAN. ** -** If the column contains fewer than P2 fields, then extract a NULL. Or, -** if the P4 argument is a P4_MEM use the value of the P4 argument as -** the result. +** When p->explain==1, first the main program is listed, then each of +** the trigger subprograms are listed one by one. */ -case OP_Column: { -#if 0 /* local variables moved into u.am */ - u32 payloadSize; /* Number of bytes in the record */ - i64 payloadSize64; /* Number of bytes in the record */ - int p1; /* P1 value of the opcode */ - int p2; /* column number to retrieve */ - VdbeCursor *pC; /* The VDBE cursor */ - char *zRec; /* Pointer to complete record-data */ - BtCursor *pCrsr; /* The BTree cursor */ - u32 *aType; /* aType[i] holds the numeric type of the i-th column */ - u32 *aOffset; /* aOffset[i] is offset to start of data for i-th column */ - int nField; /* number of fields in the record */ - int len; /* The length of the serialized data for the column */ - int i; /* Loop counter */ - char *zData; /* Part of the record being decoded */ - Mem *pDest; /* Where to write the extracted value */ - Mem sMem; /* For storing the record being decoded */ - u8 *zIdx; /* Index into header */ - u8 *zEndHdr; /* Pointer to first byte after the header */ - u32 offset; /* Offset into the data */ - u64 offset64; /* 64-bit offset. 64 bits needed to catch overflow */ - int szHdr; /* Size of the header size field at start of record */ - int avail; /* Number of bytes of available data */ -#endif /* local variables moved into u.am */ - +SQLITE_PRIVATE int sqlite3VdbeList( + Vdbe *p /* The VDBE */ +){ + int nRow; /* Stop when row count reaches this */ + int nSub = 0; /* Number of sub-vdbes seen so far */ + SubProgram **apSub = 0; /* Array of sub-vdbes */ + Mem *pSub = 0; /* Memory cell hold array of subprogs */ + sqlite3 *db = p->db; /* The database connection */ + int i; /* Loop counter */ + int rc = SQLITE_OK; /* Return code */ + Mem *pMem = &p->aMem[1]; /* First Mem of result set */ - u.am.p1 = pOp->p1; - u.am.p2 = pOp->p2; - u.am.pC = 0; - memset(&u.am.sMem, 0, sizeof(u.am.sMem)); - assert( u.am.p1nCursor ); - assert( pOp->p3>0 && pOp->p3<=p->nMem ); - u.am.pDest = &p->aMem[pOp->p3]; - MemSetTypeFlag(u.am.pDest, MEM_Null); - u.am.zRec = 0; + assert( p->explain ); + assert( p->magic==VDBE_MAGIC_RUN ); + assert( p->rc==SQLITE_OK || p->rc==SQLITE_BUSY || p->rc==SQLITE_NOMEM ); - /* This block sets the variable u.am.payloadSize to be the total number of - ** bytes in the record. - ** - ** u.am.zRec is set to be the complete text of the record if it is available. - ** The complete record text is always available for pseudo-tables - ** If the record is stored in a cursor, the complete record text - ** might be available in the u.am.pC->aRow cache. Or it might not be. - ** If the data is unavailable, u.am.zRec is set to NULL. - ** - ** We also compute the number of columns in the record. For cursors, - ** the number of columns is stored in the VdbeCursor.nField element. + /* Even though this opcode does not use dynamic strings for + ** the result, result columns may become dynamic if the user calls + ** sqlite3_column_text16(), causing a translation to UTF-16 encoding. */ - u.am.pC = p->apCsr[u.am.p1]; - assert( u.am.pC!=0 ); -#ifndef SQLITE_OMIT_VIRTUALTABLE - assert( u.am.pC->pVtabCursor==0 ); -#endif - u.am.pCrsr = u.am.pC->pCursor; - if( u.am.pCrsr!=0 ){ - /* The record is stored in a B-Tree */ - rc = sqlite3VdbeCursorMoveto(u.am.pC); - if( rc ) goto abort_due_to_error; - if( u.am.pC->nullRow ){ - u.am.payloadSize = 0; - }else if( u.am.pC->cacheStatus==p->cacheCtr ){ - u.am.payloadSize = u.am.pC->payloadSize; - u.am.zRec = (char*)u.am.pC->aRow; - }else if( u.am.pC->isIndex ){ - sqlite3BtreeKeySize(u.am.pCrsr, &u.am.payloadSize64); - /* sqlite3BtreeParseCellPtr() uses getVarint32() to extract the - ** payload size, so it is impossible for u.am.payloadSize64 to be - ** larger than 32 bits. */ - assert( (u.am.payloadSize64 & SQLITE_MAX_U32)==(u64)u.am.payloadSize64 ); - u.am.payloadSize = (u32)u.am.payloadSize64; - }else{ - sqlite3BtreeDataSize(u.am.pCrsr, &u.am.payloadSize); - } - }else if( u.am.pC->pseudoTable ){ - /* The record is the sole entry of a pseudo-table */ - u.am.payloadSize = u.am.pC->nData; - u.am.zRec = u.am.pC->pData; - u.am.pC->cacheStatus = CACHE_STALE; - assert( u.am.payloadSize==0 || u.am.zRec!=0 ); - }else{ - /* Consider the row to be NULL */ - u.am.payloadSize = 0; - } + releaseMemArray(pMem, 8); + p->pResultSet = 0; - /* If u.am.payloadSize is 0, then just store a NULL */ - if( u.am.payloadSize==0 ){ - assert( u.am.pDest->flags&MEM_Null ); - goto op_column_out; - } - assert( db->aLimit[SQLITE_LIMIT_LENGTH]>=0 ); - if( u.am.payloadSize > (u32)db->aLimit[SQLITE_LIMIT_LENGTH] ){ - goto too_big; + if( p->rc==SQLITE_NOMEM ){ + /* This happens if a malloc() inside a call to sqlite3_column_text() or + ** sqlite3_column_text16() failed. */ + db->mallocFailed = 1; + return SQLITE_ERROR; } - u.am.nField = u.am.pC->nField; - assert( u.am.p2pc will eventually catch up to nRow. */ - u.am.aType = u.am.pC->aType; - if( u.am.pC->cacheStatus==p->cacheCtr ){ - u.am.aOffset = u.am.pC->aOffset; - }else{ - assert(u.am.aType); - u.am.avail = 0; - u.am.pC->aOffset = u.am.aOffset = &u.am.aType[u.am.nField]; - u.am.pC->payloadSize = u.am.payloadSize; - u.am.pC->cacheStatus = p->cacheCtr; + nRow = p->nOp; + if( p->explain==1 ){ + /* The first 8 memory cells are used for the result set. So we will + ** commandeer the 9th cell to use as storage for an array of pointers + ** to trigger subprograms. The VDBE is guaranteed to have at least 9 + ** cells. */ + assert( p->nMem>9 ); + pSub = &p->aMem[9]; + if( pSub->flags&MEM_Blob ){ + /* On the first call to sqlite3_step(), pSub will hold a NULL. It is + ** initialized to a BLOB by the P4_SUBPROGRAM processing logic below */ + nSub = pSub->n/sizeof(Vdbe*); + apSub = (SubProgram **)pSub->z; + } + for(i=0; inOp; + } + } - /* Figure out how many bytes are in the header */ - if( u.am.zRec ){ - u.am.zData = u.am.zRec; + do{ + i = p->pc++; + }while( iexplain==2 && p->aOp[i].opcode!=OP_Explain ); + if( i>=nRow ){ + p->rc = SQLITE_OK; + rc = SQLITE_DONE; + }else if( db->u1.isInterrupted ){ + p->rc = SQLITE_INTERRUPT; + rc = SQLITE_ERROR; + sqlite3SetString(&p->zErrMsg, db, "%s", sqlite3ErrStr(p->rc)); + }else{ + char *z; + Op *pOp; + if( inOp ){ + /* The output line number is small enough that we are still in the + ** main program. */ + pOp = &p->aOp[i]; }else{ - if( u.am.pC->isIndex ){ - u.am.zData = (char*)sqlite3BtreeKeyFetch(u.am.pCrsr, &u.am.avail); - }else{ - u.am.zData = (char*)sqlite3BtreeDataFetch(u.am.pCrsr, &u.am.avail); + /* We are currently listing subprograms. Figure out which one and + ** pick up the appropriate opcode. */ + int j; + i -= p->nOp; + for(j=0; i>=apSub[j]->nOp; j++){ + i -= apSub[j]->nOp; } - /* If KeyFetch()/DataFetch() managed to get the entire payload, - ** save the payload in the u.am.pC->aRow cache. That will save us from - ** having to make additional calls to fetch the content portion of - ** the record. + pOp = &apSub[j]->aOp[i]; + } + if( p->explain==1 ){ + pMem->flags = MEM_Int; + pMem->type = SQLITE_INTEGER; + pMem->u.i = i; /* Program counter */ + pMem++; + + pMem->flags = MEM_Static|MEM_Str|MEM_Term; + pMem->z = (char*)sqlite3OpcodeName(pOp->opcode); /* Opcode */ + assert( pMem->z!=0 ); + pMem->n = sqlite3Strlen30(pMem->z); + pMem->type = SQLITE_TEXT; + pMem->enc = SQLITE_UTF8; + pMem++; + + /* When an OP_Program opcode is encounter (the only opcode that has + ** a P4_SUBPROGRAM argument), expand the size of the array of subprograms + ** kept in p->aMem[9].z to hold the new program - assuming this subprogram + ** has not already been seen. */ - assert( u.am.avail>=0 ); - if( u.am.payloadSize <= (u32)u.am.avail ){ - u.am.zRec = u.am.zData; - u.am.pC->aRow = (u8*)u.am.zData; - }else{ - u.am.pC->aRow = 0; + if( pOp->p4type==P4_SUBPROGRAM ){ + int nByte = (nSub+1)*sizeof(SubProgram*); + int j; + for(j=0; jp4.pProgram ) break; + } + if( j==nSub && SQLITE_OK==sqlite3VdbeMemGrow(pSub, nByte, nSub!=0) ){ + apSub = (SubProgram **)pSub->z; + apSub[nSub++] = pOp->p4.pProgram; + pSub->flags |= MEM_Blob; + pSub->n = nSub*sizeof(SubProgram*); + } } } - /* The following assert is true in all cases accept when - ** the database file has been corrupted externally. - ** assert( u.am.zRec!=0 || u.am.avail>=u.am.payloadSize || u.am.avail>=9 ); */ - u.am.szHdr = getVarint32((u8*)u.am.zData, u.am.offset); - /* Make sure a corrupt database has not given us an oversize header. - ** Do this now to avoid an oversize memory allocation. - ** - ** Type entries can be between 1 and 5 bytes each. But 4 and 5 byte - ** types use so much data space that there can only be 4096 and 32 of - ** them, respectively. So the maximum header length results from a - ** 3-byte type for each of the maximum of 32768 columns plus three - ** extra bytes for the header length itself. 32768*3 + 3 = 98307. - */ - if( u.am.offset > 98307 ){ - rc = SQLITE_CORRUPT_BKPT; - goto op_column_out; - } + pMem->flags = MEM_Int; + pMem->u.i = pOp->p1; /* P1 */ + pMem->type = SQLITE_INTEGER; + pMem++; - /* Compute in u.am.len the number of bytes of data we need to read in order - ** to get u.am.nField type values. u.am.offset is an upper bound on this. But - ** u.am.nField might be significantly less than the true number of columns - ** in the table, and in that case, 5*u.am.nField+3 might be smaller than u.am.offset. - ** We want to minimize u.am.len in order to limit the size of the memory - ** allocation, especially if a corrupt database file has caused u.am.offset - ** to be oversized. Offset is limited to 98307 above. But 98307 might - ** still exceed Robson memory allocation limits on some configurations. - ** On systems that cannot tolerate large memory allocations, u.am.nField*5+3 - ** will likely be much smaller since u.am.nField will likely be less than - ** 20 or so. This insures that Robson memory allocation limits are - ** not exceeded even for corrupt database files. - */ - u.am.len = u.am.nField*5 + 3; - if( u.am.len > (int)u.am.offset ) u.am.len = (int)u.am.offset; + pMem->flags = MEM_Int; + pMem->u.i = pOp->p2; /* P2 */ + pMem->type = SQLITE_INTEGER; + pMem++; - /* The KeyFetch() or DataFetch() above are fast and will get the entire - ** record header in most cases. But they will fail to get the complete - ** record header if the record header does not fit on a single page - ** in the B-Tree. When that happens, use sqlite3VdbeMemFromBtree() to - ** acquire the complete header text. - */ - if( !u.am.zRec && u.am.availisIndex, &u.am.sMem); - if( rc!=SQLITE_OK ){ - goto op_column_out; - } - u.am.zData = u.am.sMem.z; - } - u.am.zEndHdr = (u8 *)&u.am.zData[u.am.len]; - u.am.zIdx = (u8 *)&u.am.zData[u.am.szHdr]; + pMem->flags = MEM_Int; + pMem->u.i = pOp->p3; /* P3 */ + pMem->type = SQLITE_INTEGER; + pMem++; - /* Scan the header and use it to fill in the u.am.aType[] and u.am.aOffset[] - ** arrays. u.am.aType[u.am.i] will contain the type integer for the u.am.i-th - ** column and u.am.aOffset[u.am.i] will contain the u.am.offset from the beginning - ** of the record to the start of the data for the u.am.i-th column - */ - u.am.offset64 = u.am.offset; - for(u.am.i=0; u.am.idb->mallocFailed ); + return SQLITE_ERROR; } - sqlite3VdbeMemRelease(&u.am.sMem); - u.am.sMem.flags = MEM_Null; - - /* If we have read more header data than was contained in the header, - ** or if the end of the last field appears to be past the end of the - ** record, or if the end of the last field appears to be before the end - ** of the record (when all fields present), then we must be dealing - ** with a corrupt database. - */ - if( (u.am.zIdx > u.am.zEndHdr)|| (u.am.offset64 > u.am.payloadSize) - || (u.am.zIdx==u.am.zEndHdr && u.am.offset64!=(u64)u.am.payloadSize) ){ - rc = SQLITE_CORRUPT_BKPT; - goto op_column_out; + pMem->flags = MEM_Dyn|MEM_Str|MEM_Term; + z = displayP4(pOp, pMem->z, 32); + if( z!=pMem->z ){ + sqlite3VdbeMemSetStr(pMem, z, -1, SQLITE_UTF8, 0); + }else{ + assert( pMem->z!=0 ); + pMem->n = sqlite3Strlen30(pMem->z); + pMem->enc = SQLITE_UTF8; } - } + pMem->type = SQLITE_TEXT; + pMem++; - /* Get the column information. If u.am.aOffset[u.am.p2] is non-zero, then - ** deserialize the value from the record. If u.am.aOffset[u.am.p2] is zero, - ** then there are not enough fields in the record to satisfy the - ** request. In this case, set the value NULL or to P4 if P4 is - ** a pointer to a Mem object. - */ - if( u.am.aOffset[u.am.p2] ){ - assert( rc==SQLITE_OK ); - if( u.am.zRec ){ - sqlite3VdbeMemReleaseExternal(u.am.pDest); - sqlite3VdbeSerialGet((u8 *)&u.am.zRec[u.am.aOffset[u.am.p2]], u.am.aType[u.am.p2], u.am.pDest); - }else{ - u.am.len = sqlite3VdbeSerialTypeLen(u.am.aType[u.am.p2]); - sqlite3VdbeMemMove(&u.am.sMem, u.am.pDest); - rc = sqlite3VdbeMemFromBtree(u.am.pCrsr, u.am.aOffset[u.am.p2], u.am.len, u.am.pC->isIndex, &u.am.sMem); - if( rc!=SQLITE_OK ){ - goto op_column_out; + if( p->explain==1 ){ + if( sqlite3VdbeMemGrow(pMem, 4, 0) ){ + assert( p->db->mallocFailed ); + return SQLITE_ERROR; + } + pMem->flags = MEM_Dyn|MEM_Str|MEM_Term; + pMem->n = 2; + sqlite3_snprintf(3, pMem->z, "%.2x", pOp->p5); /* P5 */ + pMem->type = SQLITE_TEXT; + pMem->enc = SQLITE_UTF8; + pMem++; + +#ifdef SQLITE_DEBUG + if( pOp->zComment ){ + pMem->flags = MEM_Str|MEM_Term; + pMem->z = pOp->zComment; + pMem->n = sqlite3Strlen30(pMem->z); + pMem->enc = SQLITE_UTF8; + pMem->type = SQLITE_TEXT; + }else +#endif + { + pMem->flags = MEM_Null; /* Comment */ + pMem->type = SQLITE_NULL; } - u.am.zData = u.am.sMem.z; - sqlite3VdbeSerialGet((u8*)u.am.zData, u.am.aType[u.am.p2], u.am.pDest); - } - u.am.pDest->enc = encoding; - }else{ - if( pOp->p4type==P4_MEM ){ - sqlite3VdbeMemShallowCopy(u.am.pDest, pOp->p4.pMem, MEM_Static); - }else{ - assert( u.am.pDest->flags&MEM_Null ); } - } - /* If we dynamically allocated space to hold the data (in the - ** sqlite3VdbeMemFromBtree() call above) then transfer control of that - ** dynamically allocated space over to the u.am.pDest structure. - ** This prevents a memory copy. - */ - if( u.am.sMem.zMalloc ){ - assert( u.am.sMem.z==u.am.sMem.zMalloc ); - assert( !(u.am.pDest->flags & MEM_Dyn) ); - assert( !(u.am.pDest->flags & (MEM_Blob|MEM_Str)) || u.am.pDest->z==u.am.sMem.z ); - u.am.pDest->flags &= ~(MEM_Ephem|MEM_Static); - u.am.pDest->flags |= MEM_Term; - u.am.pDest->z = u.am.sMem.z; - u.am.pDest->zMalloc = u.am.sMem.zMalloc; + p->nResColumn = 8 - 4*(p->explain-1); + p->pResultSet = &p->aMem[1]; + p->rc = SQLITE_OK; + rc = SQLITE_ROW; } + return rc; +} +#endif /* SQLITE_OMIT_EXPLAIN */ - rc = sqlite3VdbeMemMakeWriteable(u.am.pDest); - -op_column_out: - UPDATE_MAX_BLOBSIZE(u.am.pDest); - REGISTER_TRACE(pOp->p3, u.am.pDest); - break; +#ifdef SQLITE_DEBUG +/* +** Print the SQL that was used to generate a VDBE program. +*/ +SQLITE_PRIVATE void sqlite3VdbePrintSql(Vdbe *p){ + int nOp = p->nOp; + VdbeOp *pOp; + if( nOp<1 ) return; + pOp = &p->aOp[0]; + if( pOp->opcode==OP_Trace && pOp->p4.z!=0 ){ + const char *z = pOp->p4.z; + while( sqlite3Isspace(*z) ) z++; + printf("SQL: [%s]\n", z); + } } +#endif -/* Opcode: Affinity P1 P2 * P4 * +#if !defined(SQLITE_OMIT_TRACE) && defined(SQLITE_ENABLE_IOTRACE) +/* +** Print an IOTRACE message showing SQL content. +*/ +SQLITE_PRIVATE void sqlite3VdbeIOTraceSql(Vdbe *p){ + int nOp = p->nOp; + VdbeOp *pOp; + if( sqlite3IoTrace==0 ) return; + if( nOp<1 ) return; + pOp = &p->aOp[0]; + if( pOp->opcode==OP_Trace && pOp->p4.z!=0 ){ + int i, j; + char z[1000]; + sqlite3_snprintf(sizeof(z), z, "%s", pOp->p4.z); + for(i=0; sqlite3Isspace(z[i]); i++){} + for(j=0; z[i]; i++){ + if( sqlite3Isspace(z[i]) ){ + if( z[i-1]!=' ' ){ + z[j++] = ' '; + } + }else{ + z[j++] = z[i]; + } + } + z[j] = 0; + sqlite3IoTrace("SQL %s\n", z); + } +} +#endif /* !SQLITE_OMIT_TRACE && SQLITE_ENABLE_IOTRACE */ + +/* +** Allocate space from a fixed size buffer and return a pointer to +** that space. If insufficient space is available, return NULL. ** -** Apply affinities to a range of P2 registers starting with P1. +** The pBuf parameter is the initial value of a pointer which will +** receive the new memory. pBuf is normally NULL. If pBuf is not +** NULL, it means that memory space has already been allocated and that +** this routine should not allocate any new memory. When pBuf is not +** NULL simply return pBuf. Only allocate new memory space when pBuf +** is NULL. ** -** P4 is a string that is P2 characters long. The nth character of the -** string indicates the column affinity that should be used for the nth -** memory cell in the range. +** nByte is the number of bytes of space needed. +** +** *ppFrom points to available space and pEnd points to the end of the +** available space. When space is allocated, *ppFrom is advanced past +** the end of the allocated space. +** +** *pnByte is a counter of the number of bytes of space that have failed +** to allocate. If there is insufficient space in *ppFrom to satisfy the +** request, then increment *pnByte by the amount of the request. */ -case OP_Affinity: { -#if 0 /* local variables moved into u.an */ - char *zAffinity; /* The affinity to be applied */ - Mem *pData0; /* First register to which to apply affinity */ - Mem *pLast; /* Last register to which to apply affinity */ - Mem *pRec; /* Current register */ -#endif /* local variables moved into u.an */ +static void *allocSpace( + void *pBuf, /* Where return pointer will be stored */ + int nByte, /* Number of bytes to allocate */ + u8 **ppFrom, /* IN/OUT: Allocate from *ppFrom */ + u8 *pEnd, /* Pointer to 1 byte past the end of *ppFrom buffer */ + int *pnByte /* If allocation cannot be made, increment *pnByte */ +){ + assert( EIGHT_BYTE_ALIGNMENT(*ppFrom) ); + if( pBuf ) return pBuf; + nByte = ROUND8(nByte); + if( &(*ppFrom)[nByte] <= pEnd ){ + pBuf = (void*)*ppFrom; + *ppFrom += nByte; + }else{ + *pnByte += nByte; + } + return pBuf; +} + +/* +** Rewind the VDBE back to the beginning in preparation for +** running it. +*/ +SQLITE_PRIVATE void sqlite3VdbeRewind(Vdbe *p){ +#if defined(SQLITE_DEBUG) || defined(VDBE_PROFILE) + int i; +#endif + assert( p!=0 ); + assert( p->magic==VDBE_MAGIC_INIT ); - u.an.zAffinity = pOp->p4.z; - u.an.pData0 = &p->aMem[pOp->p1]; - u.an.pLast = &u.an.pData0[pOp->p2-1]; - for(u.an.pRec=u.an.pData0; u.an.pRec<=u.an.pLast; u.an.pRec++){ - ExpandBlob(u.an.pRec); - applyAffinity(u.an.pRec, u.an.zAffinity[u.an.pRec-u.an.pData0], encoding); + /* There should be at least one opcode. + */ + assert( p->nOp>0 ); + + /* Set the magic to VDBE_MAGIC_RUN sooner rather than later. */ + p->magic = VDBE_MAGIC_RUN; + +#ifdef SQLITE_DEBUG + for(i=1; inMem; i++){ + assert( p->aMem[i].db==p->db ); } - break; +#endif + p->pc = -1; + p->rc = SQLITE_OK; + p->errorAction = OE_Abort; + p->magic = VDBE_MAGIC_RUN; + p->nChange = 0; + p->cacheCtr = 1; + p->minWriteFileFormat = 255; + p->iStatement = 0; + p->nFkConstraint = 0; +#ifdef VDBE_PROFILE + for(i=0; inOp; i++){ + p->aOp[i].cnt = 0; + p->aOp[i].cycles = 0; + } +#endif } -/* Opcode: MakeRecord P1 P2 P3 P4 * -** -** Convert P2 registers beginning with P1 into a single entry -** suitable for use as a data record in a database table or as a key -** in an index. The details of the format are irrelevant as long as -** the OP_Column opcode can decode the record later. -** Refer to source code comments for the details of the record -** format. -** -** P4 may be a string that is P2 characters long. The nth character of the -** string indicates the column affinity that should be used for the nth -** field of the index key. +/* +** Prepare a virtual machine for execution for the first time after +** creating the virtual machine. This involves things such +** as allocating stack space and initializing the program counter. +** After the VDBE has be prepped, it can be executed by one or more +** calls to sqlite3VdbeExec(). ** -** The mapping from character to affinity is given by the SQLITE_AFF_ -** macros defined in sqliteInt.h. +** This function may be called exact once on a each virtual machine. +** After this routine is called the VM has been "packaged" and is ready +** to run. After this routine is called, futher calls to +** sqlite3VdbeAddOp() functions are prohibited. This routine disconnects +** the Vdbe from the Parse object that helped generate it so that the +** the Vdbe becomes an independent entity and the Parse object can be +** destroyed. ** -** If P4 is NULL then all index fields have the affinity NONE. +** Use the sqlite3VdbeRewind() procedure to restore a virtual machine back +** to its initial state after it has been run. */ -case OP_MakeRecord: { -#if 0 /* local variables moved into u.ao */ - u8 *zNewRecord; /* A buffer to hold the data for the new record */ - Mem *pRec; /* The new record */ - u64 nData; /* Number of bytes of data space */ - int nHdr; /* Number of bytes of header space */ - i64 nByte; /* Data space required for this record */ - int nZero; /* Number of zero bytes at the end of the record */ - int nVarint; /* Number of bytes in a varint */ - u32 serial_type; /* Type field */ - Mem *pData0; /* First field to be combined into the record */ - Mem *pLast; /* Last field of the record */ - int nField; /* Number of fields in the record */ - char *zAffinity; /* The affinity string for the record */ - int file_format; /* File format to use for encoding */ - int i; /* Space used in zNewRecord[] */ - int len; /* Length of a field */ -#endif /* local variables moved into u.ao */ +SQLITE_PRIVATE void sqlite3VdbeMakeReady( + Vdbe *p, /* The VDBE */ + Parse *pParse /* Parsing context */ +){ + sqlite3 *db; /* The database connection */ + int nVar; /* Number of parameters */ + int nMem; /* Number of VM memory registers */ + int nCursor; /* Number of cursors required */ + int nArg; /* Number of arguments in subprograms */ + int nOnce; /* Number of OP_Once instructions */ + int n; /* Loop counter */ + u8 *zCsr; /* Memory available for allocation */ + u8 *zEnd; /* First byte past allocated memory */ + int nByte; /* How much extra memory is needed */ - /* Assuming the record contains N fields, the record format looks - ** like this: - ** - ** ------------------------------------------------------------------------ - ** | hdr-size | type 0 | type 1 | ... | type N-1 | data0 | ... | data N-1 | - ** ------------------------------------------------------------------------ - ** - ** Data(0) is taken from register P1. Data(1) comes from register P1+1 - ** and so froth. + assert( p!=0 ); + assert( p->nOp>0 ); + assert( pParse!=0 ); + assert( p->magic==VDBE_MAGIC_INIT ); + db = p->db; + assert( db->mallocFailed==0 ); + nVar = pParse->nVar; + nMem = pParse->nMem; + nCursor = pParse->nTab; + nArg = pParse->nMaxArg; + nOnce = pParse->nOnce; + if( nOnce==0 ) nOnce = 1; /* Ensure at least one byte in p->aOnceFlag[] */ + + /* For each cursor required, also allocate a memory cell. Memory + ** cells (nMem+1-nCursor)..nMem, inclusive, will never be used by + ** the vdbe program. Instead they are used to allocate space for + ** VdbeCursor/BtCursor structures. The blob of memory associated with + ** cursor 0 is stored in memory cell nMem. Memory cell (nMem-1) + ** stores the blob of memory associated with cursor 1, etc. ** - ** Each type field is a varint representing the serial type of the - ** corresponding data element (see sqlite3VdbeSerialType()). The - ** hdr-size field is also a varint which is the offset from the beginning - ** of the record to data0. + ** See also: allocateCursor(). */ - u.ao.nData = 0; /* Number of bytes of data space */ - u.ao.nHdr = 0; /* Number of bytes of header space */ - u.ao.nByte = 0; /* Data space required for this record */ - u.ao.nZero = 0; /* Number of zero bytes at the end of the record */ - u.ao.nField = pOp->p1; - u.ao.zAffinity = pOp->p4.z; - assert( u.ao.nField>0 && pOp->p2>0 && pOp->p2+u.ao.nField<=p->nMem+1 ); - u.ao.pData0 = &p->aMem[u.ao.nField]; - u.ao.nField = pOp->p2; - u.ao.pLast = &u.ao.pData0[u.ao.nField-1]; - u.ao.file_format = p->minWriteFileFormat; + nMem += nCursor; - /* Loop through the elements that will make up the record to figure - ** out how much space is required for the new record. + /* Allocate space for memory registers, SQL variables, VDBE cursors and + ** an array to marshal SQL function arguments in. + */ + zCsr = (u8*)&p->aOp[p->nOp]; /* Memory avaliable for allocation */ + zEnd = (u8*)&p->aOp[p->nOpAlloc]; /* First byte past end of zCsr[] */ + + resolveP2Values(p, &nArg); + p->usesStmtJournal = (u8)(pParse->isMultiWrite && pParse->mayAbort); + if( pParse->explain && nMem<10 ){ + nMem = 10; + } + memset(zCsr, 0, zEnd-zCsr); + zCsr += (zCsr - (u8*)0)&7; + assert( EIGHT_BYTE_ALIGNMENT(zCsr) ); + p->expired = 0; + + /* Memory for registers, parameters, cursor, etc, is allocated in two + ** passes. On the first pass, we try to reuse unused space at the + ** end of the opcode array. If we are unable to satisfy all memory + ** requirements by reusing the opcode array tail, then the second + ** pass will fill in the rest using a fresh allocation. + ** + ** This two-pass approach that reuses as much memory as possible from + ** the leftover space at the end of the opcode array can significantly + ** reduce the amount of memory held by a prepared statement. */ - for(u.ao.pRec=u.ao.pData0; u.ao.pRec<=u.ao.pLast; u.ao.pRec++){ - if( u.ao.zAffinity ){ - applyAffinity(u.ao.pRec, u.ao.zAffinity[u.ao.pRec-u.ao.pData0], encoding); + do { + nByte = 0; + p->aMem = allocSpace(p->aMem, nMem*sizeof(Mem), &zCsr, zEnd, &nByte); + p->aVar = allocSpace(p->aVar, nVar*sizeof(Mem), &zCsr, zEnd, &nByte); + p->apArg = allocSpace(p->apArg, nArg*sizeof(Mem*), &zCsr, zEnd, &nByte); + p->azVar = allocSpace(p->azVar, nVar*sizeof(char*), &zCsr, zEnd, &nByte); + p->apCsr = allocSpace(p->apCsr, nCursor*sizeof(VdbeCursor*), + &zCsr, zEnd, &nByte); + p->aOnceFlag = allocSpace(p->aOnceFlag, nOnce, &zCsr, zEnd, &nByte); + if( nByte ){ + p->pFree = sqlite3DbMallocZero(db, nByte); } - if( u.ao.pRec->flags&MEM_Zero && u.ao.pRec->n>0 ){ - sqlite3VdbeMemExpandBlob(u.ao.pRec); + zCsr = p->pFree; + zEnd = &zCsr[nByte]; + }while( nByte && !db->mallocFailed ); + + p->nCursor = (u16)nCursor; + p->nOnceFlag = nOnce; + if( p->aVar ){ + p->nVar = (ynVar)nVar; + for(n=0; naVar[n].flags = MEM_Null; + p->aVar[n].db = db; } - u.ao.serial_type = sqlite3VdbeSerialType(u.ao.pRec, u.ao.file_format); - u.ao.len = sqlite3VdbeSerialTypeLen(u.ao.serial_type); - u.ao.nData += u.ao.len; - u.ao.nHdr += sqlite3VarintLen(u.ao.serial_type); - if( u.ao.pRec->flags & MEM_Zero ){ - /* Only pure zero-filled BLOBs can be input to this Opcode. - ** We do not allow blobs with a prefix and a zero-filled tail. */ - u.ao.nZero += u.ao.pRec->u.nZero; - }else if( u.ao.len ){ - u.ao.nZero = 0; + } + if( p->azVar ){ + p->nzVar = pParse->nzVar; + memcpy(p->azVar, pParse->azVar, p->nzVar*sizeof(p->azVar[0])); + memset(pParse->azVar, 0, pParse->nzVar*sizeof(pParse->azVar[0])); + } + if( p->aMem ){ + p->aMem--; /* aMem[] goes from 1..nMem */ + p->nMem = nMem; /* not from 0..nMem-1 */ + for(n=1; n<=nMem; n++){ + p->aMem[n].flags = MEM_Invalid; + p->aMem[n].db = db; } } + p->explain = pParse->explain; + sqlite3VdbeRewind(p); +} - /* Add the initial header varint and total the size */ - u.ao.nHdr += u.ao.nVarint = sqlite3VarintLen(u.ao.nHdr); - if( u.ao.nVarintdb->aLimit[SQLITE_LIMIT_LENGTH] ){ - goto too_big; + sqlite3VdbeSorterClose(p->db, pCx); + if( pCx->pBt ){ + sqlite3BtreeClose(pCx->pBt); + /* The pCx->pCursor will be close automatically, if it exists, by + ** the call above. */ + }else if( pCx->pCursor ){ + sqlite3BtreeCloseCursor(pCx->pCursor); + } +#ifndef SQLITE_OMIT_VIRTUALTABLE + if( pCx->pVtabCursor ){ + sqlite3_vtab_cursor *pVtabCursor = pCx->pVtabCursor; + const sqlite3_module *pModule = pCx->pModule; + p->inVtabMethod = 1; + pModule->xClose(pVtabCursor); + p->inVtabMethod = 0; } +#endif +} - /* Make sure the output register has a buffer large enough to store - ** the new record. The output register (pOp->p3) is not allowed to - ** be one of the input registers (because the following call to - ** sqlite3VdbeMemGrow() could clobber the value before it is used). - */ - assert( pOp->p3p1 || pOp->p3>=pOp->p1+pOp->p2 ); - pOut = &p->aMem[pOp->p3]; - if( sqlite3VdbeMemGrow(pOut, (int)u.ao.nByte, 0) ){ - goto no_mem; +/* +** Copy the values stored in the VdbeFrame structure to its Vdbe. This +** is used, for example, when a trigger sub-program is halted to restore +** control to the main program. +*/ +SQLITE_PRIVATE int sqlite3VdbeFrameRestore(VdbeFrame *pFrame){ + Vdbe *v = pFrame->v; + v->aOnceFlag = pFrame->aOnceFlag; + v->nOnceFlag = pFrame->nOnceFlag; + v->aOp = pFrame->aOp; + v->nOp = pFrame->nOp; + v->aMem = pFrame->aMem; + v->nMem = pFrame->nMem; + v->apCsr = pFrame->apCsr; + v->nCursor = pFrame->nCursor; + v->db->lastRowid = pFrame->lastRowid; + v->nChange = pFrame->nChange; + return pFrame->pc; +} + +/* +** Close all cursors. +** +** Also release any dynamic memory held by the VM in the Vdbe.aMem memory +** cell array. This is necessary as the memory cell array may contain +** pointers to VdbeFrame objects, which may in turn contain pointers to +** open cursors. +*/ +static void closeAllCursors(Vdbe *p){ + if( p->pFrame ){ + VdbeFrame *pFrame; + for(pFrame=p->pFrame; pFrame->pParent; pFrame=pFrame->pParent); + sqlite3VdbeFrameRestore(pFrame); } - u.ao.zNewRecord = (u8 *)pOut->z; + p->pFrame = 0; + p->nFrame = 0; - /* Write the record */ - u.ao.i = putVarint32(u.ao.zNewRecord, u.ao.nHdr); - for(u.ao.pRec=u.ao.pData0; u.ao.pRec<=u.ao.pLast; u.ao.pRec++){ - u.ao.serial_type = sqlite3VdbeSerialType(u.ao.pRec, u.ao.file_format); - u.ao.i += putVarint32(&u.ao.zNewRecord[u.ao.i], u.ao.serial_type); /* serial type */ + if( p->apCsr ){ + int i; + for(i=0; inCursor; i++){ + VdbeCursor *pC = p->apCsr[i]; + if( pC ){ + sqlite3VdbeFreeCursor(p, pC); + p->apCsr[i] = 0; + } + } } - for(u.ao.pRec=u.ao.pData0; u.ao.pRec<=u.ao.pLast; u.ao.pRec++){ /* serial data */ - u.ao.i += sqlite3VdbeSerialPut(&u.ao.zNewRecord[u.ao.i], (int)(u.ao.nByte-u.ao.i), u.ao.pRec,u.ao.file_format); + if( p->aMem ){ + releaseMemArray(&p->aMem[1], p->nMem); } - assert( u.ao.i==u.ao.nByte ); - - assert( pOp->p3>0 && pOp->p3<=p->nMem ); - pOut->n = (int)u.ao.nByte; - pOut->flags = MEM_Blob | MEM_Dyn; - pOut->xDel = 0; - if( u.ao.nZero ){ - pOut->u.nZero = u.ao.nZero; - pOut->flags |= MEM_Zero; + while( p->pDelFrame ){ + VdbeFrame *pDel = p->pDelFrame; + p->pDelFrame = pDel->pParent; + sqlite3VdbeFrameDelete(pDel); } - pOut->enc = SQLITE_UTF8; /* In case the blob is ever converted to text */ - REGISTER_TRACE(pOp->p3, pOut); - UPDATE_MAX_BLOBSIZE(pOut); - break; } -/* Opcode: Count P1 P2 * * * +/* +** Clean up the VM after execution. ** -** Store the number of entries (an integer value) in the table or index -** opened by cursor P1 in register P2 +** This routine will automatically close any cursors, lists, and/or +** sorters that were left open. It also deletes the values of +** variables in the aVar[] array. */ -#ifndef SQLITE_OMIT_BTREECOUNT -case OP_Count: { /* out2-prerelease */ -#if 0 /* local variables moved into u.ap */ - i64 nEntry; - BtCursor *pCrsr; -#endif /* local variables moved into u.ap */ +static void Cleanup(Vdbe *p){ + sqlite3 *db = p->db; - u.ap.pCrsr = p->apCsr[pOp->p1]->pCursor; - if( u.ap.pCrsr ){ - rc = sqlite3BtreeCount(u.ap.pCrsr, &u.ap.nEntry); - }else{ - u.ap.nEntry = 0; +#ifdef SQLITE_DEBUG + /* Execute assert() statements to ensure that the Vdbe.apCsr[] and + ** Vdbe.aMem[] arrays have already been cleaned up. */ + int i; + if( p->apCsr ) for(i=0; inCursor; i++) assert( p->apCsr[i]==0 ); + if( p->aMem ){ + for(i=1; i<=p->nMem; i++) assert( p->aMem[i].flags==MEM_Invalid ); } - pOut->flags = MEM_Int; - pOut->u.i = u.ap.nEntry; - break; -} #endif -/* Opcode: Statement P1 * * * * -** -** Begin an individual statement transaction which is part of a larger -** transaction. This is needed so that the statement -** can be rolled back after an error without having to roll back the -** entire transaction. The statement transaction will automatically -** commit when the VDBE halts. -** -** If the database connection is currently in autocommit mode (that -** is to say, if it is in between BEGIN and COMMIT) -** and if there are no other active statements on the same database -** connection, then this operation is a no-op. No statement transaction -** is needed since any error can use the normal ROLLBACK process to -** undo changes. -** -** If a statement transaction is started, then a statement journal file -** will be allocated and initialized. -** -** The statement is begun on the database file with index P1. The main -** database file has an index of 0 and the file used for temporary tables -** has an index of 1. + sqlite3DbFree(db, p->zErrMsg); + p->zErrMsg = 0; + p->pResultSet = 0; +} + +/* +** Set the number of result columns that will be returned by this SQL +** statement. This is now set at compile time, rather than during +** execution of the vdbe program so that sqlite3_column_count() can +** be called on an SQL statement before sqlite3_step(). */ -case OP_Statement: { -#if 0 /* local variables moved into u.aq */ - Btree *pBt; -#endif /* local variables moved into u.aq */ - if( db->autoCommit==0 || db->activeVdbeCnt>1 ){ - assert( pOp->p1>=0 && pOp->p1nDb ); - assert( db->aDb[pOp->p1].pBt!=0 ); - u.aq.pBt = db->aDb[pOp->p1].pBt; - assert( sqlite3BtreeIsInTrans(u.aq.pBt) ); - assert( (p->btreeMask & (1<p1))!=0 ); - if( p->iStatement==0 ){ - assert( db->nStatement>=0 && db->nSavepoint>=0 ); - db->nStatement++; - p->iStatement = db->nSavepoint + db->nStatement; - } - rc = sqlite3BtreeBeginStmt(u.aq.pBt, p->iStatement); +SQLITE_PRIVATE void sqlite3VdbeSetNumCols(Vdbe *p, int nResColumn){ + Mem *pColName; + int n; + sqlite3 *db = p->db; + + releaseMemArray(p->aColName, p->nResColumn*COLNAME_N); + sqlite3DbFree(db, p->aColName); + n = nResColumn*COLNAME_N; + p->nResColumn = (u16)nResColumn; + p->aColName = pColName = (Mem*)sqlite3DbMallocZero(db, sizeof(Mem)*n ); + if( p->aColName==0 ) return; + while( n-- > 0 ){ + pColName->flags = MEM_Null; + pColName->db = p->db; + pColName++; } - break; } -/* Opcode: Savepoint P1 * * P4 * +/* +** Set the name of the idx'th column to be returned by the SQL statement. +** zName must be a pointer to a nul terminated string. ** -** Open, release or rollback the savepoint named by parameter P4, depending -** on the value of P1. To open a new savepoint, P1==0. To release (commit) an -** existing savepoint, P1==1, or to rollback an existing savepoint P1==2. +** This call must be made after a call to sqlite3VdbeSetNumCols(). +** +** The final parameter, xDel, must be one of SQLITE_DYNAMIC, SQLITE_STATIC +** or SQLITE_TRANSIENT. If it is SQLITE_DYNAMIC, then the buffer pointed +** to by zName will be freed by sqlite3DbFree() when the vdbe is destroyed. */ -case OP_Savepoint: { -#if 0 /* local variables moved into u.ar */ - int p1; /* Value of P1 operand */ - char *zName; /* Name of savepoint */ - int nName; - Savepoint *pNew; - Savepoint *pSavepoint; - Savepoint *pTmp; - int iSavepoint; - int ii; -#endif /* local variables moved into u.ar */ +SQLITE_PRIVATE int sqlite3VdbeSetColName( + Vdbe *p, /* Vdbe being configured */ + int idx, /* Index of column zName applies to */ + int var, /* One of the COLNAME_* constants */ + const char *zName, /* Pointer to buffer containing name */ + void (*xDel)(void*) /* Memory management strategy for zName */ +){ + int rc; + Mem *pColName; + assert( idxnResColumn ); + assert( vardb->mallocFailed ){ + assert( !zName || xDel!=SQLITE_DYNAMIC ); + return SQLITE_NOMEM; + } + assert( p->aColName!=0 ); + pColName = &(p->aColName[idx+var*p->nResColumn]); + rc = sqlite3VdbeMemSetStr(pColName, zName, -1, SQLITE_UTF8, xDel); + assert( rc!=0 || !zName || (pColName->flags&MEM_Term)!=0 ); + return rc; +} - u.ar.p1 = pOp->p1; - u.ar.zName = pOp->p4.z; +/* +** A read or write transaction may or may not be active on database handle +** db. If a transaction is active, commit it. If there is a +** write-transaction spanning more than one database file, this routine +** takes care of the master journal trickery. +*/ +static int vdbeCommit(sqlite3 *db, Vdbe *p){ + int i; + int nTrans = 0; /* Number of databases with an active write-transaction */ + int rc = SQLITE_OK; + int needXcommit = 0; - /* Assert that the u.ar.p1 parameter is valid. Also that if there is no open - ** transaction, then there cannot be any savepoints. +#ifdef SQLITE_OMIT_VIRTUALTABLE + /* With this option, sqlite3VtabSync() is defined to be simply + ** SQLITE_OK so p is not used. */ - assert( db->pSavepoint==0 || db->autoCommit==0 ); - assert( u.ar.p1==SAVEPOINT_BEGIN||u.ar.p1==SAVEPOINT_RELEASE||u.ar.p1==SAVEPOINT_ROLLBACK ); - assert( db->pSavepoint || db->isTransactionSavepoint==0 ); - assert( checkSavepointCount(db) ); - - if( u.ar.p1==SAVEPOINT_BEGIN ){ - if( db->writeVdbeCnt>0 ){ - /* A new savepoint cannot be created if there are active write - ** statements (i.e. open read/write incremental blob handles). - */ - sqlite3SetString(&p->zErrMsg, db, "cannot open savepoint - " - "SQL statements in progress"); - rc = SQLITE_BUSY; - }else{ - u.ar.nName = sqlite3Strlen30(u.ar.zName); - - /* Create a new savepoint structure. */ - u.ar.pNew = sqlite3DbMallocRaw(db, sizeof(Savepoint)+u.ar.nName+1); - if( u.ar.pNew ){ - u.ar.pNew->zName = (char *)&u.ar.pNew[1]; - memcpy(u.ar.pNew->zName, u.ar.zName, u.ar.nName+1); + UNUSED_PARAMETER(p); +#endif - /* If there is no open transaction, then mark this as a special - ** "transaction savepoint". */ - if( db->autoCommit ){ - db->autoCommit = 0; - db->isTransactionSavepoint = 1; - }else{ - db->nSavepoint++; - } + /* Before doing anything else, call the xSync() callback for any + ** virtual module tables written in this transaction. This has to + ** be done before determining whether a master journal file is + ** required, as an xSync() callback may add an attached database + ** to the transaction. + */ + rc = sqlite3VtabSync(db, &p->zErrMsg); - /* Link the new savepoint into the database handle's list. */ - u.ar.pNew->pNext = db->pSavepoint; - db->pSavepoint = u.ar.pNew; - } + /* This loop determines (a) if the commit hook should be invoked and + ** (b) how many database files have open write transactions, not + ** including the temp database. (b) is important because if more than + ** one database file has an open write transaction, a master journal + ** file is required for an atomic commit. + */ + for(i=0; rc==SQLITE_OK && inDb; i++){ + Btree *pBt = db->aDb[i].pBt; + if( sqlite3BtreeIsInTrans(pBt) ){ + needXcommit = 1; + if( i!=1 ) nTrans++; + rc = sqlite3PagerExclusiveLock(sqlite3BtreePager(pBt)); } - }else{ - u.ar.iSavepoint = 0; + } + if( rc!=SQLITE_OK ){ + return rc; + } - /* Find the named savepoint. If there is no such savepoint, then an - ** an error is returned to the user. */ - for( - u.ar.pSavepoint = db->pSavepoint; - u.ar.pSavepoint && sqlite3StrICmp(u.ar.pSavepoint->zName, u.ar.zName); - u.ar.pSavepoint = u.ar.pSavepoint->pNext - ){ - u.ar.iSavepoint++; + /* If there are any write-transactions at all, invoke the commit hook */ + if( needXcommit && db->xCommitCallback ){ + rc = db->xCommitCallback(db->pCommitArg); + if( rc ){ + return SQLITE_CONSTRAINT; } - if( !u.ar.pSavepoint ){ - sqlite3SetString(&p->zErrMsg, db, "no such savepoint: %s", u.ar.zName); - rc = SQLITE_ERROR; - }else if( - db->writeVdbeCnt>0 || (u.ar.p1==SAVEPOINT_ROLLBACK && db->activeVdbeCnt>1) - ){ - /* It is not possible to release (commit) a savepoint if there are - ** active write statements. It is not possible to rollback a savepoint - ** if there are any active statements at all. - */ - sqlite3SetString(&p->zErrMsg, db, - "cannot %s savepoint - SQL statements in progress", - (u.ar.p1==SAVEPOINT_ROLLBACK ? "rollback": "release") - ); - rc = SQLITE_BUSY; - }else{ - - /* Determine whether or not this is a transaction savepoint. If so, - ** and this is a RELEASE command, then the current transaction - ** is committed. - */ - int isTransaction = u.ar.pSavepoint->pNext==0 && db->isTransactionSavepoint; - if( isTransaction && u.ar.p1==SAVEPOINT_RELEASE ){ - db->autoCommit = 1; - if( sqlite3VdbeHalt(p)==SQLITE_BUSY ){ - p->pc = pc; - db->autoCommit = 0; - p->rc = rc = SQLITE_BUSY; - goto vdbe_return; - } - db->isTransactionSavepoint = 0; - rc = p->rc; - }else{ - u.ar.iSavepoint = db->nSavepoint - u.ar.iSavepoint - 1; - for(u.ar.ii=0; u.ar.iinDb; u.ar.ii++){ - rc = sqlite3BtreeSavepoint(db->aDb[u.ar.ii].pBt, u.ar.p1, u.ar.iSavepoint); - if( rc!=SQLITE_OK ){ - goto abort_due_to_error; - } - } - if( u.ar.p1==SAVEPOINT_ROLLBACK && (db->flags&SQLITE_InternChanges)!=0 ){ - sqlite3ExpirePreparedStatements(db); - sqlite3ResetInternalSchema(db, 0); - } - } + } - /* Regardless of whether this is a RELEASE or ROLLBACK, destroy all - ** savepoints nested inside of the savepoint being operated on. */ - while( db->pSavepoint!=u.ar.pSavepoint ){ - u.ar.pTmp = db->pSavepoint; - db->pSavepoint = u.ar.pTmp->pNext; - sqlite3DbFree(db, u.ar.pTmp); - db->nSavepoint--; + /* The simple case - no more than one database file (not counting the + ** TEMP database) has a transaction active. There is no need for the + ** master-journal. + ** + ** If the return value of sqlite3BtreeGetFilename() is a zero length + ** string, it means the main database is :memory: or a temp file. In + ** that case we do not support atomic multi-file commits, so use the + ** simple case then too. + */ + if( 0==sqlite3Strlen30(sqlite3BtreeGetFilename(db->aDb[0].pBt)) + || nTrans<=1 + ){ + for(i=0; rc==SQLITE_OK && inDb; i++){ + Btree *pBt = db->aDb[i].pBt; + if( pBt ){ + rc = sqlite3BtreeCommitPhaseOne(pBt, 0); } + } - /* If it is a RELEASE, then destroy the savepoint being operated on too */ - if( u.ar.p1==SAVEPOINT_RELEASE ){ - assert( u.ar.pSavepoint==db->pSavepoint ); - db->pSavepoint = u.ar.pSavepoint->pNext; - sqlite3DbFree(db, u.ar.pSavepoint); - if( !isTransaction ){ - db->nSavepoint--; - } + /* Do the commit only if all databases successfully complete phase 1. + ** If one of the BtreeCommitPhaseOne() calls fails, this indicates an + ** IO error while deleting or truncating a journal file. It is unlikely, + ** but could happen. In this case abandon processing and return the error. + */ + for(i=0; rc==SQLITE_OK && inDb; i++){ + Btree *pBt = db->aDb[i].pBt; + if( pBt ){ + rc = sqlite3BtreeCommitPhaseTwo(pBt, 0); } } + if( rc==SQLITE_OK ){ + sqlite3VtabCommit(db); + } } - break; -} - -/* Opcode: AutoCommit P1 P2 * * * -** -** Set the database auto-commit flag to P1 (1 or 0). If P2 is true, roll -** back any currently active btree transactions. If there are any active -** VMs (apart from this one), then a ROLLBACK fails. A COMMIT fails if -** there are active writing VMs or active VMs that use shared cache. -** -** This instruction causes the VM to halt. -*/ -case OP_AutoCommit: { -#if 0 /* local variables moved into u.as */ - int desiredAutoCommit; - int iRollback; - int turnOnAC; -#endif /* local variables moved into u.as */ + /* The complex case - There is a multi-file write-transaction active. + ** This requires a master journal file to ensure the transaction is + ** committed atomicly. + */ +#ifndef SQLITE_OMIT_DISKIO + else{ + sqlite3_vfs *pVfs = db->pVfs; + int needSync = 0; + char *zMaster = 0; /* File-name for the master journal */ + char const *zMainFile = sqlite3BtreeGetFilename(db->aDb[0].pBt); + sqlite3_file *pMaster = 0; + i64 offset = 0; + int res; + int retryCount = 0; + int nMainFile; - u.as.desiredAutoCommit = pOp->p1; - u.as.iRollback = pOp->p2; - u.as.turnOnAC = u.as.desiredAutoCommit && !db->autoCommit; - assert( u.as.desiredAutoCommit==1 || u.as.desiredAutoCommit==0 ); - assert( u.as.desiredAutoCommit==1 || u.as.iRollback==0 ); - assert( db->activeVdbeCnt>0 ); /* At least this one VM is active */ + /* Select a master journal file name */ + nMainFile = sqlite3Strlen30(zMainFile); + zMaster = sqlite3MPrintf(db, "%s-mjXXXXXX9XXz", zMainFile); + if( zMaster==0 ) return SQLITE_NOMEM; + do { + u32 iRandom; + if( retryCount ){ + if( retryCount>100 ){ + sqlite3_log(SQLITE_FULL, "MJ delete: %s", zMaster); + sqlite3OsDelete(pVfs, zMaster, 0); + break; + }else if( retryCount==1 ){ + sqlite3_log(SQLITE_FULL, "MJ collide: %s", zMaster); + } + } + retryCount++; + sqlite3_randomness(sizeof(iRandom), &iRandom); + sqlite3_snprintf(13, &zMaster[nMainFile], "-mj%06X9%02X", + (iRandom>>8)&0xffffff, iRandom&0xff); + /* The antipenultimate character of the master journal name must + ** be "9" to avoid name collisions when using 8+3 filenames. */ + assert( zMaster[sqlite3Strlen30(zMaster)-3]=='9' ); + sqlite3FileSuffix3(zMainFile, zMaster); + rc = sqlite3OsAccess(pVfs, zMaster, SQLITE_ACCESS_EXISTS, &res); + }while( rc==SQLITE_OK && res ); + if( rc==SQLITE_OK ){ + /* Open the master journal. */ + rc = sqlite3OsOpenMalloc(pVfs, zMaster, &pMaster, + SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE| + SQLITE_OPEN_EXCLUSIVE|SQLITE_OPEN_MASTER_JOURNAL, 0 + ); + } + if( rc!=SQLITE_OK ){ + sqlite3DbFree(db, zMaster); + return rc; + } + + /* Write the name of each database file in the transaction into the new + ** master journal file. If an error occurs at this point close + ** and delete the master journal file. All the individual journal files + ** still have 'null' as the master journal pointer, so they will roll + ** back independently if a failure occurs. + */ + for(i=0; inDb; i++){ + Btree *pBt = db->aDb[i].pBt; + if( sqlite3BtreeIsInTrans(pBt) ){ + char const *zFile = sqlite3BtreeGetJournalname(pBt); + if( zFile==0 ){ + continue; /* Ignore TEMP and :memory: databases */ + } + assert( zFile[0]!=0 ); + if( !needSync && !sqlite3BtreeSyncDisabled(pBt) ){ + needSync = 1; + } + rc = sqlite3OsWrite(pMaster, zFile, sqlite3Strlen30(zFile)+1, offset); + offset += sqlite3Strlen30(zFile)+1; + if( rc!=SQLITE_OK ){ + sqlite3OsCloseFree(pMaster); + sqlite3OsDelete(pVfs, zMaster, 0); + sqlite3DbFree(db, zMaster); + return rc; + } + } + } - if( u.as.turnOnAC && u.as.iRollback && db->activeVdbeCnt>1 ){ - /* If this instruction implements a ROLLBACK and other VMs are - ** still running, and a transaction is active, return an error indicating - ** that the other VMs must complete first. + /* Sync the master journal file. If the IOCAP_SEQUENTIAL device + ** flag is set this is not required. */ - sqlite3SetString(&p->zErrMsg, db, "cannot rollback transaction - " - "SQL statements in progress"); - rc = SQLITE_BUSY; - }else if( u.as.turnOnAC && !u.as.iRollback && db->writeVdbeCnt>0 ){ - /* If this instruction implements a COMMIT and other VMs are writing - ** return an error indicating that the other VMs must complete first. + if( needSync + && 0==(sqlite3OsDeviceCharacteristics(pMaster)&SQLITE_IOCAP_SEQUENTIAL) + && SQLITE_OK!=(rc = sqlite3OsSync(pMaster, SQLITE_SYNC_NORMAL)) + ){ + sqlite3OsCloseFree(pMaster); + sqlite3OsDelete(pVfs, zMaster, 0); + sqlite3DbFree(db, zMaster); + return rc; + } + + /* Sync all the db files involved in the transaction. The same call + ** sets the master journal pointer in each individual journal. If + ** an error occurs here, do not delete the master journal file. + ** + ** If the error occurs during the first call to + ** sqlite3BtreeCommitPhaseOne(), then there is a chance that the + ** master journal file will be orphaned. But we cannot delete it, + ** in case the master journal file name was written into the journal + ** file before the failure occurred. */ - sqlite3SetString(&p->zErrMsg, db, "cannot commit transaction - " - "SQL statements in progress"); - rc = SQLITE_BUSY; - }else if( u.as.desiredAutoCommit!=db->autoCommit ){ - if( u.as.iRollback ){ - assert( u.as.desiredAutoCommit==1 ); - sqlite3RollbackAll(db); - db->autoCommit = 1; - }else{ - db->autoCommit = (u8)u.as.desiredAutoCommit; - if( sqlite3VdbeHalt(p)==SQLITE_BUSY ){ - p->pc = pc; - db->autoCommit = (u8)(1-u.as.desiredAutoCommit); - p->rc = rc = SQLITE_BUSY; - goto vdbe_return; + for(i=0; rc==SQLITE_OK && inDb; i++){ + Btree *pBt = db->aDb[i].pBt; + if( pBt ){ + rc = sqlite3BtreeCommitPhaseOne(pBt, zMaster); } } - assert( db->nStatement==0 ); - sqlite3CloseSavepoints(db); - if( p->rc==SQLITE_OK ){ - rc = SQLITE_DONE; - }else{ - rc = SQLITE_ERROR; + sqlite3OsCloseFree(pMaster); + assert( rc!=SQLITE_BUSY ); + if( rc!=SQLITE_OK ){ + sqlite3DbFree(db, zMaster); + return rc; } - goto vdbe_return; - }else{ - sqlite3SetString(&p->zErrMsg, db, - (!u.as.desiredAutoCommit)?"cannot start a transaction within a transaction":( - (u.as.iRollback)?"cannot rollback - no transaction is active": - "cannot commit - no transaction is active")); - rc = SQLITE_ERROR; + /* Delete the master journal file. This commits the transaction. After + ** doing this the directory is synced again before any individual + ** transaction files are deleted. + */ + rc = sqlite3OsDelete(pVfs, zMaster, 1); + sqlite3DbFree(db, zMaster); + zMaster = 0; + if( rc ){ + return rc; + } + + /* All files and directories have already been synced, so the following + ** calls to sqlite3BtreeCommitPhaseTwo() are only closing files and + ** deleting or truncating journals. If something goes wrong while + ** this is happening we don't really care. The integrity of the + ** transaction is already guaranteed, but some stray 'cold' journals + ** may be lying around. Returning an error code won't help matters. + */ + disable_simulated_io_errors(); + sqlite3BeginBenignMalloc(); + for(i=0; inDb; i++){ + Btree *pBt = db->aDb[i].pBt; + if( pBt ){ + sqlite3BtreeCommitPhaseTwo(pBt, 1); + } + } + sqlite3EndBenignMalloc(); + enable_simulated_io_errors(); + + sqlite3VtabCommit(db); } - break; +#endif + + return rc; } -/* Opcode: Transaction P1 P2 * * * -** -** Begin a transaction. The transaction ends when a Commit or Rollback -** opcode is encountered. Depending on the ON CONFLICT setting, the -** transaction might also be rolled back if an error is encountered. -** -** P1 is the index of the database file on which the transaction is -** started. Index 0 is the main database file and index 1 is the -** file used for temporary tables. Indices of 2 or more are used for -** attached databases. -** -** If P2 is non-zero, then a write-transaction is started. A RESERVED lock is -** obtained on the database file when a write-transaction is started. No -** other process can start another write transaction while this transaction is -** underway. Starting a write transaction also creates a rollback journal. A -** write transaction must be started before any changes can be made to the -** database. If P2 is 2 or greater then an EXCLUSIVE lock is also obtained -** on the file. +/* +** This routine checks that the sqlite3.activeVdbeCnt count variable +** matches the number of vdbe's in the list sqlite3.pVdbe that are +** currently active. An assertion fails if the two counts do not match. +** This is an internal self-check only - it is not an essential processing +** step. ** -** If P2 is zero, then a read-lock is obtained on the database file. +** This is a no-op if NDEBUG is defined. */ -case OP_Transaction: { -#if 0 /* local variables moved into u.at */ - Btree *pBt; -#endif /* local variables moved into u.at */ - - assert( pOp->p1>=0 && pOp->p1nDb ); - assert( (p->btreeMask & (1<p1))!=0 ); - u.at.pBt = db->aDb[pOp->p1].pBt; - - if( u.at.pBt ){ - rc = sqlite3BtreeBeginTrans(u.at.pBt, pOp->p2); - if( rc==SQLITE_BUSY ){ - p->pc = pc; - p->rc = rc = SQLITE_BUSY; - goto vdbe_return; - } - if( rc!=SQLITE_OK && rc!=SQLITE_READONLY /* && rc!=SQLITE_BUSY */ ){ - goto abort_due_to_error; +#ifndef NDEBUG +static void checkActiveVdbeCnt(sqlite3 *db){ + Vdbe *p; + int cnt = 0; + int nWrite = 0; + p = db->pVdbe; + while( p ){ + if( p->magic==VDBE_MAGIC_RUN && p->pc>=0 ){ + cnt++; + if( p->readOnly==0 ) nWrite++; } + p = p->pNext; } - break; + assert( cnt==db->activeVdbeCnt ); + assert( nWrite==db->writeVdbeCnt ); } +#else +#define checkActiveVdbeCnt(x) +#endif -/* Opcode: ReadCookie P1 P2 P3 * * -** -** Read cookie number P3 from database P1 and write it into register P2. -** P3==1 is the schema version. P3==2 is the database format. -** P3==3 is the recommended pager cache size, and so forth. P1==0 is -** the main database file and P1==1 is the database file used to store -** temporary tables. +/* +** If the Vdbe passed as the first argument opened a statement-transaction, +** close it now. Argument eOp must be either SAVEPOINT_ROLLBACK or +** SAVEPOINT_RELEASE. If it is SAVEPOINT_ROLLBACK, then the statement +** transaction is rolled back. If eOp is SAVEPOINT_RELEASE, then the +** statement transaction is commtted. ** -** There must be a read-lock on the database (either a transaction -** must be started or there must be an open cursor) before -** executing this instruction. +** If an IO error occurs, an SQLITE_IOERR_XXX error code is returned. +** Otherwise SQLITE_OK. */ -case OP_ReadCookie: { /* out2-prerelease */ -#if 0 /* local variables moved into u.au */ - int iMeta; - int iDb; - int iCookie; -#endif /* local variables moved into u.au */ +SQLITE_PRIVATE int sqlite3VdbeCloseStatement(Vdbe *p, int eOp){ + sqlite3 *const db = p->db; + int rc = SQLITE_OK; - u.au.iDb = pOp->p1; - u.au.iCookie = pOp->p3; - assert( pOp->p3=0 && u.au.iDbnDb ); - assert( db->aDb[u.au.iDb].pBt!=0 ); - assert( (p->btreeMask & (1<iStatement is greater than zero, then this Vdbe opened a + ** statement transaction that should be closed here. The only exception + ** is that an IO error may have occured, causing an emergency rollback. + ** In this case (db->nStatement==0), and there is nothing to do. + */ + if( db->nStatement && p->iStatement ){ + int i; + const int iSavepoint = p->iStatement-1; - rc = sqlite3BtreeGetMeta(db->aDb[u.au.iDb].pBt, u.au.iCookie, (u32 *)&u.au.iMeta); - pOut->u.i = u.au.iMeta; - MemSetTypeFlag(pOut, MEM_Int); - break; + assert( eOp==SAVEPOINT_ROLLBACK || eOp==SAVEPOINT_RELEASE); + assert( db->nStatement>0 ); + assert( p->iStatement==(db->nStatement+db->nSavepoint) ); + + for(i=0; inDb; i++){ + int rc2 = SQLITE_OK; + Btree *pBt = db->aDb[i].pBt; + if( pBt ){ + if( eOp==SAVEPOINT_ROLLBACK ){ + rc2 = sqlite3BtreeSavepoint(pBt, SAVEPOINT_ROLLBACK, iSavepoint); + } + if( rc2==SQLITE_OK ){ + rc2 = sqlite3BtreeSavepoint(pBt, SAVEPOINT_RELEASE, iSavepoint); + } + if( rc==SQLITE_OK ){ + rc = rc2; + } + } + } + db->nStatement--; + p->iStatement = 0; + + if( rc==SQLITE_OK ){ + if( eOp==SAVEPOINT_ROLLBACK ){ + rc = sqlite3VtabSavepoint(db, SAVEPOINT_ROLLBACK, iSavepoint); + } + if( rc==SQLITE_OK ){ + rc = sqlite3VtabSavepoint(db, SAVEPOINT_RELEASE, iSavepoint); + } + } + + /* If the statement transaction is being rolled back, also restore the + ** database handles deferred constraint counter to the value it had when + ** the statement transaction was opened. */ + if( eOp==SAVEPOINT_ROLLBACK ){ + db->nDeferredCons = p->nStmtDefCons; + } + } + return rc; } -/* Opcode: SetCookie P1 P2 P3 * * -** -** Write the content of register P3 (interpreted as an integer) -** into cookie number P2 of database P1. P2==1 is the schema version. -** P2==2 is the database format. P2==3 is the recommended pager cache -** size, and so forth. P1==0 is the main database file and P1==1 is the -** database file used to store temporary tables. +/* +** This function is called when a transaction opened by the database +** handle associated with the VM passed as an argument is about to be +** committed. If there are outstanding deferred foreign key constraint +** violations, return SQLITE_ERROR. Otherwise, SQLITE_OK. ** -** A transaction must be started before executing this opcode. +** If there are outstanding FK violations and this function returns +** SQLITE_ERROR, set the result of the VM to SQLITE_CONSTRAINT and write +** an error message to it. Then return SQLITE_ERROR. */ -case OP_SetCookie: { /* in3 */ -#if 0 /* local variables moved into u.av */ - Db *pDb; -#endif /* local variables moved into u.av */ - assert( pOp->p2p1>=0 && pOp->p1nDb ); - assert( (p->btreeMask & (1<p1))!=0 ); - u.av.pDb = &db->aDb[pOp->p1]; - assert( u.av.pDb->pBt!=0 ); - sqlite3VdbeMemIntegerify(pIn3); - /* See note about index shifting on OP_ReadCookie */ - rc = sqlite3BtreeUpdateMeta(u.av.pDb->pBt, pOp->p2, (int)pIn3->u.i); - if( pOp->p2==BTREE_SCHEMA_VERSION ){ - /* When the schema cookie changes, record the new cookie internally */ - u.av.pDb->pSchema->schema_cookie = (int)pIn3->u.i; - db->flags |= SQLITE_InternChanges; - }else if( pOp->p2==BTREE_FILE_FORMAT ){ - /* Record changes in the file format */ - u.av.pDb->pSchema->file_format = (u8)pIn3->u.i; - } - if( pOp->p1==1 ){ - /* Invalidate all prepared statements whenever the TEMP database - ** schema is changed. Ticket #1644 */ - sqlite3ExpirePreparedStatements(db); +#ifndef SQLITE_OMIT_FOREIGN_KEY +SQLITE_PRIVATE int sqlite3VdbeCheckFk(Vdbe *p, int deferred){ + sqlite3 *db = p->db; + if( (deferred && db->nDeferredCons>0) || (!deferred && p->nFkConstraint>0) ){ + p->rc = SQLITE_CONSTRAINT; + p->errorAction = OE_Abort; + sqlite3SetString(&p->zErrMsg, db, "foreign key constraint failed"); + return SQLITE_ERROR; } - break; + return SQLITE_OK; } +#endif -/* Opcode: VerifyCookie P1 P2 * -** -** Check the value of global database parameter number 0 (the -** schema version) and make sure it is equal to P2. -** P1 is the database number which is 0 for the main database file -** and 1 for the file holding temporary tables and some higher number -** for auxiliary databases. +/* +** This routine is called the when a VDBE tries to halt. If the VDBE +** has made changes and is in autocommit mode, then commit those +** changes. If a rollback is needed, then do the rollback. ** -** The cookie changes its value whenever the database schema changes. -** This operation is used to detect when that the cookie has changed -** and that the current process needs to reread the schema. +** This routine is the only way to move the state of a VM from +** SQLITE_MAGIC_RUN to SQLITE_MAGIC_HALT. It is harmless to +** call this on a VM that is in the SQLITE_MAGIC_HALT state. ** -** Either a transaction needs to have been started or an OP_Open needs -** to be executed (to establish a read lock) before this opcode is -** invoked. +** Return an error code. If the commit could not complete because of +** lock contention, return SQLITE_BUSY. If SQLITE_BUSY is returned, it +** means the close did not happen and needs to be repeated. */ -case OP_VerifyCookie: { -#if 0 /* local variables moved into u.aw */ - int iMeta; - Btree *pBt; -#endif /* local variables moved into u.aw */ - assert( pOp->p1>=0 && pOp->p1nDb ); - assert( (p->btreeMask & (1<p1))!=0 ); - u.aw.pBt = db->aDb[pOp->p1].pBt; - if( u.aw.pBt ){ - rc = sqlite3BtreeGetMeta(u.aw.pBt, BTREE_SCHEMA_VERSION, (u32 *)&u.aw.iMeta); - }else{ - rc = SQLITE_OK; - u.aw.iMeta = 0; +SQLITE_PRIVATE int sqlite3VdbeHalt(Vdbe *p){ + int rc; /* Used to store transient return codes */ + sqlite3 *db = p->db; + + /* This function contains the logic that determines if a statement or + ** transaction will be committed or rolled back as a result of the + ** execution of this virtual machine. + ** + ** If any of the following errors occur: + ** + ** SQLITE_NOMEM + ** SQLITE_IOERR + ** SQLITE_FULL + ** SQLITE_INTERRUPT + ** + ** Then the internal cache might have been left in an inconsistent + ** state. We need to rollback the statement transaction, if there is + ** one, or the complete transaction if there is no statement transaction. + */ + + if( p->db->mallocFailed ){ + p->rc = SQLITE_NOMEM; } - if( rc==SQLITE_OK && u.aw.iMeta!=pOp->p2 ){ - sqlite3DbFree(db, p->zErrMsg); - p->zErrMsg = sqlite3DbStrDup(db, "database schema has changed"); - /* If the schema-cookie from the database file matches the cookie - ** stored with the in-memory representation of the schema, do - ** not reload the schema from the database file. + if( p->aOnceFlag ) memset(p->aOnceFlag, 0, p->nOnceFlag); + closeAllCursors(p); + if( p->magic!=VDBE_MAGIC_RUN ){ + return SQLITE_OK; + } + checkActiveVdbeCnt(db); + + /* No commit or rollback needed if the program never started */ + if( p->pc>=0 ){ + int mrc; /* Primary error code from p->rc */ + int eStatementOp = 0; + int isSpecialError; /* Set to true if a 'special' error */ + + /* Lock all btrees used by the statement */ + sqlite3VdbeEnter(p); + + /* Check for one of the special errors */ + mrc = p->rc & 0xff; + assert( p->rc!=SQLITE_IOERR_BLOCKED ); /* This error no longer exists */ + isSpecialError = mrc==SQLITE_NOMEM || mrc==SQLITE_IOERR + || mrc==SQLITE_INTERRUPT || mrc==SQLITE_FULL; + if( isSpecialError ){ + /* If the query was read-only and the error code is SQLITE_INTERRUPT, + ** no rollback is necessary. Otherwise, at least a savepoint + ** transaction must be rolled back to restore the database to a + ** consistent state. + ** + ** Even if the statement is read-only, it is important to perform + ** a statement or transaction rollback operation. If the error + ** occured while writing to the journal, sub-journal or database + ** file as part of an effort to free up cache space (see function + ** pagerStress() in pager.c), the rollback is required to restore + ** the pager to a consistent state. + */ + if( !p->readOnly || mrc!=SQLITE_INTERRUPT ){ + if( (mrc==SQLITE_NOMEM || mrc==SQLITE_FULL) && p->usesStmtJournal ){ + eStatementOp = SAVEPOINT_ROLLBACK; + }else{ + /* We are forced to roll back the active transaction. Before doing + ** so, abort any other statements this handle currently has active. + */ + sqlite3RollbackAll(db, SQLITE_ABORT_ROLLBACK); + sqlite3CloseSavepoints(db); + db->autoCommit = 1; + } + } + } + + /* Check for immediate foreign key violations. */ + if( p->rc==SQLITE_OK ){ + sqlite3VdbeCheckFk(p, 0); + } + + /* If the auto-commit flag is set and this is the only active writer + ** VM, then we do either a commit or rollback of the current transaction. ** - ** If virtual-tables are in use, this is not just an optimization. - ** Often, v-tables store their data in other SQLite tables, which - ** are queried from within xNext() and other v-table methods using - ** prepared queries. If such a query is out-of-date, we do not want to - ** discard the database schema, as the user code implementing the - ** v-table would have to be ready for the sqlite3_vtab structure itself - ** to be invalidated whenever sqlite3_step() is called from within - ** a v-table method. + ** Note: This block also runs if one of the special errors handled + ** above has occurred. */ - if( db->aDb[pOp->p1].pSchema->schema_cookie!=u.aw.iMeta ){ - sqlite3ResetInternalSchema(db, pOp->p1); + if( !sqlite3VtabInSync(db) + && db->autoCommit + && db->writeVdbeCnt==(p->readOnly==0) + ){ + if( p->rc==SQLITE_OK || (p->errorAction==OE_Fail && !isSpecialError) ){ + rc = sqlite3VdbeCheckFk(p, 1); + if( rc!=SQLITE_OK ){ + if( NEVER(p->readOnly) ){ + sqlite3VdbeLeave(p); + return SQLITE_ERROR; + } + rc = SQLITE_CONSTRAINT; + }else{ + /* The auto-commit flag is true, the vdbe program was successful + ** or hit an 'OR FAIL' constraint and there are no deferred foreign + ** key constraints to hold up the transaction. This means a commit + ** is required. */ + rc = vdbeCommit(db, p); + } + if( rc==SQLITE_BUSY && p->readOnly ){ + sqlite3VdbeLeave(p); + return SQLITE_BUSY; + }else if( rc!=SQLITE_OK ){ + p->rc = rc; + sqlite3RollbackAll(db, SQLITE_OK); + }else{ + db->nDeferredCons = 0; + sqlite3CommitInternalChanges(db); + } + }else{ + sqlite3RollbackAll(db, SQLITE_OK); + } + db->nStatement = 0; + }else if( eStatementOp==0 ){ + if( p->rc==SQLITE_OK || p->errorAction==OE_Fail ){ + eStatementOp = SAVEPOINT_RELEASE; + }else if( p->errorAction==OE_Abort ){ + eStatementOp = SAVEPOINT_ROLLBACK; + }else{ + sqlite3RollbackAll(db, SQLITE_ABORT_ROLLBACK); + sqlite3CloseSavepoints(db); + db->autoCommit = 1; + } + } + + /* If eStatementOp is non-zero, then a statement transaction needs to + ** be committed or rolled back. Call sqlite3VdbeCloseStatement() to + ** do so. If this operation returns an error, and the current statement + ** error code is SQLITE_OK or SQLITE_CONSTRAINT, then promote the + ** current statement error code. + */ + if( eStatementOp ){ + rc = sqlite3VdbeCloseStatement(p, eStatementOp); + if( rc ){ + if( p->rc==SQLITE_OK || p->rc==SQLITE_CONSTRAINT ){ + p->rc = rc; + sqlite3DbFree(db, p->zErrMsg); + p->zErrMsg = 0; + } + sqlite3RollbackAll(db, SQLITE_ABORT_ROLLBACK); + sqlite3CloseSavepoints(db); + db->autoCommit = 1; + } + } + + /* If this was an INSERT, UPDATE or DELETE and no statement transaction + ** has been rolled back, update the database connection change-counter. + */ + if( p->changeCntOn ){ + if( eStatementOp!=SAVEPOINT_ROLLBACK ){ + sqlite3VdbeSetChanges(db, p->nChange); + }else{ + sqlite3VdbeSetChanges(db, 0); + } + p->nChange = 0; } - sqlite3ExpirePreparedStatements(db); - rc = SQLITE_SCHEMA; + /* Release the locks */ + sqlite3VdbeLeave(p); } - break; -} -/* Opcode: OpenRead P1 P2 P3 P4 P5 -** -** Open a read-only cursor for the database table whose root page is -** P2 in a database file. The database file is determined by P3. -** P3==0 means the main database, P3==1 means the database used for -** temporary tables, and P3>1 means used the corresponding attached -** database. Give the new cursor an identifier of P1. The P1 -** values need not be contiguous but all P1 values should be small integers. -** It is an error for P1 to be negative. -** -** If P5!=0 then use the content of register P2 as the root page, not -** the value of P2 itself. -** -** There will be a read lock on the database whenever there is an -** open cursor. If the database was unlocked prior to this instruction -** then a read lock is acquired as part of this instruction. A read -** lock allows other processes to read the database but prohibits -** any other process from modifying the database. The read lock is -** released when all cursors are closed. If this instruction attempts -** to get a read lock but fails, the script terminates with an -** SQLITE_BUSY error code. -** -** The P4 value may be either an integer (P4_INT32) or a pointer to -** a KeyInfo structure (P4_KEYINFO). If it is a pointer to a KeyInfo -** structure, then said structure defines the content and collating -** sequence of the index being opened. Otherwise, if P4 is an integer -** value, it is set to the number of columns in the table. -** -** See also OpenWrite. -*/ -/* Opcode: OpenWrite P1 P2 P3 P4 P5 -** -** Open a read/write cursor named P1 on the table or index whose root -** page is P2. Or if P5!=0 use the content of register P2 to find the -** root page. -** -** The P4 value may be either an integer (P4_INT32) or a pointer to -** a KeyInfo structure (P4_KEYINFO). If it is a pointer to a KeyInfo -** structure, then said structure defines the content and collating -** sequence of the index being opened. Otherwise, if P4 is an integer -** value, it is set to the number of columns in the table, or to the -** largest index of any column of the table that is actually used. -** -** This instruction works just like OpenRead except that it opens the cursor -** in read/write mode. For a given table, there can be one or more read-only -** cursors or a single read/write cursor but not both. -** -** See also OpenRead. -*/ -case OP_OpenRead: -case OP_OpenWrite: { -#if 0 /* local variables moved into u.ax */ - int nField; - KeyInfo *pKeyInfo; - int p2; - int iDb; - int wrFlag; - Btree *pX; - VdbeCursor *pCur; - Db *pDb; - int flags; -#endif /* local variables moved into u.ax */ - - u.ax.nField = 0; - u.ax.pKeyInfo = 0; - u.ax.p2 = pOp->p2; - u.ax.iDb = pOp->p3; - assert( u.ax.iDb>=0 && u.ax.iDbnDb ); - assert( (p->btreeMask & (1<aDb[u.ax.iDb]; - u.ax.pX = u.ax.pDb->pBt; - assert( u.ax.pX!=0 ); - if( pOp->opcode==OP_OpenWrite ){ - u.ax.wrFlag = 1; - if( u.ax.pDb->pSchema->file_format < p->minWriteFileFormat ){ - p->minWriteFileFormat = u.ax.pDb->pSchema->file_format; - } - }else{ - u.ax.wrFlag = 0; - } - if( pOp->p5 ){ - assert( u.ax.p2>0 ); - assert( u.ax.p2<=p->nMem ); - pIn2 = &p->aMem[u.ax.p2]; - sqlite3VdbeMemIntegerify(pIn2); - u.ax.p2 = (int)pIn2->u.i; - /* The u.ax.p2 value always comes from a prior OP_CreateTable opcode and - ** that opcode will always set the u.ax.p2 value to 2 or more or else fail. - ** If there were a failure, the prepared statement would have halted - ** before reaching this instruction. */ - if( NEVER(u.ax.p2<2) ) { - rc = SQLITE_CORRUPT_BKPT; - goto abort_due_to_error; + /* We have successfully halted and closed the VM. Record this fact. */ + if( p->pc>=0 ){ + db->activeVdbeCnt--; + if( !p->readOnly ){ + db->writeVdbeCnt--; } + assert( db->activeVdbeCnt>=db->writeVdbeCnt ); } - if( pOp->p4type==P4_KEYINFO ){ - u.ax.pKeyInfo = pOp->p4.pKeyInfo; - u.ax.pKeyInfo->enc = ENC(p->db); - u.ax.nField = u.ax.pKeyInfo->nField+1; - }else if( pOp->p4type==P4_INT32 ){ - u.ax.nField = pOp->p4.i; + p->magic = VDBE_MAGIC_HALT; + checkActiveVdbeCnt(db); + if( p->db->mallocFailed ){ + p->rc = SQLITE_NOMEM; } - assert( pOp->p1>=0 ); - u.ax.pCur = allocateCursor(p, pOp->p1, u.ax.nField, u.ax.iDb, 1); - if( u.ax.pCur==0 ) goto no_mem; - u.ax.pCur->nullRow = 1; - rc = sqlite3BtreeCursor(u.ax.pX, u.ax.p2, u.ax.wrFlag, u.ax.pKeyInfo, u.ax.pCur->pCursor); - u.ax.pCur->pKeyInfo = u.ax.pKeyInfo; - switch( rc ){ - case SQLITE_OK: { - u.ax.flags = sqlite3BtreeFlags(u.ax.pCur->pCursor); - - /* Sanity checking. Only the lower four bits of the u.ax.flags byte should - ** be used. Bit 3 (mask 0x08) is unpredictable. The lower 3 bits - ** (mask 0x07) should be either 5 (intkey+leafdata for tables) or - ** 2 (zerodata for indices). If these conditions are not met it can - ** only mean that we are dealing with a corrupt database file. - ** Note: All of the above is checked already in sqlite3BtreeCursor(). - */ - assert( (u.ax.flags & 0xf0)==0 ); - assert( (u.ax.flags & 0x07)==5 || (u.ax.flags & 0x07)==2 ); - - u.ax.pCur->isTable = (u.ax.flags & BTREE_INTKEY)!=0 ?1:0; - u.ax.pCur->isIndex = (u.ax.flags & BTREE_ZERODATA)!=0 ?1:0; - /* If P4==0 it means we are expected to open a table. If P4!=0 then - ** we expect to be opening an index. If this is not what happened, - ** then the database is corrupt - */ - if( (u.ax.pCur->isTable && pOp->p4type==P4_KEYINFO) - || (u.ax.pCur->isIndex && pOp->p4type!=P4_KEYINFO) ){ - rc = SQLITE_CORRUPT_BKPT; - goto abort_due_to_error; - } - break; - } - case SQLITE_EMPTY: { - u.ax.pCur->isTable = pOp->p4type!=P4_KEYINFO; - u.ax.pCur->isIndex = !u.ax.pCur->isTable; - u.ax.pCur->pCursor = 0; - rc = SQLITE_OK; - break; - } - default: { - assert( rc!=SQLITE_BUSY ); /* Busy conditions detected earlier */ - goto abort_due_to_error; - } + /* If the auto-commit flag is set to true, then any locks that were held + ** by connection db have now been released. Call sqlite3ConnectionUnlocked() + ** to invoke any required unlock-notify callbacks. + */ + if( db->autoCommit ){ + sqlite3ConnectionUnlocked(db); } - break; -} - -/* Opcode: OpenEphemeral P1 P2 * P4 * -** -** Open a new cursor P1 to a transient table. -** The cursor is always opened read/write even if -** the main database is read-only. The transient or virtual -** table is deleted automatically when the cursor is closed. -** -** P2 is the number of columns in the virtual table. -** The cursor points to a BTree table if P4==0 and to a BTree index -** if P4 is not 0. If P4 is not NULL, it points to a KeyInfo structure -** that defines the format of keys in the index. -** -** This opcode was once called OpenTemp. But that created -** confusion because the term "temp table", might refer either -** to a TEMP table at the SQL level, or to a table opened by -** this opcode. Then this opcode was call OpenVirtual. But -** that created confusion with the whole virtual-table idea. -*/ -case OP_OpenEphemeral: { -#if 0 /* local variables moved into u.ay */ - VdbeCursor *pCx; -#endif /* local variables moved into u.ay */ - static const int openFlags = - SQLITE_OPEN_READWRITE | - SQLITE_OPEN_CREATE | - SQLITE_OPEN_EXCLUSIVE | - SQLITE_OPEN_DELETEONCLOSE | - SQLITE_OPEN_TRANSIENT_DB; - assert( pOp->p1>=0 ); - u.ay.pCx = allocateCursor(p, pOp->p1, pOp->p2, -1, 1); - if( u.ay.pCx==0 ) goto no_mem; - u.ay.pCx->nullRow = 1; - rc = sqlite3BtreeFactory(db, 0, 1, SQLITE_DEFAULT_TEMP_CACHE_SIZE, openFlags, - &u.ay.pCx->pBt); - if( rc==SQLITE_OK ){ - rc = sqlite3BtreeBeginTrans(u.ay.pCx->pBt, 1); - } - if( rc==SQLITE_OK ){ - /* If a transient index is required, create it by calling - ** sqlite3BtreeCreateTable() with the BTREE_ZERODATA flag before - ** opening it. If a transient table is required, just use the - ** automatically created table with root-page 1 (an INTKEY table). - */ - if( pOp->p4.pKeyInfo ){ - int pgno; - assert( pOp->p4type==P4_KEYINFO ); - rc = sqlite3BtreeCreateTable(u.ay.pCx->pBt, &pgno, BTREE_ZERODATA); - if( rc==SQLITE_OK ){ - assert( pgno==MASTER_ROOT+1 ); - rc = sqlite3BtreeCursor(u.ay.pCx->pBt, pgno, 1, - (KeyInfo*)pOp->p4.z, u.ay.pCx->pCursor); - u.ay.pCx->pKeyInfo = pOp->p4.pKeyInfo; - u.ay.pCx->pKeyInfo->enc = ENC(p->db); - } - u.ay.pCx->isTable = 0; - }else{ - rc = sqlite3BtreeCursor(u.ay.pCx->pBt, MASTER_ROOT, 1, 0, u.ay.pCx->pCursor); - u.ay.pCx->isTable = 1; - } - } - u.ay.pCx->isIndex = !u.ay.pCx->isTable; - break; + assert( db->activeVdbeCnt>0 || db->autoCommit==0 || db->nStatement==0 ); + return (p->rc==SQLITE_BUSY ? SQLITE_BUSY : SQLITE_OK); } -/* Opcode: OpenPseudo P1 P2 P3 * * -** -** Open a new cursor that points to a fake table that contains a single -** row of data. Any attempt to write a second row of data causes the -** first row to be deleted. All data is deleted when the cursor is -** closed. -** -** A pseudo-table created by this opcode is useful for holding the -** NEW or OLD tables in a trigger. Also used to hold the a single -** row output from the sorter so that the row can be decomposed into -** individual columns using the OP_Column opcode. -** -** When OP_Insert is executed to insert a row in to the pseudo table, -** the pseudo-table cursor may or may not make it's own copy of the -** original row data. If P2 is 0, then the pseudo-table will copy the -** original row data. Otherwise, a pointer to the original memory cell -** is stored. In this case, the vdbe program must ensure that the -** memory cell containing the row data is not overwritten until the -** pseudo table is closed (or a new row is inserted into it). -** -** P3 is the number of fields in the records that will be stored by -** the pseudo-table. -*/ -case OP_OpenPseudo: { -#if 0 /* local variables moved into u.az */ - VdbeCursor *pCx; -#endif /* local variables moved into u.az */ - assert( pOp->p1>=0 ); - u.az.pCx = allocateCursor(p, pOp->p1, pOp->p3, -1, 0); - if( u.az.pCx==0 ) goto no_mem; - u.az.pCx->nullRow = 1; - u.az.pCx->pseudoTable = 1; - u.az.pCx->ephemPseudoTable = (u8)pOp->p2; - u.az.pCx->isTable = 1; - u.az.pCx->isIndex = 0; - break; +/* +** Each VDBE holds the result of the most recent sqlite3_step() call +** in p->rc. This routine sets that result back to SQLITE_OK. +*/ +SQLITE_PRIVATE void sqlite3VdbeResetStepResult(Vdbe *p){ + p->rc = SQLITE_OK; } -/* Opcode: Close P1 * * * * +/* +** Copy the error code and error message belonging to the VDBE passed +** as the first argument to its database handle (so that they will be +** returned by calls to sqlite3_errcode() and sqlite3_errmsg()). ** -** Close a cursor previously opened as P1. If P1 is not -** currently open, this instruction is a no-op. +** This function does not clear the VDBE error code or message, just +** copies them to the database handle. */ -case OP_Close: { - assert( pOp->p1>=0 && pOp->p1nCursor ); - sqlite3VdbeFreeCursor(p, p->apCsr[pOp->p1]); - p->apCsr[pOp->p1] = 0; - break; +SQLITE_PRIVATE int sqlite3VdbeTransferError(Vdbe *p){ + sqlite3 *db = p->db; + int rc = p->rc; + if( p->zErrMsg ){ + u8 mallocFailed = db->mallocFailed; + sqlite3BeginBenignMalloc(); + sqlite3ValueSetStr(db->pErr, -1, p->zErrMsg, SQLITE_UTF8, SQLITE_TRANSIENT); + sqlite3EndBenignMalloc(); + db->mallocFailed = mallocFailed; + db->errCode = rc; + }else{ + sqlite3Error(db, rc, 0); + } + return rc; } -/* Opcode: SeekGe P1 P2 P3 P4 * -** -** If cursor P1 refers to an SQL table (B-Tree that uses integer keys), -** use the value in register P3 as the key. If cursor P1 refers -** to an SQL index, then P3 is the first in an array of P4 registers -** that are used as an unpacked index key. -** -** Reposition cursor P1 so that it points to the smallest entry that -** is greater than or equal to the key value. If there are no records -** greater than or equal to the key and P2 is not zero, then jump to P2. -** -** See also: Found, NotFound, Distinct, SeekLt, SeekGt, SeekLe -*/ -/* Opcode: SeekGt P1 P2 P3 P4 * -** -** If cursor P1 refers to an SQL table (B-Tree that uses integer keys), -** use the value in register P3 as a key. If cursor P1 refers -** to an SQL index, then P3 is the first in an array of P4 registers -** that are used as an unpacked index key. -** -** Reposition cursor P1 so that it points to the smallest entry that -** is greater than the key value. If there are no records greater than -** the key and P2 is not zero, then jump to P2. -** -** See also: Found, NotFound, Distinct, SeekLt, SeekGe, SeekLe -*/ -/* Opcode: SeekLt P1 P2 P3 P4 * -** -** If cursor P1 refers to an SQL table (B-Tree that uses integer keys), -** use the value in register P3 as a key. If cursor P1 refers -** to an SQL index, then P3 is the first in an array of P4 registers -** that are used as an unpacked index key. -** -** Reposition cursor P1 so that it points to the largest entry that -** is less than the key value. If there are no records less than -** the key and P2 is not zero, then jump to P2. -** -** See also: Found, NotFound, Distinct, SeekGt, SeekGe, SeekLe -*/ -/* Opcode: SeekLe P1 P2 P3 P4 * -** -** If cursor P1 refers to an SQL table (B-Tree that uses integer keys), -** use the value in register P3 as a key. If cursor P1 refers -** to an SQL index, then P3 is the first in an array of P4 registers -** that are used as an unpacked index key. +/* +** Clean up a VDBE after execution but do not delete the VDBE just yet. +** Write any error messages into *pzErrMsg. Return the result code. ** -** Reposition cursor P1 so that it points to the largest entry that -** is less than or equal to the key value. If there are no records -** less than or equal to the key and P2 is not zero, then jump to P2. +** After this routine is run, the VDBE should be ready to be executed +** again. ** -** See also: Found, NotFound, Distinct, SeekGt, SeekGe, SeekLt +** To look at it another way, this routine resets the state of the +** virtual machine from VDBE_MAGIC_RUN or VDBE_MAGIC_HALT back to +** VDBE_MAGIC_INIT. */ -case OP_SeekLt: /* jump, in3 */ -case OP_SeekLe: /* jump, in3 */ -case OP_SeekGe: /* jump, in3 */ -case OP_SeekGt: { /* jump, in3 */ -#if 0 /* local variables moved into u.ba */ - int res; - int oc; - VdbeCursor *pC; - UnpackedRecord r; - int nField; - i64 iKey; /* The rowid we are to seek to */ -#endif /* local variables moved into u.ba */ +SQLITE_PRIVATE int sqlite3VdbeReset(Vdbe *p){ + sqlite3 *db; + db = p->db; - assert( pOp->p1>=0 && pOp->p1nCursor ); - assert( pOp->p2!=0 ); - u.ba.pC = p->apCsr[pOp->p1]; - assert( u.ba.pC!=0 ); - if( u.ba.pC->pCursor!=0 ){ - u.ba.oc = pOp->opcode; - u.ba.pC->nullRow = 0; - if( u.ba.pC->isTable ){ - /* The input value in P3 might be of any type: integer, real, string, - ** blob, or NULL. But it needs to be an integer before we can do - ** the seek, so covert it. */ - applyNumericAffinity(pIn3); - u.ba.iKey = sqlite3VdbeIntValue(pIn3); - u.ba.pC->rowidIsValid = 0; + /* If the VM did not run to completion or if it encountered an + ** error, then it might not have been halted properly. So halt + ** it now. + */ + sqlite3VdbeHalt(p); - /* If the P3 value could not be converted into an integer without - ** loss of information, then special processing is required... */ - if( (pIn3->flags & MEM_Int)==0 ){ - if( (pIn3->flags & MEM_Real)==0 ){ - /* If the P3 value cannot be converted into any kind of a number, - ** then the seek is not possible, so jump to P2 */ - pc = pOp->p2 - 1; - break; - } - /* If we reach this point, then the P3 value must be a floating - ** point number. */ - assert( (pIn3->flags & MEM_Real)!=0 ); + /* If the VDBE has be run even partially, then transfer the error code + ** and error message from the VDBE into the main database structure. But + ** if the VDBE has just been set to run but has not actually executed any + ** instructions yet, leave the main database error information unchanged. + */ + if( p->pc>=0 ){ + sqlite3VdbeTransferError(p); + sqlite3DbFree(db, p->zErrMsg); + p->zErrMsg = 0; + if( p->runOnlyOnce ) p->expired = 1; + }else if( p->rc && p->expired ){ + /* The expired flag was set on the VDBE before the first call + ** to sqlite3_step(). For consistency (since sqlite3_step() was + ** called), set the database error in this case as well. + */ + sqlite3Error(db, p->rc, 0); + sqlite3ValueSetStr(db->pErr, -1, p->zErrMsg, SQLITE_UTF8, SQLITE_TRANSIENT); + sqlite3DbFree(db, p->zErrMsg); + p->zErrMsg = 0; + } - if( u.ba.iKey==SMALLEST_INT64 && (pIn3->r<(double)u.ba.iKey || pIn3->r>0) ){ - /* The P3 value is too large in magnitude to be expressed as an - ** integer. */ - u.ba.res = 1; - if( pIn3->r<0 ){ - if( u.ba.oc==OP_SeekGt || u.ba.oc==OP_SeekGe ){ - rc = sqlite3BtreeFirst(u.ba.pC->pCursor, &u.ba.res); - if( rc!=SQLITE_OK ) goto abort_due_to_error; - } - }else{ - if( u.ba.oc==OP_SeekLt || u.ba.oc==OP_SeekLe ){ - rc = sqlite3BtreeLast(u.ba.pC->pCursor, &u.ba.res); - if( rc!=SQLITE_OK ) goto abort_due_to_error; - } - } - if( u.ba.res ){ - pc = pOp->p2 - 1; - } - break; - }else if( u.ba.oc==OP_SeekLt || u.ba.oc==OP_SeekGe ){ - /* Use the ceiling() function to convert real->int */ - if( pIn3->r > (double)u.ba.iKey ) u.ba.iKey++; - }else{ - /* Use the floor() function to convert real->int */ - assert( u.ba.oc==OP_SeekLe || u.ba.oc==OP_SeekGt ); - if( pIn3->r < (double)u.ba.iKey ) u.ba.iKey--; - } - } - rc = sqlite3BtreeMovetoUnpacked(u.ba.pC->pCursor, 0, (u64)u.ba.iKey, 0, &u.ba.res); - if( rc!=SQLITE_OK ){ - goto abort_due_to_error; - } - if( u.ba.res==0 ){ - u.ba.pC->rowidIsValid = 1; - u.ba.pC->lastRowid = u.ba.iKey; - } - }else{ - u.ba.nField = pOp->p4.i; - assert( pOp->p4type==P4_INT32 ); - assert( u.ba.nField>0 ); - u.ba.r.pKeyInfo = u.ba.pC->pKeyInfo; - u.ba.r.nField = (u16)u.ba.nField; - if( u.ba.oc==OP_SeekGt || u.ba.oc==OP_SeekLe ){ - u.ba.r.flags = UNPACKED_INCRKEY; - }else{ - u.ba.r.flags = 0; + /* Reclaim all memory used by the VDBE + */ + Cleanup(p); + + /* Save profiling information from this VDBE run. + */ +#ifdef VDBE_PROFILE + { + FILE *out = fopen("vdbe_profile.out", "a"); + if( out ){ + int i; + fprintf(out, "---- "); + for(i=0; inOp; i++){ + fprintf(out, "%02x", p->aOp[i].opcode); } - u.ba.r.aMem = &p->aMem[pOp->p3]; - rc = sqlite3BtreeMovetoUnpacked(u.ba.pC->pCursor, &u.ba.r, 0, 0, &u.ba.res); - if( rc!=SQLITE_OK ){ - goto abort_due_to_error; + fprintf(out, "\n"); + for(i=0; inOp; i++){ + fprintf(out, "%6d %10lld %8lld ", + p->aOp[i].cnt, + p->aOp[i].cycles, + p->aOp[i].cnt>0 ? p->aOp[i].cycles/p->aOp[i].cnt : 0 + ); + sqlite3VdbePrintOp(out, i, &p->aOp[i]); } - u.ba.pC->rowidIsValid = 0; + fclose(out); } - u.ba.pC->deferredMoveto = 0; - u.ba.pC->cacheStatus = CACHE_STALE; -#ifdef SQLITE_TEST - sqlite3_search_count++; + } #endif - if( u.ba.oc==OP_SeekGe || u.ba.oc==OP_SeekGt ){ - if( u.ba.res<0 || (u.ba.res==0 && u.ba.oc==OP_SeekGt) ){ - rc = sqlite3BtreeNext(u.ba.pC->pCursor, &u.ba.res); - if( rc!=SQLITE_OK ) goto abort_due_to_error; - u.ba.pC->rowidIsValid = 0; - }else{ - u.ba.res = 0; - } - }else{ - assert( u.ba.oc==OP_SeekLt || u.ba.oc==OP_SeekLe ); - if( u.ba.res>0 || (u.ba.res==0 && u.ba.oc==OP_SeekLt) ){ - rc = sqlite3BtreePrevious(u.ba.pC->pCursor, &u.ba.res); - if( rc!=SQLITE_OK ) goto abort_due_to_error; - u.ba.pC->rowidIsValid = 0; - }else{ - /* u.ba.res might be negative because the table is empty. Check to - ** see if this is the case. - */ - u.ba.res = sqlite3BtreeEof(u.ba.pC->pCursor); + p->magic = VDBE_MAGIC_INIT; + return p->rc & db->errMask; +} + +/* +** Clean up and delete a VDBE after execution. Return an integer which is +** the result code. Write any error message text into *pzErrMsg. +*/ +SQLITE_PRIVATE int sqlite3VdbeFinalize(Vdbe *p){ + int rc = SQLITE_OK; + if( p->magic==VDBE_MAGIC_RUN || p->magic==VDBE_MAGIC_HALT ){ + rc = sqlite3VdbeReset(p); + assert( (rc & p->db->errMask)==rc ); + } + sqlite3VdbeDelete(p); + return rc; +} + +/* +** Call the destructor for each auxdata entry in pVdbeFunc for which +** the corresponding bit in mask is clear. Auxdata entries beyond 31 +** are always destroyed. To destroy all auxdata entries, call this +** routine with mask==0. +*/ +SQLITE_PRIVATE void sqlite3VdbeDeleteAuxData(VdbeFunc *pVdbeFunc, int mask){ + int i; + for(i=0; inAux; i++){ + struct AuxData *pAux = &pVdbeFunc->apAux[i]; + if( (i>31 || !(mask&(((u32)1)<pAux ){ + if( pAux->xDelete ){ + pAux->xDelete(pAux->pAux); } + pAux->pAux = 0; } - assert( pOp->p2>0 ); - if( u.ba.res ){ - pc = pOp->p2 - 1; - } - }else{ - /* This happens when attempting to open the sqlite3_master table - ** for read access returns SQLITE_EMPTY. In this case always - ** take the jump (since there are no records in the table). - */ - assert( u.ba.pC->pseudoTable==0 ); - pc = pOp->p2 - 1; } - break; } -/* Opcode: Seek P1 P2 * * * -** -** P1 is an open table cursor and P2 is a rowid integer. Arrange -** for P1 to move so that it points to the rowid given by P2. -** -** This is actually a deferred seek. Nothing actually happens until -** the cursor is used to read a record. That way, if no reads -** occur, no unnecessary I/O happens. +/* +** Free all memory associated with the Vdbe passed as the second argument. +** The difference between this function and sqlite3VdbeDelete() is that +** VdbeDelete() also unlinks the Vdbe from the list of VMs associated with +** the database connection. */ -case OP_Seek: { /* in2 */ -#if 0 /* local variables moved into u.bb */ - VdbeCursor *pC; -#endif /* local variables moved into u.bb */ - - assert( pOp->p1>=0 && pOp->p1nCursor ); - u.bb.pC = p->apCsr[pOp->p1]; - assert( u.bb.pC!=0 ); - if( ALWAYS(u.bb.pC->pCursor!=0) ){ - assert( u.bb.pC->isTable ); - u.bb.pC->nullRow = 0; - u.bb.pC->movetoTarget = sqlite3VdbeIntValue(pIn2); - u.bb.pC->rowidIsValid = 0; - u.bb.pC->deferredMoveto = 1; +SQLITE_PRIVATE void sqlite3VdbeDeleteObject(sqlite3 *db, Vdbe *p){ + SubProgram *pSub, *pNext; + int i; + assert( p->db==0 || p->db==db ); + releaseMemArray(p->aVar, p->nVar); + releaseMemArray(p->aColName, p->nResColumn*COLNAME_N); + for(pSub=p->pProgram; pSub; pSub=pNext){ + pNext = pSub->pNext; + vdbeFreeOpArray(db, pSub->aOp, pSub->nOp); + sqlite3DbFree(db, pSub); } - break; + for(i=p->nzVar-1; i>=0; i--) sqlite3DbFree(db, p->azVar[i]); + vdbeFreeOpArray(db, p->aOp, p->nOp); + sqlite3DbFree(db, p->aLabel); + sqlite3DbFree(db, p->aColName); + sqlite3DbFree(db, p->zSql); + sqlite3DbFree(db, p->pFree); +#if defined(SQLITE_ENABLE_TREE_EXPLAIN) + sqlite3DbFree(db, p->zExplain); + sqlite3DbFree(db, p->pExplain); +#endif + sqlite3DbFree(db, p); } - -/* Opcode: Found P1 P2 P3 * * -** -** Register P3 holds a blob constructed by MakeRecord. P1 is an index. -** If an entry that matches the value in register p3 exists in P1 then -** jump to P2. If the P3 value does not match any entry in P1 -** then fall thru. The P1 cursor is left pointing at the matching entry -** if it exists. -** -** This instruction is used to implement the IN operator where the -** left-hand side is a SELECT statement. P1 may be a true index, or it -** may be a temporary index that holds the results of the SELECT -** statement. This instruction is also used to implement the -** DISTINCT keyword in SELECT statements. -** -** This instruction checks if index P1 contains a record for which -** the first N serialized values exactly match the N serialized values -** in the record in register P3, where N is the total number of values in -** the P3 record (the P3 record is a prefix of the P1 record). -** -** See also: NotFound, IsUnique, NotExists -*/ -/* Opcode: NotFound P1 P2 P3 * * -** -** Register P3 holds a blob constructed by MakeRecord. P1 is -** an index. If no entry exists in P1 that matches the blob then jump -** to P2. If an entry does existing, fall through. The cursor is left -** pointing to the entry that matches. -** -** See also: Found, NotExists, IsUnique +/* +** Delete an entire VDBE. */ -case OP_NotFound: /* jump, in3 */ -case OP_Found: { /* jump, in3 */ -#if 0 /* local variables moved into u.bc */ - int alreadyExists; - VdbeCursor *pC; - int res; - UnpackedRecord *pIdxKey; - char aTempRec[ROUND8(sizeof(UnpackedRecord)) + sizeof(Mem)*3 + 7]; -#endif /* local variables moved into u.bc */ - - u.bc.alreadyExists = 0; - assert( pOp->p1>=0 && pOp->p1nCursor ); - u.bc.pC = p->apCsr[pOp->p1]; - assert( u.bc.pC!=0 ); - if( ALWAYS(u.bc.pC->pCursor!=0) ){ +SQLITE_PRIVATE void sqlite3VdbeDelete(Vdbe *p){ + sqlite3 *db; - assert( u.bc.pC->isTable==0 ); - assert( pIn3->flags & MEM_Blob ); - u.bc.pIdxKey = sqlite3VdbeRecordUnpack(u.bc.pC->pKeyInfo, pIn3->n, pIn3->z, - u.bc.aTempRec, sizeof(u.bc.aTempRec)); - if( u.bc.pIdxKey==0 ){ - goto no_mem; - } - if( pOp->opcode==OP_Found ){ - u.bc.pIdxKey->flags |= UNPACKED_PREFIX_MATCH; - } - rc = sqlite3BtreeMovetoUnpacked(u.bc.pC->pCursor, u.bc.pIdxKey, 0, 0, &u.bc.res); - sqlite3VdbeDeleteUnpackedRecord(u.bc.pIdxKey); - if( rc!=SQLITE_OK ){ - break; - } - u.bc.alreadyExists = (u.bc.res==0); - u.bc.pC->deferredMoveto = 0; - u.bc.pC->cacheStatus = CACHE_STALE; - } - if( pOp->opcode==OP_Found ){ - if( u.bc.alreadyExists ) pc = pOp->p2 - 1; + if( NEVER(p==0) ) return; + db = p->db; + if( p->pPrev ){ + p->pPrev->pNext = p->pNext; }else{ - if( !u.bc.alreadyExists ) pc = pOp->p2 - 1; + assert( db->pVdbe==p ); + db->pVdbe = p->pNext; } - break; + if( p->pNext ){ + p->pNext->pPrev = p->pPrev; + } + p->magic = VDBE_MAGIC_DEAD; + p->db = 0; + sqlite3VdbeDeleteObject(db, p); } -/* Opcode: IsUnique P1 P2 P3 P4 * -** -** Cursor P1 is open on an index. So it has no data and its key consists -** of a record generated by OP_MakeRecord where the last field is the -** rowid of the entry that the index refers to. -** -** The P3 register contains an integer record number. Call this record -** number R. Register P4 is the first in a set of N contiguous registers -** that make up an unpacked index key that can be used with cursor P1. -** The value of N can be inferred from the cursor. N includes the rowid -** value appended to the end of the index record. This rowid value may -** or may not be the same as R. -** -** If any of the N registers beginning with register P4 contains a NULL -** value, jump immediately to P2. +/* +** Make sure the cursor p is ready to read or write the row to which it +** was last positioned. Return an error code if an OOM fault or I/O error +** prevents us from positioning the cursor to its correct position. ** -** Otherwise, this instruction checks if cursor P1 contains an entry -** where the first (N-1) fields match but the rowid value at the end -** of the index entry is not R. If there is no such entry, control jumps -** to instruction P2. Otherwise, the rowid of the conflicting index -** entry is copied to register P3 and control falls through to the next -** instruction. +** If a MoveTo operation is pending on the given cursor, then do that +** MoveTo now. If no move is pending, check to see if the row has been +** deleted out from under the cursor and if it has, mark the row as +** a NULL row. ** -** See also: NotFound, NotExists, Found +** If the cursor is already pointing to the correct row and that row has +** not been deleted out from under the cursor, then this routine is a no-op. */ -case OP_IsUnique: { /* jump, in3 */ -#if 0 /* local variables moved into u.bd */ - u16 ii; - VdbeCursor *pCx; - BtCursor *pCrsr; - u16 nField; - Mem *aMem; - UnpackedRecord r; /* B-Tree index search key */ - i64 R; /* Rowid stored in register P3 */ -#endif /* local variables moved into u.bd */ - - u.bd.aMem = &p->aMem[pOp->p4.i]; - /* Assert that the values of parameters P1 and P4 are in range. */ - assert( pOp->p4type==P4_INT32 ); - assert( pOp->p4.i>0 && pOp->p4.i<=p->nMem ); - assert( pOp->p1>=0 && pOp->p1nCursor ); - - /* Find the index cursor. */ - u.bd.pCx = p->apCsr[pOp->p1]; - assert( u.bd.pCx->deferredMoveto==0 ); - u.bd.pCx->seekResult = 0; - u.bd.pCx->cacheStatus = CACHE_STALE; - u.bd.pCrsr = u.bd.pCx->pCursor; - - /* If any of the values are NULL, take the jump. */ - u.bd.nField = u.bd.pCx->pKeyInfo->nField; - for(u.bd.ii=0; u.bd.iip2 - 1; - u.bd.pCrsr = 0; - break; - } - } - assert( (u.bd.aMem[u.bd.nField].flags & MEM_Null)==0 ); - - if( u.bd.pCrsr!=0 ){ - /* Populate the index search key. */ - u.bd.r.pKeyInfo = u.bd.pCx->pKeyInfo; - u.bd.r.nField = u.bd.nField + 1; - u.bd.r.flags = UNPACKED_PREFIX_SEARCH; - u.bd.r.aMem = u.bd.aMem; - - /* Extract the value of u.bd.R from register P3. */ - sqlite3VdbeMemIntegerify(pIn3); - u.bd.R = pIn3->u.i; - - /* Search the B-Tree index. If no conflicting record is found, jump - ** to P2. Otherwise, copy the rowid of the conflicting record to - ** register P3 and fall through to the next instruction. */ - rc = sqlite3BtreeMovetoUnpacked(u.bd.pCrsr, &u.bd.r, 0, 0, &u.bd.pCx->seekResult); - if( (u.bd.r.flags & UNPACKED_PREFIX_SEARCH) || u.bd.r.rowid==u.bd.R ){ - pc = pOp->p2 - 1; - }else{ - pIn3->u.i = u.bd.r.rowid; +SQLITE_PRIVATE int sqlite3VdbeCursorMoveto(VdbeCursor *p){ + if( p->deferredMoveto ){ + int res, rc; +#ifdef SQLITE_TEST + extern int sqlite3_search_count; +#endif + assert( p->isTable ); + rc = sqlite3BtreeMovetoUnpacked(p->pCursor, 0, p->movetoTarget, 0, &res); + if( rc ) return rc; + p->lastRowid = p->movetoTarget; + if( res!=0 ) return SQLITE_CORRUPT_BKPT; + p->rowidIsValid = 1; +#ifdef SQLITE_TEST + sqlite3_search_count++; +#endif + p->deferredMoveto = 0; + p->cacheStatus = CACHE_STALE; + }else if( ALWAYS(p->pCursor) ){ + int hasMoved; + int rc = sqlite3BtreeCursorHasMoved(p->pCursor, &hasMoved); + if( rc ) return rc; + if( hasMoved ){ + p->cacheStatus = CACHE_STALE; + p->nullRow = 1; } } - break; + return SQLITE_OK; } -/* Opcode: NotExists P1 P2 P3 * * +/* +** The following functions: ** -** Use the content of register P3 as a integer key. If a record -** with that key does not exist in table of P1, then jump to P2. -** If the record does exist, then fall thru. The cursor is left -** pointing to the record if it exists. +** sqlite3VdbeSerialType() +** sqlite3VdbeSerialTypeLen() +** sqlite3VdbeSerialLen() +** sqlite3VdbeSerialPut() +** sqlite3VdbeSerialGet() ** -** The difference between this operation and NotFound is that this -** operation assumes the key is an integer and that P1 is a table whereas -** NotFound assumes key is a blob constructed from MakeRecord and -** P1 is an index. +** encapsulate the code that serializes values for storage in SQLite +** data and index records. Each serialized value consists of a +** 'serial-type' and a blob of data. The serial type is an 8-byte unsigned +** integer, stored as a varint. ** -** See also: Found, NotFound, IsUnique +** In an SQLite index record, the serial type is stored directly before +** the blob of data that it corresponds to. In a table record, all serial +** types are stored at the start of the record, and the blobs of data at +** the end. Hence these functions allow the caller to handle the +** serial-type and data blob seperately. +** +** The following table describes the various storage classes for data: +** +** serial type bytes of data type +** -------------- --------------- --------------- +** 0 0 NULL +** 1 1 signed integer +** 2 2 signed integer +** 3 3 signed integer +** 4 4 signed integer +** 5 6 signed integer +** 6 8 signed integer +** 7 8 IEEE float +** 8 0 Integer constant 0 +** 9 0 Integer constant 1 +** 10,11 reserved for expansion +** N>=12 and even (N-12)/2 BLOB +** N>=13 and odd (N-13)/2 text +** +** The 8 and 9 types were added in 3.3.0, file format 4. Prior versions +** of SQLite will not understand those serial types. */ -case OP_NotExists: { /* jump, in3 */ -#if 0 /* local variables moved into u.be */ - VdbeCursor *pC; - BtCursor *pCrsr; - int res; - u64 iKey; -#endif /* local variables moved into u.be */ - assert( pIn3->flags & MEM_Int ); - assert( pOp->p1>=0 && pOp->p1nCursor ); - u.be.pC = p->apCsr[pOp->p1]; - assert( u.be.pC!=0 ); - assert( u.be.pC->isTable ); - u.be.pCrsr = u.be.pC->pCursor; - if( u.be.pCrsr!=0 ){ - u.be.res = 0; - u.be.iKey = pIn3->u.i; - rc = sqlite3BtreeMovetoUnpacked(u.be.pCrsr, 0, u.be.iKey, 0, &u.be.res); - u.be.pC->lastRowid = pIn3->u.i; - u.be.pC->rowidIsValid = u.be.res==0 ?1:0; - u.be.pC->nullRow = 0; - u.be.pC->cacheStatus = CACHE_STALE; - u.be.pC->deferredMoveto = 0; - if( u.be.res!=0 ){ - pc = pOp->p2 - 1; - assert( u.be.pC->rowidIsValid==0 ); +/* +** Return the serial-type for the value stored in pMem. +*/ +SQLITE_PRIVATE u32 sqlite3VdbeSerialType(Mem *pMem, int file_format){ + int flags = pMem->flags; + int n; + + if( flags&MEM_Null ){ + return 0; + } + if( flags&MEM_Int ){ + /* Figure out whether to use 1, 2, 4, 6 or 8 bytes. */ +# define MAX_6BYTE ((((i64)0x00008000)<<32)-1) + i64 i = pMem->u.i; + u64 u; + if( file_format>=4 && (i&1)==i ){ + return 8+(u32)i; } - u.be.pC->seekResult = u.be.res; - }else{ - /* This happens when an attempt to open a read cursor on the - ** sqlite_master table returns SQLITE_EMPTY. - */ - assert( !u.be.pC->pseudoTable ); - assert( u.be.pC->isTable ); - pc = pOp->p2 - 1; - assert( u.be.pC->rowidIsValid==0 ); - u.be.pC->seekResult = 0; + if( i<0 ){ + if( i<(-MAX_6BYTE) ) return 6; + /* Previous test prevents: u = -(-9223372036854775808) */ + u = -i; + }else{ + u = i; + } + if( u<=127 ) return 1; + if( u<=32767 ) return 2; + if( u<=8388607 ) return 3; + if( u<=2147483647 ) return 4; + if( u<=MAX_6BYTE ) return 5; + return 6; } - break; + if( flags&MEM_Real ){ + return 7; + } + assert( pMem->db->mallocFailed || flags&(MEM_Str|MEM_Blob) ); + n = pMem->n; + if( flags & MEM_Zero ){ + n += pMem->u.nZero; + } + assert( n>=0 ); + return ((n*2) + 12 + ((flags&MEM_Str)!=0)); } -/* Opcode: Sequence P1 P2 * * * -** -** Find the next available sequence number for cursor P1. -** Write the sequence number into register P2. -** The sequence number on the cursor is incremented after this -** instruction. +/* +** Return the length of the data corresponding to the supplied serial-type. */ -case OP_Sequence: { /* out2-prerelease */ - assert( pOp->p1>=0 && pOp->p1nCursor ); - assert( p->apCsr[pOp->p1]!=0 ); - pOut->u.i = p->apCsr[pOp->p1]->seqCount++; - MemSetTypeFlag(pOut, MEM_Int); - break; +SQLITE_PRIVATE u32 sqlite3VdbeSerialTypeLen(u32 serial_type){ + if( serial_type>=12 ){ + return (serial_type-12)/2; + }else{ + static const u8 aSize[] = { 0, 1, 2, 3, 4, 6, 8, 8, 0, 0, 0, 0 }; + return aSize[serial_type]; + } } - -/* Opcode: NewRowid P1 P2 P3 * * +/* +** If we are on an architecture with mixed-endian floating +** points (ex: ARM7) then swap the lower 4 bytes with the +** upper 4 bytes. Return the result. ** -** Get a new integer record number (a.k.a "rowid") used as the key to a table. -** The record number is not previously used as a key in the database -** table that cursor P1 points to. The new record number is written -** written to register P2. +** For most architectures, this is a no-op. ** -** If P3>0 then P3 is a register that holds the largest previously -** generated record number. No new record numbers are allowed to be less -** than this value. When this value reaches its maximum, a SQLITE_FULL -** error is generated. The P3 register is updated with the generated -** record number. This P3 mechanism is used to help implement the -** AUTOINCREMENT feature. +** (later): It is reported to me that the mixed-endian problem +** on ARM7 is an issue with GCC, not with the ARM7 chip. It seems +** that early versions of GCC stored the two words of a 64-bit +** float in the wrong order. And that error has been propagated +** ever since. The blame is not necessarily with GCC, though. +** GCC might have just copying the problem from a prior compiler. +** I am also told that newer versions of GCC that follow a different +** ABI get the byte order right. +** +** Developers using SQLite on an ARM7 should compile and run their +** application using -DSQLITE_DEBUG=1 at least once. With DEBUG +** enabled, some asserts below will ensure that the byte order of +** floating point values is correct. +** +** (2007-08-30) Frank van Vugt has studied this problem closely +** and has send his findings to the SQLite developers. Frank +** writes that some Linux kernels offer floating point hardware +** emulation that uses only 32-bit mantissas instead of a full +** 48-bits as required by the IEEE standard. (This is the +** CONFIG_FPE_FASTFPE option.) On such systems, floating point +** byte swapping becomes very complicated. To avoid problems, +** the necessary byte swapping is carried out using a 64-bit integer +** rather than a 64-bit float. Frank assures us that the code here +** works for him. We, the developers, have no way to independently +** verify this, but Frank seems to know what he is talking about +** so we trust him. */ -case OP_NewRowid: { /* out2-prerelease */ -#if 0 /* local variables moved into u.bf */ - i64 v; /* The new rowid */ - VdbeCursor *pC; /* Cursor of table to get the new rowid */ - int res; /* Result of an sqlite3BtreeLast() */ - int cnt; /* Counter to limit the number of searches */ - Mem *pMem; /* Register holding largest rowid for AUTOINCREMENT */ -#endif /* local variables moved into u.bf */ - - u.bf.v = 0; - u.bf.res = 0; - assert( pOp->p1>=0 && pOp->p1nCursor ); - u.bf.pC = p->apCsr[pOp->p1]; - assert( u.bf.pC!=0 ); - if( NEVER(u.bf.pC->pCursor==0) ){ - /* The zero initialization above is all that is needed */ - }else{ - /* The next rowid or record number (different terms for the same - ** thing) is obtained in a two-step algorithm. - ** - ** First we attempt to find the largest existing rowid and add one - ** to that. But if the largest existing rowid is already the maximum - ** positive integer, we have to fall through to the second - ** probabilistic algorithm - ** - ** The second algorithm is to select a rowid at random and see if - ** it already exists in the table. If it does not exist, we have - ** succeeded. If the random rowid does exist, we select a new one - ** and try again, up to 100 times. - */ - assert( u.bf.pC->isTable ); - u.bf.cnt = 0; +#ifdef SQLITE_MIXED_ENDIAN_64BIT_FLOAT +static u64 floatSwap(u64 in){ + union { + u64 r; + u32 i[2]; + } u; + u32 t; -#ifdef SQLITE_32BIT_ROWID -# define MAX_ROWID 0x7fffffff + u.r = in; + t = u.i[0]; + u.i[0] = u.i[1]; + u.i[1] = t; + return u.r; +} +# define swapMixedEndianFloat(X) X = floatSwap(X) #else - /* Some compilers complain about constants of the form 0x7fffffffffffffff. - ** Others complain about 0x7ffffffffffffffffLL. The following macro seems - ** to provide the constant while making all compilers happy. - */ -# define MAX_ROWID (i64)( (((u64)0x7fffffff)<<32) | (u64)0xffffffff ) +# define swapMixedEndianFloat(X) #endif - if( !u.bf.pC->useRandomRowid ){ - u.bf.v = sqlite3BtreeGetCachedRowid(u.bf.pC->pCursor); - if( u.bf.v==0 ){ - rc = sqlite3BtreeLast(u.bf.pC->pCursor, &u.bf.res); - if( rc!=SQLITE_OK ){ - goto abort_due_to_error; - } - if( u.bf.res ){ - u.bf.v = 1; - }else{ - sqlite3BtreeKeySize(u.bf.pC->pCursor, &u.bf.v); - if( u.bf.v==MAX_ROWID ){ - u.bf.pC->useRandomRowid = 1; - }else{ - u.bf.v++; - } - } - } +/* +** Write the serialized data blob for the value stored in pMem into +** buf. It is assumed that the caller has allocated sufficient space. +** Return the number of bytes written. +** +** nBuf is the amount of space left in buf[]. nBuf must always be +** large enough to hold the entire field. Except, if the field is +** a blob with a zero-filled tail, then buf[] might be just the right +** size to hold everything except for the zero-filled tail. If buf[] +** is only big enough to hold the non-zero prefix, then only write that +** prefix into buf[]. But if buf[] is large enough to hold both the +** prefix and the tail then write the prefix and set the tail to all +** zeros. +** +** Return the number of bytes actually written into buf[]. The number +** of bytes in the zero-filled tail is included in the return value only +** if those bytes were zeroed in buf[]. +*/ +SQLITE_PRIVATE u32 sqlite3VdbeSerialPut(u8 *buf, int nBuf, Mem *pMem, int file_format){ + u32 serial_type = sqlite3VdbeSerialType(pMem, file_format); + u32 len; -#ifndef SQLITE_OMIT_AUTOINCREMENT - if( pOp->p3 ){ - assert( pOp->p3>0 && pOp->p3<=p->nMem ); /* P3 is a valid memory cell */ - u.bf.pMem = &p->aMem[pOp->p3]; - REGISTER_TRACE(pOp->p3, u.bf.pMem); - sqlite3VdbeMemIntegerify(u.bf.pMem); - assert( (u.bf.pMem->flags & MEM_Int)!=0 ); /* mem(P3) holds an integer */ - if( u.bf.pMem->u.i==MAX_ROWID || u.bf.pC->useRandomRowid ){ - rc = SQLITE_FULL; - goto abort_due_to_error; - } - if( u.bf.vu.i+1 ){ - u.bf.v = u.bf.pMem->u.i + 1; - } - u.bf.pMem->u.i = u.bf.v; + /* Integer and Real */ + if( serial_type<=7 && serial_type>0 ){ + u64 v; + u32 i; + if( serial_type==7 ){ + assert( sizeof(v)==sizeof(pMem->r) ); + memcpy(&v, &pMem->r, sizeof(v)); + swapMixedEndianFloat(v); + }else{ + v = pMem->u.i; + } + len = i = sqlite3VdbeSerialTypeLen(serial_type); + assert( len<=(u32)nBuf ); + while( i-- ){ + buf[i] = (u8)(v&0xFF); + v >>= 8; + } + return len; + } + + /* String or blob */ + if( serial_type>=12 ){ + assert( pMem->n + ((pMem->flags & MEM_Zero)?pMem->u.nZero:0) + == (int)sqlite3VdbeSerialTypeLen(serial_type) ); + assert( pMem->n<=nBuf ); + len = pMem->n; + memcpy(buf, pMem->z, len); + if( pMem->flags & MEM_Zero ){ + len += pMem->u.nZero; + assert( nBuf>=0 ); + if( len > (u32)nBuf ){ + len = (u32)nBuf; } + memset(&buf[pMem->n], 0, len-pMem->n); + } + return len; + } + + /* NULL or constants 0 or 1 */ + return 0; +} + +/* +** Deserialize the data blob pointed to by buf as serial type serial_type +** and store the result in pMem. Return the number of bytes read. +*/ +SQLITE_PRIVATE u32 sqlite3VdbeSerialGet( + const unsigned char *buf, /* Buffer to deserialize from */ + u32 serial_type, /* Serial type to deserialize */ + Mem *pMem /* Memory cell to write value into */ +){ + switch( serial_type ){ + case 10: /* Reserved for future use */ + case 11: /* Reserved for future use */ + case 0: { /* NULL */ + pMem->flags = MEM_Null; + break; + } + case 1: { /* 1-byte signed integer */ + pMem->u.i = (signed char)buf[0]; + pMem->flags = MEM_Int; + return 1; + } + case 2: { /* 2-byte signed integer */ + pMem->u.i = (((signed char)buf[0])<<8) | buf[1]; + pMem->flags = MEM_Int; + return 2; + } + case 3: { /* 3-byte signed integer */ + pMem->u.i = (((signed char)buf[0])<<16) | (buf[1]<<8) | buf[2]; + pMem->flags = MEM_Int; + return 3; + } + case 4: { /* 4-byte signed integer */ + pMem->u.i = (buf[0]<<24) | (buf[1]<<16) | (buf[2]<<8) | buf[3]; + pMem->flags = MEM_Int; + return 4; + } + case 5: { /* 6-byte signed integer */ + u64 x = (((signed char)buf[0])<<8) | buf[1]; + u32 y = (buf[2]<<24) | (buf[3]<<16) | (buf[4]<<8) | buf[5]; + x = (x<<32) | y; + pMem->u.i = *(i64*)&x; + pMem->flags = MEM_Int; + return 6; + } + case 6: /* 8-byte signed integer */ + case 7: { /* IEEE floating point */ + u64 x; + u32 y; +#if !defined(NDEBUG) && !defined(SQLITE_OMIT_FLOATING_POINT) + /* Verify that integers and floating point values use the same + ** byte order. Or, that if SQLITE_MIXED_ENDIAN_64BIT_FLOAT is + ** defined that 64-bit floating point values really are mixed + ** endian. + */ + static const u64 t1 = ((u64)0x3ff00000)<<32; + static const double r1 = 1.0; + u64 t2 = t1; + swapMixedEndianFloat(t2); + assert( sizeof(r1)==sizeof(t2) && memcmp(&r1, &t2, sizeof(r1))==0 ); #endif - sqlite3BtreeSetCachedRowid(u.bf.pC->pCursor, u.bf.vu.i = *(i64*)&x; + pMem->flags = MEM_Int; + }else{ + assert( sizeof(x)==8 && sizeof(pMem->r)==8 ); + swapMixedEndianFloat(x); + memcpy(&pMem->r, &x, sizeof(x)); + pMem->flags = sqlite3IsNaN(pMem->r) ? MEM_Null : MEM_Real; + } + return 8; } - if( u.bf.pC->useRandomRowid ){ - assert( pOp->p3==0 ); /* We cannot be in random rowid mode if this is - ** an AUTOINCREMENT table. */ - u.bf.v = db->lastRowid; - u.bf.cnt = 0; - do{ - if( u.bf.cnt==0 && (u.bf.v&0xffffff)==u.bf.v ){ - u.bf.v++; - }else{ - sqlite3_randomness(sizeof(u.bf.v), &u.bf.v); - if( u.bf.cnt<5 ) u.bf.v &= 0xffffff; - } - rc = sqlite3BtreeMovetoUnpacked(u.bf.pC->pCursor, 0, (u64)u.bf.v, 0, &u.bf.res); - u.bf.cnt++; - }while( u.bf.cnt<100 && rc==SQLITE_OK && u.bf.res==0 ); - if( rc==SQLITE_OK && u.bf.res==0 ){ - rc = SQLITE_FULL; - goto abort_due_to_error; + case 8: /* Integer 0 */ + case 9: { /* Integer 1 */ + pMem->u.i = serial_type-8; + pMem->flags = MEM_Int; + return 0; + } + default: { + u32 len = (serial_type-12)/2; + pMem->z = (char *)buf; + pMem->n = len; + pMem->xDel = 0; + if( serial_type&0x01 ){ + pMem->flags = MEM_Str | MEM_Ephem; + }else{ + pMem->flags = MEM_Blob | MEM_Ephem; } + return len; } - u.bf.pC->rowidIsValid = 0; - u.bf.pC->deferredMoveto = 0; - u.bf.pC->cacheStatus = CACHE_STALE; } - MemSetTypeFlag(pOut, MEM_Int); - pOut->u.i = u.bf.v; - break; + return 0; } -/* Opcode: Insert P1 P2 P3 P4 P5 -** -** Write an entry into the table of cursor P1. A new entry is -** created if it doesn't already exist or the data for an existing -** entry is overwritten. The data is the value stored register -** number P2. The key is stored in register P3. The key must -** be an integer. -** -** If the OPFLAG_NCHANGE flag of P5 is set, then the row change count is -** incremented (otherwise not). If the OPFLAG_LASTROWID flag of P5 is set, -** then rowid is stored for subsequent return by the -** sqlite3_last_insert_rowid() function (otherwise it is unmodified). -** -** Parameter P4 may point to a string containing the table-name, or -** may be NULL. If it is not NULL, then the update-hook -** (sqlite3.xUpdateCallback) is invoked following a successful insert. +/* +** This routine is used to allocate sufficient space for an UnpackedRecord +** structure large enough to be used with sqlite3VdbeRecordUnpack() if +** the first argument is a pointer to KeyInfo structure pKeyInfo. ** -** (WARNING/TODO: If P1 is a pseudo-cursor and P2 is dynamically -** allocated, then ownership of P2 is transferred to the pseudo-cursor -** and register P2 becomes ephemeral. If the cursor is changed, the -** value of register P2 will then change. Make sure this does not -** cause any problems.) +** The space is either allocated using sqlite3DbMallocRaw() or from within +** the unaligned buffer passed via the second and third arguments (presumably +** stack space). If the former, then *ppFree is set to a pointer that should +** be eventually freed by the caller using sqlite3DbFree(). Or, if the +** allocation comes from the pSpace/szSpace buffer, *ppFree is set to NULL +** before returning. ** -** This instruction only works on tables. The equivalent instruction -** for indices is OP_IdxInsert. +** If an OOM error occurs, NULL is returned. */ -case OP_Insert: { -#if 0 /* local variables moved into u.bg */ - Mem *pData; - Mem *pKey; - i64 iKey; /* The integer ROWID or key for the record to be inserted */ - VdbeCursor *pC; - int nZero; - int seekResult; - const char *zDb; - const char *zTbl; - int op; -#endif /* local variables moved into u.bg */ - - u.bg.pData = &p->aMem[pOp->p2]; - u.bg.pKey = &p->aMem[pOp->p3]; - assert( pOp->p1>=0 && pOp->p1nCursor ); - u.bg.pC = p->apCsr[pOp->p1]; - assert( u.bg.pC!=0 ); - assert( u.bg.pC->pCursor!=0 || u.bg.pC->pseudoTable ); - assert( u.bg.pKey->flags & MEM_Int ); - assert( u.bg.pC->isTable ); - REGISTER_TRACE(pOp->p2, u.bg.pData); - REGISTER_TRACE(pOp->p3, u.bg.pKey); +SQLITE_PRIVATE UnpackedRecord *sqlite3VdbeAllocUnpackedRecord( + KeyInfo *pKeyInfo, /* Description of the record */ + char *pSpace, /* Unaligned space available */ + int szSpace, /* Size of pSpace[] in bytes */ + char **ppFree /* OUT: Caller should free this pointer */ +){ + UnpackedRecord *p; /* Unpacked record to return */ + int nOff; /* Increment pSpace by nOff to align it */ + int nByte; /* Number of bytes required for *p */ - u.bg.iKey = u.bg.pKey->u.i; - if( pOp->p5 & OPFLAG_NCHANGE ) p->nChange++; - if( pOp->p5 & OPFLAG_LASTROWID ) db->lastRowid = u.bg.pKey->u.i; - if( u.bg.pData->flags & MEM_Null ){ - u.bg.pData->z = 0; - u.bg.pData->n = 0; - }else{ - assert( u.bg.pData->flags & (MEM_Blob|MEM_Str) ); - } - if( u.bg.pC->pseudoTable ){ - if( !u.bg.pC->ephemPseudoTable ){ - sqlite3DbFree(db, u.bg.pC->pData); - } - u.bg.pC->iKey = u.bg.iKey; - u.bg.pC->nData = u.bg.pData->n; - if( u.bg.pC->ephemPseudoTable || u.bg.pData->z==u.bg.pData->zMalloc ){ - u.bg.pC->pData = u.bg.pData->z; - if( !u.bg.pC->ephemPseudoTable ){ - u.bg.pData->flags &= ~MEM_Dyn; - u.bg.pData->flags |= MEM_Ephem; - u.bg.pData->zMalloc = 0; - } - }else{ - u.bg.pC->pData = sqlite3Malloc( u.bg.pC->nData+2 ); - if( !u.bg.pC->pData ) goto no_mem; - memcpy(u.bg.pC->pData, u.bg.pData->z, u.bg.pC->nData); - u.bg.pC->pData[u.bg.pC->nData] = 0; - u.bg.pC->pData[u.bg.pC->nData+1] = 0; - } - u.bg.pC->nullRow = 0; + /* We want to shift the pointer pSpace up such that it is 8-byte aligned. + ** Thus, we need to calculate a value, nOff, between 0 and 7, to shift + ** it by. If pSpace is already 8-byte aligned, nOff should be zero. + */ + nOff = (8 - (SQLITE_PTR_TO_INT(pSpace) & 7)) & 7; + nByte = ROUND8(sizeof(UnpackedRecord)) + sizeof(Mem)*(pKeyInfo->nField+1); + if( nByte>szSpace+nOff ){ + p = (UnpackedRecord *)sqlite3DbMallocRaw(pKeyInfo->db, nByte); + *ppFree = (char *)p; + if( !p ) return 0; }else{ - u.bg.seekResult = ((pOp->p5 & OPFLAG_USESEEKRESULT) ? u.bg.pC->seekResult : 0); - if( u.bg.pData->flags & MEM_Zero ){ - u.bg.nZero = u.bg.pData->u.nZero; - }else{ - u.bg.nZero = 0; - } - sqlite3BtreeSetCachedRowid(u.bg.pC->pCursor, 0); - rc = sqlite3BtreeInsert(u.bg.pC->pCursor, 0, u.bg.iKey, - u.bg.pData->z, u.bg.pData->n, u.bg.nZero, - pOp->p5 & OPFLAG_APPEND, u.bg.seekResult - ); + p = (UnpackedRecord*)&pSpace[nOff]; + *ppFree = 0; } - u.bg.pC->rowidIsValid = 0; - u.bg.pC->deferredMoveto = 0; - u.bg.pC->cacheStatus = CACHE_STALE; + p->aMem = (Mem*)&((char*)p)[ROUND8(sizeof(UnpackedRecord))]; + p->pKeyInfo = pKeyInfo; + p->nField = pKeyInfo->nField + 1; + return p; +} - /* Invoke the update-hook if required. */ - if( rc==SQLITE_OK && db->xUpdateCallback && pOp->p4.z ){ - u.bg.zDb = db->aDb[u.bg.pC->iDb].zName; - u.bg.zTbl = pOp->p4.z; - u.bg.op = ((pOp->p5 & OPFLAG_ISUPDATE) ? SQLITE_UPDATE : SQLITE_INSERT); - assert( u.bg.pC->isTable ); - db->xUpdateCallback(db->pUpdateArg, u.bg.op, u.bg.zDb, u.bg.zTbl, u.bg.iKey); - assert( u.bg.pC->iDb>=0 ); +/* +** Given the nKey-byte encoding of a record in pKey[], populate the +** UnpackedRecord structure indicated by the fourth argument with the +** contents of the decoded record. +*/ +SQLITE_PRIVATE void sqlite3VdbeRecordUnpack( + KeyInfo *pKeyInfo, /* Information about the record format */ + int nKey, /* Size of the binary record */ + const void *pKey, /* The binary record */ + UnpackedRecord *p /* Populate this structure before returning. */ +){ + const unsigned char *aKey = (const unsigned char *)pKey; + int d; + u32 idx; /* Offset in aKey[] to read from */ + u16 u; /* Unsigned loop counter */ + u32 szHdr; + Mem *pMem = p->aMem; + + p->flags = 0; + assert( EIGHT_BYTE_ALIGNMENT(pMem) ); + idx = getVarint32(aKey, szHdr); + d = szHdr; + u = 0; + while( idxnField && d<=nKey ){ + u32 serial_type; + + idx += getVarint32(&aKey[idx], serial_type); + pMem->enc = pKeyInfo->enc; + pMem->db = pKeyInfo->db; + /* pMem->flags = 0; // sqlite3VdbeSerialGet() will set this for us */ + pMem->zMalloc = 0; + d += sqlite3VdbeSerialGet(&aKey[d], serial_type, pMem); + pMem++; + u++; } - break; + assert( u<=pKeyInfo->nField + 1 ); + p->nField = u; } -/* Opcode: Delete P1 P2 * P4 * -** -** Delete the record at which the P1 cursor is currently pointing. -** -** The cursor will be left pointing at either the next or the previous -** record in the table. If it is left pointing at the next record, then -** the next Next instruction will be a no-op. Hence it is OK to delete -** a record from within an Next loop. -** -** If the OPFLAG_NCHANGE flag of P2 is set, then the row change count is -** incremented (otherwise not). -** -** P1 must not be pseudo-table. It has to be a real table with -** multiple rows. +/* +** This function compares the two table rows or index records +** specified by {nKey1, pKey1} and pPKey2. It returns a negative, zero +** or positive integer if key1 is less than, equal to or +** greater than key2. The {nKey1, pKey1} key must be a blob +** created by th OP_MakeRecord opcode of the VDBE. The pPKey2 +** key must be a parsed key such as obtained from +** sqlite3VdbeParseRecord. ** -** If P4 is not NULL, then it is the name of the table that P1 is -** pointing to. The update hook will be invoked, if it exists. -** If P4 is not NULL then the P1 cursor must have been positioned -** using OP_NotFound prior to invoking this opcode. +** Key1 and Key2 do not have to contain the same number of fields. +** The key with fewer fields is usually compares less than the +** longer key. However if the UNPACKED_INCRKEY flags in pPKey2 is set +** and the common prefixes are equal, then key1 is less than key2. +** Or if the UNPACKED_MATCH_PREFIX flag is set and the prefixes are +** equal, then the keys are considered to be equal and +** the parts beyond the common prefix are ignored. */ -case OP_Delete: { -#if 0 /* local variables moved into u.bh */ - i64 iKey; - VdbeCursor *pC; -#endif /* local variables moved into u.bh */ +SQLITE_PRIVATE int sqlite3VdbeRecordCompare( + int nKey1, const void *pKey1, /* Left key */ + UnpackedRecord *pPKey2 /* Right key */ +){ + int d1; /* Offset into aKey[] of next data element */ + u32 idx1; /* Offset into aKey[] of next header element */ + u32 szHdr1; /* Number of bytes in header */ + int i = 0; + int nField; + int rc = 0; + const unsigned char *aKey1 = (const unsigned char *)pKey1; + KeyInfo *pKeyInfo; + Mem mem1; - u.bh.iKey = 0; - assert( pOp->p1>=0 && pOp->p1nCursor ); - u.bh.pC = p->apCsr[pOp->p1]; - assert( u.bh.pC!=0 ); - assert( u.bh.pC->pCursor!=0 ); /* Only valid for real tables, no pseudotables */ + pKeyInfo = pPKey2->pKeyInfo; + mem1.enc = pKeyInfo->enc; + mem1.db = pKeyInfo->db; + /* mem1.flags = 0; // Will be initialized by sqlite3VdbeSerialGet() */ + VVA_ONLY( mem1.zMalloc = 0; ) /* Only needed by assert() statements */ - /* If the update-hook will be invoked, set u.bh.iKey to the rowid of the - ** row being deleted. + /* Compilers may complain that mem1.u.i is potentially uninitialized. + ** We could initialize it, as shown here, to silence those complaints. + ** But in fact, mem1.u.i will never actually be used uninitialized, and doing + ** the unnecessary initialization has a measurable negative performance + ** impact, since this routine is a very high runner. And so, we choose + ** to ignore the compiler warnings and leave this variable uninitialized. */ - if( db->xUpdateCallback && pOp->p4.z ){ - assert( u.bh.pC->isTable ); - assert( u.bh.pC->rowidIsValid ); /* lastRowid set by previous OP_NotFound */ - u.bh.iKey = u.bh.pC->lastRowid; - } + /* mem1.u.i = 0; // not needed, here to silence compiler warning */ + + idx1 = getVarint32(aKey1, szHdr1); + d1 = szHdr1; + nField = pKeyInfo->nField; + while( idx1nField ){ + u32 serial_type1; - /* The OP_Delete opcode always follows an OP_NotExists or OP_Last or - ** OP_Column on the same table without any intervening operations that - ** might move or invalidate the cursor. Hence cursor u.bh.pC is always pointing - ** to the row to be deleted and the sqlite3VdbeCursorMoveto() operation - ** below is always a no-op and cannot fail. We will run it anyhow, though, - ** to guard against future changes to the code generator. - **/ - assert( u.bh.pC->deferredMoveto==0 ); - rc = sqlite3VdbeCursorMoveto(u.bh.pC); - if( NEVER(rc!=SQLITE_OK) ) goto abort_due_to_error; + /* Read the serial types for the next element in each key. */ + idx1 += getVarint32( aKey1+idx1, serial_type1 ); + if( d1>=nKey1 && sqlite3VdbeSerialTypeLen(serial_type1)>0 ) break; - sqlite3BtreeSetCachedRowid(u.bh.pC->pCursor, 0); - rc = sqlite3BtreeDelete(u.bh.pC->pCursor); - u.bh.pC->cacheStatus = CACHE_STALE; + /* Extract the values to be compared. + */ + d1 += sqlite3VdbeSerialGet(&aKey1[d1], serial_type1, &mem1); - /* Invoke the update-hook if required. */ - if( rc==SQLITE_OK && db->xUpdateCallback && pOp->p4.z ){ - const char *zDb = db->aDb[u.bh.pC->iDb].zName; - const char *zTbl = pOp->p4.z; - db->xUpdateCallback(db->pUpdateArg, SQLITE_DELETE, zDb, zTbl, u.bh.iKey); - assert( u.bh.pC->iDb>=0 ); + /* Do the comparison + */ + rc = sqlite3MemCompare(&mem1, &pPKey2->aMem[i], + iaColl[i] : 0); + if( rc!=0 ){ + assert( mem1.zMalloc==0 ); /* See comment below */ + + /* Invert the result if we are using DESC sort order. */ + if( pKeyInfo->aSortOrder && iaSortOrder[i] ){ + rc = -rc; + } + + /* If the PREFIX_SEARCH flag is set and all fields except the final + ** rowid field were equal, then clear the PREFIX_SEARCH flag and set + ** pPKey2->rowid to the value of the rowid field in (pKey1, nKey1). + ** This is used by the OP_IsUnique opcode. + */ + if( (pPKey2->flags & UNPACKED_PREFIX_SEARCH) && i==(pPKey2->nField-1) ){ + assert( idx1==szHdr1 && rc ); + assert( mem1.flags & MEM_Int ); + pPKey2->flags &= ~UNPACKED_PREFIX_SEARCH; + pPKey2->rowid = mem1.u.i; + } + + return rc; + } + i++; } - if( pOp->p2 & OPFLAG_NCHANGE ) p->nChange++; - break; -} -/* Opcode: ResetCount P1 * * -** -** This opcode resets the VMs internal change counter to 0. If P1 is true, -** then the value of the change counter is copied to the database handle -** change counter (returned by subsequent calls to sqlite3_changes()) -** before it is reset. This is used by trigger programs. -*/ -case OP_ResetCount: { - if( pOp->p1 ){ - sqlite3VdbeSetChanges(db, p->nChange); + /* No memory allocation is ever used on mem1. Prove this using + ** the following assert(). If the assert() fails, it indicates a + ** memory leak and a need to call sqlite3VdbeMemRelease(&mem1). + */ + assert( mem1.zMalloc==0 ); + + /* rc==0 here means that one of the keys ran out of fields and + ** all the fields up to that point were equal. If the UNPACKED_INCRKEY + ** flag is set, then break the tie by treating key2 as larger. + ** If the UPACKED_PREFIX_MATCH flag is set, then keys with common prefixes + ** are considered to be equal. Otherwise, the longer key is the + ** larger. As it happens, the pPKey2 will always be the longer + ** if there is a difference. + */ + assert( rc==0 ); + if( pPKey2->flags & UNPACKED_INCRKEY ){ + rc = -1; + }else if( pPKey2->flags & UNPACKED_PREFIX_MATCH ){ + /* Leave rc==0 */ + }else if( idx1nChange = 0; - break; + return rc; } + -/* Opcode: RowData P1 P2 * * * -** -** Write into register P2 the complete row data for cursor P1. -** There is no interpretation of the data. -** It is just copied onto the P2 register exactly as -** it is found in the database file. -** -** If the P1 cursor must be pointing to a valid row (not a NULL row) -** of a real table, not a pseudo-table. -*/ -/* Opcode: RowKey P1 P2 * * * -** -** Write into register P2 the complete row key for cursor P1. -** There is no interpretation of the data. -** The key is copied onto the P3 register exactly as -** it is found in the database file. +/* +** pCur points at an index entry created using the OP_MakeRecord opcode. +** Read the rowid (the last field in the record) and store it in *rowid. +** Return SQLITE_OK if everything works, or an error code otherwise. ** -** If the P1 cursor must be pointing to a valid row (not a NULL row) -** of a real table, not a pseudo-table. +** pCur might be pointing to text obtained from a corrupt database file. +** So the content cannot be trusted. Do appropriate checks on the content. */ -case OP_RowKey: -case OP_RowData: { -#if 0 /* local variables moved into u.bi */ - VdbeCursor *pC; - BtCursor *pCrsr; - u32 n; - i64 n64; -#endif /* local variables moved into u.bi */ - - pOut = &p->aMem[pOp->p2]; +SQLITE_PRIVATE int sqlite3VdbeIdxRowid(sqlite3 *db, BtCursor *pCur, i64 *rowid){ + i64 nCellKey = 0; + int rc; + u32 szHdr; /* Size of the header */ + u32 typeRowid; /* Serial type of the rowid */ + u32 lenRowid; /* Size of the rowid */ + Mem m, v; - /* Note that RowKey and RowData are really exactly the same instruction */ - assert( pOp->p1>=0 && pOp->p1nCursor ); - u.bi.pC = p->apCsr[pOp->p1]; - assert( u.bi.pC->isTable || pOp->opcode==OP_RowKey ); - assert( u.bi.pC->isIndex || pOp->opcode==OP_RowData ); - assert( u.bi.pC!=0 ); - assert( u.bi.pC->nullRow==0 ); - assert( u.bi.pC->pseudoTable==0 ); - assert( u.bi.pC->pCursor!=0 ); - u.bi.pCrsr = u.bi.pC->pCursor; + UNUSED_PARAMETER(db); - /* The OP_RowKey and OP_RowData opcodes always follow OP_NotExists or - ** OP_Rewind/Op_Next with no intervening instructions that might invalidate - ** the cursor. Hence the following sqlite3VdbeCursorMoveto() call is always - ** a no-op and can never fail. But we leave it in place as a safety. + /* Get the size of the index entry. Only indices entries of less + ** than 2GiB are support - anything large must be database corruption. + ** Any corruption is detected in sqlite3BtreeParseCellPtr(), though, so + ** this code can safely assume that nCellKey is 32-bits */ - assert( u.bi.pC->deferredMoveto==0 ); - rc = sqlite3VdbeCursorMoveto(u.bi.pC); - if( NEVER(rc!=SQLITE_OK) ) goto abort_due_to_error; + assert( sqlite3BtreeCursorIsValid(pCur) ); + VVA_ONLY(rc =) sqlite3BtreeKeySize(pCur, &nCellKey); + assert( rc==SQLITE_OK ); /* pCur is always valid so KeySize cannot fail */ + assert( (nCellKey & SQLITE_MAX_U32)==(u64)nCellKey ); - if( u.bi.pC->isIndex ){ - assert( !u.bi.pC->isTable ); - sqlite3BtreeKeySize(u.bi.pCrsr, &u.bi.n64); - if( u.bi.n64>db->aLimit[SQLITE_LIMIT_LENGTH] ){ - goto too_big; - } - u.bi.n = (u32)u.bi.n64; - }else{ - sqlite3BtreeDataSize(u.bi.pCrsr, &u.bi.n); - if( u.bi.n>(u32)db->aLimit[SQLITE_LIMIT_LENGTH] ){ - goto too_big; - } + /* Read in the complete content of the index entry */ + memset(&m, 0, sizeof(m)); + rc = sqlite3VdbeMemFromBtree(pCur, 0, (int)nCellKey, 1, &m); + if( rc ){ + return rc; } - if( sqlite3VdbeMemGrow(pOut, u.bi.n, 0) ){ - goto no_mem; + + /* The index entry must begin with a header size */ + (void)getVarint32((u8*)m.z, szHdr); + testcase( szHdr==3 ); + testcase( szHdr==m.n ); + if( unlikely(szHdr<3 || (int)szHdr>m.n) ){ + goto idx_rowid_corruption; } - pOut->n = u.bi.n; - MemSetTypeFlag(pOut, MEM_Blob); - if( u.bi.pC->isIndex ){ - rc = sqlite3BtreeKey(u.bi.pCrsr, 0, u.bi.n, pOut->z); - }else{ - rc = sqlite3BtreeData(u.bi.pCrsr, 0, u.bi.n, pOut->z); + + /* The last field of the index should be an integer - the ROWID. + ** Verify that the last entry really is an integer. */ + (void)getVarint32((u8*)&m.z[szHdr-1], typeRowid); + testcase( typeRowid==1 ); + testcase( typeRowid==2 ); + testcase( typeRowid==3 ); + testcase( typeRowid==4 ); + testcase( typeRowid==5 ); + testcase( typeRowid==6 ); + testcase( typeRowid==8 ); + testcase( typeRowid==9 ); + if( unlikely(typeRowid<1 || typeRowid>9 || typeRowid==7) ){ + goto idx_rowid_corruption; } - pOut->enc = SQLITE_UTF8; /* In case the blob is ever cast to text */ - UPDATE_MAX_BLOBSIZE(pOut); - break; + lenRowid = sqlite3VdbeSerialTypeLen(typeRowid); + testcase( (u32)m.n==szHdr+lenRowid ); + if( unlikely((u32)m.npCursor; + Mem m; - assert( pOp->p1>=0 && pOp->p1nCursor ); - u.bj.pC = p->apCsr[pOp->p1]; - assert( u.bj.pC!=0 ); - if( u.bj.pC->nullRow ){ - /* Do nothing so that reg[P2] remains NULL */ - break; - }else if( u.bj.pC->deferredMoveto ){ - u.bj.v = u.bj.pC->movetoTarget; - }else if( u.bj.pC->pseudoTable ){ - u.bj.v = u.bj.pC->iKey; -#ifndef SQLITE_OMIT_VIRTUALTABLE - }else if( u.bj.pC->pVtabCursor ){ - u.bj.pVtab = u.bj.pC->pVtabCursor->pVtab; - u.bj.pModule = u.bj.pVtab->pModule; - assert( u.bj.pModule->xRowid ); - if( sqlite3SafetyOff(db) ) goto abort_due_to_misuse; - rc = u.bj.pModule->xRowid(u.bj.pC->pVtabCursor, &u.bj.v); - sqlite3DbFree(db, p->zErrMsg); - p->zErrMsg = u.bj.pVtab->zErrMsg; - u.bj.pVtab->zErrMsg = 0; - if( sqlite3SafetyOn(db) ) goto abort_due_to_misuse; -#endif /* SQLITE_OMIT_VIRTUALTABLE */ - }else{ - rc = sqlite3VdbeCursorMoveto(u.bj.pC); - if( rc ) goto abort_due_to_error; - if( u.bj.pC->rowidIsValid ){ - u.bj.v = u.bj.pC->lastRowid; - }else{ - assert( u.bj.pC->pCursor!=0 ); - sqlite3BtreeKeySize(u.bj.pC->pCursor, &u.bj.v); - } + assert( sqlite3BtreeCursorIsValid(pCur) ); + VVA_ONLY(rc =) sqlite3BtreeKeySize(pCur, &nCellKey); + assert( rc==SQLITE_OK ); /* pCur is always valid so KeySize cannot fail */ + /* nCellKey will always be between 0 and 0xffffffff because of the say + ** that btreeParseCellPtr() and sqlite3GetVarint32() are implemented */ + if( nCellKey<=0 || nCellKey>0x7fffffff ){ + *res = 0; + return SQLITE_CORRUPT_BKPT; } - pOut->u.i = u.bj.v; - MemSetTypeFlag(pOut, MEM_Int); - break; + memset(&m, 0, sizeof(m)); + rc = sqlite3VdbeMemFromBtree(pC->pCursor, 0, (int)nCellKey, 1, &m); + if( rc ){ + return rc; + } + assert( pUnpacked->flags & UNPACKED_PREFIX_MATCH ); + *res = sqlite3VdbeRecordCompare(m.n, m.z, pUnpacked); + sqlite3VdbeMemRelease(&m); + return SQLITE_OK; } -/* Opcode: NullRow P1 * * * * -** -** Move the cursor P1 to a null row. Any OP_Column operations -** that occur while the cursor is on the null row will always -** write a NULL. +/* +** This routine sets the value to be returned by subsequent calls to +** sqlite3_changes() on the database handle 'db'. */ -case OP_NullRow: { -#if 0 /* local variables moved into u.bk */ - VdbeCursor *pC; -#endif /* local variables moved into u.bk */ +SQLITE_PRIVATE void sqlite3VdbeSetChanges(sqlite3 *db, int nChange){ + assert( sqlite3_mutex_held(db->mutex) ); + db->nChange = nChange; + db->nTotalChange += nChange; +} - assert( pOp->p1>=0 && pOp->p1nCursor ); - u.bk.pC = p->apCsr[pOp->p1]; - assert( u.bk.pC!=0 ); - u.bk.pC->nullRow = 1; - u.bk.pC->rowidIsValid = 0; - if( u.bk.pC->pCursor ){ - sqlite3BtreeClearCursor(u.bk.pC->pCursor); - } - break; +/* +** Set a flag in the vdbe to update the change counter when it is finalised +** or reset. +*/ +SQLITE_PRIVATE void sqlite3VdbeCountChanges(Vdbe *v){ + v->changeCntOn = 1; } -/* Opcode: Last P1 P2 * * * +/* +** Mark every prepared statement associated with a database connection +** as expired. ** -** The next use of the Rowid or Column or Next instruction for P1 -** will refer to the last entry in the database table or index. -** If the table or index is empty and P2>0, then jump immediately to P2. -** If P2 is 0 or if the table or index is not empty, fall through -** to the following instruction. +** An expired statement means that recompilation of the statement is +** recommend. Statements expire when things happen that make their +** programs obsolete. Removing user-defined functions or collating +** sequences, or changing an authorization function are the types of +** things that make prepared statements obsolete. */ -case OP_Last: { /* jump */ -#if 0 /* local variables moved into u.bl */ - VdbeCursor *pC; - BtCursor *pCrsr; - int res; -#endif /* local variables moved into u.bl */ - - assert( pOp->p1>=0 && pOp->p1nCursor ); - u.bl.pC = p->apCsr[pOp->p1]; - assert( u.bl.pC!=0 ); - u.bl.pCrsr = u.bl.pC->pCursor; - if( u.bl.pCrsr==0 ){ - u.bl.res = 1; - }else{ - rc = sqlite3BtreeLast(u.bl.pCrsr, &u.bl.res); - } - u.bl.pC->nullRow = (u8)u.bl.res; - u.bl.pC->deferredMoveto = 0; - u.bl.pC->rowidIsValid = 0; - u.bl.pC->cacheStatus = CACHE_STALE; - if( pOp->p2>0 && u.bl.res ){ - pc = pOp->p2 - 1; +SQLITE_PRIVATE void sqlite3ExpirePreparedStatements(sqlite3 *db){ + Vdbe *p; + for(p = db->pVdbe; p; p=p->pNext){ + p->expired = 1; } - break; } - -/* Opcode: Sort P1 P2 * * * -** -** This opcode does exactly the same thing as OP_Rewind except that -** it increments an undocumented global variable used for testing. -** -** Sorting is accomplished by writing records into a sorting index, -** then rewinding that index and playing it back from beginning to -** end. We use the OP_Sort opcode instead of OP_Rewind to do the -** rewinding so that the global variable will be incremented and -** regression tests can determine whether or not the optimizer is -** correctly optimizing out sorts. +/* +** Return the database associated with the Vdbe. */ -case OP_Sort: { /* jump */ -#ifdef SQLITE_TEST - sqlite3_sort_count++; - sqlite3_search_count--; -#endif - p->aCounter[SQLITE_STMTSTATUS_SORT-1]++; - /* Fall through into OP_Rewind */ +SQLITE_PRIVATE sqlite3 *sqlite3VdbeDb(Vdbe *v){ + return v->db; } -/* Opcode: Rewind P1 P2 * * * + +/* +** Return a pointer to an sqlite3_value structure containing the value bound +** parameter iVar of VM v. Except, if the value is an SQL NULL, return +** 0 instead. Unless it is NULL, apply affinity aff (one of the SQLITE_AFF_* +** constants) to the value before returning it. ** -** The next use of the Rowid or Column or Next instruction for P1 -** will refer to the first entry in the database table or index. -** If the table or index is empty and P2>0, then jump immediately to P2. -** If P2 is 0 or if the table or index is not empty, fall through -** to the following instruction. +** The returned value must be freed by the caller using sqlite3ValueFree(). */ -case OP_Rewind: { /* jump */ -#if 0 /* local variables moved into u.bm */ - VdbeCursor *pC; - BtCursor *pCrsr; - int res; -#endif /* local variables moved into u.bm */ +SQLITE_PRIVATE sqlite3_value *sqlite3VdbeGetValue(Vdbe *v, int iVar, u8 aff){ + assert( iVar>0 ); + if( v ){ + Mem *pMem = &v->aVar[iVar-1]; + if( 0==(pMem->flags & MEM_Null) ){ + sqlite3_value *pRet = sqlite3ValueNew(v->db); + if( pRet ){ + sqlite3VdbeMemCopy((Mem *)pRet, pMem); + sqlite3ValueApplyAffinity(pRet, aff, SQLITE_UTF8); + sqlite3VdbeMemStoreType((Mem *)pRet); + } + return pRet; + } + } + return 0; +} - assert( pOp->p1>=0 && pOp->p1nCursor ); - u.bm.pC = p->apCsr[pOp->p1]; - assert( u.bm.pC!=0 ); - if( (u.bm.pCrsr = u.bm.pC->pCursor)!=0 ){ - rc = sqlite3BtreeFirst(u.bm.pCrsr, &u.bm.res); - u.bm.pC->atFirst = u.bm.res==0 ?1:0; - u.bm.pC->deferredMoveto = 0; - u.bm.pC->cacheStatus = CACHE_STALE; - u.bm.pC->rowidIsValid = 0; +/* +** Configure SQL variable iVar so that binding a new value to it signals +** to sqlite3_reoptimize() that re-preparing the statement may result +** in a better query plan. +*/ +SQLITE_PRIVATE void sqlite3VdbeSetVarmask(Vdbe *v, int iVar){ + assert( iVar>0 ); + if( iVar>32 ){ + v->expmask = 0xffffffff; }else{ - u.bm.res = 1; - } - u.bm.pC->nullRow = (u8)u.bm.res; - assert( pOp->p2>0 && pOp->p2nOp ); - if( u.bm.res ){ - pc = pOp->p2 - 1; + v->expmask |= ((u32)1 << (iVar-1)); } - break; } -/* Opcode: Next P1 P2 * * * -** -** Advance cursor P1 so that it points to the next key/data pair in its -** table or index. If there are no more key/value pairs then fall through -** to the following instruction. But if the cursor advance was successful, -** jump immediately to P2. +/************** End of vdbeaux.c *********************************************/ +/************** Begin file vdbeapi.c *****************************************/ +/* +** 2004 May 26 ** -** The P1 cursor must be for a real table, not a pseudo-table. +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: ** -** See also: Prev -*/ -/* Opcode: Prev P1 P2 * * * +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. ** -** Back up cursor P1 so that it points to the previous key/data pair in its -** table or index. If there is no previous key/value pairs then fall through -** to the following instruction. But if the cursor backup was successful, -** jump immediately to P2. +************************************************************************* ** -** The P1 cursor must be for a real table, not a pseudo-table. +** This file contains code use to implement APIs that are part of the +** VDBE. */ -case OP_Prev: /* jump */ -case OP_Next: { /* jump */ -#if 0 /* local variables moved into u.bn */ - VdbeCursor *pC; - BtCursor *pCrsr; - int res; -#endif /* local variables moved into u.bn */ - CHECK_FOR_INTERRUPT; - assert( pOp->p1>=0 && pOp->p1nCursor ); - u.bn.pC = p->apCsr[pOp->p1]; - if( u.bn.pC==0 ){ - break; /* See ticket #2273 */ +#ifndef SQLITE_OMIT_DEPRECATED +/* +** Return TRUE (non-zero) of the statement supplied as an argument needs +** to be recompiled. A statement needs to be recompiled whenever the +** execution environment changes in a way that would alter the program +** that sqlite3_prepare() generates. For example, if new functions or +** collating sequences are registered or if an authorizer function is +** added or changed. +*/ +SQLITE_API int sqlite3_expired(sqlite3_stmt *pStmt){ + Vdbe *p = (Vdbe*)pStmt; + return p==0 || p->expired; +} +#endif + +/* +** Check on a Vdbe to make sure it has not been finalized. Log +** an error and return true if it has been finalized (or is otherwise +** invalid). Return false if it is ok. +*/ +static int vdbeSafety(Vdbe *p){ + if( p->db==0 ){ + sqlite3_log(SQLITE_MISUSE, "API called with finalized prepared statement"); + return 1; + }else{ + return 0; } - u.bn.pCrsr = u.bn.pC->pCursor; - if( u.bn.pCrsr==0 ){ - u.bn.pC->nullRow = 1; - break; +} +static int vdbeSafetyNotNull(Vdbe *p){ + if( p==0 ){ + sqlite3_log(SQLITE_MISUSE, "API called with NULL prepared statement"); + return 1; + }else{ + return vdbeSafety(p); } - u.bn.res = 1; - assert( u.bn.pC->deferredMoveto==0 ); - rc = pOp->opcode==OP_Next ? sqlite3BtreeNext(u.bn.pCrsr, &u.bn.res) : - sqlite3BtreePrevious(u.bn.pCrsr, &u.bn.res); - u.bn.pC->nullRow = (u8)u.bn.res; - u.bn.pC->cacheStatus = CACHE_STALE; - if( u.bn.res==0 ){ - pc = pOp->p2 - 1; - if( pOp->p5 ) p->aCounter[pOp->p5-1]++; -#ifdef SQLITE_TEST - sqlite3_search_count++; +} + +/* +** The following routine destroys a virtual machine that is created by +** the sqlite3_compile() routine. The integer returned is an SQLITE_ +** success/failure code that describes the result of executing the virtual +** machine. +** +** This routine sets the error code and string returned by +** sqlite3_errcode(), sqlite3_errmsg() and sqlite3_errmsg16(). +*/ +SQLITE_API int sqlite3_finalize(sqlite3_stmt *pStmt){ + int rc; + if( pStmt==0 ){ + /* IMPLEMENTATION-OF: R-57228-12904 Invoking sqlite3_finalize() on a NULL + ** pointer is a harmless no-op. */ + rc = SQLITE_OK; + }else{ + Vdbe *v = (Vdbe*)pStmt; + sqlite3 *db = v->db; +#if SQLITE_THREADSAFE + sqlite3_mutex *mutex; +#endif + if( vdbeSafety(v) ) return SQLITE_MISUSE_BKPT; +#if SQLITE_THREADSAFE + mutex = v->db->mutex; #endif + sqlite3_mutex_enter(mutex); + rc = sqlite3VdbeFinalize(v); + rc = sqlite3ApiExit(db, rc); + sqlite3_mutex_leave(mutex); } - u.bn.pC->rowidIsValid = 0; - break; + return rc; } -/* Opcode: IdxInsert P1 P2 P3 * P5 +/* +** Terminate the current execution of an SQL statement and reset it +** back to its starting state so that it can be reused. A success code from +** the prior execution is returned. ** -** Register P2 holds a SQL index key made using the -** MakeRecord instructions. This opcode writes that key -** into the index P1. Data for the entry is nil. -** -** P3 is a flag that provides a hint to the b-tree layer that this -** insert is likely to be an append. -** -** This instruction only works for indices. The equivalent instruction -** for tables is OP_Insert. +** This routine sets the error code and string returned by +** sqlite3_errcode(), sqlite3_errmsg() and sqlite3_errmsg16(). */ -case OP_IdxInsert: { /* in2 */ -#if 0 /* local variables moved into u.bo */ - VdbeCursor *pC; - BtCursor *pCrsr; - int nKey; - const char *zKey; -#endif /* local variables moved into u.bo */ - - assert( pOp->p1>=0 && pOp->p1nCursor ); - u.bo.pC = p->apCsr[pOp->p1]; - assert( u.bo.pC!=0 ); - assert( pIn2->flags & MEM_Blob ); - u.bo.pCrsr = u.bo.pC->pCursor; - if( ALWAYS(u.bo.pCrsr!=0) ){ - assert( u.bo.pC->isTable==0 ); - rc = ExpandBlob(pIn2); - if( rc==SQLITE_OK ){ - u.bo.nKey = pIn2->n; - u.bo.zKey = pIn2->z; - rc = sqlite3BtreeInsert(u.bo.pCrsr, u.bo.zKey, u.bo.nKey, "", 0, 0, pOp->p3, - ((pOp->p5 & OPFLAG_USESEEKRESULT) ? u.bo.pC->seekResult : 0) - ); - assert( u.bo.pC->deferredMoveto==0 ); - u.bo.pC->cacheStatus = CACHE_STALE; - } +SQLITE_API int sqlite3_reset(sqlite3_stmt *pStmt){ + int rc; + if( pStmt==0 ){ + rc = SQLITE_OK; + }else{ + Vdbe *v = (Vdbe*)pStmt; + sqlite3_mutex_enter(v->db->mutex); + rc = sqlite3VdbeReset(v); + sqlite3VdbeRewind(v); + assert( (rc & (v->db->errMask))==rc ); + rc = sqlite3ApiExit(v->db, rc); + sqlite3_mutex_leave(v->db->mutex); } - break; + return rc; } -/* Opcode: IdxDelete P1 P2 P3 * * -** -** The content of P3 registers starting at register P2 form -** an unpacked index key. This opcode removes that entry from the -** index opened by cursor P1. +/* +** Set all the parameters in the compiled SQL statement to NULL. */ -case OP_IdxDelete: { -#if 0 /* local variables moved into u.bp */ - VdbeCursor *pC; - BtCursor *pCrsr; - int res; - UnpackedRecord r; -#endif /* local variables moved into u.bp */ +SQLITE_API int sqlite3_clear_bindings(sqlite3_stmt *pStmt){ + int i; + int rc = SQLITE_OK; + Vdbe *p = (Vdbe*)pStmt; +#if SQLITE_THREADSAFE + sqlite3_mutex *mutex = ((Vdbe*)pStmt)->db->mutex; +#endif + sqlite3_mutex_enter(mutex); + for(i=0; inVar; i++){ + sqlite3VdbeMemRelease(&p->aVar[i]); + p->aVar[i].flags = MEM_Null; + } + if( p->isPrepareV2 && p->expmask ){ + p->expired = 1; + } + sqlite3_mutex_leave(mutex); + return rc; +} - assert( pOp->p3>0 ); - assert( pOp->p2>0 && pOp->p2+pOp->p3<=p->nMem+1 ); - assert( pOp->p1>=0 && pOp->p1nCursor ); - u.bp.pC = p->apCsr[pOp->p1]; - assert( u.bp.pC!=0 ); - u.bp.pCrsr = u.bp.pC->pCursor; - if( ALWAYS(u.bp.pCrsr!=0) ){ - u.bp.r.pKeyInfo = u.bp.pC->pKeyInfo; - u.bp.r.nField = (u16)pOp->p3; - u.bp.r.flags = 0; - u.bp.r.aMem = &p->aMem[pOp->p2]; - rc = sqlite3BtreeMovetoUnpacked(u.bp.pCrsr, &u.bp.r, 0, 0, &u.bp.res); - if( rc==SQLITE_OK && u.bp.res==0 ){ - rc = sqlite3BtreeDelete(u.bp.pCrsr); - } - assert( u.bp.pC->deferredMoveto==0 ); - u.bp.pC->cacheStatus = CACHE_STALE; + +/**************************** sqlite3_value_ ******************************* +** The following routines extract information from a Mem or sqlite3_value +** structure. +*/ +SQLITE_API const void *sqlite3_value_blob(sqlite3_value *pVal){ + Mem *p = (Mem*)pVal; + if( p->flags & (MEM_Blob|MEM_Str) ){ + sqlite3VdbeMemExpandBlob(p); + p->flags &= ~MEM_Str; + p->flags |= MEM_Blob; + return p->n ? p->z : 0; + }else{ + return sqlite3_value_text(pVal); } - break; +} +SQLITE_API int sqlite3_value_bytes(sqlite3_value *pVal){ + return sqlite3ValueBytes(pVal, SQLITE_UTF8); +} +SQLITE_API int sqlite3_value_bytes16(sqlite3_value *pVal){ + return sqlite3ValueBytes(pVal, SQLITE_UTF16NATIVE); +} +SQLITE_API double sqlite3_value_double(sqlite3_value *pVal){ + return sqlite3VdbeRealValue((Mem*)pVal); +} +SQLITE_API int sqlite3_value_int(sqlite3_value *pVal){ + return (int)sqlite3VdbeIntValue((Mem*)pVal); +} +SQLITE_API sqlite_int64 sqlite3_value_int64(sqlite3_value *pVal){ + return sqlite3VdbeIntValue((Mem*)pVal); +} +SQLITE_API const unsigned char *sqlite3_value_text(sqlite3_value *pVal){ + return (const unsigned char *)sqlite3ValueText(pVal, SQLITE_UTF8); +} +#ifndef SQLITE_OMIT_UTF16 +SQLITE_API const void *sqlite3_value_text16(sqlite3_value* pVal){ + return sqlite3ValueText(pVal, SQLITE_UTF16NATIVE); +} +SQLITE_API const void *sqlite3_value_text16be(sqlite3_value *pVal){ + return sqlite3ValueText(pVal, SQLITE_UTF16BE); +} +SQLITE_API const void *sqlite3_value_text16le(sqlite3_value *pVal){ + return sqlite3ValueText(pVal, SQLITE_UTF16LE); +} +#endif /* SQLITE_OMIT_UTF16 */ +SQLITE_API int sqlite3_value_type(sqlite3_value* pVal){ + return pVal->type; } -/* Opcode: IdxRowid P1 P2 * * * -** -** Write into register P2 an integer which is the last entry in the record at -** the end of the index key pointed to by cursor P1. This integer should be -** the rowid of the table entry to which this index entry points. +/**************************** sqlite3_result_ ******************************* +** The following routines are used by user-defined functions to specify +** the function result. ** -** See also: Rowid, MakeRecord. +** The setStrOrError() funtion calls sqlite3VdbeMemSetStr() to store the +** result as a string or blob but if the string or blob is too large, it +** then sets the error code to SQLITE_TOOBIG */ -case OP_IdxRowid: { /* out2-prerelease */ -#if 0 /* local variables moved into u.bq */ - BtCursor *pCrsr; - VdbeCursor *pC; - i64 rowid; -#endif /* local variables moved into u.bq */ +static void setResultStrOrError( + sqlite3_context *pCtx, /* Function context */ + const char *z, /* String pointer */ + int n, /* Bytes in string, or negative */ + u8 enc, /* Encoding of z. 0 for BLOBs */ + void (*xDel)(void*) /* Destructor function */ +){ + if( sqlite3VdbeMemSetStr(&pCtx->s, z, n, enc, xDel)==SQLITE_TOOBIG ){ + sqlite3_result_error_toobig(pCtx); + } +} +SQLITE_API void sqlite3_result_blob( + sqlite3_context *pCtx, + const void *z, + int n, + void (*xDel)(void *) +){ + assert( n>=0 ); + assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); + setResultStrOrError(pCtx, z, n, 0, xDel); +} +SQLITE_API void sqlite3_result_double(sqlite3_context *pCtx, double rVal){ + assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); + sqlite3VdbeMemSetDouble(&pCtx->s, rVal); +} +SQLITE_API void sqlite3_result_error(sqlite3_context *pCtx, const char *z, int n){ + assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); + pCtx->isError = SQLITE_ERROR; + sqlite3VdbeMemSetStr(&pCtx->s, z, n, SQLITE_UTF8, SQLITE_TRANSIENT); +} +#ifndef SQLITE_OMIT_UTF16 +SQLITE_API void sqlite3_result_error16(sqlite3_context *pCtx, const void *z, int n){ + assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); + pCtx->isError = SQLITE_ERROR; + sqlite3VdbeMemSetStr(&pCtx->s, z, n, SQLITE_UTF16NATIVE, SQLITE_TRANSIENT); +} +#endif +SQLITE_API void sqlite3_result_int(sqlite3_context *pCtx, int iVal){ + assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); + sqlite3VdbeMemSetInt64(&pCtx->s, (i64)iVal); +} +SQLITE_API void sqlite3_result_int64(sqlite3_context *pCtx, i64 iVal){ + assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); + sqlite3VdbeMemSetInt64(&pCtx->s, iVal); +} +SQLITE_API void sqlite3_result_null(sqlite3_context *pCtx){ + assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); + sqlite3VdbeMemSetNull(&pCtx->s); +} +SQLITE_API void sqlite3_result_text( + sqlite3_context *pCtx, + const char *z, + int n, + void (*xDel)(void *) +){ + assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); + setResultStrOrError(pCtx, z, n, SQLITE_UTF8, xDel); +} +#ifndef SQLITE_OMIT_UTF16 +SQLITE_API void sqlite3_result_text16( + sqlite3_context *pCtx, + const void *z, + int n, + void (*xDel)(void *) +){ + assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); + setResultStrOrError(pCtx, z, n, SQLITE_UTF16NATIVE, xDel); +} +SQLITE_API void sqlite3_result_text16be( + sqlite3_context *pCtx, + const void *z, + int n, + void (*xDel)(void *) +){ + assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); + setResultStrOrError(pCtx, z, n, SQLITE_UTF16BE, xDel); +} +SQLITE_API void sqlite3_result_text16le( + sqlite3_context *pCtx, + const void *z, + int n, + void (*xDel)(void *) +){ + assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); + setResultStrOrError(pCtx, z, n, SQLITE_UTF16LE, xDel); +} +#endif /* SQLITE_OMIT_UTF16 */ +SQLITE_API void sqlite3_result_value(sqlite3_context *pCtx, sqlite3_value *pValue){ + assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); + sqlite3VdbeMemCopy(&pCtx->s, pValue); +} +SQLITE_API void sqlite3_result_zeroblob(sqlite3_context *pCtx, int n){ + assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); + sqlite3VdbeMemSetZeroBlob(&pCtx->s, n); +} +SQLITE_API void sqlite3_result_error_code(sqlite3_context *pCtx, int errCode){ + pCtx->isError = errCode; + if( pCtx->s.flags & MEM_Null ){ + sqlite3VdbeMemSetStr(&pCtx->s, sqlite3ErrStr(errCode), -1, + SQLITE_UTF8, SQLITE_STATIC); + } +} - assert( pOp->p1>=0 && pOp->p1nCursor ); - u.bq.pC = p->apCsr[pOp->p1]; - assert( u.bq.pC!=0 ); - u.bq.pCrsr = u.bq.pC->pCursor; - if( ALWAYS(u.bq.pCrsr!=0) ){ - rc = sqlite3VdbeCursorMoveto(u.bq.pC); - if( NEVER(rc) ) goto abort_due_to_error; - assert( u.bq.pC->deferredMoveto==0 ); - assert( u.bq.pC->isTable==0 ); - if( !u.bq.pC->nullRow ){ - rc = sqlite3VdbeIdxRowid(db, u.bq.pCrsr, &u.bq.rowid); - if( rc!=SQLITE_OK ){ - goto abort_due_to_error; +/* Force an SQLITE_TOOBIG error. */ +SQLITE_API void sqlite3_result_error_toobig(sqlite3_context *pCtx){ + assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); + pCtx->isError = SQLITE_TOOBIG; + sqlite3VdbeMemSetStr(&pCtx->s, "string or blob too big", -1, + SQLITE_UTF8, SQLITE_STATIC); +} + +/* An SQLITE_NOMEM error. */ +SQLITE_API void sqlite3_result_error_nomem(sqlite3_context *pCtx){ + assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); + sqlite3VdbeMemSetNull(&pCtx->s); + pCtx->isError = SQLITE_NOMEM; + pCtx->s.db->mallocFailed = 1; +} + +/* +** This function is called after a transaction has been committed. It +** invokes callbacks registered with sqlite3_wal_hook() as required. +*/ +static int doWalCallbacks(sqlite3 *db){ + int rc = SQLITE_OK; +#ifndef SQLITE_OMIT_WAL + int i; + for(i=0; inDb; i++){ + Btree *pBt = db->aDb[i].pBt; + if( pBt ){ + int nEntry = sqlite3PagerWalCallback(sqlite3BtreePager(pBt)); + if( db->xWalCallback && nEntry>0 && rc==SQLITE_OK ){ + rc = db->xWalCallback(db->pWalArg, db, db->aDb[i].zName, nEntry); } - MemSetTypeFlag(pOut, MEM_Int); - pOut->u.i = u.bq.rowid; } } - break; +#endif + return rc; } -/* Opcode: IdxGE P1 P2 P3 P4 P5 -** -** The P4 register values beginning with P3 form an unpacked index -** key that omits the ROWID. Compare this key value against the index -** that P1 is currently pointing to, ignoring the ROWID on the P1 index. -** -** If the P1 index entry is greater than or equal to the key value -** then jump to P2. Otherwise fall through to the next instruction. -** -** If P5 is non-zero then the key value is increased by an epsilon -** prior to the comparison. This make the opcode work like IdxGT except -** that if the key from register P3 is a prefix of the key in the cursor, -** the result is false whereas it would be true with IdxGT. -*/ -/* Opcode: IdxLT P1 P2 P3 * P5 -** -** The P4 register values beginning with P3 form an unpacked index -** key that omits the ROWID. Compare this key value against the index -** that P1 is currently pointing to, ignoring the ROWID on the P1 index. -** -** If the P1 index entry is less than the key value then jump to P2. -** Otherwise fall through to the next instruction. +/* +** Execute the statement pStmt, either until a row of data is ready, the +** statement is completely executed or an error occurs. ** -** If P5 is non-zero then the key value is increased by an epsilon prior -** to the comparison. This makes the opcode work like IdxLE. +** This routine implements the bulk of the logic behind the sqlite_step() +** API. The only thing omitted is the automatic recompile if a +** schema change has occurred. That detail is handled by the +** outer sqlite3_step() wrapper procedure. */ -case OP_IdxLT: /* jump, in3 */ -case OP_IdxGE: { /* jump, in3 */ -#if 0 /* local variables moved into u.br */ - VdbeCursor *pC; - int res; - UnpackedRecord r; -#endif /* local variables moved into u.br */ +static int sqlite3Step(Vdbe *p){ + sqlite3 *db; + int rc; - assert( pOp->p1>=0 && pOp->p1nCursor ); - u.br.pC = p->apCsr[pOp->p1]; - assert( u.br.pC!=0 ); - if( ALWAYS(u.br.pC->pCursor!=0) ){ - assert( u.br.pC->deferredMoveto==0 ); - assert( pOp->p5==0 || pOp->p5==1 ); - assert( pOp->p4type==P4_INT32 ); - u.br.r.pKeyInfo = u.br.pC->pKeyInfo; - u.br.r.nField = (u16)pOp->p4.i; - if( pOp->p5 ){ - u.br.r.flags = UNPACKED_INCRKEY | UNPACKED_IGNORE_ROWID; + assert(p); + if( p->magic!=VDBE_MAGIC_RUN ){ + /* We used to require that sqlite3_reset() be called before retrying + ** sqlite3_step() after any error or after SQLITE_DONE. But beginning + ** with version 3.7.0, we changed this so that sqlite3_reset() would + ** be called automatically instead of throwing the SQLITE_MISUSE error. + ** This "automatic-reset" change is not technically an incompatibility, + ** since any application that receives an SQLITE_MISUSE is broken by + ** definition. + ** + ** Nevertheless, some published applications that were originally written + ** for version 3.6.23 or earlier do in fact depend on SQLITE_MISUSE + ** returns, and those were broken by the automatic-reset change. As a + ** a work-around, the SQLITE_OMIT_AUTORESET compile-time restores the + ** legacy behavior of returning SQLITE_MISUSE for cases where the + ** previous sqlite3_step() returned something other than a SQLITE_LOCKED + ** or SQLITE_BUSY error. + */ +#ifdef SQLITE_OMIT_AUTORESET + if( p->rc==SQLITE_BUSY || p->rc==SQLITE_LOCKED ){ + sqlite3_reset((sqlite3_stmt*)p); }else{ - u.br.r.flags = UNPACKED_IGNORE_ROWID; + return SQLITE_MISUSE_BKPT; } - u.br.r.aMem = &p->aMem[pOp->p3]; - rc = sqlite3VdbeIdxKeyCompare(u.br.pC, &u.br.r, &u.br.res); - if( pOp->opcode==OP_IdxLT ){ - u.br.res = -u.br.res; - }else{ - assert( pOp->opcode==OP_IdxGE ); - u.br.res++; +#else + sqlite3_reset((sqlite3_stmt*)p); +#endif + } + + /* Check that malloc() has not failed. If it has, return early. */ + db = p->db; + if( db->mallocFailed ){ + p->rc = SQLITE_NOMEM; + return SQLITE_NOMEM; + } + + if( p->pc<=0 && p->expired ){ + p->rc = SQLITE_SCHEMA; + rc = SQLITE_ERROR; + goto end_of_step; + } + if( p->pc<0 ){ + /* If there are no other statements currently running, then + ** reset the interrupt flag. This prevents a call to sqlite3_interrupt + ** from interrupting a statement that has not yet started. + */ + if( db->activeVdbeCnt==0 ){ + db->u1.isInterrupted = 0; } - if( u.br.res>0 ){ - pc = pOp->p2 - 1 ; + + assert( db->writeVdbeCnt>0 || db->autoCommit==0 || db->nDeferredCons==0 ); + +#ifndef SQLITE_OMIT_TRACE + if( db->xProfile && !db->init.busy ){ + sqlite3OsCurrentTimeInt64(db->pVfs, &p->startTime); } +#endif + + db->activeVdbeCnt++; + if( p->readOnly==0 ) db->writeVdbeCnt++; + p->pc = 0; + } +#ifndef SQLITE_OMIT_EXPLAIN + if( p->explain ){ + rc = sqlite3VdbeList(p); + }else +#endif /* SQLITE_OMIT_EXPLAIN */ + { + db->vdbeExecCnt++; + rc = sqlite3VdbeExec(p); + db->vdbeExecCnt--; } - break; -} -/* Opcode: Destroy P1 P2 P3 * * -** -** Delete an entire database table or index whose root page in the database -** file is given by P1. -** -** The table being destroyed is in the main database file if P3==0. If -** P3==1 then the table to be clear is in the auxiliary database file -** that is used to store tables create using CREATE TEMPORARY TABLE. -** -** If AUTOVACUUM is enabled then it is possible that another root page -** might be moved into the newly deleted root page in order to keep all -** root pages contiguous at the beginning of the database. The former -** value of the root page that moved - its value before the move occurred - -** is stored in register P2. If no page -** movement was required (because the table being dropped was already -** the last one in the database) then a zero is stored in register P2. -** If AUTOVACUUM is disabled then a zero is stored in register P2. -** -** See also: Clear -*/ -case OP_Destroy: { /* out2-prerelease */ -#if 0 /* local variables moved into u.bs */ - int iMoved; - int iCnt; - Vdbe *pVdbe; - int iDb; -#endif /* local variables moved into u.bs */ -#ifndef SQLITE_OMIT_VIRTUALTABLE - u.bs.iCnt = 0; - for(u.bs.pVdbe=db->pVdbe; u.bs.pVdbe; u.bs.pVdbe = u.bs.pVdbe->pNext){ - if( u.bs.pVdbe->magic==VDBE_MAGIC_RUN && u.bs.pVdbe->inVtabMethod<2 && u.bs.pVdbe->pc>=0 ){ - u.bs.iCnt++; - } +#ifndef SQLITE_OMIT_TRACE + /* Invoke the profile callback if there is one + */ + if( rc!=SQLITE_ROW && db->xProfile && !db->init.busy && p->zSql ){ + sqlite3_int64 iNow; + sqlite3OsCurrentTimeInt64(db->pVfs, &iNow); + db->xProfile(db->pProfileArg, p->zSql, (iNow - p->startTime)*1000000); } -#else - u.bs.iCnt = db->activeVdbeCnt; #endif - if( u.bs.iCnt>1 ){ - rc = SQLITE_LOCKED; - p->errorAction = OE_Abort; - }else{ - u.bs.iDb = pOp->p3; - assert( u.bs.iCnt==1 ); - assert( (p->btreeMask & (1<aDb[u.bs.iDb].pBt, pOp->p1, &u.bs.iMoved); - MemSetTypeFlag(pOut, MEM_Int); - pOut->u.i = u.bs.iMoved; -#ifndef SQLITE_OMIT_AUTOVACUUM - if( rc==SQLITE_OK && u.bs.iMoved!=0 ){ - sqlite3RootPageMoved(&db->aDb[u.bs.iDb], u.bs.iMoved, pOp->p1); + + if( rc==SQLITE_DONE ){ + assert( p->rc==SQLITE_OK ); + p->rc = doWalCallbacks(db); + if( p->rc!=SQLITE_OK ){ + rc = SQLITE_ERROR; } -#endif } - break; -} - -/* Opcode: Clear P1 P2 P3 -** -** Delete all contents of the database table or index whose root page -** in the database file is given by P1. But, unlike Destroy, do not -** remove the table or index from the database file. -** -** The table being clear is in the main database file if P2==0. If -** P2==1 then the table to be clear is in the auxiliary database file -** that is used to store tables create using CREATE TEMPORARY TABLE. -** -** If the P3 value is non-zero, then the table referred to must be an -** intkey table (an SQL table, not an index). In this case the row change -** count is incremented by the number of rows in the table being cleared. -** If P3 is greater than zero, then the value stored in register P3 is -** also incremented by the number of rows in the table being cleared. -** -** See also: Destroy -*/ -case OP_Clear: { -#if 0 /* local variables moved into u.bt */ - int nChange; -#endif /* local variables moved into u.bt */ - u.bt.nChange = 0; - assert( (p->btreeMask & (1<p2))!=0 ); - rc = sqlite3BtreeClearTable( - db->aDb[pOp->p2].pBt, pOp->p1, (pOp->p3 ? &u.bt.nChange : 0) + db->errCode = rc; + if( SQLITE_NOMEM==sqlite3ApiExit(p->db, p->rc) ){ + p->rc = SQLITE_NOMEM; + } +end_of_step: + /* At this point local variable rc holds the value that should be + ** returned if this statement was compiled using the legacy + ** sqlite3_prepare() interface. According to the docs, this can only + ** be one of the values in the first assert() below. Variable p->rc + ** contains the value that would be returned if sqlite3_finalize() + ** were called on statement p. + */ + assert( rc==SQLITE_ROW || rc==SQLITE_DONE || rc==SQLITE_ERROR + || rc==SQLITE_BUSY || rc==SQLITE_MISUSE ); - if( pOp->p3 ){ - p->nChange += u.bt.nChange; - if( pOp->p3>0 ){ - p->aMem[pOp->p3].u.i += u.bt.nChange; - } + assert( p->rc!=SQLITE_ROW && p->rc!=SQLITE_DONE ); + if( p->isPrepareV2 && rc!=SQLITE_ROW && rc!=SQLITE_DONE ){ + /* If this statement was prepared using sqlite3_prepare_v2(), and an + ** error has occured, then return the error code in p->rc to the + ** caller. Set the error code in the database handle to the same value. + */ + rc = sqlite3VdbeTransferError(p); } - break; + return (rc&db->errMask); } -/* Opcode: CreateTable P1 P2 * * * -** -** Allocate a new table in the main database file if P1==0 or in the -** auxiliary database file if P1==1 or in an attached database if -** P1>1. Write the root page number of the new table into -** register P2 -** -** The difference between a table and an index is this: A table must -** have a 4-byte integer key and can have arbitrary data. An index -** has an arbitrary key but no data. -** -** See also: CreateIndex +/* +** The maximum number of times that a statement will try to reparse +** itself before giving up and returning SQLITE_SCHEMA. */ -/* Opcode: CreateIndex P1 P2 * * * -** -** Allocate a new index in the main database file if P1==0 or in the -** auxiliary database file if P1==1 or in an attached database if -** P1>1. Write the root page number of the new table into -** register P2. -** -** See documentation on OP_CreateTable for additional information. +#ifndef SQLITE_MAX_SCHEMA_RETRY +# define SQLITE_MAX_SCHEMA_RETRY 5 +#endif + +/* +** This is the top-level implementation of sqlite3_step(). Call +** sqlite3Step() to do most of the work. If a schema error occurs, +** call sqlite3Reprepare() and try again. */ -case OP_CreateIndex: /* out2-prerelease */ -case OP_CreateTable: { /* out2-prerelease */ -#if 0 /* local variables moved into u.bu */ - int pgno; - int flags; - Db *pDb; -#endif /* local variables moved into u.bu */ +SQLITE_API int sqlite3_step(sqlite3_stmt *pStmt){ + int rc = SQLITE_OK; /* Result from sqlite3Step() */ + int rc2 = SQLITE_OK; /* Result from sqlite3Reprepare() */ + Vdbe *v = (Vdbe*)pStmt; /* the prepared statement */ + int cnt = 0; /* Counter to prevent infinite loop of reprepares */ + sqlite3 *db; /* The database connection */ - u.bu.pgno = 0; - assert( pOp->p1>=0 && pOp->p1nDb ); - assert( (p->btreeMask & (1<p1))!=0 ); - u.bu.pDb = &db->aDb[pOp->p1]; - assert( u.bu.pDb->pBt!=0 ); - if( pOp->opcode==OP_CreateTable ){ - /* u.bu.flags = BTREE_INTKEY; */ - u.bu.flags = BTREE_LEAFDATA|BTREE_INTKEY; - }else{ - u.bu.flags = BTREE_ZERODATA; + if( vdbeSafetyNotNull(v) ){ + return SQLITE_MISUSE_BKPT; } - rc = sqlite3BtreeCreateTable(u.bu.pDb->pBt, &u.bu.pgno, u.bu.flags); - pOut->u.i = u.bu.pgno; - MemSetTypeFlag(pOut, MEM_Int); - break; + db = v->db; + sqlite3_mutex_enter(db->mutex); + while( (rc = sqlite3Step(v))==SQLITE_SCHEMA + && cnt++ < SQLITE_MAX_SCHEMA_RETRY + && (rc2 = rc = sqlite3Reprepare(v))==SQLITE_OK ){ + sqlite3_reset(pStmt); + assert( v->expired==0 ); + } + if( rc2!=SQLITE_OK && ALWAYS(v->isPrepareV2) && ALWAYS(db->pErr) ){ + /* This case occurs after failing to recompile an sql statement. + ** The error message from the SQL compiler has already been loaded + ** into the database handle. This block copies the error message + ** from the database handle into the statement and sets the statement + ** program counter to 0 to ensure that when the statement is + ** finalized or reset the parser error message is available via + ** sqlite3_errmsg() and sqlite3_errcode(). + */ + const char *zErr = (const char *)sqlite3_value_text(db->pErr); + sqlite3DbFree(db, v->zErrMsg); + if( !db->mallocFailed ){ + v->zErrMsg = sqlite3DbStrDup(db, zErr); + v->rc = rc2; + } else { + v->zErrMsg = 0; + v->rc = rc = SQLITE_NOMEM; + } + } + rc = sqlite3ApiExit(db, rc); + sqlite3_mutex_leave(db->mutex); + return rc; } -/* Opcode: ParseSchema P1 P2 * P4 * -** -** Read and parse all entries from the SQLITE_MASTER table of database P1 -** that match the WHERE clause P4. P2 is the "force" flag. Always do -** the parsing if P2 is true. If P2 is false, then this routine is a -** no-op if the schema is not currently loaded. In other words, if P2 -** is false, the SQLITE_MASTER table is only parsed if the rest of the -** schema is already loaded into the symbol table. -** -** This opcode invokes the parser to create a new virtual machine, -** then runs the new virtual machine. It is thus a re-entrant opcode. -*/ -case OP_ParseSchema: { -#if 0 /* local variables moved into u.bv */ - int iDb; - const char *zMaster; - char *zSql; - InitData initData; -#endif /* local variables moved into u.bv */ - - u.bv.iDb = pOp->p1; - assert( u.bv.iDb>=0 && u.bv.iDbnDb ); - - /* If pOp->p2 is 0, then this opcode is being executed to read a - ** single row, for example the row corresponding to a new index - ** created by this VDBE, from the sqlite_master table. It only - ** does this if the corresponding in-memory schema is currently - ** loaded. Otherwise, the new index definition can be loaded along - ** with the rest of the schema when it is required. - ** - ** Although the mutex on the BtShared object that corresponds to - ** database u.bv.iDb (the database containing the sqlite_master table - ** read by this instruction) is currently held, it is necessary to - ** obtain the mutexes on all attached databases before checking if - ** the schema of u.bv.iDb is loaded. This is because, at the start of - ** the sqlite3_exec() call below, SQLite will invoke - ** sqlite3BtreeEnterAll(). If all mutexes are not already held, the - ** u.bv.iDb mutex may be temporarily released to avoid deadlock. If - ** this happens, then some other thread may delete the in-memory - ** schema of database u.bv.iDb before the SQL statement runs. The schema - ** will not be reloaded becuase the db->init.busy flag is set. This - ** can result in a "no such table: sqlite_master" or "malformed - ** database schema" error being returned to the user. - */ - assert( sqlite3BtreeHoldsMutex(db->aDb[u.bv.iDb].pBt) ); - sqlite3BtreeEnterAll(db); - if( pOp->p2 || DbHasProperty(db, u.bv.iDb, DB_SchemaLoaded) ){ - u.bv.zMaster = SCHEMA_TABLE(u.bv.iDb); - u.bv.initData.db = db; - u.bv.initData.iDb = pOp->p1; - u.bv.initData.pzErrMsg = &p->zErrMsg; - u.bv.zSql = sqlite3MPrintf(db, - "SELECT name, rootpage, sql FROM '%q'.%s WHERE %s", - db->aDb[u.bv.iDb].zName, u.bv.zMaster, pOp->p4.z); - if( u.bv.zSql==0 ){ - rc = SQLITE_NOMEM; - }else{ - (void)sqlite3SafetyOff(db); - assert( db->init.busy==0 ); - db->init.busy = 1; - u.bv.initData.rc = SQLITE_OK; - assert( !db->mallocFailed ); - rc = sqlite3_exec(db, u.bv.zSql, sqlite3InitCallback, &u.bv.initData, 0); - if( rc==SQLITE_OK ) rc = u.bv.initData.rc; - sqlite3DbFree(db, u.bv.zSql); - db->init.busy = 0; - (void)sqlite3SafetyOn(db); - } - } - sqlite3BtreeLeaveAll(db); - if( rc==SQLITE_NOMEM ){ - goto no_mem; - } - break; -} - -#if !defined(SQLITE_OMIT_ANALYZE) -/* Opcode: LoadAnalysis P1 * * * * -** -** Read the sqlite_stat1 table for database P1 and load the content -** of that table into the internal index hash table. This will cause -** the analysis to be used when preparing all subsequent queries. -*/ -case OP_LoadAnalysis: { - assert( pOp->p1>=0 && pOp->p1nDb ); - rc = sqlite3AnalysisLoad(db, pOp->p1); - break; -} -#endif /* !defined(SQLITE_OMIT_ANALYZE) */ - -/* Opcode: DropTable P1 * * P4 * -** -** Remove the internal (in-memory) data structures that describe -** the table named P4 in database P1. This is called after a table -** is dropped in order to keep the internal representation of the -** schema consistent with what is on disk. +/* +** Extract the user data from a sqlite3_context structure and return a +** pointer to it. */ -case OP_DropTable: { - sqlite3UnlinkAndDeleteTable(db, pOp->p1, pOp->p4.z); - break; +SQLITE_API void *sqlite3_user_data(sqlite3_context *p){ + assert( p && p->pFunc ); + return p->pFunc->pUserData; } -/* Opcode: DropIndex P1 * * P4 * +/* +** Extract the user data from a sqlite3_context structure and return a +** pointer to it. ** -** Remove the internal (in-memory) data structures that describe -** the index named P4 in database P1. This is called after an index -** is dropped in order to keep the internal representation of the -** schema consistent with what is on disk. +** IMPLEMENTATION-OF: R-46798-50301 The sqlite3_context_db_handle() interface +** returns a copy of the pointer to the database connection (the 1st +** parameter) of the sqlite3_create_function() and +** sqlite3_create_function16() routines that originally registered the +** application defined function. */ -case OP_DropIndex: { - sqlite3UnlinkAndDeleteIndex(db, pOp->p1, pOp->p4.z); - break; +SQLITE_API sqlite3 *sqlite3_context_db_handle(sqlite3_context *p){ + assert( p && p->pFunc ); + return p->s.db; } -/* Opcode: DropTrigger P1 * * P4 * -** -** Remove the internal (in-memory) data structures that describe -** the trigger named P4 in database P1. This is called after a trigger -** is dropped in order to keep the internal representation of the -** schema consistent with what is on disk. +/* +** The following is the implementation of an SQL function that always +** fails with an error message stating that the function is used in the +** wrong context. The sqlite3_overload_function() API might construct +** SQL function that use this routine so that the functions will exist +** for name resolution but are actually overloaded by the xFindFunction +** method of virtual tables. */ -case OP_DropTrigger: { - sqlite3UnlinkAndDeleteTrigger(db, pOp->p1, pOp->p4.z); - break; +SQLITE_PRIVATE void sqlite3InvalidFunction( + sqlite3_context *context, /* The function calling context */ + int NotUsed, /* Number of arguments to the function */ + sqlite3_value **NotUsed2 /* Value of each argument */ +){ + const char *zName = context->pFunc->zName; + char *zErr; + UNUSED_PARAMETER2(NotUsed, NotUsed2); + zErr = sqlite3_mprintf( + "unable to use function %s in the requested context", zName); + sqlite3_result_error(context, zErr, -1); + sqlite3_free(zErr); } - -#ifndef SQLITE_OMIT_INTEGRITY_CHECK -/* Opcode: IntegrityCk P1 P2 P3 * P5 -** -** Do an analysis of the currently open database. Store in -** register P1 the text of an error message describing any problems. -** If no problems are found, store a NULL in register P1. -** -** The register P3 contains the maximum number of allowed errors. -** At most reg(P3) errors will be reported. -** In other words, the analysis stops as soon as reg(P1) errors are -** seen. Reg(P1) is updated with the number of errors remaining. -** -** The root page numbers of all tables in the database are integer -** stored in reg(P1), reg(P1+1), reg(P1+2), .... There are P2 tables -** total. -** -** If P5 is not zero, the check is done on the auxiliary database -** file, not the main database file. -** -** This opcode is used to implement the integrity_check pragma. +/* +** Allocate or return the aggregate context for a user function. A new +** context is allocated on the first call. Subsequent calls return the +** same context that was returned on prior calls. */ -case OP_IntegrityCk: { -#if 0 /* local variables moved into u.bw */ - int nRoot; /* Number of tables to check. (Number of root pages.) */ - int *aRoot; /* Array of rootpage numbers for tables to be checked */ - int j; /* Loop counter */ - int nErr; /* Number of errors reported */ - char *z; /* Text of the error report */ - Mem *pnErr; /* Register keeping track of errors remaining */ -#endif /* local variables moved into u.bw */ - - u.bw.nRoot = pOp->p2; - assert( u.bw.nRoot>0 ); - u.bw.aRoot = sqlite3DbMallocRaw(db, sizeof(int)*(u.bw.nRoot+1) ); - if( u.bw.aRoot==0 ) goto no_mem; - assert( pOp->p3>0 && pOp->p3<=p->nMem ); - u.bw.pnErr = &p->aMem[pOp->p3]; - assert( (u.bw.pnErr->flags & MEM_Int)!=0 ); - assert( (u.bw.pnErr->flags & (MEM_Str|MEM_Blob))==0 ); - pIn1 = &p->aMem[pOp->p1]; - for(u.bw.j=0; u.bw.jp5nDb ); - assert( (p->btreeMask & (1<p5))!=0 ); - u.bw.z = sqlite3BtreeIntegrityCheck(db->aDb[pOp->p5].pBt, u.bw.aRoot, u.bw.nRoot, - (int)u.bw.pnErr->u.i, &u.bw.nErr); - sqlite3DbFree(db, u.bw.aRoot); - u.bw.pnErr->u.i -= u.bw.nErr; - sqlite3VdbeMemSetNull(pIn1); - if( u.bw.nErr==0 ){ - assert( u.bw.z==0 ); - }else if( u.bw.z==0 ){ - goto no_mem; - }else{ - sqlite3VdbeMemSetStr(pIn1, u.bw.z, -1, SQLITE_UTF8, sqlite3_free); +SQLITE_API void *sqlite3_aggregate_context(sqlite3_context *p, int nByte){ + Mem *pMem; + assert( p && p->pFunc && p->pFunc->xStep ); + assert( sqlite3_mutex_held(p->s.db->mutex) ); + pMem = p->pMem; + testcase( nByte<0 ); + if( (pMem->flags & MEM_Agg)==0 ){ + if( nByte<=0 ){ + sqlite3VdbeMemReleaseExternal(pMem); + pMem->flags = MEM_Null; + pMem->z = 0; + }else{ + sqlite3VdbeMemGrow(pMem, nByte, 0); + pMem->flags = MEM_Agg; + pMem->u.pDef = p->pFunc; + if( pMem->z ){ + memset(pMem->z, 0, nByte); + } + } } - UPDATE_MAX_BLOBSIZE(pIn1); - sqlite3VdbeChangeEncoding(pIn1, encoding); - break; + return (void*)pMem->z; } -#endif /* SQLITE_OMIT_INTEGRITY_CHECK */ -/* Opcode: RowSetAdd P1 P2 * * * -** -** Insert the integer value held by register P2 into a boolean index -** held in register P1. -** -** An assertion fails if P2 is not an integer. +/* +** Return the auxilary data pointer, if any, for the iArg'th argument to +** the user-function defined by pCtx. */ -case OP_RowSetAdd: { /* in2 */ -#if 0 /* local variables moved into u.bx */ - Mem *pIdx; - Mem *pVal; -#endif /* local variables moved into u.bx */ - assert( pOp->p1>0 && pOp->p1<=p->nMem ); - u.bx.pIdx = &p->aMem[pOp->p1]; - assert( pOp->p2>0 && pOp->p2<=p->nMem ); - u.bx.pVal = &p->aMem[pOp->p2]; - assert( (u.bx.pVal->flags & MEM_Int)!=0 ); - if( (u.bx.pIdx->flags & MEM_RowSet)==0 ){ - sqlite3VdbeMemSetRowSet(u.bx.pIdx); - if( (u.bx.pIdx->flags & MEM_RowSet)==0 ) goto no_mem; - } - sqlite3RowSetInsert(u.bx.pIdx->u.pRowSet, u.bx.pVal->u.i); - break; -} +SQLITE_API void *sqlite3_get_auxdata(sqlite3_context *pCtx, int iArg){ + VdbeFunc *pVdbeFunc; -/* Opcode: RowSetRead P1 P2 P3 * * -** -** Extract the smallest value from boolean index P1 and put that value into -** register P3. Or, if boolean index P1 is initially empty, leave P3 -** unchanged and jump to instruction P2. -*/ -case OP_RowSetRead: { /* jump, out3 */ -#if 0 /* local variables moved into u.by */ - Mem *pIdx; - i64 val; -#endif /* local variables moved into u.by */ - assert( pOp->p1>0 && pOp->p1<=p->nMem ); - CHECK_FOR_INTERRUPT; - u.by.pIdx = &p->aMem[pOp->p1]; - pOut = &p->aMem[pOp->p3]; - if( (u.by.pIdx->flags & MEM_RowSet)==0 - || sqlite3RowSetNext(u.by.pIdx->u.pRowSet, &u.by.val)==0 - ){ - /* The boolean index is empty */ - sqlite3VdbeMemSetNull(u.by.pIdx); - pc = pOp->p2 - 1; - }else{ - /* A value was pulled from the index */ - assert( pOp->p3>0 && pOp->p3<=p->nMem ); - sqlite3VdbeMemSetInt64(pOut, u.by.val); + assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); + pVdbeFunc = pCtx->pVdbeFunc; + if( !pVdbeFunc || iArg>=pVdbeFunc->nAux || iArg<0 ){ + return 0; } - break; + return pVdbeFunc->apAux[iArg].pAux; } -/* Opcode: RowSetTest P1 P2 P3 P4 -** -** Register P3 is assumed to hold a 64-bit integer value. If register P1 -** contains a RowSet object and that RowSet object contains -** the value held in P3, jump to register P2. Otherwise, insert the -** integer in P3 into the RowSet and continue on to the -** next opcode. -** -** The RowSet object is optimized for the case where successive sets -** of integers, where each set contains no duplicates. Each set -** of values is identified by a unique P4 value. The first set -** must have P4==0, the final set P4=-1. P4 must be either -1 or -** non-negative. For non-negative values of P4 only the lower 4 -** bits are significant. -** -** This allows optimizations: (a) when P4==0 there is no need to test -** the rowset object for P3, as it is guaranteed not to contain it, -** (b) when P4==-1 there is no need to insert the value, as it will -** never be tested for, and (c) when a value that is part of set X is -** inserted, there is no need to search to see if the same value was -** previously inserted as part of set X (only if it was previously -** inserted as part of some other set). +/* +** Set the auxilary data pointer and delete function, for the iArg'th +** argument to the user-function defined by pCtx. Any previous value is +** deleted by calling the delete function specified when it was set. */ -case OP_RowSetTest: { /* jump, in1, in3 */ -#if 0 /* local variables moved into u.bz */ - int iSet; - int exists; -#endif /* local variables moved into u.bz */ - - u.bz.iSet = pOp->p4.i; - assert( pIn3->flags&MEM_Int ); +SQLITE_API void sqlite3_set_auxdata( + sqlite3_context *pCtx, + int iArg, + void *pAux, + void (*xDelete)(void*) +){ + struct AuxData *pAuxData; + VdbeFunc *pVdbeFunc; + if( iArg<0 ) goto failed; - /* If there is anything other than a rowset object in memory cell P1, - ** delete it now and initialize P1 with an empty rowset - */ - if( (pIn1->flags & MEM_RowSet)==0 ){ - sqlite3VdbeMemSetRowSet(pIn1); - if( (pIn1->flags & MEM_RowSet)==0 ) goto no_mem; + assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); + pVdbeFunc = pCtx->pVdbeFunc; + if( !pVdbeFunc || pVdbeFunc->nAux<=iArg ){ + int nAux = (pVdbeFunc ? pVdbeFunc->nAux : 0); + int nMalloc = sizeof(VdbeFunc) + sizeof(struct AuxData)*iArg; + pVdbeFunc = sqlite3DbRealloc(pCtx->s.db, pVdbeFunc, nMalloc); + if( !pVdbeFunc ){ + goto failed; + } + pCtx->pVdbeFunc = pVdbeFunc; + memset(&pVdbeFunc->apAux[nAux], 0, sizeof(struct AuxData)*(iArg+1-nAux)); + pVdbeFunc->nAux = iArg+1; + pVdbeFunc->pFunc = pCtx->pFunc; } - assert( pOp->p4type==P4_INT32 ); - assert( u.bz.iSet==-1 || u.bz.iSet>=0 ); - if( u.bz.iSet ){ - u.bz.exists = sqlite3RowSetTest(pIn1->u.pRowSet, - (u8)(u.bz.iSet>=0 ? u.bz.iSet & 0xf : 0xff), - pIn3->u.i); - if( u.bz.exists ){ - pc = pOp->p2 - 1; - break; - } + pAuxData = &pVdbeFunc->apAux[iArg]; + if( pAuxData->pAux && pAuxData->xDelete ){ + pAuxData->xDelete(pAuxData->pAux); } - if( u.bz.iSet>=0 ){ - sqlite3RowSetInsert(pIn1->u.pRowSet, pIn3->u.i); + pAuxData->pAux = pAux; + pAuxData->xDelete = xDelete; + return; + +failed: + if( xDelete ){ + xDelete(pAux); } - break; } - -#ifndef SQLITE_OMIT_TRIGGER -/* Opcode: ContextPush * * * +#ifndef SQLITE_OMIT_DEPRECATED +/* +** Return the number of times the Step function of a aggregate has been +** called. ** -** Save the current Vdbe context such that it can be restored by a ContextPop -** opcode. The context stores the last insert row id, the last statement change -** count, and the current statement change count. +** This function is deprecated. Do not use it for new code. It is +** provide only to avoid breaking legacy code. New aggregate function +** implementations should keep their own counts within their aggregate +** context. */ -case OP_ContextPush: { -#if 0 /* local variables moved into u.ca */ - int i; - Context *pContext; -#endif /* local variables moved into u.ca */ - - u.ca.i = p->contextStackTop++; - assert( u.ca.i>=0 ); - /* FIX ME: This should be allocated as part of the vdbe at compile-time */ - if( u.ca.i>=p->contextStackDepth ){ - p->contextStackDepth = u.ca.i+1; - p->contextStack = sqlite3DbReallocOrFree(db, p->contextStack, - sizeof(Context)*(u.ca.i+1)); - if( p->contextStack==0 ) goto no_mem; - } - u.ca.pContext = &p->contextStack[u.ca.i]; - u.ca.pContext->lastRowid = db->lastRowid; - u.ca.pContext->nChange = p->nChange; - break; +SQLITE_API int sqlite3_aggregate_count(sqlite3_context *p){ + assert( p && p->pMem && p->pFunc && p->pFunc->xStep ); + return p->pMem->n; } +#endif -/* Opcode: ContextPop * * * -** -** Restore the Vdbe context to the state it was in when contextPush was last -** executed. The context stores the last insert row id, the last statement -** change count, and the current statement change count. +/* +** Return the number of columns in the result set for the statement pStmt. */ -case OP_ContextPop: { -#if 0 /* local variables moved into u.cb */ - Context *pContext; -#endif /* local variables moved into u.cb */ - u.cb.pContext = &p->contextStack[--p->contextStackTop]; - assert( p->contextStackTop>=0 ); - db->lastRowid = u.cb.pContext->lastRowid; - p->nChange = u.cb.pContext->nChange; - break; +SQLITE_API int sqlite3_column_count(sqlite3_stmt *pStmt){ + Vdbe *pVm = (Vdbe *)pStmt; + return pVm ? pVm->nResColumn : 0; } -#endif /* #ifndef SQLITE_OMIT_TRIGGER */ -#ifndef SQLITE_OMIT_AUTOINCREMENT -/* Opcode: MemMax P1 P2 * * * -** -** Set the value of register P1 to the maximum of its current value -** and the value in register P2. -** -** This instruction throws an error if the memory cell is not initially -** an integer. +/* +** Return the number of values available from the current row of the +** currently executing statement pStmt. */ -case OP_MemMax: { /* in1, in2 */ - sqlite3VdbeMemIntegerify(pIn1); - sqlite3VdbeMemIntegerify(pIn2); - if( pIn1->u.iu.i){ - pIn1->u.i = pIn2->u.i; - } - break; +SQLITE_API int sqlite3_data_count(sqlite3_stmt *pStmt){ + Vdbe *pVm = (Vdbe *)pStmt; + if( pVm==0 || pVm->pResultSet==0 ) return 0; + return pVm->nResColumn; } -#endif /* SQLITE_OMIT_AUTOINCREMENT */ -/* Opcode: IfPos P1 P2 * * * -** -** If the value of register P1 is 1 or greater, jump to P2. -** -** It is illegal to use this instruction on a register that does -** not contain an integer. An assertion fault will result if you try. + +/* +** Check to see if column iCol of the given statement is valid. If +** it is, return a pointer to the Mem for the value of that column. +** If iCol is not valid, return a pointer to a Mem which has a value +** of NULL. */ -case OP_IfPos: { /* jump, in1 */ - assert( pIn1->flags&MEM_Int ); - if( pIn1->u.i>0 ){ - pc = pOp->p2 - 1; +static Mem *columnMem(sqlite3_stmt *pStmt, int i){ + Vdbe *pVm; + Mem *pOut; + + pVm = (Vdbe *)pStmt; + if( pVm && pVm->pResultSet!=0 && inResColumn && i>=0 ){ + sqlite3_mutex_enter(pVm->db->mutex); + pOut = &pVm->pResultSet[i]; + }else{ + /* If the value passed as the second argument is out of range, return + ** a pointer to the following static Mem object which contains the + ** value SQL NULL. Even though the Mem structure contains an element + ** of type i64, on certain architectures (x86) with certain compiler + ** switches (-Os), gcc may align this Mem object on a 4-byte boundary + ** instead of an 8-byte one. This all works fine, except that when + ** running with SQLITE_DEBUG defined the SQLite code sometimes assert()s + ** that a Mem structure is located on an 8-byte boundary. To prevent + ** these assert()s from failing, when building with SQLITE_DEBUG defined + ** using gcc, we force nullMem to be 8-byte aligned using the magical + ** __attribute__((aligned(8))) macro. */ + static const Mem nullMem +#if defined(SQLITE_DEBUG) && defined(__GNUC__) + __attribute__((aligned(8))) +#endif + = {0, "", (double)0, {0}, 0, MEM_Null, SQLITE_NULL, 0, +#ifdef SQLITE_DEBUG + 0, 0, /* pScopyFrom, pFiller */ +#endif + 0, 0 }; + + if( pVm && ALWAYS(pVm->db) ){ + sqlite3_mutex_enter(pVm->db->mutex); + sqlite3Error(pVm->db, SQLITE_RANGE, 0); + } + pOut = (Mem*)&nullMem; } - break; + return pOut; } -/* Opcode: IfNeg P1 P2 * * * +/* +** This function is called after invoking an sqlite3_value_XXX function on a +** column value (i.e. a value returned by evaluating an SQL expression in the +** select list of a SELECT statement) that may cause a malloc() failure. If +** malloc() has failed, the threads mallocFailed flag is cleared and the result +** code of statement pStmt set to SQLITE_NOMEM. ** -** If the value of register P1 is less than zero, jump to P2. +** Specifically, this is called from within: ** -** It is illegal to use this instruction on a register that does -** not contain an integer. An assertion fault will result if you try. +** sqlite3_column_int() +** sqlite3_column_int64() +** sqlite3_column_text() +** sqlite3_column_text16() +** sqlite3_column_real() +** sqlite3_column_bytes() +** sqlite3_column_bytes16() +** sqiite3_column_blob() */ -case OP_IfNeg: { /* jump, in1 */ - assert( pIn1->flags&MEM_Int ); - if( pIn1->u.i<0 ){ - pc = pOp->p2 - 1; +static void columnMallocFailure(sqlite3_stmt *pStmt) +{ + /* If malloc() failed during an encoding conversion within an + ** sqlite3_column_XXX API, then set the return code of the statement to + ** SQLITE_NOMEM. The next call to _step() (if any) will return SQLITE_ERROR + ** and _finalize() will return NOMEM. + */ + Vdbe *p = (Vdbe *)pStmt; + if( p ){ + p->rc = sqlite3ApiExit(p->db, p->rc); + sqlite3_mutex_leave(p->db->mutex); } - break; } -/* Opcode: IfZero P1 P2 * * * -** -** If the value of register P1 is exactly 0, jump to P2. -** -** It is illegal to use this instruction on a register that does -** not contain an integer. An assertion fault will result if you try. +/**************************** sqlite3_column_ ******************************* +** The following routines are used to access elements of the current row +** in the result set. */ -case OP_IfZero: { /* jump, in1 */ - assert( pIn1->flags&MEM_Int ); - if( pIn1->u.i==0 ){ - pc = pOp->p2 - 1; +SQLITE_API const void *sqlite3_column_blob(sqlite3_stmt *pStmt, int i){ + const void *val; + val = sqlite3_value_blob( columnMem(pStmt,i) ); + /* Even though there is no encoding conversion, value_blob() might + ** need to call malloc() to expand the result of a zeroblob() + ** expression. + */ + columnMallocFailure(pStmt); + return val; +} +SQLITE_API int sqlite3_column_bytes(sqlite3_stmt *pStmt, int i){ + int val = sqlite3_value_bytes( columnMem(pStmt,i) ); + columnMallocFailure(pStmt); + return val; +} +SQLITE_API int sqlite3_column_bytes16(sqlite3_stmt *pStmt, int i){ + int val = sqlite3_value_bytes16( columnMem(pStmt,i) ); + columnMallocFailure(pStmt); + return val; +} +SQLITE_API double sqlite3_column_double(sqlite3_stmt *pStmt, int i){ + double val = sqlite3_value_double( columnMem(pStmt,i) ); + columnMallocFailure(pStmt); + return val; +} +SQLITE_API int sqlite3_column_int(sqlite3_stmt *pStmt, int i){ + int val = sqlite3_value_int( columnMem(pStmt,i) ); + columnMallocFailure(pStmt); + return val; +} +SQLITE_API sqlite_int64 sqlite3_column_int64(sqlite3_stmt *pStmt, int i){ + sqlite_int64 val = sqlite3_value_int64( columnMem(pStmt,i) ); + columnMallocFailure(pStmt); + return val; +} +SQLITE_API const unsigned char *sqlite3_column_text(sqlite3_stmt *pStmt, int i){ + const unsigned char *val = sqlite3_value_text( columnMem(pStmt,i) ); + columnMallocFailure(pStmt); + return val; +} +SQLITE_API sqlite3_value *sqlite3_column_value(sqlite3_stmt *pStmt, int i){ + Mem *pOut = columnMem(pStmt, i); + if( pOut->flags&MEM_Static ){ + pOut->flags &= ~MEM_Static; + pOut->flags |= MEM_Ephem; } - break; + columnMallocFailure(pStmt); + return (sqlite3_value *)pOut; +} +#ifndef SQLITE_OMIT_UTF16 +SQLITE_API const void *sqlite3_column_text16(sqlite3_stmt *pStmt, int i){ + const void *val = sqlite3_value_text16( columnMem(pStmt,i) ); + columnMallocFailure(pStmt); + return val; +} +#endif /* SQLITE_OMIT_UTF16 */ +SQLITE_API int sqlite3_column_type(sqlite3_stmt *pStmt, int i){ + int iType = sqlite3_value_type( columnMem(pStmt,i) ); + columnMallocFailure(pStmt); + return iType; } -/* Opcode: AggStep * P2 P3 P4 P5 +/* The following function is experimental and subject to change or +** removal */ +/*int sqlite3_column_numeric_type(sqlite3_stmt *pStmt, int i){ +** return sqlite3_value_numeric_type( columnMem(pStmt,i) ); +**} +*/ + +/* +** Convert the N-th element of pStmt->pColName[] into a string using +** xFunc() then return that string. If N is out of range, return 0. ** -** Execute the step function for an aggregate. The -** function has P5 arguments. P4 is a pointer to the FuncDef -** structure that specifies the function. Use register -** P3 as the accumulator. +** There are up to 5 names for each column. useType determines which +** name is returned. Here are the names: ** -** The P5 arguments are taken from register P2 and its -** successors. +** 0 The column name as it should be displayed for output +** 1 The datatype name for the column +** 2 The name of the database that the column derives from +** 3 The name of the table that the column derives from +** 4 The name of the table column that the result column derives from +** +** If the result is not a simple column reference (if it is an expression +** or a constant) then useTypes 2, 3, and 4 return NULL. */ -case OP_AggStep: { -#if 0 /* local variables moved into u.cc */ - int n; - int i; - Mem *pMem; - Mem *pRec; - sqlite3_context ctx; - sqlite3_value **apVal; -#endif /* local variables moved into u.cc */ - - u.cc.n = pOp->p5; - assert( u.cc.n>=0 ); - u.cc.pRec = &p->aMem[pOp->p2]; - u.cc.apVal = p->apArg; - assert( u.cc.apVal || u.cc.n==0 ); - for(u.cc.i=0; u.cc.ip4.pFunc; - assert( pOp->p3>0 && pOp->p3<=p->nMem ); - u.cc.ctx.pMem = u.cc.pMem = &p->aMem[pOp->p3]; - u.cc.pMem->n++; - u.cc.ctx.s.flags = MEM_Null; - u.cc.ctx.s.z = 0; - u.cc.ctx.s.zMalloc = 0; - u.cc.ctx.s.xDel = 0; - u.cc.ctx.s.db = db; - u.cc.ctx.isError = 0; - u.cc.ctx.pColl = 0; - if( u.cc.ctx.pFunc->flags & SQLITE_FUNC_NEEDCOLL ){ - assert( pOp>p->aOp ); - assert( pOp[-1].p4type==P4_COLLSEQ ); - assert( pOp[-1].opcode==OP_CollSeq ); - u.cc.ctx.pColl = pOp[-1].p4.pColl; - } - (u.cc.ctx.pFunc->xStep)(&u.cc.ctx, u.cc.n, u.cc.apVal); - if( u.cc.ctx.isError ){ - sqlite3SetString(&p->zErrMsg, db, "%s", sqlite3_value_text(&u.cc.ctx.s)); - rc = u.cc.ctx.isError; +static const void *columnName( + sqlite3_stmt *pStmt, + int N, + const void *(*xFunc)(Mem*), + int useType +){ + const void *ret = 0; + Vdbe *p = (Vdbe *)pStmt; + int n; + sqlite3 *db = p->db; + + assert( db!=0 ); + n = sqlite3_column_count(pStmt); + if( N=0 ){ + N += useType*n; + sqlite3_mutex_enter(db->mutex); + assert( db->mallocFailed==0 ); + ret = xFunc(&p->aColName[N]); + /* A malloc may have failed inside of the xFunc() call. If this + ** is the case, clear the mallocFailed flag and return NULL. + */ + if( db->mallocFailed ){ + db->mallocFailed = 0; + ret = 0; + } + sqlite3_mutex_leave(db->mutex); } - sqlite3VdbeMemRelease(&u.cc.ctx.s); - break; + return ret; } -/* Opcode: AggFinal P1 P2 * P4 * -** -** Execute the finalizer function for an aggregate. P1 is -** the memory location that is the accumulator for the aggregate. -** -** P2 is the number of arguments that the step function takes and -** P4 is a pointer to the FuncDef for this function. The P2 -** argument is not used by this opcode. It is only there to disambiguate -** functions that can take varying numbers of arguments. The -** P4 argument is only needed for the degenerate case where -** the step function was not previously called. +/* +** Return the name of the Nth column of the result set returned by SQL +** statement pStmt. */ -case OP_AggFinal: { -#if 0 /* local variables moved into u.cd */ - Mem *pMem; -#endif /* local variables moved into u.cd */ - assert( pOp->p1>0 && pOp->p1<=p->nMem ); - u.cd.pMem = &p->aMem[pOp->p1]; - assert( (u.cd.pMem->flags & ~(MEM_Null|MEM_Agg))==0 ); - rc = sqlite3VdbeMemFinalize(u.cd.pMem, pOp->p4.pFunc); - if( rc ){ - sqlite3SetString(&p->zErrMsg, db, "%s", sqlite3_value_text(u.cd.pMem)); - } - sqlite3VdbeChangeEncoding(u.cd.pMem, encoding); - UPDATE_MAX_BLOBSIZE(u.cd.pMem); - if( sqlite3VdbeMemTooBig(u.cd.pMem) ){ - goto too_big; - } - break; +SQLITE_API const char *sqlite3_column_name(sqlite3_stmt *pStmt, int N){ + return columnName( + pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_NAME); +} +#ifndef SQLITE_OMIT_UTF16 +SQLITE_API const void *sqlite3_column_name16(sqlite3_stmt *pStmt, int N){ + return columnName( + pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_NAME); } +#endif +/* +** Constraint: If you have ENABLE_COLUMN_METADATA then you must +** not define OMIT_DECLTYPE. +*/ +#if defined(SQLITE_OMIT_DECLTYPE) && defined(SQLITE_ENABLE_COLUMN_METADATA) +# error "Must not define both SQLITE_OMIT_DECLTYPE \ + and SQLITE_ENABLE_COLUMN_METADATA" +#endif -#if !defined(SQLITE_OMIT_VACUUM) && !defined(SQLITE_OMIT_ATTACH) -/* Opcode: Vacuum * * * * * -** -** Vacuum the entire database. This opcode will cause other virtual -** machines to be created and run. It may not be called from within -** a transaction. +#ifndef SQLITE_OMIT_DECLTYPE +/* +** Return the column declaration type (if applicable) of the 'i'th column +** of the result set of SQL statement pStmt. */ -case OP_Vacuum: { - if( sqlite3SafetyOff(db) ) goto abort_due_to_misuse; - rc = sqlite3RunVacuum(&p->zErrMsg, db); - if( sqlite3SafetyOn(db) ) goto abort_due_to_misuse; - break; +SQLITE_API const char *sqlite3_column_decltype(sqlite3_stmt *pStmt, int N){ + return columnName( + pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_DECLTYPE); } -#endif +#ifndef SQLITE_OMIT_UTF16 +SQLITE_API const void *sqlite3_column_decltype16(sqlite3_stmt *pStmt, int N){ + return columnName( + pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_DECLTYPE); +} +#endif /* SQLITE_OMIT_UTF16 */ +#endif /* SQLITE_OMIT_DECLTYPE */ -#if !defined(SQLITE_OMIT_AUTOVACUUM) -/* Opcode: IncrVacuum P1 P2 * * * -** -** Perform a single step of the incremental vacuum procedure on -** the P1 database. If the vacuum has finished, jump to instruction -** P2. Otherwise, fall through to the next instruction. +#ifdef SQLITE_ENABLE_COLUMN_METADATA +/* +** Return the name of the database from which a result column derives. +** NULL is returned if the result column is an expression or constant or +** anything else which is not an unabiguous reference to a database column. */ -case OP_IncrVacuum: { /* jump */ -#if 0 /* local variables moved into u.ce */ - Btree *pBt; -#endif /* local variables moved into u.ce */ +SQLITE_API const char *sqlite3_column_database_name(sqlite3_stmt *pStmt, int N){ + return columnName( + pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_DATABASE); +} +#ifndef SQLITE_OMIT_UTF16 +SQLITE_API const void *sqlite3_column_database_name16(sqlite3_stmt *pStmt, int N){ + return columnName( + pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_DATABASE); +} +#endif /* SQLITE_OMIT_UTF16 */ - assert( pOp->p1>=0 && pOp->p1nDb ); - assert( (p->btreeMask & (1<p1))!=0 ); - u.ce.pBt = db->aDb[pOp->p1].pBt; - rc = sqlite3BtreeIncrVacuum(u.ce.pBt); - if( rc==SQLITE_DONE ){ - pc = pOp->p2 - 1; - rc = SQLITE_OK; - } - break; +/* +** Return the name of the table from which a result column derives. +** NULL is returned if the result column is an expression or constant or +** anything else which is not an unabiguous reference to a database column. +*/ +SQLITE_API const char *sqlite3_column_table_name(sqlite3_stmt *pStmt, int N){ + return columnName( + pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_TABLE); } -#endif +#ifndef SQLITE_OMIT_UTF16 +SQLITE_API const void *sqlite3_column_table_name16(sqlite3_stmt *pStmt, int N){ + return columnName( + pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_TABLE); +} +#endif /* SQLITE_OMIT_UTF16 */ -/* Opcode: Expire P1 * * * * -** -** Cause precompiled statements to become expired. An expired statement -** fails with an error code of SQLITE_SCHEMA if it is ever executed -** (via sqlite3_step()). -** -** If P1 is 0, then all SQL statements become expired. If P1 is non-zero, -** then only the currently executing statement is affected. +/* +** Return the name of the table column from which a result column derives. +** NULL is returned if the result column is an expression or constant or +** anything else which is not an unabiguous reference to a database column. */ -case OP_Expire: { - if( !pOp->p1 ){ - sqlite3ExpirePreparedStatements(db); - }else{ - p->expired = 1; - } - break; +SQLITE_API const char *sqlite3_column_origin_name(sqlite3_stmt *pStmt, int N){ + return columnName( + pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_COLUMN); +} +#ifndef SQLITE_OMIT_UTF16 +SQLITE_API const void *sqlite3_column_origin_name16(sqlite3_stmt *pStmt, int N){ + return columnName( + pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_COLUMN); } +#endif /* SQLITE_OMIT_UTF16 */ +#endif /* SQLITE_ENABLE_COLUMN_METADATA */ -#ifndef SQLITE_OMIT_SHARED_CACHE -/* Opcode: TableLock P1 P2 P3 P4 * -** -** Obtain a lock on a particular table. This instruction is only used when -** the shared-cache feature is enabled. -** -** If P1 is the index of the database in sqlite3.aDb[] of the database -** on which the lock is acquired. A readlock is obtained if P3==0 or -** a write lock if P3==1. + +/******************************* sqlite3_bind_ *************************** +** +** Routines used to attach values to wildcards in a compiled SQL statement. +*/ +/* +** Unbind the value bound to variable i in virtual machine p. This is the +** the same as binding a NULL value to the column. If the "i" parameter is +** out of range, then SQLITE_RANGE is returned. Othewise SQLITE_OK. ** -** P2 contains the root-page of the table to lock. +** A successful evaluation of this routine acquires the mutex on p. +** the mutex is released if any kind of error occurs. ** -** P4 contains a pointer to the name of the table being locked. This is only -** used to generate an error message if the lock cannot be obtained. +** The error code stored in database p->db is overwritten with the return +** value in any case. */ -case OP_TableLock: { -#if 0 /* local variables moved into u.cf */ - int p1; - u8 isWriteLock; -#endif /* local variables moved into u.cf */ +static int vdbeUnbind(Vdbe *p, int i){ + Mem *pVar; + if( vdbeSafetyNotNull(p) ){ + return SQLITE_MISUSE_BKPT; + } + sqlite3_mutex_enter(p->db->mutex); + if( p->magic!=VDBE_MAGIC_RUN || p->pc>=0 ){ + sqlite3Error(p->db, SQLITE_MISUSE, 0); + sqlite3_mutex_leave(p->db->mutex); + sqlite3_log(SQLITE_MISUSE, + "bind on a busy prepared statement: [%s]", p->zSql); + return SQLITE_MISUSE_BKPT; + } + if( i<1 || i>p->nVar ){ + sqlite3Error(p->db, SQLITE_RANGE, 0); + sqlite3_mutex_leave(p->db->mutex); + return SQLITE_RANGE; + } + i--; + pVar = &p->aVar[i]; + sqlite3VdbeMemRelease(pVar); + pVar->flags = MEM_Null; + sqlite3Error(p->db, SQLITE_OK, 0); - u.cf.p1 = pOp->p1; - u.cf.isWriteLock = (u8)pOp->p3; - assert( u.cf.p1>=0 && u.cf.p1nDb ); - assert( (p->btreeMask & (1<aDb[u.cf.p1].pBt, pOp->p2, u.cf.isWriteLock); - if( (rc&0xFF)==SQLITE_LOCKED ){ - const char *z = pOp->p4.z; - sqlite3SetString(&p->zErrMsg, db, "database table is locked: %s", z); + /* If the bit corresponding to this variable in Vdbe.expmask is set, then + ** binding a new value to this variable invalidates the current query plan. + ** + ** IMPLEMENTATION-OF: R-48440-37595 If the specific value bound to host + ** parameter in the WHERE clause might influence the choice of query plan + ** for a statement, then the statement will be automatically recompiled, + ** as if there had been a schema change, on the first sqlite3_step() call + ** following any change to the bindings of that parameter. + */ + if( p->isPrepareV2 && + ((i<32 && p->expmask & ((u32)1 << i)) || p->expmask==0xffffffff) + ){ + p->expired = 1; } - break; + return SQLITE_OK; } -#endif /* SQLITE_OMIT_SHARED_CACHE */ -#ifndef SQLITE_OMIT_VIRTUALTABLE -/* Opcode: VBegin * * * P4 * -** -** P4 may be a pointer to an sqlite3_vtab structure. If so, call the -** xBegin method for that table. -** -** Also, whether or not P4 is set, check that this is not being called from -** within a callback to a virtual table xSync() method. If it is, the error -** code will be set to SQLITE_LOCKED. +/* +** Bind a text or BLOB value. */ -case OP_VBegin: { -#if 0 /* local variables moved into u.cg */ - sqlite3_vtab *pVtab; -#endif /* local variables moved into u.cg */ - u.cg.pVtab = pOp->p4.pVtab; - rc = sqlite3VtabBegin(db, u.cg.pVtab); - if( u.cg.pVtab ){ - sqlite3DbFree(db, p->zErrMsg); - p->zErrMsg = u.cg.pVtab->zErrMsg; - u.cg.pVtab->zErrMsg = 0; +static int bindText( + sqlite3_stmt *pStmt, /* The statement to bind against */ + int i, /* Index of the parameter to bind */ + const void *zData, /* Pointer to the data to be bound */ + int nData, /* Number of bytes of data to be bound */ + void (*xDel)(void*), /* Destructor for the data */ + u8 encoding /* Encoding for the data */ +){ + Vdbe *p = (Vdbe *)pStmt; + Mem *pVar; + int rc; + + rc = vdbeUnbind(p, i); + if( rc==SQLITE_OK ){ + if( zData!=0 ){ + pVar = &p->aVar[i-1]; + rc = sqlite3VdbeMemSetStr(pVar, zData, nData, encoding, xDel); + if( rc==SQLITE_OK && encoding!=0 ){ + rc = sqlite3VdbeChangeEncoding(pVar, ENC(p->db)); + } + sqlite3Error(p->db, rc, 0); + rc = sqlite3ApiExit(p->db, rc); + } + sqlite3_mutex_leave(p->db->mutex); + }else if( xDel!=SQLITE_STATIC && xDel!=SQLITE_TRANSIENT ){ + xDel((void*)zData); } - break; + return rc; } -#endif /* SQLITE_OMIT_VIRTUALTABLE */ -#ifndef SQLITE_OMIT_VIRTUALTABLE -/* Opcode: VCreate P1 * * P4 * -** -** P4 is the name of a virtual table in database P1. Call the xCreate method -** for that table. + +/* +** Bind a blob value to an SQL statement variable. */ -case OP_VCreate: { - rc = sqlite3VtabCallCreate(db, pOp->p1, pOp->p4.z, &p->zErrMsg); - break; +SQLITE_API int sqlite3_bind_blob( + sqlite3_stmt *pStmt, + int i, + const void *zData, + int nData, + void (*xDel)(void*) +){ + return bindText(pStmt, i, zData, nData, xDel, 0); +} +SQLITE_API int sqlite3_bind_double(sqlite3_stmt *pStmt, int i, double rValue){ + int rc; + Vdbe *p = (Vdbe *)pStmt; + rc = vdbeUnbind(p, i); + if( rc==SQLITE_OK ){ + sqlite3VdbeMemSetDouble(&p->aVar[i-1], rValue); + sqlite3_mutex_leave(p->db->mutex); + } + return rc; +} +SQLITE_API int sqlite3_bind_int(sqlite3_stmt *p, int i, int iValue){ + return sqlite3_bind_int64(p, i, (i64)iValue); +} +SQLITE_API int sqlite3_bind_int64(sqlite3_stmt *pStmt, int i, sqlite_int64 iValue){ + int rc; + Vdbe *p = (Vdbe *)pStmt; + rc = vdbeUnbind(p, i); + if( rc==SQLITE_OK ){ + sqlite3VdbeMemSetInt64(&p->aVar[i-1], iValue); + sqlite3_mutex_leave(p->db->mutex); + } + return rc; +} +SQLITE_API int sqlite3_bind_null(sqlite3_stmt *pStmt, int i){ + int rc; + Vdbe *p = (Vdbe*)pStmt; + rc = vdbeUnbind(p, i); + if( rc==SQLITE_OK ){ + sqlite3_mutex_leave(p->db->mutex); + } + return rc; +} +SQLITE_API int sqlite3_bind_text( + sqlite3_stmt *pStmt, + int i, + const char *zData, + int nData, + void (*xDel)(void*) +){ + return bindText(pStmt, i, zData, nData, xDel, SQLITE_UTF8); +} +#ifndef SQLITE_OMIT_UTF16 +SQLITE_API int sqlite3_bind_text16( + sqlite3_stmt *pStmt, + int i, + const void *zData, + int nData, + void (*xDel)(void*) +){ + return bindText(pStmt, i, zData, nData, xDel, SQLITE_UTF16NATIVE); +} +#endif /* SQLITE_OMIT_UTF16 */ +SQLITE_API int sqlite3_bind_value(sqlite3_stmt *pStmt, int i, const sqlite3_value *pValue){ + int rc; + switch( pValue->type ){ + case SQLITE_INTEGER: { + rc = sqlite3_bind_int64(pStmt, i, pValue->u.i); + break; + } + case SQLITE_FLOAT: { + rc = sqlite3_bind_double(pStmt, i, pValue->r); + break; + } + case SQLITE_BLOB: { + if( pValue->flags & MEM_Zero ){ + rc = sqlite3_bind_zeroblob(pStmt, i, pValue->u.nZero); + }else{ + rc = sqlite3_bind_blob(pStmt, i, pValue->z, pValue->n,SQLITE_TRANSIENT); + } + break; + } + case SQLITE_TEXT: { + rc = bindText(pStmt,i, pValue->z, pValue->n, SQLITE_TRANSIENT, + pValue->enc); + break; + } + default: { + rc = sqlite3_bind_null(pStmt, i); + break; + } + } + return rc; +} +SQLITE_API int sqlite3_bind_zeroblob(sqlite3_stmt *pStmt, int i, int n){ + int rc; + Vdbe *p = (Vdbe *)pStmt; + rc = vdbeUnbind(p, i); + if( rc==SQLITE_OK ){ + sqlite3VdbeMemSetZeroBlob(&p->aVar[i-1], n); + sqlite3_mutex_leave(p->db->mutex); + } + return rc; } -#endif /* SQLITE_OMIT_VIRTUALTABLE */ -#ifndef SQLITE_OMIT_VIRTUALTABLE -/* Opcode: VDestroy P1 * * P4 * -** -** P4 is the name of a virtual table in database P1. Call the xDestroy method -** of that table. +/* +** Return the number of wildcards that can be potentially bound to. +** This routine is added to support DBD::SQLite. */ -case OP_VDestroy: { - p->inVtabMethod = 2; - rc = sqlite3VtabCallDestroy(db, pOp->p1, pOp->p4.z); - p->inVtabMethod = 0; - break; +SQLITE_API int sqlite3_bind_parameter_count(sqlite3_stmt *pStmt){ + Vdbe *p = (Vdbe*)pStmt; + return p ? p->nVar : 0; } -#endif /* SQLITE_OMIT_VIRTUALTABLE */ -#ifndef SQLITE_OMIT_VIRTUALTABLE -/* Opcode: VOpen P1 * * P4 * +/* +** Return the name of a wildcard parameter. Return NULL if the index +** is out of range or if the wildcard is unnamed. ** -** P4 is a pointer to a virtual table object, an sqlite3_vtab structure. -** P1 is a cursor number. This opcode opens a cursor to the virtual -** table and stores that cursor in P1. +** The result is always UTF-8. */ -case OP_VOpen: { -#if 0 /* local variables moved into u.ch */ - VdbeCursor *pCur; - sqlite3_vtab_cursor *pVtabCursor; - sqlite3_vtab *pVtab; - sqlite3_module *pModule; -#endif /* local variables moved into u.ch */ - - u.ch.pCur = 0; - u.ch.pVtabCursor = 0; - u.ch.pVtab = pOp->p4.pVtab; - u.ch.pModule = (sqlite3_module *)u.ch.pVtab->pModule; - assert(u.ch.pVtab && u.ch.pModule); - if( sqlite3SafetyOff(db) ) goto abort_due_to_misuse; - rc = u.ch.pModule->xOpen(u.ch.pVtab, &u.ch.pVtabCursor); - sqlite3DbFree(db, p->zErrMsg); - p->zErrMsg = u.ch.pVtab->zErrMsg; - u.ch.pVtab->zErrMsg = 0; - if( sqlite3SafetyOn(db) ) goto abort_due_to_misuse; - if( SQLITE_OK==rc ){ - /* Initialize sqlite3_vtab_cursor base class */ - u.ch.pVtabCursor->pVtab = u.ch.pVtab; - - /* Initialise vdbe cursor object */ - u.ch.pCur = allocateCursor(p, pOp->p1, 0, -1, 0); - if( u.ch.pCur ){ - u.ch.pCur->pVtabCursor = u.ch.pVtabCursor; - u.ch.pCur->pModule = u.ch.pVtabCursor->pVtab->pModule; - }else{ - db->mallocFailed = 1; - u.ch.pModule->xClose(u.ch.pVtabCursor); - } +SQLITE_API const char *sqlite3_bind_parameter_name(sqlite3_stmt *pStmt, int i){ + Vdbe *p = (Vdbe*)pStmt; + if( p==0 || i<1 || i>p->nzVar ){ + return 0; } - break; + return p->azVar[i-1]; } -#endif /* SQLITE_OMIT_VIRTUALTABLE */ -#ifndef SQLITE_OMIT_VIRTUALTABLE -/* Opcode: VFilter P1 P2 P3 P4 * -** -** P1 is a cursor opened using VOpen. P2 is an address to jump to if -** the filtered result set is empty. -** -** P4 is either NULL or a string that was generated by the xBestIndex -** method of the module. The interpretation of the P4 string is left -** to the module implementation. -** -** This opcode invokes the xFilter method on the virtual table specified -** by P1. The integer query plan parameter to xFilter is stored in register -** P3. Register P3+1 stores the argc parameter to be passed to the -** xFilter method. Registers P3+2..P3+1+argc are the argc -** additional parameters which are passed to -** xFilter as argv. Register P3+2 becomes argv[0] when passed to xFilter. -** -** A jump is made to P2 if the result set after filtering would be empty. +/* +** Given a wildcard parameter name, return the index of the variable +** with that name. If there is no variable with the given name, +** return 0. */ -case OP_VFilter: { /* jump */ -#if 0 /* local variables moved into u.ci */ - int nArg; - int iQuery; - const sqlite3_module *pModule; - Mem *pQuery; - Mem *pArgc; - sqlite3_vtab_cursor *pVtabCursor; - sqlite3_vtab *pVtab; - VdbeCursor *pCur; - int res; +SQLITE_PRIVATE int sqlite3VdbeParameterIndex(Vdbe *p, const char *zName, int nName){ int i; - Mem **apArg; -#endif /* local variables moved into u.ci */ - - u.ci.pQuery = &p->aMem[pOp->p3]; - u.ci.pArgc = &u.ci.pQuery[1]; - u.ci.pCur = p->apCsr[pOp->p1]; - REGISTER_TRACE(pOp->p3, u.ci.pQuery); - assert( u.ci.pCur->pVtabCursor ); - u.ci.pVtabCursor = u.ci.pCur->pVtabCursor; - u.ci.pVtab = u.ci.pVtabCursor->pVtab; - u.ci.pModule = u.ci.pVtab->pModule; - - /* Grab the index number and argc parameters */ - assert( (u.ci.pQuery->flags&MEM_Int)!=0 && u.ci.pArgc->flags==MEM_Int ); - u.ci.nArg = (int)u.ci.pArgc->u.i; - u.ci.iQuery = (int)u.ci.pQuery->u.i; - - /* Invoke the xFilter method */ - { - u.ci.res = 0; - u.ci.apArg = p->apArg; - for(u.ci.i = 0; u.ci.iinVtabMethod = 1; - rc = u.ci.pModule->xFilter(u.ci.pVtabCursor, u.ci.iQuery, pOp->p4.z, u.ci.nArg, u.ci.apArg); - p->inVtabMethod = 0; - sqlite3DbFree(db, p->zErrMsg); - p->zErrMsg = u.ci.pVtab->zErrMsg; - u.ci.pVtab->zErrMsg = 0; - sqlite3VtabUnlock(db, u.ci.pVtab); - if( rc==SQLITE_OK ){ - u.ci.res = u.ci.pModule->xEof(u.ci.pVtabCursor); - } - if( sqlite3SafetyOn(db) ) goto abort_due_to_misuse; - - if( u.ci.res ){ - pc = pOp->p2 - 1; + if( p==0 ){ + return 0; + } + if( zName ){ + for(i=0; inzVar; i++){ + const char *z = p->azVar[i]; + if( z && memcmp(z,zName,nName)==0 && z[nName]==0 ){ + return i+1; + } } } - u.ci.pCur->nullRow = 0; - - break; + return 0; +} +SQLITE_API int sqlite3_bind_parameter_index(sqlite3_stmt *pStmt, const char *zName){ + return sqlite3VdbeParameterIndex((Vdbe*)pStmt, zName, sqlite3Strlen30(zName)); } -#endif /* SQLITE_OMIT_VIRTUALTABLE */ -#ifndef SQLITE_OMIT_VIRTUALTABLE -/* Opcode: VColumn P1 P2 P3 * * -** -** Store the value of the P2-th column of -** the row of the virtual-table that the -** P1 cursor is pointing to into register P3. +/* +** Transfer all bindings from the first statement over to the second. */ -case OP_VColumn: { -#if 0 /* local variables moved into u.cj */ - sqlite3_vtab *pVtab; - const sqlite3_module *pModule; - Mem *pDest; - sqlite3_context sContext; -#endif /* local variables moved into u.cj */ - - VdbeCursor *pCur = p->apCsr[pOp->p1]; - assert( pCur->pVtabCursor ); - assert( pOp->p3>0 && pOp->p3<=p->nMem ); - u.cj.pDest = &p->aMem[pOp->p3]; - if( pCur->nullRow ){ - sqlite3VdbeMemSetNull(u.cj.pDest); - break; +SQLITE_PRIVATE int sqlite3TransferBindings(sqlite3_stmt *pFromStmt, sqlite3_stmt *pToStmt){ + Vdbe *pFrom = (Vdbe*)pFromStmt; + Vdbe *pTo = (Vdbe*)pToStmt; + int i; + assert( pTo->db==pFrom->db ); + assert( pTo->nVar==pFrom->nVar ); + sqlite3_mutex_enter(pTo->db->mutex); + for(i=0; inVar; i++){ + sqlite3VdbeMemMove(&pTo->aVar[i], &pFrom->aVar[i]); } - u.cj.pVtab = pCur->pVtabCursor->pVtab; - u.cj.pModule = u.cj.pVtab->pModule; - assert( u.cj.pModule->xColumn ); - memset(&u.cj.sContext, 0, sizeof(u.cj.sContext)); - - /* The output cell may already have a buffer allocated. Move - ** the current contents to u.cj.sContext.s so in case the user-function - ** can use the already allocated buffer instead of allocating a - ** new one. - */ - sqlite3VdbeMemMove(&u.cj.sContext.s, u.cj.pDest); - MemSetTypeFlag(&u.cj.sContext.s, MEM_Null); + sqlite3_mutex_leave(pTo->db->mutex); + return SQLITE_OK; +} - if( sqlite3SafetyOff(db) ) goto abort_due_to_misuse; - rc = u.cj.pModule->xColumn(pCur->pVtabCursor, &u.cj.sContext, pOp->p2); - sqlite3DbFree(db, p->zErrMsg); - p->zErrMsg = u.cj.pVtab->zErrMsg; - u.cj.pVtab->zErrMsg = 0; - if( u.cj.sContext.isError ){ - rc = u.cj.sContext.isError; +#ifndef SQLITE_OMIT_DEPRECATED +/* +** Deprecated external interface. Internal/core SQLite code +** should call sqlite3TransferBindings. +** +** Is is misuse to call this routine with statements from different +** database connections. But as this is a deprecated interface, we +** will not bother to check for that condition. +** +** If the two statements contain a different number of bindings, then +** an SQLITE_ERROR is returned. Nothing else can go wrong, so otherwise +** SQLITE_OK is returned. +*/ +SQLITE_API int sqlite3_transfer_bindings(sqlite3_stmt *pFromStmt, sqlite3_stmt *pToStmt){ + Vdbe *pFrom = (Vdbe*)pFromStmt; + Vdbe *pTo = (Vdbe*)pToStmt; + if( pFrom->nVar!=pTo->nVar ){ + return SQLITE_ERROR; } - - /* Copy the result of the function to the P3 register. We - ** do this regardless of whether or not an error occurred to ensure any - ** dynamic allocation in u.cj.sContext.s (a Mem struct) is released. - */ - sqlite3VdbeChangeEncoding(&u.cj.sContext.s, encoding); - REGISTER_TRACE(pOp->p3, u.cj.pDest); - sqlite3VdbeMemMove(u.cj.pDest, &u.cj.sContext.s); - UPDATE_MAX_BLOBSIZE(u.cj.pDest); - - if( sqlite3SafetyOn(db) ){ - goto abort_due_to_misuse; + if( pTo->isPrepareV2 && pTo->expmask ){ + pTo->expired = 1; } - if( sqlite3VdbeMemTooBig(u.cj.pDest) ){ - goto too_big; + if( pFrom->isPrepareV2 && pFrom->expmask ){ + pFrom->expired = 1; } - break; + return sqlite3TransferBindings(pFromStmt, pToStmt); } -#endif /* SQLITE_OMIT_VIRTUALTABLE */ +#endif -#ifndef SQLITE_OMIT_VIRTUALTABLE -/* Opcode: VNext P1 P2 * * * -** -** Advance virtual table P1 to the next row in its result set and -** jump to instruction P2. Or, if the virtual table has reached -** the end of its result set, then fall through to the next instruction. +/* +** Return the sqlite3* database handle to which the prepared statement given +** in the argument belongs. This is the same database handle that was +** the first argument to the sqlite3_prepare() that was used to create +** the statement in the first place. */ -case OP_VNext: { /* jump */ -#if 0 /* local variables moved into u.ck */ - sqlite3_vtab *pVtab; - const sqlite3_module *pModule; - int res; - VdbeCursor *pCur; -#endif /* local variables moved into u.ck */ +SQLITE_API sqlite3 *sqlite3_db_handle(sqlite3_stmt *pStmt){ + return pStmt ? ((Vdbe*)pStmt)->db : 0; +} - u.ck.res = 0; - u.ck.pCur = p->apCsr[pOp->p1]; - assert( u.ck.pCur->pVtabCursor ); - if( u.ck.pCur->nullRow ){ - break; - } - u.ck.pVtab = u.ck.pCur->pVtabCursor->pVtab; - u.ck.pModule = u.ck.pVtab->pModule; - assert( u.ck.pModule->xNext ); +/* +** Return true if the prepared statement is guaranteed to not modify the +** database. +*/ +SQLITE_API int sqlite3_stmt_readonly(sqlite3_stmt *pStmt){ + return pStmt ? ((Vdbe*)pStmt)->readOnly : 1; +} - /* Invoke the xNext() method of the module. There is no way for the - ** underlying implementation to return an error if one occurs during - ** xNext(). Instead, if an error occurs, true is returned (indicating that - ** data is available) and the error code returned when xColumn or - ** some other method is next invoked on the save virtual table cursor. - */ - if( sqlite3SafetyOff(db) ) goto abort_due_to_misuse; - sqlite3VtabLock(u.ck.pVtab); - p->inVtabMethod = 1; - rc = u.ck.pModule->xNext(u.ck.pCur->pVtabCursor); - p->inVtabMethod = 0; - sqlite3DbFree(db, p->zErrMsg); - p->zErrMsg = u.ck.pVtab->zErrMsg; - u.ck.pVtab->zErrMsg = 0; - sqlite3VtabUnlock(db, u.ck.pVtab); - if( rc==SQLITE_OK ){ - u.ck.res = u.ck.pModule->xEof(u.ck.pCur->pVtabCursor); - } - if( sqlite3SafetyOn(db) ) goto abort_due_to_misuse; +/* +** Return true if the prepared statement is in need of being reset. +*/ +SQLITE_API int sqlite3_stmt_busy(sqlite3_stmt *pStmt){ + Vdbe *v = (Vdbe*)pStmt; + return v!=0 && v->pc>0 && v->magic==VDBE_MAGIC_RUN; +} - if( !u.ck.res ){ - /* If there is data, jump to P2 */ - pc = pOp->p2 - 1; +/* +** Return a pointer to the next prepared statement after pStmt associated +** with database connection pDb. If pStmt is NULL, return the first +** prepared statement for the database connection. Return NULL if there +** are no more. +*/ +SQLITE_API sqlite3_stmt *sqlite3_next_stmt(sqlite3 *pDb, sqlite3_stmt *pStmt){ + sqlite3_stmt *pNext; + sqlite3_mutex_enter(pDb->mutex); + if( pStmt==0 ){ + pNext = (sqlite3_stmt*)pDb->pVdbe; + }else{ + pNext = (sqlite3_stmt*)((Vdbe*)pStmt)->pNext; } - break; + sqlite3_mutex_leave(pDb->mutex); + return pNext; } -#endif /* SQLITE_OMIT_VIRTUALTABLE */ -#ifndef SQLITE_OMIT_VIRTUALTABLE -/* Opcode: VRename P1 * * P4 * -** -** P4 is a pointer to a virtual table object, an sqlite3_vtab structure. -** This opcode invokes the corresponding xRename method. The value -** in register P1 is passed as the zName argument to the xRename method. +/* +** Return the value of a status counter for a prepared statement */ -case OP_VRename: { -#if 0 /* local variables moved into u.cl */ - sqlite3_vtab *pVtab; - Mem *pName; -#endif /* local variables moved into u.cl */ - - u.cl.pVtab = pOp->p4.pVtab; - u.cl.pName = &p->aMem[pOp->p1]; - assert( u.cl.pVtab->pModule->xRename ); - REGISTER_TRACE(pOp->p1, u.cl.pName); - assert( u.cl.pName->flags & MEM_Str ); - if( sqlite3SafetyOff(db) ) goto abort_due_to_misuse; - sqlite3VtabLock(u.cl.pVtab); - rc = u.cl.pVtab->pModule->xRename(u.cl.pVtab, u.cl.pName->z); - sqlite3DbFree(db, p->zErrMsg); - p->zErrMsg = u.cl.pVtab->zErrMsg; - u.cl.pVtab->zErrMsg = 0; - sqlite3VtabUnlock(db, u.cl.pVtab); - if( sqlite3SafetyOn(db) ) goto abort_due_to_misuse; - - break; +SQLITE_API int sqlite3_stmt_status(sqlite3_stmt *pStmt, int op, int resetFlag){ + Vdbe *pVdbe = (Vdbe*)pStmt; + int v = pVdbe->aCounter[op-1]; + if( resetFlag ) pVdbe->aCounter[op-1] = 0; + return v; } -#endif -#ifndef SQLITE_OMIT_VIRTUALTABLE -/* Opcode: VUpdate P1 P2 P3 P4 * +/************** End of vdbeapi.c *********************************************/ +/************** Begin file vdbetrace.c ***************************************/ +/* +** 2009 November 25 ** -** P4 is a pointer to a virtual table object, an sqlite3_vtab structure. -** This opcode invokes the corresponding xUpdate method. P2 values -** are contiguous memory cells starting at P3 to pass to the xUpdate -** invocation. The value in register (P3+P2-1) corresponds to the -** p2th element of the argv array passed to xUpdate. +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: ** -** The xUpdate method will do a DELETE or an INSERT or both. -** The argv[0] element (which corresponds to memory cell P3) -** is the rowid of a row to delete. If argv[0] is NULL then no -** deletion occurs. The argv[1] element is the rowid of the new -** row. This can be NULL to have the virtual table select the new -** rowid for itself. The subsequent elements in the array are -** the values of columns in the new row. +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. ** -** If P2==1 then no insert is performed. argv[0] is the rowid of -** a row to delete. +************************************************************************* ** -** P1 is a boolean flag. If it is set to true and the xUpdate call -** is successful, then the value returned by sqlite3_last_insert_rowid() -** is set to the value of the rowid for the row just inserted. +** This file contains code used to insert the values of host parameters +** (aka "wildcards") into the SQL text output by sqlite3_trace(). +** +** The Vdbe parse-tree explainer is also found here. */ -case OP_VUpdate: { -#if 0 /* local variables moved into u.cm */ - sqlite3_vtab *pVtab; - sqlite3_module *pModule; - int nArg; - int i; - sqlite_int64 rowid; - Mem **apArg; - Mem *pX; -#endif /* local variables moved into u.cm */ - u.cm.pVtab = pOp->p4.pVtab; - u.cm.pModule = (sqlite3_module *)u.cm.pVtab->pModule; - u.cm.nArg = pOp->p2; - assert( pOp->p4type==P4_VTAB ); - if( ALWAYS(u.cm.pModule->xUpdate) ){ - u.cm.apArg = p->apArg; - u.cm.pX = &p->aMem[pOp->p3]; - for(u.cm.i=0; u.cm.ixUpdate(u.cm.pVtab, u.cm.nArg, u.cm.apArg, &u.cm.rowid); - sqlite3DbFree(db, p->zErrMsg); - p->zErrMsg = u.cm.pVtab->zErrMsg; - u.cm.pVtab->zErrMsg = 0; - sqlite3VtabUnlock(db, u.cm.pVtab); - if( sqlite3SafetyOn(db) ) goto abort_due_to_misuse; - if( rc==SQLITE_OK && pOp->p1 ){ - assert( u.cm.nArg>1 && u.cm.apArg[0] && (u.cm.apArg[0]->flags&MEM_Null) ); - db->lastRowid = u.cm.rowid; - } - p->nChange++; - } - break; -} -#endif /* SQLITE_OMIT_VIRTUALTABLE */ +#ifndef SQLITE_OMIT_TRACE -#ifndef SQLITE_OMIT_PAGER_PRAGMAS -/* Opcode: Pagecount P1 P2 * * * -** -** Write the current number of pages in database P1 to memory cell P2. +/* +** zSql is a zero-terminated string of UTF-8 SQL text. Return the number of +** bytes in this text up to but excluding the first character in +** a host parameter. If the text contains no host parameters, return +** the total number of bytes in the text. */ -case OP_Pagecount: { /* out2-prerelease */ -#if 0 /* local variables moved into u.cn */ - int p1; - int nPage; - Pager *pPager; -#endif /* local variables moved into u.cn */ +static int findNextHostParameter(const char *zSql, int *pnToken){ + int tokenType; + int nTotal = 0; + int n; - u.cn.p1 = pOp->p1; - u.cn.pPager = sqlite3BtreePager(db->aDb[u.cn.p1].pBt); - rc = sqlite3PagerPagecount(u.cn.pPager, &u.cn.nPage); - /* OP_Pagecount is always called from within a read transaction. The - ** page count has already been successfully read and cached. So the - ** sqlite3PagerPagecount() call above cannot fail. */ - if( ALWAYS(rc==SQLITE_OK) ){ - pOut->flags = MEM_Int; - pOut->u.i = u.cn.nPage; + *pnToken = 0; + while( zSql[0] ){ + n = sqlite3GetToken((u8*)zSql, &tokenType); + assert( n>0 && tokenType!=TK_ILLEGAL ); + if( tokenType==TK_VARIABLE ){ + *pnToken = n; + break; + } + nTotal += n; + zSql += n; } - break; + return nTotal; } -#endif -#ifndef SQLITE_OMIT_TRACE -/* Opcode: Trace * * * P4 * +/* +** This function returns a pointer to a nul-terminated string in memory +** obtained from sqlite3DbMalloc(). If sqlite3.vdbeExecCnt is 1, then the +** string contains a copy of zRawSql but with host parameters expanded to +** their current bindings. Or, if sqlite3.vdbeExecCnt is greater than 1, +** then the returned string holds a copy of zRawSql with "-- " prepended +** to each line of text. ** -** If tracing is enabled (by the sqlite3_trace()) interface, then -** the UTF-8 string contained in P4 is emitted on the trace callback. +** The calling function is responsible for making sure the memory returned +** is eventually freed. +** +** ALGORITHM: Scan the input string looking for host parameters in any of +** these forms: ?, ?N, $A, @A, :A. Take care to avoid text within +** string literals, quoted identifier names, and comments. For text forms, +** the host parameter index is found by scanning the perpared +** statement for the corresponding OP_Variable opcode. Once the host +** parameter index is known, locate the value in p->aVar[]. Then render +** the value as a literal in place of the host parameter name. */ -case OP_Trace: { -#if 0 /* local variables moved into u.co */ - char *zTrace; -#endif /* local variables moved into u.co */ +SQLITE_PRIVATE char *sqlite3VdbeExpandSql( + Vdbe *p, /* The prepared statement being evaluated */ + const char *zRawSql /* Raw text of the SQL statement */ +){ + sqlite3 *db; /* The database connection */ + int idx = 0; /* Index of a host parameter */ + int nextIndex = 1; /* Index of next ? host parameter */ + int n; /* Length of a token prefix */ + int nToken; /* Length of the parameter token */ + int i; /* Loop counter */ + Mem *pVar; /* Value of a host parameter */ + StrAccum out; /* Accumulate the output here */ + char zBase[100]; /* Initial working space */ - u.co.zTrace = (pOp->p4.z ? pOp->p4.z : p->zSql); - if( u.co.zTrace ){ - if( db->xTrace ){ - db->xTrace(db->pTraceArg, u.co.zTrace); + db = p->db; + sqlite3StrAccumInit(&out, zBase, sizeof(zBase), + db->aLimit[SQLITE_LIMIT_LENGTH]); + out.db = db; + if( db->vdbeExecCnt>1 ){ + while( *zRawSql ){ + const char *zStart = zRawSql; + while( *(zRawSql++)!='\n' && *zRawSql ); + sqlite3StrAccumAppend(&out, "-- ", 3); + sqlite3StrAccumAppend(&out, zStart, (int)(zRawSql-zStart)); } -#ifdef SQLITE_DEBUG - if( (db->flags & SQLITE_SqlTrace)!=0 ){ - sqlite3DebugPrintf("SQL-trace: %s\n", u.co.zTrace); + }else{ + while( zRawSql[0] ){ + n = findNextHostParameter(zRawSql, &nToken); + assert( n>0 ); + sqlite3StrAccumAppend(&out, zRawSql, n); + zRawSql += n; + assert( zRawSql[0] || nToken==0 ); + if( nToken==0 ) break; + if( zRawSql[0]=='?' ){ + if( nToken>1 ){ + assert( sqlite3Isdigit(zRawSql[1]) ); + sqlite3GetInt32(&zRawSql[1], &idx); + }else{ + idx = nextIndex; + } + }else{ + assert( zRawSql[0]==':' || zRawSql[0]=='$' || zRawSql[0]=='@' ); + testcase( zRawSql[0]==':' ); + testcase( zRawSql[0]=='$' ); + testcase( zRawSql[0]=='@' ); + idx = sqlite3VdbeParameterIndex(p, zRawSql, nToken); + assert( idx>0 ); + } + zRawSql += nToken; + nextIndex = idx + 1; + assert( idx>0 && idx<=p->nVar ); + pVar = &p->aVar[idx-1]; + if( pVar->flags & MEM_Null ){ + sqlite3StrAccumAppend(&out, "NULL", 4); + }else if( pVar->flags & MEM_Int ){ + sqlite3XPrintf(&out, "%lld", pVar->u.i); + }else if( pVar->flags & MEM_Real ){ + sqlite3XPrintf(&out, "%!.15g", pVar->r); + }else if( pVar->flags & MEM_Str ){ +#ifndef SQLITE_OMIT_UTF16 + u8 enc = ENC(db); + if( enc!=SQLITE_UTF8 ){ + Mem utf8; + memset(&utf8, 0, sizeof(utf8)); + utf8.db = db; + sqlite3VdbeMemSetStr(&utf8, pVar->z, pVar->n, enc, SQLITE_STATIC); + sqlite3VdbeChangeEncoding(&utf8, SQLITE_UTF8); + sqlite3XPrintf(&out, "'%.*q'", utf8.n, utf8.z); + sqlite3VdbeMemRelease(&utf8); + }else +#endif + { + sqlite3XPrintf(&out, "'%.*q'", pVar->n, pVar->z); + } + }else if( pVar->flags & MEM_Zero ){ + sqlite3XPrintf(&out, "zeroblob(%d)", pVar->u.nZero); + }else{ + assert( pVar->flags & MEM_Blob ); + sqlite3StrAccumAppend(&out, "x'", 2); + for(i=0; in; i++){ + sqlite3XPrintf(&out, "%02x", pVar->z[i]&0xff); + } + sqlite3StrAccumAppend(&out, "'", 1); + } } -#endif /* SQLITE_DEBUG */ } - break; + return sqlite3StrAccumFinish(&out); } -#endif +#endif /* #ifndef SQLITE_OMIT_TRACE */ -/* Opcode: Noop * * * * * -** -** Do nothing. This instruction is often useful as a jump -** destination. +/***************************************************************************** +** The following code implements the data-structure explaining logic +** for the Vdbe. */ + +#if defined(SQLITE_ENABLE_TREE_EXPLAIN) + /* -** The magic Explain opcode are only inserted when explain==2 (which -** is to say when the EXPLAIN QUERY PLAN syntax is used.) -** This opcode records information from the optimizer. It is the -** the same as a no-op. This opcodesnever appears in a real VM program. +** Allocate a new Explain object */ -default: { /* This is really OP_Noop and OP_Explain */ - break; -} - -/***************************************************************************** -** The cases of the switch statement above this line should all be indented -** by 6 spaces. But the left-most 6 spaces have been removed to improve the -** readability. From this point on down, the normal indentation rules are -** restored. -*****************************************************************************/ +SQLITE_PRIVATE void sqlite3ExplainBegin(Vdbe *pVdbe){ + if( pVdbe ){ + Explain *p; + sqlite3BeginBenignMalloc(); + p = sqlite3_malloc( sizeof(Explain) ); + if( p ){ + memset(p, 0, sizeof(*p)); + p->pVdbe = pVdbe; + sqlite3_free(pVdbe->pExplain); + pVdbe->pExplain = p; + sqlite3StrAccumInit(&p->str, p->zBase, sizeof(p->zBase), + SQLITE_MAX_LENGTH); + p->str.useMalloc = 2; + }else{ + sqlite3EndBenignMalloc(); } + } +} -#ifdef VDBE_PROFILE - { - u64 elapsed = sqlite3Hwtime() - start; - pOp->cycles += elapsed; - pOp->cnt++; -#if 0 - fprintf(stdout, "%10llu ", elapsed); - sqlite3VdbePrintOp(stdout, origPc, &p->aOp[origPc]); -#endif - } -#endif +/* +** Return true if the Explain ends with a new-line. +*/ +static int endsWithNL(Explain *p){ + return p && p->str.zText && p->str.nChar + && p->str.zText[p->str.nChar-1]=='\n'; +} + +/* +** Append text to the indentation +*/ +SQLITE_PRIVATE void sqlite3ExplainPrintf(Vdbe *pVdbe, const char *zFormat, ...){ + Explain *p; + if( pVdbe && (p = pVdbe->pExplain)!=0 ){ + va_list ap; + if( p->nIndent && endsWithNL(p) ){ + int n = p->nIndent; + if( n>ArraySize(p->aIndent) ) n = ArraySize(p->aIndent); + sqlite3AppendSpace(&p->str, p->aIndent[n-1]); + } + va_start(ap, zFormat); + sqlite3VXPrintf(&p->str, 1, zFormat, ap); + va_end(ap); + } +} - /* The following code adds nothing to the actual functionality - ** of the program. It is only here for testing and debugging. - ** On the other hand, it does burn CPU cycles every time through - ** the evaluator loop. So we can leave it out when NDEBUG is defined. - */ -#ifndef NDEBUG - assert( pc>=-1 && pcnOp ); +/* +** Append a '\n' if there is not already one. +*/ +SQLITE_PRIVATE void sqlite3ExplainNL(Vdbe *pVdbe){ + Explain *p; + if( pVdbe && (p = pVdbe->pExplain)!=0 && !endsWithNL(p) ){ + sqlite3StrAccumAppend(&p->str, "\n", 1); + } +} -#ifdef SQLITE_DEBUG - if( p->trace ){ - if( rc!=0 ) fprintf(p->trace,"rc=%d\n",rc); - if( opProperty & OPFLG_OUT2_PRERELEASE ){ - registerTrace(p->trace, pOp->p2, pOut); - } - if( opProperty & OPFLG_OUT3 ){ - registerTrace(p->trace, pOp->p3, pOut); +/* +** Push a new indentation level. Subsequent lines will be indented +** so that they begin at the current cursor position. +*/ +SQLITE_PRIVATE void sqlite3ExplainPush(Vdbe *pVdbe){ + Explain *p; + if( pVdbe && (p = pVdbe->pExplain)!=0 ){ + if( p->str.zText && p->nIndentaIndent) ){ + const char *z = p->str.zText; + int i = p->str.nChar-1; + int x; + while( i>=0 && z[i]!='\n' ){ i--; } + x = (p->str.nChar - 1) - i; + if( p->nIndent && xaIndent[p->nIndent-1] ){ + x = p->aIndent[p->nIndent-1]; } + p->aIndent[p->nIndent] = x; } -#endif /* SQLITE_DEBUG */ -#endif /* NDEBUG */ - } /* The end of the for(;;) loop the loops through opcodes */ - - /* If we reach this point, it means that execution is finished with - ** an error of some kind. - */ -vdbe_error_halt: - assert( rc ); - p->rc = rc; - sqlite3VdbeHalt(p); - if( rc==SQLITE_IOERR_NOMEM ) db->mallocFailed = 1; - rc = SQLITE_ERROR; - - /* This is the only way out of this procedure. We have to - ** release the mutexes on btrees that were acquired at the - ** top. */ -vdbe_return: - sqlite3BtreeMutexArrayLeave(&p->aMutex); - return rc; - - /* Jump to here if a string or blob larger than SQLITE_MAX_LENGTH - ** is encountered. - */ -too_big: - sqlite3SetString(&p->zErrMsg, db, "string or blob too big"); - rc = SQLITE_TOOBIG; - goto vdbe_error_halt; - - /* Jump to here if a malloc() fails. - */ -no_mem: - db->mallocFailed = 1; - sqlite3SetString(&p->zErrMsg, db, "out of memory"); - rc = SQLITE_NOMEM; - goto vdbe_error_halt; + p->nIndent++; + } +} - /* Jump to here for an SQLITE_MISUSE error. - */ -abort_due_to_misuse: - rc = SQLITE_MISUSE; - /* Fall thru into abort_due_to_error */ +/* +** Pop the indentation stack by one level. +*/ +SQLITE_PRIVATE void sqlite3ExplainPop(Vdbe *p){ + if( p && p->pExplain ) p->pExplain->nIndent--; +} - /* Jump to here for any other kind of fatal error. The "rc" variable - ** should hold the error number. - */ -abort_due_to_error: - assert( p->zErrMsg==0 ); - if( db->mallocFailed ) rc = SQLITE_NOMEM; - if( rc!=SQLITE_IOERR_NOMEM ){ - sqlite3SetString(&p->zErrMsg, db, "%s", sqlite3ErrStr(rc)); +/* +** Free the indentation structure +*/ +SQLITE_PRIVATE void sqlite3ExplainFinish(Vdbe *pVdbe){ + if( pVdbe && pVdbe->pExplain ){ + sqlite3_free(pVdbe->zExplain); + sqlite3ExplainNL(pVdbe); + pVdbe->zExplain = sqlite3StrAccumFinish(&pVdbe->pExplain->str); + sqlite3_free(pVdbe->pExplain); + pVdbe->pExplain = 0; + sqlite3EndBenignMalloc(); } - goto vdbe_error_halt; +} - /* Jump to here if the sqlite3_interrupt() API sets the interrupt - ** flag. - */ -abort_due_to_interrupt: - assert( db->u1.isInterrupted ); - rc = SQLITE_INTERRUPT; - p->rc = rc; - sqlite3SetString(&p->zErrMsg, db, "%s", sqlite3ErrStr(rc)); - goto vdbe_error_halt; +/* +** Return the explanation of a virtual machine. +*/ +SQLITE_PRIVATE const char *sqlite3VdbeExplanation(Vdbe *pVdbe){ + return (pVdbe && pVdbe->zExplain) ? pVdbe->zExplain : 0; } +#endif /* defined(SQLITE_DEBUG) */ -/************** End of vdbe.c ************************************************/ -/************** Begin file vdbeblob.c ****************************************/ +/************** End of vdbetrace.c *******************************************/ +/************** Begin file vdbe.c ********************************************/ /* -** 2007 May 1 +** 2001 September 15 ** ** The author disclaims copyright to this source code. In place of ** a legal notice, here is a blessing: @@ -56451,368 +65230,460 @@ default: { /* This is really OP_Noop and OP_Explain */ ** May you share freely, never taking more than you give. ** ************************************************************************* +** The code in this file implements execution method of the +** Virtual Database Engine (VDBE). A separate file ("vdbeaux.c") +** handles housekeeping details such as creating and deleting +** VDBE instances. This file is solely interested in executing +** the VDBE program. ** -** This file contains code used to implement incremental BLOB I/O. +** In the external interface, an "sqlite3_stmt*" is an opaque pointer +** to a VDBE. +** +** The SQL parser generates a program which is then executed by +** the VDBE to do the work of the SQL statement. VDBE programs are +** similar in form to assembly language. The program consists of +** a linear sequence of operations. Each operation has an opcode +** and 5 operands. Operands P1, P2, and P3 are integers. Operand P4 +** is a null-terminated string. Operand P5 is an unsigned character. +** Few opcodes use all 5 operands. +** +** Computation results are stored on a set of registers numbered beginning +** with 1 and going up to Vdbe.nMem. Each register can store +** either an integer, a null-terminated string, a floating point +** number, or the SQL "NULL" value. An implicit conversion from one +** type to the other occurs as necessary. +** +** Most of the code in this file is taken up by the sqlite3VdbeExec() +** function which does the work of interpreting a VDBE program. +** But other routines are also provided to help in building up +** a program instruction by instruction. ** -** $Id: vdbeblob.c,v 1.33 2009/06/01 19:53:31 drh Exp $ +** Various scripts scan this source file in order to generate HTML +** documentation, headers files, or other derived files. The formatting +** of the code in this file is, therefore, important. See other comments +** in this file for details. If in doubt, do not deviate from existing +** commenting and indentation practices when changing or adding code. */ - -#ifndef SQLITE_OMIT_INCRBLOB - /* -** Valid sqlite3_blob* handles point to Incrblob structures. +** Invoke this macro on memory cells just prior to changing the +** value of the cell. This macro verifies that shallow copies are +** not misused. */ -typedef struct Incrblob Incrblob; -struct Incrblob { - int flags; /* Copy of "flags" passed to sqlite3_blob_open() */ - int nByte; /* Size of open blob, in bytes */ - int iOffset; /* Byte offset of blob in cursor data */ - BtCursor *pCsr; /* Cursor pointing at blob row */ - sqlite3_stmt *pStmt; /* Statement holding cursor open */ - sqlite3 *db; /* The associated database */ -}; +#ifdef SQLITE_DEBUG +# define memAboutToChange(P,M) sqlite3VdbeMemAboutToChange(P,M) +#else +# define memAboutToChange(P,M) +#endif /* -** Open a blob handle. +** The following global variable is incremented every time a cursor +** moves, either by the OP_SeekXX, OP_Next, or OP_Prev opcodes. The test +** procedures use this information to make sure that indices are +** working correctly. This variable has no function other than to +** help verify the correct operation of the library. */ -SQLITE_API int sqlite3_blob_open( - sqlite3* db, /* The database connection */ - const char *zDb, /* The attached database containing the blob */ - const char *zTable, /* The table containing the blob */ - const char *zColumn, /* The column containing the blob */ - sqlite_int64 iRow, /* The row containing the glob */ - int flags, /* True -> read/write access, false -> read-only */ - sqlite3_blob **ppBlob /* Handle for accessing the blob returned here */ -){ - int nAttempt = 0; - int iCol; /* Index of zColumn in row-record */ - - /* This VDBE program seeks a btree cursor to the identified - ** db/table/row entry. The reason for using a vdbe program instead - ** of writing code to use the b-tree layer directly is that the - ** vdbe program will take advantage of the various transaction, - ** locking and error handling infrastructure built into the vdbe. - ** - ** After seeking the cursor, the vdbe executes an OP_ResultRow. - ** Code external to the Vdbe then "borrows" the b-tree cursor and - ** uses it to implement the blob_read(), blob_write() and - ** blob_bytes() functions. - ** - ** The sqlite3_blob_close() function finalizes the vdbe program, - ** which closes the b-tree cursor and (possibly) commits the - ** transaction. - */ - static const VdbeOpList openBlob[] = { - {OP_Transaction, 0, 0, 0}, /* 0: Start a transaction */ - {OP_VerifyCookie, 0, 0, 0}, /* 1: Check the schema cookie */ +#ifdef SQLITE_TEST +SQLITE_API int sqlite3_search_count = 0; +#endif - /* One of the following two instructions is replaced by an - ** OP_Noop before exection. - */ - {OP_OpenRead, 0, 0, 0}, /* 2: Open cursor 0 for reading */ - {OP_OpenWrite, 0, 0, 0}, /* 3: Open cursor 0 for read/write */ - - {OP_Variable, 1, 1, 1}, /* 4: Push the rowid to the stack */ - {OP_NotExists, 0, 8, 1}, /* 5: Seek the cursor */ - {OP_Column, 0, 0, 1}, /* 6 */ - {OP_ResultRow, 1, 0, 0}, /* 7 */ - {OP_Close, 0, 0, 0}, /* 8 */ - {OP_Halt, 0, 0, 0}, /* 9 */ - }; +/* +** When this global variable is positive, it gets decremented once before +** each instruction in the VDBE. When it reaches zero, the u1.isInterrupted +** field of the sqlite3 structure is set in order to simulate an interrupt. +** +** This facility is used for testing purposes only. It does not function +** in an ordinary build. +*/ +#ifdef SQLITE_TEST +SQLITE_API int sqlite3_interrupt_count = 0; +#endif - Vdbe *v = 0; - int rc = SQLITE_OK; - char *zErr = 0; - Table *pTab; - Parse *pParse; +/* +** The next global variable is incremented each type the OP_Sort opcode +** is executed. The test procedures use this information to make sure that +** sorting is occurring or not occurring at appropriate times. This variable +** has no function other than to help verify the correct operation of the +** library. +*/ +#ifdef SQLITE_TEST +SQLITE_API int sqlite3_sort_count = 0; +#endif - *ppBlob = 0; - sqlite3_mutex_enter(db->mutex); - pParse = sqlite3StackAllocRaw(db, sizeof(*pParse)); - if( pParse==0 ){ - rc = SQLITE_NOMEM; - goto blob_open_out; +/* +** The next global variable records the size of the largest MEM_Blob +** or MEM_Str that has been used by a VDBE opcode. The test procedures +** use this information to make sure that the zero-blob functionality +** is working correctly. This variable has no function other than to +** help verify the correct operation of the library. +*/ +#ifdef SQLITE_TEST +SQLITE_API int sqlite3_max_blobsize = 0; +static void updateMaxBlobsize(Mem *p){ + if( (p->flags & (MEM_Str|MEM_Blob))!=0 && p->n>sqlite3_max_blobsize ){ + sqlite3_max_blobsize = p->n; } - do { - memset(pParse, 0, sizeof(Parse)); - pParse->db = db; +} +#endif - if( sqlite3SafetyOn(db) ){ - sqlite3DbFree(db, zErr); - sqlite3StackFree(db, pParse); - sqlite3_mutex_leave(db->mutex); - return SQLITE_MISUSE; - } +/* +** The next global variable is incremented each type the OP_Found opcode +** is executed. This is used to test whether or not the foreign key +** operation implemented using OP_FkIsZero is working. This variable +** has no function other than to help verify the correct operation of the +** library. +*/ +#ifdef SQLITE_TEST +SQLITE_API int sqlite3_found_count = 0; +#endif - sqlite3BtreeEnterAll(db); - pTab = sqlite3LocateTable(pParse, 0, zTable, zDb); - if( pTab && IsVirtual(pTab) ){ - pTab = 0; - sqlite3ErrorMsg(pParse, "cannot open virtual table: %s", zTable); - } -#ifndef SQLITE_OMIT_VIEW - if( pTab && pTab->pSelect ){ - pTab = 0; - sqlite3ErrorMsg(pParse, "cannot open view: %s", zTable); - } +/* +** Test a register to see if it exceeds the current maximum blob size. +** If it does, record the new maximum blob size. +*/ +#if defined(SQLITE_TEST) && !defined(SQLITE_OMIT_BUILTIN_TEST) +# define UPDATE_MAX_BLOBSIZE(P) updateMaxBlobsize(P) +#else +# define UPDATE_MAX_BLOBSIZE(P) #endif - if( !pTab ){ - if( pParse->zErrMsg ){ - sqlite3DbFree(db, zErr); - zErr = pParse->zErrMsg; - pParse->zErrMsg = 0; - } - rc = SQLITE_ERROR; - (void)sqlite3SafetyOff(db); - sqlite3BtreeLeaveAll(db); - goto blob_open_out; - } - - /* Now search pTab for the exact column. */ - for(iCol=0; iCol < pTab->nCol; iCol++) { - if( sqlite3StrICmp(pTab->aCol[iCol].zName, zColumn)==0 ){ - break; - } - } - if( iCol==pTab->nCol ){ - sqlite3DbFree(db, zErr); - zErr = sqlite3MPrintf(db, "no such column: \"%s\"", zColumn); - rc = SQLITE_ERROR; - (void)sqlite3SafetyOff(db); - sqlite3BtreeLeaveAll(db); - goto blob_open_out; - } - /* If the value is being opened for writing, check that the - ** column is not indexed. It is against the rules to open an - ** indexed column for writing. - */ - if( flags ){ - Index *pIdx; - for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){ - int j; - for(j=0; jnColumn; j++){ - if( pIdx->aiColumn[j]==iCol ){ - sqlite3DbFree(db, zErr); - zErr = sqlite3MPrintf(db, - "cannot open indexed column for writing"); - rc = SQLITE_ERROR; - (void)sqlite3SafetyOff(db); - sqlite3BtreeLeaveAll(db); - goto blob_open_out; - } - } - } - } +/* +** Convert the given register into a string if it isn't one +** already. Return non-zero if a malloc() fails. +*/ +#define Stringify(P, enc) \ + if(((P)->flags&(MEM_Str|MEM_Blob))==0 && sqlite3VdbeMemStringify(P,enc)) \ + { goto no_mem; } - v = sqlite3VdbeCreate(db); - if( v ){ - int iDb = sqlite3SchemaToIndex(db, pTab->pSchema); - sqlite3VdbeAddOpList(v, sizeof(openBlob)/sizeof(VdbeOpList), openBlob); +/* +** An ephemeral string value (signified by the MEM_Ephem flag) contains +** a pointer to a dynamically allocated string where some other entity +** is responsible for deallocating that string. Because the register +** does not control the string, it might be deleted without the register +** knowing it. +** +** This routine converts an ephemeral string into a dynamically allocated +** string that the register itself controls. In other words, it +** converts an MEM_Ephem string into an MEM_Dyn string. +*/ +#define Deephemeralize(P) \ + if( ((P)->flags&MEM_Ephem)!=0 \ + && sqlite3VdbeMemMakeWriteable(P) ){ goto no_mem;} - /* Configure the OP_Transaction */ - sqlite3VdbeChangeP1(v, 0, iDb); - sqlite3VdbeChangeP2(v, 0, (flags ? 1 : 0)); +/* Return true if the cursor was opened using the OP_OpenSorter opcode. */ +#ifdef SQLITE_OMIT_MERGE_SORT +# define isSorter(x) 0 +#else +# define isSorter(x) ((x)->pSorter!=0) +#endif - /* Configure the OP_VerifyCookie */ - sqlite3VdbeChangeP1(v, 1, iDb); - sqlite3VdbeChangeP2(v, 1, pTab->pSchema->schema_cookie); +/* +** Argument pMem points at a register that will be passed to a +** user-defined function or returned to the user as the result of a query. +** This routine sets the pMem->type variable used by the sqlite3_value_*() +** routines. +*/ +SQLITE_PRIVATE void sqlite3VdbeMemStoreType(Mem *pMem){ + int flags = pMem->flags; + if( flags & MEM_Null ){ + pMem->type = SQLITE_NULL; + } + else if( flags & MEM_Int ){ + pMem->type = SQLITE_INTEGER; + } + else if( flags & MEM_Real ){ + pMem->type = SQLITE_FLOAT; + } + else if( flags & MEM_Str ){ + pMem->type = SQLITE_TEXT; + }else{ + pMem->type = SQLITE_BLOB; + } +} - /* Make sure a mutex is held on the table to be accessed */ - sqlite3VdbeUsesBtree(v, iDb); +/* +** Allocate VdbeCursor number iCur. Return a pointer to it. Return NULL +** if we run out of memory. +*/ +static VdbeCursor *allocateCursor( + Vdbe *p, /* The virtual machine */ + int iCur, /* Index of the new VdbeCursor */ + int nField, /* Number of fields in the table or index */ + int iDb, /* Database the cursor belongs to, or -1 */ + int isBtreeCursor /* True for B-Tree. False for pseudo-table or vtab */ +){ + /* Find the memory cell that will be used to store the blob of memory + ** required for this VdbeCursor structure. It is convenient to use a + ** vdbe memory cell to manage the memory allocation required for a + ** VdbeCursor structure for the following reasons: + ** + ** * Sometimes cursor numbers are used for a couple of different + ** purposes in a vdbe program. The different uses might require + ** different sized allocations. Memory cells provide growable + ** allocations. + ** + ** * When using ENABLE_MEMORY_MANAGEMENT, memory cell buffers can + ** be freed lazily via the sqlite3_release_memory() API. This + ** minimizes the number of malloc calls made by the system. + ** + ** Memory cells for cursors are allocated at the top of the address + ** space. Memory cell (p->nMem) corresponds to cursor 0. Space for + ** cursor 1 is managed by memory cell (p->nMem-1), etc. + */ + Mem *pMem = &p->aMem[p->nMem-iCur]; - /* Remove either the OP_OpenWrite or OpenRead. Set the P2 - ** parameter of the other to pTab->tnum. - */ - flags = !!flags; - sqlite3VdbeChangeToNoop(v, 3 - flags, 1); - sqlite3VdbeChangeP2(v, 2 + flags, pTab->tnum); - sqlite3VdbeChangeP3(v, 2 + flags, iDb); + int nByte; + VdbeCursor *pCx = 0; + nByte = + ROUND8(sizeof(VdbeCursor)) + + (isBtreeCursor?sqlite3BtreeCursorSize():0) + + 2*nField*sizeof(u32); - /* Configure the number of columns. Configure the cursor to - ** think that the table has one more column than it really - ** does. An OP_Column to retrieve this imaginary column will - ** always return an SQL NULL. This is useful because it means - ** we can invoke OP_Column to fill in the vdbe cursors type - ** and offset cache without causing any IO. - */ - sqlite3VdbeChangeP4(v, 2+flags, SQLITE_INT_TO_PTR(pTab->nCol+1),P4_INT32); - sqlite3VdbeChangeP2(v, 6, pTab->nCol); - if( !db->mallocFailed ){ - sqlite3VdbeMakeReady(v, 1, 1, 1, 0); - } + assert( iCurnCursor ); + if( p->apCsr[iCur] ){ + sqlite3VdbeFreeCursor(p, p->apCsr[iCur]); + p->apCsr[iCur] = 0; + } + if( SQLITE_OK==sqlite3VdbeMemGrow(pMem, nByte, 0) ){ + p->apCsr[iCur] = pCx = (VdbeCursor*)pMem->z; + memset(pCx, 0, sizeof(VdbeCursor)); + pCx->iDb = iDb; + pCx->nField = nField; + if( nField ){ + pCx->aType = (u32 *)&pMem->z[ROUND8(sizeof(VdbeCursor))]; } - - sqlite3BtreeLeaveAll(db); - rc = sqlite3SafetyOff(db); - if( NEVER(rc!=SQLITE_OK) || db->mallocFailed ){ - goto blob_open_out; + if( isBtreeCursor ){ + pCx->pCursor = (BtCursor*) + &pMem->z[ROUND8(sizeof(VdbeCursor))+2*nField*sizeof(u32)]; + sqlite3BtreeCursorZero(pCx->pCursor); } + } + return pCx; +} - sqlite3_bind_int64((sqlite3_stmt *)v, 1, iRow); - rc = sqlite3_step((sqlite3_stmt *)v); - if( rc!=SQLITE_ROW ){ - nAttempt++; - rc = sqlite3_finalize((sqlite3_stmt *)v); - sqlite3DbFree(db, zErr); - zErr = sqlite3MPrintf(db, sqlite3_errmsg(db)); - v = 0; +/* +** Try to convert a value into a numeric representation if we can +** do so without loss of information. In other words, if the string +** looks like a number, convert it into a number. If it does not +** look like a number, leave it alone. +*/ +static void applyNumericAffinity(Mem *pRec){ + if( (pRec->flags & (MEM_Real|MEM_Int))==0 ){ + double rValue; + i64 iValue; + u8 enc = pRec->enc; + if( (pRec->flags&MEM_Str)==0 ) return; + if( sqlite3AtoF(pRec->z, &rValue, pRec->n, enc)==0 ) return; + if( 0==sqlite3Atoi64(pRec->z, &iValue, pRec->n, enc) ){ + pRec->u.i = iValue; + pRec->flags |= MEM_Int; + }else{ + pRec->r = rValue; + pRec->flags |= MEM_Real; } - } while( nAttempt<5 && rc==SQLITE_SCHEMA ); + } +} - if( rc==SQLITE_ROW ){ - /* The row-record has been opened successfully. Check that the - ** column in question contains text or a blob. If it contains - ** text, it is up to the caller to get the encoding right. +/* +** Processing is determine by the affinity parameter: +** +** SQLITE_AFF_INTEGER: +** SQLITE_AFF_REAL: +** SQLITE_AFF_NUMERIC: +** Try to convert pRec to an integer representation or a +** floating-point representation if an integer representation +** is not possible. Note that the integer representation is +** always preferred, even if the affinity is REAL, because +** an integer representation is more space efficient on disk. +** +** SQLITE_AFF_TEXT: +** Convert pRec to a text representation. +** +** SQLITE_AFF_NONE: +** No-op. pRec is unchanged. +*/ +static void applyAffinity( + Mem *pRec, /* The value to apply affinity to */ + char affinity, /* The affinity to be applied */ + u8 enc /* Use this text encoding */ +){ + if( affinity==SQLITE_AFF_TEXT ){ + /* Only attempt the conversion to TEXT if there is an integer or real + ** representation (blob and NULL do not get converted) but no string + ** representation. */ - Incrblob *pBlob; - u32 type = v->apCsr[0]->aType[iCol]; - - if( type<12 ){ - sqlite3DbFree(db, zErr); - zErr = sqlite3MPrintf(db, "cannot open value of type %s", - type==0?"null": type==7?"real": "integer" - ); - rc = SQLITE_ERROR; - goto blob_open_out; + if( 0==(pRec->flags&MEM_Str) && (pRec->flags&(MEM_Real|MEM_Int)) ){ + sqlite3VdbeMemStringify(pRec, enc); } - pBlob = (Incrblob *)sqlite3DbMallocZero(db, sizeof(Incrblob)); - if( db->mallocFailed ){ - sqlite3DbFree(db, pBlob); - goto blob_open_out; + pRec->flags &= ~(MEM_Real|MEM_Int); + }else if( affinity!=SQLITE_AFF_NONE ){ + assert( affinity==SQLITE_AFF_INTEGER || affinity==SQLITE_AFF_REAL + || affinity==SQLITE_AFF_NUMERIC ); + applyNumericAffinity(pRec); + if( pRec->flags & MEM_Real ){ + sqlite3VdbeIntegerAffinity(pRec); } - pBlob->flags = flags; - pBlob->pCsr = v->apCsr[0]->pCursor; - sqlite3BtreeEnterCursor(pBlob->pCsr); - sqlite3BtreeCacheOverflow(pBlob->pCsr); - sqlite3BtreeLeaveCursor(pBlob->pCsr); - pBlob->pStmt = (sqlite3_stmt *)v; - pBlob->iOffset = v->apCsr[0]->aOffset[iCol]; - pBlob->nByte = sqlite3VdbeSerialTypeLen(type); - pBlob->db = db; - *ppBlob = (sqlite3_blob *)pBlob; - rc = SQLITE_OK; - }else if( rc==SQLITE_OK ){ - sqlite3DbFree(db, zErr); - zErr = sqlite3MPrintf(db, "no such rowid: %lld", iRow); - rc = SQLITE_ERROR; - } - -blob_open_out: - if( v && (rc!=SQLITE_OK || db->mallocFailed) ){ - sqlite3VdbeFinalize(v); } - sqlite3Error(db, rc, zErr); - sqlite3DbFree(db, zErr); - sqlite3StackFree(db, pParse); - rc = sqlite3ApiExit(db, rc); - sqlite3_mutex_leave(db->mutex); - return rc; } /* -** Close a blob handle that was previously created using -** sqlite3_blob_open(). +** Try to convert the type of a function argument or a result column +** into a numeric representation. Use either INTEGER or REAL whichever +** is appropriate. But only do the conversion if it is possible without +** loss of information and return the revised type of the argument. */ -SQLITE_API int sqlite3_blob_close(sqlite3_blob *pBlob){ - Incrblob *p = (Incrblob *)pBlob; - int rc; - sqlite3 *db; - - if( p ){ - db = p->db; - sqlite3_mutex_enter(db->mutex); - rc = sqlite3_finalize(p->pStmt); - sqlite3DbFree(db, p); - sqlite3_mutex_leave(db->mutex); - }else{ - rc = SQLITE_OK; +SQLITE_API int sqlite3_value_numeric_type(sqlite3_value *pVal){ + Mem *pMem = (Mem*)pVal; + if( pMem->type==SQLITE_TEXT ){ + applyNumericAffinity(pMem); + sqlite3VdbeMemStoreType(pMem); } - return rc; + return pMem->type; } /* -** Perform a read or write operation on a blob +** Exported version of applyAffinity(). This one works on sqlite3_value*, +** not the internal Mem* type. */ -static int blobReadWrite( - sqlite3_blob *pBlob, - void *z, - int n, - int iOffset, - int (*xCall)(BtCursor*, u32, u32, void*) +SQLITE_PRIVATE void sqlite3ValueApplyAffinity( + sqlite3_value *pVal, + u8 affinity, + u8 enc ){ - int rc; - Incrblob *p = (Incrblob *)pBlob; - Vdbe *v; - sqlite3 *db; + applyAffinity((Mem *)pVal, affinity, enc); +} - if( p==0 ) return SQLITE_MISUSE; - db = p->db; - sqlite3_mutex_enter(db->mutex); - v = (Vdbe*)p->pStmt; +#ifdef SQLITE_DEBUG +/* +** Write a nice string representation of the contents of cell pMem +** into buffer zBuf, length nBuf. +*/ +SQLITE_PRIVATE void sqlite3VdbeMemPrettyPrint(Mem *pMem, char *zBuf){ + char *zCsr = zBuf; + int f = pMem->flags; - if( n<0 || iOffset<0 || (iOffset+n)>p->nByte ){ - /* Request is out of range. Return a transient error. */ - rc = SQLITE_ERROR; - sqlite3Error(db, SQLITE_ERROR, 0); - } else if( v==0 ){ - /* If there is no statement handle, then the blob-handle has - ** already been invalidated. Return SQLITE_ABORT in this case. - */ - rc = SQLITE_ABORT; - }else{ - /* Call either BtreeData() or BtreePutData(). If SQLITE_ABORT is - ** returned, clean-up the statement handle. - */ - assert( db == v->db ); - sqlite3BtreeEnterCursor(p->pCsr); - rc = xCall(p->pCsr, iOffset+p->iOffset, n, z); - sqlite3BtreeLeaveCursor(p->pCsr); - if( rc==SQLITE_ABORT ){ - sqlite3VdbeFinalize(v); - p->pStmt = 0; + static const char *const encnames[] = {"(X)", "(8)", "(16LE)", "(16BE)"}; + + if( f&MEM_Blob ){ + int i; + char c; + if( f & MEM_Dyn ){ + c = 'z'; + assert( (f & (MEM_Static|MEM_Ephem))==0 ); + }else if( f & MEM_Static ){ + c = 't'; + assert( (f & (MEM_Dyn|MEM_Ephem))==0 ); + }else if( f & MEM_Ephem ){ + c = 'e'; + assert( (f & (MEM_Static|MEM_Dyn))==0 ); }else{ - db->errCode = rc; - v->rc = rc; + c = 's'; + } + + sqlite3_snprintf(100, zCsr, "%c", c); + zCsr += sqlite3Strlen30(zCsr); + sqlite3_snprintf(100, zCsr, "%d[", pMem->n); + zCsr += sqlite3Strlen30(zCsr); + for(i=0; i<16 && in; i++){ + sqlite3_snprintf(100, zCsr, "%02X", ((int)pMem->z[i] & 0xFF)); + zCsr += sqlite3Strlen30(zCsr); + } + for(i=0; i<16 && in; i++){ + char z = pMem->z[i]; + if( z<32 || z>126 ) *zCsr++ = '.'; + else *zCsr++ = z; + } + + sqlite3_snprintf(100, zCsr, "]%s", encnames[pMem->enc]); + zCsr += sqlite3Strlen30(zCsr); + if( f & MEM_Zero ){ + sqlite3_snprintf(100, zCsr,"+%dz",pMem->u.nZero); + zCsr += sqlite3Strlen30(zCsr); + } + *zCsr = '\0'; + }else if( f & MEM_Str ){ + int j, k; + zBuf[0] = ' '; + if( f & MEM_Dyn ){ + zBuf[1] = 'z'; + assert( (f & (MEM_Static|MEM_Ephem))==0 ); + }else if( f & MEM_Static ){ + zBuf[1] = 't'; + assert( (f & (MEM_Dyn|MEM_Ephem))==0 ); + }else if( f & MEM_Ephem ){ + zBuf[1] = 'e'; + assert( (f & (MEM_Static|MEM_Dyn))==0 ); + }else{ + zBuf[1] = 's'; + } + k = 2; + sqlite3_snprintf(100, &zBuf[k], "%d", pMem->n); + k += sqlite3Strlen30(&zBuf[k]); + zBuf[k++] = '['; + for(j=0; j<15 && jn; j++){ + u8 c = pMem->z[j]; + if( c>=0x20 && c<0x7f ){ + zBuf[k++] = c; + }else{ + zBuf[k++] = '.'; + } } + zBuf[k++] = ']'; + sqlite3_snprintf(100,&zBuf[k], encnames[pMem->enc]); + k += sqlite3Strlen30(&zBuf[k]); + zBuf[k++] = 0; } - rc = sqlite3ApiExit(db, rc); - sqlite3_mutex_leave(db->mutex); - return rc; } +#endif +#ifdef SQLITE_DEBUG /* -** Read data from a blob handle. +** Print the value of a register for tracing purposes: */ -SQLITE_API int sqlite3_blob_read(sqlite3_blob *pBlob, void *z, int n, int iOffset){ - return blobReadWrite(pBlob, z, n, iOffset, sqlite3BtreeData); +static void memTracePrint(FILE *out, Mem *p){ + if( p->flags & MEM_Null ){ + fprintf(out, " NULL"); + }else if( (p->flags & (MEM_Int|MEM_Str))==(MEM_Int|MEM_Str) ){ + fprintf(out, " si:%lld", p->u.i); + }else if( p->flags & MEM_Int ){ + fprintf(out, " i:%lld", p->u.i); +#ifndef SQLITE_OMIT_FLOATING_POINT + }else if( p->flags & MEM_Real ){ + fprintf(out, " r:%g", p->r); +#endif + }else if( p->flags & MEM_RowSet ){ + fprintf(out, " (rowset)"); + }else{ + char zBuf[200]; + sqlite3VdbeMemPrettyPrint(p, zBuf); + fprintf(out, " "); + fprintf(out, "%s", zBuf); + } } - -/* -** Write data to a blob handle. -*/ -SQLITE_API int sqlite3_blob_write(sqlite3_blob *pBlob, const void *z, int n, int iOffset){ - return blobReadWrite(pBlob, (void *)z, n, iOffset, sqlite3BtreePutData); +static void registerTrace(FILE *out, int iReg, Mem *p){ + fprintf(out, "REG[%d] = ", iReg); + memTracePrint(out, p); + fprintf(out, "\n"); } +#endif -/* -** Query a blob handle for the size of the data. -** -** The Incrblob.nByte field is fixed for the lifetime of the Incrblob -** so no mutex is required for access. -*/ -SQLITE_API int sqlite3_blob_bytes(sqlite3_blob *pBlob){ - Incrblob *p = (Incrblob *)pBlob; - return p ? p->nByte : 0; -} +#ifdef SQLITE_DEBUG +# define REGISTER_TRACE(R,M) if(p->trace)registerTrace(p->trace,R,M) +#else +# define REGISTER_TRACE(R,M) +#endif -#endif /* #ifndef SQLITE_OMIT_INCRBLOB */ -/************** End of vdbeblob.c ********************************************/ -/************** Begin file journal.c *****************************************/ +#ifdef VDBE_PROFILE + +/* +** hwtime.h contains inline assembler code for implementing +** high-performance timing routines. +*/ +/************** Include hwtime.h in the middle of vdbe.c *********************/ +/************** Begin file hwtime.h ******************************************/ /* -** 2007 August 22 +** 2008 May 27 ** ** The author disclaims copyright to this source code. In place of ** a legal notice, here is a blessing: @@ -56821,5953 +65692,6395 @@ SQLITE_API int sqlite3_blob_bytes(sqlite3_blob *pBlob){ ** May you find forgiveness for yourself and forgive others. ** May you share freely, never taking more than you give. ** -************************************************************************* +****************************************************************************** ** -** @(#) $Id: journal.c,v 1.9 2009/01/20 17:06:27 danielk1977 Exp $ +** This file contains inline asm code for retrieving "high-performance" +** counters for x86 class CPUs. */ - -#ifdef SQLITE_ENABLE_ATOMIC_WRITE +#ifndef _HWTIME_H_ +#define _HWTIME_H_ /* -** This file implements a special kind of sqlite3_file object used -** by SQLite to create journal files if the atomic-write optimization -** is enabled. -** -** The distinctive characteristic of this sqlite3_file is that the -** actual on disk file is created lazily. When the file is created, -** the caller specifies a buffer size for an in-memory buffer to -** be used to service read() and write() requests. The actual file -** on disk is not created or populated until either: -** -** 1) The in-memory representation grows too large for the allocated -** buffer, or -** 2) The sqlite3JournalCreate() function is called. +** The following routine only works on pentium-class (or newer) processors. +** It uses the RDTSC opcode to read the cycle count value out of the +** processor and returns that value. This can be used for high-res +** profiling. */ +#if (defined(__GNUC__) || defined(_MSC_VER)) && \ + (defined(i386) || defined(__i386__) || defined(_M_IX86)) + #if defined(__GNUC__) + __inline__ sqlite_uint64 sqlite3Hwtime(void){ + unsigned int lo, hi; + __asm__ __volatile__ ("rdtsc" : "=a" (lo), "=d" (hi)); + return (sqlite_uint64)hi << 32 | lo; + } -/* -** A JournalFile object is a subclass of sqlite3_file used by -** as an open file handle for journal files. -*/ -struct JournalFile { - sqlite3_io_methods *pMethod; /* I/O methods on journal files */ - int nBuf; /* Size of zBuf[] in bytes */ - char *zBuf; /* Space to buffer journal writes */ - int iSize; /* Amount of zBuf[] currently used */ - int flags; /* xOpen flags */ - sqlite3_vfs *pVfs; /* The "real" underlying VFS */ - sqlite3_file *pReal; /* The "real" underlying file descriptor */ - const char *zJournal; /* Name of the journal file */ -}; -typedef struct JournalFile JournalFile; + #elif defined(_MSC_VER) -/* -** If it does not already exists, create and populate the on-disk file -** for JournalFile p. -*/ -static int createFile(JournalFile *p){ - int rc = SQLITE_OK; - if( !p->pReal ){ - sqlite3_file *pReal = (sqlite3_file *)&p[1]; - rc = sqlite3OsOpen(p->pVfs, p->zJournal, pReal, p->flags, 0); - if( rc==SQLITE_OK ){ - p->pReal = pReal; - if( p->iSize>0 ){ - assert(p->iSize<=p->nBuf); - rc = sqlite3OsWrite(p->pReal, p->zBuf, p->iSize, 0); - } - } - } - return rc; -} - -/* -** Close the file. -*/ -static int jrnlClose(sqlite3_file *pJfd){ - JournalFile *p = (JournalFile *)pJfd; - if( p->pReal ){ - sqlite3OsClose(p->pReal); - } - sqlite3_free(p->zBuf); - return SQLITE_OK; -} - -/* -** Read data from the file. -*/ -static int jrnlRead( - sqlite3_file *pJfd, /* The journal file from which to read */ - void *zBuf, /* Put the results here */ - int iAmt, /* Number of bytes to read */ - sqlite_int64 iOfst /* Begin reading at this offset */ -){ - int rc = SQLITE_OK; - JournalFile *p = (JournalFile *)pJfd; - if( p->pReal ){ - rc = sqlite3OsRead(p->pReal, zBuf, iAmt, iOfst); - }else if( (iAmt+iOfst)>p->iSize ){ - rc = SQLITE_IOERR_SHORT_READ; - }else{ - memcpy(zBuf, &p->zBuf[iOfst], iAmt); + __declspec(naked) __inline sqlite_uint64 __cdecl sqlite3Hwtime(void){ + __asm { + rdtsc + ret ; return value at EDX:EAX + } } - return rc; -} -/* -** Write data to the file. -*/ -static int jrnlWrite( - sqlite3_file *pJfd, /* The journal file into which to write */ - const void *zBuf, /* Take data to be written from here */ - int iAmt, /* Number of bytes to write */ - sqlite_int64 iOfst /* Begin writing at this offset into the file */ -){ - int rc = SQLITE_OK; - JournalFile *p = (JournalFile *)pJfd; - if( !p->pReal && (iOfst+iAmt)>p->nBuf ){ - rc = createFile(p); - } - if( rc==SQLITE_OK ){ - if( p->pReal ){ - rc = sqlite3OsWrite(p->pReal, zBuf, iAmt, iOfst); - }else{ - memcpy(&p->zBuf[iOfst], zBuf, iAmt); - if( p->iSize<(iOfst+iAmt) ){ - p->iSize = (iOfst+iAmt); - } - } - } - return rc; -} + #endif -/* -** Truncate the file. -*/ -static int jrnlTruncate(sqlite3_file *pJfd, sqlite_int64 size){ - int rc = SQLITE_OK; - JournalFile *p = (JournalFile *)pJfd; - if( p->pReal ){ - rc = sqlite3OsTruncate(p->pReal, size); - }else if( sizeiSize ){ - p->iSize = size; - } - return rc; -} +#elif (defined(__GNUC__) && defined(__x86_64__)) -/* -** Sync the file. -*/ -static int jrnlSync(sqlite3_file *pJfd, int flags){ - int rc; - JournalFile *p = (JournalFile *)pJfd; - if( p->pReal ){ - rc = sqlite3OsSync(p->pReal, flags); - }else{ - rc = SQLITE_OK; + __inline__ sqlite_uint64 sqlite3Hwtime(void){ + unsigned long val; + __asm__ __volatile__ ("rdtsc" : "=A" (val)); + return val; } - return rc; -} + +#elif (defined(__GNUC__) && defined(__ppc__)) -/* -** Query the size of the file in bytes. -*/ -static int jrnlFileSize(sqlite3_file *pJfd, sqlite_int64 *pSize){ - int rc = SQLITE_OK; - JournalFile *p = (JournalFile *)pJfd; - if( p->pReal ){ - rc = sqlite3OsFileSize(p->pReal, pSize); - }else{ - *pSize = (sqlite_int64) p->iSize; + __inline__ sqlite_uint64 sqlite3Hwtime(void){ + unsigned long long retval; + unsigned long junk; + __asm__ __volatile__ ("\n\ + 1: mftbu %1\n\ + mftb %L0\n\ + mftbu %0\n\ + cmpw %0,%1\n\ + bne 1b" + : "=r" (retval), "=r" (junk)); + return retval; } - return rc; -} -/* -** Table of methods for JournalFile sqlite3_file object. -*/ -static struct sqlite3_io_methods JournalFileMethods = { - 1, /* iVersion */ - jrnlClose, /* xClose */ - jrnlRead, /* xRead */ - jrnlWrite, /* xWrite */ - jrnlTruncate, /* xTruncate */ - jrnlSync, /* xSync */ - jrnlFileSize, /* xFileSize */ - 0, /* xLock */ - 0, /* xUnlock */ - 0, /* xCheckReservedLock */ - 0, /* xFileControl */ - 0, /* xSectorSize */ - 0 /* xDeviceCharacteristics */ -}; +#else -/* -** Open a journal file. -*/ -SQLITE_PRIVATE int sqlite3JournalOpen( - sqlite3_vfs *pVfs, /* The VFS to use for actual file I/O */ - const char *zName, /* Name of the journal file */ - sqlite3_file *pJfd, /* Preallocated, blank file handle */ - int flags, /* Opening flags */ - int nBuf /* Bytes buffered before opening the file */ -){ - JournalFile *p = (JournalFile *)pJfd; - memset(p, 0, sqlite3JournalSize(pVfs)); - if( nBuf>0 ){ - p->zBuf = sqlite3MallocZero(nBuf); - if( !p->zBuf ){ - return SQLITE_NOMEM; - } - }else{ - return sqlite3OsOpen(pVfs, zName, pJfd, flags, 0); - } - p->pMethod = &JournalFileMethods; - p->nBuf = nBuf; - p->flags = flags; - p->zJournal = zName; - p->pVfs = pVfs; - return SQLITE_OK; -} + #error Need implementation of sqlite3Hwtime() for your platform. -/* -** If the argument p points to a JournalFile structure, and the underlying -** file has not yet been created, create it now. -*/ -SQLITE_PRIVATE int sqlite3JournalCreate(sqlite3_file *p){ - if( p->pMethods!=&JournalFileMethods ){ - return SQLITE_OK; - } - return createFile((JournalFile *)p); -} + /* + ** To compile without implementing sqlite3Hwtime() for your platform, + ** you can remove the above #error and use the following + ** stub function. You will lose timing support for many + ** of the debugging and testing utilities, but it should at + ** least compile and run. + */ +SQLITE_PRIVATE sqlite_uint64 sqlite3Hwtime(void){ return ((sqlite_uint64)0); } -/* -** Return the number of bytes required to store a JournalFile that uses vfs -** pVfs to create the underlying on-disk files. -*/ -SQLITE_PRIVATE int sqlite3JournalSize(sqlite3_vfs *pVfs){ - return (pVfs->szOsFile+sizeof(JournalFile)); -} #endif -/************** End of journal.c *********************************************/ -/************** Begin file memjournal.c **************************************/ -/* -** 2008 October 7 -** -** The author disclaims copyright to this source code. In place of -** a legal notice, here is a blessing: -** -** May you do good and not evil. -** May you find forgiveness for yourself and forgive others. -** May you share freely, never taking more than you give. -** -************************************************************************* -** -** This file contains code use to implement an in-memory rollback journal. -** The in-memory rollback journal is used to journal transactions for -** ":memory:" databases and when the journal_mode=MEMORY pragma is used. -** -** @(#) $Id: memjournal.c,v 1.12 2009/05/04 11:42:30 danielk1977 Exp $ -*/ - -/* Forward references to internal structures */ -typedef struct MemJournal MemJournal; -typedef struct FilePoint FilePoint; -typedef struct FileChunk FileChunk; +#endif /* !defined(_HWTIME_H_) */ -/* Space to hold the rollback journal is allocated in increments of -** this many bytes. -** -** The size chosen is a little less than a power of two. That way, -** the FileChunk object will have a size that almost exactly fills -** a power-of-two allocation. This mimimizes wasted space in power-of-two -** memory allocators. -*/ -#define JOURNAL_CHUNKSIZE ((int)(1024-sizeof(FileChunk*))) +/************** End of hwtime.h **********************************************/ +/************** Continuing where we left off in vdbe.c ***********************/ -/* Macro to find the minimum of two numeric values. -*/ -#ifndef MIN -# define MIN(x,y) ((x)<(y)?(x):(y)) #endif /* -** The rollback journal is composed of a linked list of these structures. -*/ -struct FileChunk { - FileChunk *pNext; /* Next chunk in the journal */ - u8 zChunk[JOURNAL_CHUNKSIZE]; /* Content of this chunk */ -}; - -/* -** An instance of this object serves as a cursor into the rollback journal. -** The cursor can be either for reading or writing. -*/ -struct FilePoint { - sqlite3_int64 iOffset; /* Offset from the beginning of the file */ - FileChunk *pChunk; /* Specific chunk into which cursor points */ -}; - -/* -** This subclass is a subclass of sqlite3_file. Each open memory-journal -** is an instance of this class. -*/ -struct MemJournal { - sqlite3_io_methods *pMethod; /* Parent class. MUST BE FIRST */ - FileChunk *pFirst; /* Head of in-memory chunk-list */ - FilePoint endpoint; /* Pointer to the end of the file */ - FilePoint readpoint; /* Pointer to the end of the last xRead() */ -}; - -/* -** Read data from the in-memory journal file. This is the implementation -** of the sqlite3_vfs.xRead method. -*/ -static int memjrnlRead( - sqlite3_file *pJfd, /* The journal file from which to read */ - void *zBuf, /* Put the results here */ - int iAmt, /* Number of bytes to read */ - sqlite_int64 iOfst /* Begin reading at this offset */ -){ - MemJournal *p = (MemJournal *)pJfd; - u8 *zOut = zBuf; - int nRead = iAmt; - int iChunkOffset; - FileChunk *pChunk; - - /* SQLite never tries to read past the end of a rollback journal file */ - assert( iOfst+iAmt<=p->endpoint.iOffset ); - - if( p->readpoint.iOffset!=iOfst || iOfst==0 ){ - sqlite3_int64 iOff = 0; - for(pChunk=p->pFirst; - ALWAYS(pChunk) && (iOff+JOURNAL_CHUNKSIZE)<=iOfst; - pChunk=pChunk->pNext - ){ - iOff += JOURNAL_CHUNKSIZE; - } - }else{ - pChunk = p->readpoint.pChunk; - } - - iChunkOffset = (int)(iOfst%JOURNAL_CHUNKSIZE); - do { - int iSpace = JOURNAL_CHUNKSIZE - iChunkOffset; - int nCopy = MIN(nRead, (JOURNAL_CHUNKSIZE - iChunkOffset)); - memcpy(zOut, &pChunk->zChunk[iChunkOffset], nCopy); - zOut += nCopy; - nRead -= iSpace; - iChunkOffset = 0; - } while( nRead>=0 && (pChunk=pChunk->pNext)!=0 && nRead>0 ); - p->readpoint.iOffset = iOfst+iAmt; - p->readpoint.pChunk = pChunk; - - return SQLITE_OK; -} - -/* -** Write data to the file. -*/ -static int memjrnlWrite( - sqlite3_file *pJfd, /* The journal file into which to write */ - const void *zBuf, /* Take data to be written from here */ - int iAmt, /* Number of bytes to write */ - sqlite_int64 iOfst /* Begin writing at this offset into the file */ -){ - MemJournal *p = (MemJournal *)pJfd; - int nWrite = iAmt; - u8 *zWrite = (u8 *)zBuf; - - /* An in-memory journal file should only ever be appended to. Random - ** access writes are not required by sqlite. - */ - assert( iOfst==p->endpoint.iOffset ); - UNUSED_PARAMETER(iOfst); - - while( nWrite>0 ){ - FileChunk *pChunk = p->endpoint.pChunk; - int iChunkOffset = (int)(p->endpoint.iOffset%JOURNAL_CHUNKSIZE); - int iSpace = MIN(nWrite, JOURNAL_CHUNKSIZE - iChunkOffset); - - if( iChunkOffset==0 ){ - /* New chunk is required to extend the file. */ - FileChunk *pNew = sqlite3_malloc(sizeof(FileChunk)); - if( !pNew ){ - return SQLITE_IOERR_NOMEM; - } - pNew->pNext = 0; - if( pChunk ){ - assert( p->pFirst ); - pChunk->pNext = pNew; - }else{ - assert( !p->pFirst ); - p->pFirst = pNew; - } - p->endpoint.pChunk = pNew; - } - - memcpy(&p->endpoint.pChunk->zChunk[iChunkOffset], zWrite, iSpace); - zWrite += iSpace; - nWrite -= iSpace; - p->endpoint.iOffset += iSpace; - } - - return SQLITE_OK; -} - -/* -** Truncate the file. -*/ -static int memjrnlTruncate(sqlite3_file *pJfd, sqlite_int64 size){ - MemJournal *p = (MemJournal *)pJfd; - FileChunk *pChunk; - assert(size==0); - UNUSED_PARAMETER(size); - pChunk = p->pFirst; - while( pChunk ){ - FileChunk *pTmp = pChunk; - pChunk = pChunk->pNext; - sqlite3_free(pTmp); - } - sqlite3MemJournalOpen(pJfd); - return SQLITE_OK; -} - -/* -** Close the file. -*/ -static int memjrnlClose(sqlite3_file *pJfd){ - memjrnlTruncate(pJfd, 0); - return SQLITE_OK; -} - - -/* -** Sync the file. +** The CHECK_FOR_INTERRUPT macro defined here looks to see if the +** sqlite3_interrupt() routine has been called. If it has been, then +** processing of the VDBE program is interrupted. ** -** Syncing an in-memory journal is a no-op. And, in fact, this routine -** is never called in a working implementation. This implementation -** exists purely as a contingency, in case some malfunction in some other -** part of SQLite causes Sync to be called by mistake. +** This macro added to every instruction that does a jump in order to +** implement a loop. This test used to be on every single instruction, +** but that meant we more testing than we needed. By only testing the +** flag on jump instructions, we get a (small) speed improvement. */ -static int memjrnlSync(sqlite3_file *NotUsed, int NotUsed2){ /*NO_TEST*/ - UNUSED_PARAMETER2(NotUsed, NotUsed2); /*NO_TEST*/ - assert( 0 ); /*NO_TEST*/ - return SQLITE_OK; /*NO_TEST*/ -} /*NO_TEST*/ +#define CHECK_FOR_INTERRUPT \ + if( db->u1.isInterrupted ) goto abort_due_to_interrupt; -/* -** Query the size of the file in bytes. -*/ -static int memjrnlFileSize(sqlite3_file *pJfd, sqlite_int64 *pSize){ - MemJournal *p = (MemJournal *)pJfd; - *pSize = (sqlite_int64) p->endpoint.iOffset; - return SQLITE_OK; -} +#ifndef NDEBUG /* -** Table of methods for MemJournal sqlite3_file object. -*/ -static struct sqlite3_io_methods MemJournalMethods = { - 1, /* iVersion */ - memjrnlClose, /* xClose */ - memjrnlRead, /* xRead */ - memjrnlWrite, /* xWrite */ - memjrnlTruncate, /* xTruncate */ - memjrnlSync, /* xSync */ - memjrnlFileSize, /* xFileSize */ - 0, /* xLock */ - 0, /* xUnlock */ - 0, /* xCheckReservedLock */ - 0, /* xFileControl */ - 0, /* xSectorSize */ - 0 /* xDeviceCharacteristics */ -}; - -/* -** Open a journal file. +** This function is only called from within an assert() expression. It +** checks that the sqlite3.nTransaction variable is correctly set to +** the number of non-transaction savepoints currently in the +** linked list starting at sqlite3.pSavepoint. +** +** Usage: +** +** assert( checkSavepointCount(db) ); */ -SQLITE_PRIVATE void sqlite3MemJournalOpen(sqlite3_file *pJfd){ - MemJournal *p = (MemJournal *)pJfd; - assert( EIGHT_BYTE_ALIGNMENT(p) ); - memset(p, 0, sqlite3MemJournalSize()); - p->pMethod = &MemJournalMethods; +static int checkSavepointCount(sqlite3 *db){ + int n = 0; + Savepoint *p; + for(p=db->pSavepoint; p; p=p->pNext) n++; + assert( n==(db->nSavepoint + db->isTransactionSavepoint) ); + return 1; } +#endif /* -** Return true if the file-handle passed as an argument is -** an in-memory journal +** Transfer error message text from an sqlite3_vtab.zErrMsg (text stored +** in memory obtained from sqlite3_malloc) into a Vdbe.zErrMsg (text stored +** in memory obtained from sqlite3DbMalloc). */ -SQLITE_PRIVATE int sqlite3IsMemJournal(sqlite3_file *pJfd){ - return pJfd->pMethods==&MemJournalMethods; +static void importVtabErrMsg(Vdbe *p, sqlite3_vtab *pVtab){ + sqlite3 *db = p->db; + sqlite3DbFree(db, p->zErrMsg); + p->zErrMsg = sqlite3DbStrDup(db, pVtab->zErrMsg); + sqlite3_free(pVtab->zErrMsg); + pVtab->zErrMsg = 0; } -/* -** Return the number of bytes required to store a MemJournal that uses vfs -** pVfs to create the underlying on-disk files. -*/ -SQLITE_PRIVATE int sqlite3MemJournalSize(void){ - return sizeof(MemJournal); -} -/************** End of memjournal.c ******************************************/ -/************** Begin file walker.c ******************************************/ /* -** 2008 August 16 -** -** The author disclaims copyright to this source code. In place of -** a legal notice, here is a blessing: +** Execute as much of a VDBE program as we can then return. ** -** May you do good and not evil. -** May you find forgiveness for yourself and forgive others. -** May you share freely, never taking more than you give. +** sqlite3VdbeMakeReady() must be called before this routine in order to +** close the program with a final OP_Halt and to set up the callbacks +** and the error message pointer. ** -************************************************************************* -** This file contains routines used for walking the parser tree for -** an SQL statement. +** Whenever a row or result data is available, this routine will either +** invoke the result callback (if there is one) or return with +** SQLITE_ROW. ** -** $Id: walker.c,v 1.7 2009/06/15 23:15:59 drh Exp $ -*/ - - -/* -** Walk an expression tree. Invoke the callback once for each node -** of the expression, while decending. (In other words, the callback -** is invoked before visiting children.) +** If an attempt is made to open a locked database, then this routine +** will either invoke the busy callback (if there is one) or it will +** return SQLITE_BUSY. ** -** The return value from the callback should be one of the WRC_* -** constants to specify how to proceed with the walk. +** If an error occurs, an error message is written to memory obtained +** from sqlite3_malloc() and p->zErrMsg is made to point to that memory. +** The error code is stored in p->rc and this routine returns SQLITE_ERROR. ** -** WRC_Continue Continue descending down the tree. +** If the callback ever returns non-zero, then the program exits +** immediately. There will be no error message but the p->rc field is +** set to SQLITE_ABORT and this routine will return SQLITE_ERROR. ** -** WRC_Prune Do not descend into child nodes. But allow -** the walk to continue with sibling nodes. +** A memory allocation error causes p->rc to be set to SQLITE_NOMEM and this +** routine to return SQLITE_ERROR. ** -** WRC_Abort Do no more callbacks. Unwind the stack and -** return the top-level walk call. +** Other fatal errors return SQLITE_ERROR. ** -** The return value from this routine is WRC_Abort to abandon the tree walk -** and WRC_Continue to continue. +** After this routine has finished, sqlite3VdbeFinalize() should be +** used to clean up the mess that was left behind. */ -SQLITE_PRIVATE int sqlite3WalkExpr(Walker *pWalker, Expr *pExpr){ - int rc; - if( pExpr==0 ) return WRC_Continue; - testcase( ExprHasProperty(pExpr, EP_TokenOnly) ); - testcase( ExprHasProperty(pExpr, EP_Reduced) ); - rc = pWalker->xExprCallback(pWalker, pExpr); - if( rc==WRC_Continue - && !ExprHasAnyProperty(pExpr,EP_TokenOnly) ){ - if( sqlite3WalkExpr(pWalker, pExpr->pLeft) ) return WRC_Abort; - if( sqlite3WalkExpr(pWalker, pExpr->pRight) ) return WRC_Abort; - if( ExprHasProperty(pExpr, EP_xIsSelect) ){ - if( sqlite3WalkSelect(pWalker, pExpr->x.pSelect) ) return WRC_Abort; - }else{ - if( sqlite3WalkExprList(pWalker, pExpr->x.pList) ) return WRC_Abort; - } - } - return rc & WRC_Abort; -} +SQLITE_PRIVATE int sqlite3VdbeExec( + Vdbe *p /* The VDBE */ +){ + int pc=0; /* The program counter */ + Op *aOp = p->aOp; /* Copy of p->aOp */ + Op *pOp; /* Current operation */ + int rc = SQLITE_OK; /* Value to return */ + sqlite3 *db = p->db; /* The database */ + u8 resetSchemaOnFault = 0; /* Reset schema after an error if positive */ + u8 encoding = ENC(db); /* The database encoding */ +#ifndef SQLITE_OMIT_PROGRESS_CALLBACK + int checkProgress; /* True if progress callbacks are enabled */ + int nProgressOps = 0; /* Opcodes executed since progress callback. */ +#endif + Mem *aMem = p->aMem; /* Copy of p->aMem */ + Mem *pIn1 = 0; /* 1st input operand */ + Mem *pIn2 = 0; /* 2nd input operand */ + Mem *pIn3 = 0; /* 3rd input operand */ + Mem *pOut = 0; /* Output operand */ + int iCompare = 0; /* Result of last OP_Compare operation */ + int *aPermute = 0; /* Permutation of columns for OP_Compare */ + i64 lastRowid = db->lastRowid; /* Saved value of the last insert ROWID */ +#ifdef VDBE_PROFILE + u64 start; /* CPU clock count at start of opcode */ + int origPc; /* Program counter at start of opcode */ +#endif + /******************************************************************** + ** Automatically generated code + ** + ** The following union is automatically generated by the + ** vdbe-compress.tcl script. The purpose of this union is to + ** reduce the amount of stack space required by this function. + ** See comments in the vdbe-compress.tcl script for details. + */ + union vdbeExecUnion { + struct OP_Yield_stack_vars { + int pcDest; + } aa; + struct OP_Null_stack_vars { + int cnt; + } ab; + struct OP_Variable_stack_vars { + Mem *pVar; /* Value being transferred */ + } ac; + struct OP_Move_stack_vars { + char *zMalloc; /* Holding variable for allocated memory */ + int n; /* Number of registers left to copy */ + int p1; /* Register to copy from */ + int p2; /* Register to copy to */ + } ad; + struct OP_ResultRow_stack_vars { + Mem *pMem; + int i; + } ae; + struct OP_Concat_stack_vars { + i64 nByte; + } af; + struct OP_Remainder_stack_vars { + int flags; /* Combined MEM_* flags from both inputs */ + i64 iA; /* Integer value of left operand */ + i64 iB; /* Integer value of right operand */ + double rA; /* Real value of left operand */ + double rB; /* Real value of right operand */ + } ag; + struct OP_Function_stack_vars { + int i; + Mem *pArg; + sqlite3_context ctx; + sqlite3_value **apVal; + int n; + } ah; + struct OP_ShiftRight_stack_vars { + i64 iA; + u64 uA; + i64 iB; + u8 op; + } ai; + struct OP_Ge_stack_vars { + int res; /* Result of the comparison of pIn1 against pIn3 */ + char affinity; /* Affinity to use for comparison */ + u16 flags1; /* Copy of initial value of pIn1->flags */ + u16 flags3; /* Copy of initial value of pIn3->flags */ + } aj; + struct OP_Compare_stack_vars { + int n; + int i; + int p1; + int p2; + const KeyInfo *pKeyInfo; + int idx; + CollSeq *pColl; /* Collating sequence to use on this term */ + int bRev; /* True for DESCENDING sort order */ + } ak; + struct OP_Or_stack_vars { + int v1; /* Left operand: 0==FALSE, 1==TRUE, 2==UNKNOWN or NULL */ + int v2; /* Right operand: 0==FALSE, 1==TRUE, 2==UNKNOWN or NULL */ + } al; + struct OP_IfNot_stack_vars { + int c; + } am; + struct OP_Column_stack_vars { + u32 payloadSize; /* Number of bytes in the record */ + i64 payloadSize64; /* Number of bytes in the record */ + int p1; /* P1 value of the opcode */ + int p2; /* column number to retrieve */ + VdbeCursor *pC; /* The VDBE cursor */ + char *zRec; /* Pointer to complete record-data */ + BtCursor *pCrsr; /* The BTree cursor */ + u32 *aType; /* aType[i] holds the numeric type of the i-th column */ + u32 *aOffset; /* aOffset[i] is offset to start of data for i-th column */ + int nField; /* number of fields in the record */ + int len; /* The length of the serialized data for the column */ + int i; /* Loop counter */ + char *zData; /* Part of the record being decoded */ + Mem *pDest; /* Where to write the extracted value */ + Mem sMem; /* For storing the record being decoded */ + u8 *zIdx; /* Index into header */ + u8 *zEndHdr; /* Pointer to first byte after the header */ + u32 offset; /* Offset into the data */ + u32 szField; /* Number of bytes in the content of a field */ + int szHdr; /* Size of the header size field at start of record */ + int avail; /* Number of bytes of available data */ + u32 t; /* A type code from the record header */ + Mem *pReg; /* PseudoTable input register */ + } an; + struct OP_Affinity_stack_vars { + const char *zAffinity; /* The affinity to be applied */ + char cAff; /* A single character of affinity */ + } ao; + struct OP_MakeRecord_stack_vars { + u8 *zNewRecord; /* A buffer to hold the data for the new record */ + Mem *pRec; /* The new record */ + u64 nData; /* Number of bytes of data space */ + int nHdr; /* Number of bytes of header space */ + i64 nByte; /* Data space required for this record */ + int nZero; /* Number of zero bytes at the end of the record */ + int nVarint; /* Number of bytes in a varint */ + u32 serial_type; /* Type field */ + Mem *pData0; /* First field to be combined into the record */ + Mem *pLast; /* Last field of the record */ + int nField; /* Number of fields in the record */ + char *zAffinity; /* The affinity string for the record */ + int file_format; /* File format to use for encoding */ + int i; /* Space used in zNewRecord[] */ + int len; /* Length of a field */ + } ap; + struct OP_Count_stack_vars { + i64 nEntry; + BtCursor *pCrsr; + } aq; + struct OP_Savepoint_stack_vars { + int p1; /* Value of P1 operand */ + char *zName; /* Name of savepoint */ + int nName; + Savepoint *pNew; + Savepoint *pSavepoint; + Savepoint *pTmp; + int iSavepoint; + int ii; + } ar; + struct OP_AutoCommit_stack_vars { + int desiredAutoCommit; + int iRollback; + int turnOnAC; + } as; + struct OP_Transaction_stack_vars { + Btree *pBt; + } at; + struct OP_ReadCookie_stack_vars { + int iMeta; + int iDb; + int iCookie; + } au; + struct OP_SetCookie_stack_vars { + Db *pDb; + } av; + struct OP_VerifyCookie_stack_vars { + int iMeta; + int iGen; + Btree *pBt; + } aw; + struct OP_OpenWrite_stack_vars { + int nField; + KeyInfo *pKeyInfo; + int p2; + int iDb; + int wrFlag; + Btree *pX; + VdbeCursor *pCur; + Db *pDb; + } ax; + struct OP_OpenEphemeral_stack_vars { + VdbeCursor *pCx; + } ay; + struct OP_SorterOpen_stack_vars { + VdbeCursor *pCx; + } az; + struct OP_OpenPseudo_stack_vars { + VdbeCursor *pCx; + } ba; + struct OP_SeekGt_stack_vars { + int res; + int oc; + VdbeCursor *pC; + UnpackedRecord r; + int nField; + i64 iKey; /* The rowid we are to seek to */ + } bb; + struct OP_Seek_stack_vars { + VdbeCursor *pC; + } bc; + struct OP_Found_stack_vars { + int alreadyExists; + VdbeCursor *pC; + int res; + char *pFree; + UnpackedRecord *pIdxKey; + UnpackedRecord r; + char aTempRec[ROUND8(sizeof(UnpackedRecord)) + sizeof(Mem)*3 + 7]; + } bd; + struct OP_IsUnique_stack_vars { + u16 ii; + VdbeCursor *pCx; + BtCursor *pCrsr; + u16 nField; + Mem *aMx; + UnpackedRecord r; /* B-Tree index search key */ + i64 R; /* Rowid stored in register P3 */ + } be; + struct OP_NotExists_stack_vars { + VdbeCursor *pC; + BtCursor *pCrsr; + int res; + u64 iKey; + } bf; + struct OP_NewRowid_stack_vars { + i64 v; /* The new rowid */ + VdbeCursor *pC; /* Cursor of table to get the new rowid */ + int res; /* Result of an sqlite3BtreeLast() */ + int cnt; /* Counter to limit the number of searches */ + Mem *pMem; /* Register holding largest rowid for AUTOINCREMENT */ + VdbeFrame *pFrame; /* Root frame of VDBE */ + } bg; + struct OP_InsertInt_stack_vars { + Mem *pData; /* MEM cell holding data for the record to be inserted */ + Mem *pKey; /* MEM cell holding key for the record */ + i64 iKey; /* The integer ROWID or key for the record to be inserted */ + VdbeCursor *pC; /* Cursor to table into which insert is written */ + int nZero; /* Number of zero-bytes to append */ + int seekResult; /* Result of prior seek or 0 if no USESEEKRESULT flag */ + const char *zDb; /* database name - used by the update hook */ + const char *zTbl; /* Table name - used by the opdate hook */ + int op; /* Opcode for update hook: SQLITE_UPDATE or SQLITE_INSERT */ + } bh; + struct OP_Delete_stack_vars { + i64 iKey; + VdbeCursor *pC; + } bi; + struct OP_SorterCompare_stack_vars { + VdbeCursor *pC; + int res; + } bj; + struct OP_SorterData_stack_vars { + VdbeCursor *pC; + } bk; + struct OP_RowData_stack_vars { + VdbeCursor *pC; + BtCursor *pCrsr; + u32 n; + i64 n64; + } bl; + struct OP_Rowid_stack_vars { + VdbeCursor *pC; + i64 v; + sqlite3_vtab *pVtab; + const sqlite3_module *pModule; + } bm; + struct OP_NullRow_stack_vars { + VdbeCursor *pC; + } bn; + struct OP_Last_stack_vars { + VdbeCursor *pC; + BtCursor *pCrsr; + int res; + } bo; + struct OP_Rewind_stack_vars { + VdbeCursor *pC; + BtCursor *pCrsr; + int res; + } bp; + struct OP_Next_stack_vars { + VdbeCursor *pC; + int res; + } bq; + struct OP_IdxInsert_stack_vars { + VdbeCursor *pC; + BtCursor *pCrsr; + int nKey; + const char *zKey; + } br; + struct OP_IdxDelete_stack_vars { + VdbeCursor *pC; + BtCursor *pCrsr; + int res; + UnpackedRecord r; + } bs; + struct OP_IdxRowid_stack_vars { + BtCursor *pCrsr; + VdbeCursor *pC; + i64 rowid; + } bt; + struct OP_IdxGE_stack_vars { + VdbeCursor *pC; + int res; + UnpackedRecord r; + } bu; + struct OP_Destroy_stack_vars { + int iMoved; + int iCnt; + Vdbe *pVdbe; + int iDb; + } bv; + struct OP_Clear_stack_vars { + int nChange; + } bw; + struct OP_CreateTable_stack_vars { + int pgno; + int flags; + Db *pDb; + } bx; + struct OP_ParseSchema_stack_vars { + int iDb; + const char *zMaster; + char *zSql; + InitData initData; + } by; + struct OP_IntegrityCk_stack_vars { + int nRoot; /* Number of tables to check. (Number of root pages.) */ + int *aRoot; /* Array of rootpage numbers for tables to be checked */ + int j; /* Loop counter */ + int nErr; /* Number of errors reported */ + char *z; /* Text of the error report */ + Mem *pnErr; /* Register keeping track of errors remaining */ + } bz; + struct OP_RowSetRead_stack_vars { + i64 val; + } ca; + struct OP_RowSetTest_stack_vars { + int iSet; + int exists; + } cb; + struct OP_Program_stack_vars { + int nMem; /* Number of memory registers for sub-program */ + int nByte; /* Bytes of runtime space required for sub-program */ + Mem *pRt; /* Register to allocate runtime space */ + Mem *pMem; /* Used to iterate through memory cells */ + Mem *pEnd; /* Last memory cell in new array */ + VdbeFrame *pFrame; /* New vdbe frame to execute in */ + SubProgram *pProgram; /* Sub-program to execute */ + void *t; /* Token identifying trigger */ + } cc; + struct OP_Param_stack_vars { + VdbeFrame *pFrame; + Mem *pIn; + } cd; + struct OP_MemMax_stack_vars { + Mem *pIn1; + VdbeFrame *pFrame; + } ce; + struct OP_AggStep_stack_vars { + int n; + int i; + Mem *pMem; + Mem *pRec; + sqlite3_context ctx; + sqlite3_value **apVal; + } cf; + struct OP_AggFinal_stack_vars { + Mem *pMem; + } cg; + struct OP_Checkpoint_stack_vars { + int i; /* Loop counter */ + int aRes[3]; /* Results */ + Mem *pMem; /* Write results here */ + } ch; + struct OP_JournalMode_stack_vars { + Btree *pBt; /* Btree to change journal mode of */ + Pager *pPager; /* Pager associated with pBt */ + int eNew; /* New journal mode */ + int eOld; /* The old journal mode */ + const char *zFilename; /* Name of database file for pPager */ + } ci; + struct OP_IncrVacuum_stack_vars { + Btree *pBt; + } cj; + struct OP_VBegin_stack_vars { + VTable *pVTab; + } ck; + struct OP_VOpen_stack_vars { + VdbeCursor *pCur; + sqlite3_vtab_cursor *pVtabCursor; + sqlite3_vtab *pVtab; + sqlite3_module *pModule; + } cl; + struct OP_VFilter_stack_vars { + int nArg; + int iQuery; + const sqlite3_module *pModule; + Mem *pQuery; + Mem *pArgc; + sqlite3_vtab_cursor *pVtabCursor; + sqlite3_vtab *pVtab; + VdbeCursor *pCur; + int res; + int i; + Mem **apArg; + } cm; + struct OP_VColumn_stack_vars { + sqlite3_vtab *pVtab; + const sqlite3_module *pModule; + Mem *pDest; + sqlite3_context sContext; + } cn; + struct OP_VNext_stack_vars { + sqlite3_vtab *pVtab; + const sqlite3_module *pModule; + int res; + VdbeCursor *pCur; + } co; + struct OP_VRename_stack_vars { + sqlite3_vtab *pVtab; + Mem *pName; + } cp; + struct OP_VUpdate_stack_vars { + sqlite3_vtab *pVtab; + sqlite3_module *pModule; + int nArg; + int i; + sqlite_int64 rowid; + Mem **apArg; + Mem *pX; + } cq; + struct OP_Trace_stack_vars { + char *zTrace; + char *z; + } cr; + } u; + /* End automatically generated code + ********************************************************************/ -/* -** Call sqlite3WalkExpr() for every expression in list p or until -** an abort request is seen. -*/ -SQLITE_PRIVATE int sqlite3WalkExprList(Walker *pWalker, ExprList *p){ - int i; - struct ExprList_item *pItem; - if( p ){ - for(i=p->nExpr, pItem=p->a; i>0; i--, pItem++){ - if( sqlite3WalkExpr(pWalker, pItem->pExpr) ) return WRC_Abort; + assert( p->magic==VDBE_MAGIC_RUN ); /* sqlite3_step() verifies this */ + sqlite3VdbeEnter(p); + if( p->rc==SQLITE_NOMEM ){ + /* This happens if a malloc() inside a call to sqlite3_column_text() or + ** sqlite3_column_text16() failed. */ + goto no_mem; + } + assert( p->rc==SQLITE_OK || p->rc==SQLITE_BUSY ); + p->rc = SQLITE_OK; + assert( p->explain==0 ); + p->pResultSet = 0; + db->busyHandler.nBusy = 0; + CHECK_FOR_INTERRUPT; + sqlite3VdbeIOTraceSql(p); +#ifndef SQLITE_OMIT_PROGRESS_CALLBACK + checkProgress = db->xProgress!=0; +#endif +#ifdef SQLITE_DEBUG + sqlite3BeginBenignMalloc(); + if( p->pc==0 && (p->db->flags & SQLITE_VdbeListing)!=0 ){ + int i; + printf("VDBE Program Listing:\n"); + sqlite3VdbePrintSql(p); + for(i=0; inOp; i++){ + sqlite3VdbePrintOp(stdout, i, &aOp[i]); } } - return WRC_Continue; -} - -/* -** Walk all expressions associated with SELECT statement p. Do -** not invoke the SELECT callback on p, but do (of course) invoke -** any expr callbacks and SELECT callbacks that come from subqueries. -** Return WRC_Abort or WRC_Continue. -*/ -SQLITE_PRIVATE int sqlite3WalkSelectExpr(Walker *pWalker, Select *p){ - if( sqlite3WalkExprList(pWalker, p->pEList) ) return WRC_Abort; - if( sqlite3WalkExpr(pWalker, p->pWhere) ) return WRC_Abort; - if( sqlite3WalkExprList(pWalker, p->pGroupBy) ) return WRC_Abort; - if( sqlite3WalkExpr(pWalker, p->pHaving) ) return WRC_Abort; - if( sqlite3WalkExprList(pWalker, p->pOrderBy) ) return WRC_Abort; - if( sqlite3WalkExpr(pWalker, p->pLimit) ) return WRC_Abort; - if( sqlite3WalkExpr(pWalker, p->pOffset) ) return WRC_Abort; - return WRC_Continue; -} + sqlite3EndBenignMalloc(); +#endif + for(pc=p->pc; rc==SQLITE_OK; pc++){ + assert( pc>=0 && pcnOp ); + if( db->mallocFailed ) goto no_mem; +#ifdef VDBE_PROFILE + origPc = pc; + start = sqlite3Hwtime(); +#endif + pOp = &aOp[pc]; -/* -** Walk the parse trees associated with all subqueries in the -** FROM clause of SELECT statement p. Do not invoke the select -** callback on p, but do invoke it on each FROM clause subquery -** and on any subqueries further down in the tree. Return -** WRC_Abort or WRC_Continue; -*/ -SQLITE_PRIVATE int sqlite3WalkSelectFrom(Walker *pWalker, Select *p){ - SrcList *pSrc; - int i; - struct SrcList_item *pItem; + /* Only allow tracing if SQLITE_DEBUG is defined. + */ +#ifdef SQLITE_DEBUG + if( p->trace ){ + if( pc==0 ){ + printf("VDBE Execution Trace:\n"); + sqlite3VdbePrintSql(p); + } + sqlite3VdbePrintOp(p->trace, pc, pOp); + } +#endif + - pSrc = p->pSrc; - if( ALWAYS(pSrc) ){ - for(i=pSrc->nSrc, pItem=pSrc->a; i>0; i--, pItem++){ - if( sqlite3WalkSelect(pWalker, pItem->pSelect) ){ - return WRC_Abort; + /* Check to see if we need to simulate an interrupt. This only happens + ** if we have a special test build. + */ +#ifdef SQLITE_TEST + if( sqlite3_interrupt_count>0 ){ + sqlite3_interrupt_count--; + if( sqlite3_interrupt_count==0 ){ + sqlite3_interrupt(db); } } - } - return WRC_Continue; -} +#endif -/* -** Call sqlite3WalkExpr() for every expression in Select statement p. -** Invoke sqlite3WalkSelect() for subqueries in the FROM clause and -** on the compound select chain, p->pPrior. -** -** Return WRC_Continue under normal conditions. Return WRC_Abort if -** there is an abort request. -** -** If the Walker does not have an xSelectCallback() then this routine -** is a no-op returning WRC_Continue. -*/ -SQLITE_PRIVATE int sqlite3WalkSelect(Walker *pWalker, Select *p){ - int rc; - if( p==0 || pWalker->xSelectCallback==0 ) return WRC_Continue; - rc = WRC_Continue; - while( p ){ - rc = pWalker->xSelectCallback(pWalker, p); - if( rc ) break; - if( sqlite3WalkSelectExpr(pWalker, p) ) return WRC_Abort; - if( sqlite3WalkSelectFrom(pWalker, p) ) return WRC_Abort; - p = p->pPrior; - } - return rc & WRC_Abort; -} +#ifndef SQLITE_OMIT_PROGRESS_CALLBACK + /* Call the progress callback if it is configured and the required number + ** of VDBE ops have been executed (either since this invocation of + ** sqlite3VdbeExec() or since last time the progress callback was called). + ** If the progress callback returns non-zero, exit the virtual machine with + ** a return code SQLITE_ABORT. + */ + if( checkProgress ){ + if( db->nProgressOps==nProgressOps ){ + int prc; + prc = db->xProgress(db->pProgressArg); + if( prc!=0 ){ + rc = SQLITE_INTERRUPT; + goto vdbe_error_halt; + } + nProgressOps = 0; + } + nProgressOps++; + } +#endif -/************** End of walker.c **********************************************/ -/************** Begin file resolve.c *****************************************/ -/* -** 2008 August 18 + /* On any opcode with the "out2-prerelase" tag, free any + ** external allocations out of mem[p2] and set mem[p2] to be + ** an undefined integer. Opcodes will either fill in the integer + ** value or convert mem[p2] to a different type. + */ + assert( pOp->opflags==sqlite3OpcodeProperty[pOp->opcode] ); + if( pOp->opflags & OPFLG_OUT2_PRERELEASE ){ + assert( pOp->p2>0 ); + assert( pOp->p2<=p->nMem ); + pOut = &aMem[pOp->p2]; + memAboutToChange(p, pOut); + VdbeMemRelease(pOut); + pOut->flags = MEM_Int; + } + + /* Sanity checking on other operands */ +#ifdef SQLITE_DEBUG + if( (pOp->opflags & OPFLG_IN1)!=0 ){ + assert( pOp->p1>0 ); + assert( pOp->p1<=p->nMem ); + assert( memIsValid(&aMem[pOp->p1]) ); + REGISTER_TRACE(pOp->p1, &aMem[pOp->p1]); + } + if( (pOp->opflags & OPFLG_IN2)!=0 ){ + assert( pOp->p2>0 ); + assert( pOp->p2<=p->nMem ); + assert( memIsValid(&aMem[pOp->p2]) ); + REGISTER_TRACE(pOp->p2, &aMem[pOp->p2]); + } + if( (pOp->opflags & OPFLG_IN3)!=0 ){ + assert( pOp->p3>0 ); + assert( pOp->p3<=p->nMem ); + assert( memIsValid(&aMem[pOp->p3]) ); + REGISTER_TRACE(pOp->p3, &aMem[pOp->p3]); + } + if( (pOp->opflags & OPFLG_OUT2)!=0 ){ + assert( pOp->p2>0 ); + assert( pOp->p2<=p->nMem ); + memAboutToChange(p, &aMem[pOp->p2]); + } + if( (pOp->opflags & OPFLG_OUT3)!=0 ){ + assert( pOp->p3>0 ); + assert( pOp->p3<=p->nMem ); + memAboutToChange(p, &aMem[pOp->p3]); + } +#endif + + switch( pOp->opcode ){ + +/***************************************************************************** +** What follows is a massive switch statement where each case implements a +** separate instruction in the virtual machine. If we follow the usual +** indentation conventions, each case should be indented by 6 spaces. But +** that is a lot of wasted space on the left margin. So the code within +** the switch statement will break with convention and be flush-left. Another +** big comment (similar to this one) will mark the point in the code where +** we transition back to normal indentation. ** -** The author disclaims copyright to this source code. In place of -** a legal notice, here is a blessing: +** The formatting of each case is important. The makefile for SQLite +** generates two C files "opcodes.h" and "opcodes.c" by scanning this +** file looking for lines that begin with "case OP_". The opcodes.h files +** will be filled with #defines that give unique integer values to each +** opcode and the opcodes.c file is filled with an array of strings where +** each string is the symbolic name for the corresponding opcode. If the +** case statement is followed by a comment of the form "/# same as ... #/" +** that comment is used to determine the particular value of the opcode. ** -** May you do good and not evil. -** May you find forgiveness for yourself and forgive others. -** May you share freely, never taking more than you give. +** Other keywords in the comment that follows each case are used to +** construct the OPFLG_INITIALIZER value that initializes opcodeProperty[]. +** Keywords include: in1, in2, in3, out2_prerelease, out2, out3. See +** the mkopcodeh.awk script for additional information. ** -************************************************************************* +** Documentation about VDBE opcodes is generated by scanning this file +** for lines of that contain "Opcode:". That line and all subsequent +** comment lines are used in the generation of the opcode.html documentation +** file. ** -** This file contains routines used for walking the parser tree and -** resolve all identifiers by associating them with a particular -** table and column. +** SUMMARY: +** +** Formatting is important to scripts that scan this file. +** Do not deviate from the formatting style currently in use. +** +*****************************************************************************/ + +/* Opcode: Goto * P2 * * * ** -** $Id: resolve.c,v 1.30 2009/06/15 23:15:59 drh Exp $ +** An unconditional jump to address P2. +** The next instruction executed will be +** the one at index P2 from the beginning of +** the program. */ +case OP_Goto: { /* jump */ + CHECK_FOR_INTERRUPT; + pc = pOp->p2 - 1; + break; +} -/* -** Turn the pExpr expression into an alias for the iCol-th column of the -** result set in pEList. +/* Opcode: Gosub P1 P2 * * * ** -** If the result set column is a simple column reference, then this routine -** makes an exact copy. But for any other kind of expression, this -** routine make a copy of the result set column as the argument to the -** TK_AS operator. The TK_AS operator causes the expression to be -** evaluated just once and then reused for each alias. +** Write the current address onto register P1 +** and then jump to address P2. +*/ +case OP_Gosub: { /* jump */ + assert( pOp->p1>0 && pOp->p1<=p->nMem ); + pIn1 = &aMem[pOp->p1]; + assert( (pIn1->flags & MEM_Dyn)==0 ); + memAboutToChange(p, pIn1); + pIn1->flags = MEM_Int; + pIn1->u.i = pc; + REGISTER_TRACE(pOp->p1, pIn1); + pc = pOp->p2 - 1; + break; +} + +/* Opcode: Return P1 * * * * ** -** The reason for suppressing the TK_AS term when the expression is a simple -** column reference is so that the column reference will be recognized as -** usable by indices within the WHERE clause processing logic. +** Jump to the next instruction after the address in register P1. +*/ +case OP_Return: { /* in1 */ + pIn1 = &aMem[pOp->p1]; + assert( pIn1->flags & MEM_Int ); + pc = (int)pIn1->u.i; + break; +} + +/* Opcode: Yield P1 * * * * ** -** Hack: The TK_AS operator is inhibited if zType[0]=='G'. This means -** that in a GROUP BY clause, the expression is evaluated twice. Hence: +** Swap the program counter with the value in register P1. +*/ +case OP_Yield: { /* in1 */ +#if 0 /* local variables moved into u.aa */ + int pcDest; +#endif /* local variables moved into u.aa */ + pIn1 = &aMem[pOp->p1]; + assert( (pIn1->flags & MEM_Dyn)==0 ); + pIn1->flags = MEM_Int; + u.aa.pcDest = (int)pIn1->u.i; + pIn1->u.i = pc; + REGISTER_TRACE(pOp->p1, pIn1); + pc = u.aa.pcDest; + break; +} + +/* Opcode: HaltIfNull P1 P2 P3 P4 * ** -** SELECT random()%5 AS x, count(*) FROM tab GROUP BY x +** Check the value in register P3. If it is NULL then Halt using +** parameter P1, P2, and P4 as if this were a Halt instruction. If the +** value in register P3 is not NULL, then this routine is a no-op. +*/ +case OP_HaltIfNull: { /* in3 */ + pIn3 = &aMem[pOp->p3]; + if( (pIn3->flags & MEM_Null)==0 ) break; + /* Fall through into OP_Halt */ +} + +/* Opcode: Halt P1 P2 * P4 * ** -** Is equivalent to: +** Exit immediately. All open cursors, etc are closed +** automatically. ** -** SELECT random()%5 AS x, count(*) FROM tab GROUP BY random()%5 +** P1 is the result code returned by sqlite3_exec(), sqlite3_reset(), +** or sqlite3_finalize(). For a normal halt, this should be SQLITE_OK (0). +** For errors, it can be some other value. If P1!=0 then P2 will determine +** whether or not to rollback the current transaction. Do not rollback +** if P2==OE_Fail. Do the rollback if P2==OE_Rollback. If P2==OE_Abort, +** then back out all changes that have occurred during this execution of the +** VDBE, but do not rollback the transaction. ** -** The result of random()%5 in the GROUP BY clause is probably different -** from the result in the result-set. We might fix this someday. Or -** then again, we might not... +** If P4 is not null then it is an error message string. +** +** There is an implied "Halt 0 0 0" instruction inserted at the very end of +** every program. So a jump past the last instruction of the program +** is the same as executing Halt. */ -static void resolveAlias( - Parse *pParse, /* Parsing context */ - ExprList *pEList, /* A result set */ - int iCol, /* A column in the result set. 0..pEList->nExpr-1 */ - Expr *pExpr, /* Transform this into an alias to the result set */ - const char *zType /* "GROUP" or "ORDER" or "" */ -){ - Expr *pOrig; /* The iCol-th column of the result set */ - Expr *pDup; /* Copy of pOrig */ - sqlite3 *db; /* The database connection */ +case OP_Halt: { + if( pOp->p1==SQLITE_OK && p->pFrame ){ + /* Halt the sub-program. Return control to the parent frame. */ + VdbeFrame *pFrame = p->pFrame; + p->pFrame = pFrame->pParent; + p->nFrame--; + sqlite3VdbeSetChanges(db, p->nChange); + pc = sqlite3VdbeFrameRestore(pFrame); + lastRowid = db->lastRowid; + if( pOp->p2==OE_Ignore ){ + /* Instruction pc is the OP_Program that invoked the sub-program + ** currently being halted. If the p2 instruction of this OP_Halt + ** instruction is set to OE_Ignore, then the sub-program is throwing + ** an IGNORE exception. In this case jump to the address specified + ** as the p2 of the calling OP_Program. */ + pc = p->aOp[pc].p2-1; + } + aOp = p->aOp; + aMem = p->aMem; + break; + } - assert( iCol>=0 && iColnExpr ); - pOrig = pEList->a[iCol].pExpr; - assert( pOrig!=0 ); - assert( pOrig->flags & EP_Resolved ); - db = pParse->db; - if( pOrig->op!=TK_COLUMN && zType[0]!='G' ){ - pDup = sqlite3ExprDup(db, pOrig, 0); - pDup = sqlite3PExpr(pParse, TK_AS, pDup, 0, 0); - if( pDup==0 ) return; - if( pEList->a[iCol].iAlias==0 ){ - pEList->a[iCol].iAlias = (u16)(++pParse->nAlias); - } - pDup->iTable = pEList->a[iCol].iAlias; - }else if( ExprHasProperty(pOrig, EP_IntValue) || pOrig->u.zToken==0 ){ - pDup = sqlite3ExprDup(db, pOrig, 0); - if( pDup==0 ) return; - }else{ - char *zToken = pOrig->u.zToken; - assert( zToken!=0 ); - pOrig->u.zToken = 0; - pDup = sqlite3ExprDup(db, pOrig, 0); - pOrig->u.zToken = zToken; - if( pDup==0 ) return; - assert( (pDup->flags & (EP_Reduced|EP_TokenOnly))==0 ); - pDup->flags2 |= EP2_MallocedToken; - pDup->u.zToken = sqlite3DbStrDup(db, zToken); + p->rc = pOp->p1; + p->errorAction = (u8)pOp->p2; + p->pc = pc; + if( pOp->p4.z ){ + assert( p->rc!=SQLITE_OK ); + sqlite3SetString(&p->zErrMsg, db, "%s", pOp->p4.z); + testcase( sqlite3GlobalConfig.xLog!=0 ); + sqlite3_log(pOp->p1, "abort at %d in [%s]: %s", pc, p->zSql, pOp->p4.z); + }else if( p->rc ){ + testcase( sqlite3GlobalConfig.xLog!=0 ); + sqlite3_log(pOp->p1, "constraint failed at %d in [%s]", pc, p->zSql); } - if( pExpr->flags & EP_ExpCollate ){ - pDup->pColl = pExpr->pColl; - pDup->flags |= EP_ExpCollate; + rc = sqlite3VdbeHalt(p); + assert( rc==SQLITE_BUSY || rc==SQLITE_OK || rc==SQLITE_ERROR ); + if( rc==SQLITE_BUSY ){ + p->rc = rc = SQLITE_BUSY; + }else{ + assert( rc==SQLITE_OK || p->rc==SQLITE_CONSTRAINT ); + assert( rc==SQLITE_OK || db->nDeferredCons>0 ); + rc = p->rc ? SQLITE_ERROR : SQLITE_DONE; } - sqlite3ExprClear(db, pExpr); - memcpy(pExpr, pDup, sizeof(*pExpr)); - sqlite3DbFree(db, pDup); + goto vdbe_return; } -/* -** Given the name of a column of the form X.Y.Z or Y.Z or just Z, look up -** that name in the set of source tables in pSrcList and make the pExpr -** expression node refer back to that source column. The following changes -** are made to pExpr: +/* Opcode: Integer P1 P2 * * * ** -** pExpr->iDb Set the index in db->aDb[] of the database X -** (even if X is implied). -** pExpr->iTable Set to the cursor number for the table obtained -** from pSrcList. -** pExpr->pTab Points to the Table structure of X.Y (even if -** X and/or Y are implied.) -** pExpr->iColumn Set to the column number within the table. -** pExpr->op Set to TK_COLUMN. -** pExpr->pLeft Any expression this points to is deleted -** pExpr->pRight Any expression this points to is deleted. +** The 32-bit integer value P1 is written into register P2. +*/ +case OP_Integer: { /* out2-prerelease */ + pOut->u.i = pOp->p1; + break; +} + +/* Opcode: Int64 * P2 * P4 * ** -** The zDb variable is the name of the database (the "X"). This value may be -** NULL meaning that name is of the form Y.Z or Z. Any available database -** can be used. The zTable variable is the name of the table (the "Y"). This -** value can be NULL if zDb is also NULL. If zTable is NULL it -** means that the form of the name is Z and that columns from any table -** can be used. +** P4 is a pointer to a 64-bit integer value. +** Write that value into register P2. +*/ +case OP_Int64: { /* out2-prerelease */ + assert( pOp->p4.pI64!=0 ); + pOut->u.i = *pOp->p4.pI64; + break; +} + +#ifndef SQLITE_OMIT_FLOATING_POINT +/* Opcode: Real * P2 * P4 * ** -** If the name cannot be resolved unambiguously, leave an error message -** in pParse and return WRC_Abort. Return WRC_Prune on success. +** P4 is a pointer to a 64-bit floating point value. +** Write that value into register P2. */ -static int lookupName( - Parse *pParse, /* The parsing context */ - const char *zDb, /* Name of the database containing table, or NULL */ - const char *zTab, /* Name of table containing column, or NULL */ - const char *zCol, /* Name of the column. */ - NameContext *pNC, /* The name context used to resolve the name */ - Expr *pExpr /* Make this EXPR node point to the selected column */ -){ - int i, j; /* Loop counters */ - int cnt = 0; /* Number of matching column names */ - int cntTab = 0; /* Number of matching table names */ - sqlite3 *db = pParse->db; /* The database connection */ - struct SrcList_item *pItem; /* Use for looping over pSrcList items */ - struct SrcList_item *pMatch = 0; /* The matching pSrcList item */ - NameContext *pTopNC = pNC; /* First namecontext in the list */ - Schema *pSchema = 0; /* Schema of the expression */ +case OP_Real: { /* same as TK_FLOAT, out2-prerelease */ + pOut->flags = MEM_Real; + assert( !sqlite3IsNaN(*pOp->p4.pReal) ); + pOut->r = *pOp->p4.pReal; + break; +} +#endif - assert( pNC ); /* the name context cannot be NULL. */ - assert( zCol ); /* The Z in X.Y.Z cannot be NULL */ - assert( ~ExprHasAnyProperty(pExpr, EP_TokenOnly|EP_Reduced) ); +/* Opcode: String8 * P2 * P4 * +** +** P4 points to a nul terminated UTF-8 string. This opcode is transformed +** into an OP_String before it is executed for the first time. +*/ +case OP_String8: { /* same as TK_STRING, out2-prerelease */ + assert( pOp->p4.z!=0 ); + pOp->opcode = OP_String; + pOp->p1 = sqlite3Strlen30(pOp->p4.z); - /* Initialize the node to no-match */ - pExpr->iTable = -1; - pExpr->pTab = 0; - ExprSetIrreducible(pExpr); +#ifndef SQLITE_OMIT_UTF16 + if( encoding!=SQLITE_UTF8 ){ + rc = sqlite3VdbeMemSetStr(pOut, pOp->p4.z, -1, SQLITE_UTF8, SQLITE_STATIC); + if( rc==SQLITE_TOOBIG ) goto too_big; + if( SQLITE_OK!=sqlite3VdbeChangeEncoding(pOut, encoding) ) goto no_mem; + assert( pOut->zMalloc==pOut->z ); + assert( pOut->flags & MEM_Dyn ); + pOut->zMalloc = 0; + pOut->flags |= MEM_Static; + pOut->flags &= ~MEM_Dyn; + if( pOp->p4type==P4_DYNAMIC ){ + sqlite3DbFree(db, pOp->p4.z); + } + pOp->p4type = P4_DYNAMIC; + pOp->p4.z = pOut->z; + pOp->p1 = pOut->n; + } +#endif + if( pOp->p1>db->aLimit[SQLITE_LIMIT_LENGTH] ){ + goto too_big; + } + /* Fall through to the next case, OP_String */ +} + +/* Opcode: String P1 P2 * P4 * +** +** The string value P4 of length P1 (bytes) is stored in register P2. +*/ +case OP_String: { /* out2-prerelease */ + assert( pOp->p4.z!=0 ); + pOut->flags = MEM_Str|MEM_Static|MEM_Term; + pOut->z = pOp->p4.z; + pOut->n = pOp->p1; + pOut->enc = encoding; + UPDATE_MAX_BLOBSIZE(pOut); + break; +} - /* Start at the inner-most context and move outward until a match is found */ - while( pNC && cnt==0 ){ - ExprList *pEList; - SrcList *pSrcList = pNC->pSrcList; +/* Opcode: Null * P2 P3 * * +** +** Write a NULL into registers P2. If P3 greater than P2, then also write +** NULL into register P3 and ever register in between P2 and P3. If P3 +** is less than P2 (typically P3 is zero) then only register P2 is +** set to NULL +*/ +case OP_Null: { /* out2-prerelease */ +#if 0 /* local variables moved into u.ab */ + int cnt; +#endif /* local variables moved into u.ab */ + u.ab.cnt = pOp->p3-pOp->p2; + assert( pOp->p3<=p->nMem ); + pOut->flags = MEM_Null; + while( u.ab.cnt>0 ){ + pOut++; + memAboutToChange(p, pOut); + VdbeMemRelease(pOut); + pOut->flags = MEM_Null; + u.ab.cnt--; + } + break; +} - if( pSrcList ){ - for(i=0, pItem=pSrcList->a; inSrc; i++, pItem++){ - Table *pTab; - int iDb; - Column *pCol; - - pTab = pItem->pTab; - assert( pTab!=0 && pTab->zName!=0 ); - iDb = sqlite3SchemaToIndex(db, pTab->pSchema); - assert( pTab->nCol>0 ); - if( zTab ){ - if( pItem->zAlias ){ - char *zTabName = pItem->zAlias; - if( sqlite3StrICmp(zTabName, zTab)!=0 ) continue; - }else{ - char *zTabName = pTab->zName; - if( NEVER(zTabName==0) || sqlite3StrICmp(zTabName, zTab)!=0 ){ - continue; - } - if( zDb!=0 && sqlite3StrICmp(db->aDb[iDb].zName, zDb)!=0 ){ - continue; - } - } - } - if( 0==(cntTab++) ){ - pExpr->iTable = pItem->iCursor; - pExpr->pTab = pTab; - pSchema = pTab->pSchema; - pMatch = pItem; - } - for(j=0, pCol=pTab->aCol; jnCol; j++, pCol++){ - if( sqlite3StrICmp(pCol->zName, zCol)==0 ){ - IdList *pUsing; - cnt++; - pExpr->iTable = pItem->iCursor; - pExpr->pTab = pTab; - pMatch = pItem; - pSchema = pTab->pSchema; - /* Substitute the rowid (column -1) for the INTEGER PRIMARY KEY */ - pExpr->iColumn = j==pTab->iPKey ? -1 : (i16)j; - if( inSrc-1 ){ - if( pItem[1].jointype & JT_NATURAL ){ - /* If this match occurred in the left table of a natural join, - ** then skip the right table to avoid a duplicate match */ - pItem++; - i++; - }else if( (pUsing = pItem[1].pUsing)!=0 ){ - /* If this match occurs on a column that is in the USING clause - ** of a join, skip the search of the right table of the join - ** to avoid a duplicate match there. */ - int k; - for(k=0; knId; k++){ - if( sqlite3StrICmp(pUsing->a[k].zName, zCol)==0 ){ - pItem++; - i++; - break; - } - } - } - } - break; - } - } - } - } -#ifndef SQLITE_OMIT_TRIGGER - /* If we have not already resolved the name, then maybe - ** it is a new.* or old.* trigger argument reference - */ - if( zDb==0 && zTab!=0 && cnt==0 && pParse->trigStack!=0 ){ - TriggerStack *pTriggerStack = pParse->trigStack; - Table *pTab = 0; - u32 *piColMask = 0; - if( pTriggerStack->newIdx != -1 && sqlite3StrICmp("new", zTab) == 0 ){ - pExpr->iTable = pTriggerStack->newIdx; - assert( pTriggerStack->pTab ); - pTab = pTriggerStack->pTab; - piColMask = &(pTriggerStack->newColMask); - }else if( pTriggerStack->oldIdx != -1 && sqlite3StrICmp("old", zTab)==0 ){ - pExpr->iTable = pTriggerStack->oldIdx; - assert( pTriggerStack->pTab ); - pTab = pTriggerStack->pTab; - piColMask = &(pTriggerStack->oldColMask); - } +/* Opcode: Blob P1 P2 * P4 +** +** P4 points to a blob of data P1 bytes long. Store this +** blob in register P2. +*/ +case OP_Blob: { /* out2-prerelease */ + assert( pOp->p1 <= SQLITE_MAX_LENGTH ); + sqlite3VdbeMemSetStr(pOut, pOp->p4.z, pOp->p1, 0, 0); + pOut->enc = encoding; + UPDATE_MAX_BLOBSIZE(pOut); + break; +} - if( pTab ){ - int iCol; - Column *pCol = pTab->aCol; +/* Opcode: Variable P1 P2 * P4 * +** +** Transfer the values of bound parameter P1 into register P2 +** +** If the parameter is named, then its name appears in P4 and P3==1. +** The P4 value is used by sqlite3_bind_parameter_name(). +*/ +case OP_Variable: { /* out2-prerelease */ +#if 0 /* local variables moved into u.ac */ + Mem *pVar; /* Value being transferred */ +#endif /* local variables moved into u.ac */ - pSchema = pTab->pSchema; - cntTab++; - for(iCol=0; iCol < pTab->nCol; iCol++, pCol++) { - if( sqlite3StrICmp(pCol->zName, zCol)==0 ){ - cnt++; - pExpr->iColumn = iCol==pTab->iPKey ? -1 : (i16)iCol; - pExpr->pTab = pTab; - testcase( iCol==31 ); - testcase( iCol==32 ); - if( iCol>=32 ){ - *piColMask = 0xffffffff; - }else{ - *piColMask |= ((u32)1)<p1>0 && pOp->p1<=p->nVar ); + assert( pOp->p4.z==0 || pOp->p4.z==p->azVar[pOp->p1-1] ); + u.ac.pVar = &p->aVar[pOp->p1 - 1]; + if( sqlite3VdbeMemTooBig(u.ac.pVar) ){ + goto too_big; + } + sqlite3VdbeMemShallowCopy(pOut, u.ac.pVar, MEM_Static); + UPDATE_MAX_BLOBSIZE(pOut); + break; +} - /* - ** Perhaps the name is a reference to the ROWID - */ - if( cnt==0 && cntTab==1 && sqlite3IsRowid(zCol) ){ - cnt = 1; - pExpr->iColumn = -1; - pExpr->affinity = SQLITE_AFF_INTEGER; +/* Opcode: Move P1 P2 P3 * * +** +** Move the values in register P1..P1+P3-1 over into +** registers P2..P2+P3-1. Registers P1..P1+P1-1 are +** left holding a NULL. It is an error for register ranges +** P1..P1+P3-1 and P2..P2+P3-1 to overlap. +*/ +case OP_Move: { +#if 0 /* local variables moved into u.ad */ + char *zMalloc; /* Holding variable for allocated memory */ + int n; /* Number of registers left to copy */ + int p1; /* Register to copy from */ + int p2; /* Register to copy to */ +#endif /* local variables moved into u.ad */ + + u.ad.n = pOp->p3; + u.ad.p1 = pOp->p1; + u.ad.p2 = pOp->p2; + assert( u.ad.n>0 && u.ad.p1>0 && u.ad.p2>0 ); + assert( u.ad.p1+u.ad.n<=u.ad.p2 || u.ad.p2+u.ad.n<=u.ad.p1 ); + + pIn1 = &aMem[u.ad.p1]; + pOut = &aMem[u.ad.p2]; + while( u.ad.n-- ){ + assert( pOut<=&aMem[p->nMem] ); + assert( pIn1<=&aMem[p->nMem] ); + assert( memIsValid(pIn1) ); + memAboutToChange(p, pOut); + u.ad.zMalloc = pOut->zMalloc; + pOut->zMalloc = 0; + sqlite3VdbeMemMove(pOut, pIn1); +#ifdef SQLITE_DEBUG + if( pOut->pScopyFrom>=&aMem[u.ad.p1] && pOut->pScopyFrom<&aMem[u.ad.p1+pOp->p3] ){ + pOut->pScopyFrom += u.ad.p1 - pOp->p2; } +#endif + pIn1->zMalloc = u.ad.zMalloc; + REGISTER_TRACE(u.ad.p2++, pOut); + pIn1++; + pOut++; + } + break; +} - /* - ** If the input is of the form Z (not Y.Z or X.Y.Z) then the name Z - ** might refer to an result-set alias. This happens, for example, when - ** we are resolving names in the WHERE clause of the following command: - ** - ** SELECT a+b AS x FROM table WHERE x<10; - ** - ** In cases like this, replace pExpr with a copy of the expression that - ** forms the result set entry ("a+b" in the example) and return immediately. - ** Note that the expression in the result set should have already been - ** resolved by the time the WHERE clause is resolved. - */ - if( cnt==0 && (pEList = pNC->pEList)!=0 && zTab==0 ){ - for(j=0; jnExpr; j++){ - char *zAs = pEList->a[j].zName; - if( zAs!=0 && sqlite3StrICmp(zAs, zCol)==0 ){ - Expr *pOrig; - assert( pExpr->pLeft==0 && pExpr->pRight==0 ); - assert( pExpr->x.pList==0 ); - assert( pExpr->x.pSelect==0 ); - pOrig = pEList->a[j].pExpr; - if( !pNC->allowAgg && ExprHasProperty(pOrig, EP_Agg) ){ - sqlite3ErrorMsg(pParse, "misuse of aliased aggregate %s", zAs); - return WRC_Abort; - } - resolveAlias(pParse, pEList, j, pExpr, ""); - cnt = 1; - pMatch = 0; - assert( zTab==0 && zDb==0 ); - goto lookupname_end; - } - } - } +/* Opcode: Copy P1 P2 * * * +** +** Make a copy of register P1 into register P2. +** +** This instruction makes a deep copy of the value. A duplicate +** is made of any string or blob constant. See also OP_SCopy. +*/ +case OP_Copy: { /* in1, out2 */ + pIn1 = &aMem[pOp->p1]; + pOut = &aMem[pOp->p2]; + assert( pOut!=pIn1 ); + sqlite3VdbeMemShallowCopy(pOut, pIn1, MEM_Ephem); + Deephemeralize(pOut); + REGISTER_TRACE(pOp->p2, pOut); + break; +} - /* Advance to the next name context. The loop will exit when either - ** we have a match (cnt>0) or when we run out of name contexts. - */ - if( cnt==0 ){ - pNC = pNC->pNext; - } +/* Opcode: SCopy P1 P2 * * * +** +** Make a shallow copy of register P1 into register P2. +** +** This instruction makes a shallow copy of the value. If the value +** is a string or blob, then the copy is only a pointer to the +** original and hence if the original changes so will the copy. +** Worse, if the original is deallocated, the copy becomes invalid. +** Thus the program must guarantee that the original will not change +** during the lifetime of the copy. Use OP_Copy to make a complete +** copy. +*/ +case OP_SCopy: { /* in1, out2 */ + pIn1 = &aMem[pOp->p1]; + pOut = &aMem[pOp->p2]; + assert( pOut!=pIn1 ); + sqlite3VdbeMemShallowCopy(pOut, pIn1, MEM_Ephem); +#ifdef SQLITE_DEBUG + if( pOut->pScopyFrom==0 ) pOut->pScopyFrom = pIn1; +#endif + REGISTER_TRACE(pOp->p2, pOut); + break; +} + +/* Opcode: ResultRow P1 P2 * * * +** +** The registers P1 through P1+P2-1 contain a single row of +** results. This opcode causes the sqlite3_step() call to terminate +** with an SQLITE_ROW return code and it sets up the sqlite3_stmt +** structure to provide access to the top P1 values as the result +** row. +*/ +case OP_ResultRow: { +#if 0 /* local variables moved into u.ae */ + Mem *pMem; + int i; +#endif /* local variables moved into u.ae */ + assert( p->nResColumn==pOp->p2 ); + assert( pOp->p1>0 ); + assert( pOp->p1+pOp->p2<=p->nMem+1 ); + + /* If this statement has violated immediate foreign key constraints, do + ** not return the number of rows modified. And do not RELEASE the statement + ** transaction. It needs to be rolled back. */ + if( SQLITE_OK!=(rc = sqlite3VdbeCheckFk(p, 0)) ){ + assert( db->flags&SQLITE_CountRows ); + assert( p->usesStmtJournal ); + break; } - /* - ** If X and Y are NULL (in other words if only the column name Z is - ** supplied) and the value of Z is enclosed in double-quotes, then - ** Z is a string literal if it doesn't match any column names. In that - ** case, we need to return right away and not make any changes to - ** pExpr. + /* If the SQLITE_CountRows flag is set in sqlite3.flags mask, then + ** DML statements invoke this opcode to return the number of rows + ** modified to the user. This is the only way that a VM that + ** opens a statement transaction may invoke this opcode. ** - ** Because no reference was made to outer contexts, the pNC->nRef - ** fields are not changed in any context. + ** In case this is such a statement, close any statement transaction + ** opened by this VM before returning control to the user. This is to + ** ensure that statement-transactions are always nested, not overlapping. + ** If the open statement-transaction is not closed here, then the user + ** may step another VM that opens its own statement transaction. This + ** may lead to overlapping statement transactions. + ** + ** The statement transaction is never a top-level transaction. Hence + ** the RELEASE call below can never fail. */ - if( cnt==0 && zTab==0 && ExprHasProperty(pExpr,EP_DblQuoted) ){ - pExpr->op = TK_STRING; - pExpr->pTab = 0; - return WRC_Prune; + assert( p->iStatement==0 || db->flags&SQLITE_CountRows ); + rc = sqlite3VdbeCloseStatement(p, SAVEPOINT_RELEASE); + if( NEVER(rc!=SQLITE_OK) ){ + break; } - /* - ** cnt==0 means there was not match. cnt>1 means there were two or - ** more matches. Either way, we have an error. - */ - if( cnt!=1 ){ - const char *zErr; - zErr = cnt==0 ? "no such column" : "ambiguous column name"; - if( zDb ){ - sqlite3ErrorMsg(pParse, "%s: %s.%s.%s", zErr, zDb, zTab, zCol); - }else if( zTab ){ - sqlite3ErrorMsg(pParse, "%s: %s.%s", zErr, zTab, zCol); - }else{ - sqlite3ErrorMsg(pParse, "%s: %s", zErr, zCol); - } - pTopNC->nErr++; - } + /* Invalidate all ephemeral cursor row caches */ + p->cacheCtr = (p->cacheCtr + 2)|1; - /* If a column from a table in pSrcList is referenced, then record - ** this fact in the pSrcList.a[].colUsed bitmask. Column 0 causes - ** bit 0 to be set. Column 1 sets bit 1. And so forth. If the - ** column number is greater than the number of bits in the bitmask - ** then set the high-order bit of the bitmask. - */ - if( pExpr->iColumn>=0 && pMatch!=0 ){ - int n = pExpr->iColumn; - testcase( n==BMS-1 ); - if( n>=BMS ){ - n = BMS-1; - } - assert( pMatch->iCursor==pExpr->iTable ); - pMatch->colUsed |= ((Bitmask)1)<pResultSet = &aMem[pOp->p1]; + for(u.ae.i=0; u.ae.ip2; u.ae.i++){ + assert( memIsValid(&u.ae.pMem[u.ae.i]) ); + Deephemeralize(&u.ae.pMem[u.ae.i]); + assert( (u.ae.pMem[u.ae.i].flags & MEM_Ephem)==0 + || (u.ae.pMem[u.ae.i].flags & (MEM_Str|MEM_Blob))==0 ); + sqlite3VdbeMemNulTerminate(&u.ae.pMem[u.ae.i]); + sqlite3VdbeMemStoreType(&u.ae.pMem[u.ae.i]); + REGISTER_TRACE(pOp->p1+u.ae.i, &u.ae.pMem[u.ae.i]); } + if( db->mallocFailed ) goto no_mem; - /* Clean up and return + /* Return SQLITE_ROW */ - sqlite3ExprDelete(db, pExpr->pLeft); - pExpr->pLeft = 0; - sqlite3ExprDelete(db, pExpr->pRight); - pExpr->pRight = 0; - pExpr->op = TK_COLUMN; -lookupname_end: - if( cnt==1 ){ - assert( pNC!=0 ); - sqlite3AuthRead(pParse, pExpr, pSchema, pNC->pSrcList); - /* Increment the nRef value on all name contexts from TopNC up to - ** the point where the name matched. */ - for(;;){ - assert( pTopNC!=0 ); - pTopNC->nRef++; - if( pTopNC==pNC ) break; - pTopNC = pTopNC->pNext; - } - return WRC_Prune; - } else { - return WRC_Abort; - } + p->pc = pc + 1; + rc = SQLITE_ROW; + goto vdbe_return; } -/* -** This routine is callback for sqlite3WalkExpr(). +/* Opcode: Concat P1 P2 P3 * * ** -** Resolve symbolic names into TK_COLUMN operators for the current -** node in the expression tree. Return 0 to continue the search down -** the tree or 2 to abort the tree walk. +** Add the text in register P1 onto the end of the text in +** register P2 and store the result in register P3. +** If either the P1 or P2 text are NULL then store NULL in P3. ** -** This routine also does error checking and name resolution for -** function names. The operator for aggregate functions is changed -** to TK_AGG_FUNCTION. +** P3 = P2 || P1 +** +** It is illegal for P1 and P3 to be the same register. Sometimes, +** if P3 is the same register as P2, the implementation is able +** to avoid a memcpy(). */ -static int resolveExprStep(Walker *pWalker, Expr *pExpr){ - NameContext *pNC; - Parse *pParse; - - pNC = pWalker->u.pNC; - assert( pNC!=0 ); - pParse = pNC->pParse; - assert( pParse==pWalker->pParse ); +case OP_Concat: { /* same as TK_CONCAT, in1, in2, out3 */ +#if 0 /* local variables moved into u.af */ + i64 nByte; +#endif /* local variables moved into u.af */ - if( ExprHasAnyProperty(pExpr, EP_Resolved) ) return WRC_Prune; - ExprSetProperty(pExpr, EP_Resolved); -#ifndef NDEBUG - if( pNC->pSrcList && pNC->pSrcList->nAlloc>0 ){ - SrcList *pSrcList = pNC->pSrcList; - int i; - for(i=0; ipSrcList->nSrc; i++){ - assert( pSrcList->a[i].iCursor>=0 && pSrcList->a[i].iCursornTab); - } + pIn1 = &aMem[pOp->p1]; + pIn2 = &aMem[pOp->p2]; + pOut = &aMem[pOp->p3]; + assert( pIn1!=pOut ); + if( (pIn1->flags | pIn2->flags) & MEM_Null ){ + sqlite3VdbeMemSetNull(pOut); + break; } -#endif - switch( pExpr->op ){ - -#if defined(SQLITE_ENABLE_UPDATE_DELETE_LIMIT) && !defined(SQLITE_OMIT_SUBQUERY) - /* The special operator TK_ROW means use the rowid for the first - ** column in the FROM clause. This is used by the LIMIT and ORDER BY - ** clause processing on UPDATE and DELETE statements. - */ - case TK_ROW: { - SrcList *pSrcList = pNC->pSrcList; - struct SrcList_item *pItem; - assert( pSrcList && pSrcList->nSrc==1 ); - pItem = pSrcList->a; - pExpr->op = TK_COLUMN; - pExpr->pTab = pItem->pTab; - pExpr->iTable = pItem->iCursor; - pExpr->iColumn = -1; - pExpr->affinity = SQLITE_AFF_INTEGER; - break; - } -#endif /* defined(SQLITE_ENABLE_UPDATE_DELETE_LIMIT) && !defined(SQLITE_OMIT_SUBQUERY) */ - - /* A lone identifier is the name of a column. - */ - case TK_ID: { - return lookupName(pParse, 0, 0, pExpr->u.zToken, pNC, pExpr); - } - - /* A table name and column name: ID.ID - ** Or a database, table and column: ID.ID.ID - */ - case TK_DOT: { - const char *zColumn; - const char *zTable; - const char *zDb; - Expr *pRight; - - /* if( pSrcList==0 ) break; */ - pRight = pExpr->pRight; - if( pRight->op==TK_ID ){ - zDb = 0; - zTable = pExpr->pLeft->u.zToken; - zColumn = pRight->u.zToken; - }else{ - assert( pRight->op==TK_DOT ); - zDb = pExpr->pLeft->u.zToken; - zTable = pRight->pLeft->u.zToken; - zColumn = pRight->pRight->u.zToken; - } - return lookupName(pParse, zDb, zTable, zColumn, pNC, pExpr); - } + if( ExpandBlob(pIn1) || ExpandBlob(pIn2) ) goto no_mem; + Stringify(pIn1, encoding); + Stringify(pIn2, encoding); + u.af.nByte = pIn1->n + pIn2->n; + if( u.af.nByte>db->aLimit[SQLITE_LIMIT_LENGTH] ){ + goto too_big; + } + MemSetTypeFlag(pOut, MEM_Str); + if( sqlite3VdbeMemGrow(pOut, (int)u.af.nByte+2, pOut==pIn2) ){ + goto no_mem; + } + if( pOut!=pIn2 ){ + memcpy(pOut->z, pIn2->z, pIn2->n); + } + memcpy(&pOut->z[pIn2->n], pIn1->z, pIn1->n); + pOut->z[u.af.nByte] = 0; + pOut->z[u.af.nByte+1] = 0; + pOut->flags |= MEM_Term; + pOut->n = (int)u.af.nByte; + pOut->enc = encoding; + UPDATE_MAX_BLOBSIZE(pOut); + break; +} - /* Resolve function names - */ - case TK_CONST_FUNC: - case TK_FUNCTION: { - ExprList *pList = pExpr->x.pList; /* The argument list */ - int n = pList ? pList->nExpr : 0; /* Number of arguments */ - int no_such_func = 0; /* True if no such function exists */ - int wrong_num_args = 0; /* True if wrong number of arguments */ - int is_agg = 0; /* True if is an aggregate function */ - int auth; /* Authorization to use the function */ - int nId; /* Number of characters in function name */ - const char *zId; /* The function name. */ - FuncDef *pDef; /* Information about the function */ - u8 enc = ENC(pParse->db); /* The database encoding */ +/* Opcode: Add P1 P2 P3 * * +** +** Add the value in register P1 to the value in register P2 +** and store the result in register P3. +** If either input is NULL, the result is NULL. +*/ +/* Opcode: Multiply P1 P2 P3 * * +** +** +** Multiply the value in register P1 by the value in register P2 +** and store the result in register P3. +** If either input is NULL, the result is NULL. +*/ +/* Opcode: Subtract P1 P2 P3 * * +** +** Subtract the value in register P1 from the value in register P2 +** and store the result in register P3. +** If either input is NULL, the result is NULL. +*/ +/* Opcode: Divide P1 P2 P3 * * +** +** Divide the value in register P1 by the value in register P2 +** and store the result in register P3 (P3=P2/P1). If the value in +** register P1 is zero, then the result is NULL. If either input is +** NULL, the result is NULL. +*/ +/* Opcode: Remainder P1 P2 P3 * * +** +** Compute the remainder after integer division of the value in +** register P1 by the value in register P2 and store the result in P3. +** If the value in register P2 is zero the result is NULL. +** If either operand is NULL, the result is NULL. +*/ +case OP_Add: /* same as TK_PLUS, in1, in2, out3 */ +case OP_Subtract: /* same as TK_MINUS, in1, in2, out3 */ +case OP_Multiply: /* same as TK_STAR, in1, in2, out3 */ +case OP_Divide: /* same as TK_SLASH, in1, in2, out3 */ +case OP_Remainder: { /* same as TK_REM, in1, in2, out3 */ +#if 0 /* local variables moved into u.ag */ + int flags; /* Combined MEM_* flags from both inputs */ + i64 iA; /* Integer value of left operand */ + i64 iB; /* Integer value of right operand */ + double rA; /* Real value of left operand */ + double rB; /* Real value of right operand */ +#endif /* local variables moved into u.ag */ - testcase( pExpr->op==TK_CONST_FUNC ); - assert( !ExprHasProperty(pExpr, EP_xIsSelect) ); - zId = pExpr->u.zToken; - nId = sqlite3Strlen30(zId); - pDef = sqlite3FindFunction(pParse->db, zId, nId, n, enc, 0); - if( pDef==0 ){ - pDef = sqlite3FindFunction(pParse->db, zId, nId, -1, enc, 0); - if( pDef==0 ){ - no_such_func = 1; - }else{ - wrong_num_args = 1; - } - }else{ - is_agg = pDef->xFunc==0; + pIn1 = &aMem[pOp->p1]; + applyNumericAffinity(pIn1); + pIn2 = &aMem[pOp->p2]; + applyNumericAffinity(pIn2); + pOut = &aMem[pOp->p3]; + u.ag.flags = pIn1->flags | pIn2->flags; + if( (u.ag.flags & MEM_Null)!=0 ) goto arithmetic_result_is_null; + if( (pIn1->flags & pIn2->flags & MEM_Int)==MEM_Int ){ + u.ag.iA = pIn1->u.i; + u.ag.iB = pIn2->u.i; + switch( pOp->opcode ){ + case OP_Add: if( sqlite3AddInt64(&u.ag.iB,u.ag.iA) ) goto fp_math; break; + case OP_Subtract: if( sqlite3SubInt64(&u.ag.iB,u.ag.iA) ) goto fp_math; break; + case OP_Multiply: if( sqlite3MulInt64(&u.ag.iB,u.ag.iA) ) goto fp_math; break; + case OP_Divide: { + if( u.ag.iA==0 ) goto arithmetic_result_is_null; + if( u.ag.iA==-1 && u.ag.iB==SMALLEST_INT64 ) goto fp_math; + u.ag.iB /= u.ag.iA; + break; } -#ifndef SQLITE_OMIT_AUTHORIZATION - if( pDef ){ - auth = sqlite3AuthCheck(pParse, SQLITE_FUNCTION, 0, pDef->zName, 0); - if( auth!=SQLITE_OK ){ - if( auth==SQLITE_DENY ){ - sqlite3ErrorMsg(pParse, "not authorized to use function: %s", - pDef->zName); - pNC->nErr++; - } - pExpr->op = TK_NULL; - return WRC_Prune; - } + default: { + if( u.ag.iA==0 ) goto arithmetic_result_is_null; + if( u.ag.iA==-1 ) u.ag.iA = 1; + u.ag.iB %= u.ag.iA; + break; } -#endif - if( is_agg && !pNC->allowAgg ){ - sqlite3ErrorMsg(pParse, "misuse of aggregate function %.*s()", nId,zId); - pNC->nErr++; - is_agg = 0; - }else if( no_such_func ){ - sqlite3ErrorMsg(pParse, "no such function: %.*s", nId, zId); - pNC->nErr++; - }else if( wrong_num_args ){ - sqlite3ErrorMsg(pParse,"wrong number of arguments to function %.*s()", - nId, zId); - pNC->nErr++; + } + pOut->u.i = u.ag.iB; + MemSetTypeFlag(pOut, MEM_Int); + }else{ +fp_math: + u.ag.rA = sqlite3VdbeRealValue(pIn1); + u.ag.rB = sqlite3VdbeRealValue(pIn2); + switch( pOp->opcode ){ + case OP_Add: u.ag.rB += u.ag.rA; break; + case OP_Subtract: u.ag.rB -= u.ag.rA; break; + case OP_Multiply: u.ag.rB *= u.ag.rA; break; + case OP_Divide: { + /* (double)0 In case of SQLITE_OMIT_FLOATING_POINT... */ + if( u.ag.rA==(double)0 ) goto arithmetic_result_is_null; + u.ag.rB /= u.ag.rA; + break; } - if( is_agg ){ - pExpr->op = TK_AGG_FUNCTION; - pNC->hasAgg = 1; + default: { + u.ag.iA = (i64)u.ag.rA; + u.ag.iB = (i64)u.ag.rB; + if( u.ag.iA==0 ) goto arithmetic_result_is_null; + if( u.ag.iA==-1 ) u.ag.iA = 1; + u.ag.rB = (double)(u.ag.iB % u.ag.iA); + break; } - if( is_agg ) pNC->allowAgg = 0; - sqlite3WalkExprList(pWalker, pList); - if( is_agg ) pNC->allowAgg = 1; - /* FIX ME: Compute pExpr->affinity based on the expected return - ** type of the function - */ - return WRC_Prune; } -#ifndef SQLITE_OMIT_SUBQUERY - case TK_SELECT: - case TK_EXISTS: testcase( pExpr->op==TK_EXISTS ); -#endif - case TK_IN: { - testcase( pExpr->op==TK_IN ); - if( ExprHasProperty(pExpr, EP_xIsSelect) ){ - int nRef = pNC->nRef; -#ifndef SQLITE_OMIT_CHECK - if( pNC->isCheck ){ - sqlite3ErrorMsg(pParse,"subqueries prohibited in CHECK constraints"); - } -#endif - sqlite3WalkSelect(pWalker, pExpr->x.pSelect); - assert( pNC->nRef>=nRef ); - if( nRef!=pNC->nRef ){ - ExprSetProperty(pExpr, EP_VarSelect); - } - } - break; +#ifdef SQLITE_OMIT_FLOATING_POINT + pOut->u.i = u.ag.rB; + MemSetTypeFlag(pOut, MEM_Int); +#else + if( sqlite3IsNaN(u.ag.rB) ){ + goto arithmetic_result_is_null; } -#ifndef SQLITE_OMIT_CHECK - case TK_VARIABLE: { - if( pNC->isCheck ){ - sqlite3ErrorMsg(pParse,"parameters prohibited in CHECK constraints"); - } - break; + pOut->r = u.ag.rB; + MemSetTypeFlag(pOut, MEM_Real); + if( (u.ag.flags & MEM_Real)==0 ){ + sqlite3VdbeIntegerAffinity(pOut); } #endif } - return (pParse->nErr || pParse->db->mallocFailed) ? WRC_Abort : WRC_Continue; + break; + +arithmetic_result_is_null: + sqlite3VdbeMemSetNull(pOut); + break; } -/* -** pEList is a list of expressions which are really the result set of the -** a SELECT statement. pE is a term in an ORDER BY or GROUP BY clause. -** This routine checks to see if pE is a simple identifier which corresponds -** to the AS-name of one of the terms of the expression list. If it is, -** this routine return an integer between 1 and N where N is the number of -** elements in pEList, corresponding to the matching entry. If there is -** no match, or if pE is not a simple identifier, then this routine -** return 0. +/* Opcode: CollSeq P1 * * P4 ** -** pEList has been resolved. pE has not. +** P4 is a pointer to a CollSeq struct. If the next call to a user function +** or aggregate calls sqlite3GetFuncCollSeq(), this collation sequence will +** be returned. This is used by the built-in min(), max() and nullif() +** functions. +** +** If P1 is not zero, then it is a register that a subsequent min() or +** max() aggregate will set to 1 if the current row is not the minimum or +** maximum. The P1 register is initialized to 0 by this instruction. +** +** The interface used by the implementation of the aforementioned functions +** to retrieve the collation sequence set by this opcode is not available +** publicly, only to user functions defined in func.c. */ -static int resolveAsName( - Parse *pParse, /* Parsing context for error messages */ - ExprList *pEList, /* List of expressions to scan */ - Expr *pE /* Expression we are trying to match */ -){ - int i; /* Loop counter */ - - UNUSED_PARAMETER(pParse); - - if( pE->op==TK_ID ){ - char *zCol = pE->u.zToken; - for(i=0; inExpr; i++){ - char *zAs = pEList->a[i].zName; - if( zAs!=0 && sqlite3StrICmp(zAs, zCol)==0 ){ - return i+1; - } - } +case OP_CollSeq: { + assert( pOp->p4type==P4_COLLSEQ ); + if( pOp->p1 ){ + sqlite3VdbeMemSetInt64(&aMem[pOp->p1], 0); } - return 0; + break; } -/* -** pE is a pointer to an expression which is a single term in the -** ORDER BY of a compound SELECT. The expression has not been -** name resolved. +/* Opcode: Function P1 P2 P3 P4 P5 ** -** At the point this routine is called, we already know that the -** ORDER BY term is not an integer index into the result set. That -** case is handled by the calling routine. +** Invoke a user function (P4 is a pointer to a Function structure that +** defines the function) with P5 arguments taken from register P2 and +** successors. The result of the function is stored in register P3. +** Register P3 must not be one of the function inputs. ** -** Attempt to match pE against result set columns in the left-most -** SELECT statement. Return the index i of the matching column, -** as an indication to the caller that it should sort by the i-th column. -** The left-most column is 1. In other words, the value returned is the -** same integer value that would be used in the SQL statement to indicate -** the column. +** P1 is a 32-bit bitmask indicating whether or not each argument to the +** function was determined to be constant at compile time. If the first +** argument was constant then bit 0 of P1 is set. This is used to determine +** whether meta data associated with a user function argument using the +** sqlite3_set_auxdata() API may be safely retained until the next +** invocation of this opcode. ** -** If there is no match, return 0. Return -1 if an error occurs. +** See also: AggStep and AggFinal */ -static int resolveOrderByTermToExprList( - Parse *pParse, /* Parsing context for error messages */ - Select *pSelect, /* The SELECT statement with the ORDER BY clause */ - Expr *pE /* The specific ORDER BY term */ -){ - int i; /* Loop counter */ - ExprList *pEList; /* The columns of the result set */ - NameContext nc; /* Name context for resolving pE */ - - assert( sqlite3ExprIsInteger(pE, &i)==0 ); - pEList = pSelect->pEList; - - /* Resolve all names in the ORDER BY term expression +case OP_Function: { +#if 0 /* local variables moved into u.ah */ + int i; + Mem *pArg; + sqlite3_context ctx; + sqlite3_value **apVal; + int n; +#endif /* local variables moved into u.ah */ + + u.ah.n = pOp->p5; + u.ah.apVal = p->apArg; + assert( u.ah.apVal || u.ah.n==0 ); + assert( pOp->p3>0 && pOp->p3<=p->nMem ); + pOut = &aMem[pOp->p3]; + memAboutToChange(p, pOut); + + assert( u.ah.n==0 || (pOp->p2>0 && pOp->p2+u.ah.n<=p->nMem+1) ); + assert( pOp->p3p2 || pOp->p3>=pOp->p2+u.ah.n ); + u.ah.pArg = &aMem[pOp->p2]; + for(u.ah.i=0; u.ah.ip2+u.ah.i, u.ah.pArg); + } + + assert( pOp->p4type==P4_FUNCDEF || pOp->p4type==P4_VDBEFUNC ); + if( pOp->p4type==P4_FUNCDEF ){ + u.ah.ctx.pFunc = pOp->p4.pFunc; + u.ah.ctx.pVdbeFunc = 0; + }else{ + u.ah.ctx.pVdbeFunc = (VdbeFunc*)pOp->p4.pVdbeFunc; + u.ah.ctx.pFunc = u.ah.ctx.pVdbeFunc->pFunc; + } + + u.ah.ctx.s.flags = MEM_Null; + u.ah.ctx.s.db = db; + u.ah.ctx.s.xDel = 0; + u.ah.ctx.s.zMalloc = 0; + + /* The output cell may already have a buffer allocated. Move + ** the pointer to u.ah.ctx.s so in case the user-function can use + ** the already allocated buffer instead of allocating a new one. */ - memset(&nc, 0, sizeof(nc)); - nc.pParse = pParse; - nc.pSrcList = pSelect->pSrc; - nc.pEList = pEList; - nc.allowAgg = 1; - nc.nErr = 0; - if( sqlite3ResolveExprNames(&nc, pE) ){ - sqlite3ErrorClear(pParse); - return 0; + sqlite3VdbeMemMove(&u.ah.ctx.s, pOut); + MemSetTypeFlag(&u.ah.ctx.s, MEM_Null); + + u.ah.ctx.isError = 0; + if( u.ah.ctx.pFunc->flags & SQLITE_FUNC_NEEDCOLL ){ + assert( pOp>aOp ); + assert( pOp[-1].p4type==P4_COLLSEQ ); + assert( pOp[-1].opcode==OP_CollSeq ); + u.ah.ctx.pColl = pOp[-1].p4.pColl; } + db->lastRowid = lastRowid; + (*u.ah.ctx.pFunc->xFunc)(&u.ah.ctx, u.ah.n, u.ah.apVal); /* IMP: R-24505-23230 */ + lastRowid = db->lastRowid; - /* Try to match the ORDER BY expression against an expression - ** in the result set. Return an 1-based index of the matching - ** result-set entry. + /* If any auxiliary data functions have been called by this user function, + ** immediately call the destructor for any non-static values. */ - for(i=0; inExpr; i++){ - if( sqlite3ExprCompare(pEList->a[i].pExpr, pE) ){ - return i+1; - } + if( u.ah.ctx.pVdbeFunc ){ + sqlite3VdbeDeleteAuxData(u.ah.ctx.pVdbeFunc, pOp->p1); + pOp->p4.pVdbeFunc = u.ah.ctx.pVdbeFunc; + pOp->p4type = P4_VDBEFUNC; } - /* If no match, return 0. */ - return 0; -} + if( db->mallocFailed ){ + /* Even though a malloc() has failed, the implementation of the + ** user function may have called an sqlite3_result_XXX() function + ** to return a value. The following call releases any resources + ** associated with such a value. + */ + sqlite3VdbeMemRelease(&u.ah.ctx.s); + goto no_mem; + } -/* -** Generate an ORDER BY or GROUP BY term out-of-range error. -*/ -static void resolveOutOfRangeError( - Parse *pParse, /* The error context into which to write the error */ - const char *zType, /* "ORDER" or "GROUP" */ - int i, /* The index (1-based) of the term out of range */ - int mx /* Largest permissible value of i */ -){ - sqlite3ErrorMsg(pParse, - "%r %s BY term out of range - should be " - "between 1 and %d", i, zType, mx); + /* If the function returned an error, throw an exception */ + if( u.ah.ctx.isError ){ + sqlite3SetString(&p->zErrMsg, db, "%s", sqlite3_value_text(&u.ah.ctx.s)); + rc = u.ah.ctx.isError; + } + + /* Copy the result of the function into register P3 */ + sqlite3VdbeChangeEncoding(&u.ah.ctx.s, encoding); + sqlite3VdbeMemMove(pOut, &u.ah.ctx.s); + if( sqlite3VdbeMemTooBig(pOut) ){ + goto too_big; + } + +#if 0 + /* The app-defined function has done something that as caused this + ** statement to expire. (Perhaps the function called sqlite3_exec() + ** with a CREATE TABLE statement.) + */ + if( p->expired ) rc = SQLITE_ABORT; +#endif + + REGISTER_TRACE(pOp->p3, pOut); + UPDATE_MAX_BLOBSIZE(pOut); + break; } -/* -** Analyze the ORDER BY clause in a compound SELECT statement. Modify -** each term of the ORDER BY clause is a constant integer between 1 -** and N where N is the number of columns in the compound SELECT. +/* Opcode: BitAnd P1 P2 P3 * * ** -** ORDER BY terms that are already an integer between 1 and N are -** unmodified. ORDER BY terms that are integers outside the range of -** 1 through N generate an error. ORDER BY terms that are expressions -** are matched against result set expressions of compound SELECT -** beginning with the left-most SELECT and working toward the right. -** At the first match, the ORDER BY expression is transformed into -** the integer column number. +** Take the bit-wise AND of the values in register P1 and P2 and +** store the result in register P3. +** If either input is NULL, the result is NULL. +*/ +/* Opcode: BitOr P1 P2 P3 * * ** -** Return the number of errors seen. +** Take the bit-wise OR of the values in register P1 and P2 and +** store the result in register P3. +** If either input is NULL, the result is NULL. */ -static int resolveCompoundOrderBy( - Parse *pParse, /* Parsing context. Leave error messages here */ - Select *pSelect /* The SELECT statement containing the ORDER BY */ -){ - int i; - ExprList *pOrderBy; - ExprList *pEList; - sqlite3 *db; - int moreToDo = 1; +/* Opcode: ShiftLeft P1 P2 P3 * * +** +** Shift the integer value in register P2 to the left by the +** number of bits specified by the integer in register P1. +** Store the result in register P3. +** If either input is NULL, the result is NULL. +*/ +/* Opcode: ShiftRight P1 P2 P3 * * +** +** Shift the integer value in register P2 to the right by the +** number of bits specified by the integer in register P1. +** Store the result in register P3. +** If either input is NULL, the result is NULL. +*/ +case OP_BitAnd: /* same as TK_BITAND, in1, in2, out3 */ +case OP_BitOr: /* same as TK_BITOR, in1, in2, out3 */ +case OP_ShiftLeft: /* same as TK_LSHIFT, in1, in2, out3 */ +case OP_ShiftRight: { /* same as TK_RSHIFT, in1, in2, out3 */ +#if 0 /* local variables moved into u.ai */ + i64 iA; + u64 uA; + i64 iB; + u8 op; +#endif /* local variables moved into u.ai */ - pOrderBy = pSelect->pOrderBy; - if( pOrderBy==0 ) return 0; - db = pParse->db; -#if SQLITE_MAX_COLUMN - if( pOrderBy->nExpr>db->aLimit[SQLITE_LIMIT_COLUMN] ){ - sqlite3ErrorMsg(pParse, "too many terms in ORDER BY clause"); - return 1; - } -#endif - for(i=0; inExpr; i++){ - pOrderBy->a[i].done = 0; - } - pSelect->pNext = 0; - while( pSelect->pPrior ){ - pSelect->pPrior->pNext = pSelect; - pSelect = pSelect->pPrior; + pIn1 = &aMem[pOp->p1]; + pIn2 = &aMem[pOp->p2]; + pOut = &aMem[pOp->p3]; + if( (pIn1->flags | pIn2->flags) & MEM_Null ){ + sqlite3VdbeMemSetNull(pOut); + break; } - while( pSelect && moreToDo ){ - struct ExprList_item *pItem; - moreToDo = 0; - pEList = pSelect->pEList; - assert( pEList!=0 ); - for(i=0, pItem=pOrderBy->a; inExpr; i++, pItem++){ - int iCol = -1; - Expr *pE, *pDup; - if( pItem->done ) continue; - pE = pItem->pExpr; - if( sqlite3ExprIsInteger(pE, &iCol) ){ - if( iCol<=0 || iCol>pEList->nExpr ){ - resolveOutOfRangeError(pParse, "ORDER", i+1, pEList->nExpr); - return 1; - } - }else{ - iCol = resolveAsName(pParse, pEList, pE); - if( iCol==0 ){ - pDup = sqlite3ExprDup(db, pE, 0); - if( !db->mallocFailed ){ - assert(pDup); - iCol = resolveOrderByTermToExprList(pParse, pSelect, pDup); - } - sqlite3ExprDelete(db, pDup); - } - } - if( iCol>0 ){ - CollSeq *pColl = pE->pColl; - int flags = pE->flags & EP_ExpCollate; - sqlite3ExprDelete(db, pE); - pItem->pExpr = pE = sqlite3Expr(db, TK_INTEGER, 0); - if( pE==0 ) return 1; - pE->pColl = pColl; - pE->flags |= EP_IntValue | flags; - pE->u.iValue = iCol; - pItem->iCol = (u16)iCol; - pItem->done = 1; + u.ai.iA = sqlite3VdbeIntValue(pIn2); + u.ai.iB = sqlite3VdbeIntValue(pIn1); + u.ai.op = pOp->opcode; + if( u.ai.op==OP_BitAnd ){ + u.ai.iA &= u.ai.iB; + }else if( u.ai.op==OP_BitOr ){ + u.ai.iA |= u.ai.iB; + }else if( u.ai.iB!=0 ){ + assert( u.ai.op==OP_ShiftRight || u.ai.op==OP_ShiftLeft ); + + /* If shifting by a negative amount, shift in the other direction */ + if( u.ai.iB<0 ){ + assert( OP_ShiftRight==OP_ShiftLeft+1 ); + u.ai.op = 2*OP_ShiftLeft + 1 - u.ai.op; + u.ai.iB = u.ai.iB>(-64) ? -u.ai.iB : 64; + } + + if( u.ai.iB>=64 ){ + u.ai.iA = (u.ai.iA>=0 || u.ai.op==OP_ShiftLeft) ? 0 : -1; + }else{ + memcpy(&u.ai.uA, &u.ai.iA, sizeof(u.ai.uA)); + if( u.ai.op==OP_ShiftLeft ){ + u.ai.uA <<= u.ai.iB; }else{ - moreToDo = 1; + u.ai.uA >>= u.ai.iB; + /* Sign-extend on a right shift of a negative number */ + if( u.ai.iA<0 ) u.ai.uA |= ((((u64)0xffffffff)<<32)|0xffffffff) << (64-u.ai.iB); } - } - pSelect = pSelect->pNext; - } - for(i=0; inExpr; i++){ - if( pOrderBy->a[i].done==0 ){ - sqlite3ErrorMsg(pParse, "%r ORDER BY term does not match any " - "column in the result set", i+1); - return 1; + memcpy(&u.ai.iA, &u.ai.uA, sizeof(u.ai.iA)); } } - return 0; + pOut->u.i = u.ai.iA; + MemSetTypeFlag(pOut, MEM_Int); + break; } -/* -** Check every term in the ORDER BY or GROUP BY clause pOrderBy of -** the SELECT statement pSelect. If any term is reference to a -** result set expression (as determined by the ExprList.a.iCol field) -** then convert that term into a copy of the corresponding result set -** column. +/* Opcode: AddImm P1 P2 * * * +** +** Add the constant P2 to the value in register P1. +** The result is always an integer. ** -** If any errors are detected, add an error message to pParse and -** return non-zero. Return zero if no errors are seen. +** To force any register to be an integer, just add 0. */ -SQLITE_PRIVATE int sqlite3ResolveOrderGroupBy( - Parse *pParse, /* Parsing context. Leave error messages here */ - Select *pSelect, /* The SELECT statement containing the clause */ - ExprList *pOrderBy, /* The ORDER BY or GROUP BY clause to be processed */ - const char *zType /* "ORDER" or "GROUP" */ -){ - int i; - sqlite3 *db = pParse->db; - ExprList *pEList; - struct ExprList_item *pItem; +case OP_AddImm: { /* in1 */ + pIn1 = &aMem[pOp->p1]; + memAboutToChange(p, pIn1); + sqlite3VdbeMemIntegerify(pIn1); + pIn1->u.i += pOp->p2; + break; +} - if( pOrderBy==0 || pParse->db->mallocFailed ) return 0; -#if SQLITE_MAX_COLUMN - if( pOrderBy->nExpr>db->aLimit[SQLITE_LIMIT_COLUMN] ){ - sqlite3ErrorMsg(pParse, "too many terms in %s BY clause", zType); - return 1; - } -#endif - pEList = pSelect->pEList; - assert( pEList!=0 ); /* sqlite3SelectNew() guarantees this */ - for(i=0, pItem=pOrderBy->a; inExpr; i++, pItem++){ - if( pItem->iCol ){ - if( pItem->iCol>pEList->nExpr ){ - resolveOutOfRangeError(pParse, zType, i+1, pEList->nExpr); - return 1; - } - resolveAlias(pParse, pEList, pItem->iCol-1, pItem->pExpr, zType); +/* Opcode: MustBeInt P1 P2 * * * +** +** Force the value in register P1 to be an integer. If the value +** in P1 is not an integer and cannot be converted into an integer +** without data loss, then jump immediately to P2, or if P2==0 +** raise an SQLITE_MISMATCH exception. +*/ +case OP_MustBeInt: { /* jump, in1 */ + pIn1 = &aMem[pOp->p1]; + applyAffinity(pIn1, SQLITE_AFF_NUMERIC, encoding); + if( (pIn1->flags & MEM_Int)==0 ){ + if( pOp->p2==0 ){ + rc = SQLITE_MISMATCH; + goto abort_due_to_error; + }else{ + pc = pOp->p2 - 1; } + }else{ + MemSetTypeFlag(pIn1, MEM_Int); } - return 0; + break; } -/* -** pOrderBy is an ORDER BY or GROUP BY clause in SELECT statement pSelect. -** The Name context of the SELECT statement is pNC. zType is either -** "ORDER" or "GROUP" depending on which type of clause pOrderBy is. +#ifndef SQLITE_OMIT_FLOATING_POINT +/* Opcode: RealAffinity P1 * * * * ** -** This routine resolves each term of the clause into an expression. -** If the order-by term is an integer I between 1 and N (where N is the -** number of columns in the result set of the SELECT) then the expression -** in the resolution is a copy of the I-th result-set expression. If -** the order-by term is an identify that corresponds to the AS-name of -** a result-set expression, then the term resolves to a copy of the -** result-set expression. Otherwise, the expression is resolved in -** the usual way - using sqlite3ResolveExprNames(). +** If register P1 holds an integer convert it to a real value. ** -** This routine returns the number of errors. If errors occur, then -** an appropriate error message might be left in pParse. (OOM errors -** excepted.) +** This opcode is used when extracting information from a column that +** has REAL affinity. Such column values may still be stored as +** integers, for space efficiency, but after extraction we want them +** to have only a real value. */ -static int resolveOrderGroupBy( - NameContext *pNC, /* The name context of the SELECT statement */ - Select *pSelect, /* The SELECT statement holding pOrderBy */ - ExprList *pOrderBy, /* An ORDER BY or GROUP BY clause to resolve */ - const char *zType /* Either "ORDER" or "GROUP", as appropriate */ -){ - int i; /* Loop counter */ - int iCol; /* Column number */ - struct ExprList_item *pItem; /* A term of the ORDER BY clause */ - Parse *pParse; /* Parsing context */ - int nResult; /* Number of terms in the result set */ +case OP_RealAffinity: { /* in1 */ + pIn1 = &aMem[pOp->p1]; + if( pIn1->flags & MEM_Int ){ + sqlite3VdbeMemRealify(pIn1); + } + break; +} +#endif - if( pOrderBy==0 ) return 0; - nResult = pSelect->pEList->nExpr; - pParse = pNC->pParse; - for(i=0, pItem=pOrderBy->a; inExpr; i++, pItem++){ - Expr *pE = pItem->pExpr; - iCol = resolveAsName(pParse, pSelect->pEList, pE); - if( iCol>0 ){ - /* If an AS-name match is found, mark this ORDER BY column as being - ** a copy of the iCol-th result-set column. The subsequent call to - ** sqlite3ResolveOrderGroupBy() will convert the expression to a - ** copy of the iCol-th result-set expression. */ - pItem->iCol = (u16)iCol; - continue; - } - if( sqlite3ExprIsInteger(pE, &iCol) ){ - /* The ORDER BY term is an integer constant. Again, set the column - ** number so that sqlite3ResolveOrderGroupBy() will convert the - ** order-by term to a copy of the result-set expression */ - if( iCol<1 ){ - resolveOutOfRangeError(pParse, zType, i+1, nResult); - return 1; - } - pItem->iCol = (u16)iCol; - continue; - } +#ifndef SQLITE_OMIT_CAST +/* Opcode: ToText P1 * * * * +** +** Force the value in register P1 to be text. +** If the value is numeric, convert it to a string using the +** equivalent of printf(). Blob values are unchanged and +** are afterwards simply interpreted as text. +** +** A NULL value is not changed by this routine. It remains NULL. +*/ +case OP_ToText: { /* same as TK_TO_TEXT, in1 */ + pIn1 = &aMem[pOp->p1]; + memAboutToChange(p, pIn1); + if( pIn1->flags & MEM_Null ) break; + assert( MEM_Str==(MEM_Blob>>3) ); + pIn1->flags |= (pIn1->flags&MEM_Blob)>>3; + applyAffinity(pIn1, SQLITE_AFF_TEXT, encoding); + rc = ExpandBlob(pIn1); + assert( pIn1->flags & MEM_Str || db->mallocFailed ); + pIn1->flags &= ~(MEM_Int|MEM_Real|MEM_Blob|MEM_Zero); + UPDATE_MAX_BLOBSIZE(pIn1); + break; +} - /* Otherwise, treat the ORDER BY term as an ordinary expression */ - pItem->iCol = 0; - if( sqlite3ResolveExprNames(pNC, pE) ){ - return 1; - } +/* Opcode: ToBlob P1 * * * * +** +** Force the value in register P1 to be a BLOB. +** If the value is numeric, convert it to a string first. +** Strings are simply reinterpreted as blobs with no change +** to the underlying data. +** +** A NULL value is not changed by this routine. It remains NULL. +*/ +case OP_ToBlob: { /* same as TK_TO_BLOB, in1 */ + pIn1 = &aMem[pOp->p1]; + if( pIn1->flags & MEM_Null ) break; + if( (pIn1->flags & MEM_Blob)==0 ){ + applyAffinity(pIn1, SQLITE_AFF_TEXT, encoding); + assert( pIn1->flags & MEM_Str || db->mallocFailed ); + MemSetTypeFlag(pIn1, MEM_Blob); + }else{ + pIn1->flags &= ~(MEM_TypeMask&~MEM_Blob); } - return sqlite3ResolveOrderGroupBy(pParse, pSelect, pOrderBy, zType); + UPDATE_MAX_BLOBSIZE(pIn1); + break; } -/* -** Resolve names in the SELECT statement p and all of its descendents. +/* Opcode: ToNumeric P1 * * * * +** +** Force the value in register P1 to be numeric (either an +** integer or a floating-point number.) +** If the value is text or blob, try to convert it to an using the +** equivalent of atoi() or atof() and store 0 if no such conversion +** is possible. +** +** A NULL value is not changed by this routine. It remains NULL. */ -static int resolveSelectStep(Walker *pWalker, Select *p){ - NameContext *pOuterNC; /* Context that contains this SELECT */ - NameContext sNC; /* Name context of this SELECT */ - int isCompound; /* True if p is a compound select */ - int nCompound; /* Number of compound terms processed so far */ - Parse *pParse; /* Parsing context */ - ExprList *pEList; /* Result set expression list */ - int i; /* Loop counter */ - ExprList *pGroupBy; /* The GROUP BY clause */ - Select *pLeftmost; /* Left-most of SELECT of a compound */ - sqlite3 *db; /* Database connection */ - +case OP_ToNumeric: { /* same as TK_TO_NUMERIC, in1 */ + pIn1 = &aMem[pOp->p1]; + sqlite3VdbeMemNumerify(pIn1); + break; +} +#endif /* SQLITE_OMIT_CAST */ - assert( p!=0 ); - if( p->selFlags & SF_Resolved ){ - return WRC_Prune; +/* Opcode: ToInt P1 * * * * +** +** Force the value in register P1 to be an integer. If +** The value is currently a real number, drop its fractional part. +** If the value is text or blob, try to convert it to an integer using the +** equivalent of atoi() and store 0 if no such conversion is possible. +** +** A NULL value is not changed by this routine. It remains NULL. +*/ +case OP_ToInt: { /* same as TK_TO_INT, in1 */ + pIn1 = &aMem[pOp->p1]; + if( (pIn1->flags & MEM_Null)==0 ){ + sqlite3VdbeMemIntegerify(pIn1); } - pOuterNC = pWalker->u.pNC; - pParse = pWalker->pParse; - db = pParse->db; + break; +} - /* Normally sqlite3SelectExpand() will be called first and will have - ** already expanded this SELECT. However, if this is a subquery within - ** an expression, sqlite3ResolveExprNames() will be called without a - ** prior call to sqlite3SelectExpand(). When that happens, let - ** sqlite3SelectPrep() do all of the processing for this SELECT. - ** sqlite3SelectPrep() will invoke both sqlite3SelectExpand() and - ** this routine in the correct order. - */ - if( (p->selFlags & SF_Expanded)==0 ){ - sqlite3SelectPrep(pParse, p, pOuterNC); - return (pParse->nErr || db->mallocFailed) ? WRC_Abort : WRC_Prune; +#if !defined(SQLITE_OMIT_CAST) && !defined(SQLITE_OMIT_FLOATING_POINT) +/* Opcode: ToReal P1 * * * * +** +** Force the value in register P1 to be a floating point number. +** If The value is currently an integer, convert it. +** If the value is text or blob, try to convert it to an integer using the +** equivalent of atoi() and store 0.0 if no such conversion is possible. +** +** A NULL value is not changed by this routine. It remains NULL. +*/ +case OP_ToReal: { /* same as TK_TO_REAL, in1 */ + pIn1 = &aMem[pOp->p1]; + memAboutToChange(p, pIn1); + if( (pIn1->flags & MEM_Null)==0 ){ + sqlite3VdbeMemRealify(pIn1); } + break; +} +#endif /* !defined(SQLITE_OMIT_CAST) && !defined(SQLITE_OMIT_FLOATING_POINT) */ - isCompound = p->pPrior!=0; - nCompound = 0; - pLeftmost = p; - while( p ){ - assert( (p->selFlags & SF_Expanded)!=0 ); - assert( (p->selFlags & SF_Resolved)==0 ); - p->selFlags |= SF_Resolved; +/* Opcode: Lt P1 P2 P3 P4 P5 +** +** Compare the values in register P1 and P3. If reg(P3)flags */ + u16 flags3; /* Copy of initial value of pIn3->flags */ +#endif /* local variables moved into u.aj */ - /* Resolve the expressions in the LIMIT and OFFSET clauses. These - ** are not allowed to refer to any names, so pass an empty NameContext. - */ - memset(&sNC, 0, sizeof(sNC)); - sNC.pParse = pParse; - if( sqlite3ResolveExprNames(&sNC, p->pLimit) || - sqlite3ResolveExprNames(&sNC, p->pOffset) ){ - return WRC_Abort; - } - - /* Set up the local name-context to pass to sqlite3ResolveExprNames() to - ** resolve the result-set expression list. - */ - sNC.allowAgg = 1; - sNC.pSrcList = p->pSrc; - sNC.pNext = pOuterNC; - - /* Resolve names in the result set. */ - pEList = p->pEList; - assert( pEList!=0 ); - for(i=0; inExpr; i++){ - Expr *pX = pEList->a[i].pExpr; - if( sqlite3ResolveExprNames(&sNC, pX) ){ - return WRC_Abort; - } - } - - /* Recursively resolve names in all subqueries - */ - for(i=0; ipSrc->nSrc; i++){ - struct SrcList_item *pItem = &p->pSrc->a[i]; - if( pItem->pSelect ){ - const char *zSavedContext = pParse->zAuthContext; - if( pItem->zName ) pParse->zAuthContext = pItem->zName; - sqlite3ResolveSelectNames(pParse, pItem->pSelect, pOuterNC); - pParse->zAuthContext = zSavedContext; - if( pParse->nErr || db->mallocFailed ) return WRC_Abort; - } - } - - /* If there are no aggregate functions in the result-set, and no GROUP BY - ** expression, do not allow aggregates in any of the other expressions. - */ - assert( (p->selFlags & SF_Aggregate)==0 ); - pGroupBy = p->pGroupBy; - if( pGroupBy || sNC.hasAgg ){ - p->selFlags |= SF_Aggregate; + pIn1 = &aMem[pOp->p1]; + pIn3 = &aMem[pOp->p3]; + u.aj.flags1 = pIn1->flags; + u.aj.flags3 = pIn3->flags; + if( (u.aj.flags1 | u.aj.flags3)&MEM_Null ){ + /* One or both operands are NULL */ + if( pOp->p5 & SQLITE_NULLEQ ){ + /* If SQLITE_NULLEQ is set (which will only happen if the operator is + ** OP_Eq or OP_Ne) then take the jump or not depending on whether + ** or not both operands are null. + */ + assert( pOp->opcode==OP_Eq || pOp->opcode==OP_Ne ); + u.aj.res = (u.aj.flags1 & u.aj.flags3 & MEM_Null)==0; }else{ - sNC.allowAgg = 0; - } - - /* If a HAVING clause is present, then there must be a GROUP BY clause. - */ - if( p->pHaving && !pGroupBy ){ - sqlite3ErrorMsg(pParse, "a GROUP BY clause is required before HAVING"); - return WRC_Abort; - } - - /* Add the expression list to the name-context before parsing the - ** other expressions in the SELECT statement. This is so that - ** expressions in the WHERE clause (etc.) can refer to expressions by - ** aliases in the result set. - ** - ** Minor point: If this is the case, then the expression will be - ** re-evaluated for each reference to it. - */ - sNC.pEList = p->pEList; - if( sqlite3ResolveExprNames(&sNC, p->pWhere) || - sqlite3ResolveExprNames(&sNC, p->pHaving) - ){ - return WRC_Abort; - } - - /* The ORDER BY and GROUP BY clauses may not refer to terms in - ** outer queries - */ - sNC.pNext = 0; - sNC.allowAgg = 1; - - /* Process the ORDER BY clause for singleton SELECT statements. - ** The ORDER BY clause for compounds SELECT statements is handled - ** below, after all of the result-sets for all of the elements of - ** the compound have been resolved. - */ - if( !isCompound && resolveOrderGroupBy(&sNC, p, p->pOrderBy, "ORDER") ){ - return WRC_Abort; - } - if( db->mallocFailed ){ - return WRC_Abort; - } - - /* Resolve the GROUP BY clause. At the same time, make sure - ** the GROUP BY clause does not contain aggregate functions. - */ - if( pGroupBy ){ - struct ExprList_item *pItem; - - if( resolveOrderGroupBy(&sNC, p, pGroupBy, "GROUP") || db->mallocFailed ){ - return WRC_Abort; - } - for(i=0, pItem=pGroupBy->a; inExpr; i++, pItem++){ - if( ExprHasProperty(pItem->pExpr, EP_Agg) ){ - sqlite3ErrorMsg(pParse, "aggregate functions are not allowed in " - "the GROUP BY clause"); - return WRC_Abort; - } + /* SQLITE_NULLEQ is clear and at least one operand is NULL, + ** then the result is always NULL. + ** The jump is taken if the SQLITE_JUMPIFNULL bit is set. + */ + if( pOp->p5 & SQLITE_STOREP2 ){ + pOut = &aMem[pOp->p2]; + MemSetTypeFlag(pOut, MEM_Null); + REGISTER_TRACE(pOp->p2, pOut); + }else if( pOp->p5 & SQLITE_JUMPIFNULL ){ + pc = pOp->p2-1; } + break; + } + }else{ + /* Neither operand is NULL. Do a comparison. */ + u.aj.affinity = pOp->p5 & SQLITE_AFF_MASK; + if( u.aj.affinity ){ + applyAffinity(pIn1, u.aj.affinity, encoding); + applyAffinity(pIn3, u.aj.affinity, encoding); + if( db->mallocFailed ) goto no_mem; } - /* Advance to the next term of the compound - */ - p = p->pPrior; - nCompound++; + assert( pOp->p4type==P4_COLLSEQ || pOp->p4.pColl==0 ); + ExpandBlob(pIn1); + ExpandBlob(pIn3); + u.aj.res = sqlite3MemCompare(pIn3, pIn1, pOp->p4.pColl); + } + switch( pOp->opcode ){ + case OP_Eq: u.aj.res = u.aj.res==0; break; + case OP_Ne: u.aj.res = u.aj.res!=0; break; + case OP_Lt: u.aj.res = u.aj.res<0; break; + case OP_Le: u.aj.res = u.aj.res<=0; break; + case OP_Gt: u.aj.res = u.aj.res>0; break; + default: u.aj.res = u.aj.res>=0; break; } - /* Resolve the ORDER BY on a compound SELECT after all terms of - ** the compound have been resolved. - */ - if( isCompound && resolveCompoundOrderBy(pParse, pLeftmost) ){ - return WRC_Abort; + if( pOp->p5 & SQLITE_STOREP2 ){ + pOut = &aMem[pOp->p2]; + memAboutToChange(p, pOut); + MemSetTypeFlag(pOut, MEM_Int); + pOut->u.i = u.aj.res; + REGISTER_TRACE(pOp->p2, pOut); + }else if( u.aj.res ){ + pc = pOp->p2-1; } - return WRC_Prune; + /* Undo any changes made by applyAffinity() to the input registers. */ + pIn1->flags = (pIn1->flags&~MEM_TypeMask) | (u.aj.flags1&MEM_TypeMask); + pIn3->flags = (pIn3->flags&~MEM_TypeMask) | (u.aj.flags3&MEM_TypeMask); + break; } -/* -** This routine walks an expression tree and resolves references to -** table columns and result-set columns. At the same time, do error -** checking on function usage and set a flag if any aggregate functions -** are seen. -** -** To resolve table columns references we look for nodes (or subtrees) of the -** form X.Y.Z or Y.Z or just Z where -** -** X: The name of a database. Ex: "main" or "temp" or -** the symbolic name assigned to an ATTACH-ed database. -** -** Y: The name of a table in a FROM clause. Or in a trigger -** one of the special names "old" or "new". -** -** Z: The name of a column in table Y. -** -** The node at the root of the subtree is modified as follows: -** -** Expr.op Changed to TK_COLUMN -** Expr.pTab Points to the Table object for X.Y -** Expr.iColumn The column index in X.Y. -1 for the rowid. -** Expr.iTable The VDBE cursor number for X.Y -** -** -** To resolve result-set references, look for expression nodes of the -** form Z (with no X and Y prefix) where the Z matches the right-hand -** size of an AS clause in the result-set of a SELECT. The Z expression -** is replaced by a copy of the left-hand side of the result-set expression. -** Table-name and function resolution occurs on the substituted expression -** tree. For example, in: +/* Opcode: Permutation * * * P4 * ** -** SELECT a+b AS x, c+d AS y FROM t1 ORDER BY x; +** Set the permutation used by the OP_Compare operator to be the array +** of integers in P4. ** -** The "x" term of the order by is replaced by "a+b" to render: +** The permutation is only valid until the next OP_Permutation, OP_Compare, +** OP_Halt, or OP_ResultRow. Typically the OP_Permutation should occur +** immediately prior to the OP_Compare. +*/ +case OP_Permutation: { + assert( pOp->p4type==P4_INTARRAY ); + assert( pOp->p4.ai ); + aPermute = pOp->p4.ai; + break; +} + +/* Opcode: Compare P1 P2 P3 P4 * ** -** SELECT a+b AS x, c+d AS y FROM t1 ORDER BY a+b; +** Compare two vectors of registers in reg(P1)..reg(P1+P3-1) (call this +** vector "A") and in reg(P2)..reg(P2+P3-1) ("B"). Save the result of +** the comparison for use by the next OP_Jump instruct. ** -** Function calls are checked to make sure that the function is -** defined and that the correct number of arguments are specified. -** If the function is an aggregate function, then the pNC->hasAgg is -** set and the opcode is changed from TK_FUNCTION to TK_AGG_FUNCTION. -** If an expression contains aggregate functions then the EP_Agg -** property on the expression is set. +** P4 is a KeyInfo structure that defines collating sequences and sort +** orders for the comparison. The permutation applies to registers +** only. The KeyInfo elements are used sequentially. ** -** An error message is left in pParse if anything is amiss. The number -** if errors is returned. +** The comparison is a sort comparison, so NULLs compare equal, +** NULLs are less than numbers, numbers are less than strings, +** and strings are less than blobs. */ -SQLITE_PRIVATE int sqlite3ResolveExprNames( - NameContext *pNC, /* Namespace to resolve expressions in. */ - Expr *pExpr /* The expression to be analyzed. */ -){ - int savedHasAgg; - Walker w; +case OP_Compare: { +#if 0 /* local variables moved into u.ak */ + int n; + int i; + int p1; + int p2; + const KeyInfo *pKeyInfo; + int idx; + CollSeq *pColl; /* Collating sequence to use on this term */ + int bRev; /* True for DESCENDING sort order */ +#endif /* local variables moved into u.ak */ - if( pExpr==0 ) return 0; -#if SQLITE_MAX_EXPR_DEPTH>0 - { - Parse *pParse = pNC->pParse; - if( sqlite3ExprCheckHeight(pParse, pExpr->nHeight+pNC->pParse->nHeight) ){ - return 1; - } - pParse->nHeight += pExpr->nHeight; - } -#endif - savedHasAgg = pNC->hasAgg; - pNC->hasAgg = 0; - w.xExprCallback = resolveExprStep; - w.xSelectCallback = resolveSelectStep; - w.pParse = pNC->pParse; - w.u.pNC = pNC; - sqlite3WalkExpr(&w, pExpr); -#if SQLITE_MAX_EXPR_DEPTH>0 - pNC->pParse->nHeight -= pExpr->nHeight; -#endif - if( pNC->nErr>0 || w.pParse->nErr>0 ){ - ExprSetProperty(pExpr, EP_Error); + u.ak.n = pOp->p3; + u.ak.pKeyInfo = pOp->p4.pKeyInfo; + assert( u.ak.n>0 ); + assert( u.ak.pKeyInfo!=0 ); + u.ak.p1 = pOp->p1; + u.ak.p2 = pOp->p2; +#if SQLITE_DEBUG + if( aPermute ){ + int k, mx = 0; + for(k=0; kmx ) mx = aPermute[k]; + assert( u.ak.p1>0 && u.ak.p1+mx<=p->nMem+1 ); + assert( u.ak.p2>0 && u.ak.p2+mx<=p->nMem+1 ); + }else{ + assert( u.ak.p1>0 && u.ak.p1+u.ak.n<=p->nMem+1 ); + assert( u.ak.p2>0 && u.ak.p2+u.ak.n<=p->nMem+1 ); } - if( pNC->hasAgg ){ - ExprSetProperty(pExpr, EP_Agg); - }else if( savedHasAgg ){ - pNC->hasAgg = 1; +#endif /* SQLITE_DEBUG */ + for(u.ak.i=0; u.ak.inField ); + u.ak.pColl = u.ak.pKeyInfo->aColl[u.ak.i]; + u.ak.bRev = u.ak.pKeyInfo->aSortOrder[u.ak.i]; + iCompare = sqlite3MemCompare(&aMem[u.ak.p1+u.ak.idx], &aMem[u.ak.p2+u.ak.idx], u.ak.pColl); + if( iCompare ){ + if( u.ak.bRev ) iCompare = -iCompare; + break; + } } - return ExprHasProperty(pExpr, EP_Error); + aPermute = 0; + break; } - -/* -** Resolve all names in all expressions of a SELECT and in all -** decendents of the SELECT, including compounds off of p->pPrior, -** subqueries in expressions, and subqueries used as FROM clause -** terms. -** -** See sqlite3ResolveExprNames() for a description of the kinds of -** transformations that occur. +/* Opcode: Jump P1 P2 P3 * * ** -** All SELECT statements should have been expanded using -** sqlite3SelectExpand() prior to invoking this routine. +** Jump to the instruction at address P1, P2, or P3 depending on whether +** in the most recent OP_Compare instruction the P1 vector was less than +** equal to, or greater than the P2 vector, respectively. */ -SQLITE_PRIVATE void sqlite3ResolveSelectNames( - Parse *pParse, /* The parser context */ - Select *p, /* The SELECT statement being coded. */ - NameContext *pOuterNC /* Name context for parent SELECT statement */ -){ - Walker w; - - assert( p!=0 ); - w.xExprCallback = resolveExprStep; - w.xSelectCallback = resolveSelectStep; - w.pParse = pParse; - w.u.pNC = pOuterNC; - sqlite3WalkSelect(&w, p); +case OP_Jump: { /* jump */ + if( iCompare<0 ){ + pc = pOp->p1 - 1; + }else if( iCompare==0 ){ + pc = pOp->p2 - 1; + }else{ + pc = pOp->p3 - 1; + } + break; } -/************** End of resolve.c *********************************************/ -/************** Begin file expr.c ********************************************/ -/* -** 2001 September 15 -** -** The author disclaims copyright to this source code. In place of -** a legal notice, here is a blessing: -** -** May you do good and not evil. -** May you find forgiveness for yourself and forgive others. -** May you share freely, never taking more than you give. +/* Opcode: And P1 P2 P3 * * ** -************************************************************************* -** This file contains routines used for analyzing expressions and -** for generating VDBE code that evaluates expressions in SQLite. +** Take the logical AND of the values in registers P1 and P2 and +** write the result into register P3. ** -** $Id: expr.c,v 1.446 2009/06/19 18:32:55 drh Exp $ +** If either P1 or P2 is 0 (false) then the result is 0 even if +** the other input is NULL. A NULL and true or two NULLs give +** a NULL output. */ - -/* -** Return the 'affinity' of the expression pExpr if any. -** -** If pExpr is a column, a reference to a column via an 'AS' alias, -** or a sub-select with a column as the return value, then the -** affinity of that column is returned. Otherwise, 0x00 is returned, -** indicating no affinity for the expression. +/* Opcode: Or P1 P2 P3 * * ** -** i.e. the WHERE clause expresssions in the following statements all -** have an affinity: +** Take the logical OR of the values in register P1 and P2 and +** store the answer in register P3. ** -** CREATE TABLE t1(a); -** SELECT * FROM t1 WHERE a; -** SELECT a AS b FROM t1 WHERE b; -** SELECT * FROM t1 WHERE (select a from t1); +** If either P1 or P2 is nonzero (true) then the result is 1 (true) +** even if the other input is NULL. A NULL and false or two NULLs +** give a NULL output. */ -SQLITE_PRIVATE char sqlite3ExprAffinity(Expr *pExpr){ - int op = pExpr->op; - if( op==TK_SELECT ){ - assert( pExpr->flags&EP_xIsSelect ); - return sqlite3ExprAffinity(pExpr->x.pSelect->pEList->a[0].pExpr); +case OP_And: /* same as TK_AND, in1, in2, out3 */ +case OP_Or: { /* same as TK_OR, in1, in2, out3 */ +#if 0 /* local variables moved into u.al */ + int v1; /* Left operand: 0==FALSE, 1==TRUE, 2==UNKNOWN or NULL */ + int v2; /* Right operand: 0==FALSE, 1==TRUE, 2==UNKNOWN or NULL */ +#endif /* local variables moved into u.al */ + + pIn1 = &aMem[pOp->p1]; + if( pIn1->flags & MEM_Null ){ + u.al.v1 = 2; + }else{ + u.al.v1 = sqlite3VdbeIntValue(pIn1)!=0; } -#ifndef SQLITE_OMIT_CAST - if( op==TK_CAST ){ - assert( !ExprHasProperty(pExpr, EP_IntValue) ); - return sqlite3AffinityType(pExpr->u.zToken); + pIn2 = &aMem[pOp->p2]; + if( pIn2->flags & MEM_Null ){ + u.al.v2 = 2; + }else{ + u.al.v2 = sqlite3VdbeIntValue(pIn2)!=0; } -#endif - if( (op==TK_AGG_COLUMN || op==TK_COLUMN || op==TK_REGISTER) - && pExpr->pTab!=0 - ){ - /* op==TK_REGISTER && pExpr->pTab!=0 happens when pExpr was originally - ** a TK_COLUMN but was previously evaluated and cached in a register */ - int j = pExpr->iColumn; - if( j<0 ) return SQLITE_AFF_INTEGER; - assert( pExpr->pTab && jpTab->nCol ); - return pExpr->pTab->aCol[j].affinity; + if( pOp->opcode==OP_And ){ + static const unsigned char and_logic[] = { 0, 0, 0, 0, 1, 2, 0, 2, 2 }; + u.al.v1 = and_logic[u.al.v1*3+u.al.v2]; + }else{ + static const unsigned char or_logic[] = { 0, 1, 2, 1, 1, 1, 2, 1, 2 }; + u.al.v1 = or_logic[u.al.v1*3+u.al.v2]; } - return pExpr->affinity; + pOut = &aMem[pOp->p3]; + if( u.al.v1==2 ){ + MemSetTypeFlag(pOut, MEM_Null); + }else{ + pOut->u.i = u.al.v1; + MemSetTypeFlag(pOut, MEM_Int); + } + break; } -/* -** Set the collating sequence for expression pExpr to be the collating -** sequence named by pToken. Return a pointer to the revised expression. -** The collating sequence is marked as "explicit" using the EP_ExpCollate -** flag. An explicit collating sequence will override implicit -** collating sequences. +/* Opcode: Not P1 P2 * * * +** +** Interpret the value in register P1 as a boolean value. Store the +** boolean complement in register P2. If the value in register P1 is +** NULL, then a NULL is stored in P2. */ -SQLITE_PRIVATE Expr *sqlite3ExprSetColl(Parse *pParse, Expr *pExpr, Token *pCollName){ - char *zColl = 0; /* Dequoted name of collation sequence */ - CollSeq *pColl; - sqlite3 *db = pParse->db; - zColl = sqlite3NameFromToken(db, pCollName); - if( pExpr && zColl ){ - pColl = sqlite3LocateCollSeq(pParse, zColl); - if( pColl ){ - pExpr->pColl = pColl; - pExpr->flags |= EP_ExpCollate; - } +case OP_Not: { /* same as TK_NOT, in1, out2 */ + pIn1 = &aMem[pOp->p1]; + pOut = &aMem[pOp->p2]; + if( pIn1->flags & MEM_Null ){ + sqlite3VdbeMemSetNull(pOut); + }else{ + sqlite3VdbeMemSetInt64(pOut, !sqlite3VdbeIntValue(pIn1)); } - sqlite3DbFree(db, zColl); - return pExpr; + break; } -/* -** Return the default collation sequence for the expression pExpr. If -** there is no default collation type, return 0. +/* Opcode: BitNot P1 P2 * * * +** +** Interpret the content of register P1 as an integer. Store the +** ones-complement of the P1 value into register P2. If P1 holds +** a NULL then store a NULL in P2. */ -SQLITE_PRIVATE CollSeq *sqlite3ExprCollSeq(Parse *pParse, Expr *pExpr){ - CollSeq *pColl = 0; - Expr *p = pExpr; - while( ALWAYS(p) ){ - int op; - pColl = p->pColl; - if( pColl ) break; - op = p->op; - if( (op==TK_AGG_COLUMN || op==TK_COLUMN || op==TK_REGISTER) && p->pTab!=0 ){ - /* op==TK_REGISTER && p->pTab!=0 happens when pExpr was originally - ** a TK_COLUMN but was previously evaluated and cached in a register */ - const char *zColl; - int j = p->iColumn; - if( j>=0 ){ - sqlite3 *db = pParse->db; - zColl = p->pTab->aCol[j].zColl; - pColl = sqlite3FindCollSeq(db, ENC(db), zColl, 0); - pExpr->pColl = pColl; - } - break; - } - if( op!=TK_CAST && op!=TK_UPLUS ){ - break; - } - p = p->pLeft; - } - if( sqlite3CheckCollSeq(pParse, pColl) ){ - pColl = 0; +case OP_BitNot: { /* same as TK_BITNOT, in1, out2 */ + pIn1 = &aMem[pOp->p1]; + pOut = &aMem[pOp->p2]; + if( pIn1->flags & MEM_Null ){ + sqlite3VdbeMemSetNull(pOut); + }else{ + sqlite3VdbeMemSetInt64(pOut, ~sqlite3VdbeIntValue(pIn1)); } - return pColl; + break; } -/* -** pExpr is an operand of a comparison operator. aff2 is the -** type affinity of the other operand. This routine returns the -** type affinity that should be used for the comparison operator. +/* Opcode: Once P1 P2 * * * +** +** Check if OP_Once flag P1 is set. If so, jump to instruction P2. Otherwise, +** set the flag and fall through to the next instruction. +** +** See also: JumpOnce */ -SQLITE_PRIVATE char sqlite3CompareAffinity(Expr *pExpr, char aff2){ - char aff1 = sqlite3ExprAffinity(pExpr); - if( aff1 && aff2 ){ - /* Both sides of the comparison are columns. If one has numeric - ** affinity, use that. Otherwise use no affinity. - */ - if( sqlite3IsNumericAffinity(aff1) || sqlite3IsNumericAffinity(aff2) ){ - return SQLITE_AFF_NUMERIC; - }else{ - return SQLITE_AFF_NONE; - } - }else if( !aff1 && !aff2 ){ - /* Neither side of the comparison is a column. Compare the - ** results directly. - */ - return SQLITE_AFF_NONE; +case OP_Once: { /* jump */ + assert( pOp->p1nOnceFlag ); + if( p->aOnceFlag[pOp->p1] ){ + pc = pOp->p2-1; }else{ - /* One side is a column, the other is not. Use the columns affinity. */ - assert( aff1==0 || aff2==0 ); - return (aff1 + aff2); + p->aOnceFlag[pOp->p1] = 1; } + break; } -/* -** pExpr is a comparison operator. Return the type affinity that should -** be applied to both operands prior to doing the comparison. +/* Opcode: If P1 P2 P3 * * +** +** Jump to P2 if the value in register P1 is true. The value +** is considered true if it is numeric and non-zero. If the value +** in P1 is NULL then take the jump if P3 is non-zero. */ -static char comparisonAffinity(Expr *pExpr){ - char aff; - assert( pExpr->op==TK_EQ || pExpr->op==TK_IN || pExpr->op==TK_LT || - pExpr->op==TK_GT || pExpr->op==TK_GE || pExpr->op==TK_LE || - pExpr->op==TK_NE ); - assert( pExpr->pLeft ); - aff = sqlite3ExprAffinity(pExpr->pLeft); - if( pExpr->pRight ){ - aff = sqlite3CompareAffinity(pExpr->pRight, aff); - }else if( ExprHasProperty(pExpr, EP_xIsSelect) ){ - aff = sqlite3CompareAffinity(pExpr->x.pSelect->pEList->a[0].pExpr, aff); - }else if( !aff ){ - aff = SQLITE_AFF_NONE; +/* Opcode: IfNot P1 P2 P3 * * +** +** Jump to P2 if the value in register P1 is False. The value +** is considered false if it has a numeric value of zero. If the value +** in P1 is NULL then take the jump if P3 is zero. +*/ +case OP_If: /* jump, in1 */ +case OP_IfNot: { /* jump, in1 */ +#if 0 /* local variables moved into u.am */ + int c; +#endif /* local variables moved into u.am */ + pIn1 = &aMem[pOp->p1]; + if( pIn1->flags & MEM_Null ){ + u.am.c = pOp->p3; + }else{ +#ifdef SQLITE_OMIT_FLOATING_POINT + u.am.c = sqlite3VdbeIntValue(pIn1)!=0; +#else + u.am.c = sqlite3VdbeRealValue(pIn1)!=0.0; +#endif + if( pOp->opcode==OP_IfNot ) u.am.c = !u.am.c; } - return aff; + if( u.am.c ){ + pc = pOp->p2-1; + } + break; } -/* -** pExpr is a comparison expression, eg. '=', '<', IN(...) etc. -** idx_affinity is the affinity of an indexed column. Return true -** if the index with affinity idx_affinity may be used to implement -** the comparison in pExpr. +/* Opcode: IsNull P1 P2 * * * +** +** Jump to P2 if the value in register P1 is NULL. */ -SQLITE_PRIVATE int sqlite3IndexAffinityOk(Expr *pExpr, char idx_affinity){ - char aff = comparisonAffinity(pExpr); - switch( aff ){ - case SQLITE_AFF_NONE: - return 1; - case SQLITE_AFF_TEXT: - return idx_affinity==SQLITE_AFF_TEXT; - default: - return sqlite3IsNumericAffinity(idx_affinity); +case OP_IsNull: { /* same as TK_ISNULL, jump, in1 */ + pIn1 = &aMem[pOp->p1]; + if( (pIn1->flags & MEM_Null)!=0 ){ + pc = pOp->p2 - 1; } + break; } -/* -** Return the P5 value that should be used for a binary comparison -** opcode (OP_Eq, OP_Ge etc.) used to compare pExpr1 and pExpr2. +/* Opcode: NotNull P1 P2 * * * +** +** Jump to P2 if the value in register P1 is not NULL. */ -static u8 binaryCompareP5(Expr *pExpr1, Expr *pExpr2, int jumpIfNull){ - u8 aff = (char)sqlite3ExprAffinity(pExpr2); - aff = (u8)sqlite3CompareAffinity(pExpr1, aff) | (u8)jumpIfNull; - return aff; +case OP_NotNull: { /* same as TK_NOTNULL, jump, in1 */ + pIn1 = &aMem[pOp->p1]; + if( (pIn1->flags & MEM_Null)==0 ){ + pc = pOp->p2 - 1; + } + break; } -/* -** Return a pointer to the collation sequence that should be used by -** a binary comparison operator comparing pLeft and pRight. +/* Opcode: Column P1 P2 P3 P4 P5 ** -** If the left hand expression has a collating sequence type, then it is -** used. Otherwise the collation sequence for the right hand expression -** is used, or the default (BINARY) if neither expression has a collating -** type. +** Interpret the data that cursor P1 points to as a structure built using +** the MakeRecord instruction. (See the MakeRecord opcode for additional +** information about the format of the data.) Extract the P2-th column +** from this record. If there are less that (P2+1) +** values in the record, extract a NULL. ** -** Argument pRight (but not pLeft) may be a null pointer. In this case, -** it is not considered. -*/ -SQLITE_PRIVATE CollSeq *sqlite3BinaryCompareCollSeq( - Parse *pParse, - Expr *pLeft, - Expr *pRight -){ - CollSeq *pColl; - assert( pLeft ); - if( pLeft->flags & EP_ExpCollate ){ - assert( pLeft->pColl ); - pColl = pLeft->pColl; - }else if( pRight && pRight->flags & EP_ExpCollate ){ - assert( pRight->pColl ); - pColl = pRight->pColl; - }else{ - pColl = sqlite3ExprCollSeq(pParse, pLeft); - if( !pColl ){ - pColl = sqlite3ExprCollSeq(pParse, pRight); - } - } - return pColl; -} - -/* -** Generate the operands for a comparison operation. Before -** generating the code for each operand, set the EP_AnyAff -** flag on the expression so that it will be able to used a -** cached column value that has previously undergone an -** affinity change. +** The value extracted is stored in register P3. +** +** If the column contains fewer than P2 fields, then extract a NULL. Or, +** if the P4 argument is a P4_MEM use the value of the P4 argument as +** the result. +** +** If the OPFLAG_CLEARCACHE bit is set on P5 and P1 is a pseudo-table cursor, +** then the cache of the cursor is reset prior to extracting the column. +** The first OP_Column against a pseudo-table after the value of the content +** register has changed should have this bit set. +** +** If the OPFLAG_LENGTHARG and OPFLAG_TYPEOFARG bits are set on P5 when +** the result is guaranteed to only be used as the argument of a length() +** or typeof() function, respectively. The loading of large blobs can be +** skipped for length() and all content loading can be skipped for typeof(). */ -static void codeCompareOperands( - Parse *pParse, /* Parsing and code generating context */ - Expr *pLeft, /* The left operand */ - int *pRegLeft, /* Register where left operand is stored */ - int *pFreeLeft, /* Free this register when done */ - Expr *pRight, /* The right operand */ - int *pRegRight, /* Register where right operand is stored */ - int *pFreeRight /* Write temp register for right operand there */ -){ - while( pLeft->op==TK_UPLUS ) pLeft = pLeft->pLeft; - pLeft->flags |= EP_AnyAff; - *pRegLeft = sqlite3ExprCodeTemp(pParse, pLeft, pFreeLeft); - while( pRight->op==TK_UPLUS ) pRight = pRight->pLeft; - pRight->flags |= EP_AnyAff; - *pRegRight = sqlite3ExprCodeTemp(pParse, pRight, pFreeRight); -} +case OP_Column: { +#if 0 /* local variables moved into u.an */ + u32 payloadSize; /* Number of bytes in the record */ + i64 payloadSize64; /* Number of bytes in the record */ + int p1; /* P1 value of the opcode */ + int p2; /* column number to retrieve */ + VdbeCursor *pC; /* The VDBE cursor */ + char *zRec; /* Pointer to complete record-data */ + BtCursor *pCrsr; /* The BTree cursor */ + u32 *aType; /* aType[i] holds the numeric type of the i-th column */ + u32 *aOffset; /* aOffset[i] is offset to start of data for i-th column */ + int nField; /* number of fields in the record */ + int len; /* The length of the serialized data for the column */ + int i; /* Loop counter */ + char *zData; /* Part of the record being decoded */ + Mem *pDest; /* Where to write the extracted value */ + Mem sMem; /* For storing the record being decoded */ + u8 *zIdx; /* Index into header */ + u8 *zEndHdr; /* Pointer to first byte after the header */ + u32 offset; /* Offset into the data */ + u32 szField; /* Number of bytes in the content of a field */ + int szHdr; /* Size of the header size field at start of record */ + int avail; /* Number of bytes of available data */ + u32 t; /* A type code from the record header */ + Mem *pReg; /* PseudoTable input register */ +#endif /* local variables moved into u.an */ -/* -** Generate code for a comparison operator. -*/ -static int codeCompare( - Parse *pParse, /* The parsing (and code generating) context */ - Expr *pLeft, /* The left operand */ - Expr *pRight, /* The right operand */ - int opcode, /* The comparison opcode */ - int in1, int in2, /* Register holding operands */ - int dest, /* Jump here if true. */ - int jumpIfNull /* If true, jump if either operand is NULL */ -){ - int p5; - int addr; - CollSeq *p4; - p4 = sqlite3BinaryCompareCollSeq(pParse, pLeft, pRight); - p5 = binaryCompareP5(pLeft, pRight, jumpIfNull); - addr = sqlite3VdbeAddOp4(pParse->pVdbe, opcode, in2, dest, in1, - (void*)p4, P4_COLLSEQ); - sqlite3VdbeChangeP5(pParse->pVdbe, (u8)p5); - if( (p5 & SQLITE_AFF_MASK)!=SQLITE_AFF_NONE ){ - sqlite3ExprCacheAffinityChange(pParse, in1, 1); - sqlite3ExprCacheAffinityChange(pParse, in2, 1); - } - return addr; -} + u.an.p1 = pOp->p1; + u.an.p2 = pOp->p2; + u.an.pC = 0; + memset(&u.an.sMem, 0, sizeof(u.an.sMem)); + assert( u.an.p1nCursor ); + assert( pOp->p3>0 && pOp->p3<=p->nMem ); + u.an.pDest = &aMem[pOp->p3]; + memAboutToChange(p, u.an.pDest); + u.an.zRec = 0; -#if SQLITE_MAX_EXPR_DEPTH>0 -/* -** Check that argument nHeight is less than or equal to the maximum -** expression depth allowed. If it is not, leave an error message in -** pParse. -*/ -SQLITE_PRIVATE int sqlite3ExprCheckHeight(Parse *pParse, int nHeight){ - int rc = SQLITE_OK; - int mxHeight = pParse->db->aLimit[SQLITE_LIMIT_EXPR_DEPTH]; - if( nHeight>mxHeight ){ - sqlite3ErrorMsg(pParse, - "Expression tree is too large (maximum depth %d)", mxHeight - ); - rc = SQLITE_ERROR; + /* This block sets the variable u.an.payloadSize to be the total number of + ** bytes in the record. + ** + ** u.an.zRec is set to be the complete text of the record if it is available. + ** The complete record text is always available for pseudo-tables + ** If the record is stored in a cursor, the complete record text + ** might be available in the u.an.pC->aRow cache. Or it might not be. + ** If the data is unavailable, u.an.zRec is set to NULL. + ** + ** We also compute the number of columns in the record. For cursors, + ** the number of columns is stored in the VdbeCursor.nField element. + */ + u.an.pC = p->apCsr[u.an.p1]; + assert( u.an.pC!=0 ); +#ifndef SQLITE_OMIT_VIRTUALTABLE + assert( u.an.pC->pVtabCursor==0 ); +#endif + u.an.pCrsr = u.an.pC->pCursor; + if( u.an.pCrsr!=0 ){ + /* The record is stored in a B-Tree */ + rc = sqlite3VdbeCursorMoveto(u.an.pC); + if( rc ) goto abort_due_to_error; + if( u.an.pC->nullRow ){ + u.an.payloadSize = 0; + }else if( u.an.pC->cacheStatus==p->cacheCtr ){ + u.an.payloadSize = u.an.pC->payloadSize; + u.an.zRec = (char*)u.an.pC->aRow; + }else if( u.an.pC->isIndex ){ + assert( sqlite3BtreeCursorIsValid(u.an.pCrsr) ); + VVA_ONLY(rc =) sqlite3BtreeKeySize(u.an.pCrsr, &u.an.payloadSize64); + assert( rc==SQLITE_OK ); /* True because of CursorMoveto() call above */ + /* sqlite3BtreeParseCellPtr() uses getVarint32() to extract the + ** payload size, so it is impossible for u.an.payloadSize64 to be + ** larger than 32 bits. */ + assert( (u.an.payloadSize64 & SQLITE_MAX_U32)==(u64)u.an.payloadSize64 ); + u.an.payloadSize = (u32)u.an.payloadSize64; + }else{ + assert( sqlite3BtreeCursorIsValid(u.an.pCrsr) ); + VVA_ONLY(rc =) sqlite3BtreeDataSize(u.an.pCrsr, &u.an.payloadSize); + assert( rc==SQLITE_OK ); /* DataSize() cannot fail */ + } + }else if( ALWAYS(u.an.pC->pseudoTableReg>0) ){ + u.an.pReg = &aMem[u.an.pC->pseudoTableReg]; + assert( u.an.pReg->flags & MEM_Blob ); + assert( memIsValid(u.an.pReg) ); + u.an.payloadSize = u.an.pReg->n; + u.an.zRec = u.an.pReg->z; + u.an.pC->cacheStatus = (pOp->p5&OPFLAG_CLEARCACHE) ? CACHE_STALE : p->cacheCtr; + assert( u.an.payloadSize==0 || u.an.zRec!=0 ); + }else{ + /* Consider the row to be NULL */ + u.an.payloadSize = 0; } - return rc; -} -/* The following three functions, heightOfExpr(), heightOfExprList() -** and heightOfSelect(), are used to determine the maximum height -** of any expression tree referenced by the structure passed as the -** first argument. -** -** If this maximum height is greater than the current value pointed -** to by pnHeight, the second parameter, then set *pnHeight to that -** value. -*/ -static void heightOfExpr(Expr *p, int *pnHeight){ - if( p ){ - if( p->nHeight>*pnHeight ){ - *pnHeight = p->nHeight; - } - } -} -static void heightOfExprList(ExprList *p, int *pnHeight){ - if( p ){ - int i; - for(i=0; inExpr; i++){ - heightOfExpr(p->a[i].pExpr, pnHeight); - } + /* If u.an.payloadSize is 0, then just store a NULL. This can happen because of + ** nullRow or because of a corrupt database. */ + if( u.an.payloadSize==0 ){ + MemSetTypeFlag(u.an.pDest, MEM_Null); + goto op_column_out; } -} -static void heightOfSelect(Select *p, int *pnHeight){ - if( p ){ - heightOfExpr(p->pWhere, pnHeight); - heightOfExpr(p->pHaving, pnHeight); - heightOfExpr(p->pLimit, pnHeight); - heightOfExpr(p->pOffset, pnHeight); - heightOfExprList(p->pEList, pnHeight); - heightOfExprList(p->pGroupBy, pnHeight); - heightOfExprList(p->pOrderBy, pnHeight); - heightOfSelect(p->pPrior, pnHeight); + assert( db->aLimit[SQLITE_LIMIT_LENGTH]>=0 ); + if( u.an.payloadSize > (u32)db->aLimit[SQLITE_LIMIT_LENGTH] ){ + goto too_big; } -} -/* -** Set the Expr.nHeight variable in the structure passed as an -** argument. An expression with no children, Expr.pList or -** Expr.pSelect member has a height of 1. Any other expression -** has a height equal to the maximum height of any other -** referenced Expr plus one. -*/ -static void exprSetHeight(Expr *p){ - int nHeight = 0; - heightOfExpr(p->pLeft, &nHeight); - heightOfExpr(p->pRight, &nHeight); - if( ExprHasProperty(p, EP_xIsSelect) ){ - heightOfSelect(p->x.pSelect, &nHeight); + u.an.nField = u.an.pC->nField; + assert( u.an.p2aType; + if( u.an.pC->cacheStatus==p->cacheCtr ){ + u.an.aOffset = u.an.pC->aOffset; }else{ - heightOfExprList(p->x.pList, &nHeight); - } - p->nHeight = nHeight + 1; -} + assert(u.an.aType); + u.an.avail = 0; + u.an.pC->aOffset = u.an.aOffset = &u.an.aType[u.an.nField]; + u.an.pC->payloadSize = u.an.payloadSize; + u.an.pC->cacheStatus = p->cacheCtr; -/* -** Set the Expr.nHeight variable using the exprSetHeight() function. If -** the height is greater than the maximum allowed expression depth, -** leave an error in pParse. -*/ -SQLITE_PRIVATE void sqlite3ExprSetHeight(Parse *pParse, Expr *p){ - exprSetHeight(p); - sqlite3ExprCheckHeight(pParse, p->nHeight); -} + /* Figure out how many bytes are in the header */ + if( u.an.zRec ){ + u.an.zData = u.an.zRec; + }else{ + if( u.an.pC->isIndex ){ + u.an.zData = (char*)sqlite3BtreeKeyFetch(u.an.pCrsr, &u.an.avail); + }else{ + u.an.zData = (char*)sqlite3BtreeDataFetch(u.an.pCrsr, &u.an.avail); + } + /* If KeyFetch()/DataFetch() managed to get the entire payload, + ** save the payload in the u.an.pC->aRow cache. That will save us from + ** having to make additional calls to fetch the content portion of + ** the record. + */ + assert( u.an.avail>=0 ); + if( u.an.payloadSize <= (u32)u.an.avail ){ + u.an.zRec = u.an.zData; + u.an.pC->aRow = (u8*)u.an.zData; + }else{ + u.an.pC->aRow = 0; + } + } + /* The following assert is true in all cases except when + ** the database file has been corrupted externally. + ** assert( u.an.zRec!=0 || u.an.avail>=u.an.payloadSize || u.an.avail>=9 ); */ + u.an.szHdr = getVarint32((u8*)u.an.zData, u.an.offset); -/* -** Return the maximum height of any expression tree referenced -** by the select statement passed as an argument. -*/ -SQLITE_PRIVATE int sqlite3SelectExprHeight(Select *p){ - int nHeight = 0; - heightOfSelect(p, &nHeight); - return nHeight; -} -#else - #define exprSetHeight(y) -#endif /* SQLITE_MAX_EXPR_DEPTH>0 */ + /* Make sure a corrupt database has not given us an oversize header. + ** Do this now to avoid an oversize memory allocation. + ** + ** Type entries can be between 1 and 5 bytes each. But 4 and 5 byte + ** types use so much data space that there can only be 4096 and 32 of + ** them, respectively. So the maximum header length results from a + ** 3-byte type for each of the maximum of 32768 columns plus three + ** extra bytes for the header length itself. 32768*3 + 3 = 98307. + */ + if( u.an.offset > 98307 ){ + rc = SQLITE_CORRUPT_BKPT; + goto op_column_out; + } -/* -** This routine is the core allocator for Expr nodes. -** -** Construct a new expression node and return a pointer to it. Memory -** for this node and for the pToken argument is a single allocation -** obtained from sqlite3DbMalloc(). The calling function -** is responsible for making sure the node eventually gets freed. -** -** If dequote is true, then the token (if it exists) is dequoted. -** If dequote is false, no dequoting is performance. The deQuote -** parameter is ignored if pToken is NULL or if the token does not -** appear to be quoted. If the quotes were of the form "..." (double-quotes) -** then the EP_DblQuoted flag is set on the expression node. -** -** Special case: If op==TK_INTEGER and pToken points to a string that -** can be translated into a 32-bit integer, then the token is not -** stored in u.zToken. Instead, the integer values is written -** into u.iValue and the EP_IntValue flag is set. No extra storage -** is allocated to hold the integer text and the dequote flag is ignored. -*/ -SQLITE_PRIVATE Expr *sqlite3ExprAlloc( - sqlite3 *db, /* Handle for sqlite3DbMallocZero() (may be null) */ - int op, /* Expression opcode */ - const Token *pToken, /* Token argument. Might be NULL */ - int dequote /* True to dequote */ -){ - Expr *pNew; - int nExtra = 0; - int iValue = 0; + /* Compute in u.an.len the number of bytes of data we need to read in order + ** to get u.an.nField type values. u.an.offset is an upper bound on this. But + ** u.an.nField might be significantly less than the true number of columns + ** in the table, and in that case, 5*u.an.nField+3 might be smaller than u.an.offset. + ** We want to minimize u.an.len in order to limit the size of the memory + ** allocation, especially if a corrupt database file has caused u.an.offset + ** to be oversized. Offset is limited to 98307 above. But 98307 might + ** still exceed Robson memory allocation limits on some configurations. + ** On systems that cannot tolerate large memory allocations, u.an.nField*5+3 + ** will likely be much smaller since u.an.nField will likely be less than + ** 20 or so. This insures that Robson memory allocation limits are + ** not exceeded even for corrupt database files. + */ + u.an.len = u.an.nField*5 + 3; + if( u.an.len > (int)u.an.offset ) u.an.len = (int)u.an.offset; - if( pToken ){ - if( op!=TK_INTEGER || pToken->z==0 - || sqlite3GetInt32(pToken->z, &iValue)==0 ){ - nExtra = pToken->n+1; + /* The KeyFetch() or DataFetch() above are fast and will get the entire + ** record header in most cases. But they will fail to get the complete + ** record header if the record header does not fit on a single page + ** in the B-Tree. When that happens, use sqlite3VdbeMemFromBtree() to + ** acquire the complete header text. + */ + if( !u.an.zRec && u.an.availisIndex, &u.an.sMem); + if( rc!=SQLITE_OK ){ + goto op_column_out; + } + u.an.zData = u.an.sMem.z; + } + u.an.zEndHdr = (u8 *)&u.an.zData[u.an.len]; + u.an.zIdx = (u8 *)&u.an.zData[u.an.szHdr]; + + /* Scan the header and use it to fill in the u.an.aType[] and u.an.aOffset[] + ** arrays. u.an.aType[u.an.i] will contain the type integer for the u.an.i-th + ** column and u.an.aOffset[u.an.i] will contain the u.an.offset from the beginning + ** of the record to the start of the data for the u.an.i-th column + */ + for(u.an.i=0; u.an.i u.an.zEndHdr) || (u.an.offset > u.an.payloadSize) + || (u.an.zIdx==u.an.zEndHdr && u.an.offset!=u.an.payloadSize) ){ + rc = SQLITE_CORRUPT_BKPT; + goto op_column_out; } } - pNew = sqlite3DbMallocZero(db, sizeof(Expr)+nExtra); - if( pNew ){ - pNew->op = (u8)op; - pNew->iAgg = -1; - if( pToken ){ - if( nExtra==0 ){ - pNew->flags |= EP_IntValue; - pNew->u.iValue = iValue; + + /* Get the column information. If u.an.aOffset[u.an.p2] is non-zero, then + ** deserialize the value from the record. If u.an.aOffset[u.an.p2] is zero, + ** then there are not enough fields in the record to satisfy the + ** request. In this case, set the value NULL or to P4 if P4 is + ** a pointer to a Mem object. + */ + if( u.an.aOffset[u.an.p2] ){ + assert( rc==SQLITE_OK ); + if( u.an.zRec ){ + /* This is the common case where the whole row fits on a single page */ + VdbeMemRelease(u.an.pDest); + sqlite3VdbeSerialGet((u8 *)&u.an.zRec[u.an.aOffset[u.an.p2]], u.an.aType[u.an.p2], u.an.pDest); + }else{ + /* This branch happens only when the row overflows onto multiple pages */ + u.an.t = u.an.aType[u.an.p2]; + if( (pOp->p5 & (OPFLAG_LENGTHARG|OPFLAG_TYPEOFARG))!=0 + && ((u.an.t>=12 && (u.an.t&1)==0) || (pOp->p5 & OPFLAG_TYPEOFARG)!=0) + ){ + /* Content is irrelevant for the typeof() function and for + ** the length(X) function if X is a blob. So we might as well use + ** bogus content rather than reading content from disk. NULL works + ** for text and blob and whatever is in the u.an.payloadSize64 variable + ** will work for everything else. */ + u.an.zData = u.an.t<12 ? (char*)&u.an.payloadSize64 : 0; }else{ - int c; - pNew->u.zToken = (char*)&pNew[1]; - memcpy(pNew->u.zToken, pToken->z, pToken->n); - pNew->u.zToken[pToken->n] = 0; - if( dequote && nExtra>=3 - && ((c = pToken->z[0])=='\'' || c=='"' || c=='[' || c=='`') ){ - sqlite3Dequote(pNew->u.zToken); - if( c=='"' ) pNew->flags |= EP_DblQuoted; + u.an.len = sqlite3VdbeSerialTypeLen(u.an.t); + sqlite3VdbeMemMove(&u.an.sMem, u.an.pDest); + rc = sqlite3VdbeMemFromBtree(u.an.pCrsr, u.an.aOffset[u.an.p2], u.an.len, u.an.pC->isIndex, + &u.an.sMem); + if( rc!=SQLITE_OK ){ + goto op_column_out; } + u.an.zData = u.an.sMem.z; } + sqlite3VdbeSerialGet((u8*)u.an.zData, u.an.t, u.an.pDest); + } + u.an.pDest->enc = encoding; + }else{ + if( pOp->p4type==P4_MEM ){ + sqlite3VdbeMemShallowCopy(u.an.pDest, pOp->p4.pMem, MEM_Static); + }else{ + MemSetTypeFlag(u.an.pDest, MEM_Null); } -#if SQLITE_MAX_EXPR_DEPTH>0 - pNew->nHeight = 1; -#endif } - return pNew; + + /* If we dynamically allocated space to hold the data (in the + ** sqlite3VdbeMemFromBtree() call above) then transfer control of that + ** dynamically allocated space over to the u.an.pDest structure. + ** This prevents a memory copy. + */ + if( u.an.sMem.zMalloc ){ + assert( u.an.sMem.z==u.an.sMem.zMalloc ); + assert( !(u.an.pDest->flags & MEM_Dyn) ); + assert( !(u.an.pDest->flags & (MEM_Blob|MEM_Str)) || u.an.pDest->z==u.an.sMem.z ); + u.an.pDest->flags &= ~(MEM_Ephem|MEM_Static); + u.an.pDest->flags |= MEM_Term; + u.an.pDest->z = u.an.sMem.z; + u.an.pDest->zMalloc = u.an.sMem.zMalloc; + } + + rc = sqlite3VdbeMemMakeWriteable(u.an.pDest); + +op_column_out: + UPDATE_MAX_BLOBSIZE(u.an.pDest); + REGISTER_TRACE(pOp->p3, u.an.pDest); + break; } -/* -** Allocate a new expression node from a zero-terminated token that has -** already been dequoted. +/* Opcode: Affinity P1 P2 * P4 * +** +** Apply affinities to a range of P2 registers starting with P1. +** +** P4 is a string that is P2 characters long. The nth character of the +** string indicates the column affinity that should be used for the nth +** memory cell in the range. */ -SQLITE_PRIVATE Expr *sqlite3Expr( - sqlite3 *db, /* Handle for sqlite3DbMallocZero() (may be null) */ - int op, /* Expression opcode */ - const char *zToken /* Token argument. Might be NULL */ -){ - Token x; - x.z = zToken; - x.n = zToken ? sqlite3Strlen30(zToken) : 0; - return sqlite3ExprAlloc(db, op, &x, 0); +case OP_Affinity: { +#if 0 /* local variables moved into u.ao */ + const char *zAffinity; /* The affinity to be applied */ + char cAff; /* A single character of affinity */ +#endif /* local variables moved into u.ao */ + + u.ao.zAffinity = pOp->p4.z; + assert( u.ao.zAffinity!=0 ); + assert( u.ao.zAffinity[pOp->p2]==0 ); + pIn1 = &aMem[pOp->p1]; + while( (u.ao.cAff = *(u.ao.zAffinity++))!=0 ){ + assert( pIn1 <= &p->aMem[p->nMem] ); + assert( memIsValid(pIn1) ); + ExpandBlob(pIn1); + applyAffinity(pIn1, u.ao.cAff, encoding); + pIn1++; + } + break; } -/* -** Attach subtrees pLeft and pRight to the Expr node pRoot. +/* Opcode: MakeRecord P1 P2 P3 P4 * ** -** If pRoot==NULL that means that a memory allocation error has occurred. -** In that case, delete the subtrees pLeft and pRight. +** Convert P2 registers beginning with P1 into the [record format] +** use as a data record in a database table or as a key +** in an index. The OP_Column opcode can decode the record later. +** +** P4 may be a string that is P2 characters long. The nth character of the +** string indicates the column affinity that should be used for the nth +** field of the index key. +** +** The mapping from character to affinity is given by the SQLITE_AFF_ +** macros defined in sqliteInt.h. +** +** If P4 is NULL then all index fields have the affinity NONE. */ -SQLITE_PRIVATE void sqlite3ExprAttachSubtrees( - sqlite3 *db, - Expr *pRoot, - Expr *pLeft, - Expr *pRight -){ - if( pRoot==0 ){ - assert( db->mallocFailed ); - sqlite3ExprDelete(db, pLeft); - sqlite3ExprDelete(db, pRight); - }else{ - if( pRight ){ - pRoot->pRight = pRight; - if( pRight->flags & EP_ExpCollate ){ - pRoot->flags |= EP_ExpCollate; - pRoot->pColl = pRight->pColl; - } +case OP_MakeRecord: { +#if 0 /* local variables moved into u.ap */ + u8 *zNewRecord; /* A buffer to hold the data for the new record */ + Mem *pRec; /* The new record */ + u64 nData; /* Number of bytes of data space */ + int nHdr; /* Number of bytes of header space */ + i64 nByte; /* Data space required for this record */ + int nZero; /* Number of zero bytes at the end of the record */ + int nVarint; /* Number of bytes in a varint */ + u32 serial_type; /* Type field */ + Mem *pData0; /* First field to be combined into the record */ + Mem *pLast; /* Last field of the record */ + int nField; /* Number of fields in the record */ + char *zAffinity; /* The affinity string for the record */ + int file_format; /* File format to use for encoding */ + int i; /* Space used in zNewRecord[] */ + int len; /* Length of a field */ +#endif /* local variables moved into u.ap */ + + /* Assuming the record contains N fields, the record format looks + ** like this: + ** + ** ------------------------------------------------------------------------ + ** | hdr-size | type 0 | type 1 | ... | type N-1 | data0 | ... | data N-1 | + ** ------------------------------------------------------------------------ + ** + ** Data(0) is taken from register P1. Data(1) comes from register P1+1 + ** and so froth. + ** + ** Each type field is a varint representing the serial type of the + ** corresponding data element (see sqlite3VdbeSerialType()). The + ** hdr-size field is also a varint which is the offset from the beginning + ** of the record to data0. + */ + u.ap.nData = 0; /* Number of bytes of data space */ + u.ap.nHdr = 0; /* Number of bytes of header space */ + u.ap.nZero = 0; /* Number of zero bytes at the end of the record */ + u.ap.nField = pOp->p1; + u.ap.zAffinity = pOp->p4.z; + assert( u.ap.nField>0 && pOp->p2>0 && pOp->p2+u.ap.nField<=p->nMem+1 ); + u.ap.pData0 = &aMem[u.ap.nField]; + u.ap.nField = pOp->p2; + u.ap.pLast = &u.ap.pData0[u.ap.nField-1]; + u.ap.file_format = p->minWriteFileFormat; + + /* Identify the output register */ + assert( pOp->p3p1 || pOp->p3>=pOp->p1+pOp->p2 ); + pOut = &aMem[pOp->p3]; + memAboutToChange(p, pOut); + + /* Loop through the elements that will make up the record to figure + ** out how much space is required for the new record. + */ + for(u.ap.pRec=u.ap.pData0; u.ap.pRec<=u.ap.pLast; u.ap.pRec++){ + assert( memIsValid(u.ap.pRec) ); + if( u.ap.zAffinity ){ + applyAffinity(u.ap.pRec, u.ap.zAffinity[u.ap.pRec-u.ap.pData0], encoding); } - if( pLeft ){ - pRoot->pLeft = pLeft; - if( pLeft->flags & EP_ExpCollate ){ - pRoot->flags |= EP_ExpCollate; - pRoot->pColl = pLeft->pColl; - } + if( u.ap.pRec->flags&MEM_Zero && u.ap.pRec->n>0 ){ + sqlite3VdbeMemExpandBlob(u.ap.pRec); + } + u.ap.serial_type = sqlite3VdbeSerialType(u.ap.pRec, u.ap.file_format); + u.ap.len = sqlite3VdbeSerialTypeLen(u.ap.serial_type); + u.ap.nData += u.ap.len; + u.ap.nHdr += sqlite3VarintLen(u.ap.serial_type); + if( u.ap.pRec->flags & MEM_Zero ){ + /* Only pure zero-filled BLOBs can be input to this Opcode. + ** We do not allow blobs with a prefix and a zero-filled tail. */ + u.ap.nZero += u.ap.pRec->u.nZero; + }else if( u.ap.len ){ + u.ap.nZero = 0; } - exprSetHeight(pRoot); } + + /* Add the initial header varint and total the size */ + u.ap.nHdr += u.ap.nVarint = sqlite3VarintLen(u.ap.nHdr); + if( u.ap.nVarintdb->aLimit[SQLITE_LIMIT_LENGTH] ){ + goto too_big; + } + + /* Make sure the output register has a buffer large enough to store + ** the new record. The output register (pOp->p3) is not allowed to + ** be one of the input registers (because the following call to + ** sqlite3VdbeMemGrow() could clobber the value before it is used). + */ + if( sqlite3VdbeMemGrow(pOut, (int)u.ap.nByte, 0) ){ + goto no_mem; + } + u.ap.zNewRecord = (u8 *)pOut->z; + + /* Write the record */ + u.ap.i = putVarint32(u.ap.zNewRecord, u.ap.nHdr); + for(u.ap.pRec=u.ap.pData0; u.ap.pRec<=u.ap.pLast; u.ap.pRec++){ + u.ap.serial_type = sqlite3VdbeSerialType(u.ap.pRec, u.ap.file_format); + u.ap.i += putVarint32(&u.ap.zNewRecord[u.ap.i], u.ap.serial_type); /* serial type */ + } + for(u.ap.pRec=u.ap.pData0; u.ap.pRec<=u.ap.pLast; u.ap.pRec++){ /* serial data */ + u.ap.i += sqlite3VdbeSerialPut(&u.ap.zNewRecord[u.ap.i], (int)(u.ap.nByte-u.ap.i), u.ap.pRec,u.ap.file_format); + } + assert( u.ap.i==u.ap.nByte ); + + assert( pOp->p3>0 && pOp->p3<=p->nMem ); + pOut->n = (int)u.ap.nByte; + pOut->flags = MEM_Blob | MEM_Dyn; + pOut->xDel = 0; + if( u.ap.nZero ){ + pOut->u.nZero = u.ap.nZero; + pOut->flags |= MEM_Zero; + } + pOut->enc = SQLITE_UTF8; /* In case the blob is ever converted to text */ + REGISTER_TRACE(pOp->p3, pOut); + UPDATE_MAX_BLOBSIZE(pOut); + break; } -/* -** Allocate a Expr node which joins as many as two subtrees. +/* Opcode: Count P1 P2 * * * ** -** One or both of the subtrees can be NULL. Return a pointer to the new -** Expr node. Or, if an OOM error occurs, set pParse->db->mallocFailed, -** free the subtrees and return NULL. +** Store the number of entries (an integer value) in the table or index +** opened by cursor P1 in register P2 */ -SQLITE_PRIVATE Expr *sqlite3PExpr( - Parse *pParse, /* Parsing context */ - int op, /* Expression opcode */ - Expr *pLeft, /* Left operand */ - Expr *pRight, /* Right operand */ - const Token *pToken /* Argument token */ -){ - Expr *p = sqlite3ExprAlloc(pParse->db, op, pToken, 1); - sqlite3ExprAttachSubtrees(pParse->db, p, pLeft, pRight); - return p; -} +#ifndef SQLITE_OMIT_BTREECOUNT +case OP_Count: { /* out2-prerelease */ +#if 0 /* local variables moved into u.aq */ + i64 nEntry; + BtCursor *pCrsr; +#endif /* local variables moved into u.aq */ -/* -** Join two expressions using an AND operator. If either expression is -** NULL, then just return the other expression. -*/ -SQLITE_PRIVATE Expr *sqlite3ExprAnd(sqlite3 *db, Expr *pLeft, Expr *pRight){ - if( pLeft==0 ){ - return pRight; - }else if( pRight==0 ){ - return pLeft; + u.aq.pCrsr = p->apCsr[pOp->p1]->pCursor; + if( ALWAYS(u.aq.pCrsr) ){ + rc = sqlite3BtreeCount(u.aq.pCrsr, &u.aq.nEntry); }else{ - Expr *pNew = sqlite3ExprAlloc(db, TK_AND, 0, 0); - sqlite3ExprAttachSubtrees(db, pNew, pLeft, pRight); - return pNew; + u.aq.nEntry = 0; } + pOut->u.i = u.aq.nEntry; + break; } +#endif -/* -** Construct a new expression node for a function with multiple -** arguments. -*/ -SQLITE_PRIVATE Expr *sqlite3ExprFunction(Parse *pParse, ExprList *pList, Token *pToken){ - Expr *pNew; - sqlite3 *db = pParse->db; - assert( pToken ); - pNew = sqlite3ExprAlloc(db, TK_FUNCTION, pToken, 1); - if( pNew==0 ){ - sqlite3ExprListDelete(db, pList); /* Avoid memory leak when malloc fails */ - return 0; - } - pNew->x.pList = pList; - assert( !ExprHasProperty(pNew, EP_xIsSelect) ); - sqlite3ExprSetHeight(pParse, pNew); - return pNew; -} - -/* -** Assign a variable number to an expression that encodes a wildcard -** in the original SQL statement. -** -** Wildcards consisting of a single "?" are assigned the next sequential -** variable number. -** -** Wildcards of the form "?nnn" are assigned the number "nnn". We make -** sure "nnn" is not too be to avoid a denial of service attack when -** the SQL statement comes from an external source. +/* Opcode: Savepoint P1 * * P4 * ** -** Wildcards of the form ":aaa", "@aaa", or "$aaa" are assigned the same number -** as the previous instance of the same wildcard. Or if this is the first -** instance of the wildcard, the next sequenial variable number is -** assigned. +** Open, release or rollback the savepoint named by parameter P4, depending +** on the value of P1. To open a new savepoint, P1==0. To release (commit) an +** existing savepoint, P1==1, or to rollback an existing savepoint P1==2. */ -SQLITE_PRIVATE void sqlite3ExprAssignVarNumber(Parse *pParse, Expr *pExpr){ - sqlite3 *db = pParse->db; - const char *z; +case OP_Savepoint: { +#if 0 /* local variables moved into u.ar */ + int p1; /* Value of P1 operand */ + char *zName; /* Name of savepoint */ + int nName; + Savepoint *pNew; + Savepoint *pSavepoint; + Savepoint *pTmp; + int iSavepoint; + int ii; +#endif /* local variables moved into u.ar */ - if( pExpr==0 ) return; - assert( !ExprHasAnyProperty(pExpr, EP_IntValue|EP_Reduced|EP_TokenOnly) ); - z = pExpr->u.zToken; - assert( z!=0 ); - assert( z[0]!=0 ); - if( z[1]==0 ){ - /* Wildcard of the form "?". Assign the next variable number */ - assert( z[0]=='?' ); - pExpr->iTable = ++pParse->nVar; - }else if( z[0]=='?' ){ - /* Wildcard of the form "?nnn". Convert "nnn" to an integer and - ** use it as the variable number */ - int i; - pExpr->iTable = i = atoi((char*)&z[1]); - testcase( i==0 ); - testcase( i==1 ); - testcase( i==db->aLimit[SQLITE_LIMIT_VARIABLE_NUMBER]-1 ); - testcase( i==db->aLimit[SQLITE_LIMIT_VARIABLE_NUMBER] ); - if( i<1 || i>db->aLimit[SQLITE_LIMIT_VARIABLE_NUMBER] ){ - sqlite3ErrorMsg(pParse, "variable number must be between ?1 and ?%d", - db->aLimit[SQLITE_LIMIT_VARIABLE_NUMBER]); - } - if( i>pParse->nVar ){ - pParse->nVar = i; - } - }else{ - /* Wildcards like ":aaa", "$aaa" or "@aaa". Reuse the same variable - ** number as the prior appearance of the same name, or if the name - ** has never appeared before, reuse the same variable number - */ - int i; - u32 n; - n = sqlite3Strlen30(z); - for(i=0; inVarExpr; i++){ - Expr *pE = pParse->apVarExpr[i]; - assert( pE!=0 ); - if( memcmp(pE->u.zToken, z, n)==0 && pE->u.zToken[n]==0 ){ - pExpr->iTable = pE->iTable; - break; + u.ar.p1 = pOp->p1; + u.ar.zName = pOp->p4.z; + + /* Assert that the u.ar.p1 parameter is valid. Also that if there is no open + ** transaction, then there cannot be any savepoints. + */ + assert( db->pSavepoint==0 || db->autoCommit==0 ); + assert( u.ar.p1==SAVEPOINT_BEGIN||u.ar.p1==SAVEPOINT_RELEASE||u.ar.p1==SAVEPOINT_ROLLBACK ); + assert( db->pSavepoint || db->isTransactionSavepoint==0 ); + assert( checkSavepointCount(db) ); + + if( u.ar.p1==SAVEPOINT_BEGIN ){ + if( db->writeVdbeCnt>0 ){ + /* A new savepoint cannot be created if there are active write + ** statements (i.e. open read/write incremental blob handles). + */ + sqlite3SetString(&p->zErrMsg, db, "cannot open savepoint - " + "SQL statements in progress"); + rc = SQLITE_BUSY; + }else{ + u.ar.nName = sqlite3Strlen30(u.ar.zName); + +#ifndef SQLITE_OMIT_VIRTUALTABLE + /* This call is Ok even if this savepoint is actually a transaction + ** savepoint (and therefore should not prompt xSavepoint()) callbacks. + ** If this is a transaction savepoint being opened, it is guaranteed + ** that the db->aVTrans[] array is empty. */ + assert( db->autoCommit==0 || db->nVTrans==0 ); + rc = sqlite3VtabSavepoint(db, SAVEPOINT_BEGIN, + db->nStatement+db->nSavepoint); + if( rc!=SQLITE_OK ) goto abort_due_to_error; +#endif + + /* Create a new savepoint structure. */ + u.ar.pNew = sqlite3DbMallocRaw(db, sizeof(Savepoint)+u.ar.nName+1); + if( u.ar.pNew ){ + u.ar.pNew->zName = (char *)&u.ar.pNew[1]; + memcpy(u.ar.pNew->zName, u.ar.zName, u.ar.nName+1); + + /* If there is no open transaction, then mark this as a special + ** "transaction savepoint". */ + if( db->autoCommit ){ + db->autoCommit = 0; + db->isTransactionSavepoint = 1; + }else{ + db->nSavepoint++; + } + + /* Link the new savepoint into the database handle's list. */ + u.ar.pNew->pNext = db->pSavepoint; + db->pSavepoint = u.ar.pNew; + u.ar.pNew->nDeferredCons = db->nDeferredCons; } } - if( i>=pParse->nVarExpr ){ - pExpr->iTable = ++pParse->nVar; - if( pParse->nVarExpr>=pParse->nVarExprAlloc-1 ){ - pParse->nVarExprAlloc += pParse->nVarExprAlloc + 10; - pParse->apVarExpr = - sqlite3DbReallocOrFree( - db, - pParse->apVarExpr, - pParse->nVarExprAlloc*sizeof(pParse->apVarExpr[0]) - ); + }else{ + u.ar.iSavepoint = 0; + + /* Find the named savepoint. If there is no such savepoint, then an + ** an error is returned to the user. */ + for( + u.ar.pSavepoint = db->pSavepoint; + u.ar.pSavepoint && sqlite3StrICmp(u.ar.pSavepoint->zName, u.ar.zName); + u.ar.pSavepoint = u.ar.pSavepoint->pNext + ){ + u.ar.iSavepoint++; + } + if( !u.ar.pSavepoint ){ + sqlite3SetString(&p->zErrMsg, db, "no such savepoint: %s", u.ar.zName); + rc = SQLITE_ERROR; + }else if( db->writeVdbeCnt>0 && u.ar.p1==SAVEPOINT_RELEASE ){ + /* It is not possible to release (commit) a savepoint if there are + ** active write statements. + */ + sqlite3SetString(&p->zErrMsg, db, + "cannot release savepoint - SQL statements in progress" + ); + rc = SQLITE_BUSY; + }else{ + + /* Determine whether or not this is a transaction savepoint. If so, + ** and this is a RELEASE command, then the current transaction + ** is committed. + */ + int isTransaction = u.ar.pSavepoint->pNext==0 && db->isTransactionSavepoint; + if( isTransaction && u.ar.p1==SAVEPOINT_RELEASE ){ + if( (rc = sqlite3VdbeCheckFk(p, 1))!=SQLITE_OK ){ + goto vdbe_return; + } + db->autoCommit = 1; + if( sqlite3VdbeHalt(p)==SQLITE_BUSY ){ + p->pc = pc; + db->autoCommit = 0; + p->rc = rc = SQLITE_BUSY; + goto vdbe_return; + } + db->isTransactionSavepoint = 0; + rc = p->rc; + }else{ + u.ar.iSavepoint = db->nSavepoint - u.ar.iSavepoint - 1; + if( u.ar.p1==SAVEPOINT_ROLLBACK ){ + for(u.ar.ii=0; u.ar.iinDb; u.ar.ii++){ + sqlite3BtreeTripAllCursors(db->aDb[u.ar.ii].pBt, SQLITE_ABORT); + } + } + for(u.ar.ii=0; u.ar.iinDb; u.ar.ii++){ + rc = sqlite3BtreeSavepoint(db->aDb[u.ar.ii].pBt, u.ar.p1, u.ar.iSavepoint); + if( rc!=SQLITE_OK ){ + goto abort_due_to_error; + } + } + if( u.ar.p1==SAVEPOINT_ROLLBACK && (db->flags&SQLITE_InternChanges)!=0 ){ + sqlite3ExpirePreparedStatements(db); + sqlite3ResetAllSchemasOfConnection(db); + db->flags = (db->flags | SQLITE_InternChanges); + } } - if( !db->mallocFailed ){ - assert( pParse->apVarExpr!=0 ); - pParse->apVarExpr[pParse->nVarExpr++] = pExpr; + + /* Regardless of whether this is a RELEASE or ROLLBACK, destroy all + ** savepoints nested inside of the savepoint being operated on. */ + while( db->pSavepoint!=u.ar.pSavepoint ){ + u.ar.pTmp = db->pSavepoint; + db->pSavepoint = u.ar.pTmp->pNext; + sqlite3DbFree(db, u.ar.pTmp); + db->nSavepoint--; + } + + /* If it is a RELEASE, then destroy the savepoint being operated on + ** too. If it is a ROLLBACK TO, then set the number of deferred + ** constraint violations present in the database to the value stored + ** when the savepoint was created. */ + if( u.ar.p1==SAVEPOINT_RELEASE ){ + assert( u.ar.pSavepoint==db->pSavepoint ); + db->pSavepoint = u.ar.pSavepoint->pNext; + sqlite3DbFree(db, u.ar.pSavepoint); + if( !isTransaction ){ + db->nSavepoint--; + } + }else{ + db->nDeferredCons = u.ar.pSavepoint->nDeferredCons; + } + + if( !isTransaction ){ + rc = sqlite3VtabSavepoint(db, u.ar.p1, u.ar.iSavepoint); + if( rc!=SQLITE_OK ) goto abort_due_to_error; } } - } - if( !pParse->nErr && pParse->nVar>db->aLimit[SQLITE_LIMIT_VARIABLE_NUMBER] ){ - sqlite3ErrorMsg(pParse, "too many SQL variables"); } + + break; } -/* -** Clear an expression structure without deleting the structure itself. -** Substructure is deleted. +/* Opcode: AutoCommit P1 P2 * * * +** +** Set the database auto-commit flag to P1 (1 or 0). If P2 is true, roll +** back any currently active btree transactions. If there are any active +** VMs (apart from this one), then a ROLLBACK fails. A COMMIT fails if +** there are active writing VMs or active VMs that use shared cache. +** +** This instruction causes the VM to halt. */ -SQLITE_PRIVATE void sqlite3ExprClear(sqlite3 *db, Expr *p){ - assert( p!=0 ); - if( !ExprHasAnyProperty(p, EP_TokenOnly) ){ - sqlite3ExprDelete(db, p->pLeft); - sqlite3ExprDelete(db, p->pRight); - if( !ExprHasProperty(p, EP_Reduced) && (p->flags2 & EP2_MallocedToken)!=0 ){ - sqlite3DbFree(db, p->u.zToken); +case OP_AutoCommit: { +#if 0 /* local variables moved into u.as */ + int desiredAutoCommit; + int iRollback; + int turnOnAC; +#endif /* local variables moved into u.as */ + + u.as.desiredAutoCommit = pOp->p1; + u.as.iRollback = pOp->p2; + u.as.turnOnAC = u.as.desiredAutoCommit && !db->autoCommit; + assert( u.as.desiredAutoCommit==1 || u.as.desiredAutoCommit==0 ); + assert( u.as.desiredAutoCommit==1 || u.as.iRollback==0 ); + assert( db->activeVdbeCnt>0 ); /* At least this one VM is active */ + +#if 0 + if( u.as.turnOnAC && u.as.iRollback && db->activeVdbeCnt>1 ){ + /* If this instruction implements a ROLLBACK and other VMs are + ** still running, and a transaction is active, return an error indicating + ** that the other VMs must complete first. + */ + sqlite3SetString(&p->zErrMsg, db, "cannot rollback transaction - " + "SQL statements in progress"); + rc = SQLITE_BUSY; + }else +#endif + if( u.as.turnOnAC && !u.as.iRollback && db->writeVdbeCnt>0 ){ + /* If this instruction implements a COMMIT and other VMs are writing + ** return an error indicating that the other VMs must complete first. + */ + sqlite3SetString(&p->zErrMsg, db, "cannot commit transaction - " + "SQL statements in progress"); + rc = SQLITE_BUSY; + }else if( u.as.desiredAutoCommit!=db->autoCommit ){ + if( u.as.iRollback ){ + assert( u.as.desiredAutoCommit==1 ); + sqlite3RollbackAll(db, SQLITE_ABORT_ROLLBACK); + db->autoCommit = 1; + }else if( (rc = sqlite3VdbeCheckFk(p, 1))!=SQLITE_OK ){ + goto vdbe_return; + }else{ + db->autoCommit = (u8)u.as.desiredAutoCommit; + if( sqlite3VdbeHalt(p)==SQLITE_BUSY ){ + p->pc = pc; + db->autoCommit = (u8)(1-u.as.desiredAutoCommit); + p->rc = rc = SQLITE_BUSY; + goto vdbe_return; + } } - if( ExprHasProperty(p, EP_xIsSelect) ){ - sqlite3SelectDelete(db, p->x.pSelect); + assert( db->nStatement==0 ); + sqlite3CloseSavepoints(db); + if( p->rc==SQLITE_OK ){ + rc = SQLITE_DONE; }else{ - sqlite3ExprListDelete(db, p->x.pList); + rc = SQLITE_ERROR; } - } -} + goto vdbe_return; + }else{ + sqlite3SetString(&p->zErrMsg, db, + (!u.as.desiredAutoCommit)?"cannot start a transaction within a transaction":( + (u.as.iRollback)?"cannot rollback - no transaction is active": + "cannot commit - no transaction is active")); -/* -** Recursively delete an expression tree. -*/ -SQLITE_PRIVATE void sqlite3ExprDelete(sqlite3 *db, Expr *p){ - if( p==0 ) return; - sqlite3ExprClear(db, p); - if( !ExprHasProperty(p, EP_Static) ){ - sqlite3DbFree(db, p); + rc = SQLITE_ERROR; } + break; } -/* -** Return the number of bytes allocated for the expression structure -** passed as the first argument. This is always one of EXPR_FULLSIZE, -** EXPR_REDUCEDSIZE or EXPR_TOKENONLYSIZE. -*/ -static int exprStructSize(Expr *p){ - if( ExprHasProperty(p, EP_TokenOnly) ) return EXPR_TOKENONLYSIZE; - if( ExprHasProperty(p, EP_Reduced) ) return EXPR_REDUCEDSIZE; - return EXPR_FULLSIZE; -} - -/* -** The dupedExpr*Size() routines each return the number of bytes required -** to store a copy of an expression or expression tree. They differ in -** how much of the tree is measured. -** -** dupedExprStructSize() Size of only the Expr structure -** dupedExprNodeSize() Size of Expr + space for token -** dupedExprSize() Expr + token + subtree components +/* Opcode: Transaction P1 P2 * * * ** -*************************************************************************** +** Begin a transaction. The transaction ends when a Commit or Rollback +** opcode is encountered. Depending on the ON CONFLICT setting, the +** transaction might also be rolled back if an error is encountered. ** -** The dupedExprStructSize() function returns two values OR-ed together: -** (1) the space required for a copy of the Expr structure only and -** (2) the EP_xxx flags that indicate what the structure size should be. -** The return values is always one of: +** P1 is the index of the database file on which the transaction is +** started. Index 0 is the main database file and index 1 is the +** file used for temporary tables. Indices of 2 or more are used for +** attached databases. ** -** EXPR_FULLSIZE -** EXPR_REDUCEDSIZE | EP_Reduced -** EXPR_TOKENONLYSIZE | EP_TokenOnly +** If P2 is non-zero, then a write-transaction is started. A RESERVED lock is +** obtained on the database file when a write-transaction is started. No +** other process can start another write transaction while this transaction is +** underway. Starting a write transaction also creates a rollback journal. A +** write transaction must be started before any changes can be made to the +** database. If P2 is 2 or greater then an EXCLUSIVE lock is also obtained +** on the file. ** -** The size of the structure can be found by masking the return value -** of this routine with 0xfff. The flags can be found by masking the -** return value with EP_Reduced|EP_TokenOnly. +** If a write-transaction is started and the Vdbe.usesStmtJournal flag is +** true (this flag is set if the Vdbe may modify more than one row and may +** throw an ABORT exception), a statement transaction may also be opened. +** More specifically, a statement transaction is opened iff the database +** connection is currently not in autocommit mode, or if there are other +** active statements. A statement transaction allows the changes made by this +** VDBE to be rolled back after an error without having to roll back the +** entire transaction. If no error is encountered, the statement transaction +** will automatically commit when the VDBE halts. ** -** Note that with flags==EXPRDUP_REDUCE, this routines works on full-size -** (unreduced) Expr objects as they or originally constructed by the parser. -** During expression analysis, extra information is computed and moved into -** later parts of teh Expr object and that extra information might get chopped -** off if the expression is reduced. Note also that it does not work to -** make a EXPRDUP_REDUCE copy of a reduced expression. It is only legal -** to reduce a pristine expression tree from the parser. The implementation -** of dupedExprStructSize() contain multiple assert() statements that attempt -** to enforce this constraint. +** If P2 is zero, then a read-lock is obtained on the database file. */ -static int dupedExprStructSize(Expr *p, int flags){ - int nSize; - assert( flags==EXPRDUP_REDUCE || flags==0 ); /* Only one flag value allowed */ - if( 0==(flags&EXPRDUP_REDUCE) ){ - nSize = EXPR_FULLSIZE; - }else{ - assert( !ExprHasAnyProperty(p, EP_TokenOnly|EP_Reduced) ); - assert( !ExprHasProperty(p, EP_FromJoin) ); - assert( (p->flags2 & EP2_MallocedToken)==0 ); - assert( (p->flags2 & EP2_Irreducible)==0 ); - if( p->pLeft || p->pRight || p->pColl || p->x.pList ){ - nSize = EXPR_REDUCEDSIZE | EP_Reduced; - }else{ - nSize = EXPR_TOKENONLYSIZE | EP_TokenOnly; - } - } - return nSize; -} +case OP_Transaction: { +#if 0 /* local variables moved into u.at */ + Btree *pBt; +#endif /* local variables moved into u.at */ -/* -** This function returns the space in bytes required to store the copy -** of the Expr structure and a copy of the Expr.u.zToken string (if that -** string is defined.) -*/ -static int dupedExprNodeSize(Expr *p, int flags){ - int nByte = dupedExprStructSize(p, flags) & 0xfff; - if( !ExprHasProperty(p, EP_IntValue) && p->u.zToken ){ - nByte += sqlite3Strlen30(p->u.zToken)+1; - } - return ROUND8(nByte); -} + assert( pOp->p1>=0 && pOp->p1nDb ); + assert( (p->btreeMask & (((yDbMask)1)<p1))!=0 ); + u.at.pBt = db->aDb[pOp->p1].pBt; -/* -** Return the number of bytes required to create a duplicate of the -** expression passed as the first argument. The second argument is a -** mask containing EXPRDUP_XXX flags. -** -** The value returned includes space to create a copy of the Expr struct -** itself and the buffer referred to by Expr.u.zToken, if any. -** -** If the EXPRDUP_REDUCE flag is set, then the return value includes -** space to duplicate all Expr nodes in the tree formed by Expr.pLeft -** and Expr.pRight variables (but not for any structures pointed to or -** descended from the Expr.x.pList or Expr.x.pSelect variables). -*/ -static int dupedExprSize(Expr *p, int flags){ - int nByte = 0; - if( p ){ - nByte = dupedExprNodeSize(p, flags); - if( flags&EXPRDUP_REDUCE ){ - nByte += dupedExprSize(p->pLeft, flags) + dupedExprSize(p->pRight, flags); + if( u.at.pBt ){ + rc = sqlite3BtreeBeginTrans(u.at.pBt, pOp->p2); + if( rc==SQLITE_BUSY ){ + p->pc = pc; + p->rc = rc = SQLITE_BUSY; + goto vdbe_return; } - } - return nByte; -} - -/* -** This function is similar to sqlite3ExprDup(), except that if pzBuffer -** is not NULL then *pzBuffer is assumed to point to a buffer large enough -** to store the copy of expression p, the copies of p->u.zToken -** (if applicable), and the copies of the p->pLeft and p->pRight expressions, -** if any. Before returning, *pzBuffer is set to the first byte passed the -** portion of the buffer copied into by this function. -*/ -static Expr *exprDup(sqlite3 *db, Expr *p, int flags, u8 **pzBuffer){ - Expr *pNew = 0; /* Value to return */ - if( p ){ - const int isReduced = (flags&EXPRDUP_REDUCE); - u8 *zAlloc; - u32 staticFlag = 0; - - assert( pzBuffer==0 || isReduced ); - - /* Figure out where to write the new Expr structure. */ - if( pzBuffer ){ - zAlloc = *pzBuffer; - staticFlag = EP_Static; - }else{ - zAlloc = sqlite3DbMallocRaw(db, dupedExprSize(p, flags)); + if( rc!=SQLITE_OK ){ + goto abort_due_to_error; } - pNew = (Expr *)zAlloc; - - if( pNew ){ - /* Set nNewSize to the size allocated for the structure pointed to - ** by pNew. This is either EXPR_FULLSIZE, EXPR_REDUCEDSIZE or - ** EXPR_TOKENONLYSIZE. nToken is set to the number of bytes consumed - ** by the copy of the p->u.zToken string (if any). - */ - const unsigned nStructSize = dupedExprStructSize(p, flags); - const int nNewSize = nStructSize & 0xfff; - int nToken; - if( !ExprHasProperty(p, EP_IntValue) && p->u.zToken ){ - nToken = sqlite3Strlen30(p->u.zToken) + 1; - }else{ - nToken = 0; - } - if( isReduced ){ - assert( ExprHasProperty(p, EP_Reduced)==0 ); - memcpy(zAlloc, p, nNewSize); - }else{ - int nSize = exprStructSize(p); - memcpy(zAlloc, p, nSize); - memset(&zAlloc[nSize], 0, EXPR_FULLSIZE-nSize); - } - - /* Set the EP_Reduced, EP_TokenOnly, and EP_Static flags appropriately. */ - pNew->flags &= ~(EP_Reduced|EP_TokenOnly|EP_Static); - pNew->flags |= nStructSize & (EP_Reduced|EP_TokenOnly); - pNew->flags |= staticFlag; - - /* Copy the p->u.zToken string, if any. */ - if( nToken ){ - char *zToken = pNew->u.zToken = (char*)&zAlloc[nNewSize]; - memcpy(zToken, p->u.zToken, nToken); - } - if( 0==((p->flags|pNew->flags) & EP_TokenOnly) ){ - /* Fill in the pNew->x.pSelect or pNew->x.pList member. */ - if( ExprHasProperty(p, EP_xIsSelect) ){ - pNew->x.pSelect = sqlite3SelectDup(db, p->x.pSelect, isReduced); - }else{ - pNew->x.pList = sqlite3ExprListDup(db, p->x.pList, isReduced); - } + if( pOp->p2 && p->usesStmtJournal + && (db->autoCommit==0 || db->activeVdbeCnt>1) + ){ + assert( sqlite3BtreeIsInTrans(u.at.pBt) ); + if( p->iStatement==0 ){ + assert( db->nStatement>=0 && db->nSavepoint>=0 ); + db->nStatement++; + p->iStatement = db->nSavepoint + db->nStatement; } - /* Fill in pNew->pLeft and pNew->pRight. */ - if( ExprHasAnyProperty(pNew, EP_Reduced|EP_TokenOnly) ){ - zAlloc += dupedExprNodeSize(p, flags); - if( ExprHasProperty(pNew, EP_Reduced) ){ - pNew->pLeft = exprDup(db, p->pLeft, EXPRDUP_REDUCE, &zAlloc); - pNew->pRight = exprDup(db, p->pRight, EXPRDUP_REDUCE, &zAlloc); - } - if( pzBuffer ){ - *pzBuffer = zAlloc; - } - }else{ - pNew->flags2 = 0; - if( !ExprHasAnyProperty(p, EP_TokenOnly) ){ - pNew->pLeft = sqlite3ExprDup(db, p->pLeft, 0); - pNew->pRight = sqlite3ExprDup(db, p->pRight, 0); - } + rc = sqlite3VtabSavepoint(db, SAVEPOINT_BEGIN, p->iStatement-1); + if( rc==SQLITE_OK ){ + rc = sqlite3BtreeBeginStmt(u.at.pBt, p->iStatement); } + /* Store the current value of the database handles deferred constraint + ** counter. If the statement transaction needs to be rolled back, + ** the value of this counter needs to be restored too. */ + p->nStmtDefCons = db->nDeferredCons; } } - return pNew; + break; } -/* -** The following group of routines make deep copies of expressions, -** expression lists, ID lists, and select statements. The copies can -** be deleted (by being passed to their respective ...Delete() routines) -** without effecting the originals. -** -** The expression list, ID, and source lists return by sqlite3ExprListDup(), -** sqlite3IdListDup(), and sqlite3SrcListDup() can not be further expanded -** by subsequent calls to sqlite*ListAppend() routines. +/* Opcode: ReadCookie P1 P2 P3 * * ** -** Any tables that the SrcList might point to are not duplicated. +** Read cookie number P3 from database P1 and write it into register P2. +** P3==1 is the schema version. P3==2 is the database format. +** P3==3 is the recommended pager cache size, and so forth. P1==0 is +** the main database file and P1==1 is the database file used to store +** temporary tables. ** -** The flags parameter contains a combination of the EXPRDUP_XXX flags. -** If the EXPRDUP_REDUCE flag is set, then the structure returned is a -** truncated version of the usual Expr structure that will be stored as -** part of the in-memory representation of the database schema. +** There must be a read-lock on the database (either a transaction +** must be started or there must be an open cursor) before +** executing this instruction. */ -SQLITE_PRIVATE Expr *sqlite3ExprDup(sqlite3 *db, Expr *p, int flags){ - return exprDup(db, p, flags, 0); -} -SQLITE_PRIVATE ExprList *sqlite3ExprListDup(sqlite3 *db, ExprList *p, int flags){ - ExprList *pNew; - struct ExprList_item *pItem, *pOldItem; - int i; - if( p==0 ) return 0; - pNew = sqlite3DbMallocRaw(db, sizeof(*pNew) ); - if( pNew==0 ) return 0; - pNew->iECursor = 0; - pNew->nExpr = pNew->nAlloc = p->nExpr; - pNew->a = pItem = sqlite3DbMallocRaw(db, p->nExpr*sizeof(p->a[0]) ); - if( pItem==0 ){ - sqlite3DbFree(db, pNew); - return 0; - } - pOldItem = p->a; - for(i=0; inExpr; i++, pItem++, pOldItem++){ - Expr *pNewExpr; - Expr *pOldExpr = pOldItem->pExpr; - pItem->pExpr = pNewExpr = sqlite3ExprDup(db, pOldExpr, flags); - pItem->zName = sqlite3DbStrDup(db, pOldItem->zName); - pItem->zSpan = sqlite3DbStrDup(db, pOldItem->zSpan); - pItem->sortOrder = pOldItem->sortOrder; - pItem->done = 0; - pItem->iCol = pOldItem->iCol; - pItem->iAlias = pOldItem->iAlias; - } - return pNew; +case OP_ReadCookie: { /* out2-prerelease */ +#if 0 /* local variables moved into u.au */ + int iMeta; + int iDb; + int iCookie; +#endif /* local variables moved into u.au */ + + u.au.iDb = pOp->p1; + u.au.iCookie = pOp->p3; + assert( pOp->p3=0 && u.au.iDbnDb ); + assert( db->aDb[u.au.iDb].pBt!=0 ); + assert( (p->btreeMask & (((yDbMask)1)<aDb[u.au.iDb].pBt, u.au.iCookie, (u32 *)&u.au.iMeta); + pOut->u.i = u.au.iMeta; + break; } -/* -** If cursors, triggers, views and subqueries are all omitted from -** the build, then none of the following routines, except for -** sqlite3SelectDup(), can be called. sqlite3SelectDup() is sometimes -** called with a NULL argument. +/* Opcode: SetCookie P1 P2 P3 * * +** +** Write the content of register P3 (interpreted as an integer) +** into cookie number P2 of database P1. P2==1 is the schema version. +** P2==2 is the database format. P2==3 is the recommended pager cache +** size, and so forth. P1==0 is the main database file and P1==1 is the +** database file used to store temporary tables. +** +** A transaction must be started before executing this opcode. */ -#if !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_TRIGGER) \ - || !defined(SQLITE_OMIT_SUBQUERY) -SQLITE_PRIVATE SrcList *sqlite3SrcListDup(sqlite3 *db, SrcList *p, int flags){ - SrcList *pNew; - int i; - int nByte; - if( p==0 ) return 0; - nByte = sizeof(*p) + (p->nSrc>0 ? sizeof(p->a[0]) * (p->nSrc-1) : 0); - pNew = sqlite3DbMallocRaw(db, nByte ); - if( pNew==0 ) return 0; - pNew->nSrc = pNew->nAlloc = p->nSrc; - for(i=0; inSrc; i++){ - struct SrcList_item *pNewItem = &pNew->a[i]; - struct SrcList_item *pOldItem = &p->a[i]; - Table *pTab; - pNewItem->zDatabase = sqlite3DbStrDup(db, pOldItem->zDatabase); - pNewItem->zName = sqlite3DbStrDup(db, pOldItem->zName); - pNewItem->zAlias = sqlite3DbStrDup(db, pOldItem->zAlias); - pNewItem->jointype = pOldItem->jointype; - pNewItem->iCursor = pOldItem->iCursor; - pNewItem->isPopulated = pOldItem->isPopulated; - pNewItem->zIndex = sqlite3DbStrDup(db, pOldItem->zIndex); - pNewItem->notIndexed = pOldItem->notIndexed; - pNewItem->pIndex = pOldItem->pIndex; - pTab = pNewItem->pTab = pOldItem->pTab; - if( pTab ){ - pTab->nRef++; - } - pNewItem->pSelect = sqlite3SelectDup(db, pOldItem->pSelect, flags); - pNewItem->pOn = sqlite3ExprDup(db, pOldItem->pOn, flags); - pNewItem->pUsing = sqlite3IdListDup(db, pOldItem->pUsing); - pNewItem->colUsed = pOldItem->colUsed; +case OP_SetCookie: { /* in3 */ +#if 0 /* local variables moved into u.av */ + Db *pDb; +#endif /* local variables moved into u.av */ + assert( pOp->p2p1>=0 && pOp->p1nDb ); + assert( (p->btreeMask & (((yDbMask)1)<p1))!=0 ); + u.av.pDb = &db->aDb[pOp->p1]; + assert( u.av.pDb->pBt!=0 ); + assert( sqlite3SchemaMutexHeld(db, pOp->p1, 0) ); + pIn3 = &aMem[pOp->p3]; + sqlite3VdbeMemIntegerify(pIn3); + /* See note about index shifting on OP_ReadCookie */ + rc = sqlite3BtreeUpdateMeta(u.av.pDb->pBt, pOp->p2, (int)pIn3->u.i); + if( pOp->p2==BTREE_SCHEMA_VERSION ){ + /* When the schema cookie changes, record the new cookie internally */ + u.av.pDb->pSchema->schema_cookie = (int)pIn3->u.i; + db->flags |= SQLITE_InternChanges; + }else if( pOp->p2==BTREE_FILE_FORMAT ){ + /* Record changes in the file format */ + u.av.pDb->pSchema->file_format = (u8)pIn3->u.i; } - return pNew; + if( pOp->p1==1 ){ + /* Invalidate all prepared statements whenever the TEMP database + ** schema is changed. Ticket #1644 */ + sqlite3ExpirePreparedStatements(db); + p->expired = 0; + } + break; } -SQLITE_PRIVATE IdList *sqlite3IdListDup(sqlite3 *db, IdList *p){ - IdList *pNew; - int i; - if( p==0 ) return 0; - pNew = sqlite3DbMallocRaw(db, sizeof(*pNew) ); - if( pNew==0 ) return 0; - pNew->nId = pNew->nAlloc = p->nId; - pNew->a = sqlite3DbMallocRaw(db, p->nId*sizeof(p->a[0]) ); - if( pNew->a==0 ){ - sqlite3DbFree(db, pNew); - return 0; + +/* Opcode: VerifyCookie P1 P2 P3 * * +** +** Check the value of global database parameter number 0 (the +** schema version) and make sure it is equal to P2 and that the +** generation counter on the local schema parse equals P3. +** +** P1 is the database number which is 0 for the main database file +** and 1 for the file holding temporary tables and some higher number +** for auxiliary databases. +** +** The cookie changes its value whenever the database schema changes. +** This operation is used to detect when that the cookie has changed +** and that the current process needs to reread the schema. +** +** Either a transaction needs to have been started or an OP_Open needs +** to be executed (to establish a read lock) before this opcode is +** invoked. +*/ +case OP_VerifyCookie: { +#if 0 /* local variables moved into u.aw */ + int iMeta; + int iGen; + Btree *pBt; +#endif /* local variables moved into u.aw */ + + assert( pOp->p1>=0 && pOp->p1nDb ); + assert( (p->btreeMask & (((yDbMask)1)<p1))!=0 ); + assert( sqlite3SchemaMutexHeld(db, pOp->p1, 0) ); + u.aw.pBt = db->aDb[pOp->p1].pBt; + if( u.aw.pBt ){ + sqlite3BtreeGetMeta(u.aw.pBt, BTREE_SCHEMA_VERSION, (u32 *)&u.aw.iMeta); + u.aw.iGen = db->aDb[pOp->p1].pSchema->iGeneration; + }else{ + u.aw.iGen = u.aw.iMeta = 0; } - for(i=0; inId; i++){ - struct IdList_item *pNewItem = &pNew->a[i]; - struct IdList_item *pOldItem = &p->a[i]; - pNewItem->zName = sqlite3DbStrDup(db, pOldItem->zName); - pNewItem->idx = pOldItem->idx; + if( u.aw.iMeta!=pOp->p2 || u.aw.iGen!=pOp->p3 ){ + sqlite3DbFree(db, p->zErrMsg); + p->zErrMsg = sqlite3DbStrDup(db, "database schema has changed"); + /* If the schema-cookie from the database file matches the cookie + ** stored with the in-memory representation of the schema, do + ** not reload the schema from the database file. + ** + ** If virtual-tables are in use, this is not just an optimization. + ** Often, v-tables store their data in other SQLite tables, which + ** are queried from within xNext() and other v-table methods using + ** prepared queries. If such a query is out-of-date, we do not want to + ** discard the database schema, as the user code implementing the + ** v-table would have to be ready for the sqlite3_vtab structure itself + ** to be invalidated whenever sqlite3_step() is called from within + ** a v-table method. + */ + if( db->aDb[pOp->p1].pSchema->schema_cookie!=u.aw.iMeta ){ + sqlite3ResetOneSchema(db, pOp->p1); + } + + p->expired = 1; + rc = SQLITE_SCHEMA; } - return pNew; -} -SQLITE_PRIVATE Select *sqlite3SelectDup(sqlite3 *db, Select *p, int flags){ - Select *pNew; - if( p==0 ) return 0; - pNew = sqlite3DbMallocRaw(db, sizeof(*p) ); - if( pNew==0 ) return 0; - pNew->pEList = sqlite3ExprListDup(db, p->pEList, flags); - pNew->pSrc = sqlite3SrcListDup(db, p->pSrc, flags); - pNew->pWhere = sqlite3ExprDup(db, p->pWhere, flags); - pNew->pGroupBy = sqlite3ExprListDup(db, p->pGroupBy, flags); - pNew->pHaving = sqlite3ExprDup(db, p->pHaving, flags); - pNew->pOrderBy = sqlite3ExprListDup(db, p->pOrderBy, flags); - pNew->op = p->op; - pNew->pPrior = sqlite3SelectDup(db, p->pPrior, flags); - pNew->pLimit = sqlite3ExprDup(db, p->pLimit, flags); - pNew->pOffset = sqlite3ExprDup(db, p->pOffset, flags); - pNew->iLimit = 0; - pNew->iOffset = 0; - pNew->selFlags = p->selFlags & ~SF_UsesEphemeral; - pNew->pRightmost = 0; - pNew->addrOpenEphm[0] = -1; - pNew->addrOpenEphm[1] = -1; - pNew->addrOpenEphm[2] = -1; - return pNew; -} -#else -SQLITE_PRIVATE Select *sqlite3SelectDup(sqlite3 *db, Select *p, int flags){ - assert( p==0 ); - return 0; + break; } -#endif - -/* -** Add a new element to the end of an expression list. If pList is -** initially NULL, then create a new expression list. +/* Opcode: OpenRead P1 P2 P3 P4 P5 ** -** If a memory allocation error occurs, the entire list is freed and -** NULL is returned. If non-NULL is returned, then it is guaranteed -** that the new entry was successfully appended. +** Open a read-only cursor for the database table whose root page is +** P2 in a database file. The database file is determined by P3. +** P3==0 means the main database, P3==1 means the database used for +** temporary tables, and P3>1 means used the corresponding attached +** database. Give the new cursor an identifier of P1. The P1 +** values need not be contiguous but all P1 values should be small integers. +** It is an error for P1 to be negative. +** +** If P5!=0 then use the content of register P2 as the root page, not +** the value of P2 itself. +** +** There will be a read lock on the database whenever there is an +** open cursor. If the database was unlocked prior to this instruction +** then a read lock is acquired as part of this instruction. A read +** lock allows other processes to read the database but prohibits +** any other process from modifying the database. The read lock is +** released when all cursors are closed. If this instruction attempts +** to get a read lock but fails, the script terminates with an +** SQLITE_BUSY error code. +** +** The P4 value may be either an integer (P4_INT32) or a pointer to +** a KeyInfo structure (P4_KEYINFO). If it is a pointer to a KeyInfo +** structure, then said structure defines the content and collating +** sequence of the index being opened. Otherwise, if P4 is an integer +** value, it is set to the number of columns in the table. +** +** See also OpenWrite. */ -SQLITE_PRIVATE ExprList *sqlite3ExprListAppend( - Parse *pParse, /* Parsing context */ - ExprList *pList, /* List to which to append. Might be NULL */ - Expr *pExpr /* Expression to be appended. Might be NULL */ -){ - sqlite3 *db = pParse->db; - if( pList==0 ){ - pList = sqlite3DbMallocZero(db, sizeof(ExprList) ); - if( pList==0 ){ - goto no_mem; +/* Opcode: OpenWrite P1 P2 P3 P4 P5 +** +** Open a read/write cursor named P1 on the table or index whose root +** page is P2. Or if P5!=0 use the content of register P2 to find the +** root page. +** +** The P4 value may be either an integer (P4_INT32) or a pointer to +** a KeyInfo structure (P4_KEYINFO). If it is a pointer to a KeyInfo +** structure, then said structure defines the content and collating +** sequence of the index being opened. Otherwise, if P4 is an integer +** value, it is set to the number of columns in the table, or to the +** largest index of any column of the table that is actually used. +** +** This instruction works just like OpenRead except that it opens the cursor +** in read/write mode. For a given table, there can be one or more read-only +** cursors or a single read/write cursor but not both. +** +** See also OpenRead. +*/ +case OP_OpenRead: +case OP_OpenWrite: { +#if 0 /* local variables moved into u.ax */ + int nField; + KeyInfo *pKeyInfo; + int p2; + int iDb; + int wrFlag; + Btree *pX; + VdbeCursor *pCur; + Db *pDb; +#endif /* local variables moved into u.ax */ + + if( p->expired ){ + rc = SQLITE_ABORT; + break; + } + + u.ax.nField = 0; + u.ax.pKeyInfo = 0; + u.ax.p2 = pOp->p2; + u.ax.iDb = pOp->p3; + assert( u.ax.iDb>=0 && u.ax.iDbnDb ); + assert( (p->btreeMask & (((yDbMask)1)<aDb[u.ax.iDb]; + u.ax.pX = u.ax.pDb->pBt; + assert( u.ax.pX!=0 ); + if( pOp->opcode==OP_OpenWrite ){ + u.ax.wrFlag = 1; + assert( sqlite3SchemaMutexHeld(db, u.ax.iDb, 0) ); + if( u.ax.pDb->pSchema->file_format < p->minWriteFileFormat ){ + p->minWriteFileFormat = u.ax.pDb->pSchema->file_format; } - assert( pList->nAlloc==0 ); + }else{ + u.ax.wrFlag = 0; } - if( pList->nAlloc<=pList->nExpr ){ - struct ExprList_item *a; - int n = pList->nAlloc*2 + 4; - a = sqlite3DbRealloc(db, pList->a, n*sizeof(pList->a[0])); - if( a==0 ){ - goto no_mem; + if( pOp->p5 ){ + assert( u.ax.p2>0 ); + assert( u.ax.p2<=p->nMem ); + pIn2 = &aMem[u.ax.p2]; + assert( memIsValid(pIn2) ); + assert( (pIn2->flags & MEM_Int)!=0 ); + sqlite3VdbeMemIntegerify(pIn2); + u.ax.p2 = (int)pIn2->u.i; + /* The u.ax.p2 value always comes from a prior OP_CreateTable opcode and + ** that opcode will always set the u.ax.p2 value to 2 or more or else fail. + ** If there were a failure, the prepared statement would have halted + ** before reaching this instruction. */ + if( NEVER(u.ax.p2<2) ) { + rc = SQLITE_CORRUPT_BKPT; + goto abort_due_to_error; } - pList->a = a; - pList->nAlloc = sqlite3DbMallocSize(db, a)/sizeof(a[0]); } - assert( pList->a!=0 ); - if( 1 ){ - struct ExprList_item *pItem = &pList->a[pList->nExpr++]; - memset(pItem, 0, sizeof(*pItem)); - pItem->pExpr = pExpr; + if( pOp->p4type==P4_KEYINFO ){ + u.ax.pKeyInfo = pOp->p4.pKeyInfo; + u.ax.pKeyInfo->enc = ENC(p->db); + u.ax.nField = u.ax.pKeyInfo->nField+1; + }else if( pOp->p4type==P4_INT32 ){ + u.ax.nField = pOp->p4.i; } - return pList; + assert( pOp->p1>=0 ); + u.ax.pCur = allocateCursor(p, pOp->p1, u.ax.nField, u.ax.iDb, 1); + if( u.ax.pCur==0 ) goto no_mem; + u.ax.pCur->nullRow = 1; + u.ax.pCur->isOrdered = 1; + rc = sqlite3BtreeCursor(u.ax.pX, u.ax.p2, u.ax.wrFlag, u.ax.pKeyInfo, u.ax.pCur->pCursor); + u.ax.pCur->pKeyInfo = u.ax.pKeyInfo; -no_mem: - /* Avoid leaking memory if malloc has failed. */ - sqlite3ExprDelete(db, pExpr); - sqlite3ExprListDelete(db, pList); - return 0; + /* Since it performs no memory allocation or IO, the only value that + ** sqlite3BtreeCursor() may return is SQLITE_OK. */ + assert( rc==SQLITE_OK ); + + /* Set the VdbeCursor.isTable and isIndex variables. Previous versions of + ** SQLite used to check if the root-page flags were sane at this point + ** and report database corruption if they were not, but this check has + ** since moved into the btree layer. */ + u.ax.pCur->isTable = pOp->p4type!=P4_KEYINFO; + u.ax.pCur->isIndex = !u.ax.pCur->isTable; + break; } -/* -** Set the ExprList.a[].zName element of the most recently added item -** on the expression list. +/* Opcode: OpenEphemeral P1 P2 * P4 P5 ** -** pList might be NULL following an OOM error. But pName should never be -** NULL. If a memory allocation fails, the pParse->db->mallocFailed flag -** is set. +** Open a new cursor P1 to a transient table. +** The cursor is always opened read/write even if +** the main database is read-only. The ephemeral +** table is deleted automatically when the cursor is closed. +** +** P2 is the number of columns in the ephemeral table. +** The cursor points to a BTree table if P4==0 and to a BTree index +** if P4 is not 0. If P4 is not NULL, it points to a KeyInfo structure +** that defines the format of keys in the index. +** +** This opcode was once called OpenTemp. But that created +** confusion because the term "temp table", might refer either +** to a TEMP table at the SQL level, or to a table opened by +** this opcode. Then this opcode was call OpenVirtual. But +** that created confusion with the whole virtual-table idea. +** +** The P5 parameter can be a mask of the BTREE_* flags defined +** in btree.h. These flags control aspects of the operation of +** the btree. The BTREE_OMIT_JOURNAL and BTREE_SINGLE flags are +** added automatically. */ -SQLITE_PRIVATE void sqlite3ExprListSetName( - Parse *pParse, /* Parsing context */ - ExprList *pList, /* List to which to add the span. */ - Token *pName, /* Name to be added */ - int dequote /* True to cause the name to be dequoted */ -){ - assert( pList!=0 || pParse->db->mallocFailed!=0 ); - if( pList ){ - struct ExprList_item *pItem; - assert( pList->nExpr>0 ); - pItem = &pList->a[pList->nExpr-1]; - assert( pItem->zName==0 ); - pItem->zName = sqlite3DbStrNDup(pParse->db, pName->z, pName->n); - if( dequote && pItem->zName ) sqlite3Dequote(pItem->zName); +/* Opcode: OpenAutoindex P1 P2 * P4 * +** +** This opcode works the same as OP_OpenEphemeral. It has a +** different name to distinguish its use. Tables created using +** by this opcode will be used for automatically created transient +** indices in joins. +*/ +case OP_OpenAutoindex: +case OP_OpenEphemeral: { +#if 0 /* local variables moved into u.ay */ + VdbeCursor *pCx; +#endif /* local variables moved into u.ay */ + static const int vfsFlags = + SQLITE_OPEN_READWRITE | + SQLITE_OPEN_CREATE | + SQLITE_OPEN_EXCLUSIVE | + SQLITE_OPEN_DELETEONCLOSE | + SQLITE_OPEN_TRANSIENT_DB; + + assert( pOp->p1>=0 ); + u.ay.pCx = allocateCursor(p, pOp->p1, pOp->p2, -1, 1); + if( u.ay.pCx==0 ) goto no_mem; + u.ay.pCx->nullRow = 1; + rc = sqlite3BtreeOpen(db->pVfs, 0, db, &u.ay.pCx->pBt, + BTREE_OMIT_JOURNAL | BTREE_SINGLE | pOp->p5, vfsFlags); + if( rc==SQLITE_OK ){ + rc = sqlite3BtreeBeginTrans(u.ay.pCx->pBt, 1); + } + if( rc==SQLITE_OK ){ + /* If a transient index is required, create it by calling + ** sqlite3BtreeCreateTable() with the BTREE_BLOBKEY flag before + ** opening it. If a transient table is required, just use the + ** automatically created table with root-page 1 (an BLOB_INTKEY table). + */ + if( pOp->p4.pKeyInfo ){ + int pgno; + assert( pOp->p4type==P4_KEYINFO ); + rc = sqlite3BtreeCreateTable(u.ay.pCx->pBt, &pgno, BTREE_BLOBKEY | pOp->p5); + if( rc==SQLITE_OK ){ + assert( pgno==MASTER_ROOT+1 ); + rc = sqlite3BtreeCursor(u.ay.pCx->pBt, pgno, 1, + (KeyInfo*)pOp->p4.z, u.ay.pCx->pCursor); + u.ay.pCx->pKeyInfo = pOp->p4.pKeyInfo; + u.ay.pCx->pKeyInfo->enc = ENC(p->db); + } + u.ay.pCx->isTable = 0; + }else{ + rc = sqlite3BtreeCursor(u.ay.pCx->pBt, MASTER_ROOT, 1, 0, u.ay.pCx->pCursor); + u.ay.pCx->isTable = 1; + } } + u.ay.pCx->isOrdered = (pOp->p5!=BTREE_UNORDERED); + u.ay.pCx->isIndex = !u.ay.pCx->isTable; + break; } -/* -** Set the ExprList.a[].zSpan element of the most recently added item -** on the expression list. +/* Opcode: OpenSorter P1 P2 * P4 * ** -** pList might be NULL following an OOM error. But pSpan should never be -** NULL. If a memory allocation fails, the pParse->db->mallocFailed flag -** is set. +** This opcode works like OP_OpenEphemeral except that it opens +** a transient index that is specifically designed to sort large +** tables using an external merge-sort algorithm. */ -SQLITE_PRIVATE void sqlite3ExprListSetSpan( - Parse *pParse, /* Parsing context */ - ExprList *pList, /* List to which to add the span. */ - ExprSpan *pSpan /* The span to be added */ -){ - sqlite3 *db = pParse->db; - assert( pList!=0 || db->mallocFailed!=0 ); - if( pList ){ - struct ExprList_item *pItem = &pList->a[pList->nExpr-1]; - assert( pList->nExpr>0 ); - assert( db->mallocFailed || pItem->pExpr==pSpan->pExpr ); - sqlite3DbFree(db, pItem->zSpan); - pItem->zSpan = sqlite3DbStrNDup(db, (char*)pSpan->zStart, - (int)(pSpan->zEnd - pSpan->zStart)); - } +case OP_SorterOpen: { +#if 0 /* local variables moved into u.az */ + VdbeCursor *pCx; +#endif /* local variables moved into u.az */ +#ifndef SQLITE_OMIT_MERGE_SORT + u.az.pCx = allocateCursor(p, pOp->p1, pOp->p2, -1, 1); + if( u.az.pCx==0 ) goto no_mem; + u.az.pCx->pKeyInfo = pOp->p4.pKeyInfo; + u.az.pCx->pKeyInfo->enc = ENC(p->db); + u.az.pCx->isSorter = 1; + rc = sqlite3VdbeSorterInit(db, u.az.pCx); +#else + pOp->opcode = OP_OpenEphemeral; + pc--; +#endif + break; } -/* -** If the expression list pEList contains more than iLimit elements, -** leave an error message in pParse. +/* Opcode: OpenPseudo P1 P2 P3 * * +** +** Open a new cursor that points to a fake table that contains a single +** row of data. The content of that one row in the content of memory +** register P2. In other words, cursor P1 becomes an alias for the +** MEM_Blob content contained in register P2. +** +** A pseudo-table created by this opcode is used to hold a single +** row output from the sorter so that the row can be decomposed into +** individual columns using the OP_Column opcode. The OP_Column opcode +** is the only cursor opcode that works with a pseudo-table. +** +** P3 is the number of fields in the records that will be stored by +** the pseudo-table. */ -SQLITE_PRIVATE void sqlite3ExprListCheckLength( - Parse *pParse, - ExprList *pEList, - const char *zObject -){ - int mx = pParse->db->aLimit[SQLITE_LIMIT_COLUMN]; - testcase( pEList && pEList->nExpr==mx ); - testcase( pEList && pEList->nExpr==mx+1 ); - if( pEList && pEList->nExpr>mx ){ - sqlite3ErrorMsg(pParse, "too many columns in %s", zObject); - } +case OP_OpenPseudo: { +#if 0 /* local variables moved into u.ba */ + VdbeCursor *pCx; +#endif /* local variables moved into u.ba */ + + assert( pOp->p1>=0 ); + u.ba.pCx = allocateCursor(p, pOp->p1, pOp->p3, -1, 0); + if( u.ba.pCx==0 ) goto no_mem; + u.ba.pCx->nullRow = 1; + u.ba.pCx->pseudoTableReg = pOp->p2; + u.ba.pCx->isTable = 1; + u.ba.pCx->isIndex = 0; + break; } -/* -** Delete an entire expression list. +/* Opcode: Close P1 * * * * +** +** Close a cursor previously opened as P1. If P1 is not +** currently open, this instruction is a no-op. */ -SQLITE_PRIVATE void sqlite3ExprListDelete(sqlite3 *db, ExprList *pList){ - int i; - struct ExprList_item *pItem; - if( pList==0 ) return; - assert( pList->a!=0 || (pList->nExpr==0 && pList->nAlloc==0) ); - assert( pList->nExpr<=pList->nAlloc ); - for(pItem=pList->a, i=0; inExpr; i++, pItem++){ - sqlite3ExprDelete(db, pItem->pExpr); - sqlite3DbFree(db, pItem->zName); - sqlite3DbFree(db, pItem->zSpan); - } - sqlite3DbFree(db, pList->a); - sqlite3DbFree(db, pList); +case OP_Close: { + assert( pOp->p1>=0 && pOp->p1nCursor ); + sqlite3VdbeFreeCursor(p, p->apCsr[pOp->p1]); + p->apCsr[pOp->p1] = 0; + break; } -/* -** These routines are Walker callbacks. Walker.u.pi is a pointer -** to an integer. These routines are checking an expression to see -** if it is a constant. Set *Walker.u.pi to 0 if the expression is -** not constant. +/* Opcode: SeekGe P1 P2 P3 P4 * ** -** These callback routines are used to implement the following: +** If cursor P1 refers to an SQL table (B-Tree that uses integer keys), +** use the value in register P3 as the key. If cursor P1 refers +** to an SQL index, then P3 is the first in an array of P4 registers +** that are used as an unpacked index key. ** -** sqlite3ExprIsConstant() -** sqlite3ExprIsConstantNotJoin() -** sqlite3ExprIsConstantOrFunction() +** Reposition cursor P1 so that it points to the smallest entry that +** is greater than or equal to the key value. If there are no records +** greater than or equal to the key and P2 is not zero, then jump to P2. ** +** See also: Found, NotFound, Distinct, SeekLt, SeekGt, SeekLe */ -static int exprNodeIsConstant(Walker *pWalker, Expr *pExpr){ - - /* If pWalker->u.i is 3 then any term of the expression that comes from - ** the ON or USING clauses of a join disqualifies the expression - ** from being considered constant. */ - if( pWalker->u.i==3 && ExprHasAnyProperty(pExpr, EP_FromJoin) ){ - pWalker->u.i = 0; - return WRC_Abort; - } - - switch( pExpr->op ){ - /* Consider functions to be constant if all their arguments are constant - ** and pWalker->u.i==2 */ - case TK_FUNCTION: - if( pWalker->u.i==2 ) return 0; - /* Fall through */ - case TK_ID: - case TK_COLUMN: - case TK_AGG_FUNCTION: - case TK_AGG_COLUMN: - testcase( pExpr->op==TK_ID ); - testcase( pExpr->op==TK_COLUMN ); - testcase( pExpr->op==TK_AGG_FUNCTION ); - testcase( pExpr->op==TK_AGG_COLUMN ); - pWalker->u.i = 0; - return WRC_Abort; - default: - testcase( pExpr->op==TK_SELECT ); /* selectNodeIsConstant will disallow */ - testcase( pExpr->op==TK_EXISTS ); /* selectNodeIsConstant will disallow */ - return WRC_Continue; - } -} -static int selectNodeIsConstant(Walker *pWalker, Select *NotUsed){ - UNUSED_PARAMETER(NotUsed); - pWalker->u.i = 0; - return WRC_Abort; -} -static int exprIsConst(Expr *p, int initFlag){ - Walker w; - w.u.i = initFlag; - w.xExprCallback = exprNodeIsConstant; - w.xSelectCallback = selectNodeIsConstant; - sqlite3WalkExpr(&w, p); - return w.u.i; -} - -/* -** Walk an expression tree. Return 1 if the expression is constant -** and 0 if it involves variables or function calls. +/* Opcode: SeekGt P1 P2 P3 P4 * ** -** For the purposes of this function, a double-quoted string (ex: "abc") -** is considered a variable but a single-quoted string (ex: 'abc') is -** a constant. +** If cursor P1 refers to an SQL table (B-Tree that uses integer keys), +** use the value in register P3 as a key. If cursor P1 refers +** to an SQL index, then P3 is the first in an array of P4 registers +** that are used as an unpacked index key. +** +** Reposition cursor P1 so that it points to the smallest entry that +** is greater than the key value. If there are no records greater than +** the key and P2 is not zero, then jump to P2. +** +** See also: Found, NotFound, Distinct, SeekLt, SeekGe, SeekLe */ -SQLITE_PRIVATE int sqlite3ExprIsConstant(Expr *p){ - return exprIsConst(p, 1); -} - -/* -** Walk an expression tree. Return 1 if the expression is constant -** that does no originate from the ON or USING clauses of a join. -** Return 0 if it involves variables or function calls or terms from -** an ON or USING clause. +/* Opcode: SeekLt P1 P2 P3 P4 * +** +** If cursor P1 refers to an SQL table (B-Tree that uses integer keys), +** use the value in register P3 as a key. If cursor P1 refers +** to an SQL index, then P3 is the first in an array of P4 registers +** that are used as an unpacked index key. +** +** Reposition cursor P1 so that it points to the largest entry that +** is less than the key value. If there are no records less than +** the key and P2 is not zero, then jump to P2. +** +** See also: Found, NotFound, Distinct, SeekGt, SeekGe, SeekLe */ -SQLITE_PRIVATE int sqlite3ExprIsConstantNotJoin(Expr *p){ - return exprIsConst(p, 3); -} - -/* -** Walk an expression tree. Return 1 if the expression is constant -** or a function call with constant arguments. Return and 0 if there -** are any variables. +/* Opcode: SeekLe P1 P2 P3 P4 * ** -** For the purposes of this function, a double-quoted string (ex: "abc") -** is considered a variable but a single-quoted string (ex: 'abc') is -** a constant. +** If cursor P1 refers to an SQL table (B-Tree that uses integer keys), +** use the value in register P3 as a key. If cursor P1 refers +** to an SQL index, then P3 is the first in an array of P4 registers +** that are used as an unpacked index key. +** +** Reposition cursor P1 so that it points to the largest entry that +** is less than or equal to the key value. If there are no records +** less than or equal to the key and P2 is not zero, then jump to P2. +** +** See also: Found, NotFound, Distinct, SeekGt, SeekGe, SeekLt */ -SQLITE_PRIVATE int sqlite3ExprIsConstantOrFunction(Expr *p){ - return exprIsConst(p, 2); -} +case OP_SeekLt: /* jump, in3 */ +case OP_SeekLe: /* jump, in3 */ +case OP_SeekGe: /* jump, in3 */ +case OP_SeekGt: { /* jump, in3 */ +#if 0 /* local variables moved into u.bb */ + int res; + int oc; + VdbeCursor *pC; + UnpackedRecord r; + int nField; + i64 iKey; /* The rowid we are to seek to */ +#endif /* local variables moved into u.bb */ -/* -** If the expression p codes a constant integer that is small enough -** to fit in a 32-bit integer, return 1 and put the value of the integer -** in *pValue. If the expression is not an integer or if it is too big -** to fit in a signed 32-bit integer, return 0 and leave *pValue unchanged. -*/ -SQLITE_PRIVATE int sqlite3ExprIsInteger(Expr *p, int *pValue){ - int rc = 0; - if( p->flags & EP_IntValue ){ - *pValue = p->u.iValue; - return 1; - } - switch( p->op ){ - case TK_INTEGER: { - rc = sqlite3GetInt32(p->u.zToken, pValue); - assert( rc==0 ); - break; - } - case TK_UPLUS: { - rc = sqlite3ExprIsInteger(p->pLeft, pValue); - break; + assert( pOp->p1>=0 && pOp->p1nCursor ); + assert( pOp->p2!=0 ); + u.bb.pC = p->apCsr[pOp->p1]; + assert( u.bb.pC!=0 ); + assert( u.bb.pC->pseudoTableReg==0 ); + assert( OP_SeekLe == OP_SeekLt+1 ); + assert( OP_SeekGe == OP_SeekLt+2 ); + assert( OP_SeekGt == OP_SeekLt+3 ); + assert( u.bb.pC->isOrdered ); + if( ALWAYS(u.bb.pC->pCursor!=0) ){ + u.bb.oc = pOp->opcode; + u.bb.pC->nullRow = 0; + if( u.bb.pC->isTable ){ + /* The input value in P3 might be of any type: integer, real, string, + ** blob, or NULL. But it needs to be an integer before we can do + ** the seek, so covert it. */ + pIn3 = &aMem[pOp->p3]; + applyNumericAffinity(pIn3); + u.bb.iKey = sqlite3VdbeIntValue(pIn3); + u.bb.pC->rowidIsValid = 0; + + /* If the P3 value could not be converted into an integer without + ** loss of information, then special processing is required... */ + if( (pIn3->flags & MEM_Int)==0 ){ + if( (pIn3->flags & MEM_Real)==0 ){ + /* If the P3 value cannot be converted into any kind of a number, + ** then the seek is not possible, so jump to P2 */ + pc = pOp->p2 - 1; + break; + } + /* If we reach this point, then the P3 value must be a floating + ** point number. */ + assert( (pIn3->flags & MEM_Real)!=0 ); + + if( u.bb.iKey==SMALLEST_INT64 && (pIn3->r<(double)u.bb.iKey || pIn3->r>0) ){ + /* The P3 value is too large in magnitude to be expressed as an + ** integer. */ + u.bb.res = 1; + if( pIn3->r<0 ){ + if( u.bb.oc>=OP_SeekGe ){ assert( u.bb.oc==OP_SeekGe || u.bb.oc==OP_SeekGt ); + rc = sqlite3BtreeFirst(u.bb.pC->pCursor, &u.bb.res); + if( rc!=SQLITE_OK ) goto abort_due_to_error; + } + }else{ + if( u.bb.oc<=OP_SeekLe ){ assert( u.bb.oc==OP_SeekLt || u.bb.oc==OP_SeekLe ); + rc = sqlite3BtreeLast(u.bb.pC->pCursor, &u.bb.res); + if( rc!=SQLITE_OK ) goto abort_due_to_error; + } + } + if( u.bb.res ){ + pc = pOp->p2 - 1; + } + break; + }else if( u.bb.oc==OP_SeekLt || u.bb.oc==OP_SeekGe ){ + /* Use the ceiling() function to convert real->int */ + if( pIn3->r > (double)u.bb.iKey ) u.bb.iKey++; + }else{ + /* Use the floor() function to convert real->int */ + assert( u.bb.oc==OP_SeekLe || u.bb.oc==OP_SeekGt ); + if( pIn3->r < (double)u.bb.iKey ) u.bb.iKey--; + } + } + rc = sqlite3BtreeMovetoUnpacked(u.bb.pC->pCursor, 0, (u64)u.bb.iKey, 0, &u.bb.res); + if( rc!=SQLITE_OK ){ + goto abort_due_to_error; + } + if( u.bb.res==0 ){ + u.bb.pC->rowidIsValid = 1; + u.bb.pC->lastRowid = u.bb.iKey; + } + }else{ + u.bb.nField = pOp->p4.i; + assert( pOp->p4type==P4_INT32 ); + assert( u.bb.nField>0 ); + u.bb.r.pKeyInfo = u.bb.pC->pKeyInfo; + u.bb.r.nField = (u16)u.bb.nField; + + /* The next line of code computes as follows, only faster: + ** if( u.bb.oc==OP_SeekGt || u.bb.oc==OP_SeekLe ){ + ** u.bb.r.flags = UNPACKED_INCRKEY; + ** }else{ + ** u.bb.r.flags = 0; + ** } + */ + u.bb.r.flags = (u16)(UNPACKED_INCRKEY * (1 & (u.bb.oc - OP_SeekLt))); + assert( u.bb.oc!=OP_SeekGt || u.bb.r.flags==UNPACKED_INCRKEY ); + assert( u.bb.oc!=OP_SeekLe || u.bb.r.flags==UNPACKED_INCRKEY ); + assert( u.bb.oc!=OP_SeekGe || u.bb.r.flags==0 ); + assert( u.bb.oc!=OP_SeekLt || u.bb.r.flags==0 ); + + u.bb.r.aMem = &aMem[pOp->p3]; +#ifdef SQLITE_DEBUG + { int i; for(i=0; ipCursor, &u.bb.r, 0, 0, &u.bb.res); + if( rc!=SQLITE_OK ){ + goto abort_due_to_error; + } + u.bb.pC->rowidIsValid = 0; } - case TK_UMINUS: { - int v; - if( sqlite3ExprIsInteger(p->pLeft, &v) ){ - *pValue = -v; - rc = 1; + u.bb.pC->deferredMoveto = 0; + u.bb.pC->cacheStatus = CACHE_STALE; +#ifdef SQLITE_TEST + sqlite3_search_count++; +#endif + if( u.bb.oc>=OP_SeekGe ){ assert( u.bb.oc==OP_SeekGe || u.bb.oc==OP_SeekGt ); + if( u.bb.res<0 || (u.bb.res==0 && u.bb.oc==OP_SeekGt) ){ + rc = sqlite3BtreeNext(u.bb.pC->pCursor, &u.bb.res); + if( rc!=SQLITE_OK ) goto abort_due_to_error; + u.bb.pC->rowidIsValid = 0; + }else{ + u.bb.res = 0; + } + }else{ + assert( u.bb.oc==OP_SeekLt || u.bb.oc==OP_SeekLe ); + if( u.bb.res>0 || (u.bb.res==0 && u.bb.oc==OP_SeekLt) ){ + rc = sqlite3BtreePrevious(u.bb.pC->pCursor, &u.bb.res); + if( rc!=SQLITE_OK ) goto abort_due_to_error; + u.bb.pC->rowidIsValid = 0; + }else{ + /* u.bb.res might be negative because the table is empty. Check to + ** see if this is the case. + */ + u.bb.res = sqlite3BtreeEof(u.bb.pC->pCursor); } - break; } - default: break; - } - if( rc ){ - assert( ExprHasAnyProperty(p, EP_Reduced|EP_TokenOnly) - || (p->flags2 & EP2_MallocedToken)==0 ); - p->op = TK_INTEGER; - p->flags |= EP_IntValue; - p->u.iValue = *pValue; + assert( pOp->p2>0 ); + if( u.bb.res ){ + pc = pOp->p2 - 1; + } + }else{ + /* This happens when attempting to open the sqlite3_master table + ** for read access returns SQLITE_EMPTY. In this case always + ** take the jump (since there are no records in the table). + */ + pc = pOp->p2 - 1; } - return rc; -} - -/* -** Return TRUE if the given string is a row-id column name. -*/ -SQLITE_PRIVATE int sqlite3IsRowid(const char *z){ - if( sqlite3StrICmp(z, "_ROWID_")==0 ) return 1; - if( sqlite3StrICmp(z, "ROWID")==0 ) return 1; - if( sqlite3StrICmp(z, "OID")==0 ) return 1; - return 0; + break; } -/* -** Return true if we are able to the IN operator optimization on a -** query of the form -** -** x IN (SELECT ...) +/* Opcode: Seek P1 P2 * * * ** -** Where the SELECT... clause is as specified by the parameter to this -** routine. +** P1 is an open table cursor and P2 is a rowid integer. Arrange +** for P1 to move so that it points to the rowid given by P2. ** -** The Select object passed in has already been preprocessed and no -** errors have been found. +** This is actually a deferred seek. Nothing actually happens until +** the cursor is used to read a record. That way, if no reads +** occur, no unnecessary I/O happens. */ -#ifndef SQLITE_OMIT_SUBQUERY -static int isCandidateForInOpt(Select *p){ - SrcList *pSrc; - ExprList *pEList; - Table *pTab; - if( p==0 ) return 0; /* right-hand side of IN is SELECT */ - if( p->pPrior ) return 0; /* Not a compound SELECT */ - if( p->selFlags & (SF_Distinct|SF_Aggregate) ){ - testcase( (p->selFlags & (SF_Distinct|SF_Aggregate))==SF_Distinct ); - testcase( (p->selFlags & (SF_Distinct|SF_Aggregate))==SF_Aggregate ); - return 0; /* No DISTINCT keyword and no aggregate functions */ +case OP_Seek: { /* in2 */ +#if 0 /* local variables moved into u.bc */ + VdbeCursor *pC; +#endif /* local variables moved into u.bc */ + + assert( pOp->p1>=0 && pOp->p1nCursor ); + u.bc.pC = p->apCsr[pOp->p1]; + assert( u.bc.pC!=0 ); + if( ALWAYS(u.bc.pC->pCursor!=0) ){ + assert( u.bc.pC->isTable ); + u.bc.pC->nullRow = 0; + pIn2 = &aMem[pOp->p2]; + u.bc.pC->movetoTarget = sqlite3VdbeIntValue(pIn2); + u.bc.pC->rowidIsValid = 0; + u.bc.pC->deferredMoveto = 1; } - assert( p->pGroupBy==0 ); /* Has no GROUP BY clause */ - if( p->pLimit ) return 0; /* Has no LIMIT clause */ - assert( p->pOffset==0 ); /* No LIMIT means no OFFSET */ - if( p->pWhere ) return 0; /* Has no WHERE clause */ - pSrc = p->pSrc; - assert( pSrc!=0 ); - if( pSrc->nSrc!=1 ) return 0; /* Single term in FROM clause */ - if( pSrc->a[0].pSelect ) return 0; /* FROM is not a subquery or view */ - pTab = pSrc->a[0].pTab; - if( NEVER(pTab==0) ) return 0; - assert( pTab->pSelect==0 ); /* FROM clause is not a view */ - if( IsVirtual(pTab) ) return 0; /* FROM clause not a virtual table */ - pEList = p->pEList; - if( pEList->nExpr!=1 ) return 0; /* One column in the result set */ - if( pEList->a[0].pExpr->op!=TK_COLUMN ) return 0; /* Result is a column */ - return 1; + break; } -#endif /* SQLITE_OMIT_SUBQUERY */ + -/* -** This function is used by the implementation of the IN (...) operator. -** It's job is to find or create a b-tree structure that may be used -** either to test for membership of the (...) set or to iterate through -** its members, skipping duplicates. -** -** The index of the cursor opened on the b-tree (database table, database index -** or ephermal table) is stored in pX->iTable before this function returns. -** The returned value of this function indicates the b-tree type, as follows: +/* Opcode: Found P1 P2 P3 P4 * ** -** IN_INDEX_ROWID - The cursor was opened on a database table. -** IN_INDEX_INDEX - The cursor was opened on a database index. -** IN_INDEX_EPH - The cursor was opened on a specially created and -** populated epheremal table. +** If P4==0 then register P3 holds a blob constructed by MakeRecord. If +** P4>0 then register P3 is the first of P4 registers that form an unpacked +** record. ** -** An existing b-tree may only be used if the SELECT is of the simple -** form: +** Cursor P1 is on an index btree. If the record identified by P3 and P4 +** is a prefix of any entry in P1 then a jump is made to P2 and +** P1 is left pointing at the matching entry. +*/ +/* Opcode: NotFound P1 P2 P3 P4 * ** -** SELECT FROM +** If P4==0 then register P3 holds a blob constructed by MakeRecord. If +** P4>0 then register P3 is the first of P4 registers that form an unpacked +** record. +** +** Cursor P1 is on an index btree. If the record identified by P3 and P4 +** is not the prefix of any entry in P1 then a jump is made to P2. If P1 +** does contain an entry whose prefix matches the P3/P4 record then control +** falls through to the next instruction and P1 is left pointing at the +** matching entry. ** -** If the prNotFound parameter is 0, then the b-tree will be used to iterate -** through the set members, skipping any duplicates. In this case an -** epheremal table must be used unless the selected is guaranteed -** to be unique - either because it is an INTEGER PRIMARY KEY or it -** has a UNIQUE constraint or UNIQUE index. +** See also: Found, NotExists, IsUnique +*/ +case OP_NotFound: /* jump, in3 */ +case OP_Found: { /* jump, in3 */ +#if 0 /* local variables moved into u.bd */ + int alreadyExists; + VdbeCursor *pC; + int res; + char *pFree; + UnpackedRecord *pIdxKey; + UnpackedRecord r; + char aTempRec[ROUND8(sizeof(UnpackedRecord)) + sizeof(Mem)*3 + 7]; +#endif /* local variables moved into u.bd */ + +#ifdef SQLITE_TEST + sqlite3_found_count++; +#endif + + u.bd.alreadyExists = 0; + assert( pOp->p1>=0 && pOp->p1nCursor ); + assert( pOp->p4type==P4_INT32 ); + u.bd.pC = p->apCsr[pOp->p1]; + assert( u.bd.pC!=0 ); + pIn3 = &aMem[pOp->p3]; + if( ALWAYS(u.bd.pC->pCursor!=0) ){ + + assert( u.bd.pC->isTable==0 ); + if( pOp->p4.i>0 ){ + u.bd.r.pKeyInfo = u.bd.pC->pKeyInfo; + u.bd.r.nField = (u16)pOp->p4.i; + u.bd.r.aMem = pIn3; +#ifdef SQLITE_DEBUG + { int i; for(i=0; ipKeyInfo, u.bd.aTempRec, sizeof(u.bd.aTempRec), &u.bd.pFree + ); + if( u.bd.pIdxKey==0 ) goto no_mem; + assert( pIn3->flags & MEM_Blob ); + assert( (pIn3->flags & MEM_Zero)==0 ); /* zeroblobs already expanded */ + sqlite3VdbeRecordUnpack(u.bd.pC->pKeyInfo, pIn3->n, pIn3->z, u.bd.pIdxKey); + u.bd.pIdxKey->flags |= UNPACKED_PREFIX_MATCH; + } + rc = sqlite3BtreeMovetoUnpacked(u.bd.pC->pCursor, u.bd.pIdxKey, 0, 0, &u.bd.res); + if( pOp->p4.i==0 ){ + sqlite3DbFree(db, u.bd.pFree); + } + if( rc!=SQLITE_OK ){ + break; + } + u.bd.alreadyExists = (u.bd.res==0); + u.bd.pC->deferredMoveto = 0; + u.bd.pC->cacheStatus = CACHE_STALE; + } + if( pOp->opcode==OP_Found ){ + if( u.bd.alreadyExists ) pc = pOp->p2 - 1; + }else{ + if( !u.bd.alreadyExists ) pc = pOp->p2 - 1; + } + break; +} + +/* Opcode: IsUnique P1 P2 P3 P4 * ** -** If the prNotFound parameter is not 0, then the b-tree will be used -** for fast set membership tests. In this case an epheremal table must -** be used unless is an INTEGER PRIMARY KEY or an index can -** be found with as its left-most column. +** Cursor P1 is open on an index b-tree - that is to say, a btree which +** no data and where the key are records generated by OP_MakeRecord with +** the list field being the integer ROWID of the entry that the index +** entry refers to. ** -** When the b-tree is being used for membership tests, the calling function -** needs to know whether or not the structure contains an SQL NULL -** value in order to correctly evaluate expressions like "X IN (Y, Z)". -** If there is a chance that the b-tree might contain a NULL value at -** runtime, then a register is allocated and the register number written -** to *prNotFound. If there is no chance that the b-tree contains a -** NULL value, then *prNotFound is left unchanged. +** The P3 register contains an integer record number. Call this record +** number R. Register P4 is the first in a set of N contiguous registers +** that make up an unpacked index key that can be used with cursor P1. +** The value of N can be inferred from the cursor. N includes the rowid +** value appended to the end of the index record. This rowid value may +** or may not be the same as R. ** -** If a register is allocated and its location stored in *prNotFound, then -** its initial value is NULL. If the b-tree does not remain constant -** for the duration of the query (i.e. the SELECT that generates the b-tree -** is a correlated subquery) then the value of the allocated register is -** reset to NULL each time the b-tree is repopulated. This allows the -** caller to use vdbe code equivalent to the following: +** If any of the N registers beginning with register P4 contains a NULL +** value, jump immediately to P2. ** -** if( register==NULL ){ -** has_null = -** register = 1 -** } +** Otherwise, this instruction checks if cursor P1 contains an entry +** where the first (N-1) fields match but the rowid value at the end +** of the index entry is not R. If there is no such entry, control jumps +** to instruction P2. Otherwise, the rowid of the conflicting index +** entry is copied to register P3 and control falls through to the next +** instruction. ** -** in order to avoid running the -** test more often than is necessary. +** See also: NotFound, NotExists, Found */ -#ifndef SQLITE_OMIT_SUBQUERY -SQLITE_PRIVATE int sqlite3FindInIndex(Parse *pParse, Expr *pX, int *prNotFound){ - Select *p; /* SELECT to the right of IN operator */ - int eType = 0; /* Type of RHS table. IN_INDEX_* */ - int iTab = pParse->nTab++; /* Cursor of the RHS table */ - int mustBeUnique = (prNotFound==0); /* True if RHS must be unique */ - - /* Check to see if an existing table or index can be used to - ** satisfy the query. This is preferable to generating a new - ** ephemeral table. - */ - p = (ExprHasProperty(pX, EP_xIsSelect) ? pX->x.pSelect : 0); - if( ALWAYS(pParse->nErr==0) && isCandidateForInOpt(p) ){ - sqlite3 *db = pParse->db; /* Database connection */ - Expr *pExpr = p->pEList->a[0].pExpr; /* Expression */ - int iCol = pExpr->iColumn; /* Index of column */ - Vdbe *v = sqlite3GetVdbe(pParse); /* Virtual machine being coded */ - Table *pTab = p->pSrc->a[0].pTab; /* Table
    . */ - int iDb; /* Database idx for pTab */ - - /* Code an OP_VerifyCookie and OP_TableLock for
    . */ - iDb = sqlite3SchemaToIndex(db, pTab->pSchema); - sqlite3CodeVerifySchema(pParse, iDb); - sqlite3TableLock(pParse, iDb, pTab->tnum, 0, pTab->zName); - - /* This function is only called from two places. In both cases the vdbe - ** has already been allocated. So assume sqlite3GetVdbe() is always - ** successful here. - */ - assert(v); - if( iCol<0 ){ - int iMem = ++pParse->nMem; - int iAddr; - sqlite3VdbeUsesBtree(v, iDb); - - iAddr = sqlite3VdbeAddOp1(v, OP_If, iMem); - sqlite3VdbeAddOp2(v, OP_Integer, 1, iMem); - - sqlite3OpenTable(pParse, iTab, iDb, pTab, OP_OpenRead); - eType = IN_INDEX_ROWID; +case OP_IsUnique: { /* jump, in3 */ +#if 0 /* local variables moved into u.be */ + u16 ii; + VdbeCursor *pCx; + BtCursor *pCrsr; + u16 nField; + Mem *aMx; + UnpackedRecord r; /* B-Tree index search key */ + i64 R; /* Rowid stored in register P3 */ +#endif /* local variables moved into u.be */ - sqlite3VdbeJumpHere(v, iAddr); - }else{ - Index *pIdx; /* Iterator variable */ + pIn3 = &aMem[pOp->p3]; + u.be.aMx = &aMem[pOp->p4.i]; + /* Assert that the values of parameters P1 and P4 are in range. */ + assert( pOp->p4type==P4_INT32 ); + assert( pOp->p4.i>0 && pOp->p4.i<=p->nMem ); + assert( pOp->p1>=0 && pOp->p1nCursor ); - /* The collation sequence used by the comparison. If an index is to - ** be used in place of a temp-table, it must be ordered according - ** to this collation sequence. */ - CollSeq *pReq = sqlite3BinaryCompareCollSeq(pParse, pX->pLeft, pExpr); + /* Find the index cursor. */ + u.be.pCx = p->apCsr[pOp->p1]; + assert( u.be.pCx->deferredMoveto==0 ); + u.be.pCx->seekResult = 0; + u.be.pCx->cacheStatus = CACHE_STALE; + u.be.pCrsr = u.be.pCx->pCursor; - /* Check that the affinity that will be used to perform the - ** comparison is the same as the affinity of the column. If - ** it is not, it is not possible to use any index. - */ - char aff = comparisonAffinity(pX); - int affinity_ok = (pTab->aCol[iCol].affinity==aff||aff==SQLITE_AFF_NONE); + /* If any of the values are NULL, take the jump. */ + u.be.nField = u.be.pCx->pKeyInfo->nField; + for(u.be.ii=0; u.be.iip2 - 1; + u.be.pCrsr = 0; + break; + } + } + assert( (u.be.aMx[u.be.nField].flags & MEM_Null)==0 ); - for(pIdx=pTab->pIndex; pIdx && eType==0 && affinity_ok; pIdx=pIdx->pNext){ - if( (pIdx->aiColumn[0]==iCol) - && sqlite3FindCollSeq(db, ENC(db), pIdx->azColl[0], 0)==pReq - && (!mustBeUnique || (pIdx->nColumn==1 && pIdx->onError!=OE_None)) - ){ - int iMem = ++pParse->nMem; - int iAddr; - char *pKey; - - pKey = (char *)sqlite3IndexKeyinfo(pParse, pIdx); - iDb = sqlite3SchemaToIndex(db, pIdx->pSchema); - sqlite3VdbeUsesBtree(v, iDb); + if( u.be.pCrsr!=0 ){ + /* Populate the index search key. */ + u.be.r.pKeyInfo = u.be.pCx->pKeyInfo; + u.be.r.nField = u.be.nField + 1; + u.be.r.flags = UNPACKED_PREFIX_SEARCH; + u.be.r.aMem = u.be.aMx; +#ifdef SQLITE_DEBUG + { int i; for(i=0; itnum, iDb, - pKey,P4_KEYINFO_HANDOFF); - VdbeComment((v, "%s", pIdx->zName)); - eType = IN_INDEX_INDEX; + /* Extract the value of u.be.R from register P3. */ + sqlite3VdbeMemIntegerify(pIn3); + u.be.R = pIn3->u.i; - sqlite3VdbeJumpHere(v, iAddr); - if( prNotFound && !pTab->aCol[iCol].notNull ){ - *prNotFound = ++pParse->nMem; - } - } - } + /* Search the B-Tree index. If no conflicting record is found, jump + ** to P2. Otherwise, copy the rowid of the conflicting record to + ** register P3 and fall through to the next instruction. */ + rc = sqlite3BtreeMovetoUnpacked(u.be.pCrsr, &u.be.r, 0, 0, &u.be.pCx->seekResult); + if( (u.be.r.flags & UNPACKED_PREFIX_SEARCH) || u.be.r.rowid==u.be.R ){ + pc = pOp->p2 - 1; + }else{ + pIn3->u.i = u.be.r.rowid; } } + break; +} - if( eType==0 ){ - /* Could not found an existing able or index to use as the RHS b-tree. - ** We will have to generate an ephemeral table to do the job. - */ - int rMayHaveNull = 0; - eType = IN_INDEX_EPH; - if( prNotFound ){ - *prNotFound = rMayHaveNull = ++pParse->nMem; - }else if( pX->pLeft->iColumn<0 && !ExprHasAnyProperty(pX, EP_xIsSelect) ){ - eType = IN_INDEX_ROWID; +/* Opcode: NotExists P1 P2 P3 * * +** +** Use the content of register P3 as an integer key. If a record +** with that key does not exist in table of P1, then jump to P2. +** If the record does exist, then fall through. The cursor is left +** pointing to the record if it exists. +** +** The difference between this operation and NotFound is that this +** operation assumes the key is an integer and that P1 is a table whereas +** NotFound assumes key is a blob constructed from MakeRecord and +** P1 is an index. +** +** See also: Found, NotFound, IsUnique +*/ +case OP_NotExists: { /* jump, in3 */ +#if 0 /* local variables moved into u.bf */ + VdbeCursor *pC; + BtCursor *pCrsr; + int res; + u64 iKey; +#endif /* local variables moved into u.bf */ + + pIn3 = &aMem[pOp->p3]; + assert( pIn3->flags & MEM_Int ); + assert( pOp->p1>=0 && pOp->p1nCursor ); + u.bf.pC = p->apCsr[pOp->p1]; + assert( u.bf.pC!=0 ); + assert( u.bf.pC->isTable ); + assert( u.bf.pC->pseudoTableReg==0 ); + u.bf.pCrsr = u.bf.pC->pCursor; + if( ALWAYS(u.bf.pCrsr!=0) ){ + u.bf.res = 0; + u.bf.iKey = pIn3->u.i; + rc = sqlite3BtreeMovetoUnpacked(u.bf.pCrsr, 0, u.bf.iKey, 0, &u.bf.res); + u.bf.pC->lastRowid = pIn3->u.i; + u.bf.pC->rowidIsValid = u.bf.res==0 ?1:0; + u.bf.pC->nullRow = 0; + u.bf.pC->cacheStatus = CACHE_STALE; + u.bf.pC->deferredMoveto = 0; + if( u.bf.res!=0 ){ + pc = pOp->p2 - 1; + assert( u.bf.pC->rowidIsValid==0 ); } - sqlite3CodeSubselect(pParse, pX, rMayHaveNull, eType==IN_INDEX_ROWID); + u.bf.pC->seekResult = u.bf.res; }else{ - pX->iTable = iTab; + /* This happens when an attempt to open a read cursor on the + ** sqlite_master table returns SQLITE_EMPTY. + */ + pc = pOp->p2 - 1; + assert( u.bf.pC->rowidIsValid==0 ); + u.bf.pC->seekResult = 0; } - return eType; + break; } -#endif -/* -** Generate code for scalar subqueries used as an expression -** and IN operators. Examples: -** -** (SELECT a FROM b) -- subquery -** EXISTS (SELECT a FROM b) -- EXISTS subquery -** x IN (4,5,11) -- IN operator with list on right-hand side -** x IN (SELECT a FROM b) -- IN operator with subquery on the right -** -** The pExpr parameter describes the expression that contains the IN -** operator or subquery. -** -** If parameter isRowid is non-zero, then expression pExpr is guaranteed -** to be of the form " IN (?, ?, ?)", where is a reference -** to some integer key column of a table B-Tree. In this case, use an -** intkey B-Tree to store the set of IN(...) values instead of the usual -** (slower) variable length keys B-Tree. -** -** If rMayHaveNull is non-zero, that means that the operation is an IN -** (not a SELECT or EXISTS) and that the RHS might contains NULLs. -** Furthermore, the IN is in a WHERE clause and that we really want -** to iterate over the RHS of the IN operator in order to quickly locate -** all corresponding LHS elements. All this routine does is initialize -** the register given by rMayHaveNull to NULL. Calling routines will take -** care of changing this register value to non-NULL if the RHS is NULL-free. +/* Opcode: Sequence P1 P2 * * * ** -** If rMayHaveNull is zero, that means that the subquery is being used -** for membership testing only. There is no need to initialize any -** registers to indicate the presense or absence of NULLs on the RHS. +** Find the next available sequence number for cursor P1. +** Write the sequence number into register P2. +** The sequence number on the cursor is incremented after this +** instruction. */ -#ifndef SQLITE_OMIT_SUBQUERY -SQLITE_PRIVATE void sqlite3CodeSubselect( - Parse *pParse, /* Parsing context */ - Expr *pExpr, /* The IN, SELECT, or EXISTS operator */ - int rMayHaveNull, /* Register that records whether NULLs exist in RHS */ - int isRowid /* If true, LHS of IN operator is a rowid */ -){ - int testAddr = 0; /* One-time test address */ - Vdbe *v = sqlite3GetVdbe(pParse); - if( NEVER(v==0) ) return; - sqlite3ExprCachePush(pParse); - - /* This code must be run in its entirety every time it is encountered - ** if any of the following is true: - ** - ** * The right-hand side is a correlated subquery - ** * The right-hand side is an expression list containing variables - ** * We are inside a trigger - ** - ** If all of the above are false, then we can run this code just once - ** save the results, and reuse the same result on subsequent invocations. - */ - if( !ExprHasAnyProperty(pExpr, EP_VarSelect) && !pParse->trigStack ){ - int mem = ++pParse->nMem; - sqlite3VdbeAddOp1(v, OP_If, mem); - testAddr = sqlite3VdbeAddOp2(v, OP_Integer, 1, mem); - assert( testAddr>0 || pParse->db->mallocFailed ); - } - - switch( pExpr->op ){ - case TK_IN: { - char affinity; - KeyInfo keyInfo; - int addr; /* Address of OP_OpenEphemeral instruction */ - Expr *pLeft = pExpr->pLeft; - - if( rMayHaveNull ){ - sqlite3VdbeAddOp2(v, OP_Null, 0, rMayHaveNull); - } +case OP_Sequence: { /* out2-prerelease */ + assert( pOp->p1>=0 && pOp->p1nCursor ); + assert( p->apCsr[pOp->p1]!=0 ); + pOut->u.i = p->apCsr[pOp->p1]->seqCount++; + break; +} - affinity = sqlite3ExprAffinity(pLeft); - /* Whether this is an 'x IN(SELECT...)' or an 'x IN()' - ** expression it is handled the same way. A virtual table is - ** filled with single-field index keys representing the results - ** from the SELECT or the . - ** - ** If the 'x' expression is a column value, or the SELECT... - ** statement returns a column value, then the affinity of that - ** column is used to build the index keys. If both 'x' and the - ** SELECT... statement are columns, then numeric affinity is used - ** if either column has NUMERIC or INTEGER affinity. If neither - ** 'x' nor the SELECT... statement are columns, then numeric affinity - ** is used. - */ - pExpr->iTable = pParse->nTab++; - addr = sqlite3VdbeAddOp2(v, OP_OpenEphemeral, pExpr->iTable, !isRowid); - memset(&keyInfo, 0, sizeof(keyInfo)); - keyInfo.nField = 1; +/* Opcode: NewRowid P1 P2 P3 * * +** +** Get a new integer record number (a.k.a "rowid") used as the key to a table. +** The record number is not previously used as a key in the database +** table that cursor P1 points to. The new record number is written +** written to register P2. +** +** If P3>0 then P3 is a register in the root frame of this VDBE that holds +** the largest previously generated record number. No new record numbers are +** allowed to be less than this value. When this value reaches its maximum, +** an SQLITE_FULL error is generated. The P3 register is updated with the ' +** generated record number. This P3 mechanism is used to help implement the +** AUTOINCREMENT feature. +*/ +case OP_NewRowid: { /* out2-prerelease */ +#if 0 /* local variables moved into u.bg */ + i64 v; /* The new rowid */ + VdbeCursor *pC; /* Cursor of table to get the new rowid */ + int res; /* Result of an sqlite3BtreeLast() */ + int cnt; /* Counter to limit the number of searches */ + Mem *pMem; /* Register holding largest rowid for AUTOINCREMENT */ + VdbeFrame *pFrame; /* Root frame of VDBE */ +#endif /* local variables moved into u.bg */ - if( ExprHasProperty(pExpr, EP_xIsSelect) ){ - /* Case 1: expr IN (SELECT ...) - ** - ** Generate code to write the results of the select into the temporary - ** table allocated and opened above. - */ - SelectDest dest; - ExprList *pEList; + u.bg.v = 0; + u.bg.res = 0; + assert( pOp->p1>=0 && pOp->p1nCursor ); + u.bg.pC = p->apCsr[pOp->p1]; + assert( u.bg.pC!=0 ); + if( NEVER(u.bg.pC->pCursor==0) ){ + /* The zero initialization above is all that is needed */ + }else{ + /* The next rowid or record number (different terms for the same + ** thing) is obtained in a two-step algorithm. + ** + ** First we attempt to find the largest existing rowid and add one + ** to that. But if the largest existing rowid is already the maximum + ** positive integer, we have to fall through to the second + ** probabilistic algorithm + ** + ** The second algorithm is to select a rowid at random and see if + ** it already exists in the table. If it does not exist, we have + ** succeeded. If the random rowid does exist, we select a new one + ** and try again, up to 100 times. + */ + assert( u.bg.pC->isTable ); - assert( !isRowid ); - sqlite3SelectDestInit(&dest, SRT_Set, pExpr->iTable); - dest.affinity = (u8)affinity; - assert( (pExpr->iTable&0x0000FFFF)==pExpr->iTable ); - if( sqlite3Select(pParse, pExpr->x.pSelect, &dest) ){ - return; - } - pEList = pExpr->x.pSelect->pEList; - if( ALWAYS(pEList!=0 && pEList->nExpr>0) ){ - keyInfo.aColl[0] = sqlite3BinaryCompareCollSeq(pParse, pExpr->pLeft, - pEList->a[0].pExpr); - } - }else if( pExpr->x.pList!=0 ){ - /* Case 2: expr IN (exprlist) - ** - ** For each expression, build an index key from the evaluation and - ** store it in the temporary table. If is a column, then use - ** that columns affinity when building index keys. If is not - ** a column, use numeric affinity. - */ - int i; - ExprList *pList = pExpr->x.pList; - struct ExprList_item *pItem; - int r1, r2, r3; +#ifdef SQLITE_32BIT_ROWID +# define MAX_ROWID 0x7fffffff +#else + /* Some compilers complain about constants of the form 0x7fffffffffffffff. + ** Others complain about 0x7ffffffffffffffffLL. The following macro seems + ** to provide the constant while making all compilers happy. + */ +# define MAX_ROWID (i64)( (((u64)0x7fffffff)<<32) | (u64)0xffffffff ) +#endif - if( !affinity ){ - affinity = SQLITE_AFF_NONE; + if( !u.bg.pC->useRandomRowid ){ + u.bg.v = sqlite3BtreeGetCachedRowid(u.bg.pC->pCursor); + if( u.bg.v==0 ){ + rc = sqlite3BtreeLast(u.bg.pC->pCursor, &u.bg.res); + if( rc!=SQLITE_OK ){ + goto abort_due_to_error; } - keyInfo.aColl[0] = sqlite3ExprCollSeq(pParse, pExpr->pLeft); - - /* Loop through each expression in . */ - r1 = sqlite3GetTempReg(pParse); - r2 = sqlite3GetTempReg(pParse); - sqlite3VdbeAddOp2(v, OP_Null, 0, r2); - for(i=pList->nExpr, pItem=pList->a; i>0; i--, pItem++){ - Expr *pE2 = pItem->pExpr; - - /* If the expression is not constant then we will need to - ** disable the test that was generated above that makes sure - ** this code only executes once. Because for a non-constant - ** expression we need to rerun this code each time. - */ - if( testAddr && !sqlite3ExprIsConstant(pE2) ){ - sqlite3VdbeChangeToNoop(v, testAddr-1, 2); - testAddr = 0; - } - - /* Evaluate the expression and insert it into the temp table */ - r3 = sqlite3ExprCodeTarget(pParse, pE2, r1); - if( isRowid ){ - sqlite3VdbeAddOp2(v, OP_MustBeInt, r3, sqlite3VdbeCurrentAddr(v)+2); - sqlite3VdbeAddOp3(v, OP_Insert, pExpr->iTable, r2, r3); + if( u.bg.res ){ + u.bg.v = 1; /* IMP: R-61914-48074 */ + }else{ + assert( sqlite3BtreeCursorIsValid(u.bg.pC->pCursor) ); + rc = sqlite3BtreeKeySize(u.bg.pC->pCursor, &u.bg.v); + assert( rc==SQLITE_OK ); /* Cannot fail following BtreeLast() */ + if( u.bg.v>=MAX_ROWID ){ + u.bg.pC->useRandomRowid = 1; }else{ - sqlite3VdbeAddOp4(v, OP_MakeRecord, r3, 1, r2, &affinity, 1); - sqlite3ExprCacheAffinityChange(pParse, r3, 1); - sqlite3VdbeAddOp2(v, OP_IdxInsert, pExpr->iTable, r2); + u.bg.v++; /* IMP: R-29538-34987 */ } } - sqlite3ReleaseTempReg(pParse, r1); - sqlite3ReleaseTempReg(pParse, r2); - } - if( !isRowid ){ - sqlite3VdbeChangeP4(v, addr, (void *)&keyInfo, P4_KEYINFO); } - break; - } - case TK_EXISTS: - case TK_SELECT: - default: { - /* If this has to be a scalar SELECT. Generate code to put the - ** value of this select in a memory cell and record the number - ** of the memory cell in iColumn. If this is an EXISTS, write - ** an integer 0 (not exists) or 1 (exists) into a memory cell - ** and record that memory cell in iColumn. - */ - static const Token one = { "1", 1 }; /* Token for literal value 1 */ - Select *pSel; /* SELECT statement to encode */ - SelectDest dest; /* How to deal with SELECt result */ +#ifndef SQLITE_OMIT_AUTOINCREMENT + if( pOp->p3 ){ + /* Assert that P3 is a valid memory cell. */ + assert( pOp->p3>0 ); + if( p->pFrame ){ + for(u.bg.pFrame=p->pFrame; u.bg.pFrame->pParent; u.bg.pFrame=u.bg.pFrame->pParent); + /* Assert that P3 is a valid memory cell. */ + assert( pOp->p3<=u.bg.pFrame->nMem ); + u.bg.pMem = &u.bg.pFrame->aMem[pOp->p3]; + }else{ + /* Assert that P3 is a valid memory cell. */ + assert( pOp->p3<=p->nMem ); + u.bg.pMem = &aMem[pOp->p3]; + memAboutToChange(p, u.bg.pMem); + } + assert( memIsValid(u.bg.pMem) ); - testcase( pExpr->op==TK_EXISTS ); - testcase( pExpr->op==TK_SELECT ); - assert( pExpr->op==TK_EXISTS || pExpr->op==TK_SELECT ); + REGISTER_TRACE(pOp->p3, u.bg.pMem); + sqlite3VdbeMemIntegerify(u.bg.pMem); + assert( (u.bg.pMem->flags & MEM_Int)!=0 ); /* mem(P3) holds an integer */ + if( u.bg.pMem->u.i==MAX_ROWID || u.bg.pC->useRandomRowid ){ + rc = SQLITE_FULL; /* IMP: R-12275-61338 */ + goto abort_due_to_error; + } + if( u.bg.vu.i+1 ){ + u.bg.v = u.bg.pMem->u.i + 1; + } + u.bg.pMem->u.i = u.bg.v; + } +#endif - assert( ExprHasProperty(pExpr, EP_xIsSelect) ); - pSel = pExpr->x.pSelect; - sqlite3SelectDestInit(&dest, 0, ++pParse->nMem); - if( pExpr->op==TK_SELECT ){ - dest.eDest = SRT_Mem; - sqlite3VdbeAddOp2(v, OP_Null, 0, dest.iParm); - VdbeComment((v, "Init subquery result")); - }else{ - dest.eDest = SRT_Exists; - sqlite3VdbeAddOp2(v, OP_Integer, 0, dest.iParm); - VdbeComment((v, "Init EXISTS result")); + sqlite3BtreeSetCachedRowid(u.bg.pC->pCursor, u.bg.vuseRandomRowid ){ + /* IMPLEMENTATION-OF: R-07677-41881 If the largest ROWID is equal to the + ** largest possible integer (9223372036854775807) then the database + ** engine starts picking positive candidate ROWIDs at random until + ** it finds one that is not previously used. */ + assert( pOp->p3==0 ); /* We cannot be in random rowid mode if this is + ** an AUTOINCREMENT table. */ + /* on the first attempt, simply do one more than previous */ + u.bg.v = lastRowid; + u.bg.v &= (MAX_ROWID>>1); /* ensure doesn't go negative */ + u.bg.v++; /* ensure non-zero */ + u.bg.cnt = 0; + while( ((rc = sqlite3BtreeMovetoUnpacked(u.bg.pC->pCursor, 0, (u64)u.bg.v, + 0, &u.bg.res))==SQLITE_OK) + && (u.bg.res==0) + && (++u.bg.cnt<100)){ + /* collision - try another random rowid */ + sqlite3_randomness(sizeof(u.bg.v), &u.bg.v); + if( u.bg.cnt<5 ){ + /* try "small" random rowids for the initial attempts */ + u.bg.v &= 0xffffff; + }else{ + u.bg.v &= (MAX_ROWID>>1); /* ensure doesn't go negative */ + } + u.bg.v++; /* ensure non-zero */ } - sqlite3ExprDelete(pParse->db, pSel->pLimit); - pSel->pLimit = sqlite3PExpr(pParse, TK_INTEGER, 0, 0, &one); - if( sqlite3Select(pParse, pSel, &dest) ){ - return; + if( rc==SQLITE_OK && u.bg.res==0 ){ + rc = SQLITE_FULL; /* IMP: R-38219-53002 */ + goto abort_due_to_error; } - pExpr->iColumn = (i16)dest.iParm; - ExprSetIrreducible(pExpr); - break; + assert( u.bg.v>0 ); /* EV: R-40812-03570 */ } + u.bg.pC->rowidIsValid = 0; + u.bg.pC->deferredMoveto = 0; + u.bg.pC->cacheStatus = CACHE_STALE; } - - if( testAddr ){ - sqlite3VdbeJumpHere(v, testAddr-1); - } - sqlite3ExprCachePop(pParse, 1); - - return; + pOut->u.i = u.bg.v; + break; } -#endif /* SQLITE_OMIT_SUBQUERY */ -/* -** Duplicate an 8-byte value +/* Opcode: Insert P1 P2 P3 P4 P5 +** +** Write an entry into the table of cursor P1. A new entry is +** created if it doesn't already exist or the data for an existing +** entry is overwritten. The data is the value MEM_Blob stored in register +** number P2. The key is stored in register P3. The key must +** be a MEM_Int. +** +** If the OPFLAG_NCHANGE flag of P5 is set, then the row change count is +** incremented (otherwise not). If the OPFLAG_LASTROWID flag of P5 is set, +** then rowid is stored for subsequent return by the +** sqlite3_last_insert_rowid() function (otherwise it is unmodified). +** +** If the OPFLAG_USESEEKRESULT flag of P5 is set and if the result of +** the last seek operation (OP_NotExists) was a success, then this +** operation will not attempt to find the appropriate row before doing +** the insert but will instead overwrite the row that the cursor is +** currently pointing to. Presumably, the prior OP_NotExists opcode +** has already positioned the cursor correctly. This is an optimization +** that boosts performance by avoiding redundant seeks. +** +** If the OPFLAG_ISUPDATE flag is set, then this opcode is part of an +** UPDATE operation. Otherwise (if the flag is clear) then this opcode +** is part of an INSERT operation. The difference is only important to +** the update hook. +** +** Parameter P4 may point to a string containing the table-name, or +** may be NULL. If it is not NULL, then the update-hook +** (sqlite3.xUpdateCallback) is invoked following a successful insert. +** +** (WARNING/TODO: If P1 is a pseudo-cursor and P2 is dynamically +** allocated, then ownership of P2 is transferred to the pseudo-cursor +** and register P2 becomes ephemeral. If the cursor is changed, the +** value of register P2 will then change. Make sure this does not +** cause any problems.) +** +** This instruction only works on tables. The equivalent instruction +** for indices is OP_IdxInsert. */ -static char *dup8bytes(Vdbe *v, const char *in){ - char *out = sqlite3DbMallocRaw(sqlite3VdbeDb(v), 8); - if( out ){ - memcpy(out, in, 8); - } - return out; -} - -/* -** Generate an instruction that will put the floating point -** value described by z[0..n-1] into register iMem. +/* Opcode: InsertInt P1 P2 P3 P4 P5 ** -** The z[] string will probably not be zero-terminated. But the -** z[n] character is guaranteed to be something that does not look -** like the continuation of the number. +** This works exactly like OP_Insert except that the key is the +** integer value P3, not the value of the integer stored in register P3. */ -static void codeReal(Vdbe *v, const char *z, int negateFlag, int iMem){ - if( ALWAYS(z!=0) ){ - double value; - char *zV; - sqlite3AtoF(z, &value); - if( sqlite3IsNaN(value) ){ - sqlite3VdbeAddOp2(v, OP_Null, 0, iMem); - }else{ - if( negateFlag ) value = -value; - zV = dup8bytes(v, (char*)&value); - sqlite3VdbeAddOp4(v, OP_Real, 0, iMem, 0, zV, P4_REAL); - } - } -} +case OP_Insert: +case OP_InsertInt: { +#if 0 /* local variables moved into u.bh */ + Mem *pData; /* MEM cell holding data for the record to be inserted */ + Mem *pKey; /* MEM cell holding key for the record */ + i64 iKey; /* The integer ROWID or key for the record to be inserted */ + VdbeCursor *pC; /* Cursor to table into which insert is written */ + int nZero; /* Number of zero-bytes to append */ + int seekResult; /* Result of prior seek or 0 if no USESEEKRESULT flag */ + const char *zDb; /* database name - used by the update hook */ + const char *zTbl; /* Table name - used by the opdate hook */ + int op; /* Opcode for update hook: SQLITE_UPDATE or SQLITE_INSERT */ +#endif /* local variables moved into u.bh */ + u.bh.pData = &aMem[pOp->p2]; + assert( pOp->p1>=0 && pOp->p1nCursor ); + assert( memIsValid(u.bh.pData) ); + u.bh.pC = p->apCsr[pOp->p1]; + assert( u.bh.pC!=0 ); + assert( u.bh.pC->pCursor!=0 ); + assert( u.bh.pC->pseudoTableReg==0 ); + assert( u.bh.pC->isTable ); + REGISTER_TRACE(pOp->p2, u.bh.pData); + + if( pOp->opcode==OP_Insert ){ + u.bh.pKey = &aMem[pOp->p3]; + assert( u.bh.pKey->flags & MEM_Int ); + assert( memIsValid(u.bh.pKey) ); + REGISTER_TRACE(pOp->p3, u.bh.pKey); + u.bh.iKey = u.bh.pKey->u.i; + }else{ + assert( pOp->opcode==OP_InsertInt ); + u.bh.iKey = pOp->p3; + } -/* -** Generate an instruction that will put the integer describe by -** text z[0..n-1] into register iMem. -** -** The z[] string will probably not be zero-terminated. But the -** z[n] character is guaranteed to be something that does not look -** like the continuation of the number. -*/ -static void codeInteger(Vdbe *v, Expr *pExpr, int negFlag, int iMem){ - if( pExpr->flags & EP_IntValue ){ - int i = pExpr->u.iValue; - if( negFlag ) i = -i; - sqlite3VdbeAddOp2(v, OP_Integer, i, iMem); + if( pOp->p5 & OPFLAG_NCHANGE ) p->nChange++; + if( pOp->p5 & OPFLAG_LASTROWID ) db->lastRowid = lastRowid = u.bh.iKey; + if( u.bh.pData->flags & MEM_Null ){ + u.bh.pData->z = 0; + u.bh.pData->n = 0; }else{ - const char *z = pExpr->u.zToken; - assert( z!=0 ); - if( sqlite3FitsIn64Bits(z, negFlag) ){ - i64 value; - char *zV; - sqlite3Atoi64(z, &value); - if( negFlag ) value = -value; - zV = dup8bytes(v, (char*)&value); - sqlite3VdbeAddOp4(v, OP_Int64, 0, iMem, 0, zV, P4_INT64); - }else{ - codeReal(v, z, negFlag, iMem); - } + assert( u.bh.pData->flags & (MEM_Blob|MEM_Str) ); } -} + u.bh.seekResult = ((pOp->p5 & OPFLAG_USESEEKRESULT) ? u.bh.pC->seekResult : 0); + if( u.bh.pData->flags & MEM_Zero ){ + u.bh.nZero = u.bh.pData->u.nZero; + }else{ + u.bh.nZero = 0; + } + sqlite3BtreeSetCachedRowid(u.bh.pC->pCursor, 0); + rc = sqlite3BtreeInsert(u.bh.pC->pCursor, 0, u.bh.iKey, + u.bh.pData->z, u.bh.pData->n, u.bh.nZero, + pOp->p5 & OPFLAG_APPEND, u.bh.seekResult + ); + u.bh.pC->rowidIsValid = 0; + u.bh.pC->deferredMoveto = 0; + u.bh.pC->cacheStatus = CACHE_STALE; -/* -** Clear a cache entry. -*/ -static void cacheEntryClear(Parse *pParse, struct yColCache *p){ - if( p->tempReg ){ - if( pParse->nTempRegaTempReg) ){ - pParse->aTempReg[pParse->nTempReg++] = p->iReg; - } - p->tempReg = 0; + /* Invoke the update-hook if required. */ + if( rc==SQLITE_OK && db->xUpdateCallback && pOp->p4.z ){ + u.bh.zDb = db->aDb[u.bh.pC->iDb].zName; + u.bh.zTbl = pOp->p4.z; + u.bh.op = ((pOp->p5 & OPFLAG_ISUPDATE) ? SQLITE_UPDATE : SQLITE_INSERT); + assert( u.bh.pC->isTable ); + db->xUpdateCallback(db->pUpdateArg, u.bh.op, u.bh.zDb, u.bh.zTbl, u.bh.iKey); + assert( u.bh.pC->iDb>=0 ); } + break; } - -/* -** Record in the column cache that a particular column from a -** particular table is stored in a particular register. +/* Opcode: Delete P1 P2 * P4 * +** +** Delete the record at which the P1 cursor is currently pointing. +** +** The cursor will be left pointing at either the next or the previous +** record in the table. If it is left pointing at the next record, then +** the next Next instruction will be a no-op. Hence it is OK to delete +** a record from within an Next loop. +** +** If the OPFLAG_NCHANGE flag of P2 is set, then the row change count is +** incremented (otherwise not). +** +** P1 must not be pseudo-table. It has to be a real table with +** multiple rows. +** +** If P4 is not NULL, then it is the name of the table that P1 is +** pointing to. The update hook will be invoked, if it exists. +** If P4 is not NULL then the P1 cursor must have been positioned +** using OP_NotFound prior to invoking this opcode. */ -SQLITE_PRIVATE void sqlite3ExprCacheStore(Parse *pParse, int iTab, int iCol, int iReg){ - int i; - int minLru; - int idxLru; - struct yColCache *p; +case OP_Delete: { +#if 0 /* local variables moved into u.bi */ + i64 iKey; + VdbeCursor *pC; +#endif /* local variables moved into u.bi */ - assert( iReg>0 ); /* Register numbers are always positive */ - assert( iCol>=-1 && iCol<32768 ); /* Finite column numbers */ + u.bi.iKey = 0; + assert( pOp->p1>=0 && pOp->p1nCursor ); + u.bi.pC = p->apCsr[pOp->p1]; + assert( u.bi.pC!=0 ); + assert( u.bi.pC->pCursor!=0 ); /* Only valid for real tables, no pseudotables */ - /* First replace any existing entry */ - for(i=0, p=pParse->aColCache; iiReg && p->iTable==iTab && p->iColumn==iCol ){ - cacheEntryClear(pParse, p); - p->iLevel = pParse->iCacheLevel; - p->iReg = iReg; - p->affChange = 0; - p->lru = pParse->iCacheCnt++; - return; - } + /* If the update-hook will be invoked, set u.bi.iKey to the rowid of the + ** row being deleted. + */ + if( db->xUpdateCallback && pOp->p4.z ){ + assert( u.bi.pC->isTable ); + assert( u.bi.pC->rowidIsValid ); /* lastRowid set by previous OP_NotFound */ + u.bi.iKey = u.bi.pC->lastRowid; } - /* Find an empty slot and replace it */ - for(i=0, p=pParse->aColCache; iiReg==0 ){ - p->iLevel = pParse->iCacheLevel; - p->iTable = iTab; - p->iColumn = iCol; - p->iReg = iReg; - p->affChange = 0; - p->tempReg = 0; - p->lru = pParse->iCacheCnt++; - return; - } - } + /* The OP_Delete opcode always follows an OP_NotExists or OP_Last or + ** OP_Column on the same table without any intervening operations that + ** might move or invalidate the cursor. Hence cursor u.bi.pC is always pointing + ** to the row to be deleted and the sqlite3VdbeCursorMoveto() operation + ** below is always a no-op and cannot fail. We will run it anyhow, though, + ** to guard against future changes to the code generator. + **/ + assert( u.bi.pC->deferredMoveto==0 ); + rc = sqlite3VdbeCursorMoveto(u.bi.pC); + if( NEVER(rc!=SQLITE_OK) ) goto abort_due_to_error; - /* Replace the last recently used */ - minLru = 0x7fffffff; - idxLru = -1; - for(i=0, p=pParse->aColCache; ilrulru; - } - } - if( ALWAYS(idxLru>=0) ){ - p = &pParse->aColCache[idxLru]; - p->iLevel = pParse->iCacheLevel; - p->iTable = iTab; - p->iColumn = iCol; - p->iReg = iReg; - p->affChange = 0; - p->tempReg = 0; - p->lru = pParse->iCacheCnt++; - return; - } -} + sqlite3BtreeSetCachedRowid(u.bi.pC->pCursor, 0); + rc = sqlite3BtreeDelete(u.bi.pC->pCursor); + u.bi.pC->cacheStatus = CACHE_STALE; -/* -** Indicate that a register is being overwritten. Purge the register -** from the column cache. -*/ -SQLITE_PRIVATE void sqlite3ExprCacheRemove(Parse *pParse, int iReg){ - int i; - struct yColCache *p; - for(i=0, p=pParse->aColCache; iiReg==iReg ){ - cacheEntryClear(pParse, p); - p->iReg = 0; - } + /* Invoke the update-hook if required. */ + if( rc==SQLITE_OK && db->xUpdateCallback && pOp->p4.z ){ + const char *zDb = db->aDb[u.bi.pC->iDb].zName; + const char *zTbl = pOp->p4.z; + db->xUpdateCallback(db->pUpdateArg, SQLITE_DELETE, zDb, zTbl, u.bi.iKey); + assert( u.bi.pC->iDb>=0 ); } + if( pOp->p2 & OPFLAG_NCHANGE ) p->nChange++; + break; } - -/* -** Remember the current column cache context. Any new entries added -** added to the column cache after this call are removed when the -** corresponding pop occurs. +/* Opcode: ResetCount * * * * * +** +** The value of the change counter is copied to the database handle +** change counter (returned by subsequent calls to sqlite3_changes()). +** Then the VMs internal change counter resets to 0. +** This is used by trigger programs. */ -SQLITE_PRIVATE void sqlite3ExprCachePush(Parse *pParse){ - pParse->iCacheLevel++; +case OP_ResetCount: { + sqlite3VdbeSetChanges(db, p->nChange); + p->nChange = 0; + break; } -/* -** Remove from the column cache any entries that were added since the -** the previous N Push operations. In other words, restore the cache -** to the state it was in N Pushes ago. +/* Opcode: SorterCompare P1 P2 P3 +** +** P1 is a sorter cursor. This instruction compares the record blob in +** register P3 with the entry that the sorter cursor currently points to. +** If, excluding the rowid fields at the end, the two records are a match, +** fall through to the next instruction. Otherwise, jump to instruction P2. */ -SQLITE_PRIVATE void sqlite3ExprCachePop(Parse *pParse, int N){ - int i; - struct yColCache *p; - assert( N>0 ); - assert( pParse->iCacheLevel>=N ); - pParse->iCacheLevel -= N; - for(i=0, p=pParse->aColCache; iiReg && p->iLevel>pParse->iCacheLevel ){ - cacheEntryClear(pParse, p); - p->iReg = 0; - } +case OP_SorterCompare: { +#if 0 /* local variables moved into u.bj */ + VdbeCursor *pC; + int res; +#endif /* local variables moved into u.bj */ + + u.bj.pC = p->apCsr[pOp->p1]; + assert( isSorter(u.bj.pC) ); + pIn3 = &aMem[pOp->p3]; + rc = sqlite3VdbeSorterCompare(u.bj.pC, pIn3, &u.bj.res); + if( u.bj.res ){ + pc = pOp->p2-1; } -} + break; +}; -/* -** When a cached column is reused, make sure that its register is -** no longer available as a temp register. ticket #3879: that same -** register might be in the cache in multiple places, so be sure to -** get them all. +/* Opcode: SorterData P1 P2 * * * +** +** Write into register P2 the current sorter data for sorter cursor P1. */ -static void sqlite3ExprCachePinRegister(Parse *pParse, int iReg){ - int i; - struct yColCache *p; - for(i=0, p=pParse->aColCache; iiReg==iReg ){ - p->tempReg = 0; - } - } +case OP_SorterData: { +#if 0 /* local variables moved into u.bk */ + VdbeCursor *pC; +#endif /* local variables moved into u.bk */ +#ifndef SQLITE_OMIT_MERGE_SORT + pOut = &aMem[pOp->p2]; + u.bk.pC = p->apCsr[pOp->p1]; + assert( u.bk.pC->isSorter ); + rc = sqlite3VdbeSorterRowkey(u.bk.pC, pOut); +#else + pOp->opcode = OP_RowKey; + pc--; +#endif + break; } -/* -** Generate code that will extract the iColumn-th column from -** table pTab and store the column value in a register. An effort -** is made to store the column value in register iReg, but this is -** not guaranteed. The location of the column value is returned. +/* Opcode: RowData P1 P2 * * * ** -** There must be an open cursor to pTab in iTable when this routine -** is called. If iColumn<0 then code is generated that extracts the rowid. +** Write into register P2 the complete row data for cursor P1. +** There is no interpretation of the data. +** It is just copied onto the P2 register exactly as +** it is found in the database file. ** -** This routine might attempt to reuse the value of the column that -** has already been loaded into a register. The value will always -** be used if it has not undergone any affinity changes. But if -** an affinity change has occurred, then the cached value will only be -** used if allowAffChng is true. +** If the P1 cursor must be pointing to a valid row (not a NULL row) +** of a real table, not a pseudo-table. */ -SQLITE_PRIVATE int sqlite3ExprCodeGetColumn( - Parse *pParse, /* Parsing and code generating context */ - Table *pTab, /* Description of the table we are reading from */ - int iColumn, /* Index of the table column */ - int iTable, /* The cursor pointing to the table */ - int iReg, /* Store results here */ - int allowAffChng /* True if prior affinity changes are OK */ -){ - Vdbe *v = pParse->pVdbe; - int i; - struct yColCache *p; +/* Opcode: RowKey P1 P2 * * * +** +** Write into register P2 the complete row key for cursor P1. +** There is no interpretation of the data. +** The key is copied onto the P3 register exactly as +** it is found in the database file. +** +** If the P1 cursor must be pointing to a valid row (not a NULL row) +** of a real table, not a pseudo-table. +*/ +case OP_RowKey: +case OP_RowData: { +#if 0 /* local variables moved into u.bl */ + VdbeCursor *pC; + BtCursor *pCrsr; + u32 n; + i64 n64; +#endif /* local variables moved into u.bl */ - for(i=0, p=pParse->aColCache; iiReg>0 && p->iTable==iTable && p->iColumn==iColumn - && (!p->affChange || allowAffChng) ){ - p->lru = pParse->iCacheCnt++; - sqlite3ExprCachePinRegister(pParse, p->iReg); - return p->iReg; + pOut = &aMem[pOp->p2]; + memAboutToChange(p, pOut); + + /* Note that RowKey and RowData are really exactly the same instruction */ + assert( pOp->p1>=0 && pOp->p1nCursor ); + u.bl.pC = p->apCsr[pOp->p1]; + assert( u.bl.pC->isSorter==0 ); + assert( u.bl.pC->isTable || pOp->opcode!=OP_RowData ); + assert( u.bl.pC->isIndex || pOp->opcode==OP_RowData ); + assert( u.bl.pC!=0 ); + assert( u.bl.pC->nullRow==0 ); + assert( u.bl.pC->pseudoTableReg==0 ); + assert( u.bl.pC->pCursor!=0 ); + u.bl.pCrsr = u.bl.pC->pCursor; + assert( sqlite3BtreeCursorIsValid(u.bl.pCrsr) ); + + /* The OP_RowKey and OP_RowData opcodes always follow OP_NotExists or + ** OP_Rewind/Op_Next with no intervening instructions that might invalidate + ** the cursor. Hence the following sqlite3VdbeCursorMoveto() call is always + ** a no-op and can never fail. But we leave it in place as a safety. + */ + assert( u.bl.pC->deferredMoveto==0 ); + rc = sqlite3VdbeCursorMoveto(u.bl.pC); + if( NEVER(rc!=SQLITE_OK) ) goto abort_due_to_error; + + if( u.bl.pC->isIndex ){ + assert( !u.bl.pC->isTable ); + VVA_ONLY(rc =) sqlite3BtreeKeySize(u.bl.pCrsr, &u.bl.n64); + assert( rc==SQLITE_OK ); /* True because of CursorMoveto() call above */ + if( u.bl.n64>db->aLimit[SQLITE_LIMIT_LENGTH] ){ + goto too_big; } - } - assert( v!=0 ); - if( iColumn<0 ){ - sqlite3VdbeAddOp2(v, OP_Rowid, iTable, iReg); - }else if( ALWAYS(pTab!=0) ){ - int op = IsVirtual(pTab) ? OP_VColumn : OP_Column; - sqlite3VdbeAddOp3(v, op, iTable, iColumn, iReg); - sqlite3ColumnDefault(v, pTab, iColumn); -#ifndef SQLITE_OMIT_FLOATING_POINT - if( pTab->aCol[iColumn].affinity==SQLITE_AFF_REAL ){ - sqlite3VdbeAddOp1(v, OP_RealAffinity, iReg); + u.bl.n = (u32)u.bl.n64; + }else{ + VVA_ONLY(rc =) sqlite3BtreeDataSize(u.bl.pCrsr, &u.bl.n); + assert( rc==SQLITE_OK ); /* DataSize() cannot fail */ + if( u.bl.n>(u32)db->aLimit[SQLITE_LIMIT_LENGTH] ){ + goto too_big; } -#endif } - sqlite3ExprCacheStore(pParse, iTable, iColumn, iReg); - return iReg; + if( sqlite3VdbeMemGrow(pOut, u.bl.n, 0) ){ + goto no_mem; + } + pOut->n = u.bl.n; + MemSetTypeFlag(pOut, MEM_Blob); + if( u.bl.pC->isIndex ){ + rc = sqlite3BtreeKey(u.bl.pCrsr, 0, u.bl.n, pOut->z); + }else{ + rc = sqlite3BtreeData(u.bl.pCrsr, 0, u.bl.n, pOut->z); + } + pOut->enc = SQLITE_UTF8; /* In case the blob is ever cast to text */ + UPDATE_MAX_BLOBSIZE(pOut); + break; } -/* -** Clear all column cache entries. +/* Opcode: Rowid P1 P2 * * * +** +** Store in register P2 an integer which is the key of the table entry that +** P1 is currently point to. +** +** P1 can be either an ordinary table or a virtual table. There used to +** be a separate OP_VRowid opcode for use with virtual tables, but this +** one opcode now works for both table types. */ -SQLITE_PRIVATE void sqlite3ExprCacheClear(Parse *pParse){ - int i; - struct yColCache *p; +case OP_Rowid: { /* out2-prerelease */ +#if 0 /* local variables moved into u.bm */ + VdbeCursor *pC; + i64 v; + sqlite3_vtab *pVtab; + const sqlite3_module *pModule; +#endif /* local variables moved into u.bm */ - for(i=0, p=pParse->aColCache; iiReg ){ - cacheEntryClear(pParse, p); - p->iReg = 0; + assert( pOp->p1>=0 && pOp->p1nCursor ); + u.bm.pC = p->apCsr[pOp->p1]; + assert( u.bm.pC!=0 ); + assert( u.bm.pC->pseudoTableReg==0 ); + if( u.bm.pC->nullRow ){ + pOut->flags = MEM_Null; + break; + }else if( u.bm.pC->deferredMoveto ){ + u.bm.v = u.bm.pC->movetoTarget; +#ifndef SQLITE_OMIT_VIRTUALTABLE + }else if( u.bm.pC->pVtabCursor ){ + u.bm.pVtab = u.bm.pC->pVtabCursor->pVtab; + u.bm.pModule = u.bm.pVtab->pModule; + assert( u.bm.pModule->xRowid ); + rc = u.bm.pModule->xRowid(u.bm.pC->pVtabCursor, &u.bm.v); + importVtabErrMsg(p, u.bm.pVtab); +#endif /* SQLITE_OMIT_VIRTUALTABLE */ + }else{ + assert( u.bm.pC->pCursor!=0 ); + rc = sqlite3VdbeCursorMoveto(u.bm.pC); + if( rc ) goto abort_due_to_error; + if( u.bm.pC->rowidIsValid ){ + u.bm.v = u.bm.pC->lastRowid; + }else{ + rc = sqlite3BtreeKeySize(u.bm.pC->pCursor, &u.bm.v); + assert( rc==SQLITE_OK ); /* Always so because of CursorMoveto() above */ } } + pOut->u.i = u.bm.v; + break; } -/* -** Record the fact that an affinity change has occurred on iCount -** registers starting with iStart. +/* Opcode: NullRow P1 * * * * +** +** Move the cursor P1 to a null row. Any OP_Column operations +** that occur while the cursor is on the null row will always +** write a NULL. */ -SQLITE_PRIVATE void sqlite3ExprCacheAffinityChange(Parse *pParse, int iStart, int iCount){ - int iEnd = iStart + iCount - 1; - int i; - struct yColCache *p; - for(i=0, p=pParse->aColCache; iiReg; - if( r>=iStart && r<=iEnd ){ - p->affChange = 1; - } +case OP_NullRow: { +#if 0 /* local variables moved into u.bn */ + VdbeCursor *pC; +#endif /* local variables moved into u.bn */ + + assert( pOp->p1>=0 && pOp->p1nCursor ); + u.bn.pC = p->apCsr[pOp->p1]; + assert( u.bn.pC!=0 ); + u.bn.pC->nullRow = 1; + u.bn.pC->rowidIsValid = 0; + assert( u.bn.pC->pCursor || u.bn.pC->pVtabCursor ); + if( u.bn.pC->pCursor ){ + sqlite3BtreeClearCursor(u.bn.pC->pCursor); } + break; } -/* -** Generate code to move content from registers iFrom...iFrom+nReg-1 -** over to iTo..iTo+nReg-1. Keep the column cache up-to-date. +/* Opcode: Last P1 P2 * * * +** +** The next use of the Rowid or Column or Next instruction for P1 +** will refer to the last entry in the database table or index. +** If the table or index is empty and P2>0, then jump immediately to P2. +** If P2 is 0 or if the table or index is not empty, fall through +** to the following instruction. */ -SQLITE_PRIVATE void sqlite3ExprCodeMove(Parse *pParse, int iFrom, int iTo, int nReg){ - int i; - struct yColCache *p; - if( NEVER(iFrom==iTo) ) return; - sqlite3VdbeAddOp3(pParse->pVdbe, OP_Move, iFrom, iTo, nReg); - for(i=0, p=pParse->aColCache; iiReg; - if( x>=iFrom && xiReg += iTo-iFrom; - } +case OP_Last: { /* jump */ +#if 0 /* local variables moved into u.bo */ + VdbeCursor *pC; + BtCursor *pCrsr; + int res; +#endif /* local variables moved into u.bo */ + + assert( pOp->p1>=0 && pOp->p1nCursor ); + u.bo.pC = p->apCsr[pOp->p1]; + assert( u.bo.pC!=0 ); + u.bo.pCrsr = u.bo.pC->pCursor; + u.bo.res = 0; + if( ALWAYS(u.bo.pCrsr!=0) ){ + rc = sqlite3BtreeLast(u.bo.pCrsr, &u.bo.res); } + u.bo.pC->nullRow = (u8)u.bo.res; + u.bo.pC->deferredMoveto = 0; + u.bo.pC->rowidIsValid = 0; + u.bo.pC->cacheStatus = CACHE_STALE; + if( pOp->p2>0 && u.bo.res ){ + pc = pOp->p2 - 1; + } + break; } -/* -** Generate code to copy content from registers iFrom...iFrom+nReg-1 -** over to iTo..iTo+nReg-1. + +/* Opcode: Sort P1 P2 * * * +** +** This opcode does exactly the same thing as OP_Rewind except that +** it increments an undocumented global variable used for testing. +** +** Sorting is accomplished by writing records into a sorting index, +** then rewinding that index and playing it back from beginning to +** end. We use the OP_Sort opcode instead of OP_Rewind to do the +** rewinding so that the global variable will be incremented and +** regression tests can determine whether or not the optimizer is +** correctly optimizing out sorts. */ -SQLITE_PRIVATE void sqlite3ExprCodeCopy(Parse *pParse, int iFrom, int iTo, int nReg){ - int i; - if( NEVER(iFrom==iTo) ) return; - for(i=0; ipVdbe, OP_Copy, iFrom+i, iTo+i); - } +case OP_SorterSort: /* jump */ +#ifdef SQLITE_OMIT_MERGE_SORT + pOp->opcode = OP_Sort; +#endif +case OP_Sort: { /* jump */ +#ifdef SQLITE_TEST + sqlite3_sort_count++; + sqlite3_search_count--; +#endif + p->aCounter[SQLITE_STMTSTATUS_SORT-1]++; + /* Fall through into OP_Rewind */ } - -/* -** Return true if any register in the range iFrom..iTo (inclusive) -** is used as part of the column cache. +/* Opcode: Rewind P1 P2 * * * +** +** The next use of the Rowid or Column or Next instruction for P1 +** will refer to the first entry in the database table or index. +** If the table or index is empty and P2>0, then jump immediately to P2. +** If P2 is 0 or if the table or index is not empty, fall through +** to the following instruction. */ -static int usedAsColumnCache(Parse *pParse, int iFrom, int iTo){ - int i; - struct yColCache *p; - for(i=0, p=pParse->aColCache; iiReg; - if( r>=iFrom && r<=iTo ) return 1; +case OP_Rewind: { /* jump */ +#if 0 /* local variables moved into u.bp */ + VdbeCursor *pC; + BtCursor *pCrsr; + int res; +#endif /* local variables moved into u.bp */ + + assert( pOp->p1>=0 && pOp->p1nCursor ); + u.bp.pC = p->apCsr[pOp->p1]; + assert( u.bp.pC!=0 ); + assert( u.bp.pC->isSorter==(pOp->opcode==OP_SorterSort) ); + u.bp.res = 1; + if( isSorter(u.bp.pC) ){ + rc = sqlite3VdbeSorterRewind(db, u.bp.pC, &u.bp.res); + }else{ + u.bp.pCrsr = u.bp.pC->pCursor; + assert( u.bp.pCrsr ); + rc = sqlite3BtreeFirst(u.bp.pCrsr, &u.bp.res); + u.bp.pC->atFirst = u.bp.res==0 ?1:0; + u.bp.pC->deferredMoveto = 0; + u.bp.pC->cacheStatus = CACHE_STALE; + u.bp.pC->rowidIsValid = 0; } - return 0; + u.bp.pC->nullRow = (u8)u.bp.res; + assert( pOp->p2>0 && pOp->p2nOp ); + if( u.bp.res ){ + pc = pOp->p2 - 1; + } + break; } -/* -** If the last instruction coded is an ephemeral copy of any of -** the registers in the nReg registers beginning with iReg, then -** convert the last instruction from OP_SCopy to OP_Copy. +/* Opcode: Next P1 P2 * P4 P5 +** +** Advance cursor P1 so that it points to the next key/data pair in its +** table or index. If there are no more key/value pairs then fall through +** to the following instruction. But if the cursor advance was successful, +** jump immediately to P2. +** +** The P1 cursor must be for a real table, not a pseudo-table. +** +** P4 is always of type P4_ADVANCE. The function pointer points to +** sqlite3BtreeNext(). +** +** If P5 is positive and the jump is taken, then event counter +** number P5-1 in the prepared statement is incremented. +** +** See also: Prev */ -SQLITE_PRIVATE void sqlite3ExprHardCopy(Parse *pParse, int iReg, int nReg){ - VdbeOp *pOp; - Vdbe *v; +/* Opcode: Prev P1 P2 * * P5 +** +** Back up cursor P1 so that it points to the previous key/data pair in its +** table or index. If there is no previous key/value pairs then fall through +** to the following instruction. But if the cursor backup was successful, +** jump immediately to P2. +** +** The P1 cursor must be for a real table, not a pseudo-table. +** +** P4 is always of type P4_ADVANCE. The function pointer points to +** sqlite3BtreePrevious(). +** +** If P5 is positive and the jump is taken, then event counter +** number P5-1 in the prepared statement is incremented. +*/ +case OP_SorterNext: /* jump */ +#ifdef SQLITE_OMIT_MERGE_SORT + pOp->opcode = OP_Next; +#endif +case OP_Prev: /* jump */ +case OP_Next: { /* jump */ +#if 0 /* local variables moved into u.bq */ + VdbeCursor *pC; + int res; +#endif /* local variables moved into u.bq */ - assert( pParse->db->mallocFailed==0 ); - v = pParse->pVdbe; - assert( v!=0 ); - pOp = sqlite3VdbeGetOp(v, -1); - assert( pOp!=0 ); - if( pOp->opcode==OP_SCopy && pOp->p1>=iReg && pOp->p1opcode = OP_Copy; + CHECK_FOR_INTERRUPT; + assert( pOp->p1>=0 && pOp->p1nCursor ); + assert( pOp->p5<=ArraySize(p->aCounter) ); + u.bq.pC = p->apCsr[pOp->p1]; + if( u.bq.pC==0 ){ + break; /* See ticket #2273 */ + } + assert( u.bq.pC->isSorter==(pOp->opcode==OP_SorterNext) ); + if( isSorter(u.bq.pC) ){ + assert( pOp->opcode==OP_SorterNext ); + rc = sqlite3VdbeSorterNext(db, u.bq.pC, &u.bq.res); + }else{ + u.bq.res = 1; + assert( u.bq.pC->deferredMoveto==0 ); + assert( u.bq.pC->pCursor ); + assert( pOp->opcode!=OP_Next || pOp->p4.xAdvance==sqlite3BtreeNext ); + assert( pOp->opcode!=OP_Prev || pOp->p4.xAdvance==sqlite3BtreePrevious ); + rc = pOp->p4.xAdvance(u.bq.pC->pCursor, &u.bq.res); + } + u.bq.pC->nullRow = (u8)u.bq.res; + u.bq.pC->cacheStatus = CACHE_STALE; + if( u.bq.res==0 ){ + pc = pOp->p2 - 1; + if( pOp->p5 ) p->aCounter[pOp->p5-1]++; +#ifdef SQLITE_TEST + sqlite3_search_count++; +#endif } + u.bq.pC->rowidIsValid = 0; + break; } -/* -** Generate code to store the value of the iAlias-th alias in register -** target. The first time this is called, pExpr is evaluated to compute -** the value of the alias. The value is stored in an auxiliary register -** and the number of that register is returned. On subsequent calls, -** the register number is returned without generating any code. +/* Opcode: IdxInsert P1 P2 P3 * P5 ** -** Note that in order for this to work, code must be generated in the -** same order that it is executed. +** Register P2 holds an SQL index key made using the +** MakeRecord instructions. This opcode writes that key +** into the index P1. Data for the entry is nil. ** -** Aliases are numbered starting with 1. So iAlias is in the range -** of 1 to pParse->nAlias inclusive. +** P3 is a flag that provides a hint to the b-tree layer that this +** insert is likely to be an append. ** -** pParse->aAlias[iAlias-1] records the register number where the value -** of the iAlias-th alias is stored. If zero, that means that the -** alias has not yet been computed. +** This instruction only works for indices. The equivalent instruction +** for tables is OP_Insert. */ -static int codeAlias(Parse *pParse, int iAlias, Expr *pExpr, int target){ -#if 0 - sqlite3 *db = pParse->db; - int iReg; - if( pParse->nAliasAllocnAlias ){ - pParse->aAlias = sqlite3DbReallocOrFree(db, pParse->aAlias, - sizeof(pParse->aAlias[0])*pParse->nAlias ); - testcase( db->mallocFailed && pParse->nAliasAlloc>0 ); - if( db->mallocFailed ) return 0; - memset(&pParse->aAlias[pParse->nAliasAlloc], 0, - (pParse->nAlias-pParse->nAliasAlloc)*sizeof(pParse->aAlias[0])); - pParse->nAliasAlloc = pParse->nAlias; - } - assert( iAlias>0 && iAlias<=pParse->nAlias ); - iReg = pParse->aAlias[iAlias-1]; - if( iReg==0 ){ - if( pParse->iCacheLevel>0 ){ - iReg = sqlite3ExprCodeTarget(pParse, pExpr, target); - }else{ - iReg = ++pParse->nMem; - sqlite3ExprCode(pParse, pExpr, iReg); - pParse->aAlias[iAlias-1] = iReg; +case OP_SorterInsert: /* in2 */ +#ifdef SQLITE_OMIT_MERGE_SORT + pOp->opcode = OP_IdxInsert; +#endif +case OP_IdxInsert: { /* in2 */ +#if 0 /* local variables moved into u.br */ + VdbeCursor *pC; + BtCursor *pCrsr; + int nKey; + const char *zKey; +#endif /* local variables moved into u.br */ + + assert( pOp->p1>=0 && pOp->p1nCursor ); + u.br.pC = p->apCsr[pOp->p1]; + assert( u.br.pC!=0 ); + assert( u.br.pC->isSorter==(pOp->opcode==OP_SorterInsert) ); + pIn2 = &aMem[pOp->p2]; + assert( pIn2->flags & MEM_Blob ); + u.br.pCrsr = u.br.pC->pCursor; + if( ALWAYS(u.br.pCrsr!=0) ){ + assert( u.br.pC->isTable==0 ); + rc = ExpandBlob(pIn2); + if( rc==SQLITE_OK ){ + if( isSorter(u.br.pC) ){ + rc = sqlite3VdbeSorterWrite(db, u.br.pC, pIn2); + }else{ + u.br.nKey = pIn2->n; + u.br.zKey = pIn2->z; + rc = sqlite3BtreeInsert(u.br.pCrsr, u.br.zKey, u.br.nKey, "", 0, 0, pOp->p3, + ((pOp->p5 & OPFLAG_USESEEKRESULT) ? u.br.pC->seekResult : 0) + ); + assert( u.br.pC->deferredMoveto==0 ); + u.br.pC->cacheStatus = CACHE_STALE; + } } } - return iReg; -#else - UNUSED_PARAMETER(iAlias); - return sqlite3ExprCodeTarget(pParse, pExpr, target); -#endif + break; } -/* -** Generate code into the current Vdbe to evaluate the given -** expression. Attempt to store the results in register "target". -** Return the register where results are stored. +/* Opcode: IdxDelete P1 P2 P3 * * ** -** With this routine, there is no guarantee that results will -** be stored in target. The result might be stored in some other -** register if it is convenient to do so. The calling function -** must check the return code and move the results to the desired -** register. +** The content of P3 registers starting at register P2 form +** an unpacked index key. This opcode removes that entry from the +** index opened by cursor P1. */ -SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target){ - Vdbe *v = pParse->pVdbe; /* The VM under construction */ - int op; /* The opcode being coded */ - int inReg = target; /* Results stored in register inReg */ - int regFree1 = 0; /* If non-zero free this temporary register */ - int regFree2 = 0; /* If non-zero free this temporary register */ - int r1, r2, r3, r4; /* Various register numbers */ - sqlite3 *db = pParse->db; /* The database connection */ +case OP_IdxDelete: { +#if 0 /* local variables moved into u.bs */ + VdbeCursor *pC; + BtCursor *pCrsr; + int res; + UnpackedRecord r; +#endif /* local variables moved into u.bs */ - assert( target>0 && target<=pParse->nMem ); - if( v==0 ){ - assert( pParse->db->mallocFailed ); - return 0; + assert( pOp->p3>0 ); + assert( pOp->p2>0 && pOp->p2+pOp->p3<=p->nMem+1 ); + assert( pOp->p1>=0 && pOp->p1nCursor ); + u.bs.pC = p->apCsr[pOp->p1]; + assert( u.bs.pC!=0 ); + u.bs.pCrsr = u.bs.pC->pCursor; + if( ALWAYS(u.bs.pCrsr!=0) ){ + u.bs.r.pKeyInfo = u.bs.pC->pKeyInfo; + u.bs.r.nField = (u16)pOp->p3; + u.bs.r.flags = 0; + u.bs.r.aMem = &aMem[pOp->p2]; +#ifdef SQLITE_DEBUG + { int i; for(i=0; ideferredMoveto==0 ); + u.bs.pC->cacheStatus = CACHE_STALE; } + break; +} - if( pExpr==0 ){ - op = TK_NULL; - }else{ - op = pExpr->op; - } - switch( op ){ - case TK_AGG_COLUMN: { - AggInfo *pAggInfo = pExpr->pAggInfo; - struct AggInfo_col *pCol = &pAggInfo->aCol[pExpr->iAgg]; - if( !pAggInfo->directMode ){ - assert( pCol->iMem>0 ); - inReg = pCol->iMem; - break; - }else if( pAggInfo->useSortingIdx ){ - sqlite3VdbeAddOp3(v, OP_Column, pAggInfo->sortingIdx, - pCol->iSorterColumn, target); - break; - } - /* Otherwise, fall thru into the TK_COLUMN case */ - } - case TK_COLUMN: { - if( pExpr->iTable<0 ){ - /* This only happens when coding check constraints */ - assert( pParse->ckBase>0 ); - inReg = pExpr->iColumn + pParse->ckBase; - }else{ - testcase( (pExpr->flags & EP_AnyAff)!=0 ); - inReg = sqlite3ExprCodeGetColumn(pParse, pExpr->pTab, - pExpr->iColumn, pExpr->iTable, target, - pExpr->flags & EP_AnyAff); +/* Opcode: IdxRowid P1 P2 * * * +** +** Write into register P2 an integer which is the last entry in the record at +** the end of the index key pointed to by cursor P1. This integer should be +** the rowid of the table entry to which this index entry points. +** +** See also: Rowid, MakeRecord. +*/ +case OP_IdxRowid: { /* out2-prerelease */ +#if 0 /* local variables moved into u.bt */ + BtCursor *pCrsr; + VdbeCursor *pC; + i64 rowid; +#endif /* local variables moved into u.bt */ + + assert( pOp->p1>=0 && pOp->p1nCursor ); + u.bt.pC = p->apCsr[pOp->p1]; + assert( u.bt.pC!=0 ); + u.bt.pCrsr = u.bt.pC->pCursor; + pOut->flags = MEM_Null; + if( ALWAYS(u.bt.pCrsr!=0) ){ + rc = sqlite3VdbeCursorMoveto(u.bt.pC); + if( NEVER(rc) ) goto abort_due_to_error; + assert( u.bt.pC->deferredMoveto==0 ); + assert( u.bt.pC->isTable==0 ); + if( !u.bt.pC->nullRow ){ + rc = sqlite3VdbeIdxRowid(db, u.bt.pCrsr, &u.bt.rowid); + if( rc!=SQLITE_OK ){ + goto abort_due_to_error; } - break; - } - case TK_INTEGER: { - codeInteger(v, pExpr, 0, target); - break; + pOut->u.i = u.bt.rowid; + pOut->flags = MEM_Int; } - case TK_FLOAT: { - assert( !ExprHasProperty(pExpr, EP_IntValue) ); - codeReal(v, pExpr->u.zToken, 0, target); - break; + } + break; +} + +/* Opcode: IdxGE P1 P2 P3 P4 P5 +** +** The P4 register values beginning with P3 form an unpacked index +** key that omits the ROWID. Compare this key value against the index +** that P1 is currently pointing to, ignoring the ROWID on the P1 index. +** +** If the P1 index entry is greater than or equal to the key value +** then jump to P2. Otherwise fall through to the next instruction. +** +** If P5 is non-zero then the key value is increased by an epsilon +** prior to the comparison. This make the opcode work like IdxGT except +** that if the key from register P3 is a prefix of the key in the cursor, +** the result is false whereas it would be true with IdxGT. +*/ +/* Opcode: IdxLT P1 P2 P3 P4 P5 +** +** The P4 register values beginning with P3 form an unpacked index +** key that omits the ROWID. Compare this key value against the index +** that P1 is currently pointing to, ignoring the ROWID on the P1 index. +** +** If the P1 index entry is less than the key value then jump to P2. +** Otherwise fall through to the next instruction. +** +** If P5 is non-zero then the key value is increased by an epsilon prior +** to the comparison. This makes the opcode work like IdxLE. +*/ +case OP_IdxLT: /* jump */ +case OP_IdxGE: { /* jump */ +#if 0 /* local variables moved into u.bu */ + VdbeCursor *pC; + int res; + UnpackedRecord r; +#endif /* local variables moved into u.bu */ + + assert( pOp->p1>=0 && pOp->p1nCursor ); + u.bu.pC = p->apCsr[pOp->p1]; + assert( u.bu.pC!=0 ); + assert( u.bu.pC->isOrdered ); + if( ALWAYS(u.bu.pC->pCursor!=0) ){ + assert( u.bu.pC->deferredMoveto==0 ); + assert( pOp->p5==0 || pOp->p5==1 ); + assert( pOp->p4type==P4_INT32 ); + u.bu.r.pKeyInfo = u.bu.pC->pKeyInfo; + u.bu.r.nField = (u16)pOp->p4.i; + if( pOp->p5 ){ + u.bu.r.flags = UNPACKED_INCRKEY | UNPACKED_PREFIX_MATCH; + }else{ + u.bu.r.flags = UNPACKED_PREFIX_MATCH; } - case TK_STRING: { - assert( !ExprHasProperty(pExpr, EP_IntValue) ); - sqlite3VdbeAddOp4(v, OP_String8, 0, target, 0, pExpr->u.zToken, 0); - break; + u.bu.r.aMem = &aMem[pOp->p3]; +#ifdef SQLITE_DEBUG + { int i; for(i=0; iopcode==OP_IdxLT ){ + u.bu.res = -u.bu.res; + }else{ + assert( pOp->opcode==OP_IdxGE ); + u.bu.res++; } - case TK_NULL: { - sqlite3VdbeAddOp2(v, OP_Null, 0, target); - break; + if( u.bu.res>0 ){ + pc = pOp->p2 - 1 ; } -#ifndef SQLITE_OMIT_BLOB_LITERAL - case TK_BLOB: { - int n; - const char *z; - char *zBlob; - assert( !ExprHasProperty(pExpr, EP_IntValue) ); - assert( pExpr->u.zToken[0]=='x' || pExpr->u.zToken[0]=='X' ); - assert( pExpr->u.zToken[1]=='\'' ); - z = &pExpr->u.zToken[2]; - n = sqlite3Strlen30(z) - 1; - assert( z[n]=='\'' ); - zBlob = sqlite3HexToBlob(sqlite3VdbeDb(v), z, n); - sqlite3VdbeAddOp4(v, OP_Blob, n/2, target, 0, zBlob, P4_DYNAMIC); - break; + } + break; +} + +/* Opcode: Destroy P1 P2 P3 * * +** +** Delete an entire database table or index whose root page in the database +** file is given by P1. +** +** The table being destroyed is in the main database file if P3==0. If +** P3==1 then the table to be clear is in the auxiliary database file +** that is used to store tables create using CREATE TEMPORARY TABLE. +** +** If AUTOVACUUM is enabled then it is possible that another root page +** might be moved into the newly deleted root page in order to keep all +** root pages contiguous at the beginning of the database. The former +** value of the root page that moved - its value before the move occurred - +** is stored in register P2. If no page +** movement was required (because the table being dropped was already +** the last one in the database) then a zero is stored in register P2. +** If AUTOVACUUM is disabled then a zero is stored in register P2. +** +** See also: Clear +*/ +case OP_Destroy: { /* out2-prerelease */ +#if 0 /* local variables moved into u.bv */ + int iMoved; + int iCnt; + Vdbe *pVdbe; + int iDb; +#endif /* local variables moved into u.bv */ +#ifndef SQLITE_OMIT_VIRTUALTABLE + u.bv.iCnt = 0; + for(u.bv.pVdbe=db->pVdbe; u.bv.pVdbe; u.bv.pVdbe = u.bv.pVdbe->pNext){ + if( u.bv.pVdbe->magic==VDBE_MAGIC_RUN && u.bv.pVdbe->inVtabMethod<2 && u.bv.pVdbe->pc>=0 ){ + u.bv.iCnt++; } + } +#else + u.bv.iCnt = db->activeVdbeCnt; #endif - case TK_VARIABLE: { - VdbeOp *pOp; - assert( !ExprHasProperty(pExpr, EP_IntValue) ); - assert( pExpr->u.zToken!=0 ); - assert( pExpr->u.zToken[0]!=0 ); - if( pExpr->u.zToken[1]==0 - && (pOp = sqlite3VdbeGetOp(v, -1))->opcode==OP_Variable - && pOp->p1+pOp->p3==pExpr->iTable - && pOp->p2+pOp->p3==target - && pOp->p4.z==0 - ){ - /* If the previous instruction was a copy of the previous unnamed - ** parameter into the previous register, then simply increment the - ** repeat count on the prior instruction rather than making a new - ** instruction. - */ - pOp->p3++; - }else{ - sqlite3VdbeAddOp3(v, OP_Variable, pExpr->iTable, target, 1); - if( pExpr->u.zToken[1]!=0 ){ - sqlite3VdbeChangeP4(v, -1, pExpr->u.zToken, 0); - } - } - break; - } - case TK_REGISTER: { - inReg = pExpr->iTable; - break; - } - case TK_AS: { - inReg = codeAlias(pParse, pExpr->iTable, pExpr->pLeft, target); - break; - } -#ifndef SQLITE_OMIT_CAST - case TK_CAST: { - /* Expressions of the form: CAST(pLeft AS token) */ - int aff, to_op; - inReg = sqlite3ExprCodeTarget(pParse, pExpr->pLeft, target); - assert( !ExprHasProperty(pExpr, EP_IntValue) ); - aff = sqlite3AffinityType(pExpr->u.zToken); - to_op = aff - SQLITE_AFF_TEXT + OP_ToText; - assert( to_op==OP_ToText || aff!=SQLITE_AFF_TEXT ); - assert( to_op==OP_ToBlob || aff!=SQLITE_AFF_NONE ); - assert( to_op==OP_ToNumeric || aff!=SQLITE_AFF_NUMERIC ); - assert( to_op==OP_ToInt || aff!=SQLITE_AFF_INTEGER ); - assert( to_op==OP_ToReal || aff!=SQLITE_AFF_REAL ); - testcase( to_op==OP_ToText ); - testcase( to_op==OP_ToBlob ); - testcase( to_op==OP_ToNumeric ); - testcase( to_op==OP_ToInt ); - testcase( to_op==OP_ToReal ); - if( inReg!=target ){ - sqlite3VdbeAddOp2(v, OP_SCopy, inReg, target); - inReg = target; - } - sqlite3VdbeAddOp1(v, to_op, inReg); - testcase( usedAsColumnCache(pParse, inReg, inReg) ); - sqlite3ExprCacheAffinityChange(pParse, inReg, 1); - break; - } -#endif /* SQLITE_OMIT_CAST */ - case TK_LT: - case TK_LE: - case TK_GT: - case TK_GE: - case TK_NE: - case TK_EQ: { - assert( TK_LT==OP_Lt ); - assert( TK_LE==OP_Le ); - assert( TK_GT==OP_Gt ); - assert( TK_GE==OP_Ge ); - assert( TK_EQ==OP_Eq ); - assert( TK_NE==OP_Ne ); - testcase( op==TK_LT ); - testcase( op==TK_LE ); - testcase( op==TK_GT ); - testcase( op==TK_GE ); - testcase( op==TK_EQ ); - testcase( op==TK_NE ); - codeCompareOperands(pParse, pExpr->pLeft, &r1, ®Free1, - pExpr->pRight, &r2, ®Free2); - codeCompare(pParse, pExpr->pLeft, pExpr->pRight, op, - r1, r2, inReg, SQLITE_STOREP2); - testcase( regFree1==0 ); - testcase( regFree2==0 ); - break; - } - case TK_AND: - case TK_OR: - case TK_PLUS: - case TK_STAR: - case TK_MINUS: - case TK_REM: - case TK_BITAND: - case TK_BITOR: - case TK_SLASH: - case TK_LSHIFT: - case TK_RSHIFT: - case TK_CONCAT: { - assert( TK_AND==OP_And ); - assert( TK_OR==OP_Or ); - assert( TK_PLUS==OP_Add ); - assert( TK_MINUS==OP_Subtract ); - assert( TK_REM==OP_Remainder ); - assert( TK_BITAND==OP_BitAnd ); - assert( TK_BITOR==OP_BitOr ); - assert( TK_SLASH==OP_Divide ); - assert( TK_LSHIFT==OP_ShiftLeft ); - assert( TK_RSHIFT==OP_ShiftRight ); - assert( TK_CONCAT==OP_Concat ); - testcase( op==TK_AND ); - testcase( op==TK_OR ); - testcase( op==TK_PLUS ); - testcase( op==TK_MINUS ); - testcase( op==TK_REM ); - testcase( op==TK_BITAND ); - testcase( op==TK_BITOR ); - testcase( op==TK_SLASH ); - testcase( op==TK_LSHIFT ); - testcase( op==TK_RSHIFT ); - testcase( op==TK_CONCAT ); - r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, ®Free1); - r2 = sqlite3ExprCodeTemp(pParse, pExpr->pRight, ®Free2); - sqlite3VdbeAddOp3(v, op, r2, r1, target); - testcase( regFree1==0 ); - testcase( regFree2==0 ); - break; - } - case TK_UMINUS: { - Expr *pLeft = pExpr->pLeft; - assert( pLeft ); - if( pLeft->op==TK_FLOAT ){ - assert( !ExprHasProperty(pExpr, EP_IntValue) ); - codeReal(v, pLeft->u.zToken, 1, target); - }else if( pLeft->op==TK_INTEGER ){ - codeInteger(v, pLeft, 1, target); - }else{ - regFree1 = r1 = sqlite3GetTempReg(pParse); - sqlite3VdbeAddOp2(v, OP_Integer, 0, r1); - r2 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, ®Free2); - sqlite3VdbeAddOp3(v, OP_Subtract, r2, r1, target); - testcase( regFree2==0 ); - } - inReg = target; - break; - } - case TK_BITNOT: - case TK_NOT: { - assert( TK_BITNOT==OP_BitNot ); - assert( TK_NOT==OP_Not ); - testcase( op==TK_BITNOT ); - testcase( op==TK_NOT ); - r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, ®Free1); - testcase( regFree1==0 ); - inReg = target; - sqlite3VdbeAddOp2(v, op, r1, inReg); - break; - } - case TK_ISNULL: - case TK_NOTNULL: { - int addr; - assert( TK_ISNULL==OP_IsNull ); - assert( TK_NOTNULL==OP_NotNull ); - testcase( op==TK_ISNULL ); - testcase( op==TK_NOTNULL ); - sqlite3VdbeAddOp2(v, OP_Integer, 1, target); - r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, ®Free1); - testcase( regFree1==0 ); - addr = sqlite3VdbeAddOp1(v, op, r1); - sqlite3VdbeAddOp2(v, OP_AddImm, target, -1); - sqlite3VdbeJumpHere(v, addr); - break; - } - case TK_AGG_FUNCTION: { - AggInfo *pInfo = pExpr->pAggInfo; - if( pInfo==0 ){ - assert( !ExprHasProperty(pExpr, EP_IntValue) ); - sqlite3ErrorMsg(pParse, "misuse of aggregate: %s()", pExpr->u.zToken); - }else{ - inReg = pInfo->aFunc[pExpr->iAgg].iMem; - } - break; - } - case TK_CONST_FUNC: - case TK_FUNCTION: { - ExprList *pFarg; /* List of function arguments */ - int nFarg; /* Number of function arguments */ - FuncDef *pDef; /* The function definition object */ - int nId; /* Length of the function name in bytes */ - const char *zId; /* The function name */ - int constMask = 0; /* Mask of function arguments that are constant */ - int i; /* Loop counter */ - u8 enc = ENC(db); /* The text encoding used by this database */ - CollSeq *pColl = 0; /* A collating sequence */ - - assert( !ExprHasProperty(pExpr, EP_xIsSelect) ); - testcase( op==TK_CONST_FUNC ); - testcase( op==TK_FUNCTION ); - if( ExprHasAnyProperty(pExpr, EP_TokenOnly) ){ - pFarg = 0; - }else{ - pFarg = pExpr->x.pList; - } - nFarg = pFarg ? pFarg->nExpr : 0; - assert( !ExprHasProperty(pExpr, EP_IntValue) ); - zId = pExpr->u.zToken; - nId = sqlite3Strlen30(zId); - pDef = sqlite3FindFunction(db, zId, nId, nFarg, enc, 0); - assert( pDef!=0 ); - if( pFarg ){ - r1 = sqlite3GetTempRange(pParse, nFarg); - sqlite3ExprCodeExprList(pParse, pFarg, r1, 1); - }else{ - r1 = 0; - } -#ifndef SQLITE_OMIT_VIRTUALTABLE - /* Possibly overload the function if the first argument is - ** a virtual table column. - ** - ** For infix functions (LIKE, GLOB, REGEXP, and MATCH) use the - ** second argument, not the first, as the argument to test to - ** see if it is a column in a virtual table. This is done because - ** the left operand of infix functions (the operand we want to - ** control overloading) ends up as the second argument to the - ** function. The expression "A glob B" is equivalent to - ** "glob(B,A). We want to use the A in "A glob B" to test - ** for function overloading. But we use the B term in "glob(B,A)". - */ - if( nFarg>=2 && (pExpr->flags & EP_InfixFunc) ){ - pDef = sqlite3VtabOverloadFunction(db, pDef, nFarg, pFarg->a[1].pExpr); - }else if( nFarg>0 ){ - pDef = sqlite3VtabOverloadFunction(db, pDef, nFarg, pFarg->a[0].pExpr); - } -#endif - for(i=0; ia[i].pExpr) ){ - constMask |= (1<flags & SQLITE_FUNC_NEEDCOLL)!=0 && !pColl ){ - pColl = sqlite3ExprCollSeq(pParse, pFarg->a[i].pExpr); - } - } - if( pDef->flags & SQLITE_FUNC_NEEDCOLL ){ - if( !pColl ) pColl = db->pDfltColl; - sqlite3VdbeAddOp4(v, OP_CollSeq, 0, 0, 0, (char *)pColl, P4_COLLSEQ); - } - sqlite3VdbeAddOp4(v, OP_Function, constMask, r1, target, - (char*)pDef, P4_FUNCDEF); - sqlite3VdbeChangeP5(v, (u8)nFarg); - if( nFarg ){ - sqlite3ReleaseTempRange(pParse, r1, nFarg); - } - sqlite3ExprCacheAffinityChange(pParse, r1, nFarg); - break; - } -#ifndef SQLITE_OMIT_SUBQUERY - case TK_EXISTS: - case TK_SELECT: { - testcase( op==TK_EXISTS ); - testcase( op==TK_SELECT ); - sqlite3CodeSubselect(pParse, pExpr, 0, 0); - inReg = pExpr->iColumn; - break; - } - case TK_IN: { - int rNotFound = 0; - int rMayHaveNull = 0; - int j2, j3, j4, j5; - char affinity; - int eType; - - VdbeNoopComment((v, "begin IN expr r%d", target)); - eType = sqlite3FindInIndex(pParse, pExpr, &rMayHaveNull); - if( rMayHaveNull ){ - rNotFound = ++pParse->nMem; - } - - /* Figure out the affinity to use to create a key from the results - ** of the expression. affinityStr stores a static string suitable for - ** P4 of OP_MakeRecord. - */ - affinity = comparisonAffinity(pExpr); - - - /* Code the from " IN (...)". The temporary table - ** pExpr->iTable contains the values that make up the (...) set. - */ - sqlite3ExprCachePush(pParse); - sqlite3ExprCode(pParse, pExpr->pLeft, target); - j2 = sqlite3VdbeAddOp1(v, OP_IsNull, target); - if( eType==IN_INDEX_ROWID ){ - j3 = sqlite3VdbeAddOp1(v, OP_MustBeInt, target); - j4 = sqlite3VdbeAddOp3(v, OP_NotExists, pExpr->iTable, 0, target); - sqlite3VdbeAddOp2(v, OP_Integer, 1, target); - j5 = sqlite3VdbeAddOp0(v, OP_Goto); - sqlite3VdbeJumpHere(v, j3); - sqlite3VdbeJumpHere(v, j4); - sqlite3VdbeAddOp2(v, OP_Integer, 0, target); - }else{ - r2 = regFree2 = sqlite3GetTempReg(pParse); - - /* Create a record and test for set membership. If the set contains - ** the value, then jump to the end of the test code. The target - ** register still contains the true (1) value written to it earlier. - */ - sqlite3VdbeAddOp4(v, OP_MakeRecord, target, 1, r2, &affinity, 1); - sqlite3VdbeAddOp2(v, OP_Integer, 1, target); - j5 = sqlite3VdbeAddOp3(v, OP_Found, pExpr->iTable, 0, r2); - - /* If the set membership test fails, then the result of the - ** "x IN (...)" expression must be either 0 or NULL. If the set - ** contains no NULL values, then the result is 0. If the set - ** contains one or more NULL values, then the result of the - ** expression is also NULL. - */ - if( rNotFound==0 ){ - /* This branch runs if it is known at compile time (now) that - ** the set contains no NULL values. This happens as the result - ** of a "NOT NULL" constraint in the database schema. No need - ** to test the data structure at runtime in this case. - */ - sqlite3VdbeAddOp2(v, OP_Integer, 0, target); - }else{ - /* This block populates the rNotFound register with either NULL - ** or 0 (an integer value). If the data structure contains one - ** or more NULLs, then set rNotFound to NULL. Otherwise, set it - ** to 0. If register rMayHaveNull is already set to some value - ** other than NULL, then the test has already been run and - ** rNotFound is already populated. - */ - static const char nullRecord[] = { 0x02, 0x00 }; - j3 = sqlite3VdbeAddOp1(v, OP_NotNull, rMayHaveNull); - sqlite3VdbeAddOp2(v, OP_Null, 0, rNotFound); - sqlite3VdbeAddOp4(v, OP_Blob, 2, rMayHaveNull, 0, - nullRecord, P4_STATIC); - j4 = sqlite3VdbeAddOp3(v, OP_Found, pExpr->iTable, 0, rMayHaveNull); - sqlite3VdbeAddOp2(v, OP_Integer, 0, rNotFound); - sqlite3VdbeJumpHere(v, j4); - sqlite3VdbeJumpHere(v, j3); - - /* Copy the value of register rNotFound (which is either NULL or 0) - ** into the target register. This will be the result of the - ** expression. - */ - sqlite3VdbeAddOp2(v, OP_Copy, rNotFound, target); - } - } - sqlite3VdbeJumpHere(v, j2); - sqlite3VdbeJumpHere(v, j5); - sqlite3ExprCachePop(pParse, 1); - VdbeComment((v, "end IN expr r%d", target)); - break; + pOut->flags = MEM_Null; + if( u.bv.iCnt>1 ){ + rc = SQLITE_LOCKED; + p->errorAction = OE_Abort; + }else{ + u.bv.iDb = pOp->p3; + assert( u.bv.iCnt==1 ); + assert( (p->btreeMask & (((yDbMask)1)<aDb[u.bv.iDb].pBt, pOp->p1, &u.bv.iMoved); + pOut->flags = MEM_Int; + pOut->u.i = u.bv.iMoved; +#ifndef SQLITE_OMIT_AUTOVACUUM + if( rc==SQLITE_OK && u.bv.iMoved!=0 ){ + sqlite3RootPageMoved(db, u.bv.iDb, u.bv.iMoved, pOp->p1); + /* All OP_Destroy operations occur on the same btree */ + assert( resetSchemaOnFault==0 || resetSchemaOnFault==u.bv.iDb+1 ); + resetSchemaOnFault = u.bv.iDb+1; } #endif - /* - ** x BETWEEN y AND z - ** - ** This is equivalent to - ** - ** x>=y AND x<=z - ** - ** X is stored in pExpr->pLeft. - ** Y is stored in pExpr->pList->a[0].pExpr. - ** Z is stored in pExpr->pList->a[1].pExpr. - */ - case TK_BETWEEN: { - Expr *pLeft = pExpr->pLeft; - struct ExprList_item *pLItem = pExpr->x.pList->a; - Expr *pRight = pLItem->pExpr; - - codeCompareOperands(pParse, pLeft, &r1, ®Free1, - pRight, &r2, ®Free2); - testcase( regFree1==0 ); - testcase( regFree2==0 ); - r3 = sqlite3GetTempReg(pParse); - r4 = sqlite3GetTempReg(pParse); - codeCompare(pParse, pLeft, pRight, OP_Ge, - r1, r2, r3, SQLITE_STOREP2); - pLItem++; - pRight = pLItem->pExpr; - sqlite3ReleaseTempReg(pParse, regFree2); - r2 = sqlite3ExprCodeTemp(pParse, pRight, ®Free2); - testcase( regFree2==0 ); - codeCompare(pParse, pLeft, pRight, OP_Le, r1, r2, r4, SQLITE_STOREP2); - sqlite3VdbeAddOp3(v, OP_And, r3, r4, target); - sqlite3ReleaseTempReg(pParse, r3); - sqlite3ReleaseTempReg(pParse, r4); - break; - } - case TK_UPLUS: { - inReg = sqlite3ExprCodeTarget(pParse, pExpr->pLeft, target); - break; - } + } + break; +} - /* - ** Form A: - ** CASE x WHEN e1 THEN r1 WHEN e2 THEN r2 ... WHEN eN THEN rN ELSE y END - ** - ** Form B: - ** CASE WHEN e1 THEN r1 WHEN e2 THEN r2 ... WHEN eN THEN rN ELSE y END - ** - ** Form A is can be transformed into the equivalent form B as follows: - ** CASE WHEN x=e1 THEN r1 WHEN x=e2 THEN r2 ... - ** WHEN x=eN THEN rN ELSE y END - ** - ** X (if it exists) is in pExpr->pLeft. - ** Y is in pExpr->pRight. The Y is also optional. If there is no - ** ELSE clause and no other term matches, then the result of the - ** exprssion is NULL. - ** Ei is in pExpr->pList->a[i*2] and Ri is pExpr->pList->a[i*2+1]. - ** - ** The result of the expression is the Ri for the first matching Ei, - ** or if there is no matching Ei, the ELSE term Y, or if there is - ** no ELSE term, NULL. - */ - default: assert( op==TK_CASE ); { - int endLabel; /* GOTO label for end of CASE stmt */ - int nextCase; /* GOTO label for next WHEN clause */ - int nExpr; /* 2x number of WHEN terms */ - int i; /* Loop counter */ - ExprList *pEList; /* List of WHEN terms */ - struct ExprList_item *aListelem; /* Array of WHEN terms */ - Expr opCompare; /* The X==Ei expression */ - Expr cacheX; /* Cached expression X */ - Expr *pX; /* The X expression */ - Expr *pTest = 0; /* X==Ei (form A) or just Ei (form B) */ - VVA_ONLY( int iCacheLevel = pParse->iCacheLevel; ) +/* Opcode: Clear P1 P2 P3 +** +** Delete all contents of the database table or index whose root page +** in the database file is given by P1. But, unlike Destroy, do not +** remove the table or index from the database file. +** +** The table being clear is in the main database file if P2==0. If +** P2==1 then the table to be clear is in the auxiliary database file +** that is used to store tables create using CREATE TEMPORARY TABLE. +** +** If the P3 value is non-zero, then the table referred to must be an +** intkey table (an SQL table, not an index). In this case the row change +** count is incremented by the number of rows in the table being cleared. +** If P3 is greater than zero, then the value stored in register P3 is +** also incremented by the number of rows in the table being cleared. +** +** See also: Destroy +*/ +case OP_Clear: { +#if 0 /* local variables moved into u.bw */ + int nChange; +#endif /* local variables moved into u.bw */ - assert( !ExprHasProperty(pExpr, EP_xIsSelect) && pExpr->x.pList ); - assert((pExpr->x.pList->nExpr % 2) == 0); - assert(pExpr->x.pList->nExpr > 0); - pEList = pExpr->x.pList; - aListelem = pEList->a; - nExpr = pEList->nExpr; - endLabel = sqlite3VdbeMakeLabel(v); - if( (pX = pExpr->pLeft)!=0 ){ - cacheX = *pX; - testcase( pX->op==TK_COLUMN ); - testcase( pX->op==TK_REGISTER ); - cacheX.iTable = sqlite3ExprCodeTemp(pParse, pX, ®Free1); - testcase( regFree1==0 ); - cacheX.op = TK_REGISTER; - opCompare.op = TK_EQ; - opCompare.pLeft = &cacheX; - pTest = &opCompare; - } - for(i=0; iop==TK_COLUMN ); - sqlite3ExprIfFalse(pParse, pTest, nextCase, SQLITE_JUMPIFNULL); - testcase( aListelem[i+1].pExpr->op==TK_COLUMN ); - testcase( aListelem[i+1].pExpr->op==TK_REGISTER ); - sqlite3ExprCode(pParse, aListelem[i+1].pExpr, target); - sqlite3VdbeAddOp2(v, OP_Goto, 0, endLabel); - sqlite3ExprCachePop(pParse, 1); - sqlite3VdbeResolveLabel(v, nextCase); - } - if( pExpr->pRight ){ - sqlite3ExprCachePush(pParse); - sqlite3ExprCode(pParse, pExpr->pRight, target); - sqlite3ExprCachePop(pParse, 1); - }else{ - sqlite3VdbeAddOp2(v, OP_Null, 0, target); - } - assert( db->mallocFailed || pParse->nErr>0 - || pParse->iCacheLevel==iCacheLevel ); - sqlite3VdbeResolveLabel(v, endLabel); - break; - } -#ifndef SQLITE_OMIT_TRIGGER - case TK_RAISE: { - if( !pParse->trigStack ){ - sqlite3ErrorMsg(pParse, - "RAISE() may only be used within a trigger-program"); - return 0; - } - if( pExpr->affinity!=OE_Ignore ){ - assert( pExpr->affinity==OE_Rollback || - pExpr->affinity == OE_Abort || - pExpr->affinity == OE_Fail ); - assert( !ExprHasProperty(pExpr, EP_IntValue) ); - sqlite3VdbeAddOp4(v, OP_Halt, SQLITE_CONSTRAINT, pExpr->affinity, 0, - pExpr->u.zToken, 0); - } else { - assert( pExpr->affinity == OE_Ignore ); - sqlite3VdbeAddOp2(v, OP_ContextPop, 0, 0); - sqlite3VdbeAddOp2(v, OP_Goto, 0, pParse->trigStack->ignoreJump); - VdbeComment((v, "raise(IGNORE)")); - } - break; + u.bw.nChange = 0; + assert( (p->btreeMask & (((yDbMask)1)<p2))!=0 ); + rc = sqlite3BtreeClearTable( + db->aDb[pOp->p2].pBt, pOp->p1, (pOp->p3 ? &u.bw.nChange : 0) + ); + if( pOp->p3 ){ + p->nChange += u.bw.nChange; + if( pOp->p3>0 ){ + assert( memIsValid(&aMem[pOp->p3]) ); + memAboutToChange(p, &aMem[pOp->p3]); + aMem[pOp->p3].u.i += u.bw.nChange; } -#endif } - sqlite3ReleaseTempReg(pParse, regFree1); - sqlite3ReleaseTempReg(pParse, regFree2); - return inReg; + break; } -/* -** Generate code to evaluate an expression and store the results -** into a register. Return the register number where the results -** are stored. +/* Opcode: CreateTable P1 P2 * * * ** -** If the register is a temporary register that can be deallocated, -** then write its number into *pReg. If the result register is not -** a temporary, then set *pReg to zero. +** Allocate a new table in the main database file if P1==0 or in the +** auxiliary database file if P1==1 or in an attached database if +** P1>1. Write the root page number of the new table into +** register P2 +** +** The difference between a table and an index is this: A table must +** have a 4-byte integer key and can have arbitrary data. An index +** has an arbitrary key but no data. +** +** See also: CreateIndex */ -SQLITE_PRIVATE int sqlite3ExprCodeTemp(Parse *pParse, Expr *pExpr, int *pReg){ - int r1 = sqlite3GetTempReg(pParse); - int r2 = sqlite3ExprCodeTarget(pParse, pExpr, r1); - if( r2==r1 ){ - *pReg = r1; +/* Opcode: CreateIndex P1 P2 * * * +** +** Allocate a new index in the main database file if P1==0 or in the +** auxiliary database file if P1==1 or in an attached database if +** P1>1. Write the root page number of the new table into +** register P2. +** +** See documentation on OP_CreateTable for additional information. +*/ +case OP_CreateIndex: /* out2-prerelease */ +case OP_CreateTable: { /* out2-prerelease */ +#if 0 /* local variables moved into u.bx */ + int pgno; + int flags; + Db *pDb; +#endif /* local variables moved into u.bx */ + + u.bx.pgno = 0; + assert( pOp->p1>=0 && pOp->p1nDb ); + assert( (p->btreeMask & (((yDbMask)1)<p1))!=0 ); + u.bx.pDb = &db->aDb[pOp->p1]; + assert( u.bx.pDb->pBt!=0 ); + if( pOp->opcode==OP_CreateTable ){ + /* u.bx.flags = BTREE_INTKEY; */ + u.bx.flags = BTREE_INTKEY; }else{ - sqlite3ReleaseTempReg(pParse, r1); - *pReg = 0; + u.bx.flags = BTREE_BLOBKEY; } - return r2; + rc = sqlite3BtreeCreateTable(u.bx.pDb->pBt, &u.bx.pgno, u.bx.flags); + pOut->u.i = u.bx.pgno; + break; } -/* -** Generate code that will evaluate expression pExpr and store the -** results in register target. The results are guaranteed to appear -** in register target. +/* Opcode: ParseSchema P1 * * P4 * +** +** Read and parse all entries from the SQLITE_MASTER table of database P1 +** that match the WHERE clause P4. +** +** This opcode invokes the parser to create a new virtual machine, +** then runs the new virtual machine. It is thus a re-entrant opcode. */ -SQLITE_PRIVATE int sqlite3ExprCode(Parse *pParse, Expr *pExpr, int target){ - int inReg; +case OP_ParseSchema: { +#if 0 /* local variables moved into u.by */ + int iDb; + const char *zMaster; + char *zSql; + InitData initData; +#endif /* local variables moved into u.by */ - assert( target>0 && target<=pParse->nMem ); - inReg = sqlite3ExprCodeTarget(pParse, pExpr, target); - assert( pParse->pVdbe || pParse->db->mallocFailed ); - if( inReg!=target && pParse->pVdbe ){ - sqlite3VdbeAddOp2(pParse->pVdbe, OP_SCopy, inReg, target); + /* Any prepared statement that invokes this opcode will hold mutexes + ** on every btree. This is a prerequisite for invoking + ** sqlite3InitCallback(). + */ +#ifdef SQLITE_DEBUG + for(u.by.iDb=0; u.by.iDbnDb; u.by.iDb++){ + assert( u.by.iDb==1 || sqlite3BtreeHoldsMutex(db->aDb[u.by.iDb].pBt) ); + } +#endif + + u.by.iDb = pOp->p1; + assert( u.by.iDb>=0 && u.by.iDbnDb ); + assert( DbHasProperty(db, u.by.iDb, DB_SchemaLoaded) ); + /* Used to be a conditional */ { + u.by.zMaster = SCHEMA_TABLE(u.by.iDb); + u.by.initData.db = db; + u.by.initData.iDb = pOp->p1; + u.by.initData.pzErrMsg = &p->zErrMsg; + u.by.zSql = sqlite3MPrintf(db, + "SELECT name, rootpage, sql FROM '%q'.%s WHERE %s ORDER BY rowid", + db->aDb[u.by.iDb].zName, u.by.zMaster, pOp->p4.z); + if( u.by.zSql==0 ){ + rc = SQLITE_NOMEM; + }else{ + assert( db->init.busy==0 ); + db->init.busy = 1; + u.by.initData.rc = SQLITE_OK; + assert( !db->mallocFailed ); + rc = sqlite3_exec(db, u.by.zSql, sqlite3InitCallback, &u.by.initData, 0); + if( rc==SQLITE_OK ) rc = u.by.initData.rc; + sqlite3DbFree(db, u.by.zSql); + db->init.busy = 0; + } } - return target; + if( rc ) sqlite3ResetAllSchemasOfConnection(db); + if( rc==SQLITE_NOMEM ){ + goto no_mem; + } + break; } -/* -** Generate code that evalutes the given expression and puts the result -** in register target. -** -** Also make a copy of the expression results into another "cache" register -** and modify the expression so that the next time it is evaluated, -** the result is a copy of the cache register. +#if !defined(SQLITE_OMIT_ANALYZE) +/* Opcode: LoadAnalysis P1 * * * * ** -** This routine is used for expressions that are used multiple -** times. They are evaluated once and the results of the expression -** are reused. +** Read the sqlite_stat1 table for database P1 and load the content +** of that table into the internal index hash table. This will cause +** the analysis to be used when preparing all subsequent queries. */ -SQLITE_PRIVATE int sqlite3ExprCodeAndCache(Parse *pParse, Expr *pExpr, int target){ - Vdbe *v = pParse->pVdbe; - int inReg; - inReg = sqlite3ExprCode(pParse, pExpr, target); - assert( target>0 ); - /* This routine is called for terms to INSERT or UPDATE. And the only - ** other place where expressions can be converted into TK_REGISTER is - ** in WHERE clause processing. So as currently implemented, there is - ** no way for a TK_REGISTER to exist here. But it seems prudent to - ** keep the ALWAYS() in case the conditions above change with future - ** modifications or enhancements. */ - if( ALWAYS(pExpr->op!=TK_REGISTER) ){ - int iMem; - iMem = ++pParse->nMem; - sqlite3VdbeAddOp2(v, OP_Copy, inReg, iMem); - pExpr->iTable = iMem; - pExpr->op = TK_REGISTER; - } - return inReg; +case OP_LoadAnalysis: { + assert( pOp->p1>=0 && pOp->p1nDb ); + rc = sqlite3AnalysisLoad(db, pOp->p1); + break; } +#endif /* !defined(SQLITE_OMIT_ANALYZE) */ -/* -** Return TRUE if pExpr is an constant expression that is appropriate -** for factoring out of a loop. Appropriate expressions are: +/* Opcode: DropTable P1 * * P4 * ** -** * Any expression that evaluates to two or more opcodes. +** Remove the internal (in-memory) data structures that describe +** the table named P4 in database P1. This is called after a table +** is dropped in order to keep the internal representation of the +** schema consistent with what is on disk. +*/ +case OP_DropTable: { + sqlite3UnlinkAndDeleteTable(db, pOp->p1, pOp->p4.z); + break; +} + +/* Opcode: DropIndex P1 * * P4 * ** -** * Any OP_Integer, OP_Real, OP_String, OP_Blob, OP_Null, -** or OP_Variable that does not need to be placed in a -** specific register. +** Remove the internal (in-memory) data structures that describe +** the index named P4 in database P1. This is called after an index +** is dropped in order to keep the internal representation of the +** schema consistent with what is on disk. +*/ +case OP_DropIndex: { + sqlite3UnlinkAndDeleteIndex(db, pOp->p1, pOp->p4.z); + break; +} + +/* Opcode: DropTrigger P1 * * P4 * ** -** There is no point in factoring out single-instruction constant -** expressions that need to be placed in a particular register. -** We could factor them out, but then we would end up adding an -** OP_SCopy instruction to move the value into the correct register -** later. We might as well just use the original instruction and -** avoid the OP_SCopy. +** Remove the internal (in-memory) data structures that describe +** the trigger named P4 in database P1. This is called after a trigger +** is dropped in order to keep the internal representation of the +** schema consistent with what is on disk. */ -static int isAppropriateForFactoring(Expr *p){ - if( !sqlite3ExprIsConstantNotJoin(p) ){ - return 0; /* Only constant expressions are appropriate for factoring */ - } - if( (p->flags & EP_FixedDest)==0 ){ - return 1; /* Any constant without a fixed destination is appropriate */ - } - while( p->op==TK_UPLUS ) p = p->pLeft; - switch( p->op ){ -#ifndef SQLITE_OMIT_BLOB_LITERAL - case TK_BLOB: -#endif - case TK_VARIABLE: - case TK_INTEGER: - case TK_FLOAT: - case TK_NULL: - case TK_STRING: { - testcase( p->op==TK_BLOB ); - testcase( p->op==TK_VARIABLE ); - testcase( p->op==TK_INTEGER ); - testcase( p->op==TK_FLOAT ); - testcase( p->op==TK_NULL ); - testcase( p->op==TK_STRING ); - /* Single-instruction constants with a fixed destination are - ** better done in-line. If we factor them, they will just end - ** up generating an OP_SCopy to move the value to the destination - ** register. */ - return 0; - } - case TK_UMINUS: { - if( p->pLeft->op==TK_FLOAT || p->pLeft->op==TK_INTEGER ){ - return 0; - } - break; - } - default: { - break; - } - } - return 1; +case OP_DropTrigger: { + sqlite3UnlinkAndDeleteTrigger(db, pOp->p1, pOp->p4.z); + break; } -/* -** If pExpr is a constant expression that is appropriate for -** factoring out of a loop, then evaluate the expression -** into a register and convert the expression into a TK_REGISTER -** expression. + +#ifndef SQLITE_OMIT_INTEGRITY_CHECK +/* Opcode: IntegrityCk P1 P2 P3 * P5 +** +** Do an analysis of the currently open database. Store in +** register P1 the text of an error message describing any problems. +** If no problems are found, store a NULL in register P1. +** +** The register P3 contains the maximum number of allowed errors. +** At most reg(P3) errors will be reported. +** In other words, the analysis stops as soon as reg(P1) errors are +** seen. Reg(P1) is updated with the number of errors remaining. +** +** The root page numbers of all tables in the database are integer +** stored in reg(P1), reg(P1+1), reg(P1+2), .... There are P2 tables +** total. +** +** If P5 is not zero, the check is done on the auxiliary database +** file, not the main database file. +** +** This opcode is used to implement the integrity_check pragma. */ -static int evalConstExpr(Walker *pWalker, Expr *pExpr){ - Parse *pParse = pWalker->pParse; - switch( pExpr->op ){ - case TK_REGISTER: { - return WRC_Prune; - } - case TK_FUNCTION: - case TK_AGG_FUNCTION: - case TK_CONST_FUNC: { - /* The arguments to a function have a fixed destination. - ** Mark them this way to avoid generated unneeded OP_SCopy - ** instructions. - */ - ExprList *pList = pExpr->x.pList; - assert( !ExprHasProperty(pExpr, EP_xIsSelect) ); - if( pList ){ - int i = pList->nExpr; - struct ExprList_item *pItem = pList->a; - for(; i>0; i--, pItem++){ - if( ALWAYS(pItem->pExpr) ) pItem->pExpr->flags |= EP_FixedDest; - } - } - break; - } - } - if( isAppropriateForFactoring(pExpr) ){ - int r1 = ++pParse->nMem; - int r2; - r2 = sqlite3ExprCodeTarget(pParse, pExpr, r1); - if( NEVER(r1!=r2) ) sqlite3ReleaseTempReg(pParse, r1); - pExpr->op = TK_REGISTER; - pExpr->iTable = r2; - return WRC_Prune; +case OP_IntegrityCk: { +#if 0 /* local variables moved into u.bz */ + int nRoot; /* Number of tables to check. (Number of root pages.) */ + int *aRoot; /* Array of rootpage numbers for tables to be checked */ + int j; /* Loop counter */ + int nErr; /* Number of errors reported */ + char *z; /* Text of the error report */ + Mem *pnErr; /* Register keeping track of errors remaining */ +#endif /* local variables moved into u.bz */ + + u.bz.nRoot = pOp->p2; + assert( u.bz.nRoot>0 ); + u.bz.aRoot = sqlite3DbMallocRaw(db, sizeof(int)*(u.bz.nRoot+1) ); + if( u.bz.aRoot==0 ) goto no_mem; + assert( pOp->p3>0 && pOp->p3<=p->nMem ); + u.bz.pnErr = &aMem[pOp->p3]; + assert( (u.bz.pnErr->flags & MEM_Int)!=0 ); + assert( (u.bz.pnErr->flags & (MEM_Str|MEM_Blob))==0 ); + pIn1 = &aMem[pOp->p1]; + for(u.bz.j=0; u.bz.jp5nDb ); + assert( (p->btreeMask & (((yDbMask)1)<p5))!=0 ); + u.bz.z = sqlite3BtreeIntegrityCheck(db->aDb[pOp->p5].pBt, u.bz.aRoot, u.bz.nRoot, + (int)u.bz.pnErr->u.i, &u.bz.nErr); + sqlite3DbFree(db, u.bz.aRoot); + u.bz.pnErr->u.i -= u.bz.nErr; + sqlite3VdbeMemSetNull(pIn1); + if( u.bz.nErr==0 ){ + assert( u.bz.z==0 ); + }else if( u.bz.z==0 ){ + goto no_mem; + }else{ + sqlite3VdbeMemSetStr(pIn1, u.bz.z, -1, SQLITE_UTF8, sqlite3_free); } - return WRC_Continue; + UPDATE_MAX_BLOBSIZE(pIn1); + sqlite3VdbeChangeEncoding(pIn1, encoding); + break; } +#endif /* SQLITE_OMIT_INTEGRITY_CHECK */ -/* -** Preevaluate constant subexpressions within pExpr and store the -** results in registers. Modify pExpr so that the constant subexpresions -** are TK_REGISTER opcodes that refer to the precomputed values. +/* Opcode: RowSetAdd P1 P2 * * * +** +** Insert the integer value held by register P2 into a boolean index +** held in register P1. +** +** An assertion fails if P2 is not an integer. */ -SQLITE_PRIVATE void sqlite3ExprCodeConstants(Parse *pParse, Expr *pExpr){ - Walker w; - w.xExprCallback = evalConstExpr; - w.xSelectCallback = 0; - w.pParse = pParse; - sqlite3WalkExpr(&w, pExpr); +case OP_RowSetAdd: { /* in1, in2 */ + pIn1 = &aMem[pOp->p1]; + pIn2 = &aMem[pOp->p2]; + assert( (pIn2->flags & MEM_Int)!=0 ); + if( (pIn1->flags & MEM_RowSet)==0 ){ + sqlite3VdbeMemSetRowSet(pIn1); + if( (pIn1->flags & MEM_RowSet)==0 ) goto no_mem; + } + sqlite3RowSetInsert(pIn1->u.pRowSet, pIn2->u.i); + break; } - -/* -** Generate code that pushes the value of every element of the given -** expression list into a sequence of registers beginning at target. +/* Opcode: RowSetRead P1 P2 P3 * * ** -** Return the number of elements evaluated. +** Extract the smallest value from boolean index P1 and put that value into +** register P3. Or, if boolean index P1 is initially empty, leave P3 +** unchanged and jump to instruction P2. */ -SQLITE_PRIVATE int sqlite3ExprCodeExprList( - Parse *pParse, /* Parsing context */ - ExprList *pList, /* The expression list to be coded */ - int target, /* Where to write results */ - int doHardCopy /* Make a hard copy of every element */ -){ - struct ExprList_item *pItem; - int i, n; - assert( pList!=0 ); - assert( target>0 ); - n = pList->nExpr; - for(pItem=pList->a, i=0; iiAlias ){ - int iReg = codeAlias(pParse, pItem->iAlias, pItem->pExpr, target+i); - Vdbe *v = sqlite3GetVdbe(pParse); - if( iReg!=target+i ){ - sqlite3VdbeAddOp2(v, OP_SCopy, iReg, target+i); - } - }else{ - sqlite3ExprCode(pParse, pItem->pExpr, target+i); - } - if( doHardCopy && !pParse->db->mallocFailed ){ - sqlite3ExprHardCopy(pParse, target, n); - } +case OP_RowSetRead: { /* jump, in1, out3 */ +#if 0 /* local variables moved into u.ca */ + i64 val; +#endif /* local variables moved into u.ca */ + CHECK_FOR_INTERRUPT; + pIn1 = &aMem[pOp->p1]; + if( (pIn1->flags & MEM_RowSet)==0 + || sqlite3RowSetNext(pIn1->u.pRowSet, &u.ca.val)==0 + ){ + /* The boolean index is empty */ + sqlite3VdbeMemSetNull(pIn1); + pc = pOp->p2 - 1; + }else{ + /* A value was pulled from the index */ + sqlite3VdbeMemSetInt64(&aMem[pOp->p3], u.ca.val); } - return n; + break; } -/* -** Generate code for a boolean expression such that a jump is made -** to the label "dest" if the expression is true but execution -** continues straight thru if the expression is false. +/* Opcode: RowSetTest P1 P2 P3 P4 ** -** If the expression evaluates to NULL (neither true nor false), then -** take the jump if the jumpIfNull flag is SQLITE_JUMPIFNULL. +** Register P3 is assumed to hold a 64-bit integer value. If register P1 +** contains a RowSet object and that RowSet object contains +** the value held in P3, jump to register P2. Otherwise, insert the +** integer in P3 into the RowSet and continue on to the +** next opcode. ** -** This code depends on the fact that certain token values (ex: TK_EQ) -** are the same as opcode values (ex: OP_Eq) that implement the corresponding -** operation. Special comments in vdbe.c and the mkopcodeh.awk script in -** the make process cause these values to align. Assert()s in the code -** below verify that the numbers are aligned correctly. +** The RowSet object is optimized for the case where successive sets +** of integers, where each set contains no duplicates. Each set +** of values is identified by a unique P4 value. The first set +** must have P4==0, the final set P4=-1. P4 must be either -1 or +** non-negative. For non-negative values of P4 only the lower 4 +** bits are significant. +** +** This allows optimizations: (a) when P4==0 there is no need to test +** the rowset object for P3, as it is guaranteed not to contain it, +** (b) when P4==-1 there is no need to insert the value, as it will +** never be tested for, and (c) when a value that is part of set X is +** inserted, there is no need to search to see if the same value was +** previously inserted as part of set X (only if it was previously +** inserted as part of some other set). */ -SQLITE_PRIVATE void sqlite3ExprIfTrue(Parse *pParse, Expr *pExpr, int dest, int jumpIfNull){ - Vdbe *v = pParse->pVdbe; - int op = 0; - int regFree1 = 0; - int regFree2 = 0; - int r1, r2; +case OP_RowSetTest: { /* jump, in1, in3 */ +#if 0 /* local variables moved into u.cb */ + int iSet; + int exists; +#endif /* local variables moved into u.cb */ - assert( jumpIfNull==SQLITE_JUMPIFNULL || jumpIfNull==0 ); - if( NEVER(v==0) ) return; /* Existance of VDBE checked by caller */ - if( NEVER(pExpr==0) ) return; /* No way this can happen */ - op = pExpr->op; - switch( op ){ - case TK_AND: { - int d2 = sqlite3VdbeMakeLabel(v); - testcase( jumpIfNull==0 ); - sqlite3ExprCachePush(pParse); - sqlite3ExprIfFalse(pParse, pExpr->pLeft, d2,jumpIfNull^SQLITE_JUMPIFNULL); - sqlite3ExprIfTrue(pParse, pExpr->pRight, dest, jumpIfNull); - sqlite3VdbeResolveLabel(v, d2); - sqlite3ExprCachePop(pParse, 1); - break; - } - case TK_OR: { - testcase( jumpIfNull==0 ); - sqlite3ExprIfTrue(pParse, pExpr->pLeft, dest, jumpIfNull); - sqlite3ExprIfTrue(pParse, pExpr->pRight, dest, jumpIfNull); - break; - } - case TK_NOT: { - testcase( jumpIfNull==0 ); - sqlite3ExprIfFalse(pParse, pExpr->pLeft, dest, jumpIfNull); - break; - } - case TK_LT: - case TK_LE: - case TK_GT: - case TK_GE: - case TK_NE: - case TK_EQ: { - assert( TK_LT==OP_Lt ); - assert( TK_LE==OP_Le ); - assert( TK_GT==OP_Gt ); - assert( TK_GE==OP_Ge ); - assert( TK_EQ==OP_Eq ); - assert( TK_NE==OP_Ne ); - testcase( op==TK_LT ); - testcase( op==TK_LE ); - testcase( op==TK_GT ); - testcase( op==TK_GE ); - testcase( op==TK_EQ ); - testcase( op==TK_NE ); - testcase( jumpIfNull==0 ); - codeCompareOperands(pParse, pExpr->pLeft, &r1, ®Free1, - pExpr->pRight, &r2, ®Free2); - codeCompare(pParse, pExpr->pLeft, pExpr->pRight, op, - r1, r2, dest, jumpIfNull); - testcase( regFree1==0 ); - testcase( regFree2==0 ); - break; - } - case TK_ISNULL: - case TK_NOTNULL: { - assert( TK_ISNULL==OP_IsNull ); - assert( TK_NOTNULL==OP_NotNull ); - testcase( op==TK_ISNULL ); - testcase( op==TK_NOTNULL ); - r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, ®Free1); - sqlite3VdbeAddOp2(v, op, r1, dest); - testcase( regFree1==0 ); - break; - } - case TK_BETWEEN: { - /* x BETWEEN y AND z - ** - ** Is equivalent to - ** - ** x>=y AND x<=z - ** - ** Code it as such, taking care to do the common subexpression - ** elementation of x. - */ - Expr exprAnd; - Expr compLeft; - Expr compRight; - Expr exprX; + pIn1 = &aMem[pOp->p1]; + pIn3 = &aMem[pOp->p3]; + u.cb.iSet = pOp->p4.i; + assert( pIn3->flags&MEM_Int ); - assert( !ExprHasProperty(pExpr, EP_xIsSelect) ); - exprX = *pExpr->pLeft; - exprAnd.op = TK_AND; - exprAnd.pLeft = &compLeft; - exprAnd.pRight = &compRight; - compLeft.op = TK_GE; - compLeft.pLeft = &exprX; - compLeft.pRight = pExpr->x.pList->a[0].pExpr; - compRight.op = TK_LE; - compRight.pLeft = &exprX; - compRight.pRight = pExpr->x.pList->a[1].pExpr; - exprX.iTable = sqlite3ExprCodeTemp(pParse, &exprX, ®Free1); - testcase( regFree1==0 ); - exprX.op = TK_REGISTER; - testcase( jumpIfNull==0 ); - sqlite3ExprIfTrue(pParse, &exprAnd, dest, jumpIfNull); - break; - } - default: { - r1 = sqlite3ExprCodeTemp(pParse, pExpr, ®Free1); - sqlite3VdbeAddOp3(v, OP_If, r1, dest, jumpIfNull!=0); - testcase( regFree1==0 ); - testcase( jumpIfNull==0 ); + /* If there is anything other than a rowset object in memory cell P1, + ** delete it now and initialize P1 with an empty rowset + */ + if( (pIn1->flags & MEM_RowSet)==0 ){ + sqlite3VdbeMemSetRowSet(pIn1); + if( (pIn1->flags & MEM_RowSet)==0 ) goto no_mem; + } + + assert( pOp->p4type==P4_INT32 ); + assert( u.cb.iSet==-1 || u.cb.iSet>=0 ); + if( u.cb.iSet ){ + u.cb.exists = sqlite3RowSetTest(pIn1->u.pRowSet, + (u8)(u.cb.iSet>=0 ? u.cb.iSet & 0xf : 0xff), + pIn3->u.i); + if( u.cb.exists ){ + pc = pOp->p2 - 1; break; } } - sqlite3ReleaseTempReg(pParse, regFree1); - sqlite3ReleaseTempReg(pParse, regFree2); + if( u.cb.iSet>=0 ){ + sqlite3RowSetInsert(pIn1->u.pRowSet, pIn3->u.i); + } + break; } -/* -** Generate code for a boolean expression such that a jump is made -** to the label "dest" if the expression is false but execution -** continues straight thru if the expression is true. + +#ifndef SQLITE_OMIT_TRIGGER + +/* Opcode: Program P1 P2 P3 P4 * ** -** If the expression evaluates to NULL (neither true nor false) then -** jump if jumpIfNull is SQLITE_JUMPIFNULL or fall through if jumpIfNull -** is 0. +** Execute the trigger program passed as P4 (type P4_SUBPROGRAM). +** +** P1 contains the address of the memory cell that contains the first memory +** cell in an array of values used as arguments to the sub-program. P2 +** contains the address to jump to if the sub-program throws an IGNORE +** exception using the RAISE() function. Register P3 contains the address +** of a memory cell in this (the parent) VM that is used to allocate the +** memory required by the sub-vdbe at runtime. +** +** P4 is a pointer to the VM containing the trigger program. */ -SQLITE_PRIVATE void sqlite3ExprIfFalse(Parse *pParse, Expr *pExpr, int dest, int jumpIfNull){ - Vdbe *v = pParse->pVdbe; - int op = 0; - int regFree1 = 0; - int regFree2 = 0; - int r1, r2; +case OP_Program: { /* jump */ +#if 0 /* local variables moved into u.cc */ + int nMem; /* Number of memory registers for sub-program */ + int nByte; /* Bytes of runtime space required for sub-program */ + Mem *pRt; /* Register to allocate runtime space */ + Mem *pMem; /* Used to iterate through memory cells */ + Mem *pEnd; /* Last memory cell in new array */ + VdbeFrame *pFrame; /* New vdbe frame to execute in */ + SubProgram *pProgram; /* Sub-program to execute */ + void *t; /* Token identifying trigger */ +#endif /* local variables moved into u.cc */ - assert( jumpIfNull==SQLITE_JUMPIFNULL || jumpIfNull==0 ); - if( NEVER(v==0) ) return; /* Existance of VDBE checked by caller */ - if( pExpr==0 ) return; + u.cc.pProgram = pOp->p4.pProgram; + u.cc.pRt = &aMem[pOp->p3]; + assert( u.cc.pProgram->nOp>0 ); - /* The value of pExpr->op and op are related as follows: - ** - ** pExpr->op op - ** --------- ---------- - ** TK_ISNULL OP_NotNull - ** TK_NOTNULL OP_IsNull - ** TK_NE OP_Eq - ** TK_EQ OP_Ne - ** TK_GT OP_Le - ** TK_LE OP_Gt - ** TK_GE OP_Lt - ** TK_LT OP_Ge + /* If the p5 flag is clear, then recursive invocation of triggers is + ** disabled for backwards compatibility (p5 is set if this sub-program + ** is really a trigger, not a foreign key action, and the flag set + ** and cleared by the "PRAGMA recursive_triggers" command is clear). ** - ** For other values of pExpr->op, op is undefined and unused. - ** The value of TK_ and OP_ constants are arranged such that we - ** can compute the mapping above using the following expression. - ** Assert()s verify that the computation is correct. - */ - op = ((pExpr->op+(TK_ISNULL&1))^1)-(TK_ISNULL&1); - - /* Verify correct alignment of TK_ and OP_ constants - */ - assert( pExpr->op!=TK_ISNULL || op==OP_NotNull ); - assert( pExpr->op!=TK_NOTNULL || op==OP_IsNull ); - assert( pExpr->op!=TK_NE || op==OP_Eq ); - assert( pExpr->op!=TK_EQ || op==OP_Ne ); - assert( pExpr->op!=TK_LT || op==OP_Ge ); - assert( pExpr->op!=TK_LE || op==OP_Gt ); - assert( pExpr->op!=TK_GT || op==OP_Le ); - assert( pExpr->op!=TK_GE || op==OP_Lt ); + ** It is recursive invocation of triggers, at the SQL level, that is + ** disabled. In some cases a single trigger may generate more than one + ** SubProgram (if the trigger may be executed with more than one different + ** ON CONFLICT algorithm). SubProgram structures associated with a + ** single trigger all have the same value for the SubProgram.token + ** variable. */ + if( pOp->p5 ){ + u.cc.t = u.cc.pProgram->token; + for(u.cc.pFrame=p->pFrame; u.cc.pFrame && u.cc.pFrame->token!=u.cc.t; u.cc.pFrame=u.cc.pFrame->pParent); + if( u.cc.pFrame ) break; + } - switch( pExpr->op ){ - case TK_AND: { - testcase( jumpIfNull==0 ); - sqlite3ExprIfFalse(pParse, pExpr->pLeft, dest, jumpIfNull); - sqlite3ExprIfFalse(pParse, pExpr->pRight, dest, jumpIfNull); - break; - } - case TK_OR: { - int d2 = sqlite3VdbeMakeLabel(v); - testcase( jumpIfNull==0 ); - sqlite3ExprCachePush(pParse); - sqlite3ExprIfTrue(pParse, pExpr->pLeft, d2, jumpIfNull^SQLITE_JUMPIFNULL); - sqlite3ExprIfFalse(pParse, pExpr->pRight, dest, jumpIfNull); - sqlite3VdbeResolveLabel(v, d2); - sqlite3ExprCachePop(pParse, 1); - break; - } - case TK_NOT: { - sqlite3ExprIfTrue(pParse, pExpr->pLeft, dest, jumpIfNull); - break; - } - case TK_LT: - case TK_LE: - case TK_GT: - case TK_GE: - case TK_NE: - case TK_EQ: { - testcase( op==TK_LT ); - testcase( op==TK_LE ); - testcase( op==TK_GT ); - testcase( op==TK_GE ); - testcase( op==TK_EQ ); - testcase( op==TK_NE ); - testcase( jumpIfNull==0 ); - codeCompareOperands(pParse, pExpr->pLeft, &r1, ®Free1, - pExpr->pRight, &r2, ®Free2); - codeCompare(pParse, pExpr->pLeft, pExpr->pRight, op, - r1, r2, dest, jumpIfNull); - testcase( regFree1==0 ); - testcase( regFree2==0 ); - break; - } - case TK_ISNULL: - case TK_NOTNULL: { - testcase( op==TK_ISNULL ); - testcase( op==TK_NOTNULL ); - r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, ®Free1); - sqlite3VdbeAddOp2(v, op, r1, dest); - testcase( regFree1==0 ); - break; - } - case TK_BETWEEN: { - /* x BETWEEN y AND z - ** - ** Is equivalent to - ** - ** x>=y AND x<=z - ** - ** Code it as such, taking care to do the common subexpression - ** elementation of x. - */ - Expr exprAnd; - Expr compLeft; - Expr compRight; - Expr exprX; + if( p->nFrame>=db->aLimit[SQLITE_LIMIT_TRIGGER_DEPTH] ){ + rc = SQLITE_ERROR; + sqlite3SetString(&p->zErrMsg, db, "too many levels of trigger recursion"); + break; + } - assert( !ExprHasProperty(pExpr, EP_xIsSelect) ); - exprX = *pExpr->pLeft; - exprAnd.op = TK_AND; - exprAnd.pLeft = &compLeft; - exprAnd.pRight = &compRight; - compLeft.op = TK_GE; - compLeft.pLeft = &exprX; - compLeft.pRight = pExpr->x.pList->a[0].pExpr; - compRight.op = TK_LE; - compRight.pLeft = &exprX; - compRight.pRight = pExpr->x.pList->a[1].pExpr; - exprX.iTable = sqlite3ExprCodeTemp(pParse, &exprX, ®Free1); - testcase( regFree1==0 ); - exprX.op = TK_REGISTER; - testcase( jumpIfNull==0 ); - sqlite3ExprIfFalse(pParse, &exprAnd, dest, jumpIfNull); - break; + /* Register u.cc.pRt is used to store the memory required to save the state + ** of the current program, and the memory required at runtime to execute + ** the trigger program. If this trigger has been fired before, then u.cc.pRt + ** is already allocated. Otherwise, it must be initialized. */ + if( (u.cc.pRt->flags&MEM_Frame)==0 ){ + /* SubProgram.nMem is set to the number of memory cells used by the + ** program stored in SubProgram.aOp. As well as these, one memory + ** cell is required for each cursor used by the program. Set local + ** variable u.cc.nMem (and later, VdbeFrame.nChildMem) to this value. + */ + u.cc.nMem = u.cc.pProgram->nMem + u.cc.pProgram->nCsr; + u.cc.nByte = ROUND8(sizeof(VdbeFrame)) + + u.cc.nMem * sizeof(Mem) + + u.cc.pProgram->nCsr * sizeof(VdbeCursor *) + + u.cc.pProgram->nOnce * sizeof(u8); + u.cc.pFrame = sqlite3DbMallocZero(db, u.cc.nByte); + if( !u.cc.pFrame ){ + goto no_mem; } - default: { - r1 = sqlite3ExprCodeTemp(pParse, pExpr, ®Free1); - sqlite3VdbeAddOp3(v, OP_IfNot, r1, dest, jumpIfNull!=0); - testcase( regFree1==0 ); - testcase( jumpIfNull==0 ); - break; + sqlite3VdbeMemRelease(u.cc.pRt); + u.cc.pRt->flags = MEM_Frame; + u.cc.pRt->u.pFrame = u.cc.pFrame; + + u.cc.pFrame->v = p; + u.cc.pFrame->nChildMem = u.cc.nMem; + u.cc.pFrame->nChildCsr = u.cc.pProgram->nCsr; + u.cc.pFrame->pc = pc; + u.cc.pFrame->aMem = p->aMem; + u.cc.pFrame->nMem = p->nMem; + u.cc.pFrame->apCsr = p->apCsr; + u.cc.pFrame->nCursor = p->nCursor; + u.cc.pFrame->aOp = p->aOp; + u.cc.pFrame->nOp = p->nOp; + u.cc.pFrame->token = u.cc.pProgram->token; + u.cc.pFrame->aOnceFlag = p->aOnceFlag; + u.cc.pFrame->nOnceFlag = p->nOnceFlag; + + u.cc.pEnd = &VdbeFrameMem(u.cc.pFrame)[u.cc.pFrame->nChildMem]; + for(u.cc.pMem=VdbeFrameMem(u.cc.pFrame); u.cc.pMem!=u.cc.pEnd; u.cc.pMem++){ + u.cc.pMem->flags = MEM_Invalid; + u.cc.pMem->db = db; } + }else{ + u.cc.pFrame = u.cc.pRt->u.pFrame; + assert( u.cc.pProgram->nMem+u.cc.pProgram->nCsr==u.cc.pFrame->nChildMem ); + assert( u.cc.pProgram->nCsr==u.cc.pFrame->nChildCsr ); + assert( pc==u.cc.pFrame->pc ); } - sqlite3ReleaseTempReg(pParse, regFree1); - sqlite3ReleaseTempReg(pParse, regFree2); + + p->nFrame++; + u.cc.pFrame->pParent = p->pFrame; + u.cc.pFrame->lastRowid = lastRowid; + u.cc.pFrame->nChange = p->nChange; + p->nChange = 0; + p->pFrame = u.cc.pFrame; + p->aMem = aMem = &VdbeFrameMem(u.cc.pFrame)[-1]; + p->nMem = u.cc.pFrame->nChildMem; + p->nCursor = (u16)u.cc.pFrame->nChildCsr; + p->apCsr = (VdbeCursor **)&aMem[p->nMem+1]; + p->aOp = aOp = u.cc.pProgram->aOp; + p->nOp = u.cc.pProgram->nOp; + p->aOnceFlag = (u8 *)&p->apCsr[p->nCursor]; + p->nOnceFlag = u.cc.pProgram->nOnce; + pc = -1; + memset(p->aOnceFlag, 0, p->nOnceFlag); + + break; } -/* -** Do a deep comparison of two expression trees. Return TRUE (non-zero) -** if they are identical and return FALSE if they differ in any way. +/* Opcode: Param P1 P2 * * * ** -** Sometimes this routine will return FALSE even if the two expressions -** really are equivalent. If we cannot prove that the expressions are -** identical, we return FALSE just to be safe. So if this routine -** returns false, then you do not really know for certain if the two -** expressions are the same. But if you get a TRUE return, then you -** can be sure the expressions are the same. In the places where -** this routine is used, it does not hurt to get an extra FALSE - that -** just might result in some slightly slower code. But returning -** an incorrect TRUE could lead to a malfunction. +** This opcode is only ever present in sub-programs called via the +** OP_Program instruction. Copy a value currently stored in a memory +** cell of the calling (parent) frame to cell P2 in the current frames +** address space. This is used by trigger programs to access the new.* +** and old.* values. +** +** The address of the cell in the parent frame is determined by adding +** the value of the P1 argument to the value of the P1 argument to the +** calling OP_Program instruction. */ -SQLITE_PRIVATE int sqlite3ExprCompare(Expr *pA, Expr *pB){ - int i; - if( pA==0||pB==0 ){ - return pB==pA; - } - assert( !ExprHasAnyProperty(pA, EP_TokenOnly|EP_Reduced) ); - assert( !ExprHasAnyProperty(pB, EP_TokenOnly|EP_Reduced) ); - if( ExprHasProperty(pA, EP_xIsSelect) || ExprHasProperty(pB, EP_xIsSelect) ){ - return 0; - } - if( (pA->flags & EP_Distinct)!=(pB->flags & EP_Distinct) ) return 0; - if( pA->op!=pB->op ) return 0; - if( !sqlite3ExprCompare(pA->pLeft, pB->pLeft) ) return 0; - if( !sqlite3ExprCompare(pA->pRight, pB->pRight) ) return 0; - - if( pA->x.pList && pB->x.pList ){ - if( pA->x.pList->nExpr!=pB->x.pList->nExpr ) return 0; - for(i=0; ix.pList->nExpr; i++){ - Expr *pExprA = pA->x.pList->a[i].pExpr; - Expr *pExprB = pB->x.pList->a[i].pExpr; - if( !sqlite3ExprCompare(pExprA, pExprB) ) return 0; - } - }else if( pA->x.pList || pB->x.pList ){ - return 0; - } - - if( pA->iTable!=pB->iTable || pA->iColumn!=pB->iColumn ) return 0; - if( ExprHasProperty(pA, EP_IntValue) ){ - if( !ExprHasProperty(pB, EP_IntValue) || pA->u.iValue!=pB->u.iValue ){ - return 0; - } - }else if( pA->op!=TK_COLUMN && pA->u.zToken ){ - if( ExprHasProperty(pB, EP_IntValue) || NEVER(pB->u.zToken==0) ) return 0; - if( sqlite3StrICmp(pA->u.zToken,pB->u.zToken)!=0 ){ - return 0; - } - } - return 1; +case OP_Param: { /* out2-prerelease */ +#if 0 /* local variables moved into u.cd */ + VdbeFrame *pFrame; + Mem *pIn; +#endif /* local variables moved into u.cd */ + u.cd.pFrame = p->pFrame; + u.cd.pIn = &u.cd.pFrame->aMem[pOp->p1 + u.cd.pFrame->aOp[u.cd.pFrame->pc].p1]; + sqlite3VdbeMemShallowCopy(pOut, u.cd.pIn, MEM_Ephem); + break; } +#endif /* #ifndef SQLITE_OMIT_TRIGGER */ -/* -** Add a new element to the pAggInfo->aCol[] array. Return the index of -** the new element. Return a negative number if malloc fails. -*/ -static int addAggInfoColumn(sqlite3 *db, AggInfo *pInfo){ - int i; - pInfo->aCol = sqlite3ArrayAllocate( - db, - pInfo->aCol, - sizeof(pInfo->aCol[0]), - 3, - &pInfo->nColumn, - &pInfo->nColumnAlloc, - &i - ); - return i; -} - -/* -** Add a new element to the pAggInfo->aFunc[] array. Return the index of -** the new element. Return a negative number if malloc fails. -*/ -static int addAggInfoFunc(sqlite3 *db, AggInfo *pInfo){ - int i; - pInfo->aFunc = sqlite3ArrayAllocate( - db, - pInfo->aFunc, - sizeof(pInfo->aFunc[0]), - 3, - &pInfo->nFunc, - &pInfo->nFuncAlloc, - &i - ); - return i; -} - -/* -** This is the xExprCallback for a tree walker. It is used to -** implement sqlite3ExprAnalyzeAggregates(). See sqlite3ExprAnalyzeAggregates -** for additional information. +#ifndef SQLITE_OMIT_FOREIGN_KEY +/* Opcode: FkCounter P1 P2 * * * +** +** Increment a "constraint counter" by P2 (P2 may be negative or positive). +** If P1 is non-zero, the database constraint counter is incremented +** (deferred foreign key constraints). Otherwise, if P1 is zero, the +** statement counter is incremented (immediate foreign key constraints). */ -static int analyzeAggregate(Walker *pWalker, Expr *pExpr){ - int i; - NameContext *pNC = pWalker->u.pNC; - Parse *pParse = pNC->pParse; - SrcList *pSrcList = pNC->pSrcList; - AggInfo *pAggInfo = pNC->pAggInfo; - - switch( pExpr->op ){ - case TK_AGG_COLUMN: - case TK_COLUMN: { - testcase( pExpr->op==TK_AGG_COLUMN ); - testcase( pExpr->op==TK_COLUMN ); - /* Check to see if the column is in one of the tables in the FROM - ** clause of the aggregate query */ - if( ALWAYS(pSrcList!=0) ){ - struct SrcList_item *pItem = pSrcList->a; - for(i=0; inSrc; i++, pItem++){ - struct AggInfo_col *pCol; - assert( !ExprHasAnyProperty(pExpr, EP_TokenOnly|EP_Reduced) ); - if( pExpr->iTable==pItem->iCursor ){ - /* If we reach this point, it means that pExpr refers to a table - ** that is in the FROM clause of the aggregate query. - ** - ** Make an entry for the column in pAggInfo->aCol[] if there - ** is not an entry there already. - */ - int k; - pCol = pAggInfo->aCol; - for(k=0; knColumn; k++, pCol++){ - if( pCol->iTable==pExpr->iTable && - pCol->iColumn==pExpr->iColumn ){ - break; - } - } - if( (k>=pAggInfo->nColumn) - && (k = addAggInfoColumn(pParse->db, pAggInfo))>=0 - ){ - pCol = &pAggInfo->aCol[k]; - pCol->pTab = pExpr->pTab; - pCol->iTable = pExpr->iTable; - pCol->iColumn = pExpr->iColumn; - pCol->iMem = ++pParse->nMem; - pCol->iSorterColumn = -1; - pCol->pExpr = pExpr; - if( pAggInfo->pGroupBy ){ - int j, n; - ExprList *pGB = pAggInfo->pGroupBy; - struct ExprList_item *pTerm = pGB->a; - n = pGB->nExpr; - for(j=0; jpExpr; - if( pE->op==TK_COLUMN && pE->iTable==pExpr->iTable && - pE->iColumn==pExpr->iColumn ){ - pCol->iSorterColumn = j; - break; - } - } - } - if( pCol->iSorterColumn<0 ){ - pCol->iSorterColumn = pAggInfo->nSortingColumn++; - } - } - /* There is now an entry for pExpr in pAggInfo->aCol[] (either - ** because it was there before or because we just created it). - ** Convert the pExpr to be a TK_AGG_COLUMN referring to that - ** pAggInfo->aCol[] entry. - */ - ExprSetIrreducible(pExpr); - pExpr->pAggInfo = pAggInfo; - pExpr->op = TK_AGG_COLUMN; - pExpr->iAgg = (i16)k; - break; - } /* endif pExpr->iTable==pItem->iCursor */ - } /* end loop over pSrcList */ - } - return WRC_Prune; - } - case TK_AGG_FUNCTION: { - /* The pNC->nDepth==0 test causes aggregate functions in subqueries - ** to be ignored */ - if( pNC->nDepth==0 ){ - /* Check to see if pExpr is a duplicate of another aggregate - ** function that is already in the pAggInfo structure - */ - struct AggInfo_func *pItem = pAggInfo->aFunc; - for(i=0; inFunc; i++, pItem++){ - if( sqlite3ExprCompare(pItem->pExpr, pExpr) ){ - break; - } - } - if( i>=pAggInfo->nFunc ){ - /* pExpr is original. Make a new entry in pAggInfo->aFunc[] - */ - u8 enc = ENC(pParse->db); - i = addAggInfoFunc(pParse->db, pAggInfo); - if( i>=0 ){ - assert( !ExprHasProperty(pExpr, EP_xIsSelect) ); - pItem = &pAggInfo->aFunc[i]; - pItem->pExpr = pExpr; - pItem->iMem = ++pParse->nMem; - assert( !ExprHasProperty(pExpr, EP_IntValue) ); - pItem->pFunc = sqlite3FindFunction(pParse->db, - pExpr->u.zToken, sqlite3Strlen30(pExpr->u.zToken), - pExpr->x.pList ? pExpr->x.pList->nExpr : 0, enc, 0); - if( pExpr->flags & EP_Distinct ){ - pItem->iDistinct = pParse->nTab++; - }else{ - pItem->iDistinct = -1; - } - } - } - /* Make pExpr point to the appropriate pAggInfo->aFunc[] entry - */ - assert( !ExprHasAnyProperty(pExpr, EP_TokenOnly|EP_Reduced) ); - ExprSetIrreducible(pExpr); - pExpr->iAgg = (i16)i; - pExpr->pAggInfo = pAggInfo; - return WRC_Prune; - } - } +case OP_FkCounter: { + if( pOp->p1 ){ + db->nDeferredCons += pOp->p2; + }else{ + p->nFkConstraint += pOp->p2; } - return WRC_Continue; + break; } -static int analyzeAggregatesInSelect(Walker *pWalker, Select *pSelect){ - NameContext *pNC = pWalker->u.pNC; - if( pNC->nDepth==0 ){ - pNC->nDepth++; - sqlite3WalkSelect(pWalker, pSelect); - pNC->nDepth--; - return WRC_Prune; + +/* Opcode: FkIfZero P1 P2 * * * +** +** This opcode tests if a foreign key constraint-counter is currently zero. +** If so, jump to instruction P2. Otherwise, fall through to the next +** instruction. +** +** If P1 is non-zero, then the jump is taken if the database constraint-counter +** is zero (the one that counts deferred constraint violations). If P1 is +** zero, the jump is taken if the statement constraint-counter is zero +** (immediate foreign key constraint violations). +*/ +case OP_FkIfZero: { /* jump */ + if( pOp->p1 ){ + if( db->nDeferredCons==0 ) pc = pOp->p2-1; }else{ - return WRC_Continue; + if( p->nFkConstraint==0 ) pc = pOp->p2-1; } + break; } +#endif /* #ifndef SQLITE_OMIT_FOREIGN_KEY */ -/* -** Analyze the given expression looking for aggregate functions and -** for variables that need to be added to the pParse->aAgg[] array. -** Make additional entries to the pParse->aAgg[] array as necessary. +#ifndef SQLITE_OMIT_AUTOINCREMENT +/* Opcode: MemMax P1 P2 * * * ** -** This routine should only be called after the expression has been -** analyzed by sqlite3ResolveExprNames(). +** P1 is a register in the root frame of this VM (the root frame is +** different from the current frame if this instruction is being executed +** within a sub-program). Set the value of register P1 to the maximum of +** its current value and the value in register P2. +** +** This instruction throws an error if the memory cell is not initially +** an integer. */ -SQLITE_PRIVATE void sqlite3ExprAnalyzeAggregates(NameContext *pNC, Expr *pExpr){ - Walker w; - w.xExprCallback = analyzeAggregate; - w.xSelectCallback = analyzeAggregatesInSelect; - w.u.pNC = pNC; - assert( pNC->pSrcList!=0 ); - sqlite3WalkExpr(&w, pExpr); +case OP_MemMax: { /* in2 */ +#if 0 /* local variables moved into u.ce */ + Mem *pIn1; + VdbeFrame *pFrame; +#endif /* local variables moved into u.ce */ + if( p->pFrame ){ + for(u.ce.pFrame=p->pFrame; u.ce.pFrame->pParent; u.ce.pFrame=u.ce.pFrame->pParent); + u.ce.pIn1 = &u.ce.pFrame->aMem[pOp->p1]; + }else{ + u.ce.pIn1 = &aMem[pOp->p1]; + } + assert( memIsValid(u.ce.pIn1) ); + sqlite3VdbeMemIntegerify(u.ce.pIn1); + pIn2 = &aMem[pOp->p2]; + sqlite3VdbeMemIntegerify(pIn2); + if( u.ce.pIn1->u.iu.i){ + u.ce.pIn1->u.i = pIn2->u.i; + } + break; } +#endif /* SQLITE_OMIT_AUTOINCREMENT */ -/* -** Call sqlite3ExprAnalyzeAggregates() for every expression in an -** expression list. Return the number of errors. +/* Opcode: IfPos P1 P2 * * * ** -** If an error is found, the analysis is cut short. +** If the value of register P1 is 1 or greater, jump to P2. +** +** It is illegal to use this instruction on a register that does +** not contain an integer. An assertion fault will result if you try. */ -SQLITE_PRIVATE void sqlite3ExprAnalyzeAggList(NameContext *pNC, ExprList *pList){ - struct ExprList_item *pItem; - int i; - if( pList ){ - for(pItem=pList->a, i=0; inExpr; i++, pItem++){ - sqlite3ExprAnalyzeAggregates(pNC, pItem->pExpr); - } +case OP_IfPos: { /* jump, in1 */ + pIn1 = &aMem[pOp->p1]; + assert( pIn1->flags&MEM_Int ); + if( pIn1->u.i>0 ){ + pc = pOp->p2 - 1; } + break; } -/* -** Allocate a single new register for use to hold some intermediate result. +/* Opcode: IfNeg P1 P2 * * * +** +** If the value of register P1 is less than zero, jump to P2. +** +** It is illegal to use this instruction on a register that does +** not contain an integer. An assertion fault will result if you try. */ -SQLITE_PRIVATE int sqlite3GetTempReg(Parse *pParse){ - if( pParse->nTempReg==0 ){ - return ++pParse->nMem; +case OP_IfNeg: { /* jump, in1 */ + pIn1 = &aMem[pOp->p1]; + assert( pIn1->flags&MEM_Int ); + if( pIn1->u.i<0 ){ + pc = pOp->p2 - 1; } - return pParse->aTempReg[--pParse->nTempReg]; + break; } -/* -** Deallocate a register, making available for reuse for some other -** purpose. +/* Opcode: IfZero P1 P2 P3 * * ** -** If a register is currently being used by the column cache, then -** the dallocation is deferred until the column cache line that uses -** the register becomes stale. +** The register P1 must contain an integer. Add literal P3 to the +** value in register P1. If the result is exactly 0, jump to P2. +** +** It is illegal to use this instruction on a register that does +** not contain an integer. An assertion fault will result if you try. */ -SQLITE_PRIVATE void sqlite3ReleaseTempReg(Parse *pParse, int iReg){ - if( iReg && pParse->nTempRegaTempReg) ){ - int i; - struct yColCache *p; - for(i=0, p=pParse->aColCache; iiReg==iReg ){ - p->tempReg = 1; - return; - } - } - pParse->aTempReg[pParse->nTempReg++] = iReg; +case OP_IfZero: { /* jump, in1 */ + pIn1 = &aMem[pOp->p1]; + assert( pIn1->flags&MEM_Int ); + pIn1->u.i += pOp->p3; + if( pIn1->u.i==0 ){ + pc = pOp->p2 - 1; } + break; } -/* -** Allocate or deallocate a block of nReg consecutive registers +/* Opcode: AggStep * P2 P3 P4 P5 +** +** Execute the step function for an aggregate. The +** function has P5 arguments. P4 is a pointer to the FuncDef +** structure that specifies the function. Use register +** P3 as the accumulator. +** +** The P5 arguments are taken from register P2 and its +** successors. */ -SQLITE_PRIVATE int sqlite3GetTempRange(Parse *pParse, int nReg){ - int i, n; - i = pParse->iRangeReg; - n = pParse->nRangeReg; - if( nReg<=n && !usedAsColumnCache(pParse, i, i+n-1) ){ - pParse->iRangeReg += nReg; - pParse->nRangeReg -= nReg; - }else{ - i = pParse->nMem+1; - pParse->nMem += nReg; +case OP_AggStep: { +#if 0 /* local variables moved into u.cf */ + int n; + int i; + Mem *pMem; + Mem *pRec; + sqlite3_context ctx; + sqlite3_value **apVal; +#endif /* local variables moved into u.cf */ + + u.cf.n = pOp->p5; + assert( u.cf.n>=0 ); + u.cf.pRec = &aMem[pOp->p2]; + u.cf.apVal = p->apArg; + assert( u.cf.apVal || u.cf.n==0 ); + for(u.cf.i=0; u.cf.ip4.pFunc; + assert( pOp->p3>0 && pOp->p3<=p->nMem ); + u.cf.ctx.pMem = u.cf.pMem = &aMem[pOp->p3]; + u.cf.pMem->n++; + u.cf.ctx.s.flags = MEM_Null; + u.cf.ctx.s.z = 0; + u.cf.ctx.s.zMalloc = 0; + u.cf.ctx.s.xDel = 0; + u.cf.ctx.s.db = db; + u.cf.ctx.isError = 0; + u.cf.ctx.pColl = 0; + u.cf.ctx.skipFlag = 0; + if( u.cf.ctx.pFunc->flags & SQLITE_FUNC_NEEDCOLL ){ + assert( pOp>p->aOp ); + assert( pOp[-1].p4type==P4_COLLSEQ ); + assert( pOp[-1].opcode==OP_CollSeq ); + u.cf.ctx.pColl = pOp[-1].p4.pColl; } - return i; -} -SQLITE_PRIVATE void sqlite3ReleaseTempRange(Parse *pParse, int iReg, int nReg){ - if( nReg>pParse->nRangeReg ){ - pParse->nRangeReg = nReg; - pParse->iRangeReg = iReg; + (u.cf.ctx.pFunc->xStep)(&u.cf.ctx, u.cf.n, u.cf.apVal); /* IMP: R-24505-23230 */ + if( u.cf.ctx.isError ){ + sqlite3SetString(&p->zErrMsg, db, "%s", sqlite3_value_text(&u.cf.ctx.s)); + rc = u.cf.ctx.isError; } + if( u.cf.ctx.skipFlag ){ + assert( pOp[-1].opcode==OP_CollSeq ); + u.cf.i = pOp[-1].p1; + if( u.cf.i ) sqlite3VdbeMemSetInt64(&aMem[u.cf.i], 1); + } + + sqlite3VdbeMemRelease(&u.cf.ctx.s); + + break; } -/************** End of expr.c ************************************************/ -/************** Begin file alter.c *******************************************/ -/* -** 2005 February 15 -** -** The author disclaims copyright to this source code. In place of -** a legal notice, here is a blessing: -** -** May you do good and not evil. -** May you find forgiveness for yourself and forgive others. -** May you share freely, never taking more than you give. +/* Opcode: AggFinal P1 P2 * P4 * ** -************************************************************************* -** This file contains C code routines that used to generate VDBE code -** that implements the ALTER TABLE command. +** Execute the finalizer function for an aggregate. P1 is +** the memory location that is the accumulator for the aggregate. ** -** $Id: alter.c,v 1.61 2009/06/03 11:25:07 danielk1977 Exp $ +** P2 is the number of arguments that the step function takes and +** P4 is a pointer to the FuncDef for this function. The P2 +** argument is not used by this opcode. It is only there to disambiguate +** functions that can take varying numbers of arguments. The +** P4 argument is only needed for the degenerate case where +** the step function was not previously called. */ +case OP_AggFinal: { +#if 0 /* local variables moved into u.cg */ + Mem *pMem; +#endif /* local variables moved into u.cg */ + assert( pOp->p1>0 && pOp->p1<=p->nMem ); + u.cg.pMem = &aMem[pOp->p1]; + assert( (u.cg.pMem->flags & ~(MEM_Null|MEM_Agg))==0 ); + rc = sqlite3VdbeMemFinalize(u.cg.pMem, pOp->p4.pFunc); + if( rc ){ + sqlite3SetString(&p->zErrMsg, db, "%s", sqlite3_value_text(u.cg.pMem)); + } + sqlite3VdbeChangeEncoding(u.cg.pMem, encoding); + UPDATE_MAX_BLOBSIZE(u.cg.pMem); + if( sqlite3VdbeMemTooBig(u.cg.pMem) ){ + goto too_big; + } + break; +} -/* -** The code in this file only exists if we are not omitting the -** ALTER TABLE logic from the build. +#ifndef SQLITE_OMIT_WAL +/* Opcode: Checkpoint P1 P2 P3 * * +** +** Checkpoint database P1. This is a no-op if P1 is not currently in +** WAL mode. Parameter P2 is one of SQLITE_CHECKPOINT_PASSIVE, FULL +** or RESTART. Write 1 or 0 into mem[P3] if the checkpoint returns +** SQLITE_BUSY or not, respectively. Write the number of pages in the +** WAL after the checkpoint into mem[P3+1] and the number of pages +** in the WAL that have been checkpointed after the checkpoint +** completes into mem[P3+2]. However on an error, mem[P3+1] and +** mem[P3+2] are initialized to -1. */ -#ifndef SQLITE_OMIT_ALTERTABLE +case OP_Checkpoint: { +#if 0 /* local variables moved into u.ch */ + int i; /* Loop counter */ + int aRes[3]; /* Results */ + Mem *pMem; /* Write results here */ +#endif /* local variables moved into u.ch */ + u.ch.aRes[0] = 0; + u.ch.aRes[1] = u.ch.aRes[2] = -1; + assert( pOp->p2==SQLITE_CHECKPOINT_PASSIVE + || pOp->p2==SQLITE_CHECKPOINT_FULL + || pOp->p2==SQLITE_CHECKPOINT_RESTART + ); + rc = sqlite3Checkpoint(db, pOp->p1, pOp->p2, &u.ch.aRes[1], &u.ch.aRes[2]); + if( rc==SQLITE_BUSY ){ + rc = SQLITE_OK; + u.ch.aRes[0] = 1; + } + for(u.ch.i=0, u.ch.pMem = &aMem[pOp->p3]; u.ch.i<3; u.ch.i++, u.ch.pMem++){ + sqlite3VdbeMemSetInt64(u.ch.pMem, (i64)u.ch.aRes[u.ch.i]); + } + break; +}; +#endif -/* -** This function is used by SQL generated to implement the -** ALTER TABLE command. The first argument is the text of a CREATE TABLE or -** CREATE INDEX command. The second is a table name. The table name in -** the CREATE TABLE or CREATE INDEX statement is replaced with the third -** argument and the result returned. Examples: +#ifndef SQLITE_OMIT_PRAGMA +/* Opcode: JournalMode P1 P2 P3 * P5 ** -** sqlite_rename_table('CREATE TABLE abc(a, b, c)', 'def') -** -> 'CREATE TABLE def(a, b, c)' +** Change the journal mode of database P1 to P3. P3 must be one of the +** PAGER_JOURNALMODE_XXX values. If changing between the various rollback +** modes (delete, truncate, persist, off and memory), this is a simple +** operation. No IO is required. ** -** sqlite_rename_table('CREATE INDEX i ON abc(a)', 'def') -** -> 'CREATE INDEX i ON def(a, b, c)' +** If changing into or out of WAL mode the procedure is more complicated. +** +** Write a string containing the final journal-mode to register P2. */ -static void renameTableFunc( - sqlite3_context *context, - int NotUsed, - sqlite3_value **argv -){ - unsigned char const *zSql = sqlite3_value_text(argv[0]); - unsigned char const *zTableName = sqlite3_value_text(argv[1]); +case OP_JournalMode: { /* out2-prerelease */ +#if 0 /* local variables moved into u.ci */ + Btree *pBt; /* Btree to change journal mode of */ + Pager *pPager; /* Pager associated with pBt */ + int eNew; /* New journal mode */ + int eOld; /* The old journal mode */ + const char *zFilename; /* Name of database file for pPager */ +#endif /* local variables moved into u.ci */ - int token; - Token tname; - unsigned char const *zCsr = zSql; - int len = 0; - char *zRet; + u.ci.eNew = pOp->p3; + assert( u.ci.eNew==PAGER_JOURNALMODE_DELETE + || u.ci.eNew==PAGER_JOURNALMODE_TRUNCATE + || u.ci.eNew==PAGER_JOURNALMODE_PERSIST + || u.ci.eNew==PAGER_JOURNALMODE_OFF + || u.ci.eNew==PAGER_JOURNALMODE_MEMORY + || u.ci.eNew==PAGER_JOURNALMODE_WAL + || u.ci.eNew==PAGER_JOURNALMODE_QUERY + ); + assert( pOp->p1>=0 && pOp->p1nDb ); - sqlite3 *db = sqlite3_context_db_handle(context); + u.ci.pBt = db->aDb[pOp->p1].pBt; + u.ci.pPager = sqlite3BtreePager(u.ci.pBt); + u.ci.eOld = sqlite3PagerGetJournalMode(u.ci.pPager); + if( u.ci.eNew==PAGER_JOURNALMODE_QUERY ) u.ci.eNew = u.ci.eOld; + if( !sqlite3PagerOkToChangeJournalMode(u.ci.pPager) ) u.ci.eNew = u.ci.eOld; - UNUSED_PARAMETER(NotUsed); +#ifndef SQLITE_OMIT_WAL + u.ci.zFilename = sqlite3PagerFilename(u.ci.pPager, 1); - /* The principle used to locate the table name in the CREATE TABLE - ** statement is that the table name is the first non-space token that - ** is immediately followed by a TK_LP or TK_USING token. + /* Do not allow a transition to journal_mode=WAL for a database + ** in temporary storage or if the VFS does not support shared memory */ - if( zSql ){ - do { - if( !*zCsr ){ - /* Ran out of input before finding an opening bracket. Return NULL. */ - return; - } + if( u.ci.eNew==PAGER_JOURNALMODE_WAL + && (sqlite3Strlen30(u.ci.zFilename)==0 /* Temp file */ + || !sqlite3PagerWalSupported(u.ci.pPager)) /* No shared-memory support */ + ){ + u.ci.eNew = u.ci.eOld; + } - /* Store the token that zCsr points to in tname. */ - tname.z = (char*)zCsr; - tname.n = len; + if( (u.ci.eNew!=u.ci.eOld) + && (u.ci.eOld==PAGER_JOURNALMODE_WAL || u.ci.eNew==PAGER_JOURNALMODE_WAL) + ){ + if( !db->autoCommit || db->activeVdbeCnt>1 ){ + rc = SQLITE_ERROR; + sqlite3SetString(&p->zErrMsg, db, + "cannot change %s wal mode from within a transaction", + (u.ci.eNew==PAGER_JOURNALMODE_WAL ? "into" : "out of") + ); + break; + }else{ - /* Advance zCsr to the next token. Store that token type in 'token', - ** and its length in 'len' (to be used next iteration of this loop). + if( u.ci.eOld==PAGER_JOURNALMODE_WAL ){ + /* If leaving WAL mode, close the log file. If successful, the call + ** to PagerCloseWal() checkpoints and deletes the write-ahead-log + ** file. An EXCLUSIVE lock may still be held on the database file + ** after a successful return. + */ + rc = sqlite3PagerCloseWal(u.ci.pPager); + if( rc==SQLITE_OK ){ + sqlite3PagerSetJournalMode(u.ci.pPager, u.ci.eNew); + } + }else if( u.ci.eOld==PAGER_JOURNALMODE_MEMORY ){ + /* Cannot transition directly from MEMORY to WAL. Use mode OFF + ** as an intermediate */ + sqlite3PagerSetJournalMode(u.ci.pPager, PAGER_JOURNALMODE_OFF); + } + + /* Open a transaction on the database file. Regardless of the journal + ** mode, this transaction always uses a rollback journal. */ - do { - zCsr += len; - len = sqlite3GetToken(zCsr, &token); - } while( token==TK_SPACE ); - assert( len>0 ); - } while( token!=TK_LP && token!=TK_USING ); + assert( sqlite3BtreeIsInTrans(u.ci.pBt)==0 ); + if( rc==SQLITE_OK ){ + rc = sqlite3BtreeSetVersion(u.ci.pBt, (u.ci.eNew==PAGER_JOURNALMODE_WAL ? 2 : 1)); + } + } + } +#endif /* ifndef SQLITE_OMIT_WAL */ - zRet = sqlite3MPrintf(db, "%.*s\"%w\"%s", ((u8*)tname.z) - zSql, zSql, - zTableName, tname.z+tname.n); - sqlite3_result_text(context, zRet, -1, SQLITE_DYNAMIC); + if( rc ){ + u.ci.eNew = u.ci.eOld; } -} + u.ci.eNew = sqlite3PagerSetJournalMode(u.ci.pPager, u.ci.eNew); -#ifndef SQLITE_OMIT_TRIGGER -/* This function is used by SQL generated to implement the -** ALTER TABLE command. The first argument is the text of a CREATE TRIGGER -** statement. The second is a table name. The table name in the CREATE -** TRIGGER statement is replaced with the third argument and the result -** returned. This is analagous to renameTableFunc() above, except for CREATE -** TRIGGER, not CREATE INDEX and CREATE TABLE. -*/ -static void renameTriggerFunc( - sqlite3_context *context, - int NotUsed, - sqlite3_value **argv -){ - unsigned char const *zSql = sqlite3_value_text(argv[0]); - unsigned char const *zTableName = sqlite3_value_text(argv[1]); + pOut = &aMem[pOp->p2]; + pOut->flags = MEM_Str|MEM_Static|MEM_Term; + pOut->z = (char *)sqlite3JournalModename(u.ci.eNew); + pOut->n = sqlite3Strlen30(pOut->z); + pOut->enc = SQLITE_UTF8; + sqlite3VdbeChangeEncoding(pOut, encoding); + break; +}; +#endif /* SQLITE_OMIT_PRAGMA */ - int token; - Token tname; - int dist = 3; - unsigned char const *zCsr = zSql; - int len = 0; - char *zRet; - sqlite3 *db = sqlite3_context_db_handle(context); +#if !defined(SQLITE_OMIT_VACUUM) && !defined(SQLITE_OMIT_ATTACH) +/* Opcode: Vacuum * * * * * +** +** Vacuum the entire database. This opcode will cause other virtual +** machines to be created and run. It may not be called from within +** a transaction. +*/ +case OP_Vacuum: { + rc = sqlite3RunVacuum(&p->zErrMsg, db); + break; +} +#endif - UNUSED_PARAMETER(NotUsed); +#if !defined(SQLITE_OMIT_AUTOVACUUM) +/* Opcode: IncrVacuum P1 P2 * * * +** +** Perform a single step of the incremental vacuum procedure on +** the P1 database. If the vacuum has finished, jump to instruction +** P2. Otherwise, fall through to the next instruction. +*/ +case OP_IncrVacuum: { /* jump */ +#if 0 /* local variables moved into u.cj */ + Btree *pBt; +#endif /* local variables moved into u.cj */ - /* The principle used to locate the table name in the CREATE TRIGGER - ** statement is that the table name is the first token that is immediatedly - ** preceded by either TK_ON or TK_DOT and immediatedly followed by one - ** of TK_WHEN, TK_BEGIN or TK_FOR. - */ - if( zSql ){ - do { + assert( pOp->p1>=0 && pOp->p1nDb ); + assert( (p->btreeMask & (((yDbMask)1)<p1))!=0 ); + u.cj.pBt = db->aDb[pOp->p1].pBt; + rc = sqlite3BtreeIncrVacuum(u.cj.pBt); + if( rc==SQLITE_DONE ){ + pc = pOp->p2 - 1; + rc = SQLITE_OK; + } + break; +} +#endif - if( !*zCsr ){ - /* Ran out of input before finding the table name. Return NULL. */ - return; - } - - /* Store the token that zCsr points to in tname. */ - tname.z = (char*)zCsr; - tname.n = len; +/* Opcode: Expire P1 * * * * +** +** Cause precompiled statements to become expired. An expired statement +** fails with an error code of SQLITE_SCHEMA if it is ever executed +** (via sqlite3_step()). +** +** If P1 is 0, then all SQL statements become expired. If P1 is non-zero, +** then only the currently executing statement is affected. +*/ +case OP_Expire: { + if( !pOp->p1 ){ + sqlite3ExpirePreparedStatements(db); + }else{ + p->expired = 1; + } + break; +} - /* Advance zCsr to the next token. Store that token type in 'token', - ** and its length in 'len' (to be used next iteration of this loop). - */ - do { - zCsr += len; - len = sqlite3GetToken(zCsr, &token); - }while( token==TK_SPACE ); - assert( len>0 ); +#ifndef SQLITE_OMIT_SHARED_CACHE +/* Opcode: TableLock P1 P2 P3 P4 * +** +** Obtain a lock on a particular table. This instruction is only used when +** the shared-cache feature is enabled. +** +** P1 is the index of the database in sqlite3.aDb[] of the database +** on which the lock is acquired. A readlock is obtained if P3==0 or +** a write lock if P3==1. +** +** P2 contains the root-page of the table to lock. +** +** P4 contains a pointer to the name of the table being locked. This is only +** used to generate an error message if the lock cannot be obtained. +*/ +case OP_TableLock: { + u8 isWriteLock = (u8)pOp->p3; + if( isWriteLock || 0==(db->flags&SQLITE_ReadUncommitted) ){ + int p1 = pOp->p1; + assert( p1>=0 && p1nDb ); + assert( (p->btreeMask & (((yDbMask)1)<aDb[p1].pBt, pOp->p2, isWriteLock); + if( (rc&0xFF)==SQLITE_LOCKED ){ + const char *z = pOp->p4.z; + sqlite3SetString(&p->zErrMsg, db, "database table is locked: %s", z); + } + } + break; +} +#endif /* SQLITE_OMIT_SHARED_CACHE */ - /* Variable 'dist' stores the number of tokens read since the most - ** recent TK_DOT or TK_ON. This means that when a WHEN, FOR or BEGIN - ** token is read and 'dist' equals 2, the condition stated above - ** to be met. - ** - ** Note that ON cannot be a database, table or column name, so - ** there is no need to worry about syntax like - ** "CREATE TRIGGER ... ON ON.ON BEGIN ..." etc. - */ - dist++; - if( token==TK_DOT || token==TK_ON ){ - dist = 0; - } - } while( dist!=2 || (token!=TK_WHEN && token!=TK_FOR && token!=TK_BEGIN) ); +#ifndef SQLITE_OMIT_VIRTUALTABLE +/* Opcode: VBegin * * * P4 * +** +** P4 may be a pointer to an sqlite3_vtab structure. If so, call the +** xBegin method for that table. +** +** Also, whether or not P4 is set, check that this is not being called from +** within a callback to a virtual table xSync() method. If it is, the error +** code will be set to SQLITE_LOCKED. +*/ +case OP_VBegin: { +#if 0 /* local variables moved into u.ck */ + VTable *pVTab; +#endif /* local variables moved into u.ck */ + u.ck.pVTab = pOp->p4.pVtab; + rc = sqlite3VtabBegin(db, u.ck.pVTab); + if( u.ck.pVTab ) importVtabErrMsg(p, u.ck.pVTab->pVtab); + break; +} +#endif /* SQLITE_OMIT_VIRTUALTABLE */ - /* Variable tname now contains the token that is the old table-name - ** in the CREATE TRIGGER statement. - */ - zRet = sqlite3MPrintf(db, "%.*s\"%w\"%s", ((u8*)tname.z) - zSql, zSql, - zTableName, tname.z+tname.n); - sqlite3_result_text(context, zRet, -1, SQLITE_DYNAMIC); - } +#ifndef SQLITE_OMIT_VIRTUALTABLE +/* Opcode: VCreate P1 * * P4 * +** +** P4 is the name of a virtual table in database P1. Call the xCreate method +** for that table. +*/ +case OP_VCreate: { + rc = sqlite3VtabCallCreate(db, pOp->p1, pOp->p4.z, &p->zErrMsg); + break; } -#endif /* !SQLITE_OMIT_TRIGGER */ +#endif /* SQLITE_OMIT_VIRTUALTABLE */ -/* -** Register built-in functions used to help implement ALTER TABLE +#ifndef SQLITE_OMIT_VIRTUALTABLE +/* Opcode: VDestroy P1 * * P4 * +** +** P4 is the name of a virtual table in database P1. Call the xDestroy method +** of that table. */ -SQLITE_PRIVATE void sqlite3AlterFunctions(sqlite3 *db){ - sqlite3CreateFunc(db, "sqlite_rename_table", 2, SQLITE_UTF8, 0, - renameTableFunc, 0, 0); -#ifndef SQLITE_OMIT_TRIGGER - sqlite3CreateFunc(db, "sqlite_rename_trigger", 2, SQLITE_UTF8, 0, - renameTriggerFunc, 0, 0); -#endif +case OP_VDestroy: { + p->inVtabMethod = 2; + rc = sqlite3VtabCallDestroy(db, pOp->p1, pOp->p4.z); + p->inVtabMethod = 0; + break; } +#endif /* SQLITE_OMIT_VIRTUALTABLE */ -/* -** Generate the text of a WHERE expression which can be used to select all -** temporary triggers on table pTab from the sqlite_temp_master table. If -** table pTab has no temporary triggers, or is itself stored in the -** temporary database, NULL is returned. +#ifndef SQLITE_OMIT_VIRTUALTABLE +/* Opcode: VOpen P1 * * P4 * +** +** P4 is a pointer to a virtual table object, an sqlite3_vtab structure. +** P1 is a cursor number. This opcode opens a cursor to the virtual +** table and stores that cursor in P1. */ -static char *whereTempTriggers(Parse *pParse, Table *pTab){ - Trigger *pTrig; - char *zWhere = 0; - char *tmp = 0; - const Schema *pTempSchema = pParse->db->aDb[1].pSchema; /* Temp db schema */ +case OP_VOpen: { +#if 0 /* local variables moved into u.cl */ + VdbeCursor *pCur; + sqlite3_vtab_cursor *pVtabCursor; + sqlite3_vtab *pVtab; + sqlite3_module *pModule; +#endif /* local variables moved into u.cl */ - /* If the table is not located in the temp-db (in which case NULL is - ** returned, loop through the tables list of triggers. For each trigger - ** that is not part of the temp-db schema, add a clause to the WHERE - ** expression being built up in zWhere. - */ - if( pTab->pSchema!=pTempSchema ){ - sqlite3 *db = pParse->db; - for(pTrig=sqlite3TriggerList(pParse, pTab); pTrig; pTrig=pTrig->pNext){ - if( pTrig->pSchema==pTempSchema ){ - if( !zWhere ){ - zWhere = sqlite3MPrintf(db, "name=%Q", pTrig->name); - }else{ - tmp = zWhere; - zWhere = sqlite3MPrintf(db, "%s OR name=%Q", zWhere, pTrig->name); - sqlite3DbFree(db, tmp); - } - } + u.cl.pCur = 0; + u.cl.pVtabCursor = 0; + u.cl.pVtab = pOp->p4.pVtab->pVtab; + u.cl.pModule = (sqlite3_module *)u.cl.pVtab->pModule; + assert(u.cl.pVtab && u.cl.pModule); + rc = u.cl.pModule->xOpen(u.cl.pVtab, &u.cl.pVtabCursor); + importVtabErrMsg(p, u.cl.pVtab); + if( SQLITE_OK==rc ){ + /* Initialize sqlite3_vtab_cursor base class */ + u.cl.pVtabCursor->pVtab = u.cl.pVtab; + + /* Initialise vdbe cursor object */ + u.cl.pCur = allocateCursor(p, pOp->p1, 0, -1, 0); + if( u.cl.pCur ){ + u.cl.pCur->pVtabCursor = u.cl.pVtabCursor; + u.cl.pCur->pModule = u.cl.pVtabCursor->pVtab->pModule; + }else{ + db->mallocFailed = 1; + u.cl.pModule->xClose(u.cl.pVtabCursor); } } - return zWhere; + break; } +#endif /* SQLITE_OMIT_VIRTUALTABLE */ -/* -** Generate code to drop and reload the internal representation of table -** pTab from the database, including triggers and temporary triggers. -** Argument zName is the name of the table in the database schema at -** the time the generated code is executed. This can be different from -** pTab->zName if this function is being called to code part of an -** "ALTER TABLE RENAME TO" statement. +#ifndef SQLITE_OMIT_VIRTUALTABLE +/* Opcode: VFilter P1 P2 P3 P4 * +** +** P1 is a cursor opened using VOpen. P2 is an address to jump to if +** the filtered result set is empty. +** +** P4 is either NULL or a string that was generated by the xBestIndex +** method of the module. The interpretation of the P4 string is left +** to the module implementation. +** +** This opcode invokes the xFilter method on the virtual table specified +** by P1. The integer query plan parameter to xFilter is stored in register +** P3. Register P3+1 stores the argc parameter to be passed to the +** xFilter method. Registers P3+2..P3+1+argc are the argc +** additional parameters which are passed to +** xFilter as argv. Register P3+2 becomes argv[0] when passed to xFilter. +** +** A jump is made to P2 if the result set after filtering would be empty. */ -static void reloadTableSchema(Parse *pParse, Table *pTab, const char *zName){ - Vdbe *v; - char *zWhere; - int iDb; /* Index of database containing pTab */ -#ifndef SQLITE_OMIT_TRIGGER - Trigger *pTrig; -#endif +case OP_VFilter: { /* jump */ +#if 0 /* local variables moved into u.cm */ + int nArg; + int iQuery; + const sqlite3_module *pModule; + Mem *pQuery; + Mem *pArgc; + sqlite3_vtab_cursor *pVtabCursor; + sqlite3_vtab *pVtab; + VdbeCursor *pCur; + int res; + int i; + Mem **apArg; +#endif /* local variables moved into u.cm */ - v = sqlite3GetVdbe(pParse); - if( NEVER(v==0) ) return; - assert( sqlite3BtreeHoldsAllMutexes(pParse->db) ); - iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema); - assert( iDb>=0 ); + u.cm.pQuery = &aMem[pOp->p3]; + u.cm.pArgc = &u.cm.pQuery[1]; + u.cm.pCur = p->apCsr[pOp->p1]; + assert( memIsValid(u.cm.pQuery) ); + REGISTER_TRACE(pOp->p3, u.cm.pQuery); + assert( u.cm.pCur->pVtabCursor ); + u.cm.pVtabCursor = u.cm.pCur->pVtabCursor; + u.cm.pVtab = u.cm.pVtabCursor->pVtab; + u.cm.pModule = u.cm.pVtab->pModule; -#ifndef SQLITE_OMIT_TRIGGER - /* Drop any table triggers from the internal schema. */ - for(pTrig=sqlite3TriggerList(pParse, pTab); pTrig; pTrig=pTrig->pNext){ - int iTrigDb = sqlite3SchemaToIndex(pParse->db, pTrig->pSchema); - assert( iTrigDb==iDb || iTrigDb==1 ); - sqlite3VdbeAddOp4(v, OP_DropTrigger, iTrigDb, 0, 0, pTrig->name, 0); - } -#endif + /* Grab the index number and argc parameters */ + assert( (u.cm.pQuery->flags&MEM_Int)!=0 && u.cm.pArgc->flags==MEM_Int ); + u.cm.nArg = (int)u.cm.pArgc->u.i; + u.cm.iQuery = (int)u.cm.pQuery->u.i; - /* Drop the table and index from the internal schema */ - sqlite3VdbeAddOp4(v, OP_DropTable, iDb, 0, 0, pTab->zName, 0); + /* Invoke the xFilter method */ + { + u.cm.res = 0; + u.cm.apArg = p->apArg; + for(u.cm.i = 0; u.cm.idb, "tbl_name=%Q", zName); - if( !zWhere ) return; - sqlite3VdbeAddOp4(v, OP_ParseSchema, iDb, 0, 0, zWhere, P4_DYNAMIC); + p->inVtabMethod = 1; + rc = u.cm.pModule->xFilter(u.cm.pVtabCursor, u.cm.iQuery, pOp->p4.z, u.cm.nArg, u.cm.apArg); + p->inVtabMethod = 0; + importVtabErrMsg(p, u.cm.pVtab); + if( rc==SQLITE_OK ){ + u.cm.res = u.cm.pModule->xEof(u.cm.pVtabCursor); + } -#ifndef SQLITE_OMIT_TRIGGER - /* Now, if the table is not stored in the temp database, reload any temp - ** triggers. Don't use IN(...) in case SQLITE_OMIT_SUBQUERY is defined. - */ - if( (zWhere=whereTempTriggers(pParse, pTab))!=0 ){ - sqlite3VdbeAddOp4(v, OP_ParseSchema, 1, 0, 0, zWhere, P4_DYNAMIC); + if( u.cm.res ){ + pc = pOp->p2 - 1; + } } -#endif + u.cm.pCur->nullRow = 0; + + break; } +#endif /* SQLITE_OMIT_VIRTUALTABLE */ -/* -** Generate code to implement the "ALTER TABLE xxx RENAME TO yyy" -** command. +#ifndef SQLITE_OMIT_VIRTUALTABLE +/* Opcode: VColumn P1 P2 P3 * * +** +** Store the value of the P2-th column of +** the row of the virtual-table that the +** P1 cursor is pointing to into register P3. */ -SQLITE_PRIVATE void sqlite3AlterRenameTable( - Parse *pParse, /* Parser context. */ - SrcList *pSrc, /* The table to rename. */ - Token *pName /* The new table name. */ -){ - int iDb; /* Database that contains the table */ - char *zDb; /* Name of database iDb */ - Table *pTab; /* Table being renamed */ - char *zName = 0; /* NULL-terminated version of pName */ - sqlite3 *db = pParse->db; /* Database connection */ - int nTabName; /* Number of UTF-8 characters in zTabName */ - const char *zTabName; /* Original name of the table */ - Vdbe *v; -#ifndef SQLITE_OMIT_TRIGGER - char *zWhere = 0; /* Where clause to locate temp triggers */ -#endif - int isVirtualRename = 0; /* True if this is a v-table with an xRename() */ - - if( NEVER(db->mallocFailed) ) goto exit_rename_table; - assert( pSrc->nSrc==1 ); - assert( sqlite3BtreeHoldsAllMutexes(pParse->db) ); - - pTab = sqlite3LocateTable(pParse, 0, pSrc->a[0].zName, pSrc->a[0].zDatabase); - if( !pTab ) goto exit_rename_table; - iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema); - zDb = db->aDb[iDb].zName; - - /* Get a NULL terminated version of the new table name. */ - zName = sqlite3NameFromToken(db, pName); - if( !zName ) goto exit_rename_table; +case OP_VColumn: { +#if 0 /* local variables moved into u.cn */ + sqlite3_vtab *pVtab; + const sqlite3_module *pModule; + Mem *pDest; + sqlite3_context sContext; +#endif /* local variables moved into u.cn */ - /* Check that a table or index named 'zName' does not already exist - ** in database iDb. If so, this is an error. - */ - if( sqlite3FindTable(db, zName, zDb) || sqlite3FindIndex(db, zName, zDb) ){ - sqlite3ErrorMsg(pParse, - "there is already another table or index with this name: %s", zName); - goto exit_rename_table; + VdbeCursor *pCur = p->apCsr[pOp->p1]; + assert( pCur->pVtabCursor ); + assert( pOp->p3>0 && pOp->p3<=p->nMem ); + u.cn.pDest = &aMem[pOp->p3]; + memAboutToChange(p, u.cn.pDest); + if( pCur->nullRow ){ + sqlite3VdbeMemSetNull(u.cn.pDest); + break; } + u.cn.pVtab = pCur->pVtabCursor->pVtab; + u.cn.pModule = u.cn.pVtab->pModule; + assert( u.cn.pModule->xColumn ); + memset(&u.cn.sContext, 0, sizeof(u.cn.sContext)); - /* Make sure it is not a system table being altered, or a reserved name - ** that the table is being renamed to. + /* The output cell may already have a buffer allocated. Move + ** the current contents to u.cn.sContext.s so in case the user-function + ** can use the already allocated buffer instead of allocating a + ** new one. */ - if( sqlite3Strlen30(pTab->zName)>6 - && 0==sqlite3StrNICmp(pTab->zName, "sqlite_", 7) - ){ - sqlite3ErrorMsg(pParse, "table %s may not be altered", pTab->zName); - goto exit_rename_table; - } - if( SQLITE_OK!=sqlite3CheckObjectName(pParse, zName) ){ - goto exit_rename_table; - } + sqlite3VdbeMemMove(&u.cn.sContext.s, u.cn.pDest); + MemSetTypeFlag(&u.cn.sContext.s, MEM_Null); -#ifndef SQLITE_OMIT_VIEW - if( pTab->pSelect ){ - sqlite3ErrorMsg(pParse, "view %s may not be altered", pTab->zName); - goto exit_rename_table; + rc = u.cn.pModule->xColumn(pCur->pVtabCursor, &u.cn.sContext, pOp->p2); + importVtabErrMsg(p, u.cn.pVtab); + if( u.cn.sContext.isError ){ + rc = u.cn.sContext.isError; } -#endif -#ifndef SQLITE_OMIT_AUTHORIZATION - /* Invoke the authorization callback. */ - if( sqlite3AuthCheck(pParse, SQLITE_ALTER_TABLE, zDb, pTab->zName, 0) ){ - goto exit_rename_table; + /* Copy the result of the function to the P3 register. We + ** do this regardless of whether or not an error occurred to ensure any + ** dynamic allocation in u.cn.sContext.s (a Mem struct) is released. + */ + sqlite3VdbeChangeEncoding(&u.cn.sContext.s, encoding); + sqlite3VdbeMemMove(u.cn.pDest, &u.cn.sContext.s); + REGISTER_TRACE(pOp->p3, u.cn.pDest); + UPDATE_MAX_BLOBSIZE(u.cn.pDest); + + if( sqlite3VdbeMemTooBig(u.cn.pDest) ){ + goto too_big; } -#endif + break; +} +#endif /* SQLITE_OMIT_VIRTUALTABLE */ #ifndef SQLITE_OMIT_VIRTUALTABLE - if( sqlite3ViewGetColumnNames(pParse, pTab) ){ - goto exit_rename_table; - } - if( IsVirtual(pTab) && pTab->pMod->pModule->xRename ){ - isVirtualRename = 1; +/* Opcode: VNext P1 P2 * * * +** +** Advance virtual table P1 to the next row in its result set and +** jump to instruction P2. Or, if the virtual table has reached +** the end of its result set, then fall through to the next instruction. +*/ +case OP_VNext: { /* jump */ +#if 0 /* local variables moved into u.co */ + sqlite3_vtab *pVtab; + const sqlite3_module *pModule; + int res; + VdbeCursor *pCur; +#endif /* local variables moved into u.co */ + + u.co.res = 0; + u.co.pCur = p->apCsr[pOp->p1]; + assert( u.co.pCur->pVtabCursor ); + if( u.co.pCur->nullRow ){ + break; } -#endif + u.co.pVtab = u.co.pCur->pVtabCursor->pVtab; + u.co.pModule = u.co.pVtab->pModule; + assert( u.co.pModule->xNext ); - /* Begin a transaction and code the VerifyCookie for database iDb. - ** Then modify the schema cookie (since the ALTER TABLE modifies the - ** schema). Open a statement transaction if the table is a virtual - ** table. + /* Invoke the xNext() method of the module. There is no way for the + ** underlying implementation to return an error if one occurs during + ** xNext(). Instead, if an error occurs, true is returned (indicating that + ** data is available) and the error code returned when xColumn or + ** some other method is next invoked on the save virtual table cursor. */ - v = sqlite3GetVdbe(pParse); - if( v==0 ){ - goto exit_rename_table; + p->inVtabMethod = 1; + rc = u.co.pModule->xNext(u.co.pCur->pVtabCursor); + p->inVtabMethod = 0; + importVtabErrMsg(p, u.co.pVtab); + if( rc==SQLITE_OK ){ + u.co.res = u.co.pModule->xEof(u.co.pCur->pVtabCursor); } - sqlite3BeginWriteOperation(pParse, isVirtualRename, iDb); - sqlite3ChangeCookie(pParse, iDb); - /* If this is a virtual table, invoke the xRename() function if - ** one is defined. The xRename() callback will modify the names - ** of any resources used by the v-table implementation (including other - ** SQLite tables) that are identified by the name of the virtual table. - */ + if( !u.co.res ){ + /* If there is data, jump to P2 */ + pc = pOp->p2 - 1; + } + break; +} +#endif /* SQLITE_OMIT_VIRTUALTABLE */ + #ifndef SQLITE_OMIT_VIRTUALTABLE - if( isVirtualRename ){ - int i = ++pParse->nMem; - sqlite3VdbeAddOp4(v, OP_String8, 0, i, 0, zName, 0); - sqlite3VdbeAddOp4(v, OP_VRename, i, 0, 0,(const char*)pTab->pVtab, P4_VTAB); +/* Opcode: VRename P1 * * P4 * +** +** P4 is a pointer to a virtual table object, an sqlite3_vtab structure. +** This opcode invokes the corresponding xRename method. The value +** in register P1 is passed as the zName argument to the xRename method. +*/ +case OP_VRename: { +#if 0 /* local variables moved into u.cp */ + sqlite3_vtab *pVtab; + Mem *pName; +#endif /* local variables moved into u.cp */ + + u.cp.pVtab = pOp->p4.pVtab->pVtab; + u.cp.pName = &aMem[pOp->p1]; + assert( u.cp.pVtab->pModule->xRename ); + assert( memIsValid(u.cp.pName) ); + REGISTER_TRACE(pOp->p1, u.cp.pName); + assert( u.cp.pName->flags & MEM_Str ); + testcase( u.cp.pName->enc==SQLITE_UTF8 ); + testcase( u.cp.pName->enc==SQLITE_UTF16BE ); + testcase( u.cp.pName->enc==SQLITE_UTF16LE ); + rc = sqlite3VdbeChangeEncoding(u.cp.pName, SQLITE_UTF8); + if( rc==SQLITE_OK ){ + rc = u.cp.pVtab->pModule->xRename(u.cp.pVtab, u.cp.pName->z); + importVtabErrMsg(p, u.cp.pVtab); + p->expired = 0; } + break; +} #endif - /* figure out how many UTF-8 characters are in zName */ - zTabName = pTab->zName; - nTabName = sqlite3Utf8CharLen(zTabName, -1); +#ifndef SQLITE_OMIT_VIRTUALTABLE +/* Opcode: VUpdate P1 P2 P3 P4 * +** +** P4 is a pointer to a virtual table object, an sqlite3_vtab structure. +** This opcode invokes the corresponding xUpdate method. P2 values +** are contiguous memory cells starting at P3 to pass to the xUpdate +** invocation. The value in register (P3+P2-1) corresponds to the +** p2th element of the argv array passed to xUpdate. +** +** The xUpdate method will do a DELETE or an INSERT or both. +** The argv[0] element (which corresponds to memory cell P3) +** is the rowid of a row to delete. If argv[0] is NULL then no +** deletion occurs. The argv[1] element is the rowid of the new +** row. This can be NULL to have the virtual table select the new +** rowid for itself. The subsequent elements in the array are +** the values of columns in the new row. +** +** If P2==1 then no insert is performed. argv[0] is the rowid of +** a row to delete. +** +** P1 is a boolean flag. If it is set to true and the xUpdate call +** is successful, then the value returned by sqlite3_last_insert_rowid() +** is set to the value of the rowid for the row just inserted. +*/ +case OP_VUpdate: { +#if 0 /* local variables moved into u.cq */ + sqlite3_vtab *pVtab; + sqlite3_module *pModule; + int nArg; + int i; + sqlite_int64 rowid; + Mem **apArg; + Mem *pX; +#endif /* local variables moved into u.cq */ - /* Modify the sqlite_master table to use the new table name. */ - sqlite3NestedParse(pParse, - "UPDATE %Q.%s SET " -#ifdef SQLITE_OMIT_TRIGGER - "sql = sqlite_rename_table(sql, %Q), " -#else - "sql = CASE " - "WHEN type = 'trigger' THEN sqlite_rename_trigger(sql, %Q)" - "ELSE sqlite_rename_table(sql, %Q) END, " -#endif - "tbl_name = %Q, " - "name = CASE " - "WHEN type='table' THEN %Q " - "WHEN name LIKE 'sqlite_autoindex%%' AND type='index' THEN " - "'sqlite_autoindex_' || %Q || substr(name,%d+18) " - "ELSE name END " - "WHERE tbl_name=%Q AND " - "(type='table' OR type='index' OR type='trigger');", - zDb, SCHEMA_TABLE(iDb), zName, zName, zName, -#ifndef SQLITE_OMIT_TRIGGER - zName, -#endif - zName, nTabName, zTabName + assert( pOp->p2==1 || pOp->p5==OE_Fail || pOp->p5==OE_Rollback + || pOp->p5==OE_Abort || pOp->p5==OE_Ignore || pOp->p5==OE_Replace ); - -#ifndef SQLITE_OMIT_AUTOINCREMENT - /* If the sqlite_sequence table exists in this database, then update - ** it with the new table name. - */ - if( sqlite3FindTable(db, "sqlite_sequence", zDb) ){ - sqlite3NestedParse(pParse, - "UPDATE \"%w\".sqlite_sequence set name = %Q WHERE name = %Q", - zDb, zName, pTab->zName); + u.cq.pVtab = pOp->p4.pVtab->pVtab; + u.cq.pModule = (sqlite3_module *)u.cq.pVtab->pModule; + u.cq.nArg = pOp->p2; + assert( pOp->p4type==P4_VTAB ); + if( ALWAYS(u.cq.pModule->xUpdate) ){ + u8 vtabOnConflict = db->vtabOnConflict; + u.cq.apArg = p->apArg; + u.cq.pX = &aMem[pOp->p3]; + for(u.cq.i=0; u.cq.ivtabOnConflict = pOp->p5; + rc = u.cq.pModule->xUpdate(u.cq.pVtab, u.cq.nArg, u.cq.apArg, &u.cq.rowid); + db->vtabOnConflict = vtabOnConflict; + importVtabErrMsg(p, u.cq.pVtab); + if( rc==SQLITE_OK && pOp->p1 ){ + assert( u.cq.nArg>1 && u.cq.apArg[0] && (u.cq.apArg[0]->flags&MEM_Null) ); + db->lastRowid = lastRowid = u.cq.rowid; + } + if( rc==SQLITE_CONSTRAINT && pOp->p4.pVtab->bConstraint ){ + if( pOp->p5==OE_Ignore ){ + rc = SQLITE_OK; + }else{ + p->errorAction = ((pOp->p5==OE_Replace) ? OE_Abort : pOp->p5); + } + }else{ + p->nChange++; + } } -#endif + break; +} +#endif /* SQLITE_OMIT_VIRTUALTABLE */ -#ifndef SQLITE_OMIT_TRIGGER - /* If there are TEMP triggers on this table, modify the sqlite_temp_master - ** table. Don't do this if the table being ALTERed is itself located in - ** the temp database. - */ - if( (zWhere=whereTempTriggers(pParse, pTab))!=0 ){ - sqlite3NestedParse(pParse, - "UPDATE sqlite_temp_master SET " - "sql = sqlite_rename_trigger(sql, %Q), " - "tbl_name = %Q " - "WHERE %s;", zName, zName, zWhere); - sqlite3DbFree(db, zWhere); - } +#ifndef SQLITE_OMIT_PAGER_PRAGMAS +/* Opcode: Pagecount P1 P2 * * * +** +** Write the current number of pages in database P1 to memory cell P2. +*/ +case OP_Pagecount: { /* out2-prerelease */ + pOut->u.i = sqlite3BtreeLastPage(db->aDb[pOp->p1].pBt); + break; +} #endif - /* Drop and reload the internal table schema. */ - reloadTableSchema(pParse, pTab, zName); -exit_rename_table: - sqlite3SrcListDelete(db, pSrc); - sqlite3DbFree(db, zName); +#ifndef SQLITE_OMIT_PAGER_PRAGMAS +/* Opcode: MaxPgcnt P1 P2 P3 * * +** +** Try to set the maximum page count for database P1 to the value in P3. +** Do not let the maximum page count fall below the current page count and +** do not change the maximum page count value if P3==0. +** +** Store the maximum page count after the change in register P2. +*/ +case OP_MaxPgcnt: { /* out2-prerelease */ + unsigned int newMax; + Btree *pBt; + + pBt = db->aDb[pOp->p1].pBt; + newMax = 0; + if( pOp->p3 ){ + newMax = sqlite3BtreeLastPage(pBt); + if( newMax < (unsigned)pOp->p3 ) newMax = (unsigned)pOp->p3; + } + pOut->u.i = sqlite3BtreeMaxPageCount(pBt, newMax); + break; } +#endif -/* -** Generate code to make sure the file format number is at least minFormat. -** The generated code will increase the file format number if necessary. +#ifndef SQLITE_OMIT_TRACE +/* Opcode: Trace * * * P4 * +** +** If tracing is enabled (by the sqlite3_trace()) interface, then +** the UTF-8 string contained in P4 is emitted on the trace callback. */ -SQLITE_PRIVATE void sqlite3MinimumFileFormat(Parse *pParse, int iDb, int minFormat){ - Vdbe *v; - v = sqlite3GetVdbe(pParse); - /* The VDBE should have been allocated before this routine is called. - ** If that allocation failed, we would have quit before reaching this - ** point */ - if( ALWAYS(v) ){ - int r1 = sqlite3GetTempReg(pParse); - int r2 = sqlite3GetTempReg(pParse); - int j1; - sqlite3VdbeAddOp3(v, OP_ReadCookie, iDb, r1, BTREE_FILE_FORMAT); - sqlite3VdbeUsesBtree(v, iDb); - sqlite3VdbeAddOp2(v, OP_Integer, minFormat, r2); - j1 = sqlite3VdbeAddOp3(v, OP_Ge, r2, 0, r1); - sqlite3VdbeAddOp3(v, OP_SetCookie, iDb, BTREE_FILE_FORMAT, r2); - sqlite3VdbeJumpHere(v, j1); - sqlite3ReleaseTempReg(pParse, r1); - sqlite3ReleaseTempReg(pParse, r2); +case OP_Trace: { +#if 0 /* local variables moved into u.cr */ + char *zTrace; + char *z; +#endif /* local variables moved into u.cr */ + + if( db->xTrace && (u.cr.zTrace = (pOp->p4.z ? pOp->p4.z : p->zSql))!=0 ){ + u.cr.z = sqlite3VdbeExpandSql(p, u.cr.zTrace); + db->xTrace(db->pTraceArg, u.cr.z); + sqlite3DbFree(db, u.cr.z); + } +#ifdef SQLITE_DEBUG + if( (db->flags & SQLITE_SqlTrace)!=0 + && (u.cr.zTrace = (pOp->p4.z ? pOp->p4.z : p->zSql))!=0 + ){ + sqlite3DebugPrintf("SQL-trace: %s\n", u.cr.zTrace); } +#endif /* SQLITE_DEBUG */ + break; } +#endif -/* -** This function is called after an "ALTER TABLE ... ADD" statement -** has been parsed. Argument pColDef contains the text of the new -** column definition. + +/* Opcode: Noop * * * * * ** -** The Table structure pParse->pNewTable was extended to include -** the new column during parsing. +** Do nothing. This instruction is often useful as a jump +** destination. */ -SQLITE_PRIVATE void sqlite3AlterFinishAddColumn(Parse *pParse, Token *pColDef){ - Table *pNew; /* Copy of pParse->pNewTable */ - Table *pTab; /* Table being altered */ - int iDb; /* Database number */ - const char *zDb; /* Database name */ - const char *zTab; /* Table name */ - char *zCol; /* Null-terminated column definition */ - Column *pCol; /* The new column */ - Expr *pDflt; /* Default value for the new column */ - sqlite3 *db; /* The database connection; */ - - db = pParse->db; - if( pParse->nErr || db->mallocFailed ) return; - pNew = pParse->pNewTable; - assert( pNew ); +/* +** The magic Explain opcode are only inserted when explain==2 (which +** is to say when the EXPLAIN QUERY PLAN syntax is used.) +** This opcode records information from the optimizer. It is the +** the same as a no-op. This opcodesnever appears in a real VM program. +*/ +default: { /* This is really OP_Noop and OP_Explain */ + assert( pOp->opcode==OP_Noop || pOp->opcode==OP_Explain ); + break; +} - assert( sqlite3BtreeHoldsAllMutexes(db) ); - iDb = sqlite3SchemaToIndex(db, pNew->pSchema); - zDb = db->aDb[iDb].zName; - zTab = &pNew->zName[16]; /* Skip the "sqlite_altertab_" prefix on the name */ - pCol = &pNew->aCol[pNew->nCol-1]; - pDflt = pCol->pDflt; - pTab = sqlite3FindTable(db, zTab, zDb); - assert( pTab ); +/***************************************************************************** +** The cases of the switch statement above this line should all be indented +** by 6 spaces. But the left-most 6 spaces have been removed to improve the +** readability. From this point on down, the normal indentation rules are +** restored. +*****************************************************************************/ + } -#ifndef SQLITE_OMIT_AUTHORIZATION - /* Invoke the authorization callback. */ - if( sqlite3AuthCheck(pParse, SQLITE_ALTER_TABLE, zDb, pTab->zName, 0) ){ - return; - } +#ifdef VDBE_PROFILE + { + u64 elapsed = sqlite3Hwtime() - start; + pOp->cycles += elapsed; + pOp->cnt++; +#if 0 + fprintf(stdout, "%10llu ", elapsed); + sqlite3VdbePrintOp(stdout, origPc, &aOp[origPc]); +#endif + } #endif - /* If the default value for the new column was specified with a - ** literal NULL, then set pDflt to 0. This simplifies checking - ** for an SQL NULL default below. - */ - if( pDflt && pDflt->op==TK_NULL ){ - pDflt = 0; - } + /* The following code adds nothing to the actual functionality + ** of the program. It is only here for testing and debugging. + ** On the other hand, it does burn CPU cycles every time through + ** the evaluator loop. So we can leave it out when NDEBUG is defined. + */ +#ifndef NDEBUG + assert( pc>=-1 && pcnOp ); - /* Check that the new column is not specified as PRIMARY KEY or UNIQUE. - ** If there is a NOT NULL constraint, then the default value for the - ** column must not be NULL. - */ - if( pCol->isPrimKey ){ - sqlite3ErrorMsg(pParse, "Cannot add a PRIMARY KEY column"); - return; - } - if( pNew->pIndex ){ - sqlite3ErrorMsg(pParse, "Cannot add a UNIQUE column"); - return; - } - if( pCol->notNull && !pDflt ){ - sqlite3ErrorMsg(pParse, - "Cannot add a NOT NULL column with default value NULL"); - return; - } +#ifdef SQLITE_DEBUG + if( p->trace ){ + if( rc!=0 ) fprintf(p->trace,"rc=%d\n",rc); + if( pOp->opflags & (OPFLG_OUT2_PRERELEASE|OPFLG_OUT2) ){ + registerTrace(p->trace, pOp->p2, &aMem[pOp->p2]); + } + if( pOp->opflags & OPFLG_OUT3 ){ + registerTrace(p->trace, pOp->p3, &aMem[pOp->p3]); + } + } +#endif /* SQLITE_DEBUG */ +#endif /* NDEBUG */ + } /* The end of the for(;;) loop the loops through opcodes */ - /* Ensure the default expression is something that sqlite3ValueFromExpr() - ** can handle (i.e. not CURRENT_TIME etc.) + /* If we reach this point, it means that execution is finished with + ** an error of some kind. */ - if( pDflt ){ - sqlite3_value *pVal; - if( sqlite3ValueFromExpr(db, pDflt, SQLITE_UTF8, SQLITE_AFF_NONE, &pVal) ){ - db->mallocFailed = 1; - return; - } - if( !pVal ){ - sqlite3ErrorMsg(pParse, "Cannot add a column with non-constant default"); - return; - } - sqlite3ValueFree(pVal); +vdbe_error_halt: + assert( rc ); + p->rc = rc; + testcase( sqlite3GlobalConfig.xLog!=0 ); + sqlite3_log(rc, "statement aborts at %d: [%s] %s", + pc, p->zSql, p->zErrMsg); + sqlite3VdbeHalt(p); + if( rc==SQLITE_IOERR_NOMEM ) db->mallocFailed = 1; + rc = SQLITE_ERROR; + if( resetSchemaOnFault>0 ){ + sqlite3ResetOneSchema(db, resetSchemaOnFault-1); } - /* Modify the CREATE TABLE statement. */ - zCol = sqlite3DbStrNDup(db, (char*)pColDef->z, pColDef->n); - if( zCol ){ - char *zEnd = &zCol[pColDef->n-1]; - while( zEnd>zCol && (*zEnd==';' || sqlite3Isspace(*zEnd)) ){ - *zEnd-- = '\0'; - } - sqlite3NestedParse(pParse, - "UPDATE \"%w\".%s SET " - "sql = substr(sql,1,%d) || ', ' || %Q || substr(sql,%d) " - "WHERE type = 'table' AND name = %Q", - zDb, SCHEMA_TABLE(iDb), pNew->addColOffset, zCol, pNew->addColOffset+1, - zTab - ); - sqlite3DbFree(db, zCol); - } + /* This is the only way out of this procedure. We have to + ** release the mutexes on btrees that were acquired at the + ** top. */ +vdbe_return: + db->lastRowid = lastRowid; + sqlite3VdbeLeave(p); + return rc; - /* If the default value of the new column is NULL, then set the file - ** format to 2. If the default value of the new column is not NULL, - ** the file format becomes 3. + /* Jump to here if a string or blob larger than SQLITE_MAX_LENGTH + ** is encountered. */ - sqlite3MinimumFileFormat(pParse, iDb, pDflt ? 3 : 2); - - /* Reload the schema of the modified table. */ - reloadTableSchema(pParse, pTab, pTab->zName); -} - -/* -** This function is called by the parser after the table-name in -** an "ALTER TABLE ADD" statement is parsed. Argument -** pSrc is the full-name of the table being altered. -** -** This routine makes a (partial) copy of the Table structure -** for the table being altered and sets Parse.pNewTable to point -** to it. Routines called by the parser as the column definition -** is parsed (i.e. sqlite3AddColumn()) add the new Column data to -** the copy. The copy of the Table structure is deleted by tokenize.c -** after parsing is finished. -** -** Routine sqlite3AlterFinishAddColumn() will be called to complete -** coding the "ALTER TABLE ... ADD" statement. -*/ -SQLITE_PRIVATE void sqlite3AlterBeginAddColumn(Parse *pParse, SrcList *pSrc){ - Table *pNew; - Table *pTab; - Vdbe *v; - int iDb; - int i; - int nAlloc; - sqlite3 *db = pParse->db; - - /* Look up the table being altered. */ - assert( pParse->pNewTable==0 ); - assert( sqlite3BtreeHoldsAllMutexes(db) ); - if( db->mallocFailed ) goto exit_begin_add_column; - pTab = sqlite3LocateTable(pParse, 0, pSrc->a[0].zName, pSrc->a[0].zDatabase); - if( !pTab ) goto exit_begin_add_column; - -#ifndef SQLITE_OMIT_VIRTUALTABLE - if( IsVirtual(pTab) ){ - sqlite3ErrorMsg(pParse, "virtual tables may not be altered"); - goto exit_begin_add_column; - } -#endif - - /* Make sure this is not an attempt to ALTER a view. */ - if( pTab->pSelect ){ - sqlite3ErrorMsg(pParse, "Cannot add a column to a view"); - goto exit_begin_add_column; - } +too_big: + sqlite3SetString(&p->zErrMsg, db, "string or blob too big"); + rc = SQLITE_TOOBIG; + goto vdbe_error_halt; - assert( pTab->addColOffset>0 ); - iDb = sqlite3SchemaToIndex(db, pTab->pSchema); + /* Jump to here if a malloc() fails. + */ +no_mem: + db->mallocFailed = 1; + sqlite3SetString(&p->zErrMsg, db, "out of memory"); + rc = SQLITE_NOMEM; + goto vdbe_error_halt; - /* Put a copy of the Table struct in Parse.pNewTable for the - ** sqlite3AddColumn() function and friends to modify. But modify - ** the name by adding an "sqlite_altertab_" prefix. By adding this - ** prefix, we insure that the name will not collide with an existing - ** table because user table are not allowed to have the "sqlite_" - ** prefix on their name. + /* Jump to here for any other kind of fatal error. The "rc" variable + ** should hold the error number. */ - pNew = (Table*)sqlite3DbMallocZero(db, sizeof(Table)); - if( !pNew ) goto exit_begin_add_column; - pParse->pNewTable = pNew; - pNew->nRef = 1; - pNew->dbMem = pTab->dbMem; - pNew->nCol = pTab->nCol; - assert( pNew->nCol>0 ); - nAlloc = (((pNew->nCol-1)/8)*8)+8; - assert( nAlloc>=pNew->nCol && nAlloc%8==0 && nAlloc-pNew->nCol<8 ); - pNew->aCol = (Column*)sqlite3DbMallocZero(db, sizeof(Column)*nAlloc); - pNew->zName = sqlite3MPrintf(db, "sqlite_altertab_%s", pTab->zName); - if( !pNew->aCol || !pNew->zName ){ - db->mallocFailed = 1; - goto exit_begin_add_column; - } - memcpy(pNew->aCol, pTab->aCol, sizeof(Column)*pNew->nCol); - for(i=0; inCol; i++){ - Column *pCol = &pNew->aCol[i]; - pCol->zName = sqlite3DbStrDup(db, pCol->zName); - pCol->zColl = 0; - pCol->zType = 0; - pCol->pDflt = 0; - pCol->zDflt = 0; +abort_due_to_error: + assert( p->zErrMsg==0 ); + if( db->mallocFailed ) rc = SQLITE_NOMEM; + if( rc!=SQLITE_IOERR_NOMEM ){ + sqlite3SetString(&p->zErrMsg, db, "%s", sqlite3ErrStr(rc)); } - pNew->pSchema = db->aDb[iDb].pSchema; - pNew->addColOffset = pTab->addColOffset; - pNew->nRef = 1; - - /* Begin a transaction and increment the schema cookie. */ - sqlite3BeginWriteOperation(pParse, 0, iDb); - v = sqlite3GetVdbe(pParse); - if( !v ) goto exit_begin_add_column; - sqlite3ChangeCookie(pParse, iDb); + goto vdbe_error_halt; -exit_begin_add_column: - sqlite3SrcListDelete(db, pSrc); - return; + /* Jump to here if the sqlite3_interrupt() API sets the interrupt + ** flag. + */ +abort_due_to_interrupt: + assert( db->u1.isInterrupted ); + rc = SQLITE_INTERRUPT; + p->rc = rc; + sqlite3SetString(&p->zErrMsg, db, "%s", sqlite3ErrStr(rc)); + goto vdbe_error_halt; } -#endif /* SQLITE_ALTER_TABLE */ -/************** End of alter.c ***********************************************/ -/************** Begin file analyze.c *****************************************/ +/************** End of vdbe.c ************************************************/ +/************** Begin file vdbeblob.c ****************************************/ /* -** 2005 July 8 +** 2007 May 1 ** ** The author disclaims copyright to this source code. In place of ** a legal notice, here is a blessing: @@ -62777,431 +72090,467 @@ SQLITE_PRIVATE void sqlite3AlterBeginAddColumn(Parse *pParse, SrcList *pSrc){ ** May you share freely, never taking more than you give. ** ************************************************************************* -** This file contains code associated with the ANALYZE command. ** -** @(#) $Id: analyze.c,v 1.52 2009/04/16 17:45:48 drh Exp $ +** This file contains code used to implement incremental BLOB I/O. */ -#ifndef SQLITE_OMIT_ANALYZE + + +#ifndef SQLITE_OMIT_INCRBLOB /* -** This routine generates code that opens the sqlite_stat1 table on cursor -** iStatCur. -** -** If the sqlite_stat1 tables does not previously exist, it is created. -** If it does previously exist, all entires associated with table zWhere -** are removed. If zWhere==0 then all entries are removed. +** Valid sqlite3_blob* handles point to Incrblob structures. */ -static void openStatTable( - Parse *pParse, /* Parsing context */ - int iDb, /* The database we are looking in */ - int iStatCur, /* Open the sqlite_stat1 table on this cursor */ - const char *zWhere /* Delete entries associated with this table */ -){ - sqlite3 *db = pParse->db; - Db *pDb; - int iRootPage; - u8 createStat1 = 0; - Table *pStat; - Vdbe *v = sqlite3GetVdbe(pParse); - - if( v==0 ) return; - assert( sqlite3BtreeHoldsAllMutexes(db) ); - assert( sqlite3VdbeDb(v)==db ); - pDb = &db->aDb[iDb]; - if( (pStat = sqlite3FindTable(db, "sqlite_stat1", pDb->zName))==0 ){ - /* The sqlite_stat1 tables does not exist. Create it. - ** Note that a side-effect of the CREATE TABLE statement is to leave - ** the rootpage of the new table in register pParse->regRoot. This is - ** important because the OpenWrite opcode below will be needing it. */ - sqlite3NestedParse(pParse, - "CREATE TABLE %Q.sqlite_stat1(tbl,idx,stat)", - pDb->zName - ); - iRootPage = pParse->regRoot; - createStat1 = 1; /* Cause rootpage to be taken from top of stack */ - }else if( zWhere ){ - /* The sqlite_stat1 table exists. Delete all entries associated with - ** the table zWhere. */ - sqlite3NestedParse(pParse, - "DELETE FROM %Q.sqlite_stat1 WHERE tbl=%Q", - pDb->zName, zWhere - ); - iRootPage = pStat->tnum; - }else{ - /* The sqlite_stat1 table already exists. Delete all rows. */ - iRootPage = pStat->tnum; - sqlite3VdbeAddOp2(v, OP_Clear, pStat->tnum, iDb); - } +typedef struct Incrblob Incrblob; +struct Incrblob { + int flags; /* Copy of "flags" passed to sqlite3_blob_open() */ + int nByte; /* Size of open blob, in bytes */ + int iOffset; /* Byte offset of blob in cursor data */ + int iCol; /* Table column this handle is open on */ + BtCursor *pCsr; /* Cursor pointing at blob row */ + sqlite3_stmt *pStmt; /* Statement holding cursor open */ + sqlite3 *db; /* The associated database */ +}; - /* Open the sqlite_stat1 table for writing. Unless it was created - ** by this vdbe program, lock it for writing at the shared-cache level. - ** If this vdbe did create the sqlite_stat1 table, then it must have - ** already obtained a schema-lock, making the write-lock redundant. - */ - if( !createStat1 ){ - sqlite3TableLock(pParse, iDb, iRootPage, 1, "sqlite_stat1"); - } - sqlite3VdbeAddOp3(v, OP_OpenWrite, iStatCur, iRootPage, iDb); - sqlite3VdbeChangeP4(v, -1, (char *)3, P4_INT32); - sqlite3VdbeChangeP5(v, createStat1); -} /* -** Generate code to do an analysis of all indices associated with -** a single table. +** This function is used by both blob_open() and blob_reopen(). It seeks +** the b-tree cursor associated with blob handle p to point to row iRow. +** If successful, SQLITE_OK is returned and subsequent calls to +** sqlite3_blob_read() or sqlite3_blob_write() access the specified row. +** +** If an error occurs, or if the specified row does not exist or does not +** contain a value of type TEXT or BLOB in the column nominated when the +** blob handle was opened, then an error code is returned and *pzErr may +** be set to point to a buffer containing an error message. It is the +** responsibility of the caller to free the error message buffer using +** sqlite3DbFree(). +** +** If an error does occur, then the b-tree cursor is closed. All subsequent +** calls to sqlite3_blob_read(), blob_write() or blob_reopen() will +** immediately return SQLITE_ABORT. */ -static void analyzeOneTable( - Parse *pParse, /* Parser context */ - Table *pTab, /* Table whose indices are to be analyzed */ - int iStatCur, /* Index of VdbeCursor that writes the sqlite_stat1 table */ - int iMem /* Available memory locations begin here */ -){ - Index *pIdx; /* An index to being analyzed */ - int iIdxCur; /* Index of VdbeCursor for index being analyzed */ - int nCol; /* Number of columns in the index */ - Vdbe *v; /* The virtual machine being built up */ - int i; /* Loop counter */ - int topOfLoop; /* The top of the loop */ - int endOfLoop; /* The end of the loop */ - int addr; /* The address of an instruction */ - int iDb; /* Index of database containing pTab */ - - v = sqlite3GetVdbe(pParse); - if( v==0 || NEVER(pTab==0) || pTab->pIndex==0 ){ - /* Do no analysis for tables that have no indices */ - return; - } - assert( sqlite3BtreeHoldsAllMutexes(pParse->db) ); - iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema); - assert( iDb>=0 ); -#ifndef SQLITE_OMIT_AUTHORIZATION - if( sqlite3AuthCheck(pParse, SQLITE_ANALYZE, pTab->zName, 0, - pParse->db->aDb[iDb].zName ) ){ - return; - } -#endif +static int blobSeekToRow(Incrblob *p, sqlite3_int64 iRow, char **pzErr){ + int rc; /* Error code */ + char *zErr = 0; /* Error message */ + Vdbe *v = (Vdbe *)p->pStmt; - /* Establish a read-lock on the table at the shared-cache level. */ - sqlite3TableLock(pParse, iDb, pTab->tnum, 0, pTab->zName); + /* Set the value of the SQL statements only variable to integer iRow. + ** This is done directly instead of using sqlite3_bind_int64() to avoid + ** triggering asserts related to mutexes. + */ + assert( v->aVar[0].flags&MEM_Int ); + v->aVar[0].u.i = iRow; - iIdxCur = pParse->nTab++; - for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){ - KeyInfo *pKey = sqlite3IndexKeyinfo(pParse, pIdx); - int regFields; /* Register block for building records */ - int regRec; /* Register holding completed record */ - int regTemp; /* Temporary use register */ - int regCol; /* Content of a column from the table being analyzed */ - int regRowid; /* Rowid for the inserted record */ - int regF2; - - /* Open a cursor to the index to be analyzed - */ - assert( iDb==sqlite3SchemaToIndex(pParse->db, pIdx->pSchema) ); - nCol = pIdx->nColumn; - sqlite3VdbeAddOp4(v, OP_OpenRead, iIdxCur, pIdx->tnum, iDb, - (char *)pKey, P4_KEYINFO_HANDOFF); - VdbeComment((v, "%s", pIdx->zName)); - regFields = iMem+nCol*2; - regTemp = regRowid = regCol = regFields+3; - regRec = regCol+1; - if( regRec>pParse->nMem ){ - pParse->nMem = regRec; + rc = sqlite3_step(p->pStmt); + if( rc==SQLITE_ROW ){ + u32 type = v->apCsr[0]->aType[p->iCol]; + if( type<12 ){ + zErr = sqlite3MPrintf(p->db, "cannot open value of type %s", + type==0?"null": type==7?"real": "integer" + ); + rc = SQLITE_ERROR; + sqlite3_finalize(p->pStmt); + p->pStmt = 0; + }else{ + p->iOffset = v->apCsr[0]->aOffset[p->iCol]; + p->nByte = sqlite3VdbeSerialTypeLen(type); + p->pCsr = v->apCsr[0]->pCursor; + sqlite3BtreeEnterCursor(p->pCsr); + sqlite3BtreeCacheOverflow(p->pCsr); + sqlite3BtreeLeaveCursor(p->pCsr); } + } - /* Memory cells are used as follows: - ** - ** mem[iMem]: The total number of rows in the table. - ** mem[iMem+1]: Number of distinct values in column 1 - ** ... - ** mem[iMem+nCol]: Number of distinct values in column N - ** mem[iMem+nCol+1] Last observed value of column 1 - ** ... - ** mem[iMem+nCol+nCol]: Last observed value of column N - ** - ** Cells iMem through iMem+nCol are initialized to 0. The others - ** are initialized to NULL. - */ - for(i=0; i<=nCol; i++){ - sqlite3VdbeAddOp2(v, OP_Integer, 0, iMem+i); - } - for(i=0; ipStmt ){ + rc = sqlite3_finalize(p->pStmt); + p->pStmt = 0; + if( rc==SQLITE_OK ){ + zErr = sqlite3MPrintf(p->db, "no such rowid: %lld", iRow); + rc = SQLITE_ERROR; + }else{ + zErr = sqlite3MPrintf(p->db, "%s", sqlite3_errmsg(p->db)); } + } - /* Do the analysis. - */ - endOfLoop = sqlite3VdbeMakeLabel(v); - sqlite3VdbeAddOp2(v, OP_Rewind, iIdxCur, endOfLoop); - topOfLoop = sqlite3VdbeCurrentAddr(v); - sqlite3VdbeAddOp2(v, OP_AddImm, iMem, 1); - for(i=0; i0 then it is always the case the D>0 so division by zero - ** is never possible. - */ - addr = sqlite3VdbeAddOp1(v, OP_IfNot, iMem); - sqlite3VdbeAddOp4(v, OP_String8, 0, regFields, 0, pTab->zName, 0); - sqlite3VdbeAddOp4(v, OP_String8, 0, regFields+1, 0, pIdx->zName, 0); - regF2 = regFields+2; - sqlite3VdbeAddOp2(v, OP_SCopy, iMem, regF2); - for(i=0; i read/write access, false -> read-only */ + sqlite3_blob **ppBlob /* Handle for accessing the blob returned here */ +){ + int nAttempt = 0; + int iCol; /* Index of zColumn in row-record */ -/* -** Generate code that will do an analysis of an entire database -*/ -static void analyzeDatabase(Parse *pParse, int iDb){ - sqlite3 *db = pParse->db; - Schema *pSchema = db->aDb[iDb].pSchema; /* Schema of database iDb */ - HashElem *k; - int iStatCur; - int iMem; + /* This VDBE program seeks a btree cursor to the identified + ** db/table/row entry. The reason for using a vdbe program instead + ** of writing code to use the b-tree layer directly is that the + ** vdbe program will take advantage of the various transaction, + ** locking and error handling infrastructure built into the vdbe. + ** + ** After seeking the cursor, the vdbe executes an OP_ResultRow. + ** Code external to the Vdbe then "borrows" the b-tree cursor and + ** uses it to implement the blob_read(), blob_write() and + ** blob_bytes() functions. + ** + ** The sqlite3_blob_close() function finalizes the vdbe program, + ** which closes the b-tree cursor and (possibly) commits the + ** transaction. + */ + static const VdbeOpList openBlob[] = { + {OP_Transaction, 0, 0, 0}, /* 0: Start a transaction */ + {OP_VerifyCookie, 0, 0, 0}, /* 1: Check the schema cookie */ + {OP_TableLock, 0, 0, 0}, /* 2: Acquire a read or write lock */ + + /* One of the following two instructions is replaced by an OP_Noop. */ + {OP_OpenRead, 0, 0, 0}, /* 3: Open cursor 0 for reading */ + {OP_OpenWrite, 0, 0, 0}, /* 4: Open cursor 0 for read/write */ + + {OP_Variable, 1, 1, 1}, /* 5: Push the rowid to the stack */ + {OP_NotExists, 0, 10, 1}, /* 6: Seek the cursor */ + {OP_Column, 0, 0, 1}, /* 7 */ + {OP_ResultRow, 1, 0, 0}, /* 8 */ + {OP_Goto, 0, 5, 0}, /* 9 */ + {OP_Close, 0, 0, 0}, /* 10 */ + {OP_Halt, 0, 0, 0}, /* 11 */ + }; - sqlite3BeginWriteOperation(pParse, 0, iDb); - iStatCur = pParse->nTab++; - openStatTable(pParse, iDb, iStatCur, 0); - iMem = pParse->nMem+1; - for(k=sqliteHashFirst(&pSchema->tblHash); k; k=sqliteHashNext(k)){ - Table *pTab = (Table*)sqliteHashData(k); - analyzeOneTable(pParse, pTab, iStatCur, iMem); - } - loadAnalysis(pParse, iDb); -} + int rc = SQLITE_OK; + char *zErr = 0; + Table *pTab; + Parse *pParse = 0; + Incrblob *pBlob = 0; -/* -** Generate code that will do an analysis of a single table in -** a database. -*/ -static void analyzeTable(Parse *pParse, Table *pTab){ - int iDb; - int iStatCur; + flags = !!flags; /* flags = (flags ? 1 : 0); */ + *ppBlob = 0; - assert( pTab!=0 ); - assert( sqlite3BtreeHoldsAllMutexes(pParse->db) ); - iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema); - sqlite3BeginWriteOperation(pParse, 0, iDb); - iStatCur = pParse->nTab++; - openStatTable(pParse, iDb, iStatCur, pTab->zName); - analyzeOneTable(pParse, pTab, iStatCur, pParse->nMem+1); - loadAnalysis(pParse, iDb); -} + sqlite3_mutex_enter(db->mutex); -/* -** Generate code for the ANALYZE command. The parser calls this routine -** when it recognizes an ANALYZE command. -** -** ANALYZE -- 1 -** ANALYZE -- 2 -** ANALYZE ?.? -- 3 -** -** Form 1 causes all indices in all attached databases to be analyzed. -** Form 2 analyzes all indices the single database named. -** Form 3 analyzes all indices associated with the named table. -*/ -SQLITE_PRIVATE void sqlite3Analyze(Parse *pParse, Token *pName1, Token *pName2){ - sqlite3 *db = pParse->db; - int iDb; - int i; - char *z, *zDb; - Table *pTab; - Token *pTableName; + pBlob = (Incrblob *)sqlite3DbMallocZero(db, sizeof(Incrblob)); + if( !pBlob ) goto blob_open_out; + pParse = sqlite3StackAllocRaw(db, sizeof(*pParse)); + if( !pParse ) goto blob_open_out; - /* Read the database schema. If an error occurs, leave an error message - ** and code in pParse and return NULL. */ - assert( sqlite3BtreeHoldsAllMutexes(pParse->db) ); - if( SQLITE_OK!=sqlite3ReadSchema(pParse) ){ - return; - } + do { + memset(pParse, 0, sizeof(Parse)); + pParse->db = db; + sqlite3DbFree(db, zErr); + zErr = 0; - assert( pName2!=0 || pName1==0 ); - if( pName1==0 ){ - /* Form 1: Analyze everything */ - for(i=0; inDb; i++){ - if( i==1 ) continue; /* Do not analyze the TEMP database */ - analyzeDatabase(pParse, i); + sqlite3BtreeEnterAll(db); + pTab = sqlite3LocateTable(pParse, 0, zTable, zDb); + if( pTab && IsVirtual(pTab) ){ + pTab = 0; + sqlite3ErrorMsg(pParse, "cannot open virtual table: %s", zTable); } - }else if( pName2->n==0 ){ - /* Form 2: Analyze the database or table named */ - iDb = sqlite3FindDb(db, pName1); - if( iDb>=0 ){ - analyzeDatabase(pParse, iDb); - }else{ - z = sqlite3NameFromToken(db, pName1); - if( z ){ - pTab = sqlite3LocateTable(pParse, 0, z, 0); - sqlite3DbFree(db, z); - if( pTab ){ - analyzeTable(pParse, pTab); - } +#ifndef SQLITE_OMIT_VIEW + if( pTab && pTab->pSelect ){ + pTab = 0; + sqlite3ErrorMsg(pParse, "cannot open view: %s", zTable); + } +#endif + if( !pTab ){ + if( pParse->zErrMsg ){ + sqlite3DbFree(db, zErr); + zErr = pParse->zErrMsg; + pParse->zErrMsg = 0; } + rc = SQLITE_ERROR; + sqlite3BtreeLeaveAll(db); + goto blob_open_out; } - }else{ - /* Form 3: Analyze the fully qualified table name */ - iDb = sqlite3TwoPartName(pParse, pName1, pName2, &pTableName); - if( iDb>=0 ){ - zDb = db->aDb[iDb].zName; - z = sqlite3NameFromToken(db, pTableName); - if( z ){ - pTab = sqlite3LocateTable(pParse, 0, z, zDb); - sqlite3DbFree(db, z); - if( pTab ){ - analyzeTable(pParse, pTab); + + /* Now search pTab for the exact column. */ + for(iCol=0; iColnCol; iCol++) { + if( sqlite3StrICmp(pTab->aCol[iCol].zName, zColumn)==0 ){ + break; + } + } + if( iCol==pTab->nCol ){ + sqlite3DbFree(db, zErr); + zErr = sqlite3MPrintf(db, "no such column: \"%s\"", zColumn); + rc = SQLITE_ERROR; + sqlite3BtreeLeaveAll(db); + goto blob_open_out; + } + + /* If the value is being opened for writing, check that the + ** column is not indexed, and that it is not part of a foreign key. + ** It is against the rules to open a column to which either of these + ** descriptions applies for writing. */ + if( flags ){ + const char *zFault = 0; + Index *pIdx; +#ifndef SQLITE_OMIT_FOREIGN_KEY + if( db->flags&SQLITE_ForeignKeys ){ + /* Check that the column is not part of an FK child key definition. It + ** is not necessary to check if it is part of a parent key, as parent + ** key columns must be indexed. The check below will pick up this + ** case. */ + FKey *pFKey; + for(pFKey=pTab->pFKey; pFKey; pFKey=pFKey->pNextFrom){ + int j; + for(j=0; jnCol; j++){ + if( pFKey->aCol[j].iFrom==iCol ){ + zFault = "foreign key"; + } + } } } - } +#endif + for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){ + int j; + for(j=0; jnColumn; j++){ + if( pIdx->aiColumn[j]==iCol ){ + zFault = "indexed"; + } + } + } + if( zFault ){ + sqlite3DbFree(db, zErr); + zErr = sqlite3MPrintf(db, "cannot open %s column for writing", zFault); + rc = SQLITE_ERROR; + sqlite3BtreeLeaveAll(db); + goto blob_open_out; + } + } + + pBlob->pStmt = (sqlite3_stmt *)sqlite3VdbeCreate(db); + assert( pBlob->pStmt || db->mallocFailed ); + if( pBlob->pStmt ){ + Vdbe *v = (Vdbe *)pBlob->pStmt; + int iDb = sqlite3SchemaToIndex(db, pTab->pSchema); + + sqlite3VdbeAddOpList(v, sizeof(openBlob)/sizeof(VdbeOpList), openBlob); + + + /* Configure the OP_Transaction */ + sqlite3VdbeChangeP1(v, 0, iDb); + sqlite3VdbeChangeP2(v, 0, flags); + + /* Configure the OP_VerifyCookie */ + sqlite3VdbeChangeP1(v, 1, iDb); + sqlite3VdbeChangeP2(v, 1, pTab->pSchema->schema_cookie); + sqlite3VdbeChangeP3(v, 1, pTab->pSchema->iGeneration); + + /* Make sure a mutex is held on the table to be accessed */ + sqlite3VdbeUsesBtree(v, iDb); + + /* Configure the OP_TableLock instruction */ +#ifdef SQLITE_OMIT_SHARED_CACHE + sqlite3VdbeChangeToNoop(v, 2); +#else + sqlite3VdbeChangeP1(v, 2, iDb); + sqlite3VdbeChangeP2(v, 2, pTab->tnum); + sqlite3VdbeChangeP3(v, 2, flags); + sqlite3VdbeChangeP4(v, 2, pTab->zName, P4_TRANSIENT); +#endif + + /* Remove either the OP_OpenWrite or OpenRead. Set the P2 + ** parameter of the other to pTab->tnum. */ + sqlite3VdbeChangeToNoop(v, 4 - flags); + sqlite3VdbeChangeP2(v, 3 + flags, pTab->tnum); + sqlite3VdbeChangeP3(v, 3 + flags, iDb); + + /* Configure the number of columns. Configure the cursor to + ** think that the table has one more column than it really + ** does. An OP_Column to retrieve this imaginary column will + ** always return an SQL NULL. This is useful because it means + ** we can invoke OP_Column to fill in the vdbe cursors type + ** and offset cache without causing any IO. + */ + sqlite3VdbeChangeP4(v, 3+flags, SQLITE_INT_TO_PTR(pTab->nCol+1),P4_INT32); + sqlite3VdbeChangeP2(v, 7, pTab->nCol); + if( !db->mallocFailed ){ + pParse->nVar = 1; + pParse->nMem = 1; + pParse->nTab = 1; + sqlite3VdbeMakeReady(v, pParse); + } + } + + pBlob->flags = flags; + pBlob->iCol = iCol; + pBlob->db = db; + sqlite3BtreeLeaveAll(db); + if( db->mallocFailed ){ + goto blob_open_out; + } + sqlite3_bind_int64(pBlob->pStmt, 1, iRow); + rc = blobSeekToRow(pBlob, iRow, &zErr); + } while( (++nAttempt)<5 && rc==SQLITE_SCHEMA ); + +blob_open_out: + if( rc==SQLITE_OK && db->mallocFailed==0 ){ + *ppBlob = (sqlite3_blob *)pBlob; + }else{ + if( pBlob && pBlob->pStmt ) sqlite3VdbeFinalize((Vdbe *)pBlob->pStmt); + sqlite3DbFree(db, pBlob); } + sqlite3Error(db, rc, (zErr ? "%s" : 0), zErr); + sqlite3DbFree(db, zErr); + sqlite3StackFree(db, pParse); + rc = sqlite3ApiExit(db, rc); + sqlite3_mutex_leave(db->mutex); + return rc; } /* -** Used to pass information from the analyzer reader through to the -** callback routine. +** Close a blob handle that was previously created using +** sqlite3_blob_open(). */ -typedef struct analysisInfo analysisInfo; -struct analysisInfo { +SQLITE_API int sqlite3_blob_close(sqlite3_blob *pBlob){ + Incrblob *p = (Incrblob *)pBlob; + int rc; sqlite3 *db; - const char *zDatabase; -}; + + if( p ){ + db = p->db; + sqlite3_mutex_enter(db->mutex); + rc = sqlite3_finalize(p->pStmt); + sqlite3DbFree(db, p); + sqlite3_mutex_leave(db->mutex); + }else{ + rc = SQLITE_OK; + } + return rc; +} /* -** This callback is invoked once for each index when reading the -** sqlite_stat1 table. -** -** argv[0] = name of the index -** argv[1] = results of analysis - on integer for each column +** Perform a read or write operation on a blob */ -static int analysisLoader(void *pData, int argc, char **argv, char **NotUsed){ - analysisInfo *pInfo = (analysisInfo*)pData; - Index *pIndex; - int i, c; - unsigned int v; - const char *z; +static int blobReadWrite( + sqlite3_blob *pBlob, + void *z, + int n, + int iOffset, + int (*xCall)(BtCursor*, u32, u32, void*) +){ + int rc; + Incrblob *p = (Incrblob *)pBlob; + Vdbe *v; + sqlite3 *db; - assert( argc==2 ); - UNUSED_PARAMETER2(NotUsed, argc); + if( p==0 ) return SQLITE_MISUSE_BKPT; + db = p->db; + sqlite3_mutex_enter(db->mutex); + v = (Vdbe*)p->pStmt; - if( argv==0 || argv[0]==0 || argv[1]==0 ){ - return 0; - } - pIndex = sqlite3FindIndex(pInfo->db, argv[0], pInfo->zDatabase); - if( pIndex==0 ){ - return 0; - } - z = argv[1]; - for(i=0; *z && i<=pIndex->nColumn; i++){ - v = 0; - while( (c=z[0])>='0' && c<='9' ){ - v = v*10 + c - '0'; - z++; + if( n<0 || iOffset<0 || (iOffset+n)>p->nByte ){ + /* Request is out of range. Return a transient error. */ + rc = SQLITE_ERROR; + sqlite3Error(db, SQLITE_ERROR, 0); + }else if( v==0 ){ + /* If there is no statement handle, then the blob-handle has + ** already been invalidated. Return SQLITE_ABORT in this case. + */ + rc = SQLITE_ABORT; + }else{ + /* Call either BtreeData() or BtreePutData(). If SQLITE_ABORT is + ** returned, clean-up the statement handle. + */ + assert( db == v->db ); + sqlite3BtreeEnterCursor(p->pCsr); + rc = xCall(p->pCsr, iOffset+p->iOffset, n, z); + sqlite3BtreeLeaveCursor(p->pCsr); + if( rc==SQLITE_ABORT ){ + sqlite3VdbeFinalize(v); + p->pStmt = 0; + }else{ + db->errCode = rc; + v->rc = rc; } - pIndex->aiRowEst[i] = v; - if( *z==' ' ) z++; } - return 0; + rc = sqlite3ApiExit(db, rc); + sqlite3_mutex_leave(db->mutex); + return rc; } /* -** Load the content of the sqlite_stat1 table into the index hash tables. +** Read data from a blob handle. */ -SQLITE_PRIVATE int sqlite3AnalysisLoad(sqlite3 *db, int iDb){ - analysisInfo sInfo; - HashElem *i; - char *zSql; - int rc; +SQLITE_API int sqlite3_blob_read(sqlite3_blob *pBlob, void *z, int n, int iOffset){ + return blobReadWrite(pBlob, z, n, iOffset, sqlite3BtreeData); +} - assert( iDb>=0 && iDbnDb ); - assert( db->aDb[iDb].pBt!=0 ); - assert( sqlite3BtreeHoldsMutex(db->aDb[iDb].pBt) ); +/* +** Write data to a blob handle. +*/ +SQLITE_API int sqlite3_blob_write(sqlite3_blob *pBlob, const void *z, int n, int iOffset){ + return blobReadWrite(pBlob, (void *)z, n, iOffset, sqlite3BtreePutData); +} - /* Clear any prior statistics */ - for(i=sqliteHashFirst(&db->aDb[iDb].pSchema->idxHash);i;i=sqliteHashNext(i)){ - Index *pIdx = sqliteHashData(i); - sqlite3DefaultRowEst(pIdx); - } +/* +** Query a blob handle for the size of the data. +** +** The Incrblob.nByte field is fixed for the lifetime of the Incrblob +** so no mutex is required for access. +*/ +SQLITE_API int sqlite3_blob_bytes(sqlite3_blob *pBlob){ + Incrblob *p = (Incrblob *)pBlob; + return (p && p->pStmt) ? p->nByte : 0; +} - /* Check to make sure the sqlite_stat1 table existss */ - sInfo.db = db; - sInfo.zDatabase = db->aDb[iDb].zName; - if( sqlite3FindTable(db, "sqlite_stat1", sInfo.zDatabase)==0 ){ - return SQLITE_ERROR; - } +/* +** Move an existing blob handle to point to a different row of the same +** database table. +** +** If an error occurs, or if the specified row does not exist or does not +** contain a blob or text value, then an error code is returned and the +** database handle error code and message set. If this happens, then all +** subsequent calls to sqlite3_blob_xxx() functions (except blob_close()) +** immediately return SQLITE_ABORT. +*/ +SQLITE_API int sqlite3_blob_reopen(sqlite3_blob *pBlob, sqlite3_int64 iRow){ + int rc; + Incrblob *p = (Incrblob *)pBlob; + sqlite3 *db; + if( p==0 ) return SQLITE_MISUSE_BKPT; + db = p->db; + sqlite3_mutex_enter(db->mutex); - /* Load new statistics out of the sqlite_stat1 table */ - zSql = sqlite3MPrintf(db, "SELECT idx, stat FROM %Q.sqlite_stat1", - sInfo.zDatabase); - if( zSql==0 ){ - rc = SQLITE_NOMEM; + if( p->pStmt==0 ){ + /* If there is no statement handle, then the blob-handle has + ** already been invalidated. Return SQLITE_ABORT in this case. + */ + rc = SQLITE_ABORT; }else{ - (void)sqlite3SafetyOff(db); - rc = sqlite3_exec(db, zSql, analysisLoader, &sInfo, 0); - (void)sqlite3SafetyOn(db); - sqlite3DbFree(db, zSql); - if( rc==SQLITE_NOMEM ) db->mallocFailed = 1; + char *zErr; + rc = blobSeekToRow(p, iRow, &zErr); + if( rc!=SQLITE_OK ){ + sqlite3Error(db, rc, (zErr ? "%s" : 0), zErr); + sqlite3DbFree(db, zErr); + } + assert( rc!=SQLITE_SCHEMA ); } + + rc = sqlite3ApiExit(db, rc); + assert( rc==SQLITE_OK || p->pStmt==0 ); + sqlite3_mutex_leave(db->mutex); return rc; } +#endif /* #ifndef SQLITE_OMIT_INCRBLOB */ -#endif /* SQLITE_OMIT_ANALYZE */ - -/************** End of analyze.c *********************************************/ -/************** Begin file attach.c ******************************************/ +/************** End of vdbeblob.c ********************************************/ +/************** Begin file vdbesort.c ****************************************/ /* -** 2003 April 6 +** 2011 July 9 ** ** The author disclaims copyright to this source code. In place of ** a legal notice, here is a blessing: @@ -63211,536 +72560,880 @@ SQLITE_PRIVATE int sqlite3AnalysisLoad(sqlite3 *db, int iDb){ ** May you share freely, never taking more than you give. ** ************************************************************************* -** This file contains code used to implement the ATTACH and DETACH commands. -** -** $Id: attach.c,v 1.93 2009/05/31 21:21:41 drh Exp $ +** This file contains code for the VdbeSorter object, used in concert with +** a VdbeCursor to sort large numbers of keys (as may be required, for +** example, by CREATE INDEX statements on tables too large to fit in main +** memory). */ -#ifndef SQLITE_OMIT_ATTACH + +#ifndef SQLITE_OMIT_MERGE_SORT + +typedef struct VdbeSorterIter VdbeSorterIter; +typedef struct SorterRecord SorterRecord; + /* -** Resolve an expression that was part of an ATTACH or DETACH statement. This -** is slightly different from resolving a normal SQL expression, because simple -** identifiers are treated as strings, not possible column names or aliases. +** NOTES ON DATA STRUCTURE USED FOR N-WAY MERGES: ** -** i.e. if the parser sees: +** As keys are added to the sorter, they are written to disk in a series +** of sorted packed-memory-arrays (PMAs). The size of each PMA is roughly +** the same as the cache-size allowed for temporary databases. In order +** to allow the caller to extract keys from the sorter in sorted order, +** all PMAs currently stored on disk must be merged together. This comment +** describes the data structure used to do so. The structure supports +** merging any number of arrays in a single pass with no redundant comparison +** operations. ** -** ATTACH DATABASE abc AS def +** The aIter[] array contains an iterator for each of the PMAs being merged. +** An aIter[] iterator either points to a valid key or else is at EOF. For +** the purposes of the paragraphs below, we assume that the array is actually +** N elements in size, where N is the smallest power of 2 greater to or equal +** to the number of iterators being merged. The extra aIter[] elements are +** treated as if they are empty (always at EOF). ** -** it treats the two expressions as literal strings 'abc' and 'def' instead of -** looking for columns of the same name. +** The aTree[] array is also N elements in size. The value of N is stored in +** the VdbeSorter.nTree variable. ** -** This only applies to the root node of pExpr, so the statement: +** The final (N/2) elements of aTree[] contain the results of comparing +** pairs of iterator keys together. Element i contains the result of +** comparing aIter[2*i-N] and aIter[2*i-N+1]. Whichever key is smaller, the +** aTree element is set to the index of it. ** -** ATTACH DATABASE abc||def AS 'db2' +** For the purposes of this comparison, EOF is considered greater than any +** other key value. If the keys are equal (only possible with two EOF +** values), it doesn't matter which index is stored. ** -** will fail because neither abc or def can be resolved. +** The (N/4) elements of aTree[] that preceed the final (N/2) described +** above contains the index of the smallest of each block of 4 iterators. +** And so on. So that aTree[1] contains the index of the iterator that +** currently points to the smallest key value. aTree[0] is unused. +** +** Example: +** +** aIter[0] -> Banana +** aIter[1] -> Feijoa +** aIter[2] -> Elderberry +** aIter[3] -> Currant +** aIter[4] -> Grapefruit +** aIter[5] -> Apple +** aIter[6] -> Durian +** aIter[7] -> EOF +** +** aTree[] = { X, 5 0, 5 0, 3, 5, 6 } +** +** The current element is "Apple" (the value of the key indicated by +** iterator 5). When the Next() operation is invoked, iterator 5 will +** be advanced to the next key in its segment. Say the next key is +** "Eggplant": +** +** aIter[5] -> Eggplant +** +** The contents of aTree[] are updated first by comparing the new iterator +** 5 key to the current key of iterator 4 (still "Grapefruit"). The iterator +** 5 value is still smaller, so aTree[6] is set to 5. And so on up the tree. +** The value of iterator 6 - "Durian" - is now smaller than that of iterator +** 5, so aTree[3] is set to 6. Key 0 is smaller than key 6 (Bananaop!=TK_ID ){ - rc = sqlite3ResolveExprNames(pName, pExpr); - if( rc==SQLITE_OK && !sqlite3ExprIsConstant(pExpr) ){ - sqlite3ErrorMsg(pName->pParse, "invalid name: \"%s\"", pExpr->u.zToken); - return SQLITE_ERROR; +struct VdbeSorterIter { + i64 iReadOff; /* Current read offset */ + i64 iEof; /* 1 byte past EOF for this iterator */ + int nAlloc; /* Bytes of space at aAlloc */ + int nKey; /* Number of bytes in key */ + sqlite3_file *pFile; /* File iterator is reading from */ + u8 *aAlloc; /* Allocated space */ + u8 *aKey; /* Pointer to current key */ +}; + +/* +** A structure to store a single record. All in-memory records are connected +** together into a linked list headed at VdbeSorter.pRecord using the +** SorterRecord.pNext pointer. +*/ +struct SorterRecord { + void *pVal; + int nVal; + SorterRecord *pNext; +}; + +/* Minimum allowable value for the VdbeSorter.nWorking variable */ +#define SORTER_MIN_WORKING 10 + +/* Maximum number of segments to merge in a single pass. */ +#define SORTER_MAX_MERGE_COUNT 16 + +/* +** Free all memory belonging to the VdbeSorterIter object passed as the second +** argument. All structure fields are set to zero before returning. +*/ +static void vdbeSorterIterZero(sqlite3 *db, VdbeSorterIter *pIter){ + sqlite3DbFree(db, pIter->aAlloc); + memset(pIter, 0, sizeof(VdbeSorterIter)); +} + +/* +** Advance iterator pIter to the next key in its PMA. Return SQLITE_OK if +** no error occurs, or an SQLite error code if one does. +*/ +static int vdbeSorterIterNext( + sqlite3 *db, /* Database handle (for sqlite3DbMalloc() ) */ + VdbeSorterIter *pIter /* Iterator to advance */ +){ + int rc; /* Return Code */ + int nRead; /* Number of bytes read */ + int nRec = 0; /* Size of record in bytes */ + int iOff = 0; /* Size of serialized size varint in bytes */ + + assert( pIter->iEof>=pIter->iReadOff ); + if( pIter->iEof-pIter->iReadOff>5 ){ + nRead = 5; + }else{ + nRead = (int)(pIter->iEof - pIter->iReadOff); + } + if( nRead<=0 ){ + /* This is an EOF condition */ + vdbeSorterIterZero(db, pIter); + return SQLITE_OK; + } + + rc = sqlite3OsRead(pIter->pFile, pIter->aAlloc, nRead, pIter->iReadOff); + if( rc==SQLITE_OK ){ + iOff = getVarint32(pIter->aAlloc, nRec); + if( (iOff+nRec)>nRead ){ + int nRead2; /* Number of extra bytes to read */ + if( (iOff+nRec)>pIter->nAlloc ){ + int nNew = pIter->nAlloc*2; + while( (iOff+nRec)>nNew ) nNew = nNew*2; + pIter->aAlloc = sqlite3DbReallocOrFree(db, pIter->aAlloc, nNew); + if( !pIter->aAlloc ) return SQLITE_NOMEM; + pIter->nAlloc = nNew; } - }else{ - pExpr->op = TK_STRING; + + nRead2 = iOff + nRec - nRead; + rc = sqlite3OsRead( + pIter->pFile, &pIter->aAlloc[nRead], nRead2, pIter->iReadOff+nRead + ); } } + + assert( rc!=SQLITE_OK || nRec>0 ); + pIter->iReadOff += iOff+nRec; + pIter->nKey = nRec; + pIter->aKey = &pIter->aAlloc[iOff]; return rc; } /* -** An SQL user-function registered to do the work of an ATTACH statement. The -** three arguments to the function come directly from an attach statement: -** -** ATTACH DATABASE x AS y KEY z +** Write a single varint, value iVal, to file-descriptor pFile. Return +** SQLITE_OK if successful, or an SQLite error code if some error occurs. ** -** SELECT sqlite_attach(x, y, z) +** The value of *piOffset when this function is called is used as the byte +** offset in file pFile to write to. Before returning, *piOffset is +** incremented by the number of bytes written. +*/ +static int vdbeSorterWriteVarint( + sqlite3_file *pFile, /* File to write to */ + i64 iVal, /* Value to write as a varint */ + i64 *piOffset /* IN/OUT: Write offset in file pFile */ +){ + u8 aVarint[9]; /* Buffer large enough for a varint */ + int nVarint; /* Number of used bytes in varint */ + int rc; /* Result of write() call */ + + nVarint = sqlite3PutVarint(aVarint, iVal); + rc = sqlite3OsWrite(pFile, aVarint, nVarint, *piOffset); + *piOffset += nVarint; + + return rc; +} + +/* +** Read a single varint from file-descriptor pFile. Return SQLITE_OK if +** successful, or an SQLite error code if some error occurs. ** -** If the optional "KEY z" syntax is omitted, an SQL NULL is passed as the -** third argument. +** The value of *piOffset when this function is called is used as the +** byte offset in file pFile from whence to read the varint. If successful +** (i.e. if no IO error occurs), then *piOffset is set to the offset of +** the first byte past the end of the varint before returning. *piVal is +** set to the integer value read. If an error occurs, the final values of +** both *piOffset and *piVal are undefined. */ -static void attachFunc( - sqlite3_context *context, - int NotUsed, - sqlite3_value **argv +static int vdbeSorterReadVarint( + sqlite3_file *pFile, /* File to read from */ + i64 *piOffset, /* IN/OUT: Read offset in pFile */ + i64 *piVal /* OUT: Value read from file */ ){ - int i; - int rc = 0; - sqlite3 *db = sqlite3_context_db_handle(context); - const char *zName; - const char *zFile; - Db *aNew; - char *zErrDyn = 0; + u8 aVarint[9]; /* Buffer large enough for a varint */ + i64 iOff = *piOffset; /* Offset in file to read from */ + int rc; /* Return code */ - UNUSED_PARAMETER(NotUsed); + rc = sqlite3OsRead(pFile, aVarint, 9, iOff); + if( rc==SQLITE_OK ){ + *piOffset += getVarint(aVarint, (u64 *)piVal); + } - zFile = (const char *)sqlite3_value_text(argv[0]); - zName = (const char *)sqlite3_value_text(argv[1]); - if( zFile==0 ) zFile = ""; - if( zName==0 ) zName = ""; + return rc; +} - /* Check for the following errors: - ** - ** * Too many attached databases, - ** * Transaction currently open - ** * Specified database name already being used. - */ - if( db->nDb>=db->aLimit[SQLITE_LIMIT_ATTACHED]+2 ){ - zErrDyn = sqlite3MPrintf(db, "too many attached databases - max %d", - db->aLimit[SQLITE_LIMIT_ATTACHED] - ); - goto attach_error; +/* +** Initialize iterator pIter to scan through the PMA stored in file pFile +** starting at offset iStart and ending at offset iEof-1. This function +** leaves the iterator pointing to the first key in the PMA (or EOF if the +** PMA is empty). +*/ +static int vdbeSorterIterInit( + sqlite3 *db, /* Database handle */ + VdbeSorter *pSorter, /* Sorter object */ + i64 iStart, /* Start offset in pFile */ + VdbeSorterIter *pIter, /* Iterator to populate */ + i64 *pnByte /* IN/OUT: Increment this value by PMA size */ +){ + int rc; + + assert( pSorter->iWriteOff>iStart ); + assert( pIter->aAlloc==0 ); + pIter->pFile = pSorter->pTemp1; + pIter->iReadOff = iStart; + pIter->nAlloc = 128; + pIter->aAlloc = (u8 *)sqlite3DbMallocRaw(db, pIter->nAlloc); + if( !pIter->aAlloc ){ + rc = SQLITE_NOMEM; + }else{ + i64 nByte; /* Total size of PMA in bytes */ + rc = vdbeSorterReadVarint(pSorter->pTemp1, &pIter->iReadOff, &nByte); + *pnByte += nByte; + pIter->iEof = pIter->iReadOff + nByte; } - if( !db->autoCommit ){ - zErrDyn = sqlite3MPrintf(db, "cannot ATTACH database within transaction"); - goto attach_error; + if( rc==SQLITE_OK ){ + rc = vdbeSorterIterNext(db, pIter); } - for(i=0; inDb; i++){ - char *z = db->aDb[i].zName; - assert( z && zName ); - if( sqlite3StrICmp(z, zName)==0 ){ - zErrDyn = sqlite3MPrintf(db, "database %s is already in use", zName); - goto attach_error; + return rc; +} + + +/* +** Compare key1 (buffer pKey1, size nKey1 bytes) with key2 (buffer pKey2, +** size nKey2 bytes). Argument pKeyInfo supplies the collation functions +** used by the comparison. If an error occurs, return an SQLite error code. +** Otherwise, return SQLITE_OK and set *pRes to a negative, zero or positive +** value, depending on whether key1 is smaller, equal to or larger than key2. +** +** If the bOmitRowid argument is non-zero, assume both keys end in a rowid +** field. For the purposes of the comparison, ignore it. Also, if bOmitRowid +** is true and key1 contains even a single NULL value, it is considered to +** be less than key2. Even if key2 also contains NULL values. +** +** If pKey2 is passed a NULL pointer, then it is assumed that the pCsr->aSpace +** has been allocated and contains an unpacked record that is used as key2. +*/ +static void vdbeSorterCompare( + VdbeCursor *pCsr, /* Cursor object (for pKeyInfo) */ + int bOmitRowid, /* Ignore rowid field at end of keys */ + void *pKey1, int nKey1, /* Left side of comparison */ + void *pKey2, int nKey2, /* Right side of comparison */ + int *pRes /* OUT: Result of comparison */ +){ + KeyInfo *pKeyInfo = pCsr->pKeyInfo; + VdbeSorter *pSorter = pCsr->pSorter; + UnpackedRecord *r2 = pSorter->pUnpacked; + int i; + + if( pKey2 ){ + sqlite3VdbeRecordUnpack(pKeyInfo, nKey2, pKey2, r2); + } + + if( bOmitRowid ){ + r2->nField = pKeyInfo->nField; + assert( r2->nField>0 ); + for(i=0; inField; i++){ + if( r2->aMem[i].flags & MEM_Null ){ + *pRes = -1; + return; + } } + r2->flags |= UNPACKED_PREFIX_MATCH; } - /* Allocate the new entry in the db->aDb[] array and initialise the schema - ** hash tables. - */ - if( db->aDb==db->aDbStatic ){ - aNew = sqlite3DbMallocRaw(db, sizeof(db->aDb[0])*3 ); - if( aNew==0 ) return; - memcpy(aNew, db->aDb, sizeof(db->aDb[0])*2); + *pRes = sqlite3VdbeRecordCompare(nKey1, pKey1, r2); +} + +/* +** This function is called to compare two iterator keys when merging +** multiple b-tree segments. Parameter iOut is the index of the aTree[] +** value to recalculate. +*/ +static int vdbeSorterDoCompare(VdbeCursor *pCsr, int iOut){ + VdbeSorter *pSorter = pCsr->pSorter; + int i1; + int i2; + int iRes; + VdbeSorterIter *p1; + VdbeSorterIter *p2; + + assert( iOutnTree && iOut>0 ); + + if( iOut>=(pSorter->nTree/2) ){ + i1 = (iOut - pSorter->nTree/2) * 2; + i2 = i1 + 1; }else{ - aNew = sqlite3DbRealloc(db, db->aDb, sizeof(db->aDb[0])*(db->nDb+1) ); - if( aNew==0 ) return; + i1 = pSorter->aTree[iOut*2]; + i2 = pSorter->aTree[iOut*2+1]; } - db->aDb = aNew; - aNew = &db->aDb[db->nDb]; - memset(aNew, 0, sizeof(*aNew)); - /* Open the database file. If the btree is successfully opened, use - ** it to obtain the database schema. At this point the schema may - ** or may not be initialised. - */ - rc = sqlite3BtreeFactory(db, zFile, 0, SQLITE_DEFAULT_CACHE_SIZE, - db->openFlags | SQLITE_OPEN_MAIN_DB, - &aNew->pBt); - db->nDb++; - if( rc==SQLITE_CONSTRAINT ){ - rc = SQLITE_ERROR; - zErrDyn = sqlite3MPrintf(db, "database is already attached"); - }else if( rc==SQLITE_OK ){ - Pager *pPager; - aNew->pSchema = sqlite3SchemaGet(db, aNew->pBt); - if( !aNew->pSchema ){ - rc = SQLITE_NOMEM; - }else if( aNew->pSchema->file_format && aNew->pSchema->enc!=ENC(db) ){ - zErrDyn = sqlite3MPrintf(db, - "attached databases must use the same text encoding as main database"); - rc = SQLITE_ERROR; + p1 = &pSorter->aIter[i1]; + p2 = &pSorter->aIter[i2]; + + if( p1->pFile==0 ){ + iRes = i2; + }else if( p2->pFile==0 ){ + iRes = i1; + }else{ + int res; + assert( pCsr->pSorter->pUnpacked!=0 ); /* allocated in vdbeSorterMerge() */ + vdbeSorterCompare( + pCsr, 0, p1->aKey, p1->nKey, p2->aKey, p2->nKey, &res + ); + if( res<=0 ){ + iRes = i1; + }else{ + iRes = i2; } - pPager = sqlite3BtreePager(aNew->pBt); - sqlite3PagerLockingMode(pPager, db->dfltLockMode); - sqlite3PagerJournalMode(pPager, db->dfltJournalMode); } - aNew->zName = sqlite3DbStrDup(db, zName); - aNew->safety_level = 3; -#if SQLITE_HAS_CODEC - { - extern int sqlite3CodecAttach(sqlite3*, int, const void*, int); - extern void sqlite3CodecGetKey(sqlite3*, int, void**, int*); - int nKey; - char *zKey; - int t = sqlite3_value_type(argv[2]); - switch( t ){ - case SQLITE_INTEGER: - case SQLITE_FLOAT: - zErrDyn = sqlite3DbStrDup(db, "Invalid key value"); - rc = SQLITE_ERROR; - break; - - case SQLITE_TEXT: - case SQLITE_BLOB: - nKey = sqlite3_value_bytes(argv[2]); - zKey = (char *)sqlite3_value_blob(argv[2]); - sqlite3CodecAttach(db, db->nDb-1, zKey, nKey); - break; + pSorter->aTree[iOut] = iRes; + return SQLITE_OK; +} - case SQLITE_NULL: - /* No key specified. Use the key from the main database */ - sqlite3CodecGetKey(db, 0, (void**)&zKey, &nKey); - sqlite3CodecAttach(db, db->nDb-1, zKey, nKey); - break; - } - } -#endif +/* +** Initialize the temporary index cursor just opened as a sorter cursor. +*/ +SQLITE_PRIVATE int sqlite3VdbeSorterInit(sqlite3 *db, VdbeCursor *pCsr){ + int pgsz; /* Page size of main database */ + int mxCache; /* Cache size */ + VdbeSorter *pSorter; /* The new sorter */ + char *d; /* Dummy */ - /* If the file was opened successfully, read the schema for the new database. - ** If this fails, or if opening the file failed, then close the file and - ** remove the entry from the db->aDb[] array. i.e. put everything back the way - ** we found it. - */ - if( rc==SQLITE_OK ){ - (void)sqlite3SafetyOn(db); - sqlite3BtreeEnterAll(db); - rc = sqlite3Init(db, &zErrDyn); - sqlite3BtreeLeaveAll(db); - (void)sqlite3SafetyOff(db); + assert( pCsr->pKeyInfo && pCsr->pBt==0 ); + pCsr->pSorter = pSorter = sqlite3DbMallocZero(db, sizeof(VdbeSorter)); + if( pSorter==0 ){ + return SQLITE_NOMEM; } - if( rc ){ - int iDb = db->nDb - 1; - assert( iDb>=2 ); - if( db->aDb[iDb].pBt ){ - sqlite3BtreeClose(db->aDb[iDb].pBt); - db->aDb[iDb].pBt = 0; - db->aDb[iDb].pSchema = 0; + + pSorter->pUnpacked = sqlite3VdbeAllocUnpackedRecord(pCsr->pKeyInfo, 0, 0, &d); + if( pSorter->pUnpacked==0 ) return SQLITE_NOMEM; + assert( pSorter->pUnpacked==(UnpackedRecord *)d ); + + if( !sqlite3TempInMemory(db) ){ + pgsz = sqlite3BtreeGetPageSize(db->aDb[0].pBt); + pSorter->mnPmaSize = SORTER_MIN_WORKING * pgsz; + mxCache = db->aDb[0].pSchema->cache_size; + if( mxCachemxPmaSize = mxCache * pgsz; + } + + return SQLITE_OK; +} + +/* +** Free the list of sorted records starting at pRecord. +*/ +static void vdbeSorterRecordFree(sqlite3 *db, SorterRecord *pRecord){ + SorterRecord *p; + SorterRecord *pNext; + for(p=pRecord; p; p=pNext){ + pNext = p->pNext; + sqlite3DbFree(db, p); + } +} + +/* +** Free any cursor components allocated by sqlite3VdbeSorterXXX routines. +*/ +SQLITE_PRIVATE void sqlite3VdbeSorterClose(sqlite3 *db, VdbeCursor *pCsr){ + VdbeSorter *pSorter = pCsr->pSorter; + if( pSorter ){ + if( pSorter->aIter ){ + int i; + for(i=0; inTree; i++){ + vdbeSorterIterZero(db, &pSorter->aIter[i]); + } + sqlite3DbFree(db, pSorter->aIter); } - sqlite3ResetInternalSchema(db, 0); - db->nDb = iDb; - if( rc==SQLITE_NOMEM || rc==SQLITE_IOERR_NOMEM ){ - db->mallocFailed = 1; - sqlite3DbFree(db, zErrDyn); - zErrDyn = sqlite3MPrintf(db, "out of memory"); - }else if( zErrDyn==0 ){ - zErrDyn = sqlite3MPrintf(db, "unable to open database: %s", zFile); + if( pSorter->pTemp1 ){ + sqlite3OsCloseFree(pSorter->pTemp1); } - goto attach_error; + vdbeSorterRecordFree(db, pSorter->pRecord); + sqlite3DbFree(db, pSorter->pUnpacked); + sqlite3DbFree(db, pSorter); + pCsr->pSorter = 0; } - - return; +} -attach_error: - /* Return an error if we get here */ - if( zErrDyn ){ - sqlite3_result_error(context, zErrDyn, -1); - sqlite3DbFree(db, zErrDyn); - } - if( rc ) sqlite3_result_error_code(context, rc); +/* +** Allocate space for a file-handle and open a temporary file. If successful, +** set *ppFile to point to the malloc'd file-handle and return SQLITE_OK. +** Otherwise, set *ppFile to 0 and return an SQLite error code. +*/ +static int vdbeSorterOpenTempFile(sqlite3 *db, sqlite3_file **ppFile){ + int dummy; + return sqlite3OsOpenMalloc(db->pVfs, 0, ppFile, + SQLITE_OPEN_TEMP_JOURNAL | + SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE | + SQLITE_OPEN_EXCLUSIVE | SQLITE_OPEN_DELETEONCLOSE, &dummy + ); } /* -** An SQL user-function registered to do the work of an DETACH statement. The -** three arguments to the function come directly from a detach statement: -** -** DETACH DATABASE x -** -** SELECT sqlite_detach(x) +** Merge the two sorted lists p1 and p2 into a single list. +** Set *ppOut to the head of the new list. */ -static void detachFunc( - sqlite3_context *context, - int NotUsed, - sqlite3_value **argv +static void vdbeSorterMerge( + VdbeCursor *pCsr, /* For pKeyInfo */ + SorterRecord *p1, /* First list to merge */ + SorterRecord *p2, /* Second list to merge */ + SorterRecord **ppOut /* OUT: Head of merged list */ ){ - const char *zName = (const char *)sqlite3_value_text(argv[0]); - sqlite3 *db = sqlite3_context_db_handle(context); - int i; - Db *pDb = 0; - char zErr[128]; - - UNUSED_PARAMETER(NotUsed); + SorterRecord *pFinal = 0; + SorterRecord **pp = &pFinal; + void *pVal2 = p2 ? p2->pVal : 0; - if( zName==0 ) zName = ""; - for(i=0; inDb; i++){ - pDb = &db->aDb[i]; - if( pDb->pBt==0 ) continue; - if( sqlite3StrICmp(pDb->zName, zName)==0 ) break; + while( p1 && p2 ){ + int res; + vdbeSorterCompare(pCsr, 0, p1->pVal, p1->nVal, pVal2, p2->nVal, &res); + if( res<=0 ){ + *pp = p1; + pp = &p1->pNext; + p1 = p1->pNext; + pVal2 = 0; + }else{ + *pp = p2; + pp = &p2->pNext; + p2 = p2->pNext; + if( p2==0 ) break; + pVal2 = p2->pVal; + } } + *pp = p1 ? p1 : p2; + *ppOut = pFinal; +} - if( i>=db->nDb ){ - sqlite3_snprintf(sizeof(zErr),zErr, "no such database: %s", zName); - goto detach_error; - } - if( i<2 ){ - sqlite3_snprintf(sizeof(zErr),zErr, "cannot detach database %s", zName); - goto detach_error; - } - if( !db->autoCommit ){ - sqlite3_snprintf(sizeof(zErr), zErr, - "cannot DETACH database within transaction"); - goto detach_error; +/* +** Sort the linked list of records headed at pCsr->pRecord. Return SQLITE_OK +** if successful, or an SQLite error code (i.e. SQLITE_NOMEM) if an error +** occurs. +*/ +static int vdbeSorterSort(VdbeCursor *pCsr){ + int i; + SorterRecord **aSlot; + SorterRecord *p; + VdbeSorter *pSorter = pCsr->pSorter; + + aSlot = (SorterRecord **)sqlite3MallocZero(64 * sizeof(SorterRecord *)); + if( !aSlot ){ + return SQLITE_NOMEM; } - if( sqlite3BtreeIsInReadTrans(pDb->pBt) || sqlite3BtreeIsInBackup(pDb->pBt) ){ - sqlite3_snprintf(sizeof(zErr),zErr, "database %s is locked", zName); - goto detach_error; + + p = pSorter->pRecord; + while( p ){ + SorterRecord *pNext = p->pNext; + p->pNext = 0; + for(i=0; aSlot[i]; i++){ + vdbeSorterMerge(pCsr, p, aSlot[i], &p); + aSlot[i] = 0; + } + aSlot[i] = p; + p = pNext; } - sqlite3BtreeClose(pDb->pBt); - pDb->pBt = 0; - pDb->pSchema = 0; - sqlite3ResetInternalSchema(db, 0); - return; + p = 0; + for(i=0; i<64; i++){ + vdbeSorterMerge(pCsr, p, aSlot[i], &p); + } + pSorter->pRecord = p; -detach_error: - sqlite3_result_error(context, zErr, -1); + sqlite3_free(aSlot); + return SQLITE_OK; } + /* -** This procedure generates VDBE code for a single invocation of either the -** sqlite_detach() or sqlite_attach() SQL user functions. +** Write the current contents of the in-memory linked-list to a PMA. Return +** SQLITE_OK if successful, or an SQLite error code otherwise. +** +** The format of a PMA is: +** +** * A varint. This varint contains the total number of bytes of content +** in the PMA (not including the varint itself). +** +** * One or more records packed end-to-end in order of ascending keys. +** Each record consists of a varint followed by a blob of data (the +** key). The varint is the number of bytes in the blob of data. */ -static void codeAttach( - Parse *pParse, /* The parser context */ - int type, /* Either SQLITE_ATTACH or SQLITE_DETACH */ - FuncDef *pFunc, /* FuncDef wrapper for detachFunc() or attachFunc() */ - Expr *pAuthArg, /* Expression to pass to authorization callback */ - Expr *pFilename, /* Name of database file */ - Expr *pDbname, /* Name of the database to use internally */ - Expr *pKey /* Database key for encryption extension */ -){ - int rc; - NameContext sName; - Vdbe *v; - sqlite3* db = pParse->db; - int regArgs; - - memset(&sName, 0, sizeof(NameContext)); - sName.pParse = pParse; +static int vdbeSorterListToPMA(sqlite3 *db, VdbeCursor *pCsr){ + int rc = SQLITE_OK; /* Return code */ + VdbeSorter *pSorter = pCsr->pSorter; - if( - SQLITE_OK!=(rc = resolveAttachExpr(&sName, pFilename)) || - SQLITE_OK!=(rc = resolveAttachExpr(&sName, pDbname)) || - SQLITE_OK!=(rc = resolveAttachExpr(&sName, pKey)) - ){ - pParse->nErr++; - goto attach_end; + if( pSorter->nInMemory==0 ){ + assert( pSorter->pRecord==0 ); + return rc; } -#ifndef SQLITE_OMIT_AUTHORIZATION - if( pAuthArg ){ - char *zAuthArg = pAuthArg->u.zToken; - if( NEVER(zAuthArg==0) ){ - goto attach_end; - } - rc = sqlite3AuthCheck(pParse, type, zAuthArg, 0, 0); - if(rc!=SQLITE_OK ){ - goto attach_end; - } + rc = vdbeSorterSort(pCsr); + + /* If the first temporary PMA file has not been opened, open it now. */ + if( rc==SQLITE_OK && pSorter->pTemp1==0 ){ + rc = vdbeSorterOpenTempFile(db, &pSorter->pTemp1); + assert( rc!=SQLITE_OK || pSorter->pTemp1 ); + assert( pSorter->iWriteOff==0 ); + assert( pSorter->nPMA==0 ); } -#endif /* SQLITE_OMIT_AUTHORIZATION */ + if( rc==SQLITE_OK ){ + i64 iOff = pSorter->iWriteOff; + SorterRecord *p; + SorterRecord *pNext = 0; + static const char eightZeros[8] = { 0, 0, 0, 0, 0, 0, 0, 0 }; - v = sqlite3GetVdbe(pParse); - regArgs = sqlite3GetTempRange(pParse, 4); - sqlite3ExprCode(pParse, pFilename, regArgs); - sqlite3ExprCode(pParse, pDbname, regArgs+1); - sqlite3ExprCode(pParse, pKey, regArgs+2); + pSorter->nPMA++; + rc = vdbeSorterWriteVarint(pSorter->pTemp1, pSorter->nInMemory, &iOff); + for(p=pSorter->pRecord; rc==SQLITE_OK && p; p=pNext){ + pNext = p->pNext; + rc = vdbeSorterWriteVarint(pSorter->pTemp1, p->nVal, &iOff); - assert( v || db->mallocFailed ); - if( v ){ - sqlite3VdbeAddOp3(v, OP_Function, 0, regArgs+3-pFunc->nArg, regArgs+3); - assert( pFunc->nArg==-1 || (pFunc->nArg&0xff)==pFunc->nArg ); - sqlite3VdbeChangeP5(v, (u8)(pFunc->nArg)); - sqlite3VdbeChangeP4(v, -1, (char *)pFunc, P4_FUNCDEF); + if( rc==SQLITE_OK ){ + rc = sqlite3OsWrite(pSorter->pTemp1, p->pVal, p->nVal, iOff); + iOff += p->nVal; + } - /* Code an OP_Expire. For an ATTACH statement, set P1 to true (expire this - ** statement only). For DETACH, set it to false (expire all existing - ** statements). - */ - sqlite3VdbeAddOp1(v, OP_Expire, (type==SQLITE_ATTACH)); + sqlite3DbFree(db, p); + } + + /* This assert verifies that unless an error has occurred, the size of + ** the PMA on disk is the same as the expected size stored in + ** pSorter->nInMemory. */ + assert( rc!=SQLITE_OK || pSorter->nInMemory==( + iOff-pSorter->iWriteOff-sqlite3VarintLen(pSorter->nInMemory) + )); + + pSorter->iWriteOff = iOff; + if( rc==SQLITE_OK ){ + /* Terminate each file with 8 extra bytes so that from any offset + ** in the file we can always read 9 bytes without a SHORT_READ error */ + rc = sqlite3OsWrite(pSorter->pTemp1, eightZeros, 8, iOff); + } + pSorter->pRecord = p; } - -attach_end: - sqlite3ExprDelete(db, pFilename); - sqlite3ExprDelete(db, pDbname); - sqlite3ExprDelete(db, pKey); -} -/* -** Called by the parser to compile a DETACH statement. -** -** DETACH pDbname -*/ -SQLITE_PRIVATE void sqlite3Detach(Parse *pParse, Expr *pDbname){ - static FuncDef detach_func = { - 1, /* nArg */ - SQLITE_UTF8, /* iPrefEnc */ - 0, /* flags */ - 0, /* pUserData */ - 0, /* pNext */ - detachFunc, /* xFunc */ - 0, /* xStep */ - 0, /* xFinalize */ - "sqlite_detach", /* zName */ - 0 /* pHash */ - }; - codeAttach(pParse, SQLITE_DETACH, &detach_func, pDbname, 0, 0, pDbname); + return rc; } /* -** Called by the parser to compile an ATTACH statement. -** -** ATTACH p AS pDbname KEY pKey +** Add a record to the sorter. */ -SQLITE_PRIVATE void sqlite3Attach(Parse *pParse, Expr *p, Expr *pDbname, Expr *pKey){ - static FuncDef attach_func = { - 3, /* nArg */ - SQLITE_UTF8, /* iPrefEnc */ - 0, /* flags */ - 0, /* pUserData */ - 0, /* pNext */ - attachFunc, /* xFunc */ - 0, /* xStep */ - 0, /* xFinalize */ - "sqlite_attach", /* zName */ - 0 /* pHash */ - }; - codeAttach(pParse, SQLITE_ATTACH, &attach_func, p, p, pDbname, pKey); +SQLITE_PRIVATE int sqlite3VdbeSorterWrite( + sqlite3 *db, /* Database handle */ + VdbeCursor *pCsr, /* Sorter cursor */ + Mem *pVal /* Memory cell containing record */ +){ + VdbeSorter *pSorter = pCsr->pSorter; + int rc = SQLITE_OK; /* Return Code */ + SorterRecord *pNew; /* New list element */ + + assert( pSorter ); + pSorter->nInMemory += sqlite3VarintLen(pVal->n) + pVal->n; + + pNew = (SorterRecord *)sqlite3DbMallocRaw(db, pVal->n + sizeof(SorterRecord)); + if( pNew==0 ){ + rc = SQLITE_NOMEM; + }else{ + pNew->pVal = (void *)&pNew[1]; + memcpy(pNew->pVal, pVal->z, pVal->n); + pNew->nVal = pVal->n; + pNew->pNext = pSorter->pRecord; + pSorter->pRecord = pNew; + } + + /* See if the contents of the sorter should now be written out. They + ** are written out when either of the following are true: + ** + ** * The total memory allocated for the in-memory list is greater + ** than (page-size * cache-size), or + ** + ** * The total memory allocated for the in-memory list is greater + ** than (page-size * 10) and sqlite3HeapNearlyFull() returns true. + */ + if( rc==SQLITE_OK && pSorter->mxPmaSize>0 && ( + (pSorter->nInMemory>pSorter->mxPmaSize) + || (pSorter->nInMemory>pSorter->mnPmaSize && sqlite3HeapNearlyFull()) + )){ + rc = vdbeSorterListToPMA(db, pCsr); + pSorter->nInMemory = 0; + } + + return rc; } -#endif /* SQLITE_OMIT_ATTACH */ /* -** Initialize a DbFixer structure. This routine must be called prior -** to passing the structure to one of the sqliteFixAAAA() routines below. -** -** The return value indicates whether or not fixation is required. TRUE -** means we do need to fix the database references, FALSE means we do not. +** Helper function for sqlite3VdbeSorterRewind(). */ -SQLITE_PRIVATE int sqlite3FixInit( - DbFixer *pFix, /* The fixer to be initialized */ - Parse *pParse, /* Error messages will be written here */ - int iDb, /* This is the database that must be used */ - const char *zType, /* "view", "trigger", or "index" */ - const Token *pName /* Name of the view, trigger, or index */ +static int vdbeSorterInitMerge( + sqlite3 *db, /* Database handle */ + VdbeCursor *pCsr, /* Cursor handle for this sorter */ + i64 *pnByte /* Sum of bytes in all opened PMAs */ ){ - sqlite3 *db; + VdbeSorter *pSorter = pCsr->pSorter; + int rc = SQLITE_OK; /* Return code */ + int i; /* Used to iterator through aIter[] */ + i64 nByte = 0; /* Total bytes in all opened PMAs */ - if( NEVER(iDb<0) || iDb==1 ) return 0; - db = pParse->db; - assert( db->nDb>iDb ); - pFix->pParse = pParse; - pFix->zDb = db->aDb[iDb].zName; - pFix->zType = zType; - pFix->pName = pName; - return 1; + /* Initialize the iterators. */ + for(i=0; iaIter[i]; + rc = vdbeSorterIterInit(db, pSorter, pSorter->iReadOff, pIter, &nByte); + pSorter->iReadOff = pIter->iEof; + assert( rc!=SQLITE_OK || pSorter->iReadOff<=pSorter->iWriteOff ); + if( rc!=SQLITE_OK || pSorter->iReadOff>=pSorter->iWriteOff ) break; + } + + /* Initialize the aTree[] array. */ + for(i=pSorter->nTree-1; rc==SQLITE_OK && i>0; i--){ + rc = vdbeSorterDoCompare(pCsr, i); + } + + *pnByte = nByte; + return rc; } /* -** The following set of routines walk through the parse tree and assign -** a specific database to all table references where the database name -** was left unspecified in the original SQL statement. The pFix structure -** must have been initialized by a prior call to sqlite3FixInit(). -** -** These routines are used to make sure that an index, trigger, or -** view in one database does not refer to objects in a different database. -** (Exception: indices, triggers, and views in the TEMP database are -** allowed to refer to anything.) If a reference is explicitly made -** to an object in a different database, an error message is added to -** pParse->zErrMsg and these routines return non-zero. If everything -** checks out, these routines return 0. +** Once the sorter has been populated, this function is called to prepare +** for iterating through its contents in sorted order. */ -SQLITE_PRIVATE int sqlite3FixSrcList( - DbFixer *pFix, /* Context of the fixation */ - SrcList *pList /* The Source list to check and modify */ -){ - int i; - const char *zDb; - struct SrcList_item *pItem; +SQLITE_PRIVATE int sqlite3VdbeSorterRewind(sqlite3 *db, VdbeCursor *pCsr, int *pbEof){ + VdbeSorter *pSorter = pCsr->pSorter; + int rc; /* Return code */ + sqlite3_file *pTemp2 = 0; /* Second temp file to use */ + i64 iWrite2 = 0; /* Write offset for pTemp2 */ + int nIter; /* Number of iterators used */ + int nByte; /* Bytes of space required for aIter/aTree */ + int N = 2; /* Power of 2 >= nIter */ - if( NEVER(pList==0) ) return 0; - zDb = pFix->zDb; - for(i=0, pItem=pList->a; inSrc; i++, pItem++){ - if( pItem->zDatabase==0 ){ - pItem->zDatabase = sqlite3DbStrDup(pFix->pParse->db, zDb); - }else if( sqlite3StrICmp(pItem->zDatabase,zDb)!=0 ){ - sqlite3ErrorMsg(pFix->pParse, - "%s %T cannot reference objects in database %s", - pFix->zType, pFix->pName, pItem->zDatabase); - return 1; - } -#if !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_TRIGGER) - if( sqlite3FixSelect(pFix, pItem->pSelect) ) return 1; - if( sqlite3FixExpr(pFix, pItem->pOn) ) return 1; -#endif + assert( pSorter ); + + /* If no data has been written to disk, then do not do so now. Instead, + ** sort the VdbeSorter.pRecord list. The vdbe layer will read data directly + ** from the in-memory list. */ + if( pSorter->nPMA==0 ){ + *pbEof = !pSorter->pRecord; + assert( pSorter->aTree==0 ); + return vdbeSorterSort(pCsr); } - return 0; -} -#if !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_TRIGGER) -SQLITE_PRIVATE int sqlite3FixSelect( - DbFixer *pFix, /* Context of the fixation */ - Select *pSelect /* The SELECT statement to be fixed to one database */ -){ - while( pSelect ){ - if( sqlite3FixExprList(pFix, pSelect->pEList) ){ - return 1; - } - if( sqlite3FixSrcList(pFix, pSelect->pSrc) ){ - return 1; - } - if( sqlite3FixExpr(pFix, pSelect->pWhere) ){ - return 1; + + /* Write the current b-tree to a PMA. Close the b-tree cursor. */ + rc = vdbeSorterListToPMA(db, pCsr); + if( rc!=SQLITE_OK ) return rc; + + /* Allocate space for aIter[] and aTree[]. */ + nIter = pSorter->nPMA; + if( nIter>SORTER_MAX_MERGE_COUNT ) nIter = SORTER_MAX_MERGE_COUNT; + assert( nIter>0 ); + while( NaIter = (VdbeSorterIter *)sqlite3DbMallocZero(db, nByte); + if( !pSorter->aIter ) return SQLITE_NOMEM; + pSorter->aTree = (int *)&pSorter->aIter[N]; + pSorter->nTree = N; + + do { + int iNew; /* Index of new, merged, PMA */ + + for(iNew=0; + rc==SQLITE_OK && iNew*SORTER_MAX_MERGE_COUNTnPMA; + iNew++ + ){ + i64 nWrite; /* Number of bytes in new PMA */ + + /* If there are SORTER_MAX_MERGE_COUNT or less PMAs in file pTemp1, + ** initialize an iterator for each of them and break out of the loop. + ** These iterators will be incrementally merged as the VDBE layer calls + ** sqlite3VdbeSorterNext(). + ** + ** Otherwise, if pTemp1 contains more than SORTER_MAX_MERGE_COUNT PMAs, + ** initialize interators for SORTER_MAX_MERGE_COUNT of them. These PMAs + ** are merged into a single PMA that is written to file pTemp2. + */ + rc = vdbeSorterInitMerge(db, pCsr, &nWrite); + assert( rc!=SQLITE_OK || pSorter->aIter[ pSorter->aTree[1] ].pFile ); + if( rc!=SQLITE_OK || pSorter->nPMA<=SORTER_MAX_MERGE_COUNT ){ + break; + } + + /* Open the second temp file, if it is not already open. */ + if( pTemp2==0 ){ + assert( iWrite2==0 ); + rc = vdbeSorterOpenTempFile(db, &pTemp2); + } + + if( rc==SQLITE_OK ){ + rc = vdbeSorterWriteVarint(pTemp2, nWrite, &iWrite2); + } + + if( rc==SQLITE_OK ){ + int bEof = 0; + while( rc==SQLITE_OK && bEof==0 ){ + int nToWrite; + VdbeSorterIter *pIter = &pSorter->aIter[ pSorter->aTree[1] ]; + assert( pIter->pFile ); + nToWrite = pIter->nKey + sqlite3VarintLen(pIter->nKey); + rc = sqlite3OsWrite(pTemp2, pIter->aAlloc, nToWrite, iWrite2); + iWrite2 += nToWrite; + if( rc==SQLITE_OK ){ + rc = sqlite3VdbeSorterNext(db, pCsr, &bEof); + } + } + } } - if( sqlite3FixExpr(pFix, pSelect->pHaving) ){ - return 1; + + if( pSorter->nPMA<=SORTER_MAX_MERGE_COUNT ){ + break; + }else{ + sqlite3_file *pTmp = pSorter->pTemp1; + pSorter->nPMA = iNew; + pSorter->pTemp1 = pTemp2; + pTemp2 = pTmp; + pSorter->iWriteOff = iWrite2; + pSorter->iReadOff = 0; + iWrite2 = 0; } - pSelect = pSelect->pPrior; + }while( rc==SQLITE_OK ); + + if( pTemp2 ){ + sqlite3OsCloseFree(pTemp2); } - return 0; + *pbEof = (pSorter->aIter[pSorter->aTree[1]].pFile==0); + return rc; } -SQLITE_PRIVATE int sqlite3FixExpr( - DbFixer *pFix, /* Context of the fixation */ - Expr *pExpr /* The expression to be fixed to one database */ -){ - while( pExpr ){ - if( ExprHasAnyProperty(pExpr, EP_TokenOnly) ) break; - if( ExprHasProperty(pExpr, EP_xIsSelect) ){ - if( sqlite3FixSelect(pFix, pExpr->x.pSelect) ) return 1; - }else{ - if( sqlite3FixExprList(pFix, pExpr->x.pList) ) return 1; - } - if( sqlite3FixExpr(pFix, pExpr->pRight) ){ - return 1; + +/* +** Advance to the next element in the sorter. +*/ +SQLITE_PRIVATE int sqlite3VdbeSorterNext(sqlite3 *db, VdbeCursor *pCsr, int *pbEof){ + VdbeSorter *pSorter = pCsr->pSorter; + int rc; /* Return code */ + + if( pSorter->aTree ){ + int iPrev = pSorter->aTree[1];/* Index of iterator to advance */ + int i; /* Index of aTree[] to recalculate */ + + rc = vdbeSorterIterNext(db, &pSorter->aIter[iPrev]); + for(i=(pSorter->nTree+iPrev)/2; rc==SQLITE_OK && i>0; i=i/2){ + rc = vdbeSorterDoCompare(pCsr, i); } - pExpr = pExpr->pLeft; + + *pbEof = (pSorter->aIter[pSorter->aTree[1]].pFile==0); + }else{ + SorterRecord *pFree = pSorter->pRecord; + pSorter->pRecord = pFree->pNext; + pFree->pNext = 0; + vdbeSorterRecordFree(db, pFree); + *pbEof = !pSorter->pRecord; + rc = SQLITE_OK; } - return 0; + return rc; } -SQLITE_PRIVATE int sqlite3FixExprList( - DbFixer *pFix, /* Context of the fixation */ - ExprList *pList /* The expression to be fixed to one database */ + +/* +** Return a pointer to a buffer owned by the sorter that contains the +** current key. +*/ +static void *vdbeSorterRowkey( + VdbeSorter *pSorter, /* Sorter object */ + int *pnKey /* OUT: Size of current key in bytes */ ){ - int i; - struct ExprList_item *pItem; - if( pList==0 ) return 0; - for(i=0, pItem=pList->a; inExpr; i++, pItem++){ - if( sqlite3FixExpr(pFix, pItem->pExpr) ){ - return 1; - } + void *pKey; + if( pSorter->aTree ){ + VdbeSorterIter *pIter; + pIter = &pSorter->aIter[ pSorter->aTree[1] ]; + *pnKey = pIter->nKey; + pKey = pIter->aKey; + }else{ + *pnKey = pSorter->pRecord->nVal; + pKey = pSorter->pRecord->pVal; } - return 0; + return pKey; } -#endif -#ifndef SQLITE_OMIT_TRIGGER -SQLITE_PRIVATE int sqlite3FixTriggerStep( - DbFixer *pFix, /* Context of the fixation */ - TriggerStep *pStep /* The trigger step be fixed to one database */ -){ - while( pStep ){ - if( sqlite3FixSelect(pFix, pStep->pSelect) ){ - return 1; - } - if( sqlite3FixExpr(pFix, pStep->pWhere) ){ - return 1; - } - if( sqlite3FixExprList(pFix, pStep->pExprList) ){ - return 1; - } - pStep = pStep->pNext; +/* +** Copy the current sorter key into the memory cell pOut. +*/ +SQLITE_PRIVATE int sqlite3VdbeSorterRowkey(VdbeCursor *pCsr, Mem *pOut){ + VdbeSorter *pSorter = pCsr->pSorter; + void *pKey; int nKey; /* Sorter key to copy into pOut */ + + pKey = vdbeSorterRowkey(pSorter, &nKey); + if( sqlite3VdbeMemGrow(pOut, nKey, 0) ){ + return SQLITE_NOMEM; } - return 0; + pOut->n = nKey; + MemSetTypeFlag(pOut, MEM_Blob); + memcpy(pOut->z, pKey, nKey); + + return SQLITE_OK; } -#endif -/************** End of attach.c **********************************************/ -/************** Begin file auth.c ********************************************/ /* -** 2003 January 11 +** Compare the key in memory cell pVal with the key that the sorter cursor +** passed as the first argument currently points to. For the purposes of +** the comparison, ignore the rowid field at the end of each record. +** +** If an error occurs, return an SQLite error code (i.e. SQLITE_NOMEM). +** Otherwise, set *pRes to a negative, zero or positive value if the +** key in pVal is smaller than, equal to or larger than the current sorter +** key. +*/ +SQLITE_PRIVATE int sqlite3VdbeSorterCompare( + VdbeCursor *pCsr, /* Sorter cursor */ + Mem *pVal, /* Value to compare to current sorter key */ + int *pRes /* OUT: Result of comparison */ +){ + VdbeSorter *pSorter = pCsr->pSorter; + void *pKey; int nKey; /* Sorter key to compare pVal with */ + + pKey = vdbeSorterRowkey(pSorter, &nKey); + vdbeSorterCompare(pCsr, 1, pVal->z, pVal->n, pKey, nKey, pRes); + return SQLITE_OK; +} + +#endif /* #ifndef SQLITE_OMIT_MERGE_SORT */ + +/************** End of vdbesort.c ********************************************/ +/************** Begin file journal.c *****************************************/ +/* +** 2007 August 22 ** ** The author disclaims copyright to this source code. In place of ** a legal notice, here is a blessing: @@ -63750,234 +73443,237 @@ SQLITE_PRIVATE int sqlite3FixTriggerStep( ** May you share freely, never taking more than you give. ** ************************************************************************* -** This file contains code used to implement the sqlite3_set_authorizer() -** API. This facility is an optional feature of the library. Embedded -** systems that do not need this facility may omit it by recompiling -** the library with -DSQLITE_OMIT_AUTHORIZATION=1 ** -** $Id: auth.c,v 1.31 2009/05/04 18:01:40 drh Exp $ +** This file implements a special kind of sqlite3_file object used +** by SQLite to create journal files if the atomic-write optimization +** is enabled. +** +** The distinctive characteristic of this sqlite3_file is that the +** actual on disk file is created lazily. When the file is created, +** the caller specifies a buffer size for an in-memory buffer to +** be used to service read() and write() requests. The actual file +** on disk is not created or populated until either: +** +** 1) The in-memory representation grows too large for the allocated +** buffer, or +** 2) The sqlite3JournalCreate() function is called. */ +#ifdef SQLITE_ENABLE_ATOMIC_WRITE + /* -** All of the code in this file may be omitted by defining a single -** macro. +** A JournalFile object is a subclass of sqlite3_file used by +** as an open file handle for journal files. */ -#ifndef SQLITE_OMIT_AUTHORIZATION +struct JournalFile { + sqlite3_io_methods *pMethod; /* I/O methods on journal files */ + int nBuf; /* Size of zBuf[] in bytes */ + char *zBuf; /* Space to buffer journal writes */ + int iSize; /* Amount of zBuf[] currently used */ + int flags; /* xOpen flags */ + sqlite3_vfs *pVfs; /* The "real" underlying VFS */ + sqlite3_file *pReal; /* The "real" underlying file descriptor */ + const char *zJournal; /* Name of the journal file */ +}; +typedef struct JournalFile JournalFile; /* -** Set or clear the access authorization function. -** -** The access authorization function is be called during the compilation -** phase to verify that the user has read and/or write access permission on -** various fields of the database. The first argument to the auth function -** is a copy of the 3rd argument to this routine. The second argument -** to the auth function is one of these constants: -** -** SQLITE_CREATE_INDEX -** SQLITE_CREATE_TABLE -** SQLITE_CREATE_TEMP_INDEX -** SQLITE_CREATE_TEMP_TABLE -** SQLITE_CREATE_TEMP_TRIGGER -** SQLITE_CREATE_TEMP_VIEW -** SQLITE_CREATE_TRIGGER -** SQLITE_CREATE_VIEW -** SQLITE_DELETE -** SQLITE_DROP_INDEX -** SQLITE_DROP_TABLE -** SQLITE_DROP_TEMP_INDEX -** SQLITE_DROP_TEMP_TABLE -** SQLITE_DROP_TEMP_TRIGGER -** SQLITE_DROP_TEMP_VIEW -** SQLITE_DROP_TRIGGER -** SQLITE_DROP_VIEW -** SQLITE_INSERT -** SQLITE_PRAGMA -** SQLITE_READ -** SQLITE_SELECT -** SQLITE_TRANSACTION -** SQLITE_UPDATE -** -** The third and fourth arguments to the auth function are the name of -** the table and the column that are being accessed. The auth function -** should return either SQLITE_OK, SQLITE_DENY, or SQLITE_IGNORE. If -** SQLITE_OK is returned, it means that access is allowed. SQLITE_DENY -** means that the SQL statement will never-run - the sqlite3_exec() call -** will return with an error. SQLITE_IGNORE means that the SQL statement -** should run but attempts to read the specified column will return NULL -** and attempts to write the column will be ignored. -** -** Setting the auth function to NULL disables this hook. The default -** setting of the auth function is NULL. +** If it does not already exists, create and populate the on-disk file +** for JournalFile p. */ -SQLITE_API int sqlite3_set_authorizer( - sqlite3 *db, - int (*xAuth)(void*,int,const char*,const char*,const char*,const char*), - void *pArg -){ - sqlite3_mutex_enter(db->mutex); - db->xAuth = xAuth; - db->pAuthArg = pArg; - sqlite3ExpirePreparedStatements(db); - sqlite3_mutex_leave(db->mutex); - return SQLITE_OK; +static int createFile(JournalFile *p){ + int rc = SQLITE_OK; + if( !p->pReal ){ + sqlite3_file *pReal = (sqlite3_file *)&p[1]; + rc = sqlite3OsOpen(p->pVfs, p->zJournal, pReal, p->flags, 0); + if( rc==SQLITE_OK ){ + p->pReal = pReal; + if( p->iSize>0 ){ + assert(p->iSize<=p->nBuf); + rc = sqlite3OsWrite(p->pReal, p->zBuf, p->iSize, 0); + } + } + } + return rc; } /* -** Write an error message into pParse->zErrMsg that explains that the -** user-supplied authorization function returned an illegal value. +** Close the file. */ -static void sqliteAuthBadReturnCode(Parse *pParse){ - sqlite3ErrorMsg(pParse, "authorizer malfunction"); - pParse->rc = SQLITE_ERROR; +static int jrnlClose(sqlite3_file *pJfd){ + JournalFile *p = (JournalFile *)pJfd; + if( p->pReal ){ + sqlite3OsClose(p->pReal); + } + sqlite3_free(p->zBuf); + return SQLITE_OK; } /* -** The pExpr should be a TK_COLUMN expression. The table referred to -** is in pTabList or else it is the NEW or OLD table of a trigger. -** Check to see if it is OK to read this particular column. -** -** If the auth function returns SQLITE_IGNORE, change the TK_COLUMN -** instruction into a TK_NULL. If the auth function returns SQLITE_DENY, -** then generate an error. +** Read data from the file. */ -SQLITE_PRIVATE void sqlite3AuthRead( - Parse *pParse, /* The parser context */ - Expr *pExpr, /* The expression to check authorization on */ - Schema *pSchema, /* The schema of the expression */ - SrcList *pTabList /* All table that pExpr might refer to */ +static int jrnlRead( + sqlite3_file *pJfd, /* The journal file from which to read */ + void *zBuf, /* Put the results here */ + int iAmt, /* Number of bytes to read */ + sqlite_int64 iOfst /* Begin reading at this offset */ ){ - sqlite3 *db = pParse->db; - int rc; - Table *pTab = 0; /* The table being read */ - const char *zCol; /* Name of the column of the table */ - int iSrc; /* Index in pTabList->a[] of table being read */ - const char *zDBase; /* Name of database being accessed */ - TriggerStack *pStack; /* The stack of current triggers */ - int iDb; /* The index of the database the expression refers to */ - - if( db->xAuth==0 ) return; - assert( pExpr->op==TK_COLUMN ); - iDb = sqlite3SchemaToIndex(pParse->db, pSchema); - if( iDb<0 ){ - /* An attempt to read a column out of a subquery or other - ** temporary table. */ - return; - } - if( pTabList ){ - for(iSrc=0; ALWAYS(iSrcnSrc); iSrc++){ - if( pExpr->iTable==pTabList->a[iSrc].iCursor ) break; - } - assert( iSrcnSrc ); - pTab = pTabList->a[iSrc].pTab; + int rc = SQLITE_OK; + JournalFile *p = (JournalFile *)pJfd; + if( p->pReal ){ + rc = sqlite3OsRead(p->pReal, zBuf, iAmt, iOfst); + }else if( (iAmt+iOfst)>p->iSize ){ + rc = SQLITE_IOERR_SHORT_READ; }else{ - pStack = pParse->trigStack; - if( ALWAYS(pStack) ){ - /* This must be an attempt to read the NEW or OLD pseudo-tables - ** of a trigger. - */ - assert( pExpr->iTable==pStack->newIdx || pExpr->iTable==pStack->oldIdx ); - pTab = pStack->pTab; - } + memcpy(zBuf, &p->zBuf[iOfst], iAmt); } - if( NEVER(pTab==0) ) return; - if( pExpr->iColumn>=0 ){ - assert( pExpr->iColumnnCol ); - zCol = pTab->aCol[pExpr->iColumn].zName; - }else if( pTab->iPKey>=0 ){ - assert( pTab->iPKeynCol ); - zCol = pTab->aCol[pTab->iPKey].zName; - }else{ - zCol = "ROWID"; + return rc; +} + +/* +** Write data to the file. +*/ +static int jrnlWrite( + sqlite3_file *pJfd, /* The journal file into which to write */ + const void *zBuf, /* Take data to be written from here */ + int iAmt, /* Number of bytes to write */ + sqlite_int64 iOfst /* Begin writing at this offset into the file */ +){ + int rc = SQLITE_OK; + JournalFile *p = (JournalFile *)pJfd; + if( !p->pReal && (iOfst+iAmt)>p->nBuf ){ + rc = createFile(p); } - assert( iDb>=0 && iDbnDb ); - zDBase = db->aDb[iDb].zName; - rc = db->xAuth(db->pAuthArg, SQLITE_READ, pTab->zName, zCol, zDBase, - pParse->zAuthContext); - if( rc==SQLITE_IGNORE ){ - pExpr->op = TK_NULL; - }else if( rc==SQLITE_DENY ){ - if( db->nDb>2 || iDb!=0 ){ - sqlite3ErrorMsg(pParse, "access to %s.%s.%s is prohibited", - zDBase, pTab->zName, zCol); + if( rc==SQLITE_OK ){ + if( p->pReal ){ + rc = sqlite3OsWrite(p->pReal, zBuf, iAmt, iOfst); }else{ - sqlite3ErrorMsg(pParse, "access to %s.%s is prohibited",pTab->zName,zCol); + memcpy(&p->zBuf[iOfst], zBuf, iAmt); + if( p->iSize<(iOfst+iAmt) ){ + p->iSize = (iOfst+iAmt); + } } - pParse->rc = SQLITE_AUTH; - }else if( rc!=SQLITE_OK ){ - sqliteAuthBadReturnCode(pParse); } + return rc; } /* -** Do an authorization check using the code and arguments given. Return -** either SQLITE_OK (zero) or SQLITE_IGNORE or SQLITE_DENY. If SQLITE_DENY -** is returned, then the error count and error message in pParse are -** modified appropriately. +** Truncate the file. */ -SQLITE_PRIVATE int sqlite3AuthCheck( - Parse *pParse, - int code, - const char *zArg1, - const char *zArg2, - const char *zArg3 -){ - sqlite3 *db = pParse->db; - int rc; - - /* Don't do any authorization checks if the database is initialising - ** or if the parser is being invoked from within sqlite3_declare_vtab. - */ - if( db->init.busy || IN_DECLARE_VTAB ){ - return SQLITE_OK; +static int jrnlTruncate(sqlite3_file *pJfd, sqlite_int64 size){ + int rc = SQLITE_OK; + JournalFile *p = (JournalFile *)pJfd; + if( p->pReal ){ + rc = sqlite3OsTruncate(p->pReal, size); + }else if( sizeiSize ){ + p->iSize = size; } + return rc; +} - if( db->xAuth==0 ){ - return SQLITE_OK; +/* +** Sync the file. +*/ +static int jrnlSync(sqlite3_file *pJfd, int flags){ + int rc; + JournalFile *p = (JournalFile *)pJfd; + if( p->pReal ){ + rc = sqlite3OsSync(p->pReal, flags); + }else{ + rc = SQLITE_OK; } - rc = db->xAuth(db->pAuthArg, code, zArg1, zArg2, zArg3, pParse->zAuthContext); - if( rc==SQLITE_DENY ){ - sqlite3ErrorMsg(pParse, "not authorized"); - pParse->rc = SQLITE_AUTH; - }else if( rc!=SQLITE_OK && rc!=SQLITE_IGNORE ){ - rc = SQLITE_DENY; - sqliteAuthBadReturnCode(pParse); + return rc; +} + +/* +** Query the size of the file in bytes. +*/ +static int jrnlFileSize(sqlite3_file *pJfd, sqlite_int64 *pSize){ + int rc = SQLITE_OK; + JournalFile *p = (JournalFile *)pJfd; + if( p->pReal ){ + rc = sqlite3OsFileSize(p->pReal, pSize); + }else{ + *pSize = (sqlite_int64) p->iSize; } return rc; } /* -** Push an authorization context. After this routine is called, the -** zArg3 argument to authorization callbacks will be zContext until -** popped. Or if pParse==0, this routine is a no-op. +** Table of methods for JournalFile sqlite3_file object. */ -SQLITE_PRIVATE void sqlite3AuthContextPush( - Parse *pParse, - AuthContext *pContext, - const char *zContext +static struct sqlite3_io_methods JournalFileMethods = { + 1, /* iVersion */ + jrnlClose, /* xClose */ + jrnlRead, /* xRead */ + jrnlWrite, /* xWrite */ + jrnlTruncate, /* xTruncate */ + jrnlSync, /* xSync */ + jrnlFileSize, /* xFileSize */ + 0, /* xLock */ + 0, /* xUnlock */ + 0, /* xCheckReservedLock */ + 0, /* xFileControl */ + 0, /* xSectorSize */ + 0, /* xDeviceCharacteristics */ + 0, /* xShmMap */ + 0, /* xShmLock */ + 0, /* xShmBarrier */ + 0 /* xShmUnmap */ +}; + +/* +** Open a journal file. +*/ +SQLITE_PRIVATE int sqlite3JournalOpen( + sqlite3_vfs *pVfs, /* The VFS to use for actual file I/O */ + const char *zName, /* Name of the journal file */ + sqlite3_file *pJfd, /* Preallocated, blank file handle */ + int flags, /* Opening flags */ + int nBuf /* Bytes buffered before opening the file */ ){ - assert( pParse ); - pContext->pParse = pParse; - pContext->zAuthContext = pParse->zAuthContext; - pParse->zAuthContext = zContext; + JournalFile *p = (JournalFile *)pJfd; + memset(p, 0, sqlite3JournalSize(pVfs)); + if( nBuf>0 ){ + p->zBuf = sqlite3MallocZero(nBuf); + if( !p->zBuf ){ + return SQLITE_NOMEM; + } + }else{ + return sqlite3OsOpen(pVfs, zName, pJfd, flags, 0); + } + p->pMethod = &JournalFileMethods; + p->nBuf = nBuf; + p->flags = flags; + p->zJournal = zName; + p->pVfs = pVfs; + return SQLITE_OK; } /* -** Pop an authorization context that was previously pushed -** by sqlite3AuthContextPush +** If the argument p points to a JournalFile structure, and the underlying +** file has not yet been created, create it now. */ -SQLITE_PRIVATE void sqlite3AuthContextPop(AuthContext *pContext){ - if( pContext->pParse ){ - pContext->pParse->zAuthContext = pContext->zAuthContext; - pContext->pParse = 0; +SQLITE_PRIVATE int sqlite3JournalCreate(sqlite3_file *p){ + if( p->pMethods!=&JournalFileMethods ){ + return SQLITE_OK; } + return createFile((JournalFile *)p); } -#endif /* SQLITE_OMIT_AUTHORIZATION */ +/* +** Return the number of bytes required to store a JournalFile that uses vfs +** pVfs to create the underlying on-disk files. +*/ +SQLITE_PRIVATE int sqlite3JournalSize(sqlite3_vfs *pVfs){ + return (pVfs->szOsFile+sizeof(JournalFile)); +} +#endif -/************** End of auth.c ************************************************/ -/************** Begin file build.c *******************************************/ +/************** End of journal.c *********************************************/ +/************** Begin file memjournal.c **************************************/ /* -** 2001 September 15 +** 2008 October 7 ** ** The author disclaims copyright to this source code. In place of ** a legal notice, here is a blessing: @@ -63987,6178 +73683,5744 @@ SQLITE_PRIVATE void sqlite3AuthContextPop(AuthContext *pContext){ ** May you share freely, never taking more than you give. ** ************************************************************************* -** This file contains C code routines that are called by the SQLite parser -** when syntax rules are reduced. The routines in this file handle the -** following kinds of SQL syntax: ** -** CREATE TABLE -** DROP TABLE -** CREATE INDEX -** DROP INDEX -** creating ID lists -** BEGIN TRANSACTION -** COMMIT -** ROLLBACK +** This file contains code use to implement an in-memory rollback journal. +** The in-memory rollback journal is used to journal transactions for +** ":memory:" databases and when the journal_mode=MEMORY pragma is used. +*/ + +/* Forward references to internal structures */ +typedef struct MemJournal MemJournal; +typedef struct FilePoint FilePoint; +typedef struct FileChunk FileChunk; + +/* Space to hold the rollback journal is allocated in increments of +** this many bytes. ** -** $Id: build.c,v 1.554 2009/06/25 11:50:21 drh Exp $ +** The size chosen is a little less than a power of two. That way, +** the FileChunk object will have a size that almost exactly fills +** a power-of-two allocation. This mimimizes wasted space in power-of-two +** memory allocators. +*/ +#define JOURNAL_CHUNKSIZE ((int)(1024-sizeof(FileChunk*))) + +/* Macro to find the minimum of two numeric values. */ +#ifndef MIN +# define MIN(x,y) ((x)<(y)?(x):(y)) +#endif /* -** This routine is called when a new SQL statement is beginning to -** be parsed. Initialize the pParse structure as needed. +** The rollback journal is composed of a linked list of these structures. */ -SQLITE_PRIVATE void sqlite3BeginParse(Parse *pParse, int explainFlag){ - pParse->explain = (u8)explainFlag; - pParse->nVar = 0; -} +struct FileChunk { + FileChunk *pNext; /* Next chunk in the journal */ + u8 zChunk[JOURNAL_CHUNKSIZE]; /* Content of this chunk */ +}; -#ifndef SQLITE_OMIT_SHARED_CACHE /* -** The TableLock structure is only used by the sqlite3TableLock() and -** codeTableLocks() functions. +** An instance of this object serves as a cursor into the rollback journal. +** The cursor can be either for reading or writing. */ -struct TableLock { - int iDb; /* The database containing the table to be locked */ - int iTab; /* The root page of the table to be locked */ - u8 isWriteLock; /* True for write lock. False for a read lock */ - const char *zName; /* Name of the table */ +struct FilePoint { + sqlite3_int64 iOffset; /* Offset from the beginning of the file */ + FileChunk *pChunk; /* Specific chunk into which cursor points */ }; /* -** Record the fact that we want to lock a table at run-time. -** -** The table to be locked has root page iTab and is found in database iDb. -** A read or a write lock can be taken depending on isWritelock. -** -** This routine just records the fact that the lock is desired. The -** code to make the lock occur is generated by a later call to -** codeTableLocks() which occurs during sqlite3FinishCoding(). +** This subclass is a subclass of sqlite3_file. Each open memory-journal +** is an instance of this class. */ -SQLITE_PRIVATE void sqlite3TableLock( - Parse *pParse, /* Parsing context */ - int iDb, /* Index of the database containing the table to lock */ - int iTab, /* Root page number of the table to be locked */ - u8 isWriteLock, /* True for a write lock */ - const char *zName /* Name of the table to be locked */ +struct MemJournal { + sqlite3_io_methods *pMethod; /* Parent class. MUST BE FIRST */ + FileChunk *pFirst; /* Head of in-memory chunk-list */ + FilePoint endpoint; /* Pointer to the end of the file */ + FilePoint readpoint; /* Pointer to the end of the last xRead() */ +}; + +/* +** Read data from the in-memory journal file. This is the implementation +** of the sqlite3_vfs.xRead method. +*/ +static int memjrnlRead( + sqlite3_file *pJfd, /* The journal file from which to read */ + void *zBuf, /* Put the results here */ + int iAmt, /* Number of bytes to read */ + sqlite_int64 iOfst /* Begin reading at this offset */ ){ - int i; - int nBytes; - TableLock *p; + MemJournal *p = (MemJournal *)pJfd; + u8 *zOut = zBuf; + int nRead = iAmt; + int iChunkOffset; + FileChunk *pChunk; - assert( iDb>=0 ); - for(i=0; inTableLock; i++){ - p = &pParse->aTableLock[i]; - if( p->iDb==iDb && p->iTab==iTab ){ - p->isWriteLock = (p->isWriteLock || isWriteLock); - return; - } - } + /* SQLite never tries to read past the end of a rollback journal file */ + assert( iOfst+iAmt<=p->endpoint.iOffset ); - nBytes = sizeof(TableLock) * (pParse->nTableLock+1); - pParse->aTableLock = - sqlite3DbReallocOrFree(pParse->db, pParse->aTableLock, nBytes); - if( pParse->aTableLock ){ - p = &pParse->aTableLock[pParse->nTableLock++]; - p->iDb = iDb; - p->iTab = iTab; - p->isWriteLock = isWriteLock; - p->zName = zName; + if( p->readpoint.iOffset!=iOfst || iOfst==0 ){ + sqlite3_int64 iOff = 0; + for(pChunk=p->pFirst; + ALWAYS(pChunk) && (iOff+JOURNAL_CHUNKSIZE)<=iOfst; + pChunk=pChunk->pNext + ){ + iOff += JOURNAL_CHUNKSIZE; + } }else{ - pParse->nTableLock = 0; - pParse->db->mallocFailed = 1; + pChunk = p->readpoint.pChunk; } -} - -/* -** Code an OP_TableLock instruction for each table locked by the -** statement (configured by calls to sqlite3TableLock()). -*/ -static void codeTableLocks(Parse *pParse){ - int i; - Vdbe *pVdbe; - pVdbe = sqlite3GetVdbe(pParse); - assert( pVdbe!=0 ); /* sqlite3GetVdbe cannot fail: VDBE already allocated */ + iChunkOffset = (int)(iOfst%JOURNAL_CHUNKSIZE); + do { + int iSpace = JOURNAL_CHUNKSIZE - iChunkOffset; + int nCopy = MIN(nRead, (JOURNAL_CHUNKSIZE - iChunkOffset)); + memcpy(zOut, &pChunk->zChunk[iChunkOffset], nCopy); + zOut += nCopy; + nRead -= iSpace; + iChunkOffset = 0; + } while( nRead>=0 && (pChunk=pChunk->pNext)!=0 && nRead>0 ); + p->readpoint.iOffset = iOfst+iAmt; + p->readpoint.pChunk = pChunk; - for(i=0; inTableLock; i++){ - TableLock *p = &pParse->aTableLock[i]; - int p1 = p->iDb; - sqlite3VdbeAddOp4(pVdbe, OP_TableLock, p1, p->iTab, p->isWriteLock, - p->zName, P4_STATIC); - } + return SQLITE_OK; } -#else - #define codeTableLocks(x) -#endif /* -** This routine is called after a single SQL statement has been -** parsed and a VDBE program to execute that statement has been -** prepared. This routine puts the finishing touches on the -** VDBE program and resets the pParse structure for the next -** parse. -** -** Note that if an error occurred, it might be the case that -** no VDBE code was generated. +** Write data to the file. */ -SQLITE_PRIVATE void sqlite3FinishCoding(Parse *pParse){ - sqlite3 *db; - Vdbe *v; - - db = pParse->db; - if( db->mallocFailed ) return; - if( pParse->nested ) return; - if( pParse->nErr ) return; +static int memjrnlWrite( + sqlite3_file *pJfd, /* The journal file into which to write */ + const void *zBuf, /* Take data to be written from here */ + int iAmt, /* Number of bytes to write */ + sqlite_int64 iOfst /* Begin writing at this offset into the file */ +){ + MemJournal *p = (MemJournal *)pJfd; + int nWrite = iAmt; + u8 *zWrite = (u8 *)zBuf; - /* Begin by generating some termination code at the end of the - ** vdbe program + /* An in-memory journal file should only ever be appended to. Random + ** access writes are not required by sqlite. */ - v = sqlite3GetVdbe(pParse); - if( v ){ - sqlite3VdbeAddOp0(v, OP_Halt); + assert( iOfst==p->endpoint.iOffset ); + UNUSED_PARAMETER(iOfst); - /* The cookie mask contains one bit for each database file open. - ** (Bit 0 is for main, bit 1 is for temp, and so forth.) Bits are - ** set for each database that is used. Generate code to start a - ** transaction on each used database and to verify the schema cookie - ** on each used database. - */ - if( pParse->cookieGoto>0 ){ - u32 mask; - int iDb; - sqlite3VdbeJumpHere(v, pParse->cookieGoto-1); - for(iDb=0, mask=1; iDbnDb; mask<<=1, iDb++){ - if( (mask & pParse->cookieMask)==0 ) continue; - sqlite3VdbeUsesBtree(v, iDb); - sqlite3VdbeAddOp2(v,OP_Transaction, iDb, (mask & pParse->writeMask)!=0); - if( db->init.busy==0 ){ - sqlite3VdbeAddOp2(v,OP_VerifyCookie, iDb, pParse->cookieValue[iDb]); - } + while( nWrite>0 ){ + FileChunk *pChunk = p->endpoint.pChunk; + int iChunkOffset = (int)(p->endpoint.iOffset%JOURNAL_CHUNKSIZE); + int iSpace = MIN(nWrite, JOURNAL_CHUNKSIZE - iChunkOffset); + + if( iChunkOffset==0 ){ + /* New chunk is required to extend the file. */ + FileChunk *pNew = sqlite3_malloc(sizeof(FileChunk)); + if( !pNew ){ + return SQLITE_IOERR_NOMEM; } -#ifndef SQLITE_OMIT_VIRTUALTABLE - { - int i; - for(i=0; inVtabLock; i++){ - char *vtab = (char *)pParse->apVtabLock[i]->pVtab; - sqlite3VdbeAddOp4(v, OP_VBegin, 0, 0, 0, vtab, P4_VTAB); - } - pParse->nVtabLock = 0; + pNew->pNext = 0; + if( pChunk ){ + assert( p->pFirst ); + pChunk->pNext = pNew; + }else{ + assert( !p->pFirst ); + p->pFirst = pNew; } -#endif - - /* Once all the cookies have been verified and transactions opened, - ** obtain the required table-locks. This is a no-op unless the - ** shared-cache feature is enabled. - */ - codeTableLocks(pParse); - - /* Initialize any AUTOINCREMENT data structures required. - */ - sqlite3AutoincrementBegin(pParse); - - /* Finally, jump back to the beginning of the executable code. */ - sqlite3VdbeAddOp2(v, OP_Goto, 0, pParse->cookieGoto); + p->endpoint.pChunk = pNew; } + + memcpy(&p->endpoint.pChunk->zChunk[iChunkOffset], zWrite, iSpace); + zWrite += iSpace; + nWrite -= iSpace; + p->endpoint.iOffset += iSpace; } + return SQLITE_OK; +} - /* Get the VDBE program ready for execution - */ - if( v && ALWAYS(pParse->nErr==0) && !db->mallocFailed ){ -#ifdef SQLITE_DEBUG - FILE *trace = (db->flags & SQLITE_VdbeTrace)!=0 ? stdout : 0; - sqlite3VdbeTrace(v, trace); -#endif - assert( pParse->iCacheLevel==0 ); /* Disables and re-enables match */ - sqlite3VdbeMakeReady(v, pParse->nVar, pParse->nMem, - pParse->nTab, pParse->explain); - pParse->rc = SQLITE_DONE; - pParse->colNamesSet = 0; - }else if( pParse->rc==SQLITE_OK ){ - pParse->rc = SQLITE_ERROR; - } - pParse->nTab = 0; - pParse->nMem = 0; - pParse->nSet = 0; - pParse->nVar = 0; - pParse->cookieMask = 0; - pParse->cookieGoto = 0; +/* +** Truncate the file. +*/ +static int memjrnlTruncate(sqlite3_file *pJfd, sqlite_int64 size){ + MemJournal *p = (MemJournal *)pJfd; + FileChunk *pChunk; + assert(size==0); + UNUSED_PARAMETER(size); + pChunk = p->pFirst; + while( pChunk ){ + FileChunk *pTmp = pChunk; + pChunk = pChunk->pNext; + sqlite3_free(pTmp); + } + sqlite3MemJournalOpen(pJfd); + return SQLITE_OK; } /* -** Run the parser and code generator recursively in order to generate -** code for the SQL statement given onto the end of the pParse context -** currently under construction. When the parser is run recursively -** this way, the final OP_Halt is not appended and other initialization -** and finalization steps are omitted because those are handling by the -** outermost parser. -** -** Not everything is nestable. This facility is designed to permit -** INSERT, UPDATE, and DELETE operations against SQLITE_MASTER. Use -** care if you decide to try to use this routine for some other purposes. +** Close the file. */ -SQLITE_PRIVATE void sqlite3NestedParse(Parse *pParse, const char *zFormat, ...){ - va_list ap; - char *zSql; - char *zErrMsg = 0; - sqlite3 *db = pParse->db; -# define SAVE_SZ (sizeof(Parse) - offsetof(Parse,nVar)) - char saveBuf[SAVE_SZ]; - - if( pParse->nErr ) return; - assert( pParse->nested<10 ); /* Nesting should only be of limited depth */ - va_start(ap, zFormat); - zSql = sqlite3VMPrintf(db, zFormat, ap); - va_end(ap); - if( zSql==0 ){ - return; /* A malloc must have failed */ - } - pParse->nested++; - memcpy(saveBuf, &pParse->nVar, SAVE_SZ); - memset(&pParse->nVar, 0, SAVE_SZ); - sqlite3RunParser(pParse, zSql, &zErrMsg); - sqlite3DbFree(db, zErrMsg); - sqlite3DbFree(db, zSql); - memcpy(&pParse->nVar, saveBuf, SAVE_SZ); - pParse->nested--; +static int memjrnlClose(sqlite3_file *pJfd){ + memjrnlTruncate(pJfd, 0); + return SQLITE_OK; } + /* -** Locate the in-memory structure that describes a particular database -** table given the name of that table and (optionally) the name of the -** database containing the table. Return NULL if not found. -** -** If zDatabase is 0, all databases are searched for the table and the -** first matching table is returned. (No checking for duplicate table -** names is done.) The search order is TEMP first, then MAIN, then any -** auxiliary databases added using the ATTACH command. +** Sync the file. ** -** See also sqlite3LocateTable(). +** Syncing an in-memory journal is a no-op. And, in fact, this routine +** is never called in a working implementation. This implementation +** exists purely as a contingency, in case some malfunction in some other +** part of SQLite causes Sync to be called by mistake. */ -SQLITE_PRIVATE Table *sqlite3FindTable(sqlite3 *db, const char *zName, const char *zDatabase){ - Table *p = 0; - int i; - int nName; - assert( zName!=0 ); - nName = sqlite3Strlen30(zName); - for(i=OMIT_TEMPDB; inDb; i++){ - int j = (i<2) ? i^1 : i; /* Search TEMP before MAIN */ - if( zDatabase!=0 && sqlite3StrICmp(zDatabase, db->aDb[j].zName) ) continue; - p = sqlite3HashFind(&db->aDb[j].pSchema->tblHash, zName, nName); - if( p ) break; - } - return p; +static int memjrnlSync(sqlite3_file *NotUsed, int NotUsed2){ + UNUSED_PARAMETER2(NotUsed, NotUsed2); + return SQLITE_OK; } /* -** Locate the in-memory structure that describes a particular database -** table given the name of that table and (optionally) the name of the -** database containing the table. Return NULL if not found. Also leave an -** error message in pParse->zErrMsg. -** -** The difference between this routine and sqlite3FindTable() is that this -** routine leaves an error message in pParse->zErrMsg where -** sqlite3FindTable() does not. +** Query the size of the file in bytes. */ -SQLITE_PRIVATE Table *sqlite3LocateTable( - Parse *pParse, /* context in which to report errors */ - int isView, /* True if looking for a VIEW rather than a TABLE */ - const char *zName, /* Name of the table we are looking for */ - const char *zDbase /* Name of the database. Might be NULL */ -){ - Table *p; +static int memjrnlFileSize(sqlite3_file *pJfd, sqlite_int64 *pSize){ + MemJournal *p = (MemJournal *)pJfd; + *pSize = (sqlite_int64) p->endpoint.iOffset; + return SQLITE_OK; +} - /* Read the database schema. If an error occurs, leave an error message - ** and code in pParse and return NULL. */ - if( SQLITE_OK!=sqlite3ReadSchema(pParse) ){ - return 0; - } +/* +** Table of methods for MemJournal sqlite3_file object. +*/ +static const struct sqlite3_io_methods MemJournalMethods = { + 1, /* iVersion */ + memjrnlClose, /* xClose */ + memjrnlRead, /* xRead */ + memjrnlWrite, /* xWrite */ + memjrnlTruncate, /* xTruncate */ + memjrnlSync, /* xSync */ + memjrnlFileSize, /* xFileSize */ + 0, /* xLock */ + 0, /* xUnlock */ + 0, /* xCheckReservedLock */ + 0, /* xFileControl */ + 0, /* xSectorSize */ + 0, /* xDeviceCharacteristics */ + 0, /* xShmMap */ + 0, /* xShmLock */ + 0, /* xShmBarrier */ + 0 /* xShmUnlock */ +}; - p = sqlite3FindTable(pParse->db, zName, zDbase); - if( p==0 ){ - const char *zMsg = isView ? "no such view" : "no such table"; - if( zDbase ){ - sqlite3ErrorMsg(pParse, "%s: %s.%s", zMsg, zDbase, zName); - }else{ - sqlite3ErrorMsg(pParse, "%s: %s", zMsg, zName); - } - pParse->checkSchema = 1; - } - return p; +/* +** Open a journal file. +*/ +SQLITE_PRIVATE void sqlite3MemJournalOpen(sqlite3_file *pJfd){ + MemJournal *p = (MemJournal *)pJfd; + assert( EIGHT_BYTE_ALIGNMENT(p) ); + memset(p, 0, sqlite3MemJournalSize()); + p->pMethod = (sqlite3_io_methods*)&MemJournalMethods; } /* -** Locate the in-memory structure that describes -** a particular index given the name of that index -** and the name of the database that contains the index. -** Return NULL if not found. -** -** If zDatabase is 0, all databases are searched for the -** table and the first matching index is returned. (No checking -** for duplicate index names is done.) The search order is -** TEMP first, then MAIN, then any auxiliary databases added -** using the ATTACH command. +** Return true if the file-handle passed as an argument is +** an in-memory journal */ -SQLITE_PRIVATE Index *sqlite3FindIndex(sqlite3 *db, const char *zName, const char *zDb){ - Index *p = 0; - int i; - int nName = sqlite3Strlen30(zName); - for(i=OMIT_TEMPDB; inDb; i++){ - int j = (i<2) ? i^1 : i; /* Search TEMP before MAIN */ - Schema *pSchema = db->aDb[j].pSchema; - assert( pSchema ); - if( zDb && sqlite3StrICmp(zDb, db->aDb[j].zName) ) continue; - p = sqlite3HashFind(&pSchema->idxHash, zName, nName); - if( p ) break; - } - return p; +SQLITE_PRIVATE int sqlite3IsMemJournal(sqlite3_file *pJfd){ + return pJfd->pMethods==&MemJournalMethods; } -/* -** Reclaim the memory used by an index +/* +** Return the number of bytes required to store a MemJournal file descriptor. */ -static void freeIndex(Index *p){ - sqlite3 *db = p->pTable->dbMem; - /* testcase( db==0 ); */ - sqlite3DbFree(db, p->zColAff); - sqlite3DbFree(db, p); +SQLITE_PRIVATE int sqlite3MemJournalSize(void){ + return sizeof(MemJournal); } +/************** End of memjournal.c ******************************************/ +/************** Begin file walker.c ******************************************/ /* -** Remove the given index from the index hash table, and free -** its memory structures. +** 2008 August 16 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. ** -** The index is removed from the database hash tables but -** it is not unlinked from the Table that it indexes. -** Unlinking from the Table must be done by the calling function. +************************************************************************* +** This file contains routines used for walking the parser tree for +** an SQL statement. */ -static void sqlite3DeleteIndex(Index *p){ - Index *pOld; - const char *zName = p->zName; +/* #include */ +/* #include */ - pOld = sqlite3HashInsert(&p->pSchema->idxHash, zName, - sqlite3Strlen30(zName), 0); - assert( pOld==0 || pOld==p ); - freeIndex(p); -} /* -** For the index called zIdxName which is found in the database iDb, -** unlike that index from its Table then remove the index from -** the index hash table and free all memory structures associated -** with the index. +** Walk an expression tree. Invoke the callback once for each node +** of the expression, while decending. (In other words, the callback +** is invoked before visiting children.) +** +** The return value from the callback should be one of the WRC_* +** constants to specify how to proceed with the walk. +** +** WRC_Continue Continue descending down the tree. +** +** WRC_Prune Do not descend into child nodes. But allow +** the walk to continue with sibling nodes. +** +** WRC_Abort Do no more callbacks. Unwind the stack and +** return the top-level walk call. +** +** The return value from this routine is WRC_Abort to abandon the tree walk +** and WRC_Continue to continue. */ -SQLITE_PRIVATE void sqlite3UnlinkAndDeleteIndex(sqlite3 *db, int iDb, const char *zIdxName){ - Index *pIndex; - int len; - Hash *pHash = &db->aDb[iDb].pSchema->idxHash; - - len = sqlite3Strlen30(zIdxName); - pIndex = sqlite3HashInsert(pHash, zIdxName, len, 0); - if( pIndex ){ - if( pIndex->pTable->pIndex==pIndex ){ - pIndex->pTable->pIndex = pIndex->pNext; +SQLITE_PRIVATE int sqlite3WalkExpr(Walker *pWalker, Expr *pExpr){ + int rc; + if( pExpr==0 ) return WRC_Continue; + testcase( ExprHasProperty(pExpr, EP_TokenOnly) ); + testcase( ExprHasProperty(pExpr, EP_Reduced) ); + rc = pWalker->xExprCallback(pWalker, pExpr); + if( rc==WRC_Continue + && !ExprHasAnyProperty(pExpr,EP_TokenOnly) ){ + if( sqlite3WalkExpr(pWalker, pExpr->pLeft) ) return WRC_Abort; + if( sqlite3WalkExpr(pWalker, pExpr->pRight) ) return WRC_Abort; + if( ExprHasProperty(pExpr, EP_xIsSelect) ){ + if( sqlite3WalkSelect(pWalker, pExpr->x.pSelect) ) return WRC_Abort; }else{ - Index *p; - /* Justification of ALWAYS(); The index must be on the list of - ** indices. */ - p = pIndex->pTable->pIndex; - while( ALWAYS(p) && p->pNext!=pIndex ){ p = p->pNext; } - if( ALWAYS(p && p->pNext==pIndex) ){ - p->pNext = pIndex->pNext; - } + if( sqlite3WalkExprList(pWalker, pExpr->x.pList) ) return WRC_Abort; } - freeIndex(pIndex); } - db->flags |= SQLITE_InternChanges; + return rc & WRC_Abort; } /* -** Erase all schema information from the in-memory hash tables of -** a single database. This routine is called to reclaim memory -** before the database closes. It is also called during a rollback -** if there were schema changes during the transaction or if a -** schema-cookie mismatch occurs. -** -** If iDb==0 then reset the internal schema tables for all database -** files. If iDb>=1 then reset the internal schema for only the -** single file indicated. +** Call sqlite3WalkExpr() for every expression in list p or until +** an abort request is seen. */ -SQLITE_PRIVATE void sqlite3ResetInternalSchema(sqlite3 *db, int iDb){ - int i, j; - assert( iDb>=0 && iDbnDb ); - - if( iDb==0 ){ - sqlite3BtreeEnterAll(db); - } - for(i=iDb; inDb; i++){ - Db *pDb = &db->aDb[i]; - if( pDb->pSchema ){ - assert(i==1 || (pDb->pBt && sqlite3BtreeHoldsMutex(pDb->pBt))); - sqlite3SchemaFree(pDb->pSchema); - } - if( iDb>0 ) return; - } - assert( iDb==0 ); - db->flags &= ~SQLITE_InternChanges; - sqlite3BtreeLeaveAll(db); - - /* If one or more of the auxiliary database files has been closed, - ** then remove them from the auxiliary database list. We take the - ** opportunity to do this here since we have just deleted all of the - ** schema hash tables and therefore do not have to make any changes - ** to any of those tables. - */ - for(i=j=2; inDb; i++){ - struct Db *pDb = &db->aDb[i]; - if( pDb->pBt==0 ){ - sqlite3DbFree(db, pDb->zName); - pDb->zName = 0; - continue; - } - if( jaDb[j] = db->aDb[i]; +SQLITE_PRIVATE int sqlite3WalkExprList(Walker *pWalker, ExprList *p){ + int i; + struct ExprList_item *pItem; + if( p ){ + for(i=p->nExpr, pItem=p->a; i>0; i--, pItem++){ + if( sqlite3WalkExpr(pWalker, pItem->pExpr) ) return WRC_Abort; } - j++; - } - memset(&db->aDb[j], 0, (db->nDb-j)*sizeof(db->aDb[j])); - db->nDb = j; - if( db->nDb<=2 && db->aDb!=db->aDbStatic ){ - memcpy(db->aDbStatic, db->aDb, 2*sizeof(db->aDb[0])); - sqlite3DbFree(db, db->aDb); - db->aDb = db->aDbStatic; } + return WRC_Continue; } /* -** This routine is called when a commit occurs. +** Walk all expressions associated with SELECT statement p. Do +** not invoke the SELECT callback on p, but do (of course) invoke +** any expr callbacks and SELECT callbacks that come from subqueries. +** Return WRC_Abort or WRC_Continue. */ -SQLITE_PRIVATE void sqlite3CommitInternalChanges(sqlite3 *db){ - db->flags &= ~SQLITE_InternChanges; +SQLITE_PRIVATE int sqlite3WalkSelectExpr(Walker *pWalker, Select *p){ + if( sqlite3WalkExprList(pWalker, p->pEList) ) return WRC_Abort; + if( sqlite3WalkExpr(pWalker, p->pWhere) ) return WRC_Abort; + if( sqlite3WalkExprList(pWalker, p->pGroupBy) ) return WRC_Abort; + if( sqlite3WalkExpr(pWalker, p->pHaving) ) return WRC_Abort; + if( sqlite3WalkExprList(pWalker, p->pOrderBy) ) return WRC_Abort; + if( sqlite3WalkExpr(pWalker, p->pLimit) ) return WRC_Abort; + if( sqlite3WalkExpr(pWalker, p->pOffset) ) return WRC_Abort; + return WRC_Continue; } /* -** Clear the column names from a table or view. +** Walk the parse trees associated with all subqueries in the +** FROM clause of SELECT statement p. Do not invoke the select +** callback on p, but do invoke it on each FROM clause subquery +** and on any subqueries further down in the tree. Return +** WRC_Abort or WRC_Continue; */ -static void sqliteResetColumnNames(Table *pTable){ +SQLITE_PRIVATE int sqlite3WalkSelectFrom(Walker *pWalker, Select *p){ + SrcList *pSrc; int i; - Column *pCol; - sqlite3 *db = pTable->dbMem; - testcase( db==0 ); - assert( pTable!=0 ); - if( (pCol = pTable->aCol)!=0 ){ - for(i=0; inCol; i++, pCol++){ - sqlite3DbFree(db, pCol->zName); - sqlite3ExprDelete(db, pCol->pDflt); - sqlite3DbFree(db, pCol->zDflt); - sqlite3DbFree(db, pCol->zType); - sqlite3DbFree(db, pCol->zColl); + struct SrcList_item *pItem; + + pSrc = p->pSrc; + if( ALWAYS(pSrc) ){ + for(i=pSrc->nSrc, pItem=pSrc->a; i>0; i--, pItem++){ + if( sqlite3WalkSelect(pWalker, pItem->pSelect) ){ + return WRC_Abort; + } } - sqlite3DbFree(db, pTable->aCol); } - pTable->aCol = 0; - pTable->nCol = 0; -} + return WRC_Continue; +} /* -** Remove the memory data structures associated with the given -** Table. No changes are made to disk by this routine. +** Call sqlite3WalkExpr() for every expression in Select statement p. +** Invoke sqlite3WalkSelect() for subqueries in the FROM clause and +** on the compound select chain, p->pPrior. ** -** This routine just deletes the data structure. It does not unlink -** the table data structure from the hash table. But it does destroy -** memory structures of the indices and foreign keys associated with -** the table. +** Return WRC_Continue under normal conditions. Return WRC_Abort if +** there is an abort request. +** +** If the Walker does not have an xSelectCallback() then this routine +** is a no-op returning WRC_Continue. */ -SQLITE_PRIVATE void sqlite3DeleteTable(Table *pTable){ - Index *pIndex, *pNext; - FKey *pFKey, *pNextFKey; - sqlite3 *db; - - if( pTable==0 ) return; - db = pTable->dbMem; - testcase( db==0 ); - - /* Do not delete the table until the reference count reaches zero. */ - pTable->nRef--; - if( pTable->nRef>0 ){ - return; - } - assert( pTable->nRef==0 ); - - /* Delete all indices associated with this table - */ - for(pIndex = pTable->pIndex; pIndex; pIndex=pNext){ - pNext = pIndex->pNext; - assert( pIndex->pSchema==pTable->pSchema ); - sqlite3DeleteIndex(pIndex); - } - -#ifndef SQLITE_OMIT_FOREIGN_KEY - /* Delete all foreign keys associated with this table. */ - for(pFKey=pTable->pFKey; pFKey; pFKey=pNextFKey){ - pNextFKey = pFKey->pNextFrom; - sqlite3DbFree(db, pFKey); +SQLITE_PRIVATE int sqlite3WalkSelect(Walker *pWalker, Select *p){ + int rc; + if( p==0 || pWalker->xSelectCallback==0 ) return WRC_Continue; + rc = WRC_Continue; + while( p ){ + rc = pWalker->xSelectCallback(pWalker, p); + if( rc ) break; + if( sqlite3WalkSelectExpr(pWalker, p) ) return WRC_Abort; + if( sqlite3WalkSelectFrom(pWalker, p) ) return WRC_Abort; + p = p->pPrior; } -#endif - - /* Delete the Table structure itself. - */ - sqliteResetColumnNames(pTable); - sqlite3DbFree(db, pTable->zName); - sqlite3DbFree(db, pTable->zColAff); - sqlite3SelectDelete(db, pTable->pSelect); -#ifndef SQLITE_OMIT_CHECK - sqlite3ExprDelete(db, pTable->pCheck); -#endif - sqlite3VtabClear(pTable); - sqlite3DbFree(db, pTable); + return rc & WRC_Abort; } +/************** End of walker.c **********************************************/ +/************** Begin file resolve.c *****************************************/ /* -** Unlink the given table from the hash tables and the delete the -** table structure with all its indices and foreign keys. +** 2008 August 18 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** +** This file contains routines used for walking the parser tree and +** resolve all identifiers by associating them with a particular +** table and column. */ -SQLITE_PRIVATE void sqlite3UnlinkAndDeleteTable(sqlite3 *db, int iDb, const char *zTabName){ - Table *p; - Db *pDb; - - assert( db!=0 ); - assert( iDb>=0 && iDbnDb ); - assert( zTabName && zTabName[0] ); - pDb = &db->aDb[iDb]; - p = sqlite3HashInsert(&pDb->pSchema->tblHash, zTabName, - sqlite3Strlen30(zTabName),0); - sqlite3DeleteTable(p); - db->flags |= SQLITE_InternChanges; -} +/* #include */ +/* #include */ /* -** Given a token, return a string that consists of the text of that -** token. Space to hold the returned string -** is obtained from sqliteMalloc() and must be freed by the calling -** function. +** Turn the pExpr expression into an alias for the iCol-th column of the +** result set in pEList. ** -** Any quotation marks (ex: "name", 'name', [name], or `name`) that -** surround the body of the token are removed. +** If the result set column is a simple column reference, then this routine +** makes an exact copy. But for any other kind of expression, this +** routine make a copy of the result set column as the argument to the +** TK_AS operator. The TK_AS operator causes the expression to be +** evaluated just once and then reused for each alias. ** -** Tokens are often just pointers into the original SQL text and so -** are not \000 terminated and are not persistent. The returned string -** is \000 terminated and is persistent. +** The reason for suppressing the TK_AS term when the expression is a simple +** column reference is so that the column reference will be recognized as +** usable by indices within the WHERE clause processing logic. +** +** Hack: The TK_AS operator is inhibited if zType[0]=='G'. This means +** that in a GROUP BY clause, the expression is evaluated twice. Hence: +** +** SELECT random()%5 AS x, count(*) FROM tab GROUP BY x +** +** Is equivalent to: +** +** SELECT random()%5 AS x, count(*) FROM tab GROUP BY random()%5 +** +** The result of random()%5 in the GROUP BY clause is probably different +** from the result in the result-set. We might fix this someday. Or +** then again, we might not... */ -SQLITE_PRIVATE char *sqlite3NameFromToken(sqlite3 *db, Token *pName){ - char *zName; - if( pName ){ - zName = sqlite3DbStrNDup(db, (char*)pName->z, pName->n); - sqlite3Dequote(zName); +static void resolveAlias( + Parse *pParse, /* Parsing context */ + ExprList *pEList, /* A result set */ + int iCol, /* A column in the result set. 0..pEList->nExpr-1 */ + Expr *pExpr, /* Transform this into an alias to the result set */ + const char *zType /* "GROUP" or "ORDER" or "" */ +){ + Expr *pOrig; /* The iCol-th column of the result set */ + Expr *pDup; /* Copy of pOrig */ + sqlite3 *db; /* The database connection */ + + assert( iCol>=0 && iColnExpr ); + pOrig = pEList->a[iCol].pExpr; + assert( pOrig!=0 ); + assert( pOrig->flags & EP_Resolved ); + db = pParse->db; + if( pOrig->op!=TK_COLUMN && zType[0]!='G' ){ + pDup = sqlite3ExprDup(db, pOrig, 0); + pDup = sqlite3PExpr(pParse, TK_AS, pDup, 0, 0); + if( pDup==0 ) return; + if( pEList->a[iCol].iAlias==0 ){ + pEList->a[iCol].iAlias = (u16)(++pParse->nAlias); + } + pDup->iTable = pEList->a[iCol].iAlias; + }else if( ExprHasProperty(pOrig, EP_IntValue) || pOrig->u.zToken==0 ){ + pDup = sqlite3ExprDup(db, pOrig, 0); + if( pDup==0 ) return; }else{ - zName = 0; + char *zToken = pOrig->u.zToken; + assert( zToken!=0 ); + pOrig->u.zToken = 0; + pDup = sqlite3ExprDup(db, pOrig, 0); + pOrig->u.zToken = zToken; + if( pDup==0 ) return; + assert( (pDup->flags & (EP_Reduced|EP_TokenOnly))==0 ); + pDup->flags2 |= EP2_MallocedToken; + pDup->u.zToken = sqlite3DbStrDup(db, zToken); } - return zName; + if( pExpr->flags & EP_ExpCollate ){ + pDup->pColl = pExpr->pColl; + pDup->flags |= EP_ExpCollate; + } + + /* Before calling sqlite3ExprDelete(), set the EP_Static flag. This + ** prevents ExprDelete() from deleting the Expr structure itself, + ** allowing it to be repopulated by the memcpy() on the following line. + */ + ExprSetProperty(pExpr, EP_Static); + sqlite3ExprDelete(db, pExpr); + memcpy(pExpr, pDup, sizeof(*pExpr)); + sqlite3DbFree(db, pDup); } + /* -** Open the sqlite_master table stored in database number iDb for -** writing. The table is opened using cursor 0. +** Return TRUE if the name zCol occurs anywhere in the USING clause. +** +** Return FALSE if the USING clause is NULL or if it does not contain +** zCol. */ -SQLITE_PRIVATE void sqlite3OpenMasterTable(Parse *p, int iDb){ - Vdbe *v = sqlite3GetVdbe(p); - sqlite3TableLock(p, iDb, MASTER_ROOT, 1, SCHEMA_TABLE(iDb)); - sqlite3VdbeAddOp3(v, OP_OpenWrite, 0, MASTER_ROOT, iDb); - sqlite3VdbeChangeP4(v, -1, (char *)5, P4_INT32); /* 5 column table */ - if( p->nTab==0 ){ - p->nTab = 1; +static int nameInUsingClause(IdList *pUsing, const char *zCol){ + if( pUsing ){ + int k; + for(k=0; knId; k++){ + if( sqlite3StrICmp(pUsing->a[k].zName, zCol)==0 ) return 1; + } } + return 0; } -/* -** Parameter zName points to a nul-terminated buffer containing the name -** of a database ("main", "temp" or the name of an attached db). This -** function returns the index of the named database in db->aDb[], or -** -1 if the named db cannot be found. -*/ -SQLITE_PRIVATE int sqlite3FindDbName(sqlite3 *db, const char *zName){ - int i = -1; /* Database number */ - if( zName ){ - Db *pDb; - int n = sqlite3Strlen30(zName); - for(i=(db->nDb-1), pDb=&db->aDb[i]; i>=0; i--, pDb--){ - if( (!OMIT_TEMPDB || i!=1 ) && n==sqlite3Strlen30(pDb->zName) && - 0==sqlite3StrICmp(pDb->zName, zName) ){ - break; - } - } - } - return i; -} /* -** The token *pName contains the name of a database (either "main" or -** "temp" or the name of an attached db). This routine returns the -** index of the named database in db->aDb[], or -1 if the named db -** does not exist. -*/ -SQLITE_PRIVATE int sqlite3FindDb(sqlite3 *db, Token *pName){ - int i; /* Database number */ - char *zName; /* Name we are searching for */ - zName = sqlite3NameFromToken(db, pName); - i = sqlite3FindDbName(db, zName); - sqlite3DbFree(db, zName); - return i; -} - -/* The table or view or trigger name is passed to this routine via tokens -** pName1 and pName2. If the table name was fully qualified, for example: -** -** CREATE TABLE xxx.yyy (...); -** -** Then pName1 is set to "xxx" and pName2 "yyy". On the other hand if -** the table name is not fully qualified, i.e.: +** Given the name of a column of the form X.Y.Z or Y.Z or just Z, look up +** that name in the set of source tables in pSrcList and make the pExpr +** expression node refer back to that source column. The following changes +** are made to pExpr: ** -** CREATE TABLE yyy(...); +** pExpr->iDb Set the index in db->aDb[] of the database X +** (even if X is implied). +** pExpr->iTable Set to the cursor number for the table obtained +** from pSrcList. +** pExpr->pTab Points to the Table structure of X.Y (even if +** X and/or Y are implied.) +** pExpr->iColumn Set to the column number within the table. +** pExpr->op Set to TK_COLUMN. +** pExpr->pLeft Any expression this points to is deleted +** pExpr->pRight Any expression this points to is deleted. ** -** Then pName1 is set to "yyy" and pName2 is "". +** The zDb variable is the name of the database (the "X"). This value may be +** NULL meaning that name is of the form Y.Z or Z. Any available database +** can be used. The zTable variable is the name of the table (the "Y"). This +** value can be NULL if zDb is also NULL. If zTable is NULL it +** means that the form of the name is Z and that columns from any table +** can be used. ** -** This routine sets the *ppUnqual pointer to point at the token (pName1 or -** pName2) that stores the unqualified table name. The index of the -** database "xxx" is returned. +** If the name cannot be resolved unambiguously, leave an error message +** in pParse and return WRC_Abort. Return WRC_Prune on success. */ -SQLITE_PRIVATE int sqlite3TwoPartName( - Parse *pParse, /* Parsing and code generating context */ - Token *pName1, /* The "xxx" in the name "xxx.yyy" or "xxx" */ - Token *pName2, /* The "yyy" in the name "xxx.yyy" */ - Token **pUnqual /* Write the unqualified object name here */ +static int lookupName( + Parse *pParse, /* The parsing context */ + const char *zDb, /* Name of the database containing table, or NULL */ + const char *zTab, /* Name of table containing column, or NULL */ + const char *zCol, /* Name of the column. */ + NameContext *pNC, /* The name context used to resolve the name */ + Expr *pExpr /* Make this EXPR node point to the selected column */ ){ - int iDb; /* Database holding the object */ - sqlite3 *db = pParse->db; - - if( ALWAYS(pName2!=0) && pName2->n>0 ){ - if( db->init.busy ) { - sqlite3ErrorMsg(pParse, "corrupt database"); - pParse->nErr++; - return -1; - } - *pUnqual = pName2; - iDb = sqlite3FindDb(db, pName1); - if( iDb<0 ){ - sqlite3ErrorMsg(pParse, "unknown database %T", pName1); - pParse->nErr++; - return -1; - } - }else{ - assert( db->init.iDb==0 || db->init.busy ); - iDb = db->init.iDb; - *pUnqual = pName1; - } - return iDb; -} + int i, j; /* Loop counters */ + int cnt = 0; /* Number of matching column names */ + int cntTab = 0; /* Number of matching table names */ + sqlite3 *db = pParse->db; /* The database connection */ + struct SrcList_item *pItem; /* Use for looping over pSrcList items */ + struct SrcList_item *pMatch = 0; /* The matching pSrcList item */ + NameContext *pTopNC = pNC; /* First namecontext in the list */ + Schema *pSchema = 0; /* Schema of the expression */ + int isTrigger = 0; -/* -** This routine is used to check if the UTF-8 string zName is a legal -** unqualified name for a new schema object (table, index, view or -** trigger). All names are legal except those that begin with the string -** "sqlite_" (in upper, lower or mixed case). This portion of the namespace -** is reserved for internal use. -*/ -SQLITE_PRIVATE int sqlite3CheckObjectName(Parse *pParse, const char *zName){ - if( !pParse->db->init.busy && pParse->nested==0 - && (pParse->db->flags & SQLITE_WriteSchema)==0 - && 0==sqlite3StrNICmp(zName, "sqlite_", 7) ){ - sqlite3ErrorMsg(pParse, "object name reserved for internal use: %s", zName); - return SQLITE_ERROR; - } - return SQLITE_OK; -} + assert( pNC ); /* the name context cannot be NULL. */ + assert( zCol ); /* The Z in X.Y.Z cannot be NULL */ + assert( ~ExprHasAnyProperty(pExpr, EP_TokenOnly|EP_Reduced) ); -/* -** Begin constructing a new table representation in memory. This is -** the first of several action routines that get called in response -** to a CREATE TABLE statement. In particular, this routine is called -** after seeing tokens "CREATE" and "TABLE" and the table name. The isTemp -** flag is true if the table should be stored in the auxiliary database -** file instead of in the main database file. This is normally the case -** when the "TEMP" or "TEMPORARY" keyword occurs in between -** CREATE and TABLE. -** -** The new table record is initialized and put in pParse->pNewTable. -** As more of the CREATE TABLE statement is parsed, additional action -** routines will be called to add more information to this record. -** At the end of the CREATE TABLE statement, the sqlite3EndTable() routine -** is called to complete the construction of the new table record. -*/ -SQLITE_PRIVATE void sqlite3StartTable( - Parse *pParse, /* Parser context */ - Token *pName1, /* First part of the name of the table or view */ - Token *pName2, /* Second part of the name of the table or view */ - int isTemp, /* True if this is a TEMP table */ - int isView, /* True if this is a VIEW */ - int isVirtual, /* True if this is a VIRTUAL table */ - int noErr /* Do nothing if table already exists */ -){ - Table *pTable; - char *zName = 0; /* The name of the new table */ - sqlite3 *db = pParse->db; - Vdbe *v; - int iDb; /* Database number to create the table in */ - Token *pName; /* Unqualified name of the table to create */ + /* Initialize the node to no-match */ + pExpr->iTable = -1; + pExpr->pTab = 0; + ExprSetIrreducible(pExpr); - /* The table or view name to create is passed to this routine via tokens - ** pName1 and pName2. If the table name was fully qualified, for example: - ** - ** CREATE TABLE xxx.yyy (...); - ** - ** Then pName1 is set to "xxx" and pName2 "yyy". On the other hand if - ** the table name is not fully qualified, i.e.: - ** - ** CREATE TABLE yyy(...); - ** - ** Then pName1 is set to "yyy" and pName2 is "". - ** - ** The call below sets the pName pointer to point at the token (pName1 or - ** pName2) that stores the unqualified table name. The variable iDb is - ** set to the index of the database that the table or view is to be - ** created in. - */ - iDb = sqlite3TwoPartName(pParse, pName1, pName2, &pName); - if( iDb<0 ) return; - if( !OMIT_TEMPDB && isTemp && iDb>1 ){ - /* If creating a temp table, the name may not be qualified */ - sqlite3ErrorMsg(pParse, "temporary table name must be unqualified"); - return; - } - if( !OMIT_TEMPDB && isTemp ) iDb = 1; + /* Start at the inner-most context and move outward until a match is found */ + while( pNC && cnt==0 ){ + ExprList *pEList; + SrcList *pSrcList = pNC->pSrcList; - pParse->sNameToken = *pName; - zName = sqlite3NameFromToken(db, pName); - if( zName==0 ) return; - if( SQLITE_OK!=sqlite3CheckObjectName(pParse, zName) ){ - goto begin_table_error; - } - if( db->init.iDb==1 ) isTemp = 1; -#ifndef SQLITE_OMIT_AUTHORIZATION - assert( (isTemp & 1)==isTemp ); - { - int code; - char *zDb = db->aDb[iDb].zName; - if( sqlite3AuthCheck(pParse, SQLITE_INSERT, SCHEMA_TABLE(isTemp), 0, zDb) ){ - goto begin_table_error; + if( pSrcList ){ + for(i=0, pItem=pSrcList->a; inSrc; i++, pItem++){ + Table *pTab; + int iDb; + Column *pCol; + + pTab = pItem->pTab; + assert( pTab!=0 && pTab->zName!=0 ); + iDb = sqlite3SchemaToIndex(db, pTab->pSchema); + assert( pTab->nCol>0 ); + if( zTab ){ + if( pItem->zAlias ){ + char *zTabName = pItem->zAlias; + if( sqlite3StrICmp(zTabName, zTab)!=0 ) continue; + }else{ + char *zTabName = pTab->zName; + if( NEVER(zTabName==0) || sqlite3StrICmp(zTabName, zTab)!=0 ){ + continue; + } + if( zDb!=0 && sqlite3StrICmp(db->aDb[iDb].zName, zDb)!=0 ){ + continue; + } + } + } + if( 0==(cntTab++) ){ + pExpr->iTable = pItem->iCursor; + pExpr->pTab = pTab; + pSchema = pTab->pSchema; + pMatch = pItem; + } + for(j=0, pCol=pTab->aCol; jnCol; j++, pCol++){ + if( sqlite3StrICmp(pCol->zName, zCol)==0 ){ + /* If there has been exactly one prior match and this match + ** is for the right-hand table of a NATURAL JOIN or is in a + ** USING clause, then skip this match. + */ + if( cnt==1 ){ + if( pItem->jointype & JT_NATURAL ) continue; + if( nameInUsingClause(pItem->pUsing, zCol) ) continue; + } + cnt++; + pExpr->iTable = pItem->iCursor; + pExpr->pTab = pTab; + pMatch = pItem; + pSchema = pTab->pSchema; + /* Substitute the rowid (column -1) for the INTEGER PRIMARY KEY */ + pExpr->iColumn = j==pTab->iPKey ? -1 : (i16)j; + break; + } + } + } } - if( isView ){ - if( !OMIT_TEMPDB && isTemp ){ - code = SQLITE_CREATE_TEMP_VIEW; - }else{ - code = SQLITE_CREATE_VIEW; + +#ifndef SQLITE_OMIT_TRIGGER + /* If we have not already resolved the name, then maybe + ** it is a new.* or old.* trigger argument reference + */ + if( zDb==0 && zTab!=0 && cnt==0 && pParse->pTriggerTab!=0 ){ + int op = pParse->eTriggerOp; + Table *pTab = 0; + assert( op==TK_DELETE || op==TK_UPDATE || op==TK_INSERT ); + if( op!=TK_DELETE && sqlite3StrICmp("new",zTab) == 0 ){ + pExpr->iTable = 1; + pTab = pParse->pTriggerTab; + }else if( op!=TK_INSERT && sqlite3StrICmp("old",zTab)==0 ){ + pExpr->iTable = 0; + pTab = pParse->pTriggerTab; } - }else{ - if( !OMIT_TEMPDB && isTemp ){ - code = SQLITE_CREATE_TEMP_TABLE; - }else{ - code = SQLITE_CREATE_TABLE; + + if( pTab ){ + int iCol; + pSchema = pTab->pSchema; + cntTab++; + for(iCol=0; iColnCol; iCol++){ + Column *pCol = &pTab->aCol[iCol]; + if( sqlite3StrICmp(pCol->zName, zCol)==0 ){ + if( iCol==pTab->iPKey ){ + iCol = -1; + } + break; + } + } + if( iCol>=pTab->nCol && sqlite3IsRowid(zCol) ){ + iCol = -1; /* IMP: R-44911-55124 */ + } + if( iColnCol ){ + cnt++; + if( iCol<0 ){ + pExpr->affinity = SQLITE_AFF_INTEGER; + }else if( pExpr->iTable==0 ){ + testcase( iCol==31 ); + testcase( iCol==32 ); + pParse->oldmask |= (iCol>=32 ? 0xffffffff : (((u32)1)<newmask |= (iCol>=32 ? 0xffffffff : (((u32)1)<iColumn = (i16)iCol; + pExpr->pTab = pTab; + isTrigger = 1; + } } } - if( !isVirtual && sqlite3AuthCheck(pParse, code, zName, 0, zDb) ){ - goto begin_table_error; - } - } -#endif +#endif /* !defined(SQLITE_OMIT_TRIGGER) */ - /* Make sure the new table name does not collide with an existing - ** index or table name in the same database. Issue an error message if - ** it does. The exception is if the statement being parsed was passed - ** to an sqlite3_declare_vtab() call. In that case only the column names - ** and types will be used, so there is no need to test for namespace - ** collisions. - */ - if( !IN_DECLARE_VTAB ){ - if( SQLITE_OK!=sqlite3ReadSchema(pParse) ){ - goto begin_table_error; + /* + ** Perhaps the name is a reference to the ROWID + */ + if( cnt==0 && cntTab==1 && sqlite3IsRowid(zCol) ){ + cnt = 1; + pExpr->iColumn = -1; /* IMP: R-44911-55124 */ + pExpr->affinity = SQLITE_AFF_INTEGER; } - pTable = sqlite3FindTable(db, zName, db->aDb[iDb].zName); - if( pTable ){ - if( !noErr ){ - sqlite3ErrorMsg(pParse, "table %T already exists", pName); - } - goto begin_table_error; + + /* + ** If the input is of the form Z (not Y.Z or X.Y.Z) then the name Z + ** might refer to an result-set alias. This happens, for example, when + ** we are resolving names in the WHERE clause of the following command: + ** + ** SELECT a+b AS x FROM table WHERE x<10; + ** + ** In cases like this, replace pExpr with a copy of the expression that + ** forms the result set entry ("a+b" in the example) and return immediately. + ** Note that the expression in the result set should have already been + ** resolved by the time the WHERE clause is resolved. + */ + if( cnt==0 && (pEList = pNC->pEList)!=0 && zTab==0 ){ + for(j=0; jnExpr; j++){ + char *zAs = pEList->a[j].zName; + if( zAs!=0 && sqlite3StrICmp(zAs, zCol)==0 ){ + Expr *pOrig; + assert( pExpr->pLeft==0 && pExpr->pRight==0 ); + assert( pExpr->x.pList==0 ); + assert( pExpr->x.pSelect==0 ); + pOrig = pEList->a[j].pExpr; + if( (pNC->ncFlags&NC_AllowAgg)==0 && ExprHasProperty(pOrig, EP_Agg) ){ + sqlite3ErrorMsg(pParse, "misuse of aliased aggregate %s", zAs); + return WRC_Abort; + } + resolveAlias(pParse, pEList, j, pExpr, ""); + cnt = 1; + pMatch = 0; + assert( zTab==0 && zDb==0 ); + goto lookupname_end; + } + } } - if( sqlite3FindIndex(db, zName, 0)!=0 && (iDb==0 || !db->init.busy) ){ - sqlite3ErrorMsg(pParse, "there is already an index named %s", zName); - goto begin_table_error; + + /* Advance to the next name context. The loop will exit when either + ** we have a match (cnt>0) or when we run out of name contexts. + */ + if( cnt==0 ){ + pNC = pNC->pNext; } } - pTable = sqlite3DbMallocZero(db, sizeof(Table)); - if( pTable==0 ){ - db->mallocFailed = 1; - pParse->rc = SQLITE_NOMEM; - pParse->nErr++; - goto begin_table_error; + /* + ** If X and Y are NULL (in other words if only the column name Z is + ** supplied) and the value of Z is enclosed in double-quotes, then + ** Z is a string literal if it doesn't match any column names. In that + ** case, we need to return right away and not make any changes to + ** pExpr. + ** + ** Because no reference was made to outer contexts, the pNC->nRef + ** fields are not changed in any context. + */ + if( cnt==0 && zTab==0 && ExprHasProperty(pExpr,EP_DblQuoted) ){ + pExpr->op = TK_STRING; + pExpr->pTab = 0; + return WRC_Prune; } - pTable->zName = zName; - pTable->iPKey = -1; - pTable->pSchema = db->aDb[iDb].pSchema; - pTable->nRef = 1; - pTable->dbMem = 0; - assert( pParse->pNewTable==0 ); - pParse->pNewTable = pTable; - /* If this is the magic sqlite_sequence table used by autoincrement, - ** then record a pointer to this table in the main database structure - ** so that INSERT can find the table easily. + /* + ** cnt==0 means there was not match. cnt>1 means there were two or + ** more matches. Either way, we have an error. */ -#ifndef SQLITE_OMIT_AUTOINCREMENT - if( !pParse->nested && strcmp(zName, "sqlite_sequence")==0 ){ - pTable->pSchema->pSeqTab = pTable; + if( cnt!=1 ){ + const char *zErr; + zErr = cnt==0 ? "no such column" : "ambiguous column name"; + if( zDb ){ + sqlite3ErrorMsg(pParse, "%s: %s.%s.%s", zErr, zDb, zTab, zCol); + }else if( zTab ){ + sqlite3ErrorMsg(pParse, "%s: %s.%s", zErr, zTab, zCol); + }else{ + sqlite3ErrorMsg(pParse, "%s: %s", zErr, zCol); + } + pParse->checkSchema = 1; + pTopNC->nErr++; } -#endif - /* Begin generating the code that will insert the table record into - ** the SQLITE_MASTER table. Note in particular that we must go ahead - ** and allocate the record number for the table entry now. Before any - ** PRIMARY KEY or UNIQUE keywords are parsed. Those keywords will cause - ** indices to be created and the table record must come before the - ** indices. Hence, the record number for the table must be allocated - ** now. + /* If a column from a table in pSrcList is referenced, then record + ** this fact in the pSrcList.a[].colUsed bitmask. Column 0 causes + ** bit 0 to be set. Column 1 sets bit 1. And so forth. If the + ** column number is greater than the number of bits in the bitmask + ** then set the high-order bit of the bitmask. */ - if( !db->init.busy && (v = sqlite3GetVdbe(pParse))!=0 ){ - int j1; - int fileFormat; - int reg1, reg2, reg3; - sqlite3BeginWriteOperation(pParse, 0, iDb); - -#ifndef SQLITE_OMIT_VIRTUALTABLE - if( isVirtual ){ - sqlite3VdbeAddOp0(v, OP_VBegin); + if( pExpr->iColumn>=0 && pMatch!=0 ){ + int n = pExpr->iColumn; + testcase( n==BMS-1 ); + if( n>=BMS ){ + n = BMS-1; } -#endif - - /* If the file format and encoding in the database have not been set, - ** set them now. - */ - reg1 = pParse->regRowid = ++pParse->nMem; - reg2 = pParse->regRoot = ++pParse->nMem; - reg3 = ++pParse->nMem; - sqlite3VdbeAddOp3(v, OP_ReadCookie, iDb, reg3, BTREE_FILE_FORMAT); - sqlite3VdbeUsesBtree(v, iDb); - j1 = sqlite3VdbeAddOp1(v, OP_If, reg3); - fileFormat = (db->flags & SQLITE_LegacyFileFmt)!=0 ? - 1 : SQLITE_MAX_FILE_FORMAT; - sqlite3VdbeAddOp2(v, OP_Integer, fileFormat, reg3); - sqlite3VdbeAddOp3(v, OP_SetCookie, iDb, BTREE_FILE_FORMAT, reg3); - sqlite3VdbeAddOp2(v, OP_Integer, ENC(db), reg3); - sqlite3VdbeAddOp3(v, OP_SetCookie, iDb, BTREE_TEXT_ENCODING, reg3); - sqlite3VdbeJumpHere(v, j1); + assert( pMatch->iCursor==pExpr->iTable ); + pMatch->colUsed |= ((Bitmask)1)<regRowid. - ** The root page number of the new table is left in reg pParse->regRoot. - ** The rowid and root page number values are needed by the code that - ** sqlite3EndTable will generate. - */ -#if !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_VIRTUALTABLE) - if( isView || isVirtual ){ - sqlite3VdbeAddOp2(v, OP_Integer, 0, reg2); - }else -#endif - { - sqlite3VdbeAddOp2(v, OP_CreateTable, iDb, reg2); + /* Clean up and return + */ + sqlite3ExprDelete(db, pExpr->pLeft); + pExpr->pLeft = 0; + sqlite3ExprDelete(db, pExpr->pRight); + pExpr->pRight = 0; + pExpr->op = (isTrigger ? TK_TRIGGER : TK_COLUMN); +lookupname_end: + if( cnt==1 ){ + assert( pNC!=0 ); + sqlite3AuthRead(pParse, pExpr, pSchema, pNC->pSrcList); + /* Increment the nRef value on all name contexts from TopNC up to + ** the point where the name matched. */ + for(;;){ + assert( pTopNC!=0 ); + pTopNC->nRef++; + if( pTopNC==pNC ) break; + pTopNC = pTopNC->pNext; } - sqlite3OpenMasterTable(pParse, iDb); - sqlite3VdbeAddOp2(v, OP_NewRowid, 0, reg1); - sqlite3VdbeAddOp2(v, OP_Null, 0, reg3); - sqlite3VdbeAddOp3(v, OP_Insert, 0, reg3, reg1); - sqlite3VdbeChangeP5(v, OPFLAG_APPEND); - sqlite3VdbeAddOp0(v, OP_Close); + return WRC_Prune; + } else { + return WRC_Abort; } +} - /* Normal (non-error) return. */ - return; - - /* If an error occurs, we jump here */ -begin_table_error: - sqlite3DbFree(db, zName); - return; +/* +** Allocate and return a pointer to an expression to load the column iCol +** from datasource iSrc in SrcList pSrc. +*/ +SQLITE_PRIVATE Expr *sqlite3CreateColumnExpr(sqlite3 *db, SrcList *pSrc, int iSrc, int iCol){ + Expr *p = sqlite3ExprAlloc(db, TK_COLUMN, 0, 0); + if( p ){ + struct SrcList_item *pItem = &pSrc->a[iSrc]; + p->pTab = pItem->pTab; + p->iTable = pItem->iCursor; + if( p->pTab->iPKey==iCol ){ + p->iColumn = -1; + }else{ + p->iColumn = (ynVar)iCol; + testcase( iCol==BMS ); + testcase( iCol==BMS-1 ); + pItem->colUsed |= ((Bitmask)1)<<(iCol>=BMS ? BMS-1 : iCol); + } + ExprSetProperty(p, EP_Resolved); + } + return p; } /* -** This macro is used to compare two strings in a case-insensitive manner. -** It is slightly faster than calling sqlite3StrICmp() directly, but -** produces larger code. +** This routine is callback for sqlite3WalkExpr(). ** -** WARNING: This macro is not compatible with the strcmp() family. It -** returns true if the two strings are equal, otherwise false. -*/ -#define STRICMP(x, y) (\ -sqlite3UpperToLower[*(unsigned char *)(x)]== \ -sqlite3UpperToLower[*(unsigned char *)(y)] \ -&& sqlite3StrICmp((x)+1,(y)+1)==0 ) - -/* -** Add a new column to the table currently being constructed. +** Resolve symbolic names into TK_COLUMN operators for the current +** node in the expression tree. Return 0 to continue the search down +** the tree or 2 to abort the tree walk. ** -** The parser calls this routine once for each column declaration -** in a CREATE TABLE statement. sqlite3StartTable() gets called -** first to get things going. Then this routine is called for each -** column. +** This routine also does error checking and name resolution for +** function names. The operator for aggregate functions is changed +** to TK_AGG_FUNCTION. */ -SQLITE_PRIVATE void sqlite3AddColumn(Parse *pParse, Token *pName){ - Table *p; - int i; - char *z; - Column *pCol; - sqlite3 *db = pParse->db; - if( (p = pParse->pNewTable)==0 ) return; -#if SQLITE_MAX_COLUMN - if( p->nCol+1>db->aLimit[SQLITE_LIMIT_COLUMN] ){ - sqlite3ErrorMsg(pParse, "too many columns on %s", p->zName); - return; +static int resolveExprStep(Walker *pWalker, Expr *pExpr){ + NameContext *pNC; + Parse *pParse; + + pNC = pWalker->u.pNC; + assert( pNC!=0 ); + pParse = pNC->pParse; + assert( pParse==pWalker->pParse ); + + if( ExprHasAnyProperty(pExpr, EP_Resolved) ) return WRC_Prune; + ExprSetProperty(pExpr, EP_Resolved); +#ifndef NDEBUG + if( pNC->pSrcList && pNC->pSrcList->nAlloc>0 ){ + SrcList *pSrcList = pNC->pSrcList; + int i; + for(i=0; ipSrcList->nSrc; i++){ + assert( pSrcList->a[i].iCursor>=0 && pSrcList->a[i].iCursornTab); + } } #endif - z = sqlite3NameFromToken(db, pName); - if( z==0 ) return; - for(i=0; inCol; i++){ - if( STRICMP(z, p->aCol[i].zName) ){ - sqlite3ErrorMsg(pParse, "duplicate column name: %s", z); - sqlite3DbFree(db, z); - return; + switch( pExpr->op ){ + +#if defined(SQLITE_ENABLE_UPDATE_DELETE_LIMIT) && !defined(SQLITE_OMIT_SUBQUERY) + /* The special operator TK_ROW means use the rowid for the first + ** column in the FROM clause. This is used by the LIMIT and ORDER BY + ** clause processing on UPDATE and DELETE statements. + */ + case TK_ROW: { + SrcList *pSrcList = pNC->pSrcList; + struct SrcList_item *pItem; + assert( pSrcList && pSrcList->nSrc==1 ); + pItem = pSrcList->a; + pExpr->op = TK_COLUMN; + pExpr->pTab = pItem->pTab; + pExpr->iTable = pItem->iCursor; + pExpr->iColumn = -1; + pExpr->affinity = SQLITE_AFF_INTEGER; + break; } - } - if( (p->nCol & 0x7)==0 ){ - Column *aNew; - aNew = sqlite3DbRealloc(db,p->aCol,(p->nCol+8)*sizeof(p->aCol[0])); - if( aNew==0 ){ - sqlite3DbFree(db, z); - return; +#endif /* defined(SQLITE_ENABLE_UPDATE_DELETE_LIMIT) && !defined(SQLITE_OMIT_SUBQUERY) */ + + /* A lone identifier is the name of a column. + */ + case TK_ID: { + return lookupName(pParse, 0, 0, pExpr->u.zToken, pNC, pExpr); } - p->aCol = aNew; - } - pCol = &p->aCol[p->nCol]; - memset(pCol, 0, sizeof(p->aCol[0])); - pCol->zName = z; - - /* If there is no type specified, columns have the default affinity - ** 'NONE'. If there is a type specified, then sqlite3AddColumnType() will - ** be called next to set pCol->affinity correctly. - */ - pCol->affinity = SQLITE_AFF_NONE; - p->nCol++; -} + + /* A table name and column name: ID.ID + ** Or a database, table and column: ID.ID.ID + */ + case TK_DOT: { + const char *zColumn; + const char *zTable; + const char *zDb; + Expr *pRight; -/* -** This routine is called by the parser while in the middle of -** parsing a CREATE TABLE statement. A "NOT NULL" constraint has -** been seen on a column. This routine sets the notNull flag on -** the column currently under construction. -*/ -SQLITE_PRIVATE void sqlite3AddNotNull(Parse *pParse, int onError){ - Table *p; - p = pParse->pNewTable; - if( p==0 || NEVER(p->nCol<1) ) return; - p->aCol[p->nCol-1].notNull = (u8)onError; -} + /* if( pSrcList==0 ) break; */ + pRight = pExpr->pRight; + if( pRight->op==TK_ID ){ + zDb = 0; + zTable = pExpr->pLeft->u.zToken; + zColumn = pRight->u.zToken; + }else{ + assert( pRight->op==TK_DOT ); + zDb = pExpr->pLeft->u.zToken; + zTable = pRight->pLeft->u.zToken; + zColumn = pRight->pRight->u.zToken; + } + return lookupName(pParse, zDb, zTable, zColumn, pNC, pExpr); + } -/* -** Scan the column type name zType (length nType) and return the -** associated affinity type. -** -** This routine does a case-independent search of zType for the -** substrings in the following table. If one of the substrings is -** found, the corresponding affinity is returned. If zType contains -** more than one of the substrings, entries toward the top of -** the table take priority. For example, if zType is 'BLOBINT', -** SQLITE_AFF_INTEGER is returned. -** -** Substring | Affinity -** -------------------------------- -** 'INT' | SQLITE_AFF_INTEGER -** 'CHAR' | SQLITE_AFF_TEXT -** 'CLOB' | SQLITE_AFF_TEXT -** 'TEXT' | SQLITE_AFF_TEXT -** 'BLOB' | SQLITE_AFF_NONE -** 'REAL' | SQLITE_AFF_REAL -** 'FLOA' | SQLITE_AFF_REAL -** 'DOUB' | SQLITE_AFF_REAL -** -** If none of the substrings in the above table are found, -** SQLITE_AFF_NUMERIC is returned. -*/ -SQLITE_PRIVATE char sqlite3AffinityType(const char *zIn){ - u32 h = 0; - char aff = SQLITE_AFF_NUMERIC; + /* Resolve function names + */ + case TK_CONST_FUNC: + case TK_FUNCTION: { + ExprList *pList = pExpr->x.pList; /* The argument list */ + int n = pList ? pList->nExpr : 0; /* Number of arguments */ + int no_such_func = 0; /* True if no such function exists */ + int wrong_num_args = 0; /* True if wrong number of arguments */ + int is_agg = 0; /* True if is an aggregate function */ + int auth; /* Authorization to use the function */ + int nId; /* Number of characters in function name */ + const char *zId; /* The function name. */ + FuncDef *pDef; /* Information about the function */ + u8 enc = ENC(pParse->db); /* The database encoding */ - if( zIn ) while( zIn[0] ){ - h = (h<<8) + sqlite3UpperToLower[(*zIn)&0xff]; - zIn++; - if( h==(('c'<<24)+('h'<<16)+('a'<<8)+'r') ){ /* CHAR */ - aff = SQLITE_AFF_TEXT; - }else if( h==(('c'<<24)+('l'<<16)+('o'<<8)+'b') ){ /* CLOB */ - aff = SQLITE_AFF_TEXT; - }else if( h==(('t'<<24)+('e'<<16)+('x'<<8)+'t') ){ /* TEXT */ - aff = SQLITE_AFF_TEXT; - }else if( h==(('b'<<24)+('l'<<16)+('o'<<8)+'b') /* BLOB */ - && (aff==SQLITE_AFF_NUMERIC || aff==SQLITE_AFF_REAL) ){ - aff = SQLITE_AFF_NONE; -#ifndef SQLITE_OMIT_FLOATING_POINT - }else if( h==(('r'<<24)+('e'<<16)+('a'<<8)+'l') /* REAL */ - && aff==SQLITE_AFF_NUMERIC ){ - aff = SQLITE_AFF_REAL; - }else if( h==(('f'<<24)+('l'<<16)+('o'<<8)+'a') /* FLOA */ - && aff==SQLITE_AFF_NUMERIC ){ - aff = SQLITE_AFF_REAL; - }else if( h==(('d'<<24)+('o'<<16)+('u'<<8)+'b') /* DOUB */ - && aff==SQLITE_AFF_NUMERIC ){ - aff = SQLITE_AFF_REAL; + testcase( pExpr->op==TK_CONST_FUNC ); + assert( !ExprHasProperty(pExpr, EP_xIsSelect) ); + zId = pExpr->u.zToken; + nId = sqlite3Strlen30(zId); + pDef = sqlite3FindFunction(pParse->db, zId, nId, n, enc, 0); + if( pDef==0 ){ + pDef = sqlite3FindFunction(pParse->db, zId, nId, -2, enc, 0); + if( pDef==0 ){ + no_such_func = 1; + }else{ + wrong_num_args = 1; + } + }else{ + is_agg = pDef->xFunc==0; + } +#ifndef SQLITE_OMIT_AUTHORIZATION + if( pDef ){ + auth = sqlite3AuthCheck(pParse, SQLITE_FUNCTION, 0, pDef->zName, 0); + if( auth!=SQLITE_OK ){ + if( auth==SQLITE_DENY ){ + sqlite3ErrorMsg(pParse, "not authorized to use function: %s", + pDef->zName); + pNC->nErr++; + } + pExpr->op = TK_NULL; + return WRC_Prune; + } + } #endif - }else if( (h&0x00FFFFFF)==(('i'<<16)+('n'<<8)+'t') ){ /* INT */ - aff = SQLITE_AFF_INTEGER; + if( is_agg && (pNC->ncFlags & NC_AllowAgg)==0 ){ + sqlite3ErrorMsg(pParse, "misuse of aggregate function %.*s()", nId,zId); + pNC->nErr++; + is_agg = 0; + }else if( no_such_func ){ + sqlite3ErrorMsg(pParse, "no such function: %.*s", nId, zId); + pNC->nErr++; + }else if( wrong_num_args ){ + sqlite3ErrorMsg(pParse,"wrong number of arguments to function %.*s()", + nId, zId); + pNC->nErr++; + } + if( is_agg ){ + pExpr->op = TK_AGG_FUNCTION; + pNC->ncFlags |= NC_HasAgg; + } + if( is_agg ) pNC->ncFlags &= ~NC_AllowAgg; + sqlite3WalkExprList(pWalker, pList); + if( is_agg ) pNC->ncFlags |= NC_AllowAgg; + /* FIX ME: Compute pExpr->affinity based on the expected return + ** type of the function + */ + return WRC_Prune; + } +#ifndef SQLITE_OMIT_SUBQUERY + case TK_SELECT: + case TK_EXISTS: testcase( pExpr->op==TK_EXISTS ); +#endif + case TK_IN: { + testcase( pExpr->op==TK_IN ); + if( ExprHasProperty(pExpr, EP_xIsSelect) ){ + int nRef = pNC->nRef; +#ifndef SQLITE_OMIT_CHECK + if( (pNC->ncFlags & NC_IsCheck)!=0 ){ + sqlite3ErrorMsg(pParse,"subqueries prohibited in CHECK constraints"); + } +#endif + sqlite3WalkSelect(pWalker, pExpr->x.pSelect); + assert( pNC->nRef>=nRef ); + if( nRef!=pNC->nRef ){ + ExprSetProperty(pExpr, EP_VarSelect); + } + } break; } +#ifndef SQLITE_OMIT_CHECK + case TK_VARIABLE: { + if( (pNC->ncFlags & NC_IsCheck)!=0 ){ + sqlite3ErrorMsg(pParse,"parameters prohibited in CHECK constraints"); + } + break; + } +#endif } - - return aff; -} - -/* -** This routine is called by the parser while in the middle of -** parsing a CREATE TABLE statement. The pFirst token is the first -** token in the sequence of tokens that describe the type of the -** column currently under construction. pLast is the last token -** in the sequence. Use this information to construct a string -** that contains the typename of the column and store that string -** in zType. -*/ -SQLITE_PRIVATE void sqlite3AddColumnType(Parse *pParse, Token *pType){ - Table *p; - Column *pCol; - - p = pParse->pNewTable; - if( p==0 || NEVER(p->nCol<1) ) return; - pCol = &p->aCol[p->nCol-1]; - assert( pCol->zType==0 ); - pCol->zType = sqlite3NameFromToken(pParse->db, pType); - pCol->affinity = sqlite3AffinityType(pCol->zType); + return (pParse->nErr || pParse->db->mallocFailed) ? WRC_Abort : WRC_Continue; } /* -** The expression is the default value for the most recently added column -** of the table currently under construction. -** -** Default value expressions must be constant. Raise an exception if this -** is not the case. +** pEList is a list of expressions which are really the result set of the +** a SELECT statement. pE is a term in an ORDER BY or GROUP BY clause. +** This routine checks to see if pE is a simple identifier which corresponds +** to the AS-name of one of the terms of the expression list. If it is, +** this routine return an integer between 1 and N where N is the number of +** elements in pEList, corresponding to the matching entry. If there is +** no match, or if pE is not a simple identifier, then this routine +** return 0. ** -** This routine is called by the parser while in the middle of -** parsing a CREATE TABLE statement. +** pEList has been resolved. pE has not. */ -SQLITE_PRIVATE void sqlite3AddDefaultValue(Parse *pParse, ExprSpan *pSpan){ - Table *p; - Column *pCol; - sqlite3 *db = pParse->db; - p = pParse->pNewTable; - if( p!=0 ){ - pCol = &(p->aCol[p->nCol-1]); - if( !sqlite3ExprIsConstantOrFunction(pSpan->pExpr) ){ - sqlite3ErrorMsg(pParse, "default value of column [%s] is not constant", - pCol->zName); - }else{ - /* A copy of pExpr is used instead of the original, as pExpr contains - ** tokens that point to volatile memory. The 'span' of the expression - ** is required by pragma table_info. - */ - sqlite3ExprDelete(db, pCol->pDflt); - pCol->pDflt = sqlite3ExprDup(db, pSpan->pExpr, EXPRDUP_REDUCE); - sqlite3DbFree(db, pCol->zDflt); - pCol->zDflt = sqlite3DbStrNDup(db, (char*)pSpan->zStart, - (int)(pSpan->zEnd - pSpan->zStart)); +static int resolveAsName( + Parse *pParse, /* Parsing context for error messages */ + ExprList *pEList, /* List of expressions to scan */ + Expr *pE /* Expression we are trying to match */ +){ + int i; /* Loop counter */ + + UNUSED_PARAMETER(pParse); + + if( pE->op==TK_ID ){ + char *zCol = pE->u.zToken; + for(i=0; inExpr; i++){ + char *zAs = pEList->a[i].zName; + if( zAs!=0 && sqlite3StrICmp(zAs, zCol)==0 ){ + return i+1; + } } } - sqlite3ExprDelete(db, pSpan->pExpr); + return 0; } /* -** Designate the PRIMARY KEY for the table. pList is a list of names -** of columns that form the primary key. If pList is NULL, then the -** most recently added column of the table is the primary key. +** pE is a pointer to an expression which is a single term in the +** ORDER BY of a compound SELECT. The expression has not been +** name resolved. ** -** A table can have at most one primary key. If the table already has -** a primary key (and this is the second primary key) then create an -** error. +** At the point this routine is called, we already know that the +** ORDER BY term is not an integer index into the result set. That +** case is handled by the calling routine. ** -** If the PRIMARY KEY is on a single column whose datatype is INTEGER, -** then we will try to use that column as the rowid. Set the Table.iPKey -** field of the table under construction to be the index of the -** INTEGER PRIMARY KEY column. Table.iPKey is set to -1 if there is -** no INTEGER PRIMARY KEY. +** Attempt to match pE against result set columns in the left-most +** SELECT statement. Return the index i of the matching column, +** as an indication to the caller that it should sort by the i-th column. +** The left-most column is 1. In other words, the value returned is the +** same integer value that would be used in the SQL statement to indicate +** the column. ** -** If the key is not an INTEGER PRIMARY KEY, then create a unique -** index for the key. No index is created for INTEGER PRIMARY KEYs. +** If there is no match, return 0. Return -1 if an error occurs. */ -SQLITE_PRIVATE void sqlite3AddPrimaryKey( - Parse *pParse, /* Parsing context */ - ExprList *pList, /* List of field names to be indexed */ - int onError, /* What to do with a uniqueness conflict */ - int autoInc, /* True if the AUTOINCREMENT keyword is present */ - int sortOrder /* SQLITE_SO_ASC or SQLITE_SO_DESC */ +static int resolveOrderByTermToExprList( + Parse *pParse, /* Parsing context for error messages */ + Select *pSelect, /* The SELECT statement with the ORDER BY clause */ + Expr *pE /* The specific ORDER BY term */ ){ - Table *pTab = pParse->pNewTable; - char *zType = 0; - int iCol = -1, i; - if( pTab==0 || IN_DECLARE_VTAB ) goto primary_key_exit; - if( pTab->tabFlags & TF_HasPrimaryKey ){ - sqlite3ErrorMsg(pParse, - "table \"%s\" has more than one primary key", pTab->zName); - goto primary_key_exit; - } - pTab->tabFlags |= TF_HasPrimaryKey; - if( pList==0 ){ - iCol = pTab->nCol - 1; - pTab->aCol[iCol].isPrimKey = 1; - }else{ - for(i=0; inExpr; i++){ - for(iCol=0; iColnCol; iCol++){ - if( sqlite3StrICmp(pList->a[i].zName, pTab->aCol[iCol].zName)==0 ){ - break; - } - } - if( iColnCol ){ - pTab->aCol[iCol].isPrimKey = 1; - } + int i; /* Loop counter */ + ExprList *pEList; /* The columns of the result set */ + NameContext nc; /* Name context for resolving pE */ + sqlite3 *db; /* Database connection */ + int rc; /* Return code from subprocedures */ + u8 savedSuppErr; /* Saved value of db->suppressErr */ + + assert( sqlite3ExprIsInteger(pE, &i)==0 ); + pEList = pSelect->pEList; + + /* Resolve all names in the ORDER BY term expression + */ + memset(&nc, 0, sizeof(nc)); + nc.pParse = pParse; + nc.pSrcList = pSelect->pSrc; + nc.pEList = pEList; + nc.ncFlags = NC_AllowAgg; + nc.nErr = 0; + db = pParse->db; + savedSuppErr = db->suppressErr; + db->suppressErr = 1; + rc = sqlite3ResolveExprNames(&nc, pE); + db->suppressErr = savedSuppErr; + if( rc ) return 0; + + /* Try to match the ORDER BY expression against an expression + ** in the result set. Return an 1-based index of the matching + ** result-set entry. + */ + for(i=0; inExpr; i++){ + if( sqlite3ExprCompare(pEList->a[i].pExpr, pE)<2 ){ + return i+1; } - if( pList->nExpr>1 ) iCol = -1; - } - if( iCol>=0 && iColnCol ){ - zType = pTab->aCol[iCol].zType; - } - if( zType && sqlite3StrICmp(zType, "INTEGER")==0 - && sortOrder==SQLITE_SO_ASC ){ - pTab->iPKey = iCol; - pTab->keyConf = (u8)onError; - assert( autoInc==0 || autoInc==1 ); - pTab->tabFlags |= autoInc*TF_Autoincrement; - }else if( autoInc ){ -#ifndef SQLITE_OMIT_AUTOINCREMENT - sqlite3ErrorMsg(pParse, "AUTOINCREMENT is only allowed on an " - "INTEGER PRIMARY KEY"); -#endif - }else{ - sqlite3CreateIndex(pParse, 0, 0, 0, pList, onError, 0, 0, sortOrder, 0); - pList = 0; } -primary_key_exit: - sqlite3ExprListDelete(pParse->db, pList); - return; + /* If no match, return 0. */ + return 0; } /* -** Add a new CHECK constraint to the table currently under construction. +** Generate an ORDER BY or GROUP BY term out-of-range error. */ -SQLITE_PRIVATE void sqlite3AddCheckConstraint( - Parse *pParse, /* Parsing context */ - Expr *pCheckExpr /* The check expression */ +static void resolveOutOfRangeError( + Parse *pParse, /* The error context into which to write the error */ + const char *zType, /* "ORDER" or "GROUP" */ + int i, /* The index (1-based) of the term out of range */ + int mx /* Largest permissible value of i */ ){ - sqlite3 *db = pParse->db; -#ifndef SQLITE_OMIT_CHECK - Table *pTab = pParse->pNewTable; - if( pTab && !IN_DECLARE_VTAB ){ - pTab->pCheck = sqlite3ExprAnd(db, pTab->pCheck, pCheckExpr); - }else -#endif - { - sqlite3ExprDelete(db, pCheckExpr); - } + sqlite3ErrorMsg(pParse, + "%r %s BY term out of range - should be " + "between 1 and %d", i, zType, mx); } /* -** Set the collation function of the most recently parsed table column -** to the CollSeq given. +** Analyze the ORDER BY clause in a compound SELECT statement. Modify +** each term of the ORDER BY clause is a constant integer between 1 +** and N where N is the number of columns in the compound SELECT. +** +** ORDER BY terms that are already an integer between 1 and N are +** unmodified. ORDER BY terms that are integers outside the range of +** 1 through N generate an error. ORDER BY terms that are expressions +** are matched against result set expressions of compound SELECT +** beginning with the left-most SELECT and working toward the right. +** At the first match, the ORDER BY expression is transformed into +** the integer column number. +** +** Return the number of errors seen. */ -SQLITE_PRIVATE void sqlite3AddCollateType(Parse *pParse, Token *pToken){ - Table *p; +static int resolveCompoundOrderBy( + Parse *pParse, /* Parsing context. Leave error messages here */ + Select *pSelect /* The SELECT statement containing the ORDER BY */ +){ int i; - char *zColl; /* Dequoted name of collation sequence */ + ExprList *pOrderBy; + ExprList *pEList; sqlite3 *db; + int moreToDo = 1; - if( (p = pParse->pNewTable)==0 ) return; - i = p->nCol-1; + pOrderBy = pSelect->pOrderBy; + if( pOrderBy==0 ) return 0; db = pParse->db; - zColl = sqlite3NameFromToken(db, pToken); - if( !zColl ) return; - - if( sqlite3LocateCollSeq(pParse, zColl) ){ - Index *pIdx; - p->aCol[i].zColl = zColl; - - /* If the column is declared as " PRIMARY KEY COLLATE ", - ** then an index may have been created on this column before the - ** collation type was added. Correct this if it is the case. - */ - for(pIdx=p->pIndex; pIdx; pIdx=pIdx->pNext){ - assert( pIdx->nColumn==1 ); - if( pIdx->aiColumn[0]==i ){ - pIdx->azColl[0] = p->aCol[i].zColl; +#if SQLITE_MAX_COLUMN + if( pOrderBy->nExpr>db->aLimit[SQLITE_LIMIT_COLUMN] ){ + sqlite3ErrorMsg(pParse, "too many terms in ORDER BY clause"); + return 1; + } +#endif + for(i=0; inExpr; i++){ + pOrderBy->a[i].done = 0; + } + pSelect->pNext = 0; + while( pSelect->pPrior ){ + pSelect->pPrior->pNext = pSelect; + pSelect = pSelect->pPrior; + } + while( pSelect && moreToDo ){ + struct ExprList_item *pItem; + moreToDo = 0; + pEList = pSelect->pEList; + assert( pEList!=0 ); + for(i=0, pItem=pOrderBy->a; inExpr; i++, pItem++){ + int iCol = -1; + Expr *pE, *pDup; + if( pItem->done ) continue; + pE = pItem->pExpr; + if( sqlite3ExprIsInteger(pE, &iCol) ){ + if( iCol<=0 || iCol>pEList->nExpr ){ + resolveOutOfRangeError(pParse, "ORDER", i+1, pEList->nExpr); + return 1; + } + }else{ + iCol = resolveAsName(pParse, pEList, pE); + if( iCol==0 ){ + pDup = sqlite3ExprDup(db, pE, 0); + if( !db->mallocFailed ){ + assert(pDup); + iCol = resolveOrderByTermToExprList(pParse, pSelect, pDup); + } + sqlite3ExprDelete(db, pDup); + } + } + if( iCol>0 ){ + CollSeq *pColl = pE->pColl; + int flags = pE->flags & EP_ExpCollate; + sqlite3ExprDelete(db, pE); + pItem->pExpr = pE = sqlite3Expr(db, TK_INTEGER, 0); + if( pE==0 ) return 1; + pE->pColl = pColl; + pE->flags |= EP_IntValue | flags; + pE->u.iValue = iCol; + pItem->iOrderByCol = (u16)iCol; + pItem->done = 1; + }else{ + moreToDo = 1; } } - }else{ - sqlite3DbFree(db, zColl); + pSelect = pSelect->pNext; + } + for(i=0; inExpr; i++){ + if( pOrderBy->a[i].done==0 ){ + sqlite3ErrorMsg(pParse, "%r ORDER BY term does not match any " + "column in the result set", i+1); + return 1; + } } + return 0; } /* -** This function returns the collation sequence for database native text -** encoding identified by the string zName, length nName. -** -** If the requested collation sequence is not available, or not available -** in the database native encoding, the collation factory is invoked to -** request it. If the collation factory does not supply such a sequence, -** and the sequence is available in another text encoding, then that is -** returned instead. -** -** If no versions of the requested collations sequence are available, or -** another error occurs, NULL is returned and an error message written into -** pParse. -** -** This routine is a wrapper around sqlite3FindCollSeq(). This routine -** invokes the collation factory if the named collation cannot be found -** and generates an error message. +** Check every term in the ORDER BY or GROUP BY clause pOrderBy of +** the SELECT statement pSelect. If any term is reference to a +** result set expression (as determined by the ExprList.a.iCol field) +** then convert that term into a copy of the corresponding result set +** column. ** -** See also: sqlite3FindCollSeq(), sqlite3GetCollSeq() +** If any errors are detected, add an error message to pParse and +** return non-zero. Return zero if no errors are seen. */ -SQLITE_PRIVATE CollSeq *sqlite3LocateCollSeq(Parse *pParse, const char *zName){ +SQLITE_PRIVATE int sqlite3ResolveOrderGroupBy( + Parse *pParse, /* Parsing context. Leave error messages here */ + Select *pSelect, /* The SELECT statement containing the clause */ + ExprList *pOrderBy, /* The ORDER BY or GROUP BY clause to be processed */ + const char *zType /* "ORDER" or "GROUP" */ +){ + int i; sqlite3 *db = pParse->db; - u8 enc = ENC(db); - u8 initbusy = db->init.busy; - CollSeq *pColl; + ExprList *pEList; + struct ExprList_item *pItem; - pColl = sqlite3FindCollSeq(db, enc, zName, initbusy); - if( !initbusy && (!pColl || !pColl->xCmp) ){ - pColl = sqlite3GetCollSeq(db, pColl, zName); - if( !pColl ){ - sqlite3ErrorMsg(pParse, "no such collation sequence: %s", zName); + if( pOrderBy==0 || pParse->db->mallocFailed ) return 0; +#if SQLITE_MAX_COLUMN + if( pOrderBy->nExpr>db->aLimit[SQLITE_LIMIT_COLUMN] ){ + sqlite3ErrorMsg(pParse, "too many terms in %s BY clause", zType); + return 1; + } +#endif + pEList = pSelect->pEList; + assert( pEList!=0 ); /* sqlite3SelectNew() guarantees this */ + for(i=0, pItem=pOrderBy->a; inExpr; i++, pItem++){ + if( pItem->iOrderByCol ){ + if( pItem->iOrderByCol>pEList->nExpr ){ + resolveOutOfRangeError(pParse, zType, i+1, pEList->nExpr); + return 1; + } + resolveAlias(pParse, pEList, pItem->iOrderByCol-1, pItem->pExpr, zType); } } - - return pColl; + return 0; } - /* -** Generate code that will increment the schema cookie. -** -** The schema cookie is used to determine when the schema for the -** database changes. After each schema change, the cookie value -** changes. When a process first reads the schema it records the -** cookie. Thereafter, whenever it goes to access the database, -** it checks the cookie to make sure the schema has not changed -** since it was last read. +** pOrderBy is an ORDER BY or GROUP BY clause in SELECT statement pSelect. +** The Name context of the SELECT statement is pNC. zType is either +** "ORDER" or "GROUP" depending on which type of clause pOrderBy is. ** -** This plan is not completely bullet-proof. It is possible for -** the schema to change multiple times and for the cookie to be -** set back to prior value. But schema changes are infrequent -** and the probability of hitting the same cookie value is only -** 1 chance in 2^32. So we're safe enough. -*/ -SQLITE_PRIVATE void sqlite3ChangeCookie(Parse *pParse, int iDb){ - int r1 = sqlite3GetTempReg(pParse); - sqlite3 *db = pParse->db; - Vdbe *v = pParse->pVdbe; - sqlite3VdbeAddOp2(v, OP_Integer, db->aDb[iDb].pSchema->schema_cookie+1, r1); - sqlite3VdbeAddOp3(v, OP_SetCookie, iDb, BTREE_SCHEMA_VERSION, r1); - sqlite3ReleaseTempReg(pParse, r1); -} - -/* -** Measure the number of characters needed to output the given -** identifier. The number returned includes any quotes used -** but does not include the null terminator. +** This routine resolves each term of the clause into an expression. +** If the order-by term is an integer I between 1 and N (where N is the +** number of columns in the result set of the SELECT) then the expression +** in the resolution is a copy of the I-th result-set expression. If +** the order-by term is an identify that corresponds to the AS-name of +** a result-set expression, then the term resolves to a copy of the +** result-set expression. Otherwise, the expression is resolved in +** the usual way - using sqlite3ResolveExprNames(). ** -** The estimate is conservative. It might be larger that what is -** really needed. -*/ -static int identLength(const char *z){ - int n; - for(n=0; *z; n++, z++){ - if( *z=='"' ){ n++; } - } - return n + 2; -} - -/* -** The first parameter is a pointer to an output buffer. The second -** parameter is a pointer to an integer that contains the offset at -** which to write into the output buffer. This function copies the -** nul-terminated string pointed to by the third parameter, zSignedIdent, -** to the specified offset in the buffer and updates *pIdx to refer -** to the first byte after the last byte written before returning. -** -** If the string zSignedIdent consists entirely of alpha-numeric -** characters, does not begin with a digit and is not an SQL keyword, -** then it is copied to the output buffer exactly as it is. Otherwise, -** it is quoted using double-quotes. +** This routine returns the number of errors. If errors occur, then +** an appropriate error message might be left in pParse. (OOM errors +** excepted.) */ -static void identPut(char *z, int *pIdx, char *zSignedIdent){ - unsigned char *zIdent = (unsigned char*)zSignedIdent; - int i, j, needQuote; - i = *pIdx; +static int resolveOrderGroupBy( + NameContext *pNC, /* The name context of the SELECT statement */ + Select *pSelect, /* The SELECT statement holding pOrderBy */ + ExprList *pOrderBy, /* An ORDER BY or GROUP BY clause to resolve */ + const char *zType /* Either "ORDER" or "GROUP", as appropriate */ +){ + int i, j; /* Loop counters */ + int iCol; /* Column number */ + struct ExprList_item *pItem; /* A term of the ORDER BY clause */ + Parse *pParse; /* Parsing context */ + int nResult; /* Number of terms in the result set */ - for(j=0; zIdent[j]; j++){ - if( !sqlite3Isalnum(zIdent[j]) && zIdent[j]!='_' ) break; - } - needQuote = sqlite3Isdigit(zIdent[0]) || sqlite3KeywordCode(zIdent, j)!=TK_ID; - if( !needQuote ){ - needQuote = zIdent[j]; - } + if( pOrderBy==0 ) return 0; + nResult = pSelect->pEList->nExpr; + pParse = pNC->pParse; + for(i=0, pItem=pOrderBy->a; inExpr; i++, pItem++){ + Expr *pE = pItem->pExpr; + iCol = resolveAsName(pParse, pSelect->pEList, pE); + if( iCol>0 ){ + /* If an AS-name match is found, mark this ORDER BY column as being + ** a copy of the iCol-th result-set column. The subsequent call to + ** sqlite3ResolveOrderGroupBy() will convert the expression to a + ** copy of the iCol-th result-set expression. */ + pItem->iOrderByCol = (u16)iCol; + continue; + } + if( sqlite3ExprIsInteger(pE, &iCol) ){ + /* The ORDER BY term is an integer constant. Again, set the column + ** number so that sqlite3ResolveOrderGroupBy() will convert the + ** order-by term to a copy of the result-set expression */ + if( iCol<1 ){ + resolveOutOfRangeError(pParse, zType, i+1, nResult); + return 1; + } + pItem->iOrderByCol = (u16)iCol; + continue; + } - if( needQuote ) z[i++] = '"'; - for(j=0; zIdent[j]; j++){ - z[i++] = zIdent[j]; - if( zIdent[j]=='"' ) z[i++] = '"'; + /* Otherwise, treat the ORDER BY term as an ordinary expression */ + pItem->iOrderByCol = 0; + if( sqlite3ResolveExprNames(pNC, pE) ){ + return 1; + } + for(j=0; jpEList->nExpr; j++){ + if( sqlite3ExprCompare(pE, pSelect->pEList->a[j].pExpr)==0 ){ + pItem->iOrderByCol = j+1; + } + } } - if( needQuote ) z[i++] = '"'; - z[i] = 0; - *pIdx = i; + return sqlite3ResolveOrderGroupBy(pParse, pSelect, pOrderBy, zType); } /* -** Generate a CREATE TABLE statement appropriate for the given -** table. Memory to hold the text of the statement is obtained -** from sqliteMalloc() and must be freed by the calling function. +** Resolve names in the SELECT statement p and all of its descendents. */ -static char *createTableStmt(sqlite3 *db, Table *p){ - int i, k, n; - char *zStmt; - char *zSep, *zSep2, *zEnd; - Column *pCol; - n = 0; - for(pCol = p->aCol, i=0; inCol; i++, pCol++){ - n += identLength(pCol->zName) + 5; - } - n += identLength(p->zName); - if( n<50 ){ - zSep = ""; - zSep2 = ","; - zEnd = ")"; - }else{ - zSep = "\n "; - zSep2 = ",\n "; - zEnd = "\n)"; - } - n += 35 + 6*p->nCol; - zStmt = sqlite3Malloc( n ); - if( zStmt==0 ){ - db->mallocFailed = 1; - return 0; - } - sqlite3_snprintf(n, zStmt, "CREATE TABLE "); - k = sqlite3Strlen30(zStmt); - identPut(zStmt, &k, p->zName); - zStmt[k++] = '('; - for(pCol=p->aCol, i=0; inCol; i++, pCol++){ - static const char * const azType[] = { - /* SQLITE_AFF_TEXT */ " TEXT", - /* SQLITE_AFF_NONE */ "", - /* SQLITE_AFF_NUMERIC */ " NUM", - /* SQLITE_AFF_INTEGER */ " INT", - /* SQLITE_AFF_REAL */ " REAL" - }; - int len; - const char *zType; +static int resolveSelectStep(Walker *pWalker, Select *p){ + NameContext *pOuterNC; /* Context that contains this SELECT */ + NameContext sNC; /* Name context of this SELECT */ + int isCompound; /* True if p is a compound select */ + int nCompound; /* Number of compound terms processed so far */ + Parse *pParse; /* Parsing context */ + ExprList *pEList; /* Result set expression list */ + int i; /* Loop counter */ + ExprList *pGroupBy; /* The GROUP BY clause */ + Select *pLeftmost; /* Left-most of SELECT of a compound */ + sqlite3 *db; /* Database connection */ + - sqlite3_snprintf(n-k, &zStmt[k], zSep); - k += sqlite3Strlen30(&zStmt[k]); - zSep = zSep2; - identPut(zStmt, &k, pCol->zName); - assert( pCol->affinity-SQLITE_AFF_TEXT >= 0 ); - assert( pCol->affinity-SQLITE_AFF_TEXT < sizeof(azType)/sizeof(azType[0]) ); - testcase( pCol->affinity==SQLITE_AFF_TEXT ); - testcase( pCol->affinity==SQLITE_AFF_NONE ); - testcase( pCol->affinity==SQLITE_AFF_NUMERIC ); - testcase( pCol->affinity==SQLITE_AFF_INTEGER ); - testcase( pCol->affinity==SQLITE_AFF_REAL ); - - zType = azType[pCol->affinity - SQLITE_AFF_TEXT]; - len = sqlite3Strlen30(zType); - assert( pCol->affinity==SQLITE_AFF_NONE - || pCol->affinity==sqlite3AffinityType(zType) ); - memcpy(&zStmt[k], zType, len); - k += len; - assert( k<=n ); + assert( p!=0 ); + if( p->selFlags & SF_Resolved ){ + return WRC_Prune; } - sqlite3_snprintf(n-k, &zStmt[k], "%s", zEnd); - return zStmt; -} - -/* -** This routine is called to report the final ")" that terminates -** a CREATE TABLE statement. -** -** The table structure that other action routines have been building -** is added to the internal hash tables, assuming no errors have -** occurred. -** -** An entry for the table is made in the master table on disk, unless -** this is a temporary table or db->init.busy==1. When db->init.busy==1 -** it means we are reading the sqlite_master table because we just -** connected to the database or because the sqlite_master table has -** recently changed, so the entry for this table already exists in -** the sqlite_master table. We do not want to create it again. -** -** If the pSelect argument is not NULL, it means that this routine -** was called to create a table generated from a -** "CREATE TABLE ... AS SELECT ..." statement. The column names of -** the new table will match the result set of the SELECT. -*/ -SQLITE_PRIVATE void sqlite3EndTable( - Parse *pParse, /* Parse context */ - Token *pCons, /* The ',' token after the last column defn. */ - Token *pEnd, /* The final ')' token in the CREATE TABLE */ - Select *pSelect /* Select from a "CREATE ... AS SELECT" */ -){ - Table *p; - sqlite3 *db = pParse->db; - int iDb; + pOuterNC = pWalker->u.pNC; + pParse = pWalker->pParse; + db = pParse->db; - if( (pEnd==0 && pSelect==0) || db->mallocFailed ){ - return; + /* Normally sqlite3SelectExpand() will be called first and will have + ** already expanded this SELECT. However, if this is a subquery within + ** an expression, sqlite3ResolveExprNames() will be called without a + ** prior call to sqlite3SelectExpand(). When that happens, let + ** sqlite3SelectPrep() do all of the processing for this SELECT. + ** sqlite3SelectPrep() will invoke both sqlite3SelectExpand() and + ** this routine in the correct order. + */ + if( (p->selFlags & SF_Expanded)==0 ){ + sqlite3SelectPrep(pParse, p, pOuterNC); + return (pParse->nErr || db->mallocFailed) ? WRC_Abort : WRC_Prune; } - p = pParse->pNewTable; - if( p==0 ) return; - assert( !db->init.busy || !pSelect ); - - iDb = sqlite3SchemaToIndex(db, p->pSchema); - -#ifndef SQLITE_OMIT_CHECK - /* Resolve names in all CHECK constraint expressions. - */ - if( p->pCheck ){ - SrcList sSrc; /* Fake SrcList for pParse->pNewTable */ - NameContext sNC; /* Name context for pParse->pNewTable */ + isCompound = p->pPrior!=0; + nCompound = 0; + pLeftmost = p; + while( p ){ + assert( (p->selFlags & SF_Expanded)!=0 ); + assert( (p->selFlags & SF_Resolved)==0 ); + p->selFlags |= SF_Resolved; + /* Resolve the expressions in the LIMIT and OFFSET clauses. These + ** are not allowed to refer to any names, so pass an empty NameContext. + */ memset(&sNC, 0, sizeof(sNC)); - memset(&sSrc, 0, sizeof(sSrc)); - sSrc.nSrc = 1; - sSrc.a[0].zName = p->zName; - sSrc.a[0].pTab = p; - sSrc.a[0].iCursor = -1; sNC.pParse = pParse; - sNC.pSrcList = &sSrc; - sNC.isCheck = 1; - if( sqlite3ResolveExprNames(&sNC, p->pCheck) ){ - return; + if( sqlite3ResolveExprNames(&sNC, p->pLimit) || + sqlite3ResolveExprNames(&sNC, p->pOffset) ){ + return WRC_Abort; } - } -#endif /* !defined(SQLITE_OMIT_CHECK) */ - - /* If the db->init.busy is 1 it means we are reading the SQL off the - ** "sqlite_master" or "sqlite_temp_master" table on the disk. - ** So do not write to the disk again. Extract the root page number - ** for the table from the db->init.newTnum field. (The page number - ** should have been put there by the sqliteOpenCb routine.) - */ - if( db->init.busy ){ - p->tnum = db->init.newTnum; - } - - /* If not initializing, then create a record for the new table - ** in the SQLITE_MASTER table of the database. - ** - ** If this is a TEMPORARY table, write the entry into the auxiliary - ** file instead of into the main database file. - */ - if( !db->init.busy ){ - int n; - Vdbe *v; - char *zType; /* "view" or "table" */ - char *zType2; /* "VIEW" or "TABLE" */ - char *zStmt; /* Text of the CREATE TABLE or CREATE VIEW statement */ + + /* Set up the local name-context to pass to sqlite3ResolveExprNames() to + ** resolve the result-set expression list. + */ + sNC.ncFlags = NC_AllowAgg; + sNC.pSrcList = p->pSrc; + sNC.pNext = pOuterNC; + + /* Resolve names in the result set. */ + pEList = p->pEList; + assert( pEList!=0 ); + for(i=0; inExpr; i++){ + Expr *pX = pEList->a[i].pExpr; + if( sqlite3ResolveExprNames(&sNC, pX) ){ + return WRC_Abort; + } + } + + /* Recursively resolve names in all subqueries + */ + for(i=0; ipSrc->nSrc; i++){ + struct SrcList_item *pItem = &p->pSrc->a[i]; + if( pItem->pSelect ){ + NameContext *pNC; /* Used to iterate name contexts */ + int nRef = 0; /* Refcount for pOuterNC and outer contexts */ + const char *zSavedContext = pParse->zAuthContext; - v = sqlite3GetVdbe(pParse); - if( NEVER(v==0) ) return; + /* Count the total number of references to pOuterNC and all of its + ** parent contexts. After resolving references to expressions in + ** pItem->pSelect, check if this value has changed. If so, then + ** SELECT statement pItem->pSelect must be correlated. Set the + ** pItem->isCorrelated flag if this is the case. */ + for(pNC=pOuterNC; pNC; pNC=pNC->pNext) nRef += pNC->nRef; - sqlite3VdbeAddOp1(v, OP_Close, 0); + if( pItem->zName ) pParse->zAuthContext = pItem->zName; + sqlite3ResolveSelectNames(pParse, pItem->pSelect, pOuterNC); + pParse->zAuthContext = zSavedContext; + if( pParse->nErr || db->mallocFailed ) return WRC_Abort; - /* - ** Initialize zType for the new view or table. + for(pNC=pOuterNC; pNC; pNC=pNC->pNext) nRef -= pNC->nRef; + assert( pItem->isCorrelated==0 && nRef<=0 ); + pItem->isCorrelated = (nRef!=0); + } + } + + /* If there are no aggregate functions in the result-set, and no GROUP BY + ** expression, do not allow aggregates in any of the other expressions. */ - if( p->pSelect==0 ){ - /* A regular table */ - zType = "table"; - zType2 = "TABLE"; -#ifndef SQLITE_OMIT_VIEW + assert( (p->selFlags & SF_Aggregate)==0 ); + pGroupBy = p->pGroupBy; + if( pGroupBy || (sNC.ncFlags & NC_HasAgg)!=0 ){ + p->selFlags |= SF_Aggregate; }else{ - /* A view */ - zType = "view"; - zType2 = "VIEW"; -#endif + sNC.ncFlags &= ~NC_AllowAgg; } - - /* If this is a CREATE TABLE xx AS SELECT ..., execute the SELECT - ** statement to populate the new table. The root-page number for the - ** new table is in register pParse->regRoot. - ** - ** Once the SELECT has been coded by sqlite3Select(), it is in a - ** suitable state to query for the column names and types to be used - ** by the new table. + + /* If a HAVING clause is present, then there must be a GROUP BY clause. + */ + if( p->pHaving && !pGroupBy ){ + sqlite3ErrorMsg(pParse, "a GROUP BY clause is required before HAVING"); + return WRC_Abort; + } + + /* Add the expression list to the name-context before parsing the + ** other expressions in the SELECT statement. This is so that + ** expressions in the WHERE clause (etc.) can refer to expressions by + ** aliases in the result set. ** - ** A shared-cache write-lock is not required to write to the new table, - ** as a schema-lock must have already been obtained to create it. Since - ** a schema-lock excludes all other database users, the write-lock would - ** be redundant. + ** Minor point: If this is the case, then the expression will be + ** re-evaluated for each reference to it. */ - if( pSelect ){ - SelectDest dest; - Table *pSelTab; - - assert(pParse->nTab==1); - sqlite3VdbeAddOp3(v, OP_OpenWrite, 1, pParse->regRoot, iDb); - sqlite3VdbeChangeP5(v, 1); - pParse->nTab = 2; - sqlite3SelectDestInit(&dest, SRT_Table, 1); - sqlite3Select(pParse, pSelect, &dest); - sqlite3VdbeAddOp1(v, OP_Close, 1); - if( pParse->nErr==0 ){ - pSelTab = sqlite3ResultSetOfSelect(pParse, pSelect); - if( pSelTab==0 ) return; - assert( p->aCol==0 ); - p->nCol = pSelTab->nCol; - p->aCol = pSelTab->aCol; - pSelTab->nCol = 0; - pSelTab->aCol = 0; - sqlite3DeleteTable(pSelTab); - } - } - - /* Compute the complete text of the CREATE statement */ - if( pSelect ){ - zStmt = createTableStmt(db, p); - }else{ - n = (int)(pEnd->z - pParse->sNameToken.z) + 1; - zStmt = sqlite3MPrintf(db, - "CREATE %s %.*s", zType2, n, pParse->sNameToken.z - ); + sNC.pEList = p->pEList; + if( sqlite3ResolveExprNames(&sNC, p->pWhere) || + sqlite3ResolveExprNames(&sNC, p->pHaving) + ){ + return WRC_Abort; } - /* A slot for the record has already been allocated in the - ** SQLITE_MASTER table. We just need to update that slot with all - ** the information we've collected. + /* The ORDER BY and GROUP BY clauses may not refer to terms in + ** outer queries */ - sqlite3NestedParse(pParse, - "UPDATE %Q.%s " - "SET type='%s', name=%Q, tbl_name=%Q, rootpage=#%d, sql=%Q " - "WHERE rowid=#%d", - db->aDb[iDb].zName, SCHEMA_TABLE(iDb), - zType, - p->zName, - p->zName, - pParse->regRoot, - zStmt, - pParse->regRowid - ); - sqlite3DbFree(db, zStmt); - sqlite3ChangeCookie(pParse, iDb); + sNC.pNext = 0; + sNC.ncFlags |= NC_AllowAgg; -#ifndef SQLITE_OMIT_AUTOINCREMENT - /* Check to see if we need to create an sqlite_sequence table for - ** keeping track of autoincrement keys. + /* Process the ORDER BY clause for singleton SELECT statements. + ** The ORDER BY clause for compounds SELECT statements is handled + ** below, after all of the result-sets for all of the elements of + ** the compound have been resolved. */ - if( p->tabFlags & TF_Autoincrement ){ - Db *pDb = &db->aDb[iDb]; - if( pDb->pSchema->pSeqTab==0 ){ - sqlite3NestedParse(pParse, - "CREATE TABLE %Q.sqlite_sequence(name,seq)", - pDb->zName - ); + if( !isCompound && resolveOrderGroupBy(&sNC, p, p->pOrderBy, "ORDER") ){ + return WRC_Abort; + } + if( db->mallocFailed ){ + return WRC_Abort; + } + + /* Resolve the GROUP BY clause. At the same time, make sure + ** the GROUP BY clause does not contain aggregate functions. + */ + if( pGroupBy ){ + struct ExprList_item *pItem; + + if( resolveOrderGroupBy(&sNC, p, pGroupBy, "GROUP") || db->mallocFailed ){ + return WRC_Abort; + } + for(i=0, pItem=pGroupBy->a; inExpr; i++, pItem++){ + if( ExprHasProperty(pItem->pExpr, EP_Agg) ){ + sqlite3ErrorMsg(pParse, "aggregate functions are not allowed in " + "the GROUP BY clause"); + return WRC_Abort; + } } } -#endif - /* Reparse everything to update our internal data structures */ - sqlite3VdbeAddOp4(v, OP_ParseSchema, iDb, 0, 0, - sqlite3MPrintf(db, "tbl_name='%q'",p->zName), P4_DYNAMIC); + /* Advance to the next term of the compound + */ + p = p->pPrior; + nCompound++; } - - /* Add the table to the in-memory representation of the database. + /* Resolve the ORDER BY on a compound SELECT after all terms of + ** the compound have been resolved. */ - if( db->init.busy ){ - Table *pOld; - Schema *pSchema = p->pSchema; - pOld = sqlite3HashInsert(&pSchema->tblHash, p->zName, - sqlite3Strlen30(p->zName),p); - if( pOld ){ - assert( p==pOld ); /* Malloc must have failed inside HashInsert() */ - db->mallocFailed = 1; - return; - } - pParse->pNewTable = 0; - db->nTable++; - db->flags |= SQLITE_InternChanges; - -#ifndef SQLITE_OMIT_ALTERTABLE - if( !p->pSelect ){ - const char *zName = (const char *)pParse->sNameToken.z; - int nName; - assert( !pSelect && pCons && pEnd ); - if( pCons->z==0 ){ - pCons = pEnd; - } - nName = (int)((const char *)pCons->z - zName); - p->addColOffset = 13 + sqlite3Utf8CharLen(zName, nName); - } -#endif + if( isCompound && resolveCompoundOrderBy(pParse, pLeftmost) ){ + return WRC_Abort; } + + return WRC_Prune; } -#ifndef SQLITE_OMIT_VIEW /* -** The parser calls this routine in order to create a new VIEW +** This routine walks an expression tree and resolves references to +** table columns and result-set columns. At the same time, do error +** checking on function usage and set a flag if any aggregate functions +** are seen. +** +** To resolve table columns references we look for nodes (or subtrees) of the +** form X.Y.Z or Y.Z or just Z where +** +** X: The name of a database. Ex: "main" or "temp" or +** the symbolic name assigned to an ATTACH-ed database. +** +** Y: The name of a table in a FROM clause. Or in a trigger +** one of the special names "old" or "new". +** +** Z: The name of a column in table Y. +** +** The node at the root of the subtree is modified as follows: +** +** Expr.op Changed to TK_COLUMN +** Expr.pTab Points to the Table object for X.Y +** Expr.iColumn The column index in X.Y. -1 for the rowid. +** Expr.iTable The VDBE cursor number for X.Y +** +** +** To resolve result-set references, look for expression nodes of the +** form Z (with no X and Y prefix) where the Z matches the right-hand +** size of an AS clause in the result-set of a SELECT. The Z expression +** is replaced by a copy of the left-hand side of the result-set expression. +** Table-name and function resolution occurs on the substituted expression +** tree. For example, in: +** +** SELECT a+b AS x, c+d AS y FROM t1 ORDER BY x; +** +** The "x" term of the order by is replaced by "a+b" to render: +** +** SELECT a+b AS x, c+d AS y FROM t1 ORDER BY a+b; +** +** Function calls are checked to make sure that the function is +** defined and that the correct number of arguments are specified. +** If the function is an aggregate function, then the NC_HasAgg flag is +** set and the opcode is changed from TK_FUNCTION to TK_AGG_FUNCTION. +** If an expression contains aggregate functions then the EP_Agg +** property on the expression is set. +** +** An error message is left in pParse if anything is amiss. The number +** if errors is returned. */ -SQLITE_PRIVATE void sqlite3CreateView( - Parse *pParse, /* The parsing context */ - Token *pBegin, /* The CREATE token that begins the statement */ - Token *pName1, /* The token that holds the name of the view */ - Token *pName2, /* The token that holds the name of the view */ - Select *pSelect, /* A SELECT statement that will become the new view */ - int isTemp, /* TRUE for a TEMPORARY view */ - int noErr /* Suppress error messages if VIEW already exists */ +SQLITE_PRIVATE int sqlite3ResolveExprNames( + NameContext *pNC, /* Namespace to resolve expressions in. */ + Expr *pExpr /* The expression to be analyzed. */ ){ - Table *p; - int n; - const char *z; - Token sEnd; - DbFixer sFix; - Token *pName; - int iDb; - sqlite3 *db = pParse->db; + u8 savedHasAgg; + Walker w; - if( pParse->nVar>0 ){ - sqlite3ErrorMsg(pParse, "parameters are not allowed in views"); - sqlite3SelectDelete(db, pSelect); - return; + if( pExpr==0 ) return 0; +#if SQLITE_MAX_EXPR_DEPTH>0 + { + Parse *pParse = pNC->pParse; + if( sqlite3ExprCheckHeight(pParse, pExpr->nHeight+pNC->pParse->nHeight) ){ + return 1; + } + pParse->nHeight += pExpr->nHeight; } - sqlite3StartTable(pParse, pName1, pName2, isTemp, 1, 0, noErr); - p = pParse->pNewTable; - if( p==0 ){ - sqlite3SelectDelete(db, pSelect); - return; +#endif + savedHasAgg = pNC->ncFlags & NC_HasAgg; + pNC->ncFlags &= ~NC_HasAgg; + w.xExprCallback = resolveExprStep; + w.xSelectCallback = resolveSelectStep; + w.pParse = pNC->pParse; + w.u.pNC = pNC; + sqlite3WalkExpr(&w, pExpr); +#if SQLITE_MAX_EXPR_DEPTH>0 + pNC->pParse->nHeight -= pExpr->nHeight; +#endif + if( pNC->nErr>0 || w.pParse->nErr>0 ){ + ExprSetProperty(pExpr, EP_Error); } - assert( pParse->nErr==0 ); /* If sqlite3StartTable return non-NULL then - ** there could not have been an error */ - sqlite3TwoPartName(pParse, pName1, pName2, &pName); - iDb = sqlite3SchemaToIndex(db, p->pSchema); - if( sqlite3FixInit(&sFix, pParse, iDb, "view", pName) - && sqlite3FixSelect(&sFix, pSelect) - ){ - sqlite3SelectDelete(db, pSelect); - return; + if( pNC->ncFlags & NC_HasAgg ){ + ExprSetProperty(pExpr, EP_Agg); + }else if( savedHasAgg ){ + pNC->ncFlags |= NC_HasAgg; } + return ExprHasProperty(pExpr, EP_Error); +} - /* Make a copy of the entire SELECT statement that defines the view. - ** This will force all the Expr.token.z values to be dynamically - ** allocated rather than point to the input string - which means that - ** they will persist after the current sqlite3_exec() call returns. - */ - p->pSelect = sqlite3SelectDup(db, pSelect, EXPRDUP_REDUCE); - sqlite3SelectDelete(db, pSelect); - if( db->mallocFailed ){ - return; - } - if( !db->init.busy ){ - sqlite3ViewGetColumnNames(pParse, p); - } - /* Locate the end of the CREATE VIEW statement. Make sEnd point to - ** the end. - */ - sEnd = pParse->sLastToken; - if( ALWAYS(sEnd.z[0]!=0) && sEnd.z[0]!=';' ){ - sEnd.z += sEnd.n; - } - sEnd.n = 0; - n = (int)(sEnd.z - pBegin->z); - z = pBegin->z; - while( ALWAYS(n>0) && sqlite3Isspace(z[n-1]) ){ n--; } - sEnd.z = &z[n-1]; - sEnd.n = 1; +/* +** Resolve all names in all expressions of a SELECT and in all +** decendents of the SELECT, including compounds off of p->pPrior, +** subqueries in expressions, and subqueries used as FROM clause +** terms. +** +** See sqlite3ResolveExprNames() for a description of the kinds of +** transformations that occur. +** +** All SELECT statements should have been expanded using +** sqlite3SelectExpand() prior to invoking this routine. +*/ +SQLITE_PRIVATE void sqlite3ResolveSelectNames( + Parse *pParse, /* The parser context */ + Select *p, /* The SELECT statement being coded. */ + NameContext *pOuterNC /* Name context for parent SELECT statement */ +){ + Walker w; - /* Use sqlite3EndTable() to add the view to the SQLITE_MASTER table */ - sqlite3EndTable(pParse, 0, &sEnd, 0); - return; + assert( p!=0 ); + w.xExprCallback = resolveExprStep; + w.xSelectCallback = resolveSelectStep; + w.pParse = pParse; + w.u.pNC = pOuterNC; + sqlite3WalkSelect(&w, p); } -#endif /* SQLITE_OMIT_VIEW */ -#if !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_VIRTUALTABLE) +/************** End of resolve.c *********************************************/ +/************** Begin file expr.c ********************************************/ /* -** The Table structure pTable is really a VIEW. Fill in the names of -** the columns of the view in the pTable structure. Return the number -** of errors. If an error is seen leave an error message in pParse->zErrMsg. +** 2001 September 15 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** This file contains routines used for analyzing expressions and +** for generating VDBE code that evaluates expressions in SQLite. */ -SQLITE_PRIVATE int sqlite3ViewGetColumnNames(Parse *pParse, Table *pTable){ - Table *pSelTab; /* A fake table from which we get the result set */ - Select *pSel; /* Copy of the SELECT that implements the view */ - int nErr = 0; /* Number of errors encountered */ - int n; /* Temporarily holds the number of cursors assigned */ - sqlite3 *db = pParse->db; /* Database connection for malloc errors */ - int (*xAuth)(void*,int,const char*,const char*,const char*,const char*); - assert( pTable ); - -#ifndef SQLITE_OMIT_VIRTUALTABLE - if( sqlite3VtabCallConnect(pParse, pTable) ){ - return SQLITE_ERROR; +/* +** Return the 'affinity' of the expression pExpr if any. +** +** If pExpr is a column, a reference to a column via an 'AS' alias, +** or a sub-select with a column as the return value, then the +** affinity of that column is returned. Otherwise, 0x00 is returned, +** indicating no affinity for the expression. +** +** i.e. the WHERE clause expresssions in the following statements all +** have an affinity: +** +** CREATE TABLE t1(a); +** SELECT * FROM t1 WHERE a; +** SELECT a AS b FROM t1 WHERE b; +** SELECT * FROM t1 WHERE (select a from t1); +*/ +SQLITE_PRIVATE char sqlite3ExprAffinity(Expr *pExpr){ + int op = pExpr->op; + if( op==TK_SELECT ){ + assert( pExpr->flags&EP_xIsSelect ); + return sqlite3ExprAffinity(pExpr->x.pSelect->pEList->a[0].pExpr); } - if( IsVirtual(pTable) ) return 0; -#endif - -#ifndef SQLITE_OMIT_VIEW - /* A positive nCol means the columns names for this view are - ** already known. - */ - if( pTable->nCol>0 ) return 0; - - /* A negative nCol is a special marker meaning that we are currently - ** trying to compute the column names. If we enter this routine with - ** a negative nCol, it means two or more views form a loop, like this: - ** - ** CREATE VIEW one AS SELECT * FROM two; - ** CREATE VIEW two AS SELECT * FROM one; - ** - ** Actually, the error above is now caught prior to reaching this point. - ** But the following test is still important as it does come up - ** in the following: - ** - ** CREATE TABLE main.ex1(a); - ** CREATE TEMP VIEW ex1 AS SELECT a FROM ex1; - ** SELECT * FROM temp.ex1; - */ - if( pTable->nCol<0 ){ - sqlite3ErrorMsg(pParse, "view %s is circularly defined", pTable->zName); - return 1; +#ifndef SQLITE_OMIT_CAST + if( op==TK_CAST ){ + assert( !ExprHasProperty(pExpr, EP_IntValue) ); + return sqlite3AffinityType(pExpr->u.zToken); } - assert( pTable->nCol>=0 ); - - /* If we get this far, it means we need to compute the table names. - ** Note that the call to sqlite3ResultSetOfSelect() will expand any - ** "*" elements in the results set of the view and will assign cursors - ** to the elements of the FROM clause. But we do not want these changes - ** to be permanent. So the computation is done on a copy of the SELECT - ** statement that defines the view. - */ - assert( pTable->pSelect ); - pSel = sqlite3SelectDup(db, pTable->pSelect, 0); - if( pSel ){ - u8 enableLookaside = db->lookaside.bEnabled; - n = pParse->nTab; - sqlite3SrcListAssignCursors(pParse, pSel->pSrc); - pTable->nCol = -1; - db->lookaside.bEnabled = 0; -#ifndef SQLITE_OMIT_AUTHORIZATION - xAuth = db->xAuth; - db->xAuth = 0; - pSelTab = sqlite3ResultSetOfSelect(pParse, pSel); - db->xAuth = xAuth; -#else - pSelTab = sqlite3ResultSetOfSelect(pParse, pSel); #endif - db->lookaside.bEnabled = enableLookaside; - pParse->nTab = n; - if( pSelTab ){ - assert( pTable->aCol==0 ); - pTable->nCol = pSelTab->nCol; - pTable->aCol = pSelTab->aCol; - pSelTab->nCol = 0; - pSelTab->aCol = 0; - sqlite3DeleteTable(pSelTab); - pTable->pSchema->flags |= DB_UnresetViews; - }else{ - pTable->nCol = 0; - nErr++; - } - sqlite3SelectDelete(db, pSel); - } else { - nErr++; + if( (op==TK_AGG_COLUMN || op==TK_COLUMN || op==TK_REGISTER) + && pExpr->pTab!=0 + ){ + /* op==TK_REGISTER && pExpr->pTab!=0 happens when pExpr was originally + ** a TK_COLUMN but was previously evaluated and cached in a register */ + int j = pExpr->iColumn; + if( j<0 ) return SQLITE_AFF_INTEGER; + assert( pExpr->pTab && jpTab->nCol ); + return pExpr->pTab->aCol[j].affinity; } -#endif /* SQLITE_OMIT_VIEW */ - return nErr; + return pExpr->affinity; } -#endif /* !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_VIRTUALTABLE) */ -#ifndef SQLITE_OMIT_VIEW /* -** Clear the column names from every VIEW in database idx. +** Set the explicit collating sequence for an expression to the +** collating sequence supplied in the second argument. */ -static void sqliteViewResetAll(sqlite3 *db, int idx){ - HashElem *i; - if( !DbHasProperty(db, idx, DB_UnresetViews) ) return; - for(i=sqliteHashFirst(&db->aDb[idx].pSchema->tblHash); i;i=sqliteHashNext(i)){ - Table *pTab = sqliteHashData(i); - if( pTab->pSelect ){ - sqliteResetColumnNames(pTab); - } +SQLITE_PRIVATE Expr *sqlite3ExprSetColl(Expr *pExpr, CollSeq *pColl){ + if( pExpr && pColl ){ + pExpr->pColl = pColl; + pExpr->flags |= EP_ExpCollate; } - DbClearProperty(db, idx, DB_UnresetViews); + return pExpr; } -#else -# define sqliteViewResetAll(A,B) -#endif /* SQLITE_OMIT_VIEW */ /* -** This function is called by the VDBE to adjust the internal schema -** used by SQLite when the btree layer moves a table root page. The -** root-page of a table or index in database iDb has changed from iFrom -** to iTo. -** -** Ticket #1728: The symbol table might still contain information -** on tables and/or indices that are the process of being deleted. -** If you are unlucky, one of those deleted indices or tables might -** have the same rootpage number as the real table or index that is -** being moved. So we cannot stop searching after the first match -** because the first match might be for one of the deleted indices -** or tables and not the table/index that is actually being moved. -** We must continue looping until all tables and indices with -** rootpage==iFrom have been converted to have a rootpage of iTo -** in order to be certain that we got the right one. +** Set the collating sequence for expression pExpr to be the collating +** sequence named by pToken. Return a pointer to the revised expression. +** The collating sequence is marked as "explicit" using the EP_ExpCollate +** flag. An explicit collating sequence will override implicit +** collating sequences. */ -#ifndef SQLITE_OMIT_AUTOVACUUM -SQLITE_PRIVATE void sqlite3RootPageMoved(Db *pDb, int iFrom, int iTo){ - HashElem *pElem; - Hash *pHash; +SQLITE_PRIVATE Expr *sqlite3ExprSetCollByToken(Parse *pParse, Expr *pExpr, Token *pCollName){ + char *zColl = 0; /* Dequoted name of collation sequence */ + CollSeq *pColl; + sqlite3 *db = pParse->db; + zColl = sqlite3NameFromToken(db, pCollName); + pColl = sqlite3LocateCollSeq(pParse, zColl); + sqlite3ExprSetColl(pExpr, pColl); + sqlite3DbFree(db, zColl); + return pExpr; +} - pHash = &pDb->pSchema->tblHash; - for(pElem=sqliteHashFirst(pHash); pElem; pElem=sqliteHashNext(pElem)){ - Table *pTab = sqliteHashData(pElem); - if( pTab->tnum==iFrom ){ - pTab->tnum = iTo; +/* +** Return the default collation sequence for the expression pExpr. If +** there is no default collation type, return 0. +*/ +SQLITE_PRIVATE CollSeq *sqlite3ExprCollSeq(Parse *pParse, Expr *pExpr){ + CollSeq *pColl = 0; + Expr *p = pExpr; + while( p ){ + int op; + pColl = p->pColl; + if( pColl ) break; + op = p->op; + if( p->pTab!=0 && ( + op==TK_AGG_COLUMN || op==TK_COLUMN || op==TK_REGISTER || op==TK_TRIGGER + )){ + /* op==TK_REGISTER && p->pTab!=0 happens when pExpr was originally + ** a TK_COLUMN but was previously evaluated and cached in a register */ + const char *zColl; + int j = p->iColumn; + if( j>=0 ){ + sqlite3 *db = pParse->db; + zColl = p->pTab->aCol[j].zColl; + pColl = sqlite3FindCollSeq(db, ENC(db), zColl, 0); + pExpr->pColl = pColl; + } + break; } - } - pHash = &pDb->pSchema->idxHash; - for(pElem=sqliteHashFirst(pHash); pElem; pElem=sqliteHashNext(pElem)){ - Index *pIdx = sqliteHashData(pElem); - if( pIdx->tnum==iFrom ){ - pIdx->tnum = iTo; + if( op!=TK_CAST && op!=TK_UPLUS ){ + break; } + p = p->pLeft; } + if( sqlite3CheckCollSeq(pParse, pColl) ){ + pColl = 0; + } + return pColl; } -#endif /* -** Write code to erase the table with root-page iTable from database iDb. -** Also write code to modify the sqlite_master table and internal schema -** if a root-page of another table is moved by the btree-layer whilst -** erasing iTable (this can happen with an auto-vacuum database). -*/ -static void destroyRootPage(Parse *pParse, int iTable, int iDb){ - Vdbe *v = sqlite3GetVdbe(pParse); - int r1 = sqlite3GetTempReg(pParse); - sqlite3VdbeAddOp3(v, OP_Destroy, iTable, r1, iDb); -#ifndef SQLITE_OMIT_AUTOVACUUM - /* OP_Destroy stores an in integer r1. If this integer - ** is non-zero, then it is the root page number of a table moved to - ** location iTable. The following code modifies the sqlite_master table to - ** reflect this. - ** - ** The "#NNN" in the SQL is a special constant that means whatever value - ** is in register NNN. See grammar rules associated with the TK_REGISTER - ** token for additional information. - */ - sqlite3NestedParse(pParse, - "UPDATE %Q.%s SET rootpage=%d WHERE #%d AND rootpage=#%d", - pParse->db->aDb[iDb].zName, SCHEMA_TABLE(iDb), iTable, r1, r1); -#endif - sqlite3ReleaseTempReg(pParse, r1); +** pExpr is an operand of a comparison operator. aff2 is the +** type affinity of the other operand. This routine returns the +** type affinity that should be used for the comparison operator. +*/ +SQLITE_PRIVATE char sqlite3CompareAffinity(Expr *pExpr, char aff2){ + char aff1 = sqlite3ExprAffinity(pExpr); + if( aff1 && aff2 ){ + /* Both sides of the comparison are columns. If one has numeric + ** affinity, use that. Otherwise use no affinity. + */ + if( sqlite3IsNumericAffinity(aff1) || sqlite3IsNumericAffinity(aff2) ){ + return SQLITE_AFF_NUMERIC; + }else{ + return SQLITE_AFF_NONE; + } + }else if( !aff1 && !aff2 ){ + /* Neither side of the comparison is a column. Compare the + ** results directly. + */ + return SQLITE_AFF_NONE; + }else{ + /* One side is a column, the other is not. Use the columns affinity. */ + assert( aff1==0 || aff2==0 ); + return (aff1 + aff2); + } } /* -** Write VDBE code to erase table pTab and all associated indices on disk. -** Code to update the sqlite_master tables and internal schema definitions -** in case a root-page belonging to another table is moved by the btree layer -** is also added (this can happen with an auto-vacuum database). +** pExpr is a comparison operator. Return the type affinity that should +** be applied to both operands prior to doing the comparison. */ -static void destroyTable(Parse *pParse, Table *pTab){ -#ifdef SQLITE_OMIT_AUTOVACUUM - Index *pIdx; - int iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema); - destroyRootPage(pParse, pTab->tnum, iDb); - for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){ - destroyRootPage(pParse, pIdx->tnum, iDb); +static char comparisonAffinity(Expr *pExpr){ + char aff; + assert( pExpr->op==TK_EQ || pExpr->op==TK_IN || pExpr->op==TK_LT || + pExpr->op==TK_GT || pExpr->op==TK_GE || pExpr->op==TK_LE || + pExpr->op==TK_NE || pExpr->op==TK_IS || pExpr->op==TK_ISNOT ); + assert( pExpr->pLeft ); + aff = sqlite3ExprAffinity(pExpr->pLeft); + if( pExpr->pRight ){ + aff = sqlite3CompareAffinity(pExpr->pRight, aff); + }else if( ExprHasProperty(pExpr, EP_xIsSelect) ){ + aff = sqlite3CompareAffinity(pExpr->x.pSelect->pEList->a[0].pExpr, aff); + }else if( !aff ){ + aff = SQLITE_AFF_NONE; } -#else - /* If the database may be auto-vacuum capable (if SQLITE_OMIT_AUTOVACUUM - ** is not defined), then it is important to call OP_Destroy on the - ** table and index root-pages in order, starting with the numerically - ** largest root-page number. This guarantees that none of the root-pages - ** to be destroyed is relocated by an earlier OP_Destroy. i.e. if the - ** following were coded: - ** - ** OP_Destroy 4 0 - ** ... - ** OP_Destroy 5 0 - ** - ** and root page 5 happened to be the largest root-page number in the - ** database, then root page 5 would be moved to page 4 by the - ** "OP_Destroy 4 0" opcode. The subsequent "OP_Destroy 5 0" would hit - ** a free-list page. - */ - int iTab = pTab->tnum; - int iDestroyed = 0; + return aff; +} - while( 1 ){ - Index *pIdx; - int iLargest = 0; +/* +** pExpr is a comparison expression, eg. '=', '<', IN(...) etc. +** idx_affinity is the affinity of an indexed column. Return true +** if the index with affinity idx_affinity may be used to implement +** the comparison in pExpr. +*/ +SQLITE_PRIVATE int sqlite3IndexAffinityOk(Expr *pExpr, char idx_affinity){ + char aff = comparisonAffinity(pExpr); + switch( aff ){ + case SQLITE_AFF_NONE: + return 1; + case SQLITE_AFF_TEXT: + return idx_affinity==SQLITE_AFF_TEXT; + default: + return sqlite3IsNumericAffinity(idx_affinity); + } +} - if( iDestroyed==0 || iTabpIndex; pIdx; pIdx=pIdx->pNext){ - int iIdx = pIdx->tnum; - assert( pIdx->pSchema==pTab->pSchema ); - if( (iDestroyed==0 || (iIdxiLargest ){ - iLargest = iIdx; - } - } - if( iLargest==0 ){ - return; - }else{ - int iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema); - destroyRootPage(pParse, iLargest, iDb); - iDestroyed = iLargest; +/* +** Return the P5 value that should be used for a binary comparison +** opcode (OP_Eq, OP_Ge etc.) used to compare pExpr1 and pExpr2. +*/ +static u8 binaryCompareP5(Expr *pExpr1, Expr *pExpr2, int jumpIfNull){ + u8 aff = (char)sqlite3ExprAffinity(pExpr2); + aff = (u8)sqlite3CompareAffinity(pExpr1, aff) | (u8)jumpIfNull; + return aff; +} + +/* +** Return a pointer to the collation sequence that should be used by +** a binary comparison operator comparing pLeft and pRight. +** +** If the left hand expression has a collating sequence type, then it is +** used. Otherwise the collation sequence for the right hand expression +** is used, or the default (BINARY) if neither expression has a collating +** type. +** +** Argument pRight (but not pLeft) may be a null pointer. In this case, +** it is not considered. +*/ +SQLITE_PRIVATE CollSeq *sqlite3BinaryCompareCollSeq( + Parse *pParse, + Expr *pLeft, + Expr *pRight +){ + CollSeq *pColl; + assert( pLeft ); + if( pLeft->flags & EP_ExpCollate ){ + assert( pLeft->pColl ); + pColl = pLeft->pColl; + }else if( pRight && pRight->flags & EP_ExpCollate ){ + assert( pRight->pColl ); + pColl = pRight->pColl; + }else{ + pColl = sqlite3ExprCollSeq(pParse, pLeft); + if( !pColl ){ + pColl = sqlite3ExprCollSeq(pParse, pRight); } } -#endif + return pColl; } /* -** This routine is called to do the work of a DROP TABLE statement. -** pName is the name of the table to be dropped. +** Generate code for a comparison operator. */ -SQLITE_PRIVATE void sqlite3DropTable(Parse *pParse, SrcList *pName, int isView, int noErr){ - Table *pTab; - Vdbe *v; - sqlite3 *db = pParse->db; - int iDb; +static int codeCompare( + Parse *pParse, /* The parsing (and code generating) context */ + Expr *pLeft, /* The left operand */ + Expr *pRight, /* The right operand */ + int opcode, /* The comparison opcode */ + int in1, int in2, /* Register holding operands */ + int dest, /* Jump here if true. */ + int jumpIfNull /* If true, jump if either operand is NULL */ +){ + int p5; + int addr; + CollSeq *p4; - if( db->mallocFailed ){ - goto exit_drop_table; - } - assert( pParse->nErr==0 ); - assert( pName->nSrc==1 ); - pTab = sqlite3LocateTable(pParse, isView, - pName->a[0].zName, pName->a[0].zDatabase); + p4 = sqlite3BinaryCompareCollSeq(pParse, pLeft, pRight); + p5 = binaryCompareP5(pLeft, pRight, jumpIfNull); + addr = sqlite3VdbeAddOp4(pParse->pVdbe, opcode, in2, dest, in1, + (void*)p4, P4_COLLSEQ); + sqlite3VdbeChangeP5(pParse->pVdbe, (u8)p5); + return addr; +} - if( pTab==0 ){ - if( noErr ){ - sqlite3ErrorClear(pParse); - } - goto exit_drop_table; +#if SQLITE_MAX_EXPR_DEPTH>0 +/* +** Check that argument nHeight is less than or equal to the maximum +** expression depth allowed. If it is not, leave an error message in +** pParse. +*/ +SQLITE_PRIVATE int sqlite3ExprCheckHeight(Parse *pParse, int nHeight){ + int rc = SQLITE_OK; + int mxHeight = pParse->db->aLimit[SQLITE_LIMIT_EXPR_DEPTH]; + if( nHeight>mxHeight ){ + sqlite3ErrorMsg(pParse, + "Expression tree is too large (maximum depth %d)", mxHeight + ); + rc = SQLITE_ERROR; } - iDb = sqlite3SchemaToIndex(db, pTab->pSchema); - assert( iDb>=0 && iDbnDb ); + return rc; +} - /* If pTab is a virtual table, call ViewGetColumnNames() to ensure - ** it is initialized. - */ - if( IsVirtual(pTab) && sqlite3ViewGetColumnNames(pParse, pTab) ){ - goto exit_drop_table; - } -#ifndef SQLITE_OMIT_AUTHORIZATION - { - int code; - const char *zTab = SCHEMA_TABLE(iDb); - const char *zDb = db->aDb[iDb].zName; - const char *zArg2 = 0; - if( sqlite3AuthCheck(pParse, SQLITE_DELETE, zTab, 0, zDb)){ - goto exit_drop_table; - } - if( isView ){ - if( !OMIT_TEMPDB && iDb==1 ){ - code = SQLITE_DROP_TEMP_VIEW; - }else{ - code = SQLITE_DROP_VIEW; - } -#ifndef SQLITE_OMIT_VIRTUALTABLE - }else if( IsVirtual(pTab) ){ - code = SQLITE_DROP_VTABLE; - zArg2 = pTab->pMod->zName; -#endif - }else{ - if( !OMIT_TEMPDB && iDb==1 ){ - code = SQLITE_DROP_TEMP_TABLE; - }else{ - code = SQLITE_DROP_TABLE; - } - } - if( sqlite3AuthCheck(pParse, code, pTab->zName, zArg2, zDb) ){ - goto exit_drop_table; +/* The following three functions, heightOfExpr(), heightOfExprList() +** and heightOfSelect(), are used to determine the maximum height +** of any expression tree referenced by the structure passed as the +** first argument. +** +** If this maximum height is greater than the current value pointed +** to by pnHeight, the second parameter, then set *pnHeight to that +** value. +*/ +static void heightOfExpr(Expr *p, int *pnHeight){ + if( p ){ + if( p->nHeight>*pnHeight ){ + *pnHeight = p->nHeight; } - if( sqlite3AuthCheck(pParse, SQLITE_DELETE, pTab->zName, 0, zDb) ){ - goto exit_drop_table; + } +} +static void heightOfExprList(ExprList *p, int *pnHeight){ + if( p ){ + int i; + for(i=0; inExpr; i++){ + heightOfExpr(p->a[i].pExpr, pnHeight); } } -#endif - if( sqlite3StrNICmp(pTab->zName, "sqlite_", 7)==0 ){ - sqlite3ErrorMsg(pParse, "table %s may not be dropped", pTab->zName); - goto exit_drop_table; +} +static void heightOfSelect(Select *p, int *pnHeight){ + if( p ){ + heightOfExpr(p->pWhere, pnHeight); + heightOfExpr(p->pHaving, pnHeight); + heightOfExpr(p->pLimit, pnHeight); + heightOfExpr(p->pOffset, pnHeight); + heightOfExprList(p->pEList, pnHeight); + heightOfExprList(p->pGroupBy, pnHeight); + heightOfExprList(p->pOrderBy, pnHeight); + heightOfSelect(p->pPrior, pnHeight); } +} -#ifndef SQLITE_OMIT_VIEW - /* Ensure DROP TABLE is not used on a view, and DROP VIEW is not used - ** on a table. - */ - if( isView && pTab->pSelect==0 ){ - sqlite3ErrorMsg(pParse, "use DROP TABLE to delete table %s", pTab->zName); - goto exit_drop_table; - } - if( !isView && pTab->pSelect ){ - sqlite3ErrorMsg(pParse, "use DROP VIEW to delete view %s", pTab->zName); - goto exit_drop_table; +/* +** Set the Expr.nHeight variable in the structure passed as an +** argument. An expression with no children, Expr.pList or +** Expr.pSelect member has a height of 1. Any other expression +** has a height equal to the maximum height of any other +** referenced Expr plus one. +*/ +static void exprSetHeight(Expr *p){ + int nHeight = 0; + heightOfExpr(p->pLeft, &nHeight); + heightOfExpr(p->pRight, &nHeight); + if( ExprHasProperty(p, EP_xIsSelect) ){ + heightOfSelect(p->x.pSelect, &nHeight); + }else{ + heightOfExprList(p->x.pList, &nHeight); } -#endif - - /* Generate code to remove the table from the master table - ** on disk. - */ - v = sqlite3GetVdbe(pParse); - if( v ){ - Trigger *pTrigger; - Db *pDb = &db->aDb[iDb]; - sqlite3BeginWriteOperation(pParse, 1, iDb); - -#ifndef SQLITE_OMIT_VIRTUALTABLE - if( IsVirtual(pTab) ){ - sqlite3VdbeAddOp0(v, OP_VBegin); - } -#endif - - /* Drop all triggers associated with the table being dropped. Code - ** is generated to remove entries from sqlite_master and/or - ** sqlite_temp_master if required. - */ - pTrigger = sqlite3TriggerList(pParse, pTab); - while( pTrigger ){ - assert( pTrigger->pSchema==pTab->pSchema || - pTrigger->pSchema==db->aDb[1].pSchema ); - sqlite3DropTriggerPtr(pParse, pTrigger); - pTrigger = pTrigger->pNext; - } - -#ifndef SQLITE_OMIT_AUTOINCREMENT - /* Remove any entries of the sqlite_sequence table associated with - ** the table being dropped. This is done before the table is dropped - ** at the btree level, in case the sqlite_sequence table needs to - ** move as a result of the drop (can happen in auto-vacuum mode). - */ - if( pTab->tabFlags & TF_Autoincrement ){ - sqlite3NestedParse(pParse, - "DELETE FROM %s.sqlite_sequence WHERE name=%Q", - pDb->zName, pTab->zName - ); - } -#endif - - /* Drop all SQLITE_MASTER table and index entries that refer to the - ** table. The program name loops through the master table and deletes - ** every row that refers to a table of the same name as the one being - ** dropped. Triggers are handled seperately because a trigger can be - ** created in the temp database that refers to a table in another - ** database. - */ - sqlite3NestedParse(pParse, - "DELETE FROM %Q.%s WHERE tbl_name=%Q and type!='trigger'", - pDb->zName, SCHEMA_TABLE(iDb), pTab->zName); - - /* Drop any statistics from the sqlite_stat1 table, if it exists */ - if( sqlite3FindTable(db, "sqlite_stat1", db->aDb[iDb].zName) ){ - sqlite3NestedParse(pParse, - "DELETE FROM %Q.sqlite_stat1 WHERE tbl=%Q", pDb->zName, pTab->zName - ); - } - - if( !isView && !IsVirtual(pTab) ){ - destroyTable(pParse, pTab); - } + p->nHeight = nHeight + 1; +} - /* Remove the table entry from SQLite's internal schema and modify - ** the schema cookie. - */ - if( IsVirtual(pTab) ){ - sqlite3VdbeAddOp4(v, OP_VDestroy, iDb, 0, 0, pTab->zName, 0); - } - sqlite3VdbeAddOp4(v, OP_DropTable, iDb, 0, 0, pTab->zName, 0); - sqlite3ChangeCookie(pParse, iDb); - } - sqliteViewResetAll(db, iDb); +/* +** Set the Expr.nHeight variable using the exprSetHeight() function. If +** the height is greater than the maximum allowed expression depth, +** leave an error in pParse. +*/ +SQLITE_PRIVATE void sqlite3ExprSetHeight(Parse *pParse, Expr *p){ + exprSetHeight(p); + sqlite3ExprCheckHeight(pParse, p->nHeight); +} -exit_drop_table: - sqlite3SrcListDelete(db, pName); +/* +** Return the maximum height of any expression tree referenced +** by the select statement passed as an argument. +*/ +SQLITE_PRIVATE int sqlite3SelectExprHeight(Select *p){ + int nHeight = 0; + heightOfSelect(p, &nHeight); + return nHeight; } +#else + #define exprSetHeight(y) +#endif /* SQLITE_MAX_EXPR_DEPTH>0 */ /* -** This routine is called to create a new foreign key on the table -** currently under construction. pFromCol determines which columns -** in the current table point to the foreign key. If pFromCol==0 then -** connect the key to the last column inserted. pTo is the name of -** the table referred to. pToCol is a list of tables in the other -** pTo table that the foreign key points to. flags contains all -** information about the conflict resolution algorithms specified -** in the ON DELETE, ON UPDATE and ON INSERT clauses. +** This routine is the core allocator for Expr nodes. ** -** An FKey structure is created and added to the table currently -** under construction in the pParse->pNewTable field. +** Construct a new expression node and return a pointer to it. Memory +** for this node and for the pToken argument is a single allocation +** obtained from sqlite3DbMalloc(). The calling function +** is responsible for making sure the node eventually gets freed. ** -** The foreign key is set for IMMEDIATE processing. A subsequent call -** to sqlite3DeferForeignKey() might change this to DEFERRED. +** If dequote is true, then the token (if it exists) is dequoted. +** If dequote is false, no dequoting is performance. The deQuote +** parameter is ignored if pToken is NULL or if the token does not +** appear to be quoted. If the quotes were of the form "..." (double-quotes) +** then the EP_DblQuoted flag is set on the expression node. +** +** Special case: If op==TK_INTEGER and pToken points to a string that +** can be translated into a 32-bit integer, then the token is not +** stored in u.zToken. Instead, the integer values is written +** into u.iValue and the EP_IntValue flag is set. No extra storage +** is allocated to hold the integer text and the dequote flag is ignored. */ -SQLITE_PRIVATE void sqlite3CreateForeignKey( - Parse *pParse, /* Parsing context */ - ExprList *pFromCol, /* Columns in this table that point to other table */ - Token *pTo, /* Name of the other table */ - ExprList *pToCol, /* Columns in the other table */ - int flags /* Conflict resolution algorithms. */ +SQLITE_PRIVATE Expr *sqlite3ExprAlloc( + sqlite3 *db, /* Handle for sqlite3DbMallocZero() (may be null) */ + int op, /* Expression opcode */ + const Token *pToken, /* Token argument. Might be NULL */ + int dequote /* True to dequote */ ){ - sqlite3 *db = pParse->db; -#ifndef SQLITE_OMIT_FOREIGN_KEY - FKey *pFKey = 0; - Table *p = pParse->pNewTable; - int nByte; - int i; - int nCol; - char *z; + Expr *pNew; + int nExtra = 0; + int iValue = 0; - assert( pTo!=0 ); - if( p==0 || IN_DECLARE_VTAB ) goto fk_end; - if( pFromCol==0 ){ - int iCol = p->nCol-1; - if( NEVER(iCol<0) ) goto fk_end; - if( pToCol && pToCol->nExpr!=1 ){ - sqlite3ErrorMsg(pParse, "foreign key on %s" - " should reference only one column of table %T", - p->aCol[iCol].zName, pTo); - goto fk_end; - } - nCol = 1; - }else if( pToCol && pToCol->nExpr!=pFromCol->nExpr ){ - sqlite3ErrorMsg(pParse, - "number of columns in foreign key does not match the number of " - "columns in the referenced table"); - goto fk_end; - }else{ - nCol = pFromCol->nExpr; - } - nByte = sizeof(*pFKey) + (nCol-1)*sizeof(pFKey->aCol[0]) + pTo->n + 1; - if( pToCol ){ - for(i=0; inExpr; i++){ - nByte += sqlite3Strlen30(pToCol->a[i].zName) + 1; + if( pToken ){ + if( op!=TK_INTEGER || pToken->z==0 + || sqlite3GetInt32(pToken->z, &iValue)==0 ){ + nExtra = pToken->n+1; + assert( iValue>=0 ); } } - pFKey = sqlite3DbMallocZero(db, nByte ); - if( pFKey==0 ){ - goto fk_end; - } - pFKey->pFrom = p; - pFKey->pNextFrom = p->pFKey; - z = (char*)&pFKey->aCol[nCol]; - pFKey->zTo = z; - memcpy(z, pTo->z, pTo->n); - z[pTo->n] = 0; - sqlite3Dequote(z); - z += pTo->n+1; - pFKey->nCol = nCol; - if( pFromCol==0 ){ - pFKey->aCol[0].iFrom = p->nCol-1; - }else{ - for(i=0; inCol; j++){ - if( sqlite3StrICmp(p->aCol[j].zName, pFromCol->a[i].zName)==0 ){ - pFKey->aCol[i].iFrom = j; - break; + pNew = sqlite3DbMallocZero(db, sizeof(Expr)+nExtra); + if( pNew ){ + pNew->op = (u8)op; + pNew->iAgg = -1; + if( pToken ){ + if( nExtra==0 ){ + pNew->flags |= EP_IntValue; + pNew->u.iValue = iValue; + }else{ + int c; + pNew->u.zToken = (char*)&pNew[1]; + assert( pToken->z!=0 || pToken->n==0 ); + if( pToken->n ) memcpy(pNew->u.zToken, pToken->z, pToken->n); + pNew->u.zToken[pToken->n] = 0; + if( dequote && nExtra>=3 + && ((c = pToken->z[0])=='\'' || c=='"' || c=='[' || c=='`') ){ + sqlite3Dequote(pNew->u.zToken); + if( c=='"' ) pNew->flags |= EP_DblQuoted; } } - if( j>=p->nCol ){ - sqlite3ErrorMsg(pParse, - "unknown column \"%s\" in foreign key definition", - pFromCol->a[i].zName); - goto fk_end; - } } +#if SQLITE_MAX_EXPR_DEPTH>0 + pNew->nHeight = 1; +#endif } - if( pToCol ){ - for(i=0; ia[i].zName); - pFKey->aCol[i].zCol = z; - memcpy(z, pToCol->a[i].zName, n); - z[n] = 0; - z += n+1; - } - } - pFKey->isDeferred = 0; - pFKey->deleteConf = (u8)(flags & 0xff); - pFKey->updateConf = (u8)((flags >> 8 ) & 0xff); - pFKey->insertConf = (u8)((flags >> 16 ) & 0xff); - - /* Link the foreign key to the table as the last step. - */ - p->pFKey = pFKey; - pFKey = 0; - -fk_end: - sqlite3DbFree(db, pFKey); -#endif /* !defined(SQLITE_OMIT_FOREIGN_KEY) */ - sqlite3ExprListDelete(db, pFromCol); - sqlite3ExprListDelete(db, pToCol); + return pNew; } /* -** This routine is called when an INITIALLY IMMEDIATE or INITIALLY DEFERRED -** clause is seen as part of a foreign key definition. The isDeferred -** parameter is 1 for INITIALLY DEFERRED and 0 for INITIALLY IMMEDIATE. -** The behavior of the most recently created foreign key is adjusted -** accordingly. +** Allocate a new expression node from a zero-terminated token that has +** already been dequoted. */ -SQLITE_PRIVATE void sqlite3DeferForeignKey(Parse *pParse, int isDeferred){ -#ifndef SQLITE_OMIT_FOREIGN_KEY - Table *pTab; - FKey *pFKey; - if( (pTab = pParse->pNewTable)==0 || (pFKey = pTab->pFKey)==0 ) return; - assert( isDeferred==0 || isDeferred==1 ); - pFKey->isDeferred = (u8)isDeferred; -#endif +SQLITE_PRIVATE Expr *sqlite3Expr( + sqlite3 *db, /* Handle for sqlite3DbMallocZero() (may be null) */ + int op, /* Expression opcode */ + const char *zToken /* Token argument. Might be NULL */ +){ + Token x; + x.z = zToken; + x.n = zToken ? sqlite3Strlen30(zToken) : 0; + return sqlite3ExprAlloc(db, op, &x, 0); } /* -** Generate code that will erase and refill index *pIdx. This is -** used to initialize a newly created index or to recompute the -** content of an index in response to a REINDEX command. +** Attach subtrees pLeft and pRight to the Expr node pRoot. ** -** if memRootPage is not negative, it means that the index is newly -** created. The register specified by memRootPage contains the -** root page number of the index. If memRootPage is negative, then -** the index already exists and must be cleared before being refilled and -** the root page number of the index is taken from pIndex->tnum. +** If pRoot==NULL that means that a memory allocation error has occurred. +** In that case, delete the subtrees pLeft and pRight. */ -static void sqlite3RefillIndex(Parse *pParse, Index *pIndex, int memRootPage){ - Table *pTab = pIndex->pTable; /* The table that is indexed */ - int iTab = pParse->nTab++; /* Btree cursor used for pTab */ - int iIdx = pParse->nTab++; /* Btree cursor used for pIndex */ - int addr1; /* Address of top of loop */ - int tnum; /* Root page of index */ - Vdbe *v; /* Generate code into this virtual machine */ - KeyInfo *pKey; /* KeyInfo for index */ - int regIdxKey; /* Registers containing the index key */ - int regRecord; /* Register holding assemblied index record */ - sqlite3 *db = pParse->db; /* The database connection */ - int iDb = sqlite3SchemaToIndex(db, pIndex->pSchema); - -#ifndef SQLITE_OMIT_AUTHORIZATION - if( sqlite3AuthCheck(pParse, SQLITE_REINDEX, pIndex->zName, 0, - db->aDb[iDb].zName ) ){ - return; - } -#endif - - /* Require a write-lock on the table to perform this operation */ - sqlite3TableLock(pParse, iDb, pTab->tnum, 1, pTab->zName); - - v = sqlite3GetVdbe(pParse); - if( v==0 ) return; - if( memRootPage>=0 ){ - tnum = memRootPage; +SQLITE_PRIVATE void sqlite3ExprAttachSubtrees( + sqlite3 *db, + Expr *pRoot, + Expr *pLeft, + Expr *pRight +){ + if( pRoot==0 ){ + assert( db->mallocFailed ); + sqlite3ExprDelete(db, pLeft); + sqlite3ExprDelete(db, pRight); }else{ - tnum = pIndex->tnum; - sqlite3VdbeAddOp2(v, OP_Clear, tnum, iDb); - } - pKey = sqlite3IndexKeyinfo(pParse, pIndex); - sqlite3VdbeAddOp4(v, OP_OpenWrite, iIdx, tnum, iDb, - (char *)pKey, P4_KEYINFO_HANDOFF); - if( memRootPage>=0 ){ - sqlite3VdbeChangeP5(v, 1); - } - sqlite3OpenTable(pParse, iTab, iDb, pTab, OP_OpenRead); - addr1 = sqlite3VdbeAddOp2(v, OP_Rewind, iTab, 0); - regRecord = sqlite3GetTempReg(pParse); - regIdxKey = sqlite3GenerateIndexKey(pParse, pIndex, iTab, regRecord, 1); - if( pIndex->onError!=OE_None ){ - const int regRowid = regIdxKey + pIndex->nColumn; - const int j2 = sqlite3VdbeCurrentAddr(v) + 2; - void * const pRegKey = SQLITE_INT_TO_PTR(regIdxKey); - - /* The registers accessed by the OP_IsUnique opcode were allocated - ** using sqlite3GetTempRange() inside of the sqlite3GenerateIndexKey() - ** call above. Just before that function was freed they were released - ** (made available to the compiler for reuse) using - ** sqlite3ReleaseTempRange(). So in some ways having the OP_IsUnique - ** opcode use the values stored within seems dangerous. However, since - ** we can be sure that no other temp registers have been allocated - ** since sqlite3ReleaseTempRange() was called, it is safe to do so. - */ - sqlite3VdbeAddOp4(v, OP_IsUnique, iIdx, j2, regRowid, pRegKey, P4_INT32); - sqlite3VdbeAddOp4(v, OP_Halt, SQLITE_CONSTRAINT, OE_Abort, 0, - "indexed columns are not unique", P4_STATIC); + if( pRight ){ + pRoot->pRight = pRight; + if( pRight->flags & EP_ExpCollate ){ + pRoot->flags |= EP_ExpCollate; + pRoot->pColl = pRight->pColl; + } + } + if( pLeft ){ + pRoot->pLeft = pLeft; + if( pLeft->flags & EP_ExpCollate ){ + pRoot->flags |= EP_ExpCollate; + pRoot->pColl = pLeft->pColl; + } + } + exprSetHeight(pRoot); } - sqlite3VdbeAddOp2(v, OP_IdxInsert, iIdx, regRecord); - sqlite3VdbeChangeP5(v, OPFLAG_USESEEKRESULT); - sqlite3ReleaseTempReg(pParse, regRecord); - sqlite3VdbeAddOp2(v, OP_Next, iTab, addr1+1); - sqlite3VdbeJumpHere(v, addr1); - sqlite3VdbeAddOp1(v, OP_Close, iTab); - sqlite3VdbeAddOp1(v, OP_Close, iIdx); } /* -** Create a new index for an SQL table. pName1.pName2 is the name of the index -** and pTblList is the name of the table that is to be indexed. Both will -** be NULL for a primary key or an index that is created to satisfy a -** UNIQUE constraint. If pTable and pIndex are NULL, use pParse->pNewTable -** as the table to be indexed. pParse->pNewTable is a table that is -** currently being constructed by a CREATE TABLE statement. +** Allocate a Expr node which joins as many as two subtrees. ** -** pList is a list of columns to be indexed. pList will be NULL if this -** is a primary key or unique-constraint on the most recent column added -** to the table currently under construction. +** One or both of the subtrees can be NULL. Return a pointer to the new +** Expr node. Or, if an OOM error occurs, set pParse->db->mallocFailed, +** free the subtrees and return NULL. */ -SQLITE_PRIVATE void sqlite3CreateIndex( - Parse *pParse, /* All information about this parse */ - Token *pName1, /* First part of index name. May be NULL */ - Token *pName2, /* Second part of index name. May be NULL */ - SrcList *pTblName, /* Table to index. Use pParse->pNewTable if 0 */ - ExprList *pList, /* A list of columns to be indexed */ - int onError, /* OE_Abort, OE_Ignore, OE_Replace, or OE_None */ - Token *pStart, /* The CREATE token that begins this statement */ - Token *pEnd, /* The ")" that closes the CREATE INDEX statement */ - int sortOrder, /* Sort order of primary key when pList==NULL */ - int ifNotExist /* Omit error if index already exists */ +SQLITE_PRIVATE Expr *sqlite3PExpr( + Parse *pParse, /* Parsing context */ + int op, /* Expression opcode */ + Expr *pLeft, /* Left operand */ + Expr *pRight, /* Right operand */ + const Token *pToken /* Argument token */ ){ - Table *pTab = 0; /* Table to be indexed */ - Index *pIndex = 0; /* The index to be created */ - char *zName = 0; /* Name of the index */ - int nName; /* Number of characters in zName */ - int i, j; - Token nullId; /* Fake token for an empty ID list */ - DbFixer sFix; /* For assigning database names to pTable */ - int sortOrderMask; /* 1 to honor DESC in index. 0 to ignore. */ - sqlite3 *db = pParse->db; - Db *pDb; /* The specific table containing the indexed database */ - int iDb; /* Index of the database that is being written */ - Token *pName = 0; /* Unqualified name of the index to create */ - struct ExprList_item *pListItem; /* For looping over pList */ - int nCol; - int nExtra = 0; - char *zExtra; - - assert( pStart==0 || pEnd!=0 ); /* pEnd must be non-NULL if pStart is */ - assert( pParse->nErr==0 ); /* Never called with prior errors */ - if( db->mallocFailed || IN_DECLARE_VTAB ){ - goto exit_create_index; + Expr *p; + if( op==TK_AND && pLeft && pRight ){ + /* Take advantage of short-circuit false optimization for AND */ + p = sqlite3ExprAnd(pParse->db, pLeft, pRight); + }else{ + p = sqlite3ExprAlloc(pParse->db, op, pToken, 1); + sqlite3ExprAttachSubtrees(pParse->db, p, pLeft, pRight); } - if( SQLITE_OK!=sqlite3ReadSchema(pParse) ){ - goto exit_create_index; + if( p ) { + sqlite3ExprCheckHeight(pParse, p->nHeight); } + return p; +} - /* - ** Find the table that is to be indexed. Return early if not found. - */ - if( pTblName!=0 ){ - - /* Use the two-part index name to determine the database - ** to search for the table. 'Fix' the table name to this db - ** before looking up the table. - */ - assert( pName1 && pName2 ); - iDb = sqlite3TwoPartName(pParse, pName1, pName2, &pName); - if( iDb<0 ) goto exit_create_index; - -#ifndef SQLITE_OMIT_TEMPDB - /* If the index name was unqualified, check if the the table - ** is a temp table. If so, set the database to 1. Do not do this - ** if initialising a database schema. - */ - if( !db->init.busy ){ - pTab = sqlite3SrcListLookup(pParse, pTblName); - if( pName2->n==0 && pTab && pTab->pSchema==db->aDb[1].pSchema ){ - iDb = 1; - } - } -#endif +/* +** Return 1 if an expression must be FALSE in all cases and 0 if the +** expression might be true. This is an optimization. If is OK to +** return 0 here even if the expression really is always false (a +** false negative). But it is a bug to return 1 if the expression +** might be true in some rare circumstances (a false positive.) +** +** Note that if the expression is part of conditional for a +** LEFT JOIN, then we cannot determine at compile-time whether or not +** is it true or false, so always return 0. +*/ +static int exprAlwaysFalse(Expr *p){ + int v = 0; + if( ExprHasProperty(p, EP_FromJoin) ) return 0; + if( !sqlite3ExprIsInteger(p, &v) ) return 0; + return v==0; +} - if( sqlite3FixInit(&sFix, pParse, iDb, "index", pName) && - sqlite3FixSrcList(&sFix, pTblName) - ){ - /* Because the parser constructs pTblName from a single identifier, - ** sqlite3FixSrcList can never fail. */ - assert(0); - } - pTab = sqlite3LocateTable(pParse, 0, pTblName->a[0].zName, - pTblName->a[0].zDatabase); - if( !pTab || db->mallocFailed ) goto exit_create_index; - assert( db->aDb[iDb].pSchema==pTab->pSchema ); +/* +** Join two expressions using an AND operator. If either expression is +** NULL, then just return the other expression. +** +** If one side or the other of the AND is known to be false, then instead +** of returning an AND expression, just return a constant expression with +** a value of false. +*/ +SQLITE_PRIVATE Expr *sqlite3ExprAnd(sqlite3 *db, Expr *pLeft, Expr *pRight){ + if( pLeft==0 ){ + return pRight; + }else if( pRight==0 ){ + return pLeft; + }else if( exprAlwaysFalse(pLeft) || exprAlwaysFalse(pRight) ){ + sqlite3ExprDelete(db, pLeft); + sqlite3ExprDelete(db, pRight); + return sqlite3ExprAlloc(db, TK_INTEGER, &sqlite3IntTokens[0], 0); }else{ - assert( pName==0 ); - pTab = pParse->pNewTable; - if( !pTab ) goto exit_create_index; - iDb = sqlite3SchemaToIndex(db, pTab->pSchema); + Expr *pNew = sqlite3ExprAlloc(db, TK_AND, 0, 0); + sqlite3ExprAttachSubtrees(db, pNew, pLeft, pRight); + return pNew; } - pDb = &db->aDb[iDb]; +} - assert( pTab!=0 ); - assert( pParse->nErr==0 ); - if( sqlite3StrNICmp(pTab->zName, "sqlite_", 7)==0 - && memcmp(&pTab->zName[7],"altertab_",9)!=0 ){ - sqlite3ErrorMsg(pParse, "table %s may not be indexed", pTab->zName); - goto exit_create_index; - } -#ifndef SQLITE_OMIT_VIEW - if( pTab->pSelect ){ - sqlite3ErrorMsg(pParse, "views may not be indexed"); - goto exit_create_index; - } -#endif -#ifndef SQLITE_OMIT_VIRTUALTABLE - if( IsVirtual(pTab) ){ - sqlite3ErrorMsg(pParse, "virtual tables may not be indexed"); - goto exit_create_index; +/* +** Construct a new expression node for a function with multiple +** arguments. +*/ +SQLITE_PRIVATE Expr *sqlite3ExprFunction(Parse *pParse, ExprList *pList, Token *pToken){ + Expr *pNew; + sqlite3 *db = pParse->db; + assert( pToken ); + pNew = sqlite3ExprAlloc(db, TK_FUNCTION, pToken, 1); + if( pNew==0 ){ + sqlite3ExprListDelete(db, pList); /* Avoid memory leak when malloc fails */ + return 0; } -#endif + pNew->x.pList = pList; + assert( !ExprHasProperty(pNew, EP_xIsSelect) ); + sqlite3ExprSetHeight(pParse, pNew); + return pNew; +} - /* - ** Find the name of the index. Make sure there is not already another - ** index or table with the same name. - ** - ** Exception: If we are reading the names of permanent indices from the - ** sqlite_master table (because some other process changed the schema) and - ** one of the index names collides with the name of a temporary table or - ** index, then we will continue to process this index. - ** - ** If pName==0 it means that we are - ** dealing with a primary key or UNIQUE constraint. We have to invent our - ** own name. - */ - if( pName ){ - zName = sqlite3NameFromToken(db, pName); - if( zName==0 ) goto exit_create_index; - if( SQLITE_OK!=sqlite3CheckObjectName(pParse, zName) ){ - goto exit_create_index; - } - if( !db->init.busy ){ - if( sqlite3FindTable(db, zName, 0)!=0 ){ - sqlite3ErrorMsg(pParse, "there is already a table named %s", zName); - goto exit_create_index; +/* +** Assign a variable number to an expression that encodes a wildcard +** in the original SQL statement. +** +** Wildcards consisting of a single "?" are assigned the next sequential +** variable number. +** +** Wildcards of the form "?nnn" are assigned the number "nnn". We make +** sure "nnn" is not too be to avoid a denial of service attack when +** the SQL statement comes from an external source. +** +** Wildcards of the form ":aaa", "@aaa", or "$aaa" are assigned the same number +** as the previous instance of the same wildcard. Or if this is the first +** instance of the wildcard, the next sequenial variable number is +** assigned. +*/ +SQLITE_PRIVATE void sqlite3ExprAssignVarNumber(Parse *pParse, Expr *pExpr){ + sqlite3 *db = pParse->db; + const char *z; + + if( pExpr==0 ) return; + assert( !ExprHasAnyProperty(pExpr, EP_IntValue|EP_Reduced|EP_TokenOnly) ); + z = pExpr->u.zToken; + assert( z!=0 ); + assert( z[0]!=0 ); + if( z[1]==0 ){ + /* Wildcard of the form "?". Assign the next variable number */ + assert( z[0]=='?' ); + pExpr->iColumn = (ynVar)(++pParse->nVar); + }else{ + ynVar x = 0; + u32 n = sqlite3Strlen30(z); + if( z[0]=='?' ){ + /* Wildcard of the form "?nnn". Convert "nnn" to an integer and + ** use it as the variable number */ + i64 i; + int bOk = 0==sqlite3Atoi64(&z[1], &i, n-1, SQLITE_UTF8); + pExpr->iColumn = x = (ynVar)i; + testcase( i==0 ); + testcase( i==1 ); + testcase( i==db->aLimit[SQLITE_LIMIT_VARIABLE_NUMBER]-1 ); + testcase( i==db->aLimit[SQLITE_LIMIT_VARIABLE_NUMBER] ); + if( bOk==0 || i<1 || i>db->aLimit[SQLITE_LIMIT_VARIABLE_NUMBER] ){ + sqlite3ErrorMsg(pParse, "variable number must be between ?1 and ?%d", + db->aLimit[SQLITE_LIMIT_VARIABLE_NUMBER]); + x = 0; + } + if( i>pParse->nVar ){ + pParse->nVar = (int)i; } - } - if( sqlite3FindIndex(db, zName, pDb->zName)!=0 ){ - if( !ifNotExist ){ - sqlite3ErrorMsg(pParse, "index %s already exists", zName); + }else{ + /* Wildcards like ":aaa", "$aaa" or "@aaa". Reuse the same variable + ** number as the prior appearance of the same name, or if the name + ** has never appeared before, reuse the same variable number + */ + ynVar i; + for(i=0; inzVar; i++){ + if( pParse->azVar[i] && memcmp(pParse->azVar[i],z,n+1)==0 ){ + pExpr->iColumn = x = (ynVar)i+1; + break; + } } - goto exit_create_index; + if( x==0 ) x = pExpr->iColumn = (ynVar)(++pParse->nVar); } - }else{ - int n; - Index *pLoop; - for(pLoop=pTab->pIndex, n=1; pLoop; pLoop=pLoop->pNext, n++){} - zName = sqlite3MPrintf(db, "sqlite_autoindex_%s_%d", pTab->zName, n); - if( zName==0 ){ - goto exit_create_index; + if( x>0 ){ + if( x>pParse->nzVar ){ + char **a; + a = sqlite3DbRealloc(db, pParse->azVar, x*sizeof(a[0])); + if( a==0 ) return; /* Error reported through db->mallocFailed */ + pParse->azVar = a; + memset(&a[pParse->nzVar], 0, (x-pParse->nzVar)*sizeof(a[0])); + pParse->nzVar = x; + } + if( z[0]!='?' || pParse->azVar[x-1]==0 ){ + sqlite3DbFree(db, pParse->azVar[x-1]); + pParse->azVar[x-1] = sqlite3DbStrNDup(db, z, n); + } } + } + if( !pParse->nErr && pParse->nVar>db->aLimit[SQLITE_LIMIT_VARIABLE_NUMBER] ){ + sqlite3ErrorMsg(pParse, "too many SQL variables"); } +} - /* Check for authorization to create an index. - */ -#ifndef SQLITE_OMIT_AUTHORIZATION - { - const char *zDb = pDb->zName; - if( sqlite3AuthCheck(pParse, SQLITE_INSERT, SCHEMA_TABLE(iDb), 0, zDb) ){ - goto exit_create_index; +/* +** Recursively delete an expression tree. +*/ +SQLITE_PRIVATE void sqlite3ExprDelete(sqlite3 *db, Expr *p){ + if( p==0 ) return; + /* Sanity check: Assert that the IntValue is non-negative if it exists */ + assert( !ExprHasProperty(p, EP_IntValue) || p->u.iValue>=0 ); + if( !ExprHasAnyProperty(p, EP_TokenOnly) ){ + sqlite3ExprDelete(db, p->pLeft); + sqlite3ExprDelete(db, p->pRight); + if( !ExprHasProperty(p, EP_Reduced) && (p->flags2 & EP2_MallocedToken)!=0 ){ + sqlite3DbFree(db, p->u.zToken); } - i = SQLITE_CREATE_INDEX; - if( !OMIT_TEMPDB && iDb==1 ) i = SQLITE_CREATE_TEMP_INDEX; - if( sqlite3AuthCheck(pParse, i, zName, pTab->zName, zDb) ){ - goto exit_create_index; + if( ExprHasProperty(p, EP_xIsSelect) ){ + sqlite3SelectDelete(db, p->x.pSelect); + }else{ + sqlite3ExprListDelete(db, p->x.pList); } } -#endif - - /* If pList==0, it means this routine was called to make a primary - ** key out of the last column added to the table under construction. - ** So create a fake list to simulate this. - */ - if( pList==0 ){ - nullId.z = pTab->aCol[pTab->nCol-1].zName; - nullId.n = sqlite3Strlen30((char*)nullId.z); - pList = sqlite3ExprListAppend(pParse, 0, 0); - if( pList==0 ) goto exit_create_index; - sqlite3ExprListSetName(pParse, pList, &nullId, 0); - pList->a[0].sortOrder = (u8)sortOrder; + if( !ExprHasProperty(p, EP_Static) ){ + sqlite3DbFree(db, p); } +} - /* Figure out how many bytes of space are required to store explicitly - ** specified collation sequence names. - */ - for(i=0; inExpr; i++){ - Expr *pExpr = pList->a[i].pExpr; - if( pExpr ){ - CollSeq *pColl = pExpr->pColl; - /* Either pColl!=0 or there was an OOM failure. But if an OOM - ** failure we have quit before reaching this point. */ - if( ALWAYS(pColl) ){ - nExtra += (1 + sqlite3Strlen30(pColl->zName)); - } +/* +** Return the number of bytes allocated for the expression structure +** passed as the first argument. This is always one of EXPR_FULLSIZE, +** EXPR_REDUCEDSIZE or EXPR_TOKENONLYSIZE. +*/ +static int exprStructSize(Expr *p){ + if( ExprHasProperty(p, EP_TokenOnly) ) return EXPR_TOKENONLYSIZE; + if( ExprHasProperty(p, EP_Reduced) ) return EXPR_REDUCEDSIZE; + return EXPR_FULLSIZE; +} + +/* +** The dupedExpr*Size() routines each return the number of bytes required +** to store a copy of an expression or expression tree. They differ in +** how much of the tree is measured. +** +** dupedExprStructSize() Size of only the Expr structure +** dupedExprNodeSize() Size of Expr + space for token +** dupedExprSize() Expr + token + subtree components +** +*************************************************************************** +** +** The dupedExprStructSize() function returns two values OR-ed together: +** (1) the space required for a copy of the Expr structure only and +** (2) the EP_xxx flags that indicate what the structure size should be. +** The return values is always one of: +** +** EXPR_FULLSIZE +** EXPR_REDUCEDSIZE | EP_Reduced +** EXPR_TOKENONLYSIZE | EP_TokenOnly +** +** The size of the structure can be found by masking the return value +** of this routine with 0xfff. The flags can be found by masking the +** return value with EP_Reduced|EP_TokenOnly. +** +** Note that with flags==EXPRDUP_REDUCE, this routines works on full-size +** (unreduced) Expr objects as they or originally constructed by the parser. +** During expression analysis, extra information is computed and moved into +** later parts of teh Expr object and that extra information might get chopped +** off if the expression is reduced. Note also that it does not work to +** make a EXPRDUP_REDUCE copy of a reduced expression. It is only legal +** to reduce a pristine expression tree from the parser. The implementation +** of dupedExprStructSize() contain multiple assert() statements that attempt +** to enforce this constraint. +*/ +static int dupedExprStructSize(Expr *p, int flags){ + int nSize; + assert( flags==EXPRDUP_REDUCE || flags==0 ); /* Only one flag value allowed */ + if( 0==(flags&EXPRDUP_REDUCE) ){ + nSize = EXPR_FULLSIZE; + }else{ + assert( !ExprHasAnyProperty(p, EP_TokenOnly|EP_Reduced) ); + assert( !ExprHasProperty(p, EP_FromJoin) ); + assert( (p->flags2 & EP2_MallocedToken)==0 ); + assert( (p->flags2 & EP2_Irreducible)==0 ); + if( p->pLeft || p->pRight || p->pColl || p->x.pList ){ + nSize = EXPR_REDUCEDSIZE | EP_Reduced; + }else{ + nSize = EXPR_TOKENONLYSIZE | EP_TokenOnly; } } + return nSize; +} - /* - ** Allocate the index structure. - */ - nName = sqlite3Strlen30(zName); - nCol = pList->nExpr; - pIndex = sqlite3DbMallocZero(db, - sizeof(Index) + /* Index structure */ - sizeof(int)*nCol + /* Index.aiColumn */ - sizeof(int)*(nCol+1) + /* Index.aiRowEst */ - sizeof(char *)*nCol + /* Index.azColl */ - sizeof(u8)*nCol + /* Index.aSortOrder */ - nName + 1 + /* Index.zName */ - nExtra /* Collation sequence names */ - ); - if( db->mallocFailed ){ - goto exit_create_index; +/* +** This function returns the space in bytes required to store the copy +** of the Expr structure and a copy of the Expr.u.zToken string (if that +** string is defined.) +*/ +static int dupedExprNodeSize(Expr *p, int flags){ + int nByte = dupedExprStructSize(p, flags) & 0xfff; + if( !ExprHasProperty(p, EP_IntValue) && p->u.zToken ){ + nByte += sqlite3Strlen30(p->u.zToken)+1; } - pIndex->azColl = (char**)(&pIndex[1]); - pIndex->aiColumn = (int *)(&pIndex->azColl[nCol]); - pIndex->aiRowEst = (unsigned *)(&pIndex->aiColumn[nCol]); - pIndex->aSortOrder = (u8 *)(&pIndex->aiRowEst[nCol+1]); - pIndex->zName = (char *)(&pIndex->aSortOrder[nCol]); - zExtra = (char *)(&pIndex->zName[nName+1]); - memcpy(pIndex->zName, zName, nName+1); - pIndex->pTable = pTab; - pIndex->nColumn = pList->nExpr; - pIndex->onError = (u8)onError; - pIndex->autoIndex = (u8)(pName==0); - pIndex->pSchema = db->aDb[iDb].pSchema; + return ROUND8(nByte); +} - /* Check to see if we should honor DESC requests on index columns - */ - if( pDb->pSchema->file_format>=4 ){ - sortOrderMask = -1; /* Honor DESC */ - }else{ - sortOrderMask = 0; /* Ignore DESC */ +/* +** Return the number of bytes required to create a duplicate of the +** expression passed as the first argument. The second argument is a +** mask containing EXPRDUP_XXX flags. +** +** The value returned includes space to create a copy of the Expr struct +** itself and the buffer referred to by Expr.u.zToken, if any. +** +** If the EXPRDUP_REDUCE flag is set, then the return value includes +** space to duplicate all Expr nodes in the tree formed by Expr.pLeft +** and Expr.pRight variables (but not for any structures pointed to or +** descended from the Expr.x.pList or Expr.x.pSelect variables). +*/ +static int dupedExprSize(Expr *p, int flags){ + int nByte = 0; + if( p ){ + nByte = dupedExprNodeSize(p, flags); + if( flags&EXPRDUP_REDUCE ){ + nByte += dupedExprSize(p->pLeft, flags) + dupedExprSize(p->pRight, flags); + } } + return nByte; +} - /* Scan the names of the columns of the table to be indexed and - ** load the column indices into the Index structure. Report an error - ** if any column is not found. - ** - ** TODO: Add a test to make sure that the same column is not named - ** more than once within the same index. Only the first instance of - ** the column will ever be used by the optimizer. Note that using the - ** same column more than once cannot be an error because that would - ** break backwards compatibility - it needs to be a warning. - */ - for(i=0, pListItem=pList->a; inExpr; i++, pListItem++){ - const char *zColName = pListItem->zName; - Column *pTabCol; - int requestedSortOrder; - char *zColl; /* Collation sequence name */ +/* +** This function is similar to sqlite3ExprDup(), except that if pzBuffer +** is not NULL then *pzBuffer is assumed to point to a buffer large enough +** to store the copy of expression p, the copies of p->u.zToken +** (if applicable), and the copies of the p->pLeft and p->pRight expressions, +** if any. Before returning, *pzBuffer is set to the first byte passed the +** portion of the buffer copied into by this function. +*/ +static Expr *exprDup(sqlite3 *db, Expr *p, int flags, u8 **pzBuffer){ + Expr *pNew = 0; /* Value to return */ + if( p ){ + const int isReduced = (flags&EXPRDUP_REDUCE); + u8 *zAlloc; + u32 staticFlag = 0; - for(j=0, pTabCol=pTab->aCol; jnCol; j++, pTabCol++){ - if( sqlite3StrICmp(zColName, pTabCol->zName)==0 ) break; - } - if( j>=pTab->nCol ){ - sqlite3ErrorMsg(pParse, "table %s has no column named %s", - pTab->zName, zColName); - goto exit_create_index; - } - pIndex->aiColumn[i] = j; - /* Justification of the ALWAYS(pListItem->pExpr->pColl): Because of - ** the way the "idxlist" non-terminal is constructed by the parser, - ** if pListItem->pExpr is not null then either pListItem->pExpr->pColl - ** must exist or else there must have been an OOM error. But if there - ** was an OOM error, we would never reach this point. */ - if( pListItem->pExpr && ALWAYS(pListItem->pExpr->pColl) ){ - int nColl; - zColl = pListItem->pExpr->pColl->zName; - nColl = sqlite3Strlen30(zColl) + 1; - assert( nExtra>=nColl ); - memcpy(zExtra, zColl, nColl); - zColl = zExtra; - zExtra += nColl; - nExtra -= nColl; + assert( pzBuffer==0 || isReduced ); + + /* Figure out where to write the new Expr structure. */ + if( pzBuffer ){ + zAlloc = *pzBuffer; + staticFlag = EP_Static; }else{ - zColl = pTab->aCol[j].zColl; - if( !zColl ){ - zColl = db->pDfltColl->zName; - } - } - if( !db->init.busy && !sqlite3LocateCollSeq(pParse, zColl) ){ - goto exit_create_index; + zAlloc = sqlite3DbMallocRaw(db, dupedExprSize(p, flags)); } - pIndex->azColl[i] = zColl; - requestedSortOrder = pListItem->sortOrder & sortOrderMask; - pIndex->aSortOrder[i] = (u8)requestedSortOrder; - } - sqlite3DefaultRowEst(pIndex); - - if( pTab==pParse->pNewTable ){ - /* This routine has been called to create an automatic index as a - ** result of a PRIMARY KEY or UNIQUE clause on a column definition, or - ** a PRIMARY KEY or UNIQUE clause following the column definitions. - ** i.e. one of: - ** - ** CREATE TABLE t(x PRIMARY KEY, y); - ** CREATE TABLE t(x, y, UNIQUE(x, y)); - ** - ** Either way, check to see if the table already has such an index. If - ** so, don't bother creating this one. This only applies to - ** automatically created indices. Users can do as they wish with - ** explicit indices. - ** - ** Two UNIQUE or PRIMARY KEY constraints are considered equivalent - ** (and thus suppressing the second one) even if they have different - ** sort orders. - ** - ** If there are different collating sequences or if the columns of - ** the constraint occur in different orders, then the constraints are - ** considered distinct and both result in separate indices. - */ - Index *pIdx; - for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){ - int k; - assert( pIdx->onError!=OE_None ); - assert( pIdx->autoIndex ); - assert( pIndex->onError!=OE_None ); + pNew = (Expr *)zAlloc; - if( pIdx->nColumn!=pIndex->nColumn ) continue; - for(k=0; knColumn; k++){ - const char *z1; - const char *z2; - if( pIdx->aiColumn[k]!=pIndex->aiColumn[k] ) break; - z1 = pIdx->azColl[k]; - z2 = pIndex->azColl[k]; - if( z1!=z2 && sqlite3StrICmp(z1, z2) ) break; + if( pNew ){ + /* Set nNewSize to the size allocated for the structure pointed to + ** by pNew. This is either EXPR_FULLSIZE, EXPR_REDUCEDSIZE or + ** EXPR_TOKENONLYSIZE. nToken is set to the number of bytes consumed + ** by the copy of the p->u.zToken string (if any). + */ + const unsigned nStructSize = dupedExprStructSize(p, flags); + const int nNewSize = nStructSize & 0xfff; + int nToken; + if( !ExprHasProperty(p, EP_IntValue) && p->u.zToken ){ + nToken = sqlite3Strlen30(p->u.zToken) + 1; + }else{ + nToken = 0; } - if( k==pIdx->nColumn ){ - if( pIdx->onError!=pIndex->onError ){ - /* This constraint creates the same index as a previous - ** constraint specified somewhere in the CREATE TABLE statement. - ** However the ON CONFLICT clauses are different. If both this - ** constraint and the previous equivalent constraint have explicit - ** ON CONFLICT clauses this is an error. Otherwise, use the - ** explicitly specified behaviour for the index. - */ - if( !(pIdx->onError==OE_Default || pIndex->onError==OE_Default) ){ - sqlite3ErrorMsg(pParse, - "conflicting ON CONFLICT clauses specified", 0); - } - if( pIdx->onError==OE_Default ){ - pIdx->onError = pIndex->onError; - } - } - goto exit_create_index; + if( isReduced ){ + assert( ExprHasProperty(p, EP_Reduced)==0 ); + memcpy(zAlloc, p, nNewSize); + }else{ + int nSize = exprStructSize(p); + memcpy(zAlloc, p, nSize); + memset(&zAlloc[nSize], 0, EXPR_FULLSIZE-nSize); } - } - } - - /* Link the new Index structure to its table and to the other - ** in-memory database structures. - */ - if( db->init.busy ){ - Index *p; - p = sqlite3HashInsert(&pIndex->pSchema->idxHash, - pIndex->zName, sqlite3Strlen30(pIndex->zName), - pIndex); - if( p ){ - assert( p==pIndex ); /* Malloc must have failed */ - db->mallocFailed = 1; - goto exit_create_index; - } - db->flags |= SQLITE_InternChanges; - if( pTblName!=0 ){ - pIndex->tnum = db->init.newTnum; - } - } - - /* If the db->init.busy is 0 then create the index on disk. This - ** involves writing the index into the master table and filling in the - ** index with the current table contents. - ** - ** The db->init.busy is 0 when the user first enters a CREATE INDEX - ** command. db->init.busy is 1 when a database is opened and - ** CREATE INDEX statements are read out of the master table. In - ** the latter case the index already exists on disk, which is why - ** we don't want to recreate it. - ** - ** If pTblName==0 it means this index is generated as a primary key - ** or UNIQUE constraint of a CREATE TABLE statement. Since the table - ** has just been created, it contains no data and the index initialization - ** step can be skipped. - */ - else{ /* if( db->init.busy==0 ) */ - Vdbe *v; - char *zStmt; - int iMem = ++pParse->nMem; - - v = sqlite3GetVdbe(pParse); - if( v==0 ) goto exit_create_index; - - - /* Create the rootpage for the index - */ - sqlite3BeginWriteOperation(pParse, 1, iDb); - sqlite3VdbeAddOp2(v, OP_CreateIndex, iDb, iMem); - /* Gather the complete text of the CREATE INDEX statement into - ** the zStmt variable - */ - if( pStart ){ - assert( pEnd!=0 ); - /* A named index with an explicit CREATE INDEX statement */ - zStmt = sqlite3MPrintf(db, "CREATE%s INDEX %.*s", - onError==OE_None ? "" : " UNIQUE", - pEnd->z - pName->z + 1, - pName->z); - }else{ - /* An automatic index created by a PRIMARY KEY or UNIQUE constraint */ - /* zStmt = sqlite3MPrintf(""); */ - zStmt = 0; - } + /* Set the EP_Reduced, EP_TokenOnly, and EP_Static flags appropriately. */ + pNew->flags &= ~(EP_Reduced|EP_TokenOnly|EP_Static); + pNew->flags |= nStructSize & (EP_Reduced|EP_TokenOnly); + pNew->flags |= staticFlag; - /* Add an entry in sqlite_master for this index - */ - sqlite3NestedParse(pParse, - "INSERT INTO %Q.%s VALUES('index',%Q,%Q,#%d,%Q);", - db->aDb[iDb].zName, SCHEMA_TABLE(iDb), - pIndex->zName, - pTab->zName, - iMem, - zStmt - ); - sqlite3DbFree(db, zStmt); + /* Copy the p->u.zToken string, if any. */ + if( nToken ){ + char *zToken = pNew->u.zToken = (char*)&zAlloc[nNewSize]; + memcpy(zToken, p->u.zToken, nToken); + } - /* Fill the index with data and reparse the schema. Code an OP_Expire - ** to invalidate all pre-compiled statements. - */ - if( pTblName ){ - sqlite3RefillIndex(pParse, pIndex, iMem); - sqlite3ChangeCookie(pParse, iDb); - sqlite3VdbeAddOp4(v, OP_ParseSchema, iDb, 0, 0, - sqlite3MPrintf(db, "name='%q'", pIndex->zName), P4_DYNAMIC); - sqlite3VdbeAddOp1(v, OP_Expire, 0); - } - } + if( 0==((p->flags|pNew->flags) & EP_TokenOnly) ){ + /* Fill in the pNew->x.pSelect or pNew->x.pList member. */ + if( ExprHasProperty(p, EP_xIsSelect) ){ + pNew->x.pSelect = sqlite3SelectDup(db, p->x.pSelect, isReduced); + }else{ + pNew->x.pList = sqlite3ExprListDup(db, p->x.pList, isReduced); + } + } - /* When adding an index to the list of indices for a table, make - ** sure all indices labeled OE_Replace come after all those labeled - ** OE_Ignore. This is necessary for the correct constraint check - ** processing (in sqlite3GenerateConstraintChecks()) as part of - ** UPDATE and INSERT statements. - */ - if( db->init.busy || pTblName==0 ){ - if( onError!=OE_Replace || pTab->pIndex==0 - || pTab->pIndex->onError==OE_Replace){ - pIndex->pNext = pTab->pIndex; - pTab->pIndex = pIndex; - }else{ - Index *pOther = pTab->pIndex; - while( pOther->pNext && pOther->pNext->onError!=OE_Replace ){ - pOther = pOther->pNext; + /* Fill in pNew->pLeft and pNew->pRight. */ + if( ExprHasAnyProperty(pNew, EP_Reduced|EP_TokenOnly) ){ + zAlloc += dupedExprNodeSize(p, flags); + if( ExprHasProperty(pNew, EP_Reduced) ){ + pNew->pLeft = exprDup(db, p->pLeft, EXPRDUP_REDUCE, &zAlloc); + pNew->pRight = exprDup(db, p->pRight, EXPRDUP_REDUCE, &zAlloc); + } + if( pzBuffer ){ + *pzBuffer = zAlloc; + } + }else{ + pNew->flags2 = 0; + if( !ExprHasAnyProperty(p, EP_TokenOnly) ){ + pNew->pLeft = sqlite3ExprDup(db, p->pLeft, 0); + pNew->pRight = sqlite3ExprDup(db, p->pRight, 0); + } } - pIndex->pNext = pOther->pNext; - pOther->pNext = pIndex; - } - pIndex = 0; - } - /* Clean up before exiting */ -exit_create_index: - if( pIndex ){ - sqlite3_free(pIndex->zColAff); - sqlite3DbFree(db, pIndex); + } } - sqlite3ExprListDelete(db, pList); - sqlite3SrcListDelete(db, pTblName); - sqlite3DbFree(db, zName); - return; + return pNew; } /* -** Fill the Index.aiRowEst[] array with default information - information -** to be used when we have not run the ANALYZE command. +** The following group of routines make deep copies of expressions, +** expression lists, ID lists, and select statements. The copies can +** be deleted (by being passed to their respective ...Delete() routines) +** without effecting the originals. ** -** aiRowEst[0] is suppose to contain the number of elements in the index. -** Since we do not know, guess 1 million. aiRowEst[1] is an estimate of the -** number of rows in the table that match any particular value of the -** first column of the index. aiRowEst[2] is an estimate of the number -** of rows that match any particular combiniation of the first 2 columns -** of the index. And so forth. It must always be the case that -* -** aiRowEst[N]<=aiRowEst[N-1] -** aiRowEst[N]>=1 +** The expression list, ID, and source lists return by sqlite3ExprListDup(), +** sqlite3IdListDup(), and sqlite3SrcListDup() can not be further expanded +** by subsequent calls to sqlite*ListAppend() routines. ** -** Apart from that, we have little to go on besides intuition as to -** how aiRowEst[] should be initialized. The numbers generated here -** are based on typical values found in actual indices. +** Any tables that the SrcList might point to are not duplicated. +** +** The flags parameter contains a combination of the EXPRDUP_XXX flags. +** If the EXPRDUP_REDUCE flag is set, then the structure returned is a +** truncated version of the usual Expr structure that will be stored as +** part of the in-memory representation of the database schema. */ -SQLITE_PRIVATE void sqlite3DefaultRowEst(Index *pIdx){ - unsigned *a = pIdx->aiRowEst; +SQLITE_PRIVATE Expr *sqlite3ExprDup(sqlite3 *db, Expr *p, int flags){ + return exprDup(db, p, flags, 0); +} +SQLITE_PRIVATE ExprList *sqlite3ExprListDup(sqlite3 *db, ExprList *p, int flags){ + ExprList *pNew; + struct ExprList_item *pItem, *pOldItem; int i; - assert( a!=0 ); - a[0] = 1000000; - for(i=pIdx->nColumn; i>=5; i--){ - a[i] = 5; - } - while( i>=1 ){ - a[i] = 11 - i; - i--; - } - if( pIdx->onError!=OE_None ){ - a[pIdx->nColumn] = 1; + if( p==0 ) return 0; + pNew = sqlite3DbMallocRaw(db, sizeof(*pNew) ); + if( pNew==0 ) return 0; + pNew->iECursor = 0; + pNew->nExpr = i = p->nExpr; + if( (flags & EXPRDUP_REDUCE)==0 ) for(i=1; inExpr; i+=i){} + pNew->a = pItem = sqlite3DbMallocRaw(db, i*sizeof(p->a[0]) ); + if( pItem==0 ){ + sqlite3DbFree(db, pNew); + return 0; + } + pOldItem = p->a; + for(i=0; inExpr; i++, pItem++, pOldItem++){ + Expr *pOldExpr = pOldItem->pExpr; + pItem->pExpr = sqlite3ExprDup(db, pOldExpr, flags); + pItem->zName = sqlite3DbStrDup(db, pOldItem->zName); + pItem->zSpan = sqlite3DbStrDup(db, pOldItem->zSpan); + pItem->sortOrder = pOldItem->sortOrder; + pItem->done = 0; + pItem->iOrderByCol = pOldItem->iOrderByCol; + pItem->iAlias = pOldItem->iAlias; } + return pNew; } /* -** This routine will drop an existing named index. This routine -** implements the DROP INDEX statement. +** If cursors, triggers, views and subqueries are all omitted from +** the build, then none of the following routines, except for +** sqlite3SelectDup(), can be called. sqlite3SelectDup() is sometimes +** called with a NULL argument. */ -SQLITE_PRIVATE void sqlite3DropIndex(Parse *pParse, SrcList *pName, int ifExists){ - Index *pIndex; - Vdbe *v; - sqlite3 *db = pParse->db; - int iDb; - - assert( pParse->nErr==0 ); /* Never called with prior errors */ - if( db->mallocFailed ){ - goto exit_drop_index; - } - assert( pName->nSrc==1 ); - if( SQLITE_OK!=sqlite3ReadSchema(pParse) ){ - goto exit_drop_index; - } - pIndex = sqlite3FindIndex(db, pName->a[0].zName, pName->a[0].zDatabase); - if( pIndex==0 ){ - if( !ifExists ){ - sqlite3ErrorMsg(pParse, "no such index: %S", pName, 0); +#if !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_TRIGGER) \ + || !defined(SQLITE_OMIT_SUBQUERY) +SQLITE_PRIVATE SrcList *sqlite3SrcListDup(sqlite3 *db, SrcList *p, int flags){ + SrcList *pNew; + int i; + int nByte; + if( p==0 ) return 0; + nByte = sizeof(*p) + (p->nSrc>0 ? sizeof(p->a[0]) * (p->nSrc-1) : 0); + pNew = sqlite3DbMallocRaw(db, nByte ); + if( pNew==0 ) return 0; + pNew->nSrc = pNew->nAlloc = p->nSrc; + for(i=0; inSrc; i++){ + struct SrcList_item *pNewItem = &pNew->a[i]; + struct SrcList_item *pOldItem = &p->a[i]; + Table *pTab; + pNewItem->zDatabase = sqlite3DbStrDup(db, pOldItem->zDatabase); + pNewItem->zName = sqlite3DbStrDup(db, pOldItem->zName); + pNewItem->zAlias = sqlite3DbStrDup(db, pOldItem->zAlias); + pNewItem->jointype = pOldItem->jointype; + pNewItem->iCursor = pOldItem->iCursor; + pNewItem->addrFillSub = pOldItem->addrFillSub; + pNewItem->regReturn = pOldItem->regReturn; + pNewItem->isCorrelated = pOldItem->isCorrelated; + pNewItem->zIndex = sqlite3DbStrDup(db, pOldItem->zIndex); + pNewItem->notIndexed = pOldItem->notIndexed; + pNewItem->pIndex = pOldItem->pIndex; + pTab = pNewItem->pTab = pOldItem->pTab; + if( pTab ){ + pTab->nRef++; } - pParse->checkSchema = 1; - goto exit_drop_index; + pNewItem->pSelect = sqlite3SelectDup(db, pOldItem->pSelect, flags); + pNewItem->pOn = sqlite3ExprDup(db, pOldItem->pOn, flags); + pNewItem->pUsing = sqlite3IdListDup(db, pOldItem->pUsing); + pNewItem->colUsed = pOldItem->colUsed; } - if( pIndex->autoIndex ){ - sqlite3ErrorMsg(pParse, "index associated with UNIQUE " - "or PRIMARY KEY constraint cannot be dropped", 0); - goto exit_drop_index; + return pNew; +} +SQLITE_PRIVATE IdList *sqlite3IdListDup(sqlite3 *db, IdList *p){ + IdList *pNew; + int i; + if( p==0 ) return 0; + pNew = sqlite3DbMallocRaw(db, sizeof(*pNew) ); + if( pNew==0 ) return 0; + pNew->nId = p->nId; + pNew->a = sqlite3DbMallocRaw(db, p->nId*sizeof(p->a[0]) ); + if( pNew->a==0 ){ + sqlite3DbFree(db, pNew); + return 0; } - iDb = sqlite3SchemaToIndex(db, pIndex->pSchema); -#ifndef SQLITE_OMIT_AUTHORIZATION - { - int code = SQLITE_DROP_INDEX; - Table *pTab = pIndex->pTable; - const char *zDb = db->aDb[iDb].zName; - const char *zTab = SCHEMA_TABLE(iDb); - if( sqlite3AuthCheck(pParse, SQLITE_DELETE, zTab, 0, zDb) ){ - goto exit_drop_index; - } - if( !OMIT_TEMPDB && iDb ) code = SQLITE_DROP_TEMP_INDEX; - if( sqlite3AuthCheck(pParse, code, pIndex->zName, pTab->zName, zDb) ){ - goto exit_drop_index; - } + /* Note that because the size of the allocation for p->a[] is not + ** necessarily a power of two, sqlite3IdListAppend() may not be called + ** on the duplicate created by this function. */ + for(i=0; inId; i++){ + struct IdList_item *pNewItem = &pNew->a[i]; + struct IdList_item *pOldItem = &p->a[i]; + pNewItem->zName = sqlite3DbStrDup(db, pOldItem->zName); + pNewItem->idx = pOldItem->idx; } + return pNew; +} +SQLITE_PRIVATE Select *sqlite3SelectDup(sqlite3 *db, Select *p, int flags){ + Select *pNew, *pPrior; + if( p==0 ) return 0; + pNew = sqlite3DbMallocRaw(db, sizeof(*p) ); + if( pNew==0 ) return 0; + pNew->pEList = sqlite3ExprListDup(db, p->pEList, flags); + pNew->pSrc = sqlite3SrcListDup(db, p->pSrc, flags); + pNew->pWhere = sqlite3ExprDup(db, p->pWhere, flags); + pNew->pGroupBy = sqlite3ExprListDup(db, p->pGroupBy, flags); + pNew->pHaving = sqlite3ExprDup(db, p->pHaving, flags); + pNew->pOrderBy = sqlite3ExprListDup(db, p->pOrderBy, flags); + pNew->op = p->op; + pNew->pPrior = pPrior = sqlite3SelectDup(db, p->pPrior, flags); + if( pPrior ) pPrior->pNext = pNew; + pNew->pNext = 0; + pNew->pLimit = sqlite3ExprDup(db, p->pLimit, flags); + pNew->pOffset = sqlite3ExprDup(db, p->pOffset, flags); + pNew->iLimit = 0; + pNew->iOffset = 0; + pNew->selFlags = p->selFlags & ~SF_UsesEphemeral; + pNew->pRightmost = 0; + pNew->addrOpenEphm[0] = -1; + pNew->addrOpenEphm[1] = -1; + pNew->addrOpenEphm[2] = -1; + return pNew; +} +#else +SQLITE_PRIVATE Select *sqlite3SelectDup(sqlite3 *db, Select *p, int flags){ + assert( p==0 ); + return 0; +} #endif - /* Generate code to remove the index and from the master table */ - v = sqlite3GetVdbe(pParse); - if( v ){ - sqlite3BeginWriteOperation(pParse, 1, iDb); - sqlite3NestedParse(pParse, - "DELETE FROM %Q.%s WHERE name=%Q", - db->aDb[iDb].zName, SCHEMA_TABLE(iDb), - pIndex->zName - ); - if( sqlite3FindTable(db, "sqlite_stat1", db->aDb[iDb].zName) ){ - sqlite3NestedParse(pParse, - "DELETE FROM %Q.sqlite_stat1 WHERE idx=%Q", - db->aDb[iDb].zName, pIndex->zName - ); - } - sqlite3ChangeCookie(pParse, iDb); - destroyRootPage(pParse, pIndex->tnum, iDb); - sqlite3VdbeAddOp4(v, OP_DropIndex, iDb, 0, 0, pIndex->zName, 0); - } - -exit_drop_index: - sqlite3SrcListDelete(db, pName); -} /* -** pArray is a pointer to an array of objects. Each object in the -** array is szEntry bytes in size. This routine allocates a new -** object on the end of the array. -** -** *pnEntry is the number of entries already in use. *pnAlloc is -** the previously allocated size of the array. initSize is the -** suggested initial array size allocation. -** -** The index of the new entry is returned in *pIdx. +** Add a new element to the end of an expression list. If pList is +** initially NULL, then create a new expression list. ** -** This routine returns a pointer to the array of objects. This -** might be the same as the pArray parameter or it might be a different -** pointer if the array was resized. +** If a memory allocation error occurs, the entire list is freed and +** NULL is returned. If non-NULL is returned, then it is guaranteed +** that the new entry was successfully appended. */ -SQLITE_PRIVATE void *sqlite3ArrayAllocate( - sqlite3 *db, /* Connection to notify of malloc failures */ - void *pArray, /* Array of objects. Might be reallocated */ - int szEntry, /* Size of each object in the array */ - int initSize, /* Suggested initial allocation, in elements */ - int *pnEntry, /* Number of objects currently in use */ - int *pnAlloc, /* Current size of the allocation, in elements */ - int *pIdx /* Write the index of a new slot here */ +SQLITE_PRIVATE ExprList *sqlite3ExprListAppend( + Parse *pParse, /* Parsing context */ + ExprList *pList, /* List to which to append. Might be NULL */ + Expr *pExpr /* Expression to be appended. Might be NULL */ ){ - char *z; - if( *pnEntry >= *pnAlloc ){ - void *pNew; - int newSize; - newSize = (*pnAlloc)*2 + initSize; - pNew = sqlite3DbRealloc(db, pArray, newSize*szEntry); - if( pNew==0 ){ - *pIdx = -1; - return pArray; + sqlite3 *db = pParse->db; + if( pList==0 ){ + pList = sqlite3DbMallocZero(db, sizeof(ExprList) ); + if( pList==0 ){ + goto no_mem; } - *pnAlloc = sqlite3DbMallocSize(db, pNew)/szEntry; - pArray = pNew; + pList->a = sqlite3DbMallocRaw(db, sizeof(pList->a[0])); + if( pList->a==0 ) goto no_mem; + }else if( (pList->nExpr & (pList->nExpr-1))==0 ){ + struct ExprList_item *a; + assert( pList->nExpr>0 ); + a = sqlite3DbRealloc(db, pList->a, pList->nExpr*2*sizeof(pList->a[0])); + if( a==0 ){ + goto no_mem; + } + pList->a = a; } - z = (char*)pArray; - memset(&z[*pnEntry * szEntry], 0, szEntry); - *pIdx = *pnEntry; - ++*pnEntry; - return pArray; + assert( pList->a!=0 ); + if( 1 ){ + struct ExprList_item *pItem = &pList->a[pList->nExpr++]; + memset(pItem, 0, sizeof(*pItem)); + pItem->pExpr = pExpr; + } + return pList; + +no_mem: + /* Avoid leaking memory if malloc has failed. */ + sqlite3ExprDelete(db, pExpr); + sqlite3ExprListDelete(db, pList); + return 0; } /* -** Append a new element to the given IdList. Create a new IdList if -** need be. +** Set the ExprList.a[].zName element of the most recently added item +** on the expression list. ** -** A new IdList is returned, or NULL if malloc() fails. +** pList might be NULL following an OOM error. But pName should never be +** NULL. If a memory allocation fails, the pParse->db->mallocFailed flag +** is set. */ -SQLITE_PRIVATE IdList *sqlite3IdListAppend(sqlite3 *db, IdList *pList, Token *pToken){ - int i; - if( pList==0 ){ - pList = sqlite3DbMallocZero(db, sizeof(IdList) ); - if( pList==0 ) return 0; - pList->nAlloc = 0; - } - pList->a = sqlite3ArrayAllocate( - db, - pList->a, - sizeof(pList->a[0]), - 5, - &pList->nId, - &pList->nAlloc, - &i - ); - if( i<0 ){ - sqlite3IdListDelete(db, pList); - return 0; +SQLITE_PRIVATE void sqlite3ExprListSetName( + Parse *pParse, /* Parsing context */ + ExprList *pList, /* List to which to add the span. */ + Token *pName, /* Name to be added */ + int dequote /* True to cause the name to be dequoted */ +){ + assert( pList!=0 || pParse->db->mallocFailed!=0 ); + if( pList ){ + struct ExprList_item *pItem; + assert( pList->nExpr>0 ); + pItem = &pList->a[pList->nExpr-1]; + assert( pItem->zName==0 ); + pItem->zName = sqlite3DbStrNDup(pParse->db, pName->z, pName->n); + if( dequote && pItem->zName ) sqlite3Dequote(pItem->zName); } - pList->a[i].zName = sqlite3NameFromToken(db, pToken); - return pList; } /* -** Delete an IdList. +** Set the ExprList.a[].zSpan element of the most recently added item +** on the expression list. +** +** pList might be NULL following an OOM error. But pSpan should never be +** NULL. If a memory allocation fails, the pParse->db->mallocFailed flag +** is set. */ -SQLITE_PRIVATE void sqlite3IdListDelete(sqlite3 *db, IdList *pList){ - int i; - if( pList==0 ) return; - for(i=0; inId; i++){ - sqlite3DbFree(db, pList->a[i].zName); +SQLITE_PRIVATE void sqlite3ExprListSetSpan( + Parse *pParse, /* Parsing context */ + ExprList *pList, /* List to which to add the span. */ + ExprSpan *pSpan /* The span to be added */ +){ + sqlite3 *db = pParse->db; + assert( pList!=0 || db->mallocFailed!=0 ); + if( pList ){ + struct ExprList_item *pItem = &pList->a[pList->nExpr-1]; + assert( pList->nExpr>0 ); + assert( db->mallocFailed || pItem->pExpr==pSpan->pExpr ); + sqlite3DbFree(db, pItem->zSpan); + pItem->zSpan = sqlite3DbStrNDup(db, (char*)pSpan->zStart, + (int)(pSpan->zEnd - pSpan->zStart)); } - sqlite3DbFree(db, pList->a); - sqlite3DbFree(db, pList); } /* -** Return the index in pList of the identifier named zId. Return -1 -** if not found. +** If the expression list pEList contains more than iLimit elements, +** leave an error message in pParse. */ -SQLITE_PRIVATE int sqlite3IdListIndex(IdList *pList, const char *zName){ - int i; - if( pList==0 ) return -1; - for(i=0; inId; i++){ - if( sqlite3StrICmp(pList->a[i].zName, zName)==0 ) return i; +SQLITE_PRIVATE void sqlite3ExprListCheckLength( + Parse *pParse, + ExprList *pEList, + const char *zObject +){ + int mx = pParse->db->aLimit[SQLITE_LIMIT_COLUMN]; + testcase( pEList && pEList->nExpr==mx ); + testcase( pEList && pEList->nExpr==mx+1 ); + if( pEList && pEList->nExpr>mx ){ + sqlite3ErrorMsg(pParse, "too many columns in %s", zObject); } - return -1; } /* -** Expand the space allocated for the given SrcList object by -** creating nExtra new slots beginning at iStart. iStart is zero based. -** New slots are zeroed. -** -** For example, suppose a SrcList initially contains two entries: A,B. -** To append 3 new entries onto the end, do this: -** -** sqlite3SrcListEnlarge(db, pSrclist, 3, 2); -** -** After the call above it would contain: A, B, nil, nil, nil. -** If the iStart argument had been 1 instead of 2, then the result -** would have been: A, nil, nil, nil, B. To prepend the new slots, -** the iStart value would be 0. The result then would -** be: nil, nil, nil, A, B. -** -** If a memory allocation fails the SrcList is unchanged. The -** db->mallocFailed flag will be set to true. +** Delete an entire expression list. */ -SQLITE_PRIVATE SrcList *sqlite3SrcListEnlarge( - sqlite3 *db, /* Database connection to notify of OOM errors */ - SrcList *pSrc, /* The SrcList to be enlarged */ - int nExtra, /* Number of new slots to add to pSrc->a[] */ - int iStart /* Index in pSrc->a[] of first new slot */ -){ +SQLITE_PRIVATE void sqlite3ExprListDelete(sqlite3 *db, ExprList *pList){ int i; - - /* Sanity checking on calling parameters */ - assert( iStart>=0 ); - assert( nExtra>=1 ); - assert( pSrc!=0 ); - assert( iStart<=pSrc->nSrc ); - - /* Allocate additional space if needed */ - if( pSrc->nSrc+nExtra>pSrc->nAlloc ){ - SrcList *pNew; - int nAlloc = pSrc->nSrc+nExtra; - int nGot; - pNew = sqlite3DbRealloc(db, pSrc, - sizeof(*pSrc) + (nAlloc-1)*sizeof(pSrc->a[0]) ); - if( pNew==0 ){ - assert( db->mallocFailed ); - return pSrc; - } - pSrc = pNew; - nGot = (sqlite3DbMallocSize(db, pNew) - sizeof(*pSrc))/sizeof(pSrc->a[0])+1; - pSrc->nAlloc = (u16)nGot; - } - - /* Move existing slots that come after the newly inserted slots - ** out of the way */ - for(i=pSrc->nSrc-1; i>=iStart; i--){ - pSrc->a[i+nExtra] = pSrc->a[i]; - } - pSrc->nSrc += (i16)nExtra; - - /* Zero the newly allocated slots */ - memset(&pSrc->a[iStart], 0, sizeof(pSrc->a[0])*nExtra); - for(i=iStart; ia[i].iCursor = -1; + struct ExprList_item *pItem; + if( pList==0 ) return; + assert( pList->a!=0 || pList->nExpr==0 ); + for(pItem=pList->a, i=0; inExpr; i++, pItem++){ + sqlite3ExprDelete(db, pItem->pExpr); + sqlite3DbFree(db, pItem->zName); + sqlite3DbFree(db, pItem->zSpan); } - - /* Return a pointer to the enlarged SrcList */ - return pSrc; + sqlite3DbFree(db, pList->a); + sqlite3DbFree(db, pList); } - /* -** Append a new table name to the given SrcList. Create a new SrcList if -** need be. A new entry is created in the SrcList even if pTable is NULL. -** -** A SrcList is returned, or NULL if there is an OOM error. The returned -** SrcList might be the same as the SrcList that was input or it might be -** a new one. If an OOM error does occurs, then the prior value of pList -** that is input to this routine is automatically freed. -** -** If pDatabase is not null, it means that the table has an optional -** database name prefix. Like this: "database.table". The pDatabase -** points to the table name and the pTable points to the database name. -** The SrcList.a[].zName field is filled with the table name which might -** come from pTable (if pDatabase is NULL) or from pDatabase. -** SrcList.a[].zDatabase is filled with the database name from pTable, -** or with NULL if no database is specified. -** -** In other words, if call like this: -** -** sqlite3SrcListAppend(D,A,B,0); -** -** Then B is a table name and the database name is unspecified. If called -** like this: -** -** sqlite3SrcListAppend(D,A,B,C); +** These routines are Walker callbacks. Walker.u.pi is a pointer +** to an integer. These routines are checking an expression to see +** if it is a constant. Set *Walker.u.pi to 0 if the expression is +** not constant. ** -** Then C is the table name and B is the database name. If C is defined -** then so is B. In other words, we never have a case where: +** These callback routines are used to implement the following: ** -** sqlite3SrcListAppend(D,A,0,C); +** sqlite3ExprIsConstant() +** sqlite3ExprIsConstantNotJoin() +** sqlite3ExprIsConstantOrFunction() ** -** Both pTable and pDatabase are assumed to be quoted. They are dequoted -** before being added to the SrcList. */ -SQLITE_PRIVATE SrcList *sqlite3SrcListAppend( - sqlite3 *db, /* Connection to notify of malloc failures */ - SrcList *pList, /* Append to this SrcList. NULL creates a new SrcList */ - Token *pTable, /* Table to append */ - Token *pDatabase /* Database of the table */ -){ - struct SrcList_item *pItem; - assert( pDatabase==0 || pTable!=0 ); /* Cannot have C without B */ - if( pList==0 ){ - pList = sqlite3DbMallocZero(db, sizeof(SrcList) ); - if( pList==0 ) return 0; - pList->nAlloc = 1; - } - pList = sqlite3SrcListEnlarge(db, pList, 1, pList->nSrc); - if( db->mallocFailed ){ - sqlite3SrcListDelete(db, pList); - return 0; - } - pItem = &pList->a[pList->nSrc-1]; - if( pDatabase && pDatabase->z==0 ){ - pDatabase = 0; +static int exprNodeIsConstant(Walker *pWalker, Expr *pExpr){ + + /* If pWalker->u.i is 3 then any term of the expression that comes from + ** the ON or USING clauses of a join disqualifies the expression + ** from being considered constant. */ + if( pWalker->u.i==3 && ExprHasAnyProperty(pExpr, EP_FromJoin) ){ + pWalker->u.i = 0; + return WRC_Abort; } - if( pDatabase ){ - Token *pTemp = pDatabase; - pDatabase = pTable; - pTable = pTemp; + + switch( pExpr->op ){ + /* Consider functions to be constant if all their arguments are constant + ** and pWalker->u.i==2 */ + case TK_FUNCTION: + if( pWalker->u.i==2 ) return 0; + /* Fall through */ + case TK_ID: + case TK_COLUMN: + case TK_AGG_FUNCTION: + case TK_AGG_COLUMN: + testcase( pExpr->op==TK_ID ); + testcase( pExpr->op==TK_COLUMN ); + testcase( pExpr->op==TK_AGG_FUNCTION ); + testcase( pExpr->op==TK_AGG_COLUMN ); + pWalker->u.i = 0; + return WRC_Abort; + default: + testcase( pExpr->op==TK_SELECT ); /* selectNodeIsConstant will disallow */ + testcase( pExpr->op==TK_EXISTS ); /* selectNodeIsConstant will disallow */ + return WRC_Continue; } - pItem->zName = sqlite3NameFromToken(db, pTable); - pItem->zDatabase = sqlite3NameFromToken(db, pDatabase); - return pList; +} +static int selectNodeIsConstant(Walker *pWalker, Select *NotUsed){ + UNUSED_PARAMETER(NotUsed); + pWalker->u.i = 0; + return WRC_Abort; +} +static int exprIsConst(Expr *p, int initFlag){ + Walker w; + w.u.i = initFlag; + w.xExprCallback = exprNodeIsConstant; + w.xSelectCallback = selectNodeIsConstant; + sqlite3WalkExpr(&w, p); + return w.u.i; } /* -** Assign VdbeCursor index numbers to all tables in a SrcList +** Walk an expression tree. Return 1 if the expression is constant +** and 0 if it involves variables or function calls. +** +** For the purposes of this function, a double-quoted string (ex: "abc") +** is considered a variable but a single-quoted string (ex: 'abc') is +** a constant. */ -SQLITE_PRIVATE void sqlite3SrcListAssignCursors(Parse *pParse, SrcList *pList){ - int i; - struct SrcList_item *pItem; - assert(pList || pParse->db->mallocFailed ); - if( pList ){ - for(i=0, pItem=pList->a; inSrc; i++, pItem++){ - if( pItem->iCursor>=0 ) break; - pItem->iCursor = pParse->nTab++; - if( pItem->pSelect ){ - sqlite3SrcListAssignCursors(pParse, pItem->pSelect->pSrc); - } - } - } +SQLITE_PRIVATE int sqlite3ExprIsConstant(Expr *p){ + return exprIsConst(p, 1); } /* -** Delete an entire SrcList including all its substructure. +** Walk an expression tree. Return 1 if the expression is constant +** that does no originate from the ON or USING clauses of a join. +** Return 0 if it involves variables or function calls or terms from +** an ON or USING clause. */ -SQLITE_PRIVATE void sqlite3SrcListDelete(sqlite3 *db, SrcList *pList){ - int i; - struct SrcList_item *pItem; - if( pList==0 ) return; - for(pItem=pList->a, i=0; inSrc; i++, pItem++){ - sqlite3DbFree(db, pItem->zDatabase); - sqlite3DbFree(db, pItem->zName); - sqlite3DbFree(db, pItem->zAlias); - sqlite3DbFree(db, pItem->zIndex); - sqlite3DeleteTable(pItem->pTab); - sqlite3SelectDelete(db, pItem->pSelect); - sqlite3ExprDelete(db, pItem->pOn); - sqlite3IdListDelete(db, pItem->pUsing); - } - sqlite3DbFree(db, pList); +SQLITE_PRIVATE int sqlite3ExprIsConstantNotJoin(Expr *p){ + return exprIsConst(p, 3); } /* -** This routine is called by the parser to add a new term to the -** end of a growing FROM clause. The "p" parameter is the part of -** the FROM clause that has already been constructed. "p" is NULL -** if this is the first term of the FROM clause. pTable and pDatabase -** are the name of the table and database named in the FROM clause term. -** pDatabase is NULL if the database name qualifier is missing - the -** usual case. If the term has a alias, then pAlias points to the -** alias token. If the term is a subquery, then pSubquery is the -** SELECT statement that the subquery encodes. The pTable and -** pDatabase parameters are NULL for subqueries. The pOn and pUsing -** parameters are the content of the ON and USING clauses. +** Walk an expression tree. Return 1 if the expression is constant +** or a function call with constant arguments. Return and 0 if there +** are any variables. ** -** Return a new SrcList which encodes is the FROM with the new -** term added. +** For the purposes of this function, a double-quoted string (ex: "abc") +** is considered a variable but a single-quoted string (ex: 'abc') is +** a constant. */ -SQLITE_PRIVATE SrcList *sqlite3SrcListAppendFromTerm( - Parse *pParse, /* Parsing context */ - SrcList *p, /* The left part of the FROM clause already seen */ - Token *pTable, /* Name of the table to add to the FROM clause */ - Token *pDatabase, /* Name of the database containing pTable */ - Token *pAlias, /* The right-hand side of the AS subexpression */ - Select *pSubquery, /* A subquery used in place of a table name */ - Expr *pOn, /* The ON clause of a join */ - IdList *pUsing /* The USING clause of a join */ -){ - struct SrcList_item *pItem; - sqlite3 *db = pParse->db; - p = sqlite3SrcListAppend(db, p, pTable, pDatabase); - if( p==0 || NEVER(p->nSrc==0) ){ - sqlite3ExprDelete(db, pOn); - sqlite3IdListDelete(db, pUsing); - sqlite3SelectDelete(db, pSubquery); - return p; - } - pItem = &p->a[p->nSrc-1]; - assert( pAlias!=0 ); - if( pAlias->n ){ - pItem->zAlias = sqlite3NameFromToken(db, pAlias); - } - pItem->pSelect = pSubquery; - pItem->pOn = pOn; - pItem->pUsing = pUsing; - return p; +SQLITE_PRIVATE int sqlite3ExprIsConstantOrFunction(Expr *p){ + return exprIsConst(p, 2); } /* -** Add an INDEXED BY or NOT INDEXED clause to the most recently added -** element of the source-list passed as the second argument. +** If the expression p codes a constant integer that is small enough +** to fit in a 32-bit integer, return 1 and put the value of the integer +** in *pValue. If the expression is not an integer or if it is too big +** to fit in a signed 32-bit integer, return 0 and leave *pValue unchanged. */ -SQLITE_PRIVATE void sqlite3SrcListIndexedBy(Parse *pParse, SrcList *p, Token *pIndexedBy){ - assert( pIndexedBy!=0 ); - if( p && ALWAYS(p->nSrc>0) ){ - struct SrcList_item *pItem = &p->a[p->nSrc-1]; - assert( pItem->notIndexed==0 && pItem->zIndex==0 ); - if( pIndexedBy->n==1 && !pIndexedBy->z ){ - /* A "NOT INDEXED" clause was supplied. See parse.y - ** construct "indexed_opt" for details. */ - pItem->notIndexed = 1; - }else{ - pItem->zIndex = sqlite3NameFromToken(pParse->db, pIndexedBy); +SQLITE_PRIVATE int sqlite3ExprIsInteger(Expr *p, int *pValue){ + int rc = 0; + + /* If an expression is an integer literal that fits in a signed 32-bit + ** integer, then the EP_IntValue flag will have already been set */ + assert( p->op!=TK_INTEGER || (p->flags & EP_IntValue)!=0 + || sqlite3GetInt32(p->u.zToken, &rc)==0 ); + + if( p->flags & EP_IntValue ){ + *pValue = p->u.iValue; + return 1; + } + switch( p->op ){ + case TK_UPLUS: { + rc = sqlite3ExprIsInteger(p->pLeft, pValue); + break; + } + case TK_UMINUS: { + int v; + if( sqlite3ExprIsInteger(p->pLeft, &v) ){ + *pValue = -v; + rc = 1; + } + break; } + default: break; } + return rc; } /* -** When building up a FROM clause in the parser, the join operator -** is initially attached to the left operand. But the code generator -** expects the join operator to be on the right operand. This routine -** Shifts all join operators from left to right for an entire FROM -** clause. -** -** Example: Suppose the join is like this: +** Return FALSE if there is no chance that the expression can be NULL. ** -** A natural cross join B +** If the expression might be NULL or if the expression is too complex +** to tell return TRUE. ** -** The operator is "natural cross join". The A and B operands are stored -** in p->a[0] and p->a[1], respectively. The parser initially stores the -** operator with A. This routine shifts that operator over to B. +** This routine is used as an optimization, to skip OP_IsNull opcodes +** when we know that a value cannot be NULL. Hence, a false positive +** (returning TRUE when in fact the expression can never be NULL) might +** be a small performance hit but is otherwise harmless. On the other +** hand, a false negative (returning FALSE when the result could be NULL) +** will likely result in an incorrect answer. So when in doubt, return +** TRUE. */ -SQLITE_PRIVATE void sqlite3SrcListShiftJoinType(SrcList *p){ - if( p && p->a ){ - int i; - for(i=p->nSrc-1; i>0; i--){ - p->a[i].jointype = p->a[i-1].jointype; - } - p->a[0].jointype = 0; +SQLITE_PRIVATE int sqlite3ExprCanBeNull(const Expr *p){ + u8 op; + while( p->op==TK_UPLUS || p->op==TK_UMINUS ){ p = p->pLeft; } + op = p->op; + if( op==TK_REGISTER ) op = p->op2; + switch( op ){ + case TK_INTEGER: + case TK_STRING: + case TK_FLOAT: + case TK_BLOB: + return 0; + default: + return 1; } } /* -** Begin a transaction +** Generate an OP_IsNull instruction that tests register iReg and jumps +** to location iDest if the value in iReg is NULL. The value in iReg +** was computed by pExpr. If we can look at pExpr at compile-time and +** determine that it can never generate a NULL, then the OP_IsNull operation +** can be omitted. */ -SQLITE_PRIVATE void sqlite3BeginTransaction(Parse *pParse, int type){ - sqlite3 *db; - Vdbe *v; - int i; - - assert( pParse!=0 ); - db = pParse->db; - assert( db!=0 ); -/* if( db->aDb[0].pBt==0 ) return; */ - if( sqlite3AuthCheck(pParse, SQLITE_TRANSACTION, "BEGIN", 0, 0) ){ - return; +SQLITE_PRIVATE void sqlite3ExprCodeIsNullJump( + Vdbe *v, /* The VDBE under construction */ + const Expr *pExpr, /* Only generate OP_IsNull if this expr can be NULL */ + int iReg, /* Test the value in this register for NULL */ + int iDest /* Jump here if the value is null */ +){ + if( sqlite3ExprCanBeNull(pExpr) ){ + sqlite3VdbeAddOp2(v, OP_IsNull, iReg, iDest); } - v = sqlite3GetVdbe(pParse); - if( !v ) return; - if( type!=TK_DEFERRED ){ - for(i=0; inDb; i++){ - sqlite3VdbeAddOp2(v, OP_Transaction, i, (type==TK_EXCLUSIVE)+1); - sqlite3VdbeUsesBtree(v, i); +} + +/* +** Return TRUE if the given expression is a constant which would be +** unchanged by OP_Affinity with the affinity given in the second +** argument. +** +** This routine is used to determine if the OP_Affinity operation +** can be omitted. When in doubt return FALSE. A false negative +** is harmless. A false positive, however, can result in the wrong +** answer. +*/ +SQLITE_PRIVATE int sqlite3ExprNeedsNoAffinityChange(const Expr *p, char aff){ + u8 op; + if( aff==SQLITE_AFF_NONE ) return 1; + while( p->op==TK_UPLUS || p->op==TK_UMINUS ){ p = p->pLeft; } + op = p->op; + if( op==TK_REGISTER ) op = p->op2; + switch( op ){ + case TK_INTEGER: { + return aff==SQLITE_AFF_INTEGER || aff==SQLITE_AFF_NUMERIC; + } + case TK_FLOAT: { + return aff==SQLITE_AFF_REAL || aff==SQLITE_AFF_NUMERIC; + } + case TK_STRING: { + return aff==SQLITE_AFF_TEXT; + } + case TK_BLOB: { + return 1; + } + case TK_COLUMN: { + assert( p->iTable>=0 ); /* p cannot be part of a CHECK constraint */ + return p->iColumn<0 + && (aff==SQLITE_AFF_INTEGER || aff==SQLITE_AFF_NUMERIC); + } + default: { + return 0; } } - sqlite3VdbeAddOp2(v, OP_AutoCommit, 0, 0); } /* -** Commit a transaction +** Return TRUE if the given string is a row-id column name. */ -SQLITE_PRIVATE void sqlite3CommitTransaction(Parse *pParse){ - sqlite3 *db; - Vdbe *v; - - assert( pParse!=0 ); - db = pParse->db; - assert( db!=0 ); -/* if( db->aDb[0].pBt==0 ) return; */ - if( sqlite3AuthCheck(pParse, SQLITE_TRANSACTION, "COMMIT", 0, 0) ){ - return; - } - v = sqlite3GetVdbe(pParse); - if( v ){ - sqlite3VdbeAddOp2(v, OP_AutoCommit, 1, 0); - } -} - -/* -** Rollback a transaction -*/ -SQLITE_PRIVATE void sqlite3RollbackTransaction(Parse *pParse){ - sqlite3 *db; - Vdbe *v; - - assert( pParse!=0 ); - db = pParse->db; - assert( db!=0 ); -/* if( db->aDb[0].pBt==0 ) return; */ - if( sqlite3AuthCheck(pParse, SQLITE_TRANSACTION, "ROLLBACK", 0, 0) ){ - return; - } - v = sqlite3GetVdbe(pParse); - if( v ){ - sqlite3VdbeAddOp2(v, OP_AutoCommit, 1, 1); - } +SQLITE_PRIVATE int sqlite3IsRowid(const char *z){ + if( sqlite3StrICmp(z, "_ROWID_")==0 ) return 1; + if( sqlite3StrICmp(z, "ROWID")==0 ) return 1; + if( sqlite3StrICmp(z, "OID")==0 ) return 1; + return 0; } /* -** This function is called by the parser when it parses a command to create, -** release or rollback an SQL savepoint. +** Return true if we are able to the IN operator optimization on a +** query of the form +** +** x IN (SELECT ...) +** +** Where the SELECT... clause is as specified by the parameter to this +** routine. +** +** The Select object passed in has already been preprocessed and no +** errors have been found. */ -SQLITE_PRIVATE void sqlite3Savepoint(Parse *pParse, int op, Token *pName){ - char *zName = sqlite3NameFromToken(pParse->db, pName); - if( zName ){ - Vdbe *v = sqlite3GetVdbe(pParse); -#ifndef SQLITE_OMIT_AUTHORIZATION - static const char *az[] = { "BEGIN", "RELEASE", "ROLLBACK" }; - assert( !SAVEPOINT_BEGIN && SAVEPOINT_RELEASE==1 && SAVEPOINT_ROLLBACK==2 ); -#endif - if( !v || sqlite3AuthCheck(pParse, SQLITE_SAVEPOINT, az[op], zName, 0) ){ - sqlite3DbFree(pParse->db, zName); - return; - } - sqlite3VdbeAddOp4(v, OP_Savepoint, op, 0, 0, zName, P4_DYNAMIC); +#ifndef SQLITE_OMIT_SUBQUERY +static int isCandidateForInOpt(Select *p){ + SrcList *pSrc; + ExprList *pEList; + Table *pTab; + if( p==0 ) return 0; /* right-hand side of IN is SELECT */ + if( p->pPrior ) return 0; /* Not a compound SELECT */ + if( p->selFlags & (SF_Distinct|SF_Aggregate) ){ + testcase( (p->selFlags & (SF_Distinct|SF_Aggregate))==SF_Distinct ); + testcase( (p->selFlags & (SF_Distinct|SF_Aggregate))==SF_Aggregate ); + return 0; /* No DISTINCT keyword and no aggregate functions */ } + assert( p->pGroupBy==0 ); /* Has no GROUP BY clause */ + if( p->pLimit ) return 0; /* Has no LIMIT clause */ + assert( p->pOffset==0 ); /* No LIMIT means no OFFSET */ + if( p->pWhere ) return 0; /* Has no WHERE clause */ + pSrc = p->pSrc; + assert( pSrc!=0 ); + if( pSrc->nSrc!=1 ) return 0; /* Single term in FROM clause */ + if( pSrc->a[0].pSelect ) return 0; /* FROM is not a subquery or view */ + pTab = pSrc->a[0].pTab; + if( NEVER(pTab==0) ) return 0; + assert( pTab->pSelect==0 ); /* FROM clause is not a view */ + if( IsVirtual(pTab) ) return 0; /* FROM clause not a virtual table */ + pEList = p->pEList; + if( pEList->nExpr!=1 ) return 0; /* One column in the result set */ + if( pEList->a[0].pExpr->op!=TK_COLUMN ) return 0; /* Result is a column */ + return 1; } +#endif /* SQLITE_OMIT_SUBQUERY */ /* -** Make sure the TEMP database is open and available for use. Return -** the number of errors. Leave any error messages in the pParse structure. +** Code an OP_Once instruction and allocate space for its flag. Return the +** address of the new instruction. */ -SQLITE_PRIVATE int sqlite3OpenTempDatabase(Parse *pParse){ - sqlite3 *db = pParse->db; - if( db->aDb[1].pBt==0 && !pParse->explain ){ - int rc; - static const int flags = - SQLITE_OPEN_READWRITE | - SQLITE_OPEN_CREATE | - SQLITE_OPEN_EXCLUSIVE | - SQLITE_OPEN_DELETEONCLOSE | - SQLITE_OPEN_TEMP_DB; - - rc = sqlite3BtreeFactory(db, 0, 0, SQLITE_DEFAULT_CACHE_SIZE, flags, - &db->aDb[1].pBt); - if( rc!=SQLITE_OK ){ - sqlite3ErrorMsg(pParse, "unable to open a temporary database " - "file for storing temporary tables"); - pParse->rc = rc; - return 1; - } - assert( (db->flags & SQLITE_InTrans)==0 || db->autoCommit ); - assert( db->aDb[1].pSchema ); - sqlite3PagerJournalMode(sqlite3BtreePager(db->aDb[1].pBt), - db->dfltJournalMode); - } - return 0; +SQLITE_PRIVATE int sqlite3CodeOnce(Parse *pParse){ + Vdbe *v = sqlite3GetVdbe(pParse); /* Virtual machine being coded */ + return sqlite3VdbeAddOp1(v, OP_Once, pParse->nOnce++); } /* -** Generate VDBE code that will verify the schema cookie and start -** a read-transaction for all named database files. +** This function is used by the implementation of the IN (...) operator. +** It's job is to find or create a b-tree structure that may be used +** either to test for membership of the (...) set or to iterate through +** its members, skipping duplicates. ** -** It is important that all schema cookies be verified and all -** read transactions be started before anything else happens in -** the VDBE program. But this routine can be called after much other -** code has been generated. So here is what we do: +** The index of the cursor opened on the b-tree (database table, database index +** or ephermal table) is stored in pX->iTable before this function returns. +** The returned value of this function indicates the b-tree type, as follows: ** -** The first time this routine is called, we code an OP_Goto that -** will jump to a subroutine at the end of the program. Then we -** record every database that needs its schema verified in the -** pParse->cookieMask field. Later, after all other code has been -** generated, the subroutine that does the cookie verifications and -** starts the transactions will be coded and the OP_Goto P2 value -** will be made to point to that subroutine. The generation of the -** cookie verification subroutine code happens in sqlite3FinishCoding(). +** IN_INDEX_ROWID - The cursor was opened on a database table. +** IN_INDEX_INDEX - The cursor was opened on a database index. +** IN_INDEX_EPH - The cursor was opened on a specially created and +** populated epheremal table. ** -** If iDb<0 then code the OP_Goto only - don't set flag to verify the -** schema on any databases. This can be used to position the OP_Goto -** early in the code, before we know if any database tables will be used. -*/ -SQLITE_PRIVATE void sqlite3CodeVerifySchema(Parse *pParse, int iDb){ - sqlite3 *db; - Vdbe *v; - int mask; - - v = sqlite3GetVdbe(pParse); - if( v==0 ) return; /* This only happens if there was a prior error */ - db = pParse->db; - if( pParse->cookieGoto==0 ){ - pParse->cookieGoto = sqlite3VdbeAddOp2(v, OP_Goto, 0, 0)+1; - } - if( iDb>=0 ){ - assert( iDbnDb ); - assert( db->aDb[iDb].pBt!=0 || iDb==1 ); - assert( iDbcookieMask & mask)==0 ){ - pParse->cookieMask |= mask; - pParse->cookieValue[iDb] = db->aDb[iDb].pSchema->schema_cookie; - if( !OMIT_TEMPDB && iDb==1 ){ - sqlite3OpenTempDatabase(pParse); - } - } - } -} - -/* -** Generate VDBE code that prepares for doing an operation that -** might change the database. +** An existing b-tree may only be used if the SELECT is of the simple +** form: ** -** This routine starts a new transaction if we are not already within -** a transaction. If we are already within a transaction, then a checkpoint -** is set if the setStatement parameter is true. A checkpoint should -** be set for operations that might fail (due to a constraint) part of -** the way through and which will need to undo some writes without having to -** rollback the whole transaction. For operations where all constraints -** can be checked before any changes are made to the database, it is never -** necessary to undo a write and the checkpoint should not be set. +** SELECT FROM
    +** +** If the prNotFound parameter is 0, then the b-tree will be used to iterate +** through the set members, skipping any duplicates. In this case an +** epheremal table must be used unless the selected is guaranteed +** to be unique - either because it is an INTEGER PRIMARY KEY or it +** has a UNIQUE constraint or UNIQUE index. +** +** If the prNotFound parameter is not 0, then the b-tree will be used +** for fast set membership tests. In this case an epheremal table must +** be used unless is an INTEGER PRIMARY KEY or an index can +** be found with as its left-most column. +** +** When the b-tree is being used for membership tests, the calling function +** needs to know whether or not the structure contains an SQL NULL +** value in order to correctly evaluate expressions like "X IN (Y, Z)". +** If there is any chance that the (...) might contain a NULL value at +** runtime, then a register is allocated and the register number written +** to *prNotFound. If there is no chance that the (...) contains a +** NULL value, then *prNotFound is left unchanged. +** +** If a register is allocated and its location stored in *prNotFound, then +** its initial value is NULL. If the (...) does not remain constant +** for the duration of the query (i.e. the SELECT within the (...) +** is a correlated subquery) then the value of the allocated register is +** reset to NULL each time the subquery is rerun. This allows the +** caller to use vdbe code equivalent to the following: +** +** if( register==NULL ){ +** has_null = +** register = 1 +** } +** +** in order to avoid running the +** test more often than is necessary. */ -SQLITE_PRIVATE void sqlite3BeginWriteOperation(Parse *pParse, int setStatement, int iDb){ - sqlite3CodeVerifySchema(pParse, iDb); - pParse->writeMask |= 1<nested==0 ){ - /* Every place where this routine is called with setStatement!=0 has - ** already successfully created a VDBE. */ - assert( pParse->pVdbe ); - sqlite3VdbeAddOp1(pParse->pVdbe, OP_Statement, iDb); - } -} +#ifndef SQLITE_OMIT_SUBQUERY +SQLITE_PRIVATE int sqlite3FindInIndex(Parse *pParse, Expr *pX, int *prNotFound){ + Select *p; /* SELECT to the right of IN operator */ + int eType = 0; /* Type of RHS table. IN_INDEX_* */ + int iTab = pParse->nTab++; /* Cursor of the RHS table */ + int mustBeUnique = (prNotFound==0); /* True if RHS must be unique */ + Vdbe *v = sqlite3GetVdbe(pParse); /* Virtual machine being coded */ -/* -** Check to see if pIndex uses the collating sequence pColl. Return -** true if it does and false if it does not. -*/ -#ifndef SQLITE_OMIT_REINDEX -static int collationMatch(const char *zColl, Index *pIndex){ - int i; - assert( zColl!=0 ); - for(i=0; inColumn; i++){ - const char *z = pIndex->azColl[i]; - assert( z!=0 ); - if( 0==sqlite3StrICmp(z, zColl) ){ - return 1; - } - } - return 0; -} -#endif + assert( pX->op==TK_IN ); -/* -** Recompute all indices of pTab that use the collating sequence pColl. -** If pColl==0 then recompute all indices of pTab. -*/ -#ifndef SQLITE_OMIT_REINDEX -static void reindexTable(Parse *pParse, Table *pTab, char const *zColl){ - Index *pIndex; /* An index associated with pTab */ + /* Check to see if an existing table or index can be used to + ** satisfy the query. This is preferable to generating a new + ** ephemeral table. + */ + p = (ExprHasProperty(pX, EP_xIsSelect) ? pX->x.pSelect : 0); + if( ALWAYS(pParse->nErr==0) && isCandidateForInOpt(p) ){ + sqlite3 *db = pParse->db; /* Database connection */ + Table *pTab; /* Table
    . */ + Expr *pExpr; /* Expression */ + int iCol; /* Index of column */ + int iDb; /* Database idx for pTab */ - for(pIndex=pTab->pIndex; pIndex; pIndex=pIndex->pNext){ - if( zColl==0 || collationMatch(zColl, pIndex) ){ - int iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema); - sqlite3BeginWriteOperation(pParse, 0, iDb); - sqlite3RefillIndex(pParse, pIndex, -1); - } - } -} -#endif + assert( p ); /* Because of isCandidateForInOpt(p) */ + assert( p->pEList!=0 ); /* Because of isCandidateForInOpt(p) */ + assert( p->pEList->a[0].pExpr!=0 ); /* Because of isCandidateForInOpt(p) */ + assert( p->pSrc!=0 ); /* Because of isCandidateForInOpt(p) */ + pTab = p->pSrc->a[0].pTab; + pExpr = p->pEList->a[0].pExpr; + iCol = pExpr->iColumn; + + /* Code an OP_VerifyCookie and OP_TableLock for
    . */ + iDb = sqlite3SchemaToIndex(db, pTab->pSchema); + sqlite3CodeVerifySchema(pParse, iDb); + sqlite3TableLock(pParse, iDb, pTab->tnum, 0, pTab->zName); -/* -** Recompute all indices of all tables in all databases where the -** indices use the collating sequence pColl. If pColl==0 then recompute -** all indices everywhere. -*/ -#ifndef SQLITE_OMIT_REINDEX -static void reindexDatabases(Parse *pParse, char const *zColl){ - Db *pDb; /* A single database */ - int iDb; /* The database index number */ - sqlite3 *db = pParse->db; /* The database connection */ - HashElem *k; /* For looping over tables in pDb */ - Table *pTab; /* A table in the database */ + /* This function is only called from two places. In both cases the vdbe + ** has already been allocated. So assume sqlite3GetVdbe() is always + ** successful here. + */ + assert(v); + if( iCol<0 ){ + int iAddr; - for(iDb=0, pDb=db->aDb; iDbnDb; iDb++, pDb++){ - assert( pDb!=0 ); - for(k=sqliteHashFirst(&pDb->pSchema->tblHash); k; k=sqliteHashNext(k)){ - pTab = (Table*)sqliteHashData(k); - reindexTable(pParse, pTab, zColl); - } - } -} -#endif + iAddr = sqlite3CodeOnce(pParse); -/* -** Generate code for the REINDEX command. -** -** REINDEX -- 1 -** REINDEX -- 2 -** REINDEX ?.? -- 3 -** REINDEX ?.? -- 4 -** -** Form 1 causes all indices in all attached databases to be rebuilt. -** Form 2 rebuilds all indices in all databases that use the named -** collating function. Forms 3 and 4 rebuild the named index or all -** indices associated with the named table. -*/ -#ifndef SQLITE_OMIT_REINDEX -SQLITE_PRIVATE void sqlite3Reindex(Parse *pParse, Token *pName1, Token *pName2){ - CollSeq *pColl; /* Collating sequence to be reindexed, or NULL */ - char *z; /* Name of a table or index */ - const char *zDb; /* Name of the database */ - Table *pTab; /* A table in the database */ - Index *pIndex; /* An index associated with pTab */ - int iDb; /* The database index number */ - sqlite3 *db = pParse->db; /* The database connection */ - Token *pObjName; /* Name of the table or index to be reindexed */ + sqlite3OpenTable(pParse, iTab, iDb, pTab, OP_OpenRead); + eType = IN_INDEX_ROWID; - /* Read the database schema. If an error occurs, leave an error message - ** and code in pParse and return NULL. */ - if( SQLITE_OK!=sqlite3ReadSchema(pParse) ){ - return; - } + sqlite3VdbeJumpHere(v, iAddr); + }else{ + Index *pIdx; /* Iterator variable */ - if( pName1==0 ){ - reindexDatabases(pParse, 0); - return; - }else if( NEVER(pName2==0) || pName2->z==0 ){ - char *zColl; - assert( pName1->z ); - zColl = sqlite3NameFromToken(pParse->db, pName1); - if( !zColl ) return; - pColl = sqlite3FindCollSeq(db, ENC(db), zColl, 0); - if( pColl ){ - reindexDatabases(pParse, zColl); - sqlite3DbFree(db, zColl); - return; - } - sqlite3DbFree(db, zColl); - } - iDb = sqlite3TwoPartName(pParse, pName1, pName2, &pObjName); - if( iDb<0 ) return; - z = sqlite3NameFromToken(db, pObjName); - if( z==0 ) return; - zDb = db->aDb[iDb].zName; - pTab = sqlite3FindTable(db, z, zDb); - if( pTab ){ - reindexTable(pParse, pTab, 0); - sqlite3DbFree(db, z); - return; - } - pIndex = sqlite3FindIndex(db, z, zDb); - sqlite3DbFree(db, z); - if( pIndex ){ - sqlite3BeginWriteOperation(pParse, 0, iDb); - sqlite3RefillIndex(pParse, pIndex, -1); - return; - } - sqlite3ErrorMsg(pParse, "unable to identify the object to be reindexed"); -} -#endif + /* The collation sequence used by the comparison. If an index is to + ** be used in place of a temp-table, it must be ordered according + ** to this collation sequence. */ + CollSeq *pReq = sqlite3BinaryCompareCollSeq(pParse, pX->pLeft, pExpr); -/* -** Return a dynamicly allocated KeyInfo structure that can be used -** with OP_OpenRead or OP_OpenWrite to access database index pIdx. -** -** If successful, a pointer to the new structure is returned. In this case -** the caller is responsible for calling sqlite3DbFree(db, ) on the returned -** pointer. If an error occurs (out of memory or missing collation -** sequence), NULL is returned and the state of pParse updated to reflect -** the error. -*/ -SQLITE_PRIVATE KeyInfo *sqlite3IndexKeyinfo(Parse *pParse, Index *pIdx){ - int i; - int nCol = pIdx->nColumn; - int nBytes = sizeof(KeyInfo) + (nCol-1)*sizeof(CollSeq*) + nCol; - sqlite3 *db = pParse->db; - KeyInfo *pKey = (KeyInfo *)sqlite3DbMallocZero(db, nBytes); + /* Check that the affinity that will be used to perform the + ** comparison is the same as the affinity of the column. If + ** it is not, it is not possible to use any index. + */ + char aff = comparisonAffinity(pX); + int affinity_ok = (pTab->aCol[iCol].affinity==aff||aff==SQLITE_AFF_NONE); - if( pKey ){ - pKey->db = pParse->db; - pKey->aSortOrder = (u8 *)&(pKey->aColl[nCol]); - assert( &pKey->aSortOrder[nCol]==&(((u8 *)pKey)[nBytes]) ); - for(i=0; iazColl[i]; - assert( zColl ); - pKey->aColl[i] = sqlite3LocateCollSeq(pParse, zColl); - pKey->aSortOrder[i] = pIdx->aSortOrder[i]; + for(pIdx=pTab->pIndex; pIdx && eType==0 && affinity_ok; pIdx=pIdx->pNext){ + if( (pIdx->aiColumn[0]==iCol) + && sqlite3FindCollSeq(db, ENC(db), pIdx->azColl[0], 0)==pReq + && (!mustBeUnique || (pIdx->nColumn==1 && pIdx->onError!=OE_None)) + ){ + int iAddr; + char *pKey; + + pKey = (char *)sqlite3IndexKeyinfo(pParse, pIdx); + iAddr = sqlite3CodeOnce(pParse); + + sqlite3VdbeAddOp4(v, OP_OpenRead, iTab, pIdx->tnum, iDb, + pKey,P4_KEYINFO_HANDOFF); + VdbeComment((v, "%s", pIdx->zName)); + eType = IN_INDEX_INDEX; + + sqlite3VdbeJumpHere(v, iAddr); + if( prNotFound && !pTab->aCol[iCol].notNull ){ + *prNotFound = ++pParse->nMem; + sqlite3VdbeAddOp2(v, OP_Null, 0, *prNotFound); + } + } + } } - pKey->nField = (u16)nCol; } - if( pParse->nErr ){ - sqlite3DbFree(db, pKey); - pKey = 0; + if( eType==0 ){ + /* Could not found an existing table or index to use as the RHS b-tree. + ** We will have to generate an ephemeral table to do the job. + */ + double savedNQueryLoop = pParse->nQueryLoop; + int rMayHaveNull = 0; + eType = IN_INDEX_EPH; + if( prNotFound ){ + *prNotFound = rMayHaveNull = ++pParse->nMem; + sqlite3VdbeAddOp2(v, OP_Null, 0, *prNotFound); + }else{ + testcase( pParse->nQueryLoop>(double)1 ); + pParse->nQueryLoop = (double)1; + if( pX->pLeft->iColumn<0 && !ExprHasAnyProperty(pX, EP_xIsSelect) ){ + eType = IN_INDEX_ROWID; + } + } + sqlite3CodeSubselect(pParse, pX, rMayHaveNull, eType==IN_INDEX_ROWID); + pParse->nQueryLoop = savedNQueryLoop; + }else{ + pX->iTable = iTab; } - return pKey; + return eType; } +#endif -/************** End of build.c ***********************************************/ -/************** Begin file callback.c ****************************************/ /* -** 2005 May 23 +** Generate code for scalar subqueries used as a subquery expression, EXISTS, +** or IN operators. Examples: ** -** The author disclaims copyright to this source code. In place of -** a legal notice, here is a blessing: +** (SELECT a FROM b) -- subquery +** EXISTS (SELECT a FROM b) -- EXISTS subquery +** x IN (4,5,11) -- IN operator with list on right-hand side +** x IN (SELECT a FROM b) -- IN operator with subquery on the right ** -** May you do good and not evil. -** May you find forgiveness for yourself and forgive others. -** May you share freely, never taking more than you give. +** The pExpr parameter describes the expression that contains the IN +** operator or subquery. ** -************************************************************************* +** If parameter isRowid is non-zero, then expression pExpr is guaranteed +** to be of the form " IN (?, ?, ?)", where is a reference +** to some integer key column of a table B-Tree. In this case, use an +** intkey B-Tree to store the set of IN(...) values instead of the usual +** (slower) variable length keys B-Tree. ** -** This file contains functions used to access the internal hash tables -** of user defined functions and collation sequences. +** If rMayHaveNull is non-zero, that means that the operation is an IN +** (not a SELECT or EXISTS) and that the RHS might contains NULLs. +** Furthermore, the IN is in a WHERE clause and that we really want +** to iterate over the RHS of the IN operator in order to quickly locate +** all corresponding LHS elements. All this routine does is initialize +** the register given by rMayHaveNull to NULL. Calling routines will take +** care of changing this register value to non-NULL if the RHS is NULL-free. ** -** $Id: callback.c,v 1.42 2009/06/17 00:35:31 drh Exp $ +** If rMayHaveNull is zero, that means that the subquery is being used +** for membership testing only. There is no need to initialize any +** registers to indicate the presense or absence of NULLs on the RHS. +** +** For a SELECT or EXISTS operator, return the register that holds the +** result. For IN operators or if an error occurs, the return value is 0. */ +#ifndef SQLITE_OMIT_SUBQUERY +SQLITE_PRIVATE int sqlite3CodeSubselect( + Parse *pParse, /* Parsing context */ + Expr *pExpr, /* The IN, SELECT, or EXISTS operator */ + int rMayHaveNull, /* Register that records whether NULLs exist in RHS */ + int isRowid /* If true, LHS of IN operator is a rowid */ +){ + int testAddr = -1; /* One-time test address */ + int rReg = 0; /* Register storing resulting */ + Vdbe *v = sqlite3GetVdbe(pParse); + if( NEVER(v==0) ) return 0; + sqlite3ExprCachePush(pParse); - -/* -** Invoke the 'collation needed' callback to request a collation sequence -** in the database text encoding of name zName, length nName. -** If the collation sequence -*/ -static void callCollNeeded(sqlite3 *db, const char *zName){ - assert( !db->xCollNeeded || !db->xCollNeeded16 ); - if( db->xCollNeeded ){ - char *zExternal = sqlite3DbStrDup(db, zName); - if( !zExternal ) return; - db->xCollNeeded(db->pCollNeededArg, db, (int)ENC(db), zExternal); - sqlite3DbFree(db, zExternal); + /* This code must be run in its entirety every time it is encountered + ** if any of the following is true: + ** + ** * The right-hand side is a correlated subquery + ** * The right-hand side is an expression list containing variables + ** * We are inside a trigger + ** + ** If all of the above are false, then we can run this code just once + ** save the results, and reuse the same result on subsequent invocations. + */ + if( !ExprHasAnyProperty(pExpr, EP_VarSelect) ){ + testAddr = sqlite3CodeOnce(pParse); } -#ifndef SQLITE_OMIT_UTF16 - if( db->xCollNeeded16 ){ - char const *zExternal; - sqlite3_value *pTmp = sqlite3ValueNew(db); - sqlite3ValueSetStr(pTmp, -1, zName, SQLITE_UTF8, SQLITE_STATIC); - zExternal = sqlite3ValueText(pTmp, SQLITE_UTF16NATIVE); - if( zExternal ){ - db->xCollNeeded16(db->pCollNeededArg, db, (int)ENC(db), zExternal); - } - sqlite3ValueFree(pTmp); + +#ifndef SQLITE_OMIT_EXPLAIN + if( pParse->explain==2 ){ + char *zMsg = sqlite3MPrintf( + pParse->db, "EXECUTE %s%s SUBQUERY %d", testAddr>=0?"":"CORRELATED ", + pExpr->op==TK_IN?"LIST":"SCALAR", pParse->iNextSelectId + ); + sqlite3VdbeAddOp4(v, OP_Explain, pParse->iSelectId, 0, 0, zMsg, P4_DYNAMIC); } #endif -} -/* -** This routine is called if the collation factory fails to deliver a -** collation function in the best encoding but there may be other versions -** of this collation function (for other text encodings) available. Use one -** of these instead if they exist. Avoid a UTF-8 <-> UTF-16 conversion if -** possible. -*/ -static int synthCollSeq(sqlite3 *db, CollSeq *pColl){ - CollSeq *pColl2; - char *z = pColl->zName; - int i; - static const u8 aEnc[] = { SQLITE_UTF16BE, SQLITE_UTF16LE, SQLITE_UTF8 }; - for(i=0; i<3; i++){ - pColl2 = sqlite3FindCollSeq(db, aEnc[i], z, 0); - if( pColl2->xCmp!=0 ){ - memcpy(pColl, pColl2, sizeof(CollSeq)); - pColl->xDel = 0; /* Do not copy the destructor */ - return SQLITE_OK; + switch( pExpr->op ){ + case TK_IN: { + char affinity; /* Affinity of the LHS of the IN */ + KeyInfo keyInfo; /* Keyinfo for the generated table */ + int addr; /* Address of OP_OpenEphemeral instruction */ + Expr *pLeft = pExpr->pLeft; /* the LHS of the IN operator */ + + if( rMayHaveNull ){ + sqlite3VdbeAddOp2(v, OP_Null, 0, rMayHaveNull); + } + + affinity = sqlite3ExprAffinity(pLeft); + + /* Whether this is an 'x IN(SELECT...)' or an 'x IN()' + ** expression it is handled the same way. An ephemeral table is + ** filled with single-field index keys representing the results + ** from the SELECT or the . + ** + ** If the 'x' expression is a column value, or the SELECT... + ** statement returns a column value, then the affinity of that + ** column is used to build the index keys. If both 'x' and the + ** SELECT... statement are columns, then numeric affinity is used + ** if either column has NUMERIC or INTEGER affinity. If neither + ** 'x' nor the SELECT... statement are columns, then numeric affinity + ** is used. + */ + pExpr->iTable = pParse->nTab++; + addr = sqlite3VdbeAddOp2(v, OP_OpenEphemeral, pExpr->iTable, !isRowid); + if( rMayHaveNull==0 ) sqlite3VdbeChangeP5(v, BTREE_UNORDERED); + memset(&keyInfo, 0, sizeof(keyInfo)); + keyInfo.nField = 1; + + if( ExprHasProperty(pExpr, EP_xIsSelect) ){ + /* Case 1: expr IN (SELECT ...) + ** + ** Generate code to write the results of the select into the temporary + ** table allocated and opened above. + */ + SelectDest dest; + ExprList *pEList; + + assert( !isRowid ); + sqlite3SelectDestInit(&dest, SRT_Set, pExpr->iTable); + dest.affinity = (u8)affinity; + assert( (pExpr->iTable&0x0000FFFF)==pExpr->iTable ); + pExpr->x.pSelect->iLimit = 0; + if( sqlite3Select(pParse, pExpr->x.pSelect, &dest) ){ + return 0; + } + pEList = pExpr->x.pSelect->pEList; + if( ALWAYS(pEList!=0 && pEList->nExpr>0) ){ + keyInfo.aColl[0] = sqlite3BinaryCompareCollSeq(pParse, pExpr->pLeft, + pEList->a[0].pExpr); + } + }else if( ALWAYS(pExpr->x.pList!=0) ){ + /* Case 2: expr IN (exprlist) + ** + ** For each expression, build an index key from the evaluation and + ** store it in the temporary table. If is a column, then use + ** that columns affinity when building index keys. If is not + ** a column, use numeric affinity. + */ + int i; + ExprList *pList = pExpr->x.pList; + struct ExprList_item *pItem; + int r1, r2, r3; + + if( !affinity ){ + affinity = SQLITE_AFF_NONE; + } + keyInfo.aColl[0] = sqlite3ExprCollSeq(pParse, pExpr->pLeft); + + /* Loop through each expression in . */ + r1 = sqlite3GetTempReg(pParse); + r2 = sqlite3GetTempReg(pParse); + sqlite3VdbeAddOp2(v, OP_Null, 0, r2); + for(i=pList->nExpr, pItem=pList->a; i>0; i--, pItem++){ + Expr *pE2 = pItem->pExpr; + int iValToIns; + + /* If the expression is not constant then we will need to + ** disable the test that was generated above that makes sure + ** this code only executes once. Because for a non-constant + ** expression we need to rerun this code each time. + */ + if( testAddr>=0 && !sqlite3ExprIsConstant(pE2) ){ + sqlite3VdbeChangeToNoop(v, testAddr); + testAddr = -1; + } + + /* Evaluate the expression and insert it into the temp table */ + if( isRowid && sqlite3ExprIsInteger(pE2, &iValToIns) ){ + sqlite3VdbeAddOp3(v, OP_InsertInt, pExpr->iTable, r2, iValToIns); + }else{ + r3 = sqlite3ExprCodeTarget(pParse, pE2, r1); + if( isRowid ){ + sqlite3VdbeAddOp2(v, OP_MustBeInt, r3, + sqlite3VdbeCurrentAddr(v)+2); + sqlite3VdbeAddOp3(v, OP_Insert, pExpr->iTable, r2, r3); + }else{ + sqlite3VdbeAddOp4(v, OP_MakeRecord, r3, 1, r2, &affinity, 1); + sqlite3ExprCacheAffinityChange(pParse, r3, 1); + sqlite3VdbeAddOp2(v, OP_IdxInsert, pExpr->iTable, r2); + } + } + } + sqlite3ReleaseTempReg(pParse, r1); + sqlite3ReleaseTempReg(pParse, r2); + } + if( !isRowid ){ + sqlite3VdbeChangeP4(v, addr, (void *)&keyInfo, P4_KEYINFO); + } + break; + } + + case TK_EXISTS: + case TK_SELECT: + default: { + /* If this has to be a scalar SELECT. Generate code to put the + ** value of this select in a memory cell and record the number + ** of the memory cell in iColumn. If this is an EXISTS, write + ** an integer 0 (not exists) or 1 (exists) into a memory cell + ** and record that memory cell in iColumn. + */ + Select *pSel; /* SELECT statement to encode */ + SelectDest dest; /* How to deal with SELECt result */ + + testcase( pExpr->op==TK_EXISTS ); + testcase( pExpr->op==TK_SELECT ); + assert( pExpr->op==TK_EXISTS || pExpr->op==TK_SELECT ); + + assert( ExprHasProperty(pExpr, EP_xIsSelect) ); + pSel = pExpr->x.pSelect; + sqlite3SelectDestInit(&dest, 0, ++pParse->nMem); + if( pExpr->op==TK_SELECT ){ + dest.eDest = SRT_Mem; + sqlite3VdbeAddOp2(v, OP_Null, 0, dest.iParm); + VdbeComment((v, "Init subquery result")); + }else{ + dest.eDest = SRT_Exists; + sqlite3VdbeAddOp2(v, OP_Integer, 0, dest.iParm); + VdbeComment((v, "Init EXISTS result")); + } + sqlite3ExprDelete(pParse->db, pSel->pLimit); + pSel->pLimit = sqlite3PExpr(pParse, TK_INTEGER, 0, 0, + &sqlite3IntTokens[1]); + pSel->iLimit = 0; + if( sqlite3Select(pParse, pSel, &dest) ){ + return 0; + } + rReg = dest.iParm; + ExprSetIrreducible(pExpr); + break; } } - return SQLITE_ERROR; + + if( testAddr>=0 ){ + sqlite3VdbeJumpHere(v, testAddr); + } + sqlite3ExprCachePop(pParse, 1); + + return rReg; } +#endif /* SQLITE_OMIT_SUBQUERY */ +#ifndef SQLITE_OMIT_SUBQUERY /* -** This function is responsible for invoking the collation factory callback -** or substituting a collation sequence of a different encoding when the -** requested collation sequence is not available in the database native -** encoding. -** -** If it is not NULL, then pColl must point to the database native encoding -** collation sequence with name zName, length nName. +** Generate code for an IN expression. ** -** The return value is either the collation sequence to be used in database -** db for collation type name zName, length nName, or NULL, if no collation -** sequence can be found. +** x IN (SELECT ...) +** x IN (value, value, ...) ** -** See also: sqlite3LocateCollSeq(), sqlite3FindCollSeq() +** The left-hand side (LHS) is a scalar expression. The right-hand side (RHS) +** is an array of zero or more values. The expression is true if the LHS is +** contained within the RHS. The value of the expression is unknown (NULL) +** if the LHS is NULL or if the LHS is not contained within the RHS and the +** RHS contains one or more NULL values. +** +** This routine generates code will jump to destIfFalse if the LHS is not +** contained within the RHS. If due to NULLs we cannot determine if the LHS +** is contained in the RHS then jump to destIfNull. If the LHS is contained +** within the RHS then fall through. */ -SQLITE_PRIVATE CollSeq *sqlite3GetCollSeq( - sqlite3* db, /* The database connection */ - CollSeq *pColl, /* Collating sequence with native encoding, or NULL */ - const char *zName /* Collating sequence name */ +static void sqlite3ExprCodeIN( + Parse *pParse, /* Parsing and code generating context */ + Expr *pExpr, /* The IN expression */ + int destIfFalse, /* Jump here if LHS is not contained in the RHS */ + int destIfNull /* Jump here if the results are unknown due to NULLs */ ){ - CollSeq *p; + int rRhsHasNull = 0; /* Register that is true if RHS contains NULL values */ + char affinity; /* Comparison affinity to use */ + int eType; /* Type of the RHS */ + int r1; /* Temporary use register */ + Vdbe *v; /* Statement under construction */ - p = pColl; - if( !p ){ - p = sqlite3FindCollSeq(db, ENC(db), zName, 0); + /* Compute the RHS. After this step, the table with cursor + ** pExpr->iTable will contains the values that make up the RHS. + */ + v = pParse->pVdbe; + assert( v!=0 ); /* OOM detected prior to this routine */ + VdbeNoopComment((v, "begin IN expr")); + eType = sqlite3FindInIndex(pParse, pExpr, &rRhsHasNull); + + /* Figure out the affinity to use to create a key from the results + ** of the expression. affinityStr stores a static string suitable for + ** P4 of OP_MakeRecord. + */ + affinity = comparisonAffinity(pExpr); + + /* Code the LHS, the from " IN (...)". + */ + sqlite3ExprCachePush(pParse); + r1 = sqlite3GetTempReg(pParse); + sqlite3ExprCode(pParse, pExpr->pLeft, r1); + + /* If the LHS is NULL, then the result is either false or NULL depending + ** on whether the RHS is empty or not, respectively. + */ + if( destIfNull==destIfFalse ){ + /* Shortcut for the common case where the false and NULL outcomes are + ** the same. */ + sqlite3VdbeAddOp2(v, OP_IsNull, r1, destIfNull); + }else{ + int addr1 = sqlite3VdbeAddOp1(v, OP_NotNull, r1); + sqlite3VdbeAddOp2(v, OP_Rewind, pExpr->iTable, destIfFalse); + sqlite3VdbeAddOp2(v, OP_Goto, 0, destIfNull); + sqlite3VdbeJumpHere(v, addr1); } - if( !p || !p->xCmp ){ - /* No collation sequence of this type for this encoding is registered. - ** Call the collation factory to see if it can supply us with one. + + if( eType==IN_INDEX_ROWID ){ + /* In this case, the RHS is the ROWID of table b-tree */ - callCollNeeded(db, zName); - p = sqlite3FindCollSeq(db, ENC(db), zName, 0); - } - if( p && !p->xCmp && synthCollSeq(db, p) ){ - p = 0; - } - assert( !p || p->xCmp ); - return p; -} + sqlite3VdbeAddOp2(v, OP_MustBeInt, r1, destIfFalse); + sqlite3VdbeAddOp3(v, OP_NotExists, pExpr->iTable, destIfFalse, r1); + }else{ + /* In this case, the RHS is an index b-tree. + */ + sqlite3VdbeAddOp4(v, OP_Affinity, r1, 1, 0, &affinity, 1); -/* -** This routine is called on a collation sequence before it is used to -** check that it is defined. An undefined collation sequence exists when -** a database is loaded that contains references to collation sequences -** that have not been defined by sqlite3_create_collation() etc. -** -** If required, this routine calls the 'collation needed' callback to -** request a definition of the collating sequence. If this doesn't work, -** an equivalent collating sequence that uses a text encoding different -** from the main database is substituted, if one is available. -*/ -SQLITE_PRIVATE int sqlite3CheckCollSeq(Parse *pParse, CollSeq *pColl){ - if( pColl ){ - const char *zName = pColl->zName; - CollSeq *p = sqlite3GetCollSeq(pParse->db, pColl, zName); - if( !p ){ - sqlite3ErrorMsg(pParse, "no such collation sequence: %s", zName); - pParse->nErr++; - return SQLITE_ERROR; - } - assert( p==pColl ); - } - return SQLITE_OK; -} + /* If the set membership test fails, then the result of the + ** "x IN (...)" expression must be either 0 or NULL. If the set + ** contains no NULL values, then the result is 0. If the set + ** contains one or more NULL values, then the result of the + ** expression is also NULL. + */ + if( rRhsHasNull==0 || destIfFalse==destIfNull ){ + /* This branch runs if it is known at compile time that the RHS + ** cannot contain NULL values. This happens as the result + ** of a "NOT NULL" constraint in the database schema. + ** + ** Also run this branch if NULL is equivalent to FALSE + ** for this particular IN operator. + */ + sqlite3VdbeAddOp4Int(v, OP_NotFound, pExpr->iTable, destIfFalse, r1, 1); + }else{ + /* In this branch, the RHS of the IN might contain a NULL and + ** the presence of a NULL on the RHS makes a difference in the + ** outcome. + */ + int j1, j2, j3; + /* First check to see if the LHS is contained in the RHS. If so, + ** then the presence of NULLs in the RHS does not matter, so jump + ** over all of the code that follows. + */ + j1 = sqlite3VdbeAddOp4Int(v, OP_Found, pExpr->iTable, 0, r1, 1); -/* -** Locate and return an entry from the db.aCollSeq hash table. If the entry -** specified by zName and nName is not found and parameter 'create' is -** true, then create a new entry. Otherwise return NULL. -** -** Each pointer stored in the sqlite3.aCollSeq hash table contains an -** array of three CollSeq structures. The first is the collation sequence -** prefferred for UTF-8, the second UTF-16le, and the third UTF-16be. -** -** Stored immediately after the three collation sequences is a copy of -** the collation sequence name. A pointer to this string is stored in -** each collation sequence structure. -*/ -static CollSeq *findCollSeqEntry( - sqlite3 *db, /* Database connection */ - const char *zName, /* Name of the collating sequence */ - int create /* Create a new entry if true */ -){ - CollSeq *pColl; - int nName = sqlite3Strlen30(zName); - pColl = sqlite3HashFind(&db->aCollSeq, zName, nName); + /* Here we begin generating code that runs if the LHS is not + ** contained within the RHS. Generate additional code that + ** tests the RHS for NULLs. If the RHS contains a NULL then + ** jump to destIfNull. If there are no NULLs in the RHS then + ** jump to destIfFalse. + */ + j2 = sqlite3VdbeAddOp1(v, OP_NotNull, rRhsHasNull); + j3 = sqlite3VdbeAddOp4Int(v, OP_Found, pExpr->iTable, 0, rRhsHasNull, 1); + sqlite3VdbeAddOp2(v, OP_Integer, -1, rRhsHasNull); + sqlite3VdbeJumpHere(v, j3); + sqlite3VdbeAddOp2(v, OP_AddImm, rRhsHasNull, 1); + sqlite3VdbeJumpHere(v, j2); - if( 0==pColl && create ){ - pColl = sqlite3DbMallocZero(db, 3*sizeof(*pColl) + nName + 1 ); - if( pColl ){ - CollSeq *pDel = 0; - pColl[0].zName = (char*)&pColl[3]; - pColl[0].enc = SQLITE_UTF8; - pColl[1].zName = (char*)&pColl[3]; - pColl[1].enc = SQLITE_UTF16LE; - pColl[2].zName = (char*)&pColl[3]; - pColl[2].enc = SQLITE_UTF16BE; - memcpy(pColl[0].zName, zName, nName); - pColl[0].zName[nName] = 0; - pDel = sqlite3HashInsert(&db->aCollSeq, pColl[0].zName, nName, pColl); + /* Jump to the appropriate target depending on whether or not + ** the RHS contains a NULL + */ + sqlite3VdbeAddOp2(v, OP_If, rRhsHasNull, destIfNull); + sqlite3VdbeAddOp2(v, OP_Goto, 0, destIfFalse); - /* If a malloc() failure occurred in sqlite3HashInsert(), it will - ** return the pColl pointer to be deleted (because it wasn't added - ** to the hash table). + /* The OP_Found at the top of this branch jumps here when true, + ** causing the overall IN expression evaluation to fall through. */ - assert( pDel==0 || pDel==pColl ); - if( pDel!=0 ){ - db->mallocFailed = 1; - sqlite3DbFree(db, pDel); - pColl = 0; - } + sqlite3VdbeJumpHere(v, j1); } } - return pColl; + sqlite3ReleaseTempReg(pParse, r1); + sqlite3ExprCachePop(pParse, 1); + VdbeComment((v, "end IN expr")); } +#endif /* SQLITE_OMIT_SUBQUERY */ /* -** Parameter zName points to a UTF-8 encoded string nName bytes long. -** Return the CollSeq* pointer for the collation sequence named zName -** for the encoding 'enc' from the database 'db'. -** -** If the entry specified is not found and 'create' is true, then create a -** new entry. Otherwise return NULL. -** -** A separate function sqlite3LocateCollSeq() is a wrapper around -** this routine. sqlite3LocateCollSeq() invokes the collation factory -** if necessary and generates an error message if the collating sequence -** cannot be found. -** -** See also: sqlite3LocateCollSeq(), sqlite3GetCollSeq() +** Duplicate an 8-byte value */ -SQLITE_PRIVATE CollSeq *sqlite3FindCollSeq( - sqlite3 *db, - u8 enc, - const char *zName, - int create -){ - CollSeq *pColl; - if( zName ){ - pColl = findCollSeqEntry(db, zName, create); - }else{ - pColl = db->pDfltColl; +static char *dup8bytes(Vdbe *v, const char *in){ + char *out = sqlite3DbMallocRaw(sqlite3VdbeDb(v), 8); + if( out ){ + memcpy(out, in, 8); } - assert( SQLITE_UTF8==1 && SQLITE_UTF16LE==2 && SQLITE_UTF16BE==3 ); - assert( enc>=SQLITE_UTF8 && enc<=SQLITE_UTF16BE ); - if( pColl ) pColl += enc-1; - return pColl; + return out; } -/* During the search for the best function definition, this procedure -** is called to test how well the function passed as the first argument -** matches the request for a function with nArg arguments in a system -** that uses encoding enc. The value returned indicates how well the -** request is matched. A higher value indicates a better match. -** -** The returned value is always between 0 and 6, as follows: +#ifndef SQLITE_OMIT_FLOATING_POINT +/* +** Generate an instruction that will put the floating point +** value described by z[0..n-1] into register iMem. ** -** 0: Not a match, or if nArg<0 and the function is has no implementation. -** 1: A variable arguments function that prefers UTF-8 when a UTF-16 -** encoding is requested, or vice versa. -** 2: A variable arguments function that uses UTF-16BE when UTF-16LE is -** requested, or vice versa. -** 3: A variable arguments function using the same text encoding. -** 4: A function with the exact number of arguments requested that -** prefers UTF-8 when a UTF-16 encoding is requested, or vice versa. -** 5: A function with the exact number of arguments requested that -** prefers UTF-16LE when UTF-16BE is requested, or vice versa. -** 6: An exact match. -** -*/ -static int matchQuality(FuncDef *p, int nArg, u8 enc){ - int match = 0; - if( p->nArg==-1 || p->nArg==nArg - || (nArg==-1 && (p->xFunc!=0 || p->xStep!=0)) - ){ - match = 1; - if( p->nArg==nArg || nArg==-1 ){ - match = 4; - } - if( enc==p->iPrefEnc ){ - match += 2; - } - else if( (enc==SQLITE_UTF16LE && p->iPrefEnc==SQLITE_UTF16BE) || - (enc==SQLITE_UTF16BE && p->iPrefEnc==SQLITE_UTF16LE) ){ - match += 1; - } +** The z[] string will probably not be zero-terminated. But the +** z[n] character is guaranteed to be something that does not look +** like the continuation of the number. +*/ +static void codeReal(Vdbe *v, const char *z, int negateFlag, int iMem){ + if( ALWAYS(z!=0) ){ + double value; + char *zV; + sqlite3AtoF(z, &value, sqlite3Strlen30(z), SQLITE_UTF8); + assert( !sqlite3IsNaN(value) ); /* The new AtoF never returns NaN */ + if( negateFlag ) value = -value; + zV = dup8bytes(v, (char*)&value); + sqlite3VdbeAddOp4(v, OP_Real, 0, iMem, 0, zV, P4_REAL); } - return match; } +#endif + /* -** Search a FuncDefHash for a function with the given name. Return -** a pointer to the matching FuncDef if found, or 0 if there is no match. +** Generate an instruction that will put the integer describe by +** text z[0..n-1] into register iMem. +** +** Expr.u.zToken is always UTF8 and zero-terminated. */ -static FuncDef *functionSearch( - FuncDefHash *pHash, /* Hash table to search */ - int h, /* Hash of the name */ - const char *zFunc, /* Name of function */ - int nFunc /* Number of bytes in zFunc */ -){ - FuncDef *p; - for(p=pHash->a[h]; p; p=p->pHash){ - if( sqlite3StrNICmp(p->zName, zFunc, nFunc)==0 && p->zName[nFunc]==0 ){ - return p; +static void codeInteger(Parse *pParse, Expr *pExpr, int negFlag, int iMem){ + Vdbe *v = pParse->pVdbe; + if( pExpr->flags & EP_IntValue ){ + int i = pExpr->u.iValue; + assert( i>=0 ); + if( negFlag ) i = -i; + sqlite3VdbeAddOp2(v, OP_Integer, i, iMem); + }else{ + int c; + i64 value; + const char *z = pExpr->u.zToken; + assert( z!=0 ); + c = sqlite3Atoi64(z, &value, sqlite3Strlen30(z), SQLITE_UTF8); + if( c==0 || (c==2 && negFlag) ){ + char *zV; + if( negFlag ){ value = c==2 ? SMALLEST_INT64 : -value; } + zV = dup8bytes(v, (char*)&value); + sqlite3VdbeAddOp4(v, OP_Int64, 0, iMem, 0, zV, P4_INT64); + }else{ +#ifdef SQLITE_OMIT_FLOATING_POINT + sqlite3ErrorMsg(pParse, "oversized integer: %s%s", negFlag ? "-" : "", z); +#else + codeReal(v, z, negFlag, iMem); +#endif } } - return 0; } /* -** Insert a new FuncDef into a FuncDefHash hash table. +** Clear a cache entry. */ -SQLITE_PRIVATE void sqlite3FuncDefInsert( - FuncDefHash *pHash, /* The hash table into which to insert */ - FuncDef *pDef /* The function definition to insert */ -){ - FuncDef *pOther; - int nName = sqlite3Strlen30(pDef->zName); - u8 c1 = (u8)pDef->zName[0]; - int h = (sqlite3UpperToLower[c1] + nName) % ArraySize(pHash->a); - pOther = functionSearch(pHash, h, pDef->zName, nName); - if( pOther ){ - assert( pOther!=pDef && pOther->pNext!=pDef ); - pDef->pNext = pOther->pNext; - pOther->pNext = pDef; - }else{ - pDef->pNext = 0; - pDef->pHash = pHash->a[h]; - pHash->a[h] = pDef; +static void cacheEntryClear(Parse *pParse, struct yColCache *p){ + if( p->tempReg ){ + if( pParse->nTempRegaTempReg) ){ + pParse->aTempReg[pParse->nTempReg++] = p->iReg; + } + p->tempReg = 0; } } - - + /* -** Locate a user function given a name, a number of arguments and a flag -** indicating whether the function prefers UTF-16 over UTF-8. Return a -** pointer to the FuncDef structure that defines that function, or return -** NULL if the function does not exist. -** -** If the createFlag argument is true, then a new (blank) FuncDef -** structure is created and liked into the "db" structure if a -** no matching function previously existed. When createFlag is true -** and the nArg parameter is -1, then only a function that accepts -** any number of arguments will be returned. -** -** If createFlag is false and nArg is -1, then the first valid -** function found is returned. A function is valid if either xFunc -** or xStep is non-zero. -** -** If createFlag is false, then a function with the required name and -** number of arguments may be returned even if the eTextRep flag does not -** match that requested. +** Record in the column cache that a particular column from a +** particular table is stored in a particular register. */ -SQLITE_PRIVATE FuncDef *sqlite3FindFunction( - sqlite3 *db, /* An open database */ - const char *zName, /* Name of the function. Not null-terminated */ - int nName, /* Number of characters in the name */ - int nArg, /* Number of arguments. -1 means any number */ - u8 enc, /* Preferred text encoding */ - int createFlag /* Create new entry if true and does not otherwise exist */ -){ - FuncDef *p; /* Iterator variable */ - FuncDef *pBest = 0; /* Best match found so far */ - int bestScore = 0; /* Score of best match */ - int h; /* Hash value */ +SQLITE_PRIVATE void sqlite3ExprCacheStore(Parse *pParse, int iTab, int iCol, int iReg){ + int i; + int minLru; + int idxLru; + struct yColCache *p; + assert( iReg>0 ); /* Register numbers are always positive */ + assert( iCol>=-1 && iCol<32768 ); /* Finite column numbers */ - assert( enc==SQLITE_UTF8 || enc==SQLITE_UTF16LE || enc==SQLITE_UTF16BE ); - h = (sqlite3UpperToLower[(u8)zName[0]] + nName) % ArraySize(db->aFunc.a); + /* The SQLITE_ColumnCache flag disables the column cache. This is used + ** for testing only - to verify that SQLite always gets the same answer + ** with and without the column cache. + */ + if( pParse->db->flags & SQLITE_ColumnCache ) return; - /* First search for a match amongst the application-defined functions. + /* First replace any existing entry. + ** + ** Actually, the way the column cache is currently used, we are guaranteed + ** that the object will never already be in cache. Verify this guarantee. */ - p = functionSearch(&db->aFunc, h, zName, nName); - while( p ){ - int score = matchQuality(p, nArg, enc); - if( score>bestScore ){ - pBest = p; - bestScore = score; - } - p = p->pNext; +#ifndef NDEBUG + for(i=0, p=pParse->aColCache; iiReg==0 || p->iTable!=iTab || p->iColumn!=iCol ); } +#endif - /* If no match is found, search the built-in functions. - ** - ** Except, if createFlag is true, that means that we are trying to - ** install a new function. Whatever FuncDef structure is returned will - ** have fields overwritten with new information appropriate for the - ** new function. But the FuncDefs for built-in functions are read-only. - ** So we must not search for built-ins when creating a new function. - */ - if( !createFlag && !pBest ){ - FuncDefHash *pHash = &GLOBAL(FuncDefHash, sqlite3GlobalFunctions); - p = functionSearch(pHash, h, zName, nName); - while( p ){ - int score = matchQuality(p, nArg, enc); - if( score>bestScore ){ - pBest = p; - bestScore = score; - } - p = p->pNext; + /* Find an empty slot and replace it */ + for(i=0, p=pParse->aColCache; iiReg==0 ){ + p->iLevel = pParse->iCacheLevel; + p->iTable = iTab; + p->iColumn = iCol; + p->iReg = iReg; + p->tempReg = 0; + p->lru = pParse->iCacheCnt++; + return; } } - /* If the createFlag parameter is true and the search did not reveal an - ** exact match for the name, number of arguments and encoding, then add a - ** new entry to the hash table and return it. - */ - if( createFlag && (bestScore<6 || pBest->nArg!=nArg) && - (pBest = sqlite3DbMallocZero(db, sizeof(*pBest)+nName+1))!=0 ){ - pBest->zName = (char *)&pBest[1]; - pBest->nArg = (u16)nArg; - pBest->iPrefEnc = enc; - memcpy(pBest->zName, zName, nName); - pBest->zName[nName] = 0; - sqlite3FuncDefInsert(&db->aFunc, pBest); + /* Replace the last recently used */ + minLru = 0x7fffffff; + idxLru = -1; + for(i=0, p=pParse->aColCache; ilrulru; + } } - - if( pBest && (pBest->xStep || pBest->xFunc || createFlag) ){ - return pBest; + if( ALWAYS(idxLru>=0) ){ + p = &pParse->aColCache[idxLru]; + p->iLevel = pParse->iCacheLevel; + p->iTable = iTab; + p->iColumn = iCol; + p->iReg = iReg; + p->tempReg = 0; + p->lru = pParse->iCacheCnt++; + return; } - return 0; } /* -** Free all resources held by the schema structure. The void* argument points -** at a Schema struct. This function does not call sqlite3DbFree(db, ) on the -** pointer itself, it just cleans up subsiduary resources (i.e. the contents -** of the schema hash tables). -** -** The Schema.cache_size variable is not cleared. +** Indicate that registers between iReg..iReg+nReg-1 are being overwritten. +** Purge the range of registers from the column cache. */ -SQLITE_PRIVATE void sqlite3SchemaFree(void *p){ - Hash temp1; - Hash temp2; - HashElem *pElem; - Schema *pSchema = (Schema *)p; +SQLITE_PRIVATE void sqlite3ExprCacheRemove(Parse *pParse, int iReg, int nReg){ + int i; + int iLast = iReg + nReg - 1; + struct yColCache *p; + for(i=0, p=pParse->aColCache; iiReg; + if( r>=iReg && r<=iLast ){ + cacheEntryClear(pParse, p); + p->iReg = 0; + } + } +} - temp1 = pSchema->tblHash; - temp2 = pSchema->trigHash; - sqlite3HashInit(&pSchema->trigHash); - sqlite3HashClear(&pSchema->idxHash); - for(pElem=sqliteHashFirst(&temp2); pElem; pElem=sqliteHashNext(pElem)){ - sqlite3DeleteTrigger(0, (Trigger*)sqliteHashData(pElem)); - } - sqlite3HashClear(&temp2); - sqlite3HashInit(&pSchema->tblHash); - for(pElem=sqliteHashFirst(&temp1); pElem; pElem=sqliteHashNext(pElem)){ - Table *pTab = sqliteHashData(pElem); - assert( pTab->dbMem==0 ); - sqlite3DeleteTable(pTab); - } - sqlite3HashClear(&temp1); - pSchema->pSeqTab = 0; - pSchema->flags &= ~DB_SchemaLoaded; +/* +** Remember the current column cache context. Any new entries added +** added to the column cache after this call are removed when the +** corresponding pop occurs. +*/ +SQLITE_PRIVATE void sqlite3ExprCachePush(Parse *pParse){ + pParse->iCacheLevel++; } /* -** Find and return the schema associated with a BTree. Create -** a new one if necessary. +** Remove from the column cache any entries that were added since the +** the previous N Push operations. In other words, restore the cache +** to the state it was in N Pushes ago. */ -SQLITE_PRIVATE Schema *sqlite3SchemaGet(sqlite3 *db, Btree *pBt){ - Schema * p; - if( pBt ){ - p = (Schema *)sqlite3BtreeSchema(pBt, sizeof(Schema), sqlite3SchemaFree); - }else{ - p = (Schema *)sqlite3MallocZero(sizeof(Schema)); - } - if( !p ){ - db->mallocFailed = 1; - }else if ( 0==p->file_format ){ - sqlite3HashInit(&p->tblHash); - sqlite3HashInit(&p->idxHash); - sqlite3HashInit(&p->trigHash); - p->enc = SQLITE_UTF8; +SQLITE_PRIVATE void sqlite3ExprCachePop(Parse *pParse, int N){ + int i; + struct yColCache *p; + assert( N>0 ); + assert( pParse->iCacheLevel>=N ); + pParse->iCacheLevel -= N; + for(i=0, p=pParse->aColCache; iiReg && p->iLevel>pParse->iCacheLevel ){ + cacheEntryClear(pParse, p); + p->iReg = 0; + } } - return p; } -/************** End of callback.c ********************************************/ -/************** Begin file delete.c ******************************************/ /* -** 2001 September 15 -** -** The author disclaims copyright to this source code. In place of -** a legal notice, here is a blessing: -** -** May you do good and not evil. -** May you find forgiveness for yourself and forgive others. -** May you share freely, never taking more than you give. -** -************************************************************************* -** This file contains C code routines that are called by the parser -** in order to generate code for DELETE FROM statements. -** -** $Id: delete.c,v 1.204 2009/06/23 20:28:54 drh Exp $ +** When a cached column is reused, make sure that its register is +** no longer available as a temp register. ticket #3879: that same +** register might be in the cache in multiple places, so be sure to +** get them all. */ +static void sqlite3ExprCachePinRegister(Parse *pParse, int iReg){ + int i; + struct yColCache *p; + for(i=0, p=pParse->aColCache; iiReg==iReg ){ + p->tempReg = 0; + } + } +} /* -** Look up every table that is named in pSrc. If any table is not found, -** add an error message to pParse->zErrMsg and return NULL. If all tables -** are found, return a pointer to the last table. +** Generate code to extract the value of the iCol-th column of a table. */ -SQLITE_PRIVATE Table *sqlite3SrcListLookup(Parse *pParse, SrcList *pSrc){ - struct SrcList_item *pItem = pSrc->a; - Table *pTab; - assert( pItem && pSrc->nSrc==1 ); - pTab = sqlite3LocateTable(pParse, 0, pItem->zName, pItem->zDatabase); - sqlite3DeleteTable(pItem->pTab); - pItem->pTab = pTab; - if( pTab ){ - pTab->nRef++; +SQLITE_PRIVATE void sqlite3ExprCodeGetColumnOfTable( + Vdbe *v, /* The VDBE under construction */ + Table *pTab, /* The table containing the value */ + int iTabCur, /* The cursor for this table */ + int iCol, /* Index of the column to extract */ + int regOut /* Extract the valud into this register */ +){ + if( iCol<0 || iCol==pTab->iPKey ){ + sqlite3VdbeAddOp2(v, OP_Rowid, iTabCur, regOut); + }else{ + int op = IsVirtual(pTab) ? OP_VColumn : OP_Column; + sqlite3VdbeAddOp3(v, op, iTabCur, iCol, regOut); } - if( sqlite3IndexedByLookup(pParse, pItem) ){ - pTab = 0; + if( iCol>=0 ){ + sqlite3ColumnDefault(v, pTab, iCol, regOut); } - return pTab; } /* -** Check to make sure the given table is writable. If it is not -** writable, generate an error message and return 1. If it is -** writable return 0; +** Generate code that will extract the iColumn-th column from +** table pTab and store the column value in a register. An effort +** is made to store the column value in register iReg, but this is +** not guaranteed. The location of the column value is returned. +** +** There must be an open cursor to pTab in iTable when this routine +** is called. If iColumn<0 then code is generated that extracts the rowid. */ -SQLITE_PRIVATE int sqlite3IsReadOnly(Parse *pParse, Table *pTab, int viewOk){ - if( ((pTab->tabFlags & TF_Readonly)!=0 - && (pParse->db->flags & SQLITE_WriteSchema)==0 - && pParse->nested==0) -#ifndef SQLITE_OMIT_VIRTUALTABLE - || (pTab->pMod && pTab->pMod->pModule->xUpdate==0) -#endif - ){ - sqlite3ErrorMsg(pParse, "table %s may not be modified", pTab->zName); - return 1; - } -#ifndef SQLITE_OMIT_VIEW - if( !viewOk && pTab->pSelect ){ - sqlite3ErrorMsg(pParse,"cannot modify %s because it is a view",pTab->zName); - return 1; +SQLITE_PRIVATE int sqlite3ExprCodeGetColumn( + Parse *pParse, /* Parsing and code generating context */ + Table *pTab, /* Description of the table we are reading from */ + int iColumn, /* Index of the table column */ + int iTable, /* The cursor pointing to the table */ + int iReg, /* Store results here */ + u8 p5 /* P5 value for OP_Column */ +){ + Vdbe *v = pParse->pVdbe; + int i; + struct yColCache *p; + + for(i=0, p=pParse->aColCache; iiReg>0 && p->iTable==iTable && p->iColumn==iColumn ){ + p->lru = pParse->iCacheCnt++; + sqlite3ExprCachePinRegister(pParse, p->iReg); + return p->iReg; + } + } + assert( v!=0 ); + sqlite3ExprCodeGetColumnOfTable(v, pTab, iTable, iColumn, iReg); + if( p5 ){ + sqlite3VdbeChangeP5(v, p5); + }else{ + sqlite3ExprCacheStore(pParse, iTable, iColumn, iReg); } -#endif - return 0; + return iReg; } - -#if !defined(SQLITE_OMIT_VIEW) && !defined(SQLITE_OMIT_TRIGGER) /* -** Evaluate a view and store its result in an ephemeral table. The -** pWhere argument is an optional WHERE clause that restricts the -** set of rows in the view that are to be added to the ephemeral table. +** Clear all column cache entries. */ -SQLITE_PRIVATE void sqlite3MaterializeView( - Parse *pParse, /* Parsing context */ - Table *pView, /* View definition */ - Expr *pWhere, /* Optional WHERE clause to be added */ - int iCur /* Cursor number for ephemerial table */ -){ - SelectDest dest; - Select *pDup; - sqlite3 *db = pParse->db; +SQLITE_PRIVATE void sqlite3ExprCacheClear(Parse *pParse){ + int i; + struct yColCache *p; - pDup = sqlite3SelectDup(db, pView->pSelect, 0); - if( pWhere ){ - SrcList *pFrom; - - pWhere = sqlite3ExprDup(db, pWhere, 0); - pFrom = sqlite3SrcListAppend(db, 0, 0, 0); - if( pFrom ){ - assert( pFrom->nSrc==1 ); - pFrom->a[0].zAlias = sqlite3DbStrDup(db, pView->zName); - pFrom->a[0].pSelect = pDup; - assert( pFrom->a[0].pOn==0 ); - assert( pFrom->a[0].pUsing==0 ); - }else{ - sqlite3SelectDelete(db, pDup); + for(i=0, p=pParse->aColCache; iiReg ){ + cacheEntryClear(pParse, p); + p->iReg = 0; } - pDup = sqlite3SelectNew(pParse, 0, pFrom, pWhere, 0, 0, 0, 0, 0, 0); } - sqlite3SelectDestInit(&dest, SRT_EphemTab, iCur); - sqlite3Select(pParse, pDup, &dest); - sqlite3SelectDelete(db, pDup); } -#endif /* !defined(SQLITE_OMIT_VIEW) && !defined(SQLITE_OMIT_TRIGGER) */ -#if defined(SQLITE_ENABLE_UPDATE_DELETE_LIMIT) && !defined(SQLITE_OMIT_SUBQUERY) /* -** Generate an expression tree to implement the WHERE, ORDER BY, -** and LIMIT/OFFSET portion of DELETE and UPDATE statements. -** -** DELETE FROM table_wxyz WHERE a<5 ORDER BY a LIMIT 1; -** \__________________________/ -** pLimitWhere (pInClause) +** Record the fact that an affinity change has occurred on iCount +** registers starting with iStart. */ -SQLITE_PRIVATE Expr *sqlite3LimitWhere( - Parse *pParse, /* The parser context */ - SrcList *pSrc, /* the FROM clause -- which tables to scan */ - Expr *pWhere, /* The WHERE clause. May be null */ - ExprList *pOrderBy, /* The ORDER BY clause. May be null */ - Expr *pLimit, /* The LIMIT clause. May be null */ - Expr *pOffset, /* The OFFSET clause. May be null */ - char *zStmtType /* Either DELETE or UPDATE. For error messages. */ -){ - Expr *pWhereRowid = NULL; /* WHERE rowid .. */ - Expr *pInClause = NULL; /* WHERE rowid IN ( select ) */ - Expr *pSelectRowid = NULL; /* SELECT rowid ... */ - ExprList *pEList = NULL; /* Expression list contaning only pSelectRowid */ - SrcList *pSelectSrc = NULL; /* SELECT rowid FROM x ... (dup of pSrc) */ - Select *pSelect = NULL; /* Complete SELECT tree */ +SQLITE_PRIVATE void sqlite3ExprCacheAffinityChange(Parse *pParse, int iStart, int iCount){ + sqlite3ExprCacheRemove(pParse, iStart, iCount); +} - /* Check that there isn't an ORDER BY without a LIMIT clause. - */ - if( pOrderBy && (pLimit == 0) ) { - sqlite3ErrorMsg(pParse, "ORDER BY without LIMIT on %s", zStmtType); - pParse->parseError = 1; - goto limit_where_cleanup_2; +/* +** Generate code to move content from registers iFrom...iFrom+nReg-1 +** over to iTo..iTo+nReg-1. Keep the column cache up-to-date. +*/ +SQLITE_PRIVATE void sqlite3ExprCodeMove(Parse *pParse, int iFrom, int iTo, int nReg){ + int i; + struct yColCache *p; + if( NEVER(iFrom==iTo) ) return; + sqlite3VdbeAddOp3(pParse->pVdbe, OP_Move, iFrom, iTo, nReg); + for(i=0, p=pParse->aColCache; iiReg; + if( x>=iFrom && xiReg += iTo-iFrom; + } } +} - /* We only need to generate a select expression if there - ** is a limit/offset term to enforce. - */ - if( pLimit == 0 ) { - /* if pLimit is null, pOffset will always be null as well. */ - assert( pOffset == 0 ); - return pWhere; +/* +** Generate code to copy content from registers iFrom...iFrom+nReg-1 +** over to iTo..iTo+nReg-1. +*/ +SQLITE_PRIVATE void sqlite3ExprCodeCopy(Parse *pParse, int iFrom, int iTo, int nReg){ + int i; + if( NEVER(iFrom==iTo) ) return; + for(i=0; ipVdbe, OP_Copy, iFrom+i, iTo+i); } +} - /* Generate a select expression tree to enforce the limit/offset - ** term for the DELETE or UPDATE statement. For example: - ** DELETE FROM table_a WHERE col1=1 ORDER BY col2 LIMIT 1 OFFSET 1 - ** becomes: - ** DELETE FROM table_a WHERE rowid IN ( - ** SELECT rowid FROM table_a WHERE col1=1 ORDER BY col2 LIMIT 1 OFFSET 1 - ** ); - */ - - pSelectRowid = sqlite3PExpr(pParse, TK_ROW, 0, 0, 0); - if( pSelectRowid == 0 ) goto limit_where_cleanup_2; - pEList = sqlite3ExprListAppend(pParse, 0, pSelectRowid); - if( pEList == 0 ) goto limit_where_cleanup_2; - - /* duplicate the FROM clause as it is needed by both the DELETE/UPDATE tree - ** and the SELECT subtree. */ - pSelectSrc = sqlite3SrcListDup(pParse->db, pSrc, 0); - if( pSelectSrc == 0 ) { - sqlite3ExprListDelete(pParse->db, pEList); - goto limit_where_cleanup_2; +#if defined(SQLITE_DEBUG) || defined(SQLITE_COVERAGE_TEST) +/* +** Return true if any register in the range iFrom..iTo (inclusive) +** is used as part of the column cache. +** +** This routine is used within assert() and testcase() macros only +** and does not appear in a normal build. +*/ +static int usedAsColumnCache(Parse *pParse, int iFrom, int iTo){ + int i; + struct yColCache *p; + for(i=0, p=pParse->aColCache; iiReg; + if( r>=iFrom && r<=iTo ) return 1; /*NO_TEST*/ } - - /* generate the SELECT expression tree. */ - pSelect = sqlite3SelectNew(pParse,pEList,pSelectSrc,pWhere,0,0, - pOrderBy,0,pLimit,pOffset); - if( pSelect == 0 ) return 0; - - /* now generate the new WHERE rowid IN clause for the DELETE/UDPATE */ - pWhereRowid = sqlite3PExpr(pParse, TK_ROW, 0, 0, 0); - if( pWhereRowid == 0 ) goto limit_where_cleanup_1; - pInClause = sqlite3PExpr(pParse, TK_IN, pWhereRowid, 0, 0); - if( pInClause == 0 ) goto limit_where_cleanup_1; - - pInClause->x.pSelect = pSelect; - pInClause->flags |= EP_xIsSelect; - sqlite3ExprSetHeight(pParse, pInClause); - return pInClause; - - /* something went wrong. clean up anything allocated. */ -limit_where_cleanup_1: - sqlite3SelectDelete(pParse->db, pSelect); - return 0; - -limit_where_cleanup_2: - sqlite3ExprDelete(pParse->db, pWhere); - sqlite3ExprListDelete(pParse->db, pOrderBy); - sqlite3ExprDelete(pParse->db, pLimit); - sqlite3ExprDelete(pParse->db, pOffset); return 0; } -#endif /* defined(SQLITE_ENABLE_UPDATE_DELETE_LIMIT) && !defined(SQLITE_OMIT_SUBQUERY) */ +#endif /* SQLITE_DEBUG || SQLITE_COVERAGE_TEST */ /* -** Generate code for a DELETE FROM statement. +** Generate code into the current Vdbe to evaluate the given +** expression. Attempt to store the results in register "target". +** Return the register where results are stored. ** -** DELETE FROM table_wxyz WHERE a<5 AND b NOT NULL; -** \________/ \________________/ -** pTabList pWhere +** With this routine, there is no guarantee that results will +** be stored in target. The result might be stored in some other +** register if it is convenient to do so. The calling function +** must check the return code and move the results to the desired +** register. */ -SQLITE_PRIVATE void sqlite3DeleteFrom( - Parse *pParse, /* The parser context */ - SrcList *pTabList, /* The table from which we should delete things */ - Expr *pWhere /* The WHERE clause. May be null */ -){ - Vdbe *v; /* The virtual database engine */ - Table *pTab; /* The table from which records will be deleted */ - const char *zDb; /* Name of database holding pTab */ - int end, addr = 0; /* A couple addresses of generated code */ - int i; /* Loop counter */ - WhereInfo *pWInfo; /* Information about the WHERE clause */ - Index *pIdx; /* For looping over indices of the table */ - int iCur; /* VDBE Cursor number for pTab */ - sqlite3 *db; /* Main database structure */ - AuthContext sContext; /* Authorization context */ - int oldIdx = -1; /* Cursor for the OLD table of AFTER triggers */ - NameContext sNC; /* Name context to resolve expressions in */ - int iDb; /* Database number */ - int memCnt = -1; /* Memory cell used for change counting */ - int rcauth; /* Value returned by authorization callback */ - -#ifndef SQLITE_OMIT_TRIGGER - int isView; /* True if attempting to delete from a view */ - Trigger *pTrigger; /* List of table triggers, if required */ -#endif - int iBeginAfterTrigger = 0; /* Address of after trigger program */ - int iEndAfterTrigger = 0; /* Exit of after trigger program */ - int iBeginBeforeTrigger = 0; /* Address of before trigger program */ - int iEndBeforeTrigger = 0; /* Exit of before trigger program */ - u32 old_col_mask = 0; /* Mask of OLD.* columns in use */ - - sContext.pParse = 0; - db = pParse->db; - if( pParse->nErr || db->mallocFailed ){ - goto delete_from_cleanup; - } - assert( pTabList->nSrc==1 ); - - /* Locate the table which we want to delete. This table has to be - ** put in an SrcList structure because some of the subroutines we - ** will be calling are designed to work with multiple tables and expect - ** an SrcList* parameter instead of just a Table* parameter. - */ - pTab = sqlite3SrcListLookup(pParse, pTabList); - if( pTab==0 ) goto delete_from_cleanup; - - /* Figure out if we have any triggers and if the table being - ** deleted from is a view - */ -#ifndef SQLITE_OMIT_TRIGGER - pTrigger = sqlite3TriggersExist(pParse, pTab, TK_DELETE, 0, 0); - isView = pTab->pSelect!=0; -#else -# define pTrigger 0 -# define isView 0 -#endif -#ifdef SQLITE_OMIT_VIEW -# undef isView -# define isView 0 -#endif - - if( sqlite3IsReadOnly(pParse, pTab, (pTrigger?1:0)) ){ - goto delete_from_cleanup; - } - iDb = sqlite3SchemaToIndex(db, pTab->pSchema); - assert( iDbnDb ); - zDb = db->aDb[iDb].zName; - rcauth = sqlite3AuthCheck(pParse, SQLITE_DELETE, pTab->zName, 0, zDb); - assert( rcauth==SQLITE_OK || rcauth==SQLITE_DENY || rcauth==SQLITE_IGNORE ); - if( rcauth==SQLITE_DENY ){ - goto delete_from_cleanup; - } - assert(!isView || pTrigger); - - /* If pTab is really a view, make sure it has been initialized. - */ - if( sqlite3ViewGetColumnNames(pParse, pTab) ){ - goto delete_from_cleanup; - } - - /* Allocate a cursor used to store the old.* data for a trigger. - */ - if( pTrigger ){ - oldIdx = pParse->nTab++; - } - - /* Assign cursor number to the table and all its indices. - */ - assert( pTabList->nSrc==1 ); - iCur = pTabList->a[0].iCursor = pParse->nTab++; - for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){ - pParse->nTab++; - } - - /* Start the view context - */ - if( isView ){ - sqlite3AuthContextPush(pParse, &sContext, pTab->zName); - } +SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target){ + Vdbe *v = pParse->pVdbe; /* The VM under construction */ + int op; /* The opcode being coded */ + int inReg = target; /* Results stored in register inReg */ + int regFree1 = 0; /* If non-zero free this temporary register */ + int regFree2 = 0; /* If non-zero free this temporary register */ + int r1, r2, r3, r4; /* Various register numbers */ + sqlite3 *db = pParse->db; /* The database connection */ - /* Begin generating code. - */ - v = sqlite3GetVdbe(pParse); + assert( target>0 && target<=pParse->nMem ); if( v==0 ){ - goto delete_from_cleanup; - } - if( pParse->nested==0 ) sqlite3VdbeCountChanges(v); - sqlite3BeginWriteOperation(pParse, (pTrigger?1:0), iDb); - - if( pTrigger ){ - int orconf = ((pParse->trigStack)?pParse->trigStack->orconf:OE_Default); - int iGoto = sqlite3VdbeAddOp0(v, OP_Goto); - addr = sqlite3VdbeMakeLabel(v); - - iBeginBeforeTrigger = sqlite3VdbeCurrentAddr(v); - (void)sqlite3CodeRowTrigger(pParse, pTrigger, TK_DELETE, 0, - TRIGGER_BEFORE, pTab, -1, oldIdx, orconf, addr, &old_col_mask, 0); - iEndBeforeTrigger = sqlite3VdbeAddOp0(v, OP_Goto); - - iBeginAfterTrigger = sqlite3VdbeCurrentAddr(v); - (void)sqlite3CodeRowTrigger(pParse, pTrigger, TK_DELETE, 0, - TRIGGER_AFTER, pTab, -1, oldIdx, orconf, addr, &old_col_mask, 0); - iEndAfterTrigger = sqlite3VdbeAddOp0(v, OP_Goto); - - sqlite3VdbeJumpHere(v, iGoto); - } - - /* If we are trying to delete from a view, realize that view into - ** a ephemeral table. - */ -#if !defined(SQLITE_OMIT_VIEW) && !defined(SQLITE_OMIT_TRIGGER) - if( isView ){ - sqlite3MaterializeView(pParse, pTab, pWhere, iCur); - } -#endif - - /* Resolve the column names in the WHERE clause. - */ - memset(&sNC, 0, sizeof(sNC)); - sNC.pParse = pParse; - sNC.pSrcList = pTabList; - if( sqlite3ResolveExprNames(&sNC, pWhere) ){ - goto delete_from_cleanup; + assert( pParse->db->mallocFailed ); + return 0; } - /* Initialize the counter of the number of rows deleted, if - ** we are counting rows. - */ - if( db->flags & SQLITE_CountRows ){ - memCnt = ++pParse->nMem; - sqlite3VdbeAddOp2(v, OP_Integer, 0, memCnt); + if( pExpr==0 ){ + op = TK_NULL; + }else{ + op = pExpr->op; } - -#ifndef SQLITE_OMIT_TRUNCATE_OPTIMIZATION - /* Special case: A DELETE without a WHERE clause deletes everything. - ** It is easier just to erase the whole table. Note, however, that - ** this means that the row change count will be incorrect. - */ - if( rcauth==SQLITE_OK && pWhere==0 && !pTrigger && !IsVirtual(pTab) ){ - assert( !isView ); - sqlite3VdbeAddOp4(v, OP_Clear, pTab->tnum, iDb, memCnt, - pTab->zName, P4_STATIC); - for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){ - assert( pIdx->pSchema==pTab->pSchema ); - sqlite3VdbeAddOp2(v, OP_Clear, pIdx->tnum, iDb); + switch( op ){ + case TK_AGG_COLUMN: { + AggInfo *pAggInfo = pExpr->pAggInfo; + struct AggInfo_col *pCol = &pAggInfo->aCol[pExpr->iAgg]; + if( !pAggInfo->directMode ){ + assert( pCol->iMem>0 ); + inReg = pCol->iMem; + break; + }else if( pAggInfo->useSortingIdx ){ + sqlite3VdbeAddOp3(v, OP_Column, pAggInfo->sortingIdxPTab, + pCol->iSorterColumn, target); + break; + } + /* Otherwise, fall thru into the TK_COLUMN case */ } - }else -#endif /* SQLITE_OMIT_TRUNCATE_OPTIMIZATION */ - /* The usual case: There is a WHERE clause so we have to scan through - ** the table and pick which records to delete. - */ - { - int iRowid = ++pParse->nMem; /* Used for storing rowid values. */ - int iRowSet = ++pParse->nMem; /* Register for rowset of rows to delete */ - int regRowid; /* Actual register containing rowids */ - - /* Collect rowids of every row to be deleted. - */ - sqlite3VdbeAddOp2(v, OP_Null, 0, iRowSet); - pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere,0,WHERE_DUPLICATES_OK); - if( pWInfo==0 ) goto delete_from_cleanup; - regRowid = sqlite3ExprCodeGetColumn(pParse, pTab, -1, iCur, iRowid, 0); - sqlite3VdbeAddOp2(v, OP_RowSetAdd, iRowSet, regRowid); - if( db->flags & SQLITE_CountRows ){ - sqlite3VdbeAddOp2(v, OP_AddImm, memCnt, 1); + case TK_COLUMN: { + if( pExpr->iTable<0 ){ + /* This only happens when coding check constraints */ + assert( pParse->ckBase>0 ); + inReg = pExpr->iColumn + pParse->ckBase; + }else{ + inReg = sqlite3ExprCodeGetColumn(pParse, pExpr->pTab, + pExpr->iColumn, pExpr->iTable, target, + pExpr->op2); + } + break; } - sqlite3WhereEnd(pWInfo); - - /* Open the pseudo-table used to store OLD if there are triggers. - */ - if( pTrigger ){ - sqlite3VdbeAddOp3(v, OP_OpenPseudo, oldIdx, 0, pTab->nCol); + case TK_INTEGER: { + codeInteger(pParse, pExpr, 0, target); + break; } - - /* Delete every item whose key was written to the list during the - ** database scan. We have to delete items after the scan is complete - ** because deleting an item can change the scan order. - */ - end = sqlite3VdbeMakeLabel(v); - - if( !isView ){ - /* Open cursors for the table we are deleting from and - ** all its indices. - */ - sqlite3OpenTableAndIndices(pParse, pTab, iCur, OP_OpenWrite); +#ifndef SQLITE_OMIT_FLOATING_POINT + case TK_FLOAT: { + assert( !ExprHasProperty(pExpr, EP_IntValue) ); + codeReal(v, pExpr->u.zToken, 0, target); + break; } - - /* This is the beginning of the delete loop. If a trigger encounters - ** an IGNORE constraint, it jumps back to here. - */ - if( pTrigger ){ - sqlite3VdbeResolveLabel(v, addr); +#endif + case TK_STRING: { + assert( !ExprHasProperty(pExpr, EP_IntValue) ); + sqlite3VdbeAddOp4(v, OP_String8, 0, target, 0, pExpr->u.zToken, 0); + break; } - addr = sqlite3VdbeAddOp3(v, OP_RowSetRead, iRowSet, end, iRowid); + case TK_NULL: { + sqlite3VdbeAddOp2(v, OP_Null, 0, target); + break; + } +#ifndef SQLITE_OMIT_BLOB_LITERAL + case TK_BLOB: { + int n; + const char *z; + char *zBlob; + assert( !ExprHasProperty(pExpr, EP_IntValue) ); + assert( pExpr->u.zToken[0]=='x' || pExpr->u.zToken[0]=='X' ); + assert( pExpr->u.zToken[1]=='\'' ); + z = &pExpr->u.zToken[2]; + n = sqlite3Strlen30(z) - 1; + assert( z[n]=='\'' ); + zBlob = sqlite3HexToBlob(sqlite3VdbeDb(v), z, n); + sqlite3VdbeAddOp4(v, OP_Blob, n/2, target, 0, zBlob, P4_DYNAMIC); + break; + } +#endif + case TK_VARIABLE: { + assert( !ExprHasProperty(pExpr, EP_IntValue) ); + assert( pExpr->u.zToken!=0 ); + assert( pExpr->u.zToken[0]!=0 ); + sqlite3VdbeAddOp2(v, OP_Variable, pExpr->iColumn, target); + if( pExpr->u.zToken[1]!=0 ){ + assert( pExpr->u.zToken[0]=='?' + || strcmp(pExpr->u.zToken, pParse->azVar[pExpr->iColumn-1])==0 ); + sqlite3VdbeChangeP4(v, -1, pParse->azVar[pExpr->iColumn-1], P4_STATIC); + } + break; + } + case TK_REGISTER: { + inReg = pExpr->iTable; + break; + } + case TK_AS: { + inReg = sqlite3ExprCodeTarget(pParse, pExpr->pLeft, target); + break; + } +#ifndef SQLITE_OMIT_CAST + case TK_CAST: { + /* Expressions of the form: CAST(pLeft AS token) */ + int aff, to_op; + inReg = sqlite3ExprCodeTarget(pParse, pExpr->pLeft, target); + assert( !ExprHasProperty(pExpr, EP_IntValue) ); + aff = sqlite3AffinityType(pExpr->u.zToken); + to_op = aff - SQLITE_AFF_TEXT + OP_ToText; + assert( to_op==OP_ToText || aff!=SQLITE_AFF_TEXT ); + assert( to_op==OP_ToBlob || aff!=SQLITE_AFF_NONE ); + assert( to_op==OP_ToNumeric || aff!=SQLITE_AFF_NUMERIC ); + assert( to_op==OP_ToInt || aff!=SQLITE_AFF_INTEGER ); + assert( to_op==OP_ToReal || aff!=SQLITE_AFF_REAL ); + testcase( to_op==OP_ToText ); + testcase( to_op==OP_ToBlob ); + testcase( to_op==OP_ToNumeric ); + testcase( to_op==OP_ToInt ); + testcase( to_op==OP_ToReal ); + if( inReg!=target ){ + sqlite3VdbeAddOp2(v, OP_SCopy, inReg, target); + inReg = target; + } + sqlite3VdbeAddOp1(v, to_op, inReg); + testcase( usedAsColumnCache(pParse, inReg, inReg) ); + sqlite3ExprCacheAffinityChange(pParse, inReg, 1); + break; + } +#endif /* SQLITE_OMIT_CAST */ + case TK_LT: + case TK_LE: + case TK_GT: + case TK_GE: + case TK_NE: + case TK_EQ: { + assert( TK_LT==OP_Lt ); + assert( TK_LE==OP_Le ); + assert( TK_GT==OP_Gt ); + assert( TK_GE==OP_Ge ); + assert( TK_EQ==OP_Eq ); + assert( TK_NE==OP_Ne ); + testcase( op==TK_LT ); + testcase( op==TK_LE ); + testcase( op==TK_GT ); + testcase( op==TK_GE ); + testcase( op==TK_EQ ); + testcase( op==TK_NE ); + r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, ®Free1); + r2 = sqlite3ExprCodeTemp(pParse, pExpr->pRight, ®Free2); + codeCompare(pParse, pExpr->pLeft, pExpr->pRight, op, + r1, r2, inReg, SQLITE_STOREP2); + testcase( regFree1==0 ); + testcase( regFree2==0 ); + break; + } + case TK_IS: + case TK_ISNOT: { + testcase( op==TK_IS ); + testcase( op==TK_ISNOT ); + r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, ®Free1); + r2 = sqlite3ExprCodeTemp(pParse, pExpr->pRight, ®Free2); + op = (op==TK_IS) ? TK_EQ : TK_NE; + codeCompare(pParse, pExpr->pLeft, pExpr->pRight, op, + r1, r2, inReg, SQLITE_STOREP2 | SQLITE_NULLEQ); + testcase( regFree1==0 ); + testcase( regFree2==0 ); + break; + } + case TK_AND: + case TK_OR: + case TK_PLUS: + case TK_STAR: + case TK_MINUS: + case TK_REM: + case TK_BITAND: + case TK_BITOR: + case TK_SLASH: + case TK_LSHIFT: + case TK_RSHIFT: + case TK_CONCAT: { + assert( TK_AND==OP_And ); + assert( TK_OR==OP_Or ); + assert( TK_PLUS==OP_Add ); + assert( TK_MINUS==OP_Subtract ); + assert( TK_REM==OP_Remainder ); + assert( TK_BITAND==OP_BitAnd ); + assert( TK_BITOR==OP_BitOr ); + assert( TK_SLASH==OP_Divide ); + assert( TK_LSHIFT==OP_ShiftLeft ); + assert( TK_RSHIFT==OP_ShiftRight ); + assert( TK_CONCAT==OP_Concat ); + testcase( op==TK_AND ); + testcase( op==TK_OR ); + testcase( op==TK_PLUS ); + testcase( op==TK_MINUS ); + testcase( op==TK_REM ); + testcase( op==TK_BITAND ); + testcase( op==TK_BITOR ); + testcase( op==TK_SLASH ); + testcase( op==TK_LSHIFT ); + testcase( op==TK_RSHIFT ); + testcase( op==TK_CONCAT ); + r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, ®Free1); + r2 = sqlite3ExprCodeTemp(pParse, pExpr->pRight, ®Free2); + sqlite3VdbeAddOp3(v, op, r2, r1, target); + testcase( regFree1==0 ); + testcase( regFree2==0 ); + break; + } + case TK_UMINUS: { + Expr *pLeft = pExpr->pLeft; + assert( pLeft ); + if( pLeft->op==TK_INTEGER ){ + codeInteger(pParse, pLeft, 1, target); +#ifndef SQLITE_OMIT_FLOATING_POINT + }else if( pLeft->op==TK_FLOAT ){ + assert( !ExprHasProperty(pExpr, EP_IntValue) ); + codeReal(v, pLeft->u.zToken, 1, target); +#endif + }else{ + regFree1 = r1 = sqlite3GetTempReg(pParse); + sqlite3VdbeAddOp2(v, OP_Integer, 0, r1); + r2 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, ®Free2); + sqlite3VdbeAddOp3(v, OP_Subtract, r2, r1, target); + testcase( regFree2==0 ); + } + inReg = target; + break; + } + case TK_BITNOT: + case TK_NOT: { + assert( TK_BITNOT==OP_BitNot ); + assert( TK_NOT==OP_Not ); + testcase( op==TK_BITNOT ); + testcase( op==TK_NOT ); + r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, ®Free1); + testcase( regFree1==0 ); + inReg = target; + sqlite3VdbeAddOp2(v, op, r1, inReg); + break; + } + case TK_ISNULL: + case TK_NOTNULL: { + int addr; + assert( TK_ISNULL==OP_IsNull ); + assert( TK_NOTNULL==OP_NotNull ); + testcase( op==TK_ISNULL ); + testcase( op==TK_NOTNULL ); + sqlite3VdbeAddOp2(v, OP_Integer, 1, target); + r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, ®Free1); + testcase( regFree1==0 ); + addr = sqlite3VdbeAddOp1(v, op, r1); + sqlite3VdbeAddOp2(v, OP_AddImm, target, -1); + sqlite3VdbeJumpHere(v, addr); + break; + } + case TK_AGG_FUNCTION: { + AggInfo *pInfo = pExpr->pAggInfo; + if( pInfo==0 ){ + assert( !ExprHasProperty(pExpr, EP_IntValue) ); + sqlite3ErrorMsg(pParse, "misuse of aggregate: %s()", pExpr->u.zToken); + }else{ + inReg = pInfo->aFunc[pExpr->iAgg].iMem; + } + break; + } + case TK_CONST_FUNC: + case TK_FUNCTION: { + ExprList *pFarg; /* List of function arguments */ + int nFarg; /* Number of function arguments */ + FuncDef *pDef; /* The function definition object */ + int nId; /* Length of the function name in bytes */ + const char *zId; /* The function name */ + int constMask = 0; /* Mask of function arguments that are constant */ + int i; /* Loop counter */ + u8 enc = ENC(db); /* The text encoding used by this database */ + CollSeq *pColl = 0; /* A collating sequence */ - if( pTrigger ){ - int iData = ++pParse->nMem; /* For storing row data of OLD table */ + assert( !ExprHasProperty(pExpr, EP_xIsSelect) ); + testcase( op==TK_CONST_FUNC ); + testcase( op==TK_FUNCTION ); + if( ExprHasAnyProperty(pExpr, EP_TokenOnly) ){ + pFarg = 0; + }else{ + pFarg = pExpr->x.pList; + } + nFarg = pFarg ? pFarg->nExpr : 0; + assert( !ExprHasProperty(pExpr, EP_IntValue) ); + zId = pExpr->u.zToken; + nId = sqlite3Strlen30(zId); + pDef = sqlite3FindFunction(db, zId, nId, nFarg, enc, 0); + if( pDef==0 ){ + sqlite3ErrorMsg(pParse, "unknown function: %.*s()", nId, zId); + break; + } - /* If the record is no longer present in the table, jump to the - ** next iteration of the loop through the contents of the fifo. + /* Attempt a direct implementation of the built-in COALESCE() and + ** IFNULL() functions. This avoids unnecessary evalation of + ** arguments past the first non-NULL argument. */ - sqlite3VdbeAddOp3(v, OP_NotExists, iCur, addr, iRowid); - - /* Populate the OLD.* pseudo-table */ - if( old_col_mask ){ - sqlite3VdbeAddOp2(v, OP_RowData, iCur, iData); - }else{ - sqlite3VdbeAddOp2(v, OP_Null, 0, iData); + if( pDef->flags & SQLITE_FUNC_COALESCE ){ + int endCoalesce = sqlite3VdbeMakeLabel(v); + assert( nFarg>=2 ); + sqlite3ExprCode(pParse, pFarg->a[0].pExpr, target); + for(i=1; ia[i].pExpr, target); + sqlite3ExprCachePop(pParse, 1); + } + sqlite3VdbeResolveLabel(v, endCoalesce); + break; } - sqlite3VdbeAddOp3(v, OP_Insert, oldIdx, iData, iRowid); - /* Jump back and run the BEFORE triggers */ - sqlite3VdbeAddOp2(v, OP_Goto, 0, iBeginBeforeTrigger); - sqlite3VdbeJumpHere(v, iEndBeforeTrigger); - } - if( !isView ){ - /* Delete the row */ + if( pFarg ){ + r1 = sqlite3GetTempRange(pParse, nFarg); + + /* For length() and typeof() functions with a column argument, + ** set the P5 parameter to the OP_Column opcode to OPFLAG_LENGTHARG + ** or OPFLAG_TYPEOFARG respectively, to avoid unnecessary data + ** loading. + */ + if( (pDef->flags & (SQLITE_FUNC_LENGTH|SQLITE_FUNC_TYPEOF))!=0 ){ + u8 exprOp; + assert( nFarg==1 ); + assert( pFarg->a[0].pExpr!=0 ); + exprOp = pFarg->a[0].pExpr->op; + if( exprOp==TK_COLUMN || exprOp==TK_AGG_COLUMN ){ + assert( SQLITE_FUNC_LENGTH==OPFLAG_LENGTHARG ); + assert( SQLITE_FUNC_TYPEOF==OPFLAG_TYPEOFARG ); + testcase( pDef->flags==SQLITE_FUNC_LENGTH ); + pFarg->a[0].pExpr->op2 = pDef->flags; + } + } + + sqlite3ExprCachePush(pParse); /* Ticket 2ea2425d34be */ + sqlite3ExprCodeExprList(pParse, pFarg, r1, 1); + sqlite3ExprCachePop(pParse, 1); /* Ticket 2ea2425d34be */ + }else{ + r1 = 0; + } #ifndef SQLITE_OMIT_VIRTUALTABLE - if( IsVirtual(pTab) ){ - const char *pVtab = (const char *)pTab->pVtab; - sqlite3VtabMakeWritable(pParse, pTab); - sqlite3VdbeAddOp4(v, OP_VUpdate, 0, 1, iRowid, pVtab, P4_VTAB); - }else + /* Possibly overload the function if the first argument is + ** a virtual table column. + ** + ** For infix functions (LIKE, GLOB, REGEXP, and MATCH) use the + ** second argument, not the first, as the argument to test to + ** see if it is a column in a virtual table. This is done because + ** the left operand of infix functions (the operand we want to + ** control overloading) ends up as the second argument to the + ** function. The expression "A glob B" is equivalent to + ** "glob(B,A). We want to use the A in "A glob B" to test + ** for function overloading. But we use the B term in "glob(B,A)". + */ + if( nFarg>=2 && (pExpr->flags & EP_InfixFunc) ){ + pDef = sqlite3VtabOverloadFunction(db, pDef, nFarg, pFarg->a[1].pExpr); + }else if( nFarg>0 ){ + pDef = sqlite3VtabOverloadFunction(db, pDef, nFarg, pFarg->a[0].pExpr); + } #endif - { - sqlite3GenerateRowDelete(pParse, pTab, iCur, iRowid, pParse->nested==0); + for(i=0; ia[i].pExpr) ){ + constMask |= (1<flags & SQLITE_FUNC_NEEDCOLL)!=0 && !pColl ){ + pColl = sqlite3ExprCollSeq(pParse, pFarg->a[i].pExpr); + } + } + if( pDef->flags & SQLITE_FUNC_NEEDCOLL ){ + if( !pColl ) pColl = db->pDfltColl; + sqlite3VdbeAddOp4(v, OP_CollSeq, 0, 0, 0, (char *)pColl, P4_COLLSEQ); } + sqlite3VdbeAddOp4(v, OP_Function, constMask, r1, target, + (char*)pDef, P4_FUNCDEF); + sqlite3VdbeChangeP5(v, (u8)nFarg); + if( nFarg ){ + sqlite3ReleaseTempRange(pParse, r1, nFarg); + } + break; + } +#ifndef SQLITE_OMIT_SUBQUERY + case TK_EXISTS: + case TK_SELECT: { + testcase( op==TK_EXISTS ); + testcase( op==TK_SELECT ); + inReg = sqlite3CodeSubselect(pParse, pExpr, 0, 0); + break; + } + case TK_IN: { + int destIfFalse = sqlite3VdbeMakeLabel(v); + int destIfNull = sqlite3VdbeMakeLabel(v); + sqlite3VdbeAddOp2(v, OP_Null, 0, target); + sqlite3ExprCodeIN(pParse, pExpr, destIfFalse, destIfNull); + sqlite3VdbeAddOp2(v, OP_Integer, 1, target); + sqlite3VdbeResolveLabel(v, destIfFalse); + sqlite3VdbeAddOp2(v, OP_AddImm, target, 0); + sqlite3VdbeResolveLabel(v, destIfNull); + break; } +#endif /* SQLITE_OMIT_SUBQUERY */ - /* If there are row triggers, close all cursors then invoke - ** the AFTER triggers + + /* + ** x BETWEEN y AND z + ** + ** This is equivalent to + ** + ** x>=y AND x<=z + ** + ** X is stored in pExpr->pLeft. + ** Y is stored in pExpr->pList->a[0].pExpr. + ** Z is stored in pExpr->pList->a[1].pExpr. */ - if( pTrigger ){ - /* Jump back and run the AFTER triggers */ - sqlite3VdbeAddOp2(v, OP_Goto, 0, iBeginAfterTrigger); - sqlite3VdbeJumpHere(v, iEndAfterTrigger); + case TK_BETWEEN: { + Expr *pLeft = pExpr->pLeft; + struct ExprList_item *pLItem = pExpr->x.pList->a; + Expr *pRight = pLItem->pExpr; + + r1 = sqlite3ExprCodeTemp(pParse, pLeft, ®Free1); + r2 = sqlite3ExprCodeTemp(pParse, pRight, ®Free2); + testcase( regFree1==0 ); + testcase( regFree2==0 ); + r3 = sqlite3GetTempReg(pParse); + r4 = sqlite3GetTempReg(pParse); + codeCompare(pParse, pLeft, pRight, OP_Ge, + r1, r2, r3, SQLITE_STOREP2); + pLItem++; + pRight = pLItem->pExpr; + sqlite3ReleaseTempReg(pParse, regFree2); + r2 = sqlite3ExprCodeTemp(pParse, pRight, ®Free2); + testcase( regFree2==0 ); + codeCompare(pParse, pLeft, pRight, OP_Le, r1, r2, r4, SQLITE_STOREP2); + sqlite3VdbeAddOp3(v, OP_And, r3, r4, target); + sqlite3ReleaseTempReg(pParse, r3); + sqlite3ReleaseTempReg(pParse, r4); + break; + } + case TK_UPLUS: { + inReg = sqlite3ExprCodeTarget(pParse, pExpr->pLeft, target); + break; } - /* End of the delete loop */ - sqlite3VdbeAddOp2(v, OP_Goto, 0, addr); - sqlite3VdbeResolveLabel(v, end); + case TK_TRIGGER: { + /* If the opcode is TK_TRIGGER, then the expression is a reference + ** to a column in the new.* or old.* pseudo-tables available to + ** trigger programs. In this case Expr.iTable is set to 1 for the + ** new.* pseudo-table, or 0 for the old.* pseudo-table. Expr.iColumn + ** is set to the column of the pseudo-table to read, or to -1 to + ** read the rowid field. + ** + ** The expression is implemented using an OP_Param opcode. The p1 + ** parameter is set to 0 for an old.rowid reference, or to (i+1) + ** to reference another column of the old.* pseudo-table, where + ** i is the index of the column. For a new.rowid reference, p1 is + ** set to (n+1), where n is the number of columns in each pseudo-table. + ** For a reference to any other column in the new.* pseudo-table, p1 + ** is set to (n+2+i), where n and i are as defined previously. For + ** example, if the table on which triggers are being fired is + ** declared as: + ** + ** CREATE TABLE t1(a, b); + ** + ** Then p1 is interpreted as follows: + ** + ** p1==0 -> old.rowid p1==3 -> new.rowid + ** p1==1 -> old.a p1==4 -> new.a + ** p1==2 -> old.b p1==5 -> new.b + */ + Table *pTab = pExpr->pTab; + int p1 = pExpr->iTable * (pTab->nCol+1) + 1 + pExpr->iColumn; - /* Close the cursors after the loop if there are no row triggers */ - if( !isView && !IsVirtual(pTab) ){ - for(i=1, pIdx=pTab->pIndex; pIdx; i++, pIdx=pIdx->pNext){ - sqlite3VdbeAddOp2(v, OP_Close, iCur + i, pIdx->tnum); + assert( pExpr->iTable==0 || pExpr->iTable==1 ); + assert( pExpr->iColumn>=-1 && pExpr->iColumnnCol ); + assert( pTab->iPKey<0 || pExpr->iColumn!=pTab->iPKey ); + assert( p1>=0 && p1<(pTab->nCol*2+2) ); + + sqlite3VdbeAddOp2(v, OP_Param, p1, target); + VdbeComment((v, "%s.%s -> $%d", + (pExpr->iTable ? "new" : "old"), + (pExpr->iColumn<0 ? "rowid" : pExpr->pTab->aCol[pExpr->iColumn].zName), + target + )); + +#ifndef SQLITE_OMIT_FLOATING_POINT + /* If the column has REAL affinity, it may currently be stored as an + ** integer. Use OP_RealAffinity to make sure it is really real. */ + if( pExpr->iColumn>=0 + && pTab->aCol[pExpr->iColumn].affinity==SQLITE_AFF_REAL + ){ + sqlite3VdbeAddOp1(v, OP_RealAffinity, target); } - sqlite3VdbeAddOp1(v, OP_Close, iCur); +#endif + break; } - } - - /* Update the sqlite_sequence table by storing the content of the - ** maximum rowid counter values recorded while inserting into - ** autoincrement tables. - */ - if( pParse->nested==0 && pParse->trigStack==0 ){ - sqlite3AutoincrementEnd(pParse); - } - /* - ** Return the number of rows that were deleted. If this routine is - ** generating code because of a call to sqlite3NestedParse(), do not - ** invoke the callback function. - */ - if( db->flags & SQLITE_CountRows && pParse->nested==0 && !pParse->trigStack ){ - sqlite3VdbeAddOp2(v, OP_ResultRow, memCnt, 1); - sqlite3VdbeSetNumCols(v, 1); - sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "rows deleted", SQLITE_STATIC); - } -delete_from_cleanup: - sqlite3AuthContextPop(&sContext); - sqlite3SrcListDelete(db, pTabList); - sqlite3ExprDelete(db, pWhere); - return; -} + /* + ** Form A: + ** CASE x WHEN e1 THEN r1 WHEN e2 THEN r2 ... WHEN eN THEN rN ELSE y END + ** + ** Form B: + ** CASE WHEN e1 THEN r1 WHEN e2 THEN r2 ... WHEN eN THEN rN ELSE y END + ** + ** Form A is can be transformed into the equivalent form B as follows: + ** CASE WHEN x=e1 THEN r1 WHEN x=e2 THEN r2 ... + ** WHEN x=eN THEN rN ELSE y END + ** + ** X (if it exists) is in pExpr->pLeft. + ** Y is in pExpr->pRight. The Y is also optional. If there is no + ** ELSE clause and no other term matches, then the result of the + ** exprssion is NULL. + ** Ei is in pExpr->pList->a[i*2] and Ri is pExpr->pList->a[i*2+1]. + ** + ** The result of the expression is the Ri for the first matching Ei, + ** or if there is no matching Ei, the ELSE term Y, or if there is + ** no ELSE term, NULL. + */ + default: assert( op==TK_CASE ); { + int endLabel; /* GOTO label for end of CASE stmt */ + int nextCase; /* GOTO label for next WHEN clause */ + int nExpr; /* 2x number of WHEN terms */ + int i; /* Loop counter */ + ExprList *pEList; /* List of WHEN terms */ + struct ExprList_item *aListelem; /* Array of WHEN terms */ + Expr opCompare; /* The X==Ei expression */ + Expr cacheX; /* Cached expression X */ + Expr *pX; /* The X expression */ + Expr *pTest = 0; /* X==Ei (form A) or just Ei (form B) */ + VVA_ONLY( int iCacheLevel = pParse->iCacheLevel; ) -/* -** This routine generates VDBE code that causes a single row of a -** single table to be deleted. -** -** The VDBE must be in a particular state when this routine is called. -** These are the requirements: -** -** 1. A read/write cursor pointing to pTab, the table containing the row -** to be deleted, must be opened as cursor number "base". -** -** 2. Read/write cursors for all indices of pTab must be open as -** cursor number base+i for the i-th index. -** -** 3. The record number of the row to be deleted must be stored in -** memory cell iRowid. -** -** This routine pops the top of the stack to remove the record number -** and then generates code to remove both the table record and all index -** entries that point to that record. -*/ -SQLITE_PRIVATE void sqlite3GenerateRowDelete( - Parse *pParse, /* Parsing context */ - Table *pTab, /* Table containing the row to be deleted */ - int iCur, /* Cursor number for the table */ - int iRowid, /* Memory cell that contains the rowid to delete */ - int count /* Increment the row change counter */ -){ - int addr; - Vdbe *v; + assert( !ExprHasProperty(pExpr, EP_xIsSelect) && pExpr->x.pList ); + assert((pExpr->x.pList->nExpr % 2) == 0); + assert(pExpr->x.pList->nExpr > 0); + pEList = pExpr->x.pList; + aListelem = pEList->a; + nExpr = pEList->nExpr; + endLabel = sqlite3VdbeMakeLabel(v); + if( (pX = pExpr->pLeft)!=0 ){ + cacheX = *pX; + testcase( pX->op==TK_COLUMN ); + testcase( pX->op==TK_REGISTER ); + cacheX.iTable = sqlite3ExprCodeTemp(pParse, pX, ®Free1); + testcase( regFree1==0 ); + cacheX.op = TK_REGISTER; + opCompare.op = TK_EQ; + opCompare.pLeft = &cacheX; + pTest = &opCompare; + /* Ticket b351d95f9cd5ef17e9d9dbae18f5ca8611190001: + ** The value in regFree1 might get SCopy-ed into the file result. + ** So make sure that the regFree1 register is not reused for other + ** purposes and possibly overwritten. */ + regFree1 = 0; + } + for(i=0; iop==TK_COLUMN ); + sqlite3ExprIfFalse(pParse, pTest, nextCase, SQLITE_JUMPIFNULL); + testcase( aListelem[i+1].pExpr->op==TK_COLUMN ); + testcase( aListelem[i+1].pExpr->op==TK_REGISTER ); + sqlite3ExprCode(pParse, aListelem[i+1].pExpr, target); + sqlite3VdbeAddOp2(v, OP_Goto, 0, endLabel); + sqlite3ExprCachePop(pParse, 1); + sqlite3VdbeResolveLabel(v, nextCase); + } + if( pExpr->pRight ){ + sqlite3ExprCachePush(pParse); + sqlite3ExprCode(pParse, pExpr->pRight, target); + sqlite3ExprCachePop(pParse, 1); + }else{ + sqlite3VdbeAddOp2(v, OP_Null, 0, target); + } + assert( db->mallocFailed || pParse->nErr>0 + || pParse->iCacheLevel==iCacheLevel ); + sqlite3VdbeResolveLabel(v, endLabel); + break; + } +#ifndef SQLITE_OMIT_TRIGGER + case TK_RAISE: { + assert( pExpr->affinity==OE_Rollback + || pExpr->affinity==OE_Abort + || pExpr->affinity==OE_Fail + || pExpr->affinity==OE_Ignore + ); + if( !pParse->pTriggerTab ){ + sqlite3ErrorMsg(pParse, + "RAISE() may only be used within a trigger-program"); + return 0; + } + if( pExpr->affinity==OE_Abort ){ + sqlite3MayAbort(pParse); + } + assert( !ExprHasProperty(pExpr, EP_IntValue) ); + if( pExpr->affinity==OE_Ignore ){ + sqlite3VdbeAddOp4( + v, OP_Halt, SQLITE_OK, OE_Ignore, 0, pExpr->u.zToken,0); + }else{ + sqlite3HaltConstraint(pParse, pExpr->affinity, pExpr->u.zToken, 0); + } - v = pParse->pVdbe; - addr = sqlite3VdbeAddOp3(v, OP_NotExists, iCur, 0, iRowid); - sqlite3GenerateRowIndexDelete(pParse, pTab, iCur, 0); - sqlite3VdbeAddOp2(v, OP_Delete, iCur, (count?OPFLAG_NCHANGE:0)); - if( count ){ - sqlite3VdbeChangeP4(v, -1, pTab->zName, P4_STATIC); + break; + } +#endif } - sqlite3VdbeJumpHere(v, addr); + sqlite3ReleaseTempReg(pParse, regFree1); + sqlite3ReleaseTempReg(pParse, regFree2); + return inReg; } /* -** This routine generates VDBE code that causes the deletion of all -** index entries associated with a single row of a single table. -** -** The VDBE must be in a particular state when this routine is called. -** These are the requirements: -** -** 1. A read/write cursor pointing to pTab, the table containing the row -** to be deleted, must be opened as cursor number "iCur". +** Generate code to evaluate an expression and store the results +** into a register. Return the register number where the results +** are stored. ** -** 2. Read/write cursors for all indices of pTab must be open as -** cursor number iCur+i for the i-th index. -** -** 3. The "iCur" cursor must be pointing to the row that is to be -** deleted. +** If the register is a temporary register that can be deallocated, +** then write its number into *pReg. If the result register is not +** a temporary, then set *pReg to zero. */ -SQLITE_PRIVATE void sqlite3GenerateRowIndexDelete( - Parse *pParse, /* Parsing and code generating context */ - Table *pTab, /* Table containing the row to be deleted */ - int iCur, /* Cursor number for the table */ - int *aRegIdx /* Only delete if aRegIdx!=0 && aRegIdx[i]>0 */ -){ - int i; - Index *pIdx; - int r1; - - for(i=1, pIdx=pTab->pIndex; pIdx; i++, pIdx=pIdx->pNext){ - if( aRegIdx!=0 && aRegIdx[i-1]==0 ) continue; - r1 = sqlite3GenerateIndexKey(pParse, pIdx, iCur, 0, 0); - sqlite3VdbeAddOp3(pParse->pVdbe, OP_IdxDelete, iCur+i, r1,pIdx->nColumn+1); +SQLITE_PRIVATE int sqlite3ExprCodeTemp(Parse *pParse, Expr *pExpr, int *pReg){ + int r1 = sqlite3GetTempReg(pParse); + int r2 = sqlite3ExprCodeTarget(pParse, pExpr, r1); + if( r2==r1 ){ + *pReg = r1; + }else{ + sqlite3ReleaseTempReg(pParse, r1); + *pReg = 0; } + return r2; } /* -** Generate code that will assemble an index key and put it in register -** regOut. The key with be for index pIdx which is an index on pTab. -** iCur is the index of a cursor open on the pTab table and pointing to -** the entry that needs indexing. -** -** Return a register number which is the first in a block of -** registers that holds the elements of the index key. The -** block of registers has already been deallocated by the time -** this routine returns. +** Generate code that will evaluate expression pExpr and store the +** results in register target. The results are guaranteed to appear +** in register target. */ -SQLITE_PRIVATE int sqlite3GenerateIndexKey( - Parse *pParse, /* Parsing context */ - Index *pIdx, /* The index for which to generate a key */ - int iCur, /* Cursor number for the pIdx->pTable table */ - int regOut, /* Write the new index key to this register */ - int doMakeRec /* Run the OP_MakeRecord instruction if true */ -){ - Vdbe *v = pParse->pVdbe; - int j; - Table *pTab = pIdx->pTable; - int regBase; - int nCol; +SQLITE_PRIVATE int sqlite3ExprCode(Parse *pParse, Expr *pExpr, int target){ + int inReg; - nCol = pIdx->nColumn; - regBase = sqlite3GetTempRange(pParse, nCol+1); - sqlite3VdbeAddOp2(v, OP_Rowid, iCur, regBase+nCol); - for(j=0; jaiColumn[j]; - if( idx==pTab->iPKey ){ - sqlite3VdbeAddOp2(v, OP_SCopy, regBase+nCol, regBase+j); - }else{ - sqlite3VdbeAddOp3(v, OP_Column, iCur, idx, regBase+j); - sqlite3ColumnDefault(v, pTab, idx); + assert( target>0 && target<=pParse->nMem ); + if( pExpr && pExpr->op==TK_REGISTER ){ + sqlite3VdbeAddOp2(pParse->pVdbe, OP_Copy, pExpr->iTable, target); + }else{ + inReg = sqlite3ExprCodeTarget(pParse, pExpr, target); + assert( pParse->pVdbe || pParse->db->mallocFailed ); + if( inReg!=target && pParse->pVdbe ){ + sqlite3VdbeAddOp2(pParse->pVdbe, OP_SCopy, inReg, target); } } - if( doMakeRec ){ - sqlite3VdbeAddOp3(v, OP_MakeRecord, regBase, nCol+1, regOut); - sqlite3IndexAffinityStr(v, pIdx); - sqlite3ExprCacheAffinityChange(pParse, regBase, nCol+1); - } - sqlite3ReleaseTempRange(pParse, regBase, nCol+1); - return regBase; + return target; } -/* Make sure "isView" gets undefined in case this file becomes part of -** the amalgamation - so that subsequent files do not see isView as a -** macro. */ -#undef isView - -/************** End of delete.c **********************************************/ -/************** Begin file func.c ********************************************/ /* -** 2002 February 23 -** -** The author disclaims copyright to this source code. In place of -** a legal notice, here is a blessing: -** -** May you do good and not evil. -** May you find forgiveness for yourself and forgive others. -** May you share freely, never taking more than you give. -** -************************************************************************* -** This file contains the C functions that implement various SQL -** functions of SQLite. +** Generate code that evalutes the given expression and puts the result +** in register target. ** -** There is only one exported symbol in this file - the function -** sqliteRegisterBuildinFunctions() found at the bottom of the file. -** All other code has file scope. +** Also make a copy of the expression results into another "cache" register +** and modify the expression so that the next time it is evaluated, +** the result is a copy of the cache register. ** -** $Id: func.c,v 1.239 2009/06/19 16:44:41 drh Exp $ -*/ - -/* -** Return the collating function associated with a function. -*/ -static CollSeq *sqlite3GetFuncCollSeq(sqlite3_context *context){ - return context->pColl; -} - -/* -** Implementation of the non-aggregate min() and max() functions +** This routine is used for expressions that are used multiple +** times. They are evaluated once and the results of the expression +** are reused. */ -static void minmaxFunc( - sqlite3_context *context, - int argc, - sqlite3_value **argv -){ - int i; - int mask; /* 0 for min() or 0xffffffff for max() */ - int iBest; - CollSeq *pColl; - - assert( argc>1 ); - mask = sqlite3_user_data(context)==0 ? 0 : -1; - pColl = sqlite3GetFuncCollSeq(context); - assert( pColl ); - assert( mask==-1 || mask==0 ); - iBest = 0; - if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return; - for(i=1; i=0 ){ - testcase( mask==0 ); - iBest = i; - } +SQLITE_PRIVATE int sqlite3ExprCodeAndCache(Parse *pParse, Expr *pExpr, int target){ + Vdbe *v = pParse->pVdbe; + int inReg; + inReg = sqlite3ExprCode(pParse, pExpr, target); + assert( target>0 ); + /* This routine is called for terms to INSERT or UPDATE. And the only + ** other place where expressions can be converted into TK_REGISTER is + ** in WHERE clause processing. So as currently implemented, there is + ** no way for a TK_REGISTER to exist here. But it seems prudent to + ** keep the ALWAYS() in case the conditions above change with future + ** modifications or enhancements. */ + if( ALWAYS(pExpr->op!=TK_REGISTER) ){ + int iMem; + iMem = ++pParse->nMem; + sqlite3VdbeAddOp2(v, OP_Copy, inReg, iMem); + pExpr->iTable = iMem; + pExpr->op2 = pExpr->op; + pExpr->op = TK_REGISTER; } - sqlite3_result_value(context, argv[iBest]); + return inReg; } +#if defined(SQLITE_ENABLE_TREE_EXPLAIN) /* -** Return the type of the argument. +** Generate a human-readable explanation of an expression tree. */ -static void typeofFunc( - sqlite3_context *context, - int NotUsed, - sqlite3_value **argv -){ - const char *z = 0; - UNUSED_PARAMETER(NotUsed); - switch( sqlite3_value_type(argv[0]) ){ - case SQLITE_INTEGER: z = "integer"; break; - case SQLITE_TEXT: z = "text"; break; - case SQLITE_FLOAT: z = "real"; break; - case SQLITE_BLOB: z = "blob"; break; - default: z = "null"; break; +SQLITE_PRIVATE void sqlite3ExplainExpr(Vdbe *pOut, Expr *pExpr){ + int op; /* The opcode being coded */ + const char *zBinOp = 0; /* Binary operator */ + const char *zUniOp = 0; /* Unary operator */ + if( pExpr==0 ){ + op = TK_NULL; + }else{ + op = pExpr->op; } - sqlite3_result_text(context, z, -1, SQLITE_STATIC); -} - - -/* -** Implementation of the length() function -*/ -static void lengthFunc( - sqlite3_context *context, - int argc, - sqlite3_value **argv -){ - int len; - - assert( argc==1 ); - UNUSED_PARAMETER(argc); - switch( sqlite3_value_type(argv[0]) ){ - case SQLITE_BLOB: - case SQLITE_INTEGER: - case SQLITE_FLOAT: { - sqlite3_result_int(context, sqlite3_value_bytes(argv[0])); + switch( op ){ + case TK_AGG_COLUMN: { + sqlite3ExplainPrintf(pOut, "AGG{%d:%d}", + pExpr->iTable, pExpr->iColumn); break; } - case SQLITE_TEXT: { - const unsigned char *z = sqlite3_value_text(argv[0]); - if( z==0 ) return; - len = 0; - while( *z ){ - len++; - SQLITE_SKIP_UTF8(z); + case TK_COLUMN: { + if( pExpr->iTable<0 ){ + /* This only happens when coding check constraints */ + sqlite3ExplainPrintf(pOut, "COLUMN(%d)", pExpr->iColumn); + }else{ + sqlite3ExplainPrintf(pOut, "{%d:%d}", + pExpr->iTable, pExpr->iColumn); } - sqlite3_result_int(context, len); break; } - default: { - sqlite3_result_null(context); + case TK_INTEGER: { + if( pExpr->flags & EP_IntValue ){ + sqlite3ExplainPrintf(pOut, "%d", pExpr->u.iValue); + }else{ + sqlite3ExplainPrintf(pOut, "%s", pExpr->u.zToken); + } break; } - } -} - -/* -** Implementation of the abs() function -*/ -static void absFunc(sqlite3_context *context, int argc, sqlite3_value **argv){ - assert( argc==1 ); - UNUSED_PARAMETER(argc); - switch( sqlite3_value_type(argv[0]) ){ - case SQLITE_INTEGER: { - i64 iVal = sqlite3_value_int64(argv[0]); - if( iVal<0 ){ - if( (iVal<<1)==0 ){ - sqlite3_result_error(context, "integer overflow", -1); - return; - } - iVal = -iVal; - } - sqlite3_result_int64(context, iVal); +#ifndef SQLITE_OMIT_FLOATING_POINT + case TK_FLOAT: { + sqlite3ExplainPrintf(pOut,"%s", pExpr->u.zToken); break; } - case SQLITE_NULL: { - sqlite3_result_null(context); +#endif + case TK_STRING: { + sqlite3ExplainPrintf(pOut,"%Q", pExpr->u.zToken); break; } - default: { - double rVal = sqlite3_value_double(argv[0]); - if( rVal<0 ) rVal = -rVal; - sqlite3_result_double(context, rVal); + case TK_NULL: { + sqlite3ExplainPrintf(pOut,"NULL"); break; } - } -} - -/* -** Implementation of the substr() function. -** -** substr(x,p1,p2) returns p2 characters of x[] beginning with p1. -** p1 is 1-indexed. So substr(x,1,1) returns the first character -** of x. If x is text, then we actually count UTF-8 characters. -** If x is a blob, then we count bytes. -** -** If p1 is negative, then we begin abs(p1) from the end of x[]. -*/ -static void substrFunc( - sqlite3_context *context, - int argc, - sqlite3_value **argv -){ - const unsigned char *z; - const unsigned char *z2; - int len; - int p0type; - i64 p1, p2; - int negP2 = 0; - - assert( argc==3 || argc==2 ); - if( sqlite3_value_type(argv[1])==SQLITE_NULL - || (argc==3 && sqlite3_value_type(argv[2])==SQLITE_NULL) - ){ - return; - } - p0type = sqlite3_value_type(argv[0]); - if( p0type==SQLITE_BLOB ){ - len = sqlite3_value_bytes(argv[0]); - z = sqlite3_value_blob(argv[0]); - if( z==0 ) return; - assert( len==sqlite3_value_bytes(argv[0]) ); - }else{ - z = sqlite3_value_text(argv[0]); - if( z==0 ) return; - len = 0; - for(z2=z; *z2; len++){ - SQLITE_SKIP_UTF8(z2); +#ifndef SQLITE_OMIT_BLOB_LITERAL + case TK_BLOB: { + sqlite3ExplainPrintf(pOut,"%s", pExpr->u.zToken); + break; } - } - p1 = sqlite3_value_int(argv[1]); - if( argc==3 ){ - p2 = sqlite3_value_int(argv[2]); - if( p2<0 ){ - p2 = -p2; - negP2 = 1; +#endif + case TK_VARIABLE: { + sqlite3ExplainPrintf(pOut,"VARIABLE(%s,%d)", + pExpr->u.zToken, pExpr->iColumn); + break; } - }else{ - p2 = sqlite3_context_db_handle(context)->aLimit[SQLITE_LIMIT_LENGTH]; - } - if( p1<0 ){ - p1 += len; - if( p1<0 ){ - p2 += p1; - if( p2<0 ) p2 = 0; - p1 = 0; + case TK_REGISTER: { + sqlite3ExplainPrintf(pOut,"REGISTER(%d)", pExpr->iTable); + break; } - }else if( p1>0 ){ - p1--; - }else if( p2>0 ){ - p2--; - } - if( negP2 ){ - p1 -= p2; - if( p1<0 ){ - p2 += p1; - p1 = 0; + case TK_AS: { + sqlite3ExplainExpr(pOut, pExpr->pLeft); + break; } - } - assert( p1>=0 && p2>=0 ); - if( p1+p2>len ){ - p2 = len-p1; - if( p2<0 ) p2 = 0; - } - if( p0type!=SQLITE_BLOB ){ - while( *z && p1 ){ - SQLITE_SKIP_UTF8(z); - p1--; +#ifndef SQLITE_OMIT_CAST + case TK_CAST: { + /* Expressions of the form: CAST(pLeft AS token) */ + const char *zAff = "unk"; + switch( sqlite3AffinityType(pExpr->u.zToken) ){ + case SQLITE_AFF_TEXT: zAff = "TEXT"; break; + case SQLITE_AFF_NONE: zAff = "NONE"; break; + case SQLITE_AFF_NUMERIC: zAff = "NUMERIC"; break; + case SQLITE_AFF_INTEGER: zAff = "INTEGER"; break; + case SQLITE_AFF_REAL: zAff = "REAL"; break; + } + sqlite3ExplainPrintf(pOut, "CAST-%s(", zAff); + sqlite3ExplainExpr(pOut, pExpr->pLeft); + sqlite3ExplainPrintf(pOut, ")"); + break; } - for(z2=z; *z2 && p2; p2--){ - SQLITE_SKIP_UTF8(z2); +#endif /* SQLITE_OMIT_CAST */ + case TK_LT: zBinOp = "LT"; break; + case TK_LE: zBinOp = "LE"; break; + case TK_GT: zBinOp = "GT"; break; + case TK_GE: zBinOp = "GE"; break; + case TK_NE: zBinOp = "NE"; break; + case TK_EQ: zBinOp = "EQ"; break; + case TK_IS: zBinOp = "IS"; break; + case TK_ISNOT: zBinOp = "ISNOT"; break; + case TK_AND: zBinOp = "AND"; break; + case TK_OR: zBinOp = "OR"; break; + case TK_PLUS: zBinOp = "ADD"; break; + case TK_STAR: zBinOp = "MUL"; break; + case TK_MINUS: zBinOp = "SUB"; break; + case TK_REM: zBinOp = "REM"; break; + case TK_BITAND: zBinOp = "BITAND"; break; + case TK_BITOR: zBinOp = "BITOR"; break; + case TK_SLASH: zBinOp = "DIV"; break; + case TK_LSHIFT: zBinOp = "LSHIFT"; break; + case TK_RSHIFT: zBinOp = "RSHIFT"; break; + case TK_CONCAT: zBinOp = "CONCAT"; break; + + case TK_UMINUS: zUniOp = "UMINUS"; break; + case TK_UPLUS: zUniOp = "UPLUS"; break; + case TK_BITNOT: zUniOp = "BITNOT"; break; + case TK_NOT: zUniOp = "NOT"; break; + case TK_ISNULL: zUniOp = "ISNULL"; break; + case TK_NOTNULL: zUniOp = "NOTNULL"; break; + + case TK_AGG_FUNCTION: + case TK_CONST_FUNC: + case TK_FUNCTION: { + ExprList *pFarg; /* List of function arguments */ + if( ExprHasAnyProperty(pExpr, EP_TokenOnly) ){ + pFarg = 0; + }else{ + pFarg = pExpr->x.pList; + } + sqlite3ExplainPrintf(pOut, "%sFUNCTION:%s(", + op==TK_AGG_FUNCTION ? "AGG_" : "", + pExpr->u.zToken); + if( pFarg ){ + sqlite3ExplainExprList(pOut, pFarg); + } + sqlite3ExplainPrintf(pOut, ")"); + break; } - sqlite3_result_text(context, (char*)z, (int)(z2-z), SQLITE_TRANSIENT); - }else{ - sqlite3_result_blob(context, (char*)&z[p1], (int)p2, SQLITE_TRANSIENT); - } -} +#ifndef SQLITE_OMIT_SUBQUERY + case TK_EXISTS: { + sqlite3ExplainPrintf(pOut, "EXISTS("); + sqlite3ExplainSelect(pOut, pExpr->x.pSelect); + sqlite3ExplainPrintf(pOut,")"); + break; + } + case TK_SELECT: { + sqlite3ExplainPrintf(pOut, "("); + sqlite3ExplainSelect(pOut, pExpr->x.pSelect); + sqlite3ExplainPrintf(pOut, ")"); + break; + } + case TK_IN: { + sqlite3ExplainPrintf(pOut, "IN("); + sqlite3ExplainExpr(pOut, pExpr->pLeft); + sqlite3ExplainPrintf(pOut, ","); + if( ExprHasProperty(pExpr, EP_xIsSelect) ){ + sqlite3ExplainSelect(pOut, pExpr->x.pSelect); + }else{ + sqlite3ExplainExprList(pOut, pExpr->x.pList); + } + sqlite3ExplainPrintf(pOut, ")"); + break; + } +#endif /* SQLITE_OMIT_SUBQUERY */ -/* -** Implementation of the round() function -*/ -#ifndef SQLITE_OMIT_FLOATING_POINT -static void roundFunc(sqlite3_context *context, int argc, sqlite3_value **argv){ - int n = 0; - double r; - char *zBuf; - assert( argc==1 || argc==2 ); - if( argc==2 ){ - if( SQLITE_NULL==sqlite3_value_type(argv[1]) ) return; - n = sqlite3_value_int(argv[1]); - if( n>30 ) n = 30; - if( n<0 ) n = 0; + /* + ** x BETWEEN y AND z + ** + ** This is equivalent to + ** + ** x>=y AND x<=z + ** + ** X is stored in pExpr->pLeft. + ** Y is stored in pExpr->pList->a[0].pExpr. + ** Z is stored in pExpr->pList->a[1].pExpr. + */ + case TK_BETWEEN: { + Expr *pX = pExpr->pLeft; + Expr *pY = pExpr->x.pList->a[0].pExpr; + Expr *pZ = pExpr->x.pList->a[1].pExpr; + sqlite3ExplainPrintf(pOut, "BETWEEN("); + sqlite3ExplainExpr(pOut, pX); + sqlite3ExplainPrintf(pOut, ","); + sqlite3ExplainExpr(pOut, pY); + sqlite3ExplainPrintf(pOut, ","); + sqlite3ExplainExpr(pOut, pZ); + sqlite3ExplainPrintf(pOut, ")"); + break; + } + case TK_TRIGGER: { + /* If the opcode is TK_TRIGGER, then the expression is a reference + ** to a column in the new.* or old.* pseudo-tables available to + ** trigger programs. In this case Expr.iTable is set to 1 for the + ** new.* pseudo-table, or 0 for the old.* pseudo-table. Expr.iColumn + ** is set to the column of the pseudo-table to read, or to -1 to + ** read the rowid field. + */ + sqlite3ExplainPrintf(pOut, "%s(%d)", + pExpr->iTable ? "NEW" : "OLD", pExpr->iColumn); + break; + } + case TK_CASE: { + sqlite3ExplainPrintf(pOut, "CASE("); + sqlite3ExplainExpr(pOut, pExpr->pLeft); + sqlite3ExplainPrintf(pOut, ","); + sqlite3ExplainExprList(pOut, pExpr->x.pList); + break; + } +#ifndef SQLITE_OMIT_TRIGGER + case TK_RAISE: { + const char *zType = "unk"; + switch( pExpr->affinity ){ + case OE_Rollback: zType = "rollback"; break; + case OE_Abort: zType = "abort"; break; + case OE_Fail: zType = "fail"; break; + case OE_Ignore: zType = "ignore"; break; + } + sqlite3ExplainPrintf(pOut, "RAISE-%s(%s)", zType, pExpr->u.zToken); + break; + } +#endif } - if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return; - r = sqlite3_value_double(argv[0]); - zBuf = sqlite3_mprintf("%.*f",n,r); - if( zBuf==0 ){ - sqlite3_result_error_nomem(context); - }else{ - sqlite3AtoF(zBuf, &r); - sqlite3_free(zBuf); - sqlite3_result_double(context, r); + if( zBinOp ){ + sqlite3ExplainPrintf(pOut,"%s(", zBinOp); + sqlite3ExplainExpr(pOut, pExpr->pLeft); + sqlite3ExplainPrintf(pOut,","); + sqlite3ExplainExpr(pOut, pExpr->pRight); + sqlite3ExplainPrintf(pOut,")"); + }else if( zUniOp ){ + sqlite3ExplainPrintf(pOut,"%s(", zUniOp); + sqlite3ExplainExpr(pOut, pExpr->pLeft); + sqlite3ExplainPrintf(pOut,")"); } } -#endif +#endif /* defined(SQLITE_ENABLE_TREE_EXPLAIN) */ +#if defined(SQLITE_ENABLE_TREE_EXPLAIN) /* -** Allocate nByte bytes of space using sqlite3_malloc(). If the -** allocation fails, call sqlite3_result_error_nomem() to notify -** the database handle that malloc() has failed and return NULL. -** If nByte is larger than the maximum string or blob length, then -** raise an SQLITE_TOOBIG exception and return NULL. +** Generate a human-readable explanation of an expression list. */ -static void *contextMalloc(sqlite3_context *context, i64 nByte){ - char *z; - sqlite3 *db = sqlite3_context_db_handle(context); - assert( nByte>0 ); - testcase( nByte==db->aLimit[SQLITE_LIMIT_LENGTH] ); - testcase( nByte==db->aLimit[SQLITE_LIMIT_LENGTH]+1 ); - if( nByte>db->aLimit[SQLITE_LIMIT_LENGTH] ){ - sqlite3_result_error_toobig(context); - z = 0; +SQLITE_PRIVATE void sqlite3ExplainExprList(Vdbe *pOut, ExprList *pList){ + int i; + if( pList==0 || pList->nExpr==0 ){ + sqlite3ExplainPrintf(pOut, "(empty-list)"); + return; + }else if( pList->nExpr==1 ){ + sqlite3ExplainExpr(pOut, pList->a[0].pExpr); }else{ - z = sqlite3Malloc((int)nByte); - if( !z ){ - sqlite3_result_error_nomem(context); + sqlite3ExplainPush(pOut); + for(i=0; inExpr; i++){ + sqlite3ExplainPrintf(pOut, "item[%d] = ", i); + sqlite3ExplainPush(pOut); + sqlite3ExplainExpr(pOut, pList->a[i].pExpr); + sqlite3ExplainPop(pOut); + if( inExpr-1 ){ + sqlite3ExplainNL(pOut); + } } + sqlite3ExplainPop(pOut); } - return z; } +#endif /* SQLITE_DEBUG */ /* -** Implementation of the upper() and lower() SQL functions. +** Return TRUE if pExpr is an constant expression that is appropriate +** for factoring out of a loop. Appropriate expressions are: +** +** * Any expression that evaluates to two or more opcodes. +** +** * Any OP_Integer, OP_Real, OP_String, OP_Blob, OP_Null, +** or OP_Variable that does not need to be placed in a +** specific register. +** +** There is no point in factoring out single-instruction constant +** expressions that need to be placed in a particular register. +** We could factor them out, but then we would end up adding an +** OP_SCopy instruction to move the value into the correct register +** later. We might as well just use the original instruction and +** avoid the OP_SCopy. */ -static void upperFunc(sqlite3_context *context, int argc, sqlite3_value **argv){ - char *z1; - const char *z2; - int i, n; - UNUSED_PARAMETER(argc); - z2 = (char*)sqlite3_value_text(argv[0]); - n = sqlite3_value_bytes(argv[0]); - /* Verify that the call to _bytes() does not invalidate the _text() pointer */ - assert( z2==(char*)sqlite3_value_text(argv[0]) ); - if( z2 ){ - z1 = contextMalloc(context, ((i64)n)+1); - if( z1 ){ - memcpy(z1, z2, n+1); - for(i=0; z1[i]; i++){ - z1[i] = (char)sqlite3Toupper(z1[i]); - } - sqlite3_result_text(context, z1, -1, sqlite3_free); - } +static int isAppropriateForFactoring(Expr *p){ + if( !sqlite3ExprIsConstantNotJoin(p) ){ + return 0; /* Only constant expressions are appropriate for factoring */ } -} -static void lowerFunc(sqlite3_context *context, int argc, sqlite3_value **argv){ - u8 *z1; - const char *z2; - int i, n; - UNUSED_PARAMETER(argc); - z2 = (char*)sqlite3_value_text(argv[0]); - n = sqlite3_value_bytes(argv[0]); - /* Verify that the call to _bytes() does not invalidate the _text() pointer */ - assert( z2==(char*)sqlite3_value_text(argv[0]) ); - if( z2 ){ - z1 = contextMalloc(context, ((i64)n)+1); - if( z1 ){ - memcpy(z1, z2, n+1); - for(i=0; z1[i]; i++){ - z1[i] = sqlite3Tolower(z1[i]); + if( (p->flags & EP_FixedDest)==0 ){ + return 1; /* Any constant without a fixed destination is appropriate */ + } + while( p->op==TK_UPLUS ) p = p->pLeft; + switch( p->op ){ +#ifndef SQLITE_OMIT_BLOB_LITERAL + case TK_BLOB: +#endif + case TK_VARIABLE: + case TK_INTEGER: + case TK_FLOAT: + case TK_NULL: + case TK_STRING: { + testcase( p->op==TK_BLOB ); + testcase( p->op==TK_VARIABLE ); + testcase( p->op==TK_INTEGER ); + testcase( p->op==TK_FLOAT ); + testcase( p->op==TK_NULL ); + testcase( p->op==TK_STRING ); + /* Single-instruction constants with a fixed destination are + ** better done in-line. If we factor them, they will just end + ** up generating an OP_SCopy to move the value to the destination + ** register. */ + return 0; + } + case TK_UMINUS: { + if( p->pLeft->op==TK_FLOAT || p->pLeft->op==TK_INTEGER ){ + return 0; } - sqlite3_result_text(context, (char *)z1, -1, sqlite3_free); + break; + } + default: { + break; } } + return 1; } /* -** Implementation of the IFNULL(), NVL(), and COALESCE() functions. -** All three do the same thing. They return the first non-NULL -** argument. +** If pExpr is a constant expression that is appropriate for +** factoring out of a loop, then evaluate the expression +** into a register and convert the expression into a TK_REGISTER +** expression. */ -static void ifnullFunc( - sqlite3_context *context, - int argc, - sqlite3_value **argv -){ - int i; - for(i=0; ipParse; + switch( pExpr->op ){ + case TK_IN: + case TK_REGISTER: { + return WRC_Prune; + } + case TK_FUNCTION: + case TK_AGG_FUNCTION: + case TK_CONST_FUNC: { + /* The arguments to a function have a fixed destination. + ** Mark them this way to avoid generated unneeded OP_SCopy + ** instructions. + */ + ExprList *pList = pExpr->x.pList; + assert( !ExprHasProperty(pExpr, EP_xIsSelect) ); + if( pList ){ + int i = pList->nExpr; + struct ExprList_item *pItem = pList->a; + for(; i>0; i--, pItem++){ + if( ALWAYS(pItem->pExpr) ) pItem->pExpr->flags |= EP_FixedDest; + } + } break; } } -} - -/* -** Implementation of random(). Return a random integer. -*/ -static void randomFunc( - sqlite3_context *context, - int NotUsed, - sqlite3_value **NotUsed2 -){ - sqlite_int64 r; - UNUSED_PARAMETER2(NotUsed, NotUsed2); - sqlite3_randomness(sizeof(r), &r); - if( r<0 ){ - /* We need to prevent a random number of 0x8000000000000000 - ** (or -9223372036854775808) since when you do abs() of that - ** number of you get the same value back again. To do this - ** in a way that is testable, mask the sign bit off of negative - ** values, resulting in a positive value. Then take the - ** 2s complement of that positive value. The end result can - ** therefore be no less than -9223372036854775807. - */ - r = -(r ^ (((sqlite3_int64)1)<<63)); - } - sqlite3_result_int64(context, r); -} - -/* -** Implementation of randomblob(N). Return a random blob -** that is N bytes long. -*/ -static void randomBlob( - sqlite3_context *context, - int argc, - sqlite3_value **argv -){ - int n; - unsigned char *p; - assert( argc==1 ); - UNUSED_PARAMETER(argc); - n = sqlite3_value_int(argv[0]); - if( n<1 ){ - n = 1; - } - p = contextMalloc(context, n); - if( p ){ - sqlite3_randomness(n, p); - sqlite3_result_blob(context, (char*)p, n, sqlite3_free); + if( isAppropriateForFactoring(pExpr) ){ + int r1 = ++pParse->nMem; + int r2; + r2 = sqlite3ExprCodeTarget(pParse, pExpr, r1); + if( NEVER(r1!=r2) ) sqlite3ReleaseTempReg(pParse, r1); + pExpr->op2 = pExpr->op; + pExpr->op = TK_REGISTER; + pExpr->iTable = r2; + return WRC_Prune; } + return WRC_Continue; } /* -** Implementation of the last_insert_rowid() SQL function. The return -** value is the same as the sqlite3_last_insert_rowid() API function. +** Preevaluate constant subexpressions within pExpr and store the +** results in registers. Modify pExpr so that the constant subexpresions +** are TK_REGISTER opcodes that refer to the precomputed values. +** +** This routine is a no-op if the jump to the cookie-check code has +** already occur. Since the cookie-check jump is generated prior to +** any other serious processing, this check ensures that there is no +** way to accidently bypass the constant initializations. +** +** This routine is also a no-op if the SQLITE_FactorOutConst optimization +** is disabled via the sqlite3_test_control(SQLITE_TESTCTRL_OPTIMIZATIONS) +** interface. This allows test logic to verify that the same answer is +** obtained for queries regardless of whether or not constants are +** precomputed into registers or if they are inserted in-line. */ -static void last_insert_rowid( - sqlite3_context *context, - int NotUsed, - sqlite3_value **NotUsed2 -){ - sqlite3 *db = sqlite3_context_db_handle(context); - UNUSED_PARAMETER2(NotUsed, NotUsed2); - sqlite3_result_int64(context, sqlite3_last_insert_rowid(db)); +SQLITE_PRIVATE void sqlite3ExprCodeConstants(Parse *pParse, Expr *pExpr){ + Walker w; + if( pParse->cookieGoto ) return; + if( (pParse->db->flags & SQLITE_FactorOutConst)!=0 ) return; + w.xExprCallback = evalConstExpr; + w.xSelectCallback = 0; + w.pParse = pParse; + sqlite3WalkExpr(&w, pExpr); } -/* -** Implementation of the changes() SQL function. The return value is the -** same as the sqlite3_changes() API function. -*/ -static void changes( - sqlite3_context *context, - int NotUsed, - sqlite3_value **NotUsed2 -){ - sqlite3 *db = sqlite3_context_db_handle(context); - UNUSED_PARAMETER2(NotUsed, NotUsed2); - sqlite3_result_int(context, sqlite3_changes(db)); -} /* -** Implementation of the total_changes() SQL function. The return value is -** the same as the sqlite3_total_changes() API function. +** Generate code that pushes the value of every element of the given +** expression list into a sequence of registers beginning at target. +** +** Return the number of elements evaluated. */ -static void total_changes( - sqlite3_context *context, - int NotUsed, - sqlite3_value **NotUsed2 +SQLITE_PRIVATE int sqlite3ExprCodeExprList( + Parse *pParse, /* Parsing context */ + ExprList *pList, /* The expression list to be coded */ + int target, /* Where to write results */ + int doHardCopy /* Make a hard copy of every element */ ){ - sqlite3 *db = sqlite3_context_db_handle(context); - UNUSED_PARAMETER2(NotUsed, NotUsed2); - sqlite3_result_int(context, sqlite3_total_changes(db)); + struct ExprList_item *pItem; + int i, n; + assert( pList!=0 ); + assert( target>0 ); + assert( pParse->pVdbe!=0 ); /* Never gets this far otherwise */ + n = pList->nExpr; + for(pItem=pList->a, i=0; ipExpr; + int inReg = sqlite3ExprCodeTarget(pParse, pExpr, target+i); + if( inReg!=target+i ){ + sqlite3VdbeAddOp2(pParse->pVdbe, doHardCopy ? OP_Copy : OP_SCopy, + inReg, target+i); + } + } + return n; } /* -** A structure defining how to do GLOB-style comparisons. -*/ -struct compareInfo { - u8 matchAll; - u8 matchOne; - u8 matchSet; - u8 noCase; -}; - -/* -** For LIKE and GLOB matching on EBCDIC machines, assume that every -** character is exactly one byte in size. Also, all characters are -** able to participate in upper-case-to-lower-case mappings in EBCDIC -** whereas only characters less than 0x80 do in ASCII. -*/ -#if defined(SQLITE_EBCDIC) -# define sqlite3Utf8Read(A,C) (*(A++)) -# define GlogUpperToLower(A) A = sqlite3UpperToLower[A] -#else -# define GlogUpperToLower(A) if( A<0x80 ){ A = sqlite3UpperToLower[A]; } -#endif - -static const struct compareInfo globInfo = { '*', '?', '[', 0 }; -/* The correct SQL-92 behavior is for the LIKE operator to ignore -** case. Thus 'a' LIKE 'A' would be true. */ -static const struct compareInfo likeInfoNorm = { '%', '_', 0, 1 }; -/* If SQLITE_CASE_SENSITIVE_LIKE is defined, then the LIKE operator -** is case sensitive causing 'a' LIKE 'A' to be false */ -static const struct compareInfo likeInfoAlt = { '%', '_', 0, 0 }; - -/* -** Compare two UTF-8 strings for equality where the first string can -** potentially be a "glob" expression. Return true (1) if they -** are the same and false (0) if they are different. -** -** Globbing rules: -** -** '*' Matches any sequence of zero or more characters. -** -** '?' Matches exactly one character. -** -** [...] Matches one character from the enclosed list of -** characters. -** -** [^...] Matches one character not in the enclosed list. +** Generate code for a BETWEEN operator. ** -** With the [...] and [^...] matching, a ']' character can be included -** in the list by making it the first character after '[' or '^'. A -** range of characters can be specified using '-'. Example: -** "[a-z]" matches any single lower-case letter. To match a '-', make -** it the last character in the list. +** x BETWEEN y AND z ** -** This routine is usually quick, but can be N**2 in the worst case. +** The above is equivalent to ** -** Hints: to match '*' or '?', put them in "[]". Like this: +** x>=y AND x<=z ** -** abc[*]xyz Matches "abc*xyz" only +** Code it as such, taking care to do the common subexpression +** elementation of x. */ -static int patternCompare( - const u8 *zPattern, /* The glob pattern */ - const u8 *zString, /* The string to compare against the glob */ - const struct compareInfo *pInfo, /* Information about how to do the compare */ - const int esc /* The escape character */ +static void exprCodeBetween( + Parse *pParse, /* Parsing and code generating context */ + Expr *pExpr, /* The BETWEEN expression */ + int dest, /* Jump here if the jump is taken */ + int jumpIfTrue, /* Take the jump if the BETWEEN is true */ + int jumpIfNull /* Take the jump if the BETWEEN is NULL */ ){ - int c, c2; - int invert; - int seen; - u8 matchOne = pInfo->matchOne; - u8 matchAll = pInfo->matchAll; - u8 matchSet = pInfo->matchSet; - u8 noCase = pInfo->noCase; - int prevEscape = 0; /* True if the previous character was 'escape' */ + Expr exprAnd; /* The AND operator in x>=y AND x<=z */ + Expr compLeft; /* The x>=y term */ + Expr compRight; /* The x<=z term */ + Expr exprX; /* The x subexpression */ + int regFree1 = 0; /* Temporary use register */ - while( (c = sqlite3Utf8Read(zPattern,&zPattern))!=0 ){ - if( !prevEscape && c==matchAll ){ - while( (c=sqlite3Utf8Read(zPattern,&zPattern)) == matchAll - || c == matchOne ){ - if( c==matchOne && sqlite3Utf8Read(zString, &zString)==0 ){ - return 0; - } - } - if( c==0 ){ - return 1; - }else if( c==esc ){ - c = sqlite3Utf8Read(zPattern, &zPattern); - if( c==0 ){ - return 0; - } - }else if( c==matchSet ){ - assert( esc==0 ); /* This is GLOB, not LIKE */ - assert( matchSet<0x80 ); /* '[' is a single-byte character */ - while( *zString && patternCompare(&zPattern[-1],zString,pInfo,esc)==0 ){ - SQLITE_SKIP_UTF8(zString); - } - return *zString!=0; - } - while( (c2 = sqlite3Utf8Read(zString,&zString))!=0 ){ - if( noCase ){ - GlogUpperToLower(c2); - GlogUpperToLower(c); - while( c2 != 0 && c2 != c ){ - c2 = sqlite3Utf8Read(zString, &zString); - GlogUpperToLower(c2); - } - }else{ - while( c2 != 0 && c2 != c ){ - c2 = sqlite3Utf8Read(zString, &zString); - } - } - if( c2==0 ) return 0; - if( patternCompare(zPattern,zString,pInfo,esc) ) return 1; - } - return 0; - }else if( !prevEscape && c==matchOne ){ - if( sqlite3Utf8Read(zString, &zString)==0 ){ - return 0; - } - }else if( c==matchSet ){ - int prior_c = 0; - assert( esc==0 ); /* This only occurs for GLOB, not LIKE */ - seen = 0; - invert = 0; - c = sqlite3Utf8Read(zString, &zString); - if( c==0 ) return 0; - c2 = sqlite3Utf8Read(zPattern, &zPattern); - if( c2=='^' ){ - invert = 1; - c2 = sqlite3Utf8Read(zPattern, &zPattern); - } - if( c2==']' ){ - if( c==']' ) seen = 1; - c2 = sqlite3Utf8Read(zPattern, &zPattern); - } - while( c2 && c2!=']' ){ - if( c2=='-' && zPattern[0]!=']' && zPattern[0]!=0 && prior_c>0 ){ - c2 = sqlite3Utf8Read(zPattern, &zPattern); - if( c>=prior_c && c<=c2 ) seen = 1; - prior_c = 0; - }else{ - if( c==c2 ){ - seen = 1; - } - prior_c = c2; - } - c2 = sqlite3Utf8Read(zPattern, &zPattern); - } - if( c2==0 || (seen ^ invert)==0 ){ - return 0; - } - }else if( esc==c && !prevEscape ){ - prevEscape = 1; - }else{ - c2 = sqlite3Utf8Read(zString, &zString); - if( noCase ){ - GlogUpperToLower(c); - GlogUpperToLower(c2); - } - if( c!=c2 ){ - return 0; - } - prevEscape = 0; - } + assert( !ExprHasProperty(pExpr, EP_xIsSelect) ); + exprX = *pExpr->pLeft; + exprAnd.op = TK_AND; + exprAnd.pLeft = &compLeft; + exprAnd.pRight = &compRight; + compLeft.op = TK_GE; + compLeft.pLeft = &exprX; + compLeft.pRight = pExpr->x.pList->a[0].pExpr; + compRight.op = TK_LE; + compRight.pLeft = &exprX; + compRight.pRight = pExpr->x.pList->a[1].pExpr; + exprX.iTable = sqlite3ExprCodeTemp(pParse, &exprX, ®Free1); + exprX.op = TK_REGISTER; + if( jumpIfTrue ){ + sqlite3ExprIfTrue(pParse, &exprAnd, dest, jumpIfNull); + }else{ + sqlite3ExprIfFalse(pParse, &exprAnd, dest, jumpIfNull); } - return *zString==0; -} - -/* -** Count the number of times that the LIKE operator (or GLOB which is -** just a variation of LIKE) gets called. This is used for testing -** only. -*/ -#ifdef SQLITE_TEST -SQLITE_API int sqlite3_like_count = 0; -#endif + sqlite3ReleaseTempReg(pParse, regFree1); + /* Ensure adequate test coverage */ + testcase( jumpIfTrue==0 && jumpIfNull==0 && regFree1==0 ); + testcase( jumpIfTrue==0 && jumpIfNull==0 && regFree1!=0 ); + testcase( jumpIfTrue==0 && jumpIfNull!=0 && regFree1==0 ); + testcase( jumpIfTrue==0 && jumpIfNull!=0 && regFree1!=0 ); + testcase( jumpIfTrue!=0 && jumpIfNull==0 && regFree1==0 ); + testcase( jumpIfTrue!=0 && jumpIfNull==0 && regFree1!=0 ); + testcase( jumpIfTrue!=0 && jumpIfNull!=0 && regFree1==0 ); + testcase( jumpIfTrue!=0 && jumpIfNull!=0 && regFree1!=0 ); +} /* -** Implementation of the like() SQL function. This function implements -** the build-in LIKE operator. The first argument to the function is the -** pattern and the second argument is the string. So, the SQL statements: -** -** A LIKE B +** Generate code for a boolean expression such that a jump is made +** to the label "dest" if the expression is true but execution +** continues straight thru if the expression is false. ** -** is implemented as like(B,A). +** If the expression evaluates to NULL (neither true nor false), then +** take the jump if the jumpIfNull flag is SQLITE_JUMPIFNULL. ** -** This same function (with a different compareInfo structure) computes -** the GLOB operator. +** This code depends on the fact that certain token values (ex: TK_EQ) +** are the same as opcode values (ex: OP_Eq) that implement the corresponding +** operation. Special comments in vdbe.c and the mkopcodeh.awk script in +** the make process cause these values to align. Assert()s in the code +** below verify that the numbers are aligned correctly. */ -static void likeFunc( - sqlite3_context *context, - int argc, - sqlite3_value **argv -){ - const unsigned char *zA, *zB; - int escape = 0; - int nPat; - sqlite3 *db = sqlite3_context_db_handle(context); - - zB = sqlite3_value_text(argv[0]); - zA = sqlite3_value_text(argv[1]); - - /* Limit the length of the LIKE or GLOB pattern to avoid problems - ** of deep recursion and N*N behavior in patternCompare(). - */ - nPat = sqlite3_value_bytes(argv[0]); - testcase( nPat==db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH] ); - testcase( nPat==db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH]+1 ); - if( nPat > db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH] ){ - sqlite3_result_error(context, "LIKE or GLOB pattern too complex", -1); - return; - } - assert( zB==sqlite3_value_text(argv[0]) ); /* Encoding did not change */ +SQLITE_PRIVATE void sqlite3ExprIfTrue(Parse *pParse, Expr *pExpr, int dest, int jumpIfNull){ + Vdbe *v = pParse->pVdbe; + int op = 0; + int regFree1 = 0; + int regFree2 = 0; + int r1, r2; - if( argc==3 ){ - /* The escape character string must consist of a single UTF-8 character. - ** Otherwise, return an error. - */ - const unsigned char *zEsc = sqlite3_value_text(argv[2]); - if( zEsc==0 ) return; - if( sqlite3Utf8CharLen((char*)zEsc, -1)!=1 ){ - sqlite3_result_error(context, - "ESCAPE expression must be a single character", -1); - return; + assert( jumpIfNull==SQLITE_JUMPIFNULL || jumpIfNull==0 ); + if( NEVER(v==0) ) return; /* Existance of VDBE checked by caller */ + if( NEVER(pExpr==0) ) return; /* No way this can happen */ + op = pExpr->op; + switch( op ){ + case TK_AND: { + int d2 = sqlite3VdbeMakeLabel(v); + testcase( jumpIfNull==0 ); + sqlite3ExprCachePush(pParse); + sqlite3ExprIfFalse(pParse, pExpr->pLeft, d2,jumpIfNull^SQLITE_JUMPIFNULL); + sqlite3ExprIfTrue(pParse, pExpr->pRight, dest, jumpIfNull); + sqlite3VdbeResolveLabel(v, d2); + sqlite3ExprCachePop(pParse, 1); + break; + } + case TK_OR: { + testcase( jumpIfNull==0 ); + sqlite3ExprIfTrue(pParse, pExpr->pLeft, dest, jumpIfNull); + sqlite3ExprIfTrue(pParse, pExpr->pRight, dest, jumpIfNull); + break; + } + case TK_NOT: { + testcase( jumpIfNull==0 ); + sqlite3ExprIfFalse(pParse, pExpr->pLeft, dest, jumpIfNull); + break; + } + case TK_LT: + case TK_LE: + case TK_GT: + case TK_GE: + case TK_NE: + case TK_EQ: { + assert( TK_LT==OP_Lt ); + assert( TK_LE==OP_Le ); + assert( TK_GT==OP_Gt ); + assert( TK_GE==OP_Ge ); + assert( TK_EQ==OP_Eq ); + assert( TK_NE==OP_Ne ); + testcase( op==TK_LT ); + testcase( op==TK_LE ); + testcase( op==TK_GT ); + testcase( op==TK_GE ); + testcase( op==TK_EQ ); + testcase( op==TK_NE ); + testcase( jumpIfNull==0 ); + r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, ®Free1); + r2 = sqlite3ExprCodeTemp(pParse, pExpr->pRight, ®Free2); + codeCompare(pParse, pExpr->pLeft, pExpr->pRight, op, + r1, r2, dest, jumpIfNull); + testcase( regFree1==0 ); + testcase( regFree2==0 ); + break; + } + case TK_IS: + case TK_ISNOT: { + testcase( op==TK_IS ); + testcase( op==TK_ISNOT ); + r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, ®Free1); + r2 = sqlite3ExprCodeTemp(pParse, pExpr->pRight, ®Free2); + op = (op==TK_IS) ? TK_EQ : TK_NE; + codeCompare(pParse, pExpr->pLeft, pExpr->pRight, op, + r1, r2, dest, SQLITE_NULLEQ); + testcase( regFree1==0 ); + testcase( regFree2==0 ); + break; + } + case TK_ISNULL: + case TK_NOTNULL: { + assert( TK_ISNULL==OP_IsNull ); + assert( TK_NOTNULL==OP_NotNull ); + testcase( op==TK_ISNULL ); + testcase( op==TK_NOTNULL ); + r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, ®Free1); + sqlite3VdbeAddOp2(v, op, r1, dest); + testcase( regFree1==0 ); + break; + } + case TK_BETWEEN: { + testcase( jumpIfNull==0 ); + exprCodeBetween(pParse, pExpr, dest, 1, jumpIfNull); + break; + } +#ifndef SQLITE_OMIT_SUBQUERY + case TK_IN: { + int destIfFalse = sqlite3VdbeMakeLabel(v); + int destIfNull = jumpIfNull ? dest : destIfFalse; + sqlite3ExprCodeIN(pParse, pExpr, destIfFalse, destIfNull); + sqlite3VdbeAddOp2(v, OP_Goto, 0, dest); + sqlite3VdbeResolveLabel(v, destIfFalse); + break; } - escape = sqlite3Utf8Read(zEsc, &zEsc); - } - if( zA && zB ){ - struct compareInfo *pInfo = sqlite3_user_data(context); -#ifdef SQLITE_TEST - sqlite3_like_count++; #endif - - sqlite3_result_int(context, patternCompare(zB, zA, pInfo, escape)); + default: { + r1 = sqlite3ExprCodeTemp(pParse, pExpr, ®Free1); + sqlite3VdbeAddOp3(v, OP_If, r1, dest, jumpIfNull!=0); + testcase( regFree1==0 ); + testcase( jumpIfNull==0 ); + break; + } } + sqlite3ReleaseTempReg(pParse, regFree1); + sqlite3ReleaseTempReg(pParse, regFree2); } /* -** Implementation of the NULLIF(x,y) function. The result is the first -** argument if the arguments are different. The result is NULL if the -** arguments are equal to each other. +** Generate code for a boolean expression such that a jump is made +** to the label "dest" if the expression is false but execution +** continues straight thru if the expression is true. +** +** If the expression evaluates to NULL (neither true nor false) then +** jump if jumpIfNull is SQLITE_JUMPIFNULL or fall through if jumpIfNull +** is 0. */ -static void nullifFunc( - sqlite3_context *context, - int NotUsed, - sqlite3_value **argv -){ - CollSeq *pColl = sqlite3GetFuncCollSeq(context); - UNUSED_PARAMETER(NotUsed); - if( sqlite3MemCompare(argv[0], argv[1], pColl)!=0 ){ - sqlite3_result_value(context, argv[0]); - } -} +SQLITE_PRIVATE void sqlite3ExprIfFalse(Parse *pParse, Expr *pExpr, int dest, int jumpIfNull){ + Vdbe *v = pParse->pVdbe; + int op = 0; + int regFree1 = 0; + int regFree2 = 0; + int r1, r2; -/* -** Implementation of the VERSION(*) function. The result is the version -** of the SQLite library that is running. -*/ -static void versionFunc( - sqlite3_context *context, - int NotUsed, - sqlite3_value **NotUsed2 -){ - UNUSED_PARAMETER2(NotUsed, NotUsed2); - sqlite3_result_text(context, sqlite3_version, -1, SQLITE_STATIC); -} + assert( jumpIfNull==SQLITE_JUMPIFNULL || jumpIfNull==0 ); + if( NEVER(v==0) ) return; /* Existance of VDBE checked by caller */ + if( pExpr==0 ) return; -/* Array for converting from half-bytes (nybbles) into ASCII hex -** digits. */ -static const char hexdigits[] = { - '0', '1', '2', '3', '4', '5', '6', '7', - '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' -}; + /* The value of pExpr->op and op are related as follows: + ** + ** pExpr->op op + ** --------- ---------- + ** TK_ISNULL OP_NotNull + ** TK_NOTNULL OP_IsNull + ** TK_NE OP_Eq + ** TK_EQ OP_Ne + ** TK_GT OP_Le + ** TK_LE OP_Gt + ** TK_GE OP_Lt + ** TK_LT OP_Ge + ** + ** For other values of pExpr->op, op is undefined and unused. + ** The value of TK_ and OP_ constants are arranged such that we + ** can compute the mapping above using the following expression. + ** Assert()s verify that the computation is correct. + */ + op = ((pExpr->op+(TK_ISNULL&1))^1)-(TK_ISNULL&1); -/* -** EXPERIMENTAL - This is not an official function. The interface may -** change. This function may disappear. Do not write code that depends -** on this function. -** -** Implementation of the QUOTE() function. This function takes a single -** argument. If the argument is numeric, the return value is the same as -** the argument. If the argument is NULL, the return value is the string -** "NULL". Otherwise, the argument is enclosed in single quotes with -** single-quote escapes. -*/ -static void quoteFunc(sqlite3_context *context, int argc, sqlite3_value **argv){ - assert( argc==1 ); - UNUSED_PARAMETER(argc); - switch( sqlite3_value_type(argv[0]) ){ - case SQLITE_INTEGER: - case SQLITE_FLOAT: { - sqlite3_result_value(context, argv[0]); + /* Verify correct alignment of TK_ and OP_ constants + */ + assert( pExpr->op!=TK_ISNULL || op==OP_NotNull ); + assert( pExpr->op!=TK_NOTNULL || op==OP_IsNull ); + assert( pExpr->op!=TK_NE || op==OP_Eq ); + assert( pExpr->op!=TK_EQ || op==OP_Ne ); + assert( pExpr->op!=TK_LT || op==OP_Ge ); + assert( pExpr->op!=TK_LE || op==OP_Gt ); + assert( pExpr->op!=TK_GT || op==OP_Le ); + assert( pExpr->op!=TK_GE || op==OP_Lt ); + + switch( pExpr->op ){ + case TK_AND: { + testcase( jumpIfNull==0 ); + sqlite3ExprIfFalse(pParse, pExpr->pLeft, dest, jumpIfNull); + sqlite3ExprIfFalse(pParse, pExpr->pRight, dest, jumpIfNull); break; } - case SQLITE_BLOB: { - char *zText = 0; - char const *zBlob = sqlite3_value_blob(argv[0]); - int nBlob = sqlite3_value_bytes(argv[0]); - assert( zBlob==sqlite3_value_blob(argv[0]) ); /* No encoding change */ - zText = (char *)contextMalloc(context, (2*(i64)nBlob)+4); - if( zText ){ - int i; - for(i=0; i>4)&0x0F]; - zText[(i*2)+3] = hexdigits[(zBlob[i])&0x0F]; - } - zText[(nBlob*2)+2] = '\''; - zText[(nBlob*2)+3] = '\0'; - zText[0] = 'X'; - zText[1] = '\''; - sqlite3_result_text(context, zText, -1, SQLITE_TRANSIENT); - sqlite3_free(zText); - } + case TK_OR: { + int d2 = sqlite3VdbeMakeLabel(v); + testcase( jumpIfNull==0 ); + sqlite3ExprCachePush(pParse); + sqlite3ExprIfTrue(pParse, pExpr->pLeft, d2, jumpIfNull^SQLITE_JUMPIFNULL); + sqlite3ExprIfFalse(pParse, pExpr->pRight, dest, jumpIfNull); + sqlite3VdbeResolveLabel(v, d2); + sqlite3ExprCachePop(pParse, 1); break; } - case SQLITE_TEXT: { - int i,j; - u64 n; - const unsigned char *zArg = sqlite3_value_text(argv[0]); - char *z; - - if( zArg==0 ) return; - for(i=0, n=0; zArg[i]; i++){ if( zArg[i]=='\'' ) n++; } - z = contextMalloc(context, ((i64)i)+((i64)n)+3); - if( z ){ - z[0] = '\''; - for(i=0, j=1; zArg[i]; i++){ - z[j++] = zArg[i]; - if( zArg[i]=='\'' ){ - z[j++] = '\''; - } - } - z[j++] = '\''; - z[j] = 0; - sqlite3_result_text(context, z, j, sqlite3_free); + case TK_NOT: { + testcase( jumpIfNull==0 ); + sqlite3ExprIfTrue(pParse, pExpr->pLeft, dest, jumpIfNull); + break; + } + case TK_LT: + case TK_LE: + case TK_GT: + case TK_GE: + case TK_NE: + case TK_EQ: { + testcase( op==TK_LT ); + testcase( op==TK_LE ); + testcase( op==TK_GT ); + testcase( op==TK_GE ); + testcase( op==TK_EQ ); + testcase( op==TK_NE ); + testcase( jumpIfNull==0 ); + r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, ®Free1); + r2 = sqlite3ExprCodeTemp(pParse, pExpr->pRight, ®Free2); + codeCompare(pParse, pExpr->pLeft, pExpr->pRight, op, + r1, r2, dest, jumpIfNull); + testcase( regFree1==0 ); + testcase( regFree2==0 ); + break; + } + case TK_IS: + case TK_ISNOT: { + testcase( pExpr->op==TK_IS ); + testcase( pExpr->op==TK_ISNOT ); + r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, ®Free1); + r2 = sqlite3ExprCodeTemp(pParse, pExpr->pRight, ®Free2); + op = (pExpr->op==TK_IS) ? TK_NE : TK_EQ; + codeCompare(pParse, pExpr->pLeft, pExpr->pRight, op, + r1, r2, dest, SQLITE_NULLEQ); + testcase( regFree1==0 ); + testcase( regFree2==0 ); + break; + } + case TK_ISNULL: + case TK_NOTNULL: { + testcase( op==TK_ISNULL ); + testcase( op==TK_NOTNULL ); + r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, ®Free1); + sqlite3VdbeAddOp2(v, op, r1, dest); + testcase( regFree1==0 ); + break; + } + case TK_BETWEEN: { + testcase( jumpIfNull==0 ); + exprCodeBetween(pParse, pExpr, dest, 0, jumpIfNull); + break; + } +#ifndef SQLITE_OMIT_SUBQUERY + case TK_IN: { + if( jumpIfNull ){ + sqlite3ExprCodeIN(pParse, pExpr, dest, dest); + }else{ + int destIfNull = sqlite3VdbeMakeLabel(v); + sqlite3ExprCodeIN(pParse, pExpr, dest, destIfNull); + sqlite3VdbeResolveLabel(v, destIfNull); } break; } +#endif default: { - assert( sqlite3_value_type(argv[0])==SQLITE_NULL ); - sqlite3_result_text(context, "NULL", 4, SQLITE_STATIC); + r1 = sqlite3ExprCodeTemp(pParse, pExpr, ®Free1); + sqlite3VdbeAddOp3(v, OP_IfNot, r1, dest, jumpIfNull!=0); + testcase( regFree1==0 ); + testcase( jumpIfNull==0 ); break; } } + sqlite3ReleaseTempReg(pParse, regFree1); + sqlite3ReleaseTempReg(pParse, regFree2); } /* -** The hex() function. Interpret the argument as a blob. Return -** a hexadecimal rendering as text. -*/ -static void hexFunc( - sqlite3_context *context, - int argc, - sqlite3_value **argv -){ - int i, n; - const unsigned char *pBlob; - char *zHex, *z; - assert( argc==1 ); - UNUSED_PARAMETER(argc); - pBlob = sqlite3_value_blob(argv[0]); - n = sqlite3_value_bytes(argv[0]); - assert( pBlob==sqlite3_value_blob(argv[0]) ); /* No encoding change */ - z = zHex = contextMalloc(context, ((i64)n)*2 + 1); - if( zHex ){ - for(i=0; i>4)&0xf]; - *(z++) = hexdigits[c&0xf]; - } - *z = 0; - sqlite3_result_text(context, zHex, n*2, sqlite3_free); - } -} - -/* -** The zeroblob(N) function returns a zero-filled blob of size N bytes. -*/ -static void zeroblobFunc( - sqlite3_context *context, - int argc, - sqlite3_value **argv -){ - i64 n; - sqlite3 *db = sqlite3_context_db_handle(context); - assert( argc==1 ); - UNUSED_PARAMETER(argc); - n = sqlite3_value_int64(argv[0]); - testcase( n==db->aLimit[SQLITE_LIMIT_LENGTH] ); - testcase( n==db->aLimit[SQLITE_LIMIT_LENGTH]+1 ); - if( n>db->aLimit[SQLITE_LIMIT_LENGTH] ){ - sqlite3_result_error_toobig(context); - }else{ - sqlite3_result_zeroblob(context, (int)n); - } -} - -/* -** The replace() function. Three arguments are all strings: call -** them A, B, and C. The result is also a string which is derived -** from A by replacing every occurance of B with C. The match -** must be exact. Collating sequences are not used. +** Do a deep comparison of two expression trees. Return 0 if the two +** expressions are completely identical. Return 1 if they differ only +** by a COLLATE operator at the top level. Return 2 if there are differences +** other than the top-level COLLATE operator. +** +** Sometimes this routine will return 2 even if the two expressions +** really are equivalent. If we cannot prove that the expressions are +** identical, we return 2 just to be safe. So if this routine +** returns 2, then you do not really know for certain if the two +** expressions are the same. But if you get a 0 or 1 return, then you +** can be sure the expressions are the same. In the places where +** this routine is used, it does not hurt to get an extra 2 - that +** just might result in some slightly slower code. But returning +** an incorrect 0 or 1 could lead to a malfunction. */ -static void replaceFunc( - sqlite3_context *context, - int argc, - sqlite3_value **argv -){ - const unsigned char *zStr; /* The input string A */ - const unsigned char *zPattern; /* The pattern string B */ - const unsigned char *zRep; /* The replacement string C */ - unsigned char *zOut; /* The output */ - int nStr; /* Size of zStr */ - int nPattern; /* Size of zPattern */ - int nRep; /* Size of zRep */ - i64 nOut; /* Maximum size of zOut */ - int loopLimit; /* Last zStr[] that might match zPattern[] */ - int i, j; /* Loop counters */ - - assert( argc==3 ); - UNUSED_PARAMETER(argc); - zStr = sqlite3_value_text(argv[0]); - if( zStr==0 ) return; - nStr = sqlite3_value_bytes(argv[0]); - assert( zStr==sqlite3_value_text(argv[0]) ); /* No encoding change */ - zPattern = sqlite3_value_text(argv[1]); - if( zPattern==0 ){ - assert( sqlite3_value_type(argv[1])==SQLITE_NULL - || sqlite3_context_db_handle(context)->mallocFailed ); - return; - } - if( zPattern[0]==0 ){ - assert( sqlite3_value_type(argv[1])!=SQLITE_NULL ); - sqlite3_result_value(context, argv[0]); - return; +SQLITE_PRIVATE int sqlite3ExprCompare(Expr *pA, Expr *pB){ + if( pA==0||pB==0 ){ + return pB==pA ? 0 : 2; } - nPattern = sqlite3_value_bytes(argv[1]); - assert( zPattern==sqlite3_value_text(argv[1]) ); /* No encoding change */ - zRep = sqlite3_value_text(argv[2]); - if( zRep==0 ) return; - nRep = sqlite3_value_bytes(argv[2]); - assert( zRep==sqlite3_value_text(argv[2]) ); - nOut = nStr + 1; - assert( nOutaLimit[SQLITE_LIMIT_LENGTH] ); - testcase( nOut-2==db->aLimit[SQLITE_LIMIT_LENGTH] ); - if( nOut-1>db->aLimit[SQLITE_LIMIT_LENGTH] ){ - sqlite3_result_error_toobig(context); - sqlite3DbFree(db, zOut); - return; - } - zOld = zOut; - zOut = sqlite3_realloc(zOut, (int)nOut); - if( zOut==0 ){ - sqlite3_result_error_nomem(context); - sqlite3DbFree(db, zOld); - return; - } - memcpy(&zOut[j], zRep, nRep); - j += nRep; - i += nPattern-1; + if( (pA->flags & EP_Distinct)!=(pB->flags & EP_Distinct) ) return 2; + if( pA->op!=pB->op ) return 2; + if( sqlite3ExprCompare(pA->pLeft, pB->pLeft) ) return 2; + if( sqlite3ExprCompare(pA->pRight, pB->pRight) ) return 2; + if( sqlite3ExprListCompare(pA->x.pList, pB->x.pList) ) return 2; + if( pA->iTable!=pB->iTable || pA->iColumn!=pB->iColumn ) return 2; + if( ExprHasProperty(pA, EP_IntValue) ){ + if( !ExprHasProperty(pB, EP_IntValue) || pA->u.iValue!=pB->u.iValue ){ + return 2; + } + }else if( pA->op!=TK_COLUMN && ALWAYS(pA->op!=TK_AGG_COLUMN) && pA->u.zToken){ + if( ExprHasProperty(pB, EP_IntValue) || NEVER(pB->u.zToken==0) ) return 2; + if( strcmp(pA->u.zToken,pB->u.zToken)!=0 ){ + return 2; } } - assert( j+nStr-i+1==nOut ); - memcpy(&zOut[j], &zStr[i], nStr-i); - j += nStr - i; - assert( j<=nOut ); - zOut[j] = 0; - sqlite3_result_text(context, (char*)zOut, j, sqlite3_free); + if( (pA->flags & EP_ExpCollate)!=(pB->flags & EP_ExpCollate) ) return 1; + if( (pA->flags & EP_ExpCollate)!=0 && pA->pColl!=pB->pColl ) return 2; + return 0; } /* -** Implementation of the TRIM(), LTRIM(), and RTRIM() functions. -** The userdata is 0x1 for left trim, 0x2 for right trim, 0x3 for both. +** Compare two ExprList objects. Return 0 if they are identical and +** non-zero if they differ in any way. +** +** This routine might return non-zero for equivalent ExprLists. The +** only consequence will be disabled optimizations. But this routine +** must never return 0 if the two ExprList objects are different, or +** a malfunction will result. +** +** Two NULL pointers are considered to be the same. But a NULL pointer +** always differs from a non-NULL pointer. */ -static void trimFunc( - sqlite3_context *context, - int argc, - sqlite3_value **argv -){ - const unsigned char *zIn; /* Input string */ - const unsigned char *zCharSet; /* Set of characters to trim */ - int nIn; /* Number of bytes in input */ - int flags; /* 1: trimleft 2: trimright 3: trim */ - int i; /* Loop counter */ - unsigned char *aLen = 0; /* Length of each character in zCharSet */ - unsigned char **azChar = 0; /* Individual characters in zCharSet */ - int nChar; /* Number of characters in zCharSet */ - - if( sqlite3_value_type(argv[0])==SQLITE_NULL ){ - return; - } - zIn = sqlite3_value_text(argv[0]); - if( zIn==0 ) return; - nIn = sqlite3_value_bytes(argv[0]); - assert( zIn==sqlite3_value_text(argv[0]) ); - if( argc==1 ){ - static const unsigned char lenOne[] = { 1 }; - static unsigned char * const azOne[] = { (u8*)" " }; - nChar = 1; - aLen = (u8*)lenOne; - azChar = (unsigned char **)azOne; - zCharSet = 0; - }else if( (zCharSet = sqlite3_value_text(argv[1]))==0 ){ - return; - }else{ - const unsigned char *z; - for(z=zCharSet, nChar=0; *z; nChar++){ - SQLITE_SKIP_UTF8(z); - } - if( nChar>0 ){ - azChar = contextMalloc(context, ((i64)nChar)*(sizeof(char*)+1)); - if( azChar==0 ){ - return; - } - aLen = (unsigned char*)&azChar[nChar]; - for(z=zCharSet, nChar=0; *z; nChar++){ - azChar[nChar] = (unsigned char *)z; - SQLITE_SKIP_UTF8(z); - aLen[nChar] = (u8)(z - azChar[nChar]); - } - } - } - if( nChar>0 ){ - flags = SQLITE_PTR_TO_INT(sqlite3_user_data(context)); - if( flags & 1 ){ - while( nIn>0 ){ - int len = 0; - for(i=0; i=nChar ) break; - zIn += len; - nIn -= len; - } - } - if( flags & 2 ){ - while( nIn>0 ){ - int len = 0; - for(i=0; i=nChar ) break; - nIn -= len; - } - } - if( zCharSet ){ - sqlite3_free(azChar); - } +SQLITE_PRIVATE int sqlite3ExprListCompare(ExprList *pA, ExprList *pB){ + int i; + if( pA==0 && pB==0 ) return 0; + if( pA==0 || pB==0 ) return 1; + if( pA->nExpr!=pB->nExpr ) return 1; + for(i=0; inExpr; i++){ + Expr *pExprA = pA->a[i].pExpr; + Expr *pExprB = pB->a[i].pExpr; + if( pA->a[i].sortOrder!=pB->a[i].sortOrder ) return 1; + if( sqlite3ExprCompare(pExprA, pExprB) ) return 1; } - sqlite3_result_text(context, (char*)zIn, nIn, SQLITE_TRANSIENT); + return 0; } - -#ifdef SQLITE_SOUNDEX /* -** Compute the soundex encoding of a word. +** This is the expression callback for sqlite3FunctionUsesOtherSrc(). +** +** Determine if an expression references any table other than one of the +** tables in pWalker->u.pSrcList and abort if it does. */ -static void soundexFunc( - sqlite3_context *context, - int argc, - sqlite3_value **argv -){ - char zResult[8]; - const u8 *zIn; - int i, j; - static const unsigned char iCode[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 2, 3, 0, 1, 2, 0, 0, 2, 2, 4, 5, 5, 0, - 1, 2, 6, 2, 3, 0, 1, 0, 2, 0, 2, 0, 0, 0, 0, 0, - 0, 0, 1, 2, 3, 0, 1, 2, 0, 0, 2, 2, 4, 5, 5, 0, - 1, 2, 6, 2, 3, 0, 1, 0, 2, 0, 2, 0, 0, 0, 0, 0, - }; - assert( argc==1 ); - zIn = (u8*)sqlite3_value_text(argv[0]); - if( zIn==0 ) zIn = (u8*)""; - for(i=0; zIn[i] && !sqlite3Isalpha(zIn[i]); i++){} - if( zIn[i] ){ - u8 prevcode = iCode[zIn[i]&0x7f]; - zResult[0] = sqlite3Toupper(zIn[i]); - for(j=1; j<4 && zIn[i]; i++){ - int code = iCode[zIn[i]&0x7f]; - if( code>0 ){ - if( code!=prevcode ){ - prevcode = code; - zResult[j++] = code + '0'; - } - }else{ - prevcode = 0; - } - } - while( j<4 ){ - zResult[j++] = '0'; +static int exprUsesOtherSrc(Walker *pWalker, Expr *pExpr){ + if( pExpr->op==TK_COLUMN || pExpr->op==TK_AGG_COLUMN ){ + int i; + SrcList *pSrc = pWalker->u.pSrcList; + for(i=0; inSrc; i++){ + if( pExpr->iTable==pSrc->a[i].iCursor ) return WRC_Continue; } - zResult[j] = 0; - sqlite3_result_text(context, zResult, 4, SQLITE_TRANSIENT); + return WRC_Abort; }else{ - sqlite3_result_text(context, "?000", 4, SQLITE_STATIC); + return WRC_Continue; } } -#endif -#ifndef SQLITE_OMIT_LOAD_EXTENSION /* -** A function that loads a shared-library extension then returns NULL. +** Determine if any of the arguments to the pExpr Function references +** any SrcList other than pSrcList. Return true if they do. Return +** false if pExpr has no argument or has only constant arguments or +** only references tables named in pSrcList. */ -static void loadExt(sqlite3_context *context, int argc, sqlite3_value **argv){ - const char *zFile = (const char *)sqlite3_value_text(argv[0]); - const char *zProc; - sqlite3 *db = sqlite3_context_db_handle(context); - char *zErrMsg = 0; - - if( argc==2 ){ - zProc = (const char *)sqlite3_value_text(argv[1]); - }else{ - zProc = 0; - } - if( zFile && sqlite3_load_extension(db, zFile, zProc, &zErrMsg) ){ - sqlite3_result_error(context, zErrMsg, -1); - sqlite3_free(zErrMsg); - } +static int sqlite3FunctionUsesOtherSrc(Expr *pExpr, SrcList *pSrcList){ + Walker w; + assert( pExpr->op==TK_AGG_FUNCTION ); + memset(&w, 0, sizeof(w)); + w.xExprCallback = exprUsesOtherSrc; + w.u.pSrcList = pSrcList; + if( sqlite3WalkExprList(&w, pExpr->x.pList)!=WRC_Continue ) return 1; + return 0; } -#endif +/* +** Add a new element to the pAggInfo->aCol[] array. Return the index of +** the new element. Return a negative number if malloc fails. +*/ +static int addAggInfoColumn(sqlite3 *db, AggInfo *pInfo){ + int i; + pInfo->aCol = sqlite3ArrayAllocate( + db, + pInfo->aCol, + sizeof(pInfo->aCol[0]), + &pInfo->nColumn, + &i + ); + return i; +} /* -** An instance of the following structure holds the context of a -** sum() or avg() aggregate computation. +** Add a new element to the pAggInfo->aFunc[] array. Return the index of +** the new element. Return a negative number if malloc fails. */ -typedef struct SumCtx SumCtx; -struct SumCtx { - double rSum; /* Floating point sum */ - i64 iSum; /* Integer sum */ - i64 cnt; /* Number of elements summed */ - u8 overflow; /* True if integer overflow seen */ - u8 approx; /* True if non-integer value was input to the sum */ -}; +static int addAggInfoFunc(sqlite3 *db, AggInfo *pInfo){ + int i; + pInfo->aFunc = sqlite3ArrayAllocate( + db, + pInfo->aFunc, + sizeof(pInfo->aFunc[0]), + &pInfo->nFunc, + &i + ); + return i; +} /* -** Routines used to compute the sum, average, and total. -** -** The SUM() function follows the (broken) SQL standard which means -** that it returns NULL if it sums over no inputs. TOTAL returns -** 0.0 in that case. In addition, TOTAL always returns a float where -** SUM might return an integer if it never encounters a floating point -** value. TOTAL never fails, but SUM might through an exception if -** it overflows an integer. +** This is the xExprCallback for a tree walker. It is used to +** implement sqlite3ExprAnalyzeAggregates(). See sqlite3ExprAnalyzeAggregates +** for additional information. */ -static void sumStep(sqlite3_context *context, int argc, sqlite3_value **argv){ - SumCtx *p; - int type; - assert( argc==1 ); - UNUSED_PARAMETER(argc); - p = sqlite3_aggregate_context(context, sizeof(*p)); - type = sqlite3_value_numeric_type(argv[0]); - if( p && type!=SQLITE_NULL ){ - p->cnt++; - if( type==SQLITE_INTEGER ){ - i64 v = sqlite3_value_int64(argv[0]); - p->rSum += v; - if( (p->approx|p->overflow)==0 ){ - i64 iNewSum = p->iSum + v; - int s1 = (int)(p->iSum >> (sizeof(i64)*8-1)); - int s2 = (int)(v >> (sizeof(i64)*8-1)); - int s3 = (int)(iNewSum >> (sizeof(i64)*8-1)); - p->overflow = ((s1&s2&~s3) | (~s1&~s2&s3))?1:0; - p->iSum = iNewSum; +static int analyzeAggregate(Walker *pWalker, Expr *pExpr){ + int i; + NameContext *pNC = pWalker->u.pNC; + Parse *pParse = pNC->pParse; + SrcList *pSrcList = pNC->pSrcList; + AggInfo *pAggInfo = pNC->pAggInfo; + + switch( pExpr->op ){ + case TK_AGG_COLUMN: + case TK_COLUMN: { + testcase( pExpr->op==TK_AGG_COLUMN ); + testcase( pExpr->op==TK_COLUMN ); + /* Check to see if the column is in one of the tables in the FROM + ** clause of the aggregate query */ + if( ALWAYS(pSrcList!=0) ){ + struct SrcList_item *pItem = pSrcList->a; + for(i=0; inSrc; i++, pItem++){ + struct AggInfo_col *pCol; + assert( !ExprHasAnyProperty(pExpr, EP_TokenOnly|EP_Reduced) ); + if( pExpr->iTable==pItem->iCursor ){ + /* If we reach this point, it means that pExpr refers to a table + ** that is in the FROM clause of the aggregate query. + ** + ** Make an entry for the column in pAggInfo->aCol[] if there + ** is not an entry there already. + */ + int k; + pCol = pAggInfo->aCol; + for(k=0; knColumn; k++, pCol++){ + if( pCol->iTable==pExpr->iTable && + pCol->iColumn==pExpr->iColumn ){ + break; + } + } + if( (k>=pAggInfo->nColumn) + && (k = addAggInfoColumn(pParse->db, pAggInfo))>=0 + ){ + pCol = &pAggInfo->aCol[k]; + pCol->pTab = pExpr->pTab; + pCol->iTable = pExpr->iTable; + pCol->iColumn = pExpr->iColumn; + pCol->iMem = ++pParse->nMem; + pCol->iSorterColumn = -1; + pCol->pExpr = pExpr; + if( pAggInfo->pGroupBy ){ + int j, n; + ExprList *pGB = pAggInfo->pGroupBy; + struct ExprList_item *pTerm = pGB->a; + n = pGB->nExpr; + for(j=0; jpExpr; + if( pE->op==TK_COLUMN && pE->iTable==pExpr->iTable && + pE->iColumn==pExpr->iColumn ){ + pCol->iSorterColumn = j; + break; + } + } + } + if( pCol->iSorterColumn<0 ){ + pCol->iSorterColumn = pAggInfo->nSortingColumn++; + } + } + /* There is now an entry for pExpr in pAggInfo->aCol[] (either + ** because it was there before or because we just created it). + ** Convert the pExpr to be a TK_AGG_COLUMN referring to that + ** pAggInfo->aCol[] entry. + */ + ExprSetIrreducible(pExpr); + pExpr->pAggInfo = pAggInfo; + pExpr->op = TK_AGG_COLUMN; + pExpr->iAgg = (i16)k; + break; + } /* endif pExpr->iTable==pItem->iCursor */ + } /* end loop over pSrcList */ } - }else{ - p->rSum += sqlite3_value_double(argv[0]); - p->approx = 1; + return WRC_Prune; } - } -} -static void sumFinalize(sqlite3_context *context){ - SumCtx *p; - p = sqlite3_aggregate_context(context, 0); - if( p && p->cnt>0 ){ - if( p->overflow ){ - sqlite3_result_error(context,"integer overflow",-1); - }else if( p->approx ){ - sqlite3_result_double(context, p->rSum); - }else{ - sqlite3_result_int64(context, p->iSum); + case TK_AGG_FUNCTION: { + if( (pNC->ncFlags & NC_InAggFunc)==0 + && !sqlite3FunctionUsesOtherSrc(pExpr, pSrcList) + ){ + /* Check to see if pExpr is a duplicate of another aggregate + ** function that is already in the pAggInfo structure + */ + struct AggInfo_func *pItem = pAggInfo->aFunc; + for(i=0; inFunc; i++, pItem++){ + if( sqlite3ExprCompare(pItem->pExpr, pExpr)==0 ){ + break; + } + } + if( i>=pAggInfo->nFunc ){ + /* pExpr is original. Make a new entry in pAggInfo->aFunc[] + */ + u8 enc = ENC(pParse->db); + i = addAggInfoFunc(pParse->db, pAggInfo); + if( i>=0 ){ + assert( !ExprHasProperty(pExpr, EP_xIsSelect) ); + pItem = &pAggInfo->aFunc[i]; + pItem->pExpr = pExpr; + pItem->iMem = ++pParse->nMem; + assert( !ExprHasProperty(pExpr, EP_IntValue) ); + pItem->pFunc = sqlite3FindFunction(pParse->db, + pExpr->u.zToken, sqlite3Strlen30(pExpr->u.zToken), + pExpr->x.pList ? pExpr->x.pList->nExpr : 0, enc, 0); + if( pExpr->flags & EP_Distinct ){ + pItem->iDistinct = pParse->nTab++; + }else{ + pItem->iDistinct = -1; + } + } + } + /* Make pExpr point to the appropriate pAggInfo->aFunc[] entry + */ + assert( !ExprHasAnyProperty(pExpr, EP_TokenOnly|EP_Reduced) ); + ExprSetIrreducible(pExpr); + pExpr->iAgg = (i16)i; + pExpr->pAggInfo = pAggInfo; + } + return WRC_Prune; } } + return WRC_Continue; } -static void avgFinalize(sqlite3_context *context){ - SumCtx *p; - p = sqlite3_aggregate_context(context, 0); - if( p && p->cnt>0 ){ - sqlite3_result_double(context, p->rSum/(double)p->cnt); - } -} -static void totalFinalize(sqlite3_context *context){ - SumCtx *p; - p = sqlite3_aggregate_context(context, 0); - /* (double)0 In case of SQLITE_OMIT_FLOATING_POINT... */ - sqlite3_result_double(context, p ? p->rSum : (double)0); +static int analyzeAggregatesInSelect(Walker *pWalker, Select *pSelect){ + UNUSED_PARAMETER(pWalker); + UNUSED_PARAMETER(pSelect); + return WRC_Continue; } /* -** The following structure keeps track of state information for the -** count() aggregate function. -*/ -typedef struct CountCtx CountCtx; -struct CountCtx { - i64 n; -}; - -/* -** Routines to implement the count() aggregate function. +** Analyze the given expression looking for aggregate functions and +** for variables that need to be added to the pParse->aAgg[] array. +** Make additional entries to the pParse->aAgg[] array as necessary. +** +** This routine should only be called after the expression has been +** analyzed by sqlite3ResolveExprNames(). */ -static void countStep(sqlite3_context *context, int argc, sqlite3_value **argv){ - CountCtx *p; - p = sqlite3_aggregate_context(context, sizeof(*p)); - if( (argc==0 || SQLITE_NULL!=sqlite3_value_type(argv[0])) && p ){ - p->n++; - } - -#ifndef SQLITE_OMIT_DEPRECATED - /* The sqlite3_aggregate_count() function is deprecated. But just to make - ** sure it still operates correctly, verify that its count agrees with our - ** internal count when using count(*) and when the total count can be - ** expressed as a 32-bit integer. */ - assert( argc==1 || p==0 || p->n>0x7fffffff - || p->n==sqlite3_aggregate_count(context) ); -#endif -} -static void countFinalize(sqlite3_context *context){ - CountCtx *p; - p = sqlite3_aggregate_context(context, 0); - sqlite3_result_int64(context, p ? p->n : 0); +SQLITE_PRIVATE void sqlite3ExprAnalyzeAggregates(NameContext *pNC, Expr *pExpr){ + Walker w; + memset(&w, 0, sizeof(w)); + w.xExprCallback = analyzeAggregate; + w.xSelectCallback = analyzeAggregatesInSelect; + w.u.pNC = pNC; + assert( pNC->pSrcList!=0 ); + sqlite3WalkExpr(&w, pExpr); } /* -** Routines to implement min() and max() aggregate functions. +** Call sqlite3ExprAnalyzeAggregates() for every expression in an +** expression list. Return the number of errors. +** +** If an error is found, the analysis is cut short. */ -static void minmaxStep( - sqlite3_context *context, - int NotUsed, - sqlite3_value **argv -){ - Mem *pArg = (Mem *)argv[0]; - Mem *pBest; - UNUSED_PARAMETER(NotUsed); - - if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return; - pBest = (Mem *)sqlite3_aggregate_context(context, sizeof(*pBest)); - if( !pBest ) return; - - if( pBest->flags ){ - int max; - int cmp; - CollSeq *pColl = sqlite3GetFuncCollSeq(context); - /* This step function is used for both the min() and max() aggregates, - ** the only difference between the two being that the sense of the - ** comparison is inverted. For the max() aggregate, the - ** sqlite3_user_data() function returns (void *)-1. For min() it - ** returns (void *)db, where db is the sqlite3* database pointer. - ** Therefore the next statement sets variable 'max' to 1 for the max() - ** aggregate, or 0 for min(). - */ - max = sqlite3_user_data(context)!=0; - cmp = sqlite3MemCompare(pBest, pArg, pColl); - if( (max && cmp<0) || (!max && cmp>0) ){ - sqlite3VdbeMemCopy(pBest, pArg); - } - }else{ - sqlite3VdbeMemCopy(pBest, pArg); - } -} -static void minMaxFinalize(sqlite3_context *context){ - sqlite3_value *pRes; - pRes = (sqlite3_value *)sqlite3_aggregate_context(context, 0); - if( pRes ){ - if( ALWAYS(pRes->flags) ){ - sqlite3_result_value(context, pRes); +SQLITE_PRIVATE void sqlite3ExprAnalyzeAggList(NameContext *pNC, ExprList *pList){ + struct ExprList_item *pItem; + int i; + if( pList ){ + for(pItem=pList->a, i=0; inExpr; i++, pItem++){ + sqlite3ExprAnalyzeAggregates(pNC, pItem->pExpr); } - sqlite3VdbeMemRelease(pRes); } } /* -** group_concat(EXPR, ?SEPARATOR?) +** Allocate a single new register for use to hold some intermediate result. */ -static void groupConcatStep( - sqlite3_context *context, - int argc, - sqlite3_value **argv -){ - const char *zVal; - StrAccum *pAccum; - const char *zSep; - int nVal, nSep; - assert( argc==1 || argc==2 ); - if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return; - pAccum = (StrAccum*)sqlite3_aggregate_context(context, sizeof(*pAccum)); - - if( pAccum ){ - sqlite3 *db = sqlite3_context_db_handle(context); - int firstTerm = pAccum->useMalloc==0; - pAccum->useMalloc = 1; - pAccum->mxAlloc = db->aLimit[SQLITE_LIMIT_LENGTH]; - if( !firstTerm ){ - if( argc==2 ){ - zSep = (char*)sqlite3_value_text(argv[1]); - nSep = sqlite3_value_bytes(argv[1]); - }else{ - zSep = ","; - nSep = 1; - } - sqlite3StrAccumAppend(pAccum, zSep, nSep); - } - zVal = (char*)sqlite3_value_text(argv[0]); - nVal = sqlite3_value_bytes(argv[0]); - sqlite3StrAccumAppend(pAccum, zVal, nVal); - } -} -static void groupConcatFinalize(sqlite3_context *context){ - StrAccum *pAccum; - pAccum = sqlite3_aggregate_context(context, 0); - if( pAccum ){ - if( pAccum->tooBig ){ - sqlite3_result_error_toobig(context); - }else if( pAccum->mallocFailed ){ - sqlite3_result_error_nomem(context); - }else{ - sqlite3_result_text(context, sqlite3StrAccumFinish(pAccum), -1, - sqlite3_free); - } +SQLITE_PRIVATE int sqlite3GetTempReg(Parse *pParse){ + if( pParse->nTempReg==0 ){ + return ++pParse->nMem; } + return pParse->aTempReg[--pParse->nTempReg]; } /* -** This function registered all of the above C functions as SQL -** functions. This should be the only routine in this file with -** external linkage. +** Deallocate a register, making available for reuse for some other +** purpose. +** +** If a register is currently being used by the column cache, then +** the dallocation is deferred until the column cache line that uses +** the register becomes stale. */ -SQLITE_PRIVATE void sqlite3RegisterBuiltinFunctions(sqlite3 *db){ -#ifndef SQLITE_OMIT_ALTERTABLE - sqlite3AlterFunctions(db); -#endif - if( !db->mallocFailed ){ - int rc = sqlite3_overload_function(db, "MATCH", 2); - assert( rc==SQLITE_NOMEM || rc==SQLITE_OK ); - if( rc==SQLITE_NOMEM ){ - db->mallocFailed = 1; +SQLITE_PRIVATE void sqlite3ReleaseTempReg(Parse *pParse, int iReg){ + if( iReg && pParse->nTempRegaTempReg) ){ + int i; + struct yColCache *p; + for(i=0, p=pParse->aColCache; iiReg==iReg ){ + p->tempReg = 1; + return; + } } + pParse->aTempReg[pParse->nTempReg++] = iReg; } } /* -** Set the LIKEOPT flag on the 2-argument function with the given name. -*/ -static void setLikeOptFlag(sqlite3 *db, const char *zName, u8 flagVal){ - FuncDef *pDef; - pDef = sqlite3FindFunction(db, zName, sqlite3Strlen30(zName), - 2, SQLITE_UTF8, 0); - if( ALWAYS(pDef) ){ - pDef->flags = flagVal; - } -} - -/* -** Register the built-in LIKE and GLOB functions. The caseSensitive -** parameter determines whether or not the LIKE operator is case -** sensitive. GLOB is always case sensitive. +** Allocate or deallocate a block of nReg consecutive registers */ -SQLITE_PRIVATE void sqlite3RegisterLikeFunctions(sqlite3 *db, int caseSensitive){ - struct compareInfo *pInfo; - if( caseSensitive ){ - pInfo = (struct compareInfo*)&likeInfoAlt; +SQLITE_PRIVATE int sqlite3GetTempRange(Parse *pParse, int nReg){ + int i, n; + i = pParse->iRangeReg; + n = pParse->nRangeReg; + if( nReg<=n ){ + assert( !usedAsColumnCache(pParse, i, i+n-1) ); + pParse->iRangeReg += nReg; + pParse->nRangeReg -= nReg; }else{ - pInfo = (struct compareInfo*)&likeInfoNorm; + i = pParse->nMem+1; + pParse->nMem += nReg; } - sqlite3CreateFunc(db, "like", 2, SQLITE_ANY, pInfo, likeFunc, 0, 0); - sqlite3CreateFunc(db, "like", 3, SQLITE_ANY, pInfo, likeFunc, 0, 0); - sqlite3CreateFunc(db, "glob", 2, SQLITE_ANY, - (struct compareInfo*)&globInfo, likeFunc, 0,0); - setLikeOptFlag(db, "glob", SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE); - setLikeOptFlag(db, "like", - caseSensitive ? (SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE) : SQLITE_FUNC_LIKE); + return i; } - -/* -** pExpr points to an expression which implements a function. If -** it is appropriate to apply the LIKE optimization to that function -** then set aWc[0] through aWc[2] to the wildcard characters and -** return TRUE. If the function is not a LIKE-style function then -** return FALSE. -*/ -SQLITE_PRIVATE int sqlite3IsLikeFunction(sqlite3 *db, Expr *pExpr, int *pIsNocase, char *aWc){ - FuncDef *pDef; - if( pExpr->op!=TK_FUNCTION - || !pExpr->x.pList - || pExpr->x.pList->nExpr!=2 - ){ - return 0; - } - assert( !ExprHasProperty(pExpr, EP_xIsSelect) ); - pDef = sqlite3FindFunction(db, pExpr->u.zToken, - sqlite3Strlen30(pExpr->u.zToken), - 2, SQLITE_UTF8, 0); - if( NEVER(pDef==0) || (pDef->flags & SQLITE_FUNC_LIKE)==0 ){ - return 0; +SQLITE_PRIVATE void sqlite3ReleaseTempRange(Parse *pParse, int iReg, int nReg){ + sqlite3ExprCacheRemove(pParse, iReg, nReg); + if( nReg>pParse->nRangeReg ){ + pParse->nRangeReg = nReg; + pParse->iRangeReg = iReg; } - - /* The memcpy() statement assumes that the wildcard characters are - ** the first three statements in the compareInfo structure. The - ** asserts() that follow verify that assumption - */ - memcpy(aWc, pDef->pUserData, 3); - assert( (char*)&likeInfoAlt == (char*)&likeInfoAlt.matchAll ); - assert( &((char*)&likeInfoAlt)[1] == (char*)&likeInfoAlt.matchOne ); - assert( &((char*)&likeInfoAlt)[2] == (char*)&likeInfoAlt.matchSet ); - *pIsNocase = (pDef->flags & SQLITE_FUNC_CASE)==0; - return 1; } /* -** All all of the FuncDef structures in the aBuiltinFunc[] array above -** to the global function hash table. This occurs at start-time (as -** a consequence of calling sqlite3_initialize()). -** -** After this routine runs +** Mark all temporary registers as being unavailable for reuse. */ -SQLITE_PRIVATE void sqlite3RegisterGlobalFunctions(void){ - /* - ** The following array holds FuncDef structures for all of the functions - ** defined in this file. - ** - ** The array cannot be constant since changes are made to the - ** FuncDef.pHash elements at start-time. The elements of this array - ** are read-only after initialization is complete. - */ - static SQLITE_WSD FuncDef aBuiltinFunc[] = { - FUNCTION(ltrim, 1, 1, 0, trimFunc ), - FUNCTION(ltrim, 2, 1, 0, trimFunc ), - FUNCTION(rtrim, 1, 2, 0, trimFunc ), - FUNCTION(rtrim, 2, 2, 0, trimFunc ), - FUNCTION(trim, 1, 3, 0, trimFunc ), - FUNCTION(trim, 2, 3, 0, trimFunc ), - FUNCTION(min, -1, 0, 1, minmaxFunc ), - FUNCTION(min, 0, 0, 1, 0 ), - AGGREGATE(min, 1, 0, 1, minmaxStep, minMaxFinalize ), - FUNCTION(max, -1, 1, 1, minmaxFunc ), - FUNCTION(max, 0, 1, 1, 0 ), - AGGREGATE(max, 1, 1, 1, minmaxStep, minMaxFinalize ), - FUNCTION(typeof, 1, 0, 0, typeofFunc ), - FUNCTION(length, 1, 0, 0, lengthFunc ), - FUNCTION(substr, 2, 0, 0, substrFunc ), - FUNCTION(substr, 3, 0, 0, substrFunc ), - FUNCTION(abs, 1, 0, 0, absFunc ), -#ifndef SQLITE_OMIT_FLOATING_POINT - FUNCTION(round, 1, 0, 0, roundFunc ), - FUNCTION(round, 2, 0, 0, roundFunc ), -#endif - FUNCTION(upper, 1, 0, 0, upperFunc ), - FUNCTION(lower, 1, 0, 0, lowerFunc ), - FUNCTION(coalesce, 1, 0, 0, 0 ), - FUNCTION(coalesce, -1, 0, 0, ifnullFunc ), - FUNCTION(coalesce, 0, 0, 0, 0 ), - FUNCTION(hex, 1, 0, 0, hexFunc ), - FUNCTION(ifnull, 2, 0, 1, ifnullFunc ), - FUNCTION(random, 0, 0, 0, randomFunc ), - FUNCTION(randomblob, 1, 0, 0, randomBlob ), - FUNCTION(nullif, 2, 0, 1, nullifFunc ), - FUNCTION(sqlite_version, 0, 0, 0, versionFunc ), - FUNCTION(quote, 1, 0, 0, quoteFunc ), - FUNCTION(last_insert_rowid, 0, 0, 0, last_insert_rowid), - FUNCTION(changes, 0, 0, 0, changes ), - FUNCTION(total_changes, 0, 0, 0, total_changes ), - FUNCTION(replace, 3, 0, 0, replaceFunc ), - FUNCTION(zeroblob, 1, 0, 0, zeroblobFunc ), - #ifdef SQLITE_SOUNDEX - FUNCTION(soundex, 1, 0, 0, soundexFunc ), - #endif - #ifndef SQLITE_OMIT_LOAD_EXTENSION - FUNCTION(load_extension, 1, 0, 0, loadExt ), - FUNCTION(load_extension, 2, 0, 0, loadExt ), - #endif - AGGREGATE(sum, 1, 0, 0, sumStep, sumFinalize ), - AGGREGATE(total, 1, 0, 0, sumStep, totalFinalize ), - AGGREGATE(avg, 1, 0, 0, sumStep, avgFinalize ), - /* AGGREGATE(count, 0, 0, 0, countStep, countFinalize ), */ - {0,SQLITE_UTF8,SQLITE_FUNC_COUNT,0,0,0,countStep,countFinalize,"count",0}, - AGGREGATE(count, 1, 0, 0, countStep, countFinalize ), - AGGREGATE(group_concat, 1, 0, 0, groupConcatStep, groupConcatFinalize), - AGGREGATE(group_concat, 2, 0, 0, groupConcatStep, groupConcatFinalize), - - LIKEFUNC(glob, 2, &globInfo, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE), - #ifdef SQLITE_CASE_SENSITIVE_LIKE - LIKEFUNC(like, 2, &likeInfoAlt, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE), - LIKEFUNC(like, 3, &likeInfoAlt, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE), - #else - LIKEFUNC(like, 2, &likeInfoNorm, SQLITE_FUNC_LIKE), - LIKEFUNC(like, 3, &likeInfoNorm, SQLITE_FUNC_LIKE), - #endif - }; - - int i; - FuncDefHash *pHash = &GLOBAL(FuncDefHash, sqlite3GlobalFunctions); - FuncDef *aFunc = (FuncDef*)&GLOBAL(FuncDef, aBuiltinFunc); - - for(i=0; inTempReg = 0; + pParse->nRangeReg = 0; } -/************** End of func.c ************************************************/ -/************** Begin file insert.c ******************************************/ +/************** End of expr.c ************************************************/ +/************** Begin file alter.c *******************************************/ /* -** 2001 September 15 +** 2005 February 15 ** ** The author disclaims copyright to this source code. In place of ** a legal notice, here is a blessing: @@ -70168,1945 +79430,2511 @@ SQLITE_PRIVATE void sqlite3RegisterGlobalFunctions(void){ ** May you share freely, never taking more than you give. ** ************************************************************************* -** This file contains C code routines that are called by the parser -** to handle INSERT statements in SQLite. -** -** $Id: insert.c,v 1.269 2009/06/23 20:28:54 drh Exp $ +** This file contains C code routines that used to generate VDBE code +** that implements the ALTER TABLE command. */ /* -** Generate code that will open a table for reading. +** The code in this file only exists if we are not omitting the +** ALTER TABLE logic from the build. */ -SQLITE_PRIVATE void sqlite3OpenTable( - Parse *p, /* Generate code into this VDBE */ - int iCur, /* The cursor number of the table */ - int iDb, /* The database index in sqlite3.aDb[] */ - Table *pTab, /* The table to be opened */ - int opcode /* OP_OpenRead or OP_OpenWrite */ -){ - Vdbe *v; - if( IsVirtual(pTab) ) return; - v = sqlite3GetVdbe(p); - assert( opcode==OP_OpenWrite || opcode==OP_OpenRead ); - sqlite3TableLock(p, iDb, pTab->tnum, (opcode==OP_OpenWrite)?1:0, pTab->zName); - sqlite3VdbeAddOp3(v, opcode, iCur, pTab->tnum, iDb); - sqlite3VdbeChangeP4(v, -1, SQLITE_INT_TO_PTR(pTab->nCol), P4_INT32); - VdbeComment((v, "%s", pTab->zName)); -} +#ifndef SQLITE_OMIT_ALTERTABLE + /* -** Set P4 of the most recently inserted opcode to a column affinity -** string for index pIdx. A column affinity string has one character -** for each column in the table, according to the affinity of the column: +** This function is used by SQL generated to implement the +** ALTER TABLE command. The first argument is the text of a CREATE TABLE or +** CREATE INDEX command. The second is a table name. The table name in +** the CREATE TABLE or CREATE INDEX statement is replaced with the third +** argument and the result returned. Examples: ** -** Character Column affinity -** ------------------------------ -** 'a' TEXT -** 'b' NONE -** 'c' NUMERIC -** 'd' INTEGER -** 'e' REAL +** sqlite_rename_table('CREATE TABLE abc(a, b, c)', 'def') +** -> 'CREATE TABLE def(a, b, c)' ** -** An extra 'b' is appended to the end of the string to cover the -** rowid that appears as the last column in every index. +** sqlite_rename_table('CREATE INDEX i ON abc(a)', 'def') +** -> 'CREATE INDEX i ON def(a, b, c)' */ -SQLITE_PRIVATE void sqlite3IndexAffinityStr(Vdbe *v, Index *pIdx){ - if( !pIdx->zColAff ){ - /* The first time a column affinity string for a particular index is - ** required, it is allocated and populated here. It is then stored as - ** a member of the Index structure for subsequent use. - ** - ** The column affinity string will eventually be deleted by - ** sqliteDeleteIndex() when the Index structure itself is cleaned - ** up. - */ - int n; - Table *pTab = pIdx->pTable; - sqlite3 *db = sqlite3VdbeDb(v); - pIdx->zColAff = (char *)sqlite3Malloc(pIdx->nColumn+2); - if( !pIdx->zColAff ){ - db->mallocFailed = 1; - return; - } - for(n=0; nnColumn; n++){ - pIdx->zColAff[n] = pTab->aCol[pIdx->aiColumn[n]].affinity; - } - pIdx->zColAff[n++] = SQLITE_AFF_NONE; - pIdx->zColAff[n] = 0; +static void renameTableFunc( + sqlite3_context *context, + int NotUsed, + sqlite3_value **argv +){ + unsigned char const *zSql = sqlite3_value_text(argv[0]); + unsigned char const *zTableName = sqlite3_value_text(argv[1]); + + int token; + Token tname; + unsigned char const *zCsr = zSql; + int len = 0; + char *zRet; + + sqlite3 *db = sqlite3_context_db_handle(context); + + UNUSED_PARAMETER(NotUsed); + + /* The principle used to locate the table name in the CREATE TABLE + ** statement is that the table name is the first non-space token that + ** is immediately followed by a TK_LP or TK_USING token. + */ + if( zSql ){ + do { + if( !*zCsr ){ + /* Ran out of input before finding an opening bracket. Return NULL. */ + return; + } + + /* Store the token that zCsr points to in tname. */ + tname.z = (char*)zCsr; + tname.n = len; + + /* Advance zCsr to the next token. Store that token type in 'token', + ** and its length in 'len' (to be used next iteration of this loop). + */ + do { + zCsr += len; + len = sqlite3GetToken(zCsr, &token); + } while( token==TK_SPACE ); + assert( len>0 ); + } while( token!=TK_LP && token!=TK_USING ); + + zRet = sqlite3MPrintf(db, "%.*s\"%w\"%s", ((u8*)tname.z) - zSql, zSql, + zTableName, tname.z+tname.n); + sqlite3_result_text(context, zRet, -1, SQLITE_DYNAMIC); } - - sqlite3VdbeChangeP4(v, -1, pIdx->zColAff, 0); } /* -** Set P4 of the most recently inserted opcode to a column affinity -** string for table pTab. A column affinity string has one character -** for each column indexed by the index, according to the affinity of the -** column: +** This C function implements an SQL user function that is used by SQL code +** generated by the ALTER TABLE ... RENAME command to modify the definition +** of any foreign key constraints that use the table being renamed as the +** parent table. It is passed three arguments: ** -** Character Column affinity -** ------------------------------ -** 'a' TEXT -** 'b' NONE -** 'c' NUMERIC -** 'd' INTEGER -** 'e' REAL +** 1) The complete text of the CREATE TABLE statement being modified, +** 2) The old name of the table being renamed, and +** 3) The new name of the table being renamed. +** +** It returns the new CREATE TABLE statement. For example: +** +** sqlite_rename_parent('CREATE TABLE t1(a REFERENCES t2)', 't2', 't3') +** -> 'CREATE TABLE t1(a REFERENCES t3)' */ -SQLITE_PRIVATE void sqlite3TableAffinityStr(Vdbe *v, Table *pTab){ - /* The first time a column affinity string for a particular table - ** is required, it is allocated and populated here. It is then - ** stored as a member of the Table structure for subsequent use. - ** - ** The column affinity string will eventually be deleted by - ** sqlite3DeleteTable() when the Table structure itself is cleaned up. - */ - if( !pTab->zColAff ){ - char *zColAff; - int i; - sqlite3 *db = sqlite3VdbeDb(v); +#ifndef SQLITE_OMIT_FOREIGN_KEY +static void renameParentFunc( + sqlite3_context *context, + int NotUsed, + sqlite3_value **argv +){ + sqlite3 *db = sqlite3_context_db_handle(context); + char *zOutput = 0; + char *zResult; + unsigned char const *zInput = sqlite3_value_text(argv[0]); + unsigned char const *zOld = sqlite3_value_text(argv[1]); + unsigned char const *zNew = sqlite3_value_text(argv[2]); - zColAff = (char *)sqlite3Malloc(pTab->nCol+1); - if( !zColAff ){ - db->mallocFailed = 1; - return; - } + unsigned const char *z; /* Pointer to token */ + int n; /* Length of token z */ + int token; /* Type of token */ - for(i=0; inCol; i++){ - zColAff[i] = pTab->aCol[i].affinity; - } - zColAff[pTab->nCol] = '\0'; + UNUSED_PARAMETER(NotUsed); + for(z=zInput; *z; z=z+n){ + n = sqlite3GetToken(z, &token); + if( token==TK_REFERENCES ){ + char *zParent; + do { + z += n; + n = sqlite3GetToken(z, &token); + }while( token==TK_SPACE ); - pTab->zColAff = zColAff; + zParent = sqlite3DbStrNDup(db, (const char *)z, n); + if( zParent==0 ) break; + sqlite3Dequote(zParent); + if( 0==sqlite3StrICmp((const char *)zOld, zParent) ){ + char *zOut = sqlite3MPrintf(db, "%s%.*s\"%w\"", + (zOutput?zOutput:""), z-zInput, zInput, (const char *)zNew + ); + sqlite3DbFree(db, zOutput); + zOutput = zOut; + zInput = &z[n]; + } + sqlite3DbFree(db, zParent); + } } - sqlite3VdbeChangeP4(v, -1, pTab->zColAff, 0); + zResult = sqlite3MPrintf(db, "%s%s", (zOutput?zOutput:""), zInput), + sqlite3_result_text(context, zResult, -1, SQLITE_DYNAMIC); + sqlite3DbFree(db, zOutput); } +#endif -/* -** Return non-zero if the table pTab in database iDb or any of its indices -** have been opened at any point in the VDBE program beginning at location -** iStartAddr throught the end of the program. This is used to see if -** a statement of the form "INSERT INTO SELECT ..." can -** run without using temporary table for the results of the SELECT. +#ifndef SQLITE_OMIT_TRIGGER +/* This function is used by SQL generated to implement the +** ALTER TABLE command. The first argument is the text of a CREATE TRIGGER +** statement. The second is a table name. The table name in the CREATE +** TRIGGER statement is replaced with the third argument and the result +** returned. This is analagous to renameTableFunc() above, except for CREATE +** TRIGGER, not CREATE INDEX and CREATE TABLE. */ -static int readsTable(Vdbe *v, int iStartAddr, int iDb, Table *pTab){ - int i; - int iEnd = sqlite3VdbeCurrentAddr(v); - for(i=iStartAddr; iopcode==OP_OpenRead && pOp->p3==iDb ){ - Index *pIndex; - int tnum = pOp->p2; - if( tnum==pTab->tnum ){ - return 1; +static void renameTriggerFunc( + sqlite3_context *context, + int NotUsed, + sqlite3_value **argv +){ + unsigned char const *zSql = sqlite3_value_text(argv[0]); + unsigned char const *zTableName = sqlite3_value_text(argv[1]); + + int token; + Token tname; + int dist = 3; + unsigned char const *zCsr = zSql; + int len = 0; + char *zRet; + sqlite3 *db = sqlite3_context_db_handle(context); + + UNUSED_PARAMETER(NotUsed); + + /* The principle used to locate the table name in the CREATE TRIGGER + ** statement is that the table name is the first token that is immediatedly + ** preceded by either TK_ON or TK_DOT and immediatedly followed by one + ** of TK_WHEN, TK_BEGIN or TK_FOR. + */ + if( zSql ){ + do { + + if( !*zCsr ){ + /* Ran out of input before finding the table name. Return NULL. */ + return; } - for(pIndex=pTab->pIndex; pIndex; pIndex=pIndex->pNext){ - if( tnum==pIndex->tnum ){ - return 1; - } + + /* Store the token that zCsr points to in tname. */ + tname.z = (char*)zCsr; + tname.n = len; + + /* Advance zCsr to the next token. Store that token type in 'token', + ** and its length in 'len' (to be used next iteration of this loop). + */ + do { + zCsr += len; + len = sqlite3GetToken(zCsr, &token); + }while( token==TK_SPACE ); + assert( len>0 ); + + /* Variable 'dist' stores the number of tokens read since the most + ** recent TK_DOT or TK_ON. This means that when a WHEN, FOR or BEGIN + ** token is read and 'dist' equals 2, the condition stated above + ** to be met. + ** + ** Note that ON cannot be a database, table or column name, so + ** there is no need to worry about syntax like + ** "CREATE TRIGGER ... ON ON.ON BEGIN ..." etc. + */ + dist++; + if( token==TK_DOT || token==TK_ON ){ + dist = 0; } - } -#ifndef SQLITE_OMIT_VIRTUALTABLE - if( pOp->opcode==OP_VOpen && pOp->p4.pVtab==pTab->pVtab ){ - assert( pOp->p4.pVtab!=0 ); - assert( pOp->p4type==P4_VTAB ); - return 1; - } + } while( dist!=2 || (token!=TK_WHEN && token!=TK_FOR && token!=TK_BEGIN) ); + + /* Variable tname now contains the token that is the old table-name + ** in the CREATE TRIGGER statement. + */ + zRet = sqlite3MPrintf(db, "%.*s\"%w\"%s", ((u8*)tname.z) - zSql, zSql, + zTableName, tname.z+tname.n); + sqlite3_result_text(context, zRet, -1, SQLITE_DYNAMIC); + } +} +#endif /* !SQLITE_OMIT_TRIGGER */ + +/* +** Register built-in functions used to help implement ALTER TABLE +*/ +SQLITE_PRIVATE void sqlite3AlterFunctions(void){ + static SQLITE_WSD FuncDef aAlterTableFuncs[] = { + FUNCTION(sqlite_rename_table, 2, 0, 0, renameTableFunc), +#ifndef SQLITE_OMIT_TRIGGER + FUNCTION(sqlite_rename_trigger, 2, 0, 0, renameTriggerFunc), +#endif +#ifndef SQLITE_OMIT_FOREIGN_KEY + FUNCTION(sqlite_rename_parent, 3, 0, 0, renameParentFunc), #endif + }; + int i; + FuncDefHash *pHash = &GLOBAL(FuncDefHash, sqlite3GlobalFunctions); + FuncDef *aFunc = (FuncDef*)&GLOBAL(FuncDef, aAlterTableFuncs); + + for(i=0; i OR name= OR ... ** -** (1) Register to hold the name of the pTab table. -** (2) Register to hold the maximum ROWID of pTab. -** (3) Register to hold the rowid in sqlite_sequence of pTab +** If argument zWhere is NULL, then a pointer string containing the text +** "name=" is returned, where is the quoted version +** of the string passed as argument zConstant. The returned buffer is +** allocated using sqlite3DbMalloc(). It is the responsibility of the +** caller to ensure that it is eventually freed. ** -** The 2nd register is the one that is returned. That is all the -** insert routine needs to know about. +** If argument zWhere is not NULL, then the string returned is +** " OR name=", where is the contents of zWhere. +** In this case zWhere is passed to sqlite3DbFree() before returning. +** */ -static int autoIncBegin( - Parse *pParse, /* Parsing context */ - int iDb, /* Index of the database holding pTab */ - Table *pTab /* The table we are writing to */ -){ - int memId = 0; /* Register holding maximum rowid */ - if( pTab->tabFlags & TF_Autoincrement ){ - AutoincInfo *pInfo; +static char *whereOrName(sqlite3 *db, char *zWhere, char *zConstant){ + char *zNew; + if( !zWhere ){ + zNew = sqlite3MPrintf(db, "name=%Q", zConstant); + }else{ + zNew = sqlite3MPrintf(db, "%s OR name=%Q", zWhere, zConstant); + sqlite3DbFree(db, zWhere); + } + return zNew; +} - pInfo = pParse->pAinc; - while( pInfo && pInfo->pTab!=pTab ){ pInfo = pInfo->pNext; } - if( pInfo==0 ){ - pInfo = sqlite3DbMallocRaw(pParse->db, sizeof(*pInfo)); - if( pInfo==0 ) return 0; - pInfo->pNext = pParse->pAinc; - pParse->pAinc = pInfo; - pInfo->pTab = pTab; - pInfo->iDb = iDb; - pParse->nMem++; /* Register to hold name of table */ - pInfo->regCtr = ++pParse->nMem; /* Max rowid register */ - pParse->nMem++; /* Rowid in sqlite_sequence */ +#if !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER) +/* +** Generate the text of a WHERE expression which can be used to select all +** tables that have foreign key constraints that refer to table pTab (i.e. +** constraints for which pTab is the parent table) from the sqlite_master +** table. +*/ +static char *whereForeignKeys(Parse *pParse, Table *pTab){ + FKey *p; + char *zWhere = 0; + for(p=sqlite3FkReferences(pTab); p; p=p->pNextTo){ + zWhere = whereOrName(pParse->db, zWhere, p->pFrom->zName); + } + return zWhere; +} +#endif + +/* +** Generate the text of a WHERE expression which can be used to select all +** temporary triggers on table pTab from the sqlite_temp_master table. If +** table pTab has no temporary triggers, or is itself stored in the +** temporary database, NULL is returned. +*/ +static char *whereTempTriggers(Parse *pParse, Table *pTab){ + Trigger *pTrig; + char *zWhere = 0; + const Schema *pTempSchema = pParse->db->aDb[1].pSchema; /* Temp db schema */ + + /* If the table is not located in the temp-db (in which case NULL is + ** returned, loop through the tables list of triggers. For each trigger + ** that is not part of the temp-db schema, add a clause to the WHERE + ** expression being built up in zWhere. + */ + if( pTab->pSchema!=pTempSchema ){ + sqlite3 *db = pParse->db; + for(pTrig=sqlite3TriggerList(pParse, pTab); pTrig; pTrig=pTrig->pNext){ + if( pTrig->pSchema==pTempSchema ){ + zWhere = whereOrName(db, zWhere, pTrig->zName); + } } - memId = pInfo->regCtr; } - return memId; + if( zWhere ){ + char *zNew = sqlite3MPrintf(pParse->db, "type='trigger' AND (%s)", zWhere); + sqlite3DbFree(pParse->db, zWhere); + zWhere = zNew; + } + return zWhere; } /* -** This routine generates code that will initialize all of the -** register used by the autoincrement tracker. +** Generate code to drop and reload the internal representation of table +** pTab from the database, including triggers and temporary triggers. +** Argument zName is the name of the table in the database schema at +** the time the generated code is executed. This can be different from +** pTab->zName if this function is being called to code part of an +** "ALTER TABLE RENAME TO" statement. */ -SQLITE_PRIVATE void sqlite3AutoincrementBegin(Parse *pParse){ - AutoincInfo *p; /* Information about an AUTOINCREMENT */ - sqlite3 *db = pParse->db; /* The database connection */ - Db *pDb; /* Database only autoinc table */ - int memId; /* Register holding max rowid */ - int addr; /* A VDBE address */ - Vdbe *v = pParse->pVdbe; /* VDBE under construction */ +static void reloadTableSchema(Parse *pParse, Table *pTab, const char *zName){ + Vdbe *v; + char *zWhere; + int iDb; /* Index of database containing pTab */ +#ifndef SQLITE_OMIT_TRIGGER + Trigger *pTrig; +#endif - assert( v ); /* We failed long ago if this is not so */ - for(p = pParse->pAinc; p; p = p->pNext){ - pDb = &db->aDb[p->iDb]; - memId = p->regCtr; - sqlite3OpenTable(pParse, 0, p->iDb, pDb->pSchema->pSeqTab, OP_OpenRead); - addr = sqlite3VdbeCurrentAddr(v); - sqlite3VdbeAddOp4(v, OP_String8, 0, memId-1, 0, p->pTab->zName, 0); - sqlite3VdbeAddOp2(v, OP_Rewind, 0, addr+9); - sqlite3VdbeAddOp3(v, OP_Column, 0, 0, memId); - sqlite3VdbeAddOp3(v, OP_Ne, memId-1, addr+7, memId); - sqlite3VdbeChangeP5(v, SQLITE_JUMPIFNULL); - sqlite3VdbeAddOp2(v, OP_Rowid, 0, memId+1); - sqlite3VdbeAddOp3(v, OP_Column, 0, 1, memId); - sqlite3VdbeAddOp2(v, OP_Goto, 0, addr+9); - sqlite3VdbeAddOp2(v, OP_Next, 0, addr+2); - sqlite3VdbeAddOp2(v, OP_Integer, 0, memId); - sqlite3VdbeAddOp0(v, OP_Close); + v = sqlite3GetVdbe(pParse); + if( NEVER(v==0) ) return; + assert( sqlite3BtreeHoldsAllMutexes(pParse->db) ); + iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema); + assert( iDb>=0 ); + +#ifndef SQLITE_OMIT_TRIGGER + /* Drop any table triggers from the internal schema. */ + for(pTrig=sqlite3TriggerList(pParse, pTab); pTrig; pTrig=pTrig->pNext){ + int iTrigDb = sqlite3SchemaToIndex(pParse->db, pTrig->pSchema); + assert( iTrigDb==iDb || iTrigDb==1 ); + sqlite3VdbeAddOp4(v, OP_DropTrigger, iTrigDb, 0, 0, pTrig->zName, 0); } +#endif + + /* Drop the table and index from the internal schema. */ + sqlite3VdbeAddOp4(v, OP_DropTable, iDb, 0, 0, pTab->zName, 0); + + /* Reload the table, index and permanent trigger schemas. */ + zWhere = sqlite3MPrintf(pParse->db, "tbl_name=%Q", zName); + if( !zWhere ) return; + sqlite3VdbeAddParseSchemaOp(v, iDb, zWhere); + +#ifndef SQLITE_OMIT_TRIGGER + /* Now, if the table is not stored in the temp database, reload any temp + ** triggers. Don't use IN(...) in case SQLITE_OMIT_SUBQUERY is defined. + */ + if( (zWhere=whereTempTriggers(pParse, pTab))!=0 ){ + sqlite3VdbeAddParseSchemaOp(v, 1, zWhere); + } +#endif } /* -** Update the maximum rowid for an autoincrement calculation. +** Parameter zName is the name of a table that is about to be altered +** (either with ALTER TABLE ... RENAME TO or ALTER TABLE ... ADD COLUMN). +** If the table is a system table, this function leaves an error message +** in pParse->zErr (system tables may not be altered) and returns non-zero. ** -** This routine should be called when the top of the stack holds a -** new rowid that is about to be inserted. If that new rowid is -** larger than the maximum rowid in the memId memory cell, then the -** memory cell is updated. The stack is unchanged. +** Or, if zName is not a system table, zero is returned. */ -static void autoIncStep(Parse *pParse, int memId, int regRowid){ - if( memId>0 ){ - sqlite3VdbeAddOp2(pParse->pVdbe, OP_MemMax, memId, regRowid); +static int isSystemTable(Parse *pParse, const char *zName){ + if( sqlite3Strlen30(zName)>6 && 0==sqlite3StrNICmp(zName, "sqlite_", 7) ){ + sqlite3ErrorMsg(pParse, "table %s may not be altered", zName); + return 1; } + return 0; } /* -** This routine generates the code needed to write autoincrement -** maximum rowid values back into the sqlite_sequence register. -** Every statement that might do an INSERT into an autoincrement -** table (either directly or through triggers) needs to call this -** routine just before the "exit" code. +** Generate code to implement the "ALTER TABLE xxx RENAME TO yyy" +** command. */ -SQLITE_PRIVATE void sqlite3AutoincrementEnd(Parse *pParse){ - AutoincInfo *p; - Vdbe *v = pParse->pVdbe; - sqlite3 *db = pParse->db; +SQLITE_PRIVATE void sqlite3AlterRenameTable( + Parse *pParse, /* Parser context. */ + SrcList *pSrc, /* The table to rename. */ + Token *pName /* The new table name. */ +){ + int iDb; /* Database that contains the table */ + char *zDb; /* Name of database iDb */ + Table *pTab; /* Table being renamed */ + char *zName = 0; /* NULL-terminated version of pName */ + sqlite3 *db = pParse->db; /* Database connection */ + int nTabName; /* Number of UTF-8 characters in zTabName */ + const char *zTabName; /* Original name of the table */ + Vdbe *v; +#ifndef SQLITE_OMIT_TRIGGER + char *zWhere = 0; /* Where clause to locate temp triggers */ +#endif + VTable *pVTab = 0; /* Non-zero if this is a v-tab with an xRename() */ + int savedDbFlags; /* Saved value of db->flags */ - assert( v ); - for(p = pParse->pAinc; p; p = p->pNext){ - Db *pDb = &db->aDb[p->iDb]; - int j1, j2, j3, j4, j5; - int iRec; - int memId = p->regCtr; + savedDbFlags = db->flags; + if( NEVER(db->mallocFailed) ) goto exit_rename_table; + assert( pSrc->nSrc==1 ); + assert( sqlite3BtreeHoldsAllMutexes(pParse->db) ); - iRec = sqlite3GetTempReg(pParse); - sqlite3OpenTable(pParse, 0, p->iDb, pDb->pSchema->pSeqTab, OP_OpenWrite); - j1 = sqlite3VdbeAddOp1(v, OP_NotNull, memId+1); - j2 = sqlite3VdbeAddOp0(v, OP_Rewind); - j3 = sqlite3VdbeAddOp3(v, OP_Column, 0, 0, iRec); - j4 = sqlite3VdbeAddOp3(v, OP_Eq, memId-1, 0, iRec); - sqlite3VdbeAddOp2(v, OP_Next, 0, j3); - sqlite3VdbeJumpHere(v, j2); - sqlite3VdbeAddOp2(v, OP_NewRowid, 0, memId+1); - j5 = sqlite3VdbeAddOp0(v, OP_Goto); - sqlite3VdbeJumpHere(v, j4); - sqlite3VdbeAddOp2(v, OP_Rowid, 0, memId+1); - sqlite3VdbeJumpHere(v, j1); - sqlite3VdbeJumpHere(v, j5); - sqlite3VdbeAddOp3(v, OP_MakeRecord, memId-1, 2, iRec); - sqlite3VdbeAddOp3(v, OP_Insert, 0, iRec, memId+1); - sqlite3VdbeChangeP5(v, OPFLAG_APPEND); - sqlite3VdbeAddOp0(v, OP_Close); - sqlite3ReleaseTempReg(pParse, iRec); + pTab = sqlite3LocateTable(pParse, 0, pSrc->a[0].zName, pSrc->a[0].zDatabase); + if( !pTab ) goto exit_rename_table; + iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema); + zDb = db->aDb[iDb].zName; + db->flags |= SQLITE_PreferBuiltin; + + /* Get a NULL terminated version of the new table name. */ + zName = sqlite3NameFromToken(db, pName); + if( !zName ) goto exit_rename_table; + + /* Check that a table or index named 'zName' does not already exist + ** in database iDb. If so, this is an error. + */ + if( sqlite3FindTable(db, zName, zDb) || sqlite3FindIndex(db, zName, zDb) ){ + sqlite3ErrorMsg(pParse, + "there is already another table or index with this name: %s", zName); + goto exit_rename_table; } -} -#else -/* -** If SQLITE_OMIT_AUTOINCREMENT is defined, then the three routines -** above are all no-ops -*/ -# define autoIncBegin(A,B,C) (0) -# define autoIncStep(A,B,C) -#endif /* SQLITE_OMIT_AUTOINCREMENT */ + /* Make sure it is not a system table being altered, or a reserved name + ** that the table is being renamed to. + */ + if( SQLITE_OK!=isSystemTable(pParse, pTab->zName) ){ + goto exit_rename_table; + } + if( SQLITE_OK!=sqlite3CheckObjectName(pParse, zName) ){ goto + exit_rename_table; + } -/* Forward declaration */ -static int xferOptimization( - Parse *pParse, /* Parser context */ - Table *pDest, /* The table we are inserting into */ - Select *pSelect, /* A SELECT statement to use as the data source */ - int onError, /* How to handle constraint errors */ - int iDbDest /* The database of pDest */ -); - -/* -** This routine is call to handle SQL of the following forms: -** -** insert into TABLE (IDLIST) values(EXPRLIST) -** insert into TABLE (IDLIST) select -** -** The IDLIST following the table name is always optional. If omitted, -** then a list of all columns for the table is substituted. The IDLIST -** appears in the pColumn parameter. pColumn is NULL if IDLIST is omitted. -** -** The pList parameter holds EXPRLIST in the first form of the INSERT -** statement above, and pSelect is NULL. For the second form, pList is -** NULL and pSelect is a pointer to the select statement used to generate -** data for the insert. -** -** The code generated follows one of four templates. For a simple -** select with data coming from a VALUES clause, the code executes -** once straight down through. Pseudo-code follows (we call this -** the "1st template"): -** -** open write cursor to
    and its indices -** puts VALUES clause expressions onto the stack -** write the resulting record into
    -** cleanup -** -** The three remaining templates assume the statement is of the form -** -** INSERT INTO
    SELECT ... -** -** If the SELECT clause is of the restricted form "SELECT * FROM " - -** in other words if the SELECT pulls all columns from a single table -** and there is no WHERE or LIMIT or GROUP BY or ORDER BY clauses, and -** if and are distinct tables but have identical -** schemas, including all the same indices, then a special optimization -** is invoked that copies raw records from over to . -** See the xferOptimization() function for the implementation of this -** template. This is the 2nd template. -** -** open a write cursor to
    -** open read cursor on -** transfer all records in over to
    -** close cursors -** foreach index on
    -** open a write cursor on the
    index -** open a read cursor on the corresponding index -** transfer all records from the read to the write cursors -** close cursors -** end foreach -** -** The 3rd template is for when the second template does not apply -** and the SELECT clause does not read from
    at any time. -** The generated code follows this template: -** -** EOF <- 0 -** X <- A -** goto B -** A: setup for the SELECT -** loop over the rows in the SELECT -** load values into registers R..R+n -** yield X -** end loop -** cleanup after the SELECT -** EOF <- 1 -** yield X -** goto A -** B: open write cursor to
    and its indices -** C: yield X -** if EOF goto D -** insert the select result into
    from R..R+n -** goto C -** D: cleanup -** -** The 4th template is used if the insert statement takes its -** values from a SELECT but the data is being inserted into a table -** that is also read as part of the SELECT. In the third form, -** we have to use a intermediate table to store the results of -** the select. The template is like this: -** -** EOF <- 0 -** X <- A -** goto B -** A: setup for the SELECT -** loop over the tables in the SELECT -** load value into register R..R+n -** yield X -** end loop -** cleanup after the SELECT -** EOF <- 1 -** yield X -** halt-error -** B: open temp table -** L: yield X -** if EOF goto M -** insert row from R..R+n into temp table -** goto L -** M: open write cursor to
    and its indices -** rewind temp table -** C: loop over rows of intermediate table -** transfer values form intermediate table into
    -** end loop -** D: cleanup -*/ -SQLITE_PRIVATE void sqlite3Insert( - Parse *pParse, /* Parser context */ - SrcList *pTabList, /* Name of table into which we are inserting */ - ExprList *pList, /* List of values to be inserted */ - Select *pSelect, /* A SELECT statement to use as the data source */ - IdList *pColumn, /* Column names corresponding to IDLIST. */ - int onError /* How to handle constraint errors */ -){ - sqlite3 *db; /* The main database structure */ - Table *pTab; /* The table to insert into. aka TABLE */ - char *zTab; /* Name of the table into which we are inserting */ - const char *zDb; /* Name of the database holding this table */ - int i, j, idx; /* Loop counters */ - Vdbe *v; /* Generate code into this virtual machine */ - Index *pIdx; /* For looping over indices of the table */ - int nColumn; /* Number of columns in the data */ - int nHidden = 0; /* Number of hidden columns if TABLE is virtual */ - int baseCur = 0; /* VDBE Cursor number for pTab */ - int keyColumn = -1; /* Column that is the INTEGER PRIMARY KEY */ - int endOfLoop; /* Label for the end of the insertion loop */ - int useTempTable = 0; /* Store SELECT results in intermediate table */ - int srcTab = 0; /* Data comes from this temporary cursor if >=0 */ - int addrInsTop = 0; /* Jump to label "D" */ - int addrCont = 0; /* Top of insert loop. Label "C" in templates 3 and 4 */ - int addrSelect = 0; /* Address of coroutine that implements the SELECT */ - SelectDest dest; /* Destination for SELECT on rhs of INSERT */ - int newIdx = -1; /* Cursor for the NEW pseudo-table */ - int iDb; /* Index of database holding TABLE */ - Db *pDb; /* The database containing table being inserted into */ - int appendFlag = 0; /* True if the insert is likely to be an append */ - - /* Register allocations */ - int regFromSelect = 0;/* Base register for data coming from SELECT */ - int regAutoinc = 0; /* Register holding the AUTOINCREMENT counter */ - int regRowCount = 0; /* Memory cell used for the row counter */ - int regIns; /* Block of regs holding rowid+data being inserted */ - int regRowid; /* registers holding insert rowid */ - int regData; /* register holding first column to insert */ - int regRecord; /* Holds the assemblied row record */ - int regEof = 0; /* Register recording end of SELECT data */ - int *aRegIdx = 0; /* One register allocated to each index */ +#ifndef SQLITE_OMIT_VIEW + if( pTab->pSelect ){ + sqlite3ErrorMsg(pParse, "view %s may not be altered", pTab->zName); + goto exit_rename_table; + } +#endif +#ifndef SQLITE_OMIT_AUTHORIZATION + /* Invoke the authorization callback. */ + if( sqlite3AuthCheck(pParse, SQLITE_ALTER_TABLE, zDb, pTab->zName, 0) ){ + goto exit_rename_table; + } +#endif -#ifndef SQLITE_OMIT_TRIGGER - int isView; /* True if attempting to insert into a view */ - Trigger *pTrigger; /* List of triggers on pTab, if required */ - int tmask; /* Mask of trigger times */ +#ifndef SQLITE_OMIT_VIRTUALTABLE + if( sqlite3ViewGetColumnNames(pParse, pTab) ){ + goto exit_rename_table; + } + if( IsVirtual(pTab) ){ + pVTab = sqlite3GetVTable(db, pTab); + if( pVTab->pVtab->pModule->xRename==0 ){ + pVTab = 0; + } + } #endif - db = pParse->db; - memset(&dest, 0, sizeof(dest)); - if( pParse->nErr || db->mallocFailed ){ - goto insert_cleanup; + /* Begin a transaction and code the VerifyCookie for database iDb. + ** Then modify the schema cookie (since the ALTER TABLE modifies the + ** schema). Open a statement transaction if the table is a virtual + ** table. + */ + v = sqlite3GetVdbe(pParse); + if( v==0 ){ + goto exit_rename_table; } + sqlite3BeginWriteOperation(pParse, pVTab!=0, iDb); + sqlite3ChangeCookie(pParse, iDb); - /* Locate the table into which we will be inserting new information. + /* If this is a virtual table, invoke the xRename() function if + ** one is defined. The xRename() callback will modify the names + ** of any resources used by the v-table implementation (including other + ** SQLite tables) that are identified by the name of the virtual table. */ - assert( pTabList->nSrc==1 ); - zTab = pTabList->a[0].zName; - if( NEVER(zTab==0) ) goto insert_cleanup; - pTab = sqlite3SrcListLookup(pParse, pTabList); - if( pTab==0 ){ - goto insert_cleanup; +#ifndef SQLITE_OMIT_VIRTUALTABLE + if( pVTab ){ + int i = ++pParse->nMem; + sqlite3VdbeAddOp4(v, OP_String8, 0, i, 0, zName, 0); + sqlite3VdbeAddOp4(v, OP_VRename, i, 0, 0,(const char*)pVTab, P4_VTAB); + sqlite3MayAbort(pParse); } - iDb = sqlite3SchemaToIndex(db, pTab->pSchema); - assert( iDbnDb ); - pDb = &db->aDb[iDb]; - zDb = pDb->zName; - if( sqlite3AuthCheck(pParse, SQLITE_INSERT, pTab->zName, 0, zDb) ){ - goto insert_cleanup; +#endif + + /* figure out how many UTF-8 characters are in zName */ + zTabName = pTab->zName; + nTabName = sqlite3Utf8CharLen(zTabName, -1); + +#if !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER) + if( db->flags&SQLITE_ForeignKeys ){ + /* If foreign-key support is enabled, rewrite the CREATE TABLE + ** statements corresponding to all child tables of foreign key constraints + ** for which the renamed table is the parent table. */ + if( (zWhere=whereForeignKeys(pParse, pTab))!=0 ){ + sqlite3NestedParse(pParse, + "UPDATE \"%w\".%s SET " + "sql = sqlite_rename_parent(sql, %Q, %Q) " + "WHERE %s;", zDb, SCHEMA_TABLE(iDb), zTabName, zName, zWhere); + sqlite3DbFree(db, zWhere); + } } +#endif - /* Figure out if we have any triggers and if the table being - ** inserted into is a view - */ -#ifndef SQLITE_OMIT_TRIGGER - pTrigger = sqlite3TriggersExist(pParse, pTab, TK_INSERT, 0, &tmask); - isView = pTab->pSelect!=0; + /* Modify the sqlite_master table to use the new table name. */ + sqlite3NestedParse(pParse, + "UPDATE %Q.%s SET " +#ifdef SQLITE_OMIT_TRIGGER + "sql = sqlite_rename_table(sql, %Q), " #else -# define pTrigger 0 -# define tmask 0 -# define isView 0 + "sql = CASE " + "WHEN type = 'trigger' THEN sqlite_rename_trigger(sql, %Q)" + "ELSE sqlite_rename_table(sql, %Q) END, " #endif -#ifdef SQLITE_OMIT_VIEW -# undef isView -# define isView 0 + "tbl_name = %Q, " + "name = CASE " + "WHEN type='table' THEN %Q " + "WHEN name LIKE 'sqlite_autoindex%%' AND type='index' THEN " + "'sqlite_autoindex_' || %Q || substr(name,%d+18) " + "ELSE name END " + "WHERE tbl_name=%Q COLLATE nocase AND " + "(type='table' OR type='index' OR type='trigger');", + zDb, SCHEMA_TABLE(iDb), zName, zName, zName, +#ifndef SQLITE_OMIT_TRIGGER + zName, #endif - assert( (pTrigger && tmask) || (pTrigger==0 && tmask==0) ); + zName, nTabName, zTabName + ); - /* Ensure that: - * (a) the table is not read-only, - * (b) that if it is a view then ON INSERT triggers exist +#ifndef SQLITE_OMIT_AUTOINCREMENT + /* If the sqlite_sequence table exists in this database, then update + ** it with the new table name. */ - if( sqlite3IsReadOnly(pParse, pTab, tmask) ){ - goto insert_cleanup; + if( sqlite3FindTable(db, "sqlite_sequence", zDb) ){ + sqlite3NestedParse(pParse, + "UPDATE \"%w\".sqlite_sequence set name = %Q WHERE name = %Q", + zDb, zName, pTab->zName); } - assert( pTab!=0 ); +#endif - /* If pTab is really a view, make sure it has been initialized. - ** ViewGetColumnNames() is a no-op if pTab is not a view (or virtual - ** module table). +#ifndef SQLITE_OMIT_TRIGGER + /* If there are TEMP triggers on this table, modify the sqlite_temp_master + ** table. Don't do this if the table being ALTERed is itself located in + ** the temp database. */ - if( sqlite3ViewGetColumnNames(pParse, pTab) ){ - goto insert_cleanup; + if( (zWhere=whereTempTriggers(pParse, pTab))!=0 ){ + sqlite3NestedParse(pParse, + "UPDATE sqlite_temp_master SET " + "sql = sqlite_rename_trigger(sql, %Q), " + "tbl_name = %Q " + "WHERE %s;", zName, zName, zWhere); + sqlite3DbFree(db, zWhere); } +#endif - /* Allocate a VDBE - */ - v = sqlite3GetVdbe(pParse); - if( v==0 ) goto insert_cleanup; - if( pParse->nested==0 ) sqlite3VdbeCountChanges(v); - sqlite3BeginWriteOperation(pParse, pSelect || pTrigger, iDb); - - /* if there are row triggers, allocate a temp table for new.* references. */ - if( pTrigger ){ - newIdx = pParse->nTab++; +#if !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER) + if( db->flags&SQLITE_ForeignKeys ){ + FKey *p; + for(p=sqlite3FkReferences(pTab); p; p=p->pNextTo){ + Table *pFrom = p->pFrom; + if( pFrom!=pTab ){ + reloadTableSchema(pParse, p->pFrom, pFrom->zName); + } + } } +#endif -#ifndef SQLITE_OMIT_XFER_OPT - /* If the statement is of the form - ** - ** INSERT INTO SELECT * FROM ; - ** - ** Then special optimizations can be applied that make the transfer - ** very fast and which reduce fragmentation of indices. - ** - ** This is the 2nd template. - */ - if( pColumn==0 && xferOptimization(pParse, pTab, pSelect, onError, iDb) ){ - assert( !pTrigger ); - assert( pList==0 ); - goto insert_end; - } -#endif /* SQLITE_OMIT_XFER_OPT */ + /* Drop and reload the internal table schema. */ + reloadTableSchema(pParse, pTab, zName); - /* If this is an AUTOINCREMENT table, look up the sequence number in the - ** sqlite_sequence table and store it in memory cell regAutoinc. - */ - regAutoinc = autoIncBegin(pParse, iDb, pTab); +exit_rename_table: + sqlite3SrcListDelete(db, pSrc); + sqlite3DbFree(db, zName); + db->flags = savedDbFlags; +} - /* Figure out how many columns of data are supplied. If the data - ** is coming from a SELECT statement, then generate a co-routine that - ** produces a single row of the SELECT on each invocation. The - ** co-routine is the common header to the 3rd and 4th templates. - */ - if( pSelect ){ - /* Data is coming from a SELECT. Generate code to implement that SELECT - ** as a co-routine. The code is common to both the 3rd and 4th - ** templates: - ** - ** EOF <- 0 - ** X <- A - ** goto B - ** A: setup for the SELECT - ** loop over the tables in the SELECT - ** load value into register R..R+n - ** yield X - ** end loop - ** cleanup after the SELECT - ** EOF <- 1 - ** yield X - ** halt-error - ** - ** On each invocation of the co-routine, it puts a single row of the - ** SELECT result into registers dest.iMem...dest.iMem+dest.nMem-1. - ** (These output registers are allocated by sqlite3Select().) When - ** the SELECT completes, it sets the EOF flag stored in regEof. - */ - int rc, j1; - regEof = ++pParse->nMem; - sqlite3VdbeAddOp2(v, OP_Integer, 0, regEof); /* EOF <- 0 */ - VdbeComment((v, "SELECT eof flag")); - sqlite3SelectDestInit(&dest, SRT_Coroutine, ++pParse->nMem); - addrSelect = sqlite3VdbeCurrentAddr(v)+2; - sqlite3VdbeAddOp2(v, OP_Integer, addrSelect-1, dest.iParm); - j1 = sqlite3VdbeAddOp2(v, OP_Goto, 0, 0); - VdbeComment((v, "Jump over SELECT coroutine")); +/* +** Generate code to make sure the file format number is at least minFormat. +** The generated code will increase the file format number if necessary. +*/ +SQLITE_PRIVATE void sqlite3MinimumFileFormat(Parse *pParse, int iDb, int minFormat){ + Vdbe *v; + v = sqlite3GetVdbe(pParse); + /* The VDBE should have been allocated before this routine is called. + ** If that allocation failed, we would have quit before reaching this + ** point */ + if( ALWAYS(v) ){ + int r1 = sqlite3GetTempReg(pParse); + int r2 = sqlite3GetTempReg(pParse); + int j1; + sqlite3VdbeAddOp3(v, OP_ReadCookie, iDb, r1, BTREE_FILE_FORMAT); + sqlite3VdbeUsesBtree(v, iDb); + sqlite3VdbeAddOp2(v, OP_Integer, minFormat, r2); + j1 = sqlite3VdbeAddOp3(v, OP_Ge, r2, 0, r1); + sqlite3VdbeAddOp3(v, OP_SetCookie, iDb, BTREE_FILE_FORMAT, r2); + sqlite3VdbeJumpHere(v, j1); + sqlite3ReleaseTempReg(pParse, r1); + sqlite3ReleaseTempReg(pParse, r2); + } +} - /* Resolve the expressions in the SELECT statement and execute it. */ - rc = sqlite3Select(pParse, pSelect, &dest); - assert( pParse->nErr==0 || rc ); - if( rc || NEVER(pParse->nErr) || db->mallocFailed ){ - goto insert_cleanup; - } - sqlite3VdbeAddOp2(v, OP_Integer, 1, regEof); /* EOF <- 1 */ - sqlite3VdbeAddOp1(v, OP_Yield, dest.iParm); /* yield X */ - sqlite3VdbeAddOp2(v, OP_Halt, SQLITE_INTERNAL, OE_Abort); - VdbeComment((v, "End of SELECT coroutine")); - sqlite3VdbeJumpHere(v, j1); /* label B: */ +/* +** This function is called after an "ALTER TABLE ... ADD" statement +** has been parsed. Argument pColDef contains the text of the new +** column definition. +** +** The Table structure pParse->pNewTable was extended to include +** the new column during parsing. +*/ +SQLITE_PRIVATE void sqlite3AlterFinishAddColumn(Parse *pParse, Token *pColDef){ + Table *pNew; /* Copy of pParse->pNewTable */ + Table *pTab; /* Table being altered */ + int iDb; /* Database number */ + const char *zDb; /* Database name */ + const char *zTab; /* Table name */ + char *zCol; /* Null-terminated column definition */ + Column *pCol; /* The new column */ + Expr *pDflt; /* Default value for the new column */ + sqlite3 *db; /* The database connection; */ - regFromSelect = dest.iMem; - assert( pSelect->pEList ); - nColumn = pSelect->pEList->nExpr; - assert( dest.nMem==nColumn ); + db = pParse->db; + if( pParse->nErr || db->mallocFailed ) return; + pNew = pParse->pNewTable; + assert( pNew ); - /* Set useTempTable to TRUE if the result of the SELECT statement - ** should be written into a temporary table (template 4). Set to - ** FALSE if each* row of the SELECT can be written directly into - ** the destination table (template 3). - ** - ** A temp table must be used if the table being updated is also one - ** of the tables being read by the SELECT statement. Also use a - ** temp table in the case of row triggers. - */ - if( pTrigger || readsTable(v, addrSelect, iDb, pTab) ){ - useTempTable = 1; - } + assert( sqlite3BtreeHoldsAllMutexes(db) ); + iDb = sqlite3SchemaToIndex(db, pNew->pSchema); + zDb = db->aDb[iDb].zName; + zTab = &pNew->zName[16]; /* Skip the "sqlite_altertab_" prefix on the name */ + pCol = &pNew->aCol[pNew->nCol-1]; + pDflt = pCol->pDflt; + pTab = sqlite3FindTable(db, zTab, zDb); + assert( pTab ); - if( useTempTable ){ - /* Invoke the coroutine to extract information from the SELECT - ** and add it to a transient table srcTab. The code generated - ** here is from the 4th template: - ** - ** B: open temp table - ** L: yield X - ** if EOF goto M - ** insert row from R..R+n into temp table - ** goto L - ** M: ... - */ - int regRec; /* Register to hold packed record */ - int regTempRowid; /* Register to hold temp table ROWID */ - int addrTop; /* Label "L" */ - int addrIf; /* Address of jump to M */ +#ifndef SQLITE_OMIT_AUTHORIZATION + /* Invoke the authorization callback. */ + if( sqlite3AuthCheck(pParse, SQLITE_ALTER_TABLE, zDb, pTab->zName, 0) ){ + return; + } +#endif - srcTab = pParse->nTab++; - regRec = sqlite3GetTempReg(pParse); - regTempRowid = sqlite3GetTempReg(pParse); - sqlite3VdbeAddOp2(v, OP_OpenEphemeral, srcTab, nColumn); - addrTop = sqlite3VdbeAddOp1(v, OP_Yield, dest.iParm); - addrIf = sqlite3VdbeAddOp1(v, OP_If, regEof); - sqlite3VdbeAddOp3(v, OP_MakeRecord, regFromSelect, nColumn, regRec); - sqlite3VdbeAddOp2(v, OP_NewRowid, srcTab, regTempRowid); - sqlite3VdbeAddOp3(v, OP_Insert, srcTab, regRec, regTempRowid); - sqlite3VdbeAddOp2(v, OP_Goto, 0, addrTop); - sqlite3VdbeJumpHere(v, addrIf); - sqlite3ReleaseTempReg(pParse, regRec); - sqlite3ReleaseTempReg(pParse, regTempRowid); - } - }else{ - /* This is the case if the data for the INSERT is coming from a VALUES - ** clause - */ - NameContext sNC; - memset(&sNC, 0, sizeof(sNC)); - sNC.pParse = pParse; - srcTab = -1; - assert( useTempTable==0 ); - nColumn = pList ? pList->nExpr : 0; - for(i=0; ia[i].pExpr) ){ - goto insert_cleanup; - } - } + /* If the default value for the new column was specified with a + ** literal NULL, then set pDflt to 0. This simplifies checking + ** for an SQL NULL default below. + */ + if( pDflt && pDflt->op==TK_NULL ){ + pDflt = 0; } - /* Make sure the number of columns in the source data matches the number - ** of columns to be inserted into the table. + /* Check that the new column is not specified as PRIMARY KEY or UNIQUE. + ** If there is a NOT NULL constraint, then the default value for the + ** column must not be NULL. */ - if( IsVirtual(pTab) ){ - for(i=0; inCol; i++){ - nHidden += (IsHiddenColumn(&pTab->aCol[i]) ? 1 : 0); - } + if( pCol->isPrimKey ){ + sqlite3ErrorMsg(pParse, "Cannot add a PRIMARY KEY column"); + return; } - if( pColumn==0 && nColumn && nColumn!=(pTab->nCol-nHidden) ){ + if( pNew->pIndex ){ + sqlite3ErrorMsg(pParse, "Cannot add a UNIQUE column"); + return; + } + if( (db->flags&SQLITE_ForeignKeys) && pNew->pFKey && pDflt ){ sqlite3ErrorMsg(pParse, - "table %S has %d columns but %d values were supplied", - pTabList, 0, pTab->nCol-nHidden, nColumn); - goto insert_cleanup; + "Cannot add a REFERENCES column with non-NULL default value"); + return; } - if( pColumn!=0 && nColumn!=pColumn->nId ){ - sqlite3ErrorMsg(pParse, "%d values for %d columns", nColumn, pColumn->nId); - goto insert_cleanup; + if( pCol->notNull && !pDflt ){ + sqlite3ErrorMsg(pParse, + "Cannot add a NOT NULL column with default value NULL"); + return; } - /* If the INSERT statement included an IDLIST term, then make sure - ** all elements of the IDLIST really are columns of the table and - ** remember the column indices. - ** - ** If the table has an INTEGER PRIMARY KEY column and that column - ** is named in the IDLIST, then record in the keyColumn variable - ** the index into IDLIST of the primary key column. keyColumn is - ** the index of the primary key as it appears in IDLIST, not as - ** is appears in the original table. (The index of the primary - ** key in the original table is pTab->iPKey.) + /* Ensure the default expression is something that sqlite3ValueFromExpr() + ** can handle (i.e. not CURRENT_TIME etc.) */ - if( pColumn ){ - for(i=0; inId; i++){ - pColumn->a[i].idx = -1; + if( pDflt ){ + sqlite3_value *pVal; + if( sqlite3ValueFromExpr(db, pDflt, SQLITE_UTF8, SQLITE_AFF_NONE, &pVal) ){ + db->mallocFailed = 1; + return; } - for(i=0; inId; i++){ - for(j=0; jnCol; j++){ - if( sqlite3StrICmp(pColumn->a[i].zName, pTab->aCol[j].zName)==0 ){ - pColumn->a[i].idx = j; - if( j==pTab->iPKey ){ - keyColumn = i; - } - break; - } - } - if( j>=pTab->nCol ){ - if( sqlite3IsRowid(pColumn->a[i].zName) ){ - keyColumn = i; - }else{ - sqlite3ErrorMsg(pParse, "table %S has no column named %s", - pTabList, 0, pColumn->a[i].zName); - pParse->nErr++; - goto insert_cleanup; - } - } + if( !pVal ){ + sqlite3ErrorMsg(pParse, "Cannot add a column with non-constant default"); + return; } + sqlite3ValueFree(pVal); } - /* If there is no IDLIST term but the table has an integer primary - ** key, the set the keyColumn variable to the primary key column index - ** in the original table definition. - */ - if( pColumn==0 && nColumn>0 ){ - keyColumn = pTab->iPKey; + /* Modify the CREATE TABLE statement. */ + zCol = sqlite3DbStrNDup(db, (char*)pColDef->z, pColDef->n); + if( zCol ){ + char *zEnd = &zCol[pColDef->n-1]; + int savedDbFlags = db->flags; + while( zEnd>zCol && (*zEnd==';' || sqlite3Isspace(*zEnd)) ){ + *zEnd-- = '\0'; + } + db->flags |= SQLITE_PreferBuiltin; + sqlite3NestedParse(pParse, + "UPDATE \"%w\".%s SET " + "sql = substr(sql,1,%d) || ', ' || %Q || substr(sql,%d) " + "WHERE type = 'table' AND name = %Q", + zDb, SCHEMA_TABLE(iDb), pNew->addColOffset, zCol, pNew->addColOffset+1, + zTab + ); + sqlite3DbFree(db, zCol); + db->flags = savedDbFlags; } - /* Open the temp table for FOR EACH ROW triggers - */ - if( pTrigger ){ - sqlite3VdbeAddOp3(v, OP_OpenPseudo, newIdx, 0, pTab->nCol); - } - - /* Initialize the count of rows to be inserted + /* If the default value of the new column is NULL, then set the file + ** format to 2. If the default value of the new column is not NULL, + ** the file format becomes 3. */ - if( db->flags & SQLITE_CountRows ){ - regRowCount = ++pParse->nMem; - sqlite3VdbeAddOp2(v, OP_Integer, 0, regRowCount); - } + sqlite3MinimumFileFormat(pParse, iDb, pDflt ? 3 : 2); - /* If this is not a view, open the table and and all indices */ - if( !isView ){ - int nIdx; + /* Reload the schema of the modified table. */ + reloadTableSchema(pParse, pTab, pTab->zName); +} - baseCur = pParse->nTab; - nIdx = sqlite3OpenTableAndIndices(pParse, pTab, baseCur, OP_OpenWrite); - aRegIdx = sqlite3DbMallocRaw(db, sizeof(int)*(nIdx+1)); - if( aRegIdx==0 ){ - goto insert_cleanup; - } - for(i=0; inMem; - } +/* +** This function is called by the parser after the table-name in +** an "ALTER TABLE ADD" statement is parsed. Argument +** pSrc is the full-name of the table being altered. +** +** This routine makes a (partial) copy of the Table structure +** for the table being altered and sets Parse.pNewTable to point +** to it. Routines called by the parser as the column definition +** is parsed (i.e. sqlite3AddColumn()) add the new Column data to +** the copy. The copy of the Table structure is deleted by tokenize.c +** after parsing is finished. +** +** Routine sqlite3AlterFinishAddColumn() will be called to complete +** coding the "ALTER TABLE ... ADD" statement. +*/ +SQLITE_PRIVATE void sqlite3AlterBeginAddColumn(Parse *pParse, SrcList *pSrc){ + Table *pNew; + Table *pTab; + Vdbe *v; + int iDb; + int i; + int nAlloc; + sqlite3 *db = pParse->db; + + /* Look up the table being altered. */ + assert( pParse->pNewTable==0 ); + assert( sqlite3BtreeHoldsAllMutexes(db) ); + if( db->mallocFailed ) goto exit_begin_add_column; + pTab = sqlite3LocateTable(pParse, 0, pSrc->a[0].zName, pSrc->a[0].zDatabase); + if( !pTab ) goto exit_begin_add_column; + +#ifndef SQLITE_OMIT_VIRTUALTABLE + if( IsVirtual(pTab) ){ + sqlite3ErrorMsg(pParse, "virtual tables may not be altered"); + goto exit_begin_add_column; } +#endif - /* This is the top of the main insertion loop */ - if( useTempTable ){ - /* This block codes the top of loop only. The complete loop is the - ** following pseudocode (template 4): - ** - ** rewind temp table - ** C: loop over rows of intermediate table - ** transfer values form intermediate table into
    - ** end loop - ** D: ... - */ - addrInsTop = sqlite3VdbeAddOp1(v, OP_Rewind, srcTab); - addrCont = sqlite3VdbeCurrentAddr(v); - }else if( pSelect ){ - /* This block codes the top of loop only. The complete loop is the - ** following pseudocode (template 3): - ** - ** C: yield X - ** if EOF goto D - ** insert the select result into
    from R..R+n - ** goto C - ** D: ... - */ - addrCont = sqlite3VdbeAddOp1(v, OP_Yield, dest.iParm); - addrInsTop = sqlite3VdbeAddOp1(v, OP_If, regEof); + /* Make sure this is not an attempt to ALTER a view. */ + if( pTab->pSelect ){ + sqlite3ErrorMsg(pParse, "Cannot add a column to a view"); + goto exit_begin_add_column; + } + if( SQLITE_OK!=isSystemTable(pParse, pTab->zName) ){ + goto exit_begin_add_column; } - /* Allocate registers for holding the rowid of the new row, - ** the content of the new row, and the assemblied row record. + assert( pTab->addColOffset>0 ); + iDb = sqlite3SchemaToIndex(db, pTab->pSchema); + + /* Put a copy of the Table struct in Parse.pNewTable for the + ** sqlite3AddColumn() function and friends to modify. But modify + ** the name by adding an "sqlite_altertab_" prefix. By adding this + ** prefix, we insure that the name will not collide with an existing + ** table because user table are not allowed to have the "sqlite_" + ** prefix on their name. */ - regRecord = ++pParse->nMem; - regRowid = regIns = pParse->nMem+1; - pParse->nMem += pTab->nCol + 1; - if( IsVirtual(pTab) ){ - regRowid++; - pParse->nMem++; + pNew = (Table*)sqlite3DbMallocZero(db, sizeof(Table)); + if( !pNew ) goto exit_begin_add_column; + pParse->pNewTable = pNew; + pNew->nRef = 1; + pNew->nCol = pTab->nCol; + assert( pNew->nCol>0 ); + nAlloc = (((pNew->nCol-1)/8)*8)+8; + assert( nAlloc>=pNew->nCol && nAlloc%8==0 && nAlloc-pNew->nCol<8 ); + pNew->aCol = (Column*)sqlite3DbMallocZero(db, sizeof(Column)*nAlloc); + pNew->zName = sqlite3MPrintf(db, "sqlite_altertab_%s", pTab->zName); + if( !pNew->aCol || !pNew->zName ){ + db->mallocFailed = 1; + goto exit_begin_add_column; } - regData = regRowid+1; + memcpy(pNew->aCol, pTab->aCol, sizeof(Column)*pNew->nCol); + for(i=0; inCol; i++){ + Column *pCol = &pNew->aCol[i]; + pCol->zName = sqlite3DbStrDup(db, pCol->zName); + pCol->zColl = 0; + pCol->zType = 0; + pCol->pDflt = 0; + pCol->zDflt = 0; + } + pNew->pSchema = db->aDb[iDb].pSchema; + pNew->addColOffset = pTab->addColOffset; + pNew->nRef = 1; - /* Run the BEFORE and INSTEAD OF triggers, if there are any - */ - endOfLoop = sqlite3VdbeMakeLabel(v); - if( tmask & TRIGGER_BEFORE ){ - int regTrigRowid; - int regCols; - int regRec; + /* Begin a transaction and increment the schema cookie. */ + sqlite3BeginWriteOperation(pParse, 0, iDb); + v = sqlite3GetVdbe(pParse); + if( !v ) goto exit_begin_add_column; + sqlite3ChangeCookie(pParse, iDb); - /* build the NEW.* reference row. Note that if there is an INTEGER - ** PRIMARY KEY into which a NULL is being inserted, that NULL will be - ** translated into a unique ID for the row. But on a BEFORE trigger, - ** we do not know what the unique ID will be (because the insert has - ** not happened yet) so we substitute a rowid of -1 - */ - regTrigRowid = sqlite3GetTempReg(pParse); - if( keyColumn<0 ){ - sqlite3VdbeAddOp2(v, OP_Integer, -1, regTrigRowid); +exit_begin_add_column: + sqlite3SrcListDelete(db, pSrc); + return; +} +#endif /* SQLITE_ALTER_TABLE */ + +/************** End of alter.c ***********************************************/ +/************** Begin file analyze.c *****************************************/ +/* +** 2005 July 8 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** This file contains code associated with the ANALYZE command. +** +** The ANALYZE command gather statistics about the content of tables +** and indices. These statistics are made available to the query planner +** to help it make better decisions about how to perform queries. +** +** The following system tables are or have been supported: +** +** CREATE TABLE sqlite_stat1(tbl, idx, stat); +** CREATE TABLE sqlite_stat2(tbl, idx, sampleno, sample); +** CREATE TABLE sqlite_stat3(tbl, idx, nEq, nLt, nDLt, sample); +** +** Additional tables might be added in future releases of SQLite. +** The sqlite_stat2 table is not created or used unless the SQLite version +** is between 3.6.18 and 3.7.8, inclusive, and unless SQLite is compiled +** with SQLITE_ENABLE_STAT2. The sqlite_stat2 table is deprecated. +** The sqlite_stat2 table is superceded by sqlite_stat3, which is only +** created and used by SQLite versions 3.7.9 and later and with +** SQLITE_ENABLE_STAT3 defined. The fucntionality of sqlite_stat3 +** is a superset of sqlite_stat2. +** +** Format of sqlite_stat1: +** +** There is normally one row per index, with the index identified by the +** name in the idx column. The tbl column is the name of the table to +** which the index belongs. In each such row, the stat column will be +** a string consisting of a list of integers. The first integer in this +** list is the number of rows in the index and in the table. The second +** integer is the average number of rows in the index that have the same +** value in the first column of the index. The third integer is the average +** number of rows in the index that have the same value for the first two +** columns. The N-th integer (for N>1) is the average number of rows in +** the index which have the same value for the first N-1 columns. For +** a K-column index, there will be K+1 integers in the stat column. If +** the index is unique, then the last integer will be 1. +** +** The list of integers in the stat column can optionally be followed +** by the keyword "unordered". The "unordered" keyword, if it is present, +** must be separated from the last integer by a single space. If the +** "unordered" keyword is present, then the query planner assumes that +** the index is unordered and will not use the index for a range query. +** +** If the sqlite_stat1.idx column is NULL, then the sqlite_stat1.stat +** column contains a single integer which is the (estimated) number of +** rows in the table identified by sqlite_stat1.tbl. +** +** Format of sqlite_stat2: +** +** The sqlite_stat2 is only created and is only used if SQLite is compiled +** with SQLITE_ENABLE_STAT2 and if the SQLite version number is between +** 3.6.18 and 3.7.8. The "stat2" table contains additional information +** about the distribution of keys within an index. The index is identified by +** the "idx" column and the "tbl" column is the name of the table to which +** the index belongs. There are usually 10 rows in the sqlite_stat2 +** table for each index. +** +** The sqlite_stat2 entries for an index that have sampleno between 0 and 9 +** inclusive are samples of the left-most key value in the index taken at +** evenly spaced points along the index. Let the number of samples be S +** (10 in the standard build) and let C be the number of rows in the index. +** Then the sampled rows are given by: +** +** rownumber = (i*C*2 + C)/(S*2) +** +** For i between 0 and S-1. Conceptually, the index space is divided into +** S uniform buckets and the samples are the middle row from each bucket. +** +** The format for sqlite_stat2 is recorded here for legacy reference. This +** version of SQLite does not support sqlite_stat2. It neither reads nor +** writes the sqlite_stat2 table. This version of SQLite only supports +** sqlite_stat3. +** +** Format for sqlite_stat3: +** +** The sqlite_stat3 is an enhancement to sqlite_stat2. A new name is +** used to avoid compatibility problems. +** +** The format of the sqlite_stat3 table is similar to the format of +** the sqlite_stat2 table. There are multiple entries for each index. +** The idx column names the index and the tbl column is the table of the +** index. If the idx and tbl columns are the same, then the sample is +** of the INTEGER PRIMARY KEY. The sample column is a value taken from +** the left-most column of the index. The nEq column is the approximate +** number of entires in the index whose left-most column exactly matches +** the sample. nLt is the approximate number of entires whose left-most +** column is less than the sample. The nDLt column is the approximate +** number of distinct left-most entries in the index that are less than +** the sample. +** +** Future versions of SQLite might change to store a string containing +** multiple integers values in the nDLt column of sqlite_stat3. The first +** integer will be the number of prior index entires that are distinct in +** the left-most column. The second integer will be the number of prior index +** entries that are distinct in the first two columns. The third integer +** will be the number of prior index entries that are distinct in the first +** three columns. And so forth. With that extension, the nDLt field is +** similar in function to the sqlite_stat1.stat field. +** +** There can be an arbitrary number of sqlite_stat3 entries per index. +** The ANALYZE command will typically generate sqlite_stat3 tables +** that contain between 10 and 40 samples which are distributed across +** the key space, though not uniformly, and which include samples with +** largest possible nEq values. +*/ +#ifndef SQLITE_OMIT_ANALYZE + +/* +** This routine generates code that opens the sqlite_stat1 table for +** writing with cursor iStatCur. If the library was built with the +** SQLITE_ENABLE_STAT3 macro defined, then the sqlite_stat3 table is +** opened for writing using cursor (iStatCur+1) +** +** If the sqlite_stat1 tables does not previously exist, it is created. +** Similarly, if the sqlite_stat3 table does not exist and the library +** is compiled with SQLITE_ENABLE_STAT3 defined, it is created. +** +** Argument zWhere may be a pointer to a buffer containing a table name, +** or it may be a NULL pointer. If it is not NULL, then all entries in +** the sqlite_stat1 and (if applicable) sqlite_stat3 tables associated +** with the named table are deleted. If zWhere==0, then code is generated +** to delete all stat table entries. +*/ +static void openStatTable( + Parse *pParse, /* Parsing context */ + int iDb, /* The database we are looking in */ + int iStatCur, /* Open the sqlite_stat1 table on this cursor */ + const char *zWhere, /* Delete entries for this table or index */ + const char *zWhereType /* Either "tbl" or "idx" */ +){ + static const struct { + const char *zName; + const char *zCols; + } aTable[] = { + { "sqlite_stat1", "tbl,idx,stat" }, +#ifdef SQLITE_ENABLE_STAT3 + { "sqlite_stat3", "tbl,idx,neq,nlt,ndlt,sample" }, +#endif + }; + + int aRoot[] = {0, 0}; + u8 aCreateTbl[] = {0, 0}; + + int i; + sqlite3 *db = pParse->db; + Db *pDb; + Vdbe *v = sqlite3GetVdbe(pParse); + if( v==0 ) return; + assert( sqlite3BtreeHoldsAllMutexes(db) ); + assert( sqlite3VdbeDb(v)==db ); + pDb = &db->aDb[iDb]; + + /* Create new statistic tables if they do not exist, or clear them + ** if they do already exist. + */ + for(i=0; izName))==0 ){ + /* The sqlite_stat[12] table does not exist. Create it. Note that a + ** side-effect of the CREATE TABLE statement is to leave the rootpage + ** of the new table in register pParse->regRoot. This is important + ** because the OpenWrite opcode below will be needing it. */ + sqlite3NestedParse(pParse, + "CREATE TABLE %Q.%s(%s)", pDb->zName, zTab, aTable[i].zCols + ); + aRoot[i] = pParse->regRoot; + aCreateTbl[i] = 1; }else{ - int j1; - if( useTempTable ){ - sqlite3VdbeAddOp3(v, OP_Column, srcTab, keyColumn, regTrigRowid); + /* The table already exists. If zWhere is not NULL, delete all entries + ** associated with the table zWhere. If zWhere is NULL, delete the + ** entire contents of the table. */ + aRoot[i] = pStat->tnum; + sqlite3TableLock(pParse, iDb, aRoot[i], 1, zTab); + if( zWhere ){ + sqlite3NestedParse(pParse, + "DELETE FROM %Q.%s WHERE %s=%Q", pDb->zName, zTab, zWhereType, zWhere + ); }else{ - assert( pSelect==0 ); /* Otherwise useTempTable is true */ - sqlite3ExprCode(pParse, pList->a[keyColumn].pExpr, regTrigRowid); + /* The sqlite_stat[12] table already exists. Delete all rows. */ + sqlite3VdbeAddOp2(v, OP_Clear, aRoot[i], iDb); } - j1 = sqlite3VdbeAddOp1(v, OP_NotNull, regTrigRowid); - sqlite3VdbeAddOp2(v, OP_Integer, -1, regTrigRowid); - sqlite3VdbeJumpHere(v, j1); - sqlite3VdbeAddOp1(v, OP_MustBeInt, regTrigRowid); } + } - /* Cannot have triggers on a virtual table. If it were possible, - ** this block would have to account for hidden column. - */ - assert(!IsVirtual(pTab)); + /* Open the sqlite_stat[13] tables for writing. */ + for(i=0; inCol); - for(i=0; inCol; i++){ - if( pColumn==0 ){ - j = i; - }else{ - for(j=0; jnId; j++){ - if( pColumn->a[j].idx==i ) break; - } - } - if( pColumn && j>=pColumn->nId ){ - sqlite3ExprCode(pParse, pTab->aCol[i].pDflt, regCols+i); - }else if( useTempTable ){ - sqlite3VdbeAddOp3(v, OP_Column, srcTab, j, regCols+i); - }else{ - assert( pSelect==0 ); /* Otherwise useTempTable is true */ - sqlite3ExprCodeAndCache(pParse, pList->a[j].pExpr, regCols+i); - } - } - regRec = sqlite3GetTempReg(pParse); - sqlite3VdbeAddOp3(v, OP_MakeRecord, regCols, pTab->nCol, regRec); +/* +** Recommended number of samples for sqlite_stat3 +*/ +#ifndef SQLITE_STAT3_SAMPLES +# define SQLITE_STAT3_SAMPLES 24 +#endif - /* If this is an INSERT on a view with an INSTEAD OF INSERT trigger, - ** do not attempt any conversions before assembling the record. - ** If this is a real table, attempt conversions as required by the - ** table column affinities. - */ - if( !isView ){ - sqlite3TableAffinityStr(v, pTab); - } - sqlite3VdbeAddOp3(v, OP_Insert, newIdx, regRec, regTrigRowid); - sqlite3ReleaseTempReg(pParse, regRec); - sqlite3ReleaseTempReg(pParse, regTrigRowid); - sqlite3ReleaseTempRange(pParse, regCols, pTab->nCol); +/* +** Three SQL functions - stat3_init(), stat3_push(), and stat3_pop() - +** share an instance of the following structure to hold their state +** information. +*/ +typedef struct Stat3Accum Stat3Accum; +struct Stat3Accum { + tRowcnt nRow; /* Number of rows in the entire table */ + tRowcnt nPSample; /* How often to do a periodic sample */ + int iMin; /* Index of entry with minimum nEq and hash */ + int mxSample; /* Maximum number of samples to accumulate */ + int nSample; /* Current number of samples */ + u32 iPrn; /* Pseudo-random number used for sampling */ + struct Stat3Sample { + i64 iRowid; /* Rowid in main table of the key */ + tRowcnt nEq; /* sqlite_stat3.nEq */ + tRowcnt nLt; /* sqlite_stat3.nLt */ + tRowcnt nDLt; /* sqlite_stat3.nDLt */ + u8 isPSample; /* True if a periodic sample */ + u32 iHash; /* Tiebreaker hash */ + } *a; /* An array of samples */ +}; - /* Fire BEFORE or INSTEAD OF triggers */ - if( sqlite3CodeRowTrigger(pParse, pTrigger, TK_INSERT, 0, TRIGGER_BEFORE, - pTab, newIdx, -1, onError, endOfLoop, 0, 0) ){ - goto insert_cleanup; - } +#ifdef SQLITE_ENABLE_STAT3 +/* +** Implementation of the stat3_init(C,S) SQL function. The two parameters +** are the number of rows in the table or index (C) and the number of samples +** to accumulate (S). +** +** This routine allocates the Stat3Accum object. +** +** The return value is the Stat3Accum object (P). +*/ +static void stat3Init( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + Stat3Accum *p; + tRowcnt nRow; + int mxSample; + int n; + + UNUSED_PARAMETER(argc); + nRow = (tRowcnt)sqlite3_value_int64(argv[0]); + mxSample = sqlite3_value_int(argv[1]); + n = sizeof(*p) + sizeof(p->a[0])*mxSample; + p = sqlite3_malloc( n ); + if( p==0 ){ + sqlite3_result_error_nomem(context); + return; } + memset(p, 0, n); + p->a = (struct Stat3Sample*)&p[1]; + p->nRow = nRow; + p->mxSample = mxSample; + p->nPSample = p->nRow/(mxSample/3+1) + 1; + sqlite3_randomness(sizeof(p->iPrn), &p->iPrn); + sqlite3_result_blob(context, p, sizeof(p), sqlite3_free); +} +static const FuncDef stat3InitFuncdef = { + 2, /* nArg */ + SQLITE_UTF8, /* iPrefEnc */ + 0, /* flags */ + 0, /* pUserData */ + 0, /* pNext */ + stat3Init, /* xFunc */ + 0, /* xStep */ + 0, /* xFinalize */ + "stat3_init", /* zName */ + 0, /* pHash */ + 0 /* pDestructor */ +}; - /* Push the record number for the new entry onto the stack. The - ** record number is a randomly generate integer created by NewRowid - ** except when the table has an INTEGER PRIMARY KEY column, in which - ** case the record number is the same as that column. - */ - if( !isView ){ - if( IsVirtual(pTab) ){ - /* The row that the VUpdate opcode will delete: none */ - sqlite3VdbeAddOp2(v, OP_Null, 0, regIns); + +/* +** Implementation of the stat3_push(nEq,nLt,nDLt,rowid,P) SQL function. The +** arguments describe a single key instance. This routine makes the +** decision about whether or not to retain this key for the sqlite_stat3 +** table. +** +** The return value is NULL. +*/ +static void stat3Push( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + Stat3Accum *p = (Stat3Accum*)sqlite3_value_blob(argv[4]); + tRowcnt nEq = sqlite3_value_int64(argv[0]); + tRowcnt nLt = sqlite3_value_int64(argv[1]); + tRowcnt nDLt = sqlite3_value_int64(argv[2]); + i64 rowid = sqlite3_value_int64(argv[3]); + u8 isPSample = 0; + u8 doInsert = 0; + int iMin = p->iMin; + struct Stat3Sample *pSample; + int i; + u32 h; + + UNUSED_PARAMETER(context); + UNUSED_PARAMETER(argc); + if( nEq==0 ) return; + h = p->iPrn = p->iPrn*1103515245 + 12345; + if( (nLt/p->nPSample)!=((nEq+nLt)/p->nPSample) ){ + doInsert = isPSample = 1; + }else if( p->nSamplemxSample ){ + doInsert = 1; + }else{ + if( nEq>p->a[iMin].nEq || (nEq==p->a[iMin].nEq && h>p->a[iMin].iHash) ){ + doInsert = 1; } - if( keyColumn>=0 ){ - if( useTempTable ){ - sqlite3VdbeAddOp3(v, OP_Column, srcTab, keyColumn, regRowid); - }else if( pSelect ){ - sqlite3VdbeAddOp2(v, OP_SCopy, regFromSelect+keyColumn, regRowid); - }else{ - VdbeOp *pOp; - sqlite3ExprCode(pParse, pList->a[keyColumn].pExpr, regRowid); - pOp = sqlite3VdbeGetOp(v, -1); - if( ALWAYS(pOp) && pOp->opcode==OP_Null && !IsVirtual(pTab) ){ - appendFlag = 1; - pOp->opcode = OP_NewRowid; - pOp->p1 = baseCur; - pOp->p2 = regRowid; - pOp->p3 = regAutoinc; - } - } - /* If the PRIMARY KEY expression is NULL, then use OP_NewRowid - ** to generate a unique primary key value. - */ - if( !appendFlag ){ - int j1; - if( !IsVirtual(pTab) ){ - j1 = sqlite3VdbeAddOp1(v, OP_NotNull, regRowid); - sqlite3VdbeAddOp3(v, OP_NewRowid, baseCur, regRowid, regAutoinc); - sqlite3VdbeJumpHere(v, j1); - }else{ - j1 = sqlite3VdbeCurrentAddr(v); - sqlite3VdbeAddOp2(v, OP_IsNull, regRowid, j1+2); - } - sqlite3VdbeAddOp1(v, OP_MustBeInt, regRowid); - } - }else if( IsVirtual(pTab) ){ - sqlite3VdbeAddOp2(v, OP_Null, 0, regRowid); - }else{ - sqlite3VdbeAddOp3(v, OP_NewRowid, baseCur, regRowid, regAutoinc); - appendFlag = 1; + } + if( !doInsert ) return; + if( p->nSample==p->mxSample ){ + assert( p->nSample - iMin - 1 >= 0 ); + memmove(&p->a[iMin], &p->a[iMin+1], sizeof(p->a[0])*(p->nSample-iMin-1)); + pSample = &p->a[p->nSample-1]; + }else{ + pSample = &p->a[p->nSample++]; + } + pSample->iRowid = rowid; + pSample->nEq = nEq; + pSample->nLt = nLt; + pSample->nDLt = nDLt; + pSample->iHash = h; + pSample->isPSample = isPSample; + + /* Find the new minimum */ + if( p->nSample==p->mxSample ){ + pSample = p->a; + i = 0; + while( pSample->isPSample ){ + i++; + pSample++; + assert( inSample ); + } + nEq = pSample->nEq; + h = pSample->iHash; + iMin = i; + for(i++, pSample++; inSample; i++, pSample++){ + if( pSample->isPSample ) continue; + if( pSample->nEqnEq==nEq && pSample->iHashnEq; + h = pSample->iHash; + } + } + p->iMin = iMin; + } +} +static const FuncDef stat3PushFuncdef = { + 5, /* nArg */ + SQLITE_UTF8, /* iPrefEnc */ + 0, /* flags */ + 0, /* pUserData */ + 0, /* pNext */ + stat3Push, /* xFunc */ + 0, /* xStep */ + 0, /* xFinalize */ + "stat3_push", /* zName */ + 0, /* pHash */ + 0 /* pDestructor */ +}; + +/* +** Implementation of the stat3_get(P,N,...) SQL function. This routine is +** used to query the results. Content is returned for the Nth sqlite_stat3 +** row where N is between 0 and S-1 and S is the number of samples. The +** value returned depends on the number of arguments. +** +** argc==2 result: rowid +** argc==3 result: nEq +** argc==4 result: nLt +** argc==5 result: nDLt +*/ +static void stat3Get( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + int n = sqlite3_value_int(argv[1]); + Stat3Accum *p = (Stat3Accum*)sqlite3_value_blob(argv[0]); + + assert( p!=0 ); + if( p->nSample<=n ) return; + switch( argc ){ + case 2: sqlite3_result_int64(context, p->a[n].iRowid); break; + case 3: sqlite3_result_int64(context, p->a[n].nEq); break; + case 4: sqlite3_result_int64(context, p->a[n].nLt); break; + default: sqlite3_result_int64(context, p->a[n].nDLt); break; + } +} +static const FuncDef stat3GetFuncdef = { + -1, /* nArg */ + SQLITE_UTF8, /* iPrefEnc */ + 0, /* flags */ + 0, /* pUserData */ + 0, /* pNext */ + stat3Get, /* xFunc */ + 0, /* xStep */ + 0, /* xFinalize */ + "stat3_get", /* zName */ + 0, /* pHash */ + 0 /* pDestructor */ +}; +#endif /* SQLITE_ENABLE_STAT3 */ + + + + +/* +** Generate code to do an analysis of all indices associated with +** a single table. +*/ +static void analyzeOneTable( + Parse *pParse, /* Parser context */ + Table *pTab, /* Table whose indices are to be analyzed */ + Index *pOnlyIdx, /* If not NULL, only analyze this one index */ + int iStatCur, /* Index of VdbeCursor that writes the sqlite_stat1 table */ + int iMem /* Available memory locations begin here */ +){ + sqlite3 *db = pParse->db; /* Database handle */ + Index *pIdx; /* An index to being analyzed */ + int iIdxCur; /* Cursor open on index being analyzed */ + Vdbe *v; /* The virtual machine being built up */ + int i; /* Loop counter */ + int topOfLoop; /* The top of the loop */ + int endOfLoop; /* The end of the loop */ + int jZeroRows = -1; /* Jump from here if number of rows is zero */ + int iDb; /* Index of database containing pTab */ + int regTabname = iMem++; /* Register containing table name */ + int regIdxname = iMem++; /* Register containing index name */ + int regStat1 = iMem++; /* The stat column of sqlite_stat1 */ +#ifdef SQLITE_ENABLE_STAT3 + int regNumEq = regStat1; /* Number of instances. Same as regStat1 */ + int regNumLt = iMem++; /* Number of keys less than regSample */ + int regNumDLt = iMem++; /* Number of distinct keys less than regSample */ + int regSample = iMem++; /* The next sample value */ + int regRowid = regSample; /* Rowid of a sample */ + int regAccum = iMem++; /* Register to hold Stat3Accum object */ + int regLoop = iMem++; /* Loop counter */ + int regCount = iMem++; /* Number of rows in the table or index */ + int regTemp1 = iMem++; /* Intermediate register */ + int regTemp2 = iMem++; /* Intermediate register */ + int once = 1; /* One-time initialization */ + int shortJump = 0; /* Instruction address */ + int iTabCur = pParse->nTab++; /* Table cursor */ +#endif + int regCol = iMem++; /* Content of a column in analyzed table */ + int regRec = iMem++; /* Register holding completed record */ + int regTemp = iMem++; /* Temporary use register */ + int regNewRowid = iMem++; /* Rowid for the inserted record */ + + + v = sqlite3GetVdbe(pParse); + if( v==0 || NEVER(pTab==0) ){ + return; + } + if( pTab->tnum==0 ){ + /* Do not gather statistics on views or virtual tables */ + return; + } + if( memcmp(pTab->zName, "sqlite_", 7)==0 ){ + /* Do not gather statistics on system tables */ + return; + } + assert( sqlite3BtreeHoldsAllMutexes(db) ); + iDb = sqlite3SchemaToIndex(db, pTab->pSchema); + assert( iDb>=0 ); + assert( sqlite3SchemaMutexHeld(db, iDb, 0) ); +#ifndef SQLITE_OMIT_AUTHORIZATION + if( sqlite3AuthCheck(pParse, SQLITE_ANALYZE, pTab->zName, 0, + db->aDb[iDb].zName ) ){ + return; + } +#endif + + /* Establish a read-lock on the table at the shared-cache level. */ + sqlite3TableLock(pParse, iDb, pTab->tnum, 0, pTab->zName); + + iIdxCur = pParse->nTab++; + sqlite3VdbeAddOp4(v, OP_String8, 0, regTabname, 0, pTab->zName, 0); + for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){ + int nCol; + KeyInfo *pKey; + int addrIfNot = 0; /* address of OP_IfNot */ + int *aChngAddr; /* Array of jump instruction addresses */ + + if( pOnlyIdx && pOnlyIdx!=pIdx ) continue; + VdbeNoopComment((v, "Begin analysis of %s", pIdx->zName)); + nCol = pIdx->nColumn; + aChngAddr = sqlite3DbMallocRaw(db, sizeof(int)*nCol); + if( aChngAddr==0 ) continue; + pKey = sqlite3IndexKeyinfo(pParse, pIdx); + if( iMem+1+(nCol*2)>pParse->nMem ){ + pParse->nMem = iMem+1+(nCol*2); } - autoIncStep(pParse, regAutoinc, regRowid); - /* Push onto the stack, data for all columns of the new entry, beginning - ** with the first column. + /* Open a cursor to the index to be analyzed. */ + assert( iDb==sqlite3SchemaToIndex(db, pIdx->pSchema) ); + sqlite3VdbeAddOp4(v, OP_OpenRead, iIdxCur, pIdx->tnum, iDb, + (char *)pKey, P4_KEYINFO_HANDOFF); + VdbeComment((v, "%s", pIdx->zName)); + + /* Populate the register containing the index name. */ + sqlite3VdbeAddOp4(v, OP_String8, 0, regIdxname, 0, pIdx->zName, 0); + +#ifdef SQLITE_ENABLE_STAT3 + if( once ){ + once = 0; + sqlite3OpenTable(pParse, iTabCur, iDb, pTab, OP_OpenRead); + } + sqlite3VdbeAddOp2(v, OP_Count, iIdxCur, regCount); + sqlite3VdbeAddOp2(v, OP_Integer, SQLITE_STAT3_SAMPLES, regTemp1); + sqlite3VdbeAddOp2(v, OP_Integer, 0, regNumEq); + sqlite3VdbeAddOp2(v, OP_Integer, 0, regNumLt); + sqlite3VdbeAddOp2(v, OP_Integer, -1, regNumDLt); + sqlite3VdbeAddOp3(v, OP_Null, 0, regSample, regAccum); + sqlite3VdbeAddOp4(v, OP_Function, 1, regCount, regAccum, + (char*)&stat3InitFuncdef, P4_FUNCDEF); + sqlite3VdbeChangeP5(v, 2); +#endif /* SQLITE_ENABLE_STAT3 */ + + /* The block of memory cells initialized here is used as follows. + ** + ** iMem: + ** The total number of rows in the table. + ** + ** iMem+1 .. iMem+nCol: + ** Number of distinct entries in index considering the + ** left-most N columns only, where N is between 1 and nCol, + ** inclusive. + ** + ** iMem+nCol+1 .. Mem+2*nCol: + ** Previous value of indexed columns, from left to right. + ** + ** Cells iMem through iMem+nCol are initialized to 0. The others are + ** initialized to contain an SQL NULL. */ - nHidden = 0; - for(i=0; inCol; i++){ - int iRegStore = regRowid+1+i; - if( i==pTab->iPKey ){ - /* The value of the INTEGER PRIMARY KEY column is always a NULL. - ** Whenever this column is read, the record number will be substituted - ** in its place. So will fill this column with a NULL to avoid - ** taking up data space with information that will never be used. */ - sqlite3VdbeAddOp2(v, OP_Null, 0, iRegStore); - continue; + for(i=0; i<=nCol; i++){ + sqlite3VdbeAddOp2(v, OP_Integer, 0, iMem+i); + } + for(i=0; iaCol[i]) ){ - assert( IsVirtual(pTab) ); - j = -1; - nHidden++; - }else{ - j = i - nHidden; - } - }else{ - for(j=0; jnId; j++){ - if( pColumn->a[j].idx==i ) break; - } + assert( pIdx->azColl!=0 ); + assert( pIdx->azColl[i]!=0 ); + pColl = sqlite3LocateCollSeq(pParse, pIdx->azColl[i]); + aChngAddr[i] = sqlite3VdbeAddOp4(v, OP_Ne, regCol, 0, iMem+nCol+i+1, + (char*)pColl, P4_COLLSEQ); + sqlite3VdbeChangeP5(v, SQLITE_NULLEQ); + VdbeComment((v, "jump if column %d changed", i)); +#ifdef SQLITE_ENABLE_STAT3 + if( i==0 ){ + sqlite3VdbeAddOp2(v, OP_AddImm, regNumEq, 1); + VdbeComment((v, "incr repeat count")); } - if( j<0 || nColumn==0 || (pColumn && j>=pColumn->nId) ){ - sqlite3ExprCode(pParse, pTab->aCol[i].pDflt, iRegStore); - }else if( useTempTable ){ - sqlite3VdbeAddOp3(v, OP_Column, srcTab, j, iRegStore); - }else if( pSelect ){ - sqlite3VdbeAddOp2(v, OP_SCopy, regFromSelect+j, iRegStore); - }else{ - sqlite3ExprCode(pParse, pList->a[j].pExpr, iRegStore); +#endif + } + sqlite3VdbeAddOp2(v, OP_Goto, 0, endOfLoop); + for(i=0; inColumn, regRowid); + sqlite3VdbeAddOp3(v, OP_Add, regNumEq, regNumLt, regNumLt); + sqlite3VdbeAddOp2(v, OP_AddImm, regNumDLt, 1); + sqlite3VdbeAddOp2(v, OP_Integer, 1, regNumEq); +#endif } + sqlite3VdbeAddOp2(v, OP_AddImm, iMem+i+1, 1); + sqlite3VdbeAddOp3(v, OP_Column, iIdxCur, i, iMem+nCol+i+1); } + sqlite3DbFree(db, aChngAddr); - /* Generate code to check constraints and generate index keys and - ** do the insertion. + /* Always jump here after updating the iMem+1...iMem+1+nCol counters */ + sqlite3VdbeResolveLabel(v, endOfLoop); + + sqlite3VdbeAddOp2(v, OP_Next, iIdxCur, topOfLoop); + sqlite3VdbeAddOp1(v, OP_Close, iIdxCur); +#ifdef SQLITE_ENABLE_STAT3 + sqlite3VdbeAddOp4(v, OP_Function, 1, regNumEq, regTemp2, + (char*)&stat3PushFuncdef, P4_FUNCDEF); + sqlite3VdbeChangeP5(v, 5); + sqlite3VdbeAddOp2(v, OP_Integer, -1, regLoop); + shortJump = + sqlite3VdbeAddOp2(v, OP_AddImm, regLoop, 1); + sqlite3VdbeAddOp4(v, OP_Function, 1, regAccum, regTemp1, + (char*)&stat3GetFuncdef, P4_FUNCDEF); + sqlite3VdbeChangeP5(v, 2); + sqlite3VdbeAddOp1(v, OP_IsNull, regTemp1); + sqlite3VdbeAddOp3(v, OP_NotExists, iTabCur, shortJump, regTemp1); + sqlite3VdbeAddOp3(v, OP_Column, iTabCur, pIdx->aiColumn[0], regSample); + sqlite3ColumnDefault(v, pTab, pIdx->aiColumn[0], regSample); + sqlite3VdbeAddOp4(v, OP_Function, 1, regAccum, regNumEq, + (char*)&stat3GetFuncdef, P4_FUNCDEF); + sqlite3VdbeChangeP5(v, 3); + sqlite3VdbeAddOp4(v, OP_Function, 1, regAccum, regNumLt, + (char*)&stat3GetFuncdef, P4_FUNCDEF); + sqlite3VdbeChangeP5(v, 4); + sqlite3VdbeAddOp4(v, OP_Function, 1, regAccum, regNumDLt, + (char*)&stat3GetFuncdef, P4_FUNCDEF); + sqlite3VdbeChangeP5(v, 5); + sqlite3VdbeAddOp4(v, OP_MakeRecord, regTabname, 6, regRec, "bbbbbb", 0); + sqlite3VdbeAddOp2(v, OP_NewRowid, iStatCur+1, regNewRowid); + sqlite3VdbeAddOp3(v, OP_Insert, iStatCur+1, regRec, regNewRowid); + sqlite3VdbeAddOp2(v, OP_Goto, 0, shortJump); + sqlite3VdbeJumpHere(v, shortJump+2); +#endif + + /* Store the results in sqlite_stat1. + ** + ** The result is a single row of the sqlite_stat1 table. The first + ** two columns are the names of the table and index. The third column + ** is a string composed of a list of integer statistics about the + ** index. The first integer in the list is the total number of entries + ** in the index. There is one additional integer in the list for each + ** column of the table. This additional integer is a guess of how many + ** rows of the table the index will select. If D is the count of distinct + ** values and K is the total number of rows, then the integer is computed + ** as: + ** + ** I = (K+D-1)/D + ** + ** If K==0 then no entry is made into the sqlite_stat1 table. + ** If K>0 then it is always the case the D>0 so division by zero + ** is never possible. */ -#ifndef SQLITE_OMIT_VIRTUALTABLE - if( IsVirtual(pTab) ){ - sqlite3VtabMakeWritable(pParse, pTab); - sqlite3VdbeAddOp4(v, OP_VUpdate, 1, pTab->nCol+2, regIns, - (const char*)pTab->pVtab, P4_VTAB); - }else -#endif - { - int isReplace; /* Set to true if constraints may cause a replace */ - sqlite3GenerateConstraintChecks(pParse, pTab, baseCur, regIns, aRegIdx, - keyColumn>=0, 0, onError, endOfLoop, &isReplace - ); - sqlite3CompleteInsertion( - pParse, pTab, baseCur, regIns, aRegIdx, 0, - (tmask&TRIGGER_AFTER) ? newIdx : -1, appendFlag, isReplace==0 - ); + sqlite3VdbeAddOp2(v, OP_SCopy, iMem, regStat1); + if( jZeroRows<0 ){ + jZeroRows = sqlite3VdbeAddOp1(v, OP_IfNot, iMem); } + for(i=0; iflags & SQLITE_CountRows)!=0 ){ - sqlite3VdbeAddOp2(v, OP_AddImm, regRowCount, 1); + if( pTab->pIndex==0 ){ + sqlite3VdbeAddOp3(v, OP_OpenRead, iIdxCur, pTab->tnum, iDb); + VdbeComment((v, "%s", pTab->zName)); + sqlite3VdbeAddOp2(v, OP_Count, iIdxCur, regStat1); + sqlite3VdbeAddOp1(v, OP_Close, iIdxCur); + jZeroRows = sqlite3VdbeAddOp1(v, OP_IfNot, regStat1); + }else{ + sqlite3VdbeJumpHere(v, jZeroRows); + jZeroRows = sqlite3VdbeAddOp0(v, OP_Goto); } + sqlite3VdbeAddOp2(v, OP_Null, 0, regIdxname); + sqlite3VdbeAddOp4(v, OP_MakeRecord, regTabname, 3, regRec, "aaa", 0); + sqlite3VdbeAddOp2(v, OP_NewRowid, iStatCur, regNewRowid); + sqlite3VdbeAddOp3(v, OP_Insert, iStatCur, regRec, regNewRowid); + sqlite3VdbeChangeP5(v, OPFLAG_APPEND); + if( pParse->nMemnMem = regRec; + sqlite3VdbeJumpHere(v, jZeroRows); +} - if( pTrigger ){ - /* Code AFTER triggers */ - if( sqlite3CodeRowTrigger(pParse, pTrigger, TK_INSERT, 0, TRIGGER_AFTER, - pTab, newIdx, -1, onError, endOfLoop, 0, 0) ){ - goto insert_cleanup; - } - } - /* The bottom of the main insertion loop, if the data source - ** is a SELECT statement. - */ - sqlite3VdbeResolveLabel(v, endOfLoop); - if( useTempTable ){ - sqlite3VdbeAddOp2(v, OP_Next, srcTab, addrCont); - sqlite3VdbeJumpHere(v, addrInsTop); - sqlite3VdbeAddOp1(v, OP_Close, srcTab); - }else if( pSelect ){ - sqlite3VdbeAddOp2(v, OP_Goto, 0, addrCont); - sqlite3VdbeJumpHere(v, addrInsTop); +/* +** Generate code that will cause the most recent index analysis to +** be loaded into internal hash tables where is can be used. +*/ +static void loadAnalysis(Parse *pParse, int iDb){ + Vdbe *v = sqlite3GetVdbe(pParse); + if( v ){ + sqlite3VdbeAddOp1(v, OP_LoadAnalysis, iDb); } +} - if( !IsVirtual(pTab) && !isView ){ - /* Close all tables opened */ - sqlite3VdbeAddOp1(v, OP_Close, baseCur); - for(idx=1, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, idx++){ - sqlite3VdbeAddOp1(v, OP_Close, idx+baseCur); - } - } +/* +** Generate code that will do an analysis of an entire database +*/ +static void analyzeDatabase(Parse *pParse, int iDb){ + sqlite3 *db = pParse->db; + Schema *pSchema = db->aDb[iDb].pSchema; /* Schema of database iDb */ + HashElem *k; + int iStatCur; + int iMem; -insert_end: - /* Update the sqlite_sequence table by storing the content of the - ** maximum rowid counter values recorded while inserting into - ** autoincrement tables. - */ - if( pParse->nested==0 && pParse->trigStack==0 ){ - sqlite3AutoincrementEnd(pParse); + sqlite3BeginWriteOperation(pParse, 0, iDb); + iStatCur = pParse->nTab; + pParse->nTab += 3; + openStatTable(pParse, iDb, iStatCur, 0, 0); + iMem = pParse->nMem+1; + assert( sqlite3SchemaMutexHeld(db, iDb, 0) ); + for(k=sqliteHashFirst(&pSchema->tblHash); k; k=sqliteHashNext(k)){ + Table *pTab = (Table*)sqliteHashData(k); + analyzeOneTable(pParse, pTab, 0, iStatCur, iMem); } + loadAnalysis(pParse, iDb); +} - /* - ** Return the number of rows inserted. If this routine is - ** generating code because of a call to sqlite3NestedParse(), do not - ** invoke the callback function. - */ - if( db->flags & SQLITE_CountRows && pParse->nested==0 && !pParse->trigStack ){ - sqlite3VdbeAddOp2(v, OP_ResultRow, regRowCount, 1); - sqlite3VdbeSetNumCols(v, 1); - sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "rows inserted", SQLITE_STATIC); - } +/* +** Generate code that will do an analysis of a single table in +** a database. If pOnlyIdx is not NULL then it is a single index +** in pTab that should be analyzed. +*/ +static void analyzeTable(Parse *pParse, Table *pTab, Index *pOnlyIdx){ + int iDb; + int iStatCur; -insert_cleanup: - sqlite3SrcListDelete(db, pTabList); - sqlite3ExprListDelete(db, pList); - sqlite3SelectDelete(db, pSelect); - sqlite3IdListDelete(db, pColumn); - sqlite3DbFree(db, aRegIdx); + assert( pTab!=0 ); + assert( sqlite3BtreeHoldsAllMutexes(pParse->db) ); + iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema); + sqlite3BeginWriteOperation(pParse, 0, iDb); + iStatCur = pParse->nTab; + pParse->nTab += 3; + if( pOnlyIdx ){ + openStatTable(pParse, iDb, iStatCur, pOnlyIdx->zName, "idx"); + }else{ + openStatTable(pParse, iDb, iStatCur, pTab->zName, "tbl"); + } + analyzeOneTable(pParse, pTab, pOnlyIdx, iStatCur, pParse->nMem+1); + loadAnalysis(pParse, iDb); } /* -** Generate code to do constraint checks prior to an INSERT or an UPDATE. -** -** The input is a range of consecutive registers as follows: -** -** 1. The rowid of the row to be updated before the update. This -** value is omitted unless we are doing an UPDATE that involves a -** change to the record number or writing to a virtual table. -** -** 2. The rowid of the row after the update. -** -** 3. The data in the first column of the entry after the update. -** -** i. Data from middle columns... -** -** N. The data in the last column of the entry after the update. -** -** The regRowid parameter is the index of the register containing (2). -** -** The old rowid shown as entry (1) above is omitted unless both isUpdate -** and rowidChng are 1. isUpdate is true for UPDATEs and false for -** INSERTs. RowidChng means that the new rowid is explicitly specified by -** the update or insert statement. If rowidChng is false, it means that -** the rowid is computed automatically in an insert or that the rowid value -** is not modified by the update. -** -** The code generated by this routine store new index entries into -** registers identified by aRegIdx[]. No index entry is created for -** indices where aRegIdx[i]==0. The order of indices in aRegIdx[] is -** the same as the order of indices on the linked list of indices -** attached to the table. -** -** This routine also generates code to check constraints. NOT NULL, -** CHECK, and UNIQUE constraints are all checked. If a constraint fails, -** then the appropriate action is performed. There are five possible -** actions: ROLLBACK, ABORT, FAIL, REPLACE, and IGNORE. -** -** Constraint type Action What Happens -** --------------- ---------- ---------------------------------------- -** any ROLLBACK The current transaction is rolled back and -** sqlite3_exec() returns immediately with a -** return code of SQLITE_CONSTRAINT. -** -** any ABORT Back out changes from the current command -** only (do not do a complete rollback) then -** cause sqlite3_exec() to return immediately -** with SQLITE_CONSTRAINT. -** -** any FAIL Sqlite_exec() returns immediately with a -** return code of SQLITE_CONSTRAINT. The -** transaction is not rolled back and any -** prior changes are retained. -** -** any IGNORE The record number and data is popped from -** the stack and there is an immediate jump -** to label ignoreDest. -** -** NOT NULL REPLACE The NULL value is replace by the default -** value for that column. If the default value -** is NULL, the action is the same as ABORT. -** -** UNIQUE REPLACE The other row that conflicts with the row -** being inserted is removed. -** -** CHECK REPLACE Illegal. The results in an exception. +** Generate code for the ANALYZE command. The parser calls this routine +** when it recognizes an ANALYZE command. ** -** Which action to take is determined by the overrideError parameter. -** Or if overrideError==OE_Default, then the pParse->onError parameter -** is used. Or if pParse->onError==OE_Default then the onError value -** for the constraint is used. +** ANALYZE -- 1 +** ANALYZE -- 2 +** ANALYZE ?.? -- 3 ** -** The calling routine must open a read/write cursor for pTab with -** cursor number "baseCur". All indices of pTab must also have open -** read/write cursors with cursor number baseCur+i for the i-th cursor. -** Except, if there is no possibility of a REPLACE action then -** cursors do not need to be open for indices where aRegIdx[i]==0. +** Form 1 causes all indices in all attached databases to be analyzed. +** Form 2 analyzes all indices the single database named. +** Form 3 analyzes all indices associated with the named table. */ -SQLITE_PRIVATE void sqlite3GenerateConstraintChecks( - Parse *pParse, /* The parser context */ - Table *pTab, /* the table into which we are inserting */ - int baseCur, /* Index of a read/write cursor pointing at pTab */ - int regRowid, /* Index of the range of input registers */ - int *aRegIdx, /* Register used by each index. 0 for unused indices */ - int rowidChng, /* True if the rowid might collide with existing entry */ - int isUpdate, /* True for UPDATE, False for INSERT */ - int overrideError, /* Override onError to this if not OE_Default */ - int ignoreDest, /* Jump to this label on an OE_Ignore resolution */ - int *pbMayReplace /* OUT: Set to true if constraint may cause a replace */ -){ - int i; /* loop counter */ - Vdbe *v; /* VDBE under constrution */ - int nCol; /* Number of columns */ - int onError; /* Conflict resolution strategy */ - int j1; /* Addresss of jump instruction */ - int j2 = 0, j3; /* Addresses of jump instructions */ - int regData; /* Register containing first data column */ - int iCur; /* Table cursor number */ - Index *pIdx; /* Pointer to one of the indices */ - int seenReplace = 0; /* True if REPLACE is used to resolve INT PK conflict */ - int hasTwoRowids = (isUpdate && rowidChng); - - v = sqlite3GetVdbe(pParse); - assert( v!=0 ); - assert( pTab->pSelect==0 ); /* This table is not a VIEW */ - nCol = pTab->nCol; - regData = regRowid + 1; +SQLITE_PRIVATE void sqlite3Analyze(Parse *pParse, Token *pName1, Token *pName2){ + sqlite3 *db = pParse->db; + int iDb; + int i; + char *z, *zDb; + Table *pTab; + Index *pIdx; + Token *pTableName; + /* Read the database schema. If an error occurs, leave an error message + ** and code in pParse and return NULL. */ + assert( sqlite3BtreeHoldsAllMutexes(pParse->db) ); + if( SQLITE_OK!=sqlite3ReadSchema(pParse) ){ + return; + } - /* Test all NOT NULL constraints. - */ - for(i=0; iiPKey ){ - continue; - } - onError = pTab->aCol[i].notNull; - if( onError==OE_None ) continue; - if( overrideError!=OE_Default ){ - onError = overrideError; - }else if( onError==OE_Default ){ - onError = OE_Abort; - } - if( onError==OE_Replace && pTab->aCol[i].pDflt==0 ){ - onError = OE_Abort; + assert( pName2!=0 || pName1==0 ); + if( pName1==0 ){ + /* Form 1: Analyze everything */ + for(i=0; inDb; i++){ + if( i==1 ) continue; /* Do not analyze the TEMP database */ + analyzeDatabase(pParse, i); } - assert( onError==OE_Rollback || onError==OE_Abort || onError==OE_Fail - || onError==OE_Ignore || onError==OE_Replace ); - switch( onError ){ - case OE_Rollback: - case OE_Abort: - case OE_Fail: { - char *zMsg; - j1 = sqlite3VdbeAddOp3(v, OP_HaltIfNull, - SQLITE_CONSTRAINT, onError, regData+i); - zMsg = sqlite3MPrintf(pParse->db, "%s.%s may not be NULL", - pTab->zName, pTab->aCol[i].zName); - sqlite3VdbeChangeP4(v, -1, zMsg, P4_DYNAMIC); - break; - } - case OE_Ignore: { - sqlite3VdbeAddOp2(v, OP_IsNull, regData+i, ignoreDest); - break; - } - default: { - assert( onError==OE_Replace ); - j1 = sqlite3VdbeAddOp1(v, OP_NotNull, regData+i); - sqlite3ExprCode(pParse, pTab->aCol[i].pDflt, regData+i); - sqlite3VdbeJumpHere(v, j1); - break; + }else if( pName2->n==0 ){ + /* Form 2: Analyze the database or table named */ + iDb = sqlite3FindDb(db, pName1); + if( iDb>=0 ){ + analyzeDatabase(pParse, iDb); + }else{ + z = sqlite3NameFromToken(db, pName1); + if( z ){ + if( (pIdx = sqlite3FindIndex(db, z, 0))!=0 ){ + analyzeTable(pParse, pIdx->pTable, pIdx); + }else if( (pTab = sqlite3LocateTable(pParse, 0, z, 0))!=0 ){ + analyzeTable(pParse, pTab, 0); + } + sqlite3DbFree(db, z); } } + }else{ + /* Form 3: Analyze the fully qualified table name */ + iDb = sqlite3TwoPartName(pParse, pName1, pName2, &pTableName); + if( iDb>=0 ){ + zDb = db->aDb[iDb].zName; + z = sqlite3NameFromToken(db, pTableName); + if( z ){ + if( (pIdx = sqlite3FindIndex(db, z, zDb))!=0 ){ + analyzeTable(pParse, pIdx->pTable, pIdx); + }else if( (pTab = sqlite3LocateTable(pParse, 0, z, zDb))!=0 ){ + analyzeTable(pParse, pTab, 0); + } + sqlite3DbFree(db, z); + } + } } +} - /* Test all CHECK constraints - */ -#ifndef SQLITE_OMIT_CHECK - if( pTab->pCheck && (pParse->db->flags & SQLITE_IgnoreChecks)==0 ){ - int allOk = sqlite3VdbeMakeLabel(v); - pParse->ckBase = regData; - sqlite3ExprIfTrue(pParse, pTab->pCheck, allOk, SQLITE_JUMPIFNULL); - onError = overrideError!=OE_Default ? overrideError : OE_Abort; - if( onError==OE_Ignore ){ - sqlite3VdbeAddOp2(v, OP_Goto, 0, ignoreDest); - }else{ - sqlite3VdbeAddOp2(v, OP_Halt, SQLITE_CONSTRAINT, onError); +/* +** Used to pass information from the analyzer reader through to the +** callback routine. +*/ +typedef struct analysisInfo analysisInfo; +struct analysisInfo { + sqlite3 *db; + const char *zDatabase; +}; + +/* +** This callback is invoked once for each index when reading the +** sqlite_stat1 table. +** +** argv[0] = name of the table +** argv[1] = name of the index (might be NULL) +** argv[2] = results of analysis - on integer for each column +** +** Entries for which argv[1]==NULL simply record the number of rows in +** the table. +*/ +static int analysisLoader(void *pData, int argc, char **argv, char **NotUsed){ + analysisInfo *pInfo = (analysisInfo*)pData; + Index *pIndex; + Table *pTable; + int i, c, n; + tRowcnt v; + const char *z; + + assert( argc==3 ); + UNUSED_PARAMETER2(NotUsed, argc); + + if( argv==0 || argv[0]==0 || argv[2]==0 ){ + return 0; + } + pTable = sqlite3FindTable(pInfo->db, argv[0], pInfo->zDatabase); + if( pTable==0 ){ + return 0; + } + if( argv[1] ){ + pIndex = sqlite3FindIndex(pInfo->db, argv[1], pInfo->zDatabase); + }else{ + pIndex = 0; + } + n = pIndex ? pIndex->nColumn : 0; + z = argv[2]; + for(i=0; *z && i<=n; i++){ + v = 0; + while( (c=z[0])>='0' && c<='9' ){ + v = v*10 + c - '0'; + z++; + } + if( i==0 ) pTable->nRowEst = v; + if( pIndex==0 ) break; + pIndex->aiRowEst[i] = v; + if( *z==' ' ) z++; + if( memcmp(z, "unordered", 10)==0 ){ + pIndex->bUnordered = 1; + break; } - sqlite3VdbeResolveLabel(v, allOk); } -#endif /* !defined(SQLITE_OMIT_CHECK) */ + return 0; +} - /* If we have an INTEGER PRIMARY KEY, make sure the primary key - ** of the new record does not previously exist. Except, if this - ** is an UPDATE and the primary key is not changing, that is OK. - */ - if( rowidChng ){ - onError = pTab->keyConf; - if( overrideError!=OE_Default ){ - onError = overrideError; - }else if( onError==OE_Default ){ - onError = OE_Abort; - } - - if( onError!=OE_Replace || pTab->pIndex ){ - if( isUpdate ){ - j2 = sqlite3VdbeAddOp3(v, OP_Eq, regRowid, 0, regRowid-1); - } - j3 = sqlite3VdbeAddOp3(v, OP_NotExists, baseCur, 0, regRowid); - switch( onError ){ - default: { - onError = OE_Abort; - /* Fall thru into the next case */ - } - case OE_Rollback: - case OE_Abort: - case OE_Fail: { - sqlite3VdbeAddOp4(v, OP_Halt, SQLITE_CONSTRAINT, onError, 0, - "PRIMARY KEY must be unique", P4_STATIC); - break; - } - case OE_Replace: { - sqlite3GenerateRowIndexDelete(pParse, pTab, baseCur, 0); - seenReplace = 1; - break; - } - case OE_Ignore: { - assert( seenReplace==0 ); - sqlite3VdbeAddOp2(v, OP_Goto, 0, ignoreDest); - break; - } - } - sqlite3VdbeJumpHere(v, j3); - if( isUpdate ){ - sqlite3VdbeJumpHere(v, j2); +/* +** If the Index.aSample variable is not NULL, delete the aSample[] array +** and its contents. +*/ +SQLITE_PRIVATE void sqlite3DeleteIndexSamples(sqlite3 *db, Index *pIdx){ +#ifdef SQLITE_ENABLE_STAT3 + if( pIdx->aSample ){ + int j; + for(j=0; jnSample; j++){ + IndexSample *p = &pIdx->aSample[j]; + if( p->eType==SQLITE_TEXT || p->eType==SQLITE_BLOB ){ + sqlite3DbFree(db, p->u.z); } } + sqlite3DbFree(db, pIdx->aSample); } + if( db && db->pnBytesFreed==0 ){ + pIdx->nSample = 0; + pIdx->aSample = 0; + } +#else + UNUSED_PARAMETER(db); + UNUSED_PARAMETER(pIdx); +#endif +} - /* Test all UNIQUE constraints by creating entries for each UNIQUE - ** index and making sure that duplicate entries do not already exist. - ** Add the new records to the indices as we go. - */ - for(iCur=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, iCur++){ - int regIdx; - int regR; +#ifdef SQLITE_ENABLE_STAT3 +/* +** Load content from the sqlite_stat3 table into the Index.aSample[] +** arrays of all indices. +*/ +static int loadStat3(sqlite3 *db, const char *zDb){ + int rc; /* Result codes from subroutines */ + sqlite3_stmt *pStmt = 0; /* An SQL statement being run */ + char *zSql; /* Text of the SQL statement */ + Index *pPrevIdx = 0; /* Previous index in the loop */ + int idx = 0; /* slot in pIdx->aSample[] for next sample */ + int eType; /* Datatype of a sample */ + IndexSample *pSample; /* A slot in pIdx->aSample[] */ - if( aRegIdx[iCur]==0 ) continue; /* Skip unused indices */ + assert( db->lookaside.bEnabled==0 ); + if( !sqlite3FindTable(db, "sqlite_stat3", zDb) ){ + return SQLITE_OK; + } - /* Create a key for accessing the index entry */ - regIdx = sqlite3GetTempRange(pParse, pIdx->nColumn+1); - for(i=0; inColumn; i++){ - int idx = pIdx->aiColumn[i]; - if( idx==pTab->iPKey ){ - sqlite3VdbeAddOp2(v, OP_SCopy, regRowid, regIdx+i); - }else{ - sqlite3VdbeAddOp2(v, OP_SCopy, regData+idx, regIdx+i); - } - } - sqlite3VdbeAddOp2(v, OP_SCopy, regRowid, regIdx+i); - sqlite3VdbeAddOp3(v, OP_MakeRecord, regIdx, pIdx->nColumn+1, aRegIdx[iCur]); - sqlite3IndexAffinityStr(v, pIdx); - sqlite3ExprCacheAffinityChange(pParse, regIdx, pIdx->nColumn+1); + zSql = sqlite3MPrintf(db, + "SELECT idx,count(*) FROM %Q.sqlite_stat3" + " GROUP BY idx", zDb); + if( !zSql ){ + return SQLITE_NOMEM; + } + rc = sqlite3_prepare(db, zSql, -1, &pStmt, 0); + sqlite3DbFree(db, zSql); + if( rc ) return rc; - /* Find out what action to take in case there is an indexing conflict */ - onError = pIdx->onError; - if( onError==OE_None ){ - sqlite3ReleaseTempRange(pParse, regIdx, pIdx->nColumn+1); - continue; /* pIdx is not a UNIQUE index */ - } - if( overrideError!=OE_Default ){ - onError = overrideError; - }else if( onError==OE_Default ){ - onError = OE_Abort; - } - if( seenReplace ){ - if( onError==OE_Ignore ) onError = OE_Replace; - else if( onError==OE_Fail ) onError = OE_Abort; + while( sqlite3_step(pStmt)==SQLITE_ROW ){ + char *zIndex; /* Index name */ + Index *pIdx; /* Pointer to the index object */ + int nSample; /* Number of samples */ + + zIndex = (char *)sqlite3_column_text(pStmt, 0); + if( zIndex==0 ) continue; + nSample = sqlite3_column_int(pStmt, 1); + pIdx = sqlite3FindIndex(db, zIndex, zDb); + if( pIdx==0 ) continue; + assert( pIdx->nSample==0 ); + pIdx->nSample = nSample; + pIdx->aSample = sqlite3DbMallocZero(db, nSample*sizeof(IndexSample)); + pIdx->avgEq = pIdx->aiRowEst[1]; + if( pIdx->aSample==0 ){ + db->mallocFailed = 1; + sqlite3_finalize(pStmt); + return SQLITE_NOMEM; } - - - /* Check to see if the new index entry will be unique */ - regR = sqlite3GetTempReg(pParse); - sqlite3VdbeAddOp2(v, OP_SCopy, regRowid-hasTwoRowids, regR); - j3 = sqlite3VdbeAddOp4(v, OP_IsUnique, baseCur+iCur+1, 0, - regR, SQLITE_INT_TO_PTR(regIdx), - P4_INT32); - sqlite3ReleaseTempRange(pParse, regIdx, pIdx->nColumn+1); + } + rc = sqlite3_finalize(pStmt); + if( rc ) return rc; - /* Generate code that executes if the new index entry is not unique */ - assert( onError==OE_Rollback || onError==OE_Abort || onError==OE_Fail - || onError==OE_Ignore || onError==OE_Replace ); - switch( onError ){ - case OE_Rollback: - case OE_Abort: - case OE_Fail: { - int j; - StrAccum errMsg; - const char *zSep; - char *zErr; + zSql = sqlite3MPrintf(db, + "SELECT idx,neq,nlt,ndlt,sample FROM %Q.sqlite_stat3", zDb); + if( !zSql ){ + return SQLITE_NOMEM; + } + rc = sqlite3_prepare(db, zSql, -1, &pStmt, 0); + sqlite3DbFree(db, zSql); + if( rc ) return rc; - sqlite3StrAccumInit(&errMsg, 0, 0, 200); - errMsg.db = pParse->db; - zSep = pIdx->nColumn>1 ? "columns " : "column "; - for(j=0; jnColumn; j++){ - char *zCol = pTab->aCol[pIdx->aiColumn[j]].zName; - sqlite3StrAccumAppend(&errMsg, zSep, -1); - zSep = ", "; - sqlite3StrAccumAppend(&errMsg, zCol, -1); - } - sqlite3StrAccumAppend(&errMsg, - pIdx->nColumn>1 ? " are not unique" : " is not unique", -1); - zErr = sqlite3StrAccumFinish(&errMsg); - sqlite3VdbeAddOp4(v, OP_Halt, SQLITE_CONSTRAINT, onError, 0, zErr, 0); - sqlite3DbFree(errMsg.db, zErr); + while( sqlite3_step(pStmt)==SQLITE_ROW ){ + char *zIndex; /* Index name */ + Index *pIdx; /* Pointer to the index object */ + int i; /* Loop counter */ + tRowcnt sumEq; /* Sum of the nEq values */ + + zIndex = (char *)sqlite3_column_text(pStmt, 0); + if( zIndex==0 ) continue; + pIdx = sqlite3FindIndex(db, zIndex, zDb); + if( pIdx==0 ) continue; + if( pIdx==pPrevIdx ){ + idx++; + }else{ + pPrevIdx = pIdx; + idx = 0; + } + assert( idxnSample ); + pSample = &pIdx->aSample[idx]; + pSample->nEq = (tRowcnt)sqlite3_column_int64(pStmt, 1); + pSample->nLt = (tRowcnt)sqlite3_column_int64(pStmt, 2); + pSample->nDLt = (tRowcnt)sqlite3_column_int64(pStmt, 3); + if( idx==pIdx->nSample-1 ){ + if( pSample->nDLt>0 ){ + for(i=0, sumEq=0; i<=idx-1; i++) sumEq += pIdx->aSample[i].nEq; + pIdx->avgEq = (pSample->nLt - sumEq)/pSample->nDLt; + } + if( pIdx->avgEq<=0 ) pIdx->avgEq = 1; + } + eType = sqlite3_column_type(pStmt, 4); + pSample->eType = (u8)eType; + switch( eType ){ + case SQLITE_INTEGER: { + pSample->u.i = sqlite3_column_int64(pStmt, 4); break; } - case OE_Ignore: { - assert( seenReplace==0 ); - sqlite3VdbeAddOp2(v, OP_Goto, 0, ignoreDest); + case SQLITE_FLOAT: { + pSample->u.r = sqlite3_column_double(pStmt, 4); break; } - default: { - assert( onError==OE_Replace ); - sqlite3GenerateRowDelete(pParse, pTab, baseCur, regR, 0); - seenReplace = 1; + case SQLITE_NULL: { break; } + default: assert( eType==SQLITE_TEXT || eType==SQLITE_BLOB ); { + const char *z = (const char *)( + (eType==SQLITE_BLOB) ? + sqlite3_column_blob(pStmt, 4): + sqlite3_column_text(pStmt, 4) + ); + int n = z ? sqlite3_column_bytes(pStmt, 4) : 0; + pSample->nByte = n; + if( n < 1){ + pSample->u.z = 0; + }else{ + pSample->u.z = sqlite3DbMallocRaw(db, n); + if( pSample->u.z==0 ){ + db->mallocFailed = 1; + sqlite3_finalize(pStmt); + return SQLITE_NOMEM; + } + memcpy(pSample->u.z, z, n); + } + } } - sqlite3VdbeJumpHere(v, j3); - sqlite3ReleaseTempReg(pParse, regR); - } - - if( pbMayReplace ){ - *pbMayReplace = seenReplace; } + return sqlite3_finalize(pStmt); } +#endif /* SQLITE_ENABLE_STAT3 */ /* -** This routine generates code to finish the INSERT or UPDATE operation -** that was started by a prior call to sqlite3GenerateConstraintChecks. -** A consecutive range of registers starting at regRowid contains the -** rowid and the content to be inserted. +** Load the content of the sqlite_stat1 and sqlite_stat3 tables. The +** contents of sqlite_stat1 are used to populate the Index.aiRowEst[] +** arrays. The contents of sqlite_stat3 are used to populate the +** Index.aSample[] arrays. ** -** The arguments to this routine should be the same as the first six -** arguments to sqlite3GenerateConstraintChecks. +** If the sqlite_stat1 table is not present in the database, SQLITE_ERROR +** is returned. In this case, even if SQLITE_ENABLE_STAT3 was defined +** during compilation and the sqlite_stat3 table is present, no data is +** read from it. +** +** If SQLITE_ENABLE_STAT3 was defined during compilation and the +** sqlite_stat3 table is not present in the database, SQLITE_ERROR is +** returned. However, in this case, data is read from the sqlite_stat1 +** table (if it is present) before returning. +** +** If an OOM error occurs, this function always sets db->mallocFailed. +** This means if the caller does not care about other errors, the return +** code may be ignored. */ -SQLITE_PRIVATE void sqlite3CompleteInsertion( - Parse *pParse, /* The parser context */ - Table *pTab, /* the table into which we are inserting */ - int baseCur, /* Index of a read/write cursor pointing at pTab */ - int regRowid, /* Range of content */ - int *aRegIdx, /* Register used by each index. 0 for unused indices */ - int isUpdate, /* True for UPDATE, False for INSERT */ - int newIdx, /* Index of NEW table for triggers. -1 if none */ - int appendBias, /* True if this is likely to be an append */ - int useSeekResult /* True to set the USESEEKRESULT flag on OP_[Idx]Insert */ -){ - int i; - Vdbe *v; - int nIdx; - Index *pIdx; - u8 pik_flags; - int regData; - int regRec; +SQLITE_PRIVATE int sqlite3AnalysisLoad(sqlite3 *db, int iDb){ + analysisInfo sInfo; + HashElem *i; + char *zSql; + int rc; - v = sqlite3GetVdbe(pParse); - assert( v!=0 ); - assert( pTab->pSelect==0 ); /* This table is not a VIEW */ - for(nIdx=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, nIdx++){} - for(i=nIdx-1; i>=0; i--){ - if( aRegIdx[i]==0 ) continue; - sqlite3VdbeAddOp2(v, OP_IdxInsert, baseCur+i+1, aRegIdx[i]); - if( useSeekResult ){ - sqlite3VdbeChangeP5(v, OPFLAG_USESEEKRESULT); - } + assert( iDb>=0 && iDbnDb ); + assert( db->aDb[iDb].pBt!=0 ); + + /* Clear any prior statistics */ + assert( sqlite3SchemaMutexHeld(db, iDb, 0) ); + for(i=sqliteHashFirst(&db->aDb[iDb].pSchema->idxHash);i;i=sqliteHashNext(i)){ + Index *pIdx = sqliteHashData(i); + sqlite3DefaultRowEst(pIdx); +#ifdef SQLITE_ENABLE_STAT3 + sqlite3DeleteIndexSamples(db, pIdx); + pIdx->aSample = 0; +#endif } - regData = regRowid + 1; - regRec = sqlite3GetTempReg(pParse); - sqlite3VdbeAddOp3(v, OP_MakeRecord, regData, pTab->nCol, regRec); - sqlite3TableAffinityStr(v, pTab); - sqlite3ExprCacheAffinityChange(pParse, regData, pTab->nCol); -#ifndef SQLITE_OMIT_TRIGGER - if( newIdx>=0 ){ - sqlite3VdbeAddOp3(v, OP_Insert, newIdx, regRec, regRowid); + + /* Check to make sure the sqlite_stat1 table exists */ + sInfo.db = db; + sInfo.zDatabase = db->aDb[iDb].zName; + if( sqlite3FindTable(db, "sqlite_stat1", sInfo.zDatabase)==0 ){ + return SQLITE_ERROR; } -#endif - if( pParse->nested ){ - pik_flags = 0; + + /* Load new statistics out of the sqlite_stat1 table */ + zSql = sqlite3MPrintf(db, + "SELECT tbl,idx,stat FROM %Q.sqlite_stat1", sInfo.zDatabase); + if( zSql==0 ){ + rc = SQLITE_NOMEM; }else{ - pik_flags = OPFLAG_NCHANGE; - pik_flags |= (isUpdate?OPFLAG_ISUPDATE:OPFLAG_LASTROWID); - } - if( appendBias ){ - pik_flags |= OPFLAG_APPEND; + rc = sqlite3_exec(db, zSql, analysisLoader, &sInfo, 0); + sqlite3DbFree(db, zSql); } - if( useSeekResult ){ - pik_flags |= OPFLAG_USESEEKRESULT; - } - sqlite3VdbeAddOp3(v, OP_Insert, baseCur, regRec, regRowid); - if( !pParse->nested ){ - sqlite3VdbeChangeP4(v, -1, pTab->zName, P4_STATIC); - } - sqlite3VdbeChangeP5(v, pik_flags); -} -/* -** Generate code that will open cursors for a table and for all -** indices of that table. The "baseCur" parameter is the cursor number used -** for the table. Indices are opened on subsequent cursors. -** -** Return the number of indices on the table. -*/ -SQLITE_PRIVATE int sqlite3OpenTableAndIndices( - Parse *pParse, /* Parsing context */ - Table *pTab, /* Table to be opened */ - int baseCur, /* Cursor number assigned to the table */ - int op /* OP_OpenRead or OP_OpenWrite */ -){ - int i; - int iDb; - Index *pIdx; - Vdbe *v; - if( IsVirtual(pTab) ) return 0; - iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema); - v = sqlite3GetVdbe(pParse); - assert( v!=0 ); - sqlite3OpenTable(pParse, baseCur, iDb, pTab, op); - for(i=1, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, i++){ - KeyInfo *pKey = sqlite3IndexKeyinfo(pParse, pIdx); - assert( pIdx->pSchema==pTab->pSchema ); - sqlite3VdbeAddOp4(v, op, i+baseCur, pIdx->tnum, iDb, - (char*)pKey, P4_KEYINFO_HANDOFF); - VdbeComment((v, "%s", pIdx->zName)); - } - if( pParse->nTabnTab = baseCur+i; + /* Load the statistics from the sqlite_stat3 table. */ +#ifdef SQLITE_ENABLE_STAT3 + if( rc==SQLITE_OK ){ + int lookasideEnabled = db->lookaside.bEnabled; + db->lookaside.bEnabled = 0; + rc = loadStat3(db, sInfo.zDatabase); + db->lookaside.bEnabled = lookasideEnabled; } - return i-1; -} - - -#ifdef SQLITE_TEST -/* -** The following global variable is incremented whenever the -** transfer optimization is used. This is used for testing -** purposes only - to make sure the transfer optimization really -** is happening when it is suppose to. -*/ -SQLITE_API int sqlite3_xferopt_count; -#endif /* SQLITE_TEST */ - +#endif -#ifndef SQLITE_OMIT_XFER_OPT -/* -** Check to collation names to see if they are compatible. -*/ -static int xferCompatibleCollation(const char *z1, const char *z2){ - if( z1==0 ){ - return z2==0; - } - if( z2==0 ){ - return 0; + if( rc==SQLITE_NOMEM ){ + db->mallocFailed = 1; } - return sqlite3StrICmp(z1, z2)==0; + return rc; } +#endif /* SQLITE_OMIT_ANALYZE */ + +/************** End of analyze.c *********************************************/ +/************** Begin file attach.c ******************************************/ /* -** Check to see if index pSrc is compatible as a source of data -** for index pDest in an insert transfer optimization. The rules -** for a compatible index: +** 2003 April 6 ** -** * The index is over the same set of columns -** * The same DESC and ASC markings occurs on all columns -** * The same onError processing (OE_Abort, OE_Ignore, etc) -** * The same collating sequence on each column +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** This file contains code used to implement the ATTACH and DETACH commands. */ -static int xferCompatibleIndex(Index *pDest, Index *pSrc){ - int i; - assert( pDest && pSrc ); - assert( pDest->pTable!=pSrc->pTable ); - if( pDest->nColumn!=pSrc->nColumn ){ - return 0; /* Different number of columns */ - } - if( pDest->onError!=pSrc->onError ){ - return 0; /* Different conflict resolution strategies */ - } - for(i=0; inColumn; i++){ - if( pSrc->aiColumn[i]!=pDest->aiColumn[i] ){ - return 0; /* Different columns indexed */ - } - if( pSrc->aSortOrder[i]!=pDest->aSortOrder[i] ){ - return 0; /* Different sort orders */ - } - if( !xferCompatibleCollation(pSrc->azColl[i],pDest->azColl[i]) ){ - return 0; /* Different collating sequences */ - } - } - - /* If no test above fails then the indices must be compatible */ - return 1; -} +#ifndef SQLITE_OMIT_ATTACH /* -** Attempt the transfer optimization on INSERTs of the form -** -** INSERT INTO tab1 SELECT * FROM tab2; +** Resolve an expression that was part of an ATTACH or DETACH statement. This +** is slightly different from resolving a normal SQL expression, because simple +** identifiers are treated as strings, not possible column names or aliases. ** -** This optimization is only attempted if +** i.e. if the parser sees: ** -** (1) tab1 and tab2 have identical schemas including all the -** same indices and constraints +** ATTACH DATABASE abc AS def ** -** (2) tab1 and tab2 are different tables +** it treats the two expressions as literal strings 'abc' and 'def' instead of +** looking for columns of the same name. ** -** (3) There must be no triggers on tab1 +** This only applies to the root node of pExpr, so the statement: ** -** (4) The result set of the SELECT statement is "*" +** ATTACH DATABASE abc||def AS 'db2' ** -** (5) The SELECT statement has no WHERE, HAVING, ORDER BY, GROUP BY, -** or LIMIT clause. +** will fail because neither abc or def can be resolved. +*/ +static int resolveAttachExpr(NameContext *pName, Expr *pExpr) +{ + int rc = SQLITE_OK; + if( pExpr ){ + if( pExpr->op!=TK_ID ){ + rc = sqlite3ResolveExprNames(pName, pExpr); + if( rc==SQLITE_OK && !sqlite3ExprIsConstant(pExpr) ){ + sqlite3ErrorMsg(pName->pParse, "invalid name: \"%s\"", pExpr->u.zToken); + return SQLITE_ERROR; + } + }else{ + pExpr->op = TK_STRING; + } + } + return rc; +} + +/* +** An SQL user-function registered to do the work of an ATTACH statement. The +** three arguments to the function come directly from an attach statement: ** -** (6) The SELECT statement is a simple (not a compound) select that -** contains only tab2 in its FROM clause +** ATTACH DATABASE x AS y KEY z ** -** This method for implementing the INSERT transfers raw records from -** tab2 over to tab1. The columns are not decoded. Raw records from -** the indices of tab2 are transfered to tab1 as well. In so doing, -** the resulting tab1 has much less fragmentation. +** SELECT sqlite_attach(x, y, z) ** -** This routine returns TRUE if the optimization is attempted. If any -** of the conditions above fail so that the optimization should not -** be attempted, then this routine returns FALSE. +** If the optional "KEY z" syntax is omitted, an SQL NULL is passed as the +** third argument. */ -static int xferOptimization( - Parse *pParse, /* Parser context */ - Table *pDest, /* The table we are inserting into */ - Select *pSelect, /* A SELECT statement to use as the data source */ - int onError, /* How to handle constraint errors */ - int iDbDest /* The database of pDest */ +static void attachFunc( + sqlite3_context *context, + int NotUsed, + sqlite3_value **argv ){ - ExprList *pEList; /* The result set of the SELECT */ - Table *pSrc; /* The table in the FROM clause of SELECT */ - Index *pSrcIdx, *pDestIdx; /* Source and destination indices */ - struct SrcList_item *pItem; /* An element of pSelect->pSrc */ - int i; /* Loop counter */ - int iDbSrc; /* The database of pSrc */ - int iSrc, iDest; /* Cursors from source and destination */ - int addr1, addr2; /* Loop addresses */ - int emptyDestTest; /* Address of test for empty pDest */ - int emptySrcTest; /* Address of test for empty pSrc */ - Vdbe *v; /* The VDBE we are building */ - KeyInfo *pKey; /* Key information for an index */ - int regAutoinc; /* Memory register used by AUTOINC */ - int destHasUniqueIdx = 0; /* True if pDest has a UNIQUE index */ - int regData, regRowid; /* Registers holding data and rowid */ + int i; + int rc = 0; + sqlite3 *db = sqlite3_context_db_handle(context); + const char *zName; + const char *zFile; + char *zPath = 0; + char *zErr = 0; + unsigned int flags; + Db *aNew; + char *zErrDyn = 0; + sqlite3_vfs *pVfs; - if( pSelect==0 ){ - return 0; /* Must be of the form INSERT INTO ... SELECT ... */ - } - if( sqlite3TriggerList(pParse, pDest) ){ - return 0; /* tab1 must not have triggers */ - } -#ifndef SQLITE_OMIT_VIRTUALTABLE - if( pDest->tabFlags & TF_Virtual ){ - return 0; /* tab1 must not be a virtual table */ - } -#endif - if( onError==OE_Default ){ - onError = OE_Abort; - } - if( onError!=OE_Abort && onError!=OE_Rollback ){ - return 0; /* Cannot do OR REPLACE or OR IGNORE or OR FAIL */ - } - assert(pSelect->pSrc); /* allocated even if there is no FROM clause */ - if( pSelect->pSrc->nSrc!=1 ){ - return 0; /* FROM clause must have exactly one term */ - } - if( pSelect->pSrc->a[0].pSelect ){ - return 0; /* FROM clause cannot contain a subquery */ - } - if( pSelect->pWhere ){ - return 0; /* SELECT may not have a WHERE clause */ - } - if( pSelect->pOrderBy ){ - return 0; /* SELECT may not have an ORDER BY clause */ - } - /* Do not need to test for a HAVING clause. If HAVING is present but - ** there is no ORDER BY, we will get an error. */ - if( pSelect->pGroupBy ){ - return 0; /* SELECT may not have a GROUP BY clause */ - } - if( pSelect->pLimit ){ - return 0; /* SELECT may not have a LIMIT clause */ - } - assert( pSelect->pOffset==0 ); /* Must be so if pLimit==0 */ - if( pSelect->pPrior ){ - return 0; /* SELECT may not be a compound query */ - } - if( pSelect->selFlags & SF_Distinct ){ - return 0; /* SELECT may not be DISTINCT */ - } - pEList = pSelect->pEList; - assert( pEList!=0 ); - if( pEList->nExpr!=1 ){ - return 0; /* The result set must have exactly one column */ - } - assert( pEList->a[0].pExpr ); - if( pEList->a[0].pExpr->op!=TK_ALL ){ - return 0; /* The result set must be the special operator "*" */ - } + UNUSED_PARAMETER(NotUsed); - /* At this point we have established that the statement is of the - ** correct syntactic form to participate in this optimization. Now - ** we have to check the semantics. + zFile = (const char *)sqlite3_value_text(argv[0]); + zName = (const char *)sqlite3_value_text(argv[1]); + if( zFile==0 ) zFile = ""; + if( zName==0 ) zName = ""; + + /* Check for the following errors: + ** + ** * Too many attached databases, + ** * Transaction currently open + ** * Specified database name already being used. */ - pItem = pSelect->pSrc->a; - pSrc = sqlite3LocateTable(pParse, 0, pItem->zName, pItem->zDatabase); - if( pSrc==0 ){ - return 0; /* FROM clause does not contain a real table */ - } - if( pSrc==pDest ){ - return 0; /* tab1 and tab2 may not be the same table */ + if( db->nDb>=db->aLimit[SQLITE_LIMIT_ATTACHED]+2 ){ + zErrDyn = sqlite3MPrintf(db, "too many attached databases - max %d", + db->aLimit[SQLITE_LIMIT_ATTACHED] + ); + goto attach_error; } -#ifndef SQLITE_OMIT_VIRTUALTABLE - if( pSrc->tabFlags & TF_Virtual ){ - return 0; /* tab2 must not be a virtual table */ + if( !db->autoCommit ){ + zErrDyn = sqlite3MPrintf(db, "cannot ATTACH database within transaction"); + goto attach_error; } -#endif - if( pSrc->pSelect ){ - return 0; /* tab2 may not be a view */ + for(i=0; inDb; i++){ + char *z = db->aDb[i].zName; + assert( z && zName ); + if( sqlite3StrICmp(z, zName)==0 ){ + zErrDyn = sqlite3MPrintf(db, "database %s is already in use", zName); + goto attach_error; + } } - if( pDest->nCol!=pSrc->nCol ){ - return 0; /* Number of columns must be the same in tab1 and tab2 */ + + /* Allocate the new entry in the db->aDb[] array and initialise the schema + ** hash tables. + */ + if( db->aDb==db->aDbStatic ){ + aNew = sqlite3DbMallocRaw(db, sizeof(db->aDb[0])*3 ); + if( aNew==0 ) return; + memcpy(aNew, db->aDb, sizeof(db->aDb[0])*2); + }else{ + aNew = sqlite3DbRealloc(db, db->aDb, sizeof(db->aDb[0])*(db->nDb+1) ); + if( aNew==0 ) return; } - if( pDest->iPKey!=pSrc->iPKey ){ - return 0; /* Both tables must have the same INTEGER PRIMARY KEY */ + db->aDb = aNew; + aNew = &db->aDb[db->nDb]; + memset(aNew, 0, sizeof(*aNew)); + + /* Open the database file. If the btree is successfully opened, use + ** it to obtain the database schema. At this point the schema may + ** or may not be initialised. + */ + flags = db->openFlags; + rc = sqlite3ParseUri(db->pVfs->zName, zFile, &flags, &pVfs, &zPath, &zErr); + if( rc!=SQLITE_OK ){ + if( rc==SQLITE_NOMEM ) db->mallocFailed = 1; + sqlite3_result_error(context, zErr, -1); + sqlite3_free(zErr); + return; } - for(i=0; inCol; i++){ - if( pDest->aCol[i].affinity!=pSrc->aCol[i].affinity ){ - return 0; /* Affinity must be the same on all columns */ - } - if( !xferCompatibleCollation(pDest->aCol[i].zColl, pSrc->aCol[i].zColl) ){ - return 0; /* Collating sequence must be the same on all columns */ - } - if( pDest->aCol[i].notNull && !pSrc->aCol[i].notNull ){ - return 0; /* tab2 must be NOT NULL if tab1 is */ + assert( pVfs ); + flags |= SQLITE_OPEN_MAIN_DB; + rc = sqlite3BtreeOpen(pVfs, zPath, db, &aNew->pBt, 0, flags); + sqlite3_free( zPath ); + db->nDb++; + if( rc==SQLITE_CONSTRAINT ){ + rc = SQLITE_ERROR; + zErrDyn = sqlite3MPrintf(db, "database is already attached"); + }else if( rc==SQLITE_OK ){ + Pager *pPager; + aNew->pSchema = sqlite3SchemaGet(db, aNew->pBt); + if( !aNew->pSchema ){ + rc = SQLITE_NOMEM; + }else if( aNew->pSchema->file_format && aNew->pSchema->enc!=ENC(db) ){ + zErrDyn = sqlite3MPrintf(db, + "attached databases must use the same text encoding as main database"); + rc = SQLITE_ERROR; } + pPager = sqlite3BtreePager(aNew->pBt); + sqlite3PagerLockingMode(pPager, db->dfltLockMode); + sqlite3BtreeSecureDelete(aNew->pBt, + sqlite3BtreeSecureDelete(db->aDb[0].pBt,-1) ); } - for(pDestIdx=pDest->pIndex; pDestIdx; pDestIdx=pDestIdx->pNext){ - if( pDestIdx->onError!=OE_None ){ - destHasUniqueIdx = 1; - } - for(pSrcIdx=pSrc->pIndex; pSrcIdx; pSrcIdx=pSrcIdx->pNext){ - if( xferCompatibleIndex(pDestIdx, pSrcIdx) ) break; - } - if( pSrcIdx==0 ){ - return 0; /* pDestIdx has no corresponding index in pSrc */ - } + aNew->safety_level = 3; + aNew->zName = sqlite3DbStrDup(db, zName); + if( rc==SQLITE_OK && aNew->zName==0 ){ + rc = SQLITE_NOMEM; } -#ifndef SQLITE_OMIT_CHECK - if( pDest->pCheck && !sqlite3ExprCompare(pSrc->pCheck, pDest->pCheck) ){ - return 0; /* Tables have different CHECK constraints. Ticket #2252 */ + + +#ifdef SQLITE_HAS_CODEC + if( rc==SQLITE_OK ){ + extern int sqlite3CodecAttach(sqlite3*, int, const void*, int); + extern void sqlite3CodecGetKey(sqlite3*, int, void**, int*); + int nKey; + char *zKey; + int t = sqlite3_value_type(argv[2]); + switch( t ){ + case SQLITE_INTEGER: + case SQLITE_FLOAT: + zErrDyn = sqlite3DbStrDup(db, "Invalid key value"); + rc = SQLITE_ERROR; + break; + + case SQLITE_TEXT: + case SQLITE_BLOB: + nKey = sqlite3_value_bytes(argv[2]); + zKey = (char *)sqlite3_value_blob(argv[2]); + rc = sqlite3CodecAttach(db, db->nDb-1, zKey, nKey); + break; + + case SQLITE_NULL: + /* No key specified. Use the key from the main database */ + sqlite3CodecGetKey(db, 0, (void**)&zKey, &nKey); + if( nKey>0 || sqlite3BtreeGetReserve(db->aDb[0].pBt)>0 ){ + rc = sqlite3CodecAttach(db, db->nDb-1, zKey, nKey); + } + break; + } } #endif - /* If we get this far, it means either: - ** - ** * We can always do the transfer if the table contains an - ** an integer primary key - ** - ** * We can conditionally do the transfer if the destination - ** table is empty. + /* If the file was opened successfully, read the schema for the new database. + ** If this fails, or if opening the file failed, then close the file and + ** remove the entry from the db->aDb[] array. i.e. put everything back the way + ** we found it. */ -#ifdef SQLITE_TEST - sqlite3_xferopt_count++; -#endif - iDbSrc = sqlite3SchemaToIndex(pParse->db, pSrc->pSchema); - v = sqlite3GetVdbe(pParse); - sqlite3CodeVerifySchema(pParse, iDbSrc); - iSrc = pParse->nTab++; - iDest = pParse->nTab++; - regAutoinc = autoIncBegin(pParse, iDbDest, pDest); - sqlite3OpenTable(pParse, iDest, iDbDest, pDest, OP_OpenWrite); - if( (pDest->iPKey<0 && pDest->pIndex!=0) || destHasUniqueIdx ){ - /* If tables do not have an INTEGER PRIMARY KEY and there - ** are indices to be copied and the destination is not empty, - ** we have to disallow the transfer optimization because the - ** the rowids might change which will mess up indexing. - ** - ** Or if the destination has a UNIQUE index and is not empty, - ** we also disallow the transfer optimization because we cannot - ** insure that all entries in the union of DEST and SRC will be - ** unique. - */ - addr1 = sqlite3VdbeAddOp2(v, OP_Rewind, iDest, 0); - emptyDestTest = sqlite3VdbeAddOp2(v, OP_Goto, 0, 0); - sqlite3VdbeJumpHere(v, addr1); - }else{ - emptyDestTest = 0; - } - sqlite3OpenTable(pParse, iSrc, iDbSrc, pSrc, OP_OpenRead); - emptySrcTest = sqlite3VdbeAddOp2(v, OP_Rewind, iSrc, 0); - regData = sqlite3GetTempReg(pParse); - regRowid = sqlite3GetTempReg(pParse); - if( pDest->iPKey>=0 ){ - addr1 = sqlite3VdbeAddOp2(v, OP_Rowid, iSrc, regRowid); - addr2 = sqlite3VdbeAddOp3(v, OP_NotExists, iDest, 0, regRowid); - sqlite3VdbeAddOp4(v, OP_Halt, SQLITE_CONSTRAINT, onError, 0, - "PRIMARY KEY must be unique", P4_STATIC); - sqlite3VdbeJumpHere(v, addr2); - autoIncStep(pParse, regAutoinc, regRowid); - }else if( pDest->pIndex==0 ){ - addr1 = sqlite3VdbeAddOp2(v, OP_NewRowid, iDest, regRowid); - }else{ - addr1 = sqlite3VdbeAddOp2(v, OP_Rowid, iSrc, regRowid); - assert( (pDest->tabFlags & TF_Autoincrement)==0 ); + if( rc==SQLITE_OK ){ + sqlite3BtreeEnterAll(db); + rc = sqlite3Init(db, &zErrDyn); + sqlite3BtreeLeaveAll(db); } - sqlite3VdbeAddOp2(v, OP_RowData, iSrc, regData); - sqlite3VdbeAddOp3(v, OP_Insert, iDest, regData, regRowid); - sqlite3VdbeChangeP5(v, OPFLAG_NCHANGE|OPFLAG_LASTROWID|OPFLAG_APPEND); - sqlite3VdbeChangeP4(v, -1, pDest->zName, 0); - sqlite3VdbeAddOp2(v, OP_Next, iSrc, addr1); - for(pDestIdx=pDest->pIndex; pDestIdx; pDestIdx=pDestIdx->pNext){ - for(pSrcIdx=pSrc->pIndex; ALWAYS(pSrcIdx); pSrcIdx=pSrcIdx->pNext){ - if( xferCompatibleIndex(pDestIdx, pSrcIdx) ) break; + if( rc ){ + int iDb = db->nDb - 1; + assert( iDb>=2 ); + if( db->aDb[iDb].pBt ){ + sqlite3BtreeClose(db->aDb[iDb].pBt); + db->aDb[iDb].pBt = 0; + db->aDb[iDb].pSchema = 0; } - assert( pSrcIdx ); - sqlite3VdbeAddOp2(v, OP_Close, iSrc, 0); - sqlite3VdbeAddOp2(v, OP_Close, iDest, 0); - pKey = sqlite3IndexKeyinfo(pParse, pSrcIdx); - sqlite3VdbeAddOp4(v, OP_OpenRead, iSrc, pSrcIdx->tnum, iDbSrc, - (char*)pKey, P4_KEYINFO_HANDOFF); - VdbeComment((v, "%s", pSrcIdx->zName)); - pKey = sqlite3IndexKeyinfo(pParse, pDestIdx); - sqlite3VdbeAddOp4(v, OP_OpenWrite, iDest, pDestIdx->tnum, iDbDest, - (char*)pKey, P4_KEYINFO_HANDOFF); - VdbeComment((v, "%s", pDestIdx->zName)); - addr1 = sqlite3VdbeAddOp2(v, OP_Rewind, iSrc, 0); - sqlite3VdbeAddOp2(v, OP_RowKey, iSrc, regData); - sqlite3VdbeAddOp3(v, OP_IdxInsert, iDest, regData, 1); - sqlite3VdbeAddOp2(v, OP_Next, iSrc, addr1+1); - sqlite3VdbeJumpHere(v, addr1); + sqlite3ResetAllSchemasOfConnection(db); + db->nDb = iDb; + if( rc==SQLITE_NOMEM || rc==SQLITE_IOERR_NOMEM ){ + db->mallocFailed = 1; + sqlite3DbFree(db, zErrDyn); + zErrDyn = sqlite3MPrintf(db, "out of memory"); + }else if( zErrDyn==0 ){ + zErrDyn = sqlite3MPrintf(db, "unable to open database: %s", zFile); + } + goto attach_error; } - sqlite3VdbeJumpHere(v, emptySrcTest); - sqlite3ReleaseTempReg(pParse, regRowid); - sqlite3ReleaseTempReg(pParse, regData); - sqlite3VdbeAddOp2(v, OP_Close, iSrc, 0); - sqlite3VdbeAddOp2(v, OP_Close, iDest, 0); - if( emptyDestTest ){ - sqlite3VdbeAddOp2(v, OP_Halt, SQLITE_OK, 0); - sqlite3VdbeJumpHere(v, emptyDestTest); - sqlite3VdbeAddOp2(v, OP_Close, iDest, 0); - return 0; - }else{ - return 1; + + return; + +attach_error: + /* Return an error if we get here */ + if( zErrDyn ){ + sqlite3_result_error(context, zErrDyn, -1); + sqlite3DbFree(db, zErrDyn); } + if( rc ) sqlite3_result_error_code(context, rc); } -#endif /* SQLITE_OMIT_XFER_OPT */ - -/* Make sure "isView" gets undefined in case this file becomes part of -** the amalgamation - so that subsequent files do not see isView as a -** macro. */ -#undef isView -/************** End of insert.c **********************************************/ -/************** Begin file legacy.c ******************************************/ /* -** 2001 September 15 -** -** The author disclaims copyright to this source code. In place of -** a legal notice, here is a blessing: -** -** May you do good and not evil. -** May you find forgiveness for yourself and forgive others. -** May you share freely, never taking more than you give. +** An SQL user-function registered to do the work of an DETACH statement. The +** three arguments to the function come directly from a detach statement: ** -************************************************************************* -** Main file for the SQLite library. The routines in this file -** implement the programmer interface to the library. Routines in -** other files are for internal use by SQLite and should not be -** accessed by users of the library. +** DETACH DATABASE x ** -** $Id: legacy.c,v 1.33 2009/05/05 20:02:48 drh Exp $ +** SELECT sqlite_detach(x) */ +static void detachFunc( + sqlite3_context *context, + int NotUsed, + sqlite3_value **argv +){ + const char *zName = (const char *)sqlite3_value_text(argv[0]); + sqlite3 *db = sqlite3_context_db_handle(context); + int i; + Db *pDb = 0; + char zErr[128]; + UNUSED_PARAMETER(NotUsed); + + if( zName==0 ) zName = ""; + for(i=0; inDb; i++){ + pDb = &db->aDb[i]; + if( pDb->pBt==0 ) continue; + if( sqlite3StrICmp(pDb->zName, zName)==0 ) break; + } + + if( i>=db->nDb ){ + sqlite3_snprintf(sizeof(zErr),zErr, "no such database: %s", zName); + goto detach_error; + } + if( i<2 ){ + sqlite3_snprintf(sizeof(zErr),zErr, "cannot detach database %s", zName); + goto detach_error; + } + if( !db->autoCommit ){ + sqlite3_snprintf(sizeof(zErr), zErr, + "cannot DETACH database within transaction"); + goto detach_error; + } + if( sqlite3BtreeIsInReadTrans(pDb->pBt) || sqlite3BtreeIsInBackup(pDb->pBt) ){ + sqlite3_snprintf(sizeof(zErr),zErr, "database %s is locked", zName); + goto detach_error; + } + + sqlite3BtreeClose(pDb->pBt); + pDb->pBt = 0; + pDb->pSchema = 0; + sqlite3ResetAllSchemasOfConnection(db); + return; + +detach_error: + sqlite3_result_error(context, zErr, -1); +} /* -** Execute SQL code. Return one of the SQLITE_ success/failure -** codes. Also write an error message into memory obtained from -** malloc() and make *pzErrMsg point to that message. -** -** If the SQL is a query, then for each row in the query result -** the xCallback() function is called. pArg becomes the first -** argument to xCallback(). If xCallback=NULL then no callback -** is invoked, even for queries. +** This procedure generates VDBE code for a single invocation of either the +** sqlite_detach() or sqlite_attach() SQL user functions. */ -SQLITE_API int sqlite3_exec( - sqlite3 *db, /* The database on which the SQL executes */ - const char *zSql, /* The SQL to be executed */ - sqlite3_callback xCallback, /* Invoke this callback routine */ - void *pArg, /* First argument to xCallback() */ - char **pzErrMsg /* Write error messages here */ +static void codeAttach( + Parse *pParse, /* The parser context */ + int type, /* Either SQLITE_ATTACH or SQLITE_DETACH */ + FuncDef const *pFunc,/* FuncDef wrapper for detachFunc() or attachFunc() */ + Expr *pAuthArg, /* Expression to pass to authorization callback */ + Expr *pFilename, /* Name of database file */ + Expr *pDbname, /* Name of the database to use internally */ + Expr *pKey /* Database key for encryption extension */ ){ - int rc = SQLITE_OK; /* Return code */ - const char *zLeftover; /* Tail of unprocessed SQL */ - sqlite3_stmt *pStmt = 0; /* The current SQL statement */ - char **azCols = 0; /* Names of result columns */ - int nRetry = 0; /* Number of retry attempts */ - int callbackIsInit; /* True if callback data is initialized */ + int rc; + NameContext sName; + Vdbe *v; + sqlite3* db = pParse->db; + int regArgs; - if( zSql==0 ) zSql = ""; + memset(&sName, 0, sizeof(NameContext)); + sName.pParse = pParse; - sqlite3_mutex_enter(db->mutex); - sqlite3Error(db, SQLITE_OK, 0); - while( (rc==SQLITE_OK || (rc==SQLITE_SCHEMA && (++nRetry)<2)) && zSql[0] ){ - int nCol; - char **azVals = 0; + if( + SQLITE_OK!=(rc = resolveAttachExpr(&sName, pFilename)) || + SQLITE_OK!=(rc = resolveAttachExpr(&sName, pDbname)) || + SQLITE_OK!=(rc = resolveAttachExpr(&sName, pKey)) + ){ + pParse->nErr++; + goto attach_end; + } - pStmt = 0; - rc = sqlite3_prepare(db, zSql, -1, &pStmt, &zLeftover); - assert( rc==SQLITE_OK || pStmt==0 ); - if( rc!=SQLITE_OK ){ - continue; +#ifndef SQLITE_OMIT_AUTHORIZATION + if( pAuthArg ){ + char *zAuthArg; + if( pAuthArg->op==TK_STRING ){ + zAuthArg = pAuthArg->u.zToken; + }else{ + zAuthArg = 0; } - if( !pStmt ){ - /* this happens for a comment or white-space */ - zSql = zLeftover; - continue; + rc = sqlite3AuthCheck(pParse, type, zAuthArg, 0, 0); + if(rc!=SQLITE_OK ){ + goto attach_end; } + } +#endif /* SQLITE_OMIT_AUTHORIZATION */ - callbackIsInit = 0; - nCol = sqlite3_column_count(pStmt); - - while( 1 ){ - int i; - rc = sqlite3_step(pStmt); - /* Invoke the callback function if required */ - if( xCallback && (SQLITE_ROW==rc || - (SQLITE_DONE==rc && !callbackIsInit - && db->flags&SQLITE_NullCallback)) ){ - if( !callbackIsInit ){ - azCols = sqlite3DbMallocZero(db, 2*nCol*sizeof(const char*) + 1); - if( azCols==0 ){ - goto exec_out; - } - for(i=0; imallocFailed = 1; - goto exec_out; - } - } - } - if( xCallback(pArg, nCol, azVals, azCols) ){ - rc = SQLITE_ABORT; - sqlite3VdbeFinalize((Vdbe *)pStmt); - pStmt = 0; - sqlite3Error(db, SQLITE_ABORT, 0); - goto exec_out; - } - } + v = sqlite3GetVdbe(pParse); + regArgs = sqlite3GetTempRange(pParse, 4); + sqlite3ExprCode(pParse, pFilename, regArgs); + sqlite3ExprCode(pParse, pDbname, regArgs+1); + sqlite3ExprCode(pParse, pKey, regArgs+2); - if( rc!=SQLITE_ROW ){ - rc = sqlite3VdbeFinalize((Vdbe *)pStmt); - pStmt = 0; - if( rc!=SQLITE_SCHEMA ){ - nRetry = 0; - zSql = zLeftover; - while( sqlite3Isspace(zSql[0]) ) zSql++; - } - break; - } - } + assert( v || db->mallocFailed ); + if( v ){ + sqlite3VdbeAddOp3(v, OP_Function, 0, regArgs+3-pFunc->nArg, regArgs+3); + assert( pFunc->nArg==-1 || (pFunc->nArg&0xff)==pFunc->nArg ); + sqlite3VdbeChangeP5(v, (u8)(pFunc->nArg)); + sqlite3VdbeChangeP4(v, -1, (char *)pFunc, P4_FUNCDEF); - sqlite3DbFree(db, azCols); - azCols = 0; + /* Code an OP_Expire. For an ATTACH statement, set P1 to true (expire this + ** statement only). For DETACH, set it to false (expire all existing + ** statements). + */ + sqlite3VdbeAddOp1(v, OP_Expire, (type==SQLITE_ATTACH)); } + +attach_end: + sqlite3ExprDelete(db, pFilename); + sqlite3ExprDelete(db, pDbname); + sqlite3ExprDelete(db, pKey); +} -exec_out: - if( pStmt ) sqlite3VdbeFinalize((Vdbe *)pStmt); - sqlite3DbFree(db, azCols); +/* +** Called by the parser to compile a DETACH statement. +** +** DETACH pDbname +*/ +SQLITE_PRIVATE void sqlite3Detach(Parse *pParse, Expr *pDbname){ + static const FuncDef detach_func = { + 1, /* nArg */ + SQLITE_UTF8, /* iPrefEnc */ + 0, /* flags */ + 0, /* pUserData */ + 0, /* pNext */ + detachFunc, /* xFunc */ + 0, /* xStep */ + 0, /* xFinalize */ + "sqlite_detach", /* zName */ + 0, /* pHash */ + 0 /* pDestructor */ + }; + codeAttach(pParse, SQLITE_DETACH, &detach_func, pDbname, 0, 0, pDbname); +} - rc = sqlite3ApiExit(db, rc); - if( rc!=SQLITE_OK && ALWAYS(rc==sqlite3_errcode(db)) && pzErrMsg ){ - int nErrMsg = 1 + sqlite3Strlen30(sqlite3_errmsg(db)); - *pzErrMsg = sqlite3Malloc(nErrMsg); - if( *pzErrMsg ){ - memcpy(*pzErrMsg, sqlite3_errmsg(db), nErrMsg); +/* +** Called by the parser to compile an ATTACH statement. +** +** ATTACH p AS pDbname KEY pKey +*/ +SQLITE_PRIVATE void sqlite3Attach(Parse *pParse, Expr *p, Expr *pDbname, Expr *pKey){ + static const FuncDef attach_func = { + 3, /* nArg */ + SQLITE_UTF8, /* iPrefEnc */ + 0, /* flags */ + 0, /* pUserData */ + 0, /* pNext */ + attachFunc, /* xFunc */ + 0, /* xStep */ + 0, /* xFinalize */ + "sqlite_attach", /* zName */ + 0, /* pHash */ + 0 /* pDestructor */ + }; + codeAttach(pParse, SQLITE_ATTACH, &attach_func, p, p, pDbname, pKey); +} +#endif /* SQLITE_OMIT_ATTACH */ + +/* +** Initialize a DbFixer structure. This routine must be called prior +** to passing the structure to one of the sqliteFixAAAA() routines below. +** +** The return value indicates whether or not fixation is required. TRUE +** means we do need to fix the database references, FALSE means we do not. +*/ +SQLITE_PRIVATE int sqlite3FixInit( + DbFixer *pFix, /* The fixer to be initialized */ + Parse *pParse, /* Error messages will be written here */ + int iDb, /* This is the database that must be used */ + const char *zType, /* "view", "trigger", or "index" */ + const Token *pName /* Name of the view, trigger, or index */ +){ + sqlite3 *db; + + if( NEVER(iDb<0) || iDb==1 ) return 0; + db = pParse->db; + assert( db->nDb>iDb ); + pFix->pParse = pParse; + pFix->zDb = db->aDb[iDb].zName; + pFix->zType = zType; + pFix->pName = pName; + return 1; +} + +/* +** The following set of routines walk through the parse tree and assign +** a specific database to all table references where the database name +** was left unspecified in the original SQL statement. The pFix structure +** must have been initialized by a prior call to sqlite3FixInit(). +** +** These routines are used to make sure that an index, trigger, or +** view in one database does not refer to objects in a different database. +** (Exception: indices, triggers, and views in the TEMP database are +** allowed to refer to anything.) If a reference is explicitly made +** to an object in a different database, an error message is added to +** pParse->zErrMsg and these routines return non-zero. If everything +** checks out, these routines return 0. +*/ +SQLITE_PRIVATE int sqlite3FixSrcList( + DbFixer *pFix, /* Context of the fixation */ + SrcList *pList /* The Source list to check and modify */ +){ + int i; + const char *zDb; + struct SrcList_item *pItem; + + if( NEVER(pList==0) ) return 0; + zDb = pFix->zDb; + for(i=0, pItem=pList->a; inSrc; i++, pItem++){ + if( pItem->zDatabase==0 ){ + pItem->zDatabase = sqlite3DbStrDup(pFix->pParse->db, zDb); + }else if( sqlite3StrICmp(pItem->zDatabase,zDb)!=0 ){ + sqlite3ErrorMsg(pFix->pParse, + "%s %T cannot reference objects in database %s", + pFix->zType, pFix->pName, pItem->zDatabase); + return 1; + } +#if !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_TRIGGER) + if( sqlite3FixSelect(pFix, pItem->pSelect) ) return 1; + if( sqlite3FixExpr(pFix, pItem->pOn) ) return 1; +#endif + } + return 0; +} +#if !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_TRIGGER) +SQLITE_PRIVATE int sqlite3FixSelect( + DbFixer *pFix, /* Context of the fixation */ + Select *pSelect /* The SELECT statement to be fixed to one database */ +){ + while( pSelect ){ + if( sqlite3FixExprList(pFix, pSelect->pEList) ){ + return 1; + } + if( sqlite3FixSrcList(pFix, pSelect->pSrc) ){ + return 1; + } + if( sqlite3FixExpr(pFix, pSelect->pWhere) ){ + return 1; + } + if( sqlite3FixExpr(pFix, pSelect->pHaving) ){ + return 1; + } + pSelect = pSelect->pPrior; + } + return 0; +} +SQLITE_PRIVATE int sqlite3FixExpr( + DbFixer *pFix, /* Context of the fixation */ + Expr *pExpr /* The expression to be fixed to one database */ +){ + while( pExpr ){ + if( ExprHasAnyProperty(pExpr, EP_TokenOnly) ) break; + if( ExprHasProperty(pExpr, EP_xIsSelect) ){ + if( sqlite3FixSelect(pFix, pExpr->x.pSelect) ) return 1; + }else{ + if( sqlite3FixExprList(pFix, pExpr->x.pList) ) return 1; + } + if( sqlite3FixExpr(pFix, pExpr->pRight) ){ + return 1; + } + pExpr = pExpr->pLeft; + } + return 0; +} +SQLITE_PRIVATE int sqlite3FixExprList( + DbFixer *pFix, /* Context of the fixation */ + ExprList *pList /* The expression to be fixed to one database */ +){ + int i; + struct ExprList_item *pItem; + if( pList==0 ) return 0; + for(i=0, pItem=pList->a; inExpr; i++, pItem++){ + if( sqlite3FixExpr(pFix, pItem->pExpr) ){ + return 1; } - }else if( pzErrMsg ){ - *pzErrMsg = 0; } + return 0; +} +#endif - assert( (rc&db->errMask)==rc ); - sqlite3_mutex_leave(db->mutex); - return rc; +#ifndef SQLITE_OMIT_TRIGGER +SQLITE_PRIVATE int sqlite3FixTriggerStep( + DbFixer *pFix, /* Context of the fixation */ + TriggerStep *pStep /* The trigger step be fixed to one database */ +){ + while( pStep ){ + if( sqlite3FixSelect(pFix, pStep->pSelect) ){ + return 1; + } + if( sqlite3FixExpr(pFix, pStep->pWhere) ){ + return 1; + } + if( sqlite3FixExprList(pFix, pStep->pExprList) ){ + return 1; + } + pStep = pStep->pNext; + } + return 0; } +#endif -/************** End of legacy.c **********************************************/ -/************** Begin file loadext.c *****************************************/ +/************** End of attach.c **********************************************/ +/************** Begin file auth.c ********************************************/ /* -** 2006 June 7 +** 2003 January 11 ** ** The author disclaims copyright to this source code. In place of ** a legal notice, here is a blessing: @@ -72116,8555 +81944,8059 @@ SQLITE_API int sqlite3_exec( ** May you share freely, never taking more than you give. ** ************************************************************************* -** This file contains code used to dynamically load extensions into -** the SQLite library. -** -** $Id: loadext.c,v 1.60 2009/06/03 01:24:54 drh Exp $ +** This file contains code used to implement the sqlite3_set_authorizer() +** API. This facility is an optional feature of the library. Embedded +** systems that do not need this facility may omit it by recompiling +** the library with -DSQLITE_OMIT_AUTHORIZATION=1 */ -#ifndef SQLITE_CORE - #define SQLITE_CORE 1 /* Disable the API redefinition in sqlite3ext.h */ -#endif -/************** Include sqlite3ext.h in the middle of loadext.c **************/ -/************** Begin file sqlite3ext.h **************************************/ /* -** 2006 June 7 +** All of the code in this file may be omitted by defining a single +** macro. +*/ +#ifndef SQLITE_OMIT_AUTHORIZATION + +/* +** Set or clear the access authorization function. ** -** The author disclaims copyright to this source code. In place of -** a legal notice, here is a blessing: +** The access authorization function is be called during the compilation +** phase to verify that the user has read and/or write access permission on +** various fields of the database. The first argument to the auth function +** is a copy of the 3rd argument to this routine. The second argument +** to the auth function is one of these constants: ** -** May you do good and not evil. -** May you find forgiveness for yourself and forgive others. -** May you share freely, never taking more than you give. +** SQLITE_CREATE_INDEX +** SQLITE_CREATE_TABLE +** SQLITE_CREATE_TEMP_INDEX +** SQLITE_CREATE_TEMP_TABLE +** SQLITE_CREATE_TEMP_TRIGGER +** SQLITE_CREATE_TEMP_VIEW +** SQLITE_CREATE_TRIGGER +** SQLITE_CREATE_VIEW +** SQLITE_DELETE +** SQLITE_DROP_INDEX +** SQLITE_DROP_TABLE +** SQLITE_DROP_TEMP_INDEX +** SQLITE_DROP_TEMP_TABLE +** SQLITE_DROP_TEMP_TRIGGER +** SQLITE_DROP_TEMP_VIEW +** SQLITE_DROP_TRIGGER +** SQLITE_DROP_VIEW +** SQLITE_INSERT +** SQLITE_PRAGMA +** SQLITE_READ +** SQLITE_SELECT +** SQLITE_TRANSACTION +** SQLITE_UPDATE ** -************************************************************************* -** This header file defines the SQLite interface for use by -** shared libraries that want to be imported as extensions into -** an SQLite instance. Shared libraries that intend to be loaded -** as extensions by SQLite should #include this file instead of -** sqlite3.h. +** The third and fourth arguments to the auth function are the name of +** the table and the column that are being accessed. The auth function +** should return either SQLITE_OK, SQLITE_DENY, or SQLITE_IGNORE. If +** SQLITE_OK is returned, it means that access is allowed. SQLITE_DENY +** means that the SQL statement will never-run - the sqlite3_exec() call +** will return with an error. SQLITE_IGNORE means that the SQL statement +** should run but attempts to read the specified column will return NULL +** and attempts to write the column will be ignored. ** -** @(#) $Id: sqlite3ext.h,v 1.25 2008/10/12 00:27:54 shane Exp $ +** Setting the auth function to NULL disables this hook. The default +** setting of the auth function is NULL. */ -#ifndef _SQLITE3EXT_H_ -#define _SQLITE3EXT_H_ +SQLITE_API int sqlite3_set_authorizer( + sqlite3 *db, + int (*xAuth)(void*,int,const char*,const char*,const char*,const char*), + void *pArg +){ + sqlite3_mutex_enter(db->mutex); + db->xAuth = xAuth; + db->pAuthArg = pArg; + sqlite3ExpirePreparedStatements(db); + sqlite3_mutex_leave(db->mutex); + return SQLITE_OK; +} -typedef struct sqlite3_api_routines sqlite3_api_routines; +/* +** Write an error message into pParse->zErrMsg that explains that the +** user-supplied authorization function returned an illegal value. +*/ +static void sqliteAuthBadReturnCode(Parse *pParse){ + sqlite3ErrorMsg(pParse, "authorizer malfunction"); + pParse->rc = SQLITE_ERROR; +} /* -** The following structure holds pointers to all of the SQLite API -** routines. +** Invoke the authorization callback for permission to read column zCol from +** table zTab in database zDb. This function assumes that an authorization +** callback has been registered (i.e. that sqlite3.xAuth is not NULL). ** -** WARNING: In order to maintain backwards compatibility, add new -** interfaces to the end of this structure only. If you insert new -** interfaces in the middle of this structure, then older different -** versions of SQLite will not be able to load each others' shared -** libraries! +** If SQLITE_IGNORE is returned and pExpr is not NULL, then pExpr is changed +** to an SQL NULL expression. Otherwise, if pExpr is NULL, then SQLITE_IGNORE +** is treated as SQLITE_DENY. In this case an error is left in pParse. */ -struct sqlite3_api_routines { - void * (*aggregate_context)(sqlite3_context*,int nBytes); - int (*aggregate_count)(sqlite3_context*); - int (*bind_blob)(sqlite3_stmt*,int,const void*,int n,void(*)(void*)); - int (*bind_double)(sqlite3_stmt*,int,double); - int (*bind_int)(sqlite3_stmt*,int,int); - int (*bind_int64)(sqlite3_stmt*,int,sqlite_int64); - int (*bind_null)(sqlite3_stmt*,int); - int (*bind_parameter_count)(sqlite3_stmt*); - int (*bind_parameter_index)(sqlite3_stmt*,const char*zName); - const char * (*bind_parameter_name)(sqlite3_stmt*,int); - int (*bind_text)(sqlite3_stmt*,int,const char*,int n,void(*)(void*)); - int (*bind_text16)(sqlite3_stmt*,int,const void*,int,void(*)(void*)); - int (*bind_value)(sqlite3_stmt*,int,const sqlite3_value*); - int (*busy_handler)(sqlite3*,int(*)(void*,int),void*); - int (*busy_timeout)(sqlite3*,int ms); - int (*changes)(sqlite3*); - int (*close)(sqlite3*); - int (*collation_needed)(sqlite3*,void*,void(*)(void*,sqlite3*,int eTextRep,const char*)); - int (*collation_needed16)(sqlite3*,void*,void(*)(void*,sqlite3*,int eTextRep,const void*)); - const void * (*column_blob)(sqlite3_stmt*,int iCol); - int (*column_bytes)(sqlite3_stmt*,int iCol); - int (*column_bytes16)(sqlite3_stmt*,int iCol); - int (*column_count)(sqlite3_stmt*pStmt); - const char * (*column_database_name)(sqlite3_stmt*,int); - const void * (*column_database_name16)(sqlite3_stmt*,int); - const char * (*column_decltype)(sqlite3_stmt*,int i); - const void * (*column_decltype16)(sqlite3_stmt*,int); - double (*column_double)(sqlite3_stmt*,int iCol); - int (*column_int)(sqlite3_stmt*,int iCol); - sqlite_int64 (*column_int64)(sqlite3_stmt*,int iCol); - const char * (*column_name)(sqlite3_stmt*,int); - const void * (*column_name16)(sqlite3_stmt*,int); - const char * (*column_origin_name)(sqlite3_stmt*,int); - const void * (*column_origin_name16)(sqlite3_stmt*,int); - const char * (*column_table_name)(sqlite3_stmt*,int); - const void * (*column_table_name16)(sqlite3_stmt*,int); - const unsigned char * (*column_text)(sqlite3_stmt*,int iCol); - const void * (*column_text16)(sqlite3_stmt*,int iCol); - int (*column_type)(sqlite3_stmt*,int iCol); - sqlite3_value* (*column_value)(sqlite3_stmt*,int iCol); - void * (*commit_hook)(sqlite3*,int(*)(void*),void*); - int (*complete)(const char*sql); - int (*complete16)(const void*sql); - int (*create_collation)(sqlite3*,const char*,int,void*,int(*)(void*,int,const void*,int,const void*)); - int (*create_collation16)(sqlite3*,const void*,int,void*,int(*)(void*,int,const void*,int,const void*)); - int (*create_function)(sqlite3*,const char*,int,int,void*,void (*xFunc)(sqlite3_context*,int,sqlite3_value**),void (*xStep)(sqlite3_context*,int,sqlite3_value**),void (*xFinal)(sqlite3_context*)); - int (*create_function16)(sqlite3*,const void*,int,int,void*,void (*xFunc)(sqlite3_context*,int,sqlite3_value**),void (*xStep)(sqlite3_context*,int,sqlite3_value**),void (*xFinal)(sqlite3_context*)); - int (*create_module)(sqlite3*,const char*,const sqlite3_module*,void*); - int (*data_count)(sqlite3_stmt*pStmt); - sqlite3 * (*db_handle)(sqlite3_stmt*); - int (*declare_vtab)(sqlite3*,const char*); - int (*enable_shared_cache)(int); - int (*errcode)(sqlite3*db); - const char * (*errmsg)(sqlite3*); - const void * (*errmsg16)(sqlite3*); - int (*exec)(sqlite3*,const char*,sqlite3_callback,void*,char**); - int (*expired)(sqlite3_stmt*); - int (*finalize)(sqlite3_stmt*pStmt); - void (*free)(void*); - void (*free_table)(char**result); - int (*get_autocommit)(sqlite3*); - void * (*get_auxdata)(sqlite3_context*,int); - int (*get_table)(sqlite3*,const char*,char***,int*,int*,char**); - int (*global_recover)(void); - void (*interruptx)(sqlite3*); - sqlite_int64 (*last_insert_rowid)(sqlite3*); - const char * (*libversion)(void); - int (*libversion_number)(void); - void *(*malloc)(int); - char * (*mprintf)(const char*,...); - int (*open)(const char*,sqlite3**); - int (*open16)(const void*,sqlite3**); - int (*prepare)(sqlite3*,const char*,int,sqlite3_stmt**,const char**); - int (*prepare16)(sqlite3*,const void*,int,sqlite3_stmt**,const void**); - void * (*profile)(sqlite3*,void(*)(void*,const char*,sqlite_uint64),void*); - void (*progress_handler)(sqlite3*,int,int(*)(void*),void*); - void *(*realloc)(void*,int); - int (*reset)(sqlite3_stmt*pStmt); - void (*result_blob)(sqlite3_context*,const void*,int,void(*)(void*)); - void (*result_double)(sqlite3_context*,double); - void (*result_error)(sqlite3_context*,const char*,int); - void (*result_error16)(sqlite3_context*,const void*,int); - void (*result_int)(sqlite3_context*,int); - void (*result_int64)(sqlite3_context*,sqlite_int64); - void (*result_null)(sqlite3_context*); - void (*result_text)(sqlite3_context*,const char*,int,void(*)(void*)); - void (*result_text16)(sqlite3_context*,const void*,int,void(*)(void*)); - void (*result_text16be)(sqlite3_context*,const void*,int,void(*)(void*)); - void (*result_text16le)(sqlite3_context*,const void*,int,void(*)(void*)); - void (*result_value)(sqlite3_context*,sqlite3_value*); - void * (*rollback_hook)(sqlite3*,void(*)(void*),void*); - int (*set_authorizer)(sqlite3*,int(*)(void*,int,const char*,const char*,const char*,const char*),void*); - void (*set_auxdata)(sqlite3_context*,int,void*,void (*)(void*)); - char * (*snprintf)(int,char*,const char*,...); - int (*step)(sqlite3_stmt*); - int (*table_column_metadata)(sqlite3*,const char*,const char*,const char*,char const**,char const**,int*,int*,int*); - void (*thread_cleanup)(void); - int (*total_changes)(sqlite3*); - void * (*trace)(sqlite3*,void(*xTrace)(void*,const char*),void*); - int (*transfer_bindings)(sqlite3_stmt*,sqlite3_stmt*); - void * (*update_hook)(sqlite3*,void(*)(void*,int ,char const*,char const*,sqlite_int64),void*); - void * (*user_data)(sqlite3_context*); - const void * (*value_blob)(sqlite3_value*); - int (*value_bytes)(sqlite3_value*); - int (*value_bytes16)(sqlite3_value*); - double (*value_double)(sqlite3_value*); - int (*value_int)(sqlite3_value*); - sqlite_int64 (*value_int64)(sqlite3_value*); - int (*value_numeric_type)(sqlite3_value*); - const unsigned char * (*value_text)(sqlite3_value*); - const void * (*value_text16)(sqlite3_value*); - const void * (*value_text16be)(sqlite3_value*); - const void * (*value_text16le)(sqlite3_value*); - int (*value_type)(sqlite3_value*); - char *(*vmprintf)(const char*,va_list); - /* Added ??? */ - int (*overload_function)(sqlite3*, const char *zFuncName, int nArg); - /* Added by 3.3.13 */ - int (*prepare_v2)(sqlite3*,const char*,int,sqlite3_stmt**,const char**); - int (*prepare16_v2)(sqlite3*,const void*,int,sqlite3_stmt**,const void**); - int (*clear_bindings)(sqlite3_stmt*); - /* Added by 3.4.1 */ - int (*create_module_v2)(sqlite3*,const char*,const sqlite3_module*,void*,void (*xDestroy)(void *)); - /* Added by 3.5.0 */ - int (*bind_zeroblob)(sqlite3_stmt*,int,int); - int (*blob_bytes)(sqlite3_blob*); - int (*blob_close)(sqlite3_blob*); - int (*blob_open)(sqlite3*,const char*,const char*,const char*,sqlite3_int64,int,sqlite3_blob**); - int (*blob_read)(sqlite3_blob*,void*,int,int); - int (*blob_write)(sqlite3_blob*,const void*,int,int); - int (*create_collation_v2)(sqlite3*,const char*,int,void*,int(*)(void*,int,const void*,int,const void*),void(*)(void*)); - int (*file_control)(sqlite3*,const char*,int,void*); - sqlite3_int64 (*memory_highwater)(int); - sqlite3_int64 (*memory_used)(void); - sqlite3_mutex *(*mutex_alloc)(int); - void (*mutex_enter)(sqlite3_mutex*); - void (*mutex_free)(sqlite3_mutex*); - void (*mutex_leave)(sqlite3_mutex*); - int (*mutex_try)(sqlite3_mutex*); - int (*open_v2)(const char*,sqlite3**,int,const char*); - int (*release_memory)(int); - void (*result_error_nomem)(sqlite3_context*); - void (*result_error_toobig)(sqlite3_context*); - int (*sleep)(int); - void (*soft_heap_limit)(int); - sqlite3_vfs *(*vfs_find)(const char*); - int (*vfs_register)(sqlite3_vfs*,int); - int (*vfs_unregister)(sqlite3_vfs*); - int (*xthreadsafe)(void); - void (*result_zeroblob)(sqlite3_context*,int); - void (*result_error_code)(sqlite3_context*,int); - int (*test_control)(int, ...); - void (*randomness)(int,void*); - sqlite3 *(*context_db_handle)(sqlite3_context*); - int (*extended_result_codes)(sqlite3*,int); - int (*limit)(sqlite3*,int,int); - sqlite3_stmt *(*next_stmt)(sqlite3*,sqlite3_stmt*); - const char *(*sql)(sqlite3_stmt*); - int (*status)(int,int*,int*,int); -}; +SQLITE_PRIVATE int sqlite3AuthReadCol( + Parse *pParse, /* The parser context */ + const char *zTab, /* Table name */ + const char *zCol, /* Column name */ + int iDb /* Index of containing database. */ +){ + sqlite3 *db = pParse->db; /* Database handle */ + char *zDb = db->aDb[iDb].zName; /* Name of attached database */ + int rc; /* Auth callback return code */ + + rc = db->xAuth(db->pAuthArg, SQLITE_READ, zTab,zCol,zDb,pParse->zAuthContext); + if( rc==SQLITE_DENY ){ + if( db->nDb>2 || iDb!=0 ){ + sqlite3ErrorMsg(pParse, "access to %s.%s.%s is prohibited",zDb,zTab,zCol); + }else{ + sqlite3ErrorMsg(pParse, "access to %s.%s is prohibited", zTab, zCol); + } + pParse->rc = SQLITE_AUTH; + }else if( rc!=SQLITE_IGNORE && rc!=SQLITE_OK ){ + sqliteAuthBadReturnCode(pParse); + } + return rc; +} /* -** The following macros redefine the API routines so that they are -** redirected throught the global sqlite3_api structure. +** The pExpr should be a TK_COLUMN expression. The table referred to +** is in pTabList or else it is the NEW or OLD table of a trigger. +** Check to see if it is OK to read this particular column. ** -** This header file is also used by the loadext.c source file -** (part of the main SQLite library - not an extension) so that -** it can get access to the sqlite3_api_routines structure -** definition. But the main library does not want to redefine -** the API. So the redefinition macros are only valid if the -** SQLITE_CORE macros is undefined. +** If the auth function returns SQLITE_IGNORE, change the TK_COLUMN +** instruction into a TK_NULL. If the auth function returns SQLITE_DENY, +** then generate an error. */ -#ifndef SQLITE_CORE -#define sqlite3_aggregate_context sqlite3_api->aggregate_context -#ifndef SQLITE_OMIT_DEPRECATED -#define sqlite3_aggregate_count sqlite3_api->aggregate_count -#endif -#define sqlite3_bind_blob sqlite3_api->bind_blob -#define sqlite3_bind_double sqlite3_api->bind_double -#define sqlite3_bind_int sqlite3_api->bind_int -#define sqlite3_bind_int64 sqlite3_api->bind_int64 -#define sqlite3_bind_null sqlite3_api->bind_null -#define sqlite3_bind_parameter_count sqlite3_api->bind_parameter_count -#define sqlite3_bind_parameter_index sqlite3_api->bind_parameter_index -#define sqlite3_bind_parameter_name sqlite3_api->bind_parameter_name -#define sqlite3_bind_text sqlite3_api->bind_text -#define sqlite3_bind_text16 sqlite3_api->bind_text16 -#define sqlite3_bind_value sqlite3_api->bind_value -#define sqlite3_busy_handler sqlite3_api->busy_handler -#define sqlite3_busy_timeout sqlite3_api->busy_timeout -#define sqlite3_changes sqlite3_api->changes -#define sqlite3_close sqlite3_api->close -#define sqlite3_collation_needed sqlite3_api->collation_needed -#define sqlite3_collation_needed16 sqlite3_api->collation_needed16 -#define sqlite3_column_blob sqlite3_api->column_blob -#define sqlite3_column_bytes sqlite3_api->column_bytes -#define sqlite3_column_bytes16 sqlite3_api->column_bytes16 -#define sqlite3_column_count sqlite3_api->column_count -#define sqlite3_column_database_name sqlite3_api->column_database_name -#define sqlite3_column_database_name16 sqlite3_api->column_database_name16 -#define sqlite3_column_decltype sqlite3_api->column_decltype -#define sqlite3_column_decltype16 sqlite3_api->column_decltype16 -#define sqlite3_column_double sqlite3_api->column_double -#define sqlite3_column_int sqlite3_api->column_int -#define sqlite3_column_int64 sqlite3_api->column_int64 -#define sqlite3_column_name sqlite3_api->column_name -#define sqlite3_column_name16 sqlite3_api->column_name16 -#define sqlite3_column_origin_name sqlite3_api->column_origin_name -#define sqlite3_column_origin_name16 sqlite3_api->column_origin_name16 -#define sqlite3_column_table_name sqlite3_api->column_table_name -#define sqlite3_column_table_name16 sqlite3_api->column_table_name16 -#define sqlite3_column_text sqlite3_api->column_text -#define sqlite3_column_text16 sqlite3_api->column_text16 -#define sqlite3_column_type sqlite3_api->column_type -#define sqlite3_column_value sqlite3_api->column_value -#define sqlite3_commit_hook sqlite3_api->commit_hook -#define sqlite3_complete sqlite3_api->complete -#define sqlite3_complete16 sqlite3_api->complete16 -#define sqlite3_create_collation sqlite3_api->create_collation -#define sqlite3_create_collation16 sqlite3_api->create_collation16 -#define sqlite3_create_function sqlite3_api->create_function -#define sqlite3_create_function16 sqlite3_api->create_function16 -#define sqlite3_create_module sqlite3_api->create_module -#define sqlite3_create_module_v2 sqlite3_api->create_module_v2 -#define sqlite3_data_count sqlite3_api->data_count -#define sqlite3_db_handle sqlite3_api->db_handle -#define sqlite3_declare_vtab sqlite3_api->declare_vtab -#define sqlite3_enable_shared_cache sqlite3_api->enable_shared_cache -#define sqlite3_errcode sqlite3_api->errcode -#define sqlite3_errmsg sqlite3_api->errmsg -#define sqlite3_errmsg16 sqlite3_api->errmsg16 -#define sqlite3_exec sqlite3_api->exec -#ifndef SQLITE_OMIT_DEPRECATED -#define sqlite3_expired sqlite3_api->expired -#endif -#define sqlite3_finalize sqlite3_api->finalize -#define sqlite3_free sqlite3_api->free -#define sqlite3_free_table sqlite3_api->free_table -#define sqlite3_get_autocommit sqlite3_api->get_autocommit -#define sqlite3_get_auxdata sqlite3_api->get_auxdata -#define sqlite3_get_table sqlite3_api->get_table -#ifndef SQLITE_OMIT_DEPRECATED -#define sqlite3_global_recover sqlite3_api->global_recover -#endif -#define sqlite3_interrupt sqlite3_api->interruptx -#define sqlite3_last_insert_rowid sqlite3_api->last_insert_rowid -#define sqlite3_libversion sqlite3_api->libversion -#define sqlite3_libversion_number sqlite3_api->libversion_number -#define sqlite3_malloc sqlite3_api->malloc -#define sqlite3_mprintf sqlite3_api->mprintf -#define sqlite3_open sqlite3_api->open -#define sqlite3_open16 sqlite3_api->open16 -#define sqlite3_prepare sqlite3_api->prepare -#define sqlite3_prepare16 sqlite3_api->prepare16 -#define sqlite3_prepare_v2 sqlite3_api->prepare_v2 -#define sqlite3_prepare16_v2 sqlite3_api->prepare16_v2 -#define sqlite3_profile sqlite3_api->profile -#define sqlite3_progress_handler sqlite3_api->progress_handler -#define sqlite3_realloc sqlite3_api->realloc -#define sqlite3_reset sqlite3_api->reset -#define sqlite3_result_blob sqlite3_api->result_blob -#define sqlite3_result_double sqlite3_api->result_double -#define sqlite3_result_error sqlite3_api->result_error -#define sqlite3_result_error16 sqlite3_api->result_error16 -#define sqlite3_result_int sqlite3_api->result_int -#define sqlite3_result_int64 sqlite3_api->result_int64 -#define sqlite3_result_null sqlite3_api->result_null -#define sqlite3_result_text sqlite3_api->result_text -#define sqlite3_result_text16 sqlite3_api->result_text16 -#define sqlite3_result_text16be sqlite3_api->result_text16be -#define sqlite3_result_text16le sqlite3_api->result_text16le -#define sqlite3_result_value sqlite3_api->result_value -#define sqlite3_rollback_hook sqlite3_api->rollback_hook -#define sqlite3_set_authorizer sqlite3_api->set_authorizer -#define sqlite3_set_auxdata sqlite3_api->set_auxdata -#define sqlite3_snprintf sqlite3_api->snprintf -#define sqlite3_step sqlite3_api->step -#define sqlite3_table_column_metadata sqlite3_api->table_column_metadata -#define sqlite3_thread_cleanup sqlite3_api->thread_cleanup -#define sqlite3_total_changes sqlite3_api->total_changes -#define sqlite3_trace sqlite3_api->trace -#ifndef SQLITE_OMIT_DEPRECATED -#define sqlite3_transfer_bindings sqlite3_api->transfer_bindings -#endif -#define sqlite3_update_hook sqlite3_api->update_hook -#define sqlite3_user_data sqlite3_api->user_data -#define sqlite3_value_blob sqlite3_api->value_blob -#define sqlite3_value_bytes sqlite3_api->value_bytes -#define sqlite3_value_bytes16 sqlite3_api->value_bytes16 -#define sqlite3_value_double sqlite3_api->value_double -#define sqlite3_value_int sqlite3_api->value_int -#define sqlite3_value_int64 sqlite3_api->value_int64 -#define sqlite3_value_numeric_type sqlite3_api->value_numeric_type -#define sqlite3_value_text sqlite3_api->value_text -#define sqlite3_value_text16 sqlite3_api->value_text16 -#define sqlite3_value_text16be sqlite3_api->value_text16be -#define sqlite3_value_text16le sqlite3_api->value_text16le -#define sqlite3_value_type sqlite3_api->value_type -#define sqlite3_vmprintf sqlite3_api->vmprintf -#define sqlite3_overload_function sqlite3_api->overload_function -#define sqlite3_prepare_v2 sqlite3_api->prepare_v2 -#define sqlite3_prepare16_v2 sqlite3_api->prepare16_v2 -#define sqlite3_clear_bindings sqlite3_api->clear_bindings -#define sqlite3_bind_zeroblob sqlite3_api->bind_zeroblob -#define sqlite3_blob_bytes sqlite3_api->blob_bytes -#define sqlite3_blob_close sqlite3_api->blob_close -#define sqlite3_blob_open sqlite3_api->blob_open -#define sqlite3_blob_read sqlite3_api->blob_read -#define sqlite3_blob_write sqlite3_api->blob_write -#define sqlite3_create_collation_v2 sqlite3_api->create_collation_v2 -#define sqlite3_file_control sqlite3_api->file_control -#define sqlite3_memory_highwater sqlite3_api->memory_highwater -#define sqlite3_memory_used sqlite3_api->memory_used -#define sqlite3_mutex_alloc sqlite3_api->mutex_alloc -#define sqlite3_mutex_enter sqlite3_api->mutex_enter -#define sqlite3_mutex_free sqlite3_api->mutex_free -#define sqlite3_mutex_leave sqlite3_api->mutex_leave -#define sqlite3_mutex_try sqlite3_api->mutex_try -#define sqlite3_open_v2 sqlite3_api->open_v2 -#define sqlite3_release_memory sqlite3_api->release_memory -#define sqlite3_result_error_nomem sqlite3_api->result_error_nomem -#define sqlite3_result_error_toobig sqlite3_api->result_error_toobig -#define sqlite3_sleep sqlite3_api->sleep -#define sqlite3_soft_heap_limit sqlite3_api->soft_heap_limit -#define sqlite3_vfs_find sqlite3_api->vfs_find -#define sqlite3_vfs_register sqlite3_api->vfs_register -#define sqlite3_vfs_unregister sqlite3_api->vfs_unregister -#define sqlite3_threadsafe sqlite3_api->xthreadsafe -#define sqlite3_result_zeroblob sqlite3_api->result_zeroblob -#define sqlite3_result_error_code sqlite3_api->result_error_code -#define sqlite3_test_control sqlite3_api->test_control -#define sqlite3_randomness sqlite3_api->randomness -#define sqlite3_context_db_handle sqlite3_api->context_db_handle -#define sqlite3_extended_result_codes sqlite3_api->extended_result_codes -#define sqlite3_limit sqlite3_api->limit -#define sqlite3_next_stmt sqlite3_api->next_stmt -#define sqlite3_sql sqlite3_api->sql -#define sqlite3_status sqlite3_api->status -#endif /* SQLITE_CORE */ - -#define SQLITE_EXTENSION_INIT1 const sqlite3_api_routines *sqlite3_api = 0; -#define SQLITE_EXTENSION_INIT2(v) sqlite3_api = v; +SQLITE_PRIVATE void sqlite3AuthRead( + Parse *pParse, /* The parser context */ + Expr *pExpr, /* The expression to check authorization on */ + Schema *pSchema, /* The schema of the expression */ + SrcList *pTabList /* All table that pExpr might refer to */ +){ + sqlite3 *db = pParse->db; + Table *pTab = 0; /* The table being read */ + const char *zCol; /* Name of the column of the table */ + int iSrc; /* Index in pTabList->a[] of table being read */ + int iDb; /* The index of the database the expression refers to */ + int iCol; /* Index of column in table */ -#endif /* _SQLITE3EXT_H_ */ + if( db->xAuth==0 ) return; + iDb = sqlite3SchemaToIndex(pParse->db, pSchema); + if( iDb<0 ){ + /* An attempt to read a column out of a subquery or other + ** temporary table. */ + return; + } -/************** End of sqlite3ext.h ******************************************/ -/************** Continuing where we left off in loadext.c ********************/ + assert( pExpr->op==TK_COLUMN || pExpr->op==TK_TRIGGER ); + if( pExpr->op==TK_TRIGGER ){ + pTab = pParse->pTriggerTab; + }else{ + assert( pTabList ); + for(iSrc=0; ALWAYS(iSrcnSrc); iSrc++){ + if( pExpr->iTable==pTabList->a[iSrc].iCursor ){ + pTab = pTabList->a[iSrc].pTab; + break; + } + } + } + iCol = pExpr->iColumn; + if( NEVER(pTab==0) ) return; -#ifndef SQLITE_OMIT_LOAD_EXTENSION + if( iCol>=0 ){ + assert( iColnCol ); + zCol = pTab->aCol[iCol].zName; + }else if( pTab->iPKey>=0 ){ + assert( pTab->iPKeynCol ); + zCol = pTab->aCol[pTab->iPKey].zName; + }else{ + zCol = "ROWID"; + } + assert( iDb>=0 && iDbnDb ); + if( SQLITE_IGNORE==sqlite3AuthReadCol(pParse, pTab->zName, zCol, iDb) ){ + pExpr->op = TK_NULL; + } +} /* -** Some API routines are omitted when various features are -** excluded from a build of SQLite. Substitute a NULL pointer -** for any missing APIs. +** Do an authorization check using the code and arguments given. Return +** either SQLITE_OK (zero) or SQLITE_IGNORE or SQLITE_DENY. If SQLITE_DENY +** is returned, then the error count and error message in pParse are +** modified appropriately. */ -#ifndef SQLITE_ENABLE_COLUMN_METADATA -# define sqlite3_column_database_name 0 -# define sqlite3_column_database_name16 0 -# define sqlite3_column_table_name 0 -# define sqlite3_column_table_name16 0 -# define sqlite3_column_origin_name 0 -# define sqlite3_column_origin_name16 0 -# define sqlite3_table_column_metadata 0 -#endif - -#ifdef SQLITE_OMIT_AUTHORIZATION -# define sqlite3_set_authorizer 0 -#endif - -#ifdef SQLITE_OMIT_UTF16 -# define sqlite3_bind_text16 0 -# define sqlite3_collation_needed16 0 -# define sqlite3_column_decltype16 0 -# define sqlite3_column_name16 0 -# define sqlite3_column_text16 0 -# define sqlite3_complete16 0 -# define sqlite3_create_collation16 0 -# define sqlite3_create_function16 0 -# define sqlite3_errmsg16 0 -# define sqlite3_open16 0 -# define sqlite3_prepare16 0 -# define sqlite3_prepare16_v2 0 -# define sqlite3_result_error16 0 -# define sqlite3_result_text16 0 -# define sqlite3_result_text16be 0 -# define sqlite3_result_text16le 0 -# define sqlite3_value_text16 0 -# define sqlite3_value_text16be 0 -# define sqlite3_value_text16le 0 -# define sqlite3_column_database_name16 0 -# define sqlite3_column_table_name16 0 -# define sqlite3_column_origin_name16 0 -#endif - -#ifdef SQLITE_OMIT_COMPLETE -# define sqlite3_complete 0 -# define sqlite3_complete16 0 -#endif - -#ifdef SQLITE_OMIT_PROGRESS_CALLBACK -# define sqlite3_progress_handler 0 -#endif +SQLITE_PRIVATE int sqlite3AuthCheck( + Parse *pParse, + int code, + const char *zArg1, + const char *zArg2, + const char *zArg3 +){ + sqlite3 *db = pParse->db; + int rc; -#ifdef SQLITE_OMIT_VIRTUALTABLE -# define sqlite3_create_module 0 -# define sqlite3_create_module_v2 0 -# define sqlite3_declare_vtab 0 -#endif + /* Don't do any authorization checks if the database is initialising + ** or if the parser is being invoked from within sqlite3_declare_vtab. + */ + if( db->init.busy || IN_DECLARE_VTAB ){ + return SQLITE_OK; + } -#ifdef SQLITE_OMIT_SHARED_CACHE -# define sqlite3_enable_shared_cache 0 -#endif + if( db->xAuth==0 ){ + return SQLITE_OK; + } + rc = db->xAuth(db->pAuthArg, code, zArg1, zArg2, zArg3, pParse->zAuthContext); + if( rc==SQLITE_DENY ){ + sqlite3ErrorMsg(pParse, "not authorized"); + pParse->rc = SQLITE_AUTH; + }else if( rc!=SQLITE_OK && rc!=SQLITE_IGNORE ){ + rc = SQLITE_DENY; + sqliteAuthBadReturnCode(pParse); + } + return rc; +} -#ifdef SQLITE_OMIT_TRACE -# define sqlite3_profile 0 -# define sqlite3_trace 0 -#endif +/* +** Push an authorization context. After this routine is called, the +** zArg3 argument to authorization callbacks will be zContext until +** popped. Or if pParse==0, this routine is a no-op. +*/ +SQLITE_PRIVATE void sqlite3AuthContextPush( + Parse *pParse, + AuthContext *pContext, + const char *zContext +){ + assert( pParse ); + pContext->pParse = pParse; + pContext->zAuthContext = pParse->zAuthContext; + pParse->zAuthContext = zContext; +} -#ifdef SQLITE_OMIT_GET_TABLE -# define sqlite3_free_table 0 -# define sqlite3_get_table 0 -#endif +/* +** Pop an authorization context that was previously pushed +** by sqlite3AuthContextPush +*/ +SQLITE_PRIVATE void sqlite3AuthContextPop(AuthContext *pContext){ + if( pContext->pParse ){ + pContext->pParse->zAuthContext = pContext->zAuthContext; + pContext->pParse = 0; + } +} -#ifdef SQLITE_OMIT_INCRBLOB -#define sqlite3_bind_zeroblob 0 -#define sqlite3_blob_bytes 0 -#define sqlite3_blob_close 0 -#define sqlite3_blob_open 0 -#define sqlite3_blob_read 0 -#define sqlite3_blob_write 0 -#endif +#endif /* SQLITE_OMIT_AUTHORIZATION */ +/************** End of auth.c ************************************************/ +/************** Begin file build.c *******************************************/ /* -** The following structure contains pointers to all SQLite API routines. -** A pointer to this structure is passed into extensions when they are -** loaded so that the extension can make calls back into the SQLite -** library. +** 2001 September 15 ** -** When adding new APIs, add them to the bottom of this structure -** in order to preserve backwards compatibility. +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: ** -** Extensions that use newer APIs should first call the -** sqlite3_libversion_number() to make sure that the API they -** intend to use is supported by the library. Extensions should -** also check to make sure that the pointer to the function is -** not NULL before calling it. +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** This file contains C code routines that are called by the SQLite parser +** when syntax rules are reduced. The routines in this file handle the +** following kinds of SQL syntax: +** +** CREATE TABLE +** DROP TABLE +** CREATE INDEX +** DROP INDEX +** creating ID lists +** BEGIN TRANSACTION +** COMMIT +** ROLLBACK */ -static const sqlite3_api_routines sqlite3Apis = { - sqlite3_aggregate_context, -#ifndef SQLITE_OMIT_DEPRECATED - sqlite3_aggregate_count, -#else - 0, -#endif - sqlite3_bind_blob, - sqlite3_bind_double, - sqlite3_bind_int, - sqlite3_bind_int64, - sqlite3_bind_null, - sqlite3_bind_parameter_count, - sqlite3_bind_parameter_index, - sqlite3_bind_parameter_name, - sqlite3_bind_text, - sqlite3_bind_text16, - sqlite3_bind_value, - sqlite3_busy_handler, - sqlite3_busy_timeout, - sqlite3_changes, - sqlite3_close, - sqlite3_collation_needed, - sqlite3_collation_needed16, - sqlite3_column_blob, - sqlite3_column_bytes, - sqlite3_column_bytes16, - sqlite3_column_count, - sqlite3_column_database_name, - sqlite3_column_database_name16, - sqlite3_column_decltype, - sqlite3_column_decltype16, - sqlite3_column_double, - sqlite3_column_int, - sqlite3_column_int64, - sqlite3_column_name, - sqlite3_column_name16, - sqlite3_column_origin_name, - sqlite3_column_origin_name16, - sqlite3_column_table_name, - sqlite3_column_table_name16, - sqlite3_column_text, - sqlite3_column_text16, - sqlite3_column_type, - sqlite3_column_value, - sqlite3_commit_hook, - sqlite3_complete, - sqlite3_complete16, - sqlite3_create_collation, - sqlite3_create_collation16, - sqlite3_create_function, - sqlite3_create_function16, - sqlite3_create_module, - sqlite3_data_count, - sqlite3_db_handle, - sqlite3_declare_vtab, - sqlite3_enable_shared_cache, - sqlite3_errcode, - sqlite3_errmsg, - sqlite3_errmsg16, - sqlite3_exec, -#ifndef SQLITE_OMIT_DEPRECATED - sqlite3_expired, -#else - 0, -#endif - sqlite3_finalize, - sqlite3_free, - sqlite3_free_table, - sqlite3_get_autocommit, - sqlite3_get_auxdata, - sqlite3_get_table, - 0, /* Was sqlite3_global_recover(), but that function is deprecated */ - sqlite3_interrupt, - sqlite3_last_insert_rowid, - sqlite3_libversion, - sqlite3_libversion_number, - sqlite3_malloc, - sqlite3_mprintf, - sqlite3_open, - sqlite3_open16, - sqlite3_prepare, - sqlite3_prepare16, - sqlite3_profile, - sqlite3_progress_handler, - sqlite3_realloc, - sqlite3_reset, - sqlite3_result_blob, - sqlite3_result_double, - sqlite3_result_error, - sqlite3_result_error16, - sqlite3_result_int, - sqlite3_result_int64, - sqlite3_result_null, - sqlite3_result_text, - sqlite3_result_text16, - sqlite3_result_text16be, - sqlite3_result_text16le, - sqlite3_result_value, - sqlite3_rollback_hook, - sqlite3_set_authorizer, - sqlite3_set_auxdata, - sqlite3_snprintf, - sqlite3_step, - sqlite3_table_column_metadata, -#ifndef SQLITE_OMIT_DEPRECATED - sqlite3_thread_cleanup, -#else - 0, -#endif - sqlite3_total_changes, - sqlite3_trace, -#ifndef SQLITE_OMIT_DEPRECATED - sqlite3_transfer_bindings, -#else - 0, -#endif - sqlite3_update_hook, - sqlite3_user_data, - sqlite3_value_blob, - sqlite3_value_bytes, - sqlite3_value_bytes16, - sqlite3_value_double, - sqlite3_value_int, - sqlite3_value_int64, - sqlite3_value_numeric_type, - sqlite3_value_text, - sqlite3_value_text16, - sqlite3_value_text16be, - sqlite3_value_text16le, - sqlite3_value_type, - sqlite3_vmprintf, - /* - ** The original API set ends here. All extensions can call any - ** of the APIs above provided that the pointer is not NULL. But - ** before calling APIs that follow, extension should check the - ** sqlite3_libversion_number() to make sure they are dealing with - ** a library that is new enough to support that API. - ************************************************************************* - */ - sqlite3_overload_function, - - /* - ** Added after 3.3.13 - */ - sqlite3_prepare_v2, - sqlite3_prepare16_v2, - sqlite3_clear_bindings, - - /* - ** Added for 3.4.1 - */ - sqlite3_create_module_v2, - - /* - ** Added for 3.5.0 - */ - sqlite3_bind_zeroblob, - sqlite3_blob_bytes, - sqlite3_blob_close, - sqlite3_blob_open, - sqlite3_blob_read, - sqlite3_blob_write, - sqlite3_create_collation_v2, - sqlite3_file_control, - sqlite3_memory_highwater, - sqlite3_memory_used, -#ifdef SQLITE_MUTEX_OMIT - 0, - 0, - 0, - 0, - 0, -#else - sqlite3_mutex_alloc, - sqlite3_mutex_enter, - sqlite3_mutex_free, - sqlite3_mutex_leave, - sqlite3_mutex_try, -#endif - sqlite3_open_v2, - sqlite3_release_memory, - sqlite3_result_error_nomem, - sqlite3_result_error_toobig, - sqlite3_sleep, - sqlite3_soft_heap_limit, - sqlite3_vfs_find, - sqlite3_vfs_register, - sqlite3_vfs_unregister, - /* - ** Added for 3.5.8 - */ - sqlite3_threadsafe, - sqlite3_result_zeroblob, - sqlite3_result_error_code, - sqlite3_test_control, - sqlite3_randomness, - sqlite3_context_db_handle, +/* +** This routine is called when a new SQL statement is beginning to +** be parsed. Initialize the pParse structure as needed. +*/ +SQLITE_PRIVATE void sqlite3BeginParse(Parse *pParse, int explainFlag){ + pParse->explain = (u8)explainFlag; + pParse->nVar = 0; +} - /* - ** Added for 3.6.0 - */ - sqlite3_extended_result_codes, - sqlite3_limit, - sqlite3_next_stmt, - sqlite3_sql, - sqlite3_status, +#ifndef SQLITE_OMIT_SHARED_CACHE +/* +** The TableLock structure is only used by the sqlite3TableLock() and +** codeTableLocks() functions. +*/ +struct TableLock { + int iDb; /* The database containing the table to be locked */ + int iTab; /* The root page of the table to be locked */ + u8 isWriteLock; /* True for write lock. False for a read lock */ + const char *zName; /* Name of the table */ }; /* -** Attempt to load an SQLite extension library contained in the file -** zFile. The entry point is zProc. zProc may be 0 in which case a -** default entry point name (sqlite3_extension_init) is used. Use -** of the default name is recommended. +** Record the fact that we want to lock a table at run-time. ** -** Return SQLITE_OK on success and SQLITE_ERROR if something goes wrong. +** The table to be locked has root page iTab and is found in database iDb. +** A read or a write lock can be taken depending on isWritelock. ** -** If an error occurs and pzErrMsg is not 0, then fill *pzErrMsg with -** error message text. The calling function should free this memory -** by calling sqlite3DbFree(db, ). +** This routine just records the fact that the lock is desired. The +** code to make the lock occur is generated by a later call to +** codeTableLocks() which occurs during sqlite3FinishCoding(). */ -static int sqlite3LoadExtension( - sqlite3 *db, /* Load the extension into this database connection */ - const char *zFile, /* Name of the shared library containing extension */ - const char *zProc, /* Entry point. Use "sqlite3_extension_init" if 0 */ - char **pzErrMsg /* Put error message here if not 0 */ +SQLITE_PRIVATE void sqlite3TableLock( + Parse *pParse, /* Parsing context */ + int iDb, /* Index of the database containing the table to lock */ + int iTab, /* Root page number of the table to be locked */ + u8 isWriteLock, /* True for a write lock */ + const char *zName /* Name of the table to be locked */ ){ - sqlite3_vfs *pVfs = db->pVfs; - void *handle; - int (*xInit)(sqlite3*,char**,const sqlite3_api_routines*); - char *zErrmsg = 0; - void **aHandle; - const int nMsg = 300; - - if( pzErrMsg ) *pzErrMsg = 0; - - /* Ticket #1863. To avoid a creating security problems for older - ** applications that relink against newer versions of SQLite, the - ** ability to run load_extension is turned off by default. One - ** must call sqlite3_enable_load_extension() to turn on extension - ** loading. Otherwise you get the following error. - */ - if( (db->flags & SQLITE_LoadExtension)==0 ){ - if( pzErrMsg ){ - *pzErrMsg = sqlite3_mprintf("not authorized"); - } - return SQLITE_ERROR; - } - - if( zProc==0 ){ - zProc = "sqlite3_extension_init"; - } + Parse *pToplevel = sqlite3ParseToplevel(pParse); + int i; + int nBytes; + TableLock *p; + assert( iDb>=0 ); - handle = sqlite3OsDlOpen(pVfs, zFile); - if( handle==0 ){ - if( pzErrMsg ){ - zErrmsg = sqlite3StackAllocZero(db, nMsg); - if( zErrmsg ){ - sqlite3_snprintf(nMsg, zErrmsg, - "unable to open shared library [%s]", zFile); - sqlite3OsDlError(pVfs, nMsg-1, zErrmsg); - *pzErrMsg = sqlite3DbStrDup(0, zErrmsg); - sqlite3StackFree(db, zErrmsg); - } - } - return SQLITE_ERROR; - } - xInit = (int(*)(sqlite3*,char**,const sqlite3_api_routines*)) - sqlite3OsDlSym(pVfs, handle, zProc); - if( xInit==0 ){ - if( pzErrMsg ){ - zErrmsg = sqlite3StackAllocZero(db, nMsg); - if( zErrmsg ){ - sqlite3_snprintf(nMsg, zErrmsg, - "no entry point [%s] in shared library [%s]", zProc,zFile); - sqlite3OsDlError(pVfs, nMsg-1, zErrmsg); - *pzErrMsg = sqlite3DbStrDup(0, zErrmsg); - sqlite3StackFree(db, zErrmsg); - } - sqlite3OsDlClose(pVfs, handle); - } - return SQLITE_ERROR; - }else if( xInit(db, &zErrmsg, &sqlite3Apis) ){ - if( pzErrMsg ){ - *pzErrMsg = sqlite3_mprintf("error during initialization: %s", zErrmsg); + for(i=0; inTableLock; i++){ + p = &pToplevel->aTableLock[i]; + if( p->iDb==iDb && p->iTab==iTab ){ + p->isWriteLock = (p->isWriteLock || isWriteLock); + return; } - sqlite3_free(zErrmsg); - sqlite3OsDlClose(pVfs, handle); - return SQLITE_ERROR; } - /* Append the new shared library handle to the db->aExtension array. */ - aHandle = sqlite3DbMallocZero(db, sizeof(handle)*(db->nExtension+1)); - if( aHandle==0 ){ - return SQLITE_NOMEM; - } - if( db->nExtension>0 ){ - memcpy(aHandle, db->aExtension, sizeof(handle)*db->nExtension); + nBytes = sizeof(TableLock) * (pToplevel->nTableLock+1); + pToplevel->aTableLock = + sqlite3DbReallocOrFree(pToplevel->db, pToplevel->aTableLock, nBytes); + if( pToplevel->aTableLock ){ + p = &pToplevel->aTableLock[pToplevel->nTableLock++]; + p->iDb = iDb; + p->iTab = iTab; + p->isWriteLock = isWriteLock; + p->zName = zName; + }else{ + pToplevel->nTableLock = 0; + pToplevel->db->mallocFailed = 1; } - sqlite3DbFree(db, db->aExtension); - db->aExtension = aHandle; - - db->aExtension[db->nExtension++] = handle; - return SQLITE_OK; -} -SQLITE_API int sqlite3_load_extension( - sqlite3 *db, /* Load the extension into this database connection */ - const char *zFile, /* Name of the shared library containing extension */ - const char *zProc, /* Entry point. Use "sqlite3_extension_init" if 0 */ - char **pzErrMsg /* Put error message here if not 0 */ -){ - int rc; - sqlite3_mutex_enter(db->mutex); - rc = sqlite3LoadExtension(db, zFile, zProc, pzErrMsg); - rc = sqlite3ApiExit(db, rc); - sqlite3_mutex_leave(db->mutex); - return rc; } /* -** Call this routine when the database connection is closing in order -** to clean up loaded extensions +** Code an OP_TableLock instruction for each table locked by the +** statement (configured by calls to sqlite3TableLock()). */ -SQLITE_PRIVATE void sqlite3CloseExtensions(sqlite3 *db){ +static void codeTableLocks(Parse *pParse){ int i; - assert( sqlite3_mutex_held(db->mutex) ); - for(i=0; inExtension; i++){ - sqlite3OsDlClose(db->pVfs, db->aExtension[i]); - } - sqlite3DbFree(db, db->aExtension); -} + Vdbe *pVdbe; -/* -** Enable or disable extension loading. Extension loading is disabled by -** default so as not to open security holes in older applications. -*/ -SQLITE_API int sqlite3_enable_load_extension(sqlite3 *db, int onoff){ - sqlite3_mutex_enter(db->mutex); - if( onoff ){ - db->flags |= SQLITE_LoadExtension; - }else{ - db->flags &= ~SQLITE_LoadExtension; + pVdbe = sqlite3GetVdbe(pParse); + assert( pVdbe!=0 ); /* sqlite3GetVdbe cannot fail: VDBE already allocated */ + + for(i=0; inTableLock; i++){ + TableLock *p = &pParse->aTableLock[i]; + int p1 = p->iDb; + sqlite3VdbeAddOp4(pVdbe, OP_TableLock, p1, p->iTab, p->isWriteLock, + p->zName, P4_STATIC); } - sqlite3_mutex_leave(db->mutex); - return SQLITE_OK; } - -#endif /* SQLITE_OMIT_LOAD_EXTENSION */ - -/* -** The auto-extension code added regardless of whether or not extension -** loading is supported. We need a dummy sqlite3Apis pointer for that -** code if regular extension loading is not available. This is that -** dummy pointer. -*/ -#ifdef SQLITE_OMIT_LOAD_EXTENSION -static const sqlite3_api_routines sqlite3Apis = { 0 }; +#else + #define codeTableLocks(x) #endif - /* -** The following object holds the list of automatically loaded -** extensions. +** This routine is called after a single SQL statement has been +** parsed and a VDBE program to execute that statement has been +** prepared. This routine puts the finishing touches on the +** VDBE program and resets the pParse structure for the next +** parse. ** -** This list is shared across threads. The SQLITE_MUTEX_STATIC_MASTER -** mutex must be held while accessing this list. +** Note that if an error occurred, it might be the case that +** no VDBE code was generated. */ -typedef struct sqlite3AutoExtList sqlite3AutoExtList; -static SQLITE_WSD struct sqlite3AutoExtList { - int nExt; /* Number of entries in aExt[] */ - void (**aExt)(void); /* Pointers to the extension init functions */ -} sqlite3Autoext = { 0, 0 }; +SQLITE_PRIVATE void sqlite3FinishCoding(Parse *pParse){ + sqlite3 *db; + Vdbe *v; -/* The "wsdAutoext" macro will resolve to the autoextension -** state vector. If writable static data is unsupported on the target, -** we have to locate the state vector at run-time. In the more common -** case where writable static data is supported, wsdStat can refer directly -** to the "sqlite3Autoext" state vector declared above. -*/ -#ifdef SQLITE_OMIT_WSD -# define wsdAutoextInit \ - sqlite3AutoExtList *x = &GLOBAL(sqlite3AutoExtList,sqlite3Autoext) -# define wsdAutoext x[0] -#else -# define wsdAutoextInit -# define wsdAutoext sqlite3Autoext -#endif + db = pParse->db; + if( db->mallocFailed ) return; + if( pParse->nested ) return; + if( pParse->nErr ) return; + /* Begin by generating some termination code at the end of the + ** vdbe program + */ + v = sqlite3GetVdbe(pParse); + assert( !pParse->isMultiWrite + || sqlite3VdbeAssertMayAbort(v, pParse->mayAbort)); + if( v ){ + sqlite3VdbeAddOp0(v, OP_Halt); -/* -** Register a statically linked extension that is automatically -** loaded by every new database connection. -*/ -SQLITE_API int sqlite3_auto_extension(void (*xInit)(void)){ - int rc = SQLITE_OK; -#ifndef SQLITE_OMIT_AUTOINIT - rc = sqlite3_initialize(); - if( rc ){ - return rc; - }else -#endif - { - int i; -#if SQLITE_THREADSAFE - sqlite3_mutex *mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER); -#endif - wsdAutoextInit; - sqlite3_mutex_enter(mutex); - for(i=0; icookieGoto>0 ){ + yDbMask mask; + int iDb; + sqlite3VdbeJumpHere(v, pParse->cookieGoto-1); + for(iDb=0, mask=1; iDbnDb; mask<<=1, iDb++){ + if( (mask & pParse->cookieMask)==0 ) continue; + sqlite3VdbeUsesBtree(v, iDb); + sqlite3VdbeAddOp2(v,OP_Transaction, iDb, (mask & pParse->writeMask)!=0); + if( db->init.busy==0 ){ + assert( sqlite3SchemaMutexHeld(db, iDb, 0) ); + sqlite3VdbeAddOp3(v, OP_VerifyCookie, + iDb, pParse->cookieValue[iDb], + db->aDb[iDb].pSchema->iGeneration); + } + } +#ifndef SQLITE_OMIT_VIRTUALTABLE + { + int i; + for(i=0; inVtabLock; i++){ + char *vtab = (char *)sqlite3GetVTable(db, pParse->apVtabLock[i]); + sqlite3VdbeAddOp4(v, OP_VBegin, 0, 0, 0, vtab, P4_VTAB); + } + pParse->nVtabLock = 0; } +#endif + + /* Once all the cookies have been verified and transactions opened, + ** obtain the required table-locks. This is a no-op unless the + ** shared-cache feature is enabled. + */ + codeTableLocks(pParse); + + /* Initialize any AUTOINCREMENT data structures required. + */ + sqlite3AutoincrementBegin(pParse); + + /* Finally, jump back to the beginning of the executable code. */ + sqlite3VdbeAddOp2(v, OP_Goto, 0, pParse->cookieGoto); } - sqlite3_mutex_leave(mutex); - assert( (rc&0xff)==rc ); - return rc; } -} -/* -** Reset the automatic extension loading mechanism. -*/ -SQLITE_API void sqlite3_reset_auto_extension(void){ -#ifndef SQLITE_OMIT_AUTOINIT - if( sqlite3_initialize()==SQLITE_OK ) + + /* Get the VDBE program ready for execution + */ + if( v && ALWAYS(pParse->nErr==0) && !db->mallocFailed ){ +#ifdef SQLITE_DEBUG + FILE *trace = (db->flags & SQLITE_VdbeTrace)!=0 ? stdout : 0; + sqlite3VdbeTrace(v, trace); #endif - { -#if SQLITE_THREADSAFE - sqlite3_mutex *mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER); -#endif - wsdAutoextInit; - sqlite3_mutex_enter(mutex); - sqlite3_free(wsdAutoext.aExt); - wsdAutoext.aExt = 0; - wsdAutoext.nExt = 0; - sqlite3_mutex_leave(mutex); + assert( pParse->iCacheLevel==0 ); /* Disables and re-enables match */ + /* A minimum of one cursor is required if autoincrement is used + * See ticket [a696379c1f08866] */ + if( pParse->pAinc!=0 && pParse->nTab==0 ) pParse->nTab = 1; + sqlite3VdbeMakeReady(v, pParse); + pParse->rc = SQLITE_DONE; + pParse->colNamesSet = 0; + }else{ + pParse->rc = SQLITE_ERROR; } + pParse->nTab = 0; + pParse->nMem = 0; + pParse->nSet = 0; + pParse->nVar = 0; + pParse->cookieMask = 0; + pParse->cookieGoto = 0; } /* -** Load all automatic extensions. +** Run the parser and code generator recursively in order to generate +** code for the SQL statement given onto the end of the pParse context +** currently under construction. When the parser is run recursively +** this way, the final OP_Halt is not appended and other initialization +** and finalization steps are omitted because those are handling by the +** outermost parser. ** -** If anything goes wrong, set an error in the database connection. +** Not everything is nestable. This facility is designed to permit +** INSERT, UPDATE, and DELETE operations against SQLITE_MASTER. Use +** care if you decide to try to use this routine for some other purposes. */ -SQLITE_PRIVATE void sqlite3AutoLoadExtensions(sqlite3 *db){ - int i; - int go = 1; - int (*xInit)(sqlite3*,char**,const sqlite3_api_routines*); +SQLITE_PRIVATE void sqlite3NestedParse(Parse *pParse, const char *zFormat, ...){ + va_list ap; + char *zSql; + char *zErrMsg = 0; + sqlite3 *db = pParse->db; +# define SAVE_SZ (sizeof(Parse) - offsetof(Parse,nVar)) + char saveBuf[SAVE_SZ]; - wsdAutoextInit; - if( wsdAutoext.nExt==0 ){ - /* Common case: early out without every having to acquire a mutex */ - return; - } - for(i=0; go; i++){ - char *zErrmsg; -#if SQLITE_THREADSAFE - sqlite3_mutex *mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER); -#endif - sqlite3_mutex_enter(mutex); - if( i>=wsdAutoext.nExt ){ - xInit = 0; - go = 0; - }else{ - xInit = (int(*)(sqlite3*,char**,const sqlite3_api_routines*)) - wsdAutoext.aExt[i]; - } - sqlite3_mutex_leave(mutex); - zErrmsg = 0; - if( xInit && xInit(db, &zErrmsg, &sqlite3Apis) ){ - sqlite3Error(db, SQLITE_ERROR, - "automatic extension loading failed: %s", zErrmsg); - go = 0; - } - sqlite3_free(zErrmsg); + if( pParse->nErr ) return; + assert( pParse->nested<10 ); /* Nesting should only be of limited depth */ + va_start(ap, zFormat); + zSql = sqlite3VMPrintf(db, zFormat, ap); + va_end(ap); + if( zSql==0 ){ + return; /* A malloc must have failed */ } + pParse->nested++; + memcpy(saveBuf, &pParse->nVar, SAVE_SZ); + memset(&pParse->nVar, 0, SAVE_SZ); + sqlite3RunParser(pParse, zSql, &zErrMsg); + sqlite3DbFree(db, zErrMsg); + sqlite3DbFree(db, zSql); + memcpy(&pParse->nVar, saveBuf, SAVE_SZ); + pParse->nested--; } -/************** End of loadext.c *********************************************/ -/************** Begin file pragma.c ******************************************/ /* -** 2003 April 6 -** -** The author disclaims copyright to this source code. In place of -** a legal notice, here is a blessing: -** -** May you do good and not evil. -** May you find forgiveness for yourself and forgive others. -** May you share freely, never taking more than you give. +** Locate the in-memory structure that describes a particular database +** table given the name of that table and (optionally) the name of the +** database containing the table. Return NULL if not found. ** -************************************************************************* -** This file contains code used to implement the PRAGMA command. +** If zDatabase is 0, all databases are searched for the table and the +** first matching table is returned. (No checking for duplicate table +** names is done.) The search order is TEMP first, then MAIN, then any +** auxiliary databases added using the ATTACH command. ** -** $Id: pragma.c,v 1.213 2009/06/19 14:06:03 drh Exp $ -*/ - -/* Ignore this whole file if pragmas are disabled +** See also sqlite3LocateTable(). */ -#if !defined(SQLITE_OMIT_PRAGMA) +SQLITE_PRIVATE Table *sqlite3FindTable(sqlite3 *db, const char *zName, const char *zDatabase){ + Table *p = 0; + int i; + int nName; + assert( zName!=0 ); + nName = sqlite3Strlen30(zName); + /* All mutexes are required for schema access. Make sure we hold them. */ + assert( zDatabase!=0 || sqlite3BtreeHoldsAllMutexes(db) ); + for(i=OMIT_TEMPDB; inDb; i++){ + int j = (i<2) ? i^1 : i; /* Search TEMP before MAIN */ + if( zDatabase!=0 && sqlite3StrICmp(zDatabase, db->aDb[j].zName) ) continue; + assert( sqlite3SchemaMutexHeld(db, j, 0) ); + p = sqlite3HashFind(&db->aDb[j].pSchema->tblHash, zName, nName); + if( p ) break; + } + return p; +} /* -** Interpret the given string as a safety level. Return 0 for OFF, -** 1 for ON or NORMAL and 2 for FULL. Return 1 for an empty or -** unrecognized string argument. +** Locate the in-memory structure that describes a particular database +** table given the name of that table and (optionally) the name of the +** database containing the table. Return NULL if not found. Also leave an +** error message in pParse->zErrMsg. ** -** Note that the values returned are one less that the values that -** should be passed into sqlite3BtreeSetSafetyLevel(). The is done -** to support legacy SQL code. The safety level used to be boolean -** and older scripts may have used numbers 0 for OFF and 1 for ON. +** The difference between this routine and sqlite3FindTable() is that this +** routine leaves an error message in pParse->zErrMsg where +** sqlite3FindTable() does not. */ -static u8 getSafetyLevel(const char *z){ - /* 123456789 123456789 */ - static const char zText[] = "onoffalseyestruefull"; - static const u8 iOffset[] = {0, 1, 2, 4, 9, 12, 16}; - static const u8 iLength[] = {2, 2, 3, 5, 3, 4, 4}; - static const u8 iValue[] = {1, 0, 0, 0, 1, 1, 2}; - int i, n; - if( sqlite3Isdigit(*z) ){ - return (u8)atoi(z); +SQLITE_PRIVATE Table *sqlite3LocateTable( + Parse *pParse, /* context in which to report errors */ + int isView, /* True if looking for a VIEW rather than a TABLE */ + const char *zName, /* Name of the table we are looking for */ + const char *zDbase /* Name of the database. Might be NULL */ +){ + Table *p; + + /* Read the database schema. If an error occurs, leave an error message + ** and code in pParse and return NULL. */ + if( SQLITE_OK!=sqlite3ReadSchema(pParse) ){ + return 0; } - n = sqlite3Strlen30(z); - for(i=0; idb, zName, zDbase); + if( p==0 ){ + const char *zMsg = isView ? "no such view" : "no such table"; + if( zDbase ){ + sqlite3ErrorMsg(pParse, "%s: %s.%s", zMsg, zDbase, zName); + }else{ + sqlite3ErrorMsg(pParse, "%s: %s", zMsg, zName); } + pParse->checkSchema = 1; } - return 1; + return p; } /* -** Interpret the given string as a boolean value. +** Locate the in-memory structure that describes +** a particular index given the name of that index +** and the name of the database that contains the index. +** Return NULL if not found. +** +** If zDatabase is 0, all databases are searched for the +** table and the first matching index is returned. (No checking +** for duplicate index names is done.) The search order is +** TEMP first, then MAIN, then any auxiliary databases added +** using the ATTACH command. */ -static u8 getBoolean(const char *z){ - return getSafetyLevel(z)&1; +SQLITE_PRIVATE Index *sqlite3FindIndex(sqlite3 *db, const char *zName, const char *zDb){ + Index *p = 0; + int i; + int nName = sqlite3Strlen30(zName); + /* All mutexes are required for schema access. Make sure we hold them. */ + assert( zDb!=0 || sqlite3BtreeHoldsAllMutexes(db) ); + for(i=OMIT_TEMPDB; inDb; i++){ + int j = (i<2) ? i^1 : i; /* Search TEMP before MAIN */ + Schema *pSchema = db->aDb[j].pSchema; + assert( pSchema ); + if( zDb && sqlite3StrICmp(zDb, db->aDb[j].zName) ) continue; + assert( sqlite3SchemaMutexHeld(db, j, 0) ); + p = sqlite3HashFind(&pSchema->idxHash, zName, nName); + if( p ) break; + } + return p; } /* -** Interpret the given string as a locking mode value. +** Reclaim the memory used by an index */ -static int getLockingMode(const char *z){ - if( z ){ - if( 0==sqlite3StrICmp(z, "exclusive") ) return PAGER_LOCKINGMODE_EXCLUSIVE; - if( 0==sqlite3StrICmp(z, "normal") ) return PAGER_LOCKINGMODE_NORMAL; +static void freeIndex(sqlite3 *db, Index *p){ +#ifndef SQLITE_OMIT_ANALYZE + sqlite3DeleteIndexSamples(db, p); +#endif + sqlite3DbFree(db, p->zColAff); + sqlite3DbFree(db, p); +} + +/* +** For the index called zIdxName which is found in the database iDb, +** unlike that index from its Table then remove the index from +** the index hash table and free all memory structures associated +** with the index. +*/ +SQLITE_PRIVATE void sqlite3UnlinkAndDeleteIndex(sqlite3 *db, int iDb, const char *zIdxName){ + Index *pIndex; + int len; + Hash *pHash; + + assert( sqlite3SchemaMutexHeld(db, iDb, 0) ); + pHash = &db->aDb[iDb].pSchema->idxHash; + len = sqlite3Strlen30(zIdxName); + pIndex = sqlite3HashInsert(pHash, zIdxName, len, 0); + if( ALWAYS(pIndex) ){ + if( pIndex->pTable->pIndex==pIndex ){ + pIndex->pTable->pIndex = pIndex->pNext; + }else{ + Index *p; + /* Justification of ALWAYS(); The index must be on the list of + ** indices. */ + p = pIndex->pTable->pIndex; + while( ALWAYS(p) && p->pNext!=pIndex ){ p = p->pNext; } + if( ALWAYS(p && p->pNext==pIndex) ){ + p->pNext = pIndex->pNext; + } + } + freeIndex(db, pIndex); } - return PAGER_LOCKINGMODE_QUERY; + db->flags |= SQLITE_InternChanges; } -#ifndef SQLITE_OMIT_AUTOVACUUM /* -** Interpret the given string as an auto-vacuum mode value. +** Look through the list of open database files in db->aDb[] and if +** any have been closed, remove them from the list. Reallocate the +** db->aDb[] structure to a smaller size, if possible. ** -** The following strings, "none", "full" and "incremental" are -** acceptable, as are their numeric equivalents: 0, 1 and 2 respectively. +** Entry 0 (the "main" database) and entry 1 (the "temp" database) +** are never candidates for being collapsed. */ -static int getAutoVacuum(const char *z){ - int i; - if( 0==sqlite3StrICmp(z, "none") ) return BTREE_AUTOVACUUM_NONE; - if( 0==sqlite3StrICmp(z, "full") ) return BTREE_AUTOVACUUM_FULL; - if( 0==sqlite3StrICmp(z, "incremental") ) return BTREE_AUTOVACUUM_INCR; - i = atoi(z); - return (u8)((i>=0&&i<=2)?i:0); +SQLITE_PRIVATE void sqlite3CollapseDatabaseArray(sqlite3 *db){ + int i, j; + for(i=j=2; inDb; i++){ + struct Db *pDb = &db->aDb[i]; + if( pDb->pBt==0 ){ + sqlite3DbFree(db, pDb->zName); + pDb->zName = 0; + continue; + } + if( jaDb[j] = db->aDb[i]; + } + j++; + } + memset(&db->aDb[j], 0, (db->nDb-j)*sizeof(db->aDb[j])); + db->nDb = j; + if( db->nDb<=2 && db->aDb!=db->aDbStatic ){ + memcpy(db->aDbStatic, db->aDb, 2*sizeof(db->aDb[0])); + sqlite3DbFree(db, db->aDb); + db->aDb = db->aDbStatic; + } } -#endif /* ifndef SQLITE_OMIT_AUTOVACUUM */ -#ifndef SQLITE_OMIT_PAGER_PRAGMAS /* -** Interpret the given string as a temp db location. Return 1 for file -** backed temporary databases, 2 for the Red-Black tree in memory database -** and 0 to use the compile-time default. +** Reset the schema for the database at index iDb. Also reset the +** TEMP schema. */ -static int getTempStore(const char *z){ - if( z[0]>='0' && z[0]<='2' ){ - return z[0] - '0'; - }else if( sqlite3StrICmp(z, "file")==0 ){ - return 1; - }else if( sqlite3StrICmp(z, "memory")==0 ){ - return 2; - }else{ - return 0; +SQLITE_PRIVATE void sqlite3ResetOneSchema(sqlite3 *db, int iDb){ + Db *pDb; + assert( iDbnDb ); + + /* Case 1: Reset the single schema identified by iDb */ + pDb = &db->aDb[iDb]; + assert( sqlite3SchemaMutexHeld(db, iDb, 0) ); + assert( pDb->pSchema!=0 ); + sqlite3SchemaClear(pDb->pSchema); + + /* If any database other than TEMP is reset, then also reset TEMP + ** since TEMP might be holding triggers that reference tables in the + ** other database. + */ + if( iDb!=1 ){ + pDb = &db->aDb[1]; + assert( pDb->pSchema!=0 ); + sqlite3SchemaClear(pDb->pSchema); } + return; } -#endif /* SQLITE_PAGER_PRAGMAS */ -#ifndef SQLITE_OMIT_PAGER_PRAGMAS /* -** Invalidate temp storage, either when the temp storage is changed -** from default, or when 'file' and the temp_store_directory has changed +** Erase all schema information from all attached databases (including +** "main" and "temp") for a single database connection. */ -static int invalidateTempStorage(Parse *pParse){ - sqlite3 *db = pParse->db; - if( db->aDb[1].pBt!=0 ){ - if( !db->autoCommit || sqlite3BtreeIsInReadTrans(db->aDb[1].pBt) ){ - sqlite3ErrorMsg(pParse, "temporary storage cannot be changed " - "from within a transaction"); - return SQLITE_ERROR; +SQLITE_PRIVATE void sqlite3ResetAllSchemasOfConnection(sqlite3 *db){ + int i; + sqlite3BtreeEnterAll(db); + for(i=0; inDb; i++){ + Db *pDb = &db->aDb[i]; + if( pDb->pSchema ){ + sqlite3SchemaClear(pDb->pSchema); } - sqlite3BtreeClose(db->aDb[1].pBt); - db->aDb[1].pBt = 0; - sqlite3ResetInternalSchema(db, 0); } - return SQLITE_OK; + db->flags &= ~SQLITE_InternChanges; + sqlite3VtabUnlockList(db); + sqlite3BtreeLeaveAll(db); + sqlite3CollapseDatabaseArray(db); } -#endif /* SQLITE_PAGER_PRAGMAS */ -#ifndef SQLITE_OMIT_PAGER_PRAGMAS /* -** If the TEMP database is open, close it and mark the database schema -** as needing reloading. This must be done when using the SQLITE_TEMP_STORE -** or DEFAULT_TEMP_STORE pragmas. +** This routine is called when a commit occurs. */ -static int changeTempStorage(Parse *pParse, const char *zStorageType){ - int ts = getTempStore(zStorageType); - sqlite3 *db = pParse->db; - if( db->temp_store==ts ) return SQLITE_OK; - if( invalidateTempStorage( pParse ) != SQLITE_OK ){ - return SQLITE_ERROR; - } - db->temp_store = (u8)ts; - return SQLITE_OK; +SQLITE_PRIVATE void sqlite3CommitInternalChanges(sqlite3 *db){ + db->flags &= ~SQLITE_InternChanges; } -#endif /* SQLITE_PAGER_PRAGMAS */ /* -** Generate code to return a single integer value. +** Delete memory allocated for the column names of a table or view (the +** Table.aCol[] array). */ -static void returnSingleInt(Parse *pParse, const char *zLabel, i64 value){ - Vdbe *v = sqlite3GetVdbe(pParse); - int mem = ++pParse->nMem; - i64 *pI64 = sqlite3DbMallocRaw(pParse->db, sizeof(value)); - if( pI64 ){ - memcpy(pI64, &value, sizeof(value)); +static void sqliteDeleteColumnNames(sqlite3 *db, Table *pTable){ + int i; + Column *pCol; + assert( pTable!=0 ); + if( (pCol = pTable->aCol)!=0 ){ + for(i=0; inCol; i++, pCol++){ + sqlite3DbFree(db, pCol->zName); + sqlite3ExprDelete(db, pCol->pDflt); + sqlite3DbFree(db, pCol->zDflt); + sqlite3DbFree(db, pCol->zType); + sqlite3DbFree(db, pCol->zColl); + } + sqlite3DbFree(db, pTable->aCol); } - sqlite3VdbeAddOp4(v, OP_Int64, 0, mem, 0, (char*)pI64, P4_INT64); - sqlite3VdbeSetNumCols(v, 1); - sqlite3VdbeSetColName(v, 0, COLNAME_NAME, zLabel, SQLITE_STATIC); - sqlite3VdbeAddOp2(v, OP_ResultRow, mem, 1); } -#ifndef SQLITE_OMIT_FLAG_PRAGMAS /* -** Check to see if zRight and zLeft refer to a pragma that queries -** or changes one of the flags in db->flags. Return 1 if so and 0 if not. -** Also, implement the pragma. +** Remove the memory data structures associated with the given +** Table. No changes are made to disk by this routine. +** +** This routine just deletes the data structure. It does not unlink +** the table data structure from the hash table. But it does destroy +** memory structures of the indices and foreign keys associated with +** the table. +** +** The db parameter is optional. It is needed if the Table object +** contains lookaside memory. (Table objects in the schema do not use +** lookaside memory, but some ephemeral Table objects do.) Or the +** db parameter can be used with db->pnBytesFreed to measure the memory +** used by the Table object. */ -static int flagPragma(Parse *pParse, const char *zLeft, const char *zRight){ - static const struct sPragmaType { - const char *zName; /* Name of the pragma */ - int mask; /* Mask for the db->flags value */ - } aPragma[] = { - { "full_column_names", SQLITE_FullColNames }, - { "short_column_names", SQLITE_ShortColNames }, - { "count_changes", SQLITE_CountRows }, - { "empty_result_callbacks", SQLITE_NullCallback }, - { "legacy_file_format", SQLITE_LegacyFileFmt }, - { "fullfsync", SQLITE_FullFSync }, - { "reverse_unordered_selects", SQLITE_ReverseOrder }, -#ifdef SQLITE_DEBUG - { "sql_trace", SQLITE_SqlTrace }, - { "vdbe_listing", SQLITE_VdbeListing }, - { "vdbe_trace", SQLITE_VdbeTrace }, -#endif -#ifndef SQLITE_OMIT_CHECK - { "ignore_check_constraints", SQLITE_IgnoreChecks }, -#endif - /* The following is VERY experimental */ - { "writable_schema", SQLITE_WriteSchema|SQLITE_RecoveryMode }, - { "omit_readlock", SQLITE_NoReadlock }, +SQLITE_PRIVATE void sqlite3DeleteTable(sqlite3 *db, Table *pTable){ + Index *pIndex, *pNext; + TESTONLY( int nLookaside; ) /* Used to verify lookaside not used for schema */ - /* TODO: Maybe it shouldn't be possible to change the ReadUncommitted - ** flag if there are any active statements. */ - { "read_uncommitted", SQLITE_ReadUncommitted }, - }; - int i; - const struct sPragmaType *p; - for(i=0, p=aPragma; izName)==0 ){ - sqlite3 *db = pParse->db; - Vdbe *v; - v = sqlite3GetVdbe(pParse); - assert( v!=0 ); /* Already allocated by sqlite3Pragma() */ - if( ALWAYS(v) ){ - if( zRight==0 ){ - returnSingleInt(pParse, p->zName, (db->flags & p->mask)!=0 ); - }else{ - if( getBoolean(zRight) ){ - db->flags |= p->mask; - }else{ - db->flags &= ~p->mask; - } + assert( !pTable || pTable->nRef>0 ); - /* Many of the flag-pragmas modify the code generated by the SQL - ** compiler (eg. count_changes). So add an opcode to expire all - ** compiled SQL statements after modifying a pragma value. - */ - sqlite3VdbeAddOp2(v, OP_Expire, 0, 0); - } - } + /* Do not delete the table until the reference count reaches zero. */ + if( !pTable ) return; + if( ((!db || db->pnBytesFreed==0) && (--pTable->nRef)>0) ) return; - return 1; + /* Record the number of outstanding lookaside allocations in schema Tables + ** prior to doing any free() operations. Since schema Tables do not use + ** lookaside, this number should not change. */ + TESTONLY( nLookaside = (db && (pTable->tabFlags & TF_Ephemeral)==0) ? + db->lookaside.nOut : 0 ); + + /* Delete all indices associated with this table. */ + for(pIndex = pTable->pIndex; pIndex; pIndex=pNext){ + pNext = pIndex->pNext; + assert( pIndex->pSchema==pTable->pSchema ); + if( !db || db->pnBytesFreed==0 ){ + char *zName = pIndex->zName; + TESTONLY ( Index *pOld = ) sqlite3HashInsert( + &pIndex->pSchema->idxHash, zName, sqlite3Strlen30(zName), 0 + ); + assert( db==0 || sqlite3SchemaMutexHeld(db, 0, pIndex->pSchema) ); + assert( pOld==pIndex || pOld==0 ); } + freeIndex(db, pIndex); } - return 0; + + /* Delete any foreign keys attached to this table. */ + sqlite3FkDelete(db, pTable); + + /* Delete the Table structure itself. + */ + sqliteDeleteColumnNames(db, pTable); + sqlite3DbFree(db, pTable->zName); + sqlite3DbFree(db, pTable->zColAff); + sqlite3SelectDelete(db, pTable->pSelect); +#ifndef SQLITE_OMIT_CHECK + sqlite3ExprListDelete(db, pTable->pCheck); +#endif +#ifndef SQLITE_OMIT_VIRTUALTABLE + sqlite3VtabClear(db, pTable); +#endif + sqlite3DbFree(db, pTable); + + /* Verify that no lookaside memory was used by schema tables */ + assert( nLookaside==0 || nLookaside==db->lookaside.nOut ); } -#endif /* SQLITE_OMIT_FLAG_PRAGMAS */ /* -** Return a human-readable name for a constraint resolution action. +** Unlink the given table from the hash tables and the delete the +** table structure with all its indices and foreign keys. */ -static const char *actionName(u8 action){ - const char *zName; - switch( action ){ - case OE_SetNull: zName = "SET NULL"; break; - case OE_SetDflt: zName = "SET DEFAULT"; break; - case OE_Cascade: zName = "CASCADE"; break; - default: zName = "RESTRICT"; - assert( action==OE_Restrict ); break; - } - return zName; +SQLITE_PRIVATE void sqlite3UnlinkAndDeleteTable(sqlite3 *db, int iDb, const char *zTabName){ + Table *p; + Db *pDb; + + assert( db!=0 ); + assert( iDb>=0 && iDbnDb ); + assert( zTabName ); + assert( sqlite3SchemaMutexHeld(db, iDb, 0) ); + testcase( zTabName[0]==0 ); /* Zero-length table names are allowed */ + pDb = &db->aDb[iDb]; + p = sqlite3HashInsert(&pDb->pSchema->tblHash, zTabName, + sqlite3Strlen30(zTabName),0); + sqlite3DeleteTable(db, p); + db->flags |= SQLITE_InternChanges; } /* -** Process a pragma statement. -** -** Pragmas are of this form: -** -** PRAGMA [database.]id [= value] +** Given a token, return a string that consists of the text of that +** token. Space to hold the returned string +** is obtained from sqliteMalloc() and must be freed by the calling +** function. ** -** The identifier might also be a string. The value is a string, and -** identifier, or a number. If minusFlag is true, then the value is -** a number that was preceded by a minus sign. +** Any quotation marks (ex: "name", 'name', [name], or `name`) that +** surround the body of the token are removed. ** -** If the left side is "database.id" then pId1 is the database name -** and pId2 is the id. If the left side is just "id" then pId1 is the -** id and pId2 is any empty string. +** Tokens are often just pointers into the original SQL text and so +** are not \000 terminated and are not persistent. The returned string +** is \000 terminated and is persistent. */ -SQLITE_PRIVATE void sqlite3Pragma( - Parse *pParse, - Token *pId1, /* First part of [database.]id field */ - Token *pId2, /* Second part of [database.]id field, or NULL */ - Token *pValue, /* Token for , or NULL */ - int minusFlag /* True if a '-' sign preceded */ -){ - char *zLeft = 0; /* Nul-terminated UTF-8 string */ - char *zRight = 0; /* Nul-terminated UTF-8 string , or NULL */ - const char *zDb = 0; /* The database name */ - Token *pId; /* Pointer to token */ - int iDb; /* Database index for */ - sqlite3 *db = pParse->db; - Db *pDb; - Vdbe *v = pParse->pVdbe = sqlite3VdbeCreate(db); - if( v==0 ) return; - pParse->nMem = 2; - - /* Interpret the [database.] part of the pragma statement. iDb is the - ** index of the database this pragma is being applied to in db.aDb[]. */ - iDb = sqlite3TwoPartName(pParse, pId1, pId2, &pId); - if( iDb<0 ) return; - pDb = &db->aDb[iDb]; - - /* If the temp database has been explicitly named as part of the - ** pragma, make sure it is open. - */ - if( iDb==1 && sqlite3OpenTempDatabase(pParse) ){ - return; - } - - zLeft = sqlite3NameFromToken(db, pId); - if( !zLeft ) return; - if( minusFlag ){ - zRight = sqlite3MPrintf(db, "-%T", pValue); +SQLITE_PRIVATE char *sqlite3NameFromToken(sqlite3 *db, Token *pName){ + char *zName; + if( pName ){ + zName = sqlite3DbStrNDup(db, (char*)pName->z, pName->n); + sqlite3Dequote(zName); }else{ - zRight = sqlite3NameFromToken(db, pValue); + zName = 0; } + return zName; +} - assert( pId2 ); - zDb = pId2->n>0 ? pDb->zName : 0; - if( sqlite3AuthCheck(pParse, SQLITE_PRAGMA, zLeft, zRight, zDb) ){ - goto pragma_out; - } - -#ifndef SQLITE_OMIT_PAGER_PRAGMAS - /* - ** PRAGMA [database.]default_cache_size - ** PRAGMA [database.]default_cache_size=N - ** - ** The first form reports the current persistent setting for the - ** page cache size. The value returned is the maximum number of - ** pages in the page cache. The second form sets both the current - ** page cache size value and the persistent page cache size value - ** stored in the database file. - ** - ** The default cache size is stored in meta-value 2 of page 1 of the - ** database file. The cache size is actually the absolute value of - ** this memory location. The sign of meta-value 2 determines the - ** synchronous setting. A negative value means synchronous is off - ** and a positive value means synchronous is on. - */ - if( sqlite3StrICmp(zLeft,"default_cache_size")==0 ){ - static const VdbeOpList getCacheSize[] = { - { OP_ReadCookie, 0, 1, BTREE_DEFAULT_CACHE_SIZE}, /* 0 */ - { OP_IfPos, 1, 6, 0}, - { OP_Integer, 0, 2, 0}, - { OP_Subtract, 1, 2, 1}, - { OP_IfPos, 1, 6, 0}, - { OP_Integer, 0, 1, 0}, /* 5 */ - { OP_ResultRow, 1, 1, 0}, - }; - int addr; - if( sqlite3ReadSchema(pParse) ) goto pragma_out; - sqlite3VdbeUsesBtree(v, iDb); - if( !zRight ){ - sqlite3VdbeSetNumCols(v, 1); - sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "cache_size", SQLITE_STATIC); - pParse->nMem += 2; - addr = sqlite3VdbeAddOpList(v, ArraySize(getCacheSize), getCacheSize); - sqlite3VdbeChangeP1(v, addr, iDb); - sqlite3VdbeChangeP1(v, addr+5, SQLITE_DEFAULT_CACHE_SIZE); - }else{ - int size = atoi(zRight); - if( size<0 ) size = -size; - sqlite3BeginWriteOperation(pParse, 0, iDb); - sqlite3VdbeAddOp2(v, OP_Integer, size, 1); - sqlite3VdbeAddOp3(v, OP_ReadCookie, iDb, 2, BTREE_DEFAULT_CACHE_SIZE); - addr = sqlite3VdbeAddOp2(v, OP_IfPos, 2, 0); - sqlite3VdbeAddOp2(v, OP_Integer, -size, 1); - sqlite3VdbeJumpHere(v, addr); - sqlite3VdbeAddOp3(v, OP_SetCookie, iDb, BTREE_DEFAULT_CACHE_SIZE, 1); - pDb->pSchema->cache_size = size; - sqlite3BtreeSetCacheSize(pDb->pBt, pDb->pSchema->cache_size); - } - }else +/* +** Open the sqlite_master table stored in database number iDb for +** writing. The table is opened using cursor 0. +*/ +SQLITE_PRIVATE void sqlite3OpenMasterTable(Parse *p, int iDb){ + Vdbe *v = sqlite3GetVdbe(p); + sqlite3TableLock(p, iDb, MASTER_ROOT, 1, SCHEMA_TABLE(iDb)); + sqlite3VdbeAddOp3(v, OP_OpenWrite, 0, MASTER_ROOT, iDb); + sqlite3VdbeChangeP4(v, -1, (char *)5, P4_INT32); /* 5 column table */ + if( p->nTab==0 ){ + p->nTab = 1; + } +} - /* - ** PRAGMA [database.]page_size - ** PRAGMA [database.]page_size=N - ** - ** The first form reports the current setting for the - ** database page size in bytes. The second form sets the - ** database page size value. The value can only be set if - ** the database has not yet been created. - */ - if( sqlite3StrICmp(zLeft,"page_size")==0 ){ - Btree *pBt = pDb->pBt; - assert( pBt!=0 ); - if( !zRight ){ - int size = ALWAYS(pBt) ? sqlite3BtreeGetPageSize(pBt) : 0; - returnSingleInt(pParse, "page_size", size); - }else{ - /* Malloc may fail when setting the page-size, as there is an internal - ** buffer that the pager module resizes using sqlite3_realloc(). - */ - db->nextPagesize = atoi(zRight); - if( SQLITE_NOMEM==sqlite3BtreeSetPageSize(pBt, db->nextPagesize, -1, 0) ){ - db->mallocFailed = 1; +/* +** Parameter zName points to a nul-terminated buffer containing the name +** of a database ("main", "temp" or the name of an attached db). This +** function returns the index of the named database in db->aDb[], or +** -1 if the named db cannot be found. +*/ +SQLITE_PRIVATE int sqlite3FindDbName(sqlite3 *db, const char *zName){ + int i = -1; /* Database number */ + if( zName ){ + Db *pDb; + int n = sqlite3Strlen30(zName); + for(i=(db->nDb-1), pDb=&db->aDb[i]; i>=0; i--, pDb--){ + if( (!OMIT_TEMPDB || i!=1 ) && n==sqlite3Strlen30(pDb->zName) && + 0==sqlite3StrICmp(pDb->zName, zName) ){ + break; } } - }else - - /* - ** PRAGMA [database.]max_page_count - ** PRAGMA [database.]max_page_count=N - ** - ** The first form reports the current setting for the - ** maximum number of pages in the database file. The - ** second form attempts to change this setting. Both - ** forms return the current setting. - */ - if( sqlite3StrICmp(zLeft,"max_page_count")==0 ){ - Btree *pBt = pDb->pBt; - int newMax = 0; - assert( pBt!=0 ); - if( zRight ){ - newMax = atoi(zRight); - } - if( ALWAYS(pBt) ){ - newMax = sqlite3BtreeMaxPageCount(pBt, newMax); - } - returnSingleInt(pParse, "max_page_count", newMax); - }else + } + return i; +} - /* - ** PRAGMA [database.]page_count - ** - ** Return the number of pages in the specified database. - */ - if( sqlite3StrICmp(zLeft,"page_count")==0 ){ - int iReg; - if( sqlite3ReadSchema(pParse) ) goto pragma_out; - sqlite3CodeVerifySchema(pParse, iDb); - iReg = ++pParse->nMem; - sqlite3VdbeAddOp2(v, OP_Pagecount, iDb, iReg); - sqlite3VdbeAddOp2(v, OP_ResultRow, iReg, 1); - sqlite3VdbeSetNumCols(v, 1); - sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "page_count", SQLITE_STATIC); - }else +/* +** The token *pName contains the name of a database (either "main" or +** "temp" or the name of an attached db). This routine returns the +** index of the named database in db->aDb[], or -1 if the named db +** does not exist. +*/ +SQLITE_PRIVATE int sqlite3FindDb(sqlite3 *db, Token *pName){ + int i; /* Database number */ + char *zName; /* Name we are searching for */ + zName = sqlite3NameFromToken(db, pName); + i = sqlite3FindDbName(db, zName); + sqlite3DbFree(db, zName); + return i; +} - /* - ** PRAGMA [database.]locking_mode - ** PRAGMA [database.]locking_mode = (normal|exclusive) - */ - if( sqlite3StrICmp(zLeft,"locking_mode")==0 ){ - const char *zRet = "normal"; - int eMode = getLockingMode(zRight); +/* The table or view or trigger name is passed to this routine via tokens +** pName1 and pName2. If the table name was fully qualified, for example: +** +** CREATE TABLE xxx.yyy (...); +** +** Then pName1 is set to "xxx" and pName2 "yyy". On the other hand if +** the table name is not fully qualified, i.e.: +** +** CREATE TABLE yyy(...); +** +** Then pName1 is set to "yyy" and pName2 is "". +** +** This routine sets the *ppUnqual pointer to point at the token (pName1 or +** pName2) that stores the unqualified table name. The index of the +** database "xxx" is returned. +*/ +SQLITE_PRIVATE int sqlite3TwoPartName( + Parse *pParse, /* Parsing and code generating context */ + Token *pName1, /* The "xxx" in the name "xxx.yyy" or "xxx" */ + Token *pName2, /* The "yyy" in the name "xxx.yyy" */ + Token **pUnqual /* Write the unqualified object name here */ +){ + int iDb; /* Database holding the object */ + sqlite3 *db = pParse->db; - if( pId2->n==0 && eMode==PAGER_LOCKINGMODE_QUERY ){ - /* Simple "PRAGMA locking_mode;" statement. This is a query for - ** the current default locking mode (which may be different to - ** the locking-mode of the main database). - */ - eMode = db->dfltLockMode; - }else{ - Pager *pPager; - if( pId2->n==0 ){ - /* This indicates that no database name was specified as part - ** of the PRAGMA command. In this case the locking-mode must be - ** set on all attached databases, as well as the main db file. - ** - ** Also, the sqlite3.dfltLockMode variable is set so that - ** any subsequently attached databases also use the specified - ** locking mode. - */ - int ii; - assert(pDb==&db->aDb[0]); - for(ii=2; iinDb; ii++){ - pPager = sqlite3BtreePager(db->aDb[ii].pBt); - sqlite3PagerLockingMode(pPager, eMode); - } - db->dfltLockMode = (u8)eMode; - } - pPager = sqlite3BtreePager(pDb->pBt); - eMode = sqlite3PagerLockingMode(pPager, eMode); + if( ALWAYS(pName2!=0) && pName2->n>0 ){ + if( db->init.busy ) { + sqlite3ErrorMsg(pParse, "corrupt database"); + pParse->nErr++; + return -1; } - - assert(eMode==PAGER_LOCKINGMODE_NORMAL||eMode==PAGER_LOCKINGMODE_EXCLUSIVE); - if( eMode==PAGER_LOCKINGMODE_EXCLUSIVE ){ - zRet = "exclusive"; + *pUnqual = pName2; + iDb = sqlite3FindDb(db, pName1); + if( iDb<0 ){ + sqlite3ErrorMsg(pParse, "unknown database %T", pName1); + pParse->nErr++; + return -1; } - sqlite3VdbeSetNumCols(v, 1); - sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "locking_mode", SQLITE_STATIC); - sqlite3VdbeAddOp4(v, OP_String8, 0, 1, 0, zRet, 0); - sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 1); - }else + }else{ + assert( db->init.iDb==0 || db->init.busy ); + iDb = db->init.iDb; + *pUnqual = pName1; + } + return iDb; +} - /* - ** PRAGMA [database.]journal_mode - ** PRAGMA [database.]journal_mode = (delete|persist|off|truncate|memory) - */ - if( sqlite3StrICmp(zLeft,"journal_mode")==0 ){ - int eMode; - static char * const azModeName[] = { - "delete", "persist", "off", "truncate", "memory" - }; +/* +** This routine is used to check if the UTF-8 string zName is a legal +** unqualified name for a new schema object (table, index, view or +** trigger). All names are legal except those that begin with the string +** "sqlite_" (in upper, lower or mixed case). This portion of the namespace +** is reserved for internal use. +*/ +SQLITE_PRIVATE int sqlite3CheckObjectName(Parse *pParse, const char *zName){ + if( !pParse->db->init.busy && pParse->nested==0 + && (pParse->db->flags & SQLITE_WriteSchema)==0 + && 0==sqlite3StrNICmp(zName, "sqlite_", 7) ){ + sqlite3ErrorMsg(pParse, "object name reserved for internal use: %s", zName); + return SQLITE_ERROR; + } + return SQLITE_OK; +} - if( zRight==0 ){ - eMode = PAGER_JOURNALMODE_QUERY; - }else{ - int n = sqlite3Strlen30(zRight); - eMode = sizeof(azModeName)/sizeof(azModeName[0]) - 1; - while( eMode>=0 && sqlite3StrNICmp(zRight, azModeName[eMode], n)!=0 ){ - eMode--; - } - } - if( pId2->n==0 && eMode==PAGER_JOURNALMODE_QUERY ){ - /* Simple "PRAGMA journal_mode;" statement. This is a query for - ** the current default journal mode (which may be different to - ** the journal-mode of the main database). - */ - eMode = db->dfltJournalMode; - }else{ - Pager *pPager; - if( pId2->n==0 ){ - /* This indicates that no database name was specified as part - ** of the PRAGMA command. In this case the journal-mode must be - ** set on all attached databases, as well as the main db file. - ** - ** Also, the sqlite3.dfltJournalMode variable is set so that - ** any subsequently attached databases also use the specified - ** journal mode. - */ - int ii; - assert(pDb==&db->aDb[0]); - for(ii=1; iinDb; ii++){ - if( db->aDb[ii].pBt ){ - pPager = sqlite3BtreePager(db->aDb[ii].pBt); - sqlite3PagerJournalMode(pPager, eMode); - } - } - db->dfltJournalMode = (u8)eMode; - } - pPager = sqlite3BtreePager(pDb->pBt); - eMode = sqlite3PagerJournalMode(pPager, eMode); - } - assert( eMode==PAGER_JOURNALMODE_DELETE - || eMode==PAGER_JOURNALMODE_TRUNCATE - || eMode==PAGER_JOURNALMODE_PERSIST - || eMode==PAGER_JOURNALMODE_OFF - || eMode==PAGER_JOURNALMODE_MEMORY ); - sqlite3VdbeSetNumCols(v, 1); - sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "journal_mode", SQLITE_STATIC); - sqlite3VdbeAddOp4(v, OP_String8, 0, 1, 0, - azModeName[eMode], P4_STATIC); - sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 1); - }else +/* +** Begin constructing a new table representation in memory. This is +** the first of several action routines that get called in response +** to a CREATE TABLE statement. In particular, this routine is called +** after seeing tokens "CREATE" and "TABLE" and the table name. The isTemp +** flag is true if the table should be stored in the auxiliary database +** file instead of in the main database file. This is normally the case +** when the "TEMP" or "TEMPORARY" keyword occurs in between +** CREATE and TABLE. +** +** The new table record is initialized and put in pParse->pNewTable. +** As more of the CREATE TABLE statement is parsed, additional action +** routines will be called to add more information to this record. +** At the end of the CREATE TABLE statement, the sqlite3EndTable() routine +** is called to complete the construction of the new table record. +*/ +SQLITE_PRIVATE void sqlite3StartTable( + Parse *pParse, /* Parser context */ + Token *pName1, /* First part of the name of the table or view */ + Token *pName2, /* Second part of the name of the table or view */ + int isTemp, /* True if this is a TEMP table */ + int isView, /* True if this is a VIEW */ + int isVirtual, /* True if this is a VIRTUAL table */ + int noErr /* Do nothing if table already exists */ +){ + Table *pTable; + char *zName = 0; /* The name of the new table */ + sqlite3 *db = pParse->db; + Vdbe *v; + int iDb; /* Database number to create the table in */ + Token *pName; /* Unqualified name of the table to create */ - /* - ** PRAGMA [database.]journal_size_limit - ** PRAGMA [database.]journal_size_limit=N + /* The table or view name to create is passed to this routine via tokens + ** pName1 and pName2. If the table name was fully qualified, for example: ** - ** Get or set the size limit on rollback journal files. - */ - if( sqlite3StrICmp(zLeft,"journal_size_limit")==0 ){ - Pager *pPager = sqlite3BtreePager(pDb->pBt); - i64 iLimit = -2; - if( zRight ){ - sqlite3Atoi64(zRight, &iLimit); - if( iLimit<-1 ) iLimit = -1; - } - iLimit = sqlite3PagerJournalSizeLimit(pPager, iLimit); - returnSingleInt(pParse, "journal_size_limit", iLimit); - }else - -#endif /* SQLITE_OMIT_PAGER_PRAGMAS */ - - /* - ** PRAGMA [database.]auto_vacuum - ** PRAGMA [database.]auto_vacuum=N + ** CREATE TABLE xxx.yyy (...); + ** + ** Then pName1 is set to "xxx" and pName2 "yyy". On the other hand if + ** the table name is not fully qualified, i.e.: ** - ** Get or set the value of the database 'auto-vacuum' parameter. - ** The value is one of: 0 NONE 1 FULL 2 INCREMENTAL + ** CREATE TABLE yyy(...); + ** + ** Then pName1 is set to "yyy" and pName2 is "". + ** + ** The call below sets the pName pointer to point at the token (pName1 or + ** pName2) that stores the unqualified table name. The variable iDb is + ** set to the index of the database that the table or view is to be + ** created in. */ -#ifndef SQLITE_OMIT_AUTOVACUUM - if( sqlite3StrICmp(zLeft,"auto_vacuum")==0 ){ - Btree *pBt = pDb->pBt; - assert( pBt!=0 ); - if( sqlite3ReadSchema(pParse) ){ - goto pragma_out; + iDb = sqlite3TwoPartName(pParse, pName1, pName2, &pName); + if( iDb<0 ) return; + if( !OMIT_TEMPDB && isTemp && pName2->n>0 && iDb!=1 ){ + /* If creating a temp table, the name may not be qualified. Unless + ** the database name is "temp" anyway. */ + sqlite3ErrorMsg(pParse, "temporary table name must be unqualified"); + return; + } + if( !OMIT_TEMPDB && isTemp ) iDb = 1; + + pParse->sNameToken = *pName; + zName = sqlite3NameFromToken(db, pName); + if( zName==0 ) return; + if( SQLITE_OK!=sqlite3CheckObjectName(pParse, zName) ){ + goto begin_table_error; + } + if( db->init.iDb==1 ) isTemp = 1; +#ifndef SQLITE_OMIT_AUTHORIZATION + assert( (isTemp & 1)==isTemp ); + { + int code; + char *zDb = db->aDb[iDb].zName; + if( sqlite3AuthCheck(pParse, SQLITE_INSERT, SCHEMA_TABLE(isTemp), 0, zDb) ){ + goto begin_table_error; } - if( !zRight ){ - int auto_vacuum; - if( ALWAYS(pBt) ){ - auto_vacuum = sqlite3BtreeGetAutoVacuum(pBt); + if( isView ){ + if( !OMIT_TEMPDB && isTemp ){ + code = SQLITE_CREATE_TEMP_VIEW; }else{ - auto_vacuum = SQLITE_DEFAULT_AUTOVACUUM; + code = SQLITE_CREATE_VIEW; } - returnSingleInt(pParse, "auto_vacuum", auto_vacuum); }else{ - int eAuto = getAutoVacuum(zRight); - assert( eAuto>=0 && eAuto<=2 ); - db->nextAutovac = (u8)eAuto; - if( ALWAYS(eAuto>=0) ){ - /* Call SetAutoVacuum() to set initialize the internal auto and - ** incr-vacuum flags. This is required in case this connection - ** creates the database file. It is important that it is created - ** as an auto-vacuum capable db. - */ - int rc = sqlite3BtreeSetAutoVacuum(pBt, eAuto); - if( rc==SQLITE_OK && (eAuto==1 || eAuto==2) ){ - /* When setting the auto_vacuum mode to either "full" or - ** "incremental", write the value of meta[6] in the database - ** file. Before writing to meta[6], check that meta[3] indicates - ** that this really is an auto-vacuum capable database. - */ - static const VdbeOpList setMeta6[] = { - { OP_Transaction, 0, 1, 0}, /* 0 */ - { OP_ReadCookie, 0, 1, BTREE_LARGEST_ROOT_PAGE}, - { OP_If, 1, 0, 0}, /* 2 */ - { OP_Halt, SQLITE_OK, OE_Abort, 0}, /* 3 */ - { OP_Integer, 0, 1, 0}, /* 4 */ - { OP_SetCookie, 0, BTREE_INCR_VACUUM, 1}, /* 5 */ - }; - int iAddr; - iAddr = sqlite3VdbeAddOpList(v, ArraySize(setMeta6), setMeta6); - sqlite3VdbeChangeP1(v, iAddr, iDb); - sqlite3VdbeChangeP1(v, iAddr+1, iDb); - sqlite3VdbeChangeP2(v, iAddr+2, iAddr+4); - sqlite3VdbeChangeP1(v, iAddr+4, eAuto-1); - sqlite3VdbeChangeP1(v, iAddr+5, iDb); - sqlite3VdbeUsesBtree(v, iDb); - } + if( !OMIT_TEMPDB && isTemp ){ + code = SQLITE_CREATE_TEMP_TABLE; + }else{ + code = SQLITE_CREATE_TABLE; } } - }else + if( !isVirtual && sqlite3AuthCheck(pParse, code, zName, 0, zDb) ){ + goto begin_table_error; + } + } #endif - /* - ** PRAGMA [database.]incremental_vacuum(N) - ** - ** Do N steps of incremental vacuuming on a database. + /* Make sure the new table name does not collide with an existing + ** index or table name in the same database. Issue an error message if + ** it does. The exception is if the statement being parsed was passed + ** to an sqlite3_declare_vtab() call. In that case only the column names + ** and types will be used, so there is no need to test for namespace + ** collisions. */ -#ifndef SQLITE_OMIT_AUTOVACUUM - if( sqlite3StrICmp(zLeft,"incremental_vacuum")==0 ){ - int iLimit, addr; - if( sqlite3ReadSchema(pParse) ){ - goto pragma_out; + if( !IN_DECLARE_VTAB ){ + char *zDb = db->aDb[iDb].zName; + if( SQLITE_OK!=sqlite3ReadSchema(pParse) ){ + goto begin_table_error; } - if( zRight==0 || !sqlite3GetInt32(zRight, &iLimit) || iLimit<=0 ){ - iLimit = 0x7fffffff; + pTable = sqlite3FindTable(db, zName, zDb); + if( pTable ){ + if( !noErr ){ + sqlite3ErrorMsg(pParse, "table %T already exists", pName); + }else{ + assert( !db->init.busy ); + sqlite3CodeVerifySchema(pParse, iDb); + } + goto begin_table_error; } - sqlite3BeginWriteOperation(pParse, 0, iDb); - sqlite3VdbeAddOp2(v, OP_Integer, iLimit, 1); - addr = sqlite3VdbeAddOp1(v, OP_IncrVacuum, iDb); - sqlite3VdbeAddOp1(v, OP_ResultRow, 1); - sqlite3VdbeAddOp2(v, OP_AddImm, 1, -1); - sqlite3VdbeAddOp2(v, OP_IfPos, 1, addr); - sqlite3VdbeJumpHere(v, addr); - }else -#endif + if( sqlite3FindIndex(db, zName, zDb)!=0 ){ + sqlite3ErrorMsg(pParse, "there is already an index named %s", zName); + goto begin_table_error; + } + } -#ifndef SQLITE_OMIT_PAGER_PRAGMAS - /* - ** PRAGMA [database.]cache_size - ** PRAGMA [database.]cache_size=N - ** - ** The first form reports the current local setting for the - ** page cache size. The local setting can be different from - ** the persistent cache size value that is stored in the database - ** file itself. The value returned is the maximum number of - ** pages in the page cache. The second form sets the local - ** page cache size value. It does not change the persistent - ** cache size stored on the disk so the cache size will revert - ** to its default value when the database is closed and reopened. - ** N should be a positive integer. + pTable = sqlite3DbMallocZero(db, sizeof(Table)); + if( pTable==0 ){ + db->mallocFailed = 1; + pParse->rc = SQLITE_NOMEM; + pParse->nErr++; + goto begin_table_error; + } + pTable->zName = zName; + pTable->iPKey = -1; + pTable->pSchema = db->aDb[iDb].pSchema; + pTable->nRef = 1; + pTable->nRowEst = 1000000; + assert( pParse->pNewTable==0 ); + pParse->pNewTable = pTable; + + /* If this is the magic sqlite_sequence table used by autoincrement, + ** then record a pointer to this table in the main database structure + ** so that INSERT can find the table easily. */ - if( sqlite3StrICmp(zLeft,"cache_size")==0 ){ - if( sqlite3ReadSchema(pParse) ) goto pragma_out; - if( !zRight ){ - returnSingleInt(pParse, "cache_size", pDb->pSchema->cache_size); - }else{ - int size = atoi(zRight); - if( size<0 ) size = -size; - pDb->pSchema->cache_size = size; - sqlite3BtreeSetCacheSize(pDb->pBt, pDb->pSchema->cache_size); - } - }else +#ifndef SQLITE_OMIT_AUTOINCREMENT + if( !pParse->nested && strcmp(zName, "sqlite_sequence")==0 ){ + assert( sqlite3SchemaMutexHeld(db, iDb, 0) ); + pTable->pSchema->pSeqTab = pTable; + } +#endif - /* - ** PRAGMA temp_store - ** PRAGMA temp_store = "default"|"memory"|"file" - ** - ** Return or set the local value of the temp_store flag. Changing - ** the local value does not make changes to the disk file and the default - ** value will be restored the next time the database is opened. - ** - ** Note that it is possible for the library compile-time options to - ** override this setting + /* Begin generating the code that will insert the table record into + ** the SQLITE_MASTER table. Note in particular that we must go ahead + ** and allocate the record number for the table entry now. Before any + ** PRIMARY KEY or UNIQUE keywords are parsed. Those keywords will cause + ** indices to be created and the table record must come before the + ** indices. Hence, the record number for the table must be allocated + ** now. */ - if( sqlite3StrICmp(zLeft, "temp_store")==0 ){ - if( !zRight ){ - returnSingleInt(pParse, "temp_store", db->temp_store); - }else{ - changeTempStorage(pParse, zRight); - } - }else + if( !db->init.busy && (v = sqlite3GetVdbe(pParse))!=0 ){ + int j1; + int fileFormat; + int reg1, reg2, reg3; + sqlite3BeginWriteOperation(pParse, 0, iDb); - /* - ** PRAGMA temp_store_directory - ** PRAGMA temp_store_directory = ""|"directory_name" - ** - ** Return or set the local value of the temp_store_directory flag. Changing - ** the value sets a specific directory to be used for temporary files. - ** Setting to a null string reverts to the default temporary directory search. - ** If temporary directory is changed, then invalidateTempStorage. - ** - */ - if( sqlite3StrICmp(zLeft, "temp_store_directory")==0 ){ - if( !zRight ){ - if( sqlite3_temp_directory ){ - sqlite3VdbeSetNumCols(v, 1); - sqlite3VdbeSetColName(v, 0, COLNAME_NAME, - "temp_store_directory", SQLITE_STATIC); - sqlite3VdbeAddOp4(v, OP_String8, 0, 1, 0, sqlite3_temp_directory, 0); - sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 1); - } - }else{ -#ifndef SQLITE_OMIT_WSD - if( zRight[0] ){ - int rc; - int res; - rc = sqlite3OsAccess(db->pVfs, zRight, SQLITE_ACCESS_READWRITE, &res); - if( rc!=SQLITE_OK || res==0 ){ - sqlite3ErrorMsg(pParse, "not a writable directory"); - goto pragma_out; - } - } - if( SQLITE_TEMP_STORE==0 - || (SQLITE_TEMP_STORE==1 && db->temp_store<=1) - || (SQLITE_TEMP_STORE==2 && db->temp_store==1) - ){ - invalidateTempStorage(pParse); - } - sqlite3_free(sqlite3_temp_directory); - if( zRight[0] ){ - sqlite3_temp_directory = sqlite3DbStrDup(0, zRight); - }else{ - sqlite3_temp_directory = 0; - } -#endif /* SQLITE_OMIT_WSD */ +#ifndef SQLITE_OMIT_VIRTUALTABLE + if( isVirtual ){ + sqlite3VdbeAddOp0(v, OP_VBegin); } - }else +#endif -#if !defined(SQLITE_ENABLE_LOCKING_STYLE) -# if defined(__APPLE__) -# define SQLITE_ENABLE_LOCKING_STYLE 1 -# else -# define SQLITE_ENABLE_LOCKING_STYLE 0 -# endif + /* If the file format and encoding in the database have not been set, + ** set them now. + */ + reg1 = pParse->regRowid = ++pParse->nMem; + reg2 = pParse->regRoot = ++pParse->nMem; + reg3 = ++pParse->nMem; + sqlite3VdbeAddOp3(v, OP_ReadCookie, iDb, reg3, BTREE_FILE_FORMAT); + sqlite3VdbeUsesBtree(v, iDb); + j1 = sqlite3VdbeAddOp1(v, OP_If, reg3); + fileFormat = (db->flags & SQLITE_LegacyFileFmt)!=0 ? + 1 : SQLITE_MAX_FILE_FORMAT; + sqlite3VdbeAddOp2(v, OP_Integer, fileFormat, reg3); + sqlite3VdbeAddOp3(v, OP_SetCookie, iDb, BTREE_FILE_FORMAT, reg3); + sqlite3VdbeAddOp2(v, OP_Integer, ENC(db), reg3); + sqlite3VdbeAddOp3(v, OP_SetCookie, iDb, BTREE_TEXT_ENCODING, reg3); + sqlite3VdbeJumpHere(v, j1); + + /* This just creates a place-holder record in the sqlite_master table. + ** The record created does not contain anything yet. It will be replaced + ** by the real entry in code generated at sqlite3EndTable(). + ** + ** The rowid for the new entry is left in register pParse->regRowid. + ** The root page number of the new table is left in reg pParse->regRoot. + ** The rowid and root page number values are needed by the code that + ** sqlite3EndTable will generate. + */ +#if !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_VIRTUALTABLE) + if( isView || isVirtual ){ + sqlite3VdbeAddOp2(v, OP_Integer, 0, reg2); + }else #endif -#if SQLITE_ENABLE_LOCKING_STYLE - /* - ** PRAGMA [database.]lock_proxy_file - ** PRAGMA [database.]lock_proxy_file = ":auto:"|"lock_file_path" - ** - ** Return or set the value of the lock_proxy_file flag. Changing - ** the value sets a specific file to be used for database access locks. - ** - */ - if( sqlite3StrICmp(zLeft, "lock_proxy_file")==0 ){ - if( !zRight ){ - Pager *pPager = sqlite3BtreePager(pDb->pBt); - char *proxy_file_path = NULL; - sqlite3_file *pFile = sqlite3PagerFile(pPager); - sqlite3OsFileControl(pFile, SQLITE_GET_LOCKPROXYFILE, - &proxy_file_path); - - if( proxy_file_path ){ - sqlite3VdbeSetNumCols(v, 1); - sqlite3VdbeSetColName(v, 0, COLNAME_NAME, - "lock_proxy_file", SQLITE_STATIC); - sqlite3VdbeAddOp4(v, OP_String8, 0, 1, 0, proxy_file_path, 0); - sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 1); - } - }else{ - Pager *pPager = sqlite3BtreePager(pDb->pBt); - sqlite3_file *pFile = sqlite3PagerFile(pPager); - int res; - if( zRight[0] ){ - res=sqlite3OsFileControl(pFile, SQLITE_SET_LOCKPROXYFILE, - zRight); - } else { - res=sqlite3OsFileControl(pFile, SQLITE_SET_LOCKPROXYFILE, - NULL); - } - if( res!=SQLITE_OK ){ - sqlite3ErrorMsg(pParse, "failed to set lock proxy file"); - goto pragma_out; - } - } - }else -#endif /* SQLITE_ENABLE_LOCKING_STYLE */ - - /* - ** PRAGMA [database.]synchronous - ** PRAGMA [database.]synchronous=OFF|ON|NORMAL|FULL - ** - ** Return or set the local value of the synchronous flag. Changing - ** the local value does not make changes to the disk file and the - ** default value will be restored the next time the database is - ** opened. - */ - if( sqlite3StrICmp(zLeft,"synchronous")==0 ){ - if( sqlite3ReadSchema(pParse) ) goto pragma_out; - if( !zRight ){ - returnSingleInt(pParse, "synchronous", pDb->safety_level-1); - }else{ - if( !db->autoCommit ){ - sqlite3ErrorMsg(pParse, - "Safety level may not be changed inside a transaction"); - }else{ - pDb->safety_level = getSafetyLevel(zRight)+1; - } + { + sqlite3VdbeAddOp2(v, OP_CreateTable, iDb, reg2); } - }else -#endif /* SQLITE_OMIT_PAGER_PRAGMAS */ + sqlite3OpenMasterTable(pParse, iDb); + sqlite3VdbeAddOp2(v, OP_NewRowid, 0, reg1); + sqlite3VdbeAddOp2(v, OP_Null, 0, reg3); + sqlite3VdbeAddOp3(v, OP_Insert, 0, reg3, reg1); + sqlite3VdbeChangeP5(v, OPFLAG_APPEND); + sqlite3VdbeAddOp0(v, OP_Close); + } -#ifndef SQLITE_OMIT_FLAG_PRAGMAS - if( flagPragma(pParse, zLeft, zRight) ){ - /* The flagPragma() subroutine also generates any necessary code - ** there is nothing more to do here */ - }else -#endif /* SQLITE_OMIT_FLAG_PRAGMAS */ + /* Normal (non-error) return. */ + return; -#ifndef SQLITE_OMIT_SCHEMA_PRAGMAS - /* - ** PRAGMA table_info(
    ) - ** - ** Return a single row for each column of the named table. The columns of - ** the returned data set are: - ** - ** cid: Column id (numbered from left to right, starting at 0) - ** name: Column name - ** type: Column declaration type. - ** notnull: True if 'NOT NULL' is part of column declaration - ** dflt_value: The default value for the column, if any. - */ - if( sqlite3StrICmp(zLeft, "table_info")==0 && zRight ){ - Table *pTab; - if( sqlite3ReadSchema(pParse) ) goto pragma_out; - pTab = sqlite3FindTable(db, zRight, zDb); - if( pTab ){ - int i; - int nHidden = 0; - Column *pCol; - sqlite3VdbeSetNumCols(v, 6); - pParse->nMem = 6; - sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "cid", SQLITE_STATIC); - sqlite3VdbeSetColName(v, 1, COLNAME_NAME, "name", SQLITE_STATIC); - sqlite3VdbeSetColName(v, 2, COLNAME_NAME, "type", SQLITE_STATIC); - sqlite3VdbeSetColName(v, 3, COLNAME_NAME, "notnull", SQLITE_STATIC); - sqlite3VdbeSetColName(v, 4, COLNAME_NAME, "dflt_value", SQLITE_STATIC); - sqlite3VdbeSetColName(v, 5, COLNAME_NAME, "pk", SQLITE_STATIC); - sqlite3ViewGetColumnNames(pParse, pTab); - for(i=0, pCol=pTab->aCol; inCol; i++, pCol++){ - if( IsHiddenColumn(pCol) ){ - nHidden++; - continue; - } - sqlite3VdbeAddOp2(v, OP_Integer, i-nHidden, 1); - sqlite3VdbeAddOp4(v, OP_String8, 0, 2, 0, pCol->zName, 0); - sqlite3VdbeAddOp4(v, OP_String8, 0, 3, 0, - pCol->zType ? pCol->zType : "", 0); - sqlite3VdbeAddOp2(v, OP_Integer, (pCol->notNull ? 1 : 0), 4); - if( pCol->zDflt ){ - sqlite3VdbeAddOp4(v, OP_String8, 0, 5, 0, (char*)pCol->zDflt, 0); - }else{ - sqlite3VdbeAddOp2(v, OP_Null, 0, 5); - } - sqlite3VdbeAddOp2(v, OP_Integer, pCol->isPrimKey, 6); - sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 6); - } - } - }else + /* If an error occurs, we jump here */ +begin_table_error: + sqlite3DbFree(db, zName); + return; +} - if( sqlite3StrICmp(zLeft, "index_info")==0 && zRight ){ - Index *pIdx; - Table *pTab; - if( sqlite3ReadSchema(pParse) ) goto pragma_out; - pIdx = sqlite3FindIndex(db, zRight, zDb); - if( pIdx ){ - int i; - pTab = pIdx->pTable; - sqlite3VdbeSetNumCols(v, 3); - pParse->nMem = 3; - sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "seqno", SQLITE_STATIC); - sqlite3VdbeSetColName(v, 1, COLNAME_NAME, "cid", SQLITE_STATIC); - sqlite3VdbeSetColName(v, 2, COLNAME_NAME, "name", SQLITE_STATIC); - for(i=0; inColumn; i++){ - int cnum = pIdx->aiColumn[i]; - sqlite3VdbeAddOp2(v, OP_Integer, i, 1); - sqlite3VdbeAddOp2(v, OP_Integer, cnum, 2); - assert( pTab->nCol>cnum ); - sqlite3VdbeAddOp4(v, OP_String8, 0, 3, 0, pTab->aCol[cnum].zName, 0); - sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 3); - } - } - }else +/* +** This macro is used to compare two strings in a case-insensitive manner. +** It is slightly faster than calling sqlite3StrICmp() directly, but +** produces larger code. +** +** WARNING: This macro is not compatible with the strcmp() family. It +** returns true if the two strings are equal, otherwise false. +*/ +#define STRICMP(x, y) (\ +sqlite3UpperToLower[*(unsigned char *)(x)]== \ +sqlite3UpperToLower[*(unsigned char *)(y)] \ +&& sqlite3StrICmp((x)+1,(y)+1)==0 ) - if( sqlite3StrICmp(zLeft, "index_list")==0 && zRight ){ - Index *pIdx; - Table *pTab; - if( sqlite3ReadSchema(pParse) ) goto pragma_out; - pTab = sqlite3FindTable(db, zRight, zDb); - if( pTab ){ - v = sqlite3GetVdbe(pParse); - pIdx = pTab->pIndex; - if( pIdx ){ - int i = 0; - sqlite3VdbeSetNumCols(v, 3); - pParse->nMem = 3; - sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "seq", SQLITE_STATIC); - sqlite3VdbeSetColName(v, 1, COLNAME_NAME, "name", SQLITE_STATIC); - sqlite3VdbeSetColName(v, 2, COLNAME_NAME, "unique", SQLITE_STATIC); - while(pIdx){ - sqlite3VdbeAddOp2(v, OP_Integer, i, 1); - sqlite3VdbeAddOp4(v, OP_String8, 0, 2, 0, pIdx->zName, 0); - sqlite3VdbeAddOp2(v, OP_Integer, pIdx->onError!=OE_None, 3); - sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 3); - ++i; - pIdx = pIdx->pNext; - } - } +/* +** Add a new column to the table currently being constructed. +** +** The parser calls this routine once for each column declaration +** in a CREATE TABLE statement. sqlite3StartTable() gets called +** first to get things going. Then this routine is called for each +** column. +*/ +SQLITE_PRIVATE void sqlite3AddColumn(Parse *pParse, Token *pName){ + Table *p; + int i; + char *z; + Column *pCol; + sqlite3 *db = pParse->db; + if( (p = pParse->pNewTable)==0 ) return; +#if SQLITE_MAX_COLUMN + if( p->nCol+1>db->aLimit[SQLITE_LIMIT_COLUMN] ){ + sqlite3ErrorMsg(pParse, "too many columns on %s", p->zName); + return; + } +#endif + z = sqlite3NameFromToken(db, pName); + if( z==0 ) return; + for(i=0; inCol; i++){ + if( STRICMP(z, p->aCol[i].zName) ){ + sqlite3ErrorMsg(pParse, "duplicate column name: %s", z); + sqlite3DbFree(db, z); + return; } - }else - - if( sqlite3StrICmp(zLeft, "database_list")==0 ){ - int i; - if( sqlite3ReadSchema(pParse) ) goto pragma_out; - sqlite3VdbeSetNumCols(v, 3); - pParse->nMem = 3; - sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "seq", SQLITE_STATIC); - sqlite3VdbeSetColName(v, 1, COLNAME_NAME, "name", SQLITE_STATIC); - sqlite3VdbeSetColName(v, 2, COLNAME_NAME, "file", SQLITE_STATIC); - for(i=0; inDb; i++){ - if( db->aDb[i].pBt==0 ) continue; - assert( db->aDb[i].zName!=0 ); - sqlite3VdbeAddOp2(v, OP_Integer, i, 1); - sqlite3VdbeAddOp4(v, OP_String8, 0, 2, 0, db->aDb[i].zName, 0); - sqlite3VdbeAddOp4(v, OP_String8, 0, 3, 0, - sqlite3BtreeGetFilename(db->aDb[i].pBt), 0); - sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 3); + } + if( (p->nCol & 0x7)==0 ){ + Column *aNew; + aNew = sqlite3DbRealloc(db,p->aCol,(p->nCol+8)*sizeof(p->aCol[0])); + if( aNew==0 ){ + sqlite3DbFree(db, z); + return; } - }else + p->aCol = aNew; + } + pCol = &p->aCol[p->nCol]; + memset(pCol, 0, sizeof(p->aCol[0])); + pCol->zName = z; + + /* If there is no type specified, columns have the default affinity + ** 'NONE'. If there is a type specified, then sqlite3AddColumnType() will + ** be called next to set pCol->affinity correctly. + */ + pCol->affinity = SQLITE_AFF_NONE; + p->nCol++; +} - if( sqlite3StrICmp(zLeft, "collation_list")==0 ){ - int i = 0; - HashElem *p; - sqlite3VdbeSetNumCols(v, 2); - pParse->nMem = 2; - sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "seq", SQLITE_STATIC); - sqlite3VdbeSetColName(v, 1, COLNAME_NAME, "name", SQLITE_STATIC); - for(p=sqliteHashFirst(&db->aCollSeq); p; p=sqliteHashNext(p)){ - CollSeq *pColl = (CollSeq *)sqliteHashData(p); - sqlite3VdbeAddOp2(v, OP_Integer, i++, 1); - sqlite3VdbeAddOp4(v, OP_String8, 0, 2, 0, pColl->zName, 0); - sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 2); - } - }else -#endif /* SQLITE_OMIT_SCHEMA_PRAGMAS */ +/* +** This routine is called by the parser while in the middle of +** parsing a CREATE TABLE statement. A "NOT NULL" constraint has +** been seen on a column. This routine sets the notNull flag on +** the column currently under construction. +*/ +SQLITE_PRIVATE void sqlite3AddNotNull(Parse *pParse, int onError){ + Table *p; + p = pParse->pNewTable; + if( p==0 || NEVER(p->nCol<1) ) return; + p->aCol[p->nCol-1].notNull = (u8)onError; +} -#ifndef SQLITE_OMIT_FOREIGN_KEY - if( sqlite3StrICmp(zLeft, "foreign_key_list")==0 && zRight ){ - FKey *pFK; - Table *pTab; - if( sqlite3ReadSchema(pParse) ) goto pragma_out; - pTab = sqlite3FindTable(db, zRight, zDb); - if( pTab ){ - v = sqlite3GetVdbe(pParse); - pFK = pTab->pFKey; - if( pFK ){ - int i = 0; - sqlite3VdbeSetNumCols(v, 8); - pParse->nMem = 8; - sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "id", SQLITE_STATIC); - sqlite3VdbeSetColName(v, 1, COLNAME_NAME, "seq", SQLITE_STATIC); - sqlite3VdbeSetColName(v, 2, COLNAME_NAME, "table", SQLITE_STATIC); - sqlite3VdbeSetColName(v, 3, COLNAME_NAME, "from", SQLITE_STATIC); - sqlite3VdbeSetColName(v, 4, COLNAME_NAME, "to", SQLITE_STATIC); - sqlite3VdbeSetColName(v, 5, COLNAME_NAME, "on_update", SQLITE_STATIC); - sqlite3VdbeSetColName(v, 6, COLNAME_NAME, "on_delete", SQLITE_STATIC); - sqlite3VdbeSetColName(v, 7, COLNAME_NAME, "match", SQLITE_STATIC); - while(pFK){ - int j; - for(j=0; jnCol; j++){ - char *zCol = pFK->aCol[j].zCol; - char *zOnUpdate = (char *)actionName(pFK->updateConf); - char *zOnDelete = (char *)actionName(pFK->deleteConf); - sqlite3VdbeAddOp2(v, OP_Integer, i, 1); - sqlite3VdbeAddOp2(v, OP_Integer, j, 2); - sqlite3VdbeAddOp4(v, OP_String8, 0, 3, 0, pFK->zTo, 0); - sqlite3VdbeAddOp4(v, OP_String8, 0, 4, 0, - pTab->aCol[pFK->aCol[j].iFrom].zName, 0); - sqlite3VdbeAddOp4(v, zCol ? OP_String8 : OP_Null, 0, 5, 0, zCol, 0); - sqlite3VdbeAddOp4(v, OP_String8, 0, 6, 0, zOnUpdate, 0); - sqlite3VdbeAddOp4(v, OP_String8, 0, 7, 0, zOnDelete, 0); - sqlite3VdbeAddOp4(v, OP_String8, 0, 8, 0, "NONE", 0); - sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 8); - } - ++i; - pFK = pFK->pNextFrom; - } - } - } - }else -#endif /* !defined(SQLITE_OMIT_FOREIGN_KEY) */ +/* +** Scan the column type name zType (length nType) and return the +** associated affinity type. +** +** This routine does a case-independent search of zType for the +** substrings in the following table. If one of the substrings is +** found, the corresponding affinity is returned. If zType contains +** more than one of the substrings, entries toward the top of +** the table take priority. For example, if zType is 'BLOBINT', +** SQLITE_AFF_INTEGER is returned. +** +** Substring | Affinity +** -------------------------------- +** 'INT' | SQLITE_AFF_INTEGER +** 'CHAR' | SQLITE_AFF_TEXT +** 'CLOB' | SQLITE_AFF_TEXT +** 'TEXT' | SQLITE_AFF_TEXT +** 'BLOB' | SQLITE_AFF_NONE +** 'REAL' | SQLITE_AFF_REAL +** 'FLOA' | SQLITE_AFF_REAL +** 'DOUB' | SQLITE_AFF_REAL +** +** If none of the substrings in the above table are found, +** SQLITE_AFF_NUMERIC is returned. +*/ +SQLITE_PRIVATE char sqlite3AffinityType(const char *zIn){ + u32 h = 0; + char aff = SQLITE_AFF_NUMERIC; -#ifndef NDEBUG - if( sqlite3StrICmp(zLeft, "parser_trace")==0 ){ - if( zRight ){ - if( getBoolean(zRight) ){ - sqlite3ParserTrace(stderr, "parser: "); - }else{ - sqlite3ParserTrace(0, 0); - } - } - }else + if( zIn ) while( zIn[0] ){ + h = (h<<8) + sqlite3UpperToLower[(*zIn)&0xff]; + zIn++; + if( h==(('c'<<24)+('h'<<16)+('a'<<8)+'r') ){ /* CHAR */ + aff = SQLITE_AFF_TEXT; + }else if( h==(('c'<<24)+('l'<<16)+('o'<<8)+'b') ){ /* CLOB */ + aff = SQLITE_AFF_TEXT; + }else if( h==(('t'<<24)+('e'<<16)+('x'<<8)+'t') ){ /* TEXT */ + aff = SQLITE_AFF_TEXT; + }else if( h==(('b'<<24)+('l'<<16)+('o'<<8)+'b') /* BLOB */ + && (aff==SQLITE_AFF_NUMERIC || aff==SQLITE_AFF_REAL) ){ + aff = SQLITE_AFF_NONE; +#ifndef SQLITE_OMIT_FLOATING_POINT + }else if( h==(('r'<<24)+('e'<<16)+('a'<<8)+'l') /* REAL */ + && aff==SQLITE_AFF_NUMERIC ){ + aff = SQLITE_AFF_REAL; + }else if( h==(('f'<<24)+('l'<<16)+('o'<<8)+'a') /* FLOA */ + && aff==SQLITE_AFF_NUMERIC ){ + aff = SQLITE_AFF_REAL; + }else if( h==(('d'<<24)+('o'<<16)+('u'<<8)+'b') /* DOUB */ + && aff==SQLITE_AFF_NUMERIC ){ + aff = SQLITE_AFF_REAL; #endif - - /* Reinstall the LIKE and GLOB functions. The variant of LIKE - ** used will be case sensitive or not depending on the RHS. - */ - if( sqlite3StrICmp(zLeft, "case_sensitive_like")==0 ){ - if( zRight ){ - sqlite3RegisterLikeFunctions(db, getBoolean(zRight)); + }else if( (h&0x00FFFFFF)==(('i'<<16)+('n'<<8)+'t') ){ /* INT */ + aff = SQLITE_AFF_INTEGER; + break; } - }else + } -#ifndef SQLITE_INTEGRITY_CHECK_ERROR_MAX -# define SQLITE_INTEGRITY_CHECK_ERROR_MAX 100 -#endif + return aff; +} -#ifndef SQLITE_OMIT_INTEGRITY_CHECK - /* Pragma "quick_check" is an experimental reduced version of - ** integrity_check designed to detect most database corruption - ** without most of the overhead of a full integrity-check. - */ - if( sqlite3StrICmp(zLeft, "integrity_check")==0 - || sqlite3StrICmp(zLeft, "quick_check")==0 - ){ - int i, j, addr, mxErr; +/* +** This routine is called by the parser while in the middle of +** parsing a CREATE TABLE statement. The pFirst token is the first +** token in the sequence of tokens that describe the type of the +** column currently under construction. pLast is the last token +** in the sequence. Use this information to construct a string +** that contains the typename of the column and store that string +** in zType. +*/ +SQLITE_PRIVATE void sqlite3AddColumnType(Parse *pParse, Token *pType){ + Table *p; + Column *pCol; - /* Code that appears at the end of the integrity check. If no error - ** messages have been generated, output OK. Otherwise output the - ** error message - */ - static const VdbeOpList endCode[] = { - { OP_AddImm, 1, 0, 0}, /* 0 */ - { OP_IfNeg, 1, 0, 0}, /* 1 */ - { OP_String8, 0, 3, 0}, /* 2 */ - { OP_ResultRow, 3, 1, 0}, - }; - - int isQuick = (zLeft[0]=='q'); - - /* Initialize the VDBE program */ - if( sqlite3ReadSchema(pParse) ) goto pragma_out; - pParse->nMem = 6; - sqlite3VdbeSetNumCols(v, 1); - sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "integrity_check", SQLITE_STATIC); - - /* Set the maximum error count */ - mxErr = SQLITE_INTEGRITY_CHECK_ERROR_MAX; - if( zRight ){ - mxErr = atoi(zRight); - if( mxErr<=0 ){ - mxErr = SQLITE_INTEGRITY_CHECK_ERROR_MAX; - } - } - sqlite3VdbeAddOp2(v, OP_Integer, mxErr, 1); /* reg[1] holds errors left */ - - /* Do an integrity check on each database file */ - for(i=0; inDb; i++){ - HashElem *x; - Hash *pTbls; - int cnt = 0; - - if( OMIT_TEMPDB && i==1 ) continue; - - sqlite3CodeVerifySchema(pParse, i); - addr = sqlite3VdbeAddOp1(v, OP_IfPos, 1); /* Halt if out of errors */ - sqlite3VdbeAddOp2(v, OP_Halt, 0, 0); - sqlite3VdbeJumpHere(v, addr); - - /* Do an integrity check of the B-Tree - ** - ** Begin by filling registers 2, 3, ... with the root pages numbers - ** for all tables and indices in the database. - */ - pTbls = &db->aDb[i].pSchema->tblHash; - for(x=sqliteHashFirst(pTbls); x; x=sqliteHashNext(x)){ - Table *pTab = sqliteHashData(x); - Index *pIdx; - sqlite3VdbeAddOp2(v, OP_Integer, pTab->tnum, 2+cnt); - cnt++; - for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){ - sqlite3VdbeAddOp2(v, OP_Integer, pIdx->tnum, 2+cnt); - cnt++; - } - } - - /* Make sure sufficient number of registers have been allocated */ - if( pParse->nMem < cnt+4 ){ - pParse->nMem = cnt+4; - } - - /* Do the b-tree integrity checks */ - sqlite3VdbeAddOp3(v, OP_IntegrityCk, 2, cnt, 1); - sqlite3VdbeChangeP5(v, (u8)i); - addr = sqlite3VdbeAddOp1(v, OP_IsNull, 2); - sqlite3VdbeAddOp4(v, OP_String8, 0, 3, 0, - sqlite3MPrintf(db, "*** in database %s ***\n", db->aDb[i].zName), - P4_DYNAMIC); - sqlite3VdbeAddOp3(v, OP_Move, 2, 4, 1); - sqlite3VdbeAddOp3(v, OP_Concat, 4, 3, 2); - sqlite3VdbeAddOp2(v, OP_ResultRow, 2, 1); - sqlite3VdbeJumpHere(v, addr); + p = pParse->pNewTable; + if( p==0 || NEVER(p->nCol<1) ) return; + pCol = &p->aCol[p->nCol-1]; + assert( pCol->zType==0 ); + pCol->zType = sqlite3NameFromToken(pParse->db, pType); + pCol->affinity = sqlite3AffinityType(pCol->zType); +} - /* Make sure all the indices are constructed correctly. +/* +** The expression is the default value for the most recently added column +** of the table currently under construction. +** +** Default value expressions must be constant. Raise an exception if this +** is not the case. +** +** This routine is called by the parser while in the middle of +** parsing a CREATE TABLE statement. +*/ +SQLITE_PRIVATE void sqlite3AddDefaultValue(Parse *pParse, ExprSpan *pSpan){ + Table *p; + Column *pCol; + sqlite3 *db = pParse->db; + p = pParse->pNewTable; + if( p!=0 ){ + pCol = &(p->aCol[p->nCol-1]); + if( !sqlite3ExprIsConstantOrFunction(pSpan->pExpr) ){ + sqlite3ErrorMsg(pParse, "default value of column [%s] is not constant", + pCol->zName); + }else{ + /* A copy of pExpr is used instead of the original, as pExpr contains + ** tokens that point to volatile memory. The 'span' of the expression + ** is required by pragma table_info. */ - for(x=sqliteHashFirst(pTbls); x && !isQuick; x=sqliteHashNext(x)){ - Table *pTab = sqliteHashData(x); - Index *pIdx; - int loopTop; - - if( pTab->pIndex==0 ) continue; - addr = sqlite3VdbeAddOp1(v, OP_IfPos, 1); /* Stop if out of errors */ - sqlite3VdbeAddOp2(v, OP_Halt, 0, 0); - sqlite3VdbeJumpHere(v, addr); - sqlite3OpenTableAndIndices(pParse, pTab, 1, OP_OpenRead); - sqlite3VdbeAddOp2(v, OP_Integer, 0, 2); /* reg(2) will count entries */ - loopTop = sqlite3VdbeAddOp2(v, OP_Rewind, 1, 0); - sqlite3VdbeAddOp2(v, OP_AddImm, 2, 1); /* increment entry count */ - for(j=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, j++){ - int jmp2; - static const VdbeOpList idxErr[] = { - { OP_AddImm, 1, -1, 0}, - { OP_String8, 0, 3, 0}, /* 1 */ - { OP_Rowid, 1, 4, 0}, - { OP_String8, 0, 5, 0}, /* 3 */ - { OP_String8, 0, 6, 0}, /* 4 */ - { OP_Concat, 4, 3, 3}, - { OP_Concat, 5, 3, 3}, - { OP_Concat, 6, 3, 3}, - { OP_ResultRow, 3, 1, 0}, - { OP_IfPos, 1, 0, 0}, /* 9 */ - { OP_Halt, 0, 0, 0}, - }; - sqlite3GenerateIndexKey(pParse, pIdx, 1, 3, 1); - jmp2 = sqlite3VdbeAddOp3(v, OP_Found, j+2, 0, 3); - addr = sqlite3VdbeAddOpList(v, ArraySize(idxErr), idxErr); - sqlite3VdbeChangeP4(v, addr+1, "rowid ", P4_STATIC); - sqlite3VdbeChangeP4(v, addr+3, " missing from index ", P4_STATIC); - sqlite3VdbeChangeP4(v, addr+4, pIdx->zName, P4_STATIC); - sqlite3VdbeJumpHere(v, addr+9); - sqlite3VdbeJumpHere(v, jmp2); - } - sqlite3VdbeAddOp2(v, OP_Next, 1, loopTop+1); - sqlite3VdbeJumpHere(v, loopTop); - for(j=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, j++){ - static const VdbeOpList cntIdx[] = { - { OP_Integer, 0, 3, 0}, - { OP_Rewind, 0, 0, 0}, /* 1 */ - { OP_AddImm, 3, 1, 0}, - { OP_Next, 0, 0, 0}, /* 3 */ - { OP_Eq, 2, 0, 3}, /* 4 */ - { OP_AddImm, 1, -1, 0}, - { OP_String8, 0, 2, 0}, /* 6 */ - { OP_String8, 0, 3, 0}, /* 7 */ - { OP_Concat, 3, 2, 2}, - { OP_ResultRow, 2, 1, 0}, - }; - addr = sqlite3VdbeAddOp1(v, OP_IfPos, 1); - sqlite3VdbeAddOp2(v, OP_Halt, 0, 0); - sqlite3VdbeJumpHere(v, addr); - addr = sqlite3VdbeAddOpList(v, ArraySize(cntIdx), cntIdx); - sqlite3VdbeChangeP1(v, addr+1, j+2); - sqlite3VdbeChangeP2(v, addr+1, addr+4); - sqlite3VdbeChangeP1(v, addr+3, j+2); - sqlite3VdbeChangeP2(v, addr+3, addr+2); - sqlite3VdbeJumpHere(v, addr+4); - sqlite3VdbeChangeP4(v, addr+6, - "wrong # of entries in index ", P4_STATIC); - sqlite3VdbeChangeP4(v, addr+7, pIdx->zName, P4_STATIC); - } - } + sqlite3ExprDelete(db, pCol->pDflt); + pCol->pDflt = sqlite3ExprDup(db, pSpan->pExpr, EXPRDUP_REDUCE); + sqlite3DbFree(db, pCol->zDflt); + pCol->zDflt = sqlite3DbStrNDup(db, (char*)pSpan->zStart, + (int)(pSpan->zEnd - pSpan->zStart)); } - addr = sqlite3VdbeAddOpList(v, ArraySize(endCode), endCode); - sqlite3VdbeChangeP2(v, addr, -mxErr); - sqlite3VdbeJumpHere(v, addr+1); - sqlite3VdbeChangeP4(v, addr+2, "ok", P4_STATIC); - }else -#endif /* SQLITE_OMIT_INTEGRITY_CHECK */ + } + sqlite3ExprDelete(db, pSpan->pExpr); +} -#ifndef SQLITE_OMIT_UTF16 - /* - ** PRAGMA encoding - ** PRAGMA encoding = "utf-8"|"utf-16"|"utf-16le"|"utf-16be" - ** - ** In its first form, this pragma returns the encoding of the main - ** database. If the database is not initialized, it is initialized now. - ** - ** The second form of this pragma is a no-op if the main database file - ** has not already been initialized. In this case it sets the default - ** encoding that will be used for the main database file if a new file - ** is created. If an existing main database file is opened, then the - ** default text encoding for the existing database is used. - ** - ** In all cases new databases created using the ATTACH command are - ** created to use the same default text encoding as the main database. If - ** the main database has not been initialized and/or created when ATTACH - ** is executed, this is done before the ATTACH operation. - ** - ** In the second form this pragma sets the text encoding to be used in - ** new database files created using this database handle. It is only - ** useful if invoked immediately after the main database i - */ - if( sqlite3StrICmp(zLeft, "encoding")==0 ){ - static const struct EncName { - char *zName; - u8 enc; - } encnames[] = { - { "UTF8", SQLITE_UTF8 }, - { "UTF-8", SQLITE_UTF8 }, /* Must be element [1] */ - { "UTF-16le", SQLITE_UTF16LE }, /* Must be element [2] */ - { "UTF-16be", SQLITE_UTF16BE }, /* Must be element [3] */ - { "UTF16le", SQLITE_UTF16LE }, - { "UTF16be", SQLITE_UTF16BE }, - { "UTF-16", 0 }, /* SQLITE_UTF16NATIVE */ - { "UTF16", 0 }, /* SQLITE_UTF16NATIVE */ - { 0, 0 } - }; - const struct EncName *pEnc; - if( !zRight ){ /* "PRAGMA encoding" */ - if( sqlite3ReadSchema(pParse) ) goto pragma_out; - sqlite3VdbeSetNumCols(v, 1); - sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "encoding", SQLITE_STATIC); - sqlite3VdbeAddOp2(v, OP_String8, 0, 1); - assert( encnames[SQLITE_UTF8].enc==SQLITE_UTF8 ); - assert( encnames[SQLITE_UTF16LE].enc==SQLITE_UTF16LE ); - assert( encnames[SQLITE_UTF16BE].enc==SQLITE_UTF16BE ); - sqlite3VdbeChangeP4(v, -1, encnames[ENC(pParse->db)].zName, P4_STATIC); - sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 1); - }else{ /* "PRAGMA encoding = XXX" */ - /* Only change the value of sqlite.enc if the database handle is not - ** initialized. If the main database exists, the new sqlite.enc value - ** will be overwritten when the schema is next loaded. If it does not - ** already exists, it will be created to use the new encoding value. - */ - if( - !(DbHasProperty(db, 0, DB_SchemaLoaded)) || - DbHasProperty(db, 0, DB_Empty) - ){ - for(pEnc=&encnames[0]; pEnc->zName; pEnc++){ - if( 0==sqlite3StrICmp(zRight, pEnc->zName) ){ - ENC(pParse->db) = pEnc->enc ? pEnc->enc : SQLITE_UTF16NATIVE; - break; - } - } - if( !pEnc->zName ){ - sqlite3ErrorMsg(pParse, "unsupported encoding: %s", zRight); +/* +** Designate the PRIMARY KEY for the table. pList is a list of names +** of columns that form the primary key. If pList is NULL, then the +** most recently added column of the table is the primary key. +** +** A table can have at most one primary key. If the table already has +** a primary key (and this is the second primary key) then create an +** error. +** +** If the PRIMARY KEY is on a single column whose datatype is INTEGER, +** then we will try to use that column as the rowid. Set the Table.iPKey +** field of the table under construction to be the index of the +** INTEGER PRIMARY KEY column. Table.iPKey is set to -1 if there is +** no INTEGER PRIMARY KEY. +** +** If the key is not an INTEGER PRIMARY KEY, then create a unique +** index for the key. No index is created for INTEGER PRIMARY KEYs. +*/ +SQLITE_PRIVATE void sqlite3AddPrimaryKey( + Parse *pParse, /* Parsing context */ + ExprList *pList, /* List of field names to be indexed */ + int onError, /* What to do with a uniqueness conflict */ + int autoInc, /* True if the AUTOINCREMENT keyword is present */ + int sortOrder /* SQLITE_SO_ASC or SQLITE_SO_DESC */ +){ + Table *pTab = pParse->pNewTable; + char *zType = 0; + int iCol = -1, i; + if( pTab==0 || IN_DECLARE_VTAB ) goto primary_key_exit; + if( pTab->tabFlags & TF_HasPrimaryKey ){ + sqlite3ErrorMsg(pParse, + "table \"%s\" has more than one primary key", pTab->zName); + goto primary_key_exit; + } + pTab->tabFlags |= TF_HasPrimaryKey; + if( pList==0 ){ + iCol = pTab->nCol - 1; + pTab->aCol[iCol].isPrimKey = 1; + }else{ + for(i=0; inExpr; i++){ + for(iCol=0; iColnCol; iCol++){ + if( sqlite3StrICmp(pList->a[i].zName, pTab->aCol[iCol].zName)==0 ){ + break; } } - } - }else -#endif /* SQLITE_OMIT_UTF16 */ - -#ifndef SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS - /* - ** PRAGMA [database.]schema_version - ** PRAGMA [database.]schema_version = - ** - ** PRAGMA [database.]user_version - ** PRAGMA [database.]user_version = - ** - ** The pragma's schema_version and user_version are used to set or get - ** the value of the schema-version and user-version, respectively. Both - ** the schema-version and the user-version are 32-bit signed integers - ** stored in the database header. - ** - ** The schema-cookie is usually only manipulated internally by SQLite. It - ** is incremented by SQLite whenever the database schema is modified (by - ** creating or dropping a table or index). The schema version is used by - ** SQLite each time a query is executed to ensure that the internal cache - ** of the schema used when compiling the SQL query matches the schema of - ** the database against which the compiled query is actually executed. - ** Subverting this mechanism by using "PRAGMA schema_version" to modify - ** the schema-version is potentially dangerous and may lead to program - ** crashes or database corruption. Use with caution! - ** - ** The user-version is not used internally by SQLite. It may be used by - ** applications for any purpose. - */ - if( sqlite3StrICmp(zLeft, "schema_version")==0 - || sqlite3StrICmp(zLeft, "user_version")==0 - || sqlite3StrICmp(zLeft, "freelist_count")==0 - ){ - int iCookie; /* Cookie index. 1 for schema-cookie, 6 for user-cookie. */ - sqlite3VdbeUsesBtree(v, iDb); - switch( zLeft[0] ){ - case 'f': case 'F': - iCookie = BTREE_FREE_PAGE_COUNT; - break; - case 's': case 'S': - iCookie = BTREE_SCHEMA_VERSION; - break; - default: - iCookie = BTREE_USER_VERSION; - break; - } - - if( zRight && iCookie!=BTREE_FREE_PAGE_COUNT ){ - /* Write the specified cookie value */ - static const VdbeOpList setCookie[] = { - { OP_Transaction, 0, 1, 0}, /* 0 */ - { OP_Integer, 0, 1, 0}, /* 1 */ - { OP_SetCookie, 0, 0, 1}, /* 2 */ - }; - int addr = sqlite3VdbeAddOpList(v, ArraySize(setCookie), setCookie); - sqlite3VdbeChangeP1(v, addr, iDb); - sqlite3VdbeChangeP1(v, addr+1, atoi(zRight)); - sqlite3VdbeChangeP1(v, addr+2, iDb); - sqlite3VdbeChangeP2(v, addr+2, iCookie); - }else{ - /* Read the specified cookie value */ - static const VdbeOpList readCookie[] = { - { OP_ReadCookie, 0, 1, 0}, /* 0 */ - { OP_ResultRow, 1, 1, 0} - }; - int addr = sqlite3VdbeAddOpList(v, ArraySize(readCookie), readCookie); - sqlite3VdbeChangeP1(v, addr, iDb); - sqlite3VdbeChangeP3(v, addr, iCookie); - sqlite3VdbeSetNumCols(v, 1); - sqlite3VdbeSetColName(v, 0, COLNAME_NAME, zLeft, SQLITE_TRANSIENT); - } - }else -#endif /* SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS */ - -#if defined(SQLITE_DEBUG) || defined(SQLITE_TEST) - /* - ** Report the current state of file logs for all databases - */ - if( sqlite3StrICmp(zLeft, "lock_status")==0 ){ - static const char *const azLockName[] = { - "unlocked", "shared", "reserved", "pending", "exclusive" - }; - int i; - sqlite3VdbeSetNumCols(v, 2); - pParse->nMem = 2; - sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "database", SQLITE_STATIC); - sqlite3VdbeSetColName(v, 1, COLNAME_NAME, "status", SQLITE_STATIC); - for(i=0; inDb; i++){ - Btree *pBt; - Pager *pPager; - const char *zState = "unknown"; - int j; - if( db->aDb[i].zName==0 ) continue; - sqlite3VdbeAddOp4(v, OP_String8, 0, 1, 0, db->aDb[i].zName, P4_STATIC); - pBt = db->aDb[i].pBt; - if( pBt==0 || (pPager = sqlite3BtreePager(pBt))==0 ){ - zState = "closed"; - }else if( sqlite3_file_control(db, i ? db->aDb[i].zName : 0, - SQLITE_FCNTL_LOCKSTATE, &j)==SQLITE_OK ){ - zState = azLockName[j]; + if( iColnCol ){ + pTab->aCol[iCol].isPrimKey = 1; } - sqlite3VdbeAddOp4(v, OP_String8, 0, 2, 0, zState, P4_STATIC); - sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 2); - } - - }else -#endif - -#if SQLITE_HAS_CODEC - if( sqlite3StrICmp(zLeft, "key")==0 && zRight ){ - sqlite3_key(db, zRight, sqlite3Strlen30(zRight)); - }else - if( sqlite3StrICmp(zLeft, "rekey")==0 && zRight ){ - sqlite3_rekey(db, zRight, sqlite3Strlen30(zRight)); - }else - if( zRight && (sqlite3StrICmp(zLeft, "hexkey")==0 || - sqlite3StrICmp(zLeft, "hexrekey")==0) ){ - int i, h1, h2; - char zKey[40]; - for(i=0; (h1 = zRight[i])!=0 && (h2 = zRight[i+1])!=0; i+=2){ - h1 += 9*(1&(h1>>6)); - h2 += 9*(1&(h2>>6)); - zKey[i/2] = (h2 & 0x0f) | ((h1 & 0xf)<<4); - } - if( (zLeft[3] & 0xf)==0xb ){ - sqlite3_key(db, zKey, i/2); - }else{ - sqlite3_rekey(db, zKey, i/2); - } - }else -#endif -#if SQLITE_HAS_CODEC || defined(SQLITE_ENABLE_CEROD) - if( sqlite3StrICmp(zLeft, "activate_extensions")==0 ){ -#if SQLITE_HAS_CODEC - if( sqlite3StrNICmp(zRight, "see-", 4)==0 ){ - extern void sqlite3_activate_see(const char*); - sqlite3_activate_see(&zRight[4]); } + if( pList->nExpr>1 ) iCol = -1; + } + if( iCol>=0 && iColnCol ){ + zType = pTab->aCol[iCol].zType; + } + if( zType && sqlite3StrICmp(zType, "INTEGER")==0 + && sortOrder==SQLITE_SO_ASC ){ + pTab->iPKey = iCol; + pTab->keyConf = (u8)onError; + assert( autoInc==0 || autoInc==1 ); + pTab->tabFlags |= autoInc*TF_Autoincrement; + }else if( autoInc ){ +#ifndef SQLITE_OMIT_AUTOINCREMENT + sqlite3ErrorMsg(pParse, "AUTOINCREMENT is only allowed on an " + "INTEGER PRIMARY KEY"); #endif -#ifdef SQLITE_ENABLE_CEROD - if( sqlite3StrNICmp(zRight, "cerod-", 6)==0 ){ - extern void sqlite3_activate_cerod(const char*); - sqlite3_activate_cerod(&zRight[6]); + }else{ + Index *p; + p = sqlite3CreateIndex(pParse, 0, 0, 0, pList, onError, 0, 0, sortOrder, 0); + if( p ){ + p->autoIndex = 2; } -#endif - }else -#endif - - - {/* Empty ELSE clause */} - - /* Code an OP_Expire at the end of each PRAGMA program to cause - ** the VDBE implementing the pragma to expire. Most (all?) pragmas - ** are only valid for a single execution. - */ - sqlite3VdbeAddOp2(v, OP_Expire, 1, 0); - - /* - ** Reset the safety level, in case the fullfsync flag or synchronous - ** setting changed. - */ -#ifndef SQLITE_OMIT_PAGER_PRAGMAS - if( db->autoCommit ){ - sqlite3BtreeSetSafetyLevel(pDb->pBt, pDb->safety_level, - (db->flags&SQLITE_FullFSync)!=0); + pList = 0; } -#endif -pragma_out: - sqlite3DbFree(db, zLeft); - sqlite3DbFree(db, zRight); -} - -#endif /* SQLITE_OMIT_PRAGMA */ -/************** End of pragma.c **********************************************/ -/************** Begin file prepare.c *****************************************/ -/* -** 2005 May 25 -** -** The author disclaims copyright to this source code. In place of -** a legal notice, here is a blessing: -** -** May you do good and not evil. -** May you find forgiveness for yourself and forgive others. -** May you share freely, never taking more than you give. -** -************************************************************************* -** This file contains the implementation of the sqlite3_prepare() -** interface, and routines that contribute to loading the database schema -** from disk. -** -** $Id: prepare.c,v 1.125 2009/06/25 11:50:21 drh Exp $ -*/ +primary_key_exit: + sqlite3ExprListDelete(pParse->db, pList); + return; +} /* -** Fill the InitData structure with an error message that indicates -** that the database is corrupt. +** Add a new CHECK constraint to the table currently under construction. */ -static void corruptSchema( - InitData *pData, /* Initialization context */ - const char *zObj, /* Object being parsed at the point of error */ - const char *zExtra /* Error information */ +SQLITE_PRIVATE void sqlite3AddCheckConstraint( + Parse *pParse, /* Parsing context */ + Expr *pCheckExpr /* The check expression */ ){ - sqlite3 *db = pData->db; - if( !db->mallocFailed && (db->flags & SQLITE_RecoveryMode)==0 ){ - if( zObj==0 ) zObj = "?"; - sqlite3SetString(pData->pzErrMsg, pData->db, - "malformed database schema (%s)", zObj); - if( zExtra ){ - *pData->pzErrMsg = sqlite3MAppendf(pData->db, *pData->pzErrMsg, "%s - %s", - *pData->pzErrMsg, zExtra); +#ifndef SQLITE_OMIT_CHECK + Table *pTab = pParse->pNewTable; + if( pTab && !IN_DECLARE_VTAB ){ + pTab->pCheck = sqlite3ExprListAppend(pParse, pTab->pCheck, pCheckExpr); + if( pParse->constraintName.n ){ + sqlite3ExprListSetName(pParse, pTab->pCheck, &pParse->constraintName, 1); } + }else +#endif + { + sqlite3ExprDelete(pParse->db, pCheckExpr); } - pData->rc = db->mallocFailed ? SQLITE_NOMEM : SQLITE_CORRUPT; } /* -** This is the callback routine for the code that initializes the -** database. See sqlite3Init() below for additional information. -** This routine is also called from the OP_ParseSchema opcode of the VDBE. -** -** Each callback contains the following information: -** -** argv[0] = name of thing being created -** argv[1] = root page number for table or index. 0 for trigger or view. -** argv[2] = SQL text for the CREATE statement. -** +** Set the collation function of the most recently parsed table column +** to the CollSeq given. */ -SQLITE_PRIVATE int sqlite3InitCallback(void *pInit, int argc, char **argv, char **NotUsed){ - InitData *pData = (InitData*)pInit; - sqlite3 *db = pData->db; - int iDb = pData->iDb; +SQLITE_PRIVATE void sqlite3AddCollateType(Parse *pParse, Token *pToken){ + Table *p; + int i; + char *zColl; /* Dequoted name of collation sequence */ + sqlite3 *db; - assert( argc==3 ); - UNUSED_PARAMETER2(NotUsed, argc); - assert( sqlite3_mutex_held(db->mutex) ); - DbClearProperty(db, iDb, DB_Empty); - if( db->mallocFailed ){ - corruptSchema(pData, argv[0], 0); - return 1; - } + if( (p = pParse->pNewTable)==0 ) return; + i = p->nCol-1; + db = pParse->db; + zColl = sqlite3NameFromToken(db, pToken); + if( !zColl ) return; - assert( iDb>=0 && iDbnDb ); - if( argv==0 ) return 0; /* Might happen if EMPTY_RESULT_CALLBACKS are on */ - if( argv[1]==0 ){ - corruptSchema(pData, argv[0], 0); - }else if( argv[2] && argv[2][0] ){ - /* Call the parser to process a CREATE TABLE, INDEX or VIEW. - ** But because db->init.busy is set to 1, no VDBE code is generated - ** or executed. All the parser does is build the internal data - ** structures that describe the table, index, or view. + if( sqlite3LocateCollSeq(pParse, zColl) ){ + Index *pIdx; + p->aCol[i].zColl = zColl; + + /* If the column is declared as " PRIMARY KEY COLLATE ", + ** then an index may have been created on this column before the + ** collation type was added. Correct this if it is the case. */ - char *zErr; - int rc; - assert( db->init.busy ); - db->init.iDb = iDb; - db->init.newTnum = atoi(argv[1]); - rc = sqlite3_exec(db, argv[2], 0, 0, &zErr); - db->init.iDb = 0; - assert( rc!=SQLITE_OK || zErr==0 ); - if( SQLITE_OK!=rc ){ - pData->rc = rc; - if( rc==SQLITE_NOMEM ){ - db->mallocFailed = 1; - }else if( rc!=SQLITE_INTERRUPT && rc!=SQLITE_LOCKED ){ - corruptSchema(pData, argv[0], zErr); + for(pIdx=p->pIndex; pIdx; pIdx=pIdx->pNext){ + assert( pIdx->nColumn==1 ); + if( pIdx->aiColumn[0]==i ){ + pIdx->azColl[0] = p->aCol[i].zColl; } - sqlite3DbFree(db, zErr); } - }else if( argv[0]==0 ){ - corruptSchema(pData, 0, 0); }else{ - /* If the SQL column is blank it means this is an index that - ** was created to be the PRIMARY KEY or to fulfill a UNIQUE - ** constraint for a CREATE TABLE. The index should have already - ** been created when we processed the CREATE TABLE. All we have - ** to do here is record the root page number for that index. - */ - Index *pIndex; - pIndex = sqlite3FindIndex(db, argv[0], db->aDb[iDb].zName); - if( pIndex==0 ){ - /* This can occur if there exists an index on a TEMP table which - ** has the same name as another index on a permanent index. Since - ** the permanent table is hidden by the TEMP table, we can also - ** safely ignore the index on the permanent table. - */ - /* Do Nothing */; - }else if( sqlite3GetInt32(argv[1], &pIndex->tnum)==0 ){ - corruptSchema(pData, argv[0], "invalid rootpage"); - } + sqlite3DbFree(db, zColl); } - return 0; } /* -** Attempt to read the database schema and initialize internal -** data structures for a single database file. The index of the -** database file is given by iDb. iDb==0 is used for the main -** database. iDb==1 should never be used. iDb>=2 is used for -** auxiliary databases. Return one of the SQLITE_ error codes to -** indicate success or failure. +** This function returns the collation sequence for database native text +** encoding identified by the string zName, length nName. +** +** If the requested collation sequence is not available, or not available +** in the database native encoding, the collation factory is invoked to +** request it. If the collation factory does not supply such a sequence, +** and the sequence is available in another text encoding, then that is +** returned instead. +** +** If no versions of the requested collations sequence are available, or +** another error occurs, NULL is returned and an error message written into +** pParse. +** +** This routine is a wrapper around sqlite3FindCollSeq(). This routine +** invokes the collation factory if the named collation cannot be found +** and generates an error message. +** +** See also: sqlite3FindCollSeq(), sqlite3GetCollSeq() */ -static int sqlite3InitOne(sqlite3 *db, int iDb, char **pzErrMsg){ - int rc; - int i; - BtCursor *curMain; - int size; - Table *pTab; - Db *pDb; - char const *azArg[4]; - int meta[5]; - InitData initData; - char const *zMasterSchema; - char const *zMasterName = SCHEMA_TABLE(iDb); - - /* - ** The master database table has a structure like this - */ - static const char master_schema[] = - "CREATE TABLE sqlite_master(\n" - " type text,\n" - " name text,\n" - " tbl_name text,\n" - " rootpage integer,\n" - " sql text\n" - ")" - ; -#ifndef SQLITE_OMIT_TEMPDB - static const char temp_master_schema[] = - "CREATE TEMP TABLE sqlite_temp_master(\n" - " type text,\n" - " name text,\n" - " tbl_name text,\n" - " rootpage integer,\n" - " sql text\n" - ")" - ; -#else - #define temp_master_schema 0 -#endif - - assert( iDb>=0 && iDbnDb ); - assert( db->aDb[iDb].pSchema ); - assert( sqlite3_mutex_held(db->mutex) ); - assert( iDb==1 || sqlite3BtreeHoldsMutex(db->aDb[iDb].pBt) ); +SQLITE_PRIVATE CollSeq *sqlite3LocateCollSeq(Parse *pParse, const char *zName){ + sqlite3 *db = pParse->db; + u8 enc = ENC(db); + u8 initbusy = db->init.busy; + CollSeq *pColl; - /* zMasterSchema and zInitScript are set to point at the master schema - ** and initialisation script appropriate for the database being - ** initialised. zMasterName is the name of the master table. - */ - if( !OMIT_TEMPDB && iDb==1 ){ - zMasterSchema = temp_master_schema; - }else{ - zMasterSchema = master_schema; + pColl = sqlite3FindCollSeq(db, enc, zName, initbusy); + if( !initbusy && (!pColl || !pColl->xCmp) ){ + pColl = sqlite3GetCollSeq(db, enc, pColl, zName); + if( !pColl ){ + sqlite3ErrorMsg(pParse, "no such collation sequence: %s", zName); + } } - zMasterName = SCHEMA_TABLE(iDb); - /* Construct the schema tables. */ - azArg[0] = zMasterName; - azArg[1] = "1"; - azArg[2] = zMasterSchema; - azArg[3] = 0; - initData.db = db; - initData.iDb = iDb; - initData.rc = SQLITE_OK; - initData.pzErrMsg = pzErrMsg; - (void)sqlite3SafetyOff(db); - sqlite3InitCallback(&initData, 3, (char **)azArg, 0); - (void)sqlite3SafetyOn(db); - if( initData.rc ){ - rc = initData.rc; - goto error_out; - } - pTab = sqlite3FindTable(db, zMasterName, db->aDb[iDb].zName); - if( ALWAYS(pTab) ){ - pTab->tabFlags |= TF_Readonly; - } + return pColl; +} - /* Create a cursor to hold the database open - */ - pDb = &db->aDb[iDb]; - if( pDb->pBt==0 ){ - if( !OMIT_TEMPDB && ALWAYS(iDb==1) ){ - DbSetProperty(db, 1, DB_SchemaLoaded); - } - return SQLITE_OK; - } - curMain = sqlite3MallocZero(sqlite3BtreeCursorSize()); - if( !curMain ){ - rc = SQLITE_NOMEM; - goto error_out; - } - sqlite3BtreeEnter(pDb->pBt); - rc = sqlite3BtreeCursor(pDb->pBt, MASTER_ROOT, 0, 0, curMain); - if( rc==SQLITE_EMPTY ) rc = SQLITE_OK; - /* Get the database meta information. - ** - ** Meta values are as follows: - ** meta[0] Schema cookie. Changes with each schema change. - ** meta[1] File format of schema layer. - ** meta[2] Size of the page cache. - ** meta[3] Largest rootpage (auto/incr_vacuum mode) - ** meta[4] Db text encoding. 1:UTF-8 2:UTF-16LE 3:UTF-16BE - ** meta[5] User version - ** meta[6] Incremental vacuum mode - ** meta[7] unused - ** meta[8] unused - ** meta[9] unused - ** - ** Note: The #defined SQLITE_UTF* symbols in sqliteInt.h correspond to - ** the possible values of meta[4]. - */ - for(i=0; rc==SQLITE_OK && ipBt, i+1, (u32 *)&meta[i]); - } - if( rc ){ - sqlite3SetString(pzErrMsg, db, "%s", sqlite3ErrStr(rc)); - goto initone_error_out; - } - pDb->pSchema->schema_cookie = meta[BTREE_SCHEMA_VERSION-1]; +/* +** Generate code that will increment the schema cookie. +** +** The schema cookie is used to determine when the schema for the +** database changes. After each schema change, the cookie value +** changes. When a process first reads the schema it records the +** cookie. Thereafter, whenever it goes to access the database, +** it checks the cookie to make sure the schema has not changed +** since it was last read. +** +** This plan is not completely bullet-proof. It is possible for +** the schema to change multiple times and for the cookie to be +** set back to prior value. But schema changes are infrequent +** and the probability of hitting the same cookie value is only +** 1 chance in 2^32. So we're safe enough. +*/ +SQLITE_PRIVATE void sqlite3ChangeCookie(Parse *pParse, int iDb){ + int r1 = sqlite3GetTempReg(pParse); + sqlite3 *db = pParse->db; + Vdbe *v = pParse->pVdbe; + assert( sqlite3SchemaMutexHeld(db, iDb, 0) ); + sqlite3VdbeAddOp2(v, OP_Integer, db->aDb[iDb].pSchema->schema_cookie+1, r1); + sqlite3VdbeAddOp3(v, OP_SetCookie, iDb, BTREE_SCHEMA_VERSION, r1); + sqlite3ReleaseTempReg(pParse, r1); +} - /* If opening a non-empty database, check the text encoding. For the - ** main database, set sqlite3.enc to the encoding of the main database. - ** For an attached db, it is an error if the encoding is not the same - ** as sqlite3.enc. - */ - if( meta[BTREE_TEXT_ENCODING-1] ){ /* text encoding */ - if( iDb==0 ){ - u8 encoding; - /* If opening the main database, set ENC(db). */ - encoding = (u8)meta[BTREE_TEXT_ENCODING-1] & 3; - if( encoding==0 ) encoding = SQLITE_UTF8; - ENC(db) = encoding; - db->pDfltColl = sqlite3FindCollSeq(db, SQLITE_UTF8, "BINARY", 0); - }else{ - /* If opening an attached database, the encoding much match ENC(db) */ - if( meta[BTREE_TEXT_ENCODING-1]!=ENC(db) ){ - sqlite3SetString(pzErrMsg, db, "attached databases must use the same" - " text encoding as main database"); - rc = SQLITE_ERROR; - goto initone_error_out; - } - } - }else{ - DbSetProperty(db, iDb, DB_Empty); +/* +** Measure the number of characters needed to output the given +** identifier. The number returned includes any quotes used +** but does not include the null terminator. +** +** The estimate is conservative. It might be larger that what is +** really needed. +*/ +static int identLength(const char *z){ + int n; + for(n=0; *z; n++, z++){ + if( *z=='"' ){ n++; } } - pDb->pSchema->enc = ENC(db); + return n + 2; +} - if( pDb->pSchema->cache_size==0 ){ - size = meta[BTREE_DEFAULT_CACHE_SIZE-1]; - if( size==0 ){ size = SQLITE_DEFAULT_CACHE_SIZE; } - if( size<0 ) size = -size; - pDb->pSchema->cache_size = size; - sqlite3BtreeSetCacheSize(pDb->pBt, pDb->pSchema->cache_size); - } +/* +** The first parameter is a pointer to an output buffer. The second +** parameter is a pointer to an integer that contains the offset at +** which to write into the output buffer. This function copies the +** nul-terminated string pointed to by the third parameter, zSignedIdent, +** to the specified offset in the buffer and updates *pIdx to refer +** to the first byte after the last byte written before returning. +** +** If the string zSignedIdent consists entirely of alpha-numeric +** characters, does not begin with a digit and is not an SQL keyword, +** then it is copied to the output buffer exactly as it is. Otherwise, +** it is quoted using double-quotes. +*/ +static void identPut(char *z, int *pIdx, char *zSignedIdent){ + unsigned char *zIdent = (unsigned char*)zSignedIdent; + int i, j, needQuote; + i = *pIdx; - /* - ** file_format==1 Version 3.0.0. - ** file_format==2 Version 3.1.3. // ALTER TABLE ADD COLUMN - ** file_format==3 Version 3.1.4. // ditto but with non-NULL defaults - ** file_format==4 Version 3.3.0. // DESC indices. Boolean constants - */ - pDb->pSchema->file_format = (u8)meta[BTREE_FILE_FORMAT-1]; - if( pDb->pSchema->file_format==0 ){ - pDb->pSchema->file_format = 1; + for(j=0; zIdent[j]; j++){ + if( !sqlite3Isalnum(zIdent[j]) && zIdent[j]!='_' ) break; } - if( pDb->pSchema->file_format>SQLITE_MAX_FILE_FORMAT ){ - sqlite3SetString(pzErrMsg, db, "unsupported file format"); - rc = SQLITE_ERROR; - goto initone_error_out; + needQuote = sqlite3Isdigit(zIdent[0]) || sqlite3KeywordCode(zIdent, j)!=TK_ID; + if( !needQuote ){ + needQuote = zIdent[j]; } - /* Ticket #2804: When we open a database in the newer file format, - ** clear the legacy_file_format pragma flag so that a VACUUM will - ** not downgrade the database and thus invalidate any descending - ** indices that the user might have created. - */ - if( iDb==0 && meta[BTREE_FILE_FORMAT-1]>=4 ){ - db->flags &= ~SQLITE_LegacyFileFmt; + if( needQuote ) z[i++] = '"'; + for(j=0; zIdent[j]; j++){ + z[i++] = zIdent[j]; + if( zIdent[j]=='"' ) z[i++] = '"'; } + if( needQuote ) z[i++] = '"'; + z[i] = 0; + *pIdx = i; +} - /* Read the schema information out of the schema tables - */ - assert( db->init.busy ); - { - char *zSql; - zSql = sqlite3MPrintf(db, - "SELECT name, rootpage, sql FROM '%q'.%s", - db->aDb[iDb].zName, zMasterName); - (void)sqlite3SafetyOff(db); -#ifndef SQLITE_OMIT_AUTHORIZATION - { - int (*xAuth)(void*,int,const char*,const char*,const char*,const char*); - xAuth = db->xAuth; - db->xAuth = 0; -#endif - rc = sqlite3_exec(db, zSql, sqlite3InitCallback, &initData, 0); -#ifndef SQLITE_OMIT_AUTHORIZATION - db->xAuth = xAuth; - } -#endif - if( rc==SQLITE_OK ) rc = initData.rc; - (void)sqlite3SafetyOn(db); - sqlite3DbFree(db, zSql); -#ifndef SQLITE_OMIT_ANALYZE - if( rc==SQLITE_OK ){ - sqlite3AnalysisLoad(db, iDb); - } -#endif +/* +** Generate a CREATE TABLE statement appropriate for the given +** table. Memory to hold the text of the statement is obtained +** from sqliteMalloc() and must be freed by the calling function. +*/ +static char *createTableStmt(sqlite3 *db, Table *p){ + int i, k, n; + char *zStmt; + char *zSep, *zSep2, *zEnd; + Column *pCol; + n = 0; + for(pCol = p->aCol, i=0; inCol; i++, pCol++){ + n += identLength(pCol->zName) + 5; } - if( db->mallocFailed ){ - rc = SQLITE_NOMEM; - sqlite3ResetInternalSchema(db, 0); + n += identLength(p->zName); + if( n<50 ){ + zSep = ""; + zSep2 = ","; + zEnd = ")"; + }else{ + zSep = "\n "; + zSep2 = ",\n "; + zEnd = "\n)"; } - if( rc==SQLITE_OK || (db->flags&SQLITE_RecoveryMode)){ - /* Black magic: If the SQLITE_RecoveryMode flag is set, then consider - ** the schema loaded, even if errors occurred. In this situation the - ** current sqlite3_prepare() operation will fail, but the following one - ** will attempt to compile the supplied statement against whatever subset - ** of the schema was loaded before the error occurred. The primary - ** purpose of this is to allow access to the sqlite_master table - ** even when its contents have been corrupted. - */ - DbSetProperty(db, iDb, DB_SchemaLoaded); - rc = SQLITE_OK; + n += 35 + 6*p->nCol; + zStmt = sqlite3DbMallocRaw(0, n); + if( zStmt==0 ){ + db->mallocFailed = 1; + return 0; } + sqlite3_snprintf(n, zStmt, "CREATE TABLE "); + k = sqlite3Strlen30(zStmt); + identPut(zStmt, &k, p->zName); + zStmt[k++] = '('; + for(pCol=p->aCol, i=0; inCol; i++, pCol++){ + static const char * const azType[] = { + /* SQLITE_AFF_TEXT */ " TEXT", + /* SQLITE_AFF_NONE */ "", + /* SQLITE_AFF_NUMERIC */ " NUM", + /* SQLITE_AFF_INTEGER */ " INT", + /* SQLITE_AFF_REAL */ " REAL" + }; + int len; + const char *zType; - /* Jump here for an error that occurs after successfully allocating - ** curMain and calling sqlite3BtreeEnter(). For an error that occurs - ** before that point, jump to error_out. - */ -initone_error_out: - sqlite3BtreeCloseCursor(curMain); - sqlite3_free(curMain); - sqlite3BtreeLeave(pDb->pBt); - -error_out: - if( rc==SQLITE_NOMEM || rc==SQLITE_IOERR_NOMEM ){ - db->mallocFailed = 1; + sqlite3_snprintf(n-k, &zStmt[k], zSep); + k += sqlite3Strlen30(&zStmt[k]); + zSep = zSep2; + identPut(zStmt, &k, pCol->zName); + assert( pCol->affinity-SQLITE_AFF_TEXT >= 0 ); + assert( pCol->affinity-SQLITE_AFF_TEXT < ArraySize(azType) ); + testcase( pCol->affinity==SQLITE_AFF_TEXT ); + testcase( pCol->affinity==SQLITE_AFF_NONE ); + testcase( pCol->affinity==SQLITE_AFF_NUMERIC ); + testcase( pCol->affinity==SQLITE_AFF_INTEGER ); + testcase( pCol->affinity==SQLITE_AFF_REAL ); + + zType = azType[pCol->affinity - SQLITE_AFF_TEXT]; + len = sqlite3Strlen30(zType); + assert( pCol->affinity==SQLITE_AFF_NONE + || pCol->affinity==sqlite3AffinityType(zType) ); + memcpy(&zStmt[k], zType, len); + k += len; + assert( k<=n ); } - return rc; + sqlite3_snprintf(n-k, &zStmt[k], "%s", zEnd); + return zStmt; } /* -** Initialize all database files - the main database file, the file -** used to store temporary tables, and any additional database files -** created using ATTACH statements. Return a success code. If an -** error occurs, write an error message into *pzErrMsg. +** This routine is called to report the final ")" that terminates +** a CREATE TABLE statement. ** -** After a database is initialized, the DB_SchemaLoaded bit is set -** bit is set in the flags field of the Db structure. If the database -** file was of zero-length, then the DB_Empty flag is also set. +** The table structure that other action routines have been building +** is added to the internal hash tables, assuming no errors have +** occurred. +** +** An entry for the table is made in the master table on disk, unless +** this is a temporary table or db->init.busy==1. When db->init.busy==1 +** it means we are reading the sqlite_master table because we just +** connected to the database or because the sqlite_master table has +** recently changed, so the entry for this table already exists in +** the sqlite_master table. We do not want to create it again. +** +** If the pSelect argument is not NULL, it means that this routine +** was called to create a table generated from a +** "CREATE TABLE ... AS SELECT ..." statement. The column names of +** the new table will match the result set of the SELECT. */ -SQLITE_PRIVATE int sqlite3Init(sqlite3 *db, char **pzErrMsg){ - int i, rc; - int commit_internal = !(db->flags&SQLITE_InternChanges); - - assert( sqlite3_mutex_held(db->mutex) ); - rc = SQLITE_OK; - db->init.busy = 1; - for(i=0; rc==SQLITE_OK && inDb; i++){ - if( DbHasProperty(db, i, DB_SchemaLoaded) || i==1 ) continue; - rc = sqlite3InitOne(db, i, pzErrMsg); - if( rc ){ - sqlite3ResetInternalSchema(db, i); - } - } +SQLITE_PRIVATE void sqlite3EndTable( + Parse *pParse, /* Parse context */ + Token *pCons, /* The ',' token after the last column defn. */ + Token *pEnd, /* The final ')' token in the CREATE TABLE */ + Select *pSelect /* Select from a "CREATE ... AS SELECT" */ +){ + Table *p; + sqlite3 *db = pParse->db; + int iDb; - /* Once all the other databases have been initialised, load the schema - ** for the TEMP database. This is loaded last, as the TEMP database - ** schema may contain references to objects in other databases. - */ -#ifndef SQLITE_OMIT_TEMPDB - if( rc==SQLITE_OK && ALWAYS(db->nDb>1) - && !DbHasProperty(db, 1, DB_SchemaLoaded) ){ - rc = sqlite3InitOne(db, 1, pzErrMsg); - if( rc ){ - sqlite3ResetInternalSchema(db, 1); - } + if( (pEnd==0 && pSelect==0) || db->mallocFailed ){ + return; } -#endif + p = pParse->pNewTable; + if( p==0 ) return; - db->init.busy = 0; - if( rc==SQLITE_OK && commit_internal ){ - sqlite3CommitInternalChanges(db); - } - - return rc; -} - -/* -** This routine is a no-op if the database schema is already initialised. -** Otherwise, the schema is loaded. An error code is returned. -*/ -SQLITE_PRIVATE int sqlite3ReadSchema(Parse *pParse){ - int rc = SQLITE_OK; - sqlite3 *db = pParse->db; - assert( sqlite3_mutex_held(db->mutex) ); - if( !db->init.busy ){ - rc = sqlite3Init(db, &pParse->zErrMsg); - } - if( rc!=SQLITE_OK ){ - pParse->rc = rc; - pParse->nErr++; - } - return rc; -} + assert( !db->init.busy || !pSelect ); + iDb = sqlite3SchemaToIndex(db, p->pSchema); -/* -** Check schema cookies in all databases. If any cookie is out -** of date, return 0. If all schema cookies are current, return 1. -*/ -static int schemaIsValid(sqlite3 *db){ - int iDb; - int rc; - BtCursor *curTemp; - int cookie; - int allOk = 1; +#ifndef SQLITE_OMIT_CHECK + /* Resolve names in all CHECK constraint expressions. + */ + if( p->pCheck ){ + SrcList sSrc; /* Fake SrcList for pParse->pNewTable */ + NameContext sNC; /* Name context for pParse->pNewTable */ + ExprList *pList; /* List of all CHECK constraints */ + int i; /* Loop counter */ - curTemp = (BtCursor *)sqlite3Malloc(sqlite3BtreeCursorSize()); - if( curTemp ){ - assert( sqlite3_mutex_held(db->mutex) ); - for(iDb=0; allOk && iDbnDb; iDb++){ - Btree *pBt; - pBt = db->aDb[iDb].pBt; - if( pBt==0 ) continue; - memset(curTemp, 0, sqlite3BtreeCursorSize()); - rc = sqlite3BtreeCursor(pBt, MASTER_ROOT, 0, 0, curTemp); - if( rc==SQLITE_OK ){ - rc = sqlite3BtreeGetMeta(pBt, BTREE_SCHEMA_VERSION, (u32 *)&cookie); - if( ALWAYS(rc==SQLITE_OK) - && cookie!=db->aDb[iDb].pSchema->schema_cookie ){ - allOk = 0; - } - sqlite3BtreeCloseCursor(curTemp); - } - if( NEVER(rc==SQLITE_NOMEM) || rc==SQLITE_IOERR_NOMEM ){ - db->mallocFailed = 1; + memset(&sNC, 0, sizeof(sNC)); + memset(&sSrc, 0, sizeof(sSrc)); + sSrc.nSrc = 1; + sSrc.a[0].zName = p->zName; + sSrc.a[0].pTab = p; + sSrc.a[0].iCursor = -1; + sNC.pParse = pParse; + sNC.pSrcList = &sSrc; + sNC.ncFlags = NC_IsCheck; + pList = p->pCheck; + for(i=0; inExpr; i++){ + if( sqlite3ResolveExprNames(&sNC, pList->a[i].pExpr) ){ + return; } } - sqlite3_free(curTemp); - }else{ - allOk = 0; - db->mallocFailed = 1; } +#endif /* !defined(SQLITE_OMIT_CHECK) */ - return allOk; -} - -/* -** Convert a schema pointer into the iDb index that indicates -** which database file in db->aDb[] the schema refers to. -** -** If the same database is attached more than once, the first -** attached database is returned. -*/ -SQLITE_PRIVATE int sqlite3SchemaToIndex(sqlite3 *db, Schema *pSchema){ - int i = -1000000; - - /* If pSchema is NULL, then return -1000000. This happens when code in - ** expr.c is trying to resolve a reference to a transient table (i.e. one - ** created by a sub-select). In this case the return value of this - ** function should never be used. - ** - ** We return -1000000 instead of the more usual -1 simply because using - ** -1000000 as the incorrect index into db->aDb[] is much - ** more likely to cause a segfault than -1 (of course there are assert() - ** statements too, but it never hurts to play the odds). + /* If the db->init.busy is 1 it means we are reading the SQL off the + ** "sqlite_master" or "sqlite_temp_master" table on the disk. + ** So do not write to the disk again. Extract the root page number + ** for the table from the db->init.newTnum field. (The page number + ** should have been put there by the sqliteOpenCb routine.) */ - assert( sqlite3_mutex_held(db->mutex) ); - if( pSchema ){ - for(i=0; ALWAYS(inDb); i++){ - if( db->aDb[i].pSchema==pSchema ){ - break; - } - } - assert( i>=0 && inDb ); + if( db->init.busy ){ + p->tnum = db->init.newTnum; } - return i; -} -/* -** Compile the UTF-8 encoded SQL statement zSql into a statement handle. -*/ -static int sqlite3Prepare( - sqlite3 *db, /* Database handle. */ - const char *zSql, /* UTF-8 encoded SQL statement. */ - int nBytes, /* Length of zSql in bytes. */ - int saveSqlFlag, /* True to copy SQL text into the sqlite3_stmt */ - sqlite3_stmt **ppStmt, /* OUT: A pointer to the prepared statement */ - const char **pzTail /* OUT: End of parsed string */ -){ - Parse *pParse; /* Parsing context */ - char *zErrMsg = 0; /* Error message */ - int rc = SQLITE_OK; /* Result code */ - int i; /* Loop counter */ + /* If not initializing, then create a record for the new table + ** in the SQLITE_MASTER table of the database. + ** + ** If this is a TEMPORARY table, write the entry into the auxiliary + ** file instead of into the main database file. + */ + if( !db->init.busy ){ + int n; + Vdbe *v; + char *zType; /* "view" or "table" */ + char *zType2; /* "VIEW" or "TABLE" */ + char *zStmt; /* Text of the CREATE TABLE or CREATE VIEW statement */ - /* Allocate the parsing context */ - pParse = sqlite3StackAllocZero(db, sizeof(*pParse)); - if( pParse==0 ){ - rc = SQLITE_NOMEM; - goto end_prepare; - } + v = sqlite3GetVdbe(pParse); + if( NEVER(v==0) ) return; - if( sqlite3SafetyOn(db) ){ - rc = SQLITE_MISUSE; - goto end_prepare; - } - assert( ppStmt && *ppStmt==0 ); - assert( !db->mallocFailed ); - assert( sqlite3_mutex_held(db->mutex) ); + sqlite3VdbeAddOp1(v, OP_Close, 0); - /* Check to verify that it is possible to get a read lock on all - ** database schemas. The inability to get a read lock indicates that - ** some other database connection is holding a write-lock, which in - ** turn means that the other connection has made uncommitted changes - ** to the schema. - ** - ** Were we to proceed and prepare the statement against the uncommitted - ** schema changes and if those schema changes are subsequently rolled - ** back and different changes are made in their place, then when this - ** prepared statement goes to run the schema cookie would fail to detect - ** the schema change. Disaster would follow. - ** - ** This thread is currently holding mutexes on all Btrees (because - ** of the sqlite3BtreeEnterAll() in sqlite3LockAndPrepare()) so it - ** is not possible for another thread to start a new schema change - ** while this routine is running. Hence, we do not need to hold - ** locks on the schema, we just need to make sure nobody else is - ** holding them. - ** - ** Note that setting READ_UNCOMMITTED overrides most lock detection, - ** but it does *not* override schema lock detection, so this all still - ** works even if READ_UNCOMMITTED is set. - */ - for(i=0; inDb; i++) { - Btree *pBt = db->aDb[i].pBt; - if( pBt ){ - assert( sqlite3BtreeHoldsMutex(pBt) ); - rc = sqlite3BtreeSchemaLocked(pBt); - if( rc ){ - const char *zDb = db->aDb[i].zName; - sqlite3Error(db, rc, "database schema is locked: %s", zDb); - (void)sqlite3SafetyOff(db); - testcase( db->flags & SQLITE_ReadUncommitted ); - goto end_prepare; - } + /* + ** Initialize zType for the new view or table. + */ + if( p->pSelect==0 ){ + /* A regular table */ + zType = "table"; + zType2 = "TABLE"; +#ifndef SQLITE_OMIT_VIEW + }else{ + /* A view */ + zType = "view"; + zType2 = "VIEW"; +#endif } - } + /* If this is a CREATE TABLE xx AS SELECT ..., execute the SELECT + ** statement to populate the new table. The root-page number for the + ** new table is in register pParse->regRoot. + ** + ** Once the SELECT has been coded by sqlite3Select(), it is in a + ** suitable state to query for the column names and types to be used + ** by the new table. + ** + ** A shared-cache write-lock is not required to write to the new table, + ** as a schema-lock must have already been obtained to create it. Since + ** a schema-lock excludes all other database users, the write-lock would + ** be redundant. + */ + if( pSelect ){ + SelectDest dest; + Table *pSelTab; - pParse->db = db; - if( nBytes>=0 && (nBytes==0 || zSql[nBytes-1]!=0) ){ - char *zSqlCopy; - int mxLen = db->aLimit[SQLITE_LIMIT_SQL_LENGTH]; - testcase( nBytes==mxLen ); - testcase( nBytes==mxLen+1 ); - if( nBytes>mxLen ){ - sqlite3Error(db, SQLITE_TOOBIG, "statement too long"); - (void)sqlite3SafetyOff(db); - rc = sqlite3ApiExit(db, SQLITE_TOOBIG); - goto end_prepare; + assert(pParse->nTab==1); + sqlite3VdbeAddOp3(v, OP_OpenWrite, 1, pParse->regRoot, iDb); + sqlite3VdbeChangeP5(v, 1); + pParse->nTab = 2; + sqlite3SelectDestInit(&dest, SRT_Table, 1); + sqlite3Select(pParse, pSelect, &dest); + sqlite3VdbeAddOp1(v, OP_Close, 1); + if( pParse->nErr==0 ){ + pSelTab = sqlite3ResultSetOfSelect(pParse, pSelect); + if( pSelTab==0 ) return; + assert( p->aCol==0 ); + p->nCol = pSelTab->nCol; + p->aCol = pSelTab->aCol; + pSelTab->nCol = 0; + pSelTab->aCol = 0; + sqlite3DeleteTable(db, pSelTab); + } } - zSqlCopy = sqlite3DbStrNDup(db, zSql, nBytes); - if( zSqlCopy ){ - sqlite3RunParser(pParse, zSqlCopy, &zErrMsg); - sqlite3DbFree(db, zSqlCopy); - pParse->zTail = &zSql[pParse->zTail-zSqlCopy]; + + /* Compute the complete text of the CREATE statement */ + if( pSelect ){ + zStmt = createTableStmt(db, p); }else{ - pParse->zTail = &zSql[nBytes]; + n = (int)(pEnd->z - pParse->sNameToken.z) + 1; + zStmt = sqlite3MPrintf(db, + "CREATE %s %.*s", zType2, n, pParse->sNameToken.z + ); } - }else{ - sqlite3RunParser(pParse, zSql, &zErrMsg); - } - if( db->mallocFailed ){ - pParse->rc = SQLITE_NOMEM; - } - if( pParse->rc==SQLITE_DONE ) pParse->rc = SQLITE_OK; - if( pParse->checkSchema && !schemaIsValid(db) ){ - pParse->rc = SQLITE_SCHEMA; - } - if( pParse->rc==SQLITE_SCHEMA ){ - sqlite3ResetInternalSchema(db, 0); - } - if( db->mallocFailed ){ - pParse->rc = SQLITE_NOMEM; - } - if( pzTail ){ - *pzTail = pParse->zTail; - } - rc = pParse->rc; + /* A slot for the record has already been allocated in the + ** SQLITE_MASTER table. We just need to update that slot with all + ** the information we've collected. + */ + sqlite3NestedParse(pParse, + "UPDATE %Q.%s " + "SET type='%s', name=%Q, tbl_name=%Q, rootpage=#%d, sql=%Q " + "WHERE rowid=#%d", + db->aDb[iDb].zName, SCHEMA_TABLE(iDb), + zType, + p->zName, + p->zName, + pParse->regRoot, + zStmt, + pParse->regRowid + ); + sqlite3DbFree(db, zStmt); + sqlite3ChangeCookie(pParse, iDb); -#ifndef SQLITE_OMIT_EXPLAIN - if( rc==SQLITE_OK && pParse->pVdbe && pParse->explain ){ - static const char * const azColName[] = { - "addr", "opcode", "p1", "p2", "p3", "p4", "p5", "comment", - "order", "from", "detail" - }; - int iFirst, mx; - if( pParse->explain==2 ){ - sqlite3VdbeSetNumCols(pParse->pVdbe, 3); - iFirst = 8; - mx = 11; - }else{ - sqlite3VdbeSetNumCols(pParse->pVdbe, 8); - iFirst = 0; - mx = 8; - } - for(i=iFirst; ipVdbe, i-iFirst, COLNAME_NAME, - azColName[i], SQLITE_STATIC); +#ifndef SQLITE_OMIT_AUTOINCREMENT + /* Check to see if we need to create an sqlite_sequence table for + ** keeping track of autoincrement keys. + */ + if( p->tabFlags & TF_Autoincrement ){ + Db *pDb = &db->aDb[iDb]; + assert( sqlite3SchemaMutexHeld(db, iDb, 0) ); + if( pDb->pSchema->pSeqTab==0 ){ + sqlite3NestedParse(pParse, + "CREATE TABLE %Q.sqlite_sequence(name,seq)", + pDb->zName + ); + } } - } #endif - if( sqlite3SafetyOff(db) ){ - rc = SQLITE_MISUSE; - } - - assert( db->init.busy==0 || saveSqlFlag==0 ); - if( db->init.busy==0 ){ - Vdbe *pVdbe = pParse->pVdbe; - sqlite3VdbeSetSql(pVdbe, zSql, (int)(pParse->zTail-zSql), saveSqlFlag); - } - if( pParse->pVdbe && (rc!=SQLITE_OK || db->mallocFailed) ){ - sqlite3VdbeFinalize(pParse->pVdbe); - assert(!(*ppStmt)); - }else{ - *ppStmt = (sqlite3_stmt*)pParse->pVdbe; - } - - if( zErrMsg ){ - sqlite3Error(db, rc, "%s", zErrMsg); - sqlite3DbFree(db, zErrMsg); - }else{ - sqlite3Error(db, rc, 0); - } - -end_prepare: - - sqlite3StackFree(db, pParse); - rc = sqlite3ApiExit(db, rc); - assert( (rc&db->errMask)==rc ); - return rc; -} -static int sqlite3LockAndPrepare( - sqlite3 *db, /* Database handle. */ - const char *zSql, /* UTF-8 encoded SQL statement. */ - int nBytes, /* Length of zSql in bytes. */ - int saveSqlFlag, /* True to copy SQL text into the sqlite3_stmt */ - sqlite3_stmt **ppStmt, /* OUT: A pointer to the prepared statement */ - const char **pzTail /* OUT: End of parsed string */ -){ - int rc; - assert( ppStmt!=0 ); - *ppStmt = 0; - if( !sqlite3SafetyCheckOk(db) ){ - return SQLITE_MISUSE; - } - sqlite3_mutex_enter(db->mutex); - sqlite3BtreeEnterAll(db); - rc = sqlite3Prepare(db, zSql, nBytes, saveSqlFlag, ppStmt, pzTail); - if( rc==SQLITE_SCHEMA ){ - sqlite3_finalize(*ppStmt); - rc = sqlite3Prepare(db, zSql, nBytes, saveSqlFlag, ppStmt, pzTail); + /* Reparse everything to update our internal data structures */ + sqlite3VdbeAddParseSchemaOp(v, iDb, + sqlite3MPrintf(db, "tbl_name='%q'", p->zName)); } - sqlite3BtreeLeaveAll(db); - sqlite3_mutex_leave(db->mutex); - return rc; -} -/* -** Rerun the compilation of a statement after a schema change. -** -** If the statement is successfully recompiled, return SQLITE_OK. Otherwise, -** if the statement cannot be recompiled because another connection has -** locked the sqlite3_master table, return SQLITE_LOCKED. If any other error -** occurs, return SQLITE_SCHEMA. -*/ -SQLITE_PRIVATE int sqlite3Reprepare(Vdbe *p){ - int rc; - sqlite3_stmt *pNew; - const char *zSql; - sqlite3 *db; - assert( sqlite3_mutex_held(sqlite3VdbeDb(p)->mutex) ); - zSql = sqlite3_sql((sqlite3_stmt *)p); - assert( zSql!=0 ); /* Reprepare only called for prepare_v2() statements */ - db = sqlite3VdbeDb(p); - assert( sqlite3_mutex_held(db->mutex) ); - rc = sqlite3LockAndPrepare(db, zSql, -1, 0, &pNew, 0); - if( rc ){ - if( rc==SQLITE_NOMEM ){ + /* Add the table to the in-memory representation of the database. + */ + if( db->init.busy ){ + Table *pOld; + Schema *pSchema = p->pSchema; + assert( sqlite3SchemaMutexHeld(db, iDb, 0) ); + pOld = sqlite3HashInsert(&pSchema->tblHash, p->zName, + sqlite3Strlen30(p->zName),p); + if( pOld ){ + assert( p==pOld ); /* Malloc must have failed inside HashInsert() */ db->mallocFailed = 1; + return; } - assert( pNew==0 ); - return (rc==SQLITE_LOCKED) ? SQLITE_LOCKED : SQLITE_SCHEMA; - }else{ - assert( pNew!=0 ); + pParse->pNewTable = 0; + db->flags |= SQLITE_InternChanges; + +#ifndef SQLITE_OMIT_ALTERTABLE + if( !p->pSelect ){ + const char *zName = (const char *)pParse->sNameToken.z; + int nName; + assert( !pSelect && pCons && pEnd ); + if( pCons->z==0 ){ + pCons = pEnd; + } + nName = (int)((const char *)pCons->z - zName); + p->addColOffset = 13 + sqlite3Utf8CharLen(zName, nName); + } +#endif } - sqlite3VdbeSwap((Vdbe*)pNew, p); - sqlite3TransferBindings(pNew, (sqlite3_stmt*)p); - sqlite3VdbeResetStepResult((Vdbe*)pNew); - sqlite3VdbeFinalize((Vdbe*)pNew); - return SQLITE_OK; } - +#ifndef SQLITE_OMIT_VIEW /* -** Two versions of the official API. Legacy and new use. In the legacy -** version, the original SQL text is not saved in the prepared statement -** and so if a schema change occurs, SQLITE_SCHEMA is returned by -** sqlite3_step(). In the new version, the original SQL text is retained -** and the statement is automatically recompiled if an schema change -** occurs. +** The parser calls this routine in order to create a new VIEW */ -SQLITE_API int sqlite3_prepare( - sqlite3 *db, /* Database handle. */ - const char *zSql, /* UTF-8 encoded SQL statement. */ - int nBytes, /* Length of zSql in bytes. */ - sqlite3_stmt **ppStmt, /* OUT: A pointer to the prepared statement */ - const char **pzTail /* OUT: End of parsed string */ -){ - int rc; - rc = sqlite3LockAndPrepare(db,zSql,nBytes,0,ppStmt,pzTail); - assert( rc==SQLITE_OK || ppStmt==0 || *ppStmt==0 ); /* VERIFY: F13021 */ - return rc; -} -SQLITE_API int sqlite3_prepare_v2( - sqlite3 *db, /* Database handle. */ - const char *zSql, /* UTF-8 encoded SQL statement. */ - int nBytes, /* Length of zSql in bytes. */ - sqlite3_stmt **ppStmt, /* OUT: A pointer to the prepared statement */ - const char **pzTail /* OUT: End of parsed string */ +SQLITE_PRIVATE void sqlite3CreateView( + Parse *pParse, /* The parsing context */ + Token *pBegin, /* The CREATE token that begins the statement */ + Token *pName1, /* The token that holds the name of the view */ + Token *pName2, /* The token that holds the name of the view */ + Select *pSelect, /* A SELECT statement that will become the new view */ + int isTemp, /* TRUE for a TEMPORARY view */ + int noErr /* Suppress error messages if VIEW already exists */ ){ - int rc; - rc = sqlite3LockAndPrepare(db,zSql,nBytes,1,ppStmt,pzTail); - assert( rc==SQLITE_OK || ppStmt==0 || *ppStmt==0 ); /* VERIFY: F13021 */ - return rc; -} + Table *p; + int n; + const char *z; + Token sEnd; + DbFixer sFix; + Token *pName = 0; + int iDb; + sqlite3 *db = pParse->db; + if( pParse->nVar>0 ){ + sqlite3ErrorMsg(pParse, "parameters are not allowed in views"); + sqlite3SelectDelete(db, pSelect); + return; + } + sqlite3StartTable(pParse, pName1, pName2, isTemp, 1, 0, noErr); + p = pParse->pNewTable; + if( p==0 || pParse->nErr ){ + sqlite3SelectDelete(db, pSelect); + return; + } + sqlite3TwoPartName(pParse, pName1, pName2, &pName); + iDb = sqlite3SchemaToIndex(db, p->pSchema); + if( sqlite3FixInit(&sFix, pParse, iDb, "view", pName) + && sqlite3FixSelect(&sFix, pSelect) + ){ + sqlite3SelectDelete(db, pSelect); + return; + } -#ifndef SQLITE_OMIT_UTF16 -/* -** Compile the UTF-16 encoded SQL statement zSql into a statement handle. -*/ -static int sqlite3Prepare16( - sqlite3 *db, /* Database handle. */ - const void *zSql, /* UTF-8 encoded SQL statement. */ - int nBytes, /* Length of zSql in bytes. */ - int saveSqlFlag, /* True to save SQL text into the sqlite3_stmt */ - sqlite3_stmt **ppStmt, /* OUT: A pointer to the prepared statement */ - const void **pzTail /* OUT: End of parsed string */ -){ - /* This function currently works by first transforming the UTF-16 - ** encoded string to UTF-8, then invoking sqlite3_prepare(). The - ** tricky bit is figuring out the pointer to return in *pzTail. + /* Make a copy of the entire SELECT statement that defines the view. + ** This will force all the Expr.token.z values to be dynamically + ** allocated rather than point to the input string - which means that + ** they will persist after the current sqlite3_exec() call returns. */ - char *zSql8; - const char *zTail8 = 0; - int rc = SQLITE_OK; - - assert( ppStmt ); - *ppStmt = 0; - if( !sqlite3SafetyCheckOk(db) ){ - return SQLITE_MISUSE; + p->pSelect = sqlite3SelectDup(db, pSelect, EXPRDUP_REDUCE); + sqlite3SelectDelete(db, pSelect); + if( db->mallocFailed ){ + return; } - sqlite3_mutex_enter(db->mutex); - zSql8 = sqlite3Utf16to8(db, zSql, nBytes); - if( zSql8 ){ - rc = sqlite3LockAndPrepare(db, zSql8, -1, saveSqlFlag, ppStmt, &zTail8); + if( !db->init.busy ){ + sqlite3ViewGetColumnNames(pParse, p); } - if( zTail8 && pzTail ){ - /* If sqlite3_prepare returns a tail pointer, we calculate the - ** equivalent pointer into the UTF-16 string by counting the unicode - ** characters between zSql8 and zTail8, and then returning a pointer - ** the same number of characters into the UTF-16 string. - */ - int chars_parsed = sqlite3Utf8CharLen(zSql8, (int)(zTail8-zSql8)); - *pzTail = (u8 *)zSql + sqlite3Utf16ByteLen(zSql, chars_parsed); + /* Locate the end of the CREATE VIEW statement. Make sEnd point to + ** the end. + */ + sEnd = pParse->sLastToken; + if( ALWAYS(sEnd.z[0]!=0) && sEnd.z[0]!=';' ){ + sEnd.z += sEnd.n; } - sqlite3DbFree(db, zSql8); - rc = sqlite3ApiExit(db, rc); - sqlite3_mutex_leave(db->mutex); - return rc; + sEnd.n = 0; + n = (int)(sEnd.z - pBegin->z); + z = pBegin->z; + while( ALWAYS(n>0) && sqlite3Isspace(z[n-1]) ){ n--; } + sEnd.z = &z[n-1]; + sEnd.n = 1; + + /* Use sqlite3EndTable() to add the view to the SQLITE_MASTER table */ + sqlite3EndTable(pParse, 0, &sEnd, 0); + return; } +#endif /* SQLITE_OMIT_VIEW */ +#if !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_VIRTUALTABLE) /* -** Two versions of the official API. Legacy and new use. In the legacy -** version, the original SQL text is not saved in the prepared statement -** and so if a schema change occurs, SQLITE_SCHEMA is returned by -** sqlite3_step(). In the new version, the original SQL text is retained -** and the statement is automatically recompiled if an schema change -** occurs. +** The Table structure pTable is really a VIEW. Fill in the names of +** the columns of the view in the pTable structure. Return the number +** of errors. If an error is seen leave an error message in pParse->zErrMsg. */ -SQLITE_API int sqlite3_prepare16( - sqlite3 *db, /* Database handle. */ - const void *zSql, /* UTF-8 encoded SQL statement. */ - int nBytes, /* Length of zSql in bytes. */ - sqlite3_stmt **ppStmt, /* OUT: A pointer to the prepared statement */ - const void **pzTail /* OUT: End of parsed string */ -){ - int rc; - rc = sqlite3Prepare16(db,zSql,nBytes,0,ppStmt,pzTail); - assert( rc==SQLITE_OK || ppStmt==0 || *ppStmt==0 ); /* VERIFY: F13021 */ - return rc; -} -SQLITE_API int sqlite3_prepare16_v2( - sqlite3 *db, /* Database handle. */ - const void *zSql, /* UTF-8 encoded SQL statement. */ - int nBytes, /* Length of zSql in bytes. */ - sqlite3_stmt **ppStmt, /* OUT: A pointer to the prepared statement */ - const void **pzTail /* OUT: End of parsed string */ -){ - int rc; - rc = sqlite3Prepare16(db,zSql,nBytes,1,ppStmt,pzTail); - assert( rc==SQLITE_OK || ppStmt==0 || *ppStmt==0 ); /* VERIFY: F13021 */ - return rc; -} +SQLITE_PRIVATE int sqlite3ViewGetColumnNames(Parse *pParse, Table *pTable){ + Table *pSelTab; /* A fake table from which we get the result set */ + Select *pSel; /* Copy of the SELECT that implements the view */ + int nErr = 0; /* Number of errors encountered */ + int n; /* Temporarily holds the number of cursors assigned */ + sqlite3 *db = pParse->db; /* Database connection for malloc errors */ + int (*xAuth)(void*,int,const char*,const char*,const char*,const char*); -#endif /* SQLITE_OMIT_UTF16 */ + assert( pTable ); -/************** End of prepare.c *********************************************/ -/************** Begin file select.c ******************************************/ -/* -** 2001 September 15 -** -** The author disclaims copyright to this source code. In place of -** a legal notice, here is a blessing: -** -** May you do good and not evil. -** May you find forgiveness for yourself and forgive others. -** May you share freely, never taking more than you give. -** -************************************************************************* -** This file contains C code routines that are called by the parser -** to handle SELECT statements in SQLite. -** -** $Id: select.c,v 1.524 2009/06/12 03:27:27 drh Exp $ -*/ +#ifndef SQLITE_OMIT_VIRTUALTABLE + if( sqlite3VtabCallConnect(pParse, pTable) ){ + return SQLITE_ERROR; + } + if( IsVirtual(pTable) ) return 0; +#endif +#ifndef SQLITE_OMIT_VIEW + /* A positive nCol means the columns names for this view are + ** already known. + */ + if( pTable->nCol>0 ) return 0; -/* -** Delete all the content of a Select structure but do not deallocate -** the select structure itself. -*/ -static void clearSelect(sqlite3 *db, Select *p){ - sqlite3ExprListDelete(db, p->pEList); - sqlite3SrcListDelete(db, p->pSrc); - sqlite3ExprDelete(db, p->pWhere); - sqlite3ExprListDelete(db, p->pGroupBy); - sqlite3ExprDelete(db, p->pHaving); - sqlite3ExprListDelete(db, p->pOrderBy); - sqlite3SelectDelete(db, p->pPrior); - sqlite3ExprDelete(db, p->pLimit); - sqlite3ExprDelete(db, p->pOffset); + /* A negative nCol is a special marker meaning that we are currently + ** trying to compute the column names. If we enter this routine with + ** a negative nCol, it means two or more views form a loop, like this: + ** + ** CREATE VIEW one AS SELECT * FROM two; + ** CREATE VIEW two AS SELECT * FROM one; + ** + ** Actually, the error above is now caught prior to reaching this point. + ** But the following test is still important as it does come up + ** in the following: + ** + ** CREATE TABLE main.ex1(a); + ** CREATE TEMP VIEW ex1 AS SELECT a FROM ex1; + ** SELECT * FROM temp.ex1; + */ + if( pTable->nCol<0 ){ + sqlite3ErrorMsg(pParse, "view %s is circularly defined", pTable->zName); + return 1; + } + assert( pTable->nCol>=0 ); + + /* If we get this far, it means we need to compute the table names. + ** Note that the call to sqlite3ResultSetOfSelect() will expand any + ** "*" elements in the results set of the view and will assign cursors + ** to the elements of the FROM clause. But we do not want these changes + ** to be permanent. So the computation is done on a copy of the SELECT + ** statement that defines the view. + */ + assert( pTable->pSelect ); + pSel = sqlite3SelectDup(db, pTable->pSelect, 0); + if( pSel ){ + u8 enableLookaside = db->lookaside.bEnabled; + n = pParse->nTab; + sqlite3SrcListAssignCursors(pParse, pSel->pSrc); + pTable->nCol = -1; + db->lookaside.bEnabled = 0; +#ifndef SQLITE_OMIT_AUTHORIZATION + xAuth = db->xAuth; + db->xAuth = 0; + pSelTab = sqlite3ResultSetOfSelect(pParse, pSel); + db->xAuth = xAuth; +#else + pSelTab = sqlite3ResultSetOfSelect(pParse, pSel); +#endif + db->lookaside.bEnabled = enableLookaside; + pParse->nTab = n; + if( pSelTab ){ + assert( pTable->aCol==0 ); + pTable->nCol = pSelTab->nCol; + pTable->aCol = pSelTab->aCol; + pSelTab->nCol = 0; + pSelTab->aCol = 0; + sqlite3DeleteTable(db, pSelTab); + assert( sqlite3SchemaMutexHeld(db, 0, pTable->pSchema) ); + pTable->pSchema->flags |= DB_UnresetViews; + }else{ + pTable->nCol = 0; + nErr++; + } + sqlite3SelectDelete(db, pSel); + } else { + nErr++; + } +#endif /* SQLITE_OMIT_VIEW */ + return nErr; } +#endif /* !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_VIRTUALTABLE) */ +#ifndef SQLITE_OMIT_VIEW /* -** Initialize a SelectDest structure. +** Clear the column names from every VIEW in database idx. */ -SQLITE_PRIVATE void sqlite3SelectDestInit(SelectDest *pDest, int eDest, int iParm){ - pDest->eDest = (u8)eDest; - pDest->iParm = iParm; - pDest->affinity = 0; - pDest->iMem = 0; - pDest->nMem = 0; +static void sqliteViewResetAll(sqlite3 *db, int idx){ + HashElem *i; + assert( sqlite3SchemaMutexHeld(db, idx, 0) ); + if( !DbHasProperty(db, idx, DB_UnresetViews) ) return; + for(i=sqliteHashFirst(&db->aDb[idx].pSchema->tblHash); i;i=sqliteHashNext(i)){ + Table *pTab = sqliteHashData(i); + if( pTab->pSelect ){ + sqliteDeleteColumnNames(db, pTab); + pTab->aCol = 0; + pTab->nCol = 0; + } + } + DbClearProperty(db, idx, DB_UnresetViews); } - +#else +# define sqliteViewResetAll(A,B) +#endif /* SQLITE_OMIT_VIEW */ /* -** Allocate a new Select structure and return a pointer to that -** structure. +** This function is called by the VDBE to adjust the internal schema +** used by SQLite when the btree layer moves a table root page. The +** root-page of a table or index in database iDb has changed from iFrom +** to iTo. +** +** Ticket #1728: The symbol table might still contain information +** on tables and/or indices that are the process of being deleted. +** If you are unlucky, one of those deleted indices or tables might +** have the same rootpage number as the real table or index that is +** being moved. So we cannot stop searching after the first match +** because the first match might be for one of the deleted indices +** or tables and not the table/index that is actually being moved. +** We must continue looping until all tables and indices with +** rootpage==iFrom have been converted to have a rootpage of iTo +** in order to be certain that we got the right one. */ -SQLITE_PRIVATE Select *sqlite3SelectNew( - Parse *pParse, /* Parsing context */ - ExprList *pEList, /* which columns to include in the result */ - SrcList *pSrc, /* the FROM clause -- which tables to scan */ - Expr *pWhere, /* the WHERE clause */ - ExprList *pGroupBy, /* the GROUP BY clause */ - Expr *pHaving, /* the HAVING clause */ - ExprList *pOrderBy, /* the ORDER BY clause */ - int isDistinct, /* true if the DISTINCT keyword is present */ - Expr *pLimit, /* LIMIT value. NULL means not used */ - Expr *pOffset /* OFFSET value. NULL means no offset */ -){ - Select *pNew; - Select standin; - sqlite3 *db = pParse->db; - pNew = sqlite3DbMallocZero(db, sizeof(*pNew) ); - assert( db->mallocFailed || !pOffset || pLimit ); /* OFFSET implies LIMIT */ - if( pNew==0 ){ - pNew = &standin; - memset(pNew, 0, sizeof(*pNew)); - } - if( pEList==0 ){ - pEList = sqlite3ExprListAppend(pParse, 0, sqlite3Expr(db,TK_ALL,0)); +#ifndef SQLITE_OMIT_AUTOVACUUM +SQLITE_PRIVATE void sqlite3RootPageMoved(sqlite3 *db, int iDb, int iFrom, int iTo){ + HashElem *pElem; + Hash *pHash; + Db *pDb; + + assert( sqlite3SchemaMutexHeld(db, iDb, 0) ); + pDb = &db->aDb[iDb]; + pHash = &pDb->pSchema->tblHash; + for(pElem=sqliteHashFirst(pHash); pElem; pElem=sqliteHashNext(pElem)){ + Table *pTab = sqliteHashData(pElem); + if( pTab->tnum==iFrom ){ + pTab->tnum = iTo; + } } - pNew->pEList = pEList; - pNew->pSrc = pSrc; - pNew->pWhere = pWhere; - pNew->pGroupBy = pGroupBy; - pNew->pHaving = pHaving; - pNew->pOrderBy = pOrderBy; - pNew->selFlags = isDistinct ? SF_Distinct : 0; - pNew->op = TK_SELECT; - pNew->pLimit = pLimit; - pNew->pOffset = pOffset; - assert( pOffset==0 || pLimit!=0 ); - pNew->addrOpenEphm[0] = -1; - pNew->addrOpenEphm[1] = -1; - pNew->addrOpenEphm[2] = -1; - if( db->mallocFailed ) { - clearSelect(db, pNew); - if( pNew!=&standin ) sqlite3DbFree(db, pNew); - pNew = 0; + pHash = &pDb->pSchema->idxHash; + for(pElem=sqliteHashFirst(pHash); pElem; pElem=sqliteHashNext(pElem)){ + Index *pIdx = sqliteHashData(pElem); + if( pIdx->tnum==iFrom ){ + pIdx->tnum = iTo; + } } - return pNew; } +#endif /* -** Delete the given Select structure and all of its substructures. -*/ -SQLITE_PRIVATE void sqlite3SelectDelete(sqlite3 *db, Select *p){ - if( p ){ - clearSelect(db, p); - sqlite3DbFree(db, p); - } +** Write code to erase the table with root-page iTable from database iDb. +** Also write code to modify the sqlite_master table and internal schema +** if a root-page of another table is moved by the btree-layer whilst +** erasing iTable (this can happen with an auto-vacuum database). +*/ +static void destroyRootPage(Parse *pParse, int iTable, int iDb){ + Vdbe *v = sqlite3GetVdbe(pParse); + int r1 = sqlite3GetTempReg(pParse); + sqlite3VdbeAddOp3(v, OP_Destroy, iTable, r1, iDb); + sqlite3MayAbort(pParse); +#ifndef SQLITE_OMIT_AUTOVACUUM + /* OP_Destroy stores an in integer r1. If this integer + ** is non-zero, then it is the root page number of a table moved to + ** location iTable. The following code modifies the sqlite_master table to + ** reflect this. + ** + ** The "#NNN" in the SQL is a special constant that means whatever value + ** is in register NNN. See grammar rules associated with the TK_REGISTER + ** token for additional information. + */ + sqlite3NestedParse(pParse, + "UPDATE %Q.%s SET rootpage=%d WHERE #%d AND rootpage=#%d", + pParse->db->aDb[iDb].zName, SCHEMA_TABLE(iDb), iTable, r1, r1); +#endif + sqlite3ReleaseTempReg(pParse, r1); } /* -** Given 1 to 3 identifiers preceeding the JOIN keyword, determine the -** type of join. Return an integer constant that expresses that type -** in terms of the following bit values: -** -** JT_INNER -** JT_CROSS -** JT_OUTER -** JT_NATURAL -** JT_LEFT -** JT_RIGHT -** -** A full outer join is the combination of JT_LEFT and JT_RIGHT. -** -** If an illegal or unsupported join type is seen, then still return -** a join type, but put an error in the pParse structure. +** Write VDBE code to erase table pTab and all associated indices on disk. +** Code to update the sqlite_master tables and internal schema definitions +** in case a root-page belonging to another table is moved by the btree layer +** is also added (this can happen with an auto-vacuum database). */ -SQLITE_PRIVATE int sqlite3JoinType(Parse *pParse, Token *pA, Token *pB, Token *pC){ - int jointype = 0; - Token *apAll[3]; - Token *p; - /* 0123456789 123456789 123456789 123 */ - static const char zKeyText[] = "naturaleftouterightfullinnercross"; - static const struct { - u8 i; /* Beginning of keyword text in zKeyText[] */ - u8 nChar; /* Length of the keyword in characters */ - u8 code; /* Join type mask */ - } aKeyword[] = { - /* natural */ { 0, 7, JT_NATURAL }, - /* left */ { 6, 4, JT_LEFT|JT_OUTER }, - /* outer */ { 10, 5, JT_OUTER }, - /* right */ { 14, 5, JT_RIGHT|JT_OUTER }, - /* full */ { 19, 4, JT_LEFT|JT_RIGHT|JT_OUTER }, - /* inner */ { 23, 5, JT_INNER }, - /* cross */ { 28, 5, JT_INNER|JT_CROSS }, - }; - int i, j; - apAll[0] = pA; - apAll[1] = pB; - apAll[2] = pC; - for(i=0; i<3 && apAll[i]; i++){ - p = apAll[i]; - for(j=0; jn==aKeyword[j].nChar - && sqlite3StrNICmp((char*)p->z, &zKeyText[aKeyword[j].i], p->n)==0 ){ - jointype |= aKeyword[j].code; - break; +static void destroyTable(Parse *pParse, Table *pTab){ +#ifdef SQLITE_OMIT_AUTOVACUUM + Index *pIdx; + int iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema); + destroyRootPage(pParse, pTab->tnum, iDb); + for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){ + destroyRootPage(pParse, pIdx->tnum, iDb); + } +#else + /* If the database may be auto-vacuum capable (if SQLITE_OMIT_AUTOVACUUM + ** is not defined), then it is important to call OP_Destroy on the + ** table and index root-pages in order, starting with the numerically + ** largest root-page number. This guarantees that none of the root-pages + ** to be destroyed is relocated by an earlier OP_Destroy. i.e. if the + ** following were coded: + ** + ** OP_Destroy 4 0 + ** ... + ** OP_Destroy 5 0 + ** + ** and root page 5 happened to be the largest root-page number in the + ** database, then root page 5 would be moved to page 4 by the + ** "OP_Destroy 4 0" opcode. The subsequent "OP_Destroy 5 0" would hit + ** a free-list page. + */ + int iTab = pTab->tnum; + int iDestroyed = 0; + + while( 1 ){ + Index *pIdx; + int iLargest = 0; + + if( iDestroyed==0 || iTabpIndex; pIdx; pIdx=pIdx->pNext){ + int iIdx = pIdx->tnum; + assert( pIdx->pSchema==pTab->pSchema ); + if( (iDestroyed==0 || (iIdxiLargest ){ + iLargest = iIdx; } } - testcase( j==0 || j==1 || j==2 || j==3 || j==4 || j==5 || j==6 ); - if( j>=ArraySize(aKeyword) ){ - jointype |= JT_ERROR; - break; + if( iLargest==0 ){ + return; + }else{ + int iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema); + destroyRootPage(pParse, iLargest, iDb); + iDestroyed = iLargest; } } - if( - (jointype & (JT_INNER|JT_OUTER))==(JT_INNER|JT_OUTER) || - (jointype & JT_ERROR)!=0 - ){ - const char *zSp = " "; - assert( pB!=0 ); - if( pC==0 ){ zSp++; } - sqlite3ErrorMsg(pParse, "unknown or unsupported join type: " - "%T %T%s%T", pA, pB, zSp, pC); - jointype = JT_INNER; - }else if( (jointype & JT_OUTER)!=0 - && (jointype & (JT_LEFT|JT_RIGHT))!=JT_LEFT ){ - sqlite3ErrorMsg(pParse, - "RIGHT and FULL OUTER JOINs are not currently supported"); - jointype = JT_INNER; - } - return jointype; +#endif } /* -** Return the index of a column in a table. Return -1 if the column -** is not contained in the table. +** Remove entries from the sqlite_statN tables (for N in (1,2,3)) +** after a DROP INDEX or DROP TABLE command. */ -static int columnIndex(Table *pTab, const char *zCol){ +static void sqlite3ClearStatTables( + Parse *pParse, /* The parsing context */ + int iDb, /* The database number */ + const char *zType, /* "idx" or "tbl" */ + const char *zName /* Name of index or table */ +){ int i; - for(i=0; inCol; i++){ - if( sqlite3StrICmp(pTab->aCol[i].zName, zCol)==0 ) return i; + const char *zDbName = pParse->db->aDb[iDb].zName; + for(i=1; i<=3; i++){ + char zTab[24]; + sqlite3_snprintf(sizeof(zTab),zTab,"sqlite_stat%d",i); + if( sqlite3FindTable(pParse->db, zTab, zDbName) ){ + sqlite3NestedParse(pParse, + "DELETE FROM %Q.%s WHERE %s=%Q", + zDbName, zTab, zType, zName + ); + } } - return -1; } /* -** Create an expression node for an identifier with the name of zName +** Generate code to drop a table. */ -SQLITE_PRIVATE Expr *sqlite3CreateIdExpr(Parse *pParse, const char *zName){ - return sqlite3Expr(pParse->db, TK_ID, zName); -} +SQLITE_PRIVATE void sqlite3CodeDropTable(Parse *pParse, Table *pTab, int iDb, int isView){ + Vdbe *v; + sqlite3 *db = pParse->db; + Trigger *pTrigger; + Db *pDb = &db->aDb[iDb]; -/* -** Add a term to the WHERE expression in *ppExpr that requires the -** zCol column to be equal in the two tables pTab1 and pTab2. -*/ -static void addWhereTerm( - Parse *pParse, /* Parsing context */ - const char *zCol, /* Name of the column */ - const Table *pTab1, /* First table */ - const char *zAlias1, /* Alias for first table. May be NULL */ - const Table *pTab2, /* Second table */ - const char *zAlias2, /* Alias for second table. May be NULL */ - int iRightJoinTable, /* VDBE cursor for the right table */ - Expr **ppExpr, /* Add the equality term to this expression */ - int isOuterJoin /* True if dealing with an OUTER join */ -){ - Expr *pE1a, *pE1b, *pE1c; - Expr *pE2a, *pE2b, *pE2c; - Expr *pE; - - pE1a = sqlite3CreateIdExpr(pParse, zCol); - pE2a = sqlite3CreateIdExpr(pParse, zCol); - if( zAlias1==0 ){ - zAlias1 = pTab1->zName; - } - pE1b = sqlite3CreateIdExpr(pParse, zAlias1); - if( zAlias2==0 ){ - zAlias2 = pTab2->zName; - } - pE2b = sqlite3CreateIdExpr(pParse, zAlias2); - pE1c = sqlite3PExpr(pParse, TK_DOT, pE1b, pE1a, 0); - pE2c = sqlite3PExpr(pParse, TK_DOT, pE2b, pE2a, 0); - pE = sqlite3PExpr(pParse, TK_EQ, pE1c, pE2c, 0); - if( pE && isOuterJoin ){ - ExprSetProperty(pE, EP_FromJoin); - assert( !ExprHasAnyProperty(pE, EP_TokenOnly|EP_Reduced) ); - ExprSetIrreducible(pE); - pE->iRightJoinTable = (i16)iRightJoinTable; - } - *ppExpr = sqlite3ExprAnd(pParse->db,*ppExpr, pE); -} + v = sqlite3GetVdbe(pParse); + assert( v!=0 ); + sqlite3BeginWriteOperation(pParse, 1, iDb); -/* -** Set the EP_FromJoin property on all terms of the given expression. -** And set the Expr.iRightJoinTable to iTable for every term in the -** expression. -** -** The EP_FromJoin property is used on terms of an expression to tell -** the LEFT OUTER JOIN processing logic that this term is part of the -** join restriction specified in the ON or USING clause and not a part -** of the more general WHERE clause. These terms are moved over to the -** WHERE clause during join processing but we need to remember that they -** originated in the ON or USING clause. -** -** The Expr.iRightJoinTable tells the WHERE clause processing that the -** expression depends on table iRightJoinTable even if that table is not -** explicitly mentioned in the expression. That information is needed -** for cases like this: -** -** SELECT * FROM t1 LEFT JOIN t2 ON t1.a=t2.b AND t1.x=5 -** -** The where clause needs to defer the handling of the t1.x=5 -** term until after the t2 loop of the join. In that way, a -** NULL t2 row will be inserted whenever t1.x!=5. If we do not -** defer the handling of t1.x=5, it will be processed immediately -** after the t1 loop and rows with t1.x!=5 will never appear in -** the output, which is incorrect. -*/ -static void setJoinExpr(Expr *p, int iTable){ - while( p ){ - ExprSetProperty(p, EP_FromJoin); - assert( !ExprHasAnyProperty(p, EP_TokenOnly|EP_Reduced) ); - ExprSetIrreducible(p); - p->iRightJoinTable = (i16)iTable; - setJoinExpr(p->pLeft, iTable); - p = p->pRight; - } -} +#ifndef SQLITE_OMIT_VIRTUALTABLE + if( IsVirtual(pTab) ){ + sqlite3VdbeAddOp0(v, OP_VBegin); + } +#endif -/* -** This routine processes the join information for a SELECT statement. -** ON and USING clauses are converted into extra terms of the WHERE clause. -** NATURAL joins also create extra WHERE clause terms. -** -** The terms of a FROM clause are contained in the Select.pSrc structure. -** The left most table is the first entry in Select.pSrc. The right-most -** table is the last entry. The join operator is held in the entry to -** the left. Thus entry 0 contains the join operator for the join between -** entries 0 and 1. Any ON or USING clauses associated with the join are -** also attached to the left entry. -** -** This routine returns the number of errors encountered. -*/ -static int sqliteProcessJoin(Parse *pParse, Select *p){ - SrcList *pSrc; /* All tables in the FROM clause */ - int i, j; /* Loop counters */ - struct SrcList_item *pLeft; /* Left table being joined */ - struct SrcList_item *pRight; /* Right table being joined */ + /* Drop all triggers associated with the table being dropped. Code + ** is generated to remove entries from sqlite_master and/or + ** sqlite_temp_master if required. + */ + pTrigger = sqlite3TriggerList(pParse, pTab); + while( pTrigger ){ + assert( pTrigger->pSchema==pTab->pSchema || + pTrigger->pSchema==db->aDb[1].pSchema ); + sqlite3DropTriggerPtr(pParse, pTrigger); + pTrigger = pTrigger->pNext; + } - pSrc = p->pSrc; - pLeft = &pSrc->a[0]; - pRight = &pLeft[1]; - for(i=0; inSrc-1; i++, pRight++, pLeft++){ - Table *pLeftTab = pLeft->pTab; - Table *pRightTab = pRight->pTab; - int isOuter; +#ifndef SQLITE_OMIT_AUTOINCREMENT + /* Remove any entries of the sqlite_sequence table associated with + ** the table being dropped. This is done before the table is dropped + ** at the btree level, in case the sqlite_sequence table needs to + ** move as a result of the drop (can happen in auto-vacuum mode). + */ + if( pTab->tabFlags & TF_Autoincrement ){ + sqlite3NestedParse(pParse, + "DELETE FROM %Q.sqlite_sequence WHERE name=%Q", + pDb->zName, pTab->zName + ); + } +#endif - if( NEVER(pLeftTab==0 || pRightTab==0) ) continue; - isOuter = (pRight->jointype & JT_OUTER)!=0; + /* Drop all SQLITE_MASTER table and index entries that refer to the + ** table. The program name loops through the master table and deletes + ** every row that refers to a table of the same name as the one being + ** dropped. Triggers are handled seperately because a trigger can be + ** created in the temp database that refers to a table in another + ** database. + */ + sqlite3NestedParse(pParse, + "DELETE FROM %Q.%s WHERE tbl_name=%Q and type!='trigger'", + pDb->zName, SCHEMA_TABLE(iDb), pTab->zName); + if( !isView && !IsVirtual(pTab) ){ + destroyTable(pParse, pTab); + } - /* When the NATURAL keyword is present, add WHERE clause terms for - ** every column that the two tables have in common. - */ - if( pRight->jointype & JT_NATURAL ){ - if( pRight->pOn || pRight->pUsing ){ - sqlite3ErrorMsg(pParse, "a NATURAL join may not have " - "an ON or USING clause", 0); - return 1; + /* Remove the table entry from SQLite's internal schema and modify + ** the schema cookie. + */ + if( IsVirtual(pTab) ){ + sqlite3VdbeAddOp4(v, OP_VDestroy, iDb, 0, 0, pTab->zName, 0); + } + sqlite3VdbeAddOp4(v, OP_DropTable, iDb, 0, 0, pTab->zName, 0); + sqlite3ChangeCookie(pParse, iDb); + sqliteViewResetAll(db, iDb); +} + +/* +** This routine is called to do the work of a DROP TABLE statement. +** pName is the name of the table to be dropped. +*/ +SQLITE_PRIVATE void sqlite3DropTable(Parse *pParse, SrcList *pName, int isView, int noErr){ + Table *pTab; + Vdbe *v; + sqlite3 *db = pParse->db; + int iDb; + + if( db->mallocFailed ){ + goto exit_drop_table; + } + assert( pParse->nErr==0 ); + assert( pName->nSrc==1 ); + if( noErr ) db->suppressErr++; + pTab = sqlite3LocateTable(pParse, isView, + pName->a[0].zName, pName->a[0].zDatabase); + if( noErr ) db->suppressErr--; + + if( pTab==0 ){ + if( noErr ) sqlite3CodeVerifyNamedSchema(pParse, pName->a[0].zDatabase); + goto exit_drop_table; + } + iDb = sqlite3SchemaToIndex(db, pTab->pSchema); + assert( iDb>=0 && iDbnDb ); + + /* If pTab is a virtual table, call ViewGetColumnNames() to ensure + ** it is initialized. + */ + if( IsVirtual(pTab) && sqlite3ViewGetColumnNames(pParse, pTab) ){ + goto exit_drop_table; + } +#ifndef SQLITE_OMIT_AUTHORIZATION + { + int code; + const char *zTab = SCHEMA_TABLE(iDb); + const char *zDb = db->aDb[iDb].zName; + const char *zArg2 = 0; + if( sqlite3AuthCheck(pParse, SQLITE_DELETE, zTab, 0, zDb)){ + goto exit_drop_table; + } + if( isView ){ + if( !OMIT_TEMPDB && iDb==1 ){ + code = SQLITE_DROP_TEMP_VIEW; + }else{ + code = SQLITE_DROP_VIEW; } - for(j=0; jnCol; j++){ - char *zName = pLeftTab->aCol[j].zName; - if( columnIndex(pRightTab, zName)>=0 ){ - addWhereTerm(pParse, zName, pLeftTab, pLeft->zAlias, - pRightTab, pRight->zAlias, - pRight->iCursor, &p->pWhere, isOuter); - - } +#ifndef SQLITE_OMIT_VIRTUALTABLE + }else if( IsVirtual(pTab) ){ + code = SQLITE_DROP_VTABLE; + zArg2 = sqlite3GetVTable(db, pTab)->pMod->zName; +#endif + }else{ + if( !OMIT_TEMPDB && iDb==1 ){ + code = SQLITE_DROP_TEMP_TABLE; + }else{ + code = SQLITE_DROP_TABLE; } } - - /* Disallow both ON and USING clauses in the same join - */ - if( pRight->pOn && pRight->pUsing ){ - sqlite3ErrorMsg(pParse, "cannot have both ON and USING " - "clauses in the same join"); - return 1; + if( sqlite3AuthCheck(pParse, code, pTab->zName, zArg2, zDb) ){ + goto exit_drop_table; } - - /* Add the ON clause to the end of the WHERE clause, connected by - ** an AND operator. - */ - if( pRight->pOn ){ - if( isOuter ) setJoinExpr(pRight->pOn, pRight->iCursor); - p->pWhere = sqlite3ExprAnd(pParse->db, p->pWhere, pRight->pOn); - pRight->pOn = 0; + if( sqlite3AuthCheck(pParse, SQLITE_DELETE, pTab->zName, 0, zDb) ){ + goto exit_drop_table; } + } +#endif + if( sqlite3StrNICmp(pTab->zName, "sqlite_", 7)==0 + && sqlite3StrNICmp(pTab->zName, "sqlite_stat", 11)!=0 ){ + sqlite3ErrorMsg(pParse, "table %s may not be dropped", pTab->zName); + goto exit_drop_table; + } - /* Create extra terms on the WHERE clause for each column named - ** in the USING clause. Example: If the two tables to be joined are - ** A and B and the USING clause names X, Y, and Z, then add this - ** to the WHERE clause: A.X=B.X AND A.Y=B.Y AND A.Z=B.Z - ** Report an error if any column mentioned in the USING clause is - ** not contained in both tables to be joined. - */ - if( pRight->pUsing ){ - IdList *pList = pRight->pUsing; - for(j=0; jnId; j++){ - char *zName = pList->a[j].zName; - if( columnIndex(pLeftTab, zName)<0 || columnIndex(pRightTab, zName)<0 ){ - sqlite3ErrorMsg(pParse, "cannot join using column %s - column " - "not present in both tables", zName); - return 1; - } - addWhereTerm(pParse, zName, pLeftTab, pLeft->zAlias, - pRightTab, pRight->zAlias, - pRight->iCursor, &p->pWhere, isOuter); - } - } +#ifndef SQLITE_OMIT_VIEW + /* Ensure DROP TABLE is not used on a view, and DROP VIEW is not used + ** on a table. + */ + if( isView && pTab->pSelect==0 ){ + sqlite3ErrorMsg(pParse, "use DROP TABLE to delete table %s", pTab->zName); + goto exit_drop_table; } - return 0; + if( !isView && pTab->pSelect ){ + sqlite3ErrorMsg(pParse, "use DROP VIEW to delete view %s", pTab->zName); + goto exit_drop_table; + } +#endif + + /* Generate code to remove the table from the master table + ** on disk. + */ + v = sqlite3GetVdbe(pParse); + if( v ){ + sqlite3BeginWriteOperation(pParse, 1, iDb); + sqlite3ClearStatTables(pParse, iDb, "tbl", pTab->zName); + sqlite3FkDropTable(pParse, pName, pTab); + sqlite3CodeDropTable(pParse, pTab, iDb, isView); + } + +exit_drop_table: + sqlite3SrcListDelete(db, pName); } /* -** Insert code into "v" that will push the record on the top of the -** stack into the sorter. +** This routine is called to create a new foreign key on the table +** currently under construction. pFromCol determines which columns +** in the current table point to the foreign key. If pFromCol==0 then +** connect the key to the last column inserted. pTo is the name of +** the table referred to. pToCol is a list of tables in the other +** pTo table that the foreign key points to. flags contains all +** information about the conflict resolution algorithms specified +** in the ON DELETE, ON UPDATE and ON INSERT clauses. +** +** An FKey structure is created and added to the table currently +** under construction in the pParse->pNewTable field. +** +** The foreign key is set for IMMEDIATE processing. A subsequent call +** to sqlite3DeferForeignKey() might change this to DEFERRED. */ -static void pushOntoSorter( - Parse *pParse, /* Parser context */ - ExprList *pOrderBy, /* The ORDER BY clause */ - Select *pSelect, /* The whole SELECT statement */ - int regData /* Register holding data to be sorted */ +SQLITE_PRIVATE void sqlite3CreateForeignKey( + Parse *pParse, /* Parsing context */ + ExprList *pFromCol, /* Columns in this table that point to other table */ + Token *pTo, /* Name of the other table */ + ExprList *pToCol, /* Columns in the other table */ + int flags /* Conflict resolution algorithms. */ ){ - Vdbe *v = pParse->pVdbe; - int nExpr = pOrderBy->nExpr; - int regBase = sqlite3GetTempRange(pParse, nExpr+2); - int regRecord = sqlite3GetTempReg(pParse); - sqlite3ExprCacheClear(pParse); - sqlite3ExprCodeExprList(pParse, pOrderBy, regBase, 0); - sqlite3VdbeAddOp2(v, OP_Sequence, pOrderBy->iECursor, regBase+nExpr); - sqlite3ExprCodeMove(pParse, regData, regBase+nExpr+1, 1); - sqlite3VdbeAddOp3(v, OP_MakeRecord, regBase, nExpr + 2, regRecord); - sqlite3VdbeAddOp2(v, OP_IdxInsert, pOrderBy->iECursor, regRecord); - sqlite3ReleaseTempReg(pParse, regRecord); - sqlite3ReleaseTempRange(pParse, regBase, nExpr+2); - if( pSelect->iLimit ){ - int addr1, addr2; - int iLimit; - if( pSelect->iOffset ){ - iLimit = pSelect->iOffset+1; - }else{ - iLimit = pSelect->iLimit; + sqlite3 *db = pParse->db; +#ifndef SQLITE_OMIT_FOREIGN_KEY + FKey *pFKey = 0; + FKey *pNextTo; + Table *p = pParse->pNewTable; + int nByte; + int i; + int nCol; + char *z; + + assert( pTo!=0 ); + if( p==0 || IN_DECLARE_VTAB ) goto fk_end; + if( pFromCol==0 ){ + int iCol = p->nCol-1; + if( NEVER(iCol<0) ) goto fk_end; + if( pToCol && pToCol->nExpr!=1 ){ + sqlite3ErrorMsg(pParse, "foreign key on %s" + " should reference only one column of table %T", + p->aCol[iCol].zName, pTo); + goto fk_end; } - addr1 = sqlite3VdbeAddOp1(v, OP_IfZero, iLimit); - sqlite3VdbeAddOp2(v, OP_AddImm, iLimit, -1); - addr2 = sqlite3VdbeAddOp0(v, OP_Goto); - sqlite3VdbeJumpHere(v, addr1); - sqlite3VdbeAddOp1(v, OP_Last, pOrderBy->iECursor); - sqlite3VdbeAddOp1(v, OP_Delete, pOrderBy->iECursor); - sqlite3VdbeJumpHere(v, addr2); - pSelect->iLimit = 0; + nCol = 1; + }else if( pToCol && pToCol->nExpr!=pFromCol->nExpr ){ + sqlite3ErrorMsg(pParse, + "number of columns in foreign key does not match the number of " + "columns in the referenced table"); + goto fk_end; + }else{ + nCol = pFromCol->nExpr; } -} + nByte = sizeof(*pFKey) + (nCol-1)*sizeof(pFKey->aCol[0]) + pTo->n + 1; + if( pToCol ){ + for(i=0; inExpr; i++){ + nByte += sqlite3Strlen30(pToCol->a[i].zName) + 1; + } + } + pFKey = sqlite3DbMallocZero(db, nByte ); + if( pFKey==0 ){ + goto fk_end; + } + pFKey->pFrom = p; + pFKey->pNextFrom = p->pFKey; + z = (char*)&pFKey->aCol[nCol]; + pFKey->zTo = z; + memcpy(z, pTo->z, pTo->n); + z[pTo->n] = 0; + sqlite3Dequote(z); + z += pTo->n+1; + pFKey->nCol = nCol; + if( pFromCol==0 ){ + pFKey->aCol[0].iFrom = p->nCol-1; + }else{ + for(i=0; inCol; j++){ + if( sqlite3StrICmp(p->aCol[j].zName, pFromCol->a[i].zName)==0 ){ + pFKey->aCol[i].iFrom = j; + break; + } + } + if( j>=p->nCol ){ + sqlite3ErrorMsg(pParse, + "unknown column \"%s\" in foreign key definition", + pFromCol->a[i].zName); + goto fk_end; + } + } + } + if( pToCol ){ + for(i=0; ia[i].zName); + pFKey->aCol[i].zCol = z; + memcpy(z, pToCol->a[i].zName, n); + z[n] = 0; + z += n+1; + } + } + pFKey->isDeferred = 0; + pFKey->aAction[0] = (u8)(flags & 0xff); /* ON DELETE action */ + pFKey->aAction[1] = (u8)((flags >> 8 ) & 0xff); /* ON UPDATE action */ -/* -** Add code to implement the OFFSET -*/ -static void codeOffset( - Vdbe *v, /* Generate code into this VM */ - Select *p, /* The SELECT statement being coded */ - int iContinue /* Jump here to skip the current record */ -){ - if( p->iOffset && iContinue!=0 ){ - int addr; - sqlite3VdbeAddOp2(v, OP_AddImm, p->iOffset, -1); - addr = sqlite3VdbeAddOp1(v, OP_IfNeg, p->iOffset); - sqlite3VdbeAddOp2(v, OP_Goto, 0, iContinue); - VdbeComment((v, "skip OFFSET records")); - sqlite3VdbeJumpHere(v, addr); + assert( sqlite3SchemaMutexHeld(db, 0, p->pSchema) ); + pNextTo = (FKey *)sqlite3HashInsert(&p->pSchema->fkeyHash, + pFKey->zTo, sqlite3Strlen30(pFKey->zTo), (void *)pFKey + ); + if( pNextTo==pFKey ){ + db->mallocFailed = 1; + goto fk_end; + } + if( pNextTo ){ + assert( pNextTo->pPrevTo==0 ); + pFKey->pNextTo = pNextTo; + pNextTo->pPrevTo = pFKey; } -} -/* -** Add code that will check to make sure the N registers starting at iMem -** form a distinct entry. iTab is a sorting index that holds previously -** seen combinations of the N values. A new entry is made in iTab -** if the current N values are new. -** -** A jump to addrRepeat is made and the N+1 values are popped from the -** stack if the top N elements are not distinct. -*/ -static void codeDistinct( - Parse *pParse, /* Parsing and code generating context */ - int iTab, /* A sorting index used to test for distinctness */ - int addrRepeat, /* Jump to here if not distinct */ - int N, /* Number of elements */ - int iMem /* First element */ -){ - Vdbe *v; - int r1; + /* Link the foreign key to the table as the last step. + */ + p->pFKey = pFKey; + pFKey = 0; - v = pParse->pVdbe; - r1 = sqlite3GetTempReg(pParse); - sqlite3VdbeAddOp3(v, OP_MakeRecord, iMem, N, r1); - sqlite3VdbeAddOp3(v, OP_Found, iTab, addrRepeat, r1); - sqlite3VdbeAddOp2(v, OP_IdxInsert, iTab, r1); - sqlite3ReleaseTempReg(pParse, r1); +fk_end: + sqlite3DbFree(db, pFKey); +#endif /* !defined(SQLITE_OMIT_FOREIGN_KEY) */ + sqlite3ExprListDelete(db, pFromCol); + sqlite3ExprListDelete(db, pToCol); } /* -** Generate an error message when a SELECT is used within a subexpression -** (example: "a IN (SELECT * FROM table)") but it has more than 1 result -** column. We do this in a subroutine because the error occurs in multiple -** places. +** This routine is called when an INITIALLY IMMEDIATE or INITIALLY DEFERRED +** clause is seen as part of a foreign key definition. The isDeferred +** parameter is 1 for INITIALLY DEFERRED and 0 for INITIALLY IMMEDIATE. +** The behavior of the most recently created foreign key is adjusted +** accordingly. */ -static int checkForMultiColumnSelectError( - Parse *pParse, /* Parse context. */ - SelectDest *pDest, /* Destination of SELECT results */ - int nExpr /* Number of result columns returned by SELECT */ -){ - int eDest = pDest->eDest; - if( nExpr>1 && (eDest==SRT_Mem || eDest==SRT_Set) ){ - sqlite3ErrorMsg(pParse, "only a single result allowed for " - "a SELECT that is part of an expression"); - return 1; - }else{ - return 0; - } +SQLITE_PRIVATE void sqlite3DeferForeignKey(Parse *pParse, int isDeferred){ +#ifndef SQLITE_OMIT_FOREIGN_KEY + Table *pTab; + FKey *pFKey; + if( (pTab = pParse->pNewTable)==0 || (pFKey = pTab->pFKey)==0 ) return; + assert( isDeferred==0 || isDeferred==1 ); /* EV: R-30323-21917 */ + pFKey->isDeferred = (u8)isDeferred; +#endif } /* -** This routine generates the code for the inside of the inner loop -** of a SELECT. +** Generate code that will erase and refill index *pIdx. This is +** used to initialize a newly created index or to recompute the +** content of an index in response to a REINDEX command. ** -** If srcTab and nColumn are both zero, then the pEList expressions -** are evaluated in order to get the data for this row. If nColumn>0 -** then data is pulled from srcTab and pEList is used only to get the -** datatypes for each column. +** if memRootPage is not negative, it means that the index is newly +** created. The register specified by memRootPage contains the +** root page number of the index. If memRootPage is negative, then +** the index already exists and must be cleared before being refilled and +** the root page number of the index is taken from pIndex->tnum. */ -static void selectInnerLoop( - Parse *pParse, /* The parser context */ - Select *p, /* The complete select statement being coded */ - ExprList *pEList, /* List of values being extracted */ - int srcTab, /* Pull data from this table */ - int nColumn, /* Number of columns in the source table */ - ExprList *pOrderBy, /* If not NULL, sort results using this key */ - int distinct, /* If >=0, make sure results are distinct */ - SelectDest *pDest, /* How to dispose of the results */ - int iContinue, /* Jump here to continue with next row */ - int iBreak /* Jump here to break out of the inner loop */ -){ - Vdbe *v = pParse->pVdbe; - int i; - int hasDistinct; /* True if the DISTINCT keyword is present */ - int regResult; /* Start of memory holding result set */ - int eDest = pDest->eDest; /* How to dispose of results */ - int iParm = pDest->iParm; /* First argument to disposal method */ - int nResultCol; /* Number of result columns */ +static void sqlite3RefillIndex(Parse *pParse, Index *pIndex, int memRootPage){ + Table *pTab = pIndex->pTable; /* The table that is indexed */ + int iTab = pParse->nTab++; /* Btree cursor used for pTab */ + int iIdx = pParse->nTab++; /* Btree cursor used for pIndex */ + int iSorter; /* Cursor opened by OpenSorter (if in use) */ + int addr1; /* Address of top of loop */ + int addr2; /* Address to jump to for next iteration */ + int tnum; /* Root page of index */ + Vdbe *v; /* Generate code into this virtual machine */ + KeyInfo *pKey; /* KeyInfo for index */ +#ifdef SQLITE_OMIT_MERGE_SORT + int regIdxKey; /* Registers containing the index key */ +#endif + int regRecord; /* Register holding assemblied index record */ + sqlite3 *db = pParse->db; /* The database connection */ + int iDb = sqlite3SchemaToIndex(db, pIndex->pSchema); - assert( v ); - if( NEVER(v==0) ) return; - assert( pEList!=0 ); - hasDistinct = distinct>=0; - if( pOrderBy==0 && !hasDistinct ){ - codeOffset(v, p, iContinue); +#ifndef SQLITE_OMIT_AUTHORIZATION + if( sqlite3AuthCheck(pParse, SQLITE_REINDEX, pIndex->zName, 0, + db->aDb[iDb].zName ) ){ + return; } +#endif - /* Pull the requested columns. - */ - if( nColumn>0 ){ - nResultCol = nColumn; + /* Require a write-lock on the table to perform this operation */ + sqlite3TableLock(pParse, iDb, pTab->tnum, 1, pTab->zName); + + v = sqlite3GetVdbe(pParse); + if( v==0 ) return; + if( memRootPage>=0 ){ + tnum = memRootPage; }else{ - nResultCol = pEList->nExpr; - } - if( pDest->iMem==0 ){ - pDest->iMem = pParse->nMem+1; - pDest->nMem = nResultCol; - pParse->nMem += nResultCol; - }else{ - assert( pDest->nMem==nResultCol ); + tnum = pIndex->tnum; + sqlite3VdbeAddOp2(v, OP_Clear, tnum, iDb); } - regResult = pDest->iMem; - if( nColumn>0 ){ - for(i=0; i=0 ){ + sqlite3VdbeChangeP5(v, 1); } - nColumn = nResultCol; - /* If the DISTINCT keyword was present on the SELECT statement - ** and this row has been seen before, then do not make this row - ** part of the result. - */ - if( hasDistinct ){ - assert( pEList!=0 ); - assert( pEList->nExpr==nColumn ); - codeDistinct(pParse, distinct, iContinue, nColumn, regResult); - if( pOrderBy==0 ){ - codeOffset(v, p, iContinue); - } - } +#ifndef SQLITE_OMIT_MERGE_SORT + /* Open the sorter cursor if we are to use one. */ + iSorter = pParse->nTab++; + sqlite3VdbeAddOp4(v, OP_SorterOpen, iSorter, 0, 0, (char*)pKey, P4_KEYINFO); +#else + iSorter = iTab; +#endif - if( checkForMultiColumnSelectError(pParse, pDest, pEList->nExpr) ){ - return; - } + /* Open the table. Loop through all rows of the table, inserting index + ** records into the sorter. */ + sqlite3OpenTable(pParse, iTab, iDb, pTab, OP_OpenRead); + addr1 = sqlite3VdbeAddOp2(v, OP_Rewind, iTab, 0); + regRecord = sqlite3GetTempReg(pParse); - switch( eDest ){ - /* In this mode, write each query result to the key of the temporary - ** table iParm. - */ -#ifndef SQLITE_OMIT_COMPOUND_SELECT - case SRT_Union: { - int r1; - r1 = sqlite3GetTempReg(pParse); - sqlite3VdbeAddOp3(v, OP_MakeRecord, regResult, nColumn, r1); - sqlite3VdbeAddOp2(v, OP_IdxInsert, iParm, r1); - sqlite3ReleaseTempReg(pParse, r1); - break; - } +#ifndef SQLITE_OMIT_MERGE_SORT + sqlite3GenerateIndexKey(pParse, pIndex, iTab, regRecord, 1); + sqlite3VdbeAddOp2(v, OP_SorterInsert, iSorter, regRecord); + sqlite3VdbeAddOp2(v, OP_Next, iTab, addr1+1); + sqlite3VdbeJumpHere(v, addr1); + addr1 = sqlite3VdbeAddOp2(v, OP_SorterSort, iSorter, 0); + if( pIndex->onError!=OE_None ){ + int j2 = sqlite3VdbeCurrentAddr(v) + 3; + sqlite3VdbeAddOp2(v, OP_Goto, 0, j2); + addr2 = sqlite3VdbeCurrentAddr(v); + sqlite3VdbeAddOp3(v, OP_SorterCompare, iSorter, j2, regRecord); + sqlite3HaltConstraint( + pParse, OE_Abort, "indexed columns are not unique", P4_STATIC + ); + }else{ + addr2 = sqlite3VdbeCurrentAddr(v); + } + sqlite3VdbeAddOp2(v, OP_SorterData, iSorter, regRecord); + sqlite3VdbeAddOp3(v, OP_IdxInsert, iIdx, regRecord, 1); + sqlite3VdbeChangeP5(v, OPFLAG_USESEEKRESULT); +#else + regIdxKey = sqlite3GenerateIndexKey(pParse, pIndex, iTab, regRecord, 1); + addr2 = addr1 + 1; + if( pIndex->onError!=OE_None ){ + const int regRowid = regIdxKey + pIndex->nColumn; + const int j2 = sqlite3VdbeCurrentAddr(v) + 2; + void * const pRegKey = SQLITE_INT_TO_PTR(regIdxKey); - /* Construct a record from the query result, but instead of - ** saving that record, use it as a key to delete elements from - ** the temporary table iParm. + /* The registers accessed by the OP_IsUnique opcode were allocated + ** using sqlite3GetTempRange() inside of the sqlite3GenerateIndexKey() + ** call above. Just before that function was freed they were released + ** (made available to the compiler for reuse) using + ** sqlite3ReleaseTempRange(). So in some ways having the OP_IsUnique + ** opcode use the values stored within seems dangerous. However, since + ** we can be sure that no other temp registers have been allocated + ** since sqlite3ReleaseTempRange() was called, it is safe to do so. */ - case SRT_Except: { - sqlite3VdbeAddOp3(v, OP_IdxDelete, iParm, regResult, nColumn); - break; - } + sqlite3VdbeAddOp4(v, OP_IsUnique, iIdx, j2, regRowid, pRegKey, P4_INT32); + sqlite3HaltConstraint( + pParse, OE_Abort, "indexed columns are not unique", P4_STATIC); + } + sqlite3VdbeAddOp3(v, OP_IdxInsert, iIdx, regRecord, 0); + sqlite3VdbeChangeP5(v, OPFLAG_USESEEKRESULT); #endif + sqlite3ReleaseTempReg(pParse, regRecord); + sqlite3VdbeAddOp2(v, OP_SorterNext, iSorter, addr2); + sqlite3VdbeJumpHere(v, addr1); - /* Store the result as data using a unique key. - */ - case SRT_Table: - case SRT_EphemTab: { - int r1 = sqlite3GetTempReg(pParse); - testcase( eDest==SRT_Table ); - testcase( eDest==SRT_EphemTab ); - sqlite3VdbeAddOp3(v, OP_MakeRecord, regResult, nColumn, r1); - if( pOrderBy ){ - pushOntoSorter(pParse, pOrderBy, p, r1); - }else{ - int r2 = sqlite3GetTempReg(pParse); - sqlite3VdbeAddOp2(v, OP_NewRowid, iParm, r2); - sqlite3VdbeAddOp3(v, OP_Insert, iParm, r1, r2); - sqlite3VdbeChangeP5(v, OPFLAG_APPEND); - sqlite3ReleaseTempReg(pParse, r2); - } - sqlite3ReleaseTempReg(pParse, r1); - break; - } + sqlite3VdbeAddOp1(v, OP_Close, iTab); + sqlite3VdbeAddOp1(v, OP_Close, iIdx); + sqlite3VdbeAddOp1(v, OP_Close, iSorter); +} -#ifndef SQLITE_OMIT_SUBQUERY - /* If we are creating a set for an "expr IN (SELECT ...)" construct, - ** then there should be a single item on the stack. Write this - ** item into the set table with bogus data. +/* +** Create a new index for an SQL table. pName1.pName2 is the name of the index +** and pTblList is the name of the table that is to be indexed. Both will +** be NULL for a primary key or an index that is created to satisfy a +** UNIQUE constraint. If pTable and pIndex are NULL, use pParse->pNewTable +** as the table to be indexed. pParse->pNewTable is a table that is +** currently being constructed by a CREATE TABLE statement. +** +** pList is a list of columns to be indexed. pList will be NULL if this +** is a primary key or unique-constraint on the most recent column added +** to the table currently under construction. +** +** If the index is created successfully, return a pointer to the new Index +** structure. This is used by sqlite3AddPrimaryKey() to mark the index +** as the tables primary key (Index.autoIndex==2). +*/ +SQLITE_PRIVATE Index *sqlite3CreateIndex( + Parse *pParse, /* All information about this parse */ + Token *pName1, /* First part of index name. May be NULL */ + Token *pName2, /* Second part of index name. May be NULL */ + SrcList *pTblName, /* Table to index. Use pParse->pNewTable if 0 */ + ExprList *pList, /* A list of columns to be indexed */ + int onError, /* OE_Abort, OE_Ignore, OE_Replace, or OE_None */ + Token *pStart, /* The CREATE token that begins this statement */ + Token *pEnd, /* The ")" that closes the CREATE INDEX statement */ + int sortOrder, /* Sort order of primary key when pList==NULL */ + int ifNotExist /* Omit error if index already exists */ +){ + Index *pRet = 0; /* Pointer to return */ + Table *pTab = 0; /* Table to be indexed */ + Index *pIndex = 0; /* The index to be created */ + char *zName = 0; /* Name of the index */ + int nName; /* Number of characters in zName */ + int i, j; + Token nullId; /* Fake token for an empty ID list */ + DbFixer sFix; /* For assigning database names to pTable */ + int sortOrderMask; /* 1 to honor DESC in index. 0 to ignore. */ + sqlite3 *db = pParse->db; + Db *pDb; /* The specific table containing the indexed database */ + int iDb; /* Index of the database that is being written */ + Token *pName = 0; /* Unqualified name of the index to create */ + struct ExprList_item *pListItem; /* For looping over pList */ + int nCol; + int nExtra = 0; + char *zExtra; + + assert( pStart==0 || pEnd!=0 ); /* pEnd must be non-NULL if pStart is */ + assert( pParse->nErr==0 ); /* Never called with prior errors */ + if( db->mallocFailed || IN_DECLARE_VTAB ){ + goto exit_create_index; + } + if( SQLITE_OK!=sqlite3ReadSchema(pParse) ){ + goto exit_create_index; + } + + /* + ** Find the table that is to be indexed. Return early if not found. + */ + if( pTblName!=0 ){ + + /* Use the two-part index name to determine the database + ** to search for the table. 'Fix' the table name to this db + ** before looking up the table. */ - case SRT_Set: { - assert( nColumn==1 ); - p->affinity = sqlite3CompareAffinity(pEList->a[0].pExpr, pDest->affinity); - if( pOrderBy ){ - /* At first glance you would think we could optimize out the - ** ORDER BY in this case since the order of entries in the set - ** does not matter. But there might be a LIMIT clause, in which - ** case the order does matter */ - pushOntoSorter(pParse, pOrderBy, p, regResult); - }else{ - int r1 = sqlite3GetTempReg(pParse); - sqlite3VdbeAddOp4(v, OP_MakeRecord, regResult, 1, r1, &p->affinity, 1); - sqlite3ExprCacheAffinityChange(pParse, regResult, 1); - sqlite3VdbeAddOp2(v, OP_IdxInsert, iParm, r1); - sqlite3ReleaseTempReg(pParse, r1); + assert( pName1 && pName2 ); + iDb = sqlite3TwoPartName(pParse, pName1, pName2, &pName); + if( iDb<0 ) goto exit_create_index; + assert( pName && pName->z ); + +#ifndef SQLITE_OMIT_TEMPDB + /* If the index name was unqualified, check if the the table + ** is a temp table. If so, set the database to 1. Do not do this + ** if initialising a database schema. + */ + if( !db->init.busy ){ + pTab = sqlite3SrcListLookup(pParse, pTblName); + if( pName2->n==0 && pTab && pTab->pSchema==db->aDb[1].pSchema ){ + iDb = 1; } - break; } +#endif - /* If any row exist in the result set, record that fact and abort. - */ - case SRT_Exists: { - sqlite3VdbeAddOp2(v, OP_Integer, 1, iParm); - /* The LIMIT clause will terminate the loop for us */ - break; + if( sqlite3FixInit(&sFix, pParse, iDb, "index", pName) && + sqlite3FixSrcList(&sFix, pTblName) + ){ + /* Because the parser constructs pTblName from a single identifier, + ** sqlite3FixSrcList can never fail. */ + assert(0); } + pTab = sqlite3LocateTable(pParse, 0, pTblName->a[0].zName, + pTblName->a[0].zDatabase); + if( !pTab || db->mallocFailed ) goto exit_create_index; + assert( db->aDb[iDb].pSchema==pTab->pSchema ); + }else{ + assert( pName==0 ); + assert( pStart==0 ); + pTab = pParse->pNewTable; + if( !pTab ) goto exit_create_index; + iDb = sqlite3SchemaToIndex(db, pTab->pSchema); + } + pDb = &db->aDb[iDb]; - /* If this is a scalar select that is part of an expression, then - ** store the results in the appropriate memory cell and break out - ** of the scan loop. - */ - case SRT_Mem: { - assert( nColumn==1 ); - if( pOrderBy ){ - pushOntoSorter(pParse, pOrderBy, p, regResult); - }else{ - sqlite3ExprCodeMove(pParse, regResult, iParm, 1); - /* The LIMIT clause will jump out of the loop for us */ + assert( pTab!=0 ); + assert( pParse->nErr==0 ); + if( sqlite3StrNICmp(pTab->zName, "sqlite_", 7)==0 + && memcmp(&pTab->zName[7],"altertab_",9)!=0 ){ + sqlite3ErrorMsg(pParse, "table %s may not be indexed", pTab->zName); + goto exit_create_index; + } +#ifndef SQLITE_OMIT_VIEW + if( pTab->pSelect ){ + sqlite3ErrorMsg(pParse, "views may not be indexed"); + goto exit_create_index; + } +#endif +#ifndef SQLITE_OMIT_VIRTUALTABLE + if( IsVirtual(pTab) ){ + sqlite3ErrorMsg(pParse, "virtual tables may not be indexed"); + goto exit_create_index; + } +#endif + + /* + ** Find the name of the index. Make sure there is not already another + ** index or table with the same name. + ** + ** Exception: If we are reading the names of permanent indices from the + ** sqlite_master table (because some other process changed the schema) and + ** one of the index names collides with the name of a temporary table or + ** index, then we will continue to process this index. + ** + ** If pName==0 it means that we are + ** dealing with a primary key or UNIQUE constraint. We have to invent our + ** own name. + */ + if( pName ){ + zName = sqlite3NameFromToken(db, pName); + if( zName==0 ) goto exit_create_index; + assert( pName->z!=0 ); + if( SQLITE_OK!=sqlite3CheckObjectName(pParse, zName) ){ + goto exit_create_index; + } + if( !db->init.busy ){ + if( sqlite3FindTable(db, zName, 0)!=0 ){ + sqlite3ErrorMsg(pParse, "there is already a table named %s", zName); + goto exit_create_index; } - break; } -#endif /* #ifndef SQLITE_OMIT_SUBQUERY */ - - /* Send the data to the callback function or to a subroutine. In the - ** case of a subroutine, the subroutine itself is responsible for - ** popping the data from the stack. - */ - case SRT_Coroutine: - case SRT_Output: { - testcase( eDest==SRT_Coroutine ); - testcase( eDest==SRT_Output ); - if( pOrderBy ){ - int r1 = sqlite3GetTempReg(pParse); - sqlite3VdbeAddOp3(v, OP_MakeRecord, regResult, nColumn, r1); - pushOntoSorter(pParse, pOrderBy, p, r1); - sqlite3ReleaseTempReg(pParse, r1); - }else if( eDest==SRT_Coroutine ){ - sqlite3VdbeAddOp1(v, OP_Yield, pDest->iParm); + if( sqlite3FindIndex(db, zName, pDb->zName)!=0 ){ + if( !ifNotExist ){ + sqlite3ErrorMsg(pParse, "index %s already exists", zName); }else{ - sqlite3VdbeAddOp2(v, OP_ResultRow, regResult, nColumn); - sqlite3ExprCacheAffinityChange(pParse, regResult, nColumn); + assert( !db->init.busy ); + sqlite3CodeVerifySchema(pParse, iDb); } - break; + goto exit_create_index; } - -#if !defined(SQLITE_OMIT_TRIGGER) - /* Discard the results. This is used for SELECT statements inside - ** the body of a TRIGGER. The purpose of such selects is to call - ** user-defined functions that have side effects. We do not care - ** about the actual results of the select. - */ - default: { - assert( eDest==SRT_Discard ); - break; + }else{ + int n; + Index *pLoop; + for(pLoop=pTab->pIndex, n=1; pLoop; pLoop=pLoop->pNext, n++){} + zName = sqlite3MPrintf(db, "sqlite_autoindex_%s_%d", pTab->zName, n); + if( zName==0 ){ + goto exit_create_index; } -#endif } - /* Jump to the end of the loop if the LIMIT is reached. + /* Check for authorization to create an index. */ - if( p->iLimit ){ - assert( pOrderBy==0 ); /* If there is an ORDER BY, the call to - ** pushOntoSorter() would have cleared p->iLimit */ - sqlite3VdbeAddOp2(v, OP_AddImm, p->iLimit, -1); - sqlite3VdbeAddOp2(v, OP_IfZero, p->iLimit, iBreak); +#ifndef SQLITE_OMIT_AUTHORIZATION + { + const char *zDb = pDb->zName; + if( sqlite3AuthCheck(pParse, SQLITE_INSERT, SCHEMA_TABLE(iDb), 0, zDb) ){ + goto exit_create_index; + } + i = SQLITE_CREATE_INDEX; + if( !OMIT_TEMPDB && iDb==1 ) i = SQLITE_CREATE_TEMP_INDEX; + if( sqlite3AuthCheck(pParse, i, zName, pTab->zName, zDb) ){ + goto exit_create_index; + } } -} +#endif -/* -** Given an expression list, generate a KeyInfo structure that records -** the collating sequence for each expression in that expression list. -** -** If the ExprList is an ORDER BY or GROUP BY clause then the resulting -** KeyInfo structure is appropriate for initializing a virtual index to -** implement that clause. If the ExprList is the result set of a SELECT -** then the KeyInfo structure is appropriate for initializing a virtual -** index to implement a DISTINCT test. -** -** Space to hold the KeyInfo structure is obtain from malloc. The calling -** function is responsible for seeing that this structure is eventually -** freed. Add the KeyInfo structure to the P4 field of an opcode using -** P4_KEYINFO_HANDOFF is the usual way of dealing with this. -*/ -static KeyInfo *keyInfoFromExprList(Parse *pParse, ExprList *pList){ - sqlite3 *db = pParse->db; - int nExpr; - KeyInfo *pInfo; - struct ExprList_item *pItem; - int i; + /* If pList==0, it means this routine was called to make a primary + ** key out of the last column added to the table under construction. + ** So create a fake list to simulate this. + */ + if( pList==0 ){ + nullId.z = pTab->aCol[pTab->nCol-1].zName; + nullId.n = sqlite3Strlen30((char*)nullId.z); + pList = sqlite3ExprListAppend(pParse, 0, 0); + if( pList==0 ) goto exit_create_index; + sqlite3ExprListSetName(pParse, pList, &nullId, 0); + pList->a[0].sortOrder = (u8)sortOrder; + } - nExpr = pList->nExpr; - pInfo = sqlite3DbMallocZero(db, sizeof(*pInfo) + nExpr*(sizeof(CollSeq*)+1) ); - if( pInfo ){ - pInfo->aSortOrder = (u8*)&pInfo->aColl[nExpr]; - pInfo->nField = (u16)nExpr; - pInfo->enc = ENC(db); - pInfo->db = db; - for(i=0, pItem=pList->a; ipExpr); - if( !pColl ){ - pColl = db->pDfltColl; + /* Figure out how many bytes of space are required to store explicitly + ** specified collation sequence names. + */ + for(i=0; inExpr; i++){ + Expr *pExpr = pList->a[i].pExpr; + if( pExpr ){ + CollSeq *pColl = pExpr->pColl; + /* Either pColl!=0 or there was an OOM failure. But if an OOM + ** failure we have quit before reaching this point. */ + if( ALWAYS(pColl) ){ + nExtra += (1 + sqlite3Strlen30(pColl->zName)); } - pInfo->aColl[i] = pColl; - pInfo->aSortOrder[i] = pItem->sortOrder; } } - return pInfo; -} - -/* -** If the inner loop was generated using a non-null pOrderBy argument, -** then the results were placed in a sorter. After the loop is terminated -** we need to run the sorter and output the results. The following -** routine generates the code needed to do that. -*/ -static void generateSortTail( - Parse *pParse, /* Parsing context */ - Select *p, /* The SELECT statement */ - Vdbe *v, /* Generate code into this VDBE */ - int nColumn, /* Number of columns of data */ - SelectDest *pDest /* Write the sorted results here */ -){ - int addrBreak = sqlite3VdbeMakeLabel(v); /* Jump here to exit loop */ - int addrContinue = sqlite3VdbeMakeLabel(v); /* Jump here for next cycle */ - int addr; - int iTab; - int pseudoTab = 0; - ExprList *pOrderBy = p->pOrderBy; + /* + ** Allocate the index structure. + */ + nName = sqlite3Strlen30(zName); + nCol = pList->nExpr; + pIndex = sqlite3DbMallocZero(db, + ROUND8(sizeof(Index)) + /* Index structure */ + ROUND8(sizeof(tRowcnt)*(nCol+1)) + /* Index.aiRowEst */ + sizeof(char *)*nCol + /* Index.azColl */ + sizeof(int)*nCol + /* Index.aiColumn */ + sizeof(u8)*nCol + /* Index.aSortOrder */ + nName + 1 + /* Index.zName */ + nExtra /* Collation sequence names */ + ); + if( db->mallocFailed ){ + goto exit_create_index; + } + zExtra = (char*)pIndex; + pIndex->aiRowEst = (tRowcnt*)&zExtra[ROUND8(sizeof(Index))]; + pIndex->azColl = (char**) + ((char*)pIndex->aiRowEst + ROUND8(sizeof(tRowcnt)*nCol+1)); + assert( EIGHT_BYTE_ALIGNMENT(pIndex->aiRowEst) ); + assert( EIGHT_BYTE_ALIGNMENT(pIndex->azColl) ); + pIndex->aiColumn = (int *)(&pIndex->azColl[nCol]); + pIndex->aSortOrder = (u8 *)(&pIndex->aiColumn[nCol]); + pIndex->zName = (char *)(&pIndex->aSortOrder[nCol]); + zExtra = (char *)(&pIndex->zName[nName+1]); + memcpy(pIndex->zName, zName, nName+1); + pIndex->pTable = pTab; + pIndex->nColumn = pList->nExpr; + pIndex->onError = (u8)onError; + pIndex->autoIndex = (u8)(pName==0); + pIndex->pSchema = db->aDb[iDb].pSchema; + assert( sqlite3SchemaMutexHeld(db, iDb, 0) ); - int eDest = pDest->eDest; - int iParm = pDest->iParm; + /* Check to see if we should honor DESC requests on index columns + */ + if( pDb->pSchema->file_format>=4 ){ + sortOrderMask = -1; /* Honor DESC */ + }else{ + sortOrderMask = 0; /* Ignore DESC */ + } - int regRow; - int regRowid; + /* Scan the names of the columns of the table to be indexed and + ** load the column indices into the Index structure. Report an error + ** if any column is not found. + ** + ** TODO: Add a test to make sure that the same column is not named + ** more than once within the same index. Only the first instance of + ** the column will ever be used by the optimizer. Note that using the + ** same column more than once cannot be an error because that would + ** break backwards compatibility - it needs to be a warning. + */ + for(i=0, pListItem=pList->a; inExpr; i++, pListItem++){ + const char *zColName = pListItem->zName; + Column *pTabCol; + int requestedSortOrder; + char *zColl; /* Collation sequence name */ - iTab = pOrderBy->iECursor; - if( eDest==SRT_Output || eDest==SRT_Coroutine ){ - pseudoTab = pParse->nTab++; - sqlite3VdbeAddOp3(v, OP_OpenPseudo, pseudoTab, eDest==SRT_Output, nColumn); - } - addr = 1 + sqlite3VdbeAddOp2(v, OP_Sort, iTab, addrBreak); - codeOffset(v, p, addrContinue); - regRow = sqlite3GetTempReg(pParse); - regRowid = sqlite3GetTempReg(pParse); - sqlite3VdbeAddOp3(v, OP_Column, iTab, pOrderBy->nExpr + 1, regRow); - switch( eDest ){ - case SRT_Table: - case SRT_EphemTab: { - testcase( eDest==SRT_Table ); - testcase( eDest==SRT_EphemTab ); - sqlite3VdbeAddOp2(v, OP_NewRowid, iParm, regRowid); - sqlite3VdbeAddOp3(v, OP_Insert, iParm, regRow, regRowid); - sqlite3VdbeChangeP5(v, OPFLAG_APPEND); - break; - } -#ifndef SQLITE_OMIT_SUBQUERY - case SRT_Set: { - assert( nColumn==1 ); - sqlite3VdbeAddOp4(v, OP_MakeRecord, regRow, 1, regRowid, &p->affinity, 1); - sqlite3ExprCacheAffinityChange(pParse, regRow, 1); - sqlite3VdbeAddOp2(v, OP_IdxInsert, iParm, regRowid); - break; + for(j=0, pTabCol=pTab->aCol; jnCol; j++, pTabCol++){ + if( sqlite3StrICmp(zColName, pTabCol->zName)==0 ) break; } - case SRT_Mem: { - assert( nColumn==1 ); - sqlite3ExprCodeMove(pParse, regRow, iParm, 1); - /* The LIMIT clause will terminate the loop for us */ - break; + if( j>=pTab->nCol ){ + sqlite3ErrorMsg(pParse, "table %s has no column named %s", + pTab->zName, zColName); + pParse->checkSchema = 1; + goto exit_create_index; } -#endif - default: { - int i; - assert( eDest==SRT_Output || eDest==SRT_Coroutine ); - testcase( eDest==SRT_Output ); - testcase( eDest==SRT_Coroutine ); - sqlite3VdbeAddOp2(v, OP_Integer, 1, regRowid); - sqlite3VdbeAddOp3(v, OP_Insert, pseudoTab, regRow, regRowid); - for(i=0; iiMem+i ); - sqlite3VdbeAddOp3(v, OP_Column, pseudoTab, i, pDest->iMem+i); - } - if( eDest==SRT_Output ){ - sqlite3VdbeAddOp2(v, OP_ResultRow, pDest->iMem, nColumn); - sqlite3ExprCacheAffinityChange(pParse, pDest->iMem, nColumn); - }else{ - sqlite3VdbeAddOp1(v, OP_Yield, pDest->iParm); + pIndex->aiColumn[i] = j; + /* Justification of the ALWAYS(pListItem->pExpr->pColl): Because of + ** the way the "idxlist" non-terminal is constructed by the parser, + ** if pListItem->pExpr is not null then either pListItem->pExpr->pColl + ** must exist or else there must have been an OOM error. But if there + ** was an OOM error, we would never reach this point. */ + if( pListItem->pExpr && ALWAYS(pListItem->pExpr->pColl) ){ + int nColl; + zColl = pListItem->pExpr->pColl->zName; + nColl = sqlite3Strlen30(zColl) + 1; + assert( nExtra>=nColl ); + memcpy(zExtra, zColl, nColl); + zColl = zExtra; + zExtra += nColl; + nExtra -= nColl; + }else{ + zColl = pTab->aCol[j].zColl; + if( !zColl ){ + zColl = "BINARY"; } - break; } + if( !db->init.busy && !sqlite3LocateCollSeq(pParse, zColl) ){ + goto exit_create_index; + } + pIndex->azColl[i] = zColl; + requestedSortOrder = pListItem->sortOrder & sortOrderMask; + pIndex->aSortOrder[i] = (u8)requestedSortOrder; } - sqlite3ReleaseTempReg(pParse, regRow); - sqlite3ReleaseTempReg(pParse, regRowid); + sqlite3DefaultRowEst(pIndex); - /* LIMIT has been implemented by the pushOntoSorter() routine. - */ - assert( p->iLimit==0 ); + if( pTab==pParse->pNewTable ){ + /* This routine has been called to create an automatic index as a + ** result of a PRIMARY KEY or UNIQUE clause on a column definition, or + ** a PRIMARY KEY or UNIQUE clause following the column definitions. + ** i.e. one of: + ** + ** CREATE TABLE t(x PRIMARY KEY, y); + ** CREATE TABLE t(x, y, UNIQUE(x, y)); + ** + ** Either way, check to see if the table already has such an index. If + ** so, don't bother creating this one. This only applies to + ** automatically created indices. Users can do as they wish with + ** explicit indices. + ** + ** Two UNIQUE or PRIMARY KEY constraints are considered equivalent + ** (and thus suppressing the second one) even if they have different + ** sort orders. + ** + ** If there are different collating sequences or if the columns of + ** the constraint occur in different orders, then the constraints are + ** considered distinct and both result in separate indices. + */ + Index *pIdx; + for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){ + int k; + assert( pIdx->onError!=OE_None ); + assert( pIdx->autoIndex ); + assert( pIndex->onError!=OE_None ); - /* The bottom of the loop - */ - sqlite3VdbeResolveLabel(v, addrContinue); - sqlite3VdbeAddOp2(v, OP_Next, iTab, addr); - sqlite3VdbeResolveLabel(v, addrBreak); - if( eDest==SRT_Output || eDest==SRT_Coroutine ){ - sqlite3VdbeAddOp2(v, OP_Close, pseudoTab, 0); + if( pIdx->nColumn!=pIndex->nColumn ) continue; + for(k=0; knColumn; k++){ + const char *z1; + const char *z2; + if( pIdx->aiColumn[k]!=pIndex->aiColumn[k] ) break; + z1 = pIdx->azColl[k]; + z2 = pIndex->azColl[k]; + if( z1!=z2 && sqlite3StrICmp(z1, z2) ) break; + } + if( k==pIdx->nColumn ){ + if( pIdx->onError!=pIndex->onError ){ + /* This constraint creates the same index as a previous + ** constraint specified somewhere in the CREATE TABLE statement. + ** However the ON CONFLICT clauses are different. If both this + ** constraint and the previous equivalent constraint have explicit + ** ON CONFLICT clauses this is an error. Otherwise, use the + ** explicitly specified behaviour for the index. + */ + if( !(pIdx->onError==OE_Default || pIndex->onError==OE_Default) ){ + sqlite3ErrorMsg(pParse, + "conflicting ON CONFLICT clauses specified", 0); + } + if( pIdx->onError==OE_Default ){ + pIdx->onError = pIndex->onError; + } + } + goto exit_create_index; + } + } } -} -/* -** Return a pointer to a string containing the 'declaration type' of the -** expression pExpr. The string may be treated as static by the caller. -** -** The declaration type is the exact datatype definition extracted from the -** original CREATE TABLE statement if the expression is a column. The -** declaration type for a ROWID field is INTEGER. Exactly when an expression -** is considered a column can be complex in the presence of subqueries. The -** result-set expression in all of the following SELECT statements is -** considered a column by this function. -** -** SELECT col FROM tbl; -** SELECT (SELECT col FROM tbl; -** SELECT (SELECT col FROM tbl); -** SELECT abc FROM (SELECT col AS abc FROM tbl); -** -** The declaration type for any expression other than a column is NULL. -*/ -static const char *columnType( - NameContext *pNC, - Expr *pExpr, - const char **pzOriginDb, - const char **pzOriginTab, - const char **pzOriginCol -){ - char const *zType = 0; - char const *zOriginDb = 0; - char const *zOriginTab = 0; - char const *zOriginCol = 0; - int j; - if( NEVER(pExpr==0) || pNC->pSrcList==0 ) return 0; + /* Link the new Index structure to its table and to the other + ** in-memory database structures. + */ + if( db->init.busy ){ + Index *p; + assert( sqlite3SchemaMutexHeld(db, 0, pIndex->pSchema) ); + p = sqlite3HashInsert(&pIndex->pSchema->idxHash, + pIndex->zName, sqlite3Strlen30(pIndex->zName), + pIndex); + if( p ){ + assert( p==pIndex ); /* Malloc must have failed */ + db->mallocFailed = 1; + goto exit_create_index; + } + db->flags |= SQLITE_InternChanges; + if( pTblName!=0 ){ + pIndex->tnum = db->init.newTnum; + } + } - switch( pExpr->op ){ - case TK_AGG_COLUMN: - case TK_COLUMN: { - /* The expression is a column. Locate the table the column is being - ** extracted from in NameContext.pSrcList. This table may be real - ** database table or a subquery. - */ - Table *pTab = 0; /* Table structure column is extracted from */ - Select *pS = 0; /* Select the column is extracted from */ - int iCol = pExpr->iColumn; /* Index of column in pTab */ - testcase( pExpr->op==TK_AGG_COLUMN ); - testcase( pExpr->op==TK_COLUMN ); - while( pNC && !pTab ){ - SrcList *pTabList = pNC->pSrcList; - for(j=0;jnSrc && pTabList->a[j].iCursor!=pExpr->iTable;j++); - if( jnSrc ){ - pTab = pTabList->a[j].pTab; - pS = pTabList->a[j].pSelect; - }else{ - pNC = pNC->pNext; - } - } + /* If the db->init.busy is 0 then create the index on disk. This + ** involves writing the index into the master table and filling in the + ** index with the current table contents. + ** + ** The db->init.busy is 0 when the user first enters a CREATE INDEX + ** command. db->init.busy is 1 when a database is opened and + ** CREATE INDEX statements are read out of the master table. In + ** the latter case the index already exists on disk, which is why + ** we don't want to recreate it. + ** + ** If pTblName==0 it means this index is generated as a primary key + ** or UNIQUE constraint of a CREATE TABLE statement. Since the table + ** has just been created, it contains no data and the index initialization + ** step can be skipped. + */ + else{ /* if( db->init.busy==0 ) */ + Vdbe *v; + char *zStmt; + int iMem = ++pParse->nMem; - if( pTab==0 ){ - /* FIX ME: - ** This can occurs if you have something like "SELECT new.x;" inside - ** a trigger. In other words, if you reference the special "new" - ** table in the result set of a select. We do not have a good way - ** to find the actual table type, so call it "TEXT". This is really - ** something of a bug, but I do not know how to fix it. - ** - ** This code does not produce the correct answer - it just prevents - ** a segfault. See ticket #1229. - */ - zType = "TEXT"; - break; - } + v = sqlite3GetVdbe(pParse); + if( v==0 ) goto exit_create_index; - assert( pTab ); - if( pS ){ - /* The "table" is actually a sub-select or a view in the FROM clause - ** of the SELECT statement. Return the declaration type and origin - ** data for the result-set column of the sub-select. - */ - if( ALWAYS(iCol>=0 && iColpEList->nExpr) ){ - /* If iCol is less than zero, then the expression requests the - ** rowid of the sub-select or view. This expression is legal (see - ** test case misc2.2.2) - it always evaluates to NULL. - */ - NameContext sNC; - Expr *p = pS->pEList->a[iCol].pExpr; - sNC.pSrcList = pS->pSrc; - sNC.pNext = 0; - sNC.pParse = pNC->pParse; - zType = columnType(&sNC, p, &zOriginDb, &zOriginTab, &zOriginCol); - } - }else if( ALWAYS(pTab->pSchema) ){ - /* A real table */ - assert( !pS ); - if( iCol<0 ) iCol = pTab->iPKey; - assert( iCol==-1 || (iCol>=0 && iColnCol) ); - if( iCol<0 ){ - zType = "INTEGER"; - zOriginCol = "rowid"; - }else{ - zType = pTab->aCol[iCol].zType; - zOriginCol = pTab->aCol[iCol].zName; - } - zOriginTab = pTab->zName; - if( pNC->pParse ){ - int iDb = sqlite3SchemaToIndex(pNC->pParse->db, pTab->pSchema); - zOriginDb = pNC->pParse->db->aDb[iDb].zName; - } - } - break; + + /* Create the rootpage for the index + */ + sqlite3BeginWriteOperation(pParse, 1, iDb); + sqlite3VdbeAddOp2(v, OP_CreateIndex, iDb, iMem); + + /* Gather the complete text of the CREATE INDEX statement into + ** the zStmt variable + */ + if( pStart ){ + assert( pEnd!=0 ); + /* A named index with an explicit CREATE INDEX statement */ + zStmt = sqlite3MPrintf(db, "CREATE%s INDEX %.*s", + onError==OE_None ? "" : " UNIQUE", + (int)(pEnd->z - pName->z) + 1, + pName->z); + }else{ + /* An automatic index created by a PRIMARY KEY or UNIQUE constraint */ + /* zStmt = sqlite3MPrintf(""); */ + zStmt = 0; } -#ifndef SQLITE_OMIT_SUBQUERY - case TK_SELECT: { - /* The expression is a sub-select. Return the declaration type and - ** origin info for the single column in the result set of the SELECT - ** statement. - */ - NameContext sNC; - Select *pS = pExpr->x.pSelect; - Expr *p = pS->pEList->a[0].pExpr; - assert( ExprHasProperty(pExpr, EP_xIsSelect) ); - sNC.pSrcList = pS->pSrc; - sNC.pNext = pNC; - sNC.pParse = pNC->pParse; - zType = columnType(&sNC, p, &zOriginDb, &zOriginTab, &zOriginCol); - break; + + /* Add an entry in sqlite_master for this index + */ + sqlite3NestedParse(pParse, + "INSERT INTO %Q.%s VALUES('index',%Q,%Q,#%d,%Q);", + db->aDb[iDb].zName, SCHEMA_TABLE(iDb), + pIndex->zName, + pTab->zName, + iMem, + zStmt + ); + sqlite3DbFree(db, zStmt); + + /* Fill the index with data and reparse the schema. Code an OP_Expire + ** to invalidate all pre-compiled statements. + */ + if( pTblName ){ + sqlite3RefillIndex(pParse, pIndex, iMem); + sqlite3ChangeCookie(pParse, iDb); + sqlite3VdbeAddParseSchemaOp(v, iDb, + sqlite3MPrintf(db, "name='%q' AND type='index'", pIndex->zName)); + sqlite3VdbeAddOp1(v, OP_Expire, 0); } -#endif } - - if( pzOriginDb ){ - assert( pzOriginTab && pzOriginCol ); - *pzOriginDb = zOriginDb; - *pzOriginTab = zOriginTab; - *pzOriginCol = zOriginCol; + + /* When adding an index to the list of indices for a table, make + ** sure all indices labeled OE_Replace come after all those labeled + ** OE_Ignore. This is necessary for the correct constraint check + ** processing (in sqlite3GenerateConstraintChecks()) as part of + ** UPDATE and INSERT statements. + */ + if( db->init.busy || pTblName==0 ){ + if( onError!=OE_Replace || pTab->pIndex==0 + || pTab->pIndex->onError==OE_Replace){ + pIndex->pNext = pTab->pIndex; + pTab->pIndex = pIndex; + }else{ + Index *pOther = pTab->pIndex; + while( pOther->pNext && pOther->pNext->onError!=OE_Replace ){ + pOther = pOther->pNext; + } + pIndex->pNext = pOther->pNext; + pOther->pNext = pIndex; + } + pRet = pIndex; + pIndex = 0; } - return zType; + + /* Clean up before exiting */ +exit_create_index: + if( pIndex ){ + sqlite3DbFree(db, pIndex->zColAff); + sqlite3DbFree(db, pIndex); + } + sqlite3ExprListDelete(db, pList); + sqlite3SrcListDelete(db, pTblName); + sqlite3DbFree(db, zName); + return pRet; } /* -** Generate code that will tell the VDBE the declaration types of columns -** in the result set. +** Fill the Index.aiRowEst[] array with default information - information +** to be used when we have not run the ANALYZE command. +** +** aiRowEst[0] is suppose to contain the number of elements in the index. +** Since we do not know, guess 1 million. aiRowEst[1] is an estimate of the +** number of rows in the table that match any particular value of the +** first column of the index. aiRowEst[2] is an estimate of the number +** of rows that match any particular combiniation of the first 2 columns +** of the index. And so forth. It must always be the case that +* +** aiRowEst[N]<=aiRowEst[N-1] +** aiRowEst[N]>=1 +** +** Apart from that, we have little to go on besides intuition as to +** how aiRowEst[] should be initialized. The numbers generated here +** are based on typical values found in actual indices. */ -static void generateColumnTypes( - Parse *pParse, /* Parser context */ - SrcList *pTabList, /* List of tables */ - ExprList *pEList /* Expressions defining the result set */ -){ -#ifndef SQLITE_OMIT_DECLTYPE - Vdbe *v = pParse->pVdbe; +SQLITE_PRIVATE void sqlite3DefaultRowEst(Index *pIdx){ + tRowcnt *a = pIdx->aiRowEst; int i; - NameContext sNC; - sNC.pSrcList = pTabList; - sNC.pParse = pParse; - for(i=0; inExpr; i++){ - Expr *p = pEList->a[i].pExpr; - const char *zType; -#ifdef SQLITE_ENABLE_COLUMN_METADATA - const char *zOrigDb = 0; - const char *zOrigTab = 0; - const char *zOrigCol = 0; - zType = columnType(&sNC, p, &zOrigDb, &zOrigTab, &zOrigCol); - - /* The vdbe must make its own copy of the column-type and other - ** column specific strings, in case the schema is reset before this - ** virtual machine is deleted. - */ - sqlite3VdbeSetColName(v, i, COLNAME_DATABASE, zOrigDb, SQLITE_TRANSIENT); - sqlite3VdbeSetColName(v, i, COLNAME_TABLE, zOrigTab, SQLITE_TRANSIENT); - sqlite3VdbeSetColName(v, i, COLNAME_COLUMN, zOrigCol, SQLITE_TRANSIENT); -#else - zType = columnType(&sNC, p, 0, 0, 0); -#endif - sqlite3VdbeSetColName(v, i, COLNAME_DECLTYPE, zType, SQLITE_TRANSIENT); + tRowcnt n; + assert( a!=0 ); + a[0] = pIdx->pTable->nRowEst; + if( a[0]<10 ) a[0] = 10; + n = 10; + for(i=1; i<=pIdx->nColumn; i++){ + a[i] = n; + if( n>5 ) n--; + } + if( pIdx->onError!=OE_None ){ + a[pIdx->nColumn] = 1; } -#endif /* SQLITE_OMIT_DECLTYPE */ } /* -** Generate code that will tell the VDBE the names of columns -** in the result set. This information is used to provide the -** azCol[] values in the callback. +** This routine will drop an existing named index. This routine +** implements the DROP INDEX statement. */ -static void generateColumnNames( - Parse *pParse, /* Parser context */ - SrcList *pTabList, /* List of tables */ - ExprList *pEList /* Expressions defining the result set */ -){ - Vdbe *v = pParse->pVdbe; - int i, j; +SQLITE_PRIVATE void sqlite3DropIndex(Parse *pParse, SrcList *pName, int ifExists){ + Index *pIndex; + Vdbe *v; sqlite3 *db = pParse->db; - int fullNames, shortNames; + int iDb; -#ifndef SQLITE_OMIT_EXPLAIN - /* If this is an EXPLAIN, skip this step */ - if( pParse->explain ){ - return; + assert( pParse->nErr==0 ); /* Never called with prior errors */ + if( db->mallocFailed ){ + goto exit_drop_index; } -#endif - - if( pParse->colNamesSet || NEVER(v==0) || db->mallocFailed ) return; - pParse->colNamesSet = 1; - fullNames = (db->flags & SQLITE_FullColNames)!=0; - shortNames = (db->flags & SQLITE_ShortColNames)!=0; - sqlite3VdbeSetNumCols(v, pEList->nExpr); - for(i=0; inExpr; i++){ - Expr *p; - p = pEList->a[i].pExpr; - if( NEVER(p==0) ) continue; - if( pEList->a[i].zName ){ - char *zName = pEList->a[i].zName; - sqlite3VdbeSetColName(v, i, COLNAME_NAME, zName, SQLITE_TRANSIENT); - }else if( (p->op==TK_COLUMN || p->op==TK_AGG_COLUMN) && pTabList ){ - Table *pTab; - char *zCol; - int iCol = p->iColumn; - for(j=0; ALWAYS(jnSrc); j++){ - if( pTabList->a[j].iCursor==p->iTable ) break; - } - assert( jnSrc ); - pTab = pTabList->a[j].pTab; - if( iCol<0 ) iCol = pTab->iPKey; - assert( iCol==-1 || (iCol>=0 && iColnCol) ); - if( iCol<0 ){ - zCol = "rowid"; - }else{ - zCol = pTab->aCol[iCol].zName; - } - if( !shortNames && !fullNames ){ - sqlite3VdbeSetColName(v, i, COLNAME_NAME, - sqlite3DbStrDup(db, pEList->a[i].zSpan), SQLITE_DYNAMIC); - }else if( fullNames ){ - char *zName = 0; - zName = sqlite3MPrintf(db, "%s.%s", pTab->zName, zCol); - sqlite3VdbeSetColName(v, i, COLNAME_NAME, zName, SQLITE_DYNAMIC); - }else{ - sqlite3VdbeSetColName(v, i, COLNAME_NAME, zCol, SQLITE_TRANSIENT); - } + assert( pName->nSrc==1 ); + if( SQLITE_OK!=sqlite3ReadSchema(pParse) ){ + goto exit_drop_index; + } + pIndex = sqlite3FindIndex(db, pName->a[0].zName, pName->a[0].zDatabase); + if( pIndex==0 ){ + if( !ifExists ){ + sqlite3ErrorMsg(pParse, "no such index: %S", pName, 0); }else{ - sqlite3VdbeSetColName(v, i, COLNAME_NAME, - sqlite3DbStrDup(db, pEList->a[i].zSpan), SQLITE_DYNAMIC); + sqlite3CodeVerifyNamedSchema(pParse, pName->a[0].zDatabase); + } + pParse->checkSchema = 1; + goto exit_drop_index; + } + if( pIndex->autoIndex ){ + sqlite3ErrorMsg(pParse, "index associated with UNIQUE " + "or PRIMARY KEY constraint cannot be dropped", 0); + goto exit_drop_index; + } + iDb = sqlite3SchemaToIndex(db, pIndex->pSchema); +#ifndef SQLITE_OMIT_AUTHORIZATION + { + int code = SQLITE_DROP_INDEX; + Table *pTab = pIndex->pTable; + const char *zDb = db->aDb[iDb].zName; + const char *zTab = SCHEMA_TABLE(iDb); + if( sqlite3AuthCheck(pParse, SQLITE_DELETE, zTab, 0, zDb) ){ + goto exit_drop_index; + } + if( !OMIT_TEMPDB && iDb ) code = SQLITE_DROP_TEMP_INDEX; + if( sqlite3AuthCheck(pParse, code, pIndex->zName, pTab->zName, zDb) ){ + goto exit_drop_index; } } - generateColumnTypes(pParse, pTabList, pEList); -} +#endif -#ifndef SQLITE_OMIT_COMPOUND_SELECT -/* -** Name of the connection operator, used for error messages. -*/ -static const char *selectOpName(int id){ - char *z; - switch( id ){ - case TK_ALL: z = "UNION ALL"; break; - case TK_INTERSECT: z = "INTERSECT"; break; - case TK_EXCEPT: z = "EXCEPT"; break; - default: z = "UNION"; break; + /* Generate code to remove the index and from the master table */ + v = sqlite3GetVdbe(pParse); + if( v ){ + sqlite3BeginWriteOperation(pParse, 1, iDb); + sqlite3NestedParse(pParse, + "DELETE FROM %Q.%s WHERE name=%Q AND type='index'", + db->aDb[iDb].zName, SCHEMA_TABLE(iDb), pIndex->zName + ); + sqlite3ClearStatTables(pParse, iDb, "idx", pIndex->zName); + sqlite3ChangeCookie(pParse, iDb); + destroyRootPage(pParse, pIndex->tnum, iDb); + sqlite3VdbeAddOp4(v, OP_DropIndex, iDb, 0, 0, pIndex->zName, 0); } - return z; + +exit_drop_index: + sqlite3SrcListDelete(db, pName); } -#endif /* SQLITE_OMIT_COMPOUND_SELECT */ /* -** Given a an expression list (which is really the list of expressions -** that form the result set of a SELECT statement) compute appropriate -** column names for a table that would hold the expression list. +** pArray is a pointer to an array of objects. Each object in the +** array is szEntry bytes in size. This routine uses sqlite3DbRealloc() +** to extend the array so that there is space for a new object at the end. ** -** All column names will be unique. +** When this function is called, *pnEntry contains the current size of +** the array (in entries - so the allocation is ((*pnEntry) * szEntry) bytes +** in total). ** -** Only the column names are computed. Column.zType, Column.zColl, -** and other fields of Column are zeroed. +** If the realloc() is successful (i.e. if no OOM condition occurs), the +** space allocated for the new object is zeroed, *pnEntry updated to +** reflect the new size of the array and a pointer to the new allocation +** returned. *pIdx is set to the index of the new array entry in this case. ** -** Return SQLITE_OK on success. If a memory allocation error occurs, -** store NULL in *paCol and 0 in *pnCol and return SQLITE_NOMEM. +** Otherwise, if the realloc() fails, *pIdx is set to -1, *pnEntry remains +** unchanged and a copy of pArray returned. */ -static int selectColumnsFromExprList( - Parse *pParse, /* Parsing context */ - ExprList *pEList, /* Expr list from which to derive column names */ - int *pnCol, /* Write the number of columns here */ - Column **paCol /* Write the new column list here */ +SQLITE_PRIVATE void *sqlite3ArrayAllocate( + sqlite3 *db, /* Connection to notify of malloc failures */ + void *pArray, /* Array of objects. Might be reallocated */ + int szEntry, /* Size of each object in the array */ + int *pnEntry, /* Number of objects currently in use */ + int *pIdx /* Write the index of a new slot here */ ){ - sqlite3 *db = pParse->db; /* Database connection */ - int i, j; /* Loop counters */ - int cnt; /* Index added to make the name unique */ - Column *aCol, *pCol; /* For looping over result columns */ - int nCol; /* Number of columns in the result set */ - Expr *p; /* Expression for a single result column */ - char *zName; /* Column name */ - int nName; /* Size of name in zName[] */ - - *pnCol = nCol = pEList->nExpr; - aCol = *paCol = sqlite3DbMallocZero(db, sizeof(aCol[0])*nCol); - if( aCol==0 ) return SQLITE_NOMEM; - for(i=0, pCol=aCol; ia[i].pExpr; - assert( p->pRight==0 || ExprHasProperty(p->pRight, EP_IntValue) - || p->pRight->u.zToken==0 || p->pRight->u.zToken[0]!=0 ); - if( (zName = pEList->a[i].zName)!=0 ){ - /* If the column contains an "AS " phrase, use as the name */ - zName = sqlite3DbStrDup(db, zName); - }else{ - Expr *pColExpr = p; /* The expression that is the result column name */ - Table *pTab; /* Table associated with this expression */ - while( pColExpr->op==TK_DOT ) pColExpr = pColExpr->pRight; - if( pColExpr->op==TK_COLUMN && ALWAYS(pColExpr->pTab!=0) ){ - /* For columns use the column name name */ - int iCol = pColExpr->iColumn; - pTab = pColExpr->pTab; - if( iCol<0 ) iCol = pTab->iPKey; - zName = sqlite3MPrintf(db, "%s", - iCol>=0 ? pTab->aCol[iCol].zName : "rowid"); - }else if( pColExpr->op==TK_ID ){ - assert( !ExprHasProperty(pColExpr, EP_IntValue) ); - zName = sqlite3MPrintf(db, "%s", pColExpr->u.zToken); - }else{ - /* Use the original text of the column expression as its name */ - zName = sqlite3MPrintf(db, "%s", pEList->a[i].zSpan); - } - } - if( db->mallocFailed ){ - sqlite3DbFree(db, zName); - break; - } - - /* Make sure the column name is unique. If the name is not unique, - ** append a integer to the name so that it becomes unique. - */ - nName = sqlite3Strlen30(zName); - for(j=cnt=0; jzName = zName; - } - if( db->mallocFailed ){ - for(j=0; jdb; - NameContext sNC; - Column *pCol; - CollSeq *pColl; +SQLITE_PRIVATE IdList *sqlite3IdListAppend(sqlite3 *db, IdList *pList, Token *pToken){ int i; - Expr *p; - struct ExprList_item *a; - - assert( pSelect!=0 ); - assert( (pSelect->selFlags & SF_Resolved)!=0 ); - assert( nCol==pSelect->pEList->nExpr || db->mallocFailed ); - if( db->mallocFailed ) return; - memset(&sNC, 0, sizeof(sNC)); - sNC.pSrcList = pSelect->pSrc; - a = pSelect->pEList->a; - for(i=0, pCol=aCol; izType = sqlite3DbStrDup(db, columnType(&sNC, p, 0, 0, 0)); - pCol->affinity = sqlite3ExprAffinity(p); - if( pCol->affinity==0 ) pCol->affinity = SQLITE_AFF_NONE; - pColl = sqlite3ExprCollSeq(pParse, p); - if( pColl ){ - pCol->zColl = sqlite3DbStrDup(db, pColl->zName); - } + if( pList==0 ){ + pList = sqlite3DbMallocZero(db, sizeof(IdList) ); + if( pList==0 ) return 0; + } + pList->a = sqlite3ArrayAllocate( + db, + pList->a, + sizeof(pList->a[0]), + &pList->nId, + &i + ); + if( i<0 ){ + sqlite3IdListDelete(db, pList); + return 0; } + pList->a[i].zName = sqlite3NameFromToken(db, pToken); + return pList; } /* -** Given a SELECT statement, generate a Table structure that describes -** the result set of that SELECT. +** Delete an IdList. */ -SQLITE_PRIVATE Table *sqlite3ResultSetOfSelect(Parse *pParse, Select *pSelect){ - Table *pTab; - sqlite3 *db = pParse->db; - int savedFlags; - - savedFlags = db->flags; - db->flags &= ~SQLITE_FullColNames; - db->flags |= SQLITE_ShortColNames; - sqlite3SelectPrep(pParse, pSelect, 0); - if( pParse->nErr ) return 0; - while( pSelect->pPrior ) pSelect = pSelect->pPrior; - db->flags = savedFlags; - pTab = sqlite3DbMallocZero(db, sizeof(Table) ); - if( pTab==0 ){ - return 0; - } - /* The sqlite3ResultSetOfSelect() is only used n contexts where lookaside - ** is disabled, so we might as well hard-code pTab->dbMem to NULL. */ - assert( db->lookaside.bEnabled==0 ); - pTab->dbMem = 0; - pTab->nRef = 1; - pTab->zName = 0; - selectColumnsFromExprList(pParse, pSelect->pEList, &pTab->nCol, &pTab->aCol); - selectAddColumnTypeAndCollation(pParse, pTab->nCol, pTab->aCol, pSelect); - pTab->iPKey = -1; - if( db->mallocFailed ){ - sqlite3DeleteTable(pTab); - return 0; +SQLITE_PRIVATE void sqlite3IdListDelete(sqlite3 *db, IdList *pList){ + int i; + if( pList==0 ) return; + for(i=0; inId; i++){ + sqlite3DbFree(db, pList->a[i].zName); } - return pTab; + sqlite3DbFree(db, pList->a); + sqlite3DbFree(db, pList); } /* -** Get a VDBE for the given parser context. Create a new one if necessary. -** If an error occurs, return NULL and leave a message in pParse. +** Return the index in pList of the identifier named zId. Return -1 +** if not found. */ -SQLITE_PRIVATE Vdbe *sqlite3GetVdbe(Parse *pParse){ - Vdbe *v = pParse->pVdbe; - if( v==0 ){ - v = pParse->pVdbe = sqlite3VdbeCreate(pParse->db); -#ifndef SQLITE_OMIT_TRACE - if( v ){ - sqlite3VdbeAddOp0(v, OP_Trace); - } -#endif +SQLITE_PRIVATE int sqlite3IdListIndex(IdList *pList, const char *zName){ + int i; + if( pList==0 ) return -1; + for(i=0; inId; i++){ + if( sqlite3StrICmp(pList->a[i].zName, zName)==0 ) return i; } - return v; + return -1; } - /* -** Compute the iLimit and iOffset fields of the SELECT based on the -** pLimit and pOffset expressions. pLimit and pOffset hold the expressions -** that appear in the original SQL statement after the LIMIT and OFFSET -** keywords. Or NULL if those keywords are omitted. iLimit and iOffset -** are the integer memory register numbers for counters used to compute -** the limit and offset. If there is no limit and/or offset, then -** iLimit and iOffset are negative. +** Expand the space allocated for the given SrcList object by +** creating nExtra new slots beginning at iStart. iStart is zero based. +** New slots are zeroed. ** -** This routine changes the values of iLimit and iOffset only if -** a limit or offset is defined by pLimit and pOffset. iLimit and -** iOffset should have been preset to appropriate default values -** (usually but not always -1) prior to calling this routine. -** Only if pLimit!=0 or pOffset!=0 do the limit registers get -** redefined. The UNION ALL operator uses this property to force -** the reuse of the same limit and offset registers across multiple -** SELECT statements. +** For example, suppose a SrcList initially contains two entries: A,B. +** To append 3 new entries onto the end, do this: +** +** sqlite3SrcListEnlarge(db, pSrclist, 3, 2); +** +** After the call above it would contain: A, B, nil, nil, nil. +** If the iStart argument had been 1 instead of 2, then the result +** would have been: A, nil, nil, nil, B. To prepend the new slots, +** the iStart value would be 0. The result then would +** be: nil, nil, nil, A, B. +** +** If a memory allocation fails the SrcList is unchanged. The +** db->mallocFailed flag will be set to true. */ -static void computeLimitRegisters(Parse *pParse, Select *p, int iBreak){ - Vdbe *v = 0; - int iLimit = 0; - int iOffset; - int addr1; - if( p->iLimit ) return; +SQLITE_PRIVATE SrcList *sqlite3SrcListEnlarge( + sqlite3 *db, /* Database connection to notify of OOM errors */ + SrcList *pSrc, /* The SrcList to be enlarged */ + int nExtra, /* Number of new slots to add to pSrc->a[] */ + int iStart /* Index in pSrc->a[] of first new slot */ +){ + int i; - /* - ** "LIMIT -1" always shows all rows. There is some - ** contraversy about what the correct behavior should be. - ** The current implementation interprets "LIMIT 0" to mean - ** no rows. - */ - sqlite3ExprCacheClear(pParse); - assert( p->pOffset==0 || p->pLimit!=0 ); - if( p->pLimit ){ - p->iLimit = iLimit = ++pParse->nMem; - v = sqlite3GetVdbe(pParse); - if( NEVER(v==0) ) return; /* VDBE should have already been allocated */ - sqlite3ExprCode(pParse, p->pLimit, iLimit); - sqlite3VdbeAddOp1(v, OP_MustBeInt, iLimit); - VdbeComment((v, "LIMIT counter")); - sqlite3VdbeAddOp2(v, OP_IfZero, iLimit, iBreak); - if( p->pOffset ){ - p->iOffset = iOffset = ++pParse->nMem; - pParse->nMem++; /* Allocate an extra register for limit+offset */ - sqlite3ExprCode(pParse, p->pOffset, iOffset); - sqlite3VdbeAddOp1(v, OP_MustBeInt, iOffset); - VdbeComment((v, "OFFSET counter")); - addr1 = sqlite3VdbeAddOp1(v, OP_IfPos, iOffset); - sqlite3VdbeAddOp2(v, OP_Integer, 0, iOffset); - sqlite3VdbeJumpHere(v, addr1); - sqlite3VdbeAddOp3(v, OP_Add, iLimit, iOffset, iOffset+1); - VdbeComment((v, "LIMIT+OFFSET")); - addr1 = sqlite3VdbeAddOp1(v, OP_IfPos, iLimit); - sqlite3VdbeAddOp2(v, OP_Integer, -1, iOffset+1); - sqlite3VdbeJumpHere(v, addr1); + /* Sanity checking on calling parameters */ + assert( iStart>=0 ); + assert( nExtra>=1 ); + assert( pSrc!=0 ); + assert( iStart<=pSrc->nSrc ); + + /* Allocate additional space if needed */ + if( pSrc->nSrc+nExtra>pSrc->nAlloc ){ + SrcList *pNew; + int nAlloc = pSrc->nSrc+nExtra; + int nGot; + pNew = sqlite3DbRealloc(db, pSrc, + sizeof(*pSrc) + (nAlloc-1)*sizeof(pSrc->a[0]) ); + if( pNew==0 ){ + assert( db->mallocFailed ); + return pSrc; } + pSrc = pNew; + nGot = (sqlite3DbMallocSize(db, pNew) - sizeof(*pSrc))/sizeof(pSrc->a[0])+1; + pSrc->nAlloc = (u16)nGot; } -} -#ifndef SQLITE_OMIT_COMPOUND_SELECT -/* -** Return the appropriate collating sequence for the iCol-th column of -** the result set for the compound-select statement "p". Return NULL if -** the column has no default collating sequence. -** -** The collating sequence for the compound select is taken from the -** left-most term of the select that has a collating sequence. -*/ -static CollSeq *multiSelectCollSeq(Parse *pParse, Select *p, int iCol){ - CollSeq *pRet; - if( p->pPrior ){ - pRet = multiSelectCollSeq(pParse, p->pPrior, iCol); - }else{ - pRet = 0; + /* Move existing slots that come after the newly inserted slots + ** out of the way */ + for(i=pSrc->nSrc-1; i>=iStart; i--){ + pSrc->a[i+nExtra] = pSrc->a[i]; } - assert( iCol>=0 ); - if( pRet==0 && iColpEList->nExpr ){ - pRet = sqlite3ExprCollSeq(pParse, p->pEList->a[iCol].pExpr); + pSrc->nSrc += (i16)nExtra; + + /* Zero the newly allocated slots */ + memset(&pSrc->a[iStart], 0, sizeof(pSrc->a[0])*nExtra); + for(i=iStart; ia[i].iCursor = -1; } - return pRet; -} -#endif /* SQLITE_OMIT_COMPOUND_SELECT */ -/* Forward reference */ -static int multiSelectOrderBy( - Parse *pParse, /* Parsing context */ - Select *p, /* The right-most of SELECTs to be coded */ - SelectDest *pDest /* What to do with query results */ -); + /* Return a pointer to the enlarged SrcList */ + return pSrc; +} -#ifndef SQLITE_OMIT_COMPOUND_SELECT /* -** This routine is called to process a compound query form from -** two or more separate queries using UNION, UNION ALL, EXCEPT, or -** INTERSECT +** Append a new table name to the given SrcList. Create a new SrcList if +** need be. A new entry is created in the SrcList even if pTable is NULL. ** -** "p" points to the right-most of the two queries. the query on the -** left is p->pPrior. The left query could also be a compound query -** in which case this routine will be called recursively. +** A SrcList is returned, or NULL if there is an OOM error. The returned +** SrcList might be the same as the SrcList that was input or it might be +** a new one. If an OOM error does occurs, then the prior value of pList +** that is input to this routine is automatically freed. ** -** The results of the total query are to be written into a destination -** of type eDest with parameter iParm. +** If pDatabase is not null, it means that the table has an optional +** database name prefix. Like this: "database.table". The pDatabase +** points to the table name and the pTable points to the database name. +** The SrcList.a[].zName field is filled with the table name which might +** come from pTable (if pDatabase is NULL) or from pDatabase. +** SrcList.a[].zDatabase is filled with the database name from pTable, +** or with NULL if no database is specified. ** -** Example 1: Consider a three-way compound SQL statement. +** In other words, if call like this: ** -** SELECT a FROM t1 UNION SELECT b FROM t2 UNION SELECT c FROM t3 +** sqlite3SrcListAppend(D,A,B,0); ** -** This statement is parsed up as follows: +** Then B is a table name and the database name is unspecified. If called +** like this: ** -** SELECT c FROM t3 -** | -** `-----> SELECT b FROM t2 -** | -** `------> SELECT a FROM t1 +** sqlite3SrcListAppend(D,A,B,C); ** -** The arrows in the diagram above represent the Select.pPrior pointer. -** So if this routine is called with p equal to the t3 query, then -** pPrior will be the t2 query. p->op will be TK_UNION in this case. +** Then C is the table name and B is the database name. If C is defined +** then so is B. In other words, we never have a case where: ** -** Notice that because of the way SQLite parses compound SELECTs, the -** individual selects always group from left to right. +** sqlite3SrcListAppend(D,A,0,C); +** +** Both pTable and pDatabase are assumed to be quoted. They are dequoted +** before being added to the SrcList. */ -static int multiSelect( - Parse *pParse, /* Parsing context */ - Select *p, /* The right-most of SELECTs to be coded */ - SelectDest *pDest /* What to do with query results */ +SQLITE_PRIVATE SrcList *sqlite3SrcListAppend( + sqlite3 *db, /* Connection to notify of malloc failures */ + SrcList *pList, /* Append to this SrcList. NULL creates a new SrcList */ + Token *pTable, /* Table to append */ + Token *pDatabase /* Database of the table */ ){ - int rc = SQLITE_OK; /* Success code from a subroutine */ - Select *pPrior; /* Another SELECT immediately to our left */ - Vdbe *v; /* Generate code to this VDBE */ - SelectDest dest; /* Alternative data destination */ - Select *pDelete = 0; /* Chain of simple selects to delete */ - sqlite3 *db; /* Database connection */ - - /* Make sure there is no ORDER BY or LIMIT clause on prior SELECTs. Only - ** the last (right-most) SELECT in the series may have an ORDER BY or LIMIT. - */ - assert( p && p->pPrior ); /* Calling function guarantees this much */ - db = pParse->db; - pPrior = p->pPrior; - assert( pPrior->pRightmost!=pPrior ); - assert( pPrior->pRightmost==p->pRightmost ); - dest = *pDest; - if( pPrior->pOrderBy ){ - sqlite3ErrorMsg(pParse,"ORDER BY clause should come after %s not before", - selectOpName(p->op)); - rc = 1; - goto multi_select_end; + struct SrcList_item *pItem; + assert( pDatabase==0 || pTable!=0 ); /* Cannot have C without B */ + if( pList==0 ){ + pList = sqlite3DbMallocZero(db, sizeof(SrcList) ); + if( pList==0 ) return 0; + pList->nAlloc = 1; } - if( pPrior->pLimit ){ - sqlite3ErrorMsg(pParse,"LIMIT clause should come after %s not before", - selectOpName(p->op)); - rc = 1; - goto multi_select_end; + pList = sqlite3SrcListEnlarge(db, pList, 1, pList->nSrc); + if( db->mallocFailed ){ + sqlite3SrcListDelete(db, pList); + return 0; + } + pItem = &pList->a[pList->nSrc-1]; + if( pDatabase && pDatabase->z==0 ){ + pDatabase = 0; + } + if( pDatabase ){ + Token *pTemp = pDatabase; + pDatabase = pTable; + pTable = pTemp; } + pItem->zName = sqlite3NameFromToken(db, pTable); + pItem->zDatabase = sqlite3NameFromToken(db, pDatabase); + return pList; +} - v = sqlite3GetVdbe(pParse); - assert( v!=0 ); /* The VDBE already created by calling function */ +/* +** Assign VdbeCursor index numbers to all tables in a SrcList +*/ +SQLITE_PRIVATE void sqlite3SrcListAssignCursors(Parse *pParse, SrcList *pList){ + int i; + struct SrcList_item *pItem; + assert(pList || pParse->db->mallocFailed ); + if( pList ){ + for(i=0, pItem=pList->a; inSrc; i++, pItem++){ + if( pItem->iCursor>=0 ) break; + pItem->iCursor = pParse->nTab++; + if( pItem->pSelect ){ + sqlite3SrcListAssignCursors(pParse, pItem->pSelect->pSrc); + } + } + } +} - /* Create the destination temporary table if necessary - */ - if( dest.eDest==SRT_EphemTab ){ - assert( p->pEList ); - sqlite3VdbeAddOp2(v, OP_OpenEphemeral, dest.iParm, p->pEList->nExpr); - dest.eDest = SRT_Table; +/* +** Delete an entire SrcList including all its substructure. +*/ +SQLITE_PRIVATE void sqlite3SrcListDelete(sqlite3 *db, SrcList *pList){ + int i; + struct SrcList_item *pItem; + if( pList==0 ) return; + for(pItem=pList->a, i=0; inSrc; i++, pItem++){ + sqlite3DbFree(db, pItem->zDatabase); + sqlite3DbFree(db, pItem->zName); + sqlite3DbFree(db, pItem->zAlias); + sqlite3DbFree(db, pItem->zIndex); + sqlite3DeleteTable(db, pItem->pTab); + sqlite3SelectDelete(db, pItem->pSelect); + sqlite3ExprDelete(db, pItem->pOn); + sqlite3IdListDelete(db, pItem->pUsing); } + sqlite3DbFree(db, pList); +} - /* Make sure all SELECTs in the statement have the same number of elements - ** in their result sets. - */ - assert( p->pEList && pPrior->pEList ); - if( p->pEList->nExpr!=pPrior->pEList->nExpr ){ - sqlite3ErrorMsg(pParse, "SELECTs to the left and right of %s" - " do not have the same number of result columns", selectOpName(p->op)); - rc = 1; - goto multi_select_end; +/* +** This routine is called by the parser to add a new term to the +** end of a growing FROM clause. The "p" parameter is the part of +** the FROM clause that has already been constructed. "p" is NULL +** if this is the first term of the FROM clause. pTable and pDatabase +** are the name of the table and database named in the FROM clause term. +** pDatabase is NULL if the database name qualifier is missing - the +** usual case. If the term has a alias, then pAlias points to the +** alias token. If the term is a subquery, then pSubquery is the +** SELECT statement that the subquery encodes. The pTable and +** pDatabase parameters are NULL for subqueries. The pOn and pUsing +** parameters are the content of the ON and USING clauses. +** +** Return a new SrcList which encodes is the FROM with the new +** term added. +*/ +SQLITE_PRIVATE SrcList *sqlite3SrcListAppendFromTerm( + Parse *pParse, /* Parsing context */ + SrcList *p, /* The left part of the FROM clause already seen */ + Token *pTable, /* Name of the table to add to the FROM clause */ + Token *pDatabase, /* Name of the database containing pTable */ + Token *pAlias, /* The right-hand side of the AS subexpression */ + Select *pSubquery, /* A subquery used in place of a table name */ + Expr *pOn, /* The ON clause of a join */ + IdList *pUsing /* The USING clause of a join */ +){ + struct SrcList_item *pItem; + sqlite3 *db = pParse->db; + if( !p && (pOn || pUsing) ){ + sqlite3ErrorMsg(pParse, "a JOIN clause is required before %s", + (pOn ? "ON" : "USING") + ); + goto append_from_error; + } + p = sqlite3SrcListAppend(db, p, pTable, pDatabase); + if( p==0 || NEVER(p->nSrc==0) ){ + goto append_from_error; + } + pItem = &p->a[p->nSrc-1]; + assert( pAlias!=0 ); + if( pAlias->n ){ + pItem->zAlias = sqlite3NameFromToken(db, pAlias); } + pItem->pSelect = pSubquery; + pItem->pOn = pOn; + pItem->pUsing = pUsing; + return p; - /* Compound SELECTs that have an ORDER BY clause are handled separately. - */ - if( p->pOrderBy ){ - return multiSelectOrderBy(pParse, p, pDest); + append_from_error: + assert( p==0 ); + sqlite3ExprDelete(db, pOn); + sqlite3IdListDelete(db, pUsing); + sqlite3SelectDelete(db, pSubquery); + return 0; +} + +/* +** Add an INDEXED BY or NOT INDEXED clause to the most recently added +** element of the source-list passed as the second argument. +*/ +SQLITE_PRIVATE void sqlite3SrcListIndexedBy(Parse *pParse, SrcList *p, Token *pIndexedBy){ + assert( pIndexedBy!=0 ); + if( p && ALWAYS(p->nSrc>0) ){ + struct SrcList_item *pItem = &p->a[p->nSrc-1]; + assert( pItem->notIndexed==0 && pItem->zIndex==0 ); + if( pIndexedBy->n==1 && !pIndexedBy->z ){ + /* A "NOT INDEXED" clause was supplied. See parse.y + ** construct "indexed_opt" for details. */ + pItem->notIndexed = 1; + }else{ + pItem->zIndex = sqlite3NameFromToken(pParse->db, pIndexedBy); + } } +} - /* Generate code for the left and right SELECT statements. - */ - switch( p->op ){ - case TK_ALL: { - int addr = 0; - assert( !pPrior->pLimit ); - pPrior->pLimit = p->pLimit; - pPrior->pOffset = p->pOffset; - rc = sqlite3Select(pParse, pPrior, &dest); - p->pLimit = 0; - p->pOffset = 0; - if( rc ){ - goto multi_select_end; - } - p->pPrior = 0; - p->iLimit = pPrior->iLimit; - p->iOffset = pPrior->iOffset; - if( p->iLimit ){ - addr = sqlite3VdbeAddOp1(v, OP_IfZero, p->iLimit); - VdbeComment((v, "Jump ahead if LIMIT reached")); - } - rc = sqlite3Select(pParse, p, &dest); - testcase( rc!=SQLITE_OK ); - pDelete = p->pPrior; - p->pPrior = pPrior; - if( addr ){ - sqlite3VdbeJumpHere(v, addr); - } - break; +/* +** When building up a FROM clause in the parser, the join operator +** is initially attached to the left operand. But the code generator +** expects the join operator to be on the right operand. This routine +** Shifts all join operators from left to right for an entire FROM +** clause. +** +** Example: Suppose the join is like this: +** +** A natural cross join B +** +** The operator is "natural cross join". The A and B operands are stored +** in p->a[0] and p->a[1], respectively. The parser initially stores the +** operator with A. This routine shifts that operator over to B. +*/ +SQLITE_PRIVATE void sqlite3SrcListShiftJoinType(SrcList *p){ + if( p ){ + int i; + assert( p->a || p->nSrc==0 ); + for(i=p->nSrc-1; i>0; i--){ + p->a[i].jointype = p->a[i-1].jointype; } - case TK_EXCEPT: - case TK_UNION: { - int unionTab; /* Cursor number of the temporary table holding result */ - u8 op = 0; /* One of the SRT_ operations to apply to self */ - int priorOp; /* The SRT_ operation to apply to prior selects */ - Expr *pLimit, *pOffset; /* Saved values of p->nLimit and p->nOffset */ - int addr; - SelectDest uniondest; + p->a[0].jointype = 0; + } +} - testcase( p->op==TK_EXCEPT ); - testcase( p->op==TK_UNION ); - priorOp = SRT_Union; - if( dest.eDest==priorOp && ALWAYS(!p->pLimit &&!p->pOffset) ){ - /* We can reuse a temporary table generated by a SELECT to our - ** right. - */ - assert( p->pRightmost!=p ); /* Can only happen for leftward elements - ** of a 3-way or more compound */ - assert( p->pLimit==0 ); /* Not allowed on leftward elements */ - assert( p->pOffset==0 ); /* Not allowed on leftward elements */ - unionTab = dest.iParm; - }else{ - /* We will need to create our own temporary table to hold the - ** intermediate results. - */ - unionTab = pParse->nTab++; - assert( p->pOrderBy==0 ); - addr = sqlite3VdbeAddOp2(v, OP_OpenEphemeral, unionTab, 0); - assert( p->addrOpenEphm[0] == -1 ); - p->addrOpenEphm[0] = addr; - p->pRightmost->selFlags |= SF_UsesEphemeral; - assert( p->pEList ); - } - - /* Code the SELECT statements to our left - */ - assert( !pPrior->pOrderBy ); - sqlite3SelectDestInit(&uniondest, priorOp, unionTab); - rc = sqlite3Select(pParse, pPrior, &uniondest); - if( rc ){ - goto multi_select_end; - } - - /* Code the current SELECT statement - */ - if( p->op==TK_EXCEPT ){ - op = SRT_Except; - }else{ - assert( p->op==TK_UNION ); - op = SRT_Union; - } - p->pPrior = 0; - pLimit = p->pLimit; - p->pLimit = 0; - pOffset = p->pOffset; - p->pOffset = 0; - uniondest.eDest = op; - rc = sqlite3Select(pParse, p, &uniondest); - testcase( rc!=SQLITE_OK ); - /* Query flattening in sqlite3Select() might refill p->pOrderBy. - ** Be sure to delete p->pOrderBy, therefore, to avoid a memory leak. */ - sqlite3ExprListDelete(db, p->pOrderBy); - pDelete = p->pPrior; - p->pPrior = pPrior; - p->pOrderBy = 0; - sqlite3ExprDelete(db, p->pLimit); - p->pLimit = pLimit; - p->pOffset = pOffset; - p->iLimit = 0; - p->iOffset = 0; +/* +** Begin a transaction +*/ +SQLITE_PRIVATE void sqlite3BeginTransaction(Parse *pParse, int type){ + sqlite3 *db; + Vdbe *v; + int i; - /* Convert the data in the temporary table into whatever form - ** it is that we currently need. - */ - assert( unionTab==dest.iParm || dest.eDest!=priorOp ); - if( dest.eDest!=priorOp ){ - int iCont, iBreak, iStart; - assert( p->pEList ); - if( dest.eDest==SRT_Output ){ - Select *pFirst = p; - while( pFirst->pPrior ) pFirst = pFirst->pPrior; - generateColumnNames(pParse, 0, pFirst->pEList); - } - iBreak = sqlite3VdbeMakeLabel(v); - iCont = sqlite3VdbeMakeLabel(v); - computeLimitRegisters(pParse, p, iBreak); - sqlite3VdbeAddOp2(v, OP_Rewind, unionTab, iBreak); - iStart = sqlite3VdbeCurrentAddr(v); - selectInnerLoop(pParse, p, p->pEList, unionTab, p->pEList->nExpr, - 0, -1, &dest, iCont, iBreak); - sqlite3VdbeResolveLabel(v, iCont); - sqlite3VdbeAddOp2(v, OP_Next, unionTab, iStart); - sqlite3VdbeResolveLabel(v, iBreak); - sqlite3VdbeAddOp2(v, OP_Close, unionTab, 0); - } - break; + assert( pParse!=0 ); + db = pParse->db; + assert( db!=0 ); +/* if( db->aDb[0].pBt==0 ) return; */ + if( sqlite3AuthCheck(pParse, SQLITE_TRANSACTION, "BEGIN", 0, 0) ){ + return; + } + v = sqlite3GetVdbe(pParse); + if( !v ) return; + if( type!=TK_DEFERRED ){ + for(i=0; inDb; i++){ + sqlite3VdbeAddOp2(v, OP_Transaction, i, (type==TK_EXCLUSIVE)+1); + sqlite3VdbeUsesBtree(v, i); } - default: assert( p->op==TK_INTERSECT ); { - int tab1, tab2; - int iCont, iBreak, iStart; - Expr *pLimit, *pOffset; - int addr; - SelectDest intersectdest; - int r1; - - /* INTERSECT is different from the others since it requires - ** two temporary tables. Hence it has its own case. Begin - ** by allocating the tables we will need. - */ - tab1 = pParse->nTab++; - tab2 = pParse->nTab++; - assert( p->pOrderBy==0 ); + } + sqlite3VdbeAddOp2(v, OP_AutoCommit, 0, 0); +} - addr = sqlite3VdbeAddOp2(v, OP_OpenEphemeral, tab1, 0); - assert( p->addrOpenEphm[0] == -1 ); - p->addrOpenEphm[0] = addr; - p->pRightmost->selFlags |= SF_UsesEphemeral; - assert( p->pEList ); +/* +** Commit a transaction +*/ +SQLITE_PRIVATE void sqlite3CommitTransaction(Parse *pParse){ + Vdbe *v; - /* Code the SELECTs to our left into temporary table "tab1". - */ - sqlite3SelectDestInit(&intersectdest, SRT_Union, tab1); - rc = sqlite3Select(pParse, pPrior, &intersectdest); - if( rc ){ - goto multi_select_end; - } + assert( pParse!=0 ); + assert( pParse->db!=0 ); + if( sqlite3AuthCheck(pParse, SQLITE_TRANSACTION, "COMMIT", 0, 0) ){ + return; + } + v = sqlite3GetVdbe(pParse); + if( v ){ + sqlite3VdbeAddOp2(v, OP_AutoCommit, 1, 0); + } +} - /* Code the current SELECT into temporary table "tab2" - */ - addr = sqlite3VdbeAddOp2(v, OP_OpenEphemeral, tab2, 0); - assert( p->addrOpenEphm[1] == -1 ); - p->addrOpenEphm[1] = addr; - p->pPrior = 0; - pLimit = p->pLimit; - p->pLimit = 0; - pOffset = p->pOffset; - p->pOffset = 0; - intersectdest.iParm = tab2; - rc = sqlite3Select(pParse, p, &intersectdest); - testcase( rc!=SQLITE_OK ); - pDelete = p->pPrior; - p->pPrior = pPrior; - sqlite3ExprDelete(db, p->pLimit); - p->pLimit = pLimit; - p->pOffset = pOffset; +/* +** Rollback a transaction +*/ +SQLITE_PRIVATE void sqlite3RollbackTransaction(Parse *pParse){ + Vdbe *v; - /* Generate code to take the intersection of the two temporary - ** tables. - */ - assert( p->pEList ); - if( dest.eDest==SRT_Output ){ - Select *pFirst = p; - while( pFirst->pPrior ) pFirst = pFirst->pPrior; - generateColumnNames(pParse, 0, pFirst->pEList); - } - iBreak = sqlite3VdbeMakeLabel(v); - iCont = sqlite3VdbeMakeLabel(v); - computeLimitRegisters(pParse, p, iBreak); - sqlite3VdbeAddOp2(v, OP_Rewind, tab1, iBreak); - r1 = sqlite3GetTempReg(pParse); - iStart = sqlite3VdbeAddOp2(v, OP_RowKey, tab1, r1); - sqlite3VdbeAddOp3(v, OP_NotFound, tab2, iCont, r1); - sqlite3ReleaseTempReg(pParse, r1); - selectInnerLoop(pParse, p, p->pEList, tab1, p->pEList->nExpr, - 0, -1, &dest, iCont, iBreak); - sqlite3VdbeResolveLabel(v, iCont); - sqlite3VdbeAddOp2(v, OP_Next, tab1, iStart); - sqlite3VdbeResolveLabel(v, iBreak); - sqlite3VdbeAddOp2(v, OP_Close, tab2, 0); - sqlite3VdbeAddOp2(v, OP_Close, tab1, 0); - break; - } + assert( pParse!=0 ); + assert( pParse->db!=0 ); + if( sqlite3AuthCheck(pParse, SQLITE_TRANSACTION, "ROLLBACK", 0, 0) ){ + return; } + v = sqlite3GetVdbe(pParse); + if( v ){ + sqlite3VdbeAddOp2(v, OP_AutoCommit, 1, 1); + } +} - /* Compute collating sequences used by - ** temporary tables needed to implement the compound select. - ** Attach the KeyInfo structure to all temporary tables. - ** - ** This section is run by the right-most SELECT statement only. - ** SELECT statements to the left always skip this part. The right-most - ** SELECT might also skip this part if it has no ORDER BY clause and - ** no temp tables are required. - */ - if( p->selFlags & SF_UsesEphemeral ){ - int i; /* Loop counter */ - KeyInfo *pKeyInfo; /* Collating sequence for the result set */ - Select *pLoop; /* For looping through SELECT statements */ - CollSeq **apColl; /* For looping through pKeyInfo->aColl[] */ - int nCol; /* Number of columns in result set */ - - assert( p->pRightmost==p ); - nCol = p->pEList->nExpr; - pKeyInfo = sqlite3DbMallocZero(db, - sizeof(*pKeyInfo)+nCol*(sizeof(CollSeq*) + 1)); - if( !pKeyInfo ){ - rc = SQLITE_NOMEM; - goto multi_select_end; +/* +** This function is called by the parser when it parses a command to create, +** release or rollback an SQL savepoint. +*/ +SQLITE_PRIVATE void sqlite3Savepoint(Parse *pParse, int op, Token *pName){ + char *zName = sqlite3NameFromToken(pParse->db, pName); + if( zName ){ + Vdbe *v = sqlite3GetVdbe(pParse); +#ifndef SQLITE_OMIT_AUTHORIZATION + static const char * const az[] = { "BEGIN", "RELEASE", "ROLLBACK" }; + assert( !SAVEPOINT_BEGIN && SAVEPOINT_RELEASE==1 && SAVEPOINT_ROLLBACK==2 ); +#endif + if( !v || sqlite3AuthCheck(pParse, SQLITE_SAVEPOINT, az[op], zName, 0) ){ + sqlite3DbFree(pParse->db, zName); + return; } + sqlite3VdbeAddOp4(v, OP_Savepoint, op, 0, 0, zName, P4_DYNAMIC); + } +} - pKeyInfo->enc = ENC(db); - pKeyInfo->nField = (u16)nCol; +/* +** Make sure the TEMP database is open and available for use. Return +** the number of errors. Leave any error messages in the pParse structure. +*/ +SQLITE_PRIVATE int sqlite3OpenTempDatabase(Parse *pParse){ + sqlite3 *db = pParse->db; + if( db->aDb[1].pBt==0 && !pParse->explain ){ + int rc; + Btree *pBt; + static const int flags = + SQLITE_OPEN_READWRITE | + SQLITE_OPEN_CREATE | + SQLITE_OPEN_EXCLUSIVE | + SQLITE_OPEN_DELETEONCLOSE | + SQLITE_OPEN_TEMP_DB; - for(i=0, apColl=pKeyInfo->aColl; ipDfltColl; - } + rc = sqlite3BtreeOpen(db->pVfs, 0, db, &pBt, 0, flags); + if( rc!=SQLITE_OK ){ + sqlite3ErrorMsg(pParse, "unable to open a temporary database " + "file for storing temporary tables"); + pParse->rc = rc; + return 1; } - - for(pLoop=p; pLoop; pLoop=pLoop->pPrior){ - for(i=0; i<2; i++){ - int addr = pLoop->addrOpenEphm[i]; - if( addr<0 ){ - /* If [0] is unused then [1] is also unused. So we can - ** always safely abort as soon as the first unused slot is found */ - assert( pLoop->addrOpenEphm[1]<0 ); - break; - } - sqlite3VdbeChangeP2(v, addr, nCol); - sqlite3VdbeChangeP4(v, addr, (char*)pKeyInfo, P4_KEYINFO); - pLoop->addrOpenEphm[i] = -1; - } + db->aDb[1].pBt = pBt; + assert( db->aDb[1].pSchema ); + if( SQLITE_NOMEM==sqlite3BtreeSetPageSize(pBt, db->nextPagesize, -1, 0) ){ + db->mallocFailed = 1; + return 1; } - sqlite3DbFree(db, pKeyInfo); } - -multi_select_end: - pDest->iMem = dest.iMem; - pDest->nMem = dest.nMem; - sqlite3SelectDelete(db, pDelete); - return rc; + return 0; } -#endif /* SQLITE_OMIT_COMPOUND_SELECT */ /* -** Code an output subroutine for a coroutine implementation of a -** SELECT statment. -** -** The data to be output is contained in pIn->iMem. There are -** pIn->nMem columns to be output. pDest is where the output should -** be sent. +** Generate VDBE code that will verify the schema cookie and start +** a read-transaction for all named database files. ** -** regReturn is the number of the register holding the subroutine -** return address. +** It is important that all schema cookies be verified and all +** read transactions be started before anything else happens in +** the VDBE program. But this routine can be called after much other +** code has been generated. So here is what we do: ** -** If regPrev>0 then it is a the first register in a vector that -** records the previous output. mem[regPrev] is a flag that is false -** if there has been no previous output. If regPrev>0 then code is -** generated to suppress duplicates. pKeyInfo is used for comparing -** keys. +** The first time this routine is called, we code an OP_Goto that +** will jump to a subroutine at the end of the program. Then we +** record every database that needs its schema verified in the +** pParse->cookieMask field. Later, after all other code has been +** generated, the subroutine that does the cookie verifications and +** starts the transactions will be coded and the OP_Goto P2 value +** will be made to point to that subroutine. The generation of the +** cookie verification subroutine code happens in sqlite3FinishCoding(). ** -** If the LIMIT found in p->iLimit is reached, jump immediately to -** iBreak. +** If iDb<0 then code the OP_Goto only - don't set flag to verify the +** schema on any databases. This can be used to position the OP_Goto +** early in the code, before we know if any database tables will be used. */ -static int generateOutputSubroutine( - Parse *pParse, /* Parsing context */ - Select *p, /* The SELECT statement */ - SelectDest *pIn, /* Coroutine supplying data */ - SelectDest *pDest, /* Where to send the data */ - int regReturn, /* The return address register */ - int regPrev, /* Previous result register. No uniqueness if 0 */ - KeyInfo *pKeyInfo, /* For comparing with previous entry */ - int p4type, /* The p4 type for pKeyInfo */ - int iBreak /* Jump here if we hit the LIMIT */ -){ - Vdbe *v = pParse->pVdbe; - int iContinue; - int addr; - - addr = sqlite3VdbeCurrentAddr(v); - iContinue = sqlite3VdbeMakeLabel(v); +SQLITE_PRIVATE void sqlite3CodeVerifySchema(Parse *pParse, int iDb){ + Parse *pToplevel = sqlite3ParseToplevel(pParse); - /* Suppress duplicates for UNION, EXCEPT, and INTERSECT - */ - if( regPrev ){ - int j1, j2; - j1 = sqlite3VdbeAddOp1(v, OP_IfNot, regPrev); - j2 = sqlite3VdbeAddOp4(v, OP_Compare, pIn->iMem, regPrev+1, pIn->nMem, - (char*)pKeyInfo, p4type); - sqlite3VdbeAddOp3(v, OP_Jump, j2+2, iContinue, j2+2); - sqlite3VdbeJumpHere(v, j1); - sqlite3ExprCodeCopy(pParse, pIn->iMem, regPrev+1, pIn->nMem); - sqlite3VdbeAddOp2(v, OP_Integer, 1, regPrev); + if( pToplevel->cookieGoto==0 ){ + Vdbe *v = sqlite3GetVdbe(pToplevel); + if( v==0 ) return; /* This only happens if there was a prior error */ + pToplevel->cookieGoto = sqlite3VdbeAddOp2(v, OP_Goto, 0, 0)+1; } - if( pParse->db->mallocFailed ) return 0; - - /* Suppress the the first OFFSET entries if there is an OFFSET clause - */ - codeOffset(v, p, iContinue); + if( iDb>=0 ){ + sqlite3 *db = pToplevel->db; + yDbMask mask; - switch( pDest->eDest ){ - /* Store the result as data using a unique key. - */ - case SRT_Table: - case SRT_EphemTab: { - int r1 = sqlite3GetTempReg(pParse); - int r2 = sqlite3GetTempReg(pParse); - testcase( pDest->eDest==SRT_Table ); - testcase( pDest->eDest==SRT_EphemTab ); - sqlite3VdbeAddOp3(v, OP_MakeRecord, pIn->iMem, pIn->nMem, r1); - sqlite3VdbeAddOp2(v, OP_NewRowid, pDest->iParm, r2); - sqlite3VdbeAddOp3(v, OP_Insert, pDest->iParm, r1, r2); - sqlite3VdbeChangeP5(v, OPFLAG_APPEND); - sqlite3ReleaseTempReg(pParse, r2); - sqlite3ReleaseTempReg(pParse, r1); - break; + assert( iDbnDb ); + assert( db->aDb[iDb].pBt!=0 || iDb==1 ); + assert( iDbcookieMask & mask)==0 ){ + pToplevel->cookieMask |= mask; + pToplevel->cookieValue[iDb] = db->aDb[iDb].pSchema->schema_cookie; + if( !OMIT_TEMPDB && iDb==1 ){ + sqlite3OpenTempDatabase(pToplevel); + } } + } +} -#ifndef SQLITE_OMIT_SUBQUERY - /* If we are creating a set for an "expr IN (SELECT ...)" construct, - ** then there should be a single item on the stack. Write this - ** item into the set table with bogus data. - */ - case SRT_Set: { - int r1; - assert( pIn->nMem==1 ); - p->affinity = - sqlite3CompareAffinity(p->pEList->a[0].pExpr, pDest->affinity); - r1 = sqlite3GetTempReg(pParse); - sqlite3VdbeAddOp4(v, OP_MakeRecord, pIn->iMem, 1, r1, &p->affinity, 1); - sqlite3ExprCacheAffinityChange(pParse, pIn->iMem, 1); - sqlite3VdbeAddOp2(v, OP_IdxInsert, pDest->iParm, r1); - sqlite3ReleaseTempReg(pParse, r1); - break; +/* +** If argument zDb is NULL, then call sqlite3CodeVerifySchema() for each +** attached database. Otherwise, invoke it for the database named zDb only. +*/ +SQLITE_PRIVATE void sqlite3CodeVerifyNamedSchema(Parse *pParse, const char *zDb){ + sqlite3 *db = pParse->db; + int i; + for(i=0; inDb; i++){ + Db *pDb = &db->aDb[i]; + if( pDb->pBt && (!zDb || 0==sqlite3StrICmp(zDb, pDb->zName)) ){ + sqlite3CodeVerifySchema(pParse, i); } + } +} -#if 0 /* Never occurs on an ORDER BY query */ - /* If any row exist in the result set, record that fact and abort. - */ - case SRT_Exists: { - sqlite3VdbeAddOp2(v, OP_Integer, 1, pDest->iParm); - /* The LIMIT clause will terminate the loop for us */ - break; - } -#endif +/* +** Generate VDBE code that prepares for doing an operation that +** might change the database. +** +** This routine starts a new transaction if we are not already within +** a transaction. If we are already within a transaction, then a checkpoint +** is set if the setStatement parameter is true. A checkpoint should +** be set for operations that might fail (due to a constraint) part of +** the way through and which will need to undo some writes without having to +** rollback the whole transaction. For operations where all constraints +** can be checked before any changes are made to the database, it is never +** necessary to undo a write and the checkpoint should not be set. +*/ +SQLITE_PRIVATE void sqlite3BeginWriteOperation(Parse *pParse, int setStatement, int iDb){ + Parse *pToplevel = sqlite3ParseToplevel(pParse); + sqlite3CodeVerifySchema(pParse, iDb); + pToplevel->writeMask |= ((yDbMask)1)<isMultiWrite |= setStatement; +} - /* If this is a scalar select that is part of an expression, then - ** store the results in the appropriate memory cell and break out - ** of the scan loop. - */ - case SRT_Mem: { - assert( pIn->nMem==1 ); - sqlite3ExprCodeMove(pParse, pIn->iMem, pDest->iParm, 1); - /* The LIMIT clause will jump out of the loop for us */ - break; - } -#endif /* #ifndef SQLITE_OMIT_SUBQUERY */ +/* +** Indicate that the statement currently under construction might write +** more than one entry (example: deleting one row then inserting another, +** inserting multiple rows in a table, or inserting a row and index entries.) +** If an abort occurs after some of these writes have completed, then it will +** be necessary to undo the completed writes. +*/ +SQLITE_PRIVATE void sqlite3MultiWrite(Parse *pParse){ + Parse *pToplevel = sqlite3ParseToplevel(pParse); + pToplevel->isMultiWrite = 1; +} - /* The results are stored in a sequence of registers - ** starting at pDest->iMem. Then the co-routine yields. - */ - case SRT_Coroutine: { - if( pDest->iMem==0 ){ - pDest->iMem = sqlite3GetTempRange(pParse, pIn->nMem); - pDest->nMem = pIn->nMem; - } - sqlite3ExprCodeMove(pParse, pIn->iMem, pDest->iMem, pDest->nMem); - sqlite3VdbeAddOp1(v, OP_Yield, pDest->iParm); - break; - } +/* +** The code generator calls this routine if is discovers that it is +** possible to abort a statement prior to completion. In order to +** perform this abort without corrupting the database, we need to make +** sure that the statement is protected by a statement transaction. +** +** Technically, we only need to set the mayAbort flag if the +** isMultiWrite flag was previously set. There is a time dependency +** such that the abort must occur after the multiwrite. This makes +** some statements involving the REPLACE conflict resolution algorithm +** go a little faster. But taking advantage of this time dependency +** makes it more difficult to prove that the code is correct (in +** particular, it prevents us from writing an effective +** implementation of sqlite3AssertMayAbort()) and so we have chosen +** to take the safe route and skip the optimization. +*/ +SQLITE_PRIVATE void sqlite3MayAbort(Parse *pParse){ + Parse *pToplevel = sqlite3ParseToplevel(pParse); + pToplevel->mayAbort = 1; +} - /* If none of the above, then the result destination must be - ** SRT_Output. This routine is never called with any other - ** destination other than the ones handled above or SRT_Output. - ** - ** For SRT_Output, results are stored in a sequence of registers. - ** Then the OP_ResultRow opcode is used to cause sqlite3_step() to - ** return the next row of result. - */ - default: { - assert( pDest->eDest==SRT_Output ); - sqlite3VdbeAddOp2(v, OP_ResultRow, pIn->iMem, pIn->nMem); - sqlite3ExprCacheAffinityChange(pParse, pIn->iMem, pIn->nMem); - break; - } +/* +** Code an OP_Halt that causes the vdbe to return an SQLITE_CONSTRAINT +** error. The onError parameter determines which (if any) of the statement +** and/or current transaction is rolled back. +*/ +SQLITE_PRIVATE void sqlite3HaltConstraint(Parse *pParse, int onError, char *p4, int p4type){ + Vdbe *v = sqlite3GetVdbe(pParse); + if( onError==OE_Abort ){ + sqlite3MayAbort(pParse); } + sqlite3VdbeAddOp4(v, OP_Halt, SQLITE_CONSTRAINT, onError, 0, p4, p4type); +} - /* Jump to the end of the loop if the LIMIT is reached. - */ - if( p->iLimit ){ - sqlite3VdbeAddOp2(v, OP_AddImm, p->iLimit, -1); - sqlite3VdbeAddOp2(v, OP_IfZero, p->iLimit, iBreak); +/* +** Check to see if pIndex uses the collating sequence pColl. Return +** true if it does and false if it does not. +*/ +#ifndef SQLITE_OMIT_REINDEX +static int collationMatch(const char *zColl, Index *pIndex){ + int i; + assert( zColl!=0 ); + for(i=0; inColumn; i++){ + const char *z = pIndex->azColl[i]; + assert( z!=0 ); + if( 0==sqlite3StrICmp(z, zColl) ){ + return 1; + } } - - /* Generate the subroutine return - */ - sqlite3VdbeResolveLabel(v, iContinue); - sqlite3VdbeAddOp1(v, OP_Return, regReturn); - - return addr; + return 0; } +#endif /* -** Alternative compound select code generator for cases when there -** is an ORDER BY clause. -** -** We assume a query of the following form: -** -** ORDER BY -** -** is one of UNION ALL, UNION, EXCEPT, or INTERSECT. The idea -** is to code both and with the ORDER BY clause as -** co-routines. Then run the co-routines in parallel and merge the results -** into the output. In addition to the two coroutines (called selectA and -** selectB) there are 7 subroutines: +** Recompute all indices of pTab that use the collating sequence pColl. +** If pColl==0 then recompute all indices of pTab. +*/ +#ifndef SQLITE_OMIT_REINDEX +static void reindexTable(Parse *pParse, Table *pTab, char const *zColl){ + Index *pIndex; /* An index associated with pTab */ + + for(pIndex=pTab->pIndex; pIndex; pIndex=pIndex->pNext){ + if( zColl==0 || collationMatch(zColl, pIndex) ){ + int iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema); + sqlite3BeginWriteOperation(pParse, 0, iDb); + sqlite3RefillIndex(pParse, pIndex, -1); + } + } +} +#endif + +/* +** Recompute all indices of all tables in all databases where the +** indices use the collating sequence pColl. If pColl==0 then recompute +** all indices everywhere. +*/ +#ifndef SQLITE_OMIT_REINDEX +static void reindexDatabases(Parse *pParse, char const *zColl){ + Db *pDb; /* A single database */ + int iDb; /* The database index number */ + sqlite3 *db = pParse->db; /* The database connection */ + HashElem *k; /* For looping over tables in pDb */ + Table *pTab; /* A table in the database */ + + assert( sqlite3BtreeHoldsAllMutexes(db) ); /* Needed for schema access */ + for(iDb=0, pDb=db->aDb; iDbnDb; iDb++, pDb++){ + assert( pDb!=0 ); + for(k=sqliteHashFirst(&pDb->pSchema->tblHash); k; k=sqliteHashNext(k)){ + pTab = (Table*)sqliteHashData(k); + reindexTable(pParse, pTab, zColl); + } + } +} +#endif + +/* +** Generate code for the REINDEX command. ** -** outA: Move the output of the selectA coroutine into the output -** of the compound query. +** REINDEX -- 1 +** REINDEX -- 2 +** REINDEX ?.? -- 3 +** REINDEX ?.? -- 4 ** -** outB: Move the output of the selectB coroutine into the output -** of the compound query. (Only generated for UNION and -** UNION ALL. EXCEPT and INSERTSECT never output a row that -** appears only in B.) +** Form 1 causes all indices in all attached databases to be rebuilt. +** Form 2 rebuilds all indices in all databases that use the named +** collating function. Forms 3 and 4 rebuild the named index or all +** indices associated with the named table. +*/ +#ifndef SQLITE_OMIT_REINDEX +SQLITE_PRIVATE void sqlite3Reindex(Parse *pParse, Token *pName1, Token *pName2){ + CollSeq *pColl; /* Collating sequence to be reindexed, or NULL */ + char *z; /* Name of a table or index */ + const char *zDb; /* Name of the database */ + Table *pTab; /* A table in the database */ + Index *pIndex; /* An index associated with pTab */ + int iDb; /* The database index number */ + sqlite3 *db = pParse->db; /* The database connection */ + Token *pObjName; /* Name of the table or index to be reindexed */ + + /* Read the database schema. If an error occurs, leave an error message + ** and code in pParse and return NULL. */ + if( SQLITE_OK!=sqlite3ReadSchema(pParse) ){ + return; + } + + if( pName1==0 ){ + reindexDatabases(pParse, 0); + return; + }else if( NEVER(pName2==0) || pName2->z==0 ){ + char *zColl; + assert( pName1->z ); + zColl = sqlite3NameFromToken(pParse->db, pName1); + if( !zColl ) return; + pColl = sqlite3FindCollSeq(db, ENC(db), zColl, 0); + if( pColl ){ + reindexDatabases(pParse, zColl); + sqlite3DbFree(db, zColl); + return; + } + sqlite3DbFree(db, zColl); + } + iDb = sqlite3TwoPartName(pParse, pName1, pName2, &pObjName); + if( iDb<0 ) return; + z = sqlite3NameFromToken(db, pObjName); + if( z==0 ) return; + zDb = db->aDb[iDb].zName; + pTab = sqlite3FindTable(db, z, zDb); + if( pTab ){ + reindexTable(pParse, pTab, 0); + sqlite3DbFree(db, z); + return; + } + pIndex = sqlite3FindIndex(db, z, zDb); + sqlite3DbFree(db, z); + if( pIndex ){ + sqlite3BeginWriteOperation(pParse, 0, iDb); + sqlite3RefillIndex(pParse, pIndex, -1); + return; + } + sqlite3ErrorMsg(pParse, "unable to identify the object to be reindexed"); +} +#endif + +/* +** Return a dynamicly allocated KeyInfo structure that can be used +** with OP_OpenRead or OP_OpenWrite to access database index pIdx. ** -** AltB: Called when there is data from both coroutines and AnColumn; + int nBytes = sizeof(KeyInfo) + (nCol-1)*sizeof(CollSeq*) + nCol; + sqlite3 *db = pParse->db; + KeyInfo *pKey = (KeyInfo *)sqlite3DbMallocZero(db, nBytes); + + if( pKey ){ + pKey->db = pParse->db; + pKey->aSortOrder = (u8 *)&(pKey->aColl[nCol]); + assert( &pKey->aSortOrder[nCol]==&(((u8 *)pKey)[nBytes]) ); + for(i=0; iazColl[i]; + assert( zColl ); + pKey->aColl[i] = sqlite3LocateCollSeq(pParse, zColl); + pKey->aSortOrder[i] = pIdx->aSortOrder[i]; + } + pKey->nField = (u16)nCol; + } + + if( pParse->nErr ){ + sqlite3DbFree(db, pKey); + pKey = 0; + } + return pKey; +} + +/************** End of build.c ***********************************************/ +/************** Begin file callback.c ****************************************/ +/* +** 2005 May 23 ** -** AeqB: Called when there is data from both coroutines and A==B. +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: ** -** AgtB: Called when there is data from both coroutines and A>B. +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. ** -** EofA: Called when data is exhausted from selectA. +************************************************************************* ** -** EofB: Called when data is exhausted from selectB. +** This file contains functions used to access the internal hash tables +** of user defined functions and collation sequences. +*/ + + +/* +** Invoke the 'collation needed' callback to request a collation sequence +** in the encoding enc of name zName, length nName. +*/ +static void callCollNeeded(sqlite3 *db, int enc, const char *zName){ + assert( !db->xCollNeeded || !db->xCollNeeded16 ); + if( db->xCollNeeded ){ + char *zExternal = sqlite3DbStrDup(db, zName); + if( !zExternal ) return; + db->xCollNeeded(db->pCollNeededArg, db, enc, zExternal); + sqlite3DbFree(db, zExternal); + } +#ifndef SQLITE_OMIT_UTF16 + if( db->xCollNeeded16 ){ + char const *zExternal; + sqlite3_value *pTmp = sqlite3ValueNew(db); + sqlite3ValueSetStr(pTmp, -1, zName, SQLITE_UTF8, SQLITE_STATIC); + zExternal = sqlite3ValueText(pTmp, SQLITE_UTF16NATIVE); + if( zExternal ){ + db->xCollNeeded16(db->pCollNeededArg, db, (int)ENC(db), zExternal); + } + sqlite3ValueFree(pTmp); + } +#endif +} + +/* +** This routine is called if the collation factory fails to deliver a +** collation function in the best encoding but there may be other versions +** of this collation function (for other text encodings) available. Use one +** of these instead if they exist. Avoid a UTF-8 <-> UTF-16 conversion if +** possible. +*/ +static int synthCollSeq(sqlite3 *db, CollSeq *pColl){ + CollSeq *pColl2; + char *z = pColl->zName; + int i; + static const u8 aEnc[] = { SQLITE_UTF16BE, SQLITE_UTF16LE, SQLITE_UTF8 }; + for(i=0; i<3; i++){ + pColl2 = sqlite3FindCollSeq(db, aEnc[i], z, 0); + if( pColl2->xCmp!=0 ){ + memcpy(pColl, pColl2, sizeof(CollSeq)); + pColl->xDel = 0; /* Do not copy the destructor */ + return SQLITE_OK; + } + } + return SQLITE_ERROR; +} + +/* +** This function is responsible for invoking the collation factory callback +** or substituting a collation sequence of a different encoding when the +** requested collation sequence is not available in the desired encoding. +** +** If it is not NULL, then pColl must point to the database native encoding +** collation sequence with name zName, length nName. ** -** The implementation of the latter five subroutines depend on which -** is used: +** The return value is either the collation sequence to be used in database +** db for collation type name zName, length nName, or NULL, if no collation +** sequence can be found. ** +** See also: sqlite3LocateCollSeq(), sqlite3FindCollSeq() +*/ +SQLITE_PRIVATE CollSeq *sqlite3GetCollSeq( + sqlite3* db, /* The database connection */ + u8 enc, /* The desired encoding for the collating sequence */ + CollSeq *pColl, /* Collating sequence with native encoding, or NULL */ + const char *zName /* Collating sequence name */ +){ + CollSeq *p; + + p = pColl; + if( !p ){ + p = sqlite3FindCollSeq(db, enc, zName, 0); + } + if( !p || !p->xCmp ){ + /* No collation sequence of this type for this encoding is registered. + ** Call the collation factory to see if it can supply us with one. + */ + callCollNeeded(db, enc, zName); + p = sqlite3FindCollSeq(db, enc, zName, 0); + } + if( p && !p->xCmp && synthCollSeq(db, p) ){ + p = 0; + } + assert( !p || p->xCmp ); + return p; +} + +/* +** This routine is called on a collation sequence before it is used to +** check that it is defined. An undefined collation sequence exists when +** a database is loaded that contains references to collation sequences +** that have not been defined by sqlite3_create_collation() etc. ** -** UNION ALL UNION EXCEPT INTERSECT -** ------------- ----------------- -------------- ----------------- -** AltB: outA, nextA outA, nextA outA, nextA nextA +** If required, this routine calls the 'collation needed' callback to +** request a definition of the collating sequence. If this doesn't work, +** an equivalent collating sequence that uses a text encoding different +** from the main database is substituted, if one is available. +*/ +SQLITE_PRIVATE int sqlite3CheckCollSeq(Parse *pParse, CollSeq *pColl){ + if( pColl ){ + const char *zName = pColl->zName; + sqlite3 *db = pParse->db; + CollSeq *p = sqlite3GetCollSeq(db, ENC(db), pColl, zName); + if( !p ){ + sqlite3ErrorMsg(pParse, "no such collation sequence: %s", zName); + pParse->nErr++; + return SQLITE_ERROR; + } + assert( p==pColl ); + } + return SQLITE_OK; +} + + + +/* +** Locate and return an entry from the db.aCollSeq hash table. If the entry +** specified by zName and nName is not found and parameter 'create' is +** true, then create a new entry. Otherwise return NULL. ** -** AeqB: outA, nextA nextA nextA outA, nextA +** Each pointer stored in the sqlite3.aCollSeq hash table contains an +** array of three CollSeq structures. The first is the collation sequence +** prefferred for UTF-8, the second UTF-16le, and the third UTF-16be. ** -** AgtB: outB, nextB outB, nextB nextB nextB +** Stored immediately after the three collation sequences is a copy of +** the collation sequence name. A pointer to this string is stored in +** each collation sequence structure. +*/ +static CollSeq *findCollSeqEntry( + sqlite3 *db, /* Database connection */ + const char *zName, /* Name of the collating sequence */ + int create /* Create a new entry if true */ +){ + CollSeq *pColl; + int nName = sqlite3Strlen30(zName); + pColl = sqlite3HashFind(&db->aCollSeq, zName, nName); + + if( 0==pColl && create ){ + pColl = sqlite3DbMallocZero(db, 3*sizeof(*pColl) + nName + 1 ); + if( pColl ){ + CollSeq *pDel = 0; + pColl[0].zName = (char*)&pColl[3]; + pColl[0].enc = SQLITE_UTF8; + pColl[1].zName = (char*)&pColl[3]; + pColl[1].enc = SQLITE_UTF16LE; + pColl[2].zName = (char*)&pColl[3]; + pColl[2].enc = SQLITE_UTF16BE; + memcpy(pColl[0].zName, zName, nName); + pColl[0].zName[nName] = 0; + pDel = sqlite3HashInsert(&db->aCollSeq, pColl[0].zName, nName, pColl); + + /* If a malloc() failure occurred in sqlite3HashInsert(), it will + ** return the pColl pointer to be deleted (because it wasn't added + ** to the hash table). + */ + assert( pDel==0 || pDel==pColl ); + if( pDel!=0 ){ + db->mallocFailed = 1; + sqlite3DbFree(db, pDel); + pColl = 0; + } + } + } + return pColl; +} + +/* +** Parameter zName points to a UTF-8 encoded string nName bytes long. +** Return the CollSeq* pointer for the collation sequence named zName +** for the encoding 'enc' from the database 'db'. ** -** EofA: outB, nextB outB, nextB halt halt +** If the entry specified is not found and 'create' is true, then create a +** new entry. Otherwise return NULL. ** -** EofB: outA, nextA outA, nextA outA, nextA halt +** A separate function sqlite3LocateCollSeq() is a wrapper around +** this routine. sqlite3LocateCollSeq() invokes the collation factory +** if necessary and generates an error message if the collating sequence +** cannot be found. ** -** In the AltB, AeqB, and AgtB subroutines, an EOF on A following nextA -** causes an immediate jump to EofA and an EOF on B following nextB causes -** an immediate jump to EofB. Within EofA and EofB, and EOF on entry or -** following nextX causes a jump to the end of the select processing. +** See also: sqlite3LocateCollSeq(), sqlite3GetCollSeq() +*/ +SQLITE_PRIVATE CollSeq *sqlite3FindCollSeq( + sqlite3 *db, + u8 enc, + const char *zName, + int create +){ + CollSeq *pColl; + if( zName ){ + pColl = findCollSeqEntry(db, zName, create); + }else{ + pColl = db->pDfltColl; + } + assert( SQLITE_UTF8==1 && SQLITE_UTF16LE==2 && SQLITE_UTF16BE==3 ); + assert( enc>=SQLITE_UTF8 && enc<=SQLITE_UTF16BE ); + if( pColl ) pColl += enc-1; + return pColl; +} + +/* During the search for the best function definition, this procedure +** is called to test how well the function passed as the first argument +** matches the request for a function with nArg arguments in a system +** that uses encoding enc. The value returned indicates how well the +** request is matched. A higher value indicates a better match. ** -** Duplicate removal in the UNION, EXCEPT, and INTERSECT cases is handled -** within the output subroutine. The regPrev register set holds the previously -** output value. A comparison is made against this value and the output -** is skipped if the next results would be the same as the previous. +** If nArg is -1 that means to only return a match (non-zero) if p->nArg +** is also -1. In other words, we are searching for a function that +** takes a variable number of arguments. ** -** The implementation plan is to implement the two coroutines and seven -** subroutines first, then put the control logic at the bottom. Like this: +** If nArg is -2 that means that we are searching for any function +** regardless of the number of arguments it uses, so return a positive +** match score for any ** -** goto Init -** coA: coroutine for left query (A) -** coB: coroutine for right query (B) -** outA: output one row of A -** outB: output one row of B (UNION and UNION ALL only) -** EofA: ... -** EofB: ... -** AltB: ... -** AeqB: ... -** AgtB: ... -** Init: initialize coroutine registers -** yield coA -** if eof(A) goto EofA -** yield coB -** if eof(B) goto EofB -** Cmpr: Compare A, B -** Jump AltB, AeqB, AgtB -** End: ... +** The returned value is always between 0 and 6, as follows: ** -** We call AltB, AeqB, AgtB, EofA, and EofB "subroutines" but they are not -** actually called using Gosub and they do not Return. EofA and EofB loop -** until all data is exhausted then jump to the "end" labe. AltB, AeqB, -** and AgtB jump to either L2 or to one of EofA or EofB. -*/ -#ifndef SQLITE_OMIT_COMPOUND_SELECT -static int multiSelectOrderBy( - Parse *pParse, /* Parsing context */ - Select *p, /* The right-most of SELECTs to be coded */ - SelectDest *pDest /* What to do with query results */ +** 0: Not a match. +** 1: UTF8/16 conversion required and function takes any number of arguments. +** 2: UTF16 byte order change required and function takes any number of args. +** 3: encoding matches and function takes any number of arguments +** 4: UTF8/16 conversion required - argument count matches exactly +** 5: UTF16 byte order conversion required - argument count matches exactly +** 6: Perfect match: encoding and argument count match exactly. +** +** If nArg==(-2) then any function with a non-null xStep or xFunc is +** a perfect match and any function with both xStep and xFunc NULL is +** a non-match. +*/ +#define FUNC_PERFECT_MATCH 6 /* The score for a perfect match */ +static int matchQuality( + FuncDef *p, /* The function we are evaluating for match quality */ + int nArg, /* Desired number of arguments. (-1)==any */ + u8 enc /* Desired text encoding */ ){ - int i, j; /* Loop counters */ - Select *pPrior; /* Another SELECT immediately to our left */ - Vdbe *v; /* Generate code to this VDBE */ - SelectDest destA; /* Destination for coroutine A */ - SelectDest destB; /* Destination for coroutine B */ - int regAddrA; /* Address register for select-A coroutine */ - int regEofA; /* Flag to indicate when select-A is complete */ - int regAddrB; /* Address register for select-B coroutine */ - int regEofB; /* Flag to indicate when select-B is complete */ - int addrSelectA; /* Address of the select-A coroutine */ - int addrSelectB; /* Address of the select-B coroutine */ - int regOutA; /* Address register for the output-A subroutine */ - int regOutB; /* Address register for the output-B subroutine */ - int addrOutA; /* Address of the output-A subroutine */ - int addrOutB = 0; /* Address of the output-B subroutine */ - int addrEofA; /* Address of the select-A-exhausted subroutine */ - int addrEofB; /* Address of the select-B-exhausted subroutine */ - int addrAltB; /* Address of the AB subroutine */ - int regLimitA; /* Limit register for select-A */ - int regLimitB; /* Limit register for select-A */ - int regPrev; /* A range of registers to hold previous output */ - int savedLimit; /* Saved value of p->iLimit */ - int savedOffset; /* Saved value of p->iOffset */ - int labelCmpr; /* Label for the start of the merge algorithm */ - int labelEnd; /* Label for the end of the overall SELECT stmt */ - int j1; /* Jump instructions that get retargetted */ - int op; /* One of TK_ALL, TK_UNION, TK_EXCEPT, TK_INTERSECT */ - KeyInfo *pKeyDup = 0; /* Comparison information for duplicate removal */ - KeyInfo *pKeyMerge; /* Comparison information for merging rows */ - sqlite3 *db; /* Database connection */ - ExprList *pOrderBy; /* The ORDER BY clause */ - int nOrderBy; /* Number of terms in the ORDER BY clause */ - int *aPermute; /* Mapping from ORDER BY terms to result set columns */ - - assert( p->pOrderBy!=0 ); - assert( pKeyDup==0 ); /* "Managed" code needs this. Ticket #3382. */ - db = pParse->db; - v = pParse->pVdbe; - assert( v!=0 ); /* Already thrown the error if VDBE alloc failed */ - labelEnd = sqlite3VdbeMakeLabel(v); - labelCmpr = sqlite3VdbeMakeLabel(v); + int match; + /* nArg of -2 is a special case */ + if( nArg==(-2) ) return (p->xFunc==0 && p->xStep==0) ? 0 : FUNC_PERFECT_MATCH; - /* Patch up the ORDER BY clause - */ - op = p->op; - pPrior = p->pPrior; - assert( pPrior->pOrderBy==0 ); - pOrderBy = p->pOrderBy; - assert( pOrderBy ); - nOrderBy = pOrderBy->nExpr; + /* Wrong number of arguments means "no match" */ + if( p->nArg!=nArg && p->nArg>=0 ) return 0; - /* For operators other than UNION ALL we have to make sure that - ** the ORDER BY clause covers every term of the result set. Add - ** terms to the ORDER BY clause as necessary. - */ - if( op!=TK_ALL ){ - for(i=1; db->mallocFailed==0 && i<=p->pEList->nExpr; i++){ - struct ExprList_item *pItem; - for(j=0, pItem=pOrderBy->a; jiCol>0 ); - if( pItem->iCol==i ) break; - } - if( j==nOrderBy ){ - Expr *pNew = sqlite3Expr(db, TK_INTEGER, 0); - if( pNew==0 ) return SQLITE_NOMEM; - pNew->flags |= EP_IntValue; - pNew->u.iValue = i; - pOrderBy = sqlite3ExprListAppend(pParse, pOrderBy, pNew); - pOrderBy->a[nOrderBy++].iCol = (u16)i; - } - } + /* Give a better score to a function with a specific number of arguments + ** than to function that accepts any number of arguments. */ + if( p->nArg==nArg ){ + match = 4; + }else{ + match = 1; } - /* Compute the comparison permutation and keyinfo that is used with - ** the permutation used to determine if the next - ** row of results comes from selectA or selectB. Also add explicit - ** collations to the ORDER BY clause terms so that when the subqueries - ** to the right and the left are evaluated, they use the correct - ** collation. - */ - aPermute = sqlite3DbMallocRaw(db, sizeof(int)*nOrderBy); - if( aPermute ){ - struct ExprList_item *pItem; - for(i=0, pItem=pOrderBy->a; iiCol>0 && pItem->iCol<=p->pEList->nExpr ); - aPermute[i] = pItem->iCol - 1; - } - pKeyMerge = - sqlite3DbMallocRaw(db, sizeof(*pKeyMerge)+nOrderBy*(sizeof(CollSeq*)+1)); - if( pKeyMerge ){ - pKeyMerge->aSortOrder = (u8*)&pKeyMerge->aColl[nOrderBy]; - pKeyMerge->nField = (u16)nOrderBy; - pKeyMerge->enc = ENC(db); - for(i=0; ia[i].pExpr; - if( pTerm->flags & EP_ExpCollate ){ - pColl = pTerm->pColl; - }else{ - pColl = multiSelectCollSeq(pParse, p, aPermute[i]); - pTerm->flags |= EP_ExpCollate; - pTerm->pColl = pColl; - } - pKeyMerge->aColl[i] = pColl; - pKeyMerge->aSortOrder[i] = pOrderBy->a[i].sortOrder; - } - } - }else{ - pKeyMerge = 0; + /* Bonus points if the text encoding matches */ + if( enc==p->iPrefEnc ){ + match += 2; /* Exact encoding match */ + }else if( (enc & p->iPrefEnc & 2)!=0 ){ + match += 1; /* Both are UTF16, but with different byte orders */ } - /* Reattach the ORDER BY clause to the query. - */ - p->pOrderBy = pOrderBy; - pPrior->pOrderBy = sqlite3ExprListDup(pParse->db, pOrderBy, 0); + return match; +} - /* Allocate a range of temporary registers and the KeyInfo needed - ** for the logic that removes duplicate result rows when the - ** operator is UNION, EXCEPT, or INTERSECT (but not UNION ALL). - */ - if( op==TK_ALL ){ - regPrev = 0; - }else{ - int nExpr = p->pEList->nExpr; - assert( nOrderBy>=nExpr || db->mallocFailed ); - regPrev = sqlite3GetTempRange(pParse, nExpr+1); - sqlite3VdbeAddOp2(v, OP_Integer, 0, regPrev); - pKeyDup = sqlite3DbMallocZero(db, - sizeof(*pKeyDup) + nExpr*(sizeof(CollSeq*)+1) ); - if( pKeyDup ){ - pKeyDup->aSortOrder = (u8*)&pKeyDup->aColl[nExpr]; - pKeyDup->nField = (u16)nExpr; - pKeyDup->enc = ENC(db); - for(i=0; iaColl[i] = multiSelectCollSeq(pParse, p, i); - pKeyDup->aSortOrder[i] = 0; - } +/* +** Search a FuncDefHash for a function with the given name. Return +** a pointer to the matching FuncDef if found, or 0 if there is no match. +*/ +static FuncDef *functionSearch( + FuncDefHash *pHash, /* Hash table to search */ + int h, /* Hash of the name */ + const char *zFunc, /* Name of function */ + int nFunc /* Number of bytes in zFunc */ +){ + FuncDef *p; + for(p=pHash->a[h]; p; p=p->pHash){ + if( sqlite3StrNICmp(p->zName, zFunc, nFunc)==0 && p->zName[nFunc]==0 ){ + return p; } } - - /* Separate the left and the right query from one another - */ - p->pPrior = 0; - pPrior->pRightmost = 0; - sqlite3ResolveOrderGroupBy(pParse, p, p->pOrderBy, "ORDER"); - if( pPrior->pPrior==0 ){ - sqlite3ResolveOrderGroupBy(pParse, pPrior, pPrior->pOrderBy, "ORDER"); - } + return 0; +} - /* Compute the limit registers */ - computeLimitRegisters(pParse, p, labelEnd); - if( p->iLimit && op==TK_ALL ){ - regLimitA = ++pParse->nMem; - regLimitB = ++pParse->nMem; - sqlite3VdbeAddOp2(v, OP_Copy, p->iOffset ? p->iOffset+1 : p->iLimit, - regLimitA); - sqlite3VdbeAddOp2(v, OP_Copy, regLimitA, regLimitB); +/* +** Insert a new FuncDef into a FuncDefHash hash table. +*/ +SQLITE_PRIVATE void sqlite3FuncDefInsert( + FuncDefHash *pHash, /* The hash table into which to insert */ + FuncDef *pDef /* The function definition to insert */ +){ + FuncDef *pOther; + int nName = sqlite3Strlen30(pDef->zName); + u8 c1 = (u8)pDef->zName[0]; + int h = (sqlite3UpperToLower[c1] + nName) % ArraySize(pHash->a); + pOther = functionSearch(pHash, h, pDef->zName, nName); + if( pOther ){ + assert( pOther!=pDef && pOther->pNext!=pDef ); + pDef->pNext = pOther->pNext; + pOther->pNext = pDef; }else{ - regLimitA = regLimitB = 0; + pDef->pNext = 0; + pDef->pHash = pHash->a[h]; + pHash->a[h] = pDef; } - sqlite3ExprDelete(db, p->pLimit); - p->pLimit = 0; - sqlite3ExprDelete(db, p->pOffset); - p->pOffset = 0; - - regAddrA = ++pParse->nMem; - regEofA = ++pParse->nMem; - regAddrB = ++pParse->nMem; - regEofB = ++pParse->nMem; - regOutA = ++pParse->nMem; - regOutB = ++pParse->nMem; - sqlite3SelectDestInit(&destA, SRT_Coroutine, regAddrA); - sqlite3SelectDestInit(&destB, SRT_Coroutine, regAddrB); - - /* Jump past the various subroutines and coroutines to the main - ** merge loop - */ - j1 = sqlite3VdbeAddOp0(v, OP_Goto); - addrSelectA = sqlite3VdbeCurrentAddr(v); +} + + +/* +** Locate a user function given a name, a number of arguments and a flag +** indicating whether the function prefers UTF-16 over UTF-8. Return a +** pointer to the FuncDef structure that defines that function, or return +** NULL if the function does not exist. +** +** If the createFlag argument is true, then a new (blank) FuncDef +** structure is created and liked into the "db" structure if a +** no matching function previously existed. +** +** If nArg is -2, then the first valid function found is returned. A +** function is valid if either xFunc or xStep is non-zero. The nArg==(-2) +** case is used to see if zName is a valid function name for some number +** of arguments. If nArg is -2, then createFlag must be 0. +** +** If createFlag is false, then a function with the required name and +** number of arguments may be returned even if the eTextRep flag does not +** match that requested. +*/ +SQLITE_PRIVATE FuncDef *sqlite3FindFunction( + sqlite3 *db, /* An open database */ + const char *zName, /* Name of the function. Not null-terminated */ + int nName, /* Number of characters in the name */ + int nArg, /* Number of arguments. -1 means any number */ + u8 enc, /* Preferred text encoding */ + u8 createFlag /* Create new entry if true and does not otherwise exist */ +){ + FuncDef *p; /* Iterator variable */ + FuncDef *pBest = 0; /* Best match found so far */ + int bestScore = 0; /* Score of best match */ + int h; /* Hash value */ - /* Generate a coroutine to evaluate the SELECT statement to the - ** left of the compound operator - the "A" select. - */ - VdbeNoopComment((v, "Begin coroutine for left SELECT")); - pPrior->iLimit = regLimitA; - sqlite3Select(pParse, pPrior, &destA); - sqlite3VdbeAddOp2(v, OP_Integer, 1, regEofA); - sqlite3VdbeAddOp1(v, OP_Yield, regAddrA); - VdbeNoopComment((v, "End coroutine for left SELECT")); + assert( nArg>=(-2) ); + assert( nArg>=(-1) || createFlag==0 ); + assert( enc==SQLITE_UTF8 || enc==SQLITE_UTF16LE || enc==SQLITE_UTF16BE ); + h = (sqlite3UpperToLower[(u8)zName[0]] + nName) % ArraySize(db->aFunc.a); - /* Generate a coroutine to evaluate the SELECT statement on - ** the right - the "B" select + /* First search for a match amongst the application-defined functions. */ - addrSelectB = sqlite3VdbeCurrentAddr(v); - VdbeNoopComment((v, "Begin coroutine for right SELECT")); - savedLimit = p->iLimit; - savedOffset = p->iOffset; - p->iLimit = regLimitB; - p->iOffset = 0; - sqlite3Select(pParse, p, &destB); - p->iLimit = savedLimit; - p->iOffset = savedOffset; - sqlite3VdbeAddOp2(v, OP_Integer, 1, regEofB); - sqlite3VdbeAddOp1(v, OP_Yield, regAddrB); - VdbeNoopComment((v, "End coroutine for right SELECT")); + p = functionSearch(&db->aFunc, h, zName, nName); + while( p ){ + int score = matchQuality(p, nArg, enc); + if( score>bestScore ){ + pBest = p; + bestScore = score; + } + p = p->pNext; + } - /* Generate a subroutine that outputs the current row of the A - ** select as the next output row of the compound select. - */ - VdbeNoopComment((v, "Output routine for A")); - addrOutA = generateOutputSubroutine(pParse, - p, &destA, pDest, regOutA, - regPrev, pKeyDup, P4_KEYINFO_HANDOFF, labelEnd); - - /* Generate a subroutine that outputs the current row of the B - ** select as the next output row of the compound select. - */ - if( op==TK_ALL || op==TK_UNION ){ - VdbeNoopComment((v, "Output routine for B")); - addrOutB = generateOutputSubroutine(pParse, - p, &destB, pDest, regOutB, - regPrev, pKeyDup, P4_KEYINFO_STATIC, labelEnd); + /* If no match is found, search the built-in functions. + ** + ** If the SQLITE_PreferBuiltin flag is set, then search the built-in + ** functions even if a prior app-defined function was found. And give + ** priority to built-in functions. + ** + ** Except, if createFlag is true, that means that we are trying to + ** install a new function. Whatever FuncDef structure is returned it will + ** have fields overwritten with new information appropriate for the + ** new function. But the FuncDefs for built-in functions are read-only. + ** So we must not search for built-ins when creating a new function. + */ + if( !createFlag && (pBest==0 || (db->flags & SQLITE_PreferBuiltin)!=0) ){ + FuncDefHash *pHash = &GLOBAL(FuncDefHash, sqlite3GlobalFunctions); + bestScore = 0; + p = functionSearch(pHash, h, zName, nName); + while( p ){ + int score = matchQuality(p, nArg, enc); + if( score>bestScore ){ + pBest = p; + bestScore = score; + } + p = p->pNext; + } } - /* Generate a subroutine to run when the results from select A - ** are exhausted and only data in select B remains. + /* If the createFlag parameter is true and the search did not reveal an + ** exact match for the name, number of arguments and encoding, then add a + ** new entry to the hash table and return it. */ - VdbeNoopComment((v, "eof-A subroutine")); - if( op==TK_EXCEPT || op==TK_INTERSECT ){ - addrEofA = sqlite3VdbeAddOp2(v, OP_Goto, 0, labelEnd); - }else{ - addrEofA = sqlite3VdbeAddOp2(v, OP_If, regEofB, labelEnd); - sqlite3VdbeAddOp2(v, OP_Gosub, regOutB, addrOutB); - sqlite3VdbeAddOp1(v, OP_Yield, regAddrB); - sqlite3VdbeAddOp2(v, OP_Goto, 0, addrEofA); + if( createFlag && bestScorezName = (char *)&pBest[1]; + pBest->nArg = (u16)nArg; + pBest->iPrefEnc = enc; + memcpy(pBest->zName, zName, nName); + pBest->zName[nName] = 0; + sqlite3FuncDefInsert(&db->aFunc, pBest); } - /* Generate a subroutine to run when the results from select B - ** are exhausted and only data in select A remains. - */ - if( op==TK_INTERSECT ){ - addrEofB = addrEofA; - }else{ - VdbeNoopComment((v, "eof-B subroutine")); - addrEofB = sqlite3VdbeAddOp2(v, OP_If, regEofA, labelEnd); - sqlite3VdbeAddOp2(v, OP_Gosub, regOutA, addrOutA); - sqlite3VdbeAddOp1(v, OP_Yield, regAddrA); - sqlite3VdbeAddOp2(v, OP_Goto, 0, addrEofB); + if( pBest && (pBest->xStep || pBest->xFunc || createFlag) ){ + return pBest; } + return 0; +} - /* Generate code to handle the case of AtblHash; + temp2 = pSchema->trigHash; + sqlite3HashInit(&pSchema->trigHash); + sqlite3HashClear(&pSchema->idxHash); + for(pElem=sqliteHashFirst(&temp2); pElem; pElem=sqliteHashNext(pElem)){ + sqlite3DeleteTrigger(0, (Trigger*)sqliteHashData(pElem)); } - - /* Generate code to handle the case of A>B - */ - VdbeNoopComment((v, "A-gt-B subroutine")); - addrAgtB = sqlite3VdbeCurrentAddr(v); - if( op==TK_ALL || op==TK_UNION ){ - sqlite3VdbeAddOp2(v, OP_Gosub, regOutB, addrOutB); + sqlite3HashClear(&temp2); + sqlite3HashInit(&pSchema->tblHash); + for(pElem=sqliteHashFirst(&temp1); pElem; pElem=sqliteHashNext(pElem)){ + Table *pTab = sqliteHashData(pElem); + sqlite3DeleteTable(0, pTab); } - sqlite3VdbeAddOp1(v, OP_Yield, regAddrB); - sqlite3VdbeAddOp2(v, OP_If, regEofB, addrEofB); - sqlite3VdbeAddOp2(v, OP_Goto, 0, labelCmpr); + sqlite3HashClear(&temp1); + sqlite3HashClear(&pSchema->fkeyHash); + pSchema->pSeqTab = 0; + if( pSchema->flags & DB_SchemaLoaded ){ + pSchema->iGeneration++; + pSchema->flags &= ~DB_SchemaLoaded; + } +} - /* This code runs once to initialize everything. - */ - sqlite3VdbeJumpHere(v, j1); - sqlite3VdbeAddOp2(v, OP_Integer, 0, regEofA); - sqlite3VdbeAddOp2(v, OP_Integer, 0, regEofB); - sqlite3VdbeAddOp2(v, OP_Gosub, regAddrA, addrSelectA); - sqlite3VdbeAddOp2(v, OP_Gosub, regAddrB, addrSelectB); - sqlite3VdbeAddOp2(v, OP_If, regEofA, addrEofA); - sqlite3VdbeAddOp2(v, OP_If, regEofB, addrEofB); +/* +** Find and return the schema associated with a BTree. Create +** a new one if necessary. +*/ +SQLITE_PRIVATE Schema *sqlite3SchemaGet(sqlite3 *db, Btree *pBt){ + Schema * p; + if( pBt ){ + p = (Schema *)sqlite3BtreeSchema(pBt, sizeof(Schema), sqlite3SchemaClear); + }else{ + p = (Schema *)sqlite3DbMallocZero(0, sizeof(Schema)); + } + if( !p ){ + db->mallocFailed = 1; + }else if ( 0==p->file_format ){ + sqlite3HashInit(&p->tblHash); + sqlite3HashInit(&p->idxHash); + sqlite3HashInit(&p->trigHash); + sqlite3HashInit(&p->fkeyHash); + p->enc = SQLITE_UTF8; + } + return p; +} - /* Implement the main merge loop - */ - sqlite3VdbeResolveLabel(v, labelCmpr); - sqlite3VdbeAddOp4(v, OP_Permutation, 0, 0, 0, (char*)aPermute, P4_INTARRAY); - sqlite3VdbeAddOp4(v, OP_Compare, destA.iMem, destB.iMem, nOrderBy, - (char*)pKeyMerge, P4_KEYINFO_HANDOFF); - sqlite3VdbeAddOp3(v, OP_Jump, addrAltB, addrAeqB, addrAgtB); +/************** End of callback.c ********************************************/ +/************** Begin file delete.c ******************************************/ +/* +** 2001 September 15 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** This file contains C code routines that are called by the parser +** in order to generate code for DELETE FROM statements. +*/ - /* Release temporary registers - */ - if( regPrev ){ - sqlite3ReleaseTempRange(pParse, regPrev, nOrderBy+1); +/* +** While a SrcList can in general represent multiple tables and subqueries +** (as in the FROM clause of a SELECT statement) in this case it contains +** the name of a single table, as one might find in an INSERT, DELETE, +** or UPDATE statement. Look up that table in the symbol table and +** return a pointer. Set an error message and return NULL if the table +** name is not found or if any other error occurs. +** +** The following fields are initialized appropriate in pSrc: +** +** pSrc->a[0].pTab Pointer to the Table object +** pSrc->a[0].pIndex Pointer to the INDEXED BY index, if there is one +** +*/ +SQLITE_PRIVATE Table *sqlite3SrcListLookup(Parse *pParse, SrcList *pSrc){ + struct SrcList_item *pItem = pSrc->a; + Table *pTab; + assert( pItem && pSrc->nSrc==1 ); + pTab = sqlite3LocateTable(pParse, 0, pItem->zName, pItem->zDatabase); + sqlite3DeleteTable(pParse->db, pItem->pTab); + pItem->pTab = pTab; + if( pTab ){ + pTab->nRef++; } + if( sqlite3IndexedByLookup(pParse, pItem) ){ + pTab = 0; + } + return pTab; +} - /* Jump to the this point in order to terminate the query. - */ - sqlite3VdbeResolveLabel(v, labelEnd); - - /* Set the number of output columns +/* +** Check to make sure the given table is writable. If it is not +** writable, generate an error message and return 1. If it is +** writable return 0; +*/ +SQLITE_PRIVATE int sqlite3IsReadOnly(Parse *pParse, Table *pTab, int viewOk){ + /* A table is not writable under the following circumstances: + ** + ** 1) It is a virtual table and no implementation of the xUpdate method + ** has been provided, or + ** 2) It is a system table (i.e. sqlite_master), this call is not + ** part of a nested parse and writable_schema pragma has not + ** been specified. + ** + ** In either case leave an error message in pParse and return non-zero. */ - if( pDest->eDest==SRT_Output ){ - Select *pFirst = pPrior; - while( pFirst->pPrior ) pFirst = pFirst->pPrior; - generateColumnNames(pParse, 0, pFirst->pEList); + if( ( IsVirtual(pTab) + && sqlite3GetVTable(pParse->db, pTab)->pMod->pModule->xUpdate==0 ) + || ( (pTab->tabFlags & TF_Readonly)!=0 + && (pParse->db->flags & SQLITE_WriteSchema)==0 + && pParse->nested==0 ) + ){ + sqlite3ErrorMsg(pParse, "table %s may not be modified", pTab->zName); + return 1; } - /* Reassembly the compound query so that it will be freed correctly - ** by the calling function */ - if( p->pPrior ){ - sqlite3SelectDelete(db, p->pPrior); +#ifndef SQLITE_OMIT_VIEW + if( !viewOk && pTab->pSelect ){ + sqlite3ErrorMsg(pParse,"cannot modify %s because it is a view",pTab->zName); + return 1; } - p->pPrior = pPrior; - - /*** TBD: Insert subroutine calls to close cursors on incomplete - **** subqueries ****/ - return SQLITE_OK; -} #endif + return 0; +} -#if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) -/* Forward Declarations */ -static void substExprList(sqlite3*, ExprList*, int, ExprList*); -static void substSelect(sqlite3*, Select *, int, ExprList *); +#if !defined(SQLITE_OMIT_VIEW) && !defined(SQLITE_OMIT_TRIGGER) /* -** Scan through the expression pExpr. Replace every reference to -** a column in table number iTable with a copy of the iColumn-th -** entry in pEList. (But leave references to the ROWID column -** unchanged.) -** -** This routine is part of the flattening procedure. A subquery -** whose result set is defined by pEList appears as entry in the -** FROM clause of a SELECT such that the VDBE cursor assigned to that -** FORM clause entry is iTable. This routine make the necessary -** changes to pExpr so that it refers directly to the source table -** of the subquery rather the result set of the subquery. +** Evaluate a view and store its result in an ephemeral table. The +** pWhere argument is an optional WHERE clause that restricts the +** set of rows in the view that are to be added to the ephemeral table. */ -static Expr *substExpr( - sqlite3 *db, /* Report malloc errors to this connection */ - Expr *pExpr, /* Expr in which substitution occurs */ - int iTable, /* Table to be substituted */ - ExprList *pEList /* Substitute expressions */ +SQLITE_PRIVATE void sqlite3MaterializeView( + Parse *pParse, /* Parsing context */ + Table *pView, /* View definition */ + Expr *pWhere, /* Optional WHERE clause to be added */ + int iCur /* Cursor number for ephemerial table */ ){ - if( pExpr==0 ) return 0; - if( pExpr->op==TK_COLUMN && pExpr->iTable==iTable ){ - if( pExpr->iColumn<0 ){ - pExpr->op = TK_NULL; - }else{ - Expr *pNew; - assert( pEList!=0 && pExpr->iColumnnExpr ); - assert( pExpr->pLeft==0 && pExpr->pRight==0 ); - pNew = sqlite3ExprDup(db, pEList->a[pExpr->iColumn].pExpr, 0); - sqlite3ExprDelete(db, pExpr); - pExpr = pNew; - } - }else{ - pExpr->pLeft = substExpr(db, pExpr->pLeft, iTable, pEList); - pExpr->pRight = substExpr(db, pExpr->pRight, iTable, pEList); - if( ExprHasProperty(pExpr, EP_xIsSelect) ){ - substSelect(db, pExpr->x.pSelect, iTable, pEList); + SelectDest dest; + Select *pDup; + sqlite3 *db = pParse->db; + + pDup = sqlite3SelectDup(db, pView->pSelect, 0); + if( pWhere ){ + SrcList *pFrom; + + pWhere = sqlite3ExprDup(db, pWhere, 0); + pFrom = sqlite3SrcListAppend(db, 0, 0, 0); + if( pFrom ){ + assert( pFrom->nSrc==1 ); + pFrom->a[0].zAlias = sqlite3DbStrDup(db, pView->zName); + pFrom->a[0].pSelect = pDup; + assert( pFrom->a[0].pOn==0 ); + assert( pFrom->a[0].pUsing==0 ); }else{ - substExprList(db, pExpr->x.pList, iTable, pEList); - } - } - return pExpr; -} -static void substExprList( - sqlite3 *db, /* Report malloc errors here */ - ExprList *pList, /* List to scan and in which to make substitutes */ - int iTable, /* Table to be substituted */ - ExprList *pEList /* Substitute values */ -){ - int i; - if( pList==0 ) return; - for(i=0; inExpr; i++){ - pList->a[i].pExpr = substExpr(db, pList->a[i].pExpr, iTable, pEList); - } -} -static void substSelect( - sqlite3 *db, /* Report malloc errors here */ - Select *p, /* SELECT statement in which to make substitutions */ - int iTable, /* Table to be replaced */ - ExprList *pEList /* Substitute values */ -){ - SrcList *pSrc; - struct SrcList_item *pItem; - int i; - if( !p ) return; - substExprList(db, p->pEList, iTable, pEList); - substExprList(db, p->pGroupBy, iTable, pEList); - substExprList(db, p->pOrderBy, iTable, pEList); - p->pHaving = substExpr(db, p->pHaving, iTable, pEList); - p->pWhere = substExpr(db, p->pWhere, iTable, pEList); - substSelect(db, p->pPrior, iTable, pEList); - pSrc = p->pSrc; - assert( pSrc ); /* Even for (SELECT 1) we have: pSrc!=0 but pSrc->nSrc==0 */ - if( ALWAYS(pSrc) ){ - for(i=pSrc->nSrc, pItem=pSrc->a; i>0; i--, pItem++){ - substSelect(db, pItem->pSelect, iTable, pEList); + sqlite3SelectDelete(db, pDup); } + pDup = sqlite3SelectNew(pParse, 0, pFrom, pWhere, 0, 0, 0, 0, 0, 0); } + sqlite3SelectDestInit(&dest, SRT_EphemTab, iCur); + sqlite3Select(pParse, pDup, &dest); + sqlite3SelectDelete(db, pDup); } -#endif /* !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) */ +#endif /* !defined(SQLITE_OMIT_VIEW) && !defined(SQLITE_OMIT_TRIGGER) */ -#if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) +#if defined(SQLITE_ENABLE_UPDATE_DELETE_LIMIT) && !defined(SQLITE_OMIT_SUBQUERY) /* -** This routine attempts to flatten subqueries in order to speed -** execution. It returns 1 if it makes changes and 0 if no flattening -** occurs. -** -** To understand the concept of flattening, consider the following -** query: -** -** SELECT a FROM (SELECT x+y AS a FROM t1 WHERE z<100) WHERE a>5 +** Generate an expression tree to implement the WHERE, ORDER BY, +** and LIMIT/OFFSET portion of DELETE and UPDATE statements. ** -** The default way of implementing this query is to execute the -** subquery first and store the results in a temporary table, then -** run the outer query on that temporary table. This requires two -** passes over the data. Furthermore, because the temporary table -** has no indices, the WHERE clause on the outer query cannot be -** optimized. -** -** This routine attempts to rewrite queries such as the above into -** a single flat select, like this: -** -** SELECT x+y AS a FROM t1 WHERE z<100 AND a>5 -** -** The code generated for this simpification gives the same result -** but only has to scan the data once. And because indices might -** exist on the table t1, a complete scan of the data might be -** avoided. -** -** Flattening is only attempted if all of the following are true: -** -** (1) The subquery and the outer query do not both use aggregates. -** -** (2) The subquery is not an aggregate or the outer query is not a join. -** -** (3) The subquery is not the right operand of a left outer join -** (Originally ticket #306. Strenghtened by ticket #3300) -** -** (4) The subquery is not DISTINCT or the outer query is not a join. -** -** (5) The subquery is not DISTINCT or the outer query does not use -** aggregates. -** -** (6) The subquery does not use aggregates or the outer query is not -** DISTINCT. -** -** (7) The subquery has a FROM clause. -** -** (8) The subquery does not use LIMIT or the outer query is not a join. -** -** (9) The subquery does not use LIMIT or the outer query does not use -** aggregates. -** -** (10) The subquery does not use aggregates or the outer query does not -** use LIMIT. -** -** (11) The subquery and the outer query do not both have ORDER BY clauses. -** -** (12) Not implemented. Subsumed into restriction (3). Was previously -** a separate restriction deriving from ticket #350. -** -** (13) The subquery and outer query do not both use LIMIT -** -** (14) The subquery does not use OFFSET -** -** (15) The outer query is not part of a compound select or the -** subquery does not have both an ORDER BY and a LIMIT clause. -** (See ticket #2339) -** -** (16) The outer query is not an aggregate or the subquery does -** not contain ORDER BY. (Ticket #2942) This used to not matter -** until we introduced the group_concat() function. -** -** (17) The sub-query is not a compound select, or it is a UNION ALL -** compound clause made up entirely of non-aggregate queries, and -** the parent query: -** -** * is not itself part of a compound select, -** * is not an aggregate or DISTINCT query, and -** * has no other tables or sub-selects in the FROM clause. -** -** The parent and sub-query may contain WHERE clauses. Subject to -** rules (11), (13) and (14), they may also contain ORDER BY, -** LIMIT and OFFSET clauses. -** -** (18) If the sub-query is a compound select, then all terms of the -** ORDER by clause of the parent must be simple references to -** columns of the sub-query. -** -** (19) The subquery does not use LIMIT or the outer query does not -** have a WHERE clause. -** -** (20) If the sub-query is a compound select, then it must not use -** an ORDER BY clause. Ticket #3773. We could relax this constraint -** somewhat by saying that the terms of the ORDER BY clause must -** appear as unmodified result columns in the outer query. But -** have other optimizations in mind to deal with that case. -** -** In this routine, the "p" parameter is a pointer to the outer query. -** The subquery is p->pSrc->a[iFrom]. isAgg is true if the outer query -** uses aggregates and subqueryIsAgg is true if the subquery uses aggregates. -** -** If flattening is not attempted, this routine is a no-op and returns 0. -** If flattening is attempted this routine returns 1. -** -** All of the expression analysis must occur on both the outer query and -** the subquery before this routine runs. +** DELETE FROM table_wxyz WHERE a<5 ORDER BY a LIMIT 1; +** \__________________________/ +** pLimitWhere (pInClause) */ -static int flattenSubquery( - Parse *pParse, /* Parsing context */ - Select *p, /* The parent or outer SELECT statement */ - int iFrom, /* Index in p->pSrc->a[] of the inner subquery */ - int isAgg, /* True if outer SELECT uses aggregate functions */ - int subqueryIsAgg /* True if the subquery uses aggregate functions */ +SQLITE_PRIVATE Expr *sqlite3LimitWhere( + Parse *pParse, /* The parser context */ + SrcList *pSrc, /* the FROM clause -- which tables to scan */ + Expr *pWhere, /* The WHERE clause. May be null */ + ExprList *pOrderBy, /* The ORDER BY clause. May be null */ + Expr *pLimit, /* The LIMIT clause. May be null */ + Expr *pOffset, /* The OFFSET clause. May be null */ + char *zStmtType /* Either DELETE or UPDATE. For error messages. */ ){ - const char *zSavedAuthContext = pParse->zAuthContext; - Select *pParent; - Select *pSub; /* The inner query or "subquery" */ - Select *pSub1; /* Pointer to the rightmost select in sub-query */ - SrcList *pSrc; /* The FROM clause of the outer query */ - SrcList *pSubSrc; /* The FROM clause of the subquery */ - ExprList *pList; /* The result set of the outer query */ - int iParent; /* VDBE cursor number of the pSub result set temp table */ - int i; /* Loop counter */ - Expr *pWhere; /* The WHERE clause */ - struct SrcList_item *pSubitem; /* The subquery */ - sqlite3 *db = pParse->db; + Expr *pWhereRowid = NULL; /* WHERE rowid .. */ + Expr *pInClause = NULL; /* WHERE rowid IN ( select ) */ + Expr *pSelectRowid = NULL; /* SELECT rowid ... */ + ExprList *pEList = NULL; /* Expression list contaning only pSelectRowid */ + SrcList *pSelectSrc = NULL; /* SELECT rowid FROM x ... (dup of pSrc) */ + Select *pSelect = NULL; /* Complete SELECT tree */ - /* Check to see if flattening is permitted. Return 0 if not. + /* Check that there isn't an ORDER BY without a LIMIT clause. */ - assert( p!=0 ); - assert( p->pPrior==0 ); /* Unable to flatten compound queries */ - pSrc = p->pSrc; - assert( pSrc && iFrom>=0 && iFromnSrc ); - pSubitem = &pSrc->a[iFrom]; - iParent = pSubitem->iCursor; - pSub = pSubitem->pSelect; - assert( pSub!=0 ); - if( isAgg && subqueryIsAgg ) return 0; /* Restriction (1) */ - if( subqueryIsAgg && pSrc->nSrc>1 ) return 0; /* Restriction (2) */ - pSubSrc = pSub->pSrc; - assert( pSubSrc ); - /* Prior to version 3.1.2, when LIMIT and OFFSET had to be simple constants, - ** not arbitrary expresssions, we allowed some combining of LIMIT and OFFSET - ** because they could be computed at compile-time. But when LIMIT and OFFSET - ** became arbitrary expressions, we were forced to add restrictions (13) - ** and (14). */ - if( pSub->pLimit && p->pLimit ) return 0; /* Restriction (13) */ - if( pSub->pOffset ) return 0; /* Restriction (14) */ - if( p->pRightmost && pSub->pLimit && pSub->pOrderBy ){ - return 0; /* Restriction (15) */ + if( pOrderBy && (pLimit == 0) ) { + sqlite3ErrorMsg(pParse, "ORDER BY without LIMIT on %s", zStmtType); + goto limit_where_cleanup_2; } - if( pSubSrc->nSrc==0 ) return 0; /* Restriction (7) */ - if( ((pSub->selFlags & SF_Distinct)!=0 || pSub->pLimit) - && (pSrc->nSrc>1 || isAgg) ){ /* Restrictions (4)(5)(8)(9) */ - return 0; + + /* We only need to generate a select expression if there + ** is a limit/offset term to enforce. + */ + if( pLimit == 0 ) { + /* if pLimit is null, pOffset will always be null as well. */ + assert( pOffset == 0 ); + return pWhere; } - if( (p->selFlags & SF_Distinct)!=0 && subqueryIsAgg ){ - return 0; /* Restriction (6) */ + + /* Generate a select expression tree to enforce the limit/offset + ** term for the DELETE or UPDATE statement. For example: + ** DELETE FROM table_a WHERE col1=1 ORDER BY col2 LIMIT 1 OFFSET 1 + ** becomes: + ** DELETE FROM table_a WHERE rowid IN ( + ** SELECT rowid FROM table_a WHERE col1=1 ORDER BY col2 LIMIT 1 OFFSET 1 + ** ); + */ + + pSelectRowid = sqlite3PExpr(pParse, TK_ROW, 0, 0, 0); + if( pSelectRowid == 0 ) goto limit_where_cleanup_2; + pEList = sqlite3ExprListAppend(pParse, 0, pSelectRowid); + if( pEList == 0 ) goto limit_where_cleanup_2; + + /* duplicate the FROM clause as it is needed by both the DELETE/UPDATE tree + ** and the SELECT subtree. */ + pSelectSrc = sqlite3SrcListDup(pParse->db, pSrc, 0); + if( pSelectSrc == 0 ) { + sqlite3ExprListDelete(pParse->db, pEList); + goto limit_where_cleanup_2; } - if( p->pOrderBy && pSub->pOrderBy ){ - return 0; /* Restriction (11) */ + + /* generate the SELECT expression tree. */ + pSelect = sqlite3SelectNew(pParse,pEList,pSelectSrc,pWhere,0,0, + pOrderBy,0,pLimit,pOffset); + if( pSelect == 0 ) return 0; + + /* now generate the new WHERE rowid IN clause for the DELETE/UDPATE */ + pWhereRowid = sqlite3PExpr(pParse, TK_ROW, 0, 0, 0); + if( pWhereRowid == 0 ) goto limit_where_cleanup_1; + pInClause = sqlite3PExpr(pParse, TK_IN, pWhereRowid, 0, 0); + if( pInClause == 0 ) goto limit_where_cleanup_1; + + pInClause->x.pSelect = pSelect; + pInClause->flags |= EP_xIsSelect; + sqlite3ExprSetHeight(pParse, pInClause); + return pInClause; + + /* something went wrong. clean up anything allocated. */ +limit_where_cleanup_1: + sqlite3SelectDelete(pParse->db, pSelect); + return 0; + +limit_where_cleanup_2: + sqlite3ExprDelete(pParse->db, pWhere); + sqlite3ExprListDelete(pParse->db, pOrderBy); + sqlite3ExprDelete(pParse->db, pLimit); + sqlite3ExprDelete(pParse->db, pOffset); + return 0; +} +#endif /* defined(SQLITE_ENABLE_UPDATE_DELETE_LIMIT) && !defined(SQLITE_OMIT_SUBQUERY) */ + +/* +** Generate code for a DELETE FROM statement. +** +** DELETE FROM table_wxyz WHERE a<5 AND b NOT NULL; +** \________/ \________________/ +** pTabList pWhere +*/ +SQLITE_PRIVATE void sqlite3DeleteFrom( + Parse *pParse, /* The parser context */ + SrcList *pTabList, /* The table from which we should delete things */ + Expr *pWhere /* The WHERE clause. May be null */ +){ + Vdbe *v; /* The virtual database engine */ + Table *pTab; /* The table from which records will be deleted */ + const char *zDb; /* Name of database holding pTab */ + int end, addr = 0; /* A couple addresses of generated code */ + int i; /* Loop counter */ + WhereInfo *pWInfo; /* Information about the WHERE clause */ + Index *pIdx; /* For looping over indices of the table */ + int iCur; /* VDBE Cursor number for pTab */ + sqlite3 *db; /* Main database structure */ + AuthContext sContext; /* Authorization context */ + NameContext sNC; /* Name context to resolve expressions in */ + int iDb; /* Database number */ + int memCnt = -1; /* Memory cell used for change counting */ + int rcauth; /* Value returned by authorization callback */ + +#ifndef SQLITE_OMIT_TRIGGER + int isView; /* True if attempting to delete from a view */ + Trigger *pTrigger; /* List of table triggers, if required */ +#endif + + memset(&sContext, 0, sizeof(sContext)); + db = pParse->db; + if( pParse->nErr || db->mallocFailed ){ + goto delete_from_cleanup; } - if( isAgg && pSub->pOrderBy ) return 0; /* Restriction (16) */ - if( pSub->pLimit && p->pWhere ) return 0; /* Restriction (19) */ + assert( pTabList->nSrc==1 ); - /* OBSOLETE COMMENT 1: - ** Restriction 3: If the subquery is a join, make sure the subquery is - ** not used as the right operand of an outer join. Examples of why this - ** is not allowed: - ** - ** t1 LEFT OUTER JOIN (t2 JOIN t3) - ** - ** If we flatten the above, we would get - ** - ** (t1 LEFT OUTER JOIN t2) JOIN t3 - ** - ** which is not at all the same thing. - ** - ** OBSOLETE COMMENT 2: - ** Restriction 12: If the subquery is the right operand of a left outer - ** join, make sure the subquery has no WHERE clause. - ** An examples of why this is not allowed: - ** - ** t1 LEFT OUTER JOIN (SELECT * FROM t2 WHERE t2.x>0) - ** - ** If we flatten the above, we would get - ** - ** (t1 LEFT OUTER JOIN t2) WHERE t2.x>0 - ** - ** But the t2.x>0 test will always fail on a NULL row of t2, which - ** effectively converts the OUTER JOIN into an INNER JOIN. - ** - ** THIS OVERRIDES OBSOLETE COMMENTS 1 AND 2 ABOVE: - ** Ticket #3300 shows that flattening the right term of a LEFT JOIN - ** is fraught with danger. Best to avoid the whole thing. If the - ** subquery is the right term of a LEFT JOIN, then do not flatten. + /* Locate the table which we want to delete. This table has to be + ** put in an SrcList structure because some of the subroutines we + ** will be calling are designed to work with multiple tables and expect + ** an SrcList* parameter instead of just a Table* parameter. */ - if( (pSubitem->jointype & JT_OUTER)!=0 ){ - return 0; - } + pTab = sqlite3SrcListLookup(pParse, pTabList); + if( pTab==0 ) goto delete_from_cleanup; - /* Restriction 17: If the sub-query is a compound SELECT, then it must - ** use only the UNION ALL operator. And none of the simple select queries - ** that make up the compound SELECT are allowed to be aggregate or distinct - ** queries. + /* Figure out if we have any triggers and if the table being + ** deleted from is a view */ - if( pSub->pPrior ){ - if( pSub->pOrderBy ){ - return 0; /* Restriction 20 */ - } - if( isAgg || (p->selFlags & SF_Distinct)!=0 || pSrc->nSrc!=1 ){ - return 0; - } - for(pSub1=pSub; pSub1; pSub1=pSub1->pPrior){ - testcase( (pSub1->selFlags & (SF_Distinct|SF_Aggregate))==SF_Distinct ); - testcase( (pSub1->selFlags & (SF_Distinct|SF_Aggregate))==SF_Aggregate ); - if( (pSub1->selFlags & (SF_Distinct|SF_Aggregate))!=0 - || (pSub1->pPrior && pSub1->op!=TK_ALL) - || NEVER(pSub1->pSrc==0) || pSub1->pSrc->nSrc!=1 - ){ - return 0; - } - } +#ifndef SQLITE_OMIT_TRIGGER + pTrigger = sqlite3TriggersExist(pParse, pTab, TK_DELETE, 0, 0); + isView = pTab->pSelect!=0; +#else +# define pTrigger 0 +# define isView 0 +#endif +#ifdef SQLITE_OMIT_VIEW +# undef isView +# define isView 0 +#endif - /* Restriction 18. */ - if( p->pOrderBy ){ - int ii; - for(ii=0; iipOrderBy->nExpr; ii++){ - if( p->pOrderBy->a[ii].iCol==0 ) return 0; - } - } + /* If pTab is really a view, make sure it has been initialized. + */ + if( sqlite3ViewGetColumnNames(pParse, pTab) ){ + goto delete_from_cleanup; } - /***** If we reach this point, flattening is permitted. *****/ + if( sqlite3IsReadOnly(pParse, pTab, (pTrigger?1:0)) ){ + goto delete_from_cleanup; + } + iDb = sqlite3SchemaToIndex(db, pTab->pSchema); + assert( iDbnDb ); + zDb = db->aDb[iDb].zName; + rcauth = sqlite3AuthCheck(pParse, SQLITE_DELETE, pTab->zName, 0, zDb); + assert( rcauth==SQLITE_OK || rcauth==SQLITE_DENY || rcauth==SQLITE_IGNORE ); + if( rcauth==SQLITE_DENY ){ + goto delete_from_cleanup; + } + assert(!isView || pTrigger); - /* Authorize the subquery */ - pParse->zAuthContext = pSubitem->zName; - sqlite3AuthCheck(pParse, SQLITE_SELECT, 0, 0, 0); - pParse->zAuthContext = zSavedAuthContext; + /* Assign cursor number to the table and all its indices. + */ + assert( pTabList->nSrc==1 ); + iCur = pTabList->a[0].iCursor = pParse->nTab++; + for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){ + pParse->nTab++; + } - /* If the sub-query is a compound SELECT statement, then (by restrictions - ** 17 and 18 above) it must be a UNION ALL and the parent query must - ** be of the form: - ** - ** SELECT FROM () - ** - ** followed by any ORDER BY, LIMIT and/or OFFSET clauses. This block - ** creates N-1 copies of the parent query without any ORDER BY, LIMIT or - ** OFFSET clauses and joins them to the left-hand-side of the original - ** using UNION ALL operators. In this case N is the number of simple - ** select statements in the compound sub-query. - ** - ** Example: - ** - ** SELECT a+1 FROM ( - ** SELECT x FROM tab - ** UNION ALL - ** SELECT y FROM tab - ** UNION ALL - ** SELECT abs(z*2) FROM tab2 - ** ) WHERE a!=5 ORDER BY 1 - ** - ** Transformed into: - ** - ** SELECT x+1 FROM tab WHERE x+1!=5 - ** UNION ALL - ** SELECT y+1 FROM tab WHERE y+1!=5 - ** UNION ALL - ** SELECT abs(z*2)+1 FROM tab2 WHERE abs(z*2)+1!=5 - ** ORDER BY 1 - ** - ** We call this the "compound-subquery flattening". + /* Start the view context */ - for(pSub=pSub->pPrior; pSub; pSub=pSub->pPrior){ - Select *pNew; - ExprList *pOrderBy = p->pOrderBy; - Expr *pLimit = p->pLimit; - Select *pPrior = p->pPrior; - p->pOrderBy = 0; - p->pSrc = 0; - p->pPrior = 0; - p->pLimit = 0; - pNew = sqlite3SelectDup(db, p, 0); - p->pLimit = pLimit; - p->pOrderBy = pOrderBy; - p->pSrc = pSrc; - p->op = TK_ALL; - p->pRightmost = 0; - if( pNew==0 ){ - pNew = pPrior; - }else{ - pNew->pPrior = pPrior; - pNew->pRightmost = 0; - } - p->pPrior = pNew; - if( db->mallocFailed ) return 1; + if( isView ){ + sqlite3AuthContextPush(pParse, &sContext, pTab->zName); } - /* Begin flattening the iFrom-th entry of the FROM clause - ** in the outer query. + /* Begin generating code. */ - pSub = pSub1 = pSubitem->pSelect; + v = sqlite3GetVdbe(pParse); + if( v==0 ){ + goto delete_from_cleanup; + } + if( pParse->nested==0 ) sqlite3VdbeCountChanges(v); + sqlite3BeginWriteOperation(pParse, 1, iDb); - /* Delete the transient table structure associated with the - ** subquery + /* If we are trying to delete from a view, realize that view into + ** a ephemeral table. */ - sqlite3DbFree(db, pSubitem->zDatabase); - sqlite3DbFree(db, pSubitem->zName); - sqlite3DbFree(db, pSubitem->zAlias); - pSubitem->zDatabase = 0; - pSubitem->zName = 0; - pSubitem->zAlias = 0; - pSubitem->pSelect = 0; +#if !defined(SQLITE_OMIT_VIEW) && !defined(SQLITE_OMIT_TRIGGER) + if( isView ){ + sqlite3MaterializeView(pParse, pTab, pWhere, iCur); + } +#endif - /* Defer deleting the Table object associated with the - ** subquery until code generation is - ** complete, since there may still exist Expr.pTab entries that - ** refer to the subquery even after flattening. Ticket #3346. - ** - ** pSubitem->pTab is always non-NULL by test restrictions and tests above. + /* Resolve the column names in the WHERE clause. */ - if( ALWAYS(pSubitem->pTab!=0) ){ - Table *pTabToDel = pSubitem->pTab; - if( pTabToDel->nRef==1 ){ - pTabToDel->pNextZombie = pParse->pZombieTab; - pParse->pZombieTab = pTabToDel; - }else{ - pTabToDel->nRef--; - } - pSubitem->pTab = 0; + memset(&sNC, 0, sizeof(sNC)); + sNC.pParse = pParse; + sNC.pSrcList = pTabList; + if( sqlite3ResolveExprNames(&sNC, pWhere) ){ + goto delete_from_cleanup; } - /* The following loop runs once for each term in a compound-subquery - ** flattening (as described above). If we are doing a different kind - ** of flattening - a flattening other than a compound-subquery flattening - - ** then this loop only runs once. - ** - ** This loop moves all of the FROM elements of the subquery into the - ** the FROM clause of the outer query. Before doing this, remember - ** the cursor number for the original outer query FROM element in - ** iParent. The iParent cursor will never be used. Subsequent code - ** will scan expressions looking for iParent references and replace - ** those references with expressions that resolve to the subquery FROM - ** elements we are now copying in. + /* Initialize the counter of the number of rows deleted, if + ** we are counting rows. */ - for(pParent=p; pParent; pParent=pParent->pPrior, pSub=pSub->pPrior){ - int nSubSrc; - u8 jointype = 0; - pSubSrc = pSub->pSrc; /* FROM clause of subquery */ - nSubSrc = pSubSrc->nSrc; /* Number of terms in subquery FROM clause */ - pSrc = pParent->pSrc; /* FROM clause of the outer query */ + if( db->flags & SQLITE_CountRows ){ + memCnt = ++pParse->nMem; + sqlite3VdbeAddOp2(v, OP_Integer, 0, memCnt); + } - if( pSrc ){ - assert( pParent==p ); /* First time through the loop */ - jointype = pSubitem->jointype; - }else{ - assert( pParent!=p ); /* 2nd and subsequent times through the loop */ - pSrc = pParent->pSrc = sqlite3SrcListAppend(db, 0, 0, 0); - if( pSrc==0 ){ - assert( db->mallocFailed ); - break; - } +#ifndef SQLITE_OMIT_TRUNCATE_OPTIMIZATION + /* Special case: A DELETE without a WHERE clause deletes everything. + ** It is easier just to erase the whole table. Prior to version 3.6.5, + ** this optimization caused the row change count (the value returned by + ** API function sqlite3_count_changes) to be set incorrectly. */ + if( rcauth==SQLITE_OK && pWhere==0 && !pTrigger && !IsVirtual(pTab) + && 0==sqlite3FkRequired(pParse, pTab, 0, 0) + ){ + assert( !isView ); + sqlite3VdbeAddOp4(v, OP_Clear, pTab->tnum, iDb, memCnt, + pTab->zName, P4_STATIC); + for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){ + assert( pIdx->pSchema==pTab->pSchema ); + sqlite3VdbeAddOp2(v, OP_Clear, pIdx->tnum, iDb); } + }else +#endif /* SQLITE_OMIT_TRUNCATE_OPTIMIZATION */ + /* The usual case: There is a WHERE clause so we have to scan through + ** the table and pick which records to delete. + */ + { + int iRowSet = ++pParse->nMem; /* Register for rowset of rows to delete */ + int iRowid = ++pParse->nMem; /* Used for storing rowid values. */ + int regRowid; /* Actual register containing rowids */ - /* The subquery uses a single slot of the FROM clause of the outer - ** query. If the subquery has more than one element in its FROM clause, - ** then expand the outer query to make space for it to hold all elements - ** of the subquery. - ** - ** Example: - ** - ** SELECT * FROM tabA, (SELECT * FROM sub1, sub2), tabB; - ** - ** The outer query has 3 slots in its FROM clause. One slot of the - ** outer query (the middle slot) is used by the subquery. The next - ** block of code will expand the out query to 4 slots. The middle - ** slot is expanded to two slots in order to make space for the - ** two elements in the FROM clause of the subquery. + /* Collect rowids of every row to be deleted. */ - if( nSubSrc>1 ){ - pParent->pSrc = pSrc = sqlite3SrcListEnlarge(db, pSrc, nSubSrc-1,iFrom+1); - if( db->mallocFailed ){ - break; - } + sqlite3VdbeAddOp2(v, OP_Null, 0, iRowSet); + pWInfo = sqlite3WhereBegin( + pParse, pTabList, pWhere, 0, 0, WHERE_DUPLICATES_OK + ); + if( pWInfo==0 ) goto delete_from_cleanup; + regRowid = sqlite3ExprCodeGetColumn(pParse, pTab, -1, iCur, iRowid, 0); + sqlite3VdbeAddOp2(v, OP_RowSetAdd, iRowSet, regRowid); + if( db->flags & SQLITE_CountRows ){ + sqlite3VdbeAddOp2(v, OP_AddImm, memCnt, 1); } + sqlite3WhereEnd(pWInfo); - /* Transfer the FROM clause terms from the subquery into the - ** outer query. - */ - for(i=0; ia[i+iFrom].pUsing); - pSrc->a[i+iFrom] = pSubSrc->a[i]; - memset(&pSubSrc->a[i], 0, sizeof(pSubSrc->a[i])); - } - pSrc->a[iFrom].jointype = jointype; - - /* Now begin substituting subquery result set expressions for - ** references to the iParent in the outer query. - ** - ** Example: - ** - ** SELECT a+5, b*10 FROM (SELECT x*3 AS a, y+10 AS b FROM t1) WHERE a>b; - ** \ \_____________ subquery __________/ / - ** \_____________________ outer query ______________________________/ - ** - ** We look at every expression in the outer query and every place we see - ** "a" we substitute "x*3" and every place we see "b" we substitute "y+10". - */ - pList = pParent->pEList; - for(i=0; inExpr; i++){ - if( pList->a[i].zName==0 ){ - const char *zSpan = pList->a[i].zSpan; - if( ALWAYS(zSpan) ){ - pList->a[i].zName = sqlite3DbStrDup(db, zSpan); - } - } - } - substExprList(db, pParent->pEList, iParent, pSub->pEList); - if( isAgg ){ - substExprList(db, pParent->pGroupBy, iParent, pSub->pEList); - pParent->pHaving = substExpr(db, pParent->pHaving, iParent, pSub->pEList); - } - if( pSub->pOrderBy ){ - assert( pParent->pOrderBy==0 ); - pParent->pOrderBy = pSub->pOrderBy; - pSub->pOrderBy = 0; - }else if( pParent->pOrderBy ){ - substExprList(db, pParent->pOrderBy, iParent, pSub->pEList); - } - if( pSub->pWhere ){ - pWhere = sqlite3ExprDup(db, pSub->pWhere, 0); - }else{ - pWhere = 0; + /* Delete every item whose key was written to the list during the + ** database scan. We have to delete items after the scan is complete + ** because deleting an item can change the scan order. */ + end = sqlite3VdbeMakeLabel(v); + + /* Unless this is a view, open cursors for the table we are + ** deleting from and all its indices. If this is a view, then the + ** only effect this statement has is to fire the INSTEAD OF + ** triggers. */ + if( !isView ){ + sqlite3OpenTableAndIndices(pParse, pTab, iCur, OP_OpenWrite); } - if( subqueryIsAgg ){ - assert( pParent->pHaving==0 ); - pParent->pHaving = pParent->pWhere; - pParent->pWhere = pWhere; - pParent->pHaving = substExpr(db, pParent->pHaving, iParent, pSub->pEList); - pParent->pHaving = sqlite3ExprAnd(db, pParent->pHaving, - sqlite3ExprDup(db, pSub->pHaving, 0)); - assert( pParent->pGroupBy==0 ); - pParent->pGroupBy = sqlite3ExprListDup(db, pSub->pGroupBy, 0); - }else{ - pParent->pWhere = substExpr(db, pParent->pWhere, iParent, pSub->pEList); - pParent->pWhere = sqlite3ExprAnd(db, pParent->pWhere, pWhere); + + addr = sqlite3VdbeAddOp3(v, OP_RowSetRead, iRowSet, end, iRowid); + + /* Delete the row */ +#ifndef SQLITE_OMIT_VIRTUALTABLE + if( IsVirtual(pTab) ){ + const char *pVTab = (const char *)sqlite3GetVTable(db, pTab); + sqlite3VtabMakeWritable(pParse, pTab); + sqlite3VdbeAddOp4(v, OP_VUpdate, 0, 1, iRowid, pVTab, P4_VTAB); + sqlite3VdbeChangeP5(v, OE_Abort); + sqlite3MayAbort(pParse); + }else +#endif + { + int count = (pParse->nested==0); /* True to count changes */ + sqlite3GenerateRowDelete(pParse, pTab, iCur, iRowid, count, pTrigger, OE_Default); } - - /* The flattened query is distinct if either the inner or the - ** outer query is distinct. - */ - pParent->selFlags |= pSub->selFlags & SF_Distinct; - - /* - ** SELECT ... FROM (SELECT ... LIMIT a OFFSET b) LIMIT x OFFSET y; - ** - ** One is tempted to try to add a and b to combine the limits. But this - ** does not work if either limit is negative. - */ - if( pSub->pLimit ){ - pParent->pLimit = pSub->pLimit; - pSub->pLimit = 0; + + /* End of the delete loop */ + sqlite3VdbeAddOp2(v, OP_Goto, 0, addr); + sqlite3VdbeResolveLabel(v, end); + + /* Close the cursors open on the table and its indexes. */ + if( !isView && !IsVirtual(pTab) ){ + for(i=1, pIdx=pTab->pIndex; pIdx; i++, pIdx=pIdx->pNext){ + sqlite3VdbeAddOp2(v, OP_Close, iCur + i, pIdx->tnum); + } + sqlite3VdbeAddOp1(v, OP_Close, iCur); } } - /* Finially, delete what is left of the subquery and return - ** success. + /* Update the sqlite_sequence table by storing the content of the + ** maximum rowid counter values recorded while inserting into + ** autoincrement tables. */ - sqlite3SelectDelete(db, pSub1); + if( pParse->nested==0 && pParse->pTriggerTab==0 ){ + sqlite3AutoincrementEnd(pParse); + } - return 1; + /* Return the number of rows that were deleted. If this routine is + ** generating code because of a call to sqlite3NestedParse(), do not + ** invoke the callback function. + */ + if( (db->flags&SQLITE_CountRows) && !pParse->nested && !pParse->pTriggerTab ){ + sqlite3VdbeAddOp2(v, OP_ResultRow, memCnt, 1); + sqlite3VdbeSetNumCols(v, 1); + sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "rows deleted", SQLITE_STATIC); + } + +delete_from_cleanup: + sqlite3AuthContextPop(&sContext); + sqlite3SrcListDelete(db, pTabList); + sqlite3ExprDelete(db, pWhere); + return; } -#endif /* !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) */ +/* Make sure "isView" and other macros defined above are undefined. Otherwise +** thely may interfere with compilation of other functions in this file +** (or in another file, if this file becomes part of the amalgamation). */ +#ifdef isView + #undef isView +#endif +#ifdef pTrigger + #undef pTrigger +#endif /* -** Analyze the SELECT statement passed as an argument to see if it -** is a min() or max() query. Return WHERE_ORDERBY_MIN or WHERE_ORDERBY_MAX if -** it is, or 0 otherwise. At present, a query is considered to be -** a min()/max() query if: +** This routine generates VDBE code that causes a single row of a +** single table to be deleted. ** -** 1. There is a single object in the FROM clause. +** The VDBE must be in a particular state when this routine is called. +** These are the requirements: ** -** 2. There is a single expression in the result set, and it is -** either min(x) or max(x), where x is a column reference. +** 1. A read/write cursor pointing to pTab, the table containing the row +** to be deleted, must be opened as cursor number $iCur. +** +** 2. Read/write cursors for all indices of pTab must be open as +** cursor number base+i for the i-th index. +** +** 3. The record number of the row to be deleted must be stored in +** memory cell iRowid. +** +** This routine generates code to remove both the table record and all +** index entries that point to that record. */ -static u8 minMaxQuery(Select *p){ - Expr *pExpr; - ExprList *pEList = p->pEList; +SQLITE_PRIVATE void sqlite3GenerateRowDelete( + Parse *pParse, /* Parsing context */ + Table *pTab, /* Table containing the row to be deleted */ + int iCur, /* Cursor number for the table */ + int iRowid, /* Memory cell that contains the rowid to delete */ + int count, /* If non-zero, increment the row change counter */ + Trigger *pTrigger, /* List of triggers to (potentially) fire */ + int onconf /* Default ON CONFLICT policy for triggers */ +){ + Vdbe *v = pParse->pVdbe; /* Vdbe */ + int iOld = 0; /* First register in OLD.* array */ + int iLabel; /* Label resolved to end of generated code */ - if( pEList->nExpr!=1 ) return WHERE_ORDERBY_NORMAL; - pExpr = pEList->a[0].pExpr; - if( pExpr->op!=TK_AGG_FUNCTION ) return 0; - if( NEVER(ExprHasProperty(pExpr, EP_xIsSelect)) ) return 0; - pEList = pExpr->x.pList; - if( pEList==0 || pEList->nExpr!=1 ) return 0; - if( pEList->a[0].pExpr->op!=TK_AGG_COLUMN ) return WHERE_ORDERBY_NORMAL; - assert( !ExprHasProperty(pExpr, EP_IntValue) ); - if( sqlite3StrICmp(pExpr->u.zToken,"min")==0 ){ - return WHERE_ORDERBY_MIN; - }else if( sqlite3StrICmp(pExpr->u.zToken,"max")==0 ){ - return WHERE_ORDERBY_MAX; + /* Vdbe is guaranteed to have been allocated by this stage. */ + assert( v ); + + /* Seek cursor iCur to the row to delete. If this row no longer exists + ** (this can happen if a trigger program has already deleted it), do + ** not attempt to delete it or fire any DELETE triggers. */ + iLabel = sqlite3VdbeMakeLabel(v); + sqlite3VdbeAddOp3(v, OP_NotExists, iCur, iLabel, iRowid); + + /* If there are any triggers to fire, allocate a range of registers to + ** use for the old.* references in the triggers. */ + if( sqlite3FkRequired(pParse, pTab, 0, 0) || pTrigger ){ + u32 mask; /* Mask of OLD.* columns in use */ + int iCol; /* Iterator used while populating OLD.* */ + + /* TODO: Could use temporary registers here. Also could attempt to + ** avoid copying the contents of the rowid register. */ + mask = sqlite3TriggerColmask( + pParse, pTrigger, 0, 0, TRIGGER_BEFORE|TRIGGER_AFTER, pTab, onconf + ); + mask |= sqlite3FkOldmask(pParse, pTab); + iOld = pParse->nMem+1; + pParse->nMem += (1 + pTab->nCol); + + /* Populate the OLD.* pseudo-table register array. These values will be + ** used by any BEFORE and AFTER triggers that exist. */ + sqlite3VdbeAddOp2(v, OP_Copy, iRowid, iOld); + for(iCol=0; iColnCol; iCol++){ + if( mask==0xffffffff || mask&(1<pSelect==0 ){ + sqlite3GenerateRowIndexDelete(pParse, pTab, iCur, 0); + sqlite3VdbeAddOp2(v, OP_Delete, iCur, (count?OPFLAG_NCHANGE:0)); + if( count ){ + sqlite3VdbeChangeP4(v, -1, pTab->zName, P4_TRANSIENT); + } + } + + /* Do any ON CASCADE, SET NULL or SET DEFAULT operations required to + ** handle rows (possibly in other tables) that refer via a foreign key + ** to the row just deleted. */ + sqlite3FkActions(pParse, pTab, 0, iOld); + + /* Invoke AFTER DELETE trigger programs. */ + sqlite3CodeRowTrigger(pParse, pTrigger, + TK_DELETE, 0, TRIGGER_AFTER, pTab, iOld, onconf, iLabel + ); + + /* Jump here if the row had already been deleted before any BEFORE + ** trigger programs were invoked. Or if a trigger program throws a + ** RAISE(IGNORE) exception. */ + sqlite3VdbeResolveLabel(v, iLabel); } /* -** The select statement passed as the first argument is an aggregate query. -** The second argment is the associated aggregate-info object. This -** function tests if the SELECT is of the form: +** This routine generates VDBE code that causes the deletion of all +** index entries associated with a single row of a single table. ** -** SELECT count(*) FROM +** The VDBE must be in a particular state when this routine is called. +** These are the requirements: ** -** where table is a database table, not a sub-select or view. If the query -** does match this pattern, then a pointer to the Table object representing -** is returned. Otherwise, 0 is returned. +** 1. A read/write cursor pointing to pTab, the table containing the row +** to be deleted, must be opened as cursor number "iCur". +** +** 2. Read/write cursors for all indices of pTab must be open as +** cursor number iCur+i for the i-th index. +** +** 3. The "iCur" cursor must be pointing to the row that is to be +** deleted. */ -static Table *isSimpleCount(Select *p, AggInfo *pAggInfo){ - Table *pTab; - Expr *pExpr; - - assert( !p->pGroupBy ); +SQLITE_PRIVATE void sqlite3GenerateRowIndexDelete( + Parse *pParse, /* Parsing and code generating context */ + Table *pTab, /* Table containing the row to be deleted */ + int iCur, /* Cursor number for the table */ + int *aRegIdx /* Only delete if aRegIdx!=0 && aRegIdx[i]>0 */ +){ + int i; + Index *pIdx; + int r1; - if( p->pWhere || p->pEList->nExpr!=1 - || p->pSrc->nSrc!=1 || p->pSrc->a[0].pSelect - ){ - return 0; + for(i=1, pIdx=pTab->pIndex; pIdx; i++, pIdx=pIdx->pNext){ + if( aRegIdx!=0 && aRegIdx[i-1]==0 ) continue; + r1 = sqlite3GenerateIndexKey(pParse, pIdx, iCur, 0, 0); + sqlite3VdbeAddOp3(pParse->pVdbe, OP_IdxDelete, iCur+i, r1,pIdx->nColumn+1); } - pTab = p->pSrc->a[0].pTab; - pExpr = p->pEList->a[0].pExpr; - assert( pTab && !pTab->pSelect && pExpr ); - - if( IsVirtual(pTab) ) return 0; - if( pExpr->op!=TK_AGG_FUNCTION ) return 0; - if( (pAggInfo->aFunc[0].pFunc->flags&SQLITE_FUNC_COUNT)==0 ) return 0; - if( pExpr->flags&EP_Distinct ) return 0; - - return pTab; } /* -** If the source-list item passed as an argument was augmented with an -** INDEXED BY clause, then try to locate the specified index. If there -** was such a clause and the named index cannot be found, return -** SQLITE_ERROR and leave an error in pParse. Otherwise, populate -** pFrom->pIndex and return SQLITE_OK. +** Generate code that will assemble an index key and put it in register +** regOut. The key with be for index pIdx which is an index on pTab. +** iCur is the index of a cursor open on the pTab table and pointing to +** the entry that needs indexing. +** +** Return a register number which is the first in a block of +** registers that holds the elements of the index key. The +** block of registers has already been deallocated by the time +** this routine returns. */ -SQLITE_PRIVATE int sqlite3IndexedByLookup(Parse *pParse, struct SrcList_item *pFrom){ - if( pFrom->pTab && pFrom->zIndex ){ - Table *pTab = pFrom->pTab; - char *zIndex = pFrom->zIndex; - Index *pIdx; - for(pIdx=pTab->pIndex; - pIdx && sqlite3StrICmp(pIdx->zName, zIndex); - pIdx=pIdx->pNext - ); - if( !pIdx ){ - sqlite3ErrorMsg(pParse, "no such index: %s", zIndex, 0); - return SQLITE_ERROR; +SQLITE_PRIVATE int sqlite3GenerateIndexKey( + Parse *pParse, /* Parsing context */ + Index *pIdx, /* The index for which to generate a key */ + int iCur, /* Cursor number for the pIdx->pTable table */ + int regOut, /* Write the new index key to this register */ + int doMakeRec /* Run the OP_MakeRecord instruction if true */ +){ + Vdbe *v = pParse->pVdbe; + int j; + Table *pTab = pIdx->pTable; + int regBase; + int nCol; + + nCol = pIdx->nColumn; + regBase = sqlite3GetTempRange(pParse, nCol+1); + sqlite3VdbeAddOp2(v, OP_Rowid, iCur, regBase+nCol); + for(j=0; jaiColumn[j]; + if( idx==pTab->iPKey ){ + sqlite3VdbeAddOp2(v, OP_SCopy, regBase+nCol, regBase+j); + }else{ + sqlite3VdbeAddOp3(v, OP_Column, iCur, idx, regBase+j); + sqlite3ColumnDefault(v, pTab, idx, -1); } - pFrom->pIndex = pIdx; } - return SQLITE_OK; + if( doMakeRec ){ + const char *zAff; + if( pTab->pSelect || (pParse->db->flags & SQLITE_IdxRealAsInt)!=0 ){ + zAff = 0; + }else{ + zAff = sqlite3IndexAffinityStr(v, pIdx); + } + sqlite3VdbeAddOp3(v, OP_MakeRecord, regBase, nCol+1, regOut); + sqlite3VdbeChangeP4(v, -1, zAff, P4_TRANSIENT); + } + sqlite3ReleaseTempRange(pParse, regBase, nCol+1); + return regBase; } +/************** End of delete.c **********************************************/ +/************** Begin file func.c ********************************************/ /* -** This routine is a Walker callback for "expanding" a SELECT statement. -** "Expanding" means to do the following: -** -** (1) Make sure VDBE cursor numbers have been assigned to every -** element of the FROM clause. +** 2002 February 23 ** -** (2) Fill in the pTabList->a[].pTab fields in the SrcList that -** defines FROM clause. When views appear in the FROM clause, -** fill pTabList->a[].pSelect with a copy of the SELECT statement -** that implements the view. A copy is made of the view's SELECT -** statement so that we can freely modify or delete that statement -** without worrying about messing up the presistent representation -** of the view. +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: ** -** (3) Add terms to the WHERE clause to accomodate the NATURAL keyword -** on joins and the ON and USING clause of joins. +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. ** -** (4) Scan the list of columns in the result set (pEList) looking -** for instances of the "*" operator or the TABLE.* operator. -** If found, expand each "*" to be every column in every table -** and TABLE.* to be every column in TABLE. +************************************************************************* +** This file contains the C functions that implement various SQL +** functions of SQLite. ** +** There is only one exported symbol in this file - the function +** sqliteRegisterBuildinFunctions() found at the bottom of the file. +** All other code has file scope. */ -static int selectExpander(Walker *pWalker, Select *p){ - Parse *pParse = pWalker->pParse; - int i, j, k; - SrcList *pTabList; - ExprList *pEList; - struct SrcList_item *pFrom; - sqlite3 *db = pParse->db; +/* #include */ +/* #include */ - if( db->mallocFailed ){ - return WRC_Abort; +/* +** Return the collating function associated with a function. +*/ +static CollSeq *sqlite3GetFuncCollSeq(sqlite3_context *context){ + return context->pColl; +} + +/* +** Indicate that the accumulator load should be skipped on this +** iteration of the aggregate loop. +*/ +static void sqlite3SkipAccumulatorLoad(sqlite3_context *context){ + context->skipFlag = 1; +} + +/* +** Implementation of the non-aggregate min() and max() functions +*/ +static void minmaxFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + int i; + int mask; /* 0 for min() or 0xffffffff for max() */ + int iBest; + CollSeq *pColl; + + assert( argc>1 ); + mask = sqlite3_user_data(context)==0 ? 0 : -1; + pColl = sqlite3GetFuncCollSeq(context); + assert( pColl ); + assert( mask==-1 || mask==0 ); + iBest = 0; + if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return; + for(i=1; i=0 ){ + testcase( mask==0 ); + iBest = i; + } } - if( NEVER(p->pSrc==0) || (p->selFlags & SF_Expanded)!=0 ){ - return WRC_Prune; + sqlite3_result_value(context, argv[iBest]); +} + +/* +** Return the type of the argument. +*/ +static void typeofFunc( + sqlite3_context *context, + int NotUsed, + sqlite3_value **argv +){ + const char *z = 0; + UNUSED_PARAMETER(NotUsed); + switch( sqlite3_value_type(argv[0]) ){ + case SQLITE_INTEGER: z = "integer"; break; + case SQLITE_TEXT: z = "text"; break; + case SQLITE_FLOAT: z = "real"; break; + case SQLITE_BLOB: z = "blob"; break; + default: z = "null"; break; } - p->selFlags |= SF_Expanded; - pTabList = p->pSrc; - pEList = p->pEList; + sqlite3_result_text(context, z, -1, SQLITE_STATIC); +} - /* Make sure cursor numbers have been assigned to all entries in - ** the FROM clause of the SELECT statement. - */ - sqlite3SrcListAssignCursors(pParse, pTabList); - /* Look up every table named in the FROM clause of the select. If - ** an entry of the FROM clause is a subquery instead of a table or view, - ** then create a transient table structure to describe the subquery. - */ - for(i=0, pFrom=pTabList->a; inSrc; i++, pFrom++){ - Table *pTab; - if( pFrom->pTab!=0 ){ - /* This statement has already been prepared. There is no need - ** to go further. */ - assert( i==0 ); - return WRC_Prune; +/* +** Implementation of the length() function +*/ +static void lengthFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + int len; + + assert( argc==1 ); + UNUSED_PARAMETER(argc); + switch( sqlite3_value_type(argv[0]) ){ + case SQLITE_BLOB: + case SQLITE_INTEGER: + case SQLITE_FLOAT: { + sqlite3_result_int(context, sqlite3_value_bytes(argv[0])); + break; } - if( pFrom->zName==0 ){ -#ifndef SQLITE_OMIT_SUBQUERY - Select *pSel = pFrom->pSelect; - /* A sub-query in the FROM clause of a SELECT */ - assert( pSel!=0 ); - assert( pFrom->pTab==0 ); - sqlite3WalkSelect(pWalker, pSel); - pFrom->pTab = pTab = sqlite3DbMallocZero(db, sizeof(Table)); - if( pTab==0 ) return WRC_Abort; - pTab->dbMem = db->lookaside.bEnabled ? db : 0; - pTab->nRef = 1; - pTab->zName = sqlite3MPrintf(db, "sqlite_subquery_%p_", (void*)pTab); - while( pSel->pPrior ){ pSel = pSel->pPrior; } - selectColumnsFromExprList(pParse, pSel->pEList, &pTab->nCol, &pTab->aCol); - pTab->iPKey = -1; - pTab->tabFlags |= TF_Ephemeral; -#endif - }else{ - /* An ordinary table or view name in the FROM clause */ - assert( pFrom->pTab==0 ); - pFrom->pTab = pTab = - sqlite3LocateTable(pParse,0,pFrom->zName,pFrom->zDatabase); - if( pTab==0 ) return WRC_Abort; - pTab->nRef++; -#if !defined(SQLITE_OMIT_VIEW) || !defined (SQLITE_OMIT_VIRTUALTABLE) - if( pTab->pSelect || IsVirtual(pTab) ){ - /* We reach here if the named table is a really a view */ - if( sqlite3ViewGetColumnNames(pParse, pTab) ) return WRC_Abort; - assert( pFrom->pSelect==0 ); - pFrom->pSelect = sqlite3SelectDup(db, pTab->pSelect, 0); - sqlite3WalkSelect(pWalker, pFrom->pSelect); + case SQLITE_TEXT: { + const unsigned char *z = sqlite3_value_text(argv[0]); + if( z==0 ) return; + len = 0; + while( *z ){ + len++; + SQLITE_SKIP_UTF8(z); } -#endif + sqlite3_result_int(context, len); + break; } - - /* Locate the index named by the INDEXED BY clause, if any. */ - if( sqlite3IndexedByLookup(pParse, pFrom) ){ - return WRC_Abort; + default: { + sqlite3_result_null(context); + break; } } +} - /* Process NATURAL keywords, and ON and USING clauses of joins. - */ - if( db->mallocFailed || sqliteProcessJoin(pParse, p) ){ - return WRC_Abort; - } - - /* For every "*" that occurs in the column list, insert the names of - ** all columns in all tables. And for every TABLE.* insert the names - ** of all columns in TABLE. The parser inserted a special expression - ** with the TK_ALL operator for each "*" that it found in the column list. - ** The following code just has to locate the TK_ALL expressions and expand - ** each one to the list of all columns in all tables. - ** - ** The first loop just checks to see if there are any "*" operators - ** that need expanding. - */ - for(k=0; knExpr; k++){ - Expr *pE = pEList->a[k].pExpr; - if( pE->op==TK_ALL ) break; - assert( pE->op!=TK_DOT || pE->pRight!=0 ); - assert( pE->op!=TK_DOT || (pE->pLeft!=0 && pE->pLeft->op==TK_ID) ); - if( pE->op==TK_DOT && pE->pRight->op==TK_ALL ) break; - } - if( knExpr ){ - /* - ** If we get here it means the result set contains one or more "*" - ** operators that need to be expanded. Loop through each expression - ** in the result set and expand them one by one. - */ - struct ExprList_item *a = pEList->a; - ExprList *pNew = 0; - int flags = pParse->db->flags; - int longNames = (flags & SQLITE_FullColNames)!=0 - && (flags & SQLITE_ShortColNames)==0; - - for(k=0; knExpr; k++){ - Expr *pE = a[k].pExpr; - assert( pE->op!=TK_DOT || pE->pRight!=0 ); - if( pE->op!=TK_ALL && (pE->op!=TK_DOT || pE->pRight->op!=TK_ALL) ){ - /* This particular expression does not need to be expanded. - */ - pNew = sqlite3ExprListAppend(pParse, pNew, a[k].pExpr); - if( pNew ){ - pNew->a[pNew->nExpr-1].zName = a[k].zName; - pNew->a[pNew->nExpr-1].zSpan = a[k].zSpan; - a[k].zName = 0; - a[k].zSpan = 0; - } - a[k].pExpr = 0; - }else{ - /* This expression is a "*" or a "TABLE.*" and needs to be - ** expanded. */ - int tableSeen = 0; /* Set to 1 when TABLE matches */ - char *zTName; /* text of name of TABLE */ - if( pE->op==TK_DOT ){ - assert( pE->pLeft!=0 ); - assert( !ExprHasProperty(pE->pLeft, EP_IntValue) ); - zTName = pE->pLeft->u.zToken; - }else{ - zTName = 0; +/* +** Implementation of the abs() function. +** +** IMP: R-23979-26855 The abs(X) function returns the absolute value of +** the numeric argument X. +*/ +static void absFunc(sqlite3_context *context, int argc, sqlite3_value **argv){ + assert( argc==1 ); + UNUSED_PARAMETER(argc); + switch( sqlite3_value_type(argv[0]) ){ + case SQLITE_INTEGER: { + i64 iVal = sqlite3_value_int64(argv[0]); + if( iVal<0 ){ + if( (iVal<<1)==0 ){ + /* IMP: R-35460-15084 If X is the integer -9223372036854775807 then + ** abs(X) throws an integer overflow error since there is no + ** equivalent positive 64-bit two complement value. */ + sqlite3_result_error(context, "integer overflow", -1); + return; } - for(i=0, pFrom=pTabList->a; inSrc; i++, pFrom++){ - Table *pTab = pFrom->pTab; - char *zTabName = pFrom->zAlias; - if( zTabName==0 ){ - zTabName = pTab->zName; - } - if( db->mallocFailed ) break; - if( zTName && sqlite3StrICmp(zTName, zTabName)!=0 ){ - continue; - } - tableSeen = 1; - for(j=0; jnCol; j++){ - Expr *pExpr, *pRight; - char *zName = pTab->aCol[j].zName; - char *zColname; /* The computed column name */ - char *zToFree; /* Malloced string that needs to be freed */ - Token sColname; /* Computed column name as a token */ + iVal = -iVal; + } + sqlite3_result_int64(context, iVal); + break; + } + case SQLITE_NULL: { + /* IMP: R-37434-19929 Abs(X) returns NULL if X is NULL. */ + sqlite3_result_null(context); + break; + } + default: { + /* Because sqlite3_value_double() returns 0.0 if the argument is not + ** something that can be converted into a number, we have: + ** IMP: R-57326-31541 Abs(X) return 0.0 if X is a string or blob that + ** cannot be converted to a numeric value. + */ + double rVal = sqlite3_value_double(argv[0]); + if( rVal<0 ) rVal = -rVal; + sqlite3_result_double(context, rVal); + break; + } + } +} - /* If a column is marked as 'hidden' (currently only possible - ** for virtual tables), do not include it in the expanded - ** result-set list. - */ - if( IsHiddenColumn(&pTab->aCol[j]) ){ - assert(IsVirtual(pTab)); - continue; - } +/* +** Implementation of the substr() function. +** +** substr(x,p1,p2) returns p2 characters of x[] beginning with p1. +** p1 is 1-indexed. So substr(x,1,1) returns the first character +** of x. If x is text, then we actually count UTF-8 characters. +** If x is a blob, then we count bytes. +** +** If p1 is negative, then we begin abs(p1) from the end of x[]. +** +** If p2 is negative, return the p2 characters preceeding p1. +*/ +static void substrFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + const unsigned char *z; + const unsigned char *z2; + int len; + int p0type; + i64 p1, p2; + int negP2 = 0; - if( i>0 && zTName==0 ){ - struct SrcList_item *pLeft = &pTabList->a[i-1]; - if( (pLeft[1].jointype & JT_NATURAL)!=0 && - columnIndex(pLeft->pTab, zName)>=0 ){ - /* In a NATURAL join, omit the join columns from the - ** table on the right */ - continue; - } - if( sqlite3IdListIndex(pLeft[1].pUsing, zName)>=0 ){ - /* In a join with a USING clause, omit columns in the - ** using clause from the table on the right. */ - continue; - } - } - pRight = sqlite3Expr(db, TK_ID, zName); - zColname = zName; - zToFree = 0; - if( longNames || pTabList->nSrc>1 ){ - Expr *pLeft; - pLeft = sqlite3Expr(db, TK_ID, zTabName); - pExpr = sqlite3PExpr(pParse, TK_DOT, pLeft, pRight, 0); - if( longNames ){ - zColname = sqlite3MPrintf(db, "%s.%s", zTabName, zName); - zToFree = zColname; - } - }else{ - pExpr = pRight; - } - pNew = sqlite3ExprListAppend(pParse, pNew, pExpr); - sColname.z = zColname; - sColname.n = sqlite3Strlen30(zColname); - sqlite3ExprListSetName(pParse, pNew, &sColname, 0); - sqlite3DbFree(db, zToFree); - } - } - if( !tableSeen ){ - if( zTName ){ - sqlite3ErrorMsg(pParse, "no such table: %s", zTName); - }else{ - sqlite3ErrorMsg(pParse, "no tables specified"); - } - } + assert( argc==3 || argc==2 ); + if( sqlite3_value_type(argv[1])==SQLITE_NULL + || (argc==3 && sqlite3_value_type(argv[2])==SQLITE_NULL) + ){ + return; + } + p0type = sqlite3_value_type(argv[0]); + p1 = sqlite3_value_int(argv[1]); + if( p0type==SQLITE_BLOB ){ + len = sqlite3_value_bytes(argv[0]); + z = sqlite3_value_blob(argv[0]); + if( z==0 ) return; + assert( len==sqlite3_value_bytes(argv[0]) ); + }else{ + z = sqlite3_value_text(argv[0]); + if( z==0 ) return; + len = 0; + if( p1<0 ){ + for(z2=z; *z2; len++){ + SQLITE_SKIP_UTF8(z2); } } - sqlite3ExprListDelete(db, pEList); - p->pEList = pNew; } -#if SQLITE_MAX_COLUMN - if( p->pEList && p->pEList->nExpr>db->aLimit[SQLITE_LIMIT_COLUMN] ){ - sqlite3ErrorMsg(pParse, "too many columns in result set"); + if( argc==3 ){ + p2 = sqlite3_value_int(argv[2]); + if( p2<0 ){ + p2 = -p2; + negP2 = 1; + } + }else{ + p2 = sqlite3_context_db_handle(context)->aLimit[SQLITE_LIMIT_LENGTH]; + } + if( p1<0 ){ + p1 += len; + if( p1<0 ){ + p2 += p1; + if( p2<0 ) p2 = 0; + p1 = 0; + } + }else if( p1>0 ){ + p1--; + }else if( p2>0 ){ + p2--; + } + if( negP2 ){ + p1 -= p2; + if( p1<0 ){ + p2 += p1; + p1 = 0; + } + } + assert( p1>=0 && p2>=0 ); + if( p0type!=SQLITE_BLOB ){ + while( *z && p1 ){ + SQLITE_SKIP_UTF8(z); + p1--; + } + for(z2=z; *z2 && p2; p2--){ + SQLITE_SKIP_UTF8(z2); + } + sqlite3_result_text(context, (char*)z, (int)(z2-z), SQLITE_TRANSIENT); + }else{ + if( p1+p2>len ){ + p2 = len-p1; + if( p2<0 ) p2 = 0; + } + sqlite3_result_blob(context, (char*)&z[p1], (int)p2, SQLITE_TRANSIENT); } -#endif - return WRC_Continue; } /* -** No-op routine for the parse-tree walker. -** -** When this routine is the Walker.xExprCallback then expression trees -** are walked without any actions being taken at each node. Presumably, -** when this routine is used for Walker.xExprCallback then -** Walker.xSelectCallback is set to do something useful for every -** subquery in the parser tree. +** Implementation of the round() function */ -static int exprWalkNoop(Walker *NotUsed, Expr *NotUsed2){ - UNUSED_PARAMETER2(NotUsed, NotUsed2); - return WRC_Continue; +#ifndef SQLITE_OMIT_FLOATING_POINT +static void roundFunc(sqlite3_context *context, int argc, sqlite3_value **argv){ + int n = 0; + double r; + char *zBuf; + assert( argc==1 || argc==2 ); + if( argc==2 ){ + if( SQLITE_NULL==sqlite3_value_type(argv[1]) ) return; + n = sqlite3_value_int(argv[1]); + if( n>30 ) n = 30; + if( n<0 ) n = 0; + } + if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return; + r = sqlite3_value_double(argv[0]); + /* If Y==0 and X will fit in a 64-bit int, + ** handle the rounding directly, + ** otherwise use printf. + */ + if( n==0 && r>=0 && rnErr -** and/or pParse->db->mallocFailed. +** Allocate nByte bytes of space using sqlite3_malloc(). If the +** allocation fails, call sqlite3_result_error_nomem() to notify +** the database handle that malloc() has failed and return NULL. +** If nByte is larger than the maximum string or blob length, then +** raise an SQLITE_TOOBIG exception and return NULL. */ -static void sqlite3SelectExpand(Parse *pParse, Select *pSelect){ - Walker w; - w.xSelectCallback = selectExpander; - w.xExprCallback = exprWalkNoop; - w.pParse = pParse; - sqlite3WalkSelect(&w, pSelect); +static void *contextMalloc(sqlite3_context *context, i64 nByte){ + char *z; + sqlite3 *db = sqlite3_context_db_handle(context); + assert( nByte>0 ); + testcase( nByte==db->aLimit[SQLITE_LIMIT_LENGTH] ); + testcase( nByte==db->aLimit[SQLITE_LIMIT_LENGTH]+1 ); + if( nByte>db->aLimit[SQLITE_LIMIT_LENGTH] ){ + sqlite3_result_error_toobig(context); + z = 0; + }else{ + z = sqlite3Malloc((int)nByte); + if( !z ){ + sqlite3_result_error_nomem(context); + } + } + return z; } - -#ifndef SQLITE_OMIT_SUBQUERY /* -** This is a Walker.xSelectCallback callback for the sqlite3SelectTypeInfo() -** interface. -** -** For each FROM-clause subquery, add Column.zType and Column.zColl -** information to the Table structure that represents the result set -** of that subquery. -** -** The Table structure that represents the result set was constructed -** by selectExpander() but the type and collation information was omitted -** at that point because identifiers had not yet been resolved. This -** routine is called after identifier resolution. +** Implementation of the upper() and lower() SQL functions. */ -static int selectAddSubqueryTypeInfo(Walker *pWalker, Select *p){ - Parse *pParse; - int i; - SrcList *pTabList; - struct SrcList_item *pFrom; - - assert( p->selFlags & SF_Resolved ); - assert( (p->selFlags & SF_HasTypeInfo)==0 ); - p->selFlags |= SF_HasTypeInfo; - pParse = pWalker->pParse; - pTabList = p->pSrc; - for(i=0, pFrom=pTabList->a; inSrc; i++, pFrom++){ - Table *pTab = pFrom->pTab; - if( ALWAYS(pTab!=0) && (pTab->tabFlags & TF_Ephemeral)!=0 ){ - /* A sub-query in the FROM clause of a SELECT */ - Select *pSel = pFrom->pSelect; - assert( pSel ); - while( pSel->pPrior ) pSel = pSel->pPrior; - selectAddColumnTypeAndCollation(pParse, pTab->nCol, pTab->aCol, pSel); +static void upperFunc(sqlite3_context *context, int argc, sqlite3_value **argv){ + char *z1; + const char *z2; + int i, n; + UNUSED_PARAMETER(argc); + z2 = (char*)sqlite3_value_text(argv[0]); + n = sqlite3_value_bytes(argv[0]); + /* Verify that the call to _bytes() does not invalidate the _text() pointer */ + assert( z2==(char*)sqlite3_value_text(argv[0]) ); + if( z2 ){ + z1 = contextMalloc(context, ((i64)n)+1); + if( z1 ){ + for(i=0; idb; - if( p->selFlags & SF_HasTypeInfo ) return; - sqlite3SelectExpand(pParse, p); - if( pParse->nErr || db->mallocFailed ) return; - sqlite3ResolveSelectNames(pParse, p, pOuterNC); - if( pParse->nErr || db->mallocFailed ) return; - sqlite3SelectAddTypeInfo(pParse, p); + sqlite_int64 r; + UNUSED_PARAMETER2(NotUsed, NotUsed2); + sqlite3_randomness(sizeof(r), &r); + if( r<0 ){ + /* We need to prevent a random number of 0x8000000000000000 + ** (or -9223372036854775808) since when you do abs() of that + ** number of you get the same value back again. To do this + ** in a way that is testable, mask the sign bit off of negative + ** values, resulting in a positive value. Then take the + ** 2s complement of that positive value. The end result can + ** therefore be no less than -9223372036854775807. + */ + r = -(r & LARGEST_INT64); + } + sqlite3_result_int64(context, r); } /* -** Reset the aggregate accumulator. -** -** The aggregate accumulator is a set of memory cells that hold -** intermediate results while calculating an aggregate. This -** routine simply stores NULLs in all of those memory cells. +** Implementation of randomblob(N). Return a random blob +** that is N bytes long. */ -static void resetAccumulator(Parse *pParse, AggInfo *pAggInfo){ - Vdbe *v = pParse->pVdbe; - int i; - struct AggInfo_func *pFunc; - if( pAggInfo->nFunc+pAggInfo->nColumn==0 ){ - return; - } - for(i=0; inColumn; i++){ - sqlite3VdbeAddOp2(v, OP_Null, 0, pAggInfo->aCol[i].iMem); +static void randomBlob( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + int n; + unsigned char *p; + assert( argc==1 ); + UNUSED_PARAMETER(argc); + n = sqlite3_value_int(argv[0]); + if( n<1 ){ + n = 1; } - for(pFunc=pAggInfo->aFunc, i=0; inFunc; i++, pFunc++){ - sqlite3VdbeAddOp2(v, OP_Null, 0, pFunc->iMem); - if( pFunc->iDistinct>=0 ){ - Expr *pE = pFunc->pExpr; - assert( !ExprHasProperty(pE, EP_xIsSelect) ); - if( pE->x.pList==0 || pE->x.pList->nExpr!=1 ){ - sqlite3ErrorMsg(pParse, "DISTINCT aggregates must have exactly one " - "argument"); - pFunc->iDistinct = -1; - }else{ - KeyInfo *pKeyInfo = keyInfoFromExprList(pParse, pE->x.pList); - sqlite3VdbeAddOp4(v, OP_OpenEphemeral, pFunc->iDistinct, 0, 0, - (char*)pKeyInfo, P4_KEYINFO_HANDOFF); - } - } + p = contextMalloc(context, n); + if( p ){ + sqlite3_randomness(n, p); + sqlite3_result_blob(context, (char*)p, n, sqlite3_free); } } /* -** Invoke the OP_AggFinalize opcode for every aggregate function -** in the AggInfo structure. +** Implementation of the last_insert_rowid() SQL function. The return +** value is the same as the sqlite3_last_insert_rowid() API function. */ -static void finalizeAggFunctions(Parse *pParse, AggInfo *pAggInfo){ - Vdbe *v = pParse->pVdbe; - int i; - struct AggInfo_func *pF; - for(i=0, pF=pAggInfo->aFunc; inFunc; i++, pF++){ - ExprList *pList = pF->pExpr->x.pList; - assert( !ExprHasProperty(pF->pExpr, EP_xIsSelect) ); - sqlite3VdbeAddOp4(v, OP_AggFinal, pF->iMem, pList ? pList->nExpr : 0, 0, - (void*)pF->pFunc, P4_FUNCDEF); - } +static void last_insert_rowid( + sqlite3_context *context, + int NotUsed, + sqlite3_value **NotUsed2 +){ + sqlite3 *db = sqlite3_context_db_handle(context); + UNUSED_PARAMETER2(NotUsed, NotUsed2); + /* IMP: R-51513-12026 The last_insert_rowid() SQL function is a + ** wrapper around the sqlite3_last_insert_rowid() C/C++ interface + ** function. */ + sqlite3_result_int64(context, sqlite3_last_insert_rowid(db)); } /* -** Update the accumulator memory cells for an aggregate based on -** the current cursor position. +** Implementation of the changes() SQL function. +** +** IMP: R-62073-11209 The changes() SQL function is a wrapper +** around the sqlite3_changes() C/C++ function and hence follows the same +** rules for counting changes. */ -static void updateAccumulator(Parse *pParse, AggInfo *pAggInfo){ - Vdbe *v = pParse->pVdbe; - int i; - struct AggInfo_func *pF; - struct AggInfo_col *pC; - - pAggInfo->directMode = 1; - sqlite3ExprCacheClear(pParse); - for(i=0, pF=pAggInfo->aFunc; inFunc; i++, pF++){ - int nArg; - int addrNext = 0; - int regAgg; - ExprList *pList = pF->pExpr->x.pList; - assert( !ExprHasProperty(pF->pExpr, EP_xIsSelect) ); - if( pList ){ - nArg = pList->nExpr; - regAgg = sqlite3GetTempRange(pParse, nArg); - sqlite3ExprCodeExprList(pParse, pList, regAgg, 0); - }else{ - nArg = 0; - regAgg = 0; - } - if( pF->iDistinct>=0 ){ - addrNext = sqlite3VdbeMakeLabel(v); - assert( nArg==1 ); - codeDistinct(pParse, pF->iDistinct, addrNext, 1, regAgg); - } - if( pF->pFunc->flags & SQLITE_FUNC_NEEDCOLL ){ - CollSeq *pColl = 0; - struct ExprList_item *pItem; - int j; - assert( pList!=0 ); /* pList!=0 if pF->pFunc has NEEDCOLL */ - for(j=0, pItem=pList->a; !pColl && jpExpr); - } - if( !pColl ){ - pColl = pParse->db->pDfltColl; - } - sqlite3VdbeAddOp4(v, OP_CollSeq, 0, 0, 0, (char *)pColl, P4_COLLSEQ); - } - sqlite3VdbeAddOp4(v, OP_AggStep, 0, regAgg, pF->iMem, - (void*)pF->pFunc, P4_FUNCDEF); - sqlite3VdbeChangeP5(v, (u8)nArg); - sqlite3ReleaseTempRange(pParse, regAgg, nArg); - sqlite3ExprCacheAffinityChange(pParse, regAgg, nArg); - if( addrNext ){ - sqlite3VdbeResolveLabel(v, addrNext); - sqlite3ExprCacheClear(pParse); - } - } - for(i=0, pC=pAggInfo->aCol; inAccumulator; i++, pC++){ - sqlite3ExprCode(pParse, pC->pExpr, pC->iMem); - } - pAggInfo->directMode = 0; - sqlite3ExprCacheClear(pParse); +static void changes( + sqlite3_context *context, + int NotUsed, + sqlite3_value **NotUsed2 +){ + sqlite3 *db = sqlite3_context_db_handle(context); + UNUSED_PARAMETER2(NotUsed, NotUsed2); + sqlite3_result_int(context, sqlite3_changes(db)); } /* -** Generate code for the SELECT statement given in the p argument. -** -** The results are distributed in various ways depending on the -** contents of the SelectDest structure pointed to by argument pDest -** as follows: -** -** pDest->eDest Result -** ------------ ------------------------------------------- -** SRT_Output Generate a row of output (using the OP_ResultRow -** opcode) for each row in the result set. -** -** SRT_Mem Only valid if the result is a single column. -** Store the first column of the first result row -** in register pDest->iParm then abandon the rest -** of the query. This destination implies "LIMIT 1". -** -** SRT_Set The result must be a single column. Store each -** row of result as the key in table pDest->iParm. -** Apply the affinity pDest->affinity before storing -** results. Used to implement "IN (SELECT ...)". +** Implementation of the total_changes() SQL function. The return value is +** the same as the sqlite3_total_changes() API function. +*/ +static void total_changes( + sqlite3_context *context, + int NotUsed, + sqlite3_value **NotUsed2 +){ + sqlite3 *db = sqlite3_context_db_handle(context); + UNUSED_PARAMETER2(NotUsed, NotUsed2); + /* IMP: R-52756-41993 This function is a wrapper around the + ** sqlite3_total_changes() C/C++ interface. */ + sqlite3_result_int(context, sqlite3_total_changes(db)); +} + +/* +** A structure defining how to do GLOB-style comparisons. +*/ +struct compareInfo { + u8 matchAll; + u8 matchOne; + u8 matchSet; + u8 noCase; +}; + +/* +** For LIKE and GLOB matching on EBCDIC machines, assume that every +** character is exactly one byte in size. Also, all characters are +** able to participate in upper-case-to-lower-case mappings in EBCDIC +** whereas only characters less than 0x80 do in ASCII. +*/ +#if defined(SQLITE_EBCDIC) +# define sqlite3Utf8Read(A,C) (*(A++)) +# define GlogUpperToLower(A) A = sqlite3UpperToLower[A] +#else +# define GlogUpperToLower(A) if( !((A)&~0x7f) ){ A = sqlite3UpperToLower[A]; } +#endif + +static const struct compareInfo globInfo = { '*', '?', '[', 0 }; +/* The correct SQL-92 behavior is for the LIKE operator to ignore +** case. Thus 'a' LIKE 'A' would be true. */ +static const struct compareInfo likeInfoNorm = { '%', '_', 0, 1 }; +/* If SQLITE_CASE_SENSITIVE_LIKE is defined, then the LIKE operator +** is case sensitive causing 'a' LIKE 'A' to be false */ +static const struct compareInfo likeInfoAlt = { '%', '_', 0, 0 }; + +/* +** Compare two UTF-8 strings for equality where the first string can +** potentially be a "glob" expression. Return true (1) if they +** are the same and false (0) if they are different. ** -** SRT_Union Store results as a key in a temporary table pDest->iParm. +** Globbing rules: ** -** SRT_Except Remove results from the temporary table pDest->iParm. +** '*' Matches any sequence of zero or more characters. ** -** SRT_Table Store results in temporary table pDest->iParm. -** This is like SRT_EphemTab except that the table -** is assumed to already be open. +** '?' Matches exactly one character. ** -** SRT_EphemTab Create an temporary table pDest->iParm and store -** the result there. The cursor is left open after -** returning. This is like SRT_Table except that -** this destination uses OP_OpenEphemeral to create -** the table first. +** [...] Matches one character from the enclosed list of +** characters. ** -** SRT_Coroutine Generate a co-routine that returns a new row of -** results each time it is invoked. The entry point -** of the co-routine is stored in register pDest->iParm. +** [^...] Matches one character not in the enclosed list. ** -** SRT_Exists Store a 1 in memory cell pDest->iParm if the result -** set is not empty. +** With the [...] and [^...] matching, a ']' character can be included +** in the list by making it the first character after '[' or '^'. A +** range of characters can be specified using '-'. Example: +** "[a-z]" matches any single lower-case letter. To match a '-', make +** it the last character in the list. ** -** SRT_Discard Throw the results away. This is used by SELECT -** statements within triggers whose only purpose is -** the side-effects of functions. +** This routine is usually quick, but can be N**2 in the worst case. ** -** This routine returns the number of errors. If any errors are -** encountered, then an appropriate error message is left in -** pParse->zErrMsg. +** Hints: to match '*' or '?', put them in "[]". Like this: ** -** This routine does NOT free the Select structure passed in. The -** calling function needs to do that. +** abc[*]xyz Matches "abc*xyz" only */ -SQLITE_PRIVATE int sqlite3Select( - Parse *pParse, /* The parser context */ - Select *p, /* The SELECT statement being coded. */ - SelectDest *pDest /* What to do with the query results */ +static int patternCompare( + const u8 *zPattern, /* The glob pattern */ + const u8 *zString, /* The string to compare against the glob */ + const struct compareInfo *pInfo, /* Information about how to do the compare */ + u32 esc /* The escape character */ ){ - int i, j; /* Loop counters */ - WhereInfo *pWInfo; /* Return from sqlite3WhereBegin() */ - Vdbe *v; /* The virtual machine under construction */ - int isAgg; /* True for select lists like "count(*)" */ - ExprList *pEList; /* List of columns to extract. */ - SrcList *pTabList; /* List of tables to select from */ - Expr *pWhere; /* The WHERE clause. May be NULL */ - ExprList *pOrderBy; /* The ORDER BY clause. May be NULL */ - ExprList *pGroupBy; /* The GROUP BY clause. May be NULL */ - Expr *pHaving; /* The HAVING clause. May be NULL */ - int isDistinct; /* True if the DISTINCT keyword is present */ - int distinct; /* Table to use for the distinct set */ - int rc = 1; /* Value to return from this function */ - int addrSortIndex; /* Address of an OP_OpenEphemeral instruction */ - AggInfo sAggInfo; /* Information used by aggregate queries */ - int iEnd; /* Address of the end of the query */ - sqlite3 *db; /* The database connection */ - - db = pParse->db; - if( p==0 || db->mallocFailed || pParse->nErr ){ - return 1; - } - if( sqlite3AuthCheck(pParse, SQLITE_SELECT, 0, 0, 0) ) return 1; - memset(&sAggInfo, 0, sizeof(sAggInfo)); - - if( IgnorableOrderby(pDest) ){ - assert(pDest->eDest==SRT_Exists || pDest->eDest==SRT_Union || - pDest->eDest==SRT_Except || pDest->eDest==SRT_Discard); - /* If ORDER BY makes no difference in the output then neither does - ** DISTINCT so it can be removed too. */ - sqlite3ExprListDelete(db, p->pOrderBy); - p->pOrderBy = 0; - p->selFlags &= ~SF_Distinct; - } - sqlite3SelectPrep(pParse, p, 0); - pOrderBy = p->pOrderBy; - pTabList = p->pSrc; - pEList = p->pEList; - if( pParse->nErr || db->mallocFailed ){ - goto select_end; - } - isAgg = (p->selFlags & SF_Aggregate)!=0; - assert( pEList!=0 ); - - /* Begin generating code. - */ - v = sqlite3GetVdbe(pParse); - if( v==0 ) goto select_end; - - /* Generate code for all sub-queries in the FROM clause - */ -#if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) - for(i=0; !p->pPrior && inSrc; i++){ - struct SrcList_item *pItem = &pTabList->a[i]; - SelectDest dest; - Select *pSub = pItem->pSelect; - int isAggSub; - - if( pSub==0 || pItem->isPopulated ) continue; - - /* Increment Parse.nHeight by the height of the largest expression - ** tree refered to by this, the parent select. The child select - ** may contain expression trees of at most - ** (SQLITE_MAX_EXPR_DEPTH-Parse.nHeight) height. This is a bit - ** more conservative than necessary, but much easier than enforcing - ** an exact limit. - */ - pParse->nHeight += sqlite3SelectExprHeight(p); + u32 c, c2; + int invert; + int seen; + u8 matchOne = pInfo->matchOne; + u8 matchAll = pInfo->matchAll; + u8 matchSet = pInfo->matchSet; + u8 noCase = pInfo->noCase; + int prevEscape = 0; /* True if the previous character was 'escape' */ - /* Check to see if the subquery can be absorbed into the parent. */ - isAggSub = (pSub->selFlags & SF_Aggregate)!=0; - if( flattenSubquery(pParse, p, i, isAgg, isAggSub) ){ - if( isAggSub ){ - isAgg = 1; - p->selFlags |= SF_Aggregate; + while( (c = sqlite3Utf8Read(zPattern,&zPattern))!=0 ){ + if( !prevEscape && c==matchAll ){ + while( (c=sqlite3Utf8Read(zPattern,&zPattern)) == matchAll + || c == matchOne ){ + if( c==matchOne && sqlite3Utf8Read(zString, &zString)==0 ){ + return 0; + } } - i = -1; + if( c==0 ){ + return 1; + }else if( c==esc ){ + c = sqlite3Utf8Read(zPattern, &zPattern); + if( c==0 ){ + return 0; + } + }else if( c==matchSet ){ + assert( esc==0 ); /* This is GLOB, not LIKE */ + assert( matchSet<0x80 ); /* '[' is a single-byte character */ + while( *zString && patternCompare(&zPattern[-1],zString,pInfo,esc)==0 ){ + SQLITE_SKIP_UTF8(zString); + } + return *zString!=0; + } + while( (c2 = sqlite3Utf8Read(zString,&zString))!=0 ){ + if( noCase ){ + GlogUpperToLower(c2); + GlogUpperToLower(c); + while( c2 != 0 && c2 != c ){ + c2 = sqlite3Utf8Read(zString, &zString); + GlogUpperToLower(c2); + } + }else{ + while( c2 != 0 && c2 != c ){ + c2 = sqlite3Utf8Read(zString, &zString); + } + } + if( c2==0 ) return 0; + if( patternCompare(zPattern,zString,pInfo,esc) ) return 1; + } + return 0; + }else if( !prevEscape && c==matchOne ){ + if( sqlite3Utf8Read(zString, &zString)==0 ){ + return 0; + } + }else if( c==matchSet ){ + u32 prior_c = 0; + assert( esc==0 ); /* This only occurs for GLOB, not LIKE */ + seen = 0; + invert = 0; + c = sqlite3Utf8Read(zString, &zString); + if( c==0 ) return 0; + c2 = sqlite3Utf8Read(zPattern, &zPattern); + if( c2=='^' ){ + invert = 1; + c2 = sqlite3Utf8Read(zPattern, &zPattern); + } + if( c2==']' ){ + if( c==']' ) seen = 1; + c2 = sqlite3Utf8Read(zPattern, &zPattern); + } + while( c2 && c2!=']' ){ + if( c2=='-' && zPattern[0]!=']' && zPattern[0]!=0 && prior_c>0 ){ + c2 = sqlite3Utf8Read(zPattern, &zPattern); + if( c>=prior_c && c<=c2 ) seen = 1; + prior_c = 0; + }else{ + if( c==c2 ){ + seen = 1; + } + prior_c = c2; + } + c2 = sqlite3Utf8Read(zPattern, &zPattern); + } + if( c2==0 || (seen ^ invert)==0 ){ + return 0; + } + }else if( esc==c && !prevEscape ){ + prevEscape = 1; }else{ - sqlite3SelectDestInit(&dest, SRT_EphemTab, pItem->iCursor); - assert( pItem->isPopulated==0 ); - sqlite3Select(pParse, pSub, &dest); - pItem->isPopulated = 1; - } - if( /*pParse->nErr ||*/ db->mallocFailed ){ - goto select_end; - } - pParse->nHeight -= sqlite3SelectExprHeight(p); - pTabList = p->pSrc; - if( !IgnorableOrderby(pDest) ){ - pOrderBy = p->pOrderBy; - } - } - pEList = p->pEList; -#endif - pWhere = p->pWhere; - pGroupBy = p->pGroupBy; - pHaving = p->pHaving; - isDistinct = (p->selFlags & SF_Distinct)!=0; - -#ifndef SQLITE_OMIT_COMPOUND_SELECT - /* If there is are a sequence of queries, do the earlier ones first. - */ - if( p->pPrior ){ - if( p->pRightmost==0 ){ - Select *pLoop, *pRight = 0; - int cnt = 0; - int mxSelect; - for(pLoop=p; pLoop; pLoop=pLoop->pPrior, cnt++){ - pLoop->pRightmost = p; - pLoop->pNext = pRight; - pRight = pLoop; + c2 = sqlite3Utf8Read(zString, &zString); + if( noCase ){ + GlogUpperToLower(c); + GlogUpperToLower(c2); } - mxSelect = db->aLimit[SQLITE_LIMIT_COMPOUND_SELECT]; - if( mxSelect && cnt>mxSelect ){ - sqlite3ErrorMsg(pParse, "too many terms in compound SELECT"); - return 1; + if( c!=c2 ){ + return 0; } + prevEscape = 0; } - return multiSelect(pParse, p, pDest); } -#endif + return *zString==0; +} - /* If writing to memory or generating a set - ** only a single column may be output. - */ -#ifndef SQLITE_OMIT_SUBQUERY - if( checkForMultiColumnSelectError(pParse, pDest, pEList->nExpr) ){ - goto select_end; - } +/* +** Count the number of times that the LIKE operator (or GLOB which is +** just a variation of LIKE) gets called. This is used for testing +** only. +*/ +#ifdef SQLITE_TEST +SQLITE_API int sqlite3_like_count = 0; #endif - /* If possible, rewrite the query to use GROUP BY instead of DISTINCT. - ** GROUP BY might use an index, DISTINCT never does. - */ - assert( p->pGroupBy==0 || (p->selFlags & SF_Aggregate)!=0 ); - if( (p->selFlags & (SF_Distinct|SF_Aggregate))==SF_Distinct ){ - p->pGroupBy = sqlite3ExprListDup(db, p->pEList, 0); - pGroupBy = p->pGroupBy; - p->selFlags &= ~SF_Distinct; - isDistinct = 0; - } - - /* If there is an ORDER BY clause, then this sorting - ** index might end up being unused if the data can be - ** extracted in pre-sorted order. If that is the case, then the - ** OP_OpenEphemeral instruction will be changed to an OP_Noop once - ** we figure out that the sorting index is not needed. The addrSortIndex - ** variable is used to facilitate that change. - */ - if( pOrderBy ){ - KeyInfo *pKeyInfo; - pKeyInfo = keyInfoFromExprList(pParse, pOrderBy); - pOrderBy->iECursor = pParse->nTab++; - p->addrOpenEphm[2] = addrSortIndex = - sqlite3VdbeAddOp4(v, OP_OpenEphemeral, - pOrderBy->iECursor, pOrderBy->nExpr+2, 0, - (char*)pKeyInfo, P4_KEYINFO_HANDOFF); - }else{ - addrSortIndex = -1; - } - /* If the output is destined for a temporary table, open that table. - */ - if( pDest->eDest==SRT_EphemTab ){ - sqlite3VdbeAddOp2(v, OP_OpenEphemeral, pDest->iParm, pEList->nExpr); - } +/* +** Implementation of the like() SQL function. This function implements +** the build-in LIKE operator. The first argument to the function is the +** pattern and the second argument is the string. So, the SQL statements: +** +** A LIKE B +** +** is implemented as like(B,A). +** +** This same function (with a different compareInfo structure) computes +** the GLOB operator. +*/ +static void likeFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + const unsigned char *zA, *zB; + u32 escape = 0; + int nPat; + sqlite3 *db = sqlite3_context_db_handle(context); - /* Set the limiter. - */ - iEnd = sqlite3VdbeMakeLabel(v); - computeLimitRegisters(pParse, p, iEnd); + zB = sqlite3_value_text(argv[0]); + zA = sqlite3_value_text(argv[1]); - /* Open a virtual index to use for the distinct set. + /* Limit the length of the LIKE or GLOB pattern to avoid problems + ** of deep recursion and N*N behavior in patternCompare(). */ - if( isDistinct ){ - KeyInfo *pKeyInfo; - assert( isAgg || pGroupBy ); - distinct = pParse->nTab++; - pKeyInfo = keyInfoFromExprList(pParse, p->pEList); - sqlite3VdbeAddOp4(v, OP_OpenEphemeral, distinct, 0, 0, - (char*)pKeyInfo, P4_KEYINFO_HANDOFF); - }else{ - distinct = -1; + nPat = sqlite3_value_bytes(argv[0]); + testcase( nPat==db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH] ); + testcase( nPat==db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH]+1 ); + if( nPat > db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH] ){ + sqlite3_result_error(context, "LIKE or GLOB pattern too complex", -1); + return; } + assert( zB==sqlite3_value_text(argv[0]) ); /* Encoding did not change */ - /* Aggregate and non-aggregate queries are handled differently */ - if( !isAgg && pGroupBy==0 ){ - /* This case is for non-aggregate queries - ** Begin the database scan - */ - pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, &pOrderBy, 0); - if( pWInfo==0 ) goto select_end; - - /* If sorting index that was created by a prior OP_OpenEphemeral - ** instruction ended up not being needed, then change the OP_OpenEphemeral - ** into an OP_Noop. + if( argc==3 ){ + /* The escape character string must consist of a single UTF-8 character. + ** Otherwise, return an error. */ - if( addrSortIndex>=0 && pOrderBy==0 ){ - sqlite3VdbeChangeToNoop(v, addrSortIndex, 1); - p->addrOpenEphm[2] = -1; + const unsigned char *zEsc = sqlite3_value_text(argv[2]); + if( zEsc==0 ) return; + if( sqlite3Utf8CharLen((char*)zEsc, -1)!=1 ){ + sqlite3_result_error(context, + "ESCAPE expression must be a single character", -1); + return; } + escape = sqlite3Utf8Read(zEsc, &zEsc); + } + if( zA && zB ){ + struct compareInfo *pInfo = sqlite3_user_data(context); +#ifdef SQLITE_TEST + sqlite3_like_count++; +#endif + + sqlite3_result_int(context, patternCompare(zB, zA, pInfo, escape)); + } +} - /* Use the standard inner loop - */ - assert(!isDistinct); - selectInnerLoop(pParse, p, pEList, 0, 0, pOrderBy, -1, pDest, - pWInfo->iContinue, pWInfo->iBreak); - - /* End the database scan loop. - */ - sqlite3WhereEnd(pWInfo); - }else{ - /* This is the processing for aggregate queries */ - NameContext sNC; /* Name context for processing aggregate information */ - int iAMem; /* First Mem address for storing current GROUP BY */ - int iBMem; /* First Mem address for previous GROUP BY */ - int iUseFlag; /* Mem address holding flag indicating that at least - ** one row of the input to the aggregator has been - ** processed */ - int iAbortFlag; /* Mem address which causes query abort if positive */ - int groupBySort; /* Rows come from source in GROUP BY order */ - int addrEnd; /* End of processing for this SELECT */ +/* +** Implementation of the NULLIF(x,y) function. The result is the first +** argument if the arguments are different. The result is NULL if the +** arguments are equal to each other. +*/ +static void nullifFunc( + sqlite3_context *context, + int NotUsed, + sqlite3_value **argv +){ + CollSeq *pColl = sqlite3GetFuncCollSeq(context); + UNUSED_PARAMETER(NotUsed); + if( sqlite3MemCompare(argv[0], argv[1], pColl)!=0 ){ + sqlite3_result_value(context, argv[0]); + } +} - /* Remove any and all aliases between the result set and the - ** GROUP BY clause. - */ - if( pGroupBy ){ - int k; /* Loop counter */ - struct ExprList_item *pItem; /* For looping over expression in a list */ - - for(k=p->pEList->nExpr, pItem=p->pEList->a; k>0; k--, pItem++){ - pItem->iAlias = 0; - } - for(k=pGroupBy->nExpr, pItem=pGroupBy->a; k>0; k--, pItem++){ - pItem->iAlias = 0; - } - } - - - /* Create a label to jump to when we want to abort the query */ - addrEnd = sqlite3VdbeMakeLabel(v); - - /* Convert TK_COLUMN nodes into TK_AGG_COLUMN and make entries in - ** sAggInfo for all TK_AGG_FUNCTION nodes in expressions of the - ** SELECT statement. - */ - memset(&sNC, 0, sizeof(sNC)); - sNC.pParse = pParse; - sNC.pSrcList = pTabList; - sNC.pAggInfo = &sAggInfo; - sAggInfo.nSortingColumn = pGroupBy ? pGroupBy->nExpr+1 : 0; - sAggInfo.pGroupBy = pGroupBy; - sqlite3ExprAnalyzeAggList(&sNC, pEList); - sqlite3ExprAnalyzeAggList(&sNC, pOrderBy); - if( pHaving ){ - sqlite3ExprAnalyzeAggregates(&sNC, pHaving); - } - sAggInfo.nAccumulator = sAggInfo.nColumn; - for(i=0; ix.pList); - } - if( db->mallocFailed ) goto select_end; - - /* Processing for aggregates with GROUP BY is very different and - ** much more complex than aggregates without a GROUP BY. - */ - if( pGroupBy ){ - KeyInfo *pKeyInfo; /* Keying information for the group by clause */ - int j1; /* A-vs-B comparision jump */ - int addrOutputRow; /* Start of subroutine that outputs a result row */ - int regOutputRow; /* Return address register for output subroutine */ - int addrSetAbort; /* Set the abort flag and return */ - int addrTopOfLoop; /* Top of the input loop */ - int addrSortingIdx; /* The OP_OpenEphemeral for the sorting index */ - int addrReset; /* Subroutine for resetting the accumulator */ - int regReset; /* Return address register for reset subroutine */ +/* +** Implementation of the sqlite_version() function. The result is the version +** of the SQLite library that is running. +*/ +static void versionFunc( + sqlite3_context *context, + int NotUsed, + sqlite3_value **NotUsed2 +){ + UNUSED_PARAMETER2(NotUsed, NotUsed2); + /* IMP: R-48699-48617 This function is an SQL wrapper around the + ** sqlite3_libversion() C-interface. */ + sqlite3_result_text(context, sqlite3_libversion(), -1, SQLITE_STATIC); +} - /* If there is a GROUP BY clause we might need a sorting index to - ** implement it. Allocate that sorting index now. If it turns out - ** that we do not need it after all, the OpenEphemeral instruction - ** will be converted into a Noop. - */ - sAggInfo.sortingIdx = pParse->nTab++; - pKeyInfo = keyInfoFromExprList(pParse, pGroupBy); - addrSortingIdx = sqlite3VdbeAddOp4(v, OP_OpenEphemeral, - sAggInfo.sortingIdx, sAggInfo.nSortingColumn, - 0, (char*)pKeyInfo, P4_KEYINFO_HANDOFF); +/* +** Implementation of the sqlite_source_id() function. The result is a string +** that identifies the particular version of the source code used to build +** SQLite. +*/ +static void sourceidFunc( + sqlite3_context *context, + int NotUsed, + sqlite3_value **NotUsed2 +){ + UNUSED_PARAMETER2(NotUsed, NotUsed2); + /* IMP: R-24470-31136 This function is an SQL wrapper around the + ** sqlite3_sourceid() C interface. */ + sqlite3_result_text(context, sqlite3_sourceid(), -1, SQLITE_STATIC); +} - /* Initialize memory locations used by GROUP BY aggregate processing - */ - iUseFlag = ++pParse->nMem; - iAbortFlag = ++pParse->nMem; - regOutputRow = ++pParse->nMem; - addrOutputRow = sqlite3VdbeMakeLabel(v); - regReset = ++pParse->nMem; - addrReset = sqlite3VdbeMakeLabel(v); - iAMem = pParse->nMem + 1; - pParse->nMem += pGroupBy->nExpr; - iBMem = pParse->nMem + 1; - pParse->nMem += pGroupBy->nExpr; - sqlite3VdbeAddOp2(v, OP_Integer, 0, iAbortFlag); - VdbeComment((v, "clear abort flag")); - sqlite3VdbeAddOp2(v, OP_Integer, 0, iUseFlag); - VdbeComment((v, "indicate accumulator empty")); +/* +** Implementation of the sqlite_log() function. This is a wrapper around +** sqlite3_log(). The return value is NULL. The function exists purely for +** its side-effects. +*/ +static void errlogFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + UNUSED_PARAMETER(argc); + UNUSED_PARAMETER(context); + sqlite3_log(sqlite3_value_int(argv[0]), "%s", sqlite3_value_text(argv[1])); +} - /* Begin a loop that will extract all source rows in GROUP BY order. - ** This might involve two separate loops with an OP_Sort in between, or - ** it might be a single loop that uses an index to extract information - ** in the right order to begin with. - */ - sqlite3VdbeAddOp2(v, OP_Gosub, regReset, addrReset); - pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, &pGroupBy, 0); - if( pWInfo==0 ) goto select_end; - if( pGroupBy==0 ){ - /* The optimizer is able to deliver rows in group by order so - ** we do not have to sort. The OP_OpenEphemeral table will be - ** cancelled later because we still need to use the pKeyInfo - */ - pGroupBy = p->pGroupBy; - groupBySort = 0; - }else{ - /* Rows are coming out in undetermined order. We have to push - ** each row into a sorting index, terminate the first loop, - ** then loop over the sorting index in order to get the output - ** in sorted order - */ - int regBase; - int regRecord; - int nCol; - int nGroupBy; +/* +** Implementation of the sqlite_compileoption_used() function. +** The result is an integer that identifies if the compiler option +** was used to build SQLite. +*/ +#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS +static void compileoptionusedFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + const char *zOptName; + assert( argc==1 ); + UNUSED_PARAMETER(argc); + /* IMP: R-39564-36305 The sqlite_compileoption_used() SQL + ** function is a wrapper around the sqlite3_compileoption_used() C/C++ + ** function. + */ + if( (zOptName = (const char*)sqlite3_value_text(argv[0]))!=0 ){ + sqlite3_result_int(context, sqlite3_compileoption_used(zOptName)); + } +} +#endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */ - groupBySort = 1; - nGroupBy = pGroupBy->nExpr; - nCol = nGroupBy + 1; - j = nGroupBy+1; - for(i=0; i=j ){ - nCol++; - j++; - } - } - regBase = sqlite3GetTempRange(pParse, nCol); - sqlite3ExprCacheClear(pParse); - sqlite3ExprCodeExprList(pParse, pGroupBy, regBase, 0); - sqlite3VdbeAddOp2(v, OP_Sequence, sAggInfo.sortingIdx,regBase+nGroupBy); - j = nGroupBy+1; - for(i=0; iiSorterColumn>=j ){ - int r1 = j + regBase; - int r2; +/* +** Implementation of the sqlite_compileoption_get() function. +** The result is a string that identifies the compiler options +** used to build SQLite. +*/ +#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS +static void compileoptiongetFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + int n; + assert( argc==1 ); + UNUSED_PARAMETER(argc); + /* IMP: R-04922-24076 The sqlite_compileoption_get() SQL function + ** is a wrapper around the sqlite3_compileoption_get() C/C++ function. + */ + n = sqlite3_value_int(argv[0]); + sqlite3_result_text(context, sqlite3_compileoption_get(n), -1, SQLITE_STATIC); +} +#endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */ - r2 = sqlite3ExprCodeGetColumn(pParse, - pCol->pTab, pCol->iColumn, pCol->iTable, r1, 0); - if( r1!=r2 ){ - sqlite3VdbeAddOp2(v, OP_SCopy, r2, r1); - } - j++; - } - } - regRecord = sqlite3GetTempReg(pParse); - sqlite3VdbeAddOp3(v, OP_MakeRecord, regBase, nCol, regRecord); - sqlite3VdbeAddOp2(v, OP_IdxInsert, sAggInfo.sortingIdx, regRecord); - sqlite3ReleaseTempReg(pParse, regRecord); - sqlite3ReleaseTempRange(pParse, regBase, nCol); - sqlite3WhereEnd(pWInfo); - sqlite3VdbeAddOp2(v, OP_Sort, sAggInfo.sortingIdx, addrEnd); - VdbeComment((v, "GROUP BY sort")); - sAggInfo.useSortingIdx = 1; - sqlite3ExprCacheClear(pParse); - } +/* Array for converting from half-bytes (nybbles) into ASCII hex +** digits. */ +static const char hexdigits[] = { + '0', '1', '2', '3', '4', '5', '6', '7', + '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' +}; - /* Evaluate the current GROUP BY terms and store in b0, b1, b2... - ** (b0 is memory location iBMem+0, b1 is iBMem+1, and so forth) - ** Then compare the current GROUP BY terms against the GROUP BY terms - ** from the previous row currently stored in a0, a1, a2... - */ - addrTopOfLoop = sqlite3VdbeCurrentAddr(v); - sqlite3ExprCacheClear(pParse); - for(j=0; jnExpr; j++){ - if( groupBySort ){ - sqlite3VdbeAddOp3(v, OP_Column, sAggInfo.sortingIdx, j, iBMem+j); - }else{ - sAggInfo.directMode = 1; - sqlite3ExprCode(pParse, pGroupBy->a[j].pExpr, iBMem+j); +/* +** EXPERIMENTAL - This is not an official function. The interface may +** change. This function may disappear. Do not write code that depends +** on this function. +** +** Implementation of the QUOTE() function. This function takes a single +** argument. If the argument is numeric, the return value is the same as +** the argument. If the argument is NULL, the return value is the string +** "NULL". Otherwise, the argument is enclosed in single quotes with +** single-quote escapes. +*/ +static void quoteFunc(sqlite3_context *context, int argc, sqlite3_value **argv){ + assert( argc==1 ); + UNUSED_PARAMETER(argc); + switch( sqlite3_value_type(argv[0]) ){ + case SQLITE_INTEGER: + case SQLITE_FLOAT: { + sqlite3_result_value(context, argv[0]); + break; + } + case SQLITE_BLOB: { + char *zText = 0; + char const *zBlob = sqlite3_value_blob(argv[0]); + int nBlob = sqlite3_value_bytes(argv[0]); + assert( zBlob==sqlite3_value_blob(argv[0]) ); /* No encoding change */ + zText = (char *)contextMalloc(context, (2*(i64)nBlob)+4); + if( zText ){ + int i; + for(i=0; i>4)&0x0F]; + zText[(i*2)+3] = hexdigits[(zBlob[i])&0x0F]; } + zText[(nBlob*2)+2] = '\''; + zText[(nBlob*2)+3] = '\0'; + zText[0] = 'X'; + zText[1] = '\''; + sqlite3_result_text(context, zText, -1, SQLITE_TRANSIENT); + sqlite3_free(zText); } - sqlite3VdbeAddOp4(v, OP_Compare, iAMem, iBMem, pGroupBy->nExpr, - (char*)pKeyInfo, P4_KEYINFO); - j1 = sqlite3VdbeCurrentAddr(v); - sqlite3VdbeAddOp3(v, OP_Jump, j1+1, 0, j1+1); - - /* Generate code that runs whenever the GROUP BY changes. - ** Changes in the GROUP BY are detected by the previous code - ** block. If there were no changes, this block is skipped. - ** - ** This code copies current group by terms in b0,b1,b2,... - ** over to a0,a1,a2. It then calls the output subroutine - ** and resets the aggregate accumulator registers in preparation - ** for the next GROUP BY batch. - */ - sqlite3ExprCodeMove(pParse, iBMem, iAMem, pGroupBy->nExpr); - sqlite3VdbeAddOp2(v, OP_Gosub, regOutputRow, addrOutputRow); - VdbeComment((v, "output one row")); - sqlite3VdbeAddOp2(v, OP_IfPos, iAbortFlag, addrEnd); - VdbeComment((v, "check abort flag")); - sqlite3VdbeAddOp2(v, OP_Gosub, regReset, addrReset); - VdbeComment((v, "reset accumulator")); - - /* Update the aggregate accumulators based on the content of - ** the current row - */ - sqlite3VdbeJumpHere(v, j1); - updateAccumulator(pParse, &sAggInfo); - sqlite3VdbeAddOp2(v, OP_Integer, 1, iUseFlag); - VdbeComment((v, "indicate data in accumulator")); - - /* End of the loop - */ - if( groupBySort ){ - sqlite3VdbeAddOp2(v, OP_Next, sAggInfo.sortingIdx, addrTopOfLoop); - }else{ - sqlite3WhereEnd(pWInfo); - sqlite3VdbeChangeToNoop(v, addrSortingIdx, 1); - } - - /* Output the final row of result - */ - sqlite3VdbeAddOp2(v, OP_Gosub, regOutputRow, addrOutputRow); - VdbeComment((v, "output final row")); - - /* Jump over the subroutines - */ - sqlite3VdbeAddOp2(v, OP_Goto, 0, addrEnd); - - /* Generate a subroutine that outputs a single row of the result - ** set. This subroutine first looks at the iUseFlag. If iUseFlag - ** is less than or equal to zero, the subroutine is a no-op. If - ** the processing calls for the query to abort, this subroutine - ** increments the iAbortFlag memory location before returning in - ** order to signal the caller to abort. - */ - addrSetAbort = sqlite3VdbeCurrentAddr(v); - sqlite3VdbeAddOp2(v, OP_Integer, 1, iAbortFlag); - VdbeComment((v, "set abort flag")); - sqlite3VdbeAddOp1(v, OP_Return, regOutputRow); - sqlite3VdbeResolveLabel(v, addrOutputRow); - addrOutputRow = sqlite3VdbeCurrentAddr(v); - sqlite3VdbeAddOp2(v, OP_IfPos, iUseFlag, addrOutputRow+2); - VdbeComment((v, "Groupby result generator entry point")); - sqlite3VdbeAddOp1(v, OP_Return, regOutputRow); - finalizeAggFunctions(pParse, &sAggInfo); - sqlite3ExprIfFalse(pParse, pHaving, addrOutputRow+1, SQLITE_JUMPIFNULL); - selectInnerLoop(pParse, p, p->pEList, 0, 0, pOrderBy, - distinct, pDest, - addrOutputRow+1, addrSetAbort); - sqlite3VdbeAddOp1(v, OP_Return, regOutputRow); - VdbeComment((v, "end groupby result generator")); - - /* Generate a subroutine that will reset the group-by accumulator - */ - sqlite3VdbeResolveLabel(v, addrReset); - resetAccumulator(pParse, &sAggInfo); - sqlite3VdbeAddOp1(v, OP_Return, regReset); - - } /* endif pGroupBy. Begin aggregate queries without GROUP BY: */ - else { - ExprList *pDel = 0; -#ifndef SQLITE_OMIT_BTREECOUNT - Table *pTab; - if( (pTab = isSimpleCount(p, &sAggInfo))!=0 ){ - /* If isSimpleCount() returns a pointer to a Table structure, then - ** the SQL statement is of the form: - ** - ** SELECT count(*) FROM - ** - ** where the Table structure returned represents table . - ** - ** This statement is so common that it is optimized specially. The - ** OP_Count instruction is executed either on the intkey table that - ** contains the data for table or on one of its indexes. It - ** is better to execute the op on an index, as indexes are almost - ** always spread across less pages than their corresponding tables. - */ - const int iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema); - const int iCsr = pParse->nTab++; /* Cursor to scan b-tree */ - Index *pIdx; /* Iterator variable */ - KeyInfo *pKeyInfo = 0; /* Keyinfo for scanned index */ - Index *pBest = 0; /* Best index found so far */ - int iRoot = pTab->tnum; /* Root page of scanned b-tree */ - - sqlite3CodeVerifySchema(pParse, iDb); - sqlite3TableLock(pParse, iDb, pTab->tnum, 0, pTab->zName); - - /* Search for the index that has the least amount of columns. If - ** there is such an index, and it has less columns than the table - ** does, then we can assume that it consumes less space on disk and - ** will therefore be cheaper to scan to determine the query result. - ** In this case set iRoot to the root page number of the index b-tree - ** and pKeyInfo to the KeyInfo structure required to navigate the - ** index. - ** - ** In practice the KeyInfo structure will not be used. It is only - ** passed to keep OP_OpenRead happy. - */ - for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){ - if( !pBest || pIdx->nColumnnColumn ){ - pBest = pIdx; - } - } - if( pBest && pBest->nColumnnCol ){ - iRoot = pBest->tnum; - pKeyInfo = sqlite3IndexKeyinfo(pParse, pBest); - } + break; + } + case SQLITE_TEXT: { + int i,j; + u64 n; + const unsigned char *zArg = sqlite3_value_text(argv[0]); + char *z; - /* Open a read-only cursor, execute the OP_Count, close the cursor. */ - sqlite3VdbeAddOp3(v, OP_OpenRead, iCsr, iRoot, iDb); - if( pKeyInfo ){ - sqlite3VdbeChangeP4(v, -1, (char *)pKeyInfo, P4_KEYINFO_HANDOFF); - } - sqlite3VdbeAddOp2(v, OP_Count, iCsr, sAggInfo.aFunc[0].iMem); - sqlite3VdbeAddOp1(v, OP_Close, iCsr); - }else -#endif /* SQLITE_OMIT_BTREECOUNT */ - { - /* Check if the query is of one of the following forms: - ** - ** SELECT min(x) FROM ... - ** SELECT max(x) FROM ... - ** - ** If it is, then ask the code in where.c to attempt to sort results - ** as if there was an "ORDER ON x" or "ORDER ON x DESC" clause. - ** If where.c is able to produce results sorted in this order, then - ** add vdbe code to break out of the processing loop after the - ** first iteration (since the first iteration of the loop is - ** guaranteed to operate on the row with the minimum or maximum - ** value of x, the only row required). - ** - ** A special flag must be passed to sqlite3WhereBegin() to slightly - ** modify behaviour as follows: - ** - ** + If the query is a "SELECT min(x)", then the loop coded by - ** where.c should not iterate over any values with a NULL value - ** for x. - ** - ** + The optimizer code in where.c (the thing that decides which - ** index or indices to use) should place a different priority on - ** satisfying the 'ORDER BY' clause than it does in other cases. - ** Refer to code and comments in where.c for details. - */ - ExprList *pMinMax = 0; - u8 flag = minMaxQuery(p); - if( flag ){ - assert( !ExprHasProperty(p->pEList->a[0].pExpr, EP_xIsSelect) ); - pMinMax = sqlite3ExprListDup(db, p->pEList->a[0].pExpr->x.pList,0); - pDel = pMinMax; - if( pMinMax && !db->mallocFailed ){ - pMinMax->a[0].sortOrder = flag!=WHERE_ORDERBY_MIN ?1:0; - pMinMax->a[0].pExpr->op = TK_COLUMN; + if( zArg==0 ) return; + for(i=0, n=0; zArg[i]; i++){ if( zArg[i]=='\'' ) n++; } + z = contextMalloc(context, ((i64)i)+((i64)n)+3); + if( z ){ + z[0] = '\''; + for(i=0, j=1; zArg[i]; i++){ + z[j++] = zArg[i]; + if( zArg[i]=='\'' ){ + z[j++] = '\''; } } - - /* This case runs if the aggregate has no GROUP BY clause. The - ** processing is much simpler since there is only a single row - ** of output. - */ - resetAccumulator(pParse, &sAggInfo); - pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, &pMinMax, flag); - if( pWInfo==0 ){ - sqlite3ExprListDelete(db, pDel); - goto select_end; - } - updateAccumulator(pParse, &sAggInfo); - if( !pMinMax && flag ){ - sqlite3VdbeAddOp2(v, OP_Goto, 0, pWInfo->iBreak); - VdbeComment((v, "%s() by index", - (flag==WHERE_ORDERBY_MIN?"min":"max"))); - } - sqlite3WhereEnd(pWInfo); - finalizeAggFunctions(pParse, &sAggInfo); + z[j++] = '\''; + z[j] = 0; + sqlite3_result_text(context, z, j, sqlite3_free); } - - pOrderBy = 0; - sqlite3ExprIfFalse(pParse, pHaving, addrEnd, SQLITE_JUMPIFNULL); - selectInnerLoop(pParse, p, p->pEList, 0, 0, 0, -1, - pDest, addrEnd, addrEnd); - sqlite3ExprListDelete(db, pDel); + break; + } + default: { + assert( sqlite3_value_type(argv[0])==SQLITE_NULL ); + sqlite3_result_text(context, "NULL", 4, SQLITE_STATIC); + break; } - sqlite3VdbeResolveLabel(v, addrEnd); - - } /* endif aggregate query */ - - /* If there is an ORDER BY clause, then we need to sort the results - ** and send them to the callback one by one. - */ - if( pOrderBy ){ - generateSortTail(pParse, p, v, pEList->nExpr, pDest); - } - - /* Jump here to skip this query - */ - sqlite3VdbeResolveLabel(v, iEnd); - - /* The SELECT was successfully coded. Set the return code to 0 - ** to indicate no errors. - */ - rc = 0; - - /* Control jumps to here if an error is encountered above, or upon - ** successful coding of the SELECT. - */ -select_end: - - /* Identify column names if results of the SELECT are to be output. - */ - if( rc==SQLITE_OK && pDest->eDest==SRT_Output ){ - generateColumnNames(pParse, pTabList, pEList); } - - sqlite3DbFree(db, sAggInfo.aCol); - sqlite3DbFree(db, sAggInfo.aFunc); - return rc; } -#if defined(SQLITE_DEBUG) /* -******************************************************************************* -** The following code is used for testing and debugging only. The code -** that follows does not appear in normal builds. -** -** These routines are used to print out the content of all or part of a -** parse structures such as Select or Expr. Such printouts are useful -** for helping to understand what is happening inside the code generator -** during the execution of complex SELECT statements. -** -** These routine are not called anywhere from within the normal -** code base. Then are intended to be called from within the debugger -** or from temporary "printf" statements inserted for debugging. +** The hex() function. Interpret the argument as a blob. Return +** a hexadecimal rendering as text. */ -SQLITE_PRIVATE void sqlite3PrintExpr(Expr *p){ - if( !ExprHasProperty(p, EP_IntValue) && p->u.zToken ){ - sqlite3DebugPrintf("(%s", p->u.zToken); - }else{ - sqlite3DebugPrintf("(%d", p->op); - } - if( p->pLeft ){ - sqlite3DebugPrintf(" "); - sqlite3PrintExpr(p->pLeft); - } - if( p->pRight ){ - sqlite3DebugPrintf(" "); - sqlite3PrintExpr(p->pRight); - } - sqlite3DebugPrintf(")"); -} -SQLITE_PRIVATE void sqlite3PrintExprList(ExprList *pList){ - int i; - for(i=0; inExpr; i++){ - sqlite3PrintExpr(pList->a[i].pExpr); - if( inExpr-1 ){ - sqlite3DebugPrintf(", "); - } - } -} -SQLITE_PRIVATE void sqlite3PrintSelect(Select *p, int indent){ - sqlite3DebugPrintf("%*sSELECT(%p) ", indent, "", p); - sqlite3PrintExprList(p->pEList); - sqlite3DebugPrintf("\n"); - if( p->pSrc ){ - char *zPrefix; - int i; - zPrefix = "FROM"; - for(i=0; ipSrc->nSrc; i++){ - struct SrcList_item *pItem = &p->pSrc->a[i]; - sqlite3DebugPrintf("%*s ", indent+6, zPrefix); - zPrefix = ""; - if( pItem->pSelect ){ - sqlite3DebugPrintf("(\n"); - sqlite3PrintSelect(pItem->pSelect, indent+10); - sqlite3DebugPrintf("%*s)", indent+8, ""); - }else if( pItem->zName ){ - sqlite3DebugPrintf("%s", pItem->zName); - } - if( pItem->pTab ){ - sqlite3DebugPrintf("(table: %s)", pItem->pTab->zName); - } - if( pItem->zAlias ){ - sqlite3DebugPrintf(" AS %s", pItem->zAlias); - } - if( ipSrc->nSrc-1 ){ - sqlite3DebugPrintf(","); - } - sqlite3DebugPrintf("\n"); +static void hexFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + int i, n; + const unsigned char *pBlob; + char *zHex, *z; + assert( argc==1 ); + UNUSED_PARAMETER(argc); + pBlob = sqlite3_value_blob(argv[0]); + n = sqlite3_value_bytes(argv[0]); + assert( pBlob==sqlite3_value_blob(argv[0]) ); /* No encoding change */ + z = zHex = contextMalloc(context, ((i64)n)*2 + 1); + if( zHex ){ + for(i=0; i>4)&0xf]; + *(z++) = hexdigits[c&0xf]; } - } - if( p->pWhere ){ - sqlite3DebugPrintf("%*s WHERE ", indent, ""); - sqlite3PrintExpr(p->pWhere); - sqlite3DebugPrintf("\n"); - } - if( p->pGroupBy ){ - sqlite3DebugPrintf("%*s GROUP BY ", indent, ""); - sqlite3PrintExprList(p->pGroupBy); - sqlite3DebugPrintf("\n"); - } - if( p->pHaving ){ - sqlite3DebugPrintf("%*s HAVING ", indent, ""); - sqlite3PrintExpr(p->pHaving); - sqlite3DebugPrintf("\n"); - } - if( p->pOrderBy ){ - sqlite3DebugPrintf("%*s ORDER BY ", indent, ""); - sqlite3PrintExprList(p->pOrderBy); - sqlite3DebugPrintf("\n"); + *z = 0; + sqlite3_result_text(context, zHex, n*2, sqlite3_free); } } -/* End of the structure debug printing code -*****************************************************************************/ -#endif /* defined(SQLITE_TEST) || defined(SQLITE_DEBUG) */ - -/************** End of select.c **********************************************/ -/************** Begin file table.c *******************************************/ -/* -** 2001 September 15 -** -** The author disclaims copyright to this source code. In place of -** a legal notice, here is a blessing: -** -** May you do good and not evil. -** May you find forgiveness for yourself and forgive others. -** May you share freely, never taking more than you give. -** -************************************************************************* -** This file contains the sqlite3_get_table() and sqlite3_free_table() -** interface routines. These are just wrappers around the main -** interface routine of sqlite3_exec(). -** -** These routines are in a separate files so that they will not be linked -** if they are not used. -** -** $Id: table.c,v 1.40 2009/04/10 14:28:00 drh Exp $ -*/ - -#ifndef SQLITE_OMIT_GET_TABLE /* -** This structure is used to pass data from sqlite3_get_table() through -** to the callback function is uses to build the result. +** The zeroblob(N) function returns a zero-filled blob of size N bytes. */ -typedef struct TabResult { - char **azResult; /* Accumulated output */ - char *zErrMsg; /* Error message text, if an error occurs */ - int nAlloc; /* Slots allocated for azResult[] */ - int nRow; /* Number of rows in the result */ - int nColumn; /* Number of columns in the result */ - int nData; /* Slots used in azResult[]. (nRow+1)*nColumn */ - int rc; /* Return code from sqlite3_exec() */ -} TabResult; +static void zeroblobFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + i64 n; + sqlite3 *db = sqlite3_context_db_handle(context); + assert( argc==1 ); + UNUSED_PARAMETER(argc); + n = sqlite3_value_int64(argv[0]); + testcase( n==db->aLimit[SQLITE_LIMIT_LENGTH] ); + testcase( n==db->aLimit[SQLITE_LIMIT_LENGTH]+1 ); + if( n>db->aLimit[SQLITE_LIMIT_LENGTH] ){ + sqlite3_result_error_toobig(context); + }else{ + sqlite3_result_zeroblob(context, (int)n); /* IMP: R-00293-64994 */ + } +} /* -** This routine is called once for each row in the result table. Its job -** is to fill in the TabResult structure appropriately, allocating new -** memory as necessary. +** The replace() function. Three arguments are all strings: call +** them A, B, and C. The result is also a string which is derived +** from A by replacing every occurance of B with C. The match +** must be exact. Collating sequences are not used. */ -static int sqlite3_get_table_cb(void *pArg, int nCol, char **argv, char **colv){ - TabResult *p = (TabResult*)pArg; /* Result accumulator */ - int need; /* Slots needed in p->azResult[] */ - int i; /* Loop counter */ - char *z; /* A single column of result */ +static void replaceFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + const unsigned char *zStr; /* The input string A */ + const unsigned char *zPattern; /* The pattern string B */ + const unsigned char *zRep; /* The replacement string C */ + unsigned char *zOut; /* The output */ + int nStr; /* Size of zStr */ + int nPattern; /* Size of zPattern */ + int nRep; /* Size of zRep */ + i64 nOut; /* Maximum size of zOut */ + int loopLimit; /* Last zStr[] that might match zPattern[] */ + int i, j; /* Loop counters */ - /* Make sure there is enough space in p->azResult to hold everything - ** we need to remember from this invocation of the callback. - */ - if( p->nRow==0 && argv!=0 ){ - need = nCol*2; - }else{ - need = nCol; + assert( argc==3 ); + UNUSED_PARAMETER(argc); + zStr = sqlite3_value_text(argv[0]); + if( zStr==0 ) return; + nStr = sqlite3_value_bytes(argv[0]); + assert( zStr==sqlite3_value_text(argv[0]) ); /* No encoding change */ + zPattern = sqlite3_value_text(argv[1]); + if( zPattern==0 ){ + assert( sqlite3_value_type(argv[1])==SQLITE_NULL + || sqlite3_context_db_handle(context)->mallocFailed ); + return; } - if( p->nData + need > p->nAlloc ){ - char **azNew; - p->nAlloc = p->nAlloc*2 + need; - azNew = sqlite3_realloc( p->azResult, sizeof(char*)*p->nAlloc ); - if( azNew==0 ) goto malloc_failed; - p->azResult = azNew; + if( zPattern[0]==0 ){ + assert( sqlite3_value_type(argv[1])!=SQLITE_NULL ); + sqlite3_result_value(context, argv[0]); + return; } - - /* If this is the first row, then generate an extra row containing - ** the names of all columns. - */ - if( p->nRow==0 ){ - p->nColumn = nCol; - for(i=0; iazResult[p->nData++] = z; - } - }else if( p->nColumn!=nCol ){ - sqlite3_free(p->zErrMsg); - p->zErrMsg = sqlite3_mprintf( - "sqlite3_get_table() called with two or more incompatible queries" - ); - p->rc = SQLITE_ERROR; - return 1; + nPattern = sqlite3_value_bytes(argv[1]); + assert( zPattern==sqlite3_value_text(argv[1]) ); /* No encoding change */ + zRep = sqlite3_value_text(argv[2]); + if( zRep==0 ) return; + nRep = sqlite3_value_bytes(argv[2]); + assert( zRep==sqlite3_value_text(argv[2]) ); + nOut = nStr + 1; + assert( nOutaLimit[SQLITE_LIMIT_LENGTH] ); + testcase( nOut-2==db->aLimit[SQLITE_LIMIT_LENGTH] ); + if( nOut-1>db->aLimit[SQLITE_LIMIT_LENGTH] ){ + sqlite3_result_error_toobig(context); + sqlite3_free(zOut); + return; } - p->azResult[p->nData++] = z; + zOld = zOut; + zOut = sqlite3_realloc(zOut, (int)nOut); + if( zOut==0 ){ + sqlite3_result_error_nomem(context); + sqlite3_free(zOld); + return; + } + memcpy(&zOut[j], zRep, nRep); + j += nRep; + i += nPattern-1; } - p->nRow++; } - return 0; - -malloc_failed: - p->rc = SQLITE_NOMEM; - return 1; + assert( j+nStr-i+1==nOut ); + memcpy(&zOut[j], &zStr[i], nStr-i); + j += nStr - i; + assert( j<=nOut ); + zOut[j] = 0; + sqlite3_result_text(context, (char*)zOut, j, sqlite3_free); } /* -** Query the database. But instead of invoking a callback for each row, -** malloc() for space to hold the result and return the entire results -** at the conclusion of the call. -** -** The result that is written to ***pazResult is held in memory obtained -** from malloc(). But the caller cannot free this memory directly. -** Instead, the entire table should be passed to sqlite3_free_table() when -** the calling procedure is finished using it. +** Implementation of the TRIM(), LTRIM(), and RTRIM() functions. +** The userdata is 0x1 for left trim, 0x2 for right trim, 0x3 for both. */ -SQLITE_API int sqlite3_get_table( - sqlite3 *db, /* The database on which the SQL executes */ - const char *zSql, /* The SQL to be executed */ - char ***pazResult, /* Write the result table here */ - int *pnRow, /* Write the number of rows in the result here */ - int *pnColumn, /* Write the number of columns of result here */ - char **pzErrMsg /* Write error messages here */ +static void trimFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv ){ - int rc; - TabResult res; + const unsigned char *zIn; /* Input string */ + const unsigned char *zCharSet; /* Set of characters to trim */ + int nIn; /* Number of bytes in input */ + int flags; /* 1: trimleft 2: trimright 3: trim */ + int i; /* Loop counter */ + unsigned char *aLen = 0; /* Length of each character in zCharSet */ + unsigned char **azChar = 0; /* Individual characters in zCharSet */ + int nChar; /* Number of characters in zCharSet */ - *pazResult = 0; - if( pnColumn ) *pnColumn = 0; - if( pnRow ) *pnRow = 0; - if( pzErrMsg ) *pzErrMsg = 0; - res.zErrMsg = 0; - res.nRow = 0; - res.nColumn = 0; - res.nData = 1; - res.nAlloc = 20; - res.rc = SQLITE_OK; - res.azResult = sqlite3_malloc(sizeof(char*)*res.nAlloc ); - if( res.azResult==0 ){ - db->errCode = SQLITE_NOMEM; - return SQLITE_NOMEM; + if( sqlite3_value_type(argv[0])==SQLITE_NULL ){ + return; } - res.azResult[0] = 0; - rc = sqlite3_exec(db, zSql, sqlite3_get_table_cb, &res, pzErrMsg); - assert( sizeof(res.azResult[0])>= sizeof(res.nData) ); - res.azResult[0] = SQLITE_INT_TO_PTR(res.nData); - if( (rc&0xff)==SQLITE_ABORT ){ - sqlite3_free_table(&res.azResult[1]); - if( res.zErrMsg ){ - if( pzErrMsg ){ - sqlite3_free(*pzErrMsg); - *pzErrMsg = sqlite3_mprintf("%s",res.zErrMsg); + zIn = sqlite3_value_text(argv[0]); + if( zIn==0 ) return; + nIn = sqlite3_value_bytes(argv[0]); + assert( zIn==sqlite3_value_text(argv[0]) ); + if( argc==1 ){ + static const unsigned char lenOne[] = { 1 }; + static unsigned char * const azOne[] = { (u8*)" " }; + nChar = 1; + aLen = (u8*)lenOne; + azChar = (unsigned char **)azOne; + zCharSet = 0; + }else if( (zCharSet = sqlite3_value_text(argv[1]))==0 ){ + return; + }else{ + const unsigned char *z; + for(z=zCharSet, nChar=0; *z; nChar++){ + SQLITE_SKIP_UTF8(z); + } + if( nChar>0 ){ + azChar = contextMalloc(context, ((i64)nChar)*(sizeof(char*)+1)); + if( azChar==0 ){ + return; + } + aLen = (unsigned char*)&azChar[nChar]; + for(z=zCharSet, nChar=0; *z; nChar++){ + azChar[nChar] = (unsigned char *)z; + SQLITE_SKIP_UTF8(z); + aLen[nChar] = (u8)(z - azChar[nChar]); } - sqlite3_free(res.zErrMsg); } - db->errCode = res.rc; /* Assume 32-bit assignment is atomic */ - return res.rc; - } - sqlite3_free(res.zErrMsg); - if( rc!=SQLITE_OK ){ - sqlite3_free_table(&res.azResult[1]); - return rc; } - if( res.nAlloc>res.nData ){ - char **azNew; - azNew = sqlite3_realloc( res.azResult, sizeof(char*)*res.nData ); - if( azNew==0 ){ - sqlite3_free_table(&res.azResult[1]); - db->errCode = SQLITE_NOMEM; - return SQLITE_NOMEM; + if( nChar>0 ){ + flags = SQLITE_PTR_TO_INT(sqlite3_user_data(context)); + if( flags & 1 ){ + while( nIn>0 ){ + int len = 0; + for(i=0; i=nChar ) break; + zIn += len; + nIn -= len; + } + } + if( flags & 2 ){ + while( nIn>0 ){ + int len = 0; + for(i=0; i=nChar ) break; + nIn -= len; + } + } + if( zCharSet ){ + sqlite3_free(azChar); } - res.azResult = azNew; } - *pazResult = &res.azResult[1]; - if( pnColumn ) *pnColumn = res.nColumn; - if( pnRow ) *pnRow = res.nRow; - return rc; + sqlite3_result_text(context, (char*)zIn, nIn, SQLITE_TRANSIENT); } + +/* IMP: R-25361-16150 This function is omitted from SQLite by default. It +** is only available if the SQLITE_SOUNDEX compile-time option is used +** when SQLite is built. +*/ +#ifdef SQLITE_SOUNDEX /* -** This routine frees the space the sqlite3_get_table() malloced. +** Compute the soundex encoding of a word. +** +** IMP: R-59782-00072 The soundex(X) function returns a string that is the +** soundex encoding of the string X. */ -SQLITE_API void sqlite3_free_table( - char **azResult /* Result returned from from sqlite3_get_table() */ +static void soundexFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv ){ - if( azResult ){ - int i, n; - azResult--; - assert( azResult!=0 ); - n = SQLITE_PTR_TO_INT(azResult[0]); - for(i=1; i0 ){ + if( code!=prevcode ){ + prevcode = code; + zResult[j++] = code + '0'; + } + }else{ + prevcode = 0; + } + } + while( j<4 ){ + zResult[j++] = '0'; + } + zResult[j] = 0; + sqlite3_result_text(context, zResult, 4, SQLITE_TRANSIENT); + }else{ + /* IMP: R-64894-50321 The string "?000" is returned if the argument + ** is NULL or contains no ASCII alphabetic characters. */ + sqlite3_result_text(context, "?000", 4, SQLITE_STATIC); } } +#endif /* SQLITE_SOUNDEX */ -#endif /* SQLITE_OMIT_GET_TABLE */ - -/************** End of table.c ***********************************************/ -/************** Begin file trigger.c *****************************************/ -/* -** -** The author disclaims copyright to this source code. In place of -** a legal notice, here is a blessing: -** -** May you do good and not evil. -** May you find forgiveness for yourself and forgive others. -** May you share freely, never taking more than you give. -** -************************************************************************* -** -** -** $Id: trigger.c,v 1.141 2009/05/28 01:00:55 drh Exp $ -*/ - -#ifndef SQLITE_OMIT_TRIGGER +#ifndef SQLITE_OMIT_LOAD_EXTENSION /* -** Delete a linked list of TriggerStep structures. +** A function that loads a shared-library extension then returns NULL. */ -SQLITE_PRIVATE void sqlite3DeleteTriggerStep(sqlite3 *db, TriggerStep *pTriggerStep){ - while( pTriggerStep ){ - TriggerStep * pTmp = pTriggerStep; - pTriggerStep = pTriggerStep->pNext; - - sqlite3ExprDelete(db, pTmp->pWhere); - sqlite3ExprListDelete(db, pTmp->pExprList); - sqlite3SelectDelete(db, pTmp->pSelect); - sqlite3IdListDelete(db, pTmp->pIdList); +static void loadExt(sqlite3_context *context, int argc, sqlite3_value **argv){ + const char *zFile = (const char *)sqlite3_value_text(argv[0]); + const char *zProc; + sqlite3 *db = sqlite3_context_db_handle(context); + char *zErrMsg = 0; - sqlite3DbFree(db, pTmp); + if( argc==2 ){ + zProc = (const char *)sqlite3_value_text(argv[1]); + }else{ + zProc = 0; + } + if( zFile && sqlite3_load_extension(db, zFile, zProc, &zErrMsg) ){ + sqlite3_result_error(context, zErrMsg, -1); + sqlite3_free(zErrMsg); } } +#endif + /* -** Given table pTab, return a list of all the triggers attached to -** the table. The list is connected by Trigger.pNext pointers. -** -** All of the triggers on pTab that are in the same database as pTab -** are already attached to pTab->pTrigger. But there might be additional -** triggers on pTab in the TEMP schema. This routine prepends all -** TEMP triggers on pTab to the beginning of the pTab->pTrigger list -** and returns the combined list. -** -** To state it another way: This routine returns a list of all triggers -** that fire off of pTab. The list will include any TEMP triggers on -** pTab as well as the triggers lised in pTab->pTrigger. +** An instance of the following structure holds the context of a +** sum() or avg() aggregate computation. */ -SQLITE_PRIVATE Trigger *sqlite3TriggerList(Parse *pParse, Table *pTab){ - Schema * const pTmpSchema = pParse->db->aDb[1].pSchema; - Trigger *pList = 0; /* List of triggers to return */ - - if( pTmpSchema!=pTab->pSchema ){ - HashElem *p; - for(p=sqliteHashFirst(&pTmpSchema->trigHash); p; p=sqliteHashNext(p)){ - Trigger *pTrig = (Trigger *)sqliteHashData(p); - if( pTrig->pTabSchema==pTab->pSchema - && 0==sqlite3StrICmp(pTrig->table, pTab->zName) - ){ - pTrig->pNext = (pList ? pList : pTab->pTrigger); - pList = pTrig; - } - } - } - - return (pList ? pList : pTab->pTrigger); -} +typedef struct SumCtx SumCtx; +struct SumCtx { + double rSum; /* Floating point sum */ + i64 iSum; /* Integer sum */ + i64 cnt; /* Number of elements summed */ + u8 overflow; /* True if integer overflow seen */ + u8 approx; /* True if non-integer value was input to the sum */ +}; /* -** This is called by the parser when it sees a CREATE TRIGGER statement -** up to the point of the BEGIN before the trigger actions. A Trigger -** structure is generated based on the information available and stored -** in pParse->pNewTrigger. After the trigger actions have been parsed, the -** sqlite3FinishTrigger() function is called to complete the trigger -** construction process. +** Routines used to compute the sum, average, and total. +** +** The SUM() function follows the (broken) SQL standard which means +** that it returns NULL if it sums over no inputs. TOTAL returns +** 0.0 in that case. In addition, TOTAL always returns a float where +** SUM might return an integer if it never encounters a floating point +** value. TOTAL never fails, but SUM might through an exception if +** it overflows an integer. */ -SQLITE_PRIVATE void sqlite3BeginTrigger( - Parse *pParse, /* The parse context of the CREATE TRIGGER statement */ - Token *pName1, /* The name of the trigger */ - Token *pName2, /* The name of the trigger */ - int tr_tm, /* One of TK_BEFORE, TK_AFTER, TK_INSTEAD */ - int op, /* One of TK_INSERT, TK_UPDATE, TK_DELETE */ - IdList *pColumns, /* column list if this is an UPDATE OF trigger */ - SrcList *pTableName,/* The name of the table/view the trigger applies to */ - Expr *pWhen, /* WHEN clause */ - int isTemp, /* True if the TEMPORARY keyword is present */ - int noErr /* Suppress errors if the trigger already exists */ -){ - Trigger *pTrigger = 0; - Table *pTab; - char *zName = 0; /* Name of the trigger */ - sqlite3 *db = pParse->db; - int iDb; /* The database to store the trigger in */ - Token *pName; /* The unqualified db name */ - DbFixer sFix; - int iTabDb; - - assert( pName1!=0 ); /* pName1->z might be NULL, but not pName1 itself */ - assert( pName2!=0 ); - assert( op==TK_INSERT || op==TK_UPDATE || op==TK_DELETE ); - assert( op>0 && op<0xff ); - if( isTemp ){ - /* If TEMP was specified, then the trigger name may not be qualified. */ - if( pName2->n>0 ){ - sqlite3ErrorMsg(pParse, "temporary trigger may not have qualified name"); - goto trigger_cleanup; - } - iDb = 1; - pName = pName1; - }else{ - /* Figure out the db that the the trigger will be created in */ - iDb = sqlite3TwoPartName(pParse, pName1, pName2, &pName); - if( iDb<0 ){ - goto trigger_cleanup; +static void sumStep(sqlite3_context *context, int argc, sqlite3_value **argv){ + SumCtx *p; + int type; + assert( argc==1 ); + UNUSED_PARAMETER(argc); + p = sqlite3_aggregate_context(context, sizeof(*p)); + type = sqlite3_value_numeric_type(argv[0]); + if( p && type!=SQLITE_NULL ){ + p->cnt++; + if( type==SQLITE_INTEGER ){ + i64 v = sqlite3_value_int64(argv[0]); + p->rSum += v; + if( (p->approx|p->overflow)==0 && sqlite3AddInt64(&p->iSum, v) ){ + p->overflow = 1; + } + }else{ + p->rSum += sqlite3_value_double(argv[0]); + p->approx = 1; } } - - /* If the trigger name was unqualified, and the table is a temp table, - ** then set iDb to 1 to create the trigger in the temporary database. - ** If sqlite3SrcListLookup() returns 0, indicating the table does not - ** exist, the error is caught by the block below. - */ - if( !pTableName || db->mallocFailed ){ - goto trigger_cleanup; - } - pTab = sqlite3SrcListLookup(pParse, pTableName); - if( pName2->n==0 && pTab && pTab->pSchema==db->aDb[1].pSchema ){ - iDb = 1; - } - - /* Ensure the table name matches database name and that the table exists */ - if( db->mallocFailed ) goto trigger_cleanup; - assert( pTableName->nSrc==1 ); - if( sqlite3FixInit(&sFix, pParse, iDb, "trigger", pName) && - sqlite3FixSrcList(&sFix, pTableName) ){ - goto trigger_cleanup; - } - pTab = sqlite3SrcListLookup(pParse, pTableName); - if( !pTab ){ - /* The table does not exist. */ - goto trigger_cleanup; - } - if( IsVirtual(pTab) ){ - sqlite3ErrorMsg(pParse, "cannot create triggers on virtual tables"); - goto trigger_cleanup; - } - - /* Check that the trigger name is not reserved and that no trigger of the - ** specified name exists */ - zName = sqlite3NameFromToken(db, pName); - if( !zName || SQLITE_OK!=sqlite3CheckObjectName(pParse, zName) ){ - goto trigger_cleanup; - } - if( sqlite3HashFind(&(db->aDb[iDb].pSchema->trigHash), - zName, sqlite3Strlen30(zName)) ){ - if( !noErr ){ - sqlite3ErrorMsg(pParse, "trigger %T already exists", pName); +} +static void sumFinalize(sqlite3_context *context){ + SumCtx *p; + p = sqlite3_aggregate_context(context, 0); + if( p && p->cnt>0 ){ + if( p->overflow ){ + sqlite3_result_error(context,"integer overflow",-1); + }else if( p->approx ){ + sqlite3_result_double(context, p->rSum); + }else{ + sqlite3_result_int64(context, p->iSum); } - goto trigger_cleanup; } - - /* Do not create a trigger on a system table */ - if( sqlite3StrNICmp(pTab->zName, "sqlite_", 7)==0 ){ - sqlite3ErrorMsg(pParse, "cannot create trigger on system table"); - pParse->nErr++; - goto trigger_cleanup; +} +static void avgFinalize(sqlite3_context *context){ + SumCtx *p; + p = sqlite3_aggregate_context(context, 0); + if( p && p->cnt>0 ){ + sqlite3_result_double(context, p->rSum/(double)p->cnt); } +} +static void totalFinalize(sqlite3_context *context){ + SumCtx *p; + p = sqlite3_aggregate_context(context, 0); + /* (double)0 In case of SQLITE_OMIT_FLOATING_POINT... */ + sqlite3_result_double(context, p ? p->rSum : (double)0); +} - /* INSTEAD of triggers are only for views and views only support INSTEAD - ** of triggers. - */ - if( pTab->pSelect && tr_tm!=TK_INSTEAD ){ - sqlite3ErrorMsg(pParse, "cannot create %s trigger on view: %S", - (tr_tm == TK_BEFORE)?"BEFORE":"AFTER", pTableName, 0); - goto trigger_cleanup; - } - if( !pTab->pSelect && tr_tm==TK_INSTEAD ){ - sqlite3ErrorMsg(pParse, "cannot create INSTEAD OF" - " trigger on table: %S", pTableName, 0); - goto trigger_cleanup; - } - iTabDb = sqlite3SchemaToIndex(db, pTab->pSchema); +/* +** The following structure keeps track of state information for the +** count() aggregate function. +*/ +typedef struct CountCtx CountCtx; +struct CountCtx { + i64 n; +}; -#ifndef SQLITE_OMIT_AUTHORIZATION - { - int code = SQLITE_CREATE_TRIGGER; - const char *zDb = db->aDb[iTabDb].zName; - const char *zDbTrig = isTemp ? db->aDb[1].zName : zDb; - if( iTabDb==1 || isTemp ) code = SQLITE_CREATE_TEMP_TRIGGER; - if( sqlite3AuthCheck(pParse, code, zName, pTab->zName, zDbTrig) ){ - goto trigger_cleanup; - } - if( sqlite3AuthCheck(pParse, SQLITE_INSERT, SCHEMA_TABLE(iTabDb),0,zDb)){ - goto trigger_cleanup; - } +/* +** Routines to implement the count() aggregate function. +*/ +static void countStep(sqlite3_context *context, int argc, sqlite3_value **argv){ + CountCtx *p; + p = sqlite3_aggregate_context(context, sizeof(*p)); + if( (argc==0 || SQLITE_NULL!=sqlite3_value_type(argv[0])) && p ){ + p->n++; } + +#ifndef SQLITE_OMIT_DEPRECATED + /* The sqlite3_aggregate_count() function is deprecated. But just to make + ** sure it still operates correctly, verify that its count agrees with our + ** internal count when using count(*) and when the total count can be + ** expressed as a 32-bit integer. */ + assert( argc==1 || p==0 || p->n>0x7fffffff + || p->n==sqlite3_aggregate_count(context) ); #endif +} +static void countFinalize(sqlite3_context *context){ + CountCtx *p; + p = sqlite3_aggregate_context(context, 0); + sqlite3_result_int64(context, p ? p->n : 0); +} - /* INSTEAD OF triggers can only appear on views and BEFORE triggers - ** cannot appear on views. So we might as well translate every - ** INSTEAD OF trigger into a BEFORE trigger. It simplifies code - ** elsewhere. - */ - if (tr_tm == TK_INSTEAD){ - tr_tm = TK_BEFORE; - } +/* +** Routines to implement min() and max() aggregate functions. +*/ +static void minmaxStep( + sqlite3_context *context, + int NotUsed, + sqlite3_value **argv +){ + Mem *pArg = (Mem *)argv[0]; + Mem *pBest; + UNUSED_PARAMETER(NotUsed); - /* Build the Trigger object */ - pTrigger = (Trigger*)sqlite3DbMallocZero(db, sizeof(Trigger)); - if( pTrigger==0 ) goto trigger_cleanup; - pTrigger->name = zName; - zName = 0; - pTrigger->table = sqlite3DbStrDup(db, pTableName->a[0].zName); - pTrigger->pSchema = db->aDb[iDb].pSchema; - pTrigger->pTabSchema = pTab->pSchema; - pTrigger->op = (u8)op; - pTrigger->tr_tm = tr_tm==TK_BEFORE ? TRIGGER_BEFORE : TRIGGER_AFTER; - pTrigger->pWhen = sqlite3ExprDup(db, pWhen, EXPRDUP_REDUCE); - pTrigger->pColumns = sqlite3IdListDup(db, pColumns); - assert( pParse->pNewTrigger==0 ); - pParse->pNewTrigger = pTrigger; + pBest = (Mem *)sqlite3_aggregate_context(context, sizeof(*pBest)); + if( !pBest ) return; -trigger_cleanup: - sqlite3DbFree(db, zName); - sqlite3SrcListDelete(db, pTableName); - sqlite3IdListDelete(db, pColumns); - sqlite3ExprDelete(db, pWhen); - if( !pParse->pNewTrigger ){ - sqlite3DeleteTrigger(db, pTrigger); + if( sqlite3_value_type(argv[0])==SQLITE_NULL ){ + if( pBest->flags ) sqlite3SkipAccumulatorLoad(context); + }else if( pBest->flags ){ + int max; + int cmp; + CollSeq *pColl = sqlite3GetFuncCollSeq(context); + /* This step function is used for both the min() and max() aggregates, + ** the only difference between the two being that the sense of the + ** comparison is inverted. For the max() aggregate, the + ** sqlite3_user_data() function returns (void *)-1. For min() it + ** returns (void *)db, where db is the sqlite3* database pointer. + ** Therefore the next statement sets variable 'max' to 1 for the max() + ** aggregate, or 0 for min(). + */ + max = sqlite3_user_data(context)!=0; + cmp = sqlite3MemCompare(pBest, pArg, pColl); + if( (max && cmp<0) || (!max && cmp>0) ){ + sqlite3VdbeMemCopy(pBest, pArg); + }else{ + sqlite3SkipAccumulatorLoad(context); + } }else{ - assert( pParse->pNewTrigger==pTrigger ); + sqlite3VdbeMemCopy(pBest, pArg); + } +} +static void minMaxFinalize(sqlite3_context *context){ + sqlite3_value *pRes; + pRes = (sqlite3_value *)sqlite3_aggregate_context(context, 0); + if( pRes ){ + if( pRes->flags ){ + sqlite3_result_value(context, pRes); + } + sqlite3VdbeMemRelease(pRes); } } /* -** This routine is called after all of the trigger actions have been parsed -** in order to complete the process of building the trigger. +** group_concat(EXPR, ?SEPARATOR?) */ -SQLITE_PRIVATE void sqlite3FinishTrigger( - Parse *pParse, /* Parser context */ - TriggerStep *pStepList, /* The triggered program */ - Token *pAll /* Token that describes the complete CREATE TRIGGER */ +static void groupConcatStep( + sqlite3_context *context, + int argc, + sqlite3_value **argv ){ - Trigger *pTrig = pParse->pNewTrigger; /* Trigger being finished */ - char *zName; /* Name of trigger */ - sqlite3 *db = pParse->db; /* The database */ - DbFixer sFix; - int iDb; /* Database containing the trigger */ - Token nameToken; /* Trigger name for error reporting */ - - pTrig = pParse->pNewTrigger; - pParse->pNewTrigger = 0; - if( NEVER(pParse->nErr) || !pTrig ) goto triggerfinish_cleanup; - zName = pTrig->name; - iDb = sqlite3SchemaToIndex(pParse->db, pTrig->pSchema); - pTrig->step_list = pStepList; - while( pStepList ){ - pStepList->pTrig = pTrig; - pStepList = pStepList->pNext; - } - nameToken.z = pTrig->name; - nameToken.n = sqlite3Strlen30(nameToken.z); - if( sqlite3FixInit(&sFix, pParse, iDb, "trigger", &nameToken) - && sqlite3FixTriggerStep(&sFix, pTrig->step_list) ){ - goto triggerfinish_cleanup; - } - - /* if we are not initializing, and this trigger is not on a TEMP table, - ** build the sqlite_master entry - */ - if( !db->init.busy ){ - Vdbe *v; - char *z; + const char *zVal; + StrAccum *pAccum; + const char *zSep; + int nVal, nSep; + assert( argc==1 || argc==2 ); + if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return; + pAccum = (StrAccum*)sqlite3_aggregate_context(context, sizeof(*pAccum)); - /* Make an entry in the sqlite_master table */ - v = sqlite3GetVdbe(pParse); - if( v==0 ) goto triggerfinish_cleanup; - sqlite3BeginWriteOperation(pParse, 0, iDb); - z = sqlite3DbStrNDup(db, (char*)pAll->z, pAll->n); - sqlite3NestedParse(pParse, - "INSERT INTO %Q.%s VALUES('trigger',%Q,%Q,0,'CREATE TRIGGER %q')", - db->aDb[iDb].zName, SCHEMA_TABLE(iDb), zName, - pTrig->table, z); - sqlite3DbFree(db, z); - sqlite3ChangeCookie(pParse, iDb); - sqlite3VdbeAddOp4(v, OP_ParseSchema, iDb, 0, 0, sqlite3MPrintf( - db, "type='trigger' AND name='%q'", zName), P4_DYNAMIC - ); + if( pAccum ){ + sqlite3 *db = sqlite3_context_db_handle(context); + int firstTerm = pAccum->useMalloc==0; + pAccum->useMalloc = 2; + pAccum->mxAlloc = db->aLimit[SQLITE_LIMIT_LENGTH]; + if( !firstTerm ){ + if( argc==2 ){ + zSep = (char*)sqlite3_value_text(argv[1]); + nSep = sqlite3_value_bytes(argv[1]); + }else{ + zSep = ","; + nSep = 1; + } + sqlite3StrAccumAppend(pAccum, zSep, nSep); + } + zVal = (char*)sqlite3_value_text(argv[0]); + nVal = sqlite3_value_bytes(argv[0]); + sqlite3StrAccumAppend(pAccum, zVal, nVal); } - - if( db->init.busy ){ - Trigger *pLink = pTrig; - Hash *pHash = &db->aDb[iDb].pSchema->trigHash; - pTrig = sqlite3HashInsert(pHash, zName, sqlite3Strlen30(zName), pTrig); - if( pTrig ){ - db->mallocFailed = 1; - }else if( pLink->pSchema==pLink->pTabSchema ){ - Table *pTab; - int n = sqlite3Strlen30(pLink->table); - pTab = sqlite3HashFind(&pLink->pTabSchema->tblHash, pLink->table, n); - assert( pTab!=0 ); - pLink->pNext = pTab->pTrigger; - pTab->pTrigger = pLink; +} +static void groupConcatFinalize(sqlite3_context *context){ + StrAccum *pAccum; + pAccum = sqlite3_aggregate_context(context, 0); + if( pAccum ){ + if( pAccum->tooBig ){ + sqlite3_result_error_toobig(context); + }else if( pAccum->mallocFailed ){ + sqlite3_result_error_nomem(context); + }else{ + sqlite3_result_text(context, sqlite3StrAccumFinish(pAccum), -1, + sqlite3_free); } } - -triggerfinish_cleanup: - sqlite3DeleteTrigger(db, pTrig); - assert( !pParse->pNewTrigger ); - sqlite3DeleteTriggerStep(db, pStepList); } /* -** Turn a SELECT statement (that the pSelect parameter points to) into -** a trigger step. Return a pointer to a TriggerStep structure. -** -** The parser calls this routine when it finds a SELECT statement in -** body of a TRIGGER. +** This routine does per-connection function registration. Most +** of the built-in functions above are part of the global function set. +** This routine only deals with those that are not global. */ -SQLITE_PRIVATE TriggerStep *sqlite3TriggerSelectStep(sqlite3 *db, Select *pSelect){ - TriggerStep *pTriggerStep = sqlite3DbMallocZero(db, sizeof(TriggerStep)); - if( pTriggerStep==0 ) { - sqlite3SelectDelete(db, pSelect); - return 0; +SQLITE_PRIVATE void sqlite3RegisterBuiltinFunctions(sqlite3 *db){ + int rc = sqlite3_overload_function(db, "MATCH", 2); + assert( rc==SQLITE_NOMEM || rc==SQLITE_OK ); + if( rc==SQLITE_NOMEM ){ + db->mallocFailed = 1; } - pTriggerStep->op = TK_SELECT; - pTriggerStep->pSelect = pSelect; - pTriggerStep->orconf = OE_Default; - return pTriggerStep; } /* -** Allocate space to hold a new trigger step. The allocated space -** holds both the TriggerStep object and the TriggerStep.target.z string. -** -** If an OOM error occurs, NULL is returned and db->mallocFailed is set. +** Set the LIKEOPT flag on the 2-argument function with the given name. */ -static TriggerStep *triggerStepAllocate( - sqlite3 *db, /* Database connection */ - int op, /* Trigger opcode */ - Token *pName /* The target name */ -){ - TriggerStep *pTriggerStep; - - pTriggerStep = sqlite3DbMallocZero(db, sizeof(TriggerStep) + pName->n); - if( pTriggerStep ){ - char *z = (char*)&pTriggerStep[1]; - memcpy(z, pName->z, pName->n); - pTriggerStep->target.z = z; - pTriggerStep->target.n = pName->n; - pTriggerStep->op = op; +static void setLikeOptFlag(sqlite3 *db, const char *zName, u8 flagVal){ + FuncDef *pDef; + pDef = sqlite3FindFunction(db, zName, sqlite3Strlen30(zName), + 2, SQLITE_UTF8, 0); + if( ALWAYS(pDef) ){ + pDef->flags = flagVal; } - return pTriggerStep; } /* -** Build a trigger step out of an INSERT statement. Return a pointer -** to the new trigger step. -** -** The parser calls this routine when it sees an INSERT inside the -** body of a trigger. +** Register the built-in LIKE and GLOB functions. The caseSensitive +** parameter determines whether or not the LIKE operator is case +** sensitive. GLOB is always case sensitive. */ -SQLITE_PRIVATE TriggerStep *sqlite3TriggerInsertStep( - sqlite3 *db, /* The database connection */ - Token *pTableName, /* Name of the table into which we insert */ - IdList *pColumn, /* List of columns in pTableName to insert into */ - ExprList *pEList, /* The VALUE clause: a list of values to be inserted */ - Select *pSelect, /* A SELECT statement that supplies values */ - int orconf /* The conflict algorithm (OE_Abort, OE_Replace, etc.) */ -){ - TriggerStep *pTriggerStep; - - assert(pEList == 0 || pSelect == 0); - assert(pEList != 0 || pSelect != 0 || db->mallocFailed); - - pTriggerStep = triggerStepAllocate(db, TK_INSERT, pTableName); - if( pTriggerStep ){ - pTriggerStep->pSelect = sqlite3SelectDup(db, pSelect, EXPRDUP_REDUCE); - pTriggerStep->pIdList = pColumn; - pTriggerStep->pExprList = sqlite3ExprListDup(db, pEList, EXPRDUP_REDUCE); - pTriggerStep->orconf = orconf; +SQLITE_PRIVATE void sqlite3RegisterLikeFunctions(sqlite3 *db, int caseSensitive){ + struct compareInfo *pInfo; + if( caseSensitive ){ + pInfo = (struct compareInfo*)&likeInfoAlt; }else{ - sqlite3IdListDelete(db, pColumn); + pInfo = (struct compareInfo*)&likeInfoNorm; } - sqlite3ExprListDelete(db, pEList); - sqlite3SelectDelete(db, pSelect); - - return pTriggerStep; + sqlite3CreateFunc(db, "like", 2, SQLITE_UTF8, pInfo, likeFunc, 0, 0, 0); + sqlite3CreateFunc(db, "like", 3, SQLITE_UTF8, pInfo, likeFunc, 0, 0, 0); + sqlite3CreateFunc(db, "glob", 2, SQLITE_UTF8, + (struct compareInfo*)&globInfo, likeFunc, 0, 0, 0); + setLikeOptFlag(db, "glob", SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE); + setLikeOptFlag(db, "like", + caseSensitive ? (SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE) : SQLITE_FUNC_LIKE); } /* -** Construct a trigger step that implements an UPDATE statement and return -** a pointer to that trigger step. The parser calls this routine when it -** sees an UPDATE statement inside the body of a CREATE TRIGGER. +** pExpr points to an expression which implements a function. If +** it is appropriate to apply the LIKE optimization to that function +** then set aWc[0] through aWc[2] to the wildcard characters and +** return TRUE. If the function is not a LIKE-style function then +** return FALSE. */ -SQLITE_PRIVATE TriggerStep *sqlite3TriggerUpdateStep( - sqlite3 *db, /* The database connection */ - Token *pTableName, /* Name of the table to be updated */ - ExprList *pEList, /* The SET clause: list of column and new values */ - Expr *pWhere, /* The WHERE clause */ - int orconf /* The conflict algorithm. (OE_Abort, OE_Ignore, etc) */ -){ - TriggerStep *pTriggerStep; - - pTriggerStep = triggerStepAllocate(db, TK_UPDATE, pTableName); - if( pTriggerStep ){ - pTriggerStep->pExprList = sqlite3ExprListDup(db, pEList, EXPRDUP_REDUCE); - pTriggerStep->pWhere = sqlite3ExprDup(db, pWhere, EXPRDUP_REDUCE); - pTriggerStep->orconf = orconf; +SQLITE_PRIVATE int sqlite3IsLikeFunction(sqlite3 *db, Expr *pExpr, int *pIsNocase, char *aWc){ + FuncDef *pDef; + if( pExpr->op!=TK_FUNCTION + || !pExpr->x.pList + || pExpr->x.pList->nExpr!=2 + ){ + return 0; } - sqlite3ExprListDelete(db, pEList); - sqlite3ExprDelete(db, pWhere); - return pTriggerStep; -} - -/* -** Construct a trigger step that implements a DELETE statement and return -** a pointer to that trigger step. The parser calls this routine when it -** sees a DELETE statement inside the body of a CREATE TRIGGER. -*/ -SQLITE_PRIVATE TriggerStep *sqlite3TriggerDeleteStep( - sqlite3 *db, /* Database connection */ - Token *pTableName, /* The table from which rows are deleted */ - Expr *pWhere /* The WHERE clause */ -){ - TriggerStep *pTriggerStep; - - pTriggerStep = triggerStepAllocate(db, TK_DELETE, pTableName); - if( pTriggerStep ){ - pTriggerStep->pWhere = sqlite3ExprDup(db, pWhere, EXPRDUP_REDUCE); - pTriggerStep->orconf = OE_Default; + assert( !ExprHasProperty(pExpr, EP_xIsSelect) ); + pDef = sqlite3FindFunction(db, pExpr->u.zToken, + sqlite3Strlen30(pExpr->u.zToken), + 2, SQLITE_UTF8, 0); + if( NEVER(pDef==0) || (pDef->flags & SQLITE_FUNC_LIKE)==0 ){ + return 0; } - sqlite3ExprDelete(db, pWhere); - return pTriggerStep; -} -/* -** Recursively delete a Trigger structure -*/ -SQLITE_PRIVATE void sqlite3DeleteTrigger(sqlite3 *db, Trigger *pTrigger){ - if( pTrigger==0 ) return; - sqlite3DeleteTriggerStep(db, pTrigger->step_list); - sqlite3DbFree(db, pTrigger->name); - sqlite3DbFree(db, pTrigger->table); - sqlite3ExprDelete(db, pTrigger->pWhen); - sqlite3IdListDelete(db, pTrigger->pColumns); - sqlite3DbFree(db, pTrigger); + /* The memcpy() statement assumes that the wildcard characters are + ** the first three statements in the compareInfo structure. The + ** asserts() that follow verify that assumption + */ + memcpy(aWc, pDef->pUserData, 3); + assert( (char*)&likeInfoAlt == (char*)&likeInfoAlt.matchAll ); + assert( &((char*)&likeInfoAlt)[1] == (char*)&likeInfoAlt.matchOne ); + assert( &((char*)&likeInfoAlt)[2] == (char*)&likeInfoAlt.matchSet ); + *pIsNocase = (pDef->flags & SQLITE_FUNC_CASE)==0; + return 1; } /* -** This function is called to drop a trigger from the database schema. +** All all of the FuncDef structures in the aBuiltinFunc[] array above +** to the global function hash table. This occurs at start-time (as +** a consequence of calling sqlite3_initialize()). ** -** This may be called directly from the parser and therefore identifies -** the trigger by name. The sqlite3DropTriggerPtr() routine does the -** same job as this routine except it takes a pointer to the trigger -** instead of the trigger name. -**/ -SQLITE_PRIVATE void sqlite3DropTrigger(Parse *pParse, SrcList *pName, int noErr){ - Trigger *pTrigger = 0; +** After this routine runs +*/ +SQLITE_PRIVATE void sqlite3RegisterGlobalFunctions(void){ + /* + ** The following array holds FuncDef structures for all of the functions + ** defined in this file. + ** + ** The array cannot be constant since changes are made to the + ** FuncDef.pHash elements at start-time. The elements of this array + ** are read-only after initialization is complete. + */ + static SQLITE_WSD FuncDef aBuiltinFunc[] = { + FUNCTION(ltrim, 1, 1, 0, trimFunc ), + FUNCTION(ltrim, 2, 1, 0, trimFunc ), + FUNCTION(rtrim, 1, 2, 0, trimFunc ), + FUNCTION(rtrim, 2, 2, 0, trimFunc ), + FUNCTION(trim, 1, 3, 0, trimFunc ), + FUNCTION(trim, 2, 3, 0, trimFunc ), + FUNCTION(min, -1, 0, 1, minmaxFunc ), + FUNCTION(min, 0, 0, 1, 0 ), + AGGREGATE(min, 1, 0, 1, minmaxStep, minMaxFinalize ), + FUNCTION(max, -1, 1, 1, minmaxFunc ), + FUNCTION(max, 0, 1, 1, 0 ), + AGGREGATE(max, 1, 1, 1, minmaxStep, minMaxFinalize ), + FUNCTION2(typeof, 1, 0, 0, typeofFunc, SQLITE_FUNC_TYPEOF), + FUNCTION2(length, 1, 0, 0, lengthFunc, SQLITE_FUNC_LENGTH), + FUNCTION(substr, 2, 0, 0, substrFunc ), + FUNCTION(substr, 3, 0, 0, substrFunc ), + FUNCTION(abs, 1, 0, 0, absFunc ), +#ifndef SQLITE_OMIT_FLOATING_POINT + FUNCTION(round, 1, 0, 0, roundFunc ), + FUNCTION(round, 2, 0, 0, roundFunc ), +#endif + FUNCTION(upper, 1, 0, 0, upperFunc ), + FUNCTION(lower, 1, 0, 0, lowerFunc ), + FUNCTION(coalesce, 1, 0, 0, 0 ), + FUNCTION(coalesce, 0, 0, 0, 0 ), + FUNCTION2(coalesce, -1, 0, 0, ifnullFunc, SQLITE_FUNC_COALESCE), + FUNCTION(hex, 1, 0, 0, hexFunc ), + FUNCTION2(ifnull, 2, 0, 0, ifnullFunc, SQLITE_FUNC_COALESCE), + FUNCTION(random, 0, 0, 0, randomFunc ), + FUNCTION(randomblob, 1, 0, 0, randomBlob ), + FUNCTION(nullif, 2, 0, 1, nullifFunc ), + FUNCTION(sqlite_version, 0, 0, 0, versionFunc ), + FUNCTION(sqlite_source_id, 0, 0, 0, sourceidFunc ), + FUNCTION(sqlite_log, 2, 0, 0, errlogFunc ), +#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS + FUNCTION(sqlite_compileoption_used,1, 0, 0, compileoptionusedFunc ), + FUNCTION(sqlite_compileoption_get, 1, 0, 0, compileoptiongetFunc ), +#endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */ + FUNCTION(quote, 1, 0, 0, quoteFunc ), + FUNCTION(last_insert_rowid, 0, 0, 0, last_insert_rowid), + FUNCTION(changes, 0, 0, 0, changes ), + FUNCTION(total_changes, 0, 0, 0, total_changes ), + FUNCTION(replace, 3, 0, 0, replaceFunc ), + FUNCTION(zeroblob, 1, 0, 0, zeroblobFunc ), + #ifdef SQLITE_SOUNDEX + FUNCTION(soundex, 1, 0, 0, soundexFunc ), + #endif + #ifndef SQLITE_OMIT_LOAD_EXTENSION + FUNCTION(load_extension, 1, 0, 0, loadExt ), + FUNCTION(load_extension, 2, 0, 0, loadExt ), + #endif + AGGREGATE(sum, 1, 0, 0, sumStep, sumFinalize ), + AGGREGATE(total, 1, 0, 0, sumStep, totalFinalize ), + AGGREGATE(avg, 1, 0, 0, sumStep, avgFinalize ), + /* AGGREGATE(count, 0, 0, 0, countStep, countFinalize ), */ + {0,SQLITE_UTF8,SQLITE_FUNC_COUNT,0,0,0,countStep,countFinalize,"count",0,0}, + AGGREGATE(count, 1, 0, 0, countStep, countFinalize ), + AGGREGATE(group_concat, 1, 0, 0, groupConcatStep, groupConcatFinalize), + AGGREGATE(group_concat, 2, 0, 0, groupConcatStep, groupConcatFinalize), + + LIKEFUNC(glob, 2, &globInfo, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE), + #ifdef SQLITE_CASE_SENSITIVE_LIKE + LIKEFUNC(like, 2, &likeInfoAlt, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE), + LIKEFUNC(like, 3, &likeInfoAlt, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE), + #else + LIKEFUNC(like, 2, &likeInfoNorm, SQLITE_FUNC_LIKE), + LIKEFUNC(like, 3, &likeInfoNorm, SQLITE_FUNC_LIKE), + #endif + }; + int i; - const char *zDb; - const char *zName; - int nName; - sqlite3 *db = pParse->db; + FuncDefHash *pHash = &GLOBAL(FuncDefHash, sqlite3GlobalFunctions); + FuncDef *aFunc = (FuncDef*)&GLOBAL(FuncDef, aBuiltinFunc); - if( db->mallocFailed ) goto drop_trigger_cleanup; - if( SQLITE_OK!=sqlite3ReadSchema(pParse) ){ - goto drop_trigger_cleanup; + for(i=0; inSrc==1 ); - zDb = pName->a[0].zDatabase; - zName = pName->a[0].zName; - nName = sqlite3Strlen30(zName); - for(i=OMIT_TEMPDB; inDb; i++){ - int j = (i<2) ? i^1 : i; /* Search TEMP before MAIN */ - if( zDb && sqlite3StrICmp(db->aDb[j].zName, zDb) ) continue; - pTrigger = sqlite3HashFind(&(db->aDb[j].pSchema->trigHash), zName, nName); - if( pTrigger ) break; +/************** End of func.c ************************************************/ +/************** Begin file fkey.c ********************************************/ +/* +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** This file contains code used by the compiler to add foreign key +** support to compiled SQL statements. +*/ + +#ifndef SQLITE_OMIT_FOREIGN_KEY +#ifndef SQLITE_OMIT_TRIGGER + +/* +** Deferred and Immediate FKs +** -------------------------- +** +** Foreign keys in SQLite come in two flavours: deferred and immediate. +** If an immediate foreign key constraint is violated, SQLITE_CONSTRAINT +** is returned and the current statement transaction rolled back. If a +** deferred foreign key constraint is violated, no action is taken +** immediately. However if the application attempts to commit the +** transaction before fixing the constraint violation, the attempt fails. +** +** Deferred constraints are implemented using a simple counter associated +** with the database handle. The counter is set to zero each time a +** database transaction is opened. Each time a statement is executed +** that causes a foreign key violation, the counter is incremented. Each +** time a statement is executed that removes an existing violation from +** the database, the counter is decremented. When the transaction is +** committed, the commit fails if the current value of the counter is +** greater than zero. This scheme has two big drawbacks: +** +** * When a commit fails due to a deferred foreign key constraint, +** there is no way to tell which foreign constraint is not satisfied, +** or which row it is not satisfied for. +** +** * If the database contains foreign key violations when the +** transaction is opened, this may cause the mechanism to malfunction. +** +** Despite these problems, this approach is adopted as it seems simpler +** than the alternatives. +** +** INSERT operations: +** +** I.1) For each FK for which the table is the child table, search +** the parent table for a match. If none is found increment the +** constraint counter. +** +** I.2) For each FK for which the table is the parent table, +** search the child table for rows that correspond to the new +** row in the parent table. Decrement the counter for each row +** found (as the constraint is now satisfied). +** +** DELETE operations: +** +** D.1) For each FK for which the table is the child table, +** search the parent table for a row that corresponds to the +** deleted row in the child table. If such a row is not found, +** decrement the counter. +** +** D.2) For each FK for which the table is the parent table, search +** the child table for rows that correspond to the deleted row +** in the parent table. For each found increment the counter. +** +** UPDATE operations: +** +** An UPDATE command requires that all 4 steps above are taken, but only +** for FK constraints for which the affected columns are actually +** modified (values must be compared at runtime). +** +** Note that I.1 and D.1 are very similar operations, as are I.2 and D.2. +** This simplifies the implementation a bit. +** +** For the purposes of immediate FK constraints, the OR REPLACE conflict +** resolution is considered to delete rows before the new row is inserted. +** If a delete caused by OR REPLACE violates an FK constraint, an exception +** is thrown, even if the FK constraint would be satisfied after the new +** row is inserted. +** +** Immediate constraints are usually handled similarly. The only difference +** is that the counter used is stored as part of each individual statement +** object (struct Vdbe). If, after the statement has run, its immediate +** constraint counter is greater than zero, it returns SQLITE_CONSTRAINT +** and the statement transaction is rolled back. An exception is an INSERT +** statement that inserts a single row only (no triggers). In this case, +** instead of using a counter, an exception is thrown immediately if the +** INSERT violates a foreign key constraint. This is necessary as such +** an INSERT does not open a statement transaction. +** +** TODO: How should dropping a table be handled? How should renaming a +** table be handled? +** +** +** Query API Notes +** --------------- +** +** Before coding an UPDATE or DELETE row operation, the code-generator +** for those two operations needs to know whether or not the operation +** requires any FK processing and, if so, which columns of the original +** row are required by the FK processing VDBE code (i.e. if FKs were +** implemented using triggers, which of the old.* columns would be +** accessed). No information is required by the code-generator before +** coding an INSERT operation. The functions used by the UPDATE/DELETE +** generation code to query for this information are: +** +** sqlite3FkRequired() - Test to see if FK processing is required. +** sqlite3FkOldmask() - Query for the set of required old.* columns. +** +** +** Externally accessible module functions +** -------------------------------------- +** +** sqlite3FkCheck() - Check for foreign key violations. +** sqlite3FkActions() - Code triggers for ON UPDATE/ON DELETE actions. +** sqlite3FkDelete() - Delete an FKey structure. +*/ + +/* +** VDBE Calling Convention +** ----------------------- +** +** Example: +** +** For the following INSERT statement: +** +** CREATE TABLE t1(a, b INTEGER PRIMARY KEY, c); +** INSERT INTO t1 VALUES(1, 2, 3.1); +** +** Register (x): 2 (type integer) +** Register (x+1): 1 (type integer) +** Register (x+2): NULL (type NULL) +** Register (x+3): 3.1 (type real) +*/ + +/* +** A foreign key constraint requires that the key columns in the parent +** table are collectively subject to a UNIQUE or PRIMARY KEY constraint. +** Given that pParent is the parent table for foreign key constraint pFKey, +** search the schema a unique index on the parent key columns. +** +** If successful, zero is returned. If the parent key is an INTEGER PRIMARY +** KEY column, then output variable *ppIdx is set to NULL. Otherwise, *ppIdx +** is set to point to the unique index. +** +** If the parent key consists of a single column (the foreign key constraint +** is not a composite foreign key), output variable *paiCol is set to NULL. +** Otherwise, it is set to point to an allocated array of size N, where +** N is the number of columns in the parent key. The first element of the +** array is the index of the child table column that is mapped by the FK +** constraint to the parent table column stored in the left-most column +** of index *ppIdx. The second element of the array is the index of the +** child table column that corresponds to the second left-most column of +** *ppIdx, and so on. +** +** If the required index cannot be found, either because: +** +** 1) The named parent key columns do not exist, or +** +** 2) The named parent key columns do exist, but are not subject to a +** UNIQUE or PRIMARY KEY constraint, or +** +** 3) No parent key columns were provided explicitly as part of the +** foreign key definition, and the parent table does not have a +** PRIMARY KEY, or +** +** 4) No parent key columns were provided explicitly as part of the +** foreign key definition, and the PRIMARY KEY of the parent table +** consists of a a different number of columns to the child key in +** the child table. +** +** then non-zero is returned, and a "foreign key mismatch" error loaded +** into pParse. If an OOM error occurs, non-zero is returned and the +** pParse->db->mallocFailed flag is set. +*/ +static int locateFkeyIndex( + Parse *pParse, /* Parse context to store any error in */ + Table *pParent, /* Parent table of FK constraint pFKey */ + FKey *pFKey, /* Foreign key to find index for */ + Index **ppIdx, /* OUT: Unique index on parent table */ + int **paiCol /* OUT: Map of index columns in pFKey */ +){ + Index *pIdx = 0; /* Value to return via *ppIdx */ + int *aiCol = 0; /* Value to return via *paiCol */ + int nCol = pFKey->nCol; /* Number of columns in parent key */ + char *zKey = pFKey->aCol[0].zCol; /* Name of left-most parent key column */ + + /* The caller is responsible for zeroing output parameters. */ + assert( ppIdx && *ppIdx==0 ); + assert( !paiCol || *paiCol==0 ); + assert( pParse ); + + /* If this is a non-composite (single column) foreign key, check if it + ** maps to the INTEGER PRIMARY KEY of table pParent. If so, leave *ppIdx + ** and *paiCol set to zero and return early. + ** + ** Otherwise, for a composite foreign key (more than one column), allocate + ** space for the aiCol array (returned via output parameter *paiCol). + ** Non-composite foreign keys do not require the aiCol array. + */ + if( nCol==1 ){ + /* The FK maps to the IPK if any of the following are true: + ** + ** 1) There is an INTEGER PRIMARY KEY column and the FK is implicitly + ** mapped to the primary key of table pParent, or + ** 2) The FK is explicitly mapped to a column declared as INTEGER + ** PRIMARY KEY. + */ + if( pParent->iPKey>=0 ){ + if( !zKey ) return 0; + if( !sqlite3StrICmp(pParent->aCol[pParent->iPKey].zName, zKey) ) return 0; + } + }else if( paiCol ){ + assert( nCol>1 ); + aiCol = (int *)sqlite3DbMallocRaw(pParse->db, nCol*sizeof(int)); + if( !aiCol ) return 1; + *paiCol = aiCol; + } + + for(pIdx=pParent->pIndex; pIdx; pIdx=pIdx->pNext){ + if( pIdx->nColumn==nCol && pIdx->onError!=OE_None ){ + /* pIdx is a UNIQUE index (or a PRIMARY KEY) and has the right number + ** of columns. If each indexed column corresponds to a foreign key + ** column of pFKey, then this index is a winner. */ + + if( zKey==0 ){ + /* If zKey is NULL, then this foreign key is implicitly mapped to + ** the PRIMARY KEY of table pParent. The PRIMARY KEY index may be + ** identified by the test (Index.autoIndex==2). */ + if( pIdx->autoIndex==2 ){ + if( aiCol ){ + int i; + for(i=0; iaCol[i].iFrom; + } + break; + } + }else{ + /* If zKey is non-NULL, then this foreign key was declared to + ** map to an explicit list of columns in table pParent. Check if this + ** index matches those columns. Also, check that the index uses + ** the default collation sequences for each column. */ + int i, j; + for(i=0; iaiColumn[i]; /* Index of column in parent tbl */ + char *zDfltColl; /* Def. collation for column */ + char *zIdxCol; /* Name of indexed column */ + + /* If the index uses a collation sequence that is different from + ** the default collation sequence for the column, this index is + ** unusable. Bail out early in this case. */ + zDfltColl = pParent->aCol[iCol].zColl; + if( !zDfltColl ){ + zDfltColl = "BINARY"; + } + if( sqlite3StrICmp(pIdx->azColl[i], zDfltColl) ) break; + + zIdxCol = pParent->aCol[iCol].zName; + for(j=0; jaCol[j].zCol, zIdxCol)==0 ){ + if( aiCol ) aiCol[i] = pFKey->aCol[j].iFrom; + break; + } + } + if( j==nCol ) break; + } + if( i==nCol ) break; /* pIdx is usable */ + } + } } - if( !pTrigger ){ - if( !noErr ){ - sqlite3ErrorMsg(pParse, "no such trigger: %S", pName, 0); + + if( !pIdx ){ + if( !pParse->disableTriggers ){ + sqlite3ErrorMsg(pParse, "foreign key mismatch"); } - goto drop_trigger_cleanup; + sqlite3DbFree(pParse->db, aiCol); + return 1; } - sqlite3DropTriggerPtr(pParse, pTrigger); -drop_trigger_cleanup: - sqlite3SrcListDelete(db, pName); + *ppIdx = pIdx; + return 0; } /* -** Return a pointer to the Table structure for the table that a trigger -** is set on. +** This function is called when a row is inserted into or deleted from the +** child table of foreign key constraint pFKey. If an SQL UPDATE is executed +** on the child table of pFKey, this function is invoked twice for each row +** affected - once to "delete" the old row, and then again to "insert" the +** new row. +** +** Each time it is called, this function generates VDBE code to locate the +** row in the parent table that corresponds to the row being inserted into +** or deleted from the child table. If the parent row can be found, no +** special action is taken. Otherwise, if the parent row can *not* be +** found in the parent table: +** +** Operation | FK type | Action taken +** -------------------------------------------------------------------------- +** INSERT immediate Increment the "immediate constraint counter". +** +** DELETE immediate Decrement the "immediate constraint counter". +** +** INSERT deferred Increment the "deferred constraint counter". +** +** DELETE deferred Decrement the "deferred constraint counter". +** +** These operations are identified in the comment at the top of this file +** (fkey.c) as "I.1" and "D.1". */ -static Table *tableOfTrigger(Trigger *pTrigger){ - int n = sqlite3Strlen30(pTrigger->table); - return sqlite3HashFind(&pTrigger->pTabSchema->tblHash, pTrigger->table, n); -} +static void fkLookupParent( + Parse *pParse, /* Parse context */ + int iDb, /* Index of database housing pTab */ + Table *pTab, /* Parent table of FK pFKey */ + Index *pIdx, /* Unique index on parent key columns in pTab */ + FKey *pFKey, /* Foreign key constraint */ + int *aiCol, /* Map from parent key columns to child table columns */ + int regData, /* Address of array containing child table row */ + int nIncr, /* Increment constraint counter by this */ + int isIgnore /* If true, pretend pTab contains all NULL values */ +){ + int i; /* Iterator variable */ + Vdbe *v = sqlite3GetVdbe(pParse); /* Vdbe to add code to */ + int iCur = pParse->nTab - 1; /* Cursor number to use */ + int iOk = sqlite3VdbeMakeLabel(v); /* jump here if parent key found */ + + /* If nIncr is less than zero, then check at runtime if there are any + ** outstanding constraints to resolve. If there are not, there is no need + ** to check if deleting this row resolves any outstanding violations. + ** + ** Check if any of the key columns in the child table row are NULL. If + ** any are, then the constraint is considered satisfied. No need to + ** search for a matching row in the parent table. */ + if( nIncr<0 ){ + sqlite3VdbeAddOp2(v, OP_FkIfZero, pFKey->isDeferred, iOk); + } + for(i=0; inCol; i++){ + int iReg = aiCol[i] + regData + 1; + sqlite3VdbeAddOp2(v, OP_IsNull, iReg, iOk); + } + + if( isIgnore==0 ){ + if( pIdx==0 ){ + /* If pIdx is NULL, then the parent key is the INTEGER PRIMARY KEY + ** column of the parent table (table pTab). */ + int iMustBeInt; /* Address of MustBeInt instruction */ + int regTemp = sqlite3GetTempReg(pParse); + + /* Invoke MustBeInt to coerce the child key value to an integer (i.e. + ** apply the affinity of the parent key). If this fails, then there + ** is no matching parent key. Before using MustBeInt, make a copy of + ** the value. Otherwise, the value inserted into the child key column + ** will have INTEGER affinity applied to it, which may not be correct. */ + sqlite3VdbeAddOp2(v, OP_SCopy, aiCol[0]+1+regData, regTemp); + iMustBeInt = sqlite3VdbeAddOp2(v, OP_MustBeInt, regTemp, 0); + + /* If the parent table is the same as the child table, and we are about + ** to increment the constraint-counter (i.e. this is an INSERT operation), + ** then check if the row being inserted matches itself. If so, do not + ** increment the constraint-counter. */ + if( pTab==pFKey->pFrom && nIncr==1 ){ + sqlite3VdbeAddOp3(v, OP_Eq, regData, iOk, regTemp); + } + + sqlite3OpenTable(pParse, iCur, iDb, pTab, OP_OpenRead); + sqlite3VdbeAddOp3(v, OP_NotExists, iCur, 0, regTemp); + sqlite3VdbeAddOp2(v, OP_Goto, 0, iOk); + sqlite3VdbeJumpHere(v, sqlite3VdbeCurrentAddr(v)-2); + sqlite3VdbeJumpHere(v, iMustBeInt); + sqlite3ReleaseTempReg(pParse, regTemp); + }else{ + int nCol = pFKey->nCol; + int regTemp = sqlite3GetTempRange(pParse, nCol); + int regRec = sqlite3GetTempReg(pParse); + KeyInfo *pKey = sqlite3IndexKeyinfo(pParse, pIdx); + + sqlite3VdbeAddOp3(v, OP_OpenRead, iCur, pIdx->tnum, iDb); + sqlite3VdbeChangeP4(v, -1, (char*)pKey, P4_KEYINFO_HANDOFF); + for(i=0; ipFrom && nIncr==1 ){ + int iJump = sqlite3VdbeCurrentAddr(v) + nCol + 1; + for(i=0; iaiColumn[i]+1+regData; + assert( aiCol[i]!=pTab->iPKey ); + if( pIdx->aiColumn[i]==pTab->iPKey ){ + /* The parent key is a composite key that includes the IPK column */ + iParent = regData; + } + sqlite3VdbeAddOp3(v, OP_Ne, iChild, iJump, iParent); + sqlite3VdbeChangeP5(v, SQLITE_JUMPIFNULL); + } + sqlite3VdbeAddOp2(v, OP_Goto, 0, iOk); + } + + sqlite3VdbeAddOp3(v, OP_MakeRecord, regTemp, nCol, regRec); + sqlite3VdbeChangeP4(v, -1, sqlite3IndexAffinityStr(v,pIdx), P4_TRANSIENT); + sqlite3VdbeAddOp4Int(v, OP_Found, iCur, iOk, regRec, 0); + + sqlite3ReleaseTempReg(pParse, regRec); + sqlite3ReleaseTempRange(pParse, regTemp, nCol); + } + } + + if( !pFKey->isDeferred && !pParse->pToplevel && !pParse->isMultiWrite ){ + /* Special case: If this is an INSERT statement that will insert exactly + ** one row into the table, raise a constraint immediately instead of + ** incrementing a counter. This is necessary as the VM code is being + ** generated for will not open a statement transaction. */ + assert( nIncr==1 ); + sqlite3HaltConstraint( + pParse, OE_Abort, "foreign key constraint failed", P4_STATIC + ); + }else{ + if( nIncr>0 && pFKey->isDeferred==0 ){ + sqlite3ParseToplevel(pParse)->mayAbort = 1; + } + sqlite3VdbeAddOp2(v, OP_FkCounter, pFKey->isDeferred, nIncr); + } + sqlite3VdbeResolveLabel(v, iOk); + sqlite3VdbeAddOp1(v, OP_Close, iCur); +} /* -** Drop a trigger given a pointer to that trigger. +** This function is called to generate code executed when a row is deleted +** from the parent table of foreign key constraint pFKey and, if pFKey is +** deferred, when a row is inserted into the same table. When generating +** code for an SQL UPDATE operation, this function may be called twice - +** once to "delete" the old row and once to "insert" the new row. +** +** The code generated by this function scans through the rows in the child +** table that correspond to the parent table row being deleted or inserted. +** For each child row found, one of the following actions is taken: +** +** Operation | FK type | Action taken +** -------------------------------------------------------------------------- +** DELETE immediate Increment the "immediate constraint counter". +** Or, if the ON (UPDATE|DELETE) action is RESTRICT, +** throw a "foreign key constraint failed" exception. +** +** INSERT immediate Decrement the "immediate constraint counter". +** +** DELETE deferred Increment the "deferred constraint counter". +** Or, if the ON (UPDATE|DELETE) action is RESTRICT, +** throw a "foreign key constraint failed" exception. +** +** INSERT deferred Decrement the "deferred constraint counter". +** +** These operations are identified in the comment at the top of this file +** (fkey.c) as "I.2" and "D.2". */ -SQLITE_PRIVATE void sqlite3DropTriggerPtr(Parse *pParse, Trigger *pTrigger){ - Table *pTable; - Vdbe *v; - sqlite3 *db = pParse->db; - int iDb; +static void fkScanChildren( + Parse *pParse, /* Parse context */ + SrcList *pSrc, /* SrcList containing the table to scan */ + Table *pTab, + Index *pIdx, /* Foreign key index */ + FKey *pFKey, /* Foreign key relationship */ + int *aiCol, /* Map from pIdx cols to child table cols */ + int regData, /* Referenced table data starts here */ + int nIncr /* Amount to increment deferred counter by */ +){ + sqlite3 *db = pParse->db; /* Database handle */ + int i; /* Iterator variable */ + Expr *pWhere = 0; /* WHERE clause to scan with */ + NameContext sNameContext; /* Context used to resolve WHERE clause */ + WhereInfo *pWInfo; /* Context used by sqlite3WhereXXX() */ + int iFkIfZero = 0; /* Address of OP_FkIfZero */ + Vdbe *v = sqlite3GetVdbe(pParse); - iDb = sqlite3SchemaToIndex(pParse->db, pTrigger->pSchema); - assert( iDb>=0 && iDbnDb ); - pTable = tableOfTrigger(pTrigger); - assert( pTable ); - assert( pTable->pSchema==pTrigger->pSchema || iDb==1 ); -#ifndef SQLITE_OMIT_AUTHORIZATION - { - int code = SQLITE_DROP_TRIGGER; - const char *zDb = db->aDb[iDb].zName; - const char *zTab = SCHEMA_TABLE(iDb); - if( iDb==1 ) code = SQLITE_DROP_TEMP_TRIGGER; - if( sqlite3AuthCheck(pParse, code, pTrigger->name, pTable->zName, zDb) || - sqlite3AuthCheck(pParse, SQLITE_DELETE, zTab, 0, zDb) ){ - return; - } + assert( !pIdx || pIdx->pTable==pTab ); + + if( nIncr<0 ){ + iFkIfZero = sqlite3VdbeAddOp2(v, OP_FkIfZero, pFKey->isDeferred, 0); } -#endif - /* Generate code to destroy the database record of the trigger. - */ - assert( pTable!=0 ); - if( (v = sqlite3GetVdbe(pParse))!=0 ){ - int base; - static const VdbeOpList dropTrigger[] = { - { OP_Rewind, 0, ADDR(9), 0}, - { OP_String8, 0, 1, 0}, /* 1 */ - { OP_Column, 0, 1, 2}, - { OP_Ne, 2, ADDR(8), 1}, - { OP_String8, 0, 1, 0}, /* 4: "trigger" */ - { OP_Column, 0, 0, 2}, - { OP_Ne, 2, ADDR(8), 1}, - { OP_Delete, 0, 0, 0}, - { OP_Next, 0, ADDR(1), 0}, /* 8 */ - }; + /* Create an Expr object representing an SQL expression like: + ** + ** = AND = ... + ** + ** The collation sequence used for the comparison should be that of + ** the parent key columns. The affinity of the parent key column should + ** be applied to each child key value before the comparison takes place. + */ + for(i=0; inCol; i++){ + Expr *pLeft; /* Value from parent table row */ + Expr *pRight; /* Column ref to child table */ + Expr *pEq; /* Expression (pLeft = pRight) */ + int iCol; /* Index of column in child table */ + const char *zCol; /* Name of column in child table */ + + pLeft = sqlite3Expr(db, TK_REGISTER, 0); + if( pLeft ){ + /* Set the collation sequence and affinity of the LHS of each TK_EQ + ** expression to the parent key column defaults. */ + if( pIdx ){ + Column *pCol; + iCol = pIdx->aiColumn[i]; + pCol = &pTab->aCol[iCol]; + if( pTab->iPKey==iCol ) iCol = -1; + pLeft->iTable = regData+iCol+1; + pLeft->affinity = pCol->affinity; + pLeft->pColl = sqlite3LocateCollSeq(pParse, pCol->zColl); + }else{ + pLeft->iTable = regData; + pLeft->affinity = SQLITE_AFF_INTEGER; + } + } + iCol = aiCol ? aiCol[i] : pFKey->aCol[0].iFrom; + assert( iCol>=0 ); + zCol = pFKey->pFrom->aCol[iCol].zName; + pRight = sqlite3Expr(db, TK_ID, zCol); + pEq = sqlite3PExpr(pParse, TK_EQ, pLeft, pRight, 0); + pWhere = sqlite3ExprAnd(db, pWhere, pEq); + } + + /* If the child table is the same as the parent table, and this scan + ** is taking place as part of a DELETE operation (operation D.2), omit the + ** row being deleted from the scan by adding ($rowid != rowid) to the WHERE + ** clause, where $rowid is the rowid of the row being deleted. */ + if( pTab==pFKey->pFrom && nIncr>0 ){ + Expr *pEq; /* Expression (pLeft = pRight) */ + Expr *pLeft; /* Value from parent table row */ + Expr *pRight; /* Column ref to child table */ + pLeft = sqlite3Expr(db, TK_REGISTER, 0); + pRight = sqlite3Expr(db, TK_COLUMN, 0); + if( pLeft && pRight ){ + pLeft->iTable = regData; + pLeft->affinity = SQLITE_AFF_INTEGER; + pRight->iTable = pSrc->a[0].iCursor; + pRight->iColumn = -1; + } + pEq = sqlite3PExpr(pParse, TK_NE, pLeft, pRight, 0); + pWhere = sqlite3ExprAnd(db, pWhere, pEq); + } + + /* Resolve the references in the WHERE clause. */ + memset(&sNameContext, 0, sizeof(NameContext)); + sNameContext.pSrcList = pSrc; + sNameContext.pParse = pParse; + sqlite3ResolveExprNames(&sNameContext, pWhere); + + /* Create VDBE to loop through the entries in pSrc that match the WHERE + ** clause. If the constraint is not deferred, throw an exception for + ** each row found. Otherwise, for deferred constraints, increment the + ** deferred constraint counter by nIncr for each row selected. */ + pWInfo = sqlite3WhereBegin(pParse, pSrc, pWhere, 0, 0, 0); + if( nIncr>0 && pFKey->isDeferred==0 ){ + sqlite3ParseToplevel(pParse)->mayAbort = 1; + } + sqlite3VdbeAddOp2(v, OP_FkCounter, pFKey->isDeferred, nIncr); + if( pWInfo ){ + sqlite3WhereEnd(pWInfo); + } - sqlite3BeginWriteOperation(pParse, 0, iDb); - sqlite3OpenMasterTable(pParse, iDb); - base = sqlite3VdbeAddOpList(v, ArraySize(dropTrigger), dropTrigger); - sqlite3VdbeChangeP4(v, base+1, pTrigger->name, 0); - sqlite3VdbeChangeP4(v, base+4, "trigger", P4_STATIC); - sqlite3ChangeCookie(pParse, iDb); - sqlite3VdbeAddOp2(v, OP_Close, 0, 0); - sqlite3VdbeAddOp4(v, OP_DropTrigger, iDb, 0, 0, pTrigger->name, 0); - if( pParse->nMem<3 ){ - pParse->nMem = 3; - } + /* Clean up the WHERE clause constructed above. */ + sqlite3ExprDelete(db, pWhere); + if( iFkIfZero ){ + sqlite3VdbeJumpHere(v, iFkIfZero); } } /* -** Remove a trigger from the hash tables of the sqlite* pointer. +** This function returns a pointer to the head of a linked list of FK +** constraints for which table pTab is the parent table. For example, +** given the following schema: +** +** CREATE TABLE t1(a PRIMARY KEY); +** CREATE TABLE t2(b REFERENCES t1(a); +** +** Calling this function with table "t1" as an argument returns a pointer +** to the FKey structure representing the foreign key constraint on table +** "t2". Calling this function with "t2" as the argument would return a +** NULL pointer (as there are no FK constraints for which t2 is the parent +** table). */ -SQLITE_PRIVATE void sqlite3UnlinkAndDeleteTrigger(sqlite3 *db, int iDb, const char *zName){ - Hash *pHash = &(db->aDb[iDb].pSchema->trigHash); - Trigger *pTrigger; - pTrigger = sqlite3HashInsert(pHash, zName, sqlite3Strlen30(zName), 0); - if( ALWAYS(pTrigger) ){ - if( pTrigger->pSchema==pTrigger->pTabSchema ){ - Table *pTab = tableOfTrigger(pTrigger); - Trigger **pp; - for(pp=&pTab->pTrigger; *pp!=pTrigger; pp=&((*pp)->pNext)); - *pp = (*pp)->pNext; - } - sqlite3DeleteTrigger(db, pTrigger); - db->flags |= SQLITE_InternChanges; - } +SQLITE_PRIVATE FKey *sqlite3FkReferences(Table *pTab){ + int nName = sqlite3Strlen30(pTab->zName); + return (FKey *)sqlite3HashFind(&pTab->pSchema->fkeyHash, pTab->zName, nName); } /* -** pEList is the SET clause of an UPDATE statement. Each entry -** in pEList is of the format =. If any of the entries -** in pEList have an which matches an identifier in pIdList, -** then return TRUE. If pIdList==NULL, then it is considered a -** wildcard that matches anything. Likewise if pEList==NULL then -** it matches anything so always return true. Return false only -** if there is no match. +** The second argument is a Trigger structure allocated by the +** fkActionTrigger() routine. This function deletes the Trigger structure +** and all of its sub-components. +** +** The Trigger structure or any of its sub-components may be allocated from +** the lookaside buffer belonging to database handle dbMem. */ -static int checkColumnOverlap(IdList *pIdList, ExprList *pEList){ - int e; - if( pIdList==0 || NEVER(pEList==0) ) return 1; - for(e=0; enExpr; e++){ - if( sqlite3IdListIndex(pIdList, pEList->a[e].zName)>=0 ) return 1; +static void fkTriggerDelete(sqlite3 *dbMem, Trigger *p){ + if( p ){ + TriggerStep *pStep = p->step_list; + sqlite3ExprDelete(dbMem, pStep->pWhere); + sqlite3ExprListDelete(dbMem, pStep->pExprList); + sqlite3SelectDelete(dbMem, pStep->pSelect); + sqlite3ExprDelete(dbMem, p->pWhen); + sqlite3DbFree(dbMem, p); } - return 0; } /* -** Return a list of all triggers on table pTab if there exists at least -** one trigger that must be fired when an operation of type 'op' is -** performed on the table, and, if that operation is an UPDATE, if at -** least one of the columns in pChanges is being modified. +** This function is called to generate code that runs when table pTab is +** being dropped from the database. The SrcList passed as the second argument +** to this function contains a single entry guaranteed to resolve to +** table pTab. +** +** Normally, no code is required. However, if either +** +** (a) The table is the parent table of a FK constraint, or +** (b) The table is the child table of a deferred FK constraint and it is +** determined at runtime that there are outstanding deferred FK +** constraint violations in the database, +** +** then the equivalent of "DELETE FROM " is executed before dropping +** the table from the database. Triggers are disabled while running this +** DELETE, but foreign key actions are not. */ -SQLITE_PRIVATE Trigger *sqlite3TriggersExist( - Parse *pParse, /* Parse context */ - Table *pTab, /* The table the contains the triggers */ - int op, /* one of TK_DELETE, TK_INSERT, TK_UPDATE */ - ExprList *pChanges, /* Columns that change in an UPDATE statement */ - int *pMask /* OUT: Mask of TRIGGER_BEFORE|TRIGGER_AFTER */ -){ - int mask = 0; - Trigger *pList = sqlite3TriggerList(pParse, pTab); - Trigger *p; - assert( pList==0 || IsVirtual(pTab)==0 ); - for(p=pList; p; p=p->pNext){ - if( p->op==op && checkColumnOverlap(p->pColumns, pChanges) ){ - mask |= p->tr_tm; +SQLITE_PRIVATE void sqlite3FkDropTable(Parse *pParse, SrcList *pName, Table *pTab){ + sqlite3 *db = pParse->db; + if( (db->flags&SQLITE_ForeignKeys) && !IsVirtual(pTab) && !pTab->pSelect ){ + int iSkip = 0; + Vdbe *v = sqlite3GetVdbe(pParse); + + assert( v ); /* VDBE has already been allocated */ + if( sqlite3FkReferences(pTab)==0 ){ + /* Search for a deferred foreign key constraint for which this table + ** is the child table. If one cannot be found, return without + ** generating any VDBE code. If one can be found, then jump over + ** the entire DELETE if there are no outstanding deferred constraints + ** when this statement is run. */ + FKey *p; + for(p=pTab->pFKey; p; p=p->pNextFrom){ + if( p->isDeferred ) break; + } + if( !p ) return; + iSkip = sqlite3VdbeMakeLabel(v); + sqlite3VdbeAddOp2(v, OP_FkIfZero, 1, iSkip); + } + + pParse->disableTriggers = 1; + sqlite3DeleteFrom(pParse, sqlite3SrcListDup(db, pName, 0), 0); + pParse->disableTriggers = 0; + + /* If the DELETE has generated immediate foreign key constraint + ** violations, halt the VDBE and return an error at this point, before + ** any modifications to the schema are made. This is because statement + ** transactions are not able to rollback schema changes. */ + sqlite3VdbeAddOp2(v, OP_FkIfZero, 0, sqlite3VdbeCurrentAddr(v)+2); + sqlite3HaltConstraint( + pParse, OE_Abort, "foreign key constraint failed", P4_STATIC + ); + + if( iSkip ){ + sqlite3VdbeResolveLabel(v, iSkip); } } - if( pMask ){ - *pMask = mask; - } - return (mask ? pList : 0); } /* -** Convert the pStep->target token into a SrcList and return a pointer -** to that SrcList. +** This function is called when inserting, deleting or updating a row of +** table pTab to generate VDBE code to perform foreign key constraint +** processing for the operation. ** -** This routine adds a specific database name, if needed, to the target when -** forming the SrcList. This prevents a trigger in one database from -** referring to a target in another database. An exception is when the -** trigger is in TEMP in which case it can refer to any other database it -** wants. +** For a DELETE operation, parameter regOld is passed the index of the +** first register in an array of (pTab->nCol+1) registers containing the +** rowid of the row being deleted, followed by each of the column values +** of the row being deleted, from left to right. Parameter regNew is passed +** zero in this case. +** +** For an INSERT operation, regOld is passed zero and regNew is passed the +** first register of an array of (pTab->nCol+1) registers containing the new +** row data. +** +** For an UPDATE operation, this function is called twice. Once before +** the original record is deleted from the table using the calling convention +** described for DELETE. Then again after the original record is deleted +** but before the new record is inserted using the INSERT convention. */ -static SrcList *targetSrcList( - Parse *pParse, /* The parsing context */ - TriggerStep *pStep /* The trigger containing the target token */ +SQLITE_PRIVATE void sqlite3FkCheck( + Parse *pParse, /* Parse context */ + Table *pTab, /* Row is being deleted from this table */ + int regOld, /* Previous row data is stored here */ + int regNew /* New row data is stored here */ ){ - int iDb; /* Index of the database to use */ - SrcList *pSrc; /* SrcList to be returned */ + sqlite3 *db = pParse->db; /* Database handle */ + FKey *pFKey; /* Used to iterate through FKs */ + int iDb; /* Index of database containing pTab */ + const char *zDb; /* Name of database containing pTab */ + int isIgnoreErrors = pParse->disableTriggers; - pSrc = sqlite3SrcListAppend(pParse->db, 0, &pStep->target, 0); - if( pSrc ){ - assert( pSrc->nSrc>0 ); - assert( pSrc->a!=0 ); - iDb = sqlite3SchemaToIndex(pParse->db, pStep->pTrig->pSchema); - if( iDb==0 || iDb>=2 ){ - sqlite3 *db = pParse->db; - assert( iDbdb->nDb ); - pSrc->a[pSrc->nSrc-1].zDatabase = sqlite3DbStrDup(db, db->aDb[iDb].zName); + /* Exactly one of regOld and regNew should be non-zero. */ + assert( (regOld==0)!=(regNew==0) ); + + /* If foreign-keys are disabled, this function is a no-op. */ + if( (db->flags&SQLITE_ForeignKeys)==0 ) return; + + iDb = sqlite3SchemaToIndex(db, pTab->pSchema); + zDb = db->aDb[iDb].zName; + + /* Loop through all the foreign key constraints for which pTab is the + ** child table (the table that the foreign key definition is part of). */ + for(pFKey=pTab->pFKey; pFKey; pFKey=pFKey->pNextFrom){ + Table *pTo; /* Parent table of foreign key pFKey */ + Index *pIdx = 0; /* Index on key columns in pTo */ + int *aiFree = 0; + int *aiCol; + int iCol; + int i; + int isIgnore = 0; + + /* Find the parent table of this foreign key. Also find a unique index + ** on the parent key columns in the parent table. If either of these + ** schema items cannot be located, set an error in pParse and return + ** early. */ + if( pParse->disableTriggers ){ + pTo = sqlite3FindTable(db, pFKey->zTo, zDb); + }else{ + pTo = sqlite3LocateTable(pParse, 0, pFKey->zTo, zDb); + } + if( !pTo || locateFkeyIndex(pParse, pTo, pFKey, &pIdx, &aiFree) ){ + assert( isIgnoreErrors==0 || (regOld!=0 && regNew==0) ); + if( !isIgnoreErrors || db->mallocFailed ) return; + if( pTo==0 ){ + /* If isIgnoreErrors is true, then a table is being dropped. In this + ** case SQLite runs a "DELETE FROM xxx" on the table being dropped + ** before actually dropping it in order to check FK constraints. + ** If the parent table of an FK constraint on the current table is + ** missing, behave as if it is empty. i.e. decrement the relevant + ** FK counter for each row of the current table with non-NULL keys. + */ + Vdbe *v = sqlite3GetVdbe(pParse); + int iJump = sqlite3VdbeCurrentAddr(v) + pFKey->nCol + 1; + for(i=0; inCol; i++){ + int iReg = pFKey->aCol[i].iFrom + regOld + 1; + sqlite3VdbeAddOp2(v, OP_IsNull, iReg, iJump); + } + sqlite3VdbeAddOp2(v, OP_FkCounter, pFKey->isDeferred, -1); + } + continue; + } + assert( pFKey->nCol==1 || (aiFree && pIdx) ); + + if( aiFree ){ + aiCol = aiFree; + }else{ + iCol = pFKey->aCol[0].iFrom; + aiCol = &iCol; + } + for(i=0; inCol; i++){ + if( aiCol[i]==pTab->iPKey ){ + aiCol[i] = -1; + } +#ifndef SQLITE_OMIT_AUTHORIZATION + /* Request permission to read the parent key columns. If the + ** authorization callback returns SQLITE_IGNORE, behave as if any + ** values read from the parent table are NULL. */ + if( db->xAuth ){ + int rcauth; + char *zCol = pTo->aCol[pIdx ? pIdx->aiColumn[i] : pTo->iPKey].zName; + rcauth = sqlite3AuthReadCol(pParse, pTo->zName, zCol, iDb); + isIgnore = (rcauth==SQLITE_IGNORE); + } +#endif + } + + /* Take a shared-cache advisory read-lock on the parent table. Allocate + ** a cursor to use to search the unique index on the parent key columns + ** in the parent table. */ + sqlite3TableLock(pParse, iDb, pTo->tnum, 0, pTo->zName); + pParse->nTab++; + + if( regOld!=0 ){ + /* A row is being removed from the child table. Search for the parent. + ** If the parent does not exist, removing the child row resolves an + ** outstanding foreign key constraint violation. */ + fkLookupParent(pParse, iDb, pTo, pIdx, pFKey, aiCol, regOld, -1,isIgnore); + } + if( regNew!=0 ){ + /* A row is being added to the child table. If a parent row cannot + ** be found, adding the child row has violated the FK constraint. */ + fkLookupParent(pParse, iDb, pTo, pIdx, pFKey, aiCol, regNew, +1,isIgnore); } + + sqlite3DbFree(db, aiFree); + } + + /* Loop through all the foreign key constraints that refer to this table */ + for(pFKey = sqlite3FkReferences(pTab); pFKey; pFKey=pFKey->pNextTo){ + Index *pIdx = 0; /* Foreign key index for pFKey */ + SrcList *pSrc; + int *aiCol = 0; + + if( !pFKey->isDeferred && !pParse->pToplevel && !pParse->isMultiWrite ){ + assert( regOld==0 && regNew!=0 ); + /* Inserting a single row into a parent table cannot cause an immediate + ** foreign key violation. So do nothing in this case. */ + continue; + } + + if( locateFkeyIndex(pParse, pTab, pFKey, &pIdx, &aiCol) ){ + if( !isIgnoreErrors || db->mallocFailed ) return; + continue; + } + assert( aiCol || pFKey->nCol==1 ); + + /* Create a SrcList structure containing a single table (the table + ** the foreign key that refers to this table is attached to). This + ** is required for the sqlite3WhereXXX() interface. */ + pSrc = sqlite3SrcListAppend(db, 0, 0, 0); + if( pSrc ){ + struct SrcList_item *pItem = pSrc->a; + pItem->pTab = pFKey->pFrom; + pItem->zName = pFKey->pFrom->zName; + pItem->pTab->nRef++; + pItem->iCursor = pParse->nTab++; + + if( regNew!=0 ){ + fkScanChildren(pParse, pSrc, pTab, pIdx, pFKey, aiCol, regNew, -1); + } + if( regOld!=0 ){ + /* If there is a RESTRICT action configured for the current operation + ** on the parent table of this FK, then throw an exception + ** immediately if the FK constraint is violated, even if this is a + ** deferred trigger. That's what RESTRICT means. To defer checking + ** the constraint, the FK should specify NO ACTION (represented + ** using OE_None). NO ACTION is the default. */ + fkScanChildren(pParse, pSrc, pTab, pIdx, pFKey, aiCol, regOld, 1); + } + pItem->zName = 0; + sqlite3SrcListDelete(db, pSrc); + } + sqlite3DbFree(db, aiCol); } - return pSrc; } +#define COLUMN_MASK(x) (((x)>31) ? 0xffffffff : ((u32)1<<(x))) + /* -** Generate VDBE code for zero or more statements inside the body of a -** trigger. +** This function is called before generating code to update or delete a +** row contained in table pTab. */ -static int codeTriggerProgram( - Parse *pParse, /* The parser context */ - TriggerStep *pStepList, /* List of statements inside the trigger body */ - int orconfin /* Conflict algorithm. (OE_Abort, etc) */ +SQLITE_PRIVATE u32 sqlite3FkOldmask( + Parse *pParse, /* Parse context */ + Table *pTab /* Table being modified */ ){ - TriggerStep * pTriggerStep = pStepList; - int orconf; - Vdbe *v = pParse->pVdbe; - sqlite3 *db = pParse->db; - - assert( pTriggerStep!=0 ); - assert( v!=0 ); - sqlite3VdbeAddOp2(v, OP_ContextPush, 0, 0); - VdbeComment((v, "begin trigger %s", pStepList->pTrig->name)); - while( pTriggerStep ){ - sqlite3ExprCacheClear(pParse); - orconf = (orconfin == OE_Default)?pTriggerStep->orconf:orconfin; - pParse->trigStack->orconf = orconf; - switch( pTriggerStep->op ){ - case TK_UPDATE: { - SrcList *pSrc; - pSrc = targetSrcList(pParse, pTriggerStep); - sqlite3VdbeAddOp2(v, OP_ResetCount, 0, 0); - sqlite3Update(pParse, pSrc, - sqlite3ExprListDup(db, pTriggerStep->pExprList, 0), - sqlite3ExprDup(db, pTriggerStep->pWhere, 0), orconf); - sqlite3VdbeAddOp2(v, OP_ResetCount, 1, 0); - break; - } - case TK_INSERT: { - SrcList *pSrc; - pSrc = targetSrcList(pParse, pTriggerStep); - sqlite3VdbeAddOp2(v, OP_ResetCount, 0, 0); - sqlite3Insert(pParse, pSrc, - sqlite3ExprListDup(db, pTriggerStep->pExprList, 0), - sqlite3SelectDup(db, pTriggerStep->pSelect, 0), - sqlite3IdListDup(db, pTriggerStep->pIdList), orconf); - sqlite3VdbeAddOp2(v, OP_ResetCount, 1, 0); - break; + u32 mask = 0; + if( pParse->db->flags&SQLITE_ForeignKeys ){ + FKey *p; + int i; + for(p=pTab->pFKey; p; p=p->pNextFrom){ + for(i=0; inCol; i++) mask |= COLUMN_MASK(p->aCol[i].iFrom); + } + for(p=sqlite3FkReferences(pTab); p; p=p->pNextTo){ + Index *pIdx = 0; + locateFkeyIndex(pParse, pTab, p, &pIdx, 0); + if( pIdx ){ + for(i=0; inColumn; i++) mask |= COLUMN_MASK(pIdx->aiColumn[i]); } - case TK_DELETE: { - SrcList *pSrc; - sqlite3VdbeAddOp2(v, OP_ResetCount, 0, 0); - pSrc = targetSrcList(pParse, pTriggerStep); - sqlite3DeleteFrom(pParse, pSrc, - sqlite3ExprDup(db, pTriggerStep->pWhere, 0)); - sqlite3VdbeAddOp2(v, OP_ResetCount, 1, 0); - break; + } + } + return mask; +} + +/* +** This function is called before generating code to update or delete a +** row contained in table pTab. If the operation is a DELETE, then +** parameter aChange is passed a NULL value. For an UPDATE, aChange points +** to an array of size N, where N is the number of columns in table pTab. +** If the i'th column is not modified by the UPDATE, then the corresponding +** entry in the aChange[] array is set to -1. If the column is modified, +** the value is 0 or greater. Parameter chngRowid is set to true if the +** UPDATE statement modifies the rowid fields of the table. +** +** If any foreign key processing will be required, this function returns +** true. If there is no foreign key related processing, this function +** returns false. +*/ +SQLITE_PRIVATE int sqlite3FkRequired( + Parse *pParse, /* Parse context */ + Table *pTab, /* Table being modified */ + int *aChange, /* Non-NULL for UPDATE operations */ + int chngRowid /* True for UPDATE that affects rowid */ +){ + if( pParse->db->flags&SQLITE_ForeignKeys ){ + if( !aChange ){ + /* A DELETE operation. Foreign key processing is required if the + ** table in question is either the child or parent table for any + ** foreign key constraint. */ + return (sqlite3FkReferences(pTab) || pTab->pFKey); + }else{ + /* This is an UPDATE. Foreign key processing is only required if the + ** operation modifies one or more child or parent key columns. */ + int i; + FKey *p; + + /* Check if any child key columns are being modified. */ + for(p=pTab->pFKey; p; p=p->pNextFrom){ + for(i=0; inCol; i++){ + int iChildKey = p->aCol[i].iFrom; + if( aChange[iChildKey]>=0 ) return 1; + if( iChildKey==pTab->iPKey && chngRowid ) return 1; + } } - default: assert( pTriggerStep->op==TK_SELECT ); { - Select *ss = sqlite3SelectDup(db, pTriggerStep->pSelect, 0); - if( ss ){ - SelectDest dest; - sqlite3SelectDestInit(&dest, SRT_Discard, 0); - sqlite3Select(pParse, ss, &dest); - sqlite3SelectDelete(db, ss); + /* Check if any parent key columns are being modified. */ + for(p=sqlite3FkReferences(pTab); p; p=p->pNextTo){ + for(i=0; inCol; i++){ + char *zKey = p->aCol[i].zCol; + int iKey; + for(iKey=0; iKeynCol; iKey++){ + Column *pCol = &pTab->aCol[iKey]; + if( (zKey ? !sqlite3StrICmp(pCol->zName, zKey) : pCol->isPrimKey) ){ + if( aChange[iKey]>=0 ) return 1; + if( iKey==pTab->iPKey && chngRowid ) return 1; + } + } } - break; } - } - pTriggerStep = pTriggerStep->pNext; + } } - sqlite3VdbeAddOp2(v, OP_ContextPop, 0, 0); - VdbeComment((v, "end trigger %s", pStepList->pTrig->name)); - return 0; } /* -** This is called to code FOR EACH ROW triggers. +** This function is called when an UPDATE or DELETE operation is being +** compiled on table pTab, which is the parent table of foreign-key pFKey. +** If the current operation is an UPDATE, then the pChanges parameter is +** passed a pointer to the list of columns being modified. If it is a +** DELETE, pChanges is passed a NULL pointer. ** -** When the code that this function generates is executed, the following -** must be true: +** It returns a pointer to a Trigger structure containing a trigger +** equivalent to the ON UPDATE or ON DELETE action specified by pFKey. +** If the action is "NO ACTION" or "RESTRICT", then a NULL pointer is +** returned (these actions require no special handling by the triggers +** sub-system, code for them is created by fkScanChildren()). ** -** 1. No cursors may be open in the main database. (But newIdx and oldIdx -** can be indices of cursors in temporary tables. See below.) +** For example, if pFKey is the foreign key and pTab is table "p" in +** the following schema: ** -** 2. If the triggers being coded are ON INSERT or ON UPDATE triggers, then -** a temporary vdbe cursor (index newIdx) must be open and pointing at -** a row containing values to be substituted for new.* expressions in the -** trigger program(s). +** CREATE TABLE p(pk PRIMARY KEY); +** CREATE TABLE c(ck REFERENCES p ON DELETE CASCADE); ** -** 3. If the triggers being coded are ON DELETE or ON UPDATE triggers, then -** a temporary vdbe cursor (index oldIdx) must be open and pointing at -** a row containing values to be substituted for old.* expressions in the -** trigger program(s). +** then the returned trigger structure is equivalent to: ** -** If they are not NULL, the piOldColMask and piNewColMask output variables -** are set to values that describe the columns used by the trigger program -** in the OLD.* and NEW.* tables respectively. If column N of the -** pseudo-table is read at least once, the corresponding bit of the output -** mask is set. If a column with an index greater than 32 is read, the -** output mask is set to the special value 0xffffffff. +** CREATE TRIGGER ... DELETE ON p BEGIN +** DELETE FROM c WHERE ck = old.pk; +** END; ** +** The returned pointer is cached as part of the foreign key object. It +** is eventually freed along with the rest of the foreign key object by +** sqlite3FkDelete(). */ -SQLITE_PRIVATE int sqlite3CodeRowTrigger( - Parse *pParse, /* Parse context */ - Trigger *pTrigger, /* List of triggers on table pTab */ - int op, /* One of TK_UPDATE, TK_INSERT, TK_DELETE */ - ExprList *pChanges, /* Changes list for any UPDATE OF triggers */ - int tr_tm, /* One of TRIGGER_BEFORE, TRIGGER_AFTER */ - Table *pTab, /* The table to code triggers from */ - int newIdx, /* The indice of the "new" row to access */ - int oldIdx, /* The indice of the "old" row to access */ - int orconf, /* ON CONFLICT policy */ - int ignoreJump, /* Instruction to jump to for RAISE(IGNORE) */ - u32 *piOldColMask, /* OUT: Mask of columns used from the OLD.* table */ - u32 *piNewColMask /* OUT: Mask of columns used from the NEW.* table */ +static Trigger *fkActionTrigger( + Parse *pParse, /* Parse context */ + Table *pTab, /* Table being updated or deleted from */ + FKey *pFKey, /* Foreign key to get action for */ + ExprList *pChanges /* Change-list for UPDATE, NULL for DELETE */ ){ - Trigger *p; - sqlite3 *db = pParse->db; - TriggerStack trigStackEntry; - - trigStackEntry.oldColMask = 0; - trigStackEntry.newColMask = 0; - - assert(op == TK_UPDATE || op == TK_INSERT || op == TK_DELETE); - assert(tr_tm == TRIGGER_BEFORE || tr_tm == TRIGGER_AFTER ); - - assert(newIdx != -1 || oldIdx != -1); + sqlite3 *db = pParse->db; /* Database handle */ + int action; /* One of OE_None, OE_Cascade etc. */ + Trigger *pTrigger; /* Trigger definition to return */ + int iAction = (pChanges!=0); /* 1 for UPDATE, 0 for DELETE */ + + action = pFKey->aAction[iAction]; + pTrigger = pFKey->apTrigger[iAction]; + + if( action!=OE_None && !pTrigger ){ + u8 enableLookaside; /* Copy of db->lookaside.bEnabled */ + char const *zFrom; /* Name of child table */ + int nFrom; /* Length in bytes of zFrom */ + Index *pIdx = 0; /* Parent key index for this FK */ + int *aiCol = 0; /* child table cols -> parent key cols */ + TriggerStep *pStep = 0; /* First (only) step of trigger program */ + Expr *pWhere = 0; /* WHERE clause of trigger step */ + ExprList *pList = 0; /* Changes list if ON UPDATE CASCADE */ + Select *pSelect = 0; /* If RESTRICT, "SELECT RAISE(...)" */ + int i; /* Iterator variable */ + Expr *pWhen = 0; /* WHEN clause for the trigger */ + + if( locateFkeyIndex(pParse, pTab, pFKey, &pIdx, &aiCol) ) return 0; + assert( aiCol || pFKey->nCol==1 ); + + for(i=0; inCol; i++){ + Token tOld = { "old", 3 }; /* Literal "old" token */ + Token tNew = { "new", 3 }; /* Literal "new" token */ + Token tFromCol; /* Name of column in child table */ + Token tToCol; /* Name of column in parent table */ + int iFromCol; /* Idx of column in child table */ + Expr *pEq; /* tFromCol = OLD.tToCol */ + + iFromCol = aiCol ? aiCol[i] : pFKey->aCol[0].iFrom; + assert( iFromCol>=0 ); + tToCol.z = pIdx ? pTab->aCol[pIdx->aiColumn[i]].zName : "oid"; + tFromCol.z = pFKey->pFrom->aCol[iFromCol].zName; + + tToCol.n = sqlite3Strlen30(tToCol.z); + tFromCol.n = sqlite3Strlen30(tFromCol.z); + + /* Create the expression "OLD.zToCol = zFromCol". It is important + ** that the "OLD.zToCol" term is on the LHS of the = operator, so + ** that the affinity and collation sequence associated with the + ** parent table are used for the comparison. */ + pEq = sqlite3PExpr(pParse, TK_EQ, + sqlite3PExpr(pParse, TK_DOT, + sqlite3PExpr(pParse, TK_ID, 0, 0, &tOld), + sqlite3PExpr(pParse, TK_ID, 0, 0, &tToCol) + , 0), + sqlite3PExpr(pParse, TK_ID, 0, 0, &tFromCol) + , 0); + pWhere = sqlite3ExprAnd(db, pWhere, pEq); + + /* For ON UPDATE, construct the next term of the WHEN clause. + ** The final WHEN clause will be like this: + ** + ** WHEN NOT(old.col1 IS new.col1 AND ... AND old.colN IS new.colN) + */ + if( pChanges ){ + pEq = sqlite3PExpr(pParse, TK_IS, + sqlite3PExpr(pParse, TK_DOT, + sqlite3PExpr(pParse, TK_ID, 0, 0, &tOld), + sqlite3PExpr(pParse, TK_ID, 0, 0, &tToCol), + 0), + sqlite3PExpr(pParse, TK_DOT, + sqlite3PExpr(pParse, TK_ID, 0, 0, &tNew), + sqlite3PExpr(pParse, TK_ID, 0, 0, &tToCol), + 0), + 0); + pWhen = sqlite3ExprAnd(db, pWhen, pEq); + } + + if( action!=OE_Restrict && (action!=OE_Cascade || pChanges) ){ + Expr *pNew; + if( action==OE_Cascade ){ + pNew = sqlite3PExpr(pParse, TK_DOT, + sqlite3PExpr(pParse, TK_ID, 0, 0, &tNew), + sqlite3PExpr(pParse, TK_ID, 0, 0, &tToCol) + , 0); + }else if( action==OE_SetDflt ){ + Expr *pDflt = pFKey->pFrom->aCol[iFromCol].pDflt; + if( pDflt ){ + pNew = sqlite3ExprDup(db, pDflt, 0); + }else{ + pNew = sqlite3PExpr(pParse, TK_NULL, 0, 0, 0); + } + }else{ + pNew = sqlite3PExpr(pParse, TK_NULL, 0, 0, 0); + } + pList = sqlite3ExprListAppend(pParse, pList, pNew); + sqlite3ExprListSetName(pParse, pList, &tFromCol, 0); + } + } + sqlite3DbFree(db, aiCol); - for(p=pTrigger; p; p=p->pNext){ - int fire_this = 0; + zFrom = pFKey->pFrom->zName; + nFrom = sqlite3Strlen30(zFrom); - /* Sanity checking: The schema for the trigger and for the table are - ** always defined. The trigger must be in the same schema as the table - ** or else it must be a TEMP trigger. */ - assert( p->pSchema!=0 ); - assert( p->pTabSchema!=0 ); - assert( p->pSchema==p->pTabSchema || p->pSchema==db->aDb[1].pSchema ); + if( action==OE_Restrict ){ + Token tFrom; + Expr *pRaise; - /* Determine whether we should code this trigger */ - if( - p->op==op && - p->tr_tm==tr_tm && - checkColumnOverlap(p->pColumns,pChanges) - ){ - TriggerStack *pS; /* Pointer to trigger-stack entry */ - for(pS=pParse->trigStack; pS && p!=pS->pTrigger; pS=pS->pNext){} - if( !pS ){ - fire_this = 1; - } -#if 0 /* Give no warning for recursive triggers. Just do not do them */ - else{ - sqlite3ErrorMsg(pParse, "recursive triggers not supported (%s)", - p->name); - return SQLITE_ERROR; + tFrom.z = zFrom; + tFrom.n = nFrom; + pRaise = sqlite3Expr(db, TK_RAISE, "foreign key constraint failed"); + if( pRaise ){ + pRaise->affinity = OE_Abort; } -#endif + pSelect = sqlite3SelectNew(pParse, + sqlite3ExprListAppend(pParse, 0, pRaise), + sqlite3SrcListAppend(db, 0, &tFrom, 0), + pWhere, + 0, 0, 0, 0, 0, 0 + ); + pWhere = 0; } - - if( fire_this ){ - int endTrigger; - Expr * whenExpr; - AuthContext sContext; - NameContext sNC; -#ifndef SQLITE_OMIT_TRACE - sqlite3VdbeAddOp4(pParse->pVdbe, OP_Trace, 0, 0, 0, - sqlite3MPrintf(db, "-- TRIGGER %s", p->name), - P4_DYNAMIC); -#endif - memset(&sNC, 0, sizeof(sNC)); - sNC.pParse = pParse; - - /* Push an entry on to the trigger stack */ - trigStackEntry.pTrigger = p; - trigStackEntry.newIdx = newIdx; - trigStackEntry.oldIdx = oldIdx; - trigStackEntry.pTab = pTab; - trigStackEntry.pNext = pParse->trigStack; - trigStackEntry.ignoreJump = ignoreJump; - pParse->trigStack = &trigStackEntry; - sqlite3AuthContextPush(pParse, &sContext, p->name); - - /* code the WHEN clause */ - endTrigger = sqlite3VdbeMakeLabel(pParse->pVdbe); - whenExpr = sqlite3ExprDup(db, p->pWhen, 0); - if( db->mallocFailed || sqlite3ResolveExprNames(&sNC, whenExpr) ){ - pParse->trigStack = trigStackEntry.pNext; - sqlite3ExprDelete(db, whenExpr); - return 1; + /* Disable lookaside memory allocation */ + enableLookaside = db->lookaside.bEnabled; + db->lookaside.bEnabled = 0; + + pTrigger = (Trigger *)sqlite3DbMallocZero(db, + sizeof(Trigger) + /* struct Trigger */ + sizeof(TriggerStep) + /* Single step in trigger program */ + nFrom + 1 /* Space for pStep->target.z */ + ); + if( pTrigger ){ + pStep = pTrigger->step_list = (TriggerStep *)&pTrigger[1]; + pStep->target.z = (char *)&pStep[1]; + pStep->target.n = nFrom; + memcpy((char *)pStep->target.z, zFrom, nFrom); + + pStep->pWhere = sqlite3ExprDup(db, pWhere, EXPRDUP_REDUCE); + pStep->pExprList = sqlite3ExprListDup(db, pList, EXPRDUP_REDUCE); + pStep->pSelect = sqlite3SelectDup(db, pSelect, EXPRDUP_REDUCE); + if( pWhen ){ + pWhen = sqlite3PExpr(pParse, TK_NOT, pWhen, 0, 0); + pTrigger->pWhen = sqlite3ExprDup(db, pWhen, EXPRDUP_REDUCE); } - sqlite3ExprIfFalse(pParse, whenExpr, endTrigger, SQLITE_JUMPIFNULL); - sqlite3ExprDelete(db, whenExpr); + } - codeTriggerProgram(pParse, p->step_list, orconf); + /* Re-enable the lookaside buffer, if it was disabled earlier. */ + db->lookaside.bEnabled = enableLookaside; - /* Pop the entry off the trigger stack */ - pParse->trigStack = trigStackEntry.pNext; - sqlite3AuthContextPop(&sContext); + sqlite3ExprDelete(db, pWhere); + sqlite3ExprDelete(db, pWhen); + sqlite3ExprListDelete(db, pList); + sqlite3SelectDelete(db, pSelect); + if( db->mallocFailed==1 ){ + fkTriggerDelete(db, pTrigger); + return 0; + } + assert( pStep!=0 ); - sqlite3VdbeResolveLabel(pParse->pVdbe, endTrigger); + switch( action ){ + case OE_Restrict: + pStep->op = TK_SELECT; + break; + case OE_Cascade: + if( !pChanges ){ + pStep->op = TK_DELETE; + break; + } + default: + pStep->op = TK_UPDATE; } + pStep->pTrig = pTrigger; + pTrigger->pSchema = pTab->pSchema; + pTrigger->pTabSchema = pTab->pSchema; + pFKey->apTrigger[iAction] = pTrigger; + pTrigger->op = (pChanges ? TK_UPDATE : TK_DELETE); } - if( piOldColMask ) *piOldColMask |= trigStackEntry.oldColMask; - if( piNewColMask ) *piNewColMask |= trigStackEntry.newColMask; - return 0; + + return pTrigger; } -#endif /* !defined(SQLITE_OMIT_TRIGGER) */ -/************** End of trigger.c *********************************************/ -/************** Begin file update.c ******************************************/ /* -** 2001 September 15 -** +** This function is called when deleting or updating a row to implement +** any required CASCADE, SET NULL or SET DEFAULT actions. +*/ +SQLITE_PRIVATE void sqlite3FkActions( + Parse *pParse, /* Parse context */ + Table *pTab, /* Table being updated or deleted from */ + ExprList *pChanges, /* Change-list for UPDATE, NULL for DELETE */ + int regOld /* Address of array containing old row */ +){ + /* If foreign-key support is enabled, iterate through all FKs that + ** refer to table pTab. If there is an action associated with the FK + ** for this operation (either update or delete), invoke the associated + ** trigger sub-program. */ + if( pParse->db->flags&SQLITE_ForeignKeys ){ + FKey *pFKey; /* Iterator variable */ + for(pFKey = sqlite3FkReferences(pTab); pFKey; pFKey=pFKey->pNextTo){ + Trigger *pAction = fkActionTrigger(pParse, pTab, pFKey, pChanges); + if( pAction ){ + sqlite3CodeRowTriggerDirect(pParse, pAction, pTab, regOld, OE_Abort, 0); + } + } + } +} + +#endif /* ifndef SQLITE_OMIT_TRIGGER */ + +/* +** Free all memory associated with foreign key definitions attached to +** table pTab. Remove the deleted foreign keys from the Schema.fkeyHash +** hash table. +*/ +SQLITE_PRIVATE void sqlite3FkDelete(sqlite3 *db, Table *pTab){ + FKey *pFKey; /* Iterator variable */ + FKey *pNext; /* Copy of pFKey->pNextFrom */ + + assert( db==0 || sqlite3SchemaMutexHeld(db, 0, pTab->pSchema) ); + for(pFKey=pTab->pFKey; pFKey; pFKey=pNext){ + + /* Remove the FK from the fkeyHash hash table. */ + if( !db || db->pnBytesFreed==0 ){ + if( pFKey->pPrevTo ){ + pFKey->pPrevTo->pNextTo = pFKey->pNextTo; + }else{ + void *p = (void *)pFKey->pNextTo; + const char *z = (p ? pFKey->pNextTo->zTo : pFKey->zTo); + sqlite3HashInsert(&pTab->pSchema->fkeyHash, z, sqlite3Strlen30(z), p); + } + if( pFKey->pNextTo ){ + pFKey->pNextTo->pPrevTo = pFKey->pPrevTo; + } + } + + /* EV: R-30323-21917 Each foreign key constraint in SQLite is + ** classified as either immediate or deferred. + */ + assert( pFKey->isDeferred==0 || pFKey->isDeferred==1 ); + + /* Delete any triggers created to implement actions for this FK. */ +#ifndef SQLITE_OMIT_TRIGGER + fkTriggerDelete(db, pFKey->apTrigger[0]); + fkTriggerDelete(db, pFKey->apTrigger[1]); +#endif + + pNext = pFKey->pNextFrom; + sqlite3DbFree(db, pFKey); + } +} +#endif /* ifndef SQLITE_OMIT_FOREIGN_KEY */ + +/************** End of fkey.c ************************************************/ +/************** Begin file insert.c ******************************************/ +/* +** 2001 September 15 +** ** The author disclaims copyright to this source code. In place of ** a legal notice, here is a blessing: ** @@ -80674,1858 +90006,1998 @@ SQLITE_PRIVATE int sqlite3CodeRowTrigger( ** ************************************************************************* ** This file contains C code routines that are called by the parser -** to handle UPDATE statements. -** -** $Id: update.c,v 1.204 2009/06/27 11:17:35 drh Exp $ +** to handle INSERT statements in SQLite. */ -#ifndef SQLITE_OMIT_VIRTUALTABLE -/* Forward declaration */ -static void updateVirtualTable( - Parse *pParse, /* The parsing context */ - SrcList *pSrc, /* The virtual table to be modified */ - Table *pTab, /* The virtual table */ - ExprList *pChanges, /* The columns to change in the UPDATE statement */ - Expr *pRowidExpr, /* Expression used to recompute the rowid */ - int *aXRef, /* Mapping from columns of pTab to entries in pChanges */ - Expr *pWhere /* WHERE clause of the UPDATE statement */ -); -#endif /* SQLITE_OMIT_VIRTUALTABLE */ +/* +** Generate code that will open a table for reading. +*/ +SQLITE_PRIVATE void sqlite3OpenTable( + Parse *p, /* Generate code into this VDBE */ + int iCur, /* The cursor number of the table */ + int iDb, /* The database index in sqlite3.aDb[] */ + Table *pTab, /* The table to be opened */ + int opcode /* OP_OpenRead or OP_OpenWrite */ +){ + Vdbe *v; + if( IsVirtual(pTab) ) return; + v = sqlite3GetVdbe(p); + assert( opcode==OP_OpenWrite || opcode==OP_OpenRead ); + sqlite3TableLock(p, iDb, pTab->tnum, (opcode==OP_OpenWrite)?1:0, pTab->zName); + sqlite3VdbeAddOp3(v, opcode, iCur, pTab->tnum, iDb); + sqlite3VdbeChangeP4(v, -1, SQLITE_INT_TO_PTR(pTab->nCol), P4_INT32); + VdbeComment((v, "%s", pTab->zName)); +} /* -** The most recently coded instruction was an OP_Column to retrieve the -** i-th column of table pTab. This routine sets the P4 parameter of the -** OP_Column to the default value, if any. +** Return a pointer to the column affinity string associated with index +** pIdx. A column affinity string has one character for each column in +** the table, according to the affinity of the column: ** -** The default value of a column is specified by a DEFAULT clause in the -** column definition. This was either supplied by the user when the table -** was created, or added later to the table definition by an ALTER TABLE -** command. If the latter, then the row-records in the table btree on disk -** may not contain a value for the column and the default value, taken -** from the P4 parameter of the OP_Column instruction, is returned instead. -** If the former, then all row-records are guaranteed to include a value -** for the column and the P4 value is not required. +** Character Column affinity +** ------------------------------ +** 'a' TEXT +** 'b' NONE +** 'c' NUMERIC +** 'd' INTEGER +** 'e' REAL ** -** Column definitions created by an ALTER TABLE command may only have -** literal default values specified: a number, null or a string. (If a more -** complicated default expression value was provided, it is evaluated -** when the ALTER TABLE is executed and one of the literal values written -** into the sqlite_master table.) +** An extra 'd' is appended to the end of the string to cover the +** rowid that appears as the last column in every index. ** -** Therefore, the P4 parameter is only required if the default value for -** the column is a literal number, string or null. The sqlite3ValueFromExpr() -** function is capable of transforming these types of expressions into -** sqlite3_value objects. +** Memory for the buffer containing the column index affinity string +** is managed along with the rest of the Index structure. It will be +** released when sqlite3DeleteIndex() is called. */ -SQLITE_PRIVATE void sqlite3ColumnDefault(Vdbe *v, Table *pTab, int i){ - assert( pTab!=0 ); - if( !pTab->pSelect ){ - sqlite3_value *pValue; - u8 enc = ENC(sqlite3VdbeDb(v)); - Column *pCol = &pTab->aCol[i]; - VdbeComment((v, "%s.%s", pTab->zName, pCol->zName)); - assert( inCol ); - sqlite3ValueFromExpr(sqlite3VdbeDb(v), pCol->pDflt, enc, - pCol->affinity, &pValue); - if( pValue ){ - sqlite3VdbeChangeP4(v, -1, (const char *)pValue, P4_MEM); +SQLITE_PRIVATE const char *sqlite3IndexAffinityStr(Vdbe *v, Index *pIdx){ + if( !pIdx->zColAff ){ + /* The first time a column affinity string for a particular index is + ** required, it is allocated and populated here. It is then stored as + ** a member of the Index structure for subsequent use. + ** + ** The column affinity string will eventually be deleted by + ** sqliteDeleteIndex() when the Index structure itself is cleaned + ** up. + */ + int n; + Table *pTab = pIdx->pTable; + sqlite3 *db = sqlite3VdbeDb(v); + pIdx->zColAff = (char *)sqlite3DbMallocRaw(0, pIdx->nColumn+2); + if( !pIdx->zColAff ){ + db->mallocFailed = 1; + return 0; + } + for(n=0; nnColumn; n++){ + pIdx->zColAff[n] = pTab->aCol[pIdx->aiColumn[n]].affinity; } + pIdx->zColAff[n++] = SQLITE_AFF_INTEGER; + pIdx->zColAff[n] = 0; } + + return pIdx->zColAff; } /* -** Process an UPDATE statement. +** Set P4 of the most recently inserted opcode to a column affinity +** string for table pTab. A column affinity string has one character +** for each column indexed by the index, according to the affinity of the +** column: ** -** UPDATE OR IGNORE table_wxyz SET a=b, c=d WHERE e<5 AND f NOT NULL; -** \_______/ \________/ \______/ \________________/ -* onError pTabList pChanges pWhere +** Character Column affinity +** ------------------------------ +** 'a' TEXT +** 'b' NONE +** 'c' NUMERIC +** 'd' INTEGER +** 'e' REAL */ -SQLITE_PRIVATE void sqlite3Update( - Parse *pParse, /* The parser context */ - SrcList *pTabList, /* The table in which we should change things */ - ExprList *pChanges, /* Things to be changed */ - Expr *pWhere, /* The WHERE clause. May be null */ - int onError /* How to handle constraint errors */ -){ - int i, j; /* Loop counters */ - Table *pTab; /* The table to be updated */ - int addr = 0; /* VDBE instruction address of the start of the loop */ - WhereInfo *pWInfo; /* Information about the WHERE clause */ - Vdbe *v; /* The virtual database engine */ - Index *pIdx; /* For looping over indices */ - int nIdx; /* Number of indices that need updating */ - int iCur; /* VDBE Cursor number of pTab */ - sqlite3 *db; /* The database structure */ - int *aRegIdx = 0; /* One register assigned to each index to be updated */ - int *aXRef = 0; /* aXRef[i] is the index in pChanges->a[] of the - ** an expression for the i-th column of the table. - ** aXRef[i]==-1 if the i-th column is not changed. */ - int chngRowid; /* True if the record number is being changed */ - Expr *pRowidExpr = 0; /* Expression defining the new record number */ - int openAll = 0; /* True if all indices need to be opened */ - AuthContext sContext; /* The authorization context */ - NameContext sNC; /* The name-context to resolve expressions in */ - int iDb; /* Database containing the table being updated */ - int j1; /* Addresses of jump instructions */ - int okOnePass; /* True for one-pass algorithm without the FIFO */ - -#ifndef SQLITE_OMIT_TRIGGER - int isView; /* Trying to update a view */ - Trigger *pTrigger; /* List of triggers on pTab, if required */ -#endif - int iBeginAfterTrigger = 0; /* Address of after trigger program */ - int iEndAfterTrigger = 0; /* Exit of after trigger program */ - int iBeginBeforeTrigger = 0; /* Address of before trigger program */ - int iEndBeforeTrigger = 0; /* Exit of before trigger program */ - u32 old_col_mask = 0; /* Mask of OLD.* columns in use */ - u32 new_col_mask = 0; /* Mask of NEW.* columns in use */ - - int newIdx = -1; /* index of trigger "new" temp table */ - int oldIdx = -1; /* index of trigger "old" temp table */ - - /* Register Allocations */ - int regRowCount = 0; /* A count of rows changed */ - int regOldRowid; /* The old rowid */ - int regNewRowid; /* The new rowid */ - int regData; /* New data for the row */ - int regRowSet = 0; /* Rowset of rows to be updated */ - - sContext.pParse = 0; - db = pParse->db; - if( pParse->nErr || db->mallocFailed ){ - goto update_cleanup; - } - assert( pTabList->nSrc==1 ); - - /* Locate the table which we want to update. +SQLITE_PRIVATE void sqlite3TableAffinityStr(Vdbe *v, Table *pTab){ + /* The first time a column affinity string for a particular table + ** is required, it is allocated and populated here. It is then + ** stored as a member of the Table structure for subsequent use. + ** + ** The column affinity string will eventually be deleted by + ** sqlite3DeleteTable() when the Table structure itself is cleaned up. */ - pTab = sqlite3SrcListLookup(pParse, pTabList); - if( pTab==0 ) goto update_cleanup; - iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema); + if( !pTab->zColAff ){ + char *zColAff; + int i; + sqlite3 *db = sqlite3VdbeDb(v); - /* Figure out if we have any triggers and if the table being - ** updated is a view - */ -#ifndef SQLITE_OMIT_TRIGGER - pTrigger = sqlite3TriggersExist(pParse, pTab, TK_UPDATE, pChanges, 0); - isView = pTab->pSelect!=0; -#else -# define pTrigger 0 -# define isView 0 -#endif -#ifdef SQLITE_OMIT_VIEW -# undef isView -# define isView 0 -#endif + zColAff = (char *)sqlite3DbMallocRaw(0, pTab->nCol+1); + if( !zColAff ){ + db->mallocFailed = 1; + return; + } - if( sqlite3IsReadOnly(pParse, pTab, (pTrigger?1:0)) ){ - goto update_cleanup; - } - if( sqlite3ViewGetColumnNames(pParse, pTab) ){ - goto update_cleanup; - } - aXRef = sqlite3DbMallocRaw(db, sizeof(int) * pTab->nCol ); - if( aXRef==0 ) goto update_cleanup; - for(i=0; inCol; i++) aXRef[i] = -1; + for(i=0; inCol; i++){ + zColAff[i] = pTab->aCol[i].affinity; + } + zColAff[pTab->nCol] = '\0'; - /* If there are FOR EACH ROW triggers, allocate cursors for the - ** special OLD and NEW tables - */ - if( pTrigger ){ - newIdx = pParse->nTab++; - oldIdx = pParse->nTab++; + pTab->zColAff = zColAff; } - /* Allocate a cursors for the main database table and for all indices. - ** The index cursors might not be used, but if they are used they - ** need to occur right after the database cursor. So go ahead and - ** allocate enough space, just in case. - */ - pTabList->a[0].iCursor = iCur = pParse->nTab++; - for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){ - pParse->nTab++; - } + sqlite3VdbeChangeP4(v, -1, pTab->zColAff, P4_TRANSIENT); +} - /* Initialize the name-context */ - memset(&sNC, 0, sizeof(sNC)); - sNC.pParse = pParse; - sNC.pSrcList = pTabList; +/* +** Return non-zero if the table pTab in database iDb or any of its indices +** have been opened at any point in the VDBE program beginning at location +** iStartAddr throught the end of the program. This is used to see if +** a statement of the form "INSERT INTO SELECT ..." can +** run without using temporary table for the results of the SELECT. +*/ +static int readsTable(Parse *p, int iStartAddr, int iDb, Table *pTab){ + Vdbe *v = sqlite3GetVdbe(p); + int i; + int iEnd = sqlite3VdbeCurrentAddr(v); +#ifndef SQLITE_OMIT_VIRTUALTABLE + VTable *pVTab = IsVirtual(pTab) ? sqlite3GetVTable(p->db, pTab) : 0; +#endif - /* Resolve the column names in all the expressions of the - ** of the UPDATE statement. Also find the column index - ** for each column to be updated in the pChanges array. For each - ** column to be updated, make sure we have authorization to change - ** that column. - */ - chngRowid = 0; - for(i=0; inExpr; i++){ - if( sqlite3ResolveExprNames(&sNC, pChanges->a[i].pExpr) ){ - goto update_cleanup; - } - for(j=0; jnCol; j++){ - if( sqlite3StrICmp(pTab->aCol[j].zName, pChanges->a[i].zName)==0 ){ - if( j==pTab->iPKey ){ - chngRowid = 1; - pRowidExpr = pChanges->a[i].pExpr; - } - aXRef[j] = i; - break; + for(i=iStartAddr; iopcode==OP_OpenRead && pOp->p3==iDb ){ + Index *pIndex; + int tnum = pOp->p2; + if( tnum==pTab->tnum ){ + return 1; } - } - if( j>=pTab->nCol ){ - if( sqlite3IsRowid(pChanges->a[i].zName) ){ - chngRowid = 1; - pRowidExpr = pChanges->a[i].pExpr; - }else{ - sqlite3ErrorMsg(pParse, "no such column: %s", pChanges->a[i].zName); - goto update_cleanup; + for(pIndex=pTab->pIndex; pIndex; pIndex=pIndex->pNext){ + if( tnum==pIndex->tnum ){ + return 1; + } } } -#ifndef SQLITE_OMIT_AUTHORIZATION - { - int rc; - rc = sqlite3AuthCheck(pParse, SQLITE_UPDATE, pTab->zName, - pTab->aCol[j].zName, db->aDb[iDb].zName); - if( rc==SQLITE_DENY ){ - goto update_cleanup; - }else if( rc==SQLITE_IGNORE ){ - aXRef[j] = -1; - } +#ifndef SQLITE_OMIT_VIRTUALTABLE + if( pOp->opcode==OP_VOpen && pOp->p4.pVtab==pVTab ){ + assert( pOp->p4.pVtab!=0 ); + assert( pOp->p4type==P4_VTAB ); + return 1; } #endif } + return 0; +} - /* Allocate memory for the array aRegIdx[]. There is one entry in the - ** array for each index associated with table being updated. Fill in - ** the value with a register number for indices that are to be used - ** and with zero for unused indices. - */ - for(nIdx=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, nIdx++){} - if( nIdx>0 ){ - aRegIdx = sqlite3DbMallocRaw(db, sizeof(Index*) * nIdx ); - if( aRegIdx==0 ) goto update_cleanup; - } - for(j=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, j++){ - int reg; - if( chngRowid ){ - reg = ++pParse->nMem; - }else{ - reg = 0; - for(i=0; inColumn; i++){ - if( aXRef[pIdx->aiColumn[i]]>=0 ){ - reg = ++pParse->nMem; - break; - } - } +#ifndef SQLITE_OMIT_AUTOINCREMENT +/* +** Locate or create an AutoincInfo structure associated with table pTab +** which is in database iDb. Return the register number for the register +** that holds the maximum rowid. +** +** There is at most one AutoincInfo structure per table even if the +** same table is autoincremented multiple times due to inserts within +** triggers. A new AutoincInfo structure is created if this is the +** first use of table pTab. On 2nd and subsequent uses, the original +** AutoincInfo structure is used. +** +** Three memory locations are allocated: +** +** (1) Register to hold the name of the pTab table. +** (2) Register to hold the maximum ROWID of pTab. +** (3) Register to hold the rowid in sqlite_sequence of pTab +** +** The 2nd register is the one that is returned. That is all the +** insert routine needs to know about. +*/ +static int autoIncBegin( + Parse *pParse, /* Parsing context */ + int iDb, /* Index of the database holding pTab */ + Table *pTab /* The table we are writing to */ +){ + int memId = 0; /* Register holding maximum rowid */ + if( pTab->tabFlags & TF_Autoincrement ){ + Parse *pToplevel = sqlite3ParseToplevel(pParse); + AutoincInfo *pInfo; + + pInfo = pToplevel->pAinc; + while( pInfo && pInfo->pTab!=pTab ){ pInfo = pInfo->pNext; } + if( pInfo==0 ){ + pInfo = sqlite3DbMallocRaw(pParse->db, sizeof(*pInfo)); + if( pInfo==0 ) return 0; + pInfo->pNext = pToplevel->pAinc; + pToplevel->pAinc = pInfo; + pInfo->pTab = pTab; + pInfo->iDb = iDb; + pToplevel->nMem++; /* Register to hold name of table */ + pInfo->regCtr = ++pToplevel->nMem; /* Max rowid register */ + pToplevel->nMem++; /* Rowid in sqlite_sequence */ } - aRegIdx[j] = reg; + memId = pInfo->regCtr; } + return memId; +} - /* Allocate a block of register used to store the change record - ** sent to sqlite3GenerateConstraintChecks(). There are either - ** one or two registers for holding the rowid. One rowid register - ** is used if chngRowid is false and two are used if chngRowid is - ** true. Following these are pTab->nCol register holding column - ** data. - */ - regOldRowid = regNewRowid = pParse->nMem + 1; - pParse->nMem += pTab->nCol + 1; - if( chngRowid ){ - regNewRowid++; - pParse->nMem++; - } - regData = regNewRowid+1; - +/* +** This routine generates code that will initialize all of the +** register used by the autoincrement tracker. +*/ +SQLITE_PRIVATE void sqlite3AutoincrementBegin(Parse *pParse){ + AutoincInfo *p; /* Information about an AUTOINCREMENT */ + sqlite3 *db = pParse->db; /* The database connection */ + Db *pDb; /* Database only autoinc table */ + int memId; /* Register holding max rowid */ + int addr; /* A VDBE address */ + Vdbe *v = pParse->pVdbe; /* VDBE under construction */ - /* Begin generating code. - */ - v = sqlite3GetVdbe(pParse); - if( v==0 ) goto update_cleanup; - if( pParse->nested==0 ) sqlite3VdbeCountChanges(v); - sqlite3BeginWriteOperation(pParse, 1, iDb); + /* This routine is never called during trigger-generation. It is + ** only called from the top-level */ + assert( pParse->pTriggerTab==0 ); + assert( pParse==sqlite3ParseToplevel(pParse) ); -#ifndef SQLITE_OMIT_VIRTUALTABLE - /* Virtual tables must be handled separately */ - if( IsVirtual(pTab) ){ - updateVirtualTable(pParse, pTabList, pTab, pChanges, pRowidExpr, aXRef, - pWhere); - pWhere = 0; - pTabList = 0; - goto update_cleanup; + assert( v ); /* We failed long ago if this is not so */ + for(p = pParse->pAinc; p; p = p->pNext){ + pDb = &db->aDb[p->iDb]; + memId = p->regCtr; + assert( sqlite3SchemaMutexHeld(db, 0, pDb->pSchema) ); + sqlite3OpenTable(pParse, 0, p->iDb, pDb->pSchema->pSeqTab, OP_OpenRead); + sqlite3VdbeAddOp3(v, OP_Null, 0, memId, memId+1); + addr = sqlite3VdbeCurrentAddr(v); + sqlite3VdbeAddOp4(v, OP_String8, 0, memId-1, 0, p->pTab->zName, 0); + sqlite3VdbeAddOp2(v, OP_Rewind, 0, addr+9); + sqlite3VdbeAddOp3(v, OP_Column, 0, 0, memId); + sqlite3VdbeAddOp3(v, OP_Ne, memId-1, addr+7, memId); + sqlite3VdbeChangeP5(v, SQLITE_JUMPIFNULL); + sqlite3VdbeAddOp2(v, OP_Rowid, 0, memId+1); + sqlite3VdbeAddOp3(v, OP_Column, 0, 1, memId); + sqlite3VdbeAddOp2(v, OP_Goto, 0, addr+9); + sqlite3VdbeAddOp2(v, OP_Next, 0, addr+2); + sqlite3VdbeAddOp2(v, OP_Integer, 0, memId); + sqlite3VdbeAddOp0(v, OP_Close); } -#endif +} - /* Start the view context - */ - if( isView ){ - sqlite3AuthContextPush(pParse, &sContext, pTab->zName); +/* +** Update the maximum rowid for an autoincrement calculation. +** +** This routine should be called when the top of the stack holds a +** new rowid that is about to be inserted. If that new rowid is +** larger than the maximum rowid in the memId memory cell, then the +** memory cell is updated. The stack is unchanged. +*/ +static void autoIncStep(Parse *pParse, int memId, int regRowid){ + if( memId>0 ){ + sqlite3VdbeAddOp2(pParse->pVdbe, OP_MemMax, memId, regRowid); } +} - /* Generate the code for triggers. - */ - if( pTrigger ){ - int iGoto; - - /* Create pseudo-tables for NEW and OLD - */ - sqlite3VdbeAddOp3(v, OP_OpenPseudo, oldIdx, 0, pTab->nCol); - sqlite3VdbeAddOp3(v, OP_OpenPseudo, newIdx, 0, pTab->nCol); - - iGoto = sqlite3VdbeAddOp2(v, OP_Goto, 0, 0); - addr = sqlite3VdbeMakeLabel(v); - iBeginBeforeTrigger = sqlite3VdbeCurrentAddr(v); - if( sqlite3CodeRowTrigger(pParse, pTrigger, TK_UPDATE, pChanges, - TRIGGER_BEFORE, pTab, newIdx, oldIdx, onError, addr, - &old_col_mask, &new_col_mask) ){ - goto update_cleanup; - } - iEndBeforeTrigger = sqlite3VdbeAddOp2(v, OP_Goto, 0, 0); - iBeginAfterTrigger = sqlite3VdbeCurrentAddr(v); - if( sqlite3CodeRowTrigger(pParse, pTrigger, TK_UPDATE, pChanges, - TRIGGER_AFTER, pTab, newIdx, oldIdx, onError, addr, - &old_col_mask, &new_col_mask) ){ - goto update_cleanup; - } - iEndAfterTrigger = sqlite3VdbeAddOp2(v, OP_Goto, 0, 0); - sqlite3VdbeJumpHere(v, iGoto); - } +/* +** This routine generates the code needed to write autoincrement +** maximum rowid values back into the sqlite_sequence register. +** Every statement that might do an INSERT into an autoincrement +** table (either directly or through triggers) needs to call this +** routine just before the "exit" code. +*/ +SQLITE_PRIVATE void sqlite3AutoincrementEnd(Parse *pParse){ + AutoincInfo *p; + Vdbe *v = pParse->pVdbe; + sqlite3 *db = pParse->db; - /* If we are trying to update a view, realize that view into - ** a ephemeral table. - */ -#if !defined(SQLITE_OMIT_VIEW) && !defined(SQLITE_OMIT_TRIGGER) - if( isView ){ - sqlite3MaterializeView(pParse, pTab, pWhere, iCur); - } -#endif + assert( v ); + for(p = pParse->pAinc; p; p = p->pNext){ + Db *pDb = &db->aDb[p->iDb]; + int j1, j2, j3, j4, j5; + int iRec; + int memId = p->regCtr; - /* Resolve the column names in all the expressions in the - ** WHERE clause. - */ - if( sqlite3ResolveExprNames(&sNC, pWhere) ){ - goto update_cleanup; + iRec = sqlite3GetTempReg(pParse); + assert( sqlite3SchemaMutexHeld(db, 0, pDb->pSchema) ); + sqlite3OpenTable(pParse, 0, p->iDb, pDb->pSchema->pSeqTab, OP_OpenWrite); + j1 = sqlite3VdbeAddOp1(v, OP_NotNull, memId+1); + j2 = sqlite3VdbeAddOp0(v, OP_Rewind); + j3 = sqlite3VdbeAddOp3(v, OP_Column, 0, 0, iRec); + j4 = sqlite3VdbeAddOp3(v, OP_Eq, memId-1, 0, iRec); + sqlite3VdbeAddOp2(v, OP_Next, 0, j3); + sqlite3VdbeJumpHere(v, j2); + sqlite3VdbeAddOp2(v, OP_NewRowid, 0, memId+1); + j5 = sqlite3VdbeAddOp0(v, OP_Goto); + sqlite3VdbeJumpHere(v, j4); + sqlite3VdbeAddOp2(v, OP_Rowid, 0, memId+1); + sqlite3VdbeJumpHere(v, j1); + sqlite3VdbeJumpHere(v, j5); + sqlite3VdbeAddOp3(v, OP_MakeRecord, memId-1, 2, iRec); + sqlite3VdbeAddOp3(v, OP_Insert, 0, iRec, memId+1); + sqlite3VdbeChangeP5(v, OPFLAG_APPEND); + sqlite3VdbeAddOp0(v, OP_Close); + sqlite3ReleaseTempReg(pParse, iRec); } +} +#else +/* +** If SQLITE_OMIT_AUTOINCREMENT is defined, then the three routines +** above are all no-ops +*/ +# define autoIncBegin(A,B,C) (0) +# define autoIncStep(A,B,C) +#endif /* SQLITE_OMIT_AUTOINCREMENT */ - /* Begin the database scan - */ - sqlite3VdbeAddOp2(v, OP_Null, 0, regOldRowid); - pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere,0, WHERE_ONEPASS_DESIRED); - if( pWInfo==0 ) goto update_cleanup; - okOnePass = pWInfo->okOnePass; - /* Remember the rowid of every item to be updated. - */ - sqlite3VdbeAddOp2(v, OP_Rowid, iCur, regOldRowid); - if( !okOnePass ){ - regRowSet = ++pParse->nMem; - sqlite3VdbeAddOp2(v, OP_RowSetAdd, regRowSet, regOldRowid); +/* Forward declaration */ +static int xferOptimization( + Parse *pParse, /* Parser context */ + Table *pDest, /* The table we are inserting into */ + Select *pSelect, /* A SELECT statement to use as the data source */ + int onError, /* How to handle constraint errors */ + int iDbDest /* The database of pDest */ +); + +/* +** This routine is call to handle SQL of the following forms: +** +** insert into TABLE (IDLIST) values(EXPRLIST) +** insert into TABLE (IDLIST) select +** +** The IDLIST following the table name is always optional. If omitted, +** then a list of all columns for the table is substituted. The IDLIST +** appears in the pColumn parameter. pColumn is NULL if IDLIST is omitted. +** +** The pList parameter holds EXPRLIST in the first form of the INSERT +** statement above, and pSelect is NULL. For the second form, pList is +** NULL and pSelect is a pointer to the select statement used to generate +** data for the insert. +** +** The code generated follows one of four templates. For a simple +** select with data coming from a VALUES clause, the code executes +** once straight down through. Pseudo-code follows (we call this +** the "1st template"): +** +** open write cursor to
    and its indices +** puts VALUES clause expressions onto the stack +** write the resulting record into
    +** cleanup +** +** The three remaining templates assume the statement is of the form +** +** INSERT INTO
    SELECT ... +** +** If the SELECT clause is of the restricted form "SELECT * FROM " - +** in other words if the SELECT pulls all columns from a single table +** and there is no WHERE or LIMIT or GROUP BY or ORDER BY clauses, and +** if and are distinct tables but have identical +** schemas, including all the same indices, then a special optimization +** is invoked that copies raw records from over to . +** See the xferOptimization() function for the implementation of this +** template. This is the 2nd template. +** +** open a write cursor to
    +** open read cursor on +** transfer all records in over to
    +** close cursors +** foreach index on
    +** open a write cursor on the
    index +** open a read cursor on the corresponding index +** transfer all records from the read to the write cursors +** close cursors +** end foreach +** +** The 3rd template is for when the second template does not apply +** and the SELECT clause does not read from
    at any time. +** The generated code follows this template: +** +** EOF <- 0 +** X <- A +** goto B +** A: setup for the SELECT +** loop over the rows in the SELECT +** load values into registers R..R+n +** yield X +** end loop +** cleanup after the SELECT +** EOF <- 1 +** yield X +** goto A +** B: open write cursor to
    and its indices +** C: yield X +** if EOF goto D +** insert the select result into
    from R..R+n +** goto C +** D: cleanup +** +** The 4th template is used if the insert statement takes its +** values from a SELECT but the data is being inserted into a table +** that is also read as part of the SELECT. In the third form, +** we have to use a intermediate table to store the results of +** the select. The template is like this: +** +** EOF <- 0 +** X <- A +** goto B +** A: setup for the SELECT +** loop over the tables in the SELECT +** load value into register R..R+n +** yield X +** end loop +** cleanup after the SELECT +** EOF <- 1 +** yield X +** halt-error +** B: open temp table +** L: yield X +** if EOF goto M +** insert row from R..R+n into temp table +** goto L +** M: open write cursor to
    and its indices +** rewind temp table +** C: loop over rows of intermediate table +** transfer values form intermediate table into
    +** end loop +** D: cleanup +*/ +SQLITE_PRIVATE void sqlite3Insert( + Parse *pParse, /* Parser context */ + SrcList *pTabList, /* Name of table into which we are inserting */ + ExprList *pList, /* List of values to be inserted */ + Select *pSelect, /* A SELECT statement to use as the data source */ + IdList *pColumn, /* Column names corresponding to IDLIST. */ + int onError /* How to handle constraint errors */ +){ + sqlite3 *db; /* The main database structure */ + Table *pTab; /* The table to insert into. aka TABLE */ + char *zTab; /* Name of the table into which we are inserting */ + const char *zDb; /* Name of the database holding this table */ + int i, j, idx; /* Loop counters */ + Vdbe *v; /* Generate code into this virtual machine */ + Index *pIdx; /* For looping over indices of the table */ + int nColumn; /* Number of columns in the data */ + int nHidden = 0; /* Number of hidden columns if TABLE is virtual */ + int baseCur = 0; /* VDBE Cursor number for pTab */ + int keyColumn = -1; /* Column that is the INTEGER PRIMARY KEY */ + int endOfLoop; /* Label for the end of the insertion loop */ + int useTempTable = 0; /* Store SELECT results in intermediate table */ + int srcTab = 0; /* Data comes from this temporary cursor if >=0 */ + int addrInsTop = 0; /* Jump to label "D" */ + int addrCont = 0; /* Top of insert loop. Label "C" in templates 3 and 4 */ + int addrSelect = 0; /* Address of coroutine that implements the SELECT */ + SelectDest dest; /* Destination for SELECT on rhs of INSERT */ + int iDb; /* Index of database holding TABLE */ + Db *pDb; /* The database containing table being inserted into */ + int appendFlag = 0; /* True if the insert is likely to be an append */ + + /* Register allocations */ + int regFromSelect = 0;/* Base register for data coming from SELECT */ + int regAutoinc = 0; /* Register holding the AUTOINCREMENT counter */ + int regRowCount = 0; /* Memory cell used for the row counter */ + int regIns; /* Block of regs holding rowid+data being inserted */ + int regRowid; /* registers holding insert rowid */ + int regData; /* register holding first column to insert */ + int regEof = 0; /* Register recording end of SELECT data */ + int *aRegIdx = 0; /* One register allocated to each index */ + +#ifndef SQLITE_OMIT_TRIGGER + int isView; /* True if attempting to insert into a view */ + Trigger *pTrigger; /* List of triggers on pTab, if required */ + int tmask; /* Mask of trigger times */ +#endif + + db = pParse->db; + memset(&dest, 0, sizeof(dest)); + if( pParse->nErr || db->mallocFailed ){ + goto insert_cleanup; } - /* End the database scan loop. + /* Locate the table into which we will be inserting new information. */ - sqlite3WhereEnd(pWInfo); + assert( pTabList->nSrc==1 ); + zTab = pTabList->a[0].zName; + if( NEVER(zTab==0) ) goto insert_cleanup; + pTab = sqlite3SrcListLookup(pParse, pTabList); + if( pTab==0 ){ + goto insert_cleanup; + } + iDb = sqlite3SchemaToIndex(db, pTab->pSchema); + assert( iDbnDb ); + pDb = &db->aDb[iDb]; + zDb = pDb->zName; + if( sqlite3AuthCheck(pParse, SQLITE_INSERT, pTab->zName, 0, zDb) ){ + goto insert_cleanup; + } - /* Initialize the count of updated rows + /* Figure out if we have any triggers and if the table being + ** inserted into is a view */ - if( db->flags & SQLITE_CountRows && !pParse->trigStack ){ - regRowCount = ++pParse->nMem; - sqlite3VdbeAddOp2(v, OP_Integer, 0, regRowCount); - } +#ifndef SQLITE_OMIT_TRIGGER + pTrigger = sqlite3TriggersExist(pParse, pTab, TK_INSERT, 0, &tmask); + isView = pTab->pSelect!=0; +#else +# define pTrigger 0 +# define tmask 0 +# define isView 0 +#endif +#ifdef SQLITE_OMIT_VIEW +# undef isView +# define isView 0 +#endif + assert( (pTrigger && tmask) || (pTrigger==0 && tmask==0) ); - if( !isView ){ - /* - ** Open every index that needs updating. Note that if any - ** index could potentially invoke a REPLACE conflict resolution - ** action, then we need to open all indices because we might need - ** to be deleting some records. - */ - if( !okOnePass ) sqlite3OpenTable(pParse, iCur, iDb, pTab, OP_OpenWrite); - if( onError==OE_Replace ){ - openAll = 1; - }else{ - openAll = 0; - for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){ - if( pIdx->onError==OE_Replace ){ - openAll = 1; - break; - } - } - } - for(i=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, i++){ - if( openAll || aRegIdx[i]>0 ){ - KeyInfo *pKey = sqlite3IndexKeyinfo(pParse, pIdx); - sqlite3VdbeAddOp4(v, OP_OpenWrite, iCur+i+1, pIdx->tnum, iDb, - (char*)pKey, P4_KEYINFO_HANDOFF); - assert( pParse->nTab>iCur+i+1 ); - } - } - } - - /* Jump back to this point if a trigger encounters an IGNORE constraint. */ - if( pTrigger ){ - sqlite3VdbeResolveLabel(v, addr); + /* If pTab is really a view, make sure it has been initialized. + ** ViewGetColumnNames() is a no-op if pTab is not a view (or virtual + ** module table). + */ + if( sqlite3ViewGetColumnNames(pParse, pTab) ){ + goto insert_cleanup; } - /* Top of the update loop */ - if( okOnePass ){ - int a1 = sqlite3VdbeAddOp1(v, OP_NotNull, regOldRowid); - addr = sqlite3VdbeAddOp0(v, OP_Goto); - sqlite3VdbeJumpHere(v, a1); - }else{ - addr = sqlite3VdbeAddOp3(v, OP_RowSetRead, regRowSet, 0, regOldRowid); + /* Ensure that: + * (a) the table is not read-only, + * (b) that if it is a view then ON INSERT triggers exist + */ + if( sqlite3IsReadOnly(pParse, pTab, tmask) ){ + goto insert_cleanup; } - if( pTrigger ){ - int regRowid; - int regRow; - int regCols; + /* Allocate a VDBE + */ + v = sqlite3GetVdbe(pParse); + if( v==0 ) goto insert_cleanup; + if( pParse->nested==0 ) sqlite3VdbeCountChanges(v); + sqlite3BeginWriteOperation(pParse, pSelect || pTrigger, iDb); - /* Make cursor iCur point to the record that is being updated. - */ - sqlite3VdbeAddOp3(v, OP_NotExists, iCur, addr, regOldRowid); +#ifndef SQLITE_OMIT_XFER_OPT + /* If the statement is of the form + ** + ** INSERT INTO SELECT * FROM ; + ** + ** Then special optimizations can be applied that make the transfer + ** very fast and which reduce fragmentation of indices. + ** + ** This is the 2nd template. + */ + if( pColumn==0 && xferOptimization(pParse, pTab, pSelect, onError, iDb) ){ + assert( !pTrigger ); + assert( pList==0 ); + goto insert_end; + } +#endif /* SQLITE_OMIT_XFER_OPT */ - /* Generate the OLD table - */ - regRowid = sqlite3GetTempReg(pParse); - regRow = sqlite3GetTempReg(pParse); - sqlite3VdbeAddOp2(v, OP_Rowid, iCur, regRowid); - if( !old_col_mask ){ - sqlite3VdbeAddOp2(v, OP_Null, 0, regRow); - }else{ - sqlite3VdbeAddOp2(v, OP_RowData, iCur, regRow); - } - sqlite3VdbeAddOp3(v, OP_Insert, oldIdx, regRow, regRowid); + /* If this is an AUTOINCREMENT table, look up the sequence number in the + ** sqlite_sequence table and store it in memory cell regAutoinc. + */ + regAutoinc = autoIncBegin(pParse, iDb, pTab); - /* Generate the NEW table + /* Figure out how many columns of data are supplied. If the data + ** is coming from a SELECT statement, then generate a co-routine that + ** produces a single row of the SELECT on each invocation. The + ** co-routine is the common header to the 3rd and 4th templates. + */ + if( pSelect ){ + /* Data is coming from a SELECT. Generate code to implement that SELECT + ** as a co-routine. The code is common to both the 3rd and 4th + ** templates: + ** + ** EOF <- 0 + ** X <- A + ** goto B + ** A: setup for the SELECT + ** loop over the tables in the SELECT + ** load value into register R..R+n + ** yield X + ** end loop + ** cleanup after the SELECT + ** EOF <- 1 + ** yield X + ** halt-error + ** + ** On each invocation of the co-routine, it puts a single row of the + ** SELECT result into registers dest.iMem...dest.iMem+dest.nMem-1. + ** (These output registers are allocated by sqlite3Select().) When + ** the SELECT completes, it sets the EOF flag stored in regEof. */ - if( chngRowid ){ - sqlite3ExprCodeAndCache(pParse, pRowidExpr, regRowid); - sqlite3VdbeAddOp1(v, OP_MustBeInt, regRowid); - }else{ - sqlite3VdbeAddOp2(v, OP_Rowid, iCur, regRowid); - } - regCols = sqlite3GetTempRange(pParse, pTab->nCol); - for(i=0; inCol; i++){ - if( i==pTab->iPKey ){ - sqlite3VdbeAddOp2(v, OP_Null, 0, regCols+i); - continue; - } - j = aXRef[i]; - if( (i<32 && (new_col_mask&((u32)1<a[j].pExpr, regCols+i); - } - }else{ - sqlite3VdbeAddOp2(v, OP_Null, 0, regCols+i); - } - } - sqlite3VdbeAddOp3(v, OP_MakeRecord, regCols, pTab->nCol, regRow); - if( !isView ){ - sqlite3TableAffinityStr(v, pTab); - sqlite3ExprCacheAffinityChange(pParse, regCols, pTab->nCol); - } - sqlite3ReleaseTempRange(pParse, regCols, pTab->nCol); - /* if( pParse->nErr ) goto update_cleanup; */ - sqlite3VdbeAddOp3(v, OP_Insert, newIdx, regRow, regRowid); - sqlite3ReleaseTempReg(pParse, regRowid); - sqlite3ReleaseTempReg(pParse, regRow); - - sqlite3VdbeAddOp2(v, OP_Goto, 0, iBeginBeforeTrigger); - sqlite3VdbeJumpHere(v, iEndBeforeTrigger); - } + int rc, j1; - if( !isView ){ - /* Loop over every record that needs updating. We have to load - ** the old data for each record to be updated because some columns - ** might not change and we will need to copy the old value. - ** Also, the old data is needed to delete the old index entries. - ** So make the cursor point at the old record. - */ - sqlite3VdbeAddOp3(v, OP_NotExists, iCur, addr, regOldRowid); + regEof = ++pParse->nMem; + sqlite3VdbeAddOp2(v, OP_Integer, 0, regEof); /* EOF <- 0 */ + VdbeComment((v, "SELECT eof flag")); + sqlite3SelectDestInit(&dest, SRT_Coroutine, ++pParse->nMem); + addrSelect = sqlite3VdbeCurrentAddr(v)+2; + sqlite3VdbeAddOp2(v, OP_Integer, addrSelect-1, dest.iParm); + j1 = sqlite3VdbeAddOp2(v, OP_Goto, 0, 0); + VdbeComment((v, "Jump over SELECT coroutine")); - /* If the record number will change, push the record number as it - ** will be after the update. (The old record number is currently - ** on top of the stack.) - */ - if( chngRowid ){ - sqlite3ExprCode(pParse, pRowidExpr, regNewRowid); - sqlite3VdbeAddOp1(v, OP_MustBeInt, regNewRowid); + /* Resolve the expressions in the SELECT statement and execute it. */ + rc = sqlite3Select(pParse, pSelect, &dest); + assert( pParse->nErr==0 || rc ); + if( rc || NEVER(pParse->nErr) || db->mallocFailed ){ + goto insert_cleanup; } + sqlite3VdbeAddOp2(v, OP_Integer, 1, regEof); /* EOF <- 1 */ + sqlite3VdbeAddOp1(v, OP_Yield, dest.iParm); /* yield X */ + sqlite3VdbeAddOp2(v, OP_Halt, SQLITE_INTERNAL, OE_Abort); + VdbeComment((v, "End of SELECT coroutine")); + sqlite3VdbeJumpHere(v, j1); /* label B: */ - /* Compute new data for this record. - */ - for(i=0; inCol; i++){ - if( i==pTab->iPKey ){ - sqlite3VdbeAddOp2(v, OP_Null, 0, regData+i); - continue; - } - j = aXRef[i]; - if( j<0 ){ - sqlite3VdbeAddOp3(v, OP_Column, iCur, i, regData+i); - sqlite3ColumnDefault(v, pTab, i); - }else{ - sqlite3ExprCode(pParse, pChanges->a[j].pExpr, regData+i); - } - } + regFromSelect = dest.iMem; + assert( pSelect->pEList ); + nColumn = pSelect->pEList->nExpr; + assert( dest.nMem==nColumn ); - /* Do constraint checks + /* Set useTempTable to TRUE if the result of the SELECT statement + ** should be written into a temporary table (template 4). Set to + ** FALSE if each* row of the SELECT can be written directly into + ** the destination table (template 3). + ** + ** A temp table must be used if the table being updated is also one + ** of the tables being read by the SELECT statement. Also use a + ** temp table in the case of row triggers. */ - sqlite3GenerateConstraintChecks(pParse, pTab, iCur, regNewRowid, - aRegIdx, chngRowid, 1, - onError, addr, 0); + if( pTrigger || readsTable(pParse, addrSelect, iDb, pTab) ){ + useTempTable = 1; + } - /* Delete the old indices for the current record. - */ - j1 = sqlite3VdbeAddOp3(v, OP_NotExists, iCur, 0, regOldRowid); - sqlite3GenerateRowIndexDelete(pParse, pTab, iCur, aRegIdx); + if( useTempTable ){ + /* Invoke the coroutine to extract information from the SELECT + ** and add it to a transient table srcTab. The code generated + ** here is from the 4th template: + ** + ** B: open temp table + ** L: yield X + ** if EOF goto M + ** insert row from R..R+n into temp table + ** goto L + ** M: ... + */ + int regRec; /* Register to hold packed record */ + int regTempRowid; /* Register to hold temp table ROWID */ + int addrTop; /* Label "L" */ + int addrIf; /* Address of jump to M */ - /* If changing the record number, delete the old record. - */ - if( chngRowid ){ - sqlite3VdbeAddOp2(v, OP_Delete, iCur, 0); + srcTab = pParse->nTab++; + regRec = sqlite3GetTempReg(pParse); + regTempRowid = sqlite3GetTempReg(pParse); + sqlite3VdbeAddOp2(v, OP_OpenEphemeral, srcTab, nColumn); + addrTop = sqlite3VdbeAddOp1(v, OP_Yield, dest.iParm); + addrIf = sqlite3VdbeAddOp1(v, OP_If, regEof); + sqlite3VdbeAddOp3(v, OP_MakeRecord, regFromSelect, nColumn, regRec); + sqlite3VdbeAddOp2(v, OP_NewRowid, srcTab, regTempRowid); + sqlite3VdbeAddOp3(v, OP_Insert, srcTab, regRec, regTempRowid); + sqlite3VdbeAddOp2(v, OP_Goto, 0, addrTop); + sqlite3VdbeJumpHere(v, addrIf); + sqlite3ReleaseTempReg(pParse, regRec); + sqlite3ReleaseTempReg(pParse, regTempRowid); } - sqlite3VdbeJumpHere(v, j1); - - /* Create the new index entries and the new record. + }else{ + /* This is the case if the data for the INSERT is coming from a VALUES + ** clause */ - sqlite3CompleteInsertion(pParse, pTab, iCur, regNewRowid, - aRegIdx, 1, -1, 0, 0); + NameContext sNC; + memset(&sNC, 0, sizeof(sNC)); + sNC.pParse = pParse; + srcTab = -1; + assert( useTempTable==0 ); + nColumn = pList ? pList->nExpr : 0; + for(i=0; ia[i].pExpr) ){ + goto insert_cleanup; + } + } } - /* Increment the row counter + /* Make sure the number of columns in the source data matches the number + ** of columns to be inserted into the table. */ - if( db->flags & SQLITE_CountRows && !pParse->trigStack){ - sqlite3VdbeAddOp2(v, OP_AddImm, regRowCount, 1); + if( IsVirtual(pTab) ){ + for(i=0; inCol; i++){ + nHidden += (IsHiddenColumn(&pTab->aCol[i]) ? 1 : 0); + } } - - /* If there are triggers, close all the cursors after each iteration - ** through the loop. The fire the after triggers. - */ - if( pTrigger ){ - sqlite3VdbeAddOp2(v, OP_Goto, 0, iBeginAfterTrigger); - sqlite3VdbeJumpHere(v, iEndAfterTrigger); + if( pColumn==0 && nColumn && nColumn!=(pTab->nCol-nHidden) ){ + sqlite3ErrorMsg(pParse, + "table %S has %d columns but %d values were supplied", + pTabList, 0, pTab->nCol-nHidden, nColumn); + goto insert_cleanup; + } + if( pColumn!=0 && nColumn!=pColumn->nId ){ + sqlite3ErrorMsg(pParse, "%d values for %d columns", nColumn, pColumn->nId); + goto insert_cleanup; } - /* Repeat the above with the next record to be updated, until - ** all record selected by the WHERE clause have been updated. + /* If the INSERT statement included an IDLIST term, then make sure + ** all elements of the IDLIST really are columns of the table and + ** remember the column indices. + ** + ** If the table has an INTEGER PRIMARY KEY column and that column + ** is named in the IDLIST, then record in the keyColumn variable + ** the index into IDLIST of the primary key column. keyColumn is + ** the index of the primary key as it appears in IDLIST, not as + ** is appears in the original table. (The index of the primary + ** key in the original table is pTab->iPKey.) */ - sqlite3VdbeAddOp2(v, OP_Goto, 0, addr); - sqlite3VdbeJumpHere(v, addr); - - /* Close all tables */ - for(i=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, i++){ - if( openAll || aRegIdx[i]>0 ){ - sqlite3VdbeAddOp2(v, OP_Close, iCur+i+1, 0); + if( pColumn ){ + for(i=0; inId; i++){ + pColumn->a[i].idx = -1; + } + for(i=0; inId; i++){ + for(j=0; jnCol; j++){ + if( sqlite3StrICmp(pColumn->a[i].zName, pTab->aCol[j].zName)==0 ){ + pColumn->a[i].idx = j; + if( j==pTab->iPKey ){ + keyColumn = i; + } + break; + } + } + if( j>=pTab->nCol ){ + if( sqlite3IsRowid(pColumn->a[i].zName) ){ + keyColumn = i; + }else{ + sqlite3ErrorMsg(pParse, "table %S has no column named %s", + pTabList, 0, pColumn->a[i].zName); + pParse->checkSchema = 1; + goto insert_cleanup; + } + } } - } - sqlite3VdbeAddOp2(v, OP_Close, iCur, 0); - if( pTrigger ){ - sqlite3VdbeAddOp2(v, OP_Close, newIdx, 0); - sqlite3VdbeAddOp2(v, OP_Close, oldIdx, 0); } - /* Update the sqlite_sequence table by storing the content of the - ** maximum rowid counter values recorded while inserting into - ** autoincrement tables. + /* If there is no IDLIST term but the table has an integer primary + ** key, the set the keyColumn variable to the primary key column index + ** in the original table definition. */ - if( pParse->nested==0 && pParse->trigStack==0 ){ - sqlite3AutoincrementEnd(pParse); + if( pColumn==0 && nColumn>0 ){ + keyColumn = pTab->iPKey; } - - /* - ** Return the number of rows that were changed. If this routine is - ** generating code because of a call to sqlite3NestedParse(), do not - ** invoke the callback function. + + /* Initialize the count of rows to be inserted */ - if( db->flags & SQLITE_CountRows && !pParse->trigStack && pParse->nested==0 ){ - sqlite3VdbeAddOp2(v, OP_ResultRow, regRowCount, 1); - sqlite3VdbeSetNumCols(v, 1); - sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "rows updated", SQLITE_STATIC); + if( db->flags & SQLITE_CountRows ){ + regRowCount = ++pParse->nMem; + sqlite3VdbeAddOp2(v, OP_Integer, 0, regRowCount); } -update_cleanup: - sqlite3AuthContextPop(&sContext); - sqlite3DbFree(db, aRegIdx); - sqlite3DbFree(db, aXRef); - sqlite3SrcListDelete(db, pTabList); - sqlite3ExprListDelete(db, pChanges); - sqlite3ExprDelete(db, pWhere); - return; -} - -#ifndef SQLITE_OMIT_VIRTUALTABLE -/* -** Generate code for an UPDATE of a virtual table. -** -** The strategy is that we create an ephemerial table that contains -** for each row to be changed: -** -** (A) The original rowid of that row. -** (B) The revised rowid for the row. (note1) -** (C) The content of every column in the row. -** -** Then we loop over this ephemeral table and for each row in -** the ephermeral table call VUpdate. -** -** When finished, drop the ephemeral table. -** -** (note1) Actually, if we know in advance that (A) is always the same -** as (B) we only store (A), then duplicate (A) when pulling -** it out of the ephemeral table before calling VUpdate. -*/ -static void updateVirtualTable( - Parse *pParse, /* The parsing context */ - SrcList *pSrc, /* The virtual table to be modified */ - Table *pTab, /* The virtual table */ - ExprList *pChanges, /* The columns to change in the UPDATE statement */ - Expr *pRowid, /* Expression used to recompute the rowid */ - int *aXRef, /* Mapping from columns of pTab to entries in pChanges */ - Expr *pWhere /* WHERE clause of the UPDATE statement */ -){ - Vdbe *v = pParse->pVdbe; /* Virtual machine under construction */ - ExprList *pEList = 0; /* The result set of the SELECT statement */ - Select *pSelect = 0; /* The SELECT statement */ - Expr *pExpr; /* Temporary expression */ - int ephemTab; /* Table holding the result of the SELECT */ - int i; /* Loop counter */ - int addr; /* Address of top of loop */ - int iReg; /* First register in set passed to OP_VUpdate */ - sqlite3 *db = pParse->db; /* Database connection */ - const char *pVtab = (const char*)pTab->pVtab; - SelectDest dest; + /* If this is not a view, open the table and and all indices */ + if( !isView ){ + int nIdx; - /* Construct the SELECT statement that will find the new values for - ** all updated rows. - */ - pEList = sqlite3ExprListAppend(pParse, 0, - sqlite3CreateIdExpr(pParse, "_rowid_")); - if( pRowid ){ - pEList = sqlite3ExprListAppend(pParse, pEList, - sqlite3ExprDup(db, pRowid, 0)); - } - assert( pTab->iPKey<0 ); - for(i=0; inCol; i++){ - if( aXRef[i]>=0 ){ - pExpr = sqlite3ExprDup(db, pChanges->a[aXRef[i]].pExpr, 0); - }else{ - pExpr = sqlite3CreateIdExpr(pParse, pTab->aCol[i].zName); + baseCur = pParse->nTab; + nIdx = sqlite3OpenTableAndIndices(pParse, pTab, baseCur, OP_OpenWrite); + aRegIdx = sqlite3DbMallocRaw(db, sizeof(int)*(nIdx+1)); + if( aRegIdx==0 ){ + goto insert_cleanup; + } + for(i=0; inMem; } - pEList = sqlite3ExprListAppend(pParse, pEList, pExpr); } - pSelect = sqlite3SelectNew(pParse, pEList, pSrc, pWhere, 0, 0, 0, 0, 0, 0); - - /* Create the ephemeral table into which the update results will - ** be stored. + + /* This is the top of the main insertion loop */ + if( useTempTable ){ + /* This block codes the top of loop only. The complete loop is the + ** following pseudocode (template 4): + ** + ** rewind temp table + ** C: loop over rows of intermediate table + ** transfer values form intermediate table into
    + ** end loop + ** D: ... + */ + addrInsTop = sqlite3VdbeAddOp1(v, OP_Rewind, srcTab); + addrCont = sqlite3VdbeCurrentAddr(v); + }else if( pSelect ){ + /* This block codes the top of loop only. The complete loop is the + ** following pseudocode (template 3): + ** + ** C: yield X + ** if EOF goto D + ** insert the select result into
    from R..R+n + ** goto C + ** D: ... + */ + addrCont = sqlite3VdbeAddOp1(v, OP_Yield, dest.iParm); + addrInsTop = sqlite3VdbeAddOp1(v, OP_If, regEof); + } + + /* Allocate registers for holding the rowid of the new row, + ** the content of the new row, and the assemblied row record. */ - assert( v ); - ephemTab = pParse->nTab++; - sqlite3VdbeAddOp2(v, OP_OpenEphemeral, ephemTab, pTab->nCol+1+(pRowid!=0)); + regRowid = regIns = pParse->nMem+1; + pParse->nMem += pTab->nCol + 1; + if( IsVirtual(pTab) ){ + regRowid++; + pParse->nMem++; + } + regData = regRowid+1; - /* fill the ephemeral table + /* Run the BEFORE and INSTEAD OF triggers, if there are any */ - sqlite3SelectDestInit(&dest, SRT_Table, ephemTab); - sqlite3Select(pParse, pSelect, &dest); + endOfLoop = sqlite3VdbeMakeLabel(v); + if( tmask & TRIGGER_BEFORE ){ + int regCols = sqlite3GetTempRange(pParse, pTab->nCol+1); - /* Generate code to scan the ephemeral table and call VUpdate. */ - iReg = ++pParse->nMem; - pParse->nMem += pTab->nCol+1; - addr = sqlite3VdbeAddOp2(v, OP_Rewind, ephemTab, 0); - sqlite3VdbeAddOp3(v, OP_Column, ephemTab, 0, iReg); - sqlite3VdbeAddOp3(v, OP_Column, ephemTab, (pRowid?1:0), iReg+1); - for(i=0; inCol; i++){ - sqlite3VdbeAddOp3(v, OP_Column, ephemTab, i+1+(pRowid!=0), iReg+2+i); - } - sqlite3VtabMakeWritable(pParse, pTab); - sqlite3VdbeAddOp4(v, OP_VUpdate, 0, pTab->nCol+2, iReg, pVtab, P4_VTAB); - sqlite3VdbeAddOp2(v, OP_Next, ephemTab, addr+1); - sqlite3VdbeJumpHere(v, addr); - sqlite3VdbeAddOp2(v, OP_Close, ephemTab, 0); + /* build the NEW.* reference row. Note that if there is an INTEGER + ** PRIMARY KEY into which a NULL is being inserted, that NULL will be + ** translated into a unique ID for the row. But on a BEFORE trigger, + ** we do not know what the unique ID will be (because the insert has + ** not happened yet) so we substitute a rowid of -1 + */ + if( keyColumn<0 ){ + sqlite3VdbeAddOp2(v, OP_Integer, -1, regCols); + }else{ + int j1; + if( useTempTable ){ + sqlite3VdbeAddOp3(v, OP_Column, srcTab, keyColumn, regCols); + }else{ + assert( pSelect==0 ); /* Otherwise useTempTable is true */ + sqlite3ExprCode(pParse, pList->a[keyColumn].pExpr, regCols); + } + j1 = sqlite3VdbeAddOp1(v, OP_NotNull, regCols); + sqlite3VdbeAddOp2(v, OP_Integer, -1, regCols); + sqlite3VdbeJumpHere(v, j1); + sqlite3VdbeAddOp1(v, OP_MustBeInt, regCols); + } - /* Cleanup */ - sqlite3SelectDelete(db, pSelect); -} -#endif /* SQLITE_OMIT_VIRTUALTABLE */ + /* Cannot have triggers on a virtual table. If it were possible, + ** this block would have to account for hidden column. + */ + assert( !IsVirtual(pTab) ); -/* Make sure "isView" gets undefined in case this file becomes part of -** the amalgamation - so that subsequent files do not see isView as a -** macro. */ -#undef isView + /* Create the new column data + */ + for(i=0; inCol; i++){ + if( pColumn==0 ){ + j = i; + }else{ + for(j=0; jnId; j++){ + if( pColumn->a[j].idx==i ) break; + } + } + if( (!useTempTable && !pList) || (pColumn && j>=pColumn->nId) ){ + sqlite3ExprCode(pParse, pTab->aCol[i].pDflt, regCols+i+1); + }else if( useTempTable ){ + sqlite3VdbeAddOp3(v, OP_Column, srcTab, j, regCols+i+1); + }else{ + assert( pSelect==0 ); /* Otherwise useTempTable is true */ + sqlite3ExprCodeAndCache(pParse, pList->a[j].pExpr, regCols+i+1); + } + } -/************** End of update.c **********************************************/ -/************** Begin file vacuum.c ******************************************/ -/* -** 2003 April 6 -** -** The author disclaims copyright to this source code. In place of -** a legal notice, here is a blessing: -** -** May you do good and not evil. -** May you find forgiveness for yourself and forgive others. -** May you share freely, never taking more than you give. -** -************************************************************************* -** This file contains code used to implement the VACUUM command. -** -** Most of the code in this file may be omitted by defining the -** SQLITE_OMIT_VACUUM macro. -** -** $Id: vacuum.c,v 1.90 2009/06/03 11:25:07 danielk1977 Exp $ -*/ + /* If this is an INSERT on a view with an INSTEAD OF INSERT trigger, + ** do not attempt any conversions before assembling the record. + ** If this is a real table, attempt conversions as required by the + ** table column affinities. + */ + if( !isView ){ + sqlite3VdbeAddOp2(v, OP_Affinity, regCols+1, pTab->nCol); + sqlite3TableAffinityStr(v, pTab); + } -#if !defined(SQLITE_OMIT_VACUUM) && !defined(SQLITE_OMIT_ATTACH) -/* -** Execute zSql on database db. Return an error code. -*/ -static int execSql(sqlite3 *db, const char *zSql){ - sqlite3_stmt *pStmt; - VVA_ONLY( int rc; ) - if( !zSql ){ - return SQLITE_NOMEM; - } - if( SQLITE_OK!=sqlite3_prepare(db, zSql, -1, &pStmt, 0) ){ - return sqlite3_errcode(db); + /* Fire BEFORE or INSTEAD OF triggers */ + sqlite3CodeRowTrigger(pParse, pTrigger, TK_INSERT, 0, TRIGGER_BEFORE, + pTab, regCols-pTab->nCol-1, onError, endOfLoop); + + sqlite3ReleaseTempRange(pParse, regCols, pTab->nCol+1); } - VVA_ONLY( rc = ) sqlite3_step(pStmt); - assert( rc!=SQLITE_ROW ); - return sqlite3_finalize(pStmt); -} -/* -** Execute zSql on database db. The statement returns exactly -** one column. Execute this as SQL on the same database. -*/ -static int execExecSql(sqlite3 *db, const char *zSql){ - sqlite3_stmt *pStmt; - int rc; + /* Push the record number for the new entry onto the stack. The + ** record number is a randomly generate integer created by NewRowid + ** except when the table has an INTEGER PRIMARY KEY column, in which + ** case the record number is the same as that column. + */ + if( !isView ){ + if( IsVirtual(pTab) ){ + /* The row that the VUpdate opcode will delete: none */ + sqlite3VdbeAddOp2(v, OP_Null, 0, regIns); + } + if( keyColumn>=0 ){ + if( useTempTable ){ + sqlite3VdbeAddOp3(v, OP_Column, srcTab, keyColumn, regRowid); + }else if( pSelect ){ + sqlite3VdbeAddOp2(v, OP_SCopy, regFromSelect+keyColumn, regRowid); + }else{ + VdbeOp *pOp; + sqlite3ExprCode(pParse, pList->a[keyColumn].pExpr, regRowid); + pOp = sqlite3VdbeGetOp(v, -1); + if( ALWAYS(pOp) && pOp->opcode==OP_Null && !IsVirtual(pTab) ){ + appendFlag = 1; + pOp->opcode = OP_NewRowid; + pOp->p1 = baseCur; + pOp->p2 = regRowid; + pOp->p3 = regAutoinc; + } + } + /* If the PRIMARY KEY expression is NULL, then use OP_NewRowid + ** to generate a unique primary key value. + */ + if( !appendFlag ){ + int j1; + if( !IsVirtual(pTab) ){ + j1 = sqlite3VdbeAddOp1(v, OP_NotNull, regRowid); + sqlite3VdbeAddOp3(v, OP_NewRowid, baseCur, regRowid, regAutoinc); + sqlite3VdbeJumpHere(v, j1); + }else{ + j1 = sqlite3VdbeCurrentAddr(v); + sqlite3VdbeAddOp2(v, OP_IsNull, regRowid, j1+2); + } + sqlite3VdbeAddOp1(v, OP_MustBeInt, regRowid); + } + }else if( IsVirtual(pTab) ){ + sqlite3VdbeAddOp2(v, OP_Null, 0, regRowid); + }else{ + sqlite3VdbeAddOp3(v, OP_NewRowid, baseCur, regRowid, regAutoinc); + appendFlag = 1; + } + autoIncStep(pParse, regAutoinc, regRowid); - rc = sqlite3_prepare(db, zSql, -1, &pStmt, 0); - if( rc!=SQLITE_OK ) return rc; + /* Push onto the stack, data for all columns of the new entry, beginning + ** with the first column. + */ + nHidden = 0; + for(i=0; inCol; i++){ + int iRegStore = regRowid+1+i; + if( i==pTab->iPKey ){ + /* The value of the INTEGER PRIMARY KEY column is always a NULL. + ** Whenever this column is read, the record number will be substituted + ** in its place. So will fill this column with a NULL to avoid + ** taking up data space with information that will never be used. */ + sqlite3VdbeAddOp2(v, OP_Null, 0, iRegStore); + continue; + } + if( pColumn==0 ){ + if( IsHiddenColumn(&pTab->aCol[i]) ){ + assert( IsVirtual(pTab) ); + j = -1; + nHidden++; + }else{ + j = i - nHidden; + } + }else{ + for(j=0; jnId; j++){ + if( pColumn->a[j].idx==i ) break; + } + } + if( j<0 || nColumn==0 || (pColumn && j>=pColumn->nId) ){ + sqlite3ExprCode(pParse, pTab->aCol[i].pDflt, iRegStore); + }else if( useTempTable ){ + sqlite3VdbeAddOp3(v, OP_Column, srcTab, j, iRegStore); + }else if( pSelect ){ + sqlite3VdbeAddOp2(v, OP_SCopy, regFromSelect+j, iRegStore); + }else{ + sqlite3ExprCode(pParse, pList->a[j].pExpr, iRegStore); + } + } - while( SQLITE_ROW==sqlite3_step(pStmt) ){ - rc = execSql(db, (char*)sqlite3_column_text(pStmt, 0)); - if( rc!=SQLITE_OK ){ - sqlite3_finalize(pStmt); - return rc; + /* Generate code to check constraints and generate index keys and + ** do the insertion. + */ +#ifndef SQLITE_OMIT_VIRTUALTABLE + if( IsVirtual(pTab) ){ + const char *pVTab = (const char *)sqlite3GetVTable(db, pTab); + sqlite3VtabMakeWritable(pParse, pTab); + sqlite3VdbeAddOp4(v, OP_VUpdate, 1, pTab->nCol+2, regIns, pVTab, P4_VTAB); + sqlite3VdbeChangeP5(v, onError==OE_Default ? OE_Abort : onError); + sqlite3MayAbort(pParse); + }else +#endif + { + int isReplace; /* Set to true if constraints may cause a replace */ + sqlite3GenerateConstraintChecks(pParse, pTab, baseCur, regIns, aRegIdx, + keyColumn>=0, 0, onError, endOfLoop, &isReplace + ); + sqlite3FkCheck(pParse, pTab, 0, regIns); + sqlite3CompleteInsertion( + pParse, pTab, baseCur, regIns, aRegIdx, 0, appendFlag, isReplace==0 + ); } } - return sqlite3_finalize(pStmt); -} - -/* -** The non-standard VACUUM command is used to clean up the database, -** collapse free space, etc. It is modelled after the VACUUM command -** in PostgreSQL. -** -** In version 1.0.x of SQLite, the VACUUM command would call -** gdbm_reorganize() on all the database tables. But beginning -** with 2.0.0, SQLite no longer uses GDBM so this command has -** become a no-op. -*/ -SQLITE_PRIVATE void sqlite3Vacuum(Parse *pParse){ - Vdbe *v = sqlite3GetVdbe(pParse); - if( v ){ - sqlite3VdbeAddOp2(v, OP_Vacuum, 0, 0); + /* Update the count of rows that are inserted + */ + if( (db->flags & SQLITE_CountRows)!=0 ){ + sqlite3VdbeAddOp2(v, OP_AddImm, regRowCount, 1); } - return; -} - -/* -** This routine implements the OP_Vacuum opcode of the VDBE. -*/ -SQLITE_PRIVATE int sqlite3RunVacuum(char **pzErrMsg, sqlite3 *db){ - int rc = SQLITE_OK; /* Return code from service routines */ - Btree *pMain; /* The database being vacuumed */ - Btree *pTemp; /* The temporary database we vacuum into */ - char *zSql = 0; /* SQL statements */ - int saved_flags; /* Saved value of the db->flags */ - int saved_nChange; /* Saved value of db->nChange */ - int saved_nTotalChange; /* Saved value of db->nTotalChange */ - Db *pDb = 0; /* Database to detach at end of vacuum */ - int isMemDb; /* True if vacuuming a :memory: database */ - int nRes; - if( !db->autoCommit ){ - sqlite3SetString(pzErrMsg, db, "cannot VACUUM from within a transaction"); - return SQLITE_ERROR; + if( pTrigger ){ + /* Code AFTER triggers */ + sqlite3CodeRowTrigger(pParse, pTrigger, TK_INSERT, 0, TRIGGER_AFTER, + pTab, regData-2-pTab->nCol, onError, endOfLoop); } - /* Save the current value of the write-schema flag before setting it. */ - saved_flags = db->flags; - saved_nChange = db->nChange; - saved_nTotalChange = db->nTotalChange; - db->flags |= SQLITE_WriteSchema | SQLITE_IgnoreChecks; - - pMain = db->aDb[0].pBt; - isMemDb = sqlite3PagerIsMemdb(sqlite3BtreePager(pMain)); - - /* Attach the temporary database as 'vacuum_db'. The synchronous pragma - ** can be set to 'off' for this file, as it is not recovered if a crash - ** occurs anyway. The integrity of the database is maintained by a - ** (possibly synchronous) transaction opened on the main database before - ** sqlite3BtreeCopyFile() is called. - ** - ** An optimisation would be to use a non-journaled pager. - ** (Later:) I tried setting "PRAGMA vacuum_db.journal_mode=OFF" but - ** that actually made the VACUUM run slower. Very little journalling - ** actually occurs when doing a vacuum since the vacuum_db is initially - ** empty. Only the journal header is written. Apparently it takes more - ** time to parse and run the PRAGMA to turn journalling off than it does - ** to write the journal header file. + /* The bottom of the main insertion loop, if the data source + ** is a SELECT statement. */ - zSql = "ATTACH '' AS vacuum_db;"; - rc = execSql(db, zSql); - if( rc!=SQLITE_OK ) goto end_of_vacuum; - pDb = &db->aDb[db->nDb-1]; - assert( strcmp(db->aDb[db->nDb-1].zName,"vacuum_db")==0 ); - pTemp = db->aDb[db->nDb-1].pBt; - - nRes = sqlite3BtreeGetReserve(pMain); - - /* A VACUUM cannot change the pagesize of an encrypted database. */ -#ifdef SQLITE_HAS_CODEC - if( db->nextPagesize ){ - extern void sqlite3CodecGetKey(sqlite3*, int, void**, int*); - int nKey; - char *zKey; - sqlite3CodecGetKey(db, 0, (void**)&zKey, &nKey); - if( nKey ) db->nextPagesize = 0; + sqlite3VdbeResolveLabel(v, endOfLoop); + if( useTempTable ){ + sqlite3VdbeAddOp2(v, OP_Next, srcTab, addrCont); + sqlite3VdbeJumpHere(v, addrInsTop); + sqlite3VdbeAddOp1(v, OP_Close, srcTab); + }else if( pSelect ){ + sqlite3VdbeAddOp2(v, OP_Goto, 0, addrCont); + sqlite3VdbeJumpHere(v, addrInsTop); } -#endif - if( sqlite3BtreeSetPageSize(pTemp, sqlite3BtreeGetPageSize(pMain), nRes, 0) - || (!isMemDb && sqlite3BtreeSetPageSize(pTemp, db->nextPagesize, nRes, 0)) - || NEVER(db->mallocFailed) - ){ - rc = SQLITE_NOMEM; - goto end_of_vacuum; - } - rc = execSql(db, "PRAGMA vacuum_db.synchronous=OFF"); - if( rc!=SQLITE_OK ){ - goto end_of_vacuum; + if( !IsVirtual(pTab) && !isView ){ + /* Close all tables opened */ + sqlite3VdbeAddOp1(v, OP_Close, baseCur); + for(idx=1, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, idx++){ + sqlite3VdbeAddOp1(v, OP_Close, idx+baseCur); + } } -#ifndef SQLITE_OMIT_AUTOVACUUM - sqlite3BtreeSetAutoVacuum(pTemp, db->nextAutovac>=0 ? db->nextAutovac : - sqlite3BtreeGetAutoVacuum(pMain)); -#endif - - /* Begin a transaction */ - rc = execSql(db, "BEGIN EXCLUSIVE;"); - if( rc!=SQLITE_OK ) goto end_of_vacuum; - - /* Query the schema of the main database. Create a mirror schema - ** in the temporary database. - */ - rc = execExecSql(db, - "SELECT 'CREATE TABLE vacuum_db.' || substr(sql,14) " - " FROM sqlite_master WHERE type='table' AND name!='sqlite_sequence'" - " AND rootpage>0" - ); - if( rc!=SQLITE_OK ) goto end_of_vacuum; - rc = execExecSql(db, - "SELECT 'CREATE INDEX vacuum_db.' || substr(sql,14)" - " FROM sqlite_master WHERE sql LIKE 'CREATE INDEX %' "); - if( rc!=SQLITE_OK ) goto end_of_vacuum; - rc = execExecSql(db, - "SELECT 'CREATE UNIQUE INDEX vacuum_db.' || substr(sql,21) " - " FROM sqlite_master WHERE sql LIKE 'CREATE UNIQUE INDEX %'"); - if( rc!=SQLITE_OK ) goto end_of_vacuum; - - /* Loop through the tables in the main database. For each, do - ** an "INSERT INTO vacuum_db.xxx SELECT * FROM xxx;" to copy - ** the contents to the temporary database. +insert_end: + /* Update the sqlite_sequence table by storing the content of the + ** maximum rowid counter values recorded while inserting into + ** autoincrement tables. */ - rc = execExecSql(db, - "SELECT 'INSERT INTO vacuum_db.' || quote(name) " - "|| ' SELECT * FROM ' || quote(name) || ';'" - "FROM sqlite_master " - "WHERE type = 'table' AND name!='sqlite_sequence' " - " AND rootpage>0" - - ); - if( rc!=SQLITE_OK ) goto end_of_vacuum; + if( pParse->nested==0 && pParse->pTriggerTab==0 ){ + sqlite3AutoincrementEnd(pParse); + } - /* Copy over the sequence table + /* + ** Return the number of rows inserted. If this routine is + ** generating code because of a call to sqlite3NestedParse(), do not + ** invoke the callback function. */ - rc = execExecSql(db, - "SELECT 'DELETE FROM vacuum_db.' || quote(name) || ';' " - "FROM vacuum_db.sqlite_master WHERE name='sqlite_sequence' " - ); - if( rc!=SQLITE_OK ) goto end_of_vacuum; - rc = execExecSql(db, - "SELECT 'INSERT INTO vacuum_db.' || quote(name) " - "|| ' SELECT * FROM ' || quote(name) || ';' " - "FROM vacuum_db.sqlite_master WHERE name=='sqlite_sequence';" - ); - if( rc!=SQLITE_OK ) goto end_of_vacuum; + if( (db->flags&SQLITE_CountRows) && !pParse->nested && !pParse->pTriggerTab ){ + sqlite3VdbeAddOp2(v, OP_ResultRow, regRowCount, 1); + sqlite3VdbeSetNumCols(v, 1); + sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "rows inserted", SQLITE_STATIC); + } +insert_cleanup: + sqlite3SrcListDelete(db, pTabList); + sqlite3ExprListDelete(db, pList); + sqlite3SelectDelete(db, pSelect); + sqlite3IdListDelete(db, pColumn); + sqlite3DbFree(db, aRegIdx); +} - /* Copy the triggers, views, and virtual tables from the main database - ** over to the temporary database. None of these objects has any - ** associated storage, so all we have to do is copy their entries - ** from the SQLITE_MASTER table. - */ - rc = execSql(db, - "INSERT INTO vacuum_db.sqlite_master " - " SELECT type, name, tbl_name, rootpage, sql" - " FROM sqlite_master" - " WHERE type='view' OR type='trigger'" - " OR (type='table' AND rootpage=0)" - ); - if( rc ) goto end_of_vacuum; +/* Make sure "isView" and other macros defined above are undefined. Otherwise +** thely may interfere with compilation of other functions in this file +** (or in another file, if this file becomes part of the amalgamation). */ +#ifdef isView + #undef isView +#endif +#ifdef pTrigger + #undef pTrigger +#endif +#ifdef tmask + #undef tmask +#endif - /* At this point, unless the main db was completely empty, there is now a - ** transaction open on the vacuum database, but not on the main database. - ** Open a btree level transaction on the main database. This allows a - ** call to sqlite3BtreeCopyFile(). The main database btree level - ** transaction is then committed, so the SQL level never knows it was - ** opened for writing. This way, the SQL transaction used to create the - ** temporary database never needs to be committed. - */ - { - u32 meta; - int i; - /* This array determines which meta meta values are preserved in the - ** vacuum. Even entries are the meta value number and odd entries - ** are an increment to apply to the meta value after the vacuum. - ** The increment is used to increase the schema cookie so that other - ** connections to the same database will know to reread the schema. - */ - static const unsigned char aCopy[] = { - BTREE_SCHEMA_VERSION, 1, /* Add one to the old schema cookie */ - BTREE_DEFAULT_CACHE_SIZE, 0, /* Preserve the default page cache size */ - BTREE_TEXT_ENCODING, 0, /* Preserve the text encoding */ - BTREE_USER_VERSION, 0, /* Preserve the user version */ - }; +/* +** Generate code to do constraint checks prior to an INSERT or an UPDATE. +** +** The input is a range of consecutive registers as follows: +** +** 1. The rowid of the row after the update. +** +** 2. The data in the first column of the entry after the update. +** +** i. Data from middle columns... +** +** N. The data in the last column of the entry after the update. +** +** The regRowid parameter is the index of the register containing (1). +** +** If isUpdate is true and rowidChng is non-zero, then rowidChng contains +** the address of a register containing the rowid before the update takes +** place. isUpdate is true for UPDATEs and false for INSERTs. If isUpdate +** is false, indicating an INSERT statement, then a non-zero rowidChng +** indicates that the rowid was explicitly specified as part of the +** INSERT statement. If rowidChng is false, it means that the rowid is +** computed automatically in an insert or that the rowid value is not +** modified by an update. +** +** The code generated by this routine store new index entries into +** registers identified by aRegIdx[]. No index entry is created for +** indices where aRegIdx[i]==0. The order of indices in aRegIdx[] is +** the same as the order of indices on the linked list of indices +** attached to the table. +** +** This routine also generates code to check constraints. NOT NULL, +** CHECK, and UNIQUE constraints are all checked. If a constraint fails, +** then the appropriate action is performed. There are five possible +** actions: ROLLBACK, ABORT, FAIL, REPLACE, and IGNORE. +** +** Constraint type Action What Happens +** --------------- ---------- ---------------------------------------- +** any ROLLBACK The current transaction is rolled back and +** sqlite3_exec() returns immediately with a +** return code of SQLITE_CONSTRAINT. +** +** any ABORT Back out changes from the current command +** only (do not do a complete rollback) then +** cause sqlite3_exec() to return immediately +** with SQLITE_CONSTRAINT. +** +** any FAIL Sqlite3_exec() returns immediately with a +** return code of SQLITE_CONSTRAINT. The +** transaction is not rolled back and any +** prior changes are retained. +** +** any IGNORE The record number and data is popped from +** the stack and there is an immediate jump +** to label ignoreDest. +** +** NOT NULL REPLACE The NULL value is replace by the default +** value for that column. If the default value +** is NULL, the action is the same as ABORT. +** +** UNIQUE REPLACE The other row that conflicts with the row +** being inserted is removed. +** +** CHECK REPLACE Illegal. The results in an exception. +** +** Which action to take is determined by the overrideError parameter. +** Or if overrideError==OE_Default, then the pParse->onError parameter +** is used. Or if pParse->onError==OE_Default then the onError value +** for the constraint is used. +** +** The calling routine must open a read/write cursor for pTab with +** cursor number "baseCur". All indices of pTab must also have open +** read/write cursors with cursor number baseCur+i for the i-th cursor. +** Except, if there is no possibility of a REPLACE action then +** cursors do not need to be open for indices where aRegIdx[i]==0. +*/ +SQLITE_PRIVATE void sqlite3GenerateConstraintChecks( + Parse *pParse, /* The parser context */ + Table *pTab, /* the table into which we are inserting */ + int baseCur, /* Index of a read/write cursor pointing at pTab */ + int regRowid, /* Index of the range of input registers */ + int *aRegIdx, /* Register used by each index. 0 for unused indices */ + int rowidChng, /* True if the rowid might collide with existing entry */ + int isUpdate, /* True for UPDATE, False for INSERT */ + int overrideError, /* Override onError to this if not OE_Default */ + int ignoreDest, /* Jump to this label on an OE_Ignore resolution */ + int *pbMayReplace /* OUT: Set to true if constraint may cause a replace */ +){ + int i; /* loop counter */ + Vdbe *v; /* VDBE under constrution */ + int nCol; /* Number of columns */ + int onError; /* Conflict resolution strategy */ + int j1; /* Addresss of jump instruction */ + int j2 = 0, j3; /* Addresses of jump instructions */ + int regData; /* Register containing first data column */ + int iCur; /* Table cursor number */ + Index *pIdx; /* Pointer to one of the indices */ + sqlite3 *db; /* Database connection */ + int seenReplace = 0; /* True if REPLACE is used to resolve INT PK conflict */ + int regOldRowid = (rowidChng && isUpdate) ? rowidChng : regRowid; - assert( 1==sqlite3BtreeIsInTrans(pTemp) ); - assert( 1==sqlite3BtreeIsInTrans(pMain) ); + db = pParse->db; + v = sqlite3GetVdbe(pParse); + assert( v!=0 ); + assert( pTab->pSelect==0 ); /* This table is not a VIEW */ + nCol = pTab->nCol; + regData = regRowid + 1; - /* Copy Btree meta values */ - for(i=0; iiPKey ){ + continue; + } + onError = pTab->aCol[i].notNull; + if( onError==OE_None ) continue; + if( overrideError!=OE_Default ){ + onError = overrideError; + }else if( onError==OE_Default ){ + onError = OE_Abort; + } + if( onError==OE_Replace && pTab->aCol[i].pDflt==0 ){ + onError = OE_Abort; + } + assert( onError==OE_Rollback || onError==OE_Abort || onError==OE_Fail + || onError==OE_Ignore || onError==OE_Replace ); + switch( onError ){ + case OE_Abort: + sqlite3MayAbort(pParse); + case OE_Rollback: + case OE_Fail: { + char *zMsg; + sqlite3VdbeAddOp3(v, OP_HaltIfNull, + SQLITE_CONSTRAINT, onError, regData+i); + zMsg = sqlite3MPrintf(db, "%s.%s may not be NULL", + pTab->zName, pTab->aCol[i].zName); + sqlite3VdbeChangeP4(v, -1, zMsg, P4_DYNAMIC); + break; + } + case OE_Ignore: { + sqlite3VdbeAddOp2(v, OP_IsNull, regData+i, ignoreDest); + break; + } + default: { + assert( onError==OE_Replace ); + j1 = sqlite3VdbeAddOp1(v, OP_NotNull, regData+i); + sqlite3ExprCode(pParse, pTab->aCol[i].pDflt, regData+i); + sqlite3VdbeJumpHere(v, j1); + break; + } } - - rc = sqlite3BtreeCopyFile(pMain, pTemp); - if( rc!=SQLITE_OK ) goto end_of_vacuum; - rc = sqlite3BtreeCommit(pTemp); - if( rc!=SQLITE_OK ) goto end_of_vacuum; -#ifndef SQLITE_OMIT_AUTOVACUUM - sqlite3BtreeSetAutoVacuum(pMain, sqlite3BtreeGetAutoVacuum(pTemp)); -#endif } - assert( rc==SQLITE_OK ); - rc = sqlite3BtreeSetPageSize(pMain, sqlite3BtreeGetPageSize(pTemp), nRes,1); - -end_of_vacuum: - /* Restore the original value of db->flags */ - db->flags = saved_flags; - db->nChange = saved_nChange; - db->nTotalChange = saved_nTotalChange; - - /* Currently there is an SQL level transaction open on the vacuum - ** database. No locks are held on any other files (since the main file - ** was committed at the btree level). So it safe to end the transaction - ** by manually setting the autoCommit flag to true and detaching the - ** vacuum database. The vacuum_db journal file is deleted when the pager - ** is closed by the DETACH. + /* Test all CHECK constraints */ - db->autoCommit = 1; +#ifndef SQLITE_OMIT_CHECK + if( pTab->pCheck && (db->flags & SQLITE_IgnoreChecks)==0 ){ + ExprList *pCheck = pTab->pCheck; + pParse->ckBase = regData; + onError = overrideError!=OE_Default ? overrideError : OE_Abort; + for(i=0; inExpr; i++){ + int allOk = sqlite3VdbeMakeLabel(v); + sqlite3ExprIfTrue(pParse, pCheck->a[i].pExpr, allOk, SQLITE_JUMPIFNULL); + if( onError==OE_Ignore ){ + sqlite3VdbeAddOp2(v, OP_Goto, 0, ignoreDest); + }else{ + char *zConsName = pCheck->a[i].zName; + if( onError==OE_Replace ) onError = OE_Abort; /* IMP: R-15569-63625 */ + if( zConsName ){ + zConsName = sqlite3MPrintf(db, "constraint %s failed", zConsName); + }else{ + zConsName = 0; + } + sqlite3HaltConstraint(pParse, onError, zConsName, P4_DYNAMIC); + } + sqlite3VdbeResolveLabel(v, allOk); + } + } +#endif /* !defined(SQLITE_OMIT_CHECK) */ - if( pDb ){ - sqlite3BtreeClose(pDb->pBt); - pDb->pBt = 0; - pDb->pSchema = 0; + /* If we have an INTEGER PRIMARY KEY, make sure the primary key + ** of the new record does not previously exist. Except, if this + ** is an UPDATE and the primary key is not changing, that is OK. + */ + if( rowidChng ){ + onError = pTab->keyConf; + if( overrideError!=OE_Default ){ + onError = overrideError; + }else if( onError==OE_Default ){ + onError = OE_Abort; + } + + if( isUpdate ){ + j2 = sqlite3VdbeAddOp3(v, OP_Eq, regRowid, 0, rowidChng); + } + j3 = sqlite3VdbeAddOp3(v, OP_NotExists, baseCur, 0, regRowid); + switch( onError ){ + default: { + onError = OE_Abort; + /* Fall thru into the next case */ + } + case OE_Rollback: + case OE_Abort: + case OE_Fail: { + sqlite3HaltConstraint( + pParse, onError, "PRIMARY KEY must be unique", P4_STATIC); + break; + } + case OE_Replace: { + /* If there are DELETE triggers on this table and the + ** recursive-triggers flag is set, call GenerateRowDelete() to + ** remove the conflicting row from the the table. This will fire + ** the triggers and remove both the table and index b-tree entries. + ** + ** Otherwise, if there are no triggers or the recursive-triggers + ** flag is not set, but the table has one or more indexes, call + ** GenerateRowIndexDelete(). This removes the index b-tree entries + ** only. The table b-tree entry will be replaced by the new entry + ** when it is inserted. + ** + ** If either GenerateRowDelete() or GenerateRowIndexDelete() is called, + ** also invoke MultiWrite() to indicate that this VDBE may require + ** statement rollback (if the statement is aborted after the delete + ** takes place). Earlier versions called sqlite3MultiWrite() regardless, + ** but being more selective here allows statements like: + ** + ** REPLACE INTO t(rowid) VALUES($newrowid) + ** + ** to run without a statement journal if there are no indexes on the + ** table. + */ + Trigger *pTrigger = 0; + if( db->flags&SQLITE_RecTriggers ){ + pTrigger = sqlite3TriggersExist(pParse, pTab, TK_DELETE, 0, 0); + } + if( pTrigger || sqlite3FkRequired(pParse, pTab, 0, 0) ){ + sqlite3MultiWrite(pParse); + sqlite3GenerateRowDelete( + pParse, pTab, baseCur, regRowid, 0, pTrigger, OE_Replace + ); + }else if( pTab->pIndex ){ + sqlite3MultiWrite(pParse); + sqlite3GenerateRowIndexDelete(pParse, pTab, baseCur, 0); + } + seenReplace = 1; + break; + } + case OE_Ignore: { + assert( seenReplace==0 ); + sqlite3VdbeAddOp2(v, OP_Goto, 0, ignoreDest); + break; + } + } + sqlite3VdbeJumpHere(v, j3); + if( isUpdate ){ + sqlite3VdbeJumpHere(v, j2); + } } - sqlite3ResetInternalSchema(db, 0); + /* Test all UNIQUE constraints by creating entries for each UNIQUE + ** index and making sure that duplicate entries do not already exist. + ** Add the new records to the indices as we go. + */ + for(iCur=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, iCur++){ + int regIdx; + int regR; - return rc; -} -#endif /* SQLITE_OMIT_VACUUM && SQLITE_OMIT_ATTACH */ + if( aRegIdx[iCur]==0 ) continue; /* Skip unused indices */ -/************** End of vacuum.c **********************************************/ -/************** Begin file vtab.c ********************************************/ -/* -** 2006 June 10 -** -** The author disclaims copyright to this source code. In place of -** a legal notice, here is a blessing: -** -** May you do good and not evil. -** May you find forgiveness for yourself and forgive others. -** May you share freely, never taking more than you give. -** -************************************************************************* -** This file contains code used to help implement virtual tables. -** -** $Id: vtab.c,v 1.91 2009/06/15 16:27:08 shane Exp $ -*/ -#ifndef SQLITE_OMIT_VIRTUALTABLE + /* Create a key for accessing the index entry */ + regIdx = sqlite3GetTempRange(pParse, pIdx->nColumn+1); + for(i=0; inColumn; i++){ + int idx = pIdx->aiColumn[i]; + if( idx==pTab->iPKey ){ + sqlite3VdbeAddOp2(v, OP_SCopy, regRowid, regIdx+i); + }else{ + sqlite3VdbeAddOp2(v, OP_SCopy, regData+idx, regIdx+i); + } + } + sqlite3VdbeAddOp2(v, OP_SCopy, regRowid, regIdx+i); + sqlite3VdbeAddOp3(v, OP_MakeRecord, regIdx, pIdx->nColumn+1, aRegIdx[iCur]); + sqlite3VdbeChangeP4(v, -1, sqlite3IndexAffinityStr(v, pIdx), P4_TRANSIENT); + sqlite3ExprCacheAffinityChange(pParse, regIdx, pIdx->nColumn+1); -/* -** The actual function that does the work of creating a new module. -** This function implements the sqlite3_create_module() and -** sqlite3_create_module_v2() interfaces. -*/ -static int createModule( - sqlite3 *db, /* Database in which module is registered */ - const char *zName, /* Name assigned to this module */ - const sqlite3_module *pModule, /* The definition of the module */ - void *pAux, /* Context pointer for xCreate/xConnect */ - void (*xDestroy)(void *) /* Module destructor function */ -) { - int rc, nName; - Module *pMod; + /* Find out what action to take in case there is an indexing conflict */ + onError = pIdx->onError; + if( onError==OE_None ){ + sqlite3ReleaseTempRange(pParse, regIdx, pIdx->nColumn+1); + continue; /* pIdx is not a UNIQUE index */ + } + if( overrideError!=OE_Default ){ + onError = overrideError; + }else if( onError==OE_Default ){ + onError = OE_Abort; + } + if( seenReplace ){ + if( onError==OE_Ignore ) onError = OE_Replace; + else if( onError==OE_Fail ) onError = OE_Abort; + } + + /* Check to see if the new index entry will be unique */ + regR = sqlite3GetTempReg(pParse); + sqlite3VdbeAddOp2(v, OP_SCopy, regOldRowid, regR); + j3 = sqlite3VdbeAddOp4(v, OP_IsUnique, baseCur+iCur+1, 0, + regR, SQLITE_INT_TO_PTR(regIdx), + P4_INT32); + sqlite3ReleaseTempRange(pParse, regIdx, pIdx->nColumn+1); - sqlite3_mutex_enter(db->mutex); - nName = sqlite3Strlen30(zName); - pMod = (Module *)sqlite3DbMallocRaw(db, sizeof(Module) + nName + 1); - if( pMod ){ - Module *pDel; - char *zCopy = (char *)(&pMod[1]); - memcpy(zCopy, zName, nName+1); - pMod->zName = zCopy; - pMod->pModule = pModule; - pMod->pAux = pAux; - pMod->xDestroy = xDestroy; - pDel = (Module *)sqlite3HashInsert(&db->aModule, zCopy, nName, (void*)pMod); - if( pDel && pDel->xDestroy ){ - pDel->xDestroy(pDel->pAux); - } - sqlite3DbFree(db, pDel); - if( pDel==pMod ){ - db->mallocFailed = 1; + /* Generate code that executes if the new index entry is not unique */ + assert( onError==OE_Rollback || onError==OE_Abort || onError==OE_Fail + || onError==OE_Ignore || onError==OE_Replace ); + switch( onError ){ + case OE_Rollback: + case OE_Abort: + case OE_Fail: { + int j; + StrAccum errMsg; + const char *zSep; + char *zErr; + + sqlite3StrAccumInit(&errMsg, 0, 0, 200); + errMsg.db = db; + zSep = pIdx->nColumn>1 ? "columns " : "column "; + for(j=0; jnColumn; j++){ + char *zCol = pTab->aCol[pIdx->aiColumn[j]].zName; + sqlite3StrAccumAppend(&errMsg, zSep, -1); + zSep = ", "; + sqlite3StrAccumAppend(&errMsg, zCol, -1); + } + sqlite3StrAccumAppend(&errMsg, + pIdx->nColumn>1 ? " are not unique" : " is not unique", -1); + zErr = sqlite3StrAccumFinish(&errMsg); + sqlite3HaltConstraint(pParse, onError, zErr, 0); + sqlite3DbFree(errMsg.db, zErr); + break; + } + case OE_Ignore: { + assert( seenReplace==0 ); + sqlite3VdbeAddOp2(v, OP_Goto, 0, ignoreDest); + break; + } + default: { + Trigger *pTrigger = 0; + assert( onError==OE_Replace ); + sqlite3MultiWrite(pParse); + if( db->flags&SQLITE_RecTriggers ){ + pTrigger = sqlite3TriggersExist(pParse, pTab, TK_DELETE, 0, 0); + } + sqlite3GenerateRowDelete( + pParse, pTab, baseCur, regR, 0, pTrigger, OE_Replace + ); + seenReplace = 1; + break; + } } - sqlite3ResetInternalSchema(db, 0); - }else if( xDestroy ){ - xDestroy(pAux); + sqlite3VdbeJumpHere(v, j3); + sqlite3ReleaseTempReg(pParse, regR); + } + + if( pbMayReplace ){ + *pbMayReplace = seenReplace; } - rc = sqlite3ApiExit(db, SQLITE_OK); - sqlite3_mutex_leave(db->mutex); - return rc; } - /* -** External API function used to create a new virtual-table module. +** This routine generates code to finish the INSERT or UPDATE operation +** that was started by a prior call to sqlite3GenerateConstraintChecks. +** A consecutive range of registers starting at regRowid contains the +** rowid and the content to be inserted. +** +** The arguments to this routine should be the same as the first six +** arguments to sqlite3GenerateConstraintChecks. */ -SQLITE_API int sqlite3_create_module( - sqlite3 *db, /* Database in which module is registered */ - const char *zName, /* Name assigned to this module */ - const sqlite3_module *pModule, /* The definition of the module */ - void *pAux /* Context pointer for xCreate/xConnect */ +SQLITE_PRIVATE void sqlite3CompleteInsertion( + Parse *pParse, /* The parser context */ + Table *pTab, /* the table into which we are inserting */ + int baseCur, /* Index of a read/write cursor pointing at pTab */ + int regRowid, /* Range of content */ + int *aRegIdx, /* Register used by each index. 0 for unused indices */ + int isUpdate, /* True for UPDATE, False for INSERT */ + int appendBias, /* True if this is likely to be an append */ + int useSeekResult /* True to set the USESEEKRESULT flag on OP_[Idx]Insert */ ){ - return createModule(db, zName, pModule, pAux, 0); -} + int i; + Vdbe *v; + int nIdx; + Index *pIdx; + u8 pik_flags; + int regData; + int regRec; -/* -** External API function used to create a new virtual-table module. -*/ -SQLITE_API int sqlite3_create_module_v2( - sqlite3 *db, /* Database in which module is registered */ - const char *zName, /* Name assigned to this module */ - const sqlite3_module *pModule, /* The definition of the module */ - void *pAux, /* Context pointer for xCreate/xConnect */ - void (*xDestroy)(void *) /* Module destructor function */ -){ - return createModule(db, zName, pModule, pAux, xDestroy); + v = sqlite3GetVdbe(pParse); + assert( v!=0 ); + assert( pTab->pSelect==0 ); /* This table is not a VIEW */ + for(nIdx=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, nIdx++){} + for(i=nIdx-1; i>=0; i--){ + if( aRegIdx[i]==0 ) continue; + sqlite3VdbeAddOp2(v, OP_IdxInsert, baseCur+i+1, aRegIdx[i]); + if( useSeekResult ){ + sqlite3VdbeChangeP5(v, OPFLAG_USESEEKRESULT); + } + } + regData = regRowid + 1; + regRec = sqlite3GetTempReg(pParse); + sqlite3VdbeAddOp3(v, OP_MakeRecord, regData, pTab->nCol, regRec); + sqlite3TableAffinityStr(v, pTab); + sqlite3ExprCacheAffinityChange(pParse, regData, pTab->nCol); + if( pParse->nested ){ + pik_flags = 0; + }else{ + pik_flags = OPFLAG_NCHANGE; + pik_flags |= (isUpdate?OPFLAG_ISUPDATE:OPFLAG_LASTROWID); + } + if( appendBias ){ + pik_flags |= OPFLAG_APPEND; + } + if( useSeekResult ){ + pik_flags |= OPFLAG_USESEEKRESULT; + } + sqlite3VdbeAddOp3(v, OP_Insert, baseCur, regRec, regRowid); + if( !pParse->nested ){ + sqlite3VdbeChangeP4(v, -1, pTab->zName, P4_TRANSIENT); + } + sqlite3VdbeChangeP5(v, pik_flags); } /* -** Lock the virtual table so that it cannot be disconnected. -** Locks nest. Every lock should have a corresponding unlock. -** If an unlock is omitted, resources leaks will occur. +** Generate code that will open cursors for a table and for all +** indices of that table. The "baseCur" parameter is the cursor number used +** for the table. Indices are opened on subsequent cursors. ** -** If a disconnect is attempted while a virtual table is locked, -** the disconnect is deferred until all locks have been removed. +** Return the number of indices on the table. */ -SQLITE_PRIVATE void sqlite3VtabLock(sqlite3_vtab *pVtab){ - pVtab->nRef++; +SQLITE_PRIVATE int sqlite3OpenTableAndIndices( + Parse *pParse, /* Parsing context */ + Table *pTab, /* Table to be opened */ + int baseCur, /* Cursor number assigned to the table */ + int op /* OP_OpenRead or OP_OpenWrite */ +){ + int i; + int iDb; + Index *pIdx; + Vdbe *v; + + if( IsVirtual(pTab) ) return 0; + iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema); + v = sqlite3GetVdbe(pParse); + assert( v!=0 ); + sqlite3OpenTable(pParse, baseCur, iDb, pTab, op); + for(i=1, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, i++){ + KeyInfo *pKey = sqlite3IndexKeyinfo(pParse, pIdx); + assert( pIdx->pSchema==pTab->pSchema ); + sqlite3VdbeAddOp4(v, op, i+baseCur, pIdx->tnum, iDb, + (char*)pKey, P4_KEYINFO_HANDOFF); + VdbeComment((v, "%s", pIdx->zName)); + } + if( pParse->nTabnTab = baseCur+i; + } + return i-1; } + +#ifdef SQLITE_TEST /* -** Unlock a virtual table. When the last lock is removed, -** disconnect the virtual table. +** The following global variable is incremented whenever the +** transfer optimization is used. This is used for testing +** purposes only - to make sure the transfer optimization really +** is happening when it is suppose to. */ -SQLITE_PRIVATE void sqlite3VtabUnlock(sqlite3 *db, sqlite3_vtab *pVtab){ -#ifndef SQLITE_DEBUG - UNUSED_PARAMETER(db); -#endif - assert( pVtab->nRef>0 ); - pVtab->nRef--; - assert(db); - assert( sqlite3SafetyCheckOk(db) ); - if( pVtab->nRef==0 ){ -#ifdef SQLITE_DEBUG - if( db->magic==SQLITE_MAGIC_BUSY ){ - (void)sqlite3SafetyOff(db); - pVtab->pModule->xDisconnect(pVtab); - (void)sqlite3SafetyOn(db); - } else -#endif - { - pVtab->pModule->xDisconnect(pVtab); - } - } -} +SQLITE_API int sqlite3_xferopt_count; +#endif /* SQLITE_TEST */ + +#ifndef SQLITE_OMIT_XFER_OPT /* -** Clear any and all virtual-table information from the Table record. -** This routine is called, for example, just before deleting the Table -** record. +** Check to collation names to see if they are compatible. */ -SQLITE_PRIVATE void sqlite3VtabClear(Table *p){ - sqlite3_vtab *pVtab = p->pVtab; - Schema *pSchema = p->pSchema; - sqlite3 *db = pSchema ? pSchema->db : 0; - if( pVtab ){ - assert( p->pMod && p->pMod->pModule ); - sqlite3VtabUnlock(db, pVtab); - p->pVtab = 0; +static int xferCompatibleCollation(const char *z1, const char *z2){ + if( z1==0 ){ + return z2==0; } - if( p->azModuleArg ){ - int i; - for(i=0; inModuleArg; i++){ - sqlite3DbFree(db, p->azModuleArg[i]); - } - sqlite3DbFree(db, p->azModuleArg); + if( z2==0 ){ + return 0; } + return sqlite3StrICmp(z1, z2)==0; } + /* -** Add a new module argument to pTable->azModuleArg[]. -** The string is not copied - the pointer is stored. The -** string will be freed automatically when the table is -** deleted. +** Check to see if index pSrc is compatible as a source of data +** for index pDest in an insert transfer optimization. The rules +** for a compatible index: +** +** * The index is over the same set of columns +** * The same DESC and ASC markings occurs on all columns +** * The same onError processing (OE_Abort, OE_Ignore, etc) +** * The same collating sequence on each column */ -static void addModuleArgument(sqlite3 *db, Table *pTable, char *zArg){ - int i = pTable->nModuleArg++; - int nBytes = sizeof(char *)*(1+pTable->nModuleArg); - char **azModuleArg; - azModuleArg = sqlite3DbRealloc(db, pTable->azModuleArg, nBytes); - if( azModuleArg==0 ){ - int j; - for(j=0; jazModuleArg[j]); +static int xferCompatibleIndex(Index *pDest, Index *pSrc){ + int i; + assert( pDest && pSrc ); + assert( pDest->pTable!=pSrc->pTable ); + if( pDest->nColumn!=pSrc->nColumn ){ + return 0; /* Different number of columns */ + } + if( pDest->onError!=pSrc->onError ){ + return 0; /* Different conflict resolution strategies */ + } + for(i=0; inColumn; i++){ + if( pSrc->aiColumn[i]!=pDest->aiColumn[i] ){ + return 0; /* Different columns indexed */ + } + if( pSrc->aSortOrder[i]!=pDest->aSortOrder[i] ){ + return 0; /* Different sort orders */ + } + if( !xferCompatibleCollation(pSrc->azColl[i],pDest->azColl[i]) ){ + return 0; /* Different collating sequences */ } - sqlite3DbFree(db, zArg); - sqlite3DbFree(db, pTable->azModuleArg); - pTable->nModuleArg = 0; - }else{ - azModuleArg[i] = zArg; - azModuleArg[i+1] = 0; } - pTable->azModuleArg = azModuleArg; + + /* If no test above fails then the indices must be compatible */ + return 1; } /* -** The parser calls this routine when it first sees a CREATE VIRTUAL TABLE -** statement. The module name has been parsed, but the optional list -** of parameters that follow the module name are still pending. +** Attempt the transfer optimization on INSERTs of the form +** +** INSERT INTO tab1 SELECT * FROM tab2; +** +** The xfer optimization transfers raw records from tab2 over to tab1. +** Columns are not decoded and reassemblied, which greatly improves +** performance. Raw index records are transferred in the same way. +** +** The xfer optimization is only attempted if tab1 and tab2 are compatible. +** There are lots of rules for determining compatibility - see comments +** embedded in the code for details. +** +** This routine returns TRUE if the optimization is guaranteed to be used. +** Sometimes the xfer optimization will only work if the destination table +** is empty - a factor that can only be determined at run-time. In that +** case, this routine generates code for the xfer optimization but also +** does a test to see if the destination table is empty and jumps over the +** xfer optimization code if the test fails. In that case, this routine +** returns FALSE so that the caller will know to go ahead and generate +** an unoptimized transfer. This routine also returns FALSE if there +** is no chance that the xfer optimization can be applied. +** +** This optimization is particularly useful at making VACUUM run faster. */ -SQLITE_PRIVATE void sqlite3VtabBeginParse( - Parse *pParse, /* Parsing context */ - Token *pName1, /* Name of new table, or database name */ - Token *pName2, /* Name of new table or NULL */ - Token *pModuleName /* Name of the module for the virtual table */ +static int xferOptimization( + Parse *pParse, /* Parser context */ + Table *pDest, /* The table we are inserting into */ + Select *pSelect, /* A SELECT statement to use as the data source */ + int onError, /* How to handle constraint errors */ + int iDbDest /* The database of pDest */ ){ - int iDb; /* The database the table is being created in */ - Table *pTable; /* The new virtual table */ - sqlite3 *db; /* Database connection */ + ExprList *pEList; /* The result set of the SELECT */ + Table *pSrc; /* The table in the FROM clause of SELECT */ + Index *pSrcIdx, *pDestIdx; /* Source and destination indices */ + struct SrcList_item *pItem; /* An element of pSelect->pSrc */ + int i; /* Loop counter */ + int iDbSrc; /* The database of pSrc */ + int iSrc, iDest; /* Cursors from source and destination */ + int addr1, addr2; /* Loop addresses */ + int emptyDestTest; /* Address of test for empty pDest */ + int emptySrcTest; /* Address of test for empty pSrc */ + Vdbe *v; /* The VDBE we are building */ + KeyInfo *pKey; /* Key information for an index */ + int regAutoinc; /* Memory register used by AUTOINC */ + int destHasUniqueIdx = 0; /* True if pDest has a UNIQUE index */ + int regData, regRowid; /* Registers holding data and rowid */ - if( pParse->db->flags & SQLITE_SharedCache ){ - sqlite3ErrorMsg(pParse, "Cannot use virtual tables in shared-cache mode"); - return; + if( pSelect==0 ){ + return 0; /* Must be of the form INSERT INTO ... SELECT ... */ } - - sqlite3StartTable(pParse, pName1, pName2, 0, 0, 1, 0); - pTable = pParse->pNewTable; - if( pTable==0 ) return; - assert( 0==pTable->pIndex ); - - db = pParse->db; - iDb = sqlite3SchemaToIndex(db, pTable->pSchema); - assert( iDb>=0 ); - - pTable->tabFlags |= TF_Virtual; - pTable->nModuleArg = 0; - addModuleArgument(db, pTable, sqlite3NameFromToken(db, pModuleName)); - addModuleArgument(db, pTable, sqlite3DbStrDup(db, db->aDb[iDb].zName)); - addModuleArgument(db, pTable, sqlite3DbStrDup(db, pTable->zName)); - pParse->sNameToken.n = (int)(&pModuleName->z[pModuleName->n] - pName1->z); - -#ifndef SQLITE_OMIT_AUTHORIZATION - /* Creating a virtual table invokes the authorization callback twice. - ** The first invocation, to obtain permission to INSERT a row into the - ** sqlite_master table, has already been made by sqlite3StartTable(). - ** The second call, to obtain permission to create the table, is made now. - */ - if( pTable->azModuleArg ){ - sqlite3AuthCheck(pParse, SQLITE_CREATE_VTABLE, pTable->zName, - pTable->azModuleArg[0], pParse->db->aDb[iDb].zName); + if( sqlite3TriggerList(pParse, pDest) ){ + return 0; /* tab1 must not have triggers */ + } +#ifndef SQLITE_OMIT_VIRTUALTABLE + if( pDest->tabFlags & TF_Virtual ){ + return 0; /* tab1 must not be a virtual table */ } #endif -} - -/* -** This routine takes the module argument that has been accumulating -** in pParse->zArg[] and appends it to the list of arguments on the -** virtual table currently under construction in pParse->pTable. -*/ -static void addArgumentToVtab(Parse *pParse){ - if( pParse->sArg.z && ALWAYS(pParse->pNewTable) ){ - const char *z = (const char*)pParse->sArg.z; - int n = pParse->sArg.n; - sqlite3 *db = pParse->db; - addModuleArgument(db, pParse->pNewTable, sqlite3DbStrNDup(db, z, n)); + if( onError==OE_Default ){ + if( pDest->iPKey>=0 ) onError = pDest->keyConf; + if( onError==OE_Default ) onError = OE_Abort; + } + assert(pSelect->pSrc); /* allocated even if there is no FROM clause */ + if( pSelect->pSrc->nSrc!=1 ){ + return 0; /* FROM clause must have exactly one term */ + } + if( pSelect->pSrc->a[0].pSelect ){ + return 0; /* FROM clause cannot contain a subquery */ + } + if( pSelect->pWhere ){ + return 0; /* SELECT may not have a WHERE clause */ + } + if( pSelect->pOrderBy ){ + return 0; /* SELECT may not have an ORDER BY clause */ + } + /* Do not need to test for a HAVING clause. If HAVING is present but + ** there is no ORDER BY, we will get an error. */ + if( pSelect->pGroupBy ){ + return 0; /* SELECT may not have a GROUP BY clause */ + } + if( pSelect->pLimit ){ + return 0; /* SELECT may not have a LIMIT clause */ + } + assert( pSelect->pOffset==0 ); /* Must be so if pLimit==0 */ + if( pSelect->pPrior ){ + return 0; /* SELECT may not be a compound query */ + } + if( pSelect->selFlags & SF_Distinct ){ + return 0; /* SELECT may not be DISTINCT */ + } + pEList = pSelect->pEList; + assert( pEList!=0 ); + if( pEList->nExpr!=1 ){ + return 0; /* The result set must have exactly one column */ + } + assert( pEList->a[0].pExpr ); + if( pEList->a[0].pExpr->op!=TK_ALL ){ + return 0; /* The result set must be the special operator "*" */ } -} - -/* -** The parser calls this routine after the CREATE VIRTUAL TABLE statement -** has been completely parsed. -*/ -SQLITE_PRIVATE void sqlite3VtabFinishParse(Parse *pParse, Token *pEnd){ - Table *pTab; /* The table being constructed */ - sqlite3 *db; /* The database connection */ - char *zModule; /* The module name of the table: USING modulename */ - Module *pMod = 0; - - addArgumentToVtab(pParse); - pParse->sArg.z = 0; - /* Lookup the module name. */ - pTab = pParse->pNewTable; - if( pTab==0 ) return; - db = pParse->db; - if( pTab->nModuleArg<1 ) return; - zModule = pTab->azModuleArg[0]; - pMod = (Module*)sqlite3HashFind(&db->aModule, zModule, - sqlite3Strlen30(zModule)); - pTab->pMod = pMod; - - /* If the CREATE VIRTUAL TABLE statement is being entered for the - ** first time (in other words if the virtual table is actually being - ** created now instead of just being read out of sqlite_master) then - ** do additional initialization work and store the statement text - ** in the sqlite_master table. + /* At this point we have established that the statement is of the + ** correct syntactic form to participate in this optimization. Now + ** we have to check the semantics. */ - if( !db->init.busy ){ - char *zStmt; - char *zWhere; - int iDb; - Vdbe *v; - - /* Compute the complete text of the CREATE VIRTUAL TABLE statement */ - if( pEnd ){ - pParse->sNameToken.n = (int)(pEnd->z - pParse->sNameToken.z) + pEnd->n; + pItem = pSelect->pSrc->a; + pSrc = sqlite3LocateTable(pParse, 0, pItem->zName, pItem->zDatabase); + if( pSrc==0 ){ + return 0; /* FROM clause does not contain a real table */ + } + if( pSrc==pDest ){ + return 0; /* tab1 and tab2 may not be the same table */ + } +#ifndef SQLITE_OMIT_VIRTUALTABLE + if( pSrc->tabFlags & TF_Virtual ){ + return 0; /* tab2 must not be a virtual table */ + } +#endif + if( pSrc->pSelect ){ + return 0; /* tab2 may not be a view */ + } + if( pDest->nCol!=pSrc->nCol ){ + return 0; /* Number of columns must be the same in tab1 and tab2 */ + } + if( pDest->iPKey!=pSrc->iPKey ){ + return 0; /* Both tables must have the same INTEGER PRIMARY KEY */ + } + for(i=0; inCol; i++){ + if( pDest->aCol[i].affinity!=pSrc->aCol[i].affinity ){ + return 0; /* Affinity must be the same on all columns */ } - zStmt = sqlite3MPrintf(db, "CREATE VIRTUAL TABLE %T", &pParse->sNameToken); + if( !xferCompatibleCollation(pDest->aCol[i].zColl, pSrc->aCol[i].zColl) ){ + return 0; /* Collating sequence must be the same on all columns */ + } + if( pDest->aCol[i].notNull && !pSrc->aCol[i].notNull ){ + return 0; /* tab2 must be NOT NULL if tab1 is */ + } + } + for(pDestIdx=pDest->pIndex; pDestIdx; pDestIdx=pDestIdx->pNext){ + if( pDestIdx->onError!=OE_None ){ + destHasUniqueIdx = 1; + } + for(pSrcIdx=pSrc->pIndex; pSrcIdx; pSrcIdx=pSrcIdx->pNext){ + if( xferCompatibleIndex(pDestIdx, pSrcIdx) ) break; + } + if( pSrcIdx==0 ){ + return 0; /* pDestIdx has no corresponding index in pSrc */ + } + } +#ifndef SQLITE_OMIT_CHECK + if( pDest->pCheck && sqlite3ExprListCompare(pSrc->pCheck, pDest->pCheck) ){ + return 0; /* Tables have different CHECK constraints. Ticket #2252 */ + } +#endif +#ifndef SQLITE_OMIT_FOREIGN_KEY + /* Disallow the transfer optimization if the destination table constains + ** any foreign key constraints. This is more restrictive than necessary. + ** But the main beneficiary of the transfer optimization is the VACUUM + ** command, and the VACUUM command disables foreign key constraints. So + ** the extra complication to make this rule less restrictive is probably + ** not worth the effort. Ticket [6284df89debdfa61db8073e062908af0c9b6118e] + */ + if( (pParse->db->flags & SQLITE_ForeignKeys)!=0 && pDest->pFKey!=0 ){ + return 0; + } +#endif + if( (pParse->db->flags & SQLITE_CountRows)!=0 ){ + return 0; /* xfer opt does not play well with PRAGMA count_changes */ + } - /* A slot for the record has already been allocated in the - ** SQLITE_MASTER table. We just need to update that slot with all - ** the information we've collected. + /* If we get this far, it means that the xfer optimization is at + ** least a possibility, though it might only work if the destination + ** table (tab1) is initially empty. + */ +#ifdef SQLITE_TEST + sqlite3_xferopt_count++; +#endif + iDbSrc = sqlite3SchemaToIndex(pParse->db, pSrc->pSchema); + v = sqlite3GetVdbe(pParse); + sqlite3CodeVerifySchema(pParse, iDbSrc); + iSrc = pParse->nTab++; + iDest = pParse->nTab++; + regAutoinc = autoIncBegin(pParse, iDbDest, pDest); + sqlite3OpenTable(pParse, iDest, iDbDest, pDest, OP_OpenWrite); + if( (pDest->iPKey<0 && pDest->pIndex!=0) /* (1) */ + || destHasUniqueIdx /* (2) */ + || (onError!=OE_Abort && onError!=OE_Rollback) /* (3) */ + ){ + /* In some circumstances, we are able to run the xfer optimization + ** only if the destination table is initially empty. This code makes + ** that determination. Conditions under which the destination must + ** be empty: ** - ** The VM register number pParse->regRowid holds the rowid of an - ** entry in the sqlite_master table tht was created for this vtab - ** by sqlite3StartTable(). + ** (1) There is no INTEGER PRIMARY KEY but there are indices. + ** (If the destination is not initially empty, the rowid fields + ** of index entries might need to change.) + ** + ** (2) The destination has a unique index. (The xfer optimization + ** is unable to test uniqueness.) + ** + ** (3) onError is something other than OE_Abort and OE_Rollback. */ - iDb = sqlite3SchemaToIndex(db, pTab->pSchema); - sqlite3NestedParse(pParse, - "UPDATE %Q.%s " - "SET type='table', name=%Q, tbl_name=%Q, rootpage=0, sql=%Q " - "WHERE rowid=#%d", - db->aDb[iDb].zName, SCHEMA_TABLE(iDb), - pTab->zName, - pTab->zName, - zStmt, - pParse->regRowid - ); - sqlite3DbFree(db, zStmt); - v = sqlite3GetVdbe(pParse); - sqlite3ChangeCookie(pParse, iDb); - - sqlite3VdbeAddOp2(v, OP_Expire, 0, 0); - zWhere = sqlite3MPrintf(db, "name='%q'", pTab->zName); - sqlite3VdbeAddOp4(v, OP_ParseSchema, iDb, 1, 0, zWhere, P4_DYNAMIC); - sqlite3VdbeAddOp4(v, OP_VCreate, iDb, 0, 0, - pTab->zName, sqlite3Strlen30(pTab->zName) + 1); + addr1 = sqlite3VdbeAddOp2(v, OP_Rewind, iDest, 0); + emptyDestTest = sqlite3VdbeAddOp2(v, OP_Goto, 0, 0); + sqlite3VdbeJumpHere(v, addr1); + }else{ + emptyDestTest = 0; } - - /* If we are rereading the sqlite_master table create the in-memory - ** record of the table. If the module has already been registered, - ** also call the xConnect method here. - */ - else { - Table *pOld; - Schema *pSchema = pTab->pSchema; - const char *zName = pTab->zName; - int nName = sqlite3Strlen30(zName); - pOld = sqlite3HashInsert(&pSchema->tblHash, zName, nName, pTab); - if( pOld ){ - db->mallocFailed = 1; - assert( pTab==pOld ); /* Malloc must have failed inside HashInsert() */ - return; + sqlite3OpenTable(pParse, iSrc, iDbSrc, pSrc, OP_OpenRead); + emptySrcTest = sqlite3VdbeAddOp2(v, OP_Rewind, iSrc, 0); + regData = sqlite3GetTempReg(pParse); + regRowid = sqlite3GetTempReg(pParse); + if( pDest->iPKey>=0 ){ + addr1 = sqlite3VdbeAddOp2(v, OP_Rowid, iSrc, regRowid); + addr2 = sqlite3VdbeAddOp3(v, OP_NotExists, iDest, 0, regRowid); + sqlite3HaltConstraint( + pParse, onError, "PRIMARY KEY must be unique", P4_STATIC); + sqlite3VdbeJumpHere(v, addr2); + autoIncStep(pParse, regAutoinc, regRowid); + }else if( pDest->pIndex==0 ){ + addr1 = sqlite3VdbeAddOp2(v, OP_NewRowid, iDest, regRowid); + }else{ + addr1 = sqlite3VdbeAddOp2(v, OP_Rowid, iSrc, regRowid); + assert( (pDest->tabFlags & TF_Autoincrement)==0 ); + } + sqlite3VdbeAddOp2(v, OP_RowData, iSrc, regData); + sqlite3VdbeAddOp3(v, OP_Insert, iDest, regData, regRowid); + sqlite3VdbeChangeP5(v, OPFLAG_NCHANGE|OPFLAG_LASTROWID|OPFLAG_APPEND); + sqlite3VdbeChangeP4(v, -1, pDest->zName, 0); + sqlite3VdbeAddOp2(v, OP_Next, iSrc, addr1); + for(pDestIdx=pDest->pIndex; pDestIdx; pDestIdx=pDestIdx->pNext){ + for(pSrcIdx=pSrc->pIndex; ALWAYS(pSrcIdx); pSrcIdx=pSrcIdx->pNext){ + if( xferCompatibleIndex(pDestIdx, pSrcIdx) ) break; } - pSchema->db = pParse->db; - pParse->pNewTable = 0; + assert( pSrcIdx ); + sqlite3VdbeAddOp2(v, OP_Close, iSrc, 0); + sqlite3VdbeAddOp2(v, OP_Close, iDest, 0); + pKey = sqlite3IndexKeyinfo(pParse, pSrcIdx); + sqlite3VdbeAddOp4(v, OP_OpenRead, iSrc, pSrcIdx->tnum, iDbSrc, + (char*)pKey, P4_KEYINFO_HANDOFF); + VdbeComment((v, "%s", pSrcIdx->zName)); + pKey = sqlite3IndexKeyinfo(pParse, pDestIdx); + sqlite3VdbeAddOp4(v, OP_OpenWrite, iDest, pDestIdx->tnum, iDbDest, + (char*)pKey, P4_KEYINFO_HANDOFF); + VdbeComment((v, "%s", pDestIdx->zName)); + addr1 = sqlite3VdbeAddOp2(v, OP_Rewind, iSrc, 0); + sqlite3VdbeAddOp2(v, OP_RowKey, iSrc, regData); + sqlite3VdbeAddOp3(v, OP_IdxInsert, iDest, regData, 1); + sqlite3VdbeAddOp2(v, OP_Next, iSrc, addr1+1); + sqlite3VdbeJumpHere(v, addr1); + } + sqlite3VdbeJumpHere(v, emptySrcTest); + sqlite3ReleaseTempReg(pParse, regRowid); + sqlite3ReleaseTempReg(pParse, regData); + sqlite3VdbeAddOp2(v, OP_Close, iSrc, 0); + sqlite3VdbeAddOp2(v, OP_Close, iDest, 0); + if( emptyDestTest ){ + sqlite3VdbeAddOp2(v, OP_Halt, SQLITE_OK, 0); + sqlite3VdbeJumpHere(v, emptyDestTest); + sqlite3VdbeAddOp2(v, OP_Close, iDest, 0); + return 0; + }else{ + return 1; } } +#endif /* SQLITE_OMIT_XFER_OPT */ +/************** End of insert.c **********************************************/ +/************** Begin file legacy.c ******************************************/ /* -** The parser calls this routine when it sees the first token -** of an argument to the module name in a CREATE VIRTUAL TABLE statement. +** 2001 September 15 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** Main file for the SQLite library. The routines in this file +** implement the programmer interface to the library. Routines in +** other files are for internal use by SQLite and should not be +** accessed by users of the library. */ -SQLITE_PRIVATE void sqlite3VtabArgInit(Parse *pParse){ - addArgumentToVtab(pParse); - pParse->sArg.z = 0; - pParse->sArg.n = 0; -} -/* -** The parser calls this routine for each token after the first token -** in an argument to the module name in a CREATE VIRTUAL TABLE statement. -*/ -SQLITE_PRIVATE void sqlite3VtabArgExtend(Parse *pParse, Token *p){ - Token *pArg = &pParse->sArg; - if( pArg->z==0 ){ - pArg->z = p->z; - pArg->n = p->n; - }else{ - assert(pArg->z < p->z); - pArg->n = (int)(&p->z[p->n] - pArg->z); - } -} /* -** Invoke a virtual table constructor (either xCreate or xConnect). The -** pointer to the function to invoke is passed as the fourth parameter -** to this procedure. +** Execute SQL code. Return one of the SQLITE_ success/failure +** codes. Also write an error message into memory obtained from +** malloc() and make *pzErrMsg point to that message. +** +** If the SQL is a query, then for each row in the query result +** the xCallback() function is called. pArg becomes the first +** argument to xCallback(). If xCallback=NULL then no callback +** is invoked, even for queries. */ -static int vtabCallConstructor( - sqlite3 *db, - Table *pTab, - Module *pMod, - int (*xConstruct)(sqlite3*,void*,int,const char*const*,sqlite3_vtab**,char**), - char **pzErr +SQLITE_API int sqlite3_exec( + sqlite3 *db, /* The database on which the SQL executes */ + const char *zSql, /* The SQL to be executed */ + sqlite3_callback xCallback, /* Invoke this callback routine */ + void *pArg, /* First argument to xCallback() */ + char **pzErrMsg /* Write error messages here */ ){ - int rc; - int rc2; - sqlite3_vtab *pVtab = 0; - const char *const*azArg = (const char *const*)pTab->azModuleArg; - int nArg = pTab->nModuleArg; - char *zErr = 0; - char *zModuleName = sqlite3MPrintf(db, "%s", pTab->zName); - - if( !zModuleName ){ - return SQLITE_NOMEM; - } + int rc = SQLITE_OK; /* Return code */ + const char *zLeftover; /* Tail of unprocessed SQL */ + sqlite3_stmt *pStmt = 0; /* The current SQL statement */ + char **azCols = 0; /* Names of result columns */ + int nRetry = 0; /* Number of retry attempts */ + int callbackIsInit; /* True if callback data is initialized */ - assert( !db->pVTab ); - assert( xConstruct ); + if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT; + if( zSql==0 ) zSql = ""; - db->pVTab = pTab; - rc = sqlite3SafetyOff(db); - assert( rc==SQLITE_OK ); - rc = xConstruct(db, pMod->pAux, nArg, azArg, &pVtab, &zErr); - rc2 = sqlite3SafetyOn(db); - if( rc==SQLITE_NOMEM ) db->mallocFailed = 1; - /* Justification of ALWAYS(): A correct vtab constructor must allocate - ** the sqlite3_vtab object if successful. */ - if( rc==SQLITE_OK && ALWAYS(pVtab) ){ - pVtab->pModule = pMod->pModule; - pVtab->nRef = 1; - pTab->pVtab = pVtab; - } + sqlite3_mutex_enter(db->mutex); + sqlite3Error(db, SQLITE_OK, 0); + while( (rc==SQLITE_OK || (rc==SQLITE_SCHEMA && (++nRetry)<2)) && zSql[0] ){ + int nCol; + char **azVals = 0; - if( SQLITE_OK!=rc ){ - if( zErr==0 ){ - *pzErr = sqlite3MPrintf(db, "vtable constructor failed: %s", zModuleName); - }else { - *pzErr = sqlite3MPrintf(db, "%s", zErr); - sqlite3DbFree(db, zErr); + pStmt = 0; + rc = sqlite3_prepare(db, zSql, -1, &pStmt, &zLeftover); + assert( rc==SQLITE_OK || pStmt==0 ); + if( rc!=SQLITE_OK ){ + continue; + } + if( !pStmt ){ + /* this happens for a comment or white-space */ + zSql = zLeftover; + continue; } - }else if( db->pVTab ){ - const char *zFormat = "vtable constructor did not declare schema: %s"; - *pzErr = sqlite3MPrintf(db, zFormat, pTab->zName); - rc = SQLITE_ERROR; - } - if( rc==SQLITE_OK ){ - rc = rc2; - } - db->pVTab = 0; - sqlite3DbFree(db, zModuleName); - /* If everything went according to plan, loop through the columns - ** of the table to see if any of them contain the token "hidden". - ** If so, set the Column.isHidden flag and remove the token from - ** the type string. - */ - if( rc==SQLITE_OK ){ - int iCol; - for(iCol=0; iColnCol; iCol++){ - char *zType = pTab->aCol[iCol].zType; - int nType; - int i = 0; - if( !zType ) continue; - nType = sqlite3Strlen30(zType); - if( sqlite3StrNICmp("hidden", zType, 6) || (zType[6] && zType[6]!=' ') ){ - for(i=0; iflags&SQLITE_NullCallback)) ){ + if( !callbackIsInit ){ + azCols = sqlite3DbMallocZero(db, 2*nCol*sizeof(const char*) + 1); + if( azCols==0 ){ + goto exec_out; + } + for(i=0; imallocFailed = 1; + goto exec_out; + } + } } - if( zType[i]=='\0' && i>0 ){ - assert(zType[i-1]==' '); - zType[i-1] = '\0'; + if( xCallback(pArg, nCol, azVals, azCols) ){ + rc = SQLITE_ABORT; + sqlite3VdbeFinalize((Vdbe *)pStmt); + pStmt = 0; + sqlite3Error(db, SQLITE_ABORT, 0); + goto exec_out; } - pTab->aCol[iCol].isHidden = 1; } - } - } - return rc; -} -/* -** This function is invoked by the parser to call the xConnect() method -** of the virtual table pTab. If an error occurs, an error code is returned -** and an error left in pParse. -** -** This call is a no-op if table pTab is not a virtual table. -*/ -SQLITE_PRIVATE int sqlite3VtabCallConnect(Parse *pParse, Table *pTab){ - Module *pMod; - int rc = SQLITE_OK; - - assert( pTab ); - if( (pTab->tabFlags & TF_Virtual)==0 || pTab->pVtab ){ - return SQLITE_OK; - } - - pMod = pTab->pMod; - if( !pMod ){ - const char *zModule = pTab->azModuleArg[0]; - sqlite3ErrorMsg(pParse, "no such module: %s", zModule); - rc = SQLITE_ERROR; - } else { - char *zErr = 0; - sqlite3 *db = pParse->db; - rc = vtabCallConstructor(db, pTab, pMod, pMod->pModule->xConnect, &zErr); - if( rc!=SQLITE_OK ){ - sqlite3ErrorMsg(pParse, "%s", zErr); - } - sqlite3DbFree(db, zErr); - } - - return rc; -} - -/* -** Add the virtual table pVtab to the array sqlite3.aVTrans[]. -*/ -static int addToVTrans(sqlite3 *db, sqlite3_vtab *pVtab){ - const int ARRAY_INCR = 5; - - /* Grow the sqlite3.aVTrans array if required */ - if( (db->nVTrans%ARRAY_INCR)==0 ){ - sqlite3_vtab **aVTrans; - int nBytes = sizeof(sqlite3_vtab *) * (db->nVTrans + ARRAY_INCR); - aVTrans = sqlite3DbRealloc(db, (void *)db->aVTrans, nBytes); - if( !aVTrans ){ - return SQLITE_NOMEM; - } - memset(&aVTrans[db->nVTrans], 0, sizeof(sqlite3_vtab *)*ARRAY_INCR); - db->aVTrans = aVTrans; - } - - /* Add pVtab to the end of sqlite3.aVTrans */ - db->aVTrans[db->nVTrans++] = pVtab; - sqlite3VtabLock(pVtab); - return SQLITE_OK; -} - -/* -** This function is invoked by the vdbe to call the xCreate method -** of the virtual table named zTab in database iDb. -** -** If an error occurs, *pzErr is set to point an an English language -** description of the error and an SQLITE_XXX error code is returned. -** In this case the caller must call sqlite3DbFree(db, ) on *pzErr. -*/ -SQLITE_PRIVATE int sqlite3VtabCallCreate(sqlite3 *db, int iDb, const char *zTab, char **pzErr){ - int rc = SQLITE_OK; - Table *pTab; - Module *pMod; - const char *zModule; - - pTab = sqlite3FindTable(db, zTab, db->aDb[iDb].zName); - assert(pTab && (pTab->tabFlags & TF_Virtual)!=0 && !pTab->pVtab); - pMod = pTab->pMod; - zModule = pTab->azModuleArg[0]; - - /* If the module has been registered and includes a Create method, - ** invoke it now. If the module has not been registered, return an - ** error. Otherwise, do nothing. - */ - if( !pMod ){ - *pzErr = sqlite3MPrintf(db, "no such module: %s", zModule); - rc = SQLITE_ERROR; - }else{ - rc = vtabCallConstructor(db, pTab, pMod, pMod->pModule->xCreate, pzErr); - } - - /* Justification of ALWAYS(): The xConstructor method is required to - ** create a valid sqlite3_vtab if it returns SQLITE_OK. */ - if( rc==SQLITE_OK && ALWAYS(pTab->pVtab) ){ - rc = addToVTrans(db, pTab->pVtab); - } - - return rc; -} - -/* -** This function is used to set the schema of a virtual table. It is only -** valid to call this function from within the xCreate() or xConnect() of a -** virtual table module. -*/ -SQLITE_API int sqlite3_declare_vtab(sqlite3 *db, const char *zCreateTable){ - Parse *pParse; - - int rc = SQLITE_OK; - Table *pTab; - char *zErr = 0; - - sqlite3_mutex_enter(db->mutex); - pTab = db->pVTab; - if( !pTab ){ - sqlite3Error(db, SQLITE_MISUSE, 0); - sqlite3_mutex_leave(db->mutex); - return SQLITE_MISUSE; - } - assert((pTab->tabFlags & TF_Virtual)!=0 && pTab->nCol==0 && pTab->aCol==0); - - pParse = sqlite3StackAllocZero(db, sizeof(*pParse)); - if( pParse==0 ){ - rc = SQLITE_NOMEM; - }else{ - pParse->declareVtab = 1; - pParse->db = db; - - if( - SQLITE_OK == sqlite3RunParser(pParse, zCreateTable, &zErr) && - pParse->pNewTable && - !pParse->pNewTable->pSelect && - (pParse->pNewTable->tabFlags & TF_Virtual)==0 - ){ - pTab->aCol = pParse->pNewTable->aCol; - pTab->nCol = pParse->pNewTable->nCol; - pParse->pNewTable->nCol = 0; - pParse->pNewTable->aCol = 0; - db->pVTab = 0; - } else { - sqlite3Error(db, SQLITE_ERROR, zErr); - sqlite3DbFree(db, zErr); - rc = SQLITE_ERROR; - } - pParse->declareVtab = 0; - - if( pParse->pVdbe ){ - sqlite3VdbeFinalize(pParse->pVdbe); - } - sqlite3DeleteTable(pParse->pNewTable); - sqlite3StackFree(db, pParse); - } - - assert( (rc&0xff)==rc ); - rc = sqlite3ApiExit(db, rc); - sqlite3_mutex_leave(db->mutex); - return rc; -} - -/* -** This function is invoked by the vdbe to call the xDestroy method -** of the virtual table named zTab in database iDb. This occurs -** when a DROP TABLE is mentioned. -** -** This call is a no-op if zTab is not a virtual table. -*/ -SQLITE_PRIVATE int sqlite3VtabCallDestroy(sqlite3 *db, int iDb, const char *zTab){ - int rc = SQLITE_OK; - Table *pTab; - - pTab = sqlite3FindTable(db, zTab, db->aDb[iDb].zName); - if( ALWAYS(pTab!=0 && pTab->pVtab!=0) ){ - int (*xDestroy)(sqlite3_vtab *pVTab) = pTab->pMod->pModule->xDestroy; - rc = sqlite3SafetyOff(db); - assert( rc==SQLITE_OK ); - rc = xDestroy(pTab->pVtab); - (void)sqlite3SafetyOn(db); - if( rc==SQLITE_OK ){ - int i; - for(i=0; inVTrans; i++){ - if( db->aVTrans[i]==pTab->pVtab ){ - db->aVTrans[i] = db->aVTrans[--db->nVTrans]; - break; + if( rc!=SQLITE_ROW ){ + rc = sqlite3VdbeFinalize((Vdbe *)pStmt); + pStmt = 0; + if( rc!=SQLITE_SCHEMA ){ + nRetry = 0; + zSql = zLeftover; + while( sqlite3Isspace(zSql[0]) ) zSql++; } + break; } - pTab->pVtab = 0; } - } - - return rc; -} - -/* -** This function invokes either the xRollback or xCommit method -** of each of the virtual tables in the sqlite3.aVTrans array. The method -** called is identified by the second argument, "offset", which is -** the offset of the method to call in the sqlite3_module structure. -** -** The array is cleared after invoking the callbacks. -*/ -static void callFinaliser(sqlite3 *db, int offset){ - int i; - if( db->aVTrans ){ - for(i=0; inVTrans; i++){ - sqlite3_vtab *pVtab = db->aVTrans[i]; - int (*x)(sqlite3_vtab *); - assert( pVtab!=0 ); - x = *(int (**)(sqlite3_vtab *))((char *)pVtab->pModule + offset); - if( x ) x(pVtab); - sqlite3VtabUnlock(db, pVtab); - } - sqlite3DbFree(db, db->aVTrans); - db->nVTrans = 0; - db->aVTrans = 0; + sqlite3DbFree(db, azCols); + azCols = 0; } -} -/* -** Invoke the xSync method of all virtual tables in the sqlite3.aVTrans -** array. Return the error code for the first error that occurs, or -** SQLITE_OK if all xSync operations are successful. -** -** Set *pzErrmsg to point to a buffer that should be released using -** sqlite3DbFree() containing an error message, if one is available. -*/ -SQLITE_PRIVATE int sqlite3VtabSync(sqlite3 *db, char **pzErrmsg){ - int i; - int rc = SQLITE_OK; - int rcsafety; - sqlite3_vtab **aVTrans = db->aVTrans; +exec_out: + if( pStmt ) sqlite3VdbeFinalize((Vdbe *)pStmt); + sqlite3DbFree(db, azCols); - rc = sqlite3SafetyOff(db); - db->aVTrans = 0; - for(i=0; rc==SQLITE_OK && inVTrans; i++){ - sqlite3_vtab *pVtab = aVTrans[i]; - int (*x)(sqlite3_vtab *); - assert( pVtab!=0 ); - x = pVtab->pModule->xSync; - if( x ){ - rc = x(pVtab); - sqlite3DbFree(db, *pzErrmsg); - *pzErrmsg = pVtab->zErrMsg; - pVtab->zErrMsg = 0; + rc = sqlite3ApiExit(db, rc); + if( rc!=SQLITE_OK && ALWAYS(rc==sqlite3_errcode(db)) && pzErrMsg ){ + int nErrMsg = 1 + sqlite3Strlen30(sqlite3_errmsg(db)); + *pzErrMsg = sqlite3Malloc(nErrMsg); + if( *pzErrMsg ){ + memcpy(*pzErrMsg, sqlite3_errmsg(db), nErrMsg); + }else{ + rc = SQLITE_NOMEM; + sqlite3Error(db, SQLITE_NOMEM, 0); } + }else if( pzErrMsg ){ + *pzErrMsg = 0; } - db->aVTrans = aVTrans; - rcsafety = sqlite3SafetyOn(db); - - if( rc==SQLITE_OK ){ - rc = rcsafety; - } - return rc; -} - -/* -** Invoke the xRollback method of all virtual tables in the -** sqlite3.aVTrans array. Then clear the array itself. -*/ -SQLITE_PRIVATE int sqlite3VtabRollback(sqlite3 *db){ - callFinaliser(db, offsetof(sqlite3_module,xRollback)); - return SQLITE_OK; -} - -/* -** Invoke the xCommit method of all virtual tables in the -** sqlite3.aVTrans array. Then clear the array itself. -*/ -SQLITE_PRIVATE int sqlite3VtabCommit(sqlite3 *db){ - callFinaliser(db, offsetof(sqlite3_module,xCommit)); - return SQLITE_OK; -} - -/* -** If the virtual table pVtab supports the transaction interface -** (xBegin/xRollback/xCommit and optionally xSync) and a transaction is -** not currently open, invoke the xBegin method now. -** -** If the xBegin call is successful, place the sqlite3_vtab pointer -** in the sqlite3.aVTrans array. -*/ -SQLITE_PRIVATE int sqlite3VtabBegin(sqlite3 *db, sqlite3_vtab *pVtab){ - int rc = SQLITE_OK; - const sqlite3_module *pModule; - - /* Special case: If db->aVTrans is NULL and db->nVTrans is greater - ** than zero, then this function is being called from within a - ** virtual module xSync() callback. It is illegal to write to - ** virtual module tables in this case, so return SQLITE_LOCKED. - */ - if( sqlite3VtabInSync(db) ){ - return SQLITE_LOCKED; - } - if( !pVtab ){ - return SQLITE_OK; - } - pModule = pVtab->pModule; - - if( pModule->xBegin ){ - int i; - - - /* If pVtab is already in the aVTrans array, return early */ - for(i=0; inVTrans; i++){ - if( db->aVTrans[i]==pVtab ){ - return SQLITE_OK; - } - } - /* Invoke the xBegin method */ - rc = pModule->xBegin(pVtab); - if( rc==SQLITE_OK ){ - rc = addToVTrans(db, pVtab); - } - } + assert( (rc&db->errMask)==rc ); + sqlite3_mutex_leave(db->mutex); return rc; } +/************** End of legacy.c **********************************************/ +/************** Begin file loadext.c *****************************************/ /* -** The first parameter (pDef) is a function implementation. The -** second parameter (pExpr) is the first argument to this function. -** If pExpr is a column in a virtual table, then let the virtual -** table implementation have an opportunity to overload the function. -** -** This routine is used to allow virtual table implementations to -** overload MATCH, LIKE, GLOB, and REGEXP operators. -** -** Return either the pDef argument (indicating no change) or a -** new FuncDef structure that is marked as ephemeral using the -** SQLITE_FUNC_EPHEM flag. -*/ -SQLITE_PRIVATE FuncDef *sqlite3VtabOverloadFunction( - sqlite3 *db, /* Database connection for reporting malloc problems */ - FuncDef *pDef, /* Function to possibly overload */ - int nArg, /* Number of arguments to the function */ - Expr *pExpr /* First argument to the function */ -){ - Table *pTab; - sqlite3_vtab *pVtab; - sqlite3_module *pMod; - void (*xFunc)(sqlite3_context*,int,sqlite3_value**) = 0; - void *pArg = 0; - FuncDef *pNew; - int rc = 0; - char *zLowerName; - unsigned char *z; - - - /* Check to see the left operand is a column in a virtual table */ - if( NEVER(pExpr==0) ) return pDef; - if( pExpr->op!=TK_COLUMN ) return pDef; - pTab = pExpr->pTab; - if( NEVER(pTab==0) ) return pDef; - if( (pTab->tabFlags & TF_Virtual)==0 ) return pDef; - pVtab = pTab->pVtab; - assert( pVtab!=0 ); - assert( pVtab->pModule!=0 ); - pMod = (sqlite3_module *)pVtab->pModule; - if( pMod->xFindFunction==0 ) return pDef; - - /* Call the xFindFunction method on the virtual table implementation - ** to see if the implementation wants to overload this function - */ - zLowerName = sqlite3DbStrDup(db, pDef->zName); - if( zLowerName ){ - for(z=(unsigned char*)zLowerName; *z; z++){ - *z = sqlite3UpperToLower[*z]; - } - rc = pMod->xFindFunction(pVtab, nArg, zLowerName, &xFunc, &pArg); - sqlite3DbFree(db, zLowerName); - } - if( rc==0 ){ - return pDef; - } - - /* Create a new ephemeral function definition for the overloaded - ** function */ - pNew = sqlite3DbMallocZero(db, sizeof(*pNew) - + sqlite3Strlen30(pDef->zName) ); - if( pNew==0 ){ - return pDef; - } - *pNew = *pDef; - pNew->zName = (char *)&pNew[1]; - memcpy(pNew->zName, pDef->zName, sqlite3Strlen30(pDef->zName)+1); - pNew->xFunc = xFunc; - pNew->pUserData = pArg; - pNew->flags |= SQLITE_FUNC_EPHEM; - return pNew; -} - -/* -** Make sure virtual table pTab is contained in the pParse->apVirtualLock[] -** array so that an OP_VBegin will get generated for it. Add pTab to the -** array if it is missing. If pTab is already in the array, this routine -** is a no-op. -*/ -SQLITE_PRIVATE void sqlite3VtabMakeWritable(Parse *pParse, Table *pTab){ - int i, n; - Table **apVtabLock; - - assert( IsVirtual(pTab) ); - for(i=0; inVtabLock; i++){ - if( pTab==pParse->apVtabLock[i] ) return; - } - n = (pParse->nVtabLock+1)*sizeof(pParse->apVtabLock[0]); - apVtabLock = sqlite3_realloc(pParse->apVtabLock, n); - if( apVtabLock ){ - pParse->apVtabLock = apVtabLock; - pParse->apVtabLock[pParse->nVtabLock++] = pTab; - }else{ - pParse->db->mallocFailed = 1; - } -} - -#endif /* SQLITE_OMIT_VIRTUALTABLE */ - -/************** End of vtab.c ************************************************/ -/************** Begin file where.c *******************************************/ -/* -** 2001 September 15 +** 2006 June 7 ** ** The author disclaims copyright to this source code. In place of ** a legal notice, here is a blessing: @@ -82535,10373 +92007,31681 @@ SQLITE_PRIVATE void sqlite3VtabMakeWritable(Parse *pParse, Table *pTab){ ** May you share freely, never taking more than you give. ** ************************************************************************* -** This module contains C code that generates VDBE code used to process -** the WHERE clause of SQL statements. This module is responsible for -** generating the code that loops through a table looking for applicable -** rows. Indices are selected and used to speed the search when doing -** so is applicable. Because this module is responsible for selecting -** indices, you might also think of this module as the "query optimizer". -** -** $Id: where.c,v 1.408 2009/06/16 14:15:22 shane Exp $ +** This file contains code used to dynamically load extensions into +** the SQLite library. */ -/* -** Trace output macros -*/ -#if defined(SQLITE_TEST) || defined(SQLITE_DEBUG) -SQLITE_PRIVATE int sqlite3WhereTrace = 0; -#endif -#if defined(SQLITE_TEST) && defined(SQLITE_DEBUG) -# define WHERETRACE(X) if(sqlite3WhereTrace) sqlite3DebugPrintf X -#else -# define WHERETRACE(X) +#ifndef SQLITE_CORE + #define SQLITE_CORE 1 /* Disable the API redefinition in sqlite3ext.h */ #endif - -/* Forward reference -*/ -typedef struct WhereClause WhereClause; -typedef struct WhereMaskSet WhereMaskSet; -typedef struct WhereOrInfo WhereOrInfo; -typedef struct WhereAndInfo WhereAndInfo; -typedef struct WhereCost WhereCost; - +/************** Include sqlite3ext.h in the middle of loadext.c **************/ +/************** Begin file sqlite3ext.h **************************************/ /* -** The query generator uses an array of instances of this structure to -** help it analyze the subexpressions of the WHERE clause. Each WHERE -** clause subexpression is separated from the others by AND operators, -** usually, or sometimes subexpressions separated by OR. -** -** All WhereTerms are collected into a single WhereClause structure. -** The following identity holds: -** -** WhereTerm.pWC->a[WhereTerm.idx] == WhereTerm -** -** When a term is of the form: -** -** X -** -** where X is a column name and is one of certain operators, -** then WhereTerm.leftCursor and WhereTerm.u.leftColumn record the -** cursor number and column number for X. WhereTerm.eOperator records -** the using a bitmask encoding defined by WO_xxx below. The -** use of a bitmask encoding for the operator allows us to search -** quickly for terms that match any of several different operators. -** -** A WhereTerm might also be two or more subterms connected by OR: -** -** (t1.X ) OR (t1.Y ) OR .... -** -** In this second case, wtFlag as the TERM_ORINFO set and eOperator==WO_OR -** and the WhereTerm.u.pOrInfo field points to auxiliary information that -** is collected about the +** 2006 June 7 ** -** If a term in the WHERE clause does not match either of the two previous -** categories, then eOperator==0. The WhereTerm.pExpr field is still set -** to the original subexpression content and wtFlags is set up appropriately -** but no other fields in the WhereTerm object are meaningful. +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: ** -** When eOperator!=0, prereqRight and prereqAll record sets of cursor numbers, -** but they do so indirectly. A single WhereMaskSet structure translates -** cursor number into bits and the translated bit is stored in the prereq -** fields. The translation is used in order to maximize the number of -** bits that will fit in a Bitmask. The VDBE cursor numbers might be -** spread out over the non-negative integers. For example, the cursor -** numbers might be 3, 8, 9, 10, 20, 23, 41, and 45. The WhereMaskSet -** translates these sparse cursor numbers into consecutive integers -** beginning with 0 in order to make the best possible use of the available -** bits in the Bitmask. So, in the example above, the cursor numbers -** would be mapped into integers 0 through 7. +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. ** -** The number of terms in a join is limited by the number of bits -** in prereqRight and prereqAll. The default is 64 bits, hence SQLite -** is only able to process joins with 64 or fewer tables. -*/ -typedef struct WhereTerm WhereTerm; -struct WhereTerm { - Expr *pExpr; /* Pointer to the subexpression that is this term */ - int iParent; /* Disable pWC->a[iParent] when this term disabled */ - int leftCursor; /* Cursor number of X in "X " */ - union { - int leftColumn; /* Column number of X in "X " */ - WhereOrInfo *pOrInfo; /* Extra information if eOperator==WO_OR */ - WhereAndInfo *pAndInfo; /* Extra information if eOperator==WO_AND */ - } u; - u16 eOperator; /* A WO_xx value describing */ - u8 wtFlags; /* TERM_xxx bit flags. See below */ - u8 nChild; /* Number of children that must disable us */ - WhereClause *pWC; /* The clause this term is part of */ - Bitmask prereqRight; /* Bitmask of tables used by pExpr->pRight */ - Bitmask prereqAll; /* Bitmask of tables referenced by pExpr */ -}; - -/* -** Allowed values of WhereTerm.wtFlags +************************************************************************* +** This header file defines the SQLite interface for use by +** shared libraries that want to be imported as extensions into +** an SQLite instance. Shared libraries that intend to be loaded +** as extensions by SQLite should #include this file instead of +** sqlite3.h. */ -#define TERM_DYNAMIC 0x01 /* Need to call sqlite3ExprDelete(db, pExpr) */ -#define TERM_VIRTUAL 0x02 /* Added by the optimizer. Do not code */ -#define TERM_CODED 0x04 /* This term is already coded */ -#define TERM_COPIED 0x08 /* Has a child */ -#define TERM_ORINFO 0x10 /* Need to free the WhereTerm.u.pOrInfo object */ -#define TERM_ANDINFO 0x20 /* Need to free the WhereTerm.u.pAndInfo obj */ -#define TERM_OR_OK 0x40 /* Used during OR-clause processing */ +#ifndef _SQLITE3EXT_H_ +#define _SQLITE3EXT_H_ -/* -** An instance of the following structure holds all information about a -** WHERE clause. Mostly this is a container for one or more WhereTerms. -*/ -struct WhereClause { - Parse *pParse; /* The parser context */ - WhereMaskSet *pMaskSet; /* Mapping of table cursor numbers to bitmasks */ - Bitmask vmask; /* Bitmask identifying virtual table cursors */ - u8 op; /* Split operator. TK_AND or TK_OR */ - int nTerm; /* Number of terms */ - int nSlot; /* Number of entries in a[] */ - WhereTerm *a; /* Each a[] describes a term of the WHERE cluase */ -#if defined(SQLITE_SMALL_STACK) - WhereTerm aStatic[1]; /* Initial static space for a[] */ -#else - WhereTerm aStatic[8]; /* Initial static space for a[] */ -#endif -}; +typedef struct sqlite3_api_routines sqlite3_api_routines; /* -** A WhereTerm with eOperator==WO_OR has its u.pOrInfo pointer set to -** a dynamically allocated instance of the following structure. +** The following structure holds pointers to all of the SQLite API +** routines. +** +** WARNING: In order to maintain backwards compatibility, add new +** interfaces to the end of this structure only. If you insert new +** interfaces in the middle of this structure, then older different +** versions of SQLite will not be able to load each others' shared +** libraries! */ -struct WhereOrInfo { - WhereClause wc; /* Decomposition into subterms */ - Bitmask indexable; /* Bitmask of all indexable tables in the clause */ -}; - -/* -** A WhereTerm with eOperator==WO_AND has its u.pAndInfo pointer set to -** a dynamically allocated instance of the following structure. -*/ -struct WhereAndInfo { - WhereClause wc; /* The subexpression broken out */ +struct sqlite3_api_routines { + void * (*aggregate_context)(sqlite3_context*,int nBytes); + int (*aggregate_count)(sqlite3_context*); + int (*bind_blob)(sqlite3_stmt*,int,const void*,int n,void(*)(void*)); + int (*bind_double)(sqlite3_stmt*,int,double); + int (*bind_int)(sqlite3_stmt*,int,int); + int (*bind_int64)(sqlite3_stmt*,int,sqlite_int64); + int (*bind_null)(sqlite3_stmt*,int); + int (*bind_parameter_count)(sqlite3_stmt*); + int (*bind_parameter_index)(sqlite3_stmt*,const char*zName); + const char * (*bind_parameter_name)(sqlite3_stmt*,int); + int (*bind_text)(sqlite3_stmt*,int,const char*,int n,void(*)(void*)); + int (*bind_text16)(sqlite3_stmt*,int,const void*,int,void(*)(void*)); + int (*bind_value)(sqlite3_stmt*,int,const sqlite3_value*); + int (*busy_handler)(sqlite3*,int(*)(void*,int),void*); + int (*busy_timeout)(sqlite3*,int ms); + int (*changes)(sqlite3*); + int (*close)(sqlite3*); + int (*collation_needed)(sqlite3*,void*,void(*)(void*,sqlite3*, + int eTextRep,const char*)); + int (*collation_needed16)(sqlite3*,void*,void(*)(void*,sqlite3*, + int eTextRep,const void*)); + const void * (*column_blob)(sqlite3_stmt*,int iCol); + int (*column_bytes)(sqlite3_stmt*,int iCol); + int (*column_bytes16)(sqlite3_stmt*,int iCol); + int (*column_count)(sqlite3_stmt*pStmt); + const char * (*column_database_name)(sqlite3_stmt*,int); + const void * (*column_database_name16)(sqlite3_stmt*,int); + const char * (*column_decltype)(sqlite3_stmt*,int i); + const void * (*column_decltype16)(sqlite3_stmt*,int); + double (*column_double)(sqlite3_stmt*,int iCol); + int (*column_int)(sqlite3_stmt*,int iCol); + sqlite_int64 (*column_int64)(sqlite3_stmt*,int iCol); + const char * (*column_name)(sqlite3_stmt*,int); + const void * (*column_name16)(sqlite3_stmt*,int); + const char * (*column_origin_name)(sqlite3_stmt*,int); + const void * (*column_origin_name16)(sqlite3_stmt*,int); + const char * (*column_table_name)(sqlite3_stmt*,int); + const void * (*column_table_name16)(sqlite3_stmt*,int); + const unsigned char * (*column_text)(sqlite3_stmt*,int iCol); + const void * (*column_text16)(sqlite3_stmt*,int iCol); + int (*column_type)(sqlite3_stmt*,int iCol); + sqlite3_value* (*column_value)(sqlite3_stmt*,int iCol); + void * (*commit_hook)(sqlite3*,int(*)(void*),void*); + int (*complete)(const char*sql); + int (*complete16)(const void*sql); + int (*create_collation)(sqlite3*,const char*,int,void*, + int(*)(void*,int,const void*,int,const void*)); + int (*create_collation16)(sqlite3*,const void*,int,void*, + int(*)(void*,int,const void*,int,const void*)); + int (*create_function)(sqlite3*,const char*,int,int,void*, + void (*xFunc)(sqlite3_context*,int,sqlite3_value**), + void (*xStep)(sqlite3_context*,int,sqlite3_value**), + void (*xFinal)(sqlite3_context*)); + int (*create_function16)(sqlite3*,const void*,int,int,void*, + void (*xFunc)(sqlite3_context*,int,sqlite3_value**), + void (*xStep)(sqlite3_context*,int,sqlite3_value**), + void (*xFinal)(sqlite3_context*)); + int (*create_module)(sqlite3*,const char*,const sqlite3_module*,void*); + int (*data_count)(sqlite3_stmt*pStmt); + sqlite3 * (*db_handle)(sqlite3_stmt*); + int (*declare_vtab)(sqlite3*,const char*); + int (*enable_shared_cache)(int); + int (*errcode)(sqlite3*db); + const char * (*errmsg)(sqlite3*); + const void * (*errmsg16)(sqlite3*); + int (*exec)(sqlite3*,const char*,sqlite3_callback,void*,char**); + int (*expired)(sqlite3_stmt*); + int (*finalize)(sqlite3_stmt*pStmt); + void (*free)(void*); + void (*free_table)(char**result); + int (*get_autocommit)(sqlite3*); + void * (*get_auxdata)(sqlite3_context*,int); + int (*get_table)(sqlite3*,const char*,char***,int*,int*,char**); + int (*global_recover)(void); + void (*interruptx)(sqlite3*); + sqlite_int64 (*last_insert_rowid)(sqlite3*); + const char * (*libversion)(void); + int (*libversion_number)(void); + void *(*malloc)(int); + char * (*mprintf)(const char*,...); + int (*open)(const char*,sqlite3**); + int (*open16)(const void*,sqlite3**); + int (*prepare)(sqlite3*,const char*,int,sqlite3_stmt**,const char**); + int (*prepare16)(sqlite3*,const void*,int,sqlite3_stmt**,const void**); + void * (*profile)(sqlite3*,void(*)(void*,const char*,sqlite_uint64),void*); + void (*progress_handler)(sqlite3*,int,int(*)(void*),void*); + void *(*realloc)(void*,int); + int (*reset)(sqlite3_stmt*pStmt); + void (*result_blob)(sqlite3_context*,const void*,int,void(*)(void*)); + void (*result_double)(sqlite3_context*,double); + void (*result_error)(sqlite3_context*,const char*,int); + void (*result_error16)(sqlite3_context*,const void*,int); + void (*result_int)(sqlite3_context*,int); + void (*result_int64)(sqlite3_context*,sqlite_int64); + void (*result_null)(sqlite3_context*); + void (*result_text)(sqlite3_context*,const char*,int,void(*)(void*)); + void (*result_text16)(sqlite3_context*,const void*,int,void(*)(void*)); + void (*result_text16be)(sqlite3_context*,const void*,int,void(*)(void*)); + void (*result_text16le)(sqlite3_context*,const void*,int,void(*)(void*)); + void (*result_value)(sqlite3_context*,sqlite3_value*); + void * (*rollback_hook)(sqlite3*,void(*)(void*),void*); + int (*set_authorizer)(sqlite3*,int(*)(void*,int,const char*,const char*, + const char*,const char*),void*); + void (*set_auxdata)(sqlite3_context*,int,void*,void (*)(void*)); + char * (*snprintf)(int,char*,const char*,...); + int (*step)(sqlite3_stmt*); + int (*table_column_metadata)(sqlite3*,const char*,const char*,const char*, + char const**,char const**,int*,int*,int*); + void (*thread_cleanup)(void); + int (*total_changes)(sqlite3*); + void * (*trace)(sqlite3*,void(*xTrace)(void*,const char*),void*); + int (*transfer_bindings)(sqlite3_stmt*,sqlite3_stmt*); + void * (*update_hook)(sqlite3*,void(*)(void*,int ,char const*,char const*, + sqlite_int64),void*); + void * (*user_data)(sqlite3_context*); + const void * (*value_blob)(sqlite3_value*); + int (*value_bytes)(sqlite3_value*); + int (*value_bytes16)(sqlite3_value*); + double (*value_double)(sqlite3_value*); + int (*value_int)(sqlite3_value*); + sqlite_int64 (*value_int64)(sqlite3_value*); + int (*value_numeric_type)(sqlite3_value*); + const unsigned char * (*value_text)(sqlite3_value*); + const void * (*value_text16)(sqlite3_value*); + const void * (*value_text16be)(sqlite3_value*); + const void * (*value_text16le)(sqlite3_value*); + int (*value_type)(sqlite3_value*); + char *(*vmprintf)(const char*,va_list); + /* Added ??? */ + int (*overload_function)(sqlite3*, const char *zFuncName, int nArg); + /* Added by 3.3.13 */ + int (*prepare_v2)(sqlite3*,const char*,int,sqlite3_stmt**,const char**); + int (*prepare16_v2)(sqlite3*,const void*,int,sqlite3_stmt**,const void**); + int (*clear_bindings)(sqlite3_stmt*); + /* Added by 3.4.1 */ + int (*create_module_v2)(sqlite3*,const char*,const sqlite3_module*,void*, + void (*xDestroy)(void *)); + /* Added by 3.5.0 */ + int (*bind_zeroblob)(sqlite3_stmt*,int,int); + int (*blob_bytes)(sqlite3_blob*); + int (*blob_close)(sqlite3_blob*); + int (*blob_open)(sqlite3*,const char*,const char*,const char*,sqlite3_int64, + int,sqlite3_blob**); + int (*blob_read)(sqlite3_blob*,void*,int,int); + int (*blob_write)(sqlite3_blob*,const void*,int,int); + int (*create_collation_v2)(sqlite3*,const char*,int,void*, + int(*)(void*,int,const void*,int,const void*), + void(*)(void*)); + int (*file_control)(sqlite3*,const char*,int,void*); + sqlite3_int64 (*memory_highwater)(int); + sqlite3_int64 (*memory_used)(void); + sqlite3_mutex *(*mutex_alloc)(int); + void (*mutex_enter)(sqlite3_mutex*); + void (*mutex_free)(sqlite3_mutex*); + void (*mutex_leave)(sqlite3_mutex*); + int (*mutex_try)(sqlite3_mutex*); + int (*open_v2)(const char*,sqlite3**,int,const char*); + int (*release_memory)(int); + void (*result_error_nomem)(sqlite3_context*); + void (*result_error_toobig)(sqlite3_context*); + int (*sleep)(int); + void (*soft_heap_limit)(int); + sqlite3_vfs *(*vfs_find)(const char*); + int (*vfs_register)(sqlite3_vfs*,int); + int (*vfs_unregister)(sqlite3_vfs*); + int (*xthreadsafe)(void); + void (*result_zeroblob)(sqlite3_context*,int); + void (*result_error_code)(sqlite3_context*,int); + int (*test_control)(int, ...); + void (*randomness)(int,void*); + sqlite3 *(*context_db_handle)(sqlite3_context*); + int (*extended_result_codes)(sqlite3*,int); + int (*limit)(sqlite3*,int,int); + sqlite3_stmt *(*next_stmt)(sqlite3*,sqlite3_stmt*); + const char *(*sql)(sqlite3_stmt*); + int (*status)(int,int*,int*,int); + int (*backup_finish)(sqlite3_backup*); + sqlite3_backup *(*backup_init)(sqlite3*,const char*,sqlite3*,const char*); + int (*backup_pagecount)(sqlite3_backup*); + int (*backup_remaining)(sqlite3_backup*); + int (*backup_step)(sqlite3_backup*,int); + const char *(*compileoption_get)(int); + int (*compileoption_used)(const char*); + int (*create_function_v2)(sqlite3*,const char*,int,int,void*, + void (*xFunc)(sqlite3_context*,int,sqlite3_value**), + void (*xStep)(sqlite3_context*,int,sqlite3_value**), + void (*xFinal)(sqlite3_context*), + void(*xDestroy)(void*)); + int (*db_config)(sqlite3*,int,...); + sqlite3_mutex *(*db_mutex)(sqlite3*); + int (*db_status)(sqlite3*,int,int*,int*,int); + int (*extended_errcode)(sqlite3*); + void (*log)(int,const char*,...); + sqlite3_int64 (*soft_heap_limit64)(sqlite3_int64); + const char *(*sourceid)(void); + int (*stmt_status)(sqlite3_stmt*,int,int); + int (*strnicmp)(const char*,const char*,int); + int (*unlock_notify)(sqlite3*,void(*)(void**,int),void*); + int (*wal_autocheckpoint)(sqlite3*,int); + int (*wal_checkpoint)(sqlite3*,const char*); + void *(*wal_hook)(sqlite3*,int(*)(void*,sqlite3*,const char*,int),void*); + int (*blob_reopen)(sqlite3_blob*,sqlite3_int64); + int (*vtab_config)(sqlite3*,int op,...); + int (*vtab_on_conflict)(sqlite3*); }; /* -** An instance of the following structure keeps track of a mapping -** between VDBE cursor numbers and bits of the bitmasks in WhereTerm. -** -** The VDBE cursor numbers are small integers contained in -** SrcList_item.iCursor and Expr.iTable fields. For any given WHERE -** clause, the cursor numbers might not begin with 0 and they might -** contain gaps in the numbering sequence. But we want to make maximum -** use of the bits in our bitmasks. This structure provides a mapping -** from the sparse cursor numbers into consecutive integers beginning -** with 0. -** -** If WhereMaskSet.ix[A]==B it means that The A-th bit of a Bitmask -** corresponds VDBE cursor number B. The A-th bit of a bitmask is 1<3, 5->1, 8->2, 29->0, -** 57->5, 73->4. Or one of 719 other combinations might be used. It -** does not really matter. What is important is that sparse cursor -** numbers all get mapped into bit numbers that begin with 0 and contain -** no gaps. +** This header file is also used by the loadext.c source file +** (part of the main SQLite library - not an extension) so that +** it can get access to the sqlite3_api_routines structure +** definition. But the main library does not want to redefine +** the API. So the redefinition macros are only valid if the +** SQLITE_CORE macros is undefined. */ -struct WhereMaskSet { - int n; /* Number of assigned cursor values */ - int ix[BMS]; /* Cursor assigned to each bit */ -}; +#ifndef SQLITE_CORE +#define sqlite3_aggregate_context sqlite3_api->aggregate_context +#ifndef SQLITE_OMIT_DEPRECATED +#define sqlite3_aggregate_count sqlite3_api->aggregate_count +#endif +#define sqlite3_bind_blob sqlite3_api->bind_blob +#define sqlite3_bind_double sqlite3_api->bind_double +#define sqlite3_bind_int sqlite3_api->bind_int +#define sqlite3_bind_int64 sqlite3_api->bind_int64 +#define sqlite3_bind_null sqlite3_api->bind_null +#define sqlite3_bind_parameter_count sqlite3_api->bind_parameter_count +#define sqlite3_bind_parameter_index sqlite3_api->bind_parameter_index +#define sqlite3_bind_parameter_name sqlite3_api->bind_parameter_name +#define sqlite3_bind_text sqlite3_api->bind_text +#define sqlite3_bind_text16 sqlite3_api->bind_text16 +#define sqlite3_bind_value sqlite3_api->bind_value +#define sqlite3_busy_handler sqlite3_api->busy_handler +#define sqlite3_busy_timeout sqlite3_api->busy_timeout +#define sqlite3_changes sqlite3_api->changes +#define sqlite3_close sqlite3_api->close +#define sqlite3_collation_needed sqlite3_api->collation_needed +#define sqlite3_collation_needed16 sqlite3_api->collation_needed16 +#define sqlite3_column_blob sqlite3_api->column_blob +#define sqlite3_column_bytes sqlite3_api->column_bytes +#define sqlite3_column_bytes16 sqlite3_api->column_bytes16 +#define sqlite3_column_count sqlite3_api->column_count +#define sqlite3_column_database_name sqlite3_api->column_database_name +#define sqlite3_column_database_name16 sqlite3_api->column_database_name16 +#define sqlite3_column_decltype sqlite3_api->column_decltype +#define sqlite3_column_decltype16 sqlite3_api->column_decltype16 +#define sqlite3_column_double sqlite3_api->column_double +#define sqlite3_column_int sqlite3_api->column_int +#define sqlite3_column_int64 sqlite3_api->column_int64 +#define sqlite3_column_name sqlite3_api->column_name +#define sqlite3_column_name16 sqlite3_api->column_name16 +#define sqlite3_column_origin_name sqlite3_api->column_origin_name +#define sqlite3_column_origin_name16 sqlite3_api->column_origin_name16 +#define sqlite3_column_table_name sqlite3_api->column_table_name +#define sqlite3_column_table_name16 sqlite3_api->column_table_name16 +#define sqlite3_column_text sqlite3_api->column_text +#define sqlite3_column_text16 sqlite3_api->column_text16 +#define sqlite3_column_type sqlite3_api->column_type +#define sqlite3_column_value sqlite3_api->column_value +#define sqlite3_commit_hook sqlite3_api->commit_hook +#define sqlite3_complete sqlite3_api->complete +#define sqlite3_complete16 sqlite3_api->complete16 +#define sqlite3_create_collation sqlite3_api->create_collation +#define sqlite3_create_collation16 sqlite3_api->create_collation16 +#define sqlite3_create_function sqlite3_api->create_function +#define sqlite3_create_function16 sqlite3_api->create_function16 +#define sqlite3_create_module sqlite3_api->create_module +#define sqlite3_create_module_v2 sqlite3_api->create_module_v2 +#define sqlite3_data_count sqlite3_api->data_count +#define sqlite3_db_handle sqlite3_api->db_handle +#define sqlite3_declare_vtab sqlite3_api->declare_vtab +#define sqlite3_enable_shared_cache sqlite3_api->enable_shared_cache +#define sqlite3_errcode sqlite3_api->errcode +#define sqlite3_errmsg sqlite3_api->errmsg +#define sqlite3_errmsg16 sqlite3_api->errmsg16 +#define sqlite3_exec sqlite3_api->exec +#ifndef SQLITE_OMIT_DEPRECATED +#define sqlite3_expired sqlite3_api->expired +#endif +#define sqlite3_finalize sqlite3_api->finalize +#define sqlite3_free sqlite3_api->free +#define sqlite3_free_table sqlite3_api->free_table +#define sqlite3_get_autocommit sqlite3_api->get_autocommit +#define sqlite3_get_auxdata sqlite3_api->get_auxdata +#define sqlite3_get_table sqlite3_api->get_table +#ifndef SQLITE_OMIT_DEPRECATED +#define sqlite3_global_recover sqlite3_api->global_recover +#endif +#define sqlite3_interrupt sqlite3_api->interruptx +#define sqlite3_last_insert_rowid sqlite3_api->last_insert_rowid +#define sqlite3_libversion sqlite3_api->libversion +#define sqlite3_libversion_number sqlite3_api->libversion_number +#define sqlite3_malloc sqlite3_api->malloc +#define sqlite3_mprintf sqlite3_api->mprintf +#define sqlite3_open sqlite3_api->open +#define sqlite3_open16 sqlite3_api->open16 +#define sqlite3_prepare sqlite3_api->prepare +#define sqlite3_prepare16 sqlite3_api->prepare16 +#define sqlite3_prepare_v2 sqlite3_api->prepare_v2 +#define sqlite3_prepare16_v2 sqlite3_api->prepare16_v2 +#define sqlite3_profile sqlite3_api->profile +#define sqlite3_progress_handler sqlite3_api->progress_handler +#define sqlite3_realloc sqlite3_api->realloc +#define sqlite3_reset sqlite3_api->reset +#define sqlite3_result_blob sqlite3_api->result_blob +#define sqlite3_result_double sqlite3_api->result_double +#define sqlite3_result_error sqlite3_api->result_error +#define sqlite3_result_error16 sqlite3_api->result_error16 +#define sqlite3_result_int sqlite3_api->result_int +#define sqlite3_result_int64 sqlite3_api->result_int64 +#define sqlite3_result_null sqlite3_api->result_null +#define sqlite3_result_text sqlite3_api->result_text +#define sqlite3_result_text16 sqlite3_api->result_text16 +#define sqlite3_result_text16be sqlite3_api->result_text16be +#define sqlite3_result_text16le sqlite3_api->result_text16le +#define sqlite3_result_value sqlite3_api->result_value +#define sqlite3_rollback_hook sqlite3_api->rollback_hook +#define sqlite3_set_authorizer sqlite3_api->set_authorizer +#define sqlite3_set_auxdata sqlite3_api->set_auxdata +#define sqlite3_snprintf sqlite3_api->snprintf +#define sqlite3_step sqlite3_api->step +#define sqlite3_table_column_metadata sqlite3_api->table_column_metadata +#define sqlite3_thread_cleanup sqlite3_api->thread_cleanup +#define sqlite3_total_changes sqlite3_api->total_changes +#define sqlite3_trace sqlite3_api->trace +#ifndef SQLITE_OMIT_DEPRECATED +#define sqlite3_transfer_bindings sqlite3_api->transfer_bindings +#endif +#define sqlite3_update_hook sqlite3_api->update_hook +#define sqlite3_user_data sqlite3_api->user_data +#define sqlite3_value_blob sqlite3_api->value_blob +#define sqlite3_value_bytes sqlite3_api->value_bytes +#define sqlite3_value_bytes16 sqlite3_api->value_bytes16 +#define sqlite3_value_double sqlite3_api->value_double +#define sqlite3_value_int sqlite3_api->value_int +#define sqlite3_value_int64 sqlite3_api->value_int64 +#define sqlite3_value_numeric_type sqlite3_api->value_numeric_type +#define sqlite3_value_text sqlite3_api->value_text +#define sqlite3_value_text16 sqlite3_api->value_text16 +#define sqlite3_value_text16be sqlite3_api->value_text16be +#define sqlite3_value_text16le sqlite3_api->value_text16le +#define sqlite3_value_type sqlite3_api->value_type +#define sqlite3_vmprintf sqlite3_api->vmprintf +#define sqlite3_overload_function sqlite3_api->overload_function +#define sqlite3_prepare_v2 sqlite3_api->prepare_v2 +#define sqlite3_prepare16_v2 sqlite3_api->prepare16_v2 +#define sqlite3_clear_bindings sqlite3_api->clear_bindings +#define sqlite3_bind_zeroblob sqlite3_api->bind_zeroblob +#define sqlite3_blob_bytes sqlite3_api->blob_bytes +#define sqlite3_blob_close sqlite3_api->blob_close +#define sqlite3_blob_open sqlite3_api->blob_open +#define sqlite3_blob_read sqlite3_api->blob_read +#define sqlite3_blob_write sqlite3_api->blob_write +#define sqlite3_create_collation_v2 sqlite3_api->create_collation_v2 +#define sqlite3_file_control sqlite3_api->file_control +#define sqlite3_memory_highwater sqlite3_api->memory_highwater +#define sqlite3_memory_used sqlite3_api->memory_used +#define sqlite3_mutex_alloc sqlite3_api->mutex_alloc +#define sqlite3_mutex_enter sqlite3_api->mutex_enter +#define sqlite3_mutex_free sqlite3_api->mutex_free +#define sqlite3_mutex_leave sqlite3_api->mutex_leave +#define sqlite3_mutex_try sqlite3_api->mutex_try +#define sqlite3_open_v2 sqlite3_api->open_v2 +#define sqlite3_release_memory sqlite3_api->release_memory +#define sqlite3_result_error_nomem sqlite3_api->result_error_nomem +#define sqlite3_result_error_toobig sqlite3_api->result_error_toobig +#define sqlite3_sleep sqlite3_api->sleep +#define sqlite3_soft_heap_limit sqlite3_api->soft_heap_limit +#define sqlite3_vfs_find sqlite3_api->vfs_find +#define sqlite3_vfs_register sqlite3_api->vfs_register +#define sqlite3_vfs_unregister sqlite3_api->vfs_unregister +#define sqlite3_threadsafe sqlite3_api->xthreadsafe +#define sqlite3_result_zeroblob sqlite3_api->result_zeroblob +#define sqlite3_result_error_code sqlite3_api->result_error_code +#define sqlite3_test_control sqlite3_api->test_control +#define sqlite3_randomness sqlite3_api->randomness +#define sqlite3_context_db_handle sqlite3_api->context_db_handle +#define sqlite3_extended_result_codes sqlite3_api->extended_result_codes +#define sqlite3_limit sqlite3_api->limit +#define sqlite3_next_stmt sqlite3_api->next_stmt +#define sqlite3_sql sqlite3_api->sql +#define sqlite3_status sqlite3_api->status +#define sqlite3_backup_finish sqlite3_api->backup_finish +#define sqlite3_backup_init sqlite3_api->backup_init +#define sqlite3_backup_pagecount sqlite3_api->backup_pagecount +#define sqlite3_backup_remaining sqlite3_api->backup_remaining +#define sqlite3_backup_step sqlite3_api->backup_step +#define sqlite3_compileoption_get sqlite3_api->compileoption_get +#define sqlite3_compileoption_used sqlite3_api->compileoption_used +#define sqlite3_create_function_v2 sqlite3_api->create_function_v2 +#define sqlite3_db_config sqlite3_api->db_config +#define sqlite3_db_mutex sqlite3_api->db_mutex +#define sqlite3_db_status sqlite3_api->db_status +#define sqlite3_extended_errcode sqlite3_api->extended_errcode +#define sqlite3_log sqlite3_api->log +#define sqlite3_soft_heap_limit64 sqlite3_api->soft_heap_limit64 +#define sqlite3_sourceid sqlite3_api->sourceid +#define sqlite3_stmt_status sqlite3_api->stmt_status +#define sqlite3_strnicmp sqlite3_api->strnicmp +#define sqlite3_unlock_notify sqlite3_api->unlock_notify +#define sqlite3_wal_autocheckpoint sqlite3_api->wal_autocheckpoint +#define sqlite3_wal_checkpoint sqlite3_api->wal_checkpoint +#define sqlite3_wal_hook sqlite3_api->wal_hook +#define sqlite3_blob_reopen sqlite3_api->blob_reopen +#define sqlite3_vtab_config sqlite3_api->vtab_config +#define sqlite3_vtab_on_conflict sqlite3_api->vtab_on_conflict +#endif /* SQLITE_CORE */ -/* -** A WhereCost object records a lookup strategy and the estimated -** cost of pursuing that strategy. -*/ -struct WhereCost { - WherePlan plan; /* The lookup strategy */ - double rCost; /* Overall cost of pursuing this search strategy */ - double nRow; /* Estimated number of output rows */ -}; +#define SQLITE_EXTENSION_INIT1 const sqlite3_api_routines *sqlite3_api = 0; +#define SQLITE_EXTENSION_INIT2(v) sqlite3_api = v; -/* -** Bitmasks for the operators that indices are able to exploit. An -** OR-ed combination of these values can be used when searching for -** terms in the where clause. -*/ -#define WO_IN 0x001 -#define WO_EQ 0x002 -#define WO_LT (WO_EQ<<(TK_LT-TK_EQ)) -#define WO_LE (WO_EQ<<(TK_LE-TK_EQ)) -#define WO_GT (WO_EQ<<(TK_GT-TK_EQ)) -#define WO_GE (WO_EQ<<(TK_GE-TK_EQ)) -#define WO_MATCH 0x040 -#define WO_ISNULL 0x080 -#define WO_OR 0x100 /* Two or more OR-connected terms */ -#define WO_AND 0x200 /* Two or more AND-connected terms */ +#endif /* _SQLITE3EXT_H_ */ -#define WO_ALL 0xfff /* Mask of all possible WO_* values */ -#define WO_SINGLE 0x0ff /* Mask of all non-compound WO_* values */ +/************** End of sqlite3ext.h ******************************************/ +/************** Continuing where we left off in loadext.c ********************/ +/* #include */ -/* -** Value for wsFlags returned by bestIndex() and stored in -** WhereLevel.wsFlags. These flags determine which search -** strategies are appropriate. -** -** The least significant 12 bits is reserved as a mask for WO_ values above. -** The WhereLevel.wsFlags field is usually set to WO_IN|WO_EQ|WO_ISNULL. -** But if the table is the right table of a left join, WhereLevel.wsFlags -** is set to WO_IN|WO_EQ. The WhereLevel.wsFlags field can then be used as -** the "op" parameter to findTerm when we are resolving equality constraints. -** ISNULL constraints will then not be used on the right table of a left -** join. Tickets #2177 and #2189. -*/ -#define WHERE_ROWID_EQ 0x00001000 /* rowid=EXPR or rowid IN (...) */ -#define WHERE_ROWID_RANGE 0x00002000 /* rowidEXPR */ -#define WHERE_COLUMN_EQ 0x00010000 /* x=EXPR or x IN (...) or x IS NULL */ -#define WHERE_COLUMN_RANGE 0x00020000 /* xEXPR */ -#define WHERE_COLUMN_IN 0x00040000 /* x IN (...) */ -#define WHERE_COLUMN_NULL 0x00080000 /* x IS NULL */ -#define WHERE_INDEXED 0x000f0000 /* Anything that uses an index */ -#define WHERE_IN_ABLE 0x000f1000 /* Able to support an IN operator */ -#define WHERE_TOP_LIMIT 0x00100000 /* xEXPR or x>=EXPR constraint */ -#define WHERE_IDX_ONLY 0x00800000 /* Use index only - omit table */ -#define WHERE_ORDERBY 0x01000000 /* Output will appear in correct order */ -#define WHERE_REVERSE 0x02000000 /* Scan in reverse order */ -#define WHERE_UNIQUE 0x04000000 /* Selects no more than one row */ -#define WHERE_VIRTUALTABLE 0x08000000 /* Use virtual-table processing */ -#define WHERE_MULTI_OR 0x10000000 /* OR using multiple indices */ +#ifndef SQLITE_OMIT_LOAD_EXTENSION /* -** Initialize a preallocated WhereClause structure. +** Some API routines are omitted when various features are +** excluded from a build of SQLite. Substitute a NULL pointer +** for any missing APIs. */ -static void whereClauseInit( - WhereClause *pWC, /* The WhereClause to be initialized */ - Parse *pParse, /* The parsing context */ - WhereMaskSet *pMaskSet /* Mapping from table cursor numbers to bitmasks */ -){ - pWC->pParse = pParse; - pWC->pMaskSet = pMaskSet; - pWC->nTerm = 0; - pWC->nSlot = ArraySize(pWC->aStatic); - pWC->a = pWC->aStatic; - pWC->vmask = 0; -} - -/* Forward reference */ -static void whereClauseClear(WhereClause*); +#ifndef SQLITE_ENABLE_COLUMN_METADATA +# define sqlite3_column_database_name 0 +# define sqlite3_column_database_name16 0 +# define sqlite3_column_table_name 0 +# define sqlite3_column_table_name16 0 +# define sqlite3_column_origin_name 0 +# define sqlite3_column_origin_name16 0 +# define sqlite3_table_column_metadata 0 +#endif -/* -** Deallocate all memory associated with a WhereOrInfo object. -*/ -static void whereOrInfoDelete(sqlite3 *db, WhereOrInfo *p){ - whereClauseClear(&p->wc); - sqlite3DbFree(db, p); -} +#ifdef SQLITE_OMIT_AUTHORIZATION +# define sqlite3_set_authorizer 0 +#endif -/* -** Deallocate all memory associated with a WhereAndInfo object. -*/ -static void whereAndInfoDelete(sqlite3 *db, WhereAndInfo *p){ - whereClauseClear(&p->wc); - sqlite3DbFree(db, p); -} +#ifdef SQLITE_OMIT_UTF16 +# define sqlite3_bind_text16 0 +# define sqlite3_collation_needed16 0 +# define sqlite3_column_decltype16 0 +# define sqlite3_column_name16 0 +# define sqlite3_column_text16 0 +# define sqlite3_complete16 0 +# define sqlite3_create_collation16 0 +# define sqlite3_create_function16 0 +# define sqlite3_errmsg16 0 +# define sqlite3_open16 0 +# define sqlite3_prepare16 0 +# define sqlite3_prepare16_v2 0 +# define sqlite3_result_error16 0 +# define sqlite3_result_text16 0 +# define sqlite3_result_text16be 0 +# define sqlite3_result_text16le 0 +# define sqlite3_value_text16 0 +# define sqlite3_value_text16be 0 +# define sqlite3_value_text16le 0 +# define sqlite3_column_database_name16 0 +# define sqlite3_column_table_name16 0 +# define sqlite3_column_origin_name16 0 +#endif -/* -** Deallocate a WhereClause structure. The WhereClause structure -** itself is not freed. This routine is the inverse of whereClauseInit(). -*/ -static void whereClauseClear(WhereClause *pWC){ - int i; - WhereTerm *a; - sqlite3 *db = pWC->pParse->db; - for(i=pWC->nTerm-1, a=pWC->a; i>=0; i--, a++){ - if( a->wtFlags & TERM_DYNAMIC ){ - sqlite3ExprDelete(db, a->pExpr); - } - if( a->wtFlags & TERM_ORINFO ){ - whereOrInfoDelete(db, a->u.pOrInfo); - }else if( a->wtFlags & TERM_ANDINFO ){ - whereAndInfoDelete(db, a->u.pAndInfo); - } - } - if( pWC->a!=pWC->aStatic ){ - sqlite3DbFree(db, pWC->a); - } -} +#ifdef SQLITE_OMIT_COMPLETE +# define sqlite3_complete 0 +# define sqlite3_complete16 0 +#endif + +#ifdef SQLITE_OMIT_DECLTYPE +# define sqlite3_column_decltype16 0 +# define sqlite3_column_decltype 0 +#endif + +#ifdef SQLITE_OMIT_PROGRESS_CALLBACK +# define sqlite3_progress_handler 0 +#endif + +#ifdef SQLITE_OMIT_VIRTUALTABLE +# define sqlite3_create_module 0 +# define sqlite3_create_module_v2 0 +# define sqlite3_declare_vtab 0 +# define sqlite3_vtab_config 0 +# define sqlite3_vtab_on_conflict 0 +#endif + +#ifdef SQLITE_OMIT_SHARED_CACHE +# define sqlite3_enable_shared_cache 0 +#endif + +#ifdef SQLITE_OMIT_TRACE +# define sqlite3_profile 0 +# define sqlite3_trace 0 +#endif + +#ifdef SQLITE_OMIT_GET_TABLE +# define sqlite3_free_table 0 +# define sqlite3_get_table 0 +#endif + +#ifdef SQLITE_OMIT_INCRBLOB +#define sqlite3_bind_zeroblob 0 +#define sqlite3_blob_bytes 0 +#define sqlite3_blob_close 0 +#define sqlite3_blob_open 0 +#define sqlite3_blob_read 0 +#define sqlite3_blob_write 0 +#define sqlite3_blob_reopen 0 +#endif /* -** Add a single new WhereTerm entry to the WhereClause object pWC. -** The new WhereTerm object is constructed from Expr p and with wtFlags. -** The index in pWC->a[] of the new WhereTerm is returned on success. -** 0 is returned if the new WhereTerm could not be added due to a memory -** allocation error. The memory allocation failure will be recorded in -** the db->mallocFailed flag so that higher-level functions can detect it. +** The following structure contains pointers to all SQLite API routines. +** A pointer to this structure is passed into extensions when they are +** loaded so that the extension can make calls back into the SQLite +** library. ** -** This routine will increase the size of the pWC->a[] array as necessary. +** When adding new APIs, add them to the bottom of this structure +** in order to preserve backwards compatibility. ** -** If the wtFlags argument includes TERM_DYNAMIC, then responsibility -** for freeing the expression p is assumed by the WhereClause object pWC. -** This is true even if this routine fails to allocate a new WhereTerm. +** Extensions that use newer APIs should first call the +** sqlite3_libversion_number() to make sure that the API they +** intend to use is supported by the library. Extensions should +** also check to make sure that the pointer to the function is +** not NULL before calling it. +*/ +static const sqlite3_api_routines sqlite3Apis = { + sqlite3_aggregate_context, +#ifndef SQLITE_OMIT_DEPRECATED + sqlite3_aggregate_count, +#else + 0, +#endif + sqlite3_bind_blob, + sqlite3_bind_double, + sqlite3_bind_int, + sqlite3_bind_int64, + sqlite3_bind_null, + sqlite3_bind_parameter_count, + sqlite3_bind_parameter_index, + sqlite3_bind_parameter_name, + sqlite3_bind_text, + sqlite3_bind_text16, + sqlite3_bind_value, + sqlite3_busy_handler, + sqlite3_busy_timeout, + sqlite3_changes, + sqlite3_close, + sqlite3_collation_needed, + sqlite3_collation_needed16, + sqlite3_column_blob, + sqlite3_column_bytes, + sqlite3_column_bytes16, + sqlite3_column_count, + sqlite3_column_database_name, + sqlite3_column_database_name16, + sqlite3_column_decltype, + sqlite3_column_decltype16, + sqlite3_column_double, + sqlite3_column_int, + sqlite3_column_int64, + sqlite3_column_name, + sqlite3_column_name16, + sqlite3_column_origin_name, + sqlite3_column_origin_name16, + sqlite3_column_table_name, + sqlite3_column_table_name16, + sqlite3_column_text, + sqlite3_column_text16, + sqlite3_column_type, + sqlite3_column_value, + sqlite3_commit_hook, + sqlite3_complete, + sqlite3_complete16, + sqlite3_create_collation, + sqlite3_create_collation16, + sqlite3_create_function, + sqlite3_create_function16, + sqlite3_create_module, + sqlite3_data_count, + sqlite3_db_handle, + sqlite3_declare_vtab, + sqlite3_enable_shared_cache, + sqlite3_errcode, + sqlite3_errmsg, + sqlite3_errmsg16, + sqlite3_exec, +#ifndef SQLITE_OMIT_DEPRECATED + sqlite3_expired, +#else + 0, +#endif + sqlite3_finalize, + sqlite3_free, + sqlite3_free_table, + sqlite3_get_autocommit, + sqlite3_get_auxdata, + sqlite3_get_table, + 0, /* Was sqlite3_global_recover(), but that function is deprecated */ + sqlite3_interrupt, + sqlite3_last_insert_rowid, + sqlite3_libversion, + sqlite3_libversion_number, + sqlite3_malloc, + sqlite3_mprintf, + sqlite3_open, + sqlite3_open16, + sqlite3_prepare, + sqlite3_prepare16, + sqlite3_profile, + sqlite3_progress_handler, + sqlite3_realloc, + sqlite3_reset, + sqlite3_result_blob, + sqlite3_result_double, + sqlite3_result_error, + sqlite3_result_error16, + sqlite3_result_int, + sqlite3_result_int64, + sqlite3_result_null, + sqlite3_result_text, + sqlite3_result_text16, + sqlite3_result_text16be, + sqlite3_result_text16le, + sqlite3_result_value, + sqlite3_rollback_hook, + sqlite3_set_authorizer, + sqlite3_set_auxdata, + sqlite3_snprintf, + sqlite3_step, + sqlite3_table_column_metadata, +#ifndef SQLITE_OMIT_DEPRECATED + sqlite3_thread_cleanup, +#else + 0, +#endif + sqlite3_total_changes, + sqlite3_trace, +#ifndef SQLITE_OMIT_DEPRECATED + sqlite3_transfer_bindings, +#else + 0, +#endif + sqlite3_update_hook, + sqlite3_user_data, + sqlite3_value_blob, + sqlite3_value_bytes, + sqlite3_value_bytes16, + sqlite3_value_double, + sqlite3_value_int, + sqlite3_value_int64, + sqlite3_value_numeric_type, + sqlite3_value_text, + sqlite3_value_text16, + sqlite3_value_text16be, + sqlite3_value_text16le, + sqlite3_value_type, + sqlite3_vmprintf, + /* + ** The original API set ends here. All extensions can call any + ** of the APIs above provided that the pointer is not NULL. But + ** before calling APIs that follow, extension should check the + ** sqlite3_libversion_number() to make sure they are dealing with + ** a library that is new enough to support that API. + ************************************************************************* + */ + sqlite3_overload_function, + + /* + ** Added after 3.3.13 + */ + sqlite3_prepare_v2, + sqlite3_prepare16_v2, + sqlite3_clear_bindings, + + /* + ** Added for 3.4.1 + */ + sqlite3_create_module_v2, + + /* + ** Added for 3.5.0 + */ + sqlite3_bind_zeroblob, + sqlite3_blob_bytes, + sqlite3_blob_close, + sqlite3_blob_open, + sqlite3_blob_read, + sqlite3_blob_write, + sqlite3_create_collation_v2, + sqlite3_file_control, + sqlite3_memory_highwater, + sqlite3_memory_used, +#ifdef SQLITE_MUTEX_OMIT + 0, + 0, + 0, + 0, + 0, +#else + sqlite3_mutex_alloc, + sqlite3_mutex_enter, + sqlite3_mutex_free, + sqlite3_mutex_leave, + sqlite3_mutex_try, +#endif + sqlite3_open_v2, + sqlite3_release_memory, + sqlite3_result_error_nomem, + sqlite3_result_error_toobig, + sqlite3_sleep, + sqlite3_soft_heap_limit, + sqlite3_vfs_find, + sqlite3_vfs_register, + sqlite3_vfs_unregister, + + /* + ** Added for 3.5.8 + */ + sqlite3_threadsafe, + sqlite3_result_zeroblob, + sqlite3_result_error_code, + sqlite3_test_control, + sqlite3_randomness, + sqlite3_context_db_handle, + + /* + ** Added for 3.6.0 + */ + sqlite3_extended_result_codes, + sqlite3_limit, + sqlite3_next_stmt, + sqlite3_sql, + sqlite3_status, + + /* + ** Added for 3.7.4 + */ + sqlite3_backup_finish, + sqlite3_backup_init, + sqlite3_backup_pagecount, + sqlite3_backup_remaining, + sqlite3_backup_step, +#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS + sqlite3_compileoption_get, + sqlite3_compileoption_used, +#else + 0, + 0, +#endif + sqlite3_create_function_v2, + sqlite3_db_config, + sqlite3_db_mutex, + sqlite3_db_status, + sqlite3_extended_errcode, + sqlite3_log, + sqlite3_soft_heap_limit64, + sqlite3_sourceid, + sqlite3_stmt_status, + sqlite3_strnicmp, +#ifdef SQLITE_ENABLE_UNLOCK_NOTIFY + sqlite3_unlock_notify, +#else + 0, +#endif +#ifndef SQLITE_OMIT_WAL + sqlite3_wal_autocheckpoint, + sqlite3_wal_checkpoint, + sqlite3_wal_hook, +#else + 0, + 0, + 0, +#endif + sqlite3_blob_reopen, + sqlite3_vtab_config, + sqlite3_vtab_on_conflict, +}; + +/* +** Attempt to load an SQLite extension library contained in the file +** zFile. The entry point is zProc. zProc may be 0 in which case a +** default entry point name (sqlite3_extension_init) is used. Use +** of the default name is recommended. ** -** WARNING: This routine might reallocate the space used to store -** WhereTerms. All pointers to WhereTerms should be invalidated after -** calling this routine. Such pointers may be reinitialized by referencing -** the pWC->a[] array. +** Return SQLITE_OK on success and SQLITE_ERROR if something goes wrong. +** +** If an error occurs and pzErrMsg is not 0, then fill *pzErrMsg with +** error message text. The calling function should free this memory +** by calling sqlite3DbFree(db, ). */ -static int whereClauseInsert(WhereClause *pWC, Expr *p, u8 wtFlags){ - WhereTerm *pTerm; - int idx; - if( pWC->nTerm>=pWC->nSlot ){ - WhereTerm *pOld = pWC->a; - sqlite3 *db = pWC->pParse->db; - pWC->a = sqlite3DbMallocRaw(db, sizeof(pWC->a[0])*pWC->nSlot*2 ); - if( pWC->a==0 ){ - if( wtFlags & TERM_DYNAMIC ){ - sqlite3ExprDelete(db, p); +static int sqlite3LoadExtension( + sqlite3 *db, /* Load the extension into this database connection */ + const char *zFile, /* Name of the shared library containing extension */ + const char *zProc, /* Entry point. Use "sqlite3_extension_init" if 0 */ + char **pzErrMsg /* Put error message here if not 0 */ +){ + sqlite3_vfs *pVfs = db->pVfs; + void *handle; + int (*xInit)(sqlite3*,char**,const sqlite3_api_routines*); + char *zErrmsg = 0; + void **aHandle; + int nMsg = 300 + sqlite3Strlen30(zFile); + + if( pzErrMsg ) *pzErrMsg = 0; + + /* Ticket #1863. To avoid a creating security problems for older + ** applications that relink against newer versions of SQLite, the + ** ability to run load_extension is turned off by default. One + ** must call sqlite3_enable_load_extension() to turn on extension + ** loading. Otherwise you get the following error. + */ + if( (db->flags & SQLITE_LoadExtension)==0 ){ + if( pzErrMsg ){ + *pzErrMsg = sqlite3_mprintf("not authorized"); + } + return SQLITE_ERROR; + } + + if( zProc==0 ){ + zProc = "sqlite3_extension_init"; + } + + handle = sqlite3OsDlOpen(pVfs, zFile); + if( handle==0 ){ + if( pzErrMsg ){ + *pzErrMsg = zErrmsg = sqlite3_malloc(nMsg); + if( zErrmsg ){ + sqlite3_snprintf(nMsg, zErrmsg, + "unable to open shared library [%s]", zFile); + sqlite3OsDlError(pVfs, nMsg-1, zErrmsg); } - pWC->a = pOld; - return 0; } - memcpy(pWC->a, pOld, sizeof(pWC->a[0])*pWC->nTerm); - if( pOld!=pWC->aStatic ){ - sqlite3DbFree(db, pOld); + return SQLITE_ERROR; + } + xInit = (int(*)(sqlite3*,char**,const sqlite3_api_routines*)) + sqlite3OsDlSym(pVfs, handle, zProc); + if( xInit==0 ){ + if( pzErrMsg ){ + nMsg += sqlite3Strlen30(zProc); + *pzErrMsg = zErrmsg = sqlite3_malloc(nMsg); + if( zErrmsg ){ + sqlite3_snprintf(nMsg, zErrmsg, + "no entry point [%s] in shared library [%s]", zProc,zFile); + sqlite3OsDlError(pVfs, nMsg-1, zErrmsg); + } + sqlite3OsDlClose(pVfs, handle); } - pWC->nSlot = sqlite3DbMallocSize(db, pWC->a)/sizeof(pWC->a[0]); + return SQLITE_ERROR; + }else if( xInit(db, &zErrmsg, &sqlite3Apis) ){ + if( pzErrMsg ){ + *pzErrMsg = sqlite3_mprintf("error during initialization: %s", zErrmsg); + } + sqlite3_free(zErrmsg); + sqlite3OsDlClose(pVfs, handle); + return SQLITE_ERROR; } - pTerm = &pWC->a[idx = pWC->nTerm++]; - pTerm->pExpr = p; - pTerm->wtFlags = wtFlags; - pTerm->pWC = pWC; - pTerm->iParent = -1; - return idx; -} -/* -** This routine identifies subexpressions in the WHERE clause where -** each subexpression is separated by the AND operator or some other -** operator specified in the op parameter. The WhereClause structure -** is filled with pointers to subexpressions. For example: -** -** WHERE a=='hello' AND coalesce(b,11)<10 AND (c+12!=d OR c==22) -** \________/ \_______________/ \________________/ -** slot[0] slot[1] slot[2] -** -** The original WHERE clause in pExpr is unaltered. All this routine -** does is make slot[] entries point to substructure within pExpr. -** -** In the previous sentence and in the diagram, "slot[]" refers to -** the WhereClause.a[] array. The slot[] array grows as needed to contain -** all terms of the WHERE clause. -*/ -static void whereSplit(WhereClause *pWC, Expr *pExpr, int op){ - pWC->op = (u8)op; - if( pExpr==0 ) return; - if( pExpr->op!=op ){ - whereClauseInsert(pWC, pExpr, 0); - }else{ - whereSplit(pWC, pExpr->pLeft, op); - whereSplit(pWC, pExpr->pRight, op); + /* Append the new shared library handle to the db->aExtension array. */ + aHandle = sqlite3DbMallocZero(db, sizeof(handle)*(db->nExtension+1)); + if( aHandle==0 ){ + return SQLITE_NOMEM; + } + if( db->nExtension>0 ){ + memcpy(aHandle, db->aExtension, sizeof(handle)*db->nExtension); } + sqlite3DbFree(db, db->aExtension); + db->aExtension = aHandle; + + db->aExtension[db->nExtension++] = handle; + return SQLITE_OK; +} +SQLITE_API int sqlite3_load_extension( + sqlite3 *db, /* Load the extension into this database connection */ + const char *zFile, /* Name of the shared library containing extension */ + const char *zProc, /* Entry point. Use "sqlite3_extension_init" if 0 */ + char **pzErrMsg /* Put error message here if not 0 */ +){ + int rc; + sqlite3_mutex_enter(db->mutex); + rc = sqlite3LoadExtension(db, zFile, zProc, pzErrMsg); + rc = sqlite3ApiExit(db, rc); + sqlite3_mutex_leave(db->mutex); + return rc; } /* -** Initialize an expression mask set (a WhereMaskSet object) +** Call this routine when the database connection is closing in order +** to clean up loaded extensions */ -#define initMaskSet(P) memset(P, 0, sizeof(*P)) +SQLITE_PRIVATE void sqlite3CloseExtensions(sqlite3 *db){ + int i; + assert( sqlite3_mutex_held(db->mutex) ); + for(i=0; inExtension; i++){ + sqlite3OsDlClose(db->pVfs, db->aExtension[i]); + } + sqlite3DbFree(db, db->aExtension); +} /* -** Return the bitmask for the given cursor number. Return 0 if -** iCursor is not in the set. +** Enable or disable extension loading. Extension loading is disabled by +** default so as not to open security holes in older applications. */ -static Bitmask getMask(WhereMaskSet *pMaskSet, int iCursor){ - int i; - assert( pMaskSet->n<=sizeof(Bitmask)*8 ); - for(i=0; in; i++){ - if( pMaskSet->ix[i]==iCursor ){ - return ((Bitmask)1)<mutex); + if( onoff ){ + db->flags |= SQLITE_LoadExtension; + }else{ + db->flags &= ~SQLITE_LoadExtension; } - return 0; + sqlite3_mutex_leave(db->mutex); + return SQLITE_OK; } +#endif /* SQLITE_OMIT_LOAD_EXTENSION */ + /* -** Create a new mask for cursor iCursor. -** -** There is one cursor per table in the FROM clause. The number of -** tables in the FROM clause is limited by a test early in the -** sqlite3WhereBegin() routine. So we know that the pMaskSet->ix[] -** array will never overflow. +** The auto-extension code added regardless of whether or not extension +** loading is supported. We need a dummy sqlite3Apis pointer for that +** code if regular extension loading is not available. This is that +** dummy pointer. */ -static void createMask(WhereMaskSet *pMaskSet, int iCursor){ - assert( pMaskSet->n < ArraySize(pMaskSet->ix) ); - pMaskSet->ix[pMaskSet->n++] = iCursor; -} +#ifdef SQLITE_OMIT_LOAD_EXTENSION +static const sqlite3_api_routines sqlite3Apis = { 0 }; +#endif + /* -** This routine walks (recursively) an expression tree and generates -** a bitmask indicating which tables are used in that expression -** tree. +** The following object holds the list of automatically loaded +** extensions. ** -** In order for this routine to work, the calling function must have -** previously invoked sqlite3ResolveExprNames() on the expression. See -** the header comment on that routine for additional information. -** The sqlite3ResolveExprNames() routines looks for column names and -** sets their opcodes to TK_COLUMN and their Expr.iTable fields to -** the VDBE cursor number of the table. This routine just has to -** translate the cursor numbers into bitmask values and OR all -** the bitmasks together. +** This list is shared across threads. The SQLITE_MUTEX_STATIC_MASTER +** mutex must be held while accessing this list. */ -static Bitmask exprListTableUsage(WhereMaskSet*, ExprList*); -static Bitmask exprSelectTableUsage(WhereMaskSet*, Select*); -static Bitmask exprTableUsage(WhereMaskSet *pMaskSet, Expr *p){ - Bitmask mask = 0; - if( p==0 ) return 0; - if( p->op==TK_COLUMN ){ - mask = getMask(pMaskSet, p->iTable); - return mask; - } - mask = exprTableUsage(pMaskSet, p->pRight); - mask |= exprTableUsage(pMaskSet, p->pLeft); - if( ExprHasProperty(p, EP_xIsSelect) ){ - mask |= exprSelectTableUsage(pMaskSet, p->x.pSelect); - }else{ - mask |= exprListTableUsage(pMaskSet, p->x.pList); - } - return mask; -} -static Bitmask exprListTableUsage(WhereMaskSet *pMaskSet, ExprList *pList){ - int i; - Bitmask mask = 0; - if( pList ){ - for(i=0; inExpr; i++){ - mask |= exprTableUsage(pMaskSet, pList->a[i].pExpr); +typedef struct sqlite3AutoExtList sqlite3AutoExtList; +static SQLITE_WSD struct sqlite3AutoExtList { + int nExt; /* Number of entries in aExt[] */ + void (**aExt)(void); /* Pointers to the extension init functions */ +} sqlite3Autoext = { 0, 0 }; + +/* The "wsdAutoext" macro will resolve to the autoextension +** state vector. If writable static data is unsupported on the target, +** we have to locate the state vector at run-time. In the more common +** case where writable static data is supported, wsdStat can refer directly +** to the "sqlite3Autoext" state vector declared above. +*/ +#ifdef SQLITE_OMIT_WSD +# define wsdAutoextInit \ + sqlite3AutoExtList *x = &GLOBAL(sqlite3AutoExtList,sqlite3Autoext) +# define wsdAutoext x[0] +#else +# define wsdAutoextInit +# define wsdAutoext sqlite3Autoext +#endif + + +/* +** Register a statically linked extension that is automatically +** loaded by every new database connection. +*/ +SQLITE_API int sqlite3_auto_extension(void (*xInit)(void)){ + int rc = SQLITE_OK; +#ifndef SQLITE_OMIT_AUTOINIT + rc = sqlite3_initialize(); + if( rc ){ + return rc; + }else +#endif + { + int i; +#if SQLITE_THREADSAFE + sqlite3_mutex *mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER); +#endif + wsdAutoextInit; + sqlite3_mutex_enter(mutex); + for(i=0; ipEList); - mask |= exprListTableUsage(pMaskSet, pS->pGroupBy); - mask |= exprListTableUsage(pMaskSet, pS->pOrderBy); - mask |= exprTableUsage(pMaskSet, pS->pWhere); - mask |= exprTableUsage(pMaskSet, pS->pHaving); - pS = pS->pPrior; + +/* +** Reset the automatic extension loading mechanism. +*/ +SQLITE_API void sqlite3_reset_auto_extension(void){ +#ifndef SQLITE_OMIT_AUTOINIT + if( sqlite3_initialize()==SQLITE_OK ) +#endif + { +#if SQLITE_THREADSAFE + sqlite3_mutex *mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER); +#endif + wsdAutoextInit; + sqlite3_mutex_enter(mutex); + sqlite3_free(wsdAutoext.aExt); + wsdAutoext.aExt = 0; + wsdAutoext.nExt = 0; + sqlite3_mutex_leave(mutex); } - return mask; } /* -** Return TRUE if the given operator is one of the operators that is -** allowed for an indexable WHERE clause term. The allowed operators are -** "=", "<", ">", "<=", ">=", and "IN". +** Load all automatic extensions. +** +** If anything goes wrong, set an error in the database connection. */ -static int allowedOp(int op){ - assert( TK_GT>TK_EQ && TK_GTTK_EQ && TK_LTTK_EQ && TK_LE=TK_EQ && op<=TK_GE) || op==TK_ISNULL; +SQLITE_PRIVATE void sqlite3AutoLoadExtensions(sqlite3 *db){ + int i; + int go = 1; + int rc; + int (*xInit)(sqlite3*,char**,const sqlite3_api_routines*); + + wsdAutoextInit; + if( wsdAutoext.nExt==0 ){ + /* Common case: early out without every having to acquire a mutex */ + return; + } + for(i=0; go; i++){ + char *zErrmsg; +#if SQLITE_THREADSAFE + sqlite3_mutex *mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER); +#endif + sqlite3_mutex_enter(mutex); + if( i>=wsdAutoext.nExt ){ + xInit = 0; + go = 0; + }else{ + xInit = (int(*)(sqlite3*,char**,const sqlite3_api_routines*)) + wsdAutoext.aExt[i]; + } + sqlite3_mutex_leave(mutex); + zErrmsg = 0; + if( xInit && (rc = xInit(db, &zErrmsg, &sqlite3Apis))!=0 ){ + sqlite3Error(db, rc, + "automatic extension loading failed: %s", zErrmsg); + go = 0; + } + sqlite3_free(zErrmsg); + } } +/************** End of loadext.c *********************************************/ +/************** Begin file pragma.c ******************************************/ /* -** Swap two objects of type TYPE. +** 2003 April 6 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** This file contains code used to implement the PRAGMA command. */ -#define SWAP(TYPE,A,B) {TYPE t=A; A=B; B=t;} /* -** Commute a comparison operator. Expressions of the form "X op Y" -** are converted into "Y op X". +** Interpret the given string as a safety level. Return 0 for OFF, +** 1 for ON or NORMAL and 2 for FULL. Return 1 for an empty or +** unrecognized string argument. The FULL option is disallowed +** if the omitFull parameter it 1. ** -** If a collation sequence is associated with either the left or right -** side of the comparison, it remains associated with the same side after -** the commutation. So "Y collate NOCASE op X" becomes -** "X collate NOCASE op Y". This is because any collation sequence on -** the left hand side of a comparison overrides any collation sequence -** attached to the right. For the same reason the EP_ExpCollate flag -** is not commuted. +** Note that the values returned are one less that the values that +** should be passed into sqlite3BtreeSetSafetyLevel(). The is done +** to support legacy SQL code. The safety level used to be boolean +** and older scripts may have used numbers 0 for OFF and 1 for ON. */ -static void exprCommute(Parse *pParse, Expr *pExpr){ - u16 expRight = (pExpr->pRight->flags & EP_ExpCollate); - u16 expLeft = (pExpr->pLeft->flags & EP_ExpCollate); - assert( allowedOp(pExpr->op) && pExpr->op!=TK_IN ); - pExpr->pRight->pColl = sqlite3ExprCollSeq(pParse, pExpr->pRight); - pExpr->pLeft->pColl = sqlite3ExprCollSeq(pParse, pExpr->pLeft); - SWAP(CollSeq*,pExpr->pRight->pColl,pExpr->pLeft->pColl); - pExpr->pRight->flags = (pExpr->pRight->flags & ~EP_ExpCollate) | expLeft; - pExpr->pLeft->flags = (pExpr->pLeft->flags & ~EP_ExpCollate) | expRight; - SWAP(Expr*,pExpr->pRight,pExpr->pLeft); - if( pExpr->op>=TK_GT ){ - assert( TK_LT==TK_GT+2 ); - assert( TK_GE==TK_LE+2 ); - assert( TK_GT>TK_EQ ); - assert( TK_GTop>=TK_GT && pExpr->op<=TK_GE ); - pExpr->op = ((pExpr->op-TK_GT)^2)+TK_GT; +static u8 getSafetyLevel(const char *z, int omitFull, int dflt){ + /* 123456789 123456789 */ + static const char zText[] = "onoffalseyestruefull"; + static const u8 iOffset[] = {0, 1, 2, 4, 9, 12, 16}; + static const u8 iLength[] = {2, 2, 3, 5, 3, 4, 4}; + static const u8 iValue[] = {1, 0, 0, 0, 1, 1, 2}; + int i, n; + if( sqlite3Isdigit(*z) ){ + return (u8)sqlite3Atoi(z); + } + n = sqlite3Strlen30(z); + for(i=0; i " -** where X is a reference to the iColumn of table iCur and is one of -** the WO_xx operator codes specified by the op parameter. -** Return a pointer to the term. Return 0 if not found. +** Interpret the given string as a locking mode value. */ -static WhereTerm *findTerm( - WhereClause *pWC, /* The WHERE clause to be searched */ - int iCur, /* Cursor number of LHS */ - int iColumn, /* Column number of LHS */ - Bitmask notReady, /* RHS must not overlap with this mask */ - u32 op, /* Mask of WO_xx values describing operator */ - Index *pIdx /* Must be compatible with this index, if not NULL */ -){ - WhereTerm *pTerm; - int k; - assert( iCur>=0 ); - op &= WO_ALL; - for(pTerm=pWC->a, k=pWC->nTerm; k; k--, pTerm++){ - if( pTerm->leftCursor==iCur - && (pTerm->prereqRight & notReady)==0 - && pTerm->u.leftColumn==iColumn - && (pTerm->eOperator & op)!=0 - ){ - if( pIdx && pTerm->eOperator!=WO_ISNULL ){ - Expr *pX = pTerm->pExpr; - CollSeq *pColl; - char idxaff; - int j; - Parse *pParse = pWC->pParse; +static int getLockingMode(const char *z){ + if( z ){ + if( 0==sqlite3StrICmp(z, "exclusive") ) return PAGER_LOCKINGMODE_EXCLUSIVE; + if( 0==sqlite3StrICmp(z, "normal") ) return PAGER_LOCKINGMODE_NORMAL; + } + return PAGER_LOCKINGMODE_QUERY; +} - idxaff = pIdx->pTable->aCol[iColumn].affinity; - if( !sqlite3IndexAffinityOk(pX, idxaff) ) continue; +#ifndef SQLITE_OMIT_AUTOVACUUM +/* +** Interpret the given string as an auto-vacuum mode value. +** +** The following strings, "none", "full" and "incremental" are +** acceptable, as are their numeric equivalents: 0, 1 and 2 respectively. +*/ +static int getAutoVacuum(const char *z){ + int i; + if( 0==sqlite3StrICmp(z, "none") ) return BTREE_AUTOVACUUM_NONE; + if( 0==sqlite3StrICmp(z, "full") ) return BTREE_AUTOVACUUM_FULL; + if( 0==sqlite3StrICmp(z, "incremental") ) return BTREE_AUTOVACUUM_INCR; + i = sqlite3Atoi(z); + return (u8)((i>=0&&i<=2)?i:0); +} +#endif /* ifndef SQLITE_OMIT_AUTOVACUUM */ - /* Figure out the collation sequence required from an index for - ** it to be useful for optimising expression pX. Store this - ** value in variable pColl. - */ - assert(pX->pLeft); - pColl = sqlite3BinaryCompareCollSeq(pParse, pX->pLeft, pX->pRight); - assert(pColl || pParse->nErr); +#ifndef SQLITE_OMIT_PAGER_PRAGMAS +/* +** Interpret the given string as a temp db location. Return 1 for file +** backed temporary databases, 2 for the Red-Black tree in memory database +** and 0 to use the compile-time default. +*/ +static int getTempStore(const char *z){ + if( z[0]>='0' && z[0]<='2' ){ + return z[0] - '0'; + }else if( sqlite3StrICmp(z, "file")==0 ){ + return 1; + }else if( sqlite3StrICmp(z, "memory")==0 ){ + return 2; + }else{ + return 0; + } +} +#endif /* SQLITE_PAGER_PRAGMAS */ - for(j=0; pIdx->aiColumn[j]!=iColumn; j++){ - if( NEVER(j>=pIdx->nColumn) ) return 0; - } - if( pColl && sqlite3StrICmp(pColl->zName, pIdx->azColl[j]) ) continue; - } - return pTerm; +#ifndef SQLITE_OMIT_PAGER_PRAGMAS +/* +** Invalidate temp storage, either when the temp storage is changed +** from default, or when 'file' and the temp_store_directory has changed +*/ +static int invalidateTempStorage(Parse *pParse){ + sqlite3 *db = pParse->db; + if( db->aDb[1].pBt!=0 ){ + if( !db->autoCommit || sqlite3BtreeIsInReadTrans(db->aDb[1].pBt) ){ + sqlite3ErrorMsg(pParse, "temporary storage cannot be changed " + "from within a transaction"); + return SQLITE_ERROR; } + sqlite3BtreeClose(db->aDb[1].pBt); + db->aDb[1].pBt = 0; + sqlite3ResetAllSchemasOfConnection(db); } - return 0; + return SQLITE_OK; } +#endif /* SQLITE_PAGER_PRAGMAS */ -/* Forward reference */ -static void exprAnalyze(SrcList*, WhereClause*, int); +#ifndef SQLITE_OMIT_PAGER_PRAGMAS +/* +** If the TEMP database is open, close it and mark the database schema +** as needing reloading. This must be done when using the SQLITE_TEMP_STORE +** or DEFAULT_TEMP_STORE pragmas. +*/ +static int changeTempStorage(Parse *pParse, const char *zStorageType){ + int ts = getTempStore(zStorageType); + sqlite3 *db = pParse->db; + if( db->temp_store==ts ) return SQLITE_OK; + if( invalidateTempStorage( pParse ) != SQLITE_OK ){ + return SQLITE_ERROR; + } + db->temp_store = (u8)ts; + return SQLITE_OK; +} +#endif /* SQLITE_PAGER_PRAGMAS */ /* -** Call exprAnalyze on all terms in a WHERE clause. -** -** +** Generate code to return a single integer value. */ -static void exprAnalyzeAll( - SrcList *pTabList, /* the FROM clause */ - WhereClause *pWC /* the WHERE clause to be analyzed */ -){ - int i; - for(i=pWC->nTerm-1; i>=0; i--){ - exprAnalyze(pTabList, pWC, i); +static void returnSingleInt(Parse *pParse, const char *zLabel, i64 value){ + Vdbe *v = sqlite3GetVdbe(pParse); + int mem = ++pParse->nMem; + i64 *pI64 = sqlite3DbMallocRaw(pParse->db, sizeof(value)); + if( pI64 ){ + memcpy(pI64, &value, sizeof(value)); } + sqlite3VdbeAddOp4(v, OP_Int64, 0, mem, 0, (char*)pI64, P4_INT64); + sqlite3VdbeSetNumCols(v, 1); + sqlite3VdbeSetColName(v, 0, COLNAME_NAME, zLabel, SQLITE_STATIC); + sqlite3VdbeAddOp2(v, OP_ResultRow, mem, 1); } -#ifndef SQLITE_OMIT_LIKE_OPTIMIZATION +#ifndef SQLITE_OMIT_FLAG_PRAGMAS /* -** Check to see if the given expression is a LIKE or GLOB operator that -** can be optimized using inequality constraints. Return TRUE if it is -** so and false if not. -** -** In order for the operator to be optimizible, the RHS must be a string -** literal that does not begin with a wildcard. +** Check to see if zRight and zLeft refer to a pragma that queries +** or changes one of the flags in db->flags. Return 1 if so and 0 if not. +** Also, implement the pragma. */ -static int isLikeOrGlob( - Parse *pParse, /* Parsing and code generating context */ - Expr *pExpr, /* Test this expression */ - int *pnPattern, /* Number of non-wildcard prefix characters */ - int *pisComplete, /* True if the only wildcard is % in the last character */ - int *pnoCase /* True if uppercase is equivalent to lowercase */ -){ - const char *z; /* String on RHS of LIKE operator */ - Expr *pRight, *pLeft; /* Right and left size of LIKE operator */ - ExprList *pList; /* List of operands to the LIKE operator */ - int c; /* One character in z[] */ - int cnt; /* Number of non-wildcard prefix characters */ - char wc[3]; /* Wildcard characters */ - CollSeq *pColl; /* Collating sequence for LHS */ - sqlite3 *db = pParse->db; /* Database connection */ +static int flagPragma(Parse *pParse, const char *zLeft, const char *zRight){ + static const struct sPragmaType { + const char *zName; /* Name of the pragma */ + int mask; /* Mask for the db->flags value */ + } aPragma[] = { + { "full_column_names", SQLITE_FullColNames }, + { "short_column_names", SQLITE_ShortColNames }, + { "count_changes", SQLITE_CountRows }, + { "empty_result_callbacks", SQLITE_NullCallback }, + { "legacy_file_format", SQLITE_LegacyFileFmt }, + { "fullfsync", SQLITE_FullFSync }, + { "checkpoint_fullfsync", SQLITE_CkptFullFSync }, + { "reverse_unordered_selects", SQLITE_ReverseOrder }, +#ifndef SQLITE_OMIT_AUTOMATIC_INDEX + { "automatic_index", SQLITE_AutoIndex }, +#endif +#ifdef SQLITE_DEBUG + { "sql_trace", SQLITE_SqlTrace }, + { "vdbe_listing", SQLITE_VdbeListing }, + { "vdbe_trace", SQLITE_VdbeTrace }, +#endif +#ifndef SQLITE_OMIT_CHECK + { "ignore_check_constraints", SQLITE_IgnoreChecks }, +#endif + /* The following is VERY experimental */ + { "writable_schema", SQLITE_WriteSchema|SQLITE_RecoveryMode }, - if( !sqlite3IsLikeFunction(db, pExpr, pnoCase, wc) ){ - return 0; - } -#ifdef SQLITE_EBCDIC - if( *pnoCase ) return 0; + /* TODO: Maybe it shouldn't be possible to change the ReadUncommitted + ** flag if there are any active statements. */ + { "read_uncommitted", SQLITE_ReadUncommitted }, + { "recursive_triggers", SQLITE_RecTriggers }, + + /* This flag may only be set if both foreign-key and trigger support + ** are present in the build. */ +#if !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER) + { "foreign_keys", SQLITE_ForeignKeys }, #endif - pList = pExpr->x.pList; - pRight = pList->a[0].pExpr; - if( pRight->op!=TK_STRING ){ - return 0; - } - pLeft = pList->a[1].pExpr; - if( pLeft->op!=TK_COLUMN ){ - return 0; - } - pColl = sqlite3ExprCollSeq(pParse, pLeft); - assert( pColl!=0 || pLeft->iColumn==-1 ); - if( pColl==0 ) return 0; - if( (pColl->type!=SQLITE_COLL_BINARY || *pnoCase) && - (pColl->type!=SQLITE_COLL_NOCASE || !*pnoCase) ){ - return 0; - } - if( sqlite3ExprAffinity(pLeft)!=SQLITE_AFF_TEXT ) return 0; - z = pRight->u.zToken; - if( ALWAYS(z) ){ - cnt = 0; - while( (c=z[cnt])!=0 && c!=wc[0] && c!=wc[1] && c!=wc[2] ){ - cnt++; - } - if( cnt!=0 && c!=0 && 255!=(u8)z[cnt-1] ){ - *pisComplete = z[cnt]==wc[0] && z[cnt+1]==0; - *pnPattern = cnt; + }; + int i; + const struct sPragmaType *p; + for(i=0, p=aPragma; izName)==0 ){ + sqlite3 *db = pParse->db; + Vdbe *v; + v = sqlite3GetVdbe(pParse); + assert( v!=0 ); /* Already allocated by sqlite3Pragma() */ + if( ALWAYS(v) ){ + if( zRight==0 ){ + returnSingleInt(pParse, p->zName, (db->flags & p->mask)!=0 ); + }else{ + int mask = p->mask; /* Mask of bits to set or clear. */ + if( db->autoCommit==0 ){ + /* Foreign key support may not be enabled or disabled while not + ** in auto-commit mode. */ + mask &= ~(SQLITE_ForeignKeys); + } + + if( sqlite3GetBoolean(zRight, 0) ){ + db->flags |= mask; + }else{ + db->flags &= ~mask; + } + + /* Many of the flag-pragmas modify the code generated by the SQL + ** compiler (eg. count_changes). So add an opcode to expire all + ** compiled SQL statements after modifying a pragma value. + */ + sqlite3VdbeAddOp2(v, OP_Expire, 0, 0); + } + } + return 1; } } return 0; } -#endif /* SQLITE_OMIT_LIKE_OPTIMIZATION */ - +#endif /* SQLITE_OMIT_FLAG_PRAGMAS */ -#ifndef SQLITE_OMIT_VIRTUALTABLE /* -** Check to see if the given expression is of the form -** -** column MATCH expr -** -** If it is then return TRUE. If not, return FALSE. +** Return a human-readable name for a constraint resolution action. */ -static int isMatchOfColumn( - Expr *pExpr /* Test this expression */ -){ - ExprList *pList; - - if( pExpr->op!=TK_FUNCTION ){ - return 0; - } - if( sqlite3StrICmp(pExpr->u.zToken,"match")!=0 ){ - return 0; - } - pList = pExpr->x.pList; - if( pList->nExpr!=2 ){ - return 0; - } - if( pList->a[1].pExpr->op != TK_COLUMN ){ - return 0; +#ifndef SQLITE_OMIT_FOREIGN_KEY +static const char *actionName(u8 action){ + const char *zName; + switch( action ){ + case OE_SetNull: zName = "SET NULL"; break; + case OE_SetDflt: zName = "SET DEFAULT"; break; + case OE_Cascade: zName = "CASCADE"; break; + case OE_Restrict: zName = "RESTRICT"; break; + default: zName = "NO ACTION"; + assert( action==OE_None ); break; } - return 1; + return zName; } -#endif /* SQLITE_OMIT_VIRTUALTABLE */ +#endif + /* -** If the pBase expression originated in the ON or USING clause of -** a join, then transfer the appropriate markings over to derived. +** Parameter eMode must be one of the PAGER_JOURNALMODE_XXX constants +** defined in pager.h. This function returns the associated lowercase +** journal-mode name. */ -static void transferJoinMarkings(Expr *pDerived, Expr *pBase){ - pDerived->flags |= pBase->flags & EP_FromJoin; - pDerived->iRightJoinTable = pBase->iRightJoinTable; +SQLITE_PRIVATE const char *sqlite3JournalModename(int eMode){ + static char * const azModeName[] = { + "delete", "persist", "off", "truncate", "memory" +#ifndef SQLITE_OMIT_WAL + , "wal" +#endif + }; + assert( PAGER_JOURNALMODE_DELETE==0 ); + assert( PAGER_JOURNALMODE_PERSIST==1 ); + assert( PAGER_JOURNALMODE_OFF==2 ); + assert( PAGER_JOURNALMODE_TRUNCATE==3 ); + assert( PAGER_JOURNALMODE_MEMORY==4 ); + assert( PAGER_JOURNALMODE_WAL==5 ); + assert( eMode>=0 && eMode<=ArraySize(azModeName) ); + + if( eMode==ArraySize(azModeName) ) return 0; + return azModeName[eMode]; } -#if !defined(SQLITE_OMIT_OR_OPTIMIZATION) && !defined(SQLITE_OMIT_SUBQUERY) /* -** Analyze a term that consists of two or more OR-connected -** subterms. So in: -** -** ... WHERE (a=5) AND (b=7 OR c=9 OR d=13) AND (d=13) -** ^^^^^^^^^^^^^^^^^^^^ -** -** This routine analyzes terms such as the middle term in the above example. -** A WhereOrTerm object is computed and attached to the term under -** analysis, regardless of the outcome of the analysis. Hence: -** -** WhereTerm.wtFlags |= TERM_ORINFO -** WhereTerm.u.pOrInfo = a dynamically allocated WhereOrTerm object -** -** The term being analyzed must have two or more of OR-connected subterms. -** A single subterm might be a set of AND-connected sub-subterms. -** Examples of terms under analysis: +** Process a pragma statement. ** -** (A) t1.x=t2.y OR t1.x=t2.z OR t1.y=15 OR t1.z=t3.a+5 -** (B) x=expr1 OR expr2=x OR x=expr3 -** (C) t1.x=t2.y OR (t1.x=t2.z AND t1.y=15) -** (D) x=expr1 OR (y>11 AND y<22 AND z LIKE '*hello*') -** (E) (p.a=1 AND q.b=2 AND r.c=3) OR (p.x=4 AND q.y=5 AND r.z=6) +** Pragmas are of this form: ** -** CASE 1: +** PRAGMA [database.]id [= value] ** -** If all subterms are of the form T.C=expr for some single column of C -** a single table T (as shown in example B above) then create a new virtual -** term that is an equivalent IN expression. In other words, if the term -** being analyzed is: +** The identifier might also be a string. The value is a string, and +** identifier, or a number. If minusFlag is true, then the value is +** a number that was preceded by a minus sign. ** -** x = expr1 OR expr2 = x OR x = expr3 -** -** then create a new virtual term like this: -** -** x IN (expr1,expr2,expr3) -** -** CASE 2: -** -** If all subterms are indexable by a single table T, then set -** -** WhereTerm.eOperator = WO_OR -** WhereTerm.u.pOrInfo->indexable |= the cursor number for table T -** -** A subterm is "indexable" if it is of the form -** "T.C " where C is any column of table T and -** is one of "=", "<", "<=", ">", ">=", "IS NULL", or "IN". -** A subterm is also indexable if it is an AND of two or more -** subsubterms at least one of which is indexable. Indexable AND -** subterms have their eOperator set to WO_AND and they have -** u.pAndInfo set to a dynamically allocated WhereAndTerm object. -** -** From another point of view, "indexable" means that the subterm could -** potentially be used with an index if an appropriate index exists. -** This analysis does not consider whether or not the index exists; that -** is something the bestIndex() routine will determine. This analysis -** only looks at whether subterms appropriate for indexing exist. -** -** All examples A through E above all satisfy case 2. But if a term -** also statisfies case 1 (such as B) we know that the optimizer will -** always prefer case 1, so in that case we pretend that case 2 is not -** satisfied. -** -** It might be the case that multiple tables are indexable. For example, -** (E) above is indexable on tables P, Q, and R. -** -** Terms that satisfy case 2 are candidates for lookup by using -** separate indices to find rowids for each subterm and composing -** the union of all rowids using a RowSet object. This is similar -** to "bitmap indices" in other database engines. -** -** OTHERWISE: -** -** If neither case 1 nor case 2 apply, then leave the eOperator set to -** zero. This term is not useful for search. +** If the left side is "database.id" then pId1 is the database name +** and pId2 is the id. If the left side is just "id" then pId1 is the +** id and pId2 is any empty string. */ -static void exprAnalyzeOrTerm( - SrcList *pSrc, /* the FROM clause */ - WhereClause *pWC, /* the complete WHERE clause */ - int idxTerm /* Index of the OR-term to be analyzed */ +SQLITE_PRIVATE void sqlite3Pragma( + Parse *pParse, + Token *pId1, /* First part of [database.]id field */ + Token *pId2, /* Second part of [database.]id field, or NULL */ + Token *pValue, /* Token for , or NULL */ + int minusFlag /* True if a '-' sign preceded */ ){ - Parse *pParse = pWC->pParse; /* Parser context */ - sqlite3 *db = pParse->db; /* Database connection */ - WhereTerm *pTerm = &pWC->a[idxTerm]; /* The term to be analyzed */ - Expr *pExpr = pTerm->pExpr; /* The expression of the term */ - WhereMaskSet *pMaskSet = pWC->pMaskSet; /* Table use masks */ - int i; /* Loop counters */ - WhereClause *pOrWc; /* Breakup of pTerm into subterms */ - WhereTerm *pOrTerm; /* A Sub-term within the pOrWc */ - WhereOrInfo *pOrInfo; /* Additional information associated with pTerm */ - Bitmask chngToIN; /* Tables that might satisfy case 1 */ - Bitmask indexable; /* Tables that are indexable, satisfying case 2 */ + char *zLeft = 0; /* Nul-terminated UTF-8 string */ + char *zRight = 0; /* Nul-terminated UTF-8 string , or NULL */ + const char *zDb = 0; /* The database name */ + Token *pId; /* Pointer to token */ + int iDb; /* Database index for */ + char *aFcntl[4]; /* Argument to SQLITE_FCNTL_PRAGMA */ + int rc; /* return value form SQLITE_FCNTL_PRAGMA */ + sqlite3 *db = pParse->db; /* The database connection */ + Db *pDb; /* The specific database being pragmaed */ + Vdbe *v = pParse->pVdbe = sqlite3VdbeCreate(db); /* Prepared statement */ + + if( v==0 ) return; + sqlite3VdbeRunOnlyOnce(v); + pParse->nMem = 2; + + /* Interpret the [database.] part of the pragma statement. iDb is the + ** index of the database this pragma is being applied to in db.aDb[]. */ + iDb = sqlite3TwoPartName(pParse, pId1, pId2, &pId); + if( iDb<0 ) return; + pDb = &db->aDb[iDb]; + + /* If the temp database has been explicitly named as part of the + ** pragma, make sure it is open. + */ + if( iDb==1 && sqlite3OpenTempDatabase(pParse) ){ + return; + } + + zLeft = sqlite3NameFromToken(db, pId); + if( !zLeft ) return; + if( minusFlag ){ + zRight = sqlite3MPrintf(db, "-%T", pValue); + }else{ + zRight = sqlite3NameFromToken(db, pValue); + } + + assert( pId2 ); + zDb = pId2->n>0 ? pDb->zName : 0; + if( sqlite3AuthCheck(pParse, SQLITE_PRAGMA, zLeft, zRight, zDb) ){ + goto pragma_out; + } + /* Send an SQLITE_FCNTL_PRAGMA file-control to the underlying VFS + ** connection. If it returns SQLITE_OK, then assume that the VFS + ** handled the pragma and generate a no-op prepared statement. + */ + aFcntl[0] = 0; + aFcntl[1] = zLeft; + aFcntl[2] = zRight; + aFcntl[3] = 0; + rc = sqlite3_file_control(db, zDb, SQLITE_FCNTL_PRAGMA, (void*)aFcntl); + if( rc==SQLITE_OK ){ + if( aFcntl[0] ){ + int mem = ++pParse->nMem; + sqlite3VdbeAddOp4(v, OP_String8, 0, mem, 0, aFcntl[0], 0); + sqlite3VdbeSetNumCols(v, 1); + sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "result", SQLITE_STATIC); + sqlite3VdbeAddOp2(v, OP_ResultRow, mem, 1); + sqlite3_free(aFcntl[0]); + } + }else if( rc!=SQLITE_NOTFOUND ){ + if( aFcntl[0] ){ + sqlite3ErrorMsg(pParse, "%s", aFcntl[0]); + sqlite3_free(aFcntl[0]); + } + pParse->nErr++; + pParse->rc = rc; + }else + + +#if !defined(SQLITE_OMIT_PAGER_PRAGMAS) && !defined(SQLITE_OMIT_DEPRECATED) /* - ** Break the OR clause into its separate subterms. The subterms are - ** stored in a WhereClause structure containing within the WhereOrInfo - ** object that is attached to the original OR clause term. + ** PRAGMA [database.]default_cache_size + ** PRAGMA [database.]default_cache_size=N + ** + ** The first form reports the current persistent setting for the + ** page cache size. The value returned is the maximum number of + ** pages in the page cache. The second form sets both the current + ** page cache size value and the persistent page cache size value + ** stored in the database file. + ** + ** Older versions of SQLite would set the default cache size to a + ** negative number to indicate synchronous=OFF. These days, synchronous + ** is always on by default regardless of the sign of the default cache + ** size. But continue to take the absolute value of the default cache + ** size of historical compatibility. */ - assert( (pTerm->wtFlags & (TERM_DYNAMIC|TERM_ORINFO|TERM_ANDINFO))==0 ); - assert( pExpr->op==TK_OR ); - pTerm->u.pOrInfo = pOrInfo = sqlite3DbMallocZero(db, sizeof(*pOrInfo)); - if( pOrInfo==0 ) return; - pTerm->wtFlags |= TERM_ORINFO; - pOrWc = &pOrInfo->wc; - whereClauseInit(pOrWc, pWC->pParse, pMaskSet); - whereSplit(pOrWc, pExpr, TK_OR); - exprAnalyzeAll(pSrc, pOrWc); - if( db->mallocFailed ) return; - assert( pOrWc->nTerm>=2 ); + if( sqlite3StrICmp(zLeft,"default_cache_size")==0 ){ + static const VdbeOpList getCacheSize[] = { + { OP_Transaction, 0, 0, 0}, /* 0 */ + { OP_ReadCookie, 0, 1, BTREE_DEFAULT_CACHE_SIZE}, /* 1 */ + { OP_IfPos, 1, 7, 0}, + { OP_Integer, 0, 2, 0}, + { OP_Subtract, 1, 2, 1}, + { OP_IfPos, 1, 7, 0}, + { OP_Integer, 0, 1, 0}, /* 6 */ + { OP_ResultRow, 1, 1, 0}, + }; + int addr; + if( sqlite3ReadSchema(pParse) ) goto pragma_out; + sqlite3VdbeUsesBtree(v, iDb); + if( !zRight ){ + sqlite3VdbeSetNumCols(v, 1); + sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "cache_size", SQLITE_STATIC); + pParse->nMem += 2; + addr = sqlite3VdbeAddOpList(v, ArraySize(getCacheSize), getCacheSize); + sqlite3VdbeChangeP1(v, addr, iDb); + sqlite3VdbeChangeP1(v, addr+1, iDb); + sqlite3VdbeChangeP1(v, addr+6, SQLITE_DEFAULT_CACHE_SIZE); + }else{ + int size = sqlite3AbsInt32(sqlite3Atoi(zRight)); + sqlite3BeginWriteOperation(pParse, 0, iDb); + sqlite3VdbeAddOp2(v, OP_Integer, size, 1); + sqlite3VdbeAddOp3(v, OP_SetCookie, iDb, BTREE_DEFAULT_CACHE_SIZE, 1); + assert( sqlite3SchemaMutexHeld(db, iDb, 0) ); + pDb->pSchema->cache_size = size; + sqlite3BtreeSetCacheSize(pDb->pBt, pDb->pSchema->cache_size); + } + }else +#endif /* !SQLITE_OMIT_PAGER_PRAGMAS && !SQLITE_OMIT_DEPRECATED */ +#if !defined(SQLITE_OMIT_PAGER_PRAGMAS) /* - ** Compute the set of tables that might satisfy cases 1 or 2. + ** PRAGMA [database.]page_size + ** PRAGMA [database.]page_size=N + ** + ** The first form reports the current setting for the + ** database page size in bytes. The second form sets the + ** database page size value. The value can only be set if + ** the database has not yet been created. */ - indexable = ~(Bitmask)0; - chngToIN = ~(pWC->vmask); - for(i=pOrWc->nTerm-1, pOrTerm=pOrWc->a; i>=0 && indexable; i--, pOrTerm++){ - if( (pOrTerm->eOperator & WO_SINGLE)==0 ){ - WhereAndInfo *pAndInfo; - assert( pOrTerm->eOperator==0 ); - assert( (pOrTerm->wtFlags & (TERM_ANDINFO|TERM_ORINFO))==0 ); - chngToIN = 0; - pAndInfo = sqlite3DbMallocRaw(db, sizeof(*pAndInfo)); - if( pAndInfo ){ - WhereClause *pAndWC; - WhereTerm *pAndTerm; - int j; - Bitmask b = 0; - pOrTerm->u.pAndInfo = pAndInfo; - pOrTerm->wtFlags |= TERM_ANDINFO; - pOrTerm->eOperator = WO_AND; - pAndWC = &pAndInfo->wc; - whereClauseInit(pAndWC, pWC->pParse, pMaskSet); - whereSplit(pAndWC, pOrTerm->pExpr, TK_AND); - exprAnalyzeAll(pSrc, pAndWC); - testcase( db->mallocFailed ); - if( !db->mallocFailed ){ - for(j=0, pAndTerm=pAndWC->a; jnTerm; j++, pAndTerm++){ - assert( pAndTerm->pExpr ); - if( allowedOp(pAndTerm->pExpr->op) ){ - b |= getMask(pMaskSet, pAndTerm->leftCursor); - } - } - } - indexable &= b; - } - }else if( pOrTerm->wtFlags & TERM_COPIED ){ - /* Skip this term for now. We revisit it when we process the - ** corresponding TERM_VIRTUAL term */ + if( sqlite3StrICmp(zLeft,"page_size")==0 ){ + Btree *pBt = pDb->pBt; + assert( pBt!=0 ); + if( !zRight ){ + int size = ALWAYS(pBt) ? sqlite3BtreeGetPageSize(pBt) : 0; + returnSingleInt(pParse, "page_size", size); }else{ - Bitmask b; - b = getMask(pMaskSet, pOrTerm->leftCursor); - if( pOrTerm->wtFlags & TERM_VIRTUAL ){ - WhereTerm *pOther = &pOrWc->a[pOrTerm->iParent]; - b |= getMask(pMaskSet, pOther->leftCursor); - } - indexable &= b; - if( pOrTerm->eOperator!=WO_EQ ){ - chngToIN = 0; - }else{ - chngToIN &= b; + /* Malloc may fail when setting the page-size, as there is an internal + ** buffer that the pager module resizes using sqlite3_realloc(). + */ + db->nextPagesize = sqlite3Atoi(zRight); + if( SQLITE_NOMEM==sqlite3BtreeSetPageSize(pBt, db->nextPagesize,-1,0) ){ + db->mallocFailed = 1; } } - } + }else /* - ** Record the set of tables that satisfy case 2. The set might be - ** empty. + ** PRAGMA [database.]secure_delete + ** PRAGMA [database.]secure_delete=ON/OFF + ** + ** The first form reports the current setting for the + ** secure_delete flag. The second form changes the secure_delete + ** flag setting and reports thenew value. */ - pOrInfo->indexable = indexable; - pTerm->eOperator = indexable==0 ? 0 : WO_OR; + if( sqlite3StrICmp(zLeft,"secure_delete")==0 ){ + Btree *pBt = pDb->pBt; + int b = -1; + assert( pBt!=0 ); + if( zRight ){ + b = sqlite3GetBoolean(zRight, 0); + } + if( pId2->n==0 && b>=0 ){ + int ii; + for(ii=0; iinDb; ii++){ + sqlite3BtreeSecureDelete(db->aDb[ii].pBt, b); + } + } + b = sqlite3BtreeSecureDelete(pBt, b); + returnSingleInt(pParse, "secure_delete", b); + }else /* - ** chngToIN holds a set of tables that *might* satisfy case 1. But - ** we have to do some additional checking to see if case 1 really - ** is satisfied. + ** PRAGMA [database.]max_page_count + ** PRAGMA [database.]max_page_count=N ** - ** chngToIN will hold either 0, 1, or 2 bits. The 0-bit case means - ** that there is no possibility of transforming the OR clause into an - ** IN operator because one or more terms in the OR clause contain - ** something other than == on a column in the single table. The 1-bit - ** case means that every term of the OR clause is of the form - ** "table.column=expr" for some single table. The one bit that is set - ** will correspond to the common table. We still need to check to make - ** sure the same column is used on all terms. The 2-bit case is when - ** the all terms are of the form "table1.column=table2.column". It - ** might be possible to form an IN operator with either table1.column - ** or table2.column as the LHS if either is common to every term of - ** the OR clause. + ** The first form reports the current setting for the + ** maximum number of pages in the database file. The + ** second form attempts to change this setting. Both + ** forms return the current setting. ** - ** Note that terms of the form "table.column1=table.column2" (the - ** same table on both sizes of the ==) cannot be optimized. + ** The absolute value of N is used. This is undocumented and might + ** change. The only purpose is to provide an easy way to test + ** the sqlite3AbsInt32() function. + ** + ** PRAGMA [database.]page_count + ** + ** Return the number of pages in the specified database. */ - if( chngToIN ){ - int okToChngToIN = 0; /* True if the conversion to IN is valid */ - int iColumn = -1; /* Column index on lhs of IN operator */ - int iCursor = -1; /* Table cursor common to all terms */ - int j = 0; /* Loop counter */ + if( sqlite3StrICmp(zLeft,"page_count")==0 + || sqlite3StrICmp(zLeft,"max_page_count")==0 + ){ + int iReg; + if( sqlite3ReadSchema(pParse) ) goto pragma_out; + sqlite3CodeVerifySchema(pParse, iDb); + iReg = ++pParse->nMem; + if( sqlite3Tolower(zLeft[0])=='p' ){ + sqlite3VdbeAddOp2(v, OP_Pagecount, iDb, iReg); + }else{ + sqlite3VdbeAddOp3(v, OP_MaxPgcnt, iDb, iReg, + sqlite3AbsInt32(sqlite3Atoi(zRight))); + } + sqlite3VdbeAddOp2(v, OP_ResultRow, iReg, 1); + sqlite3VdbeSetNumCols(v, 1); + sqlite3VdbeSetColName(v, 0, COLNAME_NAME, zLeft, SQLITE_TRANSIENT); + }else - /* Search for a table and column that appears on one side or the - ** other of the == operator in every subterm. That table and column - ** will be recorded in iCursor and iColumn. There might not be any - ** such table and column. Set okToChngToIN if an appropriate table - ** and column is found but leave okToChngToIN false if not found. - */ - for(j=0; j<2 && !okToChngToIN; j++){ - pOrTerm = pOrWc->a; - for(i=pOrWc->nTerm-1; i>=0; i--, pOrTerm++){ - assert( pOrTerm->eOperator==WO_EQ ); - pOrTerm->wtFlags &= ~TERM_OR_OK; - if( pOrTerm->leftCursor==iCursor ){ - /* This is the 2-bit case and we are on the second iteration and - ** current term is from the first iteration. So skip this term. */ - assert( j==1 ); - continue; - } - if( (chngToIN & getMask(pMaskSet, pOrTerm->leftCursor))==0 ){ - /* This term must be of the form t1.a==t2.b where t2 is in the - ** chngToIN set but t1 is not. This term will be either preceeded - ** or follwed by an inverted copy (t2.b==t1.a). Skip this term - ** and use its inversion. */ - testcase( pOrTerm->wtFlags & TERM_COPIED ); - testcase( pOrTerm->wtFlags & TERM_VIRTUAL ); - assert( pOrTerm->wtFlags & (TERM_COPIED|TERM_VIRTUAL) ); - continue; - } - iColumn = pOrTerm->u.leftColumn; - iCursor = pOrTerm->leftCursor; - break; - } - if( i<0 ){ - /* No candidate table+column was found. This can only occur - ** on the second iteration */ - assert( j==1 ); - assert( (chngToIN&(chngToIN-1))==0 ); - assert( chngToIN==getMask(pMaskSet, iCursor) ); - break; - } - testcase( j==1 ); + /* + ** PRAGMA [database.]locking_mode + ** PRAGMA [database.]locking_mode = (normal|exclusive) + */ + if( sqlite3StrICmp(zLeft,"locking_mode")==0 ){ + const char *zRet = "normal"; + int eMode = getLockingMode(zRight); - /* We have found a candidate table and column. Check to see if that - ** table and column is common to every term in the OR clause */ - okToChngToIN = 1; - for(; i>=0 && okToChngToIN; i--, pOrTerm++){ - assert( pOrTerm->eOperator==WO_EQ ); - if( pOrTerm->leftCursor!=iCursor ){ - pOrTerm->wtFlags &= ~TERM_OR_OK; - }else if( pOrTerm->u.leftColumn!=iColumn ){ - okToChngToIN = 0; - }else{ - int affLeft, affRight; - /* If the right-hand side is also a column, then the affinities - ** of both right and left sides must be such that no type - ** conversions are required on the right. (Ticket #2249) - */ - affRight = sqlite3ExprAffinity(pOrTerm->pExpr->pRight); - affLeft = sqlite3ExprAffinity(pOrTerm->pExpr->pLeft); - if( affRight!=0 && affRight!=affLeft ){ - okToChngToIN = 0; - }else{ - pOrTerm->wtFlags |= TERM_OR_OK; - } + if( pId2->n==0 && eMode==PAGER_LOCKINGMODE_QUERY ){ + /* Simple "PRAGMA locking_mode;" statement. This is a query for + ** the current default locking mode (which may be different to + ** the locking-mode of the main database). + */ + eMode = db->dfltLockMode; + }else{ + Pager *pPager; + if( pId2->n==0 ){ + /* This indicates that no database name was specified as part + ** of the PRAGMA command. In this case the locking-mode must be + ** set on all attached databases, as well as the main db file. + ** + ** Also, the sqlite3.dfltLockMode variable is set so that + ** any subsequently attached databases also use the specified + ** locking mode. + */ + int ii; + assert(pDb==&db->aDb[0]); + for(ii=2; iinDb; ii++){ + pPager = sqlite3BtreePager(db->aDb[ii].pBt); + sqlite3PagerLockingMode(pPager, eMode); } + db->dfltLockMode = (u8)eMode; } + pPager = sqlite3BtreePager(pDb->pBt); + eMode = sqlite3PagerLockingMode(pPager, eMode); } - /* At this point, okToChngToIN is true if original pTerm satisfies - ** case 1. In that case, construct a new virtual term that is - ** pTerm converted into an IN operator. - */ - if( okToChngToIN ){ - Expr *pDup; /* A transient duplicate expression */ - ExprList *pList = 0; /* The RHS of the IN operator */ - Expr *pLeft = 0; /* The LHS of the IN operator */ - Expr *pNew; /* The complete IN operator */ + assert(eMode==PAGER_LOCKINGMODE_NORMAL||eMode==PAGER_LOCKINGMODE_EXCLUSIVE); + if( eMode==PAGER_LOCKINGMODE_EXCLUSIVE ){ + zRet = "exclusive"; + } + sqlite3VdbeSetNumCols(v, 1); + sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "locking_mode", SQLITE_STATIC); + sqlite3VdbeAddOp4(v, OP_String8, 0, 1, 0, zRet, 0); + sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 1); + }else - for(i=pOrWc->nTerm-1, pOrTerm=pOrWc->a; i>=0; i--, pOrTerm++){ - if( (pOrTerm->wtFlags & TERM_OR_OK)==0 ) continue; - assert( pOrTerm->eOperator==WO_EQ ); - assert( pOrTerm->leftCursor==iCursor ); - assert( pOrTerm->u.leftColumn==iColumn ); - pDup = sqlite3ExprDup(db, pOrTerm->pExpr->pRight, 0); - pList = sqlite3ExprListAppend(pWC->pParse, pList, pDup); - pLeft = pOrTerm->pExpr->pLeft; + /* + ** PRAGMA [database.]journal_mode + ** PRAGMA [database.]journal_mode = + ** (delete|persist|off|truncate|memory|wal|off) + */ + if( sqlite3StrICmp(zLeft,"journal_mode")==0 ){ + int eMode; /* One of the PAGER_JOURNALMODE_XXX symbols */ + int ii; /* Loop counter */ + + /* Force the schema to be loaded on all databases. This causes all + ** database files to be opened and the journal_modes set. This is + ** necessary because subsequent processing must know if the databases + ** are in WAL mode. */ + if( sqlite3ReadSchema(pParse) ){ + goto pragma_out; + } + + sqlite3VdbeSetNumCols(v, 1); + sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "journal_mode", SQLITE_STATIC); + + if( zRight==0 ){ + /* If there is no "=MODE" part of the pragma, do a query for the + ** current mode */ + eMode = PAGER_JOURNALMODE_QUERY; + }else{ + const char *zMode; + int n = sqlite3Strlen30(zRight); + for(eMode=0; (zMode = sqlite3JournalModename(eMode))!=0; eMode++){ + if( sqlite3StrNICmp(zRight, zMode, n)==0 ) break; } - assert( pLeft!=0 ); - pDup = sqlite3ExprDup(db, pLeft, 0); - pNew = sqlite3PExpr(pParse, TK_IN, pDup, 0, 0); - if( pNew ){ - int idxNew; - transferJoinMarkings(pNew, pExpr); - assert( !ExprHasProperty(pNew, EP_xIsSelect) ); - pNew->x.pList = pList; - idxNew = whereClauseInsert(pWC, pNew, TERM_VIRTUAL|TERM_DYNAMIC); - testcase( idxNew==0 ); - exprAnalyze(pSrc, pWC, idxNew); - pTerm = &pWC->a[idxTerm]; - pWC->a[idxNew].iParent = idxTerm; - pTerm->nChild = 1; - }else{ - sqlite3ExprListDelete(db, pList); + if( !zMode ){ + /* If the "=MODE" part does not match any known journal mode, + ** then do a query */ + eMode = PAGER_JOURNALMODE_QUERY; } - pTerm->eOperator = 0; /* case 1 trumps case 2 */ } - } -} -#endif /* !SQLITE_OMIT_OR_OPTIMIZATION && !SQLITE_OMIT_SUBQUERY */ + if( eMode==PAGER_JOURNALMODE_QUERY && pId2->n==0 ){ + /* Convert "PRAGMA journal_mode" into "PRAGMA main.journal_mode" */ + iDb = 0; + pId2->n = 1; + } + for(ii=db->nDb-1; ii>=0; ii--){ + if( db->aDb[ii].pBt && (ii==iDb || pId2->n==0) ){ + sqlite3VdbeUsesBtree(v, ii); + sqlite3VdbeAddOp3(v, OP_JournalMode, ii, 1, eMode); + } + } + sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 1); + }else + /* + ** PRAGMA [database.]journal_size_limit + ** PRAGMA [database.]journal_size_limit=N + ** + ** Get or set the size limit on rollback journal files. + */ + if( sqlite3StrICmp(zLeft,"journal_size_limit")==0 ){ + Pager *pPager = sqlite3BtreePager(pDb->pBt); + i64 iLimit = -2; + if( zRight ){ + sqlite3Atoi64(zRight, &iLimit, 1000000, SQLITE_UTF8); + if( iLimit<-1 ) iLimit = -1; + } + iLimit = sqlite3PagerJournalSizeLimit(pPager, iLimit); + returnSingleInt(pParse, "journal_size_limit", iLimit); + }else -/* -** The input to this routine is an WhereTerm structure with only the -** "pExpr" field filled in. The job of this routine is to analyze the -** subexpression and populate all the other fields of the WhereTerm -** structure. -** -** If the expression is of the form " X" it gets commuted -** to the standard form of "X ". -** -** If the expression is of the form "X Y" where both X and Y are -** columns, then the original expression is unchanged and a new virtual -** term of the form "Y X" is added to the WHERE clause and -** analyzed separately. The original term is marked with TERM_COPIED -** and the new term is marked with TERM_DYNAMIC (because it's pExpr -** needs to be freed with the WhereClause) and TERM_VIRTUAL (because it -** is a commuted copy of a prior term.) The original term has nChild=1 -** and the copy has idxParent set to the index of the original term. -*/ -static void exprAnalyze( - SrcList *pSrc, /* the FROM clause */ - WhereClause *pWC, /* the WHERE clause */ - int idxTerm /* Index of the term to be analyzed */ -){ - WhereTerm *pTerm; /* The term to be analyzed */ - WhereMaskSet *pMaskSet; /* Set of table index masks */ - Expr *pExpr; /* The expression to be analyzed */ - Bitmask prereqLeft; /* Prerequesites of the pExpr->pLeft */ - Bitmask prereqAll; /* Prerequesites of pExpr */ - Bitmask extraRight = 0; - int nPattern; - int isComplete; - int noCase; - int op; /* Top-level operator. pExpr->op */ - Parse *pParse = pWC->pParse; /* Parsing context */ - sqlite3 *db = pParse->db; /* Database connection */ +#endif /* SQLITE_OMIT_PAGER_PRAGMAS */ - if( db->mallocFailed ){ - return; - } - pTerm = &pWC->a[idxTerm]; - pMaskSet = pWC->pMaskSet; - pExpr = pTerm->pExpr; - prereqLeft = exprTableUsage(pMaskSet, pExpr->pLeft); - op = pExpr->op; - if( op==TK_IN ){ - assert( pExpr->pRight==0 ); - if( ExprHasProperty(pExpr, EP_xIsSelect) ){ - pTerm->prereqRight = exprSelectTableUsage(pMaskSet, pExpr->x.pSelect); - }else{ - pTerm->prereqRight = exprListTableUsage(pMaskSet, pExpr->x.pList); + /* + ** PRAGMA [database.]auto_vacuum + ** PRAGMA [database.]auto_vacuum=N + ** + ** Get or set the value of the database 'auto-vacuum' parameter. + ** The value is one of: 0 NONE 1 FULL 2 INCREMENTAL + */ +#ifndef SQLITE_OMIT_AUTOVACUUM + if( sqlite3StrICmp(zLeft,"auto_vacuum")==0 ){ + Btree *pBt = pDb->pBt; + assert( pBt!=0 ); + if( sqlite3ReadSchema(pParse) ){ + goto pragma_out; } - }else if( op==TK_ISNULL ){ - pTerm->prereqRight = 0; - }else{ - pTerm->prereqRight = exprTableUsage(pMaskSet, pExpr->pRight); - } - prereqAll = exprTableUsage(pMaskSet, pExpr); - if( ExprHasProperty(pExpr, EP_FromJoin) ){ - Bitmask x = getMask(pMaskSet, pExpr->iRightJoinTable); - prereqAll |= x; - extraRight = x-1; /* ON clause terms may not be used with an index - ** on left table of a LEFT JOIN. Ticket #3015 */ - } - pTerm->prereqAll = prereqAll; - pTerm->leftCursor = -1; - pTerm->iParent = -1; - pTerm->eOperator = 0; - if( allowedOp(op) && (pTerm->prereqRight & prereqLeft)==0 ){ - Expr *pLeft = pExpr->pLeft; - Expr *pRight = pExpr->pRight; - if( pLeft->op==TK_COLUMN ){ - pTerm->leftCursor = pLeft->iTable; - pTerm->u.leftColumn = pLeft->iColumn; - pTerm->eOperator = operatorMask(op); - } - if( pRight && pRight->op==TK_COLUMN ){ - WhereTerm *pNew; - Expr *pDup; - if( pTerm->leftCursor>=0 ){ - int idxNew; - pDup = sqlite3ExprDup(db, pExpr, 0); - if( db->mallocFailed ){ - sqlite3ExprDelete(db, pDup); - return; - } - idxNew = whereClauseInsert(pWC, pDup, TERM_VIRTUAL|TERM_DYNAMIC); - if( idxNew==0 ) return; - pNew = &pWC->a[idxNew]; - pNew->iParent = idxTerm; - pTerm = &pWC->a[idxTerm]; - pTerm->nChild = 1; - pTerm->wtFlags |= TERM_COPIED; + if( !zRight ){ + int auto_vacuum; + if( ALWAYS(pBt) ){ + auto_vacuum = sqlite3BtreeGetAutoVacuum(pBt); }else{ - pDup = pExpr; - pNew = pTerm; + auto_vacuum = SQLITE_DEFAULT_AUTOVACUUM; + } + returnSingleInt(pParse, "auto_vacuum", auto_vacuum); + }else{ + int eAuto = getAutoVacuum(zRight); + assert( eAuto>=0 && eAuto<=2 ); + db->nextAutovac = (u8)eAuto; + if( ALWAYS(eAuto>=0) ){ + /* Call SetAutoVacuum() to set initialize the internal auto and + ** incr-vacuum flags. This is required in case this connection + ** creates the database file. It is important that it is created + ** as an auto-vacuum capable db. + */ + rc = sqlite3BtreeSetAutoVacuum(pBt, eAuto); + if( rc==SQLITE_OK && (eAuto==1 || eAuto==2) ){ + /* When setting the auto_vacuum mode to either "full" or + ** "incremental", write the value of meta[6] in the database + ** file. Before writing to meta[6], check that meta[3] indicates + ** that this really is an auto-vacuum capable database. + */ + static const VdbeOpList setMeta6[] = { + { OP_Transaction, 0, 1, 0}, /* 0 */ + { OP_ReadCookie, 0, 1, BTREE_LARGEST_ROOT_PAGE}, + { OP_If, 1, 0, 0}, /* 2 */ + { OP_Halt, SQLITE_OK, OE_Abort, 0}, /* 3 */ + { OP_Integer, 0, 1, 0}, /* 4 */ + { OP_SetCookie, 0, BTREE_INCR_VACUUM, 1}, /* 5 */ + }; + int iAddr; + iAddr = sqlite3VdbeAddOpList(v, ArraySize(setMeta6), setMeta6); + sqlite3VdbeChangeP1(v, iAddr, iDb); + sqlite3VdbeChangeP1(v, iAddr+1, iDb); + sqlite3VdbeChangeP2(v, iAddr+2, iAddr+4); + sqlite3VdbeChangeP1(v, iAddr+4, eAuto-1); + sqlite3VdbeChangeP1(v, iAddr+5, iDb); + sqlite3VdbeUsesBtree(v, iDb); + } } - exprCommute(pParse, pDup); - pLeft = pDup->pLeft; - pNew->leftCursor = pLeft->iTable; - pNew->u.leftColumn = pLeft->iColumn; - pNew->prereqRight = prereqLeft; - pNew->prereqAll = prereqAll; - pNew->eOperator = operatorMask(pDup->op); } - } + }else +#endif -#ifndef SQLITE_OMIT_BETWEEN_OPTIMIZATION - /* If a term is the BETWEEN operator, create two new virtual terms - ** that define the range that the BETWEEN implements. For example: - ** - ** a BETWEEN b AND c - ** - ** is converted into: - ** - ** (a BETWEEN b AND c) AND (a>=b) AND (a<=c) + /* + ** PRAGMA [database.]incremental_vacuum(N) ** - ** The two new terms are added onto the end of the WhereClause object. - ** The new terms are "dynamic" and are children of the original BETWEEN - ** term. That means that if the BETWEEN term is coded, the children are - ** skipped. Or, if the children are satisfied by an index, the original - ** BETWEEN term is skipped. + ** Do N steps of incremental vacuuming on a database. */ - else if( pExpr->op==TK_BETWEEN && pWC->op==TK_AND ){ - ExprList *pList = pExpr->x.pList; - int i; - static const u8 ops[] = {TK_GE, TK_LE}; - assert( pList!=0 ); - assert( pList->nExpr==2 ); - for(i=0; i<2; i++){ - Expr *pNewExpr; - int idxNew; - pNewExpr = sqlite3PExpr(pParse, ops[i], - sqlite3ExprDup(db, pExpr->pLeft, 0), - sqlite3ExprDup(db, pList->a[i].pExpr, 0), 0); - idxNew = whereClauseInsert(pWC, pNewExpr, TERM_VIRTUAL|TERM_DYNAMIC); - testcase( idxNew==0 ); - exprAnalyze(pSrc, pWC, idxNew); - pTerm = &pWC->a[idxTerm]; - pWC->a[idxNew].iParent = idxTerm; +#ifndef SQLITE_OMIT_AUTOVACUUM + if( sqlite3StrICmp(zLeft,"incremental_vacuum")==0 ){ + int iLimit, addr; + if( sqlite3ReadSchema(pParse) ){ + goto pragma_out; } - pTerm->nChild = 2; - } -#endif /* SQLITE_OMIT_BETWEEN_OPTIMIZATION */ - -#if !defined(SQLITE_OMIT_OR_OPTIMIZATION) && !defined(SQLITE_OMIT_SUBQUERY) - /* Analyze a term that is composed of two or more subterms connected by - ** an OR operator. - */ - else if( pExpr->op==TK_OR ){ - assert( pWC->op==TK_AND ); - exprAnalyzeOrTerm(pSrc, pWC, idxTerm); - } -#endif /* SQLITE_OMIT_OR_OPTIMIZATION */ + if( zRight==0 || !sqlite3GetInt32(zRight, &iLimit) || iLimit<=0 ){ + iLimit = 0x7fffffff; + } + sqlite3BeginWriteOperation(pParse, 0, iDb); + sqlite3VdbeAddOp2(v, OP_Integer, iLimit, 1); + addr = sqlite3VdbeAddOp1(v, OP_IncrVacuum, iDb); + sqlite3VdbeAddOp1(v, OP_ResultRow, 1); + sqlite3VdbeAddOp2(v, OP_AddImm, 1, -1); + sqlite3VdbeAddOp2(v, OP_IfPos, 1, addr); + sqlite3VdbeJumpHere(v, addr); + }else +#endif -#ifndef SQLITE_OMIT_LIKE_OPTIMIZATION - /* Add constraints to reduce the search space on a LIKE or GLOB - ** operator. - ** - ** A like pattern of the form "x LIKE 'abc%'" is changed into constraints - ** - ** x>='abc' AND x<'abd' AND x LIKE 'abc%' +#ifndef SQLITE_OMIT_PAGER_PRAGMAS + /* + ** PRAGMA [database.]cache_size + ** PRAGMA [database.]cache_size=N ** - ** The last character of the prefix "abc" is incremented to form the - ** termination condition "abd". + ** The first form reports the current local setting for the + ** page cache size. The second form sets the local + ** page cache size value. If N is positive then that is the + ** number of pages in the cache. If N is negative, then the + ** number of pages is adjusted so that the cache uses -N kibibytes + ** of memory. */ - if( isLikeOrGlob(pParse, pExpr, &nPattern, &isComplete, &noCase) - && pWC->op==TK_AND ){ - Expr *pLeft, *pRight; - Expr *pStr1, *pStr2; - Expr *pNewExpr1, *pNewExpr2; - int idxNew1, idxNew2; - - pLeft = pExpr->x.pList->a[1].pExpr; - pRight = pExpr->x.pList->a[0].pExpr; - pStr1 = sqlite3Expr(db, TK_STRING, pRight->u.zToken); - if( pStr1 ) pStr1->u.zToken[nPattern] = 0; - pStr2 = sqlite3ExprDup(db, pStr1, 0); - if( !db->mallocFailed ){ - u8 c, *pC; /* Last character before the first wildcard */ - pC = (u8*)&pStr2->u.zToken[nPattern-1]; - c = *pC; - if( noCase ){ - /* The point is to increment the last character before the first - ** wildcard. But if we increment '@', that will push it into the - ** alphabetic range where case conversions will mess up the - ** inequality. To avoid this, make sure to also run the full - ** LIKE on all candidate expressions by clearing the isComplete flag - */ - if( c=='A'-1 ) isComplete = 0; - - c = sqlite3UpperToLower[c]; - } - *pC = c + 1; - } - pNewExpr1 = sqlite3PExpr(pParse, TK_GE, sqlite3ExprDup(db,pLeft,0),pStr1,0); - idxNew1 = whereClauseInsert(pWC, pNewExpr1, TERM_VIRTUAL|TERM_DYNAMIC); - testcase( idxNew1==0 ); - exprAnalyze(pSrc, pWC, idxNew1); - pNewExpr2 = sqlite3PExpr(pParse, TK_LT, sqlite3ExprDup(db,pLeft,0),pStr2,0); - idxNew2 = whereClauseInsert(pWC, pNewExpr2, TERM_VIRTUAL|TERM_DYNAMIC); - testcase( idxNew2==0 ); - exprAnalyze(pSrc, pWC, idxNew2); - pTerm = &pWC->a[idxTerm]; - if( isComplete ){ - pWC->a[idxNew1].iParent = idxTerm; - pWC->a[idxNew2].iParent = idxTerm; - pTerm->nChild = 2; + if( sqlite3StrICmp(zLeft,"cache_size")==0 ){ + if( sqlite3ReadSchema(pParse) ) goto pragma_out; + assert( sqlite3SchemaMutexHeld(db, iDb, 0) ); + if( !zRight ){ + returnSingleInt(pParse, "cache_size", pDb->pSchema->cache_size); + }else{ + int size = sqlite3Atoi(zRight); + pDb->pSchema->cache_size = size; + sqlite3BtreeSetCacheSize(pDb->pBt, pDb->pSchema->cache_size); } - } -#endif /* SQLITE_OMIT_LIKE_OPTIMIZATION */ + }else -#ifndef SQLITE_OMIT_VIRTUALTABLE - /* Add a WO_MATCH auxiliary term to the constraint set if the - ** current expression is of the form: column MATCH expr. - ** This information is used by the xBestIndex methods of - ** virtual tables. The native query optimizer does not attempt - ** to do anything with MATCH functions. + /* + ** PRAGMA temp_store + ** PRAGMA temp_store = "default"|"memory"|"file" + ** + ** Return or set the local value of the temp_store flag. Changing + ** the local value does not make changes to the disk file and the default + ** value will be restored the next time the database is opened. + ** + ** Note that it is possible for the library compile-time options to + ** override this setting */ - if( isMatchOfColumn(pExpr) ){ - int idxNew; - Expr *pRight, *pLeft; - WhereTerm *pNewTerm; - Bitmask prereqColumn, prereqExpr; - - pRight = pExpr->x.pList->a[0].pExpr; - pLeft = pExpr->x.pList->a[1].pExpr; - prereqExpr = exprTableUsage(pMaskSet, pRight); - prereqColumn = exprTableUsage(pMaskSet, pLeft); - if( (prereqExpr & prereqColumn)==0 ){ - Expr *pNewExpr; - pNewExpr = sqlite3PExpr(pParse, TK_MATCH, - 0, sqlite3ExprDup(db, pRight, 0), 0); - idxNew = whereClauseInsert(pWC, pNewExpr, TERM_VIRTUAL|TERM_DYNAMIC); - testcase( idxNew==0 ); - pNewTerm = &pWC->a[idxNew]; - pNewTerm->prereqRight = prereqExpr; - pNewTerm->leftCursor = pLeft->iTable; - pNewTerm->u.leftColumn = pLeft->iColumn; - pNewTerm->eOperator = WO_MATCH; - pNewTerm->iParent = idxTerm; - pTerm = &pWC->a[idxTerm]; - pTerm->nChild = 1; - pTerm->wtFlags |= TERM_COPIED; - pNewTerm->prereqAll = pTerm->prereqAll; + if( sqlite3StrICmp(zLeft, "temp_store")==0 ){ + if( !zRight ){ + returnSingleInt(pParse, "temp_store", db->temp_store); + }else{ + changeTempStorage(pParse, zRight); } - } -#endif /* SQLITE_OMIT_VIRTUALTABLE */ + }else - /* Prevent ON clause terms of a LEFT JOIN from being used to drive - ** an index for tables to the left of the join. + /* + ** PRAGMA temp_store_directory + ** PRAGMA temp_store_directory = ""|"directory_name" + ** + ** Return or set the local value of the temp_store_directory flag. Changing + ** the value sets a specific directory to be used for temporary files. + ** Setting to a null string reverts to the default temporary directory search. + ** If temporary directory is changed, then invalidateTempStorage. + ** */ - pTerm->prereqRight |= extraRight; -} - -/* -** Return TRUE if any of the expressions in pList->a[iFirst...] contain -** a reference to any table other than the iBase table. -*/ -static int referencesOtherTables( - ExprList *pList, /* Search expressions in ths list */ - WhereMaskSet *pMaskSet, /* Mapping from tables to bitmaps */ - int iFirst, /* Be searching with the iFirst-th expression */ - int iBase /* Ignore references to this table */ -){ - Bitmask allowed = ~getMask(pMaskSet, iBase); - while( iFirstnExpr ){ - if( (exprTableUsage(pMaskSet, pList->a[iFirst++].pExpr)&allowed)!=0 ){ - return 1; + if( sqlite3StrICmp(zLeft, "temp_store_directory")==0 ){ + if( !zRight ){ + if( sqlite3_temp_directory ){ + sqlite3VdbeSetNumCols(v, 1); + sqlite3VdbeSetColName(v, 0, COLNAME_NAME, + "temp_store_directory", SQLITE_STATIC); + sqlite3VdbeAddOp4(v, OP_String8, 0, 1, 0, sqlite3_temp_directory, 0); + sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 1); + } + }else{ +#ifndef SQLITE_OMIT_WSD + if( zRight[0] ){ + int res; + rc = sqlite3OsAccess(db->pVfs, zRight, SQLITE_ACCESS_READWRITE, &res); + if( rc!=SQLITE_OK || res==0 ){ + sqlite3ErrorMsg(pParse, "not a writable directory"); + goto pragma_out; + } + } + if( SQLITE_TEMP_STORE==0 + || (SQLITE_TEMP_STORE==1 && db->temp_store<=1) + || (SQLITE_TEMP_STORE==2 && db->temp_store==1) + ){ + invalidateTempStorage(pParse); + } + sqlite3_free(sqlite3_temp_directory); + if( zRight[0] ){ + sqlite3_temp_directory = sqlite3_mprintf("%s", zRight); + }else{ + sqlite3_temp_directory = 0; + } +#endif /* SQLITE_OMIT_WSD */ } - } - return 0; -} - - -/* -** This routine decides if pIdx can be used to satisfy the ORDER BY -** clause. If it can, it returns 1. If pIdx cannot satisfy the -** ORDER BY clause, this routine returns 0. -** -** pOrderBy is an ORDER BY clause from a SELECT statement. pTab is the -** left-most table in the FROM clause of that same SELECT statement and -** the table has a cursor number of "base". pIdx is an index on pTab. -** -** nEqCol is the number of columns of pIdx that are used as equality -** constraints. Any of these columns may be missing from the ORDER BY -** clause and the match can still be a success. -** -** All terms of the ORDER BY that match against the index must be either -** ASC or DESC. (Terms of the ORDER BY clause past the end of a UNIQUE -** index do not need to satisfy this constraint.) The *pbRev value is -** set to 1 if the ORDER BY clause is all DESC and it is set to 0 if -** the ORDER BY clause is all ASC. -*/ -static int isSortingIndex( - Parse *pParse, /* Parsing context */ - WhereMaskSet *pMaskSet, /* Mapping from table cursor numbers to bitmaps */ - Index *pIdx, /* The index we are testing */ - int base, /* Cursor number for the table to be sorted */ - ExprList *pOrderBy, /* The ORDER BY clause */ - int nEqCol, /* Number of index columns with == constraints */ - int *pbRev /* Set to 1 if ORDER BY is DESC */ -){ - int i, j; /* Loop counters */ - int sortOrder = 0; /* XOR of index and ORDER BY sort direction */ - int nTerm; /* Number of ORDER BY terms */ - struct ExprList_item *pTerm; /* A term of the ORDER BY clause */ - sqlite3 *db = pParse->db; - - assert( pOrderBy!=0 ); - nTerm = pOrderBy->nExpr; - assert( nTerm>0 ); + }else - /* Match terms of the ORDER BY clause against columns of - ** the index. +#if SQLITE_OS_WIN + /* + ** PRAGMA data_store_directory + ** PRAGMA data_store_directory = ""|"directory_name" + ** + ** Return or set the local value of the data_store_directory flag. Changing + ** the value sets a specific directory to be used for database files that + ** were specified with a relative pathname. Setting to a null string reverts + ** to the default database directory, which for database files specified with + ** a relative path will probably be based on the current directory for the + ** process. Database file specified with an absolute path are not impacted + ** by this setting, regardless of its value. ** - ** Note that indices have pIdx->nColumn regular columns plus - ** one additional column containing the rowid. The rowid column - ** of the index is also allowed to match against the ORDER BY - ** clause. */ - for(i=j=0, pTerm=pOrderBy->a; jnColumn; i++){ - Expr *pExpr; /* The expression of the ORDER BY pTerm */ - CollSeq *pColl; /* The collating sequence of pExpr */ - int termSortOrder; /* Sort order for this term */ - int iColumn; /* The i-th column of the index. -1 for rowid */ - int iSortOrder; /* 1 for DESC, 0 for ASC on the i-th index term */ - const char *zColl; /* Name of the collating sequence for i-th index term */ - - pExpr = pTerm->pExpr; - if( pExpr->op!=TK_COLUMN || pExpr->iTable!=base ){ - /* Can not use an index sort on anything that is not a column in the - ** left-most table of the FROM clause */ - break; - } - pColl = sqlite3ExprCollSeq(pParse, pExpr); - if( !pColl ){ - pColl = db->pDfltColl; - } - if( inColumn ){ - iColumn = pIdx->aiColumn[i]; - if( iColumn==pIdx->pTable->iPKey ){ - iColumn = -1; + if( sqlite3StrICmp(zLeft, "data_store_directory")==0 ){ + if( !zRight ){ + if( sqlite3_data_directory ){ + sqlite3VdbeSetNumCols(v, 1); + sqlite3VdbeSetColName(v, 0, COLNAME_NAME, + "data_store_directory", SQLITE_STATIC); + sqlite3VdbeAddOp4(v, OP_String8, 0, 1, 0, sqlite3_data_directory, 0); + sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 1); } - iSortOrder = pIdx->aSortOrder[i]; - zColl = pIdx->azColl[i]; }else{ - iColumn = -1; - iSortOrder = 0; - zColl = pColl->zName; - } - if( pExpr->iColumn!=iColumn || sqlite3StrICmp(pColl->zName, zColl) ){ - /* Term j of the ORDER BY clause does not match column i of the index */ - if( inColumn ){ - /* Index column i is the rowid. All other terms match. */ - break; +#ifndef SQLITE_OMIT_WSD + if( zRight[0] ){ + int res; + rc = sqlite3OsAccess(db->pVfs, zRight, SQLITE_ACCESS_READWRITE, &res); + if( rc!=SQLITE_OK || res==0 ){ + sqlite3ErrorMsg(pParse, "not a writable directory"); + goto pragma_out; + } + } + sqlite3_free(sqlite3_data_directory); + if( zRight[0] ){ + sqlite3_data_directory = sqlite3_mprintf("%s", zRight); }else{ - /* If an index column fails to match and is not constrained by == - ** then the index cannot satisfy the ORDER BY constraint. - */ - return 0; + sqlite3_data_directory = 0; } +#endif /* SQLITE_OMIT_WSD */ } - assert( pIdx->aSortOrder!=0 ); - assert( pTerm->sortOrder==0 || pTerm->sortOrder==1 ); - assert( iSortOrder==0 || iSortOrder==1 ); - termSortOrder = iSortOrder ^ pTerm->sortOrder; - if( i>nEqCol ){ - if( termSortOrder!=sortOrder ){ - /* Indices can only be used if all ORDER BY terms past the - ** equality constraints are all either DESC or ASC. */ - return 0; + }else +#endif + +#if !defined(SQLITE_ENABLE_LOCKING_STYLE) +# if defined(__APPLE__) +# define SQLITE_ENABLE_LOCKING_STYLE 1 +# else +# define SQLITE_ENABLE_LOCKING_STYLE 0 +# endif +#endif +#if SQLITE_ENABLE_LOCKING_STYLE + /* + ** PRAGMA [database.]lock_proxy_file + ** PRAGMA [database.]lock_proxy_file = ":auto:"|"lock_file_path" + ** + ** Return or set the value of the lock_proxy_file flag. Changing + ** the value sets a specific file to be used for database access locks. + ** + */ + if( sqlite3StrICmp(zLeft, "lock_proxy_file")==0 ){ + if( !zRight ){ + Pager *pPager = sqlite3BtreePager(pDb->pBt); + char *proxy_file_path = NULL; + sqlite3_file *pFile = sqlite3PagerFile(pPager); + sqlite3OsFileControlHint(pFile, SQLITE_GET_LOCKPROXYFILE, + &proxy_file_path); + + if( proxy_file_path ){ + sqlite3VdbeSetNumCols(v, 1); + sqlite3VdbeSetColName(v, 0, COLNAME_NAME, + "lock_proxy_file", SQLITE_STATIC); + sqlite3VdbeAddOp4(v, OP_String8, 0, 1, 0, proxy_file_path, 0); + sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 1); } }else{ - sortOrder = termSortOrder; - } - j++; - pTerm++; - if( iColumn<0 && !referencesOtherTables(pOrderBy, pMaskSet, j, base) ){ - /* If the indexed column is the primary key and everything matches - ** so far and none of the ORDER BY terms to the right reference other - ** tables in the join, then we are assured that the index can be used - ** to sort because the primary key is unique and so none of the other - ** columns will make any difference - */ - j = nTerm; + Pager *pPager = sqlite3BtreePager(pDb->pBt); + sqlite3_file *pFile = sqlite3PagerFile(pPager); + int res; + if( zRight[0] ){ + res=sqlite3OsFileControl(pFile, SQLITE_SET_LOCKPROXYFILE, + zRight); + } else { + res=sqlite3OsFileControl(pFile, SQLITE_SET_LOCKPROXYFILE, + NULL); + } + if( res!=SQLITE_OK ){ + sqlite3ErrorMsg(pParse, "failed to set lock proxy file"); + goto pragma_out; + } } - } - - *pbRev = sortOrder!=0; - if( j>=nTerm ){ - /* All terms of the ORDER BY clause are covered by this index so - ** this index can be used for sorting. */ - return 1; - } - if( pIdx->onError!=OE_None && i==pIdx->nColumn - && !referencesOtherTables(pOrderBy, pMaskSet, j, base) ){ - /* All terms of this index match some prefix of the ORDER BY clause - ** and the index is UNIQUE and no terms on the tail of the ORDER BY - ** clause reference other tables in a join. If this is all true then - ** the order by clause is superfluous. */ - return 1; - } - return 0; -} - -/* -** Check table to see if the ORDER BY clause in pOrderBy can be satisfied -** by sorting in order of ROWID. Return true if so and set *pbRev to be -** true for reverse ROWID and false for forward ROWID order. -*/ -static int sortableByRowid( - int base, /* Cursor number for table to be sorted */ - ExprList *pOrderBy, /* The ORDER BY clause */ - WhereMaskSet *pMaskSet, /* Mapping from table cursors to bitmaps */ - int *pbRev /* Set to 1 if ORDER BY is DESC */ -){ - Expr *p; - - assert( pOrderBy!=0 ); - assert( pOrderBy->nExpr>0 ); - p = pOrderBy->a[0].pExpr; - if( p->op==TK_COLUMN && p->iTable==base && p->iColumn==-1 - && !referencesOtherTables(pOrderBy, pMaskSet, 1, base) ){ - *pbRev = pOrderBy->a[0].sortOrder; - return 1; - } - return 0; -} - -/* -** Prepare a crude estimate of the logarithm of the input value. -** The results need not be exact. This is only used for estimating -** the total cost of performing operations with O(logN) or O(NlogN) -** complexity. Because N is just a guess, it is no great tragedy if -** logN is a little off. -*/ -static double estLog(double N){ - double logN = 1; - double x = 10; - while( N>x ){ - logN += 1; - x *= 10; - } - return logN; -} - -/* -** Two routines for printing the content of an sqlite3_index_info -** structure. Used for testing and debugging only. If neither -** SQLITE_TEST or SQLITE_DEBUG are defined, then these routines -** are no-ops. -*/ -#if !defined(SQLITE_OMIT_VIRTUALTABLE) && defined(SQLITE_DEBUG) -static void TRACE_IDX_INPUTS(sqlite3_index_info *p){ - int i; - if( !sqlite3WhereTrace ) return; - for(i=0; inConstraint; i++){ - sqlite3DebugPrintf(" constraint[%d]: col=%d termid=%d op=%d usabled=%d\n", - i, - p->aConstraint[i].iColumn, - p->aConstraint[i].iTermOffset, - p->aConstraint[i].op, - p->aConstraint[i].usable); - } - for(i=0; inOrderBy; i++){ - sqlite3DebugPrintf(" orderby[%d]: col=%d desc=%d\n", - i, - p->aOrderBy[i].iColumn, - p->aOrderBy[i].desc); - } -} -static void TRACE_IDX_OUTPUTS(sqlite3_index_info *p){ - int i; - if( !sqlite3WhereTrace ) return; - for(i=0; inConstraint; i++){ - sqlite3DebugPrintf(" usage[%d]: argvIdx=%d omit=%d\n", - i, - p->aConstraintUsage[i].argvIndex, - p->aConstraintUsage[i].omit); - } - sqlite3DebugPrintf(" idxNum=%d\n", p->idxNum); - sqlite3DebugPrintf(" idxStr=%s\n", p->idxStr); - sqlite3DebugPrintf(" orderByConsumed=%d\n", p->orderByConsumed); - sqlite3DebugPrintf(" estimatedCost=%g\n", p->estimatedCost); -} -#else -#define TRACE_IDX_INPUTS(A) -#define TRACE_IDX_OUTPUTS(A) -#endif - -/* -** Required because bestIndex() is called by bestOrClauseIndex() -*/ -static void bestIndex( - Parse*, WhereClause*, struct SrcList_item*, Bitmask, ExprList*, WhereCost*); - -/* -** This routine attempts to find an scanning strategy that can be used -** to optimize an 'OR' expression that is part of a WHERE clause. -** -** The table associated with FROM clause term pSrc may be either a -** regular B-Tree table or a virtual table. -*/ -static void bestOrClauseIndex( - Parse *pParse, /* The parsing context */ - WhereClause *pWC, /* The WHERE clause */ - struct SrcList_item *pSrc, /* The FROM clause term to search */ - Bitmask notReady, /* Mask of cursors that are not available */ - ExprList *pOrderBy, /* The ORDER BY clause */ - WhereCost *pCost /* Lowest cost query plan */ -){ -#ifndef SQLITE_OMIT_OR_OPTIMIZATION - const int iCur = pSrc->iCursor; /* The cursor of the table to be accessed */ - const Bitmask maskSrc = getMask(pWC->pMaskSet, iCur); /* Bitmask for pSrc */ - WhereTerm * const pWCEnd = &pWC->a[pWC->nTerm]; /* End of pWC->a[] */ - WhereTerm *pTerm; /* A single term of the WHERE clause */ + }else +#endif /* SQLITE_ENABLE_LOCKING_STYLE */ + + /* + ** PRAGMA [database.]synchronous + ** PRAGMA [database.]synchronous=OFF|ON|NORMAL|FULL + ** + ** Return or set the local value of the synchronous flag. Changing + ** the local value does not make changes to the disk file and the + ** default value will be restored the next time the database is + ** opened. + */ + if( sqlite3StrICmp(zLeft,"synchronous")==0 ){ + if( sqlite3ReadSchema(pParse) ) goto pragma_out; + if( !zRight ){ + returnSingleInt(pParse, "synchronous", pDb->safety_level-1); + }else{ + if( !db->autoCommit ){ + sqlite3ErrorMsg(pParse, + "Safety level may not be changed inside a transaction"); + }else{ + pDb->safety_level = getSafetyLevel(zRight,0,1)+1; + } + } + }else +#endif /* SQLITE_OMIT_PAGER_PRAGMAS */ - /* Search the WHERE clause terms for a usable WO_OR term. */ - for(pTerm=pWC->a; pTermeOperator==WO_OR - && ((pTerm->prereqAll & ~maskSrc) & notReady)==0 - && (pTerm->u.pOrInfo->indexable & maskSrc)!=0 - ){ - WhereClause * const pOrWC = &pTerm->u.pOrInfo->wc; - WhereTerm * const pOrWCEnd = &pOrWC->a[pOrWC->nTerm]; - WhereTerm *pOrTerm; - int flags = WHERE_MULTI_OR; - double rTotal = 0; - double nRow = 0; +#ifndef SQLITE_OMIT_FLAG_PRAGMAS + if( flagPragma(pParse, zLeft, zRight) ){ + /* The flagPragma() subroutine also generates any necessary code + ** there is nothing more to do here */ + }else +#endif /* SQLITE_OMIT_FLAG_PRAGMAS */ - for(pOrTerm=pOrWC->a; pOrTerma), (pTerm - pWC->a) - )); - if( pOrTerm->eOperator==WO_AND ){ - WhereClause *pAndWC = &pOrTerm->u.pAndInfo->wc; - bestIndex(pParse, pAndWC, pSrc, notReady, 0, &sTermCost); - }else if( pOrTerm->leftCursor==iCur ){ - WhereClause tempWC; - tempWC.pParse = pWC->pParse; - tempWC.pMaskSet = pWC->pMaskSet; - tempWC.op = TK_AND; - tempWC.a = pOrTerm; - tempWC.nTerm = 1; - bestIndex(pParse, &tempWC, pSrc, notReady, 0, &sTermCost); - }else{ +#ifndef SQLITE_OMIT_SCHEMA_PRAGMAS + /* + ** PRAGMA table_info(
    ) + ** + ** Return a single row for each column of the named table. The columns of + ** the returned data set are: + ** + ** cid: Column id (numbered from left to right, starting at 0) + ** name: Column name + ** type: Column declaration type. + ** notnull: True if 'NOT NULL' is part of column declaration + ** dflt_value: The default value for the column, if any. + */ + if( sqlite3StrICmp(zLeft, "table_info")==0 && zRight ){ + Table *pTab; + if( sqlite3ReadSchema(pParse) ) goto pragma_out; + pTab = sqlite3FindTable(db, zRight, zDb); + if( pTab ){ + int i; + int nHidden = 0; + Column *pCol; + sqlite3VdbeSetNumCols(v, 6); + pParse->nMem = 6; + sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "cid", SQLITE_STATIC); + sqlite3VdbeSetColName(v, 1, COLNAME_NAME, "name", SQLITE_STATIC); + sqlite3VdbeSetColName(v, 2, COLNAME_NAME, "type", SQLITE_STATIC); + sqlite3VdbeSetColName(v, 3, COLNAME_NAME, "notnull", SQLITE_STATIC); + sqlite3VdbeSetColName(v, 4, COLNAME_NAME, "dflt_value", SQLITE_STATIC); + sqlite3VdbeSetColName(v, 5, COLNAME_NAME, "pk", SQLITE_STATIC); + sqlite3ViewGetColumnNames(pParse, pTab); + for(i=0, pCol=pTab->aCol; inCol; i++, pCol++){ + if( IsHiddenColumn(pCol) ){ + nHidden++; continue; } - rTotal += sTermCost.rCost; - nRow += sTermCost.nRow; - if( rTotal>=pCost->rCost ) break; + sqlite3VdbeAddOp2(v, OP_Integer, i-nHidden, 1); + sqlite3VdbeAddOp4(v, OP_String8, 0, 2, 0, pCol->zName, 0); + sqlite3VdbeAddOp4(v, OP_String8, 0, 3, 0, + pCol->zType ? pCol->zType : "", 0); + sqlite3VdbeAddOp2(v, OP_Integer, (pCol->notNull ? 1 : 0), 4); + if( pCol->zDflt ){ + sqlite3VdbeAddOp4(v, OP_String8, 0, 5, 0, (char*)pCol->zDflt, 0); + }else{ + sqlite3VdbeAddOp2(v, OP_Null, 0, 5); + } + sqlite3VdbeAddOp2(v, OP_Integer, pCol->isPrimKey, 6); + sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 6); } + } + }else - /* If there is an ORDER BY clause, increase the scan cost to account - ** for the cost of the sort. */ - if( pOrderBy!=0 ){ - rTotal += nRow*estLog(nRow); - WHERETRACE(("... sorting increases OR cost to %.9g\n", rTotal)); + if( sqlite3StrICmp(zLeft, "index_info")==0 && zRight ){ + Index *pIdx; + Table *pTab; + if( sqlite3ReadSchema(pParse) ) goto pragma_out; + pIdx = sqlite3FindIndex(db, zRight, zDb); + if( pIdx ){ + int i; + pTab = pIdx->pTable; + sqlite3VdbeSetNumCols(v, 3); + pParse->nMem = 3; + sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "seqno", SQLITE_STATIC); + sqlite3VdbeSetColName(v, 1, COLNAME_NAME, "cid", SQLITE_STATIC); + sqlite3VdbeSetColName(v, 2, COLNAME_NAME, "name", SQLITE_STATIC); + for(i=0; inColumn; i++){ + int cnum = pIdx->aiColumn[i]; + sqlite3VdbeAddOp2(v, OP_Integer, i, 1); + sqlite3VdbeAddOp2(v, OP_Integer, cnum, 2); + assert( pTab->nCol>cnum ); + sqlite3VdbeAddOp4(v, OP_String8, 0, 3, 0, pTab->aCol[cnum].zName, 0); + sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 3); } + } + }else - /* If the cost of scanning using this OR term for optimization is - ** less than the current cost stored in pCost, replace the contents - ** of pCost. */ - WHERETRACE(("... multi-index OR cost=%.9g nrow=%.9g\n", rTotal, nRow)); - if( rTotalrCost ){ - pCost->rCost = rTotal; - pCost->nRow = nRow; - pCost->plan.wsFlags = flags; - pCost->plan.u.pTerm = pTerm; + if( sqlite3StrICmp(zLeft, "index_list")==0 && zRight ){ + Index *pIdx; + Table *pTab; + if( sqlite3ReadSchema(pParse) ) goto pragma_out; + pTab = sqlite3FindTable(db, zRight, zDb); + if( pTab ){ + v = sqlite3GetVdbe(pParse); + pIdx = pTab->pIndex; + if( pIdx ){ + int i = 0; + sqlite3VdbeSetNumCols(v, 3); + pParse->nMem = 3; + sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "seq", SQLITE_STATIC); + sqlite3VdbeSetColName(v, 1, COLNAME_NAME, "name", SQLITE_STATIC); + sqlite3VdbeSetColName(v, 2, COLNAME_NAME, "unique", SQLITE_STATIC); + while(pIdx){ + sqlite3VdbeAddOp2(v, OP_Integer, i, 1); + sqlite3VdbeAddOp4(v, OP_String8, 0, 2, 0, pIdx->zName, 0); + sqlite3VdbeAddOp2(v, OP_Integer, pIdx->onError!=OE_None, 3); + sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 3); + ++i; + pIdx = pIdx->pNext; + } } } - } -#endif /* SQLITE_OMIT_OR_OPTIMIZATION */ -} - -#ifndef SQLITE_OMIT_VIRTUALTABLE -/* -** Allocate and populate an sqlite3_index_info structure. It is the -** responsibility of the caller to eventually release the structure -** by passing the pointer returned by this function to sqlite3_free(). -*/ -static sqlite3_index_info *allocateIndexInfo( - Parse *pParse, - WhereClause *pWC, - struct SrcList_item *pSrc, - ExprList *pOrderBy -){ - int i, j; - int nTerm; - struct sqlite3_index_constraint *pIdxCons; - struct sqlite3_index_orderby *pIdxOrderBy; - struct sqlite3_index_constraint_usage *pUsage; - WhereTerm *pTerm; - int nOrderBy; - sqlite3_index_info *pIdxInfo; + }else - WHERETRACE(("Recomputing index info for %s...\n", pSrc->pTab->zName)); + if( sqlite3StrICmp(zLeft, "database_list")==0 ){ + int i; + if( sqlite3ReadSchema(pParse) ) goto pragma_out; + sqlite3VdbeSetNumCols(v, 3); + pParse->nMem = 3; + sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "seq", SQLITE_STATIC); + sqlite3VdbeSetColName(v, 1, COLNAME_NAME, "name", SQLITE_STATIC); + sqlite3VdbeSetColName(v, 2, COLNAME_NAME, "file", SQLITE_STATIC); + for(i=0; inDb; i++){ + if( db->aDb[i].pBt==0 ) continue; + assert( db->aDb[i].zName!=0 ); + sqlite3VdbeAddOp2(v, OP_Integer, i, 1); + sqlite3VdbeAddOp4(v, OP_String8, 0, 2, 0, db->aDb[i].zName, 0); + sqlite3VdbeAddOp4(v, OP_String8, 0, 3, 0, + sqlite3BtreeGetFilename(db->aDb[i].pBt), 0); + sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 3); + } + }else - /* Count the number of possible WHERE clause constraints referring - ** to this virtual table */ - for(i=nTerm=0, pTerm=pWC->a; inTerm; i++, pTerm++){ - if( pTerm->leftCursor != pSrc->iCursor ) continue; - assert( (pTerm->eOperator&(pTerm->eOperator-1))==0 ); - testcase( pTerm->eOperator==WO_IN ); - testcase( pTerm->eOperator==WO_ISNULL ); - if( pTerm->eOperator & (WO_IN|WO_ISNULL) ) continue; - nTerm++; - } + if( sqlite3StrICmp(zLeft, "collation_list")==0 ){ + int i = 0; + HashElem *p; + sqlite3VdbeSetNumCols(v, 2); + pParse->nMem = 2; + sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "seq", SQLITE_STATIC); + sqlite3VdbeSetColName(v, 1, COLNAME_NAME, "name", SQLITE_STATIC); + for(p=sqliteHashFirst(&db->aCollSeq); p; p=sqliteHashNext(p)){ + CollSeq *pColl = (CollSeq *)sqliteHashData(p); + sqlite3VdbeAddOp2(v, OP_Integer, i++, 1); + sqlite3VdbeAddOp4(v, OP_String8, 0, 2, 0, pColl->zName, 0); + sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 2); + } + }else +#endif /* SQLITE_OMIT_SCHEMA_PRAGMAS */ - /* If the ORDER BY clause contains only columns in the current - ** virtual table then allocate space for the aOrderBy part of - ** the sqlite3_index_info structure. - */ - nOrderBy = 0; - if( pOrderBy ){ - for(i=0; inExpr; i++){ - Expr *pExpr = pOrderBy->a[i].pExpr; - if( pExpr->op!=TK_COLUMN || pExpr->iTable!=pSrc->iCursor ) break; +#ifndef SQLITE_OMIT_FOREIGN_KEY + if( sqlite3StrICmp(zLeft, "foreign_key_list")==0 && zRight ){ + FKey *pFK; + Table *pTab; + if( sqlite3ReadSchema(pParse) ) goto pragma_out; + pTab = sqlite3FindTable(db, zRight, zDb); + if( pTab ){ + v = sqlite3GetVdbe(pParse); + pFK = pTab->pFKey; + if( pFK ){ + int i = 0; + sqlite3VdbeSetNumCols(v, 8); + pParse->nMem = 8; + sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "id", SQLITE_STATIC); + sqlite3VdbeSetColName(v, 1, COLNAME_NAME, "seq", SQLITE_STATIC); + sqlite3VdbeSetColName(v, 2, COLNAME_NAME, "table", SQLITE_STATIC); + sqlite3VdbeSetColName(v, 3, COLNAME_NAME, "from", SQLITE_STATIC); + sqlite3VdbeSetColName(v, 4, COLNAME_NAME, "to", SQLITE_STATIC); + sqlite3VdbeSetColName(v, 5, COLNAME_NAME, "on_update", SQLITE_STATIC); + sqlite3VdbeSetColName(v, 6, COLNAME_NAME, "on_delete", SQLITE_STATIC); + sqlite3VdbeSetColName(v, 7, COLNAME_NAME, "match", SQLITE_STATIC); + while(pFK){ + int j; + for(j=0; jnCol; j++){ + char *zCol = pFK->aCol[j].zCol; + char *zOnDelete = (char *)actionName(pFK->aAction[0]); + char *zOnUpdate = (char *)actionName(pFK->aAction[1]); + sqlite3VdbeAddOp2(v, OP_Integer, i, 1); + sqlite3VdbeAddOp2(v, OP_Integer, j, 2); + sqlite3VdbeAddOp4(v, OP_String8, 0, 3, 0, pFK->zTo, 0); + sqlite3VdbeAddOp4(v, OP_String8, 0, 4, 0, + pTab->aCol[pFK->aCol[j].iFrom].zName, 0); + sqlite3VdbeAddOp4(v, zCol ? OP_String8 : OP_Null, 0, 5, 0, zCol, 0); + sqlite3VdbeAddOp4(v, OP_String8, 0, 6, 0, zOnUpdate, 0); + sqlite3VdbeAddOp4(v, OP_String8, 0, 7, 0, zOnDelete, 0); + sqlite3VdbeAddOp4(v, OP_String8, 0, 8, 0, "NONE", 0); + sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 8); + } + ++i; + pFK = pFK->pNextFrom; + } + } } - if( i==pOrderBy->nExpr ){ - nOrderBy = pOrderBy->nExpr; + }else +#endif /* !defined(SQLITE_OMIT_FOREIGN_KEY) */ + +#ifndef NDEBUG + if( sqlite3StrICmp(zLeft, "parser_trace")==0 ){ + if( zRight ){ + if( sqlite3GetBoolean(zRight, 0) ){ + sqlite3ParserTrace(stderr, "parser: "); + }else{ + sqlite3ParserTrace(0, 0); + } } - } + }else +#endif - /* Allocate the sqlite3_index_info structure + /* Reinstall the LIKE and GLOB functions. The variant of LIKE + ** used will be case sensitive or not depending on the RHS. */ - pIdxInfo = sqlite3DbMallocZero(pParse->db, sizeof(*pIdxInfo) - + (sizeof(*pIdxCons) + sizeof(*pUsage))*nTerm - + sizeof(*pIdxOrderBy)*nOrderBy ); - if( pIdxInfo==0 ){ - sqlite3ErrorMsg(pParse, "out of memory"); - /* (double)0 In case of SQLITE_OMIT_FLOATING_POINT... */ - return 0; - } + if( sqlite3StrICmp(zLeft, "case_sensitive_like")==0 ){ + if( zRight ){ + sqlite3RegisterLikeFunctions(db, sqlite3GetBoolean(zRight, 0)); + } + }else - /* Initialize the structure. The sqlite3_index_info structure contains - ** many fields that are declared "const" to prevent xBestIndex from - ** changing them. We have to do some funky casting in order to - ** initialize those fields. - */ - pIdxCons = (struct sqlite3_index_constraint*)&pIdxInfo[1]; - pIdxOrderBy = (struct sqlite3_index_orderby*)&pIdxCons[nTerm]; - pUsage = (struct sqlite3_index_constraint_usage*)&pIdxOrderBy[nOrderBy]; - *(int*)&pIdxInfo->nConstraint = nTerm; - *(int*)&pIdxInfo->nOrderBy = nOrderBy; - *(struct sqlite3_index_constraint**)&pIdxInfo->aConstraint = pIdxCons; - *(struct sqlite3_index_orderby**)&pIdxInfo->aOrderBy = pIdxOrderBy; - *(struct sqlite3_index_constraint_usage**)&pIdxInfo->aConstraintUsage = - pUsage; +#ifndef SQLITE_INTEGRITY_CHECK_ERROR_MAX +# define SQLITE_INTEGRITY_CHECK_ERROR_MAX 100 +#endif - for(i=j=0, pTerm=pWC->a; inTerm; i++, pTerm++){ - if( pTerm->leftCursor != pSrc->iCursor ) continue; - assert( (pTerm->eOperator&(pTerm->eOperator-1))==0 ); - testcase( pTerm->eOperator==WO_IN ); - testcase( pTerm->eOperator==WO_ISNULL ); - if( pTerm->eOperator & (WO_IN|WO_ISNULL) ) continue; - pIdxCons[j].iColumn = pTerm->u.leftColumn; - pIdxCons[j].iTermOffset = i; - pIdxCons[j].op = (u8)pTerm->eOperator; - /* The direct assignment in the previous line is possible only because - ** the WO_ and SQLITE_INDEX_CONSTRAINT_ codes are identical. The - ** following asserts verify this fact. */ - assert( WO_EQ==SQLITE_INDEX_CONSTRAINT_EQ ); - assert( WO_LT==SQLITE_INDEX_CONSTRAINT_LT ); - assert( WO_LE==SQLITE_INDEX_CONSTRAINT_LE ); - assert( WO_GT==SQLITE_INDEX_CONSTRAINT_GT ); - assert( WO_GE==SQLITE_INDEX_CONSTRAINT_GE ); - assert( WO_MATCH==SQLITE_INDEX_CONSTRAINT_MATCH ); - assert( pTerm->eOperator & (WO_EQ|WO_LT|WO_LE|WO_GT|WO_GE|WO_MATCH) ); - j++; - } - for(i=0; ia[i].pExpr; - pIdxOrderBy[i].iColumn = pExpr->iColumn; - pIdxOrderBy[i].desc = pOrderBy->a[i].sortOrder; - } +#ifndef SQLITE_OMIT_INTEGRITY_CHECK + /* Pragma "quick_check" is an experimental reduced version of + ** integrity_check designed to detect most database corruption + ** without most of the overhead of a full integrity-check. + */ + if( sqlite3StrICmp(zLeft, "integrity_check")==0 + || sqlite3StrICmp(zLeft, "quick_check")==0 + ){ + int i, j, addr, mxErr; - return pIdxInfo; -} + /* Code that appears at the end of the integrity check. If no error + ** messages have been generated, output OK. Otherwise output the + ** error message + */ + static const VdbeOpList endCode[] = { + { OP_AddImm, 1, 0, 0}, /* 0 */ + { OP_IfNeg, 1, 0, 0}, /* 1 */ + { OP_String8, 0, 3, 0}, /* 2 */ + { OP_ResultRow, 3, 1, 0}, + }; -/* -** The table object reference passed as the second argument to this function -** must represent a virtual table. This function invokes the xBestIndex() -** method of the virtual table with the sqlite3_index_info pointer passed -** as the argument. -** -** If an error occurs, pParse is populated with an error message and a -** non-zero value is returned. Otherwise, 0 is returned and the output -** part of the sqlite3_index_info structure is left populated. -** -** Whether or not an error is returned, it is the responsibility of the -** caller to eventually free p->idxStr if p->needToFreeIdxStr indicates -** that this is required. -*/ -static int vtabBestIndex(Parse *pParse, Table *pTab, sqlite3_index_info *p){ - sqlite3_vtab *pVtab = pTab->pVtab; - int i; - int rc; + int isQuick = (sqlite3Tolower(zLeft[0])=='q'); - (void)sqlite3SafetyOff(pParse->db); - WHERETRACE(("xBestIndex for %s\n", pTab->zName)); - TRACE_IDX_INPUTS(p); - rc = pVtab->pModule->xBestIndex(pVtab, p); - TRACE_IDX_OUTPUTS(p); - (void)sqlite3SafetyOn(pParse->db); + /* Initialize the VDBE program */ + if( sqlite3ReadSchema(pParse) ) goto pragma_out; + pParse->nMem = 6; + sqlite3VdbeSetNumCols(v, 1); + sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "integrity_check", SQLITE_STATIC); - if( rc!=SQLITE_OK ){ - if( rc==SQLITE_NOMEM ){ - pParse->db->mallocFailed = 1; - }else if( !pVtab->zErrMsg ){ - sqlite3ErrorMsg(pParse, "%s", sqlite3ErrStr(rc)); - }else{ - sqlite3ErrorMsg(pParse, "%s", pVtab->zErrMsg); + /* Set the maximum error count */ + mxErr = SQLITE_INTEGRITY_CHECK_ERROR_MAX; + if( zRight ){ + sqlite3GetInt32(zRight, &mxErr); + if( mxErr<=0 ){ + mxErr = SQLITE_INTEGRITY_CHECK_ERROR_MAX; + } } - } - sqlite3DbFree(pParse->db, pVtab->zErrMsg); - pVtab->zErrMsg = 0; + sqlite3VdbeAddOp2(v, OP_Integer, mxErr, 1); /* reg[1] holds errors left */ - for(i=0; inConstraint; i++){ - if( !p->aConstraint[i].usable && p->aConstraintUsage[i].argvIndex>0 ){ - sqlite3ErrorMsg(pParse, - "table %s: xBestIndex returned an invalid plan", pTab->zName); - } - } + /* Do an integrity check on each database file */ + for(i=0; inDb; i++){ + HashElem *x; + Hash *pTbls; + int cnt = 0; - return pParse->nErr; -} + if( OMIT_TEMPDB && i==1 ) continue; + sqlite3CodeVerifySchema(pParse, i); + addr = sqlite3VdbeAddOp1(v, OP_IfPos, 1); /* Halt if out of errors */ + sqlite3VdbeAddOp2(v, OP_Halt, 0, 0); + sqlite3VdbeJumpHere(v, addr); -/* -** Compute the best index for a virtual table. -** -** The best index is computed by the xBestIndex method of the virtual -** table module. This routine is really just a wrapper that sets up -** the sqlite3_index_info structure that is used to communicate with -** xBestIndex. -** -** In a join, this routine might be called multiple times for the -** same virtual table. The sqlite3_index_info structure is created -** and initialized on the first invocation and reused on all subsequent -** invocations. The sqlite3_index_info structure is also used when -** code is generated to access the virtual table. The whereInfoDelete() -** routine takes care of freeing the sqlite3_index_info structure after -** everybody has finished with it. -*/ -static void bestVirtualIndex( - Parse *pParse, /* The parsing context */ - WhereClause *pWC, /* The WHERE clause */ - struct SrcList_item *pSrc, /* The FROM clause term to search */ - Bitmask notReady, /* Mask of cursors that are not available */ - ExprList *pOrderBy, /* The order by clause */ - WhereCost *pCost, /* Lowest cost query plan */ - sqlite3_index_info **ppIdxInfo /* Index information passed to xBestIndex */ -){ - Table *pTab = pSrc->pTab; - sqlite3_index_info *pIdxInfo; - struct sqlite3_index_constraint *pIdxCons; - struct sqlite3_index_constraint_usage *pUsage; - WhereTerm *pTerm; - int i, j; - int nOrderBy; + /* Do an integrity check of the B-Tree + ** + ** Begin by filling registers 2, 3, ... with the root pages numbers + ** for all tables and indices in the database. + */ + assert( sqlite3SchemaMutexHeld(db, iDb, 0) ); + pTbls = &db->aDb[i].pSchema->tblHash; + for(x=sqliteHashFirst(pTbls); x; x=sqliteHashNext(x)){ + Table *pTab = sqliteHashData(x); + Index *pIdx; + sqlite3VdbeAddOp2(v, OP_Integer, pTab->tnum, 2+cnt); + cnt++; + for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){ + sqlite3VdbeAddOp2(v, OP_Integer, pIdx->tnum, 2+cnt); + cnt++; + } + } - /* Make sure wsFlags is initialized to some sane value. Otherwise, if the - ** malloc in allocateIndexInfo() fails and this function returns leaving - ** wsFlags in an uninitialized state, the caller may behave unpredictably. - */ - memset(pCost, 0, sizeof(*pCost)); - pCost->plan.wsFlags = WHERE_VIRTUALTABLE; + /* Make sure sufficient number of registers have been allocated */ + if( pParse->nMem < cnt+4 ){ + pParse->nMem = cnt+4; + } - /* If the sqlite3_index_info structure has not been previously - ** allocated and initialized, then allocate and initialize it now. - */ - pIdxInfo = *ppIdxInfo; - if( pIdxInfo==0 ){ - *ppIdxInfo = pIdxInfo = allocateIndexInfo(pParse, pWC, pSrc, pOrderBy); - } - if( pIdxInfo==0 ){ - return; - } + /* Do the b-tree integrity checks */ + sqlite3VdbeAddOp3(v, OP_IntegrityCk, 2, cnt, 1); + sqlite3VdbeChangeP5(v, (u8)i); + addr = sqlite3VdbeAddOp1(v, OP_IsNull, 2); + sqlite3VdbeAddOp4(v, OP_String8, 0, 3, 0, + sqlite3MPrintf(db, "*** in database %s ***\n", db->aDb[i].zName), + P4_DYNAMIC); + sqlite3VdbeAddOp3(v, OP_Move, 2, 4, 1); + sqlite3VdbeAddOp3(v, OP_Concat, 4, 3, 2); + sqlite3VdbeAddOp2(v, OP_ResultRow, 2, 1); + sqlite3VdbeJumpHere(v, addr); - /* At this point, the sqlite3_index_info structure that pIdxInfo points - ** to will have been initialized, either during the current invocation or - ** during some prior invocation. Now we just have to customize the - ** details of pIdxInfo for the current invocation and pass it to - ** xBestIndex. - */ + /* Make sure all the indices are constructed correctly. + */ + for(x=sqliteHashFirst(pTbls); x && !isQuick; x=sqliteHashNext(x)){ + Table *pTab = sqliteHashData(x); + Index *pIdx; + int loopTop; - /* The module name must be defined. Also, by this point there must - ** be a pointer to an sqlite3_vtab structure. Otherwise - ** sqlite3ViewGetColumnNames() would have picked up the error. - */ - assert( pTab->azModuleArg && pTab->azModuleArg[0] ); - assert( pTab->pVtab ); + if( pTab->pIndex==0 ) continue; + addr = sqlite3VdbeAddOp1(v, OP_IfPos, 1); /* Stop if out of errors */ + sqlite3VdbeAddOp2(v, OP_Halt, 0, 0); + sqlite3VdbeJumpHere(v, addr); + sqlite3OpenTableAndIndices(pParse, pTab, 1, OP_OpenRead); + sqlite3VdbeAddOp2(v, OP_Integer, 0, 2); /* reg(2) will count entries */ + loopTop = sqlite3VdbeAddOp2(v, OP_Rewind, 1, 0); + sqlite3VdbeAddOp2(v, OP_AddImm, 2, 1); /* increment entry count */ + for(j=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, j++){ + int jmp2; + int r1; + static const VdbeOpList idxErr[] = { + { OP_AddImm, 1, -1, 0}, + { OP_String8, 0, 3, 0}, /* 1 */ + { OP_Rowid, 1, 4, 0}, + { OP_String8, 0, 5, 0}, /* 3 */ + { OP_String8, 0, 6, 0}, /* 4 */ + { OP_Concat, 4, 3, 3}, + { OP_Concat, 5, 3, 3}, + { OP_Concat, 6, 3, 3}, + { OP_ResultRow, 3, 1, 0}, + { OP_IfPos, 1, 0, 0}, /* 9 */ + { OP_Halt, 0, 0, 0}, + }; + r1 = sqlite3GenerateIndexKey(pParse, pIdx, 1, 3, 0); + jmp2 = sqlite3VdbeAddOp4Int(v, OP_Found, j+2, 0, r1, pIdx->nColumn+1); + addr = sqlite3VdbeAddOpList(v, ArraySize(idxErr), idxErr); + sqlite3VdbeChangeP4(v, addr+1, "rowid ", P4_STATIC); + sqlite3VdbeChangeP4(v, addr+3, " missing from index ", P4_STATIC); + sqlite3VdbeChangeP4(v, addr+4, pIdx->zName, P4_TRANSIENT); + sqlite3VdbeJumpHere(v, addr+9); + sqlite3VdbeJumpHere(v, jmp2); + } + sqlite3VdbeAddOp2(v, OP_Next, 1, loopTop+1); + sqlite3VdbeJumpHere(v, loopTop); + for(j=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, j++){ + static const VdbeOpList cntIdx[] = { + { OP_Integer, 0, 3, 0}, + { OP_Rewind, 0, 0, 0}, /* 1 */ + { OP_AddImm, 3, 1, 0}, + { OP_Next, 0, 0, 0}, /* 3 */ + { OP_Eq, 2, 0, 3}, /* 4 */ + { OP_AddImm, 1, -1, 0}, + { OP_String8, 0, 2, 0}, /* 6 */ + { OP_String8, 0, 3, 0}, /* 7 */ + { OP_Concat, 3, 2, 2}, + { OP_ResultRow, 2, 1, 0}, + }; + addr = sqlite3VdbeAddOp1(v, OP_IfPos, 1); + sqlite3VdbeAddOp2(v, OP_Halt, 0, 0); + sqlite3VdbeJumpHere(v, addr); + addr = sqlite3VdbeAddOpList(v, ArraySize(cntIdx), cntIdx); + sqlite3VdbeChangeP1(v, addr+1, j+2); + sqlite3VdbeChangeP2(v, addr+1, addr+4); + sqlite3VdbeChangeP1(v, addr+3, j+2); + sqlite3VdbeChangeP2(v, addr+3, addr+2); + sqlite3VdbeJumpHere(v, addr+4); + sqlite3VdbeChangeP4(v, addr+6, + "wrong # of entries in index ", P4_STATIC); + sqlite3VdbeChangeP4(v, addr+7, pIdx->zName, P4_TRANSIENT); + } + } + } + addr = sqlite3VdbeAddOpList(v, ArraySize(endCode), endCode); + sqlite3VdbeChangeP2(v, addr, -mxErr); + sqlite3VdbeJumpHere(v, addr+1); + sqlite3VdbeChangeP4(v, addr+2, "ok", P4_STATIC); + }else +#endif /* SQLITE_OMIT_INTEGRITY_CHECK */ - /* Set the aConstraint[].usable fields and initialize all - ** output variables to zero. - ** - ** aConstraint[].usable is true for constraints where the right-hand - ** side contains only references to tables to the left of the current - ** table. In other words, if the constraint is of the form: - ** - ** column = expr +#ifndef SQLITE_OMIT_UTF16 + /* + ** PRAGMA encoding + ** PRAGMA encoding = "utf-8"|"utf-16"|"utf-16le"|"utf-16be" ** - ** and we are evaluating a join, then the constraint on column is - ** only valid if all tables referenced in expr occur to the left - ** of the table containing column. + ** In its first form, this pragma returns the encoding of the main + ** database. If the database is not initialized, it is initialized now. ** - ** The aConstraints[] array contains entries for all constraints - ** on the current table. That way we only have to compute it once - ** even though we might try to pick the best index multiple times. - ** For each attempt at picking an index, the order of tables in the - ** join might be different so we have to recompute the usable flag - ** each time. - */ - pIdxCons = *(struct sqlite3_index_constraint**)&pIdxInfo->aConstraint; - pUsage = pIdxInfo->aConstraintUsage; - for(i=0; inConstraint; i++, pIdxCons++){ - j = pIdxCons->iTermOffset; - pTerm = &pWC->a[j]; - pIdxCons->usable = (pTerm->prereqRight & notReady)==0 ?1:0; - } - memset(pUsage, 0, sizeof(pUsage[0])*pIdxInfo->nConstraint); - if( pIdxInfo->needToFreeIdxStr ){ - sqlite3_free(pIdxInfo->idxStr); - } - pIdxInfo->idxStr = 0; - pIdxInfo->idxNum = 0; - pIdxInfo->needToFreeIdxStr = 0; - pIdxInfo->orderByConsumed = 0; - /* ((double)2) In case of SQLITE_OMIT_FLOATING_POINT... */ - pIdxInfo->estimatedCost = SQLITE_BIG_DBL / ((double)2); - nOrderBy = pIdxInfo->nOrderBy; - if( !pOrderBy ){ - pIdxInfo->nOrderBy = 0; - } - - if( vtabBestIndex(pParse, pTab, pIdxInfo) ){ - return; - } - - /* The cost is not allowed to be larger than SQLITE_BIG_DBL (the - ** inital value of lowestCost in this loop. If it is, then the - ** (costestimatedCost ){ - pCost->rCost = (SQLITE_BIG_DBL/((double)2)); - }else{ - pCost->rCost = pIdxInfo->estimatedCost; - } - pCost->plan.u.pVtabIdx = pIdxInfo; - if( pIdxInfo->orderByConsumed ){ - pCost->plan.wsFlags |= WHERE_ORDERBY; - } - pCost->plan.nEq = 0; - pIdxInfo->nOrderBy = nOrderBy; - - /* Try to find a more efficient access pattern by using multiple indexes - ** to optimize an OR expression within the WHERE clause. - */ - bestOrClauseIndex(pParse, pWC, pSrc, notReady, pOrderBy, pCost); -} -#endif /* SQLITE_OMIT_VIRTUALTABLE */ - -/* -** Find the query plan for accessing a particular table. Write the -** best query plan and its cost into the WhereCost object supplied as the -** last parameter. -** -** The lowest cost plan wins. The cost is an estimate of the amount of -** CPU and disk I/O need to process the request using the selected plan. -** Factors that influence cost include: -** -** * The estimated number of rows that will be retrieved. (The -** fewer the better.) -** -** * Whether or not sorting must occur. -** -** * Whether or not there must be separate lookups in the -** index and in the main table. -** -** If there was an INDEXED BY clause (pSrc->pIndex) attached to the table in -** the SQL statement, then this function only considers plans using the -** named index. If no such plan is found, then the returned cost is -** SQLITE_BIG_DBL. If a plan is found that uses the named index, -** then the cost is calculated in the usual way. -** -** If a NOT INDEXED clause (pSrc->notIndexed!=0) was attached to the table -** in the SELECT statement, then no indexes are considered. However, the -** selected plan may still take advantage of the tables built-in rowid -** index. -*/ -static void bestBtreeIndex( - Parse *pParse, /* The parsing context */ - WhereClause *pWC, /* The WHERE clause */ - struct SrcList_item *pSrc, /* The FROM clause term to search */ - Bitmask notReady, /* Mask of cursors that are not available */ - ExprList *pOrderBy, /* The ORDER BY clause */ - WhereCost *pCost /* Lowest cost query plan */ -){ - WhereTerm *pTerm; /* A single term of the WHERE clause */ - int iCur = pSrc->iCursor; /* The cursor of the table to be accessed */ - Index *pProbe; /* An index we are evaluating */ - int rev; /* True to scan in reverse order */ - int wsFlags; /* Flags associated with pProbe */ - int nEq; /* Number of == or IN constraints */ - int eqTermMask; /* Mask of valid equality operators */ - double cost; /* Cost of using pProbe */ - double nRow; /* Estimated number of rows in result set */ - int i; /* Loop counter */ - - WHERETRACE(("bestIndex: tbl=%s notReady=%llx\n", pSrc->pTab->zName,notReady)); - pProbe = pSrc->pTab->pIndex; - if( pSrc->notIndexed ){ - pProbe = 0; - } - - /* If the table has no indices and there are no terms in the where - ** clause that refer to the ROWID, then we will never be able to do - ** anything other than a full table scan on this table. We might as - ** well put it first in the join order. That way, perhaps it can be - ** referenced by other tables in the join. + ** In all cases new databases created using the ATTACH command are + ** created to use the same default text encoding as the main database. If + ** the main database has not been initialized and/or created when ATTACH + ** is executed, this is done before the ATTACH operation. + ** + ** In the second form this pragma sets the text encoding to be used in + ** new database files created using this database handle. It is only + ** useful if invoked immediately after the main database i */ - memset(pCost, 0, sizeof(*pCost)); - if( pProbe==0 && - findTerm(pWC, iCur, -1, 0, WO_EQ|WO_IN|WO_LT|WO_LE|WO_GT|WO_GE,0)==0 && - (pOrderBy==0 || !sortableByRowid(iCur, pOrderBy, pWC->pMaskSet, &rev)) ){ - if( pParse->db->flags & SQLITE_ReverseOrder ){ - /* For application testing, randomly reverse the output order for - ** SELECT statements that omit the ORDER BY clause. This will help - ** to find cases where + if( sqlite3StrICmp(zLeft, "encoding")==0 ){ + static const struct EncName { + char *zName; + u8 enc; + } encnames[] = { + { "UTF8", SQLITE_UTF8 }, + { "UTF-8", SQLITE_UTF8 }, /* Must be element [1] */ + { "UTF-16le", SQLITE_UTF16LE }, /* Must be element [2] */ + { "UTF-16be", SQLITE_UTF16BE }, /* Must be element [3] */ + { "UTF16le", SQLITE_UTF16LE }, + { "UTF16be", SQLITE_UTF16BE }, + { "UTF-16", 0 }, /* SQLITE_UTF16NATIVE */ + { "UTF16", 0 }, /* SQLITE_UTF16NATIVE */ + { 0, 0 } + }; + const struct EncName *pEnc; + if( !zRight ){ /* "PRAGMA encoding" */ + if( sqlite3ReadSchema(pParse) ) goto pragma_out; + sqlite3VdbeSetNumCols(v, 1); + sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "encoding", SQLITE_STATIC); + sqlite3VdbeAddOp2(v, OP_String8, 0, 1); + assert( encnames[SQLITE_UTF8].enc==SQLITE_UTF8 ); + assert( encnames[SQLITE_UTF16LE].enc==SQLITE_UTF16LE ); + assert( encnames[SQLITE_UTF16BE].enc==SQLITE_UTF16BE ); + sqlite3VdbeChangeP4(v, -1, encnames[ENC(pParse->db)].zName, P4_STATIC); + sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 1); + }else{ /* "PRAGMA encoding = XXX" */ + /* Only change the value of sqlite.enc if the database handle is not + ** initialized. If the main database exists, the new sqlite.enc value + ** will be overwritten when the schema is next loaded. If it does not + ** already exists, it will be created to use the new encoding value. */ - pCost->plan.wsFlags |= WHERE_REVERSE; - } - return; - } - pCost->rCost = SQLITE_BIG_DBL; - - /* Check for a rowid=EXPR or rowid IN (...) constraints. If there was - ** an INDEXED BY clause attached to this table, skip this step. - */ - if( !pSrc->pIndex ){ - pTerm = findTerm(pWC, iCur, -1, notReady, WO_EQ|WO_IN, 0); - if( pTerm ){ - Expr *pExpr; - pCost->plan.wsFlags = WHERE_ROWID_EQ; - if( pTerm->eOperator & WO_EQ ){ - /* Rowid== is always the best pick. Look no further. Because only - ** a single row is generated, output is always in sorted order */ - pCost->plan.wsFlags = WHERE_ROWID_EQ | WHERE_UNIQUE; - pCost->plan.nEq = 1; - WHERETRACE(("... best is rowid\n")); - pCost->rCost = 0; - pCost->nRow = 1; - return; - }else if( !ExprHasProperty((pExpr = pTerm->pExpr), EP_xIsSelect) - && pExpr->x.pList + if( + !(DbHasProperty(db, 0, DB_SchemaLoaded)) || + DbHasProperty(db, 0, DB_Empty) ){ - /* Rowid IN (LIST): cost is NlogN where N is the number of list - ** elements. */ - pCost->rCost = pCost->nRow = pExpr->x.pList->nExpr; - pCost->rCost *= estLog(pCost->rCost); - }else{ - /* Rowid IN (SELECT): cost is NlogN where N is the number of rows - ** in the result of the inner select. We have no way to estimate - ** that value so make a wild guess. */ - pCost->nRow = 100; - pCost->rCost = 200; - } - WHERETRACE(("... rowid IN cost: %.9g\n", pCost->rCost)); - } - - /* Estimate the cost of a table scan. If we do not know how many - ** entries are in the table, use 1 million as a guess. - */ - cost = pProbe ? pProbe->aiRowEst[0] : 1000000; - WHERETRACE(("... table scan base cost: %.9g\n", cost)); - wsFlags = WHERE_ROWID_RANGE; - - /* Check for constraints on a range of rowids in a table scan. - */ - pTerm = findTerm(pWC, iCur, -1, notReady, WO_LT|WO_LE|WO_GT|WO_GE, 0); - if( pTerm ){ - if( findTerm(pWC, iCur, -1, notReady, WO_LT|WO_LE, 0) ){ - wsFlags |= WHERE_TOP_LIMIT; - cost /= 3; /* Guess that rowidEXPR eliminates two-thirds of rows */ - } - WHERETRACE(("... rowid range reduces cost to %.9g\n", cost)); - }else{ - wsFlags = 0; - } - nRow = cost; - - /* If the table scan does not satisfy the ORDER BY clause, increase - ** the cost by NlogN to cover the expense of sorting. */ - if( pOrderBy ){ - if( sortableByRowid(iCur, pOrderBy, pWC->pMaskSet, &rev) ){ - wsFlags |= WHERE_ORDERBY|WHERE_ROWID_RANGE; - if( rev ){ - wsFlags |= WHERE_REVERSE; + for(pEnc=&encnames[0]; pEnc->zName; pEnc++){ + if( 0==sqlite3StrICmp(zRight, pEnc->zName) ){ + ENC(pParse->db) = pEnc->enc ? pEnc->enc : SQLITE_UTF16NATIVE; + break; + } + } + if( !pEnc->zName ){ + sqlite3ErrorMsg(pParse, "unsupported encoding: %s", zRight); } - }else{ - cost += cost*estLog(cost); - WHERETRACE(("... sorting increases cost to %.9g\n", cost)); } - }else if( pParse->db->flags & SQLITE_ReverseOrder ){ - /* For application testing, randomly reverse the output order for - ** SELECT statements that omit the ORDER BY clause. This will help - ** to find cases where - */ - wsFlags |= WHERE_REVERSE; } + }else +#endif /* SQLITE_OMIT_UTF16 */ - /* Remember this case if it is the best so far */ - if( costrCost ){ - pCost->rCost = cost; - pCost->nRow = nRow; - pCost->plan.wsFlags = wsFlags; +#ifndef SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS + /* + ** PRAGMA [database.]schema_version + ** PRAGMA [database.]schema_version = + ** + ** PRAGMA [database.]user_version + ** PRAGMA [database.]user_version = + ** + ** The pragma's schema_version and user_version are used to set or get + ** the value of the schema-version and user-version, respectively. Both + ** the schema-version and the user-version are 32-bit signed integers + ** stored in the database header. + ** + ** The schema-cookie is usually only manipulated internally by SQLite. It + ** is incremented by SQLite whenever the database schema is modified (by + ** creating or dropping a table or index). The schema version is used by + ** SQLite each time a query is executed to ensure that the internal cache + ** of the schema used when compiling the SQL query matches the schema of + ** the database against which the compiled query is actually executed. + ** Subverting this mechanism by using "PRAGMA schema_version" to modify + ** the schema-version is potentially dangerous and may lead to program + ** crashes or database corruption. Use with caution! + ** + ** The user-version is not used internally by SQLite. It may be used by + ** applications for any purpose. + */ + if( sqlite3StrICmp(zLeft, "schema_version")==0 + || sqlite3StrICmp(zLeft, "user_version")==0 + || sqlite3StrICmp(zLeft, "freelist_count")==0 + ){ + int iCookie; /* Cookie index. 1 for schema-cookie, 6 for user-cookie. */ + sqlite3VdbeUsesBtree(v, iDb); + switch( zLeft[0] ){ + case 'f': case 'F': + iCookie = BTREE_FREE_PAGE_COUNT; + break; + case 's': case 'S': + iCookie = BTREE_SCHEMA_VERSION; + break; + default: + iCookie = BTREE_USER_VERSION; + break; } - } - bestOrClauseIndex(pParse, pWC, pSrc, notReady, pOrderBy, pCost); + if( zRight && iCookie!=BTREE_FREE_PAGE_COUNT ){ + /* Write the specified cookie value */ + static const VdbeOpList setCookie[] = { + { OP_Transaction, 0, 1, 0}, /* 0 */ + { OP_Integer, 0, 1, 0}, /* 1 */ + { OP_SetCookie, 0, 0, 1}, /* 2 */ + }; + int addr = sqlite3VdbeAddOpList(v, ArraySize(setCookie), setCookie); + sqlite3VdbeChangeP1(v, addr, iDb); + sqlite3VdbeChangeP1(v, addr+1, sqlite3Atoi(zRight)); + sqlite3VdbeChangeP1(v, addr+2, iDb); + sqlite3VdbeChangeP2(v, addr+2, iCookie); + }else{ + /* Read the specified cookie value */ + static const VdbeOpList readCookie[] = { + { OP_Transaction, 0, 0, 0}, /* 0 */ + { OP_ReadCookie, 0, 1, 0}, /* 1 */ + { OP_ResultRow, 1, 1, 0} + }; + int addr = sqlite3VdbeAddOpList(v, ArraySize(readCookie), readCookie); + sqlite3VdbeChangeP1(v, addr, iDb); + sqlite3VdbeChangeP1(v, addr+1, iDb); + sqlite3VdbeChangeP3(v, addr+1, iCookie); + sqlite3VdbeSetNumCols(v, 1); + sqlite3VdbeSetColName(v, 0, COLNAME_NAME, zLeft, SQLITE_TRANSIENT); + } + }else +#endif /* SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS */ - /* If the pSrc table is the right table of a LEFT JOIN then we may not - ** use an index to satisfy IS NULL constraints on that table. This is - ** because columns might end up being NULL if the table does not match - - ** a circumstance which the index cannot help us discover. Ticket #2177. +#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS + /* + ** PRAGMA compile_options + ** + ** Return the names of all compile-time options used in this build, + ** one option per row. */ - if( (pSrc->jointype & JT_LEFT)!=0 ){ - eqTermMask = WO_EQ|WO_IN; - }else{ - eqTermMask = WO_EQ|WO_IN|WO_ISNULL; - } + if( sqlite3StrICmp(zLeft, "compile_options")==0 ){ + int i = 0; + const char *zOpt; + sqlite3VdbeSetNumCols(v, 1); + pParse->nMem = 1; + sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "compile_option", SQLITE_STATIC); + while( (zOpt = sqlite3_compileoption_get(i++))!=0 ){ + sqlite3VdbeAddOp4(v, OP_String8, 0, 1, 0, zOpt, 0); + sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 1); + } + }else +#endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */ - /* Look at each index. +#ifndef SQLITE_OMIT_WAL + /* + ** PRAGMA [database.]wal_checkpoint = passive|full|restart + ** + ** Checkpoint the database. */ - if( pSrc->pIndex ){ - pProbe = pSrc->pIndex; - } - for(; pProbe; pProbe=(pSrc->pIndex ? 0 : pProbe->pNext)){ - double inMultiplier = 1; /* Number of equality look-ups needed */ - int inMultIsEst = 0; /* True if inMultiplier is an estimate */ - - WHERETRACE(("... index %s:\n", pProbe->zName)); - - /* Count the number of columns in the index that are satisfied - ** by x=EXPR or x IS NULL constraints or x IN (...) constraints. - ** For a term of the form x=EXPR or x IS NULL we only have to do - ** a single binary search. But for x IN (...) we have to do a - ** number of binary searched - ** equal to the number of entries on the RHS of the IN operator. - ** The inMultipler variable with try to estimate the number of - ** binary searches needed. - */ - wsFlags = 0; - for(i=0; inColumn; i++){ - int j = pProbe->aiColumn[i]; - pTerm = findTerm(pWC, iCur, j, notReady, eqTermMask, pProbe); - if( pTerm==0 ) break; - wsFlags |= WHERE_COLUMN_EQ; - if( pTerm->eOperator & WO_IN ){ - Expr *pExpr = pTerm->pExpr; - wsFlags |= WHERE_COLUMN_IN; - if( ExprHasProperty(pExpr, EP_xIsSelect) ){ - inMultiplier *= 25; - inMultIsEst = 1; - }else if( pExpr->x.pList ){ - inMultiplier *= pExpr->x.pList->nExpr + 1; - } - }else if( pTerm->eOperator & WO_ISNULL ){ - wsFlags |= WHERE_COLUMN_NULL; - } - } - nRow = pProbe->aiRowEst[i] * inMultiplier; - /* If inMultiplier is an estimate and that estimate results in an - ** nRow it that is more than half number of rows in the table, - ** then reduce inMultipler */ - if( inMultIsEst && nRow*2 > pProbe->aiRowEst[0] ){ - nRow = pProbe->aiRowEst[0]/2; - inMultiplier = nRow/pProbe->aiRowEst[i]; - } - cost = nRow + inMultiplier*estLog(pProbe->aiRowEst[0]); - nEq = i; - if( pProbe->onError!=OE_None && nEq==pProbe->nColumn ){ - testcase( wsFlags & WHERE_COLUMN_IN ); - testcase( wsFlags & WHERE_COLUMN_NULL ); - if( (wsFlags & (WHERE_COLUMN_IN|WHERE_COLUMN_NULL))==0 ){ - wsFlags |= WHERE_UNIQUE; + if( sqlite3StrICmp(zLeft, "wal_checkpoint")==0 ){ + int iBt = (pId2->z?iDb:SQLITE_MAX_ATTACHED); + int eMode = SQLITE_CHECKPOINT_PASSIVE; + if( zRight ){ + if( sqlite3StrICmp(zRight, "full")==0 ){ + eMode = SQLITE_CHECKPOINT_FULL; + }else if( sqlite3StrICmp(zRight, "restart")==0 ){ + eMode = SQLITE_CHECKPOINT_RESTART; } } - WHERETRACE(("...... nEq=%d inMult=%.9g nRow=%.9g cost=%.9g\n", - nEq, inMultiplier, nRow, cost)); + if( sqlite3ReadSchema(pParse) ) goto pragma_out; + sqlite3VdbeSetNumCols(v, 3); + pParse->nMem = 3; + sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "busy", SQLITE_STATIC); + sqlite3VdbeSetColName(v, 1, COLNAME_NAME, "log", SQLITE_STATIC); + sqlite3VdbeSetColName(v, 2, COLNAME_NAME, "checkpointed", SQLITE_STATIC); - /* Look for range constraints. Assume that each range constraint - ** makes the search space 1/3rd smaller. - */ - if( nEqnColumn ){ - int j = pProbe->aiColumn[nEq]; - pTerm = findTerm(pWC, iCur, j, notReady, WO_LT|WO_LE|WO_GT|WO_GE, pProbe); - if( pTerm ){ - wsFlags |= WHERE_COLUMN_RANGE; - if( findTerm(pWC, iCur, j, notReady, WO_LT|WO_LE, pProbe) ){ - wsFlags |= WHERE_TOP_LIMIT; - cost /= 3; - nRow /= 3; - } - if( findTerm(pWC, iCur, j, notReady, WO_GT|WO_GE, pProbe) ){ - wsFlags |= WHERE_BTM_LIMIT; - cost /= 3; - nRow /= 3; - } - WHERETRACE(("...... range reduces nRow to %.9g and cost to %.9g\n", - nRow, cost)); - } - } + sqlite3VdbeAddOp3(v, OP_Checkpoint, iBt, eMode, 1); + sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 3); + }else - /* Add the additional cost of sorting if that is a factor. - */ - if( pOrderBy ){ - if( (wsFlags & (WHERE_COLUMN_IN|WHERE_COLUMN_NULL))==0 - && isSortingIndex(pParse,pWC->pMaskSet,pProbe,iCur,pOrderBy,nEq,&rev) - ){ - if( wsFlags==0 ){ - wsFlags = WHERE_COLUMN_RANGE; - } - wsFlags |= WHERE_ORDERBY; - if( rev ){ - wsFlags |= WHERE_REVERSE; - } - }else{ - cost += cost*estLog(cost); - WHERETRACE(("...... orderby increases cost to %.9g\n", cost)); - } - }else if( wsFlags!=0 && (pParse->db->flags & SQLITE_ReverseOrder)!=0 ){ - /* For application testing, randomly reverse the output order for - ** SELECT statements that omit the ORDER BY clause. This will help - ** to find cases where - */ - wsFlags |= WHERE_REVERSE; + /* + ** PRAGMA wal_autocheckpoint + ** PRAGMA wal_autocheckpoint = N + ** + ** Configure a database connection to automatically checkpoint a database + ** after accumulating N frames in the log. Or query for the current value + ** of N. + */ + if( sqlite3StrICmp(zLeft, "wal_autocheckpoint")==0 ){ + if( zRight ){ + sqlite3_wal_autocheckpoint(db, sqlite3Atoi(zRight)); } + returnSingleInt(pParse, "wal_autocheckpoint", + db->xWalCallback==sqlite3WalDefaultHook ? + SQLITE_PTR_TO_INT(db->pWalArg) : 0); + }else +#endif - /* Check to see if we can get away with using just the index without - ** ever reading the table. If that is the case, then halve the - ** cost of this index. - */ - if( wsFlags && pSrc->colUsed < (((Bitmask)1)<<(BMS-1)) ){ - Bitmask m = pSrc->colUsed; - int j; - for(j=0; jnColumn; j++){ - int x = pProbe->aiColumn[j]; - if( xrCost ){ - pCost->rCost = cost; - pCost->nRow = nRow; - pCost->plan.wsFlags = wsFlags; - pCost->plan.nEq = nEq; - assert( pCost->plan.wsFlags & WHERE_INDEXED ); - pCost->plan.u.pIdx = pProbe; +#if defined(SQLITE_DEBUG) || defined(SQLITE_TEST) + /* + ** Report the current state of file logs for all databases + */ + if( sqlite3StrICmp(zLeft, "lock_status")==0 ){ + static const char *const azLockName[] = { + "unlocked", "shared", "reserved", "pending", "exclusive" + }; + int i; + sqlite3VdbeSetNumCols(v, 2); + pParse->nMem = 2; + sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "database", SQLITE_STATIC); + sqlite3VdbeSetColName(v, 1, COLNAME_NAME, "status", SQLITE_STATIC); + for(i=0; inDb; i++){ + Btree *pBt; + Pager *pPager; + const char *zState = "unknown"; + int j; + if( db->aDb[i].zName==0 ) continue; + sqlite3VdbeAddOp4(v, OP_String8, 0, 1, 0, db->aDb[i].zName, P4_STATIC); + pBt = db->aDb[i].pBt; + if( pBt==0 || (pPager = sqlite3BtreePager(pBt))==0 ){ + zState = "closed"; + }else if( sqlite3_file_control(db, i ? db->aDb[i].zName : 0, + SQLITE_FCNTL_LOCKSTATE, &j)==SQLITE_OK ){ + zState = azLockName[j]; + } + sqlite3VdbeAddOp4(v, OP_String8, 0, 2, 0, zState, P4_STATIC); + sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 2); } - } - /* Report the best result - */ - pCost->plan.wsFlags |= eqTermMask; - WHERETRACE(("best index is %s, cost=%.9g, nrow=%.9g, wsFlags=%x, nEq=%d\n", - (pCost->plan.wsFlags & WHERE_INDEXED)!=0 ? - pCost->plan.u.pIdx->zName : "(none)", pCost->nRow, - pCost->rCost, pCost->plan.wsFlags, pCost->plan.nEq)); -} + }else +#endif -/* -** Find the query plan for accessing table pSrc->pTab. Write the -** best query plan and its cost into the WhereCost object supplied -** as the last parameter. This function may calculate the cost of -** both real and virtual table scans. -*/ -static void bestIndex( - Parse *pParse, /* The parsing context */ - WhereClause *pWC, /* The WHERE clause */ - struct SrcList_item *pSrc, /* The FROM clause term to search */ - Bitmask notReady, /* Mask of cursors that are not available */ - ExprList *pOrderBy, /* The ORDER BY clause */ - WhereCost *pCost /* Lowest cost query plan */ -){ -#ifndef SQLITE_OMIT_VIRTUALTABLE - if( IsVirtual(pSrc->pTab) ){ - sqlite3_index_info *p = 0; - bestVirtualIndex(pParse, pWC, pSrc, notReady, pOrderBy, pCost, &p); - if( p->needToFreeIdxStr ){ - sqlite3_free(p->idxStr); +#ifdef SQLITE_HAS_CODEC + if( sqlite3StrICmp(zLeft, "key")==0 && zRight ){ + sqlite3_key(db, zRight, sqlite3Strlen30(zRight)); + }else + if( sqlite3StrICmp(zLeft, "rekey")==0 && zRight ){ + sqlite3_rekey(db, zRight, sqlite3Strlen30(zRight)); + }else + if( zRight && (sqlite3StrICmp(zLeft, "hexkey")==0 || + sqlite3StrICmp(zLeft, "hexrekey")==0) ){ + int i, h1, h2; + char zKey[40]; + for(i=0; (h1 = zRight[i])!=0 && (h2 = zRight[i+1])!=0; i+=2){ + h1 += 9*(1&(h1>>6)); + h2 += 9*(1&(h2>>6)); + zKey[i/2] = (h2 & 0x0f) | ((h1 & 0xf)<<4); + } + if( (zLeft[3] & 0xf)==0xb ){ + sqlite3_key(db, zKey, i/2); + }else{ + sqlite3_rekey(db, zKey, i/2); } - sqlite3DbFree(pParse->db, p); }else #endif - { - bestBtreeIndex(pParse, pWC, pSrc, notReady, pOrderBy, pCost); +#if defined(SQLITE_HAS_CODEC) || defined(SQLITE_ENABLE_CEROD) + if( sqlite3StrICmp(zLeft, "activate_extensions")==0 ){ +#ifdef SQLITE_HAS_CODEC + if( sqlite3StrNICmp(zRight, "see-", 4)==0 ){ + sqlite3_activate_see(&zRight[4]); + } +#endif +#ifdef SQLITE_ENABLE_CEROD + if( sqlite3StrNICmp(zRight, "cerod-", 6)==0 ){ + sqlite3_activate_cerod(&zRight[6]); + } +#endif + }else +#endif + + + {/* Empty ELSE clause */} + + /* + ** Reset the safety level, in case the fullfsync flag or synchronous + ** setting changed. + */ +#ifndef SQLITE_OMIT_PAGER_PRAGMAS + if( db->autoCommit ){ + sqlite3BtreeSetSafetyLevel(pDb->pBt, pDb->safety_level, + (db->flags&SQLITE_FullFSync)!=0, + (db->flags&SQLITE_CkptFullFSync)!=0); } +#endif +pragma_out: + sqlite3DbFree(db, zLeft); + sqlite3DbFree(db, zRight); } +#endif /* SQLITE_OMIT_PRAGMA */ + +/************** End of pragma.c **********************************************/ +/************** Begin file prepare.c *****************************************/ /* -** Disable a term in the WHERE clause. Except, do not disable the term -** if it controls a LEFT OUTER JOIN and it did not originate in the ON -** or USING clause of that join. -** -** Consider the term t2.z='ok' in the following queries: +** 2005 May 25 ** -** (1) SELECT * FROM t1 LEFT JOIN t2 ON t1.a=t2.x WHERE t2.z='ok' -** (2) SELECT * FROM t1 LEFT JOIN t2 ON t1.a=t2.x AND t2.z='ok' -** (3) SELECT * FROM t1, t2 WHERE t1.a=t2.x AND t2.z='ok' +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: ** -** The t2.z='ok' is disabled in the in (2) because it originates -** in the ON clause. The term is disabled in (3) because it is not part -** of a LEFT OUTER JOIN. In (1), the term is not disabled. +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. ** -** Disabling a term causes that term to not be tested in the inner loop -** of the join. Disabling is an optimization. When terms are satisfied -** by indices, we disable them to prevent redundant tests in the inner -** loop. We would get the correct results if nothing were ever disabled, -** but joins might run a little slower. The trick is to disable as much -** as we can without disabling too much. If we disabled in (1), we'd get -** the wrong answer. See ticket #813. -*/ -static void disableTerm(WhereLevel *pLevel, WhereTerm *pTerm){ - if( pTerm - && ALWAYS((pTerm->wtFlags & TERM_CODED)==0) - && (pLevel->iLeftJoin==0 || ExprHasProperty(pTerm->pExpr, EP_FromJoin)) - ){ - pTerm->wtFlags |= TERM_CODED; - if( pTerm->iParent>=0 ){ - WhereTerm *pOther = &pTerm->pWC->a[pTerm->iParent]; - if( (--pOther->nChild)==0 ){ - disableTerm(pLevel, pOther); - } - } - } -} - -/* -** Apply the affinities associated with the first n columns of index -** pIdx to the values in the n registers starting at base. +************************************************************************* +** This file contains the implementation of the sqlite3_prepare() +** interface, and routines that contribute to loading the database schema +** from disk. */ -static void codeApplyAffinity(Parse *pParse, int base, int n, Index *pIdx){ - if( n>0 ){ - Vdbe *v = pParse->pVdbe; - assert( v!=0 ); - sqlite3VdbeAddOp2(v, OP_Affinity, base, n); - sqlite3IndexAffinityStr(v, pIdx); - sqlite3ExprCacheAffinityChange(pParse, base, n); - } -} - /* -** Generate code for a single equality term of the WHERE clause. An equality -** term can be either X=expr or X IN (...). pTerm is the term to be -** coded. -** -** The current value for the constraint is left in register iReg. -** -** For a constraint of the form X=expr, the expression is evaluated and its -** result is left on the stack. For constraints of the form X IN (...) -** this routine sets up a loop that will iterate over all values of X. +** Fill the InitData structure with an error message that indicates +** that the database is corrupt. */ -static int codeEqualityTerm( - Parse *pParse, /* The parsing context */ - WhereTerm *pTerm, /* The term of the WHERE clause to be coded */ - WhereLevel *pLevel, /* When level of the FROM clause we are working on */ - int iTarget /* Attempt to leave results in this register */ +static void corruptSchema( + InitData *pData, /* Initialization context */ + const char *zObj, /* Object being parsed at the point of error */ + const char *zExtra /* Error information */ ){ - Expr *pX = pTerm->pExpr; - Vdbe *v = pParse->pVdbe; - int iReg; /* Register holding results */ - - assert( iTarget>0 ); - if( pX->op==TK_EQ ){ - iReg = sqlite3ExprCodeTarget(pParse, pX->pRight, iTarget); - }else if( pX->op==TK_ISNULL ){ - iReg = iTarget; - sqlite3VdbeAddOp2(v, OP_Null, 0, iReg); -#ifndef SQLITE_OMIT_SUBQUERY - }else{ - int eType; - int iTab; - struct InLoop *pIn; - - assert( pX->op==TK_IN ); - iReg = iTarget; - eType = sqlite3FindInIndex(pParse, pX, 0); - iTab = pX->iTable; - sqlite3VdbeAddOp2(v, OP_Rewind, iTab, 0); - assert( pLevel->plan.wsFlags & WHERE_IN_ABLE ); - if( pLevel->u.in.nIn==0 ){ - pLevel->addrNxt = sqlite3VdbeMakeLabel(v); - } - pLevel->u.in.nIn++; - pLevel->u.in.aInLoop = - sqlite3DbReallocOrFree(pParse->db, pLevel->u.in.aInLoop, - sizeof(pLevel->u.in.aInLoop[0])*pLevel->u.in.nIn); - pIn = pLevel->u.in.aInLoop; - if( pIn ){ - pIn += pLevel->u.in.nIn - 1; - pIn->iCur = iTab; - if( eType==IN_INDEX_ROWID ){ - pIn->addrInTop = sqlite3VdbeAddOp2(v, OP_Rowid, iTab, iReg); - }else{ - pIn->addrInTop = sqlite3VdbeAddOp3(v, OP_Column, iTab, 0, iReg); - } - sqlite3VdbeAddOp1(v, OP_IsNull, iReg); - }else{ - pLevel->u.in.nIn = 0; + sqlite3 *db = pData->db; + if( !db->mallocFailed && (db->flags & SQLITE_RecoveryMode)==0 ){ + if( zObj==0 ) zObj = "?"; + sqlite3SetString(pData->pzErrMsg, db, + "malformed database schema (%s)", zObj); + if( zExtra ){ + *pData->pzErrMsg = sqlite3MAppendf(db, *pData->pzErrMsg, + "%s - %s", *pData->pzErrMsg, zExtra); } -#endif } - disableTerm(pLevel, pTerm); - return iReg; + pData->rc = db->mallocFailed ? SQLITE_NOMEM : SQLITE_CORRUPT_BKPT; } /* -** Generate code that will evaluate all == and IN constraints for an -** index. The values for all constraints are left on the stack. +** This is the callback routine for the code that initializes the +** database. See sqlite3Init() below for additional information. +** This routine is also called from the OP_ParseSchema opcode of the VDBE. ** -** For example, consider table t1(a,b,c,d,e,f) with index i1(a,b,c). -** Suppose the WHERE clause is this: a==5 AND b IN (1,2,3) AND c>5 AND c<10 -** The index has as many as three equality constraints, but in this -** example, the third "c" value is an inequality. So only two -** constraints are coded. This routine will generate code to evaluate -** a==5 and b IN (1,2,3). The current values for a and b will be stored -** in consecutive registers and the index of the first register is returned. +** Each callback contains the following information: ** -** In the example above nEq==2. But this subroutine works for any value -** of nEq including 0. If nEq==0, this routine is nearly a no-op. -** The only thing it does is allocate the pLevel->iMem memory cell. +** argv[0] = name of thing being created +** argv[1] = root page number for table or index. 0 for trigger or view. +** argv[2] = SQL text for the CREATE statement. ** -** This routine always allocates at least one memory cell and returns -** the index of that memory cell. The code that -** calls this routine will use that memory cell to store the termination -** key value of the loop. If one or more IN operators appear, then -** this routine allocates an additional nEq memory cells for internal -** use. */ -static int codeAllEqualityTerms( - Parse *pParse, /* Parsing context */ - WhereLevel *pLevel, /* Which nested loop of the FROM we are coding */ - WhereClause *pWC, /* The WHERE clause */ - Bitmask notReady, /* Which parts of FROM have not yet been coded */ - int nExtraReg /* Number of extra registers to allocate */ -){ - int nEq = pLevel->plan.nEq; /* The number of == or IN constraints to code */ - Vdbe *v = pParse->pVdbe; /* The vm under construction */ - Index *pIdx; /* The index being used for this loop */ - int iCur = pLevel->iTabCur; /* The cursor of the table */ - WhereTerm *pTerm; /* A single constraint term */ - int j; /* Loop counter */ - int regBase; /* Base register */ - int nReg; /* Number of registers to allocate */ +SQLITE_PRIVATE int sqlite3InitCallback(void *pInit, int argc, char **argv, char **NotUsed){ + InitData *pData = (InitData*)pInit; + sqlite3 *db = pData->db; + int iDb = pData->iDb; - /* This module is only called on query plans that use an index. */ - assert( pLevel->plan.wsFlags & WHERE_INDEXED ); - pIdx = pLevel->plan.u.pIdx; + assert( argc==3 ); + UNUSED_PARAMETER2(NotUsed, argc); + assert( sqlite3_mutex_held(db->mutex) ); + DbClearProperty(db, iDb, DB_Empty); + if( db->mallocFailed ){ + corruptSchema(pData, argv[0], 0); + return 1; + } - /* Figure out how many memory cells we will need then allocate them. - */ - regBase = pParse->nMem + 1; - nReg = pLevel->plan.nEq + nExtraReg; - pParse->nMem += nReg; + assert( iDb>=0 && iDbnDb ); + if( argv==0 ) return 0; /* Might happen if EMPTY_RESULT_CALLBACKS are on */ + if( argv[1]==0 ){ + corruptSchema(pData, argv[0], 0); + }else if( argv[2] && argv[2][0] ){ + /* Call the parser to process a CREATE TABLE, INDEX or VIEW. + ** But because db->init.busy is set to 1, no VDBE code is generated + ** or executed. All the parser does is build the internal data + ** structures that describe the table, index, or view. + */ + int rc; + sqlite3_stmt *pStmt; + TESTONLY(int rcp); /* Return code from sqlite3_prepare() */ - /* Evaluate the equality constraints - */ - assert( pIdx->nColumn>=nEq ); - for(j=0; jaiColumn[j]; - pTerm = findTerm(pWC, iCur, k, notReady, pLevel->plan.wsFlags, pIdx); - if( NEVER(pTerm==0) ) break; - assert( (pTerm->wtFlags & TERM_CODED)==0 ); - r1 = codeEqualityTerm(pParse, pTerm, pLevel, regBase+j); - if( r1!=regBase+j ){ - if( nReg==1 ){ - sqlite3ReleaseTempReg(pParse, regBase); - regBase = r1; + assert( db->init.busy ); + db->init.iDb = iDb; + db->init.newTnum = sqlite3Atoi(argv[1]); + db->init.orphanTrigger = 0; + TESTONLY(rcp = ) sqlite3_prepare(db, argv[2], -1, &pStmt, 0); + rc = db->errCode; + assert( (rc&0xFF)==(rcp&0xFF) ); + db->init.iDb = 0; + if( SQLITE_OK!=rc ){ + if( db->init.orphanTrigger ){ + assert( iDb==1 ); }else{ - sqlite3VdbeAddOp2(v, OP_SCopy, r1, regBase+j); + pData->rc = rc; + if( rc==SQLITE_NOMEM ){ + db->mallocFailed = 1; + }else if( rc!=SQLITE_INTERRUPT && (rc&0xFF)!=SQLITE_LOCKED ){ + corruptSchema(pData, argv[0], sqlite3_errmsg(db)); + } } } - testcase( pTerm->eOperator & WO_ISNULL ); - testcase( pTerm->eOperator & WO_IN ); - if( (pTerm->eOperator & (WO_ISNULL|WO_IN))==0 ){ - sqlite3VdbeAddOp2(v, OP_IsNull, regBase+j, pLevel->addrBrk); + sqlite3_finalize(pStmt); + }else if( argv[0]==0 ){ + corruptSchema(pData, 0, 0); + }else{ + /* If the SQL column is blank it means this is an index that + ** was created to be the PRIMARY KEY or to fulfill a UNIQUE + ** constraint for a CREATE TABLE. The index should have already + ** been created when we processed the CREATE TABLE. All we have + ** to do here is record the root page number for that index. + */ + Index *pIndex; + pIndex = sqlite3FindIndex(db, argv[0], db->aDb[iDb].zName); + if( pIndex==0 ){ + /* This can occur if there exists an index on a TEMP table which + ** has the same name as another index on a permanent index. Since + ** the permanent table is hidden by the TEMP table, we can also + ** safely ignore the index on the permanent table. + */ + /* Do Nothing */; + }else if( sqlite3GetInt32(argv[1], &pIndex->tnum)==0 ){ + corruptSchema(pData, argv[0], "invalid rootpage"); } } - return regBase; + return 0; } /* -** Generate code for the start of the iLevel-th loop in the WHERE clause -** implementation described by pWInfo. +** Attempt to read the database schema and initialize internal +** data structures for a single database file. The index of the +** database file is given by iDb. iDb==0 is used for the main +** database. iDb==1 should never be used. iDb>=2 is used for +** auxiliary databases. Return one of the SQLITE_ error codes to +** indicate success or failure. */ -static Bitmask codeOneLoopStart( - WhereInfo *pWInfo, /* Complete information about the WHERE clause */ - int iLevel, /* Which level of pWInfo->a[] should be coded */ - u16 wctrlFlags, /* One of the WHERE_* flags defined in sqliteInt.h */ - Bitmask notReady /* Which tables are currently available */ -){ - int j, k; /* Loop counters */ - int iCur; /* The VDBE cursor for the table */ - int addrNxt; /* Where to jump to continue with the next IN case */ - int omitTable; /* True if we use the index only */ - int bRev; /* True if we need to scan in reverse order */ - WhereLevel *pLevel; /* The where level to be coded */ - WhereClause *pWC; /* Decomposition of the entire WHERE clause */ - WhereTerm *pTerm; /* A WHERE clause term */ - Parse *pParse; /* Parsing context */ - Vdbe *v; /* The prepared stmt under constructions */ - struct SrcList_item *pTabItem; /* FROM clause term being coded */ - int addrBrk; /* Jump here to break out of the loop */ - int addrCont; /* Jump here to continue with next cycle */ - int iRowidReg = 0; /* Rowid is stored in this register, if not zero */ - int iReleaseReg = 0; /* Temp register to free before returning */ - - pParse = pWInfo->pParse; - v = pParse->pVdbe; - pWC = pWInfo->pWC; - pLevel = &pWInfo->a[iLevel]; - pTabItem = &pWInfo->pTabList->a[pLevel->iFrom]; - iCur = pTabItem->iCursor; - bRev = (pLevel->plan.wsFlags & WHERE_REVERSE)!=0; - omitTable = (pLevel->plan.wsFlags & WHERE_IDX_ONLY)!=0 - && (wctrlFlags & WHERE_FORCE_TABLE)==0; +static int sqlite3InitOne(sqlite3 *db, int iDb, char **pzErrMsg){ + int rc; + int i; + int size; + Table *pTab; + Db *pDb; + char const *azArg[4]; + int meta[5]; + InitData initData; + char const *zMasterSchema; + char const *zMasterName; + int openedTransaction = 0; - /* Create labels for the "break" and "continue" instructions - ** for the current loop. Jump to addrBrk to break out of a loop. - ** Jump to cont to go immediately to the next iteration of the - ** loop. - ** - ** When there is an IN operator, we also have a "addrNxt" label that - ** means to continue with the next IN value combination. When - ** there are no IN operators in the constraints, the "addrNxt" label - ** is the same as "addrBrk". + /* + ** The master database table has a structure like this */ - addrBrk = pLevel->addrBrk = pLevel->addrNxt = sqlite3VdbeMakeLabel(v); - addrCont = pLevel->addrCont = sqlite3VdbeMakeLabel(v); + static const char master_schema[] = + "CREATE TABLE sqlite_master(\n" + " type text,\n" + " name text,\n" + " tbl_name text,\n" + " rootpage integer,\n" + " sql text\n" + ")" + ; +#ifndef SQLITE_OMIT_TEMPDB + static const char temp_master_schema[] = + "CREATE TEMP TABLE sqlite_temp_master(\n" + " type text,\n" + " name text,\n" + " tbl_name text,\n" + " rootpage integer,\n" + " sql text\n" + ")" + ; +#else + #define temp_master_schema 0 +#endif - /* If this is the right table of a LEFT OUTER JOIN, allocate and - ** initialize a memory cell that records if this table matches any - ** row of the left table of the join. + assert( iDb>=0 && iDbnDb ); + assert( db->aDb[iDb].pSchema ); + assert( sqlite3_mutex_held(db->mutex) ); + assert( iDb==1 || sqlite3BtreeHoldsMutex(db->aDb[iDb].pBt) ); + + /* zMasterSchema and zInitScript are set to point at the master schema + ** and initialisation script appropriate for the database being + ** initialised. zMasterName is the name of the master table. */ - if( pLevel->iFrom>0 && (pTabItem[0].jointype & JT_LEFT)!=0 ){ - pLevel->iLeftJoin = ++pParse->nMem; - sqlite3VdbeAddOp2(v, OP_Integer, 0, pLevel->iLeftJoin); - VdbeComment((v, "init LEFT JOIN no-match flag")); + if( !OMIT_TEMPDB && iDb==1 ){ + zMasterSchema = temp_master_schema; + }else{ + zMasterSchema = master_schema; } + zMasterName = SCHEMA_TABLE(iDb); -#ifndef SQLITE_OMIT_VIRTUALTABLE - if( (pLevel->plan.wsFlags & WHERE_VIRTUALTABLE)!=0 ){ - /* Case 0: The table is a virtual-table. Use the VFilter and VNext - ** to access the data. - */ - int iReg; /* P3 Value for OP_VFilter */ - sqlite3_index_info *pVtabIdx = pLevel->plan.u.pVtabIdx; - int nConstraint = pVtabIdx->nConstraint; - struct sqlite3_index_constraint_usage *aUsage = - pVtabIdx->aConstraintUsage; - const struct sqlite3_index_constraint *aConstraint = - pVtabIdx->aConstraint; + /* Construct the schema tables. */ + azArg[0] = zMasterName; + azArg[1] = "1"; + azArg[2] = zMasterSchema; + azArg[3] = 0; + initData.db = db; + initData.iDb = iDb; + initData.rc = SQLITE_OK; + initData.pzErrMsg = pzErrMsg; + sqlite3InitCallback(&initData, 3, (char **)azArg, 0); + if( initData.rc ){ + rc = initData.rc; + goto error_out; + } + pTab = sqlite3FindTable(db, zMasterName, db->aDb[iDb].zName); + if( ALWAYS(pTab) ){ + pTab->tabFlags |= TF_Readonly; + } - iReg = sqlite3GetTempRange(pParse, nConstraint+2); - for(j=1; j<=nConstraint; j++){ - for(k=0; ka[iTerm].pExpr->pRight, iReg+j+1); - break; - } - } - if( k==nConstraint ) break; - } - sqlite3VdbeAddOp2(v, OP_Integer, pVtabIdx->idxNum, iReg); - sqlite3VdbeAddOp2(v, OP_Integer, j-1, iReg+1); - sqlite3VdbeAddOp4(v, OP_VFilter, iCur, addrBrk, iReg, pVtabIdx->idxStr, - pVtabIdx->needToFreeIdxStr ? P4_MPRINTF : P4_STATIC); - pVtabIdx->needToFreeIdxStr = 0; - for(j=0; ja[iTerm]); - } + /* Create a cursor to hold the database open + */ + pDb = &db->aDb[iDb]; + if( pDb->pBt==0 ){ + if( !OMIT_TEMPDB && ALWAYS(iDb==1) ){ + DbSetProperty(db, 1, DB_SchemaLoaded); } - pLevel->op = OP_VNext; - pLevel->p1 = iCur; - pLevel->p2 = sqlite3VdbeCurrentAddr(v); - sqlite3ReleaseTempRange(pParse, iReg, nConstraint+2); - }else -#endif /* SQLITE_OMIT_VIRTUALTABLE */ + return SQLITE_OK; + } - if( pLevel->plan.wsFlags & WHERE_ROWID_EQ ){ - /* Case 1: We can directly reference a single row using an - ** equality comparison against the ROWID field. Or - ** we reference multiple rows using a "rowid IN (...)" - ** construct. - */ - iReleaseReg = sqlite3GetTempReg(pParse); - pTerm = findTerm(pWC, iCur, -1, notReady, WO_EQ|WO_IN, 0); - assert( pTerm!=0 ); - assert( pTerm->pExpr!=0 ); - assert( pTerm->leftCursor==iCur ); - assert( omitTable==0 ); - iRowidReg = codeEqualityTerm(pParse, pTerm, pLevel, iReleaseReg); - addrNxt = pLevel->addrNxt; - sqlite3VdbeAddOp2(v, OP_MustBeInt, iRowidReg, addrNxt); - sqlite3VdbeAddOp3(v, OP_NotExists, iCur, addrNxt, iRowidReg); - sqlite3ExprCacheStore(pParse, iCur, -1, iRowidReg); - VdbeComment((v, "pk")); - pLevel->op = OP_Noop; - }else if( pLevel->plan.wsFlags & WHERE_ROWID_RANGE ){ - /* Case 2: We have an inequality comparison against the ROWID field. - */ - int testOp = OP_Noop; - int start; - int memEndValue = 0; - WhereTerm *pStart, *pEnd; - - assert( omitTable==0 ); - pStart = findTerm(pWC, iCur, -1, notReady, WO_GT|WO_GE, 0); - pEnd = findTerm(pWC, iCur, -1, notReady, WO_LT|WO_LE, 0); - if( bRev ){ - pTerm = pStart; - pStart = pEnd; - pEnd = pTerm; + /* If there is not already a read-only (or read-write) transaction opened + ** on the b-tree database, open one now. If a transaction is opened, it + ** will be closed before this function returns. */ + sqlite3BtreeEnter(pDb->pBt); + if( !sqlite3BtreeIsInReadTrans(pDb->pBt) ){ + rc = sqlite3BtreeBeginTrans(pDb->pBt, 0); + if( rc!=SQLITE_OK ){ + sqlite3SetString(pzErrMsg, db, "%s", sqlite3ErrStr(rc)); + goto initone_error_out; } - if( pStart ){ - Expr *pX; /* The expression that defines the start bound */ - int r1, rTemp; /* Registers for holding the start boundary */ + openedTransaction = 1; + } - /* The following constant maps TK_xx codes into corresponding - ** seek opcodes. It depends on a particular ordering of TK_xx - */ - const u8 aMoveOp[] = { - /* TK_GT */ OP_SeekGt, - /* TK_LE */ OP_SeekLe, - /* TK_LT */ OP_SeekLt, - /* TK_GE */ OP_SeekGe - }; - assert( TK_LE==TK_GT+1 ); /* Make sure the ordering.. */ - assert( TK_LT==TK_GT+2 ); /* ... of the TK_xx values... */ - assert( TK_GE==TK_GT+3 ); /* ... is correcct. */ + /* Get the database meta information. + ** + ** Meta values are as follows: + ** meta[0] Schema cookie. Changes with each schema change. + ** meta[1] File format of schema layer. + ** meta[2] Size of the page cache. + ** meta[3] Largest rootpage (auto/incr_vacuum mode) + ** meta[4] Db text encoding. 1:UTF-8 2:UTF-16LE 3:UTF-16BE + ** meta[5] User version + ** meta[6] Incremental vacuum mode + ** meta[7] unused + ** meta[8] unused + ** meta[9] unused + ** + ** Note: The #defined SQLITE_UTF* symbols in sqliteInt.h correspond to + ** the possible values of meta[4]. + */ + for(i=0; ipBt, i+1, (u32 *)&meta[i]); + } + pDb->pSchema->schema_cookie = meta[BTREE_SCHEMA_VERSION-1]; - pX = pStart->pExpr; - assert( pX!=0 ); - assert( pStart->leftCursor==iCur ); - r1 = sqlite3ExprCodeTemp(pParse, pX->pRight, &rTemp); - sqlite3VdbeAddOp3(v, aMoveOp[pX->op-TK_GT], iCur, addrBrk, r1); - VdbeComment((v, "pk")); - sqlite3ExprCacheAffinityChange(pParse, r1, 1); - sqlite3ReleaseTempReg(pParse, rTemp); - disableTerm(pLevel, pStart); + /* If opening a non-empty database, check the text encoding. For the + ** main database, set sqlite3.enc to the encoding of the main database. + ** For an attached db, it is an error if the encoding is not the same + ** as sqlite3.enc. + */ + if( meta[BTREE_TEXT_ENCODING-1] ){ /* text encoding */ + if( iDb==0 ){ + u8 encoding; + /* If opening the main database, set ENC(db). */ + encoding = (u8)meta[BTREE_TEXT_ENCODING-1] & 3; + if( encoding==0 ) encoding = SQLITE_UTF8; + ENC(db) = encoding; }else{ - sqlite3VdbeAddOp2(v, bRev ? OP_Last : OP_Rewind, iCur, addrBrk); - } - if( pEnd ){ - Expr *pX; - pX = pEnd->pExpr; - assert( pX!=0 ); - assert( pEnd->leftCursor==iCur ); - memEndValue = ++pParse->nMem; - sqlite3ExprCode(pParse, pX->pRight, memEndValue); - if( pX->op==TK_LT || pX->op==TK_GT ){ - testOp = bRev ? OP_Le : OP_Ge; - }else{ - testOp = bRev ? OP_Lt : OP_Gt; + /* If opening an attached database, the encoding much match ENC(db) */ + if( meta[BTREE_TEXT_ENCODING-1]!=ENC(db) ){ + sqlite3SetString(pzErrMsg, db, "attached databases must use the same" + " text encoding as main database"); + rc = SQLITE_ERROR; + goto initone_error_out; } - disableTerm(pLevel, pEnd); - } - start = sqlite3VdbeCurrentAddr(v); - pLevel->op = bRev ? OP_Prev : OP_Next; - pLevel->p1 = iCur; - pLevel->p2 = start; - pLevel->p5 = (pStart==0 && pEnd==0) ?1:0; - if( testOp!=OP_Noop ){ - iRowidReg = iReleaseReg = sqlite3GetTempReg(pParse); - sqlite3VdbeAddOp2(v, OP_Rowid, iCur, iRowidReg); - sqlite3ExprCacheStore(pParse, iCur, -1, iRowidReg); - sqlite3VdbeAddOp3(v, testOp, memEndValue, addrBrk, iRowidReg); - sqlite3VdbeChangeP5(v, SQLITE_AFF_NUMERIC | SQLITE_JUMPIFNULL); } - }else if( pLevel->plan.wsFlags & (WHERE_COLUMN_RANGE|WHERE_COLUMN_EQ) ){ - /* Case 3: A scan using an index. - ** - ** The WHERE clause may contain zero or more equality - ** terms ("==" or "IN" operators) that refer to the N - ** left-most columns of the index. It may also contain - ** inequality constraints (>, <, >= or <=) on the indexed - ** column that immediately follows the N equalities. Only - ** the right-most column can be an inequality - the rest must - ** use the "==" and "IN" operators. For example, if the - ** index is on (x,y,z), then the following clauses are all - ** optimized: - ** - ** x=5 - ** x=5 AND y=10 - ** x=5 AND y<10 - ** x=5 AND y>5 AND y<10 - ** x=5 AND y=5 AND z<=10 - ** - ** The z<10 term of the following cannot be used, only - ** the x=5 term: - ** - ** x=5 AND z<10 - ** - ** N may be zero if there are inequality constraints. - ** If there are no inequality constraints, then N is at - ** least one. - ** - ** This case is also used when there are no WHERE clause - ** constraints but an index is selected anyway, in order - ** to force the output order to conform to an ORDER BY. - */ - int aStartOp[] = { - 0, - 0, - OP_Rewind, /* 2: (!start_constraints && startEq && !bRev) */ - OP_Last, /* 3: (!start_constraints && startEq && bRev) */ - OP_SeekGt, /* 4: (start_constraints && !startEq && !bRev) */ - OP_SeekLt, /* 5: (start_constraints && !startEq && bRev) */ - OP_SeekGe, /* 6: (start_constraints && startEq && !bRev) */ - OP_SeekLe /* 7: (start_constraints && startEq && bRev) */ - }; - int aEndOp[] = { - OP_Noop, /* 0: (!end_constraints) */ - OP_IdxGE, /* 1: (end_constraints && !bRev) */ - OP_IdxLT /* 2: (end_constraints && bRev) */ - }; - int nEq = pLevel->plan.nEq; - int isMinQuery = 0; /* If this is an optimized SELECT min(x).. */ - int regBase; /* Base register holding constraint values */ - int r1; /* Temp register */ - WhereTerm *pRangeStart = 0; /* Inequality constraint at range start */ - WhereTerm *pRangeEnd = 0; /* Inequality constraint at range end */ - int startEq; /* True if range start uses ==, >= or <= */ - int endEq; /* True if range end uses ==, >= or <= */ - int start_constraints; /* Start of range is constrained */ - int nConstraint; /* Number of constraint terms */ - Index *pIdx; /* The index we will be using */ - int iIdxCur; /* The VDBE cursor for the index */ - int nExtraReg = 0; /* Number of extra registers needed */ - int op; /* Instruction opcode */ + }else{ + DbSetProperty(db, iDb, DB_Empty); + } + pDb->pSchema->enc = ENC(db); - pIdx = pLevel->plan.u.pIdx; - iIdxCur = pLevel->iIdxCur; - k = pIdx->aiColumn[nEq]; /* Column for inequality constraints */ + if( pDb->pSchema->cache_size==0 ){ +#ifndef SQLITE_OMIT_DEPRECATED + size = sqlite3AbsInt32(meta[BTREE_DEFAULT_CACHE_SIZE-1]); + if( size==0 ){ size = SQLITE_DEFAULT_CACHE_SIZE; } + pDb->pSchema->cache_size = size; +#else + pDb->pSchema->cache_size = SQLITE_DEFAULT_CACHE_SIZE; +#endif + sqlite3BtreeSetCacheSize(pDb->pBt, pDb->pSchema->cache_size); + } - /* If this loop satisfies a sort order (pOrderBy) request that - ** was passed to this function to implement a "SELECT min(x) ..." - ** query, then the caller will only allow the loop to run for - ** a single iteration. This means that the first row returned - ** should not have a NULL value stored in 'x'. If column 'x' is - ** the first one after the nEq equality constraints in the index, - ** this requires some special handling. - */ - if( (wctrlFlags&WHERE_ORDERBY_MIN)!=0 - && (pLevel->plan.wsFlags&WHERE_ORDERBY) - && (pIdx->nColumn>nEq) - ){ - /* assert( pOrderBy->nExpr==1 ); */ - /* assert( pOrderBy->a[0].pExpr->iColumn==pIdx->aiColumn[nEq] ); */ - isMinQuery = 1; - nExtraReg = 1; - } + /* + ** file_format==1 Version 3.0.0. + ** file_format==2 Version 3.1.3. // ALTER TABLE ADD COLUMN + ** file_format==3 Version 3.1.4. // ditto but with non-NULL defaults + ** file_format==4 Version 3.3.0. // DESC indices. Boolean constants + */ + pDb->pSchema->file_format = (u8)meta[BTREE_FILE_FORMAT-1]; + if( pDb->pSchema->file_format==0 ){ + pDb->pSchema->file_format = 1; + } + if( pDb->pSchema->file_format>SQLITE_MAX_FILE_FORMAT ){ + sqlite3SetString(pzErrMsg, db, "unsupported file format"); + rc = SQLITE_ERROR; + goto initone_error_out; + } - /* Find any inequality constraint terms for the start and end - ** of the range. - */ - if( pLevel->plan.wsFlags & WHERE_TOP_LIMIT ){ - pRangeEnd = findTerm(pWC, iCur, k, notReady, (WO_LT|WO_LE), pIdx); - nExtraReg = 1; + /* Ticket #2804: When we open a database in the newer file format, + ** clear the legacy_file_format pragma flag so that a VACUUM will + ** not downgrade the database and thus invalidate any descending + ** indices that the user might have created. + */ + if( iDb==0 && meta[BTREE_FILE_FORMAT-1]>=4 ){ + db->flags &= ~SQLITE_LegacyFileFmt; + } + + /* Read the schema information out of the schema tables + */ + assert( db->init.busy ); + { + char *zSql; + zSql = sqlite3MPrintf(db, + "SELECT name, rootpage, sql FROM '%q'.%s ORDER BY rowid", + db->aDb[iDb].zName, zMasterName); +#ifndef SQLITE_OMIT_AUTHORIZATION + { + int (*xAuth)(void*,int,const char*,const char*,const char*,const char*); + xAuth = db->xAuth; + db->xAuth = 0; +#endif + rc = sqlite3_exec(db, zSql, sqlite3InitCallback, &initData, 0); +#ifndef SQLITE_OMIT_AUTHORIZATION + db->xAuth = xAuth; } - if( pLevel->plan.wsFlags & WHERE_BTM_LIMIT ){ - pRangeStart = findTerm(pWC, iCur, k, notReady, (WO_GT|WO_GE), pIdx); - nExtraReg = 1; +#endif + if( rc==SQLITE_OK ) rc = initData.rc; + sqlite3DbFree(db, zSql); +#ifndef SQLITE_OMIT_ANALYZE + if( rc==SQLITE_OK ){ + sqlite3AnalysisLoad(db, iDb); } - - /* Generate code to evaluate all constraint terms using == or IN - ** and store the values of those terms in an array of registers - ** starting at regBase. +#endif + } + if( db->mallocFailed ){ + rc = SQLITE_NOMEM; + sqlite3ResetAllSchemasOfConnection(db); + } + if( rc==SQLITE_OK || (db->flags&SQLITE_RecoveryMode)){ + /* Black magic: If the SQLITE_RecoveryMode flag is set, then consider + ** the schema loaded, even if errors occurred. In this situation the + ** current sqlite3_prepare() operation will fail, but the following one + ** will attempt to compile the supplied statement against whatever subset + ** of the schema was loaded before the error occurred. The primary + ** purpose of this is to allow access to the sqlite_master table + ** even when its contents have been corrupted. */ - regBase = codeAllEqualityTerms(pParse, pLevel, pWC, notReady, nExtraReg); - addrNxt = pLevel->addrNxt; - + DbSetProperty(db, iDb, DB_SchemaLoaded); + rc = SQLITE_OK; + } - /* If we are doing a reverse order scan on an ascending index, or - ** a forward order scan on a descending index, interchange the - ** start and end terms (pRangeStart and pRangeEnd). - */ - if( bRev==(pIdx->aSortOrder[nEq]==SQLITE_SO_ASC) ){ - SWAP(WhereTerm *, pRangeEnd, pRangeStart); - } + /* Jump here for an error that occurs after successfully allocating + ** curMain and calling sqlite3BtreeEnter(). For an error that occurs + ** before that point, jump to error_out. + */ +initone_error_out: + if( openedTransaction ){ + sqlite3BtreeCommit(pDb->pBt); + } + sqlite3BtreeLeave(pDb->pBt); - testcase( pRangeStart && pRangeStart->eOperator & WO_LE ); - testcase( pRangeStart && pRangeStart->eOperator & WO_GE ); - testcase( pRangeEnd && pRangeEnd->eOperator & WO_LE ); - testcase( pRangeEnd && pRangeEnd->eOperator & WO_GE ); - startEq = !pRangeStart || pRangeStart->eOperator & (WO_LE|WO_GE); - endEq = !pRangeEnd || pRangeEnd->eOperator & (WO_LE|WO_GE); - start_constraints = pRangeStart || nEq>0; +error_out: + if( rc==SQLITE_NOMEM || rc==SQLITE_IOERR_NOMEM ){ + db->mallocFailed = 1; + } + return rc; +} - /* Seek the index cursor to the start of the range. */ - nConstraint = nEq; - if( pRangeStart ){ - sqlite3ExprCode(pParse, pRangeStart->pExpr->pRight, regBase+nEq); - sqlite3VdbeAddOp2(v, OP_IsNull, regBase+nEq, addrNxt); - nConstraint++; - }else if( isMinQuery ){ - sqlite3VdbeAddOp2(v, OP_Null, 0, regBase+nEq); - nConstraint++; - startEq = 0; - start_constraints = 1; +/* +** Initialize all database files - the main database file, the file +** used to store temporary tables, and any additional database files +** created using ATTACH statements. Return a success code. If an +** error occurs, write an error message into *pzErrMsg. +** +** After a database is initialized, the DB_SchemaLoaded bit is set +** bit is set in the flags field of the Db structure. If the database +** file was of zero-length, then the DB_Empty flag is also set. +*/ +SQLITE_PRIVATE int sqlite3Init(sqlite3 *db, char **pzErrMsg){ + int i, rc; + int commit_internal = !(db->flags&SQLITE_InternChanges); + + assert( sqlite3_mutex_held(db->mutex) ); + rc = SQLITE_OK; + db->init.busy = 1; + for(i=0; rc==SQLITE_OK && inDb; i++){ + if( DbHasProperty(db, i, DB_SchemaLoaded) || i==1 ) continue; + rc = sqlite3InitOne(db, i, pzErrMsg); + if( rc ){ + sqlite3ResetOneSchema(db, i); } - codeApplyAffinity(pParse, regBase, nConstraint, pIdx); - op = aStartOp[(start_constraints<<2) + (startEq<<1) + bRev]; - assert( op!=0 ); - testcase( op==OP_Rewind ); - testcase( op==OP_Last ); - testcase( op==OP_SeekGt ); - testcase( op==OP_SeekGe ); - testcase( op==OP_SeekLe ); - testcase( op==OP_SeekLt ); - sqlite3VdbeAddOp4(v, op, iIdxCur, addrNxt, regBase, - SQLITE_INT_TO_PTR(nConstraint), P4_INT32); + } - /* Load the value for the inequality constraint at the end of the - ** range (if any). - */ - nConstraint = nEq; - if( pRangeEnd ){ - sqlite3ExprCacheRemove(pParse, regBase+nEq); - sqlite3ExprCode(pParse, pRangeEnd->pExpr->pRight, regBase+nEq); - sqlite3VdbeAddOp2(v, OP_IsNull, regBase+nEq, addrNxt); - codeApplyAffinity(pParse, regBase, nEq+1, pIdx); - nConstraint++; + /* Once all the other databases have been initialised, load the schema + ** for the TEMP database. This is loaded last, as the TEMP database + ** schema may contain references to objects in other databases. + */ +#ifndef SQLITE_OMIT_TEMPDB + if( rc==SQLITE_OK && ALWAYS(db->nDb>1) + && !DbHasProperty(db, 1, DB_SchemaLoaded) ){ + rc = sqlite3InitOne(db, 1, pzErrMsg); + if( rc ){ + sqlite3ResetOneSchema(db, 1); } + } +#endif - /* Top of the loop body */ - pLevel->p2 = sqlite3VdbeCurrentAddr(v); - - /* Check if the index cursor is past the end of the range. */ - op = aEndOp[(pRangeEnd || nEq) * (1 + bRev)]; - testcase( op==OP_Noop ); - testcase( op==OP_IdxGE ); - testcase( op==OP_IdxLT ); - if( op!=OP_Noop ){ - sqlite3VdbeAddOp4(v, op, iIdxCur, addrNxt, regBase, - SQLITE_INT_TO_PTR(nConstraint), P4_INT32); - sqlite3VdbeChangeP5(v, endEq!=bRev ?1:0); - } + db->init.busy = 0; + if( rc==SQLITE_OK && commit_internal ){ + sqlite3CommitInternalChanges(db); + } - /* If there are inequality constraints, check that the value - ** of the table column that the inequality contrains is not NULL. - ** If it is, jump to the next iteration of the loop. - */ - r1 = sqlite3GetTempReg(pParse); - testcase( pLevel->plan.wsFlags & WHERE_BTM_LIMIT ); - testcase( pLevel->plan.wsFlags & WHERE_TOP_LIMIT ); - if( pLevel->plan.wsFlags & (WHERE_BTM_LIMIT|WHERE_TOP_LIMIT) ){ - sqlite3VdbeAddOp3(v, OP_Column, iIdxCur, nEq, r1); - sqlite3VdbeAddOp2(v, OP_IsNull, r1, addrCont); - } - sqlite3ReleaseTempReg(pParse, r1); + return rc; +} - /* Seek the table cursor, if required */ - disableTerm(pLevel, pRangeStart); - disableTerm(pLevel, pRangeEnd); - if( !omitTable ){ - iRowidReg = iReleaseReg = sqlite3GetTempReg(pParse); - sqlite3VdbeAddOp2(v, OP_IdxRowid, iIdxCur, iRowidReg); - sqlite3ExprCacheStore(pParse, iCur, -1, iRowidReg); - sqlite3VdbeAddOp2(v, OP_Seek, iCur, iRowidReg); /* Deferred seek */ - } +/* +** This routine is a no-op if the database schema is already initialised. +** Otherwise, the schema is loaded. An error code is returned. +*/ +SQLITE_PRIVATE int sqlite3ReadSchema(Parse *pParse){ + int rc = SQLITE_OK; + sqlite3 *db = pParse->db; + assert( sqlite3_mutex_held(db->mutex) ); + if( !db->init.busy ){ + rc = sqlite3Init(db, &pParse->zErrMsg); + } + if( rc!=SQLITE_OK ){ + pParse->rc = rc; + pParse->nErr++; + } + return rc; +} - /* Record the instruction used to terminate the loop. Disable - ** WHERE clause terms made redundant by the index range scan. - */ - pLevel->op = bRev ? OP_Prev : OP_Next; - pLevel->p1 = iIdxCur; - }else -#ifndef SQLITE_OMIT_OR_OPTIMIZATION - if( pLevel->plan.wsFlags & WHERE_MULTI_OR ){ - /* Case 4: Two or more separately indexed terms connected by OR - ** - ** Example: - ** - ** CREATE TABLE t1(a,b,c,d); - ** CREATE INDEX i1 ON t1(a); - ** CREATE INDEX i2 ON t1(b); - ** CREATE INDEX i3 ON t1(c); - ** - ** SELECT * FROM t1 WHERE a=5 OR b=7 OR (c=11 AND d=13) - ** - ** In the example, there are three indexed terms connected by OR. - ** The top of the loop looks like this: - ** - ** Null 1 # Zero the rowset in reg 1 - ** - ** Then, for each indexed term, the following. The arguments to - ** RowSetTest are such that the rowid of the current row is inserted - ** into the RowSet. If it is already present, control skips the - ** Gosub opcode and jumps straight to the code generated by WhereEnd(). - ** - ** sqlite3WhereBegin() - ** RowSetTest # Insert rowid into rowset - ** Gosub 2 A - ** sqlite3WhereEnd() - ** - ** Following the above, code to terminate the loop. Label A, the target - ** of the Gosub above, jumps to the instruction right after the Goto. - ** - ** Null 1 # Zero the rowset in reg 1 - ** Goto B # The loop is finished. - ** - ** A: # Return data, whatever. - ** - ** Return 2 # Jump back to the Gosub - ** - ** B: - ** - */ - WhereClause *pOrWc; /* The OR-clause broken out into subterms */ - WhereTerm *pFinal; /* Final subterm within the OR-clause. */ - SrcList oneTab; /* Shortened table list */ +/* +** Check schema cookies in all databases. If any cookie is out +** of date set pParse->rc to SQLITE_SCHEMA. If all schema cookies +** make no changes to pParse->rc. +*/ +static void schemaIsValid(Parse *pParse){ + sqlite3 *db = pParse->db; + int iDb; + int rc; + int cookie; - int regReturn = ++pParse->nMem; /* Register used with OP_Gosub */ - int regRowset = 0; /* Register for RowSet object */ - int regRowid = 0; /* Register holding rowid */ - int iLoopBody = sqlite3VdbeMakeLabel(v); /* Start of loop body */ - int iRetInit; /* Address of regReturn init */ - int ii; - - pTerm = pLevel->plan.u.pTerm; - assert( pTerm!=0 ); - assert( pTerm->eOperator==WO_OR ); - assert( (pTerm->wtFlags & TERM_ORINFO)!=0 ); - pOrWc = &pTerm->u.pOrInfo->wc; - pFinal = &pOrWc->a[pOrWc->nTerm-1]; + assert( pParse->checkSchema ); + assert( sqlite3_mutex_held(db->mutex) ); + for(iDb=0; iDbnDb; iDb++){ + int openedTransaction = 0; /* True if a transaction is opened */ + Btree *pBt = db->aDb[iDb].pBt; /* Btree database to read cookie from */ + if( pBt==0 ) continue; + + /* If there is not already a read-only (or read-write) transaction opened + ** on the b-tree database, open one now. If a transaction is opened, it + ** will be closed immediately after reading the meta-value. */ + if( !sqlite3BtreeIsInReadTrans(pBt) ){ + rc = sqlite3BtreeBeginTrans(pBt, 0); + if( rc==SQLITE_NOMEM || rc==SQLITE_IOERR_NOMEM ){ + db->mallocFailed = 1; + } + if( rc!=SQLITE_OK ) return; + openedTransaction = 1; + } - /* Set up a SrcList containing just the table being scanned by this loop. */ - oneTab.nSrc = 1; - oneTab.nAlloc = 1; - oneTab.a[0] = *pTabItem; + /* Read the schema cookie from the database. If it does not match the + ** value stored as part of the in-memory schema representation, + ** set Parse.rc to SQLITE_SCHEMA. */ + sqlite3BtreeGetMeta(pBt, BTREE_SCHEMA_VERSION, (u32 *)&cookie); + assert( sqlite3SchemaMutexHeld(db, iDb, 0) ); + if( cookie!=db->aDb[iDb].pSchema->schema_cookie ){ + sqlite3ResetOneSchema(db, iDb); + pParse->rc = SQLITE_SCHEMA; + } - /* Initialize the rowset register to contain NULL. An SQL NULL is - ** equivalent to an empty rowset. - ** - ** Also initialize regReturn to contain the address of the instruction - ** immediately following the OP_Return at the bottom of the loop. This - ** is required in a few obscure LEFT JOIN cases where control jumps - ** over the top of the loop into the body of it. In this case the - ** correct response for the end-of-loop code (the OP_Return) is to - ** fall through to the next instruction, just as an OP_Next does if - ** called on an uninitialized cursor. - */ - if( (wctrlFlags & WHERE_DUPLICATES_OK)==0 ){ - regRowset = ++pParse->nMem; - regRowid = ++pParse->nMem; - sqlite3VdbeAddOp2(v, OP_Null, 0, regRowset); + /* Close the transaction, if one was opened. */ + if( openedTransaction ){ + sqlite3BtreeCommit(pBt); } - iRetInit = sqlite3VdbeAddOp2(v, OP_Integer, 0, regReturn); + } +} - for(ii=0; iinTerm; ii++){ - WhereTerm *pOrTerm = &pOrWc->a[ii]; - if( pOrTerm->leftCursor==iCur || pOrTerm->eOperator==WO_AND ){ - WhereInfo *pSubWInfo; /* Info for single OR-term scan */ - /* Loop through table entries that match term pOrTerm. */ - pSubWInfo = sqlite3WhereBegin(pParse, &oneTab, pOrTerm->pExpr, 0, - WHERE_OMIT_OPEN | WHERE_OMIT_CLOSE | WHERE_FORCE_TABLE); - if( pSubWInfo ){ - if( (wctrlFlags & WHERE_DUPLICATES_OK)==0 ){ - int iSet = ((ii==pOrWc->nTerm-1)?-1:ii); - int r; - r = sqlite3ExprCodeGetColumn(pParse, pTabItem->pTab, -1, iCur, - regRowid, 0); - sqlite3VdbeAddOp4(v, OP_RowSetTest, regRowset, - sqlite3VdbeCurrentAddr(v)+2, - r, SQLITE_INT_TO_PTR(iSet), P4_INT32); - } - sqlite3VdbeAddOp2(v, OP_Gosub, regReturn, iLoopBody); - - /* Finish the loop through table entries that match term pOrTerm. */ - sqlite3WhereEnd(pSubWInfo); - } - } - } - sqlite3VdbeChangeP1(v, iRetInit, sqlite3VdbeCurrentAddr(v)); - /* sqlite3VdbeAddOp2(v, OP_Null, 0, regRowset); */ - sqlite3VdbeAddOp2(v, OP_Goto, 0, pLevel->addrBrk); - sqlite3VdbeResolveLabel(v, iLoopBody); - - pLevel->op = OP_Return; - pLevel->p1 = regReturn; - disableTerm(pLevel, pTerm); - }else -#endif /* SQLITE_OMIT_OR_OPTIMIZATION */ - - { - /* Case 5: There is no usable index. We must do a complete - ** scan of the entire table. - */ - static const u8 aStep[] = { OP_Next, OP_Prev }; - static const u8 aStart[] = { OP_Rewind, OP_Last }; - assert( bRev==0 || bRev==1 ); - assert( omitTable==0 ); - pLevel->op = aStep[bRev]; - pLevel->p1 = iCur; - pLevel->p2 = 1 + sqlite3VdbeAddOp2(v, aStart[bRev], iCur, addrBrk); - pLevel->p5 = SQLITE_STMTSTATUS_FULLSCAN_STEP; - } - notReady &= ~getMask(pWC->pMaskSet, iCur); - - /* Insert code to test every subexpression that can be completely - ** computed using the current set of tables. - */ - k = 0; - for(pTerm=pWC->a, j=pWC->nTerm; j>0; j--, pTerm++){ - Expr *pE; - testcase( pTerm->wtFlags & TERM_VIRTUAL ); - testcase( pTerm->wtFlags & TERM_CODED ); - if( pTerm->wtFlags & (TERM_VIRTUAL|TERM_CODED) ) continue; - if( (pTerm->prereqAll & notReady)!=0 ) continue; - pE = pTerm->pExpr; - assert( pE!=0 ); - if( pLevel->iLeftJoin && !ExprHasProperty(pE, EP_FromJoin) ){ - continue; - } - sqlite3ExprIfFalse(pParse, pE, addrCont, SQLITE_JUMPIFNULL); - k = 1; - pTerm->wtFlags |= TERM_CODED; - } - - /* For a LEFT OUTER JOIN, generate code that will record the fact that - ** at least one row of the right table has matched the left table. - */ - if( pLevel->iLeftJoin ){ - pLevel->addrFirst = sqlite3VdbeCurrentAddr(v); - sqlite3VdbeAddOp2(v, OP_Integer, 1, pLevel->iLeftJoin); - VdbeComment((v, "record LEFT JOIN hit")); - sqlite3ExprCacheClear(pParse); - for(pTerm=pWC->a, j=0; jnTerm; j++, pTerm++){ - testcase( pTerm->wtFlags & TERM_VIRTUAL ); - testcase( pTerm->wtFlags & TERM_CODED ); - if( pTerm->wtFlags & (TERM_VIRTUAL|TERM_CODED) ) continue; - if( (pTerm->prereqAll & notReady)!=0 ) continue; - assert( pTerm->pExpr ); - sqlite3ExprIfFalse(pParse, pTerm->pExpr, addrCont, SQLITE_JUMPIFNULL); - pTerm->wtFlags |= TERM_CODED; - } - } - sqlite3ReleaseTempReg(pParse, iReleaseReg); - - return notReady; -} - -#if defined(SQLITE_TEST) /* -** The following variable holds a text description of query plan generated -** by the most recent call to sqlite3WhereBegin(). Each call to WhereBegin -** overwrites the previous. This information is used for testing and -** analysis only. +** Convert a schema pointer into the iDb index that indicates +** which database file in db->aDb[] the schema refers to. +** +** If the same database is attached more than once, the first +** attached database is returned. */ -SQLITE_API char sqlite3_query_plan[BMS*2*40]; /* Text of the join */ -static int nQPlan = 0; /* Next free slow in _query_plan[] */ - -#endif /* SQLITE_TEST */ - +SQLITE_PRIVATE int sqlite3SchemaToIndex(sqlite3 *db, Schema *pSchema){ + int i = -1000000; -/* -** Free a WhereInfo structure -*/ -static void whereInfoFree(sqlite3 *db, WhereInfo *pWInfo){ - if( pWInfo ){ - int i; - for(i=0; inLevel; i++){ - sqlite3_index_info *pInfo = pWInfo->a[i].pIdxInfo; - if( pInfo ){ - /* assert( pInfo->needToFreeIdxStr==0 || db->mallocFailed ); */ - if( pInfo->needToFreeIdxStr ){ - sqlite3_free(pInfo->idxStr); - } - sqlite3DbFree(db, pInfo); + /* If pSchema is NULL, then return -1000000. This happens when code in + ** expr.c is trying to resolve a reference to a transient table (i.e. one + ** created by a sub-select). In this case the return value of this + ** function should never be used. + ** + ** We return -1000000 instead of the more usual -1 simply because using + ** -1000000 as the incorrect index into db->aDb[] is much + ** more likely to cause a segfault than -1 (of course there are assert() + ** statements too, but it never hurts to play the odds). + */ + assert( sqlite3_mutex_held(db->mutex) ); + if( pSchema ){ + for(i=0; ALWAYS(inDb); i++){ + if( db->aDb[i].pSchema==pSchema ){ + break; } } - whereClauseClear(pWInfo->pWC); - sqlite3DbFree(db, pWInfo); + assert( i>=0 && inDb ); } + return i; } - /* -** Generate the beginning of the loop used for WHERE clause processing. -** The return value is a pointer to an opaque structure that contains -** information needed to terminate the loop. Later, the calling routine -** should invoke sqlite3WhereEnd() with the return value of this function -** in order to complete the WHERE clause processing. -** -** If an error occurs, this routine returns NULL. -** -** The basic idea is to do a nested loop, one loop for each table in -** the FROM clause of a select. (INSERT and UPDATE statements are the -** same as a SELECT with only a single table in the FROM clause.) For -** example, if the SQL is this: -** -** SELECT * FROM t1, t2, t3 WHERE ...; -** -** Then the code generated is conceptually like the following: -** -** foreach row1 in t1 do \ Code generated -** foreach row2 in t2 do |-- by sqlite3WhereBegin() -** foreach row3 in t3 do / -** ... -** end \ Code generated -** end |-- by sqlite3WhereEnd() -** end / -** -** Note that the loops might not be nested in the order in which they -** appear in the FROM clause if a different order is better able to make -** use of indices. Note also that when the IN operator appears in -** the WHERE clause, it might result in additional nested loops for -** scanning through all values on the right-hand side of the IN. -** -** There are Btree cursors associated with each table. t1 uses cursor -** number pTabList->a[0].iCursor. t2 uses the cursor pTabList->a[1].iCursor. -** And so forth. This routine generates code to open those VDBE cursors -** and sqlite3WhereEnd() generates the code to close them. -** -** The code that sqlite3WhereBegin() generates leaves the cursors named -** in pTabList pointing at their appropriate entries. The [...] code -** can use OP_Column and OP_Rowid opcodes on these cursors to extract -** data from the various tables of the loop. -** -** If the WHERE clause is empty, the foreach loops must each scan their -** entire tables. Thus a three-way join is an O(N^3) operation. But if -** the tables have indices and there are terms in the WHERE clause that -** refer to those indices, a complete table scan can be avoided and the -** code will run much faster. Most of the work of this routine is checking -** to see if there are indices that can be used to speed up the loop. -** -** Terms of the WHERE clause are also used to limit which rows actually -** make it to the "..." in the middle of the loop. After each "foreach", -** terms of the WHERE clause that use only terms in that loop and outer -** loops are evaluated and if false a jump is made around all subsequent -** inner loops (or around the "..." if the test occurs within the inner- -** most loop) -** -** OUTER JOINS -** -** An outer join of tables t1 and t2 is conceptally coded as follows: -** -** foreach row1 in t1 do -** flag = 0 -** foreach row2 in t2 do -** start: -** ... -** flag = 1 -** end -** if flag==0 then -** move the row2 cursor to a null row -** goto start -** fi -** end -** -** ORDER BY CLAUSE PROCESSING -** -** *ppOrderBy is a pointer to the ORDER BY clause of a SELECT statement, -** if there is one. If there is no ORDER BY clause or if this routine -** is called from an UPDATE or DELETE statement, then ppOrderBy is NULL. -** -** If an index can be used so that the natural output order of the table -** scan is correct for the ORDER BY clause, then that index is used and -** *ppOrderBy is set to NULL. This is an optimization that prevents an -** unnecessary sort of the result set if an index appropriate for the -** ORDER BY clause already exists. -** -** If the where clause loops cannot be arranged to provide the correct -** output order, then the *ppOrderBy is unchanged. +** Compile the UTF-8 encoded SQL statement zSql into a statement handle. */ -SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin( - Parse *pParse, /* The parser context */ - SrcList *pTabList, /* A list of all tables to be scanned */ - Expr *pWhere, /* The WHERE clause */ - ExprList **ppOrderBy, /* An ORDER BY clause, or NULL */ - u16 wctrlFlags /* One of the WHERE_* flags defined in sqliteInt.h */ +static int sqlite3Prepare( + sqlite3 *db, /* Database handle. */ + const char *zSql, /* UTF-8 encoded SQL statement. */ + int nBytes, /* Length of zSql in bytes. */ + int saveSqlFlag, /* True to copy SQL text into the sqlite3_stmt */ + Vdbe *pReprepare, /* VM being reprepared */ + sqlite3_stmt **ppStmt, /* OUT: A pointer to the prepared statement */ + const char **pzTail /* OUT: End of parsed string */ ){ - int i; /* Loop counter */ - int nByteWInfo; /* Num. bytes allocated for WhereInfo struct */ - WhereInfo *pWInfo; /* Will become the return value of this function */ - Vdbe *v = pParse->pVdbe; /* The virtual database engine */ - Bitmask notReady; /* Cursors that are not yet positioned */ - WhereMaskSet *pMaskSet; /* The expression mask set */ - WhereClause *pWC; /* Decomposition of the WHERE clause */ - struct SrcList_item *pTabItem; /* A single entry from pTabList */ - WhereLevel *pLevel; /* A single level in the pWInfo list */ - int iFrom; /* First unused FROM clause element */ - int andFlags; /* AND-ed combination of all pWC->a[].wtFlags */ - sqlite3 *db; /* Database connection */ - - /* The number of tables in the FROM clause is limited by the number of - ** bits in a Bitmask - */ - if( pTabList->nSrc>BMS ){ - sqlite3ErrorMsg(pParse, "at most %d tables in a join", BMS); - return 0; - } - - /* Allocate and initialize the WhereInfo structure that will become the - ** return value. A single allocation is used to store the WhereInfo - ** struct, the contents of WhereInfo.a[], the WhereClause structure - ** and the WhereMaskSet structure. Since WhereClause contains an 8-byte - ** field (type Bitmask) it must be aligned on an 8-byte boundary on - ** some architectures. Hence the ROUND8() below. - */ - db = pParse->db; - nByteWInfo = ROUND8(sizeof(WhereInfo)+(pTabList->nSrc-1)*sizeof(WhereLevel)); - pWInfo = sqlite3DbMallocZero(db, - nByteWInfo + - sizeof(WhereClause) + - sizeof(WhereMaskSet) - ); - if( db->mallocFailed ){ - goto whereBeginError; - } - pWInfo->nLevel = pTabList->nSrc; - pWInfo->pParse = pParse; - pWInfo->pTabList = pTabList; - pWInfo->iBreak = sqlite3VdbeMakeLabel(v); - pWInfo->pWC = pWC = (WhereClause *)&((u8 *)pWInfo)[nByteWInfo]; - pWInfo->wctrlFlags = wctrlFlags; - pMaskSet = (WhereMaskSet*)&pWC[1]; + Parse *pParse; /* Parsing context */ + char *zErrMsg = 0; /* Error message */ + int rc = SQLITE_OK; /* Result code */ + int i; /* Loop counter */ - /* Split the WHERE clause into separate subexpressions where each - ** subexpression is separated by an AND operator. - */ - initMaskSet(pMaskSet); - whereClauseInit(pWC, pParse, pMaskSet); - sqlite3ExprCodeConstants(pParse, pWhere); - whereSplit(pWC, pWhere, TK_AND); - - /* Special case: a WHERE clause that is constant. Evaluate the - ** expression and either jump over all of the code or fall thru. - */ - if( pWhere && (pTabList->nSrc==0 || sqlite3ExprIsConstantNotJoin(pWhere)) ){ - sqlite3ExprIfFalse(pParse, pWhere, pWInfo->iBreak, SQLITE_JUMPIFNULL); - pWhere = 0; + /* Allocate the parsing context */ + pParse = sqlite3StackAllocZero(db, sizeof(*pParse)); + if( pParse==0 ){ + rc = SQLITE_NOMEM; + goto end_prepare; } + pParse->pReprepare = pReprepare; + assert( ppStmt && *ppStmt==0 ); + assert( !db->mallocFailed ); + assert( sqlite3_mutex_held(db->mutex) ); - /* Assign a bit from the bitmask to every term in the FROM clause. + /* Check to verify that it is possible to get a read lock on all + ** database schemas. The inability to get a read lock indicates that + ** some other database connection is holding a write-lock, which in + ** turn means that the other connection has made uncommitted changes + ** to the schema. ** - ** When assigning bitmask values to FROM clause cursors, it must be - ** the case that if X is the bitmask for the N-th FROM clause term then - ** the bitmask for all FROM clause terms to the left of the N-th term - ** is (X-1). An expression from the ON clause of a LEFT JOIN can use - ** its Expr.iRightJoinTable value to find the bitmask of the right table - ** of the join. Subtracting one from the right table bitmask gives a - ** bitmask for all tables to the left of the join. Knowing the bitmask - ** for all tables to the left of a left join is important. Ticket #3015. + ** Were we to proceed and prepare the statement against the uncommitted + ** schema changes and if those schema changes are subsequently rolled + ** back and different changes are made in their place, then when this + ** prepared statement goes to run the schema cookie would fail to detect + ** the schema change. Disaster would follow. ** - ** Configure the WhereClause.vmask variable so that bits that correspond - ** to virtual table cursors are set. This is used to selectively disable - ** the OR-to-IN transformation in exprAnalyzeOrTerm(). It is not helpful - ** with virtual tables. + ** This thread is currently holding mutexes on all Btrees (because + ** of the sqlite3BtreeEnterAll() in sqlite3LockAndPrepare()) so it + ** is not possible for another thread to start a new schema change + ** while this routine is running. Hence, we do not need to hold + ** locks on the schema, we just need to make sure nobody else is + ** holding them. + ** + ** Note that setting READ_UNCOMMITTED overrides most lock detection, + ** but it does *not* override schema lock detection, so this all still + ** works even if READ_UNCOMMITTED is set. */ - assert( pWC->vmask==0 && pMaskSet->n==0 ); - for(i=0; inSrc; i++){ - createMask(pMaskSet, pTabList->a[i].iCursor); -#ifndef SQLITE_OMIT_VIRTUALTABLE - if( ALWAYS(pTabList->a[i].pTab) && IsVirtual(pTabList->a[i].pTab) ){ - pWC->vmask |= ((Bitmask)1 << i); + for(i=0; inDb; i++) { + Btree *pBt = db->aDb[i].pBt; + if( pBt ){ + assert( sqlite3BtreeHoldsMutex(pBt) ); + rc = sqlite3BtreeSchemaLocked(pBt); + if( rc ){ + const char *zDb = db->aDb[i].zName; + sqlite3Error(db, rc, "database schema is locked: %s", zDb); + testcase( db->flags & SQLITE_ReadUncommitted ); + goto end_prepare; + } } -#endif } -#ifndef NDEBUG - { - Bitmask toTheLeft = 0; - for(i=0; inSrc; i++){ - Bitmask m = getMask(pMaskSet, pTabList->a[i].iCursor); - assert( (m-1)==toTheLeft ); - toTheLeft |= m; + + sqlite3VtabUnlockList(db); + + pParse->db = db; + pParse->nQueryLoop = (double)1; + if( nBytes>=0 && (nBytes==0 || zSql[nBytes-1]!=0) ){ + char *zSqlCopy; + int mxLen = db->aLimit[SQLITE_LIMIT_SQL_LENGTH]; + testcase( nBytes==mxLen ); + testcase( nBytes==mxLen+1 ); + if( nBytes>mxLen ){ + sqlite3Error(db, SQLITE_TOOBIG, "statement too long"); + rc = sqlite3ApiExit(db, SQLITE_TOOBIG); + goto end_prepare; + } + zSqlCopy = sqlite3DbStrNDup(db, zSql, nBytes); + if( zSqlCopy ){ + sqlite3RunParser(pParse, zSqlCopy, &zErrMsg); + sqlite3DbFree(db, zSqlCopy); + pParse->zTail = &zSql[pParse->zTail-zSqlCopy]; + }else{ + pParse->zTail = &zSql[nBytes]; } + }else{ + sqlite3RunParser(pParse, zSql, &zErrMsg); } -#endif + assert( 1==(int)pParse->nQueryLoop ); - /* Analyze all of the subexpressions. Note that exprAnalyze() might - ** add new virtual terms onto the end of the WHERE clause. We do not - ** want to analyze these virtual terms, so start analyzing at the end - ** and work forward so that the added virtual terms are never processed. - */ - exprAnalyzeAll(pTabList, pWC); if( db->mallocFailed ){ - goto whereBeginError; + pParse->rc = SQLITE_NOMEM; } + if( pParse->rc==SQLITE_DONE ) pParse->rc = SQLITE_OK; + if( pParse->checkSchema ){ + schemaIsValid(pParse); + } + if( db->mallocFailed ){ + pParse->rc = SQLITE_NOMEM; + } + if( pzTail ){ + *pzTail = pParse->zTail; + } + rc = pParse->rc; - /* Chose the best index to use for each table in the FROM clause. - ** - ** This loop fills in the following fields: - ** - ** pWInfo->a[].pIdx The index to use for this level of the loop. - ** pWInfo->a[].wsFlags WHERE_xxx flags associated with pIdx - ** pWInfo->a[].nEq The number of == and IN constraints - ** pWInfo->a[].iFrom Which term of the FROM clause is being coded - ** pWInfo->a[].iTabCur The VDBE cursor for the database table - ** pWInfo->a[].iIdxCur The VDBE cursor for the index - ** pWInfo->a[].pTerm When wsFlags==WO_OR, the OR-clause term - ** - ** This loop also figures out the nesting order of tables in the FROM - ** clause. - */ - notReady = ~(Bitmask)0; - pTabItem = pTabList->a; - pLevel = pWInfo->a; - andFlags = ~0; - WHERETRACE(("*** Optimizer Start ***\n")); - for(i=iFrom=0, pLevel=pWInfo->a; inSrc; i++, pLevel++){ - WhereCost bestPlan; /* Most efficient plan seen so far */ - Index *pIdx; /* Index for FROM table at pTabItem */ - int j; /* For looping over FROM tables */ - int bestJ = 0; /* The value of j */ - Bitmask m; /* Bitmask value for j or bestJ */ - int once = 0; /* True when first table is seen */ - - memset(&bestPlan, 0, sizeof(bestPlan)); - bestPlan.rCost = SQLITE_BIG_DBL; - for(j=iFrom, pTabItem=&pTabList->a[j]; jnSrc; j++, pTabItem++){ - int doNotReorder; /* True if this table should not be reordered */ - WhereCost sCost; /* Cost information from best[Virtual]Index() */ - ExprList *pOrderBy; /* ORDER BY clause for index to optimize */ - - doNotReorder = (pTabItem->jointype & (JT_LEFT|JT_CROSS))!=0; - if( once && doNotReorder ) break; - m = getMask(pMaskSet, pTabItem->iCursor); - if( (m & notReady)==0 ){ - if( j==iFrom ) iFrom++; - continue; - } - pOrderBy = ((i==0 && ppOrderBy )?*ppOrderBy:0); - - assert( pTabItem->pTab ); -#ifndef SQLITE_OMIT_VIRTUALTABLE - if( IsVirtual(pTabItem->pTab) ){ - sqlite3_index_info **pp = &pWInfo->a[j].pIdxInfo; - bestVirtualIndex(pParse, pWC, pTabItem, notReady, pOrderBy, &sCost, pp); - }else -#endif - { - bestBtreeIndex(pParse, pWC, pTabItem, notReady, pOrderBy, &sCost); - } - if( once==0 || sCost.rCosta[bestJ].iCursor) ); - WHERETRACE(("*** Optimizer selects table %d for loop %d\n", bestJ, - pLevel-pWInfo->a)); - if( (bestPlan.plan.wsFlags & WHERE_ORDERBY)!=0 ){ - *ppOrderBy = 0; - } - andFlags &= bestPlan.plan.wsFlags; - pLevel->plan = bestPlan.plan; - if( bestPlan.plan.wsFlags & WHERE_INDEXED ){ - pLevel->iIdxCur = pParse->nTab++; +#ifndef SQLITE_OMIT_EXPLAIN + if( rc==SQLITE_OK && pParse->pVdbe && pParse->explain ){ + static const char * const azColName[] = { + "addr", "opcode", "p1", "p2", "p3", "p4", "p5", "comment", + "selectid", "order", "from", "detail" + }; + int iFirst, mx; + if( pParse->explain==2 ){ + sqlite3VdbeSetNumCols(pParse->pVdbe, 4); + iFirst = 8; + mx = 12; }else{ - pLevel->iIdxCur = -1; + sqlite3VdbeSetNumCols(pParse->pVdbe, 8); + iFirst = 0; + mx = 8; } - notReady &= ~getMask(pMaskSet, pTabList->a[bestJ].iCursor); - pLevel->iFrom = (u8)bestJ; - - /* Check that if the table scanned by this loop iteration had an - ** INDEXED BY clause attached to it, that the named index is being - ** used for the scan. If not, then query compilation has failed. - ** Return an error. - */ - pIdx = pTabList->a[bestJ].pIndex; - if( pIdx ){ - if( (bestPlan.plan.wsFlags & WHERE_INDEXED)==0 ){ - sqlite3ErrorMsg(pParse, "cannot use index: %s", pIdx->zName); - goto whereBeginError; - }else{ - /* If an INDEXED BY clause is used, the bestIndex() function is - ** guaranteed to find the index specified in the INDEXED BY clause - ** if it find an index at all. */ - assert( bestPlan.plan.u.pIdx==pIdx ); - } + for(i=iFirst; ipVdbe, i-iFirst, COLNAME_NAME, + azColName[i], SQLITE_STATIC); } } - WHERETRACE(("*** Optimizer Finished ***\n")); - if( pParse->nErr || db->mallocFailed ){ - goto whereBeginError; +#endif + + assert( db->init.busy==0 || saveSqlFlag==0 ); + if( db->init.busy==0 ){ + Vdbe *pVdbe = pParse->pVdbe; + sqlite3VdbeSetSql(pVdbe, zSql, (int)(pParse->zTail-zSql), saveSqlFlag); + } + if( pParse->pVdbe && (rc!=SQLITE_OK || db->mallocFailed) ){ + sqlite3VdbeFinalize(pParse->pVdbe); + assert(!(*ppStmt)); + }else{ + *ppStmt = (sqlite3_stmt*)pParse->pVdbe; } - /* If the total query only selects a single row, then the ORDER BY - ** clause is irrelevant. - */ - if( (andFlags & WHERE_UNIQUE)!=0 && ppOrderBy ){ - *ppOrderBy = 0; + if( zErrMsg ){ + sqlite3Error(db, rc, "%s", zErrMsg); + sqlite3DbFree(db, zErrMsg); + }else{ + sqlite3Error(db, rc, 0); } - /* If the caller is an UPDATE or DELETE statement that is requesting - ** to use a one-pass algorithm, determine if this is appropriate. - ** The one-pass algorithm only works if the WHERE clause constraints - ** the statement to update a single row. - */ - assert( (wctrlFlags & WHERE_ONEPASS_DESIRED)==0 || pWInfo->nLevel==1 ); - if( (wctrlFlags & WHERE_ONEPASS_DESIRED)!=0 && (andFlags & WHERE_UNIQUE)!=0 ){ - pWInfo->okOnePass = 1; - pWInfo->a[0].plan.wsFlags &= ~WHERE_IDX_ONLY; + /* Delete any TriggerPrg structures allocated while parsing this statement. */ + while( pParse->pTriggerPrg ){ + TriggerPrg *pT = pParse->pTriggerPrg; + pParse->pTriggerPrg = pT->pNext; + sqlite3DbFree(db, pT); } - /* Open all tables in the pTabList and any indices selected for - ** searching those tables. - */ - sqlite3CodeVerifySchema(pParse, -1); /* Insert the cookie verifier Goto */ - for(i=0, pLevel=pWInfo->a; inSrc; i++, pLevel++){ - Table *pTab; /* Table to open */ - int iDb; /* Index of database containing table/index */ +end_prepare: -#ifndef SQLITE_OMIT_EXPLAIN - if( pParse->explain==2 ){ - char *zMsg; - struct SrcList_item *pItem = &pTabList->a[pLevel->iFrom]; - zMsg = sqlite3MPrintf(db, "TABLE %s", pItem->zName); - if( pItem->zAlias ){ - zMsg = sqlite3MAppendf(db, zMsg, "%s AS %s", zMsg, pItem->zAlias); - } - if( (pLevel->plan.wsFlags & WHERE_INDEXED)!=0 ){ - zMsg = sqlite3MAppendf(db, zMsg, "%s WITH INDEX %s", - zMsg, pLevel->plan.u.pIdx->zName); - }else if( pLevel->plan.wsFlags & WHERE_MULTI_OR ){ - zMsg = sqlite3MAppendf(db, zMsg, "%s VIA MULTI-INDEX UNION", zMsg); - }else if( pLevel->plan.wsFlags & (WHERE_ROWID_EQ|WHERE_ROWID_RANGE) ){ - zMsg = sqlite3MAppendf(db, zMsg, "%s USING PRIMARY KEY", zMsg); - } -#ifndef SQLITE_OMIT_VIRTUALTABLE - else if( (pLevel->plan.wsFlags & WHERE_VIRTUALTABLE)!=0 ){ - sqlite3_index_info *pVtabIdx = pLevel->plan.u.pVtabIdx; - zMsg = sqlite3MAppendf(db, zMsg, "%s VIRTUAL TABLE INDEX %d:%s", zMsg, - pVtabIdx->idxNum, pVtabIdx->idxStr); - } -#endif - if( pLevel->plan.wsFlags & WHERE_ORDERBY ){ - zMsg = sqlite3MAppendf(db, zMsg, "%s ORDER BY", zMsg); - } - sqlite3VdbeAddOp4(v, OP_Explain, i, pLevel->iFrom, 0, zMsg, P4_DYNAMIC); - } -#endif /* SQLITE_OMIT_EXPLAIN */ - pTabItem = &pTabList->a[pLevel->iFrom]; - pTab = pTabItem->pTab; - iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema); - if( (pTab->tabFlags & TF_Ephemeral)!=0 || pTab->pSelect ) continue; -#ifndef SQLITE_OMIT_VIRTUALTABLE - if( (pLevel->plan.wsFlags & WHERE_VIRTUALTABLE)!=0 ){ - int iCur = pTabItem->iCursor; - sqlite3VdbeAddOp4(v, OP_VOpen, iCur, 0, 0, - (const char*)pTab->pVtab, P4_VTAB); - }else -#endif - if( (pLevel->plan.wsFlags & WHERE_IDX_ONLY)==0 - && (wctrlFlags & WHERE_OMIT_OPEN)==0 ){ - int op = pWInfo->okOnePass ? OP_OpenWrite : OP_OpenRead; - sqlite3OpenTable(pParse, pTabItem->iCursor, iDb, pTab, op); - if( !pWInfo->okOnePass && pTab->nColcolUsed; - int n = 0; - for(; b; b=b>>1, n++){} - sqlite3VdbeChangeP4(v, sqlite3VdbeCurrentAddr(v)-1, SQLITE_INT_TO_PTR(n), P4_INT32); - assert( n<=pTab->nCol ); - } - }else{ - sqlite3TableLock(pParse, iDb, pTab->tnum, 0, pTab->zName); - } - pLevel->iTabCur = pTabItem->iCursor; - if( (pLevel->plan.wsFlags & WHERE_INDEXED)!=0 ){ - Index *pIx = pLevel->plan.u.pIdx; - KeyInfo *pKey = sqlite3IndexKeyinfo(pParse, pIx); - int iIdxCur = pLevel->iIdxCur; - assert( pIx->pSchema==pTab->pSchema ); - assert( iIdxCur>=0 ); - sqlite3VdbeAddOp4(v, OP_OpenRead, iIdxCur, pIx->tnum, iDb, - (char*)pKey, P4_KEYINFO_HANDOFF); - VdbeComment((v, "%s", pIx->zName)); - } - sqlite3CodeVerifySchema(pParse, iDb); + sqlite3StackFree(db, pParse); + rc = sqlite3ApiExit(db, rc); + assert( (rc&db->errMask)==rc ); + return rc; +} +static int sqlite3LockAndPrepare( + sqlite3 *db, /* Database handle. */ + const char *zSql, /* UTF-8 encoded SQL statement. */ + int nBytes, /* Length of zSql in bytes. */ + int saveSqlFlag, /* True to copy SQL text into the sqlite3_stmt */ + Vdbe *pOld, /* VM being reprepared */ + sqlite3_stmt **ppStmt, /* OUT: A pointer to the prepared statement */ + const char **pzTail /* OUT: End of parsed string */ +){ + int rc; + assert( ppStmt!=0 ); + *ppStmt = 0; + if( !sqlite3SafetyCheckOk(db) ){ + return SQLITE_MISUSE_BKPT; } - pWInfo->iTop = sqlite3VdbeCurrentAddr(v); - - /* Generate the code to do the search. Each iteration of the for - ** loop below generates code for a single nested loop of the VM - ** program. - */ - notReady = ~(Bitmask)0; - for(i=0; inSrc; i++){ - notReady = codeOneLoopStart(pWInfo, i, wctrlFlags, notReady); - pWInfo->iContinue = pWInfo->a[i].addrCont; + sqlite3_mutex_enter(db->mutex); + sqlite3BtreeEnterAll(db); + rc = sqlite3Prepare(db, zSql, nBytes, saveSqlFlag, pOld, ppStmt, pzTail); + if( rc==SQLITE_SCHEMA ){ + sqlite3_finalize(*ppStmt); + rc = sqlite3Prepare(db, zSql, nBytes, saveSqlFlag, pOld, ppStmt, pzTail); } + sqlite3BtreeLeaveAll(db); + sqlite3_mutex_leave(db->mutex); + assert( rc==SQLITE_OK || *ppStmt==0 ); + return rc; +} -#ifdef SQLITE_TEST /* For testing and debugging use only */ - /* Record in the query plan information about the current table - ** and the index used to access it (if any). If the table itself - ** is not used, its name is just '{}'. If no index is used - ** the index is listed as "{}". If the primary key is used the - ** index name is '*'. - */ - for(i=0; inSrc; i++){ - char *z; - int n; - pLevel = &pWInfo->a[i]; - pTabItem = &pTabList->a[pLevel->iFrom]; - z = pTabItem->zAlias; - if( z==0 ) z = pTabItem->pTab->zName; - n = sqlite3Strlen30(z); - if( n+nQPlan < sizeof(sqlite3_query_plan)-10 ){ - if( pLevel->plan.wsFlags & WHERE_IDX_ONLY ){ - memcpy(&sqlite3_query_plan[nQPlan], "{}", 2); - nQPlan += 2; - }else{ - memcpy(&sqlite3_query_plan[nQPlan], z, n); - nQPlan += n; - } - sqlite3_query_plan[nQPlan++] = ' '; - } - testcase( pLevel->plan.wsFlags & WHERE_ROWID_EQ ); - testcase( pLevel->plan.wsFlags & WHERE_ROWID_RANGE ); - if( pLevel->plan.wsFlags & (WHERE_ROWID_EQ|WHERE_ROWID_RANGE) ){ - memcpy(&sqlite3_query_plan[nQPlan], "* ", 2); - nQPlan += 2; - }else if( (pLevel->plan.wsFlags & WHERE_INDEXED)!=0 ){ - n = sqlite3Strlen30(pLevel->plan.u.pIdx->zName); - if( n+nQPlan < sizeof(sqlite3_query_plan)-2 ){ - memcpy(&sqlite3_query_plan[nQPlan], pLevel->plan.u.pIdx->zName, n); - nQPlan += n; - sqlite3_query_plan[nQPlan++] = ' '; - } - }else{ - memcpy(&sqlite3_query_plan[nQPlan], "{} ", 3); - nQPlan += 3; +/* +** Rerun the compilation of a statement after a schema change. +** +** If the statement is successfully recompiled, return SQLITE_OK. Otherwise, +** if the statement cannot be recompiled because another connection has +** locked the sqlite3_master table, return SQLITE_LOCKED. If any other error +** occurs, return SQLITE_SCHEMA. +*/ +SQLITE_PRIVATE int sqlite3Reprepare(Vdbe *p){ + int rc; + sqlite3_stmt *pNew; + const char *zSql; + sqlite3 *db; + + assert( sqlite3_mutex_held(sqlite3VdbeDb(p)->mutex) ); + zSql = sqlite3_sql((sqlite3_stmt *)p); + assert( zSql!=0 ); /* Reprepare only called for prepare_v2() statements */ + db = sqlite3VdbeDb(p); + assert( sqlite3_mutex_held(db->mutex) ); + rc = sqlite3LockAndPrepare(db, zSql, -1, 0, p, &pNew, 0); + if( rc ){ + if( rc==SQLITE_NOMEM ){ + db->mallocFailed = 1; } + assert( pNew==0 ); + return rc; + }else{ + assert( pNew!=0 ); } - while( nQPlan>0 && sqlite3_query_plan[nQPlan-1]==' ' ){ - sqlite3_query_plan[--nQPlan] = 0; - } - sqlite3_query_plan[nQPlan] = 0; - nQPlan = 0; -#endif /* SQLITE_TEST // Testing and debugging use only */ - - /* Record the continuation address in the WhereInfo structure. Then - ** clean up and return. - */ - return pWInfo; - - /* Jump here if malloc fails */ -whereBeginError: - whereInfoFree(db, pWInfo); - return 0; + sqlite3VdbeSwap((Vdbe*)pNew, p); + sqlite3TransferBindings(pNew, (sqlite3_stmt*)p); + sqlite3VdbeResetStepResult((Vdbe*)pNew); + sqlite3VdbeFinalize((Vdbe*)pNew); + return SQLITE_OK; } + /* -** Generate the end of the WHERE loop. See comments on -** sqlite3WhereBegin() for additional information. +** Two versions of the official API. Legacy and new use. In the legacy +** version, the original SQL text is not saved in the prepared statement +** and so if a schema change occurs, SQLITE_SCHEMA is returned by +** sqlite3_step(). In the new version, the original SQL text is retained +** and the statement is automatically recompiled if an schema change +** occurs. */ -SQLITE_PRIVATE void sqlite3WhereEnd(WhereInfo *pWInfo){ - Parse *pParse = pWInfo->pParse; - Vdbe *v = pParse->pVdbe; - int i; - WhereLevel *pLevel; - SrcList *pTabList = pWInfo->pTabList; - sqlite3 *db = pParse->db; +SQLITE_API int sqlite3_prepare( + sqlite3 *db, /* Database handle. */ + const char *zSql, /* UTF-8 encoded SQL statement. */ + int nBytes, /* Length of zSql in bytes. */ + sqlite3_stmt **ppStmt, /* OUT: A pointer to the prepared statement */ + const char **pzTail /* OUT: End of parsed string */ +){ + int rc; + rc = sqlite3LockAndPrepare(db,zSql,nBytes,0,0,ppStmt,pzTail); + assert( rc==SQLITE_OK || ppStmt==0 || *ppStmt==0 ); /* VERIFY: F13021 */ + return rc; +} +SQLITE_API int sqlite3_prepare_v2( + sqlite3 *db, /* Database handle. */ + const char *zSql, /* UTF-8 encoded SQL statement. */ + int nBytes, /* Length of zSql in bytes. */ + sqlite3_stmt **ppStmt, /* OUT: A pointer to the prepared statement */ + const char **pzTail /* OUT: End of parsed string */ +){ + int rc; + rc = sqlite3LockAndPrepare(db,zSql,nBytes,1,0,ppStmt,pzTail); + assert( rc==SQLITE_OK || ppStmt==0 || *ppStmt==0 ); /* VERIFY: F13021 */ + return rc; +} - /* Generate loop termination code. - */ - sqlite3ExprCacheClear(pParse); - for(i=pTabList->nSrc-1; i>=0; i--){ - pLevel = &pWInfo->a[i]; - sqlite3VdbeResolveLabel(v, pLevel->addrCont); - if( pLevel->op!=OP_Noop ){ - sqlite3VdbeAddOp2(v, pLevel->op, pLevel->p1, pLevel->p2); - sqlite3VdbeChangeP5(v, pLevel->p5); - } - if( pLevel->plan.wsFlags & WHERE_IN_ABLE && pLevel->u.in.nIn>0 ){ - struct InLoop *pIn; - int j; - sqlite3VdbeResolveLabel(v, pLevel->addrNxt); - for(j=pLevel->u.in.nIn, pIn=&pLevel->u.in.aInLoop[j-1]; j>0; j--, pIn--){ - sqlite3VdbeJumpHere(v, pIn->addrInTop+1); - sqlite3VdbeAddOp2(v, OP_Next, pIn->iCur, pIn->addrInTop); - sqlite3VdbeJumpHere(v, pIn->addrInTop-1); - } - sqlite3DbFree(db, pLevel->u.in.aInLoop); - } - sqlite3VdbeResolveLabel(v, pLevel->addrBrk); - if( pLevel->iLeftJoin ){ - int addr; - addr = sqlite3VdbeAddOp1(v, OP_IfPos, pLevel->iLeftJoin); - sqlite3VdbeAddOp1(v, OP_NullRow, pTabList->a[i].iCursor); - if( pLevel->iIdxCur>=0 ){ - sqlite3VdbeAddOp1(v, OP_NullRow, pLevel->iIdxCur); - } - if( pLevel->op==OP_Return ){ - sqlite3VdbeAddOp2(v, OP_Gosub, pLevel->p1, pLevel->addrFirst); - }else{ - sqlite3VdbeAddOp2(v, OP_Goto, 0, pLevel->addrFirst); - } - sqlite3VdbeJumpHere(v, addr); - } - } - /* The "break" point is here, just past the end of the outer loop. - ** Set it. +#ifndef SQLITE_OMIT_UTF16 +/* +** Compile the UTF-16 encoded SQL statement zSql into a statement handle. +*/ +static int sqlite3Prepare16( + sqlite3 *db, /* Database handle. */ + const void *zSql, /* UTF-16 encoded SQL statement. */ + int nBytes, /* Length of zSql in bytes. */ + int saveSqlFlag, /* True to save SQL text into the sqlite3_stmt */ + sqlite3_stmt **ppStmt, /* OUT: A pointer to the prepared statement */ + const void **pzTail /* OUT: End of parsed string */ +){ + /* This function currently works by first transforming the UTF-16 + ** encoded string to UTF-8, then invoking sqlite3_prepare(). The + ** tricky bit is figuring out the pointer to return in *pzTail. */ - sqlite3VdbeResolveLabel(v, pWInfo->iBreak); + char *zSql8; + const char *zTail8 = 0; + int rc = SQLITE_OK; - /* Close all of the cursors that were opened by sqlite3WhereBegin. - */ - for(i=0, pLevel=pWInfo->a; inSrc; i++, pLevel++){ - struct SrcList_item *pTabItem = &pTabList->a[pLevel->iFrom]; - Table *pTab = pTabItem->pTab; - assert( pTab!=0 ); - if( (pTab->tabFlags & TF_Ephemeral)!=0 || pTab->pSelect ) continue; - if( (pWInfo->wctrlFlags & WHERE_OMIT_CLOSE)==0 ){ - if( !pWInfo->okOnePass && (pLevel->plan.wsFlags & WHERE_IDX_ONLY)==0 ){ - sqlite3VdbeAddOp1(v, OP_Close, pTabItem->iCursor); - } - if( (pLevel->plan.wsFlags & WHERE_INDEXED)!=0 ){ - sqlite3VdbeAddOp1(v, OP_Close, pLevel->iIdxCur); - } - } + assert( ppStmt ); + *ppStmt = 0; + if( !sqlite3SafetyCheckOk(db) ){ + return SQLITE_MISUSE_BKPT; + } + sqlite3_mutex_enter(db->mutex); + zSql8 = sqlite3Utf16to8(db, zSql, nBytes, SQLITE_UTF16NATIVE); + if( zSql8 ){ + rc = sqlite3LockAndPrepare(db, zSql8, -1, saveSqlFlag, 0, ppStmt, &zTail8); + } - /* If this scan uses an index, make code substitutions to read data - ** from the index in preference to the table. Sometimes, this means - ** the table need never be read from. This is a performance boost, - ** as the vdbe level waits until the table is read before actually - ** seeking the table cursor to the record corresponding to the current - ** position in the index. - ** - ** Calls to the code generator in between sqlite3WhereBegin and - ** sqlite3WhereEnd will have created code that references the table - ** directly. This loop scans all that code looking for opcodes - ** that reference the table and converts them into opcodes that - ** reference the index. + if( zTail8 && pzTail ){ + /* If sqlite3_prepare returns a tail pointer, we calculate the + ** equivalent pointer into the UTF-16 string by counting the unicode + ** characters between zSql8 and zTail8, and then returning a pointer + ** the same number of characters into the UTF-16 string. */ - if( (pLevel->plan.wsFlags & WHERE_INDEXED)!=0 && !db->mallocFailed){ - int k, j, last; - VdbeOp *pOp; - Index *pIdx = pLevel->plan.u.pIdx; - int useIndexOnly = pLevel->plan.wsFlags & WHERE_IDX_ONLY; - - assert( pIdx!=0 ); - pOp = sqlite3VdbeGetOp(v, pWInfo->iTop); - last = sqlite3VdbeCurrentAddr(v); - for(k=pWInfo->iTop; kp1!=pLevel->iTabCur ) continue; - if( pOp->opcode==OP_Column ){ - for(j=0; jnColumn; j++){ - if( pOp->p2==pIdx->aiColumn[j] ){ - pOp->p2 = j; - pOp->p1 = pLevel->iIdxCur; - break; - } - } - assert(!useIndexOnly || jnColumn); - }else if( pOp->opcode==OP_Rowid ){ - pOp->p1 = pLevel->iIdxCur; - pOp->opcode = OP_IdxRowid; - }else if( pOp->opcode==OP_NullRow && useIndexOnly ){ - pOp->opcode = OP_Noop; - } - } - } + int chars_parsed = sqlite3Utf8CharLen(zSql8, (int)(zTail8-zSql8)); + *pzTail = (u8 *)zSql + sqlite3Utf16ByteLen(zSql, chars_parsed); } - - /* Final cleanup - */ - whereInfoFree(db, pWInfo); - return; + sqlite3DbFree(db, zSql8); + rc = sqlite3ApiExit(db, rc); + sqlite3_mutex_leave(db->mutex); + return rc; } -/************** End of where.c ***********************************************/ -/************** Begin file parse.c *******************************************/ -/* Driver template for the LEMON parser generator. -** The author disclaims copyright to this source code. +/* +** Two versions of the official API. Legacy and new use. In the legacy +** version, the original SQL text is not saved in the prepared statement +** and so if a schema change occurs, SQLITE_SCHEMA is returned by +** sqlite3_step(). In the new version, the original SQL text is retained +** and the statement is automatically recompiled if an schema change +** occurs. */ -/* First off, code is included that follows the "include" declaration -** in the input grammar file. */ +SQLITE_API int sqlite3_prepare16( + sqlite3 *db, /* Database handle. */ + const void *zSql, /* UTF-16 encoded SQL statement. */ + int nBytes, /* Length of zSql in bytes. */ + sqlite3_stmt **ppStmt, /* OUT: A pointer to the prepared statement */ + const void **pzTail /* OUT: End of parsed string */ +){ + int rc; + rc = sqlite3Prepare16(db,zSql,nBytes,0,ppStmt,pzTail); + assert( rc==SQLITE_OK || ppStmt==0 || *ppStmt==0 ); /* VERIFY: F13021 */ + return rc; +} +SQLITE_API int sqlite3_prepare16_v2( + sqlite3 *db, /* Database handle. */ + const void *zSql, /* UTF-16 encoded SQL statement. */ + int nBytes, /* Length of zSql in bytes. */ + sqlite3_stmt **ppStmt, /* OUT: A pointer to the prepared statement */ + const void **pzTail /* OUT: End of parsed string */ +){ + int rc; + rc = sqlite3Prepare16(db,zSql,nBytes,1,ppStmt,pzTail); + assert( rc==SQLITE_OK || ppStmt==0 || *ppStmt==0 ); /* VERIFY: F13021 */ + return rc; +} +#endif /* SQLITE_OMIT_UTF16 */ +/************** End of prepare.c *********************************************/ +/************** Begin file select.c ******************************************/ /* -** Disable all error recovery processing in the parser push-down -** automaton. +** 2001 September 15 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** This file contains C code routines that are called by the parser +** to handle SELECT statements in SQLite. */ -#define YYNOERRORRECOVERY 1 -/* -** Make yytestcase() the same as testcase() -*/ -#define yytestcase(X) testcase(X) /* -** An instance of this structure holds information about the -** LIMIT clause of a SELECT statement. +** Delete all the content of a Select structure but do not deallocate +** the select structure itself. */ -struct LimitVal { - Expr *pLimit; /* The LIMIT expression. NULL if there is no limit */ - Expr *pOffset; /* The OFFSET expression. NULL if there is none */ -}; +static void clearSelect(sqlite3 *db, Select *p){ + sqlite3ExprListDelete(db, p->pEList); + sqlite3SrcListDelete(db, p->pSrc); + sqlite3ExprDelete(db, p->pWhere); + sqlite3ExprListDelete(db, p->pGroupBy); + sqlite3ExprDelete(db, p->pHaving); + sqlite3ExprListDelete(db, p->pOrderBy); + sqlite3SelectDelete(db, p->pPrior); + sqlite3ExprDelete(db, p->pLimit); + sqlite3ExprDelete(db, p->pOffset); +} /* -** An instance of this structure is used to store the LIKE, -** GLOB, NOT LIKE, and NOT GLOB operators. +** Initialize a SelectDest structure. */ -struct LikeOp { - Token eOperator; /* "like" or "glob" or "regexp" */ - int not; /* True if the NOT keyword is present */ -}; +SQLITE_PRIVATE void sqlite3SelectDestInit(SelectDest *pDest, int eDest, int iParm){ + pDest->eDest = (u8)eDest; + pDest->iParm = iParm; + pDest->affinity = 0; + pDest->iMem = 0; + pDest->nMem = 0; +} -/* -** An instance of the following structure describes the event of a -** TRIGGER. "a" is the event type, one of TK_UPDATE, TK_INSERT, -** TK_DELETE, or TK_INSTEAD. If the event is of the form -** -** UPDATE ON (a,b,c) -** -** Then the "b" IdList records the list "a,b,c". -*/ -struct TrigEvent { int a; IdList * b; }; /* -** An instance of this structure holds the ATTACH key and the key type. +** Allocate a new Select structure and return a pointer to that +** structure. */ -struct AttachKey { int type; Token key; }; - - - /* This is a utility routine used to set the ExprSpan.zStart and - ** ExprSpan.zEnd values of pOut so that the span covers the complete - ** range of text beginning with pStart and going to the end of pEnd. - */ - static void spanSet(ExprSpan *pOut, Token *pStart, Token *pEnd){ - pOut->zStart = pStart->z; - pOut->zEnd = &pEnd->z[pEnd->n]; +SQLITE_PRIVATE Select *sqlite3SelectNew( + Parse *pParse, /* Parsing context */ + ExprList *pEList, /* which columns to include in the result */ + SrcList *pSrc, /* the FROM clause -- which tables to scan */ + Expr *pWhere, /* the WHERE clause */ + ExprList *pGroupBy, /* the GROUP BY clause */ + Expr *pHaving, /* the HAVING clause */ + ExprList *pOrderBy, /* the ORDER BY clause */ + int isDistinct, /* true if the DISTINCT keyword is present */ + Expr *pLimit, /* LIMIT value. NULL means not used */ + Expr *pOffset /* OFFSET value. NULL means no offset */ +){ + Select *pNew; + Select standin; + sqlite3 *db = pParse->db; + pNew = sqlite3DbMallocZero(db, sizeof(*pNew) ); + assert( db->mallocFailed || !pOffset || pLimit ); /* OFFSET implies LIMIT */ + if( pNew==0 ){ + assert( db->mallocFailed ); + pNew = &standin; + memset(pNew, 0, sizeof(*pNew)); } - - /* Construct a new Expr object from a single identifier. Use the - ** new Expr to populate pOut. Set the span of pOut to be the identifier - ** that created the expression. - */ - static void spanExpr(ExprSpan *pOut, Parse *pParse, int op, Token *pValue){ - pOut->pExpr = sqlite3PExpr(pParse, op, 0, 0, pValue); - pOut->zStart = pValue->z; - pOut->zEnd = &pValue->z[pValue->n]; + if( pEList==0 ){ + pEList = sqlite3ExprListAppend(pParse, 0, sqlite3Expr(db,TK_ALL,0)); + } + pNew->pEList = pEList; + if( pSrc==0 ) pSrc = sqlite3DbMallocZero(db, sizeof(*pSrc)); + pNew->pSrc = pSrc; + pNew->pWhere = pWhere; + pNew->pGroupBy = pGroupBy; + pNew->pHaving = pHaving; + pNew->pOrderBy = pOrderBy; + pNew->selFlags = isDistinct ? SF_Distinct : 0; + pNew->op = TK_SELECT; + pNew->pLimit = pLimit; + pNew->pOffset = pOffset; + assert( pOffset==0 || pLimit!=0 ); + pNew->addrOpenEphm[0] = -1; + pNew->addrOpenEphm[1] = -1; + pNew->addrOpenEphm[2] = -1; + if( db->mallocFailed ) { + clearSelect(db, pNew); + if( pNew!=&standin ) sqlite3DbFree(db, pNew); + pNew = 0; + }else{ + assert( pNew->pSrc!=0 || pParse->nErr>0 ); } + assert( pNew!=&standin ); + return pNew; +} - /* This routine constructs a binary expression node out of two ExprSpan - ** objects and uses the result to populate a new ExprSpan object. - */ - static void spanBinaryExpr( - ExprSpan *pOut, /* Write the result here */ - Parse *pParse, /* The parsing context. Errors accumulate here */ - int op, /* The binary operation */ - ExprSpan *pLeft, /* The left operand */ - ExprSpan *pRight /* The right operand */ - ){ - pOut->pExpr = sqlite3PExpr(pParse, op, pLeft->pExpr, pRight->pExpr, 0); - pOut->zStart = pLeft->zStart; - pOut->zEnd = pRight->zEnd; +/* +** Delete the given Select structure and all of its substructures. +*/ +SQLITE_PRIVATE void sqlite3SelectDelete(sqlite3 *db, Select *p){ + if( p ){ + clearSelect(db, p); + sqlite3DbFree(db, p); } +} - /* Construct an expression node for a unary postfix operator - */ - static void spanUnaryPostfix( - ExprSpan *pOut, /* Write the new expression node here */ - Parse *pParse, /* Parsing context to record errors */ - int op, /* The operator */ - ExprSpan *pOperand, /* The operand */ - Token *pPostOp /* The operand token for setting the span */ - ){ - pOut->pExpr = sqlite3PExpr(pParse, op, pOperand->pExpr, 0, 0); - pOut->zStart = pOperand->zStart; - pOut->zEnd = &pPostOp->z[pPostOp->n]; - } - - /* Construct an expression node for a unary prefix operator - */ - static void spanUnaryPrefix( - ExprSpan *pOut, /* Write the new expression node here */ - Parse *pParse, /* Parsing context to record errors */ - int op, /* The operator */ - ExprSpan *pOperand, /* The operand */ - Token *pPreOp /* The operand token for setting the span */ +/* +** Given 1 to 3 identifiers preceeding the JOIN keyword, determine the +** type of join. Return an integer constant that expresses that type +** in terms of the following bit values: +** +** JT_INNER +** JT_CROSS +** JT_OUTER +** JT_NATURAL +** JT_LEFT +** JT_RIGHT +** +** A full outer join is the combination of JT_LEFT and JT_RIGHT. +** +** If an illegal or unsupported join type is seen, then still return +** a join type, but put an error in the pParse structure. +*/ +SQLITE_PRIVATE int sqlite3JoinType(Parse *pParse, Token *pA, Token *pB, Token *pC){ + int jointype = 0; + Token *apAll[3]; + Token *p; + /* 0123456789 123456789 123456789 123 */ + static const char zKeyText[] = "naturaleftouterightfullinnercross"; + static const struct { + u8 i; /* Beginning of keyword text in zKeyText[] */ + u8 nChar; /* Length of the keyword in characters */ + u8 code; /* Join type mask */ + } aKeyword[] = { + /* natural */ { 0, 7, JT_NATURAL }, + /* left */ { 6, 4, JT_LEFT|JT_OUTER }, + /* outer */ { 10, 5, JT_OUTER }, + /* right */ { 14, 5, JT_RIGHT|JT_OUTER }, + /* full */ { 19, 4, JT_LEFT|JT_RIGHT|JT_OUTER }, + /* inner */ { 23, 5, JT_INNER }, + /* cross */ { 28, 5, JT_INNER|JT_CROSS }, + }; + int i, j; + apAll[0] = pA; + apAll[1] = pB; + apAll[2] = pC; + for(i=0; i<3 && apAll[i]; i++){ + p = apAll[i]; + for(j=0; jn==aKeyword[j].nChar + && sqlite3StrNICmp((char*)p->z, &zKeyText[aKeyword[j].i], p->n)==0 ){ + jointype |= aKeyword[j].code; + break; + } + } + testcase( j==0 || j==1 || j==2 || j==3 || j==4 || j==5 || j==6 ); + if( j>=ArraySize(aKeyword) ){ + jointype |= JT_ERROR; + break; + } + } + if( + (jointype & (JT_INNER|JT_OUTER))==(JT_INNER|JT_OUTER) || + (jointype & JT_ERROR)!=0 ){ - pOut->pExpr = sqlite3PExpr(pParse, op, pOperand->pExpr, 0, 0); - pOut->zStart = pPreOp->z; - pOut->zEnd = pOperand->zEnd; + const char *zSp = " "; + assert( pB!=0 ); + if( pC==0 ){ zSp++; } + sqlite3ErrorMsg(pParse, "unknown or unsupported join type: " + "%T %T%s%T", pA, pB, zSp, pC); + jointype = JT_INNER; + }else if( (jointype & JT_OUTER)!=0 + && (jointype & (JT_LEFT|JT_RIGHT))!=JT_LEFT ){ + sqlite3ErrorMsg(pParse, + "RIGHT and FULL OUTER JOINs are not currently supported"); + jointype = JT_INNER; } -/* Next is all token values, in a form suitable for use by makeheaders. -** This section will be null unless lemon is run with the -m switch. + return jointype; +} + +/* +** Return the index of a column in a table. Return -1 if the column +** is not contained in the table. */ -/* -** These constants (all generated automatically by the parser generator) -** specify the various kinds of tokens (terminals) that the parser -** understands. +static int columnIndex(Table *pTab, const char *zCol){ + int i; + for(i=0; inCol; i++){ + if( sqlite3StrICmp(pTab->aCol[i].zName, zCol)==0 ) return i; + } + return -1; +} + +/* +** Search the first N tables in pSrc, from left to right, looking for a +** table that has a column named zCol. ** -** Each symbol here is a terminal symbol in the grammar. -*/ -/* Make sure the INTERFACE macro is defined. -*/ -#ifndef INTERFACE -# define INTERFACE 1 -#endif -/* The next thing included is series of defines which control -** various aspects of the generated parser. -** YYCODETYPE is the data type used for storing terminal -** and nonterminal numbers. "unsigned char" is -** used if there are fewer than 250 terminals -** and nonterminals. "int" is used otherwise. -** YYNOCODE is a number of type YYCODETYPE which corresponds -** to no legal terminal or nonterminal number. This -** number is used to fill in empty slots of the hash -** table. -** YYFALLBACK If defined, this indicates that one or more tokens -** have fall-back values which should be used if the -** original value of the token will not parse. -** YYACTIONTYPE is the data type used for storing terminal -** and nonterminal numbers. "unsigned char" is -** used if there are fewer than 250 rules and -** states combined. "int" is used otherwise. -** sqlite3ParserTOKENTYPE is the data type used for minor tokens given -** directly to the parser from the tokenizer. -** YYMINORTYPE is the data type used for all minor tokens. -** This is typically a union of many types, one of -** which is sqlite3ParserTOKENTYPE. The entry in the union -** for base tokens is called "yy0". -** YYSTACKDEPTH is the maximum depth of the parser's stack. If -** zero the stack is dynamically sized using realloc() -** sqlite3ParserARG_SDECL A static variable declaration for the %extra_argument -** sqlite3ParserARG_PDECL A parameter declaration for the %extra_argument -** sqlite3ParserARG_STORE Code to store %extra_argument into yypParser -** sqlite3ParserARG_FETCH Code to extract %extra_argument from yypParser -** YYNSTATE the combined number of states. -** YYNRULE the number of rules in the grammar -** YYERRORSYMBOL is the code number of the error symbol. If not -** defined, then do no error processing. +** When found, set *piTab and *piCol to the table index and column index +** of the matching column and return TRUE. +** +** If not found, return FALSE. */ -#define YYCODETYPE unsigned char -#define YYNOCODE 252 -#define YYACTIONTYPE unsigned short int -#define YYWILDCARD 65 -#define sqlite3ParserTOKENTYPE Token -typedef union { - int yyinit; - sqlite3ParserTOKENTYPE yy0; - Expr* yy72; - TriggerStep* yy145; - ExprList* yy148; - SrcList* yy185; - ExprSpan yy190; - int yy194; - Select* yy243; - IdList* yy254; - struct TrigEvent yy332; - struct LimitVal yy354; - struct LikeOp yy392; - struct {int value; int mask;} yy497; -} YYMINORTYPE; -#ifndef YYSTACKDEPTH -#define YYSTACKDEPTH 100 -#endif -#define sqlite3ParserARG_SDECL Parse *pParse; -#define sqlite3ParserARG_PDECL ,Parse *pParse -#define sqlite3ParserARG_FETCH Parse *pParse = yypParser->pParse -#define sqlite3ParserARG_STORE yypParser->pParse = pParse -#define YYNSTATE 619 -#define YYNRULE 324 -#define YYFALLBACK 1 -#define YY_NO_ACTION (YYNSTATE+YYNRULE+2) -#define YY_ACCEPT_ACTION (YYNSTATE+YYNRULE+1) -#define YY_ERROR_ACTION (YYNSTATE+YYNRULE) +static int tableAndColumnIndex( + SrcList *pSrc, /* Array of tables to search */ + int N, /* Number of tables in pSrc->a[] to search */ + const char *zCol, /* Name of the column we are looking for */ + int *piTab, /* Write index of pSrc->a[] here */ + int *piCol /* Write index of pSrc->a[*piTab].pTab->aCol[] here */ +){ + int i; /* For looping over tables in pSrc */ + int iCol; /* Index of column matching zCol */ -/* The yyzerominor constant is used to initialize instances of -** YYMINORTYPE objects to zero. */ -static const YYMINORTYPE yyzerominor = { 0 }; + assert( (piTab==0)==(piCol==0) ); /* Both or neither are NULL */ + for(i=0; ia[i].pTab, zCol); + if( iCol>=0 ){ + if( piTab ){ + *piTab = i; + *piCol = iCol; + } + return 1; + } + } + return 0; +} -/* Define the yytestcase() macro to be a no-op if is not already defined -** otherwise. +/* +** This function is used to add terms implied by JOIN syntax to the +** WHERE clause expression of a SELECT statement. The new term, which +** is ANDed with the existing WHERE clause, is of the form: ** -** Applications can choose to define yytestcase() in the %include section -** to a macro that can assist in verifying code coverage. For production -** code the yytestcase() macro should be turned off. But it is useful -** for testing. +** (tab1.col1 = tab2.col2) +** +** where tab1 is the iSrc'th table in SrcList pSrc and tab2 is the +** (iSrc+1)'th. Column col1 is column iColLeft of tab1, and col2 is +** column iColRight of tab2. */ -#ifndef yytestcase -# define yytestcase(X) -#endif +static void addWhereTerm( + Parse *pParse, /* Parsing context */ + SrcList *pSrc, /* List of tables in FROM clause */ + int iLeft, /* Index of first table to join in pSrc */ + int iColLeft, /* Index of column in first table */ + int iRight, /* Index of second table in pSrc */ + int iColRight, /* Index of column in second table */ + int isOuterJoin, /* True if this is an OUTER join */ + Expr **ppWhere /* IN/OUT: The WHERE clause to add to */ +){ + sqlite3 *db = pParse->db; + Expr *pE1; + Expr *pE2; + Expr *pEq; + assert( iLeftnSrc>iRight ); + assert( pSrc->a[iLeft].pTab ); + assert( pSrc->a[iRight].pTab ); -/* Next are the tables used to determine what action to take based on the -** current state and lookahead token. These tables are used to implement -** functions that take a state number and lookahead value and return an -** action integer. -** -** Suppose the action integer is N. Then the action is determined as -** follows -** -** 0 <= N < YYNSTATE Shift N. That is, push the lookahead -** token onto the stack and goto state N. -** -** YYNSTATE <= N < YYNSTATE+YYNRULE Reduce by rule N-YYNSTATE. -** -** N == YYNSTATE+YYNRULE A syntax error has occurred. -** -** N == YYNSTATE+YYNRULE+1 The parser accepts its input. -** -** N == YYNSTATE+YYNRULE+2 No such action. Denotes unused -** slots in the yy_action[] table. -** -** The action table is constructed as a single large table named yy_action[]. -** Given state S and lookahead X, the action is computed as -** -** yy_action[ yy_shift_ofst[S] + X ] -** -** If the index value yy_shift_ofst[S]+X is out of range or if the value -** yy_lookahead[yy_shift_ofst[S]+X] is not equal to X or if yy_shift_ofst[S] -** is equal to YY_SHIFT_USE_DFLT, it means that the action is not in the table -** and that yy_default[S] should be used instead. + pE1 = sqlite3CreateColumnExpr(db, pSrc, iLeft, iColLeft); + pE2 = sqlite3CreateColumnExpr(db, pSrc, iRight, iColRight); + + pEq = sqlite3PExpr(pParse, TK_EQ, pE1, pE2, 0); + if( pEq && isOuterJoin ){ + ExprSetProperty(pEq, EP_FromJoin); + assert( !ExprHasAnyProperty(pEq, EP_TokenOnly|EP_Reduced) ); + ExprSetIrreducible(pEq); + pEq->iRightJoinTable = (i16)pE2->iTable; + } + *ppWhere = sqlite3ExprAnd(db, *ppWhere, pEq); +} + +/* +** Set the EP_FromJoin property on all terms of the given expression. +** And set the Expr.iRightJoinTable to iTable for every term in the +** expression. ** -** The formula above is for computing the action when the lookahead is -** a terminal symbol. If the lookahead is a non-terminal (as occurs after -** a reduce action) then the yy_reduce_ofst[] array is used in place of -** the yy_shift_ofst[] array and YY_REDUCE_USE_DFLT is used in place of -** YY_SHIFT_USE_DFLT. +** The EP_FromJoin property is used on terms of an expression to tell +** the LEFT OUTER JOIN processing logic that this term is part of the +** join restriction specified in the ON or USING clause and not a part +** of the more general WHERE clause. These terms are moved over to the +** WHERE clause during join processing but we need to remember that they +** originated in the ON or USING clause. ** -** The following are the tables generated in this section: +** The Expr.iRightJoinTable tells the WHERE clause processing that the +** expression depends on table iRightJoinTable even if that table is not +** explicitly mentioned in the expression. That information is needed +** for cases like this: ** -** yy_action[] A single table containing all actions. -** yy_lookahead[] A table containing the lookahead for each entry in -** yy_action. Used to detect hash collisions. -** yy_shift_ofst[] For each state, the offset into yy_action for -** shifting terminals. -** yy_reduce_ofst[] For each state, the offset into yy_action for -** shifting non-terminals after a reduce. -** yy_default[] Default action for each state. -*/ -static const YYACTIONTYPE yy_action[] = { - /* 0 */ 305, 944, 176, 618, 2, 150, 214, 441, 24, 24, - /* 10 */ 24, 24, 490, 26, 26, 26, 26, 27, 27, 28, - /* 20 */ 28, 28, 29, 216, 415, 416, 212, 415, 416, 448, - /* 30 */ 454, 31, 26, 26, 26, 26, 27, 27, 28, 28, - /* 40 */ 28, 29, 216, 30, 485, 32, 134, 23, 22, 311, - /* 50 */ 458, 459, 455, 455, 25, 25, 24, 24, 24, 24, - /* 60 */ 438, 26, 26, 26, 26, 27, 27, 28, 28, 28, - /* 70 */ 29, 216, 305, 216, 314, 441, 514, 492, 45, 26, - /* 80 */ 26, 26, 26, 27, 27, 28, 28, 28, 29, 216, - /* 90 */ 415, 416, 418, 419, 156, 418, 419, 362, 365, 366, - /* 100 */ 314, 448, 454, 387, 516, 21, 186, 497, 367, 27, - /* 110 */ 27, 28, 28, 28, 29, 216, 415, 416, 417, 23, - /* 120 */ 22, 311, 458, 459, 455, 455, 25, 25, 24, 24, - /* 130 */ 24, 24, 557, 26, 26, 26, 26, 27, 27, 28, - /* 140 */ 28, 28, 29, 216, 305, 228, 506, 135, 470, 218, - /* 150 */ 550, 145, 132, 256, 360, 261, 361, 153, 418, 419, - /* 160 */ 241, 600, 333, 30, 265, 32, 134, 441, 598, 599, - /* 170 */ 230, 228, 492, 448, 454, 57, 508, 330, 132, 256, - /* 180 */ 360, 261, 361, 153, 418, 419, 437, 78, 410, 407, - /* 190 */ 265, 23, 22, 311, 458, 459, 455, 455, 25, 25, - /* 200 */ 24, 24, 24, 24, 344, 26, 26, 26, 26, 27, - /* 210 */ 27, 28, 28, 28, 29, 216, 305, 214, 536, 549, - /* 220 */ 308, 127, 491, 597, 30, 333, 32, 134, 347, 389, - /* 230 */ 431, 63, 333, 357, 417, 441, 509, 333, 417, 537, - /* 240 */ 330, 215, 193, 596, 595, 448, 454, 330, 18, 437, - /* 250 */ 85, 16, 330, 183, 190, 558, 437, 78, 312, 465, - /* 260 */ 466, 437, 85, 23, 22, 311, 458, 459, 455, 455, - /* 270 */ 25, 25, 24, 24, 24, 24, 438, 26, 26, 26, - /* 280 */ 26, 27, 27, 28, 28, 28, 29, 216, 305, 349, - /* 290 */ 221, 316, 597, 191, 380, 333, 474, 234, 347, 383, - /* 300 */ 326, 412, 220, 346, 594, 217, 213, 417, 112, 333, - /* 310 */ 330, 4, 596, 401, 211, 556, 531, 448, 454, 437, - /* 320 */ 79, 217, 555, 517, 330, 336, 515, 461, 461, 471, - /* 330 */ 443, 574, 434, 437, 78, 23, 22, 311, 458, 459, - /* 340 */ 455, 455, 25, 25, 24, 24, 24, 24, 438, 26, - /* 350 */ 26, 26, 26, 27, 27, 28, 28, 28, 29, 216, - /* 360 */ 305, 445, 445, 445, 156, 470, 218, 362, 365, 366, - /* 370 */ 333, 247, 397, 400, 217, 351, 333, 30, 367, 32, - /* 380 */ 134, 390, 282, 281, 39, 330, 41, 432, 547, 448, - /* 390 */ 454, 330, 214, 533, 437, 93, 544, 603, 1, 406, - /* 400 */ 437, 93, 415, 416, 497, 40, 538, 23, 22, 311, - /* 410 */ 458, 459, 455, 455, 25, 25, 24, 24, 24, 24, - /* 420 */ 575, 26, 26, 26, 26, 27, 27, 28, 28, 28, - /* 430 */ 29, 216, 305, 276, 333, 179, 510, 492, 210, 549, - /* 440 */ 322, 415, 416, 222, 192, 387, 323, 240, 417, 330, - /* 450 */ 559, 63, 415, 416, 417, 619, 410, 407, 437, 71, - /* 460 */ 417, 448, 454, 539, 574, 28, 28, 28, 29, 216, - /* 470 */ 418, 419, 438, 338, 465, 466, 403, 43, 438, 23, - /* 480 */ 22, 311, 458, 459, 455, 455, 25, 25, 24, 24, - /* 490 */ 24, 24, 497, 26, 26, 26, 26, 27, 27, 28, - /* 500 */ 28, 28, 29, 216, 305, 429, 209, 135, 513, 418, - /* 510 */ 419, 433, 233, 64, 390, 282, 281, 441, 66, 544, - /* 520 */ 418, 419, 415, 416, 156, 214, 405, 362, 365, 366, - /* 530 */ 549, 252, 492, 448, 454, 493, 217, 8, 367, 497, - /* 540 */ 438, 608, 63, 208, 299, 417, 494, 472, 548, 200, - /* 550 */ 196, 23, 22, 311, 458, 459, 455, 455, 25, 25, - /* 560 */ 24, 24, 24, 24, 388, 26, 26, 26, 26, 27, - /* 570 */ 27, 28, 28, 28, 29, 216, 305, 479, 254, 356, - /* 580 */ 530, 60, 519, 520, 438, 441, 391, 333, 358, 7, - /* 590 */ 418, 419, 333, 480, 330, 374, 197, 137, 462, 501, - /* 600 */ 449, 450, 330, 437, 9, 448, 454, 330, 481, 487, - /* 610 */ 521, 437, 72, 569, 417, 436, 437, 67, 488, 435, - /* 620 */ 522, 452, 453, 23, 22, 311, 458, 459, 455, 455, - /* 630 */ 25, 25, 24, 24, 24, 24, 333, 26, 26, 26, - /* 640 */ 26, 27, 27, 28, 28, 28, 29, 216, 305, 333, - /* 650 */ 451, 330, 268, 392, 463, 333, 65, 333, 370, 436, - /* 660 */ 437, 76, 313, 435, 330, 150, 185, 441, 475, 333, - /* 670 */ 330, 501, 330, 437, 97, 29, 216, 448, 454, 437, - /* 680 */ 96, 437, 101, 355, 330, 242, 417, 336, 154, 461, - /* 690 */ 461, 354, 571, 437, 99, 23, 22, 311, 458, 459, - /* 700 */ 455, 455, 25, 25, 24, 24, 24, 24, 333, 26, - /* 710 */ 26, 26, 26, 27, 27, 28, 28, 28, 29, 216, - /* 720 */ 305, 333, 248, 330, 264, 56, 336, 333, 461, 461, - /* 730 */ 864, 335, 437, 104, 378, 441, 330, 417, 333, 417, - /* 740 */ 567, 333, 330, 307, 566, 437, 105, 442, 265, 448, - /* 750 */ 454, 437, 126, 330, 572, 520, 330, 336, 379, 461, - /* 760 */ 461, 317, 437, 128, 194, 437, 59, 23, 22, 311, - /* 770 */ 458, 459, 455, 455, 25, 25, 24, 24, 24, 24, - /* 780 */ 333, 26, 26, 26, 26, 27, 27, 28, 28, 28, - /* 790 */ 29, 216, 305, 333, 136, 330, 467, 479, 438, 333, - /* 800 */ 352, 333, 611, 303, 437, 102, 201, 137, 330, 417, - /* 810 */ 456, 178, 333, 480, 330, 417, 330, 437, 77, 486, - /* 820 */ 249, 448, 454, 437, 100, 437, 68, 330, 481, 469, - /* 830 */ 343, 616, 934, 341, 934, 417, 437, 98, 489, 23, - /* 840 */ 22, 311, 458, 459, 455, 455, 25, 25, 24, 24, - /* 850 */ 24, 24, 333, 26, 26, 26, 26, 27, 27, 28, - /* 860 */ 28, 28, 29, 216, 305, 333, 399, 330, 164, 264, - /* 870 */ 205, 333, 264, 334, 612, 250, 437, 129, 409, 2, - /* 880 */ 330, 325, 175, 333, 417, 214, 330, 417, 417, 437, - /* 890 */ 130, 468, 468, 448, 454, 437, 131, 398, 330, 257, - /* 900 */ 336, 259, 461, 461, 438, 154, 229, 437, 69, 318, - /* 910 */ 258, 23, 33, 311, 458, 459, 455, 455, 25, 25, - /* 920 */ 24, 24, 24, 24, 333, 26, 26, 26, 26, 27, - /* 930 */ 27, 28, 28, 28, 29, 216, 305, 333, 155, 330, - /* 940 */ 531, 264, 414, 333, 264, 472, 339, 200, 437, 80, - /* 950 */ 542, 499, 330, 151, 541, 333, 417, 417, 330, 417, - /* 960 */ 307, 437, 81, 535, 534, 448, 454, 437, 70, 47, - /* 970 */ 330, 616, 933, 543, 933, 420, 421, 422, 319, 437, - /* 980 */ 82, 320, 304, 613, 22, 311, 458, 459, 455, 455, - /* 990 */ 25, 25, 24, 24, 24, 24, 333, 26, 26, 26, - /* 1000 */ 26, 27, 27, 28, 28, 28, 29, 216, 305, 333, - /* 1010 */ 209, 330, 364, 206, 612, 333, 528, 565, 377, 565, - /* 1020 */ 437, 83, 525, 526, 330, 615, 545, 333, 501, 577, - /* 1030 */ 330, 333, 290, 437, 84, 426, 396, 448, 454, 437, - /* 1040 */ 86, 590, 330, 417, 438, 141, 330, 438, 413, 423, - /* 1050 */ 417, 437, 87, 424, 327, 437, 88, 311, 458, 459, - /* 1060 */ 455, 455, 25, 25, 24, 24, 24, 24, 388, 26, - /* 1070 */ 26, 26, 26, 27, 27, 28, 28, 28, 29, 216, - /* 1080 */ 35, 340, 286, 3, 333, 270, 333, 329, 416, 142, - /* 1090 */ 384, 321, 276, 425, 144, 35, 340, 337, 3, 330, - /* 1100 */ 6, 330, 329, 416, 304, 614, 276, 417, 437, 73, - /* 1110 */ 437, 74, 337, 333, 328, 342, 427, 333, 439, 333, - /* 1120 */ 540, 417, 155, 47, 289, 474, 287, 274, 330, 272, - /* 1130 */ 342, 417, 330, 350, 330, 277, 276, 437, 89, 243, - /* 1140 */ 474, 437, 90, 437, 91, 38, 37, 615, 333, 584, - /* 1150 */ 244, 417, 428, 276, 36, 331, 332, 46, 245, 443, - /* 1160 */ 38, 37, 507, 330, 202, 203, 204, 417, 417, 36, - /* 1170 */ 331, 332, 437, 92, 443, 198, 267, 214, 155, 586, - /* 1180 */ 235, 236, 237, 143, 239, 348, 133, 583, 440, 246, - /* 1190 */ 445, 445, 445, 446, 447, 10, 587, 276, 20, 42, - /* 1200 */ 172, 417, 294, 333, 288, 445, 445, 445, 446, 447, - /* 1210 */ 10, 295, 417, 35, 340, 219, 3, 149, 330, 484, - /* 1220 */ 329, 416, 333, 170, 276, 574, 48, 437, 75, 169, - /* 1230 */ 337, 19, 171, 251, 444, 415, 416, 330, 333, 417, - /* 1240 */ 588, 345, 276, 177, 353, 498, 437, 17, 342, 417, - /* 1250 */ 483, 253, 255, 330, 276, 496, 417, 417, 474, 333, - /* 1260 */ 504, 505, 437, 94, 369, 417, 155, 231, 359, 417, - /* 1270 */ 417, 518, 523, 474, 330, 395, 291, 281, 38, 37, - /* 1280 */ 500, 306, 315, 437, 95, 232, 214, 36, 331, 332, - /* 1290 */ 524, 502, 443, 188, 189, 417, 262, 292, 532, 263, - /* 1300 */ 551, 260, 269, 515, 271, 273, 417, 443, 570, 402, - /* 1310 */ 155, 417, 527, 417, 417, 417, 275, 417, 280, 417, - /* 1320 */ 417, 382, 385, 445, 445, 445, 446, 447, 10, 528, - /* 1330 */ 386, 417, 283, 417, 284, 285, 417, 417, 445, 445, - /* 1340 */ 445, 582, 593, 293, 107, 417, 296, 417, 297, 417, - /* 1350 */ 417, 607, 578, 529, 151, 300, 417, 417, 417, 226, - /* 1360 */ 579, 417, 54, 417, 158, 591, 417, 54, 225, 610, - /* 1370 */ 227, 302, 546, 552, 301, 553, 554, 371, 560, 159, - /* 1380 */ 375, 373, 207, 160, 51, 562, 563, 161, 117, 278, - /* 1390 */ 381, 140, 573, 163, 181, 393, 394, 118, 119, 120, - /* 1400 */ 180, 580, 121, 123, 324, 605, 604, 606, 55, 609, - /* 1410 */ 589, 309, 224, 62, 58, 103, 411, 111, 238, 430, - /* 1420 */ 199, 174, 660, 661, 662, 146, 147, 460, 310, 457, - /* 1430 */ 34, 476, 464, 473, 182, 195, 148, 477, 5, 478, - /* 1440 */ 482, 12, 138, 44, 11, 106, 495, 511, 512, 503, - /* 1450 */ 223, 49, 363, 108, 109, 152, 266, 50, 110, 157, - /* 1460 */ 258, 372, 184, 561, 139, 113, 151, 162, 279, 115, - /* 1470 */ 376, 15, 576, 116, 165, 52, 13, 368, 581, 53, - /* 1480 */ 167, 166, 585, 122, 124, 114, 592, 564, 568, 168, - /* 1490 */ 14, 61, 601, 602, 173, 298, 125, 408, 187, 617, - /* 1500 */ 945, 945, 404, -}; -static const YYCODETYPE yy_lookahead[] = { - /* 0 */ 19, 142, 143, 144, 145, 24, 116, 26, 75, 76, - /* 10 */ 77, 78, 25, 80, 81, 82, 83, 84, 85, 86, - /* 20 */ 87, 88, 89, 90, 26, 27, 160, 26, 27, 48, - /* 30 */ 49, 79, 80, 81, 82, 83, 84, 85, 86, 87, - /* 40 */ 88, 89, 90, 222, 223, 224, 225, 66, 67, 68, - /* 50 */ 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, - /* 60 */ 194, 80, 81, 82, 83, 84, 85, 86, 87, 88, - /* 70 */ 89, 90, 19, 90, 19, 94, 174, 25, 25, 80, - /* 80 */ 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, - /* 90 */ 26, 27, 94, 95, 96, 94, 95, 99, 100, 101, - /* 100 */ 19, 48, 49, 150, 174, 52, 119, 166, 110, 84, - /* 110 */ 85, 86, 87, 88, 89, 90, 26, 27, 165, 66, - /* 120 */ 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, - /* 130 */ 77, 78, 186, 80, 81, 82, 83, 84, 85, 86, - /* 140 */ 87, 88, 89, 90, 19, 90, 205, 95, 84, 85, - /* 150 */ 186, 96, 97, 98, 99, 100, 101, 102, 94, 95, - /* 160 */ 195, 97, 150, 222, 109, 224, 225, 26, 104, 105, - /* 170 */ 217, 90, 120, 48, 49, 50, 86, 165, 97, 98, - /* 180 */ 99, 100, 101, 102, 94, 95, 174, 175, 1, 2, - /* 190 */ 109, 66, 67, 68, 69, 70, 71, 72, 73, 74, - /* 200 */ 75, 76, 77, 78, 191, 80, 81, 82, 83, 84, - /* 210 */ 85, 86, 87, 88, 89, 90, 19, 116, 35, 150, - /* 220 */ 155, 24, 208, 150, 222, 150, 224, 225, 216, 128, - /* 230 */ 161, 162, 150, 221, 165, 94, 23, 150, 165, 56, - /* 240 */ 165, 197, 160, 170, 171, 48, 49, 165, 204, 174, - /* 250 */ 175, 22, 165, 24, 185, 186, 174, 175, 169, 170, - /* 260 */ 171, 174, 175, 66, 67, 68, 69, 70, 71, 72, - /* 270 */ 73, 74, 75, 76, 77, 78, 194, 80, 81, 82, - /* 280 */ 83, 84, 85, 86, 87, 88, 89, 90, 19, 214, - /* 290 */ 215, 108, 150, 25, 229, 150, 64, 148, 216, 234, - /* 300 */ 146, 147, 215, 221, 231, 232, 152, 165, 154, 150, - /* 310 */ 165, 196, 170, 171, 160, 181, 182, 48, 49, 174, - /* 320 */ 175, 232, 188, 165, 165, 112, 94, 114, 115, 166, - /* 330 */ 98, 55, 174, 174, 175, 66, 67, 68, 69, 70, - /* 340 */ 71, 72, 73, 74, 75, 76, 77, 78, 194, 80, - /* 350 */ 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, - /* 360 */ 19, 129, 130, 131, 96, 84, 85, 99, 100, 101, - /* 370 */ 150, 226, 218, 231, 232, 216, 150, 222, 110, 224, - /* 380 */ 225, 105, 106, 107, 135, 165, 137, 172, 173, 48, - /* 390 */ 49, 165, 116, 183, 174, 175, 181, 242, 22, 245, - /* 400 */ 174, 175, 26, 27, 166, 136, 183, 66, 67, 68, - /* 410 */ 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, - /* 420 */ 11, 80, 81, 82, 83, 84, 85, 86, 87, 88, - /* 430 */ 89, 90, 19, 150, 150, 23, 23, 25, 160, 150, - /* 440 */ 220, 26, 27, 205, 160, 150, 220, 158, 165, 165, - /* 450 */ 161, 162, 26, 27, 165, 0, 1, 2, 174, 175, - /* 460 */ 165, 48, 49, 183, 55, 86, 87, 88, 89, 90, - /* 470 */ 94, 95, 194, 169, 170, 171, 193, 136, 194, 66, - /* 480 */ 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, - /* 490 */ 77, 78, 166, 80, 81, 82, 83, 84, 85, 86, - /* 500 */ 87, 88, 89, 90, 19, 153, 160, 95, 23, 94, - /* 510 */ 95, 173, 217, 22, 105, 106, 107, 26, 22, 181, - /* 520 */ 94, 95, 26, 27, 96, 116, 243, 99, 100, 101, - /* 530 */ 150, 205, 120, 48, 49, 120, 232, 22, 110, 166, - /* 540 */ 194, 161, 162, 236, 163, 165, 120, 166, 167, 168, - /* 550 */ 160, 66, 67, 68, 69, 70, 71, 72, 73, 74, - /* 560 */ 75, 76, 77, 78, 218, 80, 81, 82, 83, 84, - /* 570 */ 85, 86, 87, 88, 89, 90, 19, 12, 205, 150, - /* 580 */ 23, 235, 190, 191, 194, 94, 240, 150, 86, 74, - /* 590 */ 94, 95, 150, 28, 165, 237, 206, 207, 23, 150, - /* 600 */ 48, 49, 165, 174, 175, 48, 49, 165, 43, 31, - /* 610 */ 45, 174, 175, 21, 165, 113, 174, 175, 40, 117, - /* 620 */ 55, 69, 70, 66, 67, 68, 69, 70, 71, 72, - /* 630 */ 73, 74, 75, 76, 77, 78, 150, 80, 81, 82, - /* 640 */ 83, 84, 85, 86, 87, 88, 89, 90, 19, 150, - /* 650 */ 98, 165, 23, 61, 23, 150, 25, 150, 19, 113, - /* 660 */ 174, 175, 213, 117, 165, 24, 196, 26, 23, 150, - /* 670 */ 165, 150, 165, 174, 175, 89, 90, 48, 49, 174, - /* 680 */ 175, 174, 175, 19, 165, 198, 165, 112, 49, 114, - /* 690 */ 115, 27, 100, 174, 175, 66, 67, 68, 69, 70, - /* 700 */ 71, 72, 73, 74, 75, 76, 77, 78, 150, 80, - /* 710 */ 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, - /* 720 */ 19, 150, 150, 165, 150, 24, 112, 150, 114, 115, - /* 730 */ 138, 19, 174, 175, 213, 94, 165, 165, 150, 165, - /* 740 */ 29, 150, 165, 104, 33, 174, 175, 166, 109, 48, - /* 750 */ 49, 174, 175, 165, 190, 191, 165, 112, 47, 114, - /* 760 */ 115, 187, 174, 175, 160, 174, 175, 66, 67, 68, - /* 770 */ 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, - /* 780 */ 150, 80, 81, 82, 83, 84, 85, 86, 87, 88, - /* 790 */ 89, 90, 19, 150, 150, 165, 233, 12, 194, 150, - /* 800 */ 150, 150, 248, 249, 174, 175, 206, 207, 165, 165, - /* 810 */ 98, 23, 150, 28, 165, 165, 165, 174, 175, 177, - /* 820 */ 150, 48, 49, 174, 175, 174, 175, 165, 43, 233, - /* 830 */ 45, 22, 23, 228, 25, 165, 174, 175, 177, 66, - /* 840 */ 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, - /* 850 */ 77, 78, 150, 80, 81, 82, 83, 84, 85, 86, - /* 860 */ 87, 88, 89, 90, 19, 150, 97, 165, 25, 150, - /* 870 */ 160, 150, 150, 150, 65, 209, 174, 175, 144, 145, - /* 880 */ 165, 246, 247, 150, 165, 116, 165, 165, 165, 174, - /* 890 */ 175, 129, 130, 48, 49, 174, 175, 128, 165, 98, - /* 900 */ 112, 177, 114, 115, 194, 49, 187, 174, 175, 187, - /* 910 */ 109, 66, 67, 68, 69, 70, 71, 72, 73, 74, - /* 920 */ 75, 76, 77, 78, 150, 80, 81, 82, 83, 84, - /* 930 */ 85, 86, 87, 88, 89, 90, 19, 150, 25, 165, - /* 940 */ 182, 150, 150, 150, 150, 166, 167, 168, 174, 175, - /* 950 */ 166, 23, 165, 25, 177, 150, 165, 165, 165, 165, - /* 960 */ 104, 174, 175, 97, 98, 48, 49, 174, 175, 126, - /* 970 */ 165, 22, 23, 177, 25, 7, 8, 9, 187, 174, - /* 980 */ 175, 187, 22, 23, 67, 68, 69, 70, 71, 72, - /* 990 */ 73, 74, 75, 76, 77, 78, 150, 80, 81, 82, - /* 1000 */ 83, 84, 85, 86, 87, 88, 89, 90, 19, 150, - /* 1010 */ 160, 165, 178, 160, 65, 150, 103, 105, 106, 107, - /* 1020 */ 174, 175, 7, 8, 165, 65, 166, 150, 150, 199, - /* 1030 */ 165, 150, 209, 174, 175, 150, 209, 48, 49, 174, - /* 1040 */ 175, 199, 165, 165, 194, 6, 165, 194, 149, 149, - /* 1050 */ 165, 174, 175, 149, 149, 174, 175, 68, 69, 70, - /* 1060 */ 71, 72, 73, 74, 75, 76, 77, 78, 218, 80, - /* 1070 */ 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, - /* 1080 */ 19, 20, 16, 22, 150, 16, 150, 26, 27, 151, - /* 1090 */ 240, 213, 150, 13, 151, 19, 20, 36, 22, 165, - /* 1100 */ 25, 165, 26, 27, 22, 23, 150, 165, 174, 175, - /* 1110 */ 174, 175, 36, 150, 159, 54, 150, 150, 194, 150, - /* 1120 */ 23, 165, 25, 126, 58, 64, 60, 58, 165, 60, - /* 1130 */ 54, 165, 165, 123, 165, 193, 150, 174, 175, 199, - /* 1140 */ 64, 174, 175, 174, 175, 84, 85, 65, 150, 193, - /* 1150 */ 200, 165, 150, 150, 93, 94, 95, 124, 201, 98, - /* 1160 */ 84, 85, 86, 165, 105, 106, 107, 165, 165, 93, - /* 1170 */ 94, 95, 174, 175, 98, 5, 23, 116, 25, 193, - /* 1180 */ 10, 11, 12, 13, 14, 122, 150, 17, 203, 202, - /* 1190 */ 129, 130, 131, 132, 133, 134, 193, 150, 125, 135, - /* 1200 */ 30, 165, 32, 150, 138, 129, 130, 131, 132, 133, - /* 1210 */ 134, 41, 165, 19, 20, 227, 22, 118, 165, 157, - /* 1220 */ 26, 27, 150, 53, 150, 55, 104, 174, 175, 59, - /* 1230 */ 36, 22, 62, 210, 150, 26, 27, 165, 150, 165, - /* 1240 */ 193, 150, 150, 157, 121, 211, 174, 175, 54, 165, - /* 1250 */ 150, 210, 210, 165, 150, 150, 165, 165, 64, 150, - /* 1260 */ 211, 211, 174, 175, 23, 165, 25, 193, 104, 165, - /* 1270 */ 165, 176, 176, 64, 165, 105, 106, 107, 84, 85, - /* 1280 */ 150, 111, 46, 174, 175, 193, 116, 93, 94, 95, - /* 1290 */ 184, 150, 98, 84, 85, 165, 150, 193, 150, 150, - /* 1300 */ 150, 176, 150, 94, 150, 150, 165, 98, 23, 139, - /* 1310 */ 25, 165, 178, 165, 165, 165, 150, 165, 150, 165, - /* 1320 */ 165, 150, 150, 129, 130, 131, 132, 133, 134, 103, - /* 1330 */ 150, 165, 150, 165, 150, 150, 165, 165, 129, 130, - /* 1340 */ 131, 150, 150, 150, 22, 165, 150, 165, 150, 165, - /* 1350 */ 165, 150, 23, 176, 25, 179, 165, 165, 165, 90, - /* 1360 */ 23, 165, 25, 165, 156, 23, 165, 25, 230, 23, - /* 1370 */ 230, 25, 184, 176, 179, 176, 176, 18, 157, 156, - /* 1380 */ 44, 157, 157, 156, 135, 157, 239, 156, 22, 238, - /* 1390 */ 157, 66, 189, 189, 219, 157, 18, 192, 192, 192, - /* 1400 */ 219, 199, 192, 189, 157, 157, 39, 157, 241, 37, - /* 1410 */ 199, 250, 180, 244, 241, 164, 1, 180, 15, 23, - /* 1420 */ 22, 247, 118, 118, 118, 118, 118, 113, 250, 98, - /* 1430 */ 22, 11, 23, 23, 22, 22, 25, 23, 34, 23, - /* 1440 */ 23, 34, 118, 25, 25, 22, 120, 23, 23, 27, - /* 1450 */ 50, 22, 50, 22, 22, 34, 23, 22, 22, 102, - /* 1460 */ 109, 19, 24, 20, 38, 104, 25, 104, 138, 22, - /* 1470 */ 42, 5, 1, 108, 127, 74, 22, 50, 1, 74, - /* 1480 */ 16, 119, 20, 119, 108, 51, 128, 57, 51, 121, - /* 1490 */ 22, 16, 23, 23, 15, 140, 127, 3, 22, 4, - /* 1500 */ 251, 251, 63, -}; -#define YY_SHIFT_USE_DFLT (-111) -#define YY_SHIFT_MAX 408 -static const short yy_shift_ofst[] = { - /* 0 */ 187, 1061, 1170, 1061, 1194, 1194, -2, 64, 64, -19, - /* 10 */ 1194, 1194, 1194, 1194, 1194, 276, 1, 125, 1076, 1194, - /* 20 */ 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, - /* 30 */ 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, - /* 40 */ 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, - /* 50 */ 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, -48, - /* 60 */ 409, 1, 1, 141, 281, 281, -110, 53, 197, 269, - /* 70 */ 341, 413, 485, 557, 629, 701, 773, 845, 773, 773, - /* 80 */ 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, - /* 90 */ 773, 773, 773, 773, 773, 773, 917, 989, 989, -67, - /* 100 */ -67, -1, -1, 55, 25, 379, 1, 1, 1, 1, - /* 110 */ 1, 639, 592, 1, 1, 1, 1, 1, 1, 1, - /* 120 */ 1, 1, 1, 1, 1, 1, 586, 141, -17, -111, - /* 130 */ -111, -111, 1209, 81, 376, 415, 426, 496, 90, 565, - /* 140 */ 565, 1, 1, 1, 1, 1, 1, 1, 1, 1, - /* 150 */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - /* 160 */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - /* 170 */ 1, 1, 1, 1, 809, 949, 455, 641, 641, 641, - /* 180 */ 769, 101, -110, -110, -110, -111, -111, -111, 232, 232, - /* 190 */ 268, 428, 213, 575, 645, 785, 788, 412, 968, 502, - /* 200 */ 491, 52, 183, 183, 183, 614, 614, 711, 912, 614, - /* 210 */ 614, 614, 614, 229, 546, -13, 141, 762, 762, 249, - /* 220 */ 578, 578, 664, 578, 856, 578, 141, 578, 141, 913, - /* 230 */ 843, 664, 664, 843, 1039, 1039, 1039, 1039, 1080, 1080, - /* 240 */ 1075, -110, 997, 1010, 1033, 1063, 1073, 1064, 1099, 1099, - /* 250 */ 1122, 1123, 1122, 1123, 1122, 1123, 1164, 1164, 1236, 1164, - /* 260 */ 1226, 1164, 1322, 1269, 1269, 1236, 1164, 1164, 1164, 1322, - /* 270 */ 1359, 1099, 1359, 1099, 1359, 1099, 1099, 1336, 1249, 1359, - /* 280 */ 1099, 1325, 1325, 1366, 997, 1099, 1378, 1378, 1378, 1378, - /* 290 */ 997, 1325, 1366, 1099, 1367, 1367, 1099, 1099, 1372, -111, - /* 300 */ -111, -111, -111, -111, -111, 552, 1066, 1059, 1069, 960, - /* 310 */ 1082, 712, 631, 928, 801, 1015, 866, 1097, 1153, 1241, - /* 320 */ 1285, 1329, 1337, 1342, 515, 1346, 1415, 1403, 1396, 1398, - /* 330 */ 1304, 1305, 1306, 1307, 1308, 1331, 1314, 1408, 1409, 1410, - /* 340 */ 1412, 1420, 1413, 1414, 1411, 1416, 1417, 1418, 1404, 1419, - /* 350 */ 1407, 1418, 1326, 1423, 1421, 1422, 1324, 1424, 1425, 1426, - /* 360 */ 1400, 1429, 1402, 1431, 1433, 1432, 1435, 1427, 1436, 1357, - /* 370 */ 1351, 1442, 1443, 1438, 1361, 1428, 1430, 1434, 1441, 1437, - /* 380 */ 1330, 1363, 1447, 1466, 1471, 1365, 1401, 1405, 1347, 1454, - /* 390 */ 1362, 1477, 1464, 1368, 1462, 1364, 1376, 1369, 1468, 1358, - /* 400 */ 1469, 1470, 1475, 1439, 1479, 1355, 1476, 1494, 1495, -}; -#define YY_REDUCE_USE_DFLT (-180) -#define YY_REDUCE_MAX 304 -static const short yy_reduce_ofst[] = { - /* 0 */ -141, 82, 154, 284, 12, 75, 69, 73, 142, -59, - /* 10 */ 145, 87, 159, 220, 226, 346, 289, 155, 429, 437, - /* 20 */ 442, 486, 499, 505, 507, 519, 558, 571, 577, 588, - /* 30 */ 591, 630, 643, 649, 651, 662, 702, 715, 721, 733, - /* 40 */ 774, 787, 793, 805, 846, 859, 865, 877, 881, 934, - /* 50 */ 936, 963, 967, 969, 998, 1053, 1072, 1088, 1109, -179, - /* 60 */ 850, 283, 380, 381, 89, 304, 390, 2, 2, 2, - /* 70 */ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - /* 80 */ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - /* 90 */ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - /* 100 */ 2, 2, 2, 215, 2, 2, 449, 574, 719, 722, - /* 110 */ 791, 134, 65, 942, 521, 794, -47, 878, 956, 986, - /* 120 */ 1003, 1047, 1074, 1092, 295, 1104, 2, 779, 2, 2, - /* 130 */ 2, 2, 158, 338, 572, 644, 650, 670, 723, 392, - /* 140 */ 564, 792, 885, 966, 1002, 1036, 723, 1084, 1091, 1100, - /* 150 */ 1105, 1130, 1141, 1146, 1148, 1149, 1150, 1152, 1154, 1155, - /* 160 */ 1166, 1168, 1171, 1172, 1180, 1182, 1184, 1185, 1191, 1192, - /* 170 */ 1193, 1196, 1198, 1201, 554, 554, 734, 238, 326, 373, - /* 180 */ -134, 278, 604, 710, 853, 44, 600, 635, -98, -70, - /* 190 */ -54, -36, -35, -35, -35, 13, -35, 14, 149, 115, - /* 200 */ 163, 14, 210, 223, 280, -35, -35, 307, 358, -35, - /* 210 */ -35, -35, -35, 352, 470, 487, 581, 563, 596, 605, - /* 220 */ 642, 661, 666, 724, 758, 777, 784, 796, 860, 834, - /* 230 */ 830, 823, 827, 842, 899, 900, 904, 905, 938, 943, - /* 240 */ 955, 924, 940, 950, 957, 987, 985, 988, 1062, 1086, - /* 250 */ 1023, 1034, 1041, 1049, 1042, 1050, 1095, 1096, 1106, 1125, - /* 260 */ 1134, 1177, 1176, 1138, 1140, 1188, 1197, 1199, 1200, 1195, - /* 270 */ 1208, 1221, 1223, 1224, 1227, 1225, 1228, 1151, 1147, 1231, - /* 280 */ 1233, 1203, 1204, 1175, 1202, 1238, 1205, 1206, 1207, 1210, - /* 290 */ 1211, 1214, 1181, 1247, 1167, 1173, 1248, 1250, 1169, 1251, - /* 300 */ 1232, 1237, 1174, 1161, 1178, -}; -static const YYACTIONTYPE yy_default[] = { - /* 0 */ 624, 859, 943, 943, 859, 943, 943, 888, 888, 747, - /* 10 */ 857, 943, 943, 943, 943, 943, 943, 917, 943, 943, - /* 20 */ 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, - /* 30 */ 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, - /* 40 */ 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, - /* 50 */ 943, 943, 943, 943, 943, 943, 943, 943, 943, 831, - /* 60 */ 943, 943, 943, 663, 888, 888, 751, 782, 943, 943, - /* 70 */ 943, 943, 943, 943, 943, 943, 783, 943, 861, 856, - /* 80 */ 852, 854, 853, 860, 784, 773, 780, 787, 762, 901, - /* 90 */ 789, 790, 796, 797, 918, 916, 819, 818, 837, 821, - /* 100 */ 843, 820, 830, 655, 822, 823, 943, 943, 943, 943, - /* 110 */ 943, 716, 650, 943, 943, 943, 943, 943, 943, 943, - /* 120 */ 943, 943, 943, 943, 943, 943, 824, 943, 825, 838, - /* 130 */ 839, 840, 943, 943, 943, 943, 943, 943, 943, 943, - /* 140 */ 943, 630, 943, 943, 943, 943, 943, 943, 943, 943, - /* 150 */ 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, - /* 160 */ 943, 943, 943, 943, 943, 943, 943, 943, 943, 872, - /* 170 */ 943, 921, 923, 943, 943, 943, 624, 747, 747, 747, - /* 180 */ 943, 943, 943, 943, 943, 741, 751, 935, 943, 943, - /* 190 */ 707, 943, 943, 943, 943, 943, 943, 943, 632, 739, - /* 200 */ 665, 749, 943, 943, 943, 652, 728, 894, 943, 908, - /* 210 */ 906, 730, 792, 943, 739, 748, 943, 943, 943, 855, - /* 220 */ 776, 776, 764, 776, 686, 776, 943, 776, 943, 689, - /* 230 */ 786, 764, 764, 786, 629, 629, 629, 629, 640, 640, - /* 240 */ 706, 943, 786, 777, 779, 769, 781, 943, 755, 755, - /* 250 */ 763, 768, 763, 768, 763, 768, 718, 718, 703, 718, - /* 260 */ 689, 718, 865, 869, 869, 703, 718, 718, 718, 865, - /* 270 */ 647, 755, 647, 755, 647, 755, 755, 898, 900, 647, - /* 280 */ 755, 720, 720, 798, 786, 755, 727, 727, 727, 727, - /* 290 */ 786, 720, 798, 755, 920, 920, 755, 755, 928, 673, - /* 300 */ 691, 691, 935, 940, 940, 943, 943, 943, 943, 943, - /* 310 */ 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, - /* 320 */ 943, 943, 943, 943, 874, 943, 943, 638, 943, 657, - /* 330 */ 805, 810, 806, 943, 807, 943, 733, 943, 943, 943, - /* 340 */ 943, 943, 943, 943, 943, 943, 943, 858, 943, 770, - /* 350 */ 943, 778, 943, 943, 943, 943, 943, 943, 943, 943, - /* 360 */ 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, - /* 370 */ 943, 943, 943, 943, 943, 943, 943, 896, 897, 943, - /* 380 */ 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, - /* 390 */ 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, - /* 400 */ 943, 943, 943, 927, 943, 943, 930, 625, 943, 620, - /* 410 */ 622, 623, 627, 628, 631, 657, 658, 660, 661, 662, - /* 420 */ 633, 634, 635, 636, 637, 639, 643, 641, 642, 644, - /* 430 */ 651, 653, 672, 674, 676, 737, 738, 802, 731, 732, - /* 440 */ 736, 659, 813, 804, 808, 809, 811, 812, 826, 827, - /* 450 */ 829, 835, 842, 845, 828, 833, 834, 836, 841, 844, - /* 460 */ 734, 735, 848, 666, 667, 670, 671, 884, 886, 885, - /* 470 */ 887, 669, 668, 814, 817, 850, 851, 909, 910, 911, - /* 480 */ 912, 913, 846, 756, 849, 832, 771, 774, 775, 772, - /* 490 */ 740, 750, 758, 759, 760, 761, 745, 746, 752, 767, - /* 500 */ 800, 801, 765, 766, 753, 754, 742, 743, 744, 847, - /* 510 */ 803, 815, 816, 677, 678, 810, 679, 680, 681, 719, - /* 520 */ 722, 723, 724, 682, 701, 704, 705, 683, 690, 684, - /* 530 */ 685, 692, 693, 694, 697, 698, 699, 700, 695, 696, - /* 540 */ 866, 867, 870, 868, 687, 688, 702, 675, 664, 656, - /* 550 */ 708, 711, 712, 713, 714, 715, 717, 709, 710, 654, - /* 560 */ 645, 648, 757, 890, 899, 895, 891, 892, 893, 649, - /* 570 */ 862, 863, 721, 794, 795, 889, 902, 904, 799, 905, - /* 580 */ 907, 903, 932, 646, 725, 726, 729, 871, 914, 785, - /* 590 */ 788, 791, 793, 873, 875, 877, 879, 880, 881, 882, - /* 600 */ 883, 876, 878, 915, 919, 922, 924, 925, 926, 929, - /* 610 */ 931, 936, 937, 938, 941, 942, 939, 626, 621, -}; -#define YY_SZ_ACTTAB (int)(sizeof(yy_action)/sizeof(yy_action[0])) - -/* The next table maps tokens into fallback tokens. If a construct -** like the following: -** -** %fallback ID X Y Z. +** SELECT * FROM t1 LEFT JOIN t2 ON t1.a=t2.b AND t1.x=5 ** -** appears in the grammar, then ID becomes a fallback token for X, Y, -** and Z. Whenever one of the tokens X, Y, or Z is input to the parser -** but it does not parse, the type of the token is changed to ID and -** the parse is retried before an error is thrown. +** The where clause needs to defer the handling of the t1.x=5 +** term until after the t2 loop of the join. In that way, a +** NULL t2 row will be inserted whenever t1.x!=5. If we do not +** defer the handling of t1.x=5, it will be processed immediately +** after the t1 loop and rows with t1.x!=5 will never appear in +** the output, which is incorrect. */ -#ifdef YYFALLBACK -static const YYCODETYPE yyFallback[] = { - 0, /* $ => nothing */ - 0, /* SEMI => nothing */ - 26, /* EXPLAIN => ID */ - 26, /* QUERY => ID */ - 26, /* PLAN => ID */ - 26, /* BEGIN => ID */ - 0, /* TRANSACTION => nothing */ - 26, /* DEFERRED => ID */ - 26, /* IMMEDIATE => ID */ - 26, /* EXCLUSIVE => ID */ - 0, /* COMMIT => nothing */ - 26, /* END => ID */ - 26, /* ROLLBACK => ID */ - 26, /* SAVEPOINT => ID */ - 26, /* RELEASE => ID */ - 0, /* TO => nothing */ - 0, /* TABLE => nothing */ - 0, /* CREATE => nothing */ - 26, /* IF => ID */ - 0, /* NOT => nothing */ - 0, /* EXISTS => nothing */ - 26, /* TEMP => ID */ - 0, /* LP => nothing */ - 0, /* RP => nothing */ - 0, /* AS => nothing */ - 0, /* COMMA => nothing */ - 0, /* ID => nothing */ - 0, /* INDEXED => nothing */ - 26, /* ABORT => ID */ - 26, /* AFTER => ID */ - 26, /* ANALYZE => ID */ - 26, /* ASC => ID */ - 26, /* ATTACH => ID */ - 26, /* BEFORE => ID */ - 26, /* BY => ID */ - 26, /* CASCADE => ID */ - 26, /* CAST => ID */ - 26, /* COLUMNKW => ID */ - 26, /* CONFLICT => ID */ - 26, /* DATABASE => ID */ - 26, /* DESC => ID */ - 26, /* DETACH => ID */ - 26, /* EACH => ID */ - 26, /* FAIL => ID */ - 26, /* FOR => ID */ - 26, /* IGNORE => ID */ - 26, /* INITIALLY => ID */ - 26, /* INSTEAD => ID */ - 26, /* LIKE_KW => ID */ - 26, /* MATCH => ID */ - 26, /* KEY => ID */ - 26, /* OF => ID */ - 26, /* OFFSET => ID */ - 26, /* PRAGMA => ID */ - 26, /* RAISE => ID */ - 26, /* REPLACE => ID */ - 26, /* RESTRICT => ID */ - 26, /* ROW => ID */ - 26, /* TRIGGER => ID */ - 26, /* VACUUM => ID */ - 26, /* VIEW => ID */ - 26, /* VIRTUAL => ID */ - 26, /* REINDEX => ID */ - 26, /* RENAME => ID */ - 26, /* CTIME_KW => ID */ -}; -#endif /* YYFALLBACK */ +static void setJoinExpr(Expr *p, int iTable){ + while( p ){ + ExprSetProperty(p, EP_FromJoin); + assert( !ExprHasAnyProperty(p, EP_TokenOnly|EP_Reduced) ); + ExprSetIrreducible(p); + p->iRightJoinTable = (i16)iTable; + setJoinExpr(p->pLeft, iTable); + p = p->pRight; + } +} -/* The following structure represents a single element of the -** parser's stack. Information stored includes: -** -** + The state number for the parser at this level of the stack. +/* +** This routine processes the join information for a SELECT statement. +** ON and USING clauses are converted into extra terms of the WHERE clause. +** NATURAL joins also create extra WHERE clause terms. ** -** + The value of the token stored at this level of the stack. -** (In other words, the "major" token.) +** The terms of a FROM clause are contained in the Select.pSrc structure. +** The left most table is the first entry in Select.pSrc. The right-most +** table is the last entry. The join operator is held in the entry to +** the left. Thus entry 0 contains the join operator for the join between +** entries 0 and 1. Any ON or USING clauses associated with the join are +** also attached to the left entry. ** -** + The semantic value stored at this level of the stack. This is -** the information used by the action routines in the grammar. -** It is sometimes called the "minor" token. +** This routine returns the number of errors encountered. */ -struct yyStackEntry { - YYACTIONTYPE stateno; /* The state-number */ - YYCODETYPE major; /* The major token value. This is the code - ** number for the token at this stack level */ - YYMINORTYPE minor; /* The user-supplied minor token value. This - ** is the value of the token */ -}; -typedef struct yyStackEntry yyStackEntry; +static int sqliteProcessJoin(Parse *pParse, Select *p){ + SrcList *pSrc; /* All tables in the FROM clause */ + int i, j; /* Loop counters */ + struct SrcList_item *pLeft; /* Left table being joined */ + struct SrcList_item *pRight; /* Right table being joined */ -/* The state of the parser is completely contained in an instance of -** the following structure */ -struct yyParser { - int yyidx; /* Index of top element in stack */ -#ifdef YYTRACKMAXSTACKDEPTH - int yyidxMax; /* Maximum value of yyidx */ -#endif - int yyerrcnt; /* Shifts left before out of the error */ - sqlite3ParserARG_SDECL /* A place to hold %extra_argument */ -#if YYSTACKDEPTH<=0 - int yystksz; /* Current side of the stack */ - yyStackEntry *yystack; /* The parser's stack */ -#else - yyStackEntry yystack[YYSTACKDEPTH]; /* The parser's stack */ -#endif -}; -typedef struct yyParser yyParser; + pSrc = p->pSrc; + pLeft = &pSrc->a[0]; + pRight = &pLeft[1]; + for(i=0; inSrc-1; i++, pRight++, pLeft++){ + Table *pLeftTab = pLeft->pTab; + Table *pRightTab = pRight->pTab; + int isOuter; -#ifndef NDEBUG -static FILE *yyTraceFILE = 0; -static char *yyTracePrompt = 0; -#endif /* NDEBUG */ + if( NEVER(pLeftTab==0 || pRightTab==0) ) continue; + isOuter = (pRight->jointype & JT_OUTER)!=0; -#ifndef NDEBUG -/* -** Turn parser tracing on by giving a stream to which to write the trace -** and a prompt to preface each trace message. Tracing is turned off -** by making either argument NULL -** -** Inputs: -**
      -**
    • A FILE* to which trace output should be written. -** If NULL, then tracing is turned off. -**
    • A prefix string written at the beginning of every -** line of trace output. If NULL, then tracing is -** turned off. -**
    -** -** Outputs: -** None. -*/ -SQLITE_PRIVATE void sqlite3ParserTrace(FILE *TraceFILE, char *zTracePrompt){ - yyTraceFILE = TraceFILE; - yyTracePrompt = zTracePrompt; - if( yyTraceFILE==0 ) yyTracePrompt = 0; - else if( yyTracePrompt==0 ) yyTraceFILE = 0; -} -#endif /* NDEBUG */ + /* When the NATURAL keyword is present, add WHERE clause terms for + ** every column that the two tables have in common. + */ + if( pRight->jointype & JT_NATURAL ){ + if( pRight->pOn || pRight->pUsing ){ + sqlite3ErrorMsg(pParse, "a NATURAL join may not have " + "an ON or USING clause", 0); + return 1; + } + for(j=0; jnCol; j++){ + char *zName; /* Name of column in the right table */ + int iLeft; /* Matching left table */ + int iLeftCol; /* Matching column in the left table */ -#ifndef NDEBUG -/* For tracing shifts, the names of all terminals and nonterminals -** are required. The following table supplies these names */ -static const char *const yyTokenName[] = { - "$", "SEMI", "EXPLAIN", "QUERY", - "PLAN", "BEGIN", "TRANSACTION", "DEFERRED", - "IMMEDIATE", "EXCLUSIVE", "COMMIT", "END", - "ROLLBACK", "SAVEPOINT", "RELEASE", "TO", - "TABLE", "CREATE", "IF", "NOT", - "EXISTS", "TEMP", "LP", "RP", - "AS", "COMMA", "ID", "INDEXED", - "ABORT", "AFTER", "ANALYZE", "ASC", - "ATTACH", "BEFORE", "BY", "CASCADE", - "CAST", "COLUMNKW", "CONFLICT", "DATABASE", - "DESC", "DETACH", "EACH", "FAIL", - "FOR", "IGNORE", "INITIALLY", "INSTEAD", - "LIKE_KW", "MATCH", "KEY", "OF", - "OFFSET", "PRAGMA", "RAISE", "REPLACE", - "RESTRICT", "ROW", "TRIGGER", "VACUUM", - "VIEW", "VIRTUAL", "REINDEX", "RENAME", - "CTIME_KW", "ANY", "OR", "AND", - "IS", "BETWEEN", "IN", "ISNULL", - "NOTNULL", "NE", "EQ", "GT", - "LE", "LT", "GE", "ESCAPE", - "BITAND", "BITOR", "LSHIFT", "RSHIFT", - "PLUS", "MINUS", "STAR", "SLASH", - "REM", "CONCAT", "COLLATE", "UMINUS", - "UPLUS", "BITNOT", "STRING", "JOIN_KW", - "CONSTRAINT", "DEFAULT", "NULL", "PRIMARY", - "UNIQUE", "CHECK", "REFERENCES", "AUTOINCR", - "ON", "DELETE", "UPDATE", "INSERT", - "SET", "DEFERRABLE", "FOREIGN", "DROP", - "UNION", "ALL", "EXCEPT", "INTERSECT", - "SELECT", "DISTINCT", "DOT", "FROM", - "JOIN", "USING", "ORDER", "GROUP", - "HAVING", "LIMIT", "WHERE", "INTO", - "VALUES", "INTEGER", "FLOAT", "BLOB", - "REGISTER", "VARIABLE", "CASE", "WHEN", - "THEN", "ELSE", "INDEX", "ALTER", - "ADD", "error", "input", "cmdlist", - "ecmd", "explain", "cmdx", "cmd", - "transtype", "trans_opt", "nm", "savepoint_opt", - "create_table", "create_table_args", "createkw", "temp", - "ifnotexists", "dbnm", "columnlist", "conslist_opt", - "select", "column", "columnid", "type", - "carglist", "id", "ids", "typetoken", - "typename", "signed", "plus_num", "minus_num", - "carg", "ccons", "term", "expr", - "onconf", "sortorder", "autoinc", "idxlist_opt", - "refargs", "defer_subclause", "refarg", "refact", - "init_deferred_pred_opt", "conslist", "tcons", "idxlist", - "defer_subclause_opt", "orconf", "resolvetype", "raisetype", - "ifexists", "fullname", "oneselect", "multiselect_op", - "distinct", "selcollist", "from", "where_opt", - "groupby_opt", "having_opt", "orderby_opt", "limit_opt", - "sclp", "as", "seltablist", "stl_prefix", - "joinop", "indexed_opt", "on_opt", "using_opt", - "joinop2", "inscollist", "sortlist", "sortitem", - "nexprlist", "setlist", "insert_cmd", "inscollist_opt", - "itemlist", "exprlist", "likeop", "escape", - "between_op", "in_op", "case_operand", "case_exprlist", - "case_else", "uniqueflag", "collate", "nmnum", - "plus_opt", "number", "trigger_decl", "trigger_cmd_list", - "trigger_time", "trigger_event", "foreach_clause", "when_clause", - "trigger_cmd", "database_kw_opt", "key_opt", "add_column_fullname", - "kwcolumn_opt", "create_vtab", "vtabarglist", "vtabarg", - "vtabargtoken", "lp", "anylist", -}; -#endif /* NDEBUG */ + zName = pRightTab->aCol[j].zName; + if( tableAndColumnIndex(pSrc, i+1, zName, &iLeft, &iLeftCol) ){ + addWhereTerm(pParse, pSrc, iLeft, iLeftCol, i+1, j, + isOuter, &p->pWhere); + } + } + } -#ifndef NDEBUG -/* For tracing reduce actions, the names of all rules are required. -*/ -static const char *const yyRuleName[] = { - /* 0 */ "input ::= cmdlist", - /* 1 */ "cmdlist ::= cmdlist ecmd", - /* 2 */ "cmdlist ::= ecmd", - /* 3 */ "ecmd ::= SEMI", - /* 4 */ "ecmd ::= explain cmdx SEMI", - /* 5 */ "explain ::=", - /* 6 */ "explain ::= EXPLAIN", - /* 7 */ "explain ::= EXPLAIN QUERY PLAN", - /* 8 */ "cmdx ::= cmd", - /* 9 */ "cmd ::= BEGIN transtype trans_opt", - /* 10 */ "trans_opt ::=", - /* 11 */ "trans_opt ::= TRANSACTION", - /* 12 */ "trans_opt ::= TRANSACTION nm", - /* 13 */ "transtype ::=", - /* 14 */ "transtype ::= DEFERRED", - /* 15 */ "transtype ::= IMMEDIATE", - /* 16 */ "transtype ::= EXCLUSIVE", - /* 17 */ "cmd ::= COMMIT trans_opt", - /* 18 */ "cmd ::= END trans_opt", - /* 19 */ "cmd ::= ROLLBACK trans_opt", - /* 20 */ "savepoint_opt ::= SAVEPOINT", - /* 21 */ "savepoint_opt ::=", - /* 22 */ "cmd ::= SAVEPOINT nm", - /* 23 */ "cmd ::= RELEASE savepoint_opt nm", - /* 24 */ "cmd ::= ROLLBACK trans_opt TO savepoint_opt nm", - /* 25 */ "cmd ::= create_table create_table_args", - /* 26 */ "create_table ::= createkw temp TABLE ifnotexists nm dbnm", - /* 27 */ "createkw ::= CREATE", - /* 28 */ "ifnotexists ::=", - /* 29 */ "ifnotexists ::= IF NOT EXISTS", - /* 30 */ "temp ::= TEMP", - /* 31 */ "temp ::=", - /* 32 */ "create_table_args ::= LP columnlist conslist_opt RP", - /* 33 */ "create_table_args ::= AS select", - /* 34 */ "columnlist ::= columnlist COMMA column", - /* 35 */ "columnlist ::= column", - /* 36 */ "column ::= columnid type carglist", - /* 37 */ "columnid ::= nm", - /* 38 */ "id ::= ID", - /* 39 */ "id ::= INDEXED", - /* 40 */ "ids ::= ID|STRING", - /* 41 */ "nm ::= id", - /* 42 */ "nm ::= STRING", - /* 43 */ "nm ::= JOIN_KW", - /* 44 */ "type ::=", - /* 45 */ "type ::= typetoken", - /* 46 */ "typetoken ::= typename", - /* 47 */ "typetoken ::= typename LP signed RP", - /* 48 */ "typetoken ::= typename LP signed COMMA signed RP", - /* 49 */ "typename ::= ids", - /* 50 */ "typename ::= typename ids", - /* 51 */ "signed ::= plus_num", - /* 52 */ "signed ::= minus_num", - /* 53 */ "carglist ::= carglist carg", - /* 54 */ "carglist ::=", - /* 55 */ "carg ::= CONSTRAINT nm ccons", - /* 56 */ "carg ::= ccons", - /* 57 */ "ccons ::= DEFAULT term", - /* 58 */ "ccons ::= DEFAULT LP expr RP", - /* 59 */ "ccons ::= DEFAULT PLUS term", - /* 60 */ "ccons ::= DEFAULT MINUS term", - /* 61 */ "ccons ::= DEFAULT id", - /* 62 */ "ccons ::= NULL onconf", - /* 63 */ "ccons ::= NOT NULL onconf", - /* 64 */ "ccons ::= PRIMARY KEY sortorder onconf autoinc", - /* 65 */ "ccons ::= UNIQUE onconf", - /* 66 */ "ccons ::= CHECK LP expr RP", - /* 67 */ "ccons ::= REFERENCES nm idxlist_opt refargs", - /* 68 */ "ccons ::= defer_subclause", - /* 69 */ "ccons ::= COLLATE ids", - /* 70 */ "autoinc ::=", - /* 71 */ "autoinc ::= AUTOINCR", - /* 72 */ "refargs ::=", - /* 73 */ "refargs ::= refargs refarg", - /* 74 */ "refarg ::= MATCH nm", - /* 75 */ "refarg ::= ON DELETE refact", - /* 76 */ "refarg ::= ON UPDATE refact", - /* 77 */ "refarg ::= ON INSERT refact", - /* 78 */ "refact ::= SET NULL", - /* 79 */ "refact ::= SET DEFAULT", - /* 80 */ "refact ::= CASCADE", - /* 81 */ "refact ::= RESTRICT", - /* 82 */ "defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt", - /* 83 */ "defer_subclause ::= DEFERRABLE init_deferred_pred_opt", - /* 84 */ "init_deferred_pred_opt ::=", - /* 85 */ "init_deferred_pred_opt ::= INITIALLY DEFERRED", - /* 86 */ "init_deferred_pred_opt ::= INITIALLY IMMEDIATE", - /* 87 */ "conslist_opt ::=", - /* 88 */ "conslist_opt ::= COMMA conslist", - /* 89 */ "conslist ::= conslist COMMA tcons", - /* 90 */ "conslist ::= conslist tcons", - /* 91 */ "conslist ::= tcons", - /* 92 */ "tcons ::= CONSTRAINT nm", - /* 93 */ "tcons ::= PRIMARY KEY LP idxlist autoinc RP onconf", - /* 94 */ "tcons ::= UNIQUE LP idxlist RP onconf", - /* 95 */ "tcons ::= CHECK LP expr RP onconf", - /* 96 */ "tcons ::= FOREIGN KEY LP idxlist RP REFERENCES nm idxlist_opt refargs defer_subclause_opt", - /* 97 */ "defer_subclause_opt ::=", - /* 98 */ "defer_subclause_opt ::= defer_subclause", - /* 99 */ "onconf ::=", - /* 100 */ "onconf ::= ON CONFLICT resolvetype", - /* 101 */ "orconf ::=", - /* 102 */ "orconf ::= OR resolvetype", - /* 103 */ "resolvetype ::= raisetype", - /* 104 */ "resolvetype ::= IGNORE", - /* 105 */ "resolvetype ::= REPLACE", - /* 106 */ "cmd ::= DROP TABLE ifexists fullname", - /* 107 */ "ifexists ::= IF EXISTS", - /* 108 */ "ifexists ::=", - /* 109 */ "cmd ::= createkw temp VIEW ifnotexists nm dbnm AS select", - /* 110 */ "cmd ::= DROP VIEW ifexists fullname", - /* 111 */ "cmd ::= select", - /* 112 */ "select ::= oneselect", - /* 113 */ "select ::= select multiselect_op oneselect", - /* 114 */ "multiselect_op ::= UNION", - /* 115 */ "multiselect_op ::= UNION ALL", - /* 116 */ "multiselect_op ::= EXCEPT|INTERSECT", - /* 117 */ "oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt", - /* 118 */ "distinct ::= DISTINCT", - /* 119 */ "distinct ::= ALL", - /* 120 */ "distinct ::=", - /* 121 */ "sclp ::= selcollist COMMA", - /* 122 */ "sclp ::=", - /* 123 */ "selcollist ::= sclp expr as", - /* 124 */ "selcollist ::= sclp STAR", - /* 125 */ "selcollist ::= sclp nm DOT STAR", - /* 126 */ "as ::= AS nm", - /* 127 */ "as ::= ids", - /* 128 */ "as ::=", - /* 129 */ "from ::=", - /* 130 */ "from ::= FROM seltablist", - /* 131 */ "stl_prefix ::= seltablist joinop", - /* 132 */ "stl_prefix ::=", - /* 133 */ "seltablist ::= stl_prefix nm dbnm as indexed_opt on_opt using_opt", - /* 134 */ "seltablist ::= stl_prefix LP select RP as on_opt using_opt", - /* 135 */ "seltablist ::= stl_prefix LP seltablist RP as on_opt using_opt", - /* 136 */ "dbnm ::=", - /* 137 */ "dbnm ::= DOT nm", - /* 138 */ "fullname ::= nm dbnm", - /* 139 */ "joinop ::= COMMA|JOIN", - /* 140 */ "joinop ::= JOIN_KW JOIN", - /* 141 */ "joinop ::= JOIN_KW nm JOIN", - /* 142 */ "joinop ::= JOIN_KW nm nm JOIN", - /* 143 */ "on_opt ::= ON expr", - /* 144 */ "on_opt ::=", - /* 145 */ "indexed_opt ::=", - /* 146 */ "indexed_opt ::= INDEXED BY nm", - /* 147 */ "indexed_opt ::= NOT INDEXED", - /* 148 */ "using_opt ::= USING LP inscollist RP", - /* 149 */ "using_opt ::=", - /* 150 */ "orderby_opt ::=", - /* 151 */ "orderby_opt ::= ORDER BY sortlist", - /* 152 */ "sortlist ::= sortlist COMMA sortitem sortorder", - /* 153 */ "sortlist ::= sortitem sortorder", - /* 154 */ "sortitem ::= expr", - /* 155 */ "sortorder ::= ASC", - /* 156 */ "sortorder ::= DESC", - /* 157 */ "sortorder ::=", - /* 158 */ "groupby_opt ::=", - /* 159 */ "groupby_opt ::= GROUP BY nexprlist", - /* 160 */ "having_opt ::=", - /* 161 */ "having_opt ::= HAVING expr", - /* 162 */ "limit_opt ::=", - /* 163 */ "limit_opt ::= LIMIT expr", - /* 164 */ "limit_opt ::= LIMIT expr OFFSET expr", - /* 165 */ "limit_opt ::= LIMIT expr COMMA expr", - /* 166 */ "cmd ::= DELETE FROM fullname indexed_opt where_opt", - /* 167 */ "where_opt ::=", - /* 168 */ "where_opt ::= WHERE expr", - /* 169 */ "cmd ::= UPDATE orconf fullname indexed_opt SET setlist where_opt", - /* 170 */ "setlist ::= setlist COMMA nm EQ expr", - /* 171 */ "setlist ::= nm EQ expr", - /* 172 */ "cmd ::= insert_cmd INTO fullname inscollist_opt VALUES LP itemlist RP", - /* 173 */ "cmd ::= insert_cmd INTO fullname inscollist_opt select", - /* 174 */ "cmd ::= insert_cmd INTO fullname inscollist_opt DEFAULT VALUES", - /* 175 */ "insert_cmd ::= INSERT orconf", - /* 176 */ "insert_cmd ::= REPLACE", - /* 177 */ "itemlist ::= itemlist COMMA expr", - /* 178 */ "itemlist ::= expr", - /* 179 */ "inscollist_opt ::=", - /* 180 */ "inscollist_opt ::= LP inscollist RP", - /* 181 */ "inscollist ::= inscollist COMMA nm", - /* 182 */ "inscollist ::= nm", - /* 183 */ "expr ::= term", - /* 184 */ "expr ::= LP expr RP", - /* 185 */ "term ::= NULL", - /* 186 */ "expr ::= id", - /* 187 */ "expr ::= JOIN_KW", - /* 188 */ "expr ::= nm DOT nm", - /* 189 */ "expr ::= nm DOT nm DOT nm", - /* 190 */ "term ::= INTEGER|FLOAT|BLOB", - /* 191 */ "term ::= STRING", - /* 192 */ "expr ::= REGISTER", - /* 193 */ "expr ::= VARIABLE", - /* 194 */ "expr ::= expr COLLATE ids", - /* 195 */ "expr ::= CAST LP expr AS typetoken RP", - /* 196 */ "expr ::= ID LP distinct exprlist RP", - /* 197 */ "expr ::= ID LP STAR RP", - /* 198 */ "term ::= CTIME_KW", - /* 199 */ "expr ::= expr AND expr", - /* 200 */ "expr ::= expr OR expr", - /* 201 */ "expr ::= expr LT|GT|GE|LE expr", - /* 202 */ "expr ::= expr EQ|NE expr", - /* 203 */ "expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr", - /* 204 */ "expr ::= expr PLUS|MINUS expr", - /* 205 */ "expr ::= expr STAR|SLASH|REM expr", - /* 206 */ "expr ::= expr CONCAT expr", - /* 207 */ "likeop ::= LIKE_KW", - /* 208 */ "likeop ::= NOT LIKE_KW", - /* 209 */ "likeop ::= MATCH", - /* 210 */ "likeop ::= NOT MATCH", - /* 211 */ "escape ::= ESCAPE expr", - /* 212 */ "escape ::=", - /* 213 */ "expr ::= expr likeop expr escape", - /* 214 */ "expr ::= expr ISNULL|NOTNULL", - /* 215 */ "expr ::= expr IS NULL", - /* 216 */ "expr ::= expr NOT NULL", - /* 217 */ "expr ::= expr IS NOT NULL", - /* 218 */ "expr ::= NOT expr", - /* 219 */ "expr ::= BITNOT expr", - /* 220 */ "expr ::= MINUS expr", - /* 221 */ "expr ::= PLUS expr", - /* 222 */ "between_op ::= BETWEEN", - /* 223 */ "between_op ::= NOT BETWEEN", - /* 224 */ "expr ::= expr between_op expr AND expr", - /* 225 */ "in_op ::= IN", - /* 226 */ "in_op ::= NOT IN", - /* 227 */ "expr ::= expr in_op LP exprlist RP", - /* 228 */ "expr ::= LP select RP", - /* 229 */ "expr ::= expr in_op LP select RP", - /* 230 */ "expr ::= expr in_op nm dbnm", - /* 231 */ "expr ::= EXISTS LP select RP", - /* 232 */ "expr ::= CASE case_operand case_exprlist case_else END", - /* 233 */ "case_exprlist ::= case_exprlist WHEN expr THEN expr", - /* 234 */ "case_exprlist ::= WHEN expr THEN expr", - /* 235 */ "case_else ::= ELSE expr", - /* 236 */ "case_else ::=", - /* 237 */ "case_operand ::= expr", - /* 238 */ "case_operand ::=", - /* 239 */ "exprlist ::= nexprlist", - /* 240 */ "exprlist ::=", - /* 241 */ "nexprlist ::= nexprlist COMMA expr", - /* 242 */ "nexprlist ::= expr", - /* 243 */ "cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP idxlist RP", - /* 244 */ "uniqueflag ::= UNIQUE", - /* 245 */ "uniqueflag ::=", - /* 246 */ "idxlist_opt ::=", - /* 247 */ "idxlist_opt ::= LP idxlist RP", - /* 248 */ "idxlist ::= idxlist COMMA nm collate sortorder", - /* 249 */ "idxlist ::= nm collate sortorder", - /* 250 */ "collate ::=", - /* 251 */ "collate ::= COLLATE ids", - /* 252 */ "cmd ::= DROP INDEX ifexists fullname", - /* 253 */ "cmd ::= VACUUM", - /* 254 */ "cmd ::= VACUUM nm", - /* 255 */ "cmd ::= PRAGMA nm dbnm", - /* 256 */ "cmd ::= PRAGMA nm dbnm EQ nmnum", - /* 257 */ "cmd ::= PRAGMA nm dbnm LP nmnum RP", - /* 258 */ "cmd ::= PRAGMA nm dbnm EQ minus_num", - /* 259 */ "cmd ::= PRAGMA nm dbnm LP minus_num RP", - /* 260 */ "nmnum ::= plus_num", - /* 261 */ "nmnum ::= nm", - /* 262 */ "nmnum ::= ON", - /* 263 */ "nmnum ::= DELETE", - /* 264 */ "nmnum ::= DEFAULT", - /* 265 */ "plus_num ::= plus_opt number", - /* 266 */ "minus_num ::= MINUS number", - /* 267 */ "number ::= INTEGER|FLOAT", - /* 268 */ "plus_opt ::= PLUS", - /* 269 */ "plus_opt ::=", - /* 270 */ "cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END", - /* 271 */ "trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause", - /* 272 */ "trigger_time ::= BEFORE", - /* 273 */ "trigger_time ::= AFTER", - /* 274 */ "trigger_time ::= INSTEAD OF", - /* 275 */ "trigger_time ::=", - /* 276 */ "trigger_event ::= DELETE|INSERT", - /* 277 */ "trigger_event ::= UPDATE", - /* 278 */ "trigger_event ::= UPDATE OF inscollist", - /* 279 */ "foreach_clause ::=", - /* 280 */ "foreach_clause ::= FOR EACH ROW", - /* 281 */ "when_clause ::=", - /* 282 */ "when_clause ::= WHEN expr", - /* 283 */ "trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI", - /* 284 */ "trigger_cmd_list ::= trigger_cmd SEMI", - /* 285 */ "trigger_cmd ::= UPDATE orconf nm SET setlist where_opt", - /* 286 */ "trigger_cmd ::= insert_cmd INTO nm inscollist_opt VALUES LP itemlist RP", - /* 287 */ "trigger_cmd ::= insert_cmd INTO nm inscollist_opt select", - /* 288 */ "trigger_cmd ::= DELETE FROM nm where_opt", - /* 289 */ "trigger_cmd ::= select", - /* 290 */ "expr ::= RAISE LP IGNORE RP", - /* 291 */ "expr ::= RAISE LP raisetype COMMA nm RP", - /* 292 */ "raisetype ::= ROLLBACK", - /* 293 */ "raisetype ::= ABORT", - /* 294 */ "raisetype ::= FAIL", - /* 295 */ "cmd ::= DROP TRIGGER ifexists fullname", - /* 296 */ "cmd ::= ATTACH database_kw_opt expr AS expr key_opt", - /* 297 */ "cmd ::= DETACH database_kw_opt expr", - /* 298 */ "key_opt ::=", - /* 299 */ "key_opt ::= KEY expr", - /* 300 */ "database_kw_opt ::= DATABASE", - /* 301 */ "database_kw_opt ::=", - /* 302 */ "cmd ::= REINDEX", - /* 303 */ "cmd ::= REINDEX nm dbnm", - /* 304 */ "cmd ::= ANALYZE", - /* 305 */ "cmd ::= ANALYZE nm dbnm", - /* 306 */ "cmd ::= ALTER TABLE fullname RENAME TO nm", - /* 307 */ "cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt column", - /* 308 */ "add_column_fullname ::= fullname", - /* 309 */ "kwcolumn_opt ::=", - /* 310 */ "kwcolumn_opt ::= COLUMNKW", - /* 311 */ "cmd ::= create_vtab", - /* 312 */ "cmd ::= create_vtab LP vtabarglist RP", - /* 313 */ "create_vtab ::= createkw VIRTUAL TABLE nm dbnm USING nm", - /* 314 */ "vtabarglist ::= vtabarg", - /* 315 */ "vtabarglist ::= vtabarglist COMMA vtabarg", - /* 316 */ "vtabarg ::=", - /* 317 */ "vtabarg ::= vtabarg vtabargtoken", - /* 318 */ "vtabargtoken ::= ANY", - /* 319 */ "vtabargtoken ::= lp anylist RP", - /* 320 */ "lp ::= LP", - /* 321 */ "anylist ::=", - /* 322 */ "anylist ::= anylist LP anylist RP", - /* 323 */ "anylist ::= anylist ANY", -}; -#endif /* NDEBUG */ - - -#if YYSTACKDEPTH<=0 -/* -** Try to increase the size of the parser stack. -*/ -static void yyGrowStack(yyParser *p){ - int newSize; - yyStackEntry *pNew; + /* Disallow both ON and USING clauses in the same join + */ + if( pRight->pOn && pRight->pUsing ){ + sqlite3ErrorMsg(pParse, "cannot have both ON and USING " + "clauses in the same join"); + return 1; + } - newSize = p->yystksz*2 + 100; - pNew = realloc(p->yystack, newSize*sizeof(pNew[0])); - if( pNew ){ - p->yystack = pNew; - p->yystksz = newSize; -#ifndef NDEBUG - if( yyTraceFILE ){ - fprintf(yyTraceFILE,"%sStack grows to %d entries!\n", - yyTracePrompt, p->yystksz); + /* Add the ON clause to the end of the WHERE clause, connected by + ** an AND operator. + */ + if( pRight->pOn ){ + if( isOuter ) setJoinExpr(pRight->pOn, pRight->iCursor); + p->pWhere = sqlite3ExprAnd(pParse->db, p->pWhere, pRight->pOn); + pRight->pOn = 0; } -#endif - } -} -#endif -/* -** This function allocates a new parser. -** The only argument is a pointer to a function which works like -** malloc. -** -** Inputs: -** A pointer to the function used to allocate memory. -** -** Outputs: -** A pointer to a parser. This pointer is used in subsequent calls -** to sqlite3Parser and sqlite3ParserFree. -*/ -SQLITE_PRIVATE void *sqlite3ParserAlloc(void *(*mallocProc)(size_t)){ - yyParser *pParser; - pParser = (yyParser*)(*mallocProc)( (size_t)sizeof(yyParser) ); - if( pParser ){ - pParser->yyidx = -1; -#ifdef YYTRACKMAXSTACKDEPTH - pParser->yyidxMax = 0; -#endif -#if YYSTACKDEPTH<=0 - pParser->yystack = NULL; - pParser->yystksz = 0; - yyGrowStack(pParser); -#endif + /* Create extra terms on the WHERE clause for each column named + ** in the USING clause. Example: If the two tables to be joined are + ** A and B and the USING clause names X, Y, and Z, then add this + ** to the WHERE clause: A.X=B.X AND A.Y=B.Y AND A.Z=B.Z + ** Report an error if any column mentioned in the USING clause is + ** not contained in both tables to be joined. + */ + if( pRight->pUsing ){ + IdList *pList = pRight->pUsing; + for(j=0; jnId; j++){ + char *zName; /* Name of the term in the USING clause */ + int iLeft; /* Table on the left with matching column name */ + int iLeftCol; /* Column number of matching column on the left */ + int iRightCol; /* Column number of matching column on the right */ + + zName = pList->a[j].zName; + iRightCol = columnIndex(pRightTab, zName); + if( iRightCol<0 + || !tableAndColumnIndex(pSrc, i+1, zName, &iLeft, &iLeftCol) + ){ + sqlite3ErrorMsg(pParse, "cannot join using column %s - column " + "not present in both tables", zName); + return 1; + } + addWhereTerm(pParse, pSrc, iLeft, iLeftCol, i+1, iRightCol, + isOuter, &p->pWhere); + } + } } - return pParser; + return 0; } -/* The following function deletes the value associated with a -** symbol. The symbol can be either a terminal or nonterminal. -** "yymajor" is the symbol code, and "yypminor" is a pointer to -** the value. +/* +** Insert code into "v" that will push the record on the top of the +** stack into the sorter. */ -static void yy_destructor( - yyParser *yypParser, /* The parser */ - YYCODETYPE yymajor, /* Type code for object to destroy */ - YYMINORTYPE *yypminor /* The object to be destroyed */ +static void pushOntoSorter( + Parse *pParse, /* Parser context */ + ExprList *pOrderBy, /* The ORDER BY clause */ + Select *pSelect, /* The whole SELECT statement */ + int regData /* Register holding data to be sorted */ ){ - sqlite3ParserARG_FETCH; - switch( yymajor ){ - /* Here is inserted the actions which take place when a - ** terminal or non-terminal is destroyed. This can happen - ** when the symbol is popped from the stack during a - ** reduce or during error processing or when a parser is - ** being destroyed before it is finished parsing. - ** - ** Note: during a reduce, the only symbols destroyed are those - ** which appear on the RHS of the rule, but which are not used - ** inside the C code. - */ - case 160: /* select */ - case 194: /* oneselect */ -{ -sqlite3SelectDelete(pParse->db, (yypminor->yy243)); -} - break; - case 174: /* term */ - case 175: /* expr */ - case 223: /* escape */ -{ -sqlite3ExprDelete(pParse->db, (yypminor->yy190).pExpr); -} - break; - case 179: /* idxlist_opt */ - case 187: /* idxlist */ - case 197: /* selcollist */ - case 200: /* groupby_opt */ - case 202: /* orderby_opt */ - case 204: /* sclp */ - case 214: /* sortlist */ - case 216: /* nexprlist */ - case 217: /* setlist */ - case 220: /* itemlist */ - case 221: /* exprlist */ - case 227: /* case_exprlist */ -{ -sqlite3ExprListDelete(pParse->db, (yypminor->yy148)); -} - break; - case 193: /* fullname */ - case 198: /* from */ - case 206: /* seltablist */ - case 207: /* stl_prefix */ -{ -sqlite3SrcListDelete(pParse->db, (yypminor->yy185)); -} - break; - case 199: /* where_opt */ - case 201: /* having_opt */ - case 210: /* on_opt */ - case 215: /* sortitem */ - case 226: /* case_operand */ - case 228: /* case_else */ - case 239: /* when_clause */ - case 242: /* key_opt */ -{ -sqlite3ExprDelete(pParse->db, (yypminor->yy72)); -} - break; - case 211: /* using_opt */ - case 213: /* inscollist */ - case 219: /* inscollist_opt */ -{ -sqlite3IdListDelete(pParse->db, (yypminor->yy254)); -} - break; - case 235: /* trigger_cmd_list */ - case 240: /* trigger_cmd */ -{ -sqlite3DeleteTriggerStep(pParse->db, (yypminor->yy145)); -} - break; - case 237: /* trigger_event */ -{ -sqlite3IdListDelete(pParse->db, (yypminor->yy332).b); -} - break; - default: break; /* If no destructor action specified: do nothing */ + Vdbe *v = pParse->pVdbe; + int nExpr = pOrderBy->nExpr; + int regBase = sqlite3GetTempRange(pParse, nExpr+2); + int regRecord = sqlite3GetTempReg(pParse); + int op; + sqlite3ExprCacheClear(pParse); + sqlite3ExprCodeExprList(pParse, pOrderBy, regBase, 0); + sqlite3VdbeAddOp2(v, OP_Sequence, pOrderBy->iECursor, regBase+nExpr); + sqlite3ExprCodeMove(pParse, regData, regBase+nExpr+1, 1); + sqlite3VdbeAddOp3(v, OP_MakeRecord, regBase, nExpr + 2, regRecord); + if( pSelect->selFlags & SF_UseSorter ){ + op = OP_SorterInsert; + }else{ + op = OP_IdxInsert; + } + sqlite3VdbeAddOp2(v, op, pOrderBy->iECursor, regRecord); + sqlite3ReleaseTempReg(pParse, regRecord); + sqlite3ReleaseTempRange(pParse, regBase, nExpr+2); + if( pSelect->iLimit ){ + int addr1, addr2; + int iLimit; + if( pSelect->iOffset ){ + iLimit = pSelect->iOffset+1; + }else{ + iLimit = pSelect->iLimit; + } + addr1 = sqlite3VdbeAddOp1(v, OP_IfZero, iLimit); + sqlite3VdbeAddOp2(v, OP_AddImm, iLimit, -1); + addr2 = sqlite3VdbeAddOp0(v, OP_Goto); + sqlite3VdbeJumpHere(v, addr1); + sqlite3VdbeAddOp1(v, OP_Last, pOrderBy->iECursor); + sqlite3VdbeAddOp1(v, OP_Delete, pOrderBy->iECursor); + sqlite3VdbeJumpHere(v, addr2); } } /* -** Pop the parser's stack once. -** -** If there is a destructor routine associated with the token which -** is popped from the stack, then call it. -** -** Return the major token number for the symbol popped. +** Add code to implement the OFFSET */ -static int yy_pop_parser_stack(yyParser *pParser){ - YYCODETYPE yymajor; - yyStackEntry *yytos = &pParser->yystack[pParser->yyidx]; - - if( pParser->yyidx<0 ) return 0; -#ifndef NDEBUG - if( yyTraceFILE && pParser->yyidx>=0 ){ - fprintf(yyTraceFILE,"%sPopping %s\n", - yyTracePrompt, - yyTokenName[yytos->major]); +static void codeOffset( + Vdbe *v, /* Generate code into this VM */ + Select *p, /* The SELECT statement being coded */ + int iContinue /* Jump here to skip the current record */ +){ + if( p->iOffset && iContinue!=0 ){ + int addr; + sqlite3VdbeAddOp2(v, OP_AddImm, p->iOffset, -1); + addr = sqlite3VdbeAddOp1(v, OP_IfNeg, p->iOffset); + sqlite3VdbeAddOp2(v, OP_Goto, 0, iContinue); + VdbeComment((v, "skip OFFSET records")); + sqlite3VdbeJumpHere(v, addr); } -#endif - yymajor = yytos->major; - yy_destructor(pParser, yymajor, &yytos->minor); - pParser->yyidx--; - return yymajor; } -/* -** Deallocate and destroy a parser. Destructors are all called for -** all stack elements before shutting the parser down. +/* +** Add code that will check to make sure the N registers starting at iMem +** form a distinct entry. iTab is a sorting index that holds previously +** seen combinations of the N values. A new entry is made in iTab +** if the current N values are new. ** -** Inputs: -**
      -**
    • A pointer to the parser. This should be a pointer -** obtained from sqlite3ParserAlloc. -**
    • A pointer to a function used to reclaim memory obtained -** from malloc. -**
    +** A jump to addrRepeat is made and the N+1 values are popped from the +** stack if the top N elements are not distinct. */ -SQLITE_PRIVATE void sqlite3ParserFree( - void *p, /* The parser to be deleted */ - void (*freeProc)(void*) /* Function used to reclaim memory */ +static void codeDistinct( + Parse *pParse, /* Parsing and code generating context */ + int iTab, /* A sorting index used to test for distinctness */ + int addrRepeat, /* Jump to here if not distinct */ + int N, /* Number of elements */ + int iMem /* First element */ ){ - yyParser *pParser = (yyParser*)p; - if( pParser==0 ) return; - while( pParser->yyidx>=0 ) yy_pop_parser_stack(pParser); -#if YYSTACKDEPTH<=0 - free(pParser->yystack); -#endif - (*freeProc)((void*)pParser); -} + Vdbe *v; + int r1; -/* -** Return the peak depth of the stack for a parser. -*/ -#ifdef YYTRACKMAXSTACKDEPTH -SQLITE_PRIVATE int sqlite3ParserStackPeak(void *p){ - yyParser *pParser = (yyParser*)p; - return pParser->yyidxMax; + v = pParse->pVdbe; + r1 = sqlite3GetTempReg(pParse); + sqlite3VdbeAddOp4Int(v, OP_Found, iTab, addrRepeat, iMem, N); + sqlite3VdbeAddOp3(v, OP_MakeRecord, iMem, N, r1); + sqlite3VdbeAddOp2(v, OP_IdxInsert, iTab, r1); + sqlite3ReleaseTempReg(pParse, r1); } -#endif +#ifndef SQLITE_OMIT_SUBQUERY /* -** Find the appropriate action for a parser given the terminal -** look-ahead token iLookAhead. -** -** If the look-ahead token is YYNOCODE, then check to see if the action is -** independent of the look-ahead. If it is, return the action, otherwise -** return YY_NO_ACTION. +** Generate an error message when a SELECT is used within a subexpression +** (example: "a IN (SELECT * FROM table)") but it has more than 1 result +** column. We do this in a subroutine because the error used to occur +** in multiple places. (The error only occurs in one place now, but we +** retain the subroutine to minimize code disruption.) */ -static int yy_find_shift_action( - yyParser *pParser, /* The parser */ - YYCODETYPE iLookAhead /* The look-ahead token */ +static int checkForMultiColumnSelectError( + Parse *pParse, /* Parse context. */ + SelectDest *pDest, /* Destination of SELECT results */ + int nExpr /* Number of result columns returned by SELECT */ ){ - int i; - int stateno = pParser->yystack[pParser->yyidx].stateno; - - if( stateno>YY_SHIFT_MAX || (i = yy_shift_ofst[stateno])==YY_SHIFT_USE_DFLT ){ - return yy_default[stateno]; - } - assert( iLookAhead!=YYNOCODE ); - i += iLookAhead; - if( i<0 || i>=YY_SZ_ACTTAB || yy_lookahead[i]!=iLookAhead ){ - if( iLookAhead>0 ){ -#ifdef YYFALLBACK - YYCODETYPE iFallback; /* Fallback token */ - if( iLookAhead %s\n", - yyTracePrompt, yyTokenName[iLookAhead], yyTokenName[iFallback]); - } -#endif - return yy_find_shift_action(pParser, iFallback); - } -#endif -#ifdef YYWILDCARD - { - int j = i - iLookAhead + YYWILDCARD; - if( j>=0 && j %s\n", - yyTracePrompt, yyTokenName[iLookAhead], yyTokenName[YYWILDCARD]); - } -#endif /* NDEBUG */ - return yy_action[j]; - } - } -#endif /* YYWILDCARD */ - } - return yy_default[stateno]; + int eDest = pDest->eDest; + if( nExpr>1 && (eDest==SRT_Mem || eDest==SRT_Set) ){ + sqlite3ErrorMsg(pParse, "only a single result allowed for " + "a SELECT that is part of an expression"); + return 1; }else{ - return yy_action[i]; + return 0; } } +#endif /* -** Find the appropriate action for a parser given the non-terminal -** look-ahead token iLookAhead. +** This routine generates the code for the inside of the inner loop +** of a SELECT. ** -** If the look-ahead token is YYNOCODE, then check to see if the action is -** independent of the look-ahead. If it is, return the action, otherwise -** return YY_NO_ACTION. +** If srcTab and nColumn are both zero, then the pEList expressions +** are evaluated in order to get the data for this row. If nColumn>0 +** then data is pulled from srcTab and pEList is used only to get the +** datatypes for each column. */ -static int yy_find_reduce_action( - int stateno, /* Current state number */ - YYCODETYPE iLookAhead /* The look-ahead token */ +static void selectInnerLoop( + Parse *pParse, /* The parser context */ + Select *p, /* The complete select statement being coded */ + ExprList *pEList, /* List of values being extracted */ + int srcTab, /* Pull data from this table */ + int nColumn, /* Number of columns in the source table */ + ExprList *pOrderBy, /* If not NULL, sort results using this key */ + int distinct, /* If >=0, make sure results are distinct */ + SelectDest *pDest, /* How to dispose of the results */ + int iContinue, /* Jump here to continue with next row */ + int iBreak /* Jump here to break out of the inner loop */ ){ + Vdbe *v = pParse->pVdbe; int i; -#ifdef YYERRORSYMBOL - if( stateno>YY_REDUCE_MAX ){ - return yy_default[stateno]; + int hasDistinct; /* True if the DISTINCT keyword is present */ + int regResult; /* Start of memory holding result set */ + int eDest = pDest->eDest; /* How to dispose of results */ + int iParm = pDest->iParm; /* First argument to disposal method */ + int nResultCol; /* Number of result columns */ + + assert( v ); + if( NEVER(v==0) ) return; + assert( pEList!=0 ); + hasDistinct = distinct>=0; + if( pOrderBy==0 && !hasDistinct ){ + codeOffset(v, p, iContinue); } -#else - assert( stateno<=YY_REDUCE_MAX ); -#endif - i = yy_reduce_ofst[stateno]; - assert( i!=YY_REDUCE_USE_DFLT ); - assert( iLookAhead!=YYNOCODE ); - i += iLookAhead; -#ifdef YYERRORSYMBOL - if( i<0 || i>=YY_SZ_ACTTAB || yy_lookahead[i]!=iLookAhead ){ - return yy_default[stateno]; + + /* Pull the requested columns. + */ + if( nColumn>0 ){ + nResultCol = nColumn; + }else{ + nResultCol = pEList->nExpr; } -#else - assert( i>=0 && iiMem==0 ){ + pDest->iMem = pParse->nMem+1; + pDest->nMem = nResultCol; + pParse->nMem += nResultCol; + }else{ + assert( pDest->nMem==nResultCol ); + } + regResult = pDest->iMem; + if( nColumn>0 ){ + for(i=0; iyyidx--; -#ifndef NDEBUG - if( yyTraceFILE ){ - fprintf(yyTraceFILE,"%sStack Overflow!\n",yyTracePrompt); - } + /* If the DISTINCT keyword was present on the SELECT statement + ** and this row has been seen before, then do not make this row + ** part of the result. + */ + if( hasDistinct ){ + assert( pEList!=0 ); + assert( pEList->nExpr==nColumn ); + codeDistinct(pParse, distinct, iContinue, nColumn, regResult); + if( pOrderBy==0 ){ + codeOffset(v, p, iContinue); + } + } + + switch( eDest ){ + /* In this mode, write each query result to the key of the temporary + ** table iParm. + */ +#ifndef SQLITE_OMIT_COMPOUND_SELECT + case SRT_Union: { + int r1; + r1 = sqlite3GetTempReg(pParse); + sqlite3VdbeAddOp3(v, OP_MakeRecord, regResult, nColumn, r1); + sqlite3VdbeAddOp2(v, OP_IdxInsert, iParm, r1); + sqlite3ReleaseTempReg(pParse, r1); + break; + } + + /* Construct a record from the query result, but instead of + ** saving that record, use it as a key to delete elements from + ** the temporary table iParm. + */ + case SRT_Except: { + sqlite3VdbeAddOp3(v, OP_IdxDelete, iParm, regResult, nColumn); + break; + } #endif - while( yypParser->yyidx>=0 ) yy_pop_parser_stack(yypParser); - /* Here code is inserted which will execute if the parser - ** stack every overflows */ - UNUSED_PARAMETER(yypMinor); /* Silence some compiler warnings */ - sqlite3ErrorMsg(pParse, "parser stack overflow"); - pParse->parseError = 1; - sqlite3ParserARG_STORE; /* Suppress warning about unused %extra_argument var */ + /* Store the result as data using a unique key. + */ + case SRT_Table: + case SRT_EphemTab: { + int r1 = sqlite3GetTempReg(pParse); + testcase( eDest==SRT_Table ); + testcase( eDest==SRT_EphemTab ); + sqlite3VdbeAddOp3(v, OP_MakeRecord, regResult, nColumn, r1); + if( pOrderBy ){ + pushOntoSorter(pParse, pOrderBy, p, r1); + }else{ + int r2 = sqlite3GetTempReg(pParse); + sqlite3VdbeAddOp2(v, OP_NewRowid, iParm, r2); + sqlite3VdbeAddOp3(v, OP_Insert, iParm, r1, r2); + sqlite3VdbeChangeP5(v, OPFLAG_APPEND); + sqlite3ReleaseTempReg(pParse, r2); + } + sqlite3ReleaseTempReg(pParse, r1); + break; + } + +#ifndef SQLITE_OMIT_SUBQUERY + /* If we are creating a set for an "expr IN (SELECT ...)" construct, + ** then there should be a single item on the stack. Write this + ** item into the set table with bogus data. + */ + case SRT_Set: { + assert( nColumn==1 ); + p->affinity = sqlite3CompareAffinity(pEList->a[0].pExpr, pDest->affinity); + if( pOrderBy ){ + /* At first glance you would think we could optimize out the + ** ORDER BY in this case since the order of entries in the set + ** does not matter. But there might be a LIMIT clause, in which + ** case the order does matter */ + pushOntoSorter(pParse, pOrderBy, p, regResult); + }else{ + int r1 = sqlite3GetTempReg(pParse); + sqlite3VdbeAddOp4(v, OP_MakeRecord, regResult, 1, r1, &p->affinity, 1); + sqlite3ExprCacheAffinityChange(pParse, regResult, 1); + sqlite3VdbeAddOp2(v, OP_IdxInsert, iParm, r1); + sqlite3ReleaseTempReg(pParse, r1); + } + break; + } + + /* If any row exist in the result set, record that fact and abort. + */ + case SRT_Exists: { + sqlite3VdbeAddOp2(v, OP_Integer, 1, iParm); + /* The LIMIT clause will terminate the loop for us */ + break; + } + + /* If this is a scalar select that is part of an expression, then + ** store the results in the appropriate memory cell and break out + ** of the scan loop. + */ + case SRT_Mem: { + assert( nColumn==1 ); + if( pOrderBy ){ + pushOntoSorter(pParse, pOrderBy, p, regResult); + }else{ + sqlite3ExprCodeMove(pParse, regResult, iParm, 1); + /* The LIMIT clause will jump out of the loop for us */ + } + break; + } +#endif /* #ifndef SQLITE_OMIT_SUBQUERY */ + + /* Send the data to the callback function or to a subroutine. In the + ** case of a subroutine, the subroutine itself is responsible for + ** popping the data from the stack. + */ + case SRT_Coroutine: + case SRT_Output: { + testcase( eDest==SRT_Coroutine ); + testcase( eDest==SRT_Output ); + if( pOrderBy ){ + int r1 = sqlite3GetTempReg(pParse); + sqlite3VdbeAddOp3(v, OP_MakeRecord, regResult, nColumn, r1); + pushOntoSorter(pParse, pOrderBy, p, r1); + sqlite3ReleaseTempReg(pParse, r1); + }else if( eDest==SRT_Coroutine ){ + sqlite3VdbeAddOp1(v, OP_Yield, pDest->iParm); + }else{ + sqlite3VdbeAddOp2(v, OP_ResultRow, regResult, nColumn); + sqlite3ExprCacheAffinityChange(pParse, regResult, nColumn); + } + break; + } + +#if !defined(SQLITE_OMIT_TRIGGER) + /* Discard the results. This is used for SELECT statements inside + ** the body of a TRIGGER. The purpose of such selects is to call + ** user-defined functions that have side effects. We do not care + ** about the actual results of the select. + */ + default: { + assert( eDest==SRT_Discard ); + break; + } +#endif + } + + /* Jump to the end of the loop if the LIMIT is reached. Except, if + ** there is a sorter, in which case the sorter has already limited + ** the output for us. + */ + if( pOrderBy==0 && p->iLimit ){ + sqlite3VdbeAddOp3(v, OP_IfZero, p->iLimit, iBreak, -1); + } } /* -** Perform a shift action. +** Given an expression list, generate a KeyInfo structure that records +** the collating sequence for each expression in that expression list. +** +** If the ExprList is an ORDER BY or GROUP BY clause then the resulting +** KeyInfo structure is appropriate for initializing a virtual index to +** implement that clause. If the ExprList is the result set of a SELECT +** then the KeyInfo structure is appropriate for initializing a virtual +** index to implement a DISTINCT test. +** +** Space to hold the KeyInfo structure is obtain from malloc. The calling +** function is responsible for seeing that this structure is eventually +** freed. Add the KeyInfo structure to the P4 field of an opcode using +** P4_KEYINFO_HANDOFF is the usual way of dealing with this. */ -static void yy_shift( - yyParser *yypParser, /* The parser to be shifted */ - int yyNewState, /* The new state to shift in */ - int yyMajor, /* The major token to shift in */ - YYMINORTYPE *yypMinor /* Pointer to the minor token to shift in */ -){ - yyStackEntry *yytos; - yypParser->yyidx++; -#ifdef YYTRACKMAXSTACKDEPTH - if( yypParser->yyidx>yypParser->yyidxMax ){ - yypParser->yyidxMax = yypParser->yyidx; - } -#endif -#if YYSTACKDEPTH>0 - if( yypParser->yyidx>=YYSTACKDEPTH ){ - yyStackOverflow(yypParser, yypMinor); - return; - } -#else - if( yypParser->yyidx>=yypParser->yystksz ){ - yyGrowStack(yypParser); - if( yypParser->yyidx>=yypParser->yystksz ){ - yyStackOverflow(yypParser, yypMinor); - return; +static KeyInfo *keyInfoFromExprList(Parse *pParse, ExprList *pList){ + sqlite3 *db = pParse->db; + int nExpr; + KeyInfo *pInfo; + struct ExprList_item *pItem; + int i; + + nExpr = pList->nExpr; + pInfo = sqlite3DbMallocZero(db, sizeof(*pInfo) + nExpr*(sizeof(CollSeq*)+1) ); + if( pInfo ){ + pInfo->aSortOrder = (u8*)&pInfo->aColl[nExpr]; + pInfo->nField = (u16)nExpr; + pInfo->enc = ENC(db); + pInfo->db = db; + for(i=0, pItem=pList->a; ipExpr); + if( !pColl ){ + pColl = db->pDfltColl; + } + pInfo->aColl[i] = pColl; + pInfo->aSortOrder[i] = pItem->sortOrder; } } -#endif - yytos = &yypParser->yystack[yypParser->yyidx]; - yytos->stateno = (YYACTIONTYPE)yyNewState; - yytos->major = (YYCODETYPE)yyMajor; - yytos->minor = *yypMinor; -#ifndef NDEBUG - if( yyTraceFILE && yypParser->yyidx>0 ){ - int i; - fprintf(yyTraceFILE,"%sShift %d\n",yyTracePrompt,yyNewState); - fprintf(yyTraceFILE,"%sStack:",yyTracePrompt); - for(i=1; i<=yypParser->yyidx; i++) - fprintf(yyTraceFILE," %s",yyTokenName[yypParser->yystack[i].major]); - fprintf(yyTraceFILE,"\n"); + return pInfo; +} + +#ifndef SQLITE_OMIT_COMPOUND_SELECT +/* +** Name of the connection operator, used for error messages. +*/ +static const char *selectOpName(int id){ + char *z; + switch( id ){ + case TK_ALL: z = "UNION ALL"; break; + case TK_INTERSECT: z = "INTERSECT"; break; + case TK_EXCEPT: z = "EXCEPT"; break; + default: z = "UNION"; break; } -#endif + return z; } +#endif /* SQLITE_OMIT_COMPOUND_SELECT */ -/* The following table contains information about every rule that -** is used during the reduce. +#ifndef SQLITE_OMIT_EXPLAIN +/* +** Unless an "EXPLAIN QUERY PLAN" command is being processed, this function +** is a no-op. Otherwise, it adds a single row of output to the EQP result, +** where the caption is of the form: +** +** "USE TEMP B-TREE FOR xxx" +** +** where xxx is one of "DISTINCT", "ORDER BY" or "GROUP BY". Exactly which +** is determined by the zUsage argument. */ -static const struct { - YYCODETYPE lhs; /* Symbol on the left-hand side of the rule */ - unsigned char nrhs; /* Number of right-hand side symbols in the rule */ -} yyRuleInfo[] = { - { 142, 1 }, - { 143, 2 }, - { 143, 1 }, - { 144, 1 }, - { 144, 3 }, - { 145, 0 }, - { 145, 1 }, - { 145, 3 }, - { 146, 1 }, - { 147, 3 }, - { 149, 0 }, - { 149, 1 }, - { 149, 2 }, - { 148, 0 }, - { 148, 1 }, - { 148, 1 }, - { 148, 1 }, - { 147, 2 }, - { 147, 2 }, - { 147, 2 }, - { 151, 1 }, - { 151, 0 }, - { 147, 2 }, - { 147, 3 }, - { 147, 5 }, - { 147, 2 }, - { 152, 6 }, - { 154, 1 }, - { 156, 0 }, - { 156, 3 }, - { 155, 1 }, - { 155, 0 }, - { 153, 4 }, - { 153, 2 }, - { 158, 3 }, - { 158, 1 }, - { 161, 3 }, - { 162, 1 }, - { 165, 1 }, - { 165, 1 }, - { 166, 1 }, - { 150, 1 }, - { 150, 1 }, - { 150, 1 }, - { 163, 0 }, - { 163, 1 }, - { 167, 1 }, - { 167, 4 }, - { 167, 6 }, - { 168, 1 }, - { 168, 2 }, - { 169, 1 }, - { 169, 1 }, - { 164, 2 }, - { 164, 0 }, - { 172, 3 }, - { 172, 1 }, - { 173, 2 }, - { 173, 4 }, - { 173, 3 }, - { 173, 3 }, - { 173, 2 }, - { 173, 2 }, - { 173, 3 }, - { 173, 5 }, - { 173, 2 }, - { 173, 4 }, - { 173, 4 }, - { 173, 1 }, - { 173, 2 }, - { 178, 0 }, - { 178, 1 }, - { 180, 0 }, - { 180, 2 }, - { 182, 2 }, - { 182, 3 }, - { 182, 3 }, - { 182, 3 }, - { 183, 2 }, - { 183, 2 }, - { 183, 1 }, - { 183, 1 }, - { 181, 3 }, - { 181, 2 }, - { 184, 0 }, - { 184, 2 }, - { 184, 2 }, - { 159, 0 }, - { 159, 2 }, - { 185, 3 }, - { 185, 2 }, - { 185, 1 }, - { 186, 2 }, - { 186, 7 }, - { 186, 5 }, - { 186, 5 }, - { 186, 10 }, - { 188, 0 }, - { 188, 1 }, - { 176, 0 }, - { 176, 3 }, - { 189, 0 }, - { 189, 2 }, - { 190, 1 }, - { 190, 1 }, - { 190, 1 }, - { 147, 4 }, - { 192, 2 }, - { 192, 0 }, - { 147, 8 }, - { 147, 4 }, - { 147, 1 }, - { 160, 1 }, - { 160, 3 }, - { 195, 1 }, - { 195, 2 }, - { 195, 1 }, - { 194, 9 }, - { 196, 1 }, - { 196, 1 }, - { 196, 0 }, - { 204, 2 }, - { 204, 0 }, - { 197, 3 }, - { 197, 2 }, - { 197, 4 }, - { 205, 2 }, - { 205, 1 }, - { 205, 0 }, - { 198, 0 }, - { 198, 2 }, - { 207, 2 }, - { 207, 0 }, - { 206, 7 }, - { 206, 7 }, - { 206, 7 }, - { 157, 0 }, - { 157, 2 }, - { 193, 2 }, - { 208, 1 }, - { 208, 2 }, - { 208, 3 }, - { 208, 4 }, - { 210, 2 }, - { 210, 0 }, - { 209, 0 }, - { 209, 3 }, - { 209, 2 }, - { 211, 4 }, - { 211, 0 }, - { 202, 0 }, - { 202, 3 }, - { 214, 4 }, - { 214, 2 }, - { 215, 1 }, - { 177, 1 }, - { 177, 1 }, - { 177, 0 }, - { 200, 0 }, - { 200, 3 }, - { 201, 0 }, - { 201, 2 }, - { 203, 0 }, - { 203, 2 }, - { 203, 4 }, - { 203, 4 }, - { 147, 5 }, - { 199, 0 }, - { 199, 2 }, - { 147, 7 }, - { 217, 5 }, - { 217, 3 }, - { 147, 8 }, - { 147, 5 }, - { 147, 6 }, - { 218, 2 }, - { 218, 1 }, - { 220, 3 }, - { 220, 1 }, - { 219, 0 }, - { 219, 3 }, - { 213, 3 }, - { 213, 1 }, - { 175, 1 }, - { 175, 3 }, - { 174, 1 }, - { 175, 1 }, - { 175, 1 }, - { 175, 3 }, - { 175, 5 }, - { 174, 1 }, - { 174, 1 }, - { 175, 1 }, - { 175, 1 }, - { 175, 3 }, - { 175, 6 }, - { 175, 5 }, - { 175, 4 }, - { 174, 1 }, - { 175, 3 }, - { 175, 3 }, - { 175, 3 }, - { 175, 3 }, - { 175, 3 }, - { 175, 3 }, - { 175, 3 }, - { 175, 3 }, - { 222, 1 }, - { 222, 2 }, - { 222, 1 }, - { 222, 2 }, - { 223, 2 }, - { 223, 0 }, - { 175, 4 }, - { 175, 2 }, - { 175, 3 }, - { 175, 3 }, - { 175, 4 }, - { 175, 2 }, - { 175, 2 }, - { 175, 2 }, - { 175, 2 }, - { 224, 1 }, - { 224, 2 }, - { 175, 5 }, - { 225, 1 }, - { 225, 2 }, - { 175, 5 }, - { 175, 3 }, - { 175, 5 }, - { 175, 4 }, - { 175, 4 }, - { 175, 5 }, - { 227, 5 }, - { 227, 4 }, - { 228, 2 }, - { 228, 0 }, - { 226, 1 }, - { 226, 0 }, - { 221, 1 }, - { 221, 0 }, - { 216, 3 }, - { 216, 1 }, - { 147, 11 }, - { 229, 1 }, - { 229, 0 }, - { 179, 0 }, - { 179, 3 }, - { 187, 5 }, - { 187, 3 }, - { 230, 0 }, - { 230, 2 }, - { 147, 4 }, - { 147, 1 }, - { 147, 2 }, - { 147, 3 }, - { 147, 5 }, - { 147, 6 }, - { 147, 5 }, - { 147, 6 }, - { 231, 1 }, - { 231, 1 }, - { 231, 1 }, - { 231, 1 }, - { 231, 1 }, - { 170, 2 }, - { 171, 2 }, - { 233, 1 }, - { 232, 1 }, - { 232, 0 }, - { 147, 5 }, - { 234, 11 }, - { 236, 1 }, - { 236, 1 }, - { 236, 2 }, - { 236, 0 }, - { 237, 1 }, - { 237, 1 }, - { 237, 3 }, - { 238, 0 }, - { 238, 3 }, - { 239, 0 }, - { 239, 2 }, - { 235, 3 }, - { 235, 2 }, - { 240, 6 }, - { 240, 8 }, - { 240, 5 }, - { 240, 4 }, - { 240, 1 }, - { 175, 4 }, - { 175, 6 }, - { 191, 1 }, - { 191, 1 }, - { 191, 1 }, - { 147, 4 }, - { 147, 6 }, - { 147, 3 }, - { 242, 0 }, - { 242, 2 }, - { 241, 1 }, - { 241, 0 }, - { 147, 1 }, - { 147, 3 }, - { 147, 1 }, - { 147, 3 }, - { 147, 6 }, - { 147, 6 }, - { 243, 1 }, - { 244, 0 }, - { 244, 1 }, - { 147, 1 }, - { 147, 4 }, - { 245, 7 }, - { 246, 1 }, - { 246, 3 }, - { 247, 0 }, - { 247, 2 }, - { 248, 1 }, - { 248, 3 }, - { 249, 1 }, - { 250, 0 }, - { 250, 4 }, - { 250, 2 }, -}; +static void explainTempTable(Parse *pParse, const char *zUsage){ + if( pParse->explain==2 ){ + Vdbe *v = pParse->pVdbe; + char *zMsg = sqlite3MPrintf(pParse->db, "USE TEMP B-TREE FOR %s", zUsage); + sqlite3VdbeAddOp4(v, OP_Explain, pParse->iSelectId, 0, 0, zMsg, P4_DYNAMIC); + } +} -static void yy_accept(yyParser*); /* Forward Declaration */ +/* +** Assign expression b to lvalue a. A second, no-op, version of this macro +** is provided when SQLITE_OMIT_EXPLAIN is defined. This allows the code +** in sqlite3Select() to assign values to structure member variables that +** only exist if SQLITE_OMIT_EXPLAIN is not defined without polluting the +** code with #ifndef directives. +*/ +# define explainSetInteger(a, b) a = b + +#else +/* No-op versions of the explainXXX() functions and macros. */ +# define explainTempTable(y,z) +# define explainSetInteger(y,z) +#endif +#if !defined(SQLITE_OMIT_EXPLAIN) && !defined(SQLITE_OMIT_COMPOUND_SELECT) /* -** Perform a reduce action and the shift that must immediately -** follow the reduce. +** Unless an "EXPLAIN QUERY PLAN" command is being processed, this function +** is a no-op. Otherwise, it adds a single row of output to the EQP result, +** where the caption is of one of the two forms: +** +** "COMPOSITE SUBQUERIES iSub1 and iSub2 (op)" +** "COMPOSITE SUBQUERIES iSub1 and iSub2 USING TEMP B-TREE (op)" +** +** where iSub1 and iSub2 are the integers passed as the corresponding +** function parameters, and op is the text representation of the parameter +** of the same name. The parameter "op" must be one of TK_UNION, TK_EXCEPT, +** TK_INTERSECT or TK_ALL. The first form is used if argument bUseTmp is +** false, or the second form if it is true. */ -static void yy_reduce( - yyParser *yypParser, /* The parser */ - int yyruleno /* Number of the rule by which to reduce */ +static void explainComposite( + Parse *pParse, /* Parse context */ + int op, /* One of TK_UNION, TK_EXCEPT etc. */ + int iSub1, /* Subquery id 1 */ + int iSub2, /* Subquery id 2 */ + int bUseTmp /* True if a temp table was used */ ){ - int yygoto; /* The next state */ - int yyact; /* The next action */ - YYMINORTYPE yygotominor; /* The LHS of the rule reduced */ - yyStackEntry *yymsp; /* The top of the parser's stack */ - int yysize; /* Amount to pop the stack */ - sqlite3ParserARG_FETCH; - yymsp = &yypParser->yystack[yypParser->yyidx]; -#ifndef NDEBUG - if( yyTraceFILE && yyruleno>=0 - && yyruleno<(int)(sizeof(yyRuleName)/sizeof(yyRuleName[0])) ){ - fprintf(yyTraceFILE, "%sReduce [%s].\n", yyTracePrompt, - yyRuleName[yyruleno]); + assert( op==TK_UNION || op==TK_EXCEPT || op==TK_INTERSECT || op==TK_ALL ); + if( pParse->explain==2 ){ + Vdbe *v = pParse->pVdbe; + char *zMsg = sqlite3MPrintf( + pParse->db, "COMPOUND SUBQUERIES %d AND %d %s(%s)", iSub1, iSub2, + bUseTmp?"USING TEMP B-TREE ":"", selectOpName(op) + ); + sqlite3VdbeAddOp4(v, OP_Explain, pParse->iSelectId, 0, 0, zMsg, P4_DYNAMIC); } -#endif /* NDEBUG */ - - /* Silence complaints from purify about yygotominor being uninitialized - ** in some cases when it is copied into the stack after the following - ** switch. yygotominor is uninitialized when a rule reduces that does - ** not set the value of its left-hand side nonterminal. Leaving the - ** value of the nonterminal uninitialized is utterly harmless as long - ** as the value is never used. So really the only thing this code - ** accomplishes is to quieten purify. - ** - ** 2007-01-16: The wireshark project (www.wireshark.org) reports that - ** without this code, their parser segfaults. I'm not sure what there - ** parser is doing to make this happen. This is the second bug report - ** from wireshark this week. Clearly they are stressing Lemon in ways - ** that it has not been previously stressed... (SQLite ticket #2172) - */ - /*memset(&yygotominor, 0, sizeof(yygotominor));*/ - yygotominor = yyzerominor; +} +#else +/* No-op versions of the explainXXX() functions and macros. */ +# define explainComposite(v,w,x,y,z) +#endif +/* +** If the inner loop was generated using a non-null pOrderBy argument, +** then the results were placed in a sorter. After the loop is terminated +** we need to run the sorter and output the results. The following +** routine generates the code needed to do that. +*/ +static void generateSortTail( + Parse *pParse, /* Parsing context */ + Select *p, /* The SELECT statement */ + Vdbe *v, /* Generate code into this VDBE */ + int nColumn, /* Number of columns of data */ + SelectDest *pDest /* Write the sorted results here */ +){ + int addrBreak = sqlite3VdbeMakeLabel(v); /* Jump here to exit loop */ + int addrContinue = sqlite3VdbeMakeLabel(v); /* Jump here for next cycle */ + int addr; + int iTab; + int pseudoTab = 0; + ExprList *pOrderBy = p->pOrderBy; - switch( yyruleno ){ - /* Beginning here are the reduction cases. A typical example - ** follows: - ** case 0: - ** #line - ** { ... } // User supplied code - ** #line - ** break; - */ - case 5: /* explain ::= */ -{ sqlite3BeginParse(pParse, 0); } - break; - case 6: /* explain ::= EXPLAIN */ -{ sqlite3BeginParse(pParse, 1); } - break; - case 7: /* explain ::= EXPLAIN QUERY PLAN */ -{ sqlite3BeginParse(pParse, 2); } - break; - case 8: /* cmdx ::= cmd */ -{ sqlite3FinishCoding(pParse); } - break; - case 9: /* cmd ::= BEGIN transtype trans_opt */ -{sqlite3BeginTransaction(pParse, yymsp[-1].minor.yy194);} - break; - case 13: /* transtype ::= */ -{yygotominor.yy194 = TK_DEFERRED;} - break; - case 14: /* transtype ::= DEFERRED */ - case 15: /* transtype ::= IMMEDIATE */ yytestcase(yyruleno==15); - case 16: /* transtype ::= EXCLUSIVE */ yytestcase(yyruleno==16); - case 114: /* multiselect_op ::= UNION */ yytestcase(yyruleno==114); - case 116: /* multiselect_op ::= EXCEPT|INTERSECT */ yytestcase(yyruleno==116); -{yygotominor.yy194 = yymsp[0].major;} - break; - case 17: /* cmd ::= COMMIT trans_opt */ - case 18: /* cmd ::= END trans_opt */ yytestcase(yyruleno==18); -{sqlite3CommitTransaction(pParse);} - break; - case 19: /* cmd ::= ROLLBACK trans_opt */ -{sqlite3RollbackTransaction(pParse);} - break; - case 22: /* cmd ::= SAVEPOINT nm */ -{ - sqlite3Savepoint(pParse, SAVEPOINT_BEGIN, &yymsp[0].minor.yy0); -} - break; - case 23: /* cmd ::= RELEASE savepoint_opt nm */ -{ - sqlite3Savepoint(pParse, SAVEPOINT_RELEASE, &yymsp[0].minor.yy0); -} - break; - case 24: /* cmd ::= ROLLBACK trans_opt TO savepoint_opt nm */ -{ - sqlite3Savepoint(pParse, SAVEPOINT_ROLLBACK, &yymsp[0].minor.yy0); -} - break; - case 26: /* create_table ::= createkw temp TABLE ifnotexists nm dbnm */ -{ - sqlite3StartTable(pParse,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0,yymsp[-4].minor.yy194,0,0,yymsp[-2].minor.yy194); -} - break; - case 27: /* createkw ::= CREATE */ -{ - pParse->db->lookaside.bEnabled = 0; - yygotominor.yy0 = yymsp[0].minor.yy0; -} - break; - case 28: /* ifnotexists ::= */ - case 31: /* temp ::= */ yytestcase(yyruleno==31); - case 70: /* autoinc ::= */ yytestcase(yyruleno==70); - case 84: /* init_deferred_pred_opt ::= */ yytestcase(yyruleno==84); - case 86: /* init_deferred_pred_opt ::= INITIALLY IMMEDIATE */ yytestcase(yyruleno==86); - case 97: /* defer_subclause_opt ::= */ yytestcase(yyruleno==97); - case 108: /* ifexists ::= */ yytestcase(yyruleno==108); - case 119: /* distinct ::= ALL */ yytestcase(yyruleno==119); - case 120: /* distinct ::= */ yytestcase(yyruleno==120); - case 222: /* between_op ::= BETWEEN */ yytestcase(yyruleno==222); - case 225: /* in_op ::= IN */ yytestcase(yyruleno==225); -{yygotominor.yy194 = 0;} - break; - case 29: /* ifnotexists ::= IF NOT EXISTS */ - case 30: /* temp ::= TEMP */ yytestcase(yyruleno==30); - case 71: /* autoinc ::= AUTOINCR */ yytestcase(yyruleno==71); - case 85: /* init_deferred_pred_opt ::= INITIALLY DEFERRED */ yytestcase(yyruleno==85); - case 107: /* ifexists ::= IF EXISTS */ yytestcase(yyruleno==107); - case 118: /* distinct ::= DISTINCT */ yytestcase(yyruleno==118); - case 223: /* between_op ::= NOT BETWEEN */ yytestcase(yyruleno==223); - case 226: /* in_op ::= NOT IN */ yytestcase(yyruleno==226); -{yygotominor.yy194 = 1;} - break; - case 32: /* create_table_args ::= LP columnlist conslist_opt RP */ -{ - sqlite3EndTable(pParse,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0,0); -} - break; - case 33: /* create_table_args ::= AS select */ -{ - sqlite3EndTable(pParse,0,0,yymsp[0].minor.yy243); - sqlite3SelectDelete(pParse->db, yymsp[0].minor.yy243); -} - break; - case 36: /* column ::= columnid type carglist */ -{ - yygotominor.yy0.z = yymsp[-2].minor.yy0.z; - yygotominor.yy0.n = (int)(pParse->sLastToken.z-yymsp[-2].minor.yy0.z) + pParse->sLastToken.n; -} - break; - case 37: /* columnid ::= nm */ -{ - sqlite3AddColumn(pParse,&yymsp[0].minor.yy0); - yygotominor.yy0 = yymsp[0].minor.yy0; -} - break; - case 38: /* id ::= ID */ - case 39: /* id ::= INDEXED */ yytestcase(yyruleno==39); - case 40: /* ids ::= ID|STRING */ yytestcase(yyruleno==40); - case 41: /* nm ::= id */ yytestcase(yyruleno==41); - case 42: /* nm ::= STRING */ yytestcase(yyruleno==42); - case 43: /* nm ::= JOIN_KW */ yytestcase(yyruleno==43); - case 46: /* typetoken ::= typename */ yytestcase(yyruleno==46); - case 49: /* typename ::= ids */ yytestcase(yyruleno==49); - case 126: /* as ::= AS nm */ yytestcase(yyruleno==126); - case 127: /* as ::= ids */ yytestcase(yyruleno==127); - case 137: /* dbnm ::= DOT nm */ yytestcase(yyruleno==137); - case 146: /* indexed_opt ::= INDEXED BY nm */ yytestcase(yyruleno==146); - case 251: /* collate ::= COLLATE ids */ yytestcase(yyruleno==251); - case 260: /* nmnum ::= plus_num */ yytestcase(yyruleno==260); - case 261: /* nmnum ::= nm */ yytestcase(yyruleno==261); - case 262: /* nmnum ::= ON */ yytestcase(yyruleno==262); - case 263: /* nmnum ::= DELETE */ yytestcase(yyruleno==263); - case 264: /* nmnum ::= DEFAULT */ yytestcase(yyruleno==264); - case 265: /* plus_num ::= plus_opt number */ yytestcase(yyruleno==265); - case 266: /* minus_num ::= MINUS number */ yytestcase(yyruleno==266); - case 267: /* number ::= INTEGER|FLOAT */ yytestcase(yyruleno==267); -{yygotominor.yy0 = yymsp[0].minor.yy0;} - break; - case 45: /* type ::= typetoken */ -{sqlite3AddColumnType(pParse,&yymsp[0].minor.yy0);} - break; - case 47: /* typetoken ::= typename LP signed RP */ -{ - yygotominor.yy0.z = yymsp[-3].minor.yy0.z; - yygotominor.yy0.n = (int)(&yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n] - yymsp[-3].minor.yy0.z); -} - break; - case 48: /* typetoken ::= typename LP signed COMMA signed RP */ -{ - yygotominor.yy0.z = yymsp[-5].minor.yy0.z; - yygotominor.yy0.n = (int)(&yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n] - yymsp[-5].minor.yy0.z); -} - break; - case 50: /* typename ::= typename ids */ -{yygotominor.yy0.z=yymsp[-1].minor.yy0.z; yygotominor.yy0.n=yymsp[0].minor.yy0.n+(int)(yymsp[0].minor.yy0.z-yymsp[-1].minor.yy0.z);} - break; - case 57: /* ccons ::= DEFAULT term */ - case 59: /* ccons ::= DEFAULT PLUS term */ yytestcase(yyruleno==59); -{sqlite3AddDefaultValue(pParse,&yymsp[0].minor.yy190);} - break; - case 58: /* ccons ::= DEFAULT LP expr RP */ -{sqlite3AddDefaultValue(pParse,&yymsp[-1].minor.yy190);} - break; - case 60: /* ccons ::= DEFAULT MINUS term */ -{ - ExprSpan v; - v.pExpr = sqlite3PExpr(pParse, TK_UMINUS, yymsp[0].minor.yy190.pExpr, 0, 0); - v.zStart = yymsp[-1].minor.yy0.z; - v.zEnd = yymsp[0].minor.yy190.zEnd; - sqlite3AddDefaultValue(pParse,&v); -} - break; - case 61: /* ccons ::= DEFAULT id */ -{ - ExprSpan v; - spanExpr(&v, pParse, TK_STRING, &yymsp[0].minor.yy0); - sqlite3AddDefaultValue(pParse,&v); -} - break; - case 63: /* ccons ::= NOT NULL onconf */ -{sqlite3AddNotNull(pParse, yymsp[0].minor.yy194);} - break; - case 64: /* ccons ::= PRIMARY KEY sortorder onconf autoinc */ -{sqlite3AddPrimaryKey(pParse,0,yymsp[-1].minor.yy194,yymsp[0].minor.yy194,yymsp[-2].minor.yy194);} - break; - case 65: /* ccons ::= UNIQUE onconf */ -{sqlite3CreateIndex(pParse,0,0,0,0,yymsp[0].minor.yy194,0,0,0,0);} - break; - case 66: /* ccons ::= CHECK LP expr RP */ -{sqlite3AddCheckConstraint(pParse,yymsp[-1].minor.yy190.pExpr);} - break; - case 67: /* ccons ::= REFERENCES nm idxlist_opt refargs */ -{sqlite3CreateForeignKey(pParse,0,&yymsp[-2].minor.yy0,yymsp[-1].minor.yy148,yymsp[0].minor.yy194);} - break; - case 68: /* ccons ::= defer_subclause */ -{sqlite3DeferForeignKey(pParse,yymsp[0].minor.yy194);} - break; - case 69: /* ccons ::= COLLATE ids */ -{sqlite3AddCollateType(pParse, &yymsp[0].minor.yy0);} - break; - case 72: /* refargs ::= */ -{ yygotominor.yy194 = OE_Restrict * 0x010101; } - break; - case 73: /* refargs ::= refargs refarg */ -{ yygotominor.yy194 = (yymsp[-1].minor.yy194 & ~yymsp[0].minor.yy497.mask) | yymsp[0].minor.yy497.value; } - break; - case 74: /* refarg ::= MATCH nm */ -{ yygotominor.yy497.value = 0; yygotominor.yy497.mask = 0x000000; } - break; - case 75: /* refarg ::= ON DELETE refact */ -{ yygotominor.yy497.value = yymsp[0].minor.yy194; yygotominor.yy497.mask = 0x0000ff; } - break; - case 76: /* refarg ::= ON UPDATE refact */ -{ yygotominor.yy497.value = yymsp[0].minor.yy194<<8; yygotominor.yy497.mask = 0x00ff00; } - break; - case 77: /* refarg ::= ON INSERT refact */ -{ yygotominor.yy497.value = yymsp[0].minor.yy194<<16; yygotominor.yy497.mask = 0xff0000; } - break; - case 78: /* refact ::= SET NULL */ -{ yygotominor.yy194 = OE_SetNull; } - break; - case 79: /* refact ::= SET DEFAULT */ -{ yygotominor.yy194 = OE_SetDflt; } - break; - case 80: /* refact ::= CASCADE */ -{ yygotominor.yy194 = OE_Cascade; } - break; - case 81: /* refact ::= RESTRICT */ -{ yygotominor.yy194 = OE_Restrict; } - break; - case 82: /* defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt */ - case 83: /* defer_subclause ::= DEFERRABLE init_deferred_pred_opt */ yytestcase(yyruleno==83); - case 98: /* defer_subclause_opt ::= defer_subclause */ yytestcase(yyruleno==98); - case 100: /* onconf ::= ON CONFLICT resolvetype */ yytestcase(yyruleno==100); - case 102: /* orconf ::= OR resolvetype */ yytestcase(yyruleno==102); - case 103: /* resolvetype ::= raisetype */ yytestcase(yyruleno==103); - case 175: /* insert_cmd ::= INSERT orconf */ yytestcase(yyruleno==175); -{yygotominor.yy194 = yymsp[0].minor.yy194;} - break; - case 87: /* conslist_opt ::= */ -{yygotominor.yy0.n = 0; yygotominor.yy0.z = 0;} - break; - case 88: /* conslist_opt ::= COMMA conslist */ -{yygotominor.yy0 = yymsp[-1].minor.yy0;} - break; - case 93: /* tcons ::= PRIMARY KEY LP idxlist autoinc RP onconf */ -{sqlite3AddPrimaryKey(pParse,yymsp[-3].minor.yy148,yymsp[0].minor.yy194,yymsp[-2].minor.yy194,0);} - break; - case 94: /* tcons ::= UNIQUE LP idxlist RP onconf */ -{sqlite3CreateIndex(pParse,0,0,0,yymsp[-2].minor.yy148,yymsp[0].minor.yy194,0,0,0,0);} - break; - case 95: /* tcons ::= CHECK LP expr RP onconf */ -{sqlite3AddCheckConstraint(pParse,yymsp[-2].minor.yy190.pExpr);} - break; - case 96: /* tcons ::= FOREIGN KEY LP idxlist RP REFERENCES nm idxlist_opt refargs defer_subclause_opt */ -{ - sqlite3CreateForeignKey(pParse, yymsp[-6].minor.yy148, &yymsp[-3].minor.yy0, yymsp[-2].minor.yy148, yymsp[-1].minor.yy194); - sqlite3DeferForeignKey(pParse, yymsp[0].minor.yy194); -} - break; - case 99: /* onconf ::= */ - case 101: /* orconf ::= */ yytestcase(yyruleno==101); -{yygotominor.yy194 = OE_Default;} - break; - case 104: /* resolvetype ::= IGNORE */ -{yygotominor.yy194 = OE_Ignore;} - break; - case 105: /* resolvetype ::= REPLACE */ - case 176: /* insert_cmd ::= REPLACE */ yytestcase(yyruleno==176); -{yygotominor.yy194 = OE_Replace;} - break; - case 106: /* cmd ::= DROP TABLE ifexists fullname */ -{ - sqlite3DropTable(pParse, yymsp[0].minor.yy185, 0, yymsp[-1].minor.yy194); -} - break; - case 109: /* cmd ::= createkw temp VIEW ifnotexists nm dbnm AS select */ -{ - sqlite3CreateView(pParse, &yymsp[-7].minor.yy0, &yymsp[-3].minor.yy0, &yymsp[-2].minor.yy0, yymsp[0].minor.yy243, yymsp[-6].minor.yy194, yymsp[-4].minor.yy194); -} - break; - case 110: /* cmd ::= DROP VIEW ifexists fullname */ -{ - sqlite3DropTable(pParse, yymsp[0].minor.yy185, 1, yymsp[-1].minor.yy194); -} - break; - case 111: /* cmd ::= select */ -{ - SelectDest dest = {SRT_Output, 0, 0, 0, 0}; - sqlite3Select(pParse, yymsp[0].minor.yy243, &dest); - sqlite3SelectDelete(pParse->db, yymsp[0].minor.yy243); -} - break; - case 112: /* select ::= oneselect */ -{yygotominor.yy243 = yymsp[0].minor.yy243;} - break; - case 113: /* select ::= select multiselect_op oneselect */ -{ - if( yymsp[0].minor.yy243 ){ - yymsp[0].minor.yy243->op = (u8)yymsp[-1].minor.yy194; - yymsp[0].minor.yy243->pPrior = yymsp[-2].minor.yy243; + int eDest = pDest->eDest; + int iParm = pDest->iParm; + + int regRow; + int regRowid; + + iTab = pOrderBy->iECursor; + regRow = sqlite3GetTempReg(pParse); + if( eDest==SRT_Output || eDest==SRT_Coroutine ){ + pseudoTab = pParse->nTab++; + sqlite3VdbeAddOp3(v, OP_OpenPseudo, pseudoTab, regRow, nColumn); + regRowid = 0; }else{ - sqlite3SelectDelete(pParse->db, yymsp[-2].minor.yy243); + regRowid = sqlite3GetTempReg(pParse); } - yygotominor.yy243 = yymsp[0].minor.yy243; -} - break; - case 115: /* multiselect_op ::= UNION ALL */ -{yygotominor.yy194 = TK_ALL;} - break; - case 117: /* oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt */ -{ - yygotominor.yy243 = sqlite3SelectNew(pParse,yymsp[-6].minor.yy148,yymsp[-5].minor.yy185,yymsp[-4].minor.yy72,yymsp[-3].minor.yy148,yymsp[-2].minor.yy72,yymsp[-1].minor.yy148,yymsp[-7].minor.yy194,yymsp[0].minor.yy354.pLimit,yymsp[0].minor.yy354.pOffset); -} - break; - case 121: /* sclp ::= selcollist COMMA */ - case 247: /* idxlist_opt ::= LP idxlist RP */ yytestcase(yyruleno==247); -{yygotominor.yy148 = yymsp[-1].minor.yy148;} - break; - case 122: /* sclp ::= */ - case 150: /* orderby_opt ::= */ yytestcase(yyruleno==150); - case 158: /* groupby_opt ::= */ yytestcase(yyruleno==158); - case 240: /* exprlist ::= */ yytestcase(yyruleno==240); - case 246: /* idxlist_opt ::= */ yytestcase(yyruleno==246); -{yygotominor.yy148 = 0;} - break; - case 123: /* selcollist ::= sclp expr as */ -{ - yygotominor.yy148 = sqlite3ExprListAppend(pParse, yymsp[-2].minor.yy148, yymsp[-1].minor.yy190.pExpr); - if( yymsp[0].minor.yy0.n>0 ) sqlite3ExprListSetName(pParse, yygotominor.yy148, &yymsp[0].minor.yy0, 1); - sqlite3ExprListSetSpan(pParse,yygotominor.yy148,&yymsp[-1].minor.yy190); -} - break; - case 124: /* selcollist ::= sclp STAR */ -{ - Expr *p = sqlite3Expr(pParse->db, TK_ALL, 0); - yygotominor.yy148 = sqlite3ExprListAppend(pParse, yymsp[-1].minor.yy148, p); -} - break; - case 125: /* selcollist ::= sclp nm DOT STAR */ -{ - Expr *pRight = sqlite3PExpr(pParse, TK_ALL, 0, 0, &yymsp[0].minor.yy0); - Expr *pLeft = sqlite3PExpr(pParse, TK_ID, 0, 0, &yymsp[-2].minor.yy0); - Expr *pDot = sqlite3PExpr(pParse, TK_DOT, pLeft, pRight, 0); - yygotominor.yy148 = sqlite3ExprListAppend(pParse,yymsp[-3].minor.yy148, pDot); -} - break; - case 128: /* as ::= */ -{yygotominor.yy0.n = 0;} - break; - case 129: /* from ::= */ -{yygotominor.yy185 = sqlite3DbMallocZero(pParse->db, sizeof(*yygotominor.yy185));} - break; - case 130: /* from ::= FROM seltablist */ -{ - yygotominor.yy185 = yymsp[0].minor.yy185; - sqlite3SrcListShiftJoinType(yygotominor.yy185); -} - break; - case 131: /* stl_prefix ::= seltablist joinop */ -{ - yygotominor.yy185 = yymsp[-1].minor.yy185; - if( ALWAYS(yygotominor.yy185 && yygotominor.yy185->nSrc>0) ) yygotominor.yy185->a[yygotominor.yy185->nSrc-1].jointype = (u8)yymsp[0].minor.yy194; -} - break; - case 132: /* stl_prefix ::= */ -{yygotominor.yy185 = 0;} - break; - case 133: /* seltablist ::= stl_prefix nm dbnm as indexed_opt on_opt using_opt */ -{ - yygotominor.yy185 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy185,&yymsp[-5].minor.yy0,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,0,yymsp[-1].minor.yy72,yymsp[0].minor.yy254); - sqlite3SrcListIndexedBy(pParse, yygotominor.yy185, &yymsp[-2].minor.yy0); -} - break; - case 134: /* seltablist ::= stl_prefix LP select RP as on_opt using_opt */ -{ - yygotominor.yy185 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy185,0,0,&yymsp[-2].minor.yy0,yymsp[-4].minor.yy243,yymsp[-1].minor.yy72,yymsp[0].minor.yy254); + if( p->selFlags & SF_UseSorter ){ + int regSortOut = ++pParse->nMem; + int ptab2 = pParse->nTab++; + sqlite3VdbeAddOp3(v, OP_OpenPseudo, ptab2, regSortOut, pOrderBy->nExpr+2); + addr = 1 + sqlite3VdbeAddOp2(v, OP_SorterSort, iTab, addrBreak); + codeOffset(v, p, addrContinue); + sqlite3VdbeAddOp2(v, OP_SorterData, iTab, regSortOut); + sqlite3VdbeAddOp3(v, OP_Column, ptab2, pOrderBy->nExpr+1, regRow); + sqlite3VdbeChangeP5(v, OPFLAG_CLEARCACHE); + }else{ + addr = 1 + sqlite3VdbeAddOp2(v, OP_Sort, iTab, addrBreak); + codeOffset(v, p, addrContinue); + sqlite3VdbeAddOp3(v, OP_Column, iTab, pOrderBy->nExpr+1, regRow); } - break; - case 135: /* seltablist ::= stl_prefix LP seltablist RP as on_opt using_opt */ -{ - if( yymsp[-6].minor.yy185==0 ){ - sqlite3ExprDelete(pParse->db, yymsp[-1].minor.yy72); - sqlite3IdListDelete(pParse->db, yymsp[0].minor.yy254); - yygotominor.yy185 = yymsp[-4].minor.yy185; - }else{ - Select *pSubquery; - sqlite3SrcListShiftJoinType(yymsp[-4].minor.yy185); - pSubquery = sqlite3SelectNew(pParse,0,yymsp[-4].minor.yy185,0,0,0,0,0,0,0); - yygotominor.yy185 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy185,0,0,&yymsp[-2].minor.yy0,pSubquery,yymsp[-1].minor.yy72,yymsp[0].minor.yy254); + switch( eDest ){ + case SRT_Table: + case SRT_EphemTab: { + testcase( eDest==SRT_Table ); + testcase( eDest==SRT_EphemTab ); + sqlite3VdbeAddOp2(v, OP_NewRowid, iParm, regRowid); + sqlite3VdbeAddOp3(v, OP_Insert, iParm, regRow, regRowid); + sqlite3VdbeChangeP5(v, OPFLAG_APPEND); + break; + } +#ifndef SQLITE_OMIT_SUBQUERY + case SRT_Set: { + assert( nColumn==1 ); + sqlite3VdbeAddOp4(v, OP_MakeRecord, regRow, 1, regRowid, &p->affinity, 1); + sqlite3ExprCacheAffinityChange(pParse, regRow, 1); + sqlite3VdbeAddOp2(v, OP_IdxInsert, iParm, regRowid); + break; + } + case SRT_Mem: { + assert( nColumn==1 ); + sqlite3ExprCodeMove(pParse, regRow, iParm, 1); + /* The LIMIT clause will terminate the loop for us */ + break; + } +#endif + default: { + int i; + assert( eDest==SRT_Output || eDest==SRT_Coroutine ); + testcase( eDest==SRT_Output ); + testcase( eDest==SRT_Coroutine ); + for(i=0; iiMem+i ); + sqlite3VdbeAddOp3(v, OP_Column, pseudoTab, i, pDest->iMem+i); + if( i==0 ){ + sqlite3VdbeChangeP5(v, OPFLAG_CLEARCACHE); + } + } + if( eDest==SRT_Output ){ + sqlite3VdbeAddOp2(v, OP_ResultRow, pDest->iMem, nColumn); + sqlite3ExprCacheAffinityChange(pParse, pDest->iMem, nColumn); + }else{ + sqlite3VdbeAddOp1(v, OP_Yield, pDest->iParm); + } + break; } } - break; - case 136: /* dbnm ::= */ - case 145: /* indexed_opt ::= */ yytestcase(yyruleno==145); -{yygotominor.yy0.z=0; yygotominor.yy0.n=0;} - break; - case 138: /* fullname ::= nm dbnm */ -{yygotominor.yy185 = sqlite3SrcListAppend(pParse->db,0,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0);} - break; - case 139: /* joinop ::= COMMA|JOIN */ -{ yygotominor.yy194 = JT_INNER; } - break; - case 140: /* joinop ::= JOIN_KW JOIN */ -{ yygotominor.yy194 = sqlite3JoinType(pParse,&yymsp[-1].minor.yy0,0,0); } - break; - case 141: /* joinop ::= JOIN_KW nm JOIN */ -{ yygotominor.yy194 = sqlite3JoinType(pParse,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0,0); } - break; - case 142: /* joinop ::= JOIN_KW nm nm JOIN */ -{ yygotominor.yy194 = sqlite3JoinType(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0); } - break; - case 143: /* on_opt ::= ON expr */ - case 154: /* sortitem ::= expr */ yytestcase(yyruleno==154); - case 161: /* having_opt ::= HAVING expr */ yytestcase(yyruleno==161); - case 168: /* where_opt ::= WHERE expr */ yytestcase(yyruleno==168); - case 235: /* case_else ::= ELSE expr */ yytestcase(yyruleno==235); - case 237: /* case_operand ::= expr */ yytestcase(yyruleno==237); -{yygotominor.yy72 = yymsp[0].minor.yy190.pExpr;} - break; - case 144: /* on_opt ::= */ - case 160: /* having_opt ::= */ yytestcase(yyruleno==160); - case 167: /* where_opt ::= */ yytestcase(yyruleno==167); - case 236: /* case_else ::= */ yytestcase(yyruleno==236); - case 238: /* case_operand ::= */ yytestcase(yyruleno==238); -{yygotominor.yy72 = 0;} - break; - case 147: /* indexed_opt ::= NOT INDEXED */ -{yygotominor.yy0.z=0; yygotominor.yy0.n=1;} - break; - case 148: /* using_opt ::= USING LP inscollist RP */ - case 180: /* inscollist_opt ::= LP inscollist RP */ yytestcase(yyruleno==180); -{yygotominor.yy254 = yymsp[-1].minor.yy254;} - break; - case 149: /* using_opt ::= */ - case 179: /* inscollist_opt ::= */ yytestcase(yyruleno==179); -{yygotominor.yy254 = 0;} - break; - case 151: /* orderby_opt ::= ORDER BY sortlist */ - case 159: /* groupby_opt ::= GROUP BY nexprlist */ yytestcase(yyruleno==159); - case 239: /* exprlist ::= nexprlist */ yytestcase(yyruleno==239); -{yygotominor.yy148 = yymsp[0].minor.yy148;} - break; - case 152: /* sortlist ::= sortlist COMMA sortitem sortorder */ -{ - yygotominor.yy148 = sqlite3ExprListAppend(pParse,yymsp[-3].minor.yy148,yymsp[-1].minor.yy72); - if( yygotominor.yy148 ) yygotominor.yy148->a[yygotominor.yy148->nExpr-1].sortOrder = (u8)yymsp[0].minor.yy194; -} - break; - case 153: /* sortlist ::= sortitem sortorder */ -{ - yygotominor.yy148 = sqlite3ExprListAppend(pParse,0,yymsp[-1].minor.yy72); - if( yygotominor.yy148 && ALWAYS(yygotominor.yy148->a) ) yygotominor.yy148->a[0].sortOrder = (u8)yymsp[0].minor.yy194; -} - break; - case 155: /* sortorder ::= ASC */ - case 157: /* sortorder ::= */ yytestcase(yyruleno==157); -{yygotominor.yy194 = SQLITE_SO_ASC;} - break; - case 156: /* sortorder ::= DESC */ -{yygotominor.yy194 = SQLITE_SO_DESC;} - break; - case 162: /* limit_opt ::= */ -{yygotominor.yy354.pLimit = 0; yygotominor.yy354.pOffset = 0;} - break; - case 163: /* limit_opt ::= LIMIT expr */ -{yygotominor.yy354.pLimit = yymsp[0].minor.yy190.pExpr; yygotominor.yy354.pOffset = 0;} - break; - case 164: /* limit_opt ::= LIMIT expr OFFSET expr */ -{yygotominor.yy354.pLimit = yymsp[-2].minor.yy190.pExpr; yygotominor.yy354.pOffset = yymsp[0].minor.yy190.pExpr;} - break; - case 165: /* limit_opt ::= LIMIT expr COMMA expr */ -{yygotominor.yy354.pOffset = yymsp[-2].minor.yy190.pExpr; yygotominor.yy354.pLimit = yymsp[0].minor.yy190.pExpr;} - break; - case 166: /* cmd ::= DELETE FROM fullname indexed_opt where_opt */ -{ - sqlite3SrcListIndexedBy(pParse, yymsp[-2].minor.yy185, &yymsp[-1].minor.yy0); - sqlite3DeleteFrom(pParse,yymsp[-2].minor.yy185,yymsp[0].minor.yy72); -} - break; - case 169: /* cmd ::= UPDATE orconf fullname indexed_opt SET setlist where_opt */ -{ - sqlite3SrcListIndexedBy(pParse, yymsp[-4].minor.yy185, &yymsp[-3].minor.yy0); - sqlite3ExprListCheckLength(pParse,yymsp[-1].minor.yy148,"set list"); - sqlite3Update(pParse,yymsp[-4].minor.yy185,yymsp[-1].minor.yy148,yymsp[0].minor.yy72,yymsp[-5].minor.yy194); -} - break; - case 170: /* setlist ::= setlist COMMA nm EQ expr */ -{ - yygotominor.yy148 = sqlite3ExprListAppend(pParse, yymsp[-4].minor.yy148, yymsp[0].minor.yy190.pExpr); - sqlite3ExprListSetName(pParse, yygotominor.yy148, &yymsp[-2].minor.yy0, 1); -} - break; - case 171: /* setlist ::= nm EQ expr */ -{ - yygotominor.yy148 = sqlite3ExprListAppend(pParse, 0, yymsp[0].minor.yy190.pExpr); - sqlite3ExprListSetName(pParse, yygotominor.yy148, &yymsp[-2].minor.yy0, 1); -} - break; - case 172: /* cmd ::= insert_cmd INTO fullname inscollist_opt VALUES LP itemlist RP */ -{sqlite3Insert(pParse, yymsp[-5].minor.yy185, yymsp[-1].minor.yy148, 0, yymsp[-4].minor.yy254, yymsp[-7].minor.yy194);} - break; - case 173: /* cmd ::= insert_cmd INTO fullname inscollist_opt select */ -{sqlite3Insert(pParse, yymsp[-2].minor.yy185, 0, yymsp[0].minor.yy243, yymsp[-1].minor.yy254, yymsp[-4].minor.yy194);} - break; - case 174: /* cmd ::= insert_cmd INTO fullname inscollist_opt DEFAULT VALUES */ -{sqlite3Insert(pParse, yymsp[-3].minor.yy185, 0, 0, yymsp[-2].minor.yy254, yymsp[-5].minor.yy194);} - break; - case 177: /* itemlist ::= itemlist COMMA expr */ - case 241: /* nexprlist ::= nexprlist COMMA expr */ yytestcase(yyruleno==241); -{yygotominor.yy148 = sqlite3ExprListAppend(pParse,yymsp[-2].minor.yy148,yymsp[0].minor.yy190.pExpr);} - break; - case 178: /* itemlist ::= expr */ - case 242: /* nexprlist ::= expr */ yytestcase(yyruleno==242); -{yygotominor.yy148 = sqlite3ExprListAppend(pParse,0,yymsp[0].minor.yy190.pExpr);} - break; - case 181: /* inscollist ::= inscollist COMMA nm */ -{yygotominor.yy254 = sqlite3IdListAppend(pParse->db,yymsp[-2].minor.yy254,&yymsp[0].minor.yy0);} - break; - case 182: /* inscollist ::= nm */ -{yygotominor.yy254 = sqlite3IdListAppend(pParse->db,0,&yymsp[0].minor.yy0);} - break; - case 183: /* expr ::= term */ - case 211: /* escape ::= ESCAPE expr */ yytestcase(yyruleno==211); -{yygotominor.yy190 = yymsp[0].minor.yy190;} - break; - case 184: /* expr ::= LP expr RP */ -{yygotominor.yy190.pExpr = yymsp[-1].minor.yy190.pExpr; spanSet(&yygotominor.yy190,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0);} - break; - case 185: /* term ::= NULL */ - case 190: /* term ::= INTEGER|FLOAT|BLOB */ yytestcase(yyruleno==190); - case 191: /* term ::= STRING */ yytestcase(yyruleno==191); -{spanExpr(&yygotominor.yy190, pParse, yymsp[0].major, &yymsp[0].minor.yy0);} - break; - case 186: /* expr ::= id */ - case 187: /* expr ::= JOIN_KW */ yytestcase(yyruleno==187); -{spanExpr(&yygotominor.yy190, pParse, TK_ID, &yymsp[0].minor.yy0);} - break; - case 188: /* expr ::= nm DOT nm */ -{ - Expr *temp1 = sqlite3PExpr(pParse, TK_ID, 0, 0, &yymsp[-2].minor.yy0); - Expr *temp2 = sqlite3PExpr(pParse, TK_ID, 0, 0, &yymsp[0].minor.yy0); - yygotominor.yy190.pExpr = sqlite3PExpr(pParse, TK_DOT, temp1, temp2, 0); - spanSet(&yygotominor.yy190,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0); -} - break; - case 189: /* expr ::= nm DOT nm DOT nm */ -{ - Expr *temp1 = sqlite3PExpr(pParse, TK_ID, 0, 0, &yymsp[-4].minor.yy0); - Expr *temp2 = sqlite3PExpr(pParse, TK_ID, 0, 0, &yymsp[-2].minor.yy0); - Expr *temp3 = sqlite3PExpr(pParse, TK_ID, 0, 0, &yymsp[0].minor.yy0); - Expr *temp4 = sqlite3PExpr(pParse, TK_DOT, temp2, temp3, 0); - yygotominor.yy190.pExpr = sqlite3PExpr(pParse, TK_DOT, temp1, temp4, 0); - spanSet(&yygotominor.yy190,&yymsp[-4].minor.yy0,&yymsp[0].minor.yy0); -} - break; - case 192: /* expr ::= REGISTER */ -{ - /* When doing a nested parse, one can include terms in an expression - ** that look like this: #1 #2 ... These terms refer to registers - ** in the virtual machine. #N is the N-th register. */ - if( pParse->nested==0 ){ - sqlite3ErrorMsg(pParse, "near \"%T\": syntax error", &yymsp[0].minor.yy0); - yygotominor.yy190.pExpr = 0; + sqlite3ReleaseTempReg(pParse, regRow); + sqlite3ReleaseTempReg(pParse, regRowid); + + /* The bottom of the loop + */ + sqlite3VdbeResolveLabel(v, addrContinue); + if( p->selFlags & SF_UseSorter ){ + sqlite3VdbeAddOp2(v, OP_SorterNext, iTab, addr); }else{ - yygotominor.yy190.pExpr = sqlite3PExpr(pParse, TK_REGISTER, 0, 0, &yymsp[0].minor.yy0); - if( yygotominor.yy190.pExpr ) sqlite3GetInt32(&yymsp[0].minor.yy0.z[1], &yygotominor.yy190.pExpr->iTable); - } - spanSet(&yygotominor.yy190, &yymsp[0].minor.yy0, &yymsp[0].minor.yy0); -} - break; - case 193: /* expr ::= VARIABLE */ -{ - spanExpr(&yygotominor.yy190, pParse, TK_VARIABLE, &yymsp[0].minor.yy0); - sqlite3ExprAssignVarNumber(pParse, yygotominor.yy190.pExpr); - spanSet(&yygotominor.yy190, &yymsp[0].minor.yy0, &yymsp[0].minor.yy0); -} - break; - case 194: /* expr ::= expr COLLATE ids */ -{ - yygotominor.yy190.pExpr = sqlite3ExprSetColl(pParse, yymsp[-2].minor.yy190.pExpr, &yymsp[0].minor.yy0); - yygotominor.yy190.zStart = yymsp[-2].minor.yy190.zStart; - yygotominor.yy190.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n]; -} - break; - case 195: /* expr ::= CAST LP expr AS typetoken RP */ -{ - yygotominor.yy190.pExpr = sqlite3PExpr(pParse, TK_CAST, yymsp[-3].minor.yy190.pExpr, 0, &yymsp[-1].minor.yy0); - spanSet(&yygotominor.yy190,&yymsp[-5].minor.yy0,&yymsp[0].minor.yy0); -} - break; - case 196: /* expr ::= ID LP distinct exprlist RP */ -{ - if( yymsp[-1].minor.yy148 && yymsp[-1].minor.yy148->nExpr>pParse->db->aLimit[SQLITE_LIMIT_FUNCTION_ARG] ){ - sqlite3ErrorMsg(pParse, "too many arguments on function %T", &yymsp[-4].minor.yy0); + sqlite3VdbeAddOp2(v, OP_Next, iTab, addr); } - yygotominor.yy190.pExpr = sqlite3ExprFunction(pParse, yymsp[-1].minor.yy148, &yymsp[-4].minor.yy0); - spanSet(&yygotominor.yy190,&yymsp[-4].minor.yy0,&yymsp[0].minor.yy0); - if( yymsp[-2].minor.yy194 && yygotominor.yy190.pExpr ){ - yygotominor.yy190.pExpr->flags |= EP_Distinct; + sqlite3VdbeResolveLabel(v, addrBreak); + if( eDest==SRT_Output || eDest==SRT_Coroutine ){ + sqlite3VdbeAddOp2(v, OP_Close, pseudoTab, 0); } } + +/* +** Return a pointer to a string containing the 'declaration type' of the +** expression pExpr. The string may be treated as static by the caller. +** +** The declaration type is the exact datatype definition extracted from the +** original CREATE TABLE statement if the expression is a column. The +** declaration type for a ROWID field is INTEGER. Exactly when an expression +** is considered a column can be complex in the presence of subqueries. The +** result-set expression in all of the following SELECT statements is +** considered a column by this function. +** +** SELECT col FROM tbl; +** SELECT (SELECT col FROM tbl; +** SELECT (SELECT col FROM tbl); +** SELECT abc FROM (SELECT col AS abc FROM tbl); +** +** The declaration type for any expression other than a column is NULL. +*/ +static const char *columnType( + NameContext *pNC, + Expr *pExpr, + const char **pzOriginDb, + const char **pzOriginTab, + const char **pzOriginCol +){ + char const *zType = 0; + char const *zOriginDb = 0; + char const *zOriginTab = 0; + char const *zOriginCol = 0; + int j; + if( NEVER(pExpr==0) || pNC->pSrcList==0 ) return 0; + + switch( pExpr->op ){ + case TK_AGG_COLUMN: + case TK_COLUMN: { + /* The expression is a column. Locate the table the column is being + ** extracted from in NameContext.pSrcList. This table may be real + ** database table or a subquery. + */ + Table *pTab = 0; /* Table structure column is extracted from */ + Select *pS = 0; /* Select the column is extracted from */ + int iCol = pExpr->iColumn; /* Index of column in pTab */ + testcase( pExpr->op==TK_AGG_COLUMN ); + testcase( pExpr->op==TK_COLUMN ); + while( pNC && !pTab ){ + SrcList *pTabList = pNC->pSrcList; + for(j=0;jnSrc && pTabList->a[j].iCursor!=pExpr->iTable;j++); + if( jnSrc ){ + pTab = pTabList->a[j].pTab; + pS = pTabList->a[j].pSelect; + }else{ + pNC = pNC->pNext; + } + } + + if( pTab==0 ){ + /* At one time, code such as "SELECT new.x" within a trigger would + ** cause this condition to run. Since then, we have restructured how + ** trigger code is generated and so this condition is no longer + ** possible. However, it can still be true for statements like + ** the following: + ** + ** CREATE TABLE t1(col INTEGER); + ** SELECT (SELECT t1.col) FROM FROM t1; + ** + ** when columnType() is called on the expression "t1.col" in the + ** sub-select. In this case, set the column type to NULL, even + ** though it should really be "INTEGER". + ** + ** This is not a problem, as the column type of "t1.col" is never + ** used. When columnType() is called on the expression + ** "(SELECT t1.col)", the correct type is returned (see the TK_SELECT + ** branch below. */ break; - case 197: /* expr ::= ID LP STAR RP */ -{ - yygotominor.yy190.pExpr = sqlite3ExprFunction(pParse, 0, &yymsp[-3].minor.yy0); - spanSet(&yygotominor.yy190,&yymsp[-3].minor.yy0,&yymsp[0].minor.yy0); -} - break; - case 198: /* term ::= CTIME_KW */ -{ - /* The CURRENT_TIME, CURRENT_DATE, and CURRENT_TIMESTAMP values are - ** treated as functions that return constants */ - yygotominor.yy190.pExpr = sqlite3ExprFunction(pParse, 0,&yymsp[0].minor.yy0); - if( yygotominor.yy190.pExpr ){ - yygotominor.yy190.pExpr->op = TK_CONST_FUNC; + } + + assert( pTab && pExpr->pTab==pTab ); + if( pS ){ + /* The "table" is actually a sub-select or a view in the FROM clause + ** of the SELECT statement. Return the declaration type and origin + ** data for the result-set column of the sub-select. + */ + if( iCol>=0 && ALWAYS(iColpEList->nExpr) ){ + /* If iCol is less than zero, then the expression requests the + ** rowid of the sub-select or view. This expression is legal (see + ** test case misc2.2.2) - it always evaluates to NULL. + */ + NameContext sNC; + Expr *p = pS->pEList->a[iCol].pExpr; + sNC.pSrcList = pS->pSrc; + sNC.pNext = pNC; + sNC.pParse = pNC->pParse; + zType = columnType(&sNC, p, &zOriginDb, &zOriginTab, &zOriginCol); + } + }else if( ALWAYS(pTab->pSchema) ){ + /* A real table */ + assert( !pS ); + if( iCol<0 ) iCol = pTab->iPKey; + assert( iCol==-1 || (iCol>=0 && iColnCol) ); + if( iCol<0 ){ + zType = "INTEGER"; + zOriginCol = "rowid"; + }else{ + zType = pTab->aCol[iCol].zType; + zOriginCol = pTab->aCol[iCol].zName; + } + zOriginTab = pTab->zName; + if( pNC->pParse ){ + int iDb = sqlite3SchemaToIndex(pNC->pParse->db, pTab->pSchema); + zOriginDb = pNC->pParse->db->aDb[iDb].zName; + } + } + break; + } +#ifndef SQLITE_OMIT_SUBQUERY + case TK_SELECT: { + /* The expression is a sub-select. Return the declaration type and + ** origin info for the single column in the result set of the SELECT + ** statement. + */ + NameContext sNC; + Select *pS = pExpr->x.pSelect; + Expr *p = pS->pEList->a[0].pExpr; + assert( ExprHasProperty(pExpr, EP_xIsSelect) ); + sNC.pSrcList = pS->pSrc; + sNC.pNext = pNC; + sNC.pParse = pNC->pParse; + zType = columnType(&sNC, p, &zOriginDb, &zOriginTab, &zOriginCol); + break; + } +#endif } - spanSet(&yygotominor.yy190, &yymsp[0].minor.yy0, &yymsp[0].minor.yy0); -} - break; - case 199: /* expr ::= expr AND expr */ - case 200: /* expr ::= expr OR expr */ yytestcase(yyruleno==200); - case 201: /* expr ::= expr LT|GT|GE|LE expr */ yytestcase(yyruleno==201); - case 202: /* expr ::= expr EQ|NE expr */ yytestcase(yyruleno==202); - case 203: /* expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr */ yytestcase(yyruleno==203); - case 204: /* expr ::= expr PLUS|MINUS expr */ yytestcase(yyruleno==204); - case 205: /* expr ::= expr STAR|SLASH|REM expr */ yytestcase(yyruleno==205); - case 206: /* expr ::= expr CONCAT expr */ yytestcase(yyruleno==206); -{spanBinaryExpr(&yygotominor.yy190,pParse,yymsp[-1].major,&yymsp[-2].minor.yy190,&yymsp[0].minor.yy190);} - break; - case 207: /* likeop ::= LIKE_KW */ - case 209: /* likeop ::= MATCH */ yytestcase(yyruleno==209); -{yygotominor.yy392.eOperator = yymsp[0].minor.yy0; yygotominor.yy392.not = 0;} - break; - case 208: /* likeop ::= NOT LIKE_KW */ - case 210: /* likeop ::= NOT MATCH */ yytestcase(yyruleno==210); -{yygotominor.yy392.eOperator = yymsp[0].minor.yy0; yygotominor.yy392.not = 1;} - break; - case 212: /* escape ::= */ -{memset(&yygotominor.yy190,0,sizeof(yygotominor.yy190));} - break; - case 213: /* expr ::= expr likeop expr escape */ -{ - ExprList *pList; - pList = sqlite3ExprListAppend(pParse,0, yymsp[-1].minor.yy190.pExpr); - pList = sqlite3ExprListAppend(pParse,pList, yymsp[-3].minor.yy190.pExpr); - if( yymsp[0].minor.yy190.pExpr ){ - pList = sqlite3ExprListAppend(pParse,pList, yymsp[0].minor.yy190.pExpr); + + if( pzOriginDb ){ + assert( pzOriginTab && pzOriginCol ); + *pzOriginDb = zOriginDb; + *pzOriginTab = zOriginTab; + *pzOriginCol = zOriginCol; } - yygotominor.yy190.pExpr = sqlite3ExprFunction(pParse, pList, &yymsp[-2].minor.yy392.eOperator); - if( yymsp[-2].minor.yy392.not ) yygotominor.yy190.pExpr = sqlite3PExpr(pParse, TK_NOT, yygotominor.yy190.pExpr, 0, 0); - yygotominor.yy190.zStart = yymsp[-3].minor.yy190.zStart; - yygotominor.yy190.zEnd = yymsp[-1].minor.yy190.zEnd; - if( yygotominor.yy190.pExpr ) yygotominor.yy190.pExpr->flags |= EP_InfixFunc; + return zType; } - break; - case 214: /* expr ::= expr ISNULL|NOTNULL */ -{spanUnaryPostfix(&yygotominor.yy190,pParse,yymsp[0].major,&yymsp[-1].minor.yy190,&yymsp[0].minor.yy0);} - break; - case 215: /* expr ::= expr IS NULL */ -{spanUnaryPostfix(&yygotominor.yy190,pParse,TK_ISNULL,&yymsp[-2].minor.yy190,&yymsp[0].minor.yy0);} - break; - case 216: /* expr ::= expr NOT NULL */ -{spanUnaryPostfix(&yygotominor.yy190,pParse,TK_NOTNULL,&yymsp[-2].minor.yy190,&yymsp[0].minor.yy0);} - break; - case 217: /* expr ::= expr IS NOT NULL */ -{spanUnaryPostfix(&yygotominor.yy190,pParse,TK_NOTNULL,&yymsp[-3].minor.yy190,&yymsp[0].minor.yy0);} - break; - case 218: /* expr ::= NOT expr */ - case 219: /* expr ::= BITNOT expr */ yytestcase(yyruleno==219); -{spanUnaryPrefix(&yygotominor.yy190,pParse,yymsp[-1].major,&yymsp[0].minor.yy190,&yymsp[-1].minor.yy0);} - break; - case 220: /* expr ::= MINUS expr */ -{spanUnaryPrefix(&yygotominor.yy190,pParse,TK_UMINUS,&yymsp[0].minor.yy190,&yymsp[-1].minor.yy0);} - break; - case 221: /* expr ::= PLUS expr */ -{spanUnaryPrefix(&yygotominor.yy190,pParse,TK_UPLUS,&yymsp[0].minor.yy190,&yymsp[-1].minor.yy0);} - break; - case 224: /* expr ::= expr between_op expr AND expr */ -{ - ExprList *pList = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy190.pExpr); - pList = sqlite3ExprListAppend(pParse,pList, yymsp[0].minor.yy190.pExpr); - yygotominor.yy190.pExpr = sqlite3PExpr(pParse, TK_BETWEEN, yymsp[-4].minor.yy190.pExpr, 0, 0); - if( yygotominor.yy190.pExpr ){ - yygotominor.yy190.pExpr->x.pList = pList; - }else{ - sqlite3ExprListDelete(pParse->db, pList); - } - if( yymsp[-3].minor.yy194 ) yygotominor.yy190.pExpr = sqlite3PExpr(pParse, TK_NOT, yygotominor.yy190.pExpr, 0, 0); - yygotominor.yy190.zStart = yymsp[-4].minor.yy190.zStart; - yygotominor.yy190.zEnd = yymsp[0].minor.yy190.zEnd; + +/* +** Generate code that will tell the VDBE the declaration types of columns +** in the result set. +*/ +static void generateColumnTypes( + Parse *pParse, /* Parser context */ + SrcList *pTabList, /* List of tables */ + ExprList *pEList /* Expressions defining the result set */ +){ +#ifndef SQLITE_OMIT_DECLTYPE + Vdbe *v = pParse->pVdbe; + int i; + NameContext sNC; + sNC.pSrcList = pTabList; + sNC.pParse = pParse; + for(i=0; inExpr; i++){ + Expr *p = pEList->a[i].pExpr; + const char *zType; +#ifdef SQLITE_ENABLE_COLUMN_METADATA + const char *zOrigDb = 0; + const char *zOrigTab = 0; + const char *zOrigCol = 0; + zType = columnType(&sNC, p, &zOrigDb, &zOrigTab, &zOrigCol); + + /* The vdbe must make its own copy of the column-type and other + ** column specific strings, in case the schema is reset before this + ** virtual machine is deleted. + */ + sqlite3VdbeSetColName(v, i, COLNAME_DATABASE, zOrigDb, SQLITE_TRANSIENT); + sqlite3VdbeSetColName(v, i, COLNAME_TABLE, zOrigTab, SQLITE_TRANSIENT); + sqlite3VdbeSetColName(v, i, COLNAME_COLUMN, zOrigCol, SQLITE_TRANSIENT); +#else + zType = columnType(&sNC, p, 0, 0, 0); +#endif + sqlite3VdbeSetColName(v, i, COLNAME_DECLTYPE, zType, SQLITE_TRANSIENT); + } +#endif /* SQLITE_OMIT_DECLTYPE */ } - break; - case 227: /* expr ::= expr in_op LP exprlist RP */ -{ - yygotominor.yy190.pExpr = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy190.pExpr, 0, 0); - if( yygotominor.yy190.pExpr ){ - yygotominor.yy190.pExpr->x.pList = yymsp[-1].minor.yy148; - sqlite3ExprSetHeight(pParse, yygotominor.yy190.pExpr); - }else{ - sqlite3ExprListDelete(pParse->db, yymsp[-1].minor.yy148); - } - if( yymsp[-3].minor.yy194 ) yygotominor.yy190.pExpr = sqlite3PExpr(pParse, TK_NOT, yygotominor.yy190.pExpr, 0, 0); - yygotominor.yy190.zStart = yymsp[-4].minor.yy190.zStart; - yygotominor.yy190.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n]; + +/* +** Generate code that will tell the VDBE the names of columns +** in the result set. This information is used to provide the +** azCol[] values in the callback. +*/ +static void generateColumnNames( + Parse *pParse, /* Parser context */ + SrcList *pTabList, /* List of tables */ + ExprList *pEList /* Expressions defining the result set */ +){ + Vdbe *v = pParse->pVdbe; + int i, j; + sqlite3 *db = pParse->db; + int fullNames, shortNames; + +#ifndef SQLITE_OMIT_EXPLAIN + /* If this is an EXPLAIN, skip this step */ + if( pParse->explain ){ + return; } - break; - case 228: /* expr ::= LP select RP */ -{ - yygotominor.yy190.pExpr = sqlite3PExpr(pParse, TK_SELECT, 0, 0, 0); - if( yygotominor.yy190.pExpr ){ - yygotominor.yy190.pExpr->x.pSelect = yymsp[-1].minor.yy243; - ExprSetProperty(yygotominor.yy190.pExpr, EP_xIsSelect); - sqlite3ExprSetHeight(pParse, yygotominor.yy190.pExpr); +#endif + + if( pParse->colNamesSet || NEVER(v==0) || db->mallocFailed ) return; + pParse->colNamesSet = 1; + fullNames = (db->flags & SQLITE_FullColNames)!=0; + shortNames = (db->flags & SQLITE_ShortColNames)!=0; + sqlite3VdbeSetNumCols(v, pEList->nExpr); + for(i=0; inExpr; i++){ + Expr *p; + p = pEList->a[i].pExpr; + if( NEVER(p==0) ) continue; + if( pEList->a[i].zName ){ + char *zName = pEList->a[i].zName; + sqlite3VdbeSetColName(v, i, COLNAME_NAME, zName, SQLITE_TRANSIENT); + }else if( (p->op==TK_COLUMN || p->op==TK_AGG_COLUMN) && pTabList ){ + Table *pTab; + char *zCol; + int iCol = p->iColumn; + for(j=0; ALWAYS(jnSrc); j++){ + if( pTabList->a[j].iCursor==p->iTable ) break; + } + assert( jnSrc ); + pTab = pTabList->a[j].pTab; + if( iCol<0 ) iCol = pTab->iPKey; + assert( iCol==-1 || (iCol>=0 && iColnCol) ); + if( iCol<0 ){ + zCol = "rowid"; + }else{ + zCol = pTab->aCol[iCol].zName; + } + if( !shortNames && !fullNames ){ + sqlite3VdbeSetColName(v, i, COLNAME_NAME, + sqlite3DbStrDup(db, pEList->a[i].zSpan), SQLITE_DYNAMIC); + }else if( fullNames ){ + char *zName = 0; + zName = sqlite3MPrintf(db, "%s.%s", pTab->zName, zCol); + sqlite3VdbeSetColName(v, i, COLNAME_NAME, zName, SQLITE_DYNAMIC); + }else{ + sqlite3VdbeSetColName(v, i, COLNAME_NAME, zCol, SQLITE_TRANSIENT); + } }else{ - sqlite3SelectDelete(pParse->db, yymsp[-1].minor.yy243); + sqlite3VdbeSetColName(v, i, COLNAME_NAME, + sqlite3DbStrDup(db, pEList->a[i].zSpan), SQLITE_DYNAMIC); } - yygotominor.yy190.zStart = yymsp[-2].minor.yy0.z; - yygotominor.yy190.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n]; } - break; - case 229: /* expr ::= expr in_op LP select RP */ -{ - yygotominor.yy190.pExpr = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy190.pExpr, 0, 0); - if( yygotominor.yy190.pExpr ){ - yygotominor.yy190.pExpr->x.pSelect = yymsp[-1].minor.yy243; - ExprSetProperty(yygotominor.yy190.pExpr, EP_xIsSelect); - sqlite3ExprSetHeight(pParse, yygotominor.yy190.pExpr); - }else{ - sqlite3SelectDelete(pParse->db, yymsp[-1].minor.yy243); - } - if( yymsp[-3].minor.yy194 ) yygotominor.yy190.pExpr = sqlite3PExpr(pParse, TK_NOT, yygotominor.yy190.pExpr, 0, 0); - yygotominor.yy190.zStart = yymsp[-4].minor.yy190.zStart; - yygotominor.yy190.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n]; + generateColumnTypes(pParse, pTabList, pEList); +} + +/* +** Given a an expression list (which is really the list of expressions +** that form the result set of a SELECT statement) compute appropriate +** column names for a table that would hold the expression list. +** +** All column names will be unique. +** +** Only the column names are computed. Column.zType, Column.zColl, +** and other fields of Column are zeroed. +** +** Return SQLITE_OK on success. If a memory allocation error occurs, +** store NULL in *paCol and 0 in *pnCol and return SQLITE_NOMEM. +*/ +static int selectColumnsFromExprList( + Parse *pParse, /* Parsing context */ + ExprList *pEList, /* Expr list from which to derive column names */ + int *pnCol, /* Write the number of columns here */ + Column **paCol /* Write the new column list here */ +){ + sqlite3 *db = pParse->db; /* Database connection */ + int i, j; /* Loop counters */ + int cnt; /* Index added to make the name unique */ + Column *aCol, *pCol; /* For looping over result columns */ + int nCol; /* Number of columns in the result set */ + Expr *p; /* Expression for a single result column */ + char *zName; /* Column name */ + int nName; /* Size of name in zName[] */ + + if( pEList ){ + nCol = pEList->nExpr; + aCol = sqlite3DbMallocZero(db, sizeof(aCol[0])*nCol); + testcase( aCol==0 ); + }else{ + nCol = 0; + aCol = 0; } - break; - case 230: /* expr ::= expr in_op nm dbnm */ -{ - SrcList *pSrc = sqlite3SrcListAppend(pParse->db, 0,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0); - yygotominor.yy190.pExpr = sqlite3PExpr(pParse, TK_IN, yymsp[-3].minor.yy190.pExpr, 0, 0); - if( yygotominor.yy190.pExpr ){ - yygotominor.yy190.pExpr->x.pSelect = sqlite3SelectNew(pParse, 0,pSrc,0,0,0,0,0,0,0); - ExprSetProperty(yygotominor.yy190.pExpr, EP_xIsSelect); - sqlite3ExprSetHeight(pParse, yygotominor.yy190.pExpr); + *pnCol = nCol; + *paCol = aCol; + + for(i=0, pCol=aCol; ia[i].pExpr; + assert( p->pRight==0 || ExprHasProperty(p->pRight, EP_IntValue) + || p->pRight->u.zToken==0 || p->pRight->u.zToken[0]!=0 ); + if( (zName = pEList->a[i].zName)!=0 ){ + /* If the column contains an "AS " phrase, use as the name */ + zName = sqlite3DbStrDup(db, zName); }else{ - sqlite3SrcListDelete(pParse->db, pSrc); + Expr *pColExpr = p; /* The expression that is the result column name */ + Table *pTab; /* Table associated with this expression */ + while( pColExpr->op==TK_DOT ){ + pColExpr = pColExpr->pRight; + assert( pColExpr!=0 ); + } + if( pColExpr->op==TK_COLUMN && ALWAYS(pColExpr->pTab!=0) ){ + /* For columns use the column name name */ + int iCol = pColExpr->iColumn; + pTab = pColExpr->pTab; + if( iCol<0 ) iCol = pTab->iPKey; + zName = sqlite3MPrintf(db, "%s", + iCol>=0 ? pTab->aCol[iCol].zName : "rowid"); + }else if( pColExpr->op==TK_ID ){ + assert( !ExprHasProperty(pColExpr, EP_IntValue) ); + zName = sqlite3MPrintf(db, "%s", pColExpr->u.zToken); + }else{ + /* Use the original text of the column expression as its name */ + zName = sqlite3MPrintf(db, "%s", pEList->a[i].zSpan); + } } - if( yymsp[-2].minor.yy194 ) yygotominor.yy190.pExpr = sqlite3PExpr(pParse, TK_NOT, yygotominor.yy190.pExpr, 0, 0); - yygotominor.yy190.zStart = yymsp[-3].minor.yy190.zStart; - yygotominor.yy190.zEnd = yymsp[0].minor.yy0.z ? &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n] : &yymsp[-1].minor.yy0.z[yymsp[-1].minor.yy0.n]; - } - break; - case 231: /* expr ::= EXISTS LP select RP */ -{ - Expr *p = yygotominor.yy190.pExpr = sqlite3PExpr(pParse, TK_EXISTS, 0, 0, 0); - if( p ){ - p->x.pSelect = yymsp[-1].minor.yy243; - ExprSetProperty(p, EP_xIsSelect); - sqlite3ExprSetHeight(pParse, p); - }else{ - sqlite3SelectDelete(pParse->db, yymsp[-1].minor.yy243); + if( db->mallocFailed ){ + sqlite3DbFree(db, zName); + break; + } + + /* Make sure the column name is unique. If the name is not unique, + ** append a integer to the name so that it becomes unique. + */ + nName = sqlite3Strlen30(zName); + for(j=cnt=0; jzName = zName; } - break; - case 232: /* expr ::= CASE case_operand case_exprlist case_else END */ -{ - yygotominor.yy190.pExpr = sqlite3PExpr(pParse, TK_CASE, yymsp[-3].minor.yy72, yymsp[-1].minor.yy72, 0); - if( yygotominor.yy190.pExpr ){ - yygotominor.yy190.pExpr->x.pList = yymsp[-2].minor.yy148; - sqlite3ExprSetHeight(pParse, yygotominor.yy190.pExpr); - }else{ - sqlite3ExprListDelete(pParse->db, yymsp[-2].minor.yy148); + if( db->mallocFailed ){ + for(j=0; jdb,0,&yymsp[-3].minor.yy0,0), yymsp[-1].minor.yy148, yymsp[-9].minor.yy194, - &yymsp[-10].minor.yy0, &yymsp[0].minor.yy0, SQLITE_SO_ASC, yymsp[-7].minor.yy194); + return SQLITE_OK; } - break; - case 244: /* uniqueflag ::= UNIQUE */ - case 293: /* raisetype ::= ABORT */ yytestcase(yyruleno==293); -{yygotominor.yy194 = OE_Abort;} - break; - case 245: /* uniqueflag ::= */ -{yygotominor.yy194 = OE_None;} - break; - case 248: /* idxlist ::= idxlist COMMA nm collate sortorder */ -{ - Expr *p = 0; - if( yymsp[-1].minor.yy0.n>0 ){ - p = sqlite3Expr(pParse->db, TK_COLUMN, 0); - sqlite3ExprSetColl(pParse, p, &yymsp[-1].minor.yy0); + +/* +** Add type and collation information to a column list based on +** a SELECT statement. +** +** The column list presumably came from selectColumnNamesFromExprList(). +** The column list has only names, not types or collations. This +** routine goes through and adds the types and collations. +** +** This routine requires that all identifiers in the SELECT +** statement be resolved. +*/ +static void selectAddColumnTypeAndCollation( + Parse *pParse, /* Parsing contexts */ + int nCol, /* Number of columns */ + Column *aCol, /* List of columns */ + Select *pSelect /* SELECT used to determine types and collations */ +){ + sqlite3 *db = pParse->db; + NameContext sNC; + Column *pCol; + CollSeq *pColl; + int i; + Expr *p; + struct ExprList_item *a; + + assert( pSelect!=0 ); + assert( (pSelect->selFlags & SF_Resolved)!=0 ); + assert( nCol==pSelect->pEList->nExpr || db->mallocFailed ); + if( db->mallocFailed ) return; + memset(&sNC, 0, sizeof(sNC)); + sNC.pSrcList = pSelect->pSrc; + a = pSelect->pEList->a; + for(i=0, pCol=aCol; izType = sqlite3DbStrDup(db, columnType(&sNC, p, 0, 0, 0)); + pCol->affinity = sqlite3ExprAffinity(p); + if( pCol->affinity==0 ) pCol->affinity = SQLITE_AFF_NONE; + pColl = sqlite3ExprCollSeq(pParse, p); + if( pColl ){ + pCol->zColl = sqlite3DbStrDup(db, pColl->zName); + } } - yygotominor.yy148 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy148, p); - sqlite3ExprListSetName(pParse,yygotominor.yy148,&yymsp[-2].minor.yy0,1); - sqlite3ExprListCheckLength(pParse, yygotominor.yy148, "index"); - if( yygotominor.yy148 ) yygotominor.yy148->a[yygotominor.yy148->nExpr-1].sortOrder = (u8)yymsp[0].minor.yy194; } - break; - case 249: /* idxlist ::= nm collate sortorder */ -{ - Expr *p = 0; - if( yymsp[-1].minor.yy0.n>0 ){ - p = sqlite3PExpr(pParse, TK_COLUMN, 0, 0, 0); - sqlite3ExprSetColl(pParse, p, &yymsp[-1].minor.yy0); + +/* +** Given a SELECT statement, generate a Table structure that describes +** the result set of that SELECT. +*/ +SQLITE_PRIVATE Table *sqlite3ResultSetOfSelect(Parse *pParse, Select *pSelect){ + Table *pTab; + sqlite3 *db = pParse->db; + int savedFlags; + + savedFlags = db->flags; + db->flags &= ~SQLITE_FullColNames; + db->flags |= SQLITE_ShortColNames; + sqlite3SelectPrep(pParse, pSelect, 0); + if( pParse->nErr ) return 0; + while( pSelect->pPrior ) pSelect = pSelect->pPrior; + db->flags = savedFlags; + pTab = sqlite3DbMallocZero(db, sizeof(Table) ); + if( pTab==0 ){ + return 0; } - yygotominor.yy148 = sqlite3ExprListAppend(pParse,0, p); - sqlite3ExprListSetName(pParse, yygotominor.yy148, &yymsp[-2].minor.yy0, 1); - sqlite3ExprListCheckLength(pParse, yygotominor.yy148, "index"); - if( yygotominor.yy148 ) yygotominor.yy148->a[yygotominor.yy148->nExpr-1].sortOrder = (u8)yymsp[0].minor.yy194; -} - break; - case 250: /* collate ::= */ -{yygotominor.yy0.z = 0; yygotominor.yy0.n = 0;} - break; - case 252: /* cmd ::= DROP INDEX ifexists fullname */ -{sqlite3DropIndex(pParse, yymsp[0].minor.yy185, yymsp[-1].minor.yy194);} - break; - case 253: /* cmd ::= VACUUM */ - case 254: /* cmd ::= VACUUM nm */ yytestcase(yyruleno==254); -{sqlite3Vacuum(pParse);} - break; - case 255: /* cmd ::= PRAGMA nm dbnm */ -{sqlite3Pragma(pParse,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0,0,0);} - break; - case 256: /* cmd ::= PRAGMA nm dbnm EQ nmnum */ -{sqlite3Pragma(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0,0);} - break; - case 257: /* cmd ::= PRAGMA nm dbnm LP nmnum RP */ -{sqlite3Pragma(pParse,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,&yymsp[-1].minor.yy0,0);} - break; - case 258: /* cmd ::= PRAGMA nm dbnm EQ minus_num */ -{sqlite3Pragma(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0,1);} - break; - case 259: /* cmd ::= PRAGMA nm dbnm LP minus_num RP */ -{sqlite3Pragma(pParse,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,&yymsp[-1].minor.yy0,1);} - break; - case 270: /* cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */ -{ - Token all; - all.z = yymsp[-3].minor.yy0.z; - all.n = (int)(yymsp[0].minor.yy0.z - yymsp[-3].minor.yy0.z) + yymsp[0].minor.yy0.n; - sqlite3FinishTrigger(pParse, yymsp[-1].minor.yy145, &all); -} - break; - case 271: /* trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause */ -{ - sqlite3BeginTrigger(pParse, &yymsp[-7].minor.yy0, &yymsp[-6].minor.yy0, yymsp[-5].minor.yy194, yymsp[-4].minor.yy332.a, yymsp[-4].minor.yy332.b, yymsp[-2].minor.yy185, yymsp[0].minor.yy72, yymsp[-10].minor.yy194, yymsp[-8].minor.yy194); - yygotominor.yy0 = (yymsp[-6].minor.yy0.n==0?yymsp[-7].minor.yy0:yymsp[-6].minor.yy0); -} - break; - case 272: /* trigger_time ::= BEFORE */ - case 275: /* trigger_time ::= */ yytestcase(yyruleno==275); -{ yygotominor.yy194 = TK_BEFORE; } - break; - case 273: /* trigger_time ::= AFTER */ -{ yygotominor.yy194 = TK_AFTER; } - break; - case 274: /* trigger_time ::= INSTEAD OF */ -{ yygotominor.yy194 = TK_INSTEAD;} - break; - case 276: /* trigger_event ::= DELETE|INSERT */ - case 277: /* trigger_event ::= UPDATE */ yytestcase(yyruleno==277); -{yygotominor.yy332.a = yymsp[0].major; yygotominor.yy332.b = 0;} - break; - case 278: /* trigger_event ::= UPDATE OF inscollist */ -{yygotominor.yy332.a = TK_UPDATE; yygotominor.yy332.b = yymsp[0].minor.yy254;} - break; - case 281: /* when_clause ::= */ - case 298: /* key_opt ::= */ yytestcase(yyruleno==298); -{ yygotominor.yy72 = 0; } - break; - case 282: /* when_clause ::= WHEN expr */ - case 299: /* key_opt ::= KEY expr */ yytestcase(yyruleno==299); -{ yygotominor.yy72 = yymsp[0].minor.yy190.pExpr; } - break; - case 283: /* trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */ -{ - assert( yymsp[-2].minor.yy145!=0 ); - yymsp[-2].minor.yy145->pLast->pNext = yymsp[-1].minor.yy145; - yymsp[-2].minor.yy145->pLast = yymsp[-1].minor.yy145; - yygotominor.yy145 = yymsp[-2].minor.yy145; -} - break; - case 284: /* trigger_cmd_list ::= trigger_cmd SEMI */ -{ - assert( yymsp[-1].minor.yy145!=0 ); - yymsp[-1].minor.yy145->pLast = yymsp[-1].minor.yy145; - yygotominor.yy145 = yymsp[-1].minor.yy145; -} - break; - case 285: /* trigger_cmd ::= UPDATE orconf nm SET setlist where_opt */ -{ yygotominor.yy145 = sqlite3TriggerUpdateStep(pParse->db, &yymsp[-3].minor.yy0, yymsp[-1].minor.yy148, yymsp[0].minor.yy72, yymsp[-4].minor.yy194); } - break; - case 286: /* trigger_cmd ::= insert_cmd INTO nm inscollist_opt VALUES LP itemlist RP */ -{yygotominor.yy145 = sqlite3TriggerInsertStep(pParse->db, &yymsp[-5].minor.yy0, yymsp[-4].minor.yy254, yymsp[-1].minor.yy148, 0, yymsp[-7].minor.yy194);} - break; - case 287: /* trigger_cmd ::= insert_cmd INTO nm inscollist_opt select */ -{yygotominor.yy145 = sqlite3TriggerInsertStep(pParse->db, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy254, 0, yymsp[0].minor.yy243, yymsp[-4].minor.yy194);} - break; - case 288: /* trigger_cmd ::= DELETE FROM nm where_opt */ -{yygotominor.yy145 = sqlite3TriggerDeleteStep(pParse->db, &yymsp[-1].minor.yy0, yymsp[0].minor.yy72);} - break; - case 289: /* trigger_cmd ::= select */ -{yygotominor.yy145 = sqlite3TriggerSelectStep(pParse->db, yymsp[0].minor.yy243); } - break; - case 290: /* expr ::= RAISE LP IGNORE RP */ -{ - yygotominor.yy190.pExpr = sqlite3PExpr(pParse, TK_RAISE, 0, 0, 0); - if( yygotominor.yy190.pExpr ){ - yygotominor.yy190.pExpr->affinity = OE_Ignore; + /* The sqlite3ResultSetOfSelect() is only used n contexts where lookaside + ** is disabled */ + assert( db->lookaside.bEnabled==0 ); + pTab->nRef = 1; + pTab->zName = 0; + pTab->nRowEst = 1000000; + selectColumnsFromExprList(pParse, pSelect->pEList, &pTab->nCol, &pTab->aCol); + selectAddColumnTypeAndCollation(pParse, pTab->nCol, pTab->aCol, pSelect); + pTab->iPKey = -1; + if( db->mallocFailed ){ + sqlite3DeleteTable(db, pTab); + return 0; } - yygotominor.yy190.zStart = yymsp[-3].minor.yy0.z; - yygotominor.yy190.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n]; + return pTab; } - break; - case 291: /* expr ::= RAISE LP raisetype COMMA nm RP */ -{ - yygotominor.yy190.pExpr = sqlite3PExpr(pParse, TK_RAISE, 0, 0, &yymsp[-1].minor.yy0); - if( yygotominor.yy190.pExpr ) { - yygotominor.yy190.pExpr->affinity = (char)yymsp[-3].minor.yy194; + +/* +** Get a VDBE for the given parser context. Create a new one if necessary. +** If an error occurs, return NULL and leave a message in pParse. +*/ +SQLITE_PRIVATE Vdbe *sqlite3GetVdbe(Parse *pParse){ + Vdbe *v = pParse->pVdbe; + if( v==0 ){ + v = pParse->pVdbe = sqlite3VdbeCreate(pParse->db); +#ifndef SQLITE_OMIT_TRACE + if( v ){ + sqlite3VdbeAddOp0(v, OP_Trace); + } +#endif } - yygotominor.yy190.zStart = yymsp[-5].minor.yy0.z; - yygotominor.yy190.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n]; -} - break; - case 292: /* raisetype ::= ROLLBACK */ -{yygotominor.yy194 = OE_Rollback;} - break; - case 294: /* raisetype ::= FAIL */ -{yygotominor.yy194 = OE_Fail;} - break; - case 295: /* cmd ::= DROP TRIGGER ifexists fullname */ -{ - sqlite3DropTrigger(pParse,yymsp[0].minor.yy185,yymsp[-1].minor.yy194); -} - break; - case 296: /* cmd ::= ATTACH database_kw_opt expr AS expr key_opt */ -{ - sqlite3Attach(pParse, yymsp[-3].minor.yy190.pExpr, yymsp[-1].minor.yy190.pExpr, yymsp[0].minor.yy72); -} - break; - case 297: /* cmd ::= DETACH database_kw_opt expr */ -{ - sqlite3Detach(pParse, yymsp[0].minor.yy190.pExpr); -} - break; - case 302: /* cmd ::= REINDEX */ -{sqlite3Reindex(pParse, 0, 0);} - break; - case 303: /* cmd ::= REINDEX nm dbnm */ -{sqlite3Reindex(pParse, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0);} - break; - case 304: /* cmd ::= ANALYZE */ -{sqlite3Analyze(pParse, 0, 0);} - break; - case 305: /* cmd ::= ANALYZE nm dbnm */ -{sqlite3Analyze(pParse, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0);} - break; - case 306: /* cmd ::= ALTER TABLE fullname RENAME TO nm */ -{ - sqlite3AlterRenameTable(pParse,yymsp[-3].minor.yy185,&yymsp[0].minor.yy0); -} - break; - case 307: /* cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt column */ -{ - sqlite3AlterFinishAddColumn(pParse, &yymsp[0].minor.yy0); -} - break; - case 308: /* add_column_fullname ::= fullname */ -{ - pParse->db->lookaside.bEnabled = 0; - sqlite3AlterBeginAddColumn(pParse, yymsp[0].minor.yy185); -} - break; - case 311: /* cmd ::= create_vtab */ -{sqlite3VtabFinishParse(pParse,0);} - break; - case 312: /* cmd ::= create_vtab LP vtabarglist RP */ -{sqlite3VtabFinishParse(pParse,&yymsp[0].minor.yy0);} - break; - case 313: /* create_vtab ::= createkw VIRTUAL TABLE nm dbnm USING nm */ -{ - sqlite3VtabBeginParse(pParse, &yymsp[-3].minor.yy0, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0); + return v; } - break; - case 316: /* vtabarg ::= */ -{sqlite3VtabArgInit(pParse);} - break; - case 318: /* vtabargtoken ::= ANY */ - case 319: /* vtabargtoken ::= lp anylist RP */ yytestcase(yyruleno==319); - case 320: /* lp ::= LP */ yytestcase(yyruleno==320); -{sqlite3VtabArgExtend(pParse,&yymsp[0].minor.yy0);} - break; - default: - /* (0) input ::= cmdlist */ yytestcase(yyruleno==0); - /* (1) cmdlist ::= cmdlist ecmd */ yytestcase(yyruleno==1); - /* (2) cmdlist ::= ecmd */ yytestcase(yyruleno==2); - /* (3) ecmd ::= SEMI */ yytestcase(yyruleno==3); - /* (4) ecmd ::= explain cmdx SEMI */ yytestcase(yyruleno==4); - /* (10) trans_opt ::= */ yytestcase(yyruleno==10); - /* (11) trans_opt ::= TRANSACTION */ yytestcase(yyruleno==11); - /* (12) trans_opt ::= TRANSACTION nm */ yytestcase(yyruleno==12); - /* (20) savepoint_opt ::= SAVEPOINT */ yytestcase(yyruleno==20); - /* (21) savepoint_opt ::= */ yytestcase(yyruleno==21); - /* (25) cmd ::= create_table create_table_args */ yytestcase(yyruleno==25); - /* (34) columnlist ::= columnlist COMMA column */ yytestcase(yyruleno==34); - /* (35) columnlist ::= column */ yytestcase(yyruleno==35); - /* (44) type ::= */ yytestcase(yyruleno==44); - /* (51) signed ::= plus_num */ yytestcase(yyruleno==51); - /* (52) signed ::= minus_num */ yytestcase(yyruleno==52); - /* (53) carglist ::= carglist carg */ yytestcase(yyruleno==53); - /* (54) carglist ::= */ yytestcase(yyruleno==54); - /* (55) carg ::= CONSTRAINT nm ccons */ yytestcase(yyruleno==55); - /* (56) carg ::= ccons */ yytestcase(yyruleno==56); - /* (62) ccons ::= NULL onconf */ yytestcase(yyruleno==62); - /* (89) conslist ::= conslist COMMA tcons */ yytestcase(yyruleno==89); - /* (90) conslist ::= conslist tcons */ yytestcase(yyruleno==90); - /* (91) conslist ::= tcons */ yytestcase(yyruleno==91); - /* (92) tcons ::= CONSTRAINT nm */ yytestcase(yyruleno==92); - /* (268) plus_opt ::= PLUS */ yytestcase(yyruleno==268); - /* (269) plus_opt ::= */ yytestcase(yyruleno==269); - /* (279) foreach_clause ::= */ yytestcase(yyruleno==279); - /* (280) foreach_clause ::= FOR EACH ROW */ yytestcase(yyruleno==280); - /* (300) database_kw_opt ::= DATABASE */ yytestcase(yyruleno==300); - /* (301) database_kw_opt ::= */ yytestcase(yyruleno==301); - /* (309) kwcolumn_opt ::= */ yytestcase(yyruleno==309); - /* (310) kwcolumn_opt ::= COLUMNKW */ yytestcase(yyruleno==310); - /* (314) vtabarglist ::= vtabarg */ yytestcase(yyruleno==314); - /* (315) vtabarglist ::= vtabarglist COMMA vtabarg */ yytestcase(yyruleno==315); - /* (317) vtabarg ::= vtabarg vtabargtoken */ yytestcase(yyruleno==317); - /* (321) anylist ::= */ yytestcase(yyruleno==321); - /* (322) anylist ::= anylist LP anylist RP */ yytestcase(yyruleno==322); - /* (323) anylist ::= anylist ANY */ yytestcase(yyruleno==323); - break; - }; - yygoto = yyRuleInfo[yyruleno].lhs; - yysize = yyRuleInfo[yyruleno].nrhs; - yypParser->yyidx -= yysize; - yyact = yy_find_reduce_action(yymsp[-yysize].stateno,(YYCODETYPE)yygoto); - if( yyact < YYNSTATE ){ -#ifdef NDEBUG - /* If we are not debugging and the reduce action popped at least - ** one element off the stack, then we can push the new element back - ** onto the stack here, and skip the stack overflow test in yy_shift(). - ** That gives a significant speed improvement. */ - if( yysize ){ - yypParser->yyidx++; - yymsp -= yysize-1; - yymsp->stateno = (YYACTIONTYPE)yyact; - yymsp->major = (YYCODETYPE)yygoto; - yymsp->minor = yygotominor; - }else -#endif - { - yy_shift(yypParser,yyact,yygoto,&yygotominor); + + +/* +** Compute the iLimit and iOffset fields of the SELECT based on the +** pLimit and pOffset expressions. pLimit and pOffset hold the expressions +** that appear in the original SQL statement after the LIMIT and OFFSET +** keywords. Or NULL if those keywords are omitted. iLimit and iOffset +** are the integer memory register numbers for counters used to compute +** the limit and offset. If there is no limit and/or offset, then +** iLimit and iOffset are negative. +** +** This routine changes the values of iLimit and iOffset only if +** a limit or offset is defined by pLimit and pOffset. iLimit and +** iOffset should have been preset to appropriate default values +** (usually but not always -1) prior to calling this routine. +** Only if pLimit!=0 or pOffset!=0 do the limit registers get +** redefined. The UNION ALL operator uses this property to force +** the reuse of the same limit and offset registers across multiple +** SELECT statements. +*/ +static void computeLimitRegisters(Parse *pParse, Select *p, int iBreak){ + Vdbe *v = 0; + int iLimit = 0; + int iOffset; + int addr1, n; + if( p->iLimit ) return; + + /* + ** "LIMIT -1" always shows all rows. There is some + ** contraversy about what the correct behavior should be. + ** The current implementation interprets "LIMIT 0" to mean + ** no rows. + */ + sqlite3ExprCacheClear(pParse); + assert( p->pOffset==0 || p->pLimit!=0 ); + if( p->pLimit ){ + p->iLimit = iLimit = ++pParse->nMem; + v = sqlite3GetVdbe(pParse); + if( NEVER(v==0) ) return; /* VDBE should have already been allocated */ + if( sqlite3ExprIsInteger(p->pLimit, &n) ){ + sqlite3VdbeAddOp2(v, OP_Integer, n, iLimit); + VdbeComment((v, "LIMIT counter")); + if( n==0 ){ + sqlite3VdbeAddOp2(v, OP_Goto, 0, iBreak); + }else{ + if( p->nSelectRow > (double)n ) p->nSelectRow = (double)n; + } + }else{ + sqlite3ExprCode(pParse, p->pLimit, iLimit); + sqlite3VdbeAddOp1(v, OP_MustBeInt, iLimit); + VdbeComment((v, "LIMIT counter")); + sqlite3VdbeAddOp2(v, OP_IfZero, iLimit, iBreak); + } + if( p->pOffset ){ + p->iOffset = iOffset = ++pParse->nMem; + pParse->nMem++; /* Allocate an extra register for limit+offset */ + sqlite3ExprCode(pParse, p->pOffset, iOffset); + sqlite3VdbeAddOp1(v, OP_MustBeInt, iOffset); + VdbeComment((v, "OFFSET counter")); + addr1 = sqlite3VdbeAddOp1(v, OP_IfPos, iOffset); + sqlite3VdbeAddOp2(v, OP_Integer, 0, iOffset); + sqlite3VdbeJumpHere(v, addr1); + sqlite3VdbeAddOp3(v, OP_Add, iLimit, iOffset, iOffset+1); + VdbeComment((v, "LIMIT+OFFSET")); + addr1 = sqlite3VdbeAddOp1(v, OP_IfPos, iLimit); + sqlite3VdbeAddOp2(v, OP_Integer, -1, iOffset+1); + sqlite3VdbeJumpHere(v, addr1); } + } +} + +#ifndef SQLITE_OMIT_COMPOUND_SELECT +/* +** Return the appropriate collating sequence for the iCol-th column of +** the result set for the compound-select statement "p". Return NULL if +** the column has no default collating sequence. +** +** The collating sequence for the compound select is taken from the +** left-most term of the select that has a collating sequence. +*/ +static CollSeq *multiSelectCollSeq(Parse *pParse, Select *p, int iCol){ + CollSeq *pRet; + if( p->pPrior ){ + pRet = multiSelectCollSeq(pParse, p->pPrior, iCol); }else{ - assert( yyact == YYNSTATE + YYNRULE + 1 ); - yy_accept(yypParser); + pRet = 0; + } + assert( iCol>=0 ); + if( pRet==0 && iColpEList->nExpr ){ + pRet = sqlite3ExprCollSeq(pParse, p->pEList->a[iCol].pExpr); + } + return pRet; +} +#endif /* SQLITE_OMIT_COMPOUND_SELECT */ + +/* Forward reference */ +static int multiSelectOrderBy( + Parse *pParse, /* Parsing context */ + Select *p, /* The right-most of SELECTs to be coded */ + SelectDest *pDest /* What to do with query results */ +); + + +#ifndef SQLITE_OMIT_COMPOUND_SELECT +/* +** This routine is called to process a compound query form from +** two or more separate queries using UNION, UNION ALL, EXCEPT, or +** INTERSECT +** +** "p" points to the right-most of the two queries. the query on the +** left is p->pPrior. The left query could also be a compound query +** in which case this routine will be called recursively. +** +** The results of the total query are to be written into a destination +** of type eDest with parameter iParm. +** +** Example 1: Consider a three-way compound SQL statement. +** +** SELECT a FROM t1 UNION SELECT b FROM t2 UNION SELECT c FROM t3 +** +** This statement is parsed up as follows: +** +** SELECT c FROM t3 +** | +** `-----> SELECT b FROM t2 +** | +** `------> SELECT a FROM t1 +** +** The arrows in the diagram above represent the Select.pPrior pointer. +** So if this routine is called with p equal to the t3 query, then +** pPrior will be the t2 query. p->op will be TK_UNION in this case. +** +** Notice that because of the way SQLite parses compound SELECTs, the +** individual selects always group from left to right. +*/ +static int multiSelect( + Parse *pParse, /* Parsing context */ + Select *p, /* The right-most of SELECTs to be coded */ + SelectDest *pDest /* What to do with query results */ +){ + int rc = SQLITE_OK; /* Success code from a subroutine */ + Select *pPrior; /* Another SELECT immediately to our left */ + Vdbe *v; /* Generate code to this VDBE */ + SelectDest dest; /* Alternative data destination */ + Select *pDelete = 0; /* Chain of simple selects to delete */ + sqlite3 *db; /* Database connection */ +#ifndef SQLITE_OMIT_EXPLAIN + int iSub1; /* EQP id of left-hand query */ + int iSub2; /* EQP id of right-hand query */ +#endif + + /* Make sure there is no ORDER BY or LIMIT clause on prior SELECTs. Only + ** the last (right-most) SELECT in the series may have an ORDER BY or LIMIT. + */ + assert( p && p->pPrior ); /* Calling function guarantees this much */ + db = pParse->db; + pPrior = p->pPrior; + assert( pPrior->pRightmost!=pPrior ); + assert( pPrior->pRightmost==p->pRightmost ); + dest = *pDest; + if( pPrior->pOrderBy ){ + sqlite3ErrorMsg(pParse,"ORDER BY clause should come after %s not before", + selectOpName(p->op)); + rc = 1; + goto multi_select_end; + } + if( pPrior->pLimit ){ + sqlite3ErrorMsg(pParse,"LIMIT clause should come after %s not before", + selectOpName(p->op)); + rc = 1; + goto multi_select_end; + } + + v = sqlite3GetVdbe(pParse); + assert( v!=0 ); /* The VDBE already created by calling function */ + + /* Create the destination temporary table if necessary + */ + if( dest.eDest==SRT_EphemTab ){ + assert( p->pEList ); + sqlite3VdbeAddOp2(v, OP_OpenEphemeral, dest.iParm, p->pEList->nExpr); + sqlite3VdbeChangeP5(v, BTREE_UNORDERED); + dest.eDest = SRT_Table; + } + + /* Make sure all SELECTs in the statement have the same number of elements + ** in their result sets. + */ + assert( p->pEList && pPrior->pEList ); + if( p->pEList->nExpr!=pPrior->pEList->nExpr ){ + if( p->selFlags & SF_Values ){ + sqlite3ErrorMsg(pParse, "all VALUES must have the same number of terms"); + }else{ + sqlite3ErrorMsg(pParse, "SELECTs to the left and right of %s" + " do not have the same number of result columns", selectOpName(p->op)); + } + rc = 1; + goto multi_select_end; + } + + /* Compound SELECTs that have an ORDER BY clause are handled separately. + */ + if( p->pOrderBy ){ + return multiSelectOrderBy(pParse, p, pDest); + } + + /* Generate code for the left and right SELECT statements. + */ + switch( p->op ){ + case TK_ALL: { + int addr = 0; + int nLimit; + assert( !pPrior->pLimit ); + pPrior->pLimit = p->pLimit; + pPrior->pOffset = p->pOffset; + explainSetInteger(iSub1, pParse->iNextSelectId); + rc = sqlite3Select(pParse, pPrior, &dest); + p->pLimit = 0; + p->pOffset = 0; + if( rc ){ + goto multi_select_end; + } + p->pPrior = 0; + p->iLimit = pPrior->iLimit; + p->iOffset = pPrior->iOffset; + if( p->iLimit ){ + addr = sqlite3VdbeAddOp1(v, OP_IfZero, p->iLimit); + VdbeComment((v, "Jump ahead if LIMIT reached")); + } + explainSetInteger(iSub2, pParse->iNextSelectId); + rc = sqlite3Select(pParse, p, &dest); + testcase( rc!=SQLITE_OK ); + pDelete = p->pPrior; + p->pPrior = pPrior; + p->nSelectRow += pPrior->nSelectRow; + if( pPrior->pLimit + && sqlite3ExprIsInteger(pPrior->pLimit, &nLimit) + && p->nSelectRow > (double)nLimit + ){ + p->nSelectRow = (double)nLimit; + } + if( addr ){ + sqlite3VdbeJumpHere(v, addr); + } + break; + } + case TK_EXCEPT: + case TK_UNION: { + int unionTab; /* Cursor number of the temporary table holding result */ + u8 op = 0; /* One of the SRT_ operations to apply to self */ + int priorOp; /* The SRT_ operation to apply to prior selects */ + Expr *pLimit, *pOffset; /* Saved values of p->nLimit and p->nOffset */ + int addr; + SelectDest uniondest; + + testcase( p->op==TK_EXCEPT ); + testcase( p->op==TK_UNION ); + priorOp = SRT_Union; + if( dest.eDest==priorOp && ALWAYS(!p->pLimit &&!p->pOffset) ){ + /* We can reuse a temporary table generated by a SELECT to our + ** right. + */ + assert( p->pRightmost!=p ); /* Can only happen for leftward elements + ** of a 3-way or more compound */ + assert( p->pLimit==0 ); /* Not allowed on leftward elements */ + assert( p->pOffset==0 ); /* Not allowed on leftward elements */ + unionTab = dest.iParm; + }else{ + /* We will need to create our own temporary table to hold the + ** intermediate results. + */ + unionTab = pParse->nTab++; + assert( p->pOrderBy==0 ); + addr = sqlite3VdbeAddOp2(v, OP_OpenEphemeral, unionTab, 0); + assert( p->addrOpenEphm[0] == -1 ); + p->addrOpenEphm[0] = addr; + p->pRightmost->selFlags |= SF_UsesEphemeral; + assert( p->pEList ); + } + + /* Code the SELECT statements to our left + */ + assert( !pPrior->pOrderBy ); + sqlite3SelectDestInit(&uniondest, priorOp, unionTab); + explainSetInteger(iSub1, pParse->iNextSelectId); + rc = sqlite3Select(pParse, pPrior, &uniondest); + if( rc ){ + goto multi_select_end; + } + + /* Code the current SELECT statement + */ + if( p->op==TK_EXCEPT ){ + op = SRT_Except; + }else{ + assert( p->op==TK_UNION ); + op = SRT_Union; + } + p->pPrior = 0; + pLimit = p->pLimit; + p->pLimit = 0; + pOffset = p->pOffset; + p->pOffset = 0; + uniondest.eDest = op; + explainSetInteger(iSub2, pParse->iNextSelectId); + rc = sqlite3Select(pParse, p, &uniondest); + testcase( rc!=SQLITE_OK ); + /* Query flattening in sqlite3Select() might refill p->pOrderBy. + ** Be sure to delete p->pOrderBy, therefore, to avoid a memory leak. */ + sqlite3ExprListDelete(db, p->pOrderBy); + pDelete = p->pPrior; + p->pPrior = pPrior; + p->pOrderBy = 0; + if( p->op==TK_UNION ) p->nSelectRow += pPrior->nSelectRow; + sqlite3ExprDelete(db, p->pLimit); + p->pLimit = pLimit; + p->pOffset = pOffset; + p->iLimit = 0; + p->iOffset = 0; + + /* Convert the data in the temporary table into whatever form + ** it is that we currently need. + */ + assert( unionTab==dest.iParm || dest.eDest!=priorOp ); + if( dest.eDest!=priorOp ){ + int iCont, iBreak, iStart; + assert( p->pEList ); + if( dest.eDest==SRT_Output ){ + Select *pFirst = p; + while( pFirst->pPrior ) pFirst = pFirst->pPrior; + generateColumnNames(pParse, 0, pFirst->pEList); + } + iBreak = sqlite3VdbeMakeLabel(v); + iCont = sqlite3VdbeMakeLabel(v); + computeLimitRegisters(pParse, p, iBreak); + sqlite3VdbeAddOp2(v, OP_Rewind, unionTab, iBreak); + iStart = sqlite3VdbeCurrentAddr(v); + selectInnerLoop(pParse, p, p->pEList, unionTab, p->pEList->nExpr, + 0, -1, &dest, iCont, iBreak); + sqlite3VdbeResolveLabel(v, iCont); + sqlite3VdbeAddOp2(v, OP_Next, unionTab, iStart); + sqlite3VdbeResolveLabel(v, iBreak); + sqlite3VdbeAddOp2(v, OP_Close, unionTab, 0); + } + break; + } + default: assert( p->op==TK_INTERSECT ); { + int tab1, tab2; + int iCont, iBreak, iStart; + Expr *pLimit, *pOffset; + int addr; + SelectDest intersectdest; + int r1; + + /* INTERSECT is different from the others since it requires + ** two temporary tables. Hence it has its own case. Begin + ** by allocating the tables we will need. + */ + tab1 = pParse->nTab++; + tab2 = pParse->nTab++; + assert( p->pOrderBy==0 ); + + addr = sqlite3VdbeAddOp2(v, OP_OpenEphemeral, tab1, 0); + assert( p->addrOpenEphm[0] == -1 ); + p->addrOpenEphm[0] = addr; + p->pRightmost->selFlags |= SF_UsesEphemeral; + assert( p->pEList ); + + /* Code the SELECTs to our left into temporary table "tab1". + */ + sqlite3SelectDestInit(&intersectdest, SRT_Union, tab1); + explainSetInteger(iSub1, pParse->iNextSelectId); + rc = sqlite3Select(pParse, pPrior, &intersectdest); + if( rc ){ + goto multi_select_end; + } + + /* Code the current SELECT into temporary table "tab2" + */ + addr = sqlite3VdbeAddOp2(v, OP_OpenEphemeral, tab2, 0); + assert( p->addrOpenEphm[1] == -1 ); + p->addrOpenEphm[1] = addr; + p->pPrior = 0; + pLimit = p->pLimit; + p->pLimit = 0; + pOffset = p->pOffset; + p->pOffset = 0; + intersectdest.iParm = tab2; + explainSetInteger(iSub2, pParse->iNextSelectId); + rc = sqlite3Select(pParse, p, &intersectdest); + testcase( rc!=SQLITE_OK ); + pDelete = p->pPrior; + p->pPrior = pPrior; + if( p->nSelectRow>pPrior->nSelectRow ) p->nSelectRow = pPrior->nSelectRow; + sqlite3ExprDelete(db, p->pLimit); + p->pLimit = pLimit; + p->pOffset = pOffset; + + /* Generate code to take the intersection of the two temporary + ** tables. + */ + assert( p->pEList ); + if( dest.eDest==SRT_Output ){ + Select *pFirst = p; + while( pFirst->pPrior ) pFirst = pFirst->pPrior; + generateColumnNames(pParse, 0, pFirst->pEList); + } + iBreak = sqlite3VdbeMakeLabel(v); + iCont = sqlite3VdbeMakeLabel(v); + computeLimitRegisters(pParse, p, iBreak); + sqlite3VdbeAddOp2(v, OP_Rewind, tab1, iBreak); + r1 = sqlite3GetTempReg(pParse); + iStart = sqlite3VdbeAddOp2(v, OP_RowKey, tab1, r1); + sqlite3VdbeAddOp4Int(v, OP_NotFound, tab2, iCont, r1, 0); + sqlite3ReleaseTempReg(pParse, r1); + selectInnerLoop(pParse, p, p->pEList, tab1, p->pEList->nExpr, + 0, -1, &dest, iCont, iBreak); + sqlite3VdbeResolveLabel(v, iCont); + sqlite3VdbeAddOp2(v, OP_Next, tab1, iStart); + sqlite3VdbeResolveLabel(v, iBreak); + sqlite3VdbeAddOp2(v, OP_Close, tab2, 0); + sqlite3VdbeAddOp2(v, OP_Close, tab1, 0); + break; + } + } + + explainComposite(pParse, p->op, iSub1, iSub2, p->op!=TK_ALL); + + /* Compute collating sequences used by + ** temporary tables needed to implement the compound select. + ** Attach the KeyInfo structure to all temporary tables. + ** + ** This section is run by the right-most SELECT statement only. + ** SELECT statements to the left always skip this part. The right-most + ** SELECT might also skip this part if it has no ORDER BY clause and + ** no temp tables are required. + */ + if( p->selFlags & SF_UsesEphemeral ){ + int i; /* Loop counter */ + KeyInfo *pKeyInfo; /* Collating sequence for the result set */ + Select *pLoop; /* For looping through SELECT statements */ + CollSeq **apColl; /* For looping through pKeyInfo->aColl[] */ + int nCol; /* Number of columns in result set */ + + assert( p->pRightmost==p ); + nCol = p->pEList->nExpr; + pKeyInfo = sqlite3DbMallocZero(db, + sizeof(*pKeyInfo)+nCol*(sizeof(CollSeq*) + 1)); + if( !pKeyInfo ){ + rc = SQLITE_NOMEM; + goto multi_select_end; + } + + pKeyInfo->enc = ENC(db); + pKeyInfo->nField = (u16)nCol; + + for(i=0, apColl=pKeyInfo->aColl; ipDfltColl; + } + } + + for(pLoop=p; pLoop; pLoop=pLoop->pPrior){ + for(i=0; i<2; i++){ + int addr = pLoop->addrOpenEphm[i]; + if( addr<0 ){ + /* If [0] is unused then [1] is also unused. So we can + ** always safely abort as soon as the first unused slot is found */ + assert( pLoop->addrOpenEphm[1]<0 ); + break; + } + sqlite3VdbeChangeP2(v, addr, nCol); + sqlite3VdbeChangeP4(v, addr, (char*)pKeyInfo, P4_KEYINFO); + pLoop->addrOpenEphm[i] = -1; + } + } + sqlite3DbFree(db, pKeyInfo); } + +multi_select_end: + pDest->iMem = dest.iMem; + pDest->nMem = dest.nMem; + sqlite3SelectDelete(db, pDelete); + return rc; } +#endif /* SQLITE_OMIT_COMPOUND_SELECT */ + +/* +** Code an output subroutine for a coroutine implementation of a +** SELECT statment. +** +** The data to be output is contained in pIn->iMem. There are +** pIn->nMem columns to be output. pDest is where the output should +** be sent. +** +** regReturn is the number of the register holding the subroutine +** return address. +** +** If regPrev>0 then it is the first register in a vector that +** records the previous output. mem[regPrev] is a flag that is false +** if there has been no previous output. If regPrev>0 then code is +** generated to suppress duplicates. pKeyInfo is used for comparing +** keys. +** +** If the LIMIT found in p->iLimit is reached, jump immediately to +** iBreak. +*/ +static int generateOutputSubroutine( + Parse *pParse, /* Parsing context */ + Select *p, /* The SELECT statement */ + SelectDest *pIn, /* Coroutine supplying data */ + SelectDest *pDest, /* Where to send the data */ + int regReturn, /* The return address register */ + int regPrev, /* Previous result register. No uniqueness if 0 */ + KeyInfo *pKeyInfo, /* For comparing with previous entry */ + int p4type, /* The p4 type for pKeyInfo */ + int iBreak /* Jump here if we hit the LIMIT */ +){ + Vdbe *v = pParse->pVdbe; + int iContinue; + int addr; + + addr = sqlite3VdbeCurrentAddr(v); + iContinue = sqlite3VdbeMakeLabel(v); + + /* Suppress duplicates for UNION, EXCEPT, and INTERSECT + */ + if( regPrev ){ + int j1, j2; + j1 = sqlite3VdbeAddOp1(v, OP_IfNot, regPrev); + j2 = sqlite3VdbeAddOp4(v, OP_Compare, pIn->iMem, regPrev+1, pIn->nMem, + (char*)pKeyInfo, p4type); + sqlite3VdbeAddOp3(v, OP_Jump, j2+2, iContinue, j2+2); + sqlite3VdbeJumpHere(v, j1); + sqlite3ExprCodeCopy(pParse, pIn->iMem, regPrev+1, pIn->nMem); + sqlite3VdbeAddOp2(v, OP_Integer, 1, regPrev); + } + if( pParse->db->mallocFailed ) return 0; + + /* Suppress the the first OFFSET entries if there is an OFFSET clause + */ + codeOffset(v, p, iContinue); + + switch( pDest->eDest ){ + /* Store the result as data using a unique key. + */ + case SRT_Table: + case SRT_EphemTab: { + int r1 = sqlite3GetTempReg(pParse); + int r2 = sqlite3GetTempReg(pParse); + testcase( pDest->eDest==SRT_Table ); + testcase( pDest->eDest==SRT_EphemTab ); + sqlite3VdbeAddOp3(v, OP_MakeRecord, pIn->iMem, pIn->nMem, r1); + sqlite3VdbeAddOp2(v, OP_NewRowid, pDest->iParm, r2); + sqlite3VdbeAddOp3(v, OP_Insert, pDest->iParm, r1, r2); + sqlite3VdbeChangeP5(v, OPFLAG_APPEND); + sqlite3ReleaseTempReg(pParse, r2); + sqlite3ReleaseTempReg(pParse, r1); + break; + } + +#ifndef SQLITE_OMIT_SUBQUERY + /* If we are creating a set for an "expr IN (SELECT ...)" construct, + ** then there should be a single item on the stack. Write this + ** item into the set table with bogus data. + */ + case SRT_Set: { + int r1; + assert( pIn->nMem==1 ); + p->affinity = + sqlite3CompareAffinity(p->pEList->a[0].pExpr, pDest->affinity); + r1 = sqlite3GetTempReg(pParse); + sqlite3VdbeAddOp4(v, OP_MakeRecord, pIn->iMem, 1, r1, &p->affinity, 1); + sqlite3ExprCacheAffinityChange(pParse, pIn->iMem, 1); + sqlite3VdbeAddOp2(v, OP_IdxInsert, pDest->iParm, r1); + sqlite3ReleaseTempReg(pParse, r1); + break; + } + +#if 0 /* Never occurs on an ORDER BY query */ + /* If any row exist in the result set, record that fact and abort. + */ + case SRT_Exists: { + sqlite3VdbeAddOp2(v, OP_Integer, 1, pDest->iParm); + /* The LIMIT clause will terminate the loop for us */ + break; + } +#endif + + /* If this is a scalar select that is part of an expression, then + ** store the results in the appropriate memory cell and break out + ** of the scan loop. + */ + case SRT_Mem: { + assert( pIn->nMem==1 ); + sqlite3ExprCodeMove(pParse, pIn->iMem, pDest->iParm, 1); + /* The LIMIT clause will jump out of the loop for us */ + break; + } +#endif /* #ifndef SQLITE_OMIT_SUBQUERY */ + + /* The results are stored in a sequence of registers + ** starting at pDest->iMem. Then the co-routine yields. + */ + case SRT_Coroutine: { + if( pDest->iMem==0 ){ + pDest->iMem = sqlite3GetTempRange(pParse, pIn->nMem); + pDest->nMem = pIn->nMem; + } + sqlite3ExprCodeMove(pParse, pIn->iMem, pDest->iMem, pDest->nMem); + sqlite3VdbeAddOp1(v, OP_Yield, pDest->iParm); + break; + } + + /* If none of the above, then the result destination must be + ** SRT_Output. This routine is never called with any other + ** destination other than the ones handled above or SRT_Output. + ** + ** For SRT_Output, results are stored in a sequence of registers. + ** Then the OP_ResultRow opcode is used to cause sqlite3_step() to + ** return the next row of result. + */ + default: { + assert( pDest->eDest==SRT_Output ); + sqlite3VdbeAddOp2(v, OP_ResultRow, pIn->iMem, pIn->nMem); + sqlite3ExprCacheAffinityChange(pParse, pIn->iMem, pIn->nMem); + break; + } + } + + /* Jump to the end of the loop if the LIMIT is reached. + */ + if( p->iLimit ){ + sqlite3VdbeAddOp3(v, OP_IfZero, p->iLimit, iBreak, -1); + } + + /* Generate the subroutine return + */ + sqlite3VdbeResolveLabel(v, iContinue); + sqlite3VdbeAddOp1(v, OP_Return, regReturn); + + return addr; +} + +/* +** Alternative compound select code generator for cases when there +** is an ORDER BY clause. +** +** We assume a query of the following form: +** +** ORDER BY +** +** is one of UNION ALL, UNION, EXCEPT, or INTERSECT. The idea +** is to code both and with the ORDER BY clause as +** co-routines. Then run the co-routines in parallel and merge the results +** into the output. In addition to the two coroutines (called selectA and +** selectB) there are 7 subroutines: +** +** outA: Move the output of the selectA coroutine into the output +** of the compound query. +** +** outB: Move the output of the selectB coroutine into the output +** of the compound query. (Only generated for UNION and +** UNION ALL. EXCEPT and INSERTSECT never output a row that +** appears only in B.) +** +** AltB: Called when there is data from both coroutines and AB. +** +** EofA: Called when data is exhausted from selectA. +** +** EofB: Called when data is exhausted from selectB. +** +** The implementation of the latter five subroutines depend on which +** is used: +** +** +** UNION ALL UNION EXCEPT INTERSECT +** ------------- ----------------- -------------- ----------------- +** AltB: outA, nextA outA, nextA outA, nextA nextA +** +** AeqB: outA, nextA nextA nextA outA, nextA +** +** AgtB: outB, nextB outB, nextB nextB nextB +** +** EofA: outB, nextB outB, nextB halt halt +** +** EofB: outA, nextA outA, nextA outA, nextA halt +** +** In the AltB, AeqB, and AgtB subroutines, an EOF on A following nextA +** causes an immediate jump to EofA and an EOF on B following nextB causes +** an immediate jump to EofB. Within EofA and EofB, and EOF on entry or +** following nextX causes a jump to the end of the select processing. +** +** Duplicate removal in the UNION, EXCEPT, and INTERSECT cases is handled +** within the output subroutine. The regPrev register set holds the previously +** output value. A comparison is made against this value and the output +** is skipped if the next results would be the same as the previous. +** +** The implementation plan is to implement the two coroutines and seven +** subroutines first, then put the control logic at the bottom. Like this: +** +** goto Init +** coA: coroutine for left query (A) +** coB: coroutine for right query (B) +** outA: output one row of A +** outB: output one row of B (UNION and UNION ALL only) +** EofA: ... +** EofB: ... +** AltB: ... +** AeqB: ... +** AgtB: ... +** Init: initialize coroutine registers +** yield coA +** if eof(A) goto EofA +** yield coB +** if eof(B) goto EofB +** Cmpr: Compare A, B +** Jump AltB, AeqB, AgtB +** End: ... +** +** We call AltB, AeqB, AgtB, EofA, and EofB "subroutines" but they are not +** actually called using Gosub and they do not Return. EofA and EofB loop +** until all data is exhausted then jump to the "end" labe. AltB, AeqB, +** and AgtB jump to either L2 or to one of EofA or EofB. +*/ +#ifndef SQLITE_OMIT_COMPOUND_SELECT +static int multiSelectOrderBy( + Parse *pParse, /* Parsing context */ + Select *p, /* The right-most of SELECTs to be coded */ + SelectDest *pDest /* What to do with query results */ +){ + int i, j; /* Loop counters */ + Select *pPrior; /* Another SELECT immediately to our left */ + Vdbe *v; /* Generate code to this VDBE */ + SelectDest destA; /* Destination for coroutine A */ + SelectDest destB; /* Destination for coroutine B */ + int regAddrA; /* Address register for select-A coroutine */ + int regEofA; /* Flag to indicate when select-A is complete */ + int regAddrB; /* Address register for select-B coroutine */ + int regEofB; /* Flag to indicate when select-B is complete */ + int addrSelectA; /* Address of the select-A coroutine */ + int addrSelectB; /* Address of the select-B coroutine */ + int regOutA; /* Address register for the output-A subroutine */ + int regOutB; /* Address register for the output-B subroutine */ + int addrOutA; /* Address of the output-A subroutine */ + int addrOutB = 0; /* Address of the output-B subroutine */ + int addrEofA; /* Address of the select-A-exhausted subroutine */ + int addrEofB; /* Address of the select-B-exhausted subroutine */ + int addrAltB; /* Address of the AB subroutine */ + int regLimitA; /* Limit register for select-A */ + int regLimitB; /* Limit register for select-A */ + int regPrev; /* A range of registers to hold previous output */ + int savedLimit; /* Saved value of p->iLimit */ + int savedOffset; /* Saved value of p->iOffset */ + int labelCmpr; /* Label for the start of the merge algorithm */ + int labelEnd; /* Label for the end of the overall SELECT stmt */ + int j1; /* Jump instructions that get retargetted */ + int op; /* One of TK_ALL, TK_UNION, TK_EXCEPT, TK_INTERSECT */ + KeyInfo *pKeyDup = 0; /* Comparison information for duplicate removal */ + KeyInfo *pKeyMerge; /* Comparison information for merging rows */ + sqlite3 *db; /* Database connection */ + ExprList *pOrderBy; /* The ORDER BY clause */ + int nOrderBy; /* Number of terms in the ORDER BY clause */ + int *aPermute; /* Mapping from ORDER BY terms to result set columns */ +#ifndef SQLITE_OMIT_EXPLAIN + int iSub1; /* EQP id of left-hand query */ + int iSub2; /* EQP id of right-hand query */ +#endif + + assert( p->pOrderBy!=0 ); + assert( pKeyDup==0 ); /* "Managed" code needs this. Ticket #3382. */ + db = pParse->db; + v = pParse->pVdbe; + assert( v!=0 ); /* Already thrown the error if VDBE alloc failed */ + labelEnd = sqlite3VdbeMakeLabel(v); + labelCmpr = sqlite3VdbeMakeLabel(v); + + + /* Patch up the ORDER BY clause + */ + op = p->op; + pPrior = p->pPrior; + assert( pPrior->pOrderBy==0 ); + pOrderBy = p->pOrderBy; + assert( pOrderBy ); + nOrderBy = pOrderBy->nExpr; + + /* For operators other than UNION ALL we have to make sure that + ** the ORDER BY clause covers every term of the result set. Add + ** terms to the ORDER BY clause as necessary. + */ + if( op!=TK_ALL ){ + for(i=1; db->mallocFailed==0 && i<=p->pEList->nExpr; i++){ + struct ExprList_item *pItem; + for(j=0, pItem=pOrderBy->a; jiOrderByCol>0 ); + if( pItem->iOrderByCol==i ) break; + } + if( j==nOrderBy ){ + Expr *pNew = sqlite3Expr(db, TK_INTEGER, 0); + if( pNew==0 ) return SQLITE_NOMEM; + pNew->flags |= EP_IntValue; + pNew->u.iValue = i; + pOrderBy = sqlite3ExprListAppend(pParse, pOrderBy, pNew); + if( pOrderBy ) pOrderBy->a[nOrderBy++].iOrderByCol = (u16)i; + } + } + } + + /* Compute the comparison permutation and keyinfo that is used with + ** the permutation used to determine if the next + ** row of results comes from selectA or selectB. Also add explicit + ** collations to the ORDER BY clause terms so that when the subqueries + ** to the right and the left are evaluated, they use the correct + ** collation. + */ + aPermute = sqlite3DbMallocRaw(db, sizeof(int)*nOrderBy); + if( aPermute ){ + struct ExprList_item *pItem; + for(i=0, pItem=pOrderBy->a; iiOrderByCol>0 && pItem->iOrderByCol<=p->pEList->nExpr ); + aPermute[i] = pItem->iOrderByCol - 1; + } + pKeyMerge = + sqlite3DbMallocRaw(db, sizeof(*pKeyMerge)+nOrderBy*(sizeof(CollSeq*)+1)); + if( pKeyMerge ){ + pKeyMerge->aSortOrder = (u8*)&pKeyMerge->aColl[nOrderBy]; + pKeyMerge->nField = (u16)nOrderBy; + pKeyMerge->enc = ENC(db); + for(i=0; ia[i].pExpr; + if( pTerm->flags & EP_ExpCollate ){ + pColl = pTerm->pColl; + }else{ + pColl = multiSelectCollSeq(pParse, p, aPermute[i]); + pTerm->flags |= EP_ExpCollate; + pTerm->pColl = pColl; + } + pKeyMerge->aColl[i] = pColl; + pKeyMerge->aSortOrder[i] = pOrderBy->a[i].sortOrder; + } + } + }else{ + pKeyMerge = 0; + } + + /* Reattach the ORDER BY clause to the query. + */ + p->pOrderBy = pOrderBy; + pPrior->pOrderBy = sqlite3ExprListDup(pParse->db, pOrderBy, 0); + + /* Allocate a range of temporary registers and the KeyInfo needed + ** for the logic that removes duplicate result rows when the + ** operator is UNION, EXCEPT, or INTERSECT (but not UNION ALL). + */ + if( op==TK_ALL ){ + regPrev = 0; + }else{ + int nExpr = p->pEList->nExpr; + assert( nOrderBy>=nExpr || db->mallocFailed ); + regPrev = sqlite3GetTempRange(pParse, nExpr+1); + sqlite3VdbeAddOp2(v, OP_Integer, 0, regPrev); + pKeyDup = sqlite3DbMallocZero(db, + sizeof(*pKeyDup) + nExpr*(sizeof(CollSeq*)+1) ); + if( pKeyDup ){ + pKeyDup->aSortOrder = (u8*)&pKeyDup->aColl[nExpr]; + pKeyDup->nField = (u16)nExpr; + pKeyDup->enc = ENC(db); + for(i=0; iaColl[i] = multiSelectCollSeq(pParse, p, i); + pKeyDup->aSortOrder[i] = 0; + } + } + } + + /* Separate the left and the right query from one another + */ + p->pPrior = 0; + sqlite3ResolveOrderGroupBy(pParse, p, p->pOrderBy, "ORDER"); + if( pPrior->pPrior==0 ){ + sqlite3ResolveOrderGroupBy(pParse, pPrior, pPrior->pOrderBy, "ORDER"); + } + + /* Compute the limit registers */ + computeLimitRegisters(pParse, p, labelEnd); + if( p->iLimit && op==TK_ALL ){ + regLimitA = ++pParse->nMem; + regLimitB = ++pParse->nMem; + sqlite3VdbeAddOp2(v, OP_Copy, p->iOffset ? p->iOffset+1 : p->iLimit, + regLimitA); + sqlite3VdbeAddOp2(v, OP_Copy, regLimitA, regLimitB); + }else{ + regLimitA = regLimitB = 0; + } + sqlite3ExprDelete(db, p->pLimit); + p->pLimit = 0; + sqlite3ExprDelete(db, p->pOffset); + p->pOffset = 0; + + regAddrA = ++pParse->nMem; + regEofA = ++pParse->nMem; + regAddrB = ++pParse->nMem; + regEofB = ++pParse->nMem; + regOutA = ++pParse->nMem; + regOutB = ++pParse->nMem; + sqlite3SelectDestInit(&destA, SRT_Coroutine, regAddrA); + sqlite3SelectDestInit(&destB, SRT_Coroutine, regAddrB); + + /* Jump past the various subroutines and coroutines to the main + ** merge loop + */ + j1 = sqlite3VdbeAddOp0(v, OP_Goto); + addrSelectA = sqlite3VdbeCurrentAddr(v); + + + /* Generate a coroutine to evaluate the SELECT statement to the + ** left of the compound operator - the "A" select. + */ + VdbeNoopComment((v, "Begin coroutine for left SELECT")); + pPrior->iLimit = regLimitA; + explainSetInteger(iSub1, pParse->iNextSelectId); + sqlite3Select(pParse, pPrior, &destA); + sqlite3VdbeAddOp2(v, OP_Integer, 1, regEofA); + sqlite3VdbeAddOp1(v, OP_Yield, regAddrA); + VdbeNoopComment((v, "End coroutine for left SELECT")); + + /* Generate a coroutine to evaluate the SELECT statement on + ** the right - the "B" select + */ + addrSelectB = sqlite3VdbeCurrentAddr(v); + VdbeNoopComment((v, "Begin coroutine for right SELECT")); + savedLimit = p->iLimit; + savedOffset = p->iOffset; + p->iLimit = regLimitB; + p->iOffset = 0; + explainSetInteger(iSub2, pParse->iNextSelectId); + sqlite3Select(pParse, p, &destB); + p->iLimit = savedLimit; + p->iOffset = savedOffset; + sqlite3VdbeAddOp2(v, OP_Integer, 1, regEofB); + sqlite3VdbeAddOp1(v, OP_Yield, regAddrB); + VdbeNoopComment((v, "End coroutine for right SELECT")); + + /* Generate a subroutine that outputs the current row of the A + ** select as the next output row of the compound select. + */ + VdbeNoopComment((v, "Output routine for A")); + addrOutA = generateOutputSubroutine(pParse, + p, &destA, pDest, regOutA, + regPrev, pKeyDup, P4_KEYINFO_HANDOFF, labelEnd); + + /* Generate a subroutine that outputs the current row of the B + ** select as the next output row of the compound select. + */ + if( op==TK_ALL || op==TK_UNION ){ + VdbeNoopComment((v, "Output routine for B")); + addrOutB = generateOutputSubroutine(pParse, + p, &destB, pDest, regOutB, + regPrev, pKeyDup, P4_KEYINFO_STATIC, labelEnd); + } + + /* Generate a subroutine to run when the results from select A + ** are exhausted and only data in select B remains. + */ + VdbeNoopComment((v, "eof-A subroutine")); + if( op==TK_EXCEPT || op==TK_INTERSECT ){ + addrEofA = sqlite3VdbeAddOp2(v, OP_Goto, 0, labelEnd); + }else{ + addrEofA = sqlite3VdbeAddOp2(v, OP_If, regEofB, labelEnd); + sqlite3VdbeAddOp2(v, OP_Gosub, regOutB, addrOutB); + sqlite3VdbeAddOp1(v, OP_Yield, regAddrB); + sqlite3VdbeAddOp2(v, OP_Goto, 0, addrEofA); + p->nSelectRow += pPrior->nSelectRow; + } + + /* Generate a subroutine to run when the results from select B + ** are exhausted and only data in select A remains. + */ + if( op==TK_INTERSECT ){ + addrEofB = addrEofA; + if( p->nSelectRow > pPrior->nSelectRow ) p->nSelectRow = pPrior->nSelectRow; + }else{ + VdbeNoopComment((v, "eof-B subroutine")); + addrEofB = sqlite3VdbeAddOp2(v, OP_If, regEofA, labelEnd); + sqlite3VdbeAddOp2(v, OP_Gosub, regOutA, addrOutA); + sqlite3VdbeAddOp1(v, OP_Yield, regAddrA); + sqlite3VdbeAddOp2(v, OP_Goto, 0, addrEofB); + } + + /* Generate code to handle the case of AB + */ + VdbeNoopComment((v, "A-gt-B subroutine")); + addrAgtB = sqlite3VdbeCurrentAddr(v); + if( op==TK_ALL || op==TK_UNION ){ + sqlite3VdbeAddOp2(v, OP_Gosub, regOutB, addrOutB); + } + sqlite3VdbeAddOp1(v, OP_Yield, regAddrB); + sqlite3VdbeAddOp2(v, OP_If, regEofB, addrEofB); + sqlite3VdbeAddOp2(v, OP_Goto, 0, labelCmpr); + + /* This code runs once to initialize everything. + */ + sqlite3VdbeJumpHere(v, j1); + sqlite3VdbeAddOp2(v, OP_Integer, 0, regEofA); + sqlite3VdbeAddOp2(v, OP_Integer, 0, regEofB); + sqlite3VdbeAddOp2(v, OP_Gosub, regAddrA, addrSelectA); + sqlite3VdbeAddOp2(v, OP_Gosub, regAddrB, addrSelectB); + sqlite3VdbeAddOp2(v, OP_If, regEofA, addrEofA); + sqlite3VdbeAddOp2(v, OP_If, regEofB, addrEofB); + + /* Implement the main merge loop + */ + sqlite3VdbeResolveLabel(v, labelCmpr); + sqlite3VdbeAddOp4(v, OP_Permutation, 0, 0, 0, (char*)aPermute, P4_INTARRAY); + sqlite3VdbeAddOp4(v, OP_Compare, destA.iMem, destB.iMem, nOrderBy, + (char*)pKeyMerge, P4_KEYINFO_HANDOFF); + sqlite3VdbeAddOp3(v, OP_Jump, addrAltB, addrAeqB, addrAgtB); + + /* Release temporary registers + */ + if( regPrev ){ + sqlite3ReleaseTempRange(pParse, regPrev, nOrderBy+1); + } + + /* Jump to the this point in order to terminate the query. + */ + sqlite3VdbeResolveLabel(v, labelEnd); + + /* Set the number of output columns + */ + if( pDest->eDest==SRT_Output ){ + Select *pFirst = pPrior; + while( pFirst->pPrior ) pFirst = pFirst->pPrior; + generateColumnNames(pParse, 0, pFirst->pEList); + } + + /* Reassembly the compound query so that it will be freed correctly + ** by the calling function */ + if( p->pPrior ){ + sqlite3SelectDelete(db, p->pPrior); + } + p->pPrior = pPrior; + + /*** TBD: Insert subroutine calls to close cursors on incomplete + **** subqueries ****/ + explainComposite(pParse, p->op, iSub1, iSub2, 0); + return SQLITE_OK; +} +#endif + +#if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) +/* Forward Declarations */ +static void substExprList(sqlite3*, ExprList*, int, ExprList*); +static void substSelect(sqlite3*, Select *, int, ExprList *); + +/* +** Scan through the expression pExpr. Replace every reference to +** a column in table number iTable with a copy of the iColumn-th +** entry in pEList. (But leave references to the ROWID column +** unchanged.) +** +** This routine is part of the flattening procedure. A subquery +** whose result set is defined by pEList appears as entry in the +** FROM clause of a SELECT such that the VDBE cursor assigned to that +** FORM clause entry is iTable. This routine make the necessary +** changes to pExpr so that it refers directly to the source table +** of the subquery rather the result set of the subquery. +*/ +static Expr *substExpr( + sqlite3 *db, /* Report malloc errors to this connection */ + Expr *pExpr, /* Expr in which substitution occurs */ + int iTable, /* Table to be substituted */ + ExprList *pEList /* Substitute expressions */ +){ + if( pExpr==0 ) return 0; + if( pExpr->op==TK_COLUMN && pExpr->iTable==iTable ){ + if( pExpr->iColumn<0 ){ + pExpr->op = TK_NULL; + }else{ + Expr *pNew; + assert( pEList!=0 && pExpr->iColumnnExpr ); + assert( pExpr->pLeft==0 && pExpr->pRight==0 ); + pNew = sqlite3ExprDup(db, pEList->a[pExpr->iColumn].pExpr, 0); + if( pNew && pExpr->pColl ){ + pNew->pColl = pExpr->pColl; + } + sqlite3ExprDelete(db, pExpr); + pExpr = pNew; + } + }else{ + pExpr->pLeft = substExpr(db, pExpr->pLeft, iTable, pEList); + pExpr->pRight = substExpr(db, pExpr->pRight, iTable, pEList); + if( ExprHasProperty(pExpr, EP_xIsSelect) ){ + substSelect(db, pExpr->x.pSelect, iTable, pEList); + }else{ + substExprList(db, pExpr->x.pList, iTable, pEList); + } + } + return pExpr; +} +static void substExprList( + sqlite3 *db, /* Report malloc errors here */ + ExprList *pList, /* List to scan and in which to make substitutes */ + int iTable, /* Table to be substituted */ + ExprList *pEList /* Substitute values */ +){ + int i; + if( pList==0 ) return; + for(i=0; inExpr; i++){ + pList->a[i].pExpr = substExpr(db, pList->a[i].pExpr, iTable, pEList); + } +} +static void substSelect( + sqlite3 *db, /* Report malloc errors here */ + Select *p, /* SELECT statement in which to make substitutions */ + int iTable, /* Table to be replaced */ + ExprList *pEList /* Substitute values */ +){ + SrcList *pSrc; + struct SrcList_item *pItem; + int i; + if( !p ) return; + substExprList(db, p->pEList, iTable, pEList); + substExprList(db, p->pGroupBy, iTable, pEList); + substExprList(db, p->pOrderBy, iTable, pEList); + p->pHaving = substExpr(db, p->pHaving, iTable, pEList); + p->pWhere = substExpr(db, p->pWhere, iTable, pEList); + substSelect(db, p->pPrior, iTable, pEList); + pSrc = p->pSrc; + assert( pSrc ); /* Even for (SELECT 1) we have: pSrc!=0 but pSrc->nSrc==0 */ + if( ALWAYS(pSrc) ){ + for(i=pSrc->nSrc, pItem=pSrc->a; i>0; i--, pItem++){ + substSelect(db, pItem->pSelect, iTable, pEList); + } + } +} +#endif /* !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) */ + +#if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) +/* +** This routine attempts to flatten subqueries as a performance optimization. +** This routine returns 1 if it makes changes and 0 if no flattening occurs. +** +** To understand the concept of flattening, consider the following +** query: +** +** SELECT a FROM (SELECT x+y AS a FROM t1 WHERE z<100) WHERE a>5 +** +** The default way of implementing this query is to execute the +** subquery first and store the results in a temporary table, then +** run the outer query on that temporary table. This requires two +** passes over the data. Furthermore, because the temporary table +** has no indices, the WHERE clause on the outer query cannot be +** optimized. +** +** This routine attempts to rewrite queries such as the above into +** a single flat select, like this: +** +** SELECT x+y AS a FROM t1 WHERE z<100 AND a>5 +** +** The code generated for this simpification gives the same result +** but only has to scan the data once. And because indices might +** exist on the table t1, a complete scan of the data might be +** avoided. +** +** Flattening is only attempted if all of the following are true: +** +** (1) The subquery and the outer query do not both use aggregates. +** +** (2) The subquery is not an aggregate or the outer query is not a join. +** +** (3) The subquery is not the right operand of a left outer join +** (Originally ticket #306. Strengthened by ticket #3300) +** +** (4) The subquery is not DISTINCT. +** +** (**) At one point restrictions (4) and (5) defined a subset of DISTINCT +** sub-queries that were excluded from this optimization. Restriction +** (4) has since been expanded to exclude all DISTINCT subqueries. +** +** (6) The subquery does not use aggregates or the outer query is not +** DISTINCT. +** +** (7) The subquery has a FROM clause. TODO: For subqueries without +** A FROM clause, consider adding a FROM close with the special +** table sqlite_once that consists of a single row containing a +** single NULL. +** +** (8) The subquery does not use LIMIT or the outer query is not a join. +** +** (9) The subquery does not use LIMIT or the outer query does not use +** aggregates. +** +** (10) The subquery does not use aggregates or the outer query does not +** use LIMIT. +** +** (11) The subquery and the outer query do not both have ORDER BY clauses. +** +** (**) Not implemented. Subsumed into restriction (3). Was previously +** a separate restriction deriving from ticket #350. +** +** (13) The subquery and outer query do not both use LIMIT. +** +** (14) The subquery does not use OFFSET. +** +** (15) The outer query is not part of a compound select or the +** subquery does not have a LIMIT clause. +** (See ticket #2339 and ticket [02a8e81d44]). +** +** (16) The outer query is not an aggregate or the subquery does +** not contain ORDER BY. (Ticket #2942) This used to not matter +** until we introduced the group_concat() function. +** +** (17) The sub-query is not a compound select, or it is a UNION ALL +** compound clause made up entirely of non-aggregate queries, and +** the parent query: +** +** * is not itself part of a compound select, +** * is not an aggregate or DISTINCT query, and +** * is not a join +** +** The parent and sub-query may contain WHERE clauses. Subject to +** rules (11), (13) and (14), they may also contain ORDER BY, +** LIMIT and OFFSET clauses. The subquery cannot use any compound +** operator other than UNION ALL because all the other compound +** operators have an implied DISTINCT which is disallowed by +** restriction (4). +** +** (18) If the sub-query is a compound select, then all terms of the +** ORDER by clause of the parent must be simple references to +** columns of the sub-query. +** +** (19) The subquery does not use LIMIT or the outer query does not +** have a WHERE clause. +** +** (20) If the sub-query is a compound select, then it must not use +** an ORDER BY clause. Ticket #3773. We could relax this constraint +** somewhat by saying that the terms of the ORDER BY clause must +** appear as unmodified result columns in the outer query. But we +** have other optimizations in mind to deal with that case. +** +** (21) The subquery does not use LIMIT or the outer query is not +** DISTINCT. (See ticket [752e1646fc]). +** +** In this routine, the "p" parameter is a pointer to the outer query. +** The subquery is p->pSrc->a[iFrom]. isAgg is true if the outer query +** uses aggregates and subqueryIsAgg is true if the subquery uses aggregates. +** +** If flattening is not attempted, this routine is a no-op and returns 0. +** If flattening is attempted this routine returns 1. +** +** All of the expression analysis must occur on both the outer query and +** the subquery before this routine runs. +*/ +static int flattenSubquery( + Parse *pParse, /* Parsing context */ + Select *p, /* The parent or outer SELECT statement */ + int iFrom, /* Index in p->pSrc->a[] of the inner subquery */ + int isAgg, /* True if outer SELECT uses aggregate functions */ + int subqueryIsAgg /* True if the subquery uses aggregate functions */ +){ + const char *zSavedAuthContext = pParse->zAuthContext; + Select *pParent; + Select *pSub; /* The inner query or "subquery" */ + Select *pSub1; /* Pointer to the rightmost select in sub-query */ + SrcList *pSrc; /* The FROM clause of the outer query */ + SrcList *pSubSrc; /* The FROM clause of the subquery */ + ExprList *pList; /* The result set of the outer query */ + int iParent; /* VDBE cursor number of the pSub result set temp table */ + int i; /* Loop counter */ + Expr *pWhere; /* The WHERE clause */ + struct SrcList_item *pSubitem; /* The subquery */ + sqlite3 *db = pParse->db; + + /* Check to see if flattening is permitted. Return 0 if not. + */ + assert( p!=0 ); + assert( p->pPrior==0 ); /* Unable to flatten compound queries */ + if( db->flags & SQLITE_QueryFlattener ) return 0; + pSrc = p->pSrc; + assert( pSrc && iFrom>=0 && iFromnSrc ); + pSubitem = &pSrc->a[iFrom]; + iParent = pSubitem->iCursor; + pSub = pSubitem->pSelect; + assert( pSub!=0 ); + if( isAgg && subqueryIsAgg ) return 0; /* Restriction (1) */ + if( subqueryIsAgg && pSrc->nSrc>1 ) return 0; /* Restriction (2) */ + pSubSrc = pSub->pSrc; + assert( pSubSrc ); + /* Prior to version 3.1.2, when LIMIT and OFFSET had to be simple constants, + ** not arbitrary expresssions, we allowed some combining of LIMIT and OFFSET + ** because they could be computed at compile-time. But when LIMIT and OFFSET + ** became arbitrary expressions, we were forced to add restrictions (13) + ** and (14). */ + if( pSub->pLimit && p->pLimit ) return 0; /* Restriction (13) */ + if( pSub->pOffset ) return 0; /* Restriction (14) */ + if( p->pRightmost && pSub->pLimit ){ + return 0; /* Restriction (15) */ + } + if( pSubSrc->nSrc==0 ) return 0; /* Restriction (7) */ + if( pSub->selFlags & SF_Distinct ) return 0; /* Restriction (5) */ + if( pSub->pLimit && (pSrc->nSrc>1 || isAgg) ){ + return 0; /* Restrictions (8)(9) */ + } + if( (p->selFlags & SF_Distinct)!=0 && subqueryIsAgg ){ + return 0; /* Restriction (6) */ + } + if( p->pOrderBy && pSub->pOrderBy ){ + return 0; /* Restriction (11) */ + } + if( isAgg && pSub->pOrderBy ) return 0; /* Restriction (16) */ + if( pSub->pLimit && p->pWhere ) return 0; /* Restriction (19) */ + if( pSub->pLimit && (p->selFlags & SF_Distinct)!=0 ){ + return 0; /* Restriction (21) */ + } + + /* OBSOLETE COMMENT 1: + ** Restriction 3: If the subquery is a join, make sure the subquery is + ** not used as the right operand of an outer join. Examples of why this + ** is not allowed: + ** + ** t1 LEFT OUTER JOIN (t2 JOIN t3) + ** + ** If we flatten the above, we would get + ** + ** (t1 LEFT OUTER JOIN t2) JOIN t3 + ** + ** which is not at all the same thing. + ** + ** OBSOLETE COMMENT 2: + ** Restriction 12: If the subquery is the right operand of a left outer + ** join, make sure the subquery has no WHERE clause. + ** An examples of why this is not allowed: + ** + ** t1 LEFT OUTER JOIN (SELECT * FROM t2 WHERE t2.x>0) + ** + ** If we flatten the above, we would get + ** + ** (t1 LEFT OUTER JOIN t2) WHERE t2.x>0 + ** + ** But the t2.x>0 test will always fail on a NULL row of t2, which + ** effectively converts the OUTER JOIN into an INNER JOIN. + ** + ** THIS OVERRIDES OBSOLETE COMMENTS 1 AND 2 ABOVE: + ** Ticket #3300 shows that flattening the right term of a LEFT JOIN + ** is fraught with danger. Best to avoid the whole thing. If the + ** subquery is the right term of a LEFT JOIN, then do not flatten. + */ + if( (pSubitem->jointype & JT_OUTER)!=0 ){ + return 0; + } + + /* Restriction 17: If the sub-query is a compound SELECT, then it must + ** use only the UNION ALL operator. And none of the simple select queries + ** that make up the compound SELECT are allowed to be aggregate or distinct + ** queries. + */ + if( pSub->pPrior ){ + if( pSub->pOrderBy ){ + return 0; /* Restriction 20 */ + } + if( isAgg || (p->selFlags & SF_Distinct)!=0 || pSrc->nSrc!=1 ){ + return 0; + } + for(pSub1=pSub; pSub1; pSub1=pSub1->pPrior){ + testcase( (pSub1->selFlags & (SF_Distinct|SF_Aggregate))==SF_Distinct ); + testcase( (pSub1->selFlags & (SF_Distinct|SF_Aggregate))==SF_Aggregate ); + assert( pSub->pSrc!=0 ); + if( (pSub1->selFlags & (SF_Distinct|SF_Aggregate))!=0 + || (pSub1->pPrior && pSub1->op!=TK_ALL) + || pSub1->pSrc->nSrc<1 + ){ + return 0; + } + testcase( pSub1->pSrc->nSrc>1 ); + } + + /* Restriction 18. */ + if( p->pOrderBy ){ + int ii; + for(ii=0; iipOrderBy->nExpr; ii++){ + if( p->pOrderBy->a[ii].iOrderByCol==0 ) return 0; + } + } + } + + /***** If we reach this point, flattening is permitted. *****/ + + /* Authorize the subquery */ + pParse->zAuthContext = pSubitem->zName; + TESTONLY(i =) sqlite3AuthCheck(pParse, SQLITE_SELECT, 0, 0, 0); + testcase( i==SQLITE_DENY ); + pParse->zAuthContext = zSavedAuthContext; + + /* If the sub-query is a compound SELECT statement, then (by restrictions + ** 17 and 18 above) it must be a UNION ALL and the parent query must + ** be of the form: + ** + ** SELECT FROM () + ** + ** followed by any ORDER BY, LIMIT and/or OFFSET clauses. This block + ** creates N-1 copies of the parent query without any ORDER BY, LIMIT or + ** OFFSET clauses and joins them to the left-hand-side of the original + ** using UNION ALL operators. In this case N is the number of simple + ** select statements in the compound sub-query. + ** + ** Example: + ** + ** SELECT a+1 FROM ( + ** SELECT x FROM tab + ** UNION ALL + ** SELECT y FROM tab + ** UNION ALL + ** SELECT abs(z*2) FROM tab2 + ** ) WHERE a!=5 ORDER BY 1 + ** + ** Transformed into: + ** + ** SELECT x+1 FROM tab WHERE x+1!=5 + ** UNION ALL + ** SELECT y+1 FROM tab WHERE y+1!=5 + ** UNION ALL + ** SELECT abs(z*2)+1 FROM tab2 WHERE abs(z*2)+1!=5 + ** ORDER BY 1 + ** + ** We call this the "compound-subquery flattening". + */ + for(pSub=pSub->pPrior; pSub; pSub=pSub->pPrior){ + Select *pNew; + ExprList *pOrderBy = p->pOrderBy; + Expr *pLimit = p->pLimit; + Select *pPrior = p->pPrior; + p->pOrderBy = 0; + p->pSrc = 0; + p->pPrior = 0; + p->pLimit = 0; + pNew = sqlite3SelectDup(db, p, 0); + p->pLimit = pLimit; + p->pOrderBy = pOrderBy; + p->pSrc = pSrc; + p->op = TK_ALL; + p->pRightmost = 0; + if( pNew==0 ){ + pNew = pPrior; + }else{ + pNew->pPrior = pPrior; + pNew->pRightmost = 0; + } + p->pPrior = pNew; + if( db->mallocFailed ) return 1; + } + + /* Begin flattening the iFrom-th entry of the FROM clause + ** in the outer query. + */ + pSub = pSub1 = pSubitem->pSelect; + + /* Delete the transient table structure associated with the + ** subquery + */ + sqlite3DbFree(db, pSubitem->zDatabase); + sqlite3DbFree(db, pSubitem->zName); + sqlite3DbFree(db, pSubitem->zAlias); + pSubitem->zDatabase = 0; + pSubitem->zName = 0; + pSubitem->zAlias = 0; + pSubitem->pSelect = 0; + + /* Defer deleting the Table object associated with the + ** subquery until code generation is + ** complete, since there may still exist Expr.pTab entries that + ** refer to the subquery even after flattening. Ticket #3346. + ** + ** pSubitem->pTab is always non-NULL by test restrictions and tests above. + */ + if( ALWAYS(pSubitem->pTab!=0) ){ + Table *pTabToDel = pSubitem->pTab; + if( pTabToDel->nRef==1 ){ + Parse *pToplevel = sqlite3ParseToplevel(pParse); + pTabToDel->pNextZombie = pToplevel->pZombieTab; + pToplevel->pZombieTab = pTabToDel; + }else{ + pTabToDel->nRef--; + } + pSubitem->pTab = 0; + } + + /* The following loop runs once for each term in a compound-subquery + ** flattening (as described above). If we are doing a different kind + ** of flattening - a flattening other than a compound-subquery flattening - + ** then this loop only runs once. + ** + ** This loop moves all of the FROM elements of the subquery into the + ** the FROM clause of the outer query. Before doing this, remember + ** the cursor number for the original outer query FROM element in + ** iParent. The iParent cursor will never be used. Subsequent code + ** will scan expressions looking for iParent references and replace + ** those references with expressions that resolve to the subquery FROM + ** elements we are now copying in. + */ + for(pParent=p; pParent; pParent=pParent->pPrior, pSub=pSub->pPrior){ + int nSubSrc; + u8 jointype = 0; + pSubSrc = pSub->pSrc; /* FROM clause of subquery */ + nSubSrc = pSubSrc->nSrc; /* Number of terms in subquery FROM clause */ + pSrc = pParent->pSrc; /* FROM clause of the outer query */ + + if( pSrc ){ + assert( pParent==p ); /* First time through the loop */ + jointype = pSubitem->jointype; + }else{ + assert( pParent!=p ); /* 2nd and subsequent times through the loop */ + pSrc = pParent->pSrc = sqlite3SrcListAppend(db, 0, 0, 0); + if( pSrc==0 ){ + assert( db->mallocFailed ); + break; + } + } + + /* The subquery uses a single slot of the FROM clause of the outer + ** query. If the subquery has more than one element in its FROM clause, + ** then expand the outer query to make space for it to hold all elements + ** of the subquery. + ** + ** Example: + ** + ** SELECT * FROM tabA, (SELECT * FROM sub1, sub2), tabB; + ** + ** The outer query has 3 slots in its FROM clause. One slot of the + ** outer query (the middle slot) is used by the subquery. The next + ** block of code will expand the out query to 4 slots. The middle + ** slot is expanded to two slots in order to make space for the + ** two elements in the FROM clause of the subquery. + */ + if( nSubSrc>1 ){ + pParent->pSrc = pSrc = sqlite3SrcListEnlarge(db, pSrc, nSubSrc-1,iFrom+1); + if( db->mallocFailed ){ + break; + } + } + + /* Transfer the FROM clause terms from the subquery into the + ** outer query. + */ + for(i=0; ia[i+iFrom].pUsing); + pSrc->a[i+iFrom] = pSubSrc->a[i]; + memset(&pSubSrc->a[i], 0, sizeof(pSubSrc->a[i])); + } + pSrc->a[iFrom].jointype = jointype; + + /* Now begin substituting subquery result set expressions for + ** references to the iParent in the outer query. + ** + ** Example: + ** + ** SELECT a+5, b*10 FROM (SELECT x*3 AS a, y+10 AS b FROM t1) WHERE a>b; + ** \ \_____________ subquery __________/ / + ** \_____________________ outer query ______________________________/ + ** + ** We look at every expression in the outer query and every place we see + ** "a" we substitute "x*3" and every place we see "b" we substitute "y+10". + */ + pList = pParent->pEList; + for(i=0; inExpr; i++){ + if( pList->a[i].zName==0 ){ + const char *zSpan = pList->a[i].zSpan; + if( ALWAYS(zSpan) ){ + pList->a[i].zName = sqlite3DbStrDup(db, zSpan); + } + } + } + substExprList(db, pParent->pEList, iParent, pSub->pEList); + if( isAgg ){ + substExprList(db, pParent->pGroupBy, iParent, pSub->pEList); + pParent->pHaving = substExpr(db, pParent->pHaving, iParent, pSub->pEList); + } + if( pSub->pOrderBy ){ + assert( pParent->pOrderBy==0 ); + pParent->pOrderBy = pSub->pOrderBy; + pSub->pOrderBy = 0; + }else if( pParent->pOrderBy ){ + substExprList(db, pParent->pOrderBy, iParent, pSub->pEList); + } + if( pSub->pWhere ){ + pWhere = sqlite3ExprDup(db, pSub->pWhere, 0); + }else{ + pWhere = 0; + } + if( subqueryIsAgg ){ + assert( pParent->pHaving==0 ); + pParent->pHaving = pParent->pWhere; + pParent->pWhere = pWhere; + pParent->pHaving = substExpr(db, pParent->pHaving, iParent, pSub->pEList); + pParent->pHaving = sqlite3ExprAnd(db, pParent->pHaving, + sqlite3ExprDup(db, pSub->pHaving, 0)); + assert( pParent->pGroupBy==0 ); + pParent->pGroupBy = sqlite3ExprListDup(db, pSub->pGroupBy, 0); + }else{ + pParent->pWhere = substExpr(db, pParent->pWhere, iParent, pSub->pEList); + pParent->pWhere = sqlite3ExprAnd(db, pParent->pWhere, pWhere); + } + + /* The flattened query is distinct if either the inner or the + ** outer query is distinct. + */ + pParent->selFlags |= pSub->selFlags & SF_Distinct; + + /* + ** SELECT ... FROM (SELECT ... LIMIT a OFFSET b) LIMIT x OFFSET y; + ** + ** One is tempted to try to add a and b to combine the limits. But this + ** does not work if either limit is negative. + */ + if( pSub->pLimit ){ + pParent->pLimit = pSub->pLimit; + pSub->pLimit = 0; + } + } + + /* Finially, delete what is left of the subquery and return + ** success. + */ + sqlite3SelectDelete(db, pSub1); + + return 1; +} +#endif /* !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) */ + +/* +** Analyze the SELECT statement passed as an argument to see if it +** is a min() or max() query. Return WHERE_ORDERBY_MIN or WHERE_ORDERBY_MAX if +** it is, or 0 otherwise. At present, a query is considered to be +** a min()/max() query if: +** +** 1. There is a single object in the FROM clause. +** +** 2. There is a single expression in the result set, and it is +** either min(x) or max(x), where x is a column reference. +*/ +static u8 minMaxQuery(Select *p){ + Expr *pExpr; + ExprList *pEList = p->pEList; + + if( pEList->nExpr!=1 ) return WHERE_ORDERBY_NORMAL; + pExpr = pEList->a[0].pExpr; + if( pExpr->op!=TK_AGG_FUNCTION ) return 0; + if( NEVER(ExprHasProperty(pExpr, EP_xIsSelect)) ) return 0; + pEList = pExpr->x.pList; + if( pEList==0 || pEList->nExpr!=1 ) return 0; + if( pEList->a[0].pExpr->op!=TK_AGG_COLUMN ) return WHERE_ORDERBY_NORMAL; + assert( !ExprHasProperty(pExpr, EP_IntValue) ); + if( sqlite3StrICmp(pExpr->u.zToken,"min")==0 ){ + return WHERE_ORDERBY_MIN; + }else if( sqlite3StrICmp(pExpr->u.zToken,"max")==0 ){ + return WHERE_ORDERBY_MAX; + } + return WHERE_ORDERBY_NORMAL; +} + +/* +** The select statement passed as the first argument is an aggregate query. +** The second argment is the associated aggregate-info object. This +** function tests if the SELECT is of the form: +** +** SELECT count(*) FROM +** +** where table is a database table, not a sub-select or view. If the query +** does match this pattern, then a pointer to the Table object representing +** is returned. Otherwise, 0 is returned. +*/ +static Table *isSimpleCount(Select *p, AggInfo *pAggInfo){ + Table *pTab; + Expr *pExpr; + + assert( !p->pGroupBy ); + + if( p->pWhere || p->pEList->nExpr!=1 + || p->pSrc->nSrc!=1 || p->pSrc->a[0].pSelect + ){ + return 0; + } + pTab = p->pSrc->a[0].pTab; + pExpr = p->pEList->a[0].pExpr; + assert( pTab && !pTab->pSelect && pExpr ); + + if( IsVirtual(pTab) ) return 0; + if( pExpr->op!=TK_AGG_FUNCTION ) return 0; + if( pAggInfo->nFunc==0 ) return 0; + if( (pAggInfo->aFunc[0].pFunc->flags&SQLITE_FUNC_COUNT)==0 ) return 0; + if( pExpr->flags&EP_Distinct ) return 0; + + return pTab; +} + +/* +** If the source-list item passed as an argument was augmented with an +** INDEXED BY clause, then try to locate the specified index. If there +** was such a clause and the named index cannot be found, return +** SQLITE_ERROR and leave an error in pParse. Otherwise, populate +** pFrom->pIndex and return SQLITE_OK. +*/ +SQLITE_PRIVATE int sqlite3IndexedByLookup(Parse *pParse, struct SrcList_item *pFrom){ + if( pFrom->pTab && pFrom->zIndex ){ + Table *pTab = pFrom->pTab; + char *zIndex = pFrom->zIndex; + Index *pIdx; + for(pIdx=pTab->pIndex; + pIdx && sqlite3StrICmp(pIdx->zName, zIndex); + pIdx=pIdx->pNext + ); + if( !pIdx ){ + sqlite3ErrorMsg(pParse, "no such index: %s", zIndex, 0); + pParse->checkSchema = 1; + return SQLITE_ERROR; + } + pFrom->pIndex = pIdx; + } + return SQLITE_OK; +} + +/* +** This routine is a Walker callback for "expanding" a SELECT statement. +** "Expanding" means to do the following: +** +** (1) Make sure VDBE cursor numbers have been assigned to every +** element of the FROM clause. +** +** (2) Fill in the pTabList->a[].pTab fields in the SrcList that +** defines FROM clause. When views appear in the FROM clause, +** fill pTabList->a[].pSelect with a copy of the SELECT statement +** that implements the view. A copy is made of the view's SELECT +** statement so that we can freely modify or delete that statement +** without worrying about messing up the presistent representation +** of the view. +** +** (3) Add terms to the WHERE clause to accomodate the NATURAL keyword +** on joins and the ON and USING clause of joins. +** +** (4) Scan the list of columns in the result set (pEList) looking +** for instances of the "*" operator or the TABLE.* operator. +** If found, expand each "*" to be every column in every table +** and TABLE.* to be every column in TABLE. +** +*/ +static int selectExpander(Walker *pWalker, Select *p){ + Parse *pParse = pWalker->pParse; + int i, j, k; + SrcList *pTabList; + ExprList *pEList; + struct SrcList_item *pFrom; + sqlite3 *db = pParse->db; + + if( db->mallocFailed ){ + return WRC_Abort; + } + if( NEVER(p->pSrc==0) || (p->selFlags & SF_Expanded)!=0 ){ + return WRC_Prune; + } + p->selFlags |= SF_Expanded; + pTabList = p->pSrc; + pEList = p->pEList; + + /* Make sure cursor numbers have been assigned to all entries in + ** the FROM clause of the SELECT statement. + */ + sqlite3SrcListAssignCursors(pParse, pTabList); + + /* Look up every table named in the FROM clause of the select. If + ** an entry of the FROM clause is a subquery instead of a table or view, + ** then create a transient table structure to describe the subquery. + */ + for(i=0, pFrom=pTabList->a; inSrc; i++, pFrom++){ + Table *pTab; + if( pFrom->pTab!=0 ){ + /* This statement has already been prepared. There is no need + ** to go further. */ + assert( i==0 ); + return WRC_Prune; + } + if( pFrom->zName==0 ){ +#ifndef SQLITE_OMIT_SUBQUERY + Select *pSel = pFrom->pSelect; + /* A sub-query in the FROM clause of a SELECT */ + assert( pSel!=0 ); + assert( pFrom->pTab==0 ); + sqlite3WalkSelect(pWalker, pSel); + pFrom->pTab = pTab = sqlite3DbMallocZero(db, sizeof(Table)); + if( pTab==0 ) return WRC_Abort; + pTab->nRef = 1; + pTab->zName = sqlite3MPrintf(db, "sqlite_subquery_%p_", (void*)pTab); + while( pSel->pPrior ){ pSel = pSel->pPrior; } + selectColumnsFromExprList(pParse, pSel->pEList, &pTab->nCol, &pTab->aCol); + pTab->iPKey = -1; + pTab->nRowEst = 1000000; + pTab->tabFlags |= TF_Ephemeral; +#endif + }else{ + /* An ordinary table or view name in the FROM clause */ + assert( pFrom->pTab==0 ); + pFrom->pTab = pTab = + sqlite3LocateTable(pParse,0,pFrom->zName,pFrom->zDatabase); + if( pTab==0 ) return WRC_Abort; + pTab->nRef++; +#if !defined(SQLITE_OMIT_VIEW) || !defined (SQLITE_OMIT_VIRTUALTABLE) + if( pTab->pSelect || IsVirtual(pTab) ){ + /* We reach here if the named table is a really a view */ + if( sqlite3ViewGetColumnNames(pParse, pTab) ) return WRC_Abort; + assert( pFrom->pSelect==0 ); + pFrom->pSelect = sqlite3SelectDup(db, pTab->pSelect, 0); + sqlite3WalkSelect(pWalker, pFrom->pSelect); + } +#endif + } + + /* Locate the index named by the INDEXED BY clause, if any. */ + if( sqlite3IndexedByLookup(pParse, pFrom) ){ + return WRC_Abort; + } + } + + /* Process NATURAL keywords, and ON and USING clauses of joins. + */ + if( db->mallocFailed || sqliteProcessJoin(pParse, p) ){ + return WRC_Abort; + } + + /* For every "*" that occurs in the column list, insert the names of + ** all columns in all tables. And for every TABLE.* insert the names + ** of all columns in TABLE. The parser inserted a special expression + ** with the TK_ALL operator for each "*" that it found in the column list. + ** The following code just has to locate the TK_ALL expressions and expand + ** each one to the list of all columns in all tables. + ** + ** The first loop just checks to see if there are any "*" operators + ** that need expanding. + */ + for(k=0; knExpr; k++){ + Expr *pE = pEList->a[k].pExpr; + if( pE->op==TK_ALL ) break; + assert( pE->op!=TK_DOT || pE->pRight!=0 ); + assert( pE->op!=TK_DOT || (pE->pLeft!=0 && pE->pLeft->op==TK_ID) ); + if( pE->op==TK_DOT && pE->pRight->op==TK_ALL ) break; + } + if( knExpr ){ + /* + ** If we get here it means the result set contains one or more "*" + ** operators that need to be expanded. Loop through each expression + ** in the result set and expand them one by one. + */ + struct ExprList_item *a = pEList->a; + ExprList *pNew = 0; + int flags = pParse->db->flags; + int longNames = (flags & SQLITE_FullColNames)!=0 + && (flags & SQLITE_ShortColNames)==0; + + for(k=0; knExpr; k++){ + Expr *pE = a[k].pExpr; + assert( pE->op!=TK_DOT || pE->pRight!=0 ); + if( pE->op!=TK_ALL && (pE->op!=TK_DOT || pE->pRight->op!=TK_ALL) ){ + /* This particular expression does not need to be expanded. + */ + pNew = sqlite3ExprListAppend(pParse, pNew, a[k].pExpr); + if( pNew ){ + pNew->a[pNew->nExpr-1].zName = a[k].zName; + pNew->a[pNew->nExpr-1].zSpan = a[k].zSpan; + a[k].zName = 0; + a[k].zSpan = 0; + } + a[k].pExpr = 0; + }else{ + /* This expression is a "*" or a "TABLE.*" and needs to be + ** expanded. */ + int tableSeen = 0; /* Set to 1 when TABLE matches */ + char *zTName; /* text of name of TABLE */ + if( pE->op==TK_DOT ){ + assert( pE->pLeft!=0 ); + assert( !ExprHasProperty(pE->pLeft, EP_IntValue) ); + zTName = pE->pLeft->u.zToken; + }else{ + zTName = 0; + } + for(i=0, pFrom=pTabList->a; inSrc; i++, pFrom++){ + Table *pTab = pFrom->pTab; + char *zTabName = pFrom->zAlias; + if( zTabName==0 ){ + zTabName = pTab->zName; + } + if( db->mallocFailed ) break; + if( zTName && sqlite3StrICmp(zTName, zTabName)!=0 ){ + continue; + } + tableSeen = 1; + for(j=0; jnCol; j++){ + Expr *pExpr, *pRight; + char *zName = pTab->aCol[j].zName; + char *zColname; /* The computed column name */ + char *zToFree; /* Malloced string that needs to be freed */ + Token sColname; /* Computed column name as a token */ + + /* If a column is marked as 'hidden' (currently only possible + ** for virtual tables), do not include it in the expanded + ** result-set list. + */ + if( IsHiddenColumn(&pTab->aCol[j]) ){ + assert(IsVirtual(pTab)); + continue; + } + + if( i>0 && zTName==0 ){ + if( (pFrom->jointype & JT_NATURAL)!=0 + && tableAndColumnIndex(pTabList, i, zName, 0, 0) + ){ + /* In a NATURAL join, omit the join columns from the + ** table to the right of the join */ + continue; + } + if( sqlite3IdListIndex(pFrom->pUsing, zName)>=0 ){ + /* In a join with a USING clause, omit columns in the + ** using clause from the table on the right. */ + continue; + } + } + pRight = sqlite3Expr(db, TK_ID, zName); + zColname = zName; + zToFree = 0; + if( longNames || pTabList->nSrc>1 ){ + Expr *pLeft; + pLeft = sqlite3Expr(db, TK_ID, zTabName); + pExpr = sqlite3PExpr(pParse, TK_DOT, pLeft, pRight, 0); + if( longNames ){ + zColname = sqlite3MPrintf(db, "%s.%s", zTabName, zName); + zToFree = zColname; + } + }else{ + pExpr = pRight; + } + pNew = sqlite3ExprListAppend(pParse, pNew, pExpr); + sColname.z = zColname; + sColname.n = sqlite3Strlen30(zColname); + sqlite3ExprListSetName(pParse, pNew, &sColname, 0); + sqlite3DbFree(db, zToFree); + } + } + if( !tableSeen ){ + if( zTName ){ + sqlite3ErrorMsg(pParse, "no such table: %s", zTName); + }else{ + sqlite3ErrorMsg(pParse, "no tables specified"); + } + } + } + } + sqlite3ExprListDelete(db, pEList); + p->pEList = pNew; + } +#if SQLITE_MAX_COLUMN + if( p->pEList && p->pEList->nExpr>db->aLimit[SQLITE_LIMIT_COLUMN] ){ + sqlite3ErrorMsg(pParse, "too many columns in result set"); + } +#endif + return WRC_Continue; +} + +/* +** No-op routine for the parse-tree walker. +** +** When this routine is the Walker.xExprCallback then expression trees +** are walked without any actions being taken at each node. Presumably, +** when this routine is used for Walker.xExprCallback then +** Walker.xSelectCallback is set to do something useful for every +** subquery in the parser tree. +*/ +static int exprWalkNoop(Walker *NotUsed, Expr *NotUsed2){ + UNUSED_PARAMETER2(NotUsed, NotUsed2); + return WRC_Continue; +} + +/* +** This routine "expands" a SELECT statement and all of its subqueries. +** For additional information on what it means to "expand" a SELECT +** statement, see the comment on the selectExpand worker callback above. +** +** Expanding a SELECT statement is the first step in processing a +** SELECT statement. The SELECT statement must be expanded before +** name resolution is performed. +** +** If anything goes wrong, an error message is written into pParse. +** The calling function can detect the problem by looking at pParse->nErr +** and/or pParse->db->mallocFailed. +*/ +static void sqlite3SelectExpand(Parse *pParse, Select *pSelect){ + Walker w; + w.xSelectCallback = selectExpander; + w.xExprCallback = exprWalkNoop; + w.pParse = pParse; + sqlite3WalkSelect(&w, pSelect); +} + + +#ifndef SQLITE_OMIT_SUBQUERY +/* +** This is a Walker.xSelectCallback callback for the sqlite3SelectTypeInfo() +** interface. +** +** For each FROM-clause subquery, add Column.zType and Column.zColl +** information to the Table structure that represents the result set +** of that subquery. +** +** The Table structure that represents the result set was constructed +** by selectExpander() but the type and collation information was omitted +** at that point because identifiers had not yet been resolved. This +** routine is called after identifier resolution. +*/ +static int selectAddSubqueryTypeInfo(Walker *pWalker, Select *p){ + Parse *pParse; + int i; + SrcList *pTabList; + struct SrcList_item *pFrom; + + assert( p->selFlags & SF_Resolved ); + if( (p->selFlags & SF_HasTypeInfo)==0 ){ + p->selFlags |= SF_HasTypeInfo; + pParse = pWalker->pParse; + pTabList = p->pSrc; + for(i=0, pFrom=pTabList->a; inSrc; i++, pFrom++){ + Table *pTab = pFrom->pTab; + if( ALWAYS(pTab!=0) && (pTab->tabFlags & TF_Ephemeral)!=0 ){ + /* A sub-query in the FROM clause of a SELECT */ + Select *pSel = pFrom->pSelect; + assert( pSel ); + while( pSel->pPrior ) pSel = pSel->pPrior; + selectAddColumnTypeAndCollation(pParse, pTab->nCol, pTab->aCol, pSel); + } + } + } + return WRC_Continue; +} +#endif + + +/* +** This routine adds datatype and collating sequence information to +** the Table structures of all FROM-clause subqueries in a +** SELECT statement. +** +** Use this routine after name resolution. +*/ +static void sqlite3SelectAddTypeInfo(Parse *pParse, Select *pSelect){ +#ifndef SQLITE_OMIT_SUBQUERY + Walker w; + w.xSelectCallback = selectAddSubqueryTypeInfo; + w.xExprCallback = exprWalkNoop; + w.pParse = pParse; + sqlite3WalkSelect(&w, pSelect); +#endif +} + + +/* +** This routine sets of a SELECT statement for processing. The +** following is accomplished: +** +** * VDBE Cursor numbers are assigned to all FROM-clause terms. +** * Ephemeral Table objects are created for all FROM-clause subqueries. +** * ON and USING clauses are shifted into WHERE statements +** * Wildcards "*" and "TABLE.*" in result sets are expanded. +** * Identifiers in expression are matched to tables. +** +** This routine acts recursively on all subqueries within the SELECT. +*/ +SQLITE_PRIVATE void sqlite3SelectPrep( + Parse *pParse, /* The parser context */ + Select *p, /* The SELECT statement being coded. */ + NameContext *pOuterNC /* Name context for container */ +){ + sqlite3 *db; + if( NEVER(p==0) ) return; + db = pParse->db; + if( p->selFlags & SF_HasTypeInfo ) return; + sqlite3SelectExpand(pParse, p); + if( pParse->nErr || db->mallocFailed ) return; + sqlite3ResolveSelectNames(pParse, p, pOuterNC); + if( pParse->nErr || db->mallocFailed ) return; + sqlite3SelectAddTypeInfo(pParse, p); +} + +/* +** Reset the aggregate accumulator. +** +** The aggregate accumulator is a set of memory cells that hold +** intermediate results while calculating an aggregate. This +** routine simply stores NULLs in all of those memory cells. +*/ +static void resetAccumulator(Parse *pParse, AggInfo *pAggInfo){ + Vdbe *v = pParse->pVdbe; + int i; + struct AggInfo_func *pFunc; + if( pAggInfo->nFunc+pAggInfo->nColumn==0 ){ + return; + } + for(i=0; inColumn; i++){ + sqlite3VdbeAddOp2(v, OP_Null, 0, pAggInfo->aCol[i].iMem); + } + for(pFunc=pAggInfo->aFunc, i=0; inFunc; i++, pFunc++){ + sqlite3VdbeAddOp2(v, OP_Null, 0, pFunc->iMem); + if( pFunc->iDistinct>=0 ){ + Expr *pE = pFunc->pExpr; + assert( !ExprHasProperty(pE, EP_xIsSelect) ); + if( pE->x.pList==0 || pE->x.pList->nExpr!=1 ){ + sqlite3ErrorMsg(pParse, "DISTINCT aggregates must have exactly one " + "argument"); + pFunc->iDistinct = -1; + }else{ + KeyInfo *pKeyInfo = keyInfoFromExprList(pParse, pE->x.pList); + sqlite3VdbeAddOp4(v, OP_OpenEphemeral, pFunc->iDistinct, 0, 0, + (char*)pKeyInfo, P4_KEYINFO_HANDOFF); + } + } + } +} + +/* +** Invoke the OP_AggFinalize opcode for every aggregate function +** in the AggInfo structure. +*/ +static void finalizeAggFunctions(Parse *pParse, AggInfo *pAggInfo){ + Vdbe *v = pParse->pVdbe; + int i; + struct AggInfo_func *pF; + for(i=0, pF=pAggInfo->aFunc; inFunc; i++, pF++){ + ExprList *pList = pF->pExpr->x.pList; + assert( !ExprHasProperty(pF->pExpr, EP_xIsSelect) ); + sqlite3VdbeAddOp4(v, OP_AggFinal, pF->iMem, pList ? pList->nExpr : 0, 0, + (void*)pF->pFunc, P4_FUNCDEF); + } +} + +/* +** Update the accumulator memory cells for an aggregate based on +** the current cursor position. +*/ +static void updateAccumulator(Parse *pParse, AggInfo *pAggInfo){ + Vdbe *v = pParse->pVdbe; + int i; + int regHit = 0; + int addrHitTest = 0; + struct AggInfo_func *pF; + struct AggInfo_col *pC; + + pAggInfo->directMode = 1; + sqlite3ExprCacheClear(pParse); + for(i=0, pF=pAggInfo->aFunc; inFunc; i++, pF++){ + int nArg; + int addrNext = 0; + int regAgg; + ExprList *pList = pF->pExpr->x.pList; + assert( !ExprHasProperty(pF->pExpr, EP_xIsSelect) ); + if( pList ){ + nArg = pList->nExpr; + regAgg = sqlite3GetTempRange(pParse, nArg); + sqlite3ExprCodeExprList(pParse, pList, regAgg, 1); + }else{ + nArg = 0; + regAgg = 0; + } + if( pF->iDistinct>=0 ){ + addrNext = sqlite3VdbeMakeLabel(v); + assert( nArg==1 ); + codeDistinct(pParse, pF->iDistinct, addrNext, 1, regAgg); + } + if( pF->pFunc->flags & SQLITE_FUNC_NEEDCOLL ){ + CollSeq *pColl = 0; + struct ExprList_item *pItem; + int j; + assert( pList!=0 ); /* pList!=0 if pF->pFunc has NEEDCOLL */ + for(j=0, pItem=pList->a; !pColl && jpExpr); + } + if( !pColl ){ + pColl = pParse->db->pDfltColl; + } + if( regHit==0 && pAggInfo->nAccumulator ) regHit = ++pParse->nMem; + sqlite3VdbeAddOp4(v, OP_CollSeq, regHit, 0, 0, (char *)pColl, P4_COLLSEQ); + } + sqlite3VdbeAddOp4(v, OP_AggStep, 0, regAgg, pF->iMem, + (void*)pF->pFunc, P4_FUNCDEF); + sqlite3VdbeChangeP5(v, (u8)nArg); + sqlite3ExprCacheAffinityChange(pParse, regAgg, nArg); + sqlite3ReleaseTempRange(pParse, regAgg, nArg); + if( addrNext ){ + sqlite3VdbeResolveLabel(v, addrNext); + sqlite3ExprCacheClear(pParse); + } + } + + /* Before populating the accumulator registers, clear the column cache. + ** Otherwise, if any of the required column values are already present + ** in registers, sqlite3ExprCode() may use OP_SCopy to copy the value + ** to pC->iMem. But by the time the value is used, the original register + ** may have been used, invalidating the underlying buffer holding the + ** text or blob value. See ticket [883034dcb5]. + ** + ** Another solution would be to change the OP_SCopy used to copy cached + ** values to an OP_Copy. + */ + if( regHit ){ + addrHitTest = sqlite3VdbeAddOp1(v, OP_If, regHit); + } + sqlite3ExprCacheClear(pParse); + for(i=0, pC=pAggInfo->aCol; inAccumulator; i++, pC++){ + sqlite3ExprCode(pParse, pC->pExpr, pC->iMem); + } + pAggInfo->directMode = 0; + sqlite3ExprCacheClear(pParse); + if( addrHitTest ){ + sqlite3VdbeJumpHere(v, addrHitTest); + } +} + +/* +** Add a single OP_Explain instruction to the VDBE to explain a simple +** count(*) query ("SELECT count(*) FROM pTab"). +*/ +#ifndef SQLITE_OMIT_EXPLAIN +static void explainSimpleCount( + Parse *pParse, /* Parse context */ + Table *pTab, /* Table being queried */ + Index *pIdx /* Index used to optimize scan, or NULL */ +){ + if( pParse->explain==2 ){ + char *zEqp = sqlite3MPrintf(pParse->db, "SCAN TABLE %s %s%s(~%d rows)", + pTab->zName, + pIdx ? "USING COVERING INDEX " : "", + pIdx ? pIdx->zName : "", + pTab->nRowEst + ); + sqlite3VdbeAddOp4( + pParse->pVdbe, OP_Explain, pParse->iSelectId, 0, 0, zEqp, P4_DYNAMIC + ); + } +} +#else +# define explainSimpleCount(a,b,c) +#endif + +/* +** Generate code for the SELECT statement given in the p argument. +** +** The results are distributed in various ways depending on the +** contents of the SelectDest structure pointed to by argument pDest +** as follows: +** +** pDest->eDest Result +** ------------ ------------------------------------------- +** SRT_Output Generate a row of output (using the OP_ResultRow +** opcode) for each row in the result set. +** +** SRT_Mem Only valid if the result is a single column. +** Store the first column of the first result row +** in register pDest->iParm then abandon the rest +** of the query. This destination implies "LIMIT 1". +** +** SRT_Set The result must be a single column. Store each +** row of result as the key in table pDest->iParm. +** Apply the affinity pDest->affinity before storing +** results. Used to implement "IN (SELECT ...)". +** +** SRT_Union Store results as a key in a temporary table pDest->iParm. +** +** SRT_Except Remove results from the temporary table pDest->iParm. +** +** SRT_Table Store results in temporary table pDest->iParm. +** This is like SRT_EphemTab except that the table +** is assumed to already be open. +** +** SRT_EphemTab Create an temporary table pDest->iParm and store +** the result there. The cursor is left open after +** returning. This is like SRT_Table except that +** this destination uses OP_OpenEphemeral to create +** the table first. +** +** SRT_Coroutine Generate a co-routine that returns a new row of +** results each time it is invoked. The entry point +** of the co-routine is stored in register pDest->iParm. +** +** SRT_Exists Store a 1 in memory cell pDest->iParm if the result +** set is not empty. +** +** SRT_Discard Throw the results away. This is used by SELECT +** statements within triggers whose only purpose is +** the side-effects of functions. +** +** This routine returns the number of errors. If any errors are +** encountered, then an appropriate error message is left in +** pParse->zErrMsg. +** +** This routine does NOT free the Select structure passed in. The +** calling function needs to do that. +*/ +SQLITE_PRIVATE int sqlite3Select( + Parse *pParse, /* The parser context */ + Select *p, /* The SELECT statement being coded. */ + SelectDest *pDest /* What to do with the query results */ +){ + int i, j; /* Loop counters */ + WhereInfo *pWInfo; /* Return from sqlite3WhereBegin() */ + Vdbe *v; /* The virtual machine under construction */ + int isAgg; /* True for select lists like "count(*)" */ + ExprList *pEList; /* List of columns to extract. */ + SrcList *pTabList; /* List of tables to select from */ + Expr *pWhere; /* The WHERE clause. May be NULL */ + ExprList *pOrderBy; /* The ORDER BY clause. May be NULL */ + ExprList *pGroupBy; /* The GROUP BY clause. May be NULL */ + Expr *pHaving; /* The HAVING clause. May be NULL */ + int isDistinct; /* True if the DISTINCT keyword is present */ + int distinct; /* Table to use for the distinct set */ + int rc = 1; /* Value to return from this function */ + int addrSortIndex; /* Address of an OP_OpenEphemeral instruction */ + int addrDistinctIndex; /* Address of an OP_OpenEphemeral instruction */ + AggInfo sAggInfo; /* Information used by aggregate queries */ + int iEnd; /* Address of the end of the query */ + sqlite3 *db; /* The database connection */ + +#ifndef SQLITE_OMIT_EXPLAIN + int iRestoreSelectId = pParse->iSelectId; + pParse->iSelectId = pParse->iNextSelectId++; +#endif + + db = pParse->db; + if( p==0 || db->mallocFailed || pParse->nErr ){ + return 1; + } + if( sqlite3AuthCheck(pParse, SQLITE_SELECT, 0, 0, 0) ) return 1; + memset(&sAggInfo, 0, sizeof(sAggInfo)); + + if( IgnorableOrderby(pDest) ){ + assert(pDest->eDest==SRT_Exists || pDest->eDest==SRT_Union || + pDest->eDest==SRT_Except || pDest->eDest==SRT_Discard); + /* If ORDER BY makes no difference in the output then neither does + ** DISTINCT so it can be removed too. */ + sqlite3ExprListDelete(db, p->pOrderBy); + p->pOrderBy = 0; + p->selFlags &= ~SF_Distinct; + } + sqlite3SelectPrep(pParse, p, 0); + pOrderBy = p->pOrderBy; + pTabList = p->pSrc; + pEList = p->pEList; + if( pParse->nErr || db->mallocFailed ){ + goto select_end; + } + isAgg = (p->selFlags & SF_Aggregate)!=0; + assert( pEList!=0 ); + + /* Begin generating code. + */ + v = sqlite3GetVdbe(pParse); + if( v==0 ) goto select_end; + + /* If writing to memory or generating a set + ** only a single column may be output. + */ +#ifndef SQLITE_OMIT_SUBQUERY + if( checkForMultiColumnSelectError(pParse, pDest, pEList->nExpr) ){ + goto select_end; + } +#endif + + /* Generate code for all sub-queries in the FROM clause + */ +#if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) + for(i=0; !p->pPrior && inSrc; i++){ + struct SrcList_item *pItem = &pTabList->a[i]; + SelectDest dest; + Select *pSub = pItem->pSelect; + int isAggSub; + + if( pSub==0 ) continue; + if( pItem->addrFillSub ){ + sqlite3VdbeAddOp2(v, OP_Gosub, pItem->regReturn, pItem->addrFillSub); + continue; + } + + /* Increment Parse.nHeight by the height of the largest expression + ** tree refered to by this, the parent select. The child select + ** may contain expression trees of at most + ** (SQLITE_MAX_EXPR_DEPTH-Parse.nHeight) height. This is a bit + ** more conservative than necessary, but much easier than enforcing + ** an exact limit. + */ + pParse->nHeight += sqlite3SelectExprHeight(p); + + isAggSub = (pSub->selFlags & SF_Aggregate)!=0; + if( flattenSubquery(pParse, p, i, isAgg, isAggSub) ){ + /* This subquery can be absorbed into its parent. */ + if( isAggSub ){ + isAgg = 1; + p->selFlags |= SF_Aggregate; + } + i = -1; + }else{ + /* Generate a subroutine that will fill an ephemeral table with + ** the content of this subquery. pItem->addrFillSub will point + ** to the address of the generated subroutine. pItem->regReturn + ** is a register allocated to hold the subroutine return address + */ + int topAddr; + int onceAddr = 0; + int retAddr; + assert( pItem->addrFillSub==0 ); + pItem->regReturn = ++pParse->nMem; + topAddr = sqlite3VdbeAddOp2(v, OP_Integer, 0, pItem->regReturn); + pItem->addrFillSub = topAddr+1; + VdbeNoopComment((v, "materialize %s", pItem->pTab->zName)); + if( pItem->isCorrelated==0 ){ + /* If the subquery is no correlated and if we are not inside of + ** a trigger, then we only need to compute the value of the subquery + ** once. */ + onceAddr = sqlite3CodeOnce(pParse); + } + sqlite3SelectDestInit(&dest, SRT_EphemTab, pItem->iCursor); + explainSetInteger(pItem->iSelectId, (u8)pParse->iNextSelectId); + sqlite3Select(pParse, pSub, &dest); + pItem->pTab->nRowEst = (unsigned)pSub->nSelectRow; + if( onceAddr ) sqlite3VdbeJumpHere(v, onceAddr); + retAddr = sqlite3VdbeAddOp1(v, OP_Return, pItem->regReturn); + VdbeComment((v, "end %s", pItem->pTab->zName)); + sqlite3VdbeChangeP1(v, topAddr, retAddr); + sqlite3ClearTempRegCache(pParse); + } + if( /*pParse->nErr ||*/ db->mallocFailed ){ + goto select_end; + } + pParse->nHeight -= sqlite3SelectExprHeight(p); + pTabList = p->pSrc; + if( !IgnorableOrderby(pDest) ){ + pOrderBy = p->pOrderBy; + } + } + pEList = p->pEList; +#endif + pWhere = p->pWhere; + pGroupBy = p->pGroupBy; + pHaving = p->pHaving; + isDistinct = (p->selFlags & SF_Distinct)!=0; + +#ifndef SQLITE_OMIT_COMPOUND_SELECT + /* If there is are a sequence of queries, do the earlier ones first. + */ + if( p->pPrior ){ + if( p->pRightmost==0 ){ + Select *pLoop, *pRight = 0; + int cnt = 0; + int mxSelect; + for(pLoop=p; pLoop; pLoop=pLoop->pPrior, cnt++){ + pLoop->pRightmost = p; + pLoop->pNext = pRight; + pRight = pLoop; + } + mxSelect = db->aLimit[SQLITE_LIMIT_COMPOUND_SELECT]; + if( mxSelect && cnt>mxSelect ){ + sqlite3ErrorMsg(pParse, "too many terms in compound SELECT"); + goto select_end; + } + } + rc = multiSelect(pParse, p, pDest); + explainSetInteger(pParse->iSelectId, iRestoreSelectId); + return rc; + } +#endif + + /* If there is both a GROUP BY and an ORDER BY clause and they are + ** identical, then disable the ORDER BY clause since the GROUP BY + ** will cause elements to come out in the correct order. This is + ** an optimization - the correct answer should result regardless. + ** Use the SQLITE_GroupByOrder flag with SQLITE_TESTCTRL_OPTIMIZER + ** to disable this optimization for testing purposes. + */ + if( sqlite3ExprListCompare(p->pGroupBy, pOrderBy)==0 + && (db->flags & SQLITE_GroupByOrder)==0 ){ + pOrderBy = 0; + } + + /* If the query is DISTINCT with an ORDER BY but is not an aggregate, and + ** if the select-list is the same as the ORDER BY list, then this query + ** can be rewritten as a GROUP BY. In other words, this: + ** + ** SELECT DISTINCT xyz FROM ... ORDER BY xyz + ** + ** is transformed to: + ** + ** SELECT xyz FROM ... GROUP BY xyz + ** + ** The second form is preferred as a single index (or temp-table) may be + ** used for both the ORDER BY and DISTINCT processing. As originally + ** written the query must use a temp-table for at least one of the ORDER + ** BY and DISTINCT, and an index or separate temp-table for the other. + */ + if( (p->selFlags & (SF_Distinct|SF_Aggregate))==SF_Distinct + && sqlite3ExprListCompare(pOrderBy, p->pEList)==0 + ){ + p->selFlags &= ~SF_Distinct; + p->pGroupBy = sqlite3ExprListDup(db, p->pEList, 0); + pGroupBy = p->pGroupBy; + pOrderBy = 0; + } + + /* If there is an ORDER BY clause, then this sorting + ** index might end up being unused if the data can be + ** extracted in pre-sorted order. If that is the case, then the + ** OP_OpenEphemeral instruction will be changed to an OP_Noop once + ** we figure out that the sorting index is not needed. The addrSortIndex + ** variable is used to facilitate that change. + */ + if( pOrderBy ){ + KeyInfo *pKeyInfo; + pKeyInfo = keyInfoFromExprList(pParse, pOrderBy); + pOrderBy->iECursor = pParse->nTab++; + p->addrOpenEphm[2] = addrSortIndex = + sqlite3VdbeAddOp4(v, OP_OpenEphemeral, + pOrderBy->iECursor, pOrderBy->nExpr+2, 0, + (char*)pKeyInfo, P4_KEYINFO_HANDOFF); + }else{ + addrSortIndex = -1; + } + + /* If the output is destined for a temporary table, open that table. + */ + if( pDest->eDest==SRT_EphemTab ){ + sqlite3VdbeAddOp2(v, OP_OpenEphemeral, pDest->iParm, pEList->nExpr); + } + + /* Set the limiter. + */ + iEnd = sqlite3VdbeMakeLabel(v); + p->nSelectRow = (double)LARGEST_INT64; + computeLimitRegisters(pParse, p, iEnd); + if( p->iLimit==0 && addrSortIndex>=0 ){ + sqlite3VdbeGetOp(v, addrSortIndex)->opcode = OP_SorterOpen; + p->selFlags |= SF_UseSorter; + } + + /* Open a virtual index to use for the distinct set. + */ + if( p->selFlags & SF_Distinct ){ + KeyInfo *pKeyInfo; + distinct = pParse->nTab++; + pKeyInfo = keyInfoFromExprList(pParse, p->pEList); + addrDistinctIndex = sqlite3VdbeAddOp4(v, OP_OpenEphemeral, distinct, 0, 0, + (char*)pKeyInfo, P4_KEYINFO_HANDOFF); + sqlite3VdbeChangeP5(v, BTREE_UNORDERED); + }else{ + distinct = addrDistinctIndex = -1; + } + + /* Aggregate and non-aggregate queries are handled differently */ + if( !isAgg && pGroupBy==0 ){ + ExprList *pDist = (isDistinct ? p->pEList : 0); + + /* Begin the database scan. */ + pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, &pOrderBy, pDist, 0); + if( pWInfo==0 ) goto select_end; + if( pWInfo->nRowOut < p->nSelectRow ) p->nSelectRow = pWInfo->nRowOut; + + /* If sorting index that was created by a prior OP_OpenEphemeral + ** instruction ended up not being needed, then change the OP_OpenEphemeral + ** into an OP_Noop. + */ + if( addrSortIndex>=0 && pOrderBy==0 ){ + sqlite3VdbeChangeToNoop(v, addrSortIndex); + p->addrOpenEphm[2] = -1; + } + + if( pWInfo->eDistinct ){ + VdbeOp *pOp; /* No longer required OpenEphemeral instr. */ + + assert( addrDistinctIndex>=0 ); + pOp = sqlite3VdbeGetOp(v, addrDistinctIndex); + + assert( isDistinct ); + assert( pWInfo->eDistinct==WHERE_DISTINCT_ORDERED + || pWInfo->eDistinct==WHERE_DISTINCT_UNIQUE + ); + distinct = -1; + if( pWInfo->eDistinct==WHERE_DISTINCT_ORDERED ){ + int iJump; + int iExpr; + int iFlag = ++pParse->nMem; + int iBase = pParse->nMem+1; + int iBase2 = iBase + pEList->nExpr; + pParse->nMem += (pEList->nExpr*2); + + /* Change the OP_OpenEphemeral coded earlier to an OP_Integer. The + ** OP_Integer initializes the "first row" flag. */ + pOp->opcode = OP_Integer; + pOp->p1 = 1; + pOp->p2 = iFlag; + + sqlite3ExprCodeExprList(pParse, pEList, iBase, 1); + iJump = sqlite3VdbeCurrentAddr(v) + 1 + pEList->nExpr + 1 + 1; + sqlite3VdbeAddOp2(v, OP_If, iFlag, iJump-1); + for(iExpr=0; iExprnExpr; iExpr++){ + CollSeq *pColl = sqlite3ExprCollSeq(pParse, pEList->a[iExpr].pExpr); + sqlite3VdbeAddOp3(v, OP_Ne, iBase+iExpr, iJump, iBase2+iExpr); + sqlite3VdbeChangeP4(v, -1, (const char *)pColl, P4_COLLSEQ); + sqlite3VdbeChangeP5(v, SQLITE_NULLEQ); + } + sqlite3VdbeAddOp2(v, OP_Goto, 0, pWInfo->iContinue); + + sqlite3VdbeAddOp2(v, OP_Integer, 0, iFlag); + assert( sqlite3VdbeCurrentAddr(v)==iJump ); + sqlite3VdbeAddOp3(v, OP_Move, iBase, iBase2, pEList->nExpr); + }else{ + pOp->opcode = OP_Noop; + } + } + + /* Use the standard inner loop. */ + selectInnerLoop(pParse, p, pEList, 0, 0, pOrderBy, distinct, pDest, + pWInfo->iContinue, pWInfo->iBreak); + + /* End the database scan loop. + */ + sqlite3WhereEnd(pWInfo); + }else{ + /* This is the processing for aggregate queries */ + NameContext sNC; /* Name context for processing aggregate information */ + int iAMem; /* First Mem address for storing current GROUP BY */ + int iBMem; /* First Mem address for previous GROUP BY */ + int iUseFlag; /* Mem address holding flag indicating that at least + ** one row of the input to the aggregator has been + ** processed */ + int iAbortFlag; /* Mem address which causes query abort if positive */ + int groupBySort; /* Rows come from source in GROUP BY order */ + int addrEnd; /* End of processing for this SELECT */ + int sortPTab = 0; /* Pseudotable used to decode sorting results */ + int sortOut = 0; /* Output register from the sorter */ + + /* Remove any and all aliases between the result set and the + ** GROUP BY clause. + */ + if( pGroupBy ){ + int k; /* Loop counter */ + struct ExprList_item *pItem; /* For looping over expression in a list */ + + for(k=p->pEList->nExpr, pItem=p->pEList->a; k>0; k--, pItem++){ + pItem->iAlias = 0; + } + for(k=pGroupBy->nExpr, pItem=pGroupBy->a; k>0; k--, pItem++){ + pItem->iAlias = 0; + } + if( p->nSelectRow>(double)100 ) p->nSelectRow = (double)100; + }else{ + p->nSelectRow = (double)1; + } + + + /* Create a label to jump to when we want to abort the query */ + addrEnd = sqlite3VdbeMakeLabel(v); + + /* Convert TK_COLUMN nodes into TK_AGG_COLUMN and make entries in + ** sAggInfo for all TK_AGG_FUNCTION nodes in expressions of the + ** SELECT statement. + */ + memset(&sNC, 0, sizeof(sNC)); + sNC.pParse = pParse; + sNC.pSrcList = pTabList; + sNC.pAggInfo = &sAggInfo; + sAggInfo.nSortingColumn = pGroupBy ? pGroupBy->nExpr+1 : 0; + sAggInfo.pGroupBy = pGroupBy; + sqlite3ExprAnalyzeAggList(&sNC, pEList); + sqlite3ExprAnalyzeAggList(&sNC, pOrderBy); + if( pHaving ){ + sqlite3ExprAnalyzeAggregates(&sNC, pHaving); + } + sAggInfo.nAccumulator = sAggInfo.nColumn; + for(i=0; ix.pList); + sNC.ncFlags &= ~NC_InAggFunc; + } + if( db->mallocFailed ) goto select_end; + + /* Processing for aggregates with GROUP BY is very different and + ** much more complex than aggregates without a GROUP BY. + */ + if( pGroupBy ){ + KeyInfo *pKeyInfo; /* Keying information for the group by clause */ + int j1; /* A-vs-B comparision jump */ + int addrOutputRow; /* Start of subroutine that outputs a result row */ + int regOutputRow; /* Return address register for output subroutine */ + int addrSetAbort; /* Set the abort flag and return */ + int addrTopOfLoop; /* Top of the input loop */ + int addrSortingIdx; /* The OP_OpenEphemeral for the sorting index */ + int addrReset; /* Subroutine for resetting the accumulator */ + int regReset; /* Return address register for reset subroutine */ + + /* If there is a GROUP BY clause we might need a sorting index to + ** implement it. Allocate that sorting index now. If it turns out + ** that we do not need it after all, the OP_SorterOpen instruction + ** will be converted into a Noop. + */ + sAggInfo.sortingIdx = pParse->nTab++; + pKeyInfo = keyInfoFromExprList(pParse, pGroupBy); + addrSortingIdx = sqlite3VdbeAddOp4(v, OP_SorterOpen, + sAggInfo.sortingIdx, sAggInfo.nSortingColumn, + 0, (char*)pKeyInfo, P4_KEYINFO_HANDOFF); + + /* Initialize memory locations used by GROUP BY aggregate processing + */ + iUseFlag = ++pParse->nMem; + iAbortFlag = ++pParse->nMem; + regOutputRow = ++pParse->nMem; + addrOutputRow = sqlite3VdbeMakeLabel(v); + regReset = ++pParse->nMem; + addrReset = sqlite3VdbeMakeLabel(v); + iAMem = pParse->nMem + 1; + pParse->nMem += pGroupBy->nExpr; + iBMem = pParse->nMem + 1; + pParse->nMem += pGroupBy->nExpr; + sqlite3VdbeAddOp2(v, OP_Integer, 0, iAbortFlag); + VdbeComment((v, "clear abort flag")); + sqlite3VdbeAddOp2(v, OP_Integer, 0, iUseFlag); + VdbeComment((v, "indicate accumulator empty")); + sqlite3VdbeAddOp3(v, OP_Null, 0, iAMem, iAMem+pGroupBy->nExpr-1); + + /* Begin a loop that will extract all source rows in GROUP BY order. + ** This might involve two separate loops with an OP_Sort in between, or + ** it might be a single loop that uses an index to extract information + ** in the right order to begin with. + */ + sqlite3VdbeAddOp2(v, OP_Gosub, regReset, addrReset); + pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, &pGroupBy, 0, 0); + if( pWInfo==0 ) goto select_end; + if( pGroupBy==0 ){ + /* The optimizer is able to deliver rows in group by order so + ** we do not have to sort. The OP_OpenEphemeral table will be + ** cancelled later because we still need to use the pKeyInfo + */ + pGroupBy = p->pGroupBy; + groupBySort = 0; + }else{ + /* Rows are coming out in undetermined order. We have to push + ** each row into a sorting index, terminate the first loop, + ** then loop over the sorting index in order to get the output + ** in sorted order + */ + int regBase; + int regRecord; + int nCol; + int nGroupBy; + + explainTempTable(pParse, + isDistinct && !(p->selFlags&SF_Distinct)?"DISTINCT":"GROUP BY"); + + groupBySort = 1; + nGroupBy = pGroupBy->nExpr; + nCol = nGroupBy + 1; + j = nGroupBy+1; + for(i=0; i=j ){ + nCol++; + j++; + } + } + regBase = sqlite3GetTempRange(pParse, nCol); + sqlite3ExprCacheClear(pParse); + sqlite3ExprCodeExprList(pParse, pGroupBy, regBase, 0); + sqlite3VdbeAddOp2(v, OP_Sequence, sAggInfo.sortingIdx,regBase+nGroupBy); + j = nGroupBy+1; + for(i=0; iiSorterColumn>=j ){ + int r1 = j + regBase; + int r2; + + r2 = sqlite3ExprCodeGetColumn(pParse, + pCol->pTab, pCol->iColumn, pCol->iTable, r1, 0); + if( r1!=r2 ){ + sqlite3VdbeAddOp2(v, OP_SCopy, r2, r1); + } + j++; + } + } + regRecord = sqlite3GetTempReg(pParse); + sqlite3VdbeAddOp3(v, OP_MakeRecord, regBase, nCol, regRecord); + sqlite3VdbeAddOp2(v, OP_SorterInsert, sAggInfo.sortingIdx, regRecord); + sqlite3ReleaseTempReg(pParse, regRecord); + sqlite3ReleaseTempRange(pParse, regBase, nCol); + sqlite3WhereEnd(pWInfo); + sAggInfo.sortingIdxPTab = sortPTab = pParse->nTab++; + sortOut = sqlite3GetTempReg(pParse); + sqlite3VdbeAddOp3(v, OP_OpenPseudo, sortPTab, sortOut, nCol); + sqlite3VdbeAddOp2(v, OP_SorterSort, sAggInfo.sortingIdx, addrEnd); + VdbeComment((v, "GROUP BY sort")); + sAggInfo.useSortingIdx = 1; + sqlite3ExprCacheClear(pParse); + } + + /* Evaluate the current GROUP BY terms and store in b0, b1, b2... + ** (b0 is memory location iBMem+0, b1 is iBMem+1, and so forth) + ** Then compare the current GROUP BY terms against the GROUP BY terms + ** from the previous row currently stored in a0, a1, a2... + */ + addrTopOfLoop = sqlite3VdbeCurrentAddr(v); + sqlite3ExprCacheClear(pParse); + if( groupBySort ){ + sqlite3VdbeAddOp2(v, OP_SorterData, sAggInfo.sortingIdx, sortOut); + } + for(j=0; jnExpr; j++){ + if( groupBySort ){ + sqlite3VdbeAddOp3(v, OP_Column, sortPTab, j, iBMem+j); + if( j==0 ) sqlite3VdbeChangeP5(v, OPFLAG_CLEARCACHE); + }else{ + sAggInfo.directMode = 1; + sqlite3ExprCode(pParse, pGroupBy->a[j].pExpr, iBMem+j); + } + } + sqlite3VdbeAddOp4(v, OP_Compare, iAMem, iBMem, pGroupBy->nExpr, + (char*)pKeyInfo, P4_KEYINFO); + j1 = sqlite3VdbeCurrentAddr(v); + sqlite3VdbeAddOp3(v, OP_Jump, j1+1, 0, j1+1); + + /* Generate code that runs whenever the GROUP BY changes. + ** Changes in the GROUP BY are detected by the previous code + ** block. If there were no changes, this block is skipped. + ** + ** This code copies current group by terms in b0,b1,b2,... + ** over to a0,a1,a2. It then calls the output subroutine + ** and resets the aggregate accumulator registers in preparation + ** for the next GROUP BY batch. + */ + sqlite3ExprCodeMove(pParse, iBMem, iAMem, pGroupBy->nExpr); + sqlite3VdbeAddOp2(v, OP_Gosub, regOutputRow, addrOutputRow); + VdbeComment((v, "output one row")); + sqlite3VdbeAddOp2(v, OP_IfPos, iAbortFlag, addrEnd); + VdbeComment((v, "check abort flag")); + sqlite3VdbeAddOp2(v, OP_Gosub, regReset, addrReset); + VdbeComment((v, "reset accumulator")); + + /* Update the aggregate accumulators based on the content of + ** the current row + */ + sqlite3VdbeJumpHere(v, j1); + updateAccumulator(pParse, &sAggInfo); + sqlite3VdbeAddOp2(v, OP_Integer, 1, iUseFlag); + VdbeComment((v, "indicate data in accumulator")); + + /* End of the loop + */ + if( groupBySort ){ + sqlite3VdbeAddOp2(v, OP_SorterNext, sAggInfo.sortingIdx, addrTopOfLoop); + }else{ + sqlite3WhereEnd(pWInfo); + sqlite3VdbeChangeToNoop(v, addrSortingIdx); + } + + /* Output the final row of result + */ + sqlite3VdbeAddOp2(v, OP_Gosub, regOutputRow, addrOutputRow); + VdbeComment((v, "output final row")); + + /* Jump over the subroutines + */ + sqlite3VdbeAddOp2(v, OP_Goto, 0, addrEnd); + + /* Generate a subroutine that outputs a single row of the result + ** set. This subroutine first looks at the iUseFlag. If iUseFlag + ** is less than or equal to zero, the subroutine is a no-op. If + ** the processing calls for the query to abort, this subroutine + ** increments the iAbortFlag memory location before returning in + ** order to signal the caller to abort. + */ + addrSetAbort = sqlite3VdbeCurrentAddr(v); + sqlite3VdbeAddOp2(v, OP_Integer, 1, iAbortFlag); + VdbeComment((v, "set abort flag")); + sqlite3VdbeAddOp1(v, OP_Return, regOutputRow); + sqlite3VdbeResolveLabel(v, addrOutputRow); + addrOutputRow = sqlite3VdbeCurrentAddr(v); + sqlite3VdbeAddOp2(v, OP_IfPos, iUseFlag, addrOutputRow+2); + VdbeComment((v, "Groupby result generator entry point")); + sqlite3VdbeAddOp1(v, OP_Return, regOutputRow); + finalizeAggFunctions(pParse, &sAggInfo); + sqlite3ExprIfFalse(pParse, pHaving, addrOutputRow+1, SQLITE_JUMPIFNULL); + selectInnerLoop(pParse, p, p->pEList, 0, 0, pOrderBy, + distinct, pDest, + addrOutputRow+1, addrSetAbort); + sqlite3VdbeAddOp1(v, OP_Return, regOutputRow); + VdbeComment((v, "end groupby result generator")); + + /* Generate a subroutine that will reset the group-by accumulator + */ + sqlite3VdbeResolveLabel(v, addrReset); + resetAccumulator(pParse, &sAggInfo); + sqlite3VdbeAddOp1(v, OP_Return, regReset); + + } /* endif pGroupBy. Begin aggregate queries without GROUP BY: */ + else { + ExprList *pDel = 0; +#ifndef SQLITE_OMIT_BTREECOUNT + Table *pTab; + if( (pTab = isSimpleCount(p, &sAggInfo))!=0 ){ + /* If isSimpleCount() returns a pointer to a Table structure, then + ** the SQL statement is of the form: + ** + ** SELECT count(*) FROM + ** + ** where the Table structure returned represents table . + ** + ** This statement is so common that it is optimized specially. The + ** OP_Count instruction is executed either on the intkey table that + ** contains the data for table or on one of its indexes. It + ** is better to execute the op on an index, as indexes are almost + ** always spread across less pages than their corresponding tables. + */ + const int iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema); + const int iCsr = pParse->nTab++; /* Cursor to scan b-tree */ + Index *pIdx; /* Iterator variable */ + KeyInfo *pKeyInfo = 0; /* Keyinfo for scanned index */ + Index *pBest = 0; /* Best index found so far */ + int iRoot = pTab->tnum; /* Root page of scanned b-tree */ + + sqlite3CodeVerifySchema(pParse, iDb); + sqlite3TableLock(pParse, iDb, pTab->tnum, 0, pTab->zName); + + /* Search for the index that has the least amount of columns. If + ** there is such an index, and it has less columns than the table + ** does, then we can assume that it consumes less space on disk and + ** will therefore be cheaper to scan to determine the query result. + ** In this case set iRoot to the root page number of the index b-tree + ** and pKeyInfo to the KeyInfo structure required to navigate the + ** index. + ** + ** (2011-04-15) Do not do a full scan of an unordered index. + ** + ** In practice the KeyInfo structure will not be used. It is only + ** passed to keep OP_OpenRead happy. + */ + for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){ + if( pIdx->bUnordered==0 && (!pBest || pIdx->nColumnnColumn) ){ + pBest = pIdx; + } + } + if( pBest && pBest->nColumnnCol ){ + iRoot = pBest->tnum; + pKeyInfo = sqlite3IndexKeyinfo(pParse, pBest); + } + + /* Open a read-only cursor, execute the OP_Count, close the cursor. */ + sqlite3VdbeAddOp3(v, OP_OpenRead, iCsr, iRoot, iDb); + if( pKeyInfo ){ + sqlite3VdbeChangeP4(v, -1, (char *)pKeyInfo, P4_KEYINFO_HANDOFF); + } + sqlite3VdbeAddOp2(v, OP_Count, iCsr, sAggInfo.aFunc[0].iMem); + sqlite3VdbeAddOp1(v, OP_Close, iCsr); + explainSimpleCount(pParse, pTab, pBest); + }else +#endif /* SQLITE_OMIT_BTREECOUNT */ + { + /* Check if the query is of one of the following forms: + ** + ** SELECT min(x) FROM ... + ** SELECT max(x) FROM ... + ** + ** If it is, then ask the code in where.c to attempt to sort results + ** as if there was an "ORDER ON x" or "ORDER ON x DESC" clause. + ** If where.c is able to produce results sorted in this order, then + ** add vdbe code to break out of the processing loop after the + ** first iteration (since the first iteration of the loop is + ** guaranteed to operate on the row with the minimum or maximum + ** value of x, the only row required). + ** + ** A special flag must be passed to sqlite3WhereBegin() to slightly + ** modify behaviour as follows: + ** + ** + If the query is a "SELECT min(x)", then the loop coded by + ** where.c should not iterate over any values with a NULL value + ** for x. + ** + ** + The optimizer code in where.c (the thing that decides which + ** index or indices to use) should place a different priority on + ** satisfying the 'ORDER BY' clause than it does in other cases. + ** Refer to code and comments in where.c for details. + */ + ExprList *pMinMax = 0; + u8 flag = minMaxQuery(p); + if( flag ){ + assert( !ExprHasProperty(p->pEList->a[0].pExpr, EP_xIsSelect) ); + pMinMax = sqlite3ExprListDup(db, p->pEList->a[0].pExpr->x.pList,0); + pDel = pMinMax; + if( pMinMax && !db->mallocFailed ){ + pMinMax->a[0].sortOrder = flag!=WHERE_ORDERBY_MIN ?1:0; + pMinMax->a[0].pExpr->op = TK_COLUMN; + } + } + + /* This case runs if the aggregate has no GROUP BY clause. The + ** processing is much simpler since there is only a single row + ** of output. + */ + resetAccumulator(pParse, &sAggInfo); + pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, &pMinMax, 0, flag); + if( pWInfo==0 ){ + sqlite3ExprListDelete(db, pDel); + goto select_end; + } + updateAccumulator(pParse, &sAggInfo); + if( !pMinMax && flag ){ + sqlite3VdbeAddOp2(v, OP_Goto, 0, pWInfo->iBreak); + VdbeComment((v, "%s() by index", + (flag==WHERE_ORDERBY_MIN?"min":"max"))); + } + sqlite3WhereEnd(pWInfo); + finalizeAggFunctions(pParse, &sAggInfo); + } + + pOrderBy = 0; + sqlite3ExprIfFalse(pParse, pHaving, addrEnd, SQLITE_JUMPIFNULL); + selectInnerLoop(pParse, p, p->pEList, 0, 0, 0, -1, + pDest, addrEnd, addrEnd); + sqlite3ExprListDelete(db, pDel); + } + sqlite3VdbeResolveLabel(v, addrEnd); + + } /* endif aggregate query */ + + if( distinct>=0 ){ + explainTempTable(pParse, "DISTINCT"); + } + + /* If there is an ORDER BY clause, then we need to sort the results + ** and send them to the callback one by one. + */ + if( pOrderBy ){ + explainTempTable(pParse, "ORDER BY"); + generateSortTail(pParse, p, v, pEList->nExpr, pDest); + } + + /* Jump here to skip this query + */ + sqlite3VdbeResolveLabel(v, iEnd); + + /* The SELECT was successfully coded. Set the return code to 0 + ** to indicate no errors. + */ + rc = 0; + + /* Control jumps to here if an error is encountered above, or upon + ** successful coding of the SELECT. + */ +select_end: + explainSetInteger(pParse->iSelectId, iRestoreSelectId); + + /* Identify column names if results of the SELECT are to be output. + */ + if( rc==SQLITE_OK && pDest->eDest==SRT_Output ){ + generateColumnNames(pParse, pTabList, pEList); + } + + sqlite3DbFree(db, sAggInfo.aCol); + sqlite3DbFree(db, sAggInfo.aFunc); + return rc; +} + +#if defined(SQLITE_ENABLE_TREE_EXPLAIN) +/* +** Generate a human-readable description of a the Select object. +*/ +static void explainOneSelect(Vdbe *pVdbe, Select *p){ + sqlite3ExplainPrintf(pVdbe, "SELECT "); + if( p->selFlags & (SF_Distinct|SF_Aggregate) ){ + if( p->selFlags & SF_Distinct ){ + sqlite3ExplainPrintf(pVdbe, "DISTINCT "); + } + if( p->selFlags & SF_Aggregate ){ + sqlite3ExplainPrintf(pVdbe, "agg_flag "); + } + sqlite3ExplainNL(pVdbe); + sqlite3ExplainPrintf(pVdbe, " "); + } + sqlite3ExplainExprList(pVdbe, p->pEList); + sqlite3ExplainNL(pVdbe); + if( p->pSrc && p->pSrc->nSrc ){ + int i; + sqlite3ExplainPrintf(pVdbe, "FROM "); + sqlite3ExplainPush(pVdbe); + for(i=0; ipSrc->nSrc; i++){ + struct SrcList_item *pItem = &p->pSrc->a[i]; + sqlite3ExplainPrintf(pVdbe, "{%d,*} = ", pItem->iCursor); + if( pItem->pSelect ){ + sqlite3ExplainSelect(pVdbe, pItem->pSelect); + if( pItem->pTab ){ + sqlite3ExplainPrintf(pVdbe, " (tabname=%s)", pItem->pTab->zName); + } + }else if( pItem->zName ){ + sqlite3ExplainPrintf(pVdbe, "%s", pItem->zName); + } + if( pItem->zAlias ){ + sqlite3ExplainPrintf(pVdbe, " (AS %s)", pItem->zAlias); + } + if( pItem->jointype & JT_LEFT ){ + sqlite3ExplainPrintf(pVdbe, " LEFT-JOIN"); + } + sqlite3ExplainNL(pVdbe); + } + sqlite3ExplainPop(pVdbe); + } + if( p->pWhere ){ + sqlite3ExplainPrintf(pVdbe, "WHERE "); + sqlite3ExplainExpr(pVdbe, p->pWhere); + sqlite3ExplainNL(pVdbe); + } + if( p->pGroupBy ){ + sqlite3ExplainPrintf(pVdbe, "GROUPBY "); + sqlite3ExplainExprList(pVdbe, p->pGroupBy); + sqlite3ExplainNL(pVdbe); + } + if( p->pHaving ){ + sqlite3ExplainPrintf(pVdbe, "HAVING "); + sqlite3ExplainExpr(pVdbe, p->pHaving); + sqlite3ExplainNL(pVdbe); + } + if( p->pOrderBy ){ + sqlite3ExplainPrintf(pVdbe, "ORDERBY "); + sqlite3ExplainExprList(pVdbe, p->pOrderBy); + sqlite3ExplainNL(pVdbe); + } + if( p->pLimit ){ + sqlite3ExplainPrintf(pVdbe, "LIMIT "); + sqlite3ExplainExpr(pVdbe, p->pLimit); + sqlite3ExplainNL(pVdbe); + } + if( p->pOffset ){ + sqlite3ExplainPrintf(pVdbe, "OFFSET "); + sqlite3ExplainExpr(pVdbe, p->pOffset); + sqlite3ExplainNL(pVdbe); + } +} +SQLITE_PRIVATE void sqlite3ExplainSelect(Vdbe *pVdbe, Select *p){ + if( p==0 ){ + sqlite3ExplainPrintf(pVdbe, "(null-select)"); + return; + } + while( p->pPrior ) p = p->pPrior; + sqlite3ExplainPush(pVdbe); + while( p ){ + explainOneSelect(pVdbe, p); + p = p->pNext; + if( p==0 ) break; + sqlite3ExplainNL(pVdbe); + sqlite3ExplainPrintf(pVdbe, "%s\n", selectOpName(p->op)); + } + sqlite3ExplainPrintf(pVdbe, "END"); + sqlite3ExplainPop(pVdbe); +} + +/* End of the structure debug printing code +*****************************************************************************/ +#endif /* defined(SQLITE_ENABLE_TREE_EXPLAIN) */ + +/************** End of select.c **********************************************/ +/************** Begin file table.c *******************************************/ +/* +** 2001 September 15 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** This file contains the sqlite3_get_table() and sqlite3_free_table() +** interface routines. These are just wrappers around the main +** interface routine of sqlite3_exec(). +** +** These routines are in a separate files so that they will not be linked +** if they are not used. +*/ +/* #include */ +/* #include */ + +#ifndef SQLITE_OMIT_GET_TABLE + +/* +** This structure is used to pass data from sqlite3_get_table() through +** to the callback function is uses to build the result. +*/ +typedef struct TabResult { + char **azResult; /* Accumulated output */ + char *zErrMsg; /* Error message text, if an error occurs */ + int nAlloc; /* Slots allocated for azResult[] */ + int nRow; /* Number of rows in the result */ + int nColumn; /* Number of columns in the result */ + int nData; /* Slots used in azResult[]. (nRow+1)*nColumn */ + int rc; /* Return code from sqlite3_exec() */ +} TabResult; + +/* +** This routine is called once for each row in the result table. Its job +** is to fill in the TabResult structure appropriately, allocating new +** memory as necessary. +*/ +static int sqlite3_get_table_cb(void *pArg, int nCol, char **argv, char **colv){ + TabResult *p = (TabResult*)pArg; /* Result accumulator */ + int need; /* Slots needed in p->azResult[] */ + int i; /* Loop counter */ + char *z; /* A single column of result */ + + /* Make sure there is enough space in p->azResult to hold everything + ** we need to remember from this invocation of the callback. + */ + if( p->nRow==0 && argv!=0 ){ + need = nCol*2; + }else{ + need = nCol; + } + if( p->nData + need > p->nAlloc ){ + char **azNew; + p->nAlloc = p->nAlloc*2 + need; + azNew = sqlite3_realloc( p->azResult, sizeof(char*)*p->nAlloc ); + if( azNew==0 ) goto malloc_failed; + p->azResult = azNew; + } + + /* If this is the first row, then generate an extra row containing + ** the names of all columns. + */ + if( p->nRow==0 ){ + p->nColumn = nCol; + for(i=0; iazResult[p->nData++] = z; + } + }else if( p->nColumn!=nCol ){ + sqlite3_free(p->zErrMsg); + p->zErrMsg = sqlite3_mprintf( + "sqlite3_get_table() called with two or more incompatible queries" + ); + p->rc = SQLITE_ERROR; + return 1; + } + + /* Copy over the row data + */ + if( argv!=0 ){ + for(i=0; iazResult[p->nData++] = z; + } + p->nRow++; + } + return 0; + +malloc_failed: + p->rc = SQLITE_NOMEM; + return 1; +} + +/* +** Query the database. But instead of invoking a callback for each row, +** malloc() for space to hold the result and return the entire results +** at the conclusion of the call. +** +** The result that is written to ***pazResult is held in memory obtained +** from malloc(). But the caller cannot free this memory directly. +** Instead, the entire table should be passed to sqlite3_free_table() when +** the calling procedure is finished using it. +*/ +SQLITE_API int sqlite3_get_table( + sqlite3 *db, /* The database on which the SQL executes */ + const char *zSql, /* The SQL to be executed */ + char ***pazResult, /* Write the result table here */ + int *pnRow, /* Write the number of rows in the result here */ + int *pnColumn, /* Write the number of columns of result here */ + char **pzErrMsg /* Write error messages here */ +){ + int rc; + TabResult res; + + *pazResult = 0; + if( pnColumn ) *pnColumn = 0; + if( pnRow ) *pnRow = 0; + if( pzErrMsg ) *pzErrMsg = 0; + res.zErrMsg = 0; + res.nRow = 0; + res.nColumn = 0; + res.nData = 1; + res.nAlloc = 20; + res.rc = SQLITE_OK; + res.azResult = sqlite3_malloc(sizeof(char*)*res.nAlloc ); + if( res.azResult==0 ){ + db->errCode = SQLITE_NOMEM; + return SQLITE_NOMEM; + } + res.azResult[0] = 0; + rc = sqlite3_exec(db, zSql, sqlite3_get_table_cb, &res, pzErrMsg); + assert( sizeof(res.azResult[0])>= sizeof(res.nData) ); + res.azResult[0] = SQLITE_INT_TO_PTR(res.nData); + if( (rc&0xff)==SQLITE_ABORT ){ + sqlite3_free_table(&res.azResult[1]); + if( res.zErrMsg ){ + if( pzErrMsg ){ + sqlite3_free(*pzErrMsg); + *pzErrMsg = sqlite3_mprintf("%s",res.zErrMsg); + } + sqlite3_free(res.zErrMsg); + } + db->errCode = res.rc; /* Assume 32-bit assignment is atomic */ + return res.rc; + } + sqlite3_free(res.zErrMsg); + if( rc!=SQLITE_OK ){ + sqlite3_free_table(&res.azResult[1]); + return rc; + } + if( res.nAlloc>res.nData ){ + char **azNew; + azNew = sqlite3_realloc( res.azResult, sizeof(char*)*res.nData ); + if( azNew==0 ){ + sqlite3_free_table(&res.azResult[1]); + db->errCode = SQLITE_NOMEM; + return SQLITE_NOMEM; + } + res.azResult = azNew; + } + *pazResult = &res.azResult[1]; + if( pnColumn ) *pnColumn = res.nColumn; + if( pnRow ) *pnRow = res.nRow; + return rc; +} + +/* +** This routine frees the space the sqlite3_get_table() malloced. +*/ +SQLITE_API void sqlite3_free_table( + char **azResult /* Result returned from from sqlite3_get_table() */ +){ + if( azResult ){ + int i, n; + azResult--; + assert( azResult!=0 ); + n = SQLITE_PTR_TO_INT(azResult[0]); + for(i=1; ipNext; + + sqlite3ExprDelete(db, pTmp->pWhere); + sqlite3ExprListDelete(db, pTmp->pExprList); + sqlite3SelectDelete(db, pTmp->pSelect); + sqlite3IdListDelete(db, pTmp->pIdList); + + sqlite3DbFree(db, pTmp); + } +} + +/* +** Given table pTab, return a list of all the triggers attached to +** the table. The list is connected by Trigger.pNext pointers. +** +** All of the triggers on pTab that are in the same database as pTab +** are already attached to pTab->pTrigger. But there might be additional +** triggers on pTab in the TEMP schema. This routine prepends all +** TEMP triggers on pTab to the beginning of the pTab->pTrigger list +** and returns the combined list. +** +** To state it another way: This routine returns a list of all triggers +** that fire off of pTab. The list will include any TEMP triggers on +** pTab as well as the triggers lised in pTab->pTrigger. +*/ +SQLITE_PRIVATE Trigger *sqlite3TriggerList(Parse *pParse, Table *pTab){ + Schema * const pTmpSchema = pParse->db->aDb[1].pSchema; + Trigger *pList = 0; /* List of triggers to return */ + + if( pParse->disableTriggers ){ + return 0; + } + + if( pTmpSchema!=pTab->pSchema ){ + HashElem *p; + assert( sqlite3SchemaMutexHeld(pParse->db, 0, pTmpSchema) ); + for(p=sqliteHashFirst(&pTmpSchema->trigHash); p; p=sqliteHashNext(p)){ + Trigger *pTrig = (Trigger *)sqliteHashData(p); + if( pTrig->pTabSchema==pTab->pSchema + && 0==sqlite3StrICmp(pTrig->table, pTab->zName) + ){ + pTrig->pNext = (pList ? pList : pTab->pTrigger); + pList = pTrig; + } + } + } + + return (pList ? pList : pTab->pTrigger); +} + +/* +** This is called by the parser when it sees a CREATE TRIGGER statement +** up to the point of the BEGIN before the trigger actions. A Trigger +** structure is generated based on the information available and stored +** in pParse->pNewTrigger. After the trigger actions have been parsed, the +** sqlite3FinishTrigger() function is called to complete the trigger +** construction process. +*/ +SQLITE_PRIVATE void sqlite3BeginTrigger( + Parse *pParse, /* The parse context of the CREATE TRIGGER statement */ + Token *pName1, /* The name of the trigger */ + Token *pName2, /* The name of the trigger */ + int tr_tm, /* One of TK_BEFORE, TK_AFTER, TK_INSTEAD */ + int op, /* One of TK_INSERT, TK_UPDATE, TK_DELETE */ + IdList *pColumns, /* column list if this is an UPDATE OF trigger */ + SrcList *pTableName,/* The name of the table/view the trigger applies to */ + Expr *pWhen, /* WHEN clause */ + int isTemp, /* True if the TEMPORARY keyword is present */ + int noErr /* Suppress errors if the trigger already exists */ +){ + Trigger *pTrigger = 0; /* The new trigger */ + Table *pTab; /* Table that the trigger fires off of */ + char *zName = 0; /* Name of the trigger */ + sqlite3 *db = pParse->db; /* The database connection */ + int iDb; /* The database to store the trigger in */ + Token *pName; /* The unqualified db name */ + DbFixer sFix; /* State vector for the DB fixer */ + int iTabDb; /* Index of the database holding pTab */ + + assert( pName1!=0 ); /* pName1->z might be NULL, but not pName1 itself */ + assert( pName2!=0 ); + assert( op==TK_INSERT || op==TK_UPDATE || op==TK_DELETE ); + assert( op>0 && op<0xff ); + if( isTemp ){ + /* If TEMP was specified, then the trigger name may not be qualified. */ + if( pName2->n>0 ){ + sqlite3ErrorMsg(pParse, "temporary trigger may not have qualified name"); + goto trigger_cleanup; + } + iDb = 1; + pName = pName1; + }else{ + /* Figure out the db that the the trigger will be created in */ + iDb = sqlite3TwoPartName(pParse, pName1, pName2, &pName); + if( iDb<0 ){ + goto trigger_cleanup; + } + } + if( !pTableName || db->mallocFailed ){ + goto trigger_cleanup; + } + + /* A long-standing parser bug is that this syntax was allowed: + ** + ** CREATE TRIGGER attached.demo AFTER INSERT ON attached.tab .... + ** ^^^^^^^^ + ** + ** To maintain backwards compatibility, ignore the database + ** name on pTableName if we are reparsing our of SQLITE_MASTER. + */ + if( db->init.busy && iDb!=1 ){ + sqlite3DbFree(db, pTableName->a[0].zDatabase); + pTableName->a[0].zDatabase = 0; + } + + /* If the trigger name was unqualified, and the table is a temp table, + ** then set iDb to 1 to create the trigger in the temporary database. + ** If sqlite3SrcListLookup() returns 0, indicating the table does not + ** exist, the error is caught by the block below. + */ + pTab = sqlite3SrcListLookup(pParse, pTableName); + if( db->init.busy==0 && pName2->n==0 && pTab + && pTab->pSchema==db->aDb[1].pSchema ){ + iDb = 1; + } + + /* Ensure the table name matches database name and that the table exists */ + if( db->mallocFailed ) goto trigger_cleanup; + assert( pTableName->nSrc==1 ); + if( sqlite3FixInit(&sFix, pParse, iDb, "trigger", pName) && + sqlite3FixSrcList(&sFix, pTableName) ){ + goto trigger_cleanup; + } + pTab = sqlite3SrcListLookup(pParse, pTableName); + if( !pTab ){ + /* The table does not exist. */ + if( db->init.iDb==1 ){ + /* Ticket #3810. + ** Normally, whenever a table is dropped, all associated triggers are + ** dropped too. But if a TEMP trigger is created on a non-TEMP table + ** and the table is dropped by a different database connection, the + ** trigger is not visible to the database connection that does the + ** drop so the trigger cannot be dropped. This results in an + ** "orphaned trigger" - a trigger whose associated table is missing. + */ + db->init.orphanTrigger = 1; + } + goto trigger_cleanup; + } + if( IsVirtual(pTab) ){ + sqlite3ErrorMsg(pParse, "cannot create triggers on virtual tables"); + goto trigger_cleanup; + } + + /* Check that the trigger name is not reserved and that no trigger of the + ** specified name exists */ + zName = sqlite3NameFromToken(db, pName); + if( !zName || SQLITE_OK!=sqlite3CheckObjectName(pParse, zName) ){ + goto trigger_cleanup; + } + assert( sqlite3SchemaMutexHeld(db, iDb, 0) ); + if( sqlite3HashFind(&(db->aDb[iDb].pSchema->trigHash), + zName, sqlite3Strlen30(zName)) ){ + if( !noErr ){ + sqlite3ErrorMsg(pParse, "trigger %T already exists", pName); + }else{ + assert( !db->init.busy ); + sqlite3CodeVerifySchema(pParse, iDb); + } + goto trigger_cleanup; + } + + /* Do not create a trigger on a system table */ + if( sqlite3StrNICmp(pTab->zName, "sqlite_", 7)==0 ){ + sqlite3ErrorMsg(pParse, "cannot create trigger on system table"); + pParse->nErr++; + goto trigger_cleanup; + } + + /* INSTEAD of triggers are only for views and views only support INSTEAD + ** of triggers. + */ + if( pTab->pSelect && tr_tm!=TK_INSTEAD ){ + sqlite3ErrorMsg(pParse, "cannot create %s trigger on view: %S", + (tr_tm == TK_BEFORE)?"BEFORE":"AFTER", pTableName, 0); + goto trigger_cleanup; + } + if( !pTab->pSelect && tr_tm==TK_INSTEAD ){ + sqlite3ErrorMsg(pParse, "cannot create INSTEAD OF" + " trigger on table: %S", pTableName, 0); + goto trigger_cleanup; + } + iTabDb = sqlite3SchemaToIndex(db, pTab->pSchema); + +#ifndef SQLITE_OMIT_AUTHORIZATION + { + int code = SQLITE_CREATE_TRIGGER; + const char *zDb = db->aDb[iTabDb].zName; + const char *zDbTrig = isTemp ? db->aDb[1].zName : zDb; + if( iTabDb==1 || isTemp ) code = SQLITE_CREATE_TEMP_TRIGGER; + if( sqlite3AuthCheck(pParse, code, zName, pTab->zName, zDbTrig) ){ + goto trigger_cleanup; + } + if( sqlite3AuthCheck(pParse, SQLITE_INSERT, SCHEMA_TABLE(iTabDb),0,zDb)){ + goto trigger_cleanup; + } + } +#endif + + /* INSTEAD OF triggers can only appear on views and BEFORE triggers + ** cannot appear on views. So we might as well translate every + ** INSTEAD OF trigger into a BEFORE trigger. It simplifies code + ** elsewhere. + */ + if (tr_tm == TK_INSTEAD){ + tr_tm = TK_BEFORE; + } + + /* Build the Trigger object */ + pTrigger = (Trigger*)sqlite3DbMallocZero(db, sizeof(Trigger)); + if( pTrigger==0 ) goto trigger_cleanup; + pTrigger->zName = zName; + zName = 0; + pTrigger->table = sqlite3DbStrDup(db, pTableName->a[0].zName); + pTrigger->pSchema = db->aDb[iDb].pSchema; + pTrigger->pTabSchema = pTab->pSchema; + pTrigger->op = (u8)op; + pTrigger->tr_tm = tr_tm==TK_BEFORE ? TRIGGER_BEFORE : TRIGGER_AFTER; + pTrigger->pWhen = sqlite3ExprDup(db, pWhen, EXPRDUP_REDUCE); + pTrigger->pColumns = sqlite3IdListDup(db, pColumns); + assert( pParse->pNewTrigger==0 ); + pParse->pNewTrigger = pTrigger; + +trigger_cleanup: + sqlite3DbFree(db, zName); + sqlite3SrcListDelete(db, pTableName); + sqlite3IdListDelete(db, pColumns); + sqlite3ExprDelete(db, pWhen); + if( !pParse->pNewTrigger ){ + sqlite3DeleteTrigger(db, pTrigger); + }else{ + assert( pParse->pNewTrigger==pTrigger ); + } +} + +/* +** This routine is called after all of the trigger actions have been parsed +** in order to complete the process of building the trigger. +*/ +SQLITE_PRIVATE void sqlite3FinishTrigger( + Parse *pParse, /* Parser context */ + TriggerStep *pStepList, /* The triggered program */ + Token *pAll /* Token that describes the complete CREATE TRIGGER */ +){ + Trigger *pTrig = pParse->pNewTrigger; /* Trigger being finished */ + char *zName; /* Name of trigger */ + sqlite3 *db = pParse->db; /* The database */ + DbFixer sFix; /* Fixer object */ + int iDb; /* Database containing the trigger */ + Token nameToken; /* Trigger name for error reporting */ + + pParse->pNewTrigger = 0; + if( NEVER(pParse->nErr) || !pTrig ) goto triggerfinish_cleanup; + zName = pTrig->zName; + iDb = sqlite3SchemaToIndex(pParse->db, pTrig->pSchema); + pTrig->step_list = pStepList; + while( pStepList ){ + pStepList->pTrig = pTrig; + pStepList = pStepList->pNext; + } + nameToken.z = pTrig->zName; + nameToken.n = sqlite3Strlen30(nameToken.z); + if( sqlite3FixInit(&sFix, pParse, iDb, "trigger", &nameToken) + && sqlite3FixTriggerStep(&sFix, pTrig->step_list) ){ + goto triggerfinish_cleanup; + } + + /* if we are not initializing, + ** build the sqlite_master entry + */ + if( !db->init.busy ){ + Vdbe *v; + char *z; + + /* Make an entry in the sqlite_master table */ + v = sqlite3GetVdbe(pParse); + if( v==0 ) goto triggerfinish_cleanup; + sqlite3BeginWriteOperation(pParse, 0, iDb); + z = sqlite3DbStrNDup(db, (char*)pAll->z, pAll->n); + sqlite3NestedParse(pParse, + "INSERT INTO %Q.%s VALUES('trigger',%Q,%Q,0,'CREATE TRIGGER %q')", + db->aDb[iDb].zName, SCHEMA_TABLE(iDb), zName, + pTrig->table, z); + sqlite3DbFree(db, z); + sqlite3ChangeCookie(pParse, iDb); + sqlite3VdbeAddParseSchemaOp(v, iDb, + sqlite3MPrintf(db, "type='trigger' AND name='%q'", zName)); + } + + if( db->init.busy ){ + Trigger *pLink = pTrig; + Hash *pHash = &db->aDb[iDb].pSchema->trigHash; + assert( sqlite3SchemaMutexHeld(db, iDb, 0) ); + pTrig = sqlite3HashInsert(pHash, zName, sqlite3Strlen30(zName), pTrig); + if( pTrig ){ + db->mallocFailed = 1; + }else if( pLink->pSchema==pLink->pTabSchema ){ + Table *pTab; + int n = sqlite3Strlen30(pLink->table); + pTab = sqlite3HashFind(&pLink->pTabSchema->tblHash, pLink->table, n); + assert( pTab!=0 ); + pLink->pNext = pTab->pTrigger; + pTab->pTrigger = pLink; + } + } + +triggerfinish_cleanup: + sqlite3DeleteTrigger(db, pTrig); + assert( !pParse->pNewTrigger ); + sqlite3DeleteTriggerStep(db, pStepList); +} + +/* +** Turn a SELECT statement (that the pSelect parameter points to) into +** a trigger step. Return a pointer to a TriggerStep structure. +** +** The parser calls this routine when it finds a SELECT statement in +** body of a TRIGGER. +*/ +SQLITE_PRIVATE TriggerStep *sqlite3TriggerSelectStep(sqlite3 *db, Select *pSelect){ + TriggerStep *pTriggerStep = sqlite3DbMallocZero(db, sizeof(TriggerStep)); + if( pTriggerStep==0 ) { + sqlite3SelectDelete(db, pSelect); + return 0; + } + pTriggerStep->op = TK_SELECT; + pTriggerStep->pSelect = pSelect; + pTriggerStep->orconf = OE_Default; + return pTriggerStep; +} + +/* +** Allocate space to hold a new trigger step. The allocated space +** holds both the TriggerStep object and the TriggerStep.target.z string. +** +** If an OOM error occurs, NULL is returned and db->mallocFailed is set. +*/ +static TriggerStep *triggerStepAllocate( + sqlite3 *db, /* Database connection */ + u8 op, /* Trigger opcode */ + Token *pName /* The target name */ +){ + TriggerStep *pTriggerStep; + + pTriggerStep = sqlite3DbMallocZero(db, sizeof(TriggerStep) + pName->n); + if( pTriggerStep ){ + char *z = (char*)&pTriggerStep[1]; + memcpy(z, pName->z, pName->n); + pTriggerStep->target.z = z; + pTriggerStep->target.n = pName->n; + pTriggerStep->op = op; + } + return pTriggerStep; +} + +/* +** Build a trigger step out of an INSERT statement. Return a pointer +** to the new trigger step. +** +** The parser calls this routine when it sees an INSERT inside the +** body of a trigger. +*/ +SQLITE_PRIVATE TriggerStep *sqlite3TriggerInsertStep( + sqlite3 *db, /* The database connection */ + Token *pTableName, /* Name of the table into which we insert */ + IdList *pColumn, /* List of columns in pTableName to insert into */ + ExprList *pEList, /* The VALUE clause: a list of values to be inserted */ + Select *pSelect, /* A SELECT statement that supplies values */ + u8 orconf /* The conflict algorithm (OE_Abort, OE_Replace, etc.) */ +){ + TriggerStep *pTriggerStep; + + assert(pEList == 0 || pSelect == 0); + assert(pEList != 0 || pSelect != 0 || db->mallocFailed); + + pTriggerStep = triggerStepAllocate(db, TK_INSERT, pTableName); + if( pTriggerStep ){ + pTriggerStep->pSelect = sqlite3SelectDup(db, pSelect, EXPRDUP_REDUCE); + pTriggerStep->pIdList = pColumn; + pTriggerStep->pExprList = sqlite3ExprListDup(db, pEList, EXPRDUP_REDUCE); + pTriggerStep->orconf = orconf; + }else{ + sqlite3IdListDelete(db, pColumn); + } + sqlite3ExprListDelete(db, pEList); + sqlite3SelectDelete(db, pSelect); + + return pTriggerStep; +} + +/* +** Construct a trigger step that implements an UPDATE statement and return +** a pointer to that trigger step. The parser calls this routine when it +** sees an UPDATE statement inside the body of a CREATE TRIGGER. +*/ +SQLITE_PRIVATE TriggerStep *sqlite3TriggerUpdateStep( + sqlite3 *db, /* The database connection */ + Token *pTableName, /* Name of the table to be updated */ + ExprList *pEList, /* The SET clause: list of column and new values */ + Expr *pWhere, /* The WHERE clause */ + u8 orconf /* The conflict algorithm. (OE_Abort, OE_Ignore, etc) */ +){ + TriggerStep *pTriggerStep; + + pTriggerStep = triggerStepAllocate(db, TK_UPDATE, pTableName); + if( pTriggerStep ){ + pTriggerStep->pExprList = sqlite3ExprListDup(db, pEList, EXPRDUP_REDUCE); + pTriggerStep->pWhere = sqlite3ExprDup(db, pWhere, EXPRDUP_REDUCE); + pTriggerStep->orconf = orconf; + } + sqlite3ExprListDelete(db, pEList); + sqlite3ExprDelete(db, pWhere); + return pTriggerStep; +} + +/* +** Construct a trigger step that implements a DELETE statement and return +** a pointer to that trigger step. The parser calls this routine when it +** sees a DELETE statement inside the body of a CREATE TRIGGER. +*/ +SQLITE_PRIVATE TriggerStep *sqlite3TriggerDeleteStep( + sqlite3 *db, /* Database connection */ + Token *pTableName, /* The table from which rows are deleted */ + Expr *pWhere /* The WHERE clause */ +){ + TriggerStep *pTriggerStep; + + pTriggerStep = triggerStepAllocate(db, TK_DELETE, pTableName); + if( pTriggerStep ){ + pTriggerStep->pWhere = sqlite3ExprDup(db, pWhere, EXPRDUP_REDUCE); + pTriggerStep->orconf = OE_Default; + } + sqlite3ExprDelete(db, pWhere); + return pTriggerStep; +} + +/* +** Recursively delete a Trigger structure +*/ +SQLITE_PRIVATE void sqlite3DeleteTrigger(sqlite3 *db, Trigger *pTrigger){ + if( pTrigger==0 ) return; + sqlite3DeleteTriggerStep(db, pTrigger->step_list); + sqlite3DbFree(db, pTrigger->zName); + sqlite3DbFree(db, pTrigger->table); + sqlite3ExprDelete(db, pTrigger->pWhen); + sqlite3IdListDelete(db, pTrigger->pColumns); + sqlite3DbFree(db, pTrigger); +} + +/* +** This function is called to drop a trigger from the database schema. +** +** This may be called directly from the parser and therefore identifies +** the trigger by name. The sqlite3DropTriggerPtr() routine does the +** same job as this routine except it takes a pointer to the trigger +** instead of the trigger name. +**/ +SQLITE_PRIVATE void sqlite3DropTrigger(Parse *pParse, SrcList *pName, int noErr){ + Trigger *pTrigger = 0; + int i; + const char *zDb; + const char *zName; + int nName; + sqlite3 *db = pParse->db; + + if( db->mallocFailed ) goto drop_trigger_cleanup; + if( SQLITE_OK!=sqlite3ReadSchema(pParse) ){ + goto drop_trigger_cleanup; + } + + assert( pName->nSrc==1 ); + zDb = pName->a[0].zDatabase; + zName = pName->a[0].zName; + nName = sqlite3Strlen30(zName); + assert( zDb!=0 || sqlite3BtreeHoldsAllMutexes(db) ); + for(i=OMIT_TEMPDB; inDb; i++){ + int j = (i<2) ? i^1 : i; /* Search TEMP before MAIN */ + if( zDb && sqlite3StrICmp(db->aDb[j].zName, zDb) ) continue; + assert( sqlite3SchemaMutexHeld(db, j, 0) ); + pTrigger = sqlite3HashFind(&(db->aDb[j].pSchema->trigHash), zName, nName); + if( pTrigger ) break; + } + if( !pTrigger ){ + if( !noErr ){ + sqlite3ErrorMsg(pParse, "no such trigger: %S", pName, 0); + }else{ + sqlite3CodeVerifyNamedSchema(pParse, zDb); + } + pParse->checkSchema = 1; + goto drop_trigger_cleanup; + } + sqlite3DropTriggerPtr(pParse, pTrigger); + +drop_trigger_cleanup: + sqlite3SrcListDelete(db, pName); +} + +/* +** Return a pointer to the Table structure for the table that a trigger +** is set on. +*/ +static Table *tableOfTrigger(Trigger *pTrigger){ + int n = sqlite3Strlen30(pTrigger->table); + return sqlite3HashFind(&pTrigger->pTabSchema->tblHash, pTrigger->table, n); +} + + +/* +** Drop a trigger given a pointer to that trigger. +*/ +SQLITE_PRIVATE void sqlite3DropTriggerPtr(Parse *pParse, Trigger *pTrigger){ + Table *pTable; + Vdbe *v; + sqlite3 *db = pParse->db; + int iDb; + + iDb = sqlite3SchemaToIndex(pParse->db, pTrigger->pSchema); + assert( iDb>=0 && iDbnDb ); + pTable = tableOfTrigger(pTrigger); + assert( pTable ); + assert( pTable->pSchema==pTrigger->pSchema || iDb==1 ); +#ifndef SQLITE_OMIT_AUTHORIZATION + { + int code = SQLITE_DROP_TRIGGER; + const char *zDb = db->aDb[iDb].zName; + const char *zTab = SCHEMA_TABLE(iDb); + if( iDb==1 ) code = SQLITE_DROP_TEMP_TRIGGER; + if( sqlite3AuthCheck(pParse, code, pTrigger->zName, pTable->zName, zDb) || + sqlite3AuthCheck(pParse, SQLITE_DELETE, zTab, 0, zDb) ){ + return; + } + } +#endif + + /* Generate code to destroy the database record of the trigger. + */ + assert( pTable!=0 ); + if( (v = sqlite3GetVdbe(pParse))!=0 ){ + int base; + static const VdbeOpList dropTrigger[] = { + { OP_Rewind, 0, ADDR(9), 0}, + { OP_String8, 0, 1, 0}, /* 1 */ + { OP_Column, 0, 1, 2}, + { OP_Ne, 2, ADDR(8), 1}, + { OP_String8, 0, 1, 0}, /* 4: "trigger" */ + { OP_Column, 0, 0, 2}, + { OP_Ne, 2, ADDR(8), 1}, + { OP_Delete, 0, 0, 0}, + { OP_Next, 0, ADDR(1), 0}, /* 8 */ + }; + + sqlite3BeginWriteOperation(pParse, 0, iDb); + sqlite3OpenMasterTable(pParse, iDb); + base = sqlite3VdbeAddOpList(v, ArraySize(dropTrigger), dropTrigger); + sqlite3VdbeChangeP4(v, base+1, pTrigger->zName, P4_TRANSIENT); + sqlite3VdbeChangeP4(v, base+4, "trigger", P4_STATIC); + sqlite3ChangeCookie(pParse, iDb); + sqlite3VdbeAddOp2(v, OP_Close, 0, 0); + sqlite3VdbeAddOp4(v, OP_DropTrigger, iDb, 0, 0, pTrigger->zName, 0); + if( pParse->nMem<3 ){ + pParse->nMem = 3; + } + } +} + +/* +** Remove a trigger from the hash tables of the sqlite* pointer. +*/ +SQLITE_PRIVATE void sqlite3UnlinkAndDeleteTrigger(sqlite3 *db, int iDb, const char *zName){ + Trigger *pTrigger; + Hash *pHash; + + assert( sqlite3SchemaMutexHeld(db, iDb, 0) ); + pHash = &(db->aDb[iDb].pSchema->trigHash); + pTrigger = sqlite3HashInsert(pHash, zName, sqlite3Strlen30(zName), 0); + if( ALWAYS(pTrigger) ){ + if( pTrigger->pSchema==pTrigger->pTabSchema ){ + Table *pTab = tableOfTrigger(pTrigger); + Trigger **pp; + for(pp=&pTab->pTrigger; *pp!=pTrigger; pp=&((*pp)->pNext)); + *pp = (*pp)->pNext; + } + sqlite3DeleteTrigger(db, pTrigger); + db->flags |= SQLITE_InternChanges; + } +} + +/* +** pEList is the SET clause of an UPDATE statement. Each entry +** in pEList is of the format =. If any of the entries +** in pEList have an which matches an identifier in pIdList, +** then return TRUE. If pIdList==NULL, then it is considered a +** wildcard that matches anything. Likewise if pEList==NULL then +** it matches anything so always return true. Return false only +** if there is no match. +*/ +static int checkColumnOverlap(IdList *pIdList, ExprList *pEList){ + int e; + if( pIdList==0 || NEVER(pEList==0) ) return 1; + for(e=0; enExpr; e++){ + if( sqlite3IdListIndex(pIdList, pEList->a[e].zName)>=0 ) return 1; + } + return 0; +} + +/* +** Return a list of all triggers on table pTab if there exists at least +** one trigger that must be fired when an operation of type 'op' is +** performed on the table, and, if that operation is an UPDATE, if at +** least one of the columns in pChanges is being modified. +*/ +SQLITE_PRIVATE Trigger *sqlite3TriggersExist( + Parse *pParse, /* Parse context */ + Table *pTab, /* The table the contains the triggers */ + int op, /* one of TK_DELETE, TK_INSERT, TK_UPDATE */ + ExprList *pChanges, /* Columns that change in an UPDATE statement */ + int *pMask /* OUT: Mask of TRIGGER_BEFORE|TRIGGER_AFTER */ +){ + int mask = 0; + Trigger *pList = 0; + Trigger *p; + + if( (pParse->db->flags & SQLITE_EnableTrigger)!=0 ){ + pList = sqlite3TriggerList(pParse, pTab); + } + assert( pList==0 || IsVirtual(pTab)==0 ); + for(p=pList; p; p=p->pNext){ + if( p->op==op && checkColumnOverlap(p->pColumns, pChanges) ){ + mask |= p->tr_tm; + } + } + if( pMask ){ + *pMask = mask; + } + return (mask ? pList : 0); +} + +/* +** Convert the pStep->target token into a SrcList and return a pointer +** to that SrcList. +** +** This routine adds a specific database name, if needed, to the target when +** forming the SrcList. This prevents a trigger in one database from +** referring to a target in another database. An exception is when the +** trigger is in TEMP in which case it can refer to any other database it +** wants. +*/ +static SrcList *targetSrcList( + Parse *pParse, /* The parsing context */ + TriggerStep *pStep /* The trigger containing the target token */ +){ + int iDb; /* Index of the database to use */ + SrcList *pSrc; /* SrcList to be returned */ + + pSrc = sqlite3SrcListAppend(pParse->db, 0, &pStep->target, 0); + if( pSrc ){ + assert( pSrc->nSrc>0 ); + assert( pSrc->a!=0 ); + iDb = sqlite3SchemaToIndex(pParse->db, pStep->pTrig->pSchema); + if( iDb==0 || iDb>=2 ){ + sqlite3 *db = pParse->db; + assert( iDbdb->nDb ); + pSrc->a[pSrc->nSrc-1].zDatabase = sqlite3DbStrDup(db, db->aDb[iDb].zName); + } + } + return pSrc; +} + +/* +** Generate VDBE code for the statements inside the body of a single +** trigger. +*/ +static int codeTriggerProgram( + Parse *pParse, /* The parser context */ + TriggerStep *pStepList, /* List of statements inside the trigger body */ + int orconf /* Conflict algorithm. (OE_Abort, etc) */ +){ + TriggerStep *pStep; + Vdbe *v = pParse->pVdbe; + sqlite3 *db = pParse->db; + + assert( pParse->pTriggerTab && pParse->pToplevel ); + assert( pStepList ); + assert( v!=0 ); + for(pStep=pStepList; pStep; pStep=pStep->pNext){ + /* Figure out the ON CONFLICT policy that will be used for this step + ** of the trigger program. If the statement that caused this trigger + ** to fire had an explicit ON CONFLICT, then use it. Otherwise, use + ** the ON CONFLICT policy that was specified as part of the trigger + ** step statement. Example: + ** + ** CREATE TRIGGER AFTER INSERT ON t1 BEGIN; + ** INSERT OR REPLACE INTO t2 VALUES(new.a, new.b); + ** END; + ** + ** INSERT INTO t1 ... ; -- insert into t2 uses REPLACE policy + ** INSERT OR IGNORE INTO t1 ... ; -- insert into t2 uses IGNORE policy + */ + pParse->eOrconf = (orconf==OE_Default)?pStep->orconf:(u8)orconf; + + switch( pStep->op ){ + case TK_UPDATE: { + sqlite3Update(pParse, + targetSrcList(pParse, pStep), + sqlite3ExprListDup(db, pStep->pExprList, 0), + sqlite3ExprDup(db, pStep->pWhere, 0), + pParse->eOrconf + ); + break; + } + case TK_INSERT: { + sqlite3Insert(pParse, + targetSrcList(pParse, pStep), + sqlite3ExprListDup(db, pStep->pExprList, 0), + sqlite3SelectDup(db, pStep->pSelect, 0), + sqlite3IdListDup(db, pStep->pIdList), + pParse->eOrconf + ); + break; + } + case TK_DELETE: { + sqlite3DeleteFrom(pParse, + targetSrcList(pParse, pStep), + sqlite3ExprDup(db, pStep->pWhere, 0) + ); + break; + } + default: assert( pStep->op==TK_SELECT ); { + SelectDest sDest; + Select *pSelect = sqlite3SelectDup(db, pStep->pSelect, 0); + sqlite3SelectDestInit(&sDest, SRT_Discard, 0); + sqlite3Select(pParse, pSelect, &sDest); + sqlite3SelectDelete(db, pSelect); + break; + } + } + if( pStep->op!=TK_SELECT ){ + sqlite3VdbeAddOp0(v, OP_ResetCount); + } + } + + return 0; +} + +#ifdef SQLITE_DEBUG +/* +** This function is used to add VdbeComment() annotations to a VDBE +** program. It is not used in production code, only for debugging. +*/ +static const char *onErrorText(int onError){ + switch( onError ){ + case OE_Abort: return "abort"; + case OE_Rollback: return "rollback"; + case OE_Fail: return "fail"; + case OE_Replace: return "replace"; + case OE_Ignore: return "ignore"; + case OE_Default: return "default"; + } + return "n/a"; +} +#endif + +/* +** Parse context structure pFrom has just been used to create a sub-vdbe +** (trigger program). If an error has occurred, transfer error information +** from pFrom to pTo. +*/ +static void transferParseError(Parse *pTo, Parse *pFrom){ + assert( pFrom->zErrMsg==0 || pFrom->nErr ); + assert( pTo->zErrMsg==0 || pTo->nErr ); + if( pTo->nErr==0 ){ + pTo->zErrMsg = pFrom->zErrMsg; + pTo->nErr = pFrom->nErr; + }else{ + sqlite3DbFree(pFrom->db, pFrom->zErrMsg); + } +} + +/* +** Create and populate a new TriggerPrg object with a sub-program +** implementing trigger pTrigger with ON CONFLICT policy orconf. +*/ +static TriggerPrg *codeRowTrigger( + Parse *pParse, /* Current parse context */ + Trigger *pTrigger, /* Trigger to code */ + Table *pTab, /* The table pTrigger is attached to */ + int orconf /* ON CONFLICT policy to code trigger program with */ +){ + Parse *pTop = sqlite3ParseToplevel(pParse); + sqlite3 *db = pParse->db; /* Database handle */ + TriggerPrg *pPrg; /* Value to return */ + Expr *pWhen = 0; /* Duplicate of trigger WHEN expression */ + Vdbe *v; /* Temporary VM */ + NameContext sNC; /* Name context for sub-vdbe */ + SubProgram *pProgram = 0; /* Sub-vdbe for trigger program */ + Parse *pSubParse; /* Parse context for sub-vdbe */ + int iEndTrigger = 0; /* Label to jump to if WHEN is false */ + + assert( pTrigger->zName==0 || pTab==tableOfTrigger(pTrigger) ); + assert( pTop->pVdbe ); + + /* Allocate the TriggerPrg and SubProgram objects. To ensure that they + ** are freed if an error occurs, link them into the Parse.pTriggerPrg + ** list of the top-level Parse object sooner rather than later. */ + pPrg = sqlite3DbMallocZero(db, sizeof(TriggerPrg)); + if( !pPrg ) return 0; + pPrg->pNext = pTop->pTriggerPrg; + pTop->pTriggerPrg = pPrg; + pPrg->pProgram = pProgram = sqlite3DbMallocZero(db, sizeof(SubProgram)); + if( !pProgram ) return 0; + sqlite3VdbeLinkSubProgram(pTop->pVdbe, pProgram); + pPrg->pTrigger = pTrigger; + pPrg->orconf = orconf; + pPrg->aColmask[0] = 0xffffffff; + pPrg->aColmask[1] = 0xffffffff; + + /* Allocate and populate a new Parse context to use for coding the + ** trigger sub-program. */ + pSubParse = sqlite3StackAllocZero(db, sizeof(Parse)); + if( !pSubParse ) return 0; + memset(&sNC, 0, sizeof(sNC)); + sNC.pParse = pSubParse; + pSubParse->db = db; + pSubParse->pTriggerTab = pTab; + pSubParse->pToplevel = pTop; + pSubParse->zAuthContext = pTrigger->zName; + pSubParse->eTriggerOp = pTrigger->op; + pSubParse->nQueryLoop = pParse->nQueryLoop; + + v = sqlite3GetVdbe(pSubParse); + if( v ){ + VdbeComment((v, "Start: %s.%s (%s %s%s%s ON %s)", + pTrigger->zName, onErrorText(orconf), + (pTrigger->tr_tm==TRIGGER_BEFORE ? "BEFORE" : "AFTER"), + (pTrigger->op==TK_UPDATE ? "UPDATE" : ""), + (pTrigger->op==TK_INSERT ? "INSERT" : ""), + (pTrigger->op==TK_DELETE ? "DELETE" : ""), + pTab->zName + )); +#ifndef SQLITE_OMIT_TRACE + sqlite3VdbeChangeP4(v, -1, + sqlite3MPrintf(db, "-- TRIGGER %s", pTrigger->zName), P4_DYNAMIC + ); +#endif + + /* If one was specified, code the WHEN clause. If it evaluates to false + ** (or NULL) the sub-vdbe is immediately halted by jumping to the + ** OP_Halt inserted at the end of the program. */ + if( pTrigger->pWhen ){ + pWhen = sqlite3ExprDup(db, pTrigger->pWhen, 0); + if( SQLITE_OK==sqlite3ResolveExprNames(&sNC, pWhen) + && db->mallocFailed==0 + ){ + iEndTrigger = sqlite3VdbeMakeLabel(v); + sqlite3ExprIfFalse(pSubParse, pWhen, iEndTrigger, SQLITE_JUMPIFNULL); + } + sqlite3ExprDelete(db, pWhen); + } + + /* Code the trigger program into the sub-vdbe. */ + codeTriggerProgram(pSubParse, pTrigger->step_list, orconf); + + /* Insert an OP_Halt at the end of the sub-program. */ + if( iEndTrigger ){ + sqlite3VdbeResolveLabel(v, iEndTrigger); + } + sqlite3VdbeAddOp0(v, OP_Halt); + VdbeComment((v, "End: %s.%s", pTrigger->zName, onErrorText(orconf))); + + transferParseError(pParse, pSubParse); + if( db->mallocFailed==0 ){ + pProgram->aOp = sqlite3VdbeTakeOpArray(v, &pProgram->nOp, &pTop->nMaxArg); + } + pProgram->nMem = pSubParse->nMem; + pProgram->nCsr = pSubParse->nTab; + pProgram->nOnce = pSubParse->nOnce; + pProgram->token = (void *)pTrigger; + pPrg->aColmask[0] = pSubParse->oldmask; + pPrg->aColmask[1] = pSubParse->newmask; + sqlite3VdbeDelete(v); + } + + assert( !pSubParse->pAinc && !pSubParse->pZombieTab ); + assert( !pSubParse->pTriggerPrg && !pSubParse->nMaxArg ); + sqlite3StackFree(db, pSubParse); + + return pPrg; +} + +/* +** Return a pointer to a TriggerPrg object containing the sub-program for +** trigger pTrigger with default ON CONFLICT algorithm orconf. If no such +** TriggerPrg object exists, a new object is allocated and populated before +** being returned. +*/ +static TriggerPrg *getRowTrigger( + Parse *pParse, /* Current parse context */ + Trigger *pTrigger, /* Trigger to code */ + Table *pTab, /* The table trigger pTrigger is attached to */ + int orconf /* ON CONFLICT algorithm. */ +){ + Parse *pRoot = sqlite3ParseToplevel(pParse); + TriggerPrg *pPrg; + + assert( pTrigger->zName==0 || pTab==tableOfTrigger(pTrigger) ); + + /* It may be that this trigger has already been coded (or is in the + ** process of being coded). If this is the case, then an entry with + ** a matching TriggerPrg.pTrigger field will be present somewhere + ** in the Parse.pTriggerPrg list. Search for such an entry. */ + for(pPrg=pRoot->pTriggerPrg; + pPrg && (pPrg->pTrigger!=pTrigger || pPrg->orconf!=orconf); + pPrg=pPrg->pNext + ); + + /* If an existing TriggerPrg could not be located, create a new one. */ + if( !pPrg ){ + pPrg = codeRowTrigger(pParse, pTrigger, pTab, orconf); + } + + return pPrg; +} + +/* +** Generate code for the trigger program associated with trigger p on +** table pTab. The reg, orconf and ignoreJump parameters passed to this +** function are the same as those described in the header function for +** sqlite3CodeRowTrigger() +*/ +SQLITE_PRIVATE void sqlite3CodeRowTriggerDirect( + Parse *pParse, /* Parse context */ + Trigger *p, /* Trigger to code */ + Table *pTab, /* The table to code triggers from */ + int reg, /* Reg array containing OLD.* and NEW.* values */ + int orconf, /* ON CONFLICT policy */ + int ignoreJump /* Instruction to jump to for RAISE(IGNORE) */ +){ + Vdbe *v = sqlite3GetVdbe(pParse); /* Main VM */ + TriggerPrg *pPrg; + pPrg = getRowTrigger(pParse, p, pTab, orconf); + assert( pPrg || pParse->nErr || pParse->db->mallocFailed ); + + /* Code the OP_Program opcode in the parent VDBE. P4 of the OP_Program + ** is a pointer to the sub-vdbe containing the trigger program. */ + if( pPrg ){ + int bRecursive = (p->zName && 0==(pParse->db->flags&SQLITE_RecTriggers)); + + sqlite3VdbeAddOp3(v, OP_Program, reg, ignoreJump, ++pParse->nMem); + sqlite3VdbeChangeP4(v, -1, (const char *)pPrg->pProgram, P4_SUBPROGRAM); + VdbeComment( + (v, "Call: %s.%s", (p->zName?p->zName:"fkey"), onErrorText(orconf))); + + /* Set the P5 operand of the OP_Program instruction to non-zero if + ** recursive invocation of this trigger program is disallowed. Recursive + ** invocation is disallowed if (a) the sub-program is really a trigger, + ** not a foreign key action, and (b) the flag to enable recursive triggers + ** is clear. */ + sqlite3VdbeChangeP5(v, (u8)bRecursive); + } +} + +/* +** This is called to code the required FOR EACH ROW triggers for an operation +** on table pTab. The operation to code triggers for (INSERT, UPDATE or DELETE) +** is given by the op paramater. The tr_tm parameter determines whether the +** BEFORE or AFTER triggers are coded. If the operation is an UPDATE, then +** parameter pChanges is passed the list of columns being modified. +** +** If there are no triggers that fire at the specified time for the specified +** operation on pTab, this function is a no-op. +** +** The reg argument is the address of the first in an array of registers +** that contain the values substituted for the new.* and old.* references +** in the trigger program. If N is the number of columns in table pTab +** (a copy of pTab->nCol), then registers are populated as follows: +** +** Register Contains +** ------------------------------------------------------ +** reg+0 OLD.rowid +** reg+1 OLD.* value of left-most column of pTab +** ... ... +** reg+N OLD.* value of right-most column of pTab +** reg+N+1 NEW.rowid +** reg+N+2 OLD.* value of left-most column of pTab +** ... ... +** reg+N+N+1 NEW.* value of right-most column of pTab +** +** For ON DELETE triggers, the registers containing the NEW.* values will +** never be accessed by the trigger program, so they are not allocated or +** populated by the caller (there is no data to populate them with anyway). +** Similarly, for ON INSERT triggers the values stored in the OLD.* registers +** are never accessed, and so are not allocated by the caller. So, for an +** ON INSERT trigger, the value passed to this function as parameter reg +** is not a readable register, although registers (reg+N) through +** (reg+N+N+1) are. +** +** Parameter orconf is the default conflict resolution algorithm for the +** trigger program to use (REPLACE, IGNORE etc.). Parameter ignoreJump +** is the instruction that control should jump to if a trigger program +** raises an IGNORE exception. +*/ +SQLITE_PRIVATE void sqlite3CodeRowTrigger( + Parse *pParse, /* Parse context */ + Trigger *pTrigger, /* List of triggers on table pTab */ + int op, /* One of TK_UPDATE, TK_INSERT, TK_DELETE */ + ExprList *pChanges, /* Changes list for any UPDATE OF triggers */ + int tr_tm, /* One of TRIGGER_BEFORE, TRIGGER_AFTER */ + Table *pTab, /* The table to code triggers from */ + int reg, /* The first in an array of registers (see above) */ + int orconf, /* ON CONFLICT policy */ + int ignoreJump /* Instruction to jump to for RAISE(IGNORE) */ +){ + Trigger *p; /* Used to iterate through pTrigger list */ + + assert( op==TK_UPDATE || op==TK_INSERT || op==TK_DELETE ); + assert( tr_tm==TRIGGER_BEFORE || tr_tm==TRIGGER_AFTER ); + assert( (op==TK_UPDATE)==(pChanges!=0) ); + + for(p=pTrigger; p; p=p->pNext){ + + /* Sanity checking: The schema for the trigger and for the table are + ** always defined. The trigger must be in the same schema as the table + ** or else it must be a TEMP trigger. */ + assert( p->pSchema!=0 ); + assert( p->pTabSchema!=0 ); + assert( p->pSchema==p->pTabSchema + || p->pSchema==pParse->db->aDb[1].pSchema ); + + /* Determine whether we should code this trigger */ + if( p->op==op + && p->tr_tm==tr_tm + && checkColumnOverlap(p->pColumns, pChanges) + ){ + sqlite3CodeRowTriggerDirect(pParse, p, pTab, reg, orconf, ignoreJump); + } + } +} + +/* +** Triggers may access values stored in the old.* or new.* pseudo-table. +** This function returns a 32-bit bitmask indicating which columns of the +** old.* or new.* tables actually are used by triggers. This information +** may be used by the caller, for example, to avoid having to load the entire +** old.* record into memory when executing an UPDATE or DELETE command. +** +** Bit 0 of the returned mask is set if the left-most column of the +** table may be accessed using an [old|new].
    reference. Bit 1 is set if +** the second leftmost column value is required, and so on. If there +** are more than 32 columns in the table, and at least one of the columns +** with an index greater than 32 may be accessed, 0xffffffff is returned. +** +** It is not possible to determine if the old.rowid or new.rowid column is +** accessed by triggers. The caller must always assume that it is. +** +** Parameter isNew must be either 1 or 0. If it is 0, then the mask returned +** applies to the old.* table. If 1, the new.* table. +** +** Parameter tr_tm must be a mask with one or both of the TRIGGER_BEFORE +** and TRIGGER_AFTER bits set. Values accessed by BEFORE triggers are only +** included in the returned mask if the TRIGGER_BEFORE bit is set in the +** tr_tm parameter. Similarly, values accessed by AFTER triggers are only +** included in the returned mask if the TRIGGER_AFTER bit is set in tr_tm. +*/ +SQLITE_PRIVATE u32 sqlite3TriggerColmask( + Parse *pParse, /* Parse context */ + Trigger *pTrigger, /* List of triggers on table pTab */ + ExprList *pChanges, /* Changes list for any UPDATE OF triggers */ + int isNew, /* 1 for new.* ref mask, 0 for old.* ref mask */ + int tr_tm, /* Mask of TRIGGER_BEFORE|TRIGGER_AFTER */ + Table *pTab, /* The table to code triggers from */ + int orconf /* Default ON CONFLICT policy for trigger steps */ +){ + const int op = pChanges ? TK_UPDATE : TK_DELETE; + u32 mask = 0; + Trigger *p; + + assert( isNew==1 || isNew==0 ); + for(p=pTrigger; p; p=p->pNext){ + if( p->op==op && (tr_tm&p->tr_tm) + && checkColumnOverlap(p->pColumns,pChanges) + ){ + TriggerPrg *pPrg; + pPrg = getRowTrigger(pParse, p, pTab, orconf); + if( pPrg ){ + mask |= pPrg->aColmask[isNew]; + } + } + } + + return mask; +} + +#endif /* !defined(SQLITE_OMIT_TRIGGER) */ + +/************** End of trigger.c *********************************************/ +/************** Begin file update.c ******************************************/ +/* +** 2001 September 15 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** This file contains C code routines that are called by the parser +** to handle UPDATE statements. +*/ + +#ifndef SQLITE_OMIT_VIRTUALTABLE +/* Forward declaration */ +static void updateVirtualTable( + Parse *pParse, /* The parsing context */ + SrcList *pSrc, /* The virtual table to be modified */ + Table *pTab, /* The virtual table */ + ExprList *pChanges, /* The columns to change in the UPDATE statement */ + Expr *pRowidExpr, /* Expression used to recompute the rowid */ + int *aXRef, /* Mapping from columns of pTab to entries in pChanges */ + Expr *pWhere, /* WHERE clause of the UPDATE statement */ + int onError /* ON CONFLICT strategy */ +); +#endif /* SQLITE_OMIT_VIRTUALTABLE */ + +/* +** The most recently coded instruction was an OP_Column to retrieve the +** i-th column of table pTab. This routine sets the P4 parameter of the +** OP_Column to the default value, if any. +** +** The default value of a column is specified by a DEFAULT clause in the +** column definition. This was either supplied by the user when the table +** was created, or added later to the table definition by an ALTER TABLE +** command. If the latter, then the row-records in the table btree on disk +** may not contain a value for the column and the default value, taken +** from the P4 parameter of the OP_Column instruction, is returned instead. +** If the former, then all row-records are guaranteed to include a value +** for the column and the P4 value is not required. +** +** Column definitions created by an ALTER TABLE command may only have +** literal default values specified: a number, null or a string. (If a more +** complicated default expression value was provided, it is evaluated +** when the ALTER TABLE is executed and one of the literal values written +** into the sqlite_master table.) +** +** Therefore, the P4 parameter is only required if the default value for +** the column is a literal number, string or null. The sqlite3ValueFromExpr() +** function is capable of transforming these types of expressions into +** sqlite3_value objects. +** +** If parameter iReg is not negative, code an OP_RealAffinity instruction +** on register iReg. This is used when an equivalent integer value is +** stored in place of an 8-byte floating point value in order to save +** space. +*/ +SQLITE_PRIVATE void sqlite3ColumnDefault(Vdbe *v, Table *pTab, int i, int iReg){ + assert( pTab!=0 ); + if( !pTab->pSelect ){ + sqlite3_value *pValue; + u8 enc = ENC(sqlite3VdbeDb(v)); + Column *pCol = &pTab->aCol[i]; + VdbeComment((v, "%s.%s", pTab->zName, pCol->zName)); + assert( inCol ); + sqlite3ValueFromExpr(sqlite3VdbeDb(v), pCol->pDflt, enc, + pCol->affinity, &pValue); + if( pValue ){ + sqlite3VdbeChangeP4(v, -1, (const char *)pValue, P4_MEM); + } +#ifndef SQLITE_OMIT_FLOATING_POINT + if( iReg>=0 && pTab->aCol[i].affinity==SQLITE_AFF_REAL ){ + sqlite3VdbeAddOp1(v, OP_RealAffinity, iReg); + } +#endif + } +} + +/* +** Process an UPDATE statement. +** +** UPDATE OR IGNORE table_wxyz SET a=b, c=d WHERE e<5 AND f NOT NULL; +** \_______/ \________/ \______/ \________________/ +* onError pTabList pChanges pWhere +*/ +SQLITE_PRIVATE void sqlite3Update( + Parse *pParse, /* The parser context */ + SrcList *pTabList, /* The table in which we should change things */ + ExprList *pChanges, /* Things to be changed */ + Expr *pWhere, /* The WHERE clause. May be null */ + int onError /* How to handle constraint errors */ +){ + int i, j; /* Loop counters */ + Table *pTab; /* The table to be updated */ + int addr = 0; /* VDBE instruction address of the start of the loop */ + WhereInfo *pWInfo; /* Information about the WHERE clause */ + Vdbe *v; /* The virtual database engine */ + Index *pIdx; /* For looping over indices */ + int nIdx; /* Number of indices that need updating */ + int iCur; /* VDBE Cursor number of pTab */ + sqlite3 *db; /* The database structure */ + int *aRegIdx = 0; /* One register assigned to each index to be updated */ + int *aXRef = 0; /* aXRef[i] is the index in pChanges->a[] of the + ** an expression for the i-th column of the table. + ** aXRef[i]==-1 if the i-th column is not changed. */ + int chngRowid; /* True if the record number is being changed */ + Expr *pRowidExpr = 0; /* Expression defining the new record number */ + int openAll = 0; /* True if all indices need to be opened */ + AuthContext sContext; /* The authorization context */ + NameContext sNC; /* The name-context to resolve expressions in */ + int iDb; /* Database containing the table being updated */ + int okOnePass; /* True for one-pass algorithm without the FIFO */ + int hasFK; /* True if foreign key processing is required */ + +#ifndef SQLITE_OMIT_TRIGGER + int isView; /* True when updating a view (INSTEAD OF trigger) */ + Trigger *pTrigger; /* List of triggers on pTab, if required */ + int tmask; /* Mask of TRIGGER_BEFORE|TRIGGER_AFTER */ +#endif + int newmask; /* Mask of NEW.* columns accessed by BEFORE triggers */ + + /* Register Allocations */ + int regRowCount = 0; /* A count of rows changed */ + int regOldRowid; /* The old rowid */ + int regNewRowid; /* The new rowid */ + int regNew; /* Content of the NEW.* table in triggers */ + int regOld = 0; /* Content of OLD.* table in triggers */ + int regRowSet = 0; /* Rowset of rows to be updated */ + + memset(&sContext, 0, sizeof(sContext)); + db = pParse->db; + if( pParse->nErr || db->mallocFailed ){ + goto update_cleanup; + } + assert( pTabList->nSrc==1 ); + + /* Locate the table which we want to update. + */ + pTab = sqlite3SrcListLookup(pParse, pTabList); + if( pTab==0 ) goto update_cleanup; + iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema); + + /* Figure out if we have any triggers and if the table being + ** updated is a view. + */ +#ifndef SQLITE_OMIT_TRIGGER + pTrigger = sqlite3TriggersExist(pParse, pTab, TK_UPDATE, pChanges, &tmask); + isView = pTab->pSelect!=0; + assert( pTrigger || tmask==0 ); +#else +# define pTrigger 0 +# define isView 0 +# define tmask 0 +#endif +#ifdef SQLITE_OMIT_VIEW +# undef isView +# define isView 0 +#endif + + if( sqlite3ViewGetColumnNames(pParse, pTab) ){ + goto update_cleanup; + } + if( sqlite3IsReadOnly(pParse, pTab, tmask) ){ + goto update_cleanup; + } + aXRef = sqlite3DbMallocRaw(db, sizeof(int) * pTab->nCol ); + if( aXRef==0 ) goto update_cleanup; + for(i=0; inCol; i++) aXRef[i] = -1; + + /* Allocate a cursors for the main database table and for all indices. + ** The index cursors might not be used, but if they are used they + ** need to occur right after the database cursor. So go ahead and + ** allocate enough space, just in case. + */ + pTabList->a[0].iCursor = iCur = pParse->nTab++; + for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){ + pParse->nTab++; + } + + /* Initialize the name-context */ + memset(&sNC, 0, sizeof(sNC)); + sNC.pParse = pParse; + sNC.pSrcList = pTabList; + + /* Resolve the column names in all the expressions of the + ** of the UPDATE statement. Also find the column index + ** for each column to be updated in the pChanges array. For each + ** column to be updated, make sure we have authorization to change + ** that column. + */ + chngRowid = 0; + for(i=0; inExpr; i++){ + if( sqlite3ResolveExprNames(&sNC, pChanges->a[i].pExpr) ){ + goto update_cleanup; + } + for(j=0; jnCol; j++){ + if( sqlite3StrICmp(pTab->aCol[j].zName, pChanges->a[i].zName)==0 ){ + if( j==pTab->iPKey ){ + chngRowid = 1; + pRowidExpr = pChanges->a[i].pExpr; + } + aXRef[j] = i; + break; + } + } + if( j>=pTab->nCol ){ + if( sqlite3IsRowid(pChanges->a[i].zName) ){ + chngRowid = 1; + pRowidExpr = pChanges->a[i].pExpr; + }else{ + sqlite3ErrorMsg(pParse, "no such column: %s", pChanges->a[i].zName); + pParse->checkSchema = 1; + goto update_cleanup; + } + } +#ifndef SQLITE_OMIT_AUTHORIZATION + { + int rc; + rc = sqlite3AuthCheck(pParse, SQLITE_UPDATE, pTab->zName, + pTab->aCol[j].zName, db->aDb[iDb].zName); + if( rc==SQLITE_DENY ){ + goto update_cleanup; + }else if( rc==SQLITE_IGNORE ){ + aXRef[j] = -1; + } + } +#endif + } + + hasFK = sqlite3FkRequired(pParse, pTab, aXRef, chngRowid); + + /* Allocate memory for the array aRegIdx[]. There is one entry in the + ** array for each index associated with table being updated. Fill in + ** the value with a register number for indices that are to be used + ** and with zero for unused indices. + */ + for(nIdx=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, nIdx++){} + if( nIdx>0 ){ + aRegIdx = sqlite3DbMallocRaw(db, sizeof(Index*) * nIdx ); + if( aRegIdx==0 ) goto update_cleanup; + } + for(j=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, j++){ + int reg; + if( hasFK || chngRowid ){ + reg = ++pParse->nMem; + }else{ + reg = 0; + for(i=0; inColumn; i++){ + if( aXRef[pIdx->aiColumn[i]]>=0 ){ + reg = ++pParse->nMem; + break; + } + } + } + aRegIdx[j] = reg; + } + + /* Begin generating code. */ + v = sqlite3GetVdbe(pParse); + if( v==0 ) goto update_cleanup; + if( pParse->nested==0 ) sqlite3VdbeCountChanges(v); + sqlite3BeginWriteOperation(pParse, 1, iDb); + +#ifndef SQLITE_OMIT_VIRTUALTABLE + /* Virtual tables must be handled separately */ + if( IsVirtual(pTab) ){ + updateVirtualTable(pParse, pTabList, pTab, pChanges, pRowidExpr, aXRef, + pWhere, onError); + pWhere = 0; + pTabList = 0; + goto update_cleanup; + } +#endif + + /* Allocate required registers. */ + regRowSet = ++pParse->nMem; + regOldRowid = regNewRowid = ++pParse->nMem; + if( pTrigger || hasFK ){ + regOld = pParse->nMem + 1; + pParse->nMem += pTab->nCol; + } + if( chngRowid || pTrigger || hasFK ){ + regNewRowid = ++pParse->nMem; + } + regNew = pParse->nMem + 1; + pParse->nMem += pTab->nCol; + + /* Start the view context. */ + if( isView ){ + sqlite3AuthContextPush(pParse, &sContext, pTab->zName); + } + + /* If we are trying to update a view, realize that view into + ** a ephemeral table. + */ +#if !defined(SQLITE_OMIT_VIEW) && !defined(SQLITE_OMIT_TRIGGER) + if( isView ){ + sqlite3MaterializeView(pParse, pTab, pWhere, iCur); + } +#endif + + /* Resolve the column names in all the expressions in the + ** WHERE clause. + */ + if( sqlite3ResolveExprNames(&sNC, pWhere) ){ + goto update_cleanup; + } + + /* Begin the database scan + */ + sqlite3VdbeAddOp3(v, OP_Null, 0, regRowSet, regOldRowid); + pWInfo = sqlite3WhereBegin( + pParse, pTabList, pWhere, 0, 0, WHERE_ONEPASS_DESIRED + ); + if( pWInfo==0 ) goto update_cleanup; + okOnePass = pWInfo->okOnePass; + + /* Remember the rowid of every item to be updated. + */ + sqlite3VdbeAddOp2(v, OP_Rowid, iCur, regOldRowid); + if( !okOnePass ){ + sqlite3VdbeAddOp2(v, OP_RowSetAdd, regRowSet, regOldRowid); + } + + /* End the database scan loop. + */ + sqlite3WhereEnd(pWInfo); + + /* Initialize the count of updated rows + */ + if( (db->flags & SQLITE_CountRows) && !pParse->pTriggerTab ){ + regRowCount = ++pParse->nMem; + sqlite3VdbeAddOp2(v, OP_Integer, 0, regRowCount); + } + + if( !isView ){ + /* + ** Open every index that needs updating. Note that if any + ** index could potentially invoke a REPLACE conflict resolution + ** action, then we need to open all indices because we might need + ** to be deleting some records. + */ + if( !okOnePass ) sqlite3OpenTable(pParse, iCur, iDb, pTab, OP_OpenWrite); + if( onError==OE_Replace ){ + openAll = 1; + }else{ + openAll = 0; + for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){ + if( pIdx->onError==OE_Replace ){ + openAll = 1; + break; + } + } + } + for(i=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, i++){ + assert( aRegIdx ); + if( openAll || aRegIdx[i]>0 ){ + KeyInfo *pKey = sqlite3IndexKeyinfo(pParse, pIdx); + sqlite3VdbeAddOp4(v, OP_OpenWrite, iCur+i+1, pIdx->tnum, iDb, + (char*)pKey, P4_KEYINFO_HANDOFF); + assert( pParse->nTab>iCur+i+1 ); + } + } + } + + /* Top of the update loop */ + if( okOnePass ){ + int a1 = sqlite3VdbeAddOp1(v, OP_NotNull, regOldRowid); + addr = sqlite3VdbeAddOp0(v, OP_Goto); + sqlite3VdbeJumpHere(v, a1); + }else{ + addr = sqlite3VdbeAddOp3(v, OP_RowSetRead, regRowSet, 0, regOldRowid); + } + + /* Make cursor iCur point to the record that is being updated. If + ** this record does not exist for some reason (deleted by a trigger, + ** for example, then jump to the next iteration of the RowSet loop. */ + sqlite3VdbeAddOp3(v, OP_NotExists, iCur, addr, regOldRowid); + + /* If the record number will change, set register regNewRowid to + ** contain the new value. If the record number is not being modified, + ** then regNewRowid is the same register as regOldRowid, which is + ** already populated. */ + assert( chngRowid || pTrigger || hasFK || regOldRowid==regNewRowid ); + if( chngRowid ){ + sqlite3ExprCode(pParse, pRowidExpr, regNewRowid); + sqlite3VdbeAddOp1(v, OP_MustBeInt, regNewRowid); + } + + /* If there are triggers on this table, populate an array of registers + ** with the required old.* column data. */ + if( hasFK || pTrigger ){ + u32 oldmask = (hasFK ? sqlite3FkOldmask(pParse, pTab) : 0); + oldmask |= sqlite3TriggerColmask(pParse, + pTrigger, pChanges, 0, TRIGGER_BEFORE|TRIGGER_AFTER, pTab, onError + ); + for(i=0; inCol; i++){ + if( aXRef[i]<0 || oldmask==0xffffffff || (i<32 && (oldmask & (1<nCol-1); + for(i=0; inCol; i++){ + if( i==pTab->iPKey ){ + /*sqlite3VdbeAddOp2(v, OP_Null, 0, regNew+i);*/ + }else{ + j = aXRef[i]; + if( j>=0 ){ + sqlite3ExprCode(pParse, pChanges->a[j].pExpr, regNew+i); + }else if( 0==(tmask&TRIGGER_BEFORE) || i>31 || (newmask&(1<nCol); + sqlite3TableAffinityStr(v, pTab); + sqlite3CodeRowTrigger(pParse, pTrigger, TK_UPDATE, pChanges, + TRIGGER_BEFORE, pTab, regOldRowid, onError, addr); + + /* The row-trigger may have deleted the row being updated. In this + ** case, jump to the next row. No updates or AFTER triggers are + ** required. This behaviour - what happens when the row being updated + ** is deleted or renamed by a BEFORE trigger - is left undefined in the + ** documentation. + */ + sqlite3VdbeAddOp3(v, OP_NotExists, iCur, addr, regOldRowid); + + /* If it did not delete it, the row-trigger may still have modified + ** some of the columns of the row being updated. Load the values for + ** all columns not modified by the update statement into their + ** registers in case this has happened. + */ + for(i=0; inCol; i++){ + if( aXRef[i]<0 && i!=pTab->iPKey ){ + sqlite3VdbeAddOp3(v, OP_Column, iCur, i, regNew+i); + sqlite3ColumnDefault(v, pTab, i, regNew+i); + } + } + } + + if( !isView ){ + int j1; /* Address of jump instruction */ + + /* Do constraint checks. */ + sqlite3GenerateConstraintChecks(pParse, pTab, iCur, regNewRowid, + aRegIdx, (chngRowid?regOldRowid:0), 1, onError, addr, 0); + + /* Do FK constraint checks. */ + if( hasFK ){ + sqlite3FkCheck(pParse, pTab, regOldRowid, 0); + } + + /* Delete the index entries associated with the current record. */ + j1 = sqlite3VdbeAddOp3(v, OP_NotExists, iCur, 0, regOldRowid); + sqlite3GenerateRowIndexDelete(pParse, pTab, iCur, aRegIdx); + + /* If changing the record number, delete the old record. */ + if( hasFK || chngRowid ){ + sqlite3VdbeAddOp2(v, OP_Delete, iCur, 0); + } + sqlite3VdbeJumpHere(v, j1); + + if( hasFK ){ + sqlite3FkCheck(pParse, pTab, 0, regNewRowid); + } + + /* Insert the new index entries and the new record. */ + sqlite3CompleteInsertion(pParse, pTab, iCur, regNewRowid, aRegIdx, 1, 0, 0); + + /* Do any ON CASCADE, SET NULL or SET DEFAULT operations required to + ** handle rows (possibly in other tables) that refer via a foreign key + ** to the row just updated. */ + if( hasFK ){ + sqlite3FkActions(pParse, pTab, pChanges, regOldRowid); + } + } + + /* Increment the row counter + */ + if( (db->flags & SQLITE_CountRows) && !pParse->pTriggerTab){ + sqlite3VdbeAddOp2(v, OP_AddImm, regRowCount, 1); + } + + sqlite3CodeRowTrigger(pParse, pTrigger, TK_UPDATE, pChanges, + TRIGGER_AFTER, pTab, regOldRowid, onError, addr); + + /* Repeat the above with the next record to be updated, until + ** all record selected by the WHERE clause have been updated. + */ + sqlite3VdbeAddOp2(v, OP_Goto, 0, addr); + sqlite3VdbeJumpHere(v, addr); + + /* Close all tables */ + for(i=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, i++){ + assert( aRegIdx ); + if( openAll || aRegIdx[i]>0 ){ + sqlite3VdbeAddOp2(v, OP_Close, iCur+i+1, 0); + } + } + sqlite3VdbeAddOp2(v, OP_Close, iCur, 0); + + /* Update the sqlite_sequence table by storing the content of the + ** maximum rowid counter values recorded while inserting into + ** autoincrement tables. + */ + if( pParse->nested==0 && pParse->pTriggerTab==0 ){ + sqlite3AutoincrementEnd(pParse); + } + + /* + ** Return the number of rows that were changed. If this routine is + ** generating code because of a call to sqlite3NestedParse(), do not + ** invoke the callback function. + */ + if( (db->flags&SQLITE_CountRows) && !pParse->pTriggerTab && !pParse->nested ){ + sqlite3VdbeAddOp2(v, OP_ResultRow, regRowCount, 1); + sqlite3VdbeSetNumCols(v, 1); + sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "rows updated", SQLITE_STATIC); + } + +update_cleanup: + sqlite3AuthContextPop(&sContext); + sqlite3DbFree(db, aRegIdx); + sqlite3DbFree(db, aXRef); + sqlite3SrcListDelete(db, pTabList); + sqlite3ExprListDelete(db, pChanges); + sqlite3ExprDelete(db, pWhere); + return; +} +/* Make sure "isView" and other macros defined above are undefined. Otherwise +** thely may interfere with compilation of other functions in this file +** (or in another file, if this file becomes part of the amalgamation). */ +#ifdef isView + #undef isView +#endif +#ifdef pTrigger + #undef pTrigger +#endif + +#ifndef SQLITE_OMIT_VIRTUALTABLE +/* +** Generate code for an UPDATE of a virtual table. +** +** The strategy is that we create an ephemerial table that contains +** for each row to be changed: +** +** (A) The original rowid of that row. +** (B) The revised rowid for the row. (note1) +** (C) The content of every column in the row. +** +** Then we loop over this ephemeral table and for each row in +** the ephermeral table call VUpdate. +** +** When finished, drop the ephemeral table. +** +** (note1) Actually, if we know in advance that (A) is always the same +** as (B) we only store (A), then duplicate (A) when pulling +** it out of the ephemeral table before calling VUpdate. +*/ +static void updateVirtualTable( + Parse *pParse, /* The parsing context */ + SrcList *pSrc, /* The virtual table to be modified */ + Table *pTab, /* The virtual table */ + ExprList *pChanges, /* The columns to change in the UPDATE statement */ + Expr *pRowid, /* Expression used to recompute the rowid */ + int *aXRef, /* Mapping from columns of pTab to entries in pChanges */ + Expr *pWhere, /* WHERE clause of the UPDATE statement */ + int onError /* ON CONFLICT strategy */ +){ + Vdbe *v = pParse->pVdbe; /* Virtual machine under construction */ + ExprList *pEList = 0; /* The result set of the SELECT statement */ + Select *pSelect = 0; /* The SELECT statement */ + Expr *pExpr; /* Temporary expression */ + int ephemTab; /* Table holding the result of the SELECT */ + int i; /* Loop counter */ + int addr; /* Address of top of loop */ + int iReg; /* First register in set passed to OP_VUpdate */ + sqlite3 *db = pParse->db; /* Database connection */ + const char *pVTab = (const char*)sqlite3GetVTable(db, pTab); + SelectDest dest; + + /* Construct the SELECT statement that will find the new values for + ** all updated rows. + */ + pEList = sqlite3ExprListAppend(pParse, 0, sqlite3Expr(db, TK_ID, "_rowid_")); + if( pRowid ){ + pEList = sqlite3ExprListAppend(pParse, pEList, + sqlite3ExprDup(db, pRowid, 0)); + } + assert( pTab->iPKey<0 ); + for(i=0; inCol; i++){ + if( aXRef[i]>=0 ){ + pExpr = sqlite3ExprDup(db, pChanges->a[aXRef[i]].pExpr, 0); + }else{ + pExpr = sqlite3Expr(db, TK_ID, pTab->aCol[i].zName); + } + pEList = sqlite3ExprListAppend(pParse, pEList, pExpr); + } + pSelect = sqlite3SelectNew(pParse, pEList, pSrc, pWhere, 0, 0, 0, 0, 0, 0); + + /* Create the ephemeral table into which the update results will + ** be stored. + */ + assert( v ); + ephemTab = pParse->nTab++; + sqlite3VdbeAddOp2(v, OP_OpenEphemeral, ephemTab, pTab->nCol+1+(pRowid!=0)); + sqlite3VdbeChangeP5(v, BTREE_UNORDERED); + + /* fill the ephemeral table + */ + sqlite3SelectDestInit(&dest, SRT_Table, ephemTab); + sqlite3Select(pParse, pSelect, &dest); + + /* Generate code to scan the ephemeral table and call VUpdate. */ + iReg = ++pParse->nMem; + pParse->nMem += pTab->nCol+1; + addr = sqlite3VdbeAddOp2(v, OP_Rewind, ephemTab, 0); + sqlite3VdbeAddOp3(v, OP_Column, ephemTab, 0, iReg); + sqlite3VdbeAddOp3(v, OP_Column, ephemTab, (pRowid?1:0), iReg+1); + for(i=0; inCol; i++){ + sqlite3VdbeAddOp3(v, OP_Column, ephemTab, i+1+(pRowid!=0), iReg+2+i); + } + sqlite3VtabMakeWritable(pParse, pTab); + sqlite3VdbeAddOp4(v, OP_VUpdate, 0, pTab->nCol+2, iReg, pVTab, P4_VTAB); + sqlite3VdbeChangeP5(v, onError==OE_Default ? OE_Abort : onError); + sqlite3MayAbort(pParse); + sqlite3VdbeAddOp2(v, OP_Next, ephemTab, addr+1); + sqlite3VdbeJumpHere(v, addr); + sqlite3VdbeAddOp2(v, OP_Close, ephemTab, 0); + + /* Cleanup */ + sqlite3SelectDelete(db, pSelect); +} +#endif /* SQLITE_OMIT_VIRTUALTABLE */ + +/************** End of update.c **********************************************/ +/************** Begin file vacuum.c ******************************************/ +/* +** 2003 April 6 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** This file contains code used to implement the VACUUM command. +** +** Most of the code in this file may be omitted by defining the +** SQLITE_OMIT_VACUUM macro. +*/ + +#if !defined(SQLITE_OMIT_VACUUM) && !defined(SQLITE_OMIT_ATTACH) +/* +** Finalize a prepared statement. If there was an error, store the +** text of the error message in *pzErrMsg. Return the result code. +*/ +static int vacuumFinalize(sqlite3 *db, sqlite3_stmt *pStmt, char **pzErrMsg){ + int rc; + rc = sqlite3VdbeFinalize((Vdbe*)pStmt); + if( rc ){ + sqlite3SetString(pzErrMsg, db, sqlite3_errmsg(db)); + } + return rc; +} + +/* +** Execute zSql on database db. Return an error code. +*/ +static int execSql(sqlite3 *db, char **pzErrMsg, const char *zSql){ + sqlite3_stmt *pStmt; + VVA_ONLY( int rc; ) + if( !zSql ){ + return SQLITE_NOMEM; + } + if( SQLITE_OK!=sqlite3_prepare(db, zSql, -1, &pStmt, 0) ){ + sqlite3SetString(pzErrMsg, db, sqlite3_errmsg(db)); + return sqlite3_errcode(db); + } + VVA_ONLY( rc = ) sqlite3_step(pStmt); + assert( rc!=SQLITE_ROW || (db->flags&SQLITE_CountRows) ); + return vacuumFinalize(db, pStmt, pzErrMsg); +} + +/* +** Execute zSql on database db. The statement returns exactly +** one column. Execute this as SQL on the same database. +*/ +static int execExecSql(sqlite3 *db, char **pzErrMsg, const char *zSql){ + sqlite3_stmt *pStmt; + int rc; + + rc = sqlite3_prepare(db, zSql, -1, &pStmt, 0); + if( rc!=SQLITE_OK ) return rc; + + while( SQLITE_ROW==sqlite3_step(pStmt) ){ + rc = execSql(db, pzErrMsg, (char*)sqlite3_column_text(pStmt, 0)); + if( rc!=SQLITE_OK ){ + vacuumFinalize(db, pStmt, pzErrMsg); + return rc; + } + } + + return vacuumFinalize(db, pStmt, pzErrMsg); +} + +/* +** The non-standard VACUUM command is used to clean up the database, +** collapse free space, etc. It is modelled after the VACUUM command +** in PostgreSQL. +** +** In version 1.0.x of SQLite, the VACUUM command would call +** gdbm_reorganize() on all the database tables. But beginning +** with 2.0.0, SQLite no longer uses GDBM so this command has +** become a no-op. +*/ +SQLITE_PRIVATE void sqlite3Vacuum(Parse *pParse){ + Vdbe *v = sqlite3GetVdbe(pParse); + if( v ){ + sqlite3VdbeAddOp2(v, OP_Vacuum, 0, 0); + } + return; +} + +/* +** This routine implements the OP_Vacuum opcode of the VDBE. +*/ +SQLITE_PRIVATE int sqlite3RunVacuum(char **pzErrMsg, sqlite3 *db){ + int rc = SQLITE_OK; /* Return code from service routines */ + Btree *pMain; /* The database being vacuumed */ + Btree *pTemp; /* The temporary database we vacuum into */ + char *zSql = 0; /* SQL statements */ + int saved_flags; /* Saved value of the db->flags */ + int saved_nChange; /* Saved value of db->nChange */ + int saved_nTotalChange; /* Saved value of db->nTotalChange */ + void (*saved_xTrace)(void*,const char*); /* Saved db->xTrace */ + Db *pDb = 0; /* Database to detach at end of vacuum */ + int isMemDb; /* True if vacuuming a :memory: database */ + int nRes; /* Bytes of reserved space at the end of each page */ + int nDb; /* Number of attached databases */ + + if( !db->autoCommit ){ + sqlite3SetString(pzErrMsg, db, "cannot VACUUM from within a transaction"); + return SQLITE_ERROR; + } + if( db->activeVdbeCnt>1 ){ + sqlite3SetString(pzErrMsg, db,"cannot VACUUM - SQL statements in progress"); + return SQLITE_ERROR; + } + + /* Save the current value of the database flags so that it can be + ** restored before returning. Then set the writable-schema flag, and + ** disable CHECK and foreign key constraints. */ + saved_flags = db->flags; + saved_nChange = db->nChange; + saved_nTotalChange = db->nTotalChange; + saved_xTrace = db->xTrace; + db->flags |= SQLITE_WriteSchema | SQLITE_IgnoreChecks | SQLITE_PreferBuiltin; + db->flags &= ~(SQLITE_ForeignKeys | SQLITE_ReverseOrder); + db->xTrace = 0; + + pMain = db->aDb[0].pBt; + isMemDb = sqlite3PagerIsMemdb(sqlite3BtreePager(pMain)); + + /* Attach the temporary database as 'vacuum_db'. The synchronous pragma + ** can be set to 'off' for this file, as it is not recovered if a crash + ** occurs anyway. The integrity of the database is maintained by a + ** (possibly synchronous) transaction opened on the main database before + ** sqlite3BtreeCopyFile() is called. + ** + ** An optimisation would be to use a non-journaled pager. + ** (Later:) I tried setting "PRAGMA vacuum_db.journal_mode=OFF" but + ** that actually made the VACUUM run slower. Very little journalling + ** actually occurs when doing a vacuum since the vacuum_db is initially + ** empty. Only the journal header is written. Apparently it takes more + ** time to parse and run the PRAGMA to turn journalling off than it does + ** to write the journal header file. + */ + nDb = db->nDb; + if( sqlite3TempInMemory(db) ){ + zSql = "ATTACH ':memory:' AS vacuum_db;"; + }else{ + zSql = "ATTACH '' AS vacuum_db;"; + } + rc = execSql(db, pzErrMsg, zSql); + if( db->nDb>nDb ){ + pDb = &db->aDb[db->nDb-1]; + assert( strcmp(pDb->zName,"vacuum_db")==0 ); + } + if( rc!=SQLITE_OK ) goto end_of_vacuum; + pTemp = db->aDb[db->nDb-1].pBt; + + /* The call to execSql() to attach the temp database has left the file + ** locked (as there was more than one active statement when the transaction + ** to read the schema was concluded. Unlock it here so that this doesn't + ** cause problems for the call to BtreeSetPageSize() below. */ + sqlite3BtreeCommit(pTemp); + + nRes = sqlite3BtreeGetReserve(pMain); + + /* A VACUUM cannot change the pagesize of an encrypted database. */ +#ifdef SQLITE_HAS_CODEC + if( db->nextPagesize ){ + extern void sqlite3CodecGetKey(sqlite3*, int, void**, int*); + int nKey; + char *zKey; + sqlite3CodecGetKey(db, 0, (void**)&zKey, &nKey); + if( nKey ) db->nextPagesize = 0; + } +#endif + + rc = execSql(db, pzErrMsg, "PRAGMA vacuum_db.synchronous=OFF"); + if( rc!=SQLITE_OK ) goto end_of_vacuum; + + /* Begin a transaction and take an exclusive lock on the main database + ** file. This is done before the sqlite3BtreeGetPageSize(pMain) call below, + ** to ensure that we do not try to change the page-size on a WAL database. + */ + rc = execSql(db, pzErrMsg, "BEGIN;"); + if( rc!=SQLITE_OK ) goto end_of_vacuum; + rc = sqlite3BtreeBeginTrans(pMain, 2); + if( rc!=SQLITE_OK ) goto end_of_vacuum; + + /* Do not attempt to change the page size for a WAL database */ + if( sqlite3PagerGetJournalMode(sqlite3BtreePager(pMain)) + ==PAGER_JOURNALMODE_WAL ){ + db->nextPagesize = 0; + } + + if( sqlite3BtreeSetPageSize(pTemp, sqlite3BtreeGetPageSize(pMain), nRes, 0) + || (!isMemDb && sqlite3BtreeSetPageSize(pTemp, db->nextPagesize, nRes, 0)) + || NEVER(db->mallocFailed) + ){ + rc = SQLITE_NOMEM; + goto end_of_vacuum; + } + +#ifndef SQLITE_OMIT_AUTOVACUUM + sqlite3BtreeSetAutoVacuum(pTemp, db->nextAutovac>=0 ? db->nextAutovac : + sqlite3BtreeGetAutoVacuum(pMain)); +#endif + + /* Query the schema of the main database. Create a mirror schema + ** in the temporary database. + */ + rc = execExecSql(db, pzErrMsg, + "SELECT 'CREATE TABLE vacuum_db.' || substr(sql,14) " + " FROM sqlite_master WHERE type='table' AND name!='sqlite_sequence'" + " AND rootpage>0" + ); + if( rc!=SQLITE_OK ) goto end_of_vacuum; + rc = execExecSql(db, pzErrMsg, + "SELECT 'CREATE INDEX vacuum_db.' || substr(sql,14)" + " FROM sqlite_master WHERE sql LIKE 'CREATE INDEX %' "); + if( rc!=SQLITE_OK ) goto end_of_vacuum; + rc = execExecSql(db, pzErrMsg, + "SELECT 'CREATE UNIQUE INDEX vacuum_db.' || substr(sql,21) " + " FROM sqlite_master WHERE sql LIKE 'CREATE UNIQUE INDEX %'"); + if( rc!=SQLITE_OK ) goto end_of_vacuum; + + /* Loop through the tables in the main database. For each, do + ** an "INSERT INTO vacuum_db.xxx SELECT * FROM main.xxx;" to copy + ** the contents to the temporary database. + */ + rc = execExecSql(db, pzErrMsg, + "SELECT 'INSERT INTO vacuum_db.' || quote(name) " + "|| ' SELECT * FROM main.' || quote(name) || ';'" + "FROM main.sqlite_master " + "WHERE type = 'table' AND name!='sqlite_sequence' " + " AND rootpage>0" + ); + if( rc!=SQLITE_OK ) goto end_of_vacuum; + + /* Copy over the sequence table + */ + rc = execExecSql(db, pzErrMsg, + "SELECT 'DELETE FROM vacuum_db.' || quote(name) || ';' " + "FROM vacuum_db.sqlite_master WHERE name='sqlite_sequence' " + ); + if( rc!=SQLITE_OK ) goto end_of_vacuum; + rc = execExecSql(db, pzErrMsg, + "SELECT 'INSERT INTO vacuum_db.' || quote(name) " + "|| ' SELECT * FROM main.' || quote(name) || ';' " + "FROM vacuum_db.sqlite_master WHERE name=='sqlite_sequence';" + ); + if( rc!=SQLITE_OK ) goto end_of_vacuum; + + + /* Copy the triggers, views, and virtual tables from the main database + ** over to the temporary database. None of these objects has any + ** associated storage, so all we have to do is copy their entries + ** from the SQLITE_MASTER table. + */ + rc = execSql(db, pzErrMsg, + "INSERT INTO vacuum_db.sqlite_master " + " SELECT type, name, tbl_name, rootpage, sql" + " FROM main.sqlite_master" + " WHERE type='view' OR type='trigger'" + " OR (type='table' AND rootpage=0)" + ); + if( rc ) goto end_of_vacuum; + + /* At this point, there is a write transaction open on both the + ** vacuum database and the main database. Assuming no error occurs, + ** both transactions are closed by this block - the main database + ** transaction by sqlite3BtreeCopyFile() and the other by an explicit + ** call to sqlite3BtreeCommit(). + */ + { + u32 meta; + int i; + + /* This array determines which meta meta values are preserved in the + ** vacuum. Even entries are the meta value number and odd entries + ** are an increment to apply to the meta value after the vacuum. + ** The increment is used to increase the schema cookie so that other + ** connections to the same database will know to reread the schema. + */ + static const unsigned char aCopy[] = { + BTREE_SCHEMA_VERSION, 1, /* Add one to the old schema cookie */ + BTREE_DEFAULT_CACHE_SIZE, 0, /* Preserve the default page cache size */ + BTREE_TEXT_ENCODING, 0, /* Preserve the text encoding */ + BTREE_USER_VERSION, 0, /* Preserve the user version */ + }; + + assert( 1==sqlite3BtreeIsInTrans(pTemp) ); + assert( 1==sqlite3BtreeIsInTrans(pMain) ); + + /* Copy Btree meta values */ + for(i=0; iflags */ + db->flags = saved_flags; + db->nChange = saved_nChange; + db->nTotalChange = saved_nTotalChange; + db->xTrace = saved_xTrace; + sqlite3BtreeSetPageSize(pMain, -1, -1, 1); + + /* Currently there is an SQL level transaction open on the vacuum + ** database. No locks are held on any other files (since the main file + ** was committed at the btree level). So it safe to end the transaction + ** by manually setting the autoCommit flag to true and detaching the + ** vacuum database. The vacuum_db journal file is deleted when the pager + ** is closed by the DETACH. + */ + db->autoCommit = 1; + + if( pDb ){ + sqlite3BtreeClose(pDb->pBt); + pDb->pBt = 0; + pDb->pSchema = 0; + } + + /* This both clears the schemas and reduces the size of the db->aDb[] + ** array. */ + sqlite3ResetAllSchemasOfConnection(db); + + return rc; +} + +#endif /* SQLITE_OMIT_VACUUM && SQLITE_OMIT_ATTACH */ + +/************** End of vacuum.c **********************************************/ +/************** Begin file vtab.c ********************************************/ +/* +** 2006 June 10 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** This file contains code used to help implement virtual tables. +*/ +#ifndef SQLITE_OMIT_VIRTUALTABLE + +/* +** Before a virtual table xCreate() or xConnect() method is invoked, the +** sqlite3.pVtabCtx member variable is set to point to an instance of +** this struct allocated on the stack. It is used by the implementation of +** the sqlite3_declare_vtab() and sqlite3_vtab_config() APIs, both of which +** are invoked only from within xCreate and xConnect methods. +*/ +struct VtabCtx { + VTable *pVTable; /* The virtual table being constructed */ + Table *pTab; /* The Table object to which the virtual table belongs */ +}; + +/* +** The actual function that does the work of creating a new module. +** This function implements the sqlite3_create_module() and +** sqlite3_create_module_v2() interfaces. +*/ +static int createModule( + sqlite3 *db, /* Database in which module is registered */ + const char *zName, /* Name assigned to this module */ + const sqlite3_module *pModule, /* The definition of the module */ + void *pAux, /* Context pointer for xCreate/xConnect */ + void (*xDestroy)(void *) /* Module destructor function */ +){ + int rc = SQLITE_OK; + int nName; + + sqlite3_mutex_enter(db->mutex); + nName = sqlite3Strlen30(zName); + if( sqlite3HashFind(&db->aModule, zName, nName) ){ + rc = SQLITE_MISUSE_BKPT; + }else{ + Module *pMod; + pMod = (Module *)sqlite3DbMallocRaw(db, sizeof(Module) + nName + 1); + if( pMod ){ + Module *pDel; + char *zCopy = (char *)(&pMod[1]); + memcpy(zCopy, zName, nName+1); + pMod->zName = zCopy; + pMod->pModule = pModule; + pMod->pAux = pAux; + pMod->xDestroy = xDestroy; + pDel = (Module *)sqlite3HashInsert(&db->aModule,zCopy,nName,(void*)pMod); + assert( pDel==0 || pDel==pMod ); + if( pDel ){ + db->mallocFailed = 1; + sqlite3DbFree(db, pDel); + } + } + } + rc = sqlite3ApiExit(db, rc); + if( rc!=SQLITE_OK && xDestroy ) xDestroy(pAux); + + sqlite3_mutex_leave(db->mutex); + return rc; +} + + +/* +** External API function used to create a new virtual-table module. +*/ +SQLITE_API int sqlite3_create_module( + sqlite3 *db, /* Database in which module is registered */ + const char *zName, /* Name assigned to this module */ + const sqlite3_module *pModule, /* The definition of the module */ + void *pAux /* Context pointer for xCreate/xConnect */ +){ + return createModule(db, zName, pModule, pAux, 0); +} + +/* +** External API function used to create a new virtual-table module. +*/ +SQLITE_API int sqlite3_create_module_v2( + sqlite3 *db, /* Database in which module is registered */ + const char *zName, /* Name assigned to this module */ + const sqlite3_module *pModule, /* The definition of the module */ + void *pAux, /* Context pointer for xCreate/xConnect */ + void (*xDestroy)(void *) /* Module destructor function */ +){ + return createModule(db, zName, pModule, pAux, xDestroy); +} + +/* +** Lock the virtual table so that it cannot be disconnected. +** Locks nest. Every lock should have a corresponding unlock. +** If an unlock is omitted, resources leaks will occur. +** +** If a disconnect is attempted while a virtual table is locked, +** the disconnect is deferred until all locks have been removed. +*/ +SQLITE_PRIVATE void sqlite3VtabLock(VTable *pVTab){ + pVTab->nRef++; +} + + +/* +** pTab is a pointer to a Table structure representing a virtual-table. +** Return a pointer to the VTable object used by connection db to access +** this virtual-table, if one has been created, or NULL otherwise. +*/ +SQLITE_PRIVATE VTable *sqlite3GetVTable(sqlite3 *db, Table *pTab){ + VTable *pVtab; + assert( IsVirtual(pTab) ); + for(pVtab=pTab->pVTable; pVtab && pVtab->db!=db; pVtab=pVtab->pNext); + return pVtab; +} + +/* +** Decrement the ref-count on a virtual table object. When the ref-count +** reaches zero, call the xDisconnect() method to delete the object. +*/ +SQLITE_PRIVATE void sqlite3VtabUnlock(VTable *pVTab){ + sqlite3 *db = pVTab->db; + + assert( db ); + assert( pVTab->nRef>0 ); + assert( sqlite3SafetyCheckOk(db) ); + + pVTab->nRef--; + if( pVTab->nRef==0 ){ + sqlite3_vtab *p = pVTab->pVtab; + if( p ){ + p->pModule->xDisconnect(p); + } + sqlite3DbFree(db, pVTab); + } +} + +/* +** Table p is a virtual table. This function moves all elements in the +** p->pVTable list to the sqlite3.pDisconnect lists of their associated +** database connections to be disconnected at the next opportunity. +** Except, if argument db is not NULL, then the entry associated with +** connection db is left in the p->pVTable list. +*/ +static VTable *vtabDisconnectAll(sqlite3 *db, Table *p){ + VTable *pRet = 0; + VTable *pVTable = p->pVTable; + p->pVTable = 0; + + /* Assert that the mutex (if any) associated with the BtShared database + ** that contains table p is held by the caller. See header comments + ** above function sqlite3VtabUnlockList() for an explanation of why + ** this makes it safe to access the sqlite3.pDisconnect list of any + ** database connection that may have an entry in the p->pVTable list. + */ + assert( db==0 || sqlite3SchemaMutexHeld(db, 0, p->pSchema) ); + + while( pVTable ){ + sqlite3 *db2 = pVTable->db; + VTable *pNext = pVTable->pNext; + assert( db2 ); + if( db2==db ){ + pRet = pVTable; + p->pVTable = pRet; + pRet->pNext = 0; + }else{ + pVTable->pNext = db2->pDisconnect; + db2->pDisconnect = pVTable; + } + pVTable = pNext; + } + + assert( !db || pRet ); + return pRet; +} + +/* +** Table *p is a virtual table. This function removes the VTable object +** for table *p associated with database connection db from the linked +** list in p->pVTab. It also decrements the VTable ref count. This is +** used when closing database connection db to free all of its VTable +** objects without disturbing the rest of the Schema object (which may +** be being used by other shared-cache connections). +*/ +SQLITE_PRIVATE void sqlite3VtabDisconnect(sqlite3 *db, Table *p){ + VTable **ppVTab; + + assert( IsVirtual(p) ); + assert( sqlite3BtreeHoldsAllMutexes(db) ); + assert( sqlite3_mutex_held(db->mutex) ); + + for(ppVTab=&p->pVTable; *ppVTab; ppVTab=&(*ppVTab)->pNext){ + if( (*ppVTab)->db==db ){ + VTable *pVTab = *ppVTab; + *ppVTab = pVTab->pNext; + sqlite3VtabUnlock(pVTab); + break; + } + } +} + + +/* +** Disconnect all the virtual table objects in the sqlite3.pDisconnect list. +** +** This function may only be called when the mutexes associated with all +** shared b-tree databases opened using connection db are held by the +** caller. This is done to protect the sqlite3.pDisconnect list. The +** sqlite3.pDisconnect list is accessed only as follows: +** +** 1) By this function. In this case, all BtShared mutexes and the mutex +** associated with the database handle itself must be held. +** +** 2) By function vtabDisconnectAll(), when it adds a VTable entry to +** the sqlite3.pDisconnect list. In this case either the BtShared mutex +** associated with the database the virtual table is stored in is held +** or, if the virtual table is stored in a non-sharable database, then +** the database handle mutex is held. +** +** As a result, a sqlite3.pDisconnect cannot be accessed simultaneously +** by multiple threads. It is thread-safe. +*/ +SQLITE_PRIVATE void sqlite3VtabUnlockList(sqlite3 *db){ + VTable *p = db->pDisconnect; + db->pDisconnect = 0; + + assert( sqlite3BtreeHoldsAllMutexes(db) ); + assert( sqlite3_mutex_held(db->mutex) ); + + if( p ){ + sqlite3ExpirePreparedStatements(db); + do { + VTable *pNext = p->pNext; + sqlite3VtabUnlock(p); + p = pNext; + }while( p ); + } +} + +/* +** Clear any and all virtual-table information from the Table record. +** This routine is called, for example, just before deleting the Table +** record. +** +** Since it is a virtual-table, the Table structure contains a pointer +** to the head of a linked list of VTable structures. Each VTable +** structure is associated with a single sqlite3* user of the schema. +** The reference count of the VTable structure associated with database +** connection db is decremented immediately (which may lead to the +** structure being xDisconnected and free). Any other VTable structures +** in the list are moved to the sqlite3.pDisconnect list of the associated +** database connection. +*/ +SQLITE_PRIVATE void sqlite3VtabClear(sqlite3 *db, Table *p){ + if( !db || db->pnBytesFreed==0 ) vtabDisconnectAll(0, p); + if( p->azModuleArg ){ + int i; + for(i=0; inModuleArg; i++){ + sqlite3DbFree(db, p->azModuleArg[i]); + } + sqlite3DbFree(db, p->azModuleArg); + } +} + +/* +** Add a new module argument to pTable->azModuleArg[]. +** The string is not copied - the pointer is stored. The +** string will be freed automatically when the table is +** deleted. +*/ +static void addModuleArgument(sqlite3 *db, Table *pTable, char *zArg){ + int i = pTable->nModuleArg++; + int nBytes = sizeof(char *)*(1+pTable->nModuleArg); + char **azModuleArg; + azModuleArg = sqlite3DbRealloc(db, pTable->azModuleArg, nBytes); + if( azModuleArg==0 ){ + int j; + for(j=0; jazModuleArg[j]); + } + sqlite3DbFree(db, zArg); + sqlite3DbFree(db, pTable->azModuleArg); + pTable->nModuleArg = 0; + }else{ + azModuleArg[i] = zArg; + azModuleArg[i+1] = 0; + } + pTable->azModuleArg = azModuleArg; +} + +/* +** The parser calls this routine when it first sees a CREATE VIRTUAL TABLE +** statement. The module name has been parsed, but the optional list +** of parameters that follow the module name are still pending. +*/ +SQLITE_PRIVATE void sqlite3VtabBeginParse( + Parse *pParse, /* Parsing context */ + Token *pName1, /* Name of new table, or database name */ + Token *pName2, /* Name of new table or NULL */ + Token *pModuleName, /* Name of the module for the virtual table */ + int ifNotExists /* No error if the table already exists */ +){ + int iDb; /* The database the table is being created in */ + Table *pTable; /* The new virtual table */ + sqlite3 *db; /* Database connection */ + + sqlite3StartTable(pParse, pName1, pName2, 0, 0, 1, ifNotExists); + pTable = pParse->pNewTable; + if( pTable==0 ) return; + assert( 0==pTable->pIndex ); + + db = pParse->db; + iDb = sqlite3SchemaToIndex(db, pTable->pSchema); + assert( iDb>=0 ); + + pTable->tabFlags |= TF_Virtual; + pTable->nModuleArg = 0; + addModuleArgument(db, pTable, sqlite3NameFromToken(db, pModuleName)); + addModuleArgument(db, pTable, sqlite3DbStrDup(db, db->aDb[iDb].zName)); + addModuleArgument(db, pTable, sqlite3DbStrDup(db, pTable->zName)); + pParse->sNameToken.n = (int)(&pModuleName->z[pModuleName->n] - pName1->z); + +#ifndef SQLITE_OMIT_AUTHORIZATION + /* Creating a virtual table invokes the authorization callback twice. + ** The first invocation, to obtain permission to INSERT a row into the + ** sqlite_master table, has already been made by sqlite3StartTable(). + ** The second call, to obtain permission to create the table, is made now. + */ + if( pTable->azModuleArg ){ + sqlite3AuthCheck(pParse, SQLITE_CREATE_VTABLE, pTable->zName, + pTable->azModuleArg[0], pParse->db->aDb[iDb].zName); + } +#endif +} + +/* +** This routine takes the module argument that has been accumulating +** in pParse->zArg[] and appends it to the list of arguments on the +** virtual table currently under construction in pParse->pTable. +*/ +static void addArgumentToVtab(Parse *pParse){ + if( pParse->sArg.z && pParse->pNewTable ){ + const char *z = (const char*)pParse->sArg.z; + int n = pParse->sArg.n; + sqlite3 *db = pParse->db; + addModuleArgument(db, pParse->pNewTable, sqlite3DbStrNDup(db, z, n)); + } +} + +/* +** The parser calls this routine after the CREATE VIRTUAL TABLE statement +** has been completely parsed. +*/ +SQLITE_PRIVATE void sqlite3VtabFinishParse(Parse *pParse, Token *pEnd){ + Table *pTab = pParse->pNewTable; /* The table being constructed */ + sqlite3 *db = pParse->db; /* The database connection */ + + if( pTab==0 ) return; + addArgumentToVtab(pParse); + pParse->sArg.z = 0; + if( pTab->nModuleArg<1 ) return; + + /* If the CREATE VIRTUAL TABLE statement is being entered for the + ** first time (in other words if the virtual table is actually being + ** created now instead of just being read out of sqlite_master) then + ** do additional initialization work and store the statement text + ** in the sqlite_master table. + */ + if( !db->init.busy ){ + char *zStmt; + char *zWhere; + int iDb; + Vdbe *v; + + /* Compute the complete text of the CREATE VIRTUAL TABLE statement */ + if( pEnd ){ + pParse->sNameToken.n = (int)(pEnd->z - pParse->sNameToken.z) + pEnd->n; + } + zStmt = sqlite3MPrintf(db, "CREATE VIRTUAL TABLE %T", &pParse->sNameToken); + + /* A slot for the record has already been allocated in the + ** SQLITE_MASTER table. We just need to update that slot with all + ** the information we've collected. + ** + ** The VM register number pParse->regRowid holds the rowid of an + ** entry in the sqlite_master table tht was created for this vtab + ** by sqlite3StartTable(). + */ + iDb = sqlite3SchemaToIndex(db, pTab->pSchema); + sqlite3NestedParse(pParse, + "UPDATE %Q.%s " + "SET type='table', name=%Q, tbl_name=%Q, rootpage=0, sql=%Q " + "WHERE rowid=#%d", + db->aDb[iDb].zName, SCHEMA_TABLE(iDb), + pTab->zName, + pTab->zName, + zStmt, + pParse->regRowid + ); + sqlite3DbFree(db, zStmt); + v = sqlite3GetVdbe(pParse); + sqlite3ChangeCookie(pParse, iDb); + + sqlite3VdbeAddOp2(v, OP_Expire, 0, 0); + zWhere = sqlite3MPrintf(db, "name='%q' AND type='table'", pTab->zName); + sqlite3VdbeAddParseSchemaOp(v, iDb, zWhere); + sqlite3VdbeAddOp4(v, OP_VCreate, iDb, 0, 0, + pTab->zName, sqlite3Strlen30(pTab->zName) + 1); + } + + /* If we are rereading the sqlite_master table create the in-memory + ** record of the table. The xConnect() method is not called until + ** the first time the virtual table is used in an SQL statement. This + ** allows a schema that contains virtual tables to be loaded before + ** the required virtual table implementations are registered. */ + else { + Table *pOld; + Schema *pSchema = pTab->pSchema; + const char *zName = pTab->zName; + int nName = sqlite3Strlen30(zName); + assert( sqlite3SchemaMutexHeld(db, 0, pSchema) ); + pOld = sqlite3HashInsert(&pSchema->tblHash, zName, nName, pTab); + if( pOld ){ + db->mallocFailed = 1; + assert( pTab==pOld ); /* Malloc must have failed inside HashInsert() */ + return; + } + pParse->pNewTable = 0; + } +} + +/* +** The parser calls this routine when it sees the first token +** of an argument to the module name in a CREATE VIRTUAL TABLE statement. +*/ +SQLITE_PRIVATE void sqlite3VtabArgInit(Parse *pParse){ + addArgumentToVtab(pParse); + pParse->sArg.z = 0; + pParse->sArg.n = 0; +} + +/* +** The parser calls this routine for each token after the first token +** in an argument to the module name in a CREATE VIRTUAL TABLE statement. +*/ +SQLITE_PRIVATE void sqlite3VtabArgExtend(Parse *pParse, Token *p){ + Token *pArg = &pParse->sArg; + if( pArg->z==0 ){ + pArg->z = p->z; + pArg->n = p->n; + }else{ + assert(pArg->z < p->z); + pArg->n = (int)(&p->z[p->n] - pArg->z); + } +} + +/* +** Invoke a virtual table constructor (either xCreate or xConnect). The +** pointer to the function to invoke is passed as the fourth parameter +** to this procedure. +*/ +static int vtabCallConstructor( + sqlite3 *db, + Table *pTab, + Module *pMod, + int (*xConstruct)(sqlite3*,void*,int,const char*const*,sqlite3_vtab**,char**), + char **pzErr +){ + VtabCtx sCtx, *pPriorCtx; + VTable *pVTable; + int rc; + const char *const*azArg = (const char *const*)pTab->azModuleArg; + int nArg = pTab->nModuleArg; + char *zErr = 0; + char *zModuleName = sqlite3MPrintf(db, "%s", pTab->zName); + + if( !zModuleName ){ + return SQLITE_NOMEM; + } + + pVTable = sqlite3DbMallocZero(db, sizeof(VTable)); + if( !pVTable ){ + sqlite3DbFree(db, zModuleName); + return SQLITE_NOMEM; + } + pVTable->db = db; + pVTable->pMod = pMod; + + /* Invoke the virtual table constructor */ + assert( &db->pVtabCtx ); + assert( xConstruct ); + sCtx.pTab = pTab; + sCtx.pVTable = pVTable; + pPriorCtx = db->pVtabCtx; + db->pVtabCtx = &sCtx; + rc = xConstruct(db, pMod->pAux, nArg, azArg, &pVTable->pVtab, &zErr); + db->pVtabCtx = pPriorCtx; + if( rc==SQLITE_NOMEM ) db->mallocFailed = 1; + + if( SQLITE_OK!=rc ){ + if( zErr==0 ){ + *pzErr = sqlite3MPrintf(db, "vtable constructor failed: %s", zModuleName); + }else { + *pzErr = sqlite3MPrintf(db, "%s", zErr); + sqlite3_free(zErr); + } + sqlite3DbFree(db, pVTable); + }else if( ALWAYS(pVTable->pVtab) ){ + /* Justification of ALWAYS(): A correct vtab constructor must allocate + ** the sqlite3_vtab object if successful. */ + pVTable->pVtab->pModule = pMod->pModule; + pVTable->nRef = 1; + if( sCtx.pTab ){ + const char *zFormat = "vtable constructor did not declare schema: %s"; + *pzErr = sqlite3MPrintf(db, zFormat, pTab->zName); + sqlite3VtabUnlock(pVTable); + rc = SQLITE_ERROR; + }else{ + int iCol; + /* If everything went according to plan, link the new VTable structure + ** into the linked list headed by pTab->pVTable. Then loop through the + ** columns of the table to see if any of them contain the token "hidden". + ** If so, set the Column.isHidden flag and remove the token from + ** the type string. */ + pVTable->pNext = pTab->pVTable; + pTab->pVTable = pVTable; + + for(iCol=0; iColnCol; iCol++){ + char *zType = pTab->aCol[iCol].zType; + int nType; + int i = 0; + if( !zType ) continue; + nType = sqlite3Strlen30(zType); + if( sqlite3StrNICmp("hidden", zType, 6)||(zType[6] && zType[6]!=' ') ){ + for(i=0; i0 ){ + assert(zType[i-1]==' '); + zType[i-1] = '\0'; + } + pTab->aCol[iCol].isHidden = 1; + } + } + } + } + + sqlite3DbFree(db, zModuleName); + return rc; +} + +/* +** This function is invoked by the parser to call the xConnect() method +** of the virtual table pTab. If an error occurs, an error code is returned +** and an error left in pParse. +** +** This call is a no-op if table pTab is not a virtual table. +*/ +SQLITE_PRIVATE int sqlite3VtabCallConnect(Parse *pParse, Table *pTab){ + sqlite3 *db = pParse->db; + const char *zMod; + Module *pMod; + int rc; + + assert( pTab ); + if( (pTab->tabFlags & TF_Virtual)==0 || sqlite3GetVTable(db, pTab) ){ + return SQLITE_OK; + } + + /* Locate the required virtual table module */ + zMod = pTab->azModuleArg[0]; + pMod = (Module*)sqlite3HashFind(&db->aModule, zMod, sqlite3Strlen30(zMod)); + + if( !pMod ){ + const char *zModule = pTab->azModuleArg[0]; + sqlite3ErrorMsg(pParse, "no such module: %s", zModule); + rc = SQLITE_ERROR; + }else{ + char *zErr = 0; + rc = vtabCallConstructor(db, pTab, pMod, pMod->pModule->xConnect, &zErr); + if( rc!=SQLITE_OK ){ + sqlite3ErrorMsg(pParse, "%s", zErr); + } + sqlite3DbFree(db, zErr); + } + + return rc; +} +/* +** Grow the db->aVTrans[] array so that there is room for at least one +** more v-table. Return SQLITE_NOMEM if a malloc fails, or SQLITE_OK otherwise. +*/ +static int growVTrans(sqlite3 *db){ + const int ARRAY_INCR = 5; + + /* Grow the sqlite3.aVTrans array if required */ + if( (db->nVTrans%ARRAY_INCR)==0 ){ + VTable **aVTrans; + int nBytes = sizeof(sqlite3_vtab *) * (db->nVTrans + ARRAY_INCR); + aVTrans = sqlite3DbRealloc(db, (void *)db->aVTrans, nBytes); + if( !aVTrans ){ + return SQLITE_NOMEM; + } + memset(&aVTrans[db->nVTrans], 0, sizeof(sqlite3_vtab *)*ARRAY_INCR); + db->aVTrans = aVTrans; + } + + return SQLITE_OK; +} + +/* +** Add the virtual table pVTab to the array sqlite3.aVTrans[]. Space should +** have already been reserved using growVTrans(). +*/ +static void addToVTrans(sqlite3 *db, VTable *pVTab){ + /* Add pVtab to the end of sqlite3.aVTrans */ + db->aVTrans[db->nVTrans++] = pVTab; + sqlite3VtabLock(pVTab); +} + +/* +** This function is invoked by the vdbe to call the xCreate method +** of the virtual table named zTab in database iDb. +** +** If an error occurs, *pzErr is set to point an an English language +** description of the error and an SQLITE_XXX error code is returned. +** In this case the caller must call sqlite3DbFree(db, ) on *pzErr. +*/ +SQLITE_PRIVATE int sqlite3VtabCallCreate(sqlite3 *db, int iDb, const char *zTab, char **pzErr){ + int rc = SQLITE_OK; + Table *pTab; + Module *pMod; + const char *zMod; + + pTab = sqlite3FindTable(db, zTab, db->aDb[iDb].zName); + assert( pTab && (pTab->tabFlags & TF_Virtual)!=0 && !pTab->pVTable ); + + /* Locate the required virtual table module */ + zMod = pTab->azModuleArg[0]; + pMod = (Module*)sqlite3HashFind(&db->aModule, zMod, sqlite3Strlen30(zMod)); + + /* If the module has been registered and includes a Create method, + ** invoke it now. If the module has not been registered, return an + ** error. Otherwise, do nothing. + */ + if( !pMod ){ + *pzErr = sqlite3MPrintf(db, "no such module: %s", zMod); + rc = SQLITE_ERROR; + }else{ + rc = vtabCallConstructor(db, pTab, pMod, pMod->pModule->xCreate, pzErr); + } + + /* Justification of ALWAYS(): The xConstructor method is required to + ** create a valid sqlite3_vtab if it returns SQLITE_OK. */ + if( rc==SQLITE_OK && ALWAYS(sqlite3GetVTable(db, pTab)) ){ + rc = growVTrans(db); + if( rc==SQLITE_OK ){ + addToVTrans(db, sqlite3GetVTable(db, pTab)); + } + } + + return rc; +} + +/* +** This function is used to set the schema of a virtual table. It is only +** valid to call this function from within the xCreate() or xConnect() of a +** virtual table module. +*/ +SQLITE_API int sqlite3_declare_vtab(sqlite3 *db, const char *zCreateTable){ + Parse *pParse; + + int rc = SQLITE_OK; + Table *pTab; + char *zErr = 0; + + sqlite3_mutex_enter(db->mutex); + if( !db->pVtabCtx || !(pTab = db->pVtabCtx->pTab) ){ + sqlite3Error(db, SQLITE_MISUSE, 0); + sqlite3_mutex_leave(db->mutex); + return SQLITE_MISUSE_BKPT; + } + assert( (pTab->tabFlags & TF_Virtual)!=0 ); + + pParse = sqlite3StackAllocZero(db, sizeof(*pParse)); + if( pParse==0 ){ + rc = SQLITE_NOMEM; + }else{ + pParse->declareVtab = 1; + pParse->db = db; + pParse->nQueryLoop = 1; + + if( SQLITE_OK==sqlite3RunParser(pParse, zCreateTable, &zErr) + && pParse->pNewTable + && !db->mallocFailed + && !pParse->pNewTable->pSelect + && (pParse->pNewTable->tabFlags & TF_Virtual)==0 + ){ + if( !pTab->aCol ){ + pTab->aCol = pParse->pNewTable->aCol; + pTab->nCol = pParse->pNewTable->nCol; + pParse->pNewTable->nCol = 0; + pParse->pNewTable->aCol = 0; + } + db->pVtabCtx->pTab = 0; + }else{ + sqlite3Error(db, SQLITE_ERROR, (zErr ? "%s" : 0), zErr); + sqlite3DbFree(db, zErr); + rc = SQLITE_ERROR; + } + pParse->declareVtab = 0; + + if( pParse->pVdbe ){ + sqlite3VdbeFinalize(pParse->pVdbe); + } + sqlite3DeleteTable(db, pParse->pNewTable); + sqlite3StackFree(db, pParse); + } + + assert( (rc&0xff)==rc ); + rc = sqlite3ApiExit(db, rc); + sqlite3_mutex_leave(db->mutex); + return rc; +} + +/* +** This function is invoked by the vdbe to call the xDestroy method +** of the virtual table named zTab in database iDb. This occurs +** when a DROP TABLE is mentioned. +** +** This call is a no-op if zTab is not a virtual table. +*/ +SQLITE_PRIVATE int sqlite3VtabCallDestroy(sqlite3 *db, int iDb, const char *zTab){ + int rc = SQLITE_OK; + Table *pTab; + + pTab = sqlite3FindTable(db, zTab, db->aDb[iDb].zName); + if( ALWAYS(pTab!=0 && pTab->pVTable!=0) ){ + VTable *p = vtabDisconnectAll(db, pTab); + + assert( rc==SQLITE_OK ); + rc = p->pMod->pModule->xDestroy(p->pVtab); + + /* Remove the sqlite3_vtab* from the aVTrans[] array, if applicable */ + if( rc==SQLITE_OK ){ + assert( pTab->pVTable==p && p->pNext==0 ); + p->pVtab = 0; + pTab->pVTable = 0; + sqlite3VtabUnlock(p); + } + } + + return rc; +} + +/* +** This function invokes either the xRollback or xCommit method +** of each of the virtual tables in the sqlite3.aVTrans array. The method +** called is identified by the second argument, "offset", which is +** the offset of the method to call in the sqlite3_module structure. +** +** The array is cleared after invoking the callbacks. +*/ +static void callFinaliser(sqlite3 *db, int offset){ + int i; + if( db->aVTrans ){ + for(i=0; inVTrans; i++){ + VTable *pVTab = db->aVTrans[i]; + sqlite3_vtab *p = pVTab->pVtab; + if( p ){ + int (*x)(sqlite3_vtab *); + x = *(int (**)(sqlite3_vtab *))((char *)p->pModule + offset); + if( x ) x(p); + } + pVTab->iSavepoint = 0; + sqlite3VtabUnlock(pVTab); + } + sqlite3DbFree(db, db->aVTrans); + db->nVTrans = 0; + db->aVTrans = 0; + } +} + +/* +** Invoke the xSync method of all virtual tables in the sqlite3.aVTrans +** array. Return the error code for the first error that occurs, or +** SQLITE_OK if all xSync operations are successful. +** +** Set *pzErrmsg to point to a buffer that should be released using +** sqlite3DbFree() containing an error message, if one is available. +*/ +SQLITE_PRIVATE int sqlite3VtabSync(sqlite3 *db, char **pzErrmsg){ + int i; + int rc = SQLITE_OK; + VTable **aVTrans = db->aVTrans; + + db->aVTrans = 0; + for(i=0; rc==SQLITE_OK && inVTrans; i++){ + int (*x)(sqlite3_vtab *); + sqlite3_vtab *pVtab = aVTrans[i]->pVtab; + if( pVtab && (x = pVtab->pModule->xSync)!=0 ){ + rc = x(pVtab); + sqlite3DbFree(db, *pzErrmsg); + *pzErrmsg = sqlite3DbStrDup(db, pVtab->zErrMsg); + sqlite3_free(pVtab->zErrMsg); + } + } + db->aVTrans = aVTrans; + return rc; +} + +/* +** Invoke the xRollback method of all virtual tables in the +** sqlite3.aVTrans array. Then clear the array itself. +*/ +SQLITE_PRIVATE int sqlite3VtabRollback(sqlite3 *db){ + callFinaliser(db, offsetof(sqlite3_module,xRollback)); + return SQLITE_OK; +} + +/* +** Invoke the xCommit method of all virtual tables in the +** sqlite3.aVTrans array. Then clear the array itself. +*/ +SQLITE_PRIVATE int sqlite3VtabCommit(sqlite3 *db){ + callFinaliser(db, offsetof(sqlite3_module,xCommit)); + return SQLITE_OK; +} + +/* +** If the virtual table pVtab supports the transaction interface +** (xBegin/xRollback/xCommit and optionally xSync) and a transaction is +** not currently open, invoke the xBegin method now. +** +** If the xBegin call is successful, place the sqlite3_vtab pointer +** in the sqlite3.aVTrans array. +*/ +SQLITE_PRIVATE int sqlite3VtabBegin(sqlite3 *db, VTable *pVTab){ + int rc = SQLITE_OK; + const sqlite3_module *pModule; + + /* Special case: If db->aVTrans is NULL and db->nVTrans is greater + ** than zero, then this function is being called from within a + ** virtual module xSync() callback. It is illegal to write to + ** virtual module tables in this case, so return SQLITE_LOCKED. + */ + if( sqlite3VtabInSync(db) ){ + return SQLITE_LOCKED; + } + if( !pVTab ){ + return SQLITE_OK; + } + pModule = pVTab->pVtab->pModule; + + if( pModule->xBegin ){ + int i; + + /* If pVtab is already in the aVTrans array, return early */ + for(i=0; inVTrans; i++){ + if( db->aVTrans[i]==pVTab ){ + return SQLITE_OK; + } + } + + /* Invoke the xBegin method. If successful, add the vtab to the + ** sqlite3.aVTrans[] array. */ + rc = growVTrans(db); + if( rc==SQLITE_OK ){ + rc = pModule->xBegin(pVTab->pVtab); + if( rc==SQLITE_OK ){ + addToVTrans(db, pVTab); + } + } + } + return rc; +} + +/* +** Invoke either the xSavepoint, xRollbackTo or xRelease method of all +** virtual tables that currently have an open transaction. Pass iSavepoint +** as the second argument to the virtual table method invoked. +** +** If op is SAVEPOINT_BEGIN, the xSavepoint method is invoked. If it is +** SAVEPOINT_ROLLBACK, the xRollbackTo method. Otherwise, if op is +** SAVEPOINT_RELEASE, then the xRelease method of each virtual table with +** an open transaction is invoked. +** +** If any virtual table method returns an error code other than SQLITE_OK, +** processing is abandoned and the error returned to the caller of this +** function immediately. If all calls to virtual table methods are successful, +** SQLITE_OK is returned. +*/ +SQLITE_PRIVATE int sqlite3VtabSavepoint(sqlite3 *db, int op, int iSavepoint){ + int rc = SQLITE_OK; + + assert( op==SAVEPOINT_RELEASE||op==SAVEPOINT_ROLLBACK||op==SAVEPOINT_BEGIN ); + assert( iSavepoint>=0 ); + if( db->aVTrans ){ + int i; + for(i=0; rc==SQLITE_OK && inVTrans; i++){ + VTable *pVTab = db->aVTrans[i]; + const sqlite3_module *pMod = pVTab->pMod->pModule; + if( pVTab->pVtab && pMod->iVersion>=2 ){ + int (*xMethod)(sqlite3_vtab *, int); + switch( op ){ + case SAVEPOINT_BEGIN: + xMethod = pMod->xSavepoint; + pVTab->iSavepoint = iSavepoint+1; + break; + case SAVEPOINT_ROLLBACK: + xMethod = pMod->xRollbackTo; + break; + default: + xMethod = pMod->xRelease; + break; + } + if( xMethod && pVTab->iSavepoint>iSavepoint ){ + rc = xMethod(pVTab->pVtab, iSavepoint); + } + } + } + } + return rc; +} + +/* +** The first parameter (pDef) is a function implementation. The +** second parameter (pExpr) is the first argument to this function. +** If pExpr is a column in a virtual table, then let the virtual +** table implementation have an opportunity to overload the function. +** +** This routine is used to allow virtual table implementations to +** overload MATCH, LIKE, GLOB, and REGEXP operators. +** +** Return either the pDef argument (indicating no change) or a +** new FuncDef structure that is marked as ephemeral using the +** SQLITE_FUNC_EPHEM flag. +*/ +SQLITE_PRIVATE FuncDef *sqlite3VtabOverloadFunction( + sqlite3 *db, /* Database connection for reporting malloc problems */ + FuncDef *pDef, /* Function to possibly overload */ + int nArg, /* Number of arguments to the function */ + Expr *pExpr /* First argument to the function */ +){ + Table *pTab; + sqlite3_vtab *pVtab; + sqlite3_module *pMod; + void (*xFunc)(sqlite3_context*,int,sqlite3_value**) = 0; + void *pArg = 0; + FuncDef *pNew; + int rc = 0; + char *zLowerName; + unsigned char *z; + + + /* Check to see the left operand is a column in a virtual table */ + if( NEVER(pExpr==0) ) return pDef; + if( pExpr->op!=TK_COLUMN ) return pDef; + pTab = pExpr->pTab; + if( NEVER(pTab==0) ) return pDef; + if( (pTab->tabFlags & TF_Virtual)==0 ) return pDef; + pVtab = sqlite3GetVTable(db, pTab)->pVtab; + assert( pVtab!=0 ); + assert( pVtab->pModule!=0 ); + pMod = (sqlite3_module *)pVtab->pModule; + if( pMod->xFindFunction==0 ) return pDef; + + /* Call the xFindFunction method on the virtual table implementation + ** to see if the implementation wants to overload this function + */ + zLowerName = sqlite3DbStrDup(db, pDef->zName); + if( zLowerName ){ + for(z=(unsigned char*)zLowerName; *z; z++){ + *z = sqlite3UpperToLower[*z]; + } + rc = pMod->xFindFunction(pVtab, nArg, zLowerName, &xFunc, &pArg); + sqlite3DbFree(db, zLowerName); + } + if( rc==0 ){ + return pDef; + } + + /* Create a new ephemeral function definition for the overloaded + ** function */ + pNew = sqlite3DbMallocZero(db, sizeof(*pNew) + + sqlite3Strlen30(pDef->zName) + 1); + if( pNew==0 ){ + return pDef; + } + *pNew = *pDef; + pNew->zName = (char *)&pNew[1]; + memcpy(pNew->zName, pDef->zName, sqlite3Strlen30(pDef->zName)+1); + pNew->xFunc = xFunc; + pNew->pUserData = pArg; + pNew->flags |= SQLITE_FUNC_EPHEM; + return pNew; +} + +/* +** Make sure virtual table pTab is contained in the pParse->apVirtualLock[] +** array so that an OP_VBegin will get generated for it. Add pTab to the +** array if it is missing. If pTab is already in the array, this routine +** is a no-op. +*/ +SQLITE_PRIVATE void sqlite3VtabMakeWritable(Parse *pParse, Table *pTab){ + Parse *pToplevel = sqlite3ParseToplevel(pParse); + int i, n; + Table **apVtabLock; + + assert( IsVirtual(pTab) ); + for(i=0; inVtabLock; i++){ + if( pTab==pToplevel->apVtabLock[i] ) return; + } + n = (pToplevel->nVtabLock+1)*sizeof(pToplevel->apVtabLock[0]); + apVtabLock = sqlite3_realloc(pToplevel->apVtabLock, n); + if( apVtabLock ){ + pToplevel->apVtabLock = apVtabLock; + pToplevel->apVtabLock[pToplevel->nVtabLock++] = pTab; + }else{ + pToplevel->db->mallocFailed = 1; + } +} + +/* +** Return the ON CONFLICT resolution mode in effect for the virtual +** table update operation currently in progress. +** +** The results of this routine are undefined unless it is called from +** within an xUpdate method. +*/ +SQLITE_API int sqlite3_vtab_on_conflict(sqlite3 *db){ + static const unsigned char aMap[] = { + SQLITE_ROLLBACK, SQLITE_ABORT, SQLITE_FAIL, SQLITE_IGNORE, SQLITE_REPLACE + }; + assert( OE_Rollback==1 && OE_Abort==2 && OE_Fail==3 ); + assert( OE_Ignore==4 && OE_Replace==5 ); + assert( db->vtabOnConflict>=1 && db->vtabOnConflict<=5 ); + return (int)aMap[db->vtabOnConflict-1]; +} + +/* +** Call from within the xCreate() or xConnect() methods to provide +** the SQLite core with additional information about the behavior +** of the virtual table being implemented. +*/ +SQLITE_API int sqlite3_vtab_config(sqlite3 *db, int op, ...){ + va_list ap; + int rc = SQLITE_OK; + + sqlite3_mutex_enter(db->mutex); + + va_start(ap, op); + switch( op ){ + case SQLITE_VTAB_CONSTRAINT_SUPPORT: { + VtabCtx *p = db->pVtabCtx; + if( !p ){ + rc = SQLITE_MISUSE_BKPT; + }else{ + assert( p->pTab==0 || (p->pTab->tabFlags & TF_Virtual)!=0 ); + p->pVTable->bConstraint = (u8)va_arg(ap, int); + } + break; + } + default: + rc = SQLITE_MISUSE_BKPT; + break; + } + va_end(ap); + + if( rc!=SQLITE_OK ) sqlite3Error(db, rc, 0); + sqlite3_mutex_leave(db->mutex); + return rc; +} + +#endif /* SQLITE_OMIT_VIRTUALTABLE */ + +/************** End of vtab.c ************************************************/ +/************** Begin file where.c *******************************************/ +/* +** 2001 September 15 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** This module contains C code that generates VDBE code used to process +** the WHERE clause of SQL statements. This module is responsible for +** generating the code that loops through a table looking for applicable +** rows. Indices are selected and used to speed the search when doing +** so is applicable. Because this module is responsible for selecting +** indices, you might also think of this module as the "query optimizer". +*/ + + +/* +** Trace output macros +*/ +#if defined(SQLITE_TEST) || defined(SQLITE_DEBUG) +SQLITE_PRIVATE int sqlite3WhereTrace = 0; +#endif +#if defined(SQLITE_TEST) && defined(SQLITE_DEBUG) +# define WHERETRACE(X) if(sqlite3WhereTrace) sqlite3DebugPrintf X +#else +# define WHERETRACE(X) +#endif + +/* Forward reference +*/ +typedef struct WhereClause WhereClause; +typedef struct WhereMaskSet WhereMaskSet; +typedef struct WhereOrInfo WhereOrInfo; +typedef struct WhereAndInfo WhereAndInfo; +typedef struct WhereCost WhereCost; + +/* +** The query generator uses an array of instances of this structure to +** help it analyze the subexpressions of the WHERE clause. Each WHERE +** clause subexpression is separated from the others by AND operators, +** usually, or sometimes subexpressions separated by OR. +** +** All WhereTerms are collected into a single WhereClause structure. +** The following identity holds: +** +** WhereTerm.pWC->a[WhereTerm.idx] == WhereTerm +** +** When a term is of the form: +** +** X +** +** where X is a column name and is one of certain operators, +** then WhereTerm.leftCursor and WhereTerm.u.leftColumn record the +** cursor number and column number for X. WhereTerm.eOperator records +** the using a bitmask encoding defined by WO_xxx below. The +** use of a bitmask encoding for the operator allows us to search +** quickly for terms that match any of several different operators. +** +** A WhereTerm might also be two or more subterms connected by OR: +** +** (t1.X ) OR (t1.Y ) OR .... +** +** In this second case, wtFlag as the TERM_ORINFO set and eOperator==WO_OR +** and the WhereTerm.u.pOrInfo field points to auxiliary information that +** is collected about the +** +** If a term in the WHERE clause does not match either of the two previous +** categories, then eOperator==0. The WhereTerm.pExpr field is still set +** to the original subexpression content and wtFlags is set up appropriately +** but no other fields in the WhereTerm object are meaningful. +** +** When eOperator!=0, prereqRight and prereqAll record sets of cursor numbers, +** but they do so indirectly. A single WhereMaskSet structure translates +** cursor number into bits and the translated bit is stored in the prereq +** fields. The translation is used in order to maximize the number of +** bits that will fit in a Bitmask. The VDBE cursor numbers might be +** spread out over the non-negative integers. For example, the cursor +** numbers might be 3, 8, 9, 10, 20, 23, 41, and 45. The WhereMaskSet +** translates these sparse cursor numbers into consecutive integers +** beginning with 0 in order to make the best possible use of the available +** bits in the Bitmask. So, in the example above, the cursor numbers +** would be mapped into integers 0 through 7. +** +** The number of terms in a join is limited by the number of bits +** in prereqRight and prereqAll. The default is 64 bits, hence SQLite +** is only able to process joins with 64 or fewer tables. +*/ +typedef struct WhereTerm WhereTerm; +struct WhereTerm { + Expr *pExpr; /* Pointer to the subexpression that is this term */ + int iParent; /* Disable pWC->a[iParent] when this term disabled */ + int leftCursor; /* Cursor number of X in "X " */ + union { + int leftColumn; /* Column number of X in "X " */ + WhereOrInfo *pOrInfo; /* Extra information if eOperator==WO_OR */ + WhereAndInfo *pAndInfo; /* Extra information if eOperator==WO_AND */ + } u; + u16 eOperator; /* A WO_xx value describing */ + u8 wtFlags; /* TERM_xxx bit flags. See below */ + u8 nChild; /* Number of children that must disable us */ + WhereClause *pWC; /* The clause this term is part of */ + Bitmask prereqRight; /* Bitmask of tables used by pExpr->pRight */ + Bitmask prereqAll; /* Bitmask of tables referenced by pExpr */ +}; + +/* +** Allowed values of WhereTerm.wtFlags +*/ +#define TERM_DYNAMIC 0x01 /* Need to call sqlite3ExprDelete(db, pExpr) */ +#define TERM_VIRTUAL 0x02 /* Added by the optimizer. Do not code */ +#define TERM_CODED 0x04 /* This term is already coded */ +#define TERM_COPIED 0x08 /* Has a child */ +#define TERM_ORINFO 0x10 /* Need to free the WhereTerm.u.pOrInfo object */ +#define TERM_ANDINFO 0x20 /* Need to free the WhereTerm.u.pAndInfo obj */ +#define TERM_OR_OK 0x40 /* Used during OR-clause processing */ +#ifdef SQLITE_ENABLE_STAT3 +# define TERM_VNULL 0x80 /* Manufactured x>NULL or x<=NULL term */ +#else +# define TERM_VNULL 0x00 /* Disabled if not using stat3 */ +#endif + +/* +** An instance of the following structure holds all information about a +** WHERE clause. Mostly this is a container for one or more WhereTerms. +** +** Explanation of pOuter: For a WHERE clause of the form +** +** a AND ((b AND c) OR (d AND e)) AND f +** +** There are separate WhereClause objects for the whole clause and for +** the subclauses "(b AND c)" and "(d AND e)". The pOuter field of the +** subclauses points to the WhereClause object for the whole clause. +*/ +struct WhereClause { + Parse *pParse; /* The parser context */ + WhereMaskSet *pMaskSet; /* Mapping of table cursor numbers to bitmasks */ + Bitmask vmask; /* Bitmask identifying virtual table cursors */ + WhereClause *pOuter; /* Outer conjunction */ + u8 op; /* Split operator. TK_AND or TK_OR */ + u16 wctrlFlags; /* Might include WHERE_AND_ONLY */ + int nTerm; /* Number of terms */ + int nSlot; /* Number of entries in a[] */ + WhereTerm *a; /* Each a[] describes a term of the WHERE cluase */ +#if defined(SQLITE_SMALL_STACK) + WhereTerm aStatic[1]; /* Initial static space for a[] */ +#else + WhereTerm aStatic[8]; /* Initial static space for a[] */ +#endif +}; + +/* +** A WhereTerm with eOperator==WO_OR has its u.pOrInfo pointer set to +** a dynamically allocated instance of the following structure. +*/ +struct WhereOrInfo { + WhereClause wc; /* Decomposition into subterms */ + Bitmask indexable; /* Bitmask of all indexable tables in the clause */ +}; + +/* +** A WhereTerm with eOperator==WO_AND has its u.pAndInfo pointer set to +** a dynamically allocated instance of the following structure. +*/ +struct WhereAndInfo { + WhereClause wc; /* The subexpression broken out */ +}; + +/* +** An instance of the following structure keeps track of a mapping +** between VDBE cursor numbers and bits of the bitmasks in WhereTerm. +** +** The VDBE cursor numbers are small integers contained in +** SrcList_item.iCursor and Expr.iTable fields. For any given WHERE +** clause, the cursor numbers might not begin with 0 and they might +** contain gaps in the numbering sequence. But we want to make maximum +** use of the bits in our bitmasks. This structure provides a mapping +** from the sparse cursor numbers into consecutive integers beginning +** with 0. +** +** If WhereMaskSet.ix[A]==B it means that The A-th bit of a Bitmask +** corresponds VDBE cursor number B. The A-th bit of a bitmask is 1<3, 5->1, 8->2, 29->0, +** 57->5, 73->4. Or one of 719 other combinations might be used. It +** does not really matter. What is important is that sparse cursor +** numbers all get mapped into bit numbers that begin with 0 and contain +** no gaps. +*/ +struct WhereMaskSet { + int n; /* Number of assigned cursor values */ + int ix[BMS]; /* Cursor assigned to each bit */ +}; + +/* +** A WhereCost object records a lookup strategy and the estimated +** cost of pursuing that strategy. +*/ +struct WhereCost { + WherePlan plan; /* The lookup strategy */ + double rCost; /* Overall cost of pursuing this search strategy */ + Bitmask used; /* Bitmask of cursors used by this plan */ +}; + +/* +** Bitmasks for the operators that indices are able to exploit. An +** OR-ed combination of these values can be used when searching for +** terms in the where clause. +*/ +#define WO_IN 0x001 +#define WO_EQ 0x002 +#define WO_LT (WO_EQ<<(TK_LT-TK_EQ)) +#define WO_LE (WO_EQ<<(TK_LE-TK_EQ)) +#define WO_GT (WO_EQ<<(TK_GT-TK_EQ)) +#define WO_GE (WO_EQ<<(TK_GE-TK_EQ)) +#define WO_MATCH 0x040 +#define WO_ISNULL 0x080 +#define WO_OR 0x100 /* Two or more OR-connected terms */ +#define WO_AND 0x200 /* Two or more AND-connected terms */ +#define WO_NOOP 0x800 /* This term does not restrict search space */ + +#define WO_ALL 0xfff /* Mask of all possible WO_* values */ +#define WO_SINGLE 0x0ff /* Mask of all non-compound WO_* values */ + +/* +** Value for wsFlags returned by bestIndex() and stored in +** WhereLevel.wsFlags. These flags determine which search +** strategies are appropriate. +** +** The least significant 12 bits is reserved as a mask for WO_ values above. +** The WhereLevel.wsFlags field is usually set to WO_IN|WO_EQ|WO_ISNULL. +** But if the table is the right table of a left join, WhereLevel.wsFlags +** is set to WO_IN|WO_EQ. The WhereLevel.wsFlags field can then be used as +** the "op" parameter to findTerm when we are resolving equality constraints. +** ISNULL constraints will then not be used on the right table of a left +** join. Tickets #2177 and #2189. +*/ +#define WHERE_ROWID_EQ 0x00001000 /* rowid=EXPR or rowid IN (...) */ +#define WHERE_ROWID_RANGE 0x00002000 /* rowidEXPR */ +#define WHERE_COLUMN_EQ 0x00010000 /* x=EXPR or x IN (...) or x IS NULL */ +#define WHERE_COLUMN_RANGE 0x00020000 /* xEXPR */ +#define WHERE_COLUMN_IN 0x00040000 /* x IN (...) */ +#define WHERE_COLUMN_NULL 0x00080000 /* x IS NULL */ +#define WHERE_INDEXED 0x000f0000 /* Anything that uses an index */ +#define WHERE_NOT_FULLSCAN 0x100f3000 /* Does not do a full table scan */ +#define WHERE_IN_ABLE 0x000f1000 /* Able to support an IN operator */ +#define WHERE_TOP_LIMIT 0x00100000 /* xEXPR or x>=EXPR constraint */ +#define WHERE_BOTH_LIMIT 0x00300000 /* Both x>EXPR and xpParse = pParse; + pWC->pMaskSet = pMaskSet; + pWC->pOuter = 0; + pWC->nTerm = 0; + pWC->nSlot = ArraySize(pWC->aStatic); + pWC->a = pWC->aStatic; + pWC->vmask = 0; + pWC->wctrlFlags = wctrlFlags; +} + +/* Forward reference */ +static void whereClauseClear(WhereClause*); + +/* +** Deallocate all memory associated with a WhereOrInfo object. +*/ +static void whereOrInfoDelete(sqlite3 *db, WhereOrInfo *p){ + whereClauseClear(&p->wc); + sqlite3DbFree(db, p); +} + +/* +** Deallocate all memory associated with a WhereAndInfo object. +*/ +static void whereAndInfoDelete(sqlite3 *db, WhereAndInfo *p){ + whereClauseClear(&p->wc); + sqlite3DbFree(db, p); +} + +/* +** Deallocate a WhereClause structure. The WhereClause structure +** itself is not freed. This routine is the inverse of whereClauseInit(). +*/ +static void whereClauseClear(WhereClause *pWC){ + int i; + WhereTerm *a; + sqlite3 *db = pWC->pParse->db; + for(i=pWC->nTerm-1, a=pWC->a; i>=0; i--, a++){ + if( a->wtFlags & TERM_DYNAMIC ){ + sqlite3ExprDelete(db, a->pExpr); + } + if( a->wtFlags & TERM_ORINFO ){ + whereOrInfoDelete(db, a->u.pOrInfo); + }else if( a->wtFlags & TERM_ANDINFO ){ + whereAndInfoDelete(db, a->u.pAndInfo); + } + } + if( pWC->a!=pWC->aStatic ){ + sqlite3DbFree(db, pWC->a); + } +} + +/* +** Add a single new WhereTerm entry to the WhereClause object pWC. +** The new WhereTerm object is constructed from Expr p and with wtFlags. +** The index in pWC->a[] of the new WhereTerm is returned on success. +** 0 is returned if the new WhereTerm could not be added due to a memory +** allocation error. The memory allocation failure will be recorded in +** the db->mallocFailed flag so that higher-level functions can detect it. +** +** This routine will increase the size of the pWC->a[] array as necessary. +** +** If the wtFlags argument includes TERM_DYNAMIC, then responsibility +** for freeing the expression p is assumed by the WhereClause object pWC. +** This is true even if this routine fails to allocate a new WhereTerm. +** +** WARNING: This routine might reallocate the space used to store +** WhereTerms. All pointers to WhereTerms should be invalidated after +** calling this routine. Such pointers may be reinitialized by referencing +** the pWC->a[] array. +*/ +static int whereClauseInsert(WhereClause *pWC, Expr *p, u8 wtFlags){ + WhereTerm *pTerm; + int idx; + testcase( wtFlags & TERM_VIRTUAL ); /* EV: R-00211-15100 */ + if( pWC->nTerm>=pWC->nSlot ){ + WhereTerm *pOld = pWC->a; + sqlite3 *db = pWC->pParse->db; + pWC->a = sqlite3DbMallocRaw(db, sizeof(pWC->a[0])*pWC->nSlot*2 ); + if( pWC->a==0 ){ + if( wtFlags & TERM_DYNAMIC ){ + sqlite3ExprDelete(db, p); + } + pWC->a = pOld; + return 0; + } + memcpy(pWC->a, pOld, sizeof(pWC->a[0])*pWC->nTerm); + if( pOld!=pWC->aStatic ){ + sqlite3DbFree(db, pOld); + } + pWC->nSlot = sqlite3DbMallocSize(db, pWC->a)/sizeof(pWC->a[0]); + } + pTerm = &pWC->a[idx = pWC->nTerm++]; + pTerm->pExpr = p; + pTerm->wtFlags = wtFlags; + pTerm->pWC = pWC; + pTerm->iParent = -1; + return idx; +} + +/* +** This routine identifies subexpressions in the WHERE clause where +** each subexpression is separated by the AND operator or some other +** operator specified in the op parameter. The WhereClause structure +** is filled with pointers to subexpressions. For example: +** +** WHERE a=='hello' AND coalesce(b,11)<10 AND (c+12!=d OR c==22) +** \________/ \_______________/ \________________/ +** slot[0] slot[1] slot[2] +** +** The original WHERE clause in pExpr is unaltered. All this routine +** does is make slot[] entries point to substructure within pExpr. +** +** In the previous sentence and in the diagram, "slot[]" refers to +** the WhereClause.a[] array. The slot[] array grows as needed to contain +** all terms of the WHERE clause. +*/ +static void whereSplit(WhereClause *pWC, Expr *pExpr, int op){ + pWC->op = (u8)op; + if( pExpr==0 ) return; + if( pExpr->op!=op ){ + whereClauseInsert(pWC, pExpr, 0); + }else{ + whereSplit(pWC, pExpr->pLeft, op); + whereSplit(pWC, pExpr->pRight, op); + } +} + +/* +** Initialize an expression mask set (a WhereMaskSet object) +*/ +#define initMaskSet(P) memset(P, 0, sizeof(*P)) + +/* +** Return the bitmask for the given cursor number. Return 0 if +** iCursor is not in the set. +*/ +static Bitmask getMask(WhereMaskSet *pMaskSet, int iCursor){ + int i; + assert( pMaskSet->n<=(int)sizeof(Bitmask)*8 ); + for(i=0; in; i++){ + if( pMaskSet->ix[i]==iCursor ){ + return ((Bitmask)1)<ix[] +** array will never overflow. +*/ +static void createMask(WhereMaskSet *pMaskSet, int iCursor){ + assert( pMaskSet->n < ArraySize(pMaskSet->ix) ); + pMaskSet->ix[pMaskSet->n++] = iCursor; +} + +/* +** This routine walks (recursively) an expression tree and generates +** a bitmask indicating which tables are used in that expression +** tree. +** +** In order for this routine to work, the calling function must have +** previously invoked sqlite3ResolveExprNames() on the expression. See +** the header comment on that routine for additional information. +** The sqlite3ResolveExprNames() routines looks for column names and +** sets their opcodes to TK_COLUMN and their Expr.iTable fields to +** the VDBE cursor number of the table. This routine just has to +** translate the cursor numbers into bitmask values and OR all +** the bitmasks together. +*/ +static Bitmask exprListTableUsage(WhereMaskSet*, ExprList*); +static Bitmask exprSelectTableUsage(WhereMaskSet*, Select*); +static Bitmask exprTableUsage(WhereMaskSet *pMaskSet, Expr *p){ + Bitmask mask = 0; + if( p==0 ) return 0; + if( p->op==TK_COLUMN ){ + mask = getMask(pMaskSet, p->iTable); + return mask; + } + mask = exprTableUsage(pMaskSet, p->pRight); + mask |= exprTableUsage(pMaskSet, p->pLeft); + if( ExprHasProperty(p, EP_xIsSelect) ){ + mask |= exprSelectTableUsage(pMaskSet, p->x.pSelect); + }else{ + mask |= exprListTableUsage(pMaskSet, p->x.pList); + } + return mask; +} +static Bitmask exprListTableUsage(WhereMaskSet *pMaskSet, ExprList *pList){ + int i; + Bitmask mask = 0; + if( pList ){ + for(i=0; inExpr; i++){ + mask |= exprTableUsage(pMaskSet, pList->a[i].pExpr); + } + } + return mask; +} +static Bitmask exprSelectTableUsage(WhereMaskSet *pMaskSet, Select *pS){ + Bitmask mask = 0; + while( pS ){ + SrcList *pSrc = pS->pSrc; + mask |= exprListTableUsage(pMaskSet, pS->pEList); + mask |= exprListTableUsage(pMaskSet, pS->pGroupBy); + mask |= exprListTableUsage(pMaskSet, pS->pOrderBy); + mask |= exprTableUsage(pMaskSet, pS->pWhere); + mask |= exprTableUsage(pMaskSet, pS->pHaving); + if( ALWAYS(pSrc!=0) ){ + int i; + for(i=0; inSrc; i++){ + mask |= exprSelectTableUsage(pMaskSet, pSrc->a[i].pSelect); + mask |= exprTableUsage(pMaskSet, pSrc->a[i].pOn); + } + } + pS = pS->pPrior; + } + return mask; +} + +/* +** Return TRUE if the given operator is one of the operators that is +** allowed for an indexable WHERE clause term. The allowed operators are +** "=", "<", ">", "<=", ">=", and "IN". +** +** IMPLEMENTATION-OF: R-59926-26393 To be usable by an index a term must be +** of one of the following forms: column = expression column > expression +** column >= expression column < expression column <= expression +** expression = column expression > column expression >= column +** expression < column expression <= column column IN +** (expression-list) column IN (subquery) column IS NULL +*/ +static int allowedOp(int op){ + assert( TK_GT>TK_EQ && TK_GTTK_EQ && TK_LTTK_EQ && TK_LE=TK_EQ && op<=TK_GE) || op==TK_ISNULL; +} + +/* +** Swap two objects of type TYPE. +*/ +#define SWAP(TYPE,A,B) {TYPE t=A; A=B; B=t;} + +/* +** Commute a comparison operator. Expressions of the form "X op Y" +** are converted into "Y op X". +** +** If a collation sequence is associated with either the left or right +** side of the comparison, it remains associated with the same side after +** the commutation. So "Y collate NOCASE op X" becomes +** "X collate NOCASE op Y". This is because any collation sequence on +** the left hand side of a comparison overrides any collation sequence +** attached to the right. For the same reason the EP_ExpCollate flag +** is not commuted. +*/ +static void exprCommute(Parse *pParse, Expr *pExpr){ + u16 expRight = (pExpr->pRight->flags & EP_ExpCollate); + u16 expLeft = (pExpr->pLeft->flags & EP_ExpCollate); + assert( allowedOp(pExpr->op) && pExpr->op!=TK_IN ); + pExpr->pRight->pColl = sqlite3ExprCollSeq(pParse, pExpr->pRight); + pExpr->pLeft->pColl = sqlite3ExprCollSeq(pParse, pExpr->pLeft); + SWAP(CollSeq*,pExpr->pRight->pColl,pExpr->pLeft->pColl); + pExpr->pRight->flags = (pExpr->pRight->flags & ~EP_ExpCollate) | expLeft; + pExpr->pLeft->flags = (pExpr->pLeft->flags & ~EP_ExpCollate) | expRight; + SWAP(Expr*,pExpr->pRight,pExpr->pLeft); + if( pExpr->op>=TK_GT ){ + assert( TK_LT==TK_GT+2 ); + assert( TK_GE==TK_LE+2 ); + assert( TK_GT>TK_EQ ); + assert( TK_GTop>=TK_GT && pExpr->op<=TK_GE ); + pExpr->op = ((pExpr->op-TK_GT)^2)+TK_GT; + } +} + +/* +** Translate from TK_xx operator to WO_xx bitmask. +*/ +static u16 operatorMask(int op){ + u16 c; + assert( allowedOp(op) ); + if( op==TK_IN ){ + c = WO_IN; + }else if( op==TK_ISNULL ){ + c = WO_ISNULL; + }else{ + assert( (WO_EQ<<(op-TK_EQ)) < 0x7fff ); + c = (u16)(WO_EQ<<(op-TK_EQ)); + } + assert( op!=TK_ISNULL || c==WO_ISNULL ); + assert( op!=TK_IN || c==WO_IN ); + assert( op!=TK_EQ || c==WO_EQ ); + assert( op!=TK_LT || c==WO_LT ); + assert( op!=TK_LE || c==WO_LE ); + assert( op!=TK_GT || c==WO_GT ); + assert( op!=TK_GE || c==WO_GE ); + return c; +} + +/* +** Search for a term in the WHERE clause that is of the form "X " +** where X is a reference to the iColumn of table iCur and is one of +** the WO_xx operator codes specified by the op parameter. +** Return a pointer to the term. Return 0 if not found. +*/ +static WhereTerm *findTerm( + WhereClause *pWC, /* The WHERE clause to be searched */ + int iCur, /* Cursor number of LHS */ + int iColumn, /* Column number of LHS */ + Bitmask notReady, /* RHS must not overlap with this mask */ + u32 op, /* Mask of WO_xx values describing operator */ + Index *pIdx /* Must be compatible with this index, if not NULL */ +){ + WhereTerm *pTerm; + int k; + assert( iCur>=0 ); + op &= WO_ALL; + for(; pWC; pWC=pWC->pOuter){ + for(pTerm=pWC->a, k=pWC->nTerm; k; k--, pTerm++){ + if( pTerm->leftCursor==iCur + && (pTerm->prereqRight & notReady)==0 + && pTerm->u.leftColumn==iColumn + && (pTerm->eOperator & op)!=0 + ){ + if( iColumn>=0 && pIdx && pTerm->eOperator!=WO_ISNULL ){ + Expr *pX = pTerm->pExpr; + CollSeq *pColl; + char idxaff; + int j; + Parse *pParse = pWC->pParse; + + idxaff = pIdx->pTable->aCol[iColumn].affinity; + if( !sqlite3IndexAffinityOk(pX, idxaff) ) continue; + + /* Figure out the collation sequence required from an index for + ** it to be useful for optimising expression pX. Store this + ** value in variable pColl. + */ + assert(pX->pLeft); + pColl = sqlite3BinaryCompareCollSeq(pParse, pX->pLeft, pX->pRight); + assert(pColl || pParse->nErr); + + for(j=0; pIdx->aiColumn[j]!=iColumn; j++){ + if( NEVER(j>=pIdx->nColumn) ) return 0; + } + if( pColl && sqlite3StrICmp(pColl->zName, pIdx->azColl[j]) ) continue; + } + return pTerm; + } + } + } + return 0; +} + +/* Forward reference */ +static void exprAnalyze(SrcList*, WhereClause*, int); + +/* +** Call exprAnalyze on all terms in a WHERE clause. +** +** +*/ +static void exprAnalyzeAll( + SrcList *pTabList, /* the FROM clause */ + WhereClause *pWC /* the WHERE clause to be analyzed */ +){ + int i; + for(i=pWC->nTerm-1; i>=0; i--){ + exprAnalyze(pTabList, pWC, i); + } +} + +#ifndef SQLITE_OMIT_LIKE_OPTIMIZATION +/* +** Check to see if the given expression is a LIKE or GLOB operator that +** can be optimized using inequality constraints. Return TRUE if it is +** so and false if not. +** +** In order for the operator to be optimizible, the RHS must be a string +** literal that does not begin with a wildcard. +*/ +static int isLikeOrGlob( + Parse *pParse, /* Parsing and code generating context */ + Expr *pExpr, /* Test this expression */ + Expr **ppPrefix, /* Pointer to TK_STRING expression with pattern prefix */ + int *pisComplete, /* True if the only wildcard is % in the last character */ + int *pnoCase /* True if uppercase is equivalent to lowercase */ +){ + const char *z = 0; /* String on RHS of LIKE operator */ + Expr *pRight, *pLeft; /* Right and left size of LIKE operator */ + ExprList *pList; /* List of operands to the LIKE operator */ + int c; /* One character in z[] */ + int cnt; /* Number of non-wildcard prefix characters */ + char wc[3]; /* Wildcard characters */ + sqlite3 *db = pParse->db; /* Database connection */ + sqlite3_value *pVal = 0; + int op; /* Opcode of pRight */ + + if( !sqlite3IsLikeFunction(db, pExpr, pnoCase, wc) ){ + return 0; + } +#ifdef SQLITE_EBCDIC + if( *pnoCase ) return 0; +#endif + pList = pExpr->x.pList; + pLeft = pList->a[1].pExpr; + if( pLeft->op!=TK_COLUMN + || sqlite3ExprAffinity(pLeft)!=SQLITE_AFF_TEXT + || IsVirtual(pLeft->pTab) + ){ + /* IMP: R-02065-49465 The left-hand side of the LIKE or GLOB operator must + ** be the name of an indexed column with TEXT affinity. */ + return 0; + } + assert( pLeft->iColumn!=(-1) ); /* Because IPK never has AFF_TEXT */ + + pRight = pList->a[0].pExpr; + op = pRight->op; + if( op==TK_REGISTER ){ + op = pRight->op2; + } + if( op==TK_VARIABLE ){ + Vdbe *pReprepare = pParse->pReprepare; + int iCol = pRight->iColumn; + pVal = sqlite3VdbeGetValue(pReprepare, iCol, SQLITE_AFF_NONE); + if( pVal && sqlite3_value_type(pVal)==SQLITE_TEXT ){ + z = (char *)sqlite3_value_text(pVal); + } + sqlite3VdbeSetVarmask(pParse->pVdbe, iCol); + assert( pRight->op==TK_VARIABLE || pRight->op==TK_REGISTER ); + }else if( op==TK_STRING ){ + z = pRight->u.zToken; + } + if( z ){ + cnt = 0; + while( (c=z[cnt])!=0 && c!=wc[0] && c!=wc[1] && c!=wc[2] ){ + cnt++; + } + if( cnt!=0 && 255!=(u8)z[cnt-1] ){ + Expr *pPrefix; + *pisComplete = c==wc[0] && z[cnt+1]==0; + pPrefix = sqlite3Expr(db, TK_STRING, z); + if( pPrefix ) pPrefix->u.zToken[cnt] = 0; + *ppPrefix = pPrefix; + if( op==TK_VARIABLE ){ + Vdbe *v = pParse->pVdbe; + sqlite3VdbeSetVarmask(v, pRight->iColumn); + if( *pisComplete && pRight->u.zToken[1] ){ + /* If the rhs of the LIKE expression is a variable, and the current + ** value of the variable means there is no need to invoke the LIKE + ** function, then no OP_Variable will be added to the program. + ** This causes problems for the sqlite3_bind_parameter_name() + ** API. To workaround them, add a dummy OP_Variable here. + */ + int r1 = sqlite3GetTempReg(pParse); + sqlite3ExprCodeTarget(pParse, pRight, r1); + sqlite3VdbeChangeP3(v, sqlite3VdbeCurrentAddr(v)-1, 0); + sqlite3ReleaseTempReg(pParse, r1); + } + } + }else{ + z = 0; + } + } + + sqlite3ValueFree(pVal); + return (z!=0); +} +#endif /* SQLITE_OMIT_LIKE_OPTIMIZATION */ + + +#ifndef SQLITE_OMIT_VIRTUALTABLE +/* +** Check to see if the given expression is of the form +** +** column MATCH expr +** +** If it is then return TRUE. If not, return FALSE. +*/ +static int isMatchOfColumn( + Expr *pExpr /* Test this expression */ +){ + ExprList *pList; + + if( pExpr->op!=TK_FUNCTION ){ + return 0; + } + if( sqlite3StrICmp(pExpr->u.zToken,"match")!=0 ){ + return 0; + } + pList = pExpr->x.pList; + if( pList->nExpr!=2 ){ + return 0; + } + if( pList->a[1].pExpr->op != TK_COLUMN ){ + return 0; + } + return 1; +} +#endif /* SQLITE_OMIT_VIRTUALTABLE */ + +/* +** If the pBase expression originated in the ON or USING clause of +** a join, then transfer the appropriate markings over to derived. +*/ +static void transferJoinMarkings(Expr *pDerived, Expr *pBase){ + pDerived->flags |= pBase->flags & EP_FromJoin; + pDerived->iRightJoinTable = pBase->iRightJoinTable; +} + +#if !defined(SQLITE_OMIT_OR_OPTIMIZATION) && !defined(SQLITE_OMIT_SUBQUERY) +/* +** Analyze a term that consists of two or more OR-connected +** subterms. So in: +** +** ... WHERE (a=5) AND (b=7 OR c=9 OR d=13) AND (d=13) +** ^^^^^^^^^^^^^^^^^^^^ +** +** This routine analyzes terms such as the middle term in the above example. +** A WhereOrTerm object is computed and attached to the term under +** analysis, regardless of the outcome of the analysis. Hence: +** +** WhereTerm.wtFlags |= TERM_ORINFO +** WhereTerm.u.pOrInfo = a dynamically allocated WhereOrTerm object +** +** The term being analyzed must have two or more of OR-connected subterms. +** A single subterm might be a set of AND-connected sub-subterms. +** Examples of terms under analysis: +** +** (A) t1.x=t2.y OR t1.x=t2.z OR t1.y=15 OR t1.z=t3.a+5 +** (B) x=expr1 OR expr2=x OR x=expr3 +** (C) t1.x=t2.y OR (t1.x=t2.z AND t1.y=15) +** (D) x=expr1 OR (y>11 AND y<22 AND z LIKE '*hello*') +** (E) (p.a=1 AND q.b=2 AND r.c=3) OR (p.x=4 AND q.y=5 AND r.z=6) +** +** CASE 1: +** +** If all subterms are of the form T.C=expr for some single column of C +** a single table T (as shown in example B above) then create a new virtual +** term that is an equivalent IN expression. In other words, if the term +** being analyzed is: +** +** x = expr1 OR expr2 = x OR x = expr3 +** +** then create a new virtual term like this: +** +** x IN (expr1,expr2,expr3) +** +** CASE 2: +** +** If all subterms are indexable by a single table T, then set +** +** WhereTerm.eOperator = WO_OR +** WhereTerm.u.pOrInfo->indexable |= the cursor number for table T +** +** A subterm is "indexable" if it is of the form +** "T.C " where C is any column of table T and +** is one of "=", "<", "<=", ">", ">=", "IS NULL", or "IN". +** A subterm is also indexable if it is an AND of two or more +** subsubterms at least one of which is indexable. Indexable AND +** subterms have their eOperator set to WO_AND and they have +** u.pAndInfo set to a dynamically allocated WhereAndTerm object. +** +** From another point of view, "indexable" means that the subterm could +** potentially be used with an index if an appropriate index exists. +** This analysis does not consider whether or not the index exists; that +** is something the bestIndex() routine will determine. This analysis +** only looks at whether subterms appropriate for indexing exist. +** +** All examples A through E above all satisfy case 2. But if a term +** also statisfies case 1 (such as B) we know that the optimizer will +** always prefer case 1, so in that case we pretend that case 2 is not +** satisfied. +** +** It might be the case that multiple tables are indexable. For example, +** (E) above is indexable on tables P, Q, and R. +** +** Terms that satisfy case 2 are candidates for lookup by using +** separate indices to find rowids for each subterm and composing +** the union of all rowids using a RowSet object. This is similar +** to "bitmap indices" in other database engines. +** +** OTHERWISE: +** +** If neither case 1 nor case 2 apply, then leave the eOperator set to +** zero. This term is not useful for search. +*/ +static void exprAnalyzeOrTerm( + SrcList *pSrc, /* the FROM clause */ + WhereClause *pWC, /* the complete WHERE clause */ + int idxTerm /* Index of the OR-term to be analyzed */ +){ + Parse *pParse = pWC->pParse; /* Parser context */ + sqlite3 *db = pParse->db; /* Database connection */ + WhereTerm *pTerm = &pWC->a[idxTerm]; /* The term to be analyzed */ + Expr *pExpr = pTerm->pExpr; /* The expression of the term */ + WhereMaskSet *pMaskSet = pWC->pMaskSet; /* Table use masks */ + int i; /* Loop counters */ + WhereClause *pOrWc; /* Breakup of pTerm into subterms */ + WhereTerm *pOrTerm; /* A Sub-term within the pOrWc */ + WhereOrInfo *pOrInfo; /* Additional information associated with pTerm */ + Bitmask chngToIN; /* Tables that might satisfy case 1 */ + Bitmask indexable; /* Tables that are indexable, satisfying case 2 */ + + /* + ** Break the OR clause into its separate subterms. The subterms are + ** stored in a WhereClause structure containing within the WhereOrInfo + ** object that is attached to the original OR clause term. + */ + assert( (pTerm->wtFlags & (TERM_DYNAMIC|TERM_ORINFO|TERM_ANDINFO))==0 ); + assert( pExpr->op==TK_OR ); + pTerm->u.pOrInfo = pOrInfo = sqlite3DbMallocZero(db, sizeof(*pOrInfo)); + if( pOrInfo==0 ) return; + pTerm->wtFlags |= TERM_ORINFO; + pOrWc = &pOrInfo->wc; + whereClauseInit(pOrWc, pWC->pParse, pMaskSet, pWC->wctrlFlags); + whereSplit(pOrWc, pExpr, TK_OR); + exprAnalyzeAll(pSrc, pOrWc); + if( db->mallocFailed ) return; + assert( pOrWc->nTerm>=2 ); + + /* + ** Compute the set of tables that might satisfy cases 1 or 2. + */ + indexable = ~(Bitmask)0; + chngToIN = ~(pWC->vmask); + for(i=pOrWc->nTerm-1, pOrTerm=pOrWc->a; i>=0 && indexable; i--, pOrTerm++){ + if( (pOrTerm->eOperator & WO_SINGLE)==0 ){ + WhereAndInfo *pAndInfo; + assert( pOrTerm->eOperator==0 ); + assert( (pOrTerm->wtFlags & (TERM_ANDINFO|TERM_ORINFO))==0 ); + chngToIN = 0; + pAndInfo = sqlite3DbMallocRaw(db, sizeof(*pAndInfo)); + if( pAndInfo ){ + WhereClause *pAndWC; + WhereTerm *pAndTerm; + int j; + Bitmask b = 0; + pOrTerm->u.pAndInfo = pAndInfo; + pOrTerm->wtFlags |= TERM_ANDINFO; + pOrTerm->eOperator = WO_AND; + pAndWC = &pAndInfo->wc; + whereClauseInit(pAndWC, pWC->pParse, pMaskSet, pWC->wctrlFlags); + whereSplit(pAndWC, pOrTerm->pExpr, TK_AND); + exprAnalyzeAll(pSrc, pAndWC); + pAndWC->pOuter = pWC; + testcase( db->mallocFailed ); + if( !db->mallocFailed ){ + for(j=0, pAndTerm=pAndWC->a; jnTerm; j++, pAndTerm++){ + assert( pAndTerm->pExpr ); + if( allowedOp(pAndTerm->pExpr->op) ){ + b |= getMask(pMaskSet, pAndTerm->leftCursor); + } + } + } + indexable &= b; + } + }else if( pOrTerm->wtFlags & TERM_COPIED ){ + /* Skip this term for now. We revisit it when we process the + ** corresponding TERM_VIRTUAL term */ + }else{ + Bitmask b; + b = getMask(pMaskSet, pOrTerm->leftCursor); + if( pOrTerm->wtFlags & TERM_VIRTUAL ){ + WhereTerm *pOther = &pOrWc->a[pOrTerm->iParent]; + b |= getMask(pMaskSet, pOther->leftCursor); + } + indexable &= b; + if( pOrTerm->eOperator!=WO_EQ ){ + chngToIN = 0; + }else{ + chngToIN &= b; + } + } + } + + /* + ** Record the set of tables that satisfy case 2. The set might be + ** empty. + */ + pOrInfo->indexable = indexable; + pTerm->eOperator = indexable==0 ? 0 : WO_OR; + + /* + ** chngToIN holds a set of tables that *might* satisfy case 1. But + ** we have to do some additional checking to see if case 1 really + ** is satisfied. + ** + ** chngToIN will hold either 0, 1, or 2 bits. The 0-bit case means + ** that there is no possibility of transforming the OR clause into an + ** IN operator because one or more terms in the OR clause contain + ** something other than == on a column in the single table. The 1-bit + ** case means that every term of the OR clause is of the form + ** "table.column=expr" for some single table. The one bit that is set + ** will correspond to the common table. We still need to check to make + ** sure the same column is used on all terms. The 2-bit case is when + ** the all terms are of the form "table1.column=table2.column". It + ** might be possible to form an IN operator with either table1.column + ** or table2.column as the LHS if either is common to every term of + ** the OR clause. + ** + ** Note that terms of the form "table.column1=table.column2" (the + ** same table on both sizes of the ==) cannot be optimized. + */ + if( chngToIN ){ + int okToChngToIN = 0; /* True if the conversion to IN is valid */ + int iColumn = -1; /* Column index on lhs of IN operator */ + int iCursor = -1; /* Table cursor common to all terms */ + int j = 0; /* Loop counter */ + + /* Search for a table and column that appears on one side or the + ** other of the == operator in every subterm. That table and column + ** will be recorded in iCursor and iColumn. There might not be any + ** such table and column. Set okToChngToIN if an appropriate table + ** and column is found but leave okToChngToIN false if not found. + */ + for(j=0; j<2 && !okToChngToIN; j++){ + pOrTerm = pOrWc->a; + for(i=pOrWc->nTerm-1; i>=0; i--, pOrTerm++){ + assert( pOrTerm->eOperator==WO_EQ ); + pOrTerm->wtFlags &= ~TERM_OR_OK; + if( pOrTerm->leftCursor==iCursor ){ + /* This is the 2-bit case and we are on the second iteration and + ** current term is from the first iteration. So skip this term. */ + assert( j==1 ); + continue; + } + if( (chngToIN & getMask(pMaskSet, pOrTerm->leftCursor))==0 ){ + /* This term must be of the form t1.a==t2.b where t2 is in the + ** chngToIN set but t1 is not. This term will be either preceeded + ** or follwed by an inverted copy (t2.b==t1.a). Skip this term + ** and use its inversion. */ + testcase( pOrTerm->wtFlags & TERM_COPIED ); + testcase( pOrTerm->wtFlags & TERM_VIRTUAL ); + assert( pOrTerm->wtFlags & (TERM_COPIED|TERM_VIRTUAL) ); + continue; + } + iColumn = pOrTerm->u.leftColumn; + iCursor = pOrTerm->leftCursor; + break; + } + if( i<0 ){ + /* No candidate table+column was found. This can only occur + ** on the second iteration */ + assert( j==1 ); + assert( (chngToIN&(chngToIN-1))==0 ); + assert( chngToIN==getMask(pMaskSet, iCursor) ); + break; + } + testcase( j==1 ); + + /* We have found a candidate table and column. Check to see if that + ** table and column is common to every term in the OR clause */ + okToChngToIN = 1; + for(; i>=0 && okToChngToIN; i--, pOrTerm++){ + assert( pOrTerm->eOperator==WO_EQ ); + if( pOrTerm->leftCursor!=iCursor ){ + pOrTerm->wtFlags &= ~TERM_OR_OK; + }else if( pOrTerm->u.leftColumn!=iColumn ){ + okToChngToIN = 0; + }else{ + int affLeft, affRight; + /* If the right-hand side is also a column, then the affinities + ** of both right and left sides must be such that no type + ** conversions are required on the right. (Ticket #2249) + */ + affRight = sqlite3ExprAffinity(pOrTerm->pExpr->pRight); + affLeft = sqlite3ExprAffinity(pOrTerm->pExpr->pLeft); + if( affRight!=0 && affRight!=affLeft ){ + okToChngToIN = 0; + }else{ + pOrTerm->wtFlags |= TERM_OR_OK; + } + } + } + } + + /* At this point, okToChngToIN is true if original pTerm satisfies + ** case 1. In that case, construct a new virtual term that is + ** pTerm converted into an IN operator. + ** + ** EV: R-00211-15100 + */ + if( okToChngToIN ){ + Expr *pDup; /* A transient duplicate expression */ + ExprList *pList = 0; /* The RHS of the IN operator */ + Expr *pLeft = 0; /* The LHS of the IN operator */ + Expr *pNew; /* The complete IN operator */ + + for(i=pOrWc->nTerm-1, pOrTerm=pOrWc->a; i>=0; i--, pOrTerm++){ + if( (pOrTerm->wtFlags & TERM_OR_OK)==0 ) continue; + assert( pOrTerm->eOperator==WO_EQ ); + assert( pOrTerm->leftCursor==iCursor ); + assert( pOrTerm->u.leftColumn==iColumn ); + pDup = sqlite3ExprDup(db, pOrTerm->pExpr->pRight, 0); + pList = sqlite3ExprListAppend(pWC->pParse, pList, pDup); + pLeft = pOrTerm->pExpr->pLeft; + } + assert( pLeft!=0 ); + pDup = sqlite3ExprDup(db, pLeft, 0); + pNew = sqlite3PExpr(pParse, TK_IN, pDup, 0, 0); + if( pNew ){ + int idxNew; + transferJoinMarkings(pNew, pExpr); + assert( !ExprHasProperty(pNew, EP_xIsSelect) ); + pNew->x.pList = pList; + idxNew = whereClauseInsert(pWC, pNew, TERM_VIRTUAL|TERM_DYNAMIC); + testcase( idxNew==0 ); + exprAnalyze(pSrc, pWC, idxNew); + pTerm = &pWC->a[idxTerm]; + pWC->a[idxNew].iParent = idxTerm; + pTerm->nChild = 1; + }else{ + sqlite3ExprListDelete(db, pList); + } + pTerm->eOperator = WO_NOOP; /* case 1 trumps case 2 */ + } + } +} +#endif /* !SQLITE_OMIT_OR_OPTIMIZATION && !SQLITE_OMIT_SUBQUERY */ + + +/* +** The input to this routine is an WhereTerm structure with only the +** "pExpr" field filled in. The job of this routine is to analyze the +** subexpression and populate all the other fields of the WhereTerm +** structure. +** +** If the expression is of the form " X" it gets commuted +** to the standard form of "X ". +** +** If the expression is of the form "X Y" where both X and Y are +** columns, then the original expression is unchanged and a new virtual +** term of the form "Y X" is added to the WHERE clause and +** analyzed separately. The original term is marked with TERM_COPIED +** and the new term is marked with TERM_DYNAMIC (because it's pExpr +** needs to be freed with the WhereClause) and TERM_VIRTUAL (because it +** is a commuted copy of a prior term.) The original term has nChild=1 +** and the copy has idxParent set to the index of the original term. +*/ +static void exprAnalyze( + SrcList *pSrc, /* the FROM clause */ + WhereClause *pWC, /* the WHERE clause */ + int idxTerm /* Index of the term to be analyzed */ +){ + WhereTerm *pTerm; /* The term to be analyzed */ + WhereMaskSet *pMaskSet; /* Set of table index masks */ + Expr *pExpr; /* The expression to be analyzed */ + Bitmask prereqLeft; /* Prerequesites of the pExpr->pLeft */ + Bitmask prereqAll; /* Prerequesites of pExpr */ + Bitmask extraRight = 0; /* Extra dependencies on LEFT JOIN */ + Expr *pStr1 = 0; /* RHS of LIKE/GLOB operator */ + int isComplete = 0; /* RHS of LIKE/GLOB ends with wildcard */ + int noCase = 0; /* LIKE/GLOB distinguishes case */ + int op; /* Top-level operator. pExpr->op */ + Parse *pParse = pWC->pParse; /* Parsing context */ + sqlite3 *db = pParse->db; /* Database connection */ + + if( db->mallocFailed ){ + return; + } + pTerm = &pWC->a[idxTerm]; + pMaskSet = pWC->pMaskSet; + pExpr = pTerm->pExpr; + prereqLeft = exprTableUsage(pMaskSet, pExpr->pLeft); + op = pExpr->op; + if( op==TK_IN ){ + assert( pExpr->pRight==0 ); + if( ExprHasProperty(pExpr, EP_xIsSelect) ){ + pTerm->prereqRight = exprSelectTableUsage(pMaskSet, pExpr->x.pSelect); + }else{ + pTerm->prereqRight = exprListTableUsage(pMaskSet, pExpr->x.pList); + } + }else if( op==TK_ISNULL ){ + pTerm->prereqRight = 0; + }else{ + pTerm->prereqRight = exprTableUsage(pMaskSet, pExpr->pRight); + } + prereqAll = exprTableUsage(pMaskSet, pExpr); + if( ExprHasProperty(pExpr, EP_FromJoin) ){ + Bitmask x = getMask(pMaskSet, pExpr->iRightJoinTable); + prereqAll |= x; + extraRight = x-1; /* ON clause terms may not be used with an index + ** on left table of a LEFT JOIN. Ticket #3015 */ + } + pTerm->prereqAll = prereqAll; + pTerm->leftCursor = -1; + pTerm->iParent = -1; + pTerm->eOperator = 0; + if( allowedOp(op) && (pTerm->prereqRight & prereqLeft)==0 ){ + Expr *pLeft = pExpr->pLeft; + Expr *pRight = pExpr->pRight; + if( pLeft->op==TK_COLUMN ){ + pTerm->leftCursor = pLeft->iTable; + pTerm->u.leftColumn = pLeft->iColumn; + pTerm->eOperator = operatorMask(op); + } + if( pRight && pRight->op==TK_COLUMN ){ + WhereTerm *pNew; + Expr *pDup; + if( pTerm->leftCursor>=0 ){ + int idxNew; + pDup = sqlite3ExprDup(db, pExpr, 0); + if( db->mallocFailed ){ + sqlite3ExprDelete(db, pDup); + return; + } + idxNew = whereClauseInsert(pWC, pDup, TERM_VIRTUAL|TERM_DYNAMIC); + if( idxNew==0 ) return; + pNew = &pWC->a[idxNew]; + pNew->iParent = idxTerm; + pTerm = &pWC->a[idxTerm]; + pTerm->nChild = 1; + pTerm->wtFlags |= TERM_COPIED; + }else{ + pDup = pExpr; + pNew = pTerm; + } + exprCommute(pParse, pDup); + pLeft = pDup->pLeft; + pNew->leftCursor = pLeft->iTable; + pNew->u.leftColumn = pLeft->iColumn; + testcase( (prereqLeft | extraRight) != prereqLeft ); + pNew->prereqRight = prereqLeft | extraRight; + pNew->prereqAll = prereqAll; + pNew->eOperator = operatorMask(pDup->op); + } + } + +#ifndef SQLITE_OMIT_BETWEEN_OPTIMIZATION + /* If a term is the BETWEEN operator, create two new virtual terms + ** that define the range that the BETWEEN implements. For example: + ** + ** a BETWEEN b AND c + ** + ** is converted into: + ** + ** (a BETWEEN b AND c) AND (a>=b) AND (a<=c) + ** + ** The two new terms are added onto the end of the WhereClause object. + ** The new terms are "dynamic" and are children of the original BETWEEN + ** term. That means that if the BETWEEN term is coded, the children are + ** skipped. Or, if the children are satisfied by an index, the original + ** BETWEEN term is skipped. + */ + else if( pExpr->op==TK_BETWEEN && pWC->op==TK_AND ){ + ExprList *pList = pExpr->x.pList; + int i; + static const u8 ops[] = {TK_GE, TK_LE}; + assert( pList!=0 ); + assert( pList->nExpr==2 ); + for(i=0; i<2; i++){ + Expr *pNewExpr; + int idxNew; + pNewExpr = sqlite3PExpr(pParse, ops[i], + sqlite3ExprDup(db, pExpr->pLeft, 0), + sqlite3ExprDup(db, pList->a[i].pExpr, 0), 0); + idxNew = whereClauseInsert(pWC, pNewExpr, TERM_VIRTUAL|TERM_DYNAMIC); + testcase( idxNew==0 ); + exprAnalyze(pSrc, pWC, idxNew); + pTerm = &pWC->a[idxTerm]; + pWC->a[idxNew].iParent = idxTerm; + } + pTerm->nChild = 2; + } +#endif /* SQLITE_OMIT_BETWEEN_OPTIMIZATION */ + +#if !defined(SQLITE_OMIT_OR_OPTIMIZATION) && !defined(SQLITE_OMIT_SUBQUERY) + /* Analyze a term that is composed of two or more subterms connected by + ** an OR operator. + */ + else if( pExpr->op==TK_OR ){ + assert( pWC->op==TK_AND ); + exprAnalyzeOrTerm(pSrc, pWC, idxTerm); + pTerm = &pWC->a[idxTerm]; + } +#endif /* SQLITE_OMIT_OR_OPTIMIZATION */ + +#ifndef SQLITE_OMIT_LIKE_OPTIMIZATION + /* Add constraints to reduce the search space on a LIKE or GLOB + ** operator. + ** + ** A like pattern of the form "x LIKE 'abc%'" is changed into constraints + ** + ** x>='abc' AND x<'abd' AND x LIKE 'abc%' + ** + ** The last character of the prefix "abc" is incremented to form the + ** termination condition "abd". + */ + if( pWC->op==TK_AND + && isLikeOrGlob(pParse, pExpr, &pStr1, &isComplete, &noCase) + ){ + Expr *pLeft; /* LHS of LIKE/GLOB operator */ + Expr *pStr2; /* Copy of pStr1 - RHS of LIKE/GLOB operator */ + Expr *pNewExpr1; + Expr *pNewExpr2; + int idxNew1; + int idxNew2; + CollSeq *pColl; /* Collating sequence to use */ + + pLeft = pExpr->x.pList->a[1].pExpr; + pStr2 = sqlite3ExprDup(db, pStr1, 0); + if( !db->mallocFailed ){ + u8 c, *pC; /* Last character before the first wildcard */ + pC = (u8*)&pStr2->u.zToken[sqlite3Strlen30(pStr2->u.zToken)-1]; + c = *pC; + if( noCase ){ + /* The point is to increment the last character before the first + ** wildcard. But if we increment '@', that will push it into the + ** alphabetic range where case conversions will mess up the + ** inequality. To avoid this, make sure to also run the full + ** LIKE on all candidate expressions by clearing the isComplete flag + */ + if( c=='A'-1 ) isComplete = 0; /* EV: R-64339-08207 */ + + + c = sqlite3UpperToLower[c]; + } + *pC = c + 1; + } + pColl = sqlite3FindCollSeq(db, SQLITE_UTF8, noCase ? "NOCASE" : "BINARY",0); + pNewExpr1 = sqlite3PExpr(pParse, TK_GE, + sqlite3ExprSetColl(sqlite3ExprDup(db,pLeft,0), pColl), + pStr1, 0); + idxNew1 = whereClauseInsert(pWC, pNewExpr1, TERM_VIRTUAL|TERM_DYNAMIC); + testcase( idxNew1==0 ); + exprAnalyze(pSrc, pWC, idxNew1); + pNewExpr2 = sqlite3PExpr(pParse, TK_LT, + sqlite3ExprSetColl(sqlite3ExprDup(db,pLeft,0), pColl), + pStr2, 0); + idxNew2 = whereClauseInsert(pWC, pNewExpr2, TERM_VIRTUAL|TERM_DYNAMIC); + testcase( idxNew2==0 ); + exprAnalyze(pSrc, pWC, idxNew2); + pTerm = &pWC->a[idxTerm]; + if( isComplete ){ + pWC->a[idxNew1].iParent = idxTerm; + pWC->a[idxNew2].iParent = idxTerm; + pTerm->nChild = 2; + } + } +#endif /* SQLITE_OMIT_LIKE_OPTIMIZATION */ + +#ifndef SQLITE_OMIT_VIRTUALTABLE + /* Add a WO_MATCH auxiliary term to the constraint set if the + ** current expression is of the form: column MATCH expr. + ** This information is used by the xBestIndex methods of + ** virtual tables. The native query optimizer does not attempt + ** to do anything with MATCH functions. + */ + if( isMatchOfColumn(pExpr) ){ + int idxNew; + Expr *pRight, *pLeft; + WhereTerm *pNewTerm; + Bitmask prereqColumn, prereqExpr; + + pRight = pExpr->x.pList->a[0].pExpr; + pLeft = pExpr->x.pList->a[1].pExpr; + prereqExpr = exprTableUsage(pMaskSet, pRight); + prereqColumn = exprTableUsage(pMaskSet, pLeft); + if( (prereqExpr & prereqColumn)==0 ){ + Expr *pNewExpr; + pNewExpr = sqlite3PExpr(pParse, TK_MATCH, + 0, sqlite3ExprDup(db, pRight, 0), 0); + idxNew = whereClauseInsert(pWC, pNewExpr, TERM_VIRTUAL|TERM_DYNAMIC); + testcase( idxNew==0 ); + pNewTerm = &pWC->a[idxNew]; + pNewTerm->prereqRight = prereqExpr; + pNewTerm->leftCursor = pLeft->iTable; + pNewTerm->u.leftColumn = pLeft->iColumn; + pNewTerm->eOperator = WO_MATCH; + pNewTerm->iParent = idxTerm; + pTerm = &pWC->a[idxTerm]; + pTerm->nChild = 1; + pTerm->wtFlags |= TERM_COPIED; + pNewTerm->prereqAll = pTerm->prereqAll; + } + } +#endif /* SQLITE_OMIT_VIRTUALTABLE */ + +#ifdef SQLITE_ENABLE_STAT3 + /* When sqlite_stat3 histogram data is available an operator of the + ** form "x IS NOT NULL" can sometimes be evaluated more efficiently + ** as "x>NULL" if x is not an INTEGER PRIMARY KEY. So construct a + ** virtual term of that form. + ** + ** Note that the virtual term must be tagged with TERM_VNULL. This + ** TERM_VNULL tag will suppress the not-null check at the beginning + ** of the loop. Without the TERM_VNULL flag, the not-null check at + ** the start of the loop will prevent any results from being returned. + */ + if( pExpr->op==TK_NOTNULL + && pExpr->pLeft->op==TK_COLUMN + && pExpr->pLeft->iColumn>=0 + ){ + Expr *pNewExpr; + Expr *pLeft = pExpr->pLeft; + int idxNew; + WhereTerm *pNewTerm; + + pNewExpr = sqlite3PExpr(pParse, TK_GT, + sqlite3ExprDup(db, pLeft, 0), + sqlite3PExpr(pParse, TK_NULL, 0, 0, 0), 0); + + idxNew = whereClauseInsert(pWC, pNewExpr, + TERM_VIRTUAL|TERM_DYNAMIC|TERM_VNULL); + if( idxNew ){ + pNewTerm = &pWC->a[idxNew]; + pNewTerm->prereqRight = 0; + pNewTerm->leftCursor = pLeft->iTable; + pNewTerm->u.leftColumn = pLeft->iColumn; + pNewTerm->eOperator = WO_GT; + pNewTerm->iParent = idxTerm; + pTerm = &pWC->a[idxTerm]; + pTerm->nChild = 1; + pTerm->wtFlags |= TERM_COPIED; + pNewTerm->prereqAll = pTerm->prereqAll; + } + } +#endif /* SQLITE_ENABLE_STAT */ + + /* Prevent ON clause terms of a LEFT JOIN from being used to drive + ** an index for tables to the left of the join. + */ + pTerm->prereqRight |= extraRight; +} + +/* +** Return TRUE if any of the expressions in pList->a[iFirst...] contain +** a reference to any table other than the iBase table. +*/ +static int referencesOtherTables( + ExprList *pList, /* Search expressions in ths list */ + WhereMaskSet *pMaskSet, /* Mapping from tables to bitmaps */ + int iFirst, /* Be searching with the iFirst-th expression */ + int iBase /* Ignore references to this table */ +){ + Bitmask allowed = ~getMask(pMaskSet, iBase); + while( iFirstnExpr ){ + if( (exprTableUsage(pMaskSet, pList->a[iFirst++].pExpr)&allowed)!=0 ){ + return 1; + } + } + return 0; +} + +/* +** This function searches the expression list passed as the second argument +** for an expression of type TK_COLUMN that refers to the same column and +** uses the same collation sequence as the iCol'th column of index pIdx. +** Argument iBase is the cursor number used for the table that pIdx refers +** to. +** +** If such an expression is found, its index in pList->a[] is returned. If +** no expression is found, -1 is returned. +*/ +static int findIndexCol( + Parse *pParse, /* Parse context */ + ExprList *pList, /* Expression list to search */ + int iBase, /* Cursor for table associated with pIdx */ + Index *pIdx, /* Index to match column of */ + int iCol /* Column of index to match */ +){ + int i; + const char *zColl = pIdx->azColl[iCol]; + + for(i=0; inExpr; i++){ + Expr *p = pList->a[i].pExpr; + if( p->op==TK_COLUMN + && p->iColumn==pIdx->aiColumn[iCol] + && p->iTable==iBase + ){ + CollSeq *pColl = sqlite3ExprCollSeq(pParse, p); + if( ALWAYS(pColl) && 0==sqlite3StrICmp(pColl->zName, zColl) ){ + return i; + } + } + } + + return -1; +} + +/* +** This routine determines if pIdx can be used to assist in processing a +** DISTINCT qualifier. In other words, it tests whether or not using this +** index for the outer loop guarantees that rows with equal values for +** all expressions in the pDistinct list are delivered grouped together. +** +** For example, the query +** +** SELECT DISTINCT a, b, c FROM tbl WHERE a = ? +** +** can benefit from any index on columns "b" and "c". +*/ +static int isDistinctIndex( + Parse *pParse, /* Parsing context */ + WhereClause *pWC, /* The WHERE clause */ + Index *pIdx, /* The index being considered */ + int base, /* Cursor number for the table pIdx is on */ + ExprList *pDistinct, /* The DISTINCT expressions */ + int nEqCol /* Number of index columns with == */ +){ + Bitmask mask = 0; /* Mask of unaccounted for pDistinct exprs */ + int i; /* Iterator variable */ + + if( pIdx->zName==0 || pDistinct==0 || pDistinct->nExpr>=BMS ) return 0; + testcase( pDistinct->nExpr==BMS-1 ); + + /* Loop through all the expressions in the distinct list. If any of them + ** are not simple column references, return early. Otherwise, test if the + ** WHERE clause contains a "col=X" clause. If it does, the expression + ** can be ignored. If it does not, and the column does not belong to the + ** same table as index pIdx, return early. Finally, if there is no + ** matching "col=X" expression and the column is on the same table as pIdx, + ** set the corresponding bit in variable mask. + */ + for(i=0; inExpr; i++){ + WhereTerm *pTerm; + Expr *p = pDistinct->a[i].pExpr; + if( p->op!=TK_COLUMN ) return 0; + pTerm = findTerm(pWC, p->iTable, p->iColumn, ~(Bitmask)0, WO_EQ, 0); + if( pTerm ){ + Expr *pX = pTerm->pExpr; + CollSeq *p1 = sqlite3BinaryCompareCollSeq(pParse, pX->pLeft, pX->pRight); + CollSeq *p2 = sqlite3ExprCollSeq(pParse, p); + if( p1==p2 ) continue; + } + if( p->iTable!=base ) return 0; + mask |= (((Bitmask)1) << i); + } + + for(i=nEqCol; mask && inColumn; i++){ + int iExpr = findIndexCol(pParse, pDistinct, base, pIdx, i); + if( iExpr<0 ) break; + mask &= ~(((Bitmask)1) << iExpr); + } + + return (mask==0); +} + + +/* +** Return true if the DISTINCT expression-list passed as the third argument +** is redundant. A DISTINCT list is redundant if the database contains a +** UNIQUE index that guarantees that the result of the query will be distinct +** anyway. +*/ +static int isDistinctRedundant( + Parse *pParse, + SrcList *pTabList, + WhereClause *pWC, + ExprList *pDistinct +){ + Table *pTab; + Index *pIdx; + int i; + int iBase; + + /* If there is more than one table or sub-select in the FROM clause of + ** this query, then it will not be possible to show that the DISTINCT + ** clause is redundant. */ + if( pTabList->nSrc!=1 ) return 0; + iBase = pTabList->a[0].iCursor; + pTab = pTabList->a[0].pTab; + + /* If any of the expressions is an IPK column on table iBase, then return + ** true. Note: The (p->iTable==iBase) part of this test may be false if the + ** current SELECT is a correlated sub-query. + */ + for(i=0; inExpr; i++){ + Expr *p = pDistinct->a[i].pExpr; + if( p->op==TK_COLUMN && p->iTable==iBase && p->iColumn<0 ) return 1; + } + + /* Loop through all indices on the table, checking each to see if it makes + ** the DISTINCT qualifier redundant. It does so if: + ** + ** 1. The index is itself UNIQUE, and + ** + ** 2. All of the columns in the index are either part of the pDistinct + ** list, or else the WHERE clause contains a term of the form "col=X", + ** where X is a constant value. The collation sequences of the + ** comparison and select-list expressions must match those of the index. + ** + ** 3. All of those index columns for which the WHERE clause does not + ** contain a "col=X" term are subject to a NOT NULL constraint. + */ + for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){ + if( pIdx->onError==OE_None ) continue; + for(i=0; inColumn; i++){ + int iCol = pIdx->aiColumn[i]; + if( 0==findTerm(pWC, iBase, iCol, ~(Bitmask)0, WO_EQ, pIdx) ){ + int iIdxCol = findIndexCol(pParse, pDistinct, iBase, pIdx, i); + if( iIdxCol<0 || pTab->aCol[pIdx->aiColumn[i]].notNull==0 ){ + break; + } + } + } + if( i==pIdx->nColumn ){ + /* This index implies that the DISTINCT qualifier is redundant. */ + return 1; + } + } + + return 0; +} + +/* +** This routine decides if pIdx can be used to satisfy the ORDER BY +** clause. If it can, it returns 1. If pIdx cannot satisfy the +** ORDER BY clause, this routine returns 0. +** +** pOrderBy is an ORDER BY clause from a SELECT statement. pTab is the +** left-most table in the FROM clause of that same SELECT statement and +** the table has a cursor number of "base". pIdx is an index on pTab. +** +** nEqCol is the number of columns of pIdx that are used as equality +** constraints. Any of these columns may be missing from the ORDER BY +** clause and the match can still be a success. +** +** All terms of the ORDER BY that match against the index must be either +** ASC or DESC. (Terms of the ORDER BY clause past the end of a UNIQUE +** index do not need to satisfy this constraint.) The *pbRev value is +** set to 1 if the ORDER BY clause is all DESC and it is set to 0 if +** the ORDER BY clause is all ASC. +*/ +static int isSortingIndex( + Parse *pParse, /* Parsing context */ + WhereMaskSet *pMaskSet, /* Mapping from table cursor numbers to bitmaps */ + Index *pIdx, /* The index we are testing */ + int base, /* Cursor number for the table to be sorted */ + ExprList *pOrderBy, /* The ORDER BY clause */ + int nEqCol, /* Number of index columns with == constraints */ + int wsFlags, /* Index usages flags */ + int *pbRev /* Set to 1 if ORDER BY is DESC */ +){ + int i, j; /* Loop counters */ + int sortOrder = 0; /* XOR of index and ORDER BY sort direction */ + int nTerm; /* Number of ORDER BY terms */ + struct ExprList_item *pTerm; /* A term of the ORDER BY clause */ + sqlite3 *db = pParse->db; + + if( !pOrderBy ) return 0; + if( wsFlags & WHERE_COLUMN_IN ) return 0; + if( pIdx->bUnordered ) return 0; + + nTerm = pOrderBy->nExpr; + assert( nTerm>0 ); + + /* Argument pIdx must either point to a 'real' named index structure, + ** or an index structure allocated on the stack by bestBtreeIndex() to + ** represent the rowid index that is part of every table. */ + assert( pIdx->zName || (pIdx->nColumn==1 && pIdx->aiColumn[0]==-1) ); + + /* Match terms of the ORDER BY clause against columns of + ** the index. + ** + ** Note that indices have pIdx->nColumn regular columns plus + ** one additional column containing the rowid. The rowid column + ** of the index is also allowed to match against the ORDER BY + ** clause. + */ + for(i=j=0, pTerm=pOrderBy->a; jnColumn; i++){ + Expr *pExpr; /* The expression of the ORDER BY pTerm */ + CollSeq *pColl; /* The collating sequence of pExpr */ + int termSortOrder; /* Sort order for this term */ + int iColumn; /* The i-th column of the index. -1 for rowid */ + int iSortOrder; /* 1 for DESC, 0 for ASC on the i-th index term */ + const char *zColl; /* Name of the collating sequence for i-th index term */ + + pExpr = pTerm->pExpr; + if( pExpr->op!=TK_COLUMN || pExpr->iTable!=base ){ + /* Can not use an index sort on anything that is not a column in the + ** left-most table of the FROM clause */ + break; + } + pColl = sqlite3ExprCollSeq(pParse, pExpr); + if( !pColl ){ + pColl = db->pDfltColl; + } + if( pIdx->zName && inColumn ){ + iColumn = pIdx->aiColumn[i]; + if( iColumn==pIdx->pTable->iPKey ){ + iColumn = -1; + } + iSortOrder = pIdx->aSortOrder[i]; + zColl = pIdx->azColl[i]; + }else{ + iColumn = -1; + iSortOrder = 0; + zColl = pColl->zName; + } + if( pExpr->iColumn!=iColumn || sqlite3StrICmp(pColl->zName, zColl) ){ + /* Term j of the ORDER BY clause does not match column i of the index */ + if( inColumn ){ + /* Index column i is the rowid. All other terms match. */ + break; + }else{ + /* If an index column fails to match and is not constrained by == + ** then the index cannot satisfy the ORDER BY constraint. + */ + return 0; + } + } + assert( pIdx->aSortOrder!=0 || iColumn==-1 ); + assert( pTerm->sortOrder==0 || pTerm->sortOrder==1 ); + assert( iSortOrder==0 || iSortOrder==1 ); + termSortOrder = iSortOrder ^ pTerm->sortOrder; + if( i>nEqCol ){ + if( termSortOrder!=sortOrder ){ + /* Indices can only be used if all ORDER BY terms past the + ** equality constraints are all either DESC or ASC. */ + return 0; + } + }else{ + sortOrder = termSortOrder; + } + j++; + pTerm++; + if( iColumn<0 && !referencesOtherTables(pOrderBy, pMaskSet, j, base) ){ + /* If the indexed column is the primary key and everything matches + ** so far and none of the ORDER BY terms to the right reference other + ** tables in the join, then we are assured that the index can be used + ** to sort because the primary key is unique and so none of the other + ** columns will make any difference + */ + j = nTerm; + } + } + + *pbRev = sortOrder!=0; + if( j>=nTerm ){ + /* All terms of the ORDER BY clause are covered by this index so + ** this index can be used for sorting. */ + return 1; + } + if( pIdx->onError!=OE_None && i==pIdx->nColumn + && (wsFlags & WHERE_COLUMN_NULL)==0 + && !referencesOtherTables(pOrderBy, pMaskSet, j, base) + ){ + Column *aCol = pIdx->pTable->aCol; + + /* All terms of this index match some prefix of the ORDER BY clause, + ** the index is UNIQUE, and no terms on the tail of the ORDER BY + ** refer to other tables in a join. So, assuming that the index entries + ** visited contain no NULL values, then this index delivers rows in + ** the required order. + ** + ** It is not possible for any of the first nEqCol index fields to be + ** NULL (since the corresponding "=" operator in the WHERE clause would + ** not be true). So if all remaining index columns have NOT NULL + ** constaints attached to them, we can be confident that the visited + ** index entries are free of NULLs. */ + for(i=nEqCol; inColumn; i++){ + if( aCol[pIdx->aiColumn[i]].notNull==0 ) break; + } + return (i==pIdx->nColumn); + } + return 0; +} + +/* +** Prepare a crude estimate of the logarithm of the input value. +** The results need not be exact. This is only used for estimating +** the total cost of performing operations with O(logN) or O(NlogN) +** complexity. Because N is just a guess, it is no great tragedy if +** logN is a little off. +*/ +static double estLog(double N){ + double logN = 1; + double x = 10; + while( N>x ){ + logN += 1; + x *= 10; + } + return logN; +} + +/* +** Two routines for printing the content of an sqlite3_index_info +** structure. Used for testing and debugging only. If neither +** SQLITE_TEST or SQLITE_DEBUG are defined, then these routines +** are no-ops. +*/ +#if !defined(SQLITE_OMIT_VIRTUALTABLE) && defined(SQLITE_DEBUG) +static void TRACE_IDX_INPUTS(sqlite3_index_info *p){ + int i; + if( !sqlite3WhereTrace ) return; + for(i=0; inConstraint; i++){ + sqlite3DebugPrintf(" constraint[%d]: col=%d termid=%d op=%d usabled=%d\n", + i, + p->aConstraint[i].iColumn, + p->aConstraint[i].iTermOffset, + p->aConstraint[i].op, + p->aConstraint[i].usable); + } + for(i=0; inOrderBy; i++){ + sqlite3DebugPrintf(" orderby[%d]: col=%d desc=%d\n", + i, + p->aOrderBy[i].iColumn, + p->aOrderBy[i].desc); + } +} +static void TRACE_IDX_OUTPUTS(sqlite3_index_info *p){ + int i; + if( !sqlite3WhereTrace ) return; + for(i=0; inConstraint; i++){ + sqlite3DebugPrintf(" usage[%d]: argvIdx=%d omit=%d\n", + i, + p->aConstraintUsage[i].argvIndex, + p->aConstraintUsage[i].omit); + } + sqlite3DebugPrintf(" idxNum=%d\n", p->idxNum); + sqlite3DebugPrintf(" idxStr=%s\n", p->idxStr); + sqlite3DebugPrintf(" orderByConsumed=%d\n", p->orderByConsumed); + sqlite3DebugPrintf(" estimatedCost=%g\n", p->estimatedCost); +} +#else +#define TRACE_IDX_INPUTS(A) +#define TRACE_IDX_OUTPUTS(A) +#endif + +/* +** Required because bestIndex() is called by bestOrClauseIndex() +*/ +static void bestIndex( + Parse*, WhereClause*, struct SrcList_item*, + Bitmask, Bitmask, ExprList*, WhereCost*); + +/* +** This routine attempts to find an scanning strategy that can be used +** to optimize an 'OR' expression that is part of a WHERE clause. +** +** The table associated with FROM clause term pSrc may be either a +** regular B-Tree table or a virtual table. +*/ +static void bestOrClauseIndex( + Parse *pParse, /* The parsing context */ + WhereClause *pWC, /* The WHERE clause */ + struct SrcList_item *pSrc, /* The FROM clause term to search */ + Bitmask notReady, /* Mask of cursors not available for indexing */ + Bitmask notValid, /* Cursors not available for any purpose */ + ExprList *pOrderBy, /* The ORDER BY clause */ + WhereCost *pCost /* Lowest cost query plan */ +){ +#ifndef SQLITE_OMIT_OR_OPTIMIZATION + const int iCur = pSrc->iCursor; /* The cursor of the table to be accessed */ + const Bitmask maskSrc = getMask(pWC->pMaskSet, iCur); /* Bitmask for pSrc */ + WhereTerm * const pWCEnd = &pWC->a[pWC->nTerm]; /* End of pWC->a[] */ + WhereTerm *pTerm; /* A single term of the WHERE clause */ + + /* The OR-clause optimization is disallowed if the INDEXED BY or + ** NOT INDEXED clauses are used or if the WHERE_AND_ONLY bit is set. */ + if( pSrc->notIndexed || pSrc->pIndex!=0 ){ + return; + } + if( pWC->wctrlFlags & WHERE_AND_ONLY ){ + return; + } + + /* Search the WHERE clause terms for a usable WO_OR term. */ + for(pTerm=pWC->a; pTermeOperator==WO_OR + && ((pTerm->prereqAll & ~maskSrc) & notReady)==0 + && (pTerm->u.pOrInfo->indexable & maskSrc)!=0 + ){ + WhereClause * const pOrWC = &pTerm->u.pOrInfo->wc; + WhereTerm * const pOrWCEnd = &pOrWC->a[pOrWC->nTerm]; + WhereTerm *pOrTerm; + int flags = WHERE_MULTI_OR; + double rTotal = 0; + double nRow = 0; + Bitmask used = 0; + + for(pOrTerm=pOrWC->a; pOrTerma), (pTerm - pWC->a) + )); + if( pOrTerm->eOperator==WO_AND ){ + WhereClause *pAndWC = &pOrTerm->u.pAndInfo->wc; + bestIndex(pParse, pAndWC, pSrc, notReady, notValid, 0, &sTermCost); + }else if( pOrTerm->leftCursor==iCur ){ + WhereClause tempWC; + tempWC.pParse = pWC->pParse; + tempWC.pMaskSet = pWC->pMaskSet; + tempWC.pOuter = pWC; + tempWC.op = TK_AND; + tempWC.a = pOrTerm; + tempWC.wctrlFlags = 0; + tempWC.nTerm = 1; + bestIndex(pParse, &tempWC, pSrc, notReady, notValid, 0, &sTermCost); + }else{ + continue; + } + rTotal += sTermCost.rCost; + nRow += sTermCost.plan.nRow; + used |= sTermCost.used; + if( rTotal>=pCost->rCost ) break; + } + + /* If there is an ORDER BY clause, increase the scan cost to account + ** for the cost of the sort. */ + if( pOrderBy!=0 ){ + WHERETRACE(("... sorting increases OR cost %.9g to %.9g\n", + rTotal, rTotal+nRow*estLog(nRow))); + rTotal += nRow*estLog(nRow); + } + + /* If the cost of scanning using this OR term for optimization is + ** less than the current cost stored in pCost, replace the contents + ** of pCost. */ + WHERETRACE(("... multi-index OR cost=%.9g nrow=%.9g\n", rTotal, nRow)); + if( rTotalrCost ){ + pCost->rCost = rTotal; + pCost->used = used; + pCost->plan.nRow = nRow; + pCost->plan.wsFlags = flags; + pCost->plan.u.pTerm = pTerm; + } + } + } +#endif /* SQLITE_OMIT_OR_OPTIMIZATION */ +} + +#ifndef SQLITE_OMIT_AUTOMATIC_INDEX +/* +** Return TRUE if the WHERE clause term pTerm is of a form where it +** could be used with an index to access pSrc, assuming an appropriate +** index existed. +*/ +static int termCanDriveIndex( + WhereTerm *pTerm, /* WHERE clause term to check */ + struct SrcList_item *pSrc, /* Table we are trying to access */ + Bitmask notReady /* Tables in outer loops of the join */ +){ + char aff; + if( pTerm->leftCursor!=pSrc->iCursor ) return 0; + if( pTerm->eOperator!=WO_EQ ) return 0; + if( (pTerm->prereqRight & notReady)!=0 ) return 0; + aff = pSrc->pTab->aCol[pTerm->u.leftColumn].affinity; + if( !sqlite3IndexAffinityOk(pTerm->pExpr, aff) ) return 0; + return 1; +} +#endif + +#ifndef SQLITE_OMIT_AUTOMATIC_INDEX +/* +** If the query plan for pSrc specified in pCost is a full table scan +** and indexing is allows (if there is no NOT INDEXED clause) and it +** possible to construct a transient index that would perform better +** than a full table scan even when the cost of constructing the index +** is taken into account, then alter the query plan to use the +** transient index. +*/ +static void bestAutomaticIndex( + Parse *pParse, /* The parsing context */ + WhereClause *pWC, /* The WHERE clause */ + struct SrcList_item *pSrc, /* The FROM clause term to search */ + Bitmask notReady, /* Mask of cursors that are not available */ + WhereCost *pCost /* Lowest cost query plan */ +){ + double nTableRow; /* Rows in the input table */ + double logN; /* log(nTableRow) */ + double costTempIdx; /* per-query cost of the transient index */ + WhereTerm *pTerm; /* A single term of the WHERE clause */ + WhereTerm *pWCEnd; /* End of pWC->a[] */ + Table *pTable; /* Table tht might be indexed */ + + if( pParse->nQueryLoop<=(double)1 ){ + /* There is no point in building an automatic index for a single scan */ + return; + } + if( (pParse->db->flags & SQLITE_AutoIndex)==0 ){ + /* Automatic indices are disabled at run-time */ + return; + } + if( (pCost->plan.wsFlags & WHERE_NOT_FULLSCAN)!=0 ){ + /* We already have some kind of index in use for this query. */ + return; + } + if( pSrc->notIndexed ){ + /* The NOT INDEXED clause appears in the SQL. */ + return; + } + if( pSrc->isCorrelated ){ + /* The source is a correlated sub-query. No point in indexing it. */ + return; + } + + assert( pParse->nQueryLoop >= (double)1 ); + pTable = pSrc->pTab; + nTableRow = pTable->nRowEst; + logN = estLog(nTableRow); + costTempIdx = 2*logN*(nTableRow/pParse->nQueryLoop + 1); + if( costTempIdx>=pCost->rCost ){ + /* The cost of creating the transient table would be greater than + ** doing the full table scan */ + return; + } + + /* Search for any equality comparison term */ + pWCEnd = &pWC->a[pWC->nTerm]; + for(pTerm=pWC->a; pTermrCost, costTempIdx)); + pCost->rCost = costTempIdx; + pCost->plan.nRow = logN + 1; + pCost->plan.wsFlags = WHERE_TEMP_INDEX; + pCost->used = pTerm->prereqRight; + break; + } + } +} +#else +# define bestAutomaticIndex(A,B,C,D,E) /* no-op */ +#endif /* SQLITE_OMIT_AUTOMATIC_INDEX */ + + +#ifndef SQLITE_OMIT_AUTOMATIC_INDEX +/* +** Generate code to construct the Index object for an automatic index +** and to set up the WhereLevel object pLevel so that the code generator +** makes use of the automatic index. +*/ +static void constructAutomaticIndex( + Parse *pParse, /* The parsing context */ + WhereClause *pWC, /* The WHERE clause */ + struct SrcList_item *pSrc, /* The FROM clause term to get the next index */ + Bitmask notReady, /* Mask of cursors that are not available */ + WhereLevel *pLevel /* Write new index here */ +){ + int nColumn; /* Number of columns in the constructed index */ + WhereTerm *pTerm; /* A single term of the WHERE clause */ + WhereTerm *pWCEnd; /* End of pWC->a[] */ + int nByte; /* Byte of memory needed for pIdx */ + Index *pIdx; /* Object describing the transient index */ + Vdbe *v; /* Prepared statement under construction */ + int addrInit; /* Address of the initialization bypass jump */ + Table *pTable; /* The table being indexed */ + KeyInfo *pKeyinfo; /* Key information for the index */ + int addrTop; /* Top of the index fill loop */ + int regRecord; /* Register holding an index record */ + int n; /* Column counter */ + int i; /* Loop counter */ + int mxBitCol; /* Maximum column in pSrc->colUsed */ + CollSeq *pColl; /* Collating sequence to on a column */ + Bitmask idxCols; /* Bitmap of columns used for indexing */ + Bitmask extraCols; /* Bitmap of additional columns */ + + /* Generate code to skip over the creation and initialization of the + ** transient index on 2nd and subsequent iterations of the loop. */ + v = pParse->pVdbe; + assert( v!=0 ); + addrInit = sqlite3CodeOnce(pParse); + + /* Count the number of columns that will be added to the index + ** and used to match WHERE clause constraints */ + nColumn = 0; + pTable = pSrc->pTab; + pWCEnd = &pWC->a[pWC->nTerm]; + idxCols = 0; + for(pTerm=pWC->a; pTermu.leftColumn; + Bitmask cMask = iCol>=BMS ? ((Bitmask)1)<<(BMS-1) : ((Bitmask)1)<0 ); + pLevel->plan.nEq = nColumn; + + /* Count the number of additional columns needed to create a + ** covering index. A "covering index" is an index that contains all + ** columns that are needed by the query. With a covering index, the + ** original table never needs to be accessed. Automatic indices must + ** be a covering index because the index will not be updated if the + ** original table changes and the index and table cannot both be used + ** if they go out of sync. + */ + extraCols = pSrc->colUsed & (~idxCols | (((Bitmask)1)<<(BMS-1))); + mxBitCol = (pTable->nCol >= BMS-1) ? BMS-1 : pTable->nCol; + testcase( pTable->nCol==BMS-1 ); + testcase( pTable->nCol==BMS-2 ); + for(i=0; icolUsed & (((Bitmask)1)<<(BMS-1)) ){ + nColumn += pTable->nCol - BMS + 1; + } + pLevel->plan.wsFlags |= WHERE_COLUMN_EQ | WHERE_IDX_ONLY | WO_EQ; + + /* Construct the Index object to describe this index */ + nByte = sizeof(Index); + nByte += nColumn*sizeof(int); /* Index.aiColumn */ + nByte += nColumn*sizeof(char*); /* Index.azColl */ + nByte += nColumn; /* Index.aSortOrder */ + pIdx = sqlite3DbMallocZero(pParse->db, nByte); + if( pIdx==0 ) return; + pLevel->plan.u.pIdx = pIdx; + pIdx->azColl = (char**)&pIdx[1]; + pIdx->aiColumn = (int*)&pIdx->azColl[nColumn]; + pIdx->aSortOrder = (u8*)&pIdx->aiColumn[nColumn]; + pIdx->zName = "auto-index"; + pIdx->nColumn = nColumn; + pIdx->pTable = pTable; + n = 0; + idxCols = 0; + for(pTerm=pWC->a; pTermu.leftColumn; + Bitmask cMask = iCol>=BMS ? ((Bitmask)1)<<(BMS-1) : ((Bitmask)1)<pExpr; + idxCols |= cMask; + pIdx->aiColumn[n] = pTerm->u.leftColumn; + pColl = sqlite3BinaryCompareCollSeq(pParse, pX->pLeft, pX->pRight); + pIdx->azColl[n] = ALWAYS(pColl) ? pColl->zName : "BINARY"; + n++; + } + } + } + assert( (u32)n==pLevel->plan.nEq ); + + /* Add additional columns needed to make the automatic index into + ** a covering index */ + for(i=0; iaiColumn[n] = i; + pIdx->azColl[n] = "BINARY"; + n++; + } + } + if( pSrc->colUsed & (((Bitmask)1)<<(BMS-1)) ){ + for(i=BMS-1; inCol; i++){ + pIdx->aiColumn[n] = i; + pIdx->azColl[n] = "BINARY"; + n++; + } + } + assert( n==nColumn ); + + /* Create the automatic index */ + pKeyinfo = sqlite3IndexKeyinfo(pParse, pIdx); + assert( pLevel->iIdxCur>=0 ); + sqlite3VdbeAddOp4(v, OP_OpenAutoindex, pLevel->iIdxCur, nColumn+1, 0, + (char*)pKeyinfo, P4_KEYINFO_HANDOFF); + VdbeComment((v, "for %s", pTable->zName)); + + /* Fill the automatic index with content */ + addrTop = sqlite3VdbeAddOp1(v, OP_Rewind, pLevel->iTabCur); + regRecord = sqlite3GetTempReg(pParse); + sqlite3GenerateIndexKey(pParse, pIdx, pLevel->iTabCur, regRecord, 1); + sqlite3VdbeAddOp2(v, OP_IdxInsert, pLevel->iIdxCur, regRecord); + sqlite3VdbeChangeP5(v, OPFLAG_USESEEKRESULT); + sqlite3VdbeAddOp2(v, OP_Next, pLevel->iTabCur, addrTop+1); + sqlite3VdbeChangeP5(v, SQLITE_STMTSTATUS_AUTOINDEX); + sqlite3VdbeJumpHere(v, addrTop); + sqlite3ReleaseTempReg(pParse, regRecord); + + /* Jump here when skipping the initialization */ + sqlite3VdbeJumpHere(v, addrInit); +} +#endif /* SQLITE_OMIT_AUTOMATIC_INDEX */ + +#ifndef SQLITE_OMIT_VIRTUALTABLE +/* +** Allocate and populate an sqlite3_index_info structure. It is the +** responsibility of the caller to eventually release the structure +** by passing the pointer returned by this function to sqlite3_free(). +*/ +static sqlite3_index_info *allocateIndexInfo( + Parse *pParse, + WhereClause *pWC, + struct SrcList_item *pSrc, + ExprList *pOrderBy +){ + int i, j; + int nTerm; + struct sqlite3_index_constraint *pIdxCons; + struct sqlite3_index_orderby *pIdxOrderBy; + struct sqlite3_index_constraint_usage *pUsage; + WhereTerm *pTerm; + int nOrderBy; + sqlite3_index_info *pIdxInfo; + + WHERETRACE(("Recomputing index info for %s...\n", pSrc->pTab->zName)); + + /* Count the number of possible WHERE clause constraints referring + ** to this virtual table */ + for(i=nTerm=0, pTerm=pWC->a; inTerm; i++, pTerm++){ + if( pTerm->leftCursor != pSrc->iCursor ) continue; + assert( (pTerm->eOperator&(pTerm->eOperator-1))==0 ); + testcase( pTerm->eOperator==WO_IN ); + testcase( pTerm->eOperator==WO_ISNULL ); + if( pTerm->eOperator & (WO_IN|WO_ISNULL) ) continue; + if( pTerm->wtFlags & TERM_VNULL ) continue; + nTerm++; + } + + /* If the ORDER BY clause contains only columns in the current + ** virtual table then allocate space for the aOrderBy part of + ** the sqlite3_index_info structure. + */ + nOrderBy = 0; + if( pOrderBy ){ + for(i=0; inExpr; i++){ + Expr *pExpr = pOrderBy->a[i].pExpr; + if( pExpr->op!=TK_COLUMN || pExpr->iTable!=pSrc->iCursor ) break; + } + if( i==pOrderBy->nExpr ){ + nOrderBy = pOrderBy->nExpr; + } + } + + /* Allocate the sqlite3_index_info structure + */ + pIdxInfo = sqlite3DbMallocZero(pParse->db, sizeof(*pIdxInfo) + + (sizeof(*pIdxCons) + sizeof(*pUsage))*nTerm + + sizeof(*pIdxOrderBy)*nOrderBy ); + if( pIdxInfo==0 ){ + sqlite3ErrorMsg(pParse, "out of memory"); + /* (double)0 In case of SQLITE_OMIT_FLOATING_POINT... */ + return 0; + } + + /* Initialize the structure. The sqlite3_index_info structure contains + ** many fields that are declared "const" to prevent xBestIndex from + ** changing them. We have to do some funky casting in order to + ** initialize those fields. + */ + pIdxCons = (struct sqlite3_index_constraint*)&pIdxInfo[1]; + pIdxOrderBy = (struct sqlite3_index_orderby*)&pIdxCons[nTerm]; + pUsage = (struct sqlite3_index_constraint_usage*)&pIdxOrderBy[nOrderBy]; + *(int*)&pIdxInfo->nConstraint = nTerm; + *(int*)&pIdxInfo->nOrderBy = nOrderBy; + *(struct sqlite3_index_constraint**)&pIdxInfo->aConstraint = pIdxCons; + *(struct sqlite3_index_orderby**)&pIdxInfo->aOrderBy = pIdxOrderBy; + *(struct sqlite3_index_constraint_usage**)&pIdxInfo->aConstraintUsage = + pUsage; + + for(i=j=0, pTerm=pWC->a; inTerm; i++, pTerm++){ + if( pTerm->leftCursor != pSrc->iCursor ) continue; + assert( (pTerm->eOperator&(pTerm->eOperator-1))==0 ); + testcase( pTerm->eOperator==WO_IN ); + testcase( pTerm->eOperator==WO_ISNULL ); + if( pTerm->eOperator & (WO_IN|WO_ISNULL) ) continue; + if( pTerm->wtFlags & TERM_VNULL ) continue; + pIdxCons[j].iColumn = pTerm->u.leftColumn; + pIdxCons[j].iTermOffset = i; + pIdxCons[j].op = (u8)pTerm->eOperator; + /* The direct assignment in the previous line is possible only because + ** the WO_ and SQLITE_INDEX_CONSTRAINT_ codes are identical. The + ** following asserts verify this fact. */ + assert( WO_EQ==SQLITE_INDEX_CONSTRAINT_EQ ); + assert( WO_LT==SQLITE_INDEX_CONSTRAINT_LT ); + assert( WO_LE==SQLITE_INDEX_CONSTRAINT_LE ); + assert( WO_GT==SQLITE_INDEX_CONSTRAINT_GT ); + assert( WO_GE==SQLITE_INDEX_CONSTRAINT_GE ); + assert( WO_MATCH==SQLITE_INDEX_CONSTRAINT_MATCH ); + assert( pTerm->eOperator & (WO_EQ|WO_LT|WO_LE|WO_GT|WO_GE|WO_MATCH) ); + j++; + } + for(i=0; ia[i].pExpr; + pIdxOrderBy[i].iColumn = pExpr->iColumn; + pIdxOrderBy[i].desc = pOrderBy->a[i].sortOrder; + } + + return pIdxInfo; +} + +/* +** The table object reference passed as the second argument to this function +** must represent a virtual table. This function invokes the xBestIndex() +** method of the virtual table with the sqlite3_index_info pointer passed +** as the argument. +** +** If an error occurs, pParse is populated with an error message and a +** non-zero value is returned. Otherwise, 0 is returned and the output +** part of the sqlite3_index_info structure is left populated. +** +** Whether or not an error is returned, it is the responsibility of the +** caller to eventually free p->idxStr if p->needToFreeIdxStr indicates +** that this is required. +*/ +static int vtabBestIndex(Parse *pParse, Table *pTab, sqlite3_index_info *p){ + sqlite3_vtab *pVtab = sqlite3GetVTable(pParse->db, pTab)->pVtab; + int i; + int rc; + + WHERETRACE(("xBestIndex for %s\n", pTab->zName)); + TRACE_IDX_INPUTS(p); + rc = pVtab->pModule->xBestIndex(pVtab, p); + TRACE_IDX_OUTPUTS(p); + + if( rc!=SQLITE_OK ){ + if( rc==SQLITE_NOMEM ){ + pParse->db->mallocFailed = 1; + }else if( !pVtab->zErrMsg ){ + sqlite3ErrorMsg(pParse, "%s", sqlite3ErrStr(rc)); + }else{ + sqlite3ErrorMsg(pParse, "%s", pVtab->zErrMsg); + } + } + sqlite3_free(pVtab->zErrMsg); + pVtab->zErrMsg = 0; + + for(i=0; inConstraint; i++){ + if( !p->aConstraint[i].usable && p->aConstraintUsage[i].argvIndex>0 ){ + sqlite3ErrorMsg(pParse, + "table %s: xBestIndex returned an invalid plan", pTab->zName); + } + } + + return pParse->nErr; +} + + +/* +** Compute the best index for a virtual table. +** +** The best index is computed by the xBestIndex method of the virtual +** table module. This routine is really just a wrapper that sets up +** the sqlite3_index_info structure that is used to communicate with +** xBestIndex. +** +** In a join, this routine might be called multiple times for the +** same virtual table. The sqlite3_index_info structure is created +** and initialized on the first invocation and reused on all subsequent +** invocations. The sqlite3_index_info structure is also used when +** code is generated to access the virtual table. The whereInfoDelete() +** routine takes care of freeing the sqlite3_index_info structure after +** everybody has finished with it. +*/ +static void bestVirtualIndex( + Parse *pParse, /* The parsing context */ + WhereClause *pWC, /* The WHERE clause */ + struct SrcList_item *pSrc, /* The FROM clause term to search */ + Bitmask notReady, /* Mask of cursors not available for index */ + Bitmask notValid, /* Cursors not valid for any purpose */ + ExprList *pOrderBy, /* The order by clause */ + WhereCost *pCost, /* Lowest cost query plan */ + sqlite3_index_info **ppIdxInfo /* Index information passed to xBestIndex */ +){ + Table *pTab = pSrc->pTab; + sqlite3_index_info *pIdxInfo; + struct sqlite3_index_constraint *pIdxCons; + struct sqlite3_index_constraint_usage *pUsage; + WhereTerm *pTerm; + int i, j; + int nOrderBy; + double rCost; + + /* Make sure wsFlags is initialized to some sane value. Otherwise, if the + ** malloc in allocateIndexInfo() fails and this function returns leaving + ** wsFlags in an uninitialized state, the caller may behave unpredictably. + */ + memset(pCost, 0, sizeof(*pCost)); + pCost->plan.wsFlags = WHERE_VIRTUALTABLE; + + /* If the sqlite3_index_info structure has not been previously + ** allocated and initialized, then allocate and initialize it now. + */ + pIdxInfo = *ppIdxInfo; + if( pIdxInfo==0 ){ + *ppIdxInfo = pIdxInfo = allocateIndexInfo(pParse, pWC, pSrc, pOrderBy); + } + if( pIdxInfo==0 ){ + return; + } + + /* At this point, the sqlite3_index_info structure that pIdxInfo points + ** to will have been initialized, either during the current invocation or + ** during some prior invocation. Now we just have to customize the + ** details of pIdxInfo for the current invocation and pass it to + ** xBestIndex. + */ + + /* The module name must be defined. Also, by this point there must + ** be a pointer to an sqlite3_vtab structure. Otherwise + ** sqlite3ViewGetColumnNames() would have picked up the error. + */ + assert( pTab->azModuleArg && pTab->azModuleArg[0] ); + assert( sqlite3GetVTable(pParse->db, pTab) ); + + /* Set the aConstraint[].usable fields and initialize all + ** output variables to zero. + ** + ** aConstraint[].usable is true for constraints where the right-hand + ** side contains only references to tables to the left of the current + ** table. In other words, if the constraint is of the form: + ** + ** column = expr + ** + ** and we are evaluating a join, then the constraint on column is + ** only valid if all tables referenced in expr occur to the left + ** of the table containing column. + ** + ** The aConstraints[] array contains entries for all constraints + ** on the current table. That way we only have to compute it once + ** even though we might try to pick the best index multiple times. + ** For each attempt at picking an index, the order of tables in the + ** join might be different so we have to recompute the usable flag + ** each time. + */ + pIdxCons = *(struct sqlite3_index_constraint**)&pIdxInfo->aConstraint; + pUsage = pIdxInfo->aConstraintUsage; + for(i=0; inConstraint; i++, pIdxCons++){ + j = pIdxCons->iTermOffset; + pTerm = &pWC->a[j]; + pIdxCons->usable = (pTerm->prereqRight¬Ready) ? 0 : 1; + } + memset(pUsage, 0, sizeof(pUsage[0])*pIdxInfo->nConstraint); + if( pIdxInfo->needToFreeIdxStr ){ + sqlite3_free(pIdxInfo->idxStr); + } + pIdxInfo->idxStr = 0; + pIdxInfo->idxNum = 0; + pIdxInfo->needToFreeIdxStr = 0; + pIdxInfo->orderByConsumed = 0; + /* ((double)2) In case of SQLITE_OMIT_FLOATING_POINT... */ + pIdxInfo->estimatedCost = SQLITE_BIG_DBL / ((double)2); + nOrderBy = pIdxInfo->nOrderBy; + if( !pOrderBy ){ + pIdxInfo->nOrderBy = 0; + } + + if( vtabBestIndex(pParse, pTab, pIdxInfo) ){ + return; + } + + pIdxCons = *(struct sqlite3_index_constraint**)&pIdxInfo->aConstraint; + for(i=0; inConstraint; i++){ + if( pUsage[i].argvIndex>0 ){ + pCost->used |= pWC->a[pIdxCons[i].iTermOffset].prereqRight; + } + } + + /* If there is an ORDER BY clause, and the selected virtual table index + ** does not satisfy it, increase the cost of the scan accordingly. This + ** matches the processing for non-virtual tables in bestBtreeIndex(). + */ + rCost = pIdxInfo->estimatedCost; + if( pOrderBy && pIdxInfo->orderByConsumed==0 ){ + rCost += estLog(rCost)*rCost; + } + + /* The cost is not allowed to be larger than SQLITE_BIG_DBL (the + ** inital value of lowestCost in this loop. If it is, then the + ** (costrCost = (SQLITE_BIG_DBL/((double)2)); + }else{ + pCost->rCost = rCost; + } + pCost->plan.u.pVtabIdx = pIdxInfo; + if( pIdxInfo->orderByConsumed ){ + pCost->plan.wsFlags |= WHERE_ORDERBY; + } + pCost->plan.nEq = 0; + pIdxInfo->nOrderBy = nOrderBy; + + /* Try to find a more efficient access pattern by using multiple indexes + ** to optimize an OR expression within the WHERE clause. + */ + bestOrClauseIndex(pParse, pWC, pSrc, notReady, notValid, pOrderBy, pCost); +} +#endif /* SQLITE_OMIT_VIRTUALTABLE */ + +#ifdef SQLITE_ENABLE_STAT3 +/* +** Estimate the location of a particular key among all keys in an +** index. Store the results in aStat as follows: +** +** aStat[0] Est. number of rows less than pVal +** aStat[1] Est. number of rows equal to pVal +** +** Return SQLITE_OK on success. +*/ +static int whereKeyStats( + Parse *pParse, /* Database connection */ + Index *pIdx, /* Index to consider domain of */ + sqlite3_value *pVal, /* Value to consider */ + int roundUp, /* Round up if true. Round down if false */ + tRowcnt *aStat /* OUT: stats written here */ +){ + tRowcnt n; + IndexSample *aSample; + int i, eType; + int isEq = 0; + i64 v; + double r, rS; + + assert( roundUp==0 || roundUp==1 ); + assert( pIdx->nSample>0 ); + if( pVal==0 ) return SQLITE_ERROR; + n = pIdx->aiRowEst[0]; + aSample = pIdx->aSample; + eType = sqlite3_value_type(pVal); + + if( eType==SQLITE_INTEGER ){ + v = sqlite3_value_int64(pVal); + r = (i64)v; + for(i=0; inSample; i++){ + if( aSample[i].eType==SQLITE_NULL ) continue; + if( aSample[i].eType>=SQLITE_TEXT ) break; + if( aSample[i].eType==SQLITE_INTEGER ){ + if( aSample[i].u.i>=v ){ + isEq = aSample[i].u.i==v; + break; + } + }else{ + assert( aSample[i].eType==SQLITE_FLOAT ); + if( aSample[i].u.r>=r ){ + isEq = aSample[i].u.r==r; + break; + } + } + } + }else if( eType==SQLITE_FLOAT ){ + r = sqlite3_value_double(pVal); + for(i=0; inSample; i++){ + if( aSample[i].eType==SQLITE_NULL ) continue; + if( aSample[i].eType>=SQLITE_TEXT ) break; + if( aSample[i].eType==SQLITE_FLOAT ){ + rS = aSample[i].u.r; + }else{ + rS = aSample[i].u.i; + } + if( rS>=r ){ + isEq = rS==r; + break; + } + } + }else if( eType==SQLITE_NULL ){ + i = 0; + if( aSample[0].eType==SQLITE_NULL ) isEq = 1; + }else{ + assert( eType==SQLITE_TEXT || eType==SQLITE_BLOB ); + for(i=0; inSample; i++){ + if( aSample[i].eType==SQLITE_TEXT || aSample[i].eType==SQLITE_BLOB ){ + break; + } + } + if( inSample ){ + sqlite3 *db = pParse->db; + CollSeq *pColl; + const u8 *z; + if( eType==SQLITE_BLOB ){ + z = (const u8 *)sqlite3_value_blob(pVal); + pColl = db->pDfltColl; + assert( pColl->enc==SQLITE_UTF8 ); + }else{ + pColl = sqlite3GetCollSeq(db, SQLITE_UTF8, 0, *pIdx->azColl); + if( pColl==0 ){ + sqlite3ErrorMsg(pParse, "no such collation sequence: %s", + *pIdx->azColl); + return SQLITE_ERROR; + } + z = (const u8 *)sqlite3ValueText(pVal, pColl->enc); + if( !z ){ + return SQLITE_NOMEM; + } + assert( z && pColl && pColl->xCmp ); + } + n = sqlite3ValueBytes(pVal, pColl->enc); + + for(; inSample; i++){ + int c; + int eSampletype = aSample[i].eType; + if( eSampletypeenc!=SQLITE_UTF8 ){ + int nSample; + char *zSample = sqlite3Utf8to16( + db, pColl->enc, aSample[i].u.z, aSample[i].nByte, &nSample + ); + if( !zSample ){ + assert( db->mallocFailed ); + return SQLITE_NOMEM; + } + c = pColl->xCmp(pColl->pUser, nSample, zSample, n, z); + sqlite3DbFree(db, zSample); + }else +#endif + { + c = pColl->xCmp(pColl->pUser, aSample[i].nByte, aSample[i].u.z, n, z); + } + if( c>=0 ){ + if( c==0 ) isEq = 1; + break; + } + } + } + } + + /* At this point, aSample[i] is the first sample that is greater than + ** or equal to pVal. Or if i==pIdx->nSample, then all samples are less + ** than pVal. If aSample[i]==pVal, then isEq==1. + */ + if( isEq ){ + assert( inSample ); + aStat[0] = aSample[i].nLt; + aStat[1] = aSample[i].nEq; + }else{ + tRowcnt iLower, iUpper, iGap; + if( i==0 ){ + iLower = 0; + iUpper = aSample[0].nLt; + }else{ + iUpper = i>=pIdx->nSample ? n : aSample[i].nLt; + iLower = aSample[i-1].nEq + aSample[i-1].nLt; + } + aStat[1] = pIdx->avgEq; + if( iLower>=iUpper ){ + iGap = 0; + }else{ + iGap = iUpper - iLower; + } + if( roundUp ){ + iGap = (iGap*2)/3; + }else{ + iGap = iGap/3; + } + aStat[0] = iLower + iGap; + } + return SQLITE_OK; +} +#endif /* SQLITE_ENABLE_STAT3 */ + +/* +** If expression pExpr represents a literal value, set *pp to point to +** an sqlite3_value structure containing the same value, with affinity +** aff applied to it, before returning. It is the responsibility of the +** caller to eventually release this structure by passing it to +** sqlite3ValueFree(). +** +** If the current parse is a recompile (sqlite3Reprepare()) and pExpr +** is an SQL variable that currently has a non-NULL value bound to it, +** create an sqlite3_value structure containing this value, again with +** affinity aff applied to it, instead. +** +** If neither of the above apply, set *pp to NULL. +** +** If an error occurs, return an error code. Otherwise, SQLITE_OK. +*/ +#ifdef SQLITE_ENABLE_STAT3 +static int valueFromExpr( + Parse *pParse, + Expr *pExpr, + u8 aff, + sqlite3_value **pp +){ + if( pExpr->op==TK_VARIABLE + || (pExpr->op==TK_REGISTER && pExpr->op2==TK_VARIABLE) + ){ + int iVar = pExpr->iColumn; + sqlite3VdbeSetVarmask(pParse->pVdbe, iVar); + *pp = sqlite3VdbeGetValue(pParse->pReprepare, iVar, aff); + return SQLITE_OK; + } + return sqlite3ValueFromExpr(pParse->db, pExpr, SQLITE_UTF8, aff, pp); +} +#endif + +/* +** This function is used to estimate the number of rows that will be visited +** by scanning an index for a range of values. The range may have an upper +** bound, a lower bound, or both. The WHERE clause terms that set the upper +** and lower bounds are represented by pLower and pUpper respectively. For +** example, assuming that index p is on t1(a): +** +** ... FROM t1 WHERE a > ? AND a < ? ... +** |_____| |_____| +** | | +** pLower pUpper +** +** If either of the upper or lower bound is not present, then NULL is passed in +** place of the corresponding WhereTerm. +** +** The nEq parameter is passed the index of the index column subject to the +** range constraint. Or, equivalently, the number of equality constraints +** optimized by the proposed index scan. For example, assuming index p is +** on t1(a, b), and the SQL query is: +** +** ... FROM t1 WHERE a = ? AND b > ? AND b < ? ... +** +** then nEq should be passed the value 1 (as the range restricted column, +** b, is the second left-most column of the index). Or, if the query is: +** +** ... FROM t1 WHERE a > ? AND a < ? ... +** +** then nEq should be passed 0. +** +** The returned value is an integer divisor to reduce the estimated +** search space. A return value of 1 means that range constraints are +** no help at all. A return value of 2 means range constraints are +** expected to reduce the search space by half. And so forth... +** +** In the absence of sqlite_stat3 ANALYZE data, each range inequality +** reduces the search space by a factor of 4. Hence a single constraint (x>?) +** results in a return of 4 and a range constraint (x>? AND xaCol[] of the range-compared column */ + WhereTerm *pLower, /* Lower bound on the range. ex: "x>123" Might be NULL */ + WhereTerm *pUpper, /* Upper bound on the range. ex: "x<455" Might be NULL */ + double *pRangeDiv /* OUT: Reduce search space by this divisor */ +){ + int rc = SQLITE_OK; + +#ifdef SQLITE_ENABLE_STAT3 + + if( nEq==0 && p->nSample ){ + sqlite3_value *pRangeVal; + tRowcnt iLower = 0; + tRowcnt iUpper = p->aiRowEst[0]; + tRowcnt a[2]; + u8 aff = p->pTable->aCol[p->aiColumn[0]].affinity; + + if( pLower ){ + Expr *pExpr = pLower->pExpr->pRight; + rc = valueFromExpr(pParse, pExpr, aff, &pRangeVal); + assert( pLower->eOperator==WO_GT || pLower->eOperator==WO_GE ); + if( rc==SQLITE_OK + && whereKeyStats(pParse, p, pRangeVal, 0, a)==SQLITE_OK + ){ + iLower = a[0]; + if( pLower->eOperator==WO_GT ) iLower += a[1]; + } + sqlite3ValueFree(pRangeVal); + } + if( rc==SQLITE_OK && pUpper ){ + Expr *pExpr = pUpper->pExpr->pRight; + rc = valueFromExpr(pParse, pExpr, aff, &pRangeVal); + assert( pUpper->eOperator==WO_LT || pUpper->eOperator==WO_LE ); + if( rc==SQLITE_OK + && whereKeyStats(pParse, p, pRangeVal, 1, a)==SQLITE_OK + ){ + iUpper = a[0]; + if( pUpper->eOperator==WO_LE ) iUpper += a[1]; + } + sqlite3ValueFree(pRangeVal); + } + if( rc==SQLITE_OK ){ + if( iUpper<=iLower ){ + *pRangeDiv = (double)p->aiRowEst[0]; + }else{ + *pRangeDiv = (double)p->aiRowEst[0]/(double)(iUpper - iLower); + } + WHERETRACE(("range scan regions: %u..%u div=%g\n", + (u32)iLower, (u32)iUpper, *pRangeDiv)); + return SQLITE_OK; + } + } +#else + UNUSED_PARAMETER(pParse); + UNUSED_PARAMETER(p); + UNUSED_PARAMETER(nEq); +#endif + assert( pLower || pUpper ); + *pRangeDiv = (double)1; + if( pLower && (pLower->wtFlags & TERM_VNULL)==0 ) *pRangeDiv *= (double)4; + if( pUpper ) *pRangeDiv *= (double)4; + return rc; +} + +#ifdef SQLITE_ENABLE_STAT3 +/* +** Estimate the number of rows that will be returned based on +** an equality constraint x=VALUE and where that VALUE occurs in +** the histogram data. This only works when x is the left-most +** column of an index and sqlite_stat3 histogram data is available +** for that index. When pExpr==NULL that means the constraint is +** "x IS NULL" instead of "x=VALUE". +** +** Write the estimated row count into *pnRow and return SQLITE_OK. +** If unable to make an estimate, leave *pnRow unchanged and return +** non-zero. +** +** This routine can fail if it is unable to load a collating sequence +** required for string comparison, or if unable to allocate memory +** for a UTF conversion required for comparison. The error is stored +** in the pParse structure. +*/ +static int whereEqualScanEst( + Parse *pParse, /* Parsing & code generating context */ + Index *p, /* The index whose left-most column is pTerm */ + Expr *pExpr, /* Expression for VALUE in the x=VALUE constraint */ + double *pnRow /* Write the revised row estimate here */ +){ + sqlite3_value *pRhs = 0; /* VALUE on right-hand side of pTerm */ + u8 aff; /* Column affinity */ + int rc; /* Subfunction return code */ + tRowcnt a[2]; /* Statistics */ + + assert( p->aSample!=0 ); + assert( p->nSample>0 ); + aff = p->pTable->aCol[p->aiColumn[0]].affinity; + if( pExpr ){ + rc = valueFromExpr(pParse, pExpr, aff, &pRhs); + if( rc ) goto whereEqualScanEst_cancel; + }else{ + pRhs = sqlite3ValueNew(pParse->db); + } + if( pRhs==0 ) return SQLITE_NOTFOUND; + rc = whereKeyStats(pParse, p, pRhs, 0, a); + if( rc==SQLITE_OK ){ + WHERETRACE(("equality scan regions: %d\n", (int)a[1])); + *pnRow = a[1]; + } +whereEqualScanEst_cancel: + sqlite3ValueFree(pRhs); + return rc; +} +#endif /* defined(SQLITE_ENABLE_STAT3) */ + +#ifdef SQLITE_ENABLE_STAT3 +/* +** Estimate the number of rows that will be returned based on +** an IN constraint where the right-hand side of the IN operator +** is a list of values. Example: +** +** WHERE x IN (1,2,3,4) +** +** Write the estimated row count into *pnRow and return SQLITE_OK. +** If unable to make an estimate, leave *pnRow unchanged and return +** non-zero. +** +** This routine can fail if it is unable to load a collating sequence +** required for string comparison, or if unable to allocate memory +** for a UTF conversion required for comparison. The error is stored +** in the pParse structure. +*/ +static int whereInScanEst( + Parse *pParse, /* Parsing & code generating context */ + Index *p, /* The index whose left-most column is pTerm */ + ExprList *pList, /* The value list on the RHS of "x IN (v1,v2,v3,...)" */ + double *pnRow /* Write the revised row estimate here */ +){ + int rc = SQLITE_OK; /* Subfunction return code */ + double nEst; /* Number of rows for a single term */ + double nRowEst = (double)0; /* New estimate of the number of rows */ + int i; /* Loop counter */ + + assert( p->aSample!=0 ); + for(i=0; rc==SQLITE_OK && inExpr; i++){ + nEst = p->aiRowEst[0]; + rc = whereEqualScanEst(pParse, p, pList->a[i].pExpr, &nEst); + nRowEst += nEst; + } + if( rc==SQLITE_OK ){ + if( nRowEst > p->aiRowEst[0] ) nRowEst = p->aiRowEst[0]; + *pnRow = nRowEst; + WHERETRACE(("IN row estimate: est=%g\n", nRowEst)); + } + return rc; +} +#endif /* defined(SQLITE_ENABLE_STAT3) */ + + +/* +** Find the best query plan for accessing a particular table. Write the +** best query plan and its cost into the WhereCost object supplied as the +** last parameter. +** +** The lowest cost plan wins. The cost is an estimate of the amount of +** CPU and disk I/O needed to process the requested result. +** Factors that influence cost include: +** +** * The estimated number of rows that will be retrieved. (The +** fewer the better.) +** +** * Whether or not sorting must occur. +** +** * Whether or not there must be separate lookups in the +** index and in the main table. +** +** If there was an INDEXED BY clause (pSrc->pIndex) attached to the table in +** the SQL statement, then this function only considers plans using the +** named index. If no such plan is found, then the returned cost is +** SQLITE_BIG_DBL. If a plan is found that uses the named index, +** then the cost is calculated in the usual way. +** +** If a NOT INDEXED clause (pSrc->notIndexed!=0) was attached to the table +** in the SELECT statement, then no indexes are considered. However, the +** selected plan may still take advantage of the built-in rowid primary key +** index. +*/ +static void bestBtreeIndex( + Parse *pParse, /* The parsing context */ + WhereClause *pWC, /* The WHERE clause */ + struct SrcList_item *pSrc, /* The FROM clause term to search */ + Bitmask notReady, /* Mask of cursors not available for indexing */ + Bitmask notValid, /* Cursors not available for any purpose */ + ExprList *pOrderBy, /* The ORDER BY clause */ + ExprList *pDistinct, /* The select-list if query is DISTINCT */ + WhereCost *pCost /* Lowest cost query plan */ +){ + int iCur = pSrc->iCursor; /* The cursor of the table to be accessed */ + Index *pProbe; /* An index we are evaluating */ + Index *pIdx; /* Copy of pProbe, or zero for IPK index */ + int eqTermMask; /* Current mask of valid equality operators */ + int idxEqTermMask; /* Index mask of valid equality operators */ + Index sPk; /* A fake index object for the primary key */ + tRowcnt aiRowEstPk[2]; /* The aiRowEst[] value for the sPk index */ + int aiColumnPk = -1; /* The aColumn[] value for the sPk index */ + int wsFlagMask; /* Allowed flags in pCost->plan.wsFlag */ + + /* Initialize the cost to a worst-case value */ + memset(pCost, 0, sizeof(*pCost)); + pCost->rCost = SQLITE_BIG_DBL; + + /* If the pSrc table is the right table of a LEFT JOIN then we may not + ** use an index to satisfy IS NULL constraints on that table. This is + ** because columns might end up being NULL if the table does not match - + ** a circumstance which the index cannot help us discover. Ticket #2177. + */ + if( pSrc->jointype & JT_LEFT ){ + idxEqTermMask = WO_EQ|WO_IN; + }else{ + idxEqTermMask = WO_EQ|WO_IN|WO_ISNULL; + } + + if( pSrc->pIndex ){ + /* An INDEXED BY clause specifies a particular index to use */ + pIdx = pProbe = pSrc->pIndex; + wsFlagMask = ~(WHERE_ROWID_EQ|WHERE_ROWID_RANGE); + eqTermMask = idxEqTermMask; + }else{ + /* There is no INDEXED BY clause. Create a fake Index object in local + ** variable sPk to represent the rowid primary key index. Make this + ** fake index the first in a chain of Index objects with all of the real + ** indices to follow */ + Index *pFirst; /* First of real indices on the table */ + memset(&sPk, 0, sizeof(Index)); + sPk.nColumn = 1; + sPk.aiColumn = &aiColumnPk; + sPk.aiRowEst = aiRowEstPk; + sPk.onError = OE_Replace; + sPk.pTable = pSrc->pTab; + aiRowEstPk[0] = pSrc->pTab->nRowEst; + aiRowEstPk[1] = 1; + pFirst = pSrc->pTab->pIndex; + if( pSrc->notIndexed==0 ){ + /* The real indices of the table are only considered if the + ** NOT INDEXED qualifier is omitted from the FROM clause */ + sPk.pNext = pFirst; + } + pProbe = &sPk; + wsFlagMask = ~( + WHERE_COLUMN_IN|WHERE_COLUMN_EQ|WHERE_COLUMN_NULL|WHERE_COLUMN_RANGE + ); + eqTermMask = WO_EQ|WO_IN; + pIdx = 0; + } + + /* Loop over all indices looking for the best one to use + */ + for(; pProbe; pIdx=pProbe=pProbe->pNext){ + const tRowcnt * const aiRowEst = pProbe->aiRowEst; + double cost; /* Cost of using pProbe */ + double nRow; /* Estimated number of rows in result set */ + double log10N = (double)1; /* base-10 logarithm of nRow (inexact) */ + int rev; /* True to scan in reverse order */ + int wsFlags = 0; + Bitmask used = 0; + + /* The following variables are populated based on the properties of + ** index being evaluated. They are then used to determine the expected + ** cost and number of rows returned. + ** + ** nEq: + ** Number of equality terms that can be implemented using the index. + ** In other words, the number of initial fields in the index that + ** are used in == or IN or NOT NULL constraints of the WHERE clause. + ** + ** nInMul: + ** The "in-multiplier". This is an estimate of how many seek operations + ** SQLite must perform on the index in question. For example, if the + ** WHERE clause is: + ** + ** WHERE a IN (1, 2, 3) AND b IN (4, 5, 6) + ** + ** SQLite must perform 9 lookups on an index on (a, b), so nInMul is + ** set to 9. Given the same schema and either of the following WHERE + ** clauses: + ** + ** WHERE a = 1 + ** WHERE a >= 2 + ** + ** nInMul is set to 1. + ** + ** If there exists a WHERE term of the form "x IN (SELECT ...)", then + ** the sub-select is assumed to return 25 rows for the purposes of + ** determining nInMul. + ** + ** bInEst: + ** Set to true if there was at least one "x IN (SELECT ...)" term used + ** in determining the value of nInMul. Note that the RHS of the + ** IN operator must be a SELECT, not a value list, for this variable + ** to be true. + ** + ** rangeDiv: + ** An estimate of a divisor by which to reduce the search space due + ** to inequality constraints. In the absence of sqlite_stat3 ANALYZE + ** data, a single inequality reduces the search space to 1/4rd its + ** original size (rangeDiv==4). Two inequalities reduce the search + ** space to 1/16th of its original size (rangeDiv==16). + ** + ** bSort: + ** Boolean. True if there is an ORDER BY clause that will require an + ** external sort (i.e. scanning the index being evaluated will not + ** correctly order records). + ** + ** bLookup: + ** Boolean. True if a table lookup is required for each index entry + ** visited. In other words, true if this is not a covering index. + ** This is always false for the rowid primary key index of a table. + ** For other indexes, it is true unless all the columns of the table + ** used by the SELECT statement are present in the index (such an + ** index is sometimes described as a covering index). + ** For example, given the index on (a, b), the second of the following + ** two queries requires table b-tree lookups in order to find the value + ** of column c, but the first does not because columns a and b are + ** both available in the index. + ** + ** SELECT a, b FROM tbl WHERE a = 1; + ** SELECT a, b, c FROM tbl WHERE a = 1; + */ + int nEq; /* Number of == or IN terms matching index */ + int bInEst = 0; /* True if "x IN (SELECT...)" seen */ + int nInMul = 1; /* Number of distinct equalities to lookup */ + double rangeDiv = (double)1; /* Estimated reduction in search space */ + int nBound = 0; /* Number of range constraints seen */ + int bSort = !!pOrderBy; /* True if external sort required */ + int bDist = !!pDistinct; /* True if index cannot help with DISTINCT */ + int bLookup = 0; /* True if not a covering index */ + WhereTerm *pTerm; /* A single term of the WHERE clause */ +#ifdef SQLITE_ENABLE_STAT3 + WhereTerm *pFirstTerm = 0; /* First term matching the index */ +#endif + + /* Determine the values of nEq and nInMul */ + for(nEq=0; nEqnColumn; nEq++){ + int j = pProbe->aiColumn[nEq]; + pTerm = findTerm(pWC, iCur, j, notReady, eqTermMask, pIdx); + if( pTerm==0 ) break; + wsFlags |= (WHERE_COLUMN_EQ|WHERE_ROWID_EQ); + testcase( pTerm->pWC!=pWC ); + if( pTerm->eOperator & WO_IN ){ + Expr *pExpr = pTerm->pExpr; + wsFlags |= WHERE_COLUMN_IN; + if( ExprHasProperty(pExpr, EP_xIsSelect) ){ + /* "x IN (SELECT ...)": Assume the SELECT returns 25 rows */ + nInMul *= 25; + bInEst = 1; + }else if( ALWAYS(pExpr->x.pList && pExpr->x.pList->nExpr) ){ + /* "x IN (value, value, ...)" */ + nInMul *= pExpr->x.pList->nExpr; + } + }else if( pTerm->eOperator & WO_ISNULL ){ + wsFlags |= WHERE_COLUMN_NULL; + } +#ifdef SQLITE_ENABLE_STAT3 + if( nEq==0 && pProbe->aSample ) pFirstTerm = pTerm; +#endif + used |= pTerm->prereqRight; + } + + /* If the index being considered is UNIQUE, and there is an equality + ** constraint for all columns in the index, then this search will find + ** at most a single row. In this case set the WHERE_UNIQUE flag to + ** indicate this to the caller. + ** + ** Otherwise, if the search may find more than one row, test to see if + ** there is a range constraint on indexed column (nEq+1) that can be + ** optimized using the index. + */ + if( nEq==pProbe->nColumn && pProbe->onError!=OE_None ){ + testcase( wsFlags & WHERE_COLUMN_IN ); + testcase( wsFlags & WHERE_COLUMN_NULL ); + if( (wsFlags & (WHERE_COLUMN_IN|WHERE_COLUMN_NULL))==0 ){ + wsFlags |= WHERE_UNIQUE; + } + }else if( pProbe->bUnordered==0 ){ + int j = (nEq==pProbe->nColumn ? -1 : pProbe->aiColumn[nEq]); + if( findTerm(pWC, iCur, j, notReady, WO_LT|WO_LE|WO_GT|WO_GE, pIdx) ){ + WhereTerm *pTop = findTerm(pWC, iCur, j, notReady, WO_LT|WO_LE, pIdx); + WhereTerm *pBtm = findTerm(pWC, iCur, j, notReady, WO_GT|WO_GE, pIdx); + whereRangeScanEst(pParse, pProbe, nEq, pBtm, pTop, &rangeDiv); + if( pTop ){ + nBound = 1; + wsFlags |= WHERE_TOP_LIMIT; + used |= pTop->prereqRight; + testcase( pTop->pWC!=pWC ); + } + if( pBtm ){ + nBound++; + wsFlags |= WHERE_BTM_LIMIT; + used |= pBtm->prereqRight; + testcase( pBtm->pWC!=pWC ); + } + wsFlags |= (WHERE_COLUMN_RANGE|WHERE_ROWID_RANGE); + } + } + + /* If there is an ORDER BY clause and the index being considered will + ** naturally scan rows in the required order, set the appropriate flags + ** in wsFlags. Otherwise, if there is an ORDER BY clause but the index + ** will scan rows in a different order, set the bSort variable. */ + if( isSortingIndex( + pParse, pWC->pMaskSet, pProbe, iCur, pOrderBy, nEq, wsFlags, &rev) + ){ + bSort = 0; + wsFlags |= WHERE_ROWID_RANGE|WHERE_COLUMN_RANGE|WHERE_ORDERBY; + wsFlags |= (rev ? WHERE_REVERSE : 0); + } + + /* If there is a DISTINCT qualifier and this index will scan rows in + ** order of the DISTINCT expressions, clear bDist and set the appropriate + ** flags in wsFlags. */ + if( isDistinctIndex(pParse, pWC, pProbe, iCur, pDistinct, nEq) + && (wsFlags & WHERE_COLUMN_IN)==0 + ){ + bDist = 0; + wsFlags |= WHERE_ROWID_RANGE|WHERE_COLUMN_RANGE|WHERE_DISTINCT; + } + + /* If currently calculating the cost of using an index (not the IPK + ** index), determine if all required column data may be obtained without + ** using the main table (i.e. if the index is a covering + ** index for this query). If it is, set the WHERE_IDX_ONLY flag in + ** wsFlags. Otherwise, set the bLookup variable to true. */ + if( pIdx && wsFlags ){ + Bitmask m = pSrc->colUsed; + int j; + for(j=0; jnColumn; j++){ + int x = pIdx->aiColumn[j]; + if( xaiRowEst[0] ){ + nRow = aiRowEst[0]/2; + nInMul = (int)(nRow / aiRowEst[nEq]); + } + +#ifdef SQLITE_ENABLE_STAT3 + /* If the constraint is of the form x=VALUE or x IN (E1,E2,...) + ** and we do not think that values of x are unique and if histogram + ** data is available for column x, then it might be possible + ** to get a better estimate on the number of rows based on + ** VALUE and how common that value is according to the histogram. + */ + if( nRow>(double)1 && nEq==1 && pFirstTerm!=0 && aiRowEst[1]>1 ){ + assert( (pFirstTerm->eOperator & (WO_EQ|WO_ISNULL|WO_IN))!=0 ); + if( pFirstTerm->eOperator & (WO_EQ|WO_ISNULL) ){ + testcase( pFirstTerm->eOperator==WO_EQ ); + testcase( pFirstTerm->eOperator==WO_ISNULL ); + whereEqualScanEst(pParse, pProbe, pFirstTerm->pExpr->pRight, &nRow); + }else if( bInEst==0 ){ + assert( pFirstTerm->eOperator==WO_IN ); + whereInScanEst(pParse, pProbe, pFirstTerm->pExpr->x.pList, &nRow); + } + } +#endif /* SQLITE_ENABLE_STAT3 */ + + /* Adjust the number of output rows and downward to reflect rows + ** that are excluded by range constraints. + */ + nRow = nRow/rangeDiv; + if( nRow<1 ) nRow = 1; + + /* Experiments run on real SQLite databases show that the time needed + ** to do a binary search to locate a row in a table or index is roughly + ** log10(N) times the time to move from one row to the next row within + ** a table or index. The actual times can vary, with the size of + ** records being an important factor. Both moves and searches are + ** slower with larger records, presumably because fewer records fit + ** on one page and hence more pages have to be fetched. + ** + ** The ANALYZE command and the sqlite_stat1 and sqlite_stat3 tables do + ** not give us data on the relative sizes of table and index records. + ** So this computation assumes table records are about twice as big + ** as index records + */ + if( (wsFlags & WHERE_NOT_FULLSCAN)==0 ){ + /* The cost of a full table scan is a number of move operations equal + ** to the number of rows in the table. + ** + ** We add an additional 4x penalty to full table scans. This causes + ** the cost function to err on the side of choosing an index over + ** choosing a full scan. This 4x full-scan penalty is an arguable + ** decision and one which we expect to revisit in the future. But + ** it seems to be working well enough at the moment. + */ + cost = aiRowEst[0]*4; + }else{ + log10N = estLog(aiRowEst[0]); + cost = nRow; + if( pIdx ){ + if( bLookup ){ + /* For an index lookup followed by a table lookup: + ** nInMul index searches to find the start of each index range + ** + nRow steps through the index + ** + nRow table searches to lookup the table entry using the rowid + */ + cost += (nInMul + nRow)*log10N; + }else{ + /* For a covering index: + ** nInMul index searches to find the initial entry + ** + nRow steps through the index + */ + cost += nInMul*log10N; + } + }else{ + /* For a rowid primary key lookup: + ** nInMult table searches to find the initial entry for each range + ** + nRow steps through the table + */ + cost += nInMul*log10N; + } + } + + /* Add in the estimated cost of sorting the result. Actual experimental + ** measurements of sorting performance in SQLite show that sorting time + ** adds C*N*log10(N) to the cost, where N is the number of rows to be + ** sorted and C is a factor between 1.95 and 4.3. We will split the + ** difference and select C of 3.0. + */ + if( bSort ){ + cost += nRow*estLog(nRow)*3; + } + if( bDist ){ + cost += nRow*estLog(nRow)*3; + } + + /**** Cost of using this index has now been computed ****/ + + /* If there are additional constraints on this table that cannot + ** be used with the current index, but which might lower the number + ** of output rows, adjust the nRow value accordingly. This only + ** matters if the current index is the least costly, so do not bother + ** with this step if we already know this index will not be chosen. + ** Also, never reduce the output row count below 2 using this step. + ** + ** It is critical that the notValid mask be used here instead of + ** the notReady mask. When computing an "optimal" index, the notReady + ** mask will only have one bit set - the bit for the current table. + ** The notValid mask, on the other hand, always has all bits set for + ** tables that are not in outer loops. If notReady is used here instead + ** of notValid, then a optimal index that depends on inner joins loops + ** might be selected even when there exists an optimal index that has + ** no such dependency. + */ + if( nRow>2 && cost<=pCost->rCost ){ + int k; /* Loop counter */ + int nSkipEq = nEq; /* Number of == constraints to skip */ + int nSkipRange = nBound; /* Number of < constraints to skip */ + Bitmask thisTab; /* Bitmap for pSrc */ + + thisTab = getMask(pWC->pMaskSet, iCur); + for(pTerm=pWC->a, k=pWC->nTerm; nRow>2 && k; k--, pTerm++){ + if( pTerm->wtFlags & TERM_VIRTUAL ) continue; + if( (pTerm->prereqAll & notValid)!=thisTab ) continue; + if( pTerm->eOperator & (WO_EQ|WO_IN|WO_ISNULL) ){ + if( nSkipEq ){ + /* Ignore the first nEq equality matches since the index + ** has already accounted for these */ + nSkipEq--; + }else{ + /* Assume each additional equality match reduces the result + ** set size by a factor of 10 */ + nRow /= 10; + } + }else if( pTerm->eOperator & (WO_LT|WO_LE|WO_GT|WO_GE) ){ + if( nSkipRange ){ + /* Ignore the first nSkipRange range constraints since the index + ** has already accounted for these */ + nSkipRange--; + }else{ + /* Assume each additional range constraint reduces the result + ** set size by a factor of 3. Indexed range constraints reduce + ** the search space by a larger factor: 4. We make indexed range + ** more selective intentionally because of the subjective + ** observation that indexed range constraints really are more + ** selective in practice, on average. */ + nRow /= 3; + } + }else if( pTerm->eOperator!=WO_NOOP ){ + /* Any other expression lowers the output row count by half */ + nRow /= 2; + } + } + if( nRow<2 ) nRow = 2; + } + + + WHERETRACE(( + "%s(%s): nEq=%d nInMul=%d rangeDiv=%d bSort=%d bLookup=%d wsFlags=0x%x\n" + " notReady=0x%llx log10N=%.1f nRow=%.1f cost=%.1f used=0x%llx\n", + pSrc->pTab->zName, (pIdx ? pIdx->zName : "ipk"), + nEq, nInMul, (int)rangeDiv, bSort, bLookup, wsFlags, + notReady, log10N, nRow, cost, used + )); + + /* If this index is the best we have seen so far, then record this + ** index and its cost in the pCost structure. + */ + if( (!pIdx || wsFlags) + && (costrCost || (cost<=pCost->rCost && nRowplan.nRow)) + ){ + pCost->rCost = cost; + pCost->used = used; + pCost->plan.nRow = nRow; + pCost->plan.wsFlags = (wsFlags&wsFlagMask); + pCost->plan.nEq = nEq; + pCost->plan.u.pIdx = pIdx; + } + + /* If there was an INDEXED BY clause, then only that one index is + ** considered. */ + if( pSrc->pIndex ) break; + + /* Reset masks for the next index in the loop */ + wsFlagMask = ~(WHERE_ROWID_EQ|WHERE_ROWID_RANGE); + eqTermMask = idxEqTermMask; + } + + /* If there is no ORDER BY clause and the SQLITE_ReverseOrder flag + ** is set, then reverse the order that the index will be scanned + ** in. This is used for application testing, to help find cases + ** where application behaviour depends on the (undefined) order that + ** SQLite outputs rows in in the absence of an ORDER BY clause. */ + if( !pOrderBy && pParse->db->flags & SQLITE_ReverseOrder ){ + pCost->plan.wsFlags |= WHERE_REVERSE; + } + + assert( pOrderBy || (pCost->plan.wsFlags&WHERE_ORDERBY)==0 ); + assert( pCost->plan.u.pIdx==0 || (pCost->plan.wsFlags&WHERE_ROWID_EQ)==0 ); + assert( pSrc->pIndex==0 + || pCost->plan.u.pIdx==0 + || pCost->plan.u.pIdx==pSrc->pIndex + ); + + WHERETRACE(("best index is: %s\n", + ((pCost->plan.wsFlags & WHERE_NOT_FULLSCAN)==0 ? "none" : + pCost->plan.u.pIdx ? pCost->plan.u.pIdx->zName : "ipk") + )); + + bestOrClauseIndex(pParse, pWC, pSrc, notReady, notValid, pOrderBy, pCost); + bestAutomaticIndex(pParse, pWC, pSrc, notReady, pCost); + pCost->plan.wsFlags |= eqTermMask; +} + +/* +** Find the query plan for accessing table pSrc->pTab. Write the +** best query plan and its cost into the WhereCost object supplied +** as the last parameter. This function may calculate the cost of +** both real and virtual table scans. +*/ +static void bestIndex( + Parse *pParse, /* The parsing context */ + WhereClause *pWC, /* The WHERE clause */ + struct SrcList_item *pSrc, /* The FROM clause term to search */ + Bitmask notReady, /* Mask of cursors not available for indexing */ + Bitmask notValid, /* Cursors not available for any purpose */ + ExprList *pOrderBy, /* The ORDER BY clause */ + WhereCost *pCost /* Lowest cost query plan */ +){ +#ifndef SQLITE_OMIT_VIRTUALTABLE + if( IsVirtual(pSrc->pTab) ){ + sqlite3_index_info *p = 0; + bestVirtualIndex(pParse, pWC, pSrc, notReady, notValid, pOrderBy, pCost,&p); + if( p->needToFreeIdxStr ){ + sqlite3_free(p->idxStr); + } + sqlite3DbFree(pParse->db, p); + }else +#endif + { + bestBtreeIndex(pParse, pWC, pSrc, notReady, notValid, pOrderBy, 0, pCost); + } +} + +/* +** Disable a term in the WHERE clause. Except, do not disable the term +** if it controls a LEFT OUTER JOIN and it did not originate in the ON +** or USING clause of that join. +** +** Consider the term t2.z='ok' in the following queries: +** +** (1) SELECT * FROM t1 LEFT JOIN t2 ON t1.a=t2.x WHERE t2.z='ok' +** (2) SELECT * FROM t1 LEFT JOIN t2 ON t1.a=t2.x AND t2.z='ok' +** (3) SELECT * FROM t1, t2 WHERE t1.a=t2.x AND t2.z='ok' +** +** The t2.z='ok' is disabled in the in (2) because it originates +** in the ON clause. The term is disabled in (3) because it is not part +** of a LEFT OUTER JOIN. In (1), the term is not disabled. +** +** IMPLEMENTATION-OF: R-24597-58655 No tests are done for terms that are +** completely satisfied by indices. +** +** Disabling a term causes that term to not be tested in the inner loop +** of the join. Disabling is an optimization. When terms are satisfied +** by indices, we disable them to prevent redundant tests in the inner +** loop. We would get the correct results if nothing were ever disabled, +** but joins might run a little slower. The trick is to disable as much +** as we can without disabling too much. If we disabled in (1), we'd get +** the wrong answer. See ticket #813. +*/ +static void disableTerm(WhereLevel *pLevel, WhereTerm *pTerm){ + if( pTerm + && (pTerm->wtFlags & TERM_CODED)==0 + && (pLevel->iLeftJoin==0 || ExprHasProperty(pTerm->pExpr, EP_FromJoin)) + ){ + pTerm->wtFlags |= TERM_CODED; + if( pTerm->iParent>=0 ){ + WhereTerm *pOther = &pTerm->pWC->a[pTerm->iParent]; + if( (--pOther->nChild)==0 ){ + disableTerm(pLevel, pOther); + } + } + } +} + +/* +** Code an OP_Affinity opcode to apply the column affinity string zAff +** to the n registers starting at base. +** +** As an optimization, SQLITE_AFF_NONE entries (which are no-ops) at the +** beginning and end of zAff are ignored. If all entries in zAff are +** SQLITE_AFF_NONE, then no code gets generated. +** +** This routine makes its own copy of zAff so that the caller is free +** to modify zAff after this routine returns. +*/ +static void codeApplyAffinity(Parse *pParse, int base, int n, char *zAff){ + Vdbe *v = pParse->pVdbe; + if( zAff==0 ){ + assert( pParse->db->mallocFailed ); + return; + } + assert( v!=0 ); + + /* Adjust base and n to skip over SQLITE_AFF_NONE entries at the beginning + ** and end of the affinity string. + */ + while( n>0 && zAff[0]==SQLITE_AFF_NONE ){ + n--; + base++; + zAff++; + } + while( n>1 && zAff[n-1]==SQLITE_AFF_NONE ){ + n--; + } + + /* Code the OP_Affinity opcode if there is anything left to do. */ + if( n>0 ){ + sqlite3VdbeAddOp2(v, OP_Affinity, base, n); + sqlite3VdbeChangeP4(v, -1, zAff, n); + sqlite3ExprCacheAffinityChange(pParse, base, n); + } +} + + +/* +** Generate code for a single equality term of the WHERE clause. An equality +** term can be either X=expr or X IN (...). pTerm is the term to be +** coded. +** +** The current value for the constraint is left in register iReg. +** +** For a constraint of the form X=expr, the expression is evaluated and its +** result is left on the stack. For constraints of the form X IN (...) +** this routine sets up a loop that will iterate over all values of X. +*/ +static int codeEqualityTerm( + Parse *pParse, /* The parsing context */ + WhereTerm *pTerm, /* The term of the WHERE clause to be coded */ + WhereLevel *pLevel, /* When level of the FROM clause we are working on */ + int iTarget /* Attempt to leave results in this register */ +){ + Expr *pX = pTerm->pExpr; + Vdbe *v = pParse->pVdbe; + int iReg; /* Register holding results */ + + assert( iTarget>0 ); + if( pX->op==TK_EQ ){ + iReg = sqlite3ExprCodeTarget(pParse, pX->pRight, iTarget); + }else if( pX->op==TK_ISNULL ){ + iReg = iTarget; + sqlite3VdbeAddOp2(v, OP_Null, 0, iReg); +#ifndef SQLITE_OMIT_SUBQUERY + }else{ + int eType; + int iTab; + struct InLoop *pIn; + + assert( pX->op==TK_IN ); + iReg = iTarget; + eType = sqlite3FindInIndex(pParse, pX, 0); + iTab = pX->iTable; + sqlite3VdbeAddOp2(v, OP_Rewind, iTab, 0); + assert( pLevel->plan.wsFlags & WHERE_IN_ABLE ); + if( pLevel->u.in.nIn==0 ){ + pLevel->addrNxt = sqlite3VdbeMakeLabel(v); + } + pLevel->u.in.nIn++; + pLevel->u.in.aInLoop = + sqlite3DbReallocOrFree(pParse->db, pLevel->u.in.aInLoop, + sizeof(pLevel->u.in.aInLoop[0])*pLevel->u.in.nIn); + pIn = pLevel->u.in.aInLoop; + if( pIn ){ + pIn += pLevel->u.in.nIn - 1; + pIn->iCur = iTab; + if( eType==IN_INDEX_ROWID ){ + pIn->addrInTop = sqlite3VdbeAddOp2(v, OP_Rowid, iTab, iReg); + }else{ + pIn->addrInTop = sqlite3VdbeAddOp3(v, OP_Column, iTab, 0, iReg); + } + sqlite3VdbeAddOp1(v, OP_IsNull, iReg); + }else{ + pLevel->u.in.nIn = 0; + } +#endif + } + disableTerm(pLevel, pTerm); + return iReg; +} + +/* +** Generate code that will evaluate all == and IN constraints for an +** index. +** +** For example, consider table t1(a,b,c,d,e,f) with index i1(a,b,c). +** Suppose the WHERE clause is this: a==5 AND b IN (1,2,3) AND c>5 AND c<10 +** The index has as many as three equality constraints, but in this +** example, the third "c" value is an inequality. So only two +** constraints are coded. This routine will generate code to evaluate +** a==5 and b IN (1,2,3). The current values for a and b will be stored +** in consecutive registers and the index of the first register is returned. +** +** In the example above nEq==2. But this subroutine works for any value +** of nEq including 0. If nEq==0, this routine is nearly a no-op. +** The only thing it does is allocate the pLevel->iMem memory cell and +** compute the affinity string. +** +** This routine always allocates at least one memory cell and returns +** the index of that memory cell. The code that +** calls this routine will use that memory cell to store the termination +** key value of the loop. If one or more IN operators appear, then +** this routine allocates an additional nEq memory cells for internal +** use. +** +** Before returning, *pzAff is set to point to a buffer containing a +** copy of the column affinity string of the index allocated using +** sqlite3DbMalloc(). Except, entries in the copy of the string associated +** with equality constraints that use NONE affinity are set to +** SQLITE_AFF_NONE. This is to deal with SQL such as the following: +** +** CREATE TABLE t1(a TEXT PRIMARY KEY, b); +** SELECT ... FROM t1 AS t2, t1 WHERE t1.a = t2.b; +** +** In the example above, the index on t1(a) has TEXT affinity. But since +** the right hand side of the equality constraint (t2.b) has NONE affinity, +** no conversion should be attempted before using a t2.b value as part of +** a key to search the index. Hence the first byte in the returned affinity +** string in this example would be set to SQLITE_AFF_NONE. +*/ +static int codeAllEqualityTerms( + Parse *pParse, /* Parsing context */ + WhereLevel *pLevel, /* Which nested loop of the FROM we are coding */ + WhereClause *pWC, /* The WHERE clause */ + Bitmask notReady, /* Which parts of FROM have not yet been coded */ + int nExtraReg, /* Number of extra registers to allocate */ + char **pzAff /* OUT: Set to point to affinity string */ +){ + int nEq = pLevel->plan.nEq; /* The number of == or IN constraints to code */ + Vdbe *v = pParse->pVdbe; /* The vm under construction */ + Index *pIdx; /* The index being used for this loop */ + int iCur = pLevel->iTabCur; /* The cursor of the table */ + WhereTerm *pTerm; /* A single constraint term */ + int j; /* Loop counter */ + int regBase; /* Base register */ + int nReg; /* Number of registers to allocate */ + char *zAff; /* Affinity string to return */ + + /* This module is only called on query plans that use an index. */ + assert( pLevel->plan.wsFlags & WHERE_INDEXED ); + pIdx = pLevel->plan.u.pIdx; + + /* Figure out how many memory cells we will need then allocate them. + */ + regBase = pParse->nMem + 1; + nReg = pLevel->plan.nEq + nExtraReg; + pParse->nMem += nReg; + + zAff = sqlite3DbStrDup(pParse->db, sqlite3IndexAffinityStr(v, pIdx)); + if( !zAff ){ + pParse->db->mallocFailed = 1; + } + + /* Evaluate the equality constraints + */ + assert( pIdx->nColumn>=nEq ); + for(j=0; jaiColumn[j]; + pTerm = findTerm(pWC, iCur, k, notReady, pLevel->plan.wsFlags, pIdx); + if( NEVER(pTerm==0) ) break; + /* The following true for indices with redundant columns. + ** Ex: CREATE INDEX i1 ON t1(a,b,a); SELECT * FROM t1 WHERE a=0 AND b=0; */ + testcase( (pTerm->wtFlags & TERM_CODED)!=0 ); + testcase( pTerm->wtFlags & TERM_VIRTUAL ); /* EV: R-30575-11662 */ + r1 = codeEqualityTerm(pParse, pTerm, pLevel, regBase+j); + if( r1!=regBase+j ){ + if( nReg==1 ){ + sqlite3ReleaseTempReg(pParse, regBase); + regBase = r1; + }else{ + sqlite3VdbeAddOp2(v, OP_SCopy, r1, regBase+j); + } + } + testcase( pTerm->eOperator & WO_ISNULL ); + testcase( pTerm->eOperator & WO_IN ); + if( (pTerm->eOperator & (WO_ISNULL|WO_IN))==0 ){ + Expr *pRight = pTerm->pExpr->pRight; + sqlite3ExprCodeIsNullJump(v, pRight, regBase+j, pLevel->addrBrk); + if( zAff ){ + if( sqlite3CompareAffinity(pRight, zAff[j])==SQLITE_AFF_NONE ){ + zAff[j] = SQLITE_AFF_NONE; + } + if( sqlite3ExprNeedsNoAffinityChange(pRight, zAff[j]) ){ + zAff[j] = SQLITE_AFF_NONE; + } + } + } + } + *pzAff = zAff; + return regBase; +} + +#ifndef SQLITE_OMIT_EXPLAIN +/* +** This routine is a helper for explainIndexRange() below +** +** pStr holds the text of an expression that we are building up one term +** at a time. This routine adds a new term to the end of the expression. +** Terms are separated by AND so add the "AND" text for second and subsequent +** terms only. +*/ +static void explainAppendTerm( + StrAccum *pStr, /* The text expression being built */ + int iTerm, /* Index of this term. First is zero */ + const char *zColumn, /* Name of the column */ + const char *zOp /* Name of the operator */ +){ + if( iTerm ) sqlite3StrAccumAppend(pStr, " AND ", 5); + sqlite3StrAccumAppend(pStr, zColumn, -1); + sqlite3StrAccumAppend(pStr, zOp, 1); + sqlite3StrAccumAppend(pStr, "?", 1); +} + +/* +** Argument pLevel describes a strategy for scanning table pTab. This +** function returns a pointer to a string buffer containing a description +** of the subset of table rows scanned by the strategy in the form of an +** SQL expression. Or, if all rows are scanned, NULL is returned. +** +** For example, if the query: +** +** SELECT * FROM t1 WHERE a=1 AND b>2; +** +** is run and there is an index on (a, b), then this function returns a +** string similar to: +** +** "a=? AND b>?" +** +** The returned pointer points to memory obtained from sqlite3DbMalloc(). +** It is the responsibility of the caller to free the buffer when it is +** no longer required. +*/ +static char *explainIndexRange(sqlite3 *db, WhereLevel *pLevel, Table *pTab){ + WherePlan *pPlan = &pLevel->plan; + Index *pIndex = pPlan->u.pIdx; + int nEq = pPlan->nEq; + int i, j; + Column *aCol = pTab->aCol; + int *aiColumn = pIndex->aiColumn; + StrAccum txt; + + if( nEq==0 && (pPlan->wsFlags & (WHERE_BTM_LIMIT|WHERE_TOP_LIMIT))==0 ){ + return 0; + } + sqlite3StrAccumInit(&txt, 0, 0, SQLITE_MAX_LENGTH); + txt.db = db; + sqlite3StrAccumAppend(&txt, " (", 2); + for(i=0; i"); + } + if( pPlan->wsFlags&WHERE_TOP_LIMIT ){ + char *z = (j==pIndex->nColumn ) ? "rowid" : aCol[aiColumn[j]].zName; + explainAppendTerm(&txt, i, z, "<"); + } + sqlite3StrAccumAppend(&txt, ")", 1); + return sqlite3StrAccumFinish(&txt); +} + +/* +** This function is a no-op unless currently processing an EXPLAIN QUERY PLAN +** command. If the query being compiled is an EXPLAIN QUERY PLAN, a single +** record is added to the output to describe the table scan strategy in +** pLevel. +*/ +static void explainOneScan( + Parse *pParse, /* Parse context */ + SrcList *pTabList, /* Table list this loop refers to */ + WhereLevel *pLevel, /* Scan to write OP_Explain opcode for */ + int iLevel, /* Value for "level" column of output */ + int iFrom, /* Value for "from" column of output */ + u16 wctrlFlags /* Flags passed to sqlite3WhereBegin() */ +){ + if( pParse->explain==2 ){ + u32 flags = pLevel->plan.wsFlags; + struct SrcList_item *pItem = &pTabList->a[pLevel->iFrom]; + Vdbe *v = pParse->pVdbe; /* VM being constructed */ + sqlite3 *db = pParse->db; /* Database handle */ + char *zMsg; /* Text to add to EQP output */ + sqlite3_int64 nRow; /* Expected number of rows visited by scan */ + int iId = pParse->iSelectId; /* Select id (left-most output column) */ + int isSearch; /* True for a SEARCH. False for SCAN. */ + + if( (flags&WHERE_MULTI_OR) || (wctrlFlags&WHERE_ONETABLE_ONLY) ) return; + + isSearch = (pLevel->plan.nEq>0) + || (flags&(WHERE_BTM_LIMIT|WHERE_TOP_LIMIT))!=0 + || (wctrlFlags&(WHERE_ORDERBY_MIN|WHERE_ORDERBY_MAX)); + + zMsg = sqlite3MPrintf(db, "%s", isSearch?"SEARCH":"SCAN"); + if( pItem->pSelect ){ + zMsg = sqlite3MAppendf(db, zMsg, "%s SUBQUERY %d", zMsg,pItem->iSelectId); + }else{ + zMsg = sqlite3MAppendf(db, zMsg, "%s TABLE %s", zMsg, pItem->zName); + } + + if( pItem->zAlias ){ + zMsg = sqlite3MAppendf(db, zMsg, "%s AS %s", zMsg, pItem->zAlias); + } + if( (flags & WHERE_INDEXED)!=0 ){ + char *zWhere = explainIndexRange(db, pLevel, pItem->pTab); + zMsg = sqlite3MAppendf(db, zMsg, "%s USING %s%sINDEX%s%s%s", zMsg, + ((flags & WHERE_TEMP_INDEX)?"AUTOMATIC ":""), + ((flags & WHERE_IDX_ONLY)?"COVERING ":""), + ((flags & WHERE_TEMP_INDEX)?"":" "), + ((flags & WHERE_TEMP_INDEX)?"": pLevel->plan.u.pIdx->zName), + zWhere + ); + sqlite3DbFree(db, zWhere); + }else if( flags & (WHERE_ROWID_EQ|WHERE_ROWID_RANGE) ){ + zMsg = sqlite3MAppendf(db, zMsg, "%s USING INTEGER PRIMARY KEY", zMsg); + + if( flags&WHERE_ROWID_EQ ){ + zMsg = sqlite3MAppendf(db, zMsg, "%s (rowid=?)", zMsg); + }else if( (flags&WHERE_BOTH_LIMIT)==WHERE_BOTH_LIMIT ){ + zMsg = sqlite3MAppendf(db, zMsg, "%s (rowid>? AND rowid?)", zMsg); + }else if( flags&WHERE_TOP_LIMIT ){ + zMsg = sqlite3MAppendf(db, zMsg, "%s (rowidplan.u.pVtabIdx; + zMsg = sqlite3MAppendf(db, zMsg, "%s VIRTUAL TABLE INDEX %d:%s", zMsg, + pVtabIdx->idxNum, pVtabIdx->idxStr); + } +#endif + if( wctrlFlags&(WHERE_ORDERBY_MIN|WHERE_ORDERBY_MAX) ){ + testcase( wctrlFlags & WHERE_ORDERBY_MIN ); + nRow = 1; + }else{ + nRow = (sqlite3_int64)pLevel->plan.nRow; + } + zMsg = sqlite3MAppendf(db, zMsg, "%s (~%lld rows)", zMsg, nRow); + sqlite3VdbeAddOp4(v, OP_Explain, iId, iLevel, iFrom, zMsg, P4_DYNAMIC); + } +} +#else +# define explainOneScan(u,v,w,x,y,z) +#endif /* SQLITE_OMIT_EXPLAIN */ + + +/* +** Generate code for the start of the iLevel-th loop in the WHERE clause +** implementation described by pWInfo. +*/ +static Bitmask codeOneLoopStart( + WhereInfo *pWInfo, /* Complete information about the WHERE clause */ + int iLevel, /* Which level of pWInfo->a[] should be coded */ + u16 wctrlFlags, /* One of the WHERE_* flags defined in sqliteInt.h */ + Bitmask notReady /* Which tables are currently available */ +){ + int j, k; /* Loop counters */ + int iCur; /* The VDBE cursor for the table */ + int addrNxt; /* Where to jump to continue with the next IN case */ + int omitTable; /* True if we use the index only */ + int bRev; /* True if we need to scan in reverse order */ + WhereLevel *pLevel; /* The where level to be coded */ + WhereClause *pWC; /* Decomposition of the entire WHERE clause */ + WhereTerm *pTerm; /* A WHERE clause term */ + Parse *pParse; /* Parsing context */ + Vdbe *v; /* The prepared stmt under constructions */ + struct SrcList_item *pTabItem; /* FROM clause term being coded */ + int addrBrk; /* Jump here to break out of the loop */ + int addrCont; /* Jump here to continue with next cycle */ + int iRowidReg = 0; /* Rowid is stored in this register, if not zero */ + int iReleaseReg = 0; /* Temp register to free before returning */ + + pParse = pWInfo->pParse; + v = pParse->pVdbe; + pWC = pWInfo->pWC; + pLevel = &pWInfo->a[iLevel]; + pTabItem = &pWInfo->pTabList->a[pLevel->iFrom]; + iCur = pTabItem->iCursor; + bRev = (pLevel->plan.wsFlags & WHERE_REVERSE)!=0; + omitTable = (pLevel->plan.wsFlags & WHERE_IDX_ONLY)!=0 + && (wctrlFlags & WHERE_FORCE_TABLE)==0; + + /* Create labels for the "break" and "continue" instructions + ** for the current loop. Jump to addrBrk to break out of a loop. + ** Jump to cont to go immediately to the next iteration of the + ** loop. + ** + ** When there is an IN operator, we also have a "addrNxt" label that + ** means to continue with the next IN value combination. When + ** there are no IN operators in the constraints, the "addrNxt" label + ** is the same as "addrBrk". + */ + addrBrk = pLevel->addrBrk = pLevel->addrNxt = sqlite3VdbeMakeLabel(v); + addrCont = pLevel->addrCont = sqlite3VdbeMakeLabel(v); + + /* If this is the right table of a LEFT OUTER JOIN, allocate and + ** initialize a memory cell that records if this table matches any + ** row of the left table of the join. + */ + if( pLevel->iFrom>0 && (pTabItem[0].jointype & JT_LEFT)!=0 ){ + pLevel->iLeftJoin = ++pParse->nMem; + sqlite3VdbeAddOp2(v, OP_Integer, 0, pLevel->iLeftJoin); + VdbeComment((v, "init LEFT JOIN no-match flag")); + } + +#ifndef SQLITE_OMIT_VIRTUALTABLE + if( (pLevel->plan.wsFlags & WHERE_VIRTUALTABLE)!=0 ){ + /* Case 0: The table is a virtual-table. Use the VFilter and VNext + ** to access the data. + */ + int iReg; /* P3 Value for OP_VFilter */ + sqlite3_index_info *pVtabIdx = pLevel->plan.u.pVtabIdx; + int nConstraint = pVtabIdx->nConstraint; + struct sqlite3_index_constraint_usage *aUsage = + pVtabIdx->aConstraintUsage; + const struct sqlite3_index_constraint *aConstraint = + pVtabIdx->aConstraint; + + sqlite3ExprCachePush(pParse); + iReg = sqlite3GetTempRange(pParse, nConstraint+2); + for(j=1; j<=nConstraint; j++){ + for(k=0; ka[iTerm].pExpr->pRight, iReg+j+1); + break; + } + } + if( k==nConstraint ) break; + } + sqlite3VdbeAddOp2(v, OP_Integer, pVtabIdx->idxNum, iReg); + sqlite3VdbeAddOp2(v, OP_Integer, j-1, iReg+1); + sqlite3VdbeAddOp4(v, OP_VFilter, iCur, addrBrk, iReg, pVtabIdx->idxStr, + pVtabIdx->needToFreeIdxStr ? P4_MPRINTF : P4_STATIC); + pVtabIdx->needToFreeIdxStr = 0; + for(j=0; ja[iTerm]); + } + } + pLevel->op = OP_VNext; + pLevel->p1 = iCur; + pLevel->p2 = sqlite3VdbeCurrentAddr(v); + sqlite3ReleaseTempRange(pParse, iReg, nConstraint+2); + sqlite3ExprCachePop(pParse, 1); + }else +#endif /* SQLITE_OMIT_VIRTUALTABLE */ + + if( pLevel->plan.wsFlags & WHERE_ROWID_EQ ){ + /* Case 1: We can directly reference a single row using an + ** equality comparison against the ROWID field. Or + ** we reference multiple rows using a "rowid IN (...)" + ** construct. + */ + iReleaseReg = sqlite3GetTempReg(pParse); + pTerm = findTerm(pWC, iCur, -1, notReady, WO_EQ|WO_IN, 0); + assert( pTerm!=0 ); + assert( pTerm->pExpr!=0 ); + assert( pTerm->leftCursor==iCur ); + assert( omitTable==0 ); + testcase( pTerm->wtFlags & TERM_VIRTUAL ); /* EV: R-30575-11662 */ + iRowidReg = codeEqualityTerm(pParse, pTerm, pLevel, iReleaseReg); + addrNxt = pLevel->addrNxt; + sqlite3VdbeAddOp2(v, OP_MustBeInt, iRowidReg, addrNxt); + sqlite3VdbeAddOp3(v, OP_NotExists, iCur, addrNxt, iRowidReg); + sqlite3ExprCacheStore(pParse, iCur, -1, iRowidReg); + VdbeComment((v, "pk")); + pLevel->op = OP_Noop; + }else if( pLevel->plan.wsFlags & WHERE_ROWID_RANGE ){ + /* Case 2: We have an inequality comparison against the ROWID field. + */ + int testOp = OP_Noop; + int start; + int memEndValue = 0; + WhereTerm *pStart, *pEnd; + + assert( omitTable==0 ); + pStart = findTerm(pWC, iCur, -1, notReady, WO_GT|WO_GE, 0); + pEnd = findTerm(pWC, iCur, -1, notReady, WO_LT|WO_LE, 0); + if( bRev ){ + pTerm = pStart; + pStart = pEnd; + pEnd = pTerm; + } + if( pStart ){ + Expr *pX; /* The expression that defines the start bound */ + int r1, rTemp; /* Registers for holding the start boundary */ + + /* The following constant maps TK_xx codes into corresponding + ** seek opcodes. It depends on a particular ordering of TK_xx + */ + const u8 aMoveOp[] = { + /* TK_GT */ OP_SeekGt, + /* TK_LE */ OP_SeekLe, + /* TK_LT */ OP_SeekLt, + /* TK_GE */ OP_SeekGe + }; + assert( TK_LE==TK_GT+1 ); /* Make sure the ordering.. */ + assert( TK_LT==TK_GT+2 ); /* ... of the TK_xx values... */ + assert( TK_GE==TK_GT+3 ); /* ... is correcct. */ + + testcase( pStart->wtFlags & TERM_VIRTUAL ); /* EV: R-30575-11662 */ + pX = pStart->pExpr; + assert( pX!=0 ); + assert( pStart->leftCursor==iCur ); + r1 = sqlite3ExprCodeTemp(pParse, pX->pRight, &rTemp); + sqlite3VdbeAddOp3(v, aMoveOp[pX->op-TK_GT], iCur, addrBrk, r1); + VdbeComment((v, "pk")); + sqlite3ExprCacheAffinityChange(pParse, r1, 1); + sqlite3ReleaseTempReg(pParse, rTemp); + disableTerm(pLevel, pStart); + }else{ + sqlite3VdbeAddOp2(v, bRev ? OP_Last : OP_Rewind, iCur, addrBrk); + } + if( pEnd ){ + Expr *pX; + pX = pEnd->pExpr; + assert( pX!=0 ); + assert( pEnd->leftCursor==iCur ); + testcase( pEnd->wtFlags & TERM_VIRTUAL ); /* EV: R-30575-11662 */ + memEndValue = ++pParse->nMem; + sqlite3ExprCode(pParse, pX->pRight, memEndValue); + if( pX->op==TK_LT || pX->op==TK_GT ){ + testOp = bRev ? OP_Le : OP_Ge; + }else{ + testOp = bRev ? OP_Lt : OP_Gt; + } + disableTerm(pLevel, pEnd); + } + start = sqlite3VdbeCurrentAddr(v); + pLevel->op = bRev ? OP_Prev : OP_Next; + pLevel->p1 = iCur; + pLevel->p2 = start; + if( pStart==0 && pEnd==0 ){ + pLevel->p5 = SQLITE_STMTSTATUS_FULLSCAN_STEP; + }else{ + assert( pLevel->p5==0 ); + } + if( testOp!=OP_Noop ){ + iRowidReg = iReleaseReg = sqlite3GetTempReg(pParse); + sqlite3VdbeAddOp2(v, OP_Rowid, iCur, iRowidReg); + sqlite3ExprCacheStore(pParse, iCur, -1, iRowidReg); + sqlite3VdbeAddOp3(v, testOp, memEndValue, addrBrk, iRowidReg); + sqlite3VdbeChangeP5(v, SQLITE_AFF_NUMERIC | SQLITE_JUMPIFNULL); + } + }else if( pLevel->plan.wsFlags & (WHERE_COLUMN_RANGE|WHERE_COLUMN_EQ) ){ + /* Case 3: A scan using an index. + ** + ** The WHERE clause may contain zero or more equality + ** terms ("==" or "IN" operators) that refer to the N + ** left-most columns of the index. It may also contain + ** inequality constraints (>, <, >= or <=) on the indexed + ** column that immediately follows the N equalities. Only + ** the right-most column can be an inequality - the rest must + ** use the "==" and "IN" operators. For example, if the + ** index is on (x,y,z), then the following clauses are all + ** optimized: + ** + ** x=5 + ** x=5 AND y=10 + ** x=5 AND y<10 + ** x=5 AND y>5 AND y<10 + ** x=5 AND y=5 AND z<=10 + ** + ** The z<10 term of the following cannot be used, only + ** the x=5 term: + ** + ** x=5 AND z<10 + ** + ** N may be zero if there are inequality constraints. + ** If there are no inequality constraints, then N is at + ** least one. + ** + ** This case is also used when there are no WHERE clause + ** constraints but an index is selected anyway, in order + ** to force the output order to conform to an ORDER BY. + */ + static const u8 aStartOp[] = { + 0, + 0, + OP_Rewind, /* 2: (!start_constraints && startEq && !bRev) */ + OP_Last, /* 3: (!start_constraints && startEq && bRev) */ + OP_SeekGt, /* 4: (start_constraints && !startEq && !bRev) */ + OP_SeekLt, /* 5: (start_constraints && !startEq && bRev) */ + OP_SeekGe, /* 6: (start_constraints && startEq && !bRev) */ + OP_SeekLe /* 7: (start_constraints && startEq && bRev) */ + }; + static const u8 aEndOp[] = { + OP_Noop, /* 0: (!end_constraints) */ + OP_IdxGE, /* 1: (end_constraints && !bRev) */ + OP_IdxLT /* 2: (end_constraints && bRev) */ + }; + int nEq = pLevel->plan.nEq; /* Number of == or IN terms */ + int isMinQuery = 0; /* If this is an optimized SELECT min(x).. */ + int regBase; /* Base register holding constraint values */ + int r1; /* Temp register */ + WhereTerm *pRangeStart = 0; /* Inequality constraint at range start */ + WhereTerm *pRangeEnd = 0; /* Inequality constraint at range end */ + int startEq; /* True if range start uses ==, >= or <= */ + int endEq; /* True if range end uses ==, >= or <= */ + int start_constraints; /* Start of range is constrained */ + int nConstraint; /* Number of constraint terms */ + Index *pIdx; /* The index we will be using */ + int iIdxCur; /* The VDBE cursor for the index */ + int nExtraReg = 0; /* Number of extra registers needed */ + int op; /* Instruction opcode */ + char *zStartAff; /* Affinity for start of range constraint */ + char *zEndAff; /* Affinity for end of range constraint */ + + pIdx = pLevel->plan.u.pIdx; + iIdxCur = pLevel->iIdxCur; + k = (nEq==pIdx->nColumn ? -1 : pIdx->aiColumn[nEq]); + + /* If this loop satisfies a sort order (pOrderBy) request that + ** was passed to this function to implement a "SELECT min(x) ..." + ** query, then the caller will only allow the loop to run for + ** a single iteration. This means that the first row returned + ** should not have a NULL value stored in 'x'. If column 'x' is + ** the first one after the nEq equality constraints in the index, + ** this requires some special handling. + */ + if( (wctrlFlags&WHERE_ORDERBY_MIN)!=0 + && (pLevel->plan.wsFlags&WHERE_ORDERBY) + && (pIdx->nColumn>nEq) + ){ + /* assert( pOrderBy->nExpr==1 ); */ + /* assert( pOrderBy->a[0].pExpr->iColumn==pIdx->aiColumn[nEq] ); */ + isMinQuery = 1; + nExtraReg = 1; + } + + /* Find any inequality constraint terms for the start and end + ** of the range. + */ + if( pLevel->plan.wsFlags & WHERE_TOP_LIMIT ){ + pRangeEnd = findTerm(pWC, iCur, k, notReady, (WO_LT|WO_LE), pIdx); + nExtraReg = 1; + } + if( pLevel->plan.wsFlags & WHERE_BTM_LIMIT ){ + pRangeStart = findTerm(pWC, iCur, k, notReady, (WO_GT|WO_GE), pIdx); + nExtraReg = 1; + } + + /* Generate code to evaluate all constraint terms using == or IN + ** and store the values of those terms in an array of registers + ** starting at regBase. + */ + regBase = codeAllEqualityTerms( + pParse, pLevel, pWC, notReady, nExtraReg, &zStartAff + ); + zEndAff = sqlite3DbStrDup(pParse->db, zStartAff); + addrNxt = pLevel->addrNxt; + + /* If we are doing a reverse order scan on an ascending index, or + ** a forward order scan on a descending index, interchange the + ** start and end terms (pRangeStart and pRangeEnd). + */ + if( (nEqnColumn && bRev==(pIdx->aSortOrder[nEq]==SQLITE_SO_ASC)) + || (bRev && pIdx->nColumn==nEq) + ){ + SWAP(WhereTerm *, pRangeEnd, pRangeStart); + } + + testcase( pRangeStart && pRangeStart->eOperator & WO_LE ); + testcase( pRangeStart && pRangeStart->eOperator & WO_GE ); + testcase( pRangeEnd && pRangeEnd->eOperator & WO_LE ); + testcase( pRangeEnd && pRangeEnd->eOperator & WO_GE ); + startEq = !pRangeStart || pRangeStart->eOperator & (WO_LE|WO_GE); + endEq = !pRangeEnd || pRangeEnd->eOperator & (WO_LE|WO_GE); + start_constraints = pRangeStart || nEq>0; + + /* Seek the index cursor to the start of the range. */ + nConstraint = nEq; + if( pRangeStart ){ + Expr *pRight = pRangeStart->pExpr->pRight; + sqlite3ExprCode(pParse, pRight, regBase+nEq); + if( (pRangeStart->wtFlags & TERM_VNULL)==0 ){ + sqlite3ExprCodeIsNullJump(v, pRight, regBase+nEq, addrNxt); + } + if( zStartAff ){ + if( sqlite3CompareAffinity(pRight, zStartAff[nEq])==SQLITE_AFF_NONE){ + /* Since the comparison is to be performed with no conversions + ** applied to the operands, set the affinity to apply to pRight to + ** SQLITE_AFF_NONE. */ + zStartAff[nEq] = SQLITE_AFF_NONE; + } + if( sqlite3ExprNeedsNoAffinityChange(pRight, zStartAff[nEq]) ){ + zStartAff[nEq] = SQLITE_AFF_NONE; + } + } + nConstraint++; + testcase( pRangeStart->wtFlags & TERM_VIRTUAL ); /* EV: R-30575-11662 */ + }else if( isMinQuery ){ + sqlite3VdbeAddOp2(v, OP_Null, 0, regBase+nEq); + nConstraint++; + startEq = 0; + start_constraints = 1; + } + codeApplyAffinity(pParse, regBase, nConstraint, zStartAff); + op = aStartOp[(start_constraints<<2) + (startEq<<1) + bRev]; + assert( op!=0 ); + testcase( op==OP_Rewind ); + testcase( op==OP_Last ); + testcase( op==OP_SeekGt ); + testcase( op==OP_SeekGe ); + testcase( op==OP_SeekLe ); + testcase( op==OP_SeekLt ); + sqlite3VdbeAddOp4Int(v, op, iIdxCur, addrNxt, regBase, nConstraint); + + /* Load the value for the inequality constraint at the end of the + ** range (if any). + */ + nConstraint = nEq; + if( pRangeEnd ){ + Expr *pRight = pRangeEnd->pExpr->pRight; + sqlite3ExprCacheRemove(pParse, regBase+nEq, 1); + sqlite3ExprCode(pParse, pRight, regBase+nEq); + if( (pRangeEnd->wtFlags & TERM_VNULL)==0 ){ + sqlite3ExprCodeIsNullJump(v, pRight, regBase+nEq, addrNxt); + } + if( zEndAff ){ + if( sqlite3CompareAffinity(pRight, zEndAff[nEq])==SQLITE_AFF_NONE){ + /* Since the comparison is to be performed with no conversions + ** applied to the operands, set the affinity to apply to pRight to + ** SQLITE_AFF_NONE. */ + zEndAff[nEq] = SQLITE_AFF_NONE; + } + if( sqlite3ExprNeedsNoAffinityChange(pRight, zEndAff[nEq]) ){ + zEndAff[nEq] = SQLITE_AFF_NONE; + } + } + codeApplyAffinity(pParse, regBase, nEq+1, zEndAff); + nConstraint++; + testcase( pRangeEnd->wtFlags & TERM_VIRTUAL ); /* EV: R-30575-11662 */ + } + sqlite3DbFree(pParse->db, zStartAff); + sqlite3DbFree(pParse->db, zEndAff); + + /* Top of the loop body */ + pLevel->p2 = sqlite3VdbeCurrentAddr(v); + + /* Check if the index cursor is past the end of the range. */ + op = aEndOp[(pRangeEnd || nEq) * (1 + bRev)]; + testcase( op==OP_Noop ); + testcase( op==OP_IdxGE ); + testcase( op==OP_IdxLT ); + if( op!=OP_Noop ){ + sqlite3VdbeAddOp4Int(v, op, iIdxCur, addrNxt, regBase, nConstraint); + sqlite3VdbeChangeP5(v, endEq!=bRev ?1:0); + } + + /* If there are inequality constraints, check that the value + ** of the table column that the inequality contrains is not NULL. + ** If it is, jump to the next iteration of the loop. + */ + r1 = sqlite3GetTempReg(pParse); + testcase( pLevel->plan.wsFlags & WHERE_BTM_LIMIT ); + testcase( pLevel->plan.wsFlags & WHERE_TOP_LIMIT ); + if( (pLevel->plan.wsFlags & (WHERE_BTM_LIMIT|WHERE_TOP_LIMIT))!=0 ){ + sqlite3VdbeAddOp3(v, OP_Column, iIdxCur, nEq, r1); + sqlite3VdbeAddOp2(v, OP_IsNull, r1, addrCont); + } + sqlite3ReleaseTempReg(pParse, r1); + + /* Seek the table cursor, if required */ + disableTerm(pLevel, pRangeStart); + disableTerm(pLevel, pRangeEnd); + if( !omitTable ){ + iRowidReg = iReleaseReg = sqlite3GetTempReg(pParse); + sqlite3VdbeAddOp2(v, OP_IdxRowid, iIdxCur, iRowidReg); + sqlite3ExprCacheStore(pParse, iCur, -1, iRowidReg); + sqlite3VdbeAddOp2(v, OP_Seek, iCur, iRowidReg); /* Deferred seek */ + } + + /* Record the instruction used to terminate the loop. Disable + ** WHERE clause terms made redundant by the index range scan. + */ + if( pLevel->plan.wsFlags & WHERE_UNIQUE ){ + pLevel->op = OP_Noop; + }else if( bRev ){ + pLevel->op = OP_Prev; + }else{ + pLevel->op = OP_Next; + } + pLevel->p1 = iIdxCur; + }else + +#ifndef SQLITE_OMIT_OR_OPTIMIZATION + if( pLevel->plan.wsFlags & WHERE_MULTI_OR ){ + /* Case 4: Two or more separately indexed terms connected by OR + ** + ** Example: + ** + ** CREATE TABLE t1(a,b,c,d); + ** CREATE INDEX i1 ON t1(a); + ** CREATE INDEX i2 ON t1(b); + ** CREATE INDEX i3 ON t1(c); + ** + ** SELECT * FROM t1 WHERE a=5 OR b=7 OR (c=11 AND d=13) + ** + ** In the example, there are three indexed terms connected by OR. + ** The top of the loop looks like this: + ** + ** Null 1 # Zero the rowset in reg 1 + ** + ** Then, for each indexed term, the following. The arguments to + ** RowSetTest are such that the rowid of the current row is inserted + ** into the RowSet. If it is already present, control skips the + ** Gosub opcode and jumps straight to the code generated by WhereEnd(). + ** + ** sqlite3WhereBegin() + ** RowSetTest # Insert rowid into rowset + ** Gosub 2 A + ** sqlite3WhereEnd() + ** + ** Following the above, code to terminate the loop. Label A, the target + ** of the Gosub above, jumps to the instruction right after the Goto. + ** + ** Null 1 # Zero the rowset in reg 1 + ** Goto B # The loop is finished. + ** + ** A: # Return data, whatever. + ** + ** Return 2 # Jump back to the Gosub + ** + ** B: + ** + */ + WhereClause *pOrWc; /* The OR-clause broken out into subterms */ + SrcList *pOrTab; /* Shortened table list or OR-clause generation */ + + int regReturn = ++pParse->nMem; /* Register used with OP_Gosub */ + int regRowset = 0; /* Register for RowSet object */ + int regRowid = 0; /* Register holding rowid */ + int iLoopBody = sqlite3VdbeMakeLabel(v); /* Start of loop body */ + int iRetInit; /* Address of regReturn init */ + int untestedTerms = 0; /* Some terms not completely tested */ + int ii; /* Loop counter */ + Expr *pAndExpr = 0; /* An ".. AND (...)" expression */ + + pTerm = pLevel->plan.u.pTerm; + assert( pTerm!=0 ); + assert( pTerm->eOperator==WO_OR ); + assert( (pTerm->wtFlags & TERM_ORINFO)!=0 ); + pOrWc = &pTerm->u.pOrInfo->wc; + pLevel->op = OP_Return; + pLevel->p1 = regReturn; + + /* Set up a new SrcList ni pOrTab containing the table being scanned + ** by this loop in the a[0] slot and all notReady tables in a[1..] slots. + ** This becomes the SrcList in the recursive call to sqlite3WhereBegin(). + */ + if( pWInfo->nLevel>1 ){ + int nNotReady; /* The number of notReady tables */ + struct SrcList_item *origSrc; /* Original list of tables */ + nNotReady = pWInfo->nLevel - iLevel - 1; + pOrTab = sqlite3StackAllocRaw(pParse->db, + sizeof(*pOrTab)+ nNotReady*sizeof(pOrTab->a[0])); + if( pOrTab==0 ) return notReady; + pOrTab->nAlloc = (i16)(nNotReady + 1); + pOrTab->nSrc = pOrTab->nAlloc; + memcpy(pOrTab->a, pTabItem, sizeof(*pTabItem)); + origSrc = pWInfo->pTabList->a; + for(k=1; k<=nNotReady; k++){ + memcpy(&pOrTab->a[k], &origSrc[pLevel[k].iFrom], sizeof(pOrTab->a[k])); + } + }else{ + pOrTab = pWInfo->pTabList; + } + + /* Initialize the rowset register to contain NULL. An SQL NULL is + ** equivalent to an empty rowset. + ** + ** Also initialize regReturn to contain the address of the instruction + ** immediately following the OP_Return at the bottom of the loop. This + ** is required in a few obscure LEFT JOIN cases where control jumps + ** over the top of the loop into the body of it. In this case the + ** correct response for the end-of-loop code (the OP_Return) is to + ** fall through to the next instruction, just as an OP_Next does if + ** called on an uninitialized cursor. + */ + if( (wctrlFlags & WHERE_DUPLICATES_OK)==0 ){ + regRowset = ++pParse->nMem; + regRowid = ++pParse->nMem; + sqlite3VdbeAddOp2(v, OP_Null, 0, regRowset); + } + iRetInit = sqlite3VdbeAddOp2(v, OP_Integer, 0, regReturn); + + /* If the original WHERE clause is z of the form: (x1 OR x2 OR ...) AND y + ** Then for every term xN, evaluate as the subexpression: xN AND z + ** That way, terms in y that are factored into the disjunction will + ** be picked up by the recursive calls to sqlite3WhereBegin() below. + ** + ** Actually, each subexpression is converted to "xN AND w" where w is + ** the "interesting" terms of z - terms that did not originate in the + ** ON or USING clause of a LEFT JOIN, and terms that are usable as + ** indices. + */ + if( pWC->nTerm>1 ){ + int iTerm; + for(iTerm=0; iTermnTerm; iTerm++){ + Expr *pExpr = pWC->a[iTerm].pExpr; + if( ExprHasProperty(pExpr, EP_FromJoin) ) continue; + if( pWC->a[iTerm].wtFlags & (TERM_VIRTUAL|TERM_ORINFO) ) continue; + if( (pWC->a[iTerm].eOperator & WO_ALL)==0 ) continue; + pExpr = sqlite3ExprDup(pParse->db, pExpr, 0); + pAndExpr = sqlite3ExprAnd(pParse->db, pAndExpr, pExpr); + } + if( pAndExpr ){ + pAndExpr = sqlite3PExpr(pParse, TK_AND, 0, pAndExpr, 0); + } + } + + for(ii=0; iinTerm; ii++){ + WhereTerm *pOrTerm = &pOrWc->a[ii]; + if( pOrTerm->leftCursor==iCur || pOrTerm->eOperator==WO_AND ){ + WhereInfo *pSubWInfo; /* Info for single OR-term scan */ + Expr *pOrExpr = pOrTerm->pExpr; + if( pAndExpr ){ + pAndExpr->pLeft = pOrExpr; + pOrExpr = pAndExpr; + } + /* Loop through table entries that match term pOrTerm. */ + pSubWInfo = sqlite3WhereBegin(pParse, pOrTab, pOrExpr, 0, 0, + WHERE_OMIT_OPEN_CLOSE | WHERE_AND_ONLY | + WHERE_FORCE_TABLE | WHERE_ONETABLE_ONLY); + if( pSubWInfo ){ + explainOneScan( + pParse, pOrTab, &pSubWInfo->a[0], iLevel, pLevel->iFrom, 0 + ); + if( (wctrlFlags & WHERE_DUPLICATES_OK)==0 ){ + int iSet = ((ii==pOrWc->nTerm-1)?-1:ii); + int r; + r = sqlite3ExprCodeGetColumn(pParse, pTabItem->pTab, -1, iCur, + regRowid, 0); + sqlite3VdbeAddOp4Int(v, OP_RowSetTest, regRowset, + sqlite3VdbeCurrentAddr(v)+2, r, iSet); + } + sqlite3VdbeAddOp2(v, OP_Gosub, regReturn, iLoopBody); + + /* The pSubWInfo->untestedTerms flag means that this OR term + ** contained one or more AND term from a notReady table. The + ** terms from the notReady table could not be tested and will + ** need to be tested later. + */ + if( pSubWInfo->untestedTerms ) untestedTerms = 1; + + /* Finish the loop through table entries that match term pOrTerm. */ + sqlite3WhereEnd(pSubWInfo); + } + } + } + if( pAndExpr ){ + pAndExpr->pLeft = 0; + sqlite3ExprDelete(pParse->db, pAndExpr); + } + sqlite3VdbeChangeP1(v, iRetInit, sqlite3VdbeCurrentAddr(v)); + sqlite3VdbeAddOp2(v, OP_Goto, 0, pLevel->addrBrk); + sqlite3VdbeResolveLabel(v, iLoopBody); + + if( pWInfo->nLevel>1 ) sqlite3StackFree(pParse->db, pOrTab); + if( !untestedTerms ) disableTerm(pLevel, pTerm); + }else +#endif /* SQLITE_OMIT_OR_OPTIMIZATION */ + + { + /* Case 5: There is no usable index. We must do a complete + ** scan of the entire table. + */ + static const u8 aStep[] = { OP_Next, OP_Prev }; + static const u8 aStart[] = { OP_Rewind, OP_Last }; + assert( bRev==0 || bRev==1 ); + assert( omitTable==0 ); + pLevel->op = aStep[bRev]; + pLevel->p1 = iCur; + pLevel->p2 = 1 + sqlite3VdbeAddOp2(v, aStart[bRev], iCur, addrBrk); + pLevel->p5 = SQLITE_STMTSTATUS_FULLSCAN_STEP; + } + notReady &= ~getMask(pWC->pMaskSet, iCur); + + /* Insert code to test every subexpression that can be completely + ** computed using the current set of tables. + ** + ** IMPLEMENTATION-OF: R-49525-50935 Terms that cannot be satisfied through + ** the use of indices become tests that are evaluated against each row of + ** the relevant input tables. + */ + for(pTerm=pWC->a, j=pWC->nTerm; j>0; j--, pTerm++){ + Expr *pE; + testcase( pTerm->wtFlags & TERM_VIRTUAL ); /* IMP: R-30575-11662 */ + testcase( pTerm->wtFlags & TERM_CODED ); + if( pTerm->wtFlags & (TERM_VIRTUAL|TERM_CODED) ) continue; + if( (pTerm->prereqAll & notReady)!=0 ){ + testcase( pWInfo->untestedTerms==0 + && (pWInfo->wctrlFlags & WHERE_ONETABLE_ONLY)!=0 ); + pWInfo->untestedTerms = 1; + continue; + } + pE = pTerm->pExpr; + assert( pE!=0 ); + if( pLevel->iLeftJoin && !ExprHasProperty(pE, EP_FromJoin) ){ + continue; + } + sqlite3ExprIfFalse(pParse, pE, addrCont, SQLITE_JUMPIFNULL); + pTerm->wtFlags |= TERM_CODED; + } + + /* For a LEFT OUTER JOIN, generate code that will record the fact that + ** at least one row of the right table has matched the left table. + */ + if( pLevel->iLeftJoin ){ + pLevel->addrFirst = sqlite3VdbeCurrentAddr(v); + sqlite3VdbeAddOp2(v, OP_Integer, 1, pLevel->iLeftJoin); + VdbeComment((v, "record LEFT JOIN hit")); + sqlite3ExprCacheClear(pParse); + for(pTerm=pWC->a, j=0; jnTerm; j++, pTerm++){ + testcase( pTerm->wtFlags & TERM_VIRTUAL ); /* IMP: R-30575-11662 */ + testcase( pTerm->wtFlags & TERM_CODED ); + if( pTerm->wtFlags & (TERM_VIRTUAL|TERM_CODED) ) continue; + if( (pTerm->prereqAll & notReady)!=0 ){ + assert( pWInfo->untestedTerms ); + continue; + } + assert( pTerm->pExpr ); + sqlite3ExprIfFalse(pParse, pTerm->pExpr, addrCont, SQLITE_JUMPIFNULL); + pTerm->wtFlags |= TERM_CODED; + } + } + sqlite3ReleaseTempReg(pParse, iReleaseReg); + + return notReady; +} + +#if defined(SQLITE_TEST) +/* +** The following variable holds a text description of query plan generated +** by the most recent call to sqlite3WhereBegin(). Each call to WhereBegin +** overwrites the previous. This information is used for testing and +** analysis only. +*/ +SQLITE_API char sqlite3_query_plan[BMS*2*40]; /* Text of the join */ +static int nQPlan = 0; /* Next free slow in _query_plan[] */ + +#endif /* SQLITE_TEST */ + + +/* +** Free a WhereInfo structure +*/ +static void whereInfoFree(sqlite3 *db, WhereInfo *pWInfo){ + if( ALWAYS(pWInfo) ){ + int i; + for(i=0; inLevel; i++){ + sqlite3_index_info *pInfo = pWInfo->a[i].pIdxInfo; + if( pInfo ){ + /* assert( pInfo->needToFreeIdxStr==0 || db->mallocFailed ); */ + if( pInfo->needToFreeIdxStr ){ + sqlite3_free(pInfo->idxStr); + } + sqlite3DbFree(db, pInfo); + } + if( pWInfo->a[i].plan.wsFlags & WHERE_TEMP_INDEX ){ + Index *pIdx = pWInfo->a[i].plan.u.pIdx; + if( pIdx ){ + sqlite3DbFree(db, pIdx->zColAff); + sqlite3DbFree(db, pIdx); + } + } + } + whereClauseClear(pWInfo->pWC); + sqlite3DbFree(db, pWInfo); + } +} + + +/* +** Generate the beginning of the loop used for WHERE clause processing. +** The return value is a pointer to an opaque structure that contains +** information needed to terminate the loop. Later, the calling routine +** should invoke sqlite3WhereEnd() with the return value of this function +** in order to complete the WHERE clause processing. +** +** If an error occurs, this routine returns NULL. +** +** The basic idea is to do a nested loop, one loop for each table in +** the FROM clause of a select. (INSERT and UPDATE statements are the +** same as a SELECT with only a single table in the FROM clause.) For +** example, if the SQL is this: +** +** SELECT * FROM t1, t2, t3 WHERE ...; +** +** Then the code generated is conceptually like the following: +** +** foreach row1 in t1 do \ Code generated +** foreach row2 in t2 do |-- by sqlite3WhereBegin() +** foreach row3 in t3 do / +** ... +** end \ Code generated +** end |-- by sqlite3WhereEnd() +** end / +** +** Note that the loops might not be nested in the order in which they +** appear in the FROM clause if a different order is better able to make +** use of indices. Note also that when the IN operator appears in +** the WHERE clause, it might result in additional nested loops for +** scanning through all values on the right-hand side of the IN. +** +** There are Btree cursors associated with each table. t1 uses cursor +** number pTabList->a[0].iCursor. t2 uses the cursor pTabList->a[1].iCursor. +** And so forth. This routine generates code to open those VDBE cursors +** and sqlite3WhereEnd() generates the code to close them. +** +** The code that sqlite3WhereBegin() generates leaves the cursors named +** in pTabList pointing at their appropriate entries. The [...] code +** can use OP_Column and OP_Rowid opcodes on these cursors to extract +** data from the various tables of the loop. +** +** If the WHERE clause is empty, the foreach loops must each scan their +** entire tables. Thus a three-way join is an O(N^3) operation. But if +** the tables have indices and there are terms in the WHERE clause that +** refer to those indices, a complete table scan can be avoided and the +** code will run much faster. Most of the work of this routine is checking +** to see if there are indices that can be used to speed up the loop. +** +** Terms of the WHERE clause are also used to limit which rows actually +** make it to the "..." in the middle of the loop. After each "foreach", +** terms of the WHERE clause that use only terms in that loop and outer +** loops are evaluated and if false a jump is made around all subsequent +** inner loops (or around the "..." if the test occurs within the inner- +** most loop) +** +** OUTER JOINS +** +** An outer join of tables t1 and t2 is conceptally coded as follows: +** +** foreach row1 in t1 do +** flag = 0 +** foreach row2 in t2 do +** start: +** ... +** flag = 1 +** end +** if flag==0 then +** move the row2 cursor to a null row +** goto start +** fi +** end +** +** ORDER BY CLAUSE PROCESSING +** +** *ppOrderBy is a pointer to the ORDER BY clause of a SELECT statement, +** if there is one. If there is no ORDER BY clause or if this routine +** is called from an UPDATE or DELETE statement, then ppOrderBy is NULL. +** +** If an index can be used so that the natural output order of the table +** scan is correct for the ORDER BY clause, then that index is used and +** *ppOrderBy is set to NULL. This is an optimization that prevents an +** unnecessary sort of the result set if an index appropriate for the +** ORDER BY clause already exists. +** +** If the where clause loops cannot be arranged to provide the correct +** output order, then the *ppOrderBy is unchanged. +*/ +SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin( + Parse *pParse, /* The parser context */ + SrcList *pTabList, /* A list of all tables to be scanned */ + Expr *pWhere, /* The WHERE clause */ + ExprList **ppOrderBy, /* An ORDER BY clause, or NULL */ + ExprList *pDistinct, /* The select-list for DISTINCT queries - or NULL */ + u16 wctrlFlags /* One of the WHERE_* flags defined in sqliteInt.h */ +){ + int i; /* Loop counter */ + int nByteWInfo; /* Num. bytes allocated for WhereInfo struct */ + int nTabList; /* Number of elements in pTabList */ + WhereInfo *pWInfo; /* Will become the return value of this function */ + Vdbe *v = pParse->pVdbe; /* The virtual database engine */ + Bitmask notReady; /* Cursors that are not yet positioned */ + WhereMaskSet *pMaskSet; /* The expression mask set */ + WhereClause *pWC; /* Decomposition of the WHERE clause */ + struct SrcList_item *pTabItem; /* A single entry from pTabList */ + WhereLevel *pLevel; /* A single level in the pWInfo list */ + int iFrom; /* First unused FROM clause element */ + int andFlags; /* AND-ed combination of all pWC->a[].wtFlags */ + sqlite3 *db; /* Database connection */ + + /* The number of tables in the FROM clause is limited by the number of + ** bits in a Bitmask + */ + testcase( pTabList->nSrc==BMS ); + if( pTabList->nSrc>BMS ){ + sqlite3ErrorMsg(pParse, "at most %d tables in a join", BMS); + return 0; + } + + /* This function normally generates a nested loop for all tables in + ** pTabList. But if the WHERE_ONETABLE_ONLY flag is set, then we should + ** only generate code for the first table in pTabList and assume that + ** any cursors associated with subsequent tables are uninitialized. + */ + nTabList = (wctrlFlags & WHERE_ONETABLE_ONLY) ? 1 : pTabList->nSrc; + + /* Allocate and initialize the WhereInfo structure that will become the + ** return value. A single allocation is used to store the WhereInfo + ** struct, the contents of WhereInfo.a[], the WhereClause structure + ** and the WhereMaskSet structure. Since WhereClause contains an 8-byte + ** field (type Bitmask) it must be aligned on an 8-byte boundary on + ** some architectures. Hence the ROUND8() below. + */ + db = pParse->db; + nByteWInfo = ROUND8(sizeof(WhereInfo)+(nTabList-1)*sizeof(WhereLevel)); + pWInfo = sqlite3DbMallocZero(db, + nByteWInfo + + sizeof(WhereClause) + + sizeof(WhereMaskSet) + ); + if( db->mallocFailed ){ + sqlite3DbFree(db, pWInfo); + pWInfo = 0; + goto whereBeginError; + } + pWInfo->nLevel = nTabList; + pWInfo->pParse = pParse; + pWInfo->pTabList = pTabList; + pWInfo->iBreak = sqlite3VdbeMakeLabel(v); + pWInfo->pWC = pWC = (WhereClause *)&((u8 *)pWInfo)[nByteWInfo]; + pWInfo->wctrlFlags = wctrlFlags; + pWInfo->savedNQueryLoop = pParse->nQueryLoop; + pMaskSet = (WhereMaskSet*)&pWC[1]; + + /* Disable the DISTINCT optimization if SQLITE_DistinctOpt is set via + ** sqlite3_test_ctrl(SQLITE_TESTCTRL_OPTIMIZATIONS,...) */ + if( db->flags & SQLITE_DistinctOpt ) pDistinct = 0; + + /* Split the WHERE clause into separate subexpressions where each + ** subexpression is separated by an AND operator. + */ + initMaskSet(pMaskSet); + whereClauseInit(pWC, pParse, pMaskSet, wctrlFlags); + sqlite3ExprCodeConstants(pParse, pWhere); + whereSplit(pWC, pWhere, TK_AND); /* IMP: R-15842-53296 */ + + /* Special case: a WHERE clause that is constant. Evaluate the + ** expression and either jump over all of the code or fall thru. + */ + if( pWhere && (nTabList==0 || sqlite3ExprIsConstantNotJoin(pWhere)) ){ + sqlite3ExprIfFalse(pParse, pWhere, pWInfo->iBreak, SQLITE_JUMPIFNULL); + pWhere = 0; + } + + /* Assign a bit from the bitmask to every term in the FROM clause. + ** + ** When assigning bitmask values to FROM clause cursors, it must be + ** the case that if X is the bitmask for the N-th FROM clause term then + ** the bitmask for all FROM clause terms to the left of the N-th term + ** is (X-1). An expression from the ON clause of a LEFT JOIN can use + ** its Expr.iRightJoinTable value to find the bitmask of the right table + ** of the join. Subtracting one from the right table bitmask gives a + ** bitmask for all tables to the left of the join. Knowing the bitmask + ** for all tables to the left of a left join is important. Ticket #3015. + ** + ** Configure the WhereClause.vmask variable so that bits that correspond + ** to virtual table cursors are set. This is used to selectively disable + ** the OR-to-IN transformation in exprAnalyzeOrTerm(). It is not helpful + ** with virtual tables. + ** + ** Note that bitmasks are created for all pTabList->nSrc tables in + ** pTabList, not just the first nTabList tables. nTabList is normally + ** equal to pTabList->nSrc but might be shortened to 1 if the + ** WHERE_ONETABLE_ONLY flag is set. + */ + assert( pWC->vmask==0 && pMaskSet->n==0 ); + for(i=0; inSrc; i++){ + createMask(pMaskSet, pTabList->a[i].iCursor); +#ifndef SQLITE_OMIT_VIRTUALTABLE + if( ALWAYS(pTabList->a[i].pTab) && IsVirtual(pTabList->a[i].pTab) ){ + pWC->vmask |= ((Bitmask)1 << i); + } +#endif + } +#ifndef NDEBUG + { + Bitmask toTheLeft = 0; + for(i=0; inSrc; i++){ + Bitmask m = getMask(pMaskSet, pTabList->a[i].iCursor); + assert( (m-1)==toTheLeft ); + toTheLeft |= m; + } + } +#endif + + /* Analyze all of the subexpressions. Note that exprAnalyze() might + ** add new virtual terms onto the end of the WHERE clause. We do not + ** want to analyze these virtual terms, so start analyzing at the end + ** and work forward so that the added virtual terms are never processed. + */ + exprAnalyzeAll(pTabList, pWC); + if( db->mallocFailed ){ + goto whereBeginError; + } + + /* Check if the DISTINCT qualifier, if there is one, is redundant. + ** If it is, then set pDistinct to NULL and WhereInfo.eDistinct to + ** WHERE_DISTINCT_UNIQUE to tell the caller to ignore the DISTINCT. + */ + if( pDistinct && isDistinctRedundant(pParse, pTabList, pWC, pDistinct) ){ + pDistinct = 0; + pWInfo->eDistinct = WHERE_DISTINCT_UNIQUE; + } + + /* Chose the best index to use for each table in the FROM clause. + ** + ** This loop fills in the following fields: + ** + ** pWInfo->a[].pIdx The index to use for this level of the loop. + ** pWInfo->a[].wsFlags WHERE_xxx flags associated with pIdx + ** pWInfo->a[].nEq The number of == and IN constraints + ** pWInfo->a[].iFrom Which term of the FROM clause is being coded + ** pWInfo->a[].iTabCur The VDBE cursor for the database table + ** pWInfo->a[].iIdxCur The VDBE cursor for the index + ** pWInfo->a[].pTerm When wsFlags==WO_OR, the OR-clause term + ** + ** This loop also figures out the nesting order of tables in the FROM + ** clause. + */ + notReady = ~(Bitmask)0; + andFlags = ~0; + WHERETRACE(("*** Optimizer Start ***\n")); + for(i=iFrom=0, pLevel=pWInfo->a; i=0 && bestJ<0; isOptimal--){ + Bitmask mask; /* Mask of tables not yet ready */ + for(j=iFrom, pTabItem=&pTabList->a[j]; jjointype & (JT_LEFT|JT_CROSS))!=0; + if( j!=iFrom && doNotReorder ) break; + m = getMask(pMaskSet, pTabItem->iCursor); + if( (m & notReady)==0 ){ + if( j==iFrom ) iFrom++; + continue; + } + mask = (isOptimal ? m : notReady); + pOrderBy = ((i==0 && ppOrderBy )?*ppOrderBy:0); + pDist = (i==0 ? pDistinct : 0); + if( pTabItem->pIndex==0 ) nUnconstrained++; + + WHERETRACE(("=== trying table %d with isOptimal=%d ===\n", + j, isOptimal)); + assert( pTabItem->pTab ); +#ifndef SQLITE_OMIT_VIRTUALTABLE + if( IsVirtual(pTabItem->pTab) ){ + sqlite3_index_info **pp = &pWInfo->a[j].pIdxInfo; + bestVirtualIndex(pParse, pWC, pTabItem, mask, notReady, pOrderBy, + &sCost, pp); + }else +#endif + { + bestBtreeIndex(pParse, pWC, pTabItem, mask, notReady, pOrderBy, + pDist, &sCost); + } + assert( isOptimal || (sCost.used¬Ready)==0 ); + + /* If an INDEXED BY clause is present, then the plan must use that + ** index if it uses any index at all */ + assert( pTabItem->pIndex==0 + || (sCost.plan.wsFlags & WHERE_NOT_FULLSCAN)==0 + || sCost.plan.u.pIdx==pTabItem->pIndex ); + + if( isOptimal && (sCost.plan.wsFlags & WHERE_NOT_FULLSCAN)==0 ){ + notIndexed |= m; + } + + /* Conditions under which this table becomes the best so far: + ** + ** (1) The table must not depend on other tables that have not + ** yet run. + ** + ** (2) A full-table-scan plan cannot supercede indexed plan unless + ** the full-table-scan is an "optimal" plan as defined above. + ** + ** (3) All tables have an INDEXED BY clause or this table lacks an + ** INDEXED BY clause or this table uses the specific + ** index specified by its INDEXED BY clause. This rule ensures + ** that a best-so-far is always selected even if an impossible + ** combination of INDEXED BY clauses are given. The error + ** will be detected and relayed back to the application later. + ** The NEVER() comes about because rule (2) above prevents + ** An indexable full-table-scan from reaching rule (3). + ** + ** (4) The plan cost must be lower than prior plans or else the + ** cost must be the same and the number of rows must be lower. + */ + if( (sCost.used¬Ready)==0 /* (1) */ + && (bestJ<0 || (notIndexed&m)!=0 /* (2) */ + || (bestPlan.plan.wsFlags & WHERE_NOT_FULLSCAN)==0 + || (sCost.plan.wsFlags & WHERE_NOT_FULLSCAN)!=0) + && (nUnconstrained==0 || pTabItem->pIndex==0 /* (3) */ + || NEVER((sCost.plan.wsFlags & WHERE_NOT_FULLSCAN)!=0)) + && (bestJ<0 || sCost.rCost=0 ); + assert( notReady & getMask(pMaskSet, pTabList->a[bestJ].iCursor) ); + WHERETRACE(("*** Optimizer selects table %d for loop %d" + " with cost=%g and nRow=%g\n", + bestJ, pLevel-pWInfo->a, bestPlan.rCost, bestPlan.plan.nRow)); + /* The ALWAYS() that follows was added to hush up clang scan-build */ + if( (bestPlan.plan.wsFlags & WHERE_ORDERBY)!=0 && ALWAYS(ppOrderBy) ){ + *ppOrderBy = 0; + } + if( (bestPlan.plan.wsFlags & WHERE_DISTINCT)!=0 ){ + assert( pWInfo->eDistinct==0 ); + pWInfo->eDistinct = WHERE_DISTINCT_ORDERED; + } + andFlags &= bestPlan.plan.wsFlags; + pLevel->plan = bestPlan.plan; + testcase( bestPlan.plan.wsFlags & WHERE_INDEXED ); + testcase( bestPlan.plan.wsFlags & WHERE_TEMP_INDEX ); + if( bestPlan.plan.wsFlags & (WHERE_INDEXED|WHERE_TEMP_INDEX) ){ + pLevel->iIdxCur = pParse->nTab++; + }else{ + pLevel->iIdxCur = -1; + } + notReady &= ~getMask(pMaskSet, pTabList->a[bestJ].iCursor); + pLevel->iFrom = (u8)bestJ; + if( bestPlan.plan.nRow>=(double)1 ){ + pParse->nQueryLoop *= bestPlan.plan.nRow; + } + + /* Check that if the table scanned by this loop iteration had an + ** INDEXED BY clause attached to it, that the named index is being + ** used for the scan. If not, then query compilation has failed. + ** Return an error. + */ + pIdx = pTabList->a[bestJ].pIndex; + if( pIdx ){ + if( (bestPlan.plan.wsFlags & WHERE_INDEXED)==0 ){ + sqlite3ErrorMsg(pParse, "cannot use index: %s", pIdx->zName); + goto whereBeginError; + }else{ + /* If an INDEXED BY clause is used, the bestIndex() function is + ** guaranteed to find the index specified in the INDEXED BY clause + ** if it find an index at all. */ + assert( bestPlan.plan.u.pIdx==pIdx ); + } + } + } + WHERETRACE(("*** Optimizer Finished ***\n")); + if( pParse->nErr || db->mallocFailed ){ + goto whereBeginError; + } + + /* If the total query only selects a single row, then the ORDER BY + ** clause is irrelevant. + */ + if( (andFlags & WHERE_UNIQUE)!=0 && ppOrderBy ){ + *ppOrderBy = 0; + } + + /* If the caller is an UPDATE or DELETE statement that is requesting + ** to use a one-pass algorithm, determine if this is appropriate. + ** The one-pass algorithm only works if the WHERE clause constraints + ** the statement to update a single row. + */ + assert( (wctrlFlags & WHERE_ONEPASS_DESIRED)==0 || pWInfo->nLevel==1 ); + if( (wctrlFlags & WHERE_ONEPASS_DESIRED)!=0 && (andFlags & WHERE_UNIQUE)!=0 ){ + pWInfo->okOnePass = 1; + pWInfo->a[0].plan.wsFlags &= ~WHERE_IDX_ONLY; + } + + /* Open all tables in the pTabList and any indices selected for + ** searching those tables. + */ + sqlite3CodeVerifySchema(pParse, -1); /* Insert the cookie verifier Goto */ + notReady = ~(Bitmask)0; + pWInfo->nRowOut = (double)1; + for(i=0, pLevel=pWInfo->a; ia[pLevel->iFrom]; + pTab = pTabItem->pTab; + pLevel->iTabCur = pTabItem->iCursor; + pWInfo->nRowOut *= pLevel->plan.nRow; + iDb = sqlite3SchemaToIndex(db, pTab->pSchema); + if( (pTab->tabFlags & TF_Ephemeral)!=0 || pTab->pSelect ){ + /* Do nothing */ + }else +#ifndef SQLITE_OMIT_VIRTUALTABLE + if( (pLevel->plan.wsFlags & WHERE_VIRTUALTABLE)!=0 ){ + const char *pVTab = (const char *)sqlite3GetVTable(db, pTab); + int iCur = pTabItem->iCursor; + sqlite3VdbeAddOp4(v, OP_VOpen, iCur, 0, 0, pVTab, P4_VTAB); + }else +#endif + if( (pLevel->plan.wsFlags & WHERE_IDX_ONLY)==0 + && (wctrlFlags & WHERE_OMIT_OPEN_CLOSE)==0 ){ + int op = pWInfo->okOnePass ? OP_OpenWrite : OP_OpenRead; + sqlite3OpenTable(pParse, pTabItem->iCursor, iDb, pTab, op); + testcase( pTab->nCol==BMS-1 ); + testcase( pTab->nCol==BMS ); + if( !pWInfo->okOnePass && pTab->nColcolUsed; + int n = 0; + for(; b; b=b>>1, n++){} + sqlite3VdbeChangeP4(v, sqlite3VdbeCurrentAddr(v)-1, + SQLITE_INT_TO_PTR(n), P4_INT32); + assert( n<=pTab->nCol ); + } + }else{ + sqlite3TableLock(pParse, iDb, pTab->tnum, 0, pTab->zName); + } +#ifndef SQLITE_OMIT_AUTOMATIC_INDEX + if( (pLevel->plan.wsFlags & WHERE_TEMP_INDEX)!=0 ){ + constructAutomaticIndex(pParse, pWC, pTabItem, notReady, pLevel); + }else +#endif + if( (pLevel->plan.wsFlags & WHERE_INDEXED)!=0 ){ + Index *pIx = pLevel->plan.u.pIdx; + KeyInfo *pKey = sqlite3IndexKeyinfo(pParse, pIx); + int iIdxCur = pLevel->iIdxCur; + assert( pIx->pSchema==pTab->pSchema ); + assert( iIdxCur>=0 ); + sqlite3VdbeAddOp4(v, OP_OpenRead, iIdxCur, pIx->tnum, iDb, + (char*)pKey, P4_KEYINFO_HANDOFF); + VdbeComment((v, "%s", pIx->zName)); + } + sqlite3CodeVerifySchema(pParse, iDb); + notReady &= ~getMask(pWC->pMaskSet, pTabItem->iCursor); + } + pWInfo->iTop = sqlite3VdbeCurrentAddr(v); + if( db->mallocFailed ) goto whereBeginError; + + /* Generate the code to do the search. Each iteration of the for + ** loop below generates code for a single nested loop of the VM + ** program. + */ + notReady = ~(Bitmask)0; + for(i=0; ia[i]; + explainOneScan(pParse, pTabList, pLevel, i, pLevel->iFrom, wctrlFlags); + notReady = codeOneLoopStart(pWInfo, i, wctrlFlags, notReady); + pWInfo->iContinue = pLevel->addrCont; + } + +#ifdef SQLITE_TEST /* For testing and debugging use only */ + /* Record in the query plan information about the current table + ** and the index used to access it (if any). If the table itself + ** is not used, its name is just '{}'. If no index is used + ** the index is listed as "{}". If the primary key is used the + ** index name is '*'. + */ + for(i=0; ia[i]; + pTabItem = &pTabList->a[pLevel->iFrom]; + z = pTabItem->zAlias; + if( z==0 ) z = pTabItem->pTab->zName; + n = sqlite3Strlen30(z); + if( n+nQPlan < sizeof(sqlite3_query_plan)-10 ){ + if( pLevel->plan.wsFlags & WHERE_IDX_ONLY ){ + memcpy(&sqlite3_query_plan[nQPlan], "{}", 2); + nQPlan += 2; + }else{ + memcpy(&sqlite3_query_plan[nQPlan], z, n); + nQPlan += n; + } + sqlite3_query_plan[nQPlan++] = ' '; + } + testcase( pLevel->plan.wsFlags & WHERE_ROWID_EQ ); + testcase( pLevel->plan.wsFlags & WHERE_ROWID_RANGE ); + if( pLevel->plan.wsFlags & (WHERE_ROWID_EQ|WHERE_ROWID_RANGE) ){ + memcpy(&sqlite3_query_plan[nQPlan], "* ", 2); + nQPlan += 2; + }else if( (pLevel->plan.wsFlags & WHERE_INDEXED)!=0 ){ + n = sqlite3Strlen30(pLevel->plan.u.pIdx->zName); + if( n+nQPlan < sizeof(sqlite3_query_plan)-2 ){ + memcpy(&sqlite3_query_plan[nQPlan], pLevel->plan.u.pIdx->zName, n); + nQPlan += n; + sqlite3_query_plan[nQPlan++] = ' '; + } + }else{ + memcpy(&sqlite3_query_plan[nQPlan], "{} ", 3); + nQPlan += 3; + } + } + while( nQPlan>0 && sqlite3_query_plan[nQPlan-1]==' ' ){ + sqlite3_query_plan[--nQPlan] = 0; + } + sqlite3_query_plan[nQPlan] = 0; + nQPlan = 0; +#endif /* SQLITE_TEST // Testing and debugging use only */ + + /* Record the continuation address in the WhereInfo structure. Then + ** clean up and return. + */ + return pWInfo; + + /* Jump here if malloc fails */ +whereBeginError: + if( pWInfo ){ + pParse->nQueryLoop = pWInfo->savedNQueryLoop; + whereInfoFree(db, pWInfo); + } + return 0; +} + +/* +** Generate the end of the WHERE loop. See comments on +** sqlite3WhereBegin() for additional information. +*/ +SQLITE_PRIVATE void sqlite3WhereEnd(WhereInfo *pWInfo){ + Parse *pParse = pWInfo->pParse; + Vdbe *v = pParse->pVdbe; + int i; + WhereLevel *pLevel; + SrcList *pTabList = pWInfo->pTabList; + sqlite3 *db = pParse->db; + + /* Generate loop termination code. + */ + sqlite3ExprCacheClear(pParse); + for(i=pWInfo->nLevel-1; i>=0; i--){ + pLevel = &pWInfo->a[i]; + sqlite3VdbeResolveLabel(v, pLevel->addrCont); + if( pLevel->op!=OP_Noop ){ + sqlite3VdbeAddOp2(v, pLevel->op, pLevel->p1, pLevel->p2); + sqlite3VdbeChangeP5(v, pLevel->p5); + } + if( pLevel->plan.wsFlags & WHERE_IN_ABLE && pLevel->u.in.nIn>0 ){ + struct InLoop *pIn; + int j; + sqlite3VdbeResolveLabel(v, pLevel->addrNxt); + for(j=pLevel->u.in.nIn, pIn=&pLevel->u.in.aInLoop[j-1]; j>0; j--, pIn--){ + sqlite3VdbeJumpHere(v, pIn->addrInTop+1); + sqlite3VdbeAddOp2(v, OP_Next, pIn->iCur, pIn->addrInTop); + sqlite3VdbeJumpHere(v, pIn->addrInTop-1); + } + sqlite3DbFree(db, pLevel->u.in.aInLoop); + } + sqlite3VdbeResolveLabel(v, pLevel->addrBrk); + if( pLevel->iLeftJoin ){ + int addr; + addr = sqlite3VdbeAddOp1(v, OP_IfPos, pLevel->iLeftJoin); + assert( (pLevel->plan.wsFlags & WHERE_IDX_ONLY)==0 + || (pLevel->plan.wsFlags & WHERE_INDEXED)!=0 ); + if( (pLevel->plan.wsFlags & WHERE_IDX_ONLY)==0 ){ + sqlite3VdbeAddOp1(v, OP_NullRow, pTabList->a[i].iCursor); + } + if( pLevel->iIdxCur>=0 ){ + sqlite3VdbeAddOp1(v, OP_NullRow, pLevel->iIdxCur); + } + if( pLevel->op==OP_Return ){ + sqlite3VdbeAddOp2(v, OP_Gosub, pLevel->p1, pLevel->addrFirst); + }else{ + sqlite3VdbeAddOp2(v, OP_Goto, 0, pLevel->addrFirst); + } + sqlite3VdbeJumpHere(v, addr); + } + } + + /* The "break" point is here, just past the end of the outer loop. + ** Set it. + */ + sqlite3VdbeResolveLabel(v, pWInfo->iBreak); + + /* Close all of the cursors that were opened by sqlite3WhereBegin. + */ + assert( pWInfo->nLevel==1 || pWInfo->nLevel==pTabList->nSrc ); + for(i=0, pLevel=pWInfo->a; inLevel; i++, pLevel++){ + struct SrcList_item *pTabItem = &pTabList->a[pLevel->iFrom]; + Table *pTab = pTabItem->pTab; + assert( pTab!=0 ); + if( (pTab->tabFlags & TF_Ephemeral)==0 + && pTab->pSelect==0 + && (pWInfo->wctrlFlags & WHERE_OMIT_OPEN_CLOSE)==0 + ){ + int ws = pLevel->plan.wsFlags; + if( !pWInfo->okOnePass && (ws & WHERE_IDX_ONLY)==0 ){ + sqlite3VdbeAddOp1(v, OP_Close, pTabItem->iCursor); + } + if( (ws & WHERE_INDEXED)!=0 && (ws & WHERE_TEMP_INDEX)==0 ){ + sqlite3VdbeAddOp1(v, OP_Close, pLevel->iIdxCur); + } + } + + /* If this scan uses an index, make code substitutions to read data + ** from the index in preference to the table. Sometimes, this means + ** the table need never be read from. This is a performance boost, + ** as the vdbe level waits until the table is read before actually + ** seeking the table cursor to the record corresponding to the current + ** position in the index. + ** + ** Calls to the code generator in between sqlite3WhereBegin and + ** sqlite3WhereEnd will have created code that references the table + ** directly. This loop scans all that code looking for opcodes + ** that reference the table and converts them into opcodes that + ** reference the index. + */ + if( (pLevel->plan.wsFlags & WHERE_INDEXED)!=0 && !db->mallocFailed){ + int k, j, last; + VdbeOp *pOp; + Index *pIdx = pLevel->plan.u.pIdx; + + assert( pIdx!=0 ); + pOp = sqlite3VdbeGetOp(v, pWInfo->iTop); + last = sqlite3VdbeCurrentAddr(v); + for(k=pWInfo->iTop; kp1!=pLevel->iTabCur ) continue; + if( pOp->opcode==OP_Column ){ + for(j=0; jnColumn; j++){ + if( pOp->p2==pIdx->aiColumn[j] ){ + pOp->p2 = j; + pOp->p1 = pLevel->iIdxCur; + break; + } + } + assert( (pLevel->plan.wsFlags & WHERE_IDX_ONLY)==0 + || jnColumn ); + }else if( pOp->opcode==OP_Rowid ){ + pOp->p1 = pLevel->iIdxCur; + pOp->opcode = OP_IdxRowid; + } + } + } + } + + /* Final cleanup + */ + pParse->nQueryLoop = pWInfo->savedNQueryLoop; + whereInfoFree(db, pWInfo); + return; +} + +/************** End of where.c ***********************************************/ +/************** Begin file parse.c *******************************************/ +/* Driver template for the LEMON parser generator. +** The author disclaims copyright to this source code. +** +** This version of "lempar.c" is modified, slightly, for use by SQLite. +** The only modifications are the addition of a couple of NEVER() +** macros to disable tests that are needed in the case of a general +** LALR(1) grammar but which are always false in the +** specific grammar used by SQLite. +*/ +/* First off, code is included that follows the "include" declaration +** in the input grammar file. */ +/* #include */ + + +/* +** Disable all error recovery processing in the parser push-down +** automaton. +*/ +#define YYNOERRORRECOVERY 1 + +/* +** Make yytestcase() the same as testcase() +*/ +#define yytestcase(X) testcase(X) + +/* +** An instance of this structure holds information about the +** LIMIT clause of a SELECT statement. +*/ +struct LimitVal { + Expr *pLimit; /* The LIMIT expression. NULL if there is no limit */ + Expr *pOffset; /* The OFFSET expression. NULL if there is none */ +}; + +/* +** An instance of this structure is used to store the LIKE, +** GLOB, NOT LIKE, and NOT GLOB operators. +*/ +struct LikeOp { + Token eOperator; /* "like" or "glob" or "regexp" */ + int bNot; /* True if the NOT keyword is present */ +}; + +/* +** An instance of the following structure describes the event of a +** TRIGGER. "a" is the event type, one of TK_UPDATE, TK_INSERT, +** TK_DELETE, or TK_INSTEAD. If the event is of the form +** +** UPDATE ON (a,b,c) +** +** Then the "b" IdList records the list "a,b,c". +*/ +struct TrigEvent { int a; IdList * b; }; + +/* +** An instance of this structure holds the ATTACH key and the key type. +*/ +struct AttachKey { int type; Token key; }; + +/* +** One or more VALUES claues +*/ +struct ValueList { + ExprList *pList; + Select *pSelect; +}; + + + /* This is a utility routine used to set the ExprSpan.zStart and + ** ExprSpan.zEnd values of pOut so that the span covers the complete + ** range of text beginning with pStart and going to the end of pEnd. + */ + static void spanSet(ExprSpan *pOut, Token *pStart, Token *pEnd){ + pOut->zStart = pStart->z; + pOut->zEnd = &pEnd->z[pEnd->n]; + } + + /* Construct a new Expr object from a single identifier. Use the + ** new Expr to populate pOut. Set the span of pOut to be the identifier + ** that created the expression. + */ + static void spanExpr(ExprSpan *pOut, Parse *pParse, int op, Token *pValue){ + pOut->pExpr = sqlite3PExpr(pParse, op, 0, 0, pValue); + pOut->zStart = pValue->z; + pOut->zEnd = &pValue->z[pValue->n]; + } + + /* This routine constructs a binary expression node out of two ExprSpan + ** objects and uses the result to populate a new ExprSpan object. + */ + static void spanBinaryExpr( + ExprSpan *pOut, /* Write the result here */ + Parse *pParse, /* The parsing context. Errors accumulate here */ + int op, /* The binary operation */ + ExprSpan *pLeft, /* The left operand */ + ExprSpan *pRight /* The right operand */ + ){ + pOut->pExpr = sqlite3PExpr(pParse, op, pLeft->pExpr, pRight->pExpr, 0); + pOut->zStart = pLeft->zStart; + pOut->zEnd = pRight->zEnd; + } + + /* Construct an expression node for a unary postfix operator + */ + static void spanUnaryPostfix( + ExprSpan *pOut, /* Write the new expression node here */ + Parse *pParse, /* Parsing context to record errors */ + int op, /* The operator */ + ExprSpan *pOperand, /* The operand */ + Token *pPostOp /* The operand token for setting the span */ + ){ + pOut->pExpr = sqlite3PExpr(pParse, op, pOperand->pExpr, 0, 0); + pOut->zStart = pOperand->zStart; + pOut->zEnd = &pPostOp->z[pPostOp->n]; + } + + /* A routine to convert a binary TK_IS or TK_ISNOT expression into a + ** unary TK_ISNULL or TK_NOTNULL expression. */ + static void binaryToUnaryIfNull(Parse *pParse, Expr *pY, Expr *pA, int op){ + sqlite3 *db = pParse->db; + if( db->mallocFailed==0 && pY->op==TK_NULL ){ + pA->op = (u8)op; + sqlite3ExprDelete(db, pA->pRight); + pA->pRight = 0; + } + } + + /* Construct an expression node for a unary prefix operator + */ + static void spanUnaryPrefix( + ExprSpan *pOut, /* Write the new expression node here */ + Parse *pParse, /* Parsing context to record errors */ + int op, /* The operator */ + ExprSpan *pOperand, /* The operand */ + Token *pPreOp /* The operand token for setting the span */ + ){ + pOut->pExpr = sqlite3PExpr(pParse, op, pOperand->pExpr, 0, 0); + pOut->zStart = pPreOp->z; + pOut->zEnd = pOperand->zEnd; + } +/* Next is all token values, in a form suitable for use by makeheaders. +** This section will be null unless lemon is run with the -m switch. +*/ +/* +** These constants (all generated automatically by the parser generator) +** specify the various kinds of tokens (terminals) that the parser +** understands. +** +** Each symbol here is a terminal symbol in the grammar. +*/ +/* Make sure the INTERFACE macro is defined. +*/ +#ifndef INTERFACE +# define INTERFACE 1 +#endif +/* The next thing included is series of defines which control +** various aspects of the generated parser. +** YYCODETYPE is the data type used for storing terminal +** and nonterminal numbers. "unsigned char" is +** used if there are fewer than 250 terminals +** and nonterminals. "int" is used otherwise. +** YYNOCODE is a number of type YYCODETYPE which corresponds +** to no legal terminal or nonterminal number. This +** number is used to fill in empty slots of the hash +** table. +** YYFALLBACK If defined, this indicates that one or more tokens +** have fall-back values which should be used if the +** original value of the token will not parse. +** YYACTIONTYPE is the data type used for storing terminal +** and nonterminal numbers. "unsigned char" is +** used if there are fewer than 250 rules and +** states combined. "int" is used otherwise. +** sqlite3ParserTOKENTYPE is the data type used for minor tokens given +** directly to the parser from the tokenizer. +** YYMINORTYPE is the data type used for all minor tokens. +** This is typically a union of many types, one of +** which is sqlite3ParserTOKENTYPE. The entry in the union +** for base tokens is called "yy0". +** YYSTACKDEPTH is the maximum depth of the parser's stack. If +** zero the stack is dynamically sized using realloc() +** sqlite3ParserARG_SDECL A static variable declaration for the %extra_argument +** sqlite3ParserARG_PDECL A parameter declaration for the %extra_argument +** sqlite3ParserARG_STORE Code to store %extra_argument into yypParser +** sqlite3ParserARG_FETCH Code to extract %extra_argument from yypParser +** YYNSTATE the combined number of states. +** YYNRULE the number of rules in the grammar +** YYERRORSYMBOL is the code number of the error symbol. If not +** defined, then do no error processing. +*/ +#define YYCODETYPE unsigned char +#define YYNOCODE 251 +#define YYACTIONTYPE unsigned short int +#define YYWILDCARD 67 +#define sqlite3ParserTOKENTYPE Token +typedef union { + int yyinit; + sqlite3ParserTOKENTYPE yy0; + struct LimitVal yy64; + Expr* yy122; + Select* yy159; + IdList* yy180; + struct {int value; int mask;} yy207; + u8 yy258; + struct LikeOp yy318; + TriggerStep* yy327; + ExprSpan yy342; + SrcList* yy347; + int yy392; + struct TrigEvent yy410; + ExprList* yy442; + struct ValueList yy487; +} YYMINORTYPE; +#ifndef YYSTACKDEPTH +#define YYSTACKDEPTH 100 +#endif +#define sqlite3ParserARG_SDECL Parse *pParse; +#define sqlite3ParserARG_PDECL ,Parse *pParse +#define sqlite3ParserARG_FETCH Parse *pParse = yypParser->pParse +#define sqlite3ParserARG_STORE yypParser->pParse = pParse +#define YYNSTATE 627 +#define YYNRULE 327 +#define YYFALLBACK 1 +#define YY_NO_ACTION (YYNSTATE+YYNRULE+2) +#define YY_ACCEPT_ACTION (YYNSTATE+YYNRULE+1) +#define YY_ERROR_ACTION (YYNSTATE+YYNRULE) + +/* The yyzerominor constant is used to initialize instances of +** YYMINORTYPE objects to zero. */ +static const YYMINORTYPE yyzerominor = { 0 }; + +/* Define the yytestcase() macro to be a no-op if is not already defined +** otherwise. +** +** Applications can choose to define yytestcase() in the %include section +** to a macro that can assist in verifying code coverage. For production +** code the yytestcase() macro should be turned off. But it is useful +** for testing. +*/ +#ifndef yytestcase +# define yytestcase(X) +#endif + + +/* Next are the tables used to determine what action to take based on the +** current state and lookahead token. These tables are used to implement +** functions that take a state number and lookahead value and return an +** action integer. +** +** Suppose the action integer is N. Then the action is determined as +** follows +** +** 0 <= N < YYNSTATE Shift N. That is, push the lookahead +** token onto the stack and goto state N. +** +** YYNSTATE <= N < YYNSTATE+YYNRULE Reduce by rule N-YYNSTATE. +** +** N == YYNSTATE+YYNRULE A syntax error has occurred. +** +** N == YYNSTATE+YYNRULE+1 The parser accepts its input. +** +** N == YYNSTATE+YYNRULE+2 No such action. Denotes unused +** slots in the yy_action[] table. +** +** The action table is constructed as a single large table named yy_action[]. +** Given state S and lookahead X, the action is computed as +** +** yy_action[ yy_shift_ofst[S] + X ] +** +** If the index value yy_shift_ofst[S]+X is out of range or if the value +** yy_lookahead[yy_shift_ofst[S]+X] is not equal to X or if yy_shift_ofst[S] +** is equal to YY_SHIFT_USE_DFLT, it means that the action is not in the table +** and that yy_default[S] should be used instead. +** +** The formula above is for computing the action when the lookahead is +** a terminal symbol. If the lookahead is a non-terminal (as occurs after +** a reduce action) then the yy_reduce_ofst[] array is used in place of +** the yy_shift_ofst[] array and YY_REDUCE_USE_DFLT is used in place of +** YY_SHIFT_USE_DFLT. +** +** The following are the tables generated in this section: +** +** yy_action[] A single table containing all actions. +** yy_lookahead[] A table containing the lookahead for each entry in +** yy_action. Used to detect hash collisions. +** yy_shift_ofst[] For each state, the offset into yy_action for +** shifting terminals. +** yy_reduce_ofst[] For each state, the offset into yy_action for +** shifting non-terminals after a reduce. +** yy_default[] Default action for each state. +*/ +#define YY_ACTTAB_COUNT (1564) +static const YYACTIONTYPE yy_action[] = { + /* 0 */ 309, 955, 184, 417, 2, 171, 624, 594, 56, 56, + /* 10 */ 56, 56, 49, 54, 54, 54, 54, 53, 53, 52, + /* 20 */ 52, 52, 51, 233, 620, 619, 298, 620, 619, 234, + /* 30 */ 587, 581, 56, 56, 56, 56, 19, 54, 54, 54, + /* 40 */ 54, 53, 53, 52, 52, 52, 51, 233, 605, 57, + /* 50 */ 58, 48, 579, 578, 580, 580, 55, 55, 56, 56, + /* 60 */ 56, 56, 541, 54, 54, 54, 54, 53, 53, 52, + /* 70 */ 52, 52, 51, 233, 309, 594, 325, 196, 195, 194, + /* 80 */ 33, 54, 54, 54, 54, 53, 53, 52, 52, 52, + /* 90 */ 51, 233, 617, 616, 165, 617, 616, 380, 377, 376, + /* 100 */ 407, 532, 576, 576, 587, 581, 303, 422, 375, 59, + /* 110 */ 53, 53, 52, 52, 52, 51, 233, 50, 47, 146, + /* 120 */ 574, 545, 65, 57, 58, 48, 579, 578, 580, 580, + /* 130 */ 55, 55, 56, 56, 56, 56, 213, 54, 54, 54, + /* 140 */ 54, 53, 53, 52, 52, 52, 51, 233, 309, 223, + /* 150 */ 539, 420, 170, 176, 138, 280, 383, 275, 382, 168, + /* 160 */ 489, 551, 409, 668, 620, 619, 271, 438, 409, 438, + /* 170 */ 550, 604, 67, 482, 507, 618, 599, 412, 587, 581, + /* 180 */ 600, 483, 618, 412, 618, 598, 91, 439, 440, 439, + /* 190 */ 335, 598, 73, 669, 222, 266, 480, 57, 58, 48, + /* 200 */ 579, 578, 580, 580, 55, 55, 56, 56, 56, 56, + /* 210 */ 670, 54, 54, 54, 54, 53, 53, 52, 52, 52, + /* 220 */ 51, 233, 309, 279, 232, 231, 1, 132, 200, 385, + /* 230 */ 620, 619, 617, 616, 278, 435, 289, 563, 175, 262, + /* 240 */ 409, 264, 437, 497, 436, 166, 441, 568, 336, 568, + /* 250 */ 201, 537, 587, 581, 599, 412, 165, 594, 600, 380, + /* 260 */ 377, 376, 597, 598, 92, 523, 618, 569, 569, 592, + /* 270 */ 375, 57, 58, 48, 579, 578, 580, 580, 55, 55, + /* 280 */ 56, 56, 56, 56, 597, 54, 54, 54, 54, 53, + /* 290 */ 53, 52, 52, 52, 51, 233, 309, 463, 617, 616, + /* 300 */ 590, 590, 590, 174, 272, 396, 409, 272, 409, 548, + /* 310 */ 397, 620, 619, 68, 326, 620, 619, 620, 619, 618, + /* 320 */ 546, 412, 618, 412, 471, 594, 587, 581, 472, 598, + /* 330 */ 92, 598, 92, 52, 52, 52, 51, 233, 513, 512, + /* 340 */ 206, 322, 363, 464, 221, 57, 58, 48, 579, 578, + /* 350 */ 580, 580, 55, 55, 56, 56, 56, 56, 529, 54, + /* 360 */ 54, 54, 54, 53, 53, 52, 52, 52, 51, 233, + /* 370 */ 309, 396, 409, 396, 597, 372, 386, 530, 347, 617, + /* 380 */ 616, 575, 202, 617, 616, 617, 616, 412, 620, 619, + /* 390 */ 145, 255, 346, 254, 577, 598, 74, 351, 45, 489, + /* 400 */ 587, 581, 235, 189, 464, 544, 167, 296, 187, 469, + /* 410 */ 479, 67, 62, 39, 618, 546, 597, 345, 573, 57, + /* 420 */ 58, 48, 579, 578, 580, 580, 55, 55, 56, 56, + /* 430 */ 56, 56, 6, 54, 54, 54, 54, 53, 53, 52, + /* 440 */ 52, 52, 51, 233, 309, 562, 558, 407, 528, 576, + /* 450 */ 576, 344, 255, 346, 254, 182, 617, 616, 503, 504, + /* 460 */ 314, 409, 557, 235, 166, 271, 409, 352, 564, 181, + /* 470 */ 407, 546, 576, 576, 587, 581, 412, 537, 556, 561, + /* 480 */ 517, 412, 618, 249, 598, 16, 7, 36, 467, 598, + /* 490 */ 92, 516, 618, 57, 58, 48, 579, 578, 580, 580, + /* 500 */ 55, 55, 56, 56, 56, 56, 541, 54, 54, 54, + /* 510 */ 54, 53, 53, 52, 52, 52, 51, 233, 309, 327, + /* 520 */ 572, 571, 525, 558, 560, 394, 871, 246, 409, 248, + /* 530 */ 171, 392, 594, 219, 407, 409, 576, 576, 502, 557, + /* 540 */ 364, 145, 510, 412, 407, 229, 576, 576, 587, 581, + /* 550 */ 412, 598, 92, 381, 269, 556, 166, 400, 598, 69, + /* 560 */ 501, 419, 945, 199, 945, 198, 546, 57, 58, 48, + /* 570 */ 579, 578, 580, 580, 55, 55, 56, 56, 56, 56, + /* 580 */ 568, 54, 54, 54, 54, 53, 53, 52, 52, 52, + /* 590 */ 51, 233, 309, 317, 419, 944, 508, 944, 308, 597, + /* 600 */ 594, 565, 490, 212, 173, 247, 423, 615, 614, 613, + /* 610 */ 323, 197, 143, 405, 572, 571, 489, 66, 50, 47, + /* 620 */ 146, 594, 587, 581, 232, 231, 559, 427, 67, 555, + /* 630 */ 15, 618, 186, 543, 303, 421, 35, 206, 432, 423, + /* 640 */ 552, 57, 58, 48, 579, 578, 580, 580, 55, 55, + /* 650 */ 56, 56, 56, 56, 205, 54, 54, 54, 54, 53, + /* 660 */ 53, 52, 52, 52, 51, 233, 309, 569, 569, 260, + /* 670 */ 268, 597, 12, 373, 568, 166, 409, 313, 409, 420, + /* 680 */ 409, 473, 473, 365, 618, 50, 47, 146, 597, 594, + /* 690 */ 468, 412, 166, 412, 351, 412, 587, 581, 32, 598, + /* 700 */ 94, 598, 97, 598, 95, 627, 625, 329, 142, 50, + /* 710 */ 47, 146, 333, 349, 358, 57, 58, 48, 579, 578, + /* 720 */ 580, 580, 55, 55, 56, 56, 56, 56, 409, 54, + /* 730 */ 54, 54, 54, 53, 53, 52, 52, 52, 51, 233, + /* 740 */ 309, 409, 388, 412, 409, 22, 565, 404, 212, 362, + /* 750 */ 389, 598, 104, 359, 409, 156, 412, 409, 603, 412, + /* 760 */ 537, 331, 569, 569, 598, 103, 493, 598, 105, 412, + /* 770 */ 587, 581, 412, 260, 549, 618, 11, 598, 106, 521, + /* 780 */ 598, 133, 169, 457, 456, 170, 35, 601, 618, 57, + /* 790 */ 58, 48, 579, 578, 580, 580, 55, 55, 56, 56, + /* 800 */ 56, 56, 409, 54, 54, 54, 54, 53, 53, 52, + /* 810 */ 52, 52, 51, 233, 309, 409, 259, 412, 409, 50, + /* 820 */ 47, 146, 357, 318, 355, 598, 134, 527, 352, 337, + /* 830 */ 412, 409, 356, 412, 357, 409, 357, 618, 598, 98, + /* 840 */ 129, 598, 102, 618, 587, 581, 412, 21, 235, 618, + /* 850 */ 412, 618, 211, 143, 598, 101, 30, 167, 598, 93, + /* 860 */ 350, 535, 203, 57, 58, 48, 579, 578, 580, 580, + /* 870 */ 55, 55, 56, 56, 56, 56, 409, 54, 54, 54, + /* 880 */ 54, 53, 53, 52, 52, 52, 51, 233, 309, 409, + /* 890 */ 526, 412, 409, 425, 215, 305, 597, 551, 141, 598, + /* 900 */ 100, 40, 409, 38, 412, 409, 550, 412, 409, 228, + /* 910 */ 220, 314, 598, 77, 500, 598, 96, 412, 587, 581, + /* 920 */ 412, 338, 253, 412, 218, 598, 137, 379, 598, 136, + /* 930 */ 28, 598, 135, 270, 715, 210, 481, 57, 58, 48, + /* 940 */ 579, 578, 580, 580, 55, 55, 56, 56, 56, 56, + /* 950 */ 409, 54, 54, 54, 54, 53, 53, 52, 52, 52, + /* 960 */ 51, 233, 309, 409, 272, 412, 409, 315, 147, 597, + /* 970 */ 272, 626, 2, 598, 76, 209, 409, 127, 412, 618, + /* 980 */ 126, 412, 409, 621, 235, 618, 598, 90, 374, 598, + /* 990 */ 89, 412, 587, 581, 27, 260, 350, 412, 618, 598, + /* 1000 */ 75, 321, 541, 541, 125, 598, 88, 320, 278, 597, + /* 1010 */ 618, 57, 46, 48, 579, 578, 580, 580, 55, 55, + /* 1020 */ 56, 56, 56, 56, 409, 54, 54, 54, 54, 53, + /* 1030 */ 53, 52, 52, 52, 51, 233, 309, 409, 450, 412, + /* 1040 */ 164, 284, 282, 272, 609, 424, 304, 598, 87, 370, + /* 1050 */ 409, 477, 412, 409, 608, 409, 607, 602, 618, 618, + /* 1060 */ 598, 99, 586, 585, 122, 412, 587, 581, 412, 618, + /* 1070 */ 412, 618, 618, 598, 86, 366, 598, 17, 598, 85, + /* 1080 */ 319, 185, 519, 518, 583, 582, 58, 48, 579, 578, + /* 1090 */ 580, 580, 55, 55, 56, 56, 56, 56, 409, 54, + /* 1100 */ 54, 54, 54, 53, 53, 52, 52, 52, 51, 233, + /* 1110 */ 309, 584, 409, 412, 409, 260, 260, 260, 408, 591, + /* 1120 */ 474, 598, 84, 170, 409, 466, 518, 412, 121, 412, + /* 1130 */ 618, 618, 618, 618, 618, 598, 83, 598, 72, 412, + /* 1140 */ 587, 581, 51, 233, 625, 329, 470, 598, 71, 257, + /* 1150 */ 159, 120, 14, 462, 157, 158, 117, 260, 448, 447, + /* 1160 */ 446, 48, 579, 578, 580, 580, 55, 55, 56, 56, + /* 1170 */ 56, 56, 618, 54, 54, 54, 54, 53, 53, 52, + /* 1180 */ 52, 52, 51, 233, 44, 403, 260, 3, 409, 459, + /* 1190 */ 260, 413, 619, 118, 398, 10, 25, 24, 554, 348, + /* 1200 */ 217, 618, 406, 412, 409, 618, 4, 44, 403, 618, + /* 1210 */ 3, 598, 82, 618, 413, 619, 455, 542, 115, 412, + /* 1220 */ 538, 401, 536, 274, 506, 406, 251, 598, 81, 216, + /* 1230 */ 273, 563, 618, 243, 453, 618, 154, 618, 618, 618, + /* 1240 */ 449, 416, 623, 110, 401, 618, 409, 236, 64, 123, + /* 1250 */ 487, 41, 42, 531, 563, 204, 409, 267, 43, 411, + /* 1260 */ 410, 412, 265, 592, 108, 618, 107, 434, 332, 598, + /* 1270 */ 80, 412, 618, 263, 41, 42, 443, 618, 409, 598, + /* 1280 */ 70, 43, 411, 410, 433, 261, 592, 149, 618, 597, + /* 1290 */ 256, 237, 188, 412, 590, 590, 590, 589, 588, 13, + /* 1300 */ 618, 598, 18, 328, 235, 618, 44, 403, 360, 3, + /* 1310 */ 418, 461, 339, 413, 619, 227, 124, 590, 590, 590, + /* 1320 */ 589, 588, 13, 618, 406, 409, 618, 409, 139, 34, + /* 1330 */ 403, 387, 3, 148, 622, 312, 413, 619, 311, 330, + /* 1340 */ 412, 460, 412, 401, 180, 353, 412, 406, 598, 79, + /* 1350 */ 598, 78, 250, 563, 598, 9, 618, 612, 611, 610, + /* 1360 */ 618, 8, 452, 442, 242, 415, 401, 618, 239, 235, + /* 1370 */ 179, 238, 428, 41, 42, 288, 563, 618, 618, 618, + /* 1380 */ 43, 411, 410, 618, 144, 592, 618, 618, 177, 61, + /* 1390 */ 618, 596, 391, 620, 619, 287, 41, 42, 414, 618, + /* 1400 */ 293, 30, 393, 43, 411, 410, 292, 618, 592, 31, + /* 1410 */ 618, 395, 291, 60, 230, 37, 590, 590, 590, 589, + /* 1420 */ 588, 13, 214, 553, 183, 290, 172, 301, 300, 299, + /* 1430 */ 178, 297, 595, 563, 451, 29, 285, 390, 540, 590, + /* 1440 */ 590, 590, 589, 588, 13, 283, 520, 534, 150, 533, + /* 1450 */ 241, 281, 384, 192, 191, 324, 515, 514, 276, 240, + /* 1460 */ 510, 523, 307, 511, 128, 592, 509, 225, 226, 486, + /* 1470 */ 485, 224, 152, 491, 464, 306, 484, 163, 153, 371, + /* 1480 */ 478, 151, 162, 258, 369, 161, 367, 208, 475, 476, + /* 1490 */ 26, 160, 465, 140, 361, 131, 590, 590, 590, 116, + /* 1500 */ 119, 454, 343, 155, 114, 342, 113, 112, 445, 111, + /* 1510 */ 130, 109, 431, 316, 426, 430, 23, 429, 20, 606, + /* 1520 */ 190, 507, 255, 341, 244, 63, 294, 593, 310, 570, + /* 1530 */ 277, 402, 354, 235, 567, 496, 495, 492, 494, 302, + /* 1540 */ 458, 378, 286, 245, 566, 5, 252, 547, 193, 444, + /* 1550 */ 233, 340, 207, 524, 368, 505, 334, 522, 499, 399, + /* 1560 */ 295, 498, 956, 488, +}; +static const YYCODETYPE yy_lookahead[] = { + /* 0 */ 19, 142, 143, 144, 145, 24, 1, 26, 77, 78, + /* 10 */ 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, + /* 20 */ 89, 90, 91, 92, 26, 27, 15, 26, 27, 197, + /* 30 */ 49, 50, 77, 78, 79, 80, 204, 82, 83, 84, + /* 40 */ 85, 86, 87, 88, 89, 90, 91, 92, 23, 68, + /* 50 */ 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, + /* 60 */ 79, 80, 166, 82, 83, 84, 85, 86, 87, 88, + /* 70 */ 89, 90, 91, 92, 19, 94, 19, 105, 106, 107, + /* 80 */ 25, 82, 83, 84, 85, 86, 87, 88, 89, 90, + /* 90 */ 91, 92, 94, 95, 96, 94, 95, 99, 100, 101, + /* 100 */ 112, 205, 114, 115, 49, 50, 22, 23, 110, 54, + /* 110 */ 86, 87, 88, 89, 90, 91, 92, 221, 222, 223, + /* 120 */ 23, 120, 25, 68, 69, 70, 71, 72, 73, 74, + /* 130 */ 75, 76, 77, 78, 79, 80, 22, 82, 83, 84, + /* 140 */ 85, 86, 87, 88, 89, 90, 91, 92, 19, 92, + /* 150 */ 23, 67, 25, 96, 97, 98, 99, 100, 101, 102, + /* 160 */ 150, 32, 150, 118, 26, 27, 109, 150, 150, 150, + /* 170 */ 41, 161, 162, 180, 181, 165, 113, 165, 49, 50, + /* 180 */ 117, 188, 165, 165, 165, 173, 174, 170, 171, 170, + /* 190 */ 171, 173, 174, 118, 184, 16, 186, 68, 69, 70, + /* 200 */ 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + /* 210 */ 118, 82, 83, 84, 85, 86, 87, 88, 89, 90, + /* 220 */ 91, 92, 19, 98, 86, 87, 22, 24, 160, 88, + /* 230 */ 26, 27, 94, 95, 109, 97, 224, 66, 118, 60, + /* 240 */ 150, 62, 104, 23, 106, 25, 229, 230, 229, 230, + /* 250 */ 160, 150, 49, 50, 113, 165, 96, 26, 117, 99, + /* 260 */ 100, 101, 194, 173, 174, 94, 165, 129, 130, 98, + /* 270 */ 110, 68, 69, 70, 71, 72, 73, 74, 75, 76, + /* 280 */ 77, 78, 79, 80, 194, 82, 83, 84, 85, 86, + /* 290 */ 87, 88, 89, 90, 91, 92, 19, 11, 94, 95, + /* 300 */ 129, 130, 131, 118, 150, 215, 150, 150, 150, 25, + /* 310 */ 220, 26, 27, 22, 213, 26, 27, 26, 27, 165, + /* 320 */ 25, 165, 165, 165, 30, 94, 49, 50, 34, 173, + /* 330 */ 174, 173, 174, 88, 89, 90, 91, 92, 7, 8, + /* 340 */ 160, 187, 48, 57, 187, 68, 69, 70, 71, 72, + /* 350 */ 73, 74, 75, 76, 77, 78, 79, 80, 23, 82, + /* 360 */ 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, + /* 370 */ 19, 215, 150, 215, 194, 19, 220, 88, 220, 94, + /* 380 */ 95, 23, 160, 94, 95, 94, 95, 165, 26, 27, + /* 390 */ 95, 105, 106, 107, 113, 173, 174, 217, 22, 150, + /* 400 */ 49, 50, 116, 119, 57, 120, 50, 158, 22, 21, + /* 410 */ 161, 162, 232, 136, 165, 120, 194, 237, 23, 68, + /* 420 */ 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, + /* 430 */ 79, 80, 22, 82, 83, 84, 85, 86, 87, 88, + /* 440 */ 89, 90, 91, 92, 19, 23, 12, 112, 23, 114, + /* 450 */ 115, 63, 105, 106, 107, 23, 94, 95, 97, 98, + /* 460 */ 104, 150, 28, 116, 25, 109, 150, 150, 23, 23, + /* 470 */ 112, 25, 114, 115, 49, 50, 165, 150, 44, 11, + /* 480 */ 46, 165, 165, 16, 173, 174, 76, 136, 100, 173, + /* 490 */ 174, 57, 165, 68, 69, 70, 71, 72, 73, 74, + /* 500 */ 75, 76, 77, 78, 79, 80, 166, 82, 83, 84, + /* 510 */ 85, 86, 87, 88, 89, 90, 91, 92, 19, 169, + /* 520 */ 170, 171, 23, 12, 23, 214, 138, 60, 150, 62, + /* 530 */ 24, 215, 26, 216, 112, 150, 114, 115, 36, 28, + /* 540 */ 213, 95, 103, 165, 112, 205, 114, 115, 49, 50, + /* 550 */ 165, 173, 174, 51, 23, 44, 25, 46, 173, 174, + /* 560 */ 58, 22, 23, 22, 25, 160, 120, 68, 69, 70, + /* 570 */ 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + /* 580 */ 230, 82, 83, 84, 85, 86, 87, 88, 89, 90, + /* 590 */ 91, 92, 19, 215, 22, 23, 23, 25, 163, 194, + /* 600 */ 94, 166, 167, 168, 25, 138, 67, 7, 8, 9, + /* 610 */ 108, 206, 207, 169, 170, 171, 150, 22, 221, 222, + /* 620 */ 223, 26, 49, 50, 86, 87, 23, 161, 162, 23, + /* 630 */ 22, 165, 24, 120, 22, 23, 25, 160, 241, 67, + /* 640 */ 176, 68, 69, 70, 71, 72, 73, 74, 75, 76, + /* 650 */ 77, 78, 79, 80, 160, 82, 83, 84, 85, 86, + /* 660 */ 87, 88, 89, 90, 91, 92, 19, 129, 130, 150, + /* 670 */ 23, 194, 35, 23, 230, 25, 150, 155, 150, 67, + /* 680 */ 150, 105, 106, 107, 165, 221, 222, 223, 194, 94, + /* 690 */ 23, 165, 25, 165, 217, 165, 49, 50, 25, 173, + /* 700 */ 174, 173, 174, 173, 174, 0, 1, 2, 118, 221, + /* 710 */ 222, 223, 193, 219, 237, 68, 69, 70, 71, 72, + /* 720 */ 73, 74, 75, 76, 77, 78, 79, 80, 150, 82, + /* 730 */ 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, + /* 740 */ 19, 150, 19, 165, 150, 24, 166, 167, 168, 227, + /* 750 */ 27, 173, 174, 231, 150, 25, 165, 150, 172, 165, + /* 760 */ 150, 242, 129, 130, 173, 174, 180, 173, 174, 165, + /* 770 */ 49, 50, 165, 150, 176, 165, 35, 173, 174, 165, + /* 780 */ 173, 174, 35, 23, 23, 25, 25, 173, 165, 68, + /* 790 */ 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, + /* 800 */ 79, 80, 150, 82, 83, 84, 85, 86, 87, 88, + /* 810 */ 89, 90, 91, 92, 19, 150, 193, 165, 150, 221, + /* 820 */ 222, 223, 150, 213, 19, 173, 174, 23, 150, 97, + /* 830 */ 165, 150, 27, 165, 150, 150, 150, 165, 173, 174, + /* 840 */ 22, 173, 174, 165, 49, 50, 165, 52, 116, 165, + /* 850 */ 165, 165, 206, 207, 173, 174, 126, 50, 173, 174, + /* 860 */ 128, 27, 160, 68, 69, 70, 71, 72, 73, 74, + /* 870 */ 75, 76, 77, 78, 79, 80, 150, 82, 83, 84, + /* 880 */ 85, 86, 87, 88, 89, 90, 91, 92, 19, 150, + /* 890 */ 23, 165, 150, 23, 216, 25, 194, 32, 39, 173, + /* 900 */ 174, 135, 150, 137, 165, 150, 41, 165, 150, 52, + /* 910 */ 238, 104, 173, 174, 29, 173, 174, 165, 49, 50, + /* 920 */ 165, 219, 238, 165, 238, 173, 174, 52, 173, 174, + /* 930 */ 22, 173, 174, 23, 23, 160, 25, 68, 69, 70, + /* 940 */ 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + /* 950 */ 150, 82, 83, 84, 85, 86, 87, 88, 89, 90, + /* 960 */ 91, 92, 19, 150, 150, 165, 150, 245, 246, 194, + /* 970 */ 150, 144, 145, 173, 174, 160, 150, 22, 165, 165, + /* 980 */ 22, 165, 150, 150, 116, 165, 173, 174, 52, 173, + /* 990 */ 174, 165, 49, 50, 22, 150, 128, 165, 165, 173, + /* 1000 */ 174, 187, 166, 166, 22, 173, 174, 187, 109, 194, + /* 1010 */ 165, 68, 69, 70, 71, 72, 73, 74, 75, 76, + /* 1020 */ 77, 78, 79, 80, 150, 82, 83, 84, 85, 86, + /* 1030 */ 87, 88, 89, 90, 91, 92, 19, 150, 193, 165, + /* 1040 */ 102, 205, 205, 150, 150, 247, 248, 173, 174, 19, + /* 1050 */ 150, 20, 165, 150, 150, 150, 150, 150, 165, 165, + /* 1060 */ 173, 174, 49, 50, 104, 165, 49, 50, 165, 165, + /* 1070 */ 165, 165, 165, 173, 174, 43, 173, 174, 173, 174, + /* 1080 */ 187, 24, 190, 191, 71, 72, 69, 70, 71, 72, + /* 1090 */ 73, 74, 75, 76, 77, 78, 79, 80, 150, 82, + /* 1100 */ 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, + /* 1110 */ 19, 98, 150, 165, 150, 150, 150, 150, 150, 150, + /* 1120 */ 59, 173, 174, 25, 150, 190, 191, 165, 53, 165, + /* 1130 */ 165, 165, 165, 165, 165, 173, 174, 173, 174, 165, + /* 1140 */ 49, 50, 91, 92, 1, 2, 53, 173, 174, 138, + /* 1150 */ 104, 22, 5, 1, 35, 118, 127, 150, 193, 193, + /* 1160 */ 193, 70, 71, 72, 73, 74, 75, 76, 77, 78, + /* 1170 */ 79, 80, 165, 82, 83, 84, 85, 86, 87, 88, + /* 1180 */ 89, 90, 91, 92, 19, 20, 150, 22, 150, 27, + /* 1190 */ 150, 26, 27, 108, 150, 22, 76, 76, 150, 25, + /* 1200 */ 193, 165, 37, 165, 150, 165, 22, 19, 20, 165, + /* 1210 */ 22, 173, 174, 165, 26, 27, 23, 150, 119, 165, + /* 1220 */ 150, 56, 150, 150, 150, 37, 16, 173, 174, 193, + /* 1230 */ 150, 66, 165, 193, 1, 165, 121, 165, 165, 165, + /* 1240 */ 20, 146, 147, 119, 56, 165, 150, 152, 16, 154, + /* 1250 */ 150, 86, 87, 88, 66, 160, 150, 150, 93, 94, + /* 1260 */ 95, 165, 150, 98, 108, 165, 127, 23, 65, 173, + /* 1270 */ 174, 165, 165, 150, 86, 87, 128, 165, 150, 173, + /* 1280 */ 174, 93, 94, 95, 23, 150, 98, 15, 165, 194, + /* 1290 */ 150, 140, 22, 165, 129, 130, 131, 132, 133, 134, + /* 1300 */ 165, 173, 174, 3, 116, 165, 19, 20, 150, 22, + /* 1310 */ 4, 150, 217, 26, 27, 179, 179, 129, 130, 131, + /* 1320 */ 132, 133, 134, 165, 37, 150, 165, 150, 164, 19, + /* 1330 */ 20, 150, 22, 246, 149, 249, 26, 27, 249, 244, + /* 1340 */ 165, 150, 165, 56, 6, 150, 165, 37, 173, 174, + /* 1350 */ 173, 174, 150, 66, 173, 174, 165, 149, 149, 13, + /* 1360 */ 165, 25, 150, 150, 150, 149, 56, 165, 150, 116, + /* 1370 */ 151, 150, 150, 86, 87, 150, 66, 165, 165, 165, + /* 1380 */ 93, 94, 95, 165, 150, 98, 165, 165, 151, 22, + /* 1390 */ 165, 194, 150, 26, 27, 150, 86, 87, 159, 165, + /* 1400 */ 199, 126, 123, 93, 94, 95, 200, 165, 98, 124, + /* 1410 */ 165, 122, 201, 125, 225, 135, 129, 130, 131, 132, + /* 1420 */ 133, 134, 5, 157, 157, 202, 118, 10, 11, 12, + /* 1430 */ 13, 14, 203, 66, 17, 104, 210, 121, 211, 129, + /* 1440 */ 130, 131, 132, 133, 134, 210, 175, 211, 31, 211, + /* 1450 */ 33, 210, 104, 86, 87, 47, 175, 183, 175, 42, + /* 1460 */ 103, 94, 178, 177, 22, 98, 175, 92, 228, 175, + /* 1470 */ 175, 228, 55, 183, 57, 178, 175, 156, 61, 18, + /* 1480 */ 157, 64, 156, 235, 157, 156, 45, 157, 236, 157, + /* 1490 */ 135, 156, 189, 68, 157, 218, 129, 130, 131, 22, + /* 1500 */ 189, 199, 157, 156, 192, 18, 192, 192, 199, 192, + /* 1510 */ 218, 189, 40, 157, 38, 157, 240, 157, 240, 153, + /* 1520 */ 196, 181, 105, 106, 107, 243, 198, 166, 111, 230, + /* 1530 */ 176, 226, 239, 116, 230, 176, 166, 166, 176, 148, + /* 1540 */ 199, 177, 209, 209, 166, 196, 239, 208, 185, 199, + /* 1550 */ 92, 209, 233, 173, 234, 182, 139, 173, 182, 191, + /* 1560 */ 195, 182, 250, 186, +}; +#define YY_SHIFT_USE_DFLT (-70) +#define YY_SHIFT_COUNT (416) +#define YY_SHIFT_MIN (-69) +#define YY_SHIFT_MAX (1487) +static const short yy_shift_ofst[] = { + /* 0 */ 1143, 1188, 1417, 1188, 1287, 1287, 138, 138, -2, -19, + /* 10 */ 1287, 1287, 1287, 1287, 347, 362, 129, 129, 795, 1165, + /* 20 */ 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, + /* 30 */ 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, + /* 40 */ 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1310, 1287, + /* 50 */ 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, + /* 60 */ 1287, 1287, 286, 362, 362, 538, 538, 231, 1253, 55, + /* 70 */ 721, 647, 573, 499, 425, 351, 277, 203, 869, 869, + /* 80 */ 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, + /* 90 */ 869, 869, 869, 943, 869, 1017, 1091, 1091, -69, -45, + /* 100 */ -45, -45, -45, -45, -1, 24, 245, 362, 362, 362, + /* 110 */ 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + /* 120 */ 362, 362, 362, 388, 356, 362, 362, 362, 362, 362, + /* 130 */ 732, 868, 231, 1051, 1458, -70, -70, -70, 1367, 57, + /* 140 */ 434, 434, 289, 291, 285, 1, 204, 572, 539, 362, + /* 150 */ 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + /* 160 */ 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + /* 170 */ 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + /* 180 */ 362, 506, 506, 506, 705, 1253, 1253, 1253, -70, -70, + /* 190 */ -70, 171, 171, 160, 502, 502, 502, 446, 432, 511, + /* 200 */ 422, 358, 335, -12, -12, -12, -12, 576, 294, -12, + /* 210 */ -12, 295, 595, 141, 600, 730, 723, 723, 805, 730, + /* 220 */ 805, 439, 911, 231, 865, 231, 865, 807, 865, 723, + /* 230 */ 766, 633, 633, 231, 284, 63, 608, 1476, 1308, 1308, + /* 240 */ 1472, 1472, 1308, 1477, 1425, 1275, 1487, 1487, 1487, 1487, + /* 250 */ 1308, 1461, 1275, 1477, 1425, 1425, 1308, 1461, 1355, 1441, + /* 260 */ 1308, 1308, 1461, 1308, 1461, 1308, 1461, 1442, 1348, 1348, + /* 270 */ 1348, 1408, 1375, 1375, 1442, 1348, 1357, 1348, 1408, 1348, + /* 280 */ 1348, 1316, 1331, 1316, 1331, 1316, 1331, 1308, 1308, 1280, + /* 290 */ 1288, 1289, 1285, 1279, 1275, 1253, 1336, 1346, 1346, 1338, + /* 300 */ 1338, 1338, 1338, -70, -70, -70, -70, -70, -70, 1013, + /* 310 */ 467, 612, 84, 179, -28, 870, 410, 761, 760, 667, + /* 320 */ 650, 531, 220, 361, 331, 125, 127, 97, 1306, 1300, + /* 330 */ 1270, 1151, 1272, 1203, 1232, 1261, 1244, 1148, 1174, 1139, + /* 340 */ 1156, 1124, 1220, 1115, 1210, 1233, 1099, 1193, 1184, 1174, + /* 350 */ 1173, 1029, 1121, 1120, 1085, 1162, 1119, 1037, 1152, 1147, + /* 360 */ 1129, 1046, 1011, 1093, 1098, 1075, 1061, 1032, 960, 1057, + /* 370 */ 1031, 1030, 899, 938, 982, 936, 972, 958, 910, 955, + /* 380 */ 875, 885, 908, 857, 859, 867, 804, 590, 834, 747, + /* 390 */ 818, 513, 611, 741, 673, 637, 611, 606, 603, 579, + /* 400 */ 501, 541, 468, 386, 445, 395, 376, 281, 185, 120, + /* 410 */ 92, 75, 45, 114, 25, 11, 5, +}; +#define YY_REDUCE_USE_DFLT (-169) +#define YY_REDUCE_COUNT (308) +#define YY_REDUCE_MIN (-168) +#define YY_REDUCE_MAX (1391) +static const short yy_reduce_ofst[] = { + /* 0 */ -141, 90, 1095, 222, 158, 156, 19, 17, 10, -104, + /* 10 */ 378, 316, 311, 12, 180, 249, 598, 464, 397, 1181, + /* 20 */ 1177, 1175, 1128, 1106, 1096, 1054, 1038, 974, 964, 962, + /* 30 */ 948, 905, 903, 900, 887, 874, 832, 826, 816, 813, + /* 40 */ 800, 758, 755, 752, 742, 739, 726, 685, 681, 668, + /* 50 */ 665, 652, 607, 604, 594, 591, 578, 530, 528, 526, + /* 60 */ 385, 18, 477, 466, 519, 444, 350, 435, 405, 488, + /* 70 */ 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, + /* 80 */ 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, + /* 90 */ 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, + /* 100 */ 488, 488, 488, 488, 488, 488, 488, 1040, 678, 1036, + /* 110 */ 1007, 967, 966, 965, 845, 686, 610, 684, 317, 672, + /* 120 */ 893, 327, 623, 522, -7, 820, 814, 157, 154, 101, + /* 130 */ 702, 494, 580, 488, 488, 488, 488, 488, 614, 586, + /* 140 */ 935, 892, 968, 1245, 1242, 1234, 1225, 798, 798, 1222, + /* 150 */ 1221, 1218, 1214, 1213, 1212, 1202, 1195, 1191, 1161, 1158, + /* 160 */ 1140, 1135, 1123, 1112, 1107, 1100, 1080, 1074, 1073, 1072, + /* 170 */ 1070, 1067, 1048, 1044, 969, 968, 907, 906, 904, 894, + /* 180 */ 833, 837, 836, 340, 827, 815, 775, 68, 722, 646, + /* 190 */ -168, 1384, 1380, 1377, 1379, 1376, 1373, 1339, 1365, 1368, + /* 200 */ 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1320, 1319, 1365, + /* 210 */ 1365, 1339, 1378, 1349, 1391, 1350, 1342, 1334, 1307, 1341, + /* 220 */ 1293, 1364, 1363, 1371, 1362, 1370, 1359, 1340, 1354, 1333, + /* 230 */ 1305, 1304, 1299, 1361, 1328, 1324, 1366, 1282, 1360, 1358, + /* 240 */ 1278, 1276, 1356, 1292, 1322, 1309, 1317, 1315, 1314, 1312, + /* 250 */ 1345, 1347, 1302, 1277, 1311, 1303, 1337, 1335, 1252, 1248, + /* 260 */ 1332, 1330, 1329, 1327, 1326, 1323, 1321, 1297, 1301, 1295, + /* 270 */ 1294, 1290, 1243, 1240, 1284, 1291, 1286, 1283, 1274, 1281, + /* 280 */ 1271, 1238, 1241, 1236, 1235, 1227, 1226, 1267, 1266, 1189, + /* 290 */ 1229, 1223, 1211, 1206, 1201, 1197, 1239, 1237, 1219, 1216, + /* 300 */ 1209, 1208, 1185, 1089, 1086, 1087, 1137, 1136, 1164, +}; +static const YYACTIONTYPE yy_default[] = { + /* 0 */ 632, 866, 954, 954, 866, 866, 954, 954, 954, 756, + /* 10 */ 954, 954, 954, 864, 954, 954, 784, 784, 928, 954, + /* 20 */ 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, + /* 30 */ 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, + /* 40 */ 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, + /* 50 */ 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, + /* 60 */ 954, 954, 954, 954, 954, 954, 954, 671, 760, 790, + /* 70 */ 954, 954, 954, 954, 954, 954, 954, 954, 927, 929, + /* 80 */ 798, 797, 907, 771, 795, 788, 792, 867, 860, 861, + /* 90 */ 859, 863, 868, 954, 791, 827, 844, 826, 838, 843, + /* 100 */ 850, 842, 839, 829, 828, 830, 831, 954, 954, 954, + /* 110 */ 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, + /* 120 */ 954, 954, 954, 658, 725, 954, 954, 954, 954, 954, + /* 130 */ 954, 954, 954, 832, 833, 847, 846, 845, 954, 663, + /* 140 */ 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, + /* 150 */ 934, 932, 954, 879, 954, 954, 954, 954, 954, 954, + /* 160 */ 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, + /* 170 */ 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, + /* 180 */ 638, 756, 756, 756, 632, 954, 954, 954, 946, 760, + /* 190 */ 750, 954, 954, 954, 954, 954, 954, 954, 954, 954, + /* 200 */ 954, 954, 954, 800, 739, 917, 919, 954, 900, 737, + /* 210 */ 660, 758, 673, 748, 640, 794, 773, 773, 912, 794, + /* 220 */ 912, 696, 719, 954, 784, 954, 784, 693, 784, 773, + /* 230 */ 862, 954, 954, 954, 757, 748, 954, 939, 764, 764, + /* 240 */ 931, 931, 764, 806, 729, 794, 736, 736, 736, 736, + /* 250 */ 764, 655, 794, 806, 729, 729, 764, 655, 906, 904, + /* 260 */ 764, 764, 655, 764, 655, 764, 655, 872, 727, 727, + /* 270 */ 727, 711, 876, 876, 872, 727, 696, 727, 711, 727, + /* 280 */ 727, 777, 772, 777, 772, 777, 772, 764, 764, 954, + /* 290 */ 789, 778, 787, 785, 794, 954, 714, 648, 648, 637, + /* 300 */ 637, 637, 637, 951, 951, 946, 698, 698, 681, 954, + /* 310 */ 954, 954, 954, 954, 954, 954, 881, 954, 954, 954, + /* 320 */ 954, 954, 954, 954, 954, 954, 954, 954, 954, 633, + /* 330 */ 941, 954, 954, 938, 954, 954, 954, 954, 799, 954, + /* 340 */ 954, 954, 954, 954, 954, 954, 954, 954, 954, 916, + /* 350 */ 954, 954, 954, 954, 954, 954, 954, 910, 954, 954, + /* 360 */ 954, 954, 954, 954, 903, 902, 954, 954, 954, 954, + /* 370 */ 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, + /* 380 */ 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, + /* 390 */ 954, 954, 786, 954, 779, 954, 865, 954, 954, 954, + /* 400 */ 954, 954, 954, 954, 954, 954, 954, 742, 815, 954, + /* 410 */ 814, 818, 813, 665, 954, 646, 954, 629, 634, 950, + /* 420 */ 953, 952, 949, 948, 947, 942, 940, 937, 936, 935, + /* 430 */ 933, 930, 926, 885, 883, 890, 889, 888, 887, 886, + /* 440 */ 884, 882, 880, 801, 796, 793, 925, 878, 738, 735, + /* 450 */ 734, 654, 943, 909, 918, 805, 804, 807, 915, 914, + /* 460 */ 913, 911, 908, 895, 803, 802, 730, 870, 869, 657, + /* 470 */ 899, 898, 897, 901, 905, 896, 766, 656, 653, 662, + /* 480 */ 717, 718, 726, 724, 723, 722, 721, 720, 716, 664, + /* 490 */ 672, 710, 695, 694, 875, 877, 874, 873, 703, 702, + /* 500 */ 708, 707, 706, 705, 704, 701, 700, 699, 692, 691, + /* 510 */ 697, 690, 713, 712, 709, 689, 733, 732, 731, 728, + /* 520 */ 688, 687, 686, 818, 685, 684, 824, 823, 811, 854, + /* 530 */ 753, 752, 751, 763, 762, 775, 774, 809, 808, 776, + /* 540 */ 761, 755, 754, 770, 769, 768, 767, 759, 749, 781, + /* 550 */ 783, 782, 780, 856, 765, 853, 924, 923, 922, 921, + /* 560 */ 920, 858, 857, 825, 822, 676, 677, 893, 892, 894, + /* 570 */ 891, 679, 678, 675, 674, 855, 744, 743, 851, 848, + /* 580 */ 840, 836, 852, 849, 841, 837, 835, 834, 820, 819, + /* 590 */ 817, 816, 812, 821, 667, 745, 741, 740, 810, 747, + /* 600 */ 746, 683, 682, 680, 661, 659, 652, 650, 649, 651, + /* 610 */ 647, 645, 644, 643, 642, 641, 670, 669, 668, 666, + /* 620 */ 665, 639, 636, 635, 631, 630, 628, +}; + +/* The next table maps tokens into fallback tokens. If a construct +** like the following: +** +** %fallback ID X Y Z. +** +** appears in the grammar, then ID becomes a fallback token for X, Y, +** and Z. Whenever one of the tokens X, Y, or Z is input to the parser +** but it does not parse, the type of the token is changed to ID and +** the parse is retried before an error is thrown. +*/ +#ifdef YYFALLBACK +static const YYCODETYPE yyFallback[] = { + 0, /* $ => nothing */ + 0, /* SEMI => nothing */ + 26, /* EXPLAIN => ID */ + 26, /* QUERY => ID */ + 26, /* PLAN => ID */ + 26, /* BEGIN => ID */ + 0, /* TRANSACTION => nothing */ + 26, /* DEFERRED => ID */ + 26, /* IMMEDIATE => ID */ + 26, /* EXCLUSIVE => ID */ + 0, /* COMMIT => nothing */ + 26, /* END => ID */ + 26, /* ROLLBACK => ID */ + 26, /* SAVEPOINT => ID */ + 26, /* RELEASE => ID */ + 0, /* TO => nothing */ + 0, /* TABLE => nothing */ + 0, /* CREATE => nothing */ + 26, /* IF => ID */ + 0, /* NOT => nothing */ + 0, /* EXISTS => nothing */ + 26, /* TEMP => ID */ + 0, /* LP => nothing */ + 0, /* RP => nothing */ + 0, /* AS => nothing */ + 0, /* COMMA => nothing */ + 0, /* ID => nothing */ + 0, /* INDEXED => nothing */ + 26, /* ABORT => ID */ + 26, /* ACTION => ID */ + 26, /* AFTER => ID */ + 26, /* ANALYZE => ID */ + 26, /* ASC => ID */ + 26, /* ATTACH => ID */ + 26, /* BEFORE => ID */ + 26, /* BY => ID */ + 26, /* CASCADE => ID */ + 26, /* CAST => ID */ + 26, /* COLUMNKW => ID */ + 26, /* CONFLICT => ID */ + 26, /* DATABASE => ID */ + 26, /* DESC => ID */ + 26, /* DETACH => ID */ + 26, /* EACH => ID */ + 26, /* FAIL => ID */ + 26, /* FOR => ID */ + 26, /* IGNORE => ID */ + 26, /* INITIALLY => ID */ + 26, /* INSTEAD => ID */ + 26, /* LIKE_KW => ID */ + 26, /* MATCH => ID */ + 26, /* NO => ID */ + 26, /* KEY => ID */ + 26, /* OF => ID */ + 26, /* OFFSET => ID */ + 26, /* PRAGMA => ID */ + 26, /* RAISE => ID */ + 26, /* REPLACE => ID */ + 26, /* RESTRICT => ID */ + 26, /* ROW => ID */ + 26, /* TRIGGER => ID */ + 26, /* VACUUM => ID */ + 26, /* VIEW => ID */ + 26, /* VIRTUAL => ID */ + 26, /* REINDEX => ID */ + 26, /* RENAME => ID */ + 26, /* CTIME_KW => ID */ +}; +#endif /* YYFALLBACK */ + +/* The following structure represents a single element of the +** parser's stack. Information stored includes: +** +** + The state number for the parser at this level of the stack. +** +** + The value of the token stored at this level of the stack. +** (In other words, the "major" token.) +** +** + The semantic value stored at this level of the stack. This is +** the information used by the action routines in the grammar. +** It is sometimes called the "minor" token. +*/ +struct yyStackEntry { + YYACTIONTYPE stateno; /* The state-number */ + YYCODETYPE major; /* The major token value. This is the code + ** number for the token at this stack level */ + YYMINORTYPE minor; /* The user-supplied minor token value. This + ** is the value of the token */ +}; +typedef struct yyStackEntry yyStackEntry; + +/* The state of the parser is completely contained in an instance of +** the following structure */ +struct yyParser { + int yyidx; /* Index of top element in stack */ +#ifdef YYTRACKMAXSTACKDEPTH + int yyidxMax; /* Maximum value of yyidx */ +#endif + int yyerrcnt; /* Shifts left before out of the error */ + sqlite3ParserARG_SDECL /* A place to hold %extra_argument */ +#if YYSTACKDEPTH<=0 + int yystksz; /* Current side of the stack */ + yyStackEntry *yystack; /* The parser's stack */ +#else + yyStackEntry yystack[YYSTACKDEPTH]; /* The parser's stack */ +#endif +}; +typedef struct yyParser yyParser; + +#ifndef NDEBUG +/* #include */ +static FILE *yyTraceFILE = 0; +static char *yyTracePrompt = 0; +#endif /* NDEBUG */ + +#ifndef NDEBUG +/* +** Turn parser tracing on by giving a stream to which to write the trace +** and a prompt to preface each trace message. Tracing is turned off +** by making either argument NULL +** +** Inputs: +**
      +**
    • A FILE* to which trace output should be written. +** If NULL, then tracing is turned off. +**
    • A prefix string written at the beginning of every +** line of trace output. If NULL, then tracing is +** turned off. +**
    +** +** Outputs: +** None. +*/ +SQLITE_PRIVATE void sqlite3ParserTrace(FILE *TraceFILE, char *zTracePrompt){ + yyTraceFILE = TraceFILE; + yyTracePrompt = zTracePrompt; + if( yyTraceFILE==0 ) yyTracePrompt = 0; + else if( yyTracePrompt==0 ) yyTraceFILE = 0; +} +#endif /* NDEBUG */ + +#ifndef NDEBUG +/* For tracing shifts, the names of all terminals and nonterminals +** are required. The following table supplies these names */ +static const char *const yyTokenName[] = { + "$", "SEMI", "EXPLAIN", "QUERY", + "PLAN", "BEGIN", "TRANSACTION", "DEFERRED", + "IMMEDIATE", "EXCLUSIVE", "COMMIT", "END", + "ROLLBACK", "SAVEPOINT", "RELEASE", "TO", + "TABLE", "CREATE", "IF", "NOT", + "EXISTS", "TEMP", "LP", "RP", + "AS", "COMMA", "ID", "INDEXED", + "ABORT", "ACTION", "AFTER", "ANALYZE", + "ASC", "ATTACH", "BEFORE", "BY", + "CASCADE", "CAST", "COLUMNKW", "CONFLICT", + "DATABASE", "DESC", "DETACH", "EACH", + "FAIL", "FOR", "IGNORE", "INITIALLY", + "INSTEAD", "LIKE_KW", "MATCH", "NO", + "KEY", "OF", "OFFSET", "PRAGMA", + "RAISE", "REPLACE", "RESTRICT", "ROW", + "TRIGGER", "VACUUM", "VIEW", "VIRTUAL", + "REINDEX", "RENAME", "CTIME_KW", "ANY", + "OR", "AND", "IS", "BETWEEN", + "IN", "ISNULL", "NOTNULL", "NE", + "EQ", "GT", "LE", "LT", + "GE", "ESCAPE", "BITAND", "BITOR", + "LSHIFT", "RSHIFT", "PLUS", "MINUS", + "STAR", "SLASH", "REM", "CONCAT", + "COLLATE", "BITNOT", "STRING", "JOIN_KW", + "CONSTRAINT", "DEFAULT", "NULL", "PRIMARY", + "UNIQUE", "CHECK", "REFERENCES", "AUTOINCR", + "ON", "INSERT", "DELETE", "UPDATE", + "SET", "DEFERRABLE", "FOREIGN", "DROP", + "UNION", "ALL", "EXCEPT", "INTERSECT", + "SELECT", "DISTINCT", "DOT", "FROM", + "JOIN", "USING", "ORDER", "GROUP", + "HAVING", "LIMIT", "WHERE", "INTO", + "VALUES", "INTEGER", "FLOAT", "BLOB", + "REGISTER", "VARIABLE", "CASE", "WHEN", + "THEN", "ELSE", "INDEX", "ALTER", + "ADD", "error", "input", "cmdlist", + "ecmd", "explain", "cmdx", "cmd", + "transtype", "trans_opt", "nm", "savepoint_opt", + "create_table", "create_table_args", "createkw", "temp", + "ifnotexists", "dbnm", "columnlist", "conslist_opt", + "select", "column", "columnid", "type", + "carglist", "id", "ids", "typetoken", + "typename", "signed", "plus_num", "minus_num", + "ccons", "term", "expr", "onconf", + "sortorder", "autoinc", "idxlist_opt", "refargs", + "defer_subclause", "refarg", "refact", "init_deferred_pred_opt", + "conslist", "tconscomma", "tcons", "idxlist", + "defer_subclause_opt", "orconf", "resolvetype", "raisetype", + "ifexists", "fullname", "oneselect", "multiselect_op", + "distinct", "selcollist", "from", "where_opt", + "groupby_opt", "having_opt", "orderby_opt", "limit_opt", + "sclp", "as", "seltablist", "stl_prefix", + "joinop", "indexed_opt", "on_opt", "using_opt", + "joinop2", "inscollist", "sortlist", "nexprlist", + "setlist", "insert_cmd", "inscollist_opt", "valuelist", + "exprlist", "likeop", "between_op", "in_op", + "case_operand", "case_exprlist", "case_else", "uniqueflag", + "collate", "nmnum", "number", "trigger_decl", + "trigger_cmd_list", "trigger_time", "trigger_event", "foreach_clause", + "when_clause", "trigger_cmd", "trnm", "tridxby", + "database_kw_opt", "key_opt", "add_column_fullname", "kwcolumn_opt", + "create_vtab", "vtabarglist", "vtabarg", "vtabargtoken", + "lp", "anylist", +}; +#endif /* NDEBUG */ + +#ifndef NDEBUG +/* For tracing reduce actions, the names of all rules are required. +*/ +static const char *const yyRuleName[] = { + /* 0 */ "input ::= cmdlist", + /* 1 */ "cmdlist ::= cmdlist ecmd", + /* 2 */ "cmdlist ::= ecmd", + /* 3 */ "ecmd ::= SEMI", + /* 4 */ "ecmd ::= explain cmdx SEMI", + /* 5 */ "explain ::=", + /* 6 */ "explain ::= EXPLAIN", + /* 7 */ "explain ::= EXPLAIN QUERY PLAN", + /* 8 */ "cmdx ::= cmd", + /* 9 */ "cmd ::= BEGIN transtype trans_opt", + /* 10 */ "trans_opt ::=", + /* 11 */ "trans_opt ::= TRANSACTION", + /* 12 */ "trans_opt ::= TRANSACTION nm", + /* 13 */ "transtype ::=", + /* 14 */ "transtype ::= DEFERRED", + /* 15 */ "transtype ::= IMMEDIATE", + /* 16 */ "transtype ::= EXCLUSIVE", + /* 17 */ "cmd ::= COMMIT trans_opt", + /* 18 */ "cmd ::= END trans_opt", + /* 19 */ "cmd ::= ROLLBACK trans_opt", + /* 20 */ "savepoint_opt ::= SAVEPOINT", + /* 21 */ "savepoint_opt ::=", + /* 22 */ "cmd ::= SAVEPOINT nm", + /* 23 */ "cmd ::= RELEASE savepoint_opt nm", + /* 24 */ "cmd ::= ROLLBACK trans_opt TO savepoint_opt nm", + /* 25 */ "cmd ::= create_table create_table_args", + /* 26 */ "create_table ::= createkw temp TABLE ifnotexists nm dbnm", + /* 27 */ "createkw ::= CREATE", + /* 28 */ "ifnotexists ::=", + /* 29 */ "ifnotexists ::= IF NOT EXISTS", + /* 30 */ "temp ::= TEMP", + /* 31 */ "temp ::=", + /* 32 */ "create_table_args ::= LP columnlist conslist_opt RP", + /* 33 */ "create_table_args ::= AS select", + /* 34 */ "columnlist ::= columnlist COMMA column", + /* 35 */ "columnlist ::= column", + /* 36 */ "column ::= columnid type carglist", + /* 37 */ "columnid ::= nm", + /* 38 */ "id ::= ID", + /* 39 */ "id ::= INDEXED", + /* 40 */ "ids ::= ID|STRING", + /* 41 */ "nm ::= id", + /* 42 */ "nm ::= STRING", + /* 43 */ "nm ::= JOIN_KW", + /* 44 */ "type ::=", + /* 45 */ "type ::= typetoken", + /* 46 */ "typetoken ::= typename", + /* 47 */ "typetoken ::= typename LP signed RP", + /* 48 */ "typetoken ::= typename LP signed COMMA signed RP", + /* 49 */ "typename ::= ids", + /* 50 */ "typename ::= typename ids", + /* 51 */ "signed ::= plus_num", + /* 52 */ "signed ::= minus_num", + /* 53 */ "carglist ::= carglist ccons", + /* 54 */ "carglist ::=", + /* 55 */ "ccons ::= CONSTRAINT nm", + /* 56 */ "ccons ::= DEFAULT term", + /* 57 */ "ccons ::= DEFAULT LP expr RP", + /* 58 */ "ccons ::= DEFAULT PLUS term", + /* 59 */ "ccons ::= DEFAULT MINUS term", + /* 60 */ "ccons ::= DEFAULT id", + /* 61 */ "ccons ::= NULL onconf", + /* 62 */ "ccons ::= NOT NULL onconf", + /* 63 */ "ccons ::= PRIMARY KEY sortorder onconf autoinc", + /* 64 */ "ccons ::= UNIQUE onconf", + /* 65 */ "ccons ::= CHECK LP expr RP", + /* 66 */ "ccons ::= REFERENCES nm idxlist_opt refargs", + /* 67 */ "ccons ::= defer_subclause", + /* 68 */ "ccons ::= COLLATE ids", + /* 69 */ "autoinc ::=", + /* 70 */ "autoinc ::= AUTOINCR", + /* 71 */ "refargs ::=", + /* 72 */ "refargs ::= refargs refarg", + /* 73 */ "refarg ::= MATCH nm", + /* 74 */ "refarg ::= ON INSERT refact", + /* 75 */ "refarg ::= ON DELETE refact", + /* 76 */ "refarg ::= ON UPDATE refact", + /* 77 */ "refact ::= SET NULL", + /* 78 */ "refact ::= SET DEFAULT", + /* 79 */ "refact ::= CASCADE", + /* 80 */ "refact ::= RESTRICT", + /* 81 */ "refact ::= NO ACTION", + /* 82 */ "defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt", + /* 83 */ "defer_subclause ::= DEFERRABLE init_deferred_pred_opt", + /* 84 */ "init_deferred_pred_opt ::=", + /* 85 */ "init_deferred_pred_opt ::= INITIALLY DEFERRED", + /* 86 */ "init_deferred_pred_opt ::= INITIALLY IMMEDIATE", + /* 87 */ "conslist_opt ::=", + /* 88 */ "conslist_opt ::= COMMA conslist", + /* 89 */ "conslist ::= conslist tconscomma tcons", + /* 90 */ "conslist ::= tcons", + /* 91 */ "tconscomma ::= COMMA", + /* 92 */ "tconscomma ::=", + /* 93 */ "tcons ::= CONSTRAINT nm", + /* 94 */ "tcons ::= PRIMARY KEY LP idxlist autoinc RP onconf", + /* 95 */ "tcons ::= UNIQUE LP idxlist RP onconf", + /* 96 */ "tcons ::= CHECK LP expr RP onconf", + /* 97 */ "tcons ::= FOREIGN KEY LP idxlist RP REFERENCES nm idxlist_opt refargs defer_subclause_opt", + /* 98 */ "defer_subclause_opt ::=", + /* 99 */ "defer_subclause_opt ::= defer_subclause", + /* 100 */ "onconf ::=", + /* 101 */ "onconf ::= ON CONFLICT resolvetype", + /* 102 */ "orconf ::=", + /* 103 */ "orconf ::= OR resolvetype", + /* 104 */ "resolvetype ::= raisetype", + /* 105 */ "resolvetype ::= IGNORE", + /* 106 */ "resolvetype ::= REPLACE", + /* 107 */ "cmd ::= DROP TABLE ifexists fullname", + /* 108 */ "ifexists ::= IF EXISTS", + /* 109 */ "ifexists ::=", + /* 110 */ "cmd ::= createkw temp VIEW ifnotexists nm dbnm AS select", + /* 111 */ "cmd ::= DROP VIEW ifexists fullname", + /* 112 */ "cmd ::= select", + /* 113 */ "select ::= oneselect", + /* 114 */ "select ::= select multiselect_op oneselect", + /* 115 */ "multiselect_op ::= UNION", + /* 116 */ "multiselect_op ::= UNION ALL", + /* 117 */ "multiselect_op ::= EXCEPT|INTERSECT", + /* 118 */ "oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt", + /* 119 */ "distinct ::= DISTINCT", + /* 120 */ "distinct ::= ALL", + /* 121 */ "distinct ::=", + /* 122 */ "sclp ::= selcollist COMMA", + /* 123 */ "sclp ::=", + /* 124 */ "selcollist ::= sclp expr as", + /* 125 */ "selcollist ::= sclp STAR", + /* 126 */ "selcollist ::= sclp nm DOT STAR", + /* 127 */ "as ::= AS nm", + /* 128 */ "as ::= ids", + /* 129 */ "as ::=", + /* 130 */ "from ::=", + /* 131 */ "from ::= FROM seltablist", + /* 132 */ "stl_prefix ::= seltablist joinop", + /* 133 */ "stl_prefix ::=", + /* 134 */ "seltablist ::= stl_prefix nm dbnm as indexed_opt on_opt using_opt", + /* 135 */ "seltablist ::= stl_prefix LP select RP as on_opt using_opt", + /* 136 */ "seltablist ::= stl_prefix LP seltablist RP as on_opt using_opt", + /* 137 */ "dbnm ::=", + /* 138 */ "dbnm ::= DOT nm", + /* 139 */ "fullname ::= nm dbnm", + /* 140 */ "joinop ::= COMMA|JOIN", + /* 141 */ "joinop ::= JOIN_KW JOIN", + /* 142 */ "joinop ::= JOIN_KW nm JOIN", + /* 143 */ "joinop ::= JOIN_KW nm nm JOIN", + /* 144 */ "on_opt ::= ON expr", + /* 145 */ "on_opt ::=", + /* 146 */ "indexed_opt ::=", + /* 147 */ "indexed_opt ::= INDEXED BY nm", + /* 148 */ "indexed_opt ::= NOT INDEXED", + /* 149 */ "using_opt ::= USING LP inscollist RP", + /* 150 */ "using_opt ::=", + /* 151 */ "orderby_opt ::=", + /* 152 */ "orderby_opt ::= ORDER BY sortlist", + /* 153 */ "sortlist ::= sortlist COMMA expr sortorder", + /* 154 */ "sortlist ::= expr sortorder", + /* 155 */ "sortorder ::= ASC", + /* 156 */ "sortorder ::= DESC", + /* 157 */ "sortorder ::=", + /* 158 */ "groupby_opt ::=", + /* 159 */ "groupby_opt ::= GROUP BY nexprlist", + /* 160 */ "having_opt ::=", + /* 161 */ "having_opt ::= HAVING expr", + /* 162 */ "limit_opt ::=", + /* 163 */ "limit_opt ::= LIMIT expr", + /* 164 */ "limit_opt ::= LIMIT expr OFFSET expr", + /* 165 */ "limit_opt ::= LIMIT expr COMMA expr", + /* 166 */ "cmd ::= DELETE FROM fullname indexed_opt where_opt", + /* 167 */ "where_opt ::=", + /* 168 */ "where_opt ::= WHERE expr", + /* 169 */ "cmd ::= UPDATE orconf fullname indexed_opt SET setlist where_opt", + /* 170 */ "setlist ::= setlist COMMA nm EQ expr", + /* 171 */ "setlist ::= nm EQ expr", + /* 172 */ "cmd ::= insert_cmd INTO fullname inscollist_opt valuelist", + /* 173 */ "cmd ::= insert_cmd INTO fullname inscollist_opt select", + /* 174 */ "cmd ::= insert_cmd INTO fullname inscollist_opt DEFAULT VALUES", + /* 175 */ "insert_cmd ::= INSERT orconf", + /* 176 */ "insert_cmd ::= REPLACE", + /* 177 */ "valuelist ::= VALUES LP nexprlist RP", + /* 178 */ "valuelist ::= valuelist COMMA LP exprlist RP", + /* 179 */ "inscollist_opt ::=", + /* 180 */ "inscollist_opt ::= LP inscollist RP", + /* 181 */ "inscollist ::= inscollist COMMA nm", + /* 182 */ "inscollist ::= nm", + /* 183 */ "expr ::= term", + /* 184 */ "expr ::= LP expr RP", + /* 185 */ "term ::= NULL", + /* 186 */ "expr ::= id", + /* 187 */ "expr ::= JOIN_KW", + /* 188 */ "expr ::= nm DOT nm", + /* 189 */ "expr ::= nm DOT nm DOT nm", + /* 190 */ "term ::= INTEGER|FLOAT|BLOB", + /* 191 */ "term ::= STRING", + /* 192 */ "expr ::= REGISTER", + /* 193 */ "expr ::= VARIABLE", + /* 194 */ "expr ::= expr COLLATE ids", + /* 195 */ "expr ::= CAST LP expr AS typetoken RP", + /* 196 */ "expr ::= ID LP distinct exprlist RP", + /* 197 */ "expr ::= ID LP STAR RP", + /* 198 */ "term ::= CTIME_KW", + /* 199 */ "expr ::= expr AND expr", + /* 200 */ "expr ::= expr OR expr", + /* 201 */ "expr ::= expr LT|GT|GE|LE expr", + /* 202 */ "expr ::= expr EQ|NE expr", + /* 203 */ "expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr", + /* 204 */ "expr ::= expr PLUS|MINUS expr", + /* 205 */ "expr ::= expr STAR|SLASH|REM expr", + /* 206 */ "expr ::= expr CONCAT expr", + /* 207 */ "likeop ::= LIKE_KW", + /* 208 */ "likeop ::= NOT LIKE_KW", + /* 209 */ "likeop ::= MATCH", + /* 210 */ "likeop ::= NOT MATCH", + /* 211 */ "expr ::= expr likeop expr", + /* 212 */ "expr ::= expr likeop expr ESCAPE expr", + /* 213 */ "expr ::= expr ISNULL|NOTNULL", + /* 214 */ "expr ::= expr NOT NULL", + /* 215 */ "expr ::= expr IS expr", + /* 216 */ "expr ::= expr IS NOT expr", + /* 217 */ "expr ::= NOT expr", + /* 218 */ "expr ::= BITNOT expr", + /* 219 */ "expr ::= MINUS expr", + /* 220 */ "expr ::= PLUS expr", + /* 221 */ "between_op ::= BETWEEN", + /* 222 */ "between_op ::= NOT BETWEEN", + /* 223 */ "expr ::= expr between_op expr AND expr", + /* 224 */ "in_op ::= IN", + /* 225 */ "in_op ::= NOT IN", + /* 226 */ "expr ::= expr in_op LP exprlist RP", + /* 227 */ "expr ::= LP select RP", + /* 228 */ "expr ::= expr in_op LP select RP", + /* 229 */ "expr ::= expr in_op nm dbnm", + /* 230 */ "expr ::= EXISTS LP select RP", + /* 231 */ "expr ::= CASE case_operand case_exprlist case_else END", + /* 232 */ "case_exprlist ::= case_exprlist WHEN expr THEN expr", + /* 233 */ "case_exprlist ::= WHEN expr THEN expr", + /* 234 */ "case_else ::= ELSE expr", + /* 235 */ "case_else ::=", + /* 236 */ "case_operand ::= expr", + /* 237 */ "case_operand ::=", + /* 238 */ "exprlist ::= nexprlist", + /* 239 */ "exprlist ::=", + /* 240 */ "nexprlist ::= nexprlist COMMA expr", + /* 241 */ "nexprlist ::= expr", + /* 242 */ "cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP idxlist RP", + /* 243 */ "uniqueflag ::= UNIQUE", + /* 244 */ "uniqueflag ::=", + /* 245 */ "idxlist_opt ::=", + /* 246 */ "idxlist_opt ::= LP idxlist RP", + /* 247 */ "idxlist ::= idxlist COMMA nm collate sortorder", + /* 248 */ "idxlist ::= nm collate sortorder", + /* 249 */ "collate ::=", + /* 250 */ "collate ::= COLLATE ids", + /* 251 */ "cmd ::= DROP INDEX ifexists fullname", + /* 252 */ "cmd ::= VACUUM", + /* 253 */ "cmd ::= VACUUM nm", + /* 254 */ "cmd ::= PRAGMA nm dbnm", + /* 255 */ "cmd ::= PRAGMA nm dbnm EQ nmnum", + /* 256 */ "cmd ::= PRAGMA nm dbnm LP nmnum RP", + /* 257 */ "cmd ::= PRAGMA nm dbnm EQ minus_num", + /* 258 */ "cmd ::= PRAGMA nm dbnm LP minus_num RP", + /* 259 */ "nmnum ::= plus_num", + /* 260 */ "nmnum ::= nm", + /* 261 */ "nmnum ::= ON", + /* 262 */ "nmnum ::= DELETE", + /* 263 */ "nmnum ::= DEFAULT", + /* 264 */ "plus_num ::= PLUS number", + /* 265 */ "plus_num ::= number", + /* 266 */ "minus_num ::= MINUS number", + /* 267 */ "number ::= INTEGER|FLOAT", + /* 268 */ "cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END", + /* 269 */ "trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause", + /* 270 */ "trigger_time ::= BEFORE", + /* 271 */ "trigger_time ::= AFTER", + /* 272 */ "trigger_time ::= INSTEAD OF", + /* 273 */ "trigger_time ::=", + /* 274 */ "trigger_event ::= DELETE|INSERT", + /* 275 */ "trigger_event ::= UPDATE", + /* 276 */ "trigger_event ::= UPDATE OF inscollist", + /* 277 */ "foreach_clause ::=", + /* 278 */ "foreach_clause ::= FOR EACH ROW", + /* 279 */ "when_clause ::=", + /* 280 */ "when_clause ::= WHEN expr", + /* 281 */ "trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI", + /* 282 */ "trigger_cmd_list ::= trigger_cmd SEMI", + /* 283 */ "trnm ::= nm", + /* 284 */ "trnm ::= nm DOT nm", + /* 285 */ "tridxby ::=", + /* 286 */ "tridxby ::= INDEXED BY nm", + /* 287 */ "tridxby ::= NOT INDEXED", + /* 288 */ "trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist where_opt", + /* 289 */ "trigger_cmd ::= insert_cmd INTO trnm inscollist_opt valuelist", + /* 290 */ "trigger_cmd ::= insert_cmd INTO trnm inscollist_opt select", + /* 291 */ "trigger_cmd ::= DELETE FROM trnm tridxby where_opt", + /* 292 */ "trigger_cmd ::= select", + /* 293 */ "expr ::= RAISE LP IGNORE RP", + /* 294 */ "expr ::= RAISE LP raisetype COMMA nm RP", + /* 295 */ "raisetype ::= ROLLBACK", + /* 296 */ "raisetype ::= ABORT", + /* 297 */ "raisetype ::= FAIL", + /* 298 */ "cmd ::= DROP TRIGGER ifexists fullname", + /* 299 */ "cmd ::= ATTACH database_kw_opt expr AS expr key_opt", + /* 300 */ "cmd ::= DETACH database_kw_opt expr", + /* 301 */ "key_opt ::=", + /* 302 */ "key_opt ::= KEY expr", + /* 303 */ "database_kw_opt ::= DATABASE", + /* 304 */ "database_kw_opt ::=", + /* 305 */ "cmd ::= REINDEX", + /* 306 */ "cmd ::= REINDEX nm dbnm", + /* 307 */ "cmd ::= ANALYZE", + /* 308 */ "cmd ::= ANALYZE nm dbnm", + /* 309 */ "cmd ::= ALTER TABLE fullname RENAME TO nm", + /* 310 */ "cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt column", + /* 311 */ "add_column_fullname ::= fullname", + /* 312 */ "kwcolumn_opt ::=", + /* 313 */ "kwcolumn_opt ::= COLUMNKW", + /* 314 */ "cmd ::= create_vtab", + /* 315 */ "cmd ::= create_vtab LP vtabarglist RP", + /* 316 */ "create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm", + /* 317 */ "vtabarglist ::= vtabarg", + /* 318 */ "vtabarglist ::= vtabarglist COMMA vtabarg", + /* 319 */ "vtabarg ::=", + /* 320 */ "vtabarg ::= vtabarg vtabargtoken", + /* 321 */ "vtabargtoken ::= ANY", + /* 322 */ "vtabargtoken ::= lp anylist RP", + /* 323 */ "lp ::= LP", + /* 324 */ "anylist ::=", + /* 325 */ "anylist ::= anylist LP anylist RP", + /* 326 */ "anylist ::= anylist ANY", +}; +#endif /* NDEBUG */ + + +#if YYSTACKDEPTH<=0 +/* +** Try to increase the size of the parser stack. +*/ +static void yyGrowStack(yyParser *p){ + int newSize; + yyStackEntry *pNew; + + newSize = p->yystksz*2 + 100; + pNew = realloc(p->yystack, newSize*sizeof(pNew[0])); + if( pNew ){ + p->yystack = pNew; + p->yystksz = newSize; +#ifndef NDEBUG + if( yyTraceFILE ){ + fprintf(yyTraceFILE,"%sStack grows to %d entries!\n", + yyTracePrompt, p->yystksz); + } +#endif + } +} +#endif + +/* +** This function allocates a new parser. +** The only argument is a pointer to a function which works like +** malloc. +** +** Inputs: +** A pointer to the function used to allocate memory. +** +** Outputs: +** A pointer to a parser. This pointer is used in subsequent calls +** to sqlite3Parser and sqlite3ParserFree. +*/ +SQLITE_PRIVATE void *sqlite3ParserAlloc(void *(*mallocProc)(size_t)){ + yyParser *pParser; + pParser = (yyParser*)(*mallocProc)( (size_t)sizeof(yyParser) ); + if( pParser ){ + pParser->yyidx = -1; +#ifdef YYTRACKMAXSTACKDEPTH + pParser->yyidxMax = 0; +#endif +#if YYSTACKDEPTH<=0 + pParser->yystack = NULL; + pParser->yystksz = 0; + yyGrowStack(pParser); +#endif + } + return pParser; +} + +/* The following function deletes the value associated with a +** symbol. The symbol can be either a terminal or nonterminal. +** "yymajor" is the symbol code, and "yypminor" is a pointer to +** the value. +*/ +static void yy_destructor( + yyParser *yypParser, /* The parser */ + YYCODETYPE yymajor, /* Type code for object to destroy */ + YYMINORTYPE *yypminor /* The object to be destroyed */ +){ + sqlite3ParserARG_FETCH; + switch( yymajor ){ + /* Here is inserted the actions which take place when a + ** terminal or non-terminal is destroyed. This can happen + ** when the symbol is popped from the stack during a + ** reduce or during error processing or when a parser is + ** being destroyed before it is finished parsing. + ** + ** Note: during a reduce, the only symbols destroyed are those + ** which appear on the RHS of the rule, but which are not used + ** inside the C code. + */ + case 160: /* select */ + case 194: /* oneselect */ +{ +sqlite3SelectDelete(pParse->db, (yypminor->yy159)); +} + break; + case 173: /* term */ + case 174: /* expr */ +{ +sqlite3ExprDelete(pParse->db, (yypminor->yy342).pExpr); +} + break; + case 178: /* idxlist_opt */ + case 187: /* idxlist */ + case 197: /* selcollist */ + case 200: /* groupby_opt */ + case 202: /* orderby_opt */ + case 204: /* sclp */ + case 214: /* sortlist */ + case 215: /* nexprlist */ + case 216: /* setlist */ + case 220: /* exprlist */ + case 225: /* case_exprlist */ +{ +sqlite3ExprListDelete(pParse->db, (yypminor->yy442)); +} + break; + case 193: /* fullname */ + case 198: /* from */ + case 206: /* seltablist */ + case 207: /* stl_prefix */ +{ +sqlite3SrcListDelete(pParse->db, (yypminor->yy347)); +} + break; + case 199: /* where_opt */ + case 201: /* having_opt */ + case 210: /* on_opt */ + case 224: /* case_operand */ + case 226: /* case_else */ + case 236: /* when_clause */ + case 241: /* key_opt */ +{ +sqlite3ExprDelete(pParse->db, (yypminor->yy122)); +} + break; + case 211: /* using_opt */ + case 213: /* inscollist */ + case 218: /* inscollist_opt */ +{ +sqlite3IdListDelete(pParse->db, (yypminor->yy180)); +} + break; + case 219: /* valuelist */ +{ + + sqlite3ExprListDelete(pParse->db, (yypminor->yy487).pList); + sqlite3SelectDelete(pParse->db, (yypminor->yy487).pSelect); + +} + break; + case 232: /* trigger_cmd_list */ + case 237: /* trigger_cmd */ +{ +sqlite3DeleteTriggerStep(pParse->db, (yypminor->yy327)); +} + break; + case 234: /* trigger_event */ +{ +sqlite3IdListDelete(pParse->db, (yypminor->yy410).b); +} + break; + default: break; /* If no destructor action specified: do nothing */ + } +} + +/* +** Pop the parser's stack once. +** +** If there is a destructor routine associated with the token which +** is popped from the stack, then call it. +** +** Return the major token number for the symbol popped. +*/ +static int yy_pop_parser_stack(yyParser *pParser){ + YYCODETYPE yymajor; + yyStackEntry *yytos = &pParser->yystack[pParser->yyidx]; + + /* There is no mechanism by which the parser stack can be popped below + ** empty in SQLite. */ + if( NEVER(pParser->yyidx<0) ) return 0; +#ifndef NDEBUG + if( yyTraceFILE && pParser->yyidx>=0 ){ + fprintf(yyTraceFILE,"%sPopping %s\n", + yyTracePrompt, + yyTokenName[yytos->major]); + } +#endif + yymajor = yytos->major; + yy_destructor(pParser, yymajor, &yytos->minor); + pParser->yyidx--; + return yymajor; +} + +/* +** Deallocate and destroy a parser. Destructors are all called for +** all stack elements before shutting the parser down. +** +** Inputs: +**
      +**
    • A pointer to the parser. This should be a pointer +** obtained from sqlite3ParserAlloc. +**
    • A pointer to a function used to reclaim memory obtained +** from malloc. +**
    +*/ +SQLITE_PRIVATE void sqlite3ParserFree( + void *p, /* The parser to be deleted */ + void (*freeProc)(void*) /* Function used to reclaim memory */ +){ + yyParser *pParser = (yyParser*)p; + /* In SQLite, we never try to destroy a parser that was not successfully + ** created in the first place. */ + if( NEVER(pParser==0) ) return; + while( pParser->yyidx>=0 ) yy_pop_parser_stack(pParser); +#if YYSTACKDEPTH<=0 + free(pParser->yystack); +#endif + (*freeProc)((void*)pParser); +} + +/* +** Return the peak depth of the stack for a parser. +*/ +#ifdef YYTRACKMAXSTACKDEPTH +SQLITE_PRIVATE int sqlite3ParserStackPeak(void *p){ + yyParser *pParser = (yyParser*)p; + return pParser->yyidxMax; +} +#endif + +/* +** Find the appropriate action for a parser given the terminal +** look-ahead token iLookAhead. +** +** If the look-ahead token is YYNOCODE, then check to see if the action is +** independent of the look-ahead. If it is, return the action, otherwise +** return YY_NO_ACTION. +*/ +static int yy_find_shift_action( + yyParser *pParser, /* The parser */ + YYCODETYPE iLookAhead /* The look-ahead token */ +){ + int i; + int stateno = pParser->yystack[pParser->yyidx].stateno; + + if( stateno>YY_SHIFT_COUNT + || (i = yy_shift_ofst[stateno])==YY_SHIFT_USE_DFLT ){ + return yy_default[stateno]; + } + assert( iLookAhead!=YYNOCODE ); + i += iLookAhead; + if( i<0 || i>=YY_ACTTAB_COUNT || yy_lookahead[i]!=iLookAhead ){ + if( iLookAhead>0 ){ +#ifdef YYFALLBACK + YYCODETYPE iFallback; /* Fallback token */ + if( iLookAhead %s\n", + yyTracePrompt, yyTokenName[iLookAhead], yyTokenName[iFallback]); + } +#endif + return yy_find_shift_action(pParser, iFallback); + } +#endif +#ifdef YYWILDCARD + { + int j = i - iLookAhead + YYWILDCARD; + if( +#if YY_SHIFT_MIN+YYWILDCARD<0 + j>=0 && +#endif +#if YY_SHIFT_MAX+YYWILDCARD>=YY_ACTTAB_COUNT + j %s\n", + yyTracePrompt, yyTokenName[iLookAhead], yyTokenName[YYWILDCARD]); + } +#endif /* NDEBUG */ + return yy_action[j]; + } + } +#endif /* YYWILDCARD */ + } + return yy_default[stateno]; + }else{ + return yy_action[i]; + } +} + +/* +** Find the appropriate action for a parser given the non-terminal +** look-ahead token iLookAhead. +** +** If the look-ahead token is YYNOCODE, then check to see if the action is +** independent of the look-ahead. If it is, return the action, otherwise +** return YY_NO_ACTION. +*/ +static int yy_find_reduce_action( + int stateno, /* Current state number */ + YYCODETYPE iLookAhead /* The look-ahead token */ +){ + int i; +#ifdef YYERRORSYMBOL + if( stateno>YY_REDUCE_COUNT ){ + return yy_default[stateno]; + } +#else + assert( stateno<=YY_REDUCE_COUNT ); +#endif + i = yy_reduce_ofst[stateno]; + assert( i!=YY_REDUCE_USE_DFLT ); + assert( iLookAhead!=YYNOCODE ); + i += iLookAhead; +#ifdef YYERRORSYMBOL + if( i<0 || i>=YY_ACTTAB_COUNT || yy_lookahead[i]!=iLookAhead ){ + return yy_default[stateno]; + } +#else + assert( i>=0 && iyyidx--; +#ifndef NDEBUG + if( yyTraceFILE ){ + fprintf(yyTraceFILE,"%sStack Overflow!\n",yyTracePrompt); + } +#endif + while( yypParser->yyidx>=0 ) yy_pop_parser_stack(yypParser); + /* Here code is inserted which will execute if the parser + ** stack every overflows */ + + UNUSED_PARAMETER(yypMinor); /* Silence some compiler warnings */ + sqlite3ErrorMsg(pParse, "parser stack overflow"); + sqlite3ParserARG_STORE; /* Suppress warning about unused %extra_argument var */ +} + +/* +** Perform a shift action. +*/ +static void yy_shift( + yyParser *yypParser, /* The parser to be shifted */ + int yyNewState, /* The new state to shift in */ + int yyMajor, /* The major token to shift in */ + YYMINORTYPE *yypMinor /* Pointer to the minor token to shift in */ +){ + yyStackEntry *yytos; + yypParser->yyidx++; +#ifdef YYTRACKMAXSTACKDEPTH + if( yypParser->yyidx>yypParser->yyidxMax ){ + yypParser->yyidxMax = yypParser->yyidx; + } +#endif +#if YYSTACKDEPTH>0 + if( yypParser->yyidx>=YYSTACKDEPTH ){ + yyStackOverflow(yypParser, yypMinor); + return; + } +#else + if( yypParser->yyidx>=yypParser->yystksz ){ + yyGrowStack(yypParser); + if( yypParser->yyidx>=yypParser->yystksz ){ + yyStackOverflow(yypParser, yypMinor); + return; + } + } +#endif + yytos = &yypParser->yystack[yypParser->yyidx]; + yytos->stateno = (YYACTIONTYPE)yyNewState; + yytos->major = (YYCODETYPE)yyMajor; + yytos->minor = *yypMinor; +#ifndef NDEBUG + if( yyTraceFILE && yypParser->yyidx>0 ){ + int i; + fprintf(yyTraceFILE,"%sShift %d\n",yyTracePrompt,yyNewState); + fprintf(yyTraceFILE,"%sStack:",yyTracePrompt); + for(i=1; i<=yypParser->yyidx; i++) + fprintf(yyTraceFILE," %s",yyTokenName[yypParser->yystack[i].major]); + fprintf(yyTraceFILE,"\n"); + } +#endif +} + +/* The following table contains information about every rule that +** is used during the reduce. +*/ +static const struct { + YYCODETYPE lhs; /* Symbol on the left-hand side of the rule */ + unsigned char nrhs; /* Number of right-hand side symbols in the rule */ +} yyRuleInfo[] = { + { 142, 1 }, + { 143, 2 }, + { 143, 1 }, + { 144, 1 }, + { 144, 3 }, + { 145, 0 }, + { 145, 1 }, + { 145, 3 }, + { 146, 1 }, + { 147, 3 }, + { 149, 0 }, + { 149, 1 }, + { 149, 2 }, + { 148, 0 }, + { 148, 1 }, + { 148, 1 }, + { 148, 1 }, + { 147, 2 }, + { 147, 2 }, + { 147, 2 }, + { 151, 1 }, + { 151, 0 }, + { 147, 2 }, + { 147, 3 }, + { 147, 5 }, + { 147, 2 }, + { 152, 6 }, + { 154, 1 }, + { 156, 0 }, + { 156, 3 }, + { 155, 1 }, + { 155, 0 }, + { 153, 4 }, + { 153, 2 }, + { 158, 3 }, + { 158, 1 }, + { 161, 3 }, + { 162, 1 }, + { 165, 1 }, + { 165, 1 }, + { 166, 1 }, + { 150, 1 }, + { 150, 1 }, + { 150, 1 }, + { 163, 0 }, + { 163, 1 }, + { 167, 1 }, + { 167, 4 }, + { 167, 6 }, + { 168, 1 }, + { 168, 2 }, + { 169, 1 }, + { 169, 1 }, + { 164, 2 }, + { 164, 0 }, + { 172, 2 }, + { 172, 2 }, + { 172, 4 }, + { 172, 3 }, + { 172, 3 }, + { 172, 2 }, + { 172, 2 }, + { 172, 3 }, + { 172, 5 }, + { 172, 2 }, + { 172, 4 }, + { 172, 4 }, + { 172, 1 }, + { 172, 2 }, + { 177, 0 }, + { 177, 1 }, + { 179, 0 }, + { 179, 2 }, + { 181, 2 }, + { 181, 3 }, + { 181, 3 }, + { 181, 3 }, + { 182, 2 }, + { 182, 2 }, + { 182, 1 }, + { 182, 1 }, + { 182, 2 }, + { 180, 3 }, + { 180, 2 }, + { 183, 0 }, + { 183, 2 }, + { 183, 2 }, + { 159, 0 }, + { 159, 2 }, + { 184, 3 }, + { 184, 1 }, + { 185, 1 }, + { 185, 0 }, + { 186, 2 }, + { 186, 7 }, + { 186, 5 }, + { 186, 5 }, + { 186, 10 }, + { 188, 0 }, + { 188, 1 }, + { 175, 0 }, + { 175, 3 }, + { 189, 0 }, + { 189, 2 }, + { 190, 1 }, + { 190, 1 }, + { 190, 1 }, + { 147, 4 }, + { 192, 2 }, + { 192, 0 }, + { 147, 8 }, + { 147, 4 }, + { 147, 1 }, + { 160, 1 }, + { 160, 3 }, + { 195, 1 }, + { 195, 2 }, + { 195, 1 }, + { 194, 9 }, + { 196, 1 }, + { 196, 1 }, + { 196, 0 }, + { 204, 2 }, + { 204, 0 }, + { 197, 3 }, + { 197, 2 }, + { 197, 4 }, + { 205, 2 }, + { 205, 1 }, + { 205, 0 }, + { 198, 0 }, + { 198, 2 }, + { 207, 2 }, + { 207, 0 }, + { 206, 7 }, + { 206, 7 }, + { 206, 7 }, + { 157, 0 }, + { 157, 2 }, + { 193, 2 }, + { 208, 1 }, + { 208, 2 }, + { 208, 3 }, + { 208, 4 }, + { 210, 2 }, + { 210, 0 }, + { 209, 0 }, + { 209, 3 }, + { 209, 2 }, + { 211, 4 }, + { 211, 0 }, + { 202, 0 }, + { 202, 3 }, + { 214, 4 }, + { 214, 2 }, + { 176, 1 }, + { 176, 1 }, + { 176, 0 }, + { 200, 0 }, + { 200, 3 }, + { 201, 0 }, + { 201, 2 }, + { 203, 0 }, + { 203, 2 }, + { 203, 4 }, + { 203, 4 }, + { 147, 5 }, + { 199, 0 }, + { 199, 2 }, + { 147, 7 }, + { 216, 5 }, + { 216, 3 }, + { 147, 5 }, + { 147, 5 }, + { 147, 6 }, + { 217, 2 }, + { 217, 1 }, + { 219, 4 }, + { 219, 5 }, + { 218, 0 }, + { 218, 3 }, + { 213, 3 }, + { 213, 1 }, + { 174, 1 }, + { 174, 3 }, + { 173, 1 }, + { 174, 1 }, + { 174, 1 }, + { 174, 3 }, + { 174, 5 }, + { 173, 1 }, + { 173, 1 }, + { 174, 1 }, + { 174, 1 }, + { 174, 3 }, + { 174, 6 }, + { 174, 5 }, + { 174, 4 }, + { 173, 1 }, + { 174, 3 }, + { 174, 3 }, + { 174, 3 }, + { 174, 3 }, + { 174, 3 }, + { 174, 3 }, + { 174, 3 }, + { 174, 3 }, + { 221, 1 }, + { 221, 2 }, + { 221, 1 }, + { 221, 2 }, + { 174, 3 }, + { 174, 5 }, + { 174, 2 }, + { 174, 3 }, + { 174, 3 }, + { 174, 4 }, + { 174, 2 }, + { 174, 2 }, + { 174, 2 }, + { 174, 2 }, + { 222, 1 }, + { 222, 2 }, + { 174, 5 }, + { 223, 1 }, + { 223, 2 }, + { 174, 5 }, + { 174, 3 }, + { 174, 5 }, + { 174, 4 }, + { 174, 4 }, + { 174, 5 }, + { 225, 5 }, + { 225, 4 }, + { 226, 2 }, + { 226, 0 }, + { 224, 1 }, + { 224, 0 }, + { 220, 1 }, + { 220, 0 }, + { 215, 3 }, + { 215, 1 }, + { 147, 11 }, + { 227, 1 }, + { 227, 0 }, + { 178, 0 }, + { 178, 3 }, + { 187, 5 }, + { 187, 3 }, + { 228, 0 }, + { 228, 2 }, + { 147, 4 }, + { 147, 1 }, + { 147, 2 }, + { 147, 3 }, + { 147, 5 }, + { 147, 6 }, + { 147, 5 }, + { 147, 6 }, + { 229, 1 }, + { 229, 1 }, + { 229, 1 }, + { 229, 1 }, + { 229, 1 }, + { 170, 2 }, + { 170, 1 }, + { 171, 2 }, + { 230, 1 }, + { 147, 5 }, + { 231, 11 }, + { 233, 1 }, + { 233, 1 }, + { 233, 2 }, + { 233, 0 }, + { 234, 1 }, + { 234, 1 }, + { 234, 3 }, + { 235, 0 }, + { 235, 3 }, + { 236, 0 }, + { 236, 2 }, + { 232, 3 }, + { 232, 2 }, + { 238, 1 }, + { 238, 3 }, + { 239, 0 }, + { 239, 3 }, + { 239, 2 }, + { 237, 7 }, + { 237, 5 }, + { 237, 5 }, + { 237, 5 }, + { 237, 1 }, + { 174, 4 }, + { 174, 6 }, + { 191, 1 }, + { 191, 1 }, + { 191, 1 }, + { 147, 4 }, + { 147, 6 }, + { 147, 3 }, + { 241, 0 }, + { 241, 2 }, + { 240, 1 }, + { 240, 0 }, + { 147, 1 }, + { 147, 3 }, + { 147, 1 }, + { 147, 3 }, + { 147, 6 }, + { 147, 6 }, + { 242, 1 }, + { 243, 0 }, + { 243, 1 }, + { 147, 1 }, + { 147, 4 }, + { 244, 8 }, + { 245, 1 }, + { 245, 3 }, + { 246, 0 }, + { 246, 2 }, + { 247, 1 }, + { 247, 3 }, + { 248, 1 }, + { 249, 0 }, + { 249, 4 }, + { 249, 2 }, +}; + +static void yy_accept(yyParser*); /* Forward Declaration */ + +/* +** Perform a reduce action and the shift that must immediately +** follow the reduce. +*/ +static void yy_reduce( + yyParser *yypParser, /* The parser */ + int yyruleno /* Number of the rule by which to reduce */ +){ + int yygoto; /* The next state */ + int yyact; /* The next action */ + YYMINORTYPE yygotominor; /* The LHS of the rule reduced */ + yyStackEntry *yymsp; /* The top of the parser's stack */ + int yysize; /* Amount to pop the stack */ + sqlite3ParserARG_FETCH; + yymsp = &yypParser->yystack[yypParser->yyidx]; +#ifndef NDEBUG + if( yyTraceFILE && yyruleno>=0 + && yyruleno<(int)(sizeof(yyRuleName)/sizeof(yyRuleName[0])) ){ + fprintf(yyTraceFILE, "%sReduce [%s].\n", yyTracePrompt, + yyRuleName[yyruleno]); + } +#endif /* NDEBUG */ + + /* Silence complaints from purify about yygotominor being uninitialized + ** in some cases when it is copied into the stack after the following + ** switch. yygotominor is uninitialized when a rule reduces that does + ** not set the value of its left-hand side nonterminal. Leaving the + ** value of the nonterminal uninitialized is utterly harmless as long + ** as the value is never used. So really the only thing this code + ** accomplishes is to quieten purify. + ** + ** 2007-01-16: The wireshark project (www.wireshark.org) reports that + ** without this code, their parser segfaults. I'm not sure what there + ** parser is doing to make this happen. This is the second bug report + ** from wireshark this week. Clearly they are stressing Lemon in ways + ** that it has not been previously stressed... (SQLite ticket #2172) + */ + /*memset(&yygotominor, 0, sizeof(yygotominor));*/ + yygotominor = yyzerominor; + + + switch( yyruleno ){ + /* Beginning here are the reduction cases. A typical example + ** follows: + ** case 0: + ** #line + ** { ... } // User supplied code + ** #line + ** break; + */ + case 5: /* explain ::= */ +{ sqlite3BeginParse(pParse, 0); } + break; + case 6: /* explain ::= EXPLAIN */ +{ sqlite3BeginParse(pParse, 1); } + break; + case 7: /* explain ::= EXPLAIN QUERY PLAN */ +{ sqlite3BeginParse(pParse, 2); } + break; + case 8: /* cmdx ::= cmd */ +{ sqlite3FinishCoding(pParse); } + break; + case 9: /* cmd ::= BEGIN transtype trans_opt */ +{sqlite3BeginTransaction(pParse, yymsp[-1].minor.yy392);} + break; + case 13: /* transtype ::= */ +{yygotominor.yy392 = TK_DEFERRED;} + break; + case 14: /* transtype ::= DEFERRED */ + case 15: /* transtype ::= IMMEDIATE */ yytestcase(yyruleno==15); + case 16: /* transtype ::= EXCLUSIVE */ yytestcase(yyruleno==16); + case 115: /* multiselect_op ::= UNION */ yytestcase(yyruleno==115); + case 117: /* multiselect_op ::= EXCEPT|INTERSECT */ yytestcase(yyruleno==117); +{yygotominor.yy392 = yymsp[0].major;} + break; + case 17: /* cmd ::= COMMIT trans_opt */ + case 18: /* cmd ::= END trans_opt */ yytestcase(yyruleno==18); +{sqlite3CommitTransaction(pParse);} + break; + case 19: /* cmd ::= ROLLBACK trans_opt */ +{sqlite3RollbackTransaction(pParse);} + break; + case 22: /* cmd ::= SAVEPOINT nm */ +{ + sqlite3Savepoint(pParse, SAVEPOINT_BEGIN, &yymsp[0].minor.yy0); +} + break; + case 23: /* cmd ::= RELEASE savepoint_opt nm */ +{ + sqlite3Savepoint(pParse, SAVEPOINT_RELEASE, &yymsp[0].minor.yy0); +} + break; + case 24: /* cmd ::= ROLLBACK trans_opt TO savepoint_opt nm */ +{ + sqlite3Savepoint(pParse, SAVEPOINT_ROLLBACK, &yymsp[0].minor.yy0); +} + break; + case 26: /* create_table ::= createkw temp TABLE ifnotexists nm dbnm */ +{ + sqlite3StartTable(pParse,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0,yymsp[-4].minor.yy392,0,0,yymsp[-2].minor.yy392); +} + break; + case 27: /* createkw ::= CREATE */ +{ + pParse->db->lookaside.bEnabled = 0; + yygotominor.yy0 = yymsp[0].minor.yy0; +} + break; + case 28: /* ifnotexists ::= */ + case 31: /* temp ::= */ yytestcase(yyruleno==31); + case 69: /* autoinc ::= */ yytestcase(yyruleno==69); + case 82: /* defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt */ yytestcase(yyruleno==82); + case 84: /* init_deferred_pred_opt ::= */ yytestcase(yyruleno==84); + case 86: /* init_deferred_pred_opt ::= INITIALLY IMMEDIATE */ yytestcase(yyruleno==86); + case 98: /* defer_subclause_opt ::= */ yytestcase(yyruleno==98); + case 109: /* ifexists ::= */ yytestcase(yyruleno==109); + case 120: /* distinct ::= ALL */ yytestcase(yyruleno==120); + case 121: /* distinct ::= */ yytestcase(yyruleno==121); + case 221: /* between_op ::= BETWEEN */ yytestcase(yyruleno==221); + case 224: /* in_op ::= IN */ yytestcase(yyruleno==224); +{yygotominor.yy392 = 0;} + break; + case 29: /* ifnotexists ::= IF NOT EXISTS */ + case 30: /* temp ::= TEMP */ yytestcase(yyruleno==30); + case 70: /* autoinc ::= AUTOINCR */ yytestcase(yyruleno==70); + case 85: /* init_deferred_pred_opt ::= INITIALLY DEFERRED */ yytestcase(yyruleno==85); + case 108: /* ifexists ::= IF EXISTS */ yytestcase(yyruleno==108); + case 119: /* distinct ::= DISTINCT */ yytestcase(yyruleno==119); + case 222: /* between_op ::= NOT BETWEEN */ yytestcase(yyruleno==222); + case 225: /* in_op ::= NOT IN */ yytestcase(yyruleno==225); +{yygotominor.yy392 = 1;} + break; + case 32: /* create_table_args ::= LP columnlist conslist_opt RP */ +{ + sqlite3EndTable(pParse,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0,0); +} + break; + case 33: /* create_table_args ::= AS select */ +{ + sqlite3EndTable(pParse,0,0,yymsp[0].minor.yy159); + sqlite3SelectDelete(pParse->db, yymsp[0].minor.yy159); +} + break; + case 36: /* column ::= columnid type carglist */ +{ + yygotominor.yy0.z = yymsp[-2].minor.yy0.z; + yygotominor.yy0.n = (int)(pParse->sLastToken.z-yymsp[-2].minor.yy0.z) + pParse->sLastToken.n; +} + break; + case 37: /* columnid ::= nm */ +{ + sqlite3AddColumn(pParse,&yymsp[0].minor.yy0); + yygotominor.yy0 = yymsp[0].minor.yy0; + pParse->constraintName.n = 0; +} + break; + case 38: /* id ::= ID */ + case 39: /* id ::= INDEXED */ yytestcase(yyruleno==39); + case 40: /* ids ::= ID|STRING */ yytestcase(yyruleno==40); + case 41: /* nm ::= id */ yytestcase(yyruleno==41); + case 42: /* nm ::= STRING */ yytestcase(yyruleno==42); + case 43: /* nm ::= JOIN_KW */ yytestcase(yyruleno==43); + case 46: /* typetoken ::= typename */ yytestcase(yyruleno==46); + case 49: /* typename ::= ids */ yytestcase(yyruleno==49); + case 127: /* as ::= AS nm */ yytestcase(yyruleno==127); + case 128: /* as ::= ids */ yytestcase(yyruleno==128); + case 138: /* dbnm ::= DOT nm */ yytestcase(yyruleno==138); + case 147: /* indexed_opt ::= INDEXED BY nm */ yytestcase(yyruleno==147); + case 250: /* collate ::= COLLATE ids */ yytestcase(yyruleno==250); + case 259: /* nmnum ::= plus_num */ yytestcase(yyruleno==259); + case 260: /* nmnum ::= nm */ yytestcase(yyruleno==260); + case 261: /* nmnum ::= ON */ yytestcase(yyruleno==261); + case 262: /* nmnum ::= DELETE */ yytestcase(yyruleno==262); + case 263: /* nmnum ::= DEFAULT */ yytestcase(yyruleno==263); + case 264: /* plus_num ::= PLUS number */ yytestcase(yyruleno==264); + case 265: /* plus_num ::= number */ yytestcase(yyruleno==265); + case 266: /* minus_num ::= MINUS number */ yytestcase(yyruleno==266); + case 267: /* number ::= INTEGER|FLOAT */ yytestcase(yyruleno==267); + case 283: /* trnm ::= nm */ yytestcase(yyruleno==283); +{yygotominor.yy0 = yymsp[0].minor.yy0;} + break; + case 45: /* type ::= typetoken */ +{sqlite3AddColumnType(pParse,&yymsp[0].minor.yy0);} + break; + case 47: /* typetoken ::= typename LP signed RP */ +{ + yygotominor.yy0.z = yymsp[-3].minor.yy0.z; + yygotominor.yy0.n = (int)(&yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n] - yymsp[-3].minor.yy0.z); +} + break; + case 48: /* typetoken ::= typename LP signed COMMA signed RP */ +{ + yygotominor.yy0.z = yymsp[-5].minor.yy0.z; + yygotominor.yy0.n = (int)(&yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n] - yymsp[-5].minor.yy0.z); +} + break; + case 50: /* typename ::= typename ids */ +{yygotominor.yy0.z=yymsp[-1].minor.yy0.z; yygotominor.yy0.n=yymsp[0].minor.yy0.n+(int)(yymsp[0].minor.yy0.z-yymsp[-1].minor.yy0.z);} + break; + case 55: /* ccons ::= CONSTRAINT nm */ + case 93: /* tcons ::= CONSTRAINT nm */ yytestcase(yyruleno==93); +{pParse->constraintName = yymsp[0].minor.yy0;} + break; + case 56: /* ccons ::= DEFAULT term */ + case 58: /* ccons ::= DEFAULT PLUS term */ yytestcase(yyruleno==58); +{sqlite3AddDefaultValue(pParse,&yymsp[0].minor.yy342);} + break; + case 57: /* ccons ::= DEFAULT LP expr RP */ +{sqlite3AddDefaultValue(pParse,&yymsp[-1].minor.yy342);} + break; + case 59: /* ccons ::= DEFAULT MINUS term */ +{ + ExprSpan v; + v.pExpr = sqlite3PExpr(pParse, TK_UMINUS, yymsp[0].minor.yy342.pExpr, 0, 0); + v.zStart = yymsp[-1].minor.yy0.z; + v.zEnd = yymsp[0].minor.yy342.zEnd; + sqlite3AddDefaultValue(pParse,&v); +} + break; + case 60: /* ccons ::= DEFAULT id */ +{ + ExprSpan v; + spanExpr(&v, pParse, TK_STRING, &yymsp[0].minor.yy0); + sqlite3AddDefaultValue(pParse,&v); +} + break; + case 62: /* ccons ::= NOT NULL onconf */ +{sqlite3AddNotNull(pParse, yymsp[0].minor.yy392);} + break; + case 63: /* ccons ::= PRIMARY KEY sortorder onconf autoinc */ +{sqlite3AddPrimaryKey(pParse,0,yymsp[-1].minor.yy392,yymsp[0].minor.yy392,yymsp[-2].minor.yy392);} + break; + case 64: /* ccons ::= UNIQUE onconf */ +{sqlite3CreateIndex(pParse,0,0,0,0,yymsp[0].minor.yy392,0,0,0,0);} + break; + case 65: /* ccons ::= CHECK LP expr RP */ +{sqlite3AddCheckConstraint(pParse,yymsp[-1].minor.yy342.pExpr);} + break; + case 66: /* ccons ::= REFERENCES nm idxlist_opt refargs */ +{sqlite3CreateForeignKey(pParse,0,&yymsp[-2].minor.yy0,yymsp[-1].minor.yy442,yymsp[0].minor.yy392);} + break; + case 67: /* ccons ::= defer_subclause */ +{sqlite3DeferForeignKey(pParse,yymsp[0].minor.yy392);} + break; + case 68: /* ccons ::= COLLATE ids */ +{sqlite3AddCollateType(pParse, &yymsp[0].minor.yy0);} + break; + case 71: /* refargs ::= */ +{ yygotominor.yy392 = OE_None*0x0101; /* EV: R-19803-45884 */} + break; + case 72: /* refargs ::= refargs refarg */ +{ yygotominor.yy392 = (yymsp[-1].minor.yy392 & ~yymsp[0].minor.yy207.mask) | yymsp[0].minor.yy207.value; } + break; + case 73: /* refarg ::= MATCH nm */ + case 74: /* refarg ::= ON INSERT refact */ yytestcase(yyruleno==74); +{ yygotominor.yy207.value = 0; yygotominor.yy207.mask = 0x000000; } + break; + case 75: /* refarg ::= ON DELETE refact */ +{ yygotominor.yy207.value = yymsp[0].minor.yy392; yygotominor.yy207.mask = 0x0000ff; } + break; + case 76: /* refarg ::= ON UPDATE refact */ +{ yygotominor.yy207.value = yymsp[0].minor.yy392<<8; yygotominor.yy207.mask = 0x00ff00; } + break; + case 77: /* refact ::= SET NULL */ +{ yygotominor.yy392 = OE_SetNull; /* EV: R-33326-45252 */} + break; + case 78: /* refact ::= SET DEFAULT */ +{ yygotominor.yy392 = OE_SetDflt; /* EV: R-33326-45252 */} + break; + case 79: /* refact ::= CASCADE */ +{ yygotominor.yy392 = OE_Cascade; /* EV: R-33326-45252 */} + break; + case 80: /* refact ::= RESTRICT */ +{ yygotominor.yy392 = OE_Restrict; /* EV: R-33326-45252 */} + break; + case 81: /* refact ::= NO ACTION */ +{ yygotominor.yy392 = OE_None; /* EV: R-33326-45252 */} + break; + case 83: /* defer_subclause ::= DEFERRABLE init_deferred_pred_opt */ + case 99: /* defer_subclause_opt ::= defer_subclause */ yytestcase(yyruleno==99); + case 101: /* onconf ::= ON CONFLICT resolvetype */ yytestcase(yyruleno==101); + case 104: /* resolvetype ::= raisetype */ yytestcase(yyruleno==104); +{yygotominor.yy392 = yymsp[0].minor.yy392;} + break; + case 87: /* conslist_opt ::= */ +{yygotominor.yy0.n = 0; yygotominor.yy0.z = 0;} + break; + case 88: /* conslist_opt ::= COMMA conslist */ +{yygotominor.yy0 = yymsp[-1].minor.yy0;} + break; + case 91: /* tconscomma ::= COMMA */ +{pParse->constraintName.n = 0;} + break; + case 94: /* tcons ::= PRIMARY KEY LP idxlist autoinc RP onconf */ +{sqlite3AddPrimaryKey(pParse,yymsp[-3].minor.yy442,yymsp[0].minor.yy392,yymsp[-2].minor.yy392,0);} + break; + case 95: /* tcons ::= UNIQUE LP idxlist RP onconf */ +{sqlite3CreateIndex(pParse,0,0,0,yymsp[-2].minor.yy442,yymsp[0].minor.yy392,0,0,0,0);} + break; + case 96: /* tcons ::= CHECK LP expr RP onconf */ +{sqlite3AddCheckConstraint(pParse,yymsp[-2].minor.yy342.pExpr);} + break; + case 97: /* tcons ::= FOREIGN KEY LP idxlist RP REFERENCES nm idxlist_opt refargs defer_subclause_opt */ +{ + sqlite3CreateForeignKey(pParse, yymsp[-6].minor.yy442, &yymsp[-3].minor.yy0, yymsp[-2].minor.yy442, yymsp[-1].minor.yy392); + sqlite3DeferForeignKey(pParse, yymsp[0].minor.yy392); +} + break; + case 100: /* onconf ::= */ +{yygotominor.yy392 = OE_Default;} + break; + case 102: /* orconf ::= */ +{yygotominor.yy258 = OE_Default;} + break; + case 103: /* orconf ::= OR resolvetype */ +{yygotominor.yy258 = (u8)yymsp[0].minor.yy392;} + break; + case 105: /* resolvetype ::= IGNORE */ +{yygotominor.yy392 = OE_Ignore;} + break; + case 106: /* resolvetype ::= REPLACE */ +{yygotominor.yy392 = OE_Replace;} + break; + case 107: /* cmd ::= DROP TABLE ifexists fullname */ +{ + sqlite3DropTable(pParse, yymsp[0].minor.yy347, 0, yymsp[-1].minor.yy392); +} + break; + case 110: /* cmd ::= createkw temp VIEW ifnotexists nm dbnm AS select */ +{ + sqlite3CreateView(pParse, &yymsp[-7].minor.yy0, &yymsp[-3].minor.yy0, &yymsp[-2].minor.yy0, yymsp[0].minor.yy159, yymsp[-6].minor.yy392, yymsp[-4].minor.yy392); +} + break; + case 111: /* cmd ::= DROP VIEW ifexists fullname */ +{ + sqlite3DropTable(pParse, yymsp[0].minor.yy347, 1, yymsp[-1].minor.yy392); +} + break; + case 112: /* cmd ::= select */ +{ + SelectDest dest = {SRT_Output, 0, 0, 0, 0}; + sqlite3Select(pParse, yymsp[0].minor.yy159, &dest); + sqlite3ExplainBegin(pParse->pVdbe); + sqlite3ExplainSelect(pParse->pVdbe, yymsp[0].minor.yy159); + sqlite3ExplainFinish(pParse->pVdbe); + sqlite3SelectDelete(pParse->db, yymsp[0].minor.yy159); +} + break; + case 113: /* select ::= oneselect */ +{yygotominor.yy159 = yymsp[0].minor.yy159;} + break; + case 114: /* select ::= select multiselect_op oneselect */ +{ + if( yymsp[0].minor.yy159 ){ + yymsp[0].minor.yy159->op = (u8)yymsp[-1].minor.yy392; + yymsp[0].minor.yy159->pPrior = yymsp[-2].minor.yy159; + }else{ + sqlite3SelectDelete(pParse->db, yymsp[-2].minor.yy159); + } + yygotominor.yy159 = yymsp[0].minor.yy159; +} + break; + case 116: /* multiselect_op ::= UNION ALL */ +{yygotominor.yy392 = TK_ALL;} + break; + case 118: /* oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt */ +{ + yygotominor.yy159 = sqlite3SelectNew(pParse,yymsp[-6].minor.yy442,yymsp[-5].minor.yy347,yymsp[-4].minor.yy122,yymsp[-3].minor.yy442,yymsp[-2].minor.yy122,yymsp[-1].minor.yy442,yymsp[-7].minor.yy392,yymsp[0].minor.yy64.pLimit,yymsp[0].minor.yy64.pOffset); +} + break; + case 122: /* sclp ::= selcollist COMMA */ + case 246: /* idxlist_opt ::= LP idxlist RP */ yytestcase(yyruleno==246); +{yygotominor.yy442 = yymsp[-1].minor.yy442;} + break; + case 123: /* sclp ::= */ + case 151: /* orderby_opt ::= */ yytestcase(yyruleno==151); + case 158: /* groupby_opt ::= */ yytestcase(yyruleno==158); + case 239: /* exprlist ::= */ yytestcase(yyruleno==239); + case 245: /* idxlist_opt ::= */ yytestcase(yyruleno==245); +{yygotominor.yy442 = 0;} + break; + case 124: /* selcollist ::= sclp expr as */ +{ + yygotominor.yy442 = sqlite3ExprListAppend(pParse, yymsp[-2].minor.yy442, yymsp[-1].minor.yy342.pExpr); + if( yymsp[0].minor.yy0.n>0 ) sqlite3ExprListSetName(pParse, yygotominor.yy442, &yymsp[0].minor.yy0, 1); + sqlite3ExprListSetSpan(pParse,yygotominor.yy442,&yymsp[-1].minor.yy342); +} + break; + case 125: /* selcollist ::= sclp STAR */ +{ + Expr *p = sqlite3Expr(pParse->db, TK_ALL, 0); + yygotominor.yy442 = sqlite3ExprListAppend(pParse, yymsp[-1].minor.yy442, p); +} + break; + case 126: /* selcollist ::= sclp nm DOT STAR */ +{ + Expr *pRight = sqlite3PExpr(pParse, TK_ALL, 0, 0, &yymsp[0].minor.yy0); + Expr *pLeft = sqlite3PExpr(pParse, TK_ID, 0, 0, &yymsp[-2].minor.yy0); + Expr *pDot = sqlite3PExpr(pParse, TK_DOT, pLeft, pRight, 0); + yygotominor.yy442 = sqlite3ExprListAppend(pParse,yymsp[-3].minor.yy442, pDot); +} + break; + case 129: /* as ::= */ +{yygotominor.yy0.n = 0;} + break; + case 130: /* from ::= */ +{yygotominor.yy347 = sqlite3DbMallocZero(pParse->db, sizeof(*yygotominor.yy347));} + break; + case 131: /* from ::= FROM seltablist */ +{ + yygotominor.yy347 = yymsp[0].minor.yy347; + sqlite3SrcListShiftJoinType(yygotominor.yy347); +} + break; + case 132: /* stl_prefix ::= seltablist joinop */ +{ + yygotominor.yy347 = yymsp[-1].minor.yy347; + if( ALWAYS(yygotominor.yy347 && yygotominor.yy347->nSrc>0) ) yygotominor.yy347->a[yygotominor.yy347->nSrc-1].jointype = (u8)yymsp[0].minor.yy392; +} + break; + case 133: /* stl_prefix ::= */ +{yygotominor.yy347 = 0;} + break; + case 134: /* seltablist ::= stl_prefix nm dbnm as indexed_opt on_opt using_opt */ +{ + yygotominor.yy347 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy347,&yymsp[-5].minor.yy0,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,0,yymsp[-1].minor.yy122,yymsp[0].minor.yy180); + sqlite3SrcListIndexedBy(pParse, yygotominor.yy347, &yymsp[-2].minor.yy0); +} + break; + case 135: /* seltablist ::= stl_prefix LP select RP as on_opt using_opt */ +{ + yygotominor.yy347 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy347,0,0,&yymsp[-2].minor.yy0,yymsp[-4].minor.yy159,yymsp[-1].minor.yy122,yymsp[0].minor.yy180); + } + break; + case 136: /* seltablist ::= stl_prefix LP seltablist RP as on_opt using_opt */ +{ + if( yymsp[-6].minor.yy347==0 && yymsp[-2].minor.yy0.n==0 && yymsp[-1].minor.yy122==0 && yymsp[0].minor.yy180==0 ){ + yygotominor.yy347 = yymsp[-4].minor.yy347; + }else{ + Select *pSubquery; + sqlite3SrcListShiftJoinType(yymsp[-4].minor.yy347); + pSubquery = sqlite3SelectNew(pParse,0,yymsp[-4].minor.yy347,0,0,0,0,0,0,0); + yygotominor.yy347 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy347,0,0,&yymsp[-2].minor.yy0,pSubquery,yymsp[-1].minor.yy122,yymsp[0].minor.yy180); + } + } + break; + case 137: /* dbnm ::= */ + case 146: /* indexed_opt ::= */ yytestcase(yyruleno==146); +{yygotominor.yy0.z=0; yygotominor.yy0.n=0;} + break; + case 139: /* fullname ::= nm dbnm */ +{yygotominor.yy347 = sqlite3SrcListAppend(pParse->db,0,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0);} + break; + case 140: /* joinop ::= COMMA|JOIN */ +{ yygotominor.yy392 = JT_INNER; } + break; + case 141: /* joinop ::= JOIN_KW JOIN */ +{ yygotominor.yy392 = sqlite3JoinType(pParse,&yymsp[-1].minor.yy0,0,0); } + break; + case 142: /* joinop ::= JOIN_KW nm JOIN */ +{ yygotominor.yy392 = sqlite3JoinType(pParse,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0,0); } + break; + case 143: /* joinop ::= JOIN_KW nm nm JOIN */ +{ yygotominor.yy392 = sqlite3JoinType(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0); } + break; + case 144: /* on_opt ::= ON expr */ + case 161: /* having_opt ::= HAVING expr */ yytestcase(yyruleno==161); + case 168: /* where_opt ::= WHERE expr */ yytestcase(yyruleno==168); + case 234: /* case_else ::= ELSE expr */ yytestcase(yyruleno==234); + case 236: /* case_operand ::= expr */ yytestcase(yyruleno==236); +{yygotominor.yy122 = yymsp[0].minor.yy342.pExpr;} + break; + case 145: /* on_opt ::= */ + case 160: /* having_opt ::= */ yytestcase(yyruleno==160); + case 167: /* where_opt ::= */ yytestcase(yyruleno==167); + case 235: /* case_else ::= */ yytestcase(yyruleno==235); + case 237: /* case_operand ::= */ yytestcase(yyruleno==237); +{yygotominor.yy122 = 0;} + break; + case 148: /* indexed_opt ::= NOT INDEXED */ +{yygotominor.yy0.z=0; yygotominor.yy0.n=1;} + break; + case 149: /* using_opt ::= USING LP inscollist RP */ + case 180: /* inscollist_opt ::= LP inscollist RP */ yytestcase(yyruleno==180); +{yygotominor.yy180 = yymsp[-1].minor.yy180;} + break; + case 150: /* using_opt ::= */ + case 179: /* inscollist_opt ::= */ yytestcase(yyruleno==179); +{yygotominor.yy180 = 0;} + break; + case 152: /* orderby_opt ::= ORDER BY sortlist */ + case 159: /* groupby_opt ::= GROUP BY nexprlist */ yytestcase(yyruleno==159); + case 238: /* exprlist ::= nexprlist */ yytestcase(yyruleno==238); +{yygotominor.yy442 = yymsp[0].minor.yy442;} + break; + case 153: /* sortlist ::= sortlist COMMA expr sortorder */ +{ + yygotominor.yy442 = sqlite3ExprListAppend(pParse,yymsp[-3].minor.yy442,yymsp[-1].minor.yy342.pExpr); + if( yygotominor.yy442 ) yygotominor.yy442->a[yygotominor.yy442->nExpr-1].sortOrder = (u8)yymsp[0].minor.yy392; +} + break; + case 154: /* sortlist ::= expr sortorder */ +{ + yygotominor.yy442 = sqlite3ExprListAppend(pParse,0,yymsp[-1].minor.yy342.pExpr); + if( yygotominor.yy442 && ALWAYS(yygotominor.yy442->a) ) yygotominor.yy442->a[0].sortOrder = (u8)yymsp[0].minor.yy392; +} + break; + case 155: /* sortorder ::= ASC */ + case 157: /* sortorder ::= */ yytestcase(yyruleno==157); +{yygotominor.yy392 = SQLITE_SO_ASC;} + break; + case 156: /* sortorder ::= DESC */ +{yygotominor.yy392 = SQLITE_SO_DESC;} + break; + case 162: /* limit_opt ::= */ +{yygotominor.yy64.pLimit = 0; yygotominor.yy64.pOffset = 0;} + break; + case 163: /* limit_opt ::= LIMIT expr */ +{yygotominor.yy64.pLimit = yymsp[0].minor.yy342.pExpr; yygotominor.yy64.pOffset = 0;} + break; + case 164: /* limit_opt ::= LIMIT expr OFFSET expr */ +{yygotominor.yy64.pLimit = yymsp[-2].minor.yy342.pExpr; yygotominor.yy64.pOffset = yymsp[0].minor.yy342.pExpr;} + break; + case 165: /* limit_opt ::= LIMIT expr COMMA expr */ +{yygotominor.yy64.pOffset = yymsp[-2].minor.yy342.pExpr; yygotominor.yy64.pLimit = yymsp[0].minor.yy342.pExpr;} + break; + case 166: /* cmd ::= DELETE FROM fullname indexed_opt where_opt */ +{ + sqlite3SrcListIndexedBy(pParse, yymsp[-2].minor.yy347, &yymsp[-1].minor.yy0); + sqlite3DeleteFrom(pParse,yymsp[-2].minor.yy347,yymsp[0].minor.yy122); +} + break; + case 169: /* cmd ::= UPDATE orconf fullname indexed_opt SET setlist where_opt */ +{ + sqlite3SrcListIndexedBy(pParse, yymsp[-4].minor.yy347, &yymsp[-3].minor.yy0); + sqlite3ExprListCheckLength(pParse,yymsp[-1].minor.yy442,"set list"); + sqlite3Update(pParse,yymsp[-4].minor.yy347,yymsp[-1].minor.yy442,yymsp[0].minor.yy122,yymsp[-5].minor.yy258); +} + break; + case 170: /* setlist ::= setlist COMMA nm EQ expr */ +{ + yygotominor.yy442 = sqlite3ExprListAppend(pParse, yymsp[-4].minor.yy442, yymsp[0].minor.yy342.pExpr); + sqlite3ExprListSetName(pParse, yygotominor.yy442, &yymsp[-2].minor.yy0, 1); +} + break; + case 171: /* setlist ::= nm EQ expr */ +{ + yygotominor.yy442 = sqlite3ExprListAppend(pParse, 0, yymsp[0].minor.yy342.pExpr); + sqlite3ExprListSetName(pParse, yygotominor.yy442, &yymsp[-2].minor.yy0, 1); +} + break; + case 172: /* cmd ::= insert_cmd INTO fullname inscollist_opt valuelist */ +{sqlite3Insert(pParse, yymsp[-2].minor.yy347, yymsp[0].minor.yy487.pList, yymsp[0].minor.yy487.pSelect, yymsp[-1].minor.yy180, yymsp[-4].minor.yy258);} + break; + case 173: /* cmd ::= insert_cmd INTO fullname inscollist_opt select */ +{sqlite3Insert(pParse, yymsp[-2].minor.yy347, 0, yymsp[0].minor.yy159, yymsp[-1].minor.yy180, yymsp[-4].minor.yy258);} + break; + case 174: /* cmd ::= insert_cmd INTO fullname inscollist_opt DEFAULT VALUES */ +{sqlite3Insert(pParse, yymsp[-3].minor.yy347, 0, 0, yymsp[-2].minor.yy180, yymsp[-5].minor.yy258);} + break; + case 175: /* insert_cmd ::= INSERT orconf */ +{yygotominor.yy258 = yymsp[0].minor.yy258;} + break; + case 176: /* insert_cmd ::= REPLACE */ +{yygotominor.yy258 = OE_Replace;} + break; + case 177: /* valuelist ::= VALUES LP nexprlist RP */ +{ + yygotominor.yy487.pList = yymsp[-1].minor.yy442; + yygotominor.yy487.pSelect = 0; +} + break; + case 178: /* valuelist ::= valuelist COMMA LP exprlist RP */ +{ + Select *pRight = sqlite3SelectNew(pParse, yymsp[-1].minor.yy442, 0, 0, 0, 0, 0, 0, 0, 0); + if( yymsp[-4].minor.yy487.pList ){ + yymsp[-4].minor.yy487.pSelect = sqlite3SelectNew(pParse, yymsp[-4].minor.yy487.pList, 0, 0, 0, 0, 0, 0, 0, 0); + yymsp[-4].minor.yy487.pList = 0; + } + yygotominor.yy487.pList = 0; + if( yymsp[-4].minor.yy487.pSelect==0 || pRight==0 ){ + sqlite3SelectDelete(pParse->db, pRight); + sqlite3SelectDelete(pParse->db, yymsp[-4].minor.yy487.pSelect); + yygotominor.yy487.pSelect = 0; + }else{ + pRight->op = TK_ALL; + pRight->pPrior = yymsp[-4].minor.yy487.pSelect; + pRight->selFlags |= SF_Values; + pRight->pPrior->selFlags |= SF_Values; + yygotominor.yy487.pSelect = pRight; + } +} + break; + case 181: /* inscollist ::= inscollist COMMA nm */ +{yygotominor.yy180 = sqlite3IdListAppend(pParse->db,yymsp[-2].minor.yy180,&yymsp[0].minor.yy0);} + break; + case 182: /* inscollist ::= nm */ +{yygotominor.yy180 = sqlite3IdListAppend(pParse->db,0,&yymsp[0].minor.yy0);} + break; + case 183: /* expr ::= term */ +{yygotominor.yy342 = yymsp[0].minor.yy342;} + break; + case 184: /* expr ::= LP expr RP */ +{yygotominor.yy342.pExpr = yymsp[-1].minor.yy342.pExpr; spanSet(&yygotominor.yy342,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0);} + break; + case 185: /* term ::= NULL */ + case 190: /* term ::= INTEGER|FLOAT|BLOB */ yytestcase(yyruleno==190); + case 191: /* term ::= STRING */ yytestcase(yyruleno==191); +{spanExpr(&yygotominor.yy342, pParse, yymsp[0].major, &yymsp[0].minor.yy0);} + break; + case 186: /* expr ::= id */ + case 187: /* expr ::= JOIN_KW */ yytestcase(yyruleno==187); +{spanExpr(&yygotominor.yy342, pParse, TK_ID, &yymsp[0].minor.yy0);} + break; + case 188: /* expr ::= nm DOT nm */ +{ + Expr *temp1 = sqlite3PExpr(pParse, TK_ID, 0, 0, &yymsp[-2].minor.yy0); + Expr *temp2 = sqlite3PExpr(pParse, TK_ID, 0, 0, &yymsp[0].minor.yy0); + yygotominor.yy342.pExpr = sqlite3PExpr(pParse, TK_DOT, temp1, temp2, 0); + spanSet(&yygotominor.yy342,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0); +} + break; + case 189: /* expr ::= nm DOT nm DOT nm */ +{ + Expr *temp1 = sqlite3PExpr(pParse, TK_ID, 0, 0, &yymsp[-4].minor.yy0); + Expr *temp2 = sqlite3PExpr(pParse, TK_ID, 0, 0, &yymsp[-2].minor.yy0); + Expr *temp3 = sqlite3PExpr(pParse, TK_ID, 0, 0, &yymsp[0].minor.yy0); + Expr *temp4 = sqlite3PExpr(pParse, TK_DOT, temp2, temp3, 0); + yygotominor.yy342.pExpr = sqlite3PExpr(pParse, TK_DOT, temp1, temp4, 0); + spanSet(&yygotominor.yy342,&yymsp[-4].minor.yy0,&yymsp[0].minor.yy0); +} + break; + case 192: /* expr ::= REGISTER */ +{ + /* When doing a nested parse, one can include terms in an expression + ** that look like this: #1 #2 ... These terms refer to registers + ** in the virtual machine. #N is the N-th register. */ + if( pParse->nested==0 ){ + sqlite3ErrorMsg(pParse, "near \"%T\": syntax error", &yymsp[0].minor.yy0); + yygotominor.yy342.pExpr = 0; + }else{ + yygotominor.yy342.pExpr = sqlite3PExpr(pParse, TK_REGISTER, 0, 0, &yymsp[0].minor.yy0); + if( yygotominor.yy342.pExpr ) sqlite3GetInt32(&yymsp[0].minor.yy0.z[1], &yygotominor.yy342.pExpr->iTable); + } + spanSet(&yygotominor.yy342, &yymsp[0].minor.yy0, &yymsp[0].minor.yy0); +} + break; + case 193: /* expr ::= VARIABLE */ +{ + spanExpr(&yygotominor.yy342, pParse, TK_VARIABLE, &yymsp[0].minor.yy0); + sqlite3ExprAssignVarNumber(pParse, yygotominor.yy342.pExpr); + spanSet(&yygotominor.yy342, &yymsp[0].minor.yy0, &yymsp[0].minor.yy0); +} + break; + case 194: /* expr ::= expr COLLATE ids */ +{ + yygotominor.yy342.pExpr = sqlite3ExprSetCollByToken(pParse, yymsp[-2].minor.yy342.pExpr, &yymsp[0].minor.yy0); + yygotominor.yy342.zStart = yymsp[-2].minor.yy342.zStart; + yygotominor.yy342.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n]; +} + break; + case 195: /* expr ::= CAST LP expr AS typetoken RP */ +{ + yygotominor.yy342.pExpr = sqlite3PExpr(pParse, TK_CAST, yymsp[-3].minor.yy342.pExpr, 0, &yymsp[-1].minor.yy0); + spanSet(&yygotominor.yy342,&yymsp[-5].minor.yy0,&yymsp[0].minor.yy0); +} + break; + case 196: /* expr ::= ID LP distinct exprlist RP */ +{ + if( yymsp[-1].minor.yy442 && yymsp[-1].minor.yy442->nExpr>pParse->db->aLimit[SQLITE_LIMIT_FUNCTION_ARG] ){ + sqlite3ErrorMsg(pParse, "too many arguments on function %T", &yymsp[-4].minor.yy0); + } + yygotominor.yy342.pExpr = sqlite3ExprFunction(pParse, yymsp[-1].minor.yy442, &yymsp[-4].minor.yy0); + spanSet(&yygotominor.yy342,&yymsp[-4].minor.yy0,&yymsp[0].minor.yy0); + if( yymsp[-2].minor.yy392 && yygotominor.yy342.pExpr ){ + yygotominor.yy342.pExpr->flags |= EP_Distinct; + } +} + break; + case 197: /* expr ::= ID LP STAR RP */ +{ + yygotominor.yy342.pExpr = sqlite3ExprFunction(pParse, 0, &yymsp[-3].minor.yy0); + spanSet(&yygotominor.yy342,&yymsp[-3].minor.yy0,&yymsp[0].minor.yy0); +} + break; + case 198: /* term ::= CTIME_KW */ +{ + /* The CURRENT_TIME, CURRENT_DATE, and CURRENT_TIMESTAMP values are + ** treated as functions that return constants */ + yygotominor.yy342.pExpr = sqlite3ExprFunction(pParse, 0,&yymsp[0].minor.yy0); + if( yygotominor.yy342.pExpr ){ + yygotominor.yy342.pExpr->op = TK_CONST_FUNC; + } + spanSet(&yygotominor.yy342, &yymsp[0].minor.yy0, &yymsp[0].minor.yy0); +} + break; + case 199: /* expr ::= expr AND expr */ + case 200: /* expr ::= expr OR expr */ yytestcase(yyruleno==200); + case 201: /* expr ::= expr LT|GT|GE|LE expr */ yytestcase(yyruleno==201); + case 202: /* expr ::= expr EQ|NE expr */ yytestcase(yyruleno==202); + case 203: /* expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr */ yytestcase(yyruleno==203); + case 204: /* expr ::= expr PLUS|MINUS expr */ yytestcase(yyruleno==204); + case 205: /* expr ::= expr STAR|SLASH|REM expr */ yytestcase(yyruleno==205); + case 206: /* expr ::= expr CONCAT expr */ yytestcase(yyruleno==206); +{spanBinaryExpr(&yygotominor.yy342,pParse,yymsp[-1].major,&yymsp[-2].minor.yy342,&yymsp[0].minor.yy342);} + break; + case 207: /* likeop ::= LIKE_KW */ + case 209: /* likeop ::= MATCH */ yytestcase(yyruleno==209); +{yygotominor.yy318.eOperator = yymsp[0].minor.yy0; yygotominor.yy318.bNot = 0;} + break; + case 208: /* likeop ::= NOT LIKE_KW */ + case 210: /* likeop ::= NOT MATCH */ yytestcase(yyruleno==210); +{yygotominor.yy318.eOperator = yymsp[0].minor.yy0; yygotominor.yy318.bNot = 1;} + break; + case 211: /* expr ::= expr likeop expr */ +{ + ExprList *pList; + pList = sqlite3ExprListAppend(pParse,0, yymsp[0].minor.yy342.pExpr); + pList = sqlite3ExprListAppend(pParse,pList, yymsp[-2].minor.yy342.pExpr); + yygotominor.yy342.pExpr = sqlite3ExprFunction(pParse, pList, &yymsp[-1].minor.yy318.eOperator); + if( yymsp[-1].minor.yy318.bNot ) yygotominor.yy342.pExpr = sqlite3PExpr(pParse, TK_NOT, yygotominor.yy342.pExpr, 0, 0); + yygotominor.yy342.zStart = yymsp[-2].minor.yy342.zStart; + yygotominor.yy342.zEnd = yymsp[0].minor.yy342.zEnd; + if( yygotominor.yy342.pExpr ) yygotominor.yy342.pExpr->flags |= EP_InfixFunc; +} + break; + case 212: /* expr ::= expr likeop expr ESCAPE expr */ +{ + ExprList *pList; + pList = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy342.pExpr); + pList = sqlite3ExprListAppend(pParse,pList, yymsp[-4].minor.yy342.pExpr); + pList = sqlite3ExprListAppend(pParse,pList, yymsp[0].minor.yy342.pExpr); + yygotominor.yy342.pExpr = sqlite3ExprFunction(pParse, pList, &yymsp[-3].minor.yy318.eOperator); + if( yymsp[-3].minor.yy318.bNot ) yygotominor.yy342.pExpr = sqlite3PExpr(pParse, TK_NOT, yygotominor.yy342.pExpr, 0, 0); + yygotominor.yy342.zStart = yymsp[-4].minor.yy342.zStart; + yygotominor.yy342.zEnd = yymsp[0].minor.yy342.zEnd; + if( yygotominor.yy342.pExpr ) yygotominor.yy342.pExpr->flags |= EP_InfixFunc; +} + break; + case 213: /* expr ::= expr ISNULL|NOTNULL */ +{spanUnaryPostfix(&yygotominor.yy342,pParse,yymsp[0].major,&yymsp[-1].minor.yy342,&yymsp[0].minor.yy0);} + break; + case 214: /* expr ::= expr NOT NULL */ +{spanUnaryPostfix(&yygotominor.yy342,pParse,TK_NOTNULL,&yymsp[-2].minor.yy342,&yymsp[0].minor.yy0);} + break; + case 215: /* expr ::= expr IS expr */ +{ + spanBinaryExpr(&yygotominor.yy342,pParse,TK_IS,&yymsp[-2].minor.yy342,&yymsp[0].minor.yy342); + binaryToUnaryIfNull(pParse, yymsp[0].minor.yy342.pExpr, yygotominor.yy342.pExpr, TK_ISNULL); +} + break; + case 216: /* expr ::= expr IS NOT expr */ +{ + spanBinaryExpr(&yygotominor.yy342,pParse,TK_ISNOT,&yymsp[-3].minor.yy342,&yymsp[0].minor.yy342); + binaryToUnaryIfNull(pParse, yymsp[0].minor.yy342.pExpr, yygotominor.yy342.pExpr, TK_NOTNULL); +} + break; + case 217: /* expr ::= NOT expr */ + case 218: /* expr ::= BITNOT expr */ yytestcase(yyruleno==218); +{spanUnaryPrefix(&yygotominor.yy342,pParse,yymsp[-1].major,&yymsp[0].minor.yy342,&yymsp[-1].minor.yy0);} + break; + case 219: /* expr ::= MINUS expr */ +{spanUnaryPrefix(&yygotominor.yy342,pParse,TK_UMINUS,&yymsp[0].minor.yy342,&yymsp[-1].minor.yy0);} + break; + case 220: /* expr ::= PLUS expr */ +{spanUnaryPrefix(&yygotominor.yy342,pParse,TK_UPLUS,&yymsp[0].minor.yy342,&yymsp[-1].minor.yy0);} + break; + case 223: /* expr ::= expr between_op expr AND expr */ +{ + ExprList *pList = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy342.pExpr); + pList = sqlite3ExprListAppend(pParse,pList, yymsp[0].minor.yy342.pExpr); + yygotominor.yy342.pExpr = sqlite3PExpr(pParse, TK_BETWEEN, yymsp[-4].minor.yy342.pExpr, 0, 0); + if( yygotominor.yy342.pExpr ){ + yygotominor.yy342.pExpr->x.pList = pList; + }else{ + sqlite3ExprListDelete(pParse->db, pList); + } + if( yymsp[-3].minor.yy392 ) yygotominor.yy342.pExpr = sqlite3PExpr(pParse, TK_NOT, yygotominor.yy342.pExpr, 0, 0); + yygotominor.yy342.zStart = yymsp[-4].minor.yy342.zStart; + yygotominor.yy342.zEnd = yymsp[0].minor.yy342.zEnd; +} + break; + case 226: /* expr ::= expr in_op LP exprlist RP */ +{ + if( yymsp[-1].minor.yy442==0 ){ + /* Expressions of the form + ** + ** expr1 IN () + ** expr1 NOT IN () + ** + ** simplify to constants 0 (false) and 1 (true), respectively, + ** regardless of the value of expr1. + */ + yygotominor.yy342.pExpr = sqlite3PExpr(pParse, TK_INTEGER, 0, 0, &sqlite3IntTokens[yymsp[-3].minor.yy392]); + sqlite3ExprDelete(pParse->db, yymsp[-4].minor.yy342.pExpr); + }else{ + yygotominor.yy342.pExpr = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy342.pExpr, 0, 0); + if( yygotominor.yy342.pExpr ){ + yygotominor.yy342.pExpr->x.pList = yymsp[-1].minor.yy442; + sqlite3ExprSetHeight(pParse, yygotominor.yy342.pExpr); + }else{ + sqlite3ExprListDelete(pParse->db, yymsp[-1].minor.yy442); + } + if( yymsp[-3].minor.yy392 ) yygotominor.yy342.pExpr = sqlite3PExpr(pParse, TK_NOT, yygotominor.yy342.pExpr, 0, 0); + } + yygotominor.yy342.zStart = yymsp[-4].minor.yy342.zStart; + yygotominor.yy342.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n]; + } + break; + case 227: /* expr ::= LP select RP */ +{ + yygotominor.yy342.pExpr = sqlite3PExpr(pParse, TK_SELECT, 0, 0, 0); + if( yygotominor.yy342.pExpr ){ + yygotominor.yy342.pExpr->x.pSelect = yymsp[-1].minor.yy159; + ExprSetProperty(yygotominor.yy342.pExpr, EP_xIsSelect); + sqlite3ExprSetHeight(pParse, yygotominor.yy342.pExpr); + }else{ + sqlite3SelectDelete(pParse->db, yymsp[-1].minor.yy159); + } + yygotominor.yy342.zStart = yymsp[-2].minor.yy0.z; + yygotominor.yy342.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n]; + } + break; + case 228: /* expr ::= expr in_op LP select RP */ +{ + yygotominor.yy342.pExpr = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy342.pExpr, 0, 0); + if( yygotominor.yy342.pExpr ){ + yygotominor.yy342.pExpr->x.pSelect = yymsp[-1].minor.yy159; + ExprSetProperty(yygotominor.yy342.pExpr, EP_xIsSelect); + sqlite3ExprSetHeight(pParse, yygotominor.yy342.pExpr); + }else{ + sqlite3SelectDelete(pParse->db, yymsp[-1].minor.yy159); + } + if( yymsp[-3].minor.yy392 ) yygotominor.yy342.pExpr = sqlite3PExpr(pParse, TK_NOT, yygotominor.yy342.pExpr, 0, 0); + yygotominor.yy342.zStart = yymsp[-4].minor.yy342.zStart; + yygotominor.yy342.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n]; + } + break; + case 229: /* expr ::= expr in_op nm dbnm */ +{ + SrcList *pSrc = sqlite3SrcListAppend(pParse->db, 0,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0); + yygotominor.yy342.pExpr = sqlite3PExpr(pParse, TK_IN, yymsp[-3].minor.yy342.pExpr, 0, 0); + if( yygotominor.yy342.pExpr ){ + yygotominor.yy342.pExpr->x.pSelect = sqlite3SelectNew(pParse, 0,pSrc,0,0,0,0,0,0,0); + ExprSetProperty(yygotominor.yy342.pExpr, EP_xIsSelect); + sqlite3ExprSetHeight(pParse, yygotominor.yy342.pExpr); + }else{ + sqlite3SrcListDelete(pParse->db, pSrc); + } + if( yymsp[-2].minor.yy392 ) yygotominor.yy342.pExpr = sqlite3PExpr(pParse, TK_NOT, yygotominor.yy342.pExpr, 0, 0); + yygotominor.yy342.zStart = yymsp[-3].minor.yy342.zStart; + yygotominor.yy342.zEnd = yymsp[0].minor.yy0.z ? &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n] : &yymsp[-1].minor.yy0.z[yymsp[-1].minor.yy0.n]; + } + break; + case 230: /* expr ::= EXISTS LP select RP */ +{ + Expr *p = yygotominor.yy342.pExpr = sqlite3PExpr(pParse, TK_EXISTS, 0, 0, 0); + if( p ){ + p->x.pSelect = yymsp[-1].minor.yy159; + ExprSetProperty(p, EP_xIsSelect); + sqlite3ExprSetHeight(pParse, p); + }else{ + sqlite3SelectDelete(pParse->db, yymsp[-1].minor.yy159); + } + yygotominor.yy342.zStart = yymsp[-3].minor.yy0.z; + yygotominor.yy342.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n]; + } + break; + case 231: /* expr ::= CASE case_operand case_exprlist case_else END */ +{ + yygotominor.yy342.pExpr = sqlite3PExpr(pParse, TK_CASE, yymsp[-3].minor.yy122, yymsp[-1].minor.yy122, 0); + if( yygotominor.yy342.pExpr ){ + yygotominor.yy342.pExpr->x.pList = yymsp[-2].minor.yy442; + sqlite3ExprSetHeight(pParse, yygotominor.yy342.pExpr); + }else{ + sqlite3ExprListDelete(pParse->db, yymsp[-2].minor.yy442); + } + yygotominor.yy342.zStart = yymsp[-4].minor.yy0.z; + yygotominor.yy342.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n]; +} + break; + case 232: /* case_exprlist ::= case_exprlist WHEN expr THEN expr */ +{ + yygotominor.yy442 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy442, yymsp[-2].minor.yy342.pExpr); + yygotominor.yy442 = sqlite3ExprListAppend(pParse,yygotominor.yy442, yymsp[0].minor.yy342.pExpr); +} + break; + case 233: /* case_exprlist ::= WHEN expr THEN expr */ +{ + yygotominor.yy442 = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy342.pExpr); + yygotominor.yy442 = sqlite3ExprListAppend(pParse,yygotominor.yy442, yymsp[0].minor.yy342.pExpr); +} + break; + case 240: /* nexprlist ::= nexprlist COMMA expr */ +{yygotominor.yy442 = sqlite3ExprListAppend(pParse,yymsp[-2].minor.yy442,yymsp[0].minor.yy342.pExpr);} + break; + case 241: /* nexprlist ::= expr */ +{yygotominor.yy442 = sqlite3ExprListAppend(pParse,0,yymsp[0].minor.yy342.pExpr);} + break; + case 242: /* cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP idxlist RP */ +{ + sqlite3CreateIndex(pParse, &yymsp[-6].minor.yy0, &yymsp[-5].minor.yy0, + sqlite3SrcListAppend(pParse->db,0,&yymsp[-3].minor.yy0,0), yymsp[-1].minor.yy442, yymsp[-9].minor.yy392, + &yymsp[-10].minor.yy0, &yymsp[0].minor.yy0, SQLITE_SO_ASC, yymsp[-7].minor.yy392); +} + break; + case 243: /* uniqueflag ::= UNIQUE */ + case 296: /* raisetype ::= ABORT */ yytestcase(yyruleno==296); +{yygotominor.yy392 = OE_Abort;} + break; + case 244: /* uniqueflag ::= */ +{yygotominor.yy392 = OE_None;} + break; + case 247: /* idxlist ::= idxlist COMMA nm collate sortorder */ +{ + Expr *p = 0; + if( yymsp[-1].minor.yy0.n>0 ){ + p = sqlite3Expr(pParse->db, TK_COLUMN, 0); + sqlite3ExprSetCollByToken(pParse, p, &yymsp[-1].minor.yy0); + } + yygotominor.yy442 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy442, p); + sqlite3ExprListSetName(pParse,yygotominor.yy442,&yymsp[-2].minor.yy0,1); + sqlite3ExprListCheckLength(pParse, yygotominor.yy442, "index"); + if( yygotominor.yy442 ) yygotominor.yy442->a[yygotominor.yy442->nExpr-1].sortOrder = (u8)yymsp[0].minor.yy392; +} + break; + case 248: /* idxlist ::= nm collate sortorder */ +{ + Expr *p = 0; + if( yymsp[-1].minor.yy0.n>0 ){ + p = sqlite3PExpr(pParse, TK_COLUMN, 0, 0, 0); + sqlite3ExprSetCollByToken(pParse, p, &yymsp[-1].minor.yy0); + } + yygotominor.yy442 = sqlite3ExprListAppend(pParse,0, p); + sqlite3ExprListSetName(pParse, yygotominor.yy442, &yymsp[-2].minor.yy0, 1); + sqlite3ExprListCheckLength(pParse, yygotominor.yy442, "index"); + if( yygotominor.yy442 ) yygotominor.yy442->a[yygotominor.yy442->nExpr-1].sortOrder = (u8)yymsp[0].minor.yy392; +} + break; + case 249: /* collate ::= */ +{yygotominor.yy0.z = 0; yygotominor.yy0.n = 0;} + break; + case 251: /* cmd ::= DROP INDEX ifexists fullname */ +{sqlite3DropIndex(pParse, yymsp[0].minor.yy347, yymsp[-1].minor.yy392);} + break; + case 252: /* cmd ::= VACUUM */ + case 253: /* cmd ::= VACUUM nm */ yytestcase(yyruleno==253); +{sqlite3Vacuum(pParse);} + break; + case 254: /* cmd ::= PRAGMA nm dbnm */ +{sqlite3Pragma(pParse,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0,0,0);} + break; + case 255: /* cmd ::= PRAGMA nm dbnm EQ nmnum */ +{sqlite3Pragma(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0,0);} + break; + case 256: /* cmd ::= PRAGMA nm dbnm LP nmnum RP */ +{sqlite3Pragma(pParse,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,&yymsp[-1].minor.yy0,0);} + break; + case 257: /* cmd ::= PRAGMA nm dbnm EQ minus_num */ +{sqlite3Pragma(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0,1);} + break; + case 258: /* cmd ::= PRAGMA nm dbnm LP minus_num RP */ +{sqlite3Pragma(pParse,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,&yymsp[-1].minor.yy0,1);} + break; + case 268: /* cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */ +{ + Token all; + all.z = yymsp[-3].minor.yy0.z; + all.n = (int)(yymsp[0].minor.yy0.z - yymsp[-3].minor.yy0.z) + yymsp[0].minor.yy0.n; + sqlite3FinishTrigger(pParse, yymsp[-1].minor.yy327, &all); +} + break; + case 269: /* trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause */ +{ + sqlite3BeginTrigger(pParse, &yymsp[-7].minor.yy0, &yymsp[-6].minor.yy0, yymsp[-5].minor.yy392, yymsp[-4].minor.yy410.a, yymsp[-4].minor.yy410.b, yymsp[-2].minor.yy347, yymsp[0].minor.yy122, yymsp[-10].minor.yy392, yymsp[-8].minor.yy392); + yygotominor.yy0 = (yymsp[-6].minor.yy0.n==0?yymsp[-7].minor.yy0:yymsp[-6].minor.yy0); +} + break; + case 270: /* trigger_time ::= BEFORE */ + case 273: /* trigger_time ::= */ yytestcase(yyruleno==273); +{ yygotominor.yy392 = TK_BEFORE; } + break; + case 271: /* trigger_time ::= AFTER */ +{ yygotominor.yy392 = TK_AFTER; } + break; + case 272: /* trigger_time ::= INSTEAD OF */ +{ yygotominor.yy392 = TK_INSTEAD;} + break; + case 274: /* trigger_event ::= DELETE|INSERT */ + case 275: /* trigger_event ::= UPDATE */ yytestcase(yyruleno==275); +{yygotominor.yy410.a = yymsp[0].major; yygotominor.yy410.b = 0;} + break; + case 276: /* trigger_event ::= UPDATE OF inscollist */ +{yygotominor.yy410.a = TK_UPDATE; yygotominor.yy410.b = yymsp[0].minor.yy180;} + break; + case 279: /* when_clause ::= */ + case 301: /* key_opt ::= */ yytestcase(yyruleno==301); +{ yygotominor.yy122 = 0; } + break; + case 280: /* when_clause ::= WHEN expr */ + case 302: /* key_opt ::= KEY expr */ yytestcase(yyruleno==302); +{ yygotominor.yy122 = yymsp[0].minor.yy342.pExpr; } + break; + case 281: /* trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */ +{ + assert( yymsp[-2].minor.yy327!=0 ); + yymsp[-2].minor.yy327->pLast->pNext = yymsp[-1].minor.yy327; + yymsp[-2].minor.yy327->pLast = yymsp[-1].minor.yy327; + yygotominor.yy327 = yymsp[-2].minor.yy327; +} + break; + case 282: /* trigger_cmd_list ::= trigger_cmd SEMI */ +{ + assert( yymsp[-1].minor.yy327!=0 ); + yymsp[-1].minor.yy327->pLast = yymsp[-1].minor.yy327; + yygotominor.yy327 = yymsp[-1].minor.yy327; +} + break; + case 284: /* trnm ::= nm DOT nm */ +{ + yygotominor.yy0 = yymsp[0].minor.yy0; + sqlite3ErrorMsg(pParse, + "qualified table names are not allowed on INSERT, UPDATE, and DELETE " + "statements within triggers"); +} + break; + case 286: /* tridxby ::= INDEXED BY nm */ +{ + sqlite3ErrorMsg(pParse, + "the INDEXED BY clause is not allowed on UPDATE or DELETE statements " + "within triggers"); +} + break; + case 287: /* tridxby ::= NOT INDEXED */ +{ + sqlite3ErrorMsg(pParse, + "the NOT INDEXED clause is not allowed on UPDATE or DELETE statements " + "within triggers"); +} + break; + case 288: /* trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist where_opt */ +{ yygotominor.yy327 = sqlite3TriggerUpdateStep(pParse->db, &yymsp[-4].minor.yy0, yymsp[-1].minor.yy442, yymsp[0].minor.yy122, yymsp[-5].minor.yy258); } + break; + case 289: /* trigger_cmd ::= insert_cmd INTO trnm inscollist_opt valuelist */ +{yygotominor.yy327 = sqlite3TriggerInsertStep(pParse->db, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy180, yymsp[0].minor.yy487.pList, yymsp[0].minor.yy487.pSelect, yymsp[-4].minor.yy258);} + break; + case 290: /* trigger_cmd ::= insert_cmd INTO trnm inscollist_opt select */ +{yygotominor.yy327 = sqlite3TriggerInsertStep(pParse->db, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy180, 0, yymsp[0].minor.yy159, yymsp[-4].minor.yy258);} + break; + case 291: /* trigger_cmd ::= DELETE FROM trnm tridxby where_opt */ +{yygotominor.yy327 = sqlite3TriggerDeleteStep(pParse->db, &yymsp[-2].minor.yy0, yymsp[0].minor.yy122);} + break; + case 292: /* trigger_cmd ::= select */ +{yygotominor.yy327 = sqlite3TriggerSelectStep(pParse->db, yymsp[0].minor.yy159); } + break; + case 293: /* expr ::= RAISE LP IGNORE RP */ +{ + yygotominor.yy342.pExpr = sqlite3PExpr(pParse, TK_RAISE, 0, 0, 0); + if( yygotominor.yy342.pExpr ){ + yygotominor.yy342.pExpr->affinity = OE_Ignore; + } + yygotominor.yy342.zStart = yymsp[-3].minor.yy0.z; + yygotominor.yy342.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n]; +} + break; + case 294: /* expr ::= RAISE LP raisetype COMMA nm RP */ +{ + yygotominor.yy342.pExpr = sqlite3PExpr(pParse, TK_RAISE, 0, 0, &yymsp[-1].minor.yy0); + if( yygotominor.yy342.pExpr ) { + yygotominor.yy342.pExpr->affinity = (char)yymsp[-3].minor.yy392; + } + yygotominor.yy342.zStart = yymsp[-5].minor.yy0.z; + yygotominor.yy342.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n]; +} + break; + case 295: /* raisetype ::= ROLLBACK */ +{yygotominor.yy392 = OE_Rollback;} + break; + case 297: /* raisetype ::= FAIL */ +{yygotominor.yy392 = OE_Fail;} + break; + case 298: /* cmd ::= DROP TRIGGER ifexists fullname */ +{ + sqlite3DropTrigger(pParse,yymsp[0].minor.yy347,yymsp[-1].minor.yy392); +} + break; + case 299: /* cmd ::= ATTACH database_kw_opt expr AS expr key_opt */ +{ + sqlite3Attach(pParse, yymsp[-3].minor.yy342.pExpr, yymsp[-1].minor.yy342.pExpr, yymsp[0].minor.yy122); +} + break; + case 300: /* cmd ::= DETACH database_kw_opt expr */ +{ + sqlite3Detach(pParse, yymsp[0].minor.yy342.pExpr); +} + break; + case 305: /* cmd ::= REINDEX */ +{sqlite3Reindex(pParse, 0, 0);} + break; + case 306: /* cmd ::= REINDEX nm dbnm */ +{sqlite3Reindex(pParse, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0);} + break; + case 307: /* cmd ::= ANALYZE */ +{sqlite3Analyze(pParse, 0, 0);} + break; + case 308: /* cmd ::= ANALYZE nm dbnm */ +{sqlite3Analyze(pParse, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0);} + break; + case 309: /* cmd ::= ALTER TABLE fullname RENAME TO nm */ +{ + sqlite3AlterRenameTable(pParse,yymsp[-3].minor.yy347,&yymsp[0].minor.yy0); +} + break; + case 310: /* cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt column */ +{ + sqlite3AlterFinishAddColumn(pParse, &yymsp[0].minor.yy0); +} + break; + case 311: /* add_column_fullname ::= fullname */ +{ + pParse->db->lookaside.bEnabled = 0; + sqlite3AlterBeginAddColumn(pParse, yymsp[0].minor.yy347); +} + break; + case 314: /* cmd ::= create_vtab */ +{sqlite3VtabFinishParse(pParse,0);} + break; + case 315: /* cmd ::= create_vtab LP vtabarglist RP */ +{sqlite3VtabFinishParse(pParse,&yymsp[0].minor.yy0);} + break; + case 316: /* create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm */ +{ + sqlite3VtabBeginParse(pParse, &yymsp[-3].minor.yy0, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, yymsp[-4].minor.yy392); +} + break; + case 319: /* vtabarg ::= */ +{sqlite3VtabArgInit(pParse);} + break; + case 321: /* vtabargtoken ::= ANY */ + case 322: /* vtabargtoken ::= lp anylist RP */ yytestcase(yyruleno==322); + case 323: /* lp ::= LP */ yytestcase(yyruleno==323); +{sqlite3VtabArgExtend(pParse,&yymsp[0].minor.yy0);} + break; + default: + /* (0) input ::= cmdlist */ yytestcase(yyruleno==0); + /* (1) cmdlist ::= cmdlist ecmd */ yytestcase(yyruleno==1); + /* (2) cmdlist ::= ecmd */ yytestcase(yyruleno==2); + /* (3) ecmd ::= SEMI */ yytestcase(yyruleno==3); + /* (4) ecmd ::= explain cmdx SEMI */ yytestcase(yyruleno==4); + /* (10) trans_opt ::= */ yytestcase(yyruleno==10); + /* (11) trans_opt ::= TRANSACTION */ yytestcase(yyruleno==11); + /* (12) trans_opt ::= TRANSACTION nm */ yytestcase(yyruleno==12); + /* (20) savepoint_opt ::= SAVEPOINT */ yytestcase(yyruleno==20); + /* (21) savepoint_opt ::= */ yytestcase(yyruleno==21); + /* (25) cmd ::= create_table create_table_args */ yytestcase(yyruleno==25); + /* (34) columnlist ::= columnlist COMMA column */ yytestcase(yyruleno==34); + /* (35) columnlist ::= column */ yytestcase(yyruleno==35); + /* (44) type ::= */ yytestcase(yyruleno==44); + /* (51) signed ::= plus_num */ yytestcase(yyruleno==51); + /* (52) signed ::= minus_num */ yytestcase(yyruleno==52); + /* (53) carglist ::= carglist ccons */ yytestcase(yyruleno==53); + /* (54) carglist ::= */ yytestcase(yyruleno==54); + /* (61) ccons ::= NULL onconf */ yytestcase(yyruleno==61); + /* (89) conslist ::= conslist tconscomma tcons */ yytestcase(yyruleno==89); + /* (90) conslist ::= tcons */ yytestcase(yyruleno==90); + /* (92) tconscomma ::= */ yytestcase(yyruleno==92); + /* (277) foreach_clause ::= */ yytestcase(yyruleno==277); + /* (278) foreach_clause ::= FOR EACH ROW */ yytestcase(yyruleno==278); + /* (285) tridxby ::= */ yytestcase(yyruleno==285); + /* (303) database_kw_opt ::= DATABASE */ yytestcase(yyruleno==303); + /* (304) database_kw_opt ::= */ yytestcase(yyruleno==304); + /* (312) kwcolumn_opt ::= */ yytestcase(yyruleno==312); + /* (313) kwcolumn_opt ::= COLUMNKW */ yytestcase(yyruleno==313); + /* (317) vtabarglist ::= vtabarg */ yytestcase(yyruleno==317); + /* (318) vtabarglist ::= vtabarglist COMMA vtabarg */ yytestcase(yyruleno==318); + /* (320) vtabarg ::= vtabarg vtabargtoken */ yytestcase(yyruleno==320); + /* (324) anylist ::= */ yytestcase(yyruleno==324); + /* (325) anylist ::= anylist LP anylist RP */ yytestcase(yyruleno==325); + /* (326) anylist ::= anylist ANY */ yytestcase(yyruleno==326); + break; + }; + yygoto = yyRuleInfo[yyruleno].lhs; + yysize = yyRuleInfo[yyruleno].nrhs; + yypParser->yyidx -= yysize; + yyact = yy_find_reduce_action(yymsp[-yysize].stateno,(YYCODETYPE)yygoto); + if( yyact < YYNSTATE ){ +#ifdef NDEBUG + /* If we are not debugging and the reduce action popped at least + ** one element off the stack, then we can push the new element back + ** onto the stack here, and skip the stack overflow test in yy_shift(). + ** That gives a significant speed improvement. */ + if( yysize ){ + yypParser->yyidx++; + yymsp -= yysize-1; + yymsp->stateno = (YYACTIONTYPE)yyact; + yymsp->major = (YYCODETYPE)yygoto; + yymsp->minor = yygotominor; + }else +#endif + { + yy_shift(yypParser,yyact,yygoto,&yygotominor); + } + }else{ + assert( yyact == YYNSTATE + YYNRULE + 1 ); + yy_accept(yypParser); + } +} + +/* +** The following code executes when the parse fails +*/ +#ifndef YYNOERRORRECOVERY +static void yy_parse_failed( + yyParser *yypParser /* The parser */ +){ + sqlite3ParserARG_FETCH; +#ifndef NDEBUG + if( yyTraceFILE ){ + fprintf(yyTraceFILE,"%sFail!\n",yyTracePrompt); + } +#endif + while( yypParser->yyidx>=0 ) yy_pop_parser_stack(yypParser); + /* Here code is inserted which will be executed whenever the + ** parser fails */ + sqlite3ParserARG_STORE; /* Suppress warning about unused %extra_argument variable */ +} +#endif /* YYNOERRORRECOVERY */ + +/* +** The following code executes when a syntax error first occurs. +*/ +static void yy_syntax_error( + yyParser *yypParser, /* The parser */ + int yymajor, /* The major type of the error token */ + YYMINORTYPE yyminor /* The minor type of the error token */ +){ + sqlite3ParserARG_FETCH; +#define TOKEN (yyminor.yy0) + + UNUSED_PARAMETER(yymajor); /* Silence some compiler warnings */ + assert( TOKEN.z[0] ); /* The tokenizer always gives us a token */ + sqlite3ErrorMsg(pParse, "near \"%T\": syntax error", &TOKEN); + sqlite3ParserARG_STORE; /* Suppress warning about unused %extra_argument variable */ +} + +/* +** The following is executed when the parser accepts +*/ +static void yy_accept( + yyParser *yypParser /* The parser */ +){ + sqlite3ParserARG_FETCH; +#ifndef NDEBUG + if( yyTraceFILE ){ + fprintf(yyTraceFILE,"%sAccept!\n",yyTracePrompt); + } +#endif + while( yypParser->yyidx>=0 ) yy_pop_parser_stack(yypParser); + /* Here code is inserted which will be executed whenever the + ** parser accepts */ + sqlite3ParserARG_STORE; /* Suppress warning about unused %extra_argument variable */ +} + +/* The main parser program. +** The first argument is a pointer to a structure obtained from +** "sqlite3ParserAlloc" which describes the current state of the parser. +** The second argument is the major token number. The third is +** the minor token. The fourth optional argument is whatever the +** user wants (and specified in the grammar) and is available for +** use by the action routines. +** +** Inputs: +**
      +**
    • A pointer to the parser (an opaque structure.) +**
    • The major token number. +**
    • The minor token number. +**
    • An option argument of a grammar-specified type. +**
    +** +** Outputs: +** None. +*/ +SQLITE_PRIVATE void sqlite3Parser( + void *yyp, /* The parser */ + int yymajor, /* The major token code number */ + sqlite3ParserTOKENTYPE yyminor /* The value for the token */ + sqlite3ParserARG_PDECL /* Optional %extra_argument parameter */ +){ + YYMINORTYPE yyminorunion; + int yyact; /* The parser action. */ +#if !defined(YYERRORSYMBOL) && !defined(YYNOERRORRECOVERY) + int yyendofinput; /* True if we are at the end of input */ +#endif +#ifdef YYERRORSYMBOL + int yyerrorhit = 0; /* True if yymajor has invoked an error */ +#endif + yyParser *yypParser; /* The parser */ + + /* (re)initialize the parser, if necessary */ + yypParser = (yyParser*)yyp; + if( yypParser->yyidx<0 ){ +#if YYSTACKDEPTH<=0 + if( yypParser->yystksz <=0 ){ + /*memset(&yyminorunion, 0, sizeof(yyminorunion));*/ + yyminorunion = yyzerominor; + yyStackOverflow(yypParser, &yyminorunion); + return; + } +#endif + yypParser->yyidx = 0; + yypParser->yyerrcnt = -1; + yypParser->yystack[0].stateno = 0; + yypParser->yystack[0].major = 0; + } + yyminorunion.yy0 = yyminor; +#if !defined(YYERRORSYMBOL) && !defined(YYNOERRORRECOVERY) + yyendofinput = (yymajor==0); +#endif + sqlite3ParserARG_STORE; + +#ifndef NDEBUG + if( yyTraceFILE ){ + fprintf(yyTraceFILE,"%sInput %s\n",yyTracePrompt,yyTokenName[yymajor]); + } +#endif + + do{ + yyact = yy_find_shift_action(yypParser,(YYCODETYPE)yymajor); + if( yyactyyerrcnt--; + yymajor = YYNOCODE; + }else if( yyact < YYNSTATE + YYNRULE ){ + yy_reduce(yypParser,yyact-YYNSTATE); + }else{ + assert( yyact == YY_ERROR_ACTION ); +#ifdef YYERRORSYMBOL + int yymx; +#endif +#ifndef NDEBUG + if( yyTraceFILE ){ + fprintf(yyTraceFILE,"%sSyntax Error!\n",yyTracePrompt); + } +#endif +#ifdef YYERRORSYMBOL + /* A syntax error has occurred. + ** The response to an error depends upon whether or not the + ** grammar defines an error token "ERROR". + ** + ** This is what we do if the grammar does define ERROR: + ** + ** * Call the %syntax_error function. + ** + ** * Begin popping the stack until we enter a state where + ** it is legal to shift the error symbol, then shift + ** the error symbol. + ** + ** * Set the error count to three. + ** + ** * Begin accepting and shifting new tokens. No new error + ** processing will occur until three tokens have been + ** shifted successfully. + ** + */ + if( yypParser->yyerrcnt<0 ){ + yy_syntax_error(yypParser,yymajor,yyminorunion); + } + yymx = yypParser->yystack[yypParser->yyidx].major; + if( yymx==YYERRORSYMBOL || yyerrorhit ){ +#ifndef NDEBUG + if( yyTraceFILE ){ + fprintf(yyTraceFILE,"%sDiscard input token %s\n", + yyTracePrompt,yyTokenName[yymajor]); + } +#endif + yy_destructor(yypParser, (YYCODETYPE)yymajor,&yyminorunion); + yymajor = YYNOCODE; + }else{ + while( + yypParser->yyidx >= 0 && + yymx != YYERRORSYMBOL && + (yyact = yy_find_reduce_action( + yypParser->yystack[yypParser->yyidx].stateno, + YYERRORSYMBOL)) >= YYNSTATE + ){ + yy_pop_parser_stack(yypParser); + } + if( yypParser->yyidx < 0 || yymajor==0 ){ + yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion); + yy_parse_failed(yypParser); + yymajor = YYNOCODE; + }else if( yymx!=YYERRORSYMBOL ){ + YYMINORTYPE u2; + u2.YYERRSYMDT = 0; + yy_shift(yypParser,yyact,YYERRORSYMBOL,&u2); + } + } + yypParser->yyerrcnt = 3; + yyerrorhit = 1; +#elif defined(YYNOERRORRECOVERY) + /* If the YYNOERRORRECOVERY macro is defined, then do not attempt to + ** do any kind of error recovery. Instead, simply invoke the syntax + ** error routine and continue going as if nothing had happened. + ** + ** Applications can set this macro (for example inside %include) if + ** they intend to abandon the parse upon the first syntax error seen. + */ + yy_syntax_error(yypParser,yymajor,yyminorunion); + yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion); + yymajor = YYNOCODE; + +#else /* YYERRORSYMBOL is not defined */ + /* This is what we do if the grammar does not define ERROR: + ** + ** * Report an error message, and throw away the input token. + ** + ** * If the input token is $, then fail the parse. + ** + ** As before, subsequent error messages are suppressed until + ** three input tokens have been successfully shifted. + */ + if( yypParser->yyerrcnt<=0 ){ + yy_syntax_error(yypParser,yymajor,yyminorunion); + } + yypParser->yyerrcnt = 3; + yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion); + if( yyendofinput ){ + yy_parse_failed(yypParser); + } + yymajor = YYNOCODE; +#endif + } + }while( yymajor!=YYNOCODE && yypParser->yyidx>=0 ); + return; +} + +/************** End of parse.c ***********************************************/ +/************** Begin file tokenize.c ****************************************/ +/* +** 2001 September 15 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** An tokenizer for SQL +** +** This file contains C code that splits an SQL input string up into +** individual tokens and sends those tokens one-by-one over to the +** parser for analysis. +*/ +/* #include */ + +/* +** The charMap() macro maps alphabetic characters into their +** lower-case ASCII equivalent. On ASCII machines, this is just +** an upper-to-lower case map. On EBCDIC machines we also need +** to adjust the encoding. Only alphabetic characters and underscores +** need to be translated. +*/ +#ifdef SQLITE_ASCII +# define charMap(X) sqlite3UpperToLower[(unsigned char)X] +#endif +#ifdef SQLITE_EBCDIC +# define charMap(X) ebcdicToAscii[(unsigned char)X] +const unsigned char ebcdicToAscii[] = { +/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 1x */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 2x */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 3x */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 4x */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 5x */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, /* 6x */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 7x */ + 0, 97, 98, 99,100,101,102,103,104,105, 0, 0, 0, 0, 0, 0, /* 8x */ + 0,106,107,108,109,110,111,112,113,114, 0, 0, 0, 0, 0, 0, /* 9x */ + 0, 0,115,116,117,118,119,120,121,122, 0, 0, 0, 0, 0, 0, /* Ax */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* Bx */ + 0, 97, 98, 99,100,101,102,103,104,105, 0, 0, 0, 0, 0, 0, /* Cx */ + 0,106,107,108,109,110,111,112,113,114, 0, 0, 0, 0, 0, 0, /* Dx */ + 0, 0,115,116,117,118,119,120,121,122, 0, 0, 0, 0, 0, 0, /* Ex */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* Fx */ +}; +#endif + +/* +** The sqlite3KeywordCode function looks up an identifier to determine if +** it is a keyword. If it is a keyword, the token code of that keyword is +** returned. If the input is not a keyword, TK_ID is returned. +** +** The implementation of this routine was generated by a program, +** mkkeywordhash.h, located in the tool subdirectory of the distribution. +** The output of the mkkeywordhash.c program is written into a file +** named keywordhash.h and then included into this source file by +** the #include below. +*/ +/************** Include keywordhash.h in the middle of tokenize.c ************/ +/************** Begin file keywordhash.h *************************************/ +/***** This file contains automatically generated code ****** +** +** The code in this file has been automatically generated by +** +** sqlite/tool/mkkeywordhash.c +** +** The code in this file implements a function that determines whether +** or not a given identifier is really an SQL keyword. The same thing +** might be implemented more directly using a hand-written hash table. +** But by using this automatically generated code, the size of the code +** is substantially reduced. This is important for embedded applications +** on platforms with limited memory. +*/ +/* Hash score: 175 */ +static int keywordCode(const char *z, int n){ + /* zText[] encodes 811 bytes of keywords in 541 bytes */ + /* REINDEXEDESCAPEACHECKEYBEFOREIGNOREGEXPLAINSTEADDATABASELECT */ + /* ABLEFTHENDEFERRABLELSEXCEPTRANSACTIONATURALTERAISEXCLUSIVE */ + /* XISTSAVEPOINTERSECTRIGGEREFERENCESCONSTRAINTOFFSETEMPORARY */ + /* UNIQUERYATTACHAVINGROUPDATEBEGINNERELEASEBETWEENOTNULLIKE */ + /* CASCADELETECASECOLLATECREATECURRENT_DATEDETACHIMMEDIATEJOIN */ + /* SERTMATCHPLANALYZEPRAGMABORTVALUESVIRTUALIMITWHENWHERENAME */ + /* AFTEREPLACEANDEFAULTAUTOINCREMENTCASTCOLUMNCOMMITCONFLICTCROSS */ + /* CURRENT_TIMESTAMPRIMARYDEFERREDISTINCTDROPFAILFROMFULLGLOBYIF */ + /* ISNULLORDERESTRICTOUTERIGHTROLLBACKROWUNIONUSINGVACUUMVIEW */ + /* INITIALLY */ + static const char zText[540] = { + 'R','E','I','N','D','E','X','E','D','E','S','C','A','P','E','A','C','H', + 'E','C','K','E','Y','B','E','F','O','R','E','I','G','N','O','R','E','G', + 'E','X','P','L','A','I','N','S','T','E','A','D','D','A','T','A','B','A', + 'S','E','L','E','C','T','A','B','L','E','F','T','H','E','N','D','E','F', + 'E','R','R','A','B','L','E','L','S','E','X','C','E','P','T','R','A','N', + 'S','A','C','T','I','O','N','A','T','U','R','A','L','T','E','R','A','I', + 'S','E','X','C','L','U','S','I','V','E','X','I','S','T','S','A','V','E', + 'P','O','I','N','T','E','R','S','E','C','T','R','I','G','G','E','R','E', + 'F','E','R','E','N','C','E','S','C','O','N','S','T','R','A','I','N','T', + 'O','F','F','S','E','T','E','M','P','O','R','A','R','Y','U','N','I','Q', + 'U','E','R','Y','A','T','T','A','C','H','A','V','I','N','G','R','O','U', + 'P','D','A','T','E','B','E','G','I','N','N','E','R','E','L','E','A','S', + 'E','B','E','T','W','E','E','N','O','T','N','U','L','L','I','K','E','C', + 'A','S','C','A','D','E','L','E','T','E','C','A','S','E','C','O','L','L', + 'A','T','E','C','R','E','A','T','E','C','U','R','R','E','N','T','_','D', + 'A','T','E','D','E','T','A','C','H','I','M','M','E','D','I','A','T','E', + 'J','O','I','N','S','E','R','T','M','A','T','C','H','P','L','A','N','A', + 'L','Y','Z','E','P','R','A','G','M','A','B','O','R','T','V','A','L','U', + 'E','S','V','I','R','T','U','A','L','I','M','I','T','W','H','E','N','W', + 'H','E','R','E','N','A','M','E','A','F','T','E','R','E','P','L','A','C', + 'E','A','N','D','E','F','A','U','L','T','A','U','T','O','I','N','C','R', + 'E','M','E','N','T','C','A','S','T','C','O','L','U','M','N','C','O','M', + 'M','I','T','C','O','N','F','L','I','C','T','C','R','O','S','S','C','U', + 'R','R','E','N','T','_','T','I','M','E','S','T','A','M','P','R','I','M', + 'A','R','Y','D','E','F','E','R','R','E','D','I','S','T','I','N','C','T', + 'D','R','O','P','F','A','I','L','F','R','O','M','F','U','L','L','G','L', + 'O','B','Y','I','F','I','S','N','U','L','L','O','R','D','E','R','E','S', + 'T','R','I','C','T','O','U','T','E','R','I','G','H','T','R','O','L','L', + 'B','A','C','K','R','O','W','U','N','I','O','N','U','S','I','N','G','V', + 'A','C','U','U','M','V','I','E','W','I','N','I','T','I','A','L','L','Y', + }; + static const unsigned char aHash[127] = { + 72, 101, 114, 70, 0, 45, 0, 0, 78, 0, 73, 0, 0, + 42, 12, 74, 15, 0, 113, 81, 50, 108, 0, 19, 0, 0, + 118, 0, 116, 111, 0, 22, 89, 0, 9, 0, 0, 66, 67, + 0, 65, 6, 0, 48, 86, 98, 0, 115, 97, 0, 0, 44, + 0, 99, 24, 0, 17, 0, 119, 49, 23, 0, 5, 106, 25, + 92, 0, 0, 121, 102, 56, 120, 53, 28, 51, 0, 87, 0, + 96, 26, 0, 95, 0, 0, 0, 91, 88, 93, 84, 105, 14, + 39, 104, 0, 77, 0, 18, 85, 107, 32, 0, 117, 76, 109, + 58, 46, 80, 0, 0, 90, 40, 0, 112, 0, 36, 0, 0, + 29, 0, 82, 59, 60, 0, 20, 57, 0, 52, + }; + static const unsigned char aNext[121] = { + 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, + 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 33, 0, 21, 0, 0, 0, 43, 3, 47, + 0, 0, 0, 0, 30, 0, 54, 0, 38, 0, 0, 0, 1, + 62, 0, 0, 63, 0, 41, 0, 0, 0, 0, 0, 0, 0, + 61, 0, 0, 0, 0, 31, 55, 16, 34, 10, 0, 0, 0, + 0, 0, 0, 0, 11, 68, 75, 0, 8, 0, 100, 94, 0, + 103, 0, 83, 0, 71, 0, 0, 110, 27, 37, 69, 79, 0, + 35, 64, 0, 0, + }; + static const unsigned char aLen[121] = { + 7, 7, 5, 4, 6, 4, 5, 3, 6, 7, 3, 6, 6, + 7, 7, 3, 8, 2, 6, 5, 4, 4, 3, 10, 4, 6, + 11, 6, 2, 7, 5, 5, 9, 6, 9, 9, 7, 10, 10, + 4, 6, 2, 3, 9, 4, 2, 6, 5, 6, 6, 5, 6, + 5, 5, 7, 7, 7, 3, 2, 4, 4, 7, 3, 6, 4, + 7, 6, 12, 6, 9, 4, 6, 5, 4, 7, 6, 5, 6, + 7, 5, 4, 5, 6, 5, 7, 3, 7, 13, 2, 2, 4, + 6, 6, 8, 5, 17, 12, 7, 8, 8, 2, 4, 4, 4, + 4, 4, 2, 2, 6, 5, 8, 5, 5, 8, 3, 5, 5, + 6, 4, 9, 3, + }; + static const unsigned short int aOffset[121] = { + 0, 2, 2, 8, 9, 14, 16, 20, 23, 25, 25, 29, 33, + 36, 41, 46, 48, 53, 54, 59, 62, 65, 67, 69, 78, 81, + 86, 91, 95, 96, 101, 105, 109, 117, 122, 128, 136, 142, 152, + 159, 162, 162, 165, 167, 167, 171, 176, 179, 184, 189, 194, 197, + 203, 206, 210, 217, 223, 223, 223, 226, 229, 233, 234, 238, 244, + 248, 255, 261, 273, 279, 288, 290, 296, 301, 303, 310, 315, 320, + 326, 332, 337, 341, 344, 350, 354, 361, 363, 370, 372, 374, 383, + 387, 393, 399, 407, 412, 412, 428, 435, 442, 443, 450, 454, 458, + 462, 466, 469, 471, 473, 479, 483, 491, 495, 500, 508, 511, 516, + 521, 527, 531, 536, + }; + static const unsigned char aCode[121] = { + TK_REINDEX, TK_INDEXED, TK_INDEX, TK_DESC, TK_ESCAPE, + TK_EACH, TK_CHECK, TK_KEY, TK_BEFORE, TK_FOREIGN, + TK_FOR, TK_IGNORE, TK_LIKE_KW, TK_EXPLAIN, TK_INSTEAD, + TK_ADD, TK_DATABASE, TK_AS, TK_SELECT, TK_TABLE, + TK_JOIN_KW, TK_THEN, TK_END, TK_DEFERRABLE, TK_ELSE, + TK_EXCEPT, TK_TRANSACTION,TK_ACTION, TK_ON, TK_JOIN_KW, + TK_ALTER, TK_RAISE, TK_EXCLUSIVE, TK_EXISTS, TK_SAVEPOINT, + TK_INTERSECT, TK_TRIGGER, TK_REFERENCES, TK_CONSTRAINT, TK_INTO, + TK_OFFSET, TK_OF, TK_SET, TK_TEMP, TK_TEMP, + TK_OR, TK_UNIQUE, TK_QUERY, TK_ATTACH, TK_HAVING, + TK_GROUP, TK_UPDATE, TK_BEGIN, TK_JOIN_KW, TK_RELEASE, + TK_BETWEEN, TK_NOTNULL, TK_NOT, TK_NO, TK_NULL, + TK_LIKE_KW, TK_CASCADE, TK_ASC, TK_DELETE, TK_CASE, + TK_COLLATE, TK_CREATE, TK_CTIME_KW, TK_DETACH, TK_IMMEDIATE, + TK_JOIN, TK_INSERT, TK_MATCH, TK_PLAN, TK_ANALYZE, + TK_PRAGMA, TK_ABORT, TK_VALUES, TK_VIRTUAL, TK_LIMIT, + TK_WHEN, TK_WHERE, TK_RENAME, TK_AFTER, TK_REPLACE, + TK_AND, TK_DEFAULT, TK_AUTOINCR, TK_TO, TK_IN, + TK_CAST, TK_COLUMNKW, TK_COMMIT, TK_CONFLICT, TK_JOIN_KW, + TK_CTIME_KW, TK_CTIME_KW, TK_PRIMARY, TK_DEFERRED, TK_DISTINCT, + TK_IS, TK_DROP, TK_FAIL, TK_FROM, TK_JOIN_KW, + TK_LIKE_KW, TK_BY, TK_IF, TK_ISNULL, TK_ORDER, + TK_RESTRICT, TK_JOIN_KW, TK_JOIN_KW, TK_ROLLBACK, TK_ROW, + TK_UNION, TK_USING, TK_VACUUM, TK_VIEW, TK_INITIALLY, + TK_ALL, + }; + int h, i; + if( n<2 ) return TK_ID; + h = ((charMap(z[0])*4) ^ + (charMap(z[n-1])*3) ^ + n) % 127; + for(i=((int)aHash[h])-1; i>=0; i=((int)aNext[i])-1){ + if( aLen[i]==n && sqlite3StrNICmp(&zText[aOffset[i]],z,n)==0 ){ + testcase( i==0 ); /* REINDEX */ + testcase( i==1 ); /* INDEXED */ + testcase( i==2 ); /* INDEX */ + testcase( i==3 ); /* DESC */ + testcase( i==4 ); /* ESCAPE */ + testcase( i==5 ); /* EACH */ + testcase( i==6 ); /* CHECK */ + testcase( i==7 ); /* KEY */ + testcase( i==8 ); /* BEFORE */ + testcase( i==9 ); /* FOREIGN */ + testcase( i==10 ); /* FOR */ + testcase( i==11 ); /* IGNORE */ + testcase( i==12 ); /* REGEXP */ + testcase( i==13 ); /* EXPLAIN */ + testcase( i==14 ); /* INSTEAD */ + testcase( i==15 ); /* ADD */ + testcase( i==16 ); /* DATABASE */ + testcase( i==17 ); /* AS */ + testcase( i==18 ); /* SELECT */ + testcase( i==19 ); /* TABLE */ + testcase( i==20 ); /* LEFT */ + testcase( i==21 ); /* THEN */ + testcase( i==22 ); /* END */ + testcase( i==23 ); /* DEFERRABLE */ + testcase( i==24 ); /* ELSE */ + testcase( i==25 ); /* EXCEPT */ + testcase( i==26 ); /* TRANSACTION */ + testcase( i==27 ); /* ACTION */ + testcase( i==28 ); /* ON */ + testcase( i==29 ); /* NATURAL */ + testcase( i==30 ); /* ALTER */ + testcase( i==31 ); /* RAISE */ + testcase( i==32 ); /* EXCLUSIVE */ + testcase( i==33 ); /* EXISTS */ + testcase( i==34 ); /* SAVEPOINT */ + testcase( i==35 ); /* INTERSECT */ + testcase( i==36 ); /* TRIGGER */ + testcase( i==37 ); /* REFERENCES */ + testcase( i==38 ); /* CONSTRAINT */ + testcase( i==39 ); /* INTO */ + testcase( i==40 ); /* OFFSET */ + testcase( i==41 ); /* OF */ + testcase( i==42 ); /* SET */ + testcase( i==43 ); /* TEMPORARY */ + testcase( i==44 ); /* TEMP */ + testcase( i==45 ); /* OR */ + testcase( i==46 ); /* UNIQUE */ + testcase( i==47 ); /* QUERY */ + testcase( i==48 ); /* ATTACH */ + testcase( i==49 ); /* HAVING */ + testcase( i==50 ); /* GROUP */ + testcase( i==51 ); /* UPDATE */ + testcase( i==52 ); /* BEGIN */ + testcase( i==53 ); /* INNER */ + testcase( i==54 ); /* RELEASE */ + testcase( i==55 ); /* BETWEEN */ + testcase( i==56 ); /* NOTNULL */ + testcase( i==57 ); /* NOT */ + testcase( i==58 ); /* NO */ + testcase( i==59 ); /* NULL */ + testcase( i==60 ); /* LIKE */ + testcase( i==61 ); /* CASCADE */ + testcase( i==62 ); /* ASC */ + testcase( i==63 ); /* DELETE */ + testcase( i==64 ); /* CASE */ + testcase( i==65 ); /* COLLATE */ + testcase( i==66 ); /* CREATE */ + testcase( i==67 ); /* CURRENT_DATE */ + testcase( i==68 ); /* DETACH */ + testcase( i==69 ); /* IMMEDIATE */ + testcase( i==70 ); /* JOIN */ + testcase( i==71 ); /* INSERT */ + testcase( i==72 ); /* MATCH */ + testcase( i==73 ); /* PLAN */ + testcase( i==74 ); /* ANALYZE */ + testcase( i==75 ); /* PRAGMA */ + testcase( i==76 ); /* ABORT */ + testcase( i==77 ); /* VALUES */ + testcase( i==78 ); /* VIRTUAL */ + testcase( i==79 ); /* LIMIT */ + testcase( i==80 ); /* WHEN */ + testcase( i==81 ); /* WHERE */ + testcase( i==82 ); /* RENAME */ + testcase( i==83 ); /* AFTER */ + testcase( i==84 ); /* REPLACE */ + testcase( i==85 ); /* AND */ + testcase( i==86 ); /* DEFAULT */ + testcase( i==87 ); /* AUTOINCREMENT */ + testcase( i==88 ); /* TO */ + testcase( i==89 ); /* IN */ + testcase( i==90 ); /* CAST */ + testcase( i==91 ); /* COLUMN */ + testcase( i==92 ); /* COMMIT */ + testcase( i==93 ); /* CONFLICT */ + testcase( i==94 ); /* CROSS */ + testcase( i==95 ); /* CURRENT_TIMESTAMP */ + testcase( i==96 ); /* CURRENT_TIME */ + testcase( i==97 ); /* PRIMARY */ + testcase( i==98 ); /* DEFERRED */ + testcase( i==99 ); /* DISTINCT */ + testcase( i==100 ); /* IS */ + testcase( i==101 ); /* DROP */ + testcase( i==102 ); /* FAIL */ + testcase( i==103 ); /* FROM */ + testcase( i==104 ); /* FULL */ + testcase( i==105 ); /* GLOB */ + testcase( i==106 ); /* BY */ + testcase( i==107 ); /* IF */ + testcase( i==108 ); /* ISNULL */ + testcase( i==109 ); /* ORDER */ + testcase( i==110 ); /* RESTRICT */ + testcase( i==111 ); /* OUTER */ + testcase( i==112 ); /* RIGHT */ + testcase( i==113 ); /* ROLLBACK */ + testcase( i==114 ); /* ROW */ + testcase( i==115 ); /* UNION */ + testcase( i==116 ); /* USING */ + testcase( i==117 ); /* VACUUM */ + testcase( i==118 ); /* VIEW */ + testcase( i==119 ); /* INITIALLY */ + testcase( i==120 ); /* ALL */ + return aCode[i]; + } + } + return TK_ID; +} +SQLITE_PRIVATE int sqlite3KeywordCode(const unsigned char *z, int n){ + return keywordCode((char*)z, n); +} +#define SQLITE_N_KEYWORD 121 + +/************** End of keywordhash.h *****************************************/ +/************** Continuing where we left off in tokenize.c *******************/ + + +/* +** If X is a character that can be used in an identifier then +** IdChar(X) will be true. Otherwise it is false. +** +** For ASCII, any character with the high-order bit set is +** allowed in an identifier. For 7-bit characters, +** sqlite3IsIdChar[X] must be 1. +** +** For EBCDIC, the rules are more complex but have the same +** end result. +** +** Ticket #1066. the SQL standard does not allow '$' in the +** middle of identfiers. But many SQL implementations do. +** SQLite will allow '$' in identifiers for compatibility. +** But the feature is undocumented. +*/ +#ifdef SQLITE_ASCII +#define IdChar(C) ((sqlite3CtypeMap[(unsigned char)C]&0x46)!=0) +#endif +#ifdef SQLITE_EBCDIC +SQLITE_PRIVATE const char sqlite3IsEbcdicIdChar[] = { +/* x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF */ + 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, /* 4x */ + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, /* 5x */ + 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, /* 6x */ + 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, /* 7x */ + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, /* 8x */ + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, /* 9x */ + 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, /* Ax */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* Bx */ + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, /* Cx */ + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, /* Dx */ + 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, /* Ex */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, /* Fx */ +}; +#define IdChar(C) (((c=C)>=0x42 && sqlite3IsEbcdicIdChar[c-0x40])) +#endif + + +/* +** Return the length of the token that begins at z[0]. +** Store the token type in *tokenType before returning. +*/ +SQLITE_PRIVATE int sqlite3GetToken(const unsigned char *z, int *tokenType){ + int i, c; + switch( *z ){ + case ' ': case '\t': case '\n': case '\f': case '\r': { + testcase( z[0]==' ' ); + testcase( z[0]=='\t' ); + testcase( z[0]=='\n' ); + testcase( z[0]=='\f' ); + testcase( z[0]=='\r' ); + for(i=1; sqlite3Isspace(z[i]); i++){} + *tokenType = TK_SPACE; + return i; + } + case '-': { + if( z[1]=='-' ){ + /* IMP: R-50417-27976 -- syntax diagram for comments */ + for(i=2; (c=z[i])!=0 && c!='\n'; i++){} + *tokenType = TK_SPACE; /* IMP: R-22934-25134 */ + return i; + } + *tokenType = TK_MINUS; + return 1; + } + case '(': { + *tokenType = TK_LP; + return 1; + } + case ')': { + *tokenType = TK_RP; + return 1; + } + case ';': { + *tokenType = TK_SEMI; + return 1; + } + case '+': { + *tokenType = TK_PLUS; + return 1; + } + case '*': { + *tokenType = TK_STAR; + return 1; + } + case '/': { + if( z[1]!='*' || z[2]==0 ){ + *tokenType = TK_SLASH; + return 1; + } + /* IMP: R-50417-27976 -- syntax diagram for comments */ + for(i=3, c=z[2]; (c!='*' || z[i]!='/') && (c=z[i])!=0; i++){} + if( c ) i++; + *tokenType = TK_SPACE; /* IMP: R-22934-25134 */ + return i; + } + case '%': { + *tokenType = TK_REM; + return 1; + } + case '=': { + *tokenType = TK_EQ; + return 1 + (z[1]=='='); + } + case '<': { + if( (c=z[1])=='=' ){ + *tokenType = TK_LE; + return 2; + }else if( c=='>' ){ + *tokenType = TK_NE; + return 2; + }else if( c=='<' ){ + *tokenType = TK_LSHIFT; + return 2; + }else{ + *tokenType = TK_LT; + return 1; + } + } + case '>': { + if( (c=z[1])=='=' ){ + *tokenType = TK_GE; + return 2; + }else if( c=='>' ){ + *tokenType = TK_RSHIFT; + return 2; + }else{ + *tokenType = TK_GT; + return 1; + } + } + case '!': { + if( z[1]!='=' ){ + *tokenType = TK_ILLEGAL; + return 2; + }else{ + *tokenType = TK_NE; + return 2; + } + } + case '|': { + if( z[1]!='|' ){ + *tokenType = TK_BITOR; + return 1; + }else{ + *tokenType = TK_CONCAT; + return 2; + } + } + case ',': { + *tokenType = TK_COMMA; + return 1; + } + case '&': { + *tokenType = TK_BITAND; + return 1; + } + case '~': { + *tokenType = TK_BITNOT; + return 1; + } + case '`': + case '\'': + case '"': { + int delim = z[0]; + testcase( delim=='`' ); + testcase( delim=='\'' ); + testcase( delim=='"' ); + for(i=1; (c=z[i])!=0; i++){ + if( c==delim ){ + if( z[i+1]==delim ){ + i++; + }else{ + break; + } + } + } + if( c=='\'' ){ + *tokenType = TK_STRING; + return i+1; + }else if( c!=0 ){ + *tokenType = TK_ID; + return i+1; + }else{ + *tokenType = TK_ILLEGAL; + return i; + } + } + case '.': { +#ifndef SQLITE_OMIT_FLOATING_POINT + if( !sqlite3Isdigit(z[1]) ) +#endif + { + *tokenType = TK_DOT; + return 1; + } + /* If the next character is a digit, this is a floating point + ** number that begins with ".". Fall thru into the next case */ + } + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': { + testcase( z[0]=='0' ); testcase( z[0]=='1' ); testcase( z[0]=='2' ); + testcase( z[0]=='3' ); testcase( z[0]=='4' ); testcase( z[0]=='5' ); + testcase( z[0]=='6' ); testcase( z[0]=='7' ); testcase( z[0]=='8' ); + testcase( z[0]=='9' ); + *tokenType = TK_INTEGER; + for(i=0; sqlite3Isdigit(z[i]); i++){} +#ifndef SQLITE_OMIT_FLOATING_POINT + if( z[i]=='.' ){ + i++; + while( sqlite3Isdigit(z[i]) ){ i++; } + *tokenType = TK_FLOAT; + } + if( (z[i]=='e' || z[i]=='E') && + ( sqlite3Isdigit(z[i+1]) + || ((z[i+1]=='+' || z[i+1]=='-') && sqlite3Isdigit(z[i+2])) + ) + ){ + i += 2; + while( sqlite3Isdigit(z[i]) ){ i++; } + *tokenType = TK_FLOAT; + } +#endif + while( IdChar(z[i]) ){ + *tokenType = TK_ILLEGAL; + i++; + } + return i; + } + case '[': { + for(i=1, c=z[0]; c!=']' && (c=z[i])!=0; i++){} + *tokenType = c==']' ? TK_ID : TK_ILLEGAL; + return i; + } + case '?': { + *tokenType = TK_VARIABLE; + for(i=1; sqlite3Isdigit(z[i]); i++){} + return i; + } + case '#': { + for(i=1; sqlite3Isdigit(z[i]); i++){} + if( i>1 ){ + /* Parameters of the form #NNN (where NNN is a number) are used + ** internally by sqlite3NestedParse. */ + *tokenType = TK_REGISTER; + return i; + } + /* Fall through into the next case if the '#' is not followed by + ** a digit. Try to match #AAAA where AAAA is a parameter name. */ + } +#ifndef SQLITE_OMIT_TCL_VARIABLE + case '$': +#endif + case '@': /* For compatibility with MS SQL Server */ + case ':': { + int n = 0; + testcase( z[0]=='$' ); testcase( z[0]=='@' ); testcase( z[0]==':' ); + *tokenType = TK_VARIABLE; + for(i=1; (c=z[i])!=0; i++){ + if( IdChar(c) ){ + n++; +#ifndef SQLITE_OMIT_TCL_VARIABLE + }else if( c=='(' && n>0 ){ + do{ + i++; + }while( (c=z[i])!=0 && !sqlite3Isspace(c) && c!=')' ); + if( c==')' ){ + i++; + }else{ + *tokenType = TK_ILLEGAL; + } + break; + }else if( c==':' && z[i+1]==':' ){ + i++; +#endif + }else{ + break; + } + } + if( n==0 ) *tokenType = TK_ILLEGAL; + return i; + } +#ifndef SQLITE_OMIT_BLOB_LITERAL + case 'x': case 'X': { + testcase( z[0]=='x' ); testcase( z[0]=='X' ); + if( z[1]=='\'' ){ + *tokenType = TK_BLOB; + for(i=2; sqlite3Isxdigit(z[i]); i++){} + if( z[i]!='\'' || i%2 ){ + *tokenType = TK_ILLEGAL; + while( z[i] && z[i]!='\'' ){ i++; } + } + if( z[i] ) i++; + return i; + } + /* Otherwise fall through to the next case */ + } +#endif + default: { + if( !IdChar(*z) ){ + break; + } + for(i=1; IdChar(z[i]); i++){} + *tokenType = keywordCode((char*)z, i); + return i; + } + } + *tokenType = TK_ILLEGAL; + return 1; +} + +/* +** Run the parser on the given SQL string. The parser structure is +** passed in. An SQLITE_ status code is returned. If an error occurs +** then an and attempt is made to write an error message into +** memory obtained from sqlite3_malloc() and to make *pzErrMsg point to that +** error message. +*/ +SQLITE_PRIVATE int sqlite3RunParser(Parse *pParse, const char *zSql, char **pzErrMsg){ + int nErr = 0; /* Number of errors encountered */ + int i; /* Loop counter */ + void *pEngine; /* The LEMON-generated LALR(1) parser */ + int tokenType; /* type of the next token */ + int lastTokenParsed = -1; /* type of the previous token */ + u8 enableLookaside; /* Saved value of db->lookaside.bEnabled */ + sqlite3 *db = pParse->db; /* The database connection */ + int mxSqlLen; /* Max length of an SQL string */ + + + mxSqlLen = db->aLimit[SQLITE_LIMIT_SQL_LENGTH]; + if( db->activeVdbeCnt==0 ){ + db->u1.isInterrupted = 0; + } + pParse->rc = SQLITE_OK; + pParse->zTail = zSql; + i = 0; + assert( pzErrMsg!=0 ); + pEngine = sqlite3ParserAlloc((void*(*)(size_t))sqlite3Malloc); + if( pEngine==0 ){ + db->mallocFailed = 1; + return SQLITE_NOMEM; + } + assert( pParse->pNewTable==0 ); + assert( pParse->pNewTrigger==0 ); + assert( pParse->nVar==0 ); + assert( pParse->nzVar==0 ); + assert( pParse->azVar==0 ); + enableLookaside = db->lookaside.bEnabled; + if( db->lookaside.pStart ) db->lookaside.bEnabled = 1; + while( !db->mallocFailed && zSql[i]!=0 ){ + assert( i>=0 ); + pParse->sLastToken.z = &zSql[i]; + pParse->sLastToken.n = sqlite3GetToken((unsigned char*)&zSql[i],&tokenType); + i += pParse->sLastToken.n; + if( i>mxSqlLen ){ + pParse->rc = SQLITE_TOOBIG; + break; + } + switch( tokenType ){ + case TK_SPACE: { + if( db->u1.isInterrupted ){ + sqlite3ErrorMsg(pParse, "interrupt"); + pParse->rc = SQLITE_INTERRUPT; + goto abort_parse; + } + break; + } + case TK_ILLEGAL: { + sqlite3DbFree(db, *pzErrMsg); + *pzErrMsg = sqlite3MPrintf(db, "unrecognized token: \"%T\"", + &pParse->sLastToken); + nErr++; + goto abort_parse; + } + case TK_SEMI: { + pParse->zTail = &zSql[i]; + /* Fall thru into the default case */ + } + default: { + sqlite3Parser(pEngine, tokenType, pParse->sLastToken, pParse); + lastTokenParsed = tokenType; + if( pParse->rc!=SQLITE_OK ){ + goto abort_parse; + } + break; + } + } + } +abort_parse: + if( zSql[i]==0 && nErr==0 && pParse->rc==SQLITE_OK ){ + if( lastTokenParsed!=TK_SEMI ){ + sqlite3Parser(pEngine, TK_SEMI, pParse->sLastToken, pParse); + pParse->zTail = &zSql[i]; + } + sqlite3Parser(pEngine, 0, pParse->sLastToken, pParse); + } +#ifdef YYTRACKMAXSTACKDEPTH + sqlite3StatusSet(SQLITE_STATUS_PARSER_STACK, + sqlite3ParserStackPeak(pEngine) + ); +#endif /* YYDEBUG */ + sqlite3ParserFree(pEngine, sqlite3_free); + db->lookaside.bEnabled = enableLookaside; + if( db->mallocFailed ){ + pParse->rc = SQLITE_NOMEM; + } + if( pParse->rc!=SQLITE_OK && pParse->rc!=SQLITE_DONE && pParse->zErrMsg==0 ){ + sqlite3SetString(&pParse->zErrMsg, db, "%s", sqlite3ErrStr(pParse->rc)); + } + assert( pzErrMsg!=0 ); + if( pParse->zErrMsg ){ + *pzErrMsg = pParse->zErrMsg; + sqlite3_log(pParse->rc, "%s", *pzErrMsg); + pParse->zErrMsg = 0; + nErr++; + } + if( pParse->pVdbe && pParse->nErr>0 && pParse->nested==0 ){ + sqlite3VdbeDelete(pParse->pVdbe); + pParse->pVdbe = 0; + } +#ifndef SQLITE_OMIT_SHARED_CACHE + if( pParse->nested==0 ){ + sqlite3DbFree(db, pParse->aTableLock); + pParse->aTableLock = 0; + pParse->nTableLock = 0; + } +#endif +#ifndef SQLITE_OMIT_VIRTUALTABLE + sqlite3_free(pParse->apVtabLock); +#endif + + if( !IN_DECLARE_VTAB ){ + /* If the pParse->declareVtab flag is set, do not delete any table + ** structure built up in pParse->pNewTable. The calling code (see vtab.c) + ** will take responsibility for freeing the Table structure. + */ + sqlite3DeleteTable(db, pParse->pNewTable); + } + + sqlite3DeleteTrigger(db, pParse->pNewTrigger); + for(i=pParse->nzVar-1; i>=0; i--) sqlite3DbFree(db, pParse->azVar[i]); + sqlite3DbFree(db, pParse->azVar); + sqlite3DbFree(db, pParse->aAlias); + while( pParse->pAinc ){ + AutoincInfo *p = pParse->pAinc; + pParse->pAinc = p->pNext; + sqlite3DbFree(db, p); + } + while( pParse->pZombieTab ){ + Table *p = pParse->pZombieTab; + pParse->pZombieTab = p->pNextZombie; + sqlite3DeleteTable(db, p); + } + if( nErr>0 && pParse->rc==SQLITE_OK ){ + pParse->rc = SQLITE_ERROR; + } + return nErr; +} + +/************** End of tokenize.c ********************************************/ +/************** Begin file complete.c ****************************************/ +/* +** 2001 September 15 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** An tokenizer for SQL +** +** This file contains C code that implements the sqlite3_complete() API. +** This code used to be part of the tokenizer.c source file. But by +** separating it out, the code will be automatically omitted from +** static links that do not use it. +*/ +#ifndef SQLITE_OMIT_COMPLETE + +/* +** This is defined in tokenize.c. We just have to import the definition. +*/ +#ifndef SQLITE_AMALGAMATION +#ifdef SQLITE_ASCII +#define IdChar(C) ((sqlite3CtypeMap[(unsigned char)C]&0x46)!=0) +#endif +#ifdef SQLITE_EBCDIC +SQLITE_PRIVATE const char sqlite3IsEbcdicIdChar[]; +#define IdChar(C) (((c=C)>=0x42 && sqlite3IsEbcdicIdChar[c-0x40])) +#endif +#endif /* SQLITE_AMALGAMATION */ + + +/* +** Token types used by the sqlite3_complete() routine. See the header +** comments on that procedure for additional information. +*/ +#define tkSEMI 0 +#define tkWS 1 +#define tkOTHER 2 +#ifndef SQLITE_OMIT_TRIGGER +#define tkEXPLAIN 3 +#define tkCREATE 4 +#define tkTEMP 5 +#define tkTRIGGER 6 +#define tkEND 7 +#endif + +/* +** Return TRUE if the given SQL string ends in a semicolon. +** +** Special handling is require for CREATE TRIGGER statements. +** Whenever the CREATE TRIGGER keywords are seen, the statement +** must end with ";END;". +** +** This implementation uses a state machine with 8 states: +** +** (0) INVALID We have not yet seen a non-whitespace character. +** +** (1) START At the beginning or end of an SQL statement. This routine +** returns 1 if it ends in the START state and 0 if it ends +** in any other state. +** +** (2) NORMAL We are in the middle of statement which ends with a single +** semicolon. +** +** (3) EXPLAIN The keyword EXPLAIN has been seen at the beginning of +** a statement. +** +** (4) CREATE The keyword CREATE has been seen at the beginning of a +** statement, possibly preceeded by EXPLAIN and/or followed by +** TEMP or TEMPORARY +** +** (5) TRIGGER We are in the middle of a trigger definition that must be +** ended by a semicolon, the keyword END, and another semicolon. +** +** (6) SEMI We've seen the first semicolon in the ";END;" that occurs at +** the end of a trigger definition. +** +** (7) END We've seen the ";END" of the ";END;" that occurs at the end +** of a trigger difinition. +** +** Transitions between states above are determined by tokens extracted +** from the input. The following tokens are significant: +** +** (0) tkSEMI A semicolon. +** (1) tkWS Whitespace. +** (2) tkOTHER Any other SQL token. +** (3) tkEXPLAIN The "explain" keyword. +** (4) tkCREATE The "create" keyword. +** (5) tkTEMP The "temp" or "temporary" keyword. +** (6) tkTRIGGER The "trigger" keyword. +** (7) tkEND The "end" keyword. +** +** Whitespace never causes a state transition and is always ignored. +** This means that a SQL string of all whitespace is invalid. +** +** If we compile with SQLITE_OMIT_TRIGGER, all of the computation needed +** to recognize the end of a trigger can be omitted. All we have to do +** is look for a semicolon that is not part of an string or comment. +*/ +SQLITE_API int sqlite3_complete(const char *zSql){ + u8 state = 0; /* Current state, using numbers defined in header comment */ + u8 token; /* Value of the next token */ + +#ifndef SQLITE_OMIT_TRIGGER + /* A complex statement machine used to detect the end of a CREATE TRIGGER + ** statement. This is the normal case. + */ + static const u8 trans[8][8] = { + /* Token: */ + /* State: ** SEMI WS OTHER EXPLAIN CREATE TEMP TRIGGER END */ + /* 0 INVALID: */ { 1, 0, 2, 3, 4, 2, 2, 2, }, + /* 1 START: */ { 1, 1, 2, 3, 4, 2, 2, 2, }, + /* 2 NORMAL: */ { 1, 2, 2, 2, 2, 2, 2, 2, }, + /* 3 EXPLAIN: */ { 1, 3, 3, 2, 4, 2, 2, 2, }, + /* 4 CREATE: */ { 1, 4, 2, 2, 2, 4, 5, 2, }, + /* 5 TRIGGER: */ { 6, 5, 5, 5, 5, 5, 5, 5, }, + /* 6 SEMI: */ { 6, 6, 5, 5, 5, 5, 5, 7, }, + /* 7 END: */ { 1, 7, 5, 5, 5, 5, 5, 5, }, + }; +#else + /* If triggers are not supported by this compile then the statement machine + ** used to detect the end of a statement is much simplier + */ + static const u8 trans[3][3] = { + /* Token: */ + /* State: ** SEMI WS OTHER */ + /* 0 INVALID: */ { 1, 0, 2, }, + /* 1 START: */ { 1, 1, 2, }, + /* 2 NORMAL: */ { 1, 2, 2, }, + }; +#endif /* SQLITE_OMIT_TRIGGER */ + + while( *zSql ){ + switch( *zSql ){ + case ';': { /* A semicolon */ + token = tkSEMI; + break; + } + case ' ': + case '\r': + case '\t': + case '\n': + case '\f': { /* White space is ignored */ + token = tkWS; + break; + } + case '/': { /* C-style comments */ + if( zSql[1]!='*' ){ + token = tkOTHER; + break; + } + zSql += 2; + while( zSql[0] && (zSql[0]!='*' || zSql[1]!='/') ){ zSql++; } + if( zSql[0]==0 ) return 0; + zSql++; + token = tkWS; + break; + } + case '-': { /* SQL-style comments from "--" to end of line */ + if( zSql[1]!='-' ){ + token = tkOTHER; + break; + } + while( *zSql && *zSql!='\n' ){ zSql++; } + if( *zSql==0 ) return state==1; + token = tkWS; + break; + } + case '[': { /* Microsoft-style identifiers in [...] */ + zSql++; + while( *zSql && *zSql!=']' ){ zSql++; } + if( *zSql==0 ) return 0; + token = tkOTHER; + break; + } + case '`': /* Grave-accent quoted symbols used by MySQL */ + case '"': /* single- and double-quoted strings */ + case '\'': { + int c = *zSql; + zSql++; + while( *zSql && *zSql!=c ){ zSql++; } + if( *zSql==0 ) return 0; + token = tkOTHER; + break; + } + default: { +#ifdef SQLITE_EBCDIC + unsigned char c; +#endif + if( IdChar((u8)*zSql) ){ + /* Keywords and unquoted identifiers */ + int nId; + for(nId=1; IdChar(zSql[nId]); nId++){} +#ifdef SQLITE_OMIT_TRIGGER + token = tkOTHER; +#else + switch( *zSql ){ + case 'c': case 'C': { + if( nId==6 && sqlite3StrNICmp(zSql, "create", 6)==0 ){ + token = tkCREATE; + }else{ + token = tkOTHER; + } + break; + } + case 't': case 'T': { + if( nId==7 && sqlite3StrNICmp(zSql, "trigger", 7)==0 ){ + token = tkTRIGGER; + }else if( nId==4 && sqlite3StrNICmp(zSql, "temp", 4)==0 ){ + token = tkTEMP; + }else if( nId==9 && sqlite3StrNICmp(zSql, "temporary", 9)==0 ){ + token = tkTEMP; + }else{ + token = tkOTHER; + } + break; + } + case 'e': case 'E': { + if( nId==3 && sqlite3StrNICmp(zSql, "end", 3)==0 ){ + token = tkEND; + }else +#ifndef SQLITE_OMIT_EXPLAIN + if( nId==7 && sqlite3StrNICmp(zSql, "explain", 7)==0 ){ + token = tkEXPLAIN; + }else +#endif + { + token = tkOTHER; + } + break; + } + default: { + token = tkOTHER; + break; + } + } +#endif /* SQLITE_OMIT_TRIGGER */ + zSql += nId-1; + }else{ + /* Operators and special symbols */ + token = tkOTHER; + } + break; + } + } + state = trans[state][token]; + zSql++; + } + return state==1; +} + +#ifndef SQLITE_OMIT_UTF16 +/* +** This routine is the same as the sqlite3_complete() routine described +** above, except that the parameter is required to be UTF-16 encoded, not +** UTF-8. +*/ +SQLITE_API int sqlite3_complete16(const void *zSql){ + sqlite3_value *pVal; + char const *zSql8; + int rc = SQLITE_NOMEM; + +#ifndef SQLITE_OMIT_AUTOINIT + rc = sqlite3_initialize(); + if( rc ) return rc; +#endif + pVal = sqlite3ValueNew(0); + sqlite3ValueSetStr(pVal, -1, zSql, SQLITE_UTF16NATIVE, SQLITE_STATIC); + zSql8 = sqlite3ValueText(pVal, SQLITE_UTF8); + if( zSql8 ){ + rc = sqlite3_complete(zSql8); + }else{ + rc = SQLITE_NOMEM; + } + sqlite3ValueFree(pVal); + return sqlite3ApiExit(0, rc); +} +#endif /* SQLITE_OMIT_UTF16 */ +#endif /* SQLITE_OMIT_COMPLETE */ + +/************** End of complete.c ********************************************/ +/************** Begin file main.c ********************************************/ +/* +** 2001 September 15 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** Main file for the SQLite library. The routines in this file +** implement the programmer interface to the library. Routines in +** other files are for internal use by SQLite and should not be +** accessed by users of the library. +*/ + +#ifdef SQLITE_ENABLE_FTS3 +/************** Include fts3.h in the middle of main.c ***********************/ +/************** Begin file fts3.h ********************************************/ +/* +** 2006 Oct 10 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +****************************************************************************** +** +** This header file is used by programs that want to link against the +** FTS3 library. All it does is declare the sqlite3Fts3Init() interface. +*/ + +#if 0 +extern "C" { +#endif /* __cplusplus */ + +SQLITE_PRIVATE int sqlite3Fts3Init(sqlite3 *db); + +#if 0 +} /* extern "C" */ +#endif /* __cplusplus */ + +/************** End of fts3.h ************************************************/ +/************** Continuing where we left off in main.c ***********************/ +#endif +#ifdef SQLITE_ENABLE_RTREE +/************** Include rtree.h in the middle of main.c **********************/ +/************** Begin file rtree.h *******************************************/ +/* +** 2008 May 26 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +****************************************************************************** +** +** This header file is used by programs that want to link against the +** RTREE library. All it does is declare the sqlite3RtreeInit() interface. +*/ + +#if 0 +extern "C" { +#endif /* __cplusplus */ + +SQLITE_PRIVATE int sqlite3RtreeInit(sqlite3 *db); + +#if 0 +} /* extern "C" */ +#endif /* __cplusplus */ + +/************** End of rtree.h ***********************************************/ +/************** Continuing where we left off in main.c ***********************/ +#endif +#ifdef SQLITE_ENABLE_ICU +/************** Include sqliteicu.h in the middle of main.c ******************/ +/************** Begin file sqliteicu.h ***************************************/ +/* +** 2008 May 26 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +****************************************************************************** +** +** This header file is used by programs that want to link against the +** ICU extension. All it does is declare the sqlite3IcuInit() interface. +*/ + +#if 0 +extern "C" { +#endif /* __cplusplus */ + +SQLITE_PRIVATE int sqlite3IcuInit(sqlite3 *db); + +#if 0 +} /* extern "C" */ +#endif /* __cplusplus */ + + +/************** End of sqliteicu.h *******************************************/ +/************** Continuing where we left off in main.c ***********************/ +#endif + +#ifndef SQLITE_AMALGAMATION +/* IMPLEMENTATION-OF: R-46656-45156 The sqlite3_version[] string constant +** contains the text of SQLITE_VERSION macro. +*/ +SQLITE_API const char sqlite3_version[] = SQLITE_VERSION; +#endif + +/* IMPLEMENTATION-OF: R-53536-42575 The sqlite3_libversion() function returns +** a pointer to the to the sqlite3_version[] string constant. +*/ +SQLITE_API const char *sqlite3_libversion(void){ return sqlite3_version; } + +/* IMPLEMENTATION-OF: R-63124-39300 The sqlite3_sourceid() function returns a +** pointer to a string constant whose value is the same as the +** SQLITE_SOURCE_ID C preprocessor macro. +*/ +SQLITE_API const char *sqlite3_sourceid(void){ return SQLITE_SOURCE_ID; } + +/* IMPLEMENTATION-OF: R-35210-63508 The sqlite3_libversion_number() function +** returns an integer equal to SQLITE_VERSION_NUMBER. +*/ +SQLITE_API int sqlite3_libversion_number(void){ return SQLITE_VERSION_NUMBER; } + +/* IMPLEMENTATION-OF: R-20790-14025 The sqlite3_threadsafe() function returns +** zero if and only if SQLite was compiled with mutexing code omitted due to +** the SQLITE_THREADSAFE compile-time option being set to 0. +*/ +SQLITE_API int sqlite3_threadsafe(void){ return SQLITE_THREADSAFE; } + +#if !defined(SQLITE_OMIT_TRACE) && defined(SQLITE_ENABLE_IOTRACE) +/* +** If the following function pointer is not NULL and if +** SQLITE_ENABLE_IOTRACE is enabled, then messages describing +** I/O active are written using this function. These messages +** are intended for debugging activity only. +*/ +SQLITE_PRIVATE void (*sqlite3IoTrace)(const char*, ...) = 0; +#endif + +/* +** If the following global variable points to a string which is the +** name of a directory, then that directory will be used to store +** temporary files. +** +** See also the "PRAGMA temp_store_directory" SQL command. +*/ +SQLITE_API char *sqlite3_temp_directory = 0; + +/* +** If the following global variable points to a string which is the +** name of a directory, then that directory will be used to store +** all database files specified with a relative pathname. +** +** See also the "PRAGMA data_store_directory" SQL command. +*/ +SQLITE_API char *sqlite3_data_directory = 0; + +/* +** Initialize SQLite. +** +** This routine must be called to initialize the memory allocation, +** VFS, and mutex subsystems prior to doing any serious work with +** SQLite. But as long as you do not compile with SQLITE_OMIT_AUTOINIT +** this routine will be called automatically by key routines such as +** sqlite3_open(). +** +** This routine is a no-op except on its very first call for the process, +** or for the first call after a call to sqlite3_shutdown. +** +** The first thread to call this routine runs the initialization to +** completion. If subsequent threads call this routine before the first +** thread has finished the initialization process, then the subsequent +** threads must block until the first thread finishes with the initialization. +** +** The first thread might call this routine recursively. Recursive +** calls to this routine should not block, of course. Otherwise the +** initialization process would never complete. +** +** Let X be the first thread to enter this routine. Let Y be some other +** thread. Then while the initial invocation of this routine by X is +** incomplete, it is required that: +** +** * Calls to this routine from Y must block until the outer-most +** call by X completes. +** +** * Recursive calls to this routine from thread X return immediately +** without blocking. +*/ +SQLITE_API int sqlite3_initialize(void){ + MUTEX_LOGIC( sqlite3_mutex *pMaster; ) /* The main static mutex */ + int rc; /* Result code */ + +#ifdef SQLITE_OMIT_WSD + rc = sqlite3_wsd_init(4096, 24); + if( rc!=SQLITE_OK ){ + return rc; + } +#endif + + /* If SQLite is already completely initialized, then this call + ** to sqlite3_initialize() should be a no-op. But the initialization + ** must be complete. So isInit must not be set until the very end + ** of this routine. + */ + if( sqlite3GlobalConfig.isInit ) return SQLITE_OK; + + /* Make sure the mutex subsystem is initialized. If unable to + ** initialize the mutex subsystem, return early with the error. + ** If the system is so sick that we are unable to allocate a mutex, + ** there is not much SQLite is going to be able to do. + ** + ** The mutex subsystem must take care of serializing its own + ** initialization. + */ + rc = sqlite3MutexInit(); + if( rc ) return rc; + + /* Initialize the malloc() system and the recursive pInitMutex mutex. + ** This operation is protected by the STATIC_MASTER mutex. Note that + ** MutexAlloc() is called for a static mutex prior to initializing the + ** malloc subsystem - this implies that the allocation of a static + ** mutex must not require support from the malloc subsystem. + */ + MUTEX_LOGIC( pMaster = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER); ) + sqlite3_mutex_enter(pMaster); + sqlite3GlobalConfig.isMutexInit = 1; + if( !sqlite3GlobalConfig.isMallocInit ){ + rc = sqlite3MallocInit(); + } + if( rc==SQLITE_OK ){ + sqlite3GlobalConfig.isMallocInit = 1; + if( !sqlite3GlobalConfig.pInitMutex ){ + sqlite3GlobalConfig.pInitMutex = + sqlite3MutexAlloc(SQLITE_MUTEX_RECURSIVE); + if( sqlite3GlobalConfig.bCoreMutex && !sqlite3GlobalConfig.pInitMutex ){ + rc = SQLITE_NOMEM; + } + } + } + if( rc==SQLITE_OK ){ + sqlite3GlobalConfig.nRefInitMutex++; + } + sqlite3_mutex_leave(pMaster); + + /* If rc is not SQLITE_OK at this point, then either the malloc + ** subsystem could not be initialized or the system failed to allocate + ** the pInitMutex mutex. Return an error in either case. */ + if( rc!=SQLITE_OK ){ + return rc; + } + + /* Do the rest of the initialization under the recursive mutex so + ** that we will be able to handle recursive calls into + ** sqlite3_initialize(). The recursive calls normally come through + ** sqlite3_os_init() when it invokes sqlite3_vfs_register(), but other + ** recursive calls might also be possible. + ** + ** IMPLEMENTATION-OF: R-00140-37445 SQLite automatically serializes calls + ** to the xInit method, so the xInit method need not be threadsafe. + ** + ** The following mutex is what serializes access to the appdef pcache xInit + ** methods. The sqlite3_pcache_methods.xInit() all is embedded in the + ** call to sqlite3PcacheInitialize(). + */ + sqlite3_mutex_enter(sqlite3GlobalConfig.pInitMutex); + if( sqlite3GlobalConfig.isInit==0 && sqlite3GlobalConfig.inProgress==0 ){ + FuncDefHash *pHash = &GLOBAL(FuncDefHash, sqlite3GlobalFunctions); + sqlite3GlobalConfig.inProgress = 1; + memset(pHash, 0, sizeof(sqlite3GlobalFunctions)); + sqlite3RegisterGlobalFunctions(); + if( sqlite3GlobalConfig.isPCacheInit==0 ){ + rc = sqlite3PcacheInitialize(); + } + if( rc==SQLITE_OK ){ + sqlite3GlobalConfig.isPCacheInit = 1; + rc = sqlite3OsInit(); + } + if( rc==SQLITE_OK ){ + sqlite3PCacheBufferSetup( sqlite3GlobalConfig.pPage, + sqlite3GlobalConfig.szPage, sqlite3GlobalConfig.nPage); + sqlite3GlobalConfig.isInit = 1; + } + sqlite3GlobalConfig.inProgress = 0; + } + sqlite3_mutex_leave(sqlite3GlobalConfig.pInitMutex); + + /* Go back under the static mutex and clean up the recursive + ** mutex to prevent a resource leak. + */ + sqlite3_mutex_enter(pMaster); + sqlite3GlobalConfig.nRefInitMutex--; + if( sqlite3GlobalConfig.nRefInitMutex<=0 ){ + assert( sqlite3GlobalConfig.nRefInitMutex==0 ); + sqlite3_mutex_free(sqlite3GlobalConfig.pInitMutex); + sqlite3GlobalConfig.pInitMutex = 0; + } + sqlite3_mutex_leave(pMaster); + + /* The following is just a sanity check to make sure SQLite has + ** been compiled correctly. It is important to run this code, but + ** we don't want to run it too often and soak up CPU cycles for no + ** reason. So we run it once during initialization. + */ +#ifndef NDEBUG +#ifndef SQLITE_OMIT_FLOATING_POINT + /* This section of code's only "output" is via assert() statements. */ + if ( rc==SQLITE_OK ){ + u64 x = (((u64)1)<<63)-1; + double y; + assert(sizeof(x)==8); + assert(sizeof(x)==sizeof(y)); + memcpy(&y, &x, 8); + assert( sqlite3IsNaN(y) ); + } +#endif +#endif + + /* Do extra initialization steps requested by the SQLITE_EXTRA_INIT + ** compile-time option. + */ +#ifdef SQLITE_EXTRA_INIT + if( rc==SQLITE_OK && sqlite3GlobalConfig.isInit ){ + int SQLITE_EXTRA_INIT(const char*); + rc = SQLITE_EXTRA_INIT(0); + } +#endif + + return rc; +} + +/* +** Undo the effects of sqlite3_initialize(). Must not be called while +** there are outstanding database connections or memory allocations or +** while any part of SQLite is otherwise in use in any thread. This +** routine is not threadsafe. But it is safe to invoke this routine +** on when SQLite is already shut down. If SQLite is already shut down +** when this routine is invoked, then this routine is a harmless no-op. +*/ +SQLITE_API int sqlite3_shutdown(void){ + if( sqlite3GlobalConfig.isInit ){ +#ifdef SQLITE_EXTRA_SHUTDOWN + void SQLITE_EXTRA_SHUTDOWN(void); + SQLITE_EXTRA_SHUTDOWN(); +#endif + sqlite3_os_end(); + sqlite3_reset_auto_extension(); + sqlite3GlobalConfig.isInit = 0; + } + if( sqlite3GlobalConfig.isPCacheInit ){ + sqlite3PcacheShutdown(); + sqlite3GlobalConfig.isPCacheInit = 0; + } + if( sqlite3GlobalConfig.isMallocInit ){ + sqlite3MallocEnd(); + sqlite3GlobalConfig.isMallocInit = 0; + +#ifndef SQLITE_OMIT_SHUTDOWN_DIRECTORIES + /* The heap subsystem has now been shutdown and these values are supposed + ** to be NULL or point to memory that was obtained from sqlite3_malloc(), + ** which would rely on that heap subsystem; therefore, make sure these + ** values cannot refer to heap memory that was just invalidated when the + ** heap subsystem was shutdown. This is only done if the current call to + ** this function resulted in the heap subsystem actually being shutdown. + */ + sqlite3_data_directory = 0; + sqlite3_temp_directory = 0; +#endif + } + if( sqlite3GlobalConfig.isMutexInit ){ + sqlite3MutexEnd(); + sqlite3GlobalConfig.isMutexInit = 0; + } + + return SQLITE_OK; +} + +/* +** This API allows applications to modify the global configuration of +** the SQLite library at run-time. +** +** This routine should only be called when there are no outstanding +** database connections or memory allocations. This routine is not +** threadsafe. Failure to heed these warnings can lead to unpredictable +** behavior. +*/ +SQLITE_API int sqlite3_config(int op, ...){ + va_list ap; + int rc = SQLITE_OK; + + /* sqlite3_config() shall return SQLITE_MISUSE if it is invoked while + ** the SQLite library is in use. */ + if( sqlite3GlobalConfig.isInit ) return SQLITE_MISUSE_BKPT; + + va_start(ap, op); + switch( op ){ + + /* Mutex configuration options are only available in a threadsafe + ** compile. + */ +#if defined(SQLITE_THREADSAFE) && SQLITE_THREADSAFE>0 + case SQLITE_CONFIG_SINGLETHREAD: { + /* Disable all mutexing */ + sqlite3GlobalConfig.bCoreMutex = 0; + sqlite3GlobalConfig.bFullMutex = 0; + break; + } + case SQLITE_CONFIG_MULTITHREAD: { + /* Disable mutexing of database connections */ + /* Enable mutexing of core data structures */ + sqlite3GlobalConfig.bCoreMutex = 1; + sqlite3GlobalConfig.bFullMutex = 0; + break; + } + case SQLITE_CONFIG_SERIALIZED: { + /* Enable all mutexing */ + sqlite3GlobalConfig.bCoreMutex = 1; + sqlite3GlobalConfig.bFullMutex = 1; + break; + } + case SQLITE_CONFIG_MUTEX: { + /* Specify an alternative mutex implementation */ + sqlite3GlobalConfig.mutex = *va_arg(ap, sqlite3_mutex_methods*); + break; + } + case SQLITE_CONFIG_GETMUTEX: { + /* Retrieve the current mutex implementation */ + *va_arg(ap, sqlite3_mutex_methods*) = sqlite3GlobalConfig.mutex; + break; + } +#endif + + + case SQLITE_CONFIG_MALLOC: { + /* Specify an alternative malloc implementation */ + sqlite3GlobalConfig.m = *va_arg(ap, sqlite3_mem_methods*); + break; + } + case SQLITE_CONFIG_GETMALLOC: { + /* Retrieve the current malloc() implementation */ + if( sqlite3GlobalConfig.m.xMalloc==0 ) sqlite3MemSetDefault(); + *va_arg(ap, sqlite3_mem_methods*) = sqlite3GlobalConfig.m; + break; + } + case SQLITE_CONFIG_MEMSTATUS: { + /* Enable or disable the malloc status collection */ + sqlite3GlobalConfig.bMemstat = va_arg(ap, int); + break; + } + case SQLITE_CONFIG_SCRATCH: { + /* Designate a buffer for scratch memory space */ + sqlite3GlobalConfig.pScratch = va_arg(ap, void*); + sqlite3GlobalConfig.szScratch = va_arg(ap, int); + sqlite3GlobalConfig.nScratch = va_arg(ap, int); + break; + } + case SQLITE_CONFIG_PAGECACHE: { + /* Designate a buffer for page cache memory space */ + sqlite3GlobalConfig.pPage = va_arg(ap, void*); + sqlite3GlobalConfig.szPage = va_arg(ap, int); + sqlite3GlobalConfig.nPage = va_arg(ap, int); + break; + } + + case SQLITE_CONFIG_PCACHE: { + /* no-op */ + break; + } + case SQLITE_CONFIG_GETPCACHE: { + /* now an error */ + rc = SQLITE_ERROR; + break; + } + + case SQLITE_CONFIG_PCACHE2: { + /* Specify an alternative page cache implementation */ + sqlite3GlobalConfig.pcache2 = *va_arg(ap, sqlite3_pcache_methods2*); + break; + } + case SQLITE_CONFIG_GETPCACHE2: { + if( sqlite3GlobalConfig.pcache2.xInit==0 ){ + sqlite3PCacheSetDefault(); + } + *va_arg(ap, sqlite3_pcache_methods2*) = sqlite3GlobalConfig.pcache2; + break; + } + +#if defined(SQLITE_ENABLE_MEMSYS3) || defined(SQLITE_ENABLE_MEMSYS5) + case SQLITE_CONFIG_HEAP: { + /* Designate a buffer for heap memory space */ + sqlite3GlobalConfig.pHeap = va_arg(ap, void*); + sqlite3GlobalConfig.nHeap = va_arg(ap, int); + sqlite3GlobalConfig.mnReq = va_arg(ap, int); + + if( sqlite3GlobalConfig.mnReq<1 ){ + sqlite3GlobalConfig.mnReq = 1; + }else if( sqlite3GlobalConfig.mnReq>(1<<12) ){ + /* cap min request size at 2^12 */ + sqlite3GlobalConfig.mnReq = (1<<12); + } + + if( sqlite3GlobalConfig.pHeap==0 ){ + /* If the heap pointer is NULL, then restore the malloc implementation + ** back to NULL pointers too. This will cause the malloc to go + ** back to its default implementation when sqlite3_initialize() is + ** run. + */ + memset(&sqlite3GlobalConfig.m, 0, sizeof(sqlite3GlobalConfig.m)); + }else{ + /* The heap pointer is not NULL, then install one of the + ** mem5.c/mem3.c methods. If neither ENABLE_MEMSYS3 nor + ** ENABLE_MEMSYS5 is defined, return an error. + */ +#ifdef SQLITE_ENABLE_MEMSYS3 + sqlite3GlobalConfig.m = *sqlite3MemGetMemsys3(); +#endif +#ifdef SQLITE_ENABLE_MEMSYS5 + sqlite3GlobalConfig.m = *sqlite3MemGetMemsys5(); +#endif + } + break; + } +#endif + + case SQLITE_CONFIG_LOOKASIDE: { + sqlite3GlobalConfig.szLookaside = va_arg(ap, int); + sqlite3GlobalConfig.nLookaside = va_arg(ap, int); + break; + } + + /* Record a pointer to the logger funcction and its first argument. + ** The default is NULL. Logging is disabled if the function pointer is + ** NULL. + */ + case SQLITE_CONFIG_LOG: { + /* MSVC is picky about pulling func ptrs from va lists. + ** http://support.microsoft.com/kb/47961 + ** sqlite3GlobalConfig.xLog = va_arg(ap, void(*)(void*,int,const char*)); + */ + typedef void(*LOGFUNC_t)(void*,int,const char*); + sqlite3GlobalConfig.xLog = va_arg(ap, LOGFUNC_t); + sqlite3GlobalConfig.pLogArg = va_arg(ap, void*); + break; + } + + case SQLITE_CONFIG_URI: { + sqlite3GlobalConfig.bOpenUri = va_arg(ap, int); + break; + } + + default: { + rc = SQLITE_ERROR; + break; + } + } + va_end(ap); + return rc; +} + +/* +** Set up the lookaside buffers for a database connection. +** Return SQLITE_OK on success. +** If lookaside is already active, return SQLITE_BUSY. +** +** The sz parameter is the number of bytes in each lookaside slot. +** The cnt parameter is the number of slots. If pStart is NULL the +** space for the lookaside memory is obtained from sqlite3_malloc(). +** If pStart is not NULL then it is sz*cnt bytes of memory to use for +** the lookaside memory. +*/ +static int setupLookaside(sqlite3 *db, void *pBuf, int sz, int cnt){ + void *pStart; + if( db->lookaside.nOut ){ + return SQLITE_BUSY; + } + /* Free any existing lookaside buffer for this handle before + ** allocating a new one so we don't have to have space for + ** both at the same time. + */ + if( db->lookaside.bMalloced ){ + sqlite3_free(db->lookaside.pStart); + } + /* The size of a lookaside slot after ROUNDDOWN8 needs to be larger + ** than a pointer to be useful. + */ + sz = ROUNDDOWN8(sz); /* IMP: R-33038-09382 */ + if( sz<=(int)sizeof(LookasideSlot*) ) sz = 0; + if( cnt<0 ) cnt = 0; + if( sz==0 || cnt==0 ){ + sz = 0; + pStart = 0; + }else if( pBuf==0 ){ + sqlite3BeginBenignMalloc(); + pStart = sqlite3Malloc( sz*cnt ); /* IMP: R-61949-35727 */ + sqlite3EndBenignMalloc(); + if( pStart ) cnt = sqlite3MallocSize(pStart)/sz; + }else{ + pStart = pBuf; + } + db->lookaside.pStart = pStart; + db->lookaside.pFree = 0; + db->lookaside.sz = (u16)sz; + if( pStart ){ + int i; + LookasideSlot *p; + assert( sz > (int)sizeof(LookasideSlot*) ); + p = (LookasideSlot*)pStart; + for(i=cnt-1; i>=0; i--){ + p->pNext = db->lookaside.pFree; + db->lookaside.pFree = p; + p = (LookasideSlot*)&((u8*)p)[sz]; + } + db->lookaside.pEnd = p; + db->lookaside.bEnabled = 1; + db->lookaside.bMalloced = pBuf==0 ?1:0; + }else{ + db->lookaside.pEnd = 0; + db->lookaside.bEnabled = 0; + db->lookaside.bMalloced = 0; + } + return SQLITE_OK; +} + +/* +** Return the mutex associated with a database connection. +*/ +SQLITE_API sqlite3_mutex *sqlite3_db_mutex(sqlite3 *db){ + return db->mutex; +} + +/* +** Free up as much memory as we can from the given database +** connection. +*/ +SQLITE_API int sqlite3_db_release_memory(sqlite3 *db){ + int i; + sqlite3_mutex_enter(db->mutex); + sqlite3BtreeEnterAll(db); + for(i=0; inDb; i++){ + Btree *pBt = db->aDb[i].pBt; + if( pBt ){ + Pager *pPager = sqlite3BtreePager(pBt); + sqlite3PagerShrink(pPager); + } + } + sqlite3BtreeLeaveAll(db); + sqlite3_mutex_leave(db->mutex); + return SQLITE_OK; +} + +/* +** Configuration settings for an individual database connection +*/ +SQLITE_API int sqlite3_db_config(sqlite3 *db, int op, ...){ + va_list ap; + int rc; + va_start(ap, op); + switch( op ){ + case SQLITE_DBCONFIG_LOOKASIDE: { + void *pBuf = va_arg(ap, void*); /* IMP: R-26835-10964 */ + int sz = va_arg(ap, int); /* IMP: R-47871-25994 */ + int cnt = va_arg(ap, int); /* IMP: R-04460-53386 */ + rc = setupLookaside(db, pBuf, sz, cnt); + break; + } + default: { + static const struct { + int op; /* The opcode */ + u32 mask; /* Mask of the bit in sqlite3.flags to set/clear */ + } aFlagOp[] = { + { SQLITE_DBCONFIG_ENABLE_FKEY, SQLITE_ForeignKeys }, + { SQLITE_DBCONFIG_ENABLE_TRIGGER, SQLITE_EnableTrigger }, + }; + unsigned int i; + rc = SQLITE_ERROR; /* IMP: R-42790-23372 */ + for(i=0; iflags; + if( onoff>0 ){ + db->flags |= aFlagOp[i].mask; + }else if( onoff==0 ){ + db->flags &= ~aFlagOp[i].mask; + } + if( oldFlags!=db->flags ){ + sqlite3ExpirePreparedStatements(db); + } + if( pRes ){ + *pRes = (db->flags & aFlagOp[i].mask)!=0; + } + rc = SQLITE_OK; + break; + } + } + break; + } + } + va_end(ap); + return rc; +} + + +/* +** Return true if the buffer z[0..n-1] contains all spaces. +*/ +static int allSpaces(const char *z, int n){ + while( n>0 && z[n-1]==' ' ){ n--; } + return n==0; +} + +/* +** This is the default collating function named "BINARY" which is always +** available. +** +** If the padFlag argument is not NULL then space padding at the end +** of strings is ignored. This implements the RTRIM collation. +*/ +static int binCollFunc( + void *padFlag, + int nKey1, const void *pKey1, + int nKey2, const void *pKey2 +){ + int rc, n; + n = nKey1lastRowid; +} + +/* +** Return the number of changes in the most recent call to sqlite3_exec(). +*/ +SQLITE_API int sqlite3_changes(sqlite3 *db){ + return db->nChange; +} + +/* +** Return the number of changes since the database handle was opened. +*/ +SQLITE_API int sqlite3_total_changes(sqlite3 *db){ + return db->nTotalChange; +} + +/* +** Close all open savepoints. This function only manipulates fields of the +** database handle object, it does not close any savepoints that may be open +** at the b-tree/pager level. +*/ +SQLITE_PRIVATE void sqlite3CloseSavepoints(sqlite3 *db){ + while( db->pSavepoint ){ + Savepoint *pTmp = db->pSavepoint; + db->pSavepoint = pTmp->pNext; + sqlite3DbFree(db, pTmp); + } + db->nSavepoint = 0; + db->nStatement = 0; + db->isTransactionSavepoint = 0; +} + +/* +** Invoke the destructor function associated with FuncDef p, if any. Except, +** if this is not the last copy of the function, do not invoke it. Multiple +** copies of a single function are created when create_function() is called +** with SQLITE_ANY as the encoding. +*/ +static void functionDestroy(sqlite3 *db, FuncDef *p){ + FuncDestructor *pDestructor = p->pDestructor; + if( pDestructor ){ + pDestructor->nRef--; + if( pDestructor->nRef==0 ){ + pDestructor->xDestroy(pDestructor->pUserData); + sqlite3DbFree(db, pDestructor); + } + } +} + +/* +** Disconnect all sqlite3_vtab objects that belong to database connection +** db. This is called when db is being closed. +*/ +static void disconnectAllVtab(sqlite3 *db){ +#ifndef SQLITE_OMIT_VIRTUALTABLE + int i; + sqlite3BtreeEnterAll(db); + for(i=0; inDb; i++){ + Schema *pSchema = db->aDb[i].pSchema; + if( db->aDb[i].pSchema ){ + HashElem *p; + for(p=sqliteHashFirst(&pSchema->tblHash); p; p=sqliteHashNext(p)){ + Table *pTab = (Table *)sqliteHashData(p); + if( IsVirtual(pTab) ) sqlite3VtabDisconnect(db, pTab); + } + } + } + sqlite3BtreeLeaveAll(db); +#else + UNUSED_PARAMETER(db); +#endif +} + +/* +** Close an existing SQLite database +*/ +SQLITE_API int sqlite3_close(sqlite3 *db){ + HashElem *i; /* Hash table iterator */ + int j; + + if( !db ){ + return SQLITE_OK; + } + if( !sqlite3SafetyCheckSickOrOk(db) ){ + return SQLITE_MISUSE_BKPT; + } + sqlite3_mutex_enter(db->mutex); + + /* Force xDisconnect calls on all virtual tables */ + disconnectAllVtab(db); + + /* If a transaction is open, the disconnectAllVtab() call above + ** will not have called the xDisconnect() method on any virtual + ** tables in the db->aVTrans[] array. The following sqlite3VtabRollback() + ** call will do so. We need to do this before the check for active + ** SQL statements below, as the v-table implementation may be storing + ** some prepared statements internally. + */ + sqlite3VtabRollback(db); + + /* If there are any outstanding VMs, return SQLITE_BUSY. */ + if( db->pVdbe ){ + sqlite3Error(db, SQLITE_BUSY, + "unable to close due to unfinalised statements"); + sqlite3_mutex_leave(db->mutex); + return SQLITE_BUSY; + } + assert( sqlite3SafetyCheckSickOrOk(db) ); + + for(j=0; jnDb; j++){ + Btree *pBt = db->aDb[j].pBt; + if( pBt && sqlite3BtreeIsInBackup(pBt) ){ + sqlite3Error(db, SQLITE_BUSY, + "unable to close due to unfinished backup operation"); + sqlite3_mutex_leave(db->mutex); + return SQLITE_BUSY; + } + } + + /* Free any outstanding Savepoint structures. */ + sqlite3CloseSavepoints(db); + + /* Close all database connections */ + for(j=0; jnDb; j++){ + struct Db *pDb = &db->aDb[j]; + if( pDb->pBt ){ + sqlite3BtreeClose(pDb->pBt); + pDb->pBt = 0; + if( j!=1 ){ + pDb->pSchema = 0; + } + } + } + /* Clear the TEMP schema separately and last */ + if( db->aDb[1].pSchema ){ + sqlite3SchemaClear(db->aDb[1].pSchema); + } + sqlite3VtabUnlockList(db); + + /* Free up the array of auxiliary databases */ + sqlite3CollapseDatabaseArray(db); + assert( db->nDb<=2 ); + assert( db->aDb==db->aDbStatic ); + + /* Tell the code in notify.c that the connection no longer holds any + ** locks and does not require any further unlock-notify callbacks. + */ + sqlite3ConnectionClosed(db); + + for(j=0; jaFunc.a); j++){ + FuncDef *pNext, *pHash, *p; + for(p=db->aFunc.a[j]; p; p=pHash){ + pHash = p->pHash; + while( p ){ + functionDestroy(db, p); + pNext = p->pNext; + sqlite3DbFree(db, p); + p = pNext; + } + } + } + for(i=sqliteHashFirst(&db->aCollSeq); i; i=sqliteHashNext(i)){ + CollSeq *pColl = (CollSeq *)sqliteHashData(i); + /* Invoke any destructors registered for collation sequence user data. */ + for(j=0; j<3; j++){ + if( pColl[j].xDel ){ + pColl[j].xDel(pColl[j].pUser); + } + } + sqlite3DbFree(db, pColl); + } + sqlite3HashClear(&db->aCollSeq); +#ifndef SQLITE_OMIT_VIRTUALTABLE + for(i=sqliteHashFirst(&db->aModule); i; i=sqliteHashNext(i)){ + Module *pMod = (Module *)sqliteHashData(i); + if( pMod->xDestroy ){ + pMod->xDestroy(pMod->pAux); + } + sqlite3DbFree(db, pMod); + } + sqlite3HashClear(&db->aModule); +#endif + + sqlite3Error(db, SQLITE_OK, 0); /* Deallocates any cached error strings. */ + if( db->pErr ){ + sqlite3ValueFree(db->pErr); + } + sqlite3CloseExtensions(db); + + db->magic = SQLITE_MAGIC_ERROR; + + /* The temp-database schema is allocated differently from the other schema + ** objects (using sqliteMalloc() directly, instead of sqlite3BtreeSchema()). + ** So it needs to be freed here. Todo: Why not roll the temp schema into + ** the same sqliteMalloc() as the one that allocates the database + ** structure? + */ + sqlite3DbFree(db, db->aDb[1].pSchema); + sqlite3_mutex_leave(db->mutex); + db->magic = SQLITE_MAGIC_CLOSED; + sqlite3_mutex_free(db->mutex); + assert( db->lookaside.nOut==0 ); /* Fails on a lookaside memory leak */ + if( db->lookaside.bMalloced ){ + sqlite3_free(db->lookaside.pStart); + } + sqlite3_free(db); + return SQLITE_OK; +} + +/* +** Rollback all database files. If tripCode is not SQLITE_OK, then +** any open cursors are invalidated ("tripped" - as in "tripping a circuit +** breaker") and made to return tripCode if there are any further +** attempts to use that cursor. +*/ +SQLITE_PRIVATE void sqlite3RollbackAll(sqlite3 *db, int tripCode){ + int i; + int inTrans = 0; + assert( sqlite3_mutex_held(db->mutex) ); + sqlite3BeginBenignMalloc(); + for(i=0; inDb; i++){ + Btree *p = db->aDb[i].pBt; + if( p ){ + if( sqlite3BtreeIsInTrans(p) ){ + inTrans = 1; + } + sqlite3BtreeRollback(p, tripCode); + db->aDb[i].inTrans = 0; + } + } + sqlite3VtabRollback(db); + sqlite3EndBenignMalloc(); + + if( db->flags&SQLITE_InternChanges ){ + sqlite3ExpirePreparedStatements(db); + sqlite3ResetAllSchemasOfConnection(db); + } + + /* Any deferred constraint violations have now been resolved. */ + db->nDeferredCons = 0; + + /* If one has been configured, invoke the rollback-hook callback */ + if( db->xRollbackCallback && (inTrans || !db->autoCommit) ){ + db->xRollbackCallback(db->pRollbackArg); + } +} + +/* +** Return a static string that describes the kind of error specified in the +** argument. +*/ +SQLITE_PRIVATE const char *sqlite3ErrStr(int rc){ + static const char* const aMsg[] = { + /* SQLITE_OK */ "not an error", + /* SQLITE_ERROR */ "SQL logic error or missing database", + /* SQLITE_INTERNAL */ 0, + /* SQLITE_PERM */ "access permission denied", + /* SQLITE_ABORT */ "callback requested query abort", + /* SQLITE_BUSY */ "database is locked", + /* SQLITE_LOCKED */ "database table is locked", + /* SQLITE_NOMEM */ "out of memory", + /* SQLITE_READONLY */ "attempt to write a readonly database", + /* SQLITE_INTERRUPT */ "interrupted", + /* SQLITE_IOERR */ "disk I/O error", + /* SQLITE_CORRUPT */ "database disk image is malformed", + /* SQLITE_NOTFOUND */ "unknown operation", + /* SQLITE_FULL */ "database or disk is full", + /* SQLITE_CANTOPEN */ "unable to open database file", + /* SQLITE_PROTOCOL */ "locking protocol", + /* SQLITE_EMPTY */ "table contains no data", + /* SQLITE_SCHEMA */ "database schema has changed", + /* SQLITE_TOOBIG */ "string or blob too big", + /* SQLITE_CONSTRAINT */ "constraint failed", + /* SQLITE_MISMATCH */ "datatype mismatch", + /* SQLITE_MISUSE */ "library routine called out of sequence", + /* SQLITE_NOLFS */ "large file support is disabled", + /* SQLITE_AUTH */ "authorization denied", + /* SQLITE_FORMAT */ "auxiliary database format error", + /* SQLITE_RANGE */ "bind or column index out of range", + /* SQLITE_NOTADB */ "file is encrypted or is not a database", + }; + const char *zErr = "unknown error"; + switch( rc ){ + case SQLITE_ABORT_ROLLBACK: { + zErr = "abort due to ROLLBACK"; + break; + } + default: { + rc &= 0xff; + if( ALWAYS(rc>=0) && rcbusyTimeout; + int delay, prior; + + assert( count>=0 ); + if( count < NDELAY ){ + delay = delays[count]; + prior = totals[count]; + }else{ + delay = delays[NDELAY-1]; + prior = totals[NDELAY-1] + delay*(count-(NDELAY-1)); + } + if( prior + delay > timeout ){ + delay = timeout - prior; + if( delay<=0 ) return 0; + } + sqlite3OsSleep(db->pVfs, delay*1000); + return 1; +#else + sqlite3 *db = (sqlite3 *)ptr; + int timeout = ((sqlite3 *)ptr)->busyTimeout; + if( (count+1)*1000 > timeout ){ + return 0; + } + sqlite3OsSleep(db->pVfs, 1000000); + return 1; +#endif +} + +/* +** Invoke the given busy handler. +** +** This routine is called when an operation failed with a lock. +** If this routine returns non-zero, the lock is retried. If it +** returns 0, the operation aborts with an SQLITE_BUSY error. +*/ +SQLITE_PRIVATE int sqlite3InvokeBusyHandler(BusyHandler *p){ + int rc; + if( NEVER(p==0) || p->xFunc==0 || p->nBusy<0 ) return 0; + rc = p->xFunc(p->pArg, p->nBusy); + if( rc==0 ){ + p->nBusy = -1; + }else{ + p->nBusy++; + } + return rc; +} + +/* +** This routine sets the busy callback for an Sqlite database to the +** given callback function with the given argument. +*/ +SQLITE_API int sqlite3_busy_handler( + sqlite3 *db, + int (*xBusy)(void*,int), + void *pArg +){ + sqlite3_mutex_enter(db->mutex); + db->busyHandler.xFunc = xBusy; + db->busyHandler.pArg = pArg; + db->busyHandler.nBusy = 0; + sqlite3_mutex_leave(db->mutex); + return SQLITE_OK; +} + +#ifndef SQLITE_OMIT_PROGRESS_CALLBACK +/* +** This routine sets the progress callback for an Sqlite database to the +** given callback function with the given argument. The progress callback will +** be invoked every nOps opcodes. +*/ +SQLITE_API void sqlite3_progress_handler( + sqlite3 *db, + int nOps, + int (*xProgress)(void*), + void *pArg +){ + sqlite3_mutex_enter(db->mutex); + if( nOps>0 ){ + db->xProgress = xProgress; + db->nProgressOps = nOps; + db->pProgressArg = pArg; + }else{ + db->xProgress = 0; + db->nProgressOps = 0; + db->pProgressArg = 0; + } + sqlite3_mutex_leave(db->mutex); +} +#endif + + +/* +** This routine installs a default busy handler that waits for the +** specified number of milliseconds before returning 0. +*/ +SQLITE_API int sqlite3_busy_timeout(sqlite3 *db, int ms){ + if( ms>0 ){ + db->busyTimeout = ms; + sqlite3_busy_handler(db, sqliteDefaultBusyCallback, (void*)db); + }else{ + sqlite3_busy_handler(db, 0, 0); + } + return SQLITE_OK; +} + +/* +** Cause any pending operation to stop at its earliest opportunity. +*/ +SQLITE_API void sqlite3_interrupt(sqlite3 *db){ + db->u1.isInterrupted = 1; +} + + +/* +** This function is exactly the same as sqlite3_create_function(), except +** that it is designed to be called by internal code. The difference is +** that if a malloc() fails in sqlite3_create_function(), an error code +** is returned and the mallocFailed flag cleared. +*/ +SQLITE_PRIVATE int sqlite3CreateFunc( + sqlite3 *db, + const char *zFunctionName, + int nArg, + int enc, + void *pUserData, + void (*xFunc)(sqlite3_context*,int,sqlite3_value **), + void (*xStep)(sqlite3_context*,int,sqlite3_value **), + void (*xFinal)(sqlite3_context*), + FuncDestructor *pDestructor +){ + FuncDef *p; + int nName; + + assert( sqlite3_mutex_held(db->mutex) ); + if( zFunctionName==0 || + (xFunc && (xFinal || xStep)) || + (!xFunc && (xFinal && !xStep)) || + (!xFunc && (!xFinal && xStep)) || + (nArg<-1 || nArg>SQLITE_MAX_FUNCTION_ARG) || + (255<(nName = sqlite3Strlen30( zFunctionName))) ){ + return SQLITE_MISUSE_BKPT; + } + +#ifndef SQLITE_OMIT_UTF16 + /* If SQLITE_UTF16 is specified as the encoding type, transform this + ** to one of SQLITE_UTF16LE or SQLITE_UTF16BE using the + ** SQLITE_UTF16NATIVE macro. SQLITE_UTF16 is not used internally. + ** + ** If SQLITE_ANY is specified, add three versions of the function + ** to the hash table. + */ + if( enc==SQLITE_UTF16 ){ + enc = SQLITE_UTF16NATIVE; + }else if( enc==SQLITE_ANY ){ + int rc; + rc = sqlite3CreateFunc(db, zFunctionName, nArg, SQLITE_UTF8, + pUserData, xFunc, xStep, xFinal, pDestructor); + if( rc==SQLITE_OK ){ + rc = sqlite3CreateFunc(db, zFunctionName, nArg, SQLITE_UTF16LE, + pUserData, xFunc, xStep, xFinal, pDestructor); + } + if( rc!=SQLITE_OK ){ + return rc; + } + enc = SQLITE_UTF16BE; + } +#else + enc = SQLITE_UTF8; +#endif + + /* Check if an existing function is being overridden or deleted. If so, + ** and there are active VMs, then return SQLITE_BUSY. If a function + ** is being overridden/deleted but there are no active VMs, allow the + ** operation to continue but invalidate all precompiled statements. + */ + p = sqlite3FindFunction(db, zFunctionName, nName, nArg, (u8)enc, 0); + if( p && p->iPrefEnc==enc && p->nArg==nArg ){ + if( db->activeVdbeCnt ){ + sqlite3Error(db, SQLITE_BUSY, + "unable to delete/modify user-function due to active statements"); + assert( !db->mallocFailed ); + return SQLITE_BUSY; + }else{ + sqlite3ExpirePreparedStatements(db); + } + } + + p = sqlite3FindFunction(db, zFunctionName, nName, nArg, (u8)enc, 1); + assert(p || db->mallocFailed); + if( !p ){ + return SQLITE_NOMEM; + } + + /* If an older version of the function with a configured destructor is + ** being replaced invoke the destructor function here. */ + functionDestroy(db, p); + + if( pDestructor ){ + pDestructor->nRef++; + } + p->pDestructor = pDestructor; + p->flags = 0; + p->xFunc = xFunc; + p->xStep = xStep; + p->xFinalize = xFinal; + p->pUserData = pUserData; + p->nArg = (u16)nArg; + return SQLITE_OK; +} + +/* +** Create new user functions. +*/ +SQLITE_API int sqlite3_create_function( + sqlite3 *db, + const char *zFunc, + int nArg, + int enc, + void *p, + void (*xFunc)(sqlite3_context*,int,sqlite3_value **), + void (*xStep)(sqlite3_context*,int,sqlite3_value **), + void (*xFinal)(sqlite3_context*) +){ + return sqlite3_create_function_v2(db, zFunc, nArg, enc, p, xFunc, xStep, + xFinal, 0); +} + +SQLITE_API int sqlite3_create_function_v2( + sqlite3 *db, + const char *zFunc, + int nArg, + int enc, + void *p, + void (*xFunc)(sqlite3_context*,int,sqlite3_value **), + void (*xStep)(sqlite3_context*,int,sqlite3_value **), + void (*xFinal)(sqlite3_context*), + void (*xDestroy)(void *) +){ + int rc = SQLITE_ERROR; + FuncDestructor *pArg = 0; + sqlite3_mutex_enter(db->mutex); + if( xDestroy ){ + pArg = (FuncDestructor *)sqlite3DbMallocZero(db, sizeof(FuncDestructor)); + if( !pArg ){ + xDestroy(p); + goto out; + } + pArg->xDestroy = xDestroy; + pArg->pUserData = p; + } + rc = sqlite3CreateFunc(db, zFunc, nArg, enc, p, xFunc, xStep, xFinal, pArg); + if( pArg && pArg->nRef==0 ){ + assert( rc!=SQLITE_OK ); + xDestroy(p); + sqlite3DbFree(db, pArg); + } + + out: + rc = sqlite3ApiExit(db, rc); + sqlite3_mutex_leave(db->mutex); + return rc; +} + +#ifndef SQLITE_OMIT_UTF16 +SQLITE_API int sqlite3_create_function16( + sqlite3 *db, + const void *zFunctionName, + int nArg, + int eTextRep, + void *p, + void (*xFunc)(sqlite3_context*,int,sqlite3_value**), + void (*xStep)(sqlite3_context*,int,sqlite3_value**), + void (*xFinal)(sqlite3_context*) +){ + int rc; + char *zFunc8; + sqlite3_mutex_enter(db->mutex); + assert( !db->mallocFailed ); + zFunc8 = sqlite3Utf16to8(db, zFunctionName, -1, SQLITE_UTF16NATIVE); + rc = sqlite3CreateFunc(db, zFunc8, nArg, eTextRep, p, xFunc, xStep, xFinal,0); + sqlite3DbFree(db, zFunc8); + rc = sqlite3ApiExit(db, rc); + sqlite3_mutex_leave(db->mutex); + return rc; +} +#endif + + +/* +** Declare that a function has been overloaded by a virtual table. +** +** If the function already exists as a regular global function, then +** this routine is a no-op. If the function does not exist, then create +** a new one that always throws a run-time error. +** +** When virtual tables intend to provide an overloaded function, they +** should call this routine to make sure the global function exists. +** A global function must exist in order for name resolution to work +** properly. +*/ +SQLITE_API int sqlite3_overload_function( + sqlite3 *db, + const char *zName, + int nArg +){ + int nName = sqlite3Strlen30(zName); + int rc = SQLITE_OK; + sqlite3_mutex_enter(db->mutex); + if( sqlite3FindFunction(db, zName, nName, nArg, SQLITE_UTF8, 0)==0 ){ + rc = sqlite3CreateFunc(db, zName, nArg, SQLITE_UTF8, + 0, sqlite3InvalidFunction, 0, 0, 0); + } + rc = sqlite3ApiExit(db, rc); + sqlite3_mutex_leave(db->mutex); + return rc; +} + +#ifndef SQLITE_OMIT_TRACE +/* +** Register a trace function. The pArg from the previously registered trace +** is returned. +** +** A NULL trace function means that no tracing is executes. A non-NULL +** trace is a pointer to a function that is invoked at the start of each +** SQL statement. +*/ +SQLITE_API void *sqlite3_trace(sqlite3 *db, void (*xTrace)(void*,const char*), void *pArg){ + void *pOld; + sqlite3_mutex_enter(db->mutex); + pOld = db->pTraceArg; + db->xTrace = xTrace; + db->pTraceArg = pArg; + sqlite3_mutex_leave(db->mutex); + return pOld; +} +/* +** Register a profile function. The pArg from the previously registered +** profile function is returned. +** +** A NULL profile function means that no profiling is executes. A non-NULL +** profile is a pointer to a function that is invoked at the conclusion of +** each SQL statement that is run. +*/ +SQLITE_API void *sqlite3_profile( + sqlite3 *db, + void (*xProfile)(void*,const char*,sqlite_uint64), + void *pArg +){ + void *pOld; + sqlite3_mutex_enter(db->mutex); + pOld = db->pProfileArg; + db->xProfile = xProfile; + db->pProfileArg = pArg; + sqlite3_mutex_leave(db->mutex); + return pOld; +} +#endif /* SQLITE_OMIT_TRACE */ + +/* +** Register a function to be invoked when a transaction commits. +** If the invoked function returns non-zero, then the commit becomes a +** rollback. +*/ +SQLITE_API void *sqlite3_commit_hook( + sqlite3 *db, /* Attach the hook to this database */ + int (*xCallback)(void*), /* Function to invoke on each commit */ + void *pArg /* Argument to the function */ +){ + void *pOld; + sqlite3_mutex_enter(db->mutex); + pOld = db->pCommitArg; + db->xCommitCallback = xCallback; + db->pCommitArg = pArg; + sqlite3_mutex_leave(db->mutex); + return pOld; +} + +/* +** Register a callback to be invoked each time a row is updated, +** inserted or deleted using this database connection. +*/ +SQLITE_API void *sqlite3_update_hook( + sqlite3 *db, /* Attach the hook to this database */ + void (*xCallback)(void*,int,char const *,char const *,sqlite_int64), + void *pArg /* Argument to the function */ +){ + void *pRet; + sqlite3_mutex_enter(db->mutex); + pRet = db->pUpdateArg; + db->xUpdateCallback = xCallback; + db->pUpdateArg = pArg; + sqlite3_mutex_leave(db->mutex); + return pRet; +} + +/* +** Register a callback to be invoked each time a transaction is rolled +** back by this database connection. +*/ +SQLITE_API void *sqlite3_rollback_hook( + sqlite3 *db, /* Attach the hook to this database */ + void (*xCallback)(void*), /* Callback function */ + void *pArg /* Argument to the function */ +){ + void *pRet; + sqlite3_mutex_enter(db->mutex); + pRet = db->pRollbackArg; + db->xRollbackCallback = xCallback; + db->pRollbackArg = pArg; + sqlite3_mutex_leave(db->mutex); + return pRet; +} + +#ifndef SQLITE_OMIT_WAL +/* +** The sqlite3_wal_hook() callback registered by sqlite3_wal_autocheckpoint(). +** Invoke sqlite3_wal_checkpoint if the number of frames in the log file +** is greater than sqlite3.pWalArg cast to an integer (the value configured by +** wal_autocheckpoint()). +*/ +SQLITE_PRIVATE int sqlite3WalDefaultHook( + void *pClientData, /* Argument */ + sqlite3 *db, /* Connection */ + const char *zDb, /* Database */ + int nFrame /* Size of WAL */ +){ + if( nFrame>=SQLITE_PTR_TO_INT(pClientData) ){ + sqlite3BeginBenignMalloc(); + sqlite3_wal_checkpoint(db, zDb); + sqlite3EndBenignMalloc(); + } + return SQLITE_OK; +} +#endif /* SQLITE_OMIT_WAL */ + +/* +** Configure an sqlite3_wal_hook() callback to automatically checkpoint +** a database after committing a transaction if there are nFrame or +** more frames in the log file. Passing zero or a negative value as the +** nFrame parameter disables automatic checkpoints entirely. +** +** The callback registered by this function replaces any existing callback +** registered using sqlite3_wal_hook(). Likewise, registering a callback +** using sqlite3_wal_hook() disables the automatic checkpoint mechanism +** configured by this function. +*/ +SQLITE_API int sqlite3_wal_autocheckpoint(sqlite3 *db, int nFrame){ +#ifdef SQLITE_OMIT_WAL + UNUSED_PARAMETER(db); + UNUSED_PARAMETER(nFrame); +#else + if( nFrame>0 ){ + sqlite3_wal_hook(db, sqlite3WalDefaultHook, SQLITE_INT_TO_PTR(nFrame)); + }else{ + sqlite3_wal_hook(db, 0, 0); + } +#endif + return SQLITE_OK; +} + +/* +** Register a callback to be invoked each time a transaction is written +** into the write-ahead-log by this database connection. +*/ +SQLITE_API void *sqlite3_wal_hook( + sqlite3 *db, /* Attach the hook to this db handle */ + int(*xCallback)(void *, sqlite3*, const char*, int), + void *pArg /* First argument passed to xCallback() */ +){ +#ifndef SQLITE_OMIT_WAL + void *pRet; + sqlite3_mutex_enter(db->mutex); + pRet = db->pWalArg; + db->xWalCallback = xCallback; + db->pWalArg = pArg; + sqlite3_mutex_leave(db->mutex); + return pRet; +#else + return 0; +#endif +} + +/* +** Checkpoint database zDb. +*/ +SQLITE_API int sqlite3_wal_checkpoint_v2( + sqlite3 *db, /* Database handle */ + const char *zDb, /* Name of attached database (or NULL) */ + int eMode, /* SQLITE_CHECKPOINT_* value */ + int *pnLog, /* OUT: Size of WAL log in frames */ + int *pnCkpt /* OUT: Total number of frames checkpointed */ +){ +#ifdef SQLITE_OMIT_WAL + return SQLITE_OK; +#else + int rc; /* Return code */ + int iDb = SQLITE_MAX_ATTACHED; /* sqlite3.aDb[] index of db to checkpoint */ + + /* Initialize the output variables to -1 in case an error occurs. */ + if( pnLog ) *pnLog = -1; + if( pnCkpt ) *pnCkpt = -1; + + assert( SQLITE_CHECKPOINT_FULL>SQLITE_CHECKPOINT_PASSIVE ); + assert( SQLITE_CHECKPOINT_FULLSQLITE_CHECKPOINT_RESTART ){ + return SQLITE_MISUSE; + } + + sqlite3_mutex_enter(db->mutex); + if( zDb && zDb[0] ){ + iDb = sqlite3FindDbName(db, zDb); + } + if( iDb<0 ){ + rc = SQLITE_ERROR; + sqlite3Error(db, SQLITE_ERROR, "unknown database: %s", zDb); + }else{ + rc = sqlite3Checkpoint(db, iDb, eMode, pnLog, pnCkpt); + sqlite3Error(db, rc, 0); + } + rc = sqlite3ApiExit(db, rc); + sqlite3_mutex_leave(db->mutex); + return rc; +#endif +} + + +/* +** Checkpoint database zDb. If zDb is NULL, or if the buffer zDb points +** to contains a zero-length string, all attached databases are +** checkpointed. +*/ +SQLITE_API int sqlite3_wal_checkpoint(sqlite3 *db, const char *zDb){ + return sqlite3_wal_checkpoint_v2(db, zDb, SQLITE_CHECKPOINT_PASSIVE, 0, 0); +} + +#ifndef SQLITE_OMIT_WAL +/* +** Run a checkpoint on database iDb. This is a no-op if database iDb is +** not currently open in WAL mode. +** +** If a transaction is open on the database being checkpointed, this +** function returns SQLITE_LOCKED and a checkpoint is not attempted. If +** an error occurs while running the checkpoint, an SQLite error code is +** returned (i.e. SQLITE_IOERR). Otherwise, SQLITE_OK. +** +** The mutex on database handle db should be held by the caller. The mutex +** associated with the specific b-tree being checkpointed is taken by +** this function while the checkpoint is running. +** +** If iDb is passed SQLITE_MAX_ATTACHED, then all attached databases are +** checkpointed. If an error is encountered it is returned immediately - +** no attempt is made to checkpoint any remaining databases. +** +** Parameter eMode is one of SQLITE_CHECKPOINT_PASSIVE, FULL or RESTART. +*/ +SQLITE_PRIVATE int sqlite3Checkpoint(sqlite3 *db, int iDb, int eMode, int *pnLog, int *pnCkpt){ + int rc = SQLITE_OK; /* Return code */ + int i; /* Used to iterate through attached dbs */ + int bBusy = 0; /* True if SQLITE_BUSY has been encountered */ + + assert( sqlite3_mutex_held(db->mutex) ); + assert( !pnLog || *pnLog==-1 ); + assert( !pnCkpt || *pnCkpt==-1 ); + + for(i=0; inDb && rc==SQLITE_OK; i++){ + if( i==iDb || iDb==SQLITE_MAX_ATTACHED ){ + rc = sqlite3BtreeCheckpoint(db->aDb[i].pBt, eMode, pnLog, pnCkpt); + pnLog = 0; + pnCkpt = 0; + if( rc==SQLITE_BUSY ){ + bBusy = 1; + rc = SQLITE_OK; + } + } + } + + return (rc==SQLITE_OK && bBusy) ? SQLITE_BUSY : rc; +} +#endif /* SQLITE_OMIT_WAL */ + +/* +** This function returns true if main-memory should be used instead of +** a temporary file for transient pager files and statement journals. +** The value returned depends on the value of db->temp_store (runtime +** parameter) and the compile time value of SQLITE_TEMP_STORE. The +** following table describes the relationship between these two values +** and this functions return value. +** +** SQLITE_TEMP_STORE db->temp_store Location of temporary database +** ----------------- -------------- ------------------------------ +** 0 any file (return 0) +** 1 1 file (return 0) +** 1 2 memory (return 1) +** 1 0 file (return 0) +** 2 1 file (return 0) +** 2 2 memory (return 1) +** 2 0 memory (return 1) +** 3 any memory (return 1) +*/ +SQLITE_PRIVATE int sqlite3TempInMemory(const sqlite3 *db){ +#if SQLITE_TEMP_STORE==1 + return ( db->temp_store==2 ); +#endif +#if SQLITE_TEMP_STORE==2 + return ( db->temp_store!=1 ); +#endif +#if SQLITE_TEMP_STORE==3 + return 1; +#endif +#if SQLITE_TEMP_STORE<1 || SQLITE_TEMP_STORE>3 + return 0; +#endif +} + +/* +** Return UTF-8 encoded English language explanation of the most recent +** error. +*/ +SQLITE_API const char *sqlite3_errmsg(sqlite3 *db){ + const char *z; + if( !db ){ + return sqlite3ErrStr(SQLITE_NOMEM); + } + if( !sqlite3SafetyCheckSickOrOk(db) ){ + return sqlite3ErrStr(SQLITE_MISUSE_BKPT); + } + sqlite3_mutex_enter(db->mutex); + if( db->mallocFailed ){ + z = sqlite3ErrStr(SQLITE_NOMEM); + }else{ + z = (char*)sqlite3_value_text(db->pErr); + assert( !db->mallocFailed ); + if( z==0 ){ + z = sqlite3ErrStr(db->errCode); + } + } + sqlite3_mutex_leave(db->mutex); + return z; +} + +#ifndef SQLITE_OMIT_UTF16 +/* +** Return UTF-16 encoded English language explanation of the most recent +** error. +*/ +SQLITE_API const void *sqlite3_errmsg16(sqlite3 *db){ + static const u16 outOfMem[] = { + 'o', 'u', 't', ' ', 'o', 'f', ' ', 'm', 'e', 'm', 'o', 'r', 'y', 0 + }; + static const u16 misuse[] = { + 'l', 'i', 'b', 'r', 'a', 'r', 'y', ' ', + 'r', 'o', 'u', 't', 'i', 'n', 'e', ' ', + 'c', 'a', 'l', 'l', 'e', 'd', ' ', + 'o', 'u', 't', ' ', + 'o', 'f', ' ', + 's', 'e', 'q', 'u', 'e', 'n', 'c', 'e', 0 + }; + + const void *z; + if( !db ){ + return (void *)outOfMem; + } + if( !sqlite3SafetyCheckSickOrOk(db) ){ + return (void *)misuse; + } + sqlite3_mutex_enter(db->mutex); + if( db->mallocFailed ){ + z = (void *)outOfMem; + }else{ + z = sqlite3_value_text16(db->pErr); + if( z==0 ){ + sqlite3ValueSetStr(db->pErr, -1, sqlite3ErrStr(db->errCode), + SQLITE_UTF8, SQLITE_STATIC); + z = sqlite3_value_text16(db->pErr); + } + /* A malloc() may have failed within the call to sqlite3_value_text16() + ** above. If this is the case, then the db->mallocFailed flag needs to + ** be cleared before returning. Do this directly, instead of via + ** sqlite3ApiExit(), to avoid setting the database handle error message. + */ + db->mallocFailed = 0; + } + sqlite3_mutex_leave(db->mutex); + return z; +} +#endif /* SQLITE_OMIT_UTF16 */ + +/* +** Return the most recent error code generated by an SQLite routine. If NULL is +** passed to this function, we assume a malloc() failed during sqlite3_open(). +*/ +SQLITE_API int sqlite3_errcode(sqlite3 *db){ + if( db && !sqlite3SafetyCheckSickOrOk(db) ){ + return SQLITE_MISUSE_BKPT; + } + if( !db || db->mallocFailed ){ + return SQLITE_NOMEM; + } + return db->errCode & db->errMask; +} +SQLITE_API int sqlite3_extended_errcode(sqlite3 *db){ + if( db && !sqlite3SafetyCheckSickOrOk(db) ){ + return SQLITE_MISUSE_BKPT; + } + if( !db || db->mallocFailed ){ + return SQLITE_NOMEM; + } + return db->errCode; +} + +/* +** Create a new collating function for database "db". The name is zName +** and the encoding is enc. +*/ +static int createCollation( + sqlite3* db, + const char *zName, + u8 enc, + void* pCtx, + int(*xCompare)(void*,int,const void*,int,const void*), + void(*xDel)(void*) +){ + CollSeq *pColl; + int enc2; + int nName = sqlite3Strlen30(zName); + + assert( sqlite3_mutex_held(db->mutex) ); + + /* If SQLITE_UTF16 is specified as the encoding type, transform this + ** to one of SQLITE_UTF16LE or SQLITE_UTF16BE using the + ** SQLITE_UTF16NATIVE macro. SQLITE_UTF16 is not used internally. + */ + enc2 = enc; + testcase( enc2==SQLITE_UTF16 ); + testcase( enc2==SQLITE_UTF16_ALIGNED ); + if( enc2==SQLITE_UTF16 || enc2==SQLITE_UTF16_ALIGNED ){ + enc2 = SQLITE_UTF16NATIVE; + } + if( enc2SQLITE_UTF16BE ){ + return SQLITE_MISUSE_BKPT; + } + + /* Check if this call is removing or replacing an existing collation + ** sequence. If so, and there are active VMs, return busy. If there + ** are no active VMs, invalidate any pre-compiled statements. + */ + pColl = sqlite3FindCollSeq(db, (u8)enc2, zName, 0); + if( pColl && pColl->xCmp ){ + if( db->activeVdbeCnt ){ + sqlite3Error(db, SQLITE_BUSY, + "unable to delete/modify collation sequence due to active statements"); + return SQLITE_BUSY; + } + sqlite3ExpirePreparedStatements(db); + + /* If collation sequence pColl was created directly by a call to + ** sqlite3_create_collation, and not generated by synthCollSeq(), + ** then any copies made by synthCollSeq() need to be invalidated. + ** Also, collation destructor - CollSeq.xDel() - function may need + ** to be called. + */ + if( (pColl->enc & ~SQLITE_UTF16_ALIGNED)==enc2 ){ + CollSeq *aColl = sqlite3HashFind(&db->aCollSeq, zName, nName); + int j; + for(j=0; j<3; j++){ + CollSeq *p = &aColl[j]; + if( p->enc==pColl->enc ){ + if( p->xDel ){ + p->xDel(p->pUser); + } + p->xCmp = 0; + } + } + } + } + + pColl = sqlite3FindCollSeq(db, (u8)enc2, zName, 1); + if( pColl==0 ) return SQLITE_NOMEM; + pColl->xCmp = xCompare; + pColl->pUser = pCtx; + pColl->xDel = xDel; + pColl->enc = (u8)(enc2 | (enc & SQLITE_UTF16_ALIGNED)); + sqlite3Error(db, SQLITE_OK, 0); + return SQLITE_OK; +} + + +/* +** This array defines hard upper bounds on limit values. The +** initializer must be kept in sync with the SQLITE_LIMIT_* +** #defines in sqlite3.h. +*/ +static const int aHardLimit[] = { + SQLITE_MAX_LENGTH, + SQLITE_MAX_SQL_LENGTH, + SQLITE_MAX_COLUMN, + SQLITE_MAX_EXPR_DEPTH, + SQLITE_MAX_COMPOUND_SELECT, + SQLITE_MAX_VDBE_OP, + SQLITE_MAX_FUNCTION_ARG, + SQLITE_MAX_ATTACHED, + SQLITE_MAX_LIKE_PATTERN_LENGTH, + SQLITE_MAX_VARIABLE_NUMBER, + SQLITE_MAX_TRIGGER_DEPTH, +}; + +/* +** Make sure the hard limits are set to reasonable values +*/ +#if SQLITE_MAX_LENGTH<100 +# error SQLITE_MAX_LENGTH must be at least 100 +#endif +#if SQLITE_MAX_SQL_LENGTH<100 +# error SQLITE_MAX_SQL_LENGTH must be at least 100 +#endif +#if SQLITE_MAX_SQL_LENGTH>SQLITE_MAX_LENGTH +# error SQLITE_MAX_SQL_LENGTH must not be greater than SQLITE_MAX_LENGTH +#endif +#if SQLITE_MAX_COMPOUND_SELECT<2 +# error SQLITE_MAX_COMPOUND_SELECT must be at least 2 +#endif +#if SQLITE_MAX_VDBE_OP<40 +# error SQLITE_MAX_VDBE_OP must be at least 40 +#endif +#if SQLITE_MAX_FUNCTION_ARG<0 || SQLITE_MAX_FUNCTION_ARG>1000 +# error SQLITE_MAX_FUNCTION_ARG must be between 0 and 1000 +#endif +#if SQLITE_MAX_ATTACHED<0 || SQLITE_MAX_ATTACHED>62 +# error SQLITE_MAX_ATTACHED must be between 0 and 62 +#endif +#if SQLITE_MAX_LIKE_PATTERN_LENGTH<1 +# error SQLITE_MAX_LIKE_PATTERN_LENGTH must be at least 1 +#endif +#if SQLITE_MAX_COLUMN>32767 +# error SQLITE_MAX_COLUMN must not exceed 32767 +#endif +#if SQLITE_MAX_TRIGGER_DEPTH<1 +# error SQLITE_MAX_TRIGGER_DEPTH must be at least 1 +#endif + + +/* +** Change the value of a limit. Report the old value. +** If an invalid limit index is supplied, report -1. +** Make no changes but still report the old value if the +** new limit is negative. +** +** A new lower limit does not shrink existing constructs. +** It merely prevents new constructs that exceed the limit +** from forming. +*/ +SQLITE_API int sqlite3_limit(sqlite3 *db, int limitId, int newLimit){ + int oldLimit; + + + /* EVIDENCE-OF: R-30189-54097 For each limit category SQLITE_LIMIT_NAME + ** there is a hard upper bound set at compile-time by a C preprocessor + ** macro called SQLITE_MAX_NAME. (The "_LIMIT_" in the name is changed to + ** "_MAX_".) + */ + assert( aHardLimit[SQLITE_LIMIT_LENGTH]==SQLITE_MAX_LENGTH ); + assert( aHardLimit[SQLITE_LIMIT_SQL_LENGTH]==SQLITE_MAX_SQL_LENGTH ); + assert( aHardLimit[SQLITE_LIMIT_COLUMN]==SQLITE_MAX_COLUMN ); + assert( aHardLimit[SQLITE_LIMIT_EXPR_DEPTH]==SQLITE_MAX_EXPR_DEPTH ); + assert( aHardLimit[SQLITE_LIMIT_COMPOUND_SELECT]==SQLITE_MAX_COMPOUND_SELECT); + assert( aHardLimit[SQLITE_LIMIT_VDBE_OP]==SQLITE_MAX_VDBE_OP ); + assert( aHardLimit[SQLITE_LIMIT_FUNCTION_ARG]==SQLITE_MAX_FUNCTION_ARG ); + assert( aHardLimit[SQLITE_LIMIT_ATTACHED]==SQLITE_MAX_ATTACHED ); + assert( aHardLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH]== + SQLITE_MAX_LIKE_PATTERN_LENGTH ); + assert( aHardLimit[SQLITE_LIMIT_VARIABLE_NUMBER]==SQLITE_MAX_VARIABLE_NUMBER); + assert( aHardLimit[SQLITE_LIMIT_TRIGGER_DEPTH]==SQLITE_MAX_TRIGGER_DEPTH ); + assert( SQLITE_LIMIT_TRIGGER_DEPTH==(SQLITE_N_LIMIT-1) ); + + + if( limitId<0 || limitId>=SQLITE_N_LIMIT ){ + return -1; + } + oldLimit = db->aLimit[limitId]; + if( newLimit>=0 ){ /* IMP: R-52476-28732 */ + if( newLimit>aHardLimit[limitId] ){ + newLimit = aHardLimit[limitId]; /* IMP: R-51463-25634 */ + } + db->aLimit[limitId] = newLimit; + } + return oldLimit; /* IMP: R-53341-35419 */ +} + +/* +** This function is used to parse both URIs and non-URI filenames passed by the +** user to API functions sqlite3_open() or sqlite3_open_v2(), and for database +** URIs specified as part of ATTACH statements. +** +** The first argument to this function is the name of the VFS to use (or +** a NULL to signify the default VFS) if the URI does not contain a "vfs=xxx" +** query parameter. The second argument contains the URI (or non-URI filename) +** itself. When this function is called the *pFlags variable should contain +** the default flags to open the database handle with. The value stored in +** *pFlags may be updated before returning if the URI filename contains +** "cache=xxx" or "mode=xxx" query parameters. +** +** If successful, SQLITE_OK is returned. In this case *ppVfs is set to point to +** the VFS that should be used to open the database file. *pzFile is set to +** point to a buffer containing the name of the file to open. It is the +** responsibility of the caller to eventually call sqlite3_free() to release +** this buffer. +** +** If an error occurs, then an SQLite error code is returned and *pzErrMsg +** may be set to point to a buffer containing an English language error +** message. It is the responsibility of the caller to eventually release +** this buffer by calling sqlite3_free(). +*/ +SQLITE_PRIVATE int sqlite3ParseUri( + const char *zDefaultVfs, /* VFS to use if no "vfs=xxx" query option */ + const char *zUri, /* Nul-terminated URI to parse */ + unsigned int *pFlags, /* IN/OUT: SQLITE_OPEN_XXX flags */ + sqlite3_vfs **ppVfs, /* OUT: VFS to use */ + char **pzFile, /* OUT: Filename component of URI */ + char **pzErrMsg /* OUT: Error message (if rc!=SQLITE_OK) */ +){ + int rc = SQLITE_OK; + unsigned int flags = *pFlags; + const char *zVfs = zDefaultVfs; + char *zFile; + char c; + int nUri = sqlite3Strlen30(zUri); + + assert( *pzErrMsg==0 ); + + if( ((flags & SQLITE_OPEN_URI) || sqlite3GlobalConfig.bOpenUri) + && nUri>=5 && memcmp(zUri, "file:", 5)==0 + ){ + char *zOpt; + int eState; /* Parser state when parsing URI */ + int iIn; /* Input character index */ + int iOut = 0; /* Output character index */ + int nByte = nUri+2; /* Bytes of space to allocate */ + + /* Make sure the SQLITE_OPEN_URI flag is set to indicate to the VFS xOpen + ** method that there may be extra parameters following the file-name. */ + flags |= SQLITE_OPEN_URI; + + for(iIn=0; iIn=0 && octet<256 ); + if( octet==0 ){ + /* This branch is taken when "%00" appears within the URI. In this + ** case we ignore all text in the remainder of the path, name or + ** value currently being parsed. So ignore the current character + ** and skip to the next "?", "=" or "&", as appropriate. */ + while( (c = zUri[iIn])!=0 && c!='#' + && (eState!=0 || c!='?') + && (eState!=1 || (c!='=' && c!='&')) + && (eState!=2 || c!='&') + ){ + iIn++; + } + continue; + } + c = octet; + }else if( eState==1 && (c=='&' || c=='=') ){ + if( zFile[iOut-1]==0 ){ + /* An empty option name. Ignore this option altogether. */ + while( zUri[iIn] && zUri[iIn]!='#' && zUri[iIn-1]!='&' ) iIn++; + continue; + } + if( c=='&' ){ + zFile[iOut++] = '\0'; + }else{ + eState = 2; + } + c = 0; + }else if( (eState==0 && c=='?') || (eState==2 && c=='&') ){ + c = 0; + eState = 1; + } + zFile[iOut++] = c; + } + if( eState==1 ) zFile[iOut++] = '\0'; + zFile[iOut++] = '\0'; + zFile[iOut++] = '\0'; + + /* Check if there were any options specified that should be interpreted + ** here. Options that are interpreted here include "vfs" and those that + ** correspond to flags that may be passed to the sqlite3_open_v2() + ** method. */ + zOpt = &zFile[sqlite3Strlen30(zFile)+1]; + while( zOpt[0] ){ + int nOpt = sqlite3Strlen30(zOpt); + char *zVal = &zOpt[nOpt+1]; + int nVal = sqlite3Strlen30(zVal); + + if( nOpt==3 && memcmp("vfs", zOpt, 3)==0 ){ + zVfs = zVal; + }else{ + struct OpenMode { + const char *z; + int mode; + } *aMode = 0; + char *zModeType = 0; + int mask = 0; + int limit = 0; + + if( nOpt==5 && memcmp("cache", zOpt, 5)==0 ){ + static struct OpenMode aCacheMode[] = { + { "shared", SQLITE_OPEN_SHAREDCACHE }, + { "private", SQLITE_OPEN_PRIVATECACHE }, + { 0, 0 } + }; + + mask = SQLITE_OPEN_SHAREDCACHE|SQLITE_OPEN_PRIVATECACHE; + aMode = aCacheMode; + limit = mask; + zModeType = "cache"; + } + if( nOpt==4 && memcmp("mode", zOpt, 4)==0 ){ + static struct OpenMode aOpenMode[] = { + { "ro", SQLITE_OPEN_READONLY }, + { "rw", SQLITE_OPEN_READWRITE }, + { "rwc", SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE }, + { "memory", SQLITE_OPEN_MEMORY }, + { 0, 0 } + }; + + mask = SQLITE_OPEN_READONLY | SQLITE_OPEN_READWRITE + | SQLITE_OPEN_CREATE | SQLITE_OPEN_MEMORY; + aMode = aOpenMode; + limit = mask & flags; + zModeType = "access"; + } + + if( aMode ){ + int i; + int mode = 0; + for(i=0; aMode[i].z; i++){ + const char *z = aMode[i].z; + if( nVal==sqlite3Strlen30(z) && 0==memcmp(zVal, z, nVal) ){ + mode = aMode[i].mode; + break; + } + } + if( mode==0 ){ + *pzErrMsg = sqlite3_mprintf("no such %s mode: %s", zModeType, zVal); + rc = SQLITE_ERROR; + goto parse_uri_out; + } + if( (mode & ~SQLITE_OPEN_MEMORY)>limit ){ + *pzErrMsg = sqlite3_mprintf("%s mode not allowed: %s", + zModeType, zVal); + rc = SQLITE_PERM; + goto parse_uri_out; + } + flags = (flags & ~mask) | mode; + } + } + + zOpt = &zVal[nVal+1]; + } + + }else{ + zFile = sqlite3_malloc(nUri+2); + if( !zFile ) return SQLITE_NOMEM; + memcpy(zFile, zUri, nUri); + zFile[nUri] = '\0'; + zFile[nUri+1] = '\0'; + flags &= ~SQLITE_OPEN_URI; + } + + *ppVfs = sqlite3_vfs_find(zVfs); + if( *ppVfs==0 ){ + *pzErrMsg = sqlite3_mprintf("no such vfs: %s", zVfs); + rc = SQLITE_ERROR; + } + parse_uri_out: + if( rc!=SQLITE_OK ){ + sqlite3_free(zFile); + zFile = 0; + } + *pFlags = flags; + *pzFile = zFile; + return rc; +} + + +/* +** This routine does the work of opening a database on behalf of +** sqlite3_open() and sqlite3_open16(). The database filename "zFilename" +** is UTF-8 encoded. +*/ +static int openDatabase( + const char *zFilename, /* Database filename UTF-8 encoded */ + sqlite3 **ppDb, /* OUT: Returned database handle */ + unsigned int flags, /* Operational flags */ + const char *zVfs /* Name of the VFS to use */ +){ + sqlite3 *db; /* Store allocated handle here */ + int rc; /* Return code */ + int isThreadsafe; /* True for threadsafe connections */ + char *zOpen = 0; /* Filename argument to pass to BtreeOpen() */ + char *zErrMsg = 0; /* Error message from sqlite3ParseUri() */ + + *ppDb = 0; +#ifndef SQLITE_OMIT_AUTOINIT + rc = sqlite3_initialize(); + if( rc ) return rc; +#endif + + /* Only allow sensible combinations of bits in the flags argument. + ** Throw an error if any non-sense combination is used. If we + ** do not block illegal combinations here, it could trigger + ** assert() statements in deeper layers. Sensible combinations + ** are: + ** + ** 1: SQLITE_OPEN_READONLY + ** 2: SQLITE_OPEN_READWRITE + ** 6: SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE + */ + assert( SQLITE_OPEN_READONLY == 0x01 ); + assert( SQLITE_OPEN_READWRITE == 0x02 ); + assert( SQLITE_OPEN_CREATE == 0x04 ); + testcase( (1<<(flags&7))==0x02 ); /* READONLY */ + testcase( (1<<(flags&7))==0x04 ); /* READWRITE */ + testcase( (1<<(flags&7))==0x40 ); /* READWRITE | CREATE */ + if( ((1<<(flags&7)) & 0x46)==0 ) return SQLITE_MISUSE_BKPT; + + if( sqlite3GlobalConfig.bCoreMutex==0 ){ + isThreadsafe = 0; + }else if( flags & SQLITE_OPEN_NOMUTEX ){ + isThreadsafe = 0; + }else if( flags & SQLITE_OPEN_FULLMUTEX ){ + isThreadsafe = 1; + }else{ + isThreadsafe = sqlite3GlobalConfig.bFullMutex; + } + if( flags & SQLITE_OPEN_PRIVATECACHE ){ + flags &= ~SQLITE_OPEN_SHAREDCACHE; + }else if( sqlite3GlobalConfig.sharedCacheEnabled ){ + flags |= SQLITE_OPEN_SHAREDCACHE; + } + + /* Remove harmful bits from the flags parameter + ** + ** The SQLITE_OPEN_NOMUTEX and SQLITE_OPEN_FULLMUTEX flags were + ** dealt with in the previous code block. Besides these, the only + ** valid input flags for sqlite3_open_v2() are SQLITE_OPEN_READONLY, + ** SQLITE_OPEN_READWRITE, SQLITE_OPEN_CREATE, SQLITE_OPEN_SHAREDCACHE, + ** SQLITE_OPEN_PRIVATECACHE, and some reserved bits. Silently mask + ** off all other flags. + */ + flags &= ~( SQLITE_OPEN_DELETEONCLOSE | + SQLITE_OPEN_EXCLUSIVE | + SQLITE_OPEN_MAIN_DB | + SQLITE_OPEN_TEMP_DB | + SQLITE_OPEN_TRANSIENT_DB | + SQLITE_OPEN_MAIN_JOURNAL | + SQLITE_OPEN_TEMP_JOURNAL | + SQLITE_OPEN_SUBJOURNAL | + SQLITE_OPEN_MASTER_JOURNAL | + SQLITE_OPEN_NOMUTEX | + SQLITE_OPEN_FULLMUTEX | + SQLITE_OPEN_WAL + ); + + /* Allocate the sqlite data structure */ + db = sqlite3MallocZero( sizeof(sqlite3) ); + if( db==0 ) goto opendb_out; + if( isThreadsafe ){ + db->mutex = sqlite3MutexAlloc(SQLITE_MUTEX_RECURSIVE); + if( db->mutex==0 ){ + sqlite3_free(db); + db = 0; + goto opendb_out; + } + } + sqlite3_mutex_enter(db->mutex); + db->errMask = 0xff; + db->nDb = 2; + db->magic = SQLITE_MAGIC_BUSY; + db->aDb = db->aDbStatic; + + assert( sizeof(db->aLimit)==sizeof(aHardLimit) ); + memcpy(db->aLimit, aHardLimit, sizeof(db->aLimit)); + db->autoCommit = 1; + db->nextAutovac = -1; + db->nextPagesize = 0; + db->flags |= SQLITE_ShortColNames | SQLITE_AutoIndex | SQLITE_EnableTrigger +#if SQLITE_DEFAULT_FILE_FORMAT<4 + | SQLITE_LegacyFileFmt +#endif +#ifdef SQLITE_ENABLE_LOAD_EXTENSION + | SQLITE_LoadExtension +#endif +#if SQLITE_DEFAULT_RECURSIVE_TRIGGERS + | SQLITE_RecTriggers +#endif +#if defined(SQLITE_DEFAULT_FOREIGN_KEYS) && SQLITE_DEFAULT_FOREIGN_KEYS + | SQLITE_ForeignKeys +#endif + ; + sqlite3HashInit(&db->aCollSeq); +#ifndef SQLITE_OMIT_VIRTUALTABLE + sqlite3HashInit(&db->aModule); +#endif + + /* Add the default collation sequence BINARY. BINARY works for both UTF-8 + ** and UTF-16, so add a version for each to avoid any unnecessary + ** conversions. The only error that can occur here is a malloc() failure. + */ + createCollation(db, "BINARY", SQLITE_UTF8, 0, binCollFunc, 0); + createCollation(db, "BINARY", SQLITE_UTF16BE, 0, binCollFunc, 0); + createCollation(db, "BINARY", SQLITE_UTF16LE, 0, binCollFunc, 0); + createCollation(db, "RTRIM", SQLITE_UTF8, (void*)1, binCollFunc, 0); + if( db->mallocFailed ){ + goto opendb_out; + } + db->pDfltColl = sqlite3FindCollSeq(db, SQLITE_UTF8, "BINARY", 0); + assert( db->pDfltColl!=0 ); + + /* Also add a UTF-8 case-insensitive collation sequence. */ + createCollation(db, "NOCASE", SQLITE_UTF8, 0, nocaseCollatingFunc, 0); + + /* Parse the filename/URI argument. */ + db->openFlags = flags; + rc = sqlite3ParseUri(zVfs, zFilename, &flags, &db->pVfs, &zOpen, &zErrMsg); + if( rc!=SQLITE_OK ){ + if( rc==SQLITE_NOMEM ) db->mallocFailed = 1; + sqlite3Error(db, rc, zErrMsg ? "%s" : 0, zErrMsg); + sqlite3_free(zErrMsg); + goto opendb_out; + } + + /* Open the backend database driver */ + rc = sqlite3BtreeOpen(db->pVfs, zOpen, db, &db->aDb[0].pBt, 0, + flags | SQLITE_OPEN_MAIN_DB); + if( rc!=SQLITE_OK ){ + if( rc==SQLITE_IOERR_NOMEM ){ + rc = SQLITE_NOMEM; + } + sqlite3Error(db, rc, 0); + goto opendb_out; + } + db->aDb[0].pSchema = sqlite3SchemaGet(db, db->aDb[0].pBt); + db->aDb[1].pSchema = sqlite3SchemaGet(db, 0); + + + /* The default safety_level for the main database is 'full'; for the temp + ** database it is 'NONE'. This matches the pager layer defaults. + */ + db->aDb[0].zName = "main"; + db->aDb[0].safety_level = 3; + db->aDb[1].zName = "temp"; + db->aDb[1].safety_level = 1; + + db->magic = SQLITE_MAGIC_OPEN; + if( db->mallocFailed ){ + goto opendb_out; + } + + /* Register all built-in functions, but do not attempt to read the + ** database schema yet. This is delayed until the first time the database + ** is accessed. + */ + sqlite3Error(db, SQLITE_OK, 0); + sqlite3RegisterBuiltinFunctions(db); + + /* Load automatic extensions - extensions that have been registered + ** using the sqlite3_automatic_extension() API. + */ + rc = sqlite3_errcode(db); + if( rc==SQLITE_OK ){ + sqlite3AutoLoadExtensions(db); + rc = sqlite3_errcode(db); + if( rc!=SQLITE_OK ){ + goto opendb_out; + } + } + +#ifdef SQLITE_ENABLE_FTS1 + if( !db->mallocFailed ){ + extern int sqlite3Fts1Init(sqlite3*); + rc = sqlite3Fts1Init(db); + } +#endif + +#ifdef SQLITE_ENABLE_FTS2 + if( !db->mallocFailed && rc==SQLITE_OK ){ + extern int sqlite3Fts2Init(sqlite3*); + rc = sqlite3Fts2Init(db); + } +#endif + +#ifdef SQLITE_ENABLE_FTS3 + if( !db->mallocFailed && rc==SQLITE_OK ){ + rc = sqlite3Fts3Init(db); + } +#endif + +#ifdef SQLITE_ENABLE_ICU + if( !db->mallocFailed && rc==SQLITE_OK ){ + rc = sqlite3IcuInit(db); + } +#endif + +#ifdef SQLITE_ENABLE_RTREE + if( !db->mallocFailed && rc==SQLITE_OK){ + rc = sqlite3RtreeInit(db); + } +#endif + + sqlite3Error(db, rc, 0); + + /* -DSQLITE_DEFAULT_LOCKING_MODE=1 makes EXCLUSIVE the default locking + ** mode. -DSQLITE_DEFAULT_LOCKING_MODE=0 make NORMAL the default locking + ** mode. Doing nothing at all also makes NORMAL the default. + */ +#ifdef SQLITE_DEFAULT_LOCKING_MODE + db->dfltLockMode = SQLITE_DEFAULT_LOCKING_MODE; + sqlite3PagerLockingMode(sqlite3BtreePager(db->aDb[0].pBt), + SQLITE_DEFAULT_LOCKING_MODE); +#endif + + /* Enable the lookaside-malloc subsystem */ + setupLookaside(db, 0, sqlite3GlobalConfig.szLookaside, + sqlite3GlobalConfig.nLookaside); + + sqlite3_wal_autocheckpoint(db, SQLITE_DEFAULT_WAL_AUTOCHECKPOINT); + +opendb_out: + sqlite3_free(zOpen); + if( db ){ + assert( db->mutex!=0 || isThreadsafe==0 || sqlite3GlobalConfig.bFullMutex==0 ); + sqlite3_mutex_leave(db->mutex); + } + rc = sqlite3_errcode(db); + assert( db!=0 || rc==SQLITE_NOMEM ); + if( rc==SQLITE_NOMEM ){ + sqlite3_close(db); + db = 0; + }else if( rc!=SQLITE_OK ){ + db->magic = SQLITE_MAGIC_SICK; + } + *ppDb = db; + return sqlite3ApiExit(0, rc); +} + +/* +** Open a new database handle. +*/ +SQLITE_API int sqlite3_open( + const char *zFilename, + sqlite3 **ppDb +){ + return openDatabase(zFilename, ppDb, + SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, 0); +} +SQLITE_API int sqlite3_open_v2( + const char *filename, /* Database filename (UTF-8) */ + sqlite3 **ppDb, /* OUT: SQLite db handle */ + int flags, /* Flags */ + const char *zVfs /* Name of VFS module to use */ +){ + return openDatabase(filename, ppDb, (unsigned int)flags, zVfs); +} + +#ifndef SQLITE_OMIT_UTF16 +/* +** Open a new database handle. +*/ +SQLITE_API int sqlite3_open16( + const void *zFilename, + sqlite3 **ppDb +){ + char const *zFilename8; /* zFilename encoded in UTF-8 instead of UTF-16 */ + sqlite3_value *pVal; + int rc; + + assert( zFilename ); + assert( ppDb ); + *ppDb = 0; +#ifndef SQLITE_OMIT_AUTOINIT + rc = sqlite3_initialize(); + if( rc ) return rc; +#endif + pVal = sqlite3ValueNew(0); + sqlite3ValueSetStr(pVal, -1, zFilename, SQLITE_UTF16NATIVE, SQLITE_STATIC); + zFilename8 = sqlite3ValueText(pVal, SQLITE_UTF8); + if( zFilename8 ){ + rc = openDatabase(zFilename8, ppDb, + SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, 0); + assert( *ppDb || rc==SQLITE_NOMEM ); + if( rc==SQLITE_OK && !DbHasProperty(*ppDb, 0, DB_SchemaLoaded) ){ + ENC(*ppDb) = SQLITE_UTF16NATIVE; + } + }else{ + rc = SQLITE_NOMEM; + } + sqlite3ValueFree(pVal); + + return sqlite3ApiExit(0, rc); +} +#endif /* SQLITE_OMIT_UTF16 */ + +/* +** Register a new collation sequence with the database handle db. +*/ +SQLITE_API int sqlite3_create_collation( + sqlite3* db, + const char *zName, + int enc, + void* pCtx, + int(*xCompare)(void*,int,const void*,int,const void*) +){ + int rc; + sqlite3_mutex_enter(db->mutex); + assert( !db->mallocFailed ); + rc = createCollation(db, zName, (u8)enc, pCtx, xCompare, 0); + rc = sqlite3ApiExit(db, rc); + sqlite3_mutex_leave(db->mutex); + return rc; +} + +/* +** Register a new collation sequence with the database handle db. +*/ +SQLITE_API int sqlite3_create_collation_v2( + sqlite3* db, + const char *zName, + int enc, + void* pCtx, + int(*xCompare)(void*,int,const void*,int,const void*), + void(*xDel)(void*) +){ + int rc; + sqlite3_mutex_enter(db->mutex); + assert( !db->mallocFailed ); + rc = createCollation(db, zName, (u8)enc, pCtx, xCompare, xDel); + rc = sqlite3ApiExit(db, rc); + sqlite3_mutex_leave(db->mutex); + return rc; +} + +#ifndef SQLITE_OMIT_UTF16 +/* +** Register a new collation sequence with the database handle db. +*/ +SQLITE_API int sqlite3_create_collation16( + sqlite3* db, + const void *zName, + int enc, + void* pCtx, + int(*xCompare)(void*,int,const void*,int,const void*) +){ + int rc = SQLITE_OK; + char *zName8; + sqlite3_mutex_enter(db->mutex); + assert( !db->mallocFailed ); + zName8 = sqlite3Utf16to8(db, zName, -1, SQLITE_UTF16NATIVE); + if( zName8 ){ + rc = createCollation(db, zName8, (u8)enc, pCtx, xCompare, 0); + sqlite3DbFree(db, zName8); + } + rc = sqlite3ApiExit(db, rc); + sqlite3_mutex_leave(db->mutex); + return rc; +} +#endif /* SQLITE_OMIT_UTF16 */ + +/* +** Register a collation sequence factory callback with the database handle +** db. Replace any previously installed collation sequence factory. +*/ +SQLITE_API int sqlite3_collation_needed( + sqlite3 *db, + void *pCollNeededArg, + void(*xCollNeeded)(void*,sqlite3*,int eTextRep,const char*) +){ + sqlite3_mutex_enter(db->mutex); + db->xCollNeeded = xCollNeeded; + db->xCollNeeded16 = 0; + db->pCollNeededArg = pCollNeededArg; + sqlite3_mutex_leave(db->mutex); + return SQLITE_OK; +} + +#ifndef SQLITE_OMIT_UTF16 +/* +** Register a collation sequence factory callback with the database handle +** db. Replace any previously installed collation sequence factory. +*/ +SQLITE_API int sqlite3_collation_needed16( + sqlite3 *db, + void *pCollNeededArg, + void(*xCollNeeded16)(void*,sqlite3*,int eTextRep,const void*) +){ + sqlite3_mutex_enter(db->mutex); + db->xCollNeeded = 0; + db->xCollNeeded16 = xCollNeeded16; + db->pCollNeededArg = pCollNeededArg; + sqlite3_mutex_leave(db->mutex); + return SQLITE_OK; +} +#endif /* SQLITE_OMIT_UTF16 */ + +#ifndef SQLITE_OMIT_DEPRECATED +/* +** This function is now an anachronism. It used to be used to recover from a +** malloc() failure, but SQLite now does this automatically. +*/ +SQLITE_API int sqlite3_global_recover(void){ + return SQLITE_OK; +} +#endif + +/* +** Test to see whether or not the database connection is in autocommit +** mode. Return TRUE if it is and FALSE if not. Autocommit mode is on +** by default. Autocommit is disabled by a BEGIN statement and reenabled +** by the next COMMIT or ROLLBACK. +** +******* THIS IS AN EXPERIMENTAL API AND IS SUBJECT TO CHANGE ****** +*/ +SQLITE_API int sqlite3_get_autocommit(sqlite3 *db){ + return db->autoCommit; +} + +/* +** The following routines are subtitutes for constants SQLITE_CORRUPT, +** SQLITE_MISUSE, SQLITE_CANTOPEN, SQLITE_IOERR and possibly other error +** constants. They server two purposes: +** +** 1. Serve as a convenient place to set a breakpoint in a debugger +** to detect when version error conditions occurs. +** +** 2. Invoke sqlite3_log() to provide the source code location where +** a low-level error is first detected. +*/ +SQLITE_PRIVATE int sqlite3CorruptError(int lineno){ + testcase( sqlite3GlobalConfig.xLog!=0 ); + sqlite3_log(SQLITE_CORRUPT, + "database corruption at line %d of [%.10s]", + lineno, 20+sqlite3_sourceid()); + return SQLITE_CORRUPT; +} +SQLITE_PRIVATE int sqlite3MisuseError(int lineno){ + testcase( sqlite3GlobalConfig.xLog!=0 ); + sqlite3_log(SQLITE_MISUSE, + "misuse at line %d of [%.10s]", + lineno, 20+sqlite3_sourceid()); + return SQLITE_MISUSE; +} +SQLITE_PRIVATE int sqlite3CantopenError(int lineno){ + testcase( sqlite3GlobalConfig.xLog!=0 ); + sqlite3_log(SQLITE_CANTOPEN, + "cannot open file at line %d of [%.10s]", + lineno, 20+sqlite3_sourceid()); + return SQLITE_CANTOPEN; +} + + +#ifndef SQLITE_OMIT_DEPRECATED +/* +** This is a convenience routine that makes sure that all thread-specific +** data for this thread has been deallocated. +** +** SQLite no longer uses thread-specific data so this routine is now a +** no-op. It is retained for historical compatibility. +*/ +SQLITE_API void sqlite3_thread_cleanup(void){ +} +#endif + +/* +** Return meta information about a specific column of a database table. +** See comment in sqlite3.h (sqlite.h.in) for details. +*/ +#ifdef SQLITE_ENABLE_COLUMN_METADATA +SQLITE_API int sqlite3_table_column_metadata( + sqlite3 *db, /* Connection handle */ + const char *zDbName, /* Database name or NULL */ + const char *zTableName, /* Table name */ + const char *zColumnName, /* Column name */ + char const **pzDataType, /* OUTPUT: Declared data type */ + char const **pzCollSeq, /* OUTPUT: Collation sequence name */ + int *pNotNull, /* OUTPUT: True if NOT NULL constraint exists */ + int *pPrimaryKey, /* OUTPUT: True if column part of PK */ + int *pAutoinc /* OUTPUT: True if column is auto-increment */ +){ + int rc; + char *zErrMsg = 0; + Table *pTab = 0; + Column *pCol = 0; + int iCol; + + char const *zDataType = 0; + char const *zCollSeq = 0; + int notnull = 0; + int primarykey = 0; + int autoinc = 0; + + /* Ensure the database schema has been loaded */ + sqlite3_mutex_enter(db->mutex); + sqlite3BtreeEnterAll(db); + rc = sqlite3Init(db, &zErrMsg); + if( SQLITE_OK!=rc ){ + goto error_out; + } + + /* Locate the table in question */ + pTab = sqlite3FindTable(db, zTableName, zDbName); + if( !pTab || pTab->pSelect ){ + pTab = 0; + goto error_out; + } + + /* Find the column for which info is requested */ + if( sqlite3IsRowid(zColumnName) ){ + iCol = pTab->iPKey; + if( iCol>=0 ){ + pCol = &pTab->aCol[iCol]; + } + }else{ + for(iCol=0; iColnCol; iCol++){ + pCol = &pTab->aCol[iCol]; + if( 0==sqlite3StrICmp(pCol->zName, zColumnName) ){ + break; + } + } + if( iCol==pTab->nCol ){ + pTab = 0; + goto error_out; + } + } + + /* The following block stores the meta information that will be returned + ** to the caller in local variables zDataType, zCollSeq, notnull, primarykey + ** and autoinc. At this point there are two possibilities: + ** + ** 1. The specified column name was rowid", "oid" or "_rowid_" + ** and there is no explicitly declared IPK column. + ** + ** 2. The table is not a view and the column name identified an + ** explicitly declared column. Copy meta information from *pCol. + */ + if( pCol ){ + zDataType = pCol->zType; + zCollSeq = pCol->zColl; + notnull = pCol->notNull!=0; + primarykey = pCol->isPrimKey!=0; + autoinc = pTab->iPKey==iCol && (pTab->tabFlags & TF_Autoincrement)!=0; + }else{ + zDataType = "INTEGER"; + primarykey = 1; + } + if( !zCollSeq ){ + zCollSeq = "BINARY"; + } + +error_out: + sqlite3BtreeLeaveAll(db); + + /* Whether the function call succeeded or failed, set the output parameters + ** to whatever their local counterparts contain. If an error did occur, + ** this has the effect of zeroing all output parameters. + */ + if( pzDataType ) *pzDataType = zDataType; + if( pzCollSeq ) *pzCollSeq = zCollSeq; + if( pNotNull ) *pNotNull = notnull; + if( pPrimaryKey ) *pPrimaryKey = primarykey; + if( pAutoinc ) *pAutoinc = autoinc; + + if( SQLITE_OK==rc && !pTab ){ + sqlite3DbFree(db, zErrMsg); + zErrMsg = sqlite3MPrintf(db, "no such table column: %s.%s", zTableName, + zColumnName); + rc = SQLITE_ERROR; + } + sqlite3Error(db, rc, (zErrMsg?"%s":0), zErrMsg); + sqlite3DbFree(db, zErrMsg); + rc = sqlite3ApiExit(db, rc); + sqlite3_mutex_leave(db->mutex); + return rc; +} +#endif + +/* +** Sleep for a little while. Return the amount of time slept. +*/ +SQLITE_API int sqlite3_sleep(int ms){ + sqlite3_vfs *pVfs; + int rc; + pVfs = sqlite3_vfs_find(0); + if( pVfs==0 ) return 0; + + /* This function works in milliseconds, but the underlying OsSleep() + ** API uses microseconds. Hence the 1000's. + */ + rc = (sqlite3OsSleep(pVfs, 1000*ms)/1000); + return rc; +} + +/* +** Enable or disable the extended result codes. +*/ +SQLITE_API int sqlite3_extended_result_codes(sqlite3 *db, int onoff){ + sqlite3_mutex_enter(db->mutex); + db->errMask = onoff ? 0xffffffff : 0xff; + sqlite3_mutex_leave(db->mutex); + return SQLITE_OK; +} + +/* +** Invoke the xFileControl method on a particular database. +*/ +SQLITE_API int sqlite3_file_control(sqlite3 *db, const char *zDbName, int op, void *pArg){ + int rc = SQLITE_ERROR; + Btree *pBtree; + + sqlite3_mutex_enter(db->mutex); + pBtree = sqlite3DbNameToBtree(db, zDbName); + if( pBtree ){ + Pager *pPager; + sqlite3_file *fd; + sqlite3BtreeEnter(pBtree); + pPager = sqlite3BtreePager(pBtree); + assert( pPager!=0 ); + fd = sqlite3PagerFile(pPager); + assert( fd!=0 ); + if( op==SQLITE_FCNTL_FILE_POINTER ){ + *(sqlite3_file**)pArg = fd; + rc = SQLITE_OK; + }else if( fd->pMethods ){ + rc = sqlite3OsFileControl(fd, op, pArg); + }else{ + rc = SQLITE_NOTFOUND; + } + sqlite3BtreeLeave(pBtree); + } + sqlite3_mutex_leave(db->mutex); + return rc; +} + +/* +** Interface to the testing logic. +*/ +SQLITE_API int sqlite3_test_control(int op, ...){ + int rc = 0; +#ifndef SQLITE_OMIT_BUILTIN_TEST + va_list ap; + va_start(ap, op); + switch( op ){ + + /* + ** Save the current state of the PRNG. + */ + case SQLITE_TESTCTRL_PRNG_SAVE: { + sqlite3PrngSaveState(); + break; + } + + /* + ** Restore the state of the PRNG to the last state saved using + ** PRNG_SAVE. If PRNG_SAVE has never before been called, then + ** this verb acts like PRNG_RESET. + */ + case SQLITE_TESTCTRL_PRNG_RESTORE: { + sqlite3PrngRestoreState(); + break; + } + + /* + ** Reset the PRNG back to its uninitialized state. The next call + ** to sqlite3_randomness() will reseed the PRNG using a single call + ** to the xRandomness method of the default VFS. + */ + case SQLITE_TESTCTRL_PRNG_RESET: { + sqlite3PrngResetState(); + break; + } + + /* + ** sqlite3_test_control(BITVEC_TEST, size, program) + ** + ** Run a test against a Bitvec object of size. The program argument + ** is an array of integers that defines the test. Return -1 on a + ** memory allocation error, 0 on success, or non-zero for an error. + ** See the sqlite3BitvecBuiltinTest() for additional information. + */ + case SQLITE_TESTCTRL_BITVEC_TEST: { + int sz = va_arg(ap, int); + int *aProg = va_arg(ap, int*); + rc = sqlite3BitvecBuiltinTest(sz, aProg); + break; + } + + /* + ** sqlite3_test_control(BENIGN_MALLOC_HOOKS, xBegin, xEnd) + ** + ** Register hooks to call to indicate which malloc() failures + ** are benign. + */ + case SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS: { + typedef void (*void_function)(void); + void_function xBenignBegin; + void_function xBenignEnd; + xBenignBegin = va_arg(ap, void_function); + xBenignEnd = va_arg(ap, void_function); + sqlite3BenignMallocHooks(xBenignBegin, xBenignEnd); + break; + } + + /* + ** sqlite3_test_control(SQLITE_TESTCTRL_PENDING_BYTE, unsigned int X) + ** + ** Set the PENDING byte to the value in the argument, if X>0. + ** Make no changes if X==0. Return the value of the pending byte + ** as it existing before this routine was called. + ** + ** IMPORTANT: Changing the PENDING byte from 0x40000000 results in + ** an incompatible database file format. Changing the PENDING byte + ** while any database connection is open results in undefined and + ** dileterious behavior. + */ + case SQLITE_TESTCTRL_PENDING_BYTE: { + rc = PENDING_BYTE; +#ifndef SQLITE_OMIT_WSD + { + unsigned int newVal = va_arg(ap, unsigned int); + if( newVal ) sqlite3PendingByte = newVal; + } +#endif + break; + } + + /* + ** sqlite3_test_control(SQLITE_TESTCTRL_ASSERT, int X) + ** + ** This action provides a run-time test to see whether or not + ** assert() was enabled at compile-time. If X is true and assert() + ** is enabled, then the return value is true. If X is true and + ** assert() is disabled, then the return value is zero. If X is + ** false and assert() is enabled, then the assertion fires and the + ** process aborts. If X is false and assert() is disabled, then the + ** return value is zero. + */ + case SQLITE_TESTCTRL_ASSERT: { + volatile int x = 0; + assert( (x = va_arg(ap,int))!=0 ); + rc = x; + break; + } + + + /* + ** sqlite3_test_control(SQLITE_TESTCTRL_ALWAYS, int X) + ** + ** This action provides a run-time test to see how the ALWAYS and + ** NEVER macros were defined at compile-time. + ** + ** The return value is ALWAYS(X). + ** + ** The recommended test is X==2. If the return value is 2, that means + ** ALWAYS() and NEVER() are both no-op pass-through macros, which is the + ** default setting. If the return value is 1, then ALWAYS() is either + ** hard-coded to true or else it asserts if its argument is false. + ** The first behavior (hard-coded to true) is the case if + ** SQLITE_TESTCTRL_ASSERT shows that assert() is disabled and the second + ** behavior (assert if the argument to ALWAYS() is false) is the case if + ** SQLITE_TESTCTRL_ASSERT shows that assert() is enabled. + ** + ** The run-time test procedure might look something like this: + ** + ** if( sqlite3_test_control(SQLITE_TESTCTRL_ALWAYS, 2)==2 ){ + ** // ALWAYS() and NEVER() are no-op pass-through macros + ** }else if( sqlite3_test_control(SQLITE_TESTCTRL_ASSERT, 1) ){ + ** // ALWAYS(x) asserts that x is true. NEVER(x) asserts x is false. + ** }else{ + ** // ALWAYS(x) is a constant 1. NEVER(x) is a constant 0. + ** } + */ + case SQLITE_TESTCTRL_ALWAYS: { + int x = va_arg(ap,int); + rc = ALWAYS(x); + break; + } + + /* sqlite3_test_control(SQLITE_TESTCTRL_RESERVE, sqlite3 *db, int N) + ** + ** Set the nReserve size to N for the main database on the database + ** connection db. + */ + case SQLITE_TESTCTRL_RESERVE: { + sqlite3 *db = va_arg(ap, sqlite3*); + int x = va_arg(ap,int); + sqlite3_mutex_enter(db->mutex); + sqlite3BtreeSetPageSize(db->aDb[0].pBt, 0, x, 0); + sqlite3_mutex_leave(db->mutex); + break; + } + + /* sqlite3_test_control(SQLITE_TESTCTRL_OPTIMIZATIONS, sqlite3 *db, int N) + ** + ** Enable or disable various optimizations for testing purposes. The + ** argument N is a bitmask of optimizations to be disabled. For normal + ** operation N should be 0. The idea is that a test program (like the + ** SQL Logic Test or SLT test module) can run the same SQL multiple times + ** with various optimizations disabled to verify that the same answer + ** is obtained in every case. + */ + case SQLITE_TESTCTRL_OPTIMIZATIONS: { + sqlite3 *db = va_arg(ap, sqlite3*); + int x = va_arg(ap,int); + db->flags = (x & SQLITE_OptMask) | (db->flags & ~SQLITE_OptMask); + break; + } + +#ifdef SQLITE_N_KEYWORD + /* sqlite3_test_control(SQLITE_TESTCTRL_ISKEYWORD, const char *zWord) + ** + ** If zWord is a keyword recognized by the parser, then return the + ** number of keywords. Or if zWord is not a keyword, return 0. + ** + ** This test feature is only available in the amalgamation since + ** the SQLITE_N_KEYWORD macro is not defined in this file if SQLite + ** is built using separate source files. + */ + case SQLITE_TESTCTRL_ISKEYWORD: { + const char *zWord = va_arg(ap, const char*); + int n = sqlite3Strlen30(zWord); + rc = (sqlite3KeywordCode((u8*)zWord, n)!=TK_ID) ? SQLITE_N_KEYWORD : 0; + break; + } +#endif + + /* sqlite3_test_control(SQLITE_TESTCTRL_SCRATCHMALLOC, sz, &pNew, pFree); + ** + ** Pass pFree into sqlite3ScratchFree(). + ** If sz>0 then allocate a scratch buffer into pNew. + */ + case SQLITE_TESTCTRL_SCRATCHMALLOC: { + void *pFree, **ppNew; + int sz; + sz = va_arg(ap, int); + ppNew = va_arg(ap, void**); + pFree = va_arg(ap, void*); + if( sz ) *ppNew = sqlite3ScratchMalloc(sz); + sqlite3ScratchFree(pFree); + break; + } + + /* sqlite3_test_control(SQLITE_TESTCTRL_LOCALTIME_FAULT, int onoff); + ** + ** If parameter onoff is non-zero, configure the wrappers so that all + ** subsequent calls to localtime() and variants fail. If onoff is zero, + ** undo this setting. + */ + case SQLITE_TESTCTRL_LOCALTIME_FAULT: { + sqlite3GlobalConfig.bLocaltimeFault = va_arg(ap, int); + break; + } + +#if defined(SQLITE_ENABLE_TREE_EXPLAIN) + /* sqlite3_test_control(SQLITE_TESTCTRL_EXPLAIN_STMT, + ** sqlite3_stmt*,const char**); + ** + ** If compiled with SQLITE_ENABLE_TREE_EXPLAIN, each sqlite3_stmt holds + ** a string that describes the optimized parse tree. This test-control + ** returns a pointer to that string. + */ + case SQLITE_TESTCTRL_EXPLAIN_STMT: { + sqlite3_stmt *pStmt = va_arg(ap, sqlite3_stmt*); + const char **pzRet = va_arg(ap, const char**); + *pzRet = sqlite3VdbeExplanation((Vdbe*)pStmt); + break; + } +#endif + + } + va_end(ap); +#endif /* SQLITE_OMIT_BUILTIN_TEST */ + return rc; +} + +/* +** This is a utility routine, useful to VFS implementations, that checks +** to see if a database file was a URI that contained a specific query +** parameter, and if so obtains the value of the query parameter. +** +** The zFilename argument is the filename pointer passed into the xOpen() +** method of a VFS implementation. The zParam argument is the name of the +** query parameter we seek. This routine returns the value of the zParam +** parameter if it exists. If the parameter does not exist, this routine +** returns a NULL pointer. +*/ +SQLITE_API const char *sqlite3_uri_parameter(const char *zFilename, const char *zParam){ + if( zFilename==0 ) return 0; + zFilename += sqlite3Strlen30(zFilename) + 1; + while( zFilename[0] ){ + int x = strcmp(zFilename, zParam); + zFilename += sqlite3Strlen30(zFilename) + 1; + if( x==0 ) return zFilename; + zFilename += sqlite3Strlen30(zFilename) + 1; + } + return 0; +} + +/* +** Return a boolean value for a query parameter. +*/ +SQLITE_API int sqlite3_uri_boolean(const char *zFilename, const char *zParam, int bDflt){ + const char *z = sqlite3_uri_parameter(zFilename, zParam); + bDflt = bDflt!=0; + return z ? sqlite3GetBoolean(z, bDflt) : bDflt; +} + +/* +** Return a 64-bit integer value for a query parameter. +*/ +SQLITE_API sqlite3_int64 sqlite3_uri_int64( + const char *zFilename, /* Filename as passed to xOpen */ + const char *zParam, /* URI parameter sought */ + sqlite3_int64 bDflt /* return if parameter is missing */ +){ + const char *z = sqlite3_uri_parameter(zFilename, zParam); + sqlite3_int64 v; + if( z && sqlite3Atoi64(z, &v, sqlite3Strlen30(z), SQLITE_UTF8)==SQLITE_OK ){ + bDflt = v; + } + return bDflt; +} + +/* +** Return the Btree pointer identified by zDbName. Return NULL if not found. +*/ +SQLITE_PRIVATE Btree *sqlite3DbNameToBtree(sqlite3 *db, const char *zDbName){ + int i; + for(i=0; inDb; i++){ + if( db->aDb[i].pBt + && (zDbName==0 || sqlite3StrICmp(zDbName, db->aDb[i].zName)==0) + ){ + return db->aDb[i].pBt; + } + } + return 0; +} + +/* +** Return the filename of the database associated with a database +** connection. +*/ +SQLITE_API const char *sqlite3_db_filename(sqlite3 *db, const char *zDbName){ + Btree *pBt = sqlite3DbNameToBtree(db, zDbName); + return pBt ? sqlite3BtreeGetFilename(pBt) : 0; +} + +/* +** Return 1 if database is read-only or 0 if read/write. Return -1 if +** no such database exists. +*/ +SQLITE_API int sqlite3_db_readonly(sqlite3 *db, const char *zDbName){ + Btree *pBt = sqlite3DbNameToBtree(db, zDbName); + return pBt ? sqlite3PagerIsreadonly(sqlite3BtreePager(pBt)) : -1; +} + +/************** End of main.c ************************************************/ +/************** Begin file notify.c ******************************************/ +/* +** 2009 March 3 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** +** This file contains the implementation of the sqlite3_unlock_notify() +** API method and its associated functionality. +*/ + +/* Omit this entire file if SQLITE_ENABLE_UNLOCK_NOTIFY is not defined. */ +#ifdef SQLITE_ENABLE_UNLOCK_NOTIFY + +/* +** Public interfaces: +** +** sqlite3ConnectionBlocked() +** sqlite3ConnectionUnlocked() +** sqlite3ConnectionClosed() +** sqlite3_unlock_notify() +*/ + +#define assertMutexHeld() \ + assert( sqlite3_mutex_held(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER)) ) + +/* +** Head of a linked list of all sqlite3 objects created by this process +** for which either sqlite3.pBlockingConnection or sqlite3.pUnlockConnection +** is not NULL. This variable may only accessed while the STATIC_MASTER +** mutex is held. +*/ +static sqlite3 *SQLITE_WSD sqlite3BlockedList = 0; + +#ifndef NDEBUG +/* +** This function is a complex assert() that verifies the following +** properties of the blocked connections list: +** +** 1) Each entry in the list has a non-NULL value for either +** pUnlockConnection or pBlockingConnection, or both. +** +** 2) All entries in the list that share a common value for +** xUnlockNotify are grouped together. +** +** 3) If the argument db is not NULL, then none of the entries in the +** blocked connections list have pUnlockConnection or pBlockingConnection +** set to db. This is used when closing connection db. +*/ +static void checkListProperties(sqlite3 *db){ + sqlite3 *p; + for(p=sqlite3BlockedList; p; p=p->pNextBlocked){ + int seen = 0; + sqlite3 *p2; + + /* Verify property (1) */ + assert( p->pUnlockConnection || p->pBlockingConnection ); + + /* Verify property (2) */ + for(p2=sqlite3BlockedList; p2!=p; p2=p2->pNextBlocked){ + if( p2->xUnlockNotify==p->xUnlockNotify ) seen = 1; + assert( p2->xUnlockNotify==p->xUnlockNotify || !seen ); + assert( db==0 || p->pUnlockConnection!=db ); + assert( db==0 || p->pBlockingConnection!=db ); + } + } +} +#else +# define checkListProperties(x) +#endif + +/* +** Remove connection db from the blocked connections list. If connection +** db is not currently a part of the list, this function is a no-op. +*/ +static void removeFromBlockedList(sqlite3 *db){ + sqlite3 **pp; + assertMutexHeld(); + for(pp=&sqlite3BlockedList; *pp; pp = &(*pp)->pNextBlocked){ + if( *pp==db ){ + *pp = (*pp)->pNextBlocked; + break; + } + } +} + +/* +** Add connection db to the blocked connections list. It is assumed +** that it is not already a part of the list. +*/ +static void addToBlockedList(sqlite3 *db){ + sqlite3 **pp; + assertMutexHeld(); + for( + pp=&sqlite3BlockedList; + *pp && (*pp)->xUnlockNotify!=db->xUnlockNotify; + pp=&(*pp)->pNextBlocked + ); + db->pNextBlocked = *pp; + *pp = db; +} + +/* +** Obtain the STATIC_MASTER mutex. +*/ +static void enterMutex(void){ + sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER)); + checkListProperties(0); +} + +/* +** Release the STATIC_MASTER mutex. +*/ +static void leaveMutex(void){ + assertMutexHeld(); + checkListProperties(0); + sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER)); +} + +/* +** Register an unlock-notify callback. +** +** This is called after connection "db" has attempted some operation +** but has received an SQLITE_LOCKED error because another connection +** (call it pOther) in the same process was busy using the same shared +** cache. pOther is found by looking at db->pBlockingConnection. +** +** If there is no blocking connection, the callback is invoked immediately, +** before this routine returns. +** +** If pOther is already blocked on db, then report SQLITE_LOCKED, to indicate +** a deadlock. +** +** Otherwise, make arrangements to invoke xNotify when pOther drops +** its locks. +** +** Each call to this routine overrides any prior callbacks registered +** on the same "db". If xNotify==0 then any prior callbacks are immediately +** cancelled. +*/ +SQLITE_API int sqlite3_unlock_notify( + sqlite3 *db, + void (*xNotify)(void **, int), + void *pArg +){ + int rc = SQLITE_OK; + + sqlite3_mutex_enter(db->mutex); + enterMutex(); + + if( xNotify==0 ){ + removeFromBlockedList(db); + db->pBlockingConnection = 0; + db->pUnlockConnection = 0; + db->xUnlockNotify = 0; + db->pUnlockArg = 0; + }else if( 0==db->pBlockingConnection ){ + /* The blocking transaction has been concluded. Or there never was a + ** blocking transaction. In either case, invoke the notify callback + ** immediately. + */ + xNotify(&pArg, 1); + }else{ + sqlite3 *p; + + for(p=db->pBlockingConnection; p && p!=db; p=p->pUnlockConnection){} + if( p ){ + rc = SQLITE_LOCKED; /* Deadlock detected. */ + }else{ + db->pUnlockConnection = db->pBlockingConnection; + db->xUnlockNotify = xNotify; + db->pUnlockArg = pArg; + removeFromBlockedList(db); + addToBlockedList(db); + } + } + + leaveMutex(); + assert( !db->mallocFailed ); + sqlite3Error(db, rc, (rc?"database is deadlocked":0)); + sqlite3_mutex_leave(db->mutex); + return rc; +} + +/* +** This function is called while stepping or preparing a statement +** associated with connection db. The operation will return SQLITE_LOCKED +** to the user because it requires a lock that will not be available +** until connection pBlocker concludes its current transaction. +*/ +SQLITE_PRIVATE void sqlite3ConnectionBlocked(sqlite3 *db, sqlite3 *pBlocker){ + enterMutex(); + if( db->pBlockingConnection==0 && db->pUnlockConnection==0 ){ + addToBlockedList(db); + } + db->pBlockingConnection = pBlocker; + leaveMutex(); +} + +/* +** This function is called when +** the transaction opened by database db has just finished. Locks held +** by database connection db have been released. +** +** This function loops through each entry in the blocked connections +** list and does the following: +** +** 1) If the sqlite3.pBlockingConnection member of a list entry is +** set to db, then set pBlockingConnection=0. +** +** 2) If the sqlite3.pUnlockConnection member of a list entry is +** set to db, then invoke the configured unlock-notify callback and +** set pUnlockConnection=0. +** +** 3) If the two steps above mean that pBlockingConnection==0 and +** pUnlockConnection==0, remove the entry from the blocked connections +** list. +*/ +SQLITE_PRIVATE void sqlite3ConnectionUnlocked(sqlite3 *db){ + void (*xUnlockNotify)(void **, int) = 0; /* Unlock-notify cb to invoke */ + int nArg = 0; /* Number of entries in aArg[] */ + sqlite3 **pp; /* Iterator variable */ + void **aArg; /* Arguments to the unlock callback */ + void **aDyn = 0; /* Dynamically allocated space for aArg[] */ + void *aStatic[16]; /* Starter space for aArg[]. No malloc required */ + + aArg = aStatic; + enterMutex(); /* Enter STATIC_MASTER mutex */ + + /* This loop runs once for each entry in the blocked-connections list. */ + for(pp=&sqlite3BlockedList; *pp; /* no-op */ ){ + sqlite3 *p = *pp; + + /* Step 1. */ + if( p->pBlockingConnection==db ){ + p->pBlockingConnection = 0; + } + + /* Step 2. */ + if( p->pUnlockConnection==db ){ + assert( p->xUnlockNotify ); + if( p->xUnlockNotify!=xUnlockNotify && nArg!=0 ){ + xUnlockNotify(aArg, nArg); + nArg = 0; + } + + sqlite3BeginBenignMalloc(); + assert( aArg==aDyn || (aDyn==0 && aArg==aStatic) ); + assert( nArg<=(int)ArraySize(aStatic) || aArg==aDyn ); + if( (!aDyn && nArg==(int)ArraySize(aStatic)) + || (aDyn && nArg==(int)(sqlite3MallocSize(aDyn)/sizeof(void*))) + ){ + /* The aArg[] array needs to grow. */ + void **pNew = (void **)sqlite3Malloc(nArg*sizeof(void *)*2); + if( pNew ){ + memcpy(pNew, aArg, nArg*sizeof(void *)); + sqlite3_free(aDyn); + aDyn = aArg = pNew; + }else{ + /* This occurs when the array of context pointers that need to + ** be passed to the unlock-notify callback is larger than the + ** aStatic[] array allocated on the stack and the attempt to + ** allocate a larger array from the heap has failed. + ** + ** This is a difficult situation to handle. Returning an error + ** code to the caller is insufficient, as even if an error code + ** is returned the transaction on connection db will still be + ** closed and the unlock-notify callbacks on blocked connections + ** will go unissued. This might cause the application to wait + ** indefinitely for an unlock-notify callback that will never + ** arrive. + ** + ** Instead, invoke the unlock-notify callback with the context + ** array already accumulated. We can then clear the array and + ** begin accumulating any further context pointers without + ** requiring any dynamic allocation. This is sub-optimal because + ** it means that instead of one callback with a large array of + ** context pointers the application will receive two or more + ** callbacks with smaller arrays of context pointers, which will + ** reduce the applications ability to prioritize multiple + ** connections. But it is the best that can be done under the + ** circumstances. + */ + xUnlockNotify(aArg, nArg); + nArg = 0; + } + } + sqlite3EndBenignMalloc(); + + aArg[nArg++] = p->pUnlockArg; + xUnlockNotify = p->xUnlockNotify; + p->pUnlockConnection = 0; + p->xUnlockNotify = 0; + p->pUnlockArg = 0; + } + + /* Step 3. */ + if( p->pBlockingConnection==0 && p->pUnlockConnection==0 ){ + /* Remove connection p from the blocked connections list. */ + *pp = p->pNextBlocked; + p->pNextBlocked = 0; + }else{ + pp = &p->pNextBlocked; + } + } + + if( nArg!=0 ){ + xUnlockNotify(aArg, nArg); + } + sqlite3_free(aDyn); + leaveMutex(); /* Leave STATIC_MASTER mutex */ +} + +/* +** This is called when the database connection passed as an argument is +** being closed. The connection is removed from the blocked list. +*/ +SQLITE_PRIVATE void sqlite3ConnectionClosed(sqlite3 *db){ + sqlite3ConnectionUnlocked(db); + enterMutex(); + removeFromBlockedList(db); + checkListProperties(db); + leaveMutex(); +} +#endif + +/************** End of notify.c **********************************************/ +/************** Begin file fts3.c ********************************************/ +/* +** 2006 Oct 10 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +****************************************************************************** +** +** This is an SQLite module implementing full-text search. +*/ + +/* +** The code in this file is only compiled if: +** +** * The FTS3 module is being built as an extension +** (in which case SQLITE_CORE is not defined), or +** +** * The FTS3 module is being built into the core of +** SQLite (in which case SQLITE_ENABLE_FTS3 is defined). +*/ + +/* The full-text index is stored in a series of b+tree (-like) +** structures called segments which map terms to doclists. The +** structures are like b+trees in layout, but are constructed from the +** bottom up in optimal fashion and are not updatable. Since trees +** are built from the bottom up, things will be described from the +** bottom up. +** +** +**** Varints **** +** The basic unit of encoding is a variable-length integer called a +** varint. We encode variable-length integers in little-endian order +** using seven bits * per byte as follows: +** +** KEY: +** A = 0xxxxxxx 7 bits of data and one flag bit +** B = 1xxxxxxx 7 bits of data and one flag bit +** +** 7 bits - A +** 14 bits - BA +** 21 bits - BBA +** and so on. +** +** This is similar in concept to how sqlite encodes "varints" but +** the encoding is not the same. SQLite varints are big-endian +** are are limited to 9 bytes in length whereas FTS3 varints are +** little-endian and can be up to 10 bytes in length (in theory). +** +** Example encodings: +** +** 1: 0x01 +** 127: 0x7f +** 128: 0x81 0x00 +** +** +**** Document lists **** +** A doclist (document list) holds a docid-sorted list of hits for a +** given term. Doclists hold docids and associated token positions. +** A docid is the unique integer identifier for a single document. +** A position is the index of a word within the document. The first +** word of the document has a position of 0. +** +** FTS3 used to optionally store character offsets using a compile-time +** option. But that functionality is no longer supported. +** +** A doclist is stored like this: +** +** array { +** varint docid; (delta from previous doclist) +** array { (position list for column 0) +** varint position; (2 more than the delta from previous position) +** } +** array { +** varint POS_COLUMN; (marks start of position list for new column) +** varint column; (index of new column) +** array { +** varint position; (2 more than the delta from previous position) +** } +** } +** varint POS_END; (marks end of positions for this document. +** } +** +** Here, array { X } means zero or more occurrences of X, adjacent in +** memory. A "position" is an index of a token in the token stream +** generated by the tokenizer. Note that POS_END and POS_COLUMN occur +** in the same logical place as the position element, and act as sentinals +** ending a position list array. POS_END is 0. POS_COLUMN is 1. +** The positions numbers are not stored literally but rather as two more +** than the difference from the prior position, or the just the position plus +** 2 for the first position. Example: +** +** label: A B C D E F G H I J K +** value: 123 5 9 1 1 14 35 0 234 72 0 +** +** The 123 value is the first docid. For column zero in this document +** there are two matches at positions 3 and 10 (5-2 and 9-2+3). The 1 +** at D signals the start of a new column; the 1 at E indicates that the +** new column is column number 1. There are two positions at 12 and 45 +** (14-2 and 35-2+12). The 0 at H indicate the end-of-document. The +** 234 at I is the delta to next docid (357). It has one position 70 +** (72-2) and then terminates with the 0 at K. +** +** A "position-list" is the list of positions for multiple columns for +** a single docid. A "column-list" is the set of positions for a single +** column. Hence, a position-list consists of one or more column-lists, +** a document record consists of a docid followed by a position-list and +** a doclist consists of one or more document records. +** +** A bare doclist omits the position information, becoming an +** array of varint-encoded docids. +** +**** Segment leaf nodes **** +** Segment leaf nodes store terms and doclists, ordered by term. Leaf +** nodes are written using LeafWriter, and read using LeafReader (to +** iterate through a single leaf node's data) and LeavesReader (to +** iterate through a segment's entire leaf layer). Leaf nodes have +** the format: +** +** varint iHeight; (height from leaf level, always 0) +** varint nTerm; (length of first term) +** char pTerm[nTerm]; (content of first term) +** varint nDoclist; (length of term's associated doclist) +** char pDoclist[nDoclist]; (content of doclist) +** array { +** (further terms are delta-encoded) +** varint nPrefix; (length of prefix shared with previous term) +** varint nSuffix; (length of unshared suffix) +** char pTermSuffix[nSuffix];(unshared suffix of next term) +** varint nDoclist; (length of term's associated doclist) +** char pDoclist[nDoclist]; (content of doclist) +** } +** +** Here, array { X } means zero or more occurrences of X, adjacent in +** memory. +** +** Leaf nodes are broken into blocks which are stored contiguously in +** the %_segments table in sorted order. This means that when the end +** of a node is reached, the next term is in the node with the next +** greater node id. +** +** New data is spilled to a new leaf node when the current node +** exceeds LEAF_MAX bytes (default 2048). New data which itself is +** larger than STANDALONE_MIN (default 1024) is placed in a standalone +** node (a leaf node with a single term and doclist). The goal of +** these settings is to pack together groups of small doclists while +** making it efficient to directly access large doclists. The +** assumption is that large doclists represent terms which are more +** likely to be query targets. +** +** TODO(shess) It may be useful for blocking decisions to be more +** dynamic. For instance, it may make more sense to have a 2.5k leaf +** node rather than splitting into 2k and .5k nodes. My intuition is +** that this might extend through 2x or 4x the pagesize. +** +** +**** Segment interior nodes **** +** Segment interior nodes store blockids for subtree nodes and terms +** to describe what data is stored by the each subtree. Interior +** nodes are written using InteriorWriter, and read using +** InteriorReader. InteriorWriters are created as needed when +** SegmentWriter creates new leaf nodes, or when an interior node +** itself grows too big and must be split. The format of interior +** nodes: +** +** varint iHeight; (height from leaf level, always >0) +** varint iBlockid; (block id of node's leftmost subtree) +** optional { +** varint nTerm; (length of first term) +** char pTerm[nTerm]; (content of first term) +** array { +** (further terms are delta-encoded) +** varint nPrefix; (length of shared prefix with previous term) +** varint nSuffix; (length of unshared suffix) +** char pTermSuffix[nSuffix]; (unshared suffix of next term) +** } +** } +** +** Here, optional { X } means an optional element, while array { X } +** means zero or more occurrences of X, adjacent in memory. +** +** An interior node encodes n terms separating n+1 subtrees. The +** subtree blocks are contiguous, so only the first subtree's blockid +** is encoded. The subtree at iBlockid will contain all terms less +** than the first term encoded (or all terms if no term is encoded). +** Otherwise, for terms greater than or equal to pTerm[i] but less +** than pTerm[i+1], the subtree for that term will be rooted at +** iBlockid+i. Interior nodes only store enough term data to +** distinguish adjacent children (if the rightmost term of the left +** child is "something", and the leftmost term of the right child is +** "wicked", only "w" is stored). +** +** New data is spilled to a new interior node at the same height when +** the current node exceeds INTERIOR_MAX bytes (default 2048). +** INTERIOR_MIN_TERMS (default 7) keeps large terms from monopolizing +** interior nodes and making the tree too skinny. The interior nodes +** at a given height are naturally tracked by interior nodes at +** height+1, and so on. +** +** +**** Segment directory **** +** The segment directory in table %_segdir stores meta-information for +** merging and deleting segments, and also the root node of the +** segment's tree. +** +** The root node is the top node of the segment's tree after encoding +** the entire segment, restricted to ROOT_MAX bytes (default 1024). +** This could be either a leaf node or an interior node. If the top +** node requires more than ROOT_MAX bytes, it is flushed to %_segments +** and a new root interior node is generated (which should always fit +** within ROOT_MAX because it only needs space for 2 varints, the +** height and the blockid of the previous root). +** +** The meta-information in the segment directory is: +** level - segment level (see below) +** idx - index within level +** - (level,idx uniquely identify a segment) +** start_block - first leaf node +** leaves_end_block - last leaf node +** end_block - last block (including interior nodes) +** root - contents of root node +** +** If the root node is a leaf node, then start_block, +** leaves_end_block, and end_block are all 0. +** +** +**** Segment merging **** +** To amortize update costs, segments are grouped into levels and +** merged in batches. Each increase in level represents exponentially +** more documents. +** +** New documents (actually, document updates) are tokenized and +** written individually (using LeafWriter) to a level 0 segment, with +** incrementing idx. When idx reaches MERGE_COUNT (default 16), all +** level 0 segments are merged into a single level 1 segment. Level 1 +** is populated like level 0, and eventually MERGE_COUNT level 1 +** segments are merged to a single level 2 segment (representing +** MERGE_COUNT^2 updates), and so on. +** +** A segment merge traverses all segments at a given level in +** parallel, performing a straightforward sorted merge. Since segment +** leaf nodes are written in to the %_segments table in order, this +** merge traverses the underlying sqlite disk structures efficiently. +** After the merge, all segment blocks from the merged level are +** deleted. +** +** MERGE_COUNT controls how often we merge segments. 16 seems to be +** somewhat of a sweet spot for insertion performance. 32 and 64 show +** very similar performance numbers to 16 on insertion, though they're +** a tiny bit slower (perhaps due to more overhead in merge-time +** sorting). 8 is about 20% slower than 16, 4 about 50% slower than +** 16, 2 about 66% slower than 16. +** +** At query time, high MERGE_COUNT increases the number of segments +** which need to be scanned and merged. For instance, with 100k docs +** inserted: +** +** MERGE_COUNT segments +** 16 25 +** 8 12 +** 4 10 +** 2 6 +** +** This appears to have only a moderate impact on queries for very +** frequent terms (which are somewhat dominated by segment merge +** costs), and infrequent and non-existent terms still seem to be fast +** even with many segments. +** +** TODO(shess) That said, it would be nice to have a better query-side +** argument for MERGE_COUNT of 16. Also, it is possible/likely that +** optimizations to things like doclist merging will swing the sweet +** spot around. +** +** +** +**** Handling of deletions and updates **** +** Since we're using a segmented structure, with no docid-oriented +** index into the term index, we clearly cannot simply update the term +** index when a document is deleted or updated. For deletions, we +** write an empty doclist (varint(docid) varint(POS_END)), for updates +** we simply write the new doclist. Segment merges overwrite older +** data for a particular docid with newer data, so deletes or updates +** will eventually overtake the earlier data and knock it out. The +** query logic likewise merges doclists so that newer data knocks out +** older data. +*/ + +/************** Include fts3Int.h in the middle of fts3.c ********************/ +/************** Begin file fts3Int.h *****************************************/ +/* +** 2009 Nov 12 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +****************************************************************************** +** +*/ +#ifndef _FTSINT_H +#define _FTSINT_H + +#if !defined(NDEBUG) && !defined(SQLITE_DEBUG) +# define NDEBUG 1 +#endif + +/* +** FTS4 is really an extension for FTS3. It is enabled using the +** SQLITE_ENABLE_FTS3 macro. But to avoid confusion we also all +** the SQLITE_ENABLE_FTS4 macro to serve as an alisse for SQLITE_ENABLE_FTS3. +*/ +#if defined(SQLITE_ENABLE_FTS4) && !defined(SQLITE_ENABLE_FTS3) +# define SQLITE_ENABLE_FTS3 +#endif + +#if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) + +/* If not building as part of the core, include sqlite3ext.h. */ +#ifndef SQLITE_CORE +SQLITE_API extern const sqlite3_api_routines *sqlite3_api; +#endif + +/************** Include fts3_tokenizer.h in the middle of fts3Int.h **********/ +/************** Begin file fts3_tokenizer.h **********************************/ +/* +** 2006 July 10 +** +** The author disclaims copyright to this source code. +** +************************************************************************* +** Defines the interface to tokenizers used by fulltext-search. There +** are three basic components: +** +** sqlite3_tokenizer_module is a singleton defining the tokenizer +** interface functions. This is essentially the class structure for +** tokenizers. +** +** sqlite3_tokenizer is used to define a particular tokenizer, perhaps +** including customization information defined at creation time. +** +** sqlite3_tokenizer_cursor is generated by a tokenizer to generate +** tokens from a particular input. +*/ +#ifndef _FTS3_TOKENIZER_H_ +#define _FTS3_TOKENIZER_H_ + +/* TODO(shess) Only used for SQLITE_OK and SQLITE_DONE at this time. +** If tokenizers are to be allowed to call sqlite3_*() functions, then +** we will need a way to register the API consistently. +*/ + +/* +** Structures used by the tokenizer interface. When a new tokenizer +** implementation is registered, the caller provides a pointer to +** an sqlite3_tokenizer_module containing pointers to the callback +** functions that make up an implementation. +** +** When an fts3 table is created, it passes any arguments passed to +** the tokenizer clause of the CREATE VIRTUAL TABLE statement to the +** sqlite3_tokenizer_module.xCreate() function of the requested tokenizer +** implementation. The xCreate() function in turn returns an +** sqlite3_tokenizer structure representing the specific tokenizer to +** be used for the fts3 table (customized by the tokenizer clause arguments). +** +** To tokenize an input buffer, the sqlite3_tokenizer_module.xOpen() +** method is called. It returns an sqlite3_tokenizer_cursor object +** that may be used to tokenize a specific input buffer based on +** the tokenization rules supplied by a specific sqlite3_tokenizer +** object. +*/ +typedef struct sqlite3_tokenizer_module sqlite3_tokenizer_module; +typedef struct sqlite3_tokenizer sqlite3_tokenizer; +typedef struct sqlite3_tokenizer_cursor sqlite3_tokenizer_cursor; + +struct sqlite3_tokenizer_module { + + /* + ** Structure version. Should always be set to 0 or 1. + */ + int iVersion; + + /* + ** Create a new tokenizer. The values in the argv[] array are the + ** arguments passed to the "tokenizer" clause of the CREATE VIRTUAL + ** TABLE statement that created the fts3 table. For example, if + ** the following SQL is executed: + ** + ** CREATE .. USING fts3( ... , tokenizer arg1 arg2) + ** + ** then argc is set to 2, and the argv[] array contains pointers + ** to the strings "arg1" and "arg2". + ** + ** This method should return either SQLITE_OK (0), or an SQLite error + ** code. If SQLITE_OK is returned, then *ppTokenizer should be set + ** to point at the newly created tokenizer structure. The generic + ** sqlite3_tokenizer.pModule variable should not be initialised by + ** this callback. The caller will do so. + */ + int (*xCreate)( + int argc, /* Size of argv array */ + const char *const*argv, /* Tokenizer argument strings */ + sqlite3_tokenizer **ppTokenizer /* OUT: Created tokenizer */ + ); + + /* + ** Destroy an existing tokenizer. The fts3 module calls this method + ** exactly once for each successful call to xCreate(). + */ + int (*xDestroy)(sqlite3_tokenizer *pTokenizer); + + /* + ** Create a tokenizer cursor to tokenize an input buffer. The caller + ** is responsible for ensuring that the input buffer remains valid + ** until the cursor is closed (using the xClose() method). + */ + int (*xOpen)( + sqlite3_tokenizer *pTokenizer, /* Tokenizer object */ + const char *pInput, int nBytes, /* Input buffer */ + sqlite3_tokenizer_cursor **ppCursor /* OUT: Created tokenizer cursor */ + ); + + /* + ** Destroy an existing tokenizer cursor. The fts3 module calls this + ** method exactly once for each successful call to xOpen(). + */ + int (*xClose)(sqlite3_tokenizer_cursor *pCursor); + + /* + ** Retrieve the next token from the tokenizer cursor pCursor. This + ** method should either return SQLITE_OK and set the values of the + ** "OUT" variables identified below, or SQLITE_DONE to indicate that + ** the end of the buffer has been reached, or an SQLite error code. + ** + ** *ppToken should be set to point at a buffer containing the + ** normalized version of the token (i.e. after any case-folding and/or + ** stemming has been performed). *pnBytes should be set to the length + ** of this buffer in bytes. The input text that generated the token is + ** identified by the byte offsets returned in *piStartOffset and + ** *piEndOffset. *piStartOffset should be set to the index of the first + ** byte of the token in the input buffer. *piEndOffset should be set + ** to the index of the first byte just past the end of the token in + ** the input buffer. + ** + ** The buffer *ppToken is set to point at is managed by the tokenizer + ** implementation. It is only required to be valid until the next call + ** to xNext() or xClose(). + */ + /* TODO(shess) current implementation requires pInput to be + ** nul-terminated. This should either be fixed, or pInput/nBytes + ** should be converted to zInput. + */ + int (*xNext)( + sqlite3_tokenizer_cursor *pCursor, /* Tokenizer cursor */ + const char **ppToken, int *pnBytes, /* OUT: Normalized text for token */ + int *piStartOffset, /* OUT: Byte offset of token in input buffer */ + int *piEndOffset, /* OUT: Byte offset of end of token in input buffer */ + int *piPosition /* OUT: Number of tokens returned before this one */ + ); + + /*********************************************************************** + ** Methods below this point are only available if iVersion>=1. + */ + + /* + ** Configure the language id of a tokenizer cursor. + */ + int (*xLanguageid)(sqlite3_tokenizer_cursor *pCsr, int iLangid); +}; + +struct sqlite3_tokenizer { + const sqlite3_tokenizer_module *pModule; /* The module for this tokenizer */ + /* Tokenizer implementations will typically add additional fields */ +}; + +struct sqlite3_tokenizer_cursor { + sqlite3_tokenizer *pTokenizer; /* Tokenizer for this cursor. */ + /* Tokenizer implementations will typically add additional fields */ +}; + +int fts3_global_term_cnt(int iTerm, int iCol); +int fts3_term_cnt(int iTerm, int iCol); + + +#endif /* _FTS3_TOKENIZER_H_ */ + +/************** End of fts3_tokenizer.h **************************************/ +/************** Continuing where we left off in fts3Int.h ********************/ +/************** Include fts3_hash.h in the middle of fts3Int.h ***************/ +/************** Begin file fts3_hash.h ***************************************/ +/* +** 2001 September 22 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** This is the header file for the generic hash-table implemenation +** used in SQLite. We've modified it slightly to serve as a standalone +** hash table implementation for the full-text indexing module. +** +*/ +#ifndef _FTS3_HASH_H_ +#define _FTS3_HASH_H_ + +/* Forward declarations of structures. */ +typedef struct Fts3Hash Fts3Hash; +typedef struct Fts3HashElem Fts3HashElem; + +/* A complete hash table is an instance of the following structure. +** The internals of this structure are intended to be opaque -- client +** code should not attempt to access or modify the fields of this structure +** directly. Change this structure only by using the routines below. +** However, many of the "procedures" and "functions" for modifying and +** accessing this structure are really macros, so we can't really make +** this structure opaque. +*/ +struct Fts3Hash { + char keyClass; /* HASH_INT, _POINTER, _STRING, _BINARY */ + char copyKey; /* True if copy of key made on insert */ + int count; /* Number of entries in this table */ + Fts3HashElem *first; /* The first element of the array */ + int htsize; /* Number of buckets in the hash table */ + struct _fts3ht { /* the hash table */ + int count; /* Number of entries with this hash */ + Fts3HashElem *chain; /* Pointer to first entry with this hash */ + } *ht; +}; + +/* Each element in the hash table is an instance of the following +** structure. All elements are stored on a single doubly-linked list. +** +** Again, this structure is intended to be opaque, but it can't really +** be opaque because it is used by macros. +*/ +struct Fts3HashElem { + Fts3HashElem *next, *prev; /* Next and previous elements in the table */ + void *data; /* Data associated with this element */ + void *pKey; int nKey; /* Key associated with this element */ +}; + +/* +** There are 2 different modes of operation for a hash table: +** +** FTS3_HASH_STRING pKey points to a string that is nKey bytes long +** (including the null-terminator, if any). Case +** is respected in comparisons. +** +** FTS3_HASH_BINARY pKey points to binary data nKey bytes long. +** memcmp() is used to compare keys. +** +** A copy of the key is made if the copyKey parameter to fts3HashInit is 1. +*/ +#define FTS3_HASH_STRING 1 +#define FTS3_HASH_BINARY 2 + +/* +** Access routines. To delete, insert a NULL pointer. +*/ +SQLITE_PRIVATE void sqlite3Fts3HashInit(Fts3Hash *pNew, char keyClass, char copyKey); +SQLITE_PRIVATE void *sqlite3Fts3HashInsert(Fts3Hash*, const void *pKey, int nKey, void *pData); +SQLITE_PRIVATE void *sqlite3Fts3HashFind(const Fts3Hash*, const void *pKey, int nKey); +SQLITE_PRIVATE void sqlite3Fts3HashClear(Fts3Hash*); +SQLITE_PRIVATE Fts3HashElem *sqlite3Fts3HashFindElem(const Fts3Hash *, const void *, int); + +/* +** Shorthand for the functions above +*/ +#define fts3HashInit sqlite3Fts3HashInit +#define fts3HashInsert sqlite3Fts3HashInsert +#define fts3HashFind sqlite3Fts3HashFind +#define fts3HashClear sqlite3Fts3HashClear +#define fts3HashFindElem sqlite3Fts3HashFindElem + +/* +** Macros for looping over all elements of a hash table. The idiom is +** like this: +** +** Fts3Hash h; +** Fts3HashElem *p; +** ... +** for(p=fts3HashFirst(&h); p; p=fts3HashNext(p)){ +** SomeStructure *pData = fts3HashData(p); +** // do something with pData +** } +*/ +#define fts3HashFirst(H) ((H)->first) +#define fts3HashNext(E) ((E)->next) +#define fts3HashData(E) ((E)->data) +#define fts3HashKey(E) ((E)->pKey) +#define fts3HashKeysize(E) ((E)->nKey) /* -** The following code executes when the parse fails +** Number of entries in a hash table */ -#ifndef YYNOERRORRECOVERY -static void yy_parse_failed( - yyParser *yypParser /* The parser */ -){ - sqlite3ParserARG_FETCH; -#ifndef NDEBUG - if( yyTraceFILE ){ - fprintf(yyTraceFILE,"%sFail!\n",yyTracePrompt); - } -#endif - while( yypParser->yyidx>=0 ) yy_pop_parser_stack(yypParser); - /* Here code is inserted which will be executed whenever the - ** parser fails */ - sqlite3ParserARG_STORE; /* Suppress warning about unused %extra_argument variable */ -} -#endif /* YYNOERRORRECOVERY */ +#define fts3HashCount(H) ((H)->count) + +#endif /* _FTS3_HASH_H_ */ + +/************** End of fts3_hash.h *******************************************/ +/************** Continuing where we left off in fts3Int.h ********************/ /* -** The following code executes when a syntax error first occurs. +** This constant controls how often segments are merged. Once there are +** FTS3_MERGE_COUNT segments of level N, they are merged into a single +** segment of level N+1. */ -static void yy_syntax_error( - yyParser *yypParser, /* The parser */ - int yymajor, /* The major type of the error token */ - YYMINORTYPE yyminor /* The minor type of the error token */ -){ - sqlite3ParserARG_FETCH; -#define TOKEN (yyminor.yy0) +#define FTS3_MERGE_COUNT 16 - UNUSED_PARAMETER(yymajor); /* Silence some compiler warnings */ - assert( TOKEN.z[0] ); /* The tokenizer always gives us a token */ - sqlite3ErrorMsg(pParse, "near \"%T\": syntax error", &TOKEN); - pParse->parseError = 1; - sqlite3ParserARG_STORE; /* Suppress warning about unused %extra_argument variable */ -} +/* +** This is the maximum amount of data (in bytes) to store in the +** Fts3Table.pendingTerms hash table. Normally, the hash table is +** populated as documents are inserted/updated/deleted in a transaction +** and used to create a new segment when the transaction is committed. +** However if this limit is reached midway through a transaction, a new +** segment is created and the hash table cleared immediately. +*/ +#define FTS3_MAX_PENDING_DATA (1*1024*1024) /* -** The following is executed when the parser accepts +** Macro to return the number of elements in an array. SQLite has a +** similar macro called ArraySize(). Use a different name to avoid +** a collision when building an amalgamation with built-in FTS3. */ -static void yy_accept( - yyParser *yypParser /* The parser */ -){ - sqlite3ParserARG_FETCH; -#ifndef NDEBUG - if( yyTraceFILE ){ - fprintf(yyTraceFILE,"%sAccept!\n",yyTracePrompt); - } +#define SizeofArray(X) ((int)(sizeof(X)/sizeof(X[0]))) + + +#ifndef MIN +# define MIN(x,y) ((x)<(y)?(x):(y)) +#endif +#ifndef MAX +# define MAX(x,y) ((x)>(y)?(x):(y)) #endif - while( yypParser->yyidx>=0 ) yy_pop_parser_stack(yypParser); - /* Here code is inserted which will be executed whenever the - ** parser accepts */ - sqlite3ParserARG_STORE; /* Suppress warning about unused %extra_argument variable */ -} -/* The main parser program. -** The first argument is a pointer to a structure obtained from -** "sqlite3ParserAlloc" which describes the current state of the parser. -** The second argument is the major token number. The third is -** the minor token. The fourth optional argument is whatever the -** user wants (and specified in the grammar) and is available for -** use by the action routines. +/* +** Maximum length of a varint encoded integer. The varint format is different +** from that used by SQLite, so the maximum length is 10, not 9. +*/ +#define FTS3_VARINT_MAX 10 + +/* +** FTS4 virtual tables may maintain multiple indexes - one index of all terms +** in the document set and zero or more prefix indexes. All indexes are stored +** as one or more b+-trees in the %_segments and %_segdir tables. ** -** Inputs: -**
      -**
    • A pointer to the parser (an opaque structure.) -**
    • The major token number. -**
    • The minor token number. -**
    • An option argument of a grammar-specified type. -**
    +** It is possible to determine which index a b+-tree belongs to based on the +** value stored in the "%_segdir.level" column. Given this value L, the index +** that the b+-tree belongs to is (L<<10). In other words, all b+-trees with +** level values between 0 and 1023 (inclusive) belong to index 0, all levels +** between 1024 and 2047 to index 1, and so on. ** -** Outputs: -** None. +** It is considered impossible for an index to use more than 1024 levels. In +** theory though this may happen, but only after at least +** (FTS3_MERGE_COUNT^1024) separate flushes of the pending-terms tables. */ -SQLITE_PRIVATE void sqlite3Parser( - void *yyp, /* The parser */ - int yymajor, /* The major token code number */ - sqlite3ParserTOKENTYPE yyminor /* The value for the token */ - sqlite3ParserARG_PDECL /* Optional %extra_argument parameter */ -){ - YYMINORTYPE yyminorunion; - int yyact; /* The parser action. */ - int yyendofinput; /* True if we are at the end of input */ -#ifdef YYERRORSYMBOL - int yyerrorhit = 0; /* True if yymajor has invoked an error */ -#endif - yyParser *yypParser; /* The parser */ +#define FTS3_SEGDIR_MAXLEVEL 1024 +#define FTS3_SEGDIR_MAXLEVEL_STR "1024" - /* (re)initialize the parser, if necessary */ - yypParser = (yyParser*)yyp; - if( yypParser->yyidx<0 ){ -#if YYSTACKDEPTH<=0 - if( yypParser->yystksz <=0 ){ - /*memset(&yyminorunion, 0, sizeof(yyminorunion));*/ - yyminorunion = yyzerominor; - yyStackOverflow(yypParser, &yyminorunion); - return; - } +/* +** The testcase() macro is only used by the amalgamation. If undefined, +** make it a no-op. +*/ +#ifndef testcase +# define testcase(X) #endif - yypParser->yyidx = 0; - yypParser->yyerrcnt = -1; - yypParser->yystack[0].stateno = 0; - yypParser->yystack[0].major = 0; - } - yyminorunion.yy0 = yyminor; - yyendofinput = (yymajor==0); - sqlite3ParserARG_STORE; -#ifndef NDEBUG - if( yyTraceFILE ){ - fprintf(yyTraceFILE,"%sInput %s\n",yyTracePrompt,yyTokenName[yymajor]); - } +/* +** Terminator values for position-lists and column-lists. +*/ +#define POS_COLUMN (1) /* Column-list terminator */ +#define POS_END (0) /* Position-list terminator */ + +/* +** This section provides definitions to allow the +** FTS3 extension to be compiled outside of the +** amalgamation. +*/ +#ifndef SQLITE_AMALGAMATION +/* +** Macros indicating that conditional expressions are always true or +** false. +*/ +#ifdef SQLITE_COVERAGE_TEST +# define ALWAYS(x) (1) +# define NEVER(X) (0) +#else +# define ALWAYS(x) (x) +# define NEVER(x) (x) #endif - do{ - yyact = yy_find_shift_action(yypParser,(YYCODETYPE)yymajor); - if( yyactyyerrcnt--; - yymajor = YYNOCODE; - }else if( yyact < YYNSTATE + YYNRULE ){ - yy_reduce(yypParser,yyact-YYNSTATE); - }else{ - assert( yyact == YY_ERROR_ACTION ); -#ifdef YYERRORSYMBOL - int yymx; +/* +** Internal types used by SQLite. +*/ +typedef unsigned char u8; /* 1-byte (or larger) unsigned integer */ +typedef short int i16; /* 2-byte (or larger) signed integer */ +typedef unsigned int u32; /* 4-byte unsigned integer */ +typedef sqlite3_uint64 u64; /* 8-byte unsigned integer */ +typedef sqlite3_int64 i64; /* 8-byte signed integer */ + +/* +** Macro used to suppress compiler warnings for unused parameters. +*/ +#define UNUSED_PARAMETER(x) (void)(x) + +/* +** Activate assert() only if SQLITE_TEST is enabled. +*/ +#if !defined(NDEBUG) && !defined(SQLITE_DEBUG) +# define NDEBUG 1 #endif -#ifndef NDEBUG - if( yyTraceFILE ){ - fprintf(yyTraceFILE,"%sSyntax Error!\n",yyTracePrompt); - } + +/* +** The TESTONLY macro is used to enclose variable declarations or +** other bits of code that are needed to support the arguments +** within testcase() and assert() macros. +*/ +#if defined(SQLITE_DEBUG) || defined(SQLITE_COVERAGE_TEST) +# define TESTONLY(X) X +#else +# define TESTONLY(X) #endif -#ifdef YYERRORSYMBOL - /* A syntax error has occurred. - ** The response to an error depends upon whether or not the - ** grammar defines an error token "ERROR". - ** - ** This is what we do if the grammar does define ERROR: - ** - ** * Call the %syntax_error function. - ** - ** * Begin popping the stack until we enter a state where - ** it is legal to shift the error symbol, then shift - ** the error symbol. - ** - ** * Set the error count to three. - ** - ** * Begin accepting and shifting new tokens. No new error - ** processing will occur until three tokens have been - ** shifted successfully. - ** - */ - if( yypParser->yyerrcnt<0 ){ - yy_syntax_error(yypParser,yymajor,yyminorunion); - } - yymx = yypParser->yystack[yypParser->yyidx].major; - if( yymx==YYERRORSYMBOL || yyerrorhit ){ -#ifndef NDEBUG - if( yyTraceFILE ){ - fprintf(yyTraceFILE,"%sDiscard input token %s\n", - yyTracePrompt,yyTokenName[yymajor]); - } + +#endif /* SQLITE_AMALGAMATION */ + +#ifdef SQLITE_DEBUG +SQLITE_PRIVATE int sqlite3Fts3Corrupt(void); +# define FTS_CORRUPT_VTAB sqlite3Fts3Corrupt() +#else +# define FTS_CORRUPT_VTAB SQLITE_CORRUPT_VTAB #endif - yy_destructor(yypParser, (YYCODETYPE)yymajor,&yyminorunion); - yymajor = YYNOCODE; - }else{ - while( - yypParser->yyidx >= 0 && - yymx != YYERRORSYMBOL && - (yyact = yy_find_reduce_action( - yypParser->yystack[yypParser->yyidx].stateno, - YYERRORSYMBOL)) >= YYNSTATE - ){ - yy_pop_parser_stack(yypParser); - } - if( yypParser->yyidx < 0 || yymajor==0 ){ - yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion); - yy_parse_failed(yypParser); - yymajor = YYNOCODE; - }else if( yymx!=YYERRORSYMBOL ){ - YYMINORTYPE u2; - u2.YYERRSYMDT = 0; - yy_shift(yypParser,yyact,YYERRORSYMBOL,&u2); - } - } - yypParser->yyerrcnt = 3; - yyerrorhit = 1; -#elif defined(YYNOERRORRECOVERY) - /* If the YYNOERRORRECOVERY macro is defined, then do not attempt to - ** do any kind of error recovery. Instead, simply invoke the syntax - ** error routine and continue going as if nothing had happened. - ** - ** Applications can set this macro (for example inside %include) if - ** they intend to abandon the parse upon the first syntax error seen. - */ - yy_syntax_error(yypParser,yymajor,yyminorunion); - yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion); - yymajor = YYNOCODE; - -#else /* YYERRORSYMBOL is not defined */ - /* This is what we do if the grammar does not define ERROR: - ** - ** * Report an error message, and throw away the input token. - ** - ** * If the input token is $, then fail the parse. - ** - ** As before, subsequent error messages are suppressed until - ** three input tokens have been successfully shifted. - */ - if( yypParser->yyerrcnt<=0 ){ - yy_syntax_error(yypParser,yymajor,yyminorunion); - } - yypParser->yyerrcnt = 3; - yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion); - if( yyendofinput ){ - yy_parse_failed(yypParser); - } - yymajor = YYNOCODE; + +typedef struct Fts3Table Fts3Table; +typedef struct Fts3Cursor Fts3Cursor; +typedef struct Fts3Expr Fts3Expr; +typedef struct Fts3Phrase Fts3Phrase; +typedef struct Fts3PhraseToken Fts3PhraseToken; + +typedef struct Fts3Doclist Fts3Doclist; +typedef struct Fts3SegFilter Fts3SegFilter; +typedef struct Fts3DeferredToken Fts3DeferredToken; +typedef struct Fts3SegReader Fts3SegReader; +typedef struct Fts3MultiSegReader Fts3MultiSegReader; + +/* +** A connection to a fulltext index is an instance of the following +** structure. The xCreate and xConnect methods create an instance +** of this structure and xDestroy and xDisconnect free that instance. +** All other methods receive a pointer to the structure as one of their +** arguments. +*/ +struct Fts3Table { + sqlite3_vtab base; /* Base class used by SQLite core */ + sqlite3 *db; /* The database connection */ + const char *zDb; /* logical database name */ + const char *zName; /* virtual table name */ + int nColumn; /* number of named columns in virtual table */ + char **azColumn; /* column names. malloced */ + sqlite3_tokenizer *pTokenizer; /* tokenizer for inserts and queries */ + char *zContentTbl; /* content=xxx option, or NULL */ + char *zLanguageid; /* languageid=xxx option, or NULL */ + u8 bAutoincrmerge; /* True if automerge=1 */ + u32 nLeafAdd; /* Number of leaf blocks added this trans */ + + /* Precompiled statements used by the implementation. Each of these + ** statements is run and reset within a single virtual table API call. + */ + sqlite3_stmt *aStmt[37]; + + char *zReadExprlist; + char *zWriteExprlist; + + int nNodeSize; /* Soft limit for node size */ + u8 bFts4; /* True for FTS4, false for FTS3 */ + u8 bHasStat; /* True if %_stat table exists */ + u8 bHasDocsize; /* True if %_docsize table exists */ + u8 bDescIdx; /* True if doclists are in reverse order */ + u8 bIgnoreSavepoint; /* True to ignore xSavepoint invocations */ + int nPgsz; /* Page size for host database */ + char *zSegmentsTbl; /* Name of %_segments table */ + sqlite3_blob *pSegments; /* Blob handle open on %_segments table */ + + /* + ** The following array of hash tables is used to buffer pending index + ** updates during transactions. All pending updates buffered at any one + ** time must share a common language-id (see the FTS4 langid= feature). + ** The current language id is stored in variable iPrevLangid. + ** + ** A single FTS4 table may have multiple full-text indexes. For each index + ** there is an entry in the aIndex[] array. Index 0 is an index of all the + ** terms that appear in the document set. Each subsequent index in aIndex[] + ** is an index of prefixes of a specific length. + ** + ** Variable nPendingData contains an estimate the memory consumed by the + ** pending data structures, including hash table overhead, but not including + ** malloc overhead. When nPendingData exceeds nMaxPendingData, all hash + ** tables are flushed to disk. Variable iPrevDocid is the docid of the most + ** recently inserted record. + */ + int nIndex; /* Size of aIndex[] */ + struct Fts3Index { + int nPrefix; /* Prefix length (0 for main terms index) */ + Fts3Hash hPending; /* Pending terms table for this index */ + } *aIndex; + int nMaxPendingData; /* Max pending data before flush to disk */ + int nPendingData; /* Current bytes of pending data */ + sqlite_int64 iPrevDocid; /* Docid of most recently inserted document */ + int iPrevLangid; /* Langid of recently inserted document */ + +#if defined(SQLITE_DEBUG) || defined(SQLITE_COVERAGE_TEST) + /* State variables used for validating that the transaction control + ** methods of the virtual table are called at appropriate times. These + ** values do not contribute to FTS functionality; they are used for + ** verifying the operation of the SQLite core. + */ + int inTransaction; /* True after xBegin but before xCommit/xRollback */ + int mxSavepoint; /* Largest valid xSavepoint integer */ #endif - } - }while( yymajor!=YYNOCODE && yypParser->yyidx>=0 ); - return; -} +}; -/************** End of parse.c ***********************************************/ -/************** Begin file tokenize.c ****************************************/ /* -** 2001 September 15 +** When the core wants to read from the virtual table, it creates a +** virtual table cursor (an instance of the following structure) using +** the xOpen method. Cursors are destroyed using the xClose method. +*/ +struct Fts3Cursor { + sqlite3_vtab_cursor base; /* Base class used by SQLite core */ + i16 eSearch; /* Search strategy (see below) */ + u8 isEof; /* True if at End Of Results */ + u8 isRequireSeek; /* True if must seek pStmt to %_content row */ + sqlite3_stmt *pStmt; /* Prepared statement in use by the cursor */ + Fts3Expr *pExpr; /* Parsed MATCH query string */ + int iLangid; /* Language being queried for */ + int nPhrase; /* Number of matchable phrases in query */ + Fts3DeferredToken *pDeferred; /* Deferred search tokens, if any */ + sqlite3_int64 iPrevId; /* Previous id read from aDoclist */ + char *pNextId; /* Pointer into the body of aDoclist */ + char *aDoclist; /* List of docids for full-text queries */ + int nDoclist; /* Size of buffer at aDoclist */ + u8 bDesc; /* True to sort in descending order */ + int eEvalmode; /* An FTS3_EVAL_XX constant */ + int nRowAvg; /* Average size of database rows, in pages */ + sqlite3_int64 nDoc; /* Documents in table */ + + int isMatchinfoNeeded; /* True when aMatchinfo[] needs filling in */ + u32 *aMatchinfo; /* Information about most recent match */ + int nMatchinfo; /* Number of elements in aMatchinfo[] */ + char *zMatchinfo; /* Matchinfo specification */ +}; + +#define FTS3_EVAL_FILTER 0 +#define FTS3_EVAL_NEXT 1 +#define FTS3_EVAL_MATCHINFO 2 + +/* +** The Fts3Cursor.eSearch member is always set to one of the following. +** Actualy, Fts3Cursor.eSearch can be greater than or equal to +** FTS3_FULLTEXT_SEARCH. If so, then Fts3Cursor.eSearch - 2 is the index +** of the column to be searched. For example, in ** -** The author disclaims copyright to this source code. In place of -** a legal notice, here is a blessing: +** CREATE VIRTUAL TABLE ex1 USING fts3(a,b,c,d); +** SELECT docid FROM ex1 WHERE b MATCH 'one two three'; +** +** Because the LHS of the MATCH operator is 2nd column "b", +** Fts3Cursor.eSearch will be set to FTS3_FULLTEXT_SEARCH+1. (+0 for a, +** +1 for b, +2 for c, +3 for d.) If the LHS of MATCH were "ex1" +** indicating that all columns should be searched, +** then eSearch would be set to FTS3_FULLTEXT_SEARCH+4. +*/ +#define FTS3_FULLSCAN_SEARCH 0 /* Linear scan of %_content table */ +#define FTS3_DOCID_SEARCH 1 /* Lookup by rowid on %_content table */ +#define FTS3_FULLTEXT_SEARCH 2 /* Full-text index search */ + + +struct Fts3Doclist { + char *aAll; /* Array containing doclist (or NULL) */ + int nAll; /* Size of a[] in bytes */ + char *pNextDocid; /* Pointer to next docid */ + + sqlite3_int64 iDocid; /* Current docid (if pList!=0) */ + int bFreeList; /* True if pList should be sqlite3_free()d */ + char *pList; /* Pointer to position list following iDocid */ + int nList; /* Length of position list */ +}; + +/* +** A "phrase" is a sequence of one or more tokens that must match in +** sequence. A single token is the base case and the most common case. +** For a sequence of tokens contained in double-quotes (i.e. "one two three") +** nToken will be the number of tokens in the string. +*/ +struct Fts3PhraseToken { + char *z; /* Text of the token */ + int n; /* Number of bytes in buffer z */ + int isPrefix; /* True if token ends with a "*" character */ + int bFirst; /* True if token must appear at position 0 */ + + /* Variables above this point are populated when the expression is + ** parsed (by code in fts3_expr.c). Below this point the variables are + ** used when evaluating the expression. */ + Fts3DeferredToken *pDeferred; /* Deferred token object for this token */ + Fts3MultiSegReader *pSegcsr; /* Segment-reader for this token */ +}; + +struct Fts3Phrase { + /* Cache of doclist for this phrase. */ + Fts3Doclist doclist; + int bIncr; /* True if doclist is loaded incrementally */ + int iDoclistToken; + + /* Variables below this point are populated by fts3_expr.c when parsing + ** a MATCH expression. Everything above is part of the evaluation phase. + */ + int nToken; /* Number of tokens in the phrase */ + int iColumn; /* Index of column this phrase must match */ + Fts3PhraseToken aToken[1]; /* One entry for each token in the phrase */ +}; + +/* +** A tree of these objects forms the RHS of a MATCH operator. ** -** May you do good and not evil. -** May you find forgiveness for yourself and forgive others. -** May you share freely, never taking more than you give. +** If Fts3Expr.eType is FTSQUERY_PHRASE and isLoaded is true, then aDoclist +** points to a malloced buffer, size nDoclist bytes, containing the results +** of this phrase query in FTS3 doclist format. As usual, the initial +** "Length" field found in doclists stored on disk is omitted from this +** buffer. ** -************************************************************************* -** An tokenizer for SQL +** Variable aMI is used only for FTSQUERY_NEAR nodes to store the global +** matchinfo data. If it is not NULL, it points to an array of size nCol*3, +** where nCol is the number of columns in the queried FTS table. The array +** is populated as follows: ** -** This file contains C code that splits an SQL input string up into -** individual tokens and sends those tokens one-by-one over to the -** parser for analysis. +** aMI[iCol*3 + 0] = Undefined +** aMI[iCol*3 + 1] = Number of occurrences +** aMI[iCol*3 + 2] = Number of rows containing at least one instance ** -** $Id: tokenize.c,v 1.162 2009/06/23 20:28:54 drh Exp $ +** The aMI array is allocated using sqlite3_malloc(). It should be freed +** when the expression node is. */ +struct Fts3Expr { + int eType; /* One of the FTSQUERY_XXX values defined below */ + int nNear; /* Valid if eType==FTSQUERY_NEAR */ + Fts3Expr *pParent; /* pParent->pLeft==this or pParent->pRight==this */ + Fts3Expr *pLeft; /* Left operand */ + Fts3Expr *pRight; /* Right operand */ + Fts3Phrase *pPhrase; /* Valid if eType==FTSQUERY_PHRASE */ -/* -** The charMap() macro maps alphabetic characters into their -** lower-case ASCII equivalent. On ASCII machines, this is just -** an upper-to-lower case map. On EBCDIC machines we also need -** to adjust the encoding. Only alphabetic characters and underscores -** need to be translated. -*/ -#ifdef SQLITE_ASCII -# define charMap(X) sqlite3UpperToLower[(unsigned char)X] -#endif -#ifdef SQLITE_EBCDIC -# define charMap(X) ebcdicToAscii[(unsigned char)X] -const unsigned char ebcdicToAscii[] = { -/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 1x */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 2x */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 3x */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 4x */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 5x */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, /* 6x */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 7x */ - 0, 97, 98, 99,100,101,102,103,104,105, 0, 0, 0, 0, 0, 0, /* 8x */ - 0,106,107,108,109,110,111,112,113,114, 0, 0, 0, 0, 0, 0, /* 9x */ - 0, 0,115,116,117,118,119,120,121,122, 0, 0, 0, 0, 0, 0, /* Ax */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* Bx */ - 0, 97, 98, 99,100,101,102,103,104,105, 0, 0, 0, 0, 0, 0, /* Cx */ - 0,106,107,108,109,110,111,112,113,114, 0, 0, 0, 0, 0, 0, /* Dx */ - 0, 0,115,116,117,118,119,120,121,122, 0, 0, 0, 0, 0, 0, /* Ex */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* Fx */ + /* The following are used by the fts3_eval.c module. */ + sqlite3_int64 iDocid; /* Current docid */ + u8 bEof; /* True this expression is at EOF already */ + u8 bStart; /* True if iDocid is valid */ + u8 bDeferred; /* True if this expression is entirely deferred */ + + u32 *aMI; }; -#endif /* -** The sqlite3KeywordCode function looks up an identifier to determine if -** it is a keyword. If it is a keyword, the token code of that keyword is -** returned. If the input is not a keyword, TK_ID is returned. -** -** The implementation of this routine was generated by a program, -** mkkeywordhash.h, located in the tool subdirectory of the distribution. -** The output of the mkkeywordhash.c program is written into a file -** named keywordhash.h and then included into this source file by -** the #include below. -*/ -/************** Include keywordhash.h in the middle of tokenize.c ************/ -/************** Begin file keywordhash.h *************************************/ -/***** This file contains automatically generated code ****** +** Candidate values for Fts3Query.eType. Note that the order of the first +** four values is in order of precedence when parsing expressions. For +** example, the following: ** -** The code in this file has been automatically generated by +** "a OR b AND c NOT d NEAR e" ** -** $Header: /sqlite/sqlite/tool/mkkeywordhash.c,v 1.38 2009/06/09 14:27:41 drh Exp $ +** is equivalent to: ** -** The code in this file implements a function that determines whether -** or not a given identifier is really an SQL keyword. The same thing -** might be implemented more directly using a hand-written hash table. -** But by using this automatically generated code, the size of the code -** is substantially reduced. This is important for embedded applications -** on platforms with limited memory. +** "a OR (b AND (c NOT (d NEAR e)))" */ -/* Hash score: 171 */ -static int keywordCode(const char *z, int n){ - /* zText[] encodes 801 bytes of keywords in 541 bytes */ - /* REINDEXEDESCAPEACHECKEYBEFOREIGNOREGEXPLAINSTEADDATABASELECT */ - /* ABLEFTHENDEFERRABLELSEXCEPTRANSACTIONATURALTERAISEXCLUSIVE */ - /* XISTSAVEPOINTERSECTRIGGEREFERENCESCONSTRAINTOFFSETEMPORARY */ - /* UNIQUERYATTACHAVINGROUPDATEBEGINNERELEASEBETWEENOTNULLIKE */ - /* CASCADELETECASECOLLATECREATECURRENT_DATEDETACHIMMEDIATEJOIN */ - /* SERTMATCHPLANALYZEPRAGMABORTVALUESVIRTUALIMITWHENWHERENAME */ - /* AFTEREPLACEANDEFAULTAUTOINCREMENTCASTCOLUMNCOMMITCONFLICTCROSS */ - /* CURRENT_TIMESTAMPRIMARYDEFERREDISTINCTDROPFAILFROMFULLGLOBYIF */ - /* ISNULLORDERESTRICTOUTERIGHTROLLBACKROWUNIONUSINGVACUUMVIEW */ - /* INITIALLY */ - static const char zText[540] = { - 'R','E','I','N','D','E','X','E','D','E','S','C','A','P','E','A','C','H', - 'E','C','K','E','Y','B','E','F','O','R','E','I','G','N','O','R','E','G', - 'E','X','P','L','A','I','N','S','T','E','A','D','D','A','T','A','B','A', - 'S','E','L','E','C','T','A','B','L','E','F','T','H','E','N','D','E','F', - 'E','R','R','A','B','L','E','L','S','E','X','C','E','P','T','R','A','N', - 'S','A','C','T','I','O','N','A','T','U','R','A','L','T','E','R','A','I', - 'S','E','X','C','L','U','S','I','V','E','X','I','S','T','S','A','V','E', - 'P','O','I','N','T','E','R','S','E','C','T','R','I','G','G','E','R','E', - 'F','E','R','E','N','C','E','S','C','O','N','S','T','R','A','I','N','T', - 'O','F','F','S','E','T','E','M','P','O','R','A','R','Y','U','N','I','Q', - 'U','E','R','Y','A','T','T','A','C','H','A','V','I','N','G','R','O','U', - 'P','D','A','T','E','B','E','G','I','N','N','E','R','E','L','E','A','S', - 'E','B','E','T','W','E','E','N','O','T','N','U','L','L','I','K','E','C', - 'A','S','C','A','D','E','L','E','T','E','C','A','S','E','C','O','L','L', - 'A','T','E','C','R','E','A','T','E','C','U','R','R','E','N','T','_','D', - 'A','T','E','D','E','T','A','C','H','I','M','M','E','D','I','A','T','E', - 'J','O','I','N','S','E','R','T','M','A','T','C','H','P','L','A','N','A', - 'L','Y','Z','E','P','R','A','G','M','A','B','O','R','T','V','A','L','U', - 'E','S','V','I','R','T','U','A','L','I','M','I','T','W','H','E','N','W', - 'H','E','R','E','N','A','M','E','A','F','T','E','R','E','P','L','A','C', - 'E','A','N','D','E','F','A','U','L','T','A','U','T','O','I','N','C','R', - 'E','M','E','N','T','C','A','S','T','C','O','L','U','M','N','C','O','M', - 'M','I','T','C','O','N','F','L','I','C','T','C','R','O','S','S','C','U', - 'R','R','E','N','T','_','T','I','M','E','S','T','A','M','P','R','I','M', - 'A','R','Y','D','E','F','E','R','R','E','D','I','S','T','I','N','C','T', - 'D','R','O','P','F','A','I','L','F','R','O','M','F','U','L','L','G','L', - 'O','B','Y','I','F','I','S','N','U','L','L','O','R','D','E','R','E','S', - 'T','R','I','C','T','O','U','T','E','R','I','G','H','T','R','O','L','L', - 'B','A','C','K','R','O','W','U','N','I','O','N','U','S','I','N','G','V', - 'A','C','U','U','M','V','I','E','W','I','N','I','T','I','A','L','L','Y', - }; - static const unsigned char aHash[127] = { - 70, 99, 112, 68, 0, 43, 0, 0, 76, 0, 71, 0, 0, - 41, 12, 72, 15, 0, 111, 79, 49, 106, 0, 19, 0, 0, - 116, 0, 114, 109, 0, 22, 87, 0, 9, 0, 0, 64, 65, - 0, 63, 6, 0, 47, 84, 96, 0, 113, 95, 0, 0, 44, - 0, 97, 24, 0, 17, 0, 117, 48, 23, 0, 5, 104, 25, - 90, 0, 0, 119, 100, 55, 118, 52, 7, 50, 0, 85, 0, - 94, 26, 0, 93, 0, 0, 0, 89, 86, 91, 82, 103, 14, - 38, 102, 0, 75, 0, 18, 83, 105, 31, 0, 115, 74, 107, - 57, 45, 78, 0, 0, 88, 39, 0, 110, 0, 35, 0, 0, - 28, 0, 80, 53, 58, 0, 20, 56, 0, 51, - }; - static const unsigned char aNext[119] = { - 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 32, 21, 0, 0, 0, 42, 3, 46, 0, - 0, 0, 0, 29, 0, 0, 37, 0, 0, 0, 1, 60, 0, - 0, 61, 0, 40, 0, 0, 0, 0, 0, 0, 0, 59, 0, - 0, 0, 0, 30, 54, 16, 33, 10, 0, 0, 0, 0, 0, - 0, 0, 11, 66, 73, 0, 8, 0, 98, 92, 0, 101, 0, - 81, 0, 69, 0, 0, 108, 27, 36, 67, 77, 0, 34, 62, - 0, 0, - }; - static const unsigned char aLen[119] = { - 7, 7, 5, 4, 6, 4, 5, 3, 6, 7, 3, 6, 6, - 7, 7, 3, 8, 2, 6, 5, 4, 4, 3, 10, 4, 6, - 11, 2, 7, 5, 5, 9, 6, 9, 9, 7, 10, 10, 4, - 6, 2, 3, 4, 9, 2, 6, 5, 6, 6, 5, 6, 5, - 5, 7, 7, 7, 3, 4, 4, 7, 3, 6, 4, 7, 6, - 12, 6, 9, 4, 6, 5, 4, 7, 6, 5, 6, 7, 5, - 4, 5, 6, 5, 7, 3, 7, 13, 2, 2, 4, 6, 6, - 8, 5, 17, 12, 7, 8, 8, 2, 4, 4, 4, 4, 4, - 2, 2, 6, 5, 8, 5, 5, 8, 3, 5, 5, 6, 4, - 9, 3, - }; - static const unsigned short int aOffset[119] = { - 0, 2, 2, 8, 9, 14, 16, 20, 23, 25, 25, 29, 33, - 36, 41, 46, 48, 53, 54, 59, 62, 65, 67, 69, 78, 81, - 86, 95, 96, 101, 105, 109, 117, 122, 128, 136, 142, 152, 159, - 162, 162, 165, 167, 167, 171, 176, 179, 184, 189, 194, 197, 203, - 206, 210, 217, 223, 223, 226, 229, 233, 234, 238, 244, 248, 255, - 261, 273, 279, 288, 290, 296, 301, 303, 310, 315, 320, 326, 332, - 337, 341, 344, 350, 354, 361, 363, 370, 372, 374, 383, 387, 393, - 399, 407, 412, 412, 428, 435, 442, 443, 450, 454, 458, 462, 466, - 469, 471, 473, 479, 483, 491, 495, 500, 508, 511, 516, 521, 527, - 531, 536, - }; - static const unsigned char aCode[119] = { - TK_REINDEX, TK_INDEXED, TK_INDEX, TK_DESC, TK_ESCAPE, - TK_EACH, TK_CHECK, TK_KEY, TK_BEFORE, TK_FOREIGN, - TK_FOR, TK_IGNORE, TK_LIKE_KW, TK_EXPLAIN, TK_INSTEAD, - TK_ADD, TK_DATABASE, TK_AS, TK_SELECT, TK_TABLE, - TK_JOIN_KW, TK_THEN, TK_END, TK_DEFERRABLE, TK_ELSE, - TK_EXCEPT, TK_TRANSACTION,TK_ON, TK_JOIN_KW, TK_ALTER, - TK_RAISE, TK_EXCLUSIVE, TK_EXISTS, TK_SAVEPOINT, TK_INTERSECT, - TK_TRIGGER, TK_REFERENCES, TK_CONSTRAINT, TK_INTO, TK_OFFSET, - TK_OF, TK_SET, TK_TEMP, TK_TEMP, TK_OR, - TK_UNIQUE, TK_QUERY, TK_ATTACH, TK_HAVING, TK_GROUP, - TK_UPDATE, TK_BEGIN, TK_JOIN_KW, TK_RELEASE, TK_BETWEEN, - TK_NOTNULL, TK_NOT, TK_NULL, TK_LIKE_KW, TK_CASCADE, - TK_ASC, TK_DELETE, TK_CASE, TK_COLLATE, TK_CREATE, - TK_CTIME_KW, TK_DETACH, TK_IMMEDIATE, TK_JOIN, TK_INSERT, - TK_MATCH, TK_PLAN, TK_ANALYZE, TK_PRAGMA, TK_ABORT, - TK_VALUES, TK_VIRTUAL, TK_LIMIT, TK_WHEN, TK_WHERE, - TK_RENAME, TK_AFTER, TK_REPLACE, TK_AND, TK_DEFAULT, - TK_AUTOINCR, TK_TO, TK_IN, TK_CAST, TK_COLUMNKW, - TK_COMMIT, TK_CONFLICT, TK_JOIN_KW, TK_CTIME_KW, TK_CTIME_KW, - TK_PRIMARY, TK_DEFERRED, TK_DISTINCT, TK_IS, TK_DROP, - TK_FAIL, TK_FROM, TK_JOIN_KW, TK_LIKE_KW, TK_BY, - TK_IF, TK_ISNULL, TK_ORDER, TK_RESTRICT, TK_JOIN_KW, - TK_JOIN_KW, TK_ROLLBACK, TK_ROW, TK_UNION, TK_USING, - TK_VACUUM, TK_VIEW, TK_INITIALLY, TK_ALL, - }; - int h, i; - if( n<2 ) return TK_ID; - h = ((charMap(z[0])*4) ^ - (charMap(z[n-1])*3) ^ - n) % 127; - for(i=((int)aHash[h])-1; i>=0; i=((int)aNext[i])-1){ - if( aLen[i]==n && sqlite3StrNICmp(&zText[aOffset[i]],z,n)==0 ){ - testcase( i==0 ); /* REINDEX */ - testcase( i==1 ); /* INDEXED */ - testcase( i==2 ); /* INDEX */ - testcase( i==3 ); /* DESC */ - testcase( i==4 ); /* ESCAPE */ - testcase( i==5 ); /* EACH */ - testcase( i==6 ); /* CHECK */ - testcase( i==7 ); /* KEY */ - testcase( i==8 ); /* BEFORE */ - testcase( i==9 ); /* FOREIGN */ - testcase( i==10 ); /* FOR */ - testcase( i==11 ); /* IGNORE */ - testcase( i==12 ); /* REGEXP */ - testcase( i==13 ); /* EXPLAIN */ - testcase( i==14 ); /* INSTEAD */ - testcase( i==15 ); /* ADD */ - testcase( i==16 ); /* DATABASE */ - testcase( i==17 ); /* AS */ - testcase( i==18 ); /* SELECT */ - testcase( i==19 ); /* TABLE */ - testcase( i==20 ); /* LEFT */ - testcase( i==21 ); /* THEN */ - testcase( i==22 ); /* END */ - testcase( i==23 ); /* DEFERRABLE */ - testcase( i==24 ); /* ELSE */ - testcase( i==25 ); /* EXCEPT */ - testcase( i==26 ); /* TRANSACTION */ - testcase( i==27 ); /* ON */ - testcase( i==28 ); /* NATURAL */ - testcase( i==29 ); /* ALTER */ - testcase( i==30 ); /* RAISE */ - testcase( i==31 ); /* EXCLUSIVE */ - testcase( i==32 ); /* EXISTS */ - testcase( i==33 ); /* SAVEPOINT */ - testcase( i==34 ); /* INTERSECT */ - testcase( i==35 ); /* TRIGGER */ - testcase( i==36 ); /* REFERENCES */ - testcase( i==37 ); /* CONSTRAINT */ - testcase( i==38 ); /* INTO */ - testcase( i==39 ); /* OFFSET */ - testcase( i==40 ); /* OF */ - testcase( i==41 ); /* SET */ - testcase( i==42 ); /* TEMP */ - testcase( i==43 ); /* TEMPORARY */ - testcase( i==44 ); /* OR */ - testcase( i==45 ); /* UNIQUE */ - testcase( i==46 ); /* QUERY */ - testcase( i==47 ); /* ATTACH */ - testcase( i==48 ); /* HAVING */ - testcase( i==49 ); /* GROUP */ - testcase( i==50 ); /* UPDATE */ - testcase( i==51 ); /* BEGIN */ - testcase( i==52 ); /* INNER */ - testcase( i==53 ); /* RELEASE */ - testcase( i==54 ); /* BETWEEN */ - testcase( i==55 ); /* NOTNULL */ - testcase( i==56 ); /* NOT */ - testcase( i==57 ); /* NULL */ - testcase( i==58 ); /* LIKE */ - testcase( i==59 ); /* CASCADE */ - testcase( i==60 ); /* ASC */ - testcase( i==61 ); /* DELETE */ - testcase( i==62 ); /* CASE */ - testcase( i==63 ); /* COLLATE */ - testcase( i==64 ); /* CREATE */ - testcase( i==65 ); /* CURRENT_DATE */ - testcase( i==66 ); /* DETACH */ - testcase( i==67 ); /* IMMEDIATE */ - testcase( i==68 ); /* JOIN */ - testcase( i==69 ); /* INSERT */ - testcase( i==70 ); /* MATCH */ - testcase( i==71 ); /* PLAN */ - testcase( i==72 ); /* ANALYZE */ - testcase( i==73 ); /* PRAGMA */ - testcase( i==74 ); /* ABORT */ - testcase( i==75 ); /* VALUES */ - testcase( i==76 ); /* VIRTUAL */ - testcase( i==77 ); /* LIMIT */ - testcase( i==78 ); /* WHEN */ - testcase( i==79 ); /* WHERE */ - testcase( i==80 ); /* RENAME */ - testcase( i==81 ); /* AFTER */ - testcase( i==82 ); /* REPLACE */ - testcase( i==83 ); /* AND */ - testcase( i==84 ); /* DEFAULT */ - testcase( i==85 ); /* AUTOINCREMENT */ - testcase( i==86 ); /* TO */ - testcase( i==87 ); /* IN */ - testcase( i==88 ); /* CAST */ - testcase( i==89 ); /* COLUMN */ - testcase( i==90 ); /* COMMIT */ - testcase( i==91 ); /* CONFLICT */ - testcase( i==92 ); /* CROSS */ - testcase( i==93 ); /* CURRENT_TIMESTAMP */ - testcase( i==94 ); /* CURRENT_TIME */ - testcase( i==95 ); /* PRIMARY */ - testcase( i==96 ); /* DEFERRED */ - testcase( i==97 ); /* DISTINCT */ - testcase( i==98 ); /* IS */ - testcase( i==99 ); /* DROP */ - testcase( i==100 ); /* FAIL */ - testcase( i==101 ); /* FROM */ - testcase( i==102 ); /* FULL */ - testcase( i==103 ); /* GLOB */ - testcase( i==104 ); /* BY */ - testcase( i==105 ); /* IF */ - testcase( i==106 ); /* ISNULL */ - testcase( i==107 ); /* ORDER */ - testcase( i==108 ); /* RESTRICT */ - testcase( i==109 ); /* OUTER */ - testcase( i==110 ); /* RIGHT */ - testcase( i==111 ); /* ROLLBACK */ - testcase( i==112 ); /* ROW */ - testcase( i==113 ); /* UNION */ - testcase( i==114 ); /* USING */ - testcase( i==115 ); /* VACUUM */ - testcase( i==116 ); /* VIEW */ - testcase( i==117 ); /* INITIALLY */ - testcase( i==118 ); /* ALL */ - return aCode[i]; - } - } - return TK_ID; +#define FTSQUERY_NEAR 1 +#define FTSQUERY_NOT 2 +#define FTSQUERY_AND 3 +#define FTSQUERY_OR 4 +#define FTSQUERY_PHRASE 5 + + +/* fts3_write.c */ +SQLITE_PRIVATE int sqlite3Fts3UpdateMethod(sqlite3_vtab*,int,sqlite3_value**,sqlite3_int64*); +SQLITE_PRIVATE int sqlite3Fts3PendingTermsFlush(Fts3Table *); +SQLITE_PRIVATE void sqlite3Fts3PendingTermsClear(Fts3Table *); +SQLITE_PRIVATE int sqlite3Fts3Optimize(Fts3Table *); +SQLITE_PRIVATE int sqlite3Fts3SegReaderNew(int, int, sqlite3_int64, + sqlite3_int64, sqlite3_int64, const char *, int, Fts3SegReader**); +SQLITE_PRIVATE int sqlite3Fts3SegReaderPending( + Fts3Table*,int,const char*,int,int,Fts3SegReader**); +SQLITE_PRIVATE void sqlite3Fts3SegReaderFree(Fts3SegReader *); +SQLITE_PRIVATE int sqlite3Fts3AllSegdirs(Fts3Table*, int, int, int, sqlite3_stmt **); +SQLITE_PRIVATE int sqlite3Fts3ReadLock(Fts3Table *); +SQLITE_PRIVATE int sqlite3Fts3ReadBlock(Fts3Table*, sqlite3_int64, char **, int*, int*); + +SQLITE_PRIVATE int sqlite3Fts3SelectDoctotal(Fts3Table *, sqlite3_stmt **); +SQLITE_PRIVATE int sqlite3Fts3SelectDocsize(Fts3Table *, sqlite3_int64, sqlite3_stmt **); + +SQLITE_PRIVATE void sqlite3Fts3FreeDeferredTokens(Fts3Cursor *); +SQLITE_PRIVATE int sqlite3Fts3DeferToken(Fts3Cursor *, Fts3PhraseToken *, int); +SQLITE_PRIVATE int sqlite3Fts3CacheDeferredDoclists(Fts3Cursor *); +SQLITE_PRIVATE void sqlite3Fts3FreeDeferredDoclists(Fts3Cursor *); +SQLITE_PRIVATE void sqlite3Fts3SegmentsClose(Fts3Table *); +SQLITE_PRIVATE int sqlite3Fts3MaxLevel(Fts3Table *, int *); + +/* Special values interpreted by sqlite3SegReaderCursor() */ +#define FTS3_SEGCURSOR_PENDING -1 +#define FTS3_SEGCURSOR_ALL -2 + +SQLITE_PRIVATE int sqlite3Fts3SegReaderStart(Fts3Table*, Fts3MultiSegReader*, Fts3SegFilter*); +SQLITE_PRIVATE int sqlite3Fts3SegReaderStep(Fts3Table *, Fts3MultiSegReader *); +SQLITE_PRIVATE void sqlite3Fts3SegReaderFinish(Fts3MultiSegReader *); + +SQLITE_PRIVATE int sqlite3Fts3SegReaderCursor(Fts3Table *, + int, int, int, const char *, int, int, int, Fts3MultiSegReader *); + +/* Flags allowed as part of the 4th argument to SegmentReaderIterate() */ +#define FTS3_SEGMENT_REQUIRE_POS 0x00000001 +#define FTS3_SEGMENT_IGNORE_EMPTY 0x00000002 +#define FTS3_SEGMENT_COLUMN_FILTER 0x00000004 +#define FTS3_SEGMENT_PREFIX 0x00000008 +#define FTS3_SEGMENT_SCAN 0x00000010 +#define FTS3_SEGMENT_FIRST 0x00000020 + +/* Type passed as 4th argument to SegmentReaderIterate() */ +struct Fts3SegFilter { + const char *zTerm; + int nTerm; + int iCol; + int flags; +}; + +struct Fts3MultiSegReader { + /* Used internally by sqlite3Fts3SegReaderXXX() calls */ + Fts3SegReader **apSegment; /* Array of Fts3SegReader objects */ + int nSegment; /* Size of apSegment array */ + int nAdvance; /* How many seg-readers to advance */ + Fts3SegFilter *pFilter; /* Pointer to filter object */ + char *aBuffer; /* Buffer to merge doclists in */ + int nBuffer; /* Allocated size of aBuffer[] in bytes */ + + int iColFilter; /* If >=0, filter for this column */ + int bRestart; + + /* Used by fts3.c only. */ + int nCost; /* Cost of running iterator */ + int bLookup; /* True if a lookup of a single entry. */ + + /* Output values. Valid only after Fts3SegReaderStep() returns SQLITE_ROW. */ + char *zTerm; /* Pointer to term buffer */ + int nTerm; /* Size of zTerm in bytes */ + char *aDoclist; /* Pointer to doclist buffer */ + int nDoclist; /* Size of aDoclist[] in bytes */ +}; + +SQLITE_PRIVATE int sqlite3Fts3Incrmerge(Fts3Table*,int,int); + +/* fts3.c */ +SQLITE_PRIVATE int sqlite3Fts3PutVarint(char *, sqlite3_int64); +SQLITE_PRIVATE int sqlite3Fts3GetVarint(const char *, sqlite_int64 *); +SQLITE_PRIVATE int sqlite3Fts3GetVarint32(const char *, int *); +SQLITE_PRIVATE int sqlite3Fts3VarintLen(sqlite3_uint64); +SQLITE_PRIVATE void sqlite3Fts3Dequote(char *); +SQLITE_PRIVATE void sqlite3Fts3DoclistPrev(int,char*,int,char**,sqlite3_int64*,int*,u8*); +SQLITE_PRIVATE int sqlite3Fts3EvalPhraseStats(Fts3Cursor *, Fts3Expr *, u32 *); +SQLITE_PRIVATE int sqlite3Fts3FirstFilter(sqlite3_int64, char *, int, char *); +SQLITE_PRIVATE void sqlite3Fts3CreateStatTable(int*, Fts3Table*); + +/* fts3_tokenizer.c */ +SQLITE_PRIVATE const char *sqlite3Fts3NextToken(const char *, int *); +SQLITE_PRIVATE int sqlite3Fts3InitHashTable(sqlite3 *, Fts3Hash *, const char *); +SQLITE_PRIVATE int sqlite3Fts3InitTokenizer(Fts3Hash *pHash, const char *, + sqlite3_tokenizer **, char ** +); +SQLITE_PRIVATE int sqlite3Fts3IsIdChar(char); + +/* fts3_snippet.c */ +SQLITE_PRIVATE void sqlite3Fts3Offsets(sqlite3_context*, Fts3Cursor*); +SQLITE_PRIVATE void sqlite3Fts3Snippet(sqlite3_context *, Fts3Cursor *, const char *, + const char *, const char *, int, int +); +SQLITE_PRIVATE void sqlite3Fts3Matchinfo(sqlite3_context *, Fts3Cursor *, const char *); + +/* fts3_expr.c */ +SQLITE_PRIVATE int sqlite3Fts3ExprParse(sqlite3_tokenizer *, int, + char **, int, int, int, const char *, int, Fts3Expr ** +); +SQLITE_PRIVATE void sqlite3Fts3ExprFree(Fts3Expr *); +#ifdef SQLITE_TEST +SQLITE_PRIVATE int sqlite3Fts3ExprInitTestInterface(sqlite3 *db); +SQLITE_PRIVATE int sqlite3Fts3InitTerm(sqlite3 *db); +#endif + +SQLITE_PRIVATE int sqlite3Fts3OpenTokenizer(sqlite3_tokenizer *, int, const char *, int, + sqlite3_tokenizer_cursor ** +); + +/* fts3_aux.c */ +SQLITE_PRIVATE int sqlite3Fts3InitAux(sqlite3 *db); + +SQLITE_PRIVATE void sqlite3Fts3EvalPhraseCleanup(Fts3Phrase *); + +SQLITE_PRIVATE int sqlite3Fts3MsrIncrStart( + Fts3Table*, Fts3MultiSegReader*, int, const char*, int); +SQLITE_PRIVATE int sqlite3Fts3MsrIncrNext( + Fts3Table *, Fts3MultiSegReader *, sqlite3_int64 *, char **, int *); +SQLITE_PRIVATE int sqlite3Fts3EvalPhrasePoslist(Fts3Cursor *, Fts3Expr *, int iCol, char **); +SQLITE_PRIVATE int sqlite3Fts3MsrOvfl(Fts3Cursor *, Fts3MultiSegReader *, int *); +SQLITE_PRIVATE int sqlite3Fts3MsrIncrRestart(Fts3MultiSegReader *pCsr); + +SQLITE_PRIVATE int sqlite3Fts3DeferredTokenList(Fts3DeferredToken *, char **, int *); + +/* fts3_unicode2.c (functions generated by parsing unicode text files) */ +#ifdef SQLITE_ENABLE_FTS4_UNICODE61 +SQLITE_PRIVATE int sqlite3FtsUnicodeFold(int, int); +SQLITE_PRIVATE int sqlite3FtsUnicodeIsalnum(int); +SQLITE_PRIVATE int sqlite3FtsUnicodeIsdiacritic(int); +#endif + +#endif /* !SQLITE_CORE || SQLITE_ENABLE_FTS3 */ +#endif /* _FTSINT_H */ + +/************** End of fts3Int.h *********************************************/ +/************** Continuing where we left off in fts3.c ***********************/ +#if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) + +#if defined(SQLITE_ENABLE_FTS3) && !defined(SQLITE_CORE) +# define SQLITE_CORE 1 +#endif + +/* #include */ +/* #include */ +/* #include */ +/* #include */ +/* #include */ +/* #include */ + +#ifndef SQLITE_CORE + SQLITE_EXTENSION_INIT1 +#endif + +static int fts3EvalNext(Fts3Cursor *pCsr); +static int fts3EvalStart(Fts3Cursor *pCsr); +static int fts3TermSegReaderCursor( + Fts3Cursor *, const char *, int, int, Fts3MultiSegReader **); + +/* +** Write a 64-bit variable-length integer to memory starting at p[0]. +** The length of data written will be between 1 and FTS3_VARINT_MAX bytes. +** The number of bytes written is returned. +*/ +SQLITE_PRIVATE int sqlite3Fts3PutVarint(char *p, sqlite_int64 v){ + unsigned char *q = (unsigned char *) p; + sqlite_uint64 vu = v; + do{ + *q++ = (unsigned char) ((vu & 0x7f) | 0x80); + vu >>= 7; + }while( vu!=0 ); + q[-1] &= 0x7f; /* turn off high bit in final byte */ + assert( q - (unsigned char *)p <= FTS3_VARINT_MAX ); + return (int) (q - (unsigned char *)p); } -SQLITE_PRIVATE int sqlite3KeywordCode(const unsigned char *z, int n){ - return keywordCode((char*)z, n); + +/* +** Read a 64-bit variable-length integer from memory starting at p[0]. +** Return the number of bytes read, or 0 on error. +** The value is stored in *v. +*/ +SQLITE_PRIVATE int sqlite3Fts3GetVarint(const char *p, sqlite_int64 *v){ + const unsigned char *q = (const unsigned char *) p; + sqlite_uint64 x = 0, y = 1; + while( (*q&0x80)==0x80 && q-(unsigned char *)p>= 7; + }while( v!=0 ); + return i; +} /* -** If X is a character that can be used in an identifier then -** IdChar(X) will be true. Otherwise it is false. +** Convert an SQL-style quoted string into a normal string by removing +** the quote characters. The conversion is done in-place. If the +** input does not begin with a quote character, then this routine +** is a no-op. ** -** For ASCII, any character with the high-order bit set is -** allowed in an identifier. For 7-bit characters, -** sqlite3IsIdChar[X] must be 1. +** Examples: ** -** For EBCDIC, the rules are more complex but have the same -** end result. +** "abc" becomes abc +** 'xyz' becomes xyz +** [pqr] becomes pqr +** `mno` becomes mno ** -** Ticket #1066. the SQL standard does not allow '$' in the -** middle of identfiers. But many SQL implementations do. -** SQLite will allow '$' in identifiers for compatibility. -** But the feature is undocumented. */ -#ifdef SQLITE_ASCII -SQLITE_PRIVATE const char sqlite3IsAsciiIdChar[] = { -/* x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF */ - 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 2x */ - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, /* 3x */ - 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 4x */ - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, /* 5x */ - 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 6x */ - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, /* 7x */ -}; -#define IdChar(C) (((c=C)&0x80)!=0 || (c>0x1f && sqlite3IsAsciiIdChar[c-0x20])) -#endif -#ifdef SQLITE_EBCDIC -SQLITE_PRIVATE const char sqlite3IsEbcdicIdChar[] = { -/* x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF */ - 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, /* 4x */ - 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, /* 5x */ - 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, /* 6x */ - 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, /* 7x */ - 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, /* 8x */ - 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, /* 9x */ - 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, /* Ax */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* Bx */ - 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, /* Cx */ - 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, /* Dx */ - 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, /* Ex */ - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, /* Fx */ -}; -#define IdChar(C) (((c=C)>=0x42 && sqlite3IsEbcdicIdChar[c-0x40])) -#endif +SQLITE_PRIVATE void sqlite3Fts3Dequote(char *z){ + char quote; /* Quote character (if any ) */ - -/* -** Return the length of the token that begins at z[0]. -** Store the token type in *tokenType before returning. -*/ -SQLITE_PRIVATE int sqlite3GetToken(const unsigned char *z, int *tokenType){ - int i, c; - switch( *z ){ - case ' ': case '\t': case '\n': case '\f': case '\r': { - testcase( z[0]==' ' ); - testcase( z[0]=='\t' ); - testcase( z[0]=='\n' ); - testcase( z[0]=='\f' ); - testcase( z[0]=='\r' ); - for(i=1; sqlite3Isspace(z[i]); i++){} - *tokenType = TK_SPACE; - return i; - } - case '-': { - if( z[1]=='-' ){ - for(i=2; (c=z[i])!=0 && c!='\n'; i++){} - *tokenType = TK_SPACE; - return i; - } - *tokenType = TK_MINUS; - return 1; - } - case '(': { - *tokenType = TK_LP; - return 1; - } - case ')': { - *tokenType = TK_RP; - return 1; - } - case ';': { - *tokenType = TK_SEMI; - return 1; - } - case '+': { - *tokenType = TK_PLUS; - return 1; - } - case '*': { - *tokenType = TK_STAR; - return 1; - } - case '/': { - if( z[1]!='*' || z[2]==0 ){ - *tokenType = TK_SLASH; - return 1; - } - for(i=3, c=z[2]; (c!='*' || z[i]!='/') && (c=z[i])!=0; i++){} - if( c ) i++; - *tokenType = TK_SPACE; - return i; - } - case '%': { - *tokenType = TK_REM; - return 1; - } - case '=': { - *tokenType = TK_EQ; - return 1 + (z[1]=='='); - } - case '<': { - if( (c=z[1])=='=' ){ - *tokenType = TK_LE; - return 2; - }else if( c=='>' ){ - *tokenType = TK_NE; - return 2; - }else if( c=='<' ){ - *tokenType = TK_LSHIFT; - return 2; - }else{ - *tokenType = TK_LT; - return 1; - } - } - case '>': { - if( (c=z[1])=='=' ){ - *tokenType = TK_GE; - return 2; - }else if( c=='>' ){ - *tokenType = TK_RSHIFT; - return 2; - }else{ - *tokenType = TK_GT; - return 1; - } - } - case '!': { - if( z[1]!='=' ){ - *tokenType = TK_ILLEGAL; - return 2; - }else{ - *tokenType = TK_NE; - return 2; - } - } - case '|': { - if( z[1]!='|' ){ - *tokenType = TK_BITOR; - return 1; - }else{ - *tokenType = TK_CONCAT; - return 2; - } - } - case ',': { - *tokenType = TK_COMMA; - return 1; - } - case '&': { - *tokenType = TK_BITAND; - return 1; - } - case '~': { - *tokenType = TK_BITNOT; - return 1; - } - case '`': - case '\'': - case '"': { - int delim = z[0]; - testcase( delim=='`' ); - testcase( delim=='\'' ); - testcase( delim=='"' ); - for(i=1; (c=z[i])!=0; i++){ - if( c==delim ){ - if( z[i+1]==delim ){ - i++; - }else{ - break; - } - } - } - if( c=='\'' ){ - *tokenType = TK_STRING; - return i+1; - }else if( c!=0 ){ - *tokenType = TK_ID; - return i+1; + quote = z[0]; + if( quote=='[' || quote=='\'' || quote=='"' || quote=='`' ){ + int iIn = 1; /* Index of next byte to read from input */ + int iOut = 0; /* Index of next byte to write to output */ + + /* If the first byte was a '[', then the close-quote character is a ']' */ + if( quote=='[' ) quote = ']'; + + while( ALWAYS(z[iIn]) ){ + if( z[iIn]==quote ){ + if( z[iIn+1]!=quote ) break; + z[iOut++] = quote; + iIn += 2; }else{ - *tokenType = TK_ILLEGAL; - return i; - } - } - case '.': { -#ifndef SQLITE_OMIT_FLOATING_POINT - if( !sqlite3Isdigit(z[1]) ) -#endif - { - *tokenType = TK_DOT; - return 1; - } - /* If the next character is a digit, this is a floating point - ** number that begins with ".". Fall thru into the next case */ - } - case '0': case '1': case '2': case '3': case '4': - case '5': case '6': case '7': case '8': case '9': { - testcase( z[0]=='0' ); testcase( z[0]=='1' ); testcase( z[0]=='2' ); - testcase( z[0]=='3' ); testcase( z[0]=='4' ); testcase( z[0]=='5' ); - testcase( z[0]=='6' ); testcase( z[0]=='7' ); testcase( z[0]=='8' ); - testcase( z[0]=='9' ); - *tokenType = TK_INTEGER; - for(i=0; sqlite3Isdigit(z[i]); i++){} -#ifndef SQLITE_OMIT_FLOATING_POINT - if( z[i]=='.' ){ - i++; - while( sqlite3Isdigit(z[i]) ){ i++; } - *tokenType = TK_FLOAT; - } - if( (z[i]=='e' || z[i]=='E') && - ( sqlite3Isdigit(z[i+1]) - || ((z[i+1]=='+' || z[i+1]=='-') && sqlite3Isdigit(z[i+2])) - ) - ){ - i += 2; - while( sqlite3Isdigit(z[i]) ){ i++; } - *tokenType = TK_FLOAT; - } -#endif - while( IdChar(z[i]) ){ - *tokenType = TK_ILLEGAL; - i++; - } - return i; - } - case '[': { - for(i=1, c=z[0]; c!=']' && (c=z[i])!=0; i++){} - *tokenType = c==']' ? TK_ID : TK_ILLEGAL; - return i; - } - case '?': { - *tokenType = TK_VARIABLE; - for(i=1; sqlite3Isdigit(z[i]); i++){} - return i; - } - case '#': { - for(i=1; sqlite3Isdigit(z[i]); i++){} - if( i>1 ){ - /* Parameters of the form #NNN (where NNN is a number) are used - ** internally by sqlite3NestedParse. */ - *tokenType = TK_REGISTER; - return i; - } - /* Fall through into the next case if the '#' is not followed by - ** a digit. Try to match #AAAA where AAAA is a parameter name. */ - } -#ifndef SQLITE_OMIT_TCL_VARIABLE - case '$': -#endif - case '@': /* For compatibility with MS SQL Server */ - case ':': { - int n = 0; - testcase( z[0]=='$' ); testcase( z[0]=='@' ); testcase( z[0]==':' ); - *tokenType = TK_VARIABLE; - for(i=1; (c=z[i])!=0; i++){ - if( IdChar(c) ){ - n++; -#ifndef SQLITE_OMIT_TCL_VARIABLE - }else if( c=='(' && n>0 ){ - do{ - i++; - }while( (c=z[i])!=0 && !sqlite3Isspace(c) && c!=')' ); - if( c==')' ){ - i++; - }else{ - *tokenType = TK_ILLEGAL; - } - break; - }else if( c==':' && z[i+1]==':' ){ - i++; -#endif - }else{ - break; - } - } - if( n==0 ) *tokenType = TK_ILLEGAL; - return i; - } -#ifndef SQLITE_OMIT_BLOB_LITERAL - case 'x': case 'X': { - testcase( z[0]=='x' ); testcase( z[0]=='X' ); - if( z[1]=='\'' ){ - *tokenType = TK_BLOB; - for(i=2; (c=z[i])!=0 && c!='\''; i++){ - if( !sqlite3Isxdigit(c) ){ - *tokenType = TK_ILLEGAL; - } - } - if( i%2 || !c ) *tokenType = TK_ILLEGAL; - if( c ) i++; - return i; - } - /* Otherwise fall through to the next case */ - } -#endif - default: { - if( !IdChar(*z) ){ - break; + z[iOut++] = z[iIn++]; } - for(i=1; IdChar(z[i]); i++){} - *tokenType = keywordCode((char*)z, i); - return i; } + z[iOut] = '\0'; } - *tokenType = TK_ILLEGAL; - return 1; } /* -** Run the parser on the given SQL string. The parser structure is -** passed in. An SQLITE_ status code is returned. If an error occurs -** then an and attempt is made to write an error message into -** memory obtained from sqlite3_malloc() and to make *pzErrMsg point to that -** error message. +** Read a single varint from the doclist at *pp and advance *pp to point +** to the first byte past the end of the varint. Add the value of the varint +** to *pVal. */ -SQLITE_PRIVATE int sqlite3RunParser(Parse *pParse, const char *zSql, char **pzErrMsg){ - int nErr = 0; /* Number of errors encountered */ - int i; /* Loop counter */ - void *pEngine; /* The LEMON-generated LALR(1) parser */ - int tokenType; /* type of the next token */ - int lastTokenParsed = -1; /* type of the previous token */ - u8 enableLookaside; /* Saved value of db->lookaside.bEnabled */ - sqlite3 *db = pParse->db; /* The database connection */ - int mxSqlLen; /* Max length of an SQL string */ +static void fts3GetDeltaVarint(char **pp, sqlite3_int64 *pVal){ + sqlite3_int64 iVal; + *pp += sqlite3Fts3GetVarint(*pp, &iVal); + *pVal += iVal; +} +/* +** When this function is called, *pp points to the first byte following a +** varint that is part of a doclist (or position-list, or any other list +** of varints). This function moves *pp to point to the start of that varint, +** and sets *pVal by the varint value. +** +** Argument pStart points to the first byte of the doclist that the +** varint is part of. +*/ +static void fts3GetReverseVarint( + char **pp, + char *pStart, + sqlite3_int64 *pVal +){ + sqlite3_int64 iVal; + char *p; - mxSqlLen = db->aLimit[SQLITE_LIMIT_SQL_LENGTH]; - if( db->activeVdbeCnt==0 ){ - db->u1.isInterrupted = 0; + /* Pointer p now points at the first byte past the varint we are + ** interested in. So, unless the doclist is corrupt, the 0x80 bit is + ** clear on character p[-1]. */ + for(p = (*pp)-2; p>=pStart && *p&0x80; p--); + p++; + *pp = p; + + sqlite3Fts3GetVarint(p, &iVal); + *pVal = iVal; +} + +/* +** The xDisconnect() virtual table method. +*/ +static int fts3DisconnectMethod(sqlite3_vtab *pVtab){ + Fts3Table *p = (Fts3Table *)pVtab; + int i; + + assert( p->nPendingData==0 ); + assert( p->pSegments==0 ); + + /* Free any prepared statements held */ + for(i=0; iaStmt); i++){ + sqlite3_finalize(p->aStmt[i]); } - pParse->rc = SQLITE_OK; - pParse->zTail = pParse->zSql = zSql; - i = 0; - assert( pzErrMsg!=0 ); - pEngine = sqlite3ParserAlloc((void*(*)(size_t))sqlite3Malloc); - if( pEngine==0 ){ - db->mallocFailed = 1; - return SQLITE_NOMEM; + sqlite3_free(p->zSegmentsTbl); + sqlite3_free(p->zReadExprlist); + sqlite3_free(p->zWriteExprlist); + sqlite3_free(p->zContentTbl); + sqlite3_free(p->zLanguageid); + + /* Invoke the tokenizer destructor to free the tokenizer. */ + p->pTokenizer->pModule->xDestroy(p->pTokenizer); + + sqlite3_free(p); + return SQLITE_OK; +} + +/* +** Construct one or more SQL statements from the format string given +** and then evaluate those statements. The success code is written +** into *pRc. +** +** If *pRc is initially non-zero then this routine is a no-op. +*/ +static void fts3DbExec( + int *pRc, /* Success code */ + sqlite3 *db, /* Database in which to run SQL */ + const char *zFormat, /* Format string for SQL */ + ... /* Arguments to the format string */ +){ + va_list ap; + char *zSql; + if( *pRc ) return; + va_start(ap, zFormat); + zSql = sqlite3_vmprintf(zFormat, ap); + va_end(ap); + if( zSql==0 ){ + *pRc = SQLITE_NOMEM; + }else{ + *pRc = sqlite3_exec(db, zSql, 0, 0, 0); + sqlite3_free(zSql); } - assert( pParse->pNewTable==0 ); - assert( pParse->pNewTrigger==0 ); - assert( pParse->nVar==0 ); - assert( pParse->nVarExpr==0 ); - assert( pParse->nVarExprAlloc==0 ); - assert( pParse->apVarExpr==0 ); - enableLookaside = db->lookaside.bEnabled; - if( db->lookaside.pStart ) db->lookaside.bEnabled = 1; - while( !db->mallocFailed && zSql[i]!=0 ){ - assert( i>=0 ); - pParse->sLastToken.z = &zSql[i]; - pParse->sLastToken.n = sqlite3GetToken((unsigned char*)&zSql[i],&tokenType); - i += pParse->sLastToken.n; - if( i>mxSqlLen ){ - pParse->rc = SQLITE_TOOBIG; - break; - } - switch( tokenType ){ - case TK_SPACE: { - if( db->u1.isInterrupted ){ - sqlite3ErrorMsg(pParse, "interrupt"); - pParse->rc = SQLITE_INTERRUPT; - goto abort_parse; - } - break; - } - case TK_ILLEGAL: { - sqlite3DbFree(db, *pzErrMsg); - *pzErrMsg = sqlite3MPrintf(db, "unrecognized token: \"%T\"", - &pParse->sLastToken); - nErr++; - goto abort_parse; - } - case TK_SEMI: { - pParse->zTail = &zSql[i]; - /* Fall thru into the default case */ - } - default: { - sqlite3Parser(pEngine, tokenType, pParse->sLastToken, pParse); - lastTokenParsed = tokenType; - if( pParse->rc!=SQLITE_OK ){ - goto abort_parse; - } - break; - } - } +} + +/* +** The xDestroy() virtual table method. +*/ +static int fts3DestroyMethod(sqlite3_vtab *pVtab){ + Fts3Table *p = (Fts3Table *)pVtab; + int rc = SQLITE_OK; /* Return code */ + const char *zDb = p->zDb; /* Name of database (e.g. "main", "temp") */ + sqlite3 *db = p->db; /* Database handle */ + + /* Drop the shadow tables */ + if( p->zContentTbl==0 ){ + fts3DbExec(&rc, db, "DROP TABLE IF EXISTS %Q.'%q_content'", zDb, p->zName); } -abort_parse: - if( zSql[i]==0 && nErr==0 && pParse->rc==SQLITE_OK ){ - if( lastTokenParsed!=TK_SEMI ){ - sqlite3Parser(pEngine, TK_SEMI, pParse->sLastToken, pParse); - pParse->zTail = &zSql[i]; + fts3DbExec(&rc, db, "DROP TABLE IF EXISTS %Q.'%q_segments'", zDb,p->zName); + fts3DbExec(&rc, db, "DROP TABLE IF EXISTS %Q.'%q_segdir'", zDb, p->zName); + fts3DbExec(&rc, db, "DROP TABLE IF EXISTS %Q.'%q_docsize'", zDb, p->zName); + fts3DbExec(&rc, db, "DROP TABLE IF EXISTS %Q.'%q_stat'", zDb, p->zName); + + /* If everything has worked, invoke fts3DisconnectMethod() to free the + ** memory associated with the Fts3Table structure and return SQLITE_OK. + ** Otherwise, return an SQLite error code. + */ + return (rc==SQLITE_OK ? fts3DisconnectMethod(pVtab) : rc); +} + + +/* +** Invoke sqlite3_declare_vtab() to declare the schema for the FTS3 table +** passed as the first argument. This is done as part of the xConnect() +** and xCreate() methods. +** +** If *pRc is non-zero when this function is called, it is a no-op. +** Otherwise, if an error occurs, an SQLite error code is stored in *pRc +** before returning. +*/ +static void fts3DeclareVtab(int *pRc, Fts3Table *p){ + if( *pRc==SQLITE_OK ){ + int i; /* Iterator variable */ + int rc; /* Return code */ + char *zSql; /* SQL statement passed to declare_vtab() */ + char *zCols; /* List of user defined columns */ + const char *zLanguageid; + + zLanguageid = (p->zLanguageid ? p->zLanguageid : "__langid"); + sqlite3_vtab_config(p->db, SQLITE_VTAB_CONSTRAINT_SUPPORT, 1); + + /* Create a list of user columns for the virtual table */ + zCols = sqlite3_mprintf("%Q, ", p->azColumn[0]); + for(i=1; zCols && inColumn; i++){ + zCols = sqlite3_mprintf("%z%Q, ", zCols, p->azColumn[i]); } - sqlite3Parser(pEngine, 0, pParse->sLastToken, pParse); + + /* Create the whole "CREATE TABLE" statement to pass to SQLite */ + zSql = sqlite3_mprintf( + "CREATE TABLE x(%s %Q HIDDEN, docid HIDDEN, %Q HIDDEN)", + zCols, p->zName, zLanguageid + ); + if( !zCols || !zSql ){ + rc = SQLITE_NOMEM; + }else{ + rc = sqlite3_declare_vtab(p->db, zSql); + } + + sqlite3_free(zSql); + sqlite3_free(zCols); + *pRc = rc; } -#ifdef YYTRACKMAXSTACKDEPTH - sqlite3StatusSet(SQLITE_STATUS_PARSER_STACK, - sqlite3ParserStackPeak(pEngine) +} + +/* +** Create the %_stat table if it does not already exist. +*/ +SQLITE_PRIVATE void sqlite3Fts3CreateStatTable(int *pRc, Fts3Table *p){ + fts3DbExec(pRc, p->db, + "CREATE TABLE IF NOT EXISTS %Q.'%q_stat'" + "(id INTEGER PRIMARY KEY, value BLOB);", + p->zDb, p->zName ); -#endif /* YYDEBUG */ - sqlite3ParserFree(pEngine, sqlite3_free); - db->lookaside.bEnabled = enableLookaside; - if( db->mallocFailed ){ - pParse->rc = SQLITE_NOMEM; - } - if( pParse->rc!=SQLITE_OK && pParse->rc!=SQLITE_DONE && pParse->zErrMsg==0 ){ - sqlite3SetString(&pParse->zErrMsg, db, "%s", sqlite3ErrStr(pParse->rc)); - } - assert( pzErrMsg!=0 ); - if( pParse->zErrMsg ){ - *pzErrMsg = pParse->zErrMsg; - pParse->zErrMsg = 0; - nErr++; + if( (*pRc)==SQLITE_OK ) p->bHasStat = 1; +} + +/* +** Create the backing store tables (%_content, %_segments and %_segdir) +** required by the FTS3 table passed as the only argument. This is done +** as part of the vtab xCreate() method. +** +** If the p->bHasDocsize boolean is true (indicating that this is an +** FTS4 table, not an FTS3 table) then also create the %_docsize and +** %_stat tables required by FTS4. +*/ +static int fts3CreateTables(Fts3Table *p){ + int rc = SQLITE_OK; /* Return code */ + int i; /* Iterator variable */ + sqlite3 *db = p->db; /* The database connection */ + + if( p->zContentTbl==0 ){ + const char *zLanguageid = p->zLanguageid; + char *zContentCols; /* Columns of %_content table */ + + /* Create a list of user columns for the content table */ + zContentCols = sqlite3_mprintf("docid INTEGER PRIMARY KEY"); + for(i=0; zContentCols && inColumn; i++){ + char *z = p->azColumn[i]; + zContentCols = sqlite3_mprintf("%z, 'c%d%q'", zContentCols, i, z); + } + if( zLanguageid && zContentCols ){ + zContentCols = sqlite3_mprintf("%z, langid", zContentCols, zLanguageid); + } + if( zContentCols==0 ) rc = SQLITE_NOMEM; + + /* Create the content table */ + fts3DbExec(&rc, db, + "CREATE TABLE %Q.'%q_content'(%s)", + p->zDb, p->zName, zContentCols + ); + sqlite3_free(zContentCols); } - if( pParse->pVdbe && pParse->nErr>0 && pParse->nested==0 ){ - sqlite3VdbeDelete(pParse->pVdbe); - pParse->pVdbe = 0; + + /* Create other tables */ + fts3DbExec(&rc, db, + "CREATE TABLE %Q.'%q_segments'(blockid INTEGER PRIMARY KEY, block BLOB);", + p->zDb, p->zName + ); + fts3DbExec(&rc, db, + "CREATE TABLE %Q.'%q_segdir'(" + "level INTEGER," + "idx INTEGER," + "start_block INTEGER," + "leaves_end_block INTEGER," + "end_block INTEGER," + "root BLOB," + "PRIMARY KEY(level, idx)" + ");", + p->zDb, p->zName + ); + if( p->bHasDocsize ){ + fts3DbExec(&rc, db, + "CREATE TABLE %Q.'%q_docsize'(docid INTEGER PRIMARY KEY, size BLOB);", + p->zDb, p->zName + ); } -#ifndef SQLITE_OMIT_SHARED_CACHE - if( pParse->nested==0 ){ - sqlite3DbFree(db, pParse->aTableLock); - pParse->aTableLock = 0; - pParse->nTableLock = 0; + assert( p->bHasStat==p->bFts4 ); + if( p->bHasStat ){ + sqlite3Fts3CreateStatTable(&rc, p); } -#endif -#ifndef SQLITE_OMIT_VIRTUALTABLE - sqlite3DbFree(db, pParse->apVtabLock); -#endif + return rc; +} - if( !IN_DECLARE_VTAB ){ - /* If the pParse->declareVtab flag is set, do not delete any table - ** structure built up in pParse->pNewTable. The calling code (see vtab.c) - ** will take responsibility for freeing the Table structure. - */ - sqlite3DeleteTable(pParse->pNewTable); +/* +** Store the current database page-size in bytes in p->nPgsz. +** +** If *pRc is non-zero when this function is called, it is a no-op. +** Otherwise, if an error occurs, an SQLite error code is stored in *pRc +** before returning. +*/ +static void fts3DatabasePageSize(int *pRc, Fts3Table *p){ + if( *pRc==SQLITE_OK ){ + int rc; /* Return code */ + char *zSql; /* SQL text "PRAGMA %Q.page_size" */ + sqlite3_stmt *pStmt; /* Compiled "PRAGMA %Q.page_size" statement */ + + zSql = sqlite3_mprintf("PRAGMA %Q.page_size", p->zDb); + if( !zSql ){ + rc = SQLITE_NOMEM; + }else{ + rc = sqlite3_prepare(p->db, zSql, -1, &pStmt, 0); + if( rc==SQLITE_OK ){ + sqlite3_step(pStmt); + p->nPgsz = sqlite3_column_int(pStmt, 0); + rc = sqlite3_finalize(pStmt); + }else if( rc==SQLITE_AUTH ){ + p->nPgsz = 1024; + rc = SQLITE_OK; + } + } + assert( p->nPgsz>0 || rc!=SQLITE_OK ); + sqlite3_free(zSql); + *pRc = rc; } +} - sqlite3DeleteTrigger(db, pParse->pNewTrigger); - sqlite3DbFree(db, pParse->apVarExpr); - sqlite3DbFree(db, pParse->aAlias); - while( pParse->pAinc ){ - AutoincInfo *p = pParse->pAinc; - pParse->pAinc = p->pNext; - sqlite3DbFree(db, p); +/* +** "Special" FTS4 arguments are column specifications of the following form: +** +** = +** +** There may not be whitespace surrounding the "=" character. The +** term may be quoted, but the may not. +*/ +static int fts3IsSpecialColumn( + const char *z, + int *pnKey, + char **pzValue +){ + char *zValue; + const char *zCsr = z; + + while( *zCsr!='=' ){ + if( *zCsr=='\0' ) return 0; + zCsr++; } - while( pParse->pZombieTab ){ - Table *p = pParse->pZombieTab; - pParse->pZombieTab = p->pNextZombie; - sqlite3DeleteTable(p); + + *pnKey = (int)(zCsr-z); + zValue = sqlite3_mprintf("%s", &zCsr[1]); + if( zValue ){ + sqlite3Fts3Dequote(zValue); } - if( nErr>0 && pParse->rc==SQLITE_OK ){ - pParse->rc = SQLITE_ERROR; + *pzValue = zValue; + return 1; +} + +/* +** Append the output of a printf() style formatting to an existing string. +*/ +static void fts3Appendf( + int *pRc, /* IN/OUT: Error code */ + char **pz, /* IN/OUT: Pointer to string buffer */ + const char *zFormat, /* Printf format string to append */ + ... /* Arguments for printf format string */ +){ + if( *pRc==SQLITE_OK ){ + va_list ap; + char *z; + va_start(ap, zFormat); + z = sqlite3_vmprintf(zFormat, ap); + va_end(ap); + if( z && *pz ){ + char *z2 = sqlite3_mprintf("%s%s", *pz, z); + sqlite3_free(z); + z = z2; + } + if( z==0 ) *pRc = SQLITE_NOMEM; + sqlite3_free(*pz); + *pz = z; } - return nErr; } -/************** End of tokenize.c ********************************************/ -/************** Begin file complete.c ****************************************/ /* -** 2001 September 15 -** -** The author disclaims copyright to this source code. In place of -** a legal notice, here is a blessing: -** -** May you do good and not evil. -** May you find forgiveness for yourself and forgive others. -** May you share freely, never taking more than you give. -** -************************************************************************* -** An tokenizer for SQL +** Return a copy of input string zInput enclosed in double-quotes (") and +** with all double quote characters escaped. For example: ** -** This file contains C code that implements the sqlite3_complete() API. -** This code used to be part of the tokenizer.c source file. But by -** separating it out, the code will be automatically omitted from -** static links that do not use it. +** fts3QuoteId("un \"zip\"") -> "un \"\"zip\"\"" ** -** $Id: complete.c,v 1.8 2009/04/28 04:46:42 drh Exp $ +** The pointer returned points to memory obtained from sqlite3_malloc(). It +** is the callers responsibility to call sqlite3_free() to release this +** memory. */ -#ifndef SQLITE_OMIT_COMPLETE +static char *fts3QuoteId(char const *zInput){ + int nRet; + char *zRet; + nRet = 2 + (int)strlen(zInput)*2 + 1; + zRet = sqlite3_malloc(nRet); + if( zRet ){ + int i; + char *z = zRet; + *(z++) = '"'; + for(i=0; zInput[i]; i++){ + if( zInput[i]=='"' ) *(z++) = '"'; + *(z++) = zInput[i]; + } + *(z++) = '"'; + *(z++) = '\0'; + } + return zRet; +} /* -** This is defined in tokenize.c. We just have to import the definition. +** Return a list of comma separated SQL expressions and a FROM clause that +** could be used in a SELECT statement such as the following: +** +** SELECT FROM %_content AS x ... +** +** to return the docid, followed by each column of text data in order +** from left to write. If parameter zFunc is not NULL, then instead of +** being returned directly each column of text data is passed to an SQL +** function named zFunc first. For example, if zFunc is "unzip" and the +** table has the three user-defined columns "a", "b", and "c", the following +** string is returned: +** +** "docid, unzip(x.'a'), unzip(x.'b'), unzip(x.'c') FROM %_content AS x" +** +** The pointer returned points to a buffer allocated by sqlite3_malloc(). It +** is the responsibility of the caller to eventually free it. +** +** If *pRc is not SQLITE_OK when this function is called, it is a no-op (and +** a NULL pointer is returned). Otherwise, if an OOM error is encountered +** by this function, NULL is returned and *pRc is set to SQLITE_NOMEM. If +** no error occurs, *pRc is left unmodified. */ -#ifndef SQLITE_AMALGAMATION -#ifdef SQLITE_ASCII -SQLITE_PRIVATE const char sqlite3IsAsciiIdChar[]; -#define IdChar(C) (((c=C)&0x80)!=0 || (c>0x1f && sqlite3IsAsciiIdChar[c-0x20])) -#endif -#ifdef SQLITE_EBCDIC -SQLITE_PRIVATE const char sqlite3IsEbcdicIdChar[]; -#define IdChar(C) (((c=C)>=0x42 && sqlite3IsEbcdicIdChar[c-0x40])) -#endif -#endif /* SQLITE_AMALGAMATION */ +static char *fts3ReadExprList(Fts3Table *p, const char *zFunc, int *pRc){ + char *zRet = 0; + char *zFree = 0; + char *zFunction; + int i; + if( p->zContentTbl==0 ){ + if( !zFunc ){ + zFunction = ""; + }else{ + zFree = zFunction = fts3QuoteId(zFunc); + } + fts3Appendf(pRc, &zRet, "docid"); + for(i=0; inColumn; i++){ + fts3Appendf(pRc, &zRet, ",%s(x.'c%d%q')", zFunction, i, p->azColumn[i]); + } + if( p->zLanguageid ){ + fts3Appendf(pRc, &zRet, ", x.%Q", "langid"); + } + sqlite3_free(zFree); + }else{ + fts3Appendf(pRc, &zRet, "rowid"); + for(i=0; inColumn; i++){ + fts3Appendf(pRc, &zRet, ", x.'%q'", p->azColumn[i]); + } + if( p->zLanguageid ){ + fts3Appendf(pRc, &zRet, ", x.%Q", p->zLanguageid); + } + } + fts3Appendf(pRc, &zRet, " FROM '%q'.'%q%s' AS x", + p->zDb, + (p->zContentTbl ? p->zContentTbl : p->zName), + (p->zContentTbl ? "" : "_content") + ); + return zRet; +} /* -** Token types used by the sqlite3_complete() routine. See the header -** comments on that procedure for additional information. +** Return a list of N comma separated question marks, where N is the number +** of columns in the %_content table (one for the docid plus one for each +** user-defined text column). +** +** If argument zFunc is not NULL, then all but the first question mark +** is preceded by zFunc and an open bracket, and followed by a closed +** bracket. For example, if zFunc is "zip" and the FTS3 table has three +** user-defined text columns, the following string is returned: +** +** "?, zip(?), zip(?), zip(?)" +** +** The pointer returned points to a buffer allocated by sqlite3_malloc(). It +** is the responsibility of the caller to eventually free it. +** +** If *pRc is not SQLITE_OK when this function is called, it is a no-op (and +** a NULL pointer is returned). Otherwise, if an OOM error is encountered +** by this function, NULL is returned and *pRc is set to SQLITE_NOMEM. If +** no error occurs, *pRc is left unmodified. */ -#define tkSEMI 0 -#define tkWS 1 -#define tkOTHER 2 -#define tkEXPLAIN 3 -#define tkCREATE 4 -#define tkTEMP 5 -#define tkTRIGGER 6 -#define tkEND 7 +static char *fts3WriteExprList(Fts3Table *p, const char *zFunc, int *pRc){ + char *zRet = 0; + char *zFree = 0; + char *zFunction; + int i; + + if( !zFunc ){ + zFunction = ""; + }else{ + zFree = zFunction = fts3QuoteId(zFunc); + } + fts3Appendf(pRc, &zRet, "?"); + for(i=0; inColumn; i++){ + fts3Appendf(pRc, &zRet, ",%s(?)", zFunction); + } + if( p->zLanguageid ){ + fts3Appendf(pRc, &zRet, ", ?"); + } + sqlite3_free(zFree); + return zRet; +} /* -** Return TRUE if the given SQL string ends in a semicolon. +** This function interprets the string at (*pp) as a non-negative integer +** value. It reads the integer and sets *pnOut to the value read, then +** sets *pp to point to the byte immediately following the last byte of +** the integer value. ** -** Special handling is require for CREATE TRIGGER statements. -** Whenever the CREATE TRIGGER keywords are seen, the statement -** must end with ";END;". +** Only decimal digits ('0'..'9') may be part of an integer value. ** -** This implementation uses a state machine with 7 states: +** If *pp does not being with a decimal digit SQLITE_ERROR is returned and +** the output value undefined. Otherwise SQLITE_OK is returned. ** -** (0) START At the beginning or end of an SQL statement. This routine -** returns 1 if it ends in the START state and 0 if it ends -** in any other state. +** This function is used when parsing the "prefix=" FTS4 parameter. +*/ +static int fts3GobbleInt(const char **pp, int *pnOut){ + const char *p; /* Iterator pointer */ + int nInt = 0; /* Output value */ + + for(p=*pp; p[0]>='0' && p[0]<='9'; p++){ + nInt = nInt * 10 + (p[0] - '0'); + } + if( p==*pp ) return SQLITE_ERROR; + *pnOut = nInt; + *pp = p; + return SQLITE_OK; +} + +/* +** This function is called to allocate an array of Fts3Index structures +** representing the indexes maintained by the current FTS table. FTS tables +** always maintain the main "terms" index, but may also maintain one or +** more "prefix" indexes, depending on the value of the "prefix=" parameter +** (if any) specified as part of the CREATE VIRTUAL TABLE statement. ** -** (1) NORMAL We are in the middle of statement which ends with a single -** semicolon. +** Argument zParam is passed the value of the "prefix=" option if one was +** specified, or NULL otherwise. ** -** (2) EXPLAIN The keyword EXPLAIN has been seen at the beginning of -** a statement. +** If no error occurs, SQLITE_OK is returned and *apIndex set to point to +** the allocated array. *pnIndex is set to the number of elements in the +** array. If an error does occur, an SQLite error code is returned. ** -** (3) CREATE The keyword CREATE has been seen at the beginning of a -** statement, possibly preceeded by EXPLAIN and/or followed by -** TEMP or TEMPORARY +** Regardless of whether or not an error is returned, it is the responsibility +** of the caller to call sqlite3_free() on the output array to free it. +*/ +static int fts3PrefixParameter( + const char *zParam, /* ABC in prefix=ABC parameter to parse */ + int *pnIndex, /* OUT: size of *apIndex[] array */ + struct Fts3Index **apIndex /* OUT: Array of indexes for this table */ +){ + struct Fts3Index *aIndex; /* Allocated array */ + int nIndex = 1; /* Number of entries in array */ + + if( zParam && zParam[0] ){ + const char *p; + nIndex++; + for(p=zParam; *p; p++){ + if( *p==',' ) nIndex++; + } + } + + aIndex = sqlite3_malloc(sizeof(struct Fts3Index) * nIndex); + *apIndex = aIndex; + *pnIndex = nIndex; + if( !aIndex ){ + return SQLITE_NOMEM; + } + + memset(aIndex, 0, sizeof(struct Fts3Index) * nIndex); + if( zParam ){ + const char *p = zParam; + int i; + for(i=1; i module name ("fts3" or "fts4") +** argv[1] -> database name +** argv[2] -> table name +** argv[...] -> "column name" and other module argument fields. +*/ +static int fts3InitVtab( + int isCreate, /* True for xCreate, false for xConnect */ + sqlite3 *db, /* The SQLite database connection */ + void *pAux, /* Hash table containing tokenizers */ + int argc, /* Number of elements in argv array */ + const char * const *argv, /* xCreate/xConnect argument array */ + sqlite3_vtab **ppVTab, /* Write the resulting vtab structure here */ + char **pzErr /* Write any error message here */ +){ + Fts3Hash *pHash = (Fts3Hash *)pAux; + Fts3Table *p = 0; /* Pointer to allocated vtab */ + int rc = SQLITE_OK; /* Return code */ + int i; /* Iterator variable */ + int nByte; /* Size of allocation used for *p */ + int iCol; /* Column index */ + int nString = 0; /* Bytes required to hold all column names */ + int nCol = 0; /* Number of columns in the FTS table */ + char *zCsr; /* Space for holding column names */ + int nDb; /* Bytes required to hold database name */ + int nName; /* Bytes required to hold table name */ + int isFts4 = (argv[0][3]=='4'); /* True for FTS4, false for FTS3 */ + const char **aCol; /* Array of column names */ + sqlite3_tokenizer *pTokenizer = 0; /* Tokenizer for this table */ + + int nIndex; /* Size of aIndex[] array */ + struct Fts3Index *aIndex = 0; /* Array of indexes for this table */ + + /* The results of parsing supported FTS4 key=value options: */ + int bNoDocsize = 0; /* True to omit %_docsize table */ + int bDescIdx = 0; /* True to store descending indexes */ + char *zPrefix = 0; /* Prefix parameter value (or NULL) */ + char *zCompress = 0; /* compress=? parameter (or NULL) */ + char *zUncompress = 0; /* uncompress=? parameter (or NULL) */ + char *zContent = 0; /* content=? parameter (or NULL) */ + char *zLanguageid = 0; /* languageid=? parameter (or NULL) */ + + assert( strlen(argv[0])==4 ); + assert( (sqlite3_strnicmp(argv[0], "fts4", 4)==0 && isFts4) + || (sqlite3_strnicmp(argv[0], "fts3", 4)==0 && !isFts4) + ); -#ifndef SQLITE_OMIT_TRIGGER - /* A complex statement machine used to detect the end of a CREATE TRIGGER - ** statement. This is the normal case. - */ - static const u8 trans[7][8] = { - /* Token: */ - /* State: ** SEMI WS OTHER EXPLAIN CREATE TEMP TRIGGER END */ - /* 0 START: */ { 0, 0, 1, 2, 3, 1, 1, 1, }, - /* 1 NORMAL: */ { 0, 1, 1, 1, 1, 1, 1, 1, }, - /* 2 EXPLAIN: */ { 0, 2, 2, 1, 3, 1, 1, 1, }, - /* 3 CREATE: */ { 0, 3, 1, 1, 1, 3, 4, 1, }, - /* 4 TRIGGER: */ { 5, 4, 4, 4, 4, 4, 4, 4, }, - /* 5 SEMI: */ { 5, 5, 4, 4, 4, 4, 4, 6, }, - /* 6 END: */ { 0, 6, 4, 4, 4, 4, 4, 4, }, - }; -#else - /* If triggers are not suppored by this compile then the statement machine - ** used to detect the end of a statement is much simplier + nDb = (int)strlen(argv[1]) + 1; + nName = (int)strlen(argv[2]) + 1; + + aCol = (const char **)sqlite3_malloc(sizeof(const char *) * (argc-2) ); + if( !aCol ) return SQLITE_NOMEM; + memset((void *)aCol, 0, sizeof(const char *) * (argc-2)); + + /* Loop through all of the arguments passed by the user to the FTS3/4 + ** module (i.e. all the column names and special arguments). This loop + ** does the following: + ** + ** + Figures out the number of columns the FTSX table will have, and + ** the number of bytes of space that must be allocated to store copies + ** of the column names. + ** + ** + If there is a tokenizer specification included in the arguments, + ** initializes the tokenizer pTokenizer. */ - static const u8 trans[2][3] = { - /* Token: */ - /* State: ** SEMI WS OTHER */ - /* 0 START: */ { 0, 0, 1, }, - /* 1 NORMAL: */ { 0, 1, 1, }, - }; -#endif /* SQLITE_OMIT_TRIGGER */ + for(i=3; rc==SQLITE_OK && i8 + && 0==sqlite3_strnicmp(z, "tokenize", 8) + && 0==sqlite3Fts3IsIdChar(z[8]) + ){ + rc = sqlite3Fts3InitTokenizer(pHash, &z[9], &pTokenizer, pzErr); + } + + /* Check if it is an FTS4 special argument. */ + else if( isFts4 && fts3IsSpecialColumn(z, &nKey, &zVal) ){ + struct Fts4Option { + const char *zOpt; + int nOpt; + } aFts4Opt[] = { + { "matchinfo", 9 }, /* 0 -> MATCHINFO */ + { "prefix", 6 }, /* 1 -> PREFIX */ + { "compress", 8 }, /* 2 -> COMPRESS */ + { "uncompress", 10 }, /* 3 -> UNCOMPRESS */ + { "order", 5 }, /* 4 -> ORDER */ + { "content", 7 }, /* 5 -> CONTENT */ + { "languageid", 10 } /* 6 -> LANGUAGEID */ + }; + + int iOpt; + if( !zVal ){ + rc = SQLITE_NOMEM; + }else{ + for(iOpt=0; iOptnOpt && !sqlite3_strnicmp(z, pOp->zOpt, pOp->nOpt) ){ + break; + } } - while( *zSql && *zSql!='\n' ){ zSql++; } - if( *zSql==0 ) return state==0; - token = tkWS; - break; - } - case '[': { /* Microsoft-style identifiers in [...] */ - zSql++; - while( *zSql && *zSql!=']' ){ zSql++; } - if( *zSql==0 ) return 0; - token = tkOTHER; - break; - } - case '`': /* Grave-accent quoted symbols used by MySQL */ - case '"': /* single- and double-quoted strings */ - case '\'': { - int c = *zSql; - zSql++; - while( *zSql && *zSql!=c ){ zSql++; } - if( *zSql==0 ) return 0; - token = tkOTHER; - break; - } - default: { - int c; - if( IdChar((u8)*zSql) ){ - /* Keywords and unquoted identifiers */ - int nId; - for(nId=1; IdChar(zSql[nId]); nId++){} -#ifdef SQLITE_OMIT_TRIGGER - token = tkOTHER; -#else - switch( *zSql ){ - case 'c': case 'C': { - if( nId==6 && sqlite3StrNICmp(zSql, "create", 6)==0 ){ - token = tkCREATE; - }else{ - token = tkOTHER; + if( iOpt==SizeofArray(aFts4Opt) ){ + *pzErr = sqlite3_mprintf("unrecognized parameter: %s", z); + rc = SQLITE_ERROR; + }else{ + switch( iOpt ){ + case 0: /* MATCHINFO */ + if( strlen(zVal)!=4 || sqlite3_strnicmp(zVal, "fts3", 4) ){ + *pzErr = sqlite3_mprintf("unrecognized matchinfo: %s", zVal); + rc = SQLITE_ERROR; } + bNoDocsize = 1; break; - } - case 't': case 'T': { - if( nId==7 && sqlite3StrNICmp(zSql, "trigger", 7)==0 ){ - token = tkTRIGGER; - }else if( nId==4 && sqlite3StrNICmp(zSql, "temp", 4)==0 ){ - token = tkTEMP; - }else if( nId==9 && sqlite3StrNICmp(zSql, "temporary", 9)==0 ){ - token = tkTEMP; - }else{ - token = tkOTHER; - } + + case 1: /* PREFIX */ + sqlite3_free(zPrefix); + zPrefix = zVal; + zVal = 0; break; - } - case 'e': case 'E': { - if( nId==3 && sqlite3StrNICmp(zSql, "end", 3)==0 ){ - token = tkEND; - }else -#ifndef SQLITE_OMIT_EXPLAIN - if( nId==7 && sqlite3StrNICmp(zSql, "explain", 7)==0 ){ - token = tkEXPLAIN; - }else -#endif - { - token = tkOTHER; + + case 2: /* COMPRESS */ + sqlite3_free(zCompress); + zCompress = zVal; + zVal = 0; + break; + + case 3: /* UNCOMPRESS */ + sqlite3_free(zUncompress); + zUncompress = zVal; + zVal = 0; + break; + + case 4: /* ORDER */ + if( (strlen(zVal)!=3 || sqlite3_strnicmp(zVal, "asc", 3)) + && (strlen(zVal)!=4 || sqlite3_strnicmp(zVal, "desc", 4)) + ){ + *pzErr = sqlite3_mprintf("unrecognized order: %s", zVal); + rc = SQLITE_ERROR; } + bDescIdx = (zVal[0]=='d' || zVal[0]=='D'); break; - } - default: { - token = tkOTHER; + + case 5: /* CONTENT */ + sqlite3_free(zContent); + zContent = zVal; + zVal = 0; + break; + + case 6: /* LANGUAGEID */ + assert( iOpt==6 ); + sqlite3_free(zLanguageid); + zLanguageid = zVal; + zVal = 0; break; - } } -#endif /* SQLITE_OMIT_TRIGGER */ - zSql += nId-1; - }else{ - /* Operators and special symbols */ - token = tkOTHER; } - break; + sqlite3_free(zVal); + } + } + + /* Otherwise, the argument is a column name. */ + else { + nString += (int)(strlen(z) + 1); + aCol[nCol++] = z; + } + } + + /* If a content=xxx option was specified, the following: + ** + ** 1. Ignore any compress= and uncompress= options. + ** + ** 2. If no column names were specified as part of the CREATE VIRTUAL + ** TABLE statement, use all columns from the content table. + */ + if( rc==SQLITE_OK && zContent ){ + sqlite3_free(zCompress); + sqlite3_free(zUncompress); + zCompress = 0; + zUncompress = 0; + if( nCol==0 ){ + sqlite3_free((void*)aCol); + aCol = 0; + rc = fts3ContentColumns(db, argv[1], zContent, &aCol, &nCol, &nString); + + /* If a languageid= option was specified, remove the language id + ** column from the aCol[] array. */ + if( rc==SQLITE_OK && zLanguageid ){ + int j; + for(j=0; jdb = db; + p->nColumn = nCol; + p->nPendingData = 0; + p->azColumn = (char **)&p[1]; + p->pTokenizer = pTokenizer; + p->nMaxPendingData = FTS3_MAX_PENDING_DATA; + p->bHasDocsize = (isFts4 && bNoDocsize==0); + p->bHasStat = isFts4; + p->bFts4 = isFts4; + p->bDescIdx = bDescIdx; + p->bAutoincrmerge = 0xff; /* 0xff means setting unknown */ + p->zContentTbl = zContent; + p->zLanguageid = zLanguageid; + zContent = 0; + zLanguageid = 0; + TESTONLY( p->inTransaction = -1 ); + TESTONLY( p->mxSavepoint = -1 ); + + p->aIndex = (struct Fts3Index *)&p->azColumn[nCol]; + memcpy(p->aIndex, aIndex, sizeof(struct Fts3Index) * nIndex); + p->nIndex = nIndex; + for(i=0; iaIndex[i].hPending, FTS3_HASH_STRING, 1); + } + + /* Fill in the zName and zDb fields of the vtab structure. */ + zCsr = (char *)&p->aIndex[nIndex]; + p->zName = zCsr; + memcpy(zCsr, argv[2], nName); + zCsr += nName; + p->zDb = zCsr; + memcpy(zCsr, argv[1], nDb); + zCsr += nDb; + + /* Fill in the azColumn array */ + for(iCol=0; iColazColumn[iCol] = zCsr; + zCsr += n+1; + assert( zCsr <= &((char *)p)[nByte] ); + } + + if( (zCompress==0)!=(zUncompress==0) ){ + char const *zMiss = (zCompress==0 ? "compress" : "uncompress"); + rc = SQLITE_ERROR; + *pzErr = sqlite3_mprintf("missing %s parameter in fts4 constructor", zMiss); + } + p->zReadExprlist = fts3ReadExprList(p, zUncompress, &rc); + p->zWriteExprlist = fts3WriteExprList(p, zCompress, &rc); + if( rc!=SQLITE_OK ) goto fts3_init_out; + + /* If this is an xCreate call, create the underlying tables in the + ** database. TODO: For xConnect(), it could verify that said tables exist. + */ + if( isCreate ){ + rc = fts3CreateTables(p); + } + + /* Check to see if a legacy fts3 table has been "upgraded" by the + ** addition of a %_stat table so that it can use incremental merge. + */ + if( !isFts4 && !isCreate ){ + int rc2 = SQLITE_OK; + fts3DbExec(&rc2, db, "SELECT 1 FROM %Q.'%q_stat' WHERE id=2", + p->zDb, p->zName); + if( rc2==SQLITE_OK ) p->bHasStat = 1; + } + + /* Figure out the page-size for the database. This is required in order to + ** estimate the cost of loading large doclists from the database. */ + fts3DatabasePageSize(&rc, p); + p->nNodeSize = p->nPgsz-35; + + /* Declare the table schema to SQLite. */ + fts3DeclareVtab(&rc, p); + +fts3_init_out: + sqlite3_free(zPrefix); + sqlite3_free(aIndex); + sqlite3_free(zCompress); + sqlite3_free(zUncompress); + sqlite3_free(zContent); + sqlite3_free(zLanguageid); + sqlite3_free((void *)aCol); + if( rc!=SQLITE_OK ){ + if( p ){ + fts3DisconnectMethod((sqlite3_vtab *)p); + }else if( pTokenizer ){ + pTokenizer->pModule->xDestroy(pTokenizer); + } + }else{ + assert( p->pSegments==0 ); + *ppVTab = &p->base; + } + return rc; +} + +/* +** The xConnect() and xCreate() methods for the virtual table. All the +** work is done in function fts3InitVtab(). +*/ +static int fts3ConnectMethod( + sqlite3 *db, /* Database connection */ + void *pAux, /* Pointer to tokenizer hash table */ + int argc, /* Number of elements in argv array */ + const char * const *argv, /* xCreate/xConnect argument array */ + sqlite3_vtab **ppVtab, /* OUT: New sqlite3_vtab object */ + char **pzErr /* OUT: sqlite3_malloc'd error message */ +){ + return fts3InitVtab(0, db, pAux, argc, argv, ppVtab, pzErr); +} +static int fts3CreateMethod( + sqlite3 *db, /* Database connection */ + void *pAux, /* Pointer to tokenizer hash table */ + int argc, /* Number of elements in argv array */ + const char * const *argv, /* xCreate/xConnect argument array */ + sqlite3_vtab **ppVtab, /* OUT: New sqlite3_vtab object */ + char **pzErr /* OUT: sqlite3_malloc'd error message */ +){ + return fts3InitVtab(1, db, pAux, argc, argv, ppVtab, pzErr); +} + +/* +** Implementation of the xBestIndex method for FTS3 tables. There +** are three possible strategies, in order of preference: +** +** 1. Direct lookup by rowid or docid. +** 2. Full-text search using a MATCH operator on a non-docid column. +** 3. Linear scan of %_content table. +*/ +static int fts3BestIndexMethod(sqlite3_vtab *pVTab, sqlite3_index_info *pInfo){ + Fts3Table *p = (Fts3Table *)pVTab; + int i; /* Iterator variable */ + int iCons = -1; /* Index of constraint to use */ + int iLangidCons = -1; /* Index of langid=x constraint, if present */ + + /* By default use a full table scan. This is an expensive option, + ** so search through the constraints to see if a more efficient + ** strategy is possible. + */ + pInfo->idxNum = FTS3_FULLSCAN_SEARCH; + pInfo->estimatedCost = 500000; + for(i=0; inConstraint; i++){ + struct sqlite3_index_constraint *pCons = &pInfo->aConstraint[i]; + if( pCons->usable==0 ) continue; + + /* A direct lookup on the rowid or docid column. Assign a cost of 1.0. */ + if( iCons<0 + && pCons->op==SQLITE_INDEX_CONSTRAINT_EQ + && (pCons->iColumn<0 || pCons->iColumn==p->nColumn+1 ) + ){ + pInfo->idxNum = FTS3_DOCID_SEARCH; + pInfo->estimatedCost = 1.0; + iCons = i; + } + + /* A MATCH constraint. Use a full-text search. + ** + ** If there is more than one MATCH constraint available, use the first + ** one encountered. If there is both a MATCH constraint and a direct + ** rowid/docid lookup, prefer the MATCH strategy. This is done even + ** though the rowid/docid lookup is faster than a MATCH query, selecting + ** it would lead to an "unable to use function MATCH in the requested + ** context" error. + */ + if( pCons->op==SQLITE_INDEX_CONSTRAINT_MATCH + && pCons->iColumn>=0 && pCons->iColumn<=p->nColumn + ){ + pInfo->idxNum = FTS3_FULLTEXT_SEARCH + pCons->iColumn; + pInfo->estimatedCost = 2.0; + iCons = i; + } + + /* Equality constraint on the langid column */ + if( pCons->op==SQLITE_INDEX_CONSTRAINT_EQ + && pCons->iColumn==p->nColumn + 2 + ){ + iLangidCons = i; + } + } + + if( iCons>=0 ){ + pInfo->aConstraintUsage[iCons].argvIndex = 1; + pInfo->aConstraintUsage[iCons].omit = 1; + } + if( iLangidCons>=0 ){ + pInfo->aConstraintUsage[iLangidCons].argvIndex = 2; + } + + /* Regardless of the strategy selected, FTS can deliver rows in rowid (or + ** docid) order. Both ascending and descending are possible. + */ + if( pInfo->nOrderBy==1 ){ + struct sqlite3_index_orderby *pOrder = &pInfo->aOrderBy[0]; + if( pOrder->iColumn<0 || pOrder->iColumn==p->nColumn+1 ){ + if( pOrder->desc ){ + pInfo->idxStr = "DESC"; + }else{ + pInfo->idxStr = "ASC"; + } + pInfo->orderByConsumed = 1; + } + } + + assert( p->pSegments==0 ); + return SQLITE_OK; +} + +/* +** Implementation of xOpen method. +*/ +static int fts3OpenMethod(sqlite3_vtab *pVTab, sqlite3_vtab_cursor **ppCsr){ + sqlite3_vtab_cursor *pCsr; /* Allocated cursor */ + + UNUSED_PARAMETER(pVTab); + + /* Allocate a buffer large enough for an Fts3Cursor structure. If the + ** allocation succeeds, zero it and return SQLITE_OK. Otherwise, + ** if the allocation fails, return SQLITE_NOMEM. + */ + *ppCsr = pCsr = (sqlite3_vtab_cursor *)sqlite3_malloc(sizeof(Fts3Cursor)); + if( !pCsr ){ + return SQLITE_NOMEM; + } + memset(pCsr, 0, sizeof(Fts3Cursor)); + return SQLITE_OK; +} + +/* +** Close the cursor. For additional information see the documentation +** on the xClose method of the virtual table interface. +*/ +static int fts3CloseMethod(sqlite3_vtab_cursor *pCursor){ + Fts3Cursor *pCsr = (Fts3Cursor *)pCursor; + assert( ((Fts3Table *)pCsr->base.pVtab)->pSegments==0 ); + sqlite3_finalize(pCsr->pStmt); + sqlite3Fts3ExprFree(pCsr->pExpr); + sqlite3Fts3FreeDeferredTokens(pCsr); + sqlite3_free(pCsr->aDoclist); + sqlite3_free(pCsr->aMatchinfo); + assert( ((Fts3Table *)pCsr->base.pVtab)->pSegments==0 ); + sqlite3_free(pCsr); + return SQLITE_OK; +} + +/* +** If pCsr->pStmt has not been prepared (i.e. if pCsr->pStmt==0), then +** compose and prepare an SQL statement of the form: +** +** "SELECT FROM %_content WHERE rowid = ?" +** +** (or the equivalent for a content=xxx table) and set pCsr->pStmt to +** it. If an error occurs, return an SQLite error code. +** +** Otherwise, set *ppStmt to point to pCsr->pStmt and return SQLITE_OK. +*/ +static int fts3CursorSeekStmt(Fts3Cursor *pCsr, sqlite3_stmt **ppStmt){ + int rc = SQLITE_OK; + if( pCsr->pStmt==0 ){ + Fts3Table *p = (Fts3Table *)pCsr->base.pVtab; + char *zSql; + zSql = sqlite3_mprintf("SELECT %s WHERE rowid = ?", p->zReadExprlist); + if( !zSql ) return SQLITE_NOMEM; + rc = sqlite3_prepare_v2(p->db, zSql, -1, &pCsr->pStmt, 0); + sqlite3_free(zSql); + } + *ppStmt = pCsr->pStmt; + return rc; +} + +/* +** Position the pCsr->pStmt statement so that it is on the row +** of the %_content table that contains the last match. Return +** SQLITE_OK on success. +*/ +static int fts3CursorSeek(sqlite3_context *pContext, Fts3Cursor *pCsr){ + int rc = SQLITE_OK; + if( pCsr->isRequireSeek ){ + sqlite3_stmt *pStmt = 0; + + rc = fts3CursorSeekStmt(pCsr, &pStmt); + if( rc==SQLITE_OK ){ + sqlite3_bind_int64(pCsr->pStmt, 1, pCsr->iPrevId); + pCsr->isRequireSeek = 0; + if( SQLITE_ROW==sqlite3_step(pCsr->pStmt) ){ + return SQLITE_OK; + }else{ + rc = sqlite3_reset(pCsr->pStmt); + if( rc==SQLITE_OK && ((Fts3Table *)pCsr->base.pVtab)->zContentTbl==0 ){ + /* If no row was found and no error has occured, then the %_content + ** table is missing a row that is present in the full-text index. + ** The data structures are corrupt. */ + rc = FTS_CORRUPT_VTAB; + pCsr->isEof = 1; + } + } + } + } + + if( rc!=SQLITE_OK && pContext ){ + sqlite3_result_error_code(pContext, rc); + } + return rc; +} + +/* +** This function is used to process a single interior node when searching +** a b-tree for a term or term prefix. The node data is passed to this +** function via the zNode/nNode parameters. The term to search for is +** passed in zTerm/nTerm. +** +** If piFirst is not NULL, then this function sets *piFirst to the blockid +** of the child node that heads the sub-tree that may contain the term. +** +** If piLast is not NULL, then *piLast is set to the right-most child node +** that heads a sub-tree that may contain a term for which zTerm/nTerm is +** a prefix. +** +** If an OOM error occurs, SQLITE_NOMEM is returned. Otherwise, SQLITE_OK. +*/ +static int fts3ScanInteriorNode( + const char *zTerm, /* Term to select leaves for */ + int nTerm, /* Size of term zTerm in bytes */ + const char *zNode, /* Buffer containing segment interior node */ + int nNode, /* Size of buffer at zNode */ + sqlite3_int64 *piFirst, /* OUT: Selected child node */ + sqlite3_int64 *piLast /* OUT: Selected child node */ +){ + int rc = SQLITE_OK; /* Return code */ + const char *zCsr = zNode; /* Cursor to iterate through node */ + const char *zEnd = &zCsr[nNode];/* End of interior node buffer */ + char *zBuffer = 0; /* Buffer to load terms into */ + int nAlloc = 0; /* Size of allocated buffer */ + int isFirstTerm = 1; /* True when processing first term on page */ + sqlite3_int64 iChild; /* Block id of child node to descend to */ + + /* Skip over the 'height' varint that occurs at the start of every + ** interior node. Then load the blockid of the left-child of the b-tree + ** node into variable iChild. + ** + ** Even if the data structure on disk is corrupted, this (reading two + ** varints from the buffer) does not risk an overread. If zNode is a + ** root node, then the buffer comes from a SELECT statement. SQLite does + ** not make this guarantee explicitly, but in practice there are always + ** either more than 20 bytes of allocated space following the nNode bytes of + ** contents, or two zero bytes. Or, if the node is read from the %_segments + ** table, then there are always 20 bytes of zeroed padding following the + ** nNode bytes of content (see sqlite3Fts3ReadBlock() for details). + */ + zCsr += sqlite3Fts3GetVarint(zCsr, &iChild); + zCsr += sqlite3Fts3GetVarint(zCsr, &iChild); + if( zCsr>zEnd ){ + return FTS_CORRUPT_VTAB; + } + + while( zCsrzEnd ){ + rc = FTS_CORRUPT_VTAB; + goto finish_scan; + } + if( nPrefix+nSuffix>nAlloc ){ + char *zNew; + nAlloc = (nPrefix+nSuffix) * 2; + zNew = (char *)sqlite3_realloc(zBuffer, nAlloc); + if( !zNew ){ + rc = SQLITE_NOMEM; + goto finish_scan; + } + zBuffer = zNew; + } + assert( zBuffer ); + memcpy(&zBuffer[nPrefix], zCsr, nSuffix); + nBuffer = nPrefix + nSuffix; + zCsr += nSuffix; + + /* Compare the term we are searching for with the term just loaded from + ** the interior node. If the specified term is greater than or equal + ** to the term from the interior node, then all terms on the sub-tree + ** headed by node iChild are smaller than zTerm. No need to search + ** iChild. + ** + ** If the interior node term is larger than the specified term, then + ** the tree headed by iChild may contain the specified term. + */ + cmp = memcmp(zTerm, zBuffer, (nBuffer>nTerm ? nTerm : nBuffer)); + if( piFirst && (cmp<0 || (cmp==0 && nBuffer>nTerm)) ){ + *piFirst = iChild; + piFirst = 0; + } + + if( piLast && cmp<0 ){ + *piLast = iChild; + piLast = 0; + } + + iChild++; + }; + + if( piFirst ) *piFirst = iChild; + if( piLast ) *piLast = iChild; + + finish_scan: + sqlite3_free(zBuffer); + return rc; +} + + +/* +** The buffer pointed to by argument zNode (size nNode bytes) contains an +** interior node of a b-tree segment. The zTerm buffer (size nTerm bytes) +** contains a term. This function searches the sub-tree headed by the zNode +** node for the range of leaf nodes that may contain the specified term +** or terms for which the specified term is a prefix. +** +** If piLeaf is not NULL, then *piLeaf is set to the blockid of the +** left-most leaf node in the tree that may contain the specified term. +** If piLeaf2 is not NULL, then *piLeaf2 is set to the blockid of the +** right-most leaf node that may contain a term for which the specified +** term is a prefix. +** +** It is possible that the range of returned leaf nodes does not contain +** the specified term or any terms for which it is a prefix. However, if the +** segment does contain any such terms, they are stored within the identified +** range. Because this function only inspects interior segment nodes (and +** never loads leaf nodes into memory), it is not possible to be sure. +** +** If an error occurs, an error code other than SQLITE_OK is returned. +*/ +static int fts3SelectLeaf( + Fts3Table *p, /* Virtual table handle */ + const char *zTerm, /* Term to select leaves for */ + int nTerm, /* Size of term zTerm in bytes */ + const char *zNode, /* Buffer containing segment interior node */ + int nNode, /* Size of buffer at zNode */ + sqlite3_int64 *piLeaf, /* Selected leaf node */ + sqlite3_int64 *piLeaf2 /* Selected leaf node */ +){ + int rc; /* Return code */ + int iHeight; /* Height of this node in tree */ + + assert( piLeaf || piLeaf2 ); + + sqlite3Fts3GetVarint32(zNode, &iHeight); + rc = fts3ScanInteriorNode(zTerm, nTerm, zNode, nNode, piLeaf, piLeaf2); + assert( !piLeaf2 || !piLeaf || rc!=SQLITE_OK || (*piLeaf<=*piLeaf2) ); + + if( rc==SQLITE_OK && iHeight>1 ){ + char *zBlob = 0; /* Blob read from %_segments table */ + int nBlob; /* Size of zBlob in bytes */ + + if( piLeaf && piLeaf2 && (*piLeaf!=*piLeaf2) ){ + rc = sqlite3Fts3ReadBlock(p, *piLeaf, &zBlob, &nBlob, 0); + if( rc==SQLITE_OK ){ + rc = fts3SelectLeaf(p, zTerm, nTerm, zBlob, nBlob, piLeaf, 0); } + sqlite3_free(zBlob); + piLeaf = 0; + zBlob = 0; } - state = trans[state][token]; - zSql++; + + if( rc==SQLITE_OK ){ + rc = sqlite3Fts3ReadBlock(p, piLeaf?*piLeaf:*piLeaf2, &zBlob, &nBlob, 0); + } + if( rc==SQLITE_OK ){ + rc = fts3SelectLeaf(p, zTerm, nTerm, zBlob, nBlob, piLeaf, piLeaf2); + } + sqlite3_free(zBlob); } - return state==0; + + return rc; } -#ifndef SQLITE_OMIT_UTF16 /* -** This routine is the same as the sqlite3_complete() routine described -** above, except that the parameter is required to be UTF-16 encoded, not -** UTF-8. +** This function is used to create delta-encoded serialized lists of FTS3 +** varints. Each call to this function appends a single varint to a list. */ -SQLITE_API int sqlite3_complete16(const void *zSql){ - sqlite3_value *pVal; - char const *zSql8; - int rc = SQLITE_NOMEM; - -#ifndef SQLITE_OMIT_AUTOINIT - rc = sqlite3_initialize(); - if( rc ) return rc; -#endif - pVal = sqlite3ValueNew(0); - sqlite3ValueSetStr(pVal, -1, zSql, SQLITE_UTF16NATIVE, SQLITE_STATIC); - zSql8 = sqlite3ValueText(pVal, SQLITE_UTF8); - if( zSql8 ){ - rc = sqlite3_complete(zSql8); - }else{ - rc = SQLITE_NOMEM; - } - sqlite3ValueFree(pVal); - return sqlite3ApiExit(0, rc); +static void fts3PutDeltaVarint( + char **pp, /* IN/OUT: Output pointer */ + sqlite3_int64 *piPrev, /* IN/OUT: Previous value written to list */ + sqlite3_int64 iVal /* Write this value to the list */ +){ + assert( iVal-*piPrev > 0 || (*piPrev==0 && iVal==0) ); + *pp += sqlite3Fts3PutVarint(*pp, iVal-*piPrev); + *piPrev = iVal; } -#endif /* SQLITE_OMIT_UTF16 */ -#endif /* SQLITE_OMIT_COMPLETE */ -/************** End of complete.c ********************************************/ -/************** Begin file main.c ********************************************/ /* -** 2001 September 15 -** -** The author disclaims copyright to this source code. In place of -** a legal notice, here is a blessing: -** -** May you do good and not evil. -** May you find forgiveness for yourself and forgive others. -** May you share freely, never taking more than you give. +** When this function is called, *ppPoslist is assumed to point to the +** start of a position-list. After it returns, *ppPoslist points to the +** first byte after the position-list. ** -************************************************************************* -** Main file for the SQLite library. The routines in this file -** implement the programmer interface to the library. Routines in -** other files are for internal use by SQLite and should not be -** accessed by users of the library. +** A position list is list of positions (delta encoded) and columns for +** a single document record of a doclist. So, in other words, this +** routine advances *ppPoslist so that it points to the next docid in +** the doclist, or to the first byte past the end of the doclist. ** -** $Id: main.c,v 1.560 2009/06/26 15:14:55 drh Exp $ +** If pp is not NULL, then the contents of the position list are copied +** to *pp. *pp is set to point to the first byte past the last byte copied +** before this function returns. */ +static void fts3PoslistCopy(char **pp, char **ppPoslist){ + char *pEnd = *ppPoslist; + char c = 0; + + /* The end of a position list is marked by a zero encoded as an FTS3 + ** varint. A single POS_END (0) byte. Except, if the 0 byte is preceded by + ** a byte with the 0x80 bit set, then it is not a varint 0, but the tail + ** of some other, multi-byte, value. + ** + ** The following while-loop moves pEnd to point to the first byte that is not + ** immediately preceded by a byte with the 0x80 bit set. Then increments + ** pEnd once more so that it points to the byte immediately following the + ** last byte in the position-list. + */ + while( *pEnd | c ){ + c = *pEnd++ & 0x80; + testcase( c!=0 && (*pEnd)==0 ); + } + pEnd++; /* Advance past the POS_END terminator byte */ + + if( pp ){ + int n = (int)(pEnd - *ppPoslist); + char *p = *pp; + memcpy(p, *ppPoslist, n); + p += n; + *pp = p; + } + *ppPoslist = pEnd; +} -#ifdef SQLITE_ENABLE_FTS3 -/************** Include fts3.h in the middle of main.c ***********************/ -/************** Begin file fts3.h ********************************************/ /* -** 2006 Oct 10 +** When this function is called, *ppPoslist is assumed to point to the +** start of a column-list. After it returns, *ppPoslist points to the +** to the terminator (POS_COLUMN or POS_END) byte of the column-list. ** -** The author disclaims copyright to this source code. In place of -** a legal notice, here is a blessing: -** -** May you do good and not evil. -** May you find forgiveness for yourself and forgive others. -** May you share freely, never taking more than you give. +** A column-list is list of delta-encoded positions for a single column +** within a single document within a doclist. ** -****************************************************************************** +** The column-list is terminated either by a POS_COLUMN varint (1) or +** a POS_END varint (0). This routine leaves *ppPoslist pointing to +** the POS_COLUMN or POS_END that terminates the column-list. ** -** This header file is used by programs that want to link against the -** FTS3 library. All it does is declare the sqlite3Fts3Init() interface. +** If pp is not NULL, then the contents of the column-list are copied +** to *pp. *pp is set to point to the first byte past the last byte copied +** before this function returns. The POS_COLUMN or POS_END terminator +** is not copied into *pp. */ +static void fts3ColumnlistCopy(char **pp, char **ppPoslist){ + char *pEnd = *ppPoslist; + char c = 0; -#if 0 -extern "C" { -#endif /* __cplusplus */ - -SQLITE_PRIVATE int sqlite3Fts3Init(sqlite3 *db); + /* A column-list is terminated by either a 0x01 or 0x00 byte that is + ** not part of a multi-byte varint. + */ + while( 0xFE & (*pEnd | c) ){ + c = *pEnd++ & 0x80; + testcase( c!=0 && ((*pEnd)&0xfe)==0 ); + } + if( pp ){ + int n = (int)(pEnd - *ppPoslist); + char *p = *pp; + memcpy(p, *ppPoslist, n); + p += n; + *pp = p; + } + *ppPoslist = pEnd; +} -#if 0 -} /* extern "C" */ -#endif /* __cplusplus */ +/* +** Value used to signify the end of an position-list. This is safe because +** it is not possible to have a document with 2^31 terms. +*/ +#define POSITION_LIST_END 0x7fffffff -/************** End of fts3.h ************************************************/ -/************** Continuing where we left off in main.c ***********************/ -#endif -#ifdef SQLITE_ENABLE_RTREE -/************** Include rtree.h in the middle of main.c **********************/ -/************** Begin file rtree.h *******************************************/ /* -** 2008 May 26 -** -** The author disclaims copyright to this source code. In place of -** a legal notice, here is a blessing: -** -** May you do good and not evil. -** May you find forgiveness for yourself and forgive others. -** May you share freely, never taking more than you give. +** This function is used to help parse position-lists. When this function is +** called, *pp may point to the start of the next varint in the position-list +** being parsed, or it may point to 1 byte past the end of the position-list +** (in which case **pp will be a terminator bytes POS_END (0) or +** (1)). ** -****************************************************************************** +** If *pp points past the end of the current position-list, set *pi to +** POSITION_LIST_END and return. Otherwise, read the next varint from *pp, +** increment the current value of *pi by the value read, and set *pp to +** point to the next value before returning. ** -** This header file is used by programs that want to link against the -** RTREE library. All it does is declare the sqlite3RtreeInit() interface. +** Before calling this routine *pi must be initialized to the value of +** the previous position, or zero if we are reading the first position +** in the position-list. Because positions are delta-encoded, the value +** of the previous position is needed in order to compute the value of +** the next position. */ +static void fts3ReadNextPos( + char **pp, /* IN/OUT: Pointer into position-list buffer */ + sqlite3_int64 *pi /* IN/OUT: Value read from position-list */ +){ + if( (**pp)&0xFE ){ + fts3GetDeltaVarint(pp, pi); + *pi -= 2; + }else{ + *pi = POSITION_LIST_END; + } +} -#if 0 -extern "C" { -#endif /* __cplusplus */ +/* +** If parameter iCol is not 0, write an POS_COLUMN (1) byte followed by +** the value of iCol encoded as a varint to *pp. This will start a new +** column list. +** +** Set *pp to point to the byte just after the last byte written before +** returning (do not modify it if iCol==0). Return the total number of bytes +** written (0 if iCol==0). +*/ +static int fts3PutColNumber(char **pp, int iCol){ + int n = 0; /* Number of bytes written */ + if( iCol ){ + char *p = *pp; /* Output pointer */ + n = 1 + sqlite3Fts3PutVarint(&p[1], iCol); + *p = 0x01; + *pp = &p[n]; + } + return n; +} -SQLITE_PRIVATE int sqlite3RtreeInit(sqlite3 *db); +/* +** Compute the union of two position lists. The output written +** into *pp contains all positions of both *pp1 and *pp2 in sorted +** order and with any duplicates removed. All pointers are +** updated appropriately. The caller is responsible for insuring +** that there is enough space in *pp to hold the complete output. +*/ +static void fts3PoslistMerge( + char **pp, /* Output buffer */ + char **pp1, /* Left input list */ + char **pp2 /* Right input list */ +){ + char *p = *pp; + char *p1 = *pp1; + char *p2 = *pp2; + + while( *p1 || *p2 ){ + int iCol1; /* The current column index in pp1 */ + int iCol2; /* The current column index in pp2 */ + + if( *p1==POS_COLUMN ) sqlite3Fts3GetVarint32(&p1[1], &iCol1); + else if( *p1==POS_END ) iCol1 = POSITION_LIST_END; + else iCol1 = 0; + + if( *p2==POS_COLUMN ) sqlite3Fts3GetVarint32(&p2[1], &iCol2); + else if( *p2==POS_END ) iCol2 = POSITION_LIST_END; + else iCol2 = 0; + + if( iCol1==iCol2 ){ + sqlite3_int64 i1 = 0; /* Last position from pp1 */ + sqlite3_int64 i2 = 0; /* Last position from pp2 */ + sqlite3_int64 iPrev = 0; + int n = fts3PutColNumber(&p, iCol1); + p1 += n; + p2 += n; + + /* At this point, both p1 and p2 point to the start of column-lists + ** for the same column (the column with index iCol1 and iCol2). + ** A column-list is a list of non-negative delta-encoded varints, each + ** incremented by 2 before being stored. Each list is terminated by a + ** POS_END (0) or POS_COLUMN (1). The following block merges the two lists + ** and writes the results to buffer p. p is left pointing to the byte + ** after the list written. No terminator (POS_END or POS_COLUMN) is + ** written to the output. + */ + fts3GetDeltaVarint(&p1, &i1); + fts3GetDeltaVarint(&p2, &i2); + do { + fts3PutDeltaVarint(&p, &iPrev, (i1pos(*pp1) && pos(*pp2)-pos(*pp1)<=nToken). i.e. +** when the *pp1 token appears before the *pp2 token, but not more than nToken +** slots before it. +** +** e.g. nToken==1 searches for adjacent positions. */ +static int fts3PoslistPhraseMerge( + char **pp, /* IN/OUT: Preallocated output buffer */ + int nToken, /* Maximum difference in token positions */ + int isSaveLeft, /* Save the left position */ + int isExact, /* If *pp1 is exactly nTokens before *pp2 */ + char **pp1, /* IN/OUT: Left input list */ + char **pp2 /* IN/OUT: Right input list */ +){ + char *p = *pp; + char *p1 = *pp1; + char *p2 = *pp2; + int iCol1 = 0; + int iCol2 = 0; -#if 0 -extern "C" { -#endif /* __cplusplus */ + /* Never set both isSaveLeft and isExact for the same invocation. */ + assert( isSaveLeft==0 || isExact==0 ); -SQLITE_PRIVATE int sqlite3IcuInit(sqlite3 *db); + assert( p!=0 && *p1!=0 && *p2!=0 ); + if( *p1==POS_COLUMN ){ + p1++; + p1 += sqlite3Fts3GetVarint32(p1, &iCol1); + } + if( *p2==POS_COLUMN ){ + p2++; + p2 += sqlite3Fts3GetVarint32(p2, &iCol2); + } -#if 0 -} /* extern "C" */ -#endif /* __cplusplus */ + while( 1 ){ + if( iCol1==iCol2 ){ + char *pSave = p; + sqlite3_int64 iPrev = 0; + sqlite3_int64 iPos1 = 0; + sqlite3_int64 iPos2 = 0; + if( iCol1 ){ + *p++ = POS_COLUMN; + p += sqlite3Fts3PutVarint(p, iCol1); + } -/************** End of sqliteicu.h *******************************************/ -/************** Continuing where we left off in main.c ***********************/ -#endif + assert( *p1!=POS_END && *p1!=POS_COLUMN ); + assert( *p2!=POS_END && *p2!=POS_COLUMN ); + fts3GetDeltaVarint(&p1, &iPos1); iPos1 -= 2; + fts3GetDeltaVarint(&p2, &iPos2); iPos2 -= 2; -/* -** The version of the library -*/ -#ifndef SQLITE_AMALGAMATION -SQLITE_API const char sqlite3_version[] = SQLITE_VERSION; -#endif -SQLITE_API const char *sqlite3_libversion(void){ return sqlite3_version; } -SQLITE_API int sqlite3_libversion_number(void){ return SQLITE_VERSION_NUMBER; } -SQLITE_API int sqlite3_threadsafe(void){ return SQLITE_THREADSAFE; } + while( 1 ){ + if( iPos2==iPos1+nToken + || (isExact==0 && iPos2>iPos1 && iPos2<=iPos1+nToken) + ){ + sqlite3_int64 iSave; + iSave = isSaveLeft ? iPos1 : iPos2; + fts3PutDeltaVarint(&p, &iPrev, iSave+2); iPrev -= 2; + pSave = 0; + assert( p ); + } + if( (!isSaveLeft && iPos2<=(iPos1+nToken)) || iPos2<=iPos1 ){ + if( (*p2&0xFE)==0 ) break; + fts3GetDeltaVarint(&p2, &iPos2); iPos2 -= 2; + }else{ + if( (*p1&0xFE)==0 ) break; + fts3GetDeltaVarint(&p1, &iPos1); iPos1 -= 2; + } + } -#if !defined(SQLITE_OMIT_TRACE) && defined(SQLITE_ENABLE_IOTRACE) -/* -** If the following function pointer is not NULL and if -** SQLITE_ENABLE_IOTRACE is enabled, then messages describing -** I/O active are written using this function. These messages -** are intended for debugging activity only. -*/ -SQLITE_PRIVATE void (*sqlite3IoTrace)(const char*, ...) = 0; -#endif + if( pSave ){ + assert( pp && p ); + p = pSave; + } + + fts3ColumnlistCopy(0, &p1); + fts3ColumnlistCopy(0, &p2); + assert( (*p1&0xFE)==0 && (*p2&0xFE)==0 ); + if( 0==*p1 || 0==*p2 ) break; + + p1++; + p1 += sqlite3Fts3GetVarint32(p1, &iCol1); + p2++; + p2 += sqlite3Fts3GetVarint32(p2, &iCol2); + } + + /* Advance pointer p1 or p2 (whichever corresponds to the smaller of + ** iCol1 and iCol2) so that it points to either the 0x00 that marks the + ** end of the position list, or the 0x01 that precedes the next + ** column-number in the position list. + */ + else if( iCol1=pEnd ){ + *pp = 0; + }else{ + sqlite3_int64 iVal; + *pp += sqlite3Fts3GetVarint(*pp, &iVal); + if( bDescIdx ){ + *pVal -= iVal; + }else{ + *pVal += iVal; + } + } +} + +/* +** This function is used to write a single varint to a buffer. The varint +** is written to *pp. Before returning, *pp is set to point 1 byte past the +** end of the value written. ** -** Let X be the first thread to enter this routine. Let Y be some other -** thread. Then while the initial invocation of this routine by X is -** incomplete, it is required that: +** If *pbFirst is zero when this function is called, the value written to +** the buffer is that of parameter iVal. ** -** * Calls to this routine from Y must block until the outer-most -** call by X completes. +** If *pbFirst is non-zero when this function is called, then the value +** written is either (iVal-*piPrev) (if bDescIdx is zero) or (*piPrev-iVal) +** (if bDescIdx is non-zero). ** -** * Recursive calls to this routine from thread X return immediately -** without blocking. +** Before returning, this function always sets *pbFirst to 1 and *piPrev +** to the value of parameter iVal. */ -SQLITE_API int sqlite3_initialize(void){ - sqlite3_mutex *pMaster; /* The main static mutex */ - int rc; /* Result code */ - -#ifdef SQLITE_OMIT_WSD - rc = sqlite3_wsd_init(4096, 24); - if( rc!=SQLITE_OK ){ - return rc; +static void fts3PutDeltaVarint3( + char **pp, /* IN/OUT: Output pointer */ + int bDescIdx, /* True for descending docids */ + sqlite3_int64 *piPrev, /* IN/OUT: Previous value written to list */ + int *pbFirst, /* IN/OUT: True after first int written */ + sqlite3_int64 iVal /* Write this value to the list */ +){ + sqlite3_int64 iWrite; + if( bDescIdx==0 || *pbFirst==0 ){ + iWrite = iVal - *piPrev; + }else{ + iWrite = *piPrev - iVal; } -#endif + assert( *pbFirst || *piPrev==0 ); + assert( *pbFirst==0 || iWrite>0 ); + *pp += sqlite3Fts3PutVarint(*pp, iWrite); + *piPrev = iVal; + *pbFirst = 1; +} - /* If SQLite is already completely initialized, then this call - ** to sqlite3_initialize() should be a no-op. But the initialization - ** must be complete. So isInit must not be set until the very end - ** of this routine. - */ - if( sqlite3GlobalConfig.isInit ) return SQLITE_OK; - /* Make sure the mutex subsystem is initialized. If unable to - ** initialize the mutex subsystem, return early with the error. - ** If the system is so sick that we are unable to allocate a mutex, - ** there is not much SQLite is going to be able to do. - ** - ** The mutex subsystem must take care of serializing its own - ** initialization. - */ - rc = sqlite3MutexInit(); - if( rc ) return rc; +/* +** This macro is used by various functions that merge doclists. The two +** arguments are 64-bit docid values. If the value of the stack variable +** bDescDoclist is 0 when this macro is invoked, then it returns (i1-i2). +** Otherwise, (i2-i1). +** +** Using this makes it easier to write code that can merge doclists that are +** sorted in either ascending or descending order. +*/ +#define DOCID_CMP(i1, i2) ((bDescDoclist?-1:1) * (i1-i2)) - /* Initialize the malloc() system and the recursive pInitMutex mutex. - ** This operation is protected by the STATIC_MASTER mutex. Note that - ** MutexAlloc() is called for a static mutex prior to initializing the - ** malloc subsystem - this implies that the allocation of a static - ** mutex must not require support from the malloc subsystem. +/* +** This function does an "OR" merge of two doclists (output contains all +** positions contained in either argument doclist). If the docids in the +** input doclists are sorted in ascending order, parameter bDescDoclist +** should be false. If they are sorted in ascending order, it should be +** passed a non-zero value. +** +** If no error occurs, *paOut is set to point at an sqlite3_malloc'd buffer +** containing the output doclist and SQLITE_OK is returned. In this case +** *pnOut is set to the number of bytes in the output doclist. +** +** If an error occurs, an SQLite error code is returned. The output values +** are undefined in this case. +*/ +static int fts3DoclistOrMerge( + int bDescDoclist, /* True if arguments are desc */ + char *a1, int n1, /* First doclist */ + char *a2, int n2, /* Second doclist */ + char **paOut, int *pnOut /* OUT: Malloc'd doclist */ +){ + sqlite3_int64 i1 = 0; + sqlite3_int64 i2 = 0; + sqlite3_int64 iPrev = 0; + char *pEnd1 = &a1[n1]; + char *pEnd2 = &a2[n2]; + char *p1 = a1; + char *p2 = a2; + char *p; + char *aOut; + int bFirstOut = 0; + + *paOut = 0; + *pnOut = 0; + + /* Allocate space for the output. Both the input and output doclists + ** are delta encoded. If they are in ascending order (bDescDoclist==0), + ** then the first docid in each list is simply encoded as a varint. For + ** each subsequent docid, the varint stored is the difference between the + ** current and previous docid (a positive number - since the list is in + ** ascending order). + ** + ** The first docid written to the output is therefore encoded using the + ** same number of bytes as it is in whichever of the input lists it is + ** read from. And each subsequent docid read from the same input list + ** consumes either the same or less bytes as it did in the input (since + ** the difference between it and the previous value in the output must + ** be a positive value less than or equal to the delta value read from + ** the input list). The same argument applies to all but the first docid + ** read from the 'other' list. And to the contents of all position lists + ** that will be copied and merged from the input to the output. + ** + ** However, if the first docid copied to the output is a negative number, + ** then the encoding of the first docid from the 'other' input list may + ** be larger in the output than it was in the input (since the delta value + ** may be a larger positive integer than the actual docid). + ** + ** The space required to store the output is therefore the sum of the + ** sizes of the two inputs, plus enough space for exactly one of the input + ** docids to grow. + ** + ** A symetric argument may be made if the doclists are in descending + ** order. */ - pMaster = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER); - sqlite3_mutex_enter(pMaster); - if( !sqlite3GlobalConfig.isMallocInit ){ - rc = sqlite3MallocInit(); - } - if( rc==SQLITE_OK ){ - sqlite3GlobalConfig.isMallocInit = 1; - if( !sqlite3GlobalConfig.pInitMutex ){ - sqlite3GlobalConfig.pInitMutex = sqlite3MutexAlloc(SQLITE_MUTEX_RECURSIVE); - if( sqlite3GlobalConfig.bCoreMutex && !sqlite3GlobalConfig.pInitMutex ){ - rc = SQLITE_NOMEM; - } + aOut = sqlite3_malloc(n1+n2+FTS3_VARINT_MAX-1); + if( !aOut ) return SQLITE_NOMEM; + + p = aOut; + fts3GetDeltaVarint3(&p1, pEnd1, 0, &i1); + fts3GetDeltaVarint3(&p2, pEnd2, 0, &i2); + while( p1 || p2 ){ + sqlite3_int64 iDiff = DOCID_CMP(i1, i2); + + if( p2 && p1 && iDiff==0 ){ + fts3PutDeltaVarint3(&p, bDescDoclist, &iPrev, &bFirstOut, i1); + fts3PoslistMerge(&p, &p1, &p2); + fts3GetDeltaVarint3(&p1, pEnd1, bDescDoclist, &i1); + fts3GetDeltaVarint3(&p2, pEnd2, bDescDoclist, &i2); + }else if( !p2 || (p1 && iDiff<0) ){ + fts3PutDeltaVarint3(&p, bDescDoclist, &iPrev, &bFirstOut, i1); + fts3PoslistCopy(&p, &p1); + fts3GetDeltaVarint3(&p1, pEnd1, bDescDoclist, &i1); + }else{ + fts3PutDeltaVarint3(&p, bDescDoclist, &iPrev, &bFirstOut, i2); + fts3PoslistCopy(&p, &p2); + fts3GetDeltaVarint3(&p2, pEnd2, bDescDoclist, &i2); } } - if( rc==SQLITE_OK ){ - sqlite3GlobalConfig.nRefInitMutex++; - } - sqlite3_mutex_leave(pMaster); - /* If unable to initialize the malloc subsystem, then return early. - ** There is little hope of getting SQLite to run if the malloc - ** subsystem cannot be initialized. - */ - if( rc!=SQLITE_OK ){ - return rc; - } + *paOut = aOut; + *pnOut = (int)(p-aOut); + assert( *pnOut<=n1+n2+FTS3_VARINT_MAX-1 ); + return SQLITE_OK; +} - /* Do the rest of the initialization under the recursive mutex so - ** that we will be able to handle recursive calls into - ** sqlite3_initialize(). The recursive calls normally come through - ** sqlite3_os_init() when it invokes sqlite3_vfs_register(), but other - ** recursive calls might also be possible. - */ - sqlite3_mutex_enter(sqlite3GlobalConfig.pInitMutex); - if( sqlite3GlobalConfig.isInit==0 && sqlite3GlobalConfig.inProgress==0 ){ - FuncDefHash *pHash = &GLOBAL(FuncDefHash, sqlite3GlobalFunctions); - sqlite3GlobalConfig.inProgress = 1; - memset(pHash, 0, sizeof(sqlite3GlobalFunctions)); - sqlite3RegisterGlobalFunctions(); - rc = sqlite3PcacheInitialize(); - if( rc==SQLITE_OK ){ - rc = sqlite3_os_init(); - } - if( rc==SQLITE_OK ){ - sqlite3PCacheBufferSetup( sqlite3GlobalConfig.pPage, - sqlite3GlobalConfig.szPage, sqlite3GlobalConfig.nPage); - sqlite3GlobalConfig.isInit = 1; +/* +** This function does a "phrase" merge of two doclists. In a phrase merge, +** the output contains a copy of each position from the right-hand input +** doclist for which there is a position in the left-hand input doclist +** exactly nDist tokens before it. +** +** If the docids in the input doclists are sorted in ascending order, +** parameter bDescDoclist should be false. If they are sorted in ascending +** order, it should be passed a non-zero value. +** +** The right-hand input doclist is overwritten by this function. +*/ +static void fts3DoclistPhraseMerge( + int bDescDoclist, /* True if arguments are desc */ + int nDist, /* Distance from left to right (1=adjacent) */ + char *aLeft, int nLeft, /* Left doclist */ + char *aRight, int *pnRight /* IN/OUT: Right/output doclist */ +){ + sqlite3_int64 i1 = 0; + sqlite3_int64 i2 = 0; + sqlite3_int64 iPrev = 0; + char *pEnd1 = &aLeft[nLeft]; + char *pEnd2 = &aRight[*pnRight]; + char *p1 = aLeft; + char *p2 = aRight; + char *p; + int bFirstOut = 0; + char *aOut = aRight; + + assert( nDist>0 ); + + p = aOut; + fts3GetDeltaVarint3(&p1, pEnd1, 0, &i1); + fts3GetDeltaVarint3(&p2, pEnd2, 0, &i2); + + while( p1 && p2 ){ + sqlite3_int64 iDiff = DOCID_CMP(i1, i2); + if( iDiff==0 ){ + char *pSave = p; + sqlite3_int64 iPrevSave = iPrev; + int bFirstOutSave = bFirstOut; + + fts3PutDeltaVarint3(&p, bDescDoclist, &iPrev, &bFirstOut, i1); + if( 0==fts3PoslistPhraseMerge(&p, nDist, 0, 1, &p1, &p2) ){ + p = pSave; + iPrev = iPrevSave; + bFirstOut = bFirstOutSave; + } + fts3GetDeltaVarint3(&p1, pEnd1, bDescDoclist, &i1); + fts3GetDeltaVarint3(&p2, pEnd2, bDescDoclist, &i2); + }else if( iDiff<0 ){ + fts3PoslistCopy(0, &p1); + fts3GetDeltaVarint3(&p1, pEnd1, bDescDoclist, &i1); + }else{ + fts3PoslistCopy(0, &p2); + fts3GetDeltaVarint3(&p2, pEnd2, bDescDoclist, &i2); } - sqlite3GlobalConfig.inProgress = 0; } - sqlite3_mutex_leave(sqlite3GlobalConfig.pInitMutex); - /* Go back under the static mutex and clean up the recursive - ** mutex to prevent a resource leak. - */ - sqlite3_mutex_enter(pMaster); - sqlite3GlobalConfig.nRefInitMutex--; - if( sqlite3GlobalConfig.nRefInitMutex<=0 ){ - assert( sqlite3GlobalConfig.nRefInitMutex==0 ); - sqlite3_mutex_free(sqlite3GlobalConfig.pInitMutex); - sqlite3GlobalConfig.pInitMutex = 0; + *pnRight = (int)(p - aOut); +} + +/* +** Argument pList points to a position list nList bytes in size. This +** function checks to see if the position list contains any entries for +** a token in position 0 (of any column). If so, it writes argument iDelta +** to the output buffer pOut, followed by a position list consisting only +** of the entries from pList at position 0, and terminated by an 0x00 byte. +** The value returned is the number of bytes written to pOut (if any). +*/ +SQLITE_PRIVATE int sqlite3Fts3FirstFilter( + sqlite3_int64 iDelta, /* Varint that may be written to pOut */ + char *pList, /* Position list (no 0x00 term) */ + int nList, /* Size of pList in bytes */ + char *pOut /* Write output here */ +){ + int nOut = 0; + int bWritten = 0; /* True once iDelta has been written */ + char *p = pList; + char *pEnd = &pList[nList]; + + if( *p!=0x01 ){ + if( *p==0x02 ){ + nOut += sqlite3Fts3PutVarint(&pOut[nOut], iDelta); + pOut[nOut++] = 0x02; + bWritten = 1; + } + fts3ColumnlistCopy(0, &p); } - sqlite3_mutex_leave(pMaster); - /* The following is just a sanity check to make sure SQLite has - ** been compiled correctly. It is important to run this code, but - ** we don't want to run it too often and soak up CPU cycles for no - ** reason. So we run it once during initialization. - */ -#ifndef NDEBUG -#ifndef SQLITE_OMIT_FLOATING_POINT - /* This section of code's only "output" is via assert() statements. */ - if ( rc==SQLITE_OK ){ - u64 x = (((u64)1)<<63)-1; - double y; - assert(sizeof(x)==8); - assert(sizeof(x)==sizeof(y)); - memcpy(&y, &x, 8); - assert( sqlite3IsNaN(y) ); + while( paaOutput); i++){ + if( pTS->aaOutput[i] ){ + if( !aOut ){ + aOut = pTS->aaOutput[i]; + nOut = pTS->anOutput[i]; + pTS->aaOutput[i] = 0; + }else{ + int nNew; + char *aNew; + + int rc = fts3DoclistOrMerge(p->bDescIdx, + pTS->aaOutput[i], pTS->anOutput[i], aOut, nOut, &aNew, &nNew + ); + if( rc!=SQLITE_OK ){ + sqlite3_free(aOut); + return rc; + } + + sqlite3_free(pTS->aaOutput[i]); + sqlite3_free(aOut); + pTS->aaOutput[i] = 0; + aOut = aNew; + nOut = nNew; + } + } } + + pTS->aaOutput[0] = aOut; + pTS->anOutput[0] = nOut; return SQLITE_OK; } /* -** This API allows applications to modify the global configuration of -** the SQLite library at run-time. +** Merge the doclist aDoclist/nDoclist into the TermSelect object passed +** as the first argument. The merge is an "OR" merge (see function +** fts3DoclistOrMerge() for details). ** -** This routine should only be called when there are no outstanding -** database connections or memory allocations. This routine is not -** threadsafe. Failure to heed these warnings can lead to unpredictable -** behavior. +** This function is called with the doclist for each term that matches +** a queried prefix. It merges all these doclists into one, the doclist +** for the specified prefix. Since there can be a very large number of +** doclists to merge, the merging is done pair-wise using the TermSelect +** object. +** +** This function returns SQLITE_OK if the merge is successful, or an +** SQLite error code (SQLITE_NOMEM) if an error occurs. */ -SQLITE_API int sqlite3_config(int op, ...){ - va_list ap; - int rc = SQLITE_OK; - - /* sqlite3_config() shall return SQLITE_MISUSE if it is invoked while - ** the SQLite library is in use. */ - if( sqlite3GlobalConfig.isInit ) return SQLITE_MISUSE; - - va_start(ap, op); - switch( op ){ - - /* Mutex configuration options are only available in a threadsafe - ** compile. - */ -#if SQLITE_THREADSAFE - case SQLITE_CONFIG_SINGLETHREAD: { - /* Disable all mutexing */ - sqlite3GlobalConfig.bCoreMutex = 0; - sqlite3GlobalConfig.bFullMutex = 0; - break; - } - case SQLITE_CONFIG_MULTITHREAD: { - /* Disable mutexing of database connections */ - /* Enable mutexing of core data structures */ - sqlite3GlobalConfig.bCoreMutex = 1; - sqlite3GlobalConfig.bFullMutex = 0; - break; - } - case SQLITE_CONFIG_SERIALIZED: { - /* Enable all mutexing */ - sqlite3GlobalConfig.bCoreMutex = 1; - sqlite3GlobalConfig.bFullMutex = 1; - break; - } - case SQLITE_CONFIG_MUTEX: { - /* Specify an alternative mutex implementation */ - sqlite3GlobalConfig.mutex = *va_arg(ap, sqlite3_mutex_methods*); - break; - } - case SQLITE_CONFIG_GETMUTEX: { - /* Retrieve the current mutex implementation */ - *va_arg(ap, sqlite3_mutex_methods*) = sqlite3GlobalConfig.mutex; - break; +static int fts3TermSelectMerge( + Fts3Table *p, /* FTS table handle */ + TermSelect *pTS, /* TermSelect object to merge into */ + char *aDoclist, /* Pointer to doclist */ + int nDoclist /* Size of aDoclist in bytes */ +){ + if( pTS->aaOutput[0]==0 ){ + /* If this is the first term selected, copy the doclist to the output + ** buffer using memcpy(). */ + pTS->aaOutput[0] = sqlite3_malloc(nDoclist); + pTS->anOutput[0] = nDoclist; + if( pTS->aaOutput[0] ){ + memcpy(pTS->aaOutput[0], aDoclist, nDoclist); + }else{ + return SQLITE_NOMEM; } -#endif + }else{ + char *aMerge = aDoclist; + int nMerge = nDoclist; + int iOut; + + for(iOut=0; iOutaaOutput); iOut++){ + if( pTS->aaOutput[iOut]==0 ){ + assert( iOut>0 ); + pTS->aaOutput[iOut] = aMerge; + pTS->anOutput[iOut] = nMerge; + break; + }else{ + char *aNew; + int nNew; + int rc = fts3DoclistOrMerge(p->bDescIdx, aMerge, nMerge, + pTS->aaOutput[iOut], pTS->anOutput[iOut], &aNew, &nNew + ); + if( rc!=SQLITE_OK ){ + if( aMerge!=aDoclist ) sqlite3_free(aMerge); + return rc; + } - case SQLITE_CONFIG_MALLOC: { - /* Specify an alternative malloc implementation */ - sqlite3GlobalConfig.m = *va_arg(ap, sqlite3_mem_methods*); - break; - } - case SQLITE_CONFIG_GETMALLOC: { - /* Retrieve the current malloc() implementation */ - if( sqlite3GlobalConfig.m.xMalloc==0 ) sqlite3MemSetDefault(); - *va_arg(ap, sqlite3_mem_methods*) = sqlite3GlobalConfig.m; - break; - } - case SQLITE_CONFIG_MEMSTATUS: { - /* Enable or disable the malloc status collection */ - sqlite3GlobalConfig.bMemstat = va_arg(ap, int); - break; + if( aMerge!=aDoclist ) sqlite3_free(aMerge); + sqlite3_free(pTS->aaOutput[iOut]); + pTS->aaOutput[iOut] = 0; + + aMerge = aNew; + nMerge = nNew; + if( (iOut+1)==SizeofArray(pTS->aaOutput) ){ + pTS->aaOutput[iOut] = aMerge; + pTS->anOutput[iOut] = nMerge; + } + } } - case SQLITE_CONFIG_SCRATCH: { - /* Designate a buffer for scratch memory space */ - sqlite3GlobalConfig.pScratch = va_arg(ap, void*); - sqlite3GlobalConfig.szScratch = va_arg(ap, int); - sqlite3GlobalConfig.nScratch = va_arg(ap, int); - break; + } + return SQLITE_OK; +} + +/* +** Append SegReader object pNew to the end of the pCsr->apSegment[] array. +*/ +static int fts3SegReaderCursorAppend( + Fts3MultiSegReader *pCsr, + Fts3SegReader *pNew +){ + if( (pCsr->nSegment%16)==0 ){ + Fts3SegReader **apNew; + int nByte = (pCsr->nSegment + 16)*sizeof(Fts3SegReader*); + apNew = (Fts3SegReader **)sqlite3_realloc(pCsr->apSegment, nByte); + if( !apNew ){ + sqlite3Fts3SegReaderFree(pNew); + return SQLITE_NOMEM; } - case SQLITE_CONFIG_PAGECACHE: { - /* Designate a buffer for page cache memory space */ - sqlite3GlobalConfig.pPage = va_arg(ap, void*); - sqlite3GlobalConfig.szPage = va_arg(ap, int); - sqlite3GlobalConfig.nPage = va_arg(ap, int); - break; + pCsr->apSegment = apNew; + } + pCsr->apSegment[pCsr->nSegment++] = pNew; + return SQLITE_OK; +} + +/* +** Add seg-reader objects to the Fts3MultiSegReader object passed as the +** 8th argument. +** +** This function returns SQLITE_OK if successful, or an SQLite error code +** otherwise. +*/ +static int fts3SegReaderCursor( + Fts3Table *p, /* FTS3 table handle */ + int iLangid, /* Language id */ + int iIndex, /* Index to search (from 0 to p->nIndex-1) */ + int iLevel, /* Level of segments to scan */ + const char *zTerm, /* Term to query for */ + int nTerm, /* Size of zTerm in bytes */ + int isPrefix, /* True for a prefix search */ + int isScan, /* True to scan from zTerm to EOF */ + Fts3MultiSegReader *pCsr /* Cursor object to populate */ +){ + int rc = SQLITE_OK; /* Error code */ + sqlite3_stmt *pStmt = 0; /* Statement to iterate through segments */ + int rc2; /* Result of sqlite3_reset() */ + + /* If iLevel is less than 0 and this is not a scan, include a seg-reader + ** for the pending-terms. If this is a scan, then this call must be being + ** made by an fts4aux module, not an FTS table. In this case calling + ** Fts3SegReaderPending might segfault, as the data structures used by + ** fts4aux are not completely populated. So it's easiest to filter these + ** calls out here. */ + if( iLevel<0 && p->aIndex ){ + Fts3SegReader *pSeg = 0; + rc = sqlite3Fts3SegReaderPending(p, iIndex, zTerm, nTerm, isPrefix, &pSeg); + if( rc==SQLITE_OK && pSeg ){ + rc = fts3SegReaderCursorAppend(pCsr, pSeg); } + } - case SQLITE_CONFIG_PCACHE: { - /* Specify an alternative page cache implementation */ - sqlite3GlobalConfig.pcache = *va_arg(ap, sqlite3_pcache_methods*); - break; + if( iLevel!=FTS3_SEGCURSOR_PENDING ){ + if( rc==SQLITE_OK ){ + rc = sqlite3Fts3AllSegdirs(p, iLangid, iIndex, iLevel, &pStmt); } - case SQLITE_CONFIG_GETPCACHE: { - if( sqlite3GlobalConfig.pcache.xInit==0 ){ - sqlite3PCacheSetDefault(); + while( rc==SQLITE_OK && SQLITE_ROW==(rc = sqlite3_step(pStmt)) ){ + Fts3SegReader *pSeg = 0; + + /* Read the values returned by the SELECT into local variables. */ + sqlite3_int64 iStartBlock = sqlite3_column_int64(pStmt, 1); + sqlite3_int64 iLeavesEndBlock = sqlite3_column_int64(pStmt, 2); + sqlite3_int64 iEndBlock = sqlite3_column_int64(pStmt, 3); + int nRoot = sqlite3_column_bytes(pStmt, 4); + char const *zRoot = sqlite3_column_blob(pStmt, 4); + + /* If zTerm is not NULL, and this segment is not stored entirely on its + ** root node, the range of leaves scanned can be reduced. Do this. */ + if( iStartBlock && zTerm ){ + sqlite3_int64 *pi = (isPrefix ? &iLeavesEndBlock : 0); + rc = fts3SelectLeaf(p, zTerm, nTerm, zRoot, nRoot, &iStartBlock, pi); + if( rc!=SQLITE_OK ) goto finished; + if( isPrefix==0 && isScan==0 ) iLeavesEndBlock = iStartBlock; } - *va_arg(ap, sqlite3_pcache_methods*) = sqlite3GlobalConfig.pcache; - break; + + rc = sqlite3Fts3SegReaderNew(pCsr->nSegment+1, + (isPrefix==0 && isScan==0), + iStartBlock, iLeavesEndBlock, + iEndBlock, zRoot, nRoot, &pSeg + ); + if( rc!=SQLITE_OK ) goto finished; + rc = fts3SegReaderCursorAppend(pCsr, pSeg); } + } -#if defined(SQLITE_ENABLE_MEMSYS3) || defined(SQLITE_ENABLE_MEMSYS5) - case SQLITE_CONFIG_HEAP: { - /* Designate a buffer for heap memory space */ - sqlite3GlobalConfig.pHeap = va_arg(ap, void*); - sqlite3GlobalConfig.nHeap = va_arg(ap, int); - sqlite3GlobalConfig.mnReq = va_arg(ap, int); + finished: + rc2 = sqlite3_reset(pStmt); + if( rc==SQLITE_DONE ) rc = rc2; - if( sqlite3GlobalConfig.pHeap==0 ){ - /* If the heap pointer is NULL, then restore the malloc implementation - ** back to NULL pointers too. This will cause the malloc to go - ** back to its default implementation when sqlite3_initialize() is - ** run. - */ - memset(&sqlite3GlobalConfig.m, 0, sizeof(sqlite3GlobalConfig.m)); - }else{ - /* The heap pointer is not NULL, then install one of the - ** mem5.c/mem3.c methods. If neither ENABLE_MEMSYS3 nor - ** ENABLE_MEMSYS5 is defined, return an error. - */ -#ifdef SQLITE_ENABLE_MEMSYS3 - sqlite3GlobalConfig.m = *sqlite3MemGetMemsys3(); -#endif -#ifdef SQLITE_ENABLE_MEMSYS5 - sqlite3GlobalConfig.m = *sqlite3MemGetMemsys5(); -#endif + return rc; +} + +/* +** Set up a cursor object for iterating through a full-text index or a +** single level therein. +*/ +SQLITE_PRIVATE int sqlite3Fts3SegReaderCursor( + Fts3Table *p, /* FTS3 table handle */ + int iLangid, /* Language-id to search */ + int iIndex, /* Index to search (from 0 to p->nIndex-1) */ + int iLevel, /* Level of segments to scan */ + const char *zTerm, /* Term to query for */ + int nTerm, /* Size of zTerm in bytes */ + int isPrefix, /* True for a prefix search */ + int isScan, /* True to scan from zTerm to EOF */ + Fts3MultiSegReader *pCsr /* Cursor object to populate */ +){ + assert( iIndex>=0 && iIndexnIndex ); + assert( iLevel==FTS3_SEGCURSOR_ALL + || iLevel==FTS3_SEGCURSOR_PENDING + || iLevel>=0 + ); + assert( iLevelbase.pVtab; + + if( isPrefix ){ + for(i=1; bFound==0 && inIndex; i++){ + if( p->aIndex[i].nPrefix==nTerm ){ + bFound = 1; + rc = sqlite3Fts3SegReaderCursor(p, pCsr->iLangid, + i, FTS3_SEGCURSOR_ALL, zTerm, nTerm, 0, 0, pSegcsr + ); + pSegcsr->bLookup = 1; + } } - break; - } -#endif - case SQLITE_CONFIG_LOOKASIDE: { - sqlite3GlobalConfig.szLookaside = va_arg(ap, int); - sqlite3GlobalConfig.nLookaside = va_arg(ap, int); - break; + for(i=1; bFound==0 && inIndex; i++){ + if( p->aIndex[i].nPrefix==nTerm+1 ){ + bFound = 1; + rc = sqlite3Fts3SegReaderCursor(p, pCsr->iLangid, + i, FTS3_SEGCURSOR_ALL, zTerm, nTerm, 1, 0, pSegcsr + ); + if( rc==SQLITE_OK ){ + rc = fts3SegReaderCursorAddZero( + p, pCsr->iLangid, zTerm, nTerm, pSegcsr + ); + } + } + } } - default: { - rc = SQLITE_ERROR; - break; + if( bFound==0 ){ + rc = sqlite3Fts3SegReaderCursor(p, pCsr->iLangid, + 0, FTS3_SEGCURSOR_ALL, zTerm, nTerm, isPrefix, 0, pSegcsr + ); + pSegcsr->bLookup = !isPrefix; } } - va_end(ap); + + *ppSegcsr = pSegcsr; return rc; } /* -** Set up the lookaside buffers for a database connection. -** Return SQLITE_OK on success. -** If lookaside is already active, return SQLITE_BUSY. -** -** The sz parameter is the number of bytes in each lookaside slot. -** The cnt parameter is the number of slots. If pStart is NULL the -** space for the lookaside memory is obtained from sqlite3_malloc(). -** If pStart is not NULL then it is sz*cnt bytes of memory to use for -** the lookaside memory. +** Free an Fts3MultiSegReader allocated by fts3TermSegReaderCursor(). */ -static int setupLookaside(sqlite3 *db, void *pBuf, int sz, int cnt){ - void *pStart; - if( db->lookaside.nOut ){ - return SQLITE_BUSY; +static void fts3SegReaderCursorFree(Fts3MultiSegReader *pSegcsr){ + sqlite3Fts3SegReaderFinish(pSegcsr); + sqlite3_free(pSegcsr); +} + +/* +** This function retreives the doclist for the specified term (or term +** prefix) from the database. +*/ +static int fts3TermSelect( + Fts3Table *p, /* Virtual table handle */ + Fts3PhraseToken *pTok, /* Token to query for */ + int iColumn, /* Column to query (or -ve for all columns) */ + int *pnOut, /* OUT: Size of buffer at *ppOut */ + char **ppOut /* OUT: Malloced result buffer */ +){ + int rc; /* Return code */ + Fts3MultiSegReader *pSegcsr; /* Seg-reader cursor for this term */ + TermSelect tsc; /* Object for pair-wise doclist merging */ + Fts3SegFilter filter; /* Segment term filter configuration */ + + pSegcsr = pTok->pSegcsr; + memset(&tsc, 0, sizeof(TermSelect)); + + filter.flags = FTS3_SEGMENT_IGNORE_EMPTY | FTS3_SEGMENT_REQUIRE_POS + | (pTok->isPrefix ? FTS3_SEGMENT_PREFIX : 0) + | (pTok->bFirst ? FTS3_SEGMENT_FIRST : 0) + | (iColumnnColumn ? FTS3_SEGMENT_COLUMN_FILTER : 0); + filter.iCol = iColumn; + filter.zTerm = pTok->z; + filter.nTerm = pTok->n; + + rc = sqlite3Fts3SegReaderStart(p, pSegcsr, &filter); + while( SQLITE_OK==rc + && SQLITE_ROW==(rc = sqlite3Fts3SegReaderStep(p, pSegcsr)) + ){ + rc = fts3TermSelectMerge(p, &tsc, pSegcsr->aDoclist, pSegcsr->nDoclist); } - /* Free any existing lookaside buffer for this handle before - ** allocating a new one so we don't have to have space for - ** both at the same time. - */ - if( db->lookaside.bMalloced ){ - sqlite3_free(db->lookaside.pStart); + + if( rc==SQLITE_OK ){ + rc = fts3TermSelectFinishMerge(p, &tsc); } - /* The size of a lookaside slot needs to be larger than a pointer - ** to be useful. - */ - if( sz<=(int)sizeof(LookasideSlot*) ) sz = 0; - if( cnt<0 ) cnt = 0; - if( sz==0 || cnt==0 ){ - sz = 0; - pStart = 0; - }else if( pBuf==0 ){ - sz = ROUND8(sz); - sqlite3BeginBenignMalloc(); - pStart = sqlite3Malloc( sz*cnt ); - sqlite3EndBenignMalloc(); + if( rc==SQLITE_OK ){ + *ppOut = tsc.aaOutput[0]; + *pnOut = tsc.anOutput[0]; }else{ - sz = ROUNDDOWN8(sz); - pStart = pBuf; - } - db->lookaside.pStart = pStart; - db->lookaside.pFree = 0; - db->lookaside.sz = (u16)sz; - if( pStart ){ int i; - LookasideSlot *p; - assert( sz > (int)sizeof(LookasideSlot*) ); - p = (LookasideSlot*)pStart; - for(i=cnt-1; i>=0; i--){ - p->pNext = db->lookaside.pFree; - db->lookaside.pFree = p; - p = (LookasideSlot*)&((u8*)p)[sz]; + for(i=0; ilookaside.pEnd = p; - db->lookaside.bEnabled = 1; - db->lookaside.bMalloced = pBuf==0 ?1:0; - }else{ - db->lookaside.pEnd = 0; - db->lookaside.bEnabled = 0; - db->lookaside.bMalloced = 0; } - return SQLITE_OK; + + fts3SegReaderCursorFree(pSegcsr); + pTok->pSegcsr = 0; + return rc; } /* -** Return the mutex associated with a database connection. +** This function counts the total number of docids in the doclist stored +** in buffer aList[], size nList bytes. +** +** If the isPoslist argument is true, then it is assumed that the doclist +** contains a position-list following each docid. Otherwise, it is assumed +** that the doclist is simply a list of docids stored as delta encoded +** varints. */ -SQLITE_API sqlite3_mutex *sqlite3_db_mutex(sqlite3 *db){ - return db->mutex; +static int fts3DoclistCountDocids(char *aList, int nList){ + int nDoc = 0; /* Return value */ + if( aList ){ + char *aEnd = &aList[nList]; /* Pointer to one byte after EOF */ + char *p = aList; /* Cursor */ + while( peSearch==FTS3_DOCID_SEARCH || pCsr->eSearch==FTS3_FULLSCAN_SEARCH ){ + if( SQLITE_ROW!=sqlite3_step(pCsr->pStmt) ){ + pCsr->isEof = 1; + rc = sqlite3_reset(pCsr->pStmt); + }else{ + pCsr->iPrevId = sqlite3_column_int64(pCsr->pStmt, 0); + rc = SQLITE_OK; } + }else{ + rc = fts3EvalNext((Fts3Cursor *)pCursor); } - va_end(ap); + assert( ((Fts3Table *)pCsr->base.pVtab)->pSegments==0 ); return rc; } - -/* -** Return true if the buffer z[0..n-1] contains all spaces. -*/ -static int allSpaces(const char *z, int n){ - while( n>0 && z[n-1]==' ' ){ n--; } - return n==0; -} - /* -** This is the default collating function named "BINARY" which is always -** available. +** This is the xFilter interface for the virtual table. See +** the virtual table xFilter method documentation for additional +** information. ** -** If the padFlag argument is not NULL then space padding at the end -** of strings is ignored. This implements the RTRIM collation. +** If idxNum==FTS3_FULLSCAN_SEARCH then do a full table scan against +** the %_content table. +** +** If idxNum==FTS3_DOCID_SEARCH then do a docid lookup for a single entry +** in the %_content table. +** +** If idxNum>=FTS3_FULLTEXT_SEARCH then use the full text index. The +** column on the left-hand side of the MATCH operator is column +** number idxNum-FTS3_FULLTEXT_SEARCH, 0 indexed. argv[0] is the right-hand +** side of the MATCH operator. */ -static int binCollFunc( - void *padFlag, - int nKey1, const void *pKey1, - int nKey2, const void *pKey2 +static int fts3FilterMethod( + sqlite3_vtab_cursor *pCursor, /* The cursor used for this query */ + int idxNum, /* Strategy index */ + const char *idxStr, /* Unused */ + int nVal, /* Number of elements in apVal */ + sqlite3_value **apVal /* Arguments for the indexing scheme */ ){ - int rc, n; - n = nKey1pVtab; + Fts3Cursor *pCsr = (Fts3Cursor *)pCursor; + + UNUSED_PARAMETER(idxStr); + UNUSED_PARAMETER(nVal); + + assert( idxNum>=0 && idxNum<=(FTS3_FULLTEXT_SEARCH+p->nColumn) ); + assert( nVal==0 || nVal==1 || nVal==2 ); + assert( (nVal==0)==(idxNum==FTS3_FULLSCAN_SEARCH) ); + assert( p->pSegments==0 ); + + /* In case the cursor has been used before, clear it now. */ + sqlite3_finalize(pCsr->pStmt); + sqlite3_free(pCsr->aDoclist); + sqlite3Fts3ExprFree(pCsr->pExpr); + memset(&pCursor[1], 0, sizeof(Fts3Cursor)-sizeof(sqlite3_vtab_cursor)); + + if( idxStr ){ + pCsr->bDesc = (idxStr[0]=='D'); + }else{ + pCsr->bDesc = p->bDescIdx; + } + pCsr->eSearch = (i16)idxNum; + + if( idxNum!=FTS3_DOCID_SEARCH && idxNum!=FTS3_FULLSCAN_SEARCH ){ + int iCol = idxNum-FTS3_FULLTEXT_SEARCH; + const char *zQuery = (const char *)sqlite3_value_text(apVal[0]); + + if( zQuery==0 && sqlite3_value_type(apVal[0])!=SQLITE_NULL ){ + return SQLITE_NOMEM; + } + + pCsr->iLangid = 0; + if( nVal==2 ) pCsr->iLangid = sqlite3_value_int(apVal[1]); + + rc = sqlite3Fts3ExprParse(p->pTokenizer, pCsr->iLangid, + p->azColumn, p->bFts4, p->nColumn, iCol, zQuery, -1, &pCsr->pExpr + ); + if( rc!=SQLITE_OK ){ + if( rc==SQLITE_ERROR ){ + static const char *zErr = "malformed MATCH expression: [%s]"; + p->base.zErrMsg = sqlite3_mprintf(zErr, zQuery); + } + return rc; + } + + rc = sqlite3Fts3ReadLock(p); + if( rc!=SQLITE_OK ) return rc; + + rc = fts3EvalStart(pCsr); + + sqlite3Fts3SegmentsClose(p); + if( rc!=SQLITE_OK ) return rc; + pCsr->pNextId = pCsr->aDoclist; + pCsr->iPrevId = 0; + } + + /* Compile a SELECT statement for this cursor. For a full-table-scan, the + ** statement loops through all rows of the %_content table. For a + ** full-text query or docid lookup, the statement retrieves a single + ** row by docid. + */ + if( idxNum==FTS3_FULLSCAN_SEARCH ){ + zSql = sqlite3_mprintf( + "SELECT %s ORDER BY rowid %s", + p->zReadExprlist, (pCsr->bDesc ? "DESC" : "ASC") + ); + if( zSql ){ + rc = sqlite3_prepare_v2(p->db, zSql, -1, &pCsr->pStmt, 0); + sqlite3_free(zSql); }else{ - rc = nKey1 - nKey2; + rc = SQLITE_NOMEM; + } + }else if( idxNum==FTS3_DOCID_SEARCH ){ + rc = fts3CursorSeekStmt(pCsr, &pCsr->pStmt); + if( rc==SQLITE_OK ){ + rc = sqlite3_bind_value(pCsr->pStmt, 1, apVal[0]); } } - return rc; + if( rc!=SQLITE_OK ) return rc; + + return fts3NextMethod(pCursor); } -/* -** Another built-in collating sequence: NOCASE. +/* +** This is the xEof method of the virtual table. SQLite calls this +** routine to find out if it has reached the end of a result set. +*/ +static int fts3EofMethod(sqlite3_vtab_cursor *pCursor){ + return ((Fts3Cursor *)pCursor)->isEof; +} + +/* +** This is the xRowid method. The SQLite core calls this routine to +** retrieve the rowid for the current row of the result set. fts3 +** exposes %_content.docid as the rowid for the virtual table. The +** rowid should be written to *pRowid. +*/ +static int fts3RowidMethod(sqlite3_vtab_cursor *pCursor, sqlite_int64 *pRowid){ + Fts3Cursor *pCsr = (Fts3Cursor *) pCursor; + *pRowid = pCsr->iPrevId; + return SQLITE_OK; +} + +/* +** This is the xColumn method, called by SQLite to request a value from +** the row that the supplied cursor currently points to. ** -** This collating sequence is intended to be used for "case independant -** comparison". SQLite's knowledge of upper and lower case equivalents -** extends only to the 26 characters used in the English language. +** If: ** -** At the moment there is only a UTF-8 implementation. +** (iCol < p->nColumn) -> The value of the iCol'th user column. +** (iCol == p->nColumn) -> Magic column with the same name as the table. +** (iCol == p->nColumn+1) -> Docid column +** (iCol == p->nColumn+2) -> Langid column */ -static int nocaseCollatingFunc( - void *NotUsed, - int nKey1, const void *pKey1, - int nKey2, const void *pKey2 +static int fts3ColumnMethod( + sqlite3_vtab_cursor *pCursor, /* Cursor to retrieve value from */ + sqlite3_context *pCtx, /* Context for sqlite3_result_xxx() calls */ + int iCol /* Index of column to read value from */ ){ - int r = sqlite3StrNICmp( - (const char *)pKey1, (const char *)pKey2, (nKey1pVtab; + + /* The column value supplied by SQLite must be in range. */ + assert( iCol>=0 && iCol<=p->nColumn+2 ); + + if( iCol==p->nColumn+1 ){ + /* This call is a request for the "docid" column. Since "docid" is an + ** alias for "rowid", use the xRowid() method to obtain the value. + */ + sqlite3_result_int64(pCtx, pCsr->iPrevId); + }else if( iCol==p->nColumn ){ + /* The extra column whose name is the same as the table. + ** Return a blob which is a pointer to the cursor. */ + sqlite3_result_blob(pCtx, &pCsr, sizeof(pCsr), SQLITE_TRANSIENT); + }else if( iCol==p->nColumn+2 && pCsr->pExpr ){ + sqlite3_result_int64(pCtx, pCsr->iLangid); + }else{ + /* The requested column is either a user column (one that contains + ** indexed data), or the language-id column. */ + rc = fts3CursorSeek(0, pCsr); + + if( rc==SQLITE_OK ){ + if( iCol==p->nColumn+2 ){ + int iLangid = 0; + if( p->zLanguageid ){ + iLangid = sqlite3_column_int(pCsr->pStmt, p->nColumn+1); + } + sqlite3_result_int(pCtx, iLangid); + }else if( sqlite3_data_count(pCsr->pStmt)>(iCol+1) ){ + sqlite3_result_value(pCtx, sqlite3_column_value(pCsr->pStmt, iCol+1)); + } + } } - return r; + + assert( ((Fts3Table *)pCsr->base.pVtab)->pSegments==0 ); + return rc; +} + +/* +** This function is the implementation of the xUpdate callback used by +** FTS3 virtual tables. It is invoked by SQLite each time a row is to be +** inserted, updated or deleted. +*/ +static int fts3UpdateMethod( + sqlite3_vtab *pVtab, /* Virtual table handle */ + int nArg, /* Size of argument array */ + sqlite3_value **apVal, /* Array of arguments */ + sqlite_int64 *pRowid /* OUT: The affected (or effected) rowid */ +){ + return sqlite3Fts3UpdateMethod(pVtab, nArg, apVal, pRowid); } /* -** Return the ROWID of the most recent insert +** Implementation of xSync() method. Flush the contents of the pending-terms +** hash-table to the database. */ -SQLITE_API sqlite_int64 sqlite3_last_insert_rowid(sqlite3 *db){ - return db->lastRowid; +static int fts3SyncMethod(sqlite3_vtab *pVtab){ + + /* Following an incremental-merge operation, assuming that the input + ** segments are not completely consumed (the usual case), they are updated + ** in place to remove the entries that have already been merged. This + ** involves updating the leaf block that contains the smallest unmerged + ** entry and each block (if any) between the leaf and the root node. So + ** if the height of the input segment b-trees is N, and input segments + ** are merged eight at a time, updating the input segments at the end + ** of an incremental-merge requires writing (8*(1+N)) blocks. N is usually + ** small - often between 0 and 2. So the overhead of the incremental + ** merge is somewhere between 8 and 24 blocks. To avoid this overhead + ** dwarfing the actual productive work accomplished, the incremental merge + ** is only attempted if it will write at least 64 leaf blocks. Hence + ** nMinMerge. + ** + ** Of course, updating the input segments also involves deleting a bunch + ** of blocks from the segments table. But this is not considered overhead + ** as it would also be required by a crisis-merge that used the same input + ** segments. + */ + const u32 nMinMerge = 64; /* Minimum amount of incr-merge work to do */ + + Fts3Table *p = (Fts3Table*)pVtab; + int rc = sqlite3Fts3PendingTermsFlush(p); + + if( rc==SQLITE_OK && p->bAutoincrmerge==1 && p->nLeafAdd>(nMinMerge/16) ){ + int mxLevel = 0; /* Maximum relative level value in db */ + int A; /* Incr-merge parameter A */ + + rc = sqlite3Fts3MaxLevel(p, &mxLevel); + assert( rc==SQLITE_OK || mxLevel==0 ); + A = p->nLeafAdd * mxLevel; + A += (A/2); + if( A>(int)nMinMerge ) rc = sqlite3Fts3Incrmerge(p, A, 8); + } + sqlite3Fts3SegmentsClose(p); + return rc; } /* -** Return the number of changes in the most recent call to sqlite3_exec(). +** Implementation of xBegin() method. This is a no-op. */ -SQLITE_API int sqlite3_changes(sqlite3 *db){ - return db->nChange; +static int fts3BeginMethod(sqlite3_vtab *pVtab){ + Fts3Table *p = (Fts3Table*)pVtab; + UNUSED_PARAMETER(pVtab); + assert( p->pSegments==0 ); + assert( p->nPendingData==0 ); + assert( p->inTransaction!=1 ); + TESTONLY( p->inTransaction = 1 ); + TESTONLY( p->mxSavepoint = -1; ); + p->nLeafAdd = 0; + return SQLITE_OK; } /* -** Return the number of changes since the database handle was opened. +** Implementation of xCommit() method. This is a no-op. The contents of +** the pending-terms hash-table have already been flushed into the database +** by fts3SyncMethod(). */ -SQLITE_API int sqlite3_total_changes(sqlite3 *db){ - return db->nTotalChange; +static int fts3CommitMethod(sqlite3_vtab *pVtab){ + TESTONLY( Fts3Table *p = (Fts3Table*)pVtab ); + UNUSED_PARAMETER(pVtab); + assert( p->nPendingData==0 ); + assert( p->inTransaction!=0 ); + assert( p->pSegments==0 ); + TESTONLY( p->inTransaction = 0 ); + TESTONLY( p->mxSavepoint = -1; ); + return SQLITE_OK; } /* -** Close all open savepoints. This function only manipulates fields of the -** database handle object, it does not close any savepoints that may be open -** at the b-tree/pager level. +** Implementation of xRollback(). Discard the contents of the pending-terms +** hash-table. Any changes made to the database are reverted by SQLite. */ -SQLITE_PRIVATE void sqlite3CloseSavepoints(sqlite3 *db){ - while( db->pSavepoint ){ - Savepoint *pTmp = db->pSavepoint; - db->pSavepoint = pTmp->pNext; - sqlite3DbFree(db, pTmp); - } - db->nSavepoint = 0; - db->nStatement = 0; - db->isTransactionSavepoint = 0; +static int fts3RollbackMethod(sqlite3_vtab *pVtab){ + Fts3Table *p = (Fts3Table*)pVtab; + sqlite3Fts3PendingTermsClear(p); + assert( p->inTransaction!=0 ); + TESTONLY( p->inTransaction = 0 ); + TESTONLY( p->mxSavepoint = -1; ); + return SQLITE_OK; } /* -** Close an existing SQLite database +** When called, *ppPoslist must point to the byte immediately following the +** end of a position-list. i.e. ( (*ppPoslist)[-1]==POS_END ). This function +** moves *ppPoslist so that it instead points to the first byte of the +** same position list. */ -SQLITE_API int sqlite3_close(sqlite3 *db){ - HashElem *i; - int j; +static void fts3ReversePoslist(char *pStart, char **ppPoslist){ + char *p = &(*ppPoslist)[-2]; + char c = 0; - if( !db ){ - return SQLITE_OK; + while( p>pStart && (c=*p--)==0 ); + while( p>pStart && (*p & 0x80) | c ){ + c = *p--; } - if( !sqlite3SafetyCheckSickOrOk(db) ){ - return SQLITE_MISUSE; + if( p>pStart ){ p = &p[2]; } + while( *p++&0x80 ); + *ppPoslist = p; +} + +/* +** Helper function used by the implementation of the overloaded snippet(), +** offsets() and optimize() SQL functions. +** +** If the value passed as the third argument is a blob of size +** sizeof(Fts3Cursor*), then the blob contents are copied to the +** output variable *ppCsr and SQLITE_OK is returned. Otherwise, an error +** message is written to context pContext and SQLITE_ERROR returned. The +** string passed via zFunc is used as part of the error message. +*/ +static int fts3FunctionArg( + sqlite3_context *pContext, /* SQL function call context */ + const char *zFunc, /* Function name */ + sqlite3_value *pVal, /* argv[0] passed to function */ + Fts3Cursor **ppCsr /* OUT: Store cursor handle here */ +){ + Fts3Cursor *pRet; + if( sqlite3_value_type(pVal)!=SQLITE_BLOB + || sqlite3_value_bytes(pVal)!=sizeof(Fts3Cursor *) + ){ + char *zErr = sqlite3_mprintf("illegal first argument to %s", zFunc); + sqlite3_result_error(pContext, zErr, -1); + sqlite3_free(zErr); + return SQLITE_ERROR; } - sqlite3_mutex_enter(db->mutex); + memcpy(&pRet, sqlite3_value_blob(pVal), sizeof(Fts3Cursor *)); + *ppCsr = pRet; + return SQLITE_OK; +} - sqlite3ResetInternalSchema(db, 0); +/* +** Implementation of the snippet() function for FTS3 +*/ +static void fts3SnippetFunc( + sqlite3_context *pContext, /* SQLite function call context */ + int nVal, /* Size of apVal[] array */ + sqlite3_value **apVal /* Array of arguments */ +){ + Fts3Cursor *pCsr; /* Cursor handle passed through apVal[0] */ + const char *zStart = ""; + const char *zEnd = ""; + const char *zEllipsis = "..."; + int iCol = -1; + int nToken = 15; /* Default number of tokens in snippet */ - /* If a transaction is open, the ResetInternalSchema() call above - ** will not have called the xDisconnect() method on any virtual - ** tables in the db->aVTrans[] array. The following sqlite3VtabRollback() - ** call will do so. We need to do this before the check for active - ** SQL statements below, as the v-table implementation may be storing - ** some prepared statements internally. + /* There must be at least one argument passed to this function (otherwise + ** the non-overloaded version would have been called instead of this one). */ - sqlite3VtabRollback(db); + assert( nVal>=1 ); - /* If there are any outstanding VMs, return SQLITE_BUSY. */ - if( db->pVdbe ){ - sqlite3Error(db, SQLITE_BUSY, - "unable to close due to unfinalised statements"); - sqlite3_mutex_leave(db->mutex); - return SQLITE_BUSY; + if( nVal>6 ){ + sqlite3_result_error(pContext, + "wrong number of arguments to function snippet()", -1); + return; } - assert( sqlite3SafetyCheckSickOrOk(db) ); + if( fts3FunctionArg(pContext, "snippet", apVal[0], &pCsr) ) return; - for(j=0; jnDb; j++){ - Btree *pBt = db->aDb[j].pBt; - if( pBt && sqlite3BtreeIsInBackup(pBt) ){ - sqlite3Error(db, SQLITE_BUSY, - "unable to close due to unfinished backup operation"); - sqlite3_mutex_leave(db->mutex); - return SQLITE_BUSY; - } + switch( nVal ){ + case 6: nToken = sqlite3_value_int(apVal[5]); + case 5: iCol = sqlite3_value_int(apVal[4]); + case 4: zEllipsis = (const char*)sqlite3_value_text(apVal[3]); + case 3: zEnd = (const char*)sqlite3_value_text(apVal[2]); + case 2: zStart = (const char*)sqlite3_value_text(apVal[1]); } + if( !zEllipsis || !zEnd || !zStart ){ + sqlite3_result_error_nomem(pContext); + }else if( SQLITE_OK==fts3CursorSeek(pContext, pCsr) ){ + sqlite3Fts3Snippet(pContext, pCsr, zStart, zEnd, zEllipsis, iCol, nToken); + } +} - /* Free any outstanding Savepoint structures. */ - sqlite3CloseSavepoints(db); +/* +** Implementation of the offsets() function for FTS3 +*/ +static void fts3OffsetsFunc( + sqlite3_context *pContext, /* SQLite function call context */ + int nVal, /* Size of argument array */ + sqlite3_value **apVal /* Array of arguments */ +){ + Fts3Cursor *pCsr; /* Cursor handle passed through apVal[0] */ - for(j=0; jnDb; j++){ - struct Db *pDb = &db->aDb[j]; - if( pDb->pBt ){ - sqlite3BtreeClose(pDb->pBt); - pDb->pBt = 0; - if( j!=1 ){ - pDb->pSchema = 0; - } - } + UNUSED_PARAMETER(nVal); + + assert( nVal==1 ); + if( fts3FunctionArg(pContext, "offsets", apVal[0], &pCsr) ) return; + assert( pCsr ); + if( SQLITE_OK==fts3CursorSeek(pContext, pCsr) ){ + sqlite3Fts3Offsets(pContext, pCsr); } - sqlite3ResetInternalSchema(db, 0); +} - /* Tell the code in notify.c that the connection no longer holds any - ** locks and does not require any further unlock-notify callbacks. - */ - sqlite3ConnectionClosed(db); +/* +** Implementation of the special optimize() function for FTS3. This +** function merges all segments in the database to a single segment. +** Example usage is: +** +** SELECT optimize(t) FROM t LIMIT 1; +** +** where 't' is the name of an FTS3 table. +*/ +static void fts3OptimizeFunc( + sqlite3_context *pContext, /* SQLite function call context */ + int nVal, /* Size of argument array */ + sqlite3_value **apVal /* Array of arguments */ +){ + int rc; /* Return code */ + Fts3Table *p; /* Virtual table handle */ + Fts3Cursor *pCursor; /* Cursor handle passed through apVal[0] */ - assert( db->nDb<=2 ); - assert( db->aDb==db->aDbStatic ); - for(j=0; jaFunc.a); j++){ - FuncDef *pNext, *pHash, *p; - for(p=db->aFunc.a[j]; p; p=pHash){ - pHash = p->pHash; - while( p ){ - pNext = p->pNext; - sqlite3DbFree(db, p); - p = pNext; - } - } - } - for(i=sqliteHashFirst(&db->aCollSeq); i; i=sqliteHashNext(i)){ - CollSeq *pColl = (CollSeq *)sqliteHashData(i); - /* Invoke any destructors registered for collation sequence user data. */ - for(j=0; j<3; j++){ - if( pColl[j].xDel ){ - pColl[j].xDel(pColl[j].pUser); - } - } - sqlite3DbFree(db, pColl); - } - sqlite3HashClear(&db->aCollSeq); -#ifndef SQLITE_OMIT_VIRTUALTABLE - for(i=sqliteHashFirst(&db->aModule); i; i=sqliteHashNext(i)){ - Module *pMod = (Module *)sqliteHashData(i); - if( pMod->xDestroy ){ - pMod->xDestroy(pMod->pAux); - } - sqlite3DbFree(db, pMod); - } - sqlite3HashClear(&db->aModule); -#endif + UNUSED_PARAMETER(nVal); - sqlite3Error(db, SQLITE_OK, 0); /* Deallocates any cached error strings. */ - if( db->pErr ){ - sqlite3ValueFree(db->pErr); - } - sqlite3CloseExtensions(db); + assert( nVal==1 ); + if( fts3FunctionArg(pContext, "optimize", apVal[0], &pCursor) ) return; + p = (Fts3Table *)pCursor->base.pVtab; + assert( p ); - db->magic = SQLITE_MAGIC_ERROR; + rc = sqlite3Fts3Optimize(p); - /* The temp-database schema is allocated differently from the other schema - ** objects (using sqliteMalloc() directly, instead of sqlite3BtreeSchema()). - ** So it needs to be freed here. Todo: Why not roll the temp schema into - ** the same sqliteMalloc() as the one that allocates the database - ** structure? - */ - sqlite3DbFree(db, db->aDb[1].pSchema); - sqlite3_mutex_leave(db->mutex); - db->magic = SQLITE_MAGIC_CLOSED; - sqlite3_mutex_free(db->mutex); - assert( db->lookaside.nOut==0 ); /* Fails on a lookaside memory leak */ - if( db->lookaside.bMalloced ){ - sqlite3_free(db->lookaside.pStart); + switch( rc ){ + case SQLITE_OK: + sqlite3_result_text(pContext, "Index optimized", -1, SQLITE_STATIC); + break; + case SQLITE_DONE: + sqlite3_result_text(pContext, "Index already optimal", -1, SQLITE_STATIC); + break; + default: + sqlite3_result_error_code(pContext, rc); + break; } - sqlite3_free(db); - return SQLITE_OK; } /* -** Rollback all database files. +** Implementation of the matchinfo() function for FTS3 */ -SQLITE_PRIVATE void sqlite3RollbackAll(sqlite3 *db){ - int i; - int inTrans = 0; - assert( sqlite3_mutex_held(db->mutex) ); - sqlite3BeginBenignMalloc(); - for(i=0; inDb; i++){ - if( db->aDb[i].pBt ){ - if( sqlite3BtreeIsInTrans(db->aDb[i].pBt) ){ - inTrans = 1; - } - sqlite3BtreeRollback(db->aDb[i].pBt); - db->aDb[i].inTrans = 0; +static void fts3MatchinfoFunc( + sqlite3_context *pContext, /* SQLite function call context */ + int nVal, /* Size of argument array */ + sqlite3_value **apVal /* Array of arguments */ +){ + Fts3Cursor *pCsr; /* Cursor handle passed through apVal[0] */ + assert( nVal==1 || nVal==2 ); + if( SQLITE_OK==fts3FunctionArg(pContext, "matchinfo", apVal[0], &pCsr) ){ + const char *zArg = 0; + if( nVal>1 ){ + zArg = (const char *)sqlite3_value_text(apVal[1]); } - } - sqlite3VtabRollback(db); - sqlite3EndBenignMalloc(); - - if( db->flags&SQLITE_InternChanges ){ - sqlite3ExpirePreparedStatements(db); - sqlite3ResetInternalSchema(db, 0); - } - - /* If one has been configured, invoke the rollback-hook callback */ - if( db->xRollbackCallback && (inTrans || !db->autoCommit) ){ - db->xRollbackCallback(db->pRollbackArg); + sqlite3Fts3Matchinfo(pContext, pCsr, zArg); } } /* -** Return a static string that describes the kind of error specified in the -** argument. -*/ -SQLITE_PRIVATE const char *sqlite3ErrStr(int rc){ - static const char* const aMsg[] = { - /* SQLITE_OK */ "not an error", - /* SQLITE_ERROR */ "SQL logic error or missing database", - /* SQLITE_INTERNAL */ 0, - /* SQLITE_PERM */ "access permission denied", - /* SQLITE_ABORT */ "callback requested query abort", - /* SQLITE_BUSY */ "database is locked", - /* SQLITE_LOCKED */ "database table is locked", - /* SQLITE_NOMEM */ "out of memory", - /* SQLITE_READONLY */ "attempt to write a readonly database", - /* SQLITE_INTERRUPT */ "interrupted", - /* SQLITE_IOERR */ "disk I/O error", - /* SQLITE_CORRUPT */ "database disk image is malformed", - /* SQLITE_NOTFOUND */ 0, - /* SQLITE_FULL */ "database or disk is full", - /* SQLITE_CANTOPEN */ "unable to open database file", - /* SQLITE_PROTOCOL */ 0, - /* SQLITE_EMPTY */ "table contains no data", - /* SQLITE_SCHEMA */ "database schema has changed", - /* SQLITE_TOOBIG */ "string or blob too big", - /* SQLITE_CONSTRAINT */ "constraint failed", - /* SQLITE_MISMATCH */ "datatype mismatch", - /* SQLITE_MISUSE */ "library routine called out of sequence", - /* SQLITE_NOLFS */ "large file support is disabled", - /* SQLITE_AUTH */ "authorization denied", - /* SQLITE_FORMAT */ "auxiliary database format error", - /* SQLITE_RANGE */ "bind or column index out of range", - /* SQLITE_NOTADB */ "file is encrypted or is not a database", +** This routine implements the xFindFunction method for the FTS3 +** virtual table. +*/ +static int fts3FindFunctionMethod( + sqlite3_vtab *pVtab, /* Virtual table handle */ + int nArg, /* Number of SQL function arguments */ + const char *zName, /* Name of SQL function */ + void (**pxFunc)(sqlite3_context*,int,sqlite3_value**), /* OUT: Result */ + void **ppArg /* Unused */ +){ + struct Overloaded { + const char *zName; + void (*xFunc)(sqlite3_context*,int,sqlite3_value**); + } aOverload[] = { + { "snippet", fts3SnippetFunc }, + { "offsets", fts3OffsetsFunc }, + { "optimize", fts3OptimizeFunc }, + { "matchinfo", fts3MatchinfoFunc }, }; - rc &= 0xff; - if( ALWAYS(rc>=0) && rc<(int)(sizeof(aMsg)/sizeof(aMsg[0])) && aMsg[rc]!=0 ){ - return aMsg[rc]; - }else{ - return "unknown error"; + int i; /* Iterator variable */ + + UNUSED_PARAMETER(pVtab); + UNUSED_PARAMETER(nArg); + UNUSED_PARAMETER(ppArg); + + for(i=0; ibusyTimeout; - int delay, prior; - - assert( count>=0 ); - if( count < NDELAY ){ - delay = delays[count]; - prior = totals[count]; - }else{ - delay = delays[NDELAY-1]; - prior = totals[NDELAY-1] + delay*(count-(NDELAY-1)); + Fts3Table *p = (Fts3Table *)pVtab; + sqlite3 *db = p->db; /* Database connection */ + int rc; /* Return Code */ + + /* As it happens, the pending terms table is always empty here. This is + ** because an "ALTER TABLE RENAME TABLE" statement inside a transaction + ** always opens a savepoint transaction. And the xSavepoint() method + ** flushes the pending terms table. But leave the (no-op) call to + ** PendingTermsFlush() in in case that changes. + */ + assert( p->nPendingData==0 ); + rc = sqlite3Fts3PendingTermsFlush(p); + + if( p->zContentTbl==0 ){ + fts3DbExec(&rc, db, + "ALTER TABLE %Q.'%q_content' RENAME TO '%q_content';", + p->zDb, p->zName, zName + ); } - if( prior + delay > timeout ){ - delay = timeout - prior; - if( delay<=0 ) return 0; + + if( p->bHasDocsize ){ + fts3DbExec(&rc, db, + "ALTER TABLE %Q.'%q_docsize' RENAME TO '%q_docsize';", + p->zDb, p->zName, zName + ); } - sqlite3OsSleep(db->pVfs, delay*1000); - return 1; -#else - sqlite3 *db = (sqlite3 *)ptr; - int timeout = ((sqlite3 *)ptr)->busyTimeout; - if( (count+1)*1000 > timeout ){ - return 0; + if( p->bHasStat ){ + fts3DbExec(&rc, db, + "ALTER TABLE %Q.'%q_stat' RENAME TO '%q_stat';", + p->zDb, p->zName, zName + ); } - sqlite3OsSleep(db->pVfs, 1000000); - return 1; -#endif + fts3DbExec(&rc, db, + "ALTER TABLE %Q.'%q_segments' RENAME TO '%q_segments';", + p->zDb, p->zName, zName + ); + fts3DbExec(&rc, db, + "ALTER TABLE %Q.'%q_segdir' RENAME TO '%q_segdir';", + p->zDb, p->zName, zName + ); + return rc; } /* -** Invoke the given busy handler. +** The xSavepoint() method. ** -** This routine is called when an operation failed with a lock. -** If this routine returns non-zero, the lock is retried. If it -** returns 0, the operation aborts with an SQLITE_BUSY error. +** Flush the contents of the pending-terms table to disk. */ -SQLITE_PRIVATE int sqlite3InvokeBusyHandler(BusyHandler *p){ - int rc; - if( NEVER(p==0) || p->xFunc==0 || p->nBusy<0 ) return 0; - rc = p->xFunc(p->pArg, p->nBusy); - if( rc==0 ){ - p->nBusy = -1; - }else{ - p->nBusy++; +static int fts3SavepointMethod(sqlite3_vtab *pVtab, int iSavepoint){ + int rc = SQLITE_OK; + UNUSED_PARAMETER(iSavepoint); + assert( ((Fts3Table *)pVtab)->inTransaction ); + assert( ((Fts3Table *)pVtab)->mxSavepoint < iSavepoint ); + TESTONLY( ((Fts3Table *)pVtab)->mxSavepoint = iSavepoint ); + if( ((Fts3Table *)pVtab)->bIgnoreSavepoint==0 ){ + rc = fts3SyncMethod(pVtab); } - return rc; + return rc; } /* -** This routine sets the busy callback for an Sqlite database to the -** given callback function with the given argument. +** The xRelease() method. +** +** This is a no-op. */ -SQLITE_API int sqlite3_busy_handler( - sqlite3 *db, - int (*xBusy)(void*,int), - void *pArg -){ - sqlite3_mutex_enter(db->mutex); - db->busyHandler.xFunc = xBusy; - db->busyHandler.pArg = pArg; - db->busyHandler.nBusy = 0; - sqlite3_mutex_leave(db->mutex); +static int fts3ReleaseMethod(sqlite3_vtab *pVtab, int iSavepoint){ + TESTONLY( Fts3Table *p = (Fts3Table*)pVtab ); + UNUSED_PARAMETER(iSavepoint); + UNUSED_PARAMETER(pVtab); + assert( p->inTransaction ); + assert( p->mxSavepoint >= iSavepoint ); + TESTONLY( p->mxSavepoint = iSavepoint-1 ); return SQLITE_OK; } -#ifndef SQLITE_OMIT_PROGRESS_CALLBACK /* -** This routine sets the progress callback for an Sqlite database to the -** given callback function with the given argument. The progress callback will -** be invoked every nOps opcodes. +** The xRollbackTo() method. +** +** Discard the contents of the pending terms table. */ -SQLITE_API void sqlite3_progress_handler( - sqlite3 *db, - int nOps, - int (*xProgress)(void*), - void *pArg -){ - sqlite3_mutex_enter(db->mutex); - if( nOps>0 ){ - db->xProgress = xProgress; - db->nProgressOps = nOps; - db->pProgressArg = pArg; - }else{ - db->xProgress = 0; - db->nProgressOps = 0; - db->pProgressArg = 0; - } - sqlite3_mutex_leave(db->mutex); +static int fts3RollbackToMethod(sqlite3_vtab *pVtab, int iSavepoint){ + Fts3Table *p = (Fts3Table*)pVtab; + UNUSED_PARAMETER(iSavepoint); + assert( p->inTransaction ); + assert( p->mxSavepoint >= iSavepoint ); + TESTONLY( p->mxSavepoint = iSavepoint ); + sqlite3Fts3PendingTermsClear(p); + return SQLITE_OK; } -#endif +static const sqlite3_module fts3Module = { + /* iVersion */ 2, + /* xCreate */ fts3CreateMethod, + /* xConnect */ fts3ConnectMethod, + /* xBestIndex */ fts3BestIndexMethod, + /* xDisconnect */ fts3DisconnectMethod, + /* xDestroy */ fts3DestroyMethod, + /* xOpen */ fts3OpenMethod, + /* xClose */ fts3CloseMethod, + /* xFilter */ fts3FilterMethod, + /* xNext */ fts3NextMethod, + /* xEof */ fts3EofMethod, + /* xColumn */ fts3ColumnMethod, + /* xRowid */ fts3RowidMethod, + /* xUpdate */ fts3UpdateMethod, + /* xBegin */ fts3BeginMethod, + /* xSync */ fts3SyncMethod, + /* xCommit */ fts3CommitMethod, + /* xRollback */ fts3RollbackMethod, + /* xFindFunction */ fts3FindFunctionMethod, + /* xRename */ fts3RenameMethod, + /* xSavepoint */ fts3SavepointMethod, + /* xRelease */ fts3ReleaseMethod, + /* xRollbackTo */ fts3RollbackToMethod, +}; /* -** This routine installs a default busy handler that waits for the -** specified number of milliseconds before returning 0. +** This function is registered as the module destructor (called when an +** FTS3 enabled database connection is closed). It frees the memory +** allocated for the tokenizer hash table. */ -SQLITE_API int sqlite3_busy_timeout(sqlite3 *db, int ms){ - if( ms>0 ){ - db->busyTimeout = ms; - sqlite3_busy_handler(db, sqliteDefaultBusyCallback, (void*)db); - }else{ - sqlite3_busy_handler(db, 0, 0); - } - return SQLITE_OK; +static void hashDestroy(void *p){ + Fts3Hash *pHash = (Fts3Hash *)p; + sqlite3Fts3HashClear(pHash); + sqlite3_free(pHash); } /* -** Cause any pending operation to stop at its earliest opportunity. +** The fts3 built-in tokenizers - "simple", "porter" and "icu"- are +** implemented in files fts3_tokenizer1.c, fts3_porter.c and fts3_icu.c +** respectively. The following three forward declarations are for functions +** declared in these files used to retrieve the respective implementations. +** +** Calling sqlite3Fts3SimpleTokenizerModule() sets the value pointed +** to by the argument to point to the "simple" tokenizer implementation. +** And so on. */ -SQLITE_API void sqlite3_interrupt(sqlite3 *db){ - db->u1.isInterrupted = 1; -} - +SQLITE_PRIVATE void sqlite3Fts3SimpleTokenizerModule(sqlite3_tokenizer_module const**ppModule); +SQLITE_PRIVATE void sqlite3Fts3PorterTokenizerModule(sqlite3_tokenizer_module const**ppModule); +#ifdef SQLITE_ENABLE_FTS4_UNICODE61 +SQLITE_PRIVATE void sqlite3Fts3UnicodeTokenizer(sqlite3_tokenizer_module const**ppModule); +#endif +#ifdef SQLITE_ENABLE_ICU +SQLITE_PRIVATE void sqlite3Fts3IcuTokenizerModule(sqlite3_tokenizer_module const**ppModule); +#endif /* -** This function is exactly the same as sqlite3_create_function(), except -** that it is designed to be called by internal code. The difference is -** that if a malloc() fails in sqlite3_create_function(), an error code -** is returned and the mallocFailed flag cleared. +** Initialise the fts3 extension. If this extension is built as part +** of the sqlite library, then this function is called directly by +** SQLite. If fts3 is built as a dynamically loadable extension, this +** function is called by the sqlite3_extension_init() entry point. */ -SQLITE_PRIVATE int sqlite3CreateFunc( - sqlite3 *db, - const char *zFunctionName, - int nArg, - int enc, - void *pUserData, - void (*xFunc)(sqlite3_context*,int,sqlite3_value **), - void (*xStep)(sqlite3_context*,int,sqlite3_value **), - void (*xFinal)(sqlite3_context*) -){ - FuncDef *p; - int nName; +SQLITE_PRIVATE int sqlite3Fts3Init(sqlite3 *db){ + int rc = SQLITE_OK; + Fts3Hash *pHash = 0; + const sqlite3_tokenizer_module *pSimple = 0; + const sqlite3_tokenizer_module *pPorter = 0; +#ifdef SQLITE_ENABLE_FTS4_UNICODE61 + const sqlite3_tokenizer_module *pUnicode = 0; +#endif - assert( sqlite3_mutex_held(db->mutex) ); - if( zFunctionName==0 || - (xFunc && (xFinal || xStep)) || - (!xFunc && (xFinal && !xStep)) || - (!xFunc && (!xFinal && xStep)) || - (nArg<-1 || nArg>SQLITE_MAX_FUNCTION_ARG) || - (255<(nName = sqlite3Strlen30( zFunctionName))) ){ - return SQLITE_MISUSE; +#ifdef SQLITE_ENABLE_ICU + const sqlite3_tokenizer_module *pIcu = 0; + sqlite3Fts3IcuTokenizerModule(&pIcu); +#endif + +#ifdef SQLITE_ENABLE_FTS4_UNICODE61 + sqlite3Fts3UnicodeTokenizer(&pUnicode); +#endif + +#ifdef SQLITE_TEST + rc = sqlite3Fts3InitTerm(db); + if( rc!=SQLITE_OK ) return rc; +#endif + + rc = sqlite3Fts3InitAux(db); + if( rc!=SQLITE_OK ) return rc; + + sqlite3Fts3SimpleTokenizerModule(&pSimple); + sqlite3Fts3PorterTokenizerModule(&pPorter); + + /* Allocate and initialise the hash-table used to store tokenizers. */ + pHash = sqlite3_malloc(sizeof(Fts3Hash)); + if( !pHash ){ + rc = SQLITE_NOMEM; + }else{ + sqlite3Fts3HashInit(pHash, FTS3_HASH_STRING, 1); } - -#ifndef SQLITE_OMIT_UTF16 - /* If SQLITE_UTF16 is specified as the encoding type, transform this - ** to one of SQLITE_UTF16LE or SQLITE_UTF16BE using the - ** SQLITE_UTF16NATIVE macro. SQLITE_UTF16 is not used internally. - ** - ** If SQLITE_ANY is specified, add three versions of the function - ** to the hash table. - */ - if( enc==SQLITE_UTF16 ){ - enc = SQLITE_UTF16NATIVE; - }else if( enc==SQLITE_ANY ){ - int rc; - rc = sqlite3CreateFunc(db, zFunctionName, nArg, SQLITE_UTF8, - pUserData, xFunc, xStep, xFinal); - if( rc==SQLITE_OK ){ - rc = sqlite3CreateFunc(db, zFunctionName, nArg, SQLITE_UTF16LE, - pUserData, xFunc, xStep, xFinal); - } - if( rc!=SQLITE_OK ){ - return rc; + + /* Load the built-in tokenizers into the hash table */ + if( rc==SQLITE_OK ){ + if( sqlite3Fts3HashInsert(pHash, "simple", 7, (void *)pSimple) + || sqlite3Fts3HashInsert(pHash, "porter", 7, (void *)pPorter) + +#ifdef SQLITE_ENABLE_FTS4_UNICODE61 + || sqlite3Fts3HashInsert(pHash, "unicode61", 10, (void *)pUnicode) +#endif +#ifdef SQLITE_ENABLE_ICU + || (pIcu && sqlite3Fts3HashInsert(pHash, "icu", 4, (void *)pIcu)) +#endif + ){ + rc = SQLITE_NOMEM; } - enc = SQLITE_UTF16BE; } -#else - enc = SQLITE_UTF8; + +#ifdef SQLITE_TEST + if( rc==SQLITE_OK ){ + rc = sqlite3Fts3ExprInitTestInterface(db); + } #endif - - /* Check if an existing function is being overridden or deleted. If so, - ** and there are active VMs, then return SQLITE_BUSY. If a function - ** is being overridden/deleted but there are no active VMs, allow the - ** operation to continue but invalidate all precompiled statements. + + /* Create the virtual table wrapper around the hash-table and overload + ** the two scalar functions. If this is successful, register the + ** module with sqlite. */ - p = sqlite3FindFunction(db, zFunctionName, nName, nArg, (u8)enc, 0); - if( p && p->iPrefEnc==enc && p->nArg==nArg ){ - if( db->activeVdbeCnt ){ - sqlite3Error(db, SQLITE_BUSY, - "unable to delete/modify user-function due to active statements"); - assert( !db->mallocFailed ); - return SQLITE_BUSY; - }else{ - sqlite3ExpirePreparedStatements(db); + if( SQLITE_OK==rc + && SQLITE_OK==(rc = sqlite3Fts3InitHashTable(db, pHash, "fts3_tokenizer")) + && SQLITE_OK==(rc = sqlite3_overload_function(db, "snippet", -1)) + && SQLITE_OK==(rc = sqlite3_overload_function(db, "offsets", 1)) + && SQLITE_OK==(rc = sqlite3_overload_function(db, "matchinfo", 1)) + && SQLITE_OK==(rc = sqlite3_overload_function(db, "matchinfo", 2)) + && SQLITE_OK==(rc = sqlite3_overload_function(db, "optimize", 1)) + ){ + rc = sqlite3_create_module_v2( + db, "fts3", &fts3Module, (void *)pHash, hashDestroy + ); + if( rc==SQLITE_OK ){ + rc = sqlite3_create_module_v2( + db, "fts4", &fts3Module, (void *)pHash, 0 + ); } + return rc; } - p = sqlite3FindFunction(db, zFunctionName, nName, nArg, (u8)enc, 1); - assert(p || db->mallocFailed); - if( !p ){ - return SQLITE_NOMEM; + /* An error has occurred. Delete the hash table and return the error code. */ + assert( rc!=SQLITE_OK ); + if( pHash ){ + sqlite3Fts3HashClear(pHash); + sqlite3_free(pHash); } - p->flags = 0; - p->xFunc = xFunc; - p->xStep = xStep; - p->xFinalize = xFinal; - p->pUserData = pUserData; - p->nArg = (u16)nArg; - return SQLITE_OK; -} - -/* -** Create new user functions. -*/ -SQLITE_API int sqlite3_create_function( - sqlite3 *db, - const char *zFunctionName, - int nArg, - int enc, - void *p, - void (*xFunc)(sqlite3_context*,int,sqlite3_value **), - void (*xStep)(sqlite3_context*,int,sqlite3_value **), - void (*xFinal)(sqlite3_context*) -){ - int rc; - sqlite3_mutex_enter(db->mutex); - rc = sqlite3CreateFunc(db, zFunctionName, nArg, enc, p, xFunc, xStep, xFinal); - rc = sqlite3ApiExit(db, rc); - sqlite3_mutex_leave(db->mutex); return rc; } -#ifndef SQLITE_OMIT_UTF16 -SQLITE_API int sqlite3_create_function16( - sqlite3 *db, - const void *zFunctionName, - int nArg, - int eTextRep, - void *p, - void (*xFunc)(sqlite3_context*,int,sqlite3_value**), - void (*xStep)(sqlite3_context*,int,sqlite3_value**), - void (*xFinal)(sqlite3_context*) -){ - int rc; - char *zFunc8; - sqlite3_mutex_enter(db->mutex); - assert( !db->mallocFailed ); - zFunc8 = sqlite3Utf16to8(db, zFunctionName, -1); - rc = sqlite3CreateFunc(db, zFunc8, nArg, eTextRep, p, xFunc, xStep, xFinal); - sqlite3DbFree(db, zFunc8); - rc = sqlite3ApiExit(db, rc); - sqlite3_mutex_leave(db->mutex); - return rc; -} -#endif - - /* -** Declare that a function has been overloaded by a virtual table. +** Allocate an Fts3MultiSegReader for each token in the expression headed +** by pExpr. ** -** If the function already exists as a regular global function, then -** this routine is a no-op. If the function does not exist, then create -** a new one that always throws a run-time error. +** An Fts3SegReader object is a cursor that can seek or scan a range of +** entries within a single segment b-tree. An Fts3MultiSegReader uses multiple +** Fts3SegReader objects internally to provide an interface to seek or scan +** within the union of all segments of a b-tree. Hence the name. ** -** When virtual tables intend to provide an overloaded function, they -** should call this routine to make sure the global function exists. -** A global function must exist in order for name resolution to work -** properly. +** If the allocated Fts3MultiSegReader just seeks to a single entry in a +** segment b-tree (if the term is not a prefix or it is a prefix for which +** there exists prefix b-tree of the right length) then it may be traversed +** and merged incrementally. Otherwise, it has to be merged into an in-memory +** doclist and then traversed. */ -SQLITE_API int sqlite3_overload_function( - sqlite3 *db, - const char *zName, - int nArg +static void fts3EvalAllocateReaders( + Fts3Cursor *pCsr, /* FTS cursor handle */ + Fts3Expr *pExpr, /* Allocate readers for this expression */ + int *pnToken, /* OUT: Total number of tokens in phrase. */ + int *pnOr, /* OUT: Total number of OR nodes in expr. */ + int *pRc /* IN/OUT: Error code */ ){ - int nName = sqlite3Strlen30(zName); - int rc; - sqlite3_mutex_enter(db->mutex); - if( sqlite3FindFunction(db, zName, nName, nArg, SQLITE_UTF8, 0)==0 ){ - sqlite3CreateFunc(db, zName, nArg, SQLITE_UTF8, - 0, sqlite3InvalidFunction, 0, 0); + if( pExpr && SQLITE_OK==*pRc ){ + if( pExpr->eType==FTSQUERY_PHRASE ){ + int i; + int nToken = pExpr->pPhrase->nToken; + *pnToken += nToken; + for(i=0; ipPhrase->aToken[i]; + int rc = fts3TermSegReaderCursor(pCsr, + pToken->z, pToken->n, pToken->isPrefix, &pToken->pSegcsr + ); + if( rc!=SQLITE_OK ){ + *pRc = rc; + return; + } + } + assert( pExpr->pPhrase->iDoclistToken==0 ); + pExpr->pPhrase->iDoclistToken = -1; + }else{ + *pnOr += (pExpr->eType==FTSQUERY_OR); + fts3EvalAllocateReaders(pCsr, pExpr->pLeft, pnToken, pnOr, pRc); + fts3EvalAllocateReaders(pCsr, pExpr->pRight, pnToken, pnOr, pRc); + } } - rc = sqlite3ApiExit(db, SQLITE_OK); - sqlite3_mutex_leave(db->mutex); - return rc; } -#ifndef SQLITE_OMIT_TRACE -/* -** Register a trace function. The pArg from the previously registered trace -** is returned. -** -** A NULL trace function means that no tracing is executes. A non-NULL -** trace is a pointer to a function that is invoked at the start of each -** SQL statement. -*/ -SQLITE_API void *sqlite3_trace(sqlite3 *db, void (*xTrace)(void*,const char*), void *pArg){ - void *pOld; - sqlite3_mutex_enter(db->mutex); - pOld = db->pTraceArg; - db->xTrace = xTrace; - db->pTraceArg = pArg; - sqlite3_mutex_leave(db->mutex); - return pOld; -} /* -** Register a profile function. The pArg from the previously registered -** profile function is returned. +** Arguments pList/nList contain the doclist for token iToken of phrase p. +** It is merged into the main doclist stored in p->doclist.aAll/nAll. ** -** A NULL profile function means that no profiling is executes. A non-NULL -** profile is a pointer to a function that is invoked at the conclusion of -** each SQL statement that is run. +** This function assumes that pList points to a buffer allocated using +** sqlite3_malloc(). This function takes responsibility for eventually +** freeing the buffer. */ -SQLITE_API void *sqlite3_profile( - sqlite3 *db, - void (*xProfile)(void*,const char*,sqlite_uint64), - void *pArg +static void fts3EvalPhraseMergeToken( + Fts3Table *pTab, /* FTS Table pointer */ + Fts3Phrase *p, /* Phrase to merge pList/nList into */ + int iToken, /* Token pList/nList corresponds to */ + char *pList, /* Pointer to doclist */ + int nList /* Number of bytes in pList */ ){ - void *pOld; - sqlite3_mutex_enter(db->mutex); - pOld = db->pProfileArg; - db->xProfile = xProfile; - db->pProfileArg = pArg; - sqlite3_mutex_leave(db->mutex); - return pOld; + assert( iToken!=p->iDoclistToken ); + + if( pList==0 ){ + sqlite3_free(p->doclist.aAll); + p->doclist.aAll = 0; + p->doclist.nAll = 0; + } + + else if( p->iDoclistToken<0 ){ + p->doclist.aAll = pList; + p->doclist.nAll = nList; + } + + else if( p->doclist.aAll==0 ){ + sqlite3_free(pList); + } + + else { + char *pLeft; + char *pRight; + int nLeft; + int nRight; + int nDiff; + + if( p->iDoclistTokendoclist.aAll; + nLeft = p->doclist.nAll; + pRight = pList; + nRight = nList; + nDiff = iToken - p->iDoclistToken; + }else{ + pRight = p->doclist.aAll; + nRight = p->doclist.nAll; + pLeft = pList; + nLeft = nList; + nDiff = p->iDoclistToken - iToken; + } + + fts3DoclistPhraseMerge(pTab->bDescIdx, nDiff, pLeft, nLeft, pRight,&nRight); + sqlite3_free(pLeft); + p->doclist.aAll = pRight; + p->doclist.nAll = nRight; + } + + if( iToken>p->iDoclistToken ) p->iDoclistToken = iToken; } -#endif /* SQLITE_OMIT_TRACE */ -/*** EXPERIMENTAL *** +/* +** Load the doclist for phrase p into p->doclist.aAll/nAll. The loaded doclist +** does not take deferred tokens into account. ** -** Register a function to be invoked when a transaction comments. -** If the invoked function returns non-zero, then the commit becomes a -** rollback. +** SQLITE_OK is returned if no error occurs, otherwise an SQLite error code. */ -SQLITE_API void *sqlite3_commit_hook( - sqlite3 *db, /* Attach the hook to this database */ - int (*xCallback)(void*), /* Function to invoke on each commit */ - void *pArg /* Argument to the function */ +static int fts3EvalPhraseLoad( + Fts3Cursor *pCsr, /* FTS Cursor handle */ + Fts3Phrase *p /* Phrase object */ ){ - void *pOld; - sqlite3_mutex_enter(db->mutex); - pOld = db->pCommitArg; - db->xCommitCallback = xCallback; - db->pCommitArg = pArg; - sqlite3_mutex_leave(db->mutex); - return pOld; + Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab; + int iToken; + int rc = SQLITE_OK; + + for(iToken=0; rc==SQLITE_OK && iTokennToken; iToken++){ + Fts3PhraseToken *pToken = &p->aToken[iToken]; + assert( pToken->pDeferred==0 || pToken->pSegcsr==0 ); + + if( pToken->pSegcsr ){ + int nThis = 0; + char *pThis = 0; + rc = fts3TermSelect(pTab, pToken, p->iColumn, &nThis, &pThis); + if( rc==SQLITE_OK ){ + fts3EvalPhraseMergeToken(pTab, p, iToken, pThis, nThis); + } + } + assert( pToken->pSegcsr==0 ); + } + + return rc; } /* -** Register a callback to be invoked each time a row is updated, -** inserted or deleted using this database connection. +** This function is called on each phrase after the position lists for +** any deferred tokens have been loaded into memory. It updates the phrases +** current position list to include only those positions that are really +** instances of the phrase (after considering deferred tokens). If this +** means that the phrase does not appear in the current row, doclist.pList +** and doclist.nList are both zeroed. +** +** SQLITE_OK is returned if no error occurs, otherwise an SQLite error code. */ -SQLITE_API void *sqlite3_update_hook( - sqlite3 *db, /* Attach the hook to this database */ - void (*xCallback)(void*,int,char const *,char const *,sqlite_int64), - void *pArg /* Argument to the function */ -){ - void *pRet; - sqlite3_mutex_enter(db->mutex); - pRet = db->pUpdateArg; - db->xUpdateCallback = xCallback; - db->pUpdateArg = pArg; - sqlite3_mutex_leave(db->mutex); - return pRet; +static int fts3EvalDeferredPhrase(Fts3Cursor *pCsr, Fts3Phrase *pPhrase){ + int iToken; /* Used to iterate through phrase tokens */ + char *aPoslist = 0; /* Position list for deferred tokens */ + int nPoslist = 0; /* Number of bytes in aPoslist */ + int iPrev = -1; /* Token number of previous deferred token */ + + assert( pPhrase->doclist.bFreeList==0 ); + + for(iToken=0; iTokennToken; iToken++){ + Fts3PhraseToken *pToken = &pPhrase->aToken[iToken]; + Fts3DeferredToken *pDeferred = pToken->pDeferred; + + if( pDeferred ){ + char *pList; + int nList; + int rc = sqlite3Fts3DeferredTokenList(pDeferred, &pList, &nList); + if( rc!=SQLITE_OK ) return rc; + + if( pList==0 ){ + sqlite3_free(aPoslist); + pPhrase->doclist.pList = 0; + pPhrase->doclist.nList = 0; + return SQLITE_OK; + + }else if( aPoslist==0 ){ + aPoslist = pList; + nPoslist = nList; + + }else{ + char *aOut = pList; + char *p1 = aPoslist; + char *p2 = aOut; + + assert( iPrev>=0 ); + fts3PoslistPhraseMerge(&aOut, iToken-iPrev, 0, 1, &p1, &p2); + sqlite3_free(aPoslist); + aPoslist = pList; + nPoslist = (int)(aOut - aPoslist); + if( nPoslist==0 ){ + sqlite3_free(aPoslist); + pPhrase->doclist.pList = 0; + pPhrase->doclist.nList = 0; + return SQLITE_OK; + } + } + iPrev = iToken; + } + } + + if( iPrev>=0 ){ + int nMaxUndeferred = pPhrase->iDoclistToken; + if( nMaxUndeferred<0 ){ + pPhrase->doclist.pList = aPoslist; + pPhrase->doclist.nList = nPoslist; + pPhrase->doclist.iDocid = pCsr->iPrevId; + pPhrase->doclist.bFreeList = 1; + }else{ + int nDistance; + char *p1; + char *p2; + char *aOut; + + if( nMaxUndeferred>iPrev ){ + p1 = aPoslist; + p2 = pPhrase->doclist.pList; + nDistance = nMaxUndeferred - iPrev; + }else{ + p1 = pPhrase->doclist.pList; + p2 = aPoslist; + nDistance = iPrev - nMaxUndeferred; + } + + aOut = (char *)sqlite3_malloc(nPoslist+8); + if( !aOut ){ + sqlite3_free(aPoslist); + return SQLITE_NOMEM; + } + + pPhrase->doclist.pList = aOut; + if( fts3PoslistPhraseMerge(&aOut, nDistance, 0, 1, &p1, &p2) ){ + pPhrase->doclist.bFreeList = 1; + pPhrase->doclist.nList = (int)(aOut - pPhrase->doclist.pList); + }else{ + sqlite3_free(aOut); + pPhrase->doclist.pList = 0; + pPhrase->doclist.nList = 0; + } + sqlite3_free(aPoslist); + } + } + + return SQLITE_OK; } /* -** Register a callback to be invoked each time a transaction is rolled -** back by this database connection. +** This function is called for each Fts3Phrase in a full-text query +** expression to initialize the mechanism for returning rows. Once this +** function has been called successfully on an Fts3Phrase, it may be +** used with fts3EvalPhraseNext() to iterate through the matching docids. +** +** If parameter bOptOk is true, then the phrase may (or may not) use the +** incremental loading strategy. Otherwise, the entire doclist is loaded into +** memory within this call. +** +** SQLITE_OK is returned if no error occurs, otherwise an SQLite error code. */ -SQLITE_API void *sqlite3_rollback_hook( - sqlite3 *db, /* Attach the hook to this database */ - void (*xCallback)(void*), /* Callback function */ - void *pArg /* Argument to the function */ -){ - void *pRet; - sqlite3_mutex_enter(db->mutex); - pRet = db->pRollbackArg; - db->xRollbackCallback = xCallback; - db->pRollbackArg = pArg; - sqlite3_mutex_leave(db->mutex); - return pRet; +static int fts3EvalPhraseStart(Fts3Cursor *pCsr, int bOptOk, Fts3Phrase *p){ + int rc; /* Error code */ + Fts3PhraseToken *pFirst = &p->aToken[0]; + Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab; + + if( pCsr->bDesc==pTab->bDescIdx + && bOptOk==1 + && p->nToken==1 + && pFirst->pSegcsr + && pFirst->pSegcsr->bLookup + && pFirst->bFirst==0 + ){ + /* Use the incremental approach. */ + int iCol = (p->iColumn >= pTab->nColumn ? -1 : p->iColumn); + rc = sqlite3Fts3MsrIncrStart( + pTab, pFirst->pSegcsr, iCol, pFirst->z, pFirst->n); + p->bIncr = 1; + + }else{ + /* Load the full doclist for the phrase into memory. */ + rc = fts3EvalPhraseLoad(pCsr, p); + p->bIncr = 0; + } + + assert( rc!=SQLITE_OK || p->nToken<1 || p->aToken[0].pSegcsr==0 || p->bIncr ); + return rc; } /* -** This function returns true if main-memory should be used instead of -** a temporary file for transient pager files and statement journals. -** The value returned depends on the value of db->temp_store (runtime -** parameter) and the compile time value of SQLITE_TEMP_STORE. The -** following table describes the relationship between these two values -** and this functions return value. +** This function is used to iterate backwards (from the end to start) +** through doclists. It is used by this module to iterate through phrase +** doclists in reverse and by the fts3_write.c module to iterate through +** pending-terms lists when writing to databases with "order=desc". ** -** SQLITE_TEMP_STORE db->temp_store Location of temporary database -** ----------------- -------------- ------------------------------ -** 0 any file (return 0) -** 1 1 file (return 0) -** 1 2 memory (return 1) -** 1 0 file (return 0) -** 2 1 file (return 0) -** 2 2 memory (return 1) -** 2 0 memory (return 1) -** 3 any memory (return 1) +** The doclist may be sorted in ascending (parameter bDescIdx==0) or +** descending (parameter bDescIdx==1) order of docid. Regardless, this +** function iterates from the end of the doclist to the beginning. */ -SQLITE_PRIVATE int sqlite3TempInMemory(const sqlite3 *db){ -#if SQLITE_TEMP_STORE==1 - return ( db->temp_store==2 ); -#endif -#if SQLITE_TEMP_STORE==2 - return ( db->temp_store!=1 ); -#endif -#if SQLITE_TEMP_STORE==3 - return 1; -#endif -#if SQLITE_TEMP_STORE<1 || SQLITE_TEMP_STORE>3 - return 0; -#endif +SQLITE_PRIVATE void sqlite3Fts3DoclistPrev( + int bDescIdx, /* True if the doclist is desc */ + char *aDoclist, /* Pointer to entire doclist */ + int nDoclist, /* Length of aDoclist in bytes */ + char **ppIter, /* IN/OUT: Iterator pointer */ + sqlite3_int64 *piDocid, /* IN/OUT: Docid pointer */ + int *pnList, /* OUT: List length pointer */ + u8 *pbEof /* OUT: End-of-file flag */ +){ + char *p = *ppIter; + + assert( nDoclist>0 ); + assert( *pbEof==0 ); + assert( p || *piDocid==0 ); + assert( !p || (p>aDoclist && p<&aDoclist[nDoclist]) ); + + if( p==0 ){ + sqlite3_int64 iDocid = 0; + char *pNext = 0; + char *pDocid = aDoclist; + char *pEnd = &aDoclist[nDoclist]; + int iMul = 1; + + while( pDocidmutex) ); - assert( ppBtree != 0); - if( omitJournal ){ - btFlags |= BTREE_OMIT_JOURNAL; - } - if( db->flags & SQLITE_NoReadlock ){ - btFlags |= BTREE_NO_READLOCK; - } -#ifndef SQLITE_OMIT_MEMORYDB - if( zFilename==0 && sqlite3TempInMemory(db) ){ - zFilename = ":memory:"; - } -#endif + char *p = *ppIter; - if( (vfsFlags & SQLITE_OPEN_MAIN_DB)!=0 && (zFilename==0 || *zFilename==0) ){ - vfsFlags = (vfsFlags & ~SQLITE_OPEN_MAIN_DB) | SQLITE_OPEN_TEMP_DB; - } - rc = sqlite3BtreeOpen(zFilename, (sqlite3 *)db, ppBtree, btFlags, vfsFlags); + assert( nDoclist>0 ); + assert( *pbEof==0 ); + assert( p || *piDocid==0 ); + assert( !p || (p>=aDoclist && p<=&aDoclist[nDoclist]) ); - /* If the B-Tree was successfully opened, set the pager-cache size to the - ** default value. Except, if the call to BtreeOpen() returned a handle - ** open on an existing shared pager-cache, do not change the pager-cache - ** size. - */ - if( rc==SQLITE_OK && 0==sqlite3BtreeSchema(*ppBtree, 0, 0) ){ - sqlite3BtreeSetCacheSize(*ppBtree, nCache); + if( p==0 ){ + p = aDoclist; + p += sqlite3Fts3GetVarint(p, piDocid); + }else{ + fts3PoslistCopy(0, &p); + if( p>=&aDoclist[nDoclist] ){ + *pbEof = 1; + }else{ + sqlite3_int64 iVar; + p += sqlite3Fts3GetVarint(p, &iVar); + *piDocid += ((bDescIdx ? -1 : 1) * iVar); + } } - return rc; + + *ppIter = p; } /* -** Return UTF-8 encoded English language explanation of the most recent -** error. +** Attempt to move the phrase iterator to point to the next matching docid. +** If an error occurs, return an SQLite error code. Otherwise, return +** SQLITE_OK. +** +** If there is no "next" entry and no error occurs, then *pbEof is set to +** 1 before returning. Otherwise, if no error occurs and the iterator is +** successfully advanced, *pbEof is set to 0. */ -SQLITE_API const char *sqlite3_errmsg(sqlite3 *db){ - const char *z; - if( !db ){ - return sqlite3ErrStr(SQLITE_NOMEM); - } - if( !sqlite3SafetyCheckSickOrOk(db) ){ - return sqlite3ErrStr(SQLITE_MISUSE); - } - sqlite3_mutex_enter(db->mutex); - if( db->mallocFailed ){ - z = sqlite3ErrStr(SQLITE_NOMEM); +static int fts3EvalPhraseNext( + Fts3Cursor *pCsr, /* FTS Cursor handle */ + Fts3Phrase *p, /* Phrase object to advance to next docid */ + u8 *pbEof /* OUT: Set to 1 if EOF */ +){ + int rc = SQLITE_OK; + Fts3Doclist *pDL = &p->doclist; + Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab; + + if( p->bIncr ){ + assert( p->nToken==1 ); + assert( pDL->pNextDocid==0 ); + rc = sqlite3Fts3MsrIncrNext(pTab, p->aToken[0].pSegcsr, + &pDL->iDocid, &pDL->pList, &pDL->nList + ); + if( rc==SQLITE_OK && !pDL->pList ){ + *pbEof = 1; + } + }else if( pCsr->bDesc!=pTab->bDescIdx && pDL->nAll ){ + sqlite3Fts3DoclistPrev(pTab->bDescIdx, pDL->aAll, pDL->nAll, + &pDL->pNextDocid, &pDL->iDocid, &pDL->nList, pbEof + ); + pDL->pList = pDL->pNextDocid; }else{ - z = (char*)sqlite3_value_text(db->pErr); - assert( !db->mallocFailed ); - if( z==0 ){ - z = sqlite3ErrStr(db->errCode); + char *pIter; /* Used to iterate through aAll */ + char *pEnd = &pDL->aAll[pDL->nAll]; /* 1 byte past end of aAll */ + if( pDL->pNextDocid ){ + pIter = pDL->pNextDocid; + }else{ + pIter = pDL->aAll; + } + + if( pIter>=pEnd ){ + /* We have already reached the end of this doclist. EOF. */ + *pbEof = 1; + }else{ + sqlite3_int64 iDelta; + pIter += sqlite3Fts3GetVarint(pIter, &iDelta); + if( pTab->bDescIdx==0 || pDL->pNextDocid==0 ){ + pDL->iDocid += iDelta; + }else{ + pDL->iDocid -= iDelta; + } + pDL->pList = pIter; + fts3PoslistCopy(0, &pIter); + pDL->nList = (int)(pIter - pDL->pList); + + /* pIter now points just past the 0x00 that terminates the position- + ** list for document pDL->iDocid. However, if this position-list was + ** edited in place by fts3EvalNearTrim(), then pIter may not actually + ** point to the start of the next docid value. The following line deals + ** with this case by advancing pIter past the zero-padding added by + ** fts3EvalNearTrim(). */ + while( pIterpNextDocid = pIter; + assert( pIter>=&pDL->aAll[pDL->nAll] || *pIter ); + *pbEof = 0; } } - sqlite3_mutex_leave(db->mutex); - return z; + + return rc; } -#ifndef SQLITE_OMIT_UTF16 /* -** Return UTF-16 encoded English language explanation of the most recent -** error. +** +** If *pRc is not SQLITE_OK when this function is called, it is a no-op. +** Otherwise, fts3EvalPhraseStart() is called on all phrases within the +** expression. Also the Fts3Expr.bDeferred variable is set to true for any +** expressions for which all descendent tokens are deferred. +** +** If parameter bOptOk is zero, then it is guaranteed that the +** Fts3Phrase.doclist.aAll/nAll variables contain the entire doclist for +** each phrase in the expression (subject to deferred token processing). +** Or, if bOptOk is non-zero, then one or more tokens within the expression +** may be loaded incrementally, meaning doclist.aAll/nAll is not available. +** +** If an error occurs within this function, *pRc is set to an SQLite error +** code before returning. */ -SQLITE_API const void *sqlite3_errmsg16(sqlite3 *db){ - static const u16 outOfMem[] = { - 'o', 'u', 't', ' ', 'o', 'f', ' ', 'm', 'e', 'm', 'o', 'r', 'y', 0 - }; - static const u16 misuse[] = { - 'l', 'i', 'b', 'r', 'a', 'r', 'y', ' ', - 'r', 'o', 'u', 't', 'i', 'n', 'e', ' ', - 'c', 'a', 'l', 'l', 'e', 'd', ' ', - 'o', 'u', 't', ' ', - 'o', 'f', ' ', - 's', 'e', 'q', 'u', 'e', 'n', 'c', 'e', 0 - }; - - const void *z; - if( !db ){ - return (void *)outOfMem; - } - if( !sqlite3SafetyCheckSickOrOk(db) ){ - return (void *)misuse; - } - sqlite3_mutex_enter(db->mutex); - if( db->mallocFailed ){ - z = (void *)outOfMem; - }else{ - z = sqlite3_value_text16(db->pErr); - if( z==0 ){ - sqlite3ValueSetStr(db->pErr, -1, sqlite3ErrStr(db->errCode), - SQLITE_UTF8, SQLITE_STATIC); - z = sqlite3_value_text16(db->pErr); +static void fts3EvalStartReaders( + Fts3Cursor *pCsr, /* FTS Cursor handle */ + Fts3Expr *pExpr, /* Expression to initialize phrases in */ + int bOptOk, /* True to enable incremental loading */ + int *pRc /* IN/OUT: Error code */ +){ + if( pExpr && SQLITE_OK==*pRc ){ + if( pExpr->eType==FTSQUERY_PHRASE ){ + int i; + int nToken = pExpr->pPhrase->nToken; + for(i=0; ipPhrase->aToken[i].pDeferred==0 ) break; + } + pExpr->bDeferred = (i==nToken); + *pRc = fts3EvalPhraseStart(pCsr, bOptOk, pExpr->pPhrase); + }else{ + fts3EvalStartReaders(pCsr, pExpr->pLeft, bOptOk, pRc); + fts3EvalStartReaders(pCsr, pExpr->pRight, bOptOk, pRc); + pExpr->bDeferred = (pExpr->pLeft->bDeferred && pExpr->pRight->bDeferred); } - /* A malloc() may have failed within the call to sqlite3_value_text16() - ** above. If this is the case, then the db->mallocFailed flag needs to - ** be cleared before returning. Do this directly, instead of via - ** sqlite3ApiExit(), to avoid setting the database handle error message. - */ - db->mallocFailed = 0; } - sqlite3_mutex_leave(db->mutex); - return z; } -#endif /* SQLITE_OMIT_UTF16 */ /* -** Return the most recent error code generated by an SQLite routine. If NULL is -** passed to this function, we assume a malloc() failed during sqlite3_open(). +** An array of the following structures is assembled as part of the process +** of selecting tokens to defer before the query starts executing (as part +** of the xFilter() method). There is one element in the array for each +** token in the FTS expression. +** +** Tokens are divided into AND/NEAR clusters. All tokens in a cluster belong +** to phrases that are connected only by AND and NEAR operators (not OR or +** NOT). When determining tokens to defer, each AND/NEAR cluster is considered +** separately. The root of a tokens AND/NEAR cluster is stored in +** Fts3TokenAndCost.pRoot. */ -SQLITE_API int sqlite3_errcode(sqlite3 *db){ - if( db && !sqlite3SafetyCheckSickOrOk(db) ){ - return SQLITE_MISUSE; - } - if( !db || db->mallocFailed ){ - return SQLITE_NOMEM; +typedef struct Fts3TokenAndCost Fts3TokenAndCost; +struct Fts3TokenAndCost { + Fts3Phrase *pPhrase; /* The phrase the token belongs to */ + int iToken; /* Position of token in phrase */ + Fts3PhraseToken *pToken; /* The token itself */ + Fts3Expr *pRoot; /* Root of NEAR/AND cluster */ + int nOvfl; /* Number of overflow pages to load doclist */ + int iCol; /* The column the token must match */ +}; + +/* +** This function is used to populate an allocated Fts3TokenAndCost array. +** +** If *pRc is not SQLITE_OK when this function is called, it is a no-op. +** Otherwise, if an error occurs during execution, *pRc is set to an +** SQLite error code. +*/ +static void fts3EvalTokenCosts( + Fts3Cursor *pCsr, /* FTS Cursor handle */ + Fts3Expr *pRoot, /* Root of current AND/NEAR cluster */ + Fts3Expr *pExpr, /* Expression to consider */ + Fts3TokenAndCost **ppTC, /* Write new entries to *(*ppTC)++ */ + Fts3Expr ***ppOr, /* Write new OR root to *(*ppOr)++ */ + int *pRc /* IN/OUT: Error code */ +){ + if( *pRc==SQLITE_OK ){ + if( pExpr->eType==FTSQUERY_PHRASE ){ + Fts3Phrase *pPhrase = pExpr->pPhrase; + int i; + for(i=0; *pRc==SQLITE_OK && inToken; i++){ + Fts3TokenAndCost *pTC = (*ppTC)++; + pTC->pPhrase = pPhrase; + pTC->iToken = i; + pTC->pRoot = pRoot; + pTC->pToken = &pPhrase->aToken[i]; + pTC->iCol = pPhrase->iColumn; + *pRc = sqlite3Fts3MsrOvfl(pCsr, pTC->pToken->pSegcsr, &pTC->nOvfl); + } + }else if( pExpr->eType!=FTSQUERY_NOT ){ + assert( pExpr->eType==FTSQUERY_OR + || pExpr->eType==FTSQUERY_AND + || pExpr->eType==FTSQUERY_NEAR + ); + assert( pExpr->pLeft && pExpr->pRight ); + if( pExpr->eType==FTSQUERY_OR ){ + pRoot = pExpr->pLeft; + **ppOr = pRoot; + (*ppOr)++; + } + fts3EvalTokenCosts(pCsr, pRoot, pExpr->pLeft, ppTC, ppOr, pRc); + if( pExpr->eType==FTSQUERY_OR ){ + pRoot = pExpr->pRight; + **ppOr = pRoot; + (*ppOr)++; + } + fts3EvalTokenCosts(pCsr, pRoot, pExpr->pRight, ppTC, ppOr, pRc); + } } - return db->errCode & db->errMask; } -SQLITE_API int sqlite3_extended_errcode(sqlite3 *db){ - if( db && !sqlite3SafetyCheckSickOrOk(db) ){ - return SQLITE_MISUSE; - } - if( !db || db->mallocFailed ){ - return SQLITE_NOMEM; + +/* +** Determine the average document (row) size in pages. If successful, +** write this value to *pnPage and return SQLITE_OK. Otherwise, return +** an SQLite error code. +** +** The average document size in pages is calculated by first calculating +** determining the average size in bytes, B. If B is less than the amount +** of data that will fit on a single leaf page of an intkey table in +** this database, then the average docsize is 1. Otherwise, it is 1 plus +** the number of overflow pages consumed by a record B bytes in size. +*/ +static int fts3EvalAverageDocsize(Fts3Cursor *pCsr, int *pnPage){ + if( pCsr->nRowAvg==0 ){ + /* The average document size, which is required to calculate the cost + ** of each doclist, has not yet been determined. Read the required + ** data from the %_stat table to calculate it. + ** + ** Entry 0 of the %_stat table is a blob containing (nCol+1) FTS3 + ** varints, where nCol is the number of columns in the FTS3 table. + ** The first varint is the number of documents currently stored in + ** the table. The following nCol varints contain the total amount of + ** data stored in all rows of each column of the table, from left + ** to right. + */ + int rc; + Fts3Table *p = (Fts3Table*)pCsr->base.pVtab; + sqlite3_stmt *pStmt; + sqlite3_int64 nDoc = 0; + sqlite3_int64 nByte = 0; + const char *pEnd; + const char *a; + + rc = sqlite3Fts3SelectDoctotal(p, &pStmt); + if( rc!=SQLITE_OK ) return rc; + a = sqlite3_column_blob(pStmt, 0); + assert( a ); + + pEnd = &a[sqlite3_column_bytes(pStmt, 0)]; + a += sqlite3Fts3GetVarint(a, &nDoc); + while( anDoc = nDoc; + pCsr->nRowAvg = (int)(((nByte / nDoc) + p->nPgsz) / p->nPgsz); + assert( pCsr->nRowAvg>0 ); + rc = sqlite3_reset(pStmt); + if( rc!=SQLITE_OK ) return rc; } - return db->errCode; + + *pnPage = pCsr->nRowAvg; + return SQLITE_OK; } /* -** Create a new collating function for database "db". The name is zName -** and the encoding is enc. +** This function is called to select the tokens (if any) that will be +** deferred. The array aTC[] has already been populated when this is +** called. +** +** This function is called once for each AND/NEAR cluster in the +** expression. Each invocation determines which tokens to defer within +** the cluster with root node pRoot. See comments above the definition +** of struct Fts3TokenAndCost for more details. +** +** If no error occurs, SQLITE_OK is returned and sqlite3Fts3DeferToken() +** called on each token to defer. Otherwise, an SQLite error code is +** returned. */ -static int createCollation( - sqlite3* db, - const char *zName, - int enc, - void* pCtx, - int(*xCompare)(void*,int,const void*,int,const void*), - void(*xDel)(void*) +static int fts3EvalSelectDeferred( + Fts3Cursor *pCsr, /* FTS Cursor handle */ + Fts3Expr *pRoot, /* Consider tokens with this root node */ + Fts3TokenAndCost *aTC, /* Array of expression tokens and costs */ + int nTC /* Number of entries in aTC[] */ ){ - CollSeq *pColl; - int enc2; - int nName = sqlite3Strlen30(zName); - - assert( sqlite3_mutex_held(db->mutex) ); - - /* If SQLITE_UTF16 is specified as the encoding type, transform this - ** to one of SQLITE_UTF16LE or SQLITE_UTF16BE using the - ** SQLITE_UTF16NATIVE macro. SQLITE_UTF16 is not used internally. - */ - enc2 = enc; - testcase( enc2==SQLITE_UTF16 ); - testcase( enc2==SQLITE_UTF16_ALIGNED ); - if( enc2==SQLITE_UTF16 || enc2==SQLITE_UTF16_ALIGNED ){ - enc2 = SQLITE_UTF16NATIVE; + Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab; + int nDocSize = 0; /* Number of pages per doc loaded */ + int rc = SQLITE_OK; /* Return code */ + int ii; /* Iterator variable for various purposes */ + int nOvfl = 0; /* Total overflow pages used by doclists */ + int nToken = 0; /* Total number of tokens in cluster */ + + int nMinEst = 0; /* The minimum count for any phrase so far. */ + int nLoad4 = 1; /* (Phrases that will be loaded)^4. */ + + /* Tokens are never deferred for FTS tables created using the content=xxx + ** option. The reason being that it is not guaranteed that the content + ** table actually contains the same data as the index. To prevent this from + ** causing any problems, the deferred token optimization is completely + ** disabled for content=xxx tables. */ + if( pTab->zContentTbl ){ + return SQLITE_OK; } - if( enc2SQLITE_UTF16BE ){ - return SQLITE_MISUSE; + + /* Count the tokens in this AND/NEAR cluster. If none of the doclists + ** associated with the tokens spill onto overflow pages, or if there is + ** only 1 token, exit early. No tokens to defer in this case. */ + for(ii=0; ii0 ); + + + /* Iterate through all tokens in this AND/NEAR cluster, in ascending order + ** of the number of overflow pages that will be loaded by the pager layer + ** to retrieve the entire doclist for the token from the full-text index. + ** Load the doclists for tokens that are either: + ** + ** a. The cheapest token in the entire query (i.e. the one visited by the + ** first iteration of this loop), or + ** + ** b. Part of a multi-token phrase. + ** + ** After each token doclist is loaded, merge it with the others from the + ** same phrase and count the number of documents that the merged doclist + ** contains. Set variable "nMinEst" to the smallest number of documents in + ** any phrase doclist for which 1 or more token doclists have been loaded. + ** Let nOther be the number of other phrases for which it is certain that + ** one or more tokens will not be deferred. + ** + ** Then, for each token, defer it if loading the doclist would result in + ** loading N or more overflow pages into memory, where N is computed as: + ** + ** (nMinEst + 4^nOther - 1) / (4^nOther) */ - pColl = sqlite3FindCollSeq(db, (u8)enc2, zName, 0); - if( pColl && pColl->xCmp ){ - if( db->activeVdbeCnt ){ - sqlite3Error(db, SQLITE_BUSY, - "unable to delete/modify collation sequence due to active statements"); - return SQLITE_BUSY; + for(ii=0; iinOvfl) + ){ + pTC = &aTC[iTC]; + } } - sqlite3ExpirePreparedStatements(db); + assert( pTC ); - /* If collation sequence pColl was created directly by a call to - ** sqlite3_create_collation, and not generated by synthCollSeq(), - ** then any copies made by synthCollSeq() need to be invalidated. - ** Also, collation destructor - CollSeq.xDel() - function may need - ** to be called. - */ - if( (pColl->enc & ~SQLITE_UTF16_ALIGNED)==enc2 ){ - CollSeq *aColl = sqlite3HashFind(&db->aCollSeq, zName, nName); - int j; - for(j=0; j<3; j++){ - CollSeq *p = &aColl[j]; - if( p->enc==pColl->enc ){ - if( p->xDel ){ - p->xDel(p->pUser); - } - p->xCmp = 0; + if( ii && pTC->nOvfl>=((nMinEst+(nLoad4/4)-1)/(nLoad4/4))*nDocSize ){ + /* The number of overflow pages to load for this (and therefore all + ** subsequent) tokens is greater than the estimated number of pages + ** that will be loaded if all subsequent tokens are deferred. + */ + Fts3PhraseToken *pToken = pTC->pToken; + rc = sqlite3Fts3DeferToken(pCsr, pToken, pTC->iCol); + fts3SegReaderCursorFree(pToken->pSegcsr); + pToken->pSegcsr = 0; + }else{ + /* Set nLoad4 to the value of (4^nOther) for the next iteration of the + ** for-loop. Except, limit the value to 2^24 to prevent it from + ** overflowing the 32-bit integer it is stored in. */ + if( ii<12 ) nLoad4 = nLoad4*4; + + if( ii==0 || pTC->pPhrase->nToken>1 ){ + /* Either this is the cheapest token in the entire query, or it is + ** part of a multi-token phrase. Either way, the entire doclist will + ** (eventually) be loaded into memory. It may as well be now. */ + Fts3PhraseToken *pToken = pTC->pToken; + int nList = 0; + char *pList = 0; + rc = fts3TermSelect(pTab, pToken, pTC->iCol, &nList, &pList); + assert( rc==SQLITE_OK || pList==0 ); + if( rc==SQLITE_OK ){ + int nCount; + fts3EvalPhraseMergeToken(pTab, pTC->pPhrase, pTC->iToken,pList,nList); + nCount = fts3DoclistCountDocids( + pTC->pPhrase->doclist.aAll, pTC->pPhrase->doclist.nAll + ); + if( ii==0 || nCountpToken = 0; } - pColl = sqlite3FindCollSeq(db, (u8)enc2, zName, 1); - if( pColl ){ - pColl->xCmp = xCompare; - pColl->pUser = pCtx; - pColl->xDel = xDel; - pColl->enc = (u8)(enc2 | (enc & SQLITE_UTF16_ALIGNED)); - } - sqlite3Error(db, SQLITE_OK, 0); - return SQLITE_OK; + return rc; } - /* -** This array defines hard upper bounds on limit values. The -** initializer must be kept in sync with the SQLITE_LIMIT_* -** #defines in sqlite3.h. +** This function is called from within the xFilter method. It initializes +** the full-text query currently stored in pCsr->pExpr. To iterate through +** the results of a query, the caller does: +** +** fts3EvalStart(pCsr); +** while( 1 ){ +** fts3EvalNext(pCsr); +** if( pCsr->bEof ) break; +** ... return row pCsr->iPrevId to the caller ... +** } */ -static const int aHardLimit[] = { - SQLITE_MAX_LENGTH, - SQLITE_MAX_SQL_LENGTH, - SQLITE_MAX_COLUMN, - SQLITE_MAX_EXPR_DEPTH, - SQLITE_MAX_COMPOUND_SELECT, - SQLITE_MAX_VDBE_OP, - SQLITE_MAX_FUNCTION_ARG, - SQLITE_MAX_ATTACHED, - SQLITE_MAX_LIKE_PATTERN_LENGTH, - SQLITE_MAX_VARIABLE_NUMBER, -}; +static int fts3EvalStart(Fts3Cursor *pCsr){ + Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab; + int rc = SQLITE_OK; + int nToken = 0; + int nOr = 0; + + /* Allocate a MultiSegReader for each token in the expression. */ + fts3EvalAllocateReaders(pCsr, pCsr->pExpr, &nToken, &nOr, &rc); + + /* Determine which, if any, tokens in the expression should be deferred. */ + if( rc==SQLITE_OK && nToken>1 && pTab->bFts4 ){ + Fts3TokenAndCost *aTC; + Fts3Expr **apOr; + aTC = (Fts3TokenAndCost *)sqlite3_malloc( + sizeof(Fts3TokenAndCost) * nToken + + sizeof(Fts3Expr *) * nOr * 2 + ); + apOr = (Fts3Expr **)&aTC[nToken]; + + if( !aTC ){ + rc = SQLITE_NOMEM; + }else{ + int ii; + Fts3TokenAndCost *pTC = aTC; + Fts3Expr **ppOr = apOr; + + fts3EvalTokenCosts(pCsr, 0, pCsr->pExpr, &pTC, &ppOr, &rc); + nToken = (int)(pTC-aTC); + nOr = (int)(ppOr-apOr); + + if( rc==SQLITE_OK ){ + rc = fts3EvalSelectDeferred(pCsr, 0, aTC, nToken); + for(ii=0; rc==SQLITE_OK && iipExpr, 1, &rc); + return rc; +} /* -** Make sure the hard limits are set to reasonable values +** Invalidate the current position list for phrase pPhrase. */ -#if SQLITE_MAX_LENGTH<100 -# error SQLITE_MAX_LENGTH must be at least 100 -#endif -#if SQLITE_MAX_SQL_LENGTH<100 -# error SQLITE_MAX_SQL_LENGTH must be at least 100 -#endif -#if SQLITE_MAX_SQL_LENGTH>SQLITE_MAX_LENGTH -# error SQLITE_MAX_SQL_LENGTH must not be greater than SQLITE_MAX_LENGTH -#endif -#if SQLITE_MAX_COMPOUND_SELECT<2 -# error SQLITE_MAX_COMPOUND_SELECT must be at least 2 -#endif -#if SQLITE_MAX_VDBE_OP<40 -# error SQLITE_MAX_VDBE_OP must be at least 40 -#endif -#if SQLITE_MAX_FUNCTION_ARG<0 || SQLITE_MAX_FUNCTION_ARG>1000 -# error SQLITE_MAX_FUNCTION_ARG must be between 0 and 1000 -#endif -#if SQLITE_MAX_ATTACHED<0 || SQLITE_MAX_ATTACHED>30 -# error SQLITE_MAX_ATTACHED must be between 0 and 30 -#endif -#if SQLITE_MAX_LIKE_PATTERN_LENGTH<1 -# error SQLITE_MAX_LIKE_PATTERN_LENGTH must be at least 1 -#endif -#if SQLITE_MAX_VARIABLE_NUMBER<1 -# error SQLITE_MAX_VARIABLE_NUMBER must be at least 1 -#endif -#if SQLITE_MAX_COLUMN>32767 -# error SQLITE_MAX_COLUMN must not exceed 32767 -#endif - +static void fts3EvalInvalidatePoslist(Fts3Phrase *pPhrase){ + if( pPhrase->doclist.bFreeList ){ + sqlite3_free(pPhrase->doclist.pList); + } + pPhrase->doclist.pList = 0; + pPhrase->doclist.nList = 0; + pPhrase->doclist.bFreeList = 0; +} /* -** Change the value of a limit. Report the old value. -** If an invalid limit index is supplied, report -1. -** Make no changes but still report the old value if the -** new limit is negative. +** This function is called to edit the position list associated with +** the phrase object passed as the fifth argument according to a NEAR +** condition. For example: ** -** A new lower limit does not shrink existing constructs. -** It merely prevents new constructs that exceed the limit -** from forming. +** abc NEAR/5 "def ghi" +** +** Parameter nNear is passed the NEAR distance of the expression (5 in +** the example above). When this function is called, *paPoslist points to +** the position list, and *pnToken is the number of phrase tokens in, the +** phrase on the other side of the NEAR operator to pPhrase. For example, +** if pPhrase refers to the "def ghi" phrase, then *paPoslist points to +** the position list associated with phrase "abc". +** +** All positions in the pPhrase position list that are not sufficiently +** close to a position in the *paPoslist position list are removed. If this +** leaves 0 positions, zero is returned. Otherwise, non-zero. +** +** Before returning, *paPoslist is set to point to the position lsit +** associated with pPhrase. And *pnToken is set to the number of tokens in +** pPhrase. */ -SQLITE_API int sqlite3_limit(sqlite3 *db, int limitId, int newLimit){ - int oldLimit; - if( limitId<0 || limitId>=SQLITE_N_LIMIT ){ - return -1; - } - oldLimit = db->aLimit[limitId]; - if( newLimit>=0 ){ - if( newLimit>aHardLimit[limitId] ){ - newLimit = aHardLimit[limitId]; - } - db->aLimit[limitId] = newLimit; +static int fts3EvalNearTrim( + int nNear, /* NEAR distance. As in "NEAR/nNear". */ + char *aTmp, /* Temporary space to use */ + char **paPoslist, /* IN/OUT: Position list */ + int *pnToken, /* IN/OUT: Tokens in phrase of *paPoslist */ + Fts3Phrase *pPhrase /* The phrase object to trim the doclist of */ +){ + int nParam1 = nNear + pPhrase->nToken; + int nParam2 = nNear + *pnToken; + int nNew; + char *p2; + char *pOut; + int res; + + assert( pPhrase->doclist.pList ); + + p2 = pOut = pPhrase->doclist.pList; + res = fts3PoslistNearMerge( + &pOut, aTmp, nParam1, nParam2, paPoslist, &p2 + ); + if( res ){ + nNew = (int)(pOut - pPhrase->doclist.pList) - 1; + assert( pPhrase->doclist.pList[nNew]=='\0' ); + assert( nNew<=pPhrase->doclist.nList && nNew>0 ); + memset(&pPhrase->doclist.pList[nNew], 0, pPhrase->doclist.nList - nNew); + pPhrase->doclist.nList = nNew; + *paPoslist = pPhrase->doclist.pList; + *pnToken = pPhrase->nToken; } - return oldLimit; + + return res; } /* -** This routine does the work of opening a database on behalf of -** sqlite3_open() and sqlite3_open16(). The database filename "zFilename" -** is UTF-8 encoded. +** This function is a no-op if *pRc is other than SQLITE_OK when it is called. +** Otherwise, it advances the expression passed as the second argument to +** point to the next matching row in the database. Expressions iterate through +** matching rows in docid order. Ascending order if Fts3Cursor.bDesc is zero, +** or descending if it is non-zero. +** +** If an error occurs, *pRc is set to an SQLite error code. Otherwise, if +** successful, the following variables in pExpr are set: +** +** Fts3Expr.bEof (non-zero if EOF - there is no next row) +** Fts3Expr.iDocid (valid if bEof==0. The docid of the next row) +** +** If the expression is of type FTSQUERY_PHRASE, and the expression is not +** at EOF, then the following variables are populated with the position list +** for the phrase for the visited row: +** +** FTs3Expr.pPhrase->doclist.nList (length of pList in bytes) +** FTs3Expr.pPhrase->doclist.pList (pointer to position list) +** +** It says above that this function advances the expression to the next +** matching row. This is usually true, but there are the following exceptions: +** +** 1. Deferred tokens are not taken into account. If a phrase consists +** entirely of deferred tokens, it is assumed to match every row in +** the db. In this case the position-list is not populated at all. +** +** Or, if a phrase contains one or more deferred tokens and one or +** more non-deferred tokens, then the expression is advanced to the +** next possible match, considering only non-deferred tokens. In other +** words, if the phrase is "A B C", and "B" is deferred, the expression +** is advanced to the next row that contains an instance of "A * C", +** where "*" may match any single token. The position list in this case +** is populated as for "A * C" before returning. +** +** 2. NEAR is treated as AND. If the expression is "x NEAR y", it is +** advanced to point to the next row that matches "x AND y". +** +** See fts3EvalTestDeferredAndNear() for details on testing if a row is +** really a match, taking into account deferred tokens and NEAR operators. */ -static int openDatabase( - const char *zFilename, /* Database filename UTF-8 encoded */ - sqlite3 **ppDb, /* OUT: Returned database handle */ - unsigned flags, /* Operational flags */ - const char *zVfs /* Name of the VFS to use */ +static void fts3EvalNextRow( + Fts3Cursor *pCsr, /* FTS Cursor handle */ + Fts3Expr *pExpr, /* Expr. to advance to next matching row */ + int *pRc /* IN/OUT: Error code */ ){ - sqlite3 *db; - int rc; - CollSeq *pColl; - int isThreadsafe; + if( *pRc==SQLITE_OK ){ + int bDescDoclist = pCsr->bDesc; /* Used by DOCID_CMP() macro */ + assert( pExpr->bEof==0 ); + pExpr->bStart = 1; - *ppDb = 0; -#ifndef SQLITE_OMIT_AUTOINIT - rc = sqlite3_initialize(); - if( rc ) return rc; -#endif + switch( pExpr->eType ){ + case FTSQUERY_NEAR: + case FTSQUERY_AND: { + Fts3Expr *pLeft = pExpr->pLeft; + Fts3Expr *pRight = pExpr->pRight; + assert( !pLeft->bDeferred || !pRight->bDeferred ); + + if( pLeft->bDeferred ){ + /* LHS is entirely deferred. So we assume it matches every row. + ** Advance the RHS iterator to find the next row visited. */ + fts3EvalNextRow(pCsr, pRight, pRc); + pExpr->iDocid = pRight->iDocid; + pExpr->bEof = pRight->bEof; + }else if( pRight->bDeferred ){ + /* RHS is entirely deferred. So we assume it matches every row. + ** Advance the LHS iterator to find the next row visited. */ + fts3EvalNextRow(pCsr, pLeft, pRc); + pExpr->iDocid = pLeft->iDocid; + pExpr->bEof = pLeft->bEof; + }else{ + /* Neither the RHS or LHS are deferred. */ + fts3EvalNextRow(pCsr, pLeft, pRc); + fts3EvalNextRow(pCsr, pRight, pRc); + while( !pLeft->bEof && !pRight->bEof && *pRc==SQLITE_OK ){ + sqlite3_int64 iDiff = DOCID_CMP(pLeft->iDocid, pRight->iDocid); + if( iDiff==0 ) break; + if( iDiff<0 ){ + fts3EvalNextRow(pCsr, pLeft, pRc); + }else{ + fts3EvalNextRow(pCsr, pRight, pRc); + } + } + pExpr->iDocid = pLeft->iDocid; + pExpr->bEof = (pLeft->bEof || pRight->bEof); + } + break; + } + + case FTSQUERY_OR: { + Fts3Expr *pLeft = pExpr->pLeft; + Fts3Expr *pRight = pExpr->pRight; + sqlite3_int64 iCmp = DOCID_CMP(pLeft->iDocid, pRight->iDocid); - if( sqlite3GlobalConfig.bCoreMutex==0 ){ - isThreadsafe = 0; - }else if( flags & SQLITE_OPEN_NOMUTEX ){ - isThreadsafe = 0; - }else if( flags & SQLITE_OPEN_FULLMUTEX ){ - isThreadsafe = 1; - }else{ - isThreadsafe = sqlite3GlobalConfig.bFullMutex; + assert( pLeft->bStart || pLeft->iDocid==pRight->iDocid ); + assert( pRight->bStart || pLeft->iDocid==pRight->iDocid ); + + if( pRight->bEof || (pLeft->bEof==0 && iCmp<0) ){ + fts3EvalNextRow(pCsr, pLeft, pRc); + }else if( pLeft->bEof || (pRight->bEof==0 && iCmp>0) ){ + fts3EvalNextRow(pCsr, pRight, pRc); + }else{ + fts3EvalNextRow(pCsr, pLeft, pRc); + fts3EvalNextRow(pCsr, pRight, pRc); + } + + pExpr->bEof = (pLeft->bEof && pRight->bEof); + iCmp = DOCID_CMP(pLeft->iDocid, pRight->iDocid); + if( pRight->bEof || (pLeft->bEof==0 && iCmp<0) ){ + pExpr->iDocid = pLeft->iDocid; + }else{ + pExpr->iDocid = pRight->iDocid; + } + + break; + } + + case FTSQUERY_NOT: { + Fts3Expr *pLeft = pExpr->pLeft; + Fts3Expr *pRight = pExpr->pRight; + + if( pRight->bStart==0 ){ + fts3EvalNextRow(pCsr, pRight, pRc); + assert( *pRc!=SQLITE_OK || pRight->bStart ); + } + + fts3EvalNextRow(pCsr, pLeft, pRc); + if( pLeft->bEof==0 ){ + while( !*pRc + && !pRight->bEof + && DOCID_CMP(pLeft->iDocid, pRight->iDocid)>0 + ){ + fts3EvalNextRow(pCsr, pRight, pRc); + } + } + pExpr->iDocid = pLeft->iDocid; + pExpr->bEof = pLeft->bEof; + break; + } + + default: { + Fts3Phrase *pPhrase = pExpr->pPhrase; + fts3EvalInvalidatePoslist(pPhrase); + *pRc = fts3EvalPhraseNext(pCsr, pPhrase, &pExpr->bEof); + pExpr->iDocid = pPhrase->doclist.iDocid; + break; + } + } } +} - /* Remove harmful bits from the flags parameter +/* +** If *pRc is not SQLITE_OK, or if pExpr is not the root node of a NEAR +** cluster, then this function returns 1 immediately. +** +** Otherwise, it checks if the current row really does match the NEAR +** expression, using the data currently stored in the position lists +** (Fts3Expr->pPhrase.doclist.pList/nList) for each phrase in the expression. +** +** If the current row is a match, the position list associated with each +** phrase in the NEAR expression is edited in place to contain only those +** phrase instances sufficiently close to their peers to satisfy all NEAR +** constraints. In this case it returns 1. If the NEAR expression does not +** match the current row, 0 is returned. The position lists may or may not +** be edited if 0 is returned. +*/ +static int fts3EvalNearTest(Fts3Expr *pExpr, int *pRc){ + int res = 1; + + /* The following block runs if pExpr is the root of a NEAR query. + ** For example, the query: ** - ** The SQLITE_OPEN_NOMUTEX and SQLITE_OPEN_FULLMUTEX flags were - ** dealt with in the previous code block. Besides these, the only - ** valid input flags for sqlite3_open_v2() are SQLITE_OPEN_READONLY, - ** SQLITE_OPEN_READWRITE, and SQLITE_OPEN_CREATE. Silently mask - ** off all other flags. - */ - flags &= ~( SQLITE_OPEN_DELETEONCLOSE | - SQLITE_OPEN_EXCLUSIVE | - SQLITE_OPEN_MAIN_DB | - SQLITE_OPEN_TEMP_DB | - SQLITE_OPEN_TRANSIENT_DB | - SQLITE_OPEN_MAIN_JOURNAL | - SQLITE_OPEN_TEMP_JOURNAL | - SQLITE_OPEN_SUBJOURNAL | - SQLITE_OPEN_MASTER_JOURNAL | - SQLITE_OPEN_NOMUTEX | - SQLITE_OPEN_FULLMUTEX - ); + ** "w" NEAR "x" NEAR "y" NEAR "z" + ** + ** which is represented in tree form as: + ** + ** | + ** +--NEAR--+ <-- root of NEAR query + ** | | + ** +--NEAR--+ "z" + ** | | + ** +--NEAR--+ "y" + ** | | + ** "w" "x" + ** + ** The right-hand child of a NEAR node is always a phrase. The + ** left-hand child may be either a phrase or a NEAR node. There are + ** no exceptions to this - it's the way the parser in fts3_expr.c works. + */ + if( *pRc==SQLITE_OK + && pExpr->eType==FTSQUERY_NEAR + && pExpr->bEof==0 + && (pExpr->pParent==0 || pExpr->pParent->eType!=FTSQUERY_NEAR) + ){ + Fts3Expr *p; + int nTmp = 0; /* Bytes of temp space */ + char *aTmp; /* Temp space for PoslistNearMerge() */ + + /* Allocate temporary working space. */ + for(p=pExpr; p->pLeft; p=p->pLeft){ + nTmp += p->pRight->pPhrase->doclist.nList; + } + nTmp += p->pPhrase->doclist.nList; + aTmp = sqlite3_malloc(nTmp*2); + if( !aTmp ){ + *pRc = SQLITE_NOMEM; + res = 0; + }else{ + char *aPoslist = p->pPhrase->doclist.pList; + int nToken = p->pPhrase->nToken; - /* Allocate the sqlite data structure */ - db = sqlite3MallocZero( sizeof(sqlite3) ); - if( db==0 ) goto opendb_out; - if( isThreadsafe ){ - db->mutex = sqlite3MutexAlloc(SQLITE_MUTEX_RECURSIVE); - if( db->mutex==0 ){ - sqlite3_free(db); - db = 0; - goto opendb_out; + for(p=p->pParent;res && p && p->eType==FTSQUERY_NEAR; p=p->pParent){ + Fts3Phrase *pPhrase = p->pRight->pPhrase; + int nNear = p->nNear; + res = fts3EvalNearTrim(nNear, aTmp, &aPoslist, &nToken, pPhrase); + } + + aPoslist = pExpr->pRight->pPhrase->doclist.pList; + nToken = pExpr->pRight->pPhrase->nToken; + for(p=pExpr->pLeft; p && res; p=p->pLeft){ + int nNear; + Fts3Phrase *pPhrase; + assert( p->pParent && p->pParent->pLeft==p ); + nNear = p->pParent->nNear; + pPhrase = ( + p->eType==FTSQUERY_NEAR ? p->pRight->pPhrase : p->pPhrase + ); + res = fts3EvalNearTrim(nNear, aTmp, &aPoslist, &nToken, pPhrase); + } } + + sqlite3_free(aTmp); } - sqlite3_mutex_enter(db->mutex); - db->errMask = 0xff; - db->nDb = 2; - db->magic = SQLITE_MAGIC_BUSY; - db->aDb = db->aDbStatic; - assert( sizeof(db->aLimit)==sizeof(aHardLimit) ); - memcpy(db->aLimit, aHardLimit, sizeof(db->aLimit)); - db->autoCommit = 1; - db->nextAutovac = -1; - db->nextPagesize = 0; - db->flags |= SQLITE_ShortColNames -#if SQLITE_DEFAULT_FILE_FORMAT<4 - | SQLITE_LegacyFileFmt -#endif -#ifdef SQLITE_ENABLE_LOAD_EXTENSION - | SQLITE_LoadExtension -#endif - ; - sqlite3HashInit(&db->aCollSeq); -#ifndef SQLITE_OMIT_VIRTUALTABLE - sqlite3HashInit(&db->aModule); -#endif + return res; +} - db->pVfs = sqlite3_vfs_find(zVfs); - if( !db->pVfs ){ - rc = SQLITE_ERROR; - sqlite3Error(db, rc, "no such vfs: %s", zVfs); - goto opendb_out; - } +/* +** This function is a helper function for fts3EvalTestDeferredAndNear(). +** Assuming no error occurs or has occurred, It returns non-zero if the +** expression passed as the second argument matches the row that pCsr +** currently points to, or zero if it does not. +** +** If *pRc is not SQLITE_OK when this function is called, it is a no-op. +** If an error occurs during execution of this function, *pRc is set to +** the appropriate SQLite error code. In this case the returned value is +** undefined. +*/ +static int fts3EvalTestExpr( + Fts3Cursor *pCsr, /* FTS cursor handle */ + Fts3Expr *pExpr, /* Expr to test. May or may not be root. */ + int *pRc /* IN/OUT: Error code */ +){ + int bHit = 1; /* Return value */ + if( *pRc==SQLITE_OK ){ + switch( pExpr->eType ){ + case FTSQUERY_NEAR: + case FTSQUERY_AND: + bHit = ( + fts3EvalTestExpr(pCsr, pExpr->pLeft, pRc) + && fts3EvalTestExpr(pCsr, pExpr->pRight, pRc) + && fts3EvalNearTest(pExpr, pRc) + ); - /* Add the default collation sequence BINARY. BINARY works for both UTF-8 - ** and UTF-16, so add a version for each to avoid any unnecessary - ** conversions. The only error that can occur here is a malloc() failure. - */ - createCollation(db, "BINARY", SQLITE_UTF8, 0, binCollFunc, 0); - createCollation(db, "BINARY", SQLITE_UTF16BE, 0, binCollFunc, 0); - createCollation(db, "BINARY", SQLITE_UTF16LE, 0, binCollFunc, 0); - createCollation(db, "RTRIM", SQLITE_UTF8, (void*)1, binCollFunc, 0); - if( db->mallocFailed ){ - goto opendb_out; - } - db->pDfltColl = sqlite3FindCollSeq(db, SQLITE_UTF8, "BINARY", 0); - assert( db->pDfltColl!=0 ); + /* If the NEAR expression does not match any rows, zero the doclist for + ** all phrases involved in the NEAR. This is because the snippet(), + ** offsets() and matchinfo() functions are not supposed to recognize + ** any instances of phrases that are part of unmatched NEAR queries. + ** For example if this expression: + ** + ** ... MATCH 'a OR (b NEAR c)' + ** + ** is matched against a row containing: + ** + ** 'a b d e' + ** + ** then any snippet() should ony highlight the "a" term, not the "b" + ** (as "b" is part of a non-matching NEAR clause). + */ + if( bHit==0 + && pExpr->eType==FTSQUERY_NEAR + && (pExpr->pParent==0 || pExpr->pParent->eType!=FTSQUERY_NEAR) + ){ + Fts3Expr *p; + for(p=pExpr; p->pPhrase==0; p=p->pLeft){ + if( p->pRight->iDocid==pCsr->iPrevId ){ + fts3EvalInvalidatePoslist(p->pRight->pPhrase); + } + } + if( p->iDocid==pCsr->iPrevId ){ + fts3EvalInvalidatePoslist(p->pPhrase); + } + } - /* Also add a UTF-8 case-insensitive collation sequence. */ - createCollation(db, "NOCASE", SQLITE_UTF8, 0, nocaseCollatingFunc, 0); + break; - /* Set flags on the built-in collating sequences */ - db->pDfltColl->type = SQLITE_COLL_BINARY; - pColl = sqlite3FindCollSeq(db, SQLITE_UTF8, "NOCASE", 0); - if( pColl ){ - pColl->type = SQLITE_COLL_NOCASE; - } + case FTSQUERY_OR: { + int bHit1 = fts3EvalTestExpr(pCsr, pExpr->pLeft, pRc); + int bHit2 = fts3EvalTestExpr(pCsr, pExpr->pRight, pRc); + bHit = bHit1 || bHit2; + break; + } - /* Open the backend database driver */ - db->openFlags = flags; - rc = sqlite3BtreeFactory(db, zFilename, 0, SQLITE_DEFAULT_CACHE_SIZE, - flags | SQLITE_OPEN_MAIN_DB, - &db->aDb[0].pBt); - if( rc!=SQLITE_OK ){ - if( rc==SQLITE_IOERR_NOMEM ){ - rc = SQLITE_NOMEM; + case FTSQUERY_NOT: + bHit = ( + fts3EvalTestExpr(pCsr, pExpr->pLeft, pRc) + && !fts3EvalTestExpr(pCsr, pExpr->pRight, pRc) + ); + break; + + default: { + if( pCsr->pDeferred + && (pExpr->iDocid==pCsr->iPrevId || pExpr->bDeferred) + ){ + Fts3Phrase *pPhrase = pExpr->pPhrase; + assert( pExpr->bDeferred || pPhrase->doclist.bFreeList==0 ); + if( pExpr->bDeferred ){ + fts3EvalInvalidatePoslist(pPhrase); + } + *pRc = fts3EvalDeferredPhrase(pCsr, pPhrase); + bHit = (pPhrase->doclist.pList!=0); + pExpr->iDocid = pCsr->iPrevId; + }else{ + bHit = (pExpr->bEof==0 && pExpr->iDocid==pCsr->iPrevId); + } + break; + } } - sqlite3Error(db, rc, 0); - goto opendb_out; } - db->aDb[0].pSchema = sqlite3SchemaGet(db, db->aDb[0].pBt); - db->aDb[1].pSchema = sqlite3SchemaGet(db, 0); + return bHit; +} +/* +** This function is called as the second part of each xNext operation when +** iterating through the results of a full-text query. At this point the +** cursor points to a row that matches the query expression, with the +** following caveats: +** +** * Up until this point, "NEAR" operators in the expression have been +** treated as "AND". +** +** * Deferred tokens have not yet been considered. +** +** If *pRc is not SQLITE_OK when this function is called, it immediately +** returns 0. Otherwise, it tests whether or not after considering NEAR +** operators and deferred tokens the current row is still a match for the +** expression. It returns 1 if both of the following are true: +** +** 1. *pRc is SQLITE_OK when this function returns, and +** +** 2. After scanning the current FTS table row for the deferred tokens, +** it is determined that the row does *not* match the query. +** +** Or, if no error occurs and it seems the current row does match the FTS +** query, return 0. +*/ +static int fts3EvalTestDeferredAndNear(Fts3Cursor *pCsr, int *pRc){ + int rc = *pRc; + int bMiss = 0; + if( rc==SQLITE_OK ){ - /* The default safety_level for the main database is 'full'; for the temp - ** database it is 'NONE'. This matches the pager layer defaults. - */ - db->aDb[0].zName = "main"; - db->aDb[0].safety_level = 3; -#ifndef SQLITE_OMIT_TEMPDB - db->aDb[1].zName = "temp"; - db->aDb[1].safety_level = 1; -#endif + /* If there are one or more deferred tokens, load the current row into + ** memory and scan it to determine the position list for each deferred + ** token. Then, see if this row is really a match, considering deferred + ** tokens and NEAR operators (neither of which were taken into account + ** earlier, by fts3EvalNextRow()). + */ + if( pCsr->pDeferred ){ + rc = fts3CursorSeek(0, pCsr); + if( rc==SQLITE_OK ){ + rc = sqlite3Fts3CacheDeferredDoclists(pCsr); + } + } + bMiss = (0==fts3EvalTestExpr(pCsr, pCsr->pExpr, &rc)); - db->magic = SQLITE_MAGIC_OPEN; - if( db->mallocFailed ){ - goto opendb_out; + /* Free the position-lists accumulated for each deferred token above. */ + sqlite3Fts3FreeDeferredDoclists(pCsr); + *pRc = rc; } + return (rc==SQLITE_OK && bMiss); +} - /* Register all built-in functions, but do not attempt to read the - ** database schema yet. This is delayed until the first time the database - ** is accessed. - */ - sqlite3Error(db, SQLITE_OK, 0); - sqlite3RegisterBuiltinFunctions(db); - - /* Load automatic extensions - extensions that have been registered - ** using the sqlite3_automatic_extension() API. - */ - sqlite3AutoLoadExtensions(db); - rc = sqlite3_errcode(db); - if( rc!=SQLITE_OK ){ - goto opendb_out; +/* +** Advance to the next document that matches the FTS expression in +** Fts3Cursor.pExpr. +*/ +static int fts3EvalNext(Fts3Cursor *pCsr){ + int rc = SQLITE_OK; /* Return Code */ + Fts3Expr *pExpr = pCsr->pExpr; + assert( pCsr->isEof==0 ); + if( pExpr==0 ){ + pCsr->isEof = 1; + }else{ + do { + if( pCsr->isRequireSeek==0 ){ + sqlite3_reset(pCsr->pStmt); + } + assert( sqlite3_data_count(pCsr->pStmt)==0 ); + fts3EvalNextRow(pCsr, pExpr, &rc); + pCsr->isEof = pExpr->bEof; + pCsr->isRequireSeek = 1; + pCsr->isMatchinfoNeeded = 1; + pCsr->iPrevId = pExpr->iDocid; + }while( pCsr->isEof==0 && fts3EvalTestDeferredAndNear(pCsr, &rc) ); } + return rc; +} -#ifdef SQLITE_ENABLE_FTS1 - if( !db->mallocFailed ){ - extern int sqlite3Fts1Init(sqlite3*); - rc = sqlite3Fts1Init(db); - } -#endif +/* +** Restart interation for expression pExpr so that the next call to +** fts3EvalNext() visits the first row. Do not allow incremental +** loading or merging of phrase doclists for this iteration. +** +** If *pRc is other than SQLITE_OK when this function is called, it is +** a no-op. If an error occurs within this function, *pRc is set to an +** SQLite error code before returning. +*/ +static void fts3EvalRestart( + Fts3Cursor *pCsr, + Fts3Expr *pExpr, + int *pRc +){ + if( pExpr && *pRc==SQLITE_OK ){ + Fts3Phrase *pPhrase = pExpr->pPhrase; -#ifdef SQLITE_ENABLE_FTS2 - if( !db->mallocFailed && rc==SQLITE_OK ){ - extern int sqlite3Fts2Init(sqlite3*); - rc = sqlite3Fts2Init(db); - } -#endif + if( pPhrase ){ + fts3EvalInvalidatePoslist(pPhrase); + if( pPhrase->bIncr ){ + assert( pPhrase->nToken==1 ); + assert( pPhrase->aToken[0].pSegcsr ); + sqlite3Fts3MsrIncrRestart(pPhrase->aToken[0].pSegcsr); + *pRc = fts3EvalPhraseStart(pCsr, 0, pPhrase); + } -#ifdef SQLITE_ENABLE_FTS3 - if( !db->mallocFailed && rc==SQLITE_OK ){ - rc = sqlite3Fts3Init(db); - } -#endif + pPhrase->doclist.pNextDocid = 0; + pPhrase->doclist.iDocid = 0; + } -#ifdef SQLITE_ENABLE_ICU - if( !db->mallocFailed && rc==SQLITE_OK ){ - rc = sqlite3IcuInit(db); - } -#endif + pExpr->iDocid = 0; + pExpr->bEof = 0; + pExpr->bStart = 0; -#ifdef SQLITE_ENABLE_RTREE - if( !db->mallocFailed && rc==SQLITE_OK){ - rc = sqlite3RtreeInit(db); + fts3EvalRestart(pCsr, pExpr->pLeft, pRc); + fts3EvalRestart(pCsr, pExpr->pRight, pRc); } -#endif +} - sqlite3Error(db, rc, 0); +/* +** After allocating the Fts3Expr.aMI[] array for each phrase in the +** expression rooted at pExpr, the cursor iterates through all rows matched +** by pExpr, calling this function for each row. This function increments +** the values in Fts3Expr.aMI[] according to the position-list currently +** found in Fts3Expr.pPhrase->doclist.pList for each of the phrase +** expression nodes. +*/ +static void fts3EvalUpdateCounts(Fts3Expr *pExpr){ + if( pExpr ){ + Fts3Phrase *pPhrase = pExpr->pPhrase; + if( pPhrase && pPhrase->doclist.pList ){ + int iCol = 0; + char *p = pPhrase->doclist.pList; - /* -DSQLITE_DEFAULT_LOCKING_MODE=1 makes EXCLUSIVE the default locking - ** mode. -DSQLITE_DEFAULT_LOCKING_MODE=0 make NORMAL the default locking - ** mode. Doing nothing at all also makes NORMAL the default. - */ -#ifdef SQLITE_DEFAULT_LOCKING_MODE - db->dfltLockMode = SQLITE_DEFAULT_LOCKING_MODE; - sqlite3PagerLockingMode(sqlite3BtreePager(db->aDb[0].pBt), - SQLITE_DEFAULT_LOCKING_MODE); -#endif + assert( *p ); + while( 1 ){ + u8 c = 0; + int iCnt = 0; + while( 0xFE & (*p | c) ){ + if( (c&0x80)==0 ) iCnt++; + c = *p++ & 0x80; + } - /* Enable the lookaside-malloc subsystem */ - setupLookaside(db, 0, sqlite3GlobalConfig.szLookaside, - sqlite3GlobalConfig.nLookaside); + /* aMI[iCol*3 + 1] = Number of occurrences + ** aMI[iCol*3 + 2] = Number of rows containing at least one instance + */ + pExpr->aMI[iCol*3 + 1] += iCnt; + pExpr->aMI[iCol*3 + 2] += (iCnt>0); + if( *p==0x00 ) break; + p++; + p += sqlite3Fts3GetVarint32(p, &iCol); + } + } -opendb_out: - if( db ){ - assert( db->mutex!=0 || isThreadsafe==0 || sqlite3GlobalConfig.bFullMutex==0 ); - sqlite3_mutex_leave(db->mutex); - } - rc = sqlite3_errcode(db); - if( rc==SQLITE_NOMEM ){ - sqlite3_close(db); - db = 0; - }else if( rc!=SQLITE_OK ){ - db->magic = SQLITE_MAGIC_SICK; + fts3EvalUpdateCounts(pExpr->pLeft); + fts3EvalUpdateCounts(pExpr->pRight); } - *ppDb = db; - return sqlite3ApiExit(0, rc); } /* -** Open a new database handle. +** Expression pExpr must be of type FTSQUERY_PHRASE. +** +** If it is not already allocated and populated, this function allocates and +** populates the Fts3Expr.aMI[] array for expression pExpr. If pExpr is part +** of a NEAR expression, then it also allocates and populates the same array +** for all other phrases that are part of the NEAR expression. +** +** SQLITE_OK is returned if the aMI[] array is successfully allocated and +** populated. Otherwise, if an error occurs, an SQLite error code is returned. */ -SQLITE_API int sqlite3_open( - const char *zFilename, - sqlite3 **ppDb -){ - return openDatabase(zFilename, ppDb, - SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, 0); -} -SQLITE_API int sqlite3_open_v2( - const char *filename, /* Database filename (UTF-8) */ - sqlite3 **ppDb, /* OUT: SQLite db handle */ - int flags, /* Flags */ - const char *zVfs /* Name of VFS module to use */ +static int fts3EvalGatherStats( + Fts3Cursor *pCsr, /* Cursor object */ + Fts3Expr *pExpr /* FTSQUERY_PHRASE expression */ ){ - return openDatabase(filename, ppDb, flags, zVfs); + int rc = SQLITE_OK; /* Return code */ + + assert( pExpr->eType==FTSQUERY_PHRASE ); + if( pExpr->aMI==0 ){ + Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab; + Fts3Expr *pRoot; /* Root of NEAR expression */ + Fts3Expr *p; /* Iterator used for several purposes */ + + sqlite3_int64 iPrevId = pCsr->iPrevId; + sqlite3_int64 iDocid; + u8 bEof; + + /* Find the root of the NEAR expression */ + pRoot = pExpr; + while( pRoot->pParent && pRoot->pParent->eType==FTSQUERY_NEAR ){ + pRoot = pRoot->pParent; + } + iDocid = pRoot->iDocid; + bEof = pRoot->bEof; + assert( pRoot->bStart ); + + /* Allocate space for the aMSI[] array of each FTSQUERY_PHRASE node */ + for(p=pRoot; p; p=p->pLeft){ + Fts3Expr *pE = (p->eType==FTSQUERY_PHRASE?p:p->pRight); + assert( pE->aMI==0 ); + pE->aMI = (u32 *)sqlite3_malloc(pTab->nColumn * 3 * sizeof(u32)); + if( !pE->aMI ) return SQLITE_NOMEM; + memset(pE->aMI, 0, pTab->nColumn * 3 * sizeof(u32)); + } + + fts3EvalRestart(pCsr, pRoot, &rc); + + while( pCsr->isEof==0 && rc==SQLITE_OK ){ + + do { + /* Ensure the %_content statement is reset. */ + if( pCsr->isRequireSeek==0 ) sqlite3_reset(pCsr->pStmt); + assert( sqlite3_data_count(pCsr->pStmt)==0 ); + + /* Advance to the next document */ + fts3EvalNextRow(pCsr, pRoot, &rc); + pCsr->isEof = pRoot->bEof; + pCsr->isRequireSeek = 1; + pCsr->isMatchinfoNeeded = 1; + pCsr->iPrevId = pRoot->iDocid; + }while( pCsr->isEof==0 + && pRoot->eType==FTSQUERY_NEAR + && fts3EvalTestDeferredAndNear(pCsr, &rc) + ); + + if( rc==SQLITE_OK && pCsr->isEof==0 ){ + fts3EvalUpdateCounts(pRoot); + } + } + + pCsr->isEof = 0; + pCsr->iPrevId = iPrevId; + + if( bEof ){ + pRoot->bEof = bEof; + }else{ + /* Caution: pRoot may iterate through docids in ascending or descending + ** order. For this reason, even though it seems more defensive, the + ** do loop can not be written: + ** + ** do {...} while( pRoot->iDocidbEof==0 ); + }while( pRoot->iDocid!=iDocid && rc==SQLITE_OK ); + fts3EvalTestDeferredAndNear(pCsr, &rc); + } + } + return rc; } -#ifndef SQLITE_OMIT_UTF16 /* -** Open a new database handle. +** This function is used by the matchinfo() module to query a phrase +** expression node for the following information: +** +** 1. The total number of occurrences of the phrase in each column of +** the FTS table (considering all rows), and +** +** 2. For each column, the number of rows in the table for which the +** column contains at least one instance of the phrase. +** +** If no error occurs, SQLITE_OK is returned and the values for each column +** written into the array aiOut as follows: +** +** aiOut[iCol*3 + 1] = Number of occurrences +** aiOut[iCol*3 + 2] = Number of rows containing at least one instance +** +** Caveats: +** +** * If a phrase consists entirely of deferred tokens, then all output +** values are set to the number of documents in the table. In other +** words we assume that very common tokens occur exactly once in each +** column of each row of the table. +** +** * If a phrase contains some deferred tokens (and some non-deferred +** tokens), count the potential occurrence identified by considering +** the non-deferred tokens instead of actual phrase occurrences. +** +** * If the phrase is part of a NEAR expression, then only phrase instances +** that meet the NEAR constraint are included in the counts. */ -SQLITE_API int sqlite3_open16( - const void *zFilename, - sqlite3 **ppDb +SQLITE_PRIVATE int sqlite3Fts3EvalPhraseStats( + Fts3Cursor *pCsr, /* FTS cursor handle */ + Fts3Expr *pExpr, /* Phrase expression */ + u32 *aiOut /* Array to write results into (see above) */ ){ - char const *zFilename8; /* zFilename encoded in UTF-8 instead of UTF-16 */ - sqlite3_value *pVal; - int rc; + Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab; + int rc = SQLITE_OK; + int iCol; - assert( zFilename ); - assert( ppDb ); - *ppDb = 0; -#ifndef SQLITE_OMIT_AUTOINIT - rc = sqlite3_initialize(); - if( rc ) return rc; -#endif - pVal = sqlite3ValueNew(0); - sqlite3ValueSetStr(pVal, -1, zFilename, SQLITE_UTF16NATIVE, SQLITE_STATIC); - zFilename8 = sqlite3ValueText(pVal, SQLITE_UTF8); - if( zFilename8 ){ - rc = openDatabase(zFilename8, ppDb, - SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, 0); - assert( *ppDb || rc==SQLITE_NOMEM ); - if( rc==SQLITE_OK && !DbHasProperty(*ppDb, 0, DB_SchemaLoaded) ){ - ENC(*ppDb) = SQLITE_UTF16NATIVE; + if( pExpr->bDeferred && pExpr->pParent->eType!=FTSQUERY_NEAR ){ + assert( pCsr->nDoc>0 ); + for(iCol=0; iColnColumn; iCol++){ + aiOut[iCol*3 + 1] = (u32)pCsr->nDoc; + aiOut[iCol*3 + 2] = (u32)pCsr->nDoc; } }else{ - rc = SQLITE_NOMEM; + rc = fts3EvalGatherStats(pCsr, pExpr); + if( rc==SQLITE_OK ){ + assert( pExpr->aMI ); + for(iCol=0; iColnColumn; iCol++){ + aiOut[iCol*3 + 1] = pExpr->aMI[iCol*3 + 1]; + aiOut[iCol*3 + 2] = pExpr->aMI[iCol*3 + 2]; + } + } } - sqlite3ValueFree(pVal); - return sqlite3ApiExit(0, rc); + return rc; } -#endif /* SQLITE_OMIT_UTF16 */ /* -** Register a new collation sequence with the database handle db. +** The expression pExpr passed as the second argument to this function +** must be of type FTSQUERY_PHRASE. +** +** The returned value is either NULL or a pointer to a buffer containing +** a position-list indicating the occurrences of the phrase in column iCol +** of the current row. +** +** More specifically, the returned buffer contains 1 varint for each +** occurence of the phrase in the column, stored using the normal (delta+2) +** compression and is terminated by either an 0x01 or 0x00 byte. For example, +** if the requested column contains "a b X c d X X" and the position-list +** for 'X' is requested, the buffer returned may contain: +** +** 0x04 0x05 0x03 0x01 or 0x04 0x05 0x03 0x00 +** +** This function works regardless of whether or not the phrase is deferred, +** incremental, or neither. */ -SQLITE_API int sqlite3_create_collation( - sqlite3* db, - const char *zName, - int enc, - void* pCtx, - int(*xCompare)(void*,int,const void*,int,const void*) +SQLITE_PRIVATE int sqlite3Fts3EvalPhrasePoslist( + Fts3Cursor *pCsr, /* FTS3 cursor object */ + Fts3Expr *pExpr, /* Phrase to return doclist for */ + int iCol, /* Column to return position list for */ + char **ppOut /* OUT: Pointer to position list */ ){ - int rc; - sqlite3_mutex_enter(db->mutex); - assert( !db->mallocFailed ); - rc = createCollation(db, zName, enc, pCtx, xCompare, 0); - rc = sqlite3ApiExit(db, rc); - sqlite3_mutex_leave(db->mutex); - return rc; + Fts3Phrase *pPhrase = pExpr->pPhrase; + Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab; + char *pIter; + int iThis; + sqlite3_int64 iDocid; + + /* If this phrase is applies specifically to some column other than + ** column iCol, return a NULL pointer. */ + *ppOut = 0; + assert( iCol>=0 && iColnColumn ); + if( (pPhrase->iColumnnColumn && pPhrase->iColumn!=iCol) ){ + return SQLITE_OK; + } + + iDocid = pExpr->iDocid; + pIter = pPhrase->doclist.pList; + if( iDocid!=pCsr->iPrevId || pExpr->bEof ){ + int bDescDoclist = pTab->bDescIdx; /* For DOCID_CMP macro */ + int bOr = 0; + u8 bEof = 0; + Fts3Expr *p; + + /* Check if this phrase descends from an OR expression node. If not, + ** return NULL. Otherwise, the entry that corresponds to docid + ** pCsr->iPrevId may lie earlier in the doclist buffer. */ + for(p=pExpr->pParent; p; p=p->pParent){ + if( p->eType==FTSQUERY_OR ) bOr = 1; + } + if( bOr==0 ) return SQLITE_OK; + + /* This is the descendent of an OR node. In this case we cannot use + ** an incremental phrase. Load the entire doclist for the phrase + ** into memory in this case. */ + if( pPhrase->bIncr ){ + int rc = SQLITE_OK; + int bEofSave = pExpr->bEof; + fts3EvalRestart(pCsr, pExpr, &rc); + while( rc==SQLITE_OK && !pExpr->bEof ){ + fts3EvalNextRow(pCsr, pExpr, &rc); + if( bEofSave==0 && pExpr->iDocid==iDocid ) break; + } + pIter = pPhrase->doclist.pList; + assert( rc!=SQLITE_OK || pPhrase->bIncr==0 ); + if( rc!=SQLITE_OK ) return rc; + } + + if( pExpr->bEof ){ + pIter = 0; + iDocid = 0; + } + bEof = (pPhrase->doclist.nAll==0); + assert( bDescDoclist==0 || bDescDoclist==1 ); + assert( pCsr->bDesc==0 || pCsr->bDesc==1 ); + + if( pCsr->bDesc==bDescDoclist ){ + int dummy; + while( (pIter==0 || DOCID_CMP(iDocid, pCsr->iPrevId)>0 ) && bEof==0 ){ + sqlite3Fts3DoclistPrev( + bDescDoclist, pPhrase->doclist.aAll, pPhrase->doclist.nAll, + &pIter, &iDocid, &dummy, &bEof + ); + } + }else{ + while( (pIter==0 || DOCID_CMP(iDocid, pCsr->iPrevId)<0 ) && bEof==0 ){ + sqlite3Fts3DoclistNext( + bDescDoclist, pPhrase->doclist.aAll, pPhrase->doclist.nAll, + &pIter, &iDocid, &bEof + ); + } + } + + if( bEof || iDocid!=pCsr->iPrevId ) pIter = 0; + } + if( pIter==0 ) return SQLITE_OK; + + if( *pIter==0x01 ){ + pIter++; + pIter += sqlite3Fts3GetVarint32(pIter, &iThis); + }else{ + iThis = 0; + } + while( iThisdoclist, and +** * any Fts3MultiSegReader objects held by phrase tokens. */ -SQLITE_API int sqlite3_create_collation_v2( - sqlite3* db, - const char *zName, - int enc, - void* pCtx, - int(*xCompare)(void*,int,const void*,int,const void*), - void(*xDel)(void*) -){ - int rc; - sqlite3_mutex_enter(db->mutex); - assert( !db->mallocFailed ); - rc = createCollation(db, zName, enc, pCtx, xCompare, xDel); - rc = sqlite3ApiExit(db, rc); - sqlite3_mutex_leave(db->mutex); - return rc; +SQLITE_PRIVATE void sqlite3Fts3EvalPhraseCleanup(Fts3Phrase *pPhrase){ + if( pPhrase ){ + int i; + sqlite3_free(pPhrase->doclist.aAll); + fts3EvalInvalidatePoslist(pPhrase); + memset(&pPhrase->doclist, 0, sizeof(Fts3Doclist)); + for(i=0; inToken; i++){ + fts3SegReaderCursorFree(pPhrase->aToken[i].pSegcsr); + pPhrase->aToken[i].pSegcsr = 0; + } + } } -#ifndef SQLITE_OMIT_UTF16 + /* -** Register a new collation sequence with the database handle db. +** Return SQLITE_CORRUPT_VTAB. */ -SQLITE_API int sqlite3_create_collation16( - sqlite3* db, - const void *zName, - int enc, - void* pCtx, - int(*xCompare)(void*,int,const void*,int,const void*) -){ - int rc = SQLITE_OK; - char *zName8; - sqlite3_mutex_enter(db->mutex); - assert( !db->mallocFailed ); - zName8 = sqlite3Utf16to8(db, zName, -1); - if( zName8 ){ - rc = createCollation(db, zName8, enc, pCtx, xCompare, 0); - sqlite3DbFree(db, zName8); - } - rc = sqlite3ApiExit(db, rc); - sqlite3_mutex_leave(db->mutex); - return rc; +#ifdef SQLITE_DEBUG +SQLITE_PRIVATE int sqlite3Fts3Corrupt(){ + return SQLITE_CORRUPT_VTAB; } -#endif /* SQLITE_OMIT_UTF16 */ +#endif +#if !SQLITE_CORE /* -** Register a collation sequence factory callback with the database handle -** db. Replace any previously installed collation sequence factory. +** Initialize API pointer table, if required. */ -SQLITE_API int sqlite3_collation_needed( +SQLITE_API int sqlite3_extension_init( sqlite3 *db, - void *pCollNeededArg, - void(*xCollNeeded)(void*,sqlite3*,int eTextRep,const char*) + char **pzErrMsg, + const sqlite3_api_routines *pApi ){ - sqlite3_mutex_enter(db->mutex); - db->xCollNeeded = xCollNeeded; - db->xCollNeeded16 = 0; - db->pCollNeededArg = pCollNeededArg; - sqlite3_mutex_leave(db->mutex); - return SQLITE_OK; + SQLITE_EXTENSION_INIT2(pApi) + return sqlite3Fts3Init(db); } +#endif -#ifndef SQLITE_OMIT_UTF16 +#endif + +/************** End of fts3.c ************************************************/ +/************** Begin file fts3_aux.c ****************************************/ /* -** Register a collation sequence factory callback with the database handle -** db. Replace any previously installed collation sequence factory. +** 2011 Jan 27 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +****************************************************************************** +** */ -SQLITE_API int sqlite3_collation_needed16( - sqlite3 *db, - void *pCollNeededArg, - void(*xCollNeeded16)(void*,sqlite3*,int eTextRep,const void*) +#if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) + +/* #include */ +/* #include */ + +typedef struct Fts3auxTable Fts3auxTable; +typedef struct Fts3auxCursor Fts3auxCursor; + +struct Fts3auxTable { + sqlite3_vtab base; /* Base class used by SQLite core */ + Fts3Table *pFts3Tab; +}; + +struct Fts3auxCursor { + sqlite3_vtab_cursor base; /* Base class used by SQLite core */ + Fts3MultiSegReader csr; /* Must be right after "base" */ + Fts3SegFilter filter; + char *zStop; + int nStop; /* Byte-length of string zStop */ + int isEof; /* True if cursor is at EOF */ + sqlite3_int64 iRowid; /* Current rowid */ + + int iCol; /* Current value of 'col' column */ + int nStat; /* Size of aStat[] array */ + struct Fts3auxColstats { + sqlite3_int64 nDoc; /* 'documents' values for current csr row */ + sqlite3_int64 nOcc; /* 'occurrences' values for current csr row */ + } *aStat; +}; + +/* +** Schema of the terms table. +*/ +#define FTS3_TERMS_SCHEMA "CREATE TABLE x(term, col, documents, occurrences)" + +/* +** This function does all the work for both the xConnect and xCreate methods. +** These tables have no persistent representation of their own, so xConnect +** and xCreate are identical operations. +*/ +static int fts3auxConnectMethod( + sqlite3 *db, /* Database connection */ + void *pUnused, /* Unused */ + int argc, /* Number of elements in argv array */ + const char * const *argv, /* xCreate/xConnect argument array */ + sqlite3_vtab **ppVtab, /* OUT: New sqlite3_vtab object */ + char **pzErr /* OUT: sqlite3_malloc'd error message */ ){ - sqlite3_mutex_enter(db->mutex); - db->xCollNeeded = 0; - db->xCollNeeded16 = xCollNeeded16; - db->pCollNeededArg = pCollNeededArg; - sqlite3_mutex_leave(db->mutex); + char const *zDb; /* Name of database (e.g. "main") */ + char const *zFts3; /* Name of fts3 table */ + int nDb; /* Result of strlen(zDb) */ + int nFts3; /* Result of strlen(zFts3) */ + int nByte; /* Bytes of space to allocate here */ + int rc; /* value returned by declare_vtab() */ + Fts3auxTable *p; /* Virtual table object to return */ + + UNUSED_PARAMETER(pUnused); + + /* The user should specify a single argument - the name of an fts3 table. */ + if( argc!=4 ){ + *pzErr = sqlite3_mprintf( + "wrong number of arguments to fts4aux constructor" + ); + return SQLITE_ERROR; + } + + zDb = argv[1]; + nDb = (int)strlen(zDb); + zFts3 = argv[3]; + nFts3 = (int)strlen(zFts3); + + rc = sqlite3_declare_vtab(db, FTS3_TERMS_SCHEMA); + if( rc!=SQLITE_OK ) return rc; + + nByte = sizeof(Fts3auxTable) + sizeof(Fts3Table) + nDb + nFts3 + 2; + p = (Fts3auxTable *)sqlite3_malloc(nByte); + if( !p ) return SQLITE_NOMEM; + memset(p, 0, nByte); + + p->pFts3Tab = (Fts3Table *)&p[1]; + p->pFts3Tab->zDb = (char *)&p->pFts3Tab[1]; + p->pFts3Tab->zName = &p->pFts3Tab->zDb[nDb+1]; + p->pFts3Tab->db = db; + p->pFts3Tab->nIndex = 1; + + memcpy((char *)p->pFts3Tab->zDb, zDb, nDb); + memcpy((char *)p->pFts3Tab->zName, zFts3, nFts3); + sqlite3Fts3Dequote((char *)p->pFts3Tab->zName); + + *ppVtab = (sqlite3_vtab *)p; return SQLITE_OK; } -#endif /* SQLITE_OMIT_UTF16 */ -#ifndef SQLITE_OMIT_GLOBALRECOVER -#ifndef SQLITE_OMIT_DEPRECATED /* -** This function is now an anachronism. It used to be used to recover from a -** malloc() failure, but SQLite now does this automatically. +** This function does the work for both the xDisconnect and xDestroy methods. +** These tables have no persistent representation of their own, so xDisconnect +** and xDestroy are identical operations. */ -SQLITE_API int sqlite3_global_recover(void){ +static int fts3auxDisconnectMethod(sqlite3_vtab *pVtab){ + Fts3auxTable *p = (Fts3auxTable *)pVtab; + Fts3Table *pFts3 = p->pFts3Tab; + int i; + + /* Free any prepared statements held */ + for(i=0; iaStmt); i++){ + sqlite3_finalize(pFts3->aStmt[i]); + } + sqlite3_free(pFts3->zSegmentsTbl); + sqlite3_free(p); return SQLITE_OK; } -#endif -#endif + +#define FTS4AUX_EQ_CONSTRAINT 1 +#define FTS4AUX_GE_CONSTRAINT 2 +#define FTS4AUX_LE_CONSTRAINT 4 /* -** Test to see whether or not the database connection is in autocommit -** mode. Return TRUE if it is and FALSE if not. Autocommit mode is on -** by default. Autocommit is disabled by a BEGIN statement and reenabled -** by the next COMMIT or ROLLBACK. -** -******* THIS IS AN EXPERIMENTAL API AND IS SUBJECT TO CHANGE ****** +** xBestIndex - Analyze a WHERE and ORDER BY clause. */ -SQLITE_API int sqlite3_get_autocommit(sqlite3 *db){ - return db->autoCommit; +static int fts3auxBestIndexMethod( + sqlite3_vtab *pVTab, + sqlite3_index_info *pInfo +){ + int i; + int iEq = -1; + int iGe = -1; + int iLe = -1; + + UNUSED_PARAMETER(pVTab); + + /* This vtab delivers always results in "ORDER BY term ASC" order. */ + if( pInfo->nOrderBy==1 + && pInfo->aOrderBy[0].iColumn==0 + && pInfo->aOrderBy[0].desc==0 + ){ + pInfo->orderByConsumed = 1; + } + + /* Search for equality and range constraints on the "term" column. */ + for(i=0; inConstraint; i++){ + if( pInfo->aConstraint[i].usable && pInfo->aConstraint[i].iColumn==0 ){ + int op = pInfo->aConstraint[i].op; + if( op==SQLITE_INDEX_CONSTRAINT_EQ ) iEq = i; + if( op==SQLITE_INDEX_CONSTRAINT_LT ) iLe = i; + if( op==SQLITE_INDEX_CONSTRAINT_LE ) iLe = i; + if( op==SQLITE_INDEX_CONSTRAINT_GT ) iGe = i; + if( op==SQLITE_INDEX_CONSTRAINT_GE ) iGe = i; + } + } + + if( iEq>=0 ){ + pInfo->idxNum = FTS4AUX_EQ_CONSTRAINT; + pInfo->aConstraintUsage[iEq].argvIndex = 1; + pInfo->estimatedCost = 5; + }else{ + pInfo->idxNum = 0; + pInfo->estimatedCost = 20000; + if( iGe>=0 ){ + pInfo->idxNum += FTS4AUX_GE_CONSTRAINT; + pInfo->aConstraintUsage[iGe].argvIndex = 1; + pInfo->estimatedCost /= 2; + } + if( iLe>=0 ){ + pInfo->idxNum += FTS4AUX_LE_CONSTRAINT; + pInfo->aConstraintUsage[iLe].argvIndex = 1 + (iGe>=0); + pInfo->estimatedCost /= 2; + } + } + + return SQLITE_OK; } -#ifdef SQLITE_DEBUG /* -** The following routine is subtituted for constant SQLITE_CORRUPT in -** debugging builds. This provides a way to set a breakpoint for when -** corruption is first detected. +** xOpen - Open a cursor. */ -SQLITE_PRIVATE int sqlite3Corrupt(void){ - return SQLITE_CORRUPT; +static int fts3auxOpenMethod(sqlite3_vtab *pVTab, sqlite3_vtab_cursor **ppCsr){ + Fts3auxCursor *pCsr; /* Pointer to cursor object to return */ + + UNUSED_PARAMETER(pVTab); + + pCsr = (Fts3auxCursor *)sqlite3_malloc(sizeof(Fts3auxCursor)); + if( !pCsr ) return SQLITE_NOMEM; + memset(pCsr, 0, sizeof(Fts3auxCursor)); + + *ppCsr = (sqlite3_vtab_cursor *)pCsr; + return SQLITE_OK; } -#endif -#ifndef SQLITE_OMIT_DEPRECATED /* -** This is a convenience routine that makes sure that all thread-specific -** data for this thread has been deallocated. -** -** SQLite no longer uses thread-specific data so this routine is now a -** no-op. It is retained for historical compatibility. +** xClose - Close a cursor. */ -SQLITE_API void sqlite3_thread_cleanup(void){ +static int fts3auxCloseMethod(sqlite3_vtab_cursor *pCursor){ + Fts3Table *pFts3 = ((Fts3auxTable *)pCursor->pVtab)->pFts3Tab; + Fts3auxCursor *pCsr = (Fts3auxCursor *)pCursor; + + sqlite3Fts3SegmentsClose(pFts3); + sqlite3Fts3SegReaderFinish(&pCsr->csr); + sqlite3_free((void *)pCsr->filter.zTerm); + sqlite3_free(pCsr->zStop); + sqlite3_free(pCsr->aStat); + sqlite3_free(pCsr); + return SQLITE_OK; +} + +static int fts3auxGrowStatArray(Fts3auxCursor *pCsr, int nSize){ + if( nSize>pCsr->nStat ){ + struct Fts3auxColstats *aNew; + aNew = (struct Fts3auxColstats *)sqlite3_realloc(pCsr->aStat, + sizeof(struct Fts3auxColstats) * nSize + ); + if( aNew==0 ) return SQLITE_NOMEM; + memset(&aNew[pCsr->nStat], 0, + sizeof(struct Fts3auxColstats) * (nSize - pCsr->nStat) + ); + pCsr->aStat = aNew; + pCsr->nStat = nSize; + } + return SQLITE_OK; } -#endif /* -** Return meta information about a specific column of a database table. -** See comment in sqlite3.h (sqlite.h.in) for details. +** xNext - Advance the cursor to the next row, if any. */ -#ifdef SQLITE_ENABLE_COLUMN_METADATA -SQLITE_API int sqlite3_table_column_metadata( - sqlite3 *db, /* Connection handle */ - const char *zDbName, /* Database name or NULL */ - const char *zTableName, /* Table name */ - const char *zColumnName, /* Column name */ - char const **pzDataType, /* OUTPUT: Declared data type */ - char const **pzCollSeq, /* OUTPUT: Collation sequence name */ - int *pNotNull, /* OUTPUT: True if NOT NULL constraint exists */ - int *pPrimaryKey, /* OUTPUT: True if column part of PK */ - int *pAutoinc /* OUTPUT: True if column is auto-increment */ -){ +static int fts3auxNextMethod(sqlite3_vtab_cursor *pCursor){ + Fts3auxCursor *pCsr = (Fts3auxCursor *)pCursor; + Fts3Table *pFts3 = ((Fts3auxTable *)pCursor->pVtab)->pFts3Tab; int rc; - char *zErrMsg = 0; - Table *pTab = 0; - Column *pCol = 0; - int iCol; - char const *zDataType = 0; - char const *zCollSeq = 0; - int notnull = 0; - int primarykey = 0; - int autoinc = 0; + /* Increment our pretend rowid value. */ + pCsr->iRowid++; - /* Ensure the database schema has been loaded */ - sqlite3_mutex_enter(db->mutex); - (void)sqlite3SafetyOn(db); - sqlite3BtreeEnterAll(db); - rc = sqlite3Init(db, &zErrMsg); - if( SQLITE_OK!=rc ){ - goto error_out; + for(pCsr->iCol++; pCsr->iColnStat; pCsr->iCol++){ + if( pCsr->aStat[pCsr->iCol].nDoc>0 ) return SQLITE_OK; } - /* Locate the table in question */ - pTab = sqlite3FindTable(db, zTableName, zDbName); - if( !pTab || pTab->pSelect ){ - pTab = 0; - goto error_out; - } + rc = sqlite3Fts3SegReaderStep(pFts3, &pCsr->csr); + if( rc==SQLITE_ROW ){ + int i = 0; + int nDoclist = pCsr->csr.nDoclist; + char *aDoclist = pCsr->csr.aDoclist; + int iCol; - /* Find the column for which info is requested */ - if( sqlite3IsRowid(zColumnName) ){ - iCol = pTab->iPKey; - if( iCol>=0 ){ - pCol = &pTab->aCol[iCol]; - } - }else{ - for(iCol=0; iColnCol; iCol++){ - pCol = &pTab->aCol[iCol]; - if( 0==sqlite3StrICmp(pCol->zName, zColumnName) ){ - break; + int eState = 0; + + if( pCsr->zStop ){ + int n = (pCsr->nStopcsr.nTerm) ? pCsr->nStop : pCsr->csr.nTerm; + int mc = memcmp(pCsr->zStop, pCsr->csr.zTerm, n); + if( mc<0 || (mc==0 && pCsr->csr.nTerm>pCsr->nStop) ){ + pCsr->isEof = 1; + return SQLITE_OK; } } - if( iCol==pTab->nCol ){ - pTab = 0; - goto error_out; - } - } - /* The following block stores the meta information that will be returned - ** to the caller in local variables zDataType, zCollSeq, notnull, primarykey - ** and autoinc. At this point there are two possibilities: - ** - ** 1. The specified column name was rowid", "oid" or "_rowid_" - ** and there is no explicitly declared IPK column. - ** - ** 2. The table is not a view and the column name identified an - ** explicitly declared column. Copy meta information from *pCol. - */ - if( pCol ){ - zDataType = pCol->zType; - zCollSeq = pCol->zColl; - notnull = pCol->notNull!=0; - primarykey = pCol->isPrimKey!=0; - autoinc = pTab->iPKey==iCol && (pTab->tabFlags & TF_Autoincrement)!=0; - }else{ - zDataType = "INTEGER"; - primarykey = 1; - } - if( !zCollSeq ){ - zCollSeq = "BINARY"; - } + if( fts3auxGrowStatArray(pCsr, 2) ) return SQLITE_NOMEM; + memset(pCsr->aStat, 0, sizeof(struct Fts3auxColstats) * pCsr->nStat); + iCol = 0; -error_out: - sqlite3BtreeLeaveAll(db); - (void)sqlite3SafetyOff(db); + while( iaStat[0].nDoc++; + eState = 1; + iCol = 0; + break; + + /* State 1. In this state we are expecting either a 1, indicating + ** that the following integer will be a column number, or the + ** start of a position list for column 0. + ** + ** The only difference between state 1 and state 2 is that if the + ** integer encountered in state 1 is not 0 or 1, then we need to + ** increment the column 0 "nDoc" count for this term. + */ + case 1: + assert( iCol==0 ); + if( v>1 ){ + pCsr->aStat[1].nDoc++; + } + eState = 2; + /* fall through */ + + case 2: + if( v==0 ){ /* 0x00. Next integer will be a docid. */ + eState = 0; + }else if( v==1 ){ /* 0x01. Next integer will be a column number. */ + eState = 3; + }else{ /* 2 or greater. A position. */ + pCsr->aStat[iCol+1].nOcc++; + pCsr->aStat[0].nOcc++; + } + break; + + /* State 3. The integer just read is a column number. */ + default: assert( eState==3 ); + iCol = (int)v; + if( fts3auxGrowStatArray(pCsr, iCol+2) ) return SQLITE_NOMEM; + pCsr->aStat[iCol+1].nDoc++; + eState = 2; + break; + } + } - if( SQLITE_OK==rc && !pTab ){ - sqlite3DbFree(db, zErrMsg); - zErrMsg = sqlite3MPrintf(db, "no such table column: %s.%s", zTableName, - zColumnName); - rc = SQLITE_ERROR; + pCsr->iCol = 0; + rc = SQLITE_OK; + }else{ + pCsr->isEof = 1; } - sqlite3Error(db, rc, (zErrMsg?"%s":0), zErrMsg); - sqlite3DbFree(db, zErrMsg); - rc = sqlite3ApiExit(db, rc); - sqlite3_mutex_leave(db->mutex); return rc; } -#endif /* -** Sleep for a little while. Return the amount of time slept. +** xFilter - Initialize a cursor to point at the start of its data. */ -SQLITE_API int sqlite3_sleep(int ms){ - sqlite3_vfs *pVfs; +static int fts3auxFilterMethod( + sqlite3_vtab_cursor *pCursor, /* The cursor used for this query */ + int idxNum, /* Strategy index */ + const char *idxStr, /* Unused */ + int nVal, /* Number of elements in apVal */ + sqlite3_value **apVal /* Arguments for the indexing scheme */ +){ + Fts3auxCursor *pCsr = (Fts3auxCursor *)pCursor; + Fts3Table *pFts3 = ((Fts3auxTable *)pCursor->pVtab)->pFts3Tab; int rc; - pVfs = sqlite3_vfs_find(0); - if( pVfs==0 ) return 0; + int isScan; - /* This function works in milliseconds, but the underlying OsSleep() - ** API uses microseconds. Hence the 1000's. - */ - rc = (sqlite3OsSleep(pVfs, 1000*ms)/1000); + UNUSED_PARAMETER(nVal); + UNUSED_PARAMETER(idxStr); + + assert( idxStr==0 ); + assert( idxNum==FTS4AUX_EQ_CONSTRAINT || idxNum==0 + || idxNum==FTS4AUX_LE_CONSTRAINT || idxNum==FTS4AUX_GE_CONSTRAINT + || idxNum==(FTS4AUX_LE_CONSTRAINT|FTS4AUX_GE_CONSTRAINT) + ); + isScan = (idxNum!=FTS4AUX_EQ_CONSTRAINT); + + /* In case this cursor is being reused, close and zero it. */ + testcase(pCsr->filter.zTerm); + sqlite3Fts3SegReaderFinish(&pCsr->csr); + sqlite3_free((void *)pCsr->filter.zTerm); + sqlite3_free(pCsr->aStat); + memset(&pCsr->csr, 0, ((u8*)&pCsr[1]) - (u8*)&pCsr->csr); + + pCsr->filter.flags = FTS3_SEGMENT_REQUIRE_POS|FTS3_SEGMENT_IGNORE_EMPTY; + if( isScan ) pCsr->filter.flags |= FTS3_SEGMENT_SCAN; + + if( idxNum&(FTS4AUX_EQ_CONSTRAINT|FTS4AUX_GE_CONSTRAINT) ){ + const unsigned char *zStr = sqlite3_value_text(apVal[0]); + if( zStr ){ + pCsr->filter.zTerm = sqlite3_mprintf("%s", zStr); + pCsr->filter.nTerm = sqlite3_value_bytes(apVal[0]); + if( pCsr->filter.zTerm==0 ) return SQLITE_NOMEM; + } + } + if( idxNum&FTS4AUX_LE_CONSTRAINT ){ + int iIdx = (idxNum&FTS4AUX_GE_CONSTRAINT) ? 1 : 0; + pCsr->zStop = sqlite3_mprintf("%s", sqlite3_value_text(apVal[iIdx])); + pCsr->nStop = sqlite3_value_bytes(apVal[iIdx]); + if( pCsr->zStop==0 ) return SQLITE_NOMEM; + } + + rc = sqlite3Fts3SegReaderCursor(pFts3, 0, 0, FTS3_SEGCURSOR_ALL, + pCsr->filter.zTerm, pCsr->filter.nTerm, 0, isScan, &pCsr->csr + ); + if( rc==SQLITE_OK ){ + rc = sqlite3Fts3SegReaderStart(pFts3, &pCsr->csr, &pCsr->filter); + } + + if( rc==SQLITE_OK ) rc = fts3auxNextMethod(pCursor); return rc; } /* -** Enable or disable the extended result codes. +** xEof - Return true if the cursor is at EOF, or false otherwise. */ -SQLITE_API int sqlite3_extended_result_codes(sqlite3 *db, int onoff){ - sqlite3_mutex_enter(db->mutex); - db->errMask = onoff ? 0xffffffff : 0xff; - sqlite3_mutex_leave(db->mutex); - return SQLITE_OK; +static int fts3auxEofMethod(sqlite3_vtab_cursor *pCursor){ + Fts3auxCursor *pCsr = (Fts3auxCursor *)pCursor; + return pCsr->isEof; } /* -** Invoke the xFileControl method on a particular database. +** xColumn - Return a column value. */ -SQLITE_API int sqlite3_file_control(sqlite3 *db, const char *zDbName, int op, void *pArg){ - int rc = SQLITE_ERROR; - int iDb; - sqlite3_mutex_enter(db->mutex); - if( zDbName==0 ){ - iDb = 0; - }else{ - for(iDb=0; iDbnDb; iDb++){ - if( strcmp(db->aDb[iDb].zName, zDbName)==0 ) break; - } - } - if( iDbnDb ){ - Btree *pBtree = db->aDb[iDb].pBt; - if( pBtree ){ - Pager *pPager; - sqlite3_file *fd; - sqlite3BtreeEnter(pBtree); - pPager = sqlite3BtreePager(pBtree); - assert( pPager!=0 ); - fd = sqlite3PagerFile(pPager); - assert( fd!=0 ); - if( fd->pMethods ){ - rc = sqlite3OsFileControl(fd, op, pArg); - } - sqlite3BtreeLeave(pBtree); +static int fts3auxColumnMethod( + sqlite3_vtab_cursor *pCursor, /* Cursor to retrieve value from */ + sqlite3_context *pContext, /* Context for sqlite3_result_xxx() calls */ + int iCol /* Index of column to read value from */ +){ + Fts3auxCursor *p = (Fts3auxCursor *)pCursor; + + assert( p->isEof==0 ); + if( iCol==0 ){ /* Column "term" */ + sqlite3_result_text(pContext, p->csr.zTerm, p->csr.nTerm, SQLITE_TRANSIENT); + }else if( iCol==1 ){ /* Column "col" */ + if( p->iCol ){ + sqlite3_result_int(pContext, p->iCol-1); + }else{ + sqlite3_result_text(pContext, "*", -1, SQLITE_STATIC); } + }else if( iCol==2 ){ /* Column "documents" */ + sqlite3_result_int64(pContext, p->aStat[p->iCol].nDoc); + }else{ /* Column "occurrences" */ + sqlite3_result_int64(pContext, p->aStat[p->iCol].nOcc); } - sqlite3_mutex_leave(db->mutex); - return rc; + + return SQLITE_OK; } /* -** Interface to the testing logic. +** xRowid - Return the current rowid for the cursor. */ -SQLITE_API int sqlite3_test_control(int op, ...){ - int rc = 0; -#ifndef SQLITE_OMIT_BUILTIN_TEST - va_list ap; - va_start(ap, op); - switch( op ){ - - /* - ** Save the current state of the PRNG. - */ - case SQLITE_TESTCTRL_PRNG_SAVE: { - sqlite3PrngSaveState(); - break; - } - - /* - ** Restore the state of the PRNG to the last state saved using - ** PRNG_SAVE. If PRNG_SAVE has never before been called, then - ** this verb acts like PRNG_RESET. - */ - case SQLITE_TESTCTRL_PRNG_RESTORE: { - sqlite3PrngRestoreState(); - break; - } - - /* - ** Reset the PRNG back to its uninitialized state. The next call - ** to sqlite3_randomness() will reseed the PRNG using a single call - ** to the xRandomness method of the default VFS. - */ - case SQLITE_TESTCTRL_PRNG_RESET: { - sqlite3PrngResetState(); - break; - } - - /* - ** sqlite3_test_control(BITVEC_TEST, size, program) - ** - ** Run a test against a Bitvec object of size. The program argument - ** is an array of integers that defines the test. Return -1 on a - ** memory allocation error, 0 on success, or non-zero for an error. - ** See the sqlite3BitvecBuiltinTest() for additional information. - */ - case SQLITE_TESTCTRL_BITVEC_TEST: { - int sz = va_arg(ap, int); - int *aProg = va_arg(ap, int*); - rc = sqlite3BitvecBuiltinTest(sz, aProg); - break; - } - - /* - ** sqlite3_test_control(BENIGN_MALLOC_HOOKS, xBegin, xEnd) - ** - ** Register hooks to call to indicate which malloc() failures - ** are benign. - */ - case SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS: { - typedef void (*void_function)(void); - void_function xBenignBegin; - void_function xBenignEnd; - xBenignBegin = va_arg(ap, void_function); - xBenignEnd = va_arg(ap, void_function); - sqlite3BenignMallocHooks(xBenignBegin, xBenignEnd); - break; - } - - /* - ** sqlite3_test_control(SQLITE_TESTCTRL_PENDING_BYTE, unsigned int X) - ** - ** Set the PENDING byte to the value in the argument, if X>0. - ** Make no changes if X==0. Return the value of the pending byte - ** as it existing before this routine was called. - ** - ** IMPORTANT: Changing the PENDING byte from 0x40000000 results in - ** an incompatible database file format. Changing the PENDING byte - ** while any database connection is open results in undefined and - ** dileterious behavior. - */ - case SQLITE_TESTCTRL_PENDING_BYTE: { - unsigned int newVal = va_arg(ap, unsigned int); - rc = sqlite3PendingByte; - if( newVal ) sqlite3PendingByte = newVal; - break; - } - - /* - ** sqlite3_test_control(SQLITE_TESTCTRL_ASSERT, int X) - ** - ** This action provides a run-time test to see whether or not - ** assert() was enabled at compile-time. If X is true and assert() - ** is enabled, then the return value is true. If X is true and - ** assert() is disabled, then the return value is zero. If X is - ** false and assert() is enabled, then the assertion fires and the - ** process aborts. If X is false and assert() is disabled, then the - ** return value is zero. - */ - case SQLITE_TESTCTRL_ASSERT: { - volatile int x = 0; - assert( (x = va_arg(ap,int))!=0 ); - rc = x; - break; - } +static int fts3auxRowidMethod( + sqlite3_vtab_cursor *pCursor, /* Cursor to retrieve value from */ + sqlite_int64 *pRowid /* OUT: Rowid value */ +){ + Fts3auxCursor *pCsr = (Fts3auxCursor *)pCursor; + *pRowid = pCsr->iRowid; + return SQLITE_OK; +} +/* +** Register the fts3aux module with database connection db. Return SQLITE_OK +** if successful or an error code if sqlite3_create_module() fails. +*/ +SQLITE_PRIVATE int sqlite3Fts3InitAux(sqlite3 *db){ + static const sqlite3_module fts3aux_module = { + 0, /* iVersion */ + fts3auxConnectMethod, /* xCreate */ + fts3auxConnectMethod, /* xConnect */ + fts3auxBestIndexMethod, /* xBestIndex */ + fts3auxDisconnectMethod, /* xDisconnect */ + fts3auxDisconnectMethod, /* xDestroy */ + fts3auxOpenMethod, /* xOpen */ + fts3auxCloseMethod, /* xClose */ + fts3auxFilterMethod, /* xFilter */ + fts3auxNextMethod, /* xNext */ + fts3auxEofMethod, /* xEof */ + fts3auxColumnMethod, /* xColumn */ + fts3auxRowidMethod, /* xRowid */ + 0, /* xUpdate */ + 0, /* xBegin */ + 0, /* xSync */ + 0, /* xCommit */ + 0, /* xRollback */ + 0, /* xFindFunction */ + 0, /* xRename */ + 0, /* xSavepoint */ + 0, /* xRelease */ + 0 /* xRollbackTo */ + }; + int rc; /* Return code */ - /* - ** sqlite3_test_control(SQLITE_TESTCTRL_ALWAYS, int X) - ** - ** This action provides a run-time test to see how the ALWAYS and - ** NEVER macros were defined at compile-time. - ** - ** The return value is ALWAYS(X). - ** - ** The recommended test is X==2. If the return value is 2, that means - ** ALWAYS() and NEVER() are both no-op pass-through macros, which is the - ** default setting. If the return value is 1, then ALWAYS() is either - ** hard-coded to true or else it asserts if its argument is false. - ** The first behavior (hard-coded to true) is the case if - ** SQLITE_TESTCTRL_ASSERT shows that assert() is disabled and the second - ** behavior (assert if the argument to ALWAYS() is false) is the case if - ** SQLITE_TESTCTRL_ASSERT shows that assert() is enabled. - ** - ** The run-time test procedure might look something like this: - ** - ** if( sqlite3_test_control(SQLITE_TESTCTRL_ALWAYS, 2)==2 ){ - ** // ALWAYS() and NEVER() are no-op pass-through macros - ** }else if( sqlite3_test_control(SQLITE_TESTCTRL_ASSERT, 1) ){ - ** // ALWAYS(x) asserts that x is true. NEVER(x) asserts x is false. - ** }else{ - ** // ALWAYS(x) is a constant 1. NEVER(x) is a constant 0. - ** } - */ - case SQLITE_TESTCTRL_ALWAYS: { - int x = va_arg(ap,int); - rc = ALWAYS(x); - break; - } - } - va_end(ap); -#endif /* SQLITE_OMIT_BUILTIN_TEST */ + rc = sqlite3_create_module(db, "fts4aux", &fts3aux_module, 0); return rc; } -/************** End of main.c ************************************************/ -/************** Begin file notify.c ******************************************/ +#endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) */ + +/************** End of fts3_aux.c ********************************************/ +/************** Begin file fts3_expr.c ***************************************/ /* -** 2009 March 3 +** 2008 Nov 28 ** ** The author disclaims copyright to this source code. In place of ** a legal notice, here is a blessing: @@ -92910,864 +123690,1011 @@ SQLITE_API int sqlite3_test_control(int op, ...){ ** May you find forgiveness for yourself and forgive others. ** May you share freely, never taking more than you give. ** -************************************************************************* +****************************************************************************** ** -** This file contains the implementation of the sqlite3_unlock_notify() -** API method and its associated functionality. +** This module contains code that implements a parser for fts3 query strings +** (the right-hand argument to the MATCH operator). Because the supported +** syntax is relatively simple, the whole tokenizer/parser system is +** hand-coded. +*/ +#if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) + +/* +** By default, this module parses the legacy syntax that has been +** traditionally used by fts3. Or, if SQLITE_ENABLE_FTS3_PARENTHESIS +** is defined, then it uses the new syntax. The differences between +** the new and the old syntaxes are: +** +** a) The new syntax supports parenthesis. The old does not. +** +** b) The new syntax supports the AND and NOT operators. The old does not. +** +** c) The old syntax supports the "-" token qualifier. This is not +** supported by the new syntax (it is replaced by the NOT operator). +** +** d) When using the old syntax, the OR operator has a greater precedence +** than an implicit AND. When using the new, both implicity and explicit +** AND operators have a higher precedence than OR. +** +** If compiled with SQLITE_TEST defined, then this module exports the +** symbol "int sqlite3_fts3_enable_parentheses". Setting this variable +** to zero causes the module to use the old syntax. If it is set to +** non-zero the new syntax is activated. This is so both syntaxes can +** be tested using a single build of testfixture. +** +** The following describes the syntax supported by the fts3 MATCH +** operator in a similar format to that used by the lemon parser +** generator. This module does not use actually lemon, it uses a +** custom parser. +** +** query ::= andexpr (OR andexpr)*. +** +** andexpr ::= notexpr (AND? notexpr)*. +** +** notexpr ::= nearexpr (NOT nearexpr|-TOKEN)*. +** notexpr ::= LP query RP. ** -** $Id: notify.c,v 1.4 2009/04/07 22:06:57 drh Exp $ +** nearexpr ::= phrase (NEAR distance_opt nearexpr)*. +** +** distance_opt ::= . +** distance_opt ::= / INTEGER. +** +** phrase ::= TOKEN. +** phrase ::= COLUMN:TOKEN. +** phrase ::= "TOKEN TOKEN TOKEN...". */ -/* Omit this entire file if SQLITE_ENABLE_UNLOCK_NOTIFY is not defined. */ -#ifdef SQLITE_ENABLE_UNLOCK_NOTIFY +#ifdef SQLITE_TEST +SQLITE_API int sqlite3_fts3_enable_parentheses = 0; +#else +# ifdef SQLITE_ENABLE_FTS3_PARENTHESIS +# define sqlite3_fts3_enable_parentheses 1 +# else +# define sqlite3_fts3_enable_parentheses 0 +# endif +#endif /* -** Public interfaces: -** -** sqlite3ConnectionBlocked() -** sqlite3ConnectionUnlocked() -** sqlite3ConnectionClosed() -** sqlite3_unlock_notify() +** Default span for NEAR operators. */ +#define SQLITE_FTS3_DEFAULT_NEAR_PARAM 10 -#define assertMutexHeld() \ - assert( sqlite3_mutex_held(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER)) ) +/* #include */ +/* #include */ /* -** Head of a linked list of all sqlite3 objects created by this process -** for which either sqlite3.pBlockingConnection or sqlite3.pUnlockConnection -** is not NULL. This variable may only accessed while the STATIC_MASTER -** mutex is held. +** isNot: +** This variable is used by function getNextNode(). When getNextNode() is +** called, it sets ParseContext.isNot to true if the 'next node' is a +** FTSQUERY_PHRASE with a unary "-" attached to it. i.e. "mysql" in the +** FTS3 query "sqlite -mysql". Otherwise, ParseContext.isNot is set to +** zero. */ -static sqlite3 *SQLITE_WSD sqlite3BlockedList = 0; +typedef struct ParseContext ParseContext; +struct ParseContext { + sqlite3_tokenizer *pTokenizer; /* Tokenizer module */ + int iLangid; /* Language id used with tokenizer */ + const char **azCol; /* Array of column names for fts3 table */ + int bFts4; /* True to allow FTS4-only syntax */ + int nCol; /* Number of entries in azCol[] */ + int iDefaultCol; /* Default column to query */ + int isNot; /* True if getNextNode() sees a unary - */ + sqlite3_context *pCtx; /* Write error message here */ + int nNest; /* Number of nested brackets */ +}; -#ifndef NDEBUG /* -** This function is a complex assert() that verifies the following -** properties of the blocked connections list: -** -** 1) Each entry in the list has a non-NULL value for either -** pUnlockConnection or pBlockingConnection, or both. -** -** 2) All entries in the list that share a common value for -** xUnlockNotify are grouped together. +** This function is equivalent to the standard isspace() function. ** -** 3) If the argument db is not NULL, then none of the entries in the -** blocked connections list have pUnlockConnection or pBlockingConnection -** set to db. This is used when closing connection db. +** The standard isspace() can be awkward to use safely, because although it +** is defined to accept an argument of type int, its behaviour when passed +** an integer that falls outside of the range of the unsigned char type +** is undefined (and sometimes, "undefined" means segfault). This wrapper +** is defined to accept an argument of type char, and always returns 0 for +** any values that fall outside of the range of the unsigned char type (i.e. +** negative values). */ -static void checkListProperties(sqlite3 *db){ - sqlite3 *p; - for(p=sqlite3BlockedList; p; p=p->pNextBlocked){ - int seen = 0; - sqlite3 *p2; - - /* Verify property (1) */ - assert( p->pUnlockConnection || p->pBlockingConnection ); - - /* Verify property (2) */ - for(p2=sqlite3BlockedList; p2!=p; p2=p2->pNextBlocked){ - if( p2->xUnlockNotify==p->xUnlockNotify ) seen = 1; - assert( p2->xUnlockNotify==p->xUnlockNotify || !seen ); - assert( db==0 || p->pUnlockConnection!=db ); - assert( db==0 || p->pBlockingConnection!=db ); - } - } +static int fts3isspace(char c){ + return c==' ' || c=='\t' || c=='\n' || c=='\r' || c=='\v' || c=='\f'; } -#else -# define checkListProperties(x) -#endif /* -** Remove connection db from the blocked connections list. If connection -** db is not currently a part of the list, this function is a no-op. +** Allocate nByte bytes of memory using sqlite3_malloc(). If successful, +** zero the memory before returning a pointer to it. If unsuccessful, +** return NULL. */ -static void removeFromBlockedList(sqlite3 *db){ - sqlite3 **pp; - assertMutexHeld(); - for(pp=&sqlite3BlockedList; *pp; pp = &(*pp)->pNextBlocked){ - if( *pp==db ){ - *pp = (*pp)->pNextBlocked; - break; +static void *fts3MallocZero(int nByte){ + void *pRet = sqlite3_malloc(nByte); + if( pRet ) memset(pRet, 0, nByte); + return pRet; +} + +SQLITE_PRIVATE int sqlite3Fts3OpenTokenizer( + sqlite3_tokenizer *pTokenizer, + int iLangid, + const char *z, + int n, + sqlite3_tokenizer_cursor **ppCsr +){ + sqlite3_tokenizer_module const *pModule = pTokenizer->pModule; + sqlite3_tokenizer_cursor *pCsr = 0; + int rc; + + rc = pModule->xOpen(pTokenizer, z, n, &pCsr); + assert( rc==SQLITE_OK || pCsr==0 ); + if( rc==SQLITE_OK ){ + pCsr->pTokenizer = pTokenizer; + if( pModule->iVersion>=1 ){ + rc = pModule->xLanguageid(pCsr, iLangid); + if( rc!=SQLITE_OK ){ + pModule->xClose(pCsr); + pCsr = 0; + } } } + *ppCsr = pCsr; + return rc; } -/* -** Add connection db to the blocked connections list. It is assumed -** that it is not already a part of the list. -*/ -static void addToBlockedList(sqlite3 *db){ - sqlite3 **pp; - assertMutexHeld(); - for( - pp=&sqlite3BlockedList; - *pp && (*pp)->xUnlockNotify!=db->xUnlockNotify; - pp=&(*pp)->pNextBlocked - ); - db->pNextBlocked = *pp; - *pp = db; -} /* -** Obtain the STATIC_MASTER mutex. +** Extract the next token from buffer z (length n) using the tokenizer +** and other information (column names etc.) in pParse. Create an Fts3Expr +** structure of type FTSQUERY_PHRASE containing a phrase consisting of this +** single token and set *ppExpr to point to it. If the end of the buffer is +** reached before a token is found, set *ppExpr to zero. It is the +** responsibility of the caller to eventually deallocate the allocated +** Fts3Expr structure (if any) by passing it to sqlite3_free(). +** +** Return SQLITE_OK if successful, or SQLITE_NOMEM if a memory allocation +** fails. */ -static void enterMutex(void){ - sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER)); - checkListProperties(0); +static int getNextToken( + ParseContext *pParse, /* fts3 query parse context */ + int iCol, /* Value for Fts3Phrase.iColumn */ + const char *z, int n, /* Input string */ + Fts3Expr **ppExpr, /* OUT: expression */ + int *pnConsumed /* OUT: Number of bytes consumed */ +){ + sqlite3_tokenizer *pTokenizer = pParse->pTokenizer; + sqlite3_tokenizer_module const *pModule = pTokenizer->pModule; + int rc; + sqlite3_tokenizer_cursor *pCursor; + Fts3Expr *pRet = 0; + int nConsumed = 0; + + rc = sqlite3Fts3OpenTokenizer(pTokenizer, pParse->iLangid, z, n, &pCursor); + if( rc==SQLITE_OK ){ + const char *zToken; + int nToken, iStart, iEnd, iPosition; + int nByte; /* total space to allocate */ + + rc = pModule->xNext(pCursor, &zToken, &nToken, &iStart, &iEnd, &iPosition); + if( rc==SQLITE_OK ){ + nByte = sizeof(Fts3Expr) + sizeof(Fts3Phrase) + nToken; + pRet = (Fts3Expr *)fts3MallocZero(nByte); + if( !pRet ){ + rc = SQLITE_NOMEM; + }else{ + pRet->eType = FTSQUERY_PHRASE; + pRet->pPhrase = (Fts3Phrase *)&pRet[1]; + pRet->pPhrase->nToken = 1; + pRet->pPhrase->iColumn = iCol; + pRet->pPhrase->aToken[0].n = nToken; + pRet->pPhrase->aToken[0].z = (char *)&pRet->pPhrase[1]; + memcpy(pRet->pPhrase->aToken[0].z, zToken, nToken); + + if( iEndpPhrase->aToken[0].isPrefix = 1; + iEnd++; + } + + while( 1 ){ + if( !sqlite3_fts3_enable_parentheses + && iStart>0 && z[iStart-1]=='-' + ){ + pParse->isNot = 1; + iStart--; + }else if( pParse->bFts4 && iStart>0 && z[iStart-1]=='^' ){ + pRet->pPhrase->aToken[0].bFirst = 1; + iStart--; + }else{ + break; + } + } + + } + nConsumed = iEnd; + } + + pModule->xClose(pCursor); + } + + *pnConsumed = nConsumed; + *ppExpr = pRet; + return rc; } + /* -** Release the STATIC_MASTER mutex. +** Enlarge a memory allocation. If an out-of-memory allocation occurs, +** then free the old allocation. */ -static void leaveMutex(void){ - assertMutexHeld(); - checkListProperties(0); - sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER)); +static void *fts3ReallocOrFree(void *pOrig, int nNew){ + void *pRet = sqlite3_realloc(pOrig, nNew); + if( !pRet ){ + sqlite3_free(pOrig); + } + return pRet; } /* -** Register an unlock-notify callback. -** -** This is called after connection "db" has attempted some operation -** but has received an SQLITE_LOCKED error because another connection -** (call it pOther) in the same process was busy using the same shared -** cache. pOther is found by looking at db->pBlockingConnection. -** -** If there is no blocking connection, the callback is invoked immediately, -** before this routine returns. -** -** If pOther is already blocked on db, then report SQLITE_LOCKED, to indicate -** a deadlock. -** -** Otherwise, make arrangements to invoke xNotify when pOther drops -** its locks. +** Buffer zInput, length nInput, contains the contents of a quoted string +** that appeared as part of an fts3 query expression. Neither quote character +** is included in the buffer. This function attempts to tokenize the entire +** input buffer and create an Fts3Expr structure of type FTSQUERY_PHRASE +** containing the results. ** -** Each call to this routine overrides any prior callbacks registered -** on the same "db". If xNotify==0 then any prior callbacks are immediately -** cancelled. +** If successful, SQLITE_OK is returned and *ppExpr set to point at the +** allocated Fts3Expr structure. Otherwise, either SQLITE_NOMEM (out of memory +** error) or SQLITE_ERROR (tokenization error) is returned and *ppExpr set +** to 0. */ -SQLITE_API int sqlite3_unlock_notify( - sqlite3 *db, - void (*xNotify)(void **, int), - void *pArg +static int getNextString( + ParseContext *pParse, /* fts3 query parse context */ + const char *zInput, int nInput, /* Input string */ + Fts3Expr **ppExpr /* OUT: expression */ ){ - int rc = SQLITE_OK; + sqlite3_tokenizer *pTokenizer = pParse->pTokenizer; + sqlite3_tokenizer_module const *pModule = pTokenizer->pModule; + int rc; + Fts3Expr *p = 0; + sqlite3_tokenizer_cursor *pCursor = 0; + char *zTemp = 0; + int nTemp = 0; + + const int nSpace = sizeof(Fts3Expr) + sizeof(Fts3Phrase); + int nToken = 0; + + /* The final Fts3Expr data structure, including the Fts3Phrase, + ** Fts3PhraseToken structures token buffers are all stored as a single + ** allocation so that the expression can be freed with a single call to + ** sqlite3_free(). Setting this up requires a two pass approach. + ** + ** The first pass, in the block below, uses a tokenizer cursor to iterate + ** through the tokens in the expression. This pass uses fts3ReallocOrFree() + ** to assemble data in two dynamic buffers: + ** + ** Buffer p: Points to the Fts3Expr structure, followed by the Fts3Phrase + ** structure, followed by the array of Fts3PhraseToken + ** structures. This pass only populates the Fts3PhraseToken array. + ** + ** Buffer zTemp: Contains copies of all tokens. + ** + ** The second pass, in the block that begins "if( rc==SQLITE_DONE )" below, + ** appends buffer zTemp to buffer p, and fills in the Fts3Expr and Fts3Phrase + ** structures. + */ + rc = sqlite3Fts3OpenTokenizer( + pTokenizer, pParse->iLangid, zInput, nInput, &pCursor); + if( rc==SQLITE_OK ){ + int ii; + for(ii=0; rc==SQLITE_OK; ii++){ + const char *zByte; + int nByte, iBegin, iEnd, iPos; + rc = pModule->xNext(pCursor, &zByte, &nByte, &iBegin, &iEnd, &iPos); + if( rc==SQLITE_OK ){ + Fts3PhraseToken *pToken; + + p = fts3ReallocOrFree(p, nSpace + ii*sizeof(Fts3PhraseToken)); + if( !p ) goto no_mem; + + zTemp = fts3ReallocOrFree(zTemp, nTemp + nByte); + if( !zTemp ) goto no_mem; + + assert( nToken==ii ); + pToken = &((Fts3Phrase *)(&p[1]))->aToken[ii]; + memset(pToken, 0, sizeof(Fts3PhraseToken)); + + memcpy(&zTemp[nTemp], zByte, nByte); + nTemp += nByte; + + pToken->n = nByte; + pToken->isPrefix = (iEndbFirst = (iBegin>0 && zInput[iBegin-1]=='^'); + nToken = ii+1; + } + } - sqlite3_mutex_enter(db->mutex); - enterMutex(); + pModule->xClose(pCursor); + pCursor = 0; + } - if( xNotify==0 ){ - removeFromBlockedList(db); - db->pUnlockConnection = 0; - db->xUnlockNotify = 0; - db->pUnlockArg = 0; - }else if( 0==db->pBlockingConnection ){ - /* The blocking transaction has been concluded. Or there never was a - ** blocking transaction. In either case, invoke the notify callback - ** immediately. - */ - xNotify(&pArg, 1); - }else{ - sqlite3 *p; + if( rc==SQLITE_DONE ){ + int jj; + char *zBuf = 0; - for(p=db->pBlockingConnection; p && p!=db; p=p->pUnlockConnection){} - if( p ){ - rc = SQLITE_LOCKED; /* Deadlock detected. */ + p = fts3ReallocOrFree(p, nSpace + nToken*sizeof(Fts3PhraseToken) + nTemp); + if( !p ) goto no_mem; + memset(p, 0, (char *)&(((Fts3Phrase *)&p[1])->aToken[0])-(char *)p); + p->eType = FTSQUERY_PHRASE; + p->pPhrase = (Fts3Phrase *)&p[1]; + p->pPhrase->iColumn = pParse->iDefaultCol; + p->pPhrase->nToken = nToken; + + zBuf = (char *)&p->pPhrase->aToken[nToken]; + if( zTemp ){ + memcpy(zBuf, zTemp, nTemp); + sqlite3_free(zTemp); }else{ - db->pUnlockConnection = db->pBlockingConnection; - db->xUnlockNotify = xNotify; - db->pUnlockArg = pArg; - removeFromBlockedList(db); - addToBlockedList(db); + assert( nTemp==0 ); + } + + for(jj=0; jjpPhrase->nToken; jj++){ + p->pPhrase->aToken[jj].z = zBuf; + zBuf += p->pPhrase->aToken[jj].n; } + rc = SQLITE_OK; } - leaveMutex(); - assert( !db->mallocFailed ); - sqlite3Error(db, rc, (rc?"database is deadlocked":0)); - sqlite3_mutex_leave(db->mutex); + *ppExpr = p; return rc; +no_mem: + + if( pCursor ){ + pModule->xClose(pCursor); + } + sqlite3_free(zTemp); + sqlite3_free(p); + *ppExpr = 0; + return SQLITE_NOMEM; } /* -** This function is called while stepping or preparing a statement -** associated with connection db. The operation will return SQLITE_LOCKED -** to the user because it requires a lock that will not be available -** until connection pBlocker concludes its current transaction. +** Function getNextNode(), which is called by fts3ExprParse(), may itself +** call fts3ExprParse(). So this forward declaration is required. */ -SQLITE_PRIVATE void sqlite3ConnectionBlocked(sqlite3 *db, sqlite3 *pBlocker){ - enterMutex(); - if( db->pBlockingConnection==0 && db->pUnlockConnection==0 ){ - addToBlockedList(db); - } - db->pBlockingConnection = pBlocker; - leaveMutex(); -} +static int fts3ExprParse(ParseContext *, const char *, int, Fts3Expr **, int *); /* -** This function is called when -** the transaction opened by database db has just finished. Locks held -** by database connection db have been released. -** -** This function loops through each entry in the blocked connections -** list and does the following: -** -** 1) If the sqlite3.pBlockingConnection member of a list entry is -** set to db, then set pBlockingConnection=0. -** -** 2) If the sqlite3.pUnlockConnection member of a list entry is -** set to db, then invoke the configured unlock-notify callback and -** set pUnlockConnection=0. +** The output variable *ppExpr is populated with an allocated Fts3Expr +** structure, or set to 0 if the end of the input buffer is reached. ** -** 3) If the two steps above mean that pBlockingConnection==0 and -** pUnlockConnection==0, remove the entry from the blocked connections -** list. +** Returns an SQLite error code. SQLITE_OK if everything works, SQLITE_NOMEM +** if a malloc failure occurs, or SQLITE_ERROR if a parse error is encountered. +** If SQLITE_ERROR is returned, pContext is populated with an error message. */ -SQLITE_PRIVATE void sqlite3ConnectionUnlocked(sqlite3 *db){ - void (*xUnlockNotify)(void **, int) = 0; /* Unlock-notify cb to invoke */ - int nArg = 0; /* Number of entries in aArg[] */ - sqlite3 **pp; /* Iterator variable */ - void **aArg; /* Arguments to the unlock callback */ - void **aDyn = 0; /* Dynamically allocated space for aArg[] */ - void *aStatic[16]; /* Starter space for aArg[]. No malloc required */ +static int getNextNode( + ParseContext *pParse, /* fts3 query parse context */ + const char *z, int n, /* Input string */ + Fts3Expr **ppExpr, /* OUT: expression */ + int *pnConsumed /* OUT: Number of bytes consumed */ +){ + static const struct Fts3Keyword { + char *z; /* Keyword text */ + unsigned char n; /* Length of the keyword */ + unsigned char parenOnly; /* Only valid in paren mode */ + unsigned char eType; /* Keyword code */ + } aKeyword[] = { + { "OR" , 2, 0, FTSQUERY_OR }, + { "AND", 3, 1, FTSQUERY_AND }, + { "NOT", 3, 1, FTSQUERY_NOT }, + { "NEAR", 4, 0, FTSQUERY_NEAR } + }; + int ii; + int iCol; + int iColLen; + int rc; + Fts3Expr *pRet = 0; - aArg = aStatic; - enterMutex(); /* Enter STATIC_MASTER mutex */ + const char *zInput = z; + int nInput = n; - /* This loop runs once for each entry in the blocked-connections list. */ - for(pp=&sqlite3BlockedList; *pp; /* no-op */ ){ - sqlite3 *p = *pp; + pParse->isNot = 0; - /* Step 1. */ - if( p->pBlockingConnection==db ){ - p->pBlockingConnection = 0; + /* Skip over any whitespace before checking for a keyword, an open or + ** close bracket, or a quoted string. + */ + while( nInput>0 && fts3isspace(*zInput) ){ + nInput--; + zInput++; + } + if( nInput==0 ){ + return SQLITE_DONE; + } + + /* See if we are dealing with a keyword. */ + for(ii=0; ii<(int)(sizeof(aKeyword)/sizeof(struct Fts3Keyword)); ii++){ + const struct Fts3Keyword *pKey = &aKeyword[ii]; + + if( (pKey->parenOnly & ~sqlite3_fts3_enable_parentheses)!=0 ){ + continue; } - /* Step 2. */ - if( p->pUnlockConnection==db ){ - assert( p->xUnlockNotify ); - if( p->xUnlockNotify!=xUnlockNotify && nArg!=0 ){ - xUnlockNotify(aArg, nArg); - nArg = 0; + if( nInput>=pKey->n && 0==memcmp(zInput, pKey->z, pKey->n) ){ + int nNear = SQLITE_FTS3_DEFAULT_NEAR_PARAM; + int nKey = pKey->n; + char cNext; + + /* If this is a "NEAR" keyword, check for an explicit nearness. */ + if( pKey->eType==FTSQUERY_NEAR ){ + assert( nKey==4 ); + if( zInput[4]=='/' && zInput[5]>='0' && zInput[5]<='9' ){ + nNear = 0; + for(nKey=5; zInput[nKey]>='0' && zInput[nKey]<='9'; nKey++){ + nNear = nNear * 10 + (zInput[nKey] - '0'); + } + } } - sqlite3BeginBenignMalloc(); - assert( aArg==aDyn || (aDyn==0 && aArg==aStatic) ); - assert( nArg<=(int)ArraySize(aStatic) || aArg==aDyn ); - if( (!aDyn && nArg==(int)ArraySize(aStatic)) - || (aDyn && nArg==(int)(sqlite3DbMallocSize(db, aDyn)/sizeof(void*))) + /* At this point this is probably a keyword. But for that to be true, + ** the next byte must contain either whitespace, an open or close + ** parenthesis, a quote character, or EOF. + */ + cNext = zInput[nKey]; + if( fts3isspace(cNext) + || cNext=='"' || cNext=='(' || cNext==')' || cNext==0 ){ - /* The aArg[] array needs to grow. */ - void **pNew = (void **)sqlite3Malloc(nArg*sizeof(void *)*2); - if( pNew ){ - memcpy(pNew, aArg, nArg*sizeof(void *)); - sqlite3_free(aDyn); - aDyn = aArg = pNew; - }else{ - /* This occurs when the array of context pointers that need to - ** be passed to the unlock-notify callback is larger than the - ** aStatic[] array allocated on the stack and the attempt to - ** allocate a larger array from the heap has failed. - ** - ** This is a difficult situation to handle. Returning an error - ** code to the caller is insufficient, as even if an error code - ** is returned the transaction on connection db will still be - ** closed and the unlock-notify callbacks on blocked connections - ** will go unissued. This might cause the application to wait - ** indefinitely for an unlock-notify callback that will never - ** arrive. - ** - ** Instead, invoke the unlock-notify callback with the context - ** array already accumulated. We can then clear the array and - ** begin accumulating any further context pointers without - ** requiring any dynamic allocation. This is sub-optimal because - ** it means that instead of one callback with a large array of - ** context pointers the application will receive two or more - ** callbacks with smaller arrays of context pointers, which will - ** reduce the applications ability to prioritize multiple - ** connections. But it is the best that can be done under the - ** circumstances. - */ - xUnlockNotify(aArg, nArg); - nArg = 0; + pRet = (Fts3Expr *)fts3MallocZero(sizeof(Fts3Expr)); + if( !pRet ){ + return SQLITE_NOMEM; } + pRet->eType = pKey->eType; + pRet->nNear = nNear; + *ppExpr = pRet; + *pnConsumed = (int)((zInput - z) + nKey); + return SQLITE_OK; } - sqlite3EndBenignMalloc(); - aArg[nArg++] = p->pUnlockArg; - xUnlockNotify = p->xUnlockNotify; - p->pUnlockConnection = 0; - p->xUnlockNotify = 0; - p->pUnlockArg = 0; + /* Turns out that wasn't a keyword after all. This happens if the + ** user has supplied a token such as "ORacle". Continue. + */ } + } - /* Step 3. */ - if( p->pBlockingConnection==0 && p->pUnlockConnection==0 ){ - /* Remove connection p from the blocked connections list. */ - *pp = p->pNextBlocked; - p->pNextBlocked = 0; - }else{ - pp = &p->pNextBlocked; + /* Check for an open bracket. */ + if( sqlite3_fts3_enable_parentheses ){ + if( *zInput=='(' ){ + int nConsumed; + pParse->nNest++; + rc = fts3ExprParse(pParse, &zInput[1], nInput-1, ppExpr, &nConsumed); + if( rc==SQLITE_OK && !*ppExpr ){ + rc = SQLITE_DONE; + } + *pnConsumed = (int)((zInput - z) + 1 + nConsumed); + return rc; + } + + /* Check for a close bracket. */ + if( *zInput==')' ){ + pParse->nNest--; + *pnConsumed = (int)((zInput - z) + 1); + return SQLITE_DONE; } } - if( nArg!=0 ){ - xUnlockNotify(aArg, nArg); + /* See if we are dealing with a quoted phrase. If this is the case, then + ** search for the closing quote and pass the whole string to getNextString() + ** for processing. This is easy to do, as fts3 has no syntax for escaping + ** a quote character embedded in a string. + */ + if( *zInput=='"' ){ + for(ii=1; ii0) -** varint iBlockid; (block id of node's leftmost subtree) -** optional { -** varint nTerm; (length of first term) -** char pTerm[nTerm]; (content of first term) -** array { -** (further terms are delta-encoded) -** varint nPrefix; (length of shared prefix with previous term) -** varint nSuffix; (length of unshared suffix) -** char pTermSuffix[nSuffix]; (unshared suffix of next term) -** } -** } -** -** Here, optional { X } means an optional element, while array { X } -** means zero or more occurrences of X, adjacent in memory. -** -** An interior node encodes n terms separating n+1 subtrees. The -** subtree blocks are contiguous, so only the first subtree's blockid -** is encoded. The subtree at iBlockid will contain all terms less -** than the first term encoded (or all terms if no term is encoded). -** Otherwise, for terms greater than or equal to pTerm[i] but less -** than pTerm[i+1], the subtree for that term will be rooted at -** iBlockid+i. Interior nodes only store enough term data to -** distinguish adjacent children (if the rightmost term of the left -** child is "something", and the leftmost term of the right child is -** "wicked", only "w" is stored). -** -** New data is spilled to a new interior node at the same height when -** the current node exceeds INTERIOR_MAX bytes (default 2048). -** INTERIOR_MIN_TERMS (default 7) keeps large terms from monopolizing -** interior nodes and making the tree too skinny. The interior nodes -** at a given height are naturally tracked by interior nodes at -** height+1, and so on. -** -** -**** Segment directory **** -** The segment directory in table %_segdir stores meta-information for -** merging and deleting segments, and also the root node of the -** segment's tree. -** -** The root node is the top node of the segment's tree after encoding -** the entire segment, restricted to ROOT_MAX bytes (default 1024). -** This could be either a leaf node or an interior node. If the top -** node requires more than ROOT_MAX bytes, it is flushed to %_segments -** and a new root interior node is generated (which should always fit -** within ROOT_MAX because it only needs space for 2 varints, the -** height and the blockid of the previous root). -** -** The meta-information in the segment directory is: -** level - segment level (see below) -** idx - index within level -** - (level,idx uniquely identify a segment) -** start_block - first leaf node -** leaves_end_block - last leaf node -** end_block - last block (including interior nodes) -** root - contents of root node -** -** If the root node is a leaf node, then start_block, -** leaves_end_block, and end_block are all 0. -** -** -**** Segment merging **** -** To amortize update costs, segments are grouped into levels and -** merged in batches. Each increase in level represents exponentially -** more documents. -** -** New documents (actually, document updates) are tokenized and -** written individually (using LeafWriter) to a level 0 segment, with -** incrementing idx. When idx reaches MERGE_COUNT (default 16), all -** level 0 segments are merged into a single level 1 segment. Level 1 -** is populated like level 0, and eventually MERGE_COUNT level 1 -** segments are merged to a single level 2 segment (representing -** MERGE_COUNT^2 updates), and so on. -** -** A segment merge traverses all segments at a given level in -** parallel, performing a straightforward sorted merge. Since segment -** leaf nodes are written in to the %_segments table in order, this -** merge traverses the underlying sqlite disk structures efficiently. -** After the merge, all segment blocks from the merged level are -** deleted. -** -** MERGE_COUNT controls how often we merge segments. 16 seems to be -** somewhat of a sweet spot for insertion performance. 32 and 64 show -** very similar performance numbers to 16 on insertion, though they're -** a tiny bit slower (perhaps due to more overhead in merge-time -** sorting). 8 is about 20% slower than 16, 4 about 50% slower than -** 16, 2 about 66% slower than 16. -** -** At query time, high MERGE_COUNT increases the number of segments -** which need to be scanned and merged. For instance, with 100k docs -** inserted: -** -** MERGE_COUNT segments -** 16 25 -** 8 12 -** 4 10 -** 2 6 -** -** This appears to have only a moderate impact on queries for very -** frequent terms (which are somewhat dominated by segment merge -** costs), and infrequent and non-existent terms still seem to be fast -** even with many segments. -** -** TODO(shess) That said, it would be nice to have a better query-side -** argument for MERGE_COUNT of 16. Also, it is possible/likely that -** optimizations to things like doclist merging will swing the sweet -** spot around. + /* If control flows to this point, this must be a regular token, or + ** the end of the input. Read a regular token using the sqlite3_tokenizer + ** interface. Before doing so, figure out if there is an explicit + ** column specifier for the token. + ** + ** TODO: Strangely, it is not possible to associate a column specifier + ** with a quoted phrase, only with a single token. Not sure if this was + ** an implementation artifact or an intentional decision when fts3 was + ** first implemented. Whichever it was, this module duplicates the + ** limitation. + */ + iCol = pParse->iDefaultCol; + iColLen = 0; + for(ii=0; iinCol; ii++){ + const char *zStr = pParse->azCol[ii]; + int nStr = (int)strlen(zStr); + if( nInput>nStr && zInput[nStr]==':' + && sqlite3_strnicmp(zStr, zInput, nStr)==0 + ){ + iCol = ii; + iColLen = (int)((zInput - z) + nStr + 1); + break; + } + } + rc = getNextToken(pParse, iCol, &z[iColLen], n-iColLen, ppExpr, pnConsumed); + *pnConsumed += iColLen; + return rc; +} + +/* +** The argument is an Fts3Expr structure for a binary operator (any type +** except an FTSQUERY_PHRASE). Return an integer value representing the +** precedence of the operator. Lower values have a higher precedence (i.e. +** group more tightly). For example, in the C language, the == operator +** groups more tightly than ||, and would therefore have a higher precedence. ** +** When using the new fts3 query syntax (when SQLITE_ENABLE_FTS3_PARENTHESIS +** is defined), the order of the operators in precedence from highest to +** lowest is: ** +** NEAR +** NOT +** AND (including implicit ANDs) +** OR ** -**** Handling of deletions and updates **** -** Since we're using a segmented structure, with no docid-oriented -** index into the term index, we clearly cannot simply update the term -** index when a document is deleted or updated. For deletions, we -** write an empty doclist (varint(docid) varint(POS_END)), for updates -** we simply write the new doclist. Segment merges overwrite older -** data for a particular docid with newer data, so deletes or updates -** will eventually overtake the earlier data and knock it out. The -** query logic likewise merges doclists so that newer data knocks out -** older data. +** Note that when using the old query syntax, the OR operator has a higher +** precedence than the AND operator. +*/ +static int opPrecedence(Fts3Expr *p){ + assert( p->eType!=FTSQUERY_PHRASE ); + if( sqlite3_fts3_enable_parentheses ){ + return p->eType; + }else if( p->eType==FTSQUERY_NEAR ){ + return 1; + }else if( p->eType==FTSQUERY_OR ){ + return 2; + } + assert( p->eType==FTSQUERY_AND ); + return 3; +} + +/* +** Argument ppHead contains a pointer to the current head of a query +** expression tree being parsed. pPrev is the expression node most recently +** inserted into the tree. This function adds pNew, which is always a binary +** operator node, into the expression tree based on the relative precedence +** of pNew and the existing nodes of the tree. This may result in the head +** of the tree changing, in which case *ppHead is set to the new root node. +*/ +static void insertBinaryOperator( + Fts3Expr **ppHead, /* Pointer to the root node of a tree */ + Fts3Expr *pPrev, /* Node most recently inserted into the tree */ + Fts3Expr *pNew /* New binary node to insert into expression tree */ +){ + Fts3Expr *pSplit = pPrev; + while( pSplit->pParent && opPrecedence(pSplit->pParent)<=opPrecedence(pNew) ){ + pSplit = pSplit->pParent; + } + + if( pSplit->pParent ){ + assert( pSplit->pParent->pRight==pSplit ); + pSplit->pParent->pRight = pNew; + pNew->pParent = pSplit->pParent; + }else{ + *ppHead = pNew; + } + pNew->pLeft = pSplit; + pSplit->pParent = pNew; +} + +/* +** Parse the fts3 query expression found in buffer z, length n. This function +** returns either when the end of the buffer is reached or an unmatched +** closing bracket - ')' - is encountered. ** -** TODO(shess) Provide a VACUUM type operation to clear out all -** deletions and duplications. This would basically be a forced merge -** into a single segment. +** If successful, SQLITE_OK is returned, *ppExpr is set to point to the +** parsed form of the expression and *pnConsumed is set to the number of +** bytes read from buffer z. Otherwise, *ppExpr is set to 0 and SQLITE_NOMEM +** (out of memory error) or SQLITE_ERROR (parse error) is returned. */ +static int fts3ExprParse( + ParseContext *pParse, /* fts3 query parse context */ + const char *z, int n, /* Text of MATCH query */ + Fts3Expr **ppExpr, /* OUT: Parsed query structure */ + int *pnConsumed /* OUT: Number of bytes consumed */ +){ + Fts3Expr *pRet = 0; + Fts3Expr *pPrev = 0; + Fts3Expr *pNotBranch = 0; /* Only used in legacy parse mode */ + int nIn = n; + const char *zIn = z; + int rc = SQLITE_OK; + int isRequirePhrase = 1; -#if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) + while( rc==SQLITE_OK ){ + Fts3Expr *p = 0; + int nByte = 0; + rc = getNextNode(pParse, zIn, nIn, &p, &nByte); + if( rc==SQLITE_OK ){ + int isPhrase; -#if defined(SQLITE_ENABLE_FTS3) && !defined(SQLITE_CORE) -# define SQLITE_CORE 1 -#endif + if( !sqlite3_fts3_enable_parentheses + && p->eType==FTSQUERY_PHRASE && pParse->isNot + ){ + /* Create an implicit NOT operator. */ + Fts3Expr *pNot = fts3MallocZero(sizeof(Fts3Expr)); + if( !pNot ){ + sqlite3Fts3ExprFree(p); + rc = SQLITE_NOMEM; + goto exprparse_out; + } + pNot->eType = FTSQUERY_NOT; + pNot->pRight = p; + if( pNotBranch ){ + pNot->pLeft = pNotBranch; + } + pNotBranch = pNot; + p = pPrev; + }else{ + int eType = p->eType; + isPhrase = (eType==FTSQUERY_PHRASE || p->pLeft); + + /* The isRequirePhrase variable is set to true if a phrase or + ** an expression contained in parenthesis is required. If a + ** binary operator (AND, OR, NOT or NEAR) is encounted when + ** isRequirePhrase is set, this is a syntax error. + */ + if( !isPhrase && isRequirePhrase ){ + sqlite3Fts3ExprFree(p); + rc = SQLITE_ERROR; + goto exprparse_out; + } + + if( isPhrase && !isRequirePhrase ){ + /* Insert an implicit AND operator. */ + Fts3Expr *pAnd; + assert( pRet && pPrev ); + pAnd = fts3MallocZero(sizeof(Fts3Expr)); + if( !pAnd ){ + sqlite3Fts3ExprFree(p); + rc = SQLITE_NOMEM; + goto exprparse_out; + } + pAnd->eType = FTSQUERY_AND; + insertBinaryOperator(&pRet, pPrev, pAnd); + pPrev = pAnd; + } + + /* This test catches attempts to make either operand of a NEAR + ** operator something other than a phrase. For example, either of + ** the following: + ** + ** (bracketed expression) NEAR phrase + ** phrase NEAR (bracketed expression) + ** + ** Return an error in either case. + */ + if( pPrev && ( + (eType==FTSQUERY_NEAR && !isPhrase && pPrev->eType!=FTSQUERY_PHRASE) + || (eType!=FTSQUERY_PHRASE && isPhrase && pPrev->eType==FTSQUERY_NEAR) + )){ + sqlite3Fts3ExprFree(p); + rc = SQLITE_ERROR; + goto exprparse_out; + } + + if( isPhrase ){ + if( pRet ){ + assert( pPrev && pPrev->pLeft && pPrev->pRight==0 ); + pPrev->pRight = p; + p->pParent = pPrev; + }else{ + pRet = p; + } + }else{ + insertBinaryOperator(&pRet, pPrev, p); + } + isRequirePhrase = !isPhrase; + } + assert( nByte>0 ); + } + assert( rc!=SQLITE_OK || (nByte>0 && nByte<=nIn) ); + nIn -= nByte; + zIn += nByte; + pPrev = p; + } + + if( rc==SQLITE_DONE && pRet && isRequirePhrase ){ + rc = SQLITE_ERROR; + } + + if( rc==SQLITE_DONE ){ + rc = SQLITE_OK; + if( !sqlite3_fts3_enable_parentheses && pNotBranch ){ + if( !pRet ){ + rc = SQLITE_ERROR; + }else{ + Fts3Expr *pIter = pNotBranch; + while( pIter->pLeft ){ + pIter = pIter->pLeft; + } + pIter->pLeft = pRet; + pRet = pNotBranch; + } + } + } + *pnConsumed = n - nIn; +exprparse_out: + if( rc!=SQLITE_OK ){ + sqlite3Fts3ExprFree(pRet); + sqlite3Fts3ExprFree(pNotBranch); + pRet = 0; + } + *ppExpr = pRet; + return rc; +} -/************** Include fts3_expr.h in the middle of fts3.c ******************/ -/************** Begin file fts3_expr.h ***************************************/ /* -** 2008 Nov 28 -** -** The author disclaims copyright to this source code. In place of -** a legal notice, here is a blessing: +** Parameters z and n contain a pointer to and length of a buffer containing +** an fts3 query expression, respectively. This function attempts to parse the +** query expression and create a tree of Fts3Expr structures representing the +** parsed expression. If successful, *ppExpr is set to point to the head +** of the parsed expression tree and SQLITE_OK is returned. If an error +** occurs, either SQLITE_NOMEM (out-of-memory error) or SQLITE_ERROR (parse +** error) is returned and *ppExpr is set to 0. ** -** May you do good and not evil. -** May you find forgiveness for yourself and forgive others. -** May you share freely, never taking more than you give. +** If parameter n is a negative number, then z is assumed to point to a +** nul-terminated string and the length is determined using strlen(). ** -****************************************************************************** +** The first parameter, pTokenizer, is passed the fts3 tokenizer module to +** use to normalize query tokens while parsing the expression. The azCol[] +** array, which is assumed to contain nCol entries, should contain the names +** of each column in the target fts3 table, in order from left to right. +** Column names must be nul-terminated strings. ** +** The iDefaultCol parameter should be passed the index of the table column +** that appears on the left-hand-side of the MATCH operator (the default +** column to match against for tokens for which a column name is not explicitly +** specified as part of the query string), or -1 if tokens may by default +** match any table column. */ +SQLITE_PRIVATE int sqlite3Fts3ExprParse( + sqlite3_tokenizer *pTokenizer, /* Tokenizer module */ + int iLangid, /* Language id for tokenizer */ + char **azCol, /* Array of column names for fts3 table */ + int bFts4, /* True to allow FTS4-only syntax */ + int nCol, /* Number of entries in azCol[] */ + int iDefaultCol, /* Default column to query */ + const char *z, int n, /* Text of MATCH query */ + Fts3Expr **ppExpr /* OUT: Parsed query structure */ +){ + int nParsed; + int rc; + ParseContext sParse; + + memset(&sParse, 0, sizeof(ParseContext)); + sParse.pTokenizer = pTokenizer; + sParse.iLangid = iLangid; + sParse.azCol = (const char **)azCol; + sParse.nCol = nCol; + sParse.iDefaultCol = iDefaultCol; + sParse.bFts4 = bFts4; + if( z==0 ){ + *ppExpr = 0; + return SQLITE_OK; + } + if( n<0 ){ + n = (int)strlen(z); + } + rc = fts3ExprParse(&sParse, z, n, ppExpr, &nParsed); + + /* Check for mismatched parenthesis */ + if( rc==SQLITE_OK && sParse.nNest ){ + rc = SQLITE_ERROR; + sqlite3Fts3ExprFree(*ppExpr); + *ppExpr = 0; + } + + return rc; +} -/************** Include fts3_tokenizer.h in the middle of fts3_expr.h ********/ -/************** Begin file fts3_tokenizer.h **********************************/ /* -** 2006 July 10 -** -** The author disclaims copyright to this source code. -** -************************************************************************* -** Defines the interface to tokenizers used by fulltext-search. There -** are three basic components: -** -** sqlite3_tokenizer_module is a singleton defining the tokenizer -** interface functions. This is essentially the class structure for -** tokenizers. -** -** sqlite3_tokenizer is used to define a particular tokenizer, perhaps -** including customization information defined at creation time. -** -** sqlite3_tokenizer_cursor is generated by a tokenizer to generate -** tokens from a particular input. +** Free a parsed fts3 query expression allocated by sqlite3Fts3ExprParse(). */ -#ifndef _FTS3_TOKENIZER_H_ -#define _FTS3_TOKENIZER_H_ +SQLITE_PRIVATE void sqlite3Fts3ExprFree(Fts3Expr *p){ + if( p ){ + assert( p->eType==FTSQUERY_PHRASE || p->pPhrase==0 ); + sqlite3Fts3ExprFree(p->pLeft); + sqlite3Fts3ExprFree(p->pRight); + sqlite3Fts3EvalPhraseCleanup(p->pPhrase); + sqlite3_free(p->aMI); + sqlite3_free(p); + } +} -/* TODO(shess) Only used for SQLITE_OK and SQLITE_DONE at this time. -** If tokenizers are to be allowed to call sqlite3_*() functions, then -** we will need a way to register the API consistently. +/**************************************************************************** +***************************************************************************** +** Everything after this point is just test code. */ +#ifdef SQLITE_TEST + +/* #include */ + /* -** Structures used by the tokenizer interface. When a new tokenizer -** implementation is registered, the caller provides a pointer to -** an sqlite3_tokenizer_module containing pointers to the callback -** functions that make up an implementation. -** -** When an fts3 table is created, it passes any arguments passed to -** the tokenizer clause of the CREATE VIRTUAL TABLE statement to the -** sqlite3_tokenizer_module.xCreate() function of the requested tokenizer -** implementation. The xCreate() function in turn returns an -** sqlite3_tokenizer structure representing the specific tokenizer to -** be used for the fts3 table (customized by the tokenizer clause arguments). -** -** To tokenize an input buffer, the sqlite3_tokenizer_module.xOpen() -** method is called. It returns an sqlite3_tokenizer_cursor object -** that may be used to tokenize a specific input buffer based on -** the tokenization rules supplied by a specific sqlite3_tokenizer -** object. +** Function to query the hash-table of tokenizers (see README.tokenizers). */ -typedef struct sqlite3_tokenizer_module sqlite3_tokenizer_module; -typedef struct sqlite3_tokenizer sqlite3_tokenizer; -typedef struct sqlite3_tokenizer_cursor sqlite3_tokenizer_cursor; +static int queryTestTokenizer( + sqlite3 *db, + const char *zName, + const sqlite3_tokenizer_module **pp +){ + int rc; + sqlite3_stmt *pStmt; + const char zSql[] = "SELECT fts3_tokenizer(?)"; -struct sqlite3_tokenizer_module { + *pp = 0; + rc = sqlite3_prepare_v2(db, zSql, -1, &pStmt, 0); + if( rc!=SQLITE_OK ){ + return rc; + } - /* - ** Structure version. Should always be set to 0. - */ - int iVersion; + sqlite3_bind_text(pStmt, 1, zName, -1, SQLITE_STATIC); + if( SQLITE_ROW==sqlite3_step(pStmt) ){ + if( sqlite3_column_type(pStmt, 0)==SQLITE_BLOB ){ + memcpy((void *)pp, sqlite3_column_blob(pStmt, 0), sizeof(*pp)); + } + } - /* - ** Create a new tokenizer. The values in the argv[] array are the - ** arguments passed to the "tokenizer" clause of the CREATE VIRTUAL - ** TABLE statement that created the fts3 table. For example, if - ** the following SQL is executed: - ** - ** CREATE .. USING fts3( ... , tokenizer arg1 arg2) - ** - ** then argc is set to 2, and the argv[] array contains pointers - ** to the strings "arg1" and "arg2". - ** - ** This method should return either SQLITE_OK (0), or an SQLite error - ** code. If SQLITE_OK is returned, then *ppTokenizer should be set - ** to point at the newly created tokenizer structure. The generic - ** sqlite3_tokenizer.pModule variable should not be initialised by - ** this callback. The caller will do so. - */ - int (*xCreate)( - int argc, /* Size of argv array */ - const char *const*argv, /* Tokenizer argument strings */ - sqlite3_tokenizer **ppTokenizer /* OUT: Created tokenizer */ - ); + return sqlite3_finalize(pStmt); +} - /* - ** Destroy an existing tokenizer. The fts3 module calls this method - ** exactly once for each successful call to xCreate(). - */ - int (*xDestroy)(sqlite3_tokenizer *pTokenizer); +/* +** Return a pointer to a buffer containing a text representation of the +** expression passed as the first argument. The buffer is obtained from +** sqlite3_malloc(). It is the responsibility of the caller to use +** sqlite3_free() to release the memory. If an OOM condition is encountered, +** NULL is returned. +** +** If the second argument is not NULL, then its contents are prepended to +** the returned expression text and then freed using sqlite3_free(). +*/ +static char *exprToString(Fts3Expr *pExpr, char *zBuf){ + switch( pExpr->eType ){ + case FTSQUERY_PHRASE: { + Fts3Phrase *pPhrase = pExpr->pPhrase; + int i; + zBuf = sqlite3_mprintf( + "%zPHRASE %d 0", zBuf, pPhrase->iColumn); + for(i=0; zBuf && inToken; i++){ + zBuf = sqlite3_mprintf("%z %.*s%s", zBuf, + pPhrase->aToken[i].n, pPhrase->aToken[i].z, + (pPhrase->aToken[i].isPrefix?"+":"") + ); + } + return zBuf; + } - /* - ** Create a tokenizer cursor to tokenize an input buffer. The caller - ** is responsible for ensuring that the input buffer remains valid - ** until the cursor is closed (using the xClose() method). - */ - int (*xOpen)( - sqlite3_tokenizer *pTokenizer, /* Tokenizer object */ - const char *pInput, int nBytes, /* Input buffer */ - sqlite3_tokenizer_cursor **ppCursor /* OUT: Created tokenizer cursor */ - ); + case FTSQUERY_NEAR: + zBuf = sqlite3_mprintf("%zNEAR/%d ", zBuf, pExpr->nNear); + break; + case FTSQUERY_NOT: + zBuf = sqlite3_mprintf("%zNOT ", zBuf); + break; + case FTSQUERY_AND: + zBuf = sqlite3_mprintf("%zAND ", zBuf); + break; + case FTSQUERY_OR: + zBuf = sqlite3_mprintf("%zOR ", zBuf); + break; + } - /* - ** Destroy an existing tokenizer cursor. The fts3 module calls this - ** method exactly once for each successful call to xOpen(). - */ - int (*xClose)(sqlite3_tokenizer_cursor *pCursor); + if( zBuf ) zBuf = sqlite3_mprintf("%z{", zBuf); + if( zBuf ) zBuf = exprToString(pExpr->pLeft, zBuf); + if( zBuf ) zBuf = sqlite3_mprintf("%z} {", zBuf); - /* - ** Retrieve the next token from the tokenizer cursor pCursor. This - ** method should either return SQLITE_OK and set the values of the - ** "OUT" variables identified below, or SQLITE_DONE to indicate that - ** the end of the buffer has been reached, or an SQLite error code. - ** - ** *ppToken should be set to point at a buffer containing the - ** normalized version of the token (i.e. after any case-folding and/or - ** stemming has been performed). *pnBytes should be set to the length - ** of this buffer in bytes. The input text that generated the token is - ** identified by the byte offsets returned in *piStartOffset and - ** *piEndOffset. *piStartOffset should be set to the index of the first - ** byte of the token in the input buffer. *piEndOffset should be set - ** to the index of the first byte just past the end of the token in - ** the input buffer. - ** - ** The buffer *ppToken is set to point at is managed by the tokenizer - ** implementation. It is only required to be valid until the next call - ** to xNext() or xClose(). - */ - /* TODO(shess) current implementation requires pInput to be - ** nul-terminated. This should either be fixed, or pInput/nBytes - ** should be converted to zInput. - */ - int (*xNext)( - sqlite3_tokenizer_cursor *pCursor, /* Tokenizer cursor */ - const char **ppToken, int *pnBytes, /* OUT: Normalized text for token */ - int *piStartOffset, /* OUT: Byte offset of token in input buffer */ - int *piEndOffset, /* OUT: Byte offset of end of token in input buffer */ - int *piPosition /* OUT: Number of tokens returned before this one */ - ); -}; + if( zBuf ) zBuf = exprToString(pExpr->pRight, zBuf); + if( zBuf ) zBuf = sqlite3_mprintf("%z}", zBuf); -struct sqlite3_tokenizer { - const sqlite3_tokenizer_module *pModule; /* The module for this tokenizer */ - /* Tokenizer implementations will typically add additional fields */ -}; + return zBuf; +} -struct sqlite3_tokenizer_cursor { - sqlite3_tokenizer *pTokenizer; /* Tokenizer for this cursor. */ - /* Tokenizer implementations will typically add additional fields */ -}; +/* +** This is the implementation of a scalar SQL function used to test the +** expression parser. It should be called as follows: +** +** fts3_exprtest(, , , ...); +** +** The first argument, , is the name of the fts3 tokenizer used +** to parse the query expression (see README.tokenizers). The second argument +** is the query expression to parse. Each subsequent argument is the name +** of a column of the fts3 table that the query expression may refer to. +** For example: +** +** SELECT fts3_exprtest('simple', 'Bill col2:Bloggs', 'col1', 'col2'); +*/ +static void fts3ExprTest( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + sqlite3_tokenizer_module const *pModule = 0; + sqlite3_tokenizer *pTokenizer = 0; + int rc; + char **azCol = 0; + const char *zExpr; + int nExpr; + int nCol; + int ii; + Fts3Expr *pExpr; + char *zBuf = 0; + sqlite3 *db = sqlite3_context_db_handle(context); -#endif /* _FTS3_TOKENIZER_H_ */ + if( argc<3 ){ + sqlite3_result_error(context, + "Usage: fts3_exprtest(tokenizer, expr, col1, ...", -1 + ); + return; + } -/************** End of fts3_tokenizer.h **************************************/ -/************** Continuing where we left off in fts3_expr.h ******************/ + rc = queryTestTokenizer(db, + (const char *)sqlite3_value_text(argv[0]), &pModule); + if( rc==SQLITE_NOMEM ){ + sqlite3_result_error_nomem(context); + goto exprtest_out; + }else if( !pModule ){ + sqlite3_result_error(context, "No such tokenizer module", -1); + goto exprtest_out; + } -/* -** The following describes the syntax supported by the fts3 MATCH -** operator in a similar format to that used by the lemon parser -** generator. This module does not use actually lemon, it uses a -** custom parser. -** -** query ::= andexpr (OR andexpr)*. -** -** andexpr ::= notexpr (AND? notexpr)*. -** -** notexpr ::= nearexpr (NOT nearexpr|-TOKEN)*. -** notexpr ::= LP query RP. -** -** nearexpr ::= phrase (NEAR distance_opt nearexpr)*. -** -** distance_opt ::= . -** distance_opt ::= / INTEGER. -** -** phrase ::= TOKEN. -** phrase ::= COLUMN:TOKEN. -** phrase ::= "TOKEN TOKEN TOKEN...". -*/ + rc = pModule->xCreate(0, 0, &pTokenizer); + assert( rc==SQLITE_NOMEM || rc==SQLITE_OK ); + if( rc==SQLITE_NOMEM ){ + sqlite3_result_error_nomem(context); + goto exprtest_out; + } + pTokenizer->pModule = pModule; -typedef struct Fts3Expr Fts3Expr; -typedef struct Fts3Phrase Fts3Phrase; + zExpr = (const char *)sqlite3_value_text(argv[1]); + nExpr = sqlite3_value_bytes(argv[1]); + nCol = argc-2; + azCol = (char **)sqlite3_malloc(nCol*sizeof(char *)); + if( !azCol ){ + sqlite3_result_error_nomem(context); + goto exprtest_out; + } + for(ii=0; iipLeft==this or pParent->pRight==this */ - Fts3Expr *pLeft; /* Left operand */ - Fts3Expr *pRight; /* Right operand */ - Fts3Phrase *pPhrase; /* Valid if eType==FTSQUERY_PHRASE */ -}; + sqlite3Fts3ExprFree(pExpr); -SQLITE_PRIVATE int sqlite3Fts3ExprParse(sqlite3_tokenizer *, char **, int, int, - const char *, int, Fts3Expr **); -SQLITE_PRIVATE void sqlite3Fts3ExprFree(Fts3Expr *); +exprtest_out: + if( pModule && pTokenizer ){ + rc = pModule->xDestroy(pTokenizer); + } + sqlite3_free(azCol); +} /* -** Candidate values for Fts3Query.eType. Note that the order of the first -** four values is in order of precedence when parsing expressions. For -** example, the following: -** -** "a OR b AND c NOT d NEAR e" -** -** is equivalent to: -** -** "a OR (b AND (c NOT (d NEAR e)))" +** Register the query expression parser test function fts3_exprtest() +** with database connection db. */ -#define FTSQUERY_NEAR 1 -#define FTSQUERY_NOT 2 -#define FTSQUERY_AND 3 -#define FTSQUERY_OR 4 -#define FTSQUERY_PHRASE 5 +SQLITE_PRIVATE int sqlite3Fts3ExprInitTestInterface(sqlite3* db){ + return sqlite3_create_function( + db, "fts3_exprtest", -1, SQLITE_UTF8, 0, fts3ExprTest, 0, 0 + ); +} -#ifdef SQLITE_TEST -SQLITE_PRIVATE void sqlite3Fts3ExprInitTestInterface(sqlite3 *db); #endif +#endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) */ -/************** End of fts3_expr.h *******************************************/ -/************** Continuing where we left off in fts3.c ***********************/ -/************** Include fts3_hash.h in the middle of fts3.c ******************/ -/************** Begin file fts3_hash.h ***************************************/ +/************** End of fts3_expr.c *******************************************/ +/************** Begin file fts3_hash.c ***************************************/ /* ** 2001 September 22 ** @@ -93779,8108 +124706,7148 @@ SQLITE_PRIVATE void sqlite3Fts3ExprInitTestInterface(sqlite3 *db); ** May you share freely, never taking more than you give. ** ************************************************************************* -** This is the header file for the generic hash-table implemenation -** used in SQLite. We've modified it slightly to serve as a standalone -** hash table implementation for the full-text indexing module. +** This is the implementation of generic hash-tables used in SQLite. +** We've modified it slightly to serve as a standalone hash table +** implementation for the full-text indexing module. +*/ + +/* +** The code in this file is only compiled if: +** +** * The FTS3 module is being built as an extension +** (in which case SQLITE_CORE is not defined), or ** +** * The FTS3 module is being built into the core of +** SQLite (in which case SQLITE_ENABLE_FTS3 is defined). */ -#ifndef _FTS3_HASH_H_ -#define _FTS3_HASH_H_ +#if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) -/* Forward declarations of structures. */ -typedef struct fts3Hash fts3Hash; -typedef struct fts3HashElem fts3HashElem; +/* #include */ +/* #include */ +/* #include */ -/* A complete hash table is an instance of the following structure. -** The internals of this structure are intended to be opaque -- client -** code should not attempt to access or modify the fields of this structure -** directly. Change this structure only by using the routines below. -** However, many of the "procedures" and "functions" for modifying and -** accessing this structure are really macros, so we can't really make -** this structure opaque. + +/* +** Malloc and Free functions */ -struct fts3Hash { - char keyClass; /* HASH_INT, _POINTER, _STRING, _BINARY */ - char copyKey; /* True if copy of key made on insert */ - int count; /* Number of entries in this table */ - fts3HashElem *first; /* The first element of the array */ - int htsize; /* Number of buckets in the hash table */ - struct _fts3ht { /* the hash table */ - int count; /* Number of entries with this hash */ - fts3HashElem *chain; /* Pointer to first entry with this hash */ - } *ht; -}; +static void *fts3HashMalloc(int n){ + void *p = sqlite3_malloc(n); + if( p ){ + memset(p, 0, n); + } + return p; +} +static void fts3HashFree(void *p){ + sqlite3_free(p); +} -/* Each element in the hash table is an instance of the following -** structure. All elements are stored on a single doubly-linked list. +/* Turn bulk memory into a hash table object by initializing the +** fields of the Hash structure. ** -** Again, this structure is intended to be opaque, but it can't really -** be opaque because it is used by macros. +** "pNew" is a pointer to the hash table that is to be initialized. +** keyClass is one of the constants +** FTS3_HASH_BINARY or FTS3_HASH_STRING. The value of keyClass +** determines what kind of key the hash table will use. "copyKey" is +** true if the hash table should make its own private copy of keys and +** false if it should just use the supplied pointer. */ -struct fts3HashElem { - fts3HashElem *next, *prev; /* Next and previous elements in the table */ - void *data; /* Data associated with this element */ - void *pKey; int nKey; /* Key associated with this element */ -}; +SQLITE_PRIVATE void sqlite3Fts3HashInit(Fts3Hash *pNew, char keyClass, char copyKey){ + assert( pNew!=0 ); + assert( keyClass>=FTS3_HASH_STRING && keyClass<=FTS3_HASH_BINARY ); + pNew->keyClass = keyClass; + pNew->copyKey = copyKey; + pNew->first = 0; + pNew->count = 0; + pNew->htsize = 0; + pNew->ht = 0; +} -/* -** There are 2 different modes of operation for a hash table: -** -** FTS3_HASH_STRING pKey points to a string that is nKey bytes long -** (including the null-terminator, if any). Case -** is respected in comparisons. -** -** FTS3_HASH_BINARY pKey points to binary data nKey bytes long. -** memcmp() is used to compare keys. -** -** A copy of the key is made if the copyKey parameter to fts3HashInit is 1. +/* Remove all entries from a hash table. Reclaim all memory. +** Call this routine to delete a hash table or to reset a hash table +** to the empty state. */ -#define FTS3_HASH_STRING 1 -#define FTS3_HASH_BINARY 2 +SQLITE_PRIVATE void sqlite3Fts3HashClear(Fts3Hash *pH){ + Fts3HashElem *elem; /* For looping over all elements of the table */ + + assert( pH!=0 ); + elem = pH->first; + pH->first = 0; + fts3HashFree(pH->ht); + pH->ht = 0; + pH->htsize = 0; + while( elem ){ + Fts3HashElem *next_elem = elem->next; + if( pH->copyKey && elem->pKey ){ + fts3HashFree(elem->pKey); + } + fts3HashFree(elem); + elem = next_elem; + } + pH->count = 0; +} /* -** Access routines. To delete, insert a NULL pointer. +** Hash and comparison functions when the mode is FTS3_HASH_STRING */ -SQLITE_PRIVATE void sqlite3Fts3HashInit(fts3Hash*, int keytype, int copyKey); -SQLITE_PRIVATE void *sqlite3Fts3HashInsert(fts3Hash*, const void *pKey, int nKey, void *pData); -SQLITE_PRIVATE void *sqlite3Fts3HashFind(const fts3Hash*, const void *pKey, int nKey); -SQLITE_PRIVATE void sqlite3Fts3HashClear(fts3Hash*); +static int fts3StrHash(const void *pKey, int nKey){ + const char *z = (const char *)pKey; + int h = 0; + if( nKey<=0 ) nKey = (int) strlen(z); + while( nKey > 0 ){ + h = (h<<3) ^ h ^ *z++; + nKey--; + } + return h & 0x7fffffff; +} +static int fts3StrCompare(const void *pKey1, int n1, const void *pKey2, int n2){ + if( n1!=n2 ) return 1; + return strncmp((const char*)pKey1,(const char*)pKey2,n1); +} /* -** Shorthand for the functions above +** Hash and comparison functions when the mode is FTS3_HASH_BINARY */ -#define fts3HashInit sqlite3Fts3HashInit -#define fts3HashInsert sqlite3Fts3HashInsert -#define fts3HashFind sqlite3Fts3HashFind -#define fts3HashClear sqlite3Fts3HashClear +static int fts3BinHash(const void *pKey, int nKey){ + int h = 0; + const char *z = (const char *)pKey; + while( nKey-- > 0 ){ + h = (h<<3) ^ h ^ *(z++); + } + return h & 0x7fffffff; +} +static int fts3BinCompare(const void *pKey1, int n1, const void *pKey2, int n2){ + if( n1!=n2 ) return 1; + return memcmp(pKey1,pKey2,n1); +} /* -** Macros for looping over all elements of a hash table. The idiom is -** like this: +** Return a pointer to the appropriate hash function given the key class. ** -** fts3Hash h; -** fts3HashElem *p; -** ... -** for(p=fts3HashFirst(&h); p; p=fts3HashNext(p)){ -** SomeStructure *pData = fts3HashData(p); -** // do something with pData -** } +** The C syntax in this function definition may be unfamilar to some +** programmers, so we provide the following additional explanation: +** +** The name of the function is "ftsHashFunction". The function takes a +** single parameter "keyClass". The return value of ftsHashFunction() +** is a pointer to another function. Specifically, the return value +** of ftsHashFunction() is a pointer to a function that takes two parameters +** with types "const void*" and "int" and returns an "int". */ -#define fts3HashFirst(H) ((H)->first) -#define fts3HashNext(E) ((E)->next) -#define fts3HashData(E) ((E)->data) -#define fts3HashKey(E) ((E)->pKey) -#define fts3HashKeysize(E) ((E)->nKey) +static int (*ftsHashFunction(int keyClass))(const void*,int){ + if( keyClass==FTS3_HASH_STRING ){ + return &fts3StrHash; + }else{ + assert( keyClass==FTS3_HASH_BINARY ); + return &fts3BinHash; + } +} /* -** Number of entries in a hash table +** Return a pointer to the appropriate hash function given the key class. +** +** For help in interpreted the obscure C code in the function definition, +** see the header comment on the previous function. */ -#define fts3HashCount(H) ((H)->count) - -#endif /* _FTS3_HASH_H_ */ +static int (*ftsCompareFunction(int keyClass))(const void*,int,const void*,int){ + if( keyClass==FTS3_HASH_STRING ){ + return &fts3StrCompare; + }else{ + assert( keyClass==FTS3_HASH_BINARY ); + return &fts3BinCompare; + } +} -/************** End of fts3_hash.h *******************************************/ -/************** Continuing where we left off in fts3.c ***********************/ -#ifndef SQLITE_CORE - SQLITE_EXTENSION_INIT1 -#endif +/* Link an element into the hash table +*/ +static void fts3HashInsertElement( + Fts3Hash *pH, /* The complete hash table */ + struct _fts3ht *pEntry, /* The entry into which pNew is inserted */ + Fts3HashElem *pNew /* The element to be inserted */ +){ + Fts3HashElem *pHead; /* First element already in pEntry */ + pHead = pEntry->chain; + if( pHead ){ + pNew->next = pHead; + pNew->prev = pHead->prev; + if( pHead->prev ){ pHead->prev->next = pNew; } + else { pH->first = pNew; } + pHead->prev = pNew; + }else{ + pNew->next = pH->first; + if( pH->first ){ pH->first->prev = pNew; } + pNew->prev = 0; + pH->first = pNew; + } + pEntry->count++; + pEntry->chain = pNew; +} -/* TODO(shess) MAN, this thing needs some refactoring. At minimum, it -** would be nice to order the file better, perhaps something along the -** lines of: -** -** - utility functions -** - table setup functions -** - table update functions -** - table query functions +/* Resize the hash table so that it cantains "new_size" buckets. +** "new_size" must be a power of 2. The hash table might fail +** to resize if sqliteMalloc() fails. ** -** Put the query functions last because they're likely to reference -** typedefs or functions from the table update section. +** Return non-zero if a memory allocation error occurs. */ +static int fts3Rehash(Fts3Hash *pH, int new_size){ + struct _fts3ht *new_ht; /* The new hash table */ + Fts3HashElem *elem, *next_elem; /* For looping over existing elements */ + int (*xHash)(const void*,int); /* The hash function */ -#if 0 -# define FTSTRACE(A) printf A; fflush(stdout) -#else -# define FTSTRACE(A) -#endif + assert( (new_size & (new_size-1))==0 ); + new_ht = (struct _fts3ht *)fts3HashMalloc( new_size*sizeof(struct _fts3ht) ); + if( new_ht==0 ) return 1; + fts3HashFree(pH->ht); + pH->ht = new_ht; + pH->htsize = new_size; + xHash = ftsHashFunction(pH->keyClass); + for(elem=pH->first, pH->first=0; elem; elem = next_elem){ + int h = (*xHash)(elem->pKey, elem->nKey) & (new_size-1); + next_elem = elem->next; + fts3HashInsertElement(pH, &new_ht[h], elem); + } + return 0; +} -/* It is not safe to call isspace(), tolower(), or isalnum() on -** hi-bit-set characters. This is the same solution used in the -** tokenizer. +/* This function (for internal use only) locates an element in an +** hash table that matches the given key. The hash for this key has +** already been computed and is passed as the 4th parameter. */ -/* TODO(shess) The snippet-generation code should be using the -** tokenizer-generated tokens rather than doing its own local -** tokenization. +static Fts3HashElem *fts3FindElementByHash( + const Fts3Hash *pH, /* The pH to be searched */ + const void *pKey, /* The key we are searching for */ + int nKey, + int h /* The hash for this key. */ +){ + Fts3HashElem *elem; /* Used to loop thru the element list */ + int count; /* Number of elements left to test */ + int (*xCompare)(const void*,int,const void*,int); /* comparison function */ + + if( pH->ht ){ + struct _fts3ht *pEntry = &pH->ht[h]; + elem = pEntry->chain; + count = pEntry->count; + xCompare = ftsCompareFunction(pH->keyClass); + while( count-- && elem ){ + if( (*xCompare)(elem->pKey,elem->nKey,pKey,nKey)==0 ){ + return elem; + } + elem = elem->next; + } + } + return 0; +} + +/* Remove a single entry from the hash table given a pointer to that +** element and a hash on the element's key. */ -/* TODO(shess) Is __isascii() a portable version of (c&0x80)==0? */ -static int safe_isspace(char c){ - return (c&0x80)==0 ? isspace(c) : 0; +static void fts3RemoveElementByHash( + Fts3Hash *pH, /* The pH containing "elem" */ + Fts3HashElem* elem, /* The element to be removed from the pH */ + int h /* Hash value for the element */ +){ + struct _fts3ht *pEntry; + if( elem->prev ){ + elem->prev->next = elem->next; + }else{ + pH->first = elem->next; + } + if( elem->next ){ + elem->next->prev = elem->prev; + } + pEntry = &pH->ht[h]; + if( pEntry->chain==elem ){ + pEntry->chain = elem->next; + } + pEntry->count--; + if( pEntry->count<=0 ){ + pEntry->chain = 0; + } + if( pH->copyKey && elem->pKey ){ + fts3HashFree(elem->pKey); + } + fts3HashFree( elem ); + pH->count--; + if( pH->count<=0 ){ + assert( pH->first==0 ); + assert( pH->count==0 ); + fts3HashClear(pH); + } +} + +SQLITE_PRIVATE Fts3HashElem *sqlite3Fts3HashFindElem( + const Fts3Hash *pH, + const void *pKey, + int nKey +){ + int h; /* A hash on key */ + int (*xHash)(const void*,int); /* The hash function */ + + if( pH==0 || pH->ht==0 ) return 0; + xHash = ftsHashFunction(pH->keyClass); + assert( xHash!=0 ); + h = (*xHash)(pKey,nKey); + assert( (pH->htsize & (pH->htsize-1))==0 ); + return fts3FindElementByHash(pH,pKey,nKey, h & (pH->htsize-1)); } -static int safe_tolower(char c){ - return (c&0x80)==0 ? tolower(c) : c; + +/* +** Attempt to locate an element of the hash table pH with a key +** that matches pKey,nKey. Return the data for this element if it is +** found, or NULL if there is no match. +*/ +SQLITE_PRIVATE void *sqlite3Fts3HashFind(const Fts3Hash *pH, const void *pKey, int nKey){ + Fts3HashElem *pElem; /* The element that matches key (if any) */ + + pElem = sqlite3Fts3HashFindElem(pH, pKey, nKey); + return pElem ? pElem->data : 0; } -static int safe_isalnum(char c){ - return (c&0x80)==0 ? isalnum(c) : 0; + +/* Insert an element into the hash table pH. The key is pKey,nKey +** and the data is "data". +** +** If no element exists with a matching key, then a new +** element is created. A copy of the key is made if the copyKey +** flag is set. NULL is returned. +** +** If another element already exists with the same key, then the +** new data replaces the old data and the old data is returned. +** The key is not copied in this instance. If a malloc fails, then +** the new data is returned and the hash table is unchanged. +** +** If the "data" parameter to this function is NULL, then the +** element corresponding to "key" is removed from the hash table. +*/ +SQLITE_PRIVATE void *sqlite3Fts3HashInsert( + Fts3Hash *pH, /* The hash table to insert into */ + const void *pKey, /* The key */ + int nKey, /* Number of bytes in the key */ + void *data /* The data */ +){ + int hraw; /* Raw hash value of the key */ + int h; /* the hash of the key modulo hash table size */ + Fts3HashElem *elem; /* Used to loop thru the element list */ + Fts3HashElem *new_elem; /* New element added to the pH */ + int (*xHash)(const void*,int); /* The hash function */ + + assert( pH!=0 ); + xHash = ftsHashFunction(pH->keyClass); + assert( xHash!=0 ); + hraw = (*xHash)(pKey, nKey); + assert( (pH->htsize & (pH->htsize-1))==0 ); + h = hraw & (pH->htsize-1); + elem = fts3FindElementByHash(pH,pKey,nKey,h); + if( elem ){ + void *old_data = elem->data; + if( data==0 ){ + fts3RemoveElementByHash(pH,elem,h); + }else{ + elem->data = data; + } + return old_data; + } + if( data==0 ) return 0; + if( (pH->htsize==0 && fts3Rehash(pH,8)) + || (pH->count>=pH->htsize && fts3Rehash(pH, pH->htsize*2)) + ){ + pH->count = 0; + return data; + } + assert( pH->htsize>0 ); + new_elem = (Fts3HashElem*)fts3HashMalloc( sizeof(Fts3HashElem) ); + if( new_elem==0 ) return data; + if( pH->copyKey && pKey!=0 ){ + new_elem->pKey = fts3HashMalloc( nKey ); + if( new_elem->pKey==0 ){ + fts3HashFree(new_elem); + return data; + } + memcpy((void*)new_elem->pKey, pKey, nKey); + }else{ + new_elem->pKey = (void*)pKey; + } + new_elem->nKey = nKey; + pH->count++; + assert( pH->htsize>0 ); + assert( (pH->htsize & (pH->htsize-1))==0 ); + h = hraw & (pH->htsize-1); + fts3HashInsertElement(pH, &pH->ht[h], new_elem); + new_elem->data = data; + return 0; } -typedef enum DocListType { - DL_DOCIDS, /* docids only */ - DL_POSITIONS, /* docids + positions */ - DL_POSITIONS_OFFSETS /* docids + positions + offsets */ -} DocListType; +#endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) */ +/************** End of fts3_hash.c *******************************************/ +/************** Begin file fts3_porter.c *************************************/ /* -** By default, only positions and not offsets are stored in the doclists. -** To change this so that offsets are stored too, compile with +** 2006 September 30 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: ** -** -DDL_DEFAULT=DL_POSITIONS_OFFSETS +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. ** -** If DL_DEFAULT is set to DL_DOCIDS, your table can only be inserted -** into (no deletes or updates). +************************************************************************* +** Implementation of the full-text-search tokenizer that implements +** a Porter stemmer. */ -#ifndef DL_DEFAULT -# define DL_DEFAULT DL_POSITIONS -#endif - -enum { - POS_END = 0, /* end of this position list */ - POS_COLUMN, /* followed by new column number */ - POS_BASE -}; -/* MERGE_COUNT controls how often we merge segments (see comment at -** top of file). +/* +** The code in this file is only compiled if: +** +** * The FTS3 module is being built as an extension +** (in which case SQLITE_CORE is not defined), or +** +** * The FTS3 module is being built into the core of +** SQLite (in which case SQLITE_ENABLE_FTS3 is defined). */ -#define MERGE_COUNT 16 +#if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) -/* utility functions */ +/* #include */ +/* #include */ +/* #include */ +/* #include */ -/* CLEAR() and SCRAMBLE() abstract memset() on a pointer to a single -** record to prevent errors of the form: -** -** my_function(SomeType *b){ -** memset(b, '\0', sizeof(b)); // sizeof(b)!=sizeof(*b) -** } + +/* +** Class derived from sqlite3_tokenizer +*/ +typedef struct porter_tokenizer { + sqlite3_tokenizer base; /* Base class */ +} porter_tokenizer; + +/* +** Class derived from sqlite3_tokenizer_cursor */ -/* TODO(shess) Obvious candidates for a header file. */ -#define CLEAR(b) memset(b, '\0', sizeof(*(b))) +typedef struct porter_tokenizer_cursor { + sqlite3_tokenizer_cursor base; + const char *zInput; /* input we are tokenizing */ + int nInput; /* size of the input */ + int iOffset; /* current position in zInput */ + int iToken; /* index of next token to be returned */ + char *zToken; /* storage for current token */ + int nAllocated; /* space allocated to zToken buffer */ +} porter_tokenizer_cursor; -#ifndef NDEBUG -# define SCRAMBLE(b) memset(b, 0x55, sizeof(*(b))) -#else -# define SCRAMBLE(b) -#endif -/* We may need up to VARINT_MAX bytes to store an encoded 64-bit integer. */ -#define VARINT_MAX 10 +/* +** Create a new tokenizer instance. +*/ +static int porterCreate( + int argc, const char * const *argv, + sqlite3_tokenizer **ppTokenizer +){ + porter_tokenizer *t; -/* Write a 64-bit variable-length integer to memory starting at p[0]. - * The length of data written will be between 1 and VARINT_MAX bytes. - * The number of bytes written is returned. */ -static int fts3PutVarint(char *p, sqlite_int64 v){ - unsigned char *q = (unsigned char *) p; - sqlite_uint64 vu = v; - do{ - *q++ = (unsigned char) ((vu & 0x7f) | 0x80); - vu >>= 7; - }while( vu!=0 ); - q[-1] &= 0x7f; /* turn off high bit in final byte */ - assert( q - (unsigned char *)p <= VARINT_MAX ); - return (int) (q - (unsigned char *)p); -} + UNUSED_PARAMETER(argc); + UNUSED_PARAMETER(argv); -/* Read a 64-bit variable-length integer from memory starting at p[0]. - * Return the number of bytes read, or 0 on error. - * The value is stored in *v. */ -static int fts3GetVarint(const char *p, sqlite_int64 *v){ - const unsigned char *q = (const unsigned char *) p; - sqlite_uint64 x = 0, y = 1; - while( (*q & 0x80) == 0x80 ){ - x += y * (*q++ & 0x7f); - y <<= 7; - if( q - (unsigned char *)p >= VARINT_MAX ){ /* bad data */ - assert( 0 ); - return 0; - } - } - x += y * (*q++); - *v = (sqlite_int64) x; - return (int) (q - (unsigned char *)p); + t = (porter_tokenizer *) sqlite3_malloc(sizeof(*t)); + if( t==NULL ) return SQLITE_NOMEM; + memset(t, 0, sizeof(*t)); + *ppTokenizer = &t->base; + return SQLITE_OK; } -static int fts3GetVarint32(const char *p, int *pi){ - sqlite_int64 i; - int ret = fts3GetVarint(p, &i); - *pi = (int) i; - assert( *pi==i ); - return ret; +/* +** Destroy a tokenizer +*/ +static int porterDestroy(sqlite3_tokenizer *pTokenizer){ + sqlite3_free(pTokenizer); + return SQLITE_OK; } -/*******************************************************************/ -/* DataBuffer is used to collect data into a buffer in piecemeal -** fashion. It implements the usual distinction between amount of -** data currently stored (nData) and buffer capacity (nCapacity). -** -** dataBufferInit - create a buffer with given initial capacity. -** dataBufferReset - forget buffer's data, retaining capacity. -** dataBufferDestroy - free buffer's data. -** dataBufferSwap - swap contents of two buffers. -** dataBufferExpand - expand capacity without adding data. -** dataBufferAppend - append data. -** dataBufferAppend2 - append two pieces of data at once. -** dataBufferReplace - replace buffer's data. +/* +** Prepare to begin tokenizing a particular string. The input +** string to be tokenized is zInput[0..nInput-1]. A cursor +** used to incrementally tokenize this string is returned in +** *ppCursor. */ -typedef struct DataBuffer { - char *pData; /* Pointer to malloc'ed buffer. */ - int nCapacity; /* Size of pData buffer. */ - int nData; /* End of data loaded into pData. */ -} DataBuffer; - -static void dataBufferInit(DataBuffer *pBuffer, int nCapacity){ - assert( nCapacity>=0 ); - pBuffer->nData = 0; - pBuffer->nCapacity = nCapacity; - pBuffer->pData = nCapacity==0 ? NULL : sqlite3_malloc(nCapacity); -} -static void dataBufferReset(DataBuffer *pBuffer){ - pBuffer->nData = 0; -} -static void dataBufferDestroy(DataBuffer *pBuffer){ - if( pBuffer->pData!=NULL ) sqlite3_free(pBuffer->pData); - SCRAMBLE(pBuffer); -} -static void dataBufferSwap(DataBuffer *pBuffer1, DataBuffer *pBuffer2){ - DataBuffer tmp = *pBuffer1; - *pBuffer1 = *pBuffer2; - *pBuffer2 = tmp; -} -static void dataBufferExpand(DataBuffer *pBuffer, int nAddCapacity){ - assert( nAddCapacity>0 ); - /* TODO(shess) Consider expanding more aggressively. Note that the - ** underlying malloc implementation may take care of such things for - ** us already. - */ - if( pBuffer->nData+nAddCapacity>pBuffer->nCapacity ){ - pBuffer->nCapacity = pBuffer->nData+nAddCapacity; - pBuffer->pData = sqlite3_realloc(pBuffer->pData, pBuffer->nCapacity); - } -} -static void dataBufferAppend(DataBuffer *pBuffer, - const char *pSource, int nSource){ - assert( nSource>0 && pSource!=NULL ); - dataBufferExpand(pBuffer, nSource); - memcpy(pBuffer->pData+pBuffer->nData, pSource, nSource); - pBuffer->nData += nSource; -} -static void dataBufferAppend2(DataBuffer *pBuffer, - const char *pSource1, int nSource1, - const char *pSource2, int nSource2){ - assert( nSource1>0 && pSource1!=NULL ); - assert( nSource2>0 && pSource2!=NULL ); - dataBufferExpand(pBuffer, nSource1+nSource2); - memcpy(pBuffer->pData+pBuffer->nData, pSource1, nSource1); - memcpy(pBuffer->pData+pBuffer->nData+nSource1, pSource2, nSource2); - pBuffer->nData += nSource1+nSource2; -} -static void dataBufferReplace(DataBuffer *pBuffer, - const char *pSource, int nSource){ - dataBufferReset(pBuffer); - dataBufferAppend(pBuffer, pSource, nSource); -} +static int porterOpen( + sqlite3_tokenizer *pTokenizer, /* The tokenizer */ + const char *zInput, int nInput, /* String to be tokenized */ + sqlite3_tokenizer_cursor **ppCursor /* OUT: Tokenization cursor */ +){ + porter_tokenizer_cursor *c; -/* StringBuffer is a null-terminated version of DataBuffer. */ -typedef struct StringBuffer { - DataBuffer b; /* Includes null terminator. */ -} StringBuffer; + UNUSED_PARAMETER(pTokenizer); -static void initStringBuffer(StringBuffer *sb){ - dataBufferInit(&sb->b, 100); - dataBufferReplace(&sb->b, "", 1); -} -static int stringBufferLength(StringBuffer *sb){ - return sb->b.nData-1; -} -static char *stringBufferData(StringBuffer *sb){ - return sb->b.pData; -} -static void stringBufferDestroy(StringBuffer *sb){ - dataBufferDestroy(&sb->b); -} + c = (porter_tokenizer_cursor *) sqlite3_malloc(sizeof(*c)); + if( c==NULL ) return SQLITE_NOMEM; -static void nappend(StringBuffer *sb, const char *zFrom, int nFrom){ - assert( sb->b.nData>0 ); - if( nFrom>0 ){ - sb->b.nData--; - dataBufferAppend2(&sb->b, zFrom, nFrom, "", 1); - } -} -static void append(StringBuffer *sb, const char *zFrom){ - nappend(sb, zFrom, strlen(zFrom)); -} - -/* Append a list of strings separated by commas. */ -static void appendList(StringBuffer *sb, int nString, char **azString){ - int i; - for(i=0; i0 ) append(sb, ", "); - append(sb, azString[i]); + c->zInput = zInput; + if( zInput==0 ){ + c->nInput = 0; + }else if( nInput<0 ){ + c->nInput = (int)strlen(zInput); + }else{ + c->nInput = nInput; } -} + c->iOffset = 0; /* start tokenizing at the beginning */ + c->iToken = 0; + c->zToken = NULL; /* no space allocated, yet. */ + c->nAllocated = 0; -static int endsInWhiteSpace(StringBuffer *p){ - return stringBufferLength(p)>0 && - safe_isspace(stringBufferData(p)[stringBufferLength(p)-1]); + *ppCursor = &c->base; + return SQLITE_OK; } -/* If the StringBuffer ends in something other than white space, add a -** single space character to the end. +/* +** Close a tokenization cursor previously opened by a call to +** porterOpen() above. */ -static void appendWhiteSpace(StringBuffer *p){ - if( stringBufferLength(p)==0 ) return; - if( !endsInWhiteSpace(p) ) append(p, " "); +static int porterClose(sqlite3_tokenizer_cursor *pCursor){ + porter_tokenizer_cursor *c = (porter_tokenizer_cursor *) pCursor; + sqlite3_free(c->zToken); + sqlite3_free(c); + return SQLITE_OK; } +/* +** Vowel or consonant +*/ +static const char cType[] = { + 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, + 1, 1, 1, 2, 1 +}; -/* Remove white space from the end of the StringBuffer */ -static void trimWhiteSpace(StringBuffer *p){ - while( endsInWhiteSpace(p) ){ - p->b.pData[--p->b.nData-1] = '\0'; - } +/* +** isConsonant() and isVowel() determine if their first character in +** the string they point to is a consonant or a vowel, according +** to Porter ruls. +** +** A consonate is any letter other than 'a', 'e', 'i', 'o', or 'u'. +** 'Y' is a consonant unless it follows another consonant, +** in which case it is a vowel. +** +** In these routine, the letters are in reverse order. So the 'y' rule +** is that 'y' is a consonant unless it is followed by another +** consonent. +*/ +static int isVowel(const char*); +static int isConsonant(const char *z){ + int j; + char x = *z; + if( x==0 ) return 0; + assert( x>='a' && x<='z' ); + j = cType[x-'a']; + if( j<2 ) return j; + return z[1]==0 || isVowel(z + 1); +} +static int isVowel(const char *z){ + int j; + char x = *z; + if( x==0 ) return 0; + assert( x>='a' && x<='z' ); + j = cType[x-'a']; + if( j<2 ) return 1-j; + return isConsonant(z + 1); } -/*******************************************************************/ -/* DLReader is used to read document elements from a doclist. The -** current docid is cached, so dlrDocid() is fast. DLReader does not -** own the doclist buffer. +/* +** Let any sequence of one or more vowels be represented by V and let +** C be sequence of one or more consonants. Then every word can be +** represented as: ** -** dlrAtEnd - true if there's no more data to read. -** dlrDocid - docid of current document. -** dlrDocData - doclist data for current document (including docid). -** dlrDocDataBytes - length of same. -** dlrAllDataBytes - length of all remaining data. -** dlrPosData - position data for current document. -** dlrPosDataLen - length of pos data for current document (incl POS_END). -** dlrStep - step to current document. -** dlrInit - initial for doclist of given type against given data. -** dlrDestroy - clean up. +** [C] (VC){m} [V] +** +** In prose: A word is an optional consonant followed by zero or +** vowel-consonant pairs followed by an optional vowel. "m" is the +** number of vowel consonant pairs. This routine computes the value +** of m for the first i bytes of a word. ** -** Expected usage is something like: +** Return true if the m-value for z is 1 or more. In other words, +** return true if z contains at least one vowel that is followed +** by a consonant. ** -** DLReader reader; -** dlrInit(&reader, pData, nData); -** while( !dlrAtEnd(&reader) ){ -** // calls to dlrDocid() and kin. -** dlrStep(&reader); -** } -** dlrDestroy(&reader); +** In this routine z[] is in reverse order. So we are really looking +** for an instance of of a consonant followed by a vowel. */ -typedef struct DLReader { - DocListType iType; - const char *pData; - int nData; - - sqlite_int64 iDocid; - int nElement; -} DLReader; - -static int dlrAtEnd(DLReader *pReader){ - assert( pReader->nData>=0 ); - return pReader->nData==0; -} -static sqlite_int64 dlrDocid(DLReader *pReader){ - assert( !dlrAtEnd(pReader) ); - return pReader->iDocid; -} -static const char *dlrDocData(DLReader *pReader){ - assert( !dlrAtEnd(pReader) ); - return pReader->pData; -} -static int dlrDocDataBytes(DLReader *pReader){ - assert( !dlrAtEnd(pReader) ); - return pReader->nElement; -} -static int dlrAllDataBytes(DLReader *pReader){ - assert( !dlrAtEnd(pReader) ); - return pReader->nData; -} -/* TODO(shess) Consider adding a field to track iDocid varint length -** to make these two functions faster. This might matter (a tiny bit) -** for queries. -*/ -static const char *dlrPosData(DLReader *pReader){ - sqlite_int64 iDummy; - int n = fts3GetVarint(pReader->pData, &iDummy); - assert( !dlrAtEnd(pReader) ); - return pReader->pData+n; -} -static int dlrPosDataLen(DLReader *pReader){ - sqlite_int64 iDummy; - int n = fts3GetVarint(pReader->pData, &iDummy); - assert( !dlrAtEnd(pReader) ); - return pReader->nElement-n; -} -static void dlrStep(DLReader *pReader){ - assert( !dlrAtEnd(pReader) ); - - /* Skip past current doclist element. */ - assert( pReader->nElement<=pReader->nData ); - pReader->pData += pReader->nElement; - pReader->nData -= pReader->nElement; - - /* If there is more data, read the next doclist element. */ - if( pReader->nData!=0 ){ - sqlite_int64 iDocidDelta; - int iDummy, n = fts3GetVarint(pReader->pData, &iDocidDelta); - pReader->iDocid += iDocidDelta; - if( pReader->iType>=DL_POSITIONS ){ - assert( nnData ); - while( 1 ){ - n += fts3GetVarint32(pReader->pData+n, &iDummy); - assert( n<=pReader->nData ); - if( iDummy==POS_END ) break; - if( iDummy==POS_COLUMN ){ - n += fts3GetVarint32(pReader->pData+n, &iDummy); - assert( nnData ); - }else if( pReader->iType==DL_POSITIONS_OFFSETS ){ - n += fts3GetVarint32(pReader->pData+n, &iDummy); - n += fts3GetVarint32(pReader->pData+n, &iDummy); - assert( nnData ); - } - } - } - pReader->nElement = n; - assert( pReader->nElement<=pReader->nData ); - } +static int m_gt_0(const char *z){ + while( isVowel(z) ){ z++; } + if( *z==0 ) return 0; + while( isConsonant(z) ){ z++; } + return *z!=0; } -static void dlrInit(DLReader *pReader, DocListType iType, - const char *pData, int nData){ - assert( pData!=NULL && nData!=0 ); - pReader->iType = iType; - pReader->pData = pData; - pReader->nData = nData; - pReader->nElement = 0; - pReader->iDocid = 0; - /* Load the first element's data. There must be a first element. */ - dlrStep(pReader); -} -static void dlrDestroy(DLReader *pReader){ - SCRAMBLE(pReader); +/* Like mgt0 above except we are looking for a value of m which is +** exactly 1 +*/ +static int m_eq_1(const char *z){ + while( isVowel(z) ){ z++; } + if( *z==0 ) return 0; + while( isConsonant(z) ){ z++; } + if( *z==0 ) return 0; + while( isVowel(z) ){ z++; } + if( *z==0 ) return 1; + while( isConsonant(z) ){ z++; } + return *z==0; } -#ifndef NDEBUG -/* Verify that the doclist can be validly decoded. Also returns the -** last docid found because it is convenient in other assertions for -** DLWriter. -*/ -static void docListValidate(DocListType iType, const char *pData, int nData, - sqlite_int64 *pLastDocid){ - sqlite_int64 iPrevDocid = 0; - assert( nData>0 ); - assert( pData!=0 ); - assert( pData+nData>pData ); - while( nData!=0 ){ - sqlite_int64 iDocidDelta; - int n = fts3GetVarint(pData, &iDocidDelta); - iPrevDocid += iDocidDelta; - if( iType>DL_DOCIDS ){ - int iDummy; - while( 1 ){ - n += fts3GetVarint32(pData+n, &iDummy); - if( iDummy==POS_END ) break; - if( iDummy==POS_COLUMN ){ - n += fts3GetVarint32(pData+n, &iDummy); - }else if( iType>DL_POSITIONS ){ - n += fts3GetVarint32(pData+n, &iDummy); - n += fts3GetVarint32(pData+n, &iDummy); - } - assert( n<=nData ); - } - } - assert( n<=nData ); - pData += n; - nData -= n; - } - if( pLastDocid ) *pLastDocid = iPrevDocid; +/* Like mgt0 above except we are looking for a value of m>1 instead +** or m>0 +*/ +static int m_gt_1(const char *z){ + while( isVowel(z) ){ z++; } + if( *z==0 ) return 0; + while( isConsonant(z) ){ z++; } + if( *z==0 ) return 0; + while( isVowel(z) ){ z++; } + if( *z==0 ) return 0; + while( isConsonant(z) ){ z++; } + return *z!=0; } -#define ASSERT_VALID_DOCLIST(i, p, n, o) docListValidate(i, p, n, o) -#else -#define ASSERT_VALID_DOCLIST(i, p, n, o) assert( 1 ) -#endif -/*******************************************************************/ -/* DLWriter is used to write doclist data to a DataBuffer. DLWriter -** always appends to the buffer and does not own it. -** -** dlwInit - initialize to write a given type doclistto a buffer. -** dlwDestroy - clear the writer's memory. Does not free buffer. -** dlwAppend - append raw doclist data to buffer. -** dlwCopy - copy next doclist from reader to writer. -** dlwAdd - construct doclist element and append to buffer. -** Only apply dlwAdd() to DL_DOCIDS doclists (else use PLWriter). +/* +** Return TRUE if there is a vowel anywhere within z[0..n-1] */ -typedef struct DLWriter { - DocListType iType; - DataBuffer *b; - sqlite_int64 iPrevDocid; -#ifndef NDEBUG - int has_iPrevDocid; -#endif -} DLWriter; - -static void dlwInit(DLWriter *pWriter, DocListType iType, DataBuffer *b){ - pWriter->b = b; - pWriter->iType = iType; - pWriter->iPrevDocid = 0; -#ifndef NDEBUG - pWriter->has_iPrevDocid = 0; -#endif -} -static void dlwDestroy(DLWriter *pWriter){ - SCRAMBLE(pWriter); +static int hasVowel(const char *z){ + while( isConsonant(z) ){ z++; } + return *z!=0; } -/* iFirstDocid is the first docid in the doclist in pData. It is -** needed because pData may point within a larger doclist, in which -** case the first item would be delta-encoded. + +/* +** Return TRUE if the word ends in a double consonant. ** -** iLastDocid is the final docid in the doclist in pData. It is -** needed to create the new iPrevDocid for future delta-encoding. The -** code could decode the passed doclist to recreate iLastDocid, but -** the only current user (docListMerge) already has decoded this -** information. -*/ -/* TODO(shess) This has become just a helper for docListMerge. -** Consider a refactor to make this cleaner. +** The text is reversed here. So we are really looking at +** the first two characters of z[]. */ -static void dlwAppend(DLWriter *pWriter, - const char *pData, int nData, - sqlite_int64 iFirstDocid, sqlite_int64 iLastDocid){ - sqlite_int64 iDocid = 0; - char c[VARINT_MAX]; - int nFirstOld, nFirstNew; /* Old and new varint len of first docid. */ -#ifndef NDEBUG - sqlite_int64 iLastDocidDelta; -#endif - - /* Recode the initial docid as delta from iPrevDocid. */ - nFirstOld = fts3GetVarint(pData, &iDocid); - assert( nFirstOldiType==DL_DOCIDS) ); - nFirstNew = fts3PutVarint(c, iFirstDocid-pWriter->iPrevDocid); - - /* Verify that the incoming doclist is valid AND that it ends with - ** the expected docid. This is essential because we'll trust this - ** docid in future delta-encoding. - */ - ASSERT_VALID_DOCLIST(pWriter->iType, pData, nData, &iLastDocidDelta); - assert( iLastDocid==iFirstDocid-iDocid+iLastDocidDelta ); - - /* Append recoded initial docid and everything else. Rest of docids - ** should have been delta-encoded from previous initial docid. - */ - if( nFirstOldb, c, nFirstNew, - pData+nFirstOld, nData-nFirstOld); - }else{ - dataBufferAppend(pWriter->b, c, nFirstNew); - } - pWriter->iPrevDocid = iLastDocid; -} -static void dlwCopy(DLWriter *pWriter, DLReader *pReader){ - dlwAppend(pWriter, dlrDocData(pReader), dlrDocDataBytes(pReader), - dlrDocid(pReader), dlrDocid(pReader)); -} -static void dlwAdd(DLWriter *pWriter, sqlite_int64 iDocid){ - char c[VARINT_MAX]; - int n = fts3PutVarint(c, iDocid-pWriter->iPrevDocid); - - /* Docids must ascend. */ - assert( !pWriter->has_iPrevDocid || iDocid>pWriter->iPrevDocid ); - assert( pWriter->iType==DL_DOCIDS ); - - dataBufferAppend(pWriter->b, c, n); - pWriter->iPrevDocid = iDocid; -#ifndef NDEBUG - pWriter->has_iPrevDocid = 1; -#endif +static int doubleConsonant(const char *z){ + return isConsonant(z) && z[0]==z[1]; } -/*******************************************************************/ -/* PLReader is used to read data from a document's position list. As -** the caller steps through the list, data is cached so that varints -** only need to be decoded once. +/* +** Return TRUE if the word ends with three letters which +** are consonant-vowel-consonent and where the final consonant +** is not 'w', 'x', or 'y'. ** -** plrInit, plrDestroy - create/destroy a reader. -** plrColumn, plrPosition, plrStartOffset, plrEndOffset - accessors -** plrAtEnd - at end of stream, only call plrDestroy once true. -** plrStep - step to the next element. +** The word is reversed here. So we are really checking the +** first three letters and the first one cannot be in [wxy]. */ -typedef struct PLReader { - /* These refer to the next position's data. nData will reach 0 when - ** reading the last position, so plrStep() signals EOF by setting - ** pData to NULL. - */ - const char *pData; - int nData; - - DocListType iType; - int iColumn; /* the last column read */ - int iPosition; /* the last position read */ - int iStartOffset; /* the last start offset read */ - int iEndOffset; /* the last end offset read */ -} PLReader; - -static int plrAtEnd(PLReader *pReader){ - return pReader->pData==NULL; -} -static int plrColumn(PLReader *pReader){ - assert( !plrAtEnd(pReader) ); - return pReader->iColumn; -} -static int plrPosition(PLReader *pReader){ - assert( !plrAtEnd(pReader) ); - return pReader->iPosition; -} -static int plrStartOffset(PLReader *pReader){ - assert( !plrAtEnd(pReader) ); - return pReader->iStartOffset; -} -static int plrEndOffset(PLReader *pReader){ - assert( !plrAtEnd(pReader) ); - return pReader->iEndOffset; +static int star_oh(const char *z){ + return + isConsonant(z) && + z[0]!='w' && z[0]!='x' && z[0]!='y' && + isVowel(z+1) && + isConsonant(z+2); } -static void plrStep(PLReader *pReader){ - int i, n; - - assert( !plrAtEnd(pReader) ); - - if( pReader->nData==0 ){ - pReader->pData = NULL; - return; - } - n = fts3GetVarint32(pReader->pData, &i); - if( i==POS_COLUMN ){ - n += fts3GetVarint32(pReader->pData+n, &pReader->iColumn); - pReader->iPosition = 0; - pReader->iStartOffset = 0; - n += fts3GetVarint32(pReader->pData+n, &i); +/* +** If the word ends with zFrom and xCond() is true for the stem +** of the word that preceeds the zFrom ending, then change the +** ending to zTo. +** +** The input word *pz and zFrom are both in reverse order. zTo +** is in normal order. +** +** Return TRUE if zFrom matches. Return FALSE if zFrom does not +** match. Not that TRUE is returned even if xCond() fails and +** no substitution occurs. +*/ +static int stem( + char **pz, /* The word being stemmed (Reversed) */ + const char *zFrom, /* If the ending matches this... (Reversed) */ + const char *zTo, /* ... change the ending to this (not reversed) */ + int (*xCond)(const char*) /* Condition that must be true */ +){ + char *z = *pz; + while( *zFrom && *zFrom==*z ){ z++; zFrom++; } + if( *zFrom!=0 ) return 0; + if( xCond && !xCond(z) ) return 1; + while( *zTo ){ + *(--z) = *(zTo++); } - /* Should never see adjacent column changes. */ - assert( i!=POS_COLUMN ); + *pz = z; + return 1; +} - if( i==POS_END ){ - pReader->nData = 0; - pReader->pData = NULL; - return; +/* +** This is the fallback stemmer used when the porter stemmer is +** inappropriate. The input word is copied into the output with +** US-ASCII case folding. If the input word is too long (more +** than 20 bytes if it contains no digits or more than 6 bytes if +** it contains digits) then word is truncated to 20 or 6 bytes +** by taking 10 or 3 bytes from the beginning and end. +*/ +static void copy_stemmer(const char *zIn, int nIn, char *zOut, int *pnOut){ + int i, mx, j; + int hasDigit = 0; + for(i=0; i='A' && c<='Z' ){ + zOut[i] = c - 'A' + 'a'; + }else{ + if( c>='0' && c<='9' ) hasDigit = 1; + zOut[i] = c; + } } - - pReader->iPosition += i-POS_BASE; - if( pReader->iType==DL_POSITIONS_OFFSETS ){ - n += fts3GetVarint32(pReader->pData+n, &i); - pReader->iStartOffset += i; - n += fts3GetVarint32(pReader->pData+n, &i); - pReader->iEndOffset = pReader->iStartOffset+i; + mx = hasDigit ? 3 : 10; + if( nIn>mx*2 ){ + for(j=mx, i=nIn-mx; inData ); - pReader->pData += n; - pReader->nData -= n; + zOut[i] = 0; + *pnOut = i; } -static void plrInit(PLReader *pReader, DLReader *pDLReader){ - pReader->pData = dlrPosData(pDLReader); - pReader->nData = dlrPosDataLen(pDLReader); - pReader->iType = pDLReader->iType; - pReader->iColumn = 0; - pReader->iPosition = 0; - pReader->iStartOffset = 0; - pReader->iEndOffset = 0; - plrStep(pReader); -} -static void plrDestroy(PLReader *pReader){ - SCRAMBLE(pReader); -} -/*******************************************************************/ -/* PLWriter is used in constructing a document's position list. As a -** convenience, if iType is DL_DOCIDS, PLWriter becomes a no-op. -** PLWriter writes to the associated DLWriter's buffer. -** -** plwInit - init for writing a document's poslist. -** plwDestroy - clear a writer. -** plwAdd - append position and offset information. -** plwCopy - copy next position's data from reader to writer. -** plwTerminate - add any necessary doclist terminator. +/* +** Stem the input word zIn[0..nIn-1]. Store the output in zOut. +** zOut is at least big enough to hold nIn bytes. Write the actual +** size of the output word (exclusive of the '\0' terminator) into *pnOut. ** -** Calling plwAdd() after plwTerminate() may result in a corrupt -** doclist. -*/ -/* TODO(shess) Until we've written the second item, we can cache the -** first item's information. Then we'd have three states: +** Any upper-case characters in the US-ASCII character set ([A-Z]) +** are converted to lower case. Upper-case UTF characters are +** unchanged. ** -** - initialized with docid, no positions. -** - docid and one position. -** - docid and multiple positions. +** Words that are longer than about 20 bytes are stemmed by retaining +** a few bytes from the beginning and the end of the word. If the +** word contains digits, 3 bytes are taken from the beginning and +** 3 bytes from the end. For long words without digits, 10 bytes +** are taken from each end. US-ASCII case folding still applies. +** +** If the input word contains not digits but does characters not +** in [a-zA-Z] then no stemming is attempted and this routine just +** copies the input into the input into the output with US-ASCII +** case folding. ** -** Only the last state needs to actually write to dlw->b, which would -** be an improvement in the DLCollector case. -*/ -typedef struct PLWriter { - DLWriter *dlw; - - int iColumn; /* the last column written */ - int iPos; /* the last position written */ - int iOffset; /* the last start offset written */ -} PLWriter; - -/* TODO(shess) In the case where the parent is reading these values -** from a PLReader, we could optimize to a copy if that PLReader has -** the same type as pWriter. +** Stemming never increases the length of the word. So there is +** no chance of overflowing the zOut buffer. */ -static void plwAdd(PLWriter *pWriter, int iColumn, int iPos, - int iStartOffset, int iEndOffset){ - /* Worst-case space for POS_COLUMN, iColumn, iPosDelta, - ** iStartOffsetDelta, and iEndOffsetDelta. - */ - char c[5*VARINT_MAX]; - int n = 0; - - /* Ban plwAdd() after plwTerminate(). */ - assert( pWriter->iPos!=-1 ); +static void porter_stemmer(const char *zIn, int nIn, char *zOut, int *pnOut){ + int i, j; + char zReverse[28]; + char *z, *z2; + if( nIn<3 || nIn>=(int)sizeof(zReverse)-7 ){ + /* The word is too big or too small for the porter stemmer. + ** Fallback to the copy stemmer */ + copy_stemmer(zIn, nIn, zOut, pnOut); + return; + } + for(i=0, j=sizeof(zReverse)-6; i='A' && c<='Z' ){ + zReverse[j] = c + 'a' - 'A'; + }else if( c>='a' && c<='z' ){ + zReverse[j] = c; + }else{ + /* The use of a character not in [a-zA-Z] means that we fallback + ** to the copy stemmer */ + copy_stemmer(zIn, nIn, zOut, pnOut); + return; + } + } + memset(&zReverse[sizeof(zReverse)-5], 0, 5); + z = &zReverse[j+1]; - if( pWriter->dlw->iType==DL_DOCIDS ) return; - if( iColumn!=pWriter->iColumn ){ - n += fts3PutVarint(c+n, POS_COLUMN); - n += fts3PutVarint(c+n, iColumn); - pWriter->iColumn = iColumn; - pWriter->iPos = 0; - pWriter->iOffset = 0; - } - assert( iPos>=pWriter->iPos ); - n += fts3PutVarint(c+n, POS_BASE+(iPos-pWriter->iPos)); - pWriter->iPos = iPos; - if( pWriter->dlw->iType==DL_POSITIONS_OFFSETS ){ - assert( iStartOffset>=pWriter->iOffset ); - n += fts3PutVarint(c+n, iStartOffset-pWriter->iOffset); - pWriter->iOffset = iStartOffset; - assert( iEndOffset>=iStartOffset ); - n += fts3PutVarint(c+n, iEndOffset-iStartOffset); + /* Step 1a */ + if( z[0]=='s' ){ + if( + !stem(&z, "sess", "ss", 0) && + !stem(&z, "sei", "i", 0) && + !stem(&z, "ss", "ss", 0) + ){ + z++; + } } - dataBufferAppend(pWriter->dlw->b, c, n); -} -static void plwCopy(PLWriter *pWriter, PLReader *pReader){ - plwAdd(pWriter, plrColumn(pReader), plrPosition(pReader), - plrStartOffset(pReader), plrEndOffset(pReader)); -} -static void plwInit(PLWriter *pWriter, DLWriter *dlw, sqlite_int64 iDocid){ - char c[VARINT_MAX]; - int n; - pWriter->dlw = dlw; + /* Step 1b */ + z2 = z; + if( stem(&z, "dee", "ee", m_gt_0) ){ + /* Do nothing. The work was all in the test */ + }else if( + (stem(&z, "gni", "", hasVowel) || stem(&z, "de", "", hasVowel)) + && z!=z2 + ){ + if( stem(&z, "ta", "ate", 0) || + stem(&z, "lb", "ble", 0) || + stem(&z, "zi", "ize", 0) ){ + /* Do nothing. The work was all in the test */ + }else if( doubleConsonant(z) && (*z!='l' && *z!='s' && *z!='z') ){ + z++; + }else if( m_eq_1(z) && star_oh(z) ){ + *(--z) = 'e'; + } + } - /* Docids must ascend. */ - assert( !pWriter->dlw->has_iPrevDocid || iDocid>pWriter->dlw->iPrevDocid ); - n = fts3PutVarint(c, iDocid-pWriter->dlw->iPrevDocid); - dataBufferAppend(pWriter->dlw->b, c, n); - pWriter->dlw->iPrevDocid = iDocid; -#ifndef NDEBUG - pWriter->dlw->has_iPrevDocid = 1; -#endif + /* Step 1c */ + if( z[0]=='y' && hasVowel(z+1) ){ + z[0] = 'i'; + } - pWriter->iColumn = 0; - pWriter->iPos = 0; - pWriter->iOffset = 0; -} -/* TODO(shess) Should plwDestroy() also terminate the doclist? But -** then plwDestroy() would no longer be just a destructor, it would -** also be doing work, which isn't consistent with the overall idiom. -** Another option would be for plwAdd() to always append any necessary -** terminator, so that the output is always correct. But that would -** add incremental work to the common case with the only benefit being -** API elegance. Punt for now. -*/ -static void plwTerminate(PLWriter *pWriter){ - if( pWriter->dlw->iType>DL_DOCIDS ){ - char c[VARINT_MAX]; - int n = fts3PutVarint(c, POS_END); - dataBufferAppend(pWriter->dlw->b, c, n); + /* Step 2 */ + switch( z[1] ){ + case 'a': + stem(&z, "lanoita", "ate", m_gt_0) || + stem(&z, "lanoit", "tion", m_gt_0); + break; + case 'c': + stem(&z, "icne", "ence", m_gt_0) || + stem(&z, "icna", "ance", m_gt_0); + break; + case 'e': + stem(&z, "rezi", "ize", m_gt_0); + break; + case 'g': + stem(&z, "igol", "log", m_gt_0); + break; + case 'l': + stem(&z, "ilb", "ble", m_gt_0) || + stem(&z, "illa", "al", m_gt_0) || + stem(&z, "iltne", "ent", m_gt_0) || + stem(&z, "ile", "e", m_gt_0) || + stem(&z, "ilsuo", "ous", m_gt_0); + break; + case 'o': + stem(&z, "noitazi", "ize", m_gt_0) || + stem(&z, "noita", "ate", m_gt_0) || + stem(&z, "rota", "ate", m_gt_0); + break; + case 's': + stem(&z, "msila", "al", m_gt_0) || + stem(&z, "ssenevi", "ive", m_gt_0) || + stem(&z, "ssenluf", "ful", m_gt_0) || + stem(&z, "ssensuo", "ous", m_gt_0); + break; + case 't': + stem(&z, "itila", "al", m_gt_0) || + stem(&z, "itivi", "ive", m_gt_0) || + stem(&z, "itilib", "ble", m_gt_0); + break; } -#ifndef NDEBUG - /* Mark as terminated for assert in plwAdd(). */ - pWriter->iPos = -1; -#endif -} -static void plwDestroy(PLWriter *pWriter){ - SCRAMBLE(pWriter); -} -/*******************************************************************/ -/* DLCollector wraps PLWriter and DLWriter to provide a -** dynamically-allocated doclist area to use during tokenization. -** -** dlcNew - malloc up and initialize a collector. -** dlcDelete - destroy a collector and all contained items. -** dlcAddPos - append position and offset information. -** dlcAddDoclist - add the collected doclist to the given buffer. -** dlcNext - terminate the current document and open another. -*/ -typedef struct DLCollector { - DataBuffer b; - DLWriter dlw; - PLWriter plw; -} DLCollector; + /* Step 3 */ + switch( z[0] ){ + case 'e': + stem(&z, "etaci", "ic", m_gt_0) || + stem(&z, "evita", "", m_gt_0) || + stem(&z, "ezila", "al", m_gt_0); + break; + case 'i': + stem(&z, "itici", "ic", m_gt_0); + break; + case 'l': + stem(&z, "laci", "ic", m_gt_0) || + stem(&z, "luf", "", m_gt_0); + break; + case 's': + stem(&z, "ssen", "", m_gt_0); + break; + } -/* TODO(shess) This could also be done by calling plwTerminate() and -** dataBufferAppend(). I tried that, expecting nominal performance -** differences, but it seemed to pretty reliably be worth 1% to code -** it this way. I suspect it is the incremental malloc overhead (some -** percentage of the plwTerminate() calls will cause a realloc), so -** this might be worth revisiting if the DataBuffer implementation -** changes. -*/ -static void dlcAddDoclist(DLCollector *pCollector, DataBuffer *b){ - if( pCollector->dlw.iType>DL_DOCIDS ){ - char c[VARINT_MAX]; - int n = fts3PutVarint(c, POS_END); - dataBufferAppend2(b, pCollector->b.pData, pCollector->b.nData, c, n); - }else{ - dataBufferAppend(b, pCollector->b.pData, pCollector->b.nData); + /* Step 4 */ + switch( z[1] ){ + case 'a': + if( z[0]=='l' && m_gt_1(z+2) ){ + z += 2; + } + break; + case 'c': + if( z[0]=='e' && z[2]=='n' && (z[3]=='a' || z[3]=='e') && m_gt_1(z+4) ){ + z += 4; + } + break; + case 'e': + if( z[0]=='r' && m_gt_1(z+2) ){ + z += 2; + } + break; + case 'i': + if( z[0]=='c' && m_gt_1(z+2) ){ + z += 2; + } + break; + case 'l': + if( z[0]=='e' && z[2]=='b' && (z[3]=='a' || z[3]=='i') && m_gt_1(z+4) ){ + z += 4; + } + break; + case 'n': + if( z[0]=='t' ){ + if( z[2]=='a' ){ + if( m_gt_1(z+3) ){ + z += 3; + } + }else if( z[2]=='e' ){ + stem(&z, "tneme", "", m_gt_1) || + stem(&z, "tnem", "", m_gt_1) || + stem(&z, "tne", "", m_gt_1); + } + } + break; + case 'o': + if( z[0]=='u' ){ + if( m_gt_1(z+2) ){ + z += 2; + } + }else if( z[3]=='s' || z[3]=='t' ){ + stem(&z, "noi", "", m_gt_1); + } + break; + case 's': + if( z[0]=='m' && z[2]=='i' && m_gt_1(z+3) ){ + z += 3; + } + break; + case 't': + stem(&z, "eta", "", m_gt_1) || + stem(&z, "iti", "", m_gt_1); + break; + case 'u': + if( z[0]=='s' && z[2]=='o' && m_gt_1(z+3) ){ + z += 3; + } + break; + case 'v': + case 'z': + if( z[0]=='e' && z[2]=='i' && m_gt_1(z+3) ){ + z += 3; + } + break; } -} -static void dlcNext(DLCollector *pCollector, sqlite_int64 iDocid){ - plwTerminate(&pCollector->plw); - plwDestroy(&pCollector->plw); - plwInit(&pCollector->plw, &pCollector->dlw, iDocid); -} -static void dlcAddPos(DLCollector *pCollector, int iColumn, int iPos, - int iStartOffset, int iEndOffset){ - plwAdd(&pCollector->plw, iColumn, iPos, iStartOffset, iEndOffset); -} - -static DLCollector *dlcNew(sqlite_int64 iDocid, DocListType iType){ - DLCollector *pCollector = sqlite3_malloc(sizeof(DLCollector)); - dataBufferInit(&pCollector->b, 0); - dlwInit(&pCollector->dlw, iType, &pCollector->b); - plwInit(&pCollector->plw, &pCollector->dlw, iDocid); - return pCollector; -} -static void dlcDelete(DLCollector *pCollector){ - plwDestroy(&pCollector->plw); - dlwDestroy(&pCollector->dlw); - dataBufferDestroy(&pCollector->b); - SCRAMBLE(pCollector); - sqlite3_free(pCollector); -} - - -/* Copy the doclist data of iType in pData/nData into *out, trimming -** unnecessary data as we go. Only columns matching iColumn are -** copied, all columns copied if iColumn is -1. Elements with no -** matching columns are dropped. The output is an iOutType doclist. -*/ -/* NOTE(shess) This code is only valid after all doclists are merged. -** If this is run before merges, then doclist items which represent -** deletion will be trimmed, and will thus not effect a deletion -** during the merge. -*/ -static void docListTrim(DocListType iType, const char *pData, int nData, - int iColumn, DocListType iOutType, DataBuffer *out){ - DLReader dlReader; - DLWriter dlWriter; - assert( iOutType<=iType ); - - dlrInit(&dlReader, iType, pData, nData); - dlwInit(&dlWriter, iOutType, out); - - while( !dlrAtEnd(&dlReader) ){ - PLReader plReader; - PLWriter plWriter; - int match = 0; - - plrInit(&plReader, &dlReader); - - while( !plrAtEnd(&plReader) ){ - if( iColumn==-1 || plrColumn(&plReader)==iColumn ){ - if( !match ){ - plwInit(&plWriter, &dlWriter, dlrDocid(&dlReader)); - match = 1; - } - plwAdd(&plWriter, plrColumn(&plReader), plrPosition(&plReader), - plrStartOffset(&plReader), plrEndOffset(&plReader)); - } - plrStep(&plReader); - } - if( match ){ - plwTerminate(&plWriter); - plwDestroy(&plWriter); + /* Step 5a */ + if( z[0]=='e' ){ + if( m_gt_1(z+1) ){ + z++; + }else if( m_eq_1(z+1) && !star_oh(z+1) ){ + z++; } - - plrDestroy(&plReader); - dlrStep(&dlReader); } - dlwDestroy(&dlWriter); - dlrDestroy(&dlReader); -} -/* Used by docListMerge() to keep doclists in the ascending order by -** docid, then ascending order by age (so the newest comes first). -*/ -typedef struct OrderedDLReader { - DLReader *pReader; + /* Step 5b */ + if( m_gt_1(z) && z[0]=='l' && z[1]=='l' ){ + z++; + } - /* TODO(shess) If we assume that docListMerge pReaders is ordered by - ** age (which we do), then we could use pReader comparisons to break - ** ties. + /* z[] is now the stemmed word in reverse order. Flip it back + ** around into forward order and return. */ - int idx; -} OrderedDLReader; - -/* Order eof to end, then by docid asc, idx desc. */ -static int orderedDLReaderCmp(OrderedDLReader *r1, OrderedDLReader *r2){ - if( dlrAtEnd(r1->pReader) ){ - if( dlrAtEnd(r2->pReader) ) return 0; /* Both atEnd(). */ - return 1; /* Only r1 atEnd(). */ + *pnOut = i = (int)strlen(z); + zOut[i] = 0; + while( *z ){ + zOut[--i] = *(z++); } - if( dlrAtEnd(r2->pReader) ) return -1; /* Only r2 atEnd(). */ - - if( dlrDocid(r1->pReader)pReader) ) return -1; - if( dlrDocid(r1->pReader)>dlrDocid(r2->pReader) ) return 1; - - /* Descending on idx. */ - return r2->idx-r1->idx; } -/* Bubble p[0] to appropriate place in p[1..n-1]. Assumes that -** p[1..n-1] is already sorted. -*/ -/* TODO(shess) Is this frequent enough to warrant a binary search? -** Before implementing that, instrument the code to check. In most -** current usage, I expect that p[0] will be less than p[1] a very -** high proportion of the time. +/* +** Characters that can be part of a token. We assume any character +** whose value is greater than 0x80 (any UTF character) can be +** part of a token. In other words, delimiters all must have +** values of 0x7f or lower. */ -static void orderedDLReaderReorder(OrderedDLReader *p, int n){ - while( n>1 && orderedDLReaderCmp(p, p+1)>0 ){ - OrderedDLReader tmp = p[0]; - p[0] = p[1]; - p[1] = tmp; - n--; - p++; - } -} +static const char porterIdChar[] = { +/* x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, /* 3x */ + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 4x */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, /* 5x */ + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 6x */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, /* 7x */ +}; +#define isDelim(C) (((ch=C)&0x80)==0 && (ch<0x30 || !porterIdChar[ch-0x30])) -/* Given an array of doclist readers, merge their doclist elements -** into out in sorted order (by docid), dropping elements from older -** readers when there is a duplicate docid. pReaders is assumed to be -** ordered by age, oldest first. -*/ -/* TODO(shess) nReaders must be <= MERGE_COUNT. This should probably -** be fixed. +/* +** Extract the next token from a tokenization cursor. The cursor must +** have been opened by a prior call to porterOpen(). */ -static void docListMerge(DataBuffer *out, - DLReader *pReaders, int nReaders){ - OrderedDLReader readers[MERGE_COUNT]; - DLWriter writer; - int i, n; - const char *pStart = 0; - int nStart = 0; - sqlite_int64 iFirstDocid = 0, iLastDocid = 0; - - assert( nReaders>0 ); - if( nReaders==1 ){ - dataBufferAppend(out, dlrDocData(pReaders), dlrAllDataBytes(pReaders)); - return; - } - - assert( nReaders<=MERGE_COUNT ); - n = 0; - for(i=0; i0 ){ - orderedDLReaderReorder(readers+i, nReaders-i); - } +static int porterNext( + sqlite3_tokenizer_cursor *pCursor, /* Cursor returned by porterOpen */ + const char **pzToken, /* OUT: *pzToken is the token text */ + int *pnBytes, /* OUT: Number of bytes in token */ + int *piStartOffset, /* OUT: Starting offset of token */ + int *piEndOffset, /* OUT: Ending offset of token */ + int *piPosition /* OUT: Position integer of token */ +){ + porter_tokenizer_cursor *c = (porter_tokenizer_cursor *) pCursor; + const char *z = c->zInput; - dlwInit(&writer, pReaders[0].iType, out); - while( !dlrAtEnd(readers[0].pReader) ){ - sqlite_int64 iDocid = dlrDocid(readers[0].pReader); + while( c->iOffsetnInput ){ + int iStartOffset, ch; - /* If this is a continuation of the current buffer to copy, extend - ** that buffer. memcpy() seems to be more efficient if it has a - ** lots of data to copy. - */ - if( dlrDocData(readers[0].pReader)==pStart+nStart ){ - nStart += dlrDocDataBytes(readers[0].pReader); - }else{ - if( pStart!=0 ){ - dlwAppend(&writer, pStart, nStart, iFirstDocid, iLastDocid); - } - pStart = dlrDocData(readers[0].pReader); - nStart = dlrDocDataBytes(readers[0].pReader); - iFirstDocid = iDocid; + /* Scan past delimiter characters */ + while( c->iOffsetnInput && isDelim(z[c->iOffset]) ){ + c->iOffset++; } - iLastDocid = iDocid; - dlrStep(readers[0].pReader); - /* Drop all of the older elements with the same docid. */ - for(i=1; iiOffset; + while( c->iOffsetnInput && !isDelim(z[c->iOffset]) ){ + c->iOffset++; } - /* Get the readers back into order. */ - while( i-->0 ){ - orderedDLReaderReorder(readers+i, nReaders-i); + if( c->iOffset>iStartOffset ){ + int n = c->iOffset-iStartOffset; + if( n>c->nAllocated ){ + char *pNew; + c->nAllocated = n+20; + pNew = sqlite3_realloc(c->zToken, c->nAllocated); + if( !pNew ) return SQLITE_NOMEM; + c->zToken = pNew; + } + porter_stemmer(&z[iStartOffset], n, c->zToken, pnBytes); + *pzToken = c->zToken; + *piStartOffset = iStartOffset; + *piEndOffset = c->iOffset; + *piPosition = c->iToken++; + return SQLITE_OK; } } - - /* Copy over any remaining elements. */ - if( nStart>0 ) dlwAppend(&writer, pStart, nStart, iFirstDocid, iLastDocid); - dlwDestroy(&writer); -} - -/* Helper function for posListUnion(). Compares the current position -** between left and right, returning as standard C idiom of <0 if -** left0 if left>right, and 0 if left==right. "End" always -** compares greater. -*/ -static int posListCmp(PLReader *pLeft, PLReader *pRight){ - assert( pLeft->iType==pRight->iType ); - if( pLeft->iType==DL_DOCIDS ) return 0; - - if( plrAtEnd(pLeft) ) return plrAtEnd(pRight) ? 0 : 1; - if( plrAtEnd(pRight) ) return -1; - - if( plrColumn(pLeft)plrColumn(pRight) ) return 1; - - if( plrPosition(pLeft)plrPosition(pRight) ) return 1; - if( pLeft->iType==DL_POSITIONS ) return 0; - - if( plrStartOffset(pLeft)plrStartOffset(pRight) ) return 1; - - if( plrEndOffset(pLeft)plrEndOffset(pRight) ) return 1; - - return 0; + return SQLITE_DONE; } -/* Write the union of position lists in pLeft and pRight to pOut. -** "Union" in this case meaning "All unique position tuples". Should -** work with any doclist type, though both inputs and the output -** should be the same type. +/* +** The set of routines that implement the porter-stemmer tokenizer */ -static void posListUnion(DLReader *pLeft, DLReader *pRight, DLWriter *pOut){ - PLReader left, right; - PLWriter writer; - - assert( dlrDocid(pLeft)==dlrDocid(pRight) ); - assert( pLeft->iType==pRight->iType ); - assert( pLeft->iType==pOut->iType ); - - plrInit(&left, pLeft); - plrInit(&right, pRight); - plwInit(&writer, pOut, dlrDocid(pLeft)); - - while( !plrAtEnd(&left) || !plrAtEnd(&right) ){ - int c = posListCmp(&left, &right); - if( c<0 ){ - plwCopy(&writer, &left); - plrStep(&left); - }else if( c>0 ){ - plwCopy(&writer, &right); - plrStep(&right); - }else{ - plwCopy(&writer, &left); - plrStep(&left); - plrStep(&right); - } - } - - plwTerminate(&writer); - plwDestroy(&writer); - plrDestroy(&left); - plrDestroy(&right); -} +static const sqlite3_tokenizer_module porterTokenizerModule = { + 0, + porterCreate, + porterDestroy, + porterOpen, + porterClose, + porterNext, + 0 +}; -/* Write the union of doclists in pLeft and pRight to pOut. For -** docids in common between the inputs, the union of the position -** lists is written. Inputs and outputs are always type DL_DEFAULT. +/* +** Allocate a new porter tokenizer. Return a pointer to the new +** tokenizer in *ppModule */ -static void docListUnion( - const char *pLeft, int nLeft, - const char *pRight, int nRight, - DataBuffer *pOut /* Write the combined doclist here */ +SQLITE_PRIVATE void sqlite3Fts3PorterTokenizerModule( + sqlite3_tokenizer_module const**ppModule ){ - DLReader left, right; - DLWriter writer; - - if( nLeft==0 ){ - if( nRight!=0) dataBufferAppend(pOut, pRight, nRight); - return; - } - if( nRight==0 ){ - dataBufferAppend(pOut, pLeft, nLeft); - return; - } - - dlrInit(&left, DL_DEFAULT, pLeft, nLeft); - dlrInit(&right, DL_DEFAULT, pRight, nRight); - dlwInit(&writer, DL_DEFAULT, pOut); - - while( !dlrAtEnd(&left) || !dlrAtEnd(&right) ){ - if( dlrAtEnd(&right) ){ - dlwCopy(&writer, &left); - dlrStep(&left); - }else if( dlrAtEnd(&left) ){ - dlwCopy(&writer, &right); - dlrStep(&right); - }else if( dlrDocid(&left)dlrDocid(&right) ){ - dlwCopy(&writer, &right); - dlrStep(&right); - }else{ - posListUnion(&left, &right, &writer); - dlrStep(&left); - dlrStep(&right); - } - } - - dlrDestroy(&left); - dlrDestroy(&right); - dlwDestroy(&writer); + *ppModule = &porterTokenizerModule; } -/* -** This function is used as part of the implementation of phrase and -** NEAR matching. -** -** pLeft and pRight are DLReaders positioned to the same docid in -** lists of type DL_POSITION. This function writes an entry to the -** DLWriter pOut for each position in pRight that is less than -** (nNear+1) greater (but not equal to or smaller) than a position -** in pLeft. For example, if nNear is 0, and the positions contained -** by pLeft and pRight are: -** -** pLeft: 5 10 15 20 -** pRight: 6 9 17 21 -** -** then the docid is added to pOut. If pOut is of type DL_POSITIONS, -** then a positionids "6" and "21" are also added to pOut. -** -** If boolean argument isSaveLeft is true, then positionids are copied -** from pLeft instead of pRight. In the example above, the positions "5" -** and "20" would be added instead of "6" and "21". -*/ -static void posListPhraseMerge( - DLReader *pLeft, - DLReader *pRight, - int nNear, - int isSaveLeft, - DLWriter *pOut -){ - PLReader left, right; - PLWriter writer; - int match = 0; - - assert( dlrDocid(pLeft)==dlrDocid(pRight) ); - assert( pOut->iType!=DL_POSITIONS_OFFSETS ); - - plrInit(&left, pLeft); - plrInit(&right, pRight); - - while( !plrAtEnd(&left) && !plrAtEnd(&right) ){ - if( plrColumn(&left)plrColumn(&right) ){ - plrStep(&right); - }else if( plrPosition(&left)>=plrPosition(&right) ){ - plrStep(&right); - }else{ - if( (plrPosition(&right)-plrPosition(&left))<=(nNear+1) ){ - if( !match ){ - plwInit(&writer, pOut, dlrDocid(pLeft)); - match = 1; - } - if( !isSaveLeft ){ - plwAdd(&writer, plrColumn(&right), plrPosition(&right), 0, 0); - }else{ - plwAdd(&writer, plrColumn(&left), plrPosition(&left), 0, 0); - } - plrStep(&right); - }else{ - plrStep(&left); - } - } - } - - if( match ){ - plwTerminate(&writer); - plwDestroy(&writer); - } +#endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) */ - plrDestroy(&left); - plrDestroy(&right); -} +/************** End of fts3_porter.c *****************************************/ +/************** Begin file fts3_tokenizer.c **********************************/ +/* +** 2007 June 22 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +****************************************************************************** +** +** This is part of an SQLite module implementing full-text search. +** This particular file implements the generic tokenizer interface. +*/ /* -** Compare the values pointed to by the PLReaders passed as arguments. -** Return -1 if the value pointed to by pLeft is considered less than -** the value pointed to by pRight, +1 if it is considered greater -** than it, or 0 if it is equal. i.e. +** The code in this file is only compiled if: ** -** (*pLeft - *pRight) +** * The FTS3 module is being built as an extension +** (in which case SQLITE_CORE is not defined), or ** -** A PLReader that is in the EOF condition is considered greater than -** any other. If neither argument is in EOF state, the return value of -** plrColumn() is used. If the plrColumn() values are equal, the -** comparison is on the basis of plrPosition(). +** * The FTS3 module is being built into the core of +** SQLite (in which case SQLITE_ENABLE_FTS3 is defined). */ -static int plrCompare(PLReader *pLeft, PLReader *pRight){ - assert(!plrAtEnd(pLeft) || !plrAtEnd(pRight)); +#if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) - if( plrAtEnd(pRight) || plrAtEnd(pLeft) ){ - return (plrAtEnd(pRight) ? -1 : 1); - } - if( plrColumn(pLeft)!=plrColumn(pRight) ){ - return ((plrColumn(pLeft) */ +/* #include */ -/* We have two doclists with positions: pLeft and pRight. Depending -** on the value of the nNear parameter, perform either a phrase -** intersection (if nNear==0) or a NEAR intersection (if nNear>0) -** and write the results into pOut. -** -** A phrase intersection means that two documents only match -** if pLeft.iPos+1==pRight.iPos. +/* +** Implementation of the SQL scalar function for accessing the underlying +** hash table. This function may be called as follows: ** -** A NEAR intersection means that two documents only match if -** (abs(pLeft.iPos-pRight.iPos)(); +** SELECT (, ); ** -** If a NEAR intersection is requested, then the nPhrase argument should -** be passed the number of tokens in the two operands to the NEAR operator -** combined. For example: +** where is the name passed as the second argument +** to the sqlite3Fts3InitHashTable() function (e.g. 'fts3_tokenizer'). ** -** Query syntax nPhrase -** ------------------------------------ -** "A B C" NEAR "D E" 5 -** A NEAR B 2 +** If the argument is specified, it must be a blob value +** containing a pointer to be stored as the hash data corresponding +** to the string . If is not specified, then +** the string must already exist in the has table. Otherwise, +** an error is returned. ** -** iType controls the type of data written to pOut. If iType is -** DL_POSITIONS, the positions are those from pRight. -*/ -static void docListPhraseMerge( - const char *pLeft, int nLeft, - const char *pRight, int nRight, - int nNear, /* 0 for a phrase merge, non-zero for a NEAR merge */ - int nPhrase, /* Number of tokens in left+right operands to NEAR */ - DocListType iType, /* Type of doclist to write to pOut */ - DataBuffer *pOut /* Write the combined doclist here */ -){ - DLReader left, right; - DLWriter writer; - - if( nLeft==0 || nRight==0 ) return; - - assert( iType!=DL_POSITIONS_OFFSETS ); - - dlrInit(&left, DL_POSITIONS, pLeft, nLeft); - dlrInit(&right, DL_POSITIONS, pRight, nRight); - dlwInit(&writer, iType, pOut); - - while( !dlrAtEnd(&left) && !dlrAtEnd(&right) ){ - if( dlrDocid(&left) argument is specified, the value returned +** is a blob containing the pointer stored as the hash data corresponding +** to string (after the hash-table is updated, if applicable). */ -static void docListOrMerge( - const char *pLeft, int nLeft, - const char *pRight, int nRight, - DataBuffer *pOut /* Write the combined doclist here */ +static void scalarFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv ){ - DLReader left, right; - DLWriter writer; - - if( nLeft==0 ){ - if( nRight!=0 ) dataBufferAppend(pOut, pRight, nRight); - return; - } - if( nRight==0 ){ - dataBufferAppend(pOut, pLeft, nLeft); - return; - } - - dlrInit(&left, DL_DOCIDS, pLeft, nLeft); - dlrInit(&right, DL_DOCIDS, pRight, nRight); - dlwInit(&writer, DL_DOCIDS, pOut); - - while( !dlrAtEnd(&left) || !dlrAtEnd(&right) ){ - if( dlrAtEnd(&right) ){ - dlwAdd(&writer, dlrDocid(&left)); - dlrStep(&left); - }else if( dlrAtEnd(&left) ){ - dlwAdd(&writer, dlrDocid(&right)); - dlrStep(&right); - }else if( dlrDocid(&left) 0", - /* SEGDIR_DELETE */ "delete from %_segdir where level = ?", - - /* NOTE(shess): The first three results of the following two - ** statements must match. - */ - /* SEGDIR_SELECT_SEGMENT */ - "select start_block, leaves_end_block, root from %_segdir " - " where level = ? and idx = ?", - /* SEGDIR_SELECT_ALL */ - "select start_block, leaves_end_block, root from %_segdir " - " order by level desc, idx asc", - /* SEGDIR_DELETE_ALL */ "delete from %_segdir", - /* SEGDIR_COUNT */ "select count(*), ifnull(max(level),0) from %_segdir", -}; - -/* -** A connection to a fulltext index is an instance of the following -** structure. The xCreate and xConnect methods create an instance -** of this structure and xDestroy and xDisconnect free that instance. -** All other methods receive a pointer to the structure as one of their -** arguments. -*/ -struct fulltext_vtab { - sqlite3_vtab base; /* Base class used by SQLite core */ - sqlite3 *db; /* The database connection */ - const char *zDb; /* logical database name */ - const char *zName; /* virtual table name */ - int nColumn; /* number of columns in virtual table */ - char **azColumn; /* column names. malloced */ - char **azContentColumn; /* column names in content table; malloced */ - sqlite3_tokenizer *pTokenizer; /* tokenizer for inserts and queries */ - - /* Precompiled statements which we keep as long as the table is - ** open. - */ - sqlite3_stmt *pFulltextStatements[MAX_STMT]; - - /* Precompiled statements used for segment merges. We run a - ** separate select across the leaf level of each tree being merged. - */ - sqlite3_stmt *pLeafSelectStmts[MERGE_COUNT]; - /* The statement used to prepare pLeafSelectStmts. */ -#define LEAF_SELECT \ - "select block from %_segments where blockid between ? and ? order by blockid" - - /* These buffer pending index updates during transactions. - ** nPendingData estimates the memory size of the pending data. It - ** doesn't include the hash-bucket overhead, nor any malloc - ** overhead. When nPendingData exceeds kPendingThreshold, the - ** buffer is flushed even before the transaction closes. - ** pendingTerms stores the data, and is only valid when nPendingData - ** is >=0 (nPendingData<0 means pendingTerms has not been - ** initialized). iPrevDocid is the last docid written, used to make - ** certain we're inserting in sorted order. - */ - int nPendingData; -#define kPendingThreshold (1*1024*1024) - sqlite_int64 iPrevDocid; - fts3Hash pendingTerms; -}; - -/* -** When the core wants to do a query, it create a cursor using a -** call to xOpen. This structure is an instance of a cursor. It -** is destroyed by xClose. -*/ -typedef struct fulltext_cursor { - sqlite3_vtab_cursor base; /* Base class used by SQLite core */ - QueryType iCursorType; /* Copy of sqlite3_index_info.idxNum */ - sqlite3_stmt *pStmt; /* Prepared statement in use by the cursor */ - int eof; /* True if at End Of Results */ - Fts3Expr *pExpr; /* Parsed MATCH query string */ - Snippet snippet; /* Cached snippet for the current row */ - int iColumn; /* Column being searched */ - DataBuffer result; /* Doclist results from fulltextQuery */ - DLReader reader; /* Result reader if result not empty */ -} fulltext_cursor; - -static fulltext_vtab *cursor_vtab(fulltext_cursor *c){ - return (fulltext_vtab *) c->base.pVtab; -} - -static const sqlite3_module fts3Module; /* forward declaration */ - -/* Return a dynamically generated statement of the form - * insert into %_content (docid, ...) values (?, ...) - */ -static const char *contentInsertStatement(fulltext_vtab *v){ - StringBuffer sb; - int i; - - initStringBuffer(&sb); - append(&sb, "insert into %_content (docid, "); - appendList(&sb, v->nColumn, v->azContentColumn); - append(&sb, ") values (?"); - for(i=0; inColumn; ++i) - append(&sb, ", ?"); - append(&sb, ")"); - return stringBufferData(&sb); + sqlite3_result_blob(context, (void *)&pPtr, sizeof(pPtr), SQLITE_TRANSIENT); } -/* Return a dynamically generated statement of the form - * select from %_content where docid = ? - */ -static const char *contentSelectStatement(fulltext_vtab *v){ - StringBuffer sb; - initStringBuffer(&sb); - append(&sb, "SELECT "); - appendList(&sb, v->nColumn, v->azContentColumn); - append(&sb, " FROM %_content WHERE docid = ?"); - return stringBufferData(&sb); -} - -/* Return a dynamically generated statement of the form - * update %_content set [col_0] = ?, [col_1] = ?, ... - * where docid = ? - */ -static const char *contentUpdateStatement(fulltext_vtab *v){ - StringBuffer sb; - int i; - - initStringBuffer(&sb); - append(&sb, "update %_content set "); - for(i=0; inColumn; ++i) { - if( i>0 ){ - append(&sb, ", "); - } - append(&sb, v->azContentColumn[i]); - append(&sb, " = ?"); - } - append(&sb, " where docid = ?"); - return stringBufferData(&sb); -} +SQLITE_PRIVATE int sqlite3Fts3IsIdChar(char c){ + static const char isFtsIdChar[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 1x */ + 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 2x */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, /* 3x */ + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 4x */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, /* 5x */ + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 6x */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, /* 7x */ + }; + return (c&0x80 || isFtsIdChar[(int)(c)]); +} + +SQLITE_PRIVATE const char *sqlite3Fts3NextToken(const char *zStr, int *pn){ + const char *z1; + const char *z2 = 0; + + /* Find the start of the next token. */ + z1 = zStr; + while( z2==0 ){ + char c = *z1; + switch( c ){ + case '\0': return 0; /* No more tokens here */ + case '\'': + case '"': + case '`': { + z2 = z1; + while( *++z2 && (*z2!=c || *++z2==c) ); + break; + } + case '[': + z2 = &z1[1]; + while( *z2 && z2[0]!=']' ) z2++; + if( *z2 ) z2++; + break; -/* Puts a freshly-prepared statement determined by iStmt in *ppStmt. -** If the indicated statement has never been prepared, it is prepared -** and cached, otherwise the cached version is reset. -*/ -static int sql_get_statement(fulltext_vtab *v, fulltext_statement iStmt, - sqlite3_stmt **ppStmt){ - assert( iStmtpFulltextStatements[iStmt]==NULL ){ - const char *zStmt; - int rc; - switch( iStmt ){ - case CONTENT_INSERT_STMT: - zStmt = contentInsertStatement(v); break; - case CONTENT_SELECT_STMT: - zStmt = contentSelectStatement(v); break; - case CONTENT_UPDATE_STMT: - zStmt = contentUpdateStatement(v); break; default: - zStmt = fulltext_zStatement[iStmt]; + if( sqlite3Fts3IsIdChar(*z1) ){ + z2 = &z1[1]; + while( sqlite3Fts3IsIdChar(*z2) ) z2++; + }else{ + z1++; + } } - rc = sql_prepare(v->db, v->zDb, v->zName, &v->pFulltextStatements[iStmt], - zStmt); - if( zStmt != fulltext_zStatement[iStmt]) sqlite3_free((void *) zStmt); - if( rc!=SQLITE_OK ) return rc; - } else { - int rc = sqlite3_reset(v->pFulltextStatements[iStmt]); - if( rc!=SQLITE_OK ) return rc; - } - - *ppStmt = v->pFulltextStatements[iStmt]; - return SQLITE_OK; -} - -/* Like sqlite3_step(), but convert SQLITE_DONE to SQLITE_OK and -** SQLITE_ROW to SQLITE_ERROR. Useful for statements like UPDATE, -** where we expect no results. -*/ -static int sql_single_step(sqlite3_stmt *s){ - int rc = sqlite3_step(s); - return (rc==SQLITE_DONE) ? SQLITE_OK : rc; -} - -/* Like sql_get_statement(), but for special replicated LEAF_SELECT -** statements. idx -1 is a special case for an uncached version of -** the statement (used in the optimize implementation). -*/ -/* TODO(shess) Write version for generic statements and then share -** that between the cached-statement functions. -*/ -static int sql_get_leaf_statement(fulltext_vtab *v, int idx, - sqlite3_stmt **ppStmt){ - assert( idx>=-1 && idxdb, v->zDb, v->zName, ppStmt, LEAF_SELECT); - }else if( v->pLeafSelectStmts[idx]==NULL ){ - int rc = sql_prepare(v->db, v->zDb, v->zName, &v->pLeafSelectStmts[idx], - LEAF_SELECT); - if( rc!=SQLITE_OK ) return rc; - }else{ - int rc = sqlite3_reset(v->pLeafSelectStmts[idx]); - if( rc!=SQLITE_OK ) return rc; - } - - *ppStmt = v->pLeafSelectStmts[idx]; - return SQLITE_OK; -} - -/* insert into %_content (docid, ...) values ([docid], [pValues]) -** If the docid contains SQL NULL, then a unique docid will be -** generated. -*/ -static int content_insert(fulltext_vtab *v, sqlite3_value *docid, - sqlite3_value **pValues){ - sqlite3_stmt *s; - int i; - int rc = sql_get_statement(v, CONTENT_INSERT_STMT, &s); - if( rc!=SQLITE_OK ) return rc; - - rc = sqlite3_bind_value(s, 1, docid); - if( rc!=SQLITE_OK ) return rc; - - for(i=0; inColumn; ++i){ - rc = sqlite3_bind_value(s, 2+i, pValues[i]); - if( rc!=SQLITE_OK ) return rc; - } - - return sql_single_step(s); -} - -/* update %_content set col0 = pValues[0], col1 = pValues[1], ... - * where docid = [iDocid] */ -static int content_update(fulltext_vtab *v, sqlite3_value **pValues, - sqlite_int64 iDocid){ - sqlite3_stmt *s; - int i; - int rc = sql_get_statement(v, CONTENT_UPDATE_STMT, &s); - if( rc!=SQLITE_OK ) return rc; - - for(i=0; inColumn; ++i){ - rc = sqlite3_bind_value(s, 1+i, pValues[i]); - if( rc!=SQLITE_OK ) return rc; } - rc = sqlite3_bind_int64(s, 1+v->nColumn, iDocid); - if( rc!=SQLITE_OK ) return rc; - - return sql_single_step(s); -} - -static void freeStringArray(int nString, const char **pString){ - int i; - - for (i=0 ; i < nString ; ++i) { - if( pString[i]!=NULL ) sqlite3_free((void *) pString[i]); - } - sqlite3_free((void *) pString); + *pn = (int)(z2-z1); + return z1; } -/* select * from %_content where docid = [iDocid] - * The caller must delete the returned array and all strings in it. - * null fields will be NULL in the returned array. - * - * TODO: Perhaps we should return pointer/length strings here for consistency - * with other code which uses pointer/length. */ -static int content_select(fulltext_vtab *v, sqlite_int64 iDocid, - const char ***pValues){ - sqlite3_stmt *s; - const char **values; - int i; +SQLITE_PRIVATE int sqlite3Fts3InitTokenizer( + Fts3Hash *pHash, /* Tokenizer hash table */ + const char *zArg, /* Tokenizer name */ + sqlite3_tokenizer **ppTok, /* OUT: Tokenizer (if applicable) */ + char **pzErr /* OUT: Set to malloced error message */ +){ int rc; + char *z = (char *)zArg; + int n = 0; + char *zCopy; + char *zEnd; /* Pointer to nul-term of zCopy */ + sqlite3_tokenizer_module *m; - *pValues = NULL; - - rc = sql_get_statement(v, CONTENT_SELECT_STMT, &s); - if( rc!=SQLITE_OK ) return rc; - - rc = sqlite3_bind_int64(s, 1, iDocid); - if( rc!=SQLITE_OK ) return rc; + zCopy = sqlite3_mprintf("%s", zArg); + if( !zCopy ) return SQLITE_NOMEM; + zEnd = &zCopy[strlen(zCopy)]; - rc = sqlite3_step(s); - if( rc!=SQLITE_ROW ) return rc; + z = (char *)sqlite3Fts3NextToken(zCopy, &n); + z[n] = '\0'; + sqlite3Fts3Dequote(z); - values = (const char **) sqlite3_malloc(v->nColumn * sizeof(const char *)); - for(i=0; inColumn; ++i){ - if( sqlite3_column_type(s, i)==SQLITE_NULL ){ - values[i] = NULL; + m = (sqlite3_tokenizer_module *)sqlite3Fts3HashFind(pHash,z,(int)strlen(z)+1); + if( !m ){ + *pzErr = sqlite3_mprintf("unknown tokenizer: %s", z); + rc = SQLITE_ERROR; + }else{ + char const **aArg = 0; + int iArg = 0; + z = &z[n+1]; + while( zxCreate(iArg, aArg, ppTok); + assert( rc!=SQLITE_OK || *ppTok ); + if( rc!=SQLITE_OK ){ + *pzErr = sqlite3_mprintf("unknown tokenizer"); }else{ - values[i] = string_dup((char*)sqlite3_column_text(s, i)); + (*ppTok)->pModule = m; } + sqlite3_free((void *)aArg); } - /* We expect only one row. We must execute another sqlite3_step() - * to complete the iteration; otherwise the table will remain locked. */ - rc = sqlite3_step(s); - if( rc==SQLITE_DONE ){ - *pValues = values; - return SQLITE_OK; - } - - freeStringArray(v->nColumn, values); - return rc; -} - -/* delete from %_content where docid = [iDocid ] */ -static int content_delete(fulltext_vtab *v, sqlite_int64 iDocid){ - sqlite3_stmt *s; - int rc = sql_get_statement(v, CONTENT_DELETE_STMT, &s); - if( rc!=SQLITE_OK ) return rc; - - rc = sqlite3_bind_int64(s, 1, iDocid); - if( rc!=SQLITE_OK ) return rc; - - return sql_single_step(s); -} - -/* Returns SQLITE_ROW if any rows exist in %_content, SQLITE_DONE if -** no rows exist, and any error in case of failure. -*/ -static int content_exists(fulltext_vtab *v){ - sqlite3_stmt *s; - int rc = sql_get_statement(v, CONTENT_EXISTS_STMT, &s); - if( rc!=SQLITE_OK ) return rc; - - rc = sqlite3_step(s); - if( rc!=SQLITE_ROW ) return rc; - - /* We expect only one row. We must execute another sqlite3_step() - * to complete the iteration; otherwise the table will remain locked. */ - rc = sqlite3_step(s); - if( rc==SQLITE_DONE ) return SQLITE_ROW; - if( rc==SQLITE_ROW ) return SQLITE_ERROR; + sqlite3_free(zCopy); return rc; } -/* insert into %_segments values ([pData]) -** returns assigned blockid in *piBlockid -*/ -static int block_insert(fulltext_vtab *v, const char *pData, int nData, - sqlite_int64 *piBlockid){ - sqlite3_stmt *s; - int rc = sql_get_statement(v, BLOCK_INSERT_STMT, &s); - if( rc!=SQLITE_OK ) return rc; - - rc = sqlite3_bind_blob(s, 1, pData, nData, SQLITE_STATIC); - if( rc!=SQLITE_OK ) return rc; - rc = sqlite3_step(s); - if( rc==SQLITE_ROW ) return SQLITE_ERROR; - if( rc!=SQLITE_DONE ) return rc; +#ifdef SQLITE_TEST - /* blockid column is an alias for rowid. */ - *piBlockid = sqlite3_last_insert_rowid(v->db); - return SQLITE_OK; -} +/* #include */ +/* #include */ -/* delete from %_segments -** where blockid between [iStartBlockid] and [iEndBlockid] +/* +** Implementation of a special SQL scalar function for testing tokenizers +** designed to be used in concert with the Tcl testing framework. This +** function must be called with two or more arguments: ** -** Deletes the range of blocks, inclusive, used to delete the blocks -** which form a segment. -*/ -static int block_delete(fulltext_vtab *v, - sqlite_int64 iStartBlockid, sqlite_int64 iEndBlockid){ - sqlite3_stmt *s; - int rc = sql_get_statement(v, BLOCK_DELETE_STMT, &s); - if( rc!=SQLITE_OK ) return rc; - - rc = sqlite3_bind_int64(s, 1, iStartBlockid); - if( rc!=SQLITE_OK ) return rc; - - rc = sqlite3_bind_int64(s, 2, iEndBlockid); - if( rc!=SQLITE_OK ) return rc; - - return sql_single_step(s); -} - -/* Returns SQLITE_ROW with *pidx set to the maximum segment idx found -** at iLevel. Returns SQLITE_DONE if there are no segments at -** iLevel. Otherwise returns an error. -*/ -static int segdir_max_index(fulltext_vtab *v, int iLevel, int *pidx){ - sqlite3_stmt *s; - int rc = sql_get_statement(v, SEGDIR_MAX_INDEX_STMT, &s); - if( rc!=SQLITE_OK ) return rc; - - rc = sqlite3_bind_int(s, 1, iLevel); - if( rc!=SQLITE_OK ) return rc; - - rc = sqlite3_step(s); - /* Should always get at least one row due to how max() works. */ - if( rc==SQLITE_DONE ) return SQLITE_DONE; - if( rc!=SQLITE_ROW ) return rc; - - /* NULL means that there were no inputs to max(). */ - if( SQLITE_NULL==sqlite3_column_type(s, 0) ){ - rc = sqlite3_step(s); - if( rc==SQLITE_ROW ) return SQLITE_ERROR; - return rc; - } - - *pidx = sqlite3_column_int(s, 0); - - /* We expect only one row. We must execute another sqlite3_step() - * to complete the iteration; otherwise the table will remain locked. */ - rc = sqlite3_step(s); - if( rc==SQLITE_ROW ) return SQLITE_ERROR; - if( rc!=SQLITE_DONE ) return rc; - return SQLITE_ROW; -} - -/* insert into %_segdir values ( -** [iLevel], [idx], -** [iStartBlockid], [iLeavesEndBlockid], [iEndBlockid], -** [pRootData] -** ) +** SELECT (, ..., ); +** +** where is the name passed as the second argument +** to the sqlite3Fts3InitHashTable() function (e.g. 'fts3_tokenizer') +** concatenated with the string '_test' (e.g. 'fts3_tokenizer_test'). +** +** The return value is a string that may be interpreted as a Tcl +** list. For each token in the , three elements are +** added to the returned list. The first is the token position, the +** second is the token text (folded, stemmed, etc.) and the third is the +** substring of associated with the token. For example, +** using the built-in "simple" tokenizer: +** +** SELECT fts_tokenizer_test('simple', 'I don't see how'); +** +** will return the string: +** +** "{0 i I 1 dont don't 2 see see 3 how how}" +** */ -static int segdir_set(fulltext_vtab *v, int iLevel, int idx, - sqlite_int64 iStartBlockid, - sqlite_int64 iLeavesEndBlockid, - sqlite_int64 iEndBlockid, - const char *pRootData, int nRootData){ - sqlite3_stmt *s; - int rc = sql_get_statement(v, SEGDIR_SET_STMT, &s); - if( rc!=SQLITE_OK ) return rc; - - rc = sqlite3_bind_int(s, 1, iLevel); - if( rc!=SQLITE_OK ) return rc; - - rc = sqlite3_bind_int(s, 2, idx); - if( rc!=SQLITE_OK ) return rc; - - rc = sqlite3_bind_int64(s, 3, iStartBlockid); - if( rc!=SQLITE_OK ) return rc; - - rc = sqlite3_bind_int64(s, 4, iLeavesEndBlockid); - if( rc!=SQLITE_OK ) return rc; - - rc = sqlite3_bind_int64(s, 5, iEndBlockid); - if( rc!=SQLITE_OK ) return rc; +static void testFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + Fts3Hash *pHash; + sqlite3_tokenizer_module *p; + sqlite3_tokenizer *pTokenizer = 0; + sqlite3_tokenizer_cursor *pCsr = 0; - rc = sqlite3_bind_blob(s, 6, pRootData, nRootData, SQLITE_STATIC); - if( rc!=SQLITE_OK ) return rc; + const char *zErr = 0; - return sql_single_step(s); -} + const char *zName; + int nName; + const char *zInput; + int nInput; -/* Queries %_segdir for the block span of the segments in level -** iLevel. Returns SQLITE_DONE if there are no blocks for iLevel, -** SQLITE_ROW if there are blocks, else an error. -*/ -static int segdir_span(fulltext_vtab *v, int iLevel, - sqlite_int64 *piStartBlockid, - sqlite_int64 *piEndBlockid){ - sqlite3_stmt *s; - int rc = sql_get_statement(v, SEGDIR_SPAN_STMT, &s); - if( rc!=SQLITE_OK ) return rc; + const char *azArg[64]; - rc = sqlite3_bind_int(s, 1, iLevel); - if( rc!=SQLITE_OK ) return rc; + const char *zToken; + int nToken; + int iStart; + int iEnd; + int iPos; + int i; - rc = sqlite3_step(s); - if( rc==SQLITE_DONE ) return SQLITE_DONE; /* Should never happen */ - if( rc!=SQLITE_ROW ) return rc; + Tcl_Obj *pRet; - /* This happens if all segments at this level are entirely inline. */ - if( SQLITE_NULL==sqlite3_column_type(s, 0) ){ - /* We expect only one row. We must execute another sqlite3_step() - * to complete the iteration; otherwise the table will remain locked. */ - int rc2 = sqlite3_step(s); - if( rc2==SQLITE_ROW ) return SQLITE_ERROR; - return rc2; + if( argc<2 ){ + sqlite3_result_error(context, "insufficient arguments", -1); + return; } - *piStartBlockid = sqlite3_column_int64(s, 0); - *piEndBlockid = sqlite3_column_int64(s, 1); - - /* We expect only one row. We must execute another sqlite3_step() - * to complete the iteration; otherwise the table will remain locked. */ - rc = sqlite3_step(s); - if( rc==SQLITE_ROW ) return SQLITE_ERROR; - if( rc!=SQLITE_DONE ) return rc; - return SQLITE_ROW; -} + nName = sqlite3_value_bytes(argv[0]); + zName = (const char *)sqlite3_value_text(argv[0]); + nInput = sqlite3_value_bytes(argv[argc-1]); + zInput = (const char *)sqlite3_value_text(argv[argc-1]); -/* Delete the segment blocks and segment directory records for all -** segments at iLevel. -*/ -static int segdir_delete(fulltext_vtab *v, int iLevel){ - sqlite3_stmt *s; - sqlite_int64 iStartBlockid, iEndBlockid; - int rc = segdir_span(v, iLevel, &iStartBlockid, &iEndBlockid); - if( rc!=SQLITE_ROW && rc!=SQLITE_DONE ) return rc; + pHash = (Fts3Hash *)sqlite3_user_data(context); + p = (sqlite3_tokenizer_module *)sqlite3Fts3HashFind(pHash, zName, nName+1); - if( rc==SQLITE_ROW ){ - rc = block_delete(v, iStartBlockid, iEndBlockid); - if( rc!=SQLITE_OK ) return rc; + if( !p ){ + char *zErr = sqlite3_mprintf("unknown tokenizer: %s", zName); + sqlite3_result_error(context, zErr, -1); + sqlite3_free(zErr); + return; } - /* Delete the segment directory itself. */ - rc = sql_get_statement(v, SEGDIR_DELETE_STMT, &s); - if( rc!=SQLITE_OK ) return rc; - - rc = sqlite3_bind_int64(s, 1, iLevel); - if( rc!=SQLITE_OK ) return rc; + pRet = Tcl_NewObj(); + Tcl_IncrRefCount(pRet); - return sql_single_step(s); -} + for(i=1; ixCreate(argc-2, azArg, &pTokenizer) ){ + zErr = "error in xCreate()"; + goto finish; + } + pTokenizer->pModule = p; + if( sqlite3Fts3OpenTokenizer(pTokenizer, 0, zInput, nInput, &pCsr) ){ + zErr = "error in xOpen()"; + goto finish; + } - rc = sql_single_step(s); - if( rc!=SQLITE_OK ) return rc; + while( SQLITE_OK==p->xNext(pCsr, &zToken, &nToken, &iStart, &iEnd, &iPos) ){ + Tcl_ListObjAppendElement(0, pRet, Tcl_NewIntObj(iPos)); + Tcl_ListObjAppendElement(0, pRet, Tcl_NewStringObj(zToken, nToken)); + zToken = &zInput[iStart]; + nToken = iEnd-iStart; + Tcl_ListObjAppendElement(0, pRet, Tcl_NewStringObj(zToken, nToken)); + } - rc = sql_get_statement(v, BLOCK_DELETE_ALL_STMT, &s); - if( rc!=SQLITE_OK ) return rc; + if( SQLITE_OK!=p->xClose(pCsr) ){ + zErr = "error in xClose()"; + goto finish; + } + if( SQLITE_OK!=p->xDestroy(pTokenizer) ){ + zErr = "error in xDestroy()"; + goto finish; + } - return sql_single_step(s); +finish: + if( zErr ){ + sqlite3_result_error(context, zErr, -1); + }else{ + sqlite3_result_text(context, Tcl_GetString(pRet), -1, SQLITE_TRANSIENT); + } + Tcl_DecrRefCount(pRet); } -/* Returns SQLITE_OK with *pnSegments set to the number of entries in -** %_segdir and *piMaxLevel set to the highest level which has a -** segment. Otherwise returns the SQLite error which caused failure. -*/ -static int segdir_count(fulltext_vtab *v, int *pnSegments, int *piMaxLevel){ - sqlite3_stmt *s; - int rc = sql_get_statement(v, SEGDIR_COUNT_STMT, &s); - if( rc!=SQLITE_OK ) return rc; +static +int registerTokenizer( + sqlite3 *db, + char *zName, + const sqlite3_tokenizer_module *p +){ + int rc; + sqlite3_stmt *pStmt; + const char zSql[] = "SELECT fts3_tokenizer(?, ?)"; - rc = sqlite3_step(s); - /* TODO(shess): This case should not be possible? Should stronger - ** measures be taken if it happens? - */ - if( rc==SQLITE_DONE ){ - *pnSegments = 0; - *piMaxLevel = 0; - return SQLITE_OK; + rc = sqlite3_prepare_v2(db, zSql, -1, &pStmt, 0); + if( rc!=SQLITE_OK ){ + return rc; } - if( rc!=SQLITE_ROW ) return rc; - *pnSegments = sqlite3_column_int(s, 0); - *piMaxLevel = sqlite3_column_int(s, 1); + sqlite3_bind_text(pStmt, 1, zName, -1, SQLITE_STATIC); + sqlite3_bind_blob(pStmt, 2, &p, sizeof(p), SQLITE_STATIC); + sqlite3_step(pStmt); - /* We expect only one row. We must execute another sqlite3_step() - * to complete the iteration; otherwise the table will remain locked. */ - rc = sqlite3_step(s); - if( rc==SQLITE_DONE ) return SQLITE_OK; - if( rc==SQLITE_ROW ) return SQLITE_ERROR; - return rc; + return sqlite3_finalize(pStmt); } -/* TODO(shess) clearPendingTerms() is far down the file because -** writeZeroSegment() is far down the file because LeafWriter is far -** down the file. Consider refactoring the code to move the non-vtab -** code above the vtab code so that we don't need this forward -** reference. -*/ -static int clearPendingTerms(fulltext_vtab *v); - -/* -** Free the memory used to contain a fulltext_vtab structure. -*/ -static void fulltext_vtab_destroy(fulltext_vtab *v){ - int iStmt, i; +static +int queryTokenizer( + sqlite3 *db, + char *zName, + const sqlite3_tokenizer_module **pp +){ + int rc; + sqlite3_stmt *pStmt; + const char zSql[] = "SELECT fts3_tokenizer(?)"; - FTSTRACE(("FTS3 Destroy %p\n", v)); - for( iStmt=0; iStmtpFulltextStatements[iStmt]!=NULL ){ - sqlite3_finalize(v->pFulltextStatements[iStmt]); - v->pFulltextStatements[iStmt] = NULL; - } + *pp = 0; + rc = sqlite3_prepare_v2(db, zSql, -1, &pStmt, 0); + if( rc!=SQLITE_OK ){ + return rc; } - for( i=0; ipLeafSelectStmts[i]!=NULL ){ - sqlite3_finalize(v->pLeafSelectStmts[i]); - v->pLeafSelectStmts[i] = NULL; + sqlite3_bind_text(pStmt, 1, zName, -1, SQLITE_STATIC); + if( SQLITE_ROW==sqlite3_step(pStmt) ){ + if( sqlite3_column_type(pStmt, 0)==SQLITE_BLOB ){ + memcpy((void *)pp, sqlite3_column_blob(pStmt, 0), sizeof(*pp)); } } - if( v->pTokenizer!=NULL ){ - v->pTokenizer->pModule->xDestroy(v->pTokenizer); - v->pTokenizer = NULL; - } - - clearPendingTerms(v); - - sqlite3_free(v->azColumn); - for(i = 0; i < v->nColumn; ++i) { - sqlite3_free(v->azContentColumn[i]); - } - sqlite3_free(v->azContentColumn); - sqlite3_free(v); + return sqlite3_finalize(pStmt); } -/* -** Token types for parsing the arguments to xConnect or xCreate. -*/ -#define TOKEN_EOF 0 /* End of file */ -#define TOKEN_SPACE 1 /* Any kind of whitespace */ -#define TOKEN_ID 2 /* An identifier */ -#define TOKEN_STRING 3 /* A string literal */ -#define TOKEN_PUNCT 4 /* A single punctuation character */ +SQLITE_PRIVATE void sqlite3Fts3SimpleTokenizerModule(sqlite3_tokenizer_module const**ppModule); /* -** If X is a character that can be used in an identifier then -** ftsIdChar(X) will be true. Otherwise it is false. +** Implementation of the scalar function fts3_tokenizer_internal_test(). +** This function is used for testing only, it is not included in the +** build unless SQLITE_TEST is defined. ** -** For ASCII, any character with the high-order bit set is -** allowed in an identifier. For 7-bit characters, -** isFtsIdChar[X] must be 1. +** The purpose of this is to test that the fts3_tokenizer() function +** can be used as designed by the C-code in the queryTokenizer and +** registerTokenizer() functions above. These two functions are repeated +** in the README.tokenizer file as an example, so it is important to +** test them. +** +** To run the tests, evaluate the fts3_tokenizer_internal_test() scalar +** function with no arguments. An assert() will fail if a problem is +** detected. i.e.: +** +** SELECT fts3_tokenizer_internal_test(); ** -** Ticket #1066. the SQL standard does not allow '$' in the -** middle of identfiers. But many SQL implementations do. -** SQLite will allow '$' in identifiers for compatibility. -** But the feature is undocumented. */ -static const char isFtsIdChar[] = { -/* x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF */ - 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 2x */ - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, /* 3x */ - 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 4x */ - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, /* 5x */ - 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 6x */ - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, /* 7x */ -}; -#define ftsIdChar(C) (((c=C)&0x80)!=0 || (c>0x1f && isFtsIdChar[c-0x20])) +static void intTestFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + int rc; + const sqlite3_tokenizer_module *p1; + const sqlite3_tokenizer_module *p2; + sqlite3 *db = (sqlite3 *)sqlite3_user_data(context); + UNUSED_PARAMETER(argc); + UNUSED_PARAMETER(argv); -/* -** Return the length of the token that begins at z[0]. -** Store the token type in *tokenType before returning. -*/ -static int ftsGetToken(const char *z, int *tokenType){ - int i, c; - switch( *z ){ - case 0: { - *tokenType = TOKEN_EOF; - return 0; - } - case ' ': case '\t': case '\n': case '\f': case '\r': { - for(i=1; safe_isspace(z[i]); i++){} - *tokenType = TOKEN_SPACE; - return i; - } - case '`': - case '\'': - case '"': { - int delim = z[0]; - for(i=1; (c=z[i])!=0; i++){ - if( c==delim ){ - if( z[i+1]==delim ){ - i++; - }else{ - break; - } - } - } - *tokenType = TOKEN_STRING; - return i + (c!=0); - } - case '[': { - for(i=1, c=z[0]; c!=']' && (c=z[i])!=0; i++){} - *tokenType = TOKEN_ID; - return i; - } - default: { - if( !ftsIdChar(*z) ){ - break; - } - for(i=1; ftsIdChar(z[i]); i++){} - *tokenType = TOKEN_ID; - return i; - } - } - *tokenType = TOKEN_PUNCT; - return 1; -} + /* Test the query function */ + sqlite3Fts3SimpleTokenizerModule(&p1); + rc = queryTokenizer(db, "simple", &p2); + assert( rc==SQLITE_OK ); + assert( p1==p2 ); + rc = queryTokenizer(db, "nosuchtokenizer", &p2); + assert( rc==SQLITE_ERROR ); + assert( p2==0 ); + assert( 0==strcmp(sqlite3_errmsg(db), "unknown tokenizer: nosuchtokenizer") ); -/* -** A token extracted from a string is an instance of the following -** structure. -*/ -typedef struct FtsToken { - const char *z; /* Pointer to token text. Not '\000' terminated */ - short int n; /* Length of the token text in bytes. */ -} FtsToken; + /* Test the storage function */ + rc = registerTokenizer(db, "nosuchtokenizer", p1); + assert( rc==SQLITE_OK ); + rc = queryTokenizer(db, "nosuchtokenizer", &p2); + assert( rc==SQLITE_OK ); + assert( p2==p1 ); -/* -** Given a input string (which is really one of the argv[] parameters -** passed into xConnect or xCreate) split the string up into tokens. -** Return an array of pointers to '\000' terminated strings, one string -** for each non-whitespace token. -** -** The returned array is terminated by a single NULL pointer. -** -** Space to hold the returned array is obtained from a single -** malloc and should be freed by passing the return value to free(). -** The individual strings within the token list are all a part of -** the single memory allocation and will all be freed at once. -*/ -static char **tokenizeString(const char *z, int *pnToken){ - int nToken = 0; - FtsToken *aToken = sqlite3_malloc( strlen(z) * sizeof(aToken[0]) ); - int n = 1; - int e, i; - int totalSize = 0; - char **azToken; - char *zCopy; - while( n>0 ){ - n = ftsGetToken(z, &e); - if( e!=TOKEN_SPACE ){ - aToken[nToken].z = z; - aToken[nToken].n = n; - nToken++; - totalSize += n+1; - } - z += n; - } - azToken = (char**)sqlite3_malloc( nToken*sizeof(char*) + totalSize ); - zCopy = (char*)&azToken[nToken]; - nToken--; - for(i=0; i=0 ){ - azIn[j] = azIn[i]; - } - j++; - } - } - azIn[j] = 0; - } -} - - -/* -** Find the first alphanumeric token in the string zIn. Null-terminate -** this token. Remove any quotation marks. And return a pointer to -** the result. +** The third argument to this function, zName, is used as the name +** of both the scalar and, if created, the virtual table. */ -static char *firstToken(char *zIn, char **pzTail){ - int n, ttype; - while(1){ - n = ftsGetToken(zIn, &ttype); - if( ttype==TOKEN_SPACE ){ - zIn += n; - }else if( ttype==TOKEN_EOF ){ - *pzTail = zIn; - return 0; - }else{ - zIn[n] = 0; - *pzTail = &zIn[1]; - dequoteString(zIn); - return zIn; - } - } - /*NOTREACHED*/ -} +SQLITE_PRIVATE int sqlite3Fts3InitHashTable( + sqlite3 *db, + Fts3Hash *pHash, + const char *zName +){ + int rc = SQLITE_OK; + void *p = (void *)pHash; + const int any = SQLITE_ANY; -/* Return true if... -** -** * s begins with the string t, ignoring case -** * s is longer than t -** * The first character of s beyond t is not a alphanumeric -** -** Ignore leading space in *s. -** -** To put it another way, return true if the first token of -** s[] is t[]. -*/ -static int startsWith(const char *s, const char *t){ - while( safe_isspace(*s) ){ s++; } - while( *t ){ - if( safe_tolower(*s++)!=safe_tolower(*t++) ) return 0; +#ifdef SQLITE_TEST + char *zTest = 0; + char *zTest2 = 0; + void *pdb = (void *)db; + zTest = sqlite3_mprintf("%s_test", zName); + zTest2 = sqlite3_mprintf("%s_internal_test", zName); + if( !zTest || !zTest2 ){ + rc = SQLITE_NOMEM; } - return *s!='_' && !safe_isalnum(*s); -} - -/* -** An instance of this structure defines the "spec" of a -** full text index. This structure is populated by parseSpec -** and use by fulltextConnect and fulltextCreate. -*/ -typedef struct TableSpec { - const char *zDb; /* Logical database name */ - const char *zName; /* Name of the full-text index */ - int nColumn; /* Number of columns to be indexed */ - char **azColumn; /* Original names of columns to be indexed */ - char **azContentColumn; /* Column names for %_content */ - char **azTokenizer; /* Name of tokenizer and its arguments */ -} TableSpec; - -/* -** Reclaim all of the memory used by a TableSpec -*/ -static void clearTableSpec(TableSpec *p) { - sqlite3_free(p->azColumn); - sqlite3_free(p->azContentColumn); - sqlite3_free(p->azTokenizer); -} - -/* Parse a CREATE VIRTUAL TABLE statement, which looks like this: - * - * CREATE VIRTUAL TABLE email - * USING fts3(subject, body, tokenize mytokenizer(myarg)) - * - * We return parsed information in a TableSpec structure. - * - */ -static int parseSpec(TableSpec *pSpec, int argc, const char *const*argv, - char**pzErr){ - int i, n; - char *z, *zDummy; - char **azArg; - const char *zTokenizer = 0; /* argv[] entry describing the tokenizer */ - - assert( argc>=3 ); - /* Current interface: - ** argv[0] - module name - ** argv[1] - database name - ** argv[2] - table name - ** argv[3..] - columns, optionally followed by tokenizer specification - ** and snippet delimiters specification. - */ +#endif - /* Make a copy of the complete argv[][] array in a single allocation. - ** The argv[][] array is read-only and transient. We can write to the - ** copy in order to modify things and the copy is persistent. - */ - CLEAR(pSpec); - for(i=n=0; izDb = azArg[1]; - pSpec->zName = azArg[2]; - pSpec->nColumn = 0; - pSpec->azColumn = azArg; - zTokenizer = "tokenize simple"; - for(i=3; inColumn] = firstToken(azArg[i], &zDummy); - pSpec->nColumn++; - } + if( SQLITE_OK==rc ){ + rc = sqlite3_create_function(db, zName, 1, any, p, scalarFunc, 0, 0); } - if( pSpec->nColumn==0 ){ - azArg[0] = "content"; - pSpec->nColumn = 1; + if( SQLITE_OK==rc ){ + rc = sqlite3_create_function(db, zName, 2, any, p, scalarFunc, 0, 0); } - - /* - ** Construct the list of content column names. - ** - ** Each content column name will be of the form cNNAAAA - ** where NN is the column number and AAAA is the sanitized - ** column name. "sanitized" means that special characters are - ** converted to "_". The cNN prefix guarantees that all column - ** names are unique. - ** - ** The AAAA suffix is not strictly necessary. It is included - ** for the convenience of people who might examine the generated - ** %_content table and wonder what the columns are used for. - */ - pSpec->azContentColumn = sqlite3_malloc( pSpec->nColumn * sizeof(char *) ); - if( pSpec->azContentColumn==0 ){ - clearTableSpec(pSpec); - return SQLITE_NOMEM; +#ifdef SQLITE_TEST + if( SQLITE_OK==rc ){ + rc = sqlite3_create_function(db, zTest, -1, any, p, testFunc, 0, 0); } - for(i=0; inColumn; i++){ - char *p; - pSpec->azContentColumn[i] = sqlite3_mprintf("c%d%s", i, azArg[i]); - for (p = pSpec->azContentColumn[i]; *p ; ++p) { - if( !safe_isalnum(*p) ) *p = '_'; - } + if( SQLITE_OK==rc ){ + rc = sqlite3_create_function(db, zTest2, 0, any, pdb, intTestFunc, 0, 0); } +#endif - /* - ** Parse the tokenizer specification string. - */ - pSpec->azTokenizer = tokenizeString(zTokenizer, &n); - tokenListToIdList(pSpec->azTokenizer); +#ifdef SQLITE_TEST + sqlite3_free(zTest); + sqlite3_free(zTest2); +#endif - return SQLITE_OK; + return rc; } +#endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) */ + +/************** End of fts3_tokenizer.c **************************************/ +/************** Begin file fts3_tokenizer1.c *********************************/ /* -** Generate a CREATE TABLE statement that describes the schema of -** the virtual table. Return a pointer to this schema string. +** 2006 Oct 10 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +****************************************************************************** ** -** Space is obtained from sqlite3_mprintf() and should be freed -** using sqlite3_free(). +** Implementation of the "simple" full-text-search tokenizer. */ -static char *fulltextSchema( - int nColumn, /* Number of columns */ - const char *const* azColumn, /* List of columns */ - const char *zTableName /* Name of the table */ -){ - int i; - char *zSchema, *zNext; - const char *zSep = "("; - zSchema = sqlite3_mprintf("CREATE TABLE x"); - for(i=0; ibase */ - v->db = db; - v->zDb = spec->zDb; /* Freed when azColumn is freed */ - v->zName = spec->zName; /* Freed when azColumn is freed */ - v->nColumn = spec->nColumn; - v->azContentColumn = spec->azContentColumn; - spec->azContentColumn = 0; - v->azColumn = spec->azColumn; - spec->azColumn = 0; - - if( spec->azTokenizer==0 ){ - return SQLITE_NOMEM; - } - - zTok = spec->azTokenizer[0]; - if( !zTok ){ - zTok = "simple"; - } - nTok = strlen(zTok)+1; - - m = (sqlite3_tokenizer_module *)sqlite3Fts3HashFind(pHash, zTok, nTok); - if( !m ){ - *pzErr = sqlite3_mprintf("unknown tokenizer: %s", spec->azTokenizer[0]); - rc = SQLITE_ERROR; - goto err; - } - - for(n=0; spec->azTokenizer[n]; n++){} - if( n ){ - rc = m->xCreate(n-1, (const char*const*)&spec->azTokenizer[1], - &v->pTokenizer); - }else{ - rc = m->xCreate(0, 0, &v->pTokenizer); - } - if( rc!=SQLITE_OK ) goto err; - v->pTokenizer->pModule = m; - /* TODO: verify the existence of backing tables foo_content, foo_term */ +/* +** The code in this file is only compiled if: +** +** * The FTS3 module is being built as an extension +** (in which case SQLITE_CORE is not defined), or +** +** * The FTS3 module is being built into the core of +** SQLite (in which case SQLITE_ENABLE_FTS3 is defined). +*/ +#if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) - schema = fulltextSchema(v->nColumn, (const char*const*)v->azColumn, - spec->zName); - rc = sqlite3_declare_vtab(db, schema); - sqlite3_free(schema); - if( rc!=SQLITE_OK ) goto err; +/* #include */ +/* #include */ +/* #include */ +/* #include */ - memset(v->pFulltextStatements, 0, sizeof(v->pFulltextStatements)); - /* Indicate that the buffer is not live. */ - v->nPendingData = -1; +typedef struct simple_tokenizer { + sqlite3_tokenizer base; + char delim[128]; /* flag ASCII delimiters */ +} simple_tokenizer; - *ppVTab = &v->base; - FTSTRACE(("FTS3 Connect %p\n", v)); +typedef struct simple_tokenizer_cursor { + sqlite3_tokenizer_cursor base; + const char *pInput; /* input we are tokenizing */ + int nBytes; /* size of the input */ + int iOffset; /* current position in pInput */ + int iToken; /* index of next token to be returned */ + char *pToken; /* storage for current token */ + int nTokenAllocated; /* space allocated to zToken buffer */ +} simple_tokenizer_cursor; - return rc; -err: - fulltext_vtab_destroy(v); - return rc; +static int simpleDelim(simple_tokenizer *t, unsigned char c){ + return c<0x80 && t->delim[c]; } - -static int fulltextConnect( - sqlite3 *db, - void *pAux, - int argc, const char *const*argv, - sqlite3_vtab **ppVTab, - char **pzErr -){ - TableSpec spec; - int rc = parseSpec(&spec, argc, argv, pzErr); - if( rc!=SQLITE_OK ) return rc; - - rc = constructVtab(db, (fts3Hash *)pAux, &spec, ppVTab, pzErr); - clearTableSpec(&spec); - return rc; +static int fts3_isalnum(int x){ + return (x>='0' && x<='9') || (x>='A' && x<='Z') || (x>='a' && x<='z'); } -/* The %_content table holds the text of each document, with -** the docid column exposed as the SQLite rowid for the table. -*/ -/* TODO(shess) This comment needs elaboration to match the updated -** code. Work it into the top-of-file comment at that time. +/* +** Create a new tokenizer instance. */ -static int fulltextCreate(sqlite3 *db, void *pAux, - int argc, const char * const *argv, - sqlite3_vtab **ppVTab, char **pzErr){ - int rc; - TableSpec spec; - StringBuffer schema; - FTSTRACE(("FTS3 Create\n")); - - rc = parseSpec(&spec, argc, argv, pzErr); - if( rc!=SQLITE_OK ) return rc; - - initStringBuffer(&schema); - append(&schema, "CREATE TABLE %_content("); - append(&schema, " docid INTEGER PRIMARY KEY,"); - appendList(&schema, spec.nColumn, spec.azContentColumn); - append(&schema, ")"); - rc = sql_exec(db, spec.zDb, spec.zName, stringBufferData(&schema)); - stringBufferDestroy(&schema); - if( rc!=SQLITE_OK ) goto out; - - rc = sql_exec(db, spec.zDb, spec.zName, - "create table %_segments(" - " blockid INTEGER PRIMARY KEY," - " block blob" - ");" - ); - if( rc!=SQLITE_OK ) goto out; - - rc = sql_exec(db, spec.zDb, spec.zName, - "create table %_segdir(" - " level integer," - " idx integer," - " start_block integer," - " leaves_end_block integer," - " end_block integer," - " root blob," - " primary key(level, idx)" - ");"); - if( rc!=SQLITE_OK ) goto out; - - rc = constructVtab(db, (fts3Hash *)pAux, &spec, ppVTab, pzErr); - -out: - clearTableSpec(&spec); - return rc; -} +static int simpleCreate( + int argc, const char * const *argv, + sqlite3_tokenizer **ppTokenizer +){ + simple_tokenizer *t; -/* Decide how to handle an SQL query. */ -static int fulltextBestIndex(sqlite3_vtab *pVTab, sqlite3_index_info *pInfo){ - fulltext_vtab *v = (fulltext_vtab *)pVTab; - int i; - FTSTRACE(("FTS3 BestIndex\n")); - - for(i=0; inConstraint; ++i){ - const struct sqlite3_index_constraint *pConstraint; - pConstraint = &pInfo->aConstraint[i]; - if( pConstraint->usable ) { - if( (pConstraint->iColumn==-1 || pConstraint->iColumn==v->nColumn+1) && - pConstraint->op==SQLITE_INDEX_CONSTRAINT_EQ ){ - pInfo->idxNum = QUERY_DOCID; /* lookup by docid */ - FTSTRACE(("FTS3 QUERY_DOCID\n")); - } else if( pConstraint->iColumn>=0 && pConstraint->iColumn<=v->nColumn && - pConstraint->op==SQLITE_INDEX_CONSTRAINT_MATCH ){ - /* full-text search */ - pInfo->idxNum = QUERY_FULLTEXT + pConstraint->iColumn; - FTSTRACE(("FTS3 QUERY_FULLTEXT %d\n", pConstraint->iColumn)); - } else continue; - - pInfo->aConstraintUsage[i].argvIndex = 1; - pInfo->aConstraintUsage[i].omit = 1; - - /* An arbitrary value for now. - * TODO: Perhaps docid matches should be considered cheaper than - * full-text searches. */ - pInfo->estimatedCost = 1.0; + t = (simple_tokenizer *) sqlite3_malloc(sizeof(*t)); + if( t==NULL ) return SQLITE_NOMEM; + memset(t, 0, sizeof(*t)); - return SQLITE_OK; + /* TODO(shess) Delimiters need to remain the same from run to run, + ** else we need to reindex. One solution would be a meta-table to + ** track such information in the database, then we'd only want this + ** information on the initial create. + */ + if( argc>1 ){ + int i, n = (int)strlen(argv[1]); + for(i=0; i=0x80 ){ + sqlite3_free(t); + return SQLITE_ERROR; + } + t->delim[ch] = 1; + } + } else { + /* Mark non-alphanumeric ASCII characters as delimiters */ + int i; + for(i=1; i<0x80; i++){ + t->delim[i] = !fts3_isalnum(i) ? -1 : 0; } } - pInfo->idxNum = QUERY_GENERIC; + + *ppTokenizer = &t->base; return SQLITE_OK; } -static int fulltextDisconnect(sqlite3_vtab *pVTab){ - FTSTRACE(("FTS3 Disconnect %p\n", pVTab)); - fulltext_vtab_destroy((fulltext_vtab *)pVTab); +/* +** Destroy a tokenizer +*/ +static int simpleDestroy(sqlite3_tokenizer *pTokenizer){ + sqlite3_free(pTokenizer); return SQLITE_OK; } -static int fulltextDestroy(sqlite3_vtab *pVTab){ - fulltext_vtab *v = (fulltext_vtab *)pVTab; - int rc; - - FTSTRACE(("FTS3 Destroy %p\n", pVTab)); - rc = sql_exec(v->db, v->zDb, v->zName, - "drop table if exists %_content;" - "drop table if exists %_segments;" - "drop table if exists %_segdir;" - ); - if( rc!=SQLITE_OK ) return rc; +/* +** Prepare to begin tokenizing a particular string. The input +** string to be tokenized is pInput[0..nBytes-1]. A cursor +** used to incrementally tokenize this string is returned in +** *ppCursor. +*/ +static int simpleOpen( + sqlite3_tokenizer *pTokenizer, /* The tokenizer */ + const char *pInput, int nBytes, /* String to be tokenized */ + sqlite3_tokenizer_cursor **ppCursor /* OUT: Tokenization cursor */ +){ + simple_tokenizer_cursor *c; - fulltext_vtab_destroy((fulltext_vtab *)pVTab); - return SQLITE_OK; -} + UNUSED_PARAMETER(pTokenizer); -static int fulltextOpen(sqlite3_vtab *pVTab, sqlite3_vtab_cursor **ppCursor){ - fulltext_cursor *c; + c = (simple_tokenizer_cursor *) sqlite3_malloc(sizeof(*c)); + if( c==NULL ) return SQLITE_NOMEM; - c = (fulltext_cursor *) sqlite3_malloc(sizeof(fulltext_cursor)); - if( c ){ - memset(c, 0, sizeof(fulltext_cursor)); - /* sqlite will initialize c->base */ - *ppCursor = &c->base; - FTSTRACE(("FTS3 Open %p: %p\n", pVTab, c)); - return SQLITE_OK; + c->pInput = pInput; + if( pInput==0 ){ + c->nBytes = 0; + }else if( nBytes<0 ){ + c->nBytes = (int)strlen(pInput); }else{ - return SQLITE_NOMEM; + c->nBytes = nBytes; } + c->iOffset = 0; /* start tokenizing at the beginning */ + c->iToken = 0; + c->pToken = NULL; /* no space allocated, yet. */ + c->nTokenAllocated = 0; + + *ppCursor = &c->base; + return SQLITE_OK; } -/* Free all of the dynamically allocated memory held by the -** Snippet +/* +** Close a tokenization cursor previously opened by a call to +** simpleOpen() above. */ -static void snippetClear(Snippet *p){ - sqlite3_free(p->aMatch); - sqlite3_free(p->zOffset); - sqlite3_free(p->zSnippet); - CLEAR(p); +static int simpleClose(sqlite3_tokenizer_cursor *pCursor){ + simple_tokenizer_cursor *c = (simple_tokenizer_cursor *) pCursor; + sqlite3_free(c->pToken); + sqlite3_free(c); + return SQLITE_OK; } /* -** Append a single entry to the p->aMatch[] log. +** Extract the next token from a tokenization cursor. The cursor must +** have been opened by a prior call to simpleOpen(). */ -static void snippetAppendMatch( - Snippet *p, /* Append the entry to this snippet */ - int iCol, int iTerm, /* The column and query term */ - int iToken, /* Matching token in document */ - int iStart, int nByte /* Offset and size of the match */ +static int simpleNext( + sqlite3_tokenizer_cursor *pCursor, /* Cursor returned by simpleOpen */ + const char **ppToken, /* OUT: *ppToken is the token text */ + int *pnBytes, /* OUT: Number of bytes in token */ + int *piStartOffset, /* OUT: Starting offset of token */ + int *piEndOffset, /* OUT: Ending offset of token */ + int *piPosition /* OUT: Position integer of token */ ){ - int i; - struct snippetMatch *pMatch; - if( p->nMatch+1>=p->nAlloc ){ - p->nAlloc = p->nAlloc*2 + 10; - p->aMatch = sqlite3_realloc(p->aMatch, p->nAlloc*sizeof(p->aMatch[0]) ); - if( p->aMatch==0 ){ - p->nMatch = 0; - p->nAlloc = 0; - return; - } - } - i = p->nMatch++; - pMatch = &p->aMatch[i]; - pMatch->iCol = iCol; - pMatch->iTerm = iTerm; - pMatch->iToken = iToken; - pMatch->iStart = iStart; - pMatch->nByte = nByte; -} + simple_tokenizer_cursor *c = (simple_tokenizer_cursor *) pCursor; + simple_tokenizer *t = (simple_tokenizer *) pCursor->pTokenizer; + unsigned char *p = (unsigned char *)c->pInput; -/* -** Sizing information for the circular buffer used in snippetOffsetsOfColumn() -*/ -#define FTS3_ROTOR_SZ (32) -#define FTS3_ROTOR_MASK (FTS3_ROTOR_SZ-1) + while( c->iOffsetnBytes ){ + int iStartOffset; -/* -** Function to iterate through the tokens of a compiled expression. -** -** Except, skip all tokens on the right-hand side of a NOT operator. -** This function is used to find tokens as part of snippet and offset -** generation and we do nt want snippets and offsets to report matches -** for tokens on the RHS of a NOT. -*/ -static int fts3NextExprToken(Fts3Expr **ppExpr, int *piToken){ - Fts3Expr *p = *ppExpr; - int iToken = *piToken; - if( iToken<0 ){ - /* In this case the expression p is the root of an expression tree. - ** Move to the first token in the expression tree. - */ - while( p->pLeft ){ - p = p->pLeft; + /* Scan past delimiter characters */ + while( c->iOffsetnBytes && simpleDelim(t, p[c->iOffset]) ){ + c->iOffset++; } - iToken = 0; - }else{ - assert(p && p->eType==FTSQUERY_PHRASE ); - if( iToken<(p->pPhrase->nToken-1) ){ - iToken++; - }else{ - iToken = 0; - while( p->pParent && p->pParent->pLeft!=p ){ - assert( p->pParent->pRight==p ); - p = p->pParent; + + /* Count non-delimiter characters. */ + iStartOffset = c->iOffset; + while( c->iOffsetnBytes && !simpleDelim(t, p[c->iOffset]) ){ + c->iOffset++; + } + + if( c->iOffset>iStartOffset ){ + int i, n = c->iOffset-iStartOffset; + if( n>c->nTokenAllocated ){ + char *pNew; + c->nTokenAllocated = n+20; + pNew = sqlite3_realloc(c->pToken, c->nTokenAllocated); + if( !pNew ) return SQLITE_NOMEM; + c->pToken = pNew; } - p = p->pParent; - if( p ){ - assert( p->pRight!=0 ); - p = p->pRight; - while( p->pLeft ){ - p = p->pLeft; - } + for(i=0; ipToken[i] = (char)((ch>='A' && ch<='Z') ? ch-'A'+'a' : ch); } + *ppToken = c->pToken; + *pnBytes = n; + *piStartOffset = iStartOffset; + *piEndOffset = c->iOffset; + *piPosition = c->iToken++; + + return SQLITE_OK; } } - - *ppExpr = p; - *piToken = iToken; - return p?1:0; + return SQLITE_DONE; } /* -** Return TRUE if the expression node pExpr is located beneath the -** RHS of a NOT operator. +** The set of routines that implement the simple tokenizer */ -static int fts3ExprBeneathNot(Fts3Expr *p){ - Fts3Expr *pParent; - while( p ){ - pParent = p->pParent; - if( pParent && pParent->eType==FTSQUERY_NOT && pParent->pRight==p ){ - return 1; - } - p = pParent; - } - return 0; -} +static const sqlite3_tokenizer_module simpleTokenizerModule = { + 0, + simpleCreate, + simpleDestroy, + simpleOpen, + simpleClose, + simpleNext, + 0, +}; /* -** Add entries to pSnippet->aMatch[] for every match that occurs against -** document zDoc[0..nDoc-1] which is stored in column iColumn. +** Allocate a new simple tokenizer. Return a pointer to the new +** tokenizer in *ppModule */ -static void snippetOffsetsOfColumn( - fulltext_cursor *pCur, /* The fulltest search cursor */ - Snippet *pSnippet, /* The Snippet object to be filled in */ - int iColumn, /* Index of fulltext table column */ - const char *zDoc, /* Text of the fulltext table column */ - int nDoc /* Length of zDoc in bytes */ +SQLITE_PRIVATE void sqlite3Fts3SimpleTokenizerModule( + sqlite3_tokenizer_module const**ppModule ){ - const sqlite3_tokenizer_module *pTModule; /* The tokenizer module */ - sqlite3_tokenizer *pTokenizer; /* The specific tokenizer */ - sqlite3_tokenizer_cursor *pTCursor; /* Tokenizer cursor */ - fulltext_vtab *pVtab; /* The full text index */ - int nColumn; /* Number of columns in the index */ - int i, j; /* Loop counters */ - int rc; /* Return code */ - unsigned int match, prevMatch; /* Phrase search bitmasks */ - const char *zToken; /* Next token from the tokenizer */ - int nToken; /* Size of zToken */ - int iBegin, iEnd, iPos; /* Offsets of beginning and end */ - - /* The following variables keep a circular buffer of the last - ** few tokens */ - unsigned int iRotor = 0; /* Index of current token */ - int iRotorBegin[FTS3_ROTOR_SZ]; /* Beginning offset of token */ - int iRotorLen[FTS3_ROTOR_SZ]; /* Length of token */ - - pVtab = cursor_vtab(pCur); - nColumn = pVtab->nColumn; - pTokenizer = pVtab->pTokenizer; - pTModule = pTokenizer->pModule; - rc = pTModule->xOpen(pTokenizer, zDoc, nDoc, &pTCursor); - if( rc ) return; - pTCursor->pTokenizer = pTokenizer; - - prevMatch = 0; - while( !pTModule->xNext(pTCursor, &zToken, &nToken, &iBegin, &iEnd, &iPos) ){ - Fts3Expr *pIter = pCur->pExpr; - int iIter = -1; - iRotorBegin[iRotor&FTS3_ROTOR_MASK] = iBegin; - iRotorLen[iRotor&FTS3_ROTOR_MASK] = iEnd-iBegin; - match = 0; - for(i=0; i<(FTS3_ROTOR_SZ-1) && fts3NextExprToken(&pIter, &iIter); i++){ - int nPhrase; /* Number of tokens in current phrase */ - struct PhraseToken *pToken; /* Current token */ - int iCol; /* Column index */ - - if( fts3ExprBeneathNot(pIter) ) continue; - nPhrase = pIter->pPhrase->nToken; - pToken = &pIter->pPhrase->aToken[iIter]; - iCol = pIter->pPhrase->iColumn; - if( iCol>=0 && iColn>nToken ) continue; - if( !pToken->isPrefix && pToken->nn<=nToken ); - if( memcmp(pToken->z, zToken, pToken->n) ) continue; - if( iIter>0 && (prevMatch & (1<=0; j--){ - int k = (iRotor-j) & FTS3_ROTOR_MASK; - snippetAppendMatch(pSnippet, iColumn, i-j, iPos-j, - iRotorBegin[k], iRotorLen[k]); - } - } - } - prevMatch = match<<1; - iRotor++; - } - pTModule->xClose(pTCursor); + *ppModule = &simpleTokenizerModule; } +#endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) */ + +/************** End of fts3_tokenizer1.c *************************************/ +/************** Begin file fts3_write.c **************************************/ /* -** Remove entries from the pSnippet structure to account for the NEAR -** operator. When this is called, pSnippet contains the list of token -** offsets produced by treating all NEAR operators as AND operators. -** This function removes any entries that should not be present after -** accounting for the NEAR restriction. For example, if the queried -** document is: +** 2009 Oct 23 ** -** "A B C D E A" -** -** and the query is: -** -** A NEAR/0 E +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: ** -** then when this function is called the Snippet contains token offsets -** 0, 4 and 5. This function removes the "0" entry (because the first A -** is not near enough to an E). +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. ** -** When this function is called, the value pointed to by parameter piLeft is -** the integer id of the left-most token in the expression tree headed by -** pExpr. This function increments *piLeft by the total number of tokens -** in the expression tree headed by pExpr. +****************************************************************************** ** -** Return 1 if any trimming occurs. Return 0 if no trimming is required. +** This file is part of the SQLite FTS3 extension module. Specifically, +** this file contains code to insert, update and delete rows from FTS3 +** tables. It also contains code to merge FTS3 b-tree segments. Some +** of the sub-routines used to merge segments are also used by the query +** code in fts3.c. */ -static int trimSnippetOffsets( - Fts3Expr *pExpr, /* The search expression */ - Snippet *pSnippet, /* The set of snippet offsets to be trimmed */ - int *piLeft /* Index of left-most token in pExpr */ -){ - if( pExpr ){ - if( trimSnippetOffsets(pExpr->pLeft, pSnippet, piLeft) ){ - return 1; - } - switch( pExpr->eType ){ - case FTSQUERY_PHRASE: - *piLeft += pExpr->pPhrase->nToken; - break; - case FTSQUERY_NEAR: { - /* The right-hand-side of a NEAR operator is always a phrase. The - ** left-hand-side is either a phrase or an expression tree that is - ** itself headed by a NEAR operator. The following initializations - ** set local variable iLeft to the token number of the left-most - ** token in the right-hand phrase, and iRight to the right most - ** token in the same phrase. For example, if we had: - ** - **
    MATCH '"abc def" NEAR/2 "ghi jkl"' - ** - ** then iLeft will be set to 2 (token number of ghi) and nToken will - ** be set to 4. - */ - Fts3Expr *pLeft = pExpr->pLeft; - Fts3Expr *pRight = pExpr->pRight; - int iLeft = *piLeft; - int nNear = pExpr->nNear; - int nToken = pRight->pPhrase->nToken; - int jj, ii; - if( pLeft->eType==FTSQUERY_NEAR ){ - pLeft = pLeft->pRight; - } - assert( pRight->eType==FTSQUERY_PHRASE ); - assert( pLeft->eType==FTSQUERY_PHRASE ); - nToken += pLeft->pPhrase->nToken; - - for(ii=0; iinMatch; ii++){ - struct snippetMatch *p = &pSnippet->aMatch[ii]; - if( p->iTerm==iLeft ){ - int isOk = 0; - /* Snippet ii is an occurence of query term iLeft in the document. - ** It occurs at position (p->iToken) of the document. We now - ** search for an instance of token (iLeft-1) somewhere in the - ** range (p->iToken - nNear)...(p->iToken + nNear + nToken) within - ** the set of snippetMatch structures. If one is found, proceed. - ** If one cannot be found, then remove snippets ii..(ii+N-1) - ** from the matching snippets, where N is the number of tokens - ** in phrase pRight->pPhrase. - */ - for(jj=0; isOk==0 && jjnMatch; jj++){ - struct snippetMatch *p2 = &pSnippet->aMatch[jj]; - if( p2->iTerm==(iLeft-1) ){ - if( p2->iToken>=(p->iToken-nNear-1) - && p2->iToken<(p->iToken+nNear+nToken) - ){ - isOk = 1; - } - } - } - if( !isOk ){ - int kk; - for(kk=0; kkpPhrase->nToken; kk++){ - pSnippet->aMatch[kk+ii].iTerm = -2; - } - return 1; - } - } - if( p->iTerm==(iLeft-1) ){ - int isOk = 0; - for(jj=0; isOk==0 && jjnMatch; jj++){ - struct snippetMatch *p2 = &pSnippet->aMatch[jj]; - if( p2->iTerm==iLeft ){ - if( p2->iToken<=(p->iToken+nNear+1) - && p2->iToken>(p->iToken-nNear-nToken) - ){ - isOk = 1; - } - } - } - if( !isOk ){ - int kk; - for(kk=0; kkpPhrase->nToken; kk++){ - pSnippet->aMatch[ii-kk].iTerm = -2; - } - return 1; - } - } - } - break; - } - } +#if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) + +/* #include */ +/* #include */ +/* #include */ - if( trimSnippetOffsets(pExpr->pRight, pSnippet, piLeft) ){ - return 1; - } - } - return 0; -} + +#define FTS_MAX_APPENDABLE_HEIGHT 16 /* -** Compute all offsets for the current row of the query. -** If the offsets have already been computed, this routine is a no-op. +** When full-text index nodes are loaded from disk, the buffer that they +** are loaded into has the following number of bytes of padding at the end +** of it. i.e. if a full-text index node is 900 bytes in size, then a buffer +** of 920 bytes is allocated for it. +** +** This means that if we have a pointer into a buffer containing node data, +** it is always safe to read up to two varints from it without risking an +** overread, even if the node data is corrupted. */ -static void snippetAllOffsets(fulltext_cursor *p){ - int nColumn; - int iColumn, i; - int iFirst, iLast; - int iTerm = 0; - fulltext_vtab *pFts = cursor_vtab(p); - - if( p->snippet.nMatch || p->pExpr==0 ){ - return; - } - nColumn = pFts->nColumn; - iColumn = (p->iCursorType - QUERY_FULLTEXT); - if( iColumn<0 || iColumn>=nColumn ){ - /* Look for matches over all columns of the full-text index */ - iFirst = 0; - iLast = nColumn-1; - }else{ - /* Look for matches in the iColumn-th column of the index only */ - iFirst = iColumn; - iLast = iColumn; - } - for(i=iFirst; i<=iLast; i++){ - const char *zDoc; - int nDoc; - zDoc = (const char*)sqlite3_column_text(p->pStmt, i+1); - nDoc = sqlite3_column_bytes(p->pStmt, i+1); - snippetOffsetsOfColumn(p, &p->snippet, i, zDoc, nDoc); - } +#define FTS3_NODE_PADDING (FTS3_VARINT_MAX*2) - while( trimSnippetOffsets(p->pExpr, &p->snippet, &iTerm) ){ - iTerm = 0; - } -} +/* +** Under certain circumstances, b-tree nodes (doclists) can be loaded into +** memory incrementally instead of all at once. This can be a big performance +** win (reduced IO and CPU) if SQLite stops calling the virtual table xNext() +** method before retrieving all query results (as may happen, for example, +** if a query has a LIMIT clause). +** +** Incremental loading is used for b-tree nodes FTS3_NODE_CHUNK_THRESHOLD +** bytes and larger. Nodes are loaded in chunks of FTS3_NODE_CHUNKSIZE bytes. +** The code is written so that the hard lower-limit for each of these values +** is 1. Clearly such small values would be inefficient, but can be useful +** for testing purposes. +** +** If this module is built with SQLITE_TEST defined, these constants may +** be overridden at runtime for testing purposes. File fts3_test.c contains +** a Tcl interface to read and write the values. +*/ +#ifdef SQLITE_TEST +int test_fts3_node_chunksize = (4*1024); +int test_fts3_node_chunk_threshold = (4*1024)*4; +# define FTS3_NODE_CHUNKSIZE test_fts3_node_chunksize +# define FTS3_NODE_CHUNK_THRESHOLD test_fts3_node_chunk_threshold +#else +# define FTS3_NODE_CHUNKSIZE (4*1024) +# define FTS3_NODE_CHUNK_THRESHOLD (FTS3_NODE_CHUNKSIZE*4) +#endif /* -** Convert the information in the aMatch[] array of the snippet -** into the string zOffset[0..nOffset-1]. This string is used as -** the return of the SQL offsets() function. +** The two values that may be meaningfully bound to the :1 parameter in +** statements SQL_REPLACE_STAT and SQL_SELECT_STAT. */ -static void snippetOffsetText(Snippet *p){ - int i; - int cnt = 0; - StringBuffer sb; - char zBuf[200]; - if( p->zOffset ) return; - initStringBuffer(&sb); - for(i=0; inMatch; i++){ - struct snippetMatch *pMatch = &p->aMatch[i]; - if( pMatch->iTerm>=0 ){ - /* If snippetMatch.iTerm is less than 0, then the match was - ** discarded as part of processing the NEAR operator (see the - ** trimSnippetOffsetsForNear() function for details). Ignore - ** it in this case - */ - zBuf[0] = ' '; - sqlite3_snprintf(sizeof(zBuf)-1, &zBuf[cnt>0], "%d %d %d %d", - pMatch->iCol, pMatch->iTerm, pMatch->iStart, pMatch->nByte); - append(&sb, zBuf); - cnt++; - } - } - p->zOffset = stringBufferData(&sb); - p->nOffset = stringBufferLength(&sb); -} +#define FTS_STAT_DOCTOTAL 0 +#define FTS_STAT_INCRMERGEHINT 1 +#define FTS_STAT_AUTOINCRMERGE 2 /* -** zDoc[0..nDoc-1] is phrase of text. aMatch[0..nMatch-1] are a set -** of matching words some of which might be in zDoc. zDoc is column -** number iCol. -** -** iBreak is suggested spot in zDoc where we could begin or end an -** excerpt. Return a value similar to iBreak but possibly adjusted -** to be a little left or right so that the break point is better. +** If FTS_LOG_MERGES is defined, call sqlite3_log() to report each automatic +** and incremental merge operation that takes place. This is used for +** debugging FTS only, it should not usually be turned on in production +** systems. */ -static int wordBoundary( - int iBreak, /* The suggested break point */ - const char *zDoc, /* Document text */ - int nDoc, /* Number of bytes in zDoc[] */ - struct snippetMatch *aMatch, /* Matching words */ - int nMatch, /* Number of entries in aMatch[] */ - int iCol /* The column number for zDoc[] */ -){ - int i; - if( iBreak<=10 ){ - return 0; - } - if( iBreak>=nDoc-10 ){ - return nDoc; - } - for(i=0; i0 && aMatch[i-1].iStart+aMatch[i-1].nByte>=iBreak ){ - return aMatch[i-1].iStart; - } - } - for(i=1; i<=10; i++){ - if( safe_isspace(zDoc[iBreak-i]) ){ - return iBreak - i + 1; - } - if( safe_isspace(zDoc[iBreak+i]) ){ - return iBreak + i + 1; - } - } - return iBreak; +#ifdef FTS3_LOG_MERGES +static void fts3LogMerge(int nMerge, sqlite3_int64 iAbsLevel){ + sqlite3_log(SQLITE_OK, "%d-way merge from level %d", nMerge, (int)iAbsLevel); } +#else +#define fts3LogMerge(x, y) +#endif +typedef struct PendingList PendingList; +typedef struct SegmentNode SegmentNode; +typedef struct SegmentWriter SegmentWriter; /* -** Allowed values for Snippet.aMatch[].snStatus +** An instance of the following data structure is used to build doclists +** incrementally. See function fts3PendingListAppend() for details. */ -#define SNIPPET_IGNORE 0 /* It is ok to omit this match from the snippet */ -#define SNIPPET_DESIRED 1 /* We want to include this match in the snippet */ +struct PendingList { + int nData; + char *aData; + int nSpace; + sqlite3_int64 iLastDocid; + sqlite3_int64 iLastCol; + sqlite3_int64 iLastPos; +}; + /* -** Generate the text of a snippet. +** Each cursor has a (possibly empty) linked list of the following objects. */ -static void snippetText( - fulltext_cursor *pCursor, /* The cursor we need the snippet for */ - const char *zStartMark, /* Markup to appear before each match */ - const char *zEndMark, /* Markup to appear after each match */ - const char *zEllipsis /* Ellipsis mark */ -){ - int i, j; - struct snippetMatch *aMatch; - int nMatch; - int nDesired; - StringBuffer sb; - int tailCol; - int tailOffset; - int iCol; - int nDoc; - const char *zDoc; - int iStart, iEnd; - int tailEllipsis = 0; - int iMatch; - +struct Fts3DeferredToken { + Fts3PhraseToken *pToken; /* Pointer to corresponding expr token */ + int iCol; /* Column token must occur in */ + Fts3DeferredToken *pNext; /* Next in list of deferred tokens */ + PendingList *pList; /* Doclist is assembled here */ +}; - sqlite3_free(pCursor->snippet.zSnippet); - pCursor->snippet.zSnippet = 0; - aMatch = pCursor->snippet.aMatch; - nMatch = pCursor->snippet.nMatch; - initStringBuffer(&sb); - - for(i=0; i0; i++){ - if( aMatch[i].snStatus!=SNIPPET_DESIRED ) continue; - nDesired--; - iCol = aMatch[i].iCol; - zDoc = (const char*)sqlite3_column_text(pCursor->pStmt, iCol+1); - nDoc = sqlite3_column_bytes(pCursor->pStmt, iCol+1); - iStart = aMatch[i].iStart - 40; - iStart = wordBoundary(iStart, zDoc, nDoc, aMatch, nMatch, iCol); - if( iStart<=10 ){ - iStart = 0; - } - if( iCol==tailCol && iStart<=tailOffset+20 ){ - iStart = tailOffset; - } - if( (iCol!=tailCol && tailCol>=0) || iStart!=tailOffset ){ - trimWhiteSpace(&sb); - appendWhiteSpace(&sb); - append(&sb, zEllipsis); - appendWhiteSpace(&sb); - } - iEnd = aMatch[i].iStart + aMatch[i].nByte + 40; - iEnd = wordBoundary(iEnd, zDoc, nDoc, aMatch, nMatch, iCol); - if( iEnd>=nDoc-10 ){ - iEnd = nDoc; - tailEllipsis = 0; - }else{ - tailEllipsis = 1; - } - while( iMatchsnippet.zSnippet = stringBufferData(&sb); - pCursor->snippet.nSnippet = stringBufferLength(&sb); -} + sqlite3_int64 iStartBlock; /* Rowid of first leaf block to traverse */ + sqlite3_int64 iLeafEndBlock; /* Rowid of final leaf block to traverse */ + sqlite3_int64 iEndBlock; /* Rowid of final block in segment (or 0) */ + sqlite3_int64 iCurrentBlock; /* Current leaf block (or 0) */ + + char *aNode; /* Pointer to node data (or NULL) */ + int nNode; /* Size of buffer at aNode (or 0) */ + int nPopulate; /* If >0, bytes of buffer aNode[] loaded */ + sqlite3_blob *pBlob; /* If not NULL, blob handle to read node */ + + Fts3HashElem **ppNextElem; + /* Variables set by fts3SegReaderNext(). These may be read directly + ** by the caller. They are valid from the time SegmentReaderNew() returns + ** until SegmentReaderNext() returns something other than SQLITE_OK + ** (i.e. SQLITE_DONE). + */ + int nTerm; /* Number of bytes in current term */ + char *zTerm; /* Pointer to current term */ + int nTermAlloc; /* Allocated size of zTerm buffer */ + char *aDoclist; /* Pointer to doclist of current entry */ + int nDoclist; /* Size of doclist in current entry */ + + /* The following variables are used by fts3SegReaderNextDocid() to iterate + ** through the current doclist (aDoclist/nDoclist). + */ + char *pOffsetList; + int nOffsetList; /* For descending pending seg-readers only */ + sqlite3_int64 iDocid; +}; + +#define fts3SegReaderIsPending(p) ((p)->ppNextElem!=0) +#define fts3SegReaderIsRootOnly(p) ((p)->rootOnly!=0) + +/* +** An instance of this structure is used to create a segment b-tree in the +** database. The internal details of this type are only accessed by the +** following functions: +** +** fts3SegWriterAdd() +** fts3SegWriterFlush() +** fts3SegWriterFree() +*/ +struct SegmentWriter { + SegmentNode *pTree; /* Pointer to interior tree structure */ + sqlite3_int64 iFirst; /* First slot in %_segments written */ + sqlite3_int64 iFree; /* Next free slot in %_segments */ + char *zTerm; /* Pointer to previous term buffer */ + int nTerm; /* Number of bytes in zTerm */ + int nMalloc; /* Size of malloc'd buffer at zMalloc */ + char *zMalloc; /* Malloc'd space (possibly) used for zTerm */ + int nSize; /* Size of allocation at aData */ + int nData; /* Bytes of data in aData */ + char *aData; /* Pointer to block from malloc() */ +}; /* -** Close the cursor. For additional information see the documentation -** on the xClose method of the virtual table interface. -*/ -static int fulltextClose(sqlite3_vtab_cursor *pCursor){ - fulltext_cursor *c = (fulltext_cursor *) pCursor; - FTSTRACE(("FTS3 Close %p\n", c)); - sqlite3_finalize(c->pStmt); - sqlite3Fts3ExprFree(c->pExpr); - snippetClear(&c->snippet); - if( c->result.nData!=0 ){ - dlrDestroy(&c->reader); - } - dataBufferDestroy(&c->result); - sqlite3_free(c); - return SQLITE_OK; -} +** Type SegmentNode is used by the following three functions to create +** the interior part of the segment b+-tree structures (everything except +** the leaf nodes). These functions and type are only ever used by code +** within the fts3SegWriterXXX() family of functions described above. +** +** fts3NodeAddTerm() +** fts3NodeWrite() +** fts3NodeFree() +** +** When a b+tree is written to the database (either as a result of a merge +** or the pending-terms table being flushed), leaves are written into the +** database file as soon as they are completely populated. The interior of +** the tree is assembled in memory and written out only once all leaves have +** been populated and stored. This is Ok, as the b+-tree fanout is usually +** very large, meaning that the interior of the tree consumes relatively +** little memory. +*/ +struct SegmentNode { + SegmentNode *pParent; /* Parent node (or NULL for root node) */ + SegmentNode *pRight; /* Pointer to right-sibling */ + SegmentNode *pLeftmost; /* Pointer to left-most node of this depth */ + int nEntry; /* Number of terms written to node so far */ + char *zTerm; /* Pointer to previous term buffer */ + int nTerm; /* Number of bytes in zTerm */ + int nMalloc; /* Size of malloc'd buffer at zMalloc */ + char *zMalloc; /* Malloc'd space (possibly) used for zTerm */ + int nData; /* Bytes of valid data so far */ + char *aData; /* Node data */ +}; -static int fulltextNext(sqlite3_vtab_cursor *pCursor){ - fulltext_cursor *c = (fulltext_cursor *) pCursor; - int rc; +/* +** Valid values for the second argument to fts3SqlStmt(). +*/ +#define SQL_DELETE_CONTENT 0 +#define SQL_IS_EMPTY 1 +#define SQL_DELETE_ALL_CONTENT 2 +#define SQL_DELETE_ALL_SEGMENTS 3 +#define SQL_DELETE_ALL_SEGDIR 4 +#define SQL_DELETE_ALL_DOCSIZE 5 +#define SQL_DELETE_ALL_STAT 6 +#define SQL_SELECT_CONTENT_BY_ROWID 7 +#define SQL_NEXT_SEGMENT_INDEX 8 +#define SQL_INSERT_SEGMENTS 9 +#define SQL_NEXT_SEGMENTS_ID 10 +#define SQL_INSERT_SEGDIR 11 +#define SQL_SELECT_LEVEL 12 +#define SQL_SELECT_LEVEL_RANGE 13 +#define SQL_SELECT_LEVEL_COUNT 14 +#define SQL_SELECT_SEGDIR_MAX_LEVEL 15 +#define SQL_DELETE_SEGDIR_LEVEL 16 +#define SQL_DELETE_SEGMENTS_RANGE 17 +#define SQL_CONTENT_INSERT 18 +#define SQL_DELETE_DOCSIZE 19 +#define SQL_REPLACE_DOCSIZE 20 +#define SQL_SELECT_DOCSIZE 21 +#define SQL_SELECT_STAT 22 +#define SQL_REPLACE_STAT 23 + +#define SQL_SELECT_ALL_PREFIX_LEVEL 24 +#define SQL_DELETE_ALL_TERMS_SEGDIR 25 +#define SQL_DELETE_SEGDIR_RANGE 26 +#define SQL_SELECT_ALL_LANGID 27 +#define SQL_FIND_MERGE_LEVEL 28 +#define SQL_MAX_LEAF_NODE_ESTIMATE 29 +#define SQL_DELETE_SEGDIR_ENTRY 30 +#define SQL_SHIFT_SEGDIR_ENTRY 31 +#define SQL_SELECT_SEGDIR 32 +#define SQL_CHOMP_SEGDIR 33 +#define SQL_SEGMENT_IS_APPENDABLE 34 +#define SQL_SELECT_INDEXES 35 +#define SQL_SELECT_MXLEVEL 36 + +/* +** This function is used to obtain an SQLite prepared statement handle +** for the statement identified by the second argument. If successful, +** *pp is set to the requested statement handle and SQLITE_OK returned. +** Otherwise, an SQLite error code is returned and *pp is set to 0. +** +** If argument apVal is not NULL, then it must point to an array with +** at least as many entries as the requested statement has bound +** parameters. The values are bound to the statements parameters before +** returning. +*/ +static int fts3SqlStmt( + Fts3Table *p, /* Virtual table handle */ + int eStmt, /* One of the SQL_XXX constants above */ + sqlite3_stmt **pp, /* OUT: Statement handle */ + sqlite3_value **apVal /* Values to bind to statement */ +){ + const char *azSql[] = { +/* 0 */ "DELETE FROM %Q.'%q_content' WHERE rowid = ?", +/* 1 */ "SELECT NOT EXISTS(SELECT docid FROM %Q.'%q_content' WHERE rowid!=?)", +/* 2 */ "DELETE FROM %Q.'%q_content'", +/* 3 */ "DELETE FROM %Q.'%q_segments'", +/* 4 */ "DELETE FROM %Q.'%q_segdir'", +/* 5 */ "DELETE FROM %Q.'%q_docsize'", +/* 6 */ "DELETE FROM %Q.'%q_stat'", +/* 7 */ "SELECT %s WHERE rowid=?", +/* 8 */ "SELECT (SELECT max(idx) FROM %Q.'%q_segdir' WHERE level = ?) + 1", +/* 9 */ "REPLACE INTO %Q.'%q_segments'(blockid, block) VALUES(?, ?)", +/* 10 */ "SELECT coalesce((SELECT max(blockid) FROM %Q.'%q_segments') + 1, 1)", +/* 11 */ "REPLACE INTO %Q.'%q_segdir' VALUES(?,?,?,?,?,?)", + + /* Return segments in order from oldest to newest.*/ +/* 12 */ "SELECT idx, start_block, leaves_end_block, end_block, root " + "FROM %Q.'%q_segdir' WHERE level = ? ORDER BY idx ASC", +/* 13 */ "SELECT idx, start_block, leaves_end_block, end_block, root " + "FROM %Q.'%q_segdir' WHERE level BETWEEN ? AND ?" + "ORDER BY level DESC, idx ASC", + +/* 14 */ "SELECT count(*) FROM %Q.'%q_segdir' WHERE level = ?", +/* 15 */ "SELECT max(level) FROM %Q.'%q_segdir' WHERE level BETWEEN ? AND ?", + +/* 16 */ "DELETE FROM %Q.'%q_segdir' WHERE level = ?", +/* 17 */ "DELETE FROM %Q.'%q_segments' WHERE blockid BETWEEN ? AND ?", +/* 18 */ "INSERT INTO %Q.'%q_content' VALUES(%s)", +/* 19 */ "DELETE FROM %Q.'%q_docsize' WHERE docid = ?", +/* 20 */ "REPLACE INTO %Q.'%q_docsize' VALUES(?,?)", +/* 21 */ "SELECT size FROM %Q.'%q_docsize' WHERE docid=?", +/* 22 */ "SELECT value FROM %Q.'%q_stat' WHERE id=?", +/* 23 */ "REPLACE INTO %Q.'%q_stat' VALUES(?,?)", +/* 24 */ "", +/* 25 */ "", + +/* 26 */ "DELETE FROM %Q.'%q_segdir' WHERE level BETWEEN ? AND ?", +/* 27 */ "SELECT DISTINCT level / (1024 * ?) FROM %Q.'%q_segdir'", + +/* This statement is used to determine which level to read the input from +** when performing an incremental merge. It returns the absolute level number +** of the oldest level in the db that contains at least ? segments. Or, +** if no level in the FTS index contains more than ? segments, the statement +** returns zero rows. */ +/* 28 */ "SELECT level FROM %Q.'%q_segdir' GROUP BY level HAVING count(*)>=?" + " ORDER BY (level %% 1024) ASC LIMIT 1", + +/* Estimate the upper limit on the number of leaf nodes in a new segment +** created by merging the oldest :2 segments from absolute level :1. See +** function sqlite3Fts3Incrmerge() for details. */ +/* 29 */ "SELECT 2 * total(1 + leaves_end_block - start_block) " + " FROM %Q.'%q_segdir' WHERE level = ? AND idx < ?", + +/* SQL_DELETE_SEGDIR_ENTRY +** Delete the %_segdir entry on absolute level :1 with index :2. */ +/* 30 */ "DELETE FROM %Q.'%q_segdir' WHERE level = ? AND idx = ?", + +/* SQL_SHIFT_SEGDIR_ENTRY +** Modify the idx value for the segment with idx=:3 on absolute level :2 +** to :1. */ +/* 31 */ "UPDATE %Q.'%q_segdir' SET idx = ? WHERE level=? AND idx=?", + +/* SQL_SELECT_SEGDIR +** Read a single entry from the %_segdir table. The entry from absolute +** level :1 with index value :2. */ +/* 32 */ "SELECT idx, start_block, leaves_end_block, end_block, root " + "FROM %Q.'%q_segdir' WHERE level = ? AND idx = ?", + +/* SQL_CHOMP_SEGDIR +** Update the start_block (:1) and root (:2) fields of the %_segdir +** entry located on absolute level :3 with index :4. */ +/* 33 */ "UPDATE %Q.'%q_segdir' SET start_block = ?, root = ?" + "WHERE level = ? AND idx = ?", + +/* SQL_SEGMENT_IS_APPENDABLE +** Return a single row if the segment with end_block=? is appendable. Or +** no rows otherwise. */ +/* 34 */ "SELECT 1 FROM %Q.'%q_segments' WHERE blockid=? AND block IS NULL", + +/* SQL_SELECT_INDEXES +** Return the list of valid segment indexes for absolute level ? */ +/* 35 */ "SELECT idx FROM %Q.'%q_segdir' WHERE level=? ORDER BY 1 ASC", + +/* SQL_SELECT_MXLEVEL +** Return the largest relative level in the FTS index or indexes. */ +/* 36 */ "SELECT max( level %% 1024 ) FROM %Q.'%q_segdir'" + }; + int rc = SQLITE_OK; + sqlite3_stmt *pStmt; - FTSTRACE(("FTS3 Next %p\n", pCursor)); - snippetClear(&c->snippet); - if( c->iCursorType < QUERY_FULLTEXT ){ - /* TODO(shess) Handle SQLITE_SCHEMA AND SQLITE_BUSY. */ - rc = sqlite3_step(c->pStmt); - switch( rc ){ - case SQLITE_ROW: - c->eof = 0; - return SQLITE_OK; - case SQLITE_DONE: - c->eof = 1; - return SQLITE_OK; - default: - c->eof = 1; - return rc; + assert( SizeofArray(azSql)==SizeofArray(p->aStmt) ); + assert( eStmt=0 ); + + pStmt = p->aStmt[eStmt]; + if( !pStmt ){ + char *zSql; + if( eStmt==SQL_CONTENT_INSERT ){ + zSql = sqlite3_mprintf(azSql[eStmt], p->zDb, p->zName, p->zWriteExprlist); + }else if( eStmt==SQL_SELECT_CONTENT_BY_ROWID ){ + zSql = sqlite3_mprintf(azSql[eStmt], p->zReadExprlist); + }else{ + zSql = sqlite3_mprintf(azSql[eStmt], p->zDb, p->zName); } - } else { /* full-text query */ - rc = sqlite3_reset(c->pStmt); - if( rc!=SQLITE_OK ) return rc; - - if( c->result.nData==0 || dlrAtEnd(&c->reader) ){ - c->eof = 1; - return SQLITE_OK; + if( !zSql ){ + rc = SQLITE_NOMEM; + }else{ + rc = sqlite3_prepare_v2(p->db, zSql, -1, &pStmt, NULL); + sqlite3_free(zSql); + assert( rc==SQLITE_OK || pStmt==0 ); + p->aStmt[eStmt] = pStmt; } - rc = sqlite3_bind_int64(c->pStmt, 1, dlrDocid(&c->reader)); - dlrStep(&c->reader); - if( rc!=SQLITE_OK ) return rc; - /* TODO(shess) Handle SQLITE_SCHEMA AND SQLITE_BUSY. */ - rc = sqlite3_step(c->pStmt); - if( rc==SQLITE_ROW ){ /* the case we expect */ - c->eof = 0; - return SQLITE_OK; + } + if( apVal ){ + int i; + int nParam = sqlite3_bind_parameter_count(pStmt); + for(i=0; rc==SQLITE_OK && iiColumn; - DocListType eType = eListType; - assert( eType==DL_POSITIONS || eType==DL_DOCIDS ); - if( pPhrase->nToken>1 ){ - eType = DL_POSITIONS; - } - - /* This code should never be called with buffered updates. */ - assert( pTab->nPendingData<0 ); + sqlite3_stmt *pStmt = 0; /* Statement requested from fts3SqlStmt() */ + int rc; /* Return code */ - for(ii=0; rc==SQLITE_OK && iinToken; ii++){ - DataBuffer tmp; - struct PhraseToken *p = &pPhrase->aToken[ii]; - rc = termSelect(pTab, iCol, p->z, p->n, p->isPrefix, eType, &tmp); - if( rc==SQLITE_OK ){ - if( ii==0 ){ - *pResult = tmp; - }else{ - DataBuffer res = *pResult; - dataBufferInit(pResult, 0); - if( ii==(pPhrase->nToken-1) ){ - eType = eListType; - } - docListPhraseMerge( - res.pData, res.nData, tmp.pData, tmp.nData, 0, 0, eType, pResult - ); - dataBufferDestroy(&res); - dataBufferDestroy(&tmp); - } + rc = fts3SqlStmt(pTab, SQL_SELECT_DOCSIZE, &pStmt, 0); + if( rc==SQLITE_OK ){ + sqlite3_bind_int64(pStmt, 1, iDocid); + rc = sqlite3_step(pStmt); + if( rc!=SQLITE_ROW || sqlite3_column_type(pStmt, 0)!=SQLITE_BLOB ){ + rc = sqlite3_reset(pStmt); + if( rc==SQLITE_OK ) rc = FTS_CORRUPT_VTAB; + pStmt = 0; + }else{ + rc = SQLITE_OK; } } + *ppStmt = pStmt; return rc; } -/* -** Evaluate the full-text expression pExpr against fts3 table pTab. Write -** the results into pRes. -*/ -static int evalFts3Expr( - fulltext_vtab *pTab, /* Fts3 Virtual table object */ - Fts3Expr *pExpr, /* Parsed fts3 expression */ - DataBuffer *pRes /* OUT: Write results of the expression here */ +SQLITE_PRIVATE int sqlite3Fts3SelectDoctotal( + Fts3Table *pTab, /* Fts3 table handle */ + sqlite3_stmt **ppStmt /* OUT: Statement handle */ ){ - int rc = SQLITE_OK; - - /* Initialize the output buffer. If this is an empty query (pExpr==0), - ** this is all that needs to be done. Empty queries produce empty - ** result sets. - */ - dataBufferInit(pRes, 0); - - if( pExpr ){ - if( pExpr->eType==FTSQUERY_PHRASE ){ - DocListType eType = DL_DOCIDS; - if( pExpr->pParent && pExpr->pParent->eType==FTSQUERY_NEAR ){ - eType = DL_POSITIONS; - } - rc = docListOfPhrase(pTab, pExpr->pPhrase, eType, pRes); - }else{ - DataBuffer lhs; - DataBuffer rhs; - - dataBufferInit(&rhs, 0); - if( SQLITE_OK==(rc = evalFts3Expr(pTab, pExpr->pLeft, &lhs)) - && SQLITE_OK==(rc = evalFts3Expr(pTab, pExpr->pRight, &rhs)) - ){ - switch( pExpr->eType ){ - case FTSQUERY_NEAR: { - int nToken; - Fts3Expr *pLeft; - DocListType eType = DL_DOCIDS; - if( pExpr->pParent && pExpr->pParent->eType==FTSQUERY_NEAR ){ - eType = DL_POSITIONS; - } - pLeft = pExpr->pLeft; - while( pLeft->eType==FTSQUERY_NEAR ){ - pLeft=pLeft->pRight; - } - assert( pExpr->pRight->eType==FTSQUERY_PHRASE ); - assert( pLeft->eType==FTSQUERY_PHRASE ); - nToken = pLeft->pPhrase->nToken + pExpr->pRight->pPhrase->nToken; - docListPhraseMerge(lhs.pData, lhs.nData, rhs.pData, rhs.nData, - pExpr->nNear+1, nToken, eType, pRes - ); - break; - } - case FTSQUERY_NOT: { - docListExceptMerge(lhs.pData, lhs.nData, rhs.pData, rhs.nData,pRes); - break; - } - case FTSQUERY_AND: { - docListAndMerge(lhs.pData, lhs.nData, rhs.pData, rhs.nData, pRes); - break; - } - case FTSQUERY_OR: { - docListOrMerge(lhs.pData, lhs.nData, rhs.pData, rhs.nData, pRes); - break; - } - } - } - dataBufferDestroy(&lhs); - dataBufferDestroy(&rhs); + sqlite3_stmt *pStmt = 0; + int rc; + rc = fts3SqlStmt(pTab, SQL_SELECT_STAT, &pStmt, 0); + if( rc==SQLITE_OK ){ + sqlite3_bind_int(pStmt, 1, FTS_STAT_DOCTOTAL); + if( sqlite3_step(pStmt)!=SQLITE_ROW + || sqlite3_column_type(pStmt, 0)!=SQLITE_BLOB + ){ + rc = sqlite3_reset(pStmt); + if( rc==SQLITE_OK ) rc = FTS_CORRUPT_VTAB; + pStmt = 0; } } - + *ppStmt = pStmt; return rc; } -/* TODO(shess) Refactor the code to remove this forward decl. */ -static int flushPendingTerms(fulltext_vtab *v); +SQLITE_PRIVATE int sqlite3Fts3SelectDocsize( + Fts3Table *pTab, /* Fts3 table handle */ + sqlite3_int64 iDocid, /* Docid to read size data for */ + sqlite3_stmt **ppStmt /* OUT: Statement handle */ +){ + return fts3SelectDocsize(pTab, iDocid, ppStmt); +} -/* Perform a full-text query using the search expression in -** zInput[0..nInput-1]. Return a list of matching documents -** in pResult. +/* +** Similar to fts3SqlStmt(). Except, after binding the parameters in +** array apVal[] to the SQL statement identified by eStmt, the statement +** is executed. ** -** Queries must match column iColumn. Or if iColumn>=nColumn -** they are allowed to match against any column. +** Returns SQLITE_OK if the statement is successfully executed, or an +** SQLite error code otherwise. */ -static int fulltextQuery( - fulltext_vtab *v, /* The full text index */ - int iColumn, /* Match against this column by default */ - const char *zInput, /* The query string */ - int nInput, /* Number of bytes in zInput[] */ - DataBuffer *pResult, /* Write the result doclist here */ - Fts3Expr **ppExpr /* Put parsed query string here */ +static void fts3SqlExec( + int *pRC, /* Result code */ + Fts3Table *p, /* The FTS3 table */ + int eStmt, /* Index of statement to evaluate */ + sqlite3_value **apVal /* Parameters to bind */ ){ + sqlite3_stmt *pStmt; int rc; + if( *pRC ) return; + rc = fts3SqlStmt(p, eStmt, &pStmt, apVal); + if( rc==SQLITE_OK ){ + sqlite3_step(pStmt); + rc = sqlite3_reset(pStmt); + } + *pRC = rc; +} - /* TODO(shess) Instead of flushing pendingTerms, we could query for - ** the relevant term and merge the doclist into what we receive from - ** the database. Wait and see if this is a common issue, first. - ** - ** A good reason not to flush is to not generate update-related - ** error codes from here. - */ - /* Flush any buffered updates before executing the query. */ - rc = flushPendingTerms(v); - if( rc!=SQLITE_OK ){ - return rc; - } +/* +** This function ensures that the caller has obtained a shared-cache +** table-lock on the %_content table. This is required before reading +** data from the fts3 table. If this lock is not acquired first, then +** the caller may end up holding read-locks on the %_segments and %_segdir +** tables, but no read-lock on the %_content table. If this happens +** a second connection will be able to write to the fts3 table, but +** attempting to commit those writes might return SQLITE_LOCKED or +** SQLITE_LOCKED_SHAREDCACHE (because the commit attempts to obtain +** write-locks on the %_segments and %_segdir ** tables). +** +** We try to avoid this because if FTS3 returns any error when committing +** a transaction, the whole transaction will be rolled back. And this is +** not what users expect when they get SQLITE_LOCKED_SHAREDCACHE. It can +** still happen if the user reads data directly from the %_segments or +** %_segdir tables instead of going through FTS3 though. +** +** This reasoning does not apply to a content=xxx table. +*/ +SQLITE_PRIVATE int sqlite3Fts3ReadLock(Fts3Table *p){ + int rc; /* Return code */ + sqlite3_stmt *pStmt; /* Statement used to obtain lock */ - /* Parse the query passed to the MATCH operator. */ - rc = sqlite3Fts3ExprParse(v->pTokenizer, - v->azColumn, v->nColumn, iColumn, zInput, nInput, ppExpr - ); - if( rc!=SQLITE_OK ){ - assert( 0==(*ppExpr) ); - return rc; + if( p->zContentTbl==0 ){ + rc = fts3SqlStmt(p, SQL_SELECT_CONTENT_BY_ROWID, &pStmt, 0); + if( rc==SQLITE_OK ){ + sqlite3_bind_null(pStmt, 1); + sqlite3_step(pStmt); + rc = sqlite3_reset(pStmt); + } + }else{ + rc = SQLITE_OK; } - return evalFts3Expr(v, *ppExpr, pResult); + return rc; } /* -** This is the xFilter interface for the virtual table. See -** the virtual table xFilter method documentation for additional -** information. +** FTS maintains a separate indexes for each language-id (a 32-bit integer). +** Within each language id, a separate index is maintained to store the +** document terms, and each configured prefix size (configured the FTS +** "prefix=" option). And each index consists of multiple levels ("relative +** levels"). ** -** If idxNum==QUERY_GENERIC then do a full table scan against -** the %_content table. +** All three of these values (the language id, the specific index and the +** level within the index) are encoded in 64-bit integer values stored +** in the %_segdir table on disk. This function is used to convert three +** separate component values into the single 64-bit integer value that +** can be used to query the %_segdir table. ** -** If idxNum==QUERY_DOCID then do a docid lookup for a single entry -** in the %_content table. +** Specifically, each language-id/index combination is allocated 1024 +** 64-bit integer level values ("absolute levels"). The main terms index +** for language-id 0 is allocate values 0-1023. The first prefix index +** (if any) for language-id 0 is allocated values 1024-2047. And so on. +** Language 1 indexes are allocated immediately following language 0. ** -** If idxNum>=QUERY_FULLTEXT then use the full text index. The -** column on the left-hand side of the MATCH operator is column -** number idxNum-QUERY_FULLTEXT, 0 indexed. argv[0] is the right-hand -** side of the MATCH operator. +** So, for a system with nPrefix prefix indexes configured, the block of +** absolute levels that corresponds to language-id iLangid and index +** iIndex starts at absolute level ((iLangid * (nPrefix+1) + iIndex) * 1024). */ -/* TODO(shess) Upgrade the cursor initialization and destruction to -** account for fulltextFilter() being called multiple times on the -** same cursor. The current solution is very fragile. Apply fix to -** fts3 as appropriate. +static sqlite3_int64 getAbsoluteLevel( + Fts3Table *p, /* FTS3 table handle */ + int iLangid, /* Language id */ + int iIndex, /* Index in p->aIndex[] */ + int iLevel /* Level of segments */ +){ + sqlite3_int64 iBase; /* First absolute level for iLangid/iIndex */ + assert( iLangid>=0 ); + assert( p->nIndex>0 ); + assert( iIndex>=0 && iIndexnIndex ); + + iBase = ((sqlite3_int64)iLangid * p->nIndex + iIndex) * FTS3_SEGDIR_MAXLEVEL; + return iBase + iLevel; +} + +/* +** Set *ppStmt to a statement handle that may be used to iterate through +** all rows in the %_segdir table, from oldest to newest. If successful, +** return SQLITE_OK. If an error occurs while preparing the statement, +** return an SQLite error code. +** +** There is only ever one instance of this SQL statement compiled for +** each FTS3 table. +** +** The statement returns the following columns from the %_segdir table: +** +** 0: idx +** 1: start_block +** 2: leaves_end_block +** 3: end_block +** 4: root */ -static int fulltextFilter( - sqlite3_vtab_cursor *pCursor, /* The cursor used for this query */ - int idxNum, const char *idxStr, /* Which indexing scheme to use */ - int argc, sqlite3_value **argv /* Arguments for the indexing scheme */ +SQLITE_PRIVATE int sqlite3Fts3AllSegdirs( + Fts3Table *p, /* FTS3 table */ + int iLangid, /* Language being queried */ + int iIndex, /* Index for p->aIndex[] */ + int iLevel, /* Level to select (relative level) */ + sqlite3_stmt **ppStmt /* OUT: Compiled statement */ ){ - fulltext_cursor *c = (fulltext_cursor *) pCursor; - fulltext_vtab *v = cursor_vtab(c); int rc; + sqlite3_stmt *pStmt = 0; - FTSTRACE(("FTS3 Filter %p\n",pCursor)); - - /* If the cursor has a statement that was not prepared according to - ** idxNum, clear it. I believe all calls to fulltextFilter with a - ** given cursor will have the same idxNum , but in this case it's - ** easy to be safe. - */ - if( c->pStmt && c->iCursorType!=idxNum ){ - sqlite3_finalize(c->pStmt); - c->pStmt = NULL; - } - - /* Get a fresh statement appropriate to idxNum. */ - /* TODO(shess): Add a prepared-statement cache in the vt structure. - ** The cache must handle multiple open cursors. Easier to cache the - ** statement variants at the vt to reduce malloc/realloc/free here. - ** Or we could have a StringBuffer variant which allowed stack - ** construction for small values. - */ - if( !c->pStmt ){ - StringBuffer sb; - initStringBuffer(&sb); - append(&sb, "SELECT docid, "); - appendList(&sb, v->nColumn, v->azContentColumn); - append(&sb, " FROM %_content"); - if( idxNum!=QUERY_GENERIC ) append(&sb, " WHERE docid = ?"); - rc = sql_prepare(v->db, v->zDb, v->zName, &c->pStmt, - stringBufferData(&sb)); - stringBufferDestroy(&sb); - if( rc!=SQLITE_OK ) return rc; - c->iCursorType = idxNum; + assert( iLevel==FTS3_SEGCURSOR_ALL || iLevel>=0 ); + assert( iLevel=0 && iIndexnIndex ); + + if( iLevel<0 ){ + /* "SELECT * FROM %_segdir WHERE level BETWEEN ? AND ? ORDER BY ..." */ + rc = fts3SqlStmt(p, SQL_SELECT_LEVEL_RANGE, &pStmt, 0); + if( rc==SQLITE_OK ){ + sqlite3_bind_int64(pStmt, 1, getAbsoluteLevel(p, iLangid, iIndex, 0)); + sqlite3_bind_int64(pStmt, 2, + getAbsoluteLevel(p, iLangid, iIndex, FTS3_SEGDIR_MAXLEVEL-1) + ); + } }else{ - sqlite3_reset(c->pStmt); - assert( c->iCursorType==idxNum ); - } - - switch( idxNum ){ - case QUERY_GENERIC: - break; - - case QUERY_DOCID: - rc = sqlite3_bind_int64(c->pStmt, 1, sqlite3_value_int64(argv[0])); - if( rc!=SQLITE_OK ) return rc; - break; - - default: /* full-text search */ - { - int iCol = idxNum-QUERY_FULLTEXT; - const char *zQuery = (const char *)sqlite3_value_text(argv[0]); - assert( idxNum<=QUERY_FULLTEXT+v->nColumn); - assert( argc==1 ); - if( c->result.nData!=0 ){ - /* This case happens if the same cursor is used repeatedly. */ - dlrDestroy(&c->reader); - dataBufferReset(&c->result); - }else{ - dataBufferInit(&c->result, 0); - } - rc = fulltextQuery(v, iCol, zQuery, -1, &c->result, &c->pExpr); - if( rc!=SQLITE_OK ) return rc; - if( c->result.nData!=0 ){ - dlrInit(&c->reader, DL_DOCIDS, c->result.pData, c->result.nData); - } - break; + /* "SELECT * FROM %_segdir WHERE level = ? ORDER BY ..." */ + rc = fts3SqlStmt(p, SQL_SELECT_LEVEL, &pStmt, 0); + if( rc==SQLITE_OK ){ + sqlite3_bind_int64(pStmt, 1, getAbsoluteLevel(p, iLangid, iIndex,iLevel)); } } - - return fulltextNext(pCursor); + *ppStmt = pStmt; + return rc; } -/* This is the xEof method of the virtual table. The SQLite core -** calls this routine to find out if it has reached the end of -** a query's results set. -*/ -static int fulltextEof(sqlite3_vtab_cursor *pCursor){ - fulltext_cursor *c = (fulltext_cursor *) pCursor; - return c->eof; -} -/* This is the xColumn method of the virtual table. The SQLite -** core calls this method during a query when it needs the value -** of a column from the virtual table. This method needs to use -** one of the sqlite3_result_*() routines to store the requested -** value back in the pContext. +/* +** Append a single varint to a PendingList buffer. SQLITE_OK is returned +** if successful, or an SQLite error code otherwise. +** +** This function also serves to allocate the PendingList structure itself. +** For example, to create a new PendingList structure containing two +** varints: +** +** PendingList *p = 0; +** fts3PendingListAppendVarint(&p, 1); +** fts3PendingListAppendVarint(&p, 2); */ -static int fulltextColumn(sqlite3_vtab_cursor *pCursor, - sqlite3_context *pContext, int idxCol){ - fulltext_cursor *c = (fulltext_cursor *) pCursor; - fulltext_vtab *v = cursor_vtab(c); +static int fts3PendingListAppendVarint( + PendingList **pp, /* IN/OUT: Pointer to PendingList struct */ + sqlite3_int64 i /* Value to append to data */ +){ + PendingList *p = *pp; - if( idxColnColumn ){ - sqlite3_value *pVal = sqlite3_column_value(c->pStmt, idxCol+1); - sqlite3_result_value(pContext, pVal); - }else if( idxCol==v->nColumn ){ - /* The extra column whose name is the same as the table. - ** Return a blob which is a pointer to the cursor - */ - sqlite3_result_blob(pContext, &c, sizeof(c), SQLITE_TRANSIENT); - }else if( idxCol==v->nColumn+1 ){ - /* The docid column, which is an alias for rowid. */ - sqlite3_value *pVal = sqlite3_column_value(c->pStmt, 0); - sqlite3_result_value(pContext, pVal); + /* Allocate or grow the PendingList as required. */ + if( !p ){ + p = sqlite3_malloc(sizeof(*p) + 100); + if( !p ){ + return SQLITE_NOMEM; + } + p->nSpace = 100; + p->aData = (char *)&p[1]; + p->nData = 0; + } + else if( p->nData+FTS3_VARINT_MAX+1>p->nSpace ){ + int nNew = p->nSpace * 2; + p = sqlite3_realloc(p, sizeof(*p) + nNew); + if( !p ){ + sqlite3_free(*pp); + *pp = 0; + return SQLITE_NOMEM; + } + p->nSpace = nNew; + p->aData = (char *)&p[1]; } - return SQLITE_OK; -} - -/* This is the xRowid method. The SQLite core calls this routine to -** retrieve the rowid for the current row of the result set. fts3 -** exposes %_content.docid as the rowid for the virtual table. The -** rowid should be written to *pRowid. -*/ -static int fulltextRowid(sqlite3_vtab_cursor *pCursor, sqlite_int64 *pRowid){ - fulltext_cursor *c = (fulltext_cursor *) pCursor; - *pRowid = sqlite3_column_int64(c->pStmt, 0); + /* Append the new serialized varint to the end of the list. */ + p->nData += sqlite3Fts3PutVarint(&p->aData[p->nData], i); + p->aData[p->nData] = '\0'; + *pp = p; return SQLITE_OK; } -/* Add all terms in [zText] to pendingTerms table. If [iColumn] > 0, -** we also store positions and offsets in the hash table using that -** column number. +/* +** Add a docid/column/position entry to a PendingList structure. Non-zero +** is returned if the structure is sqlite3_realloced as part of adding +** the entry. Otherwise, zero. +** +** If an OOM error occurs, *pRc is set to SQLITE_NOMEM before returning. +** Zero is always returned in this case. Otherwise, if no OOM error occurs, +** it is set to SQLITE_OK. */ -static int buildTerms(fulltext_vtab *v, sqlite_int64 iDocid, - const char *zText, int iColumn){ - sqlite3_tokenizer *pTokenizer = v->pTokenizer; - sqlite3_tokenizer_cursor *pCursor; - const char *pToken; - int nTokenBytes; - int iStartOffset, iEndOffset, iPosition; - int rc; +static int fts3PendingListAppend( + PendingList **pp, /* IN/OUT: PendingList structure */ + sqlite3_int64 iDocid, /* Docid for entry to add */ + sqlite3_int64 iCol, /* Column for entry to add */ + sqlite3_int64 iPos, /* Position of term for entry to add */ + int *pRc /* OUT: Return code */ +){ + PendingList *p = *pp; + int rc = SQLITE_OK; - rc = pTokenizer->pModule->xOpen(pTokenizer, zText, -1, &pCursor); - if( rc!=SQLITE_OK ) return rc; + assert( !p || p->iLastDocid<=iDocid ); - pCursor->pTokenizer = pTokenizer; - while( SQLITE_OK==(rc=pTokenizer->pModule->xNext(pCursor, - &pToken, &nTokenBytes, - &iStartOffset, &iEndOffset, - &iPosition)) ){ - DLCollector *p; - int nData; /* Size of doclist before our update. */ - - /* Positions can't be negative; we use -1 as a terminator - * internally. Token can't be NULL or empty. */ - if( iPosition<0 || pToken == NULL || nTokenBytes == 0 ){ - rc = SQLITE_ERROR; - break; + if( !p || p->iLastDocid!=iDocid ){ + sqlite3_int64 iDelta = iDocid - (p ? p->iLastDocid : 0); + if( p ){ + assert( p->nDatanSpace ); + assert( p->aData[p->nData]==0 ); + p->nData++; } - - p = fts3HashFind(&v->pendingTerms, pToken, nTokenBytes); - if( p==NULL ){ - nData = 0; - p = dlcNew(iDocid, DL_DEFAULT); - fts3HashInsert(&v->pendingTerms, pToken, nTokenBytes, p); - - /* Overhead for our hash table entry, the key, and the value. */ - v->nPendingData += sizeof(struct fts3HashElem)+sizeof(*p)+nTokenBytes; - }else{ - nData = p->b.nData; - if( p->dlw.iPrevDocid!=iDocid ) dlcNext(p, iDocid); + if( SQLITE_OK!=(rc = fts3PendingListAppendVarint(&p, iDelta)) ){ + goto pendinglistappend_out; } - if( iColumn>=0 ){ - dlcAddPos(p, iColumn, iPosition, iStartOffset, iEndOffset); + p->iLastCol = -1; + p->iLastPos = 0; + p->iLastDocid = iDocid; + } + if( iCol>0 && p->iLastCol!=iCol ){ + if( SQLITE_OK!=(rc = fts3PendingListAppendVarint(&p, 1)) + || SQLITE_OK!=(rc = fts3PendingListAppendVarint(&p, iCol)) + ){ + goto pendinglistappend_out; } - - /* Accumulate data added by dlcNew or dlcNext, and dlcAddPos. */ - v->nPendingData += p->b.nData-nData; + p->iLastCol = iCol; + p->iLastPos = 0; } - - /* TODO(shess) Check return? Should this be able to cause errors at - ** this point? Actually, same question about sqlite3_finalize(), - ** though one could argue that failure there means that the data is - ** not durable. *ponder* - */ - pTokenizer->pModule->xClose(pCursor); - if( SQLITE_DONE == rc ) return SQLITE_OK; - return rc; -} - -/* Add doclists for all terms in [pValues] to pendingTerms table. */ -static int insertTerms(fulltext_vtab *v, sqlite_int64 iDocid, - sqlite3_value **pValues){ - int i; - for(i = 0; i < v->nColumn ; ++i){ - char *zText = (char*)sqlite3_value_text(pValues[i]); - int rc = buildTerms(v, iDocid, zText, i); - if( rc!=SQLITE_OK ) return rc; + if( iCol>=0 ){ + assert( iPos>p->iLastPos || (iPos==0 && p->iLastPos==0) ); + rc = fts3PendingListAppendVarint(&p, 2+iPos-p->iLastPos); + if( rc==SQLITE_OK ){ + p->iLastPos = iPos; + } } - return SQLITE_OK; -} - -/* Add empty doclists for all terms in the given row's content to -** pendingTerms. -*/ -static int deleteTerms(fulltext_vtab *v, sqlite_int64 iDocid){ - const char **pValues; - int i, rc; - - /* TODO(shess) Should we allow such tables at all? */ - if( DL_DEFAULT==DL_DOCIDS ) return SQLITE_ERROR; - - rc = content_select(v, iDocid, &pValues); - if( rc!=SQLITE_OK ) return rc; - for(i = 0 ; i < v->nColumn; ++i) { - rc = buildTerms(v, iDocid, pValues[i], -1); - if( rc!=SQLITE_OK ) break; + pendinglistappend_out: + *pRc = rc; + if( p!=*pp ){ + *pp = p; + return 1; } - - freeStringArray(v->nColumn, pValues); - return SQLITE_OK; -} - -/* TODO(shess) Refactor the code to remove this forward decl. */ -static int initPendingTerms(fulltext_vtab *v, sqlite_int64 iDocid); - -/* Insert a row into the %_content table; set *piDocid to be the ID of the -** new row. Add doclists for terms to pendingTerms. -*/ -static int index_insert(fulltext_vtab *v, sqlite3_value *pRequestDocid, - sqlite3_value **pValues, sqlite_int64 *piDocid){ - int rc; - - rc = content_insert(v, pRequestDocid, pValues); /* execute an SQL INSERT */ - if( rc!=SQLITE_OK ) return rc; - - /* docid column is an alias for rowid. */ - *piDocid = sqlite3_last_insert_rowid(v->db); - rc = initPendingTerms(v, *piDocid); - if( rc!=SQLITE_OK ) return rc; - - return insertTerms(v, *piDocid, pValues); + return 0; } -/* Delete a row from the %_content table; add empty doclists for terms -** to pendingTerms. +/* +** Free a PendingList object allocated by fts3PendingListAppend(). */ -static int index_delete(fulltext_vtab *v, sqlite_int64 iRow){ - int rc = initPendingTerms(v, iRow); - if( rc!=SQLITE_OK ) return rc; - - rc = deleteTerms(v, iRow); - if( rc!=SQLITE_OK ) return rc; - - return content_delete(v, iRow); /* execute an SQL DELETE */ +static void fts3PendingListDelete(PendingList *pList){ + sqlite3_free(pList); } -/* Update a row in the %_content table; add delete doclists to -** pendingTerms for old terms not in the new data, add insert doclists -** to pendingTerms for terms in the new data. +/* +** Add an entry to one of the pending-terms hash tables. */ -static int index_update(fulltext_vtab *v, sqlite_int64 iRow, - sqlite3_value **pValues){ - int rc = initPendingTerms(v, iRow); - if( rc!=SQLITE_OK ) return rc; - - /* Generate an empty doclist for each term that previously appeared in this - * row. */ - rc = deleteTerms(v, iRow); - if( rc!=SQLITE_OK ) return rc; - - rc = content_update(v, pValues, iRow); /* execute an SQL UPDATE */ - if( rc!=SQLITE_OK ) return rc; +static int fts3PendingTermsAddOne( + Fts3Table *p, + int iCol, + int iPos, + Fts3Hash *pHash, /* Pending terms hash table to add entry to */ + const char *zToken, + int nToken +){ + PendingList *pList; + int rc = SQLITE_OK; - /* Now add positions for terms which appear in the updated row. */ - return insertTerms(v, iRow, pValues); + pList = (PendingList *)fts3HashFind(pHash, zToken, nToken); + if( pList ){ + p->nPendingData -= (pList->nData + nToken + sizeof(Fts3HashElem)); + } + if( fts3PendingListAppend(&pList, p->iPrevDocid, iCol, iPos, &rc) ){ + if( pList==fts3HashInsert(pHash, zToken, nToken, pList) ){ + /* Malloc failed while inserting the new entry. This can only + ** happen if there was no previous entry for this token. + */ + assert( 0==fts3HashFind(pHash, zToken, nToken) ); + sqlite3_free(pList); + rc = SQLITE_NOMEM; + } + } + if( rc==SQLITE_OK ){ + p->nPendingData += (pList->nData + nToken + sizeof(Fts3HashElem)); + } + return rc; } -/*******************************************************************/ -/* InteriorWriter is used to collect terms and block references into -** interior nodes in %_segments. See commentary at top of file for -** format. -*/ - -/* How large interior nodes can grow. */ -#define INTERIOR_MAX 2048 - -/* Minimum number of terms per interior node (except the root). This -** prevents large terms from making the tree too skinny - must be >0 -** so that the tree always makes progress. Note that the min tree -** fanout will be INTERIOR_MIN_TERMS+1. +/* +** Tokenize the nul-terminated string zText and add all tokens to the +** pending-terms hash-table. The docid used is that currently stored in +** p->iPrevDocid, and the column is specified by argument iCol. +** +** If successful, SQLITE_OK is returned. Otherwise, an SQLite error code. */ -#define INTERIOR_MIN_TERMS 7 -#if INTERIOR_MIN_TERMS<1 -# error INTERIOR_MIN_TERMS must be greater than 0. -#endif +static int fts3PendingTermsAdd( + Fts3Table *p, /* Table into which text will be inserted */ + int iLangid, /* Language id to use */ + const char *zText, /* Text of document to be inserted */ + int iCol, /* Column into which text is being inserted */ + u32 *pnWord /* OUT: Number of tokens inserted */ +){ + int rc; + int iStart; + int iEnd; + int iPos; + int nWord = 0; -/* ROOT_MAX controls how much data is stored inline in the segment -** directory. -*/ -/* TODO(shess) Push ROOT_MAX down to whoever is writing things. It's -** only here so that interiorWriterRootInfo() and leafWriterRootInfo() -** can both see it, but if the caller passed it in, we wouldn't even -** need a define. -*/ -#define ROOT_MAX 1024 -#if ROOT_MAXpTokenizer; + sqlite3_tokenizer_module const *pModule = pTokenizer->pModule; + sqlite3_tokenizer_cursor *pCsr; + int (*xNext)(sqlite3_tokenizer_cursor *pCursor, + const char**,int*,int*,int*,int*); -static InteriorBlock *interiorBlockNew(int iHeight, sqlite_int64 iChildBlock, - const char *pTerm, int nTerm){ - InteriorBlock *block = sqlite3_malloc(sizeof(InteriorBlock)); - char c[VARINT_MAX+VARINT_MAX]; - int n; + assert( pTokenizer && pModule ); - if( block ){ - memset(block, 0, sizeof(*block)); - dataBufferInit(&block->term, 0); - dataBufferReplace(&block->term, pTerm, nTerm); + /* If the user has inserted a NULL value, this function may be called with + ** zText==0. In this case, add zero token entries to the hash table and + ** return early. */ + if( zText==0 ){ + *pnWord = 0; + return SQLITE_OK; + } - n = fts3PutVarint(c, iHeight); - n += fts3PutVarint(c+n, iChildBlock); - dataBufferInit(&block->data, INTERIOR_MAX); - dataBufferReplace(&block->data, c, n); + rc = sqlite3Fts3OpenTokenizer(pTokenizer, iLangid, zText, -1, &pCsr); + if( rc!=SQLITE_OK ){ + return rc; } - return block; -} -#ifndef NDEBUG -/* Verify that the data is readable as an interior node. */ -static void interiorBlockValidate(InteriorBlock *pBlock){ - const char *pData = pBlock->data.pData; - int nData = pBlock->data.nData; - int n, iDummy; - sqlite_int64 iBlockid; - - assert( nData>0 ); - assert( pData!=0 ); - assert( pData+nData>pData ); - - /* Must lead with height of node as a varint(n), n>0 */ - n = fts3GetVarint32(pData, &iDummy); - assert( n>0 ); - assert( iDummy>0 ); - assert( nxNext; + while( SQLITE_OK==rc + && SQLITE_OK==(rc = xNext(pCsr, &zToken, &nToken, &iStart, &iEnd, &iPos)) + ){ + int i; + if( iPos>=nWord ) nWord = iPos+1; - /* Must contain iBlockid. */ - n = fts3GetVarint(pData, &iBlockid); - assert( n>0 ); - assert( n<=nData ); - pData += n; - nData -= n; - - /* Zero or more terms of positive length */ - if( nData!=0 ){ - /* First term is not delta-encoded. */ - n = fts3GetVarint32(pData, &iDummy); - assert( n>0 ); - assert( iDummy>0 ); - assert( n+iDummy>0); - assert( n+iDummy<=nData ); - pData += n+iDummy; - nData -= n+iDummy; - - /* Following terms delta-encoded. */ - while( nData!=0 ){ - /* Length of shared prefix. */ - n = fts3GetVarint32(pData, &iDummy); - assert( n>0 ); - assert( iDummy>=0 ); - assert( n0 ); - assert( iDummy>0 ); - assert( n+iDummy>0); - assert( n+iDummy<=nData ); - pData += n+iDummy; - nData -= n+iDummy; + /* Add the term to the terms index */ + rc = fts3PendingTermsAddOne( + p, iCol, iPos, &p->aIndex[0].hPending, zToken, nToken + ); + + /* Add the term to each of the prefix indexes that it is not too + ** short for. */ + for(i=1; rc==SQLITE_OK && inIndex; i++){ + struct Fts3Index *pIndex = &p->aIndex[i]; + if( nTokennPrefix ) continue; + rc = fts3PendingTermsAddOne( + p, iCol, iPos, &pIndex->hPending, zToken, pIndex->nPrefix + ); } } -} -#define ASSERT_VALID_INTERIOR_BLOCK(x) interiorBlockValidate(x) -#else -#define ASSERT_VALID_INTERIOR_BLOCK(x) assert( 1 ) -#endif - -typedef struct InteriorWriter { - int iHeight; /* from 0 at leaves. */ - InteriorBlock *first, *last; - struct InteriorWriter *parentWriter; - - DataBuffer term; /* Last term written to block "last". */ - sqlite_int64 iOpeningChildBlock; /* First child block in block "last". */ -#ifndef NDEBUG - sqlite_int64 iLastChildBlock; /* for consistency checks. */ -#endif -} InteriorWriter; - -/* Initialize an interior node where pTerm[nTerm] marks the leftmost -** term in the tree. iChildBlock is the leftmost child block at the -** next level down the tree. -*/ -static void interiorWriterInit(int iHeight, const char *pTerm, int nTerm, - sqlite_int64 iChildBlock, - InteriorWriter *pWriter){ - InteriorBlock *block; - assert( iHeight>0 ); - CLEAR(pWriter); - pWriter->iHeight = iHeight; - pWriter->iOpeningChildBlock = iChildBlock; -#ifndef NDEBUG - pWriter->iLastChildBlock = iChildBlock; -#endif - block = interiorBlockNew(iHeight, iChildBlock, pTerm, nTerm); - pWriter->last = pWriter->first = block; - ASSERT_VALID_INTERIOR_BLOCK(pWriter->last); - dataBufferInit(&pWriter->term, 0); + pModule->xClose(pCsr); + *pnWord = nWord; + return (rc==SQLITE_DONE ? SQLITE_OK : rc); } -/* Append the child node rooted at iChildBlock to the interior node, -** with pTerm[nTerm] as the leftmost term in iChildBlock's subtree. -*/ -static void interiorWriterAppend(InteriorWriter *pWriter, - const char *pTerm, int nTerm, - sqlite_int64 iChildBlock){ - char c[VARINT_MAX+VARINT_MAX]; - int n, nPrefix = 0; - - ASSERT_VALID_INTERIOR_BLOCK(pWriter->last); - - /* The first term written into an interior node is actually - ** associated with the second child added (the first child was added - ** in interiorWriterInit, or in the if clause at the bottom of this - ** function). That term gets encoded straight up, with nPrefix left - ** at 0. - */ - if( pWriter->term.nData==0 ){ - n = fts3PutVarint(c, nTerm); - }else{ - while( nPrefixterm.nData && - pTerm[nPrefix]==pWriter->term.pData[nPrefix] ){ - nPrefix++; - } - - n = fts3PutVarint(c, nPrefix); - n += fts3PutVarint(c+n, nTerm-nPrefix); - } - -#ifndef NDEBUG - pWriter->iLastChildBlock++; -#endif - assert( pWriter->iLastChildBlock==iChildBlock ); +/* +** Calling this function indicates that subsequent calls to +** fts3PendingTermsAdd() are to add term/position-list pairs for the +** contents of the document with docid iDocid. +*/ +static int fts3PendingTermsDocid( + Fts3Table *p, /* Full-text table handle */ + int iLangid, /* Language id of row being written */ + sqlite_int64 iDocid /* Docid of row being written */ +){ + assert( iLangid>=0 ); - /* Overflow to a new block if the new term makes the current block - ** too big, and the current block already has enough terms. + /* TODO(shess) Explore whether partially flushing the buffer on + ** forced-flush would provide better performance. I suspect that if + ** we ordered the doclists by size and flushed the largest until the + ** buffer was half empty, that would let the less frequent terms + ** generate longer doclists. */ - if( pWriter->last->data.nData+n+nTerm-nPrefix>INTERIOR_MAX && - iChildBlock-pWriter->iOpeningChildBlock>INTERIOR_MIN_TERMS ){ - pWriter->last->next = interiorBlockNew(pWriter->iHeight, iChildBlock, - pTerm, nTerm); - pWriter->last = pWriter->last->next; - pWriter->iOpeningChildBlock = iChildBlock; - dataBufferReset(&pWriter->term); - }else{ - dataBufferAppend2(&pWriter->last->data, c, n, - pTerm+nPrefix, nTerm-nPrefix); - dataBufferReplace(&pWriter->term, pTerm, nTerm); + if( iDocid<=p->iPrevDocid + || p->iPrevLangid!=iLangid + || p->nPendingData>p->nMaxPendingData + ){ + int rc = sqlite3Fts3PendingTermsFlush(p); + if( rc!=SQLITE_OK ) return rc; } - ASSERT_VALID_INTERIOR_BLOCK(pWriter->last); + p->iPrevDocid = iDocid; + p->iPrevLangid = iLangid; + return SQLITE_OK; } -/* Free the space used by pWriter, including the linked-list of -** InteriorBlocks, and parentWriter, if present. +/* +** Discard the contents of the pending-terms hash tables. */ -static int interiorWriterDestroy(InteriorWriter *pWriter){ - InteriorBlock *block = pWriter->first; - - while( block!=NULL ){ - InteriorBlock *b = block; - block = block->next; - dataBufferDestroy(&b->term); - dataBufferDestroy(&b->data); - sqlite3_free(b); +SQLITE_PRIVATE void sqlite3Fts3PendingTermsClear(Fts3Table *p){ + int i; + for(i=0; inIndex; i++){ + Fts3HashElem *pElem; + Fts3Hash *pHash = &p->aIndex[i].hPending; + for(pElem=fts3HashFirst(pHash); pElem; pElem=fts3HashNext(pElem)){ + PendingList *pList = (PendingList *)fts3HashData(pElem); + fts3PendingListDelete(pList); + } + fts3HashClear(pHash); } - if( pWriter->parentWriter!=NULL ){ - interiorWriterDestroy(pWriter->parentWriter); - sqlite3_free(pWriter->parentWriter); + p->nPendingData = 0; +} + +/* +** This function is called by the xUpdate() method as part of an INSERT +** operation. It adds entries for each term in the new record to the +** pendingTerms hash table. +** +** Argument apVal is the same as the similarly named argument passed to +** fts3InsertData(). Parameter iDocid is the docid of the new row. +*/ +static int fts3InsertTerms( + Fts3Table *p, + int iLangid, + sqlite3_value **apVal, + u32 *aSz +){ + int i; /* Iterator variable */ + for(i=2; inColumn+2; i++){ + const char *zText = (const char *)sqlite3_value_text(apVal[i]); + int rc = fts3PendingTermsAdd(p, iLangid, zText, i-2, &aSz[i-2]); + if( rc!=SQLITE_OK ){ + return rc; + } + aSz[p->nColumn] += sqlite3_value_bytes(apVal[i]); } - dataBufferDestroy(&pWriter->term); - SCRAMBLE(pWriter); return SQLITE_OK; } -/* If pWriter can fit entirely in ROOT_MAX, return it as the root info -** directly, leaving *piEndBlockid unchanged. Otherwise, flush -** pWriter to %_segments, building a new layer of interior nodes, and -** recursively ask for their root into. -*/ -static int interiorWriterRootInfo(fulltext_vtab *v, InteriorWriter *pWriter, - char **ppRootInfo, int *pnRootInfo, - sqlite_int64 *piEndBlockid){ - InteriorBlock *block = pWriter->first; - sqlite_int64 iBlockid = 0; - int rc; +/* +** This function is called by the xUpdate() method for an INSERT operation. +** The apVal parameter is passed a copy of the apVal argument passed by +** SQLite to the xUpdate() method. i.e: +** +** apVal[0] Not used for INSERT. +** apVal[1] rowid +** apVal[2] Left-most user-defined column +** ... +** apVal[p->nColumn+1] Right-most user-defined column +** apVal[p->nColumn+2] Hidden column with same name as table +** apVal[p->nColumn+3] Hidden "docid" column (alias for rowid) +** apVal[p->nColumn+4] Hidden languageid column +*/ +static int fts3InsertData( + Fts3Table *p, /* Full-text table */ + sqlite3_value **apVal, /* Array of values to insert */ + sqlite3_int64 *piDocid /* OUT: Docid for row just inserted */ +){ + int rc; /* Return code */ + sqlite3_stmt *pContentInsert; /* INSERT INTO %_content VALUES(...) */ - /* If we can fit the segment inline */ - if( block==pWriter->last && block->data.nDatadata.pData; - *pnRootInfo = block->data.nData; + if( p->zContentTbl ){ + sqlite3_value *pRowid = apVal[p->nColumn+3]; + if( sqlite3_value_type(pRowid)==SQLITE_NULL ){ + pRowid = apVal[1]; + } + if( sqlite3_value_type(pRowid)!=SQLITE_INTEGER ){ + return SQLITE_CONSTRAINT; + } + *piDocid = sqlite3_value_int64(pRowid); return SQLITE_OK; } - /* Flush the first block to %_segments, and create a new level of - ** interior node. - */ - ASSERT_VALID_INTERIOR_BLOCK(block); - rc = block_insert(v, block->data.pData, block->data.nData, &iBlockid); + /* Locate the statement handle used to insert data into the %_content + ** table. The SQL for this statement is: + ** + ** INSERT INTO %_content VALUES(?, ?, ?, ...) + ** + ** The statement features N '?' variables, where N is the number of user + ** defined columns in the FTS3 table, plus one for the docid field. + */ + rc = fts3SqlStmt(p, SQL_CONTENT_INSERT, &pContentInsert, &apVal[1]); + if( rc==SQLITE_OK && p->zLanguageid ){ + rc = sqlite3_bind_int( + pContentInsert, p->nColumn+2, + sqlite3_value_int(apVal[p->nColumn+4]) + ); + } if( rc!=SQLITE_OK ) return rc; - *piEndBlockid = iBlockid; - - pWriter->parentWriter = sqlite3_malloc(sizeof(*pWriter->parentWriter)); - interiorWriterInit(pWriter->iHeight+1, - block->term.pData, block->term.nData, - iBlockid, pWriter->parentWriter); - /* Flush additional blocks and append to the higher interior - ** node. + /* There is a quirk here. The users INSERT statement may have specified + ** a value for the "rowid" field, for the "docid" field, or for both. + ** Which is a problem, since "rowid" and "docid" are aliases for the + ** same value. For example: + ** + ** INSERT INTO fts3tbl(rowid, docid) VALUES(1, 2); + ** + ** In FTS3, this is an error. It is an error to specify non-NULL values + ** for both docid and some other rowid alias. */ - for(block=block->next; block!=NULL; block=block->next){ - ASSERT_VALID_INTERIOR_BLOCK(block); - rc = block_insert(v, block->data.pData, block->data.nData, &iBlockid); + if( SQLITE_NULL!=sqlite3_value_type(apVal[3+p->nColumn]) ){ + if( SQLITE_NULL==sqlite3_value_type(apVal[0]) + && SQLITE_NULL!=sqlite3_value_type(apVal[1]) + ){ + /* A rowid/docid conflict. */ + return SQLITE_ERROR; + } + rc = sqlite3_bind_value(pContentInsert, 1, apVal[3+p->nColumn]); if( rc!=SQLITE_OK ) return rc; - *piEndBlockid = iBlockid; - - interiorWriterAppend(pWriter->parentWriter, - block->term.pData, block->term.nData, iBlockid); } - /* Parent node gets the chance to be the root. */ - return interiorWriterRootInfo(v, pWriter->parentWriter, - ppRootInfo, pnRootInfo, piEndBlockid); -} - -/****************************************************************/ -/* InteriorReader is used to read off the data from an interior node -** (see comment at top of file for the format). -*/ -typedef struct InteriorReader { - const char *pData; - int nData; - - DataBuffer term; /* previous term, for decoding term delta. */ - - sqlite_int64 iBlockid; -} InteriorReader; + /* Execute the statement to insert the record. Set *piDocid to the + ** new docid value. + */ + sqlite3_step(pContentInsert); + rc = sqlite3_reset(pContentInsert); -static void interiorReaderDestroy(InteriorReader *pReader){ - dataBufferDestroy(&pReader->term); - SCRAMBLE(pReader); + *piDocid = sqlite3_last_insert_rowid(p->db); + return rc; } -/* TODO(shess) The assertions are great, but what if we're in NDEBUG -** and the blob is empty or otherwise contains suspect data? -*/ -static void interiorReaderInit(const char *pData, int nData, - InteriorReader *pReader){ - int n, nTerm; - /* Require at least the leading flag byte */ - assert( nData>0 ); - assert( pData[0]!='\0' ); - CLEAR(pReader); +/* +** Remove all data from the FTS3 table. Clear the hash table containing +** pending terms. +*/ +static int fts3DeleteAll(Fts3Table *p, int bContent){ + int rc = SQLITE_OK; /* Return code */ - /* Decode the base blockid, and set the cursor to the first term. */ - n = fts3GetVarint(pData+1, &pReader->iBlockid); - assert( 1+n<=nData ); - pReader->pData = pData+1+n; - pReader->nData = nData-(1+n); + /* Discard the contents of the pending-terms hash table. */ + sqlite3Fts3PendingTermsClear(p); - /* A single-child interior node (such as when a leaf node was too - ** large for the segment directory) won't have any terms. - ** Otherwise, decode the first term. - */ - if( pReader->nData==0 ){ - dataBufferInit(&pReader->term, 0); - }else{ - n = fts3GetVarint32(pReader->pData, &nTerm); - dataBufferInit(&pReader->term, nTerm); - dataBufferReplace(&pReader->term, pReader->pData+n, nTerm); - assert( n+nTerm<=pReader->nData ); - pReader->pData += n+nTerm; - pReader->nData -= n+nTerm; + /* Delete everything from the shadow tables. Except, leave %_content as + ** is if bContent is false. */ + assert( p->zContentTbl==0 || bContent==0 ); + if( bContent ) fts3SqlExec(&rc, p, SQL_DELETE_ALL_CONTENT, 0); + fts3SqlExec(&rc, p, SQL_DELETE_ALL_SEGMENTS, 0); + fts3SqlExec(&rc, p, SQL_DELETE_ALL_SEGDIR, 0); + if( p->bHasDocsize ){ + fts3SqlExec(&rc, p, SQL_DELETE_ALL_DOCSIZE, 0); + } + if( p->bHasStat ){ + fts3SqlExec(&rc, p, SQL_DELETE_ALL_STAT, 0); } + return rc; } -static int interiorReaderAtEnd(InteriorReader *pReader){ - return pReader->term.nData==0; +/* +** +*/ +static int langidFromSelect(Fts3Table *p, sqlite3_stmt *pSelect){ + int iLangid = 0; + if( p->zLanguageid ) iLangid = sqlite3_column_int(pSelect, p->nColumn+1); + return iLangid; } -static sqlite_int64 interiorReaderCurrentBlockid(InteriorReader *pReader){ - return pReader->iBlockid; -} +/* +** The first element in the apVal[] array is assumed to contain the docid +** (an integer) of a row about to be deleted. Remove all terms from the +** full-text index. +*/ +static void fts3DeleteTerms( + int *pRC, /* Result code */ + Fts3Table *p, /* The FTS table to delete from */ + sqlite3_value *pRowid, /* The docid to be deleted */ + u32 *aSz /* Sizes of deleted document written here */ +){ + int rc; + sqlite3_stmt *pSelect; -static int interiorReaderTermBytes(InteriorReader *pReader){ - assert( !interiorReaderAtEnd(pReader) ); - return pReader->term.nData; -} -static const char *interiorReaderTerm(InteriorReader *pReader){ - assert( !interiorReaderAtEnd(pReader) ); - return pReader->term.pData; + if( *pRC ) return; + rc = fts3SqlStmt(p, SQL_SELECT_CONTENT_BY_ROWID, &pSelect, &pRowid); + if( rc==SQLITE_OK ){ + if( SQLITE_ROW==sqlite3_step(pSelect) ){ + int i; + int iLangid = langidFromSelect(p, pSelect); + rc = fts3PendingTermsDocid(p, iLangid, sqlite3_column_int64(pSelect, 0)); + for(i=1; rc==SQLITE_OK && i<=p->nColumn; i++){ + const char *zText = (const char *)sqlite3_column_text(pSelect, i); + rc = fts3PendingTermsAdd(p, iLangid, zText, -1, &aSz[i-1]); + aSz[p->nColumn] += sqlite3_column_bytes(pSelect, i); + } + if( rc!=SQLITE_OK ){ + sqlite3_reset(pSelect); + *pRC = rc; + return; + } + } + rc = sqlite3_reset(pSelect); + }else{ + sqlite3_reset(pSelect); + } + *pRC = rc; } -/* Step forward to the next term in the node. */ -static void interiorReaderStep(InteriorReader *pReader){ - assert( !interiorReaderAtEnd(pReader) ); - - /* If the last term has been read, signal eof, else construct the - ** next term. - */ - if( pReader->nData==0 ){ - dataBufferReset(&pReader->term); - }else{ - int n, nPrefix, nSuffix; +/* +** Forward declaration to account for the circular dependency between +** functions fts3SegmentMerge() and fts3AllocateSegdirIdx(). +*/ +static int fts3SegmentMerge(Fts3Table *, int, int, int); - n = fts3GetVarint32(pReader->pData, &nPrefix); - n += fts3GetVarint32(pReader->pData+n, &nSuffix); +/* +** This function allocates a new level iLevel index in the segdir table. +** Usually, indexes are allocated within a level sequentially starting +** with 0, so the allocated index is one greater than the value returned +** by: +** +** SELECT max(idx) FROM %_segdir WHERE level = :iLevel +** +** However, if there are already FTS3_MERGE_COUNT indexes at the requested +** level, they are merged into a single level (iLevel+1) segment and the +** allocated index is 0. +** +** If successful, *piIdx is set to the allocated index slot and SQLITE_OK +** returned. Otherwise, an SQLite error code is returned. +*/ +static int fts3AllocateSegdirIdx( + Fts3Table *p, + int iLangid, /* Language id */ + int iIndex, /* Index for p->aIndex */ + int iLevel, + int *piIdx +){ + int rc; /* Return Code */ + sqlite3_stmt *pNextIdx; /* Query for next idx at level iLevel */ + int iNext = 0; /* Result of query pNextIdx */ - /* Truncate the current term and append suffix data. */ - pReader->term.nData = nPrefix; - dataBufferAppend(&pReader->term, pReader->pData+n, nSuffix); + assert( iLangid>=0 ); + assert( p->nIndex>=1 ); - assert( n+nSuffix<=pReader->nData ); - pReader->pData += n+nSuffix; - pReader->nData -= n+nSuffix; + /* Set variable iNext to the next available segdir index at level iLevel. */ + rc = fts3SqlStmt(p, SQL_NEXT_SEGMENT_INDEX, &pNextIdx, 0); + if( rc==SQLITE_OK ){ + sqlite3_bind_int64( + pNextIdx, 1, getAbsoluteLevel(p, iLangid, iIndex, iLevel) + ); + if( SQLITE_ROW==sqlite3_step(pNextIdx) ){ + iNext = sqlite3_column_int(pNextIdx, 0); + } + rc = sqlite3_reset(pNextIdx); } - pReader->iBlockid++; -} - -/* Compare the current term to pTerm[nTerm], returning strcmp-style -** results. If isPrefix, equality means equal through nTerm bytes. -*/ -static int interiorReaderTermCmp(InteriorReader *pReader, - const char *pTerm, int nTerm, int isPrefix){ - const char *pReaderTerm = interiorReaderTerm(pReader); - int nReaderTerm = interiorReaderTermBytes(pReader); - int c, n = nReaderTerm0 ) return -1; - if( nTerm>0 ) return 1; - return 0; + if( rc==SQLITE_OK ){ + /* If iNext is FTS3_MERGE_COUNT, indicating that level iLevel is already + ** full, merge all segments in level iLevel into a single iLevel+1 + ** segment and allocate (newly freed) index 0 at level iLevel. Otherwise, + ** if iNext is less than FTS3_MERGE_COUNT, allocate index iNext. + */ + if( iNext>=FTS3_MERGE_COUNT ){ + fts3LogMerge(16, getAbsoluteLevel(p, iLangid, iIndex, iLevel)); + rc = fts3SegmentMerge(p, iLangid, iIndex, iLevel); + *piIdx = 0; + }else{ + *piIdx = iNext; + } } - c = memcmp(pReaderTerm, pTerm, n); - if( c!=0 ) return c; - if( isPrefix && n==nTerm ) return 0; - return nReaderTerm - nTerm; + return rc; } -/****************************************************************/ -/* LeafWriter is used to collect terms and associated doclist data -** into leaf blocks in %_segments (see top of file for format info). -** Expected usage is: +/* +** The %_segments table is declared as follows: ** -** LeafWriter writer; -** leafWriterInit(0, 0, &writer); -** while( sorted_terms_left_to_process ){ -** // data is doclist data for that term. -** rc = leafWriterStep(v, &writer, pTerm, nTerm, pData, nData); -** if( rc!=SQLITE_OK ) goto err; -** } -** rc = leafWriterFinalize(v, &writer); -**err: -** leafWriterDestroy(&writer); -** return rc; +** CREATE TABLE %_segments(blockid INTEGER PRIMARY KEY, block BLOB) ** -** leafWriterStep() may write a collected leaf out to %_segments. -** leafWriterFinalize() finishes writing any buffered data and stores -** a root node in %_segdir. leafWriterDestroy() frees all buffers and -** InteriorWriters allocated as part of writing this segment. +** This function reads data from a single row of the %_segments table. The +** specific row is identified by the iBlockid parameter. If paBlob is not +** NULL, then a buffer is allocated using sqlite3_malloc() and populated +** with the contents of the blob stored in the "block" column of the +** identified table row is. Whether or not paBlob is NULL, *pnBlob is set +** to the size of the blob in bytes before returning. ** -** TODO(shess) Document leafWriterStepMerge(). +** If an error occurs, or the table does not contain the specified row, +** an SQLite error code is returned. Otherwise, SQLITE_OK is returned. If +** paBlob is non-NULL, then it is the responsibility of the caller to +** eventually free the returned buffer. +** +** This function may leave an open sqlite3_blob* handle in the +** Fts3Table.pSegments variable. This handle is reused by subsequent calls +** to this function. The handle may be closed by calling the +** sqlite3Fts3SegmentsClose() function. Reusing a blob handle is a handy +** performance improvement, but the blob handle should always be closed +** before control is returned to the user (to prevent a lock being held +** on the database file for longer than necessary). Thus, any virtual table +** method (xFilter etc.) that may directly or indirectly call this function +** must call sqlite3Fts3SegmentsClose() before returning. */ +SQLITE_PRIVATE int sqlite3Fts3ReadBlock( + Fts3Table *p, /* FTS3 table handle */ + sqlite3_int64 iBlockid, /* Access the row with blockid=$iBlockid */ + char **paBlob, /* OUT: Blob data in malloc'd buffer */ + int *pnBlob, /* OUT: Size of blob data */ + int *pnLoad /* OUT: Bytes actually loaded */ +){ + int rc; /* Return code */ -/* Put terms with data this big in their own block. */ -#define STANDALONE_MIN 1024 - -/* Keep leaf blocks below this size. */ -#define LEAF_MAX 2048 - -typedef struct LeafWriter { - int iLevel; - int idx; - sqlite_int64 iStartBlockid; /* needed to create the root info */ - sqlite_int64 iEndBlockid; /* when we're done writing. */ - - DataBuffer term; /* previous encoded term */ - DataBuffer data; /* encoding buffer */ - - /* bytes of first term in the current node which distinguishes that - ** term from the last term of the previous node. - */ - int nTermDistinct; - - InteriorWriter parentWriter; /* if we overflow */ - int has_parent; -} LeafWriter; + /* pnBlob must be non-NULL. paBlob may be NULL or non-NULL. */ + assert( pnBlob ); -static void leafWriterInit(int iLevel, int idx, LeafWriter *pWriter){ - CLEAR(pWriter); - pWriter->iLevel = iLevel; - pWriter->idx = idx; + if( p->pSegments ){ + rc = sqlite3_blob_reopen(p->pSegments, iBlockid); + }else{ + if( 0==p->zSegmentsTbl ){ + p->zSegmentsTbl = sqlite3_mprintf("%s_segments", p->zName); + if( 0==p->zSegmentsTbl ) return SQLITE_NOMEM; + } + rc = sqlite3_blob_open( + p->db, p->zDb, p->zSegmentsTbl, "block", iBlockid, 0, &p->pSegments + ); + } - dataBufferInit(&pWriter->term, 32); + if( rc==SQLITE_OK ){ + int nByte = sqlite3_blob_bytes(p->pSegments); + *pnBlob = nByte; + if( paBlob ){ + char *aByte = sqlite3_malloc(nByte + FTS3_NODE_PADDING); + if( !aByte ){ + rc = SQLITE_NOMEM; + }else{ + if( pnLoad && nByte>(FTS3_NODE_CHUNK_THRESHOLD) ){ + nByte = FTS3_NODE_CHUNKSIZE; + *pnLoad = nByte; + } + rc = sqlite3_blob_read(p->pSegments, aByte, nByte, 0); + memset(&aByte[nByte], 0, FTS3_NODE_PADDING); + if( rc!=SQLITE_OK ){ + sqlite3_free(aByte); + aByte = 0; + } + } + *paBlob = aByte; + } + } - /* Start out with a reasonably sized block, though it can grow. */ - dataBufferInit(&pWriter->data, LEAF_MAX); + return rc; } -#ifndef NDEBUG -/* Verify that the data is readable as a leaf node. */ -static void leafNodeValidate(const char *pData, int nData){ - int n, iDummy; - - if( nData==0 ) return; - assert( nData>0 ); - assert( pData!=0 ); - assert( pData+nData>pData ); - - /* Must lead with a varint(0) */ - n = fts3GetVarint32(pData, &iDummy); - assert( iDummy==0 ); - assert( n>0 ); - assert( n0 ); - assert( iDummy>0 ); - assert( n+iDummy>0 ); - assert( n+iDummy0 ); - assert( iDummy>0 ); - assert( n+iDummy>0 ); - assert( n+iDummy<=nData ); - ASSERT_VALID_DOCLIST(DL_DEFAULT, pData+n, iDummy, NULL); - pData += n+iDummy; - nData -= n+iDummy; - - /* Verify that trailing terms and doclists also are readable. */ - while( nData!=0 ){ - n = fts3GetVarint32(pData, &iDummy); - assert( n>0 ); - assert( iDummy>=0 ); - assert( n0 ); - assert( iDummy>0 ); - assert( n+iDummy>0 ); - assert( n+iDummy0 ); - assert( iDummy>0 ); - assert( n+iDummy>0 ); - assert( n+iDummy<=nData ); - ASSERT_VALID_DOCLIST(DL_DEFAULT, pData+n, iDummy, NULL); - pData += n+iDummy; - nData -= n+iDummy; - } -} -#define ASSERT_VALID_LEAF_NODE(p, n) leafNodeValidate(p, n) -#else -#define ASSERT_VALID_LEAF_NODE(p, n) assert( 1 ) -#endif - -/* Flush the current leaf node to %_segments, and adding the resulting -** blockid and the starting term to the interior node which will -** contain it. +/* +** Close the blob handle at p->pSegments, if it is open. See comments above +** the sqlite3Fts3ReadBlock() function for details. */ -static int leafWriterInternalFlush(fulltext_vtab *v, LeafWriter *pWriter, - int iData, int nData){ - sqlite_int64 iBlockid = 0; - const char *pStartingTerm; - int nStartingTerm, rc, n; - - /* Must have the leading varint(0) flag, plus at least some - ** valid-looking data. - */ - assert( nData>2 ); - assert( iData>=0 ); - assert( iData+nData<=pWriter->data.nData ); - ASSERT_VALID_LEAF_NODE(pWriter->data.pData+iData, nData); +SQLITE_PRIVATE void sqlite3Fts3SegmentsClose(Fts3Table *p){ + sqlite3_blob_close(p->pSegments); + p->pSegments = 0; +} + +static int fts3SegReaderIncrRead(Fts3SegReader *pReader){ + int nRead; /* Number of bytes to read */ + int rc; /* Return code */ + + nRead = MIN(pReader->nNode - pReader->nPopulate, FTS3_NODE_CHUNKSIZE); + rc = sqlite3_blob_read( + pReader->pBlob, + &pReader->aNode[pReader->nPopulate], + nRead, + pReader->nPopulate + ); - rc = block_insert(v, pWriter->data.pData+iData, nData, &iBlockid); - if( rc!=SQLITE_OK ) return rc; - assert( iBlockid!=0 ); + if( rc==SQLITE_OK ){ + pReader->nPopulate += nRead; + memset(&pReader->aNode[pReader->nPopulate], 0, FTS3_NODE_PADDING); + if( pReader->nPopulate==pReader->nNode ){ + sqlite3_blob_close(pReader->pBlob); + pReader->pBlob = 0; + pReader->nPopulate = 0; + } + } + return rc; +} - /* Reconstruct the first term in the leaf for purposes of building - ** the interior node. - */ - n = fts3GetVarint32(pWriter->data.pData+iData+1, &nStartingTerm); - pStartingTerm = pWriter->data.pData+iData+1+n; - assert( pWriter->data.nData>iData+1+n+nStartingTerm ); - assert( pWriter->nTermDistinct>0 ); - assert( pWriter->nTermDistinct<=nStartingTerm ); - nStartingTerm = pWriter->nTermDistinct; +static int fts3SegReaderRequire(Fts3SegReader *pReader, char *pFrom, int nByte){ + int rc = SQLITE_OK; + assert( !pReader->pBlob + || (pFrom>=pReader->aNode && pFrom<&pReader->aNode[pReader->nNode]) + ); + while( pReader->pBlob && rc==SQLITE_OK + && (pFrom - pReader->aNode + nByte)>pReader->nPopulate + ){ + rc = fts3SegReaderIncrRead(pReader); + } + return rc; +} - if( pWriter->has_parent ){ - interiorWriterAppend(&pWriter->parentWriter, - pStartingTerm, nStartingTerm, iBlockid); - }else{ - interiorWriterInit(1, pStartingTerm, nStartingTerm, iBlockid, - &pWriter->parentWriter); - pWriter->has_parent = 1; +/* +** Set an Fts3SegReader cursor to point at EOF. +*/ +static void fts3SegReaderSetEof(Fts3SegReader *pSeg){ + if( !fts3SegReaderIsRootOnly(pSeg) ){ + sqlite3_free(pSeg->aNode); + sqlite3_blob_close(pSeg->pBlob); + pSeg->pBlob = 0; } + pSeg->aNode = 0; +} + +/* +** Move the iterator passed as the first argument to the next term in the +** segment. If successful, SQLITE_OK is returned. If there is no next term, +** SQLITE_DONE. Otherwise, an SQLite error code. +*/ +static int fts3SegReaderNext( + Fts3Table *p, + Fts3SegReader *pReader, + int bIncr +){ + int rc; /* Return code of various sub-routines */ + char *pNext; /* Cursor variable */ + int nPrefix; /* Number of bytes in term prefix */ + int nSuffix; /* Number of bytes in term suffix */ - /* Track the span of this segment's leaf nodes. */ - if( pWriter->iEndBlockid==0 ){ - pWriter->iEndBlockid = pWriter->iStartBlockid = iBlockid; + if( !pReader->aDoclist ){ + pNext = pReader->aNode; }else{ - pWriter->iEndBlockid++; - assert( iBlockid==pWriter->iEndBlockid ); + pNext = &pReader->aDoclist[pReader->nDoclist]; } - return SQLITE_OK; -} -static int leafWriterFlush(fulltext_vtab *v, LeafWriter *pWriter){ - int rc = leafWriterInternalFlush(v, pWriter, 0, pWriter->data.nData); - if( rc!=SQLITE_OK ) return rc; + if( !pNext || pNext>=&pReader->aNode[pReader->nNode] ){ - /* Re-initialize the output buffer. */ - dataBufferReset(&pWriter->data); + if( fts3SegReaderIsPending(pReader) ){ + Fts3HashElem *pElem = *(pReader->ppNextElem); + if( pElem==0 ){ + pReader->aNode = 0; + }else{ + PendingList *pList = (PendingList *)fts3HashData(pElem); + pReader->zTerm = (char *)fts3HashKey(pElem); + pReader->nTerm = fts3HashKeysize(pElem); + pReader->nNode = pReader->nDoclist = pList->nData + 1; + pReader->aNode = pReader->aDoclist = pList->aData; + pReader->ppNextElem++; + assert( pReader->aNode ); + } + return SQLITE_OK; + } - return SQLITE_OK; -} + fts3SegReaderSetEof(pReader); -/* Fetch the root info for the segment. If the entire leaf fits -** within ROOT_MAX, then it will be returned directly, otherwise it -** will be flushed and the root info will be returned from the -** interior node. *piEndBlockid is set to the blockid of the last -** interior or leaf node written to disk (0 if none are written at -** all). -*/ -static int leafWriterRootInfo(fulltext_vtab *v, LeafWriter *pWriter, - char **ppRootInfo, int *pnRootInfo, - sqlite_int64 *piEndBlockid){ - /* we can fit the segment entirely inline */ - if( !pWriter->has_parent && pWriter->data.nDatadata.pData; - *pnRootInfo = pWriter->data.nData; - *piEndBlockid = 0; - return SQLITE_OK; - } + /* If iCurrentBlock>=iLeafEndBlock, this is an EOF condition. All leaf + ** blocks have already been traversed. */ + assert( pReader->iCurrentBlock<=pReader->iLeafEndBlock ); + if( pReader->iCurrentBlock>=pReader->iLeafEndBlock ){ + return SQLITE_OK; + } - /* Flush remaining leaf data. */ - if( pWriter->data.nData>0 ){ - int rc = leafWriterFlush(v, pWriter); + rc = sqlite3Fts3ReadBlock( + p, ++pReader->iCurrentBlock, &pReader->aNode, &pReader->nNode, + (bIncr ? &pReader->nPopulate : 0) + ); if( rc!=SQLITE_OK ) return rc; + assert( pReader->pBlob==0 ); + if( bIncr && pReader->nPopulatenNode ){ + pReader->pBlob = p->pSegments; + p->pSegments = 0; + } + pNext = pReader->aNode; } - /* We must have flushed a leaf at some point. */ - assert( pWriter->has_parent ); - - /* Tenatively set the end leaf blockid as the end blockid. If the - ** interior node can be returned inline, this will be the final - ** blockid, otherwise it will be overwritten by - ** interiorWriterRootInfo(). - */ - *piEndBlockid = pWriter->iEndBlockid; + assert( !fts3SegReaderIsPending(pReader) ); - return interiorWriterRootInfo(v, &pWriter->parentWriter, - ppRootInfo, pnRootInfo, piEndBlockid); -} + rc = fts3SegReaderRequire(pReader, pNext, FTS3_VARINT_MAX*2); + if( rc!=SQLITE_OK ) return rc; + + /* Because of the FTS3_NODE_PADDING bytes of padding, the following is + ** safe (no risk of overread) even if the node data is corrupted. */ + pNext += sqlite3Fts3GetVarint32(pNext, &nPrefix); + pNext += sqlite3Fts3GetVarint32(pNext, &nSuffix); + if( nPrefix<0 || nSuffix<=0 + || &pNext[nSuffix]>&pReader->aNode[pReader->nNode] + ){ + return FTS_CORRUPT_VTAB; + } -/* Collect the rootInfo data and store it into the segment directory. -** This has the effect of flushing the segment's leaf data to -** %_segments, and also flushing any interior nodes to %_segments. -*/ -static int leafWriterFinalize(fulltext_vtab *v, LeafWriter *pWriter){ - sqlite_int64 iEndBlockid; - char *pRootInfo; - int rc, nRootInfo; + if( nPrefix+nSuffix>pReader->nTermAlloc ){ + int nNew = (nPrefix+nSuffix)*2; + char *zNew = sqlite3_realloc(pReader->zTerm, nNew); + if( !zNew ){ + return SQLITE_NOMEM; + } + pReader->zTerm = zNew; + pReader->nTermAlloc = nNew; + } - rc = leafWriterRootInfo(v, pWriter, &pRootInfo, &nRootInfo, &iEndBlockid); + rc = fts3SegReaderRequire(pReader, pNext, nSuffix+FTS3_VARINT_MAX); if( rc!=SQLITE_OK ) return rc; - /* Don't bother storing an entirely empty segment. */ - if( iEndBlockid==0 && nRootInfo==0 ) return SQLITE_OK; + memcpy(&pReader->zTerm[nPrefix], pNext, nSuffix); + pReader->nTerm = nPrefix+nSuffix; + pNext += nSuffix; + pNext += sqlite3Fts3GetVarint32(pNext, &pReader->nDoclist); + pReader->aDoclist = pNext; + pReader->pOffsetList = 0; - return segdir_set(v, pWriter->iLevel, pWriter->idx, - pWriter->iStartBlockid, pWriter->iEndBlockid, - iEndBlockid, pRootInfo, nRootInfo); + /* Check that the doclist does not appear to extend past the end of the + ** b-tree node. And that the final byte of the doclist is 0x00. If either + ** of these statements is untrue, then the data structure is corrupt. + */ + if( &pReader->aDoclist[pReader->nDoclist]>&pReader->aNode[pReader->nNode] + || (pReader->nPopulate==0 && pReader->aDoclist[pReader->nDoclist-1]) + ){ + return FTS_CORRUPT_VTAB; + } + return SQLITE_OK; } -static void leafWriterDestroy(LeafWriter *pWriter){ - if( pWriter->has_parent ) interiorWriterDestroy(&pWriter->parentWriter); - dataBufferDestroy(&pWriter->term); - dataBufferDestroy(&pWriter->data); +/* +** Set the SegReader to point to the first docid in the doclist associated +** with the current term. +*/ +static int fts3SegReaderFirstDocid(Fts3Table *pTab, Fts3SegReader *pReader){ + int rc = SQLITE_OK; + assert( pReader->aDoclist ); + assert( !pReader->pOffsetList ); + if( pTab->bDescIdx && fts3SegReaderIsPending(pReader) ){ + u8 bEof = 0; + pReader->iDocid = 0; + pReader->nOffsetList = 0; + sqlite3Fts3DoclistPrev(0, + pReader->aDoclist, pReader->nDoclist, &pReader->pOffsetList, + &pReader->iDocid, &pReader->nOffsetList, &bEof + ); + }else{ + rc = fts3SegReaderRequire(pReader, pReader->aDoclist, FTS3_VARINT_MAX); + if( rc==SQLITE_OK ){ + int n = sqlite3Fts3GetVarint(pReader->aDoclist, &pReader->iDocid); + pReader->pOffsetList = &pReader->aDoclist[n]; + } + } + return rc; } -/* Encode a term into the leafWriter, delta-encoding as appropriate. -** Returns the length of the new term which distinguishes it from the -** previous term, which can be used to set nTermDistinct when a node -** boundary is crossed. -*/ -static int leafWriterEncodeTerm(LeafWriter *pWriter, - const char *pTerm, int nTerm){ - char c[VARINT_MAX+VARINT_MAX]; - int n, nPrefix = 0; +/* +** Advance the SegReader to point to the next docid in the doclist +** associated with the current term. +** +** If arguments ppOffsetList and pnOffsetList are not NULL, then +** *ppOffsetList is set to point to the first column-offset list +** in the doclist entry (i.e. immediately past the docid varint). +** *pnOffsetList is set to the length of the set of column-offset +** lists, not including the nul-terminator byte. For example: +*/ +static int fts3SegReaderNextDocid( + Fts3Table *pTab, + Fts3SegReader *pReader, /* Reader to advance to next docid */ + char **ppOffsetList, /* OUT: Pointer to current position-list */ + int *pnOffsetList /* OUT: Length of *ppOffsetList in bytes */ +){ + int rc = SQLITE_OK; + char *p = pReader->pOffsetList; + char c = 0; - assert( nTerm>0 ); - while( nPrefixterm.nData && - pTerm[nPrefix]==pWriter->term.pData[nPrefix] ){ - nPrefix++; - /* Failing this implies that the terms weren't in order. */ - assert( nPrefixbDescIdx && fts3SegReaderIsPending(pReader) ){ + /* A pending-terms seg-reader for an FTS4 table that uses order=desc. + ** Pending-terms doclists are always built up in ascending order, so + ** we have to iterate through them backwards here. */ + u8 bEof = 0; + if( ppOffsetList ){ + *ppOffsetList = pReader->pOffsetList; + *pnOffsetList = pReader->nOffsetList - 1; + } + sqlite3Fts3DoclistPrev(0, + pReader->aDoclist, pReader->nDoclist, &p, &pReader->iDocid, + &pReader->nOffsetList, &bEof + ); + if( bEof ){ + pReader->pOffsetList = 0; + }else{ + pReader->pOffsetList = p; + } + }else{ + char *pEnd = &pReader->aDoclist[pReader->nDoclist]; - if( pWriter->data.nData==0 ){ - /* Encode the node header and leading term as: - ** varint(0) - ** varint(nTerm) - ** char pTerm[nTerm] + /* Pointer p currently points at the first byte of an offset list. The + ** following block advances it to point one byte past the end of + ** the same offset list. */ + while( 1 ){ + + /* The following line of code (and the "p++" below the while() loop) is + ** normally all that is required to move pointer p to the desired + ** position. The exception is if this node is being loaded from disk + ** incrementally and pointer "p" now points to the first byte passed + ** the populated part of pReader->aNode[]. + */ + while( *p | c ) c = *p++ & 0x80; + assert( *p==0 ); + + if( pReader->pBlob==0 || p<&pReader->aNode[pReader->nPopulate] ) break; + rc = fts3SegReaderIncrRead(pReader); + if( rc!=SQLITE_OK ) return rc; + } + p++; + + /* If required, populate the output variables with a pointer to and the + ** size of the previous offset-list. */ - n = fts3PutVarint(c, '\0'); - n += fts3PutVarint(c+n, nTerm); - dataBufferAppend2(&pWriter->data, c, n, pTerm, nTerm); - }else{ - /* Delta-encode the term as: - ** varint(nPrefix) - ** varint(nSuffix) - ** char pTermSuffix[nSuffix] + if( ppOffsetList ){ + *ppOffsetList = pReader->pOffsetList; + *pnOffsetList = (int)(p - pReader->pOffsetList - 1); + } + + while( pdata, c, n, pTerm+nPrefix, nTerm-nPrefix); + if( p>=pEnd ){ + pReader->pOffsetList = 0; + }else{ + rc = fts3SegReaderRequire(pReader, p, FTS3_VARINT_MAX); + if( rc==SQLITE_OK ){ + sqlite3_int64 iDelta; + pReader->pOffsetList = p + sqlite3Fts3GetVarint(p, &iDelta); + if( pTab->bDescIdx ){ + pReader->iDocid -= iDelta; + }else{ + pReader->iDocid += iDelta; + } + } + } } - dataBufferReplace(&pWriter->term, pTerm, nTerm); - return nPrefix+1; + return SQLITE_OK; } -/* Used to avoid a memmove when a large amount of doclist data is in -** the buffer. This constructs a node and term header before -** iDoclistData and flushes the resulting complete node using -** leafWriterInternalFlush(). -*/ -static int leafWriterInlineFlush(fulltext_vtab *v, LeafWriter *pWriter, - const char *pTerm, int nTerm, - int iDoclistData){ - char c[VARINT_MAX+VARINT_MAX]; - int iData, n = fts3PutVarint(c, 0); - n += fts3PutVarint(c+n, nTerm); - /* There should always be room for the header. Even if pTerm shared - ** a substantial prefix with the previous term, the entire prefix - ** could be constructed from earlier data in the doclist, so there - ** should be room. - */ - assert( iDoclistData>=n+nTerm ); +SQLITE_PRIVATE int sqlite3Fts3MsrOvfl( + Fts3Cursor *pCsr, + Fts3MultiSegReader *pMsr, + int *pnOvfl +){ + Fts3Table *p = (Fts3Table*)pCsr->base.pVtab; + int nOvfl = 0; + int ii; + int rc = SQLITE_OK; + int pgsz = p->nPgsz; - iData = iDoclistData-(n+nTerm); - memcpy(pWriter->data.pData+iData, c, n); - memcpy(pWriter->data.pData+iData+n, pTerm, nTerm); + assert( p->bFts4 ); + assert( pgsz>0 ); - return leafWriterInternalFlush(v, pWriter, iData, pWriter->data.nData-iData); + for(ii=0; rc==SQLITE_OK && iinSegment; ii++){ + Fts3SegReader *pReader = pMsr->apSegment[ii]; + if( !fts3SegReaderIsPending(pReader) + && !fts3SegReaderIsRootOnly(pReader) + ){ + sqlite3_int64 jj; + for(jj=pReader->iStartBlock; jj<=pReader->iLeafEndBlock; jj++){ + int nBlob; + rc = sqlite3Fts3ReadBlock(p, jj, 0, &nBlob, 0); + if( rc!=SQLITE_OK ) break; + if( (nBlob+35)>pgsz ){ + nOvfl += (nBlob + 34)/pgsz; + } + } + } + } + *pnOvfl = nOvfl; + return rc; } -/* Push pTerm[nTerm] along with the doclist data to the leaf layer of -** %_segments. +/* +** Free all allocations associated with the iterator passed as the +** second argument. */ -static int leafWriterStepMerge(fulltext_vtab *v, LeafWriter *pWriter, - const char *pTerm, int nTerm, - DLReader *pReaders, int nReaders){ - char c[VARINT_MAX+VARINT_MAX]; - int iTermData = pWriter->data.nData, iDoclistData; - int i, nData, n, nActualData, nActual, rc, nTermDistinct; - - ASSERT_VALID_LEAF_NODE(pWriter->data.pData, pWriter->data.nData); - nTermDistinct = leafWriterEncodeTerm(pWriter, pTerm, nTerm); +SQLITE_PRIVATE void sqlite3Fts3SegReaderFree(Fts3SegReader *pReader){ + if( pReader && !fts3SegReaderIsPending(pReader) ){ + sqlite3_free(pReader->zTerm); + if( !fts3SegReaderIsRootOnly(pReader) ){ + sqlite3_free(pReader->aNode); + sqlite3_blob_close(pReader->pBlob); + } + } + sqlite3_free(pReader); +} - /* Remember nTermDistinct if opening a new node. */ - if( iTermData==0 ) pWriter->nTermDistinct = nTermDistinct; +/* +** Allocate a new SegReader object. +*/ +SQLITE_PRIVATE int sqlite3Fts3SegReaderNew( + int iAge, /* Segment "age". */ + int bLookup, /* True for a lookup only */ + sqlite3_int64 iStartLeaf, /* First leaf to traverse */ + sqlite3_int64 iEndLeaf, /* Final leaf to traverse */ + sqlite3_int64 iEndBlock, /* Final block of segment */ + const char *zRoot, /* Buffer containing root node */ + int nRoot, /* Size of buffer containing root node */ + Fts3SegReader **ppReader /* OUT: Allocated Fts3SegReader */ +){ + Fts3SegReader *pReader; /* Newly allocated SegReader object */ + int nExtra = 0; /* Bytes to allocate segment root node */ - iDoclistData = pWriter->data.nData; + assert( iStartLeaf<=iEndLeaf ); + if( iStartLeaf==0 ){ + nExtra = nRoot + FTS3_NODE_PADDING; + } - /* Estimate the length of the merged doclist so we can leave space - ** to encode it. - */ - for(i=0, nData=0; iiIdx = iAge; + pReader->bLookup = bLookup!=0; + pReader->iStartBlock = iStartLeaf; + pReader->iLeafEndBlock = iEndLeaf; + pReader->iEndBlock = iEndBlock; + + if( nExtra ){ + /* The entire segment is stored in the root node. */ + pReader->aNode = (char *)&pReader[1]; + pReader->rootOnly = 1; + pReader->nNode = nRoot; + memcpy(pReader->aNode, zRoot, nRoot); + memset(&pReader->aNode[nRoot], 0, FTS3_NODE_PADDING); + }else{ + pReader->iCurrentBlock = iStartLeaf-1; } - n = fts3PutVarint(c, nData); - dataBufferAppend(&pWriter->data, c, n); + *ppReader = pReader; + return SQLITE_OK; +} - docListMerge(&pWriter->data, pReaders, nReaders); - ASSERT_VALID_DOCLIST(DL_DEFAULT, - pWriter->data.pData+iDoclistData+n, - pWriter->data.nData-iDoclistData-n, NULL); +/* +** This is a comparison function used as a qsort() callback when sorting +** an array of pending terms by term. This occurs as part of flushing +** the contents of the pending-terms hash table to the database. +*/ +static int fts3CompareElemByTerm(const void *lhs, const void *rhs){ + char *z1 = fts3HashKey(*(Fts3HashElem **)lhs); + char *z2 = fts3HashKey(*(Fts3HashElem **)rhs); + int n1 = fts3HashKeysize(*(Fts3HashElem **)lhs); + int n2 = fts3HashKeysize(*(Fts3HashElem **)rhs); - /* The actual amount of doclist data at this point could be smaller - ** than the length we encoded. Additionally, the space required to - ** encode this length could be smaller. For small doclists, this is - ** not a big deal, we can just use memmove() to adjust things. - */ - nActualData = pWriter->data.nData-(iDoclistData+n); - nActual = fts3PutVarint(c, nActualData); - assert( nActualData<=nData ); - assert( nActual<=n ); + int n = (n1data.nData-iTermData>STANDALONE_MIN. - */ - if( nTerm+nActualData>STANDALONE_MIN ){ - /* Push leaf node from before this term. */ - if( iTermData>0 ){ - rc = leafWriterInternalFlush(v, pWriter, 0, iTermData); - if( rc!=SQLITE_OK ) return rc; +/* +** This function is used to allocate an Fts3SegReader that iterates through +** a subset of the terms stored in the Fts3Table.pendingTerms array. +** +** If the isPrefixIter parameter is zero, then the returned SegReader iterates +** through each term in the pending-terms table. Or, if isPrefixIter is +** non-zero, it iterates through each term and its prefixes. For example, if +** the pending terms hash table contains the terms "sqlite", "mysql" and +** "firebird", then the iterator visits the following 'terms' (in the order +** shown): +** +** f fi fir fire fireb firebi firebir firebird +** m my mys mysq mysql +** s sq sql sqli sqlit sqlite +** +** Whereas if isPrefixIter is zero, the terms visited are: +** +** firebird mysql sqlite +*/ +SQLITE_PRIVATE int sqlite3Fts3SegReaderPending( + Fts3Table *p, /* Virtual table handle */ + int iIndex, /* Index for p->aIndex */ + const char *zTerm, /* Term to search for */ + int nTerm, /* Size of buffer zTerm */ + int bPrefix, /* True for a prefix iterator */ + Fts3SegReader **ppReader /* OUT: SegReader for pending-terms */ +){ + Fts3SegReader *pReader = 0; /* Fts3SegReader object to return */ + Fts3HashElem *pE; /* Iterator variable */ + Fts3HashElem **aElem = 0; /* Array of term hash entries to scan */ + int nElem = 0; /* Size of array at aElem */ + int rc = SQLITE_OK; /* Return Code */ + Fts3Hash *pHash; + + pHash = &p->aIndex[iIndex].hPending; + if( bPrefix ){ + int nAlloc = 0; /* Size of allocated array at aElem */ + + for(pE=fts3HashFirst(pHash); pE; pE=fts3HashNext(pE)){ + char *zKey = (char *)fts3HashKey(pE); + int nKey = fts3HashKeysize(pE); + if( nTerm==0 || (nKey>=nTerm && 0==memcmp(zKey, zTerm, nTerm)) ){ + if( nElem==nAlloc ){ + Fts3HashElem **aElem2; + nAlloc += 16; + aElem2 = (Fts3HashElem **)sqlite3_realloc( + aElem, nAlloc*sizeof(Fts3HashElem *) + ); + if( !aElem2 ){ + rc = SQLITE_NOMEM; + nElem = 0; + break; + } + aElem = aElem2; + } - pWriter->nTermDistinct = nTermDistinct; + aElem[nElem++] = pE; + } } - /* Fix the encoded doclist length. */ - iDoclistData += n - nActual; - memcpy(pWriter->data.pData+iDoclistData, c, nActual); - - /* Push the standalone leaf node. */ - rc = leafWriterInlineFlush(v, pWriter, pTerm, nTerm, iDoclistData); - if( rc!=SQLITE_OK ) return rc; - - /* Leave the node empty. */ - dataBufferReset(&pWriter->data); + /* If more than one term matches the prefix, sort the Fts3HashElem + ** objects in term order using qsort(). This uses the same comparison + ** callback as is used when flushing terms to disk. + */ + if( nElem>1 ){ + qsort(aElem, nElem, sizeof(Fts3HashElem *), fts3CompareElemByTerm); + } - return rc; + }else{ + /* The query is a simple term lookup that matches at most one term in + ** the index. All that is required is a straight hash-lookup. + ** + ** Because the stack address of pE may be accessed via the aElem pointer + ** below, the "Fts3HashElem *pE" must be declared so that it is valid + ** within this entire function, not just this "else{...}" block. + */ + pE = fts3HashFindElem(pHash, zTerm, nTerm); + if( pE ){ + aElem = &pE; + nElem = 1; + } } - /* At this point, we know that the doclist was small, so do the - ** memmove if indicated. - */ - if( nActualdata.pData+iDoclistData+nActual, - pWriter->data.pData+iDoclistData+n, - pWriter->data.nData-(iDoclistData+n)); - pWriter->data.nData -= n-nActual; + if( nElem>0 ){ + int nByte = sizeof(Fts3SegReader) + (nElem+1)*sizeof(Fts3HashElem *); + pReader = (Fts3SegReader *)sqlite3_malloc(nByte); + if( !pReader ){ + rc = SQLITE_NOMEM; + }else{ + memset(pReader, 0, nByte); + pReader->iIdx = 0x7FFFFFFF; + pReader->ppNextElem = (Fts3HashElem **)&pReader[1]; + memcpy(pReader->ppNextElem, aElem, nElem*sizeof(Fts3HashElem *)); + } } - /* Replace written length with actual length. */ - memcpy(pWriter->data.pData+iDoclistData, c, nActual); - - /* If the node is too large, break things up. */ - /* TODO(shess) This test matches leafWriterStep(), which does this - ** test before it knows the cost to varint-encode the term and - ** doclist lengths. At some point, change to - ** pWriter->data.nData>LEAF_MAX. - */ - if( iTermData+nTerm+nActualData>LEAF_MAX ){ - /* Flush out the leading data as a node */ - rc = leafWriterInternalFlush(v, pWriter, 0, iTermData); - if( rc!=SQLITE_OK ) return rc; - - pWriter->nTermDistinct = nTermDistinct; - - /* Rebuild header using the current term */ - n = fts3PutVarint(pWriter->data.pData, 0); - n += fts3PutVarint(pWriter->data.pData+n, nTerm); - memcpy(pWriter->data.pData+n, pTerm, nTerm); - n += nTerm; - - /* There should always be room, because the previous encoding - ** included all data necessary to construct the term. - */ - assert( ndata.nData-iDoclistDatadata.pData+n, - pWriter->data.pData+iDoclistData, - pWriter->data.nData-iDoclistData); - pWriter->data.nData -= iDoclistData-n; + if( bPrefix ){ + sqlite3_free(aElem); } - ASSERT_VALID_LEAF_NODE(pWriter->data.pData, pWriter->data.nData); - - return SQLITE_OK; + *ppReader = pReader; + return rc; } -/* Push pTerm[nTerm] along with the doclist data to the leaf layer of -** %_segments. -*/ -/* TODO(shess) Revise writeZeroSegment() so that doclists are -** constructed directly in pWriter->data. +/* +** Compare the entries pointed to by two Fts3SegReader structures. +** Comparison is as follows: +** +** 1) EOF is greater than not EOF. +** +** 2) The current terms (if any) are compared using memcmp(). If one +** term is a prefix of another, the longer term is considered the +** larger. +** +** 3) By segment age. An older segment is considered larger. */ -static int leafWriterStep(fulltext_vtab *v, LeafWriter *pWriter, - const char *pTerm, int nTerm, - const char *pData, int nData){ +static int fts3SegReaderCmp(Fts3SegReader *pLhs, Fts3SegReader *pRhs){ int rc; - DLReader reader; - - dlrInit(&reader, DL_DEFAULT, pData, nData); - rc = leafWriterStepMerge(v, pWriter, pTerm, nTerm, &reader, 1); - dlrDestroy(&reader); - + if( pLhs->aNode && pRhs->aNode ){ + int rc2 = pLhs->nTerm - pRhs->nTerm; + if( rc2<0 ){ + rc = memcmp(pLhs->zTerm, pRhs->zTerm, pLhs->nTerm); + }else{ + rc = memcmp(pLhs->zTerm, pRhs->zTerm, pRhs->nTerm); + } + if( rc==0 ){ + rc = rc2; + } + }else{ + rc = (pLhs->aNode==0) - (pRhs->aNode==0); + } + if( rc==0 ){ + rc = pRhs->iIdx - pLhs->iIdx; + } + assert( rc!=0 ); return rc; } - -/****************************************************************/ -/* LeafReader is used to iterate over an individual leaf node. */ -typedef struct LeafReader { - DataBuffer term; /* copy of current term. */ - - const char *pData; /* data for current term. */ - int nData; -} LeafReader; - -static void leafReaderDestroy(LeafReader *pReader){ - dataBufferDestroy(&pReader->term); - SCRAMBLE(pReader); -} - -static int leafReaderAtEnd(LeafReader *pReader){ - return pReader->nData<=0; -} - -/* Access the current term. */ -static int leafReaderTermBytes(LeafReader *pReader){ - return pReader->term.nData; +/* +** A different comparison function for SegReader structures. In this +** version, it is assumed that each SegReader points to an entry in +** a doclist for identical terms. Comparison is made as follows: +** +** 1) EOF (end of doclist in this case) is greater than not EOF. +** +** 2) By current docid. +** +** 3) By segment age. An older segment is considered larger. +*/ +static int fts3SegReaderDoclistCmp(Fts3SegReader *pLhs, Fts3SegReader *pRhs){ + int rc = (pLhs->pOffsetList==0)-(pRhs->pOffsetList==0); + if( rc==0 ){ + if( pLhs->iDocid==pRhs->iDocid ){ + rc = pRhs->iIdx - pLhs->iIdx; + }else{ + rc = (pLhs->iDocid > pRhs->iDocid) ? 1 : -1; + } + } + assert( pLhs->aNode && pRhs->aNode ); + return rc; } -static const char *leafReaderTerm(LeafReader *pReader){ - assert( pReader->term.nData>0 ); - return pReader->term.pData; +static int fts3SegReaderDoclistCmpRev(Fts3SegReader *pLhs, Fts3SegReader *pRhs){ + int rc = (pLhs->pOffsetList==0)-(pRhs->pOffsetList==0); + if( rc==0 ){ + if( pLhs->iDocid==pRhs->iDocid ){ + rc = pRhs->iIdx - pLhs->iIdx; + }else{ + rc = (pLhs->iDocid < pRhs->iDocid) ? 1 : -1; + } + } + assert( pLhs->aNode && pRhs->aNode ); + return rc; } -/* Access the doclist data for the current term. */ -static int leafReaderDataBytes(LeafReader *pReader){ - int nData; - assert( pReader->term.nData>0 ); - fts3GetVarint32(pReader->pData, &nData); - return nData; -} -static const char *leafReaderData(LeafReader *pReader){ - int n, nData; - assert( pReader->term.nData>0 ); - n = fts3GetVarint32(pReader->pData, &nData); - return pReader->pData+n; +/* +** Compare the term that the Fts3SegReader object passed as the first argument +** points to with the term specified by arguments zTerm and nTerm. +** +** If the pSeg iterator is already at EOF, return 0. Otherwise, return +** -ve if the pSeg term is less than zTerm/nTerm, 0 if the two terms are +** equal, or +ve if the pSeg term is greater than zTerm/nTerm. +*/ +static int fts3SegReaderTermCmp( + Fts3SegReader *pSeg, /* Segment reader object */ + const char *zTerm, /* Term to compare to */ + int nTerm /* Size of term zTerm in bytes */ +){ + int res = 0; + if( pSeg->aNode ){ + if( pSeg->nTerm>nTerm ){ + res = memcmp(pSeg->zTerm, zTerm, nTerm); + }else{ + res = memcmp(pSeg->zTerm, zTerm, pSeg->nTerm); + } + if( res==0 ){ + res = pSeg->nTerm-nTerm; + } + } + return res; } -static void leafReaderInit(const char *pData, int nData, - LeafReader *pReader){ - int nTerm, n; - - assert( nData>0 ); - assert( pData[0]=='\0' ); +/* +** Argument apSegment is an array of nSegment elements. It is known that +** the final (nSegment-nSuspect) members are already in sorted order +** (according to the comparison function provided). This function shuffles +** the array around until all entries are in sorted order. +*/ +static void fts3SegReaderSort( + Fts3SegReader **apSegment, /* Array to sort entries of */ + int nSegment, /* Size of apSegment array */ + int nSuspect, /* Unsorted entry count */ + int (*xCmp)(Fts3SegReader *, Fts3SegReader *) /* Comparison function */ +){ + int i; /* Iterator variable */ - CLEAR(pReader); + assert( nSuspect<=nSegment ); - /* Read the first term, skipping the header byte. */ - n = fts3GetVarint32(pData+1, &nTerm); - dataBufferInit(&pReader->term, nTerm); - dataBufferReplace(&pReader->term, pData+1+n, nTerm); + if( nSuspect==nSegment ) nSuspect--; + for(i=nSuspect-1; i>=0; i--){ + int j; + for(j=i; j<(nSegment-1); j++){ + Fts3SegReader *pTmp; + if( xCmp(apSegment[j], apSegment[j+1])<0 ) break; + pTmp = apSegment[j+1]; + apSegment[j+1] = apSegment[j]; + apSegment[j] = pTmp; + } + } - /* Position after the first term. */ - assert( 1+n+nTermpData = pData+1+n+nTerm; - pReader->nData = nData-1-n-nTerm; +#ifndef NDEBUG + /* Check that the list really is sorted now. */ + for(i=0; i<(nSuspect-1); i++){ + assert( xCmp(apSegment[i], apSegment[i+1])<0 ); + } +#endif } -/* Step the reader forward to the next term. */ -static void leafReaderStep(LeafReader *pReader){ - int n, nData, nPrefix, nSuffix; - assert( !leafReaderAtEnd(pReader) ); - - /* Skip previous entry's data block. */ - n = fts3GetVarint32(pReader->pData, &nData); - assert( n+nData<=pReader->nData ); - pReader->pData += n+nData; - pReader->nData -= n+nData; - - if( !leafReaderAtEnd(pReader) ){ - /* Construct the new term using a prefix from the old term plus a - ** suffix from the leaf data. - */ - n = fts3GetVarint32(pReader->pData, &nPrefix); - n += fts3GetVarint32(pReader->pData+n, &nSuffix); - assert( n+nSuffixnData ); - pReader->term.nData = nPrefix; - dataBufferAppend(&pReader->term, pReader->pData+n, nSuffix); - - pReader->pData += n+nSuffix; - pReader->nData -= n+nSuffix; +/* +** Insert a record into the %_segments table. +*/ +static int fts3WriteSegment( + Fts3Table *p, /* Virtual table handle */ + sqlite3_int64 iBlock, /* Block id for new block */ + char *z, /* Pointer to buffer containing block data */ + int n /* Size of buffer z in bytes */ +){ + sqlite3_stmt *pStmt; + int rc = fts3SqlStmt(p, SQL_INSERT_SEGMENTS, &pStmt, 0); + if( rc==SQLITE_OK ){ + sqlite3_bind_int64(pStmt, 1, iBlock); + sqlite3_bind_blob(pStmt, 2, z, n, SQLITE_STATIC); + sqlite3_step(pStmt); + rc = sqlite3_reset(pStmt); } + return rc; } -/* strcmp-style comparison of pReader's current term against pTerm. -** If isPrefix, equality means equal through nTerm bytes. +/* +** Find the largest relative level number in the table. If successful, set +** *pnMax to this value and return SQLITE_OK. Otherwise, if an error occurs, +** set *pnMax to zero and return an SQLite error code. */ -static int leafReaderTermCmp(LeafReader *pReader, - const char *pTerm, int nTerm, int isPrefix){ - int c, n = pReader->term.nDataterm.nData : nTerm; - if( n==0 ){ - if( pReader->term.nData>0 ) return -1; - if(nTerm>0 ) return 1; - return 0; +SQLITE_PRIVATE int sqlite3Fts3MaxLevel(Fts3Table *p, int *pnMax){ + int rc; + int mxLevel = 0; + sqlite3_stmt *pStmt = 0; + + rc = fts3SqlStmt(p, SQL_SELECT_MXLEVEL, &pStmt, 0); + if( rc==SQLITE_OK ){ + if( SQLITE_ROW==sqlite3_step(pStmt) ){ + mxLevel = sqlite3_column_int(pStmt, 0); + } + rc = sqlite3_reset(pStmt); } + *pnMax = mxLevel; + return rc; +} - c = memcmp(pReader->term.pData, pTerm, n); - if( c!=0 ) return c; - if( isPrefix && n==nTerm ) return 0; - return pReader->term.nData - nTerm; +/* +** Insert a record into the %_segdir table. +*/ +static int fts3WriteSegdir( + Fts3Table *p, /* Virtual table handle */ + sqlite3_int64 iLevel, /* Value for "level" field (absolute level) */ + int iIdx, /* Value for "idx" field */ + sqlite3_int64 iStartBlock, /* Value for "start_block" field */ + sqlite3_int64 iLeafEndBlock, /* Value for "leaves_end_block" field */ + sqlite3_int64 iEndBlock, /* Value for "end_block" field */ + char *zRoot, /* Blob value for "root" field */ + int nRoot /* Number of bytes in buffer zRoot */ +){ + sqlite3_stmt *pStmt; + int rc = fts3SqlStmt(p, SQL_INSERT_SEGDIR, &pStmt, 0); + if( rc==SQLITE_OK ){ + sqlite3_bind_int64(pStmt, 1, iLevel); + sqlite3_bind_int(pStmt, 2, iIdx); + sqlite3_bind_int64(pStmt, 3, iStartBlock); + sqlite3_bind_int64(pStmt, 4, iLeafEndBlock); + sqlite3_bind_int64(pStmt, 5, iEndBlock); + sqlite3_bind_blob(pStmt, 6, zRoot, nRoot, SQLITE_STATIC); + sqlite3_step(pStmt); + rc = sqlite3_reset(pStmt); + } + return rc; } +/* +** Return the size of the common prefix (if any) shared by zPrev and +** zNext, in bytes. For example, +** +** fts3PrefixCompress("abc", 3, "abcdef", 6) // returns 3 +** fts3PrefixCompress("abX", 3, "abcdef", 6) // returns 2 +** fts3PrefixCompress("abX", 3, "Xbcdef", 6) // returns 0 +*/ +static int fts3PrefixCompress( + const char *zPrev, /* Buffer containing previous term */ + int nPrev, /* Size of buffer zPrev in bytes */ + const char *zNext, /* Buffer containing next term */ + int nNext /* Size of buffer zNext in bytes */ +){ + int n; + UNUSED_PARAMETER(nNext); + for(n=0; nnData; /* Current size of node in bytes */ + int nReq = nData; /* Required space after adding zTerm */ + int nPrefix; /* Number of bytes of prefix compression */ + int nSuffix; /* Suffix length */ + + nPrefix = fts3PrefixCompress(pTree->zTerm, pTree->nTerm, zTerm, nTerm); + nSuffix = nTerm-nPrefix; + + nReq += sqlite3Fts3VarintLen(nPrefix)+sqlite3Fts3VarintLen(nSuffix)+nSuffix; + if( nReq<=p->nNodeSize || !pTree->zTerm ){ + + if( nReq>p->nNodeSize ){ + /* An unusual case: this is the first term to be added to the node + ** and the static node buffer (p->nNodeSize bytes) is not large + ** enough. Use a separately malloced buffer instead This wastes + ** p->nNodeSize bytes, but since this scenario only comes about when + ** the database contain two terms that share a prefix of almost 2KB, + ** this is not expected to be a serious problem. + */ + assert( pTree->aData==(char *)&pTree[1] ); + pTree->aData = (char *)sqlite3_malloc(nReq); + if( !pTree->aData ){ + return SQLITE_NOMEM; + } + } - sqlite3_stmt *pStmt; /* Statement we're streaming leaves from. */ - int eof; /* we've seen SQLITE_DONE from pStmt. */ + if( pTree->zTerm ){ + /* There is no prefix-length field for first term in a node */ + nData += sqlite3Fts3PutVarint(&pTree->aData[nData], nPrefix); + } - LeafReader leafReader; /* reader for the current leaf. */ - DataBuffer rootData; /* root data for inline. */ -} LeavesReader; + nData += sqlite3Fts3PutVarint(&pTree->aData[nData], nSuffix); + memcpy(&pTree->aData[nData], &zTerm[nPrefix], nSuffix); + pTree->nData = nData + nSuffix; + pTree->nEntry++; -/* Access the current term. */ -static int leavesReaderTermBytes(LeavesReader *pReader){ - assert( !pReader->eof ); - return leafReaderTermBytes(&pReader->leafReader); -} -static const char *leavesReaderTerm(LeavesReader *pReader){ - assert( !pReader->eof ); - return leafReaderTerm(&pReader->leafReader); -} + if( isCopyTerm ){ + if( pTree->nMalloczMalloc, nTerm*2); + if( !zNew ){ + return SQLITE_NOMEM; + } + pTree->nMalloc = nTerm*2; + pTree->zMalloc = zNew; + } + pTree->zTerm = pTree->zMalloc; + memcpy(pTree->zTerm, zTerm, nTerm); + pTree->nTerm = nTerm; + }else{ + pTree->zTerm = (char *)zTerm; + pTree->nTerm = nTerm; + } + return SQLITE_OK; + } + } -/* Access the doclist data for the current term. */ -static int leavesReaderDataBytes(LeavesReader *pReader){ - assert( !pReader->eof ); - return leafReaderDataBytes(&pReader->leafReader); -} -static const char *leavesReaderData(LeavesReader *pReader){ - assert( !pReader->eof ); - return leafReaderData(&pReader->leafReader); -} + /* If control flows to here, it was not possible to append zTerm to the + ** current node. Create a new node (a right-sibling of the current node). + ** If this is the first node in the tree, the term is added to it. + ** + ** Otherwise, the term is not added to the new node, it is left empty for + ** now. Instead, the term is inserted into the parent of pTree. If pTree + ** has no parent, one is created here. + */ + pNew = (SegmentNode *)sqlite3_malloc(sizeof(SegmentNode) + p->nNodeSize); + if( !pNew ){ + return SQLITE_NOMEM; + } + memset(pNew, 0, sizeof(SegmentNode)); + pNew->nData = 1 + FTS3_VARINT_MAX; + pNew->aData = (char *)&pNew[1]; + + if( pTree ){ + SegmentNode *pParent = pTree->pParent; + rc = fts3NodeAddTerm(p, &pParent, isCopyTerm, zTerm, nTerm); + if( pTree->pParent==0 ){ + pTree->pParent = pParent; + } + pTree->pRight = pNew; + pNew->pLeftmost = pTree->pLeftmost; + pNew->pParent = pParent; + pNew->zMalloc = pTree->zMalloc; + pNew->nMalloc = pTree->nMalloc; + pTree->zMalloc = 0; + }else{ + pNew->pLeftmost = pNew; + rc = fts3NodeAddTerm(p, &pNew, isCopyTerm, zTerm, nTerm); + } -static int leavesReaderAtEnd(LeavesReader *pReader){ - return pReader->eof; + *ppTree = pNew; + return rc; } -/* loadSegmentLeaves() may not read all the way to SQLITE_DONE, thus -** leaving the statement handle open, which locks the table. +/* +** Helper function for fts3NodeWrite(). */ -/* TODO(shess) This "solution" is not satisfactory. Really, there -** should be check-in function for all statement handles which -** arranges to call sqlite3_reset(). This most likely will require -** modification to control flow all over the place, though, so for now -** just punt. +static int fts3TreeFinishNode( + SegmentNode *pTree, + int iHeight, + sqlite3_int64 iLeftChild +){ + int nStart; + assert( iHeight>=1 && iHeight<128 ); + nStart = FTS3_VARINT_MAX - sqlite3Fts3VarintLen(iLeftChild); + pTree->aData[nStart] = (char)iHeight; + sqlite3Fts3PutVarint(&pTree->aData[nStart+1], iLeftChild); + return nStart; +} + +/* +** Write the buffer for the segment node pTree and all of its peers to the +** database. Then call this function recursively to write the parent of +** pTree and its peers to the database. +** +** Except, if pTree is a root node, do not write it to the database. Instead, +** set output variables *paRoot and *pnRoot to contain the root node. ** -** Note the the current system assumes that segment merges will run to -** completion, which is why this particular probably hasn't arisen in -** this case. Probably a brittle assumption. +** If successful, SQLITE_OK is returned and output variable *piLast is +** set to the largest blockid written to the database (or zero if no +** blocks were written to the db). Otherwise, an SQLite error code is +** returned. */ -static int leavesReaderReset(LeavesReader *pReader){ - return sqlite3_reset(pReader->pStmt); +static int fts3NodeWrite( + Fts3Table *p, /* Virtual table handle */ + SegmentNode *pTree, /* SegmentNode handle */ + int iHeight, /* Height of this node in tree */ + sqlite3_int64 iLeaf, /* Block id of first leaf node */ + sqlite3_int64 iFree, /* Block id of next free slot in %_segments */ + sqlite3_int64 *piLast, /* OUT: Block id of last entry written */ + char **paRoot, /* OUT: Data for root node */ + int *pnRoot /* OUT: Size of root node in bytes */ +){ + int rc = SQLITE_OK; + + if( !pTree->pParent ){ + /* Root node of the tree. */ + int nStart = fts3TreeFinishNode(pTree, iHeight, iLeaf); + *piLast = iFree-1; + *pnRoot = pTree->nData - nStart; + *paRoot = &pTree->aData[nStart]; + }else{ + SegmentNode *pIter; + sqlite3_int64 iNextFree = iFree; + sqlite3_int64 iNextLeaf = iLeaf; + for(pIter=pTree->pLeftmost; pIter && rc==SQLITE_OK; pIter=pIter->pRight){ + int nStart = fts3TreeFinishNode(pIter, iHeight, iNextLeaf); + int nWrite = pIter->nData - nStart; + + rc = fts3WriteSegment(p, iNextFree, &pIter->aData[nStart], nWrite); + iNextFree++; + iNextLeaf += (pIter->nEntry+1); + } + if( rc==SQLITE_OK ){ + assert( iNextLeaf==iFree ); + rc = fts3NodeWrite( + p, pTree->pParent, iHeight+1, iFree, iNextFree, piLast, paRoot, pnRoot + ); + } + } + + return rc; } -static void leavesReaderDestroy(LeavesReader *pReader){ - /* If idx is -1, that means we're using a non-cached statement - ** handle in the optimize() case, so we need to release it. - */ - if( pReader->pStmt!=NULL && pReader->idx==-1 ){ - sqlite3_finalize(pReader->pStmt); +/* +** Free all memory allocations associated with the tree pTree. +*/ +static void fts3NodeFree(SegmentNode *pTree){ + if( pTree ){ + SegmentNode *p = pTree->pLeftmost; + fts3NodeFree(p->pParent); + while( p ){ + SegmentNode *pRight = p->pRight; + if( p->aData!=(char *)&p[1] ){ + sqlite3_free(p->aData); + } + assert( pRight==0 || p->zMalloc==0 ); + sqlite3_free(p->zMalloc); + sqlite3_free(p); + p = pRight; + } } - leafReaderDestroy(&pReader->leafReader); - dataBufferDestroy(&pReader->rootData); - SCRAMBLE(pReader); } -/* Initialize pReader with the given root data (if iStartBlockid==0 -** the leaf data was entirely contained in the root), or from the -** stream of blocks between iStartBlockid and iEndBlockid, inclusive. +/* +** Add a term to the segment being constructed by the SegmentWriter object +** *ppWriter. When adding the first term to a segment, *ppWriter should +** be passed NULL. This function will allocate a new SegmentWriter object +** and return it via the input/output variable *ppWriter in this case. +** +** If successful, SQLITE_OK is returned. Otherwise, an SQLite error code. */ -static int leavesReaderInit(fulltext_vtab *v, - int idx, - sqlite_int64 iStartBlockid, - sqlite_int64 iEndBlockid, - const char *pRootData, int nRootData, - LeavesReader *pReader){ - CLEAR(pReader); - pReader->idx = idx; +static int fts3SegWriterAdd( + Fts3Table *p, /* Virtual table handle */ + SegmentWriter **ppWriter, /* IN/OUT: SegmentWriter handle */ + int isCopyTerm, /* True if buffer zTerm must be copied */ + const char *zTerm, /* Pointer to buffer containing term */ + int nTerm, /* Size of term in bytes */ + const char *aDoclist, /* Pointer to buffer containing doclist */ + int nDoclist /* Size of doclist in bytes */ +){ + int nPrefix; /* Size of term prefix in bytes */ + int nSuffix; /* Size of term suffix in bytes */ + int nReq; /* Number of bytes required on leaf page */ + int nData; + SegmentWriter *pWriter = *ppWriter; - dataBufferInit(&pReader->rootData, 0); - if( iStartBlockid==0 ){ - /* Entire leaf level fit in root data. */ - dataBufferReplace(&pReader->rootData, pRootData, nRootData); - leafReaderInit(pReader->rootData.pData, pReader->rootData.nData, - &pReader->leafReader); - }else{ - sqlite3_stmt *s; - int rc = sql_get_leaf_statement(v, idx, &s); - if( rc!=SQLITE_OK ) return rc; + if( !pWriter ){ + int rc; + sqlite3_stmt *pStmt; - rc = sqlite3_bind_int64(s, 1, iStartBlockid); - if( rc!=SQLITE_OK ) return rc; + /* Allocate the SegmentWriter structure */ + pWriter = (SegmentWriter *)sqlite3_malloc(sizeof(SegmentWriter)); + if( !pWriter ) return SQLITE_NOMEM; + memset(pWriter, 0, sizeof(SegmentWriter)); + *ppWriter = pWriter; - rc = sqlite3_bind_int64(s, 2, iEndBlockid); - if( rc!=SQLITE_OK ) return rc; + /* Allocate a buffer in which to accumulate data */ + pWriter->aData = (char *)sqlite3_malloc(p->nNodeSize); + if( !pWriter->aData ) return SQLITE_NOMEM; + pWriter->nSize = p->nNodeSize; - rc = sqlite3_step(s); - if( rc==SQLITE_DONE ){ - pReader->eof = 1; - return SQLITE_OK; + /* Find the next free blockid in the %_segments table */ + rc = fts3SqlStmt(p, SQL_NEXT_SEGMENTS_ID, &pStmt, 0); + if( rc!=SQLITE_OK ) return rc; + if( SQLITE_ROW==sqlite3_step(pStmt) ){ + pWriter->iFree = sqlite3_column_int64(pStmt, 0); + pWriter->iFirst = pWriter->iFree; } - if( rc!=SQLITE_ROW ) return rc; - - pReader->pStmt = s; - leafReaderInit(sqlite3_column_blob(pReader->pStmt, 0), - sqlite3_column_bytes(pReader->pStmt, 0), - &pReader->leafReader); + rc = sqlite3_reset(pStmt); + if( rc!=SQLITE_OK ) return rc; } - return SQLITE_OK; -} + nData = pWriter->nData; -/* Step the current leaf forward to the next term. If we reach the -** end of the current leaf, step forward to the next leaf block. -*/ -static int leavesReaderStep(fulltext_vtab *v, LeavesReader *pReader){ - assert( !leavesReaderAtEnd(pReader) ); - leafReaderStep(&pReader->leafReader); + nPrefix = fts3PrefixCompress(pWriter->zTerm, pWriter->nTerm, zTerm, nTerm); + nSuffix = nTerm-nPrefix; + + /* Figure out how many bytes are required by this new entry */ + nReq = sqlite3Fts3VarintLen(nPrefix) + /* varint containing prefix size */ + sqlite3Fts3VarintLen(nSuffix) + /* varint containing suffix size */ + nSuffix + /* Term suffix */ + sqlite3Fts3VarintLen(nDoclist) + /* Size of doclist */ + nDoclist; /* Doclist data */ - if( leafReaderAtEnd(&pReader->leafReader) ){ + if( nData>0 && nData+nReq>p->nNodeSize ){ int rc; - if( pReader->rootData.pData ){ - pReader->eof = 1; - return SQLITE_OK; - } - rc = sqlite3_step(pReader->pStmt); - if( rc!=SQLITE_ROW ){ - pReader->eof = 1; - return rc==SQLITE_DONE ? SQLITE_OK : rc; + + /* The current leaf node is full. Write it out to the database. */ + rc = fts3WriteSegment(p, pWriter->iFree++, pWriter->aData, nData); + if( rc!=SQLITE_OK ) return rc; + p->nLeafAdd++; + + /* Add the current term to the interior node tree. The term added to + ** the interior tree must: + ** + ** a) be greater than the largest term on the leaf node just written + ** to the database (still available in pWriter->zTerm), and + ** + ** b) be less than or equal to the term about to be added to the new + ** leaf node (zTerm/nTerm). + ** + ** In other words, it must be the prefix of zTerm 1 byte longer than + ** the common prefix (if any) of zTerm and pWriter->zTerm. + */ + assert( nPrefixpTree, isCopyTerm, zTerm, nPrefix+1); + if( rc!=SQLITE_OK ) return rc; + + nData = 0; + pWriter->nTerm = 0; + + nPrefix = 0; + nSuffix = nTerm; + nReq = 1 + /* varint containing prefix size */ + sqlite3Fts3VarintLen(nTerm) + /* varint containing suffix size */ + nTerm + /* Term suffix */ + sqlite3Fts3VarintLen(nDoclist) + /* Size of doclist */ + nDoclist; /* Doclist data */ + } + + /* If the buffer currently allocated is too small for this entry, realloc + ** the buffer to make it large enough. + */ + if( nReq>pWriter->nSize ){ + char *aNew = sqlite3_realloc(pWriter->aData, nReq); + if( !aNew ) return SQLITE_NOMEM; + pWriter->aData = aNew; + pWriter->nSize = nReq; + } + assert( nData+nReq<=pWriter->nSize ); + + /* Append the prefix-compressed term and doclist to the buffer. */ + nData += sqlite3Fts3PutVarint(&pWriter->aData[nData], nPrefix); + nData += sqlite3Fts3PutVarint(&pWriter->aData[nData], nSuffix); + memcpy(&pWriter->aData[nData], &zTerm[nPrefix], nSuffix); + nData += nSuffix; + nData += sqlite3Fts3PutVarint(&pWriter->aData[nData], nDoclist); + memcpy(&pWriter->aData[nData], aDoclist, nDoclist); + pWriter->nData = nData + nDoclist; + + /* Save the current term so that it can be used to prefix-compress the next. + ** If the isCopyTerm parameter is true, then the buffer pointed to by + ** zTerm is transient, so take a copy of the term data. Otherwise, just + ** store a copy of the pointer. + */ + if( isCopyTerm ){ + if( nTerm>pWriter->nMalloc ){ + char *zNew = sqlite3_realloc(pWriter->zMalloc, nTerm*2); + if( !zNew ){ + return SQLITE_NOMEM; + } + pWriter->nMalloc = nTerm*2; + pWriter->zMalloc = zNew; + pWriter->zTerm = zNew; } - leafReaderDestroy(&pReader->leafReader); - leafReaderInit(sqlite3_column_blob(pReader->pStmt, 0), - sqlite3_column_bytes(pReader->pStmt, 0), - &pReader->leafReader); + assert( pWriter->zTerm==pWriter->zMalloc ); + memcpy(pWriter->zTerm, zTerm, nTerm); + }else{ + pWriter->zTerm = (char *)zTerm; } + pWriter->nTerm = nTerm; + return SQLITE_OK; } -/* Order LeavesReaders by their term, ignoring idx. Readers at eof -** always sort to the end. +/* +** Flush all data associated with the SegmentWriter object pWriter to the +** database. This function must be called after all terms have been added +** to the segment using fts3SegWriterAdd(). If successful, SQLITE_OK is +** returned. Otherwise, an SQLite error code. */ -static int leavesReaderTermCmp(LeavesReader *lr1, LeavesReader *lr2){ - if( leavesReaderAtEnd(lr1) ){ - if( leavesReaderAtEnd(lr2) ) return 0; - return 1; +static int fts3SegWriterFlush( + Fts3Table *p, /* Virtual table handle */ + SegmentWriter *pWriter, /* SegmentWriter to flush to the db */ + sqlite3_int64 iLevel, /* Value for 'level' column of %_segdir */ + int iIdx /* Value for 'idx' column of %_segdir */ +){ + int rc; /* Return code */ + if( pWriter->pTree ){ + sqlite3_int64 iLast = 0; /* Largest block id written to database */ + sqlite3_int64 iLastLeaf; /* Largest leaf block id written to db */ + char *zRoot = NULL; /* Pointer to buffer containing root node */ + int nRoot = 0; /* Size of buffer zRoot */ + + iLastLeaf = pWriter->iFree; + rc = fts3WriteSegment(p, pWriter->iFree++, pWriter->aData, pWriter->nData); + if( rc==SQLITE_OK ){ + rc = fts3NodeWrite(p, pWriter->pTree, 1, + pWriter->iFirst, pWriter->iFree, &iLast, &zRoot, &nRoot); + } + if( rc==SQLITE_OK ){ + rc = fts3WriteSegdir( + p, iLevel, iIdx, pWriter->iFirst, iLastLeaf, iLast, zRoot, nRoot); + } + }else{ + /* The entire tree fits on the root node. Write it to the segdir table. */ + rc = fts3WriteSegdir( + p, iLevel, iIdx, 0, 0, 0, pWriter->aData, pWriter->nData); } - if( leavesReaderAtEnd(lr2) ) return -1; - - return leafReaderTermCmp(&lr1->leafReader, - leavesReaderTerm(lr2), leavesReaderTermBytes(lr2), - 0); -} - -/* Similar to leavesReaderTermCmp(), with additional ordering by idx -** so that older segments sort before newer segments. -*/ -static int leavesReaderCmp(LeavesReader *lr1, LeavesReader *lr2){ - int c = leavesReaderTermCmp(lr1, lr2); - if( c!=0 ) return c; - return lr1->idx-lr2->idx; + p->nLeafAdd++; + return rc; } -/* Assume that pLr[1]..pLr[nLr] are sorted. Bubble pLr[0] into its -** sorted position. +/* +** Release all memory held by the SegmentWriter object passed as the +** first argument. */ -static void leavesReaderReorder(LeavesReader *pLr, int nLr){ - while( nLr>1 && leavesReaderCmp(pLr, pLr+1)>0 ){ - LeavesReader tmp = pLr[0]; - pLr[0] = pLr[1]; - pLr[1] = tmp; - nLr--; - pLr++; +static void fts3SegWriterFree(SegmentWriter *pWriter){ + if( pWriter ){ + sqlite3_free(pWriter->aData); + sqlite3_free(pWriter->zMalloc); + fts3NodeFree(pWriter->pTree); + sqlite3_free(pWriter); } } -/* Initializes pReaders with the segments from level iLevel, returning -** the number of segments in *piReaders. Leaves pReaders in sorted -** order. +/* +** The first value in the apVal[] array is assumed to contain an integer. +** This function tests if there exist any documents with docid values that +** are different from that integer. i.e. if deleting the document with docid +** pRowid would mean the FTS3 table were empty. +** +** If successful, *pisEmpty is set to true if the table is empty except for +** document pRowid, or false otherwise, and SQLITE_OK is returned. If an +** error occurs, an SQLite error code is returned. */ -static int leavesReadersInit(fulltext_vtab *v, int iLevel, - LeavesReader *pReaders, int *piReaders){ - sqlite3_stmt *s; - int i, rc = sql_get_statement(v, SEGDIR_SELECT_LEVEL_STMT, &s); - if( rc!=SQLITE_OK ) return rc; - - rc = sqlite3_bind_int(s, 1, iLevel); - if( rc!=SQLITE_OK ) return rc; - - i = 0; - while( (rc = sqlite3_step(s))==SQLITE_ROW ){ - sqlite_int64 iStart = sqlite3_column_int64(s, 0); - sqlite_int64 iEnd = sqlite3_column_int64(s, 1); - const char *pRootData = sqlite3_column_blob(s, 2); - int nRootData = sqlite3_column_bytes(s, 2); - - assert( i0 ){ - leavesReaderDestroy(&pReaders[i]); - } - return rc; - } - - *piReaders = i; - - /* Leave our results sorted by term, then age. */ - while( i-- ){ - leavesReaderReorder(pReaders+i, *piReaders-i); +static int fts3IsEmpty(Fts3Table *p, sqlite3_value *pRowid, int *pisEmpty){ + sqlite3_stmt *pStmt; + int rc; + if( p->zContentTbl ){ + /* If using the content=xxx option, assume the table is never empty */ + *pisEmpty = 0; + rc = SQLITE_OK; + }else{ + rc = fts3SqlStmt(p, SQL_IS_EMPTY, &pStmt, &pRowid); + if( rc==SQLITE_OK ){ + if( SQLITE_ROW==sqlite3_step(pStmt) ){ + *pisEmpty = sqlite3_column_int(pStmt, 0); + } + rc = sqlite3_reset(pStmt); + } } - return SQLITE_OK; + return rc; } -/* Merge doclists from pReaders[nReaders] into a single doclist, which -** is written to pWriter. Assumes pReaders is ordered oldest to -** newest. +/* +** Set *pnMax to the largest segment level in the database for the index +** iIndex. +** +** Segment levels are stored in the 'level' column of the %_segdir table. +** +** Return SQLITE_OK if successful, or an SQLite error code if not. */ -/* TODO(shess) Consider putting this inline in segmentMerge(). */ -static int leavesReadersMerge(fulltext_vtab *v, - LeavesReader *pReaders, int nReaders, - LeafWriter *pWriter){ - DLReader dlReaders[MERGE_COUNT]; - const char *pTerm = leavesReaderTerm(pReaders); - int i, nTerm = leavesReaderTermBytes(pReaders); - - assert( nReaders<=MERGE_COUNT ); +static int fts3SegmentMaxLevel( + Fts3Table *p, + int iLangid, + int iIndex, + sqlite3_int64 *pnMax +){ + sqlite3_stmt *pStmt; + int rc; + assert( iIndex>=0 && iIndexnIndex ); - for(i=0; iiStartBlock ){ + sqlite3_stmt *pDelete; /* SQL statement to delete rows */ + rc = fts3SqlStmt(p, SQL_DELETE_SEGMENTS_RANGE, &pDelete, 0); + if( rc==SQLITE_OK ){ + sqlite3_bind_int64(pDelete, 1, pSeg->iStartBlock); + sqlite3_bind_int64(pDelete, 2, pSeg->iEndBlock); + sqlite3_step(pDelete); + rc = sqlite3_reset(pDelete); } - }else{ - return rc; } - return SQLITE_OK; + return rc; } -/* Merge MERGE_COUNT segments at iLevel into a new segment at -** iLevel+1. If iLevel+1 is already full of segments, those will be -** merged to make room. -*/ -static int segmentMerge(fulltext_vtab *v, int iLevel){ - LeafWriter writer; - LeavesReader lrs[MERGE_COUNT]; - int i, rc, idx = 0; - - /* Determine the next available segment index at the next level, - ** merging as necessary. - */ - rc = segdirNextIndex(v, iLevel+1, &idx); - if( rc!=SQLITE_OK ) return rc; - - /* TODO(shess) This assumes that we'll always see exactly - ** MERGE_COUNT segments to merge at a given level. That will be - ** broken if we allow the developer to request preemptive or - ** deferred merging. - */ - memset(&lrs, '\0', sizeof(lrs)); - rc = leavesReadersInit(v, iLevel, lrs, &i); - if( rc!=SQLITE_OK ) return rc; - assert( i==MERGE_COUNT ); +/* +** This function is used after merging multiple segments into a single large +** segment to delete the old, now redundant, segment b-trees. Specifically, +** it: +** +** 1) Deletes all %_segments entries for the segments associated with +** each of the SegReader objects in the array passed as the third +** argument, and +** +** 2) deletes all %_segdir entries with level iLevel, or all %_segdir +** entries regardless of level if (iLevel<0). +** +** SQLITE_OK is returned if successful, otherwise an SQLite error code. +*/ +static int fts3DeleteSegdir( + Fts3Table *p, /* Virtual table handle */ + int iLangid, /* Language id */ + int iIndex, /* Index for p->aIndex */ + int iLevel, /* Level of %_segdir entries to delete */ + Fts3SegReader **apSegment, /* Array of SegReader objects */ + int nReader /* Size of array apSegment */ +){ + int rc = SQLITE_OK; /* Return Code */ + int i; /* Iterator variable */ + sqlite3_stmt *pDelete = 0; /* SQL statement to delete rows */ - leafWriterInit(iLevel+1, idx, &writer); + for(i=0; rc==SQLITE_OK && i=0 || iLevel==FTS3_SEGCURSOR_ALL ); + if( iLevel==FTS3_SEGCURSOR_ALL ){ + rc = fts3SqlStmt(p, SQL_DELETE_SEGDIR_RANGE, &pDelete, 0); + if( rc==SQLITE_OK ){ + sqlite3_bind_int64(pDelete, 1, getAbsoluteLevel(p, iLangid, iIndex, 0)); + sqlite3_bind_int64(pDelete, 2, + getAbsoluteLevel(p, iLangid, iIndex, FTS3_SEGDIR_MAXLEVEL-1) + ); } - - rc = leavesReadersMerge(v, lrs, i, &writer); - if( rc!=SQLITE_OK ) goto err; - - /* Step forward those that were merged. */ - while( i-->0 ){ - rc = leavesReaderStep(v, lrs+i); - if( rc!=SQLITE_OK ) goto err; - - /* Reorder by term, then by age. */ - leavesReaderReorder(lrs+i, MERGE_COUNT-i); + }else{ + rc = fts3SqlStmt(p, SQL_DELETE_SEGDIR_LEVEL, &pDelete, 0); + if( rc==SQLITE_OK ){ + sqlite3_bind_int64( + pDelete, 1, getAbsoluteLevel(p, iLangid, iIndex, iLevel) + ); } } - for(i=0; i=0 ); + while( 1 ){ + char c = 0; + while( p0 ); + nList -= (int)(p - pList); + pList = p; + if( nList==0 ){ + break; + } + p = &pList[1]; + p += sqlite3Fts3GetVarint32(p, &iCurrent); + } - for(rc=SQLITE_OK; rc==SQLITE_OK && !leavesReaderAtEnd(pReader); - rc=leavesReaderStep(v, pReader)){ - /* TODO(shess) Really want leavesReaderTermCmp(), but that name is - ** already taken to compare the terms of two LeavesReaders. Think - ** on a better name. [Meanwhile, break encapsulation rather than - ** use a confusing name.] - */ - int c = leafReaderTermCmp(&pReader->leafReader, pTerm, nTerm, isPrefix); - if( c>0 ) break; /* Past any possible matches. */ - if( c==0 ){ - const char *pData = leavesReaderData(pReader); - int iBuffer, nData = leavesReaderDataBytes(pReader); - - /* Find the first empty buffer. */ - for(iBuffer=0; iBuffer0 ){ - assert(pBuffers!=NULL); - memcpy(p, pBuffers, nBuffers*sizeof(*pBuffers)); - sqlite3_free(pBuffers); - } - pBuffers = p; - } - dataBufferInit(&(pBuffers[nBuffers]), 0); - nBuffers++; - } +/* +** Cache data in the Fts3MultiSegReader.aBuffer[] buffer (overwriting any +** existing data). Grow the buffer if required. +** +** If successful, return SQLITE_OK. Otherwise, if an OOM error is encountered +** trying to resize the buffer, return SQLITE_NOMEM. +*/ +static int fts3MsrBufferData( + Fts3MultiSegReader *pMsr, /* Multi-segment-reader handle */ + char *pList, + int nList +){ + if( nList>pMsr->nBuffer ){ + char *pNew; + pMsr->nBuffer = nList*2; + pNew = (char *)sqlite3_realloc(pMsr->aBuffer, pMsr->nBuffer); + if( !pNew ) return SQLITE_NOMEM; + pMsr->aBuffer = pNew; + } - /* At this point, must have an empty at iBuffer. */ - assert(iBufferaBuffer, pList, nList); + return SQLITE_OK; +} - /* If empty was first buffer, no need for merge logic. */ - if( iBuffer==0 ){ - dataBufferReplace(&(pBuffers[0]), pData, nData); - }else{ - /* pAcc is the empty buffer the merged data will end up in. */ - DataBuffer *pAcc = &(pBuffers[iBuffer]); - DataBuffer *p = &(pBuffers[0]); +SQLITE_PRIVATE int sqlite3Fts3MsrIncrNext( + Fts3Table *p, /* Virtual table handle */ + Fts3MultiSegReader *pMsr, /* Multi-segment-reader handle */ + sqlite3_int64 *piDocid, /* OUT: Docid value */ + char **paPoslist, /* OUT: Pointer to position list */ + int *pnPoslist /* OUT: Size of position list in bytes */ +){ + int nMerge = pMsr->nAdvance; + Fts3SegReader **apSegment = pMsr->apSegment; + int (*xCmp)(Fts3SegReader *, Fts3SegReader *) = ( + p->bDescIdx ? fts3SegReaderDoclistCmpRev : fts3SegReaderDoclistCmp + ); - /* Handle position 0 specially to avoid need to prime pAcc - ** with pData/nData. - */ - dataBufferSwap(p, pAcc); - docListAccumulateUnion(pAcc, pData, nData); + if( nMerge==0 ){ + *paPoslist = 0; + return SQLITE_OK; + } - /* Accumulate remaining doclists into pAcc. */ - for(++p; ppData, p->nData); + while( 1 ){ + Fts3SegReader *pSeg; + pSeg = pMsr->apSegment[0]; - /* dataBufferReset() could allow a large doclist to blow up - ** our memory requirements. - */ - if( p->nCapacity<1024 ){ - dataBufferReset(p); - }else{ - dataBufferDestroy(p); - dataBufferInit(p, 0); - } - } + if( pSeg->pOffsetList==0 ){ + *paPoslist = 0; + break; + }else{ + int rc; + char *pList; + int nList; + int j; + sqlite3_int64 iDocid = apSegment[0]->iDocid; + + rc = fts3SegReaderNextDocid(p, apSegment[0], &pList, &nList); + j = 1; + while( rc==SQLITE_OK + && jpOffsetList + && apSegment[j]->iDocid==iDocid + ){ + rc = fts3SegReaderNextDocid(p, apSegment[j], 0, 0); + j++; } - } - } + if( rc!=SQLITE_OK ) return rc; + fts3SegReaderSort(pMsr->apSegment, nMerge, j, xCmp); - /* Union all the doclists together into *out. */ - /* TODO(shess) What if *out is big? Sigh. */ - if( rc==SQLITE_OK && nBuffers>0 ){ - int iBuffer; - for(iBuffer=0; iBuffer0 ){ - if( out->nData==0 ){ - dataBufferSwap(out, &(pBuffers[iBuffer])); + if( pMsr->iColFilter>=0 ){ + fts3ColumnFilter(pMsr->iColFilter, &pList, &nList); + } + + if( nList>0 ){ + if( fts3SegReaderIsPending(apSegment[0]) ){ + rc = fts3MsrBufferData(pMsr, pList, nList+1); + if( rc!=SQLITE_OK ) return rc; + *paPoslist = pMsr->aBuffer; + assert( (pMsr->aBuffer[nList] & 0xFE)==0x00 ); }else{ - docListAccumulateUnion(out, pBuffers[iBuffer].pData, - pBuffers[iBuffer].nData); + *paPoslist = pList; } + *piDocid = iDocid; + *pnPoslist = nList; + break; } } } - while( nBuffers-- ){ - dataBufferDestroy(&(pBuffers[nBuffers])); - } - if( pBuffers!=NULL ) sqlite3_free(pBuffers); - - return rc; + return SQLITE_OK; } -/* Call loadSegmentLeavesInt() with pData/nData as input. */ -static int loadSegmentLeaf(fulltext_vtab *v, const char *pData, int nData, - const char *pTerm, int nTerm, int isPrefix, - DataBuffer *out){ - LeavesReader reader; - int rc; - - assert( nData>1 ); - assert( *pData=='\0' ); - rc = leavesReaderInit(v, 0, 0, 0, pData, nData, &reader); - if( rc!=SQLITE_OK ) return rc; +static int fts3SegReaderStart( + Fts3Table *p, /* Virtual table handle */ + Fts3MultiSegReader *pCsr, /* Cursor object */ + const char *zTerm, /* Term searched for (or NULL) */ + int nTerm /* Length of zTerm in bytes */ +){ + int i; + int nSeg = pCsr->nSegment; - rc = loadSegmentLeavesInt(v, &reader, pTerm, nTerm, isPrefix, out); - leavesReaderReset(&reader); - leavesReaderDestroy(&reader); - return rc; -} + /* If the Fts3SegFilter defines a specific term (or term prefix) to search + ** for, then advance each segment iterator until it points to a term of + ** equal or greater value than the specified term. This prevents many + ** unnecessary merge/sort operations for the case where single segment + ** b-tree leaf nodes contain more than one term. + */ + for(i=0; pCsr->bRestart==0 && inSegment; i++){ + int res = 0; + Fts3SegReader *pSeg = pCsr->apSegment[i]; + do { + int rc = fts3SegReaderNext(p, pSeg, 0); + if( rc!=SQLITE_OK ) return rc; + }while( zTerm && (res = fts3SegReaderTermCmp(pSeg, zTerm, nTerm))<0 ); -/* Call loadSegmentLeavesInt() with the leaf nodes from iStartLeaf to -** iEndLeaf (inclusive) as input, and merge the resulting doclist into -** out. -*/ -static int loadSegmentLeaves(fulltext_vtab *v, - sqlite_int64 iStartLeaf, sqlite_int64 iEndLeaf, - const char *pTerm, int nTerm, int isPrefix, - DataBuffer *out){ - int rc; - LeavesReader reader; + if( pSeg->bLookup && res!=0 ){ + fts3SegReaderSetEof(pSeg); + } + } + fts3SegReaderSort(pCsr->apSegment, nSeg, nSeg, fts3SegReaderCmp); - assert( iStartLeaf<=iEndLeaf ); - rc = leavesReaderInit(v, 0, iStartLeaf, iEndLeaf, NULL, 0, &reader); - if( rc!=SQLITE_OK ) return rc; + return SQLITE_OK; +} - rc = loadSegmentLeavesInt(v, &reader, pTerm, nTerm, isPrefix, out); - leavesReaderReset(&reader); - leavesReaderDestroy(&reader); - return rc; +SQLITE_PRIVATE int sqlite3Fts3SegReaderStart( + Fts3Table *p, /* Virtual table handle */ + Fts3MultiSegReader *pCsr, /* Cursor object */ + Fts3SegFilter *pFilter /* Restrictions on range of iteration */ +){ + pCsr->pFilter = pFilter; + return fts3SegReaderStart(p, pCsr, pFilter->zTerm, pFilter->nTerm); } -/* Taking pData/nData as an interior node, find the sequence of child -** nodes which could include pTerm/nTerm/isPrefix. Note that the -** interior node terms logically come between the blocks, so there is -** one more blockid than there are terms (that block contains terms >= -** the last interior-node term). -*/ -/* TODO(shess) The calling code may already know that the end child is -** not worth calculating, because the end may be in a later sibling -** node. Consider whether breaking symmetry is worthwhile. I suspect -** it is not worthwhile. -*/ -static void getChildrenContaining(const char *pData, int nData, - const char *pTerm, int nTerm, int isPrefix, - sqlite_int64 *piStartChild, - sqlite_int64 *piEndChild){ - InteriorReader reader; +SQLITE_PRIVATE int sqlite3Fts3MsrIncrStart( + Fts3Table *p, /* Virtual table handle */ + Fts3MultiSegReader *pCsr, /* Cursor object */ + int iCol, /* Column to match on. */ + const char *zTerm, /* Term to iterate through a doclist for */ + int nTerm /* Number of bytes in zTerm */ +){ + int i; + int rc; + int nSegment = pCsr->nSegment; + int (*xCmp)(Fts3SegReader *, Fts3SegReader *) = ( + p->bDescIdx ? fts3SegReaderDoclistCmpRev : fts3SegReaderDoclistCmp + ); - assert( nData>1 ); - assert( *pData!='\0' ); - interiorReaderInit(pData, nData, &reader); + assert( pCsr->pFilter==0 ); + assert( zTerm && nTerm>0 ); + + /* Advance each segment iterator until it points to the term zTerm/nTerm. */ + rc = fts3SegReaderStart(p, pCsr, zTerm, nTerm); + if( rc!=SQLITE_OK ) return rc; - /* Scan for the first child which could contain pTerm/nTerm. */ - while( !interiorReaderAtEnd(&reader) ){ - if( interiorReaderTermCmp(&reader, pTerm, nTerm, 0)>0 ) break; - interiorReaderStep(&reader); + /* Determine how many of the segments actually point to zTerm/nTerm. */ + for(i=0; iapSegment[i]; + if( !pSeg->aNode || fts3SegReaderTermCmp(pSeg, zTerm, nTerm) ){ + break; + } } - *piStartChild = interiorReaderCurrentBlockid(&reader); + pCsr->nAdvance = i; - /* Keep scanning to find a term greater than our term, using prefix - ** comparison if indicated. If isPrefix is false, this will be the - ** same blockid as the starting block. - */ - while( !interiorReaderAtEnd(&reader) ){ - if( interiorReaderTermCmp(&reader, pTerm, nTerm, isPrefix)>0 ) break; - interiorReaderStep(&reader); + /* Advance each of the segments to point to the first docid. */ + for(i=0; inAdvance; i++){ + rc = fts3SegReaderFirstDocid(p, pCsr->apSegment[i]); + if( rc!=SQLITE_OK ) return rc; } - *piEndChild = interiorReaderCurrentBlockid(&reader); + fts3SegReaderSort(pCsr->apSegment, i, i, xCmp); - interiorReaderDestroy(&reader); + assert( iCol<0 || iColnColumn ); + pCsr->iColFilter = iCol; - /* Children must ascend, and if !prefix, both must be the same. */ - assert( *piEndChild>=*piStartChild ); - assert( isPrefix || *piStartChild==*piEndChild ); + return SQLITE_OK; } -/* Read block at iBlockid and pass it with other params to -** getChildrenContaining(). +/* +** This function is called on a MultiSegReader that has been started using +** sqlite3Fts3MsrIncrStart(). One or more calls to MsrIncrNext() may also +** have been made. Calling this function puts the MultiSegReader in such +** a state that if the next two calls are: +** +** sqlite3Fts3SegReaderStart() +** sqlite3Fts3SegReaderStep() +** +** then the entire doclist for the term is available in +** MultiSegReader.aDoclist/nDoclist. */ -static int loadAndGetChildrenContaining( - fulltext_vtab *v, - sqlite_int64 iBlockid, - const char *pTerm, int nTerm, int isPrefix, - sqlite_int64 *piStartChild, sqlite_int64 *piEndChild -){ - sqlite3_stmt *s = NULL; - int rc; +SQLITE_PRIVATE int sqlite3Fts3MsrIncrRestart(Fts3MultiSegReader *pCsr){ + int i; /* Used to iterate through segment-readers */ - assert( iBlockid!=0 ); - assert( pTerm!=NULL ); - assert( nTerm!=0 ); /* TODO(shess) Why not allow this? */ - assert( piStartChild!=NULL ); - assert( piEndChild!=NULL ); - - rc = sql_get_statement(v, BLOCK_SELECT_STMT, &s); - if( rc!=SQLITE_OK ) return rc; + assert( pCsr->zTerm==0 ); + assert( pCsr->nTerm==0 ); + assert( pCsr->aDoclist==0 ); + assert( pCsr->nDoclist==0 ); - rc = sqlite3_bind_int64(s, 1, iBlockid); - if( rc!=SQLITE_OK ) return rc; + pCsr->nAdvance = 0; + pCsr->bRestart = 1; + for(i=0; inSegment; i++){ + pCsr->apSegment[i]->pOffsetList = 0; + pCsr->apSegment[i]->nOffsetList = 0; + pCsr->apSegment[i]->iDocid = 0; + } - rc = sqlite3_step(s); - if( rc==SQLITE_DONE ) return SQLITE_ERROR; - if( rc!=SQLITE_ROW ) return rc; + return SQLITE_OK; +} - getChildrenContaining(sqlite3_column_blob(s, 0), sqlite3_column_bytes(s, 0), - pTerm, nTerm, isPrefix, piStartChild, piEndChild); - /* We expect only one row. We must execute another sqlite3_step() - * to complete the iteration; otherwise the table will remain - * locked. */ - rc = sqlite3_step(s); - if( rc==SQLITE_ROW ) return SQLITE_ERROR; - if( rc!=SQLITE_DONE ) return rc; +SQLITE_PRIVATE int sqlite3Fts3SegReaderStep( + Fts3Table *p, /* Virtual table handle */ + Fts3MultiSegReader *pCsr /* Cursor object */ +){ + int rc = SQLITE_OK; - return SQLITE_OK; -} + int isIgnoreEmpty = (pCsr->pFilter->flags & FTS3_SEGMENT_IGNORE_EMPTY); + int isRequirePos = (pCsr->pFilter->flags & FTS3_SEGMENT_REQUIRE_POS); + int isColFilter = (pCsr->pFilter->flags & FTS3_SEGMENT_COLUMN_FILTER); + int isPrefix = (pCsr->pFilter->flags & FTS3_SEGMENT_PREFIX); + int isScan = (pCsr->pFilter->flags & FTS3_SEGMENT_SCAN); + int isFirst = (pCsr->pFilter->flags & FTS3_SEGMENT_FIRST); + + Fts3SegReader **apSegment = pCsr->apSegment; + int nSegment = pCsr->nSegment; + Fts3SegFilter *pFilter = pCsr->pFilter; + int (*xCmp)(Fts3SegReader *, Fts3SegReader *) = ( + p->bDescIdx ? fts3SegReaderDoclistCmpRev : fts3SegReaderDoclistCmp + ); -/* Traverse the tree represented by pData[nData] looking for -** pTerm[nTerm], placing its doclist into *out. This is internal to -** loadSegment() to make error-handling cleaner. -*/ -static int loadSegmentInt(fulltext_vtab *v, const char *pData, int nData, - sqlite_int64 iLeavesEnd, - const char *pTerm, int nTerm, int isPrefix, - DataBuffer *out){ - /* Special case where root is a leaf. */ - if( *pData=='\0' ){ - return loadSegmentLeaf(v, pData, nData, pTerm, nTerm, isPrefix, out); - }else{ - int rc; - sqlite_int64 iStartChild, iEndChild; + if( pCsr->nSegment==0 ) return SQLITE_OK; - /* Process pData as an interior node, then loop down the tree - ** until we find the set of leaf nodes to scan for the term. + do { + int nMerge; + int i; + + /* Advance the first pCsr->nAdvance entries in the apSegment[] array + ** forward. Then sort the list in order of current term again. */ - getChildrenContaining(pData, nData, pTerm, nTerm, isPrefix, - &iStartChild, &iEndChild); - while( iStartChild>iLeavesEnd ){ - sqlite_int64 iNextStart, iNextEnd; - rc = loadAndGetChildrenContaining(v, iStartChild, pTerm, nTerm, isPrefix, - &iNextStart, &iNextEnd); - if( rc!=SQLITE_OK ) return rc; - - /* If we've branched, follow the end branch, too. */ - if( iStartChild!=iEndChild ){ - sqlite_int64 iDummy; - rc = loadAndGetChildrenContaining(v, iEndChild, pTerm, nTerm, isPrefix, - &iDummy, &iNextEnd); - if( rc!=SQLITE_OK ) return rc; + for(i=0; inAdvance; i++){ + Fts3SegReader *pSeg = apSegment[i]; + if( pSeg->bLookup ){ + fts3SegReaderSetEof(pSeg); + }else{ + rc = fts3SegReaderNext(p, pSeg, 0); } - - assert( iNextStart<=iNextEnd ); - iStartChild = iNextStart; - iEndChild = iNextEnd; + if( rc!=SQLITE_OK ) return rc; } - assert( iStartChild<=iLeavesEnd ); - assert( iEndChild<=iLeavesEnd ); + fts3SegReaderSort(apSegment, nSegment, pCsr->nAdvance, fts3SegReaderCmp); + pCsr->nAdvance = 0; - /* Scan through the leaf segments for doclists. */ - return loadSegmentLeaves(v, iStartChild, iEndChild, - pTerm, nTerm, isPrefix, out); - } -} + /* If all the seg-readers are at EOF, we're finished. return SQLITE_OK. */ + assert( rc==SQLITE_OK ); + if( apSegment[0]->aNode==0 ) break; -/* Call loadSegmentInt() to collect the doclist for pTerm/nTerm, then -** merge its doclist over *out (any duplicate doclists read from the -** segment rooted at pData will overwrite those in *out). -*/ -/* TODO(shess) Consider changing this to determine the depth of the -** leaves using either the first characters of interior nodes (when -** ==1, we're one level above the leaves), or the first character of -** the root (which will describe the height of the tree directly). -** Either feels somewhat tricky to me. -*/ -/* TODO(shess) The current merge is likely to be slow for large -** doclists (though it should process from newest/smallest to -** oldest/largest, so it may not be that bad). It might be useful to -** modify things to allow for N-way merging. This could either be -** within a segment, with pairwise merges across segments, or across -** all segments at once. -*/ -static int loadSegment(fulltext_vtab *v, const char *pData, int nData, - sqlite_int64 iLeavesEnd, - const char *pTerm, int nTerm, int isPrefix, - DataBuffer *out){ - DataBuffer result; - int rc; + pCsr->nTerm = apSegment[0]->nTerm; + pCsr->zTerm = apSegment[0]->zTerm; - assert( nData>1 ); + /* If this is a prefix-search, and if the term that apSegment[0] points + ** to does not share a suffix with pFilter->zTerm/nTerm, then all + ** required callbacks have been made. In this case exit early. + ** + ** Similarly, if this is a search for an exact match, and the first term + ** of segment apSegment[0] is not a match, exit early. + */ + if( pFilter->zTerm && !isScan ){ + if( pCsr->nTermnTerm + || (!isPrefix && pCsr->nTerm>pFilter->nTerm) + || memcmp(pCsr->zTerm, pFilter->zTerm, pFilter->nTerm) + ){ + break; + } + } - /* This code should never be called with buffered updates. */ - assert( v->nPendingData<0 ); + nMerge = 1; + while( nMergeaNode + && apSegment[nMerge]->nTerm==pCsr->nTerm + && 0==memcmp(pCsr->zTerm, apSegment[nMerge]->zTerm, pCsr->nTerm) + ){ + nMerge++; + } - dataBufferInit(&result, 0); - rc = loadSegmentInt(v, pData, nData, iLeavesEnd, - pTerm, nTerm, isPrefix, &result); - if( rc==SQLITE_OK && result.nData>0 ){ - if( out->nData==0 ){ - DataBuffer tmp = *out; - *out = result; - result = tmp; + assert( isIgnoreEmpty || (isRequirePos && !isColFilter) ); + if( nMerge==1 + && !isIgnoreEmpty + && !isFirst + && (p->bDescIdx==0 || fts3SegReaderIsPending(apSegment[0])==0) + ){ + pCsr->nDoclist = apSegment[0]->nDoclist; + if( fts3SegReaderIsPending(apSegment[0]) ){ + rc = fts3MsrBufferData(pCsr, apSegment[0]->aDoclist, pCsr->nDoclist); + pCsr->aDoclist = pCsr->aBuffer; + }else{ + pCsr->aDoclist = apSegment[0]->aDoclist; + } + if( rc==SQLITE_OK ) rc = SQLITE_ROW; }else{ - DataBuffer merged; - DLReader readers[2]; + int nDoclist = 0; /* Size of doclist */ + sqlite3_int64 iPrev = 0; /* Previous docid stored in doclist */ - dlrInit(&readers[0], DL_DEFAULT, out->pData, out->nData); - dlrInit(&readers[1], DL_DEFAULT, result.pData, result.nData); - dataBufferInit(&merged, out->nData+result.nData); - docListMerge(&merged, readers, 2); - dataBufferDestroy(out); - *out = merged; - dlrDestroy(&readers[0]); - dlrDestroy(&readers[1]); - } - } - dataBufferDestroy(&result); - return rc; -} + /* The current term of the first nMerge entries in the array + ** of Fts3SegReader objects is the same. The doclists must be merged + ** and a single term returned with the merged doclist. + */ + for(i=0; ipOffsetList ){ + int j; /* Number of segments that share a docid */ + char *pList; + int nList; + int nByte; + sqlite3_int64 iDocid = apSegment[0]->iDocid; + fts3SegReaderNextDocid(p, apSegment[0], &pList, &nList); + j = 1; + while( jpOffsetList + && apSegment[j]->iDocid==iDocid + ){ + fts3SegReaderNextDocid(p, apSegment[j], 0, 0); + j++; + } -/* Scan the database and merge together the posting lists for the term -** into *out. -*/ -static int termSelect( - fulltext_vtab *v, - int iColumn, - const char *pTerm, int nTerm, /* Term to query for */ - int isPrefix, /* True for a prefix search */ - DocListType iType, - DataBuffer *out /* Write results here */ -){ - DataBuffer doclist; - sqlite3_stmt *s; - int rc = sql_get_statement(v, SEGDIR_SELECT_ALL_STMT, &s); - if( rc!=SQLITE_OK ) return rc; + if( isColFilter ){ + fts3ColumnFilter(pFilter->iCol, &pList, &nList); + } - /* This code should never be called with buffered updates. */ - assert( v->nPendingData<0 ); + if( !isIgnoreEmpty || nList>0 ){ + + /* Calculate the 'docid' delta value to write into the merged + ** doclist. */ + sqlite3_int64 iDelta; + if( p->bDescIdx && nDoclist>0 ){ + iDelta = iPrev - iDocid; + }else{ + iDelta = iDocid - iPrev; + } + assert( iDelta>0 || (nDoclist==0 && iDelta==iDocid) ); + assert( nDoclist>0 || iDelta==iDocid ); + + nByte = sqlite3Fts3VarintLen(iDelta) + (isRequirePos?nList+1:0); + if( nDoclist+nByte>pCsr->nBuffer ){ + char *aNew; + pCsr->nBuffer = (nDoclist+nByte)*2; + aNew = sqlite3_realloc(pCsr->aBuffer, pCsr->nBuffer); + if( !aNew ){ + return SQLITE_NOMEM; + } + pCsr->aBuffer = aNew; + } - dataBufferInit(&doclist, 0); - dataBufferInit(out, 0); + if( isFirst ){ + char *a = &pCsr->aBuffer[nDoclist]; + int nWrite; + + nWrite = sqlite3Fts3FirstFilter(iDelta, pList, nList, a); + if( nWrite ){ + iPrev = iDocid; + nDoclist += nWrite; + } + }else{ + nDoclist += sqlite3Fts3PutVarint(&pCsr->aBuffer[nDoclist], iDelta); + iPrev = iDocid; + if( isRequirePos ){ + memcpy(&pCsr->aBuffer[nDoclist], pList, nList); + nDoclist += nList; + pCsr->aBuffer[nDoclist++] = '\0'; + } + } + } - /* Traverse the segments from oldest to newest so that newer doclist - ** elements for given docids overwrite older elements. - */ - while( (rc = sqlite3_step(s))==SQLITE_ROW ){ - const char *pData = sqlite3_column_blob(s, 2); - const int nData = sqlite3_column_bytes(s, 2); - const sqlite_int64 iLeavesEnd = sqlite3_column_int64(s, 1); - rc = loadSegment(v, pData, nData, iLeavesEnd, pTerm, nTerm, isPrefix, - &doclist); - if( rc!=SQLITE_OK ) goto err; - } - if( rc==SQLITE_DONE ){ - if( doclist.nData!=0 ){ - /* TODO(shess) The old term_select_all() code applied the column - ** restrict as we merged segments, leading to smaller buffers. - ** This is probably worthwhile to bring back, once the new storage - ** system is checked in. - */ - if( iColumn==v->nColumn) iColumn = -1; - docListTrim(DL_DEFAULT, doclist.pData, doclist.nData, - iColumn, iType, out); + fts3SegReaderSort(apSegment, nMerge, j, xCmp); + } + if( nDoclist>0 ){ + pCsr->aDoclist = pCsr->aBuffer; + pCsr->nDoclist = nDoclist; + rc = SQLITE_ROW; + } } - rc = SQLITE_OK; - } + pCsr->nAdvance = nMerge; + }while( rc==SQLITE_OK ); - err: - dataBufferDestroy(&doclist); return rc; } -/****************************************************************/ -/* Used to hold hashtable data for sorting. */ -typedef struct TermData { - const char *pTerm; - int nTerm; - DLCollector *pCollector; -} TermData; - -/* Orders TermData elements in strcmp fashion ( <0 for less-than, 0 -** for equal, >0 for greater-than). -*/ -static int termDataCmp(const void *av, const void *bv){ - const TermData *a = (const TermData *)av; - const TermData *b = (const TermData *)bv; - int n = a->nTermnTerm ? a->nTerm : b->nTerm; - int c = memcmp(a->pTerm, b->pTerm, n); - if( c!=0 ) return c; - return a->nTerm-b->nTerm; -} - -/* Order pTerms data by term, then write a new level 0 segment using -** LeafWriter. -*/ -static int writeZeroSegment(fulltext_vtab *v, fts3Hash *pTerms){ - fts3HashElem *e; - int idx, rc, i, n; - TermData *pData; - LeafWriter writer; - DataBuffer dl; - - /* Determine the next index at level 0, merging as necessary. */ - rc = segdirNextIndex(v, 0, &idx); - if( rc!=SQLITE_OK ) return rc; - n = fts3HashCount(pTerms); - pData = sqlite3_malloc(n*sizeof(TermData)); +SQLITE_PRIVATE void sqlite3Fts3SegReaderFinish( + Fts3MultiSegReader *pCsr /* Cursor object */ +){ + if( pCsr ){ + int i; + for(i=0; inSegment; i++){ + sqlite3Fts3SegReaderFree(pCsr->apSegment[i]); + } + sqlite3_free(pCsr->apSegment); + sqlite3_free(pCsr->aBuffer); - for(i = 0, e = fts3HashFirst(pTerms); e; i++, e = fts3HashNext(e)){ - assert( inSegment = 0; + pCsr->apSegment = 0; + pCsr->aBuffer = 0; } - assert( i==n ); +} - /* TODO(shess) Should we allow user-defined collation sequences, - ** here? I think we only need that once we support prefix searches. - */ - if( n>1 ) qsort(pData, n, sizeof(*pData), termDataCmp); +/* +** Merge all level iLevel segments in the database into a single +** iLevel+1 segment. Or, if iLevel<0, merge all segments into a +** single segment with a level equal to the numerically largest level +** currently present in the database. +** +** If this function is called with iLevel<0, but there is only one +** segment in the database, SQLITE_DONE is returned immediately. +** Otherwise, if successful, SQLITE_OK is returned. If an error occurs, +** an SQLite error code is returned. +*/ +static int fts3SegmentMerge( + Fts3Table *p, + int iLangid, /* Language id to merge */ + int iIndex, /* Index in p->aIndex[] to merge */ + int iLevel /* Level to merge */ +){ + int rc; /* Return code */ + int iIdx = 0; /* Index of new segment */ + sqlite3_int64 iNewLevel = 0; /* Level/index to create new segment at */ + SegmentWriter *pWriter = 0; /* Used to write the new, merged, segment */ + Fts3SegFilter filter; /* Segment term filter condition */ + Fts3MultiSegReader csr; /* Cursor to iterate through level(s) */ + int bIgnoreEmpty = 0; /* True to ignore empty segments */ + + assert( iLevel==FTS3_SEGCURSOR_ALL + || iLevel==FTS3_SEGCURSOR_PENDING + || iLevel>=0 + ); + assert( iLevel=0 && iIndexnIndex ); + + rc = sqlite3Fts3SegReaderCursor(p, iLangid, iIndex, iLevel, 0, 0, 1, 0, &csr); + if( rc!=SQLITE_OK || csr.nSegment==0 ) goto finished; + + if( iLevel==FTS3_SEGCURSOR_ALL ){ + /* This call is to merge all segments in the database to a single + ** segment. The level of the new segment is equal to the the numerically + ** greatest segment level currently present in the database for this + ** index. The idx of the new segment is always 0. */ + if( csr.nSegment==1 ){ + rc = SQLITE_DONE; + goto finished; + } + rc = fts3SegmentMaxLevel(p, iLangid, iIndex, &iNewLevel); + bIgnoreEmpty = 1; - /* TODO(shess) Refactor so that we can write directly to the segment - ** DataBuffer, as happens for segment merges. - */ - leafWriterInit(0, idx, &writer); - dataBufferInit(&dl, 0); - for(i=0; i0 ); + assert( iNewLevel>=getAbsoluteLevel(p, iLangid, iIndex, 0) ); + assert( iNewLevelnPendingData>=0 ){ - fts3HashElem *e; - for(e=fts3HashFirst(&v->pendingTerms); e; e=fts3HashNext(e)){ - dlcDelete(fts3HashData(e)); - } - fts3HashClear(&v->pendingTerms); - v->nPendingData = -1; - } - return SQLITE_OK; -} -/* If pendingTerms has data, flush it to a level-zero segment, and -** free it. +/* +** Flush the contents of pendingTerms to level 0 segments. */ -static int flushPendingTerms(fulltext_vtab *v){ - if( v->nPendingData>=0 ){ - int rc = writeZeroSegment(v, &v->pendingTerms); - if( rc==SQLITE_OK ) clearPendingTerms(v); - return rc; +SQLITE_PRIVATE int sqlite3Fts3PendingTermsFlush(Fts3Table *p){ + int rc = SQLITE_OK; + int i; + + for(i=0; rc==SQLITE_OK && inIndex; i++){ + rc = fts3SegmentMerge(p, p->iPrevLangid, i, FTS3_SEGCURSOR_PENDING); + if( rc==SQLITE_DONE ) rc = SQLITE_OK; } - return SQLITE_OK; -} + sqlite3Fts3PendingTermsClear(p); -/* If pendingTerms is "too big", or docid is out of order, flush it. -** Regardless, be certain that pendingTerms is initialized for use. -*/ -static int initPendingTerms(fulltext_vtab *v, sqlite_int64 iDocid){ - /* TODO(shess) Explore whether partially flushing the buffer on - ** forced-flush would provide better performance. I suspect that if - ** we ordered the doclists by size and flushed the largest until the - ** buffer was half empty, that would let the less frequent terms - ** generate longer doclists. + /* Determine the auto-incr-merge setting if unknown. If enabled, + ** estimate the number of leaf blocks of content to be written */ - if( iDocid<=v->iPrevDocid || v->nPendingData>kPendingThreshold ){ - int rc = flushPendingTerms(v); - if( rc!=SQLITE_OK ) return rc; - } - if( v->nPendingData<0 ){ - fts3HashInit(&v->pendingTerms, FTS3_HASH_STRING, 1); - v->nPendingData = 0; - } - v->iPrevDocid = iDocid; - return SQLITE_OK; -} - -/* This function implements the xUpdate callback; it is the top-level entry - * point for inserting, deleting or updating a row in a full-text table. */ -static int fulltextUpdate(sqlite3_vtab *pVtab, int nArg, sqlite3_value **ppArg, - sqlite_int64 *pRowid){ - fulltext_vtab *v = (fulltext_vtab *) pVtab; - int rc; - - FTSTRACE(("FTS3 Update %p\n", pVtab)); - - if( nArg<2 ){ - rc = index_delete(v, sqlite3_value_int64(ppArg[0])); + if( rc==SQLITE_OK && p->bHasStat + && p->bAutoincrmerge==0xff && p->nLeafAdd>0 + ){ + sqlite3_stmt *pStmt = 0; + rc = fts3SqlStmt(p, SQL_SELECT_STAT, &pStmt, 0); if( rc==SQLITE_OK ){ - /* If we just deleted the last row in the table, clear out the - ** index data. - */ - rc = content_exists(v); - if( rc==SQLITE_ROW ){ - rc = SQLITE_OK; - }else if( rc==SQLITE_DONE ){ - /* Clear the pending terms so we don't flush a useless level-0 - ** segment when the transaction closes. - */ - rc = clearPendingTerms(v); - if( rc==SQLITE_OK ){ - rc = segdir_delete_all(v); - } - } - } - } else if( sqlite3_value_type(ppArg[0]) != SQLITE_NULL ){ - /* An update: - * ppArg[0] = old rowid - * ppArg[1] = new rowid - * ppArg[2..2+v->nColumn-1] = values - * ppArg[2+v->nColumn] = value for magic column (we ignore this) - * ppArg[2+v->nColumn+1] = value for docid - */ - sqlite_int64 rowid = sqlite3_value_int64(ppArg[0]); - if( sqlite3_value_type(ppArg[1]) != SQLITE_INTEGER || - sqlite3_value_int64(ppArg[1]) != rowid ){ - rc = SQLITE_ERROR; /* we don't allow changing the rowid */ - }else if( sqlite3_value_type(ppArg[2+v->nColumn+1]) != SQLITE_INTEGER || - sqlite3_value_int64(ppArg[2+v->nColumn+1]) != rowid ){ - rc = SQLITE_ERROR; /* we don't allow changing the docid */ - }else{ - assert( nArg==2+v->nColumn+2); - rc = index_update(v, rowid, &ppArg[2]); - } - } else { - /* An insert: - * ppArg[1] = requested rowid - * ppArg[2..2+v->nColumn-1] = values - * ppArg[2+v->nColumn] = value for magic column (we ignore this) - * ppArg[2+v->nColumn+1] = value for docid - */ - sqlite3_value *pRequestDocid = ppArg[2+v->nColumn+1]; - assert( nArg==2+v->nColumn+2); - if( SQLITE_NULL != sqlite3_value_type(pRequestDocid) && - SQLITE_NULL != sqlite3_value_type(ppArg[1]) ){ - /* TODO(shess) Consider allowing this to work if the values are - ** identical. I'm inclined to discourage that usage, though, - ** given that both rowid and docid are special columns. Better - ** would be to define one or the other as the default winner, - ** but should it be fts3-centric (docid) or SQLite-centric - ** (rowid)? - */ - rc = SQLITE_ERROR; - }else{ - if( SQLITE_NULL == sqlite3_value_type(pRequestDocid) ){ - pRequestDocid = ppArg[1]; - } - rc = index_insert(v, pRequestDocid, &ppArg[2], pRowid); + sqlite3_bind_int(pStmt, 1, FTS_STAT_AUTOINCRMERGE); + rc = sqlite3_step(pStmt); + p->bAutoincrmerge = (rc==SQLITE_ROW && sqlite3_column_int(pStmt, 0)); + rc = sqlite3_reset(pStmt); } } - return rc; } -static int fulltextSync(sqlite3_vtab *pVtab){ - FTSTRACE(("FTS3 xSync()\n")); - return flushPendingTerms((fulltext_vtab *)pVtab); -} - -static int fulltextBegin(sqlite3_vtab *pVtab){ - fulltext_vtab *v = (fulltext_vtab *) pVtab; - FTSTRACE(("FTS3 xBegin()\n")); - - /* Any buffered updates should have been cleared by the previous - ** transaction. - */ - assert( v->nPendingData<0 ); - return clearPendingTerms(v); -} - -static int fulltextCommit(sqlite3_vtab *pVtab){ - fulltext_vtab *v = (fulltext_vtab *) pVtab; - FTSTRACE(("FTS3 xCommit()\n")); - - /* Buffered updates should have been cleared by fulltextSync(). */ - assert( v->nPendingData<0 ); - return clearPendingTerms(v); -} - -static int fulltextRollback(sqlite3_vtab *pVtab){ - FTSTRACE(("FTS3 xRollback()\n")); - return clearPendingTerms((fulltext_vtab *)pVtab); -} - /* -** Implementation of the snippet() function for FTS3 +** Encode N integers as varints into a blob. */ -static void snippetFunc( - sqlite3_context *pContext, - int argc, - sqlite3_value **argv +static void fts3EncodeIntArray( + int N, /* The number of integers to encode */ + u32 *a, /* The integer values */ + char *zBuf, /* Write the BLOB here */ + int *pNBuf /* Write number of bytes if zBuf[] used here */ ){ - fulltext_cursor *pCursor; - if( argc<1 ) return; - if( sqlite3_value_type(argv[0])!=SQLITE_BLOB || - sqlite3_value_bytes(argv[0])!=sizeof(pCursor) ){ - sqlite3_result_error(pContext, "illegal first argument to html_snippet",-1); - }else{ - const char *zStart = ""; - const char *zEnd = ""; - const char *zEllipsis = "..."; - memcpy(&pCursor, sqlite3_value_blob(argv[0]), sizeof(pCursor)); - if( argc>=2 ){ - zStart = (const char*)sqlite3_value_text(argv[1]); - if( argc>=3 ){ - zEnd = (const char*)sqlite3_value_text(argv[2]); - if( argc>=4 ){ - zEllipsis = (const char*)sqlite3_value_text(argv[3]); - } - } - } - snippetAllOffsets(pCursor); - snippetText(pCursor, zStart, zEnd, zEllipsis); - sqlite3_result_text(pContext, pCursor->snippet.zSnippet, - pCursor->snippet.nSnippet, SQLITE_STATIC); + int i, j; + for(i=j=0; isnippet); - sqlite3_result_text(pContext, - pCursor->snippet.zOffset, pCursor->snippet.nOffset, - SQLITE_STATIC); + int i, j; + UNUSED_PARAMETER(nBuf); + for(i=j=0; iMERGE_COUNT segments, and would -** also need to be able to optionally optimize away deletes. -*/ -typedef struct OptLeavesReader { - /* Segment number, to order readers by age. */ - int segment; - LeavesReader reader; -} OptLeavesReader; - -static int optLeavesReaderAtEnd(OptLeavesReader *pReader){ - return leavesReaderAtEnd(&pReader->reader); -} -static int optLeavesReaderTermBytes(OptLeavesReader *pReader){ - return leavesReaderTermBytes(&pReader->reader); -} -static const char *optLeavesReaderData(OptLeavesReader *pReader){ - return leavesReaderData(&pReader->reader); -} -static int optLeavesReaderDataBytes(OptLeavesReader *pReader){ - return leavesReaderDataBytes(&pReader->reader); -} -static const char *optLeavesReaderTerm(OptLeavesReader *pReader){ - return leavesReaderTerm(&pReader->reader); -} -static int optLeavesReaderStep(fulltext_vtab *v, OptLeavesReader *pReader){ - return leavesReaderStep(v, &pReader->reader); -} -static int optLeavesReaderTermCmp(OptLeavesReader *lr1, OptLeavesReader *lr2){ - return leavesReaderTermCmp(&lr1->reader, &lr2->reader); -} -/* Order by term ascending, segment ascending (oldest to newest), with -** exhausted readers to the end. -*/ -static int optLeavesReaderCmp(OptLeavesReader *lr1, OptLeavesReader *lr2){ - int c = optLeavesReaderTermCmp(lr1, lr2); - if( c!=0 ) return c; - return lr1->segment-lr2->segment; -} -/* Bubble pLr[0] to appropriate place in pLr[1..nLr-1]. Assumes that -** pLr[1..nLr-1] is already sorted. +/* +** Insert the sizes (in tokens) for each column of the document +** with docid equal to p->iPrevDocid. The sizes are encoded as +** a blob of varints. */ -static void optLeavesReaderReorder(OptLeavesReader *pLr, int nLr){ - while( nLr>1 && optLeavesReaderCmp(pLr, pLr+1)>0 ){ - OptLeavesReader tmp = pLr[0]; - pLr[0] = pLr[1]; - pLr[1] = tmp; - nLr--; - pLr++; +static void fts3InsertDocsize( + int *pRC, /* Result code */ + Fts3Table *p, /* Table into which to insert */ + u32 *aSz /* Sizes of each column, in tokens */ +){ + char *pBlob; /* The BLOB encoding of the document size */ + int nBlob; /* Number of bytes in the BLOB */ + sqlite3_stmt *pStmt; /* Statement used to insert the encoding */ + int rc; /* Result code from subfunctions */ + + if( *pRC ) return; + pBlob = sqlite3_malloc( 10*p->nColumn ); + if( pBlob==0 ){ + *pRC = SQLITE_NOMEM; + return; } + fts3EncodeIntArray(p->nColumn, aSz, pBlob, &nBlob); + rc = fts3SqlStmt(p, SQL_REPLACE_DOCSIZE, &pStmt, 0); + if( rc ){ + sqlite3_free(pBlob); + *pRC = rc; + return; + } + sqlite3_bind_int64(pStmt, 1, p->iPrevDocid); + sqlite3_bind_blob(pStmt, 2, pBlob, nBlob, sqlite3_free); + sqlite3_step(pStmt); + *pRC = sqlite3_reset(pStmt); } -/* optimize() helper function. Put the readers in order and iterate -** through them, merging doclists for matching terms into pWriter. -** Returns SQLITE_OK on success, or the SQLite error code which -** prevented success. +/* +** Record 0 of the %_stat table contains a blob consisting of N varints, +** where N is the number of user defined columns in the fts3 table plus +** two. If nCol is the number of user defined columns, then values of the +** varints are set as follows: +** +** Varint 0: Total number of rows in the table. +** +** Varint 1..nCol: For each column, the total number of tokens stored in +** the column for all rows of the table. +** +** Varint 1+nCol: The total size, in bytes, of all text values in all +** columns of all rows of the table. +** */ -static int optimizeInternal(fulltext_vtab *v, - OptLeavesReader *readers, int nReaders, - LeafWriter *pWriter){ - int i, rc = SQLITE_OK; - DataBuffer doclist, merged, tmp; - - /* Order the readers. */ - i = nReaders; - while( i-- > 0 ){ - optLeavesReaderReorder(&readers[i], nReaders-i); +static void fts3UpdateDocTotals( + int *pRC, /* The result code */ + Fts3Table *p, /* Table being updated */ + u32 *aSzIns, /* Size increases */ + u32 *aSzDel, /* Size decreases */ + int nChng /* Change in the number of documents */ +){ + char *pBlob; /* Storage for BLOB written into %_stat */ + int nBlob; /* Size of BLOB written into %_stat */ + u32 *a; /* Array of integers that becomes the BLOB */ + sqlite3_stmt *pStmt; /* Statement for reading and writing */ + int i; /* Loop counter */ + int rc; /* Result code from subfunctions */ + + const int nStat = p->nColumn+2; + + if( *pRC ) return; + a = sqlite3_malloc( (sizeof(u32)+10)*nStat ); + if( a==0 ){ + *pRC = SQLITE_NOMEM; + return; } - - dataBufferInit(&doclist, LEAF_MAX); - dataBufferInit(&merged, LEAF_MAX); - - /* Exhausted readers bubble to the end, so when the first reader is - ** at eof, all are at eof. - */ - while( !optLeavesReaderAtEnd(&readers[0]) ){ - - /* Figure out how many readers share the next term. */ - for(i=1; inColumn+1; i++){ + u32 x = a[i+1]; + if( x+aSzIns[i] < aSzDel[i] ){ + x = 0; }else{ - DLReader dlReaders[MERGE_COUNT]; - int iReader, nReaders; - - /* Prime the pipeline with the first reader's doclist. After - ** one pass index 0 will reference the accumulated doclist. - */ - dlrInit(&dlReaders[0], DL_DEFAULT, - optLeavesReaderData(&readers[0]), - optLeavesReaderDataBytes(&readers[0])); - iReader = 1; - - assert( iReader 0 ){ - dlrDestroy(&dlReaders[nReaders]); + rc = fts3SqlStmt(p, SQL_SELECT_ALL_LANGID, &pAllLangid, 0); + if( rc==SQLITE_OK ){ + int rc2; + sqlite3_bind_int(pAllLangid, 1, p->nIndex); + while( sqlite3_step(pAllLangid)==SQLITE_ROW ){ + int i; + int iLangid = sqlite3_column_int(pAllLangid, 0); + for(i=0; rc==SQLITE_OK && inIndex; i++){ + rc = fts3SegmentMerge(p, iLangid, i, FTS3_SEGCURSOR_ALL); + if( rc==SQLITE_DONE ){ + bSeenDone = 1; + rc = SQLITE_OK; } - - /* Accumulated doclist to reader 0 for next pass. */ - dlrInit(&dlReaders[0], DL_DEFAULT, doclist.pData, doclist.nData); } - - /* Destroy reader that was left in the pipeline. */ - dlrDestroy(&dlReaders[0]); - - /* Trim deletions from the doclist. */ - dataBufferReset(&merged); - docListTrim(DL_DEFAULT, doclist.pData, doclist.nData, - -1, DL_DEFAULT, &merged); - } - - /* Only pass doclists with hits (skip if all hits deleted). */ - if( merged.nData>0 ){ - rc = leafWriterStep(v, pWriter, - optLeavesReaderTerm(&readers[0]), - optLeavesReaderTermBytes(&readers[0]), - merged.pData, merged.nData); - if( rc!=SQLITE_OK ) goto err; - } - - /* Step merged readers to next term and reorder. */ - while( i-- > 0 ){ - rc = optLeavesReaderStep(v, &readers[i]); - if( rc!=SQLITE_OK ) goto err; - - optLeavesReaderReorder(&readers[i], nReaders-i); } + rc2 = sqlite3_reset(pAllLangid); + if( rc==SQLITE_OK ) rc = rc2; } - err: - dataBufferDestroy(&doclist); - dataBufferDestroy(&merged); - return rc; + sqlite3Fts3SegmentsClose(p); + sqlite3Fts3PendingTermsClear(p); + + return (rc==SQLITE_OK && bReturnDone && bSeenDone) ? SQLITE_DONE : rc; } -/* Implement optimize() function for FTS3. optimize(t) merges all -** segments in the fts index into a single segment. 't' is the magic -** table-named column. +/* +** This function is called when the user executes the following statement: +** +** INSERT INTO () VALUES('rebuild'); +** +** The entire FTS index is discarded and rebuilt. If the table is one +** created using the content=xxx option, then the new index is based on +** the current contents of the xxx table. Otherwise, it is rebuilt based +** on the contents of the %_content table. */ -static void optimizeFunc(sqlite3_context *pContext, - int argc, sqlite3_value **argv){ - fulltext_cursor *pCursor; - if( argc>1 ){ - sqlite3_result_error(pContext, "excess arguments to optimize()",-1); - }else if( sqlite3_value_type(argv[0])!=SQLITE_BLOB || - sqlite3_value_bytes(argv[0])!=sizeof(pCursor) ){ - sqlite3_result_error(pContext, "illegal first argument to optimize",-1); - }else{ - fulltext_vtab *v; - int i, rc, iMaxLevel; - OptLeavesReader *readers; - int nReaders; - LeafWriter writer; - sqlite3_stmt *s; - - memcpy(&pCursor, sqlite3_value_blob(argv[0]), sizeof(pCursor)); - v = cursor_vtab(pCursor); - - /* Flush any buffered updates before optimizing. */ - rc = flushPendingTerms(v); - if( rc!=SQLITE_OK ) goto err; - - rc = segdir_count(v, &nReaders, &iMaxLevel); - if( rc!=SQLITE_OK ) goto err; - if( nReaders==0 || nReaders==1 ){ - sqlite3_result_text(pContext, "Index already optimal", -1, - SQLITE_STATIC); - return; - } - - rc = sql_get_statement(v, SEGDIR_SELECT_ALL_STMT, &s); - if( rc!=SQLITE_OK ) goto err; - - readers = sqlite3_malloc(nReaders*sizeof(readers[0])); - if( readers==NULL ) goto err; - - /* Note that there will already be a segment at this position - ** until we call segdir_delete() on iMaxLevel. - */ - leafWriterInit(iMaxLevel, 0, &writer); - - i = 0; - while( (rc = sqlite3_step(s))==SQLITE_ROW ){ - sqlite_int64 iStart = sqlite3_column_int64(s, 0); - sqlite_int64 iEnd = sqlite3_column_int64(s, 1); - const char *pRootData = sqlite3_column_blob(s, 2); - int nRootData = sqlite3_column_bytes(s, 2); - - assert( i 0 ){ - leavesReaderDestroy(&readers[i].reader); + rc = fts3DeleteAll(p, 0); + if( rc==SQLITE_OK ){ + u32 *aSz = 0; + u32 *aSzIns = 0; + u32 *aSzDel = 0; + sqlite3_stmt *pStmt = 0; + int nEntry = 0; + + /* Compose and prepare an SQL statement to loop through the content table */ + char *zSql = sqlite3_mprintf("SELECT %s" , p->zReadExprlist); + if( !zSql ){ + rc = SQLITE_NOMEM; + }else{ + rc = sqlite3_prepare_v2(p->db, zSql, -1, &pStmt, 0); + sqlite3_free(zSql); } - sqlite3_free(readers); - /* If we've successfully gotten to here, delete the old segments - ** and flush the interior structure of the new segment. - */ if( rc==SQLITE_OK ){ - for( i=0; i<=iMaxLevel; i++ ){ - rc = segdir_delete(v, i); - if( rc!=SQLITE_OK ) break; + int nByte = sizeof(u32) * (p->nColumn+1)*3; + aSz = (u32 *)sqlite3_malloc(nByte); + if( aSz==0 ){ + rc = SQLITE_NOMEM; + }else{ + memset(aSz, 0, nByte); + aSzIns = &aSz[p->nColumn+1]; + aSzDel = &aSzIns[p->nColumn+1]; } - - if( rc==SQLITE_OK ) rc = leafWriterFinalize(v, &writer); } - leafWriterDestroy(&writer); - - if( rc!=SQLITE_OK ) goto err; - - sqlite3_result_text(pContext, "Index optimized", -1, SQLITE_STATIC); - return; - - /* TODO(shess): Error-handling needs to be improved along the - ** lines of the dump_ functions. - */ - err: - { - char buf[512]; - sqlite3_snprintf(sizeof(buf), buf, "Error in optimize: %s", - sqlite3_errmsg(sqlite3_context_db_handle(pContext))); - sqlite3_result_error(pContext, buf, -1); + while( rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pStmt) ){ + int iCol; + int iLangid = langidFromSelect(p, pStmt); + rc = fts3PendingTermsDocid(p, iLangid, sqlite3_column_int64(pStmt, 0)); + aSz[p->nColumn] = 0; + for(iCol=0; rc==SQLITE_OK && iColnColumn; iCol++){ + const char *z = (const char *) sqlite3_column_text(pStmt, iCol+1); + rc = fts3PendingTermsAdd(p, iLangid, z, iCol, &aSz[iCol]); + aSz[p->nColumn] += sqlite3_column_bytes(pStmt, iCol+1); + } + if( p->bHasDocsize ){ + fts3InsertDocsize(&rc, p, aSz); + } + if( rc!=SQLITE_OK ){ + sqlite3_finalize(pStmt); + pStmt = 0; + }else{ + nEntry++; + for(iCol=0; iCol<=p->nColumn; iCol++){ + aSzIns[iCol] += aSz[iCol]; + } + } } - } -} - -#ifdef SQLITE_TEST -/* Generate an error of the form ": ". If msg is NULL, -** pull the error from the context's db handle. -*/ -static void generateError(sqlite3_context *pContext, - const char *prefix, const char *msg){ - char buf[512]; - if( msg==NULL ) msg = sqlite3_errmsg(sqlite3_context_db_handle(pContext)); - sqlite3_snprintf(sizeof(buf), buf, "%s: %s", prefix, msg); - sqlite3_result_error(pContext, buf, -1); -} - -/* Helper function to collect the set of terms in the segment into -** pTerms. The segment is defined by the leaf nodes between -** iStartBlockid and iEndBlockid, inclusive, or by the contents of -** pRootData if iStartBlockid is 0 (in which case the entire segment -** fit in a leaf). -*/ -static int collectSegmentTerms(fulltext_vtab *v, sqlite3_stmt *s, - fts3Hash *pTerms){ - const sqlite_int64 iStartBlockid = sqlite3_column_int64(s, 0); - const sqlite_int64 iEndBlockid = sqlite3_column_int64(s, 1); - const char *pRootData = sqlite3_column_blob(s, 2); - const int nRootData = sqlite3_column_bytes(s, 2); - LeavesReader reader; - int rc = leavesReaderInit(v, 0, iStartBlockid, iEndBlockid, - pRootData, nRootData, &reader); - if( rc!=SQLITE_OK ) return rc; - - while( rc==SQLITE_OK && !leavesReaderAtEnd(&reader) ){ - const char *pTerm = leavesReaderTerm(&reader); - const int nTerm = leavesReaderTermBytes(&reader); - void *oldValue = sqlite3Fts3HashFind(pTerms, pTerm, nTerm); - void *newValue = (void *)((char *)oldValue+1); + if( p->bFts4 ){ + fts3UpdateDocTotals(&rc, p, aSzIns, aSzDel, nEntry); + } + sqlite3_free(aSz); - /* From the comment before sqlite3Fts3HashInsert in fts3_hash.c, - ** the data value passed is returned in case of malloc failure. - */ - if( newValue==sqlite3Fts3HashInsert(pTerms, pTerm, nTerm, newValue) ){ - rc = SQLITE_NOMEM; - }else{ - rc = leavesReaderStep(v, &reader); + if( pStmt ){ + int rc2 = sqlite3_finalize(pStmt); + if( rc==SQLITE_OK ){ + rc = rc2; + } } } - leavesReaderDestroy(&reader); return rc; } -/* Helper function to build the result string for dump_terms(). */ -static int generateTermsResult(sqlite3_context *pContext, fts3Hash *pTerms){ - int iTerm, nTerms, nResultBytes, iByte; - char *result; - TermData *pData; - fts3HashElem *e; - /* Iterate pTerms to generate an array of terms in pData for - ** sorting. - */ - nTerms = fts3HashCount(pTerms); - assert( nTerms>0 ); - pData = sqlite3_malloc(nTerms*sizeof(TermData)); - if( pData==NULL ) return SQLITE_NOMEM; +/* +** This function opens a cursor used to read the input data for an +** incremental merge operation. Specifically, it opens a cursor to scan +** the oldest nSeg segments (idx=0 through idx=(nSeg-1)) in absolute +** level iAbsLevel. +*/ +static int fts3IncrmergeCsr( + Fts3Table *p, /* FTS3 table handle */ + sqlite3_int64 iAbsLevel, /* Absolute level to open */ + int nSeg, /* Number of segments to merge */ + Fts3MultiSegReader *pCsr /* Cursor object to populate */ +){ + int rc; /* Return Code */ + sqlite3_stmt *pStmt = 0; /* Statement used to read %_segdir entry */ + int nByte; /* Bytes allocated at pCsr->apSegment[] */ - nResultBytes = 0; - for(iTerm = 0, e = fts3HashFirst(pTerms); e; iTerm++, e = fts3HashNext(e)){ - nResultBytes += fts3HashKeysize(e)+1; /* Term plus trailing space */ - assert( iTermapSegment = (Fts3SegReader **)sqlite3_malloc(nByte); - assert( nResultBytes>0 ); /* nTerms>0, nResultsBytes must be, too. */ - result = sqlite3_malloc(nResultBytes); - if( result==NULL ){ - sqlite3_free(pData); - return SQLITE_NOMEM; + if( pCsr->apSegment==0 ){ + rc = SQLITE_NOMEM; + }else{ + memset(pCsr->apSegment, 0, nByte); + rc = fts3SqlStmt(p, SQL_SELECT_LEVEL, &pStmt, 0); } - - if( nTerms>1 ) qsort(pData, nTerms, sizeof(*pData), termDataCmp); - - /* Read the terms in order to build the result. */ - iByte = 0; - for(iTerm=0; iTermnSegment==0 ); + for(i=0; rc==SQLITE_OK && sqlite3_step(pStmt)==SQLITE_ROW && iapSegment[i] + ); + pCsr->nSegment++; + } + rc2 = sqlite3_reset(pStmt); + if( rc==SQLITE_OK ) rc = rc2; } - assert( iByte==nResultBytes ); - assert( result[nResultBytes-1]==' ' ); - result[nResultBytes-1] = '\0'; - /* Passes away ownership of result. */ - sqlite3_result_text(pContext, result, nResultBytes-1, sqlite3_free); - sqlite3_free(pData); - return SQLITE_OK; + return rc; } -/* Implements dump_terms() for use in inspecting the fts3 index from -** tests. TEXT result containing the ordered list of terms joined by -** spaces. dump_terms(t, level, idx) dumps the terms for the segment -** specified by level, idx (in %_segdir), while dump_terms(t) dumps -** all terms in the index. In both cases t is the fts table's magic -** table-named column. +typedef struct IncrmergeWriter IncrmergeWriter; +typedef struct NodeWriter NodeWriter; +typedef struct Blob Blob; +typedef struct NodeReader NodeReader; + +/* +** An instance of the following structure is used as a dynamic buffer +** to build up nodes or other blobs of data in. +** +** The function blobGrowBuffer() is used to extend the allocation. */ -static void dumpTermsFunc( - sqlite3_context *pContext, - int argc, sqlite3_value **argv -){ - fulltext_cursor *pCursor; - if( argc!=3 && argc!=1 ){ - generateError(pContext, "dump_terms", "incorrect arguments"); - }else if( sqlite3_value_type(argv[0])!=SQLITE_BLOB || - sqlite3_value_bytes(argv[0])!=sizeof(pCursor) ){ - generateError(pContext, "dump_terms", "illegal first argument"); - }else{ - fulltext_vtab *v; - fts3Hash terms; - sqlite3_stmt *s = NULL; - int rc; +struct Blob { + char *a; /* Pointer to allocation */ + int n; /* Number of valid bytes of data in a[] */ + int nAlloc; /* Allocated size of a[] (nAlloc>=n) */ +}; - memcpy(&pCursor, sqlite3_value_blob(argv[0]), sizeof(pCursor)); - v = cursor_vtab(pCursor); +/* +** This structure is used to build up buffers containing segment b-tree +** nodes (blocks). +*/ +struct NodeWriter { + sqlite3_int64 iBlock; /* Current block id */ + Blob key; /* Last key written to the current block */ + Blob block; /* Current block image */ +}; - /* If passed only the cursor column, get all segments. Otherwise - ** get the segment described by the following two arguments. - */ - if( argc==1 ){ - rc = sql_get_statement(v, SEGDIR_SELECT_ALL_STMT, &s); - }else{ - rc = sql_get_statement(v, SEGDIR_SELECT_SEGMENT_STMT, &s); - if( rc==SQLITE_OK ){ - rc = sqlite3_bind_int(s, 1, sqlite3_value_int(argv[1])); - if( rc==SQLITE_OK ){ - rc = sqlite3_bind_int(s, 2, sqlite3_value_int(argv[2])); - } - } - } +/* +** An object of this type contains the state required to create or append +** to an appendable b-tree segment. +*/ +struct IncrmergeWriter { + int nLeafEst; /* Space allocated for leaf blocks */ + int nWork; /* Number of leaf pages flushed */ + sqlite3_int64 iAbsLevel; /* Absolute level of input segments */ + int iIdx; /* Index of *output* segment in iAbsLevel+1 */ + sqlite3_int64 iStart; /* Block number of first allocated block */ + sqlite3_int64 iEnd; /* Block number of last allocated block */ + NodeWriter aNodeWriter[FTS_MAX_APPENDABLE_HEIGHT]; +}; - if( rc!=SQLITE_OK ){ - generateError(pContext, "dump_terms", NULL); - return; - } +/* +** An object of the following type is used to read data from a single +** FTS segment node. See the following functions: +** +** nodeReaderInit() +** nodeReaderNext() +** nodeReaderRelease() +*/ +struct NodeReader { + const char *aNode; + int nNode; + int iOff; /* Current offset within aNode[] */ - /* Collect the terms for each segment. */ - sqlite3Fts3HashInit(&terms, FTS3_HASH_STRING, 1); - while( (rc = sqlite3_step(s))==SQLITE_ROW ){ - rc = collectSegmentTerms(v, s, &terms); - if( rc!=SQLITE_OK ) break; - } + /* Output variables. Containing the current node entry. */ + sqlite3_int64 iChild; /* Pointer to child node */ + Blob term; /* Current term */ + const char *aDoclist; /* Pointer to doclist */ + int nDoclist; /* Size of doclist in bytes */ +}; - if( rc!=SQLITE_DONE ){ - sqlite3_reset(s); - generateError(pContext, "dump_terms", NULL); +/* +** If *pRc is not SQLITE_OK when this function is called, it is a no-op. +** Otherwise, if the allocation at pBlob->a is not already at least nMin +** bytes in size, extend (realloc) it to be so. +** +** If an OOM error occurs, set *pRc to SQLITE_NOMEM and leave pBlob->a +** unmodified. Otherwise, if the allocation succeeds, update pBlob->nAlloc +** to reflect the new size of the pBlob->a[] buffer. +*/ +static void blobGrowBuffer(Blob *pBlob, int nMin, int *pRc){ + if( *pRc==SQLITE_OK && nMin>pBlob->nAlloc ){ + int nAlloc = nMin; + char *a = (char *)sqlite3_realloc(pBlob->a, nAlloc); + if( a ){ + pBlob->nAlloc = nAlloc; + pBlob->a = a; }else{ - const int nTerms = fts3HashCount(&terms); - if( nTerms>0 ){ - rc = generateTermsResult(pContext, &terms); - if( rc==SQLITE_NOMEM ){ - generateError(pContext, "dump_terms", "out of memory"); - }else{ - assert( rc==SQLITE_OK ); - } - }else if( argc==3 ){ - /* The specific segment asked for could not be found. */ - generateError(pContext, "dump_terms", "segment not found"); - }else{ - /* No segments found. */ - /* TODO(shess): It should be impossible to reach this. This - ** case can only happen for an empty table, in which case - ** SQLite has no rows to call this function on. - */ - sqlite3_result_null(pContext); - } + *pRc = SQLITE_NOMEM; } - sqlite3Fts3HashClear(&terms); } } -/* Expand the DL_DEFAULT doclist in pData into a text result in -** pContext. +/* +** Attempt to advance the node-reader object passed as the first argument to +** the next entry on the node. +** +** Return an error code if an error occurs (SQLITE_NOMEM is possible). +** Otherwise return SQLITE_OK. If there is no next entry on the node +** (e.g. because the current entry is the last) set NodeReader->aNode to +** NULL to indicate EOF. Otherwise, populate the NodeReader structure output +** variables for the new entry. */ -static void createDoclistResult(sqlite3_context *pContext, - const char *pData, int nData){ - DataBuffer dump; - DLReader dlReader; - - assert( pData!=NULL && nData>0 ); +static int nodeReaderNext(NodeReader *p){ + int bFirst = (p->term.n==0); /* True for first term on the node */ + int nPrefix = 0; /* Bytes to copy from previous term */ + int nSuffix = 0; /* Bytes to append to the prefix */ + int rc = SQLITE_OK; /* Return code */ - dataBufferInit(&dump, 0); - dlrInit(&dlReader, DL_DEFAULT, pData, nData); - for( ; !dlrAtEnd(&dlReader); dlrStep(&dlReader) ){ - char buf[256]; - PLReader plReader; + assert( p->aNode ); + if( p->iChild && bFirst==0 ) p->iChild++; + if( p->iOff>=p->nNode ){ + /* EOF */ + p->aNode = 0; + }else{ + if( bFirst==0 ){ + p->iOff += sqlite3Fts3GetVarint32(&p->aNode[p->iOff], &nPrefix); + } + p->iOff += sqlite3Fts3GetVarint32(&p->aNode[p->iOff], &nSuffix); - plrInit(&plReader, &dlReader); - if( DL_DEFAULT==DL_DOCIDS || plrAtEnd(&plReader) ){ - sqlite3_snprintf(sizeof(buf), buf, "[%lld] ", dlrDocid(&dlReader)); - dataBufferAppend(&dump, buf, strlen(buf)); - }else{ - int iColumn = plrColumn(&plReader); - - sqlite3_snprintf(sizeof(buf), buf, "[%lld %d[", - dlrDocid(&dlReader), iColumn); - dataBufferAppend(&dump, buf, strlen(buf)); - - for( ; !plrAtEnd(&plReader); plrStep(&plReader) ){ - if( plrColumn(&plReader)!=iColumn ){ - iColumn = plrColumn(&plReader); - sqlite3_snprintf(sizeof(buf), buf, "] %d[", iColumn); - assert( dump.nData>0 ); - dump.nData--; /* Overwrite trailing space. */ - assert( dump.pData[dump.nData]==' '); - dataBufferAppend(&dump, buf, strlen(buf)); - } - if( DL_DEFAULT==DL_POSITIONS_OFFSETS ){ - sqlite3_snprintf(sizeof(buf), buf, "%d,%d,%d ", - plrPosition(&plReader), - plrStartOffset(&plReader), plrEndOffset(&plReader)); - }else if( DL_DEFAULT==DL_POSITIONS ){ - sqlite3_snprintf(sizeof(buf), buf, "%d ", plrPosition(&plReader)); - }else{ - assert( NULL=="Unhandled DL_DEFAULT value"); - } - dataBufferAppend(&dump, buf, strlen(buf)); + blobGrowBuffer(&p->term, nPrefix+nSuffix, &rc); + if( rc==SQLITE_OK ){ + memcpy(&p->term.a[nPrefix], &p->aNode[p->iOff], nSuffix); + p->term.n = nPrefix+nSuffix; + p->iOff += nSuffix; + if( p->iChild==0 ){ + p->iOff += sqlite3Fts3GetVarint32(&p->aNode[p->iOff], &p->nDoclist); + p->aDoclist = &p->aNode[p->iOff]; + p->iOff += p->nDoclist; } - plrDestroy(&plReader); - - assert( dump.nData>0 ); - dump.nData--; /* Overwrite trailing space. */ - assert( dump.pData[dump.nData]==' '); - dataBufferAppend(&dump, "]] ", 3); } } - dlrDestroy(&dlReader); - assert( dump.nData>0 ); - dump.nData--; /* Overwrite trailing space. */ - assert( dump.pData[dump.nData]==' '); - dump.pData[dump.nData] = '\0'; - assert( dump.nData>0 ); + assert( p->iOff<=p->nNode ); + + return rc; +} - /* Passes ownership of dump's buffer to pContext. */ - sqlite3_result_text(pContext, dump.pData, dump.nData, sqlite3_free); - dump.pData = NULL; - dump.nData = dump.nCapacity = 0; +/* +** Release all dynamic resources held by node-reader object *p. +*/ +static void nodeReaderRelease(NodeReader *p){ + sqlite3_free(p->term.a); } -/* Implements dump_doclist() for use in inspecting the fts3 index from -** tests. TEXT result containing a string representation of the -** doclist for the indicated term. dump_doclist(t, term, level, idx) -** dumps the doclist for term from the segment specified by level, idx -** (in %_segdir), while dump_doclist(t, term) dumps the logical -** doclist for the term across all segments. The per-segment doclist -** can contain deletions, while the full-index doclist will not -** (deletions are omitted). -** -** Result formats differ with the setting of DL_DEFAULTS. Examples: -** -** DL_DOCIDS: [1] [3] [7] -** DL_POSITIONS: [1 0[0 4] 1[17]] [3 1[5]] -** DL_POSITIONS_OFFSETS: [1 0[0,0,3 4,23,26] 1[17,102,105]] [3 1[5,20,23]] +/* +** Initialize a node-reader object to read the node in buffer aNode/nNode. ** -** In each case the number after the outer '[' is the docid. In the -** latter two cases, the number before the inner '[' is the column -** associated with the values within. For DL_POSITIONS the numbers -** within are the positions, for DL_POSITIONS_OFFSETS they are the -** position, the start offset, and the end offset. +** If successful, SQLITE_OK is returned and the NodeReader object set to +** point to the first entry on the node (if any). Otherwise, an SQLite +** error code is returned. */ -static void dumpDoclistFunc( - sqlite3_context *pContext, - int argc, sqlite3_value **argv -){ - fulltext_cursor *pCursor; - if( argc!=2 && argc!=4 ){ - generateError(pContext, "dump_doclist", "incorrect arguments"); - }else if( sqlite3_value_type(argv[0])!=SQLITE_BLOB || - sqlite3_value_bytes(argv[0])!=sizeof(pCursor) ){ - generateError(pContext, "dump_doclist", "illegal first argument"); - }else if( sqlite3_value_text(argv[1])==NULL || - sqlite3_value_text(argv[1])[0]=='\0' ){ - generateError(pContext, "dump_doclist", "empty second argument"); - }else{ - const char *pTerm = (const char *)sqlite3_value_text(argv[1]); - const int nTerm = strlen(pTerm); - fulltext_vtab *v; - int rc; - DataBuffer doclist; +static int nodeReaderInit(NodeReader *p, const char *aNode, int nNode){ + memset(p, 0, sizeof(NodeReader)); + p->aNode = aNode; + p->nNode = nNode; - memcpy(&pCursor, sqlite3_value_blob(argv[0]), sizeof(pCursor)); - v = cursor_vtab(pCursor); + /* Figure out if this is a leaf or an internal node. */ + if( p->aNode[0] ){ + /* An internal node. */ + p->iOff = 1 + sqlite3Fts3GetVarint(&p->aNode[1], &p->iChild); + }else{ + p->iOff = 1; + } - dataBufferInit(&doclist, 0); + return nodeReaderNext(p); +} - /* termSelect() yields the same logical doclist that queries are - ** run against. - */ - if( argc==2 ){ - rc = termSelect(v, v->nColumn, pTerm, nTerm, 0, DL_DEFAULT, &doclist); - }else{ - sqlite3_stmt *s = NULL; +/* +** This function is called while writing an FTS segment each time a leaf o +** node is finished and written to disk. The key (zTerm/nTerm) is guaranteed +** to be greater than the largest key on the node just written, but smaller +** than or equal to the first key that will be written to the next leaf +** node. +** +** The block id of the leaf node just written to disk may be found in +** (pWriter->aNodeWriter[0].iBlock) when this function is called. +*/ +static int fts3IncrmergePush( + Fts3Table *p, /* Fts3 table handle */ + IncrmergeWriter *pWriter, /* Writer object */ + const char *zTerm, /* Term to write to internal node */ + int nTerm /* Bytes at zTerm */ +){ + sqlite3_int64 iPtr = pWriter->aNodeWriter[0].iBlock; + int iLayer; - /* Get our specific segment's information. */ - rc = sql_get_statement(v, SEGDIR_SELECT_SEGMENT_STMT, &s); - if( rc==SQLITE_OK ){ - rc = sqlite3_bind_int(s, 1, sqlite3_value_int(argv[2])); + assert( nTerm>0 ); + for(iLayer=1; ALWAYS(iLayeraNodeWriter[iLayer]; + int rc = SQLITE_OK; + int nPrefix; + int nSuffix; + int nSpace; + + /* Figure out how much space the key will consume if it is written to + ** the current node of layer iLayer. Due to the prefix compression, + ** the space required changes depending on which node the key is to + ** be added to. */ + nPrefix = fts3PrefixCompress(pNode->key.a, pNode->key.n, zTerm, nTerm); + nSuffix = nTerm - nPrefix; + nSpace = sqlite3Fts3VarintLen(nPrefix); + nSpace += sqlite3Fts3VarintLen(nSuffix) + nSuffix; + + if( pNode->key.n==0 || (pNode->block.n + nSpace)<=p->nNodeSize ){ + /* If the current node of layer iLayer contains zero keys, or if adding + ** the key to it will not cause it to grow to larger than nNodeSize + ** bytes in size, write the key here. */ + + Blob *pBlk = &pNode->block; + if( pBlk->n==0 ){ + blobGrowBuffer(pBlk, p->nNodeSize, &rc); if( rc==SQLITE_OK ){ - rc = sqlite3_bind_int(s, 2, sqlite3_value_int(argv[3])); + pBlk->a[0] = (char)iLayer; + pBlk->n = 1 + sqlite3Fts3PutVarint(&pBlk->a[1], iPtr); } } + blobGrowBuffer(pBlk, pBlk->n + nSpace, &rc); + blobGrowBuffer(&pNode->key, nTerm, &rc); if( rc==SQLITE_OK ){ - rc = sqlite3_step(s); - - if( rc==SQLITE_DONE ){ - dataBufferDestroy(&doclist); - generateError(pContext, "dump_doclist", "segment not found"); - return; + if( pNode->key.n ){ + pBlk->n += sqlite3Fts3PutVarint(&pBlk->a[pBlk->n], nPrefix); } + pBlk->n += sqlite3Fts3PutVarint(&pBlk->a[pBlk->n], nSuffix); + memcpy(&pBlk->a[pBlk->n], &zTerm[nPrefix], nSuffix); + pBlk->n += nSuffix; - /* Found a segment, load it into doclist. */ - if( rc==SQLITE_ROW ){ - const sqlite_int64 iLeavesEnd = sqlite3_column_int64(s, 1); - const char *pData = sqlite3_column_blob(s, 2); - const int nData = sqlite3_column_bytes(s, 2); - - /* loadSegment() is used by termSelect() to load each - ** segment's data. - */ - rc = loadSegment(v, pData, nData, iLeavesEnd, pTerm, nTerm, 0, - &doclist); - if( rc==SQLITE_OK ){ - rc = sqlite3_step(s); - - /* Should not have more than one matching segment. */ - if( rc!=SQLITE_DONE ){ - sqlite3_reset(s); - dataBufferDestroy(&doclist); - generateError(pContext, "dump_doclist", "invalid segdir"); - return; - } - rc = SQLITE_OK; - } - } + memcpy(pNode->key.a, zTerm, nTerm); + pNode->key.n = nTerm; } + }else{ + /* Otherwise, flush the the current node of layer iLayer to disk. + ** Then allocate a new, empty sibling node. The key will be written + ** into the parent of this node. */ + rc = fts3WriteSegment(p, pNode->iBlock, pNode->block.a, pNode->block.n); - sqlite3_reset(s); - } + assert( pNode->block.nAlloc>=p->nNodeSize ); + pNode->block.a[0] = (char)iLayer; + pNode->block.n = 1 + sqlite3Fts3PutVarint(&pNode->block.a[1], iPtr+1); - if( rc==SQLITE_OK ){ - if( doclist.nData>0 ){ - createDoclistResult(pContext, doclist.pData, doclist.nData); - }else{ - /* TODO(shess): This can happen if the term is not present, or - ** if all instances of the term have been deleted and this is - ** an all-index dump. It may be interesting to distinguish - ** these cases. - */ - sqlite3_result_text(pContext, "", 0, SQLITE_STATIC); - } - }else if( rc==SQLITE_NOMEM ){ - /* Handle out-of-memory cases specially because if they are - ** generated in fts3 code they may not be reflected in the db - ** handle. - */ - /* TODO(shess): Handle this more comprehensively. - ** sqlite3ErrStr() has what I need, but is internal. - */ - generateError(pContext, "dump_doclist", "out of memory"); - }else{ - generateError(pContext, "dump_doclist", NULL); + iNextPtr = pNode->iBlock; + pNode->iBlock++; + pNode->key.n = 0; } - dataBufferDestroy(&doclist); + if( rc!=SQLITE_OK || iNextPtr==0 ) return rc; + iPtr = iNextPtr; } -} -#endif -/* -** This routine implements the xFindFunction method for the FTS3 -** virtual table. -*/ -static int fulltextFindFunction( - sqlite3_vtab *pVtab, - int nArg, - const char *zName, - void (**pxFunc)(sqlite3_context*,int,sqlite3_value**), - void **ppArg -){ - if( strcmp(zName,"snippet")==0 ){ - *pxFunc = snippetFunc; - return 1; - }else if( strcmp(zName,"offsets")==0 ){ - *pxFunc = snippetOffsetsFunc; - return 1; - }else if( strcmp(zName,"optimize")==0 ){ - *pxFunc = optimizeFunc; - return 1; -#ifdef SQLITE_TEST - /* NOTE(shess): These functions are present only for testing - ** purposes. No particular effort is made to optimize their - ** execution or how they build their results. - */ - }else if( strcmp(zName,"dump_terms")==0 ){ - /* fprintf(stderr, "Found dump_terms\n"); */ - *pxFunc = dumpTermsFunc; - return 1; - }else if( strcmp(zName,"dump_doclist")==0 ){ - /* fprintf(stderr, "Found dump_doclist\n"); */ - *pxFunc = dumpDoclistFunc; - return 1; -#endif - } + assert( 0 ); return 0; } /* -** Rename an fts3 table. +** Append a term and (optionally) doclist to the FTS segment node currently +** stored in blob *pNode. The node need not contain any terms, but the +** header must be written before this function is called. +** +** A node header is a single 0x00 byte for a leaf node, or a height varint +** followed by the left-hand-child varint for an internal node. +** +** The term to be appended is passed via arguments zTerm/nTerm. For a +** leaf node, the doclist is passed as aDoclist/nDoclist. For an internal +** node, both aDoclist and nDoclist must be passed 0. +** +** If the size of the value in blob pPrev is zero, then this is the first +** term written to the node. Otherwise, pPrev contains a copy of the +** previous term. Before this function returns, it is updated to contain a +** copy of zTerm/nTerm. +** +** It is assumed that the buffer associated with pNode is already large +** enough to accommodate the new entry. The buffer associated with pPrev +** is extended by this function if requrired. +** +** If an error (i.e. OOM condition) occurs, an SQLite error code is +** returned. Otherwise, SQLITE_OK. */ -static int fulltextRename( - sqlite3_vtab *pVtab, - const char *zName +static int fts3AppendToNode( + Blob *pNode, /* Current node image to append to */ + Blob *pPrev, /* Buffer containing previous term written */ + const char *zTerm, /* New term to write */ + int nTerm, /* Size of zTerm in bytes */ + const char *aDoclist, /* Doclist (or NULL) to write */ + int nDoclist /* Size of aDoclist in bytes */ ){ - fulltext_vtab *p = (fulltext_vtab *)pVtab; - int rc = SQLITE_NOMEM; - char *zSql = sqlite3_mprintf( - "ALTER TABLE %Q.'%q_content' RENAME TO '%q_content';" - "ALTER TABLE %Q.'%q_segments' RENAME TO '%q_segments';" - "ALTER TABLE %Q.'%q_segdir' RENAME TO '%q_segdir';" - , p->zDb, p->zName, zName - , p->zDb, p->zName, zName - , p->zDb, p->zName, zName - ); - if( zSql ){ - rc = sqlite3_exec(p->db, zSql, 0, 0, 0); - sqlite3_free(zSql); + int rc = SQLITE_OK; /* Return code */ + int bFirst = (pPrev->n==0); /* True if this is the first term written */ + int nPrefix; /* Size of term prefix in bytes */ + int nSuffix; /* Size of term suffix in bytes */ + + /* Node must have already been started. There must be a doclist for a + ** leaf node, and there must not be a doclist for an internal node. */ + assert( pNode->n>0 ); + assert( (pNode->a[0]=='\0')==(aDoclist!=0) ); + + blobGrowBuffer(pPrev, nTerm, &rc); + if( rc!=SQLITE_OK ) return rc; + + nPrefix = fts3PrefixCompress(pPrev->a, pPrev->n, zTerm, nTerm); + nSuffix = nTerm - nPrefix; + memcpy(pPrev->a, zTerm, nTerm); + pPrev->n = nTerm; + + if( bFirst==0 ){ + pNode->n += sqlite3Fts3PutVarint(&pNode->a[pNode->n], nPrefix); } - return rc; -} + pNode->n += sqlite3Fts3PutVarint(&pNode->a[pNode->n], nSuffix); + memcpy(&pNode->a[pNode->n], &zTerm[nPrefix], nSuffix); + pNode->n += nSuffix; -static const sqlite3_module fts3Module = { - /* iVersion */ 0, - /* xCreate */ fulltextCreate, - /* xConnect */ fulltextConnect, - /* xBestIndex */ fulltextBestIndex, - /* xDisconnect */ fulltextDisconnect, - /* xDestroy */ fulltextDestroy, - /* xOpen */ fulltextOpen, - /* xClose */ fulltextClose, - /* xFilter */ fulltextFilter, - /* xNext */ fulltextNext, - /* xEof */ fulltextEof, - /* xColumn */ fulltextColumn, - /* xRowid */ fulltextRowid, - /* xUpdate */ fulltextUpdate, - /* xBegin */ fulltextBegin, - /* xSync */ fulltextSync, - /* xCommit */ fulltextCommit, - /* xRollback */ fulltextRollback, - /* xFindFunction */ fulltextFindFunction, - /* xRename */ fulltextRename, -}; + if( aDoclist ){ + pNode->n += sqlite3Fts3PutVarint(&pNode->a[pNode->n], nDoclist); + memcpy(&pNode->a[pNode->n], aDoclist, nDoclist); + pNode->n += nDoclist; + } -static void hashDestroy(void *p){ - fts3Hash *pHash = (fts3Hash *)p; - sqlite3Fts3HashClear(pHash); - sqlite3_free(pHash); + assert( pNode->n<=pNode->nAlloc ); + + return SQLITE_OK; } /* -** The fts3 built-in tokenizers - "simple" and "porter" - are implemented -** in files fts3_tokenizer1.c and fts3_porter.c respectively. The following -** two forward declarations are for functions declared in these files -** used to retrieve the respective implementations. +** Append the current term and doclist pointed to by cursor pCsr to the +** appendable b-tree segment opened for writing by pWriter. ** -** Calling sqlite3Fts3SimpleTokenizerModule() sets the value pointed -** to by the argument to point a the "simple" tokenizer implementation. -** Function ...PorterTokenizerModule() sets *pModule to point to the -** porter tokenizer/stemmer implementation. -*/ -SQLITE_PRIVATE void sqlite3Fts3SimpleTokenizerModule(sqlite3_tokenizer_module const**ppModule); -SQLITE_PRIVATE void sqlite3Fts3PorterTokenizerModule(sqlite3_tokenizer_module const**ppModule); -SQLITE_PRIVATE void sqlite3Fts3IcuTokenizerModule(sqlite3_tokenizer_module const**ppModule); - -SQLITE_PRIVATE int sqlite3Fts3InitHashTable(sqlite3 *, fts3Hash *, const char *); - -/* -** Initialise the fts3 extension. If this extension is built as part -** of the sqlite library, then this function is called directly by -** SQLite. If fts3 is built as a dynamically loadable extension, this -** function is called by the sqlite3_extension_init() entry point. +** Return SQLITE_OK if successful, or an SQLite error code otherwise. */ -SQLITE_PRIVATE int sqlite3Fts3Init(sqlite3 *db){ - int rc = SQLITE_OK; - fts3Hash *pHash = 0; - const sqlite3_tokenizer_module *pSimple = 0; - const sqlite3_tokenizer_module *pPorter = 0; - const sqlite3_tokenizer_module *pIcu = 0; +static int fts3IncrmergeAppend( + Fts3Table *p, /* Fts3 table handle */ + IncrmergeWriter *pWriter, /* Writer object */ + Fts3MultiSegReader *pCsr /* Cursor containing term and doclist */ +){ + const char *zTerm = pCsr->zTerm; + int nTerm = pCsr->nTerm; + const char *aDoclist = pCsr->aDoclist; + int nDoclist = pCsr->nDoclist; + int rc = SQLITE_OK; /* Return code */ + int nSpace; /* Total space in bytes required on leaf */ + int nPrefix; /* Size of prefix shared with previous term */ + int nSuffix; /* Size of suffix (nTerm - nPrefix) */ + NodeWriter *pLeaf; /* Object used to write leaf nodes */ + + pLeaf = &pWriter->aNodeWriter[0]; + nPrefix = fts3PrefixCompress(pLeaf->key.a, pLeaf->key.n, zTerm, nTerm); + nSuffix = nTerm - nPrefix; + + nSpace = sqlite3Fts3VarintLen(nPrefix); + nSpace += sqlite3Fts3VarintLen(nSuffix) + nSuffix; + nSpace += sqlite3Fts3VarintLen(nDoclist) + nDoclist; + + /* If the current block is not empty, and if adding this term/doclist + ** to the current block would make it larger than Fts3Table.nNodeSize + ** bytes, write this block out to the database. */ + if( pLeaf->block.n>0 && (pLeaf->block.n + nSpace)>p->nNodeSize ){ + rc = fts3WriteSegment(p, pLeaf->iBlock, pLeaf->block.a, pLeaf->block.n); + pWriter->nWork++; + + /* Add the current term to the parent node. The term added to the + ** parent must: + ** + ** a) be greater than the largest term on the leaf node just written + ** to the database (still available in pLeaf->key), and + ** + ** b) be less than or equal to the term about to be added to the new + ** leaf node (zTerm/nTerm). + ** + ** In other words, it must be the prefix of zTerm 1 byte longer than + ** the common prefix (if any) of zTerm and pWriter->zTerm. + */ + if( rc==SQLITE_OK ){ + rc = fts3IncrmergePush(p, pWriter, zTerm, nPrefix+1); + } - sqlite3Fts3SimpleTokenizerModule(&pSimple); - sqlite3Fts3PorterTokenizerModule(&pPorter); -#ifdef SQLITE_ENABLE_ICU - sqlite3Fts3IcuTokenizerModule(&pIcu); -#endif + /* Advance to the next output block */ + pLeaf->iBlock++; + pLeaf->key.n = 0; + pLeaf->block.n = 0; - /* Allocate and initialise the hash-table used to store tokenizers. */ - pHash = sqlite3_malloc(sizeof(fts3Hash)); - if( !pHash ){ - rc = SQLITE_NOMEM; - }else{ - sqlite3Fts3HashInit(pHash, FTS3_HASH_STRING, 1); + nSuffix = nTerm; + nSpace = 1; + nSpace += sqlite3Fts3VarintLen(nSuffix) + nSuffix; + nSpace += sqlite3Fts3VarintLen(nDoclist) + nDoclist; } - /* Load the built-in tokenizers into the hash table */ + blobGrowBuffer(&pLeaf->block, pLeaf->block.n + nSpace, &rc); + if( rc==SQLITE_OK ){ - if( sqlite3Fts3HashInsert(pHash, "simple", 7, (void *)pSimple) - || sqlite3Fts3HashInsert(pHash, "porter", 7, (void *)pPorter) - || (pIcu && sqlite3Fts3HashInsert(pHash, "icu", 4, (void *)pIcu)) - ){ - rc = SQLITE_NOMEM; + if( pLeaf->block.n==0 ){ + pLeaf->block.n = 1; + pLeaf->block.a[0] = '\0'; } + rc = fts3AppendToNode( + &pLeaf->block, &pLeaf->key, zTerm, nTerm, aDoclist, nDoclist + ); } -#ifdef SQLITE_TEST - sqlite3Fts3ExprInitTestInterface(db); -#endif + return rc; +} - /* Create the virtual table wrapper around the hash-table and overload - ** the two scalar functions. If this is successful, register the - ** module with sqlite. +/* +** This function is called to release all dynamic resources held by the +** merge-writer object pWriter, and if no error has occurred, to flush +** all outstanding node buffers held by pWriter to disk. +** +** If *pRc is not SQLITE_OK when this function is called, then no attempt +** is made to write any data to disk. Instead, this function serves only +** to release outstanding resources. +** +** Otherwise, if *pRc is initially SQLITE_OK and an error occurs while +** flushing buffers to disk, *pRc is set to an SQLite error code before +** returning. +*/ +static void fts3IncrmergeRelease( + Fts3Table *p, /* FTS3 table handle */ + IncrmergeWriter *pWriter, /* Merge-writer object */ + int *pRc /* IN/OUT: Error code */ +){ + int i; /* Used to iterate through non-root layers */ + int iRoot; /* Index of root in pWriter->aNodeWriter */ + NodeWriter *pRoot; /* NodeWriter for root node */ + int rc = *pRc; /* Error code */ + + /* Set iRoot to the index in pWriter->aNodeWriter[] of the output segment + ** root node. If the segment fits entirely on a single leaf node, iRoot + ** will be set to 0. If the root node is the parent of the leaves, iRoot + ** will be 1. And so on. */ + for(iRoot=FTS_MAX_APPENDABLE_HEIGHT-1; iRoot>=0; iRoot--){ + NodeWriter *pNode = &pWriter->aNodeWriter[iRoot]; + if( pNode->block.n>0 ) break; + assert( *pRc || pNode->block.nAlloc==0 ); + assert( *pRc || pNode->key.nAlloc==0 ); + sqlite3_free(pNode->block.a); + sqlite3_free(pNode->key.a); + } + + /* Empty output segment. This is a no-op. */ + if( iRoot<0 ) return; + + /* The entire output segment fits on a single node. Normally, this means + ** the node would be stored as a blob in the "root" column of the %_segdir + ** table. However, this is not permitted in this case. The problem is that + ** space has already been reserved in the %_segments table, and so the + ** start_block and end_block fields of the %_segdir table must be populated. + ** And, by design or by accident, released versions of FTS cannot handle + ** segments that fit entirely on the root node with start_block!=0. + ** + ** Instead, create a synthetic root node that contains nothing but a + ** pointer to the single content node. So that the segment consists of a + ** single leaf and a single interior (root) node. + ** + ** Todo: Better might be to defer allocating space in the %_segments + ** table until we are sure it is needed. */ - if( SQLITE_OK==rc - && SQLITE_OK==(rc = sqlite3Fts3InitHashTable(db, pHash, "fts3_tokenizer")) - && SQLITE_OK==(rc = sqlite3_overload_function(db, "snippet", -1)) - && SQLITE_OK==(rc = sqlite3_overload_function(db, "offsets", -1)) - && SQLITE_OK==(rc = sqlite3_overload_function(db, "optimize", -1)) -#ifdef SQLITE_TEST - && SQLITE_OK==(rc = sqlite3_overload_function(db, "dump_terms", -1)) - && SQLITE_OK==(rc = sqlite3_overload_function(db, "dump_doclist", -1)) -#endif - ){ - return sqlite3_create_module_v2( - db, "fts3", &fts3Module, (void *)pHash, hashDestroy - ); + if( iRoot==0 ){ + Blob *pBlock = &pWriter->aNodeWriter[1].block; + blobGrowBuffer(pBlock, 1 + FTS3_VARINT_MAX, &rc); + if( rc==SQLITE_OK ){ + pBlock->a[0] = 0x01; + pBlock->n = 1 + sqlite3Fts3PutVarint( + &pBlock->a[1], pWriter->aNodeWriter[0].iBlock + ); + } + iRoot = 1; } + pRoot = &pWriter->aNodeWriter[iRoot]; - /* An error has occurred. Delete the hash table and return the error code. */ - assert( rc!=SQLITE_OK ); - if( pHash ){ - sqlite3Fts3HashClear(pHash); - sqlite3_free(pHash); + /* Flush all currently outstanding nodes to disk. */ + for(i=0; iaNodeWriter[i]; + if( pNode->block.n>0 && rc==SQLITE_OK ){ + rc = fts3WriteSegment(p, pNode->iBlock, pNode->block.a, pNode->block.n); + } + sqlite3_free(pNode->block.a); + sqlite3_free(pNode->key.a); } - return rc; + + /* Write the %_segdir record. */ + if( rc==SQLITE_OK ){ + rc = fts3WriteSegdir(p, + pWriter->iAbsLevel+1, /* level */ + pWriter->iIdx, /* idx */ + pWriter->iStart, /* start_block */ + pWriter->aNodeWriter[0].iBlock, /* leaves_end_block */ + pWriter->iEnd, /* end_block */ + pRoot->block.a, pRoot->block.n /* root */ + ); + } + sqlite3_free(pRoot->block.a); + sqlite3_free(pRoot->key.a); + + *pRc = rc; } -#if !SQLITE_CORE -SQLITE_API int sqlite3_extension_init( - sqlite3 *db, - char **pzErrMsg, - const sqlite3_api_routines *pApi +/* +** Compare the term in buffer zLhs (size in bytes nLhs) with that in +** zRhs (size in bytes nRhs) using memcmp. If one term is a prefix of +** the other, it is considered to be smaller than the other. +** +** Return -ve if zLhs is smaller than zRhs, 0 if it is equal, or +ve +** if it is greater. +*/ +static int fts3TermCmp( + const char *zLhs, int nLhs, /* LHS of comparison */ + const char *zRhs, int nRhs /* RHS of comparison */ ){ - SQLITE_EXTENSION_INIT2(pApi) - return sqlite3Fts3Init(db); + int nCmp = MIN(nLhs, nRhs); + int res; + + res = memcmp(zLhs, zRhs, nCmp); + if( res==0 ) res = nLhs - nRhs; + + return res; } -#endif -#endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) */ -/************** End of fts3.c ************************************************/ -/************** Begin file fts3_expr.c ***************************************/ /* -** 2008 Nov 28 -** -** The author disclaims copyright to this source code. In place of -** a legal notice, here is a blessing: -** -** May you do good and not evil. -** May you find forgiveness for yourself and forgive others. -** May you share freely, never taking more than you give. +** Query to see if the entry in the %_segments table with blockid iEnd is +** NULL. If no error occurs and the entry is NULL, set *pbRes 1 before +** returning. Otherwise, set *pbRes to 0. ** -****************************************************************************** +** Or, if an error occurs while querying the database, return an SQLite +** error code. The final value of *pbRes is undefined in this case. ** -** This module contains code that implements a parser for fts3 query strings -** (the right-hand argument to the MATCH operator). Because the supported -** syntax is relatively simple, the whole tokenizer/parser system is -** hand-coded. The public interface to this module is declared in source -** code file "fts3_expr.h". +** This is used to test if a segment is an "appendable" segment. If it +** is, then a NULL entry has been inserted into the %_segments table +** with blockid %_segdir.end_block. */ -#if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) +static int fts3IsAppendable(Fts3Table *p, sqlite3_int64 iEnd, int *pbRes){ + int bRes = 0; /* Result to set *pbRes to */ + sqlite3_stmt *pCheck = 0; /* Statement to query database with */ + int rc; /* Return code */ + + rc = fts3SqlStmt(p, SQL_SEGMENT_IS_APPENDABLE, &pCheck, 0); + if( rc==SQLITE_OK ){ + sqlite3_bind_int64(pCheck, 1, iEnd); + if( SQLITE_ROW==sqlite3_step(pCheck) ) bRes = 1; + rc = sqlite3_reset(pCheck); + } + + *pbRes = bRes; + return rc; +} /* -** By default, this module parses the legacy syntax that has been -** traditionally used by fts3. Or, if SQLITE_ENABLE_FTS3_PARENTHESIS -** is defined, then it uses the new syntax. The differences between -** the new and the old syntaxes are: -** -** a) The new syntax supports parenthesis. The old does not. -** -** b) The new syntax supports the AND and NOT operators. The old does not. +** This function is called when initializing an incremental-merge operation. +** It checks if the existing segment with index value iIdx at absolute level +** (iAbsLevel+1) can be appended to by the incremental merge. If it can, the +** merge-writer object *pWriter is initialized to write to it. ** -** c) The old syntax supports the "-" token qualifier. This is not -** supported by the new syntax (it is replaced by the NOT operator). +** An existing segment can be appended to by an incremental merge if: ** -** d) When using the old syntax, the OR operator has a greater precedence -** than an implicit AND. When using the new, both implicity and explicit -** AND operators have a higher precedence than OR. +** * It was initially created as an appendable segment (with all required +** space pre-allocated), and ** -** If compiled with SQLITE_TEST defined, then this module exports the -** symbol "int sqlite3_fts3_enable_parentheses". Setting this variable -** to zero causes the module to use the old syntax. If it is set to -** non-zero the new syntax is activated. This is so both syntaxes can -** be tested using a single build of testfixture. +** * The first key read from the input (arguments zKey and nKey) is +** greater than the largest key currently stored in the potential +** output segment. */ -#ifdef SQLITE_TEST -SQLITE_API int sqlite3_fts3_enable_parentheses = 0; -#else -# ifdef SQLITE_ENABLE_FTS3_PARENTHESIS -# define sqlite3_fts3_enable_parentheses 1 -# else -# define sqlite3_fts3_enable_parentheses 0 -# endif -#endif +static int fts3IncrmergeLoad( + Fts3Table *p, /* Fts3 table handle */ + sqlite3_int64 iAbsLevel, /* Absolute level of input segments */ + int iIdx, /* Index of candidate output segment */ + const char *zKey, /* First key to write */ + int nKey, /* Number of bytes in nKey */ + IncrmergeWriter *pWriter /* Populate this object */ +){ + int rc; /* Return code */ + sqlite3_stmt *pSelect = 0; /* SELECT to read %_segdir entry */ -/* -** Default span for NEAR operators. -*/ -#define SQLITE_FTS3_DEFAULT_NEAR_PARAM 10 + rc = fts3SqlStmt(p, SQL_SELECT_SEGDIR, &pSelect, 0); + if( rc==SQLITE_OK ){ + sqlite3_int64 iStart = 0; /* Value of %_segdir.start_block */ + sqlite3_int64 iLeafEnd = 0; /* Value of %_segdir.leaves_end_block */ + sqlite3_int64 iEnd = 0; /* Value of %_segdir.end_block */ + const char *aRoot = 0; /* Pointer to %_segdir.root buffer */ + int nRoot = 0; /* Size of aRoot[] in bytes */ + int rc2; /* Return code from sqlite3_reset() */ + int bAppendable = 0; /* Set to true if segment is appendable */ + + /* Read the %_segdir entry for index iIdx absolute level (iAbsLevel+1) */ + sqlite3_bind_int64(pSelect, 1, iAbsLevel+1); + sqlite3_bind_int(pSelect, 2, iIdx); + if( sqlite3_step(pSelect)==SQLITE_ROW ){ + iStart = sqlite3_column_int64(pSelect, 1); + iLeafEnd = sqlite3_column_int64(pSelect, 2); + iEnd = sqlite3_column_int64(pSelect, 3); + nRoot = sqlite3_column_bytes(pSelect, 4); + aRoot = sqlite3_column_blob(pSelect, 4); + }else{ + return sqlite3_reset(pSelect); + } + /* Check for the zero-length marker in the %_segments table */ + rc = fts3IsAppendable(p, iEnd, &bAppendable); -typedef struct ParseContext ParseContext; -struct ParseContext { - sqlite3_tokenizer *pTokenizer; /* Tokenizer module */ - const char **azCol; /* Array of column names for fts3 table */ - int nCol; /* Number of entries in azCol[] */ - int iDefaultCol; /* Default column to query */ - sqlite3_context *pCtx; /* Write error message here */ - int nNest; /* Number of nested brackets */ -}; + /* Check that zKey/nKey is larger than the largest key the candidate */ + if( rc==SQLITE_OK && bAppendable ){ + char *aLeaf = 0; + int nLeaf = 0; -/* -** This function is equivalent to the standard isspace() function. -** -** The standard isspace() can be awkward to use safely, because although it -** is defined to accept an argument of type int, its behaviour when passed -** an integer that falls outside of the range of the unsigned char type -** is undefined (and sometimes, "undefined" means segfault). This wrapper -** is defined to accept an argument of type char, and always returns 0 for -** any values that fall outside of the range of the unsigned char type (i.e. -** negative values). -*/ -static int fts3isspace(char c){ - return (c&0x80)==0 ? isspace(c) : 0; + rc = sqlite3Fts3ReadBlock(p, iLeafEnd, &aLeaf, &nLeaf, 0); + if( rc==SQLITE_OK ){ + NodeReader reader; + for(rc = nodeReaderInit(&reader, aLeaf, nLeaf); + rc==SQLITE_OK && reader.aNode; + rc = nodeReaderNext(&reader) + ){ + assert( reader.aNode ); + } + if( fts3TermCmp(zKey, nKey, reader.term.a, reader.term.n)<=0 ){ + bAppendable = 0; + } + nodeReaderRelease(&reader); + } + sqlite3_free(aLeaf); + } + + if( rc==SQLITE_OK && bAppendable ){ + /* It is possible to append to this segment. Set up the IncrmergeWriter + ** object to do so. */ + int i; + int nHeight = (int)aRoot[0]; + NodeWriter *pNode; + + pWriter->nLeafEst = (int)((iEnd - iStart) + 1)/FTS_MAX_APPENDABLE_HEIGHT; + pWriter->iStart = iStart; + pWriter->iEnd = iEnd; + pWriter->iAbsLevel = iAbsLevel; + pWriter->iIdx = iIdx; + + for(i=nHeight+1; iaNodeWriter[i].iBlock = pWriter->iStart + i*pWriter->nLeafEst; + } + + pNode = &pWriter->aNodeWriter[nHeight]; + pNode->iBlock = pWriter->iStart + pWriter->nLeafEst*nHeight; + blobGrowBuffer(&pNode->block, MAX(nRoot, p->nNodeSize), &rc); + if( rc==SQLITE_OK ){ + memcpy(pNode->block.a, aRoot, nRoot); + pNode->block.n = nRoot; + } + + for(i=nHeight; i>=0 && rc==SQLITE_OK; i--){ + NodeReader reader; + pNode = &pWriter->aNodeWriter[i]; + + rc = nodeReaderInit(&reader, pNode->block.a, pNode->block.n); + while( reader.aNode && rc==SQLITE_OK ) rc = nodeReaderNext(&reader); + blobGrowBuffer(&pNode->key, reader.term.n, &rc); + if( rc==SQLITE_OK ){ + memcpy(pNode->key.a, reader.term.a, reader.term.n); + pNode->key.n = reader.term.n; + if( i>0 ){ + char *aBlock = 0; + int nBlock = 0; + pNode = &pWriter->aNodeWriter[i-1]; + pNode->iBlock = reader.iChild; + rc = sqlite3Fts3ReadBlock(p, reader.iChild, &aBlock, &nBlock, 0); + blobGrowBuffer(&pNode->block, MAX(nBlock, p->nNodeSize), &rc); + if( rc==SQLITE_OK ){ + memcpy(pNode->block.a, aBlock, nBlock); + pNode->block.n = nBlock; + } + sqlite3_free(aBlock); + } + } + nodeReaderRelease(&reader); + } + } + + rc2 = sqlite3_reset(pSelect); + if( rc==SQLITE_OK ) rc = rc2; + } + + return rc; } /* -** Extract the next token from buffer z (length n) using the tokenizer -** and other information (column names etc.) in pParse. Create an Fts3Expr -** structure of type FTSQUERY_PHRASE containing a phrase consisting of this -** single token and set *ppExpr to point to it. If the end of the buffer is -** reached before a token is found, set *ppExpr to zero. It is the -** responsibility of the caller to eventually deallocate the allocated -** Fts3Expr structure (if any) by passing it to sqlite3_free(). +** Determine the largest segment index value that exists within absolute +** level iAbsLevel+1. If no error occurs, set *piIdx to this value plus +** one before returning SQLITE_OK. Or, if there are no segments at all +** within level iAbsLevel, set *piIdx to zero. ** -** Return SQLITE_OK if successful, or SQLITE_NOMEM if a memory allocation -** fails. +** If an error occurs, return an SQLite error code. The final value of +** *piIdx is undefined in this case. */ -static int getNextToken( - ParseContext *pParse, /* fts3 query parse context */ - int iCol, /* Value for Fts3Phrase.iColumn */ - const char *z, int n, /* Input string */ - Fts3Expr **ppExpr, /* OUT: expression */ - int *pnConsumed /* OUT: Number of bytes consumed */ +static int fts3IncrmergeOutputIdx( + Fts3Table *p, /* FTS Table handle */ + sqlite3_int64 iAbsLevel, /* Absolute index of input segments */ + int *piIdx /* OUT: Next free index at iAbsLevel+1 */ ){ - sqlite3_tokenizer *pTokenizer = pParse->pTokenizer; - sqlite3_tokenizer_module const *pModule = pTokenizer->pModule; int rc; - sqlite3_tokenizer_cursor *pCursor; - Fts3Expr *pRet = 0; - int nConsumed = 0; + sqlite3_stmt *pOutputIdx = 0; /* SQL used to find output index */ - rc = pModule->xOpen(pTokenizer, z, n, &pCursor); + rc = fts3SqlStmt(p, SQL_NEXT_SEGMENT_INDEX, &pOutputIdx, 0); if( rc==SQLITE_OK ){ - const char *zToken; - int nToken, iStart, iEnd, iPosition; - int nByte; /* total space to allocate */ + sqlite3_bind_int64(pOutputIdx, 1, iAbsLevel+1); + sqlite3_step(pOutputIdx); + *piIdx = sqlite3_column_int(pOutputIdx, 0); + rc = sqlite3_reset(pOutputIdx); + } - pCursor->pTokenizer = pTokenizer; - rc = pModule->xNext(pCursor, &zToken, &nToken, &iStart, &iEnd, &iPosition); + return rc; +} - if( rc==SQLITE_OK ){ - nByte = sizeof(Fts3Expr) + sizeof(Fts3Phrase) + nToken; - pRet = (Fts3Expr *)sqlite3_malloc(nByte); - if( !pRet ){ - rc = SQLITE_NOMEM; - }else{ - memset(pRet, 0, nByte); - pRet->eType = FTSQUERY_PHRASE; - pRet->pPhrase = (Fts3Phrase *)&pRet[1]; - pRet->pPhrase->nToken = 1; - pRet->pPhrase->iColumn = iCol; - pRet->pPhrase->aToken[0].n = nToken; - pRet->pPhrase->aToken[0].z = (char *)&pRet->pPhrase[1]; - memcpy(pRet->pPhrase->aToken[0].z, zToken, nToken); +/* +** Allocate an appendable output segment on absolute level iAbsLevel+1 +** with idx value iIdx. +** +** In the %_segdir table, a segment is defined by the values in three +** columns: +** +** start_block +** leaves_end_block +** end_block +** +** When an appendable segment is allocated, it is estimated that the +** maximum number of leaf blocks that may be required is the sum of the +** number of leaf blocks consumed by the input segments, plus the number +** of input segments, multiplied by two. This value is stored in stack +** variable nLeafEst. +** +** A total of 16*nLeafEst blocks are allocated when an appendable segment +** is created ((1 + end_block - start_block)==16*nLeafEst). The contiguous +** array of leaf nodes starts at the first block allocated. The array +** of interior nodes that are parents of the leaf nodes start at block +** (start_block + (1 + end_block - start_block) / 16). And so on. +** +** In the actual code below, the value "16" is replaced with the +** pre-processor macro FTS_MAX_APPENDABLE_HEIGHT. +*/ +static int fts3IncrmergeWriter( + Fts3Table *p, /* Fts3 table handle */ + sqlite3_int64 iAbsLevel, /* Absolute level of input segments */ + int iIdx, /* Index of new output segment */ + Fts3MultiSegReader *pCsr, /* Cursor that data will be read from */ + IncrmergeWriter *pWriter /* Populate this object */ +){ + int rc; /* Return Code */ + int i; /* Iterator variable */ + int nLeafEst = 0; /* Blocks allocated for leaf nodes */ + sqlite3_stmt *pLeafEst = 0; /* SQL used to determine nLeafEst */ + sqlite3_stmt *pFirstBlock = 0; /* SQL used to determine first block */ + + /* Calculate nLeafEst. */ + rc = fts3SqlStmt(p, SQL_MAX_LEAF_NODE_ESTIMATE, &pLeafEst, 0); + if( rc==SQLITE_OK ){ + sqlite3_bind_int64(pLeafEst, 1, iAbsLevel); + sqlite3_bind_int64(pLeafEst, 2, pCsr->nSegment); + if( SQLITE_ROW==sqlite3_step(pLeafEst) ){ + nLeafEst = sqlite3_column_int(pLeafEst, 0); + } + rc = sqlite3_reset(pLeafEst); + } + if( rc!=SQLITE_OK ) return rc; - if( iEndpPhrase->aToken[0].isPrefix = 1; - iEnd++; - } - if( !sqlite3_fts3_enable_parentheses && iStart>0 && z[iStart-1]=='-' ){ - pRet->pPhrase->isNot = 1; - } - } - nConsumed = iEnd; + /* Calculate the first block to use in the output segment */ + rc = fts3SqlStmt(p, SQL_NEXT_SEGMENTS_ID, &pFirstBlock, 0); + if( rc==SQLITE_OK ){ + if( SQLITE_ROW==sqlite3_step(pFirstBlock) ){ + pWriter->iStart = sqlite3_column_int64(pFirstBlock, 0); + pWriter->iEnd = pWriter->iStart - 1; + pWriter->iEnd += nLeafEst * FTS_MAX_APPENDABLE_HEIGHT; } + rc = sqlite3_reset(pFirstBlock); + } + if( rc!=SQLITE_OK ) return rc; - pModule->xClose(pCursor); + /* Insert the marker in the %_segments table to make sure nobody tries + ** to steal the space just allocated. This is also used to identify + ** appendable segments. */ + rc = fts3WriteSegment(p, pWriter->iEnd, 0, 0); + if( rc!=SQLITE_OK ) return rc; + + pWriter->iAbsLevel = iAbsLevel; + pWriter->nLeafEst = nLeafEst; + pWriter->iIdx = iIdx; + + /* Set up the array of NodeWriter objects */ + for(i=0; iaNodeWriter[i].iBlock = pWriter->iStart + i*pWriter->nLeafEst; } - - *pnConsumed = nConsumed; - *ppExpr = pRet; - return rc; + return SQLITE_OK; } - /* -** Enlarge a memory allocation. If an out-of-memory allocation occurs, -** then free the old allocation. +** Remove an entry from the %_segdir table. This involves running the +** following two statements: +** +** DELETE FROM %_segdir WHERE level = :iAbsLevel AND idx = :iIdx +** UPDATE %_segdir SET idx = idx - 1 WHERE level = :iAbsLevel AND idx > :iIdx +** +** The DELETE statement removes the specific %_segdir level. The UPDATE +** statement ensures that the remaining segments have contiguously allocated +** idx values. */ -void *fts3ReallocOrFree(void *pOrig, int nNew){ - void *pRet = sqlite3_realloc(pOrig, nNew); - if( !pRet ){ - sqlite3_free(pOrig); +static int fts3RemoveSegdirEntry( + Fts3Table *p, /* FTS3 table handle */ + sqlite3_int64 iAbsLevel, /* Absolute level to delete from */ + int iIdx /* Index of %_segdir entry to delete */ +){ + int rc; /* Return code */ + sqlite3_stmt *pDelete = 0; /* DELETE statement */ + + rc = fts3SqlStmt(p, SQL_DELETE_SEGDIR_ENTRY, &pDelete, 0); + if( rc==SQLITE_OK ){ + sqlite3_bind_int64(pDelete, 1, iAbsLevel); + sqlite3_bind_int(pDelete, 2, iIdx); + sqlite3_step(pDelete); + rc = sqlite3_reset(pDelete); } - return pRet; + + return rc; } /* -** Buffer zInput, length nInput, contains the contents of a quoted string -** that appeared as part of an fts3 query expression. Neither quote character -** is included in the buffer. This function attempts to tokenize the entire -** input buffer and create an Fts3Expr structure of type FTSQUERY_PHRASE -** containing the results. -** -** If successful, SQLITE_OK is returned and *ppExpr set to point at the -** allocated Fts3Expr structure. Otherwise, either SQLITE_NOMEM (out of memory -** error) or SQLITE_ERROR (tokenization error) is returned and *ppExpr set -** to 0. +** One or more segments have just been removed from absolute level iAbsLevel. +** Update the 'idx' values of the remaining segments in the level so that +** the idx values are a contiguous sequence starting from 0. */ -static int getNextString( - ParseContext *pParse, /* fts3 query parse context */ - const char *zInput, int nInput, /* Input string */ - Fts3Expr **ppExpr /* OUT: expression */ +static int fts3RepackSegdirLevel( + Fts3Table *p, /* FTS3 table handle */ + sqlite3_int64 iAbsLevel /* Absolute level to repack */ ){ - sqlite3_tokenizer *pTokenizer = pParse->pTokenizer; - sqlite3_tokenizer_module const *pModule = pTokenizer->pModule; - int rc; - Fts3Expr *p = 0; - sqlite3_tokenizer_cursor *pCursor = 0; - char *zTemp = 0; - int nTemp = 0; - - rc = pModule->xOpen(pTokenizer, zInput, nInput, &pCursor); + int rc; /* Return code */ + int *aIdx = 0; /* Array of remaining idx values */ + int nIdx = 0; /* Valid entries in aIdx[] */ + int nAlloc = 0; /* Allocated size of aIdx[] */ + int i; /* Iterator variable */ + sqlite3_stmt *pSelect = 0; /* Select statement to read idx values */ + sqlite3_stmt *pUpdate = 0; /* Update statement to modify idx values */ + + rc = fts3SqlStmt(p, SQL_SELECT_INDEXES, &pSelect, 0); if( rc==SQLITE_OK ){ - int ii; - pCursor->pTokenizer = pTokenizer; - for(ii=0; rc==SQLITE_OK; ii++){ - const char *zToken; - int nToken, iBegin, iEnd, iPos; - rc = pModule->xNext(pCursor, &zToken, &nToken, &iBegin, &iEnd, &iPos); - if( rc==SQLITE_OK ){ - int nByte = sizeof(Fts3Expr) + sizeof(Fts3Phrase); - p = fts3ReallocOrFree(p, nByte+ii*sizeof(struct PhraseToken)); - zTemp = fts3ReallocOrFree(zTemp, nTemp + nToken); - if( !p || !zTemp ){ - goto no_mem; - } - if( ii==0 ){ - memset(p, 0, nByte); - p->pPhrase = (Fts3Phrase *)&p[1]; - } - p->pPhrase = (Fts3Phrase *)&p[1]; - p->pPhrase->nToken = ii+1; - p->pPhrase->aToken[ii].n = nToken; - memcpy(&zTemp[nTemp], zToken, nToken); - nTemp += nToken; - if( iEndpPhrase->aToken[ii].isPrefix = 1; - }else{ - p->pPhrase->aToken[ii].isPrefix = 0; + int rc2; + sqlite3_bind_int64(pSelect, 1, iAbsLevel); + while( SQLITE_ROW==sqlite3_step(pSelect) ){ + if( nIdx>=nAlloc ){ + int *aNew; + nAlloc += 16; + aNew = sqlite3_realloc(aIdx, nAlloc*sizeof(int)); + if( !aNew ){ + rc = SQLITE_NOMEM; + break; } + aIdx = aNew; } + aIdx[nIdx++] = sqlite3_column_int(pSelect, 0); } + rc2 = sqlite3_reset(pSelect); + if( rc==SQLITE_OK ) rc = rc2; + } - pModule->xClose(pCursor); - pCursor = 0; + if( rc==SQLITE_OK ){ + rc = fts3SqlStmt(p, SQL_SHIFT_SEGDIR_ENTRY, &pUpdate, 0); + } + if( rc==SQLITE_OK ){ + sqlite3_bind_int64(pUpdate, 2, iAbsLevel); } - if( rc==SQLITE_DONE ){ - int jj; - char *zNew; - int nNew = 0; - int nByte = sizeof(Fts3Expr) + sizeof(Fts3Phrase); - nByte += (p?(p->pPhrase->nToken-1):0) * sizeof(struct PhraseToken); - p = fts3ReallocOrFree(p, nByte + nTemp); - if( !p ){ - goto no_mem; + assert( p->bIgnoreSavepoint==0 ); + p->bIgnoreSavepoint = 1; + for(i=0; rc==SQLITE_OK && ipPhrase = (Fts3Phrase *)&p[1]; - for(jj=0; jjpPhrase->nToken; jj++){ - p->pPhrase->aToken[jj].z = &zNew[nNew]; - nNew += p->pPhrase->aToken[jj].n; - } - sqlite3_free(zTemp); - p->eType = FTSQUERY_PHRASE; - p->pPhrase->iColumn = pParse->iDefaultCol; - rc = SQLITE_OK; } + p->bIgnoreSavepoint = 0; - *ppExpr = p; + sqlite3_free(aIdx); return rc; -no_mem: +} - if( pCursor ){ - pModule->xClose(pCursor); +static void fts3StartNode(Blob *pNode, int iHeight, sqlite3_int64 iChild){ + pNode->a[0] = (char)iHeight; + if( iChild ){ + assert( pNode->nAlloc>=1+sqlite3Fts3VarintLen(iChild) ); + pNode->n = 1 + sqlite3Fts3PutVarint(&pNode->a[1], iChild); + }else{ + assert( pNode->nAlloc>=1 ); + pNode->n = 1; } - sqlite3_free(zTemp); - sqlite3_free(p); - *ppExpr = 0; - return SQLITE_NOMEM; } /* -** Function getNextNode(), which is called by fts3ExprParse(), may itself -** call fts3ExprParse(). So this forward declaration is required. -*/ -static int fts3ExprParse(ParseContext *, const char *, int, Fts3Expr **, int *); - -/* -** The output variable *ppExpr is populated with an allocated Fts3Expr -** structure, or set to 0 if the end of the input buffer is reached. +** The first two arguments are a pointer to and the size of a segment b-tree +** node. The node may be a leaf or an internal node. ** -** Returns an SQLite error code. SQLITE_OK if everything works, SQLITE_NOMEM -** if a malloc failure occurs, or SQLITE_ERROR if a parse error is encountered. -** If SQLITE_ERROR is returned, pContext is populated with an error message. +** This function creates a new node image in blob object *pNew by copying +** all terms that are greater than or equal to zTerm/nTerm (for leaf nodes) +** or greater than zTerm/nTerm (for internal nodes) from aNode/nNode. */ -static int getNextNode( - ParseContext *pParse, /* fts3 query parse context */ - const char *z, int n, /* Input string */ - Fts3Expr **ppExpr, /* OUT: expression */ - int *pnConsumed /* OUT: Number of bytes consumed */ +static int fts3TruncateNode( + const char *aNode, /* Current node image */ + int nNode, /* Size of aNode in bytes */ + Blob *pNew, /* OUT: Write new node image here */ + const char *zTerm, /* Omit all terms smaller than this */ + int nTerm, /* Size of zTerm in bytes */ + sqlite3_int64 *piBlock /* OUT: Block number in next layer down */ ){ - static const struct Fts3Keyword { - char z[4]; /* Keyword text */ - unsigned char n; /* Length of the keyword */ - unsigned char parenOnly; /* Only valid in paren mode */ - unsigned char eType; /* Keyword code */ - } aKeyword[] = { - { "OR" , 2, 0, FTSQUERY_OR }, - { "AND", 3, 1, FTSQUERY_AND }, - { "NOT", 3, 1, FTSQUERY_NOT }, - { "NEAR", 4, 0, FTSQUERY_NEAR } - }; - int ii; - int iCol; - int iColLen; - int rc; - Fts3Expr *pRet = 0; + NodeReader reader; /* Reader object */ + Blob prev = {0, 0, 0}; /* Previous term written to new node */ + int rc = SQLITE_OK; /* Return code */ + int bLeaf = aNode[0]=='\0'; /* True for a leaf node */ - const char *zInput = z; - int nInput = n; + /* Allocate required output space */ + blobGrowBuffer(pNew, nNode, &rc); + if( rc!=SQLITE_OK ) return rc; + pNew->n = 0; - /* Skip over any whitespace before checking for a keyword, an open or - ** close bracket, or a quoted string. - */ - while( nInput>0 && fts3isspace(*zInput) ){ - nInput--; - zInput++; + /* Populate new node buffer */ + for(rc = nodeReaderInit(&reader, aNode, nNode); + rc==SQLITE_OK && reader.aNode; + rc = nodeReaderNext(&reader) + ){ + if( pNew->n==0 ){ + int res = fts3TermCmp(reader.term.a, reader.term.n, zTerm, nTerm); + if( res<0 || (bLeaf==0 && res==0) ) continue; + fts3StartNode(pNew, (int)aNode[0], reader.iChild); + *piBlock = reader.iChild; + } + rc = fts3AppendToNode( + pNew, &prev, reader.term.a, reader.term.n, + reader.aDoclist, reader.nDoclist + ); + if( rc!=SQLITE_OK ) break; } - if( nInput==0 ){ - return SQLITE_DONE; + if( pNew->n==0 ){ + fts3StartNode(pNew, (int)aNode[0], reader.iChild); + *piBlock = reader.iChild; } + assert( pNew->n<=pNew->nAlloc ); - /* See if we are dealing with a keyword. */ - for(ii=0; ii<(int)(sizeof(aKeyword)/sizeof(struct Fts3Keyword)); ii++){ - const struct Fts3Keyword *pKey = &aKeyword[ii]; - - if( (pKey->parenOnly & ~sqlite3_fts3_enable_parentheses)!=0 ){ - continue; - } - - if( nInput>=pKey->n && 0==memcmp(zInput, pKey->z, pKey->n) ){ - int nNear = SQLITE_FTS3_DEFAULT_NEAR_PARAM; - int nKey = pKey->n; - char cNext; - - /* If this is a "NEAR" keyword, check for an explicit nearness. */ - if( pKey->eType==FTSQUERY_NEAR ){ - assert( nKey==4 ); - if( zInput[4]=='/' && zInput[5]>='0' && zInput[5]<='9' ){ - nNear = 0; - for(nKey=5; zInput[nKey]>='0' && zInput[nKey]<='9'; nKey++){ - nNear = nNear * 10 + (zInput[nKey] - '0'); - } - } - } - - /* At this point this is probably a keyword. But for that to be true, - ** the next byte must contain either whitespace, an open or close - ** parenthesis, a quote character, or EOF. - */ - cNext = zInput[nKey]; - if( fts3isspace(cNext) - || cNext=='"' || cNext=='(' || cNext==')' || cNext==0 - ){ - pRet = (Fts3Expr *)sqlite3_malloc(sizeof(Fts3Expr)); - memset(pRet, 0, sizeof(Fts3Expr)); - pRet->eType = pKey->eType; - pRet->nNear = nNear; - *ppExpr = pRet; - *pnConsumed = (zInput - z) + nKey; - return SQLITE_OK; - } - - /* Turns out that wasn't a keyword after all. This happens if the - ** user has supplied a token such as "ORacle". Continue. - */ + nodeReaderRelease(&reader); + sqlite3_free(prev.a); + return rc; +} + +/* +** Remove all terms smaller than zTerm/nTerm from segment iIdx in absolute +** level iAbsLevel. This may involve deleting entries from the %_segments +** table, and modifying existing entries in both the %_segments and %_segdir +** tables. +** +** SQLITE_OK is returned if the segment is updated successfully. Or an +** SQLite error code otherwise. +*/ +static int fts3TruncateSegment( + Fts3Table *p, /* FTS3 table handle */ + sqlite3_int64 iAbsLevel, /* Absolute level of segment to modify */ + int iIdx, /* Index within level of segment to modify */ + const char *zTerm, /* Remove terms smaller than this */ + int nTerm /* Number of bytes in buffer zTerm */ +){ + int rc = SQLITE_OK; /* Return code */ + Blob root = {0,0,0}; /* New root page image */ + Blob block = {0,0,0}; /* Buffer used for any other block */ + sqlite3_int64 iBlock = 0; /* Block id */ + sqlite3_int64 iNewStart = 0; /* New value for iStartBlock */ + sqlite3_int64 iOldStart = 0; /* Old value for iStartBlock */ + sqlite3_stmt *pFetch = 0; /* Statement used to fetch segdir */ + + rc = fts3SqlStmt(p, SQL_SELECT_SEGDIR, &pFetch, 0); + if( rc==SQLITE_OK ){ + int rc2; /* sqlite3_reset() return code */ + sqlite3_bind_int64(pFetch, 1, iAbsLevel); + sqlite3_bind_int(pFetch, 2, iIdx); + if( SQLITE_ROW==sqlite3_step(pFetch) ){ + const char *aRoot = sqlite3_column_blob(pFetch, 4); + int nRoot = sqlite3_column_bytes(pFetch, 4); + iOldStart = sqlite3_column_int64(pFetch, 1); + rc = fts3TruncateNode(aRoot, nRoot, &root, zTerm, nTerm, &iBlock); } + rc2 = sqlite3_reset(pFetch); + if( rc==SQLITE_OK ) rc = rc2; } - /* Check for an open bracket. */ - if( sqlite3_fts3_enable_parentheses ){ - if( *zInput=='(' ){ - int nConsumed; - int rc; - pParse->nNest++; - rc = fts3ExprParse(pParse, &zInput[1], nInput-1, ppExpr, &nConsumed); - if( rc==SQLITE_OK && !*ppExpr ){ - rc = SQLITE_DONE; - } - *pnConsumed = (zInput - z) + 1 + nConsumed; - return rc; + while( rc==SQLITE_OK && iBlock ){ + char *aBlock = 0; + int nBlock = 0; + iNewStart = iBlock; + + rc = sqlite3Fts3ReadBlock(p, iBlock, &aBlock, &nBlock, 0); + if( rc==SQLITE_OK ){ + rc = fts3TruncateNode(aBlock, nBlock, &block, zTerm, nTerm, &iBlock); } - - /* Check for a close bracket. */ - if( *zInput==')' ){ - pParse->nNest--; - *pnConsumed = (zInput - z) + 1; - return SQLITE_DONE; + if( rc==SQLITE_OK ){ + rc = fts3WriteSegment(p, iNewStart, block.a, block.n); } + sqlite3_free(aBlock); } - /* See if we are dealing with a quoted phrase. If this is the case, then - ** search for the closing quote and pass the whole string to getNextString() - ** for processing. This is easy to do, as fts3 has no syntax for escaping - ** a quote character embedded in a string. - */ - if( *zInput=='"' ){ - for(ii=1; iiiDefaultCol; - iColLen = 0; - for(ii=0; iinCol; ii++){ - const char *zStr = pParse->azCol[ii]; - int nStr = strlen(zStr); - if( nInput>nStr && zInput[nStr]==':' && memcmp(zStr, zInput, nStr)==0 ){ - iCol = ii; - iColLen = ((zInput - z) + nStr + 1); - break; + if( rc==SQLITE_OK ){ + sqlite3_stmt *pChomp = 0; + rc = fts3SqlStmt(p, SQL_CHOMP_SEGDIR, &pChomp, 0); + if( rc==SQLITE_OK ){ + sqlite3_bind_int64(pChomp, 1, iNewStart); + sqlite3_bind_blob(pChomp, 2, root.a, root.n, SQLITE_STATIC); + sqlite3_bind_int64(pChomp, 3, iAbsLevel); + sqlite3_bind_int(pChomp, 4, iIdx); + sqlite3_step(pChomp); + rc = sqlite3_reset(pChomp); } } - rc = getNextToken(pParse, iCol, &z[iColLen], n-iColLen, ppExpr, pnConsumed); - *pnConsumed += iColLen; + + sqlite3_free(root.a); + sqlite3_free(block.a); return rc; } /* -** The argument is an Fts3Expr structure for a binary operator (any type -** except an FTSQUERY_PHRASE). Return an integer value representing the -** precedence of the operator. Lower values have a higher precedence (i.e. -** group more tightly). For example, in the C language, the == operator -** groups more tightly than ||, and would therefore have a higher precedence. -** -** When using the new fts3 query syntax (when SQLITE_ENABLE_FTS3_PARENTHESIS -** is defined), the order of the operators in precedence from highest to -** lowest is: -** -** NEAR -** NOT -** AND (including implicit ANDs) -** OR +** This function is called after an incrmental-merge operation has run to +** merge (or partially merge) two or more segments from absolute level +** iAbsLevel. ** -** Note that when using the old query syntax, the OR operator has a higher -** precedence than the AND operator. +** Each input segment is either removed from the db completely (if all of +** its data was copied to the output segment by the incrmerge operation) +** or modified in place so that it no longer contains those entries that +** have been duplicated in the output segment. */ -static int opPrecedence(Fts3Expr *p){ - assert( p->eType!=FTSQUERY_PHRASE ); - if( sqlite3_fts3_enable_parentheses ){ - return p->eType; - }else if( p->eType==FTSQUERY_NEAR ){ - return 1; - }else if( p->eType==FTSQUERY_OR ){ - return 2; +static int fts3IncrmergeChomp( + Fts3Table *p, /* FTS table handle */ + sqlite3_int64 iAbsLevel, /* Absolute level containing segments */ + Fts3MultiSegReader *pCsr, /* Chomp all segments opened by this cursor */ + int *pnRem /* Number of segments not deleted */ +){ + int i; + int nRem = 0; + int rc = SQLITE_OK; + + for(i=pCsr->nSegment-1; i>=0 && rc==SQLITE_OK; i--){ + Fts3SegReader *pSeg = 0; + int j; + + /* Find the Fts3SegReader object with Fts3SegReader.iIdx==i. It is hiding + ** somewhere in the pCsr->apSegment[] array. */ + for(j=0; ALWAYS(jnSegment); j++){ + pSeg = pCsr->apSegment[j]; + if( pSeg->iIdx==i ) break; + } + assert( jnSegment && pSeg->iIdx==i ); + + if( pSeg->aNode==0 ){ + /* Seg-reader is at EOF. Remove the entire input segment. */ + rc = fts3DeleteSegment(p, pSeg); + if( rc==SQLITE_OK ){ + rc = fts3RemoveSegdirEntry(p, iAbsLevel, pSeg->iIdx); + } + *pnRem = 0; + }else{ + /* The incremental merge did not copy all the data from this + ** segment to the upper level. The segment is modified in place + ** so that it contains no keys smaller than zTerm/nTerm. */ + const char *zTerm = pSeg->zTerm; + int nTerm = pSeg->nTerm; + rc = fts3TruncateSegment(p, iAbsLevel, pSeg->iIdx, zTerm, nTerm); + nRem++; + } } - assert( p->eType==FTSQUERY_AND ); - return 3; + + if( rc==SQLITE_OK && nRem!=pCsr->nSegment ){ + rc = fts3RepackSegdirLevel(p, iAbsLevel); + } + + *pnRem = nRem; + return rc; } /* -** Argument ppHead contains a pointer to the current head of a query -** expression tree being parsed. pPrev is the expression node most recently -** inserted into the tree. This function adds pNew, which is always a binary -** operator node, into the expression tree based on the relative precedence -** of pNew and the existing nodes of the tree. This may result in the head -** of the tree changing, in which case *ppHead is set to the new root node. +** Store an incr-merge hint in the database. */ -static void insertBinaryOperator( - Fts3Expr **ppHead, /* Pointer to the root node of a tree */ - Fts3Expr *pPrev, /* Node most recently inserted into the tree */ - Fts3Expr *pNew /* New binary node to insert into expression tree */ -){ - Fts3Expr *pSplit = pPrev; - while( pSplit->pParent && opPrecedence(pSplit->pParent)<=opPrecedence(pNew) ){ - pSplit = pSplit->pParent; +static int fts3IncrmergeHintStore(Fts3Table *p, Blob *pHint){ + sqlite3_stmt *pReplace = 0; + int rc; /* Return code */ + + rc = fts3SqlStmt(p, SQL_REPLACE_STAT, &pReplace, 0); + if( rc==SQLITE_OK ){ + sqlite3_bind_int(pReplace, 1, FTS_STAT_INCRMERGEHINT); + sqlite3_bind_blob(pReplace, 2, pHint->a, pHint->n, SQLITE_STATIC); + sqlite3_step(pReplace); + rc = sqlite3_reset(pReplace); } - if( pSplit->pParent ){ - assert( pSplit->pParent->pRight==pSplit ); - pSplit->pParent->pRight = pNew; - pNew->pParent = pSplit->pParent; - }else{ - *ppHead = pNew; + return rc; +} + +/* +** Load an incr-merge hint from the database. The incr-merge hint, if one +** exists, is stored in the rowid==1 row of the %_stat table. +** +** If successful, populate blob *pHint with the value read from the %_stat +** table and return SQLITE_OK. Otherwise, if an error occurs, return an +** SQLite error code. +*/ +static int fts3IncrmergeHintLoad(Fts3Table *p, Blob *pHint){ + sqlite3_stmt *pSelect = 0; + int rc; + + pHint->n = 0; + rc = fts3SqlStmt(p, SQL_SELECT_STAT, &pSelect, 0); + if( rc==SQLITE_OK ){ + int rc2; + sqlite3_bind_int(pSelect, 1, FTS_STAT_INCRMERGEHINT); + if( SQLITE_ROW==sqlite3_step(pSelect) ){ + const char *aHint = sqlite3_column_blob(pSelect, 0); + int nHint = sqlite3_column_bytes(pSelect, 0); + if( aHint ){ + blobGrowBuffer(pHint, nHint, &rc); + if( rc==SQLITE_OK ){ + memcpy(pHint->a, aHint, nHint); + pHint->n = nHint; + } + } + } + rc2 = sqlite3_reset(pSelect); + if( rc==SQLITE_OK ) rc = rc2; } - pNew->pLeft = pSplit; - pSplit->pParent = pNew; + + return rc; } /* -** Parse the fts3 query expression found in buffer z, length n. This function -** returns either when the end of the buffer is reached or an unmatched -** closing bracket - ')' - is encountered. +** If *pRc is not SQLITE_OK when this function is called, it is a no-op. +** Otherwise, append an entry to the hint stored in blob *pHint. Each entry +** consists of two varints, the absolute level number of the input segments +** and the number of input segments. ** -** If successful, SQLITE_OK is returned, *ppExpr is set to point to the -** parsed form of the expression and *pnConsumed is set to the number of -** bytes read from buffer z. Otherwise, *ppExpr is set to 0 and SQLITE_NOMEM -** (out of memory error) or SQLITE_ERROR (parse error) is returned. +** If successful, leave *pRc set to SQLITE_OK and return. If an error occurs, +** set *pRc to an SQLite error code before returning. */ -static int fts3ExprParse( - ParseContext *pParse, /* fts3 query parse context */ - const char *z, int n, /* Text of MATCH query */ - Fts3Expr **ppExpr, /* OUT: Parsed query structure */ - int *pnConsumed /* OUT: Number of bytes consumed */ +static void fts3IncrmergeHintPush( + Blob *pHint, /* Hint blob to append to */ + i64 iAbsLevel, /* First varint to store in hint */ + int nInput, /* Second varint to store in hint */ + int *pRc /* IN/OUT: Error code */ ){ - Fts3Expr *pRet = 0; - Fts3Expr *pPrev = 0; - Fts3Expr *pNotBranch = 0; /* Only used in legacy parse mode */ - int nIn = n; - const char *zIn = z; - int rc = SQLITE_OK; - int isRequirePhrase = 1; + blobGrowBuffer(pHint, pHint->n + 2*FTS3_VARINT_MAX, pRc); + if( *pRc==SQLITE_OK ){ + pHint->n += sqlite3Fts3PutVarint(&pHint->a[pHint->n], iAbsLevel); + pHint->n += sqlite3Fts3PutVarint(&pHint->a[pHint->n], (i64)nInput); + } +} - while( rc==SQLITE_OK ){ - Fts3Expr *p = 0; - int nByte = 0; - rc = getNextNode(pParse, zIn, nIn, &p, &nByte); - if( rc==SQLITE_OK ){ - int isPhrase; +/* +** Read the last entry (most recently pushed) from the hint blob *pHint +** and then remove the entry. Write the two values read to *piAbsLevel and +** *pnInput before returning. +** +** If no error occurs, return SQLITE_OK. If the hint blob in *pHint does +** not contain at least two valid varints, return SQLITE_CORRUPT_VTAB. +*/ +static int fts3IncrmergeHintPop(Blob *pHint, i64 *piAbsLevel, int *pnInput){ + const int nHint = pHint->n; + int i; - if( !sqlite3_fts3_enable_parentheses - && p->eType==FTSQUERY_PHRASE && p->pPhrase->isNot - ){ - /* Create an implicit NOT operator. */ - Fts3Expr *pNot = sqlite3_malloc(sizeof(Fts3Expr)); - if( !pNot ){ - sqlite3Fts3ExprFree(p); - rc = SQLITE_NOMEM; - goto exprparse_out; - } - memset(pNot, 0, sizeof(Fts3Expr)); - pNot->eType = FTSQUERY_NOT; - pNot->pRight = p; - if( pNotBranch ){ - pNotBranch->pLeft = p; - pNot->pRight = pNotBranch; - } - pNotBranch = pNot; + i = pHint->n-2; + while( i>0 && (pHint->a[i-1] & 0x80) ) i--; + while( i>0 && (pHint->a[i-1] & 0x80) ) i--; + + pHint->n = i; + i += sqlite3Fts3GetVarint(&pHint->a[i], piAbsLevel); + i += sqlite3Fts3GetVarint32(&pHint->a[i], pnInput); + if( i!=nHint ) return SQLITE_CORRUPT_VTAB; + + return SQLITE_OK; +} + + +/* +** Attempt an incremental merge that writes nMerge leaf blocks. +** +** Incremental merges happen nMin segments at a time. The two +** segments to be merged are the nMin oldest segments (the ones with +** the smallest indexes) in the highest level that contains at least +** nMin segments. Multiple merges might occur in an attempt to write the +** quota of nMerge leaf blocks. +*/ +SQLITE_PRIVATE int sqlite3Fts3Incrmerge(Fts3Table *p, int nMerge, int nMin){ + int rc; /* Return code */ + int nRem = nMerge; /* Number of leaf pages yet to be written */ + Fts3MultiSegReader *pCsr; /* Cursor used to read input data */ + Fts3SegFilter *pFilter; /* Filter used with cursor pCsr */ + IncrmergeWriter *pWriter; /* Writer object */ + int nSeg = 0; /* Number of input segments */ + sqlite3_int64 iAbsLevel = 0; /* Absolute level number to work on */ + Blob hint = {0, 0, 0}; /* Hint read from %_stat table */ + int bDirtyHint = 0; /* True if blob 'hint' has been modified */ + + /* Allocate space for the cursor, filter and writer objects */ + const int nAlloc = sizeof(*pCsr) + sizeof(*pFilter) + sizeof(*pWriter); + pWriter = (IncrmergeWriter *)sqlite3_malloc(nAlloc); + if( !pWriter ) return SQLITE_NOMEM; + pFilter = (Fts3SegFilter *)&pWriter[1]; + pCsr = (Fts3MultiSegReader *)&pFilter[1]; + + rc = fts3IncrmergeHintLoad(p, &hint); + while( rc==SQLITE_OK && nRem>0 ){ + const i64 nMod = FTS3_SEGDIR_MAXLEVEL * p->nIndex; + sqlite3_stmt *pFindLevel = 0; /* SQL used to determine iAbsLevel */ + int bUseHint = 0; /* True if attempting to append */ + + /* Search the %_segdir table for the absolute level with the smallest + ** relative level number that contains at least nMin segments, if any. + ** If one is found, set iAbsLevel to the absolute level number and + ** nSeg to nMin. If no level with at least nMin segments can be found, + ** set nSeg to -1. + */ + rc = fts3SqlStmt(p, SQL_FIND_MERGE_LEVEL, &pFindLevel, 0); + sqlite3_bind_int(pFindLevel, 1, nMin); + if( sqlite3_step(pFindLevel)==SQLITE_ROW ){ + iAbsLevel = sqlite3_column_int64(pFindLevel, 0); + nSeg = nMin; + }else{ + nSeg = -1; + } + rc = sqlite3_reset(pFindLevel); + + /* If the hint read from the %_stat table is not empty, check if the + ** last entry in it specifies a relative level smaller than or equal + ** to the level identified by the block above (if any). If so, this + ** iteration of the loop will work on merging at the hinted level. + */ + if( rc==SQLITE_OK && hint.n ){ + int nHint = hint.n; + sqlite3_int64 iHintAbsLevel = 0; /* Hint level */ + int nHintSeg = 0; /* Hint number of segments */ + + rc = fts3IncrmergeHintPop(&hint, &iHintAbsLevel, &nHintSeg); + if( nSeg<0 || (iAbsLevel % nMod) >= (iHintAbsLevel % nMod) ){ + iAbsLevel = iHintAbsLevel; + nSeg = nHintSeg; + bUseHint = 1; + bDirtyHint = 1; }else{ - int eType = p->eType; - assert( eType!=FTSQUERY_PHRASE || !p->pPhrase->isNot ); - isPhrase = (eType==FTSQUERY_PHRASE || p->pLeft); + /* This undoes the effect of the HintPop() above - so that no entry + ** is removed from the hint blob. */ + hint.n = nHint; + } + } - /* The isRequirePhrase variable is set to true if a phrase or - ** an expression contained in parenthesis is required. If a - ** binary operator (AND, OR, NOT or NEAR) is encounted when - ** isRequirePhrase is set, this is a syntax error. - */ - if( !isPhrase && isRequirePhrase ){ - sqlite3Fts3ExprFree(p); - rc = SQLITE_ERROR; - goto exprparse_out; - } - - if( isPhrase && !isRequirePhrase ){ - /* Insert an implicit AND operator. */ - Fts3Expr *pAnd; - assert( pRet && pPrev ); - pAnd = sqlite3_malloc(sizeof(Fts3Expr)); - if( !pAnd ){ - sqlite3Fts3ExprFree(p); - rc = SQLITE_NOMEM; - goto exprparse_out; - } - memset(pAnd, 0, sizeof(Fts3Expr)); - pAnd->eType = FTSQUERY_AND; - insertBinaryOperator(&pRet, pPrev, pAnd); - pPrev = pAnd; - } + /* If nSeg is less that zero, then there is no level with at least + ** nMin segments and no hint in the %_stat table. No work to do. + ** Exit early in this case. */ + if( nSeg<0 ) break; - /* This test catches attempts to make either operand of a NEAR - ** operator something other than a phrase. For example, either of - ** the following: - ** - ** (bracketed expression) NEAR phrase - ** phrase NEAR (bracketed expression) - ** - ** Return an error in either case. - */ - if( pPrev && ( - (eType==FTSQUERY_NEAR && !isPhrase && pPrev->eType!=FTSQUERY_PHRASE) - || (eType!=FTSQUERY_PHRASE && isPhrase && pPrev->eType==FTSQUERY_NEAR) - )){ - sqlite3Fts3ExprFree(p); - rc = SQLITE_ERROR; - goto exprparse_out; - } - - if( isPhrase ){ - if( pRet ){ - assert( pPrev && pPrev->pLeft && pPrev->pRight==0 ); - pPrev->pRight = p; - p->pParent = pPrev; - }else{ - pRet = p; - } + /* Open a cursor to iterate through the contents of the oldest nSeg + ** indexes of absolute level iAbsLevel. If this cursor is opened using + ** the 'hint' parameters, it is possible that there are less than nSeg + ** segments available in level iAbsLevel. In this case, no work is + ** done on iAbsLevel - fall through to the next iteration of the loop + ** to start work on some other level. */ + memset(pWriter, 0, nAlloc); + pFilter->flags = FTS3_SEGMENT_REQUIRE_POS; + if( rc==SQLITE_OK ){ + rc = fts3IncrmergeCsr(p, iAbsLevel, nSeg, pCsr); + } + if( SQLITE_OK==rc && pCsr->nSegment==nSeg + && SQLITE_OK==(rc = sqlite3Fts3SegReaderStart(p, pCsr, pFilter)) + && SQLITE_ROW==(rc = sqlite3Fts3SegReaderStep(p, pCsr)) + ){ + int iIdx = 0; /* Largest idx in level (iAbsLevel+1) */ + rc = fts3IncrmergeOutputIdx(p, iAbsLevel, &iIdx); + if( rc==SQLITE_OK ){ + if( bUseHint && iIdx>0 ){ + const char *zKey = pCsr->zTerm; + int nKey = pCsr->nTerm; + rc = fts3IncrmergeLoad(p, iAbsLevel, iIdx-1, zKey, nKey, pWriter); }else{ - insertBinaryOperator(&pRet, pPrev, p); + rc = fts3IncrmergeWriter(p, iAbsLevel, iIdx, pCsr, pWriter); } - isRequirePhrase = !isPhrase; } - assert( nByte>0 ); - } - assert( rc!=SQLITE_OK || (nByte>0 && nByte<=nIn) ); - nIn -= nByte; - zIn += nByte; - pPrev = p; - } - if( rc==SQLITE_DONE && pRet && isRequirePhrase ){ - rc = SQLITE_ERROR; - } + if( rc==SQLITE_OK && pWriter->nLeafEst ){ + fts3LogMerge(nSeg, iAbsLevel); + do { + rc = fts3IncrmergeAppend(p, pWriter, pCsr); + if( rc==SQLITE_OK ) rc = sqlite3Fts3SegReaderStep(p, pCsr); + if( pWriter->nWork>=nRem && rc==SQLITE_ROW ) rc = SQLITE_OK; + }while( rc==SQLITE_ROW ); - if( rc==SQLITE_DONE ){ - rc = SQLITE_OK; - if( !sqlite3_fts3_enable_parentheses && pNotBranch ){ - if( !pRet ){ - rc = SQLITE_ERROR; - }else{ - pNotBranch->pLeft = pRet; - pRet = pNotBranch; + /* Update or delete the input segments */ + if( rc==SQLITE_OK ){ + nRem -= (1 + pWriter->nWork); + rc = fts3IncrmergeChomp(p, iAbsLevel, pCsr, &nSeg); + if( nSeg!=0 ){ + bDirtyHint = 1; + fts3IncrmergeHintPush(&hint, iAbsLevel, nSeg, &rc); + } + } } + + fts3IncrmergeRelease(p, pWriter, &rc); } + + sqlite3Fts3SegReaderFinish(pCsr); } - *pnConsumed = n - nIn; -exprparse_out: - if( rc!=SQLITE_OK ){ - sqlite3Fts3ExprFree(pRet); - sqlite3Fts3ExprFree(pNotBranch); - pRet = 0; + /* Write the hint values into the %_stat table for the next incr-merger */ + if( bDirtyHint && rc==SQLITE_OK ){ + rc = fts3IncrmergeHintStore(p, &hint); } - *ppExpr = pRet; + + sqlite3_free(pWriter); + sqlite3_free(hint.a); return rc; } /* -** Parameters z and n contain a pointer to and length of a buffer containing -** an fts3 query expression, respectively. This function attempts to parse the -** query expression and create a tree of Fts3Expr structures representing the -** parsed expression. If successful, *ppExpr is set to point to the head -** of the parsed expression tree and SQLITE_OK is returned. If an error -** occurs, either SQLITE_NOMEM (out-of-memory error) or SQLITE_ERROR (parse -** error) is returned and *ppExpr is set to 0. -** -** If parameter n is a negative number, then z is assumed to point to a -** nul-terminated string and the length is determined using strlen(). +** Convert the text beginning at *pz into an integer and return +** its value. Advance *pz to point to the first character past +** the integer. +*/ +static int fts3Getint(const char **pz){ + const char *z = *pz; + int i = 0; + while( (*z)>='0' && (*z)<='9' ) i = 10*i + *(z++) - '0'; + *pz = z; + return i; +} + +/* +** Process statements of the form: ** -** The first parameter, pTokenizer, is passed the fts3 tokenizer module to -** use to normalize query tokens while parsing the expression. The azCol[] -** array, which is assumed to contain nCol entries, should contain the names -** of each column in the target fts3 table, in order from left to right. -** Column names must be nul-terminated strings. +** INSERT INTO table(table) VALUES('merge=A,B'); ** -** The iDefaultCol parameter should be passed the index of the table column -** that appears on the left-hand-side of the MATCH operator (the default -** column to match against for tokens for which a column name is not explicitly -** specified as part of the query string), or -1 if tokens may by default -** match any table column. +** A and B are integers that decode to be the number of leaf pages +** written for the merge, and the minimum number of segments on a level +** before it will be selected for a merge, respectively. */ -SQLITE_PRIVATE int sqlite3Fts3ExprParse( - sqlite3_tokenizer *pTokenizer, /* Tokenizer module */ - char **azCol, /* Array of column names for fts3 table */ - int nCol, /* Number of entries in azCol[] */ - int iDefaultCol, /* Default column to query */ - const char *z, int n, /* Text of MATCH query */ - Fts3Expr **ppExpr /* OUT: Parsed query structure */ +static int fts3DoIncrmerge( + Fts3Table *p, /* FTS3 table handle */ + const char *zParam /* Nul-terminated string containing "A,B" */ ){ - int nParsed; int rc; - ParseContext sParse; - sParse.pTokenizer = pTokenizer; - sParse.azCol = (const char **)azCol; - sParse.nCol = nCol; - sParse.iDefaultCol = iDefaultCol; - sParse.nNest = 0; - if( z==0 ){ - *ppExpr = 0; - return SQLITE_OK; - } - if( n<0 ){ - n = strlen(z); + int nMin = (FTS3_MERGE_COUNT / 2); + int nMerge = 0; + const char *z = zParam; + + /* Read the first integer value */ + nMerge = fts3Getint(&z); + + /* If the first integer value is followed by a ',', read the second + ** integer value. */ + if( z[0]==',' && z[1]!='\0' ){ + z++; + nMin = fts3Getint(&z); } - rc = fts3ExprParse(&sParse, z, n, ppExpr, &nParsed); - /* Check for mismatched parenthesis */ - if( rc==SQLITE_OK && sParse.nNest ){ + if( z[0]!='\0' || nMin<2 ){ rc = SQLITE_ERROR; - sqlite3Fts3ExprFree(*ppExpr); - *ppExpr = 0; + }else{ + rc = SQLITE_OK; + if( !p->bHasStat ){ + assert( p->bFts4==0 ); + sqlite3Fts3CreateStatTable(&rc, p); + } + if( rc==SQLITE_OK ){ + rc = sqlite3Fts3Incrmerge(p, nMerge, nMin); + } + sqlite3Fts3SegmentsClose(p); } - return rc; } /* -** Free a parsed fts3 query expression allocated by sqlite3Fts3ExprParse(). +** Process statements of the form: +** +** INSERT INTO table(table) VALUES('automerge=X'); +** +** where X is an integer. X==0 means to turn automerge off. X!=0 means +** turn it on. The setting is persistent. */ -SQLITE_PRIVATE void sqlite3Fts3ExprFree(Fts3Expr *p){ - if( p ){ - sqlite3Fts3ExprFree(p->pLeft); - sqlite3Fts3ExprFree(p->pRight); - sqlite3_free(p); +static int fts3DoAutoincrmerge( + Fts3Table *p, /* FTS3 table handle */ + const char *zParam /* Nul-terminated string containing boolean */ +){ + int rc = SQLITE_OK; + sqlite3_stmt *pStmt = 0; + p->bAutoincrmerge = fts3Getint(&zParam)!=0; + if( !p->bHasStat ){ + assert( p->bFts4==0 ); + sqlite3Fts3CreateStatTable(&rc, p); + if( rc ) return rc; } + rc = fts3SqlStmt(p, SQL_REPLACE_STAT, &pStmt, 0); + if( rc ) return rc;; + sqlite3_bind_int(pStmt, 1, FTS_STAT_AUTOINCRMERGE); + sqlite3_bind_int(pStmt, 2, p->bAutoincrmerge); + sqlite3_step(pStmt); + rc = sqlite3_reset(pStmt); + return rc; } -/**************************************************************************** -***************************************************************************** -** Everything after this point is just test code. +/* +** Return a 64-bit checksum for the FTS index entry specified by the +** arguments to this function. */ +static u64 fts3ChecksumEntry( + const char *zTerm, /* Pointer to buffer containing term */ + int nTerm, /* Size of zTerm in bytes */ + int iLangid, /* Language id for current row */ + int iIndex, /* Index (0..Fts3Table.nIndex-1) */ + i64 iDocid, /* Docid for current row. */ + int iCol, /* Column number */ + int iPos /* Position */ +){ + int i; + u64 ret = (u64)iDocid; -#ifdef SQLITE_TEST + ret += (ret<<3) + iLangid; + ret += (ret<<3) + iIndex; + ret += (ret<<3) + iCol; + ret += (ret<<3) + iPos; + for(i=0; inIndex-1) */ + int *pRc /* OUT: Return code */ ){ + Fts3SegFilter filter; + Fts3MultiSegReader csr; int rc; - sqlite3_stmt *pStmt; - const char zSql[] = "SELECT fts3_tokenizer(?)"; + u64 cksum = 0; - *pp = 0; - rc = sqlite3_prepare_v2(db, zSql, -1, &pStmt, 0); - if( rc!=SQLITE_OK ){ - return rc; - } + assert( *pRc==SQLITE_OK ); - sqlite3_bind_text(pStmt, 1, zName, -1, SQLITE_STATIC); - if( SQLITE_ROW==sqlite3_step(pStmt) ){ - if( sqlite3_column_type(pStmt, 0)==SQLITE_BLOB ){ - memcpy(pp, sqlite3_column_blob(pStmt, 0), sizeof(*pp)); - } - } + memset(&filter, 0, sizeof(filter)); + memset(&csr, 0, sizeof(csr)); + filter.flags = FTS3_SEGMENT_REQUIRE_POS|FTS3_SEGMENT_IGNORE_EMPTY; + filter.flags |= FTS3_SEGMENT_SCAN; - return sqlite3_finalize(pStmt); -} + rc = sqlite3Fts3SegReaderCursor( + p, iLangid, iIndex, FTS3_SEGCURSOR_ALL, 0, 0, 0, 1,&csr + ); + if( rc==SQLITE_OK ){ + rc = sqlite3Fts3SegReaderStart(p, &csr, &filter); + } -/* -** This function is part of the test interface for the query parser. It -** writes a text representation of the query expression pExpr into the -** buffer pointed to by argument zBuf. It is assumed that zBuf is large -** enough to store the required text representation. -*/ -static void exprToString(Fts3Expr *pExpr, char *zBuf){ - switch( pExpr->eType ){ - case FTSQUERY_PHRASE: { - Fts3Phrase *pPhrase = pExpr->pPhrase; - int i; - zBuf += sprintf(zBuf, "PHRASE %d %d", pPhrase->iColumn, pPhrase->isNot); - for(i=0; inToken; i++){ - zBuf += sprintf(zBuf," %.*s",pPhrase->aToken[i].n,pPhrase->aToken[i].z); - zBuf += sprintf(zBuf,"%s", (pPhrase->aToken[i].isPrefix?"+":"")); + if( rc==SQLITE_OK ){ + while( SQLITE_ROW==(rc = sqlite3Fts3SegReaderStep(p, &csr)) ){ + char *pCsr = csr.aDoclist; + char *pEnd = &pCsr[csr.nDoclist]; + + i64 iDocid = 0; + i64 iCol = 0; + i64 iPos = 0; + + pCsr += sqlite3Fts3GetVarint(pCsr, &iDocid); + while( pCsrnNear); - break; - case FTSQUERY_NOT: - zBuf += sprintf(zBuf, "NOT "); - break; - case FTSQUERY_AND: - zBuf += sprintf(zBuf, "AND "); - break; - case FTSQUERY_OR: - zBuf += sprintf(zBuf, "OR "); - break; } + sqlite3Fts3SegReaderFinish(&csr); - zBuf += sprintf(zBuf, "{"); - exprToString(pExpr->pLeft, zBuf); - zBuf += strlen(zBuf); - zBuf += sprintf(zBuf, "} "); - - zBuf += sprintf(zBuf, "{"); - exprToString(pExpr->pRight, zBuf); - zBuf += strlen(zBuf); - zBuf += sprintf(zBuf, "}"); + *pRc = rc; + return cksum; } /* -** This is the implementation of a scalar SQL function used to test the -** expression parser. It should be called as follows: -** -** fts3_exprtest(, , , ...); -** -** The first argument, , is the name of the fts3 tokenizer used -** to parse the query expression (see README.tokenizers). The second argument -** is the query expression to parse. Each subsequent argument is the name -** of a column of the fts3 table that the query expression may refer to. -** For example: +** Check if the contents of the FTS index match the current contents of the +** content table. If no error occurs and the contents do match, set *pbOk +** to true and return SQLITE_OK. Or if the contents do not match, set *pbOk +** to false before returning. ** -** SELECT fts3_exprtest('simple', 'Bill col2:Bloggs', 'col1', 'col2'); +** If an error occurs (e.g. an OOM or IO error), return an SQLite error +** code. The final value of *pbOk is undefined in this case. */ -static void fts3ExprTest( - sqlite3_context *context, - int argc, - sqlite3_value **argv -){ - sqlite3_tokenizer_module const *pModule = 0; - sqlite3_tokenizer *pTokenizer = 0; - int rc; - char **azCol = 0; - const char *zExpr; - int nExpr; - int nCol; - int ii; - Fts3Expr *pExpr; - sqlite3 *db = sqlite3_context_db_handle(context); +static int fts3IntegrityCheck(Fts3Table *p, int *pbOk){ + int rc = SQLITE_OK; /* Return code */ + u64 cksum1 = 0; /* Checksum based on FTS index contents */ + u64 cksum2 = 0; /* Checksum based on %_content contents */ + sqlite3_stmt *pAllLangid = 0; /* Statement to return all language-ids */ - if( argc<3 ){ - sqlite3_result_error(context, - "Usage: fts3_exprtest(tokenizer, expr, col1, ...", -1 - ); - return; + /* This block calculates the checksum according to the FTS index. */ + rc = fts3SqlStmt(p, SQL_SELECT_ALL_LANGID, &pAllLangid, 0); + if( rc==SQLITE_OK ){ + int rc2; + sqlite3_bind_int(pAllLangid, 1, p->nIndex); + while( rc==SQLITE_OK && sqlite3_step(pAllLangid)==SQLITE_ROW ){ + int iLangid = sqlite3_column_int(pAllLangid, 0); + int i; + for(i=0; inIndex; i++){ + cksum1 = cksum1 ^ fts3ChecksumIndex(p, iLangid, i, &rc); + } + } + rc2 = sqlite3_reset(pAllLangid); + if( rc==SQLITE_OK ) rc = rc2; } - rc = queryTestTokenizer(db, - (const char *)sqlite3_value_text(argv[0]), &pModule); - if( rc==SQLITE_NOMEM ){ - sqlite3_result_error_nomem(context); - goto exprtest_out; - }else if( !pModule ){ - sqlite3_result_error(context, "No such tokenizer module", -1); - goto exprtest_out; - } + /* This block calculates the checksum according to the %_content table */ + rc = fts3SqlStmt(p, SQL_SELECT_ALL_LANGID, &pAllLangid, 0); + if( rc==SQLITE_OK ){ + sqlite3_tokenizer_module const *pModule = p->pTokenizer->pModule; + sqlite3_stmt *pStmt = 0; + char *zSql; + + zSql = sqlite3_mprintf("SELECT %s" , p->zReadExprlist); + if( !zSql ){ + rc = SQLITE_NOMEM; + }else{ + rc = sqlite3_prepare_v2(p->db, zSql, -1, &pStmt, 0); + sqlite3_free(zSql); + } - rc = pModule->xCreate(0, 0, &pTokenizer); - assert( rc==SQLITE_NOMEM || rc==SQLITE_OK ); - if( rc==SQLITE_NOMEM ){ - sqlite3_result_error_nomem(context); - goto exprtest_out; - } - pTokenizer->pModule = pModule; + while( rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pStmt) ){ + i64 iDocid = sqlite3_column_int64(pStmt, 0); + int iLang = langidFromSelect(p, pStmt); + int iCol; - zExpr = (const char *)sqlite3_value_text(argv[1]); - nExpr = sqlite3_value_bytes(argv[1]); - nCol = argc-2; - azCol = (char **)sqlite3_malloc(nCol*sizeof(char *)); - if( !azCol ){ - sqlite3_result_error_nomem(context); - goto exprtest_out; - } - for(ii=0; iinColumn; iCol++){ + const char *zText = (const char *)sqlite3_column_text(pStmt, iCol+1); + int nText = sqlite3_column_bytes(pStmt, iCol+1); + sqlite3_tokenizer_cursor *pT = 0; - rc = sqlite3Fts3ExprParse( - pTokenizer, azCol, nCol, nCol, zExpr, nExpr, &pExpr - ); - if( rc==SQLITE_NOMEM ){ - sqlite3_result_error_nomem(context); - goto exprtest_out; - }else if( rc==SQLITE_OK ){ - char zBuf[4096]; - exprToString(pExpr, zBuf); - sqlite3_result_text(context, zBuf, -1, SQLITE_TRANSIENT); - sqlite3Fts3ExprFree(pExpr); - }else{ - sqlite3_result_error(context, "Error parsing expression", -1); - } + rc = sqlite3Fts3OpenTokenizer(p->pTokenizer, iLang, zText, nText, &pT); + while( rc==SQLITE_OK ){ + char const *zToken; /* Buffer containing token */ + int nToken; /* Number of bytes in token */ + int iDum1, iDum2; /* Dummy variables */ + int iPos; /* Position of token in zText */ + + rc = pModule->xNext(pT, &zToken, &nToken, &iDum1, &iDum2, &iPos); + if( rc==SQLITE_OK ){ + int i; + cksum2 = cksum2 ^ fts3ChecksumEntry( + zToken, nToken, iLang, 0, iDocid, iCol, iPos + ); + for(i=1; inIndex; i++){ + if( p->aIndex[i].nPrefix<=nToken ){ + cksum2 = cksum2 ^ fts3ChecksumEntry( + zToken, p->aIndex[i].nPrefix, iLang, i, iDocid, iCol, iPos + ); + } + } + } + } + if( pT ) pModule->xClose(pT); + if( rc==SQLITE_DONE ) rc = SQLITE_OK; + } + } -exprtest_out: - if( pModule && pTokenizer ){ - rc = pModule->xDestroy(pTokenizer); + sqlite3_finalize(pStmt); } - sqlite3_free(azCol); -} -/* -** Register the query expression parser test function fts3_exprtest() -** with database connection db. -*/ -SQLITE_PRIVATE void sqlite3Fts3ExprInitTestInterface(sqlite3* db){ - sqlite3_create_function( - db, "fts3_exprtest", -1, SQLITE_UTF8, 0, fts3ExprTest, 0, 0 - ); + *pbOk = (cksum1==cksum2); + return rc; } -#endif -#endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) */ - -/************** End of fts3_expr.c *******************************************/ -/************** Begin file fts3_hash.c ***************************************/ /* -** 2001 September 22 +** Run the integrity-check. If no error occurs and the current contents of +** the FTS index are correct, return SQLITE_OK. Or, if the contents of the +** FTS index are incorrect, return SQLITE_CORRUPT_VTAB. ** -** The author disclaims copyright to this source code. In place of -** a legal notice, here is a blessing: +** Or, if an error (e.g. an OOM or IO error) occurs, return an SQLite +** error code. ** -** May you do good and not evil. -** May you find forgiveness for yourself and forgive others. -** May you share freely, never taking more than you give. +** The integrity-check works as follows. For each token and indexed token +** prefix in the document set, a 64-bit checksum is calculated (by code +** in fts3ChecksumEntry()) based on the following: ** -************************************************************************* -** This is the implementation of generic hash-tables used in SQLite. -** We've modified it slightly to serve as a standalone hash table -** implementation for the full-text indexing module. -*/ - -/* -** The code in this file is only compiled if: +** + The index number (0 for the main index, 1 for the first prefix +** index etc.), +** + The token (or token prefix) text itself, +** + The language-id of the row it appears in, +** + The docid of the row it appears in, +** + The column it appears in, and +** + The tokens position within that column. ** -** * The FTS3 module is being built as an extension -** (in which case SQLITE_CORE is not defined), or +** The checksums for all entries in the index are XORed together to create +** a single checksum for the entire index. ** -** * The FTS3 module is being built into the core of -** SQLite (in which case SQLITE_ENABLE_FTS3 is defined). -*/ -#if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) - - - -/* -** Malloc and Free functions -*/ -static void *fts3HashMalloc(int n){ - void *p = sqlite3_malloc(n); - if( p ){ - memset(p, 0, n); - } - return p; -} -static void fts3HashFree(void *p){ - sqlite3_free(p); -} - -/* Turn bulk memory into a hash table object by initializing the -** fields of the Hash structure. +** The integrity-check code calculates the same checksum in two ways: ** -** "pNew" is a pointer to the hash table that is to be initialized. -** keyClass is one of the constants -** FTS3_HASH_BINARY or FTS3_HASH_STRING. The value of keyClass -** determines what kind of key the hash table will use. "copyKey" is -** true if the hash table should make its own private copy of keys and -** false if it should just use the supplied pointer. +** 1. By scanning the contents of the FTS index, and +** 2. By scanning and tokenizing the content table. +** +** If the two checksums are identical, the integrity-check is deemed to have +** passed. */ -SQLITE_PRIVATE void sqlite3Fts3HashInit(fts3Hash *pNew, int keyClass, int copyKey){ - assert( pNew!=0 ); - assert( keyClass>=FTS3_HASH_STRING && keyClass<=FTS3_HASH_BINARY ); - pNew->keyClass = keyClass; - pNew->copyKey = copyKey; - pNew->first = 0; - pNew->count = 0; - pNew->htsize = 0; - pNew->ht = 0; +static int fts3DoIntegrityCheck( + Fts3Table *p /* FTS3 table handle */ +){ + int rc; + int bOk = 0; + rc = fts3IntegrityCheck(p, &bOk); + if( rc==SQLITE_OK && bOk==0 ) rc = SQLITE_CORRUPT_VTAB; + return rc; } -/* Remove all entries from a hash table. Reclaim all memory. -** Call this routine to delete a hash table or to reset a hash table -** to the empty state. +/* +** Handle a 'special' INSERT of the form: +** +** "INSERT INTO tbl(tbl) VALUES()" +** +** Argument pVal contains the result of . Currently the only +** meaningful value to insert is the text 'optimize'. */ -SQLITE_PRIVATE void sqlite3Fts3HashClear(fts3Hash *pH){ - fts3HashElem *elem; /* For looping over all elements of the table */ +static int fts3SpecialInsert(Fts3Table *p, sqlite3_value *pVal){ + int rc; /* Return Code */ + const char *zVal = (const char *)sqlite3_value_text(pVal); + int nVal = sqlite3_value_bytes(pVal); - assert( pH!=0 ); - elem = pH->first; - pH->first = 0; - fts3HashFree(pH->ht); - pH->ht = 0; - pH->htsize = 0; - while( elem ){ - fts3HashElem *next_elem = elem->next; - if( pH->copyKey && elem->pKey ){ - fts3HashFree(elem->pKey); - } - fts3HashFree(elem); - elem = next_elem; + if( !zVal ){ + return SQLITE_NOMEM; + }else if( nVal==8 && 0==sqlite3_strnicmp(zVal, "optimize", 8) ){ + rc = fts3DoOptimize(p, 0); + }else if( nVal==7 && 0==sqlite3_strnicmp(zVal, "rebuild", 7) ){ + rc = fts3DoRebuild(p); + }else if( nVal==15 && 0==sqlite3_strnicmp(zVal, "integrity-check", 15) ){ + rc = fts3DoIntegrityCheck(p); + }else if( nVal>6 && 0==sqlite3_strnicmp(zVal, "merge=", 6) ){ + rc = fts3DoIncrmerge(p, &zVal[6]); + }else if( nVal>10 && 0==sqlite3_strnicmp(zVal, "automerge=", 10) ){ + rc = fts3DoAutoincrmerge(p, &zVal[10]); +#ifdef SQLITE_TEST + }else if( nVal>9 && 0==sqlite3_strnicmp(zVal, "nodesize=", 9) ){ + p->nNodeSize = atoi(&zVal[9]); + rc = SQLITE_OK; + }else if( nVal>11 && 0==sqlite3_strnicmp(zVal, "maxpending=", 9) ){ + p->nMaxPendingData = atoi(&zVal[11]); + rc = SQLITE_OK; +#endif + }else{ + rc = SQLITE_ERROR; } - pH->count = 0; + + return rc; } /* -** Hash and comparison functions when the mode is FTS3_HASH_STRING +** Delete all cached deferred doclists. Deferred doclists are cached +** (allocated) by the sqlite3Fts3CacheDeferredDoclists() function. */ -static int fts3StrHash(const void *pKey, int nKey){ - const char *z = (const char *)pKey; - int h = 0; - if( nKey<=0 ) nKey = (int) strlen(z); - while( nKey > 0 ){ - h = (h<<3) ^ h ^ *z++; - nKey--; +SQLITE_PRIVATE void sqlite3Fts3FreeDeferredDoclists(Fts3Cursor *pCsr){ + Fts3DeferredToken *pDef; + for(pDef=pCsr->pDeferred; pDef; pDef=pDef->pNext){ + fts3PendingListDelete(pDef->pList); + pDef->pList = 0; } - return h & 0x7fffffff; -} -static int fts3StrCompare(const void *pKey1, int n1, const void *pKey2, int n2){ - if( n1!=n2 ) return 1; - return strncmp((const char*)pKey1,(const char*)pKey2,n1); } /* -** Hash and comparison functions when the mode is FTS3_HASH_BINARY +** Free all entries in the pCsr->pDeffered list. Entries are added to +** this list using sqlite3Fts3DeferToken(). */ -static int fts3BinHash(const void *pKey, int nKey){ - int h = 0; - const char *z = (const char *)pKey; - while( nKey-- > 0 ){ - h = (h<<3) ^ h ^ *(z++); +SQLITE_PRIVATE void sqlite3Fts3FreeDeferredTokens(Fts3Cursor *pCsr){ + Fts3DeferredToken *pDef; + Fts3DeferredToken *pNext; + for(pDef=pCsr->pDeferred; pDef; pDef=pNext){ + pNext = pDef->pNext; + fts3PendingListDelete(pDef->pList); + sqlite3_free(pDef); } - return h & 0x7fffffff; -} -static int fts3BinCompare(const void *pKey1, int n1, const void *pKey2, int n2){ - if( n1!=n2 ) return 1; - return memcmp(pKey1,pKey2,n1); + pCsr->pDeferred = 0; } /* -** Return a pointer to the appropriate hash function given the key class. -** -** The C syntax in this function definition may be unfamilar to some -** programmers, so we provide the following additional explanation: +** Generate deferred-doclists for all tokens in the pCsr->pDeferred list +** based on the row that pCsr currently points to. ** -** The name of the function is "ftsHashFunction". The function takes a -** single parameter "keyClass". The return value of ftsHashFunction() -** is a pointer to another function. Specifically, the return value -** of ftsHashFunction() is a pointer to a function that takes two parameters -** with types "const void*" and "int" and returns an "int". +** A deferred-doclist is like any other doclist with position information +** included, except that it only contains entries for a single row of the +** table, not for all rows. */ -static int (*ftsHashFunction(int keyClass))(const void*,int){ - if( keyClass==FTS3_HASH_STRING ){ - return &fts3StrHash; - }else{ - assert( keyClass==FTS3_HASH_BINARY ); - return &fts3BinHash; +SQLITE_PRIVATE int sqlite3Fts3CacheDeferredDoclists(Fts3Cursor *pCsr){ + int rc = SQLITE_OK; /* Return code */ + if( pCsr->pDeferred ){ + int i; /* Used to iterate through table columns */ + sqlite3_int64 iDocid; /* Docid of the row pCsr points to */ + Fts3DeferredToken *pDef; /* Used to iterate through deferred tokens */ + + Fts3Table *p = (Fts3Table *)pCsr->base.pVtab; + sqlite3_tokenizer *pT = p->pTokenizer; + sqlite3_tokenizer_module const *pModule = pT->pModule; + + assert( pCsr->isRequireSeek==0 ); + iDocid = sqlite3_column_int64(pCsr->pStmt, 0); + + for(i=0; inColumn && rc==SQLITE_OK; i++){ + const char *zText = (const char *)sqlite3_column_text(pCsr->pStmt, i+1); + sqlite3_tokenizer_cursor *pTC = 0; + + rc = sqlite3Fts3OpenTokenizer(pT, pCsr->iLangid, zText, -1, &pTC); + while( rc==SQLITE_OK ){ + char const *zToken; /* Buffer containing token */ + int nToken; /* Number of bytes in token */ + int iDum1, iDum2; /* Dummy variables */ + int iPos; /* Position of token in zText */ + + rc = pModule->xNext(pTC, &zToken, &nToken, &iDum1, &iDum2, &iPos); + for(pDef=pCsr->pDeferred; pDef && rc==SQLITE_OK; pDef=pDef->pNext){ + Fts3PhraseToken *pPT = pDef->pToken; + if( (pDef->iCol>=p->nColumn || pDef->iCol==i) + && (pPT->bFirst==0 || iPos==0) + && (pPT->n==nToken || (pPT->isPrefix && pPT->nz, pPT->n)) + ){ + fts3PendingListAppend(&pDef->pList, iDocid, i, iPos, &rc); + } + } + } + if( pTC ) pModule->xClose(pTC); + if( rc==SQLITE_DONE ) rc = SQLITE_OK; + } + + for(pDef=pCsr->pDeferred; pDef && rc==SQLITE_OK; pDef=pDef->pNext){ + if( pDef->pList ){ + rc = fts3PendingListAppendVarint(&pDef->pList, 0); + } + } } + + return rc; } -/* -** Return a pointer to the appropriate hash function given the key class. -** -** For help in interpreted the obscure C code in the function definition, -** see the header comment on the previous function. -*/ -static int (*ftsCompareFunction(int keyClass))(const void*,int,const void*,int){ - if( keyClass==FTS3_HASH_STRING ){ - return &fts3StrCompare; - }else{ - assert( keyClass==FTS3_HASH_BINARY ); - return &fts3BinCompare; +SQLITE_PRIVATE int sqlite3Fts3DeferredTokenList( + Fts3DeferredToken *p, + char **ppData, + int *pnData +){ + char *pRet; + int nSkip; + sqlite3_int64 dummy; + + *ppData = 0; + *pnData = 0; + + if( p->pList==0 ){ + return SQLITE_OK; } + + pRet = (char *)sqlite3_malloc(p->pList->nData); + if( !pRet ) return SQLITE_NOMEM; + + nSkip = sqlite3Fts3GetVarint(p->pList->aData, &dummy); + *pnData = p->pList->nData - nSkip; + *ppData = pRet; + + memcpy(pRet, &p->pList->aData[nSkip], *pnData); + return SQLITE_OK; } -/* Link an element into the hash table +/* +** Add an entry for token pToken to the pCsr->pDeferred list. */ -static void fts3HashInsertElement( - fts3Hash *pH, /* The complete hash table */ - struct _fts3ht *pEntry, /* The entry into which pNew is inserted */ - fts3HashElem *pNew /* The element to be inserted */ +SQLITE_PRIVATE int sqlite3Fts3DeferToken( + Fts3Cursor *pCsr, /* Fts3 table cursor */ + Fts3PhraseToken *pToken, /* Token to defer */ + int iCol /* Column that token must appear in (or -1) */ ){ - fts3HashElem *pHead; /* First element already in pEntry */ - pHead = pEntry->chain; - if( pHead ){ - pNew->next = pHead; - pNew->prev = pHead->prev; - if( pHead->prev ){ pHead->prev->next = pNew; } - else { pH->first = pNew; } - pHead->prev = pNew; - }else{ - pNew->next = pH->first; - if( pH->first ){ pH->first->prev = pNew; } - pNew->prev = 0; - pH->first = pNew; + Fts3DeferredToken *pDeferred; + pDeferred = sqlite3_malloc(sizeof(*pDeferred)); + if( !pDeferred ){ + return SQLITE_NOMEM; } - pEntry->count++; - pEntry->chain = pNew; -} - + memset(pDeferred, 0, sizeof(*pDeferred)); + pDeferred->pToken = pToken; + pDeferred->pNext = pCsr->pDeferred; + pDeferred->iCol = iCol; + pCsr->pDeferred = pDeferred; -/* Resize the hash table so that it cantains "new_size" buckets. -** "new_size" must be a power of 2. The hash table might fail -** to resize if sqliteMalloc() fails. -*/ -static void fts3Rehash(fts3Hash *pH, int new_size){ - struct _fts3ht *new_ht; /* The new hash table */ - fts3HashElem *elem, *next_elem; /* For looping over existing elements */ - int (*xHash)(const void*,int); /* The hash function */ + assert( pToken->pDeferred==0 ); + pToken->pDeferred = pDeferred; - assert( (new_size & (new_size-1))==0 ); - new_ht = (struct _fts3ht *)fts3HashMalloc( new_size*sizeof(struct _fts3ht) ); - if( new_ht==0 ) return; - fts3HashFree(pH->ht); - pH->ht = new_ht; - pH->htsize = new_size; - xHash = ftsHashFunction(pH->keyClass); - for(elem=pH->first, pH->first=0; elem; elem = next_elem){ - int h = (*xHash)(elem->pKey, elem->nKey) & (new_size-1); - next_elem = elem->next; - fts3HashInsertElement(pH, &new_ht[h], elem); - } + return SQLITE_OK; } -/* This function (for internal use only) locates an element in an -** hash table that matches the given key. The hash for this key has -** already been computed and is passed as the 4th parameter. +/* +** SQLite value pRowid contains the rowid of a row that may or may not be +** present in the FTS3 table. If it is, delete it and adjust the contents +** of subsiduary data structures accordingly. */ -static fts3HashElem *fts3FindElementByHash( - const fts3Hash *pH, /* The pH to be searched */ - const void *pKey, /* The key we are searching for */ - int nKey, - int h /* The hash for this key. */ +static int fts3DeleteByRowid( + Fts3Table *p, + sqlite3_value *pRowid, + int *pnDoc, + u32 *aSzDel ){ - fts3HashElem *elem; /* Used to loop thru the element list */ - int count; /* Number of elements left to test */ - int (*xCompare)(const void*,int,const void*,int); /* comparison function */ - - if( pH->ht ){ - struct _fts3ht *pEntry = &pH->ht[h]; - elem = pEntry->chain; - count = pEntry->count; - xCompare = ftsCompareFunction(pH->keyClass); - while( count-- && elem ){ - if( (*xCompare)(elem->pKey,elem->nKey,pKey,nKey)==0 ){ - return elem; + int isEmpty = 0; + int rc = fts3IsEmpty(p, pRowid, &isEmpty); + if( rc==SQLITE_OK ){ + if( isEmpty ){ + /* Deleting this row means the whole table is empty. In this case + ** delete the contents of all three tables and throw away any + ** data in the pendingTerms hash table. */ + rc = fts3DeleteAll(p, 1); + *pnDoc = *pnDoc - 1; + }else{ + fts3DeleteTerms(&rc, p, pRowid, aSzDel); + if( p->zContentTbl==0 ){ + fts3SqlExec(&rc, p, SQL_DELETE_CONTENT, &pRowid); + if( sqlite3_changes(p->db) ) *pnDoc = *pnDoc - 1; + }else{ + *pnDoc = *pnDoc - 1; + } + if( p->bHasDocsize ){ + fts3SqlExec(&rc, p, SQL_DELETE_DOCSIZE, &pRowid); } - elem = elem->next; } } - return 0; + + return rc; } -/* Remove a single entry from the hash table given a pointer to that -** element and a hash on the element's key. +/* +** This function does the work for the xUpdate method of FTS3 virtual +** tables. The schema of the virtual table being: +** +** CREATE TABLE
    ( +** , +**
    HIDDEN, +** docid HIDDEN, +** HIDDEN +** ); +** +** */ -static void fts3RemoveElementByHash( - fts3Hash *pH, /* The pH containing "elem" */ - fts3HashElem* elem, /* The element to be removed from the pH */ - int h /* Hash value for the element */ +SQLITE_PRIVATE int sqlite3Fts3UpdateMethod( + sqlite3_vtab *pVtab, /* FTS3 vtab object */ + int nArg, /* Size of argument array */ + sqlite3_value **apVal, /* Array of arguments */ + sqlite_int64 *pRowid /* OUT: The affected (or effected) rowid */ ){ - struct _fts3ht *pEntry; - if( elem->prev ){ - elem->prev->next = elem->next; - }else{ - pH->first = elem->next; + Fts3Table *p = (Fts3Table *)pVtab; + int rc = SQLITE_OK; /* Return Code */ + int isRemove = 0; /* True for an UPDATE or DELETE */ + u32 *aSzIns = 0; /* Sizes of inserted documents */ + u32 *aSzDel; /* Sizes of deleted documents */ + int nChng = 0; /* Net change in number of documents */ + int bInsertDone = 0; + + assert( p->pSegments==0 ); + assert( + nArg==1 /* DELETE operations */ + || nArg==(2 + p->nColumn + 3) /* INSERT or UPDATE operations */ + ); + + /* Check for a "special" INSERT operation. One of the form: + ** + ** INSERT INTO xyz(xyz) VALUES('command'); + */ + if( nArg>1 + && sqlite3_value_type(apVal[0])==SQLITE_NULL + && sqlite3_value_type(apVal[p->nColumn+2])!=SQLITE_NULL + ){ + rc = fts3SpecialInsert(p, apVal[p->nColumn+2]); + goto update_out; } - if( elem->next ){ - elem->next->prev = elem->prev; + + if( nArg>1 && sqlite3_value_int(apVal[2 + p->nColumn + 2])<0 ){ + rc = SQLITE_CONSTRAINT; + goto update_out; } - pEntry = &pH->ht[h]; - if( pEntry->chain==elem ){ - pEntry->chain = elem->next; + + /* Allocate space to hold the change in document sizes */ + aSzIns = sqlite3_malloc( sizeof(aSzIns[0])*(p->nColumn+1)*2 ); + if( aSzIns==0 ){ + rc = SQLITE_NOMEM; + goto update_out; } - pEntry->count--; - if( pEntry->count<=0 ){ - pEntry->chain = 0; + aSzDel = &aSzIns[p->nColumn+1]; + memset(aSzIns, 0, sizeof(aSzIns[0])*(p->nColumn+1)*2); + + /* If this is an INSERT operation, or an UPDATE that modifies the rowid + ** value, then this operation requires constraint handling. + ** + ** If the on-conflict mode is REPLACE, this means that the existing row + ** should be deleted from the database before inserting the new row. Or, + ** if the on-conflict mode is other than REPLACE, then this method must + ** detect the conflict and return SQLITE_CONSTRAINT before beginning to + ** modify the database file. + */ + if( nArg>1 && p->zContentTbl==0 ){ + /* Find the value object that holds the new rowid value. */ + sqlite3_value *pNewRowid = apVal[3+p->nColumn]; + if( sqlite3_value_type(pNewRowid)==SQLITE_NULL ){ + pNewRowid = apVal[1]; + } + + if( sqlite3_value_type(pNewRowid)!=SQLITE_NULL && ( + sqlite3_value_type(apVal[0])==SQLITE_NULL + || sqlite3_value_int64(apVal[0])!=sqlite3_value_int64(pNewRowid) + )){ + /* The new rowid is not NULL (in this case the rowid will be + ** automatically assigned and there is no chance of a conflict), and + ** the statement is either an INSERT or an UPDATE that modifies the + ** rowid column. So if the conflict mode is REPLACE, then delete any + ** existing row with rowid=pNewRowid. + ** + ** Or, if the conflict mode is not REPLACE, insert the new record into + ** the %_content table. If we hit the duplicate rowid constraint (or any + ** other error) while doing so, return immediately. + ** + ** This branch may also run if pNewRowid contains a value that cannot + ** be losslessly converted to an integer. In this case, the eventual + ** call to fts3InsertData() (either just below or further on in this + ** function) will return SQLITE_MISMATCH. If fts3DeleteByRowid is + ** invoked, it will delete zero rows (since no row will have + ** docid=$pNewRowid if $pNewRowid is not an integer value). + */ + if( sqlite3_vtab_on_conflict(p->db)==SQLITE_REPLACE ){ + rc = fts3DeleteByRowid(p, pNewRowid, &nChng, aSzDel); + }else{ + rc = fts3InsertData(p, apVal, pRowid); + bInsertDone = 1; + } + } } - if( pH->copyKey && elem->pKey ){ - fts3HashFree(elem->pKey); + if( rc!=SQLITE_OK ){ + goto update_out; } - fts3HashFree( elem ); - pH->count--; - if( pH->count<=0 ){ - assert( pH->first==0 ); - assert( pH->count==0 ); - fts3HashClear(pH); + + /* If this is a DELETE or UPDATE operation, remove the old record. */ + if( sqlite3_value_type(apVal[0])!=SQLITE_NULL ){ + assert( sqlite3_value_type(apVal[0])==SQLITE_INTEGER ); + rc = fts3DeleteByRowid(p, apVal[0], &nChng, aSzDel); + isRemove = 1; + } + + /* If this is an INSERT or UPDATE operation, insert the new record. */ + if( nArg>1 && rc==SQLITE_OK ){ + int iLangid = sqlite3_value_int(apVal[2 + p->nColumn + 2]); + if( bInsertDone==0 ){ + rc = fts3InsertData(p, apVal, pRowid); + if( rc==SQLITE_CONSTRAINT && p->zContentTbl==0 ){ + rc = FTS_CORRUPT_VTAB; + } + } + if( rc==SQLITE_OK && (!isRemove || *pRowid!=p->iPrevDocid ) ){ + rc = fts3PendingTermsDocid(p, iLangid, *pRowid); + } + if( rc==SQLITE_OK ){ + assert( p->iPrevDocid==*pRowid ); + rc = fts3InsertTerms(p, iLangid, apVal, aSzIns); + } + if( p->bHasDocsize ){ + fts3InsertDocsize(&rc, p, aSzIns); + } + nChng++; } -} -/* Attempt to locate an element of the hash table pH with a key -** that matches pKey,nKey. Return the data for this element if it is -** found, or NULL if there is no match. -*/ -SQLITE_PRIVATE void *sqlite3Fts3HashFind(const fts3Hash *pH, const void *pKey, int nKey){ - int h; /* A hash on key */ - fts3HashElem *elem; /* The element that matches key */ - int (*xHash)(const void*,int); /* The hash function */ + if( p->bFts4 ){ + fts3UpdateDocTotals(&rc, p, aSzIns, aSzDel, nChng); + } - if( pH==0 || pH->ht==0 ) return 0; - xHash = ftsHashFunction(pH->keyClass); - assert( xHash!=0 ); - h = (*xHash)(pKey,nKey); - assert( (pH->htsize & (pH->htsize-1))==0 ); - elem = fts3FindElementByHash(pH,pKey,nKey, h & (pH->htsize-1)); - return elem ? elem->data : 0; + update_out: + sqlite3_free(aSzIns); + sqlite3Fts3SegmentsClose(p); + return rc; } -/* Insert an element into the hash table pH. The key is pKey,nKey -** and the data is "data". -** -** If no element exists with a matching key, then a new -** element is created. A copy of the key is made if the copyKey -** flag is set. NULL is returned. -** -** If another element already exists with the same key, then the -** new data replaces the old data and the old data is returned. -** The key is not copied in this instance. If a malloc fails, then -** the new data is returned and the hash table is unchanged. -** -** If the "data" parameter to this function is NULL, then the -** element corresponding to "key" is removed from the hash table. +/* +** Flush any data in the pending-terms hash table to disk. If successful, +** merge all segments in the database (including the new segment, if +** there was any data to flush) into a single segment. */ -SQLITE_PRIVATE void *sqlite3Fts3HashInsert( - fts3Hash *pH, /* The hash table to insert into */ - const void *pKey, /* The key */ - int nKey, /* Number of bytes in the key */ - void *data /* The data */ -){ - int hraw; /* Raw hash value of the key */ - int h; /* the hash of the key modulo hash table size */ - fts3HashElem *elem; /* Used to loop thru the element list */ - fts3HashElem *new_elem; /* New element added to the pH */ - int (*xHash)(const void*,int); /* The hash function */ - - assert( pH!=0 ); - xHash = ftsHashFunction(pH->keyClass); - assert( xHash!=0 ); - hraw = (*xHash)(pKey, nKey); - assert( (pH->htsize & (pH->htsize-1))==0 ); - h = hraw & (pH->htsize-1); - elem = fts3FindElementByHash(pH,pKey,nKey,h); - if( elem ){ - void *old_data = elem->data; - if( data==0 ){ - fts3RemoveElementByHash(pH,elem,h); +SQLITE_PRIVATE int sqlite3Fts3Optimize(Fts3Table *p){ + int rc; + rc = sqlite3_exec(p->db, "SAVEPOINT fts3", 0, 0, 0); + if( rc==SQLITE_OK ){ + rc = fts3DoOptimize(p, 1); + if( rc==SQLITE_OK || rc==SQLITE_DONE ){ + int rc2 = sqlite3_exec(p->db, "RELEASE fts3", 0, 0, 0); + if( rc2!=SQLITE_OK ) rc = rc2; }else{ - elem->data = data; - } - return old_data; - } - if( data==0 ) return 0; - if( pH->htsize==0 ){ - fts3Rehash(pH,8); - if( pH->htsize==0 ){ - pH->count = 0; - return data; - } - } - new_elem = (fts3HashElem*)fts3HashMalloc( sizeof(fts3HashElem) ); - if( new_elem==0 ) return data; - if( pH->copyKey && pKey!=0 ){ - new_elem->pKey = fts3HashMalloc( nKey ); - if( new_elem->pKey==0 ){ - fts3HashFree(new_elem); - return data; + sqlite3_exec(p->db, "ROLLBACK TO fts3", 0, 0, 0); + sqlite3_exec(p->db, "RELEASE fts3", 0, 0, 0); } - memcpy((void*)new_elem->pKey, pKey, nKey); - }else{ - new_elem->pKey = (void*)pKey; - } - new_elem->nKey = nKey; - pH->count++; - if( pH->count > pH->htsize ){ - fts3Rehash(pH,pH->htsize*2); } - assert( pH->htsize>0 ); - assert( (pH->htsize & (pH->htsize-1))==0 ); - h = hraw & (pH->htsize-1); - fts3HashInsertElement(pH, &pH->ht[h], new_elem); - new_elem->data = data; - return 0; + sqlite3Fts3SegmentsClose(p); + return rc; } -#endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) */ +#endif -/************** End of fts3_hash.c *******************************************/ -/************** Begin file fts3_porter.c *************************************/ +/************** End of fts3_write.c ******************************************/ +/************** Begin file fts3_snippet.c ************************************/ /* -** 2006 September 30 +** 2009 Oct 23 ** ** The author disclaims copyright to this source code. In place of ** a legal notice, here is a blessing: @@ -101889,1102 +131856,1764 @@ SQLITE_PRIVATE void *sqlite3Fts3HashInsert( ** May you find forgiveness for yourself and forgive others. ** May you share freely, never taking more than you give. ** -************************************************************************* -** Implementation of the full-text-search tokenizer that implements -** a Porter stemmer. +****************************************************************************** */ -/* -** The code in this file is only compiled if: -** -** * The FTS3 module is being built as an extension -** (in which case SQLITE_CORE is not defined), or -** -** * The FTS3 module is being built into the core of -** SQLite (in which case SQLITE_ENABLE_FTS3 is defined). -*/ #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) - - +/* #include */ +/* #include */ /* -** Class derived from sqlite3_tokenizer +** Characters that may appear in the second argument to matchinfo(). */ -typedef struct porter_tokenizer { - sqlite3_tokenizer base; /* Base class */ -} porter_tokenizer; +#define FTS3_MATCHINFO_NPHRASE 'p' /* 1 value */ +#define FTS3_MATCHINFO_NCOL 'c' /* 1 value */ +#define FTS3_MATCHINFO_NDOC 'n' /* 1 value */ +#define FTS3_MATCHINFO_AVGLENGTH 'a' /* nCol values */ +#define FTS3_MATCHINFO_LENGTH 'l' /* nCol values */ +#define FTS3_MATCHINFO_LCS 's' /* nCol values */ +#define FTS3_MATCHINFO_HITS 'x' /* 3*nCol*nPhrase values */ /* -** Class derived from sqlit3_tokenizer_cursor +** The default value for the second argument to matchinfo(). */ -typedef struct porter_tokenizer_cursor { - sqlite3_tokenizer_cursor base; - const char *zInput; /* input we are tokenizing */ - int nInput; /* size of the input */ - int iOffset; /* current position in zInput */ - int iToken; /* index of next token to be returned */ - char *zToken; /* storage for current token */ - int nAllocated; /* space allocated to zToken buffer */ -} porter_tokenizer_cursor; - - -/* Forward declaration */ -static const sqlite3_tokenizer_module porterTokenizerModule; - +#define FTS3_MATCHINFO_DEFAULT "pcx" -/* -** Create a new tokenizer instance. -*/ -static int porterCreate( - int argc, const char * const *argv, - sqlite3_tokenizer **ppTokenizer -){ - porter_tokenizer *t; - t = (porter_tokenizer *) sqlite3_malloc(sizeof(*t)); - if( t==NULL ) return SQLITE_NOMEM; - memset(t, 0, sizeof(*t)); - *ppTokenizer = &t->base; - return SQLITE_OK; -} /* -** Destroy a tokenizer +** Used as an fts3ExprIterate() context when loading phrase doclists to +** Fts3Expr.aDoclist[]/nDoclist. */ -static int porterDestroy(sqlite3_tokenizer *pTokenizer){ - sqlite3_free(pTokenizer); - return SQLITE_OK; -} +typedef struct LoadDoclistCtx LoadDoclistCtx; +struct LoadDoclistCtx { + Fts3Cursor *pCsr; /* FTS3 Cursor */ + int nPhrase; /* Number of phrases seen so far */ + int nToken; /* Number of tokens seen so far */ +}; /* -** Prepare to begin tokenizing a particular string. The input -** string to be tokenized is zInput[0..nInput-1]. A cursor -** used to incrementally tokenize this string is returned in -** *ppCursor. +** The following types are used as part of the implementation of the +** fts3BestSnippet() routine. */ -static int porterOpen( - sqlite3_tokenizer *pTokenizer, /* The tokenizer */ - const char *zInput, int nInput, /* String to be tokenized */ - sqlite3_tokenizer_cursor **ppCursor /* OUT: Tokenization cursor */ -){ - porter_tokenizer_cursor *c; +typedef struct SnippetIter SnippetIter; +typedef struct SnippetPhrase SnippetPhrase; +typedef struct SnippetFragment SnippetFragment; - c = (porter_tokenizer_cursor *) sqlite3_malloc(sizeof(*c)); - if( c==NULL ) return SQLITE_NOMEM; +struct SnippetIter { + Fts3Cursor *pCsr; /* Cursor snippet is being generated from */ + int iCol; /* Extract snippet from this column */ + int nSnippet; /* Requested snippet length (in tokens) */ + int nPhrase; /* Number of phrases in query */ + SnippetPhrase *aPhrase; /* Array of size nPhrase */ + int iCurrent; /* First token of current snippet */ +}; - c->zInput = zInput; - if( zInput==0 ){ - c->nInput = 0; - }else if( nInput<0 ){ - c->nInput = (int)strlen(zInput); - }else{ - c->nInput = nInput; - } - c->iOffset = 0; /* start tokenizing at the beginning */ - c->iToken = 0; - c->zToken = NULL; /* no space allocated, yet. */ - c->nAllocated = 0; +struct SnippetPhrase { + int nToken; /* Number of tokens in phrase */ + char *pList; /* Pointer to start of phrase position list */ + int iHead; /* Next value in position list */ + char *pHead; /* Position list data following iHead */ + int iTail; /* Next value in trailing position list */ + char *pTail; /* Position list data following iTail */ +}; - *ppCursor = &c->base; - return SQLITE_OK; -} +struct SnippetFragment { + int iCol; /* Column snippet is extracted from */ + int iPos; /* Index of first token in snippet */ + u64 covered; /* Mask of query phrases covered */ + u64 hlmask; /* Mask of snippet terms to highlight */ +}; /* -** Close a tokenization cursor previously opened by a call to -** porterOpen() above. -*/ -static int porterClose(sqlite3_tokenizer_cursor *pCursor){ - porter_tokenizer_cursor *c = (porter_tokenizer_cursor *) pCursor; - sqlite3_free(c->zToken); - sqlite3_free(c); - return SQLITE_OK; -} -/* -** Vowel or consonant +** This type is used as an fts3ExprIterate() context object while +** accumulating the data returned by the matchinfo() function. */ -static const char cType[] = { - 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, - 1, 1, 1, 2, 1 +typedef struct MatchInfo MatchInfo; +struct MatchInfo { + Fts3Cursor *pCursor; /* FTS3 Cursor */ + int nCol; /* Number of columns in table */ + int nPhrase; /* Number of matchable phrases in query */ + sqlite3_int64 nDoc; /* Number of docs in database */ + u32 *aMatchinfo; /* Pre-allocated buffer */ }; + + /* -** isConsonant() and isVowel() determine if their first character in -** the string they point to is a consonant or a vowel, according -** to Porter ruls. -** -** A consonate is any letter other than 'a', 'e', 'i', 'o', or 'u'. -** 'Y' is a consonant unless it follows another consonant, -** in which case it is a vowel. -** -** In these routine, the letters are in reverse order. So the 'y' rule -** is that 'y' is a consonant unless it is followed by another -** consonent. +** The snippet() and offsets() functions both return text values. An instance +** of the following structure is used to accumulate those values while the +** functions are running. See fts3StringAppend() for details. */ -static int isVowel(const char*); -static int isConsonant(const char *z){ - int j; - char x = *z; - if( x==0 ) return 0; - assert( x>='a' && x<='z' ); - j = cType[x-'a']; - if( j<2 ) return j; - return z[1]==0 || isVowel(z + 1); -} -static int isVowel(const char *z){ - int j; - char x = *z; - if( x==0 ) return 0; - assert( x>='a' && x<='z' ); - j = cType[x-'a']; - if( j<2 ) return 1-j; - return isConsonant(z + 1); -} +typedef struct StrBuffer StrBuffer; +struct StrBuffer { + char *z; /* Pointer to buffer containing string */ + int n; /* Length of z in bytes (excl. nul-term) */ + int nAlloc; /* Allocated size of buffer z in bytes */ +}; + /* -** Let any sequence of one or more vowels be represented by V and let -** C be sequence of one or more consonants. Then every word can be -** represented as: +** This function is used to help iterate through a position-list. A position +** list is a list of unique integers, sorted from smallest to largest. Each +** element of the list is represented by an FTS3 varint that takes the value +** of the difference between the current element and the previous one plus +** two. For example, to store the position-list: ** -** [C] (VC){m} [V] +** 4 9 113 ** -** In prose: A word is an optional consonant followed by zero or -** vowel-consonant pairs followed by an optional vowel. "m" is the -** number of vowel consonant pairs. This routine computes the value -** of m for the first i bytes of a word. +** the three varints: ** -** Return true if the m-value for z is 1 or more. In other words, -** return true if z contains at least one vowel that is followed -** by a consonant. +** 6 7 106 ** -** In this routine z[] is in reverse order. So we are really looking -** for an instance of of a consonant followed by a vowel. +** are encoded. +** +** When this function is called, *pp points to the start of an element of +** the list. *piPos contains the value of the previous entry in the list. +** After it returns, *piPos contains the value of the next element of the +** list and *pp is advanced to the following varint. */ -static int m_gt_0(const char *z){ - while( isVowel(z) ){ z++; } - if( *z==0 ) return 0; - while( isConsonant(z) ){ z++; } - return *z!=0; +static void fts3GetDeltaPosition(char **pp, int *piPos){ + int iVal; + *pp += sqlite3Fts3GetVarint32(*pp, &iVal); + *piPos += (iVal-2); } -/* Like mgt0 above except we are looking for a value of m which is -** exactly 1 +/* +** Helper function for fts3ExprIterate() (see below). */ -static int m_eq_1(const char *z){ - while( isVowel(z) ){ z++; } - if( *z==0 ) return 0; - while( isConsonant(z) ){ z++; } - if( *z==0 ) return 0; - while( isVowel(z) ){ z++; } - if( *z==0 ) return 1; - while( isConsonant(z) ){ z++; } - return *z==0; -} +static int fts3ExprIterate2( + Fts3Expr *pExpr, /* Expression to iterate phrases of */ + int *piPhrase, /* Pointer to phrase counter */ + int (*x)(Fts3Expr*,int,void*), /* Callback function to invoke for phrases */ + void *pCtx /* Second argument to pass to callback */ +){ + int rc; /* Return code */ + int eType = pExpr->eType; /* Type of expression node pExpr */ -/* Like mgt0 above except we are looking for a value of m>1 instead -** or m>0 -*/ -static int m_gt_1(const char *z){ - while( isVowel(z) ){ z++; } - if( *z==0 ) return 0; - while( isConsonant(z) ){ z++; } - if( *z==0 ) return 0; - while( isVowel(z) ){ z++; } - if( *z==0 ) return 0; - while( isConsonant(z) ){ z++; } - return *z!=0; + if( eType!=FTSQUERY_PHRASE ){ + assert( pExpr->pLeft && pExpr->pRight ); + rc = fts3ExprIterate2(pExpr->pLeft, piPhrase, x, pCtx); + if( rc==SQLITE_OK && eType!=FTSQUERY_NOT ){ + rc = fts3ExprIterate2(pExpr->pRight, piPhrase, x, pCtx); + } + }else{ + rc = x(pExpr, *piPhrase, pCtx); + (*piPhrase)++; + } + return rc; } /* -** Return TRUE if there is a vowel anywhere within z[0..n-1] +** Iterate through all phrase nodes in an FTS3 query, except those that +** are part of a sub-tree that is the right-hand-side of a NOT operator. +** For each phrase node found, the supplied callback function is invoked. +** +** If the callback function returns anything other than SQLITE_OK, +** the iteration is abandoned and the error code returned immediately. +** Otherwise, SQLITE_OK is returned after a callback has been made for +** all eligible phrase nodes. */ -static int hasVowel(const char *z){ - while( isConsonant(z) ){ z++; } - return *z!=0; +static int fts3ExprIterate( + Fts3Expr *pExpr, /* Expression to iterate phrases of */ + int (*x)(Fts3Expr*,int,void*), /* Callback function to invoke for phrases */ + void *pCtx /* Second argument to pass to callback */ +){ + int iPhrase = 0; /* Variable used as the phrase counter */ + return fts3ExprIterate2(pExpr, &iPhrase, x, pCtx); } /* -** Return TRUE if the word ends in a double consonant. -** -** The text is reversed here. So we are really looking at -** the first two characters of z[]. +** This is an fts3ExprIterate() callback used while loading the doclists +** for each phrase into Fts3Expr.aDoclist[]/nDoclist. See also +** fts3ExprLoadDoclists(). */ -static int doubleConsonant(const char *z){ - return isConsonant(z) && z[0]==z[1] && isConsonant(z+1); +static int fts3ExprLoadDoclistsCb(Fts3Expr *pExpr, int iPhrase, void *ctx){ + int rc = SQLITE_OK; + Fts3Phrase *pPhrase = pExpr->pPhrase; + LoadDoclistCtx *p = (LoadDoclistCtx *)ctx; + + UNUSED_PARAMETER(iPhrase); + + p->nPhrase++; + p->nToken += pPhrase->nToken; + + return rc; } /* -** Return TRUE if the word ends with three letters which -** are consonant-vowel-consonent and where the final consonant -** is not 'w', 'x', or 'y'. +** Load the doclists for each phrase in the query associated with FTS3 cursor +** pCsr. ** -** The word is reversed here. So we are really checking the -** first three letters and the first one cannot be in [wxy]. +** If pnPhrase is not NULL, then *pnPhrase is set to the number of matchable +** phrases in the expression (all phrases except those directly or +** indirectly descended from the right-hand-side of a NOT operator). If +** pnToken is not NULL, then it is set to the number of tokens in all +** matchable phrases of the expression. */ -static int star_oh(const char *z){ - return - z[0]!=0 && isConsonant(z) && - z[0]!='w' && z[0]!='x' && z[0]!='y' && - z[1]!=0 && isVowel(z+1) && - z[2]!=0 && isConsonant(z+2); +static int fts3ExprLoadDoclists( + Fts3Cursor *pCsr, /* Fts3 cursor for current query */ + int *pnPhrase, /* OUT: Number of phrases in query */ + int *pnToken /* OUT: Number of tokens in query */ +){ + int rc; /* Return Code */ + LoadDoclistCtx sCtx = {0,0,0}; /* Context for fts3ExprIterate() */ + sCtx.pCsr = pCsr; + rc = fts3ExprIterate(pCsr->pExpr, fts3ExprLoadDoclistsCb, (void *)&sCtx); + if( pnPhrase ) *pnPhrase = sCtx.nPhrase; + if( pnToken ) *pnToken = sCtx.nToken; + return rc; +} + +static int fts3ExprPhraseCountCb(Fts3Expr *pExpr, int iPhrase, void *ctx){ + (*(int *)ctx)++; + UNUSED_PARAMETER(pExpr); + UNUSED_PARAMETER(iPhrase); + return SQLITE_OK; +} +static int fts3ExprPhraseCount(Fts3Expr *pExpr){ + int nPhrase = 0; + (void)fts3ExprIterate(pExpr, fts3ExprPhraseCountCb, (void *)&nPhrase); + return nPhrase; } /* -** If the word ends with zFrom and xCond() is true for the stem -** of the word that preceeds the zFrom ending, then change the -** ending to zTo. -** -** The input word *pz and zFrom are both in reverse order. zTo -** is in normal order. -** -** Return TRUE if zFrom matches. Return FALSE if zFrom does not -** match. Not that TRUE is returned even if xCond() fails and -** no substitution occurs. +** Advance the position list iterator specified by the first two +** arguments so that it points to the first element with a value greater +** than or equal to parameter iNext. */ -static int stem( - char **pz, /* The word being stemmed (Reversed) */ - const char *zFrom, /* If the ending matches this... (Reversed) */ - const char *zTo, /* ... change the ending to this (not reversed) */ - int (*xCond)(const char*) /* Condition that must be true */ -){ - char *z = *pz; - while( *zFrom && *zFrom==*z ){ z++; zFrom++; } - if( *zFrom!=0 ) return 0; - if( xCond && !xCond(z) ) return 1; - while( *zTo ){ - *(--z) = *(zTo++); +static void fts3SnippetAdvance(char **ppIter, int *piIter, int iNext){ + char *pIter = *ppIter; + if( pIter ){ + int iIter = *piIter; + + while( iIter='A' && c<='Z' ){ - zOut[i] = c - 'A' + 'a'; - }else{ - if( c>='0' && c<='9' ) hasDigit = 1; - zOut[i] = c; +static int fts3SnippetNextCandidate(SnippetIter *pIter){ + int i; /* Loop counter */ + + if( pIter->iCurrent<0 ){ + /* The SnippetIter object has just been initialized. The first snippet + ** candidate always starts at offset 0 (even if this candidate has a + ** score of 0.0). + */ + pIter->iCurrent = 0; + + /* Advance the 'head' iterator of each phrase to the first offset that + ** is greater than or equal to (iNext+nSnippet). + */ + for(i=0; inPhrase; i++){ + SnippetPhrase *pPhrase = &pIter->aPhrase[i]; + fts3SnippetAdvance(&pPhrase->pHead, &pPhrase->iHead, pIter->nSnippet); + } + }else{ + int iStart; + int iEnd = 0x7FFFFFFF; + + for(i=0; inPhrase; i++){ + SnippetPhrase *pPhrase = &pIter->aPhrase[i]; + if( pPhrase->pHead && pPhrase->iHeadiHead; + } + } + if( iEnd==0x7FFFFFFF ){ + return 1; + } + + pIter->iCurrent = iStart = iEnd - pIter->nSnippet + 1; + for(i=0; inPhrase; i++){ + SnippetPhrase *pPhrase = &pIter->aPhrase[i]; + fts3SnippetAdvance(&pPhrase->pHead, &pPhrase->iHead, iEnd+1); + fts3SnippetAdvance(&pPhrase->pTail, &pPhrase->iTail, iStart); } } - mx = hasDigit ? 3 : 10; - if( nIn>mx*2 ){ - for(j=mx, i=nIn-mx; iiCurrent; /* First token of snippet */ + int iScore = 0; /* Score of this snippet */ + int i; /* Loop counter */ + u64 mCover = 0; /* Mask of phrases covered by this snippet */ + u64 mHighlight = 0; /* Mask of tokens to highlight in snippet */ + + for(i=0; inPhrase; i++){ + SnippetPhrase *pPhrase = &pIter->aPhrase[i]; + if( pPhrase->pTail ){ + char *pCsr = pPhrase->pTail; + int iCsr = pPhrase->iTail; + + while( iCsr<(iStart+pIter->nSnippet) ){ + int j; + u64 mPhrase = (u64)1 << i; + u64 mPos = (u64)1 << (iCsr - iStart); + assert( iCsr>=iStart ); + if( (mCover|mCovered)&mPhrase ){ + iScore++; + }else{ + iScore += 1000; + } + mCover |= mPhrase; + + for(j=0; jnToken; j++){ + mHighlight |= (mPos>>j); + } + + if( 0==(*pCsr & 0x0FE) ) break; + fts3GetDeltaPosition(&pCsr, &iCsr); + } } - i = j; } - zOut[i] = 0; - *pnOut = i; + + /* Set the output variables before returning. */ + *piToken = iStart; + *piScore = iScore; + *pmCover = mCover; + *pmHighlight = mHighlight; } +/* +** This function is an fts3ExprIterate() callback used by fts3BestSnippet(). +** Each invocation populates an element of the SnippetIter.aPhrase[] array. +*/ +static int fts3SnippetFindPositions(Fts3Expr *pExpr, int iPhrase, void *ctx){ + SnippetIter *p = (SnippetIter *)ctx; + SnippetPhrase *pPhrase = &p->aPhrase[iPhrase]; + char *pCsr; + int rc; + + pPhrase->nToken = pExpr->pPhrase->nToken; + rc = sqlite3Fts3EvalPhrasePoslist(p->pCsr, pExpr, p->iCol, &pCsr); + assert( rc==SQLITE_OK || pCsr==0 ); + if( pCsr ){ + int iFirst = 0; + pPhrase->pList = pCsr; + fts3GetDeltaPosition(&pCsr, &iFirst); + assert( iFirst>=0 ); + pPhrase->pHead = pCsr; + pPhrase->pTail = pCsr; + pPhrase->iHead = iFirst; + pPhrase->iTail = iFirst; + }else{ + assert( rc!=SQLITE_OK || ( + pPhrase->pList==0 && pPhrase->pHead==0 && pPhrase->pTail==0 + )); + } + + return rc; +} /* -** Stem the input word zIn[0..nIn-1]. Store the output in zOut. -** zOut is at least big enough to hold nIn bytes. Write the actual -** size of the output word (exclusive of the '\0' terminator) into *pnOut. +** Select the fragment of text consisting of nFragment contiguous tokens +** from column iCol that represent the "best" snippet. The best snippet +** is the snippet with the highest score, where scores are calculated +** by adding: ** -** Any upper-case characters in the US-ASCII character set ([A-Z]) -** are converted to lower case. Upper-case UTF characters are -** unchanged. +** (a) +1 point for each occurence of a matchable phrase in the snippet. ** -** Words that are longer than about 20 bytes are stemmed by retaining -** a few bytes from the beginning and the end of the word. If the -** word contains digits, 3 bytes are taken from the beginning and -** 3 bytes from the end. For long words without digits, 10 bytes -** are taken from each end. US-ASCII case folding still applies. -** -** If the input word contains not digits but does characters not -** in [a-zA-Z] then no stemming is attempted and this routine just -** copies the input into the input into the output with US-ASCII -** case folding. +** (b) +1000 points for the first occurence of each matchable phrase in +** the snippet for which the corresponding mCovered bit is not set. ** -** Stemming never increases the length of the word. So there is -** no chance of overflowing the zOut buffer. +** The selected snippet parameters are stored in structure *pFragment before +** returning. The score of the selected snippet is stored in *piScore +** before returning. */ -static void porter_stemmer(const char *zIn, int nIn, char *zOut, int *pnOut){ - int i, j, c; - char zReverse[28]; - char *z, *z2; - if( nIn<3 || nIn>=sizeof(zReverse)-7 ){ - /* The word is too big or too small for the porter stemmer. - ** Fallback to the copy stemmer */ - copy_stemmer(zIn, nIn, zOut, pnOut); - return; +static int fts3BestSnippet( + int nSnippet, /* Desired snippet length */ + Fts3Cursor *pCsr, /* Cursor to create snippet for */ + int iCol, /* Index of column to create snippet from */ + u64 mCovered, /* Mask of phrases already covered */ + u64 *pmSeen, /* IN/OUT: Mask of phrases seen */ + SnippetFragment *pFragment, /* OUT: Best snippet found */ + int *piScore /* OUT: Score of snippet pFragment */ +){ + int rc; /* Return Code */ + int nList; /* Number of phrases in expression */ + SnippetIter sIter; /* Iterates through snippet candidates */ + int nByte; /* Number of bytes of space to allocate */ + int iBestScore = -1; /* Best snippet score found so far */ + int i; /* Loop counter */ + + memset(&sIter, 0, sizeof(sIter)); + + /* Iterate through the phrases in the expression to count them. The same + ** callback makes sure the doclists are loaded for each phrase. + */ + rc = fts3ExprLoadDoclists(pCsr, &nList, 0); + if( rc!=SQLITE_OK ){ + return rc; } - for(i=0, j=sizeof(zReverse)-6; i='A' && c<='Z' ){ - zReverse[j] = c + 'a' - 'A'; - }else if( c>='a' && c<='z' ){ - zReverse[j] = c; - }else{ - /* The use of a character not in [a-zA-Z] means that we fallback - ** to the copy stemmer */ - copy_stemmer(zIn, nIn, zOut, pnOut); - return; - } + + /* Now that it is known how many phrases there are, allocate and zero + ** the required space using malloc(). + */ + nByte = sizeof(SnippetPhrase) * nList; + sIter.aPhrase = (SnippetPhrase *)sqlite3_malloc(nByte); + if( !sIter.aPhrase ){ + return SQLITE_NOMEM; } - memset(&zReverse[sizeof(zReverse)-5], 0, 5); - z = &zReverse[j+1]; + memset(sIter.aPhrase, 0, nByte); + /* Initialize the contents of the SnippetIter object. Then iterate through + ** the set of phrases in the expression to populate the aPhrase[] array. + */ + sIter.pCsr = pCsr; + sIter.iCol = iCol; + sIter.nSnippet = nSnippet; + sIter.nPhrase = nList; + sIter.iCurrent = -1; + (void)fts3ExprIterate(pCsr->pExpr, fts3SnippetFindPositions, (void *)&sIter); - /* Step 1a */ - if( z[0]=='s' ){ - if( - !stem(&z, "sess", "ss", 0) && - !stem(&z, "sei", "i", 0) && - !stem(&z, "ss", "ss", 0) - ){ - z++; + /* Set the *pmSeen output variable. */ + for(i=0; iiCol = iCol; + while( !fts3SnippetNextCandidate(&sIter) ){ + int iPos; + int iScore; + u64 mCover; + u64 mHighlight; + fts3SnippetDetails(&sIter, mCovered, &iPos, &iScore, &mCover, &mHighlight); + assert( iScore>=0 ); + if( iScore>iBestScore ){ + pFragment->iPos = iPos; + pFragment->hlmask = mHighlight; + pFragment->covered = mCover; + iBestScore = iScore; + } } - /* Step 1c */ - if( z[0]=='y' && hasVowel(z+1) ){ - z[0] = 'i'; - } + sqlite3_free(sIter.aPhrase); + *piScore = iBestScore; + return SQLITE_OK; +} - /* Step 2 */ - switch( z[1] ){ - case 'a': - stem(&z, "lanoita", "ate", m_gt_0) || - stem(&z, "lanoit", "tion", m_gt_0); - break; - case 'c': - stem(&z, "icne", "ence", m_gt_0) || - stem(&z, "icna", "ance", m_gt_0); - break; - case 'e': - stem(&z, "rezi", "ize", m_gt_0); - break; - case 'g': - stem(&z, "igol", "log", m_gt_0); - break; - case 'l': - stem(&z, "ilb", "ble", m_gt_0) || - stem(&z, "illa", "al", m_gt_0) || - stem(&z, "iltne", "ent", m_gt_0) || - stem(&z, "ile", "e", m_gt_0) || - stem(&z, "ilsuo", "ous", m_gt_0); - break; - case 'o': - stem(&z, "noitazi", "ize", m_gt_0) || - stem(&z, "noita", "ate", m_gt_0) || - stem(&z, "rota", "ate", m_gt_0); - break; - case 's': - stem(&z, "msila", "al", m_gt_0) || - stem(&z, "ssenevi", "ive", m_gt_0) || - stem(&z, "ssenluf", "ful", m_gt_0) || - stem(&z, "ssensuo", "ous", m_gt_0); - break; - case 't': - stem(&z, "itila", "al", m_gt_0) || - stem(&z, "itivi", "ive", m_gt_0) || - stem(&z, "itilib", "ble", m_gt_0); - break; + +/* +** Append a string to the string-buffer passed as the first argument. +** +** If nAppend is negative, then the length of the string zAppend is +** determined using strlen(). +*/ +static int fts3StringAppend( + StrBuffer *pStr, /* Buffer to append to */ + const char *zAppend, /* Pointer to data to append to buffer */ + int nAppend /* Size of zAppend in bytes (or -1) */ +){ + if( nAppend<0 ){ + nAppend = (int)strlen(zAppend); } - /* Step 3 */ - switch( z[0] ){ - case 'e': - stem(&z, "etaci", "ic", m_gt_0) || - stem(&z, "evita", "", m_gt_0) || - stem(&z, "ezila", "al", m_gt_0); - break; - case 'i': - stem(&z, "itici", "ic", m_gt_0); - break; - case 'l': - stem(&z, "laci", "ic", m_gt_0) || - stem(&z, "luf", "", m_gt_0); - break; - case 's': - stem(&z, "ssen", "", m_gt_0); - break; + /* If there is insufficient space allocated at StrBuffer.z, use realloc() + ** to grow the buffer until so that it is big enough to accomadate the + ** appended data. + */ + if( pStr->n+nAppend+1>=pStr->nAlloc ){ + int nAlloc = pStr->nAlloc+nAppend+100; + char *zNew = sqlite3_realloc(pStr->z, nAlloc); + if( !zNew ){ + return SQLITE_NOMEM; + } + pStr->z = zNew; + pStr->nAlloc = nAlloc; } - /* Step 4 */ - switch( z[1] ){ - case 'a': - if( z[0]=='l' && m_gt_1(z+2) ){ - z += 2; - } - break; - case 'c': - if( z[0]=='e' && z[2]=='n' && (z[3]=='a' || z[3]=='e') && m_gt_1(z+4) ){ - z += 4; - } - break; - case 'e': - if( z[0]=='r' && m_gt_1(z+2) ){ - z += 2; - } - break; - case 'i': - if( z[0]=='c' && m_gt_1(z+2) ){ - z += 2; - } - break; - case 'l': - if( z[0]=='e' && z[2]=='b' && (z[3]=='a' || z[3]=='i') && m_gt_1(z+4) ){ - z += 4; - } - break; - case 'n': - if( z[0]=='t' ){ - if( z[2]=='a' ){ - if( m_gt_1(z+3) ){ - z += 3; - } - }else if( z[2]=='e' ){ - stem(&z, "tneme", "", m_gt_1) || - stem(&z, "tnem", "", m_gt_1) || - stem(&z, "tne", "", m_gt_1); - } - } - break; - case 'o': - if( z[0]=='u' ){ - if( m_gt_1(z+2) ){ - z += 2; - } - }else if( z[3]=='s' || z[3]=='t' ){ - stem(&z, "noi", "", m_gt_1); - } - break; - case 's': - if( z[0]=='m' && z[2]=='i' && m_gt_1(z+3) ){ - z += 3; - } - break; - case 't': - stem(&z, "eta", "", m_gt_1) || - stem(&z, "iti", "", m_gt_1); - break; - case 'u': - if( z[0]=='s' && z[2]=='o' && m_gt_1(z+3) ){ - z += 3; - } - break; - case 'v': - case 'z': - if( z[0]=='e' && z[2]=='i' && m_gt_1(z+3) ){ - z += 3; - } - break; + /* Append the data to the string buffer. */ + memcpy(&pStr->z[pStr->n], zAppend, nAppend); + pStr->n += nAppend; + pStr->z[pStr->n] = '\0'; + + return SQLITE_OK; +} + +/* +** The fts3BestSnippet() function often selects snippets that end with a +** query term. That is, the final term of the snippet is always a term +** that requires highlighting. For example, if 'X' is a highlighted term +** and '.' is a non-highlighted term, BestSnippet() may select: +** +** ........X.....X +** +** This function "shifts" the beginning of the snippet forward in the +** document so that there are approximately the same number of +** non-highlighted terms to the right of the final highlighted term as there +** are to the left of the first highlighted term. For example, to this: +** +** ....X.....X.... +** +** This is done as part of extracting the snippet text, not when selecting +** the snippet. Snippet selection is done based on doclists only, so there +** is no way for fts3BestSnippet() to know whether or not the document +** actually contains terms that follow the final highlighted term. +*/ +static int fts3SnippetShift( + Fts3Table *pTab, /* FTS3 table snippet comes from */ + int iLangid, /* Language id to use in tokenizing */ + int nSnippet, /* Number of tokens desired for snippet */ + const char *zDoc, /* Document text to extract snippet from */ + int nDoc, /* Size of buffer zDoc in bytes */ + int *piPos, /* IN/OUT: First token of snippet */ + u64 *pHlmask /* IN/OUT: Mask of tokens to highlight */ +){ + u64 hlmask = *pHlmask; /* Local copy of initial highlight-mask */ + + if( hlmask ){ + int nLeft; /* Tokens to the left of first highlight */ + int nRight; /* Tokens to the right of last highlight */ + int nDesired; /* Ideal number of tokens to shift forward */ + + for(nLeft=0; !(hlmask & ((u64)1 << nLeft)); nLeft++); + for(nRight=0; !(hlmask & ((u64)1 << (nSnippet-1-nRight))); nRight++); + nDesired = (nLeft-nRight)/2; + + /* Ideally, the start of the snippet should be pushed forward in the + ** document nDesired tokens. This block checks if there are actually + ** nDesired tokens to the right of the snippet. If so, *piPos and + ** *pHlMask are updated to shift the snippet nDesired tokens to the + ** right. Otherwise, the snippet is shifted by the number of tokens + ** available. + */ + if( nDesired>0 ){ + int nShift; /* Number of tokens to shift snippet by */ + int iCurrent = 0; /* Token counter */ + int rc; /* Return Code */ + sqlite3_tokenizer_module *pMod; + sqlite3_tokenizer_cursor *pC; + pMod = (sqlite3_tokenizer_module *)pTab->pTokenizer->pModule; + + /* Open a cursor on zDoc/nDoc. Check if there are (nSnippet+nDesired) + ** or more tokens in zDoc/nDoc. + */ + rc = sqlite3Fts3OpenTokenizer(pTab->pTokenizer, iLangid, zDoc, nDoc, &pC); + if( rc!=SQLITE_OK ){ + return rc; + } + while( rc==SQLITE_OK && iCurrent<(nSnippet+nDesired) ){ + const char *ZDUMMY; int DUMMY1, DUMMY2, DUMMY3; + rc = pMod->xNext(pC, &ZDUMMY, &DUMMY1, &DUMMY2, &DUMMY3, &iCurrent); + } + pMod->xClose(pC); + if( rc!=SQLITE_OK && rc!=SQLITE_DONE ){ return rc; } + + nShift = (rc==SQLITE_DONE)+iCurrent-nSnippet; + assert( nShift<=nDesired ); + if( nShift>0 ){ + *piPos += nShift; + *pHlmask = hlmask >> nShift; + } + } } + return SQLITE_OK; +} - /* Step 5a */ - if( z[0]=='e' ){ - if( m_gt_1(z+1) ){ - z++; - }else if( m_eq_1(z+1) && !star_oh(z+1) ){ - z++; +/* +** Extract the snippet text for fragment pFragment from cursor pCsr and +** append it to string buffer pOut. +*/ +static int fts3SnippetText( + Fts3Cursor *pCsr, /* FTS3 Cursor */ + SnippetFragment *pFragment, /* Snippet to extract */ + int iFragment, /* Fragment number */ + int isLast, /* True for final fragment in snippet */ + int nSnippet, /* Number of tokens in extracted snippet */ + const char *zOpen, /* String inserted before highlighted term */ + const char *zClose, /* String inserted after highlighted term */ + const char *zEllipsis, /* String inserted between snippets */ + StrBuffer *pOut /* Write output here */ +){ + Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab; + int rc; /* Return code */ + const char *zDoc; /* Document text to extract snippet from */ + int nDoc; /* Size of zDoc in bytes */ + int iCurrent = 0; /* Current token number of document */ + int iEnd = 0; /* Byte offset of end of current token */ + int isShiftDone = 0; /* True after snippet is shifted */ + int iPos = pFragment->iPos; /* First token of snippet */ + u64 hlmask = pFragment->hlmask; /* Highlight-mask for snippet */ + int iCol = pFragment->iCol+1; /* Query column to extract text from */ + sqlite3_tokenizer_module *pMod; /* Tokenizer module methods object */ + sqlite3_tokenizer_cursor *pC; /* Tokenizer cursor open on zDoc/nDoc */ + const char *ZDUMMY; /* Dummy argument used with tokenizer */ + int DUMMY1; /* Dummy argument used with tokenizer */ + + zDoc = (const char *)sqlite3_column_text(pCsr->pStmt, iCol); + if( zDoc==0 ){ + if( sqlite3_column_type(pCsr->pStmt, iCol)!=SQLITE_NULL ){ + return SQLITE_NOMEM; } + return SQLITE_OK; } + nDoc = sqlite3_column_bytes(pCsr->pStmt, iCol); - /* Step 5b */ - if( m_gt_1(z) && z[0]=='l' && z[1]=='l' ){ - z++; + /* Open a token cursor on the document. */ + pMod = (sqlite3_tokenizer_module *)pTab->pTokenizer->pModule; + rc = sqlite3Fts3OpenTokenizer(pTab->pTokenizer, pCsr->iLangid, zDoc,nDoc,&pC); + if( rc!=SQLITE_OK ){ + return rc; } - /* z[] is now the stemmed word in reverse order. Flip it back - ** around into forward order and return. - */ - *pnOut = i = strlen(z); - zOut[i] = 0; - while( *z ){ - zOut[--i] = *(z++); + while( rc==SQLITE_OK ){ + int iBegin; /* Offset in zDoc of start of token */ + int iFin; /* Offset in zDoc of end of token */ + int isHighlight; /* True for highlighted terms */ + + rc = pMod->xNext(pC, &ZDUMMY, &DUMMY1, &iBegin, &iFin, &iCurrent); + if( rc!=SQLITE_OK ){ + if( rc==SQLITE_DONE ){ + /* Special case - the last token of the snippet is also the last token + ** of the column. Append any punctuation that occurred between the end + ** of the previous token and the end of the document to the output. + ** Then break out of the loop. */ + rc = fts3StringAppend(pOut, &zDoc[iEnd], -1); + } + break; + } + if( iCurrentiLangid, nSnippet, &zDoc[iBegin], n, &iPos, &hlmask + ); + isShiftDone = 1; + + /* Now that the shift has been done, check if the initial "..." are + ** required. They are required if (a) this is not the first fragment, + ** or (b) this fragment does not begin at position 0 of its column. + */ + if( rc==SQLITE_OK && (iPos>0 || iFragment>0) ){ + rc = fts3StringAppend(pOut, zEllipsis, -1); + } + if( rc!=SQLITE_OK || iCurrent=(iPos+nSnippet) ){ + if( isLast ){ + rc = fts3StringAppend(pOut, zEllipsis, -1); + } + break; + } + + /* Set isHighlight to true if this term should be highlighted. */ + isHighlight = (hlmask & ((u64)1 << (iCurrent-iPos)))!=0; + + if( iCurrent>iPos ) rc = fts3StringAppend(pOut, &zDoc[iEnd], iBegin-iEnd); + if( rc==SQLITE_OK && isHighlight ) rc = fts3StringAppend(pOut, zOpen, -1); + if( rc==SQLITE_OK ) rc = fts3StringAppend(pOut, &zDoc[iBegin], iFin-iBegin); + if( rc==SQLITE_OK && isHighlight ) rc = fts3StringAppend(pOut, zClose, -1); + + iEnd = iFin; } + + pMod->xClose(pC); + return rc; } + /* -** Characters that can be part of a token. We assume any character -** whose value is greater than 0x80 (any UTF character) can be -** part of a token. In other words, delimiters all must have -** values of 0x7f or lower. +** This function is used to count the entries in a column-list (a +** delta-encoded list of term offsets within a single column of a single +** row). When this function is called, *ppCollist should point to the +** beginning of the first varint in the column-list (the varint that +** contains the position of the first matching term in the column data). +** Before returning, *ppCollist is set to point to the first byte after +** the last varint in the column-list (either the 0x00 signifying the end +** of the position-list, or the 0x01 that precedes the column number of +** the next column in the position-list). +** +** The number of elements in the column-list is returned. */ -static const char porterIdChar[] = { -/* x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF */ - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, /* 3x */ - 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 4x */ - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, /* 5x */ - 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 6x */ - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, /* 7x */ -}; -#define isDelim(C) (((ch=C)&0x80)==0 && (ch<0x30 || !porterIdChar[ch-0x30])) +static int fts3ColumnlistCount(char **ppCollist){ + char *pEnd = *ppCollist; + char c = 0; + int nEntry = 0; + + /* A column-list is terminated by either a 0x01 or 0x00. */ + while( 0xFE & (*pEnd | c) ){ + c = *pEnd++ & 0x80; + if( !c ) nEntry++; + } + + *ppCollist = pEnd; + return nEntry; +} /* -** Extract the next token from a tokenization cursor. The cursor must -** have been opened by a prior call to porterOpen(). +** fts3ExprIterate() callback used to collect the "global" matchinfo stats +** for a single query. +** +** fts3ExprIterate() callback to load the 'global' elements of a +** FTS3_MATCHINFO_HITS matchinfo array. The global stats are those elements +** of the matchinfo array that are constant for all rows returned by the +** current query. +** +** Argument pCtx is actually a pointer to a struct of type MatchInfo. This +** function populates Matchinfo.aMatchinfo[] as follows: +** +** for(iCol=0; iColzInput; + MatchInfo *p = (MatchInfo *)pCtx; + return sqlite3Fts3EvalPhraseStats( + p->pCursor, pExpr, &p->aMatchinfo[3*iPhrase*p->nCol] + ); +} + +/* +** fts3ExprIterate() callback used to collect the "local" part of the +** FTS3_MATCHINFO_HITS array. The local stats are those elements of the +** array that are different for each row returned by the query. +*/ +static int fts3ExprLocalHitsCb( + Fts3Expr *pExpr, /* Phrase expression node */ + int iPhrase, /* Phrase number */ + void *pCtx /* Pointer to MatchInfo structure */ +){ + int rc = SQLITE_OK; + MatchInfo *p = (MatchInfo *)pCtx; + int iStart = iPhrase * p->nCol * 3; + int i; + + for(i=0; inCol && rc==SQLITE_OK; i++){ + char *pCsr; + rc = sqlite3Fts3EvalPhrasePoslist(p->pCursor, pExpr, i, &pCsr); + if( pCsr ){ + p->aMatchinfo[iStart+i*3] = fts3ColumnlistCount(&pCsr); + }else{ + p->aMatchinfo[iStart+i*3] = 0; + } + } + + return rc; +} + +static int fts3MatchinfoCheck( + Fts3Table *pTab, + char cArg, + char **pzErr +){ + if( (cArg==FTS3_MATCHINFO_NPHRASE) + || (cArg==FTS3_MATCHINFO_NCOL) + || (cArg==FTS3_MATCHINFO_NDOC && pTab->bFts4) + || (cArg==FTS3_MATCHINFO_AVGLENGTH && pTab->bFts4) + || (cArg==FTS3_MATCHINFO_LENGTH && pTab->bHasDocsize) + || (cArg==FTS3_MATCHINFO_LCS) + || (cArg==FTS3_MATCHINFO_HITS) + ){ + return SQLITE_OK; + } + *pzErr = sqlite3_mprintf("unrecognized matchinfo request: %c", cArg); + return SQLITE_ERROR; +} - while( c->iOffsetnInput ){ - int iStartOffset, ch; +static int fts3MatchinfoSize(MatchInfo *pInfo, char cArg){ + int nVal; /* Number of integers output by cArg */ - /* Scan past delimiter characters */ - while( c->iOffsetnInput && isDelim(z[c->iOffset]) ){ - c->iOffset++; - } + switch( cArg ){ + case FTS3_MATCHINFO_NDOC: + case FTS3_MATCHINFO_NPHRASE: + case FTS3_MATCHINFO_NCOL: + nVal = 1; + break; - /* Count non-delimiter characters. */ - iStartOffset = c->iOffset; - while( c->iOffsetnInput && !isDelim(z[c->iOffset]) ){ - c->iOffset++; - } + case FTS3_MATCHINFO_AVGLENGTH: + case FTS3_MATCHINFO_LENGTH: + case FTS3_MATCHINFO_LCS: + nVal = pInfo->nCol; + break; - if( c->iOffset>iStartOffset ){ - int n = c->iOffset-iStartOffset; - if( n>c->nAllocated ){ - c->nAllocated = n+20; - c->zToken = sqlite3_realloc(c->zToken, c->nAllocated); - if( c->zToken==NULL ) return SQLITE_NOMEM; - } - porter_stemmer(&z[iStartOffset], n, c->zToken, pnBytes); - *pzToken = c->zToken; - *piStartOffset = iStartOffset; - *piEndOffset = c->iOffset; - *piPosition = c->iToken++; - return SQLITE_OK; - } + default: + assert( cArg==FTS3_MATCHINFO_HITS ); + nVal = pInfo->nCol * pInfo->nPhrase * 3; + break; } - return SQLITE_DONE; + + return nVal; +} + +static int fts3MatchinfoSelectDoctotal( + Fts3Table *pTab, + sqlite3_stmt **ppStmt, + sqlite3_int64 *pnDoc, + const char **paLen +){ + sqlite3_stmt *pStmt; + const char *a; + sqlite3_int64 nDoc; + + if( !*ppStmt ){ + int rc = sqlite3Fts3SelectDoctotal(pTab, ppStmt); + if( rc!=SQLITE_OK ) return rc; + } + pStmt = *ppStmt; + assert( sqlite3_data_count(pStmt)==1 ); + + a = sqlite3_column_blob(pStmt, 0); + a += sqlite3Fts3GetVarint(a, &nDoc); + if( nDoc==0 ) return FTS_CORRUPT_VTAB; + *pnDoc = (u32)nDoc; + + if( paLen ) *paLen = a; + return SQLITE_OK; } /* -** The set of routines that implement the porter-stemmer tokenizer +** An instance of the following structure is used to store state while +** iterating through a multi-column position-list corresponding to the +** hits for a single phrase on a single row in order to calculate the +** values for a matchinfo() FTS3_MATCHINFO_LCS request. */ -static const sqlite3_tokenizer_module porterTokenizerModule = { - 0, - porterCreate, - porterDestroy, - porterOpen, - porterClose, - porterNext, +typedef struct LcsIterator LcsIterator; +struct LcsIterator { + Fts3Expr *pExpr; /* Pointer to phrase expression */ + int iPosOffset; /* Tokens count up to end of this phrase */ + char *pRead; /* Cursor used to iterate through aDoclist */ + int iPos; /* Current position */ }; -/* -** Allocate a new porter tokenizer. Return a pointer to the new -** tokenizer in *ppModule +/* +** If LcsIterator.iCol is set to the following value, the iterator has +** finished iterating through all offsets for all columns. */ -SQLITE_PRIVATE void sqlite3Fts3PorterTokenizerModule( - sqlite3_tokenizer_module const**ppModule +#define LCS_ITERATOR_FINISHED 0x7FFFFFFF; + +static int fts3MatchinfoLcsCb( + Fts3Expr *pExpr, /* Phrase expression node */ + int iPhrase, /* Phrase number (numbered from zero) */ + void *pCtx /* Pointer to MatchInfo structure */ ){ - *ppModule = &porterTokenizerModule; + LcsIterator *aIter = (LcsIterator *)pCtx; + aIter[iPhrase].pExpr = pExpr; + return SQLITE_OK; } -#endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) */ - -/************** End of fts3_porter.c *****************************************/ -/************** Begin file fts3_tokenizer.c **********************************/ /* -** 2007 June 22 -** -** The author disclaims copyright to this source code. In place of -** a legal notice, here is a blessing: -** -** May you do good and not evil. -** May you find forgiveness for yourself and forgive others. -** May you share freely, never taking more than you give. -** -****************************************************************************** -** -** This is part of an SQLite module implementing full-text search. -** This particular file implements the generic tokenizer interface. +** Advance the iterator passed as an argument to the next position. Return +** 1 if the iterator is at EOF or if it now points to the start of the +** position list for the next column. */ +static int fts3LcsIteratorAdvance(LcsIterator *pIter){ + char *pRead = pIter->pRead; + sqlite3_int64 iRead; + int rc = 0; + + pRead += sqlite3Fts3GetVarint(pRead, &iRead); + if( iRead==0 || iRead==1 ){ + pRead = 0; + rc = 1; + }else{ + pIter->iPos += (int)(iRead-2); + } + pIter->pRead = pRead; + return rc; +} + /* -** The code in this file is only compiled if: +** This function implements the FTS3_MATCHINFO_LCS matchinfo() flag. ** -** * The FTS3 module is being built as an extension -** (in which case SQLITE_CORE is not defined), or +** If the call is successful, the longest-common-substring lengths for each +** column are written into the first nCol elements of the pInfo->aMatchinfo[] +** array before returning. SQLITE_OK is returned in this case. ** -** * The FTS3 module is being built into the core of -** SQLite (in which case SQLITE_ENABLE_FTS3 is defined). +** Otherwise, if an error occurs, an SQLite error code is returned and the +** data written to the first nCol elements of pInfo->aMatchinfo[] is +** undefined. */ -#if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) +static int fts3MatchinfoLcs(Fts3Cursor *pCsr, MatchInfo *pInfo){ + LcsIterator *aIter; + int i; + int iCol; + int nToken = 0; -#ifndef SQLITE_CORE - SQLITE_EXTENSION_INIT1 -#endif + /* Allocate and populate the array of LcsIterator objects. The array + ** contains one element for each matchable phrase in the query. + **/ + aIter = sqlite3_malloc(sizeof(LcsIterator) * pCsr->nPhrase); + if( !aIter ) return SQLITE_NOMEM; + memset(aIter, 0, sizeof(LcsIterator) * pCsr->nPhrase); + (void)fts3ExprIterate(pCsr->pExpr, fts3MatchinfoLcsCb, (void*)aIter); + + for(i=0; inPhrase; i++){ + LcsIterator *pIter = &aIter[i]; + nToken -= pIter->pExpr->pPhrase->nToken; + pIter->iPosOffset = nToken; + } + + for(iCol=0; iColnCol; iCol++){ + int nLcs = 0; /* LCS value for this column */ + int nLive = 0; /* Number of iterators in aIter not at EOF */ + + for(i=0; inPhrase; i++){ + int rc; + LcsIterator *pIt = &aIter[i]; + rc = sqlite3Fts3EvalPhrasePoslist(pCsr, pIt->pExpr, iCol, &pIt->pRead); + if( rc!=SQLITE_OK ) return rc; + if( pIt->pRead ){ + pIt->iPos = pIt->iPosOffset; + fts3LcsIteratorAdvance(&aIter[i]); + nLive++; + } + } + + while( nLive>0 ){ + LcsIterator *pAdv = 0; /* The iterator to advance by one position */ + int nThisLcs = 0; /* LCS for the current iterator positions */ + + for(i=0; inPhrase; i++){ + LcsIterator *pIter = &aIter[i]; + if( pIter->pRead==0 ){ + /* This iterator is already at EOF for this column. */ + nThisLcs = 0; + }else{ + if( pAdv==0 || pIter->iPosiPos ){ + pAdv = pIter; + } + if( nThisLcs==0 || pIter->iPos==pIter[-1].iPos ){ + nThisLcs++; + }else{ + nThisLcs = 1; + } + if( nThisLcs>nLcs ) nLcs = nThisLcs; + } + } + if( fts3LcsIteratorAdvance(pAdv) ) nLive--; + } + + pInfo->aMatchinfo[iCol] = nLcs; + } + sqlite3_free(aIter); + return SQLITE_OK; +} /* -** Implementation of the SQL scalar function for accessing the underlying -** hash table. This function may be called as follows: +** Populate the buffer pInfo->aMatchinfo[] with an array of integers to +** be returned by the matchinfo() function. Argument zArg contains the +** format string passed as the second argument to matchinfo (or the +** default value "pcx" if no second argument was specified). The format +** string has already been validated and the pInfo->aMatchinfo[] array +** is guaranteed to be large enough for the output. ** -** SELECT (); -** SELECT (, ); -** -** where is the name passed as the second argument -** to the sqlite3Fts3InitHashTable() function (e.g. 'fts3_tokenizer'). -** -** If the argument is specified, it must be a blob value -** containing a pointer to be stored as the hash data corresponding -** to the string . If is not specified, then -** the string must already exist in the has table. Otherwise, -** an error is returned. +** If bGlobal is true, then populate all fields of the matchinfo() output. +** If it is false, then assume that those fields that do not change between +** rows (i.e. FTS3_MATCHINFO_NPHRASE, NCOL, NDOC, AVGLENGTH and part of HITS) +** have already been populated. ** -** Whether or not the argument is specified, the value returned -** is a blob containing the pointer stored as the hash data corresponding -** to string (after the hash-table is updated, if applicable). +** Return SQLITE_OK if successful, or an SQLite error code if an error +** occurs. If a value other than SQLITE_OK is returned, the state the +** pInfo->aMatchinfo[] buffer is left in is undefined. */ -static void scalarFunc( - sqlite3_context *context, - int argc, - sqlite3_value **argv +static int fts3MatchinfoValues( + Fts3Cursor *pCsr, /* FTS3 cursor object */ + int bGlobal, /* True to grab the global stats */ + MatchInfo *pInfo, /* Matchinfo context object */ + const char *zArg /* Matchinfo format string */ ){ - fts3Hash *pHash; - void *pPtr = 0; - const unsigned char *zName; - int nName; + int rc = SQLITE_OK; + int i; + Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab; + sqlite3_stmt *pSelect = 0; - assert( argc==1 || argc==2 ); + for(i=0; rc==SQLITE_OK && zArg[i]; i++){ - pHash = (fts3Hash *)sqlite3_user_data(context); + switch( zArg[i] ){ + case FTS3_MATCHINFO_NPHRASE: + if( bGlobal ) pInfo->aMatchinfo[0] = pInfo->nPhrase; + break; - zName = sqlite3_value_text(argv[0]); - nName = sqlite3_value_bytes(argv[0])+1; + case FTS3_MATCHINFO_NCOL: + if( bGlobal ) pInfo->aMatchinfo[0] = pInfo->nCol; + break; + + case FTS3_MATCHINFO_NDOC: + if( bGlobal ){ + sqlite3_int64 nDoc = 0; + rc = fts3MatchinfoSelectDoctotal(pTab, &pSelect, &nDoc, 0); + pInfo->aMatchinfo[0] = (u32)nDoc; + } + break; - if( argc==2 ){ - void *pOld; - int n = sqlite3_value_bytes(argv[1]); - if( n!=sizeof(pPtr) ){ - sqlite3_result_error(context, "argument type mismatch", -1); - return; - } - pPtr = *(void **)sqlite3_value_blob(argv[1]); - pOld = sqlite3Fts3HashInsert(pHash, (void *)zName, nName, pPtr); - if( pOld==pPtr ){ - sqlite3_result_error(context, "out of memory", -1); - return; - } - }else{ - pPtr = sqlite3Fts3HashFind(pHash, zName, nName); - if( !pPtr ){ - char *zErr = sqlite3_mprintf("unknown tokenizer: %s", zName); - sqlite3_result_error(context, zErr, -1); - sqlite3_free(zErr); - return; + case FTS3_MATCHINFO_AVGLENGTH: + if( bGlobal ){ + sqlite3_int64 nDoc; /* Number of rows in table */ + const char *a; /* Aggregate column length array */ + + rc = fts3MatchinfoSelectDoctotal(pTab, &pSelect, &nDoc, &a); + if( rc==SQLITE_OK ){ + int iCol; + for(iCol=0; iColnCol; iCol++){ + u32 iVal; + sqlite3_int64 nToken; + a += sqlite3Fts3GetVarint(a, &nToken); + iVal = (u32)(((u32)(nToken&0xffffffff)+nDoc/2)/nDoc); + pInfo->aMatchinfo[iCol] = iVal; + } + } + } + break; + + case FTS3_MATCHINFO_LENGTH: { + sqlite3_stmt *pSelectDocsize = 0; + rc = sqlite3Fts3SelectDocsize(pTab, pCsr->iPrevId, &pSelectDocsize); + if( rc==SQLITE_OK ){ + int iCol; + const char *a = sqlite3_column_blob(pSelectDocsize, 0); + for(iCol=0; iColnCol; iCol++){ + sqlite3_int64 nToken; + a += sqlite3Fts3GetVarint(a, &nToken); + pInfo->aMatchinfo[iCol] = (u32)nToken; + } + } + sqlite3_reset(pSelectDocsize); + break; + } + + case FTS3_MATCHINFO_LCS: + rc = fts3ExprLoadDoclists(pCsr, 0, 0); + if( rc==SQLITE_OK ){ + rc = fts3MatchinfoLcs(pCsr, pInfo); + } + break; + + default: { + Fts3Expr *pExpr; + assert( zArg[i]==FTS3_MATCHINFO_HITS ); + pExpr = pCsr->pExpr; + rc = fts3ExprLoadDoclists(pCsr, 0, 0); + if( rc!=SQLITE_OK ) break; + if( bGlobal ){ + if( pCsr->pDeferred ){ + rc = fts3MatchinfoSelectDoctotal(pTab, &pSelect, &pInfo->nDoc, 0); + if( rc!=SQLITE_OK ) break; + } + rc = fts3ExprIterate(pExpr, fts3ExprGlobalHitsCb,(void*)pInfo); + if( rc!=SQLITE_OK ) break; + } + (void)fts3ExprIterate(pExpr, fts3ExprLocalHitsCb,(void*)pInfo); + break; + } } + + pInfo->aMatchinfo += fts3MatchinfoSize(pInfo, zArg[i]); } - sqlite3_result_blob(context, (void *)&pPtr, sizeof(pPtr), SQLITE_TRANSIENT); + sqlite3_reset(pSelect); + return rc; } -#ifdef SQLITE_TEST - /* -** Implementation of a special SQL scalar function for testing tokenizers -** designed to be used in concert with the Tcl testing framework. This -** function must be called with two arguments: -** -** SELECT (, ); -** SELECT (, ); -** -** where is the name passed as the second argument -** to the sqlite3Fts3InitHashTable() function (e.g. 'fts3_tokenizer') -** concatenated with the string '_test' (e.g. 'fts3_tokenizer_test'). -** -** The return value is a string that may be interpreted as a Tcl -** list. For each token in the , three elements are -** added to the returned list. The first is the token position, the -** second is the token text (folded, stemmed, etc.) and the third is the -** substring of associated with the token. For example, -** using the built-in "simple" tokenizer: -** -** SELECT fts_tokenizer_test('simple', 'I don't see how'); -** -** will return the string: -** -** "{0 i I 1 dont don't 2 see see 3 how how}" -** +** Populate pCsr->aMatchinfo[] with data for the current row. The +** 'matchinfo' data is an array of 32-bit unsigned integers (C type u32). */ -static void testFunc( - sqlite3_context *context, - int argc, - sqlite3_value **argv +static int fts3GetMatchinfo( + Fts3Cursor *pCsr, /* FTS3 Cursor object */ + const char *zArg /* Second argument to matchinfo() function */ ){ - fts3Hash *pHash; - sqlite3_tokenizer_module *p; - sqlite3_tokenizer *pTokenizer = 0; - sqlite3_tokenizer_cursor *pCsr = 0; + MatchInfo sInfo; + Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab; + int rc = SQLITE_OK; + int bGlobal = 0; /* Collect 'global' stats as well as local */ - const char *zErr = 0; + memset(&sInfo, 0, sizeof(MatchInfo)); + sInfo.pCursor = pCsr; + sInfo.nCol = pTab->nColumn; - const char *zName; - int nName; - const char *zInput; - int nInput; + /* If there is cached matchinfo() data, but the format string for the + ** cache does not match the format string for this request, discard + ** the cached data. */ + if( pCsr->zMatchinfo && strcmp(pCsr->zMatchinfo, zArg) ){ + assert( pCsr->aMatchinfo ); + sqlite3_free(pCsr->aMatchinfo); + pCsr->zMatchinfo = 0; + pCsr->aMatchinfo = 0; + } - const char *zArg = 0; + /* If Fts3Cursor.aMatchinfo[] is NULL, then this is the first time the + ** matchinfo function has been called for this query. In this case + ** allocate the array used to accumulate the matchinfo data and + ** initialize those elements that are constant for every row. + */ + if( pCsr->aMatchinfo==0 ){ + int nMatchinfo = 0; /* Number of u32 elements in match-info */ + int nArg; /* Bytes in zArg */ + int i; /* Used to iterate through zArg */ - const char *zToken; - int nToken; - int iStart; - int iEnd; - int iPos; + /* Determine the number of phrases in the query */ + pCsr->nPhrase = fts3ExprPhraseCount(pCsr->pExpr); + sInfo.nPhrase = pCsr->nPhrase; - Tcl_Obj *pRet; + /* Determine the number of integers in the buffer returned by this call. */ + for(i=0; zArg[i]; i++){ + nMatchinfo += fts3MatchinfoSize(&sInfo, zArg[i]); + } - assert( argc==2 || argc==3 ); + /* Allocate space for Fts3Cursor.aMatchinfo[] and Fts3Cursor.zMatchinfo. */ + nArg = (int)strlen(zArg); + pCsr->aMatchinfo = (u32 *)sqlite3_malloc(sizeof(u32)*nMatchinfo + nArg + 1); + if( !pCsr->aMatchinfo ) return SQLITE_NOMEM; - nName = sqlite3_value_bytes(argv[0]); - zName = (const char *)sqlite3_value_text(argv[0]); - nInput = sqlite3_value_bytes(argv[argc-1]); - zInput = (const char *)sqlite3_value_text(argv[argc-1]); + pCsr->zMatchinfo = (char *)&pCsr->aMatchinfo[nMatchinfo]; + pCsr->nMatchinfo = nMatchinfo; + memcpy(pCsr->zMatchinfo, zArg, nArg+1); + memset(pCsr->aMatchinfo, 0, sizeof(u32)*nMatchinfo); + pCsr->isMatchinfoNeeded = 1; + bGlobal = 1; + } - if( argc==3 ){ - zArg = (const char *)sqlite3_value_text(argv[1]); + sInfo.aMatchinfo = pCsr->aMatchinfo; + sInfo.nPhrase = pCsr->nPhrase; + if( pCsr->isMatchinfoNeeded ){ + rc = fts3MatchinfoValues(pCsr, bGlobal, &sInfo, zArg); + pCsr->isMatchinfoNeeded = 0; } - pHash = (fts3Hash *)sqlite3_user_data(context); - p = (sqlite3_tokenizer_module *)sqlite3Fts3HashFind(pHash, zName, nName+1); + return rc; +} - if( !p ){ - char *zErr = sqlite3_mprintf("unknown tokenizer: %s", zName); - sqlite3_result_error(context, zErr, -1); - sqlite3_free(zErr); +/* +** Implementation of snippet() function. +*/ +SQLITE_PRIVATE void sqlite3Fts3Snippet( + sqlite3_context *pCtx, /* SQLite function call context */ + Fts3Cursor *pCsr, /* Cursor object */ + const char *zStart, /* Snippet start text - "" */ + const char *zEnd, /* Snippet end text - "" */ + const char *zEllipsis, /* Snippet ellipsis text - "..." */ + int iCol, /* Extract snippet from this column */ + int nToken /* Approximate number of tokens in snippet */ +){ + Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab; + int rc = SQLITE_OK; + int i; + StrBuffer res = {0, 0, 0}; + + /* The returned text includes up to four fragments of text extracted from + ** the data in the current row. The first iteration of the for(...) loop + ** below attempts to locate a single fragment of text nToken tokens in + ** size that contains at least one instance of all phrases in the query + ** expression that appear in the current row. If such a fragment of text + ** cannot be found, the second iteration of the loop attempts to locate + ** a pair of fragments, and so on. + */ + int nSnippet = 0; /* Number of fragments in this snippet */ + SnippetFragment aSnippet[4]; /* Maximum of 4 fragments per snippet */ + int nFToken = -1; /* Number of tokens in each fragment */ + + if( !pCsr->pExpr ){ + sqlite3_result_text(pCtx, "", 0, SQLITE_STATIC); return; } - pRet = Tcl_NewObj(); - Tcl_IncrRefCount(pRet); + for(nSnippet=1; 1; nSnippet++){ - if( SQLITE_OK!=p->xCreate(zArg ? 1 : 0, &zArg, &pTokenizer) ){ - zErr = "error in xCreate()"; - goto finish; - } - pTokenizer->pModule = p; - if( SQLITE_OK!=p->xOpen(pTokenizer, zInput, nInput, &pCsr) ){ - zErr = "error in xOpen()"; - goto finish; - } - pCsr->pTokenizer = pTokenizer; + int iSnip; /* Loop counter 0..nSnippet-1 */ + u64 mCovered = 0; /* Bitmask of phrases covered by snippet */ + u64 mSeen = 0; /* Bitmask of phrases seen by BestSnippet() */ - while( SQLITE_OK==p->xNext(pCsr, &zToken, &nToken, &iStart, &iEnd, &iPos) ){ - Tcl_ListObjAppendElement(0, pRet, Tcl_NewIntObj(iPos)); - Tcl_ListObjAppendElement(0, pRet, Tcl_NewStringObj(zToken, nToken)); - zToken = &zInput[iStart]; - nToken = iEnd-iStart; - Tcl_ListObjAppendElement(0, pRet, Tcl_NewStringObj(zToken, nToken)); - } + if( nToken>=0 ){ + nFToken = (nToken+nSnippet-1) / nSnippet; + }else{ + nFToken = -1 * nToken; + } - if( SQLITE_OK!=p->xClose(pCsr) ){ - zErr = "error in xClose()"; - goto finish; + for(iSnip=0; iSnipnColumn; iRead++){ + SnippetFragment sF = {0, 0, 0, 0}; + int iS; + if( iCol>=0 && iRead!=iCol ) continue; + + /* Find the best snippet of nFToken tokens in column iRead. */ + rc = fts3BestSnippet(nFToken, pCsr, iRead, mCovered, &mSeen, &sF, &iS); + if( rc!=SQLITE_OK ){ + goto snippet_out; + } + if( iS>iBestScore ){ + *pFragment = sF; + iBestScore = iS; + } + } + + mCovered |= pFragment->covered; + } + + /* If all query phrases seen by fts3BestSnippet() are present in at least + ** one of the nSnippet snippet fragments, break out of the loop. + */ + assert( (mCovered&mSeen)==mCovered ); + if( mSeen==mCovered || nSnippet==SizeofArray(aSnippet) ) break; } - if( SQLITE_OK!=p->xDestroy(pTokenizer) ){ - zErr = "error in xDestroy()"; - goto finish; + + assert( nFToken>0 ); + + for(i=0; ipCsr, pExpr, p->iCol, &pList); + nTerm = pExpr->pPhrase->nToken; + if( pList ){ + fts3GetDeltaPosition(&pList, &iPos); + assert( iPos>=0 ); } - sqlite3_bind_text(pStmt, 1, zName, -1, SQLITE_STATIC); - sqlite3_bind_blob(pStmt, 2, &p, sizeof(p), SQLITE_STATIC); - sqlite3_step(pStmt); + for(iTerm=0; iTermaTerm[p->iTerm++]; + pT->iOff = nTerm-iTerm-1; + pT->pList = pList; + pT->iPos = iPos; + } - return sqlite3_finalize(pStmt); + return rc; } -static -int queryTokenizer( - sqlite3 *db, - char *zName, - const sqlite3_tokenizer_module **pp +/* +** Implementation of offsets() function. +*/ +SQLITE_PRIVATE void sqlite3Fts3Offsets( + sqlite3_context *pCtx, /* SQLite function call context */ + Fts3Cursor *pCsr /* Cursor object */ ){ - int rc; - sqlite3_stmt *pStmt; - const char zSql[] = "SELECT fts3_tokenizer(?)"; + Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab; + sqlite3_tokenizer_module const *pMod = pTab->pTokenizer->pModule; + const char *ZDUMMY; /* Dummy argument used with xNext() */ + int NDUMMY; /* Dummy argument used with xNext() */ + int rc; /* Return Code */ + int nToken; /* Number of tokens in query */ + int iCol; /* Column currently being processed */ + StrBuffer res = {0, 0, 0}; /* Result string */ + TermOffsetCtx sCtx; /* Context for fts3ExprTermOffsetInit() */ + + if( !pCsr->pExpr ){ + sqlite3_result_text(pCtx, "", 0, SQLITE_STATIC); + return; + } - *pp = 0; - rc = sqlite3_prepare_v2(db, zSql, -1, &pStmt, 0); - if( rc!=SQLITE_OK ){ - return rc; + memset(&sCtx, 0, sizeof(sCtx)); + assert( pCsr->isRequireSeek==0 ); + + /* Count the number of terms in the query */ + rc = fts3ExprLoadDoclists(pCsr, 0, &nToken); + if( rc!=SQLITE_OK ) goto offsets_out; + + /* Allocate the array of TermOffset iterators. */ + sCtx.aTerm = (TermOffset *)sqlite3_malloc(sizeof(TermOffset)*nToken); + if( 0==sCtx.aTerm ){ + rc = SQLITE_NOMEM; + goto offsets_out; } + sCtx.iDocid = pCsr->iPrevId; + sCtx.pCsr = pCsr; - sqlite3_bind_text(pStmt, 1, zName, -1, SQLITE_STATIC); - if( SQLITE_ROW==sqlite3_step(pStmt) ){ - if( sqlite3_column_type(pStmt, 0)==SQLITE_BLOB ){ - memcpy(pp, sqlite3_column_blob(pStmt, 0), sizeof(*pp)); + /* Loop through the table columns, appending offset information to + ** string-buffer res for each column. + */ + for(iCol=0; iColnColumn; iCol++){ + sqlite3_tokenizer_cursor *pC; /* Tokenizer cursor */ + int iStart; + int iEnd; + int iCurrent; + const char *zDoc; + int nDoc; + + /* Initialize the contents of sCtx.aTerm[] for column iCol. There is + ** no way that this operation can fail, so the return code from + ** fts3ExprIterate() can be discarded. + */ + sCtx.iCol = iCol; + sCtx.iTerm = 0; + (void)fts3ExprIterate(pCsr->pExpr, fts3ExprTermOffsetInit, (void *)&sCtx); + + /* Retreive the text stored in column iCol. If an SQL NULL is stored + ** in column iCol, jump immediately to the next iteration of the loop. + ** If an OOM occurs while retrieving the data (this can happen if SQLite + ** needs to transform the data from utf-16 to utf-8), return SQLITE_NOMEM + ** to the caller. + */ + zDoc = (const char *)sqlite3_column_text(pCsr->pStmt, iCol+1); + nDoc = sqlite3_column_bytes(pCsr->pStmt, iCol+1); + if( zDoc==0 ){ + if( sqlite3_column_type(pCsr->pStmt, iCol+1)==SQLITE_NULL ){ + continue; + } + rc = SQLITE_NOMEM; + goto offsets_out; + } + + /* Initialize a tokenizer iterator to iterate through column iCol. */ + rc = sqlite3Fts3OpenTokenizer(pTab->pTokenizer, pCsr->iLangid, + zDoc, nDoc, &pC + ); + if( rc!=SQLITE_OK ) goto offsets_out; + + rc = pMod->xNext(pC, &ZDUMMY, &NDUMMY, &iStart, &iEnd, &iCurrent); + while( rc==SQLITE_OK ){ + int i; /* Used to loop through terms */ + int iMinPos = 0x7FFFFFFF; /* Position of next token */ + TermOffset *pTerm = 0; /* TermOffset associated with next token */ + + for(i=0; ipList && (pT->iPos-pT->iOff)iPos-pT->iOff; + pTerm = pT; + } + } + + if( !pTerm ){ + /* All offsets for this column have been gathered. */ + rc = SQLITE_DONE; + }else{ + assert( iCurrent<=iMinPos ); + if( 0==(0xFE&*pTerm->pList) ){ + pTerm->pList = 0; + }else{ + fts3GetDeltaPosition(&pTerm->pList, &pTerm->iPos); + } + while( rc==SQLITE_OK && iCurrentxNext(pC, &ZDUMMY, &NDUMMY, &iStart, &iEnd, &iCurrent); + } + if( rc==SQLITE_OK ){ + char aBuffer[64]; + sqlite3_snprintf(sizeof(aBuffer), aBuffer, + "%d %d %d %d ", iCol, pTerm-sCtx.aTerm, iStart, iEnd-iStart + ); + rc = fts3StringAppend(&res, aBuffer, -1); + }else if( rc==SQLITE_DONE && pTab->zContentTbl==0 ){ + rc = FTS_CORRUPT_VTAB; + } + } + } + if( rc==SQLITE_DONE ){ + rc = SQLITE_OK; } + + pMod->xClose(pC); + if( rc!=SQLITE_OK ) goto offsets_out; } - return sqlite3_finalize(pStmt); + offsets_out: + sqlite3_free(sCtx.aTerm); + assert( rc!=SQLITE_DONE ); + sqlite3Fts3SegmentsClose(pTab); + if( rc!=SQLITE_OK ){ + sqlite3_result_error_code(pCtx, rc); + sqlite3_free(res.z); + }else{ + sqlite3_result_text(pCtx, res.z, res.n-1, sqlite3_free); + } + return; } -SQLITE_PRIVATE void sqlite3Fts3SimpleTokenizerModule(sqlite3_tokenizer_module const**ppModule); - /* -** Implementation of the scalar function fts3_tokenizer_internal_test(). -** This function is used for testing only, it is not included in the -** build unless SQLITE_TEST is defined. -** -** The purpose of this is to test that the fts3_tokenizer() function -** can be used as designed by the C-code in the queryTokenizer and -** registerTokenizer() functions above. These two functions are repeated -** in the README.tokenizer file as an example, so it is important to -** test them. -** -** To run the tests, evaluate the fts3_tokenizer_internal_test() scalar -** function with no arguments. An assert() will fail if a problem is -** detected. i.e.: -** -** SELECT fts3_tokenizer_internal_test(); -** +** Implementation of matchinfo() function. */ -static void intTestFunc( - sqlite3_context *context, - int argc, - sqlite3_value **argv +SQLITE_PRIVATE void sqlite3Fts3Matchinfo( + sqlite3_context *pContext, /* Function call context */ + Fts3Cursor *pCsr, /* FTS3 table cursor */ + const char *zArg /* Second arg to matchinfo() function */ ){ + Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab; int rc; - const sqlite3_tokenizer_module *p1; - const sqlite3_tokenizer_module *p2; - sqlite3 *db = (sqlite3 *)sqlite3_user_data(context); + int i; + const char *zFormat; + + if( zArg ){ + for(i=0; zArg[i]; i++){ + char *zErr = 0; + if( fts3MatchinfoCheck(pTab, zArg[i], &zErr) ){ + sqlite3_result_error(pContext, zErr, -1); + sqlite3_free(zErr); + return; + } + } + zFormat = zArg; + }else{ + zFormat = FTS3_MATCHINFO_DEFAULT; + } - /* Test the query function */ - sqlite3Fts3SimpleTokenizerModule(&p1); - rc = queryTokenizer(db, "simple", &p2); - assert( rc==SQLITE_OK ); - assert( p1==p2 ); - rc = queryTokenizer(db, "nosuchtokenizer", &p2); - assert( rc==SQLITE_ERROR ); - assert( p2==0 ); - assert( 0==strcmp(sqlite3_errmsg(db), "unknown tokenizer: nosuchtokenizer") ); + if( !pCsr->pExpr ){ + sqlite3_result_blob(pContext, "", 0, SQLITE_STATIC); + return; + } - /* Test the storage function */ - rc = registerTokenizer(db, "nosuchtokenizer", p1); - assert( rc==SQLITE_OK ); - rc = queryTokenizer(db, "nosuchtokenizer", &p2); - assert( rc==SQLITE_OK ); - assert( p2==p1 ); + /* Retrieve matchinfo() data. */ + rc = fts3GetMatchinfo(pCsr, zFormat); + sqlite3Fts3SegmentsClose(pTab); - sqlite3_result_text(context, "ok", -1, SQLITE_STATIC); + if( rc!=SQLITE_OK ){ + sqlite3_result_error_code(pContext, rc); + }else{ + int n = pCsr->nMatchinfo * sizeof(u32); + sqlite3_result_blob(pContext, pCsr->aMatchinfo, n, SQLITE_TRANSIENT); + } } #endif +/************** End of fts3_snippet.c ****************************************/ +/************** Begin file fts3_unicode.c ************************************/ /* -** Set up SQL objects in database db used to access the contents of -** the hash table pointed to by argument pHash. The hash table must -** been initialised to use string keys, and to take a private copy -** of the key when a value is inserted. i.e. by a call similar to: +** 2012 May 24 ** -** sqlite3Fts3HashInit(pHash, FTS3_HASH_STRING, 1); +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: ** -** This function adds a scalar function (see header comment above -** scalarFunc() in this file for details) and, if ENABLE_TABLE is -** defined at compilation time, a temporary virtual table (see header -** comment above struct HashTableVtab) to the database schema. Both -** provide read/write access to the contents of *pHash. +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. ** -** The third argument to this function, zName, is used as the name -** of both the scalar and, if created, the virtual table. +****************************************************************************** +** +** Implementation of the "unicode" full-text-search tokenizer. */ -SQLITE_PRIVATE int sqlite3Fts3InitHashTable( - sqlite3 *db, - fts3Hash *pHash, - const char *zName -){ - int rc = SQLITE_OK; - void *p = (void *)pHash; - const int any = SQLITE_ANY; - char *zTest = 0; - char *zTest2 = 0; -#ifdef SQLITE_TEST - void *pdb = (void *)db; - zTest = sqlite3_mprintf("%s_test", zName); - zTest2 = sqlite3_mprintf("%s_internal_test", zName); - if( !zTest || !zTest2 ){ - rc = SQLITE_NOMEM; - } -#endif +#ifdef SQLITE_ENABLE_FTS4_UNICODE61 + +#if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) + +/* #include */ +/* #include */ +/* #include */ +/* #include */ + + +/* +** The following two macros - READ_UTF8 and WRITE_UTF8 - have been copied +** from the sqlite3 source file utf.c. If this file is compiled as part +** of the amalgamation, they are not required. +*/ +#ifndef SQLITE_AMALGAMATION + +static const unsigned char sqlite3Utf8Trans1[] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x00, 0x01, 0x02, 0x03, 0x00, 0x01, 0x00, 0x00, +}; + +#define READ_UTF8(zIn, zTerm, c) \ + c = *(zIn++); \ + if( c>=0xc0 ){ \ + c = sqlite3Utf8Trans1[c-0xc0]; \ + while( zIn!=zTerm && (*zIn & 0xc0)==0x80 ){ \ + c = (c<<6) + (0x3f & *(zIn++)); \ + } \ + if( c<0x80 \ + || (c&0xFFFFF800)==0xD800 \ + || (c&0xFFFFFFFE)==0xFFFE ){ c = 0xFFFD; } \ + } + +#define WRITE_UTF8(zOut, c) { \ + if( c<0x00080 ){ \ + *zOut++ = (u8)(c&0xFF); \ + } \ + else if( c<0x00800 ){ \ + *zOut++ = 0xC0 + (u8)((c>>6)&0x1F); \ + *zOut++ = 0x80 + (u8)(c & 0x3F); \ + } \ + else if( c<0x10000 ){ \ + *zOut++ = 0xE0 + (u8)((c>>12)&0x0F); \ + *zOut++ = 0x80 + (u8)((c>>6) & 0x3F); \ + *zOut++ = 0x80 + (u8)(c & 0x3F); \ + }else{ \ + *zOut++ = 0xF0 + (u8)((c>>18) & 0x07); \ + *zOut++ = 0x80 + (u8)((c>>12) & 0x3F); \ + *zOut++ = 0x80 + (u8)((c>>6) & 0x3F); \ + *zOut++ = 0x80 + (u8)(c & 0x3F); \ + } \ +} + +#endif /* ifndef SQLITE_AMALGAMATION */ - if( rc!=SQLITE_OK - || (rc = sqlite3_create_function(db, zName, 1, any, p, scalarFunc, 0, 0)) - || (rc = sqlite3_create_function(db, zName, 2, any, p, scalarFunc, 0, 0)) -#ifdef SQLITE_TEST - || (rc = sqlite3_create_function(db, zTest, 2, any, p, testFunc, 0, 0)) - || (rc = sqlite3_create_function(db, zTest, 3, any, p, testFunc, 0, 0)) - || (rc = sqlite3_create_function(db, zTest2, 0, any, pdb, intTestFunc, 0, 0)) -#endif - ); +typedef struct unicode_tokenizer unicode_tokenizer; +typedef struct unicode_cursor unicode_cursor; - sqlite3_free(zTest); - sqlite3_free(zTest2); - return rc; -} +struct unicode_tokenizer { + sqlite3_tokenizer base; + int bRemoveDiacritic; + int nException; + int *aiException; +}; + +struct unicode_cursor { + sqlite3_tokenizer_cursor base; + const unsigned char *aInput; /* Input text being tokenized */ + int nInput; /* Size of aInput[] in bytes */ + int iOff; /* Current offset within aInput[] */ + int iToken; /* Index of next token to be returned */ + char *zToken; /* storage for current token */ + int nAlloc; /* space allocated at zToken */ +}; -#endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) */ -/************** End of fts3_tokenizer.c **************************************/ -/************** Begin file fts3_tokenizer1.c *********************************/ /* -** 2006 Oct 10 -** -** The author disclaims copyright to this source code. In place of -** a legal notice, here is a blessing: -** -** May you do good and not evil. -** May you find forgiveness for yourself and forgive others. -** May you share freely, never taking more than you give. -** -****************************************************************************** -** -** Implementation of the "simple" full-text-search tokenizer. +** Destroy a tokenizer allocated by unicodeCreate(). */ +static int unicodeDestroy(sqlite3_tokenizer *pTokenizer){ + if( pTokenizer ){ + unicode_tokenizer *p = (unicode_tokenizer *)pTokenizer; + sqlite3_free(p->aiException); + sqlite3_free(p); + } + return SQLITE_OK; +} /* -** The code in this file is only compiled if: +** As part of a tokenchars= or separators= option, the CREATE VIRTUAL TABLE +** statement has specified that the tokenizer for this table shall consider +** all characters in string zIn/nIn to be separators (if bAlnum==0) or +** token characters (if bAlnum==1). ** -** * The FTS3 module is being built as an extension -** (in which case SQLITE_CORE is not defined), or +** For each codepoint in the zIn/nIn string, this function checks if the +** sqlite3FtsUnicodeIsalnum() function already returns the desired result. +** If so, no action is taken. Otherwise, the codepoint is added to the +** unicode_tokenizer.aiException[] array. For the purposes of tokenization, +** the return value of sqlite3FtsUnicodeIsalnum() is inverted for all +** codepoints in the aiException[] array. ** -** * The FTS3 module is being built into the core of -** SQLite (in which case SQLITE_ENABLE_FTS3 is defined). +** If a standalone diacritic mark (one that sqlite3FtsUnicodeIsdiacritic() +** identifies as a diacritic) occurs in the zIn/nIn string it is ignored. +** It is not possible to change the behaviour of the tokenizer with respect +** to these codepoints. */ -#if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) +static int unicodeAddExceptions( + unicode_tokenizer *p, /* Tokenizer to add exceptions to */ + int bAlnum, /* Replace Isalnum() return value with this */ + const char *zIn, /* Array of characters to make exceptions */ + int nIn /* Length of z in bytes */ +){ + const unsigned char *z = (const unsigned char *)zIn; + const unsigned char *zTerm = &z[nIn]; + int iCode; + int nEntry = 0; + + assert( bAlnum==0 || bAlnum==1 ); + + while( zaiException, (p->nException+nEntry)*sizeof(int)); + if( aNew==0 ) return SQLITE_NOMEM; + nNew = p->nException; + z = (const unsigned char *)zIn; + while( zi; j--) aNew[j] = aNew[j-1]; + aNew[i] = iCode; + nNew++; + } + } + p->aiException = aNew; + p->nException = nNew; + } -typedef struct simple_tokenizer { - sqlite3_tokenizer base; - char delim[128]; /* flag ASCII delimiters */ -} simple_tokenizer; + return SQLITE_OK; +} -typedef struct simple_tokenizer_cursor { - sqlite3_tokenizer_cursor base; - const char *pInput; /* input we are tokenizing */ - int nBytes; /* size of the input */ - int iOffset; /* current position in pInput */ - int iToken; /* index of next token to be returned */ - char *pToken; /* storage for current token */ - int nTokenAllocated; /* space allocated to zToken buffer */ -} simple_tokenizer_cursor; +/* +** Return true if the p->aiException[] array contains the value iCode. +*/ +static int unicodeIsException(unicode_tokenizer *p, int iCode){ + if( p->nException>0 ){ + int *a = p->aiException; + int iLo = 0; + int iHi = p->nException-1; + while( iHi>=iLo ){ + int iTest = (iHi + iLo) / 2; + if( iCode==a[iTest] ){ + return 1; + }else if( iCode>a[iTest] ){ + iLo = iTest+1; + }else{ + iHi = iTest-1; + } + } + } -/* Forward declaration */ -static const sqlite3_tokenizer_module simpleTokenizerModule; + return 0; +} -static int simpleDelim(simple_tokenizer *t, unsigned char c){ - return c<0x80 && t->delim[c]; +/* +** Return true if, for the purposes of tokenization, codepoint iCode is +** considered a token character (not a separator). +*/ +static int unicodeIsAlnum(unicode_tokenizer *p, int iCode){ + assert( (sqlite3FtsUnicodeIsalnum(iCode) & 0xFFFFFFFE)==0 ); + return sqlite3FtsUnicodeIsalnum(iCode) ^ unicodeIsException(p, iCode); } /* ** Create a new tokenizer instance. */ -static int simpleCreate( - int argc, const char * const *argv, - sqlite3_tokenizer **ppTokenizer +static int unicodeCreate( + int nArg, /* Size of array argv[] */ + const char * const *azArg, /* Tokenizer creation arguments */ + sqlite3_tokenizer **pp /* OUT: New tokenizer handle */ ){ - simple_tokenizer *t; + unicode_tokenizer *pNew; /* New tokenizer object */ + int i; + int rc = SQLITE_OK; - t = (simple_tokenizer *) sqlite3_malloc(sizeof(*t)); - if( t==NULL ) return SQLITE_NOMEM; - memset(t, 0, sizeof(*t)); + pNew = (unicode_tokenizer *) sqlite3_malloc(sizeof(unicode_tokenizer)); + if( pNew==NULL ) return SQLITE_NOMEM; + memset(pNew, 0, sizeof(unicode_tokenizer)); + pNew->bRemoveDiacritic = 1; - /* TODO(shess) Delimiters need to remain the same from run to run, - ** else we need to reindex. One solution would be a meta-table to - ** track such information in the database, then we'd only want this - ** information on the initial create. - */ - if( argc>1 ){ - int i, n = strlen(argv[1]); - for(i=0; i=0x80 ){ - sqlite3_free(t); - return SQLITE_ERROR; - } - t->delim[ch] = 1; + for(i=0; rc==SQLITE_OK && ibRemoveDiacritic = 1; } - } else { - /* Mark non-alphanumeric ASCII characters as delimiters */ - int i; - for(i=1; i<0x80; i++){ - t->delim[i] = !isalnum(i); + else if( n==19 && memcmp("remove_diacritics=0", z, 19)==0 ){ + pNew->bRemoveDiacritic = 0; + } + else if( n>=11 && memcmp("tokenchars=", z, 11)==0 ){ + rc = unicodeAddExceptions(pNew, 1, &z[11], n-11); + } + else if( n>=11 && memcmp("separators=", z, 11)==0 ){ + rc = unicodeAddExceptions(pNew, 0, &z[11], n-11); + } + else{ + /* Unrecognized argument */ + rc = SQLITE_ERROR; } } - *ppTokenizer = &t->base; - return SQLITE_OK; -} - -/* -** Destroy a tokenizer -*/ -static int simpleDestroy(sqlite3_tokenizer *pTokenizer){ - sqlite3_free(pTokenizer); - return SQLITE_OK; + if( rc!=SQLITE_OK ){ + unicodeDestroy((sqlite3_tokenizer *)pNew); + pNew = 0; + } + *pp = (sqlite3_tokenizer *)pNew; + return rc; } /* @@ -102993,30 +133622,31 @@ static int simpleDestroy(sqlite3_tokenizer *pTokenizer){ ** used to incrementally tokenize this string is returned in ** *ppCursor. */ -static int simpleOpen( - sqlite3_tokenizer *pTokenizer, /* The tokenizer */ - const char *pInput, int nBytes, /* String to be tokenized */ - sqlite3_tokenizer_cursor **ppCursor /* OUT: Tokenization cursor */ +static int unicodeOpen( + sqlite3_tokenizer *p, /* The tokenizer */ + const char *aInput, /* Input string */ + int nInput, /* Size of string aInput in bytes */ + sqlite3_tokenizer_cursor **pp /* OUT: New cursor object */ ){ - simple_tokenizer_cursor *c; + unicode_cursor *pCsr; - c = (simple_tokenizer_cursor *) sqlite3_malloc(sizeof(*c)); - if( c==NULL ) return SQLITE_NOMEM; + pCsr = (unicode_cursor *)sqlite3_malloc(sizeof(unicode_cursor)); + if( pCsr==0 ){ + return SQLITE_NOMEM; + } + memset(pCsr, 0, sizeof(unicode_cursor)); - c->pInput = pInput; - if( pInput==0 ){ - c->nBytes = 0; - }else if( nBytes<0 ){ - c->nBytes = (int)strlen(pInput); + pCsr->aInput = (const unsigned char *)aInput; + if( aInput==0 ){ + pCsr->nInput = 0; + }else if( nInput<0 ){ + pCsr->nInput = (int)strlen(aInput); }else{ - c->nBytes = nBytes; + pCsr->nInput = nInput; } - c->iOffset = 0; /* start tokenizing at the beginning */ - c->iToken = 0; - c->pToken = NULL; /* no space allocated, yet. */ - c->nTokenAllocated = 0; - *ppCursor = &c->base; + *pp = &pCsr->base; + UNUSED_PARAMETER(p); return SQLITE_OK; } @@ -103024,10 +133654,10 @@ static int simpleOpen( ** Close a tokenization cursor previously opened by a call to ** simpleOpen() above. */ -static int simpleClose(sqlite3_tokenizer_cursor *pCursor){ - simple_tokenizer_cursor *c = (simple_tokenizer_cursor *) pCursor; - sqlite3_free(c->pToken); - sqlite3_free(c); +static int unicodeClose(sqlite3_tokenizer_cursor *pCursor){ + unicode_cursor *pCsr = (unicode_cursor *) pCursor; + sqlite3_free(pCsr->zToken); + sqlite3_free(pCsr); return SQLITE_OK; } @@ -103035,83 +133665,460 @@ static int simpleClose(sqlite3_tokenizer_cursor *pCursor){ ** Extract the next token from a tokenization cursor. The cursor must ** have been opened by a prior call to simpleOpen(). */ -static int simpleNext( - sqlite3_tokenizer_cursor *pCursor, /* Cursor returned by simpleOpen */ - const char **ppToken, /* OUT: *ppToken is the token text */ - int *pnBytes, /* OUT: Number of bytes in token */ - int *piStartOffset, /* OUT: Starting offset of token */ - int *piEndOffset, /* OUT: Ending offset of token */ - int *piPosition /* OUT: Position integer of token */ +static int unicodeNext( + sqlite3_tokenizer_cursor *pC, /* Cursor returned by simpleOpen */ + const char **paToken, /* OUT: Token text */ + int *pnToken, /* OUT: Number of bytes at *paToken */ + int *piStart, /* OUT: Starting offset of token */ + int *piEnd, /* OUT: Ending offset of token */ + int *piPos /* OUT: Position integer of token */ ){ - simple_tokenizer_cursor *c = (simple_tokenizer_cursor *) pCursor; - simple_tokenizer *t = (simple_tokenizer *) pCursor->pTokenizer; - unsigned char *p = (unsigned char *)c->pInput; - - while( c->iOffsetnBytes ){ - int iStartOffset; + unicode_cursor *pCsr = (unicode_cursor *)pC; + unicode_tokenizer *p = ((unicode_tokenizer *)pCsr->base.pTokenizer); + int iCode; + char *zOut; + const unsigned char *z = &pCsr->aInput[pCsr->iOff]; + const unsigned char *zStart = z; + const unsigned char *zEnd; + const unsigned char *zTerm = &pCsr->aInput[pCsr->nInput]; + + /* Scan past any delimiter characters before the start of the next token. + ** Return SQLITE_DONE early if this takes us all the way to the end of + ** the input. */ + while( z=zTerm ) return SQLITE_DONE; + + zOut = pCsr->zToken; + do { + int iOut; - /* Scan past delimiter characters */ - while( c->iOffsetnBytes && simpleDelim(t, p[c->iOffset]) ){ - c->iOffset++; + /* Grow the output buffer if required. */ + if( (zOut-pCsr->zToken)>=(pCsr->nAlloc-4) ){ + char *zNew = sqlite3_realloc(pCsr->zToken, pCsr->nAlloc+64); + if( !zNew ) return SQLITE_NOMEM; + zOut = &zNew[zOut - pCsr->zToken]; + pCsr->zToken = zNew; + pCsr->nAlloc += 64; } - /* Count non-delimiter characters. */ - iStartOffset = c->iOffset; - while( c->iOffsetnBytes && !simpleDelim(t, p[c->iOffset]) ){ - c->iOffset++; + /* Write the folded case of the last character read to the output */ + zEnd = z; + iOut = sqlite3FtsUnicodeFold(iCode, p->bRemoveDiacritic); + if( iOut ){ + WRITE_UTF8(zOut, iOut); } - if( c->iOffset>iStartOffset ){ - int i, n = c->iOffset-iStartOffset; - if( n>c->nTokenAllocated ){ - c->nTokenAllocated = n+20; - c->pToken = sqlite3_realloc(c->pToken, c->nTokenAllocated); - if( c->pToken==NULL ) return SQLITE_NOMEM; - } - for(i=0; ipToken[i] = ch<0x80 ? tolower(ch) : ch; - } - *ppToken = c->pToken; - *pnBytes = n; - *piStartOffset = iStartOffset; - *piEndOffset = c->iOffset; - *piPosition = c->iToken++; + /* If the cursor is not at EOF, read the next character */ + if( z>=zTerm ) break; + READ_UTF8(z, zTerm, iCode); + }while( unicodeIsAlnum(p, iCode) + || sqlite3FtsUnicodeIsdiacritic(iCode) + ); - return SQLITE_OK; + /* Set the output variables and return. */ + pCsr->iOff = (z - pCsr->aInput); + *paToken = pCsr->zToken; + *pnToken = zOut - pCsr->zToken; + *piStart = (zStart - pCsr->aInput); + *piEnd = (zEnd - pCsr->aInput); + *piPos = pCsr->iToken++; + return SQLITE_OK; +} + +/* +** Set *ppModule to a pointer to the sqlite3_tokenizer_module +** structure for the unicode tokenizer. +*/ +SQLITE_PRIVATE void sqlite3Fts3UnicodeTokenizer(sqlite3_tokenizer_module const **ppModule){ + static const sqlite3_tokenizer_module module = { + 0, + unicodeCreate, + unicodeDestroy, + unicodeOpen, + unicodeClose, + unicodeNext, + 0, + }; + *ppModule = &module; +} + +#endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) */ +#endif /* ifndef SQLITE_ENABLE_FTS4_UNICODE61 */ + +/************** End of fts3_unicode.c ****************************************/ +/************** Begin file fts3_unicode2.c ***********************************/ +/* +** 2012 May 25 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +****************************************************************************** +*/ + +/* +** DO NOT EDIT THIS MACHINE GENERATED FILE. +*/ + +#if defined(SQLITE_ENABLE_FTS4_UNICODE61) +#if defined(SQLITE_ENABLE_FTS3) || defined(SQLITE_ENABLE_FTS4) + +/* #include */ + +/* +** Return true if the argument corresponds to a unicode codepoint +** classified as either a letter or a number. Otherwise false. +** +** The results are undefined if the value passed to this function +** is less than zero. +*/ +SQLITE_PRIVATE int sqlite3FtsUnicodeIsalnum(int c){ + /* Each unsigned integer in the following array corresponds to a contiguous + ** range of unicode codepoints that are not either letters or numbers (i.e. + ** codepoints for which this function should return 0). + ** + ** The most significant 22 bits in each 32-bit value contain the first + ** codepoint in the range. The least significant 10 bits are used to store + ** the size of the range (always at least 1). In other words, the value + ** ((C<<22) + N) represents a range of N codepoints starting with codepoint + ** C. It is not possible to represent a range larger than 1023 codepoints + ** using this format. + */ + const static unsigned int aEntry[] = { + 0x00000030, 0x0000E807, 0x00016C06, 0x0001EC2F, 0x0002AC07, + 0x0002D001, 0x0002D803, 0x0002EC01, 0x0002FC01, 0x00035C01, + 0x0003DC01, 0x000B0804, 0x000B480E, 0x000B9407, 0x000BB401, + 0x000BBC81, 0x000DD401, 0x000DF801, 0x000E1002, 0x000E1C01, + 0x000FD801, 0x00120808, 0x00156806, 0x00162402, 0x00163C01, + 0x00164437, 0x0017CC02, 0x00180005, 0x00181816, 0x00187802, + 0x00192C15, 0x0019A804, 0x0019C001, 0x001B5001, 0x001B580F, + 0x001B9C07, 0x001BF402, 0x001C000E, 0x001C3C01, 0x001C4401, + 0x001CC01B, 0x001E980B, 0x001FAC09, 0x001FD804, 0x00205804, + 0x00206C09, 0x00209403, 0x0020A405, 0x0020C00F, 0x00216403, + 0x00217801, 0x0023901B, 0x00240004, 0x0024E803, 0x0024F812, + 0x00254407, 0x00258804, 0x0025C001, 0x00260403, 0x0026F001, + 0x0026F807, 0x00271C02, 0x00272C03, 0x00275C01, 0x00278802, + 0x0027C802, 0x0027E802, 0x00280403, 0x0028F001, 0x0028F805, + 0x00291C02, 0x00292C03, 0x00294401, 0x0029C002, 0x0029D401, + 0x002A0403, 0x002AF001, 0x002AF808, 0x002B1C03, 0x002B2C03, + 0x002B8802, 0x002BC002, 0x002C0403, 0x002CF001, 0x002CF807, + 0x002D1C02, 0x002D2C03, 0x002D5802, 0x002D8802, 0x002DC001, + 0x002E0801, 0x002EF805, 0x002F1803, 0x002F2804, 0x002F5C01, + 0x002FCC08, 0x00300403, 0x0030F807, 0x00311803, 0x00312804, + 0x00315402, 0x00318802, 0x0031FC01, 0x00320802, 0x0032F001, + 0x0032F807, 0x00331803, 0x00332804, 0x00335402, 0x00338802, + 0x00340802, 0x0034F807, 0x00351803, 0x00352804, 0x00355C01, + 0x00358802, 0x0035E401, 0x00360802, 0x00372801, 0x00373C06, + 0x00375801, 0x00376008, 0x0037C803, 0x0038C401, 0x0038D007, + 0x0038FC01, 0x00391C09, 0x00396802, 0x003AC401, 0x003AD006, + 0x003AEC02, 0x003B2006, 0x003C041F, 0x003CD00C, 0x003DC417, + 0x003E340B, 0x003E6424, 0x003EF80F, 0x003F380D, 0x0040AC14, + 0x00412806, 0x00415804, 0x00417803, 0x00418803, 0x00419C07, + 0x0041C404, 0x0042080C, 0x00423C01, 0x00426806, 0x0043EC01, + 0x004D740C, 0x004E400A, 0x00500001, 0x0059B402, 0x005A0001, + 0x005A6C02, 0x005BAC03, 0x005C4803, 0x005CC805, 0x005D4802, + 0x005DC802, 0x005ED023, 0x005F6004, 0x005F7401, 0x0060000F, + 0x0062A401, 0x0064800C, 0x0064C00C, 0x00650001, 0x00651002, + 0x0066C011, 0x00672002, 0x00677822, 0x00685C05, 0x00687802, + 0x0069540A, 0x0069801D, 0x0069FC01, 0x006A8007, 0x006AA006, + 0x006C0005, 0x006CD011, 0x006D6823, 0x006E0003, 0x006E840D, + 0x006F980E, 0x006FF004, 0x00709014, 0x0070EC05, 0x0071F802, + 0x00730008, 0x00734019, 0x0073B401, 0x0073C803, 0x00770027, + 0x0077F004, 0x007EF401, 0x007EFC03, 0x007F3403, 0x007F7403, + 0x007FB403, 0x007FF402, 0x00800065, 0x0081A806, 0x0081E805, + 0x00822805, 0x0082801A, 0x00834021, 0x00840002, 0x00840C04, + 0x00842002, 0x00845001, 0x00845803, 0x00847806, 0x00849401, + 0x00849C01, 0x0084A401, 0x0084B801, 0x0084E802, 0x00850005, + 0x00852804, 0x00853C01, 0x00864264, 0x00900027, 0x0091000B, + 0x0092704E, 0x00940200, 0x009C0475, 0x009E53B9, 0x00AD400A, + 0x00B39406, 0x00B3BC03, 0x00B3E404, 0x00B3F802, 0x00B5C001, + 0x00B5FC01, 0x00B7804F, 0x00B8C00C, 0x00BA001A, 0x00BA6C59, + 0x00BC00D6, 0x00BFC00C, 0x00C00005, 0x00C02019, 0x00C0A807, + 0x00C0D802, 0x00C0F403, 0x00C26404, 0x00C28001, 0x00C3EC01, + 0x00C64002, 0x00C6580A, 0x00C70024, 0x00C8001F, 0x00C8A81E, + 0x00C94001, 0x00C98020, 0x00CA2827, 0x00CB003F, 0x00CC0100, + 0x01370040, 0x02924037, 0x0293F802, 0x02983403, 0x0299BC10, + 0x029A7C01, 0x029BC008, 0x029C0017, 0x029C8002, 0x029E2402, + 0x02A00801, 0x02A01801, 0x02A02C01, 0x02A08C09, 0x02A0D804, + 0x02A1D004, 0x02A20002, 0x02A2D011, 0x02A33802, 0x02A38012, + 0x02A3E003, 0x02A4980A, 0x02A51C0D, 0x02A57C01, 0x02A60004, + 0x02A6CC1B, 0x02A77802, 0x02A8A40E, 0x02A90C01, 0x02A93002, + 0x02A97004, 0x02A9DC03, 0x02A9EC01, 0x02AAC001, 0x02AAC803, + 0x02AADC02, 0x02AAF802, 0x02AB0401, 0x02AB7802, 0x02ABAC07, + 0x02ABD402, 0x02AF8C0B, 0x03600001, 0x036DFC02, 0x036FFC02, + 0x037FFC02, 0x03E3FC01, 0x03EC7801, 0x03ECA401, 0x03EEC810, + 0x03F4F802, 0x03F7F002, 0x03F8001A, 0x03F88007, 0x03F8C023, + 0x03F95013, 0x03F9A004, 0x03FBFC01, 0x03FC040F, 0x03FC6807, + 0x03FCEC06, 0x03FD6C0B, 0x03FF8007, 0x03FFA007, 0x03FFE405, + 0x04040003, 0x0404DC09, 0x0405E411, 0x0406400C, 0x0407402E, + 0x040E7C01, 0x040F4001, 0x04215C01, 0x04247C01, 0x0424FC01, + 0x04280403, 0x04281402, 0x04283004, 0x0428E003, 0x0428FC01, + 0x04294009, 0x0429FC01, 0x042CE407, 0x04400003, 0x0440E016, + 0x04420003, 0x0442C012, 0x04440003, 0x04449C0E, 0x04450004, + 0x04460003, 0x0446CC0E, 0x04471404, 0x045AAC0D, 0x0491C004, + 0x05BD442E, 0x05BE3C04, 0x074000F6, 0x07440027, 0x0744A4B5, + 0x07480046, 0x074C0057, 0x075B0401, 0x075B6C01, 0x075BEC01, + 0x075C5401, 0x075CD401, 0x075D3C01, 0x075DBC01, 0x075E2401, + 0x075EA401, 0x075F0C01, 0x07BBC002, 0x07C0002C, 0x07C0C064, + 0x07C2800F, 0x07C2C40E, 0x07C3040F, 0x07C3440F, 0x07C4401F, + 0x07C4C03C, 0x07C5C02B, 0x07C7981D, 0x07C8402B, 0x07C90009, + 0x07C94002, 0x07CC0021, 0x07CCC006, 0x07CCDC46, 0x07CE0014, + 0x07CE8025, 0x07CF1805, 0x07CF8011, 0x07D0003F, 0x07D10001, + 0x07D108B6, 0x07D3E404, 0x07D4003E, 0x07D50004, 0x07D54018, + 0x07D7EC46, 0x07D9140B, 0x07DA0046, 0x07DC0074, 0x38000401, + 0x38008060, 0x380400F0, 0x3C000001, 0x3FFFF401, 0x40000001, + 0x43FFF401, + }; + static const unsigned int aAscii[4] = { + 0xFFFFFFFF, 0xFC00FFFF, 0xF8000001, 0xF8000001, + }; + + if( c<128 ){ + return ( (aAscii[c >> 5] & (1 << (c & 0x001F)))==0 ); + }else if( c<(1<<22) ){ + unsigned int key = (((unsigned int)c)<<10) | 0x000003FF; + int iRes; + int iHi = sizeof(aEntry)/sizeof(aEntry[0]) - 1; + int iLo = 0; + while( iHi>=iLo ){ + int iTest = (iHi + iLo) / 2; + if( key >= aEntry[iTest] ){ + iRes = iTest; + iLo = iTest+1; + }else{ + iHi = iTest-1; + } } + assert( aEntry[0]=aEntry[iRes] ); + return (c >= ((aEntry[iRes]>>10) + (aEntry[iRes]&0x3FF))); } - return SQLITE_DONE; + return 1; } + /* -** The set of routines that implement the simple tokenizer -*/ -static const sqlite3_tokenizer_module simpleTokenizerModule = { - 0, - simpleCreate, - simpleDestroy, - simpleOpen, - simpleClose, - simpleNext, +** If the argument is a codepoint corresponding to a lowercase letter +** in the ASCII range with a diacritic added, return the codepoint +** of the ASCII letter only. For example, if passed 235 - "LATIN +** SMALL LETTER E WITH DIAERESIS" - return 65 ("LATIN SMALL LETTER +** E"). The resuls of passing a codepoint that corresponds to an +** uppercase letter are undefined. +*/ +static int remove_diacritic(int c){ + unsigned short aDia[] = { + 0, 1797, 1848, 1859, 1891, 1928, 1940, 1995, + 2024, 2040, 2060, 2110, 2168, 2206, 2264, 2286, + 2344, 2383, 2472, 2488, 2516, 2596, 2668, 2732, + 2782, 2842, 2894, 2954, 2984, 3000, 3028, 3336, + 3456, 3696, 3712, 3728, 3744, 3896, 3912, 3928, + 3968, 4008, 4040, 4106, 4138, 4170, 4202, 4234, + 4266, 4296, 4312, 4344, 4408, 4424, 4472, 4504, + 6148, 6198, 6264, 6280, 6360, 6429, 6505, 6529, + 61448, 61468, 61534, 61592, 61642, 61688, 61704, 61726, + 61784, 61800, 61836, 61880, 61914, 61948, 61998, 62122, + 62154, 62200, 62218, 62302, 62364, 62442, 62478, 62536, + 62554, 62584, 62604, 62640, 62648, 62656, 62664, 62730, + 62924, 63050, 63082, 63274, 63390, + }; + char aChar[] = { + '\0', 'a', 'c', 'e', 'i', 'n', 'o', 'u', 'y', 'y', 'a', 'c', + 'd', 'e', 'e', 'g', 'h', 'i', 'j', 'k', 'l', 'n', 'o', 'r', + 's', 't', 'u', 'u', 'w', 'y', 'z', 'o', 'u', 'a', 'i', 'o', + 'u', 'g', 'k', 'o', 'j', 'g', 'n', 'a', 'e', 'i', 'o', 'r', + 'u', 's', 't', 'h', 'a', 'e', 'o', 'y', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', 'a', 'b', 'd', 'd', 'e', 'f', 'g', 'h', + 'h', 'i', 'k', 'l', 'l', 'm', 'n', 'p', 'r', 'r', 's', 't', + 'u', 'v', 'w', 'w', 'x', 'y', 'z', 'h', 't', 'w', 'y', 'a', + 'e', 'i', 'o', 'u', 'y', + }; + + unsigned int key = (((unsigned int)c)<<3) | 0x00000007; + int iRes = 0; + int iHi = sizeof(aDia)/sizeof(aDia[0]) - 1; + int iLo = 0; + while( iHi>=iLo ){ + int iTest = (iHi + iLo) / 2; + if( key >= aDia[iTest] ){ + iRes = iTest; + iLo = iTest+1; + }else{ + iHi = iTest-1; + } + } + assert( key>=aDia[iRes] ); + return ((c > (aDia[iRes]>>3) + (aDia[iRes]&0x07)) ? c : (int)aChar[iRes]); }; + /* -** Allocate a new simple tokenizer. Return a pointer to the new -** tokenizer in *ppModule +** Return true if the argument interpreted as a unicode codepoint +** is a diacritical modifier character. */ -SQLITE_PRIVATE void sqlite3Fts3SimpleTokenizerModule( - sqlite3_tokenizer_module const**ppModule -){ - *ppModule = &simpleTokenizerModule; +SQLITE_PRIVATE int sqlite3FtsUnicodeIsdiacritic(int c){ + unsigned int mask0 = 0x08029FDF; + unsigned int mask1 = 0x000361F8; + if( c<768 || c>817 ) return 0; + return (c < 768+32) ? + (mask0 & (1 << (c-768))) : + (mask1 & (1 << (c-768-32))); } -#endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) */ -/************** End of fts3_tokenizer1.c *************************************/ +/* +** Interpret the argument as a unicode codepoint. If the codepoint +** is an upper case character that has a lower case equivalent, +** return the codepoint corresponding to the lower case version. +** Otherwise, return a copy of the argument. +** +** The results are undefined if the value passed to this function +** is less than zero. +*/ +SQLITE_PRIVATE int sqlite3FtsUnicodeFold(int c, int bRemoveDiacritic){ + /* Each entry in the following array defines a rule for folding a range + ** of codepoints to lower case. The rule applies to a range of nRange + ** codepoints starting at codepoint iCode. + ** + ** If the least significant bit in flags is clear, then the rule applies + ** to all nRange codepoints (i.e. all nRange codepoints are upper case and + ** need to be folded). Or, if it is set, then the rule only applies to + ** every second codepoint in the range, starting with codepoint C. + ** + ** The 7 most significant bits in flags are an index into the aiOff[] + ** array. If a specific codepoint C does require folding, then its lower + ** case equivalent is ((C + aiOff[flags>>1]) & 0xFFFF). + ** + ** The contents of this array are generated by parsing the CaseFolding.txt + ** file distributed as part of the "Unicode Character Database". See + ** http://www.unicode.org for details. + */ + static const struct TableEntry { + unsigned short iCode; + unsigned char flags; + unsigned char nRange; + } aEntry[] = { + {65, 14, 26}, {181, 64, 1}, {192, 14, 23}, + {216, 14, 7}, {256, 1, 48}, {306, 1, 6}, + {313, 1, 16}, {330, 1, 46}, {376, 116, 1}, + {377, 1, 6}, {383, 104, 1}, {385, 50, 1}, + {386, 1, 4}, {390, 44, 1}, {391, 0, 1}, + {393, 42, 2}, {395, 0, 1}, {398, 32, 1}, + {399, 38, 1}, {400, 40, 1}, {401, 0, 1}, + {403, 42, 1}, {404, 46, 1}, {406, 52, 1}, + {407, 48, 1}, {408, 0, 1}, {412, 52, 1}, + {413, 54, 1}, {415, 56, 1}, {416, 1, 6}, + {422, 60, 1}, {423, 0, 1}, {425, 60, 1}, + {428, 0, 1}, {430, 60, 1}, {431, 0, 1}, + {433, 58, 2}, {435, 1, 4}, {439, 62, 1}, + {440, 0, 1}, {444, 0, 1}, {452, 2, 1}, + {453, 0, 1}, {455, 2, 1}, {456, 0, 1}, + {458, 2, 1}, {459, 1, 18}, {478, 1, 18}, + {497, 2, 1}, {498, 1, 4}, {502, 122, 1}, + {503, 134, 1}, {504, 1, 40}, {544, 110, 1}, + {546, 1, 18}, {570, 70, 1}, {571, 0, 1}, + {573, 108, 1}, {574, 68, 1}, {577, 0, 1}, + {579, 106, 1}, {580, 28, 1}, {581, 30, 1}, + {582, 1, 10}, {837, 36, 1}, {880, 1, 4}, + {886, 0, 1}, {902, 18, 1}, {904, 16, 3}, + {908, 26, 1}, {910, 24, 2}, {913, 14, 17}, + {931, 14, 9}, {962, 0, 1}, {975, 4, 1}, + {976, 140, 1}, {977, 142, 1}, {981, 146, 1}, + {982, 144, 1}, {984, 1, 24}, {1008, 136, 1}, + {1009, 138, 1}, {1012, 130, 1}, {1013, 128, 1}, + {1015, 0, 1}, {1017, 152, 1}, {1018, 0, 1}, + {1021, 110, 3}, {1024, 34, 16}, {1040, 14, 32}, + {1120, 1, 34}, {1162, 1, 54}, {1216, 6, 1}, + {1217, 1, 14}, {1232, 1, 88}, {1329, 22, 38}, + {4256, 66, 38}, {4295, 66, 1}, {4301, 66, 1}, + {7680, 1, 150}, {7835, 132, 1}, {7838, 96, 1}, + {7840, 1, 96}, {7944, 150, 8}, {7960, 150, 6}, + {7976, 150, 8}, {7992, 150, 8}, {8008, 150, 6}, + {8025, 151, 8}, {8040, 150, 8}, {8072, 150, 8}, + {8088, 150, 8}, {8104, 150, 8}, {8120, 150, 2}, + {8122, 126, 2}, {8124, 148, 1}, {8126, 100, 1}, + {8136, 124, 4}, {8140, 148, 1}, {8152, 150, 2}, + {8154, 120, 2}, {8168, 150, 2}, {8170, 118, 2}, + {8172, 152, 1}, {8184, 112, 2}, {8186, 114, 2}, + {8188, 148, 1}, {8486, 98, 1}, {8490, 92, 1}, + {8491, 94, 1}, {8498, 12, 1}, {8544, 8, 16}, + {8579, 0, 1}, {9398, 10, 26}, {11264, 22, 47}, + {11360, 0, 1}, {11362, 88, 1}, {11363, 102, 1}, + {11364, 90, 1}, {11367, 1, 6}, {11373, 84, 1}, + {11374, 86, 1}, {11375, 80, 1}, {11376, 82, 1}, + {11378, 0, 1}, {11381, 0, 1}, {11390, 78, 2}, + {11392, 1, 100}, {11499, 1, 4}, {11506, 0, 1}, + {42560, 1, 46}, {42624, 1, 24}, {42786, 1, 14}, + {42802, 1, 62}, {42873, 1, 4}, {42877, 76, 1}, + {42878, 1, 10}, {42891, 0, 1}, {42893, 74, 1}, + {42896, 1, 4}, {42912, 1, 10}, {42922, 72, 1}, + {65313, 14, 26}, + }; + static const unsigned short aiOff[] = { + 1, 2, 8, 15, 16, 26, 28, 32, + 37, 38, 40, 48, 63, 64, 69, 71, + 79, 80, 116, 202, 203, 205, 206, 207, + 209, 210, 211, 213, 214, 217, 218, 219, + 775, 7264, 10792, 10795, 23228, 23256, 30204, 54721, + 54753, 54754, 54756, 54787, 54793, 54809, 57153, 57274, + 57921, 58019, 58363, 61722, 65268, 65341, 65373, 65406, + 65408, 65410, 65415, 65424, 65436, 65439, 65450, 65462, + 65472, 65476, 65478, 65480, 65482, 65488, 65506, 65511, + 65514, 65521, 65527, 65528, 65529, + }; + + int ret = c; + + assert( c>=0 ); + assert( sizeof(unsigned short)==2 && sizeof(unsigned char)==1 ); + + if( c<128 ){ + if( c>='A' && c<='Z' ) ret = c + ('a' - 'A'); + }else if( c<65536 ){ + int iHi = sizeof(aEntry)/sizeof(aEntry[0]) - 1; + int iLo = 0; + int iRes = -1; + + while( iHi>=iLo ){ + int iTest = (iHi + iLo) / 2; + int cmp = (c - aEntry[iTest].iCode); + if( cmp>=0 ){ + iRes = iTest; + iLo = iTest+1; + }else{ + iHi = iTest-1; + } + } + assert( iRes<0 || c>=aEntry[iRes].iCode ); + + if( iRes>=0 ){ + const struct TableEntry *p = &aEntry[iRes]; + if( c<(p->iCode + p->nRange) && 0==(0x01 & p->flags & (p->iCode ^ c)) ){ + ret = (c + (aiOff[p->flags>>1])) & 0x0000FFFF; + assert( ret>0 ); + } + } + + if( bRemoveDiacritic ) ret = remove_diacritic(ret); + } + + else if( c>=66560 && c<66600 ){ + ret = c + 40; + } + + return ret; +} +#endif /* defined(SQLITE_ENABLE_FTS3) || defined(SQLITE_ENABLE_FTS4) */ +#endif /* !defined(SQLITE_ENABLE_FTS4_UNICODE61) */ + +/************** End of fts3_unicode2.c ***************************************/ /************** Begin file rtree.c *******************************************/ /* ** 2001 September 15 @@ -103126,8 +134133,45 @@ SQLITE_PRIVATE void sqlite3Fts3SimpleTokenizerModule( ************************************************************************* ** This file contains code for implementations of the r-tree and r*-tree ** algorithms packaged as an SQLite virtual table module. +*/ + +/* +** Database Format of R-Tree Tables +** -------------------------------- +** +** The data structure for a single virtual r-tree table is stored in three +** native SQLite tables declared as follows. In each case, the '%' character +** in the table name is replaced with the user-supplied name of the r-tree +** table. +** +** CREATE TABLE %_node(nodeno INTEGER PRIMARY KEY, data BLOB) +** CREATE TABLE %_parent(nodeno INTEGER PRIMARY KEY, parentnode INTEGER) +** CREATE TABLE %_rowid(rowid INTEGER PRIMARY KEY, nodeno INTEGER) +** +** The data for each node of the r-tree structure is stored in the %_node +** table. For each node that is not the root node of the r-tree, there is +** an entry in the %_parent table associating the node with its parent. +** And for each row of data in the table, there is an entry in the %_rowid +** table that maps from the entries rowid to the id of the node that it +** is stored on. +** +** The root node of an r-tree always exists, even if the r-tree table is +** empty. The nodeno of the root node is always 1. All other nodes in the +** table must be the same size as the root node. The content of each node +** is formatted as follows: +** +** 1. If the node is the root node (node 1), then the first 2 bytes +** of the node contain the tree depth as a big-endian integer. +** For non-root nodes, the first 2 bytes are left unused. ** -** $Id: rtree.c,v 1.12 2008/12/22 15:04:32 danielk1977 Exp $ +** 2. The next 2 bytes contain the number of entries currently +** stored in the node. +** +** 3. The remainder of the node contains the node entries. Each entry +** consists of a single 8-byte integer followed by an even number +** of 4-byte coordinates. For leaf nodes the integer is the rowid +** of a record. For internal nodes it is the node number of a +** child page. */ #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_RTREE) @@ -103170,24 +134214,38 @@ SQLITE_PRIVATE void sqlite3Fts3SimpleTokenizerModule( #define AssignCells splitNodeStartree #endif +#if !defined(NDEBUG) && !defined(SQLITE_DEBUG) +# define NDEBUG 1 +#endif #ifndef SQLITE_CORE SQLITE_EXTENSION_INIT1 #else #endif +/* #include */ +/* #include */ #ifndef SQLITE_AMALGAMATION +#include "sqlite3rtree.h" typedef sqlite3_int64 i64; typedef unsigned char u8; typedef unsigned int u32; #endif +/* The following macro is used to suppress compiler warnings. +*/ +#ifndef UNUSED_PARAMETER +# define UNUSED_PARAMETER(x) (void)(x) +#endif + typedef struct Rtree Rtree; typedef struct RtreeCursor RtreeCursor; typedef struct RtreeNode RtreeNode; typedef struct RtreeCell RtreeCell; typedef struct RtreeConstraint RtreeConstraint; +typedef struct RtreeMatchArg RtreeMatchArg; +typedef struct RtreeGeomCallback RtreeGeomCallback; typedef union RtreeCoord RtreeCoord; /* The rtree may have between 1 and RTREE_MAX_DIMENSIONS dimensions. */ @@ -103244,6 +134302,19 @@ struct Rtree { #define RTREE_COORD_REAL32 0 #define RTREE_COORD_INT32 1 +/* +** If SQLITE_RTREE_INT_ONLY is defined, then this virtual table will +** only deal with integer coordinates. No floating point operations +** will be done. +*/ +#ifdef SQLITE_RTREE_INT_ONLY + typedef sqlite3_int64 RtreeDValue; /* High accuracy coordinate */ + typedef int RtreeValue; /* Low accuracy coordinate */ +#else + typedef double RtreeDValue; /* High accuracy coordinate */ + typedef float RtreeValue; /* Low accuracy coordinate */ +#endif + /* ** The minimum number of cells allowed for a node is a third of the ** maximum. In Gutman's notation: @@ -103257,6 +134328,15 @@ struct Rtree { #define RTREE_REINSERT(p) RTREE_MINCELLS(p) #define RTREE_MAXCELLS 51 +/* +** The smallest possible node-size is (512-64)==448 bytes. And the largest +** supported cell size is 48 bytes (8 byte rowid + ten 4 byte coordinates). +** Therefore all non-root nodes must contain at least 3 entries. Since +** 2^40 is greater than 2^64, an r-tree structure always has a depth of +** 40 or less. +*/ +#define RTREE_MAX_DEPTH 40 + /* ** An rtree cursor object. */ @@ -103270,54 +134350,47 @@ struct RtreeCursor { }; union RtreeCoord { - float f; + RtreeValue f; int i; }; /* ** The argument is an RtreeCoord. Return the value stored within the RtreeCoord -** formatted as a double. This macro assumes that local variable pRtree points -** to the Rtree structure associated with the RtreeCoord. +** formatted as a RtreeDValue (double or int64). This macro assumes that local +** variable pRtree points to the Rtree structure associated with the +** RtreeCoord. */ -#define DCOORD(coord) ( \ - (pRtree->eCoordType==RTREE_COORD_REAL32) ? \ - ((double)coord.f) : \ - ((double)coord.i) \ -) +#ifdef SQLITE_RTREE_INT_ONLY +# define DCOORD(coord) ((RtreeDValue)coord.i) +#else +# define DCOORD(coord) ( \ + (pRtree->eCoordType==RTREE_COORD_REAL32) ? \ + ((double)coord.f) : \ + ((double)coord.i) \ + ) +#endif /* ** A search constraint. */ struct RtreeConstraint { - int iCoord; /* Index of constrained coordinate */ - int op; /* Constraining operation */ - double rValue; /* Constraint value. */ + int iCoord; /* Index of constrained coordinate */ + int op; /* Constraining operation */ + RtreeDValue rValue; /* Constraint value. */ + int (*xGeom)(sqlite3_rtree_geometry*, int, RtreeDValue*, int*); + sqlite3_rtree_geometry *pGeom; /* Constraint callback argument for a MATCH */ }; /* Possible values for RtreeConstraint.op */ -#define RTREE_EQ 0x41 -#define RTREE_LE 0x42 -#define RTREE_LT 0x43 -#define RTREE_GE 0x44 -#define RTREE_GT 0x45 +#define RTREE_EQ 0x41 +#define RTREE_LE 0x42 +#define RTREE_LT 0x43 +#define RTREE_GE 0x44 +#define RTREE_GT 0x45 +#define RTREE_MATCH 0x46 /* ** An rtree structure node. -** -** Data format (RtreeNode.zData): -** -** 1. If the node is the root node (node 1), then the first 2 bytes -** of the node contain the tree depth as a big-endian integer. -** For non-root nodes, the first 2 bytes are left unused. -** -** 2. The next 2 bytes contain the number of entries currently -** stored in the node. -** -** 3. The remainder of the node contains the node entries. Each entry -** consists of a single 8-byte integer followed by an even number -** of 4-byte coordinates. For leaf nodes the integer is the rowid -** of a record. For internal nodes it is the node number of a -** child page. */ struct RtreeNode { RtreeNode *pParent; /* Parent node */ @@ -103337,6 +134410,40 @@ struct RtreeCell { RtreeCoord aCoord[RTREE_MAX_DIMENSIONS*2]; }; + +/* +** Value for the first field of every RtreeMatchArg object. The MATCH +** operator tests that the first field of a blob operand matches this +** value to avoid operating on invalid blobs (which could cause a segfault). +*/ +#define RTREE_GEOMETRY_MAGIC 0x891245AB + +/* +** An instance of this structure must be supplied as a blob argument to +** the right-hand-side of an SQL MATCH operator used to constrain an +** r-tree query. +*/ +struct RtreeMatchArg { + u32 magic; /* Always RTREE_GEOMETRY_MAGIC */ + int (*xGeom)(sqlite3_rtree_geometry *, int, RtreeDValue*, int *); + void *pContext; + int nParam; + RtreeDValue aParam[1]; +}; + +/* +** When a geometry callback is created (see sqlite3_rtree_geometry_callback), +** a single instance of the following structure is allocated. It is used +** as the context for the user-function created by by s_r_g_c(). The object +** is eventually deleted by the destructor mechanism provided by +** sqlite3_create_function_v2() (which is called by s_r_g_c() to create +** the geometry callback function). +*/ +struct RtreeGeomCallback { + int (*xGeom)(sqlite3_rtree_geometry*, int, RtreeDValue*, int*); + void *pContext; +}; + #ifndef MAX # define MAX(x,y) ((x) < (y) ? (y) : (x)) #endif @@ -103419,10 +134526,8 @@ static void nodeReference(RtreeNode *p){ ** Clear the content of node p (set all bytes to 0x00). */ static void nodeZero(Rtree *pRtree, RtreeNode *p){ - if( p ){ - memset(&p->zData[2], 0, pRtree->iNodeSize-2); - p->isDirty = 1; - } + memset(&p->zData[2], 0, pRtree->iNodeSize-2); + p->isDirty = 1; } /* @@ -103442,7 +134547,6 @@ static int nodeHash(i64 iNode){ */ static RtreeNode *nodeHashLookup(Rtree *pRtree, i64 iNode){ RtreeNode *p; - assert( iNode!=0 ); for(p=pRtree->aHash[nodeHash(iNode)]; p && p->iNode!=iNode; p=p->pNext); return p; } @@ -103451,13 +134555,11 @@ static RtreeNode *nodeHashLookup(Rtree *pRtree, i64 iNode){ ** Add node pNode to the node hash table. */ static void nodeHashInsert(Rtree *pRtree, RtreeNode *pNode){ - if( pNode ){ - int iHash; - assert( pNode->pNext==0 ); - iHash = nodeHash(pNode->iNode); - pNode->pNext = pRtree->aHash[iHash]; - pRtree->aHash[iHash] = pNode; - } + int iHash; + assert( pNode->pNext==0 ); + iHash = nodeHash(pNode->iNode); + pNode->pNext = pRtree->aHash[iHash]; + pRtree->aHash[iHash] = pNode; } /* @@ -103479,11 +134581,11 @@ static void nodeHashDelete(Rtree *pRtree, RtreeNode *pNode){ ** assigned a node number when nodeWrite() is called to write the ** node contents out to the database. */ -static RtreeNode *nodeNew(Rtree *pRtree, RtreeNode *pParent, int zero){ +static RtreeNode *nodeNew(Rtree *pRtree, RtreeNode *pParent){ RtreeNode *pNode; pNode = (RtreeNode *)sqlite3_malloc(sizeof(RtreeNode) + pRtree->iNodeSize); if( pNode ){ - memset(pNode, 0, sizeof(RtreeNode) + (zero?pRtree->iNodeSize:0)); + memset(pNode, 0, sizeof(RtreeNode) + pRtree->iNodeSize); pNode->zData = (u8 *)&pNode[1]; pNode->nRef = 1; pNode->pParent = pParent; @@ -103504,6 +134606,7 @@ nodeAcquire( RtreeNode **ppNode /* OUT: Acquired node */ ){ int rc; + int rc2 = SQLITE_OK; RtreeNode *pNode; /* Check if the requested node is already in the hash table. If so, @@ -103520,38 +134623,63 @@ nodeAcquire( return SQLITE_OK; } - pNode = (RtreeNode *)sqlite3_malloc(sizeof(RtreeNode) + pRtree->iNodeSize); - if( !pNode ){ - *ppNode = 0; - return SQLITE_NOMEM; - } - pNode->pParent = pParent; - pNode->zData = (u8 *)&pNode[1]; - pNode->nRef = 1; - pNode->iNode = iNode; - pNode->isDirty = 0; - pNode->pNext = 0; - sqlite3_bind_int64(pRtree->pReadNode, 1, iNode); rc = sqlite3_step(pRtree->pReadNode); if( rc==SQLITE_ROW ){ const u8 *zBlob = sqlite3_column_blob(pRtree->pReadNode, 0); - memcpy(pNode->zData, zBlob, pRtree->iNodeSize); - nodeReference(pParent); - }else{ - sqlite3_free(pNode); - pNode = 0; + if( pRtree->iNodeSize==sqlite3_column_bytes(pRtree->pReadNode, 0) ){ + pNode = (RtreeNode *)sqlite3_malloc(sizeof(RtreeNode)+pRtree->iNodeSize); + if( !pNode ){ + rc2 = SQLITE_NOMEM; + }else{ + pNode->pParent = pParent; + pNode->zData = (u8 *)&pNode[1]; + pNode->nRef = 1; + pNode->iNode = iNode; + pNode->isDirty = 0; + pNode->pNext = 0; + memcpy(pNode->zData, zBlob, pRtree->iNodeSize); + nodeReference(pParent); + } + } } - - *ppNode = pNode; rc = sqlite3_reset(pRtree->pReadNode); + if( rc==SQLITE_OK ) rc = rc2; - if( rc==SQLITE_OK && iNode==1 ){ + /* If the root node was just loaded, set pRtree->iDepth to the height + ** of the r-tree structure. A height of zero means all data is stored on + ** the root node. A height of one means the children of the root node + ** are the leaves, and so on. If the depth as specified on the root node + ** is greater than RTREE_MAX_DEPTH, the r-tree structure must be corrupt. + */ + if( pNode && iNode==1 ){ pRtree->iDepth = readInt16(pNode->zData); + if( pRtree->iDepth>RTREE_MAX_DEPTH ){ + rc = SQLITE_CORRUPT_VTAB; + } + } + + /* If no error has occurred so far, check if the "number of entries" + ** field on the node is too large. If so, set the return code to + ** SQLITE_CORRUPT_VTAB. + */ + if( pNode && rc==SQLITE_OK ){ + if( NCELL(pNode)>((pRtree->iNodeSize-4)/pRtree->nBytesPerCell) ){ + rc = SQLITE_CORRUPT_VTAB; + } } - assert( (rc==SQLITE_OK && pNode) || (pNode==0 && rc!=SQLITE_OK) ); - nodeHashInsert(pRtree, pNode); + if( rc==SQLITE_OK ){ + if( pNode!=0 ){ + nodeHashInsert(pRtree, pNode); + }else{ + rc = SQLITE_CORRUPT_VTAB; + } + *ppNode = pNode; + }else{ + sqlite3_free(pNode); + *ppNode = 0; + } return rc; } @@ -103604,8 +134732,7 @@ nodeInsertCell( nMaxCell = (pRtree->iNodeSize-4)/pRtree->nBytesPerCell; nCell = NCELL(pNode); - assert(nCell<=nMaxCell); - + assert( nCell<=nMaxCell ); if( nCellzData[2], nCell+1); @@ -103825,6 +134952,25 @@ static int rtreeOpen(sqlite3_vtab *pVTab, sqlite3_vtab_cursor **ppCursor){ return rc; } + +/* +** Free the RtreeCursor.aConstraint[] array and its contents. +*/ +static void freeCursorConstraints(RtreeCursor *pCsr){ + if( pCsr->aConstraint ){ + int i; /* Used to iterate through constraint array */ + for(i=0; inConstraint; i++){ + sqlite3_rtree_geometry *pGeom = pCsr->aConstraint[i].pGeom; + if( pGeom ){ + if( pGeom->xDelUser ) pGeom->xDelUser(pGeom->pUser); + sqlite3_free(pGeom); + } + } + sqlite3_free(pCsr->aConstraint); + pCsr->aConstraint = 0; + } +} + /* ** Rtree virtual table module xClose method. */ @@ -103832,7 +134978,7 @@ static int rtreeClose(sqlite3_vtab_cursor *cur){ Rtree *pRtree = (Rtree *)(cur->pVtab); int rc; RtreeCursor *pCsr = (RtreeCursor *)cur; - sqlite3_free(pCsr->aConstraint); + freeCursorConstraints(pCsr); rc = nodeRelease(pRtree, pCsr->pNode); sqlite3_free(pCsr); return rc; @@ -103849,57 +134995,104 @@ static int rtreeEof(sqlite3_vtab_cursor *cur){ return (pCsr->pNode==0); } +/* +** The r-tree constraint passed as the second argument to this function is +** guaranteed to be a MATCH constraint. +*/ +static int testRtreeGeom( + Rtree *pRtree, /* R-Tree object */ + RtreeConstraint *pConstraint, /* MATCH constraint to test */ + RtreeCell *pCell, /* Cell to test */ + int *pbRes /* OUT: Test result */ +){ + int i; + RtreeDValue aCoord[RTREE_MAX_DIMENSIONS*2]; + int nCoord = pRtree->nDim*2; + + assert( pConstraint->op==RTREE_MATCH ); + assert( pConstraint->pGeom ); + + for(i=0; iaCoord[i]); + } + return pConstraint->xGeom(pConstraint->pGeom, nCoord, aCoord, pbRes); +} + /* ** Cursor pCursor currently points to a cell in a non-leaf page. -** Return true if the sub-tree headed by the cell is filtered +** Set *pbEof to true if the sub-tree headed by the cell is filtered ** (excluded) by the constraints in the pCursor->aConstraint[] ** array, or false otherwise. +** +** Return SQLITE_OK if successful or an SQLite error code if an error +** occurs within a geometry callback. */ -static int testRtreeCell(Rtree *pRtree, RtreeCursor *pCursor){ +static int testRtreeCell(Rtree *pRtree, RtreeCursor *pCursor, int *pbEof){ RtreeCell cell; int ii; int bRes = 0; + int rc = SQLITE_OK; nodeGetCell(pRtree, pCursor->pNode, pCursor->iCell, &cell); for(ii=0; bRes==0 && iinConstraint; ii++){ RtreeConstraint *p = &pCursor->aConstraint[ii]; - double cell_min = DCOORD(cell.aCoord[(p->iCoord>>1)*2]); - double cell_max = DCOORD(cell.aCoord[(p->iCoord>>1)*2+1]); + RtreeDValue cell_min = DCOORD(cell.aCoord[(p->iCoord>>1)*2]); + RtreeDValue cell_max = DCOORD(cell.aCoord[(p->iCoord>>1)*2+1]); assert(p->op==RTREE_LE || p->op==RTREE_LT || p->op==RTREE_GE - || p->op==RTREE_GT || p->op==RTREE_EQ + || p->op==RTREE_GT || p->op==RTREE_EQ || p->op==RTREE_MATCH ); switch( p->op ){ - case RTREE_LE: case RTREE_LT: bRes = p->rValuerValue>cell_max; break; - case RTREE_EQ: + case RTREE_LE: case RTREE_LT: + bRes = p->rValuerValue>cell_max; + break; + + case RTREE_EQ: bRes = (p->rValue>cell_max || p->rValueop==RTREE_MATCH ); + rc = testRtreeGeom(pRtree, p, &cell, &bRes); + bRes = !bRes; + break; + } } } - return bRes; + *pbEof = bRes; + return rc; } /* -** Return true if the cell that cursor pCursor currently points to +** Test if the cell that cursor pCursor currently points to ** would be filtered (excluded) by the constraints in the -** pCursor->aConstraint[] array, or false otherwise. +** pCursor->aConstraint[] array. If so, set *pbEof to true before +** returning. If the cell is not filtered (excluded) by the constraints, +** set pbEof to zero. +** +** Return SQLITE_OK if successful or an SQLite error code if an error +** occurs within a geometry callback. ** ** This function assumes that the cell is part of a leaf node. */ -static int testRtreeEntry(Rtree *pRtree, RtreeCursor *pCursor){ +static int testRtreeEntry(Rtree *pRtree, RtreeCursor *pCursor, int *pbEof){ RtreeCell cell; int ii; + *pbEof = 0; nodeGetCell(pRtree, pCursor->pNode, pCursor->iCell, &cell); for(ii=0; iinConstraint; ii++){ RtreeConstraint *p = &pCursor->aConstraint[ii]; - double coord = DCOORD(cell.aCoord[p->iCoord]); + RtreeDValue coord = DCOORD(cell.aCoord[p->iCoord]); int res; assert(p->op==RTREE_LE || p->op==RTREE_LT || p->op==RTREE_GE - || p->op==RTREE_GT || p->op==RTREE_EQ + || p->op==RTREE_GT || p->op==RTREE_EQ || p->op==RTREE_MATCH ); switch( p->op ){ case RTREE_LE: res = (coord<=p->rValue); break; @@ -103907,12 +135100,24 @@ static int testRtreeEntry(Rtree *pRtree, RtreeCursor *pCursor){ case RTREE_GE: res = (coord>=p->rValue); break; case RTREE_GT: res = (coord>p->rValue); break; case RTREE_EQ: res = (coord==p->rValue); break; + default: { + int rc; + assert( p->op==RTREE_MATCH ); + rc = testRtreeGeom(pRtree, p, &cell, &res); + if( rc!=SQLITE_OK ){ + return rc; + } + break; + } } - if( !res ) return 1; + if( !res ){ + *pbEof = 1; + return SQLITE_OK; + } } - return 0; + return SQLITE_OK; } /* @@ -103939,19 +135144,18 @@ static int descendToCell( assert( iHeight>=0 ); if( iHeight==0 ){ - isEof = testRtreeEntry(pRtree, pCursor); + rc = testRtreeEntry(pRtree, pCursor, &isEof); }else{ - isEof = testRtreeCell(pRtree, pCursor); + rc = testRtreeCell(pRtree, pCursor, &isEof); } - if( isEof || iHeight==0 ){ - *pEof = isEof; - return SQLITE_OK; + if( rc!=SQLITE_OK || isEof || iHeight==0 ){ + goto descend_to_cell_out; } iRowid = nodeGetRowid(pRtree, pCursor->pNode, pCursor->iCell); rc = nodeAcquire(pRtree, iRowid, pCursor->pNode, &pChild); if( rc!=SQLITE_OK ){ - return rc; + goto descend_to_cell_out; } nodeRelease(pRtree, pCursor->pNode); @@ -103961,7 +135165,7 @@ static int descendToCell( pCursor->iCell = ii; rc = descendToCell(pRtree, pCursor, iHeight-1, &isEof); if( rc!=SQLITE_OK ){ - return rc; + goto descend_to_cell_out; } } @@ -103973,32 +135177,43 @@ static int descendToCell( pCursor->iCell = iSavedCell; } +descend_to_cell_out: *pEof = isEof; - return SQLITE_OK; + return rc; } /* ** One of the cells in node pNode is guaranteed to have a 64-bit ** integer value equal to iRowid. Return the index of this cell. */ -static int nodeRowidIndex(Rtree *pRtree, RtreeNode *pNode, i64 iRowid){ +static int nodeRowidIndex( + Rtree *pRtree, + RtreeNode *pNode, + i64 iRowid, + int *piIndex +){ int ii; - for(ii=0; nodeGetRowid(pRtree, pNode, ii)!=iRowid; ii++){ - assert( ii<(NCELL(pNode)-1) ); + int nCell = NCELL(pNode); + for(ii=0; iipParent; if( pParent ){ - return nodeRowidIndex(pRtree, pParent, pNode->iNode); + return nodeRowidIndex(pRtree, pParent, pNode->iNode, piIndex); } - return -1; + *piIndex = -1; + return SQLITE_OK; } /* @@ -104009,13 +135224,17 @@ static int rtreeNext(sqlite3_vtab_cursor *pVtabCursor){ RtreeCursor *pCsr = (RtreeCursor *)pVtabCursor; int rc = SQLITE_OK; + /* RtreeCursor.pNode must not be NULL. If is is NULL, then this cursor is + ** already at EOF. It is against the rules to call the xNext() method of + ** a cursor that has already reached EOF. + */ + assert( pCsr->pNode ); + if( pCsr->iStrategy==1 ){ /* This "scan" is a direct lookup by rowid. There is no next entry. */ nodeRelease(pRtree, pCsr->pNode); pCsr->pNode = 0; - } - - else if( pCsr->pNode ){ + }else{ /* Move to the next entry that matches the configured constraints. */ int iHeight = 0; while( pCsr->pNode ){ @@ -104029,7 +135248,10 @@ static int rtreeNext(sqlite3_vtab_cursor *pVtabCursor){ } } pCsr->pNode = pNode->pParent; - pCsr->iCell = nodeParentIndex(pRtree, pNode); + rc = nodeParentIndex(pRtree, pNode, &pCsr->iCell); + if( rc!=SQLITE_OK ){ + return rc; + } nodeReference(pCsr->pNode); nodeRelease(pRtree, pNode); iHeight++; @@ -104065,9 +135287,12 @@ static int rtreeColumn(sqlite3_vtab_cursor *cur, sqlite3_context *ctx, int i){ }else{ RtreeCoord c; nodeGetCoord(pRtree, pCsr->pNode, pCsr->iCell, i-1, &c); +#ifndef SQLITE_RTREE_INT_ONLY if( pRtree->eCoordType==RTREE_COORD_REAL32 ){ sqlite3_result_double(ctx, c.f); - }else{ + }else +#endif + { assert( pRtree->eCoordType==RTREE_COORD_INT32 ); sqlite3_result_int(ctx, c.i); } @@ -104097,6 +135322,51 @@ static int findLeafNode(Rtree *pRtree, i64 iRowid, RtreeNode **ppLeaf){ return rc; } +/* +** This function is called to configure the RtreeConstraint object passed +** as the second argument for a MATCH constraint. The value passed as the +** first argument to this function is the right-hand operand to the MATCH +** operator. +*/ +static int deserializeGeometry(sqlite3_value *pValue, RtreeConstraint *pCons){ + RtreeMatchArg *p; + sqlite3_rtree_geometry *pGeom; + int nBlob; + + /* Check that value is actually a blob. */ + if( sqlite3_value_type(pValue)!=SQLITE_BLOB ) return SQLITE_ERROR; + + /* Check that the blob is roughly the right size. */ + nBlob = sqlite3_value_bytes(pValue); + if( nBlob<(int)sizeof(RtreeMatchArg) + || ((nBlob-sizeof(RtreeMatchArg))%sizeof(RtreeDValue))!=0 + ){ + return SQLITE_ERROR; + } + + pGeom = (sqlite3_rtree_geometry *)sqlite3_malloc( + sizeof(sqlite3_rtree_geometry) + nBlob + ); + if( !pGeom ) return SQLITE_NOMEM; + memset(pGeom, 0, sizeof(sqlite3_rtree_geometry)); + p = (RtreeMatchArg *)&pGeom[1]; + + memcpy(p, sqlite3_value_blob(pValue), nBlob); + if( p->magic!=RTREE_GEOMETRY_MAGIC + || nBlob!=(int)(sizeof(RtreeMatchArg) + (p->nParam-1)*sizeof(RtreeDValue)) + ){ + sqlite3_free(pGeom); + return SQLITE_ERROR; + } + + pGeom->pContext = p->pContext; + pGeom->nParam = p->nParam; + pGeom->aParam = p->aParam; + + pCons->xGeom = p->xGeom; + pCons->pGeom = pGeom; + return SQLITE_OK; +} /* ** Rtree virtual table module xFilter method. @@ -104115,8 +135385,7 @@ static int rtreeFilter( rtreeReference(pRtree); - sqlite3_free(pCsr->aConstraint); - pCsr->aConstraint = 0; + freeCursorConstraints(pCsr); pCsr->iStrategy = idxNum; if( idxNum==1 ){ @@ -104125,8 +135394,9 @@ static int rtreeFilter( i64 iRowid = sqlite3_value_int64(argv[0]); rc = findLeafNode(pRtree, iRowid, &pLeaf); pCsr->pNode = pLeaf; - if( pLeaf && rc==SQLITE_OK ){ - pCsr->iCell = nodeRowidIndex(pRtree, pLeaf, iRowid); + if( pLeaf ){ + assert( rc==SQLITE_OK ); + rc = nodeRowidIndex(pRtree, pLeaf, iRowid, &pCsr->iCell); } }else{ /* Normal case - r-tree scan. Set up the RtreeCursor.aConstraint array @@ -104138,12 +135408,29 @@ static int rtreeFilter( if( !pCsr->aConstraint ){ rc = SQLITE_NOMEM; }else{ - assert( (idxStr==0 && argc==0) || strlen(idxStr)==argc*2 ); + memset(pCsr->aConstraint, 0, sizeof(RtreeConstraint)*argc); + assert( (idxStr==0 && argc==0) + || (idxStr && (int)strlen(idxStr)==argc*2) ); for(ii=0; iiaConstraint[ii]; p->op = idxStr[ii*2]; p->iCoord = idxStr[ii*2+1]-'a'; - p->rValue = sqlite3_value_double(argv[ii]); + if( p->op==RTREE_MATCH ){ + /* A MATCH operator. The right-hand-side must be a blob that + ** can be cast into an RtreeMatchArg object. One created using + ** an sqlite3_rtree_geometry_callback() SQL user function. + */ + rc = deserializeGeometry(argv[ii], p); + if( rc!=SQLITE_OK ){ + break; + } + }else{ +#ifdef SQLITE_RTREE_INT_ONLY + p->rValue = sqlite3_value_int64(argv[ii]); +#else + p->rValue = sqlite3_value_double(argv[ii]); +#endif + } } } } @@ -104184,11 +135471,10 @@ static int rtreeFilter( ** idxNum idxStr Strategy ** ------------------------------------------------ ** 1 Unused Direct lookup by rowid. -** 2 See below R-tree query. -** 3 Unused Full table scan. +** 2 See below R-tree query or full-table scan. ** ------------------------------------------------ ** -** If strategy 1 or 3 is used, then idxStr is not meaningful. If strategy +** If strategy 1 is used, then idxStr is not meaningful. If strategy ** 2 is used, idxStr is formatted to contain 2 bytes for each ** constraint used. The first two bytes of idxStr correspond to ** the constraint in sqlite3_index_info.aConstraintUsage[] with @@ -104204,6 +135490,7 @@ static int rtreeFilter( ** < 0x43 ('C') ** >= 0x44 ('D') ** > 0x45 ('E') +** MATCH 0x46 ('F') ** ---------------------- ** ** The second of each pair of bytes identifies the coordinate column @@ -104212,14 +135499,15 @@ static int rtreeFilter( */ static int rtreeBestIndex(sqlite3_vtab *tab, sqlite3_index_info *pIdxInfo){ int rc = SQLITE_OK; - int ii, cCol; + int ii; int iIdx = 0; char zIdxStr[RTREE_MAX_DIMENSIONS*8+1]; memset(zIdxStr, 0, sizeof(zIdxStr)); + UNUSED_PARAMETER(tab); assert( pIdxInfo->idxStr==0 ); - for(ii=0; iinConstraint; ii++){ + for(ii=0; iinConstraint && iIdx<(int)(sizeof(zIdxStr)-1); ii++){ struct sqlite3_index_constraint *p = &pIdxInfo->aConstraint[ii]; if( p->usable && p->iColumn==0 && p->op==SQLITE_INDEX_CONSTRAINT_EQ ){ @@ -104242,48 +135530,23 @@ static int rtreeBestIndex(sqlite3_vtab *tab, sqlite3_index_info *pIdxInfo){ return SQLITE_OK; } - if( p->usable && p->iColumn>0 ){ - u8 op = 0; + if( p->usable && (p->iColumn>0 || p->op==SQLITE_INDEX_CONSTRAINT_MATCH) ){ + u8 op; switch( p->op ){ case SQLITE_INDEX_CONSTRAINT_EQ: op = RTREE_EQ; break; case SQLITE_INDEX_CONSTRAINT_GT: op = RTREE_GT; break; case SQLITE_INDEX_CONSTRAINT_LE: op = RTREE_LE; break; case SQLITE_INDEX_CONSTRAINT_LT: op = RTREE_LT; break; case SQLITE_INDEX_CONSTRAINT_GE: op = RTREE_GE; break; + default: + assert( p->op==SQLITE_INDEX_CONSTRAINT_MATCH ); + op = RTREE_MATCH; + break; } - if( op ){ - /* Make sure this particular constraint has not been used before. - ** If it has been used before, ignore it. - ** - ** A <= or < can be used if there is a prior >= or >. - ** A >= or > can be used if there is a prior < or <=. - ** A <= or < is disqualified if there is a prior <=, <, or ==. - ** A >= or > is disqualified if there is a prior >=, >, or ==. - ** A == is disqualifed if there is any prior constraint. - */ - int j, opmsk; - static const unsigned char compatible[] = { 0, 0, 1, 1, 2, 2 }; - assert( compatible[RTREE_EQ & 7]==0 ); - assert( compatible[RTREE_LT & 7]==1 ); - assert( compatible[RTREE_LE & 7]==1 ); - assert( compatible[RTREE_GT & 7]==2 ); - assert( compatible[RTREE_GE & 7]==2 ); - cCol = p->iColumn - 1 + 'a'; - opmsk = compatible[op & 7]; - for(j=0; jaConstraintUsage[ii].argvIndex = (iIdx/2); - pIdxInfo->aConstraintUsage[ii].omit = 1; - } + zIdxStr[iIdx++] = op; + zIdxStr[iIdx++] = p->iColumn - 1 + 'a'; + pIdxInfo->aConstraintUsage[ii].argvIndex = (iIdx/2); + pIdxInfo->aConstraintUsage[ii].omit = 1; } } @@ -104300,11 +135563,11 @@ static int rtreeBestIndex(sqlite3_vtab *tab, sqlite3_index_info *pIdxInfo){ /* ** Return the N-dimensional volumn of the cell stored in *p. */ -static float cellArea(Rtree *pRtree, RtreeCell *p){ - float area = 1.0; +static RtreeDValue cellArea(Rtree *pRtree, RtreeCell *p){ + RtreeDValue area = (RtreeDValue)1; int ii; for(ii=0; ii<(pRtree->nDim*2); ii+=2){ - area = area * (DCOORD(p->aCoord[ii+1]) - DCOORD(p->aCoord[ii])); + area = (area * (DCOORD(p->aCoord[ii+1]) - DCOORD(p->aCoord[ii]))); } return area; } @@ -104313,8 +135576,8 @@ static float cellArea(Rtree *pRtree, RtreeCell *p){ ** Return the margin length of cell p. The margin length is the sum ** of the objects size in each dimension. */ -static float cellMargin(Rtree *pRtree, RtreeCell *p){ - float margin = 0.0; +static RtreeDValue cellMargin(Rtree *pRtree, RtreeCell *p){ + RtreeDValue margin = (RtreeDValue)0; int ii; for(ii=0; ii<(pRtree->nDim*2); ii+=2){ margin += (DCOORD(p->aCoord[ii+1]) - DCOORD(p->aCoord[ii])); @@ -104362,8 +135625,8 @@ static int cellContains(Rtree *pRtree, RtreeCell *p1, RtreeCell *p2){ /* ** Return the amount cell p would grow by if it were unioned with pCell. */ -static float cellGrowth(Rtree *pRtree, RtreeCell *p, RtreeCell *pCell){ - float area; +static RtreeDValue cellGrowth(Rtree *pRtree, RtreeCell *p, RtreeCell *pCell){ + RtreeDValue area; RtreeCell cell; memcpy(&cell, p, sizeof(RtreeCell)); area = cellArea(pRtree, &cell); @@ -104372,7 +135635,7 @@ static float cellGrowth(Rtree *pRtree, RtreeCell *p, RtreeCell *pCell){ } #if VARIANT_RSTARTREE_CHOOSESUBTREE || VARIANT_RSTARTREE_SPLIT -static float cellOverlap( +static RtreeDValue cellOverlap( Rtree *pRtree, RtreeCell *p, RtreeCell *aCell, @@ -104380,14 +135643,19 @@ static float cellOverlap( int iExclude ){ int ii; - float overlap = 0.0; + RtreeDValue overlap = 0.0; for(ii=0; iinDim*2); jj+=2){ - double x1; - double x2; + RtreeDValue x1, x2; x1 = MAX(DCOORD(p->aCoord[jj]), DCOORD(aCell[ii].aCoord[jj])); x2 = MIN(DCOORD(p->aCoord[jj+1]), DCOORD(aCell[ii].aCoord[jj+1])); @@ -104407,7 +135675,7 @@ static float cellOverlap( #endif #if VARIANT_RSTARTREE_CHOOSESUBTREE -static float cellOverlapEnlargement( +static RtreeDValue cellOverlapEnlargement( Rtree *pRtree, RtreeCell *p, RtreeCell *pInsert, @@ -104415,12 +135683,11 @@ static float cellOverlapEnlargement( int nCell, int iExclude ){ - float before; - float after; + RtreeDValue before, after; before = cellOverlap(pRtree, p, aCell, nCell, iExclude); cellUnion(pRtree, p, pInsert); after = cellOverlap(pRtree, p, aCell, nCell, iExclude); - return after-before; + return (after-before); } #endif @@ -104442,11 +135709,14 @@ static int ChooseLeaf( for(ii=0; rc==SQLITE_OK && ii<(pRtree->iDepth-iHeight); ii++){ int iCell; - sqlite3_int64 iBest; + sqlite3_int64 iBest = 0; - float fMinGrowth; - float fMinArea; - float fMinOverlap; + RtreeDValue fMinGrowth = 0.0; + RtreeDValue fMinArea = 0.0; +#if VARIANT_RSTARTREE_CHOOSESUBTREE + RtreeDValue fMinOverlap = 0.0; + RtreeDValue overlap; +#endif int nCell = NCELL(pNode); RtreeCell cell; @@ -104475,23 +135745,33 @@ static int ChooseLeaf( ** the smallest area. */ for(iCell=0; iCelliDepth-1) ){ overlap = cellOverlapEnlargement(pRtree,&cell,pCell,aCell,nCell,iCell); + }else{ + overlap = 0.0; } -#endif if( (iCell==0) || (overlappParent ){ - RtreeCell cell; RtreeNode *pParent = p->pParent; - int iCell = nodeParentIndex(pRtree, p); + RtreeCell cell; + int iCell; + + if( nodeParentIndex(pRtree, p, &iCell) ){ + return SQLITE_CORRUPT_VTAB; + } nodeGetCell(pRtree, pParent, iCell, &cell); if( !cellContains(pRtree, &cell, pCell) ){ @@ -104532,6 +135816,7 @@ static void AdjustTree( p = pParent; } + return SQLITE_OK; } /* @@ -104589,7 +135874,7 @@ static void LinearPickSeeds( int i; int iLeftSeed = 0; int iRightSeed = 1; - float maxNormalInnerWidth = 0.0; + RtreeDValue maxNormalInnerWidth = (RtreeDValue)0; /* Pick two "seed" cells from the array of cells. The algorithm used ** here is the LinearPickSeeds algorithm from Gutman[1984]. The @@ -104597,18 +135882,18 @@ static void LinearPickSeeds( ** variables iLeftSeek and iRightSeed. */ for(i=0; inDim; i++){ - float x1 = aCell[0].aCoord[i*2]; - float x2 = aCell[0].aCoord[i*2+1]; - float x3 = x1; - float x4 = x2; + RtreeDValue x1 = DCOORD(aCell[0].aCoord[i*2]); + RtreeDValue x2 = DCOORD(aCell[0].aCoord[i*2+1]); + RtreeDValue x3 = x1; + RtreeDValue x4 = x2; int jj; int iCellLeft = 0; int iCellRight = 0; for(jj=1; jjx4 ) x4 = right; @@ -104623,7 +135908,7 @@ static void LinearPickSeeds( } if( x4!=x1 ){ - float normalwidth = (x3 - x2) / (x4 - x1); + RtreeDValue normalwidth = (x3 - x2) / (x4 - x1); if( normalwidth>maxNormalInnerWidth ){ iLeftSeed = iCellLeft; iRightSeed = iCellRight; @@ -104652,13 +135937,13 @@ static RtreeCell *QuadraticPickNext( #define FABS(a) ((a)<0.0?-1.0*(a):(a)) int iSelect = -1; - float fDiff; + RtreeDValue fDiff; int ii; for(ii=0; iifDiff ){ fDiff = diff; iSelect = ii; @@ -104685,13 +135970,13 @@ static void QuadraticPickSeeds( int iLeftSeed = 0; int iRightSeed = 1; - float fWaste = 0.0; + RtreeDValue fWaste = 0.0; for(ii=0; iifWaste ){ iLeftSeed = ii; @@ -104726,7 +136011,7 @@ static void QuadraticPickSeeds( static void SortByDistance( int *aIdx, int nIdx, - float *aDistance, + RtreeDValue *aDistance, int *aSpare ){ if( nIdx>1 ){ @@ -104752,8 +136037,8 @@ static void SortByDistance( aIdx[iLeft+iRight] = aLeft[iLeft]; iLeft++; }else{ - float fLeft = aDistance[aLeft[iLeft]]; - float fRight = aDistance[aRight[iRight]]; + RtreeDValue fLeft = aDistance[aLeft[iLeft]]; + RtreeDValue fRight = aDistance[aRight[iRight]]; if( fLeftnDim+1)*(sizeof(int*)+nCell*sizeof(int)); @@ -104885,10 +136170,10 @@ static int splitNodeStartree( } for(ii=0; iinDim; ii++){ - float margin = 0.0; - float fBestOverlap; - float fBestArea; - int iBestLeft; + RtreeDValue margin = 0.0; + RtreeDValue fBestOverlap = 0.0; + RtreeDValue fBestArea = 0.0; + int iBestLeft = 0; int nLeft; for( @@ -104899,8 +136184,8 @@ static int splitNodeStartree( RtreeCell left; RtreeCell right; int kk; - float overlap; - float area; + RtreeDValue overlap; + RtreeDValue area; memcpy(&left, &aCell[aaSorted[ii][0]], sizeof(RtreeCell)); memcpy(&right, &aCell[aaSorted[ii][nCell-1]], sizeof(RtreeCell)); @@ -104966,6 +136251,9 @@ static int splitNodeGuttman( int i; aiUsed = sqlite3_malloc(sizeof(int)*nCell); + if( !aiUsed ){ + return SQLITE_NOMEM; + } memset(aiUsed, 0, sizeof(int)*nCell); PickSeeds(pRtree, aCell, nCell, &iLeftSeed, &iRightSeed); @@ -104980,7 +136268,7 @@ static int splitNodeGuttman( for(i=nCell-2; i>0; i--){ RtreeCell *pNext; pNext = PickNext(pRtree, aCell, nCell, pBboxLeft, pBboxRight, aiUsed); - float diff = + RtreeDValue diff = cellGrowth(pRtree, pBboxLeft, pNext) - cellGrowth(pRtree, pBboxRight, pNext) ; @@ -105057,14 +136345,14 @@ static int SplitNode( nCell++; if( pNode->iNode==1 ){ - pRight = nodeNew(pRtree, pNode, 1); - pLeft = nodeNew(pRtree, pNode, 1); + pRight = nodeNew(pRtree, pNode); + pLeft = nodeNew(pRtree, pNode); pRtree->iDepth++; pNode->isDirty = 1; writeInt16(pNode->zData, pRtree->iDepth); }else{ pLeft = pNode; - pRight = nodeNew(pRtree, pLeft->pParent, 1); + pRight = nodeNew(pRtree, pLeft->pParent); nodeReference(pLeft); } @@ -105081,8 +136369,12 @@ static int SplitNode( goto splitnode_out; } - /* Ensure both child nodes have node numbers assigned to them. */ - if( (0==pRight->iNode && SQLITE_OK!=(rc = nodeWrite(pRtree, pRight))) + /* Ensure both child nodes have node numbers assigned to them by calling + ** nodeWrite(). Node pRight always needs a node number, as it was created + ** by nodeNew() above. But node pLeft sometimes already has a node number. + ** In this case avoid the all to nodeWrite(). + */ + if( SQLITE_OK!=(rc = nodeWrite(pRtree, pRight)) || (0==pLeft->iNode && SQLITE_OK!=(rc = nodeWrite(pRtree, pLeft))) ){ goto splitnode_out; @@ -105098,9 +136390,15 @@ static int SplitNode( } }else{ RtreeNode *pParent = pLeft->pParent; - int iCell = nodeParentIndex(pRtree, pLeft); - nodeOverwriteCell(pRtree, pParent, &leftbbox, iCell); - AdjustTree(pRtree, pParent, &leftbbox); + int iCell; + rc = nodeParentIndex(pRtree, pLeft, &iCell); + if( rc==SQLITE_OK ){ + nodeOverwriteCell(pRtree, pParent, &leftbbox, iCell); + rc = AdjustTree(pRtree, pParent, &leftbbox); + } + if( rc!=SQLITE_OK ){ + goto splitnode_out; + } } if( (rc = rtreeInsertCell(pRtree, pRight->pParent, &rightbbox, iHeight+1)) ){ goto splitnode_out; @@ -105144,20 +136442,43 @@ static int SplitNode( return rc; } +/* +** If node pLeaf is not the root of the r-tree and its pParent pointer is +** still NULL, load all ancestor nodes of pLeaf into memory and populate +** the pLeaf->pParent chain all the way up to the root node. +** +** This operation is required when a row is deleted (or updated - an update +** is implemented as a delete followed by an insert). SQLite provides the +** rowid of the row to delete, which can be used to find the leaf on which +** the entry resides (argument pLeaf). Once the leaf is located, this +** function is called to determine its ancestry. +*/ static int fixLeafParent(Rtree *pRtree, RtreeNode *pLeaf){ int rc = SQLITE_OK; - if( pLeaf->iNode!=1 && pLeaf->pParent==0 ){ - sqlite3_bind_int64(pRtree->pReadParent, 1, pLeaf->iNode); - if( sqlite3_step(pRtree->pReadParent)==SQLITE_ROW ){ - i64 iNode = sqlite3_column_int64(pRtree->pReadParent, 0); - rc = nodeAcquire(pRtree, iNode, 0, &pLeaf->pParent); - }else{ - rc = SQLITE_ERROR; - } - sqlite3_reset(pRtree->pReadParent); - if( rc==SQLITE_OK ){ - rc = fixLeafParent(pRtree, pLeaf->pParent); + RtreeNode *pChild = pLeaf; + while( rc==SQLITE_OK && pChild->iNode!=1 && pChild->pParent==0 ){ + int rc2 = SQLITE_OK; /* sqlite3_reset() return code */ + sqlite3_bind_int64(pRtree->pReadParent, 1, pChild->iNode); + rc = sqlite3_step(pRtree->pReadParent); + if( rc==SQLITE_ROW ){ + RtreeNode *pTest; /* Used to test for reference loops */ + i64 iNode; /* Node number of parent node */ + + /* Before setting pChild->pParent, test that we are not creating a + ** loop of references (as we would if, say, pChild==pParent). We don't + ** want to do this as it leads to a memory leak when trying to delete + ** the referenced counted node structures. + */ + iNode = sqlite3_column_int64(pRtree->pReadParent, 0); + for(pTest=pLeaf; pTest && pTest->iNode!=iNode; pTest=pTest->pParent); + if( !pTest ){ + rc2 = nodeAcquire(pRtree, iNode, 0, &pChild->pParent); + } } + rc = sqlite3_reset(pRtree->pReadParent); + if( rc==SQLITE_OK ) rc = rc2; + if( rc==SQLITE_OK && !pChild->pParent ) rc = SQLITE_CORRUPT_VTAB; + pChild = pChild->pParent; } return rc; } @@ -105166,18 +136487,24 @@ static int deleteCell(Rtree *, RtreeNode *, int, int); static int removeNode(Rtree *pRtree, RtreeNode *pNode, int iHeight){ int rc; - RtreeNode *pParent; + int rc2; + RtreeNode *pParent = 0; int iCell; assert( pNode->nRef==1 ); /* Remove the entry in the parent cell. */ - iCell = nodeParentIndex(pRtree, pNode); - pParent = pNode->pParent; - pNode->pParent = 0; - if( SQLITE_OK!=(rc = deleteCell(pRtree, pParent, iCell, iHeight+1)) - || SQLITE_OK!=(rc = nodeRelease(pRtree, pParent)) - ){ + rc = nodeParentIndex(pRtree, pNode, &iCell); + if( rc==SQLITE_OK ){ + pParent = pNode->pParent; + pNode->pParent = 0; + rc = deleteCell(pRtree, pParent, iCell, iHeight+1); + } + rc2 = nodeRelease(pRtree, pParent); + if( rc==SQLITE_OK ){ + rc = rc2; + } + if( rc!=SQLITE_OK ){ return rc; } @@ -105207,8 +136534,9 @@ static int removeNode(Rtree *pRtree, RtreeNode *pNode, int iHeight){ return SQLITE_OK; } -static void fixBoundingBox(Rtree *pRtree, RtreeNode *pNode){ +static int fixBoundingBox(Rtree *pRtree, RtreeNode *pNode){ RtreeNode *pParent = pNode->pParent; + int rc = SQLITE_OK; if( pParent ){ int ii; int nCell = NCELL(pNode); @@ -105220,10 +136548,13 @@ static void fixBoundingBox(Rtree *pRtree, RtreeNode *pNode){ cellUnion(pRtree, &box, &cell); } box.iRowid = pNode->iNode; - ii = nodeParentIndex(pRtree, pNode); - nodeOverwriteCell(pRtree, pParent, &box, ii); - fixBoundingBox(pRtree, pParent); + rc = nodeParentIndex(pRtree, pNode, &ii); + if( rc==SQLITE_OK ){ + nodeOverwriteCell(pRtree, pParent, &box, ii); + rc = fixBoundingBox(pRtree, pParent); + } } + return rc; } /* @@ -105231,6 +136562,7 @@ static void fixBoundingBox(Rtree *pRtree, RtreeNode *pNode){ ** cell, adjust the r-tree data structure if required. */ static int deleteCell(Rtree *pRtree, RtreeNode *pNode, int iCell, int iHeight){ + RtreeNode *pParent; int rc; if( SQLITE_OK!=(rc = fixLeafParent(pRtree, pNode)) ){ @@ -105247,14 +136579,13 @@ static int deleteCell(Rtree *pRtree, RtreeNode *pNode, int iCell, int iHeight){ ** cell in the parent node so that it tightly contains the updated ** node. */ - if( pNode->iNode!=1 ){ - RtreeNode *pParent = pNode->pParent; - if( (pParent->iNode!=1 || NCELL(pParent)!=1) - && (NCELL(pNode)pParent; + assert( pParent || pNode->iNode==1 ); + if( pParent ){ + if( NCELL(pNode)nDim; iDim++){ - aCenterCoord[iDim] = aCenterCoord[iDim]/((float)nCell*2.0); + aCenterCoord[iDim] = (aCenterCoord[iDim]/(nCell*(RtreeDValue)2)); } for(ii=0; iinDim; iDim++){ - float coord = DCOORD(aCell[ii].aCoord[iDim*2+1]) - - DCOORD(aCell[ii].aCoord[iDim*2]); + RtreeDValue coord = (DCOORD(aCell[ii].aCoord[iDim*2+1]) - + DCOORD(aCell[ii].aCoord[iDim*2])); aDistance[ii] += (coord-aCenterCoord[iDim])*(coord-aCenterCoord[iDim]); } } @@ -105337,7 +136670,7 @@ static int Reinsert( } } if( rc==SQLITE_OK ){ - fixBoundingBox(pRtree, pNode); + rc = fixBoundingBox(pRtree, pNode); } for(; rc==SQLITE_OK && iiiNode currently contains @@ -105391,11 +136724,13 @@ static int rtreeInsertCell( rc = SplitNode(pRtree, pNode, pCell, iHeight); #endif }else{ - AdjustTree(pRtree, pNode, pCell); - if( iHeight==0 ){ - rc = rowidWrite(pRtree, pCell->iRowid, pNode->iNode); - }else{ - rc = parentWrite(pRtree, pCell->iRowid, pNode->iNode); + rc = AdjustTree(pRtree, pNode, pCell); + if( rc==SQLITE_OK ){ + if( iHeight==0 ){ + rc = rowidWrite(pRtree, pCell->iRowid, pNode->iNode); + }else{ + rc = parentWrite(pRtree, pCell->iRowid, pNode->iNode); + } } } return rc; @@ -105414,10 +136749,10 @@ static int reinsertNodeContent(Rtree *pRtree, RtreeNode *pNode){ /* Find a node to store this cell in. pNode->iNode currently contains ** the height of the sub-tree headed by the cell. */ - rc = ChooseLeaf(pRtree, &cell, pNode->iNode, &pInsert); + rc = ChooseLeaf(pRtree, &cell, (int)pNode->iNode, &pInsert); if( rc==SQLITE_OK ){ int rc2; - rc = rtreeInsertCell(pRtree, pInsert, &cell, pNode->iNode); + rc = rtreeInsertCell(pRtree, pInsert, &cell, (int)pNode->iNode); rc2 = nodeRelease(pRtree, pInsert); if( rc==SQLITE_OK ){ rc = rc2; @@ -105440,135 +136775,166 @@ static int newRowid(Rtree *pRtree, i64 *piRowid){ return rc; } -#ifndef NDEBUG -static int hashIsEmpty(Rtree *pRtree){ - int ii; - for(ii=0; iiaHash[ii] ); - } - return 1; -} -#endif - /* -** The xUpdate method for rtree module virtual tables. +** Remove the entry with rowid=iDelete from the r-tree structure. */ -int rtreeUpdate( - sqlite3_vtab *pVtab, - int nData, - sqlite3_value **azData, - sqlite_int64 *pRowid -){ - Rtree *pRtree = (Rtree *)pVtab; - int rc = SQLITE_OK; +static int rtreeDeleteRowid(Rtree *pRtree, sqlite3_int64 iDelete){ + int rc; /* Return code */ + RtreeNode *pLeaf; /* Leaf node containing record iDelete */ + int iCell; /* Index of iDelete cell in pLeaf */ + RtreeNode *pRoot; /* Root node of rtree structure */ - rtreeReference(pRtree); - assert(nData>=1); - assert(hashIsEmpty(pRtree)); + /* Obtain a reference to the root node to initialise Rtree.iDepth */ + rc = nodeAcquire(pRtree, 1, 0, &pRoot); - /* If azData[0] is not an SQL NULL value, it is the rowid of a - ** record to delete from the r-tree table. The following block does - ** just that. + /* Obtain a reference to the leaf node that contains the entry + ** about to be deleted. */ - if( sqlite3_value_type(azData[0])!=SQLITE_NULL ){ - i64 iDelete; /* The rowid to delete */ - RtreeNode *pLeaf; /* Leaf node containing record iDelete */ - int iCell; /* Index of iDelete cell in pLeaf */ - RtreeNode *pRoot; - - /* Obtain a reference to the root node to initialise Rtree.iDepth */ - rc = nodeAcquire(pRtree, 1, 0, &pRoot); - - /* Obtain a reference to the leaf node that contains the entry - ** about to be deleted. - */ - if( rc==SQLITE_OK ){ - iDelete = sqlite3_value_int64(azData[0]); - rc = findLeafNode(pRtree, iDelete, &pLeaf); - } + if( rc==SQLITE_OK ){ + rc = findLeafNode(pRtree, iDelete, &pLeaf); + } - /* Delete the cell in question from the leaf node. */ + /* Delete the cell in question from the leaf node. */ + if( rc==SQLITE_OK ){ + int rc2; + rc = nodeRowidIndex(pRtree, pLeaf, iDelete, &iCell); if( rc==SQLITE_OK ){ - int rc2; - iCell = nodeRowidIndex(pRtree, pLeaf, iDelete); rc = deleteCell(pRtree, pLeaf, iCell, 0); - rc2 = nodeRelease(pRtree, pLeaf); - if( rc==SQLITE_OK ){ - rc = rc2; - } } - - /* Delete the corresponding entry in the _rowid table. */ + rc2 = nodeRelease(pRtree, pLeaf); if( rc==SQLITE_OK ){ - sqlite3_bind_int64(pRtree->pDeleteRowid, 1, iDelete); - sqlite3_step(pRtree->pDeleteRowid); - rc = sqlite3_reset(pRtree->pDeleteRowid); + rc = rc2; } + } - /* Check if the root node now has exactly one child. If so, remove - ** it, schedule the contents of the child for reinsertion and - ** reduce the tree height by one. - ** - ** This is equivalent to copying the contents of the child into - ** the root node (the operation that Gutman's paper says to perform - ** in this scenario). - */ - if( rc==SQLITE_OK && pRtree->iDepth>0 ){ - if( rc==SQLITE_OK && NCELL(pRoot)==1 ){ - RtreeNode *pChild; - i64 iChild = nodeGetRowid(pRtree, pRoot, 0); - rc = nodeAcquire(pRtree, iChild, pRoot, &pChild); - if( rc==SQLITE_OK ){ - rc = removeNode(pRtree, pChild, pRtree->iDepth-1); - } - if( rc==SQLITE_OK ){ - pRtree->iDepth--; - writeInt16(pRoot->zData, pRtree->iDepth); - pRoot->isDirty = 1; - } - } - } + /* Delete the corresponding entry in the _rowid table. */ + if( rc==SQLITE_OK ){ + sqlite3_bind_int64(pRtree->pDeleteRowid, 1, iDelete); + sqlite3_step(pRtree->pDeleteRowid); + rc = sqlite3_reset(pRtree->pDeleteRowid); + } - /* Re-insert the contents of any underfull nodes removed from the tree. */ - for(pLeaf=pRtree->pDeleted; pLeaf; pLeaf=pRtree->pDeleted){ - if( rc==SQLITE_OK ){ - rc = reinsertNodeContent(pRtree, pLeaf); - } - pRtree->pDeleted = pLeaf->pNext; - sqlite3_free(pLeaf); + /* Check if the root node now has exactly one child. If so, remove + ** it, schedule the contents of the child for reinsertion and + ** reduce the tree height by one. + ** + ** This is equivalent to copying the contents of the child into + ** the root node (the operation that Gutman's paper says to perform + ** in this scenario). + */ + if( rc==SQLITE_OK && pRtree->iDepth>0 && NCELL(pRoot)==1 ){ + int rc2; + RtreeNode *pChild; + i64 iChild = nodeGetRowid(pRtree, pRoot, 0); + rc = nodeAcquire(pRtree, iChild, pRoot, &pChild); + if( rc==SQLITE_OK ){ + rc = removeNode(pRtree, pChild, pRtree->iDepth-1); } + rc2 = nodeRelease(pRtree, pChild); + if( rc==SQLITE_OK ) rc = rc2; + if( rc==SQLITE_OK ){ + pRtree->iDepth--; + writeInt16(pRoot->zData, pRtree->iDepth); + pRoot->isDirty = 1; + } + } - /* Release the reference to the root node. */ + /* Re-insert the contents of any underfull nodes removed from the tree. */ + for(pLeaf=pRtree->pDeleted; pLeaf; pLeaf=pRtree->pDeleted){ if( rc==SQLITE_OK ){ - rc = nodeRelease(pRtree, pRoot); - }else{ - nodeRelease(pRtree, pRoot); + rc = reinsertNodeContent(pRtree, pLeaf); } + pRtree->pDeleted = pLeaf->pNext; + sqlite3_free(pLeaf); } - /* If the azData[] array contains more than one element, elements - ** (azData[2]..azData[argc-1]) contain a new record to insert into - ** the r-tree structure. + /* Release the reference to the root node. */ + if( rc==SQLITE_OK ){ + rc = nodeRelease(pRtree, pRoot); + }else{ + nodeRelease(pRtree, pRoot); + } + + return rc; +} + +/* +** Rounding constants for float->double conversion. +*/ +#define RNDTOWARDS (1.0 - 1.0/8388608.0) /* Round towards zero */ +#define RNDAWAY (1.0 + 1.0/8388608.0) /* Round away from zero */ + +#if !defined(SQLITE_RTREE_INT_ONLY) +/* +** Convert an sqlite3_value into an RtreeValue (presumably a float) +** while taking care to round toward negative or positive, respectively. +*/ +static RtreeValue rtreeValueDown(sqlite3_value *v){ + double d = sqlite3_value_double(v); + float f = (float)d; + if( f>d ){ + f = (float)(d*(d<0 ? RNDAWAY : RNDTOWARDS)); + } + return f; +} +static RtreeValue rtreeValueUp(sqlite3_value *v){ + double d = sqlite3_value_double(v); + float f = (float)d; + if( f1 */ + int bHaveRowid = 0; /* Set to 1 after new rowid is determined */ + + rtreeReference(pRtree); + assert(nData>=1); + + /* Constraint handling. A write operation on an r-tree table may return + ** SQLITE_CONSTRAINT for two reasons: + ** + ** 1. A duplicate rowid value, or + ** 2. The supplied data violates the "x2>=x1" constraint. + ** + ** In the first case, if the conflict-handling mode is REPLACE, then + ** the conflicting row can be removed before proceeding. In the second + ** case, SQLITE_CONSTRAINT must be returned regardless of the + ** conflict-handling mode specified by the user. */ - if( rc==SQLITE_OK && nData>1 ){ - /* Insert a new record into the r-tree */ - RtreeCell cell; + if( nData>1 ){ int ii; - RtreeNode *pLeaf; /* Populate the cell.aCoord[] array. The first coordinate is azData[3]. */ assert( nData==(pRtree->nDim*2 + 3) ); +#ifndef SQLITE_RTREE_INT_ONLY if( pRtree->eCoordType==RTREE_COORD_REAL32 ){ for(ii=0; ii<(pRtree->nDim*2); ii+=2){ - cell.aCoord[ii].f = (float)sqlite3_value_double(azData[ii+3]); - cell.aCoord[ii+1].f = (float)sqlite3_value_double(azData[ii+4]); + cell.aCoord[ii].f = rtreeValueDown(azData[ii+3]); + cell.aCoord[ii+1].f = rtreeValueUp(azData[ii+4]); if( cell.aCoord[ii].f>cell.aCoord[ii+1].f ){ rc = SQLITE_CONSTRAINT; goto constraint; } } - }else{ + }else +#endif + { for(ii=0; ii<(pRtree->nDim*2); ii+=2){ cell.aCoord[ii].i = sqlite3_value_int(azData[ii+3]); cell.aCoord[ii+1].i = sqlite3_value_int(azData[ii+4]); @@ -105579,19 +136945,51 @@ int rtreeUpdate( } } - /* Figure out the rowid of the new row. */ - if( sqlite3_value_type(azData[2])==SQLITE_NULL ){ - rc = newRowid(pRtree, &cell.iRowid); - }else{ + /* If a rowid value was supplied, check if it is already present in + ** the table. If so, the constraint has failed. */ + if( sqlite3_value_type(azData[2])!=SQLITE_NULL ){ cell.iRowid = sqlite3_value_int64(azData[2]); - sqlite3_bind_int64(pRtree->pReadRowid, 1, cell.iRowid); - if( SQLITE_ROW==sqlite3_step(pRtree->pReadRowid) ){ - sqlite3_reset(pRtree->pReadRowid); - rc = SQLITE_CONSTRAINT; - goto constraint; + if( sqlite3_value_type(azData[0])==SQLITE_NULL + || sqlite3_value_int64(azData[0])!=cell.iRowid + ){ + int steprc; + sqlite3_bind_int64(pRtree->pReadRowid, 1, cell.iRowid); + steprc = sqlite3_step(pRtree->pReadRowid); + rc = sqlite3_reset(pRtree->pReadRowid); + if( SQLITE_ROW==steprc ){ + if( sqlite3_vtab_on_conflict(pRtree->db)==SQLITE_REPLACE ){ + rc = rtreeDeleteRowid(pRtree, cell.iRowid); + }else{ + rc = SQLITE_CONSTRAINT; + goto constraint; + } + } } - rc = sqlite3_reset(pRtree->pReadRowid); + bHaveRowid = 1; } + } + + /* If azData[0] is not an SQL NULL value, it is the rowid of a + ** record to delete from the r-tree table. The following block does + ** just that. + */ + if( sqlite3_value_type(azData[0])!=SQLITE_NULL ){ + rc = rtreeDeleteRowid(pRtree, sqlite3_value_int64(azData[0])); + } + + /* If the azData[] array contains more than one element, elements + ** (azData[2]..azData[argc-1]) contain a new record to insert into + ** the r-tree structure. + */ + if( rc==SQLITE_OK && nData>1 ){ + /* Insert the new record into the r-tree */ + RtreeNode *pLeaf; + + /* Figure out the rowid of the new row. */ + if( bHaveRowid==0 ){ + rc = newRowid(pRtree, &cell.iRowid); + } + *pRowid = cell.iRowid; if( rc==SQLITE_OK ){ rc = ChooseLeaf(pRtree, &cell, 0, &pLeaf); @@ -105634,7 +137032,7 @@ static int rtreeRename(sqlite3_vtab *pVtab, const char *zNewName){ } static sqlite3_module rtreeModule = { - 0, /* iVersion */ + 0, /* iVersion */ rtreeCreate, /* xCreate - create a table */ rtreeConnect, /* xConnect - connect to an existing table */ rtreeBestIndex, /* xBestIndex - Determine search strategy */ @@ -105653,7 +137051,10 @@ static sqlite3_module rtreeModule = { 0, /* xCommit - commit transaction */ 0, /* xRollback - rollback transaction */ 0, /* xFindFunction - function overloading */ - rtreeRename /* xRename - rename the table */ + rtreeRename, /* xRename - rename the table */ + 0, /* xSavepoint */ + 0, /* xRelease */ + 0 /* xRollbackTo */ }; static int rtreeSqlInit( @@ -105729,31 +137130,69 @@ static int rtreeSqlInit( } /* -** This routine queries database handle db for the page-size used by -** database zDb. If successful, the page-size in bytes is written to -** *piPageSize and SQLITE_OK returned. Otherwise, and an SQLite error -** code is returned. +** The second argument to this function contains the text of an SQL statement +** that returns a single integer value. The statement is compiled and executed +** using database connection db. If successful, the integer value returned +** is written to *piVal and SQLITE_OK returned. Otherwise, an SQLite error +** code is returned and the value of *piVal after returning is not defined. */ -static int getPageSize(sqlite3 *db, const char *zDb, int *piPageSize){ +static int getIntFromStmt(sqlite3 *db, const char *zSql, int *piVal){ int rc = SQLITE_NOMEM; - char *zSql; - sqlite3_stmt *pStmt = 0; - - zSql = sqlite3_mprintf("PRAGMA %Q.page_size", zDb); - if( !zSql ){ - return SQLITE_NOMEM; + if( zSql ){ + sqlite3_stmt *pStmt = 0; + rc = sqlite3_prepare_v2(db, zSql, -1, &pStmt, 0); + if( rc==SQLITE_OK ){ + if( SQLITE_ROW==sqlite3_step(pStmt) ){ + *piVal = sqlite3_column_int(pStmt, 0); + } + rc = sqlite3_finalize(pStmt); + } } + return rc; +} - rc = sqlite3_prepare_v2(db, zSql, -1, &pStmt, 0); - sqlite3_free(zSql); - if( rc!=SQLITE_OK ){ - return rc; +/* +** This function is called from within the xConnect() or xCreate() method to +** determine the node-size used by the rtree table being created or connected +** to. If successful, pRtree->iNodeSize is populated and SQLITE_OK returned. +** Otherwise, an SQLite error code is returned. +** +** If this function is being called as part of an xConnect(), then the rtree +** table already exists. In this case the node-size is determined by inspecting +** the root node of the tree. +** +** Otherwise, for an xCreate(), use 64 bytes less than the database page-size. +** This ensures that each node is stored on a single database page. If the +** database page-size is so large that more than RTREE_MAXCELLS entries +** would fit in a single node, use a smaller node-size. +*/ +static int getNodeSize( + sqlite3 *db, /* Database handle */ + Rtree *pRtree, /* Rtree handle */ + int isCreate /* True for xCreate, false for xConnect */ +){ + int rc; + char *zSql; + if( isCreate ){ + int iPageSize = 0; + zSql = sqlite3_mprintf("PRAGMA %Q.page_size", pRtree->zDb); + rc = getIntFromStmt(db, zSql, &iPageSize); + if( rc==SQLITE_OK ){ + pRtree->iNodeSize = iPageSize-64; + if( (4+pRtree->nBytesPerCell*RTREE_MAXCELLS)iNodeSize ){ + pRtree->iNodeSize = 4+pRtree->nBytesPerCell*RTREE_MAXCELLS; + } + } + }else{ + zSql = sqlite3_mprintf( + "SELECT length(data) FROM '%q'.'%q_node' WHERE nodeno = 1", + pRtree->zDb, pRtree->zName + ); + rc = getIntFromStmt(db, zSql, &pRtree->iNodeSize); } - if( SQLITE_ROW==sqlite3_step(pStmt) ){ - *piPageSize = sqlite3_column_int(pStmt, 0); - } - return sqlite3_finalize(pStmt); + sqlite3_free(zSql); + return rc; } /* @@ -105774,11 +137213,10 @@ static int rtreeInit( int isCreate /* True for xCreate, false for xConnect */ ){ int rc = SQLITE_OK; - int iPageSize = 0; Rtree *pRtree; int nDb; /* Length of string argv[1] */ int nName; /* Length of string argv[2] */ - int eCoordType = (int)pAux; + int eCoordType = (pAux ? RTREE_COORD_INT32 : RTREE_COORD_REAL32); const char *aErrMsg[] = { 0, /* 0 */ @@ -105793,14 +137231,11 @@ static int rtreeInit( return SQLITE_ERROR; } - rc = getPageSize(db, argv[1], &iPageSize); - if( rc!=SQLITE_OK ){ - return rc; - } + sqlite3_vtab_config(db, SQLITE_VTAB_CONSTRAINT_SUPPORT, 1); /* Allocate the sqlite3_vtab structure */ - nDb = strlen(argv[1]); - nName = strlen(argv[2]); + nDb = (int)strlen(argv[1]); + nName = (int)strlen(argv[2]); pRtree = (Rtree *)sqlite3_malloc(sizeof(Rtree)+nDb+nName+2); if( !pRtree ){ return SQLITE_NOMEM; @@ -105816,42 +137251,37 @@ static int rtreeInit( memcpy(pRtree->zDb, argv[1], nDb); memcpy(pRtree->zName, argv[2], nName); - /* Figure out the node size to use. By default, use 64 bytes less than - ** the database page-size. This ensures that each node is stored on - ** a single database page. - ** - ** If the databasd page-size is so large that more than RTREE_MAXCELLS - ** entries would fit in a single node, use a smaller node-size. - */ - pRtree->iNodeSize = iPageSize-64; - if( (4+pRtree->nBytesPerCell*RTREE_MAXCELLS)iNodeSize ){ - pRtree->iNodeSize = 4+pRtree->nBytesPerCell*RTREE_MAXCELLS; - } + /* Figure out the node size to use. */ + rc = getNodeSize(db, pRtree, isCreate); /* Create/Connect to the underlying relational database schema. If ** that is successful, call sqlite3_declare_vtab() to configure ** the r-tree table schema. */ - if( (rc = rtreeSqlInit(pRtree, db, argv[1], argv[2], isCreate)) ){ - *pzErr = sqlite3_mprintf("%s", sqlite3_errmsg(db)); - }else{ - char *zSql = sqlite3_mprintf("CREATE TABLE x(%s", argv[3]); - char *zTmp; - int ii; - for(ii=4; zSql && iimagic = RTREE_GEOMETRY_MAGIC; + pBlob->xGeom = pGeomCtx->xGeom; + pBlob->pContext = pGeomCtx->pContext; + pBlob->nParam = nArg; + for(i=0; iaParam[i] = sqlite3_value_int64(aArg[i]); +#else + pBlob->aParam[i] = sqlite3_value_double(aArg[i]); +#endif + } + sqlite3_result_blob(ctx, pBlob, nBlob, doSqlite3Free); + } +} + +/* +** Register a new geometry function for use with the r-tree MATCH operator. +*/ +SQLITE_API int sqlite3_rtree_geometry_callback( + sqlite3 *db, + const char *zGeom, + int (*xGeom)(sqlite3_rtree_geometry *, int, RtreeDValue *, int *), + void *pContext +){ + RtreeGeomCallback *pGeomCtx; /* Context object for new user-function */ + + /* Allocate and populate the context object. */ + pGeomCtx = (RtreeGeomCallback *)sqlite3_malloc(sizeof(RtreeGeomCallback)); + if( !pGeomCtx ) return SQLITE_NOMEM; + pGeomCtx->xGeom = xGeom; + pGeomCtx->pContext = pContext; + + /* Create the new user-function. Register a destructor function to delete + ** the context object when it is no longer required. */ + return sqlite3_create_function_v2(db, zGeom, -1, SQLITE_ANY, + (void *)pGeomCtx, geomCallback, 0, 0, doSqlite3Free + ); +} + #if !SQLITE_CORE SQLITE_API int sqlite3_extension_init( sqlite3 *db, @@ -106009,6 +137516,7 @@ SQLITE_API int sqlite3_extension_init( #include #include +/* #include */ #ifndef SQLITE_CORE SQLITE_EXTENSION_INIT1 @@ -106217,6 +137725,8 @@ static void icuRegexpFunc(sqlite3_context *p, int nArg, sqlite3_value **apArg){ UBool res; const UChar *zString = sqlite3_value_text16(apArg[1]); + (void)nArg; /* Unused parameter */ + /* If the left hand side of the regexp operator is NULL, ** then the result is also NULL. */ @@ -106424,7 +137934,7 @@ SQLITE_PRIVATE int sqlite3IcuInit(sqlite3 *db){ void *pContext; /* sqlite3_user_data() context */ void (*xFunc)(sqlite3_context*,int,sqlite3_value**); } scalars[] = { - {"regexp",-1, SQLITE_ANY, 0, icuRegexpFunc}, + {"regexp", 2, SQLITE_ANY, 0, icuRegexpFunc}, {"lower", 1, SQLITE_UTF16, 0, icuCaseFunc16}, {"lower", 2, SQLITE_UTF16, 0, icuCaseFunc16}, @@ -106445,7 +137955,7 @@ SQLITE_PRIVATE int sqlite3IcuInit(sqlite3 *db){ int rc = SQLITE_OK; int i; - for(i=0; rc==SQLITE_OK && i<(sizeof(scalars)/sizeof(struct IcuScalar)); i++){ + for(i=0; rc==SQLITE_OK && i<(int)(sizeof(scalars)/sizeof(scalars[0])); i++){ struct IcuScalar *p = &scalars[i]; rc = sqlite3_create_function( db, p->zName, p->nArg, p->enc, p->pContext, p->xFunc, 0, 0 @@ -106482,15 +137992,16 @@ SQLITE_API int sqlite3_extension_init( ** ************************************************************************* ** This file implements a tokenizer for fts3 based on the ICU library. -** -** $Id: fts3_icu.c,v 1.3 2008/09/01 18:34:20 danielk1977 Exp $ */ - #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) #ifdef SQLITE_ENABLE_ICU +/* #include */ +/* #include */ #include +/* #include */ +/* #include */ #include typedef struct IcuTokenizer IcuTokenizer; @@ -106579,7 +138090,10 @@ static int icuOpen( *ppCursor = 0; - if( nInput<0 ){ + if( zInput==0 ){ + nInput = 0; + zInput = ""; + }else if( nInput<0 ){ nInput = strlen(zInput); } nChar = nInput+1; diff --git a/ghost/sqlite3.h b/ghost/sqlite3.h index cc4d3544..0a1cf9db 100644 --- a/ghost/sqlite3.h +++ b/ghost/sqlite3.h @@ -18,8 +18,8 @@ ** Some of the definitions that are in this file are marked as ** "experimental". Experimental interfaces are normally new ** features recently added to SQLite. We do not anticipate changes -** to experimental interfaces but reserve to make minor changes if -** experience from use "in the wild" suggest such changes are prudent. +** to experimental interfaces but reserve the right to make minor changes +** if experience from use "in the wild" suggest such changes are prudent. ** ** The official C-language API documentation for SQLite is derived ** from comments in this file. This file is the authoritative source @@ -29,8 +29,6 @@ ** The makefile makes some minor changes to this file (such as inserting ** the version number) and changes its name to "sqlite3.h" as ** part of the build process. -** -** @(#) $Id: sqlite.h.in,v 1.458 2009/06/19 22:50:31 drh Exp $ */ #ifndef _SQLITE3_H_ #define _SQLITE3_H_ @@ -51,10 +49,15 @@ extern "C" { # define SQLITE_EXTERN extern #endif +#ifndef SQLITE_API +# define SQLITE_API +#endif + + /* ** These no-op macros are used in front of interfaces to mark those ** interfaces as either deprecated or experimental. New applications -** should not use deprecated intrfaces - they are support for backwards +** should not use deprecated interfaces - they are support for backwards ** compatibility only. Application writers should be aware that ** experimental interfaces are subject to change in point releases. ** @@ -78,57 +81,107 @@ extern "C" { #endif /* -** CAPI3REF: Compile-Time Library Version Numbers {H10010} -** -** The SQLITE_VERSION and SQLITE_VERSION_NUMBER #defines in -** the sqlite3.h file specify the version of SQLite with which -** that header file is associated. -** -** The "version" of SQLite is a string of the form "X.Y.Z". -** The phrase "alpha" or "beta" might be appended after the Z. -** The X value is major version number always 3 in SQLite3. -** The X value only changes when backwards compatibility is -** broken and we intend to never break backwards compatibility. -** The Y value is the minor version number and only changes when -** there are major feature enhancements that are forwards compatible -** but not backwards compatible. -** The Z value is the release number and is incremented with -** each release but resets back to 0 whenever Y is incremented. -** -** See also: [sqlite3_libversion()] and [sqlite3_libversion_number()]. +** CAPI3REF: Compile-Time Library Version Numbers +** +** ^(The [SQLITE_VERSION] C preprocessor macro in the sqlite3.h header +** evaluates to a string literal that is the SQLite version in the +** format "X.Y.Z" where X is the major version number (always 3 for +** SQLite3) and Y is the minor version number and Z is the release number.)^ +** ^(The [SQLITE_VERSION_NUMBER] C preprocessor macro resolves to an integer +** with the value (X*1000000 + Y*1000 + Z) where X, Y, and Z are the same +** numbers used in [SQLITE_VERSION].)^ +** The SQLITE_VERSION_NUMBER for any given release of SQLite will also +** be larger than the release from which it is derived. Either Y will +** be held constant and Z will be incremented or else Y will be incremented +** and Z will be reset to zero. +** +** Since version 3.6.18, SQLite source code has been stored in the +** Fossil configuration management +** system. ^The SQLITE_SOURCE_ID macro evaluates to +** a string which identifies a particular check-in of SQLite +** within its configuration management system. ^The SQLITE_SOURCE_ID +** string contains the date and time of the check-in (UTC) and an SHA1 +** hash of the entire source tree. +** +** See also: [sqlite3_libversion()], +** [sqlite3_libversion_number()], [sqlite3_sourceid()], +** [sqlite_version()] and [sqlite_source_id()]. +*/ +#define SQLITE_VERSION "3.7.13" +#define SQLITE_VERSION_NUMBER 3007013 +#define SQLITE_SOURCE_ID "2012-06-11 02:05:22 f5b5a13f7394dc143aa136f1d4faba6839eaa6dc" + +/* +** CAPI3REF: Run-Time Library Version Numbers +** KEYWORDS: sqlite3_version, sqlite3_sourceid +** +** These interfaces provide the same information as the [SQLITE_VERSION], +** [SQLITE_VERSION_NUMBER], and [SQLITE_SOURCE_ID] C preprocessor macros +** but are associated with the library instead of the header file. ^(Cautious +** programmers might include assert() statements in their application to +** verify that values returned by these interfaces match the macros in +** the header, and thus insure that the application is +** compiled with matching library and header files. ** -** Requirements: [H10011] [H10014] -*/ -#define SQLITE_VERSION "3.6.16" -#define SQLITE_VERSION_NUMBER 3006016 +**
    +** assert( sqlite3_libversion_number()==SQLITE_VERSION_NUMBER );
    +** assert( strcmp(sqlite3_sourceid(),SQLITE_SOURCE_ID)==0 );
    +** assert( strcmp(sqlite3_libversion(),SQLITE_VERSION)==0 );
    +** 
    )^ +** +** ^The sqlite3_version[] string constant contains the text of [SQLITE_VERSION] +** macro. ^The sqlite3_libversion() function returns a pointer to the +** to the sqlite3_version[] string constant. The sqlite3_libversion() +** function is provided for use in DLLs since DLL users usually do not have +** direct access to string constants within the DLL. ^The +** sqlite3_libversion_number() function returns an integer equal to +** [SQLITE_VERSION_NUMBER]. ^The sqlite3_sourceid() function returns +** a pointer to a string constant whose value is the same as the +** [SQLITE_SOURCE_ID] C preprocessor macro. +** +** See also: [sqlite_version()] and [sqlite_source_id()]. +*/ +SQLITE_API SQLITE_EXTERN const char sqlite3_version[]; +SQLITE_API const char *sqlite3_libversion(void); +SQLITE_API const char *sqlite3_sourceid(void); +SQLITE_API int sqlite3_libversion_number(void); + +/* +** CAPI3REF: Run-Time Library Compilation Options Diagnostics +** +** ^The sqlite3_compileoption_used() function returns 0 or 1 +** indicating whether the specified option was defined at +** compile time. ^The SQLITE_ prefix may be omitted from the +** option name passed to sqlite3_compileoption_used(). +** +** ^The sqlite3_compileoption_get() function allows iterating +** over the list of options that were defined at compile time by +** returning the N-th compile time option string. ^If N is out of range, +** sqlite3_compileoption_get() returns a NULL pointer. ^The SQLITE_ +** prefix is omitted from any strings returned by +** sqlite3_compileoption_get(). +** +** ^Support for the diagnostic functions sqlite3_compileoption_used() +** and sqlite3_compileoption_get() may be omitted by specifying the +** [SQLITE_OMIT_COMPILEOPTION_DIAGS] option at compile time. +** +** See also: SQL functions [sqlite_compileoption_used()] and +** [sqlite_compileoption_get()] and the [compile_options pragma]. +*/ +#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS +SQLITE_API int sqlite3_compileoption_used(const char *zOptName); +SQLITE_API const char *sqlite3_compileoption_get(int N); +#endif /* -** CAPI3REF: Run-Time Library Version Numbers {H10020} -** KEYWORDS: sqlite3_version -** -** These features provide the same information as the [SQLITE_VERSION] -** and [SQLITE_VERSION_NUMBER] #defines in the header, but are associated -** with the library instead of the header file. Cautious programmers might -** include a check in their application to verify that -** sqlite3_libversion_number() always returns the value -** [SQLITE_VERSION_NUMBER]. +** CAPI3REF: Test To See If The Library Is Threadsafe ** -** The sqlite3_libversion() function returns the same information as is -** in the sqlite3_version[] string constant. The function is provided -** for use in DLLs since DLL users usually do not have direct access to string -** constants within the DLL. -** -** Requirements: [H10021] [H10022] [H10023] -*/ -SQLITE_EXTERN const char sqlite3_version[]; -const char *sqlite3_libversion(void); -int sqlite3_libversion_number(void); - -/* -** CAPI3REF: Test To See If The Library Is Threadsafe {H10100} +** ^The sqlite3_threadsafe() function returns zero if and only if +** SQLite was compiled with mutexing code omitted due to the +** [SQLITE_THREADSAFE] compile-time option being set to 0. ** ** SQLite can be compiled with or without mutexes. When -** the [SQLITE_THREADSAFE] C preprocessor macro 1 or 2, mutexes +** the [SQLITE_THREADSAFE] C preprocessor macro is 1 or 2, mutexes ** are enabled and SQLite is threadsafe. When the ** [SQLITE_THREADSAFE] macro is 0, ** the mutexes are omitted. Without the mutexes, it is not safe @@ -137,29 +190,29 @@ int sqlite3_libversion_number(void); ** Enabling mutexes incurs a measurable performance penalty. ** So if speed is of utmost importance, it makes sense to disable ** the mutexes. But for maximum safety, mutexes should be enabled. -** The default behavior is for mutexes to be enabled. +** ^The default behavior is for mutexes to be enabled. ** -** This interface can be used by a program to make sure that the +** This interface can be used by an application to make sure that the ** version of SQLite that it is linking against was compiled with ** the desired setting of the [SQLITE_THREADSAFE] macro. ** ** This interface only reports on the compile-time mutex setting ** of the [SQLITE_THREADSAFE] flag. If SQLite is compiled with -** SQLITE_THREADSAFE=1 then mutexes are enabled by default but +** SQLITE_THREADSAFE=1 or =2 then mutexes are enabled by default but ** can be fully or partially disabled using a call to [sqlite3_config()] ** with the verbs [SQLITE_CONFIG_SINGLETHREAD], [SQLITE_CONFIG_MULTITHREAD], -** or [SQLITE_CONFIG_MUTEX]. The return value of this function shows -** only the default compile-time setting, not any run-time changes -** to that setting. +** or [SQLITE_CONFIG_MUTEX]. ^(The return value of the +** sqlite3_threadsafe() function shows only the compile-time setting of +** thread safety, not any run-time changes to that setting made by +** sqlite3_config(). In other words, the return value from sqlite3_threadsafe() +** is unchanged by calls to sqlite3_config().)^ ** ** See the [threading mode] documentation for additional information. -** -** Requirements: [H10101] [H10102] */ -int sqlite3_threadsafe(void); +SQLITE_API int sqlite3_threadsafe(void); /* -** CAPI3REF: Database Connection Handle {H12000} +** CAPI3REF: Database Connection Handle ** KEYWORDS: {database connection} {database connections} ** ** Each open SQLite database is represented by a pointer to an instance of @@ -174,7 +227,7 @@ int sqlite3_threadsafe(void); typedef struct sqlite3 sqlite3; /* -** CAPI3REF: 64-Bit Integer Types {H10200} +** CAPI3REF: 64-Bit Integer Types ** KEYWORDS: sqlite_int64 sqlite_uint64 ** ** Because there is no cross-platform way to specify 64-bit integer types @@ -184,7 +237,10 @@ typedef struct sqlite3 sqlite3; ** The sqlite_int64 and sqlite_uint64 types are supported for backwards ** compatibility only. ** -** Requirements: [H10201] [H10202] +** ^The sqlite3_int64 and sqlite_int64 types can store integer values +** between -9223372036854775808 and +9223372036854775807 inclusive. ^The +** sqlite3_uint64 and sqlite_uint64 types can store integer values +** between 0 and +18446744073709551615 inclusive. */ #ifdef SQLITE_INT64_TYPE typedef SQLITE_INT64_TYPE sqlite_int64; @@ -208,36 +264,30 @@ typedef sqlite_uint64 sqlite3_uint64; #endif /* -** CAPI3REF: Closing A Database Connection {H12010} +** CAPI3REF: Closing A Database Connection ** -** This routine is the destructor for the [sqlite3] object. +** ^The sqlite3_close() routine is the destructor for the [sqlite3] object. +** ^Calls to sqlite3_close() return SQLITE_OK if the [sqlite3] object is +** successfully destroyed and all associated resources are deallocated. ** -** Applications should [sqlite3_finalize | finalize] all [prepared statements] +** Applications must [sqlite3_finalize | finalize] all [prepared statements] ** and [sqlite3_blob_close | close] all [BLOB handles] associated with -** the [sqlite3] object prior to attempting to close the object. -** The [sqlite3_next_stmt()] interface can be used to locate all -** [prepared statements] associated with a [database connection] if desired. -** Typical code might look like this: +** the [sqlite3] object prior to attempting to close the object. ^If +** sqlite3_close() is called on a [database connection] that still has +** outstanding [prepared statements] or [BLOB handles], then it returns +** SQLITE_BUSY. ** -**
    -** sqlite3_stmt *pStmt;
    -** while( (pStmt = sqlite3_next_stmt(db, 0))!=0 ){
    -**     sqlite3_finalize(pStmt);
    -** }
    -** 
    -** -** If [sqlite3_close()] is invoked while a transaction is open, +** ^If [sqlite3_close()] is invoked while a transaction is open, ** the transaction is automatically rolled back. ** ** The C parameter to [sqlite3_close(C)] must be either a NULL ** pointer or an [sqlite3] object pointer obtained ** from [sqlite3_open()], [sqlite3_open16()], or ** [sqlite3_open_v2()], and not previously closed. -** -** Requirements: -** [H12011] [H12012] [H12013] [H12014] [H12015] [H12019] +** ^Calling sqlite3_close() with a NULL pointer argument is a +** harmless no-op. */ -int sqlite3_close(sqlite3 *); +SQLITE_API int sqlite3_close(sqlite3 *); /* ** The type for a callback function. @@ -247,50 +297,67 @@ int sqlite3_close(sqlite3 *); typedef int (*sqlite3_callback)(void*,int,char**, char**); /* -** CAPI3REF: One-Step Query Execution Interface {H12100} -** -** The sqlite3_exec() interface is a convenient way of running one or more -** SQL statements without having to write a lot of C code. The UTF-8 encoded -** SQL statements are passed in as the second parameter to sqlite3_exec(). -** The statements are evaluated one by one until either an error or -** an interrupt is encountered, or until they are all done. The 3rd parameter -** is an optional callback that is invoked once for each row of any query -** results produced by the SQL statements. The 5th parameter tells where -** to write any error messages. -** -** The error message passed back through the 5th parameter is held -** in memory obtained from [sqlite3_malloc()]. To avoid a memory leak, -** the calling application should call [sqlite3_free()] on any error -** message returned through the 5th parameter when it has finished using -** the error message. -** -** If the SQL statement in the 2nd parameter is NULL or an empty string -** or a string containing only whitespace and comments, then no SQL -** statements are evaluated and the database is not changed. -** -** The sqlite3_exec() interface is implemented in terms of -** [sqlite3_prepare_v2()], [sqlite3_step()], and [sqlite3_finalize()]. -** The sqlite3_exec() routine does nothing to the database that cannot be done -** by [sqlite3_prepare_v2()], [sqlite3_step()], and [sqlite3_finalize()]. -** -** The first parameter to [sqlite3_exec()] must be an valid and open -** [database connection]. -** -** The database connection must not be closed while -** [sqlite3_exec()] is running. -** -** The calling function should use [sqlite3_free()] to free -** the memory that *errmsg is left pointing at once the error -** message is no longer needed. -** -** The SQL statement text in the 2nd parameter to [sqlite3_exec()] -** must remain unchanged while [sqlite3_exec()] is running. +** CAPI3REF: One-Step Query Execution Interface +** +** The sqlite3_exec() interface is a convenience wrapper around +** [sqlite3_prepare_v2()], [sqlite3_step()], and [sqlite3_finalize()], +** that allows an application to run multiple statements of SQL +** without having to use a lot of C code. +** +** ^The sqlite3_exec() interface runs zero or more UTF-8 encoded, +** semicolon-separate SQL statements passed into its 2nd argument, +** in the context of the [database connection] passed in as its 1st +** argument. ^If the callback function of the 3rd argument to +** sqlite3_exec() is not NULL, then it is invoked for each result row +** coming out of the evaluated SQL statements. ^The 4th argument to +** sqlite3_exec() is relayed through to the 1st argument of each +** callback invocation. ^If the callback pointer to sqlite3_exec() +** is NULL, then no callback is ever invoked and result rows are +** ignored. +** +** ^If an error occurs while evaluating the SQL statements passed into +** sqlite3_exec(), then execution of the current statement stops and +** subsequent statements are skipped. ^If the 5th parameter to sqlite3_exec() +** is not NULL then any error message is written into memory obtained +** from [sqlite3_malloc()] and passed back through the 5th parameter. +** To avoid memory leaks, the application should invoke [sqlite3_free()] +** on error message strings returned through the 5th parameter of +** of sqlite3_exec() after the error message string is no longer needed. +** ^If the 5th parameter to sqlite3_exec() is not NULL and no errors +** occur, then sqlite3_exec() sets the pointer in its 5th parameter to +** NULL before returning. +** +** ^If an sqlite3_exec() callback returns non-zero, the sqlite3_exec() +** routine returns SQLITE_ABORT without invoking the callback again and +** without running any subsequent SQL statements. +** +** ^The 2nd argument to the sqlite3_exec() callback function is the +** number of columns in the result. ^The 3rd argument to the sqlite3_exec() +** callback is an array of pointers to strings obtained as if from +** [sqlite3_column_text()], one for each column. ^If an element of a +** result row is NULL then the corresponding string pointer for the +** sqlite3_exec() callback is a NULL pointer. ^The 4th argument to the +** sqlite3_exec() callback is an array of pointers to strings where each +** entry represents the name of corresponding result column as obtained +** from [sqlite3_column_name()]. +** +** ^If the 2nd parameter to sqlite3_exec() is a NULL pointer, a pointer +** to an empty string, or a pointer that contains only whitespace and/or +** SQL comments, then no SQL statements are evaluated and the database +** is not changed. +** +** Restrictions: ** -** Requirements: -** [H12101] [H12102] [H12104] [H12105] [H12107] [H12110] [H12113] [H12116] -** [H12119] [H12122] [H12125] [H12131] [H12134] [H12137] [H12138] +**
      +**
    • The application must insure that the 1st parameter to sqlite3_exec() +** is a valid and open [database connection]. +**
    • The application must not close [database connection] specified by +** the 1st parameter to sqlite3_exec() while sqlite3_exec() is running. +**
    • The application must not modify the SQL statement text passed into +** the 2nd parameter of sqlite3_exec() while sqlite3_exec() is running. +**
    */ -int sqlite3_exec( +SQLITE_API int sqlite3_exec( sqlite3*, /* An open database */ const char *sql, /* SQL to be evaluated */ int (*callback)(void*,int,char**,char**), /* Callback function */ @@ -299,16 +366,17 @@ int sqlite3_exec( ); /* -** CAPI3REF: Result Codes {H10210} +** CAPI3REF: Result Codes ** KEYWORDS: SQLITE_OK {error code} {error codes} ** KEYWORDS: {result code} {result codes} ** ** Many SQLite functions return an integer result code from the set shown -** here in order to indicates success or failure. +** here in order to indicate success or failure. ** ** New error codes may be added in future versions of SQLite. ** -** See also: [SQLITE_IOERR_READ | extended result codes] +** See also: [SQLITE_IOERR_READ | extended result codes], +** [sqlite3_vtab_on_conflict()] [SQLITE_ROLLBACK | result codes]. */ #define SQLITE_OK 0 /* Successful result */ /* beginning-of-error-codes */ @@ -323,10 +391,10 @@ int sqlite3_exec( #define SQLITE_INTERRUPT 9 /* Operation terminated by sqlite3_interrupt()*/ #define SQLITE_IOERR 10 /* Some kind of disk I/O error occurred */ #define SQLITE_CORRUPT 11 /* The database disk image is malformed */ -#define SQLITE_NOTFOUND 12 /* NOT USED. Table or record not found */ +#define SQLITE_NOTFOUND 12 /* Unknown opcode in sqlite3_file_control() */ #define SQLITE_FULL 13 /* Insertion failed because database is full */ #define SQLITE_CANTOPEN 14 /* Unable to open the database file */ -#define SQLITE_PROTOCOL 15 /* NOT USED. Database lock protocol error */ +#define SQLITE_PROTOCOL 15 /* Database lock protocol error */ #define SQLITE_EMPTY 16 /* Database is empty */ #define SQLITE_SCHEMA 17 /* The database schema changed */ #define SQLITE_TOOBIG 18 /* String or BLOB exceeds size limit */ @@ -343,7 +411,7 @@ int sqlite3_exec( /* end-of-error-codes */ /* -** CAPI3REF: Extended Result Codes {H10220} +** CAPI3REF: Extended Result Codes ** KEYWORDS: {extended error code} {extended error codes} ** KEYWORDS: {extended result code} {extended result codes} ** @@ -382,21 +450,35 @@ int sqlite3_exec( #define SQLITE_IOERR_LOCK (SQLITE_IOERR | (15<<8)) #define SQLITE_IOERR_CLOSE (SQLITE_IOERR | (16<<8)) #define SQLITE_IOERR_DIR_CLOSE (SQLITE_IOERR | (17<<8)) -#define SQLITE_LOCKED_SHAREDCACHE (SQLITE_LOCKED | (1<<8) ) - -/* -** CAPI3REF: Flags For File Open Operations {H10230} +#define SQLITE_IOERR_SHMOPEN (SQLITE_IOERR | (18<<8)) +#define SQLITE_IOERR_SHMSIZE (SQLITE_IOERR | (19<<8)) +#define SQLITE_IOERR_SHMLOCK (SQLITE_IOERR | (20<<8)) +#define SQLITE_IOERR_SHMMAP (SQLITE_IOERR | (21<<8)) +#define SQLITE_IOERR_SEEK (SQLITE_IOERR | (22<<8)) +#define SQLITE_LOCKED_SHAREDCACHE (SQLITE_LOCKED | (1<<8)) +#define SQLITE_BUSY_RECOVERY (SQLITE_BUSY | (1<<8)) +#define SQLITE_CANTOPEN_NOTEMPDIR (SQLITE_CANTOPEN | (1<<8)) +#define SQLITE_CANTOPEN_ISDIR (SQLITE_CANTOPEN | (2<<8)) +#define SQLITE_CORRUPT_VTAB (SQLITE_CORRUPT | (1<<8)) +#define SQLITE_READONLY_RECOVERY (SQLITE_READONLY | (1<<8)) +#define SQLITE_READONLY_CANTLOCK (SQLITE_READONLY | (2<<8)) +#define SQLITE_ABORT_ROLLBACK (SQLITE_ABORT | (2<<8)) + +/* +** CAPI3REF: Flags For File Open Operations ** ** These bit values are intended for use in the ** 3rd parameter to the [sqlite3_open_v2()] interface and -** in the 4th parameter to the xOpen method of the -** [sqlite3_vfs] object. +** in the 4th parameter to the [sqlite3_vfs.xOpen] method. */ #define SQLITE_OPEN_READONLY 0x00000001 /* Ok for sqlite3_open_v2() */ #define SQLITE_OPEN_READWRITE 0x00000002 /* Ok for sqlite3_open_v2() */ #define SQLITE_OPEN_CREATE 0x00000004 /* Ok for sqlite3_open_v2() */ #define SQLITE_OPEN_DELETEONCLOSE 0x00000008 /* VFS only */ #define SQLITE_OPEN_EXCLUSIVE 0x00000010 /* VFS only */ +#define SQLITE_OPEN_AUTOPROXY 0x00000020 /* VFS only */ +#define SQLITE_OPEN_URI 0x00000040 /* Ok for sqlite3_open_v2() */ +#define SQLITE_OPEN_MEMORY 0x00000080 /* Ok for sqlite3_open_v2() */ #define SQLITE_OPEN_MAIN_DB 0x00000100 /* VFS only */ #define SQLITE_OPEN_TEMP_DB 0x00000200 /* VFS only */ #define SQLITE_OPEN_TRANSIENT_DB 0x00000400 /* VFS only */ @@ -406,11 +488,16 @@ int sqlite3_exec( #define SQLITE_OPEN_MASTER_JOURNAL 0x00004000 /* VFS only */ #define SQLITE_OPEN_NOMUTEX 0x00008000 /* Ok for sqlite3_open_v2() */ #define SQLITE_OPEN_FULLMUTEX 0x00010000 /* Ok for sqlite3_open_v2() */ +#define SQLITE_OPEN_SHAREDCACHE 0x00020000 /* Ok for sqlite3_open_v2() */ +#define SQLITE_OPEN_PRIVATECACHE 0x00040000 /* Ok for sqlite3_open_v2() */ +#define SQLITE_OPEN_WAL 0x00080000 /* VFS only */ + +/* Reserved: 0x00F00000 */ /* -** CAPI3REF: Device Characteristics {H10240} +** CAPI3REF: Device Characteristics ** -** The xDeviceCapabilities method of the [sqlite3_io_methods] +** The xDeviceCharacteristics method of the [sqlite3_io_methods] ** object returns an integer which is a vector of the these ** bit values expressing I/O characteristics of the mass storage ** device that holds the file that the [sqlite3_io_methods] @@ -425,22 +512,28 @@ int sqlite3_exec( ** first then the size of the file is extended, never the other ** way around. The SQLITE_IOCAP_SEQUENTIAL property means that ** information is written to disk in the same order as calls -** to xWrite(). -*/ -#define SQLITE_IOCAP_ATOMIC 0x00000001 -#define SQLITE_IOCAP_ATOMIC512 0x00000002 -#define SQLITE_IOCAP_ATOMIC1K 0x00000004 -#define SQLITE_IOCAP_ATOMIC2K 0x00000008 -#define SQLITE_IOCAP_ATOMIC4K 0x00000010 -#define SQLITE_IOCAP_ATOMIC8K 0x00000020 -#define SQLITE_IOCAP_ATOMIC16K 0x00000040 -#define SQLITE_IOCAP_ATOMIC32K 0x00000080 -#define SQLITE_IOCAP_ATOMIC64K 0x00000100 -#define SQLITE_IOCAP_SAFE_APPEND 0x00000200 -#define SQLITE_IOCAP_SEQUENTIAL 0x00000400 - -/* -** CAPI3REF: File Locking Levels {H10250} +** to xWrite(). The SQLITE_IOCAP_POWERSAFE_OVERWRITE property means that +** after reboot following a crash or power loss, the only bytes in a +** file that were written at the application level might have changed +** and that adjacent bytes, even bytes within the same sector are +** guaranteed to be unchanged. +*/ +#define SQLITE_IOCAP_ATOMIC 0x00000001 +#define SQLITE_IOCAP_ATOMIC512 0x00000002 +#define SQLITE_IOCAP_ATOMIC1K 0x00000004 +#define SQLITE_IOCAP_ATOMIC2K 0x00000008 +#define SQLITE_IOCAP_ATOMIC4K 0x00000010 +#define SQLITE_IOCAP_ATOMIC8K 0x00000020 +#define SQLITE_IOCAP_ATOMIC16K 0x00000040 +#define SQLITE_IOCAP_ATOMIC32K 0x00000080 +#define SQLITE_IOCAP_ATOMIC64K 0x00000100 +#define SQLITE_IOCAP_SAFE_APPEND 0x00000200 +#define SQLITE_IOCAP_SEQUENTIAL 0x00000400 +#define SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN 0x00000800 +#define SQLITE_IOCAP_POWERSAFE_OVERWRITE 0x00001000 + +/* +** CAPI3REF: File Locking Levels ** ** SQLite uses one of these integer values as the second ** argument to calls it makes to the xLock() and xUnlock() methods @@ -453,7 +546,7 @@ int sqlite3_exec( #define SQLITE_LOCK_EXCLUSIVE 4 /* -** CAPI3REF: Synchronization Type Flags {H10260} +** CAPI3REF: Synchronization Type Flags ** ** When SQLite invokes the xSync() method of an ** [sqlite3_io_methods] object it uses a combination of @@ -465,16 +558,29 @@ int sqlite3_exec( ** equal SQLITE_SYNC_NORMAL, that means to use normal fsync() semantics. ** If the lower four bits equal SQLITE_SYNC_FULL, that means ** to use Mac OS X style fullsync instead of fsync(). +** +** Do not confuse the SQLITE_SYNC_NORMAL and SQLITE_SYNC_FULL flags +** with the [PRAGMA synchronous]=NORMAL and [PRAGMA synchronous]=FULL +** settings. The [synchronous pragma] determines when calls to the +** xSync VFS method occur and applies uniformly across all platforms. +** The SQLITE_SYNC_NORMAL and SQLITE_SYNC_FULL flags determine how +** energetic or rigorous or forceful the sync operations are and +** only make a difference on Mac OSX for the default SQLite code. +** (Third-party VFS implementations might also make the distinction +** between SQLITE_SYNC_NORMAL and SQLITE_SYNC_FULL, but among the +** operating systems natively supported by SQLite, only Mac OSX +** cares about the difference.) */ #define SQLITE_SYNC_NORMAL 0x00002 #define SQLITE_SYNC_FULL 0x00003 #define SQLITE_SYNC_DATAONLY 0x00010 /* -** CAPI3REF: OS Interface Open File Handle {H11110} +** CAPI3REF: OS Interface Open File Handle ** -** An [sqlite3_file] object represents an open file in the OS -** interface layer. Individual OS interface implementations will +** An [sqlite3_file] object represents an open file in the +** [sqlite3_vfs | OS interface layer]. Individual OS interface +** implementations will ** want to subclass this object by appending additional fields ** for their own use. The pMethods entry is a pointer to an ** [sqlite3_io_methods] object that defines methods for performing @@ -486,19 +592,20 @@ struct sqlite3_file { }; /* -** CAPI3REF: OS Interface File Virtual Methods Object {H11120} +** CAPI3REF: OS Interface File Virtual Methods Object ** -** Every file opened by the [sqlite3_vfs] xOpen method populates an +** Every file opened by the [sqlite3_vfs.xOpen] method populates an ** [sqlite3_file] object (or, more commonly, a subclass of the ** [sqlite3_file] object) with a pointer to an instance of this object. ** This object defines the methods used to perform various operations ** against the open file represented by the [sqlite3_file] object. ** -** If the xOpen method sets the sqlite3_file.pMethods element +** If the [sqlite3_vfs.xOpen] method sets the sqlite3_file.pMethods element ** to a non-NULL pointer, then the sqlite3_io_methods.xClose method -** may be invoked even if the xOpen reported that it failed. The -** only way to prevent a call to xClose following a failed xOpen -** is for the xOpen to set the sqlite3_file.pMethods element to NULL. +** may be invoked even if the [sqlite3_vfs.xOpen] reported that it failed. The +** only way to prevent a call to xClose following a failed [sqlite3_vfs.xOpen] +** is for the [sqlite3_vfs.xOpen] to set the sqlite3_file.pMethods element +** to NULL. ** ** The flags argument to xSync may be one of [SQLITE_SYNC_NORMAL] or ** [SQLITE_SYNC_FULL]. The first choice is the normal fsync(). @@ -532,7 +639,9 @@ struct sqlite3_file { ** core reserves all opcodes less than 100 for its own use. ** A [SQLITE_FCNTL_LOCKSTATE | list of opcodes] less than 100 is available. ** Applications that define a custom xFileControl method should use opcodes -** greater than 100 to avoid conflicts. +** greater than 100 to avoid conflicts. VFS implementations should +** return [SQLITE_NOTFOUND] for file control opcodes that they do not +** recognize. ** ** The xSectorSize() method returns the sector size of the ** device that underlies the file. The sector size is the @@ -587,11 +696,17 @@ struct sqlite3_io_methods { int (*xFileControl)(sqlite3_file*, int op, void *pArg); int (*xSectorSize)(sqlite3_file*); int (*xDeviceCharacteristics)(sqlite3_file*); + /* Methods above are valid for version 1 */ + int (*xShmMap)(sqlite3_file*, int iPg, int pgsz, int, void volatile**); + int (*xShmLock)(sqlite3_file*, int offset, int n, int flags); + void (*xShmBarrier)(sqlite3_file*); + int (*xShmUnmap)(sqlite3_file*, int deleteFlag); + /* Methods above are valid for version 2 */ /* Additional methods may be added in future releases */ }; /* -** CAPI3REF: Standard File Control Opcodes {H11310} +** CAPI3REF: Standard File Control Opcodes ** ** These integer constants are opcodes for the xFileControl method ** of the [sqlite3_io_methods] object and for the [sqlite3_file_control()] @@ -604,14 +719,142 @@ struct sqlite3_io_methods { ** into an integer that the pArg argument points to. This capability ** is used during testing and only needs to be supported when SQLITE_TEST ** is defined. +**
      +**
    • [[SQLITE_FCNTL_SIZE_HINT]] +** The [SQLITE_FCNTL_SIZE_HINT] opcode is used by SQLite to give the VFS +** layer a hint of how large the database file will grow to be during the +** current transaction. This hint is not guaranteed to be accurate but it +** is often close. The underlying VFS might choose to preallocate database +** file space based on this hint in order to help writes to the database +** file run faster. +** +**
    • [[SQLITE_FCNTL_CHUNK_SIZE]] +** The [SQLITE_FCNTL_CHUNK_SIZE] opcode is used to request that the VFS +** extends and truncates the database file in chunks of a size specified +** by the user. The fourth argument to [sqlite3_file_control()] should +** point to an integer (type int) containing the new chunk-size to use +** for the nominated database. Allocating database file space in large +** chunks (say 1MB at a time), may reduce file-system fragmentation and +** improve performance on some systems. +** +**
    • [[SQLITE_FCNTL_FILE_POINTER]] +** The [SQLITE_FCNTL_FILE_POINTER] opcode is used to obtain a pointer +** to the [sqlite3_file] object associated with a particular database +** connection. See the [sqlite3_file_control()] documentation for +** additional information. +** +**
    • [[SQLITE_FCNTL_SYNC_OMITTED]] +** ^(The [SQLITE_FCNTL_SYNC_OMITTED] opcode is generated internally by +** SQLite and sent to all VFSes in place of a call to the xSync method +** when the database connection has [PRAGMA synchronous] set to OFF.)^ +** Some specialized VFSes need this signal in order to operate correctly +** when [PRAGMA synchronous | PRAGMA synchronous=OFF] is set, but most +** VFSes do not need this signal and should silently ignore this opcode. +** Applications should not call [sqlite3_file_control()] with this +** opcode as doing so may disrupt the operation of the specialized VFSes +** that do require it. +** +**
    • [[SQLITE_FCNTL_WIN32_AV_RETRY]] +** ^The [SQLITE_FCNTL_WIN32_AV_RETRY] opcode is used to configure automatic +** retry counts and intervals for certain disk I/O operations for the +** windows [VFS] in order to provide robustness in the presence of +** anti-virus programs. By default, the windows VFS will retry file read, +** file write, and file delete operations up to 10 times, with a delay +** of 25 milliseconds before the first retry and with the delay increasing +** by an additional 25 milliseconds with each subsequent retry. This +** opcode allows these two values (10 retries and 25 milliseconds of delay) +** to be adjusted. The values are changed for all database connections +** within the same process. The argument is a pointer to an array of two +** integers where the first integer i the new retry count and the second +** integer is the delay. If either integer is negative, then the setting +** is not changed but instead the prior value of that setting is written +** into the array entry, allowing the current retry settings to be +** interrogated. The zDbName parameter is ignored. +** +**
    • [[SQLITE_FCNTL_PERSIST_WAL]] +** ^The [SQLITE_FCNTL_PERSIST_WAL] opcode is used to set or query the +** persistent [WAL | Write Ahead Log] setting. By default, the auxiliary +** write ahead log and shared memory files used for transaction control +** are automatically deleted when the latest connection to the database +** closes. Setting persistent WAL mode causes those files to persist after +** close. Persisting the files is useful when other processes that do not +** have write permission on the directory containing the database file want +** to read the database file, as the WAL and shared memory files must exist +** in order for the database to be readable. The fourth parameter to +** [sqlite3_file_control()] for this opcode should be a pointer to an integer. +** That integer is 0 to disable persistent WAL mode or 1 to enable persistent +** WAL mode. If the integer is -1, then it is overwritten with the current +** WAL persistence setting. +** +**
    • [[SQLITE_FCNTL_POWERSAFE_OVERWRITE]] +** ^The [SQLITE_FCNTL_POWERSAFE_OVERWRITE] opcode is used to set or query the +** persistent "powersafe-overwrite" or "PSOW" setting. The PSOW setting +** determines the [SQLITE_IOCAP_POWERSAFE_OVERWRITE] bit of the +** xDeviceCharacteristics methods. The fourth parameter to +** [sqlite3_file_control()] for this opcode should be a pointer to an integer. +** That integer is 0 to disable zero-damage mode or 1 to enable zero-damage +** mode. If the integer is -1, then it is overwritten with the current +** zero-damage mode setting. +** +**
    • [[SQLITE_FCNTL_OVERWRITE]] +** ^The [SQLITE_FCNTL_OVERWRITE] opcode is invoked by SQLite after opening +** a write transaction to indicate that, unless it is rolled back for some +** reason, the entire database file will be overwritten by the current +** transaction. This is used by VACUUM operations. +** +**
    • [[SQLITE_FCNTL_VFSNAME]] +** ^The [SQLITE_FCNTL_VFSNAME] opcode can be used to obtain the names of +** all [VFSes] in the VFS stack. The names are of all VFS shims and the +** final bottom-level VFS are written into memory obtained from +** [sqlite3_malloc()] and the result is stored in the char* variable +** that the fourth parameter of [sqlite3_file_control()] points to. +** The caller is responsible for freeing the memory when done. As with +** all file-control actions, there is no guarantee that this will actually +** do anything. Callers should initialize the char* variable to a NULL +** pointer in case this file-control is not implemented. This file-control +** is intended for diagnostic use only. +** +**
    • [[SQLITE_FCNTL_PRAGMA]] +** ^Whenever a [PRAGMA] statement is parsed, an [SQLITE_FCNTL_PRAGMA] +** file control is sent to the open [sqlite3_file] object corresponding +** to the database file to which the pragma statement refers. ^The argument +** to the [SQLITE_FCNTL_PRAGMA] file control is an array of +** pointers to strings (char**) in which the second element of the array +** is the name of the pragma and the third element is the argument to the +** pragma or NULL if the pragma has no argument. ^The handler for an +** [SQLITE_FCNTL_PRAGMA] file control can optionally make the first element +** of the char** argument point to a string obtained from [sqlite3_mprintf()] +** or the equivalent and that string will become the result of the pragma or +** the error message if the pragma fails. ^If the +** [SQLITE_FCNTL_PRAGMA] file control returns [SQLITE_NOTFOUND], then normal +** [PRAGMA] processing continues. ^If the [SQLITE_FCNTL_PRAGMA] +** file control returns [SQLITE_OK], then the parser assumes that the +** VFS has handled the PRAGMA itself and the parser generates a no-op +** prepared statement. ^If the [SQLITE_FCNTL_PRAGMA] file control returns +** any result code other than [SQLITE_OK] or [SQLITE_NOTFOUND], that means +** that the VFS encountered an error while handling the [PRAGMA] and the +** compilation of the PRAGMA fails with an error. ^The [SQLITE_FCNTL_PRAGMA] +** file control occurs at the beginning of pragma statement analysis and so +** it is able to override built-in [PRAGMA] statements. +**
    */ -#define SQLITE_FCNTL_LOCKSTATE 1 -#define SQLITE_GET_LOCKPROXYFILE 2 -#define SQLITE_SET_LOCKPROXYFILE 3 -#define SQLITE_LAST_ERRNO 4 +#define SQLITE_FCNTL_LOCKSTATE 1 +#define SQLITE_GET_LOCKPROXYFILE 2 +#define SQLITE_SET_LOCKPROXYFILE 3 +#define SQLITE_LAST_ERRNO 4 +#define SQLITE_FCNTL_SIZE_HINT 5 +#define SQLITE_FCNTL_CHUNK_SIZE 6 +#define SQLITE_FCNTL_FILE_POINTER 7 +#define SQLITE_FCNTL_SYNC_OMITTED 8 +#define SQLITE_FCNTL_WIN32_AV_RETRY 9 +#define SQLITE_FCNTL_PERSIST_WAL 10 +#define SQLITE_FCNTL_OVERWRITE 11 +#define SQLITE_FCNTL_VFSNAME 12 +#define SQLITE_FCNTL_POWERSAFE_OVERWRITE 13 +#define SQLITE_FCNTL_PRAGMA 14 /* -** CAPI3REF: Mutex Handle {H17110} +** CAPI3REF: Mutex Handle ** ** The mutex module within SQLite defines [sqlite3_mutex] to be an ** abstract type for a mutex object. The SQLite core never looks @@ -623,11 +866,12 @@ struct sqlite3_io_methods { typedef struct sqlite3_mutex sqlite3_mutex; /* -** CAPI3REF: OS Interface Object {H11140} +** CAPI3REF: OS Interface Object ** ** An instance of the sqlite3_vfs object defines the interface between ** the SQLite core and the underlying operating system. The "vfs" -** in the name of the object stands for "virtual file system". +** in the name of the object stands for "virtual file system". See +** the [VFS | VFS documentation] for further information. ** ** The value of the iVersion field is initially 1 but may be larger in ** future versions of SQLite. Additional fields may be appended to this @@ -656,15 +900,20 @@ typedef struct sqlite3_mutex sqlite3_mutex; ** The zName field holds the name of the VFS module. The name must ** be unique across all VFS modules. ** -** SQLite will guarantee that the zFilename parameter to xOpen +** [[sqlite3_vfs.xOpen]] +** ^SQLite guarantees that the zFilename parameter to xOpen ** is either a NULL pointer or string obtained -** from xFullPathname(). SQLite further guarantees that +** from xFullPathname() with an optional suffix added. +** ^If a suffix is added to the zFilename parameter, it will +** consist of a single "-" character followed by no more than +** 11 alphanumeric and/or "-" characters. +** ^SQLite further guarantees that ** the string will be valid and unchanged until xClose() is ** called. Because of the previous sentence, ** the [sqlite3_file] can safely store a pointer to the ** filename if it needs to remember the filename for some reason. -** If the zFilename parameter is xOpen is a NULL pointer then xOpen -** must invent its own temporary name for the file. Whenever the +** If the zFilename parameter to xOpen is a NULL pointer then xOpen +** must invent its own temporary name for the file. ^Whenever the ** xFilename parameter is NULL it will also be the case that the ** flags parameter will include [SQLITE_OPEN_DELETEONCLOSE]. ** @@ -675,7 +924,7 @@ typedef struct sqlite3_mutex sqlite3_mutex; ** If xOpen() opens a file read-only then it sets *pOutFlags to ** include [SQLITE_OPEN_READONLY]. Other bits in *pOutFlags may be set. ** -** SQLite will also add one of the following flags to the xOpen() +** ^(SQLite will also add one of the following flags to the xOpen() ** call, depending on the object being opened: ** **
      @@ -686,7 +935,8 @@ typedef struct sqlite3_mutex sqlite3_mutex; **
    • [SQLITE_OPEN_TRANSIENT_DB] **
    • [SQLITE_OPEN_SUBJOURNAL] **
    • [SQLITE_OPEN_MASTER_JOURNAL] -**
    +**
  • [SQLITE_OPEN_WAL] +** )^ ** ** The file I/O implementation can use the object type flags to ** change the way it deals with files. For example, an application @@ -705,10 +955,11 @@ typedef struct sqlite3_mutex sqlite3_mutex; ** ** ** The [SQLITE_OPEN_DELETEONCLOSE] flag means the file should be -** deleted when it is closed. The [SQLITE_OPEN_DELETEONCLOSE] -** will be set for TEMP databases, journals and for subjournals. +** deleted when it is closed. ^The [SQLITE_OPEN_DELETEONCLOSE] +** will be set for TEMP databases and their journals, transient +** databases, and subjournals. ** -** The [SQLITE_OPEN_EXCLUSIVE] flag is always used in conjunction +** ^The [SQLITE_OPEN_EXCLUSIVE] flag is always used in conjunction ** with the [SQLITE_OPEN_CREATE] flag, which are both directly ** analogous to the O_EXCL and O_CREAT flags of the POSIX open() ** API. The SQLITE_OPEN_EXCLUSIVE flag, when paired with the @@ -717,7 +968,7 @@ typedef struct sqlite3_mutex sqlite3_mutex; ** It is not used to indicate the file should be opened ** for exclusive access. ** -** At least szOsFile bytes of memory are allocated by SQLite +** ^At least szOsFile bytes of memory are allocated by SQLite ** to hold the [sqlite3_file] structure passed as the third ** argument to xOpen. The xOpen method does not have to ** allocate the structure; it should just fill it in. Note that @@ -727,33 +978,54 @@ typedef struct sqlite3_mutex sqlite3_mutex; ** element will be valid after xOpen returns regardless of the success ** or failure of the xOpen call. ** -** The flags argument to xAccess() may be [SQLITE_ACCESS_EXISTS] +** [[sqlite3_vfs.xAccess]] +** ^The flags argument to xAccess() may be [SQLITE_ACCESS_EXISTS] ** to test for the existence of a file, or [SQLITE_ACCESS_READWRITE] to ** test whether a file is readable and writable, or [SQLITE_ACCESS_READ] ** to test whether a file is at least readable. The file can be a ** directory. ** -** SQLite will always allocate at least mxPathname+1 bytes for the +** ^SQLite will always allocate at least mxPathname+1 bytes for the ** output buffer xFullPathname. The exact size of the output buffer ** is also passed as a parameter to both methods. If the output buffer ** is not large enough, [SQLITE_CANTOPEN] should be returned. Since this is ** handled as a fatal error by SQLite, vfs implementations should endeavor ** to prevent this by setting mxPathname to a sufficiently large value. ** -** The xRandomness(), xSleep(), and xCurrentTime() interfaces -** are not strictly a part of the filesystem, but they are +** The xRandomness(), xSleep(), xCurrentTime(), and xCurrentTimeInt64() +** interfaces are not strictly a part of the filesystem, but they are ** included in the VFS structure for completeness. ** The xRandomness() function attempts to return nBytes bytes ** of good-quality randomness into zOut. The return value is ** the actual number of bytes of randomness obtained. ** The xSleep() method causes the calling thread to sleep for at -** least the number of microseconds given. The xCurrentTime() -** method returns a Julian Day Number for the current date and time. -** +** least the number of microseconds given. ^The xCurrentTime() +** method returns a Julian Day Number for the current date and time as +** a floating point value. +** ^The xCurrentTimeInt64() method returns, as an integer, the Julian +** Day Number multiplied by 86400000 (the number of milliseconds in +** a 24-hour day). +** ^SQLite will use the xCurrentTimeInt64() method to get the current +** date and time if that method is available (if iVersion is 2 or +** greater and the function pointer is not NULL) and will fall back +** to xCurrentTime() if xCurrentTimeInt64() is unavailable. +** +** ^The xSetSystemCall(), xGetSystemCall(), and xNestSystemCall() interfaces +** are not used by the SQLite core. These optional interfaces are provided +** by some VFSes to facilitate testing of the VFS code. By overriding +** system calls with functions under its control, a test program can +** simulate faults and error conditions that would otherwise be difficult +** or impossible to induce. The set of system calls that can be overridden +** varies from one VFS to another, and from one version of the same VFS to the +** next. Applications that use these interfaces must be prepared for any +** or all of these interfaces to be NULL or for their behavior to change +** from one release to the next. Applications must not attempt to access +** any of these methods if the iVersion of the VFS is less than 3. */ typedef struct sqlite3_vfs sqlite3_vfs; +typedef void (*sqlite3_syscall_ptr)(void); struct sqlite3_vfs { - int iVersion; /* Structure version number */ + int iVersion; /* Structure version number (currently 3) */ int szOsFile; /* Size of subclassed sqlite3_file */ int mxPathname; /* Maximum file pathname length */ sqlite3_vfs *pNext; /* Next registered VFS */ @@ -772,61 +1044,130 @@ struct sqlite3_vfs { int (*xSleep)(sqlite3_vfs*, int microseconds); int (*xCurrentTime)(sqlite3_vfs*, double*); int (*xGetLastError)(sqlite3_vfs*, int, char *); - /* New fields may be appended in figure versions. The iVersion - ** value will increment whenever this happens. */ + /* + ** The methods above are in version 1 of the sqlite_vfs object + ** definition. Those that follow are added in version 2 or later + */ + int (*xCurrentTimeInt64)(sqlite3_vfs*, sqlite3_int64*); + /* + ** The methods above are in versions 1 and 2 of the sqlite_vfs object. + ** Those below are for version 3 and greater. + */ + int (*xSetSystemCall)(sqlite3_vfs*, const char *zName, sqlite3_syscall_ptr); + sqlite3_syscall_ptr (*xGetSystemCall)(sqlite3_vfs*, const char *zName); + const char *(*xNextSystemCall)(sqlite3_vfs*, const char *zName); + /* + ** The methods above are in versions 1 through 3 of the sqlite_vfs object. + ** New fields may be appended in figure versions. The iVersion + ** value will increment whenever this happens. + */ }; /* -** CAPI3REF: Flags for the xAccess VFS method {H11190} +** CAPI3REF: Flags for the xAccess VFS method ** ** These integer constants can be used as the third parameter to -** the xAccess method of an [sqlite3_vfs] object. {END} They determine +** the xAccess method of an [sqlite3_vfs] object. They determine ** what kind of permissions the xAccess method is looking for. ** With SQLITE_ACCESS_EXISTS, the xAccess method ** simply checks whether the file exists. ** With SQLITE_ACCESS_READWRITE, the xAccess method -** checks whether the file is both readable and writable. +** checks whether the named directory is both readable and writable +** (in other words, if files can be added, removed, and renamed within +** the directory). +** The SQLITE_ACCESS_READWRITE constant is currently used only by the +** [temp_store_directory pragma], though this could change in a future +** release of SQLite. ** With SQLITE_ACCESS_READ, the xAccess method -** checks whether the file is readable. +** checks whether the file is readable. The SQLITE_ACCESS_READ constant is +** currently unused, though it might be used in a future release of +** SQLite. */ #define SQLITE_ACCESS_EXISTS 0 -#define SQLITE_ACCESS_READWRITE 1 -#define SQLITE_ACCESS_READ 2 +#define SQLITE_ACCESS_READWRITE 1 /* Used by PRAGMA temp_store_directory */ +#define SQLITE_ACCESS_READ 2 /* Unused */ + +/* +** CAPI3REF: Flags for the xShmLock VFS method +** +** These integer constants define the various locking operations +** allowed by the xShmLock method of [sqlite3_io_methods]. The +** following are the only legal combinations of flags to the +** xShmLock method: +** +**
      +**
    • SQLITE_SHM_LOCK | SQLITE_SHM_SHARED +**
    • SQLITE_SHM_LOCK | SQLITE_SHM_EXCLUSIVE +**
    • SQLITE_SHM_UNLOCK | SQLITE_SHM_SHARED +**
    • SQLITE_SHM_UNLOCK | SQLITE_SHM_EXCLUSIVE +**
    +** +** When unlocking, the same SHARED or EXCLUSIVE flag must be supplied as +** was given no the corresponding lock. +** +** The xShmLock method can transition between unlocked and SHARED or +** between unlocked and EXCLUSIVE. It cannot transition between SHARED +** and EXCLUSIVE. +*/ +#define SQLITE_SHM_UNLOCK 1 +#define SQLITE_SHM_LOCK 2 +#define SQLITE_SHM_SHARED 4 +#define SQLITE_SHM_EXCLUSIVE 8 + +/* +** CAPI3REF: Maximum xShmLock index +** +** The xShmLock method on [sqlite3_io_methods] may use values +** between 0 and this upper bound as its "offset" argument. +** The SQLite core will never attempt to acquire or release a +** lock outside of this range +*/ +#define SQLITE_SHM_NLOCK 8 + /* -** CAPI3REF: Initialize The SQLite Library {H10130} +** CAPI3REF: Initialize The SQLite Library ** -** The sqlite3_initialize() routine initializes the -** SQLite library. The sqlite3_shutdown() routine +** ^The sqlite3_initialize() routine initializes the +** SQLite library. ^The sqlite3_shutdown() routine ** deallocates any resources that were allocated by sqlite3_initialize(). +** These routines are designed to aid in process initialization and +** shutdown on embedded systems. Workstation applications using +** SQLite normally do not need to invoke either of these routines. ** ** A call to sqlite3_initialize() is an "effective" call if it is ** the first time sqlite3_initialize() is invoked during the lifetime of ** the process, or if it is the first time sqlite3_initialize() is invoked -** following a call to sqlite3_shutdown(). Only an effective call +** following a call to sqlite3_shutdown(). ^(Only an effective call ** of sqlite3_initialize() does any initialization. All other calls -** are harmless no-ops. +** are harmless no-ops.)^ ** ** A call to sqlite3_shutdown() is an "effective" call if it is the first -** call to sqlite3_shutdown() since the last sqlite3_initialize(). Only +** call to sqlite3_shutdown() since the last sqlite3_initialize(). ^(Only ** an effective call to sqlite3_shutdown() does any deinitialization. -** All other calls to sqlite3_shutdown() are harmless no-ops. +** All other valid calls to sqlite3_shutdown() are harmless no-ops.)^ +** +** The sqlite3_initialize() interface is threadsafe, but sqlite3_shutdown() +** is not. The sqlite3_shutdown() interface must only be called from a +** single thread. All open [database connections] must be closed and all +** other SQLite resources must be deallocated prior to invoking +** sqlite3_shutdown(). ** -** Among other things, sqlite3_initialize() shall invoke -** sqlite3_os_init(). Similarly, sqlite3_shutdown() -** shall invoke sqlite3_os_end(). +** Among other things, ^sqlite3_initialize() will invoke +** sqlite3_os_init(). Similarly, ^sqlite3_shutdown() +** will invoke sqlite3_os_end(). ** -** The sqlite3_initialize() routine returns [SQLITE_OK] on success. -** If for some reason, sqlite3_initialize() is unable to initialize +** ^The sqlite3_initialize() routine returns [SQLITE_OK] on success. +** ^If for some reason, sqlite3_initialize() is unable to initialize ** the library (perhaps it is unable to allocate a needed resource such ** as a mutex) it returns an [error code] other than [SQLITE_OK]. ** -** The sqlite3_initialize() routine is called internally by many other +** ^The sqlite3_initialize() routine is called internally by many other ** SQLite interfaces so that an application usually does not need to ** invoke sqlite3_initialize() directly. For example, [sqlite3_open()] ** calls sqlite3_initialize() so the SQLite library will be automatically ** initialized when [sqlite3_open()] is called if it has not be initialized -** already. However, if SQLite is compiled with the [SQLITE_OMIT_AUTOINIT] +** already. ^However, if SQLite is compiled with the [SQLITE_OMIT_AUTOINIT] ** compile-time option, then the automatic calls to sqlite3_initialize() ** are omitted and the application must call sqlite3_initialize() directly ** prior to using any other SQLite interface. For maximum portability, @@ -850,22 +1191,22 @@ struct sqlite3_vfs { ** interface is called automatically by sqlite3_initialize() and ** sqlite3_os_end() is called by sqlite3_shutdown(). Appropriate ** implementations for sqlite3_os_init() and sqlite3_os_end() -** are built into SQLite when it is compiled for unix, windows, or os/2. -** When built for other platforms (using the [SQLITE_OS_OTHER=1] compile-time +** are built into SQLite when it is compiled for Unix, Windows, or OS/2. +** When [custom builds | built for other platforms] +** (using the [SQLITE_OS_OTHER=1] compile-time ** option) the application must supply a suitable implementation for ** sqlite3_os_init() and sqlite3_os_end(). An application-supplied ** implementation of sqlite3_os_init() or sqlite3_os_end() ** must return [SQLITE_OK] on success and some other [error code] upon ** failure. */ -int sqlite3_initialize(void); -int sqlite3_shutdown(void); -int sqlite3_os_init(void); -int sqlite3_os_end(void); +SQLITE_API int sqlite3_initialize(void); +SQLITE_API int sqlite3_shutdown(void); +SQLITE_API int sqlite3_os_init(void); +SQLITE_API int sqlite3_os_end(void); /* -** CAPI3REF: Configuring The SQLite Library {H14100} -** EXPERIMENTAL +** CAPI3REF: Configuring The SQLite Library ** ** The sqlite3_config() interface is used to make global configuration ** changes to SQLite in order to tune SQLite to the specific needs of @@ -878,53 +1219,43 @@ int sqlite3_os_end(void); ** threads while sqlite3_config() is running. Furthermore, sqlite3_config() ** may only be invoked prior to library initialization using ** [sqlite3_initialize()] or after shutdown by [sqlite3_shutdown()]. -** Note, however, that sqlite3_config() can be called as part of the +** ^If sqlite3_config() is called after [sqlite3_initialize()] and before +** [sqlite3_shutdown()] then it will return SQLITE_MISUSE. +** Note, however, that ^sqlite3_config() can be called as part of the ** implementation of an application-defined [sqlite3_os_init()]. ** ** The first argument to sqlite3_config() is an integer -** [SQLITE_CONFIG_SINGLETHREAD | configuration option] that determines +** [configuration option] that determines ** what property of SQLite is to be configured. Subsequent arguments -** vary depending on the [SQLITE_CONFIG_SINGLETHREAD | configuration option] +** vary depending on the [configuration option] ** in the first argument. ** -** When a configuration option is set, sqlite3_config() returns [SQLITE_OK]. -** If the option is unknown or SQLite is unable to set the option +** ^When a configuration option is set, sqlite3_config() returns [SQLITE_OK]. +** ^If the option is unknown or SQLite is unable to set the option ** then this routine returns a non-zero [error code]. -** -** Requirements: -** [H14103] [H14106] [H14120] [H14123] [H14126] [H14129] [H14132] [H14135] -** [H14138] [H14141] [H14144] [H14147] [H14150] [H14153] [H14156] [H14159] -** [H14162] [H14165] [H14168] */ -SQLITE_EXPERIMENTAL int sqlite3_config(int, ...); +SQLITE_API int sqlite3_config(int, ...); /* -** CAPI3REF: Configure database connections {H14200} -** EXPERIMENTAL +** CAPI3REF: Configure database connections ** ** The sqlite3_db_config() interface is used to make configuration ** changes to a [database connection]. The interface is similar to ** [sqlite3_config()] except that the changes apply to a single -** [database connection] (specified in the first argument). The -** sqlite3_db_config() interface can only be used immediately after -** the database connection is created using [sqlite3_open()], -** [sqlite3_open16()], or [sqlite3_open_v2()]. +** [database connection] (specified in the first argument). ** ** The second argument to sqlite3_db_config(D,V,...) is the -** configuration verb - an integer code that indicates what -** aspect of the [database connection] is being configured. -** The only choice for this value is [SQLITE_DBCONFIG_LOOKASIDE]. -** New verbs are likely to be added in future releases of SQLite. -** Additional arguments depend on the verb. +** [SQLITE_DBCONFIG_LOOKASIDE | configuration verb] - an integer code +** that indicates what aspect of the [database connection] is being configured. +** Subsequent arguments vary depending on the configuration verb. ** -** Requirements: -** [H14203] [H14206] [H14209] [H14212] [H14215] +** ^Calls to sqlite3_db_config() return SQLITE_OK if and only if +** the call is considered successful. */ -SQLITE_EXPERIMENTAL int sqlite3_db_config(sqlite3*, int op, ...); +SQLITE_API int sqlite3_db_config(sqlite3*, int op, ...); /* -** CAPI3REF: Memory Allocation Routines {H10155} -** EXPERIMENTAL +** CAPI3REF: Memory Allocation Routines ** ** An instance of this object defines the interface between SQLite ** and low-level memory allocation routines. @@ -932,13 +1263,15 @@ SQLITE_EXPERIMENTAL int sqlite3_db_config(sqlite3*, int op, ...); ** This object is used in only one place in the SQLite interface. ** A pointer to an instance of this object is the argument to ** [sqlite3_config()] when the configuration option is -** [SQLITE_CONFIG_MALLOC]. By creating an instance of this object -** and passing it to [sqlite3_config()] during configuration, an -** application can specify an alternative memory allocation subsystem -** for SQLite to use for all of its dynamic memory needs. -** -** Note that SQLite comes with a built-in memory allocator that is -** perfectly adequate for the overwhelming majority of applications +** [SQLITE_CONFIG_MALLOC] or [SQLITE_CONFIG_GETMALLOC]. +** By creating an instance of this object +** and passing it to [sqlite3_config]([SQLITE_CONFIG_MALLOC]) +** during configuration, an application can specify an alternative +** memory allocation subsystem for SQLite to use for all of its +** dynamic memory needs. +** +** Note that SQLite comes with several [built-in memory allocators] +** that are perfectly adequate for the overwhelming majority of applications ** and that this object is only useful to a tiny minority of applications ** with specialized memory allocation requirements. This object is ** also used during testing of SQLite in order to specify an alternative @@ -946,8 +1279,10 @@ SQLITE_EXPERIMENTAL int sqlite3_db_config(sqlite3*, int op, ...); ** order to verify that SQLite recovers gracefully from such ** conditions. ** -** The xMalloc, xFree, and xRealloc methods must work like the -** malloc(), free(), and realloc() functions from the standard library. +** The xMalloc, xRealloc, and xFree methods must work like the +** malloc(), realloc() and free() functions from the standard C library. +** ^SQLite guarantees that the second argument to +** xRealloc is always a value returned by a prior call to xRoundup. ** ** xSize should return the allocated size of a memory allocation ** previously obtained from xMalloc or xRealloc. The allocated size @@ -957,6 +1292,9 @@ SQLITE_EXPERIMENTAL int sqlite3_db_config(sqlite3*, int op, ...); ** a memory allocation given a particular requested size. Most memory ** allocators round up memory allocations at least to the next multiple ** of 8. Some allocators round up to a larger multiple or to a power of 2. +** Every memory allocation request coming in through [sqlite3_malloc()] +** or [sqlite3_realloc()] first calls xRoundup. If xRoundup returns 0, +** that causes the corresponding memory allocation to fail. ** ** The xInit method initializes the memory allocator. (For example, ** it might allocate any require mutexes or initialize internal data @@ -964,6 +1302,20 @@ SQLITE_EXPERIMENTAL int sqlite3_db_config(sqlite3*, int op, ...); ** [sqlite3_shutdown()] and should deallocate any resources acquired ** by xInit. The pAppData pointer is used as the only parameter to ** xInit and xShutdown. +** +** SQLite holds the [SQLITE_MUTEX_STATIC_MASTER] mutex when it invokes +** the xInit method, so the xInit method need not be threadsafe. The +** xShutdown method is only called from [sqlite3_shutdown()] so it does +** not need to be threadsafe either. For all other methods, SQLite +** holds the [SQLITE_MUTEX_STATIC_MEM] mutex as long as the +** [SQLITE_CONFIG_MEMSTATUS] configuration option is turned on (which +** it is by default) and so the methods are automatically serialized. +** However, if [SQLITE_CONFIG_MEMSTATUS] is disabled, then the other +** methods must be threadsafe or else make their own arrangements for +** serialization. +** +** SQLite will never invoke xInit() more than once without an intervening +** call to xShutdown(). */ typedef struct sqlite3_mem_methods sqlite3_mem_methods; struct sqlite3_mem_methods { @@ -978,8 +1330,8 @@ struct sqlite3_mem_methods { }; /* -** CAPI3REF: Configuration Options {H10160} -** EXPERIMENTAL +** CAPI3REF: Configuration Options +** KEYWORDS: {configuration option} ** ** These constants are the available integer configuration options that ** can be passed as the first argument to the [sqlite3_config()] interface. @@ -992,23 +1344,34 @@ struct sqlite3_mem_methods { ** is invoked. ** **
    -**
    SQLITE_CONFIG_SINGLETHREAD
    -**
    There are no arguments to this option. This option disables +** [[SQLITE_CONFIG_SINGLETHREAD]]
    SQLITE_CONFIG_SINGLETHREAD
    +**
    There are no arguments to this option. ^This option sets the +** [threading mode] to Single-thread. In other words, it disables ** all mutexing and puts SQLite into a mode where it can only be used -** by a single thread.
    -** -**
    SQLITE_CONFIG_MULTITHREAD
    -**
    There are no arguments to this option. This option disables +** by a single thread. ^If SQLite is compiled with +** the [SQLITE_THREADSAFE | SQLITE_THREADSAFE=0] compile-time option then +** it is not possible to change the [threading mode] from its default +** value of Single-thread and so [sqlite3_config()] will return +** [SQLITE_ERROR] if called with the SQLITE_CONFIG_SINGLETHREAD +** configuration option.
    +** +** [[SQLITE_CONFIG_MULTITHREAD]]
    SQLITE_CONFIG_MULTITHREAD
    +**
    There are no arguments to this option. ^This option sets the +** [threading mode] to Multi-thread. In other words, it disables ** mutexing on [database connection] and [prepared statement] objects. ** The application is responsible for serializing access to ** [database connections] and [prepared statements]. But other mutexes ** are enabled so that SQLite will be safe to use in a multi-threaded ** environment as long as no two threads attempt to use the same -** [database connection] at the same time. See the [threading mode] -** documentation for additional information.
    -** -**
    SQLITE_CONFIG_SERIALIZED
    -**
    There are no arguments to this option. This option enables +** [database connection] at the same time. ^If SQLite is compiled with +** the [SQLITE_THREADSAFE | SQLITE_THREADSAFE=0] compile-time option then +** it is not possible to set the Multi-thread [threading mode] and +** [sqlite3_config()] will return [SQLITE_ERROR] if called with the +** SQLITE_CONFIG_MULTITHREAD configuration option.
    +** +** [[SQLITE_CONFIG_SERIALIZED]]
    SQLITE_CONFIG_SERIALIZED
    +**
    There are no arguments to this option. ^This option sets the +** [threading mode] to Serialized. In other words, this option enables ** all mutexes including the recursive ** mutexes on [database connection] and [prepared statement] objects. ** In this mode (which is the default when SQLite is compiled with @@ -1016,122 +1379,179 @@ struct sqlite3_mem_methods { ** to [database connections] and [prepared statements] so that the ** application is free to use the same [database connection] or the ** same [prepared statement] in different threads at the same time. -** See the [threading mode] documentation for additional information.
    -** -**
    SQLITE_CONFIG_MALLOC
    -**
    This option takes a single argument which is a pointer to an +** ^If SQLite is compiled with +** the [SQLITE_THREADSAFE | SQLITE_THREADSAFE=0] compile-time option then +** it is not possible to set the Serialized [threading mode] and +** [sqlite3_config()] will return [SQLITE_ERROR] if called with the +** SQLITE_CONFIG_SERIALIZED configuration option.
    +** +** [[SQLITE_CONFIG_MALLOC]]
    SQLITE_CONFIG_MALLOC
    +**
    ^(This option takes a single argument which is a pointer to an ** instance of the [sqlite3_mem_methods] structure. The argument specifies ** alternative low-level memory allocation routines to be used in place of -** the memory allocation routines built into SQLite.
    +** the memory allocation routines built into SQLite.)^ ^SQLite makes +** its own private copy of the content of the [sqlite3_mem_methods] structure +** before the [sqlite3_config()] call returns. ** -**
    SQLITE_CONFIG_GETMALLOC
    -**
    This option takes a single argument which is a pointer to an +** [[SQLITE_CONFIG_GETMALLOC]]
    SQLITE_CONFIG_GETMALLOC
    +**
    ^(This option takes a single argument which is a pointer to an ** instance of the [sqlite3_mem_methods] structure. The [sqlite3_mem_methods] -** structure is filled with the currently defined memory allocation routines. +** structure is filled with the currently defined memory allocation routines.)^ ** This option can be used to overload the default memory allocation ** routines with a wrapper that simulations memory allocation failure or -** tracks memory usage, for example.
    +** tracks memory usage, for example. ** -**
    SQLITE_CONFIG_MEMSTATUS
    -**
    This option takes single argument of type int, interpreted as a +** [[SQLITE_CONFIG_MEMSTATUS]]
    SQLITE_CONFIG_MEMSTATUS
    +**
    ^This option takes single argument of type int, interpreted as a ** boolean, which enables or disables the collection of memory allocation -** statistics. When disabled, the following SQLite interfaces become -** non-operational: +** statistics. ^(When memory allocation statistics are disabled, the +** following SQLite interfaces become non-operational: **
      **
    • [sqlite3_memory_used()] **
    • [sqlite3_memory_highwater()] -**
    • [sqlite3_soft_heap_limit()] +**
    • [sqlite3_soft_heap_limit64()] **
    • [sqlite3_status()] -**
    +** )^ +** ^Memory allocation statistics are enabled by default unless SQLite is +** compiled with [SQLITE_DEFAULT_MEMSTATUS]=0 in which case memory +** allocation statistics are disabled by default. **
    ** -**
    SQLITE_CONFIG_SCRATCH
    -**
    This option specifies a static memory buffer that SQLite can use for +** [[SQLITE_CONFIG_SCRATCH]]
    SQLITE_CONFIG_SCRATCH
    +**
    ^This option specifies a static memory buffer that SQLite can use for ** scratch memory. There are three arguments: A pointer an 8-byte -** aligned memory buffer from which the scrach allocations will be +** aligned memory buffer from which the scratch allocations will be ** drawn, the size of each scratch allocation (sz), ** and the maximum number of scratch allocations (N). The sz -** argument must be a multiple of 16. The sz parameter should be a few bytes -** larger than the actual scratch space required due to internal overhead. -** The first argument should pointer to an 8-byte aligned buffer +** argument must be a multiple of 16. +** The first argument must be a pointer to an 8-byte aligned buffer ** of at least sz*N bytes of memory. -** SQLite will use no more than one scratch buffer at once per thread, so -** N should be set to the expected maximum number of threads. The sz -** parameter should be 6 times the size of the largest database page size. -** Scratch buffers are used as part of the btree balance operation. If -** The btree balancer needs additional memory beyond what is provided by -** scratch buffers or if no scratch buffer space is specified, then SQLite -** goes to [sqlite3_malloc()] to obtain the memory it needs.
    -** -**
    SQLITE_CONFIG_PAGECACHE
    -**
    This option specifies a static memory buffer that SQLite can use for -** the database page cache with the default page cache implemenation. +** ^SQLite will use no more than two scratch buffers per thread. So +** N should be set to twice the expected maximum number of threads. +** ^SQLite will never require a scratch buffer that is more than 6 +** times the database page size. ^If SQLite needs needs additional +** scratch memory beyond what is provided by this configuration option, then +** [sqlite3_malloc()] will be used to obtain the memory needed.
    +** +** [[SQLITE_CONFIG_PAGECACHE]]
    SQLITE_CONFIG_PAGECACHE
    +**
    ^This option specifies a static memory buffer that SQLite can use for +** the database page cache with the default page cache implementation. ** This configuration should not be used if an application-define page -** cache implementation is loaded using the SQLITE_CONFIG_PCACHE option. +** cache implementation is loaded using the SQLITE_CONFIG_PCACHE2 option. ** There are three arguments to this option: A pointer to 8-byte aligned ** memory, the size of each page buffer (sz), and the number of pages (N). ** The sz argument should be the size of the largest database page ** (a power of two between 512 and 32768) plus a little extra for each -** page header. The page header size is 20 to 40 bytes depending on -** the host architecture. It is harmless, apart from the wasted memory, +** page header. ^The page header size is 20 to 40 bytes depending on +** the host architecture. ^It is harmless, apart from the wasted memory, ** to make sz a little too large. The first ** argument should point to an allocation of at least sz*N bytes of memory. -** SQLite will use the memory provided by the first argument to satisfy its -** memory needs for the first N pages that it adds to cache. If additional +** ^SQLite will use the memory provided by the first argument to satisfy its +** memory needs for the first N pages that it adds to cache. ^If additional ** page cache memory is needed beyond what is provided by this option, then ** SQLite goes to [sqlite3_malloc()] for the additional storage space. -** The implementation might use one or more of the N buffers to hold -** memory accounting information. The pointer in the first argument must +** The pointer in the first argument must ** be aligned to an 8-byte boundary or subsequent behavior of SQLite ** will be undefined.
    ** -**
    SQLITE_CONFIG_HEAP
    -**
    This option specifies a static memory buffer that SQLite will use +** [[SQLITE_CONFIG_HEAP]]
    SQLITE_CONFIG_HEAP
    +**
    ^This option specifies a static memory buffer that SQLite will use ** for all of its dynamic memory allocation needs beyond those provided ** for by [SQLITE_CONFIG_SCRATCH] and [SQLITE_CONFIG_PAGECACHE]. ** There are three arguments: An 8-byte aligned pointer to the memory, ** the number of bytes in the memory buffer, and the minimum allocation size. -** If the first pointer (the memory pointer) is NULL, then SQLite reverts +** ^If the first pointer (the memory pointer) is NULL, then SQLite reverts ** to using its default memory allocator (the system malloc() implementation), -** undoing any prior invocation of [SQLITE_CONFIG_MALLOC]. If the +** undoing any prior invocation of [SQLITE_CONFIG_MALLOC]. ^If the ** memory pointer is not NULL and either [SQLITE_ENABLE_MEMSYS3] or ** [SQLITE_ENABLE_MEMSYS5] are defined, then the alternative memory ** allocator is engaged to handle all of SQLites memory allocation needs. ** The first pointer (the memory pointer) must be aligned to an 8-byte -** boundary or subsequent behavior of SQLite will be undefined.
    +** boundary or subsequent behavior of SQLite will be undefined. +** The minimum allocation size is capped at 2**12. Reasonable values +** for the minimum allocation size are 2**5 through 2**8. ** -**
    SQLITE_CONFIG_MUTEX
    -**
    This option takes a single argument which is a pointer to an +** [[SQLITE_CONFIG_MUTEX]]
    SQLITE_CONFIG_MUTEX
    +**
    ^(This option takes a single argument which is a pointer to an ** instance of the [sqlite3_mutex_methods] structure. The argument specifies ** alternative low-level mutex routines to be used in place -** the mutex routines built into SQLite.
    -** -**
    SQLITE_CONFIG_GETMUTEX
    -**
    This option takes a single argument which is a pointer to an +** the mutex routines built into SQLite.)^ ^SQLite makes a copy of the +** content of the [sqlite3_mutex_methods] structure before the call to +** [sqlite3_config()] returns. ^If SQLite is compiled with +** the [SQLITE_THREADSAFE | SQLITE_THREADSAFE=0] compile-time option then +** the entire mutexing subsystem is omitted from the build and hence calls to +** [sqlite3_config()] with the SQLITE_CONFIG_MUTEX configuration option will +** return [SQLITE_ERROR].
    +** +** [[SQLITE_CONFIG_GETMUTEX]]
    SQLITE_CONFIG_GETMUTEX
    +**
    ^(This option takes a single argument which is a pointer to an ** instance of the [sqlite3_mutex_methods] structure. The ** [sqlite3_mutex_methods] -** structure is filled with the currently defined mutex routines. +** structure is filled with the currently defined mutex routines.)^ ** This option can be used to overload the default mutex allocation ** routines with a wrapper used to track mutex usage for performance -** profiling or testing, for example.
    -** -**
    SQLITE_CONFIG_LOOKASIDE
    -**
    This option takes two arguments that determine the default -** memory allcation lookaside optimization. The first argument is the +** profiling or testing, for example. ^If SQLite is compiled with +** the [SQLITE_THREADSAFE | SQLITE_THREADSAFE=0] compile-time option then +** the entire mutexing subsystem is omitted from the build and hence calls to +** [sqlite3_config()] with the SQLITE_CONFIG_GETMUTEX configuration option will +** return [SQLITE_ERROR].
    +** +** [[SQLITE_CONFIG_LOOKASIDE]]
    SQLITE_CONFIG_LOOKASIDE
    +**
    ^(This option takes two arguments that determine the default +** memory allocation for the lookaside memory allocator on each +** [database connection]. The first argument is the ** size of each lookaside buffer slot and the second is the number of -** slots allocated to each database connection.
    -** -**
    SQLITE_CONFIG_PCACHE
    -**
    This option takes a single argument which is a pointer to -** an [sqlite3_pcache_methods] object. This object specifies the interface -** to a custom page cache implementation. SQLite makes a copy of the +** slots allocated to each database connection.)^ ^(This option sets the +** default lookaside size. The [SQLITE_DBCONFIG_LOOKASIDE] +** verb to [sqlite3_db_config()] can be used to change the lookaside +** configuration on individual connections.)^
    +** +** [[SQLITE_CONFIG_PCACHE2]]
    SQLITE_CONFIG_PCACHE2
    +**
    ^(This option takes a single argument which is a pointer to +** an [sqlite3_pcache_methods2] object. This object specifies the interface +** to a custom page cache implementation.)^ ^SQLite makes a copy of the ** object and uses it for page cache memory allocations.
    ** -**
    SQLITE_CONFIG_GETPCACHE
    -**
    This option takes a single argument which is a pointer to an -** [sqlite3_pcache_methods] object. SQLite copies of the current -** page cache implementation into that object.
    -** +** [[SQLITE_CONFIG_GETPCACHE2]]
    SQLITE_CONFIG_GETPCACHE2
    +**
    ^(This option takes a single argument which is a pointer to an +** [sqlite3_pcache_methods2] object. SQLite copies of the current +** page cache implementation into that object.)^
    +** +** [[SQLITE_CONFIG_LOG]]
    SQLITE_CONFIG_LOG
    +**
    ^The SQLITE_CONFIG_LOG option takes two arguments: a pointer to a +** function with a call signature of void(*)(void*,int,const char*), +** and a pointer to void. ^If the function pointer is not NULL, it is +** invoked by [sqlite3_log()] to process each logging event. ^If the +** function pointer is NULL, the [sqlite3_log()] interface becomes a no-op. +** ^The void pointer that is the second argument to SQLITE_CONFIG_LOG is +** passed through as the first parameter to the application-defined logger +** function whenever that function is invoked. ^The second parameter to +** the logger function is a copy of the first parameter to the corresponding +** [sqlite3_log()] call and is intended to be a [result code] or an +** [extended result code]. ^The third parameter passed to the logger is +** log message after formatting via [sqlite3_snprintf()]. +** The SQLite logging interface is not reentrant; the logger function +** supplied by the application must not invoke any SQLite interface. +** In a multi-threaded application, the application-defined logger +** function must be threadsafe.
    +** +** [[SQLITE_CONFIG_URI]]
    SQLITE_CONFIG_URI +**
    This option takes a single argument of type int. If non-zero, then +** URI handling is globally enabled. If the parameter is zero, then URI handling +** is globally disabled. If URI handling is globally enabled, all filenames +** passed to [sqlite3_open()], [sqlite3_open_v2()], [sqlite3_open16()] or +** specified as part of [ATTACH] commands are interpreted as URIs, regardless +** of whether or not the [SQLITE_OPEN_URI] flag is set when the database +** connection is opened. If it is globally disabled, filenames are +** only interpreted as URIs if the SQLITE_OPEN_URI flag is set when the +** database connection is opened. By default, URI handling is globally +** disabled. The default value may be changed by compiling with the +** [SQLITE_USE_URI] symbol defined. +** +** [[SQLITE_CONFIG_PCACHE]] [[SQLITE_CONFIG_GETPCACHE]] +**
    SQLITE_CONFIG_PCACHE and SQLITE_CONFIG_GETPCACHE +**
    These options are obsolete and should not be used by new code. +** They are retained for backwards compatibility but are now no-ops. **
    */ #define SQLITE_CONFIG_SINGLETHREAD 1 /* nil */ @@ -1147,12 +1567,15 @@ struct sqlite3_mem_methods { #define SQLITE_CONFIG_GETMUTEX 11 /* sqlite3_mutex_methods* */ /* previously SQLITE_CONFIG_CHUNKALLOC 12 which is now unused. */ #define SQLITE_CONFIG_LOOKASIDE 13 /* int int */ -#define SQLITE_CONFIG_PCACHE 14 /* sqlite3_pcache_methods* */ -#define SQLITE_CONFIG_GETPCACHE 15 /* sqlite3_pcache_methods* */ +#define SQLITE_CONFIG_PCACHE 14 /* no-op */ +#define SQLITE_CONFIG_GETPCACHE 15 /* no-op */ +#define SQLITE_CONFIG_LOG 16 /* xFunc, void* */ +#define SQLITE_CONFIG_URI 17 /* int */ +#define SQLITE_CONFIG_PCACHE2 18 /* sqlite3_pcache_methods2* */ +#define SQLITE_CONFIG_GETPCACHE2 19 /* sqlite3_pcache_methods2* */ /* -** CAPI3REF: Configuration Options {H10170} -** EXPERIMENTAL +** CAPI3REF: Database Connection Configuration Options ** ** These constants are the available integer configuration options that ** can be passed as the second argument to the [sqlite3_db_config()] interface. @@ -1160,74 +1583,108 @@ struct sqlite3_mem_methods { ** New configuration options may be added in future releases of SQLite. ** Existing configuration options might be discontinued. Applications ** should check the return code from [sqlite3_db_config()] to make sure that -** the call worked. The [sqlite3_db_config()] interface will return a +** the call worked. ^The [sqlite3_db_config()] interface will return a ** non-zero [error code] if a discontinued or unsupported configuration option ** is invoked. ** **
    **
    SQLITE_DBCONFIG_LOOKASIDE
    -**
    This option takes three additional arguments that determine the +**
    ^This option takes three additional arguments that determine the ** [lookaside memory allocator] configuration for the [database connection]. -** The first argument (the third parameter to [sqlite3_db_config()] is a -** pointer to an 8-byte aligned memory buffer to use for lookaside memory. -** The first argument may be NULL in which case SQLite will allocate the -** lookaside buffer itself using [sqlite3_malloc()]. The second argument is the -** size of each lookaside buffer slot and the third argument is the number of +** ^The first argument (the third parameter to [sqlite3_db_config()] is a +** pointer to a memory buffer to use for lookaside memory. +** ^The first argument after the SQLITE_DBCONFIG_LOOKASIDE verb +** may be NULL in which case SQLite will allocate the +** lookaside buffer itself using [sqlite3_malloc()]. ^The second argument is the +** size of each lookaside buffer slot. ^The third argument is the number of ** slots. The size of the buffer in the first argument must be greater than -** or equal to the product of the second and third arguments.
    +** or equal to the product of the second and third arguments. The buffer +** must be aligned to an 8-byte boundary. ^If the second argument to +** SQLITE_DBCONFIG_LOOKASIDE is not a multiple of 8, it is internally +** rounded down to the next smaller multiple of 8. ^(The lookaside memory +** configuration for a database connection can only be changed when that +** connection is not currently using lookaside memory, or in other words +** when the "current value" returned by +** [sqlite3_db_status](D,[SQLITE_CONFIG_LOOKASIDE],...) is zero. +** Any attempt to change the lookaside memory configuration when lookaside +** memory is in use leaves the configuration unchanged and returns +** [SQLITE_BUSY].)^ +** +**
    SQLITE_DBCONFIG_ENABLE_FKEY
    +**
    ^This option is used to enable or disable the enforcement of +** [foreign key constraints]. There should be two additional arguments. +** The first argument is an integer which is 0 to disable FK enforcement, +** positive to enable FK enforcement or negative to leave FK enforcement +** unchanged. The second parameter is a pointer to an integer into which +** is written 0 or 1 to indicate whether FK enforcement is off or on +** following this call. The second parameter may be a NULL pointer, in +** which case the FK enforcement setting is not reported back.
    +** +**
    SQLITE_DBCONFIG_ENABLE_TRIGGER
    +**
    ^This option is used to enable or disable [CREATE TRIGGER | triggers]. +** There should be two additional arguments. +** The first argument is an integer which is 0 to disable triggers, +** positive to enable triggers or negative to leave the setting unchanged. +** The second parameter is a pointer to an integer into which +** is written 0 or 1 to indicate whether triggers are disabled or enabled +** following this call. The second parameter may be a NULL pointer, in +** which case the trigger setting is not reported back.
    ** **
    */ -#define SQLITE_DBCONFIG_LOOKASIDE 1001 /* void* int int */ +#define SQLITE_DBCONFIG_LOOKASIDE 1001 /* void* int int */ +#define SQLITE_DBCONFIG_ENABLE_FKEY 1002 /* int int* */ +#define SQLITE_DBCONFIG_ENABLE_TRIGGER 1003 /* int int* */ /* -** CAPI3REF: Enable Or Disable Extended Result Codes {H12200} -** -** The sqlite3_extended_result_codes() routine enables or disables the -** [extended result codes] feature of SQLite. The extended result -** codes are disabled by default for historical compatibility considerations. +** CAPI3REF: Enable Or Disable Extended Result Codes ** -** Requirements: -** [H12201] [H12202] +** ^The sqlite3_extended_result_codes() routine enables or disables the +** [extended result codes] feature of SQLite. ^The extended result +** codes are disabled by default for historical compatibility. */ -int sqlite3_extended_result_codes(sqlite3*, int onoff); +SQLITE_API int sqlite3_extended_result_codes(sqlite3*, int onoff); /* -** CAPI3REF: Last Insert Rowid {H12220} +** CAPI3REF: Last Insert Rowid ** -** Each entry in an SQLite table has a unique 64-bit signed -** integer key called the [ROWID | "rowid"]. The rowid is always available +** ^Each entry in an SQLite table has a unique 64-bit signed +** integer key called the [ROWID | "rowid"]. ^The rowid is always available ** as an undeclared column named ROWID, OID, or _ROWID_ as long as those -** names are not also used by explicitly declared columns. If +** names are not also used by explicitly declared columns. ^If ** the table has a column of type [INTEGER PRIMARY KEY] then that column ** is another alias for the rowid. ** -** This routine returns the [rowid] of the most recent +** ^This routine returns the [rowid] of the most recent ** successful [INSERT] into the database from the [database connection] -** in the first argument. If no successful [INSERT]s +** in the first argument. ^As of SQLite version 3.7.7, this routines +** records the last insert rowid of both ordinary tables and [virtual tables]. +** ^If no successful [INSERT]s ** have ever occurred on that database connection, zero is returned. ** -** If an [INSERT] occurs within a trigger, then the [rowid] of the inserted -** row is returned by this routine as long as the trigger is running. -** But once the trigger terminates, the value returned by this routine -** reverts to the last value inserted before the trigger fired. +** ^(If an [INSERT] occurs within a trigger or within a [virtual table] +** method, then this routine will return the [rowid] of the inserted +** row as long as the trigger or virtual table method is running. +** But once the trigger or virtual table method ends, the value returned +** by this routine reverts to what it was before the trigger or virtual +** table method began.)^ ** -** An [INSERT] that fails due to a constraint violation is not a +** ^An [INSERT] that fails due to a constraint violation is not a ** successful [INSERT] and does not change the value returned by this -** routine. Thus INSERT OR FAIL, INSERT OR IGNORE, INSERT OR ROLLBACK, +** routine. ^Thus INSERT OR FAIL, INSERT OR IGNORE, INSERT OR ROLLBACK, ** and INSERT OR ABORT make no changes to the return value of this -** routine when their insertion fails. When INSERT OR REPLACE +** routine when their insertion fails. ^(When INSERT OR REPLACE ** encounters a constraint violation, it does not fail. The ** INSERT continues to completion after deleting rows that caused ** the constraint problem so INSERT OR REPLACE will always change -** the return value of this interface. +** the return value of this interface.)^ ** -** For the purposes of this routine, an [INSERT] is considered to +** ^For the purposes of this routine, an [INSERT] is considered to ** be successful even if it is subsequently rolled back. ** -** Requirements: -** [H12221] [H12223] +** This function is accessible to SQL statements via the +** [last_insert_rowid() SQL function]. ** ** If a separate thread performs a new [INSERT] on the same ** database connection while the [sqlite3_last_insert_rowid()] @@ -1236,27 +1693,28 @@ int sqlite3_extended_result_codes(sqlite3*, int onoff); ** unpredictable and might not equal either the old or the new ** last insert [rowid]. */ -sqlite3_int64 sqlite3_last_insert_rowid(sqlite3*); +SQLITE_API sqlite3_int64 sqlite3_last_insert_rowid(sqlite3*); /* -** CAPI3REF: Count The Number Of Rows Modified {H12240} +** CAPI3REF: Count The Number Of Rows Modified ** -** This function returns the number of database rows that were changed +** ^This function returns the number of database rows that were changed ** or inserted or deleted by the most recently completed SQL statement ** on the [database connection] specified by the first parameter. -** Only changes that are directly specified by the [INSERT], [UPDATE], +** ^(Only changes that are directly specified by the [INSERT], [UPDATE], ** or [DELETE] statement are counted. Auxiliary changes caused by -** triggers are not counted. Use the [sqlite3_total_changes()] function -** to find the total number of changes including changes caused by triggers. +** triggers or [foreign key actions] are not counted.)^ Use the +** [sqlite3_total_changes()] function to find the total number of changes +** including changes caused by triggers and foreign key actions. ** -** Changes to a view that are simulated by an [INSTEAD OF trigger] +** ^Changes to a view that are simulated by an [INSTEAD OF trigger] ** are not counted. Only real table changes are counted. ** -** A "row change" is a change to a single row of a single table +** ^(A "row change" is a change to a single row of a single table ** caused by an INSERT, DELETE, or UPDATE statement. Rows that ** are changed as side effects of [REPLACE] constraint resolution, ** rollback, ABORT processing, [DROP TABLE], or by any other -** mechanisms do not count as direct row changes. +** mechanisms do not count as direct row changes.)^ ** ** A "trigger context" is a scope of execution that begins and ** ends with the script of a [CREATE TRIGGER | trigger]. @@ -1266,132 +1724,122 @@ sqlite3_int64 sqlite3_last_insert_rowid(sqlite3*); ** new trigger context is entered for the duration of that one ** trigger. Subtriggers create subcontexts for their duration. ** -** Calling [sqlite3_exec()] or [sqlite3_step()] recursively does +** ^Calling [sqlite3_exec()] or [sqlite3_step()] recursively does ** not create a new trigger context. ** -** This function returns the number of direct row changes in the +** ^This function returns the number of direct row changes in the ** most recent INSERT, UPDATE, or DELETE statement within the same ** trigger context. ** -** Thus, when called from the top level, this function returns the +** ^Thus, when called from the top level, this function returns the ** number of changes in the most recent INSERT, UPDATE, or DELETE -** that also occurred at the top level. Within the body of a trigger, +** that also occurred at the top level. ^(Within the body of a trigger, ** the sqlite3_changes() interface can be called to find the number of ** changes in the most recently completed INSERT, UPDATE, or DELETE ** statement within the body of the same trigger. ** However, the number returned does not include changes -** caused by subtriggers since those have their own context. +** caused by subtriggers since those have their own context.)^ ** -** See also the [sqlite3_total_changes()] interface and the -** [count_changes pragma]. -** -** Requirements: -** [H12241] [H12243] +** See also the [sqlite3_total_changes()] interface, the +** [count_changes pragma], and the [changes() SQL function]. ** ** If a separate thread makes changes on the same database connection ** while [sqlite3_changes()] is running then the value returned ** is unpredictable and not meaningful. */ -int sqlite3_changes(sqlite3*); +SQLITE_API int sqlite3_changes(sqlite3*); /* -** CAPI3REF: Total Number Of Rows Modified {H12260} +** CAPI3REF: Total Number Of Rows Modified ** -** This function returns the number of row changes caused by [INSERT], +** ^This function returns the number of row changes caused by [INSERT], ** [UPDATE] or [DELETE] statements since the [database connection] was opened. -** The count includes all changes from all -** [CREATE TRIGGER | trigger] contexts. However, +** ^(The count returned by sqlite3_total_changes() includes all changes +** from all [CREATE TRIGGER | trigger] contexts and changes made by +** [foreign key actions]. However, ** the count does not include changes used to implement [REPLACE] constraints, ** do rollbacks or ABORT processing, or [DROP TABLE] processing. The ** count does not include rows of views that fire an [INSTEAD OF trigger], ** though if the INSTEAD OF trigger makes changes of its own, those changes -** are counted. -** The changes are counted as soon as the statement that makes them is -** completed (when the statement handle is passed to [sqlite3_reset()] or -** [sqlite3_finalize()]). -** -** See also the [sqlite3_changes()] interface and the -** [count_changes pragma]. +** are counted.)^ +** ^The sqlite3_total_changes() function counts the changes as soon as +** the statement that makes them is completed (when the statement handle +** is passed to [sqlite3_reset()] or [sqlite3_finalize()]). ** -** Requirements: -** [H12261] [H12263] +** See also the [sqlite3_changes()] interface, the +** [count_changes pragma], and the [total_changes() SQL function]. ** ** If a separate thread makes changes on the same database connection ** while [sqlite3_total_changes()] is running then the value ** returned is unpredictable and not meaningful. */ -int sqlite3_total_changes(sqlite3*); +SQLITE_API int sqlite3_total_changes(sqlite3*); /* -** CAPI3REF: Interrupt A Long-Running Query {H12270} +** CAPI3REF: Interrupt A Long-Running Query ** -** This function causes any pending database operation to abort and +** ^This function causes any pending database operation to abort and ** return at its earliest opportunity. This routine is typically ** called in response to a user action such as pressing "Cancel" ** or Ctrl-C where the user wants a long query operation to halt ** immediately. ** -** It is safe to call this routine from a thread different from the +** ^It is safe to call this routine from a thread different from the ** thread that is currently running the database operation. But it ** is not safe to call this routine with a [database connection] that ** is closed or might close before sqlite3_interrupt() returns. ** -** If an SQL operation is very nearly finished at the time when +** ^If an SQL operation is very nearly finished at the time when ** sqlite3_interrupt() is called, then it might not have an opportunity ** to be interrupted and might continue to completion. ** -** An SQL operation that is interrupted will return [SQLITE_INTERRUPT]. -** If the interrupted SQL operation is an INSERT, UPDATE, or DELETE +** ^An SQL operation that is interrupted will return [SQLITE_INTERRUPT]. +** ^If the interrupted SQL operation is an INSERT, UPDATE, or DELETE ** that is inside an explicit transaction, then the entire transaction ** will be rolled back automatically. ** -** The sqlite3_interrupt(D) call is in effect until all currently running -** SQL statements on [database connection] D complete. Any new SQL statements +** ^The sqlite3_interrupt(D) call is in effect until all currently running +** SQL statements on [database connection] D complete. ^Any new SQL statements ** that are started after the sqlite3_interrupt() call and before the ** running statements reaches zero are interrupted as if they had been -** running prior to the sqlite3_interrupt() call. New SQL statements +** running prior to the sqlite3_interrupt() call. ^New SQL statements ** that are started after the running statement count reaches zero are ** not effected by the sqlite3_interrupt(). -** A call to sqlite3_interrupt(D) that occurs when there are no running +** ^A call to sqlite3_interrupt(D) that occurs when there are no running ** SQL statements is a no-op and has no effect on SQL statements ** that are started after the sqlite3_interrupt() call returns. ** -** Requirements: -** [H12271] [H12272] -** ** If the database connection closes while [sqlite3_interrupt()] ** is running then bad things will likely happen. */ -void sqlite3_interrupt(sqlite3*); +SQLITE_API void sqlite3_interrupt(sqlite3*); /* -** CAPI3REF: Determine If An SQL Statement Is Complete {H10510} +** CAPI3REF: Determine If An SQL Statement Is Complete ** ** These routines are useful during command-line input to determine if the ** currently entered text seems to form a complete SQL statement or ** if additional input is needed before sending the text into -** SQLite for parsing. These routines return 1 if the input string -** appears to be a complete SQL statement. A statement is judged to be +** SQLite for parsing. ^These routines return 1 if the input string +** appears to be a complete SQL statement. ^A statement is judged to be ** complete if it ends with a semicolon token and is not a prefix of a -** well-formed CREATE TRIGGER statement. Semicolons that are embedded within +** well-formed CREATE TRIGGER statement. ^Semicolons that are embedded within ** string literals or quoted identifier names or comments are not ** independent tokens (they are part of the token in which they are -** embedded) and thus do not count as a statement terminator. Whitespace +** embedded) and thus do not count as a statement terminator. ^Whitespace ** and comments that follow the final semicolon are ignored. ** -** These routines return 0 if the statement is incomplete. If a +** ^These routines return 0 if the statement is incomplete. ^If a ** memory allocation fails, then SQLITE_NOMEM is returned. ** -** These routines do not parse the SQL statements thus +** ^These routines do not parse the SQL statements thus ** will not detect syntactically incorrect SQL. ** -** If SQLite has not been initialized using [sqlite3_initialize()] prior +** ^(If SQLite has not been initialized using [sqlite3_initialize()] prior ** to invoking sqlite3_complete16() then sqlite3_initialize() is invoked ** automatically by sqlite3_complete16(). If that initialization fails, ** then the return value from sqlite3_complete16() will be non-zero -** regardless of whether or not the input SQL is complete. -** -** Requirements: [H10511] [H10512] +** regardless of whether or not the input SQL is complete.)^ ** ** The input to [sqlite3_complete()] must be a zero-terminated ** UTF-8 string. @@ -1399,31 +1847,31 @@ void sqlite3_interrupt(sqlite3*); ** The input to [sqlite3_complete16()] must be a zero-terminated ** UTF-16 string in native byte order. */ -int sqlite3_complete(const char *sql); -int sqlite3_complete16(const void *sql); +SQLITE_API int sqlite3_complete(const char *sql); +SQLITE_API int sqlite3_complete16(const void *sql); /* -** CAPI3REF: Register A Callback To Handle SQLITE_BUSY Errors {H12310} +** CAPI3REF: Register A Callback To Handle SQLITE_BUSY Errors ** -** This routine sets a callback function that might be invoked whenever +** ^This routine sets a callback function that might be invoked whenever ** an attempt is made to open a database table that another thread ** or process has locked. ** -** If the busy callback is NULL, then [SQLITE_BUSY] or [SQLITE_IOERR_BLOCKED] -** is returned immediately upon encountering the lock. If the busy callback -** is not NULL, then the callback will be invoked with two arguments. +** ^If the busy callback is NULL, then [SQLITE_BUSY] or [SQLITE_IOERR_BLOCKED] +** is returned immediately upon encountering the lock. ^If the busy callback +** is not NULL, then the callback might be invoked with two arguments. ** -** The first argument to the handler is a copy of the void* pointer which -** is the third argument to sqlite3_busy_handler(). The second argument to -** the handler callback is the number of times that the busy handler has -** been invoked for this locking event. If the +** ^The first argument to the busy handler is a copy of the void* pointer which +** is the third argument to sqlite3_busy_handler(). ^The second argument to +** the busy handler callback is the number of times that the busy handler has +** been invoked for this locking event. ^If the ** busy callback returns 0, then no additional attempts are made to ** access the database and [SQLITE_BUSY] or [SQLITE_IOERR_BLOCKED] is returned. -** If the callback returns non-zero, then another attempt +** ^If the callback returns non-zero, then another attempt ** is made to open the database for reading and the cycle repeats. ** ** The presence of a busy handler does not guarantee that it will be invoked -** when there is lock contention. If SQLite determines that invoking the busy +** when there is lock contention. ^If SQLite determines that invoking the busy ** handler could result in a deadlock, it will go ahead and return [SQLITE_BUSY] ** or [SQLITE_IOERR_BLOCKED] instead of invoking the busy handler. ** Consider a scenario where one process is holding a read lock that @@ -1437,65 +1885,62 @@ int sqlite3_complete16(const void *sql); ** will induce the first process to release its read lock and allow ** the second process to proceed. ** -** The default busy callback is NULL. +** ^The default busy callback is NULL. ** -** The [SQLITE_BUSY] error is converted to [SQLITE_IOERR_BLOCKED] +** ^The [SQLITE_BUSY] error is converted to [SQLITE_IOERR_BLOCKED] ** when SQLite is in the middle of a large transaction where all the ** changes will not fit into the in-memory cache. SQLite will ** already hold a RESERVED lock on the database file, but it needs ** to promote this lock to EXCLUSIVE so that it can spill cache ** pages into the database file without harm to concurrent -** readers. If it is unable to promote the lock, then the in-memory +** readers. ^If it is unable to promote the lock, then the in-memory ** cache will be left in an inconsistent state and so the error ** code is promoted from the relatively benign [SQLITE_BUSY] to -** the more severe [SQLITE_IOERR_BLOCKED]. This error code promotion +** the more severe [SQLITE_IOERR_BLOCKED]. ^This error code promotion ** forces an automatic rollback of the changes. See the ** ** CorruptionFollowingBusyError wiki page for a discussion of why ** this is important. ** -** There can only be a single busy handler defined for each +** ^(There can only be a single busy handler defined for each ** [database connection]. Setting a new busy handler clears any -** previously set handler. Note that calling [sqlite3_busy_timeout()] +** previously set handler.)^ ^Note that calling [sqlite3_busy_timeout()] ** will also set or clear the busy handler. ** ** The busy callback should not take any actions which modify the ** database connection that invoked the busy handler. Any such actions ** result in undefined behavior. ** -** Requirements: -** [H12311] [H12312] [H12314] [H12316] [H12318] -** ** A busy handler must not close the database connection ** or [prepared statement] that invoked the busy handler. */ -int sqlite3_busy_handler(sqlite3*, int(*)(void*,int), void*); +SQLITE_API int sqlite3_busy_handler(sqlite3*, int(*)(void*,int), void*); /* -** CAPI3REF: Set A Busy Timeout {H12340} +** CAPI3REF: Set A Busy Timeout ** -** This routine sets a [sqlite3_busy_handler | busy handler] that sleeps -** for a specified amount of time when a table is locked. The handler +** ^This routine sets a [sqlite3_busy_handler | busy handler] that sleeps +** for a specified amount of time when a table is locked. ^The handler ** will sleep multiple times until at least "ms" milliseconds of sleeping -** have accumulated. {H12343} After "ms" milliseconds of sleeping, +** have accumulated. ^After at least "ms" milliseconds of sleeping, ** the handler returns 0 which causes [sqlite3_step()] to return ** [SQLITE_BUSY] or [SQLITE_IOERR_BLOCKED]. ** -** Calling this routine with an argument less than or equal to zero +** ^Calling this routine with an argument less than or equal to zero ** turns off all busy handlers. ** -** There can only be a single busy handler for a particular +** ^(There can only be a single busy handler for a particular ** [database connection] any any given moment. If another busy handler ** was defined (using [sqlite3_busy_handler()]) prior to calling -** this routine, that other busy handler is cleared. -** -** Requirements: -** [H12341] [H12343] [H12344] +** this routine, that other busy handler is cleared.)^ */ -int sqlite3_busy_timeout(sqlite3*, int ms); +SQLITE_API int sqlite3_busy_timeout(sqlite3*, int ms); /* -** CAPI3REF: Convenience Routines For Running Queries {H12370} +** CAPI3REF: Convenience Routines For Running Queries +** +** This is a legacy interface that is preserved for backwards compatibility. +** Use of this interface is not recommended. ** ** Definition: A result table is memory data structure created by the ** [sqlite3_get_table()] interface. A result table records the @@ -1517,7 +1962,7 @@ int sqlite3_busy_timeout(sqlite3*, int ms); ** It is not safe to pass a result table directly to [sqlite3_free()]. ** A result table should be deallocated using [sqlite3_free_table()]. ** -** As an example of the result table format, suppose a query result +** ^(As an example of the result table format, suppose a query result ** is as follows: ** **
    @@ -1541,15 +1986,15 @@ int sqlite3_busy_timeout(sqlite3*, int ms);
     **        azResult[5] = "28";
     **        azResult[6] = "Cindy";
     **        azResult[7] = "21";
    -** 
    +** )^ ** -** The sqlite3_get_table() function evaluates one or more +** ^The sqlite3_get_table() function evaluates one or more ** semicolon-separated SQL statements in the zero-terminated UTF-8 -** string of its 2nd parameter. It returns a result table to the +** string of its 2nd parameter and returns a result table to the ** pointer given in its 3rd parameter. ** -** After the calling function has finished using the result, it should -** pass the pointer to the result table to sqlite3_free_table() in order to +** After the application has finished with the result from sqlite3_get_table(), +** it must pass the result table pointer to sqlite3_free_table() in order to ** release the memory that was malloced. Because of the way the ** [sqlite3_malloc()] happens within sqlite3_get_table(), the calling ** function must not try to call [sqlite3_free()] directly. Only @@ -1560,12 +2005,10 @@ int sqlite3_busy_timeout(sqlite3*, int ms); ** to any internal data structures of SQLite. It uses only the public ** interface defined here. As a consequence, errors that occur in the ** wrapper layer outside of the internal [sqlite3_exec()] call are not -** reflected in subsequent calls to [sqlite3_errcode()] or [sqlite3_errmsg()]. -** -** Requirements: -** [H12371] [H12373] [H12374] [H12376] [H12379] [H12382] +** reflected in subsequent calls to [sqlite3_errcode()] or +** [sqlite3_errmsg()]. */ -int sqlite3_get_table( +SQLITE_API int sqlite3_get_table( sqlite3 *db, /* An open database */ const char *zSql, /* SQL to be evaluated */ char ***pazResult, /* Results of the query */ @@ -1573,48 +2016,50 @@ int sqlite3_get_table( int *pnColumn, /* Number of result columns written here */ char **pzErrmsg /* Error msg written here */ ); -void sqlite3_free_table(char **result); +SQLITE_API void sqlite3_free_table(char **result); /* -** CAPI3REF: Formatted String Printing Functions {H17400} +** CAPI3REF: Formatted String Printing Functions ** -** These routines are workalikes of the "printf()" family of functions +** These routines are work-alikes of the "printf()" family of functions ** from the standard C library. ** -** The sqlite3_mprintf() and sqlite3_vmprintf() routines write their +** ^The sqlite3_mprintf() and sqlite3_vmprintf() routines write their ** results into memory obtained from [sqlite3_malloc()]. ** The strings returned by these two routines should be -** released by [sqlite3_free()]. Both routines return a +** released by [sqlite3_free()]. ^Both routines return a ** NULL pointer if [sqlite3_malloc()] is unable to allocate enough ** memory to hold the resulting string. ** -** In sqlite3_snprintf() routine is similar to "snprintf()" from +** ^(The sqlite3_snprintf() routine is similar to "snprintf()" from ** the standard C library. The result is written into the ** buffer supplied as the second parameter whose size is given by ** the first parameter. Note that the order of the -** first two parameters is reversed from snprintf(). This is an +** first two parameters is reversed from snprintf().)^ This is an ** historical accident that cannot be fixed without breaking -** backwards compatibility. Note also that sqlite3_snprintf() +** backwards compatibility. ^(Note also that sqlite3_snprintf() ** returns a pointer to its buffer instead of the number of -** characters actually written into the buffer. We admit that +** characters actually written into the buffer.)^ We admit that ** the number of characters written would be a more useful return ** value but we cannot change the implementation of sqlite3_snprintf() ** now without breaking compatibility. ** -** As long as the buffer size is greater than zero, sqlite3_snprintf() -** guarantees that the buffer is always zero-terminated. The first +** ^As long as the buffer size is greater than zero, sqlite3_snprintf() +** guarantees that the buffer is always zero-terminated. ^The first ** parameter "n" is the total size of the buffer, including space for ** the zero terminator. So the longest string that can be completely ** written will be n-1 characters. ** +** ^The sqlite3_vsnprintf() routine is a varargs version of sqlite3_snprintf(). +** ** These routines all implement some additional formatting ** options that are useful for constructing SQL statements. ** All of the usual printf() formatting options apply. In addition, there ** is are "%q", "%Q", and "%z" options. ** -** The %q option works like %s in that it substitutes a null-terminated +** ^(The %q option works like %s in that it substitutes a nul-terminated ** string from the argument list. But %q also doubles every '\'' character. -** %q is designed for use inside a string literal. By doubling each '\'' +** %q is designed for use inside a string literal.)^ By doubling each '\'' ** character it escapes that character and allows it to be inserted into ** the string. ** @@ -1649,10 +2094,10 @@ void sqlite3_free_table(char **result); ** This second example is an SQL syntax error. As a general rule you should ** always use %q instead of %s when inserting text into a string literal. ** -** The %Q option works like %q except it also adds single quotes around +** ^(The %Q option works like %q except it also adds single quotes around ** the outside of the total string. Additionally, if the parameter in the ** argument list is a NULL pointer, %Q substitutes the text "NULL" (without -** single quotes) in place of the %Q option. So, for example, one could say: +** single quotes).)^ So, for example, one could say: ** **
     **  char *zSQL = sqlite3_mprintf("INSERT INTO table VALUES(%Q)", zText);
    @@ -1663,35 +2108,33 @@ void sqlite3_free_table(char **result);
     ** The code above will render a correct SQL statement in the zSQL
     ** variable even if the zText variable is a NULL pointer.
     **
    -** The "%z" formatting option works exactly like "%s" with the
    +** ^(The "%z" formatting option works like "%s" but with the
     ** addition that after the string has been read and copied into
    -** the result, [sqlite3_free()] is called on the input string. {END}
    -**
    -** Requirements:
    -** [H17403] [H17406] [H17407]
    +** the result, [sqlite3_free()] is called on the input string.)^
     */
    -char *sqlite3_mprintf(const char*,...);
    -char *sqlite3_vmprintf(const char*, va_list);
    -char *sqlite3_snprintf(int,char*,const char*, ...);
    +SQLITE_API char *sqlite3_mprintf(const char*,...);
    +SQLITE_API char *sqlite3_vmprintf(const char*, va_list);
    +SQLITE_API char *sqlite3_snprintf(int,char*,const char*, ...);
    +SQLITE_API char *sqlite3_vsnprintf(int,char*,const char*, va_list);
     
     /*
    -** CAPI3REF: Memory Allocation Subsystem {H17300} 
    +** CAPI3REF: Memory Allocation Subsystem
     **
    -** The SQLite core  uses these three routines for all of its own
    +** The SQLite core uses these three routines for all of its own
     ** internal memory allocation needs. "Core" in the previous sentence
     ** does not include operating-system specific VFS implementation.  The
     ** Windows VFS uses native malloc() and free() for some operations.
     **
    -** The sqlite3_malloc() routine returns a pointer to a block
    +** ^The sqlite3_malloc() routine returns a pointer to a block
     ** of memory at least N bytes in length, where N is the parameter.
    -** If sqlite3_malloc() is unable to obtain sufficient free
    -** memory, it returns a NULL pointer.  If the parameter N to
    +** ^If sqlite3_malloc() is unable to obtain sufficient free
    +** memory, it returns a NULL pointer.  ^If the parameter N to
     ** sqlite3_malloc() is zero or negative then sqlite3_malloc() returns
     ** a NULL pointer.
     **
    -** Calling sqlite3_free() with a pointer previously returned
    +** ^Calling sqlite3_free() with a pointer previously returned
     ** by sqlite3_malloc() or sqlite3_realloc() releases that memory so
    -** that it might be reused.  The sqlite3_free() routine is
    +** that it might be reused.  ^The sqlite3_free() routine is
     ** a no-op if is called with a NULL pointer.  Passing a NULL pointer
     ** to sqlite3_free() is harmless.  After being freed, memory
     ** should neither be read nor written.  Even reading previously freed
    @@ -1700,52 +2143,41 @@ char *sqlite3_snprintf(int,char*,const char*, ...);
     ** might result if sqlite3_free() is called with a non-NULL pointer that
     ** was not obtained from sqlite3_malloc() or sqlite3_realloc().
     **
    -** The sqlite3_realloc() interface attempts to resize a
    +** ^(The sqlite3_realloc() interface attempts to resize a
     ** prior memory allocation to be at least N bytes, where N is the
     ** second parameter.  The memory allocation to be resized is the first
    -** parameter.  If the first parameter to sqlite3_realloc()
    +** parameter.)^ ^ If the first parameter to sqlite3_realloc()
     ** is a NULL pointer then its behavior is identical to calling
     ** sqlite3_malloc(N) where N is the second parameter to sqlite3_realloc().
    -** If the second parameter to sqlite3_realloc() is zero or
    +** ^If the second parameter to sqlite3_realloc() is zero or
     ** negative then the behavior is exactly the same as calling
     ** sqlite3_free(P) where P is the first parameter to sqlite3_realloc().
    -** sqlite3_realloc() returns a pointer to a memory allocation
    +** ^sqlite3_realloc() returns a pointer to a memory allocation
     ** of at least N bytes in size or NULL if sufficient memory is unavailable.
    -** If M is the size of the prior allocation, then min(N,M) bytes
    +** ^If M is the size of the prior allocation, then min(N,M) bytes
     ** of the prior allocation are copied into the beginning of buffer returned
     ** by sqlite3_realloc() and the prior allocation is freed.
    -** If sqlite3_realloc() returns NULL, then the prior allocation
    +** ^If sqlite3_realloc() returns NULL, then the prior allocation
     ** is not freed.
     **
    -** The memory returned by sqlite3_malloc() and sqlite3_realloc()
    -** is always aligned to at least an 8 byte boundary. {END}
    -**
    -** The default implementation of the memory allocation subsystem uses
    -** the malloc(), realloc() and free() provided by the standard C library.
    -** {H17382} However, if SQLite is compiled with the
    -** SQLITE_MEMORY_SIZE=NNN C preprocessor macro (where NNN
    -** is an integer), then SQLite create a static array of at least
    -** NNN bytes in size and uses that array for all of its dynamic
    -** memory allocation needs. {END}  Additional memory allocator options
    -** may be added in future releases.
    +** ^The memory returned by sqlite3_malloc() and sqlite3_realloc()
    +** is always aligned to at least an 8 byte boundary, or to a
    +** 4 byte boundary if the [SQLITE_4_BYTE_ALIGNED_MALLOC] compile-time
    +** option is used.
     **
     ** In SQLite version 3.5.0 and 3.5.1, it was possible to define
     ** the SQLITE_OMIT_MEMORY_ALLOCATION which would cause the built-in
     ** implementation of these routines to be omitted.  That capability
     ** is no longer provided.  Only built-in memory allocators can be used.
     **
    -** The Windows OS interface layer calls
    +** Prior to SQLite version 3.7.10, the Windows OS interface layer called
     ** the system malloc() and free() directly when converting
     ** filenames between the UTF-8 encoding used by SQLite
     ** and whatever filename encoding is used by the particular Windows
    -** installation.  Memory allocation errors are detected, but
    -** they are reported back as [SQLITE_CANTOPEN] or
    +** installation.  Memory allocation errors were detected, but
    +** they were reported back as [SQLITE_CANTOPEN] or
     ** [SQLITE_IOERR] rather than [SQLITE_NOMEM].
     **
    -** Requirements:
    -** [H17303] [H17304] [H17305] [H17306] [H17310] [H17312] [H17315] [H17318]
    -** [H17321] [H17322] [H17323]
    -**
     ** The pointer arguments to [sqlite3_free()] and [sqlite3_realloc()]
     ** must be either NULL or else pointers obtained from a prior
     ** invocation of [sqlite3_malloc()] or [sqlite3_realloc()] that have
    @@ -1755,25 +2187,38 @@ char *sqlite3_snprintf(int,char*,const char*, ...);
     ** a block of memory after it has been released using
     ** [sqlite3_free()] or [sqlite3_realloc()].
     */
    -void *sqlite3_malloc(int);
    -void *sqlite3_realloc(void*, int);
    -void sqlite3_free(void*);
    +SQLITE_API void *sqlite3_malloc(int);
    +SQLITE_API void *sqlite3_realloc(void*, int);
    +SQLITE_API void sqlite3_free(void*);
     
     /*
    -** CAPI3REF: Memory Allocator Statistics {H17370} 
    +** CAPI3REF: Memory Allocator Statistics
     **
     ** SQLite provides these two interfaces for reporting on the status
     ** of the [sqlite3_malloc()], [sqlite3_free()], and [sqlite3_realloc()]
     ** routines, which form the built-in memory allocation subsystem.
     **
    -** Requirements:
    -** [H17371] [H17373] [H17374] [H17375]
    +** ^The [sqlite3_memory_used()] routine returns the number of bytes
    +** of memory currently outstanding (malloced but not freed).
    +** ^The [sqlite3_memory_highwater()] routine returns the maximum
    +** value of [sqlite3_memory_used()] since the high-water mark
    +** was last reset.  ^The values returned by [sqlite3_memory_used()] and
    +** [sqlite3_memory_highwater()] include any overhead
    +** added by SQLite in its implementation of [sqlite3_malloc()],
    +** but not overhead added by the any underlying system library
    +** routines that [sqlite3_malloc()] may call.
    +**
    +** ^The memory high-water mark is reset to the current value of
    +** [sqlite3_memory_used()] if and only if the parameter to
    +** [sqlite3_memory_highwater()] is true.  ^The value returned
    +** by [sqlite3_memory_highwater(1)] is the high-water mark
    +** prior to the reset.
     */
    -sqlite3_int64 sqlite3_memory_used(void);
    -sqlite3_int64 sqlite3_memory_highwater(int resetFlag);
    +SQLITE_API sqlite3_int64 sqlite3_memory_used(void);
    +SQLITE_API sqlite3_int64 sqlite3_memory_highwater(int resetFlag);
     
     /*
    -** CAPI3REF: Pseudo-Random Number Generator {H17390} 
    +** CAPI3REF: Pseudo-Random Number Generator
     **
     ** SQLite contains a high-quality pseudo-random number generator (PRNG) used to
     ** select random [ROWID | ROWIDs] when inserting new records into a table that
    @@ -1781,60 +2226,57 @@ sqlite3_int64 sqlite3_memory_highwater(int resetFlag);
     ** the build-in random() and randomblob() SQL functions.  This interface allows
     ** applications to access the same PRNG for other purposes.
     **
    -** A call to this routine stores N bytes of randomness into buffer P.
    +** ^A call to this routine stores N bytes of randomness into buffer P.
     **
    -** The first time this routine is invoked (either internally or by
    +** ^The first time this routine is invoked (either internally or by
     ** the application) the PRNG is seeded using randomness obtained
     ** from the xRandomness method of the default [sqlite3_vfs] object.
    -** On all subsequent invocations, the pseudo-randomness is generated
    +** ^On all subsequent invocations, the pseudo-randomness is generated
     ** internally and without recourse to the [sqlite3_vfs] xRandomness
     ** method.
    -**
    -** Requirements:
    -** [H17392]
     */
    -void sqlite3_randomness(int N, void *P);
    +SQLITE_API void sqlite3_randomness(int N, void *P);
     
     /*
    -** CAPI3REF: Compile-Time Authorization Callbacks {H12500} 
    +** CAPI3REF: Compile-Time Authorization Callbacks
     **
    -** This routine registers a authorizer callback with a particular
    +** ^This routine registers an authorizer callback with a particular
     ** [database connection], supplied in the first argument.
    -** The authorizer callback is invoked as SQL statements are being compiled
    +** ^The authorizer callback is invoked as SQL statements are being compiled
     ** by [sqlite3_prepare()] or its variants [sqlite3_prepare_v2()],
    -** [sqlite3_prepare16()] and [sqlite3_prepare16_v2()].  At various
    +** [sqlite3_prepare16()] and [sqlite3_prepare16_v2()].  ^At various
     ** points during the compilation process, as logic is being created
     ** to perform various actions, the authorizer callback is invoked to
    -** see if those actions are allowed.  The authorizer callback should
    +** see if those actions are allowed.  ^The authorizer callback should
     ** return [SQLITE_OK] to allow the action, [SQLITE_IGNORE] to disallow the
     ** specific action but allow the SQL statement to continue to be
     ** compiled, or [SQLITE_DENY] to cause the entire SQL statement to be
    -** rejected with an error.  If the authorizer callback returns
    +** rejected with an error.  ^If the authorizer callback returns
     ** any value other than [SQLITE_IGNORE], [SQLITE_OK], or [SQLITE_DENY]
     ** then the [sqlite3_prepare_v2()] or equivalent call that triggered
     ** the authorizer will fail with an error message.
     **
     ** When the callback returns [SQLITE_OK], that means the operation
    -** requested is ok.  When the callback returns [SQLITE_DENY], the
    +** requested is ok.  ^When the callback returns [SQLITE_DENY], the
     ** [sqlite3_prepare_v2()] or equivalent call that triggered the
     ** authorizer will fail with an error message explaining that
     ** access is denied. 
     **
    -** The first parameter to the authorizer callback is a copy of the third
    -** parameter to the sqlite3_set_authorizer() interface. The second parameter
    +** ^The first parameter to the authorizer callback is a copy of the third
    +** parameter to the sqlite3_set_authorizer() interface. ^The second parameter
     ** to the callback is an integer [SQLITE_COPY | action code] that specifies
    -** the particular action to be authorized. The third through sixth parameters
    +** the particular action to be authorized. ^The third through sixth parameters
     ** to the callback are zero-terminated strings that contain additional
     ** details about the action to be authorized.
     **
    -** If the action code is [SQLITE_READ]
    +** ^If the action code is [SQLITE_READ]
     ** and the callback returns [SQLITE_IGNORE] then the
     ** [prepared statement] statement is constructed to substitute
     ** a NULL value in place of the table column that would have
     ** been read if [SQLITE_OK] had been returned.  The [SQLITE_IGNORE]
     ** return can be used to deny an untrusted user access to individual
     ** columns of a table.
    -** If the action code is [SQLITE_DELETE] and the callback returns
    +** ^If the action code is [SQLITE_DELETE] and the callback returns
     ** [SQLITE_IGNORE] then the [DELETE] operation proceeds but the
     ** [truncate optimization] is disabled and all rows are deleted individually.
     **
    @@ -1854,9 +2296,9 @@ void sqlite3_randomness(int N, void *P);
     ** and limiting database size using the [max_page_count] [PRAGMA]
     ** in addition to using an authorizer.
     **
    -** Only a single authorizer can be in place on a database connection
    +** ^(Only a single authorizer can be in place on a database connection
     ** at a time.  Each call to sqlite3_set_authorizer overrides the
    -** previous call.  Disable the authorizer by installing a NULL callback.
    +** previous call.)^  ^Disable the authorizer by installing a NULL callback.
     ** The authorizer is disabled by default.
     **
     ** The authorizer callback must not do anything that will modify
    @@ -1864,41 +2306,40 @@ void sqlite3_randomness(int N, void *P);
     ** Note that [sqlite3_prepare_v2()] and [sqlite3_step()] both modify their
     ** database connections for the meaning of "modify" in this paragraph.
     **
    -** When [sqlite3_prepare_v2()] is used to prepare a statement, the
    -** statement might be reprepared during [sqlite3_step()] due to a 
    +** ^When [sqlite3_prepare_v2()] is used to prepare a statement, the
    +** statement might be re-prepared during [sqlite3_step()] due to a 
     ** schema change.  Hence, the application should ensure that the
     ** correct authorizer callback remains in place during the [sqlite3_step()].
     **
    -** Note that the authorizer callback is invoked only during
    +** ^Note that the authorizer callback is invoked only during
     ** [sqlite3_prepare()] or its variants.  Authorization is not
     ** performed during statement evaluation in [sqlite3_step()], unless
     ** as stated in the previous paragraph, sqlite3_step() invokes
     ** sqlite3_prepare_v2() to reprepare a statement after a schema change.
    -**
    -** Requirements:
    -** [H12501] [H12502] [H12503] [H12504] [H12505] [H12506] [H12507] [H12510]
    -** [H12511] [H12512] [H12520] [H12521] [H12522]
     */
    -int sqlite3_set_authorizer(
    +SQLITE_API int sqlite3_set_authorizer(
       sqlite3*,
       int (*xAuth)(void*,int,const char*,const char*,const char*,const char*),
       void *pUserData
     );
     
     /*
    -** CAPI3REF: Authorizer Return Codes {H12590} 
    +** CAPI3REF: Authorizer Return Codes
     **
     ** The [sqlite3_set_authorizer | authorizer callback function] must
     ** return either [SQLITE_OK] or one of these two constants in order
     ** to signal SQLite whether or not the action is permitted.  See the
     ** [sqlite3_set_authorizer | authorizer documentation] for additional
     ** information.
    +**
    +** Note that SQLITE_IGNORE is also used as a [SQLITE_ROLLBACK | return code]
    +** from the [sqlite3_vtab_on_conflict()] interface.
     */
     #define SQLITE_DENY   1   /* Abort the SQL statement with an error */
     #define SQLITE_IGNORE 2   /* Don't allow access, but don't generate an error */
     
     /*
    -** CAPI3REF: Authorizer Action Codes {H12550} 
    +** CAPI3REF: Authorizer Action Codes
     **
     ** The [sqlite3_set_authorizer()] interface registers a callback function
     ** that is invoked to authorize certain SQL statement actions.  The
    @@ -1909,15 +2350,12 @@ int sqlite3_set_authorizer(
     ** These action code values signify what kind of operation is to be
     ** authorized.  The 3rd and 4th parameters to the authorization
     ** callback function will be parameters or NULL depending on which of these
    -** codes is used as the second parameter.  The 5th parameter to the
    +** codes is used as the second parameter.  ^(The 5th parameter to the
     ** authorizer callback is the name of the database ("main", "temp",
    -** etc.) if applicable.  The 6th parameter to the authorizer callback
    +** etc.) if applicable.)^  ^The 6th parameter to the authorizer callback
     ** is the name of the inner-most trigger or view that is responsible for
     ** the access attempt or NULL if this access attempt is directly from
     ** top-level SQL code.
    -**
    -** Requirements:
    -** [H12551] [H12552] [H12553] [H12554]
     */
     /******************************************* 3rd ************ 4th ***********/
     #define SQLITE_CREATE_INDEX          1   /* Index Name      Table Name      */
    @@ -1955,72 +2393,83 @@ int sqlite3_set_authorizer(
     #define SQLITE_COPY                  0   /* No longer used */
     
     /*
    -** CAPI3REF: Tracing And Profiling Functions {H12280} 
    -** EXPERIMENTAL
    +** CAPI3REF: Tracing And Profiling Functions
     **
     ** These routines register callback functions that can be used for
     ** tracing and profiling the execution of SQL statements.
     **
    -** The callback function registered by sqlite3_trace() is invoked at
    +** ^The callback function registered by sqlite3_trace() is invoked at
     ** various times when an SQL statement is being run by [sqlite3_step()].
    -** The callback returns a UTF-8 rendering of the SQL statement text
    -** as the statement first begins executing.  Additional callbacks occur
    +** ^The sqlite3_trace() callback is invoked with a UTF-8 rendering of the
    +** SQL statement text as the statement first begins executing.
    +** ^(Additional sqlite3_trace() callbacks might occur
     ** as each triggered subprogram is entered.  The callbacks for triggers
    -** contain a UTF-8 SQL comment that identifies the trigger.
    +** contain a UTF-8 SQL comment that identifies the trigger.)^
     **
    -** The callback function registered by sqlite3_profile() is invoked
    -** as each SQL statement finishes.  The profile callback contains
    +** ^The callback function registered by sqlite3_profile() is invoked
    +** as each SQL statement finishes.  ^The profile callback contains
     ** the original statement text and an estimate of wall-clock time
    -** of how long that statement took to run.
    -**
    -** Requirements:
    -** [H12281] [H12282] [H12283] [H12284] [H12285] [H12287] [H12288] [H12289]
    -** [H12290]
    -*/
    -SQLITE_EXPERIMENTAL void *sqlite3_trace(sqlite3*, void(*xTrace)(void*,const char*), void*);
    -SQLITE_EXPERIMENTAL void *sqlite3_profile(sqlite3*,
    +** of how long that statement took to run.  ^The profile callback
    +** time is in units of nanoseconds, however the current implementation
    +** is only capable of millisecond resolution so the six least significant
    +** digits in the time are meaningless.  Future versions of SQLite
    +** might provide greater resolution on the profiler callback.  The
    +** sqlite3_profile() function is considered experimental and is
    +** subject to change in future versions of SQLite.
    +*/
    +SQLITE_API void *sqlite3_trace(sqlite3*, void(*xTrace)(void*,const char*), void*);
    +SQLITE_API SQLITE_EXPERIMENTAL void *sqlite3_profile(sqlite3*,
        void(*xProfile)(void*,const char*,sqlite3_uint64), void*);
     
     /*
    -** CAPI3REF: Query Progress Callbacks {H12910} 
    +** CAPI3REF: Query Progress Callbacks
     **
    -** This routine configures a callback function - the
    -** progress callback - that is invoked periodically during long
    -** running calls to [sqlite3_exec()], [sqlite3_step()] and
    -** [sqlite3_get_table()].  An example use for this
    +** ^The sqlite3_progress_handler(D,N,X,P) interface causes the callback
    +** function X to be invoked periodically during long running calls to
    +** [sqlite3_exec()], [sqlite3_step()] and [sqlite3_get_table()] for
    +** database connection D.  An example use for this
     ** interface is to keep a GUI updated during a large query.
     **
    -** If the progress callback returns non-zero, the operation is
    +** ^The parameter P is passed through as the only parameter to the 
    +** callback function X.  ^The parameter N is the number of 
    +** [virtual machine instructions] that are evaluated between successive
    +** invocations of the callback X.
    +**
    +** ^Only a single progress handler may be defined at one time per
    +** [database connection]; setting a new progress handler cancels the
    +** old one.  ^Setting parameter X to NULL disables the progress handler.
    +** ^The progress handler is also disabled by setting N to a value less
    +** than 1.
    +**
    +** ^If the progress callback returns non-zero, the operation is
     ** interrupted.  This feature can be used to implement a
     ** "Cancel" button on a GUI progress dialog box.
     **
    -** The progress handler must not do anything that will modify
    +** The progress handler callback must not do anything that will modify
     ** the database connection that invoked the progress handler.
     ** Note that [sqlite3_prepare_v2()] and [sqlite3_step()] both modify their
     ** database connections for the meaning of "modify" in this paragraph.
     **
    -** Requirements:
    -** [H12911] [H12912] [H12913] [H12914] [H12915] [H12916] [H12917] [H12918]
    -**
     */
    -void sqlite3_progress_handler(sqlite3*, int, int(*)(void*), void*);
    +SQLITE_API void sqlite3_progress_handler(sqlite3*, int, int(*)(void*), void*);
     
     /*
    -** CAPI3REF: Opening A New Database Connection {H12700} 
    +** CAPI3REF: Opening A New Database Connection
     **
    -** These routines open an SQLite database file whose name is given by the
    -** filename argument. The filename argument is interpreted as UTF-8 for
    +** ^These routines open an SQLite database file as specified by the 
    +** filename argument. ^The filename argument is interpreted as UTF-8 for
     ** sqlite3_open() and sqlite3_open_v2() and as UTF-16 in the native byte
    -** order for sqlite3_open16(). A [database connection] handle is usually
    +** order for sqlite3_open16(). ^(A [database connection] handle is usually
     ** returned in *ppDb, even if an error occurs.  The only exception is that
     ** if SQLite is unable to allocate memory to hold the [sqlite3] object,
     ** a NULL will be written into *ppDb instead of a pointer to the [sqlite3]
    -** object. If the database is opened (and/or created) successfully, then
    -** [SQLITE_OK] is returned.  Otherwise an [error code] is returned.  The
    +** object.)^ ^(If the database is opened (and/or created) successfully, then
    +** [SQLITE_OK] is returned.  Otherwise an [error code] is returned.)^ ^The
     ** [sqlite3_errmsg()] or [sqlite3_errmsg16()] routines can be used to obtain
    -** an English language description of the error.
    +** an English language description of the error following a failure of any
    +** of the sqlite3_open() routines.
     **
    -** The default encoding for the database will be UTF-8 if
    +** ^The default encoding for the database will be UTF-8 if
     ** sqlite3_open() or sqlite3_open_v2() is called and
     ** UTF-16 in the native byte order if sqlite3_open16() is used.
     **
    @@ -2030,74 +2479,185 @@ void sqlite3_progress_handler(sqlite3*, int, int(*)(void*), void*);
     **
     ** The sqlite3_open_v2() interface works like sqlite3_open()
     ** except that it accepts two additional parameters for additional control
    -** over the new database connection.  The flags parameter can take one of
    +** over the new database connection.  ^(The flags parameter to
    +** sqlite3_open_v2() can take one of
     ** the following three values, optionally combined with the 
    -** [SQLITE_OPEN_NOMUTEX] or [SQLITE_OPEN_FULLMUTEX] flags:
    +** [SQLITE_OPEN_NOMUTEX], [SQLITE_OPEN_FULLMUTEX], [SQLITE_OPEN_SHAREDCACHE],
    +** [SQLITE_OPEN_PRIVATECACHE], and/or [SQLITE_OPEN_URI] flags:)^
     **
     ** 
    -**
    [SQLITE_OPEN_READONLY]
    +** ^(
    [SQLITE_OPEN_READONLY]
    **
    The database is opened in read-only mode. If the database does not -** already exist, an error is returned.
    +** already exist, an error is returned.)^ ** -**
    [SQLITE_OPEN_READWRITE]
    +** ^(
    [SQLITE_OPEN_READWRITE]
    **
    The database is opened for reading and writing if possible, or reading ** only if the file is write protected by the operating system. In either -** case the database must already exist, otherwise an error is returned.
    +** case the database must already exist, otherwise an error is returned.)^ ** -**
    [SQLITE_OPEN_READWRITE] | [SQLITE_OPEN_CREATE]
    -**
    The database is opened for reading and writing, and is creates it if +** ^(
    [SQLITE_OPEN_READWRITE] | [SQLITE_OPEN_CREATE]
    +**
    The database is opened for reading and writing, and is created if ** it does not already exist. This is the behavior that is always used for -** sqlite3_open() and sqlite3_open16().
    +** sqlite3_open() and sqlite3_open16().)^ **
    ** ** If the 3rd parameter to sqlite3_open_v2() is not one of the -** combinations shown above or one of the combinations shown above combined -** with the [SQLITE_OPEN_NOMUTEX] or [SQLITE_OPEN_FULLMUTEX] flags, +** combinations shown above optionally combined with other +** [SQLITE_OPEN_READONLY | SQLITE_OPEN_* bits] ** then the behavior is undefined. ** -** If the [SQLITE_OPEN_NOMUTEX] flag is set, then the database connection +** ^If the [SQLITE_OPEN_NOMUTEX] flag is set, then the database connection ** opens in the multi-thread [threading mode] as long as the single-thread -** mode has not been set at compile-time or start-time. If the +** mode has not been set at compile-time or start-time. ^If the ** [SQLITE_OPEN_FULLMUTEX] flag is set then the database connection opens ** in the serialized [threading mode] unless single-thread was ** previously selected at compile-time or start-time. +** ^The [SQLITE_OPEN_SHAREDCACHE] flag causes the database connection to be +** eligible to use [shared cache mode], regardless of whether or not shared +** cache is enabled using [sqlite3_enable_shared_cache()]. ^The +** [SQLITE_OPEN_PRIVATECACHE] flag causes the database connection to not +** participate in [shared cache mode] even if it is enabled. ** -** If the filename is ":memory:", then a private, temporary in-memory database -** is created for the connection. This in-memory database will vanish when +** ^The fourth parameter to sqlite3_open_v2() is the name of the +** [sqlite3_vfs] object that defines the operating system interface that +** the new database connection should use. ^If the fourth parameter is +** a NULL pointer then the default [sqlite3_vfs] object is used. +** +** ^If the filename is ":memory:", then a private, temporary in-memory database +** is created for the connection. ^This in-memory database will vanish when ** the database connection is closed. Future versions of SQLite might ** make use of additional special filenames that begin with the ":" character. ** It is recommended that when a database filename actually does begin with ** a ":" character you should prefix the filename with a pathname such as ** "./" to avoid ambiguity. ** -** If the filename is an empty string, then a private, temporary -** on-disk database will be created. This private database will be +** ^If the filename is an empty string, then a private, temporary +** on-disk database will be created. ^This private database will be ** automatically deleted as soon as the database connection is closed. ** -** The fourth parameter to sqlite3_open_v2() is the name of the -** [sqlite3_vfs] object that defines the operating system interface that -** the new database connection should use. If the fourth parameter is -** a NULL pointer then the default [sqlite3_vfs] object is used. +** [[URI filenames in sqlite3_open()]]

    URI Filenames

    +** +** ^If [URI filename] interpretation is enabled, and the filename argument +** begins with "file:", then the filename is interpreted as a URI. ^URI +** filename interpretation is enabled if the [SQLITE_OPEN_URI] flag is +** set in the fourth argument to sqlite3_open_v2(), or if it has +** been enabled globally using the [SQLITE_CONFIG_URI] option with the +** [sqlite3_config()] method or by the [SQLITE_USE_URI] compile-time option. +** As of SQLite version 3.7.7, URI filename interpretation is turned off +** by default, but future releases of SQLite might enable URI filename +** interpretation by default. See "[URI filenames]" for additional +** information. +** +** URI filenames are parsed according to RFC 3986. ^If the URI contains an +** authority, then it must be either an empty string or the string +** "localhost". ^If the authority is not an empty string or "localhost", an +** error is returned to the caller. ^The fragment component of a URI, if +** present, is ignored. +** +** ^SQLite uses the path component of the URI as the name of the disk file +** which contains the database. ^If the path begins with a '/' character, +** then it is interpreted as an absolute path. ^If the path does not begin +** with a '/' (meaning that the authority section is omitted from the URI) +** then the path is interpreted as a relative path. +** ^On windows, the first component of an absolute path +** is a drive specification (e.g. "C:"). +** +** [[core URI query parameters]] +** The query component of a URI may contain parameters that are interpreted +** either by SQLite itself, or by a [VFS | custom VFS implementation]. +** SQLite interprets the following three query parameters: +** +**
      +**
    • vfs: ^The "vfs" parameter may be used to specify the name of +** a VFS object that provides the operating system interface that should +** be used to access the database file on disk. ^If this option is set to +** an empty string the default VFS object is used. ^Specifying an unknown +** VFS is an error. ^If sqlite3_open_v2() is used and the vfs option is +** present, then the VFS specified by the option takes precedence over +** the value passed as the fourth parameter to sqlite3_open_v2(). +** +**
    • mode: ^(The mode parameter may be set to either "ro", "rw", +** "rwc", or "memory". Attempting to set it to any other value is +** an error)^. +** ^If "ro" is specified, then the database is opened for read-only +** access, just as if the [SQLITE_OPEN_READONLY] flag had been set in the +** third argument to sqlite3_prepare_v2(). ^If the mode option is set to +** "rw", then the database is opened for read-write (but not create) +** access, as if SQLITE_OPEN_READWRITE (but not SQLITE_OPEN_CREATE) had +** been set. ^Value "rwc" is equivalent to setting both +** SQLITE_OPEN_READWRITE and SQLITE_OPEN_CREATE. ^If the mode option is +** set to "memory" then a pure [in-memory database] that never reads +** or writes from disk is used. ^It is an error to specify a value for +** the mode parameter that is less restrictive than that specified by +** the flags passed in the third parameter to sqlite3_open_v2(). +** +**
    • cache: ^The cache parameter may be set to either "shared" or +** "private". ^Setting it to "shared" is equivalent to setting the +** SQLITE_OPEN_SHAREDCACHE bit in the flags argument passed to +** sqlite3_open_v2(). ^Setting the cache parameter to "private" is +** equivalent to setting the SQLITE_OPEN_PRIVATECACHE bit. +** ^If sqlite3_open_v2() is used and the "cache" parameter is present in +** a URI filename, its value overrides any behaviour requested by setting +** SQLITE_OPEN_PRIVATECACHE or SQLITE_OPEN_SHAREDCACHE flag. +**
    +** +** ^Specifying an unknown parameter in the query component of a URI is not an +** error. Future versions of SQLite might understand additional query +** parameters. See "[query parameters with special meaning to SQLite]" for +** additional information. +** +** [[URI filename examples]]

    URI filename examples

    +** +**
  • +**
    URI filenames Results +**
    file:data.db +** Open the file "data.db" in the current directory. +**
    file:/home/fred/data.db
    +** file:///home/fred/data.db
    +** file://localhost/home/fred/data.db
    +** Open the database file "/home/fred/data.db". +**
    file://darkstar/home/fred/data.db +** An error. "darkstar" is not a recognized authority. +**
    +** file:///C:/Documents%20and%20Settings/fred/Desktop/data.db +** Windows only: Open the file "data.db" on fred's desktop on drive +** C:. Note that the %20 escaping in this example is not strictly +** necessary - space characters can be used literally +** in URI filenames. +**
    file:data.db?mode=ro&cache=private +** Open file "data.db" in the current directory for read-only access. +** Regardless of whether or not shared-cache mode is enabled by +** default, use a private cache. +**
    file:/home/fred/data.db?vfs=unix-nolock +** Open file "/home/fred/data.db". Use the special VFS "unix-nolock". +**
    file:data.db?mode=readonly +** An error. "readonly" is not a valid option for the "mode" parameter. +**
    +** +** ^URI hexadecimal escape sequences (%HH) are supported within the path and +** query components of a URI. A hexadecimal escape sequence consists of a +** percent sign - "%" - followed by exactly two hexadecimal digits +** specifying an octet value. ^Before the path or query components of a +** URI filename are interpreted, they are encoded using UTF-8 and all +** hexadecimal escape sequences replaced by a single byte containing the +** corresponding octet. If this process generates an invalid UTF-8 encoding, +** the results are undefined. ** ** Note to Windows users: The encoding used for the filename argument ** of sqlite3_open() and sqlite3_open_v2() must be UTF-8, not whatever ** codepage is currently defined. Filenames containing international ** characters must be converted to UTF-8 prior to passing them into ** sqlite3_open() or sqlite3_open_v2(). -** -** Requirements: -** [H12701] [H12702] [H12703] [H12704] [H12706] [H12707] [H12709] [H12711] -** [H12712] [H12713] [H12714] [H12717] [H12719] [H12721] [H12723] */ -int sqlite3_open( +SQLITE_API int sqlite3_open( const char *filename, /* Database filename (UTF-8) */ sqlite3 **ppDb /* OUT: SQLite db handle */ ); -int sqlite3_open16( +SQLITE_API int sqlite3_open16( const void *filename, /* Database filename (UTF-16) */ sqlite3 **ppDb /* OUT: SQLite db handle */ ); -int sqlite3_open_v2( +SQLITE_API int sqlite3_open_v2( const char *filename, /* Database filename (UTF-8) */ sqlite3 **ppDb, /* OUT: SQLite db handle */ int flags, /* Flags */ @@ -2105,23 +2665,67 @@ int sqlite3_open_v2( ); /* -** CAPI3REF: Error Codes And Messages {H12800} +** CAPI3REF: Obtain Values For URI Parameters +** +** These are utility routines, useful to VFS implementations, that check +** to see if a database file was a URI that contained a specific query +** parameter, and if so obtains the value of that query parameter. +** +** If F is the database filename pointer passed into the xOpen() method of +** a VFS implementation when the flags parameter to xOpen() has one or +** more of the [SQLITE_OPEN_URI] or [SQLITE_OPEN_MAIN_DB] bits set and +** P is the name of the query parameter, then +** sqlite3_uri_parameter(F,P) returns the value of the P +** parameter if it exists or a NULL pointer if P does not appear as a +** query parameter on F. If P is a query parameter of F +** has no explicit value, then sqlite3_uri_parameter(F,P) returns +** a pointer to an empty string. +** +** The sqlite3_uri_boolean(F,P,B) routine assumes that P is a boolean +** parameter and returns true (1) or false (0) according to the value +** of P. The sqlite3_uri_boolean(F,P,B) routine returns true (1) if the +** value of query parameter P is one of "yes", "true", or "on" in any +** case or if the value begins with a non-zero number. The +** sqlite3_uri_boolean(F,P,B) routines returns false (0) if the value of +** query parameter P is one of "no", "false", or "off" in any case or +** if the value begins with a numeric zero. If P is not a query +** parameter on F or if the value of P is does not match any of the +** above, then sqlite3_uri_boolean(F,P,B) returns (B!=0). +** +** The sqlite3_uri_int64(F,P,D) routine converts the value of P into a +** 64-bit signed integer and returns that integer, or D if P does not +** exist. If the value of P is something other than an integer, then +** zero is returned. +** +** If F is a NULL pointer, then sqlite3_uri_parameter(F,P) returns NULL and +** sqlite3_uri_boolean(F,P,B) returns B. If F is not a NULL pointer and +** is not a database file pathname pointer that SQLite passed into the xOpen +** VFS method, then the behavior of this routine is undefined and probably +** undesirable. +*/ +SQLITE_API const char *sqlite3_uri_parameter(const char *zFilename, const char *zParam); +SQLITE_API int sqlite3_uri_boolean(const char *zFile, const char *zParam, int bDefault); +SQLITE_API sqlite3_int64 sqlite3_uri_int64(const char*, const char*, sqlite3_int64); + + +/* +** CAPI3REF: Error Codes And Messages ** -** The sqlite3_errcode() interface returns the numeric [result code] or +** ^The sqlite3_errcode() interface returns the numeric [result code] or ** [extended result code] for the most recent failed sqlite3_* API call ** associated with a [database connection]. If a prior API call failed ** but the most recent API call succeeded, the return value from -** sqlite3_errcode() is undefined. The sqlite3_extended_errcode() +** sqlite3_errcode() is undefined. ^The sqlite3_extended_errcode() ** interface is the same except that it always returns the ** [extended result code] even when extended result codes are ** disabled. ** -** The sqlite3_errmsg() and sqlite3_errmsg16() return English-language +** ^The sqlite3_errmsg() and sqlite3_errmsg16() return English-language ** text that describes the error, as either UTF-8 or UTF-16 respectively. -** Memory to hold the error message string is managed internally. +** ^(Memory to hold the error message string is managed internally. ** The application does not need to worry about freeing the result. ** However, the error string might be overwritten or deallocated by -** subsequent calls to other SQLite interface functions. +** subsequent calls to other SQLite interface functions.)^ ** ** When the serialized [threading mode] is in use, it might be the ** case that a second error occurs on a separate thread in between @@ -2136,17 +2740,14 @@ int sqlite3_open_v2( ** If an interface fails with SQLITE_MISUSE, that means the interface ** was invoked incorrectly by the application. In that case, the ** error code and message may or may not be set. -** -** Requirements: -** [H12801] [H12802] [H12803] [H12807] [H12808] [H12809] */ -int sqlite3_errcode(sqlite3 *db); -int sqlite3_extended_errcode(sqlite3 *db); -const char *sqlite3_errmsg(sqlite3*); -const void *sqlite3_errmsg16(sqlite3*); +SQLITE_API int sqlite3_errcode(sqlite3 *db); +SQLITE_API int sqlite3_extended_errcode(sqlite3 *db); +SQLITE_API const char *sqlite3_errmsg(sqlite3*); +SQLITE_API const void *sqlite3_errmsg16(sqlite3*); /* -** CAPI3REF: SQL Statement Object {H13000} +** CAPI3REF: SQL Statement Object ** KEYWORDS: {prepared statement} {prepared statements} ** ** An instance of this object represents a single SQL statement. @@ -2172,25 +2773,30 @@ const void *sqlite3_errmsg16(sqlite3*); typedef struct sqlite3_stmt sqlite3_stmt; /* -** CAPI3REF: Run-time Limits {H12760} +** CAPI3REF: Run-time Limits ** -** This interface allows the size of various constructs to be limited +** ^(This interface allows the size of various constructs to be limited ** on a connection by connection basis. The first parameter is the ** [database connection] whose limit is to be set or queried. The ** second parameter is one of the [limit categories] that define a ** class of constructs to be size limited. The third parameter is the -** new limit for that construct. The function returns the old limit. +** new limit for that construct.)^ ** -** If the new limit is a negative number, the limit is unchanged. -** For the limit category of SQLITE_LIMIT_XYZ there is a +** ^If the new limit is a negative number, the limit is unchanged. +** ^(For each limit category SQLITE_LIMIT_NAME there is a ** [limits | hard upper bound] -** set by a compile-time C preprocessor macro named -** [limits | SQLITE_MAX_XYZ]. -** (The "_LIMIT_" in the name is changed to "_MAX_".) -** Attempts to increase a limit above its hard upper bound are -** silently truncated to the hard upper limit. -** -** Run time limits are intended for use in applications that manage +** set at compile-time by a C preprocessor macro called +** [limits | SQLITE_MAX_NAME]. +** (The "_LIMIT_" in the name is changed to "_MAX_".))^ +** ^Attempts to increase a limit above its hard upper bound are +** silently truncated to the hard upper bound. +** +** ^Regardless of whether or not the limit was changed, the +** [sqlite3_limit()] interface returns the prior value of the limit. +** ^Hence, to find the current value of a limit without changing it, +** simply invoke this interface with the third parameter set to -1. +** +** Run-time limits are intended for use in applications that manage ** both their own internal database and also databases that are controlled ** by untrusted external sources. An example application might be a ** web browser that has its own databases for storing history and @@ -2204,15 +2810,12 @@ typedef struct sqlite3_stmt sqlite3_stmt; ** [max_page_count] [PRAGMA]. ** ** New run-time limit categories may be added in future releases. -** -** Requirements: -** [H12762] [H12766] [H12769] */ -int sqlite3_limit(sqlite3*, int id, int newVal); +SQLITE_API int sqlite3_limit(sqlite3*, int id, int newVal); /* -** CAPI3REF: Run-Time Limit Categories {H12790} -** KEYWORDS: {limit category} {limit categories} +** CAPI3REF: Run-Time Limit Categories +** KEYWORDS: {limit category} {*limit categories} ** ** These constants define various performance limits ** that can be lowered at run-time using [sqlite3_limit()]. @@ -2220,40 +2823,46 @@ int sqlite3_limit(sqlite3*, int id, int newVal); ** Additional information is available at [limits | Limits in SQLite]. ** **
    -**
    SQLITE_LIMIT_LENGTH
    -**
    The maximum size of any string or BLOB or table row.
    +** [[SQLITE_LIMIT_LENGTH]] ^(
    SQLITE_LIMIT_LENGTH
    +**
    The maximum size of any string or BLOB or table row, in bytes.
    )^ ** -**
    SQLITE_LIMIT_SQL_LENGTH
    -**
    The maximum length of an SQL statement.
    +** [[SQLITE_LIMIT_SQL_LENGTH]] ^(
    SQLITE_LIMIT_SQL_LENGTH
    +**
    The maximum length of an SQL statement, in bytes.
    )^ ** -**
    SQLITE_LIMIT_COLUMN
    +** [[SQLITE_LIMIT_COLUMN]] ^(
    SQLITE_LIMIT_COLUMN
    **
    The maximum number of columns in a table definition or in the ** result set of a [SELECT] or the maximum number of columns in an index -** or in an ORDER BY or GROUP BY clause.
    +** or in an ORDER BY or GROUP BY clause.)^ ** -**
    SQLITE_LIMIT_EXPR_DEPTH
    -**
    The maximum depth of the parse tree on any expression.
    +** [[SQLITE_LIMIT_EXPR_DEPTH]] ^(
    SQLITE_LIMIT_EXPR_DEPTH
    +**
    The maximum depth of the parse tree on any expression.
    )^ ** -**
    SQLITE_LIMIT_COMPOUND_SELECT
    -**
    The maximum number of terms in a compound SELECT statement.
    +** [[SQLITE_LIMIT_COMPOUND_SELECT]] ^(
    SQLITE_LIMIT_COMPOUND_SELECT
    +**
    The maximum number of terms in a compound SELECT statement.
    )^ ** -**
    SQLITE_LIMIT_VDBE_OP
    +** [[SQLITE_LIMIT_VDBE_OP]] ^(
    SQLITE_LIMIT_VDBE_OP
    **
    The maximum number of instructions in a virtual machine program -** used to implement an SQL statement.
    +** used to implement an SQL statement. This limit is not currently +** enforced, though that might be added in some future release of +** SQLite.)^ ** -**
    SQLITE_LIMIT_FUNCTION_ARG
    -**
    The maximum number of arguments on a function.
    +** [[SQLITE_LIMIT_FUNCTION_ARG]] ^(
    SQLITE_LIMIT_FUNCTION_ARG
    +**
    The maximum number of arguments on a function.
    )^ ** -**
    SQLITE_LIMIT_ATTACHED
    -**
    The maximum number of [ATTACH | attached databases].
    +** [[SQLITE_LIMIT_ATTACHED]] ^(
    SQLITE_LIMIT_ATTACHED
    +**
    The maximum number of [ATTACH | attached databases].)^
    ** -**
    SQLITE_LIMIT_LIKE_PATTERN_LENGTH
    +** [[SQLITE_LIMIT_LIKE_PATTERN_LENGTH]] +** ^(
    SQLITE_LIMIT_LIKE_PATTERN_LENGTH
    **
    The maximum length of the pattern argument to the [LIKE] or -** [GLOB] operators.
    +** [GLOB] operators.)^ +** +** [[SQLITE_LIMIT_VARIABLE_NUMBER]] +** ^(
    SQLITE_LIMIT_VARIABLE_NUMBER
    +**
    The maximum index number of any [parameter] in an SQL statement.)^ ** -**
    SQLITE_LIMIT_VARIABLE_NUMBER
    -**
    The maximum number of variables in an SQL statement that can -** be bound.
    +** [[SQLITE_LIMIT_TRIGGER_DEPTH]] ^(
    SQLITE_LIMIT_TRIGGER_DEPTH
    +**
    The maximum depth of recursion for triggers.
    )^ **
    */ #define SQLITE_LIMIT_LENGTH 0 @@ -2266,9 +2875,10 @@ int sqlite3_limit(sqlite3*, int id, int newVal); #define SQLITE_LIMIT_ATTACHED 7 #define SQLITE_LIMIT_LIKE_PATTERN_LENGTH 8 #define SQLITE_LIMIT_VARIABLE_NUMBER 9 +#define SQLITE_LIMIT_TRIGGER_DEPTH 10 /* -** CAPI3REF: Compiling An SQL Statement {H13010} +** CAPI3REF: Compiling An SQL Statement ** KEYWORDS: {SQL statement compiler} ** ** To execute an SQL query, it must first be compiled into a byte-code @@ -2283,87 +2893,93 @@ int sqlite3_limit(sqlite3*, int id, int newVal); ** interfaces use UTF-8, and sqlite3_prepare16() and sqlite3_prepare16_v2() ** use UTF-16. ** -** If the nByte argument is less than zero, then zSql is read up to the -** first zero terminator. If nByte is non-negative, then it is the maximum -** number of bytes read from zSql. When nByte is non-negative, the +** ^If the nByte argument is less than zero, then zSql is read up to the +** first zero terminator. ^If nByte is non-negative, then it is the maximum +** number of bytes read from zSql. ^When nByte is non-negative, the ** zSql string ends at either the first '\000' or '\u0000' character or ** the nByte-th byte, whichever comes first. If the caller knows ** that the supplied string is nul-terminated, then there is a small ** performance advantage to be gained by passing an nByte parameter that ** is equal to the number of bytes in the input string including -** the nul-terminator bytes. +** the nul-terminator bytes as this saves SQLite from having to +** make a copy of the input string. ** -** If pzTail is not NULL then *pzTail is made to point to the first byte +** ^If pzTail is not NULL then *pzTail is made to point to the first byte ** past the end of the first SQL statement in zSql. These routines only ** compile the first statement in zSql, so *pzTail is left pointing to ** what remains uncompiled. ** -** *ppStmt is left pointing to a compiled [prepared statement] that can be -** executed using [sqlite3_step()]. If there is an error, *ppStmt is set -** to NULL. If the input text contains no SQL (if the input is an empty +** ^*ppStmt is left pointing to a compiled [prepared statement] that can be +** executed using [sqlite3_step()]. ^If there is an error, *ppStmt is set +** to NULL. ^If the input text contains no SQL (if the input is an empty ** string or a comment) then *ppStmt is set to NULL. ** The calling procedure is responsible for deleting the compiled ** SQL statement using [sqlite3_finalize()] after it has finished with it. ** ppStmt may not be NULL. ** -** On success, [SQLITE_OK] is returned, otherwise an [error code] is returned. +** ^On success, the sqlite3_prepare() family of routines return [SQLITE_OK]; +** otherwise an [error code] is returned. ** ** The sqlite3_prepare_v2() and sqlite3_prepare16_v2() interfaces are ** recommended for all new programs. The two older interfaces are retained ** for backwards compatibility, but their use is discouraged. -** In the "v2" interfaces, the prepared statement +** ^In the "v2" interfaces, the prepared statement ** that is returned (the [sqlite3_stmt] object) contains a copy of the ** original SQL text. This causes the [sqlite3_step()] interface to -** behave a differently in two ways: +** behave differently in three ways: ** **
      **
    1. -** If the database schema changes, instead of returning [SQLITE_SCHEMA] as it +** ^If the database schema changes, instead of returning [SQLITE_SCHEMA] as it ** always used to do, [sqlite3_step()] will automatically recompile the SQL -** statement and try to run it again. If the schema has changed in -** a way that makes the statement no longer valid, [sqlite3_step()] will still -** return [SQLITE_SCHEMA]. But unlike the legacy behavior, [SQLITE_SCHEMA] is -** now a fatal error. Calling [sqlite3_prepare_v2()] again will not make the -** error go away. Note: use [sqlite3_errmsg()] to find the text -** of the parsing error that results in an [SQLITE_SCHEMA] return. +** statement and try to run it again. **
    2. ** **
    3. -** When an error occurs, [sqlite3_step()] will return one of the detailed -** [error codes] or [extended error codes]. The legacy behavior was that +** ^When an error occurs, [sqlite3_step()] will return one of the detailed +** [error codes] or [extended error codes]. ^The legacy behavior was that ** [sqlite3_step()] would only return a generic [SQLITE_ERROR] result code -** and you would have to make a second call to [sqlite3_reset()] in order -** to find the underlying cause of the problem. With the "v2" prepare +** and the application would have to make a second call to [sqlite3_reset()] +** in order to find the underlying cause of the problem. With the "v2" prepare ** interfaces, the underlying reason for the error is returned immediately. **
    4. -**
    -** -** Requirements: -** [H13011] [H13012] [H13013] [H13014] [H13015] [H13016] [H13019] [H13021] ** +**
  • +** ^If the specific value bound to [parameter | host parameter] in the +** WHERE clause might influence the choice of query plan for a statement, +** then the statement will be automatically recompiled, as if there had been +** a schema change, on the first [sqlite3_step()] call following any change +** to the [sqlite3_bind_text | bindings] of that [parameter]. +** ^The specific value of WHERE-clause [parameter] might influence the +** choice of query plan if the parameter is the left-hand side of a [LIKE] +** or [GLOB] operator or if the parameter is compared to an indexed column +** and the [SQLITE_ENABLE_STAT3] compile-time option is enabled. +** the +**
  • +** */ -int sqlite3_prepare( +SQLITE_API int sqlite3_prepare( sqlite3 *db, /* Database handle */ const char *zSql, /* SQL statement, UTF-8 encoded */ int nByte, /* Maximum length of zSql in bytes. */ sqlite3_stmt **ppStmt, /* OUT: Statement handle */ const char **pzTail /* OUT: Pointer to unused portion of zSql */ ); -int sqlite3_prepare_v2( +SQLITE_API int sqlite3_prepare_v2( sqlite3 *db, /* Database handle */ const char *zSql, /* SQL statement, UTF-8 encoded */ int nByte, /* Maximum length of zSql in bytes. */ sqlite3_stmt **ppStmt, /* OUT: Statement handle */ const char **pzTail /* OUT: Pointer to unused portion of zSql */ ); -int sqlite3_prepare16( +SQLITE_API int sqlite3_prepare16( sqlite3 *db, /* Database handle */ const void *zSql, /* SQL statement, UTF-16 encoded */ int nByte, /* Maximum length of zSql in bytes. */ sqlite3_stmt **ppStmt, /* OUT: Statement handle */ const void **pzTail /* OUT: Pointer to unused portion of zSql */ ); -int sqlite3_prepare16_v2( +SQLITE_API int sqlite3_prepare16_v2( sqlite3 *db, /* Database handle */ const void *zSql, /* SQL statement, UTF-16 encoded */ int nByte, /* Maximum length of zSql in bytes. */ @@ -2372,24 +2988,71 @@ int sqlite3_prepare16_v2( ); /* -** CAPI3REF: Retrieving Statement SQL {H13100} +** CAPI3REF: Retrieving Statement SQL ** -** This interface can be used to retrieve a saved copy of the original +** ^This interface can be used to retrieve a saved copy of the original ** SQL text used to create a [prepared statement] if that statement was ** compiled using either [sqlite3_prepare_v2()] or [sqlite3_prepare16_v2()]. +*/ +SQLITE_API const char *sqlite3_sql(sqlite3_stmt *pStmt); + +/* +** CAPI3REF: Determine If An SQL Statement Writes The Database +** +** ^The sqlite3_stmt_readonly(X) interface returns true (non-zero) if +** and only if the [prepared statement] X makes no direct changes to +** the content of the database file. +** +** Note that [application-defined SQL functions] or +** [virtual tables] might change the database indirectly as a side effect. +** ^(For example, if an application defines a function "eval()" that +** calls [sqlite3_exec()], then the following SQL statement would +** change the database file through side-effects: ** -** Requirements: -** [H13101] [H13102] [H13103] +**
    +**    SELECT eval('DELETE FROM t1') FROM t2;
    +** 
    +** +** But because the [SELECT] statement does not change the database file +** directly, sqlite3_stmt_readonly() would still return true.)^ +** +** ^Transaction control statements such as [BEGIN], [COMMIT], [ROLLBACK], +** [SAVEPOINT], and [RELEASE] cause sqlite3_stmt_readonly() to return true, +** since the statements themselves do not actually modify the database but +** rather they control the timing of when other statements modify the +** database. ^The [ATTACH] and [DETACH] statements also cause +** sqlite3_stmt_readonly() to return true since, while those statements +** change the configuration of a database connection, they do not make +** changes to the content of the database files on disk. +*/ +SQLITE_API int sqlite3_stmt_readonly(sqlite3_stmt *pStmt); + +/* +** CAPI3REF: Determine If A Prepared Statement Has Been Reset +** +** ^The sqlite3_stmt_busy(S) interface returns true (non-zero) if the +** [prepared statement] S has been stepped at least once using +** [sqlite3_step(S)] but has not run to completion and/or has not +** been reset using [sqlite3_reset(S)]. ^The sqlite3_stmt_busy(S) +** interface returns false if S is a NULL pointer. If S is not a +** NULL pointer and is not a pointer to a valid [prepared statement] +** object, then the behavior is undefined and probably undesirable. +** +** This interface can be used in combination [sqlite3_next_stmt()] +** to locate all prepared statements associated with a database +** connection that are in need of being reset. This can be used, +** for example, in diagnostic routines to search for prepared +** statements that are holding a transaction open. */ -const char *sqlite3_sql(sqlite3_stmt *pStmt); +SQLITE_API int sqlite3_stmt_busy(sqlite3_stmt*); /* -** CAPI3REF: Dynamically Typed Value Object {H15000} +** CAPI3REF: Dynamically Typed Value Object ** KEYWORDS: {protected sqlite3_value} {unprotected sqlite3_value} ** ** SQLite uses the sqlite3_value object to represent all values ** that can be stored in a database table. SQLite uses dynamic typing -** for the values it stores. Values stored in sqlite3_value objects +** for the values it stores. ^Values stored in sqlite3_value objects ** can be integers, floating point values, strings, BLOBs, or NULL. ** ** An sqlite3_value object may be either "protected" or "unprotected". @@ -2399,7 +3062,7 @@ const char *sqlite3_sql(sqlite3_stmt *pStmt); ** whether or not it requires a protected sqlite3_value. ** ** The terms "protected" and "unprotected" refer to whether or not -** a mutex is held. A internal mutex is held for a protected +** a mutex is held. An internal mutex is held for a protected ** sqlite3_value object but no mutex is held for an unprotected ** sqlite3_value object. If SQLite is compiled to be single-threaded ** (with [SQLITE_THREADSAFE=0] and with [sqlite3_threadsafe()] returning 0) @@ -2408,12 +3071,12 @@ const char *sqlite3_sql(sqlite3_stmt *pStmt); ** then there is no distinction between protected and unprotected ** sqlite3_value objects and they can be used interchangeably. However, ** for maximum code portability it is recommended that applications -** still make the distinction between between protected and unprotected +** still make the distinction between protected and unprotected ** sqlite3_value objects even when not strictly required. ** -** The sqlite3_value objects that are passed as parameters into the +** ^The sqlite3_value objects that are passed as parameters into the ** implementation of [application-defined SQL functions] are protected. -** The sqlite3_value object returned by +** ^The sqlite3_value object returned by ** [sqlite3_column_value()] is unprotected. ** Unprotected sqlite3_value objects may only be used with ** [sqlite3_result_value()] and [sqlite3_bind_value()]. @@ -2423,10 +3086,10 @@ const char *sqlite3_sql(sqlite3_stmt *pStmt); typedef struct Mem sqlite3_value; /* -** CAPI3REF: SQL Function Context Object {H16001} +** CAPI3REF: SQL Function Context Object ** ** The context in which an SQL function executes is stored in an -** sqlite3_context object. A pointer to an sqlite3_context object +** sqlite3_context object. ^A pointer to an sqlite3_context object ** is always first parameter to [application-defined SQL functions]. ** The application-defined SQL function implementation will pass this ** pointer through into calls to [sqlite3_result_int | sqlite3_result()], @@ -2437,12 +3100,13 @@ typedef struct Mem sqlite3_value; typedef struct sqlite3_context sqlite3_context; /* -** CAPI3REF: Binding Values To Prepared Statements {H13500} +** CAPI3REF: Binding Values To Prepared Statements ** KEYWORDS: {host parameter} {host parameters} {host parameter name} ** KEYWORDS: {SQL parameter} {SQL parameters} {parameter binding} ** -** In the SQL strings input to [sqlite3_prepare_v2()] and its variants, -** literals may be replaced by a [parameter] in one of these forms: +** ^(In the SQL statement text input to [sqlite3_prepare_v2()] and its variants, +** literals may be replaced by a [parameter] that matches one of following +** templates: ** **
      **
    • ? @@ -2452,124 +3116,125 @@ typedef struct sqlite3_context sqlite3_context; **
    • $VVV **
    ** -** In the parameter forms shown above NNN is an integer literal, -** and VVV is an alpha-numeric parameter name. The values of these +** In the templates above, NNN represents an integer literal, +** and VVV represents an alphanumeric identifier.)^ ^The values of these ** parameters (also called "host parameter names" or "SQL parameters") ** can be set using the sqlite3_bind_*() routines defined here. ** -** The first argument to the sqlite3_bind_*() routines is always +** ^The first argument to the sqlite3_bind_*() routines is always ** a pointer to the [sqlite3_stmt] object returned from ** [sqlite3_prepare_v2()] or its variants. ** -** The second argument is the index of the SQL parameter to be set. -** The leftmost SQL parameter has an index of 1. When the same named +** ^The second argument is the index of the SQL parameter to be set. +** ^The leftmost SQL parameter has an index of 1. ^When the same named ** SQL parameter is used more than once, second and subsequent ** occurrences have the same index as the first occurrence. -** The index for named parameters can be looked up using the -** [sqlite3_bind_parameter_index()] API if desired. The index +** ^The index for named parameters can be looked up using the +** [sqlite3_bind_parameter_index()] API if desired. ^The index ** for "?NNN" parameters is the value of NNN. -** The NNN value must be between 1 and the [sqlite3_limit()] +** ^The NNN value must be between 1 and the [sqlite3_limit()] ** parameter [SQLITE_LIMIT_VARIABLE_NUMBER] (default value: 999). ** -** The third argument is the value to bind to the parameter. +** ^The third argument is the value to bind to the parameter. ** -** In those routines that have a fourth argument, its value is the +** ^(In those routines that have a fourth argument, its value is the ** number of bytes in the parameter. To be clear: the value is the -** number of bytes in the value, not the number of characters. -** If the fourth parameter is negative, the length of the string is +** number of bytes in the value, not the number of characters.)^ +** ^If the fourth parameter is negative, the length of the string is ** the number of bytes up to the first zero terminator. -** -** The fifth argument to sqlite3_bind_blob(), sqlite3_bind_text(), and +** If a non-negative fourth parameter is provided to sqlite3_bind_text() +** or sqlite3_bind_text16() then that parameter must be the byte offset +** where the NUL terminator would occur assuming the string were NUL +** terminated. If any NUL characters occur at byte offsets less than +** the value of the fourth parameter then the resulting string value will +** contain embedded NULs. The result of expressions involving strings +** with embedded NULs is undefined. +** +** ^The fifth argument to sqlite3_bind_blob(), sqlite3_bind_text(), and ** sqlite3_bind_text16() is a destructor used to dispose of the BLOB or -** string after SQLite has finished with it. If the fifth argument is +** string after SQLite has finished with it. ^The destructor is called +** to dispose of the BLOB or string even if the call to sqlite3_bind_blob(), +** sqlite3_bind_text(), or sqlite3_bind_text16() fails. +** ^If the fifth argument is ** the special value [SQLITE_STATIC], then SQLite assumes that the ** information is in static, unmanaged space and does not need to be freed. -** If the fifth argument has the value [SQLITE_TRANSIENT], then +** ^If the fifth argument has the value [SQLITE_TRANSIENT], then ** SQLite makes its own private copy of the data immediately, before ** the sqlite3_bind_*() routine returns. ** -** The sqlite3_bind_zeroblob() routine binds a BLOB of length N that -** is filled with zeroes. A zeroblob uses a fixed amount of memory +** ^The sqlite3_bind_zeroblob() routine binds a BLOB of length N that +** is filled with zeroes. ^A zeroblob uses a fixed amount of memory ** (just an integer to hold its size) while it is being processed. ** Zeroblobs are intended to serve as placeholders for BLOBs whose ** content is later written using ** [sqlite3_blob_open | incremental BLOB I/O] routines. -** A negative value for the zeroblob results in a zero-length BLOB. -** -** The sqlite3_bind_*() routines must be called after -** [sqlite3_prepare_v2()] (and its variants) or [sqlite3_reset()] and -** before [sqlite3_step()]. -** Bindings are not cleared by the [sqlite3_reset()] routine. -** Unbound parameters are interpreted as NULL. -** -** These routines return [SQLITE_OK] on success or an error code if -** anything goes wrong. [SQLITE_RANGE] is returned if the parameter -** index is out of range. [SQLITE_NOMEM] is returned if malloc() fails. -** [SQLITE_MISUSE] might be returned if these routines are called on a -** virtual machine that is the wrong state or which has already been finalized. -** Detection of misuse is unreliable. Applications should not depend -** on SQLITE_MISUSE returns. SQLITE_MISUSE is intended to indicate a -** a logic error in the application. Future versions of SQLite might -** panic rather than return SQLITE_MISUSE. +** ^A negative value for the zeroblob results in a zero-length BLOB. ** -** See also: [sqlite3_bind_parameter_count()], -** [sqlite3_bind_parameter_name()], and [sqlite3_bind_parameter_index()]. +** ^If any of the sqlite3_bind_*() routines are called with a NULL pointer +** for the [prepared statement] or with a prepared statement for which +** [sqlite3_step()] has been called more recently than [sqlite3_reset()], +** then the call will return [SQLITE_MISUSE]. If any sqlite3_bind_() +** routine is passed a [prepared statement] that has been finalized, the +** result is undefined and probably harmful. +** +** ^Bindings are not cleared by the [sqlite3_reset()] routine. +** ^Unbound parameters are interpreted as NULL. ** -** Requirements: -** [H13506] [H13509] [H13512] [H13515] [H13518] [H13521] [H13524] [H13527] -** [H13530] [H13533] [H13536] [H13539] [H13542] [H13545] [H13548] [H13551] +** ^The sqlite3_bind_* routines return [SQLITE_OK] on success or an +** [error code] if anything goes wrong. +** ^[SQLITE_RANGE] is returned if the parameter +** index is out of range. ^[SQLITE_NOMEM] is returned if malloc() fails. ** +** See also: [sqlite3_bind_parameter_count()], +** [sqlite3_bind_parameter_name()], and [sqlite3_bind_parameter_index()]. */ -int sqlite3_bind_blob(sqlite3_stmt*, int, const void*, int n, void(*)(void*)); -int sqlite3_bind_double(sqlite3_stmt*, int, double); -int sqlite3_bind_int(sqlite3_stmt*, int, int); -int sqlite3_bind_int64(sqlite3_stmt*, int, sqlite3_int64); -int sqlite3_bind_null(sqlite3_stmt*, int); -int sqlite3_bind_text(sqlite3_stmt*, int, const char*, int n, void(*)(void*)); -int sqlite3_bind_text16(sqlite3_stmt*, int, const void*, int, void(*)(void*)); -int sqlite3_bind_value(sqlite3_stmt*, int, const sqlite3_value*); -int sqlite3_bind_zeroblob(sqlite3_stmt*, int, int n); +SQLITE_API int sqlite3_bind_blob(sqlite3_stmt*, int, const void*, int n, void(*)(void*)); +SQLITE_API int sqlite3_bind_double(sqlite3_stmt*, int, double); +SQLITE_API int sqlite3_bind_int(sqlite3_stmt*, int, int); +SQLITE_API int sqlite3_bind_int64(sqlite3_stmt*, int, sqlite3_int64); +SQLITE_API int sqlite3_bind_null(sqlite3_stmt*, int); +SQLITE_API int sqlite3_bind_text(sqlite3_stmt*, int, const char*, int n, void(*)(void*)); +SQLITE_API int sqlite3_bind_text16(sqlite3_stmt*, int, const void*, int, void(*)(void*)); +SQLITE_API int sqlite3_bind_value(sqlite3_stmt*, int, const sqlite3_value*); +SQLITE_API int sqlite3_bind_zeroblob(sqlite3_stmt*, int, int n); /* -** CAPI3REF: Number Of SQL Parameters {H13600} +** CAPI3REF: Number Of SQL Parameters ** -** This routine can be used to find the number of [SQL parameters] +** ^This routine can be used to find the number of [SQL parameters] ** in a [prepared statement]. SQL parameters are tokens of the ** form "?", "?NNN", ":AAA", "$AAA", or "@AAA" that serve as ** placeholders for values that are [sqlite3_bind_blob | bound] ** to the parameters at a later time. ** -** This routine actually returns the index of the largest (rightmost) +** ^(This routine actually returns the index of the largest (rightmost) ** parameter. For all forms except ?NNN, this will correspond to the -** number of unique parameters. If parameters of the ?NNN are used, -** there may be gaps in the list. +** number of unique parameters. If parameters of the ?NNN form are used, +** there may be gaps in the list.)^ ** ** See also: [sqlite3_bind_blob|sqlite3_bind()], ** [sqlite3_bind_parameter_name()], and ** [sqlite3_bind_parameter_index()]. -** -** Requirements: -** [H13601] */ -int sqlite3_bind_parameter_count(sqlite3_stmt*); +SQLITE_API int sqlite3_bind_parameter_count(sqlite3_stmt*); /* -** CAPI3REF: Name Of A Host Parameter {H13620} +** CAPI3REF: Name Of A Host Parameter ** -** This routine returns a pointer to the name of the n-th -** [SQL parameter] in a [prepared statement]. -** SQL parameters of the form "?NNN" or ":AAA" or "@AAA" or "$AAA" +** ^The sqlite3_bind_parameter_name(P,N) interface returns +** the name of the N-th [SQL parameter] in the [prepared statement] P. +** ^(SQL parameters of the form "?NNN" or ":AAA" or "@AAA" or "$AAA" ** have a name which is the string "?NNN" or ":AAA" or "@AAA" or "$AAA" ** respectively. ** In other words, the initial ":" or "$" or "@" or "?" -** is included as part of the name. -** Parameters of the form "?" without a following integer have no name -** and are also referred to as "anonymous parameters". +** is included as part of the name.)^ +** ^Parameters of the form "?" without a following integer have no name +** and are referred to as "nameless" or "anonymous parameters". ** -** The first host parameter has an index of 1, not 0. +** ^The first host parameter has an index of 1, not 0. ** -** If the value n is out of range or if the n-th parameter is -** nameless, then NULL is returned. The returned string is +** ^If the value N is out of range or if the N-th parameter is +** nameless, then NULL is returned. ^The returned string is ** always in UTF-8 encoding even if the named parameter was ** originally specified as UTF-16 in [sqlite3_prepare16()] or ** [sqlite3_prepare16_v2()]. @@ -2577,149 +3242,138 @@ int sqlite3_bind_parameter_count(sqlite3_stmt*); ** See also: [sqlite3_bind_blob|sqlite3_bind()], ** [sqlite3_bind_parameter_count()], and ** [sqlite3_bind_parameter_index()]. -** -** Requirements: -** [H13621] */ -const char *sqlite3_bind_parameter_name(sqlite3_stmt*, int); +SQLITE_API const char *sqlite3_bind_parameter_name(sqlite3_stmt*, int); /* -** CAPI3REF: Index Of A Parameter With A Given Name {H13640} +** CAPI3REF: Index Of A Parameter With A Given Name ** -** Return the index of an SQL parameter given its name. The +** ^Return the index of an SQL parameter given its name. ^The ** index value returned is suitable for use as the second -** parameter to [sqlite3_bind_blob|sqlite3_bind()]. A zero -** is returned if no matching parameter is found. The parameter +** parameter to [sqlite3_bind_blob|sqlite3_bind()]. ^A zero +** is returned if no matching parameter is found. ^The parameter ** name must be given in UTF-8 even if the original statement ** was prepared from UTF-16 text using [sqlite3_prepare16_v2()]. ** ** See also: [sqlite3_bind_blob|sqlite3_bind()], ** [sqlite3_bind_parameter_count()], and ** [sqlite3_bind_parameter_index()]. -** -** Requirements: -** [H13641] */ -int sqlite3_bind_parameter_index(sqlite3_stmt*, const char *zName); +SQLITE_API int sqlite3_bind_parameter_index(sqlite3_stmt*, const char *zName); /* -** CAPI3REF: Reset All Bindings On A Prepared Statement {H13660} +** CAPI3REF: Reset All Bindings On A Prepared Statement ** -** Contrary to the intuition of many, [sqlite3_reset()] does not reset +** ^Contrary to the intuition of many, [sqlite3_reset()] does not reset ** the [sqlite3_bind_blob | bindings] on a [prepared statement]. -** Use this routine to reset all host parameters to NULL. -** -** Requirements: -** [H13661] +** ^Use this routine to reset all host parameters to NULL. */ -int sqlite3_clear_bindings(sqlite3_stmt*); +SQLITE_API int sqlite3_clear_bindings(sqlite3_stmt*); /* -** CAPI3REF: Number Of Columns In A Result Set {H13710} +** CAPI3REF: Number Of Columns In A Result Set ** -** Return the number of columns in the result set returned by the -** [prepared statement]. This routine returns 0 if pStmt is an SQL +** ^Return the number of columns in the result set returned by the +** [prepared statement]. ^This routine returns 0 if pStmt is an SQL ** statement that does not return data (for example an [UPDATE]). ** -** Requirements: -** [H13711] +** See also: [sqlite3_data_count()] */ -int sqlite3_column_count(sqlite3_stmt *pStmt); +SQLITE_API int sqlite3_column_count(sqlite3_stmt *pStmt); /* -** CAPI3REF: Column Names In A Result Set {H13720} +** CAPI3REF: Column Names In A Result Set ** -** These routines return the name assigned to a particular column -** in the result set of a [SELECT] statement. The sqlite3_column_name() +** ^These routines return the name assigned to a particular column +** in the result set of a [SELECT] statement. ^The sqlite3_column_name() ** interface returns a pointer to a zero-terminated UTF-8 string ** and sqlite3_column_name16() returns a pointer to a zero-terminated -** UTF-16 string. The first parameter is the [prepared statement] -** that implements the [SELECT] statement. The second parameter is the -** column number. The leftmost column is number 0. -** -** The returned string pointer is valid until either the [prepared statement] -** is destroyed by [sqlite3_finalize()] or until the next call to +** UTF-16 string. ^The first parameter is the [prepared statement] +** that implements the [SELECT] statement. ^The second parameter is the +** column number. ^The leftmost column is number 0. +** +** ^The returned string pointer is valid until either the [prepared statement] +** is destroyed by [sqlite3_finalize()] or until the statement is automatically +** reprepared by the first call to [sqlite3_step()] for a particular run +** or until the next call to ** sqlite3_column_name() or sqlite3_column_name16() on the same column. ** -** If sqlite3_malloc() fails during the processing of either routine +** ^If sqlite3_malloc() fails during the processing of either routine ** (for example during a conversion from UTF-8 to UTF-16) then a ** NULL pointer is returned. ** -** The name of a result column is the value of the "AS" clause for +** ^The name of a result column is the value of the "AS" clause for ** that column, if there is an AS clause. If there is no AS clause ** then the name of the column is unspecified and may change from ** one release of SQLite to the next. -** -** Requirements: -** [H13721] [H13723] [H13724] [H13725] [H13726] [H13727] */ -const char *sqlite3_column_name(sqlite3_stmt*, int N); -const void *sqlite3_column_name16(sqlite3_stmt*, int N); +SQLITE_API const char *sqlite3_column_name(sqlite3_stmt*, int N); +SQLITE_API const void *sqlite3_column_name16(sqlite3_stmt*, int N); /* -** CAPI3REF: Source Of Data In A Query Result {H13740} +** CAPI3REF: Source Of Data In A Query Result ** -** These routines provide a means to determine what column of what -** table in which database a result of a [SELECT] statement comes from. -** The name of the database or table or column can be returned as -** either a UTF-8 or UTF-16 string. The _database_ routines return +** ^These routines provide a means to determine the database, table, and +** table column that is the origin of a particular result column in +** [SELECT] statement. +** ^The name of the database or table or column can be returned as +** either a UTF-8 or UTF-16 string. ^The _database_ routines return ** the database name, the _table_ routines return the table name, and ** the origin_ routines return the column name. -** The returned string is valid until the [prepared statement] is destroyed -** using [sqlite3_finalize()] or until the same information is requested +** ^The returned string is valid until the [prepared statement] is destroyed +** using [sqlite3_finalize()] or until the statement is automatically +** reprepared by the first call to [sqlite3_step()] for a particular run +** or until the same information is requested ** again in a different encoding. ** -** The names returned are the original un-aliased names of the +** ^The names returned are the original un-aliased names of the ** database, table, and column. ** -** The first argument to the following calls is a [prepared statement]. -** These functions return information about the Nth column returned by +** ^The first argument to these interfaces is a [prepared statement]. +** ^These functions return information about the Nth result column returned by ** the statement, where N is the second function argument. +** ^The left-most column is column 0 for these routines. ** -** If the Nth column returned by the statement is an expression or +** ^If the Nth column returned by the statement is an expression or ** subquery and is not a column value, then all of these functions return -** NULL. These routine might also return NULL if a memory allocation error -** occurs. Otherwise, they return the name of the attached database, table -** and column that query result column was extracted from. +** NULL. ^These routine might also return NULL if a memory allocation error +** occurs. ^Otherwise, they return the name of the attached database, table, +** or column that query result column was extracted from. ** -** As with all other SQLite APIs, those postfixed with "16" return -** UTF-16 encoded strings, the other functions return UTF-8. {END} +** ^As with all other SQLite APIs, those whose names end with "16" return +** UTF-16 encoded strings and the other functions return UTF-8. ** -** These APIs are only available if the library was compiled with the -** [SQLITE_ENABLE_COLUMN_METADATA] C-preprocessor symbol defined. +** ^These APIs are only available if the library was compiled with the +** [SQLITE_ENABLE_COLUMN_METADATA] C-preprocessor symbol. ** -** {A13751} ** If two or more threads call one or more of these routines against the same ** prepared statement and column at the same time then the results are ** undefined. ** -** Requirements: -** [H13741] [H13742] [H13743] [H13744] [H13745] [H13746] [H13748] -** ** If two or more threads call one or more ** [sqlite3_column_database_name | column metadata interfaces] ** for the same [prepared statement] and result column ** at the same time then the results are undefined. */ -const char *sqlite3_column_database_name(sqlite3_stmt*,int); -const void *sqlite3_column_database_name16(sqlite3_stmt*,int); -const char *sqlite3_column_table_name(sqlite3_stmt*,int); -const void *sqlite3_column_table_name16(sqlite3_stmt*,int); -const char *sqlite3_column_origin_name(sqlite3_stmt*,int); -const void *sqlite3_column_origin_name16(sqlite3_stmt*,int); +SQLITE_API const char *sqlite3_column_database_name(sqlite3_stmt*,int); +SQLITE_API const void *sqlite3_column_database_name16(sqlite3_stmt*,int); +SQLITE_API const char *sqlite3_column_table_name(sqlite3_stmt*,int); +SQLITE_API const void *sqlite3_column_table_name16(sqlite3_stmt*,int); +SQLITE_API const char *sqlite3_column_origin_name(sqlite3_stmt*,int); +SQLITE_API const void *sqlite3_column_origin_name16(sqlite3_stmt*,int); /* -** CAPI3REF: Declared Datatype Of A Query Result {H13760} +** CAPI3REF: Declared Datatype Of A Query Result ** -** The first parameter is a [prepared statement]. +** ^(The first parameter is a [prepared statement]. ** If this statement is a [SELECT] statement and the Nth column of the ** returned result set of that [SELECT] is a table column (not an ** expression or subquery) then the declared type of the table -** column is returned. If the Nth column of the result set is an +** column is returned.)^ ^If the Nth column of the result set is an ** expression or subquery, then a NULL pointer is returned. -** The returned string is always UTF-8 encoded. {END} +** ^The returned string is always UTF-8 encoded. ** -** For example, given the database schema: +** ^(For example, given the database schema: ** ** CREATE TABLE t1(c1 VARIANT); ** @@ -2728,23 +3382,20 @@ const void *sqlite3_column_origin_name16(sqlite3_stmt*,int); ** SELECT c1 + 1, c1 FROM t1; ** ** this routine would return the string "VARIANT" for the second result -** column (i==1), and a NULL pointer for the first result column (i==0). +** column (i==1), and a NULL pointer for the first result column (i==0).)^ ** -** SQLite uses dynamic run-time typing. So just because a column +** ^SQLite uses dynamic run-time typing. ^So just because a column ** is declared to contain a particular type does not mean that the ** data stored in that column is of the declared type. SQLite is -** strongly typed, but the typing is dynamic not static. Type +** strongly typed, but the typing is dynamic not static. ^Type ** is associated with individual values, not with the containers ** used to hold those values. -** -** Requirements: -** [H13761] [H13762] [H13763] */ -const char *sqlite3_column_decltype(sqlite3_stmt*,int); -const void *sqlite3_column_decltype16(sqlite3_stmt*,int); +SQLITE_API const char *sqlite3_column_decltype(sqlite3_stmt*,int); +SQLITE_API const void *sqlite3_column_decltype16(sqlite3_stmt*,int); /* -** CAPI3REF: Evaluate An SQL Statement {H13200} +** CAPI3REF: Evaluate An SQL Statement ** ** After a [prepared statement] has been prepared using either ** [sqlite3_prepare_v2()] or [sqlite3_prepare16_v2()] or one of the legacy @@ -2758,35 +3409,35 @@ const void *sqlite3_column_decltype16(sqlite3_stmt*,int); ** new "v2" interface is recommended for new applications but the legacy ** interface will continue to be supported. ** -** In the legacy interface, the return value will be either [SQLITE_BUSY], +** ^In the legacy interface, the return value will be either [SQLITE_BUSY], ** [SQLITE_DONE], [SQLITE_ROW], [SQLITE_ERROR], or [SQLITE_MISUSE]. -** With the "v2" interface, any of the other [result codes] or +** ^With the "v2" interface, any of the other [result codes] or ** [extended result codes] might be returned as well. ** -** [SQLITE_BUSY] means that the database engine was unable to acquire the -** database locks it needs to do its job. If the statement is a [COMMIT] +** ^[SQLITE_BUSY] means that the database engine was unable to acquire the +** database locks it needs to do its job. ^If the statement is a [COMMIT] ** or occurs outside of an explicit transaction, then you can retry the -** statement. If the statement is not a [COMMIT] and occurs within a +** statement. If the statement is not a [COMMIT] and occurs within an ** explicit transaction then you should rollback the transaction before ** continuing. ** -** [SQLITE_DONE] means that the statement has finished executing +** ^[SQLITE_DONE] means that the statement has finished executing ** successfully. sqlite3_step() should not be called again on this virtual ** machine without first calling [sqlite3_reset()] to reset the virtual ** machine back to its initial state. ** -** If the SQL statement being executed returns any data, then [SQLITE_ROW] +** ^If the SQL statement being executed returns any data, then [SQLITE_ROW] ** is returned each time a new row of data is ready for processing by the ** caller. The values may be accessed using the [column access functions]. ** sqlite3_step() is called again to retrieve the next row of data. ** -** [SQLITE_ERROR] means that a run-time error (such as a constraint +** ^[SQLITE_ERROR] means that a run-time error (such as a constraint ** violation) has occurred. sqlite3_step() should not be called again on ** the VM. More information may be found by calling [sqlite3_errmsg()]. -** With the legacy interface, a more specific error code (for example, +** ^With the legacy interface, a more specific error code (for example, ** [SQLITE_INTERRUPT], [SQLITE_SCHEMA], [SQLITE_CORRUPT], and so forth) ** can be obtained by calling [sqlite3_reset()] on the -** [prepared statement]. In the "v2" interface, +** [prepared statement]. ^In the "v2" interface, ** the more specific error code is returned directly by sqlite3_step(). ** ** [SQLITE_MISUSE] means that the this routine was called inappropriately. @@ -2796,6 +3447,18 @@ const void *sqlite3_column_decltype16(sqlite3_stmt*,int); ** be the case that the same database connection is being used by two or ** more threads at the same moment in time. ** +** For all versions of SQLite up to and including 3.6.23.1, a call to +** [sqlite3_reset()] was required after sqlite3_step() returned anything +** other than [SQLITE_ROW] before any subsequent invocation of +** sqlite3_step(). Failure to reset the prepared statement using +** [sqlite3_reset()] would result in an [SQLITE_MISUSE] return from +** sqlite3_step(). But after version 3.6.23.1, sqlite3_step() began +** calling [sqlite3_reset()] automatically in this circumstance rather +** than returning [SQLITE_MISUSE]. This is not considered a compatibility +** break because any application that ever receives an SQLITE_MISUSE error +** is broken by definition. The [SQLITE_OMIT_AUTORESET] compile-time option +** can be used to restore the legacy behavior. +** ** Goofy Interface Alert: In the legacy interface, the sqlite3_step() ** API always returns a generic error code, [SQLITE_ERROR], following any ** error other than [SQLITE_BUSY] and [SQLITE_MISUSE]. You must call @@ -2807,27 +3470,34 @@ const void *sqlite3_column_decltype16(sqlite3_stmt*,int); ** of the legacy [sqlite3_prepare()] and [sqlite3_prepare16()] interfaces, ** then the more specific [error codes] are returned directly ** by sqlite3_step(). The use of the "v2" interface is recommended. -** -** Requirements: -** [H13202] [H15304] [H15306] [H15308] [H15310] */ -int sqlite3_step(sqlite3_stmt*); +SQLITE_API int sqlite3_step(sqlite3_stmt*); /* -** CAPI3REF: Number of columns in a result set {H13770} +** CAPI3REF: Number of columns in a result set ** -** Returns the number of values in the current row of the result set. +** ^The sqlite3_data_count(P) interface returns the number of columns in the +** current row of the result set of [prepared statement] P. +** ^If prepared statement P does not have results ready to return +** (via calls to the [sqlite3_column_int | sqlite3_column_*()] of +** interfaces) then sqlite3_data_count(P) returns 0. +** ^The sqlite3_data_count(P) routine also returns 0 if P is a NULL pointer. +** ^The sqlite3_data_count(P) routine returns 0 if the previous call to +** [sqlite3_step](P) returned [SQLITE_DONE]. ^The sqlite3_data_count(P) +** will return non-zero if previous call to [sqlite3_step](P) returned +** [SQLITE_ROW], except in the case of the [PRAGMA incremental_vacuum] +** where it always returns zero since each step of that multi-step +** pragma returns 0 columns of data. ** -** Requirements: -** [H13771] [H13772] +** See also: [sqlite3_column_count()] */ -int sqlite3_data_count(sqlite3_stmt *pStmt); +SQLITE_API int sqlite3_data_count(sqlite3_stmt *pStmt); /* -** CAPI3REF: Fundamental Datatypes {H10265} +** CAPI3REF: Fundamental Datatypes ** KEYWORDS: SQLITE_TEXT ** -** {H10266} Every value in SQLite has one of five fundamental datatypes: +** ^(Every value in SQLite has one of five fundamental datatypes: ** **
      **
    • 64-bit signed integer @@ -2835,7 +3505,7 @@ int sqlite3_data_count(sqlite3_stmt *pStmt); **
    • string **
    • BLOB **
    • NULL -**
    {END} +** )^ ** ** These constants are codes for each of those types. ** @@ -2856,17 +3526,19 @@ int sqlite3_data_count(sqlite3_stmt *pStmt); #define SQLITE3_TEXT 3 /* -** CAPI3REF: Result Values From A Query {H13800} +** CAPI3REF: Result Values From A Query ** KEYWORDS: {column access functions} ** -** These routines form the "result set query" interface. +** These routines form the "result set" interface. ** -** These routines return information about a single column of the current -** result row of a query. In every case the first argument is a pointer +** ^These routines return information about a single column of the current +** result row of a query. ^In every case the first argument is a pointer ** to the [prepared statement] that is being evaluated (the [sqlite3_stmt*] ** that was returned from [sqlite3_prepare_v2()] or one of its variants) ** and the second argument is the index of the column for which information -** should be returned. The leftmost column of the result set has the index 0. +** should be returned. ^The leftmost column of the result set has the index 0. +** ^The number of columns in the result can be determined using +** [sqlite3_column_count()]. ** ** If the SQL statement does not currently point to a valid row, or if the ** column index is out of range, the result is undefined. @@ -2880,9 +3552,9 @@ int sqlite3_data_count(sqlite3_stmt *pStmt); ** are called from a different thread while any of these routines ** are pending, then the results are undefined. ** -** The sqlite3_column_type() routine returns the +** ^The sqlite3_column_type() routine returns the ** [SQLITE_INTEGER | datatype code] for the initial data type -** of the result column. The returned value is one of [SQLITE_INTEGER], +** of the result column. ^The returned value is one of [SQLITE_INTEGER], ** [SQLITE_FLOAT], [SQLITE_TEXT], [SQLITE_BLOB], or [SQLITE_NULL]. The value ** returned by sqlite3_column_type() is only meaningful if no type ** conversions have occurred as described below. After a type conversion, @@ -2890,27 +3562,35 @@ int sqlite3_data_count(sqlite3_stmt *pStmt); ** versions of SQLite may change the behavior of sqlite3_column_type() ** following a type conversion. ** -** If the result is a BLOB or UTF-8 string then the sqlite3_column_bytes() +** ^If the result is a BLOB or UTF-8 string then the sqlite3_column_bytes() ** routine returns the number of bytes in that BLOB or string. -** If the result is a UTF-16 string, then sqlite3_column_bytes() converts +** ^If the result is a UTF-16 string, then sqlite3_column_bytes() converts ** the string to UTF-8 and then returns the number of bytes. -** If the result is a numeric value then sqlite3_column_bytes() uses +** ^If the result is a numeric value then sqlite3_column_bytes() uses ** [sqlite3_snprintf()] to convert that value to a UTF-8 string and returns ** the number of bytes in that string. -** The value returned does not include the zero terminator at the end -** of the string. For clarity: the value returned is the number of -** bytes in the string, not the number of characters. +** ^If the result is NULL, then sqlite3_column_bytes() returns zero. +** +** ^If the result is a BLOB or UTF-16 string then the sqlite3_column_bytes16() +** routine returns the number of bytes in that BLOB or string. +** ^If the result is a UTF-8 string, then sqlite3_column_bytes16() converts +** the string to UTF-16 and then returns the number of bytes. +** ^If the result is a numeric value then sqlite3_column_bytes16() uses +** [sqlite3_snprintf()] to convert that value to a UTF-16 string and returns +** the number of bytes in that string. +** ^If the result is NULL, then sqlite3_column_bytes16() returns zero. ** -** Strings returned by sqlite3_column_text() and sqlite3_column_text16(), -** even empty strings, are always zero terminated. The return -** value from sqlite3_column_blob() for a zero-length BLOB is an arbitrary -** pointer, possibly even a NULL pointer. +** ^The values returned by [sqlite3_column_bytes()] and +** [sqlite3_column_bytes16()] do not include the zero terminators at the end +** of the string. ^For clarity: the values returned by +** [sqlite3_column_bytes()] and [sqlite3_column_bytes16()] are the number of +** bytes in the string, not the number of characters. ** -** The sqlite3_column_bytes16() routine is similar to sqlite3_column_bytes() -** but leaves the result in UTF-16 in native byte order instead of UTF-8. -** The zero terminator is not included in this count. +** ^Strings returned by sqlite3_column_text() and sqlite3_column_text16(), +** even empty strings, are always zero-terminated. ^The return +** value from sqlite3_column_blob() for a zero-length BLOB is a NULL pointer. ** -** The object returned by [sqlite3_column_value()] is an +** ^The object returned by [sqlite3_column_value()] is an ** [unprotected sqlite3_value] object. An unprotected sqlite3_value object ** may only be used with [sqlite3_bind_value()] and [sqlite3_result_value()]. ** If the [unprotected sqlite3_value] object returned by @@ -2918,10 +3598,10 @@ int sqlite3_data_count(sqlite3_stmt *pStmt); ** to routines like [sqlite3_value_int()], [sqlite3_value_text()], ** or [sqlite3_value_bytes()], then the behavior is undefined. ** -** These routines attempt to convert the value where appropriate. For +** These routines attempt to convert the value where appropriate. ^For ** example, if the internal representation is FLOAT and a text result ** is requested, [sqlite3_snprintf()] is used internally to perform the -** conversion automatically. The following table details the conversions +** conversion automatically. ^(The following table details the conversions ** that are applied: ** **
    @@ -2945,7 +3625,7 @@ int sqlite3_data_count(sqlite3_stmt *pStmt); ** BLOB FLOAT Convert to TEXT then use atof() ** BLOB TEXT Add a zero terminator if needed ** -**
    +** )^ ** ** The table above makes reference to standard C library functions atoi() ** and atof(). SQLite does not really use these functions. It has its @@ -2971,9 +3651,9 @@ int sqlite3_data_count(sqlite3_stmt *pStmt); ** to UTF-8. ** ** -** Conversions between UTF-16be and UTF-16le are always done in place and do +** ^Conversions between UTF-16be and UTF-16le are always done in place and do ** not invalidate a prior pointer, though of course the content of the buffer -** that the prior pointer points to will have been modified. Other kinds +** that the prior pointer references will have been modified. Other kinds ** of conversion are done in place when it is possible, but sometimes they ** are not possible and in those cases prior pointers are invalidated. ** @@ -2994,166 +3674,172 @@ int sqlite3_data_count(sqlite3_stmt *pStmt); ** sqlite3_column_bytes16(), and do not mix calls to sqlite3_column_text16() ** with calls to sqlite3_column_bytes(). ** -** The pointers returned are valid until a type conversion occurs as +** ^The pointers returned are valid until a type conversion occurs as ** described above, or until [sqlite3_step()] or [sqlite3_reset()] or -** [sqlite3_finalize()] is called. The memory space used to hold strings +** [sqlite3_finalize()] is called. ^The memory space used to hold strings ** and BLOBs is freed automatically. Do not pass the pointers returned ** [sqlite3_column_blob()], [sqlite3_column_text()], etc. into ** [sqlite3_free()]. ** -** If a memory allocation error occurs during the evaluation of any +** ^(If a memory allocation error occurs during the evaluation of any ** of these routines, a default value is returned. The default value ** is either the integer 0, the floating point number 0.0, or a NULL ** pointer. Subsequent calls to [sqlite3_errcode()] will return -** [SQLITE_NOMEM]. -** -** Requirements: -** [H13803] [H13806] [H13809] [H13812] [H13815] [H13818] [H13821] [H13824] -** [H13827] [H13830] +** [SQLITE_NOMEM].)^ */ -const void *sqlite3_column_blob(sqlite3_stmt*, int iCol); -int sqlite3_column_bytes(sqlite3_stmt*, int iCol); -int sqlite3_column_bytes16(sqlite3_stmt*, int iCol); -double sqlite3_column_double(sqlite3_stmt*, int iCol); -int sqlite3_column_int(sqlite3_stmt*, int iCol); -sqlite3_int64 sqlite3_column_int64(sqlite3_stmt*, int iCol); -const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol); -const void *sqlite3_column_text16(sqlite3_stmt*, int iCol); -int sqlite3_column_type(sqlite3_stmt*, int iCol); -sqlite3_value *sqlite3_column_value(sqlite3_stmt*, int iCol); +SQLITE_API const void *sqlite3_column_blob(sqlite3_stmt*, int iCol); +SQLITE_API int sqlite3_column_bytes(sqlite3_stmt*, int iCol); +SQLITE_API int sqlite3_column_bytes16(sqlite3_stmt*, int iCol); +SQLITE_API double sqlite3_column_double(sqlite3_stmt*, int iCol); +SQLITE_API int sqlite3_column_int(sqlite3_stmt*, int iCol); +SQLITE_API sqlite3_int64 sqlite3_column_int64(sqlite3_stmt*, int iCol); +SQLITE_API const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol); +SQLITE_API const void *sqlite3_column_text16(sqlite3_stmt*, int iCol); +SQLITE_API int sqlite3_column_type(sqlite3_stmt*, int iCol); +SQLITE_API sqlite3_value *sqlite3_column_value(sqlite3_stmt*, int iCol); /* -** CAPI3REF: Destroy A Prepared Statement Object {H13300} +** CAPI3REF: Destroy A Prepared Statement Object ** -** The sqlite3_finalize() function is called to delete a [prepared statement]. -** If the statement was executed successfully or not executed at all, then -** SQLITE_OK is returned. If execution of the statement failed then an -** [error code] or [extended error code] is returned. +** ^The sqlite3_finalize() function is called to delete a [prepared statement]. +** ^If the most recent evaluation of the statement encountered no errors +** or if the statement is never been evaluated, then sqlite3_finalize() returns +** SQLITE_OK. ^If the most recent evaluation of statement S failed, then +** sqlite3_finalize(S) returns the appropriate [error code] or +** [extended error code]. ** -** This routine can be called at any point during the execution of the -** [prepared statement]. If the virtual machine has not -** completed execution when this routine is called, that is like -** encountering an error or an [sqlite3_interrupt | interrupt]. -** Incomplete updates may be rolled back and transactions canceled, -** depending on the circumstances, and the -** [error code] returned will be [SQLITE_ABORT]. +** ^The sqlite3_finalize(S) routine can be called at any point during +** the life cycle of [prepared statement] S: +** before statement S is ever evaluated, after +** one or more calls to [sqlite3_reset()], or after any call +** to [sqlite3_step()] regardless of whether or not the statement has +** completed execution. ** -** Requirements: -** [H11302] [H11304] +** ^Invoking sqlite3_finalize() on a NULL pointer is a harmless no-op. +** +** The application must finalize every [prepared statement] in order to avoid +** resource leaks. It is a grievous error for the application to try to use +** a prepared statement after it has been finalized. Any use of a prepared +** statement after it has been finalized can result in undefined and +** undesirable behavior such as segfaults and heap corruption. */ -int sqlite3_finalize(sqlite3_stmt *pStmt); +SQLITE_API int sqlite3_finalize(sqlite3_stmt *pStmt); /* -** CAPI3REF: Reset A Prepared Statement Object {H13330} +** CAPI3REF: Reset A Prepared Statement Object ** ** The sqlite3_reset() function is called to reset a [prepared statement] ** object back to its initial state, ready to be re-executed. -** Any SQL statement variables that had values bound to them using +** ^Any SQL statement variables that had values bound to them using ** the [sqlite3_bind_blob | sqlite3_bind_*() API] retain their values. ** Use [sqlite3_clear_bindings()] to reset the bindings. ** -** {H11332} The [sqlite3_reset(S)] interface resets the [prepared statement] S -** back to the beginning of its program. +** ^The [sqlite3_reset(S)] interface resets the [prepared statement] S +** back to the beginning of its program. ** -** {H11334} If the most recent call to [sqlite3_step(S)] for the -** [prepared statement] S returned [SQLITE_ROW] or [SQLITE_DONE], -** or if [sqlite3_step(S)] has never before been called on S, -** then [sqlite3_reset(S)] returns [SQLITE_OK]. +** ^If the most recent call to [sqlite3_step(S)] for the +** [prepared statement] S returned [SQLITE_ROW] or [SQLITE_DONE], +** or if [sqlite3_step(S)] has never before been called on S, +** then [sqlite3_reset(S)] returns [SQLITE_OK]. ** -** {H11336} If the most recent call to [sqlite3_step(S)] for the -** [prepared statement] S indicated an error, then -** [sqlite3_reset(S)] returns an appropriate [error code]. +** ^If the most recent call to [sqlite3_step(S)] for the +** [prepared statement] S indicated an error, then +** [sqlite3_reset(S)] returns an appropriate [error code]. ** -** {H11338} The [sqlite3_reset(S)] interface does not change the values -** of any [sqlite3_bind_blob|bindings] on the [prepared statement] S. +** ^The [sqlite3_reset(S)] interface does not change the values +** of any [sqlite3_bind_blob|bindings] on the [prepared statement] S. */ -int sqlite3_reset(sqlite3_stmt *pStmt); +SQLITE_API int sqlite3_reset(sqlite3_stmt *pStmt); /* -** CAPI3REF: Create Or Redefine SQL Functions {H16100} +** CAPI3REF: Create Or Redefine SQL Functions ** KEYWORDS: {function creation routines} ** KEYWORDS: {application-defined SQL function} ** KEYWORDS: {application-defined SQL functions} ** -** These two functions (collectively known as "function creation routines") +** ^These functions (collectively known as "function creation routines") ** are used to add SQL functions or aggregates or to redefine the behavior -** of existing SQL functions or aggregates. The only difference between the -** two is that the second parameter, the name of the (scalar) function or -** aggregate, is encoded in UTF-8 for sqlite3_create_function() and UTF-16 -** for sqlite3_create_function16(). -** -** The first parameter is the [database connection] to which the SQL -** function is to be added. If a single program uses more than one database -** connection internally, then SQL functions must be added individually to -** each database connection. -** -** The second parameter is the name of the SQL function to be created or -** redefined. The length of the name is limited to 255 bytes, exclusive of -** the zero-terminator. Note that the name length limit is in bytes, not -** characters. Any attempt to create a function with a longer name -** will result in [SQLITE_ERROR] being returned. -** -** The third parameter (nArg) +** of existing SQL functions or aggregates. The only differences between +** these routines are the text encoding expected for +** the second parameter (the name of the function being created) +** and the presence or absence of a destructor callback for +** the application data pointer. +** +** ^The first parameter is the [database connection] to which the SQL +** function is to be added. ^If an application uses more than one database +** connection then application-defined SQL functions must be added +** to each database connection separately. +** +** ^The second parameter is the name of the SQL function to be created or +** redefined. ^The length of the name is limited to 255 bytes in a UTF-8 +** representation, exclusive of the zero-terminator. ^Note that the name +** length limit is in UTF-8 bytes, not characters nor UTF-16 bytes. +** ^Any attempt to create a function with a longer name +** will result in [SQLITE_MISUSE] being returned. +** +** ^The third parameter (nArg) ** is the number of arguments that the SQL function or -** aggregate takes. If this parameter is -1, then the SQL function or +** aggregate takes. ^If this parameter is -1, then the SQL function or ** aggregate may take any number of arguments between 0 and the limit ** set by [sqlite3_limit]([SQLITE_LIMIT_FUNCTION_ARG]). If the third ** parameter is less than -1 or greater than 127 then the behavior is ** undefined. ** -** The fourth parameter, eTextRep, specifies what +** ^The fourth parameter, eTextRep, specifies what ** [SQLITE_UTF8 | text encoding] this SQL function prefers for -** its parameters. Any SQL function implementation should be able to work -** work with UTF-8, UTF-16le, or UTF-16be. But some implementations may be -** more efficient with one encoding than another. It is allowed to +** its parameters. Every SQL function implementation must be able to work +** with UTF-8, UTF-16le, or UTF-16be. But some implementations may be +** more efficient with one encoding than another. ^An application may ** invoke sqlite3_create_function() or sqlite3_create_function16() multiple ** times with the same function but with different values of eTextRep. -** When multiple implementations of the same function are available, SQLite +** ^When multiple implementations of the same function are available, SQLite ** will pick the one that involves the least amount of data conversion. ** If there is only a single implementation which does not care what text ** encoding is used, then the fourth argument should be [SQLITE_ANY]. ** -** The fifth parameter is an arbitrary pointer. The implementation of the -** function can gain access to this pointer using [sqlite3_user_data()]. +** ^(The fifth parameter is an arbitrary pointer. The implementation of the +** function can gain access to this pointer using [sqlite3_user_data()].)^ ** -** The seventh, eighth and ninth parameters, xFunc, xStep and xFinal, are +** ^The sixth, seventh and eighth parameters, xFunc, xStep and xFinal, are ** pointers to C-language functions that implement the SQL function or -** aggregate. A scalar SQL function requires an implementation of the xFunc -** callback only, NULL pointers should be passed as the xStep and xFinal -** parameters. An aggregate SQL function requires an implementation of xStep -** and xFinal and NULL should be passed for xFunc. To delete an existing -** SQL function or aggregate, pass NULL for all three function callbacks. -** -** It is permitted to register multiple implementations of the same +** aggregate. ^A scalar SQL function requires an implementation of the xFunc +** callback only; NULL pointers must be passed as the xStep and xFinal +** parameters. ^An aggregate SQL function requires an implementation of xStep +** and xFinal and NULL pointer must be passed for xFunc. ^To delete an existing +** SQL function or aggregate, pass NULL pointers for all three function +** callbacks. +** +** ^(If the ninth parameter to sqlite3_create_function_v2() is not NULL, +** then it is destructor for the application data pointer. +** The destructor is invoked when the function is deleted, either by being +** overloaded or when the database connection closes.)^ +** ^The destructor is also invoked if the call to +** sqlite3_create_function_v2() fails. +** ^When the destructor callback of the tenth parameter is invoked, it +** is passed a single argument which is a copy of the application data +** pointer which was the fifth parameter to sqlite3_create_function_v2(). +** +** ^It is permitted to register multiple implementations of the same ** functions with the same name but with either differing numbers of -** arguments or differing preferred text encodings. SQLite will use -** the implementation most closely matches the way in which the -** SQL function is used. A function implementation with a non-negative +** arguments or differing preferred text encodings. ^SQLite will use +** the implementation that most closely matches the way in which the +** SQL function is used. ^A function implementation with a non-negative ** nArg parameter is a better match than a function implementation with -** a negative nArg. A function where the preferred text encoding +** a negative nArg. ^A function where the preferred text encoding ** matches the database encoding is a better ** match than a function where the encoding is different. -** A function where the encoding difference is between UTF16le and UTF16be +** ^A function where the encoding difference is between UTF16le and UTF16be ** is a closer match than a function where the encoding difference is ** between UTF8 and UTF16. ** -** Built-in functions may be overloaded by new application-defined functions. -** The first application-defined function with a given name overrides all -** built-in functions in the same [database connection] with the same name. -** Subsequent application-defined functions of the same name only override -** prior application-defined functions that are an exact match for the -** number of parameters and preferred encoding. +** ^Built-in functions may be overloaded by new application-defined functions. ** -** An application-defined function is permitted to call other +** ^An application-defined function is permitted to call other ** SQLite interfaces. However, such calls must not ** close the database connection nor finalize or reset the prepared ** statement in which the function is running. -** -** Requirements: -** [H16103] [H16106] [H16109] [H16112] [H16118] [H16121] [H16127] -** [H16130] [H16133] [H16136] [H16139] [H16142] */ -int sqlite3_create_function( +SQLITE_API int sqlite3_create_function( sqlite3 *db, const char *zFunctionName, int nArg, @@ -3163,7 +3849,7 @@ int sqlite3_create_function( void (*xStep)(sqlite3_context*,int,sqlite3_value**), void (*xFinal)(sqlite3_context*) ); -int sqlite3_create_function16( +SQLITE_API int sqlite3_create_function16( sqlite3 *db, const void *zFunctionName, int nArg, @@ -3173,9 +3859,20 @@ int sqlite3_create_function16( void (*xStep)(sqlite3_context*,int,sqlite3_value**), void (*xFinal)(sqlite3_context*) ); +SQLITE_API int sqlite3_create_function_v2( + sqlite3 *db, + const char *zFunctionName, + int nArg, + int eTextRep, + void *pApp, + void (*xFunc)(sqlite3_context*,int,sqlite3_value**), + void (*xStep)(sqlite3_context*,int,sqlite3_value**), + void (*xFinal)(sqlite3_context*), + void(*xDestroy)(void*) +); /* -** CAPI3REF: Text Encodings {H10267} +** CAPI3REF: Text Encodings ** ** These constant define integer codes that represent the various ** text encodings supported by SQLite. @@ -3198,16 +3895,16 @@ int sqlite3_create_function16( ** using these functions, we are not going to tell you what they do. */ #ifndef SQLITE_OMIT_DEPRECATED -SQLITE_DEPRECATED int sqlite3_aggregate_count(sqlite3_context*); -SQLITE_DEPRECATED int sqlite3_expired(sqlite3_stmt*); -SQLITE_DEPRECATED int sqlite3_transfer_bindings(sqlite3_stmt*, sqlite3_stmt*); -SQLITE_DEPRECATED int sqlite3_global_recover(void); -SQLITE_DEPRECATED void sqlite3_thread_cleanup(void); -SQLITE_DEPRECATED int sqlite3_memory_alarm(void(*)(void*,sqlite3_int64,int),void*,sqlite3_int64); +SQLITE_API SQLITE_DEPRECATED int sqlite3_aggregate_count(sqlite3_context*); +SQLITE_API SQLITE_DEPRECATED int sqlite3_expired(sqlite3_stmt*); +SQLITE_API SQLITE_DEPRECATED int sqlite3_transfer_bindings(sqlite3_stmt*, sqlite3_stmt*); +SQLITE_API SQLITE_DEPRECATED int sqlite3_global_recover(void); +SQLITE_API SQLITE_DEPRECATED void sqlite3_thread_cleanup(void); +SQLITE_API SQLITE_DEPRECATED int sqlite3_memory_alarm(void(*)(void*,sqlite3_int64,int),void*,sqlite3_int64); #endif /* -** CAPI3REF: Obtaining SQL Function Parameter Values {H15100} +** CAPI3REF: Obtaining SQL Function Parameter Values ** ** The C-language implementation of SQL functions and aggregates uses ** this set of interface routines to access the parameter values on @@ -3216,7 +3913,7 @@ SQLITE_DEPRECATED int sqlite3_memory_alarm(void(*)(void*,sqlite3_int64,int),void ** The xFunc (for scalar functions) or xStep (for aggregates) parameters ** to [sqlite3_create_function()] and [sqlite3_create_function16()] ** define callbacks that implement the SQL functions and aggregates. -** The 4th parameter to these callbacks is an array of pointers to +** The 3rd parameter to these callbacks is an array of pointers to ** [protected sqlite3_value] objects. There is one [sqlite3_value] object for ** each parameter to the SQL function. These routines are used to ** extract values from the [sqlite3_value] objects. @@ -3225,22 +3922,22 @@ SQLITE_DEPRECATED int sqlite3_memory_alarm(void(*)(void*,sqlite3_int64,int),void ** Any attempt to use these routines on an [unprotected sqlite3_value] ** object results in undefined behavior. ** -** These routines work just like the corresponding [column access functions] +** ^These routines work just like the corresponding [column access functions] ** except that these routines take a single [protected sqlite3_value] object ** pointer instead of a [sqlite3_stmt*] pointer and an integer column number. ** -** The sqlite3_value_text16() interface extracts a UTF-16 string -** in the native byte-order of the host machine. The +** ^The sqlite3_value_text16() interface extracts a UTF-16 string +** in the native byte-order of the host machine. ^The ** sqlite3_value_text16be() and sqlite3_value_text16le() interfaces ** extract UTF-16 strings as big-endian and little-endian respectively. ** -** The sqlite3_value_numeric_type() interface attempts to apply +** ^(The sqlite3_value_numeric_type() interface attempts to apply ** numeric affinity to the value. This means that an attempt is ** made to convert the value to an integer or floating point. If ** such a conversion is possible without loss of information (in other ** words, if the value is a string that looks like a number) ** then the conversion is performed. Otherwise no conversion occurs. -** The [SQLITE_INTEGER | datatype] after conversion is returned. +** The [SQLITE_INTEGER | datatype] after conversion is returned.)^ ** ** Please pay particular attention to the fact that the pointer returned ** from [sqlite3_value_blob()], [sqlite3_value_text()], or @@ -3250,85 +3947,88 @@ SQLITE_DEPRECATED int sqlite3_memory_alarm(void(*)(void*,sqlite3_int64,int),void ** ** These routines must be called from the same thread as ** the SQL function that supplied the [sqlite3_value*] parameters. -** -** Requirements: -** [H15103] [H15106] [H15109] [H15112] [H15115] [H15118] [H15121] [H15124] -** [H15127] [H15130] [H15133] [H15136] */ -const void *sqlite3_value_blob(sqlite3_value*); -int sqlite3_value_bytes(sqlite3_value*); -int sqlite3_value_bytes16(sqlite3_value*); -double sqlite3_value_double(sqlite3_value*); -int sqlite3_value_int(sqlite3_value*); -sqlite3_int64 sqlite3_value_int64(sqlite3_value*); -const unsigned char *sqlite3_value_text(sqlite3_value*); -const void *sqlite3_value_text16(sqlite3_value*); -const void *sqlite3_value_text16le(sqlite3_value*); -const void *sqlite3_value_text16be(sqlite3_value*); -int sqlite3_value_type(sqlite3_value*); -int sqlite3_value_numeric_type(sqlite3_value*); - -/* -** CAPI3REF: Obtain Aggregate Function Context {H16210} -** -** The implementation of aggregate SQL functions use this routine to allocate -** a structure for storing their state. -** -** The first time the sqlite3_aggregate_context() routine is called for a -** particular aggregate, SQLite allocates nBytes of memory, zeroes out that -** memory, and returns a pointer to it. On second and subsequent calls to -** sqlite3_aggregate_context() for the same aggregate function index, -** the same buffer is returned. The implementation of the aggregate can use -** the returned buffer to accumulate data. -** -** SQLite automatically frees the allocated buffer when the aggregate -** query concludes. -** -** The first parameter should be a copy of the +SQLITE_API const void *sqlite3_value_blob(sqlite3_value*); +SQLITE_API int sqlite3_value_bytes(sqlite3_value*); +SQLITE_API int sqlite3_value_bytes16(sqlite3_value*); +SQLITE_API double sqlite3_value_double(sqlite3_value*); +SQLITE_API int sqlite3_value_int(sqlite3_value*); +SQLITE_API sqlite3_int64 sqlite3_value_int64(sqlite3_value*); +SQLITE_API const unsigned char *sqlite3_value_text(sqlite3_value*); +SQLITE_API const void *sqlite3_value_text16(sqlite3_value*); +SQLITE_API const void *sqlite3_value_text16le(sqlite3_value*); +SQLITE_API const void *sqlite3_value_text16be(sqlite3_value*); +SQLITE_API int sqlite3_value_type(sqlite3_value*); +SQLITE_API int sqlite3_value_numeric_type(sqlite3_value*); + +/* +** CAPI3REF: Obtain Aggregate Function Context +** +** Implementations of aggregate SQL functions use this +** routine to allocate memory for storing their state. +** +** ^The first time the sqlite3_aggregate_context(C,N) routine is called +** for a particular aggregate function, SQLite +** allocates N of memory, zeroes out that memory, and returns a pointer +** to the new memory. ^On second and subsequent calls to +** sqlite3_aggregate_context() for the same aggregate function instance, +** the same buffer is returned. Sqlite3_aggregate_context() is normally +** called once for each invocation of the xStep callback and then one +** last time when the xFinal callback is invoked. ^(When no rows match +** an aggregate query, the xStep() callback of the aggregate function +** implementation is never called and xFinal() is called exactly once. +** In those cases, sqlite3_aggregate_context() might be called for the +** first time from within xFinal().)^ +** +** ^The sqlite3_aggregate_context(C,N) routine returns a NULL pointer if N is +** less than or equal to zero or if a memory allocate error occurs. +** +** ^(The amount of space allocated by sqlite3_aggregate_context(C,N) is +** determined by the N parameter on first successful call. Changing the +** value of N in subsequent call to sqlite3_aggregate_context() within +** the same aggregate function instance will not resize the memory +** allocation.)^ +** +** ^SQLite automatically frees the memory allocated by +** sqlite3_aggregate_context() when the aggregate query concludes. +** +** The first parameter must be a copy of the ** [sqlite3_context | SQL function context] that is the first parameter -** to the callback routine that implements the aggregate function. +** to the xStep or xFinal callback routine that implements the aggregate +** function. ** ** This routine must be called from the same thread in which ** the aggregate SQL function is running. -** -** Requirements: -** [H16211] [H16213] [H16215] [H16217] */ -void *sqlite3_aggregate_context(sqlite3_context*, int nBytes); +SQLITE_API void *sqlite3_aggregate_context(sqlite3_context*, int nBytes); /* -** CAPI3REF: User Data For Functions {H16240} +** CAPI3REF: User Data For Functions ** -** The sqlite3_user_data() interface returns a copy of +** ^The sqlite3_user_data() interface returns a copy of ** the pointer that was the pUserData parameter (the 5th parameter) ** of the [sqlite3_create_function()] ** and [sqlite3_create_function16()] routines that originally -** registered the application defined function. {END} +** registered the application defined function. ** ** This routine must be called from the same thread in which ** the application-defined function is running. -** -** Requirements: -** [H16243] */ -void *sqlite3_user_data(sqlite3_context*); +SQLITE_API void *sqlite3_user_data(sqlite3_context*); /* -** CAPI3REF: Database Connection For Functions {H16250} +** CAPI3REF: Database Connection For Functions ** -** The sqlite3_context_db_handle() interface returns a copy of +** ^The sqlite3_context_db_handle() interface returns a copy of ** the pointer to the [database connection] (the 1st parameter) ** of the [sqlite3_create_function()] ** and [sqlite3_create_function16()] routines that originally ** registered the application defined function. -** -** Requirements: -** [H16253] */ -sqlite3 *sqlite3_context_db_handle(sqlite3_context*); +SQLITE_API sqlite3 *sqlite3_context_db_handle(sqlite3_context*); /* -** CAPI3REF: Function Auxiliary Data {H16270} +** CAPI3REF: Function Auxiliary Data ** ** The following two functions may be used by scalar SQL functions to ** associate metadata with argument values. If the same value is passed to @@ -3341,48 +4041,45 @@ sqlite3 *sqlite3_context_db_handle(sqlite3_context*); ** invocations of the same function so that the original pattern string ** does not need to be recompiled on each invocation. ** -** The sqlite3_get_auxdata() interface returns a pointer to the metadata +** ^The sqlite3_get_auxdata() interface returns a pointer to the metadata ** associated by the sqlite3_set_auxdata() function with the Nth argument -** value to the application-defined function. If no metadata has been ever +** value to the application-defined function. ^If no metadata has been ever ** been set for the Nth argument of the function, or if the corresponding ** function parameter has changed since the meta-data was set, ** then sqlite3_get_auxdata() returns a NULL pointer. ** -** The sqlite3_set_auxdata() interface saves the metadata +** ^The sqlite3_set_auxdata() interface saves the metadata ** pointed to by its 3rd parameter as the metadata for the N-th ** argument of the application-defined function. Subsequent ** calls to sqlite3_get_auxdata() might return this data, if it has ** not been destroyed. -** If it is not NULL, SQLite will invoke the destructor +** ^If it is not NULL, SQLite will invoke the destructor ** function given by the 4th parameter to sqlite3_set_auxdata() on ** the metadata when the corresponding function parameter changes ** or when the SQL statement completes, whichever comes first. ** ** SQLite is free to call the destructor and drop metadata on any -** parameter of any function at any time. The only guarantee is that +** parameter of any function at any time. ^The only guarantee is that ** the destructor will be called before the metadata is dropped. ** -** In practice, metadata is preserved between function calls for +** ^(In practice, metadata is preserved between function calls for ** expressions that are constant at compile time. This includes literal -** values and SQL variables. +** values and [parameters].)^ ** ** These routines must be called from the same thread in which ** the SQL function is running. -** -** Requirements: -** [H16272] [H16274] [H16276] [H16277] [H16278] [H16279] */ -void *sqlite3_get_auxdata(sqlite3_context*, int N); -void sqlite3_set_auxdata(sqlite3_context*, int N, void*, void (*)(void*)); +SQLITE_API void *sqlite3_get_auxdata(sqlite3_context*, int N); +SQLITE_API void sqlite3_set_auxdata(sqlite3_context*, int N, void*, void (*)(void*)); /* -** CAPI3REF: Constants Defining Special Destructor Behavior {H10280} +** CAPI3REF: Constants Defining Special Destructor Behavior ** ** These are special values for the destructor that is passed in as the -** final argument to routines like [sqlite3_result_blob()]. If the destructor +** final argument to routines like [sqlite3_result_blob()]. ^If the destructor ** argument is SQLITE_STATIC, it means that the content pointer is constant -** and will never change. It does not need to be destroyed. The +** and will never change. It does not need to be destroyed. ^The ** SQLITE_TRANSIENT value means that the content will likely change in ** the near future and that SQLite should make its own private copy of ** the content before returning. @@ -3395,7 +4092,7 @@ typedef void (*sqlite3_destructor_type)(void*); #define SQLITE_TRANSIENT ((sqlite3_destructor_type)-1) /* -** CAPI3REF: Setting The Result Of An SQL Function {H16400} +** CAPI3REF: Setting The Result Of An SQL Function ** ** These routines are used by the xFunc or xFinal callbacks that ** implement SQL functions and aggregates. See @@ -3406,233 +4103,261 @@ typedef void (*sqlite3_destructor_type)(void*); ** functions used to bind values to host parameters in prepared statements. ** Refer to the [SQL parameter] documentation for additional information. ** -** The sqlite3_result_blob() interface sets the result from +** ^The sqlite3_result_blob() interface sets the result from ** an application-defined function to be the BLOB whose content is pointed ** to by the second parameter and which is N bytes long where N is the ** third parameter. ** -** The sqlite3_result_zeroblob() interfaces set the result of +** ^The sqlite3_result_zeroblob() interfaces set the result of ** the application-defined function to be a BLOB containing all zero ** bytes and N bytes in size, where N is the value of the 2nd parameter. ** -** The sqlite3_result_double() interface sets the result from +** ^The sqlite3_result_double() interface sets the result from ** an application-defined function to be a floating point value specified ** by its 2nd argument. ** -** The sqlite3_result_error() and sqlite3_result_error16() functions +** ^The sqlite3_result_error() and sqlite3_result_error16() functions ** cause the implemented SQL function to throw an exception. -** SQLite uses the string pointed to by the +** ^SQLite uses the string pointed to by the ** 2nd parameter of sqlite3_result_error() or sqlite3_result_error16() -** as the text of an error message. SQLite interprets the error -** message string from sqlite3_result_error() as UTF-8. SQLite +** as the text of an error message. ^SQLite interprets the error +** message string from sqlite3_result_error() as UTF-8. ^SQLite ** interprets the string from sqlite3_result_error16() as UTF-16 in native -** byte order. If the third parameter to sqlite3_result_error() +** byte order. ^If the third parameter to sqlite3_result_error() ** or sqlite3_result_error16() is negative then SQLite takes as the error ** message all text up through the first zero character. -** If the third parameter to sqlite3_result_error() or +** ^If the third parameter to sqlite3_result_error() or ** sqlite3_result_error16() is non-negative then SQLite takes that many ** bytes (not characters) from the 2nd parameter as the error message. -** The sqlite3_result_error() and sqlite3_result_error16() +** ^The sqlite3_result_error() and sqlite3_result_error16() ** routines make a private copy of the error message text before ** they return. Hence, the calling function can deallocate or ** modify the text after they return without harm. -** The sqlite3_result_error_code() function changes the error code -** returned by SQLite as a result of an error in a function. By default, -** the error code is SQLITE_ERROR. A subsequent call to sqlite3_result_error() +** ^The sqlite3_result_error_code() function changes the error code +** returned by SQLite as a result of an error in a function. ^By default, +** the error code is SQLITE_ERROR. ^A subsequent call to sqlite3_result_error() ** or sqlite3_result_error16() resets the error code to SQLITE_ERROR. ** -** The sqlite3_result_toobig() interface causes SQLite to throw an error -** indicating that a string or BLOB is to long to represent. +** ^The sqlite3_result_toobig() interface causes SQLite to throw an error +** indicating that a string or BLOB is too long to represent. ** -** The sqlite3_result_nomem() interface causes SQLite to throw an error +** ^The sqlite3_result_nomem() interface causes SQLite to throw an error ** indicating that a memory allocation failed. ** -** The sqlite3_result_int() interface sets the return value +** ^The sqlite3_result_int() interface sets the return value ** of the application-defined function to be the 32-bit signed integer ** value given in the 2nd argument. -** The sqlite3_result_int64() interface sets the return value +** ^The sqlite3_result_int64() interface sets the return value ** of the application-defined function to be the 64-bit signed integer ** value given in the 2nd argument. ** -** The sqlite3_result_null() interface sets the return value +** ^The sqlite3_result_null() interface sets the return value ** of the application-defined function to be NULL. ** -** The sqlite3_result_text(), sqlite3_result_text16(), +** ^The sqlite3_result_text(), sqlite3_result_text16(), ** sqlite3_result_text16le(), and sqlite3_result_text16be() interfaces ** set the return value of the application-defined function to be ** a text string which is represented as UTF-8, UTF-16 native byte order, ** UTF-16 little endian, or UTF-16 big endian, respectively. -** SQLite takes the text result from the application from +** ^SQLite takes the text result from the application from ** the 2nd parameter of the sqlite3_result_text* interfaces. -** If the 3rd parameter to the sqlite3_result_text* interfaces +** ^If the 3rd parameter to the sqlite3_result_text* interfaces ** is negative, then SQLite takes result text from the 2nd parameter ** through the first zero character. -** If the 3rd parameter to the sqlite3_result_text* interfaces +** ^If the 3rd parameter to the sqlite3_result_text* interfaces ** is non-negative, then as many bytes (not characters) of the text ** pointed to by the 2nd parameter are taken as the application-defined -** function result. -** If the 4th parameter to the sqlite3_result_text* interfaces +** function result. If the 3rd parameter is non-negative, then it +** must be the byte offset into the string where the NUL terminator would +** appear if the string where NUL terminated. If any NUL characters occur +** in the string at a byte offset that is less than the value of the 3rd +** parameter, then the resulting string will contain embedded NULs and the +** result of expressions operating on strings with embedded NULs is undefined. +** ^If the 4th parameter to the sqlite3_result_text* interfaces ** or sqlite3_result_blob is a non-NULL pointer, then SQLite calls that ** function as the destructor on the text or BLOB result when it has ** finished using that result. -** If the 4th parameter to the sqlite3_result_text* interfaces or +** ^If the 4th parameter to the sqlite3_result_text* interfaces or to ** sqlite3_result_blob is the special constant SQLITE_STATIC, then SQLite ** assumes that the text or BLOB result is in constant space and does not -** copy the it or call a destructor when it has finished using that result. -** If the 4th parameter to the sqlite3_result_text* interfaces +** copy the content of the parameter nor call a destructor on the content +** when it has finished using that result. +** ^If the 4th parameter to the sqlite3_result_text* interfaces ** or sqlite3_result_blob is the special constant SQLITE_TRANSIENT ** then SQLite makes a copy of the result into space obtained from ** from [sqlite3_malloc()] before it returns. ** -** The sqlite3_result_value() interface sets the result of +** ^The sqlite3_result_value() interface sets the result of ** the application-defined function to be a copy the -** [unprotected sqlite3_value] object specified by the 2nd parameter. The +** [unprotected sqlite3_value] object specified by the 2nd parameter. ^The ** sqlite3_result_value() interface makes a copy of the [sqlite3_value] ** so that the [sqlite3_value] specified in the parameter may change or ** be deallocated after sqlite3_result_value() returns without harm. -** A [protected sqlite3_value] object may always be used where an +** ^A [protected sqlite3_value] object may always be used where an ** [unprotected sqlite3_value] object is required, so either ** kind of [sqlite3_value] object can be used with this interface. ** ** If these routines are called from within the different thread ** than the one containing the application-defined function that received ** the [sqlite3_context] pointer, the results are undefined. -** -** Requirements: -** [H16403] [H16406] [H16409] [H16412] [H16415] [H16418] [H16421] [H16424] -** [H16427] [H16430] [H16433] [H16436] [H16439] [H16442] [H16445] [H16448] -** [H16451] [H16454] [H16457] [H16460] [H16463] -*/ -void sqlite3_result_blob(sqlite3_context*, const void*, int, void(*)(void*)); -void sqlite3_result_double(sqlite3_context*, double); -void sqlite3_result_error(sqlite3_context*, const char*, int); -void sqlite3_result_error16(sqlite3_context*, const void*, int); -void sqlite3_result_error_toobig(sqlite3_context*); -void sqlite3_result_error_nomem(sqlite3_context*); -void sqlite3_result_error_code(sqlite3_context*, int); -void sqlite3_result_int(sqlite3_context*, int); -void sqlite3_result_int64(sqlite3_context*, sqlite3_int64); -void sqlite3_result_null(sqlite3_context*); -void sqlite3_result_text(sqlite3_context*, const char*, int, void(*)(void*)); -void sqlite3_result_text16(sqlite3_context*, const void*, int, void(*)(void*)); -void sqlite3_result_text16le(sqlite3_context*, const void*, int,void(*)(void*)); -void sqlite3_result_text16be(sqlite3_context*, const void*, int,void(*)(void*)); -void sqlite3_result_value(sqlite3_context*, sqlite3_value*); -void sqlite3_result_zeroblob(sqlite3_context*, int n); - -/* -** CAPI3REF: Define New Collating Sequences {H16600} -** -** These functions are used to add new collation sequences to the -** [database connection] specified as the first argument. -** -** The name of the new collation sequence is specified as a UTF-8 string +*/ +SQLITE_API void sqlite3_result_blob(sqlite3_context*, const void*, int, void(*)(void*)); +SQLITE_API void sqlite3_result_double(sqlite3_context*, double); +SQLITE_API void sqlite3_result_error(sqlite3_context*, const char*, int); +SQLITE_API void sqlite3_result_error16(sqlite3_context*, const void*, int); +SQLITE_API void sqlite3_result_error_toobig(sqlite3_context*); +SQLITE_API void sqlite3_result_error_nomem(sqlite3_context*); +SQLITE_API void sqlite3_result_error_code(sqlite3_context*, int); +SQLITE_API void sqlite3_result_int(sqlite3_context*, int); +SQLITE_API void sqlite3_result_int64(sqlite3_context*, sqlite3_int64); +SQLITE_API void sqlite3_result_null(sqlite3_context*); +SQLITE_API void sqlite3_result_text(sqlite3_context*, const char*, int, void(*)(void*)); +SQLITE_API void sqlite3_result_text16(sqlite3_context*, const void*, int, void(*)(void*)); +SQLITE_API void sqlite3_result_text16le(sqlite3_context*, const void*, int,void(*)(void*)); +SQLITE_API void sqlite3_result_text16be(sqlite3_context*, const void*, int,void(*)(void*)); +SQLITE_API void sqlite3_result_value(sqlite3_context*, sqlite3_value*); +SQLITE_API void sqlite3_result_zeroblob(sqlite3_context*, int n); + +/* +** CAPI3REF: Define New Collating Sequences +** +** ^These functions add, remove, or modify a [collation] associated +** with the [database connection] specified as the first argument. +** +** ^The name of the collation is a UTF-8 string ** for sqlite3_create_collation() and sqlite3_create_collation_v2() -** and a UTF-16 string for sqlite3_create_collation16(). In all cases -** the name is passed as the second function argument. -** -** The third argument may be one of the constants [SQLITE_UTF8], -** [SQLITE_UTF16LE], or [SQLITE_UTF16BE], indicating that the user-supplied -** routine expects to be passed pointers to strings encoded using UTF-8, -** UTF-16 little-endian, or UTF-16 big-endian, respectively. The -** third argument might also be [SQLITE_UTF16] to indicate that the routine -** expects pointers to be UTF-16 strings in the native byte order, or the -** argument can be [SQLITE_UTF16_ALIGNED] if the -** the routine expects pointers to 16-bit word aligned strings -** of UTF-16 in the native byte order. -** -** A pointer to the user supplied routine must be passed as the fifth -** argument. If it is NULL, this is the same as deleting the collation -** sequence (so that SQLite cannot call it anymore). -** Each time the application supplied function is invoked, it is passed -** as its first parameter a copy of the void* passed as the fourth argument -** to sqlite3_create_collation() or sqlite3_create_collation16(). -** -** The remaining arguments to the application-supplied routine are two strings, -** each represented by a (length, data) pair and encoded in the encoding -** that was passed as the third argument when the collation sequence was -** registered. {END} The application defined collation routine should -** return negative, zero or positive if the first string is less than, -** equal to, or greater than the second string. i.e. (STRING1 - STRING2). -** -** The sqlite3_create_collation_v2() works like sqlite3_create_collation() -** except that it takes an extra argument which is a destructor for -** the collation. The destructor is called when the collation is -** destroyed and is passed a copy of the fourth parameter void* pointer -** of the sqlite3_create_collation_v2(). -** Collations are destroyed when they are overridden by later calls to the -** collation creation functions or when the [database connection] is closed -** using [sqlite3_close()]. +** and a UTF-16 string in native byte order for sqlite3_create_collation16(). +** ^Collation names that compare equal according to [sqlite3_strnicmp()] are +** considered to be the same name. ** -** See also: [sqlite3_collation_needed()] and [sqlite3_collation_needed16()]. +** ^(The third argument (eTextRep) must be one of the constants: +**
      +**
    • [SQLITE_UTF8], +**
    • [SQLITE_UTF16LE], +**
    • [SQLITE_UTF16BE], +**
    • [SQLITE_UTF16], or +**
    • [SQLITE_UTF16_ALIGNED]. +**
    )^ +** ^The eTextRep argument determines the encoding of strings passed +** to the collating function callback, xCallback. +** ^The [SQLITE_UTF16] and [SQLITE_UTF16_ALIGNED] values for eTextRep +** force strings to be UTF16 with native byte order. +** ^The [SQLITE_UTF16_ALIGNED] value for eTextRep forces strings to begin +** on an even byte address. +** +** ^The fourth argument, pArg, is an application data pointer that is passed +** through as the first argument to the collating function callback. +** +** ^The fifth argument, xCallback, is a pointer to the collating function. +** ^Multiple collating functions can be registered using the same name but +** with different eTextRep parameters and SQLite will use whichever +** function requires the least amount of data transformation. +** ^If the xCallback argument is NULL then the collating function is +** deleted. ^When all collating functions having the same name are deleted, +** that collation is no longer usable. +** +** ^The collating function callback is invoked with a copy of the pArg +** application data pointer and with two strings in the encoding specified +** by the eTextRep argument. The collating function must return an +** integer that is negative, zero, or positive +** if the first string is less than, equal to, or greater than the second, +** respectively. A collating function must always return the same answer +** given the same inputs. If two or more collating functions are registered +** to the same collation name (using different eTextRep values) then all +** must give an equivalent answer when invoked with equivalent strings. +** The collating function must obey the following properties for all +** strings A, B, and C: +** +**
      +**
    1. If A==B then B==A. +**
    2. If A==B and B==C then A==C. +**
    3. If A<B THEN B>A. +**
    4. If A<B and B<C then A<C. +**
    ** -** Requirements: -** [H16603] [H16604] [H16606] [H16609] [H16612] [H16615] [H16618] [H16621] -** [H16624] [H16627] [H16630] +** If a collating function fails any of the above constraints and that +** collating function is registered and used, then the behavior of SQLite +** is undefined. +** +** ^The sqlite3_create_collation_v2() works like sqlite3_create_collation() +** with the addition that the xDestroy callback is invoked on pArg when +** the collating function is deleted. +** ^Collating functions are deleted when they are overridden by later +** calls to the collation creation functions or when the +** [database connection] is closed using [sqlite3_close()]. +** +** ^The xDestroy callback is not called if the +** sqlite3_create_collation_v2() function fails. Applications that invoke +** sqlite3_create_collation_v2() with a non-NULL xDestroy argument should +** check the return code and dispose of the application data pointer +** themselves rather than expecting SQLite to deal with it for them. +** This is different from every other SQLite interface. The inconsistency +** is unfortunate but cannot be changed without breaking backwards +** compatibility. +** +** See also: [sqlite3_collation_needed()] and [sqlite3_collation_needed16()]. */ -int sqlite3_create_collation( +SQLITE_API int sqlite3_create_collation( sqlite3*, const char *zName, int eTextRep, - void*, + void *pArg, int(*xCompare)(void*,int,const void*,int,const void*) ); -int sqlite3_create_collation_v2( +SQLITE_API int sqlite3_create_collation_v2( sqlite3*, const char *zName, int eTextRep, - void*, + void *pArg, int(*xCompare)(void*,int,const void*,int,const void*), void(*xDestroy)(void*) ); -int sqlite3_create_collation16( +SQLITE_API int sqlite3_create_collation16( sqlite3*, const void *zName, int eTextRep, - void*, + void *pArg, int(*xCompare)(void*,int,const void*,int,const void*) ); /* -** CAPI3REF: Collation Needed Callbacks {H16700} +** CAPI3REF: Collation Needed Callbacks ** -** To avoid having to register all collation sequences before a database +** ^To avoid having to register all collation sequences before a database ** can be used, a single callback function may be registered with the -** [database connection] to be called whenever an undefined collation +** [database connection] to be invoked whenever an undefined collation ** sequence is required. ** -** If the function is registered using the sqlite3_collation_needed() API, +** ^If the function is registered using the sqlite3_collation_needed() API, ** then it is passed the names of undefined collation sequences as strings -** encoded in UTF-8. {H16703} If sqlite3_collation_needed16() is used, +** encoded in UTF-8. ^If sqlite3_collation_needed16() is used, ** the names are passed as UTF-16 in machine native byte order. -** A call to either function replaces any existing callback. +** ^A call to either function replaces the existing collation-needed callback. ** -** When the callback is invoked, the first argument passed is a copy +** ^(When the callback is invoked, the first argument passed is a copy ** of the second argument to sqlite3_collation_needed() or ** sqlite3_collation_needed16(). The second argument is the database ** connection. The third argument is one of [SQLITE_UTF8], [SQLITE_UTF16BE], ** or [SQLITE_UTF16LE], indicating the most desirable form of the collation ** sequence function required. The fourth parameter is the name of the -** required collation sequence. +** required collation sequence.)^ ** ** The callback function should register the desired collation using ** [sqlite3_create_collation()], [sqlite3_create_collation16()], or ** [sqlite3_create_collation_v2()]. -** -** Requirements: -** [H16702] [H16704] [H16706] */ -int sqlite3_collation_needed( +SQLITE_API int sqlite3_collation_needed( sqlite3*, void*, void(*)(void*,sqlite3*,int eTextRep,const char*) ); -int sqlite3_collation_needed16( +SQLITE_API int sqlite3_collation_needed16( sqlite3*, void*, void(*)(void*,sqlite3*,int eTextRep,const void*) ); +#ifdef SQLITE_HAS_CODEC /* ** Specify the key for an encrypted database. This routine should be ** called right after sqlite3_open(). @@ -3640,7 +4365,7 @@ int sqlite3_collation_needed16( ** The code to implement this API is not available in the public release ** of SQLite. */ -int sqlite3_key( +SQLITE_API int sqlite3_key( sqlite3 *db, /* Database to be rekeyed */ const void *pKey, int nKey /* The key */ ); @@ -3653,13 +4378,32 @@ int sqlite3_key( ** The code to implement this API is not available in the public release ** of SQLite. */ -int sqlite3_rekey( +SQLITE_API int sqlite3_rekey( sqlite3 *db, /* Database to be rekeyed */ const void *pKey, int nKey /* The new key */ ); /* -** CAPI3REF: Suspend Execution For A Short Time {H10530} +** Specify the activation key for a SEE database. Unless +** activated, none of the SEE routines will work. +*/ +SQLITE_API void sqlite3_activate_see( + const char *zPassPhrase /* Activation phrase */ +); +#endif + +#ifdef SQLITE_ENABLE_CEROD +/* +** Specify the activation key for a CEROD database. Unless +** activated, none of the CEROD routines will work. +*/ +SQLITE_API void sqlite3_activate_cerod( + const char *zPassPhrase /* Activation phrase */ +); +#endif + +/* +** CAPI3REF: Suspend Execution For A Short Time ** ** The sqlite3_sleep() function causes the current thread to suspend execution ** for at least a number of milliseconds specified in its parameter. @@ -3669,19 +4413,21 @@ int sqlite3_rekey( ** the nearest second. The number of milliseconds of sleep actually ** requested from the operating system is returned. ** -** SQLite implements this interface by calling the xSleep() -** method of the default [sqlite3_vfs] object. -** -** Requirements: [H10533] [H10536] +** ^SQLite implements this interface by calling the xSleep() +** method of the default [sqlite3_vfs] object. If the xSleep() method +** of the default VFS is not implemented correctly, or not implemented at +** all, then the behavior of sqlite3_sleep() may deviate from the description +** in the previous paragraphs. */ -int sqlite3_sleep(int); +SQLITE_API int sqlite3_sleep(int); /* -** CAPI3REF: Name Of The Folder Holding Temporary Files {H10310} +** CAPI3REF: Name Of The Folder Holding Temporary Files ** -** If this global variable is made to point to a string which is +** ^(If this global variable is made to point to a string which is ** the name of a folder (a.k.a. directory), then all temporary files -** created by SQLite will be placed in that directory. If this variable +** created by SQLite when using a built-in [sqlite3_vfs | VFS] +** will be placed in that directory.)^ ^If this variable ** is a NULL pointer, then SQLite performs a search for an appropriate ** temporary file directory. ** @@ -3694,8 +4440,8 @@ int sqlite3_sleep(int); ** routines have been called and that this variable remain unchanged ** thereafter. ** -** The [temp_store_directory pragma] may modify this variable and cause -** it to point to memory obtained from [sqlite3_malloc]. Furthermore, +** ^The [temp_store_directory pragma] may modify this variable and cause +** it to point to memory obtained from [sqlite3_malloc]. ^Furthermore, ** the [temp_store_directory pragma] always assumes that any string ** that this variable points to is held in memory obtained from ** [sqlite3_malloc] and the pragma may attempt to free that memory @@ -3704,17 +4450,54 @@ int sqlite3_sleep(int); ** made NULL or made to point to memory obtained from [sqlite3_malloc] ** or else the use of the [temp_store_directory pragma] should be avoided. */ -SQLITE_EXTERN char *sqlite3_temp_directory; +SQLITE_API SQLITE_EXTERN char *sqlite3_temp_directory; + +/* +** CAPI3REF: Name Of The Folder Holding Database Files +** +** ^(If this global variable is made to point to a string which is +** the name of a folder (a.k.a. directory), then all database files +** specified with a relative pathname and created or accessed by +** SQLite when using a built-in windows [sqlite3_vfs | VFS] will be assumed +** to be relative to that directory.)^ ^If this variable is a NULL +** pointer, then SQLite assumes that all database files specified +** with a relative pathname are relative to the current directory +** for the process. Only the windows VFS makes use of this global +** variable; it is ignored by the unix VFS. +** +** Changing the value of this variable while a database connection is +** open can result in a corrupt database. +** +** It is not safe to read or modify this variable in more than one +** thread at a time. It is not safe to read or modify this variable +** if a [database connection] is being used at the same time in a separate +** thread. +** It is intended that this variable be set once +** as part of process initialization and before any SQLite interface +** routines have been called and that this variable remain unchanged +** thereafter. +** +** ^The [data_store_directory pragma] may modify this variable and cause +** it to point to memory obtained from [sqlite3_malloc]. ^Furthermore, +** the [data_store_directory pragma] always assumes that any string +** that this variable points to is held in memory obtained from +** [sqlite3_malloc] and the pragma may attempt to free that memory +** using [sqlite3_free]. +** Hence, if this variable is modified directly, either it should be +** made NULL or made to point to memory obtained from [sqlite3_malloc] +** or else the use of the [data_store_directory pragma] should be avoided. +*/ +SQLITE_API SQLITE_EXTERN char *sqlite3_data_directory; /* -** CAPI3REF: Test For Auto-Commit Mode {H12930} +** CAPI3REF: Test For Auto-Commit Mode ** KEYWORDS: {autocommit mode} ** -** The sqlite3_get_autocommit() interface returns non-zero or +** ^The sqlite3_get_autocommit() interface returns non-zero or ** zero if the given database connection is or is not in autocommit mode, -** respectively. Autocommit mode is on by default. -** Autocommit mode is disabled by a [BEGIN] statement. -** Autocommit mode is re-enabled by a [COMMIT] or [ROLLBACK]. +** respectively. ^Autocommit mode is on by default. +** ^Autocommit mode is disabled by a [BEGIN] statement. +** ^Autocommit mode is re-enabled by a [COMMIT] or [ROLLBACK]. ** ** If certain kinds of errors occur on a statement within a multi-statement ** transaction (errors including [SQLITE_FULL], [SQLITE_IOERR], @@ -3726,120 +4509,137 @@ SQLITE_EXTERN char *sqlite3_temp_directory; ** If another thread changes the autocommit status of the database ** connection while this routine is running, then the return value ** is undefined. -** -** Requirements: [H12931] [H12932] [H12933] [H12934] */ -int sqlite3_get_autocommit(sqlite3*); +SQLITE_API int sqlite3_get_autocommit(sqlite3*); /* -** CAPI3REF: Find The Database Handle Of A Prepared Statement {H13120} +** CAPI3REF: Find The Database Handle Of A Prepared Statement ** -** The sqlite3_db_handle interface returns the [database connection] handle -** to which a [prepared statement] belongs. The [database connection] -** returned by sqlite3_db_handle is the same [database connection] that was the first argument +** ^The sqlite3_db_handle interface returns the [database connection] handle +** to which a [prepared statement] belongs. ^The [database connection] +** returned by sqlite3_db_handle is the same [database connection] +** that was the first argument ** to the [sqlite3_prepare_v2()] call (or its variants) that was used to ** create the statement in the first place. +*/ +SQLITE_API sqlite3 *sqlite3_db_handle(sqlite3_stmt*); + +/* +** CAPI3REF: Return The Filename For A Database Connection +** +** ^The sqlite3_db_filename(D,N) interface returns a pointer to a filename +** associated with database N of connection D. ^The main database file +** has the name "main". If there is no attached database N on the database +** connection D, or if database N is a temporary or in-memory database, then +** a NULL pointer is returned. +** +** ^The filename returned by this function is the output of the +** xFullPathname method of the [VFS]. ^In other words, the filename +** will be an absolute pathname, even if the filename used +** to open the database originally was a URI or relative pathname. +*/ +SQLITE_API const char *sqlite3_db_filename(sqlite3 *db, const char *zDbName); + +/* +** CAPI3REF: Determine if a database is read-only ** -** Requirements: [H13123] +** ^The sqlite3_db_readonly(D,N) interface returns 1 if the database N +** of connection D is read-only, 0 if it is read/write, or -1 if N is not +** the name of a database on connection D. */ -sqlite3 *sqlite3_db_handle(sqlite3_stmt*); +SQLITE_API int sqlite3_db_readonly(sqlite3 *db, const char *zDbName); /* -** CAPI3REF: Find the next prepared statement {H13140} +** CAPI3REF: Find the next prepared statement ** -** This interface returns a pointer to the next [prepared statement] after -** pStmt associated with the [database connection] pDb. If pStmt is NULL +** ^This interface returns a pointer to the next [prepared statement] after +** pStmt associated with the [database connection] pDb. ^If pStmt is NULL ** then this interface returns a pointer to the first prepared statement -** associated with the database connection pDb. If no prepared statement +** associated with the database connection pDb. ^If no prepared statement ** satisfies the conditions of this routine, it returns NULL. ** ** The [database connection] pointer D in a call to ** [sqlite3_next_stmt(D,S)] must refer to an open database ** connection and in particular must not be a NULL pointer. -** -** Requirements: [H13143] [H13146] [H13149] [H13152] */ -sqlite3_stmt *sqlite3_next_stmt(sqlite3 *pDb, sqlite3_stmt *pStmt); +SQLITE_API sqlite3_stmt *sqlite3_next_stmt(sqlite3 *pDb, sqlite3_stmt *pStmt); /* -** CAPI3REF: Commit And Rollback Notification Callbacks {H12950} +** CAPI3REF: Commit And Rollback Notification Callbacks ** -** The sqlite3_commit_hook() interface registers a callback +** ^The sqlite3_commit_hook() interface registers a callback ** function to be invoked whenever a transaction is [COMMIT | committed]. -** Any callback set by a previous call to sqlite3_commit_hook() +** ^Any callback set by a previous call to sqlite3_commit_hook() ** for the same database connection is overridden. -** The sqlite3_rollback_hook() interface registers a callback +** ^The sqlite3_rollback_hook() interface registers a callback ** function to be invoked whenever a transaction is [ROLLBACK | rolled back]. -** Any callback set by a previous call to sqlite3_commit_hook() +** ^Any callback set by a previous call to sqlite3_rollback_hook() ** for the same database connection is overridden. -** The pArg argument is passed through to the callback. -** If the callback on a commit hook function returns non-zero, +** ^The pArg argument is passed through to the callback. +** ^If the callback on a commit hook function returns non-zero, ** then the commit is converted into a rollback. ** -** If another function was previously registered, its -** pArg value is returned. Otherwise NULL is returned. +** ^The sqlite3_commit_hook(D,C,P) and sqlite3_rollback_hook(D,C,P) functions +** return the P argument from the previous call of the same function +** on the same [database connection] D, or NULL for +** the first call for each function on D. ** +** The commit and rollback hook callbacks are not reentrant. ** The callback implementation must not do anything that will modify ** the database connection that invoked the callback. Any actions ** to modify the database connection must be deferred until after the ** completion of the [sqlite3_step()] call that triggered the commit ** or rollback hook in the first place. -** Note that [sqlite3_prepare_v2()] and [sqlite3_step()] both modify their -** database connections for the meaning of "modify" in this paragraph. +** Note that running any other SQL statements, including SELECT statements, +** or merely calling [sqlite3_prepare_v2()] and [sqlite3_step()] will modify +** the database connections for the meaning of "modify" in this paragraph. ** -** Registering a NULL function disables the callback. +** ^Registering a NULL function disables the callback. ** -** When the commit hook callback routine returns zero, the [COMMIT] -** operation is allowed to continue normally. If the commit hook +** ^When the commit hook callback routine returns zero, the [COMMIT] +** operation is allowed to continue normally. ^If the commit hook ** returns non-zero, then the [COMMIT] is converted into a [ROLLBACK]. -** The rollback hook is invoked on a rollback that results from a commit +** ^The rollback hook is invoked on a rollback that results from a commit ** hook returning non-zero, just as it would be with any other rollback. ** -** For the purposes of this API, a transaction is said to have been +** ^For the purposes of this API, a transaction is said to have been ** rolled back if an explicit "ROLLBACK" statement is executed, or ** an error or constraint causes an implicit rollback to occur. -** The rollback callback is not invoked if a transaction is +** ^The rollback callback is not invoked if a transaction is ** automatically rolled back because the database connection is closed. -** The rollback callback is not invoked if a transaction is -** rolled back because a commit callback returned non-zero. -** Check on this ** ** See also the [sqlite3_update_hook()] interface. -** -** Requirements: -** [H12951] [H12952] [H12953] [H12954] [H12955] -** [H12961] [H12962] [H12963] [H12964] */ -void *sqlite3_commit_hook(sqlite3*, int(*)(void*), void*); -void *sqlite3_rollback_hook(sqlite3*, void(*)(void *), void*); +SQLITE_API void *sqlite3_commit_hook(sqlite3*, int(*)(void*), void*); +SQLITE_API void *sqlite3_rollback_hook(sqlite3*, void(*)(void *), void*); /* -** CAPI3REF: Data Change Notification Callbacks {H12970} +** CAPI3REF: Data Change Notification Callbacks ** -** The sqlite3_update_hook() interface registers a callback function +** ^The sqlite3_update_hook() interface registers a callback function ** with the [database connection] identified by the first argument ** to be invoked whenever a row is updated, inserted or deleted. -** Any callback set by a previous call to this function +** ^Any callback set by a previous call to this function ** for the same database connection is overridden. ** -** The second argument is a pointer to the function to invoke when a +** ^The second argument is a pointer to the function to invoke when a ** row is updated, inserted or deleted. -** The first argument to the callback is a copy of the third argument +** ^The first argument to the callback is a copy of the third argument ** to sqlite3_update_hook(). -** The second callback argument is one of [SQLITE_INSERT], [SQLITE_DELETE], +** ^The second callback argument is one of [SQLITE_INSERT], [SQLITE_DELETE], ** or [SQLITE_UPDATE], depending on the operation that caused the callback ** to be invoked. -** The third and fourth arguments to the callback contain pointers to the +** ^The third and fourth arguments to the callback contain pointers to the ** database and table name containing the affected row. -** The final callback parameter is the [rowid] of the row. -** In the case of an update, this is the [rowid] after the update takes place. +** ^The final callback parameter is the [rowid] of the row. +** ^In the case of an update, this is the [rowid] after the update takes place. ** -** The update hook is not invoked when internal system tables are -** modified (i.e. sqlite_master and sqlite_sequence). +** ^(The update hook is not invoked when internal system tables are +** modified (i.e. sqlite_master and sqlite_sequence).)^ ** -** In the current implementation, the update hook +** ^In the current implementation, the update hook ** is not invoked when duplication rows are deleted because of an -** [ON CONFLICT | ON CONFLICT REPLACE] clause. Nor is the update hook +** [ON CONFLICT | ON CONFLICT REPLACE] clause. ^Nor is the update hook ** invoked when rows are deleted using the [truncate optimization]. ** The exceptions defined in this paragraph might change in a future ** release of SQLite. @@ -3851,128 +4651,164 @@ void *sqlite3_rollback_hook(sqlite3*, void(*)(void *), void*); ** Note that [sqlite3_prepare_v2()] and [sqlite3_step()] both modify their ** database connections for the meaning of "modify" in this paragraph. ** -** If another function was previously registered, its pArg value -** is returned. Otherwise NULL is returned. +** ^The sqlite3_update_hook(D,C,P) function +** returns the P argument from the previous call +** on the same [database connection] D, or NULL for +** the first call on D. ** ** See also the [sqlite3_commit_hook()] and [sqlite3_rollback_hook()] ** interfaces. -** -** Requirements: -** [H12971] [H12973] [H12975] [H12977] [H12979] [H12981] [H12983] [H12986] */ -void *sqlite3_update_hook( +SQLITE_API void *sqlite3_update_hook( sqlite3*, void(*)(void *,int ,char const *,char const *,sqlite3_int64), void* ); /* -** CAPI3REF: Enable Or Disable Shared Pager Cache {H10330} -** KEYWORDS: {shared cache} {shared cache mode} +** CAPI3REF: Enable Or Disable Shared Pager Cache ** -** This routine enables or disables the sharing of the database cache +** ^(This routine enables or disables the sharing of the database cache ** and schema data structures between [database connection | connections] ** to the same database. Sharing is enabled if the argument is true -** and disabled if the argument is false. +** and disabled if the argument is false.)^ ** -** Cache sharing is enabled and disabled for an entire process. +** ^Cache sharing is enabled and disabled for an entire process. ** This is a change as of SQLite version 3.5.0. In prior versions of SQLite, ** sharing was enabled or disabled for each thread separately. ** -** The cache sharing mode set by this interface effects all subsequent +** ^(The cache sharing mode set by this interface effects all subsequent ** calls to [sqlite3_open()], [sqlite3_open_v2()], and [sqlite3_open16()]. ** Existing database connections continue use the sharing mode -** that was in effect at the time they were opened. -** -** Virtual tables cannot be used with a shared cache. When shared -** cache is enabled, the [sqlite3_create_module()] API used to register -** virtual tables will always return an error. +** that was in effect at the time they were opened.)^ ** -** This routine returns [SQLITE_OK] if shared cache was enabled or disabled -** successfully. An [error code] is returned otherwise. +** ^(This routine returns [SQLITE_OK] if shared cache was enabled or disabled +** successfully. An [error code] is returned otherwise.)^ ** -** Shared cache is disabled by default. But this might change in +** ^Shared cache is disabled by default. But this might change in ** future releases of SQLite. Applications that care about shared ** cache setting should set it explicitly. ** ** See Also: [SQLite Shared-Cache Mode] -** -** Requirements: [H10331] [H10336] [H10337] [H10339] */ -int sqlite3_enable_shared_cache(int); +SQLITE_API int sqlite3_enable_shared_cache(int); /* -** CAPI3REF: Attempt To Free Heap Memory {H17340} +** CAPI3REF: Attempt To Free Heap Memory ** -** The sqlite3_release_memory() interface attempts to free N bytes +** ^The sqlite3_release_memory() interface attempts to free N bytes ** of heap memory by deallocating non-essential memory allocations -** held by the database library. {END} Memory used to cache database +** held by the database library. Memory used to cache database ** pages to improve performance is an example of non-essential memory. -** sqlite3_release_memory() returns the number of bytes actually freed, +** ^sqlite3_release_memory() returns the number of bytes actually freed, ** which might be more or less than the amount requested. +** ^The sqlite3_release_memory() routine is a no-op returning zero +** if SQLite is not compiled with [SQLITE_ENABLE_MEMORY_MANAGEMENT]. ** -** Requirements: [H17341] [H17342] +** See also: [sqlite3_db_release_memory()] */ -int sqlite3_release_memory(int); +SQLITE_API int sqlite3_release_memory(int); /* -** CAPI3REF: Impose A Limit On Heap Size {H17350} +** CAPI3REF: Free Memory Used By A Database Connection ** -** The sqlite3_soft_heap_limit() interface places a "soft" limit -** on the amount of heap memory that may be allocated by SQLite. -** If an internal allocation is requested that would exceed the -** soft heap limit, [sqlite3_release_memory()] is invoked one or -** more times to free up some space before the allocation is performed. +** ^The sqlite3_db_release_memory(D) interface attempts to free as much heap +** memory as possible from database connection D. Unlike the +** [sqlite3_release_memory()] interface, this interface is effect even +** when then [SQLITE_ENABLE_MEMORY_MANAGEMENT] compile-time option is +** omitted. ** -** The limit is called "soft", because if [sqlite3_release_memory()] -** cannot free sufficient memory to prevent the limit from being exceeded, -** the memory is allocated anyway and the current operation proceeds. +** See also: [sqlite3_release_memory()] +*/ +SQLITE_API int sqlite3_db_release_memory(sqlite3*); + +/* +** CAPI3REF: Impose A Limit On Heap Size +** +** ^The sqlite3_soft_heap_limit64() interface sets and/or queries the +** soft limit on the amount of heap memory that may be allocated by SQLite. +** ^SQLite strives to keep heap memory utilization below the soft heap +** limit by reducing the number of pages held in the page cache +** as heap memory usages approaches the limit. +** ^The soft heap limit is "soft" because even though SQLite strives to stay +** below the limit, it will exceed the limit rather than generate +** an [SQLITE_NOMEM] error. In other words, the soft heap limit +** is advisory only. ** -** A negative or zero value for N means that there is no soft heap limit and -** [sqlite3_release_memory()] will only be called when memory is exhausted. -** The default value for the soft heap limit is zero. +** ^The return value from sqlite3_soft_heap_limit64() is the size of +** the soft heap limit prior to the call, or negative in the case of an +** error. ^If the argument N is negative +** then no change is made to the soft heap limit. Hence, the current +** size of the soft heap limit can be determined by invoking +** sqlite3_soft_heap_limit64() with a negative argument. ** -** SQLite makes a best effort to honor the soft heap limit. -** But if the soft heap limit cannot be honored, execution will -** continue without error or notification. This is why the limit is -** called a "soft" limit. It is advisory only. +** ^If the argument N is zero then the soft heap limit is disabled. ** -** Prior to SQLite version 3.5.0, this routine only constrained the memory -** allocated by a single thread - the same thread in which this routine -** runs. Beginning with SQLite version 3.5.0, the soft heap limit is -** applied to all threads. The value specified for the soft heap limit -** is an upper bound on the total memory allocation for all threads. In -** version 3.5.0 there is no mechanism for limiting the heap usage for -** individual threads. +** ^(The soft heap limit is not enforced in the current implementation +** if one or more of following conditions are true: +** +**
      +**
    • The soft heap limit is set to zero. +**
    • Memory accounting is disabled using a combination of the +** [sqlite3_config]([SQLITE_CONFIG_MEMSTATUS],...) start-time option and +** the [SQLITE_DEFAULT_MEMSTATUS] compile-time option. +**
    • An alternative page cache implementation is specified using +** [sqlite3_config]([SQLITE_CONFIG_PCACHE2],...). +**
    • The page cache allocates from its own memory pool supplied +** by [sqlite3_config]([SQLITE_CONFIG_PAGECACHE],...) rather than +** from the heap. +**
    )^ +** +** Beginning with SQLite version 3.7.3, the soft heap limit is enforced +** regardless of whether or not the [SQLITE_ENABLE_MEMORY_MANAGEMENT] +** compile-time option is invoked. With [SQLITE_ENABLE_MEMORY_MANAGEMENT], +** the soft heap limit is enforced on every memory allocation. Without +** [SQLITE_ENABLE_MEMORY_MANAGEMENT], the soft heap limit is only enforced +** when memory is allocated by the page cache. Testing suggests that because +** the page cache is the predominate memory user in SQLite, most +** applications will achieve adequate soft heap limit enforcement without +** the use of [SQLITE_ENABLE_MEMORY_MANAGEMENT]. +** +** The circumstances under which SQLite will enforce the soft heap limit may +** changes in future releases of SQLite. +*/ +SQLITE_API sqlite3_int64 sqlite3_soft_heap_limit64(sqlite3_int64 N); + +/* +** CAPI3REF: Deprecated Soft Heap Limit Interface +** DEPRECATED ** -** Requirements: -** [H16351] [H16352] [H16353] [H16354] [H16355] [H16358] +** This is a deprecated version of the [sqlite3_soft_heap_limit64()] +** interface. This routine is provided for historical compatibility +** only. All new applications should use the +** [sqlite3_soft_heap_limit64()] interface rather than this one. */ -void sqlite3_soft_heap_limit(int); +SQLITE_API SQLITE_DEPRECATED void sqlite3_soft_heap_limit(int N); + /* -** CAPI3REF: Extract Metadata About A Column Of A Table {H12850} +** CAPI3REF: Extract Metadata About A Column Of A Table ** -** This routine returns metadata about a specific column of a specific +** ^This routine returns metadata about a specific column of a specific ** database table accessible using the [database connection] handle ** passed as the first function argument. ** -** The column is identified by the second, third and fourth parameters to -** this function. The second parameter is either the name of the database -** (i.e. "main", "temp" or an attached database) containing the specified -** table or NULL. If it is NULL, then all attached databases are searched +** ^The column is identified by the second, third and fourth parameters to +** this function. ^The second parameter is either the name of the database +** (i.e. "main", "temp", or an attached database) containing the specified +** table or NULL. ^If it is NULL, then all attached databases are searched ** for the table using the same algorithm used by the database engine to ** resolve unqualified table references. ** -** The third and fourth parameters to this function are the table and column +** ^The third and fourth parameters to this function are the table and column ** name of the desired column, respectively. Neither of these parameters ** may be NULL. ** -** Metadata is returned by writing to the memory locations passed as the 5th -** and subsequent parameters to this function. Any of these arguments may be +** ^Metadata is returned by writing to the memory locations passed as the 5th +** and subsequent parameters to this function. ^Any of these arguments may be ** NULL, in which case the corresponding element of metadata is omitted. ** -**
    +** ^(
    ** **
    Parameter Output
    Type
    Description ** @@ -3982,17 +4818,17 @@ void sqlite3_soft_heap_limit(int); **
    8th int True if column is part of the PRIMARY KEY **
    9th int True if column is [AUTOINCREMENT] **
    -**
    +**
    )^ ** -** The memory pointed to by the character pointers returned for the +** ^The memory pointed to by the character pointers returned for the ** declaration type and collation sequence is valid only until the next ** call to any SQLite API function. ** -** If the specified table is actually a view, an [error code] is returned. +** ^If the specified table is actually a view, an [error code] is returned. ** -** If the specified column is "rowid", "oid" or "_rowid_" and an +** ^If the specified column is "rowid", "oid" or "_rowid_" and an ** [INTEGER PRIMARY KEY] column has been explicitly declared, then the output -** parameters are set for the explicitly declared column. If there is no +** parameters are set for the explicitly declared column. ^(If there is no ** explicitly declared [INTEGER PRIMARY KEY] column, then the output ** parameters are set as follows: ** @@ -4002,17 +4838,17 @@ void sqlite3_soft_heap_limit(int); ** not null: 0 ** primary key: 1 ** auto increment: 0 -** +** )^ ** -** This function may load one or more schemas from database files. If an +** ^(This function may load one or more schemas from database files. If an ** error occurs during this process, or if the requested table or column ** cannot be found, an [error code] is returned and an error message left -** in the [database connection] (to be retrieved using sqlite3_errmsg()). +** in the [database connection] (to be retrieved using sqlite3_errmsg()).)^ ** -** This API is only available if the library was compiled with the +** ^This API is only available if the library was compiled with the ** [SQLITE_ENABLE_COLUMN_METADATA] C-preprocessor symbol defined. */ -int sqlite3_table_column_metadata( +SQLITE_API int sqlite3_table_column_metadata( sqlite3 *db, /* Connection handle */ const char *zDbName, /* Database name or NULL */ const char *zTableName, /* Table name */ @@ -4025,32 +4861,31 @@ int sqlite3_table_column_metadata( ); /* -** CAPI3REF: Load An Extension {H12600} -** -** This interface loads an SQLite extension library from the named file. -** -** {H12601} The sqlite3_load_extension() interface attempts to load an -** SQLite extension library contained in the file zFile. +** CAPI3REF: Load An Extension ** -** {H12602} The entry point is zProc. +** ^This interface loads an SQLite extension library from the named file. ** -** {H12603} zProc may be 0, in which case the name of the entry point -** defaults to "sqlite3_extension_init". +** ^The sqlite3_load_extension() interface attempts to load an +** SQLite extension library contained in the file zFile. ** -** {H12604} The sqlite3_load_extension() interface shall return -** [SQLITE_OK] on success and [SQLITE_ERROR] if something goes wrong. +** ^The entry point is zProc. +** ^zProc may be 0, in which case the name of the entry point +** defaults to "sqlite3_extension_init". +** ^The sqlite3_load_extension() interface returns +** [SQLITE_OK] on success and [SQLITE_ERROR] if something goes wrong. +** ^If an error occurs and pzErrMsg is not 0, then the +** [sqlite3_load_extension()] interface shall attempt to +** fill *pzErrMsg with error message text stored in memory +** obtained from [sqlite3_malloc()]. The calling function +** should free this memory by calling [sqlite3_free()]. ** -** {H12605} If an error occurs and pzErrMsg is not 0, then the -** [sqlite3_load_extension()] interface shall attempt to -** fill *pzErrMsg with error message text stored in memory -** obtained from [sqlite3_malloc()]. {END} The calling function -** should free this memory by calling [sqlite3_free()]. +** ^Extension loading must be enabled using +** [sqlite3_enable_load_extension()] prior to calling this API, +** otherwise an error will be returned. ** -** {H12606} Extension loading must be enabled using -** [sqlite3_enable_load_extension()] prior to calling this API, -** otherwise an error will be returned. +** See also the [load_extension() SQL function]. */ -int sqlite3_load_extension( +SQLITE_API int sqlite3_load_extension( sqlite3 *db, /* Load the extension into this database connection */ const char *zFile, /* Name of the shared library containing extension */ const char *zProc, /* Entry point. Derived from zFile if 0 */ @@ -4058,67 +4893,66 @@ int sqlite3_load_extension( ); /* -** CAPI3REF: Enable Or Disable Extension Loading {H12620} +** CAPI3REF: Enable Or Disable Extension Loading ** -** So as not to open security holes in older applications that are +** ^So as not to open security holes in older applications that are ** unprepared to deal with extension loading, and as a means of disabling ** extension loading while evaluating user-entered SQL, the following API ** is provided to turn the [sqlite3_load_extension()] mechanism on and off. ** -** Extension loading is off by default. See ticket #1863. -** -** {H12621} Call the sqlite3_enable_load_extension() routine with onoff==1 -** to turn extension loading on and call it with onoff==0 to turn -** it back off again. -** -** {H12622} Extension loading is off by default. +** ^Extension loading is off by default. See ticket #1863. +** ^Call the sqlite3_enable_load_extension() routine with onoff==1 +** to turn extension loading on and call it with onoff==0 to turn +** it back off again. */ -int sqlite3_enable_load_extension(sqlite3 *db, int onoff); +SQLITE_API int sqlite3_enable_load_extension(sqlite3 *db, int onoff); /* -** CAPI3REF: Automatically Load An Extensions {H12640} +** CAPI3REF: Automatically Load Statically Linked Extensions ** -** This API can be invoked at program startup in order to register -** one or more statically linked extensions that will be available -** to all new [database connections]. {END} +** ^This interface causes the xEntryPoint() function to be invoked for +** each new [database connection] that is created. The idea here is that +** xEntryPoint() is the entry point for a statically linked SQLite extension +** that is to be automatically loaded into all new database connections. ** -** This routine stores a pointer to the extension in an array that is -** obtained from [sqlite3_malloc()]. If you run a memory leak checker -** on your program and it reports a leak because of this array, invoke -** [sqlite3_reset_auto_extension()] prior to shutdown to free the memory. +** ^(Even though the function prototype shows that xEntryPoint() takes +** no arguments and returns void, SQLite invokes xEntryPoint() with three +** arguments and expects and integer result as if the signature of the +** entry point where as follows: ** -** {H12641} This function registers an extension entry point that is -** automatically invoked whenever a new [database connection] -** is opened using [sqlite3_open()], [sqlite3_open16()], -** or [sqlite3_open_v2()]. +**
    +**    int xEntryPoint(
    +**      sqlite3 *db,
    +**      const char **pzErrMsg,
    +**      const struct sqlite3_api_routines *pThunk
    +**    );
    +** 
    )^ ** -** {H12642} Duplicate extensions are detected so calling this routine -** multiple times with the same extension is harmless. +** If the xEntryPoint routine encounters an error, it should make *pzErrMsg +** point to an appropriate error message (obtained from [sqlite3_mprintf()]) +** and return an appropriate [error code]. ^SQLite ensures that *pzErrMsg +** is NULL before calling the xEntryPoint(). ^SQLite will invoke +** [sqlite3_free()] on *pzErrMsg after xEntryPoint() returns. ^If any +** xEntryPoint() returns an error, the [sqlite3_open()], [sqlite3_open16()], +** or [sqlite3_open_v2()] call that provoked the xEntryPoint() will fail. ** -** {H12643} This routine stores a pointer to the extension in an array -** that is obtained from [sqlite3_malloc()]. +** ^Calling sqlite3_auto_extension(X) with an entry point X that is already +** on the list of automatic extensions is a harmless no-op. ^No entry point +** will be called more than once for each database connection that is opened. ** -** {H12644} Automatic extensions apply across all threads. +** See also: [sqlite3_reset_auto_extension()]. */ -int sqlite3_auto_extension(void (*xEntryPoint)(void)); +SQLITE_API int sqlite3_auto_extension(void (*xEntryPoint)(void)); /* -** CAPI3REF: Reset Automatic Extension Loading {H12660} +** CAPI3REF: Reset Automatic Extension Loading ** -** This function disables all previously registered automatic -** extensions. {END} It undoes the effect of all prior -** [sqlite3_auto_extension()] calls. -** -** {H12661} This function disables all previously registered -** automatic extensions. -** -** {H12662} This function disables automatic extensions in all threads. +** ^This interface disables all automatic extensions previously +** registered using [sqlite3_auto_extension()]. */ -void sqlite3_reset_auto_extension(void); +SQLITE_API void sqlite3_reset_auto_extension(void); /* -****** EXPERIMENTAL - subject to change without notice ************** -** ** The interface to the virtual-table mechanism is currently considered ** to be experimental. The interface might change in incompatible ways. ** If this is a problem for you, do not use the interface at this time. @@ -4136,18 +4970,17 @@ typedef struct sqlite3_vtab_cursor sqlite3_vtab_cursor; typedef struct sqlite3_module sqlite3_module; /* -** CAPI3REF: Virtual Table Object {H18000} +** CAPI3REF: Virtual Table Object ** KEYWORDS: sqlite3_module {virtual table module} -** EXPERIMENTAL ** -** This structure, sometimes called a a "virtual table module", +** This structure, sometimes called a "virtual table module", ** defines the implementation of a [virtual tables]. ** This structure consists mostly of methods for the module. ** -** A virtual table module is created by filling in a persistent +** ^A virtual table module is created by filling in a persistent ** instance of this structure and passing a pointer to that instance ** to [sqlite3_create_module()] or [sqlite3_create_module_v2()]. -** The registration remains valid until it is replaced by a different +** ^The registration remains valid until it is replaced by a different ** module or until the [database connection] closes. The content ** of this structure must not change while it is registered with ** any database connection. @@ -4180,55 +5013,62 @@ struct sqlite3_module { void (**pxFunc)(sqlite3_context*,int,sqlite3_value**), void **ppArg); int (*xRename)(sqlite3_vtab *pVtab, const char *zNew); + /* The methods above are in version 1 of the sqlite_module object. Those + ** below are for version 2 and greater. */ + int (*xSavepoint)(sqlite3_vtab *pVTab, int); + int (*xRelease)(sqlite3_vtab *pVTab, int); + int (*xRollbackTo)(sqlite3_vtab *pVTab, int); }; /* -** CAPI3REF: Virtual Table Indexing Information {H18100} +** CAPI3REF: Virtual Table Indexing Information ** KEYWORDS: sqlite3_index_info -** EXPERIMENTAL ** -** The sqlite3_index_info structure and its substructures is used to +** The sqlite3_index_info structure and its substructures is used as part +** of the [virtual table] interface to ** pass information into and receive the reply from the [xBestIndex] ** method of a [virtual table module]. The fields under **Inputs** are the ** inputs to xBestIndex and are read-only. xBestIndex inserts its ** results into the **Outputs** fields. ** -** The aConstraint[] array records WHERE clause constraints of the form: +** ^(The aConstraint[] array records WHERE clause constraints of the form: ** -**
    column OP expr
    +**
    column OP expr
    ** -** where OP is =, <, <=, >, or >=. The particular operator is -** stored in aConstraint[].op. The index of the column is stored in -** aConstraint[].iColumn. aConstraint[].usable is TRUE if the +** where OP is =, <, <=, >, or >=.)^ ^(The particular operator is +** stored in aConstraint[].op using one of the +** [SQLITE_INDEX_CONSTRAINT_EQ | SQLITE_INDEX_CONSTRAINT_ values].)^ +** ^(The index of the column is stored in +** aConstraint[].iColumn.)^ ^(aConstraint[].usable is TRUE if the ** expr on the right-hand side can be evaluated (and thus the constraint -** is usable) and false if it cannot. +** is usable) and false if it cannot.)^ ** -** The optimizer automatically inverts terms of the form "expr OP column" +** ^The optimizer automatically inverts terms of the form "expr OP column" ** and makes other simplifications to the WHERE clause in an attempt to ** get as many WHERE clause terms into the form shown above as possible. -** The aConstraint[] array only reports WHERE clause terms in the correct -** form that refer to the particular virtual table being queried. +** ^The aConstraint[] array only reports WHERE clause terms that are +** relevant to the particular virtual table being queried. ** -** Information about the ORDER BY clause is stored in aOrderBy[]. -** Each term of aOrderBy records a column of the ORDER BY clause. +** ^Information about the ORDER BY clause is stored in aOrderBy[]. +** ^Each term of aOrderBy records a column of the ORDER BY clause. ** ** The [xBestIndex] method must fill aConstraintUsage[] with information -** about what parameters to pass to xFilter. If argvIndex>0 then +** about what parameters to pass to xFilter. ^If argvIndex>0 then ** the right-hand side of the corresponding aConstraint[] is evaluated -** and becomes the argvIndex-th entry in argv. If aConstraintUsage[].omit +** and becomes the argvIndex-th entry in argv. ^(If aConstraintUsage[].omit ** is true, then the constraint is assumed to be fully handled by the -** virtual table and is not checked again by SQLite. +** virtual table and is not checked again by SQLite.)^ ** -** The idxNum and idxPtr values are recorded and passed into the +** ^The idxNum and idxPtr values are recorded and passed into the ** [xFilter] method. -** [sqlite3_free()] is used to free idxPtr if and only iff +** ^[sqlite3_free()] is used to free idxPtr if and only if ** needToFreeIdxPtr is true. ** -** The orderByConsumed means that output from [xFilter]/[xNext] will occur in +** ^The orderByConsumed means that output from [xFilter]/[xNext] will occur in ** the correct order to satisfy the ORDER BY clause so that no separate ** sorting step is required. ** -** The estimatedCost value is an estimate of the cost of doing the +** ^The estimatedCost value is an estimate of the cost of doing the ** particular lookup. A full scan of a table with N entries should have ** a cost of N. A binary search of a table of N entries should have a ** cost of approximately log(N). @@ -4258,6 +5098,15 @@ struct sqlite3_index_info { int orderByConsumed; /* True if output is already ordered */ double estimatedCost; /* Estimated cost of using this index */ }; + +/* +** CAPI3REF: Virtual Table Constraint Operator Codes +** +** These macros defined the allowed values for the +** [sqlite3_index_info].aConstraint[].op field. Each value represents +** an operator that is part of a constraint term in the wHERE clause of +** a query that uses a [virtual table]. +*/ #define SQLITE_INDEX_CONSTRAINT_EQ 2 #define SQLITE_INDEX_CONSTRAINT_GT 4 #define SQLITE_INDEX_CONSTRAINT_LE 8 @@ -4266,43 +5115,37 @@ struct sqlite3_index_info { #define SQLITE_INDEX_CONSTRAINT_MATCH 64 /* -** CAPI3REF: Register A Virtual Table Implementation {H18200} -** EXPERIMENTAL +** CAPI3REF: Register A Virtual Table Implementation ** -** This routine is used to register a new [virtual table module] name. -** Module names must be registered before -** creating a new [virtual table] using the module, or before using a +** ^These routines are used to register a new [virtual table module] name. +** ^Module names must be registered before +** creating a new [virtual table] using the module and before using a ** preexisting [virtual table] for the module. ** -** The module name is registered on the [database connection] specified -** by the first parameter. The name of the module is given by the -** second parameter. The third parameter is a pointer to -** the implementation of the [virtual table module]. The fourth +** ^The module name is registered on the [database connection] specified +** by the first parameter. ^The name of the module is given by the +** second parameter. ^The third parameter is a pointer to +** the implementation of the [virtual table module]. ^The fourth ** parameter is an arbitrary client data pointer that is passed through ** into the [xCreate] and [xConnect] methods of the virtual table module ** when a new virtual table is be being created or reinitialized. ** -** This interface has exactly the same effect as calling -** [sqlite3_create_module_v2()] with a NULL client data destructor. +** ^The sqlite3_create_module_v2() interface has a fifth parameter which +** is a pointer to a destructor for the pClientData. ^SQLite will +** invoke the destructor function (if it is not NULL) when SQLite +** no longer needs the pClientData pointer. ^The destructor will also +** be invoked if the call to sqlite3_create_module_v2() fails. +** ^The sqlite3_create_module() +** interface is equivalent to sqlite3_create_module_v2() with a NULL +** destructor. */ -SQLITE_EXPERIMENTAL int sqlite3_create_module( +SQLITE_API int sqlite3_create_module( sqlite3 *db, /* SQLite connection to register module with */ const char *zName, /* Name of the module */ const sqlite3_module *p, /* Methods for the module */ void *pClientData /* Client data for xCreate/xConnect */ ); - -/* -** CAPI3REF: Register A Virtual Table Implementation {H18210} -** EXPERIMENTAL -** -** This routine is identical to the [sqlite3_create_module()] method, -** except that it has an extra parameter to specify -** a destructor function for the client data pointer. SQLite will -** invoke the destructor function (if it is not NULL) when SQLite -** no longer needs the pClientData pointer. -*/ -SQLITE_EXPERIMENTAL int sqlite3_create_module_v2( +SQLITE_API int sqlite3_create_module_v2( sqlite3 *db, /* SQLite connection to register module with */ const char *zName, /* Name of the module */ const sqlite3_module *p, /* Methods for the module */ @@ -4311,42 +5154,40 @@ SQLITE_EXPERIMENTAL int sqlite3_create_module_v2( ); /* -** CAPI3REF: Virtual Table Instance Object {H18010} +** CAPI3REF: Virtual Table Instance Object ** KEYWORDS: sqlite3_vtab -** EXPERIMENTAL ** ** Every [virtual table module] implementation uses a subclass -** of the following structure to describe a particular instance +** of this object to describe a particular instance ** of the [virtual table]. Each subclass will ** be tailored to the specific needs of the module implementation. ** The purpose of this superclass is to define certain fields that are ** common to all module implementations. ** -** Virtual tables methods can set an error message by assigning a +** ^Virtual tables methods can set an error message by assigning a ** string obtained from [sqlite3_mprintf()] to zErrMsg. The method should ** take care that any prior string is freed by a call to [sqlite3_free()] -** prior to assigning a new string to zErrMsg. After the error message +** prior to assigning a new string to zErrMsg. ^After the error message ** is delivered up to the client application, the string will be automatically ** freed by sqlite3_free() and the zErrMsg field will be zeroed. */ struct sqlite3_vtab { const sqlite3_module *pModule; /* The module for this virtual table */ - int nRef; /* Used internally */ + int nRef; /* NO LONGER USED */ char *zErrMsg; /* Error message from sqlite3_mprintf() */ /* Virtual table implementations will typically add additional fields */ }; /* -** CAPI3REF: Virtual Table Cursor Object {H18020} +** CAPI3REF: Virtual Table Cursor Object ** KEYWORDS: sqlite3_vtab_cursor {virtual table cursor} -** EXPERIMENTAL ** ** Every [virtual table module] implementation uses a subclass of the ** following structure to describe cursors that point into the ** [virtual table] and are used ** to loop through the virtual table. Cursors are created using the ** [sqlite3_module.xOpen | xOpen] method of the module and are destroyed -** by the [sqlite3_module.xClose | xClose] method. Cussors are used +** by the [sqlite3_module.xClose | xClose] method. Cursors are used ** by the [xFilter], [xNext], [xEof], [xColumn], and [xRowid] methods ** of the module. Each module implementation will define ** the content of a cursor structure to suit its own needs. @@ -4360,34 +5201,32 @@ struct sqlite3_vtab_cursor { }; /* -** CAPI3REF: Declare The Schema Of A Virtual Table {H18280} -** EXPERIMENTAL +** CAPI3REF: Declare The Schema Of A Virtual Table ** -** The [xCreate] and [xConnect] methods of a +** ^The [xCreate] and [xConnect] methods of a ** [virtual table module] call this interface ** to declare the format (the names and datatypes of the columns) of ** the virtual tables they implement. */ -SQLITE_EXPERIMENTAL int sqlite3_declare_vtab(sqlite3*, const char *zSQL); +SQLITE_API int sqlite3_declare_vtab(sqlite3*, const char *zSQL); /* -** CAPI3REF: Overload A Function For A Virtual Table {H18300} -** EXPERIMENTAL +** CAPI3REF: Overload A Function For A Virtual Table ** -** Virtual tables can provide alternative implementations of functions +** ^(Virtual tables can provide alternative implementations of functions ** using the [xFindFunction] method of the [virtual table module]. ** But global versions of those functions -** must exist in order to be overloaded. +** must exist in order to be overloaded.)^ ** -** This API makes sure a global version of a function with a particular +** ^(This API makes sure a global version of a function with a particular ** name and number of parameters exists. If no such function exists -** before this API is called, a new function is created. The implementation +** before this API is called, a new function is created.)^ ^The implementation ** of the new function always causes an exception to be thrown. So ** the new function is not good for anything by itself. Its only ** purpose is to be a placeholder function that can be overloaded ** by a [virtual table]. */ -SQLITE_EXPERIMENTAL int sqlite3_overload_function(sqlite3*, const char *zFuncName, int nArg); +SQLITE_API int sqlite3_overload_function(sqlite3*, const char *zFuncName, int nArg); /* ** The interface to the virtual-table mechanism defined above (back up @@ -4397,81 +5236,79 @@ SQLITE_EXPERIMENTAL int sqlite3_overload_function(sqlite3*, const char *zFuncNam ** ** When the virtual-table mechanism stabilizes, we will declare the ** interface fixed, support it indefinitely, and remove this comment. -** -****** EXPERIMENTAL - subject to change without notice ************** */ /* -** CAPI3REF: A Handle To An Open BLOB {H17800} +** CAPI3REF: A Handle To An Open BLOB ** KEYWORDS: {BLOB handle} {BLOB handles} ** ** An instance of this object represents an open BLOB on which ** [sqlite3_blob_open | incremental BLOB I/O] can be performed. -** Objects of this type are created by [sqlite3_blob_open()] +** ^Objects of this type are created by [sqlite3_blob_open()] ** and destroyed by [sqlite3_blob_close()]. -** The [sqlite3_blob_read()] and [sqlite3_blob_write()] interfaces +** ^The [sqlite3_blob_read()] and [sqlite3_blob_write()] interfaces ** can be used to read or write small subsections of the BLOB. -** The [sqlite3_blob_bytes()] interface returns the size of the BLOB in bytes. +** ^The [sqlite3_blob_bytes()] interface returns the size of the BLOB in bytes. */ typedef struct sqlite3_blob sqlite3_blob; /* -** CAPI3REF: Open A BLOB For Incremental I/O {H17810} +** CAPI3REF: Open A BLOB For Incremental I/O ** -** This interfaces opens a [BLOB handle | handle] to the BLOB located +** ^(This interfaces opens a [BLOB handle | handle] to the BLOB located ** in row iRow, column zColumn, table zTable in database zDb; ** in other words, the same BLOB that would be selected by: ** **
     **     SELECT zColumn FROM zDb.zTable WHERE [rowid] = iRow;
    -** 
    {END} +** )^ ** -** If the flags parameter is non-zero, then the BLOB is opened for read -** and write access. If it is zero, the BLOB is opened for read access. +** ^If the flags parameter is non-zero, then the BLOB is opened for read +** and write access. ^If it is zero, the BLOB is opened for read access. +** ^It is not possible to open a column that is part of an index or primary +** key for writing. ^If [foreign key constraints] are enabled, it is +** not possible to open a column that is part of a [child key] for writing. ** -** Note that the database name is not the filename that contains +** ^Note that the database name is not the filename that contains ** the database but rather the symbolic name of the database that -** is assigned when the database is connected using [ATTACH]. -** For the main database file, the database name is "main". -** For TEMP tables, the database name is "temp". +** appears after the AS keyword when the database is connected using [ATTACH]. +** ^For the main database file, the database name is "main". +** ^For TEMP tables, the database name is "temp". ** -** On success, [SQLITE_OK] is returned and the new [BLOB handle] is written +** ^(On success, [SQLITE_OK] is returned and the new [BLOB handle] is written ** to *ppBlob. Otherwise an [error code] is returned and *ppBlob is set -** to be a null pointer. -** This function sets the [database connection] error code and message +** to be a null pointer.)^ +** ^This function sets the [database connection] error code and message ** accessible via [sqlite3_errcode()] and [sqlite3_errmsg()] and related -** functions. Note that the *ppBlob variable is always initialized in a +** functions. ^Note that the *ppBlob variable is always initialized in a ** way that makes it safe to invoke [sqlite3_blob_close()] on *ppBlob ** regardless of the success or failure of this routine. ** -** If the row that a BLOB handle points to is modified by an +** ^(If the row that a BLOB handle points to is modified by an ** [UPDATE], [DELETE], or by [ON CONFLICT] side-effects ** then the BLOB handle is marked as "expired". ** This is true if any column of the row is changed, even a column -** other than the one the BLOB handle is open on. -** Calls to [sqlite3_blob_read()] and [sqlite3_blob_write()] for -** a expired BLOB handle fail with an return code of [SQLITE_ABORT]. -** Changes written into a BLOB prior to the BLOB expiring are not -** rollback by the expiration of the BLOB. Such changes will eventually -** commit if the transaction continues to completion. -** -** Use the [sqlite3_blob_bytes()] interface to determine the size of -** the opened blob. The size of a blob may not be changed by this -** underface. Use the [UPDATE] SQL command to change the size of a +** other than the one the BLOB handle is open on.)^ +** ^Calls to [sqlite3_blob_read()] and [sqlite3_blob_write()] for +** an expired BLOB handle fail with a return code of [SQLITE_ABORT]. +** ^(Changes written into a BLOB prior to the BLOB expiring are not +** rolled back by the expiration of the BLOB. Such changes will eventually +** commit if the transaction continues to completion.)^ +** +** ^Use the [sqlite3_blob_bytes()] interface to determine the size of +** the opened blob. ^The size of a blob may not be changed by this +** interface. Use the [UPDATE] SQL command to change the size of a ** blob. ** -** The [sqlite3_bind_zeroblob()] and [sqlite3_result_zeroblob()] interfaces +** ^The [sqlite3_bind_zeroblob()] and [sqlite3_result_zeroblob()] interfaces ** and the built-in [zeroblob] SQL function can be used, if desired, ** to create an empty, zero-filled blob in which to read or write using ** this interface. ** ** To avoid a resource leak, every open [BLOB handle] should eventually ** be released by a call to [sqlite3_blob_close()]. -** -** Requirements: -** [H17813] [H17814] [H17816] [H17819] [H17821] [H17824] */ -int sqlite3_blob_open( +SQLITE_API int sqlite3_blob_open( sqlite3*, const char *zDb, const char *zTable, @@ -4482,37 +5319,58 @@ int sqlite3_blob_open( ); /* -** CAPI3REF: Close A BLOB Handle {H17830} +** CAPI3REF: Move a BLOB Handle to a New Row +** +** ^This function is used to move an existing blob handle so that it points +** to a different row of the same database table. ^The new row is identified +** by the rowid value passed as the second argument. Only the row can be +** changed. ^The database, table and column on which the blob handle is open +** remain the same. Moving an existing blob handle to a new row can be +** faster than closing the existing handle and opening a new one. +** +** ^(The new row must meet the same criteria as for [sqlite3_blob_open()] - +** it must exist and there must be either a blob or text value stored in +** the nominated column.)^ ^If the new row is not present in the table, or if +** it does not contain a blob or text value, or if another error occurs, an +** SQLite error code is returned and the blob handle is considered aborted. +** ^All subsequent calls to [sqlite3_blob_read()], [sqlite3_blob_write()] or +** [sqlite3_blob_reopen()] on an aborted blob handle immediately return +** SQLITE_ABORT. ^Calling [sqlite3_blob_bytes()] on an aborted blob handle +** always returns zero. +** +** ^This function sets the database handle error code and message. +*/ +SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_blob_reopen(sqlite3_blob *, sqlite3_int64); + +/* +** CAPI3REF: Close A BLOB Handle ** -** Closes an open [BLOB handle]. +** ^Closes an open [BLOB handle]. ** -** Closing a BLOB shall cause the current transaction to commit +** ^Closing a BLOB shall cause the current transaction to commit ** if there are no other BLOBs, no pending prepared statements, and the ** database connection is in [autocommit mode]. -** If any writes were made to the BLOB, they might be held in cache +** ^If any writes were made to the BLOB, they might be held in cache ** until the close operation if they will fit. ** -** Closing the BLOB often forces the changes +** ^(Closing the BLOB often forces the changes ** out to disk and so if any I/O errors occur, they will likely occur ** at the time when the BLOB is closed. Any errors that occur during -** closing are reported as a non-zero return value. +** closing are reported as a non-zero return value.)^ ** -** The BLOB is closed unconditionally. Even if this routine returns -** an error code, the BLOB is still closed. +** ^(The BLOB is closed unconditionally. Even if this routine returns +** an error code, the BLOB is still closed.)^ ** -** Calling this routine with a null pointer (which as would be returned -** by failed call to [sqlite3_blob_open()]) is a harmless no-op. -** -** Requirements: -** [H17833] [H17836] [H17839] +** ^Calling this routine with a null pointer (such as would be returned +** by a failed call to [sqlite3_blob_open()]) is a harmless no-op. */ -int sqlite3_blob_close(sqlite3_blob *); +SQLITE_API int sqlite3_blob_close(sqlite3_blob *); /* -** CAPI3REF: Return The Size Of An Open BLOB {H17840} +** CAPI3REF: Return The Size Of An Open BLOB ** -** Returns the size in bytes of the BLOB accessible via the -** successfully opened [BLOB handle] in its only argument. The +** ^Returns the size in bytes of the BLOB accessible via the +** successfully opened [BLOB handle] in its only argument. ^The ** incremental blob I/O routines can only read or overwriting existing ** blob content; they cannot change the size of a blob. ** @@ -4520,30 +5378,27 @@ int sqlite3_blob_close(sqlite3_blob *); ** by a prior successful call to [sqlite3_blob_open()] and which has not ** been closed by [sqlite3_blob_close()]. Passing any other pointer in ** to this routine results in undefined and probably undesirable behavior. -** -** Requirements: -** [H17843] */ -int sqlite3_blob_bytes(sqlite3_blob *); +SQLITE_API int sqlite3_blob_bytes(sqlite3_blob *); /* -** CAPI3REF: Read Data From A BLOB Incrementally {H17850} +** CAPI3REF: Read Data From A BLOB Incrementally ** -** This function is used to read data from an open [BLOB handle] into a +** ^(This function is used to read data from an open [BLOB handle] into a ** caller-supplied buffer. N bytes of data are copied into buffer Z -** from the open BLOB, starting at offset iOffset. +** from the open BLOB, starting at offset iOffset.)^ ** -** If offset iOffset is less than N bytes from the end of the BLOB, -** [SQLITE_ERROR] is returned and no data is read. If N or iOffset is +** ^If offset iOffset is less than N bytes from the end of the BLOB, +** [SQLITE_ERROR] is returned and no data is read. ^If N or iOffset is ** less than zero, [SQLITE_ERROR] is returned and no data is read. -** The size of the blob (and hence the maximum value of N+iOffset) +** ^The size of the blob (and hence the maximum value of N+iOffset) ** can be determined using the [sqlite3_blob_bytes()] interface. ** -** An attempt to read from an expired [BLOB handle] fails with an +** ^An attempt to read from an expired [BLOB handle] fails with an ** error code of [SQLITE_ABORT]. ** -** On success, SQLITE_OK is returned. -** Otherwise, an [error code] or an [extended error code] is returned. +** ^(On success, sqlite3_blob_read() returns SQLITE_OK. +** Otherwise, an [error code] or an [extended error code] is returned.)^ ** ** This routine only works on a [BLOB handle] which has been created ** by a prior successful call to [sqlite3_blob_open()] and which has not @@ -4551,40 +5406,37 @@ int sqlite3_blob_bytes(sqlite3_blob *); ** to this routine results in undefined and probably undesirable behavior. ** ** See also: [sqlite3_blob_write()]. -** -** Requirements: -** [H17853] [H17856] [H17859] [H17862] [H17863] [H17865] [H17868] */ -int sqlite3_blob_read(sqlite3_blob *, void *Z, int N, int iOffset); +SQLITE_API int sqlite3_blob_read(sqlite3_blob *, void *Z, int N, int iOffset); /* -** CAPI3REF: Write Data Into A BLOB Incrementally {H17870} +** CAPI3REF: Write Data Into A BLOB Incrementally ** -** This function is used to write data into an open [BLOB handle] from a -** caller-supplied buffer. N bytes of data are copied from the buffer Z +** ^This function is used to write data into an open [BLOB handle] from a +** caller-supplied buffer. ^N bytes of data are copied from the buffer Z ** into the open BLOB, starting at offset iOffset. ** -** If the [BLOB handle] passed as the first argument was not opened for +** ^If the [BLOB handle] passed as the first argument was not opened for ** writing (the flags parameter to [sqlite3_blob_open()] was zero), ** this function returns [SQLITE_READONLY]. ** -** This function may only modify the contents of the BLOB; it is +** ^This function may only modify the contents of the BLOB; it is ** not possible to increase the size of a BLOB using this API. -** If offset iOffset is less than N bytes from the end of the BLOB, -** [SQLITE_ERROR] is returned and no data is written. If N is +** ^If offset iOffset is less than N bytes from the end of the BLOB, +** [SQLITE_ERROR] is returned and no data is written. ^If N is ** less than zero [SQLITE_ERROR] is returned and no data is written. ** The size of the BLOB (and hence the maximum value of N+iOffset) ** can be determined using the [sqlite3_blob_bytes()] interface. ** -** An attempt to write to an expired [BLOB handle] fails with an -** error code of [SQLITE_ABORT]. Writes to the BLOB that occurred +** ^An attempt to write to an expired [BLOB handle] fails with an +** error code of [SQLITE_ABORT]. ^Writes to the BLOB that occurred ** before the [BLOB handle] expired are not rolled back by the ** expiration of the handle, though of course those changes might ** have been overwritten by the statement that expired the BLOB handle ** or by other independent statements. ** -** On success, SQLITE_OK is returned. -** Otherwise, an [error code] or an [extended error code] is returned. +** ^(On success, sqlite3_blob_write() returns SQLITE_OK. +** Otherwise, an [error code] or an [extended error code] is returned.)^ ** ** This routine only works on a [BLOB handle] which has been created ** by a prior successful call to [sqlite3_blob_open()] and which has not @@ -4592,15 +5444,11 @@ int sqlite3_blob_read(sqlite3_blob *, void *Z, int N, int iOffset); ** to this routine results in undefined and probably undesirable behavior. ** ** See also: [sqlite3_blob_read()]. -** -** Requirements: -** [H17873] [H17874] [H17875] [H17876] [H17877] [H17879] [H17882] [H17885] -** [H17888] */ -int sqlite3_blob_write(sqlite3_blob *, const void *z, int n, int iOffset); +SQLITE_API int sqlite3_blob_write(sqlite3_blob *, const void *z, int n, int iOffset); /* -** CAPI3REF: Virtual File System Objects {H11200} +** CAPI3REF: Virtual File System Objects ** ** A virtual filesystem (VFS) is an [sqlite3_vfs] object ** that SQLite uses to interact @@ -4609,34 +5457,31 @@ int sqlite3_blob_write(sqlite3_blob *, const void *z, int n, int iOffset); ** New VFSes can be registered and existing VFSes can be unregistered. ** The following interfaces are provided. ** -** The sqlite3_vfs_find() interface returns a pointer to a VFS given its name. -** Names are case sensitive. -** Names are zero-terminated UTF-8 strings. -** If there is no match, a NULL pointer is returned. -** If zVfsName is NULL then the default VFS is returned. +** ^The sqlite3_vfs_find() interface returns a pointer to a VFS given its name. +** ^Names are case sensitive. +** ^Names are zero-terminated UTF-8 strings. +** ^If there is no match, a NULL pointer is returned. +** ^If zVfsName is NULL then the default VFS is returned. ** -** New VFSes are registered with sqlite3_vfs_register(). -** Each new VFS becomes the default VFS if the makeDflt flag is set. -** The same VFS can be registered multiple times without injury. -** To make an existing VFS into the default VFS, register it again +** ^New VFSes are registered with sqlite3_vfs_register(). +** ^Each new VFS becomes the default VFS if the makeDflt flag is set. +** ^The same VFS can be registered multiple times without injury. +** ^To make an existing VFS into the default VFS, register it again ** with the makeDflt flag set. If two different VFSes with the ** same name are registered, the behavior is undefined. If a ** VFS is registered with a name that is NULL or an empty string, ** then the behavior is undefined. ** -** Unregister a VFS with the sqlite3_vfs_unregister() interface. -** If the default VFS is unregistered, another VFS is chosen as -** the default. The choice for the new VFS is arbitrary. -** -** Requirements: -** [H11203] [H11206] [H11209] [H11212] [H11215] [H11218] +** ^Unregister a VFS with the sqlite3_vfs_unregister() interface. +** ^(If the default VFS is unregistered, another VFS is chosen as +** the default. The choice for the new VFS is arbitrary.)^ */ -sqlite3_vfs *sqlite3_vfs_find(const char *zVfsName); -int sqlite3_vfs_register(sqlite3_vfs*, int makeDflt); -int sqlite3_vfs_unregister(sqlite3_vfs*); +SQLITE_API sqlite3_vfs *sqlite3_vfs_find(const char *zVfsName); +SQLITE_API int sqlite3_vfs_register(sqlite3_vfs*, int makeDflt); +SQLITE_API int sqlite3_vfs_unregister(sqlite3_vfs*); /* -** CAPI3REF: Mutexes {H17000} +** CAPI3REF: Mutexes ** ** The SQLite core uses these routines for thread ** synchronization. Though they are intended for internal @@ -4645,34 +5490,34 @@ int sqlite3_vfs_unregister(sqlite3_vfs*); ** ** The SQLite source code contains multiple implementations ** of these mutex routines. An appropriate implementation -** is selected automatically at compile-time. The following +** is selected automatically at compile-time. ^(The following ** implementations are available in the SQLite core: ** **
      **
    • SQLITE_MUTEX_OS2 -**
    • SQLITE_MUTEX_PTHREAD +**
    • SQLITE_MUTEX_PTHREADS **
    • SQLITE_MUTEX_W32 **
    • SQLITE_MUTEX_NOOP -**
    +** )^ ** -** The SQLITE_MUTEX_NOOP implementation is a set of routines +** ^The SQLITE_MUTEX_NOOP implementation is a set of routines ** that does no real locking and is appropriate for use in -** a single-threaded application. The SQLITE_MUTEX_OS2, -** SQLITE_MUTEX_PTHREAD, and SQLITE_MUTEX_W32 implementations +** a single-threaded application. ^The SQLITE_MUTEX_OS2, +** SQLITE_MUTEX_PTHREADS, and SQLITE_MUTEX_W32 implementations ** are appropriate for use on OS/2, Unix, and Windows. ** -** If SQLite is compiled with the SQLITE_MUTEX_APPDEF preprocessor +** ^(If SQLite is compiled with the SQLITE_MUTEX_APPDEF preprocessor ** macro defined (with "-DSQLITE_MUTEX_APPDEF=1"), then no mutex ** implementation is included with the library. In this case the ** application must supply a custom mutex implementation using the ** [SQLITE_CONFIG_MUTEX] option of the sqlite3_config() function ** before calling sqlite3_initialize() or any other public sqlite3_ -** function that calls sqlite3_initialize(). +** function that calls sqlite3_initialize().)^ ** -** {H17011} The sqlite3_mutex_alloc() routine allocates a new -** mutex and returns a pointer to it. {H17012} If it returns NULL -** that means that a mutex could not be allocated. {H17013} SQLite -** will unwind its stack and return an error. {H17014} The argument +** ^The sqlite3_mutex_alloc() routine allocates a new +** mutex and returns a pointer to it. ^If it returns NULL +** that means that a mutex could not be allocated. ^SQLite +** will unwind its stack and return an error. ^(The argument ** to sqlite3_mutex_alloc() is one of these integer constants: ** **
      @@ -4684,78 +5529,79 @@ int sqlite3_vfs_unregister(sqlite3_vfs*); **
    • SQLITE_MUTEX_STATIC_PRNG **
    • SQLITE_MUTEX_STATIC_LRU **
    • SQLITE_MUTEX_STATIC_LRU2 -**
    +** )^ ** -** {H17015} The first two constants cause sqlite3_mutex_alloc() to create -** a new mutex. The new mutex is recursive when SQLITE_MUTEX_RECURSIVE -** is used but not necessarily so when SQLITE_MUTEX_FAST is used. {END} +** ^The first two constants (SQLITE_MUTEX_FAST and SQLITE_MUTEX_RECURSIVE) +** cause sqlite3_mutex_alloc() to create +** a new mutex. ^The new mutex is recursive when SQLITE_MUTEX_RECURSIVE +** is used but not necessarily so when SQLITE_MUTEX_FAST is used. ** The mutex implementation does not need to make a distinction ** between SQLITE_MUTEX_RECURSIVE and SQLITE_MUTEX_FAST if it does -** not want to. {H17016} But SQLite will only request a recursive mutex in -** cases where it really needs one. {END} If a faster non-recursive mutex +** not want to. ^SQLite will only request a recursive mutex in +** cases where it really needs one. ^If a faster non-recursive mutex ** implementation is available on the host platform, the mutex subsystem ** might return such a mutex in response to SQLITE_MUTEX_FAST. ** -** {H17017} The other allowed parameters to sqlite3_mutex_alloc() each return -** a pointer to a static preexisting mutex. {END} Four static mutexes are +** ^The other allowed parameters to sqlite3_mutex_alloc() (anything other +** than SQLITE_MUTEX_FAST and SQLITE_MUTEX_RECURSIVE) each return +** a pointer to a static preexisting mutex. ^Six static mutexes are ** used by the current version of SQLite. Future versions of SQLite ** may add additional static mutexes. Static mutexes are for internal ** use by SQLite only. Applications that use SQLite mutexes should ** use only the dynamic mutexes returned by SQLITE_MUTEX_FAST or ** SQLITE_MUTEX_RECURSIVE. ** -** {H17018} Note that if one of the dynamic mutex parameters (SQLITE_MUTEX_FAST +** ^Note that if one of the dynamic mutex parameters (SQLITE_MUTEX_FAST ** or SQLITE_MUTEX_RECURSIVE) is used then sqlite3_mutex_alloc() -** returns a different mutex on every call. {H17034} But for the static +** returns a different mutex on every call. ^But for the static ** mutex types, the same mutex is returned on every call that has ** the same type number. ** -** {H17019} The sqlite3_mutex_free() routine deallocates a previously -** allocated dynamic mutex. {H17020} SQLite is careful to deallocate every -** dynamic mutex that it allocates. {A17021} The dynamic mutexes must not be in -** use when they are deallocated. {A17022} Attempting to deallocate a static -** mutex results in undefined behavior. {H17023} SQLite never deallocates -** a static mutex. {END} +** ^The sqlite3_mutex_free() routine deallocates a previously +** allocated dynamic mutex. ^SQLite is careful to deallocate every +** dynamic mutex that it allocates. The dynamic mutexes must not be in +** use when they are deallocated. Attempting to deallocate a static +** mutex results in undefined behavior. ^SQLite never deallocates +** a static mutex. ** -** The sqlite3_mutex_enter() and sqlite3_mutex_try() routines attempt -** to enter a mutex. {H17024} If another thread is already within the mutex, +** ^The sqlite3_mutex_enter() and sqlite3_mutex_try() routines attempt +** to enter a mutex. ^If another thread is already within the mutex, ** sqlite3_mutex_enter() will block and sqlite3_mutex_try() will return -** SQLITE_BUSY. {H17025} The sqlite3_mutex_try() interface returns [SQLITE_OK] -** upon successful entry. {H17026} Mutexes created using +** SQLITE_BUSY. ^The sqlite3_mutex_try() interface returns [SQLITE_OK] +** upon successful entry. ^(Mutexes created using ** SQLITE_MUTEX_RECURSIVE can be entered multiple times by the same thread. -** {H17027} In such cases the, +** In such cases the, ** mutex must be exited an equal number of times before another thread -** can enter. {A17028} If the same thread tries to enter any other +** can enter.)^ ^(If the same thread tries to enter any other ** kind of mutex more than once, the behavior is undefined. -** {H17029} SQLite will never exhibit -** such behavior in its own use of mutexes. +** SQLite will never exhibit +** such behavior in its own use of mutexes.)^ ** -** Some systems (for example, Windows 95) do not support the operation +** ^(Some systems (for example, Windows 95) do not support the operation ** implemented by sqlite3_mutex_try(). On those systems, sqlite3_mutex_try() -** will always return SQLITE_BUSY. {H17030} The SQLite core only ever uses -** sqlite3_mutex_try() as an optimization so this is acceptable behavior. +** will always return SQLITE_BUSY. The SQLite core only ever uses +** sqlite3_mutex_try() as an optimization so this is acceptable behavior.)^ ** -** {H17031} The sqlite3_mutex_leave() routine exits a mutex that was -** previously entered by the same thread. {A17032} The behavior +** ^The sqlite3_mutex_leave() routine exits a mutex that was +** previously entered by the same thread. ^(The behavior ** is undefined if the mutex is not currently entered by the -** calling thread or is not currently allocated. {H17033} SQLite will -** never do either. {END} +** calling thread or is not currently allocated. SQLite will +** never do either.)^ ** -** If the argument to sqlite3_mutex_enter(), sqlite3_mutex_try(), or +** ^If the argument to sqlite3_mutex_enter(), sqlite3_mutex_try(), or ** sqlite3_mutex_leave() is a NULL pointer, then all three routines ** behave as no-ops. ** ** See also: [sqlite3_mutex_held()] and [sqlite3_mutex_notheld()]. */ -sqlite3_mutex *sqlite3_mutex_alloc(int); -void sqlite3_mutex_free(sqlite3_mutex*); -void sqlite3_mutex_enter(sqlite3_mutex*); -int sqlite3_mutex_try(sqlite3_mutex*); -void sqlite3_mutex_leave(sqlite3_mutex*); +SQLITE_API sqlite3_mutex *sqlite3_mutex_alloc(int); +SQLITE_API void sqlite3_mutex_free(sqlite3_mutex*); +SQLITE_API void sqlite3_mutex_enter(sqlite3_mutex*); +SQLITE_API int sqlite3_mutex_try(sqlite3_mutex*); +SQLITE_API void sqlite3_mutex_leave(sqlite3_mutex*); /* -** CAPI3REF: Mutex Methods Object {H17120} -** EXPERIMENTAL +** CAPI3REF: Mutex Methods Object ** ** An instance of this structure defines the low-level routines ** used to allocate and use mutexes. @@ -4770,19 +5616,19 @@ void sqlite3_mutex_leave(sqlite3_mutex*); ** output variable when querying the system for the current mutex ** implementation, using the [SQLITE_CONFIG_GETMUTEX] option. ** -** The xMutexInit method defined by this structure is invoked as +** ^The xMutexInit method defined by this structure is invoked as ** part of system initialization by the sqlite3_initialize() function. -** {H17001} The xMutexInit routine shall be called by SQLite once for each +** ^The xMutexInit routine is called by SQLite exactly once for each ** effective call to [sqlite3_initialize()]. ** -** The xMutexEnd method defined by this structure is invoked as +** ^The xMutexEnd method defined by this structure is invoked as ** part of system shutdown by the sqlite3_shutdown() function. The ** implementation of this method is expected to release all outstanding ** resources obtained by the mutex methods implementation, especially -** those obtained by the xMutexInit method. {H17003} The xMutexEnd() -** interface shall be invoked once for each call to [sqlite3_shutdown()]. +** those obtained by the xMutexInit method. ^The xMutexEnd() +** interface is invoked exactly once for each call to [sqlite3_shutdown()]. ** -** The remaining seven methods defined by this structure (xMutexAlloc, +** ^(The remaining seven methods defined by this structure (xMutexAlloc, ** xMutexFree, xMutexEnter, xMutexTry, xMutexLeave, xMutexHeld and ** xMutexNotheld) implement the following interfaces (respectively): ** @@ -4794,7 +5640,7 @@ void sqlite3_mutex_leave(sqlite3_mutex*); **
  • [sqlite3_mutex_leave()]
  • **
  • [sqlite3_mutex_held()]
  • **
  • [sqlite3_mutex_notheld()]
  • -** +** )^ ** ** The only difference is that the public sqlite3_XXX functions enumerated ** above silently ignore any invocations that pass a NULL pointer instead @@ -4803,6 +5649,21 @@ void sqlite3_mutex_leave(sqlite3_mutex*); ** of passing a NULL pointer instead of a valid mutex handle are undefined ** (i.e. it is acceptable to provide an implementation that segfaults if ** it is passed a NULL pointer). +** +** The xMutexInit() method must be threadsafe. ^It must be harmless to +** invoke xMutexInit() multiple times within the same process and without +** intervening calls to xMutexEnd(). Second and subsequent calls to +** xMutexInit() must be no-ops. +** +** ^xMutexInit() must not use SQLite memory allocation ([sqlite3_malloc()] +** and its associates). ^Similarly, xMutexAlloc() must not use SQLite memory +** allocation for a static mutex. ^However xMutexAlloc() may use SQLite +** memory allocation for a fast or recursive mutex. +** +** ^SQLite will invoke the xMutexEnd() method when [sqlite3_shutdown()] is +** called, but only if the prior call to xMutexInit returned SQLITE_OK. +** If xMutexInit fails in any way, it is expected to clean up after itself +** prior to returning. */ typedef struct sqlite3_mutex_methods sqlite3_mutex_methods; struct sqlite3_mutex_methods { @@ -4818,39 +5679,41 @@ struct sqlite3_mutex_methods { }; /* -** CAPI3REF: Mutex Verification Routines {H17080} +** CAPI3REF: Mutex Verification Routines ** ** The sqlite3_mutex_held() and sqlite3_mutex_notheld() routines -** are intended for use inside assert() statements. {H17081} The SQLite core +** are intended for use inside assert() statements. ^The SQLite core ** never uses these routines except inside an assert() and applications -** are advised to follow the lead of the core. {H17082} The core only +** are advised to follow the lead of the core. ^The SQLite core only ** provides implementations for these routines when it is compiled -** with the SQLITE_DEBUG flag. {A17087} External mutex implementations +** with the SQLITE_DEBUG flag. ^External mutex implementations ** are only required to provide these routines if SQLITE_DEBUG is ** defined and if NDEBUG is not defined. ** -** {H17083} These routines should return true if the mutex in their argument +** ^These routines should return true if the mutex in their argument ** is held or not held, respectively, by the calling thread. ** -** {X17084} The implementation is not required to provided versions of these +** ^The implementation is not required to provide versions of these ** routines that actually work. If the implementation does not provide working ** versions of these routines, it should at least provide stubs that always ** return true so that one does not get spurious assertion failures. ** -** {H17085} If the argument to sqlite3_mutex_held() is a NULL pointer then -** the routine should return 1. {END} This seems counter-intuitive since -** clearly the mutex cannot be held if it does not exist. But the +** ^If the argument to sqlite3_mutex_held() is a NULL pointer then +** the routine should return 1. This seems counter-intuitive since +** clearly the mutex cannot be held if it does not exist. But ** the reason the mutex does not exist is because the build is not ** using mutexes. And we do not want the assert() containing the ** call to sqlite3_mutex_held() to fail, so a non-zero return is -** the appropriate thing to do. {H17086} The sqlite3_mutex_notheld() +** the appropriate thing to do. ^The sqlite3_mutex_notheld() ** interface should also return 1 when given a NULL pointer. */ -int sqlite3_mutex_held(sqlite3_mutex*); -int sqlite3_mutex_notheld(sqlite3_mutex*); +#ifndef NDEBUG +SQLITE_API int sqlite3_mutex_held(sqlite3_mutex*); +SQLITE_API int sqlite3_mutex_notheld(sqlite3_mutex*); +#endif /* -** CAPI3REF: Mutex Types {H17001} +** CAPI3REF: Mutex Types ** ** The [sqlite3_mutex_alloc()] interface takes a single argument ** which is one of these integer constants. @@ -4867,51 +5730,60 @@ int sqlite3_mutex_notheld(sqlite3_mutex*); #define SQLITE_MUTEX_STATIC_OPEN 4 /* sqlite3BtreeOpen() */ #define SQLITE_MUTEX_STATIC_PRNG 5 /* sqlite3_random() */ #define SQLITE_MUTEX_STATIC_LRU 6 /* lru page list */ -#define SQLITE_MUTEX_STATIC_LRU2 7 /* lru page list */ +#define SQLITE_MUTEX_STATIC_LRU2 7 /* NOT USED */ +#define SQLITE_MUTEX_STATIC_PMEM 7 /* sqlite3PageMalloc() */ /* -** CAPI3REF: Retrieve the mutex for a database connection {H17002} +** CAPI3REF: Retrieve the mutex for a database connection ** -** This interface returns a pointer the [sqlite3_mutex] object that +** ^This interface returns a pointer the [sqlite3_mutex] object that ** serializes access to the [database connection] given in the argument ** when the [threading mode] is Serialized. -** If the [threading mode] is Single-thread or Multi-thread then this +** ^If the [threading mode] is Single-thread or Multi-thread then this ** routine returns a NULL pointer. */ -sqlite3_mutex *sqlite3_db_mutex(sqlite3*); +SQLITE_API sqlite3_mutex *sqlite3_db_mutex(sqlite3*); /* -** CAPI3REF: Low-Level Control Of Database Files {H11300} +** CAPI3REF: Low-Level Control Of Database Files ** -** {H11301} The [sqlite3_file_control()] interface makes a direct call to the +** ^The [sqlite3_file_control()] interface makes a direct call to the ** xFileControl method for the [sqlite3_io_methods] object associated -** with a particular database identified by the second argument. {H11302} The -** name of the database is the name assigned to the database by the -** ATTACH SQL command that opened the -** database. {H11303} To control the main database file, use the name "main" -** or a NULL pointer. {H11304} The third and fourth parameters to this routine +** with a particular database identified by the second argument. ^The +** name of the database is "main" for the main database or "temp" for the +** TEMP database, or the name that appears after the AS keyword for +** databases that are added using the [ATTACH] SQL command. +** ^A NULL pointer can be used in place of "main" to refer to the +** main database file. +** ^The third and fourth parameters to this routine ** are passed directly through to the second and third parameters of -** the xFileControl method. {H11305} The return value of the xFileControl +** the xFileControl method. ^The return value of the xFileControl ** method becomes the return value of this routine. ** -** {H11306} If the second parameter (zDbName) does not match the name of any -** open database file, then SQLITE_ERROR is returned. {H11307} This error +** ^The SQLITE_FCNTL_FILE_POINTER value for the op parameter causes +** a pointer to the underlying [sqlite3_file] object to be written into +** the space pointed to by the 4th parameter. ^The SQLITE_FCNTL_FILE_POINTER +** case is a short-circuit path which does not actually invoke the +** underlying sqlite3_io_methods.xFileControl method. +** +** ^If the second parameter (zDbName) does not match the name of any +** open database file, then SQLITE_ERROR is returned. ^This error ** code is not remembered and will not be recalled by [sqlite3_errcode()] -** or [sqlite3_errmsg()]. {A11308} The underlying xFileControl method might -** also return SQLITE_ERROR. {A11309} There is no way to distinguish between +** or [sqlite3_errmsg()]. The underlying xFileControl method might +** also return SQLITE_ERROR. There is no way to distinguish between ** an incorrect zDbName and an SQLITE_ERROR return from the underlying -** xFileControl method. {END} +** xFileControl method. ** ** See also: [SQLITE_FCNTL_LOCKSTATE] */ -int sqlite3_file_control(sqlite3*, const char *zDbName, int op, void*); +SQLITE_API int sqlite3_file_control(sqlite3*, const char *zDbName, int op, void*); /* -** CAPI3REF: Testing Interface {H11400} +** CAPI3REF: Testing Interface ** -** The sqlite3_test_control() interface is used to read out internal +** ^The sqlite3_test_control() interface is used to read out internal ** state of SQLite and to inject faults into SQLite for testing -** purposes. The first parameter is an operation code that determines +** purposes. ^The first parameter is an operation code that determines ** the number, meaning, and operation of all subsequent parameters. ** ** This interface is not for use by applications. It exists solely @@ -4923,10 +5795,10 @@ int sqlite3_file_control(sqlite3*, const char *zDbName, int op, void*); ** Unlike most of the SQLite API, this function is not guaranteed to ** operate consistently from one release to the next. */ -int sqlite3_test_control(int op, ...); +SQLITE_API int sqlite3_test_control(int op, ...); /* -** CAPI3REF: Testing Interface Operation Codes {H11410} +** CAPI3REF: Testing Interface Operation Codes ** ** These constants are the valid operation code parameters used ** as the first argument to [sqlite3_test_control()]. @@ -4936,6 +5808,7 @@ int sqlite3_test_control(int op, ...); ** Applications should not use any of these parameters or the ** [sqlite3_test_control()] interface. */ +#define SQLITE_TESTCTRL_FIRST 5 #define SQLITE_TESTCTRL_PRNG_SAVE 5 #define SQLITE_TESTCTRL_PRNG_RESTORE 6 #define SQLITE_TESTCTRL_PRNG_RESET 7 @@ -4945,29 +5818,35 @@ int sqlite3_test_control(int op, ...); #define SQLITE_TESTCTRL_PENDING_BYTE 11 #define SQLITE_TESTCTRL_ASSERT 12 #define SQLITE_TESTCTRL_ALWAYS 13 - -/* -** CAPI3REF: SQLite Runtime Status {H17200} -** EXPERIMENTAL -** -** This interface is used to retrieve runtime status information -** about the preformance of SQLite, and optionally to reset various -** highwater marks. The first argument is an integer code for -** the specific parameter to measure. Recognized integer codes -** are of the form [SQLITE_STATUS_MEMORY_USED | SQLITE_STATUS_...]. -** The current value of the parameter is returned into *pCurrent. -** The highest recorded value is returned in *pHighwater. If the +#define SQLITE_TESTCTRL_RESERVE 14 +#define SQLITE_TESTCTRL_OPTIMIZATIONS 15 +#define SQLITE_TESTCTRL_ISKEYWORD 16 +#define SQLITE_TESTCTRL_SCRATCHMALLOC 17 +#define SQLITE_TESTCTRL_LOCALTIME_FAULT 18 +#define SQLITE_TESTCTRL_EXPLAIN_STMT 19 +#define SQLITE_TESTCTRL_LAST 19 + +/* +** CAPI3REF: SQLite Runtime Status +** +** ^This interface is used to retrieve runtime status information +** about the performance of SQLite, and optionally to reset various +** highwater marks. ^The first argument is an integer code for +** the specific parameter to measure. ^(Recognized integer codes +** are of the form [status parameters | SQLITE_STATUS_...].)^ +** ^The current value of the parameter is returned into *pCurrent. +** ^The highest recorded value is returned in *pHighwater. ^If the ** resetFlag is true, then the highest record value is reset after -** *pHighwater is written. Some parameters do not record the highest +** *pHighwater is written. ^(Some parameters do not record the highest ** value. For those parameters -** nothing is written into *pHighwater and the resetFlag is ignored. -** Other parameters record only the highwater mark and not the current -** value. For these latter parameters nothing is written into *pCurrent. +** nothing is written into *pHighwater and the resetFlag is ignored.)^ +** ^(Other parameters record only the highwater mark and not the current +** value. For these latter parameters nothing is written into *pCurrent.)^ ** -** This routine returns SQLITE_OK on success and a non-zero -** [error code] on failure. +** ^The sqlite3_status() routine returns SQLITE_OK on success and a +** non-zero [error code] on failure. ** -** This routine is threadsafe but is not atomic. This routine can +** This routine is threadsafe but is not atomic. This routine can be ** called while other threads are running the same or different SQLite ** interfaces. However the values returned in *pCurrent and ** *pHighwater reflect the status of SQLite at different points in time @@ -4976,18 +5855,18 @@ int sqlite3_test_control(int op, ...); ** ** See also: [sqlite3_db_status()] */ -SQLITE_EXPERIMENTAL int sqlite3_status(int op, int *pCurrent, int *pHighwater, int resetFlag); +SQLITE_API int sqlite3_status(int op, int *pCurrent, int *pHighwater, int resetFlag); /* -** CAPI3REF: Status Parameters {H17250} -** EXPERIMENTAL +** CAPI3REF: Status Parameters +** KEYWORDS: {status parameters} ** ** These integer constants designate various run-time status parameters ** that can be returned by [sqlite3_status()]. ** **
    -**
    SQLITE_STATUS_MEMORY_USED
    +** [[SQLITE_STATUS_MEMORY_USED]] ^(
    SQLITE_STATUS_MEMORY_USED
    **
    This parameter is the current amount of memory checked out ** using [sqlite3_malloc()], either directly or indirectly. The ** figure includes calls made to [sqlite3_malloc()] by the application @@ -4995,63 +5874,68 @@ SQLITE_EXPERIMENTAL int sqlite3_status(int op, int *pCurrent, int *pHighwater, i ** controlled by [SQLITE_CONFIG_SCRATCH] and auxiliary page-cache ** memory controlled by [SQLITE_CONFIG_PAGECACHE] is not included in ** this parameter. The amount returned is the sum of the allocation -** sizes as reported by the xSize method in [sqlite3_mem_methods].
    +** sizes as reported by the xSize method in [sqlite3_mem_methods].)^ ** -**
    SQLITE_STATUS_MALLOC_SIZE
    +** [[SQLITE_STATUS_MALLOC_SIZE]] ^(
    SQLITE_STATUS_MALLOC_SIZE
    **
    This parameter records the largest memory allocation request ** handed to [sqlite3_malloc()] or [sqlite3_realloc()] (or their ** internal equivalents). Only the value returned in the ** *pHighwater parameter to [sqlite3_status()] is of interest. -** The value written into the *pCurrent parameter is undefined.
    +** The value written into the *pCurrent parameter is undefined.)^ ** -**
    SQLITE_STATUS_PAGECACHE_USED
    +** [[SQLITE_STATUS_MALLOC_COUNT]] ^(
    SQLITE_STATUS_MALLOC_COUNT
    +**
    This parameter records the number of separate memory allocations +** currently checked out.
    )^ +** +** [[SQLITE_STATUS_PAGECACHE_USED]] ^(
    SQLITE_STATUS_PAGECACHE_USED
    **
    This parameter returns the number of pages used out of the ** [pagecache memory allocator] that was configured using ** [SQLITE_CONFIG_PAGECACHE]. The -** value returned is in pages, not in bytes.
    +** value returned is in pages, not in bytes.)^ ** -**
    SQLITE_STATUS_PAGECACHE_OVERFLOW
    +** [[SQLITE_STATUS_PAGECACHE_OVERFLOW]] +** ^(
    SQLITE_STATUS_PAGECACHE_OVERFLOW
    **
    This parameter returns the number of bytes of page cache -** allocation which could not be statisfied by the [SQLITE_CONFIG_PAGECACHE] +** allocation which could not be satisfied by the [SQLITE_CONFIG_PAGECACHE] ** buffer and where forced to overflow to [sqlite3_malloc()]. The ** returned value includes allocations that overflowed because they ** where too large (they were larger than the "sz" parameter to ** [SQLITE_CONFIG_PAGECACHE]) and allocations that overflowed because -** no space was left in the page cache.
    +** no space was left in the page cache.)^ ** -**
    SQLITE_STATUS_PAGECACHE_SIZE
    +** [[SQLITE_STATUS_PAGECACHE_SIZE]] ^(
    SQLITE_STATUS_PAGECACHE_SIZE
    **
    This parameter records the largest memory allocation request ** handed to [pagecache memory allocator]. Only the value returned in the ** *pHighwater parameter to [sqlite3_status()] is of interest. -** The value written into the *pCurrent parameter is undefined.
    +** The value written into the *pCurrent parameter is undefined.)^ ** -**
    SQLITE_STATUS_SCRATCH_USED
    +** [[SQLITE_STATUS_SCRATCH_USED]] ^(
    SQLITE_STATUS_SCRATCH_USED
    **
    This parameter returns the number of allocations used out of the ** [scratch memory allocator] configured using ** [SQLITE_CONFIG_SCRATCH]. The value returned is in allocations, not ** in bytes. Since a single thread may only have one scratch allocation ** outstanding at time, this parameter also reports the number of threads -** using scratch memory at the same time.
    +** using scratch memory at the same time.)^ ** -**
    SQLITE_STATUS_SCRATCH_OVERFLOW
    +** [[SQLITE_STATUS_SCRATCH_OVERFLOW]] ^(
    SQLITE_STATUS_SCRATCH_OVERFLOW
    **
    This parameter returns the number of bytes of scratch memory -** allocation which could not be statisfied by the [SQLITE_CONFIG_SCRATCH] +** allocation which could not be satisfied by the [SQLITE_CONFIG_SCRATCH] ** buffer and where forced to overflow to [sqlite3_malloc()]. The values ** returned include overflows because the requested allocation was too ** larger (that is, because the requested allocation was larger than the ** "sz" parameter to [SQLITE_CONFIG_SCRATCH]) and because no scratch buffer ** slots were available. -**
    +** )^ ** -**
    SQLITE_STATUS_SCRATCH_SIZE
    +** [[SQLITE_STATUS_SCRATCH_SIZE]] ^(
    SQLITE_STATUS_SCRATCH_SIZE
    **
    This parameter records the largest memory allocation request ** handed to [scratch memory allocator]. Only the value returned in the ** *pHighwater parameter to [sqlite3_status()] is of interest. -** The value written into the *pCurrent parameter is undefined.
    +** The value written into the *pCurrent parameter is undefined.)^ ** -**
    SQLITE_STATUS_PARSER_STACK
    +** [[SQLITE_STATUS_PARSER_STACK]] ^(
    SQLITE_STATUS_PARSER_STACK
    **
    This parameter records the deepest parser stack. It is only -** meaningful if SQLite is compiled with [YYTRACKMAXSTACKDEPTH].
    +** meaningful if SQLite is compiled with [YYTRACKMAXSTACKDEPTH].)^ **
    ** ** New status parameters may be added from time to time. @@ -5065,96 +5949,188 @@ SQLITE_EXPERIMENTAL int sqlite3_status(int op, int *pCurrent, int *pHighwater, i #define SQLITE_STATUS_PARSER_STACK 6 #define SQLITE_STATUS_PAGECACHE_SIZE 7 #define SQLITE_STATUS_SCRATCH_SIZE 8 +#define SQLITE_STATUS_MALLOC_COUNT 9 /* -** CAPI3REF: Database Connection Status {H17500} -** EXPERIMENTAL +** CAPI3REF: Database Connection Status ** -** This interface is used to retrieve runtime status information -** about a single [database connection]. The first argument is the -** database connection object to be interrogated. The second argument -** is the parameter to interrogate. Currently, the only allowed value -** for the second parameter is [SQLITE_DBSTATUS_LOOKASIDE_USED]. -** Additional options will likely appear in future releases of SQLite. +** ^This interface is used to retrieve runtime status information +** about a single [database connection]. ^The first argument is the +** database connection object to be interrogated. ^The second argument +** is an integer constant, taken from the set of +** [SQLITE_DBSTATUS options], that +** determines the parameter to interrogate. The set of +** [SQLITE_DBSTATUS options] is likely +** to grow in future releases of SQLite. ** -** The current value of the requested parameter is written into *pCur -** and the highest instantaneous value is written into *pHiwtr. If +** ^The current value of the requested parameter is written into *pCur +** and the highest instantaneous value is written into *pHiwtr. ^If ** the resetFlg is true, then the highest instantaneous value is ** reset back down to the current value. ** +** ^The sqlite3_db_status() routine returns SQLITE_OK on success and a +** non-zero [error code] on failure. +** ** See also: [sqlite3_status()] and [sqlite3_stmt_status()]. */ -SQLITE_EXPERIMENTAL int sqlite3_db_status(sqlite3*, int op, int *pCur, int *pHiwtr, int resetFlg); +SQLITE_API int sqlite3_db_status(sqlite3*, int op, int *pCur, int *pHiwtr, int resetFlg); /* -** CAPI3REF: Status Parameters for database connections {H17520} -** EXPERIMENTAL +** CAPI3REF: Status Parameters for database connections +** KEYWORDS: {SQLITE_DBSTATUS options} +** +** These constants are the available integer "verbs" that can be passed as +** the second argument to the [sqlite3_db_status()] interface. ** -** Status verbs for [sqlite3_db_status()]. +** New verbs may be added in future releases of SQLite. Existing verbs +** might be discontinued. Applications should check the return code from +** [sqlite3_db_status()] to make sure that the call worked. +** The [sqlite3_db_status()] interface will return a non-zero error code +** if a discontinued or unsupported verb is invoked. ** **
    -**
    SQLITE_DBSTATUS_LOOKASIDE_USED
    +** [[SQLITE_DBSTATUS_LOOKASIDE_USED]] ^(
    SQLITE_DBSTATUS_LOOKASIDE_USED
    **
    This parameter returns the number of lookaside memory slots currently -** checked out.
    +** checked out.)^ +** +** [[SQLITE_DBSTATUS_LOOKASIDE_HIT]] ^(
    SQLITE_DBSTATUS_LOOKASIDE_HIT
    +**
    This parameter returns the number malloc attempts that were +** satisfied using lookaside memory. Only the high-water value is meaningful; +** the current value is always zero.)^ +** +** [[SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE]] +** ^(
    SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE
    +**
    This parameter returns the number malloc attempts that might have +** been satisfied using lookaside memory but failed due to the amount of +** memory requested being larger than the lookaside slot size. +** Only the high-water value is meaningful; +** the current value is always zero.)^ +** +** [[SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL]] +** ^(
    SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL
    +**
    This parameter returns the number malloc attempts that might have +** been satisfied using lookaside memory but failed due to all lookaside +** memory already being in use. +** Only the high-water value is meaningful; +** the current value is always zero.)^ +** +** [[SQLITE_DBSTATUS_CACHE_USED]] ^(
    SQLITE_DBSTATUS_CACHE_USED
    +**
    This parameter returns the approximate number of of bytes of heap +** memory used by all pager caches associated with the database connection.)^ +** ^The highwater mark associated with SQLITE_DBSTATUS_CACHE_USED is always 0. +** +** [[SQLITE_DBSTATUS_SCHEMA_USED]] ^(
    SQLITE_DBSTATUS_SCHEMA_USED
    +**
    This parameter returns the approximate number of of bytes of heap +** memory used to store the schema for all databases associated +** with the connection - main, temp, and any [ATTACH]-ed databases.)^ +** ^The full amount of memory used by the schemas is reported, even if the +** schema memory is shared with other database connections due to +** [shared cache mode] being enabled. +** ^The highwater mark associated with SQLITE_DBSTATUS_SCHEMA_USED is always 0. +** +** [[SQLITE_DBSTATUS_STMT_USED]] ^(
    SQLITE_DBSTATUS_STMT_USED
    +**
    This parameter returns the approximate number of of bytes of heap +** and lookaside memory used by all prepared statements associated with +** the database connection.)^ +** ^The highwater mark associated with SQLITE_DBSTATUS_STMT_USED is always 0. +**
    +** +** [[SQLITE_DBSTATUS_CACHE_HIT]] ^(
    SQLITE_DBSTATUS_CACHE_HIT
    +**
    This parameter returns the number of pager cache hits that have +** occurred.)^ ^The highwater mark associated with SQLITE_DBSTATUS_CACHE_HIT +** is always 0. +**
    +** +** [[SQLITE_DBSTATUS_CACHE_MISS]] ^(
    SQLITE_DBSTATUS_CACHE_MISS
    +**
    This parameter returns the number of pager cache misses that have +** occurred.)^ ^The highwater mark associated with SQLITE_DBSTATUS_CACHE_MISS +** is always 0. +**
    +** +** [[SQLITE_DBSTATUS_CACHE_WRITE]] ^(
    SQLITE_DBSTATUS_CACHE_WRITE
    +**
    This parameter returns the number of dirty cache entries that have +** been written to disk. Specifically, the number of pages written to the +** wal file in wal mode databases, or the number of pages written to the +** database file in rollback mode databases. Any pages written as part of +** transaction rollback or database recovery operations are not included. +** If an IO or other error occurs while writing a page to disk, the effect +** on subsequent SQLITE_DBSTATUS_CACHE_WRITE requests is undefined.)^ ^The +** highwater mark associated with SQLITE_DBSTATUS_CACHE_WRITE is always 0. +**
    **
    */ -#define SQLITE_DBSTATUS_LOOKASIDE_USED 0 +#define SQLITE_DBSTATUS_LOOKASIDE_USED 0 +#define SQLITE_DBSTATUS_CACHE_USED 1 +#define SQLITE_DBSTATUS_SCHEMA_USED 2 +#define SQLITE_DBSTATUS_STMT_USED 3 +#define SQLITE_DBSTATUS_LOOKASIDE_HIT 4 +#define SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE 5 +#define SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL 6 +#define SQLITE_DBSTATUS_CACHE_HIT 7 +#define SQLITE_DBSTATUS_CACHE_MISS 8 +#define SQLITE_DBSTATUS_CACHE_WRITE 9 +#define SQLITE_DBSTATUS_MAX 9 /* Largest defined DBSTATUS */ /* -** CAPI3REF: Prepared Statement Status {H17550} -** EXPERIMENTAL +** CAPI3REF: Prepared Statement Status ** -** Each prepared statement maintains various -** [SQLITE_STMTSTATUS_SORT | counters] that measure the number -** of times it has performed specific operations. These counters can +** ^(Each prepared statement maintains various +** [SQLITE_STMTSTATUS counters] that measure the number +** of times it has performed specific operations.)^ These counters can ** be used to monitor the performance characteristics of the prepared ** statements. For example, if the number of table steps greatly exceeds ** the number of table searches or result rows, that would tend to indicate ** that the prepared statement is using a full table scan rather than ** an index. ** -** This interface is used to retrieve and reset counter values from +** ^(This interface is used to retrieve and reset counter values from ** a [prepared statement]. The first argument is the prepared statement ** object to be interrogated. The second argument -** is an integer code for a specific [SQLITE_STMTSTATUS_SORT | counter] -** to be interrogated. -** The current value of the requested counter is returned. -** If the resetFlg is true, then the counter is reset to zero after this +** is an integer code for a specific [SQLITE_STMTSTATUS counter] +** to be interrogated.)^ +** ^The current value of the requested counter is returned. +** ^If the resetFlg is true, then the counter is reset to zero after this ** interface call returns. ** ** See also: [sqlite3_status()] and [sqlite3_db_status()]. */ -SQLITE_EXPERIMENTAL int sqlite3_stmt_status(sqlite3_stmt*, int op,int resetFlg); +SQLITE_API int sqlite3_stmt_status(sqlite3_stmt*, int op,int resetFlg); /* -** CAPI3REF: Status Parameters for prepared statements {H17570} -** EXPERIMENTAL +** CAPI3REF: Status Parameters for prepared statements +** KEYWORDS: {SQLITE_STMTSTATUS counter} {SQLITE_STMTSTATUS counters} ** ** These preprocessor macros define integer codes that name counter ** values associated with the [sqlite3_stmt_status()] interface. ** The meanings of the various counters are as follows: ** **
    -**
    SQLITE_STMTSTATUS_FULLSCAN_STEP
    -**
    This is the number of times that SQLite has stepped forward in +** [[SQLITE_STMTSTATUS_FULLSCAN_STEP]]
    SQLITE_STMTSTATUS_FULLSCAN_STEP
    +**
    ^This is the number of times that SQLite has stepped forward in ** a table as part of a full table scan. Large numbers for this counter ** may indicate opportunities for performance improvement through ** careful use of indices.
    ** -**
    SQLITE_STMTSTATUS_SORT
    -**
    This is the number of sort operations that have occurred. +** [[SQLITE_STMTSTATUS_SORT]]
    SQLITE_STMTSTATUS_SORT
    +**
    ^This is the number of sort operations that have occurred. ** A non-zero value in this counter may indicate an opportunity to ** improvement performance through careful use of indices.
    ** +** [[SQLITE_STMTSTATUS_AUTOINDEX]]
    SQLITE_STMTSTATUS_AUTOINDEX
    +**
    ^This is the number of rows inserted into transient indices that +** were created automatically in order to help joins run faster. +** A non-zero value in this counter may indicate an opportunity to +** improvement performance by adding permanent indices that do not +** need to be reinitialized each time the statement is run.
    **
    */ #define SQLITE_STMTSTATUS_FULLSCAN_STEP 1 #define SQLITE_STMTSTATUS_SORT 2 +#define SQLITE_STMTSTATUS_AUTOINDEX 3 /* ** CAPI3REF: Custom Page Cache Object -** EXPERIMENTAL ** ** The sqlite3_pcache type is opaque. It is implemented by ** the pluggable module. The SQLite core has no knowledge of @@ -5162,110 +6138,164 @@ SQLITE_EXPERIMENTAL int sqlite3_stmt_status(sqlite3_stmt*, int op,int resetFlg); ** sqlite3_pcache object except by holding and passing pointers ** to the object. ** -** See [sqlite3_pcache_methods] for additional information. +** See [sqlite3_pcache_methods2] for additional information. */ typedef struct sqlite3_pcache sqlite3_pcache; +/* +** CAPI3REF: Custom Page Cache Object +** +** The sqlite3_pcache_page object represents a single page in the +** page cache. The page cache will allocate instances of this +** object. Various methods of the page cache use pointers to instances +** of this object as parameters or as their return value. +** +** See [sqlite3_pcache_methods2] for additional information. +*/ +typedef struct sqlite3_pcache_page sqlite3_pcache_page; +struct sqlite3_pcache_page { + void *pBuf; /* The content of the page */ + void *pExtra; /* Extra information associated with the page */ +}; + /* ** CAPI3REF: Application Defined Page Cache. -** EXPERIMENTAL +** KEYWORDS: {page cache} ** -** The [sqlite3_config]([SQLITE_CONFIG_PCACHE], ...) interface can +** ^(The [sqlite3_config]([SQLITE_CONFIG_PCACHE2], ...) interface can ** register an alternative page cache implementation by passing in an -** instance of the sqlite3_pcache_methods structure. The majority of the -** heap memory used by sqlite is used by the page cache to cache data read -** from, or ready to be written to, the database file. By implementing a -** custom page cache using this API, an application can control more -** precisely the amount of memory consumed by sqlite, the way in which -** said memory is allocated and released, and the policies used to +** instance of the sqlite3_pcache_methods2 structure.)^ +** In many applications, most of the heap memory allocated by +** SQLite is used for the page cache. +** By implementing a +** custom page cache using this API, an application can better control +** the amount of memory consumed by SQLite, the way in which +** that memory is allocated and released, and the policies used to ** determine exactly which parts of a database file are cached and for ** how long. ** -** The contents of the structure are copied to an internal buffer by sqlite -** within the call to [sqlite3_config]. -** -** The xInit() method is called once for each call to [sqlite3_initialize()] -** (usually only once during the lifetime of the process). It is passed -** a copy of the sqlite3_pcache_methods.pArg value. It can be used to set -** up global structures and mutexes required by the custom page cache -** implementation. The xShutdown() method is called from within -** [sqlite3_shutdown()], if the application invokes this API. It can be used -** to clean up any outstanding resources before process shutdown, if required. -** -** The xCreate() method is used to construct a new cache instance. The +** The alternative page cache mechanism is an +** extreme measure that is only needed by the most demanding applications. +** The built-in page cache is recommended for most uses. +** +** ^(The contents of the sqlite3_pcache_methods2 structure are copied to an +** internal buffer by SQLite within the call to [sqlite3_config]. Hence +** the application may discard the parameter after the call to +** [sqlite3_config()] returns.)^ +** +** [[the xInit() page cache method]] +** ^(The xInit() method is called once for each effective +** call to [sqlite3_initialize()])^ +** (usually only once during the lifetime of the process). ^(The xInit() +** method is passed a copy of the sqlite3_pcache_methods2.pArg value.)^ +** The intent of the xInit() method is to set up global data structures +** required by the custom page cache implementation. +** ^(If the xInit() method is NULL, then the +** built-in default page cache is used instead of the application defined +** page cache.)^ +** +** [[the xShutdown() page cache method]] +** ^The xShutdown() method is called by [sqlite3_shutdown()]. +** It can be used to clean up +** any outstanding resources before process shutdown, if required. +** ^The xShutdown() method may be NULL. +** +** ^SQLite automatically serializes calls to the xInit method, +** so the xInit method need not be threadsafe. ^The +** xShutdown method is only called from [sqlite3_shutdown()] so it does +** not need to be threadsafe either. All other methods must be threadsafe +** in multithreaded applications. +** +** ^SQLite will never invoke xInit() more than once without an intervening +** call to xShutdown(). +** +** [[the xCreate() page cache methods]] +** ^SQLite invokes the xCreate() method to construct a new cache instance. +** SQLite will typically create one cache instance for each open database file, +** though this is not guaranteed. ^The ** first parameter, szPage, is the size in bytes of the pages that must -** be allocated by the cache. szPage will not be a power of two. The -** second argument, bPurgeable, is true if the cache being created will -** be used to cache database pages read from a file stored on disk, or +** be allocated by the cache. ^szPage will always a power of two. ^The +** second parameter szExtra is a number of bytes of extra storage +** associated with each page cache entry. ^The szExtra parameter will +** a number less than 250. SQLite will use the +** extra szExtra bytes on each page to store metadata about the underlying +** database page on disk. The value passed into szExtra depends +** on the SQLite version, the target platform, and how SQLite was compiled. +** ^The third argument to xCreate(), bPurgeable, is true if the cache being +** created will be used to cache database pages of a file stored on disk, or ** false if it is used for an in-memory database. The cache implementation -** does not have to do anything special based on the value of bPurgeable, -** it is purely advisory. -** -** The xCachesize() method may be called at any time by SQLite to set the +** does not have to do anything special based with the value of bPurgeable; +** it is purely advisory. ^On a cache where bPurgeable is false, SQLite will +** never invoke xUnpin() except to deliberately delete a page. +** ^In other words, calls to xUnpin() on a cache with bPurgeable set to +** false will always have the "discard" flag set to true. +** ^Hence, a cache created with bPurgeable false will +** never contain any unpinned pages. +** +** [[the xCachesize() page cache method]] +** ^(The xCachesize() method may be called at any time by SQLite to set the ** suggested maximum cache-size (number of pages stored by) the cache ** instance passed as the first argument. This is the value configured using -** the SQLite "[PRAGMA cache_size]" command. As with the bPurgeable parameter, -** the implementation is not required to do anything special with this -** value, it is advisory only. +** the SQLite "[PRAGMA cache_size]" command.)^ As with the bPurgeable +** parameter, the implementation is not required to do anything with this +** value; it is advisory only. ** -** The xPagecount() method should return the number of pages currently -** stored in the cache supplied as an argument. +** [[the xPagecount() page cache methods]] +** The xPagecount() method must return the number of pages currently +** stored in the cache, both pinned and unpinned. ** -** The xFetch() method is used to fetch a page and return a pointer to it. -** A 'page', in this context, is a buffer of szPage bytes aligned at an -** 8-byte boundary. The page to be fetched is determined by the key. The -** mimimum key value is 1. After it has been retrieved using xFetch, the page -** is considered to be pinned. -** -** If the requested page is already in the page cache, then a pointer to -** the cached buffer should be returned with its contents intact. If the -** page is not already in the cache, then the expected behaviour of the -** cache is determined by the value of the createFlag parameter passed -** to xFetch, according to the following table: +** [[the xFetch() page cache methods]] +** The xFetch() method locates a page in the cache and returns a pointer to +** an sqlite3_pcache_page object associated with that page, or a NULL pointer. +** The pBuf element of the returned sqlite3_pcache_page object will be a +** pointer to a buffer of szPage bytes used to store the content of a +** single database page. The pExtra element of sqlite3_pcache_page will be +** a pointer to the szExtra bytes of extra storage that SQLite has requested +** for each entry in the page cache. +** +** The page to be fetched is determined by the key. ^The minimum key value +** is 1. After it has been retrieved using xFetch, the page is considered +** to be "pinned". +** +** If the requested page is already in the page cache, then the page cache +** implementation must return a pointer to the page buffer with its content +** intact. If the requested page is not already in the cache, then the +** cache implementation should use the value of the createFlag +** parameter to help it determined what action to take: ** ** -**
    createFlagExpected Behaviour -**
    0NULL should be returned. No new cache entry is created. -**
    1If createFlag is set to 1, this indicates that -** SQLite is holding pinned pages that can be unpinned -** by writing their contents to the database file (a -** relatively expensive operation). In this situation the -** cache implementation has two choices: it can return NULL, -** in which case SQLite will attempt to unpin one or more -** pages before re-requesting the same page, or it can -** allocate a new page and return a pointer to it. If a new -** page is allocated, then the first sizeof(void*) bytes of -** it (at least) must be zeroed before it is returned. -**
    2If createFlag is set to 2, then SQLite is not holding any -** pinned pages associated with the specific cache passed -** as the first argument to xFetch() that can be unpinned. The -** cache implementation should attempt to allocate a new -** cache entry and return a pointer to it. Again, the first -** sizeof(void*) bytes of the page should be zeroed before -** it is returned. If the xFetch() method returns NULL when -** createFlag==2, SQLite assumes that a memory allocation -** failed and returns SQLITE_NOMEM to the user. +**
    createFlag Behaviour when page is not already in cache +**
    0 Do not allocate a new page. Return NULL. +**
    1 Allocate a new page if it easy and convenient to do so. +** Otherwise return NULL. +**
    2 Make every effort to allocate a new page. Only return +** NULL if allocating a new page is effectively impossible. **
    ** -** xUnpin() is called by SQLite with a pointer to a currently pinned page -** as its second argument. If the third parameter, discard, is non-zero, -** then the page should be evicted from the cache. In this case SQLite -** assumes that the next time the page is retrieved from the cache using -** the xFetch() method, it will be zeroed. If the discard parameter is -** zero, then the page is considered to be unpinned. The cache implementation -** may choose to reclaim (free or recycle) unpinned pages at any time. -** SQLite assumes that next time the page is retrieved from the cache -** it will either be zeroed, or contain the same data that it did when it -** was unpinned. -** -** The cache is not required to perform any reference counting. A single +** ^(SQLite will normally invoke xFetch() with a createFlag of 0 or 1. SQLite +** will only use a createFlag of 2 after a prior call with a createFlag of 1 +** failed.)^ In between the to xFetch() calls, SQLite may +** attempt to unpin one or more cache pages by spilling the content of +** pinned pages to disk and synching the operating system disk cache. +** +** [[the xUnpin() page cache method]] +** ^xUnpin() is called by SQLite with a pointer to a currently pinned page +** as its second argument. If the third parameter, discard, is non-zero, +** then the page must be evicted from the cache. +** ^If the discard parameter is +** zero, then the page may be discarded or retained at the discretion of +** page cache implementation. ^The page cache implementation +** may choose to evict unpinned pages at any time. +** +** The cache must not perform any reference counting. A single ** call to xUnpin() unpins the page regardless of the number of prior calls ** to xFetch(). ** +** [[the xRekey() page cache methods]] ** The xRekey() method is used to change the key value associated with the -** page passed as the second argument from oldKey to newKey. If the cache -** previously contains an entry associated with newKey, it should be -** discarded. Any prior cache entry associated with newKey is guaranteed not +** page passed as the second argument. If the cache +** previously contains an entry associated with newKey, it must be +** discarded. ^Any prior cache entry associated with newKey is guaranteed not ** to be pinned. ** ** When SQLite calls the xTruncate() method, the cache must discard all @@ -5274,11 +6304,41 @@ typedef struct sqlite3_pcache sqlite3_pcache; ** of these pages are pinned, they are implicitly unpinned, meaning that ** they can be safely discarded. ** -** The xDestroy() method is used to delete a cache allocated by xCreate(). -** All resources associated with the specified cache should be freed. After +** [[the xDestroy() page cache method]] +** ^The xDestroy() method is used to delete a cache allocated by xCreate(). +** All resources associated with the specified cache should be freed. ^After ** calling the xDestroy() method, SQLite considers the [sqlite3_pcache*] -** handle invalid, and will not use it with any other sqlite3_pcache_methods +** handle invalid, and will not use it with any other sqlite3_pcache_methods2 ** functions. +** +** [[the xShrink() page cache method]] +** ^SQLite invokes the xShrink() method when it wants the page cache to +** free up as much of heap memory as possible. The page cache implementation +** is not obligated to free any memory, but well-behaved implementations should +** do their best. +*/ +typedef struct sqlite3_pcache_methods2 sqlite3_pcache_methods2; +struct sqlite3_pcache_methods2 { + int iVersion; + void *pArg; + int (*xInit)(void*); + void (*xShutdown)(void*); + sqlite3_pcache *(*xCreate)(int szPage, int szExtra, int bPurgeable); + void (*xCachesize)(sqlite3_pcache*, int nCachesize); + int (*xPagecount)(sqlite3_pcache*); + sqlite3_pcache_page *(*xFetch)(sqlite3_pcache*, unsigned key, int createFlag); + void (*xUnpin)(sqlite3_pcache*, sqlite3_pcache_page*, int discard); + void (*xRekey)(sqlite3_pcache*, sqlite3_pcache_page*, + unsigned oldKey, unsigned newKey); + void (*xTruncate)(sqlite3_pcache*, unsigned iLimit); + void (*xDestroy)(sqlite3_pcache*); + void (*xShrink)(sqlite3_pcache*); +}; + +/* +** This is the obsolete pcache_methods object that has now been replaced +** by sqlite3_pcache_methods2. This object is not used by SQLite. It is +** retained in the header file for backwards compatibility only. */ typedef struct sqlite3_pcache_methods sqlite3_pcache_methods; struct sqlite3_pcache_methods { @@ -5295,12 +6355,12 @@ struct sqlite3_pcache_methods { void (*xDestroy)(sqlite3_pcache*); }; + /* ** CAPI3REF: Online Backup Object -** EXPERIMENTAL ** ** The sqlite3_backup object records state information about an ongoing -** online backup operation. The sqlite3_backup object is created by +** online backup operation. ^The sqlite3_backup object is created by ** a call to [sqlite3_backup_init()] and is destroyed by a call to ** [sqlite3_backup_finish()]. ** @@ -5310,22 +6370,22 @@ typedef struct sqlite3_backup sqlite3_backup; /* ** CAPI3REF: Online Backup API. -** EXPERIMENTAL ** -** This API is used to overwrite the contents of one database with that -** of another. It is useful either for creating backups of databases or +** The backup API copies the content of one database into another. +** It is useful either for creating backups of databases or ** for copying in-memory databases to or from persistent files. ** ** See Also: [Using the SQLite Online Backup API] ** -** Exclusive access is required to the destination database for the -** duration of the operation. However the source database is only -** read-locked while it is actually being read, it is not locked -** continuously for the entire operation. Thus, the backup may be -** performed on a live database without preventing other users from -** writing to the database for an extended period of time. +** ^SQLite holds a write transaction open on the destination database file +** for the duration of the backup operation. +** ^The source database is read-locked only while it is being read; +** it is not locked continuously for the entire backup operation. +** ^Thus, the backup may be performed on a live source database without +** preventing other database connections from +** reading or writing to the source database while the backup is underway. ** -** To perform a backup operation: +** ^(To perform a backup operation: **
      **
    1. sqlite3_backup_init() is called once to initialize the ** backup, @@ -5333,143 +6393,153 @@ typedef struct sqlite3_backup sqlite3_backup; ** the data between the two databases, and finally **
    2. sqlite3_backup_finish() is called to release all resources ** associated with the backup operation. -**
    +** )^ ** There should be exactly one call to sqlite3_backup_finish() for each ** successful call to sqlite3_backup_init(). ** -** sqlite3_backup_init() -** -** The first two arguments passed to [sqlite3_backup_init()] are the database -** handle associated with the destination database and the database name -** used to attach the destination database to the handle. The database name -** is "main" for the main database, "temp" for the temporary database, or -** the name specified as part of the [ATTACH] statement if the destination is -** an attached database. The third and fourth arguments passed to -** sqlite3_backup_init() identify the [database connection] -** and database name used -** to access the source database. The values passed for the source and -** destination [database connection] parameters must not be the same. -** -** If an error occurs within sqlite3_backup_init(), then NULL is returned -** and an error code and error message written into the [database connection] -** passed as the first argument. They may be retrieved using the -** [sqlite3_errcode()], [sqlite3_errmsg()], and [sqlite3_errmsg16()] functions. -** Otherwise, if successful, a pointer to an [sqlite3_backup] object is -** returned. This pointer may be used with the sqlite3_backup_step() and +** [[sqlite3_backup_init()]] sqlite3_backup_init() +** +** ^The D and N arguments to sqlite3_backup_init(D,N,S,M) are the +** [database connection] associated with the destination database +** and the database name, respectively. +** ^The database name is "main" for the main database, "temp" for the +** temporary database, or the name specified after the AS keyword in +** an [ATTACH] statement for an attached database. +** ^The S and M arguments passed to +** sqlite3_backup_init(D,N,S,M) identify the [database connection] +** and database name of the source database, respectively. +** ^The source and destination [database connections] (parameters S and D) +** must be different or else sqlite3_backup_init(D,N,S,M) will fail with +** an error. +** +** ^If an error occurs within sqlite3_backup_init(D,N,S,M), then NULL is +** returned and an error code and error message are stored in the +** destination [database connection] D. +** ^The error code and message for the failed call to sqlite3_backup_init() +** can be retrieved using the [sqlite3_errcode()], [sqlite3_errmsg()], and/or +** [sqlite3_errmsg16()] functions. +** ^A successful call to sqlite3_backup_init() returns a pointer to an +** [sqlite3_backup] object. +** ^The [sqlite3_backup] object may be used with the sqlite3_backup_step() and ** sqlite3_backup_finish() functions to perform the specified backup ** operation. ** -** sqlite3_backup_step() -** -** Function [sqlite3_backup_step()] is used to copy up to nPage pages between -** the source and destination databases, where nPage is the value of the -** second parameter passed to sqlite3_backup_step(). If nPage is a negative -** value, all remaining source pages are copied. If the required pages are -** succesfully copied, but there are still more pages to copy before the -** backup is complete, it returns [SQLITE_OK]. If no error occured and there -** are no more pages to copy, then [SQLITE_DONE] is returned. If an error -** occurs, then an SQLite error code is returned. As well as [SQLITE_OK] and +** [[sqlite3_backup_step()]] sqlite3_backup_step() +** +** ^Function sqlite3_backup_step(B,N) will copy up to N pages between +** the source and destination databases specified by [sqlite3_backup] object B. +** ^If N is negative, all remaining source pages are copied. +** ^If sqlite3_backup_step(B,N) successfully copies N pages and there +** are still more pages to be copied, then the function returns [SQLITE_OK]. +** ^If sqlite3_backup_step(B,N) successfully finishes copying all pages +** from source to destination, then it returns [SQLITE_DONE]. +** ^If an error occurs while running sqlite3_backup_step(B,N), +** then an [error code] is returned. ^As well as [SQLITE_OK] and ** [SQLITE_DONE], a call to sqlite3_backup_step() may return [SQLITE_READONLY], ** [SQLITE_NOMEM], [SQLITE_BUSY], [SQLITE_LOCKED], or an ** [SQLITE_IOERR_ACCESS | SQLITE_IOERR_XXX] extended error code. ** -** As well as the case where the destination database file was opened for -** read-only access, sqlite3_backup_step() may return [SQLITE_READONLY] if -** the destination is an in-memory database with a different page size -** from the source database. -** -** If sqlite3_backup_step() cannot obtain a required file-system lock, then +** ^(The sqlite3_backup_step() might return [SQLITE_READONLY] if +**
      +**
    1. the destination database was opened read-only, or +**
    2. the destination database is using write-ahead-log journaling +** and the destination and source page sizes differ, or +**
    3. the destination database is an in-memory database and the +** destination and source page sizes differ. +**
    )^ +** +** ^If sqlite3_backup_step() cannot obtain a required file-system lock, then ** the [sqlite3_busy_handler | busy-handler function] -** is invoked (if one is specified). If the +** is invoked (if one is specified). ^If the ** busy-handler returns non-zero before the lock is available, then -** [SQLITE_BUSY] is returned to the caller. In this case the call to -** sqlite3_backup_step() can be retried later. If the source +** [SQLITE_BUSY] is returned to the caller. ^In this case the call to +** sqlite3_backup_step() can be retried later. ^If the source ** [database connection] ** is being used to write to the source database when sqlite3_backup_step() -** is called, then [SQLITE_LOCKED] is returned immediately. Again, in this -** case the call to sqlite3_backup_step() can be retried later on. If +** is called, then [SQLITE_LOCKED] is returned immediately. ^Again, in this +** case the call to sqlite3_backup_step() can be retried later on. ^(If ** [SQLITE_IOERR_ACCESS | SQLITE_IOERR_XXX], [SQLITE_NOMEM], or ** [SQLITE_READONLY] is returned, then ** there is no point in retrying the call to sqlite3_backup_step(). These -** errors are considered fatal. At this point the application must accept +** errors are considered fatal.)^ The application must accept ** that the backup operation has failed and pass the backup operation handle ** to the sqlite3_backup_finish() to release associated resources. ** -** Following the first call to sqlite3_backup_step(), an exclusive lock is -** obtained on the destination file. It is not released until either +** ^The first call to sqlite3_backup_step() obtains an exclusive lock +** on the destination file. ^The exclusive lock is not released until either ** sqlite3_backup_finish() is called or the backup operation is complete -** and sqlite3_backup_step() returns [SQLITE_DONE]. Additionally, each time -** a call to sqlite3_backup_step() is made a [shared lock] is obtained on -** the source database file. This lock is released before the -** sqlite3_backup_step() call returns. Because the source database is not -** locked between calls to sqlite3_backup_step(), it may be modified mid-way -** through the backup procedure. If the source database is modified by an +** and sqlite3_backup_step() returns [SQLITE_DONE]. ^Every call to +** sqlite3_backup_step() obtains a [shared lock] on the source database that +** lasts for the duration of the sqlite3_backup_step() call. +** ^Because the source database is not locked between calls to +** sqlite3_backup_step(), the source database may be modified mid-way +** through the backup process. ^If the source database is modified by an ** external process or via a database connection other than the one being -** used by the backup operation, then the backup will be transparently -** restarted by the next call to sqlite3_backup_step(). If the source +** used by the backup operation, then the backup will be automatically +** restarted by the next call to sqlite3_backup_step(). ^If the source ** database is modified by the using the same database connection as is used -** by the backup operation, then the backup database is transparently +** by the backup operation, then the backup database is automatically ** updated at the same time. ** -** sqlite3_backup_finish() +** [[sqlite3_backup_finish()]] sqlite3_backup_finish() ** -** Once sqlite3_backup_step() has returned [SQLITE_DONE], or when the -** application wishes to abandon the backup operation, the [sqlite3_backup] -** object should be passed to sqlite3_backup_finish(). This releases all -** resources associated with the backup operation. If sqlite3_backup_step() -** has not yet returned [SQLITE_DONE], then any active write-transaction on the -** destination database is rolled back. The [sqlite3_backup] object is invalid +** When sqlite3_backup_step() has returned [SQLITE_DONE], or when the +** application wishes to abandon the backup operation, the application +** should destroy the [sqlite3_backup] by passing it to sqlite3_backup_finish(). +** ^The sqlite3_backup_finish() interfaces releases all +** resources associated with the [sqlite3_backup] object. +** ^If sqlite3_backup_step() has not yet returned [SQLITE_DONE], then any +** active write-transaction on the destination database is rolled back. +** The [sqlite3_backup] object is invalid ** and may not be used following a call to sqlite3_backup_finish(). ** -** The value returned by sqlite3_backup_finish is [SQLITE_OK] if no error -** occurred, regardless or whether or not sqlite3_backup_step() was called -** a sufficient number of times to complete the backup operation. Or, if -** an out-of-memory condition or IO error occured during a call to -** sqlite3_backup_step() then [SQLITE_NOMEM] or an -** [SQLITE_IOERR_ACCESS | SQLITE_IOERR_XXX] error code -** is returned. In this case the error code and an error message are -** written to the destination [database connection]. -** -** A return of [SQLITE_BUSY] or [SQLITE_LOCKED] from sqlite3_backup_step() is -** not a permanent error and does not affect the return value of +** ^The value returned by sqlite3_backup_finish is [SQLITE_OK] if no +** sqlite3_backup_step() errors occurred, regardless or whether or not +** sqlite3_backup_step() completed. +** ^If an out-of-memory condition or IO error occurred during any prior +** sqlite3_backup_step() call on the same [sqlite3_backup] object, then +** sqlite3_backup_finish() returns the corresponding [error code]. +** +** ^A return of [SQLITE_BUSY] or [SQLITE_LOCKED] from sqlite3_backup_step() +** is not a permanent error and does not affect the return value of ** sqlite3_backup_finish(). ** -** sqlite3_backup_remaining(), sqlite3_backup_pagecount() +** [[sqlite3_backup__remaining()]] [[sqlite3_backup_pagecount()]] +** sqlite3_backup_remaining() and sqlite3_backup_pagecount() ** -** Each call to sqlite3_backup_step() sets two values stored internally -** by an [sqlite3_backup] object. The number of pages still to be backed -** up, which may be queried by sqlite3_backup_remaining(), and the total -** number of pages in the source database file, which may be queried by -** sqlite3_backup_pagecount(). +** ^Each call to sqlite3_backup_step() sets two values inside +** the [sqlite3_backup] object: the number of pages still to be backed +** up and the total number of pages in the source database file. +** The sqlite3_backup_remaining() and sqlite3_backup_pagecount() interfaces +** retrieve these two values, respectively. ** -** The values returned by these functions are only updated by -** sqlite3_backup_step(). If the source database is modified during a backup +** ^The values returned by these functions are only updated by +** sqlite3_backup_step(). ^If the source database is modified during a backup ** operation, then the values are not updated to account for any extra ** pages that need to be updated or the size of the source database file ** changing. ** ** Concurrent Usage of Database Handles ** -** The source [database connection] may be used by the application for other +** ^The source [database connection] may be used by the application for other ** purposes while a backup operation is underway or being initialized. -** If SQLite is compiled and configured to support threadsafe database +** ^If SQLite is compiled and configured to support threadsafe database ** connections, then the source database connection may be used concurrently ** from within other threads. ** -** However, the application must guarantee that the destination database -** connection handle is not passed to any other API (by any thread) after +** However, the application must guarantee that the destination +** [database connection] is not passed to any other API (by any thread) after ** sqlite3_backup_init() is called and before the corresponding call to -** sqlite3_backup_finish(). Unfortunately SQLite does not currently check -** for this, if the application does use the destination [database connection] -** for some other purpose during a backup operation, things may appear to -** work correctly but in fact be subtly malfunctioning. Use of the -** destination database connection while a backup is in progress might -** also cause a mutex deadlock. -** -** Furthermore, if running in [shared cache mode], the application must +** sqlite3_backup_finish(). SQLite does not currently check to see +** if the application incorrectly accesses the destination [database connection] +** and so no error code is reported, but the operations may malfunction +** nevertheless. Use of the destination database connection while a +** backup is in progress might also also cause a mutex deadlock. +** +** If running in [shared cache mode], the application must ** guarantee that the shared cache used by the destination database ** is not accessed while the backup is running. In practice this means -** that the application must guarantee that the file-system file being +** that the application must guarantee that the disk file being ** backed up to is not accessed by any connection within the process, ** not just the specific connection that was passed to sqlite3_backup_init(). ** @@ -5480,63 +6550,62 @@ typedef struct sqlite3_backup sqlite3_backup; ** same time as another thread is invoking sqlite3_backup_step() it is ** possible that they return invalid values. */ -sqlite3_backup *sqlite3_backup_init( +SQLITE_API sqlite3_backup *sqlite3_backup_init( sqlite3 *pDest, /* Destination database handle */ const char *zDestName, /* Destination database name */ sqlite3 *pSource, /* Source database handle */ const char *zSourceName /* Source database name */ ); -int sqlite3_backup_step(sqlite3_backup *p, int nPage); -int sqlite3_backup_finish(sqlite3_backup *p); -int sqlite3_backup_remaining(sqlite3_backup *p); -int sqlite3_backup_pagecount(sqlite3_backup *p); +SQLITE_API int sqlite3_backup_step(sqlite3_backup *p, int nPage); +SQLITE_API int sqlite3_backup_finish(sqlite3_backup *p); +SQLITE_API int sqlite3_backup_remaining(sqlite3_backup *p); +SQLITE_API int sqlite3_backup_pagecount(sqlite3_backup *p); /* ** CAPI3REF: Unlock Notification -** EXPERIMENTAL ** -** When running in shared-cache mode, a database operation may fail with +** ^When running in shared-cache mode, a database operation may fail with ** an [SQLITE_LOCKED] error if the required locks on the shared-cache or ** individual tables within the shared-cache cannot be obtained. See ** [SQLite Shared-Cache Mode] for a description of shared-cache locking. -** This API may be used to register a callback that SQLite will invoke +** ^This API may be used to register a callback that SQLite will invoke ** when the connection currently holding the required lock relinquishes it. -** This API is only available if the library was compiled with the +** ^This API is only available if the library was compiled with the ** [SQLITE_ENABLE_UNLOCK_NOTIFY] C-preprocessor symbol defined. ** ** See Also: [Using the SQLite Unlock Notification Feature]. ** -** Shared-cache locks are released when a database connection concludes +** ^Shared-cache locks are released when a database connection concludes ** its current transaction, either by committing it or rolling it back. ** -** When a connection (known as the blocked connection) fails to obtain a +** ^When a connection (known as the blocked connection) fails to obtain a ** shared-cache lock and SQLITE_LOCKED is returned to the caller, the ** identity of the database connection (the blocking connection) that -** has locked the required resource is stored internally. After an +** has locked the required resource is stored internally. ^After an ** application receives an SQLITE_LOCKED error, it may call the ** sqlite3_unlock_notify() method with the blocked connection handle as ** the first argument to register for a callback that will be invoked -** when the blocking connections current transaction is concluded. The +** when the blocking connections current transaction is concluded. ^The ** callback is invoked from within the [sqlite3_step] or [sqlite3_close] ** call that concludes the blocking connections transaction. ** -** If sqlite3_unlock_notify() is called in a multi-threaded application, +** ^(If sqlite3_unlock_notify() is called in a multi-threaded application, ** there is a chance that the blocking connection will have already ** concluded its transaction by the time sqlite3_unlock_notify() is invoked. ** If this happens, then the specified callback is invoked immediately, -** from within the call to sqlite3_unlock_notify(). +** from within the call to sqlite3_unlock_notify().)^ ** -** If the blocked connection is attempting to obtain a write-lock on a +** ^If the blocked connection is attempting to obtain a write-lock on a ** shared-cache table, and more than one other connection currently holds ** a read-lock on the same table, then SQLite arbitrarily selects one of ** the other connections to use as the blocking connection. ** -** There may be at most one unlock-notify callback registered by a +** ^(There may be at most one unlock-notify callback registered by a ** blocked connection. If sqlite3_unlock_notify() is called when the ** blocked connection already has a registered unlock-notify callback, -** then the new callback replaces the old. If sqlite3_unlock_notify() is +** then the new callback replaces the old.)^ ^If sqlite3_unlock_notify() is ** called with a NULL pointer as its second argument, then any existing -** unlock-notify callback is cancelled. The blocked connections +** unlock-notify callback is canceled. ^The blocked connections ** unlock-notify callback may also be canceled by closing the blocked ** connection using [sqlite3_close()]. ** @@ -5544,7 +6613,7 @@ int sqlite3_backup_pagecount(sqlite3_backup *p); ** any sqlite3_xxx API functions from within an unlock-notify callback, a ** crash or deadlock may be the result. ** -** Unless deadlock is detected (see below), sqlite3_unlock_notify() always +** ^Unless deadlock is detected (see below), sqlite3_unlock_notify() always ** returns SQLITE_OK. ** ** Callback Invocation Details @@ -5558,7 +6627,7 @@ int sqlite3_backup_pagecount(sqlite3_backup *p); ** ** When a blocking connections transaction is concluded, there may be ** more than one blocked connection that has registered for an unlock-notify -** callback. If two or more such blocked connections have specified the +** callback. ^If two or more such blocked connections have specified the ** same callback function, then instead of invoking the callback function ** multiple times, it is invoked once with the set of void* context pointers ** specified by the blocked connections bundled together into an array. @@ -5576,16 +6645,16 @@ int sqlite3_backup_pagecount(sqlite3_backup *p); ** will proceed and the system may remain deadlocked indefinitely. ** ** To avoid this scenario, the sqlite3_unlock_notify() performs deadlock -** detection. If a given call to sqlite3_unlock_notify() would put the +** detection. ^If a given call to sqlite3_unlock_notify() would put the ** system in a deadlocked state, then SQLITE_LOCKED is returned and no ** unlock-notify callback is registered. The system is said to be in ** a deadlocked state if connection A has registered for an unlock-notify ** callback on the conclusion of connection B's transaction, and connection ** B has itself registered for an unlock-notify callback when connection -** A's transaction is concluded. Indirect deadlock is also detected, so +** A's transaction is concluded. ^Indirect deadlock is also detected, so ** the system is also considered to be deadlocked if connection B has ** registered for an unlock-notify callback on the conclusion of connection -** C's transaction, where connection C is waiting on connection A. Any +** C's transaction, where connection C is waiting on connection A. ^Any ** number of levels of indirection are allowed. ** ** The "DROP TABLE" Exception @@ -5601,17 +6670,316 @@ int sqlite3_backup_pagecount(sqlite3_backup *p); ** or "DROP INDEX" query, an infinite loop might be the result. ** ** One way around this problem is to check the extended error code returned -** by an sqlite3_step() call. If there is a blocking connection, then the +** by an sqlite3_step() call. ^(If there is a blocking connection, then the ** extended error code is set to SQLITE_LOCKED_SHAREDCACHE. Otherwise, in ** the special "DROP TABLE/INDEX" case, the extended error code is just -** SQLITE_LOCKED. +** SQLITE_LOCKED.)^ */ -int sqlite3_unlock_notify( +SQLITE_API int sqlite3_unlock_notify( sqlite3 *pBlocked, /* Waiting connection */ void (*xNotify)(void **apArg, int nArg), /* Callback function to invoke */ void *pNotifyArg /* Argument to pass to xNotify */ ); + +/* +** CAPI3REF: String Comparison +** +** ^The [sqlite3_stricmp()] and [sqlite3_strnicmp()] APIs allow applications +** and extensions to compare the contents of two buffers containing UTF-8 +** strings in a case-independent fashion, using the same definition of "case +** independence" that SQLite uses internally when comparing identifiers. +*/ +SQLITE_API int sqlite3_stricmp(const char *, const char *); +SQLITE_API int sqlite3_strnicmp(const char *, const char *, int); + +/* +** CAPI3REF: Error Logging Interface +** +** ^The [sqlite3_log()] interface writes a message into the error log +** established by the [SQLITE_CONFIG_LOG] option to [sqlite3_config()]. +** ^If logging is enabled, the zFormat string and subsequent arguments are +** used with [sqlite3_snprintf()] to generate the final output string. +** +** The sqlite3_log() interface is intended for use by extensions such as +** virtual tables, collating functions, and SQL functions. While there is +** nothing to prevent an application from calling sqlite3_log(), doing so +** is considered bad form. +** +** The zFormat string must not be NULL. +** +** To avoid deadlocks and other threading problems, the sqlite3_log() routine +** will not use dynamically allocated memory. The log message is stored in +** a fixed-length buffer on the stack. If the log message is longer than +** a few hundred characters, it will be truncated to the length of the +** buffer. +*/ +SQLITE_API void sqlite3_log(int iErrCode, const char *zFormat, ...); + +/* +** CAPI3REF: Write-Ahead Log Commit Hook +** +** ^The [sqlite3_wal_hook()] function is used to register a callback that +** will be invoked each time a database connection commits data to a +** [write-ahead log] (i.e. whenever a transaction is committed in +** [journal_mode | journal_mode=WAL mode]). +** +** ^The callback is invoked by SQLite after the commit has taken place and +** the associated write-lock on the database released, so the implementation +** may read, write or [checkpoint] the database as required. +** +** ^The first parameter passed to the callback function when it is invoked +** is a copy of the third parameter passed to sqlite3_wal_hook() when +** registering the callback. ^The second is a copy of the database handle. +** ^The third parameter is the name of the database that was written to - +** either "main" or the name of an [ATTACH]-ed database. ^The fourth parameter +** is the number of pages currently in the write-ahead log file, +** including those that were just committed. +** +** The callback function should normally return [SQLITE_OK]. ^If an error +** code is returned, that error will propagate back up through the +** SQLite code base to cause the statement that provoked the callback +** to report an error, though the commit will have still occurred. If the +** callback returns [SQLITE_ROW] or [SQLITE_DONE], or if it returns a value +** that does not correspond to any valid SQLite error code, the results +** are undefined. +** +** A single database handle may have at most a single write-ahead log callback +** registered at one time. ^Calling [sqlite3_wal_hook()] replaces any +** previously registered write-ahead log callback. ^Note that the +** [sqlite3_wal_autocheckpoint()] interface and the +** [wal_autocheckpoint pragma] both invoke [sqlite3_wal_hook()] and will +** those overwrite any prior [sqlite3_wal_hook()] settings. +*/ +SQLITE_API void *sqlite3_wal_hook( + sqlite3*, + int(*)(void *,sqlite3*,const char*,int), + void* +); + +/* +** CAPI3REF: Configure an auto-checkpoint +** +** ^The [sqlite3_wal_autocheckpoint(D,N)] is a wrapper around +** [sqlite3_wal_hook()] that causes any database on [database connection] D +** to automatically [checkpoint] +** after committing a transaction if there are N or +** more frames in the [write-ahead log] file. ^Passing zero or +** a negative value as the nFrame parameter disables automatic +** checkpoints entirely. +** +** ^The callback registered by this function replaces any existing callback +** registered using [sqlite3_wal_hook()]. ^Likewise, registering a callback +** using [sqlite3_wal_hook()] disables the automatic checkpoint mechanism +** configured by this function. +** +** ^The [wal_autocheckpoint pragma] can be used to invoke this interface +** from SQL. +** +** ^Every new [database connection] defaults to having the auto-checkpoint +** enabled with a threshold of 1000 or [SQLITE_DEFAULT_WAL_AUTOCHECKPOINT] +** pages. The use of this interface +** is only necessary if the default setting is found to be suboptimal +** for a particular application. +*/ +SQLITE_API int sqlite3_wal_autocheckpoint(sqlite3 *db, int N); + +/* +** CAPI3REF: Checkpoint a database +** +** ^The [sqlite3_wal_checkpoint(D,X)] interface causes database named X +** on [database connection] D to be [checkpointed]. ^If X is NULL or an +** empty string, then a checkpoint is run on all databases of +** connection D. ^If the database connection D is not in +** [WAL | write-ahead log mode] then this interface is a harmless no-op. +** +** ^The [wal_checkpoint pragma] can be used to invoke this interface +** from SQL. ^The [sqlite3_wal_autocheckpoint()] interface and the +** [wal_autocheckpoint pragma] can be used to cause this interface to be +** run whenever the WAL reaches a certain size threshold. +** +** See also: [sqlite3_wal_checkpoint_v2()] +*/ +SQLITE_API int sqlite3_wal_checkpoint(sqlite3 *db, const char *zDb); + +/* +** CAPI3REF: Checkpoint a database +** +** Run a checkpoint operation on WAL database zDb attached to database +** handle db. The specific operation is determined by the value of the +** eMode parameter: +** +**
    +**
    SQLITE_CHECKPOINT_PASSIVE
    +** Checkpoint as many frames as possible without waiting for any database +** readers or writers to finish. Sync the db file if all frames in the log +** are checkpointed. This mode is the same as calling +** sqlite3_wal_checkpoint(). The busy-handler callback is never invoked. +** +**
    SQLITE_CHECKPOINT_FULL
    +** This mode blocks (calls the busy-handler callback) until there is no +** database writer and all readers are reading from the most recent database +** snapshot. It then checkpoints all frames in the log file and syncs the +** database file. This call blocks database writers while it is running, +** but not database readers. +** +**
    SQLITE_CHECKPOINT_RESTART
    +** This mode works the same way as SQLITE_CHECKPOINT_FULL, except after +** checkpointing the log file it blocks (calls the busy-handler callback) +** until all readers are reading from the database file only. This ensures +** that the next client to write to the database file restarts the log file +** from the beginning. This call blocks database writers while it is running, +** but not database readers. +**
    +** +** If pnLog is not NULL, then *pnLog is set to the total number of frames in +** the log file before returning. If pnCkpt is not NULL, then *pnCkpt is set to +** the total number of checkpointed frames (including any that were already +** checkpointed when this function is called). *pnLog and *pnCkpt may be +** populated even if sqlite3_wal_checkpoint_v2() returns other than SQLITE_OK. +** If no values are available because of an error, they are both set to -1 +** before returning to communicate this to the caller. +** +** All calls obtain an exclusive "checkpoint" lock on the database file. If +** any other process is running a checkpoint operation at the same time, the +** lock cannot be obtained and SQLITE_BUSY is returned. Even if there is a +** busy-handler configured, it will not be invoked in this case. +** +** The SQLITE_CHECKPOINT_FULL and RESTART modes also obtain the exclusive +** "writer" lock on the database file. If the writer lock cannot be obtained +** immediately, and a busy-handler is configured, it is invoked and the writer +** lock retried until either the busy-handler returns 0 or the lock is +** successfully obtained. The busy-handler is also invoked while waiting for +** database readers as described above. If the busy-handler returns 0 before +** the writer lock is obtained or while waiting for database readers, the +** checkpoint operation proceeds from that point in the same way as +** SQLITE_CHECKPOINT_PASSIVE - checkpointing as many frames as possible +** without blocking any further. SQLITE_BUSY is returned in this case. +** +** If parameter zDb is NULL or points to a zero length string, then the +** specified operation is attempted on all WAL databases. In this case the +** values written to output parameters *pnLog and *pnCkpt are undefined. If +** an SQLITE_BUSY error is encountered when processing one or more of the +** attached WAL databases, the operation is still attempted on any remaining +** attached databases and SQLITE_BUSY is returned to the caller. If any other +** error occurs while processing an attached database, processing is abandoned +** and the error code returned to the caller immediately. If no error +** (SQLITE_BUSY or otherwise) is encountered while processing the attached +** databases, SQLITE_OK is returned. +** +** If database zDb is the name of an attached database that is not in WAL +** mode, SQLITE_OK is returned and both *pnLog and *pnCkpt set to -1. If +** zDb is not NULL (or a zero length string) and is not the name of any +** attached database, SQLITE_ERROR is returned to the caller. +*/ +SQLITE_API int sqlite3_wal_checkpoint_v2( + sqlite3 *db, /* Database handle */ + const char *zDb, /* Name of attached database (or NULL) */ + int eMode, /* SQLITE_CHECKPOINT_* value */ + int *pnLog, /* OUT: Size of WAL log in frames */ + int *pnCkpt /* OUT: Total number of frames checkpointed */ +); + +/* +** CAPI3REF: Checkpoint operation parameters +** +** These constants can be used as the 3rd parameter to +** [sqlite3_wal_checkpoint_v2()]. See the [sqlite3_wal_checkpoint_v2()] +** documentation for additional information about the meaning and use of +** each of these values. +*/ +#define SQLITE_CHECKPOINT_PASSIVE 0 +#define SQLITE_CHECKPOINT_FULL 1 +#define SQLITE_CHECKPOINT_RESTART 2 + +/* +** CAPI3REF: Virtual Table Interface Configuration +** +** This function may be called by either the [xConnect] or [xCreate] method +** of a [virtual table] implementation to configure +** various facets of the virtual table interface. +** +** If this interface is invoked outside the context of an xConnect or +** xCreate virtual table method then the behavior is undefined. +** +** At present, there is only one option that may be configured using +** this function. (See [SQLITE_VTAB_CONSTRAINT_SUPPORT].) Further options +** may be added in the future. +*/ +SQLITE_API int sqlite3_vtab_config(sqlite3*, int op, ...); + +/* +** CAPI3REF: Virtual Table Configuration Options +** +** These macros define the various options to the +** [sqlite3_vtab_config()] interface that [virtual table] implementations +** can use to customize and optimize their behavior. +** +**
    +**
    SQLITE_VTAB_CONSTRAINT_SUPPORT +**
    Calls of the form +** [sqlite3_vtab_config](db,SQLITE_VTAB_CONSTRAINT_SUPPORT,X) are supported, +** where X is an integer. If X is zero, then the [virtual table] whose +** [xCreate] or [xConnect] method invoked [sqlite3_vtab_config()] does not +** support constraints. In this configuration (which is the default) if +** a call to the [xUpdate] method returns [SQLITE_CONSTRAINT], then the entire +** statement is rolled back as if [ON CONFLICT | OR ABORT] had been +** specified as part of the users SQL statement, regardless of the actual +** ON CONFLICT mode specified. +** +** If X is non-zero, then the virtual table implementation guarantees +** that if [xUpdate] returns [SQLITE_CONSTRAINT], it will do so before +** any modifications to internal or persistent data structures have been made. +** If the [ON CONFLICT] mode is ABORT, FAIL, IGNORE or ROLLBACK, SQLite +** is able to roll back a statement or database transaction, and abandon +** or continue processing the current SQL statement as appropriate. +** If the ON CONFLICT mode is REPLACE and the [xUpdate] method returns +** [SQLITE_CONSTRAINT], SQLite handles this as if the ON CONFLICT mode +** had been ABORT. +** +** Virtual table implementations that are required to handle OR REPLACE +** must do so within the [xUpdate] method. If a call to the +** [sqlite3_vtab_on_conflict()] function indicates that the current ON +** CONFLICT policy is REPLACE, the virtual table implementation should +** silently replace the appropriate rows within the xUpdate callback and +** return SQLITE_OK. Or, if this is not possible, it may return +** SQLITE_CONSTRAINT, in which case SQLite falls back to OR ABORT +** constraint handling. +**
    +*/ +#define SQLITE_VTAB_CONSTRAINT_SUPPORT 1 + +/* +** CAPI3REF: Determine The Virtual Table Conflict Policy +** +** This function may only be called from within a call to the [xUpdate] method +** of a [virtual table] implementation for an INSERT or UPDATE operation. ^The +** value returned is one of [SQLITE_ROLLBACK], [SQLITE_IGNORE], [SQLITE_FAIL], +** [SQLITE_ABORT], or [SQLITE_REPLACE], according to the [ON CONFLICT] mode +** of the SQL statement that triggered the call to the [xUpdate] method of the +** [virtual table]. +*/ +SQLITE_API int sqlite3_vtab_on_conflict(sqlite3 *); + +/* +** CAPI3REF: Conflict resolution modes +** +** These constants are returned by [sqlite3_vtab_on_conflict()] to +** inform a [virtual table] implementation what the [ON CONFLICT] mode +** is for the SQL statement being evaluated. +** +** Note that the [SQLITE_IGNORE] constant is also used as a potential +** return value from the [sqlite3_set_authorizer()] callback and that +** [SQLITE_ABORT] is also a [result code]. +*/ +#define SQLITE_ROLLBACK 1 +/* #define SQLITE_IGNORE 2 // Also used by sqlite3_authorizer() callback */ +#define SQLITE_FAIL 3 +/* #define SQLITE_ABORT 4 // Also an error code */ +#define SQLITE_REPLACE 5 + + + /* ** Undo the hack that converts floating point types to integer for ** builds on processors without floating point support. @@ -5624,3 +6992,64 @@ int sqlite3_unlock_notify( } /* End of the 'extern "C"' block */ #endif #endif + +/* +** 2010 August 30 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +*/ + +#ifndef _SQLITE3RTREE_H_ +#define _SQLITE3RTREE_H_ + + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct sqlite3_rtree_geometry sqlite3_rtree_geometry; + +/* +** Register a geometry callback named zGeom that can be used as part of an +** R-Tree geometry query as follows: +** +** SELECT ... FROM WHERE MATCH $zGeom(... params ...) +*/ +SQLITE_API int sqlite3_rtree_geometry_callback( + sqlite3 *db, + const char *zGeom, +#ifdef SQLITE_RTREE_INT_ONLY + int (*xGeom)(sqlite3_rtree_geometry*, int n, sqlite3_int64 *a, int *pRes), +#else + int (*xGeom)(sqlite3_rtree_geometry*, int n, double *a, int *pRes), +#endif + void *pContext +); + + +/* +** A pointer to a structure of the following type is passed as the first +** argument to callbacks registered using rtree_geometry_callback(). +*/ +struct sqlite3_rtree_geometry { + void *pContext; /* Copy of pContext passed to s_r_g_c() */ + int nParam; /* Size of array aParam[] */ + double *aParam; /* Parameters passed to SQL geom function */ + void *pUser; /* Callback implementation user data */ + void (*xDelUser)(void *); /* Called by SQLite to clean up pUser */ +}; + + +#ifdef __cplusplus +} /* end of the 'extern "C"' block */ +#endif + +#endif /* ifndef _SQLITE3RTREE_H_ */ + diff --git a/ghost/sqlite3ext.h b/ghost/sqlite3ext.h index 55266466..5abcde2c 100644 --- a/ghost/sqlite3ext.h +++ b/ghost/sqlite3ext.h @@ -14,8 +14,6 @@ ** an SQLite instance. Shared libraries that intend to be loaded ** as extensions by SQLite should #include this file instead of ** sqlite3.h. -** -** @(#) $Id: sqlite3ext.h,v 1.25 2008/10/12 00:27:54 shane Exp $ */ #ifndef _SQLITE3EXT_H_ #define _SQLITE3EXT_H_ @@ -51,8 +49,10 @@ struct sqlite3_api_routines { int (*busy_timeout)(sqlite3*,int ms); int (*changes)(sqlite3*); int (*close)(sqlite3*); - int (*collation_needed)(sqlite3*,void*,void(*)(void*,sqlite3*,int eTextRep,const char*)); - int (*collation_needed16)(sqlite3*,void*,void(*)(void*,sqlite3*,int eTextRep,const void*)); + int (*collation_needed)(sqlite3*,void*,void(*)(void*,sqlite3*, + int eTextRep,const char*)); + int (*collation_needed16)(sqlite3*,void*,void(*)(void*,sqlite3*, + int eTextRep,const void*)); const void * (*column_blob)(sqlite3_stmt*,int iCol); int (*column_bytes)(sqlite3_stmt*,int iCol); int (*column_bytes16)(sqlite3_stmt*,int iCol); @@ -77,10 +77,18 @@ struct sqlite3_api_routines { void * (*commit_hook)(sqlite3*,int(*)(void*),void*); int (*complete)(const char*sql); int (*complete16)(const void*sql); - int (*create_collation)(sqlite3*,const char*,int,void*,int(*)(void*,int,const void*,int,const void*)); - int (*create_collation16)(sqlite3*,const void*,int,void*,int(*)(void*,int,const void*,int,const void*)); - int (*create_function)(sqlite3*,const char*,int,int,void*,void (*xFunc)(sqlite3_context*,int,sqlite3_value**),void (*xStep)(sqlite3_context*,int,sqlite3_value**),void (*xFinal)(sqlite3_context*)); - int (*create_function16)(sqlite3*,const void*,int,int,void*,void (*xFunc)(sqlite3_context*,int,sqlite3_value**),void (*xStep)(sqlite3_context*,int,sqlite3_value**),void (*xFinal)(sqlite3_context*)); + int (*create_collation)(sqlite3*,const char*,int,void*, + int(*)(void*,int,const void*,int,const void*)); + int (*create_collation16)(sqlite3*,const void*,int,void*, + int(*)(void*,int,const void*,int,const void*)); + int (*create_function)(sqlite3*,const char*,int,int,void*, + void (*xFunc)(sqlite3_context*,int,sqlite3_value**), + void (*xStep)(sqlite3_context*,int,sqlite3_value**), + void (*xFinal)(sqlite3_context*)); + int (*create_function16)(sqlite3*,const void*,int,int,void*, + void (*xFunc)(sqlite3_context*,int,sqlite3_value**), + void (*xStep)(sqlite3_context*,int,sqlite3_value**), + void (*xFinal)(sqlite3_context*)); int (*create_module)(sqlite3*,const char*,const sqlite3_module*,void*); int (*data_count)(sqlite3_stmt*pStmt); sqlite3 * (*db_handle)(sqlite3_stmt*); @@ -125,16 +133,19 @@ struct sqlite3_api_routines { void (*result_text16le)(sqlite3_context*,const void*,int,void(*)(void*)); void (*result_value)(sqlite3_context*,sqlite3_value*); void * (*rollback_hook)(sqlite3*,void(*)(void*),void*); - int (*set_authorizer)(sqlite3*,int(*)(void*,int,const char*,const char*,const char*,const char*),void*); + int (*set_authorizer)(sqlite3*,int(*)(void*,int,const char*,const char*, + const char*,const char*),void*); void (*set_auxdata)(sqlite3_context*,int,void*,void (*)(void*)); char * (*snprintf)(int,char*,const char*,...); int (*step)(sqlite3_stmt*); - int (*table_column_metadata)(sqlite3*,const char*,const char*,const char*,char const**,char const**,int*,int*,int*); + int (*table_column_metadata)(sqlite3*,const char*,const char*,const char*, + char const**,char const**,int*,int*,int*); void (*thread_cleanup)(void); int (*total_changes)(sqlite3*); void * (*trace)(sqlite3*,void(*xTrace)(void*,const char*),void*); int (*transfer_bindings)(sqlite3_stmt*,sqlite3_stmt*); - void * (*update_hook)(sqlite3*,void(*)(void*,int ,char const*,char const*,sqlite_int64),void*); + void * (*update_hook)(sqlite3*,void(*)(void*,int ,char const*,char const*, + sqlite_int64),void*); void * (*user_data)(sqlite3_context*); const void * (*value_blob)(sqlite3_value*); int (*value_bytes)(sqlite3_value*); @@ -156,15 +167,19 @@ struct sqlite3_api_routines { int (*prepare16_v2)(sqlite3*,const void*,int,sqlite3_stmt**,const void**); int (*clear_bindings)(sqlite3_stmt*); /* Added by 3.4.1 */ - int (*create_module_v2)(sqlite3*,const char*,const sqlite3_module*,void*,void (*xDestroy)(void *)); + int (*create_module_v2)(sqlite3*,const char*,const sqlite3_module*,void*, + void (*xDestroy)(void *)); /* Added by 3.5.0 */ int (*bind_zeroblob)(sqlite3_stmt*,int,int); int (*blob_bytes)(sqlite3_blob*); int (*blob_close)(sqlite3_blob*); - int (*blob_open)(sqlite3*,const char*,const char*,const char*,sqlite3_int64,int,sqlite3_blob**); + int (*blob_open)(sqlite3*,const char*,const char*,const char*,sqlite3_int64, + int,sqlite3_blob**); int (*blob_read)(sqlite3_blob*,void*,int,int); int (*blob_write)(sqlite3_blob*,const void*,int,int); - int (*create_collation_v2)(sqlite3*,const char*,int,void*,int(*)(void*,int,const void*,int,const void*),void(*)(void*)); + int (*create_collation_v2)(sqlite3*,const char*,int,void*, + int(*)(void*,int,const void*,int,const void*), + void(*)(void*)); int (*file_control)(sqlite3*,const char*,int,void*); sqlite3_int64 (*memory_highwater)(int); sqlite3_int64 (*memory_used)(void); @@ -193,6 +208,34 @@ struct sqlite3_api_routines { sqlite3_stmt *(*next_stmt)(sqlite3*,sqlite3_stmt*); const char *(*sql)(sqlite3_stmt*); int (*status)(int,int*,int*,int); + int (*backup_finish)(sqlite3_backup*); + sqlite3_backup *(*backup_init)(sqlite3*,const char*,sqlite3*,const char*); + int (*backup_pagecount)(sqlite3_backup*); + int (*backup_remaining)(sqlite3_backup*); + int (*backup_step)(sqlite3_backup*,int); + const char *(*compileoption_get)(int); + int (*compileoption_used)(const char*); + int (*create_function_v2)(sqlite3*,const char*,int,int,void*, + void (*xFunc)(sqlite3_context*,int,sqlite3_value**), + void (*xStep)(sqlite3_context*,int,sqlite3_value**), + void (*xFinal)(sqlite3_context*), + void(*xDestroy)(void*)); + int (*db_config)(sqlite3*,int,...); + sqlite3_mutex *(*db_mutex)(sqlite3*); + int (*db_status)(sqlite3*,int,int*,int*,int); + int (*extended_errcode)(sqlite3*); + void (*log)(int,const char*,...); + sqlite3_int64 (*soft_heap_limit64)(sqlite3_int64); + const char *(*sourceid)(void); + int (*stmt_status)(sqlite3_stmt*,int,int); + int (*strnicmp)(const char*,const char*,int); + int (*unlock_notify)(sqlite3*,void(*)(void**,int),void*); + int (*wal_autocheckpoint)(sqlite3*,int); + int (*wal_checkpoint)(sqlite3*,const char*); + void *(*wal_hook)(sqlite3*,int(*)(void*,sqlite3*,const char*,int),void*); + int (*blob_reopen)(sqlite3_blob*,sqlite3_int64); + int (*vtab_config)(sqlite3*,int op,...); + int (*vtab_on_conflict)(sqlite3*); }; /* @@ -372,6 +415,30 @@ struct sqlite3_api_routines { #define sqlite3_next_stmt sqlite3_api->next_stmt #define sqlite3_sql sqlite3_api->sql #define sqlite3_status sqlite3_api->status +#define sqlite3_backup_finish sqlite3_api->backup_finish +#define sqlite3_backup_init sqlite3_api->backup_init +#define sqlite3_backup_pagecount sqlite3_api->backup_pagecount +#define sqlite3_backup_remaining sqlite3_api->backup_remaining +#define sqlite3_backup_step sqlite3_api->backup_step +#define sqlite3_compileoption_get sqlite3_api->compileoption_get +#define sqlite3_compileoption_used sqlite3_api->compileoption_used +#define sqlite3_create_function_v2 sqlite3_api->create_function_v2 +#define sqlite3_db_config sqlite3_api->db_config +#define sqlite3_db_mutex sqlite3_api->db_mutex +#define sqlite3_db_status sqlite3_api->db_status +#define sqlite3_extended_errcode sqlite3_api->extended_errcode +#define sqlite3_log sqlite3_api->log +#define sqlite3_soft_heap_limit64 sqlite3_api->soft_heap_limit64 +#define sqlite3_sourceid sqlite3_api->sourceid +#define sqlite3_stmt_status sqlite3_api->stmt_status +#define sqlite3_strnicmp sqlite3_api->strnicmp +#define sqlite3_unlock_notify sqlite3_api->unlock_notify +#define sqlite3_wal_autocheckpoint sqlite3_api->wal_autocheckpoint +#define sqlite3_wal_checkpoint sqlite3_api->wal_checkpoint +#define sqlite3_wal_hook sqlite3_api->wal_hook +#define sqlite3_blob_reopen sqlite3_api->blob_reopen +#define sqlite3_vtab_config sqlite3_api->vtab_config +#define sqlite3_vtab_on_conflict sqlite3_api->vtab_on_conflict #endif /* SQLITE_CORE */ #define SQLITE_EXTENSION_INIT1 const sqlite3_api_routines *sqlite3_api = 0; diff --git a/ip-to-country.csv b/ip-to-country.csv index 241e7bcb..ac0992fc 100644 --- a/ip-to-country.csv +++ b/ip-to-country.csv @@ -1,105208 +1,168982 @@ -"16777216","33554431","AU","AUS","AUSTRALIA" -"50331648","69956103","US","USA","UNITED STATES" -"69956104","69956111","BM","BMU","BERMUDA" -"69956112","72349055","US","USA","UNITED STATES" -"72349056","72349119","BM","BMU","BERMUDA" -"72349120","83886079","US","USA","UNITED STATES" -"100663296","121195295","US","USA","UNITED STATES" -"121195296","121195327","IT","ITA","ITALY" -"121195328","134693119","US","USA","UNITED STATES" -"134693120","134693375","CA","CAN","CANADA" -"134693376","134730239","US","USA","UNITED STATES" -"134730240","134730495","CA","CAN","CANADA" -"134730496","152305663","US","USA","UNITED STATES" -"152305664","152338431","GB","GBR","UNITED KINGDOM" -"152338432","167772159","US","USA","UNITED STATES" -"184549376","201636503","US","USA","UNITED STATES" -"201636504","201636511","PR","PRI","PUERTO RICO" -"201636512","201859071","US","USA","UNITED STATES" -"201859072","201859087","VI","VIR","VIRGIN ISLANDS, U.S." -"201859088","201897983","US","USA","UNITED STATES" -"201897984","201898239","PR","PRI","PUERTO RICO" -"201898240","202296847","US","USA","UNITED STATES" -"202296848","202296855","PR","PRI","PUERTO RICO" -"202296856","202385407","US","USA","UNITED STATES" -"202385408","202385919","PR","PRI","PUERTO RICO" -"202385920","202621343","US","USA","UNITED STATES" -"202621344","202621351","PR","PRI","PUERTO RICO" -"202621352","202621431","US","USA","UNITED STATES" -"202621432","202621439","PR","PRI","PUERTO RICO" -"202621440","202621479","US","USA","UNITED STATES" -"202621480","202621487","PR","PRI","PUERTO RICO" -"202621488","202621495","US","USA","UNITED STATES" -"202621496","202621503","PR","PRI","PUERTO RICO" -"202621504","202621703","US","USA","UNITED STATES" -"202621704","202621711","PR","PRI","PUERTO RICO" -"202621712","202696783","US","USA","UNITED STATES" -"202696784","202696791","PR","PRI","PUERTO RICO" -"202696792","202706431","US","USA","UNITED STATES" -"202706432","202706943","PR","PRI","PUERTO RICO" -"202706944","202934671","US","USA","UNITED STATES" -"202934672","202934687","VI","VIR","VIRGIN ISLANDS, U.S." -"202934688","202935551","US","USA","UNITED STATES" -"202935552","202935807","PR","PRI","PUERTO RICO" -"202935808","202938479","US","USA","UNITED STATES" -"202938480","202938495","VI","VIR","VIRGIN ISLANDS, U.S." -"202938496","203625391","US","USA","UNITED STATES" -"203625392","203625399","PR","PRI","PUERTO RICO" -"203625400","203658303","US","USA","UNITED STATES" -"203658304","203658367","PR","PRI","PUERTO RICO" -"203658368","203658415","US","USA","UNITED STATES" -"203658416","203658423","VI","VIR","VIRGIN ISLANDS, U.S." -"203658424","203658751","US","USA","UNITED STATES" -"203658752","203658831","VI","VIR","VIRGIN ISLANDS, U.S." -"203658832","203658847","US","USA","UNITED STATES" -"203658848","203658879","PR","PRI","PUERTO RICO" -"203658880","203658927","US","USA","UNITED STATES" -"203658928","203658951","PR","PRI","PUERTO RICO" -"203658952","203658967","US","USA","UNITED STATES" -"203658968","203658991","VI","VIR","VIRGIN ISLANDS, U.S." -"203658992","203659039","US","USA","UNITED STATES" -"203659040","203659095","VI","VIR","VIRGIN ISLANDS, U.S." -"203659096","204047231","US","USA","UNITED STATES" -"204047232","204047247","VI","VIR","VIRGIN ISLANDS, U.S." -"204047248","204047255","US","USA","UNITED STATES" -"204047256","204047263","PR","PRI","PUERTO RICO" -"204047264","204047295","US","USA","UNITED STATES" -"204047296","204047303","VI","VIR","VIRGIN ISLANDS, U.S." -"204047304","204047311","US","USA","UNITED STATES" -"204047312","204047335","VI","VIR","VIRGIN ISLANDS, U.S." -"204047336","204047431","US","USA","UNITED STATES" -"204047432","204047455","VI","VIR","VIRGIN ISLANDS, U.S." -"204047456","204047463","US","USA","UNITED STATES" -"204047464","204047479","VI","VIR","VIRGIN ISLANDS, U.S." -"204047480","204047503","US","USA","UNITED STATES" -"204047504","204047535","VI","VIR","VIRGIN ISLANDS, U.S." -"204047536","204047551","US","USA","UNITED STATES" -"204047552","204047559","VI","VIR","VIRGIN ISLANDS, U.S." -"204047560","204047567","PR","PRI","PUERTO RICO" -"204047568","204047583","VI","VIR","VIRGIN ISLANDS, U.S." -"204047584","204047591","US","USA","UNITED STATES" -"204047592","204047615","PR","PRI","PUERTO RICO" -"204047616","204047999","US","USA","UNITED STATES" -"204048000","204048007","VI","VIR","VIRGIN ISLANDS, U.S." -"204048008","204048015","US","USA","UNITED STATES" -"204048016","204048031","VI","VIR","VIRGIN ISLANDS, U.S." -"204048032","204048047","PR","PRI","PUERTO RICO" -"204048048","204048063","US","USA","UNITED STATES" -"204048064","204048127","VI","VIR","VIRGIN ISLANDS, U.S." -"204048128","204126151","US","USA","UNITED STATES" -"204126152","204126159","PR","PRI","PUERTO RICO" -"204126160","204152831","US","USA","UNITED STATES" -"204152832","204153855","PR","PRI","PUERTO RICO" -"204153856","205500987","US","USA","UNITED STATES" -"205500988","205500991","CA","CAN","CANADA" -"205500992","205813063","US","USA","UNITED STATES" -"205813064","205813071","PR","PRI","PUERTO RICO" -"205813072","205953311","US","USA","UNITED STATES" -"205953312","205953319","PR","PRI","PUERTO RICO" -"205953320","205953327","US","USA","UNITED STATES" -"205953328","205953351","PR","PRI","PUERTO RICO" -"205953352","209965359","US","USA","UNITED STATES" -"209965360","209965367","PR","PRI","PUERTO RICO" -"209965368","210022479","US","USA","UNITED STATES" -"210022480","210022487","PR","PRI","PUERTO RICO" -"210022488","210784255","US","USA","UNITED STATES" -"210784256","210784383","BO","BOL","BOLIVIA" -"210784384","210784767","US","USA","UNITED STATES" -"210784768","210786303","BO","BOL","BOLIVIA" -"210786304","211410031","US","USA","UNITED STATES" -"211410032","211410039","PR","PRI","PUERTO RICO" -"211410040","211410119","US","USA","UNITED STATES" -"211410120","211410135","PR","PRI","PUERTO RICO" -"211410136","211595575","US","USA","UNITED STATES" -"211595576","211595583","VI","VIR","VIRGIN ISLANDS, U.S." -"211595584","211595615","US","USA","UNITED STATES" -"211595616","211595623","VI","VIR","VIRGIN ISLANDS, U.S." -"211595624","211595639","PR","PRI","PUERTO RICO" -"211595640","211596823","US","USA","UNITED STATES" -"211596824","211596831","VI","VIR","VIRGIN ISLANDS, U.S." -"211596832","211597055","US","USA","UNITED STATES" -"211597056","211597071","VI","VIR","VIRGIN ISLANDS, U.S." -"211597072","211597375","US","USA","UNITED STATES" -"211597376","211597439","VI","VIR","VIRGIN ISLANDS, U.S." -"211597440","211597719","US","USA","UNITED STATES" -"211597720","211597727","VI","VIR","VIRGIN ISLANDS, U.S." -"211597728","211597743","PR","PRI","PUERTO RICO" -"211597744","211597759","US","USA","UNITED STATES" -"211597760","211597775","PR","PRI","PUERTO RICO" -"211597776","211597791","VI","VIR","VIRGIN ISLANDS, U.S." -"211597792","211598399","US","USA","UNITED STATES" -"211598400","211598463","VI","VIR","VIRGIN ISLANDS, U.S." -"211598464","211598623","US","USA","UNITED STATES" -"211598624","211598631","VI","VIR","VIRGIN ISLANDS, U.S." -"211598632","211598639","US","USA","UNITED STATES" -"211598640","211598719","VI","VIR","VIRGIN ISLANDS, U.S." -"211598720","211654127","US","USA","UNITED STATES" -"211654128","211654135","PR","PRI","PUERTO RICO" -"211654136","212105495","US","USA","UNITED STATES" -"212105496","212105503","VI","VIR","VIRGIN ISLANDS, U.S." -"212105504","212122039","US","USA","UNITED STATES" -"212122040","212122047","PR","PRI","PUERTO RICO" -"212122048","212733527","US","USA","UNITED STATES" -"212733528","212733535","PR","PRI","PUERTO RICO" -"212733536","212787199","US","USA","UNITED STATES" -"212787200","212788223","PR","PRI","PUERTO RICO" -"212788224","212788479","US","USA","UNITED STATES" -"212788480","212788607","VI","VIR","VIRGIN ISLANDS, U.S." -"212788608","212788631","US","USA","UNITED STATES" -"212788632","212788639","VI","VIR","VIRGIN ISLANDS, U.S." -"212788640","212788655","US","USA","UNITED STATES" -"212788656","212788663","VI","VIR","VIRGIN ISLANDS, U.S." -"212788664","212788863","US","USA","UNITED STATES" -"212788864","212788991","PR","PRI","PUERTO RICO" -"212788992","212789039","US","USA","UNITED STATES" -"212789040","212789055","VI","VIR","VIRGIN ISLANDS, U.S." -"212789056","212789063","PR","PRI","PUERTO RICO" -"212789064","212789079","VI","VIR","VIRGIN ISLANDS, U.S." -"212789080","212789087","US","USA","UNITED STATES" -"212789088","212789095","VI","VIR","VIRGIN ISLANDS, U.S." -"212789096","212789111","US","USA","UNITED STATES" -"212789112","212789119","PR","PRI","PUERTO RICO" -"212789120","212789127","VI","VIR","VIRGIN ISLANDS, U.S." -"212789128","212789143","US","USA","UNITED STATES" -"212789144","212789151","VI","VIR","VIRGIN ISLANDS, U.S." -"212789152","212789183","US","USA","UNITED STATES" -"212789184","212789191","PR","PRI","PUERTO RICO" -"212789192","212789215","US","USA","UNITED STATES" -"212789216","212789223","VI","VIR","VIRGIN ISLANDS, U.S." -"212789224","212791295","US","USA","UNITED STATES" -"212791296","212791447","VI","VIR","VIRGIN ISLANDS, U.S." -"212791448","212791487","US","USA","UNITED STATES" -"212791488","212791807","PR","PRI","PUERTO RICO" -"212791808","212791815","US","USA","UNITED STATES" -"212791816","212791839","VI","VIR","VIRGIN ISLANDS, U.S." -"212791840","212793199","US","USA","UNITED STATES" -"212793200","212793207","VI","VIR","VIRGIN ISLANDS, U.S." -"212793208","212793215","PR","PRI","PUERTO RICO" -"212793216","212794783","US","USA","UNITED STATES" -"212794784","212794791","VI","VIR","VIRGIN ISLANDS, U.S." -"212794792","212794799","US","USA","UNITED STATES" -"212794800","212794815","VI","VIR","VIRGIN ISLANDS, U.S." -"212794816","212794879","US","USA","UNITED STATES" -"212794880","212794887","VI","VIR","VIRGIN ISLANDS, U.S." -"212794888","212794911","US","USA","UNITED STATES" -"212794912","212794943","PR","PRI","PUERTO RICO" -"212794944","212794975","US","USA","UNITED STATES" -"212794976","212794983","VI","VIR","VIRGIN ISLANDS, U.S." -"212794984","212838527","US","USA","UNITED STATES" -"212838528","212838535","PR","PRI","PUERTO RICO" -"212838536","212890775","US","USA","UNITED STATES" -"212890776","212890783","PR","PRI","PUERTO RICO" -"212890784","212900583","US","USA","UNITED STATES" -"212900584","212900591","PR","PRI","PUERTO RICO" -"212900592","212977063","US","USA","UNITED STATES" -"212977064","212977071","PR","PRI","PUERTO RICO" -"212977072","213162607","US","USA","UNITED STATES" -"213162608","213162615","PR","PRI","PUERTO RICO" -"213162616","213498031","US","USA","UNITED STATES" -"213498032","213498039","PR","PRI","PUERTO RICO" -"213498040","213575847","US","USA","UNITED STATES" -"213575848","213575855","PR","PRI","PUERTO RICO" -"213575856","213579471","US","USA","UNITED STATES" -"213579472","213579479","PR","PRI","PUERTO RICO" -"213579480","213608911","US","USA","UNITED STATES" -"213608912","213608919","PR","PRI","PUERTO RICO" -"213608920","213608927","US","USA","UNITED STATES" -"213608928","213608951","PR","PRI","PUERTO RICO" -"213608952","213895679","US","USA","UNITED STATES" -"213895680","213895743","VI","VIR","VIRGIN ISLANDS, U.S." -"213895744","213925631","US","USA","UNITED STATES" -"213925632","213925887","PR","PRI","PUERTO RICO" -"213925888","213936791","US","USA","UNITED STATES" -"213936792","213936799","PR","PRI","PUERTO RICO" -"213936800","213936871","US","USA","UNITED STATES" -"213936872","213936879","PR","PRI","PUERTO RICO" -"213936880","213936895","US","USA","UNITED STATES" -"213936896","213936903","PR","PRI","PUERTO RICO" -"213936904","214187519","US","USA","UNITED STATES" -"214187520","214187775","VI","VIR","VIRGIN ISLANDS, U.S." -"214187776","214187807","US","USA","UNITED STATES" -"214187808","214187815","PR","PRI","PUERTO RICO" -"214187816","214187895","US","USA","UNITED STATES" -"214187896","214188031","VI","VIR","VIRGIN ISLANDS, U.S." -"214188032","214237247","US","USA","UNITED STATES" -"214237248","214237311","PR","PRI","PUERTO RICO" -"214237312","214448335","US","USA","UNITED STATES" -"214448336","214448343","PR","PRI","PUERTO RICO" -"214448344","214697983","US","USA","UNITED STATES" -"214697984","214698007","VI","VIR","VIRGIN ISLANDS, U.S." -"214698008","214698015","PR","PRI","PUERTO RICO" -"214698016","214698023","US","USA","UNITED STATES" -"214698024","214698031","PR","PRI","PUERTO RICO" -"214698032","214698095","VI","VIR","VIRGIN ISLANDS, U.S." -"214698096","214698103","PR","PRI","PUERTO RICO" -"214698104","214698135","VI","VIR","VIRGIN ISLANDS, U.S." -"214698136","214698143","PR","PRI","PUERTO RICO" -"214698144","214698159","VI","VIR","VIRGIN ISLANDS, U.S." -"214698160","214698239","PR","PRI","PUERTO RICO" -"214698240","214698287","VI","VIR","VIRGIN ISLANDS, U.S." -"214698288","214698303","US","USA","UNITED STATES" -"214698304","214698319","VI","VIR","VIRGIN ISLANDS, U.S." -"214698320","214698367","PR","PRI","PUERTO RICO" -"214698368","214698375","VI","VIR","VIRGIN ISLANDS, U.S." -"214698376","214698383","US","USA","UNITED STATES" -"214698384","214698639","PR","PRI","PUERTO RICO" -"214698640","214698655","VI","VIR","VIRGIN ISLANDS, U.S." -"214698656","214699231","PR","PRI","PUERTO RICO" -"214699232","214699295","VI","VIR","VIRGIN ISLANDS, U.S." -"214699296","214699303","US","USA","UNITED STATES" -"214699304","214699311","VI","VIR","VIRGIN ISLANDS, U.S." -"214699312","214699335","PR","PRI","PUERTO RICO" -"214699336","214699359","VI","VIR","VIRGIN ISLANDS, U.S." -"214699360","214699383","US","USA","UNITED STATES" -"214699384","214699415","VI","VIR","VIRGIN ISLANDS, U.S." -"214699416","214699519","US","USA","UNITED STATES" -"214699520","214699647","PR","PRI","PUERTO RICO" -"214699648","214858655","US","USA","UNITED STATES" -"214858656","214858671","NL","NLD","NETHERLANDS" -"214858672","216417663","US","USA","UNITED STATES" -"216417664","216417727","PR","PRI","PUERTO RICO" -"216417728","216637639","US","USA","UNITED STATES" -"216637640","216637647","PR","PRI","PUERTO RICO" -"216637648","216820479","US","USA","UNITED STATES" -"216820480","216820487","PR","PRI","PUERTO RICO" -"216820488","216835615","US","USA","UNITED STATES" -"216835616","216835623","PR","PRI","PUERTO RICO" -"216835624","216881191","US","USA","UNITED STATES" -"216881192","216881199","PR","PRI","PUERTO RICO" -"216881200","216996407","US","USA","UNITED STATES" -"216996408","216996415","PR","PRI","PUERTO RICO" -"216996416","216996543","US","USA","UNITED STATES" -"216996544","216996559","PR","PRI","PUERTO RICO" -"216996560","217027999","US","USA","UNITED STATES" -"217028000","217028007","PR","PRI","PUERTO RICO" -"217028008","217046775","US","USA","UNITED STATES" -"217046776","217046783","PR","PRI","PUERTO RICO" -"217046784","234881023","US","USA","UNITED STATES" -"251658240","260227071","US","USA","UNITED STATES" -"260227072","260231167","GB","GBR","UNITED KINGDOM" -"260231168","260976639","US","USA","UNITED STATES" -"260976640","260980735","GB","GBR","UNITED KINGDOM" -"260980736","264482815","US","USA","UNITED STATES" -"264482816","264486911","DE","DEU","GERMANY" -"264486912","264495103","US","USA","UNITED STATES" -"264495104","264503295","CH","CHE","SWITZERLAND" -"264503296","264617983","US","USA","UNITED STATES" -"264617984","264667135","DE","DEU","GERMANY" -"264667136","264699903","US","USA","UNITED STATES" -"264699904","264716287","CH","CHE","SWITZERLAND" -"264716288","264798207","US","USA","UNITED STATES" -"264798208","264802303","GB","GBR","UNITED KINGDOM" -"264802304","265023487","US","USA","UNITED STATES" -"265023488","265027583","GB","GBR","UNITED KINGDOM" -"265027584","265277439","US","USA","UNITED STATES" -"265277440","265289727","GB","GBR","UNITED KINGDOM" -"265289728","289011535","US","USA","UNITED STATES" -"289011536","289011543","IT","ITA","ITALY" -"289011544","323243895","US","USA","UNITED STATES" -"323243896","323243903","FR","FRA","FRANCE" -"323243904","332132119","US","USA","UNITED STATES" -"332132120","332132127","IL","ISR","ISRAEL" -"332132128","355993887","US","USA","UNITED STATES" -"355993888","355993895","IT","ITA","ITALY" -"355993896","368674047","US","USA","UNITED STATES" -"368674048","368674303","ES","ESP","SPAIN" -"368674304","385875967","US","USA","UNITED STATES" -"402653184","404684799","US","USA","UNITED STATES" -"404692992","404979711","US","USA","UNITED STATES" -"405012480","405143551","CA","CAN","CANADA" -"405143552","405180415","US","USA","UNITED STATES" -"405180416","405184511","CA","CAN","CANADA" -"405184512","405192703","US","USA","UNITED STATES" -"405209088","405295103","US","USA","UNITED STATES" -"405299200","405331967","US","USA","UNITED STATES" -"405340160","405364735","US","USA","UNITED STATES" -"405405696","405422079","PR","PRI","PUERTO RICO" -"405422080","405798911","US","USA","UNITED STATES" -"405831680","405843967","US","USA","UNITED STATES" -"405843968","405848063","CA","CAN","CANADA" -"405848064","405864447","PR","PRI","PUERTO RICO" -"405864448","405909503","US","USA","UNITED STATES" -"405921792","405929983","CA","CAN","CANADA" -"405929984","405938175","US","USA","UNITED STATES" -"405962752","405970943","US","USA","UNITED STATES" -"406003712","406011903","US","USA","UNITED STATES" -"406044672","406052863","US","USA","UNITED STATES" -"406061056","406102015","US","USA","UNITED STATES" -"406142976","406147071","US","USA","UNITED STATES" -"406147072","406151167","CA","CAN","CANADA" -"406159360","406175743","US","USA","UNITED STATES" -"406183936","406188031","CA","CAN","CANADA" -"406192128","406208511","CA","CAN","CANADA" -"406216704","406241279","US","USA","UNITED STATES" -"406241280","406257663","PR","PRI","PUERTO RICO" -"406274048","406282239","PR","PRI","PUERTO RICO" -"406298624","406306815","PR","PRI","PUERTO RICO" -"406323200","406388735","US","USA","UNITED STATES" -"406388736","406454271","CA","CAN","CANADA" -"406454272","406847487","US","USA","UNITED STATES" -"406847488","407408639","CA","CAN","CANADA" -"407408640","407597055","US","USA","UNITED STATES" -"407601152","407605247","US","USA","UNITED STATES" -"407609344","407613439","US","USA","UNITED STATES" -"407633920","408420351","CA","CAN","CANADA" -"408420352","408502271","US","USA","UNITED STATES" -"408502272","408518655","CA","CAN","CANADA" -"408518656","408535039","US","USA","UNITED STATES" -"408535040","408551423","CA","CAN","CANADA" -"408551424","408719359","US","USA","UNITED STATES" -"408723456","409255935","US","USA","UNITED STATES" -"409272320","409337855","US","USA","UNITED STATES" -"409337856","409354239","CA","CAN","CANADA" -"409370624","409509887","US","USA","UNITED STATES" -"409534464","409550847","US","USA","UNITED STATES" -"409567232","409595903","US","USA","UNITED STATES" -"409600000","409731071","US","USA","UNITED STATES" -"409731072","409862143","CA","CAN","CANADA" -"409862144","410124287","US","USA","UNITED STATES" -"410124288","410189823","CA","CAN","CANADA" -"410189824","410648575","US","USA","UNITED STATES" -"410648576","410714111","CA","CAN","CANADA" -"410714112","411164671","US","USA","UNITED STATES" -"411164672","411168767","CA","CAN","CANADA" -"411172864","411303935","US","USA","UNITED STATES" -"411303936","411369471","NL","NLD","NETHERLANDS" -"411566080","411639807","US","USA","UNITED STATES" -"411639808","411643903","CA","CAN","CANADA" -"411648000","411664383","CA","CAN","CANADA" -"411664384","411680767","US","USA","UNITED STATES" -"411680768","411688959","CA","CAN","CANADA" -"411697152","411717631","CA","CAN","CANADA" -"411721728","411746303","CA","CAN","CANADA" -"411746304","411762687","PR","PRI","PUERTO RICO" -"411762688","411770879","CA","CAN","CANADA" -"411770880","411779071","US","USA","UNITED STATES" -"411779072","411828223","PR","PRI","PUERTO RICO" -"411828224","411885567","US","USA","UNITED STATES" -"411893760","411975679","CA","CAN","CANADA" -"411983872","411992063","US","USA","UNITED STATES" -"412024832","412057599","US","USA","UNITED STATES" -"412073984","412221439","US","USA","UNITED STATES" -"412221440","412229631","CA","CAN","CANADA" -"412286976","412483583","US","USA","UNITED STATES" -"412483584","412549119","CA","CAN","CANADA" -"412549120","412614655","US","USA","UNITED STATES" -"412647424","412680191","US","USA","UNITED STATES" -"412680192","412688383","CA","CAN","CANADA" -"412696576","412704767","US","USA","UNITED STATES" -"412708864","412909567","US","USA","UNITED STATES" -"412909568","412917759","CA","CAN","CANADA" -"412942336","412946431","US","USA","UNITED STATES" -"413007872","413908991","US","USA","UNITED STATES" -"413908992","413925375","PR","PRI","PUERTO RICO" -"413925376","415760383","US","USA","UNITED STATES" -"415760384","416022527","CA","CAN","CANADA" -"416022528","416059391","US","USA","UNITED STATES" -"416088064","416153599","US","USA","UNITED STATES" -"416153600","416161791","BS","BHS","BAHAMAS" -"416161792","416219135","US","USA","UNITED STATES" -"416219136","416251903","CA","CAN","CANADA" -"416251904","416546815","US","USA","UNITED STATES" -"416546816","416579583","CA","CAN","CANADA" -"416612352","416628735","US","USA","UNITED STATES" -"416628736","416636927","CA","CAN","CANADA" -"416636928","416641023","US","USA","UNITED STATES" -"416645120","416743423","US","USA","UNITED STATES" -"416743424","416776191","CA","CAN","CANADA" -"416776192","417202175","US","USA","UNITED STATES" -"417202176","417267711","CA","CAN","CANADA" -"417267712","417288191","US","USA","UNITED STATES" -"417292288","417366015","US","USA","UNITED STATES" -"417366016","417398783","CA","CAN","CANADA" -"417398784","417427455","US","USA","UNITED STATES" -"417464320","417529855","CA","CAN","CANADA" -"417529856","417538047","PR","PRI","PUERTO RICO" -"417538048","417775615","US","USA","UNITED STATES" -"417775616","417796095","CA","CAN","CANADA" -"417796096","417800191","US","USA","UNITED STATES" -"417800192","417808383","BS","BHS","BAHAMAS" -"417808384","417820671","CA","CAN","CANADA" -"417824768","417857535","US","USA","UNITED STATES" -"417857536","417923071","AR","ARG","ARGENTINA" -"417923072","418062335","US","USA","UNITED STATES" -"418062336","418070527","CA","CAN","CANADA" -"418070528","418074623","US","USA","UNITED STATES" -"418078720","418119679","CA","CAN","CANADA" -"418119680","418316287","US","USA","UNITED STATES" -"418316288","418320383","CA","CAN","CANADA" -"418324480","418643967","US","USA","UNITED STATES" -"418643968","418668543","CA","CAN","CANADA" -"418672640","418676735","CA","CAN","CANADA" -"418676736","418687743","BS","BHS","BAHAMAS" -"418687744","418687998","DM","DMA","DOMINICA" -"418687999","418693119","BS","BHS","BAHAMAS" -"418693120","418709503","CA","CAN","CANADA" -"418709504","418766847","US","USA","UNITED STATES" -"418766848","418770943","CA","CAN","CANADA" -"418807808","418815999","US","USA","UNITED STATES" -"418824192","418832383","US","USA","UNITED STATES" -"418840576","419430399","US","USA","UNITED STATES" -"419430400","436207615","GB","GBR","UNITED KINGDOM" -"436207616","452984831","US","USA","UNITED STATES" -"452984832","469762047","AU","AUS","AUSTRALIA" -"469762048","520093695","US","USA","UNITED STATES" -"536870912","540680895","US","USA","UNITED STATES" -"540680896","540680959","BE","BEL","BELGIUM" -"540680960","540683775","US","USA","UNITED STATES" -"540683776","540683783","DE","DEU","GERMANY" -"540683784","540685567","US","USA","UNITED STATES" -"540685568","540685631","FR","FRA","FRANCE" -"540685632","540687231","US","USA","UNITED STATES" -"540687232","540687359","CA","CAN","CANADA" -"540687360","540694527","US","USA","UNITED STATES" -"540694528","540694591","IT","ITA","ITALY" -"540694592","540705023","US","USA","UNITED STATES" -"540705024","540705031","IE","IRL","IRELAND" -"540705032","540705535","US","USA","UNITED STATES" -"540705536","540705599","IE","IRL","IRELAND" -"540705600","540711935","US","USA","UNITED STATES" -"540711936","540712447","NL","NLD","NETHERLANDS" -"540712448","540737535","US","USA","UNITED STATES" -"540737536","540737791","BZ","BLZ","BELIZE" -"540737792","540737919","BR","BRA","BRAZIL" -"540737920","540750175","BZ","BLZ","BELIZE" -"540750176","540750191","MX","MEX","MEXICO" -"540750192","540803071","BZ","BLZ","BELIZE" -"540803072","540819455","US","USA","UNITED STATES" -"540819456","540823551","CA","CAN","CANADA" -"540823552","540826671","US","USA","UNITED STATES" -"540826672","540826719","CA","CAN","CANADA" -"540826720","540827135","US","USA","UNITED STATES" -"540827136","540827263","CA","CAN","CANADA" -"540827264","540827295","US","USA","UNITED STATES" -"540827296","540827311","CA","CAN","CANADA" -"540827312","540827359","US","USA","UNITED STATES" -"540827360","540827375","CA","CAN","CANADA" -"540827376","540827391","US","USA","UNITED STATES" -"540827392","540827423","CA","CAN","CANADA" -"540827424","540827471","US","USA","UNITED STATES" -"540827472","540827487","CA","CAN","CANADA" -"540827488","540827519","US","USA","UNITED STATES" -"540827520","540827551","CA","CAN","CANADA" -"540827552","540827583","US","USA","UNITED STATES" -"540827584","540827647","CA","CAN","CANADA" -"540827648","540829695","US","USA","UNITED STATES" -"540829696","540829951","CA","CAN","CANADA" -"540829952","540830623","US","USA","UNITED STATES" -"540830624","540830735","CA","CAN","CANADA" -"540830736","540830815","US","USA","UNITED STATES" -"540830816","540830831","CA","CAN","CANADA" -"540830832","540830847","US","USA","UNITED STATES" -"540830848","540830895","CA","CAN","CANADA" -"540830896","543690751","US","USA","UNITED STATES" -"543690752","543691007","AR","ARG","ARGENTINA" -"543691008","543844351","US","USA","UNITED STATES" -"543844352","543844607","CH","CHE","SWITZERLAND" -"543844608","603979775","US","USA","UNITED STATES" -"637534208","654311423","US","USA","UNITED STATES" -"671088640","687865855","US","USA","UNITED STATES" -"721420288","736100351","JP","JPN","JAPAN" -"736100352","736624639","AU","AUS","AUSTRALIA" -"736624640","736886783","JP","JPN","JAPAN" -"736886784","737411071","AU","AUS","AUSTRALIA" -"737411072","737476607","JP","JPN","JAPAN" -"737476608","738000895","AU","AUS","AUSTRALIA" -"738000896","738066431","JP","JPN","JAPAN" -"738066432","738197503","AU","AUS","AUSTRALIA" -"738197504","771751935","US","USA","UNITED STATES" -"788529152","805306367","CA","CAN","CANADA" -"805306368","822083583","US","USA","UNITED STATES" -"855638016","872415231","GB","GBR","UNITED KINGDOM" -"872415232","889192447","US","USA","UNITED STATES" -"889192448","905969663","DE","DEU","GERMANY" -"905969664","956301311","US","USA","UNITED STATES" -"956301312","973078527","FR","FRA","FRANCE" -"973078528","973209599","JP","JPN","JAPAN" -"973209600","973275135","IN","IND","INDIA" -"973275136","973471743","JP","JPN","JAPAN" -"973471744","973602815","AU","AUS","AUSTRALIA" -"973602816","973864959","TH","THA","THAILAND" -"973864960","973996031","JP","JPN","JAPAN" -"973996032","974782463","CN","CHN","CHINA" -"974782464","974880767","MY","MYS","MALAYSIA" -"974880768","974913535","PK","PAK","PAKISTAN" -"974913536","974979071","NZ","NZL","NEW ZEALAND" -"974979072","975044607","KR","KOR","REPUBLIC OF KOREA" -"975044608","977272831","CN","CHN","CHINA" -"977272832","977305599","TH","THA","THAILAND" -"977305600","977338367","HK","HKG","HONG KONG" -"977338368","977346559","SG","SGP","SINGAPORE" -"977346560","977354751","JP","JPN","JAPAN" -"977354752","977371135","KR","KOR","REPUBLIC OF KOREA" -"977371136","977395711","PK","PAK","PAKISTAN" -"977395712","977397759","BD","BGD","BANGLADESH" -"977397760","977399807","AU","AUS","AUSTRALIA" -"977399808","977401855","ID","IDN","INDONESIA" -"977401856","977403903","AU","AUS","AUSTRALIA" -"977403904","977534975","CN","CHN","CHINA" -"977534976","977567743","IN","IND","INDIA" -"977567744","977600511","CN","CHN","CHINA" -"977600512","977666047","PH","PHL","PHILIPPINES" -"977666048","977731583","JP","JPN","JAPAN" -"977731584","977764351","PH","PHL","PHILIPPINES" -"977764352","977797119","MY","MYS","MALAYSIA" -"977797120","978321407","KR","KOR","REPUBLIC OF KOREA" -"978321408","978452479","JP","JPN","JAPAN" -"978452480","978583551","CN","CHN","CHINA" -"978583552","978599935","JP","JPN","JAPAN" -"978599936","978640895","AU","AUS","AUSTRALIA" -"978640896","978644991","NZ","NZL","NEW ZEALAND" -"978644992","978649087","AU","AUS","AUSTRALIA" -"978649088","978714623","JP","JPN","JAPAN" -"978714624","978780159","TW","TWN","TAIWAN" -"978780160","978784255","AU","AUS","AUSTRALIA" -"978784256","978788351","JP","JPN","JAPAN" -"978788352","978796543","KR","KOR","REPUBLIC OF KOREA" -"978796544","978812927","CN","CHN","CHINA" -"978812928","979369983","JP","JPN","JAPAN" -"979369984","979435519","AU","AUS","AUSTRALIA" -"979435520","979468287","TH","THA","THAILAND" -"979468288","979501055","AU","AUS","AUSTRALIA" -"979501056","979566591","JP","JPN","JAPAN" -"979566592","979599359","TW","TWN","TAIWAN" -"979599360","979763199","CN","CHN","CHINA" -"979763200","979894271","KR","KOR","REPUBLIC OF KOREA" -"979894272","980418559","AU","AUS","AUSTRALIA" -"980418560","980549631","JP","JPN","JAPAN" -"980549632","980680703","TW","TWN","TAIWAN" -"980680704","980942847","CN","CHN","CHINA" -"980942848","981467135","KR","KOR","REPUBLIC OF KOREA" -"981467136","981991423","CN","CHN","CHINA" -"981991424","982122495","TH","THA","THAILAND" -"982122496","982171647","JP","JPN","JAPAN" -"982171648","982188031","KR","KOR","REPUBLIC OF KOREA" -"982188032","982253567","MY","MYS","MALAYSIA" -"982253568","982515711","KR","KOR","REPUBLIC OF KOREA" -"982515712","982581247","CN","CHN","CHINA" -"982581248","982614015","KR","KOR","REPUBLIC OF KOREA" -"982614016","982622207","AU","AUS","AUSTRALIA" -"982622208","982624255","JP","JPN","JAPAN" -"982624256","982626303","ID","IDN","INDONESIA" -"982626304","982628351","AU","AUS","AUSTRALIA" -"982628352","982630399","BD","BGD","BANGLADESH" -"982630400","982646783","SG","SGP","SINGAPORE" -"982646784","982671359","JP","JPN","JAPAN" -"982671360","982679551","IN","IND","INDIA" -"982679552","982695935","SG","SGP","SINGAPORE" -"982695936","982712319","KR","KOR","REPUBLIC OF KOREA" -"982712320","982745087","TH","THA","THAILAND" -"982745088","982753279","AF","AFG","AFGHANISTAN" -"982753280","982755327","JP","JPN","JAPAN" -"982755328","982757375","BD","BGD","BANGLADESH" -"982757376","982759423","AU","AUS","AUSTRALIA" -"982759424","982761471","ID","IDN","INDONESIA" -"982761472","982777855","JP","JPN","JAPAN" -"982777856","983039999","KR","KOR","REPUBLIC OF KOREA" -"983040000","983171071","HK","HKG","HONG KONG" -"983171072","983302143","CN","CHN","CHINA" -"983302144","983564287","JP","JPN","JAPAN" -"983564288","984612863","AU","AUS","AUSTRALIA" -"984612864","984743935","HK","HKG","HONG KONG" -"984743936","984875007","AU","AUS","AUSTRALIA" -"984875008","984956927","KR","KOR","REPUBLIC OF KOREA" -"984956928","984965119","AU","AUS","AUSTRALIA" -"984965120","984973311","PK","PAK","PAKISTAN" -"984973312","985006079","TH","THA","THAILAND" -"985006080","985071615","SG","SGP","SINGAPORE" -"985071616","985137151","JP","JPN","JAPAN" -"985137152","985202687","KR","KOR","REPUBLIC OF KOREA" -"985202688","985268223","SG","SGP","SINGAPORE" -"985268224","985399295","VN","VNM","VIET NAM" -"985399296","985661439","JP","JPN","JAPAN" -"985661440","987758591","CN","CHN","CHINA" -"987758592","988807167","KR","KOR","REPUBLIC OF KOREA" -"988807168","989855743","CN","CHN","CHINA" -"989855744","991952895","KR","KOR","REPUBLIC OF KOREA" -"991952896","995360767","CN","CHN","CHINA" -"995360768","995532799","JP","JPN","JAPAN" -"995532800","995540991","AU","AUS","AUSTRALIA" -"995540992","995557375","KR","KOR","REPUBLIC OF KOREA" -"995557376","995622911","JP","JPN","JAPAN" -"995622912","996409343","IN","IND","INDIA" -"996409344","996605951","AU","AUS","AUSTRALIA" -"996605952","996671487","PK","PAK","PAKISTAN" -"996671488","996802559","TW","TWN","TAIWAN" -"996802560","996868095","JP","JPN","JAPAN" -"996868096","997195775","CN","CHN","CHINA" -"997195776","998244351","TW","TWN","TAIWAN" -"998244352","999292927","JP","JPN","JAPAN" -"999292928","999423999","IN","IND","INDIA" -"999424000","999555071","JP","JPN","JAPAN" -"999555072","999686143","HK","HKG","HONG KONG" -"999686144","999751679","KR","KOR","REPUBLIC OF KOREA" -"999751680","999784447","CN","CHN","CHINA" -"999784448","999800831","AU","AUS","AUSTRALIA" -"999800832","999817215","KR","KOR","REPUBLIC OF KOREA" -"999817216","999849983","BD","BGD","BANGLADESH" -"999849984","999866367","KR","KOR","REPUBLIC OF KOREA" -"999866368","999882751","HK","HKG","HONG KONG" -"999882752","999948287","JP","JPN","JAPAN" -"999948288","1000013823","AU","AUS","AUSTRALIA" -"1000013824","1000079359","CN","CHN","CHINA" -"1000079360","1000341503","JP","JPN","JAPAN" -"1000341504","1000734719","IN","IND","INDIA" -"1000734720","1000800255","JP","JPN","JAPAN" -"1000800256","1000865791","AU","AUS","AUSTRALIA" -"1000865792","1001127935","JP","JPN","JAPAN" -"1001127936","1001390079","CN","CHN","CHINA" -"1001390080","1002045439","IN","IND","INDIA" -"1002045440","1002176511","KR","KOR","REPUBLIC OF KOREA" -"1002176512","1002242047","HK","HKG","HONG KONG" -"1002242048","1002307583","SG","SGP","SINGAPORE" -"1002307584","1002373119","JP","JPN","JAPAN" -"1002373120","1002405887","CN","CHN","CHINA" -"1002405888","1002422271","JP","JPN","JAPAN" -"1002422272","1002434559","AU","AUS","AUSTRALIA" -"1002434560","1008730111","CN","CHN","CHINA" -"1008730112","1009778687","JP","JPN","JAPAN" -"1009778688","1010237439","MY","MYS","MALAYSIA" -"1010237440","1010302975","CN","CHN","CHINA" -"1010302976","1010761727","JP","JPN","JAPAN" -"1010761728","1010827263","CN","CHN","CHINA" -"1010827264","1017118719","JP","JPN","JAPAN" -"1017118720","1019215871","CN","CHN","CHINA" -"1019215872","1019346943","JP","JPN","JAPAN" -"1019346944","1019478015","CN","CHN","CHINA" -"1019478016","1019609087","KR","KOR","REPUBLIC OF KOREA" -"1019609088","1019740159","TW","TWN","TAIWAN" -"1019740160","1021313023","CN","CHN","CHINA" -"1021313024","1021837311","AU","AUS","AUSTRALIA" -"1021837312","1021968383","CN","CHN","CHINA" -"1021968384","1021986495","NZ","NZL","NEW ZEALAND" -"1021986496","1021986559","PA","PAN","PANAMA" -"1021986560","1022033919","NZ","NZL","NEW ZEALAND" -"1022033920","1022099455","CN","CHN","CHINA" -"1022099456","1022361599","JP","JPN","JAPAN" -"1022361600","1022558207","AU","AUS","AUSTRALIA" -"1022558208","1022623743","IN","IND","INDIA" -"1022623744","1022722047","TW","TWN","TAIWAN" -"1022722048","1022754815","CN","CHN","CHINA" -"1022754816","1022820351","AU","AUS","AUSTRALIA" -"1022820352","1022885887","CN","CHN","CHINA" -"1022885888","1023148031","TW","TWN","TAIWAN" -"1023148032","1023213567","CN","CHN","CHINA" -"1023213568","1023238143","AU","AUS","AUSTRALIA" -"1023238144","1023246335","ID","IDN","INDONESIA" -"1023246336","1023279103","CN","CHN","CHINA" -"1023279104","1023311871","IN","IND","INDIA" -"1023311872","1023328255","US","USA","UNITED STATES" -"1023328256","1023344639","JP","JPN","JAPAN" -"1023344640","1023410175","CN","CHN","CHINA" -"1023410176","1023672319","IN","IND","INDIA" -"1023672320","1023688703","HK","HKG","HONG KONG" -"1023688704","1023692799","AU","AUS","AUSTRALIA" -"1023692800","1023693823","CN","CHN","CHINA" -"1023693824","1023696895","AU","AUS","AUSTRALIA" -"1023696896","1023705087","MY","MYS","MALAYSIA" -"1023705088","1023717375","JP","JPN","JAPAN" -"1023717376","1023721471","CN","CHN","CHINA" -"1023721472","1023737855","KR","KOR","REPUBLIC OF KOREA" -"1023737856","1023770623","ID","IDN","INDONESIA" -"1023770624","1023778815","PK","PAK","PAKISTAN" -"1023778816","1023787007","KR","KOR","REPUBLIC OF KOREA" -"1023787008","1023791103","AU","AUS","AUSTRALIA" -"1023791104","1023795199","NC","NCL","NEW CALEDONIA" -"1023795200","1023803391","JP","JPN","JAPAN" -"1023803392","1023852543","MY","MYS","MALAYSIA" -"1023852544","1023868927","BN","BRN","BRUNEI DARUSSALAM" -"1023868928","1023901695","JP","JPN","JAPAN" -"1023901696","1023934463","TH","THA","THAILAND" -"1023934464","1023950847","AU","AUS","AUSTRALIA" -"1023950848","1023954943","ID","IDN","INDONESIA" -"1023954944","1023959039","JP","JPN","JAPAN" -"1023959040","1023967231","AU","AUS","AUSTRALIA" -"1023967232","1023975423","IN","IND","INDIA" -"1023975424","1023979519","CN","CHN","CHINA" -"1023979520","1023983615","AU","AUS","AUSTRALIA" -"1023983616","1023999999","SG","SGP","SINGAPORE" -"1024000000","1024032767","PH","PHL","PHILIPPINES" -"1024032768","1024065535","AU","AUS","AUSTRALIA" -"1024065536","1024131071","HK","HKG","HONG KONG" -"1024131072","1024163839","IN","IND","INDIA" -"1024163840","1024184319","JP","JPN","JAPAN" -"1024184320","1024188415","MY","MYS","MALAYSIA" -"1024188416","1024196607","AU","AUS","AUSTRALIA" -"1024196608","1024229375","IN","IND","INDIA" -"1024229376","1024262143","JP","JPN","JAPAN" -"1024262144","1024327679","SG","SGP","SINGAPORE" -"1024327680","1024328703","US","USA","UNITED STATES" -"1024328704","1024329279","IN","IND","INDIA" -"1024329280","1024329343","US","USA","UNITED STATES" -"1024329344","1024329471","IN","IND","INDIA" -"1024329472","1024329663","US","USA","UNITED STATES" -"1024329664","1024329695","IN","IND","INDIA" -"1024329696","1024330255","US","USA","UNITED STATES" -"1024330256","1024330271","IN","IND","INDIA" -"1024330272","1024330367","US","USA","UNITED STATES" -"1024330368","1024330399","IN","IND","INDIA" -"1024330400","1024330751","US","USA","UNITED STATES" -"1024330752","1024330759","IN","IND","INDIA" -"1024330760","1024331327","US","USA","UNITED STATES" -"1024331328","1024331519","IN","IND","INDIA" -"1024331520","1024331551","US","USA","UNITED STATES" -"1024331552","1024331583","IN","IND","INDIA" -"1024331584","1024332287","US","USA","UNITED STATES" -"1024332288","1024332415","IN","IND","INDIA" -"1024332416","1024332487","US","USA","UNITED STATES" -"1024332488","1024332495","IN","IND","INDIA" -"1024332496","1024332927","US","USA","UNITED STATES" -"1024332928","1024333055","IN","IND","INDIA" -"1024333056","1024333247","US","USA","UNITED STATES" -"1024333248","1024333311","HK","HKG","HONG KONG" -"1024333312","1024333367","US","USA","UNITED STATES" -"1024333368","1024333375","IN","IND","INDIA" -"1024333376","1024333415","US","USA","UNITED STATES" -"1024333416","1024333423","IN","IND","INDIA" -"1024333424","1024333791","US","USA","UNITED STATES" -"1024333792","1024333823","ID","IDN","INDONESIA" -"1024333824","1024333951","US","USA","UNITED STATES" -"1024333952","1024334079","IN","IND","INDIA" -"1024334080","1024334279","US","USA","UNITED STATES" -"1024334280","1024334287","CN","CHN","CHINA" -"1024334288","1024334727","US","USA","UNITED STATES" -"1024334728","1024334735","SG","SGP","SINGAPORE" -"1024334736","1024334847","US","USA","UNITED STATES" -"1024334848","1024334911","PH","PHL","PHILIPPINES" -"1024334912","1024335111","US","USA","UNITED STATES" -"1024335112","1024335119","CN","CHN","CHINA" -"1024335120","1024335143","US","USA","UNITED STATES" -"1024335144","1024335151","ID","IDN","INDONESIA" -"1024335152","1024335167","JP","JPN","JAPAN" -"1024335168","1024335183","US","USA","UNITED STATES" -"1024335184","1024335199","CN","CHN","CHINA" -"1024335200","1024335263","US","USA","UNITED STATES" -"1024335264","1024335271","JP","JPN","JAPAN" -"1024335272","1024335679","US","USA","UNITED STATES" -"1024335680","1024335743","IN","IND","INDIA" -"1024335744","1024335807","US","USA","UNITED STATES" -"1024335808","1024335871","IN","IND","INDIA" -"1024335872","1024338311","US","USA","UNITED STATES" -"1024338312","1024338319","PH","PHL","PHILIPPINES" -"1024338320","1024338631","US","USA","UNITED STATES" -"1024338632","1024338639","MY","MYS","MALAYSIA" -"1024338640","1024339583","US","USA","UNITED STATES" -"1024339584","1024339711","HK","HKG","HONG KONG" -"1024339712","1024339967","ID","IDN","INDONESIA" -"1024339968","1024340511","US","USA","UNITED STATES" -"1024340512","1024340519","TH","THA","THAILAND" -"1024340520","1024344063","US","USA","UNITED STATES" -"1024344064","1024352255","SG","SGP","SINGAPORE" -"1024352256","1024360447","AU","AUS","AUSTRALIA" -"1024360448","1024360535","HK","HKG","HONG KONG" -"1024360536","1024360543","AU","AUS","AUSTRALIA" -"1024360544","1024360671","HK","HKG","HONG KONG" -"1024360672","1024360703","AU","AUS","AUSTRALIA" -"1024360704","1024361007","HK","HKG","HONG KONG" -"1024361008","1024361039","AU","AUS","AUSTRALIA" -"1024361040","1024361087","HK","HKG","HONG KONG" -"1024361088","1024361103","AU","AUS","AUSTRALIA" -"1024361104","1024361135","HK","HKG","HONG KONG" -"1024361136","1024361151","AU","AUS","AUSTRALIA" -"1024361152","1024361183","HK","HKG","HONG KONG" -"1024361184","1024361215","AU","AUS","AUSTRALIA" -"1024361216","1024361311","HK","HKG","HONG KONG" -"1024361312","1024361327","AU","AUS","AUSTRALIA" -"1024361328","1024361375","HK","HKG","HONG KONG" -"1024361376","1024361391","AU","AUS","AUSTRALIA" -"1024361392","1024361439","HK","HKG","HONG KONG" -"1024361440","1024361455","AU","AUS","AUSTRALIA" -"1024361456","1024361471","HK","HKG","HONG KONG" -"1024361472","1024361487","TW","TWN","TAIWAN" -"1024361488","1024361503","AU","AUS","AUSTRALIA" -"1024361504","1024361519","PH","PHL","PHILIPPINES" -"1024361520","1024361535","AU","AUS","AUSTRALIA" -"1024361536","1024361567","PH","PHL","PHILIPPINES" -"1024361568","1024361727","AU","AUS","AUSTRALIA" -"1024361728","1024361759","TW","TWN","TAIWAN" -"1024361760","1024361775","PH","PHL","PHILIPPINES" -"1024361776","1024361791","AU","AUS","AUSTRALIA" -"1024361792","1024361807","PH","PHL","PHILIPPINES" -"1024361808","1024361823","TW","TWN","TAIWAN" -"1024361824","1024361831","AU","AUS","AUSTRALIA" -"1024361832","1024362239","TW","TWN","TAIWAN" -"1024362240","1024362287","MY","MYS","MALAYSIA" -"1024362288","1024362303","SG","SGP","SINGAPORE" -"1024362304","1024362335","MY","MYS","MALAYSIA" -"1024362336","1024362351","AU","AUS","AUSTRALIA" -"1024362352","1024362367","SG","SGP","SINGAPORE" -"1024362368","1024362495","AU","AUS","AUSTRALIA" -"1024362496","1024362559","MY","MYS","MALAYSIA" -"1024362560","1024362575","AU","AUS","AUSTRALIA" -"1024362576","1024362599","MY","MYS","MALAYSIA" -"1024362600","1024362671","SG","SGP","SINGAPORE" -"1024362672","1024362687","MY","MYS","MALAYSIA" -"1024362688","1024362703","AU","AUS","AUSTRALIA" -"1024362704","1024362719","MY","MYS","MALAYSIA" -"1024362720","1024362735","SG","SGP","SINGAPORE" -"1024362736","1024362759","AU","AUS","AUSTRALIA" -"1024362760","1024362767","MY","MYS","MALAYSIA" -"1024362768","1024362815","AU","AUS","AUSTRALIA" -"1024362816","1024362976","SG","SGP","SINGAPORE" -"1024362977","1024363007","AU","AUS","AUSTRALIA" -"1024363008","1024363015","SG","SGP","SINGAPORE" -"1024363016","1024363023","AU","AUS","AUSTRALIA" -"1024363024","1024363039","SG","SGP","SINGAPORE" -"1024363040","1024363071","AU","AUS","AUSTRALIA" -"1024363072","1024363103","SG","SGP","SINGAPORE" -"1024363104","1024363111","AU","AUS","AUSTRALIA" -"1024363112","1024363119","SG","SGP","SINGAPORE" -"1024363120","1024363135","AU","AUS","AUSTRALIA" -"1024363136","1024363199","SG","SGP","SINGAPORE" -"1024363200","1024363215","MY","MYS","MALAYSIA" -"1024363216","1024363295","SG","SGP","SINGAPORE" -"1024363296","1024363319","MY","MYS","MALAYSIA" -"1024363320","1024363327","SG","SGP","SINGAPORE" -"1024363328","1024363391","AU","AUS","AUSTRALIA" -"1024363392","1024363423","MY","MYS","MALAYSIA" -"1024363424","1024363439","SG","SGP","SINGAPORE" -"1024363440","1024363447","MY","MYS","MALAYSIA" -"1024363448","1024363455","AU","AUS","AUSTRALIA" -"1024363456","1024363519","SG","SGP","SINGAPORE" -"1024363520","1024363999","AU","AUS","AUSTRALIA" -"1024364000","1024364015","NZ","NZL","NEW ZEALAND" -"1024364016","1024365311","AU","AUS","AUSTRALIA" -"1024365312","1024365567","MY","MYS","MALAYSIA" -"1024365568","1024365823","AU","AUS","AUSTRALIA" -"1024365824","1024366335","PH","PHL","PHILIPPINES" -"1024366336","1024366591","TW","TWN","TAIWAN" -"1024366592","1024366847","AU","AUS","AUSTRALIA" -"1024366848","1024366911","PH","PHL","PHILIPPINES" -"1024366912","1024366943","AU","AUS","AUSTRALIA" -"1024366944","1024366975","PH","PHL","PHILIPPINES" -"1024366976","1024367039","TW","TWN","TAIWAN" -"1024367040","1024367103","PH","PHL","PHILIPPINES" -"1024367104","1024368127","AU","AUS","AUSTRALIA" -"1024368128","1024368383","PH","PHL","PHILIPPINES" -"1024368384","1024368639","AU","AUS","AUSTRALIA" -"1024368640","1024369407","MY","MYS","MALAYSIA" -"1024369408","1024369663","AU","AUS","AUSTRALIA" -"1024369664","1024369919","PH","PHL","PHILIPPINES" -"1024369920","1024370175","TW","TWN","TAIWAN" -"1024370176","1024370431","AU","AUS","AUSTRALIA" -"1024370432","1024370447","NZ","NZL","NEW ZEALAND" -"1024370448","1024370687","AU","AUS","AUSTRALIA" -"1024370688","1024371455","PH","PHL","PHILIPPINES" -"1024371456","1024371711","JP","JPN","JAPAN" -"1024371712","1024371967","AU","AUS","AUSTRALIA" -"1024371968","1024372223","JP","JPN","JAPAN" -"1024372224","1024372319","HK","HKG","HONG KONG" -"1024372320","1024372351","AU","AUS","AUSTRALIA" -"1024372352","1024372383","HK","HKG","HONG KONG" -"1024372384","1024372399","AU","AUS","AUSTRALIA" -"1024372400","1024372447","HK","HKG","HONG KONG" -"1024372448","1024372479","AU","AUS","AUSTRALIA" -"1024372480","1024372735","HK","HKG","HONG KONG" -"1024372736","1024373247","AU","AUS","AUSTRALIA" -"1024373248","1024373503","PH","PHL","PHILIPPINES" -"1024373504","1024373823","AU","AUS","AUSTRALIA" -"1024373824","1024373887","TW","TWN","TAIWAN" -"1024373888","1024374015","PH","PHL","PHILIPPINES" -"1024374016","1024374047","AU","AUS","AUSTRALIA" -"1024374048","1024374063","PH","PHL","PHILIPPINES" -"1024374064","1024374079","AU","AUS","AUSTRALIA" -"1024374080","1024374111","TW","TWN","TAIWAN" -"1024374112","1024374351","AU","AUS","AUSTRALIA" -"1024374352","1024374383","US","USA","UNITED STATES" -"1024374384","1024374847","AU","AUS","AUSTRALIA" -"1024374848","1024374879","JP","JPN","JAPAN" -"1024374880","1024374895","AU","AUS","AUSTRALIA" -"1024374896","1024374903","JP","JPN","JAPAN" -"1024374904","1024374911","AU","AUS","AUSTRALIA" -"1024374912","1024374951","JP","JPN","JAPAN" -"1024374952","1024374975","AU","AUS","AUSTRALIA" -"1024374976","1024375087","JP","JPN","JAPAN" -"1024375088","1024375151","AU","AUS","AUSTRALIA" -"1024375152","1024375295","JP","JPN","JAPAN" -"1024375296","1024375807","AU","AUS","AUSTRALIA" -"1024375808","1024375999","TW","TWN","TAIWAN" -"1024376000","1024376095","PH","PHL","PHILIPPINES" -"1024376096","1024376111","TW","TWN","TAIWAN" -"1024376112","1024376127","PH","PHL","PHILIPPINES" -"1024376128","1024376159","AU","AUS","AUSTRALIA" -"1024376160","1024376191","TW","TWN","TAIWAN" -"1024376192","1024376199","PH","PHL","PHILIPPINES" -"1024376200","1024376255","AU","AUS","AUSTRALIA" -"1024376256","1024376463","TW","TWN","TAIWAN" -"1024376464","1024376471","AU","AUS","AUSTRALIA" -"1024376472","1024376479","TW","TWN","TAIWAN" -"1024376480","1024376511","PH","PHL","PHILIPPINES" -"1024376512","1024376575","TW","TWN","TAIWAN" -"1024376576","1024376703","AU","AUS","AUSTRALIA" -"1024376704","1024376735","PH","PHL","PHILIPPINES" -"1024376736","1024376767","AU","AUS","AUSTRALIA" -"1024376768","1024376799","TW","TWN","TAIWAN" -"1024376800","1024393215","PH","PHL","PHILIPPINES" -"1024393216","1024458751","HK","HKG","HONG KONG" -"1024458752","1024491519","SG","SGP","SINGAPORE" -"1024491520","1024589823","IN","IND","INDIA" -"1024589824","1024655359","HK","HKG","HONG KONG" -"1024655360","1024720895","TH","THA","THAILAND" -"1024720896","1024786431","TW","TWN","TAIWAN" -"1024786432","1025245183","JP","JPN","JAPAN" -"1025245184","1025277951","CN","CHN","CHINA" -"1025277952","1025294335","PH","PHL","PHILIPPINES" -"1025294336","1025294591","JP","JPN","JAPAN" -"1025294592","1025294847","HK","HKG","HONG KONG" -"1025294848","1025295103","TH","THA","THAILAND" -"1025295104","1025295615","CN","CHN","CHINA" -"1025295616","1025295871","AU","AUS","AUSTRALIA" -"1025295872","1025296127","GB","GBR","UNITED KINGDOM" -"1025296128","1025296639","FR","FRA","FRANCE" -"1025296640","1025296895","MY","MYS","MALAYSIA" -"1025296896","1025297407","SG","SGP","SINGAPORE" -"1025297408","1025297919","AU","AUS","AUSTRALIA" -"1025297920","1025298175","NZ","NZL","NEW ZEALAND" -"1025298176","1025298943","AU","AUS","AUSTRALIA" -"1025298944","1025299199","AE","ARE","UNITED ARAB EMIRATES" -"1025299200","1025300223","AU","AUS","AUSTRALIA" -"1025300224","1025300479","SA","SAU","SAUDI ARABIA" -"1025300480","1025300735","AE","ARE","UNITED ARAB EMIRATES" -"1025300736","1025300991","US","USA","UNITED STATES" -"1025300992","1025302527","AU","AUS","AUSTRALIA" -"1025302528","1025310719","VN","VNM","VIET NAM" -"1025310720","1025343487","AU","AUS","AUSTRALIA" -"1025343488","1025376255","CN","CHN","CHINA" -"1025376256","1025507327","TW","TWN","TAIWAN" -"1025507328","1026293759","KR","KOR","REPUBLIC OF KOREA" -"1026293760","1026392063","JP","JPN","JAPAN" -"1026392064","1026408447","CN","CHN","CHINA" -"1026408448","1026416639","JP","JPN","JAPAN" -"1026416640","1026420735","ID","IDN","INDONESIA" -"1026420736","1026424831","AU","AUS","AUSTRALIA" -"1026424832","1026490367","JP","JPN","JAPAN" -"1026490368","1026523135","TH","THA","THAILAND" -"1026523136","1026539519","CN","CHN","CHINA" -"1026539520","1026555903","KR","KOR","REPUBLIC OF KOREA" -"1026555904","1027080191","CN","CHN","CHINA" -"1027080192","1027866623","TW","TWN","TAIWAN" -"1027866624","1027997695","AU","AUS","AUSTRALIA" -"1027997696","1028128767","TW","TWN","TAIWAN" -"1028128768","1029046271","KR","KOR","REPUBLIC OF KOREA" -"1029046272","1029144575","JP","JPN","JAPAN" -"1029144576","1029160959","SG","SGP","SINGAPORE" -"1029160960","1029177343","CN","CHN","CHINA" -"1029177344","1029242879","AU","AUS","AUSTRALIA" -"1029242880","1029308415","JP","JPN","JAPAN" -"1029308416","1029439487","TH","THA","THAILAND" -"1029439488","1029570559","HK","HKG","HONG KONG" -"1029570560","1029636095","ID","IDN","INDONESIA" -"1029636096","1029668863","AU","AUS","AUSTRALIA" -"1029668864","1029701631","IN","IND","INDIA" -"1029701632","1030750207","KR","KOR","REPUBLIC OF KOREA" -"1030750208","1031798783","JP","JPN","JAPAN" -"1031798784","1033982787","CN","CHN","CHINA" -"1033982788","1033982788","FR","FRA","FRANCE" -"1033982789","1034001207","CN","CHN","CHINA" -"1034001208","1034001215","FR","FRA","FRANCE" -"1034001216","1035993087","CN","CHN","CHINA" -"1035993088","1037565951","JP","JPN","JAPAN" -"1037565952","1037591499","TW","TWN","TAIWAN" -"1037591500","1037591503","CN","CHN","CHINA" -"1037591504","1038614527","TW","TWN","TAIWAN" -"1038614528","1039007743","CN","CHN","CHINA" -"1039007744","1039138815","HK","HKG","HONG KONG" -"1039138816","1039400959","CN","CHN","CHINA" -"1039400960","1039466495","HK","HKG","HONG KONG" -"1039466496","1039499263","JP","JPN","JAPAN" -"1039499264","1039515647","AU","AUS","AUSTRALIA" -"1039515648","1039523839","JP","JPN","JAPAN" -"1039523840","1039532031","KR","KOR","REPUBLIC OF KOREA" -"1039532032","1039597567","IN","IND","INDIA" -"1039597568","1039613951","ID","IDN","INDONESIA" -"1039613952","1039638527","KR","KOR","REPUBLIC OF KOREA" -"1039638528","1039642623","TW","TWN","TAIWAN" -"1039642624","1039646719","AU","AUS","AUSTRALIA" -"1039646720","1039654911","KR","KOR","REPUBLIC OF KOREA" -"1039654912","1039663103","IN","IND","INDIA" -"1039663104","1040187391","KR","KOR","REPUBLIC OF KOREA" -"1040187392","1040252927","IL","ISR","ISRAEL" -"1040252928","1040318463","GR","GRC","GREECE" -"1040318464","1040383999","CH","CHE","SWITZERLAND" -"1040384000","1040392191","SA","SAU","SAUDI ARABIA" -"1040392192","1040392447","GB","GBR","UNITED KINGDOM" -"1040392448","1040399359","SA","SAU","SAUDI ARABIA" -"1040399360","1040400127","GB","GBR","UNITED KINGDOM" -"1040400128","1040400383","SA","SAU","SAUDI ARABIA" -"1040400384","1040416767","GB","GBR","UNITED KINGDOM" -"1040416768","1040424959","SE","SWE","SWEDEN" -"1040424960","1040433151","PL","POL","POLAND" -"1040433152","1040449535","GB","GBR","UNITED KINGDOM" -"1040449536","1040449791","FR","FRA","FRANCE" -"1040449792","1040450047","DE","DEU","GERMANY" -"1040450048","1040457727","FR","FRA","FRANCE" -"1040457728","1040465919","ME","MNE","MONTENEGRO" -"1040465920","1040466687","DE","DEU","GERMANY" -"1040466976","1040467007","DE","DEU","GERMANY" -"1040467072","1040467087","FR","FRA","FRANCE" -"1040467088","1040467103","DE","DEU","GERMANY" -"1040467104","1040467135","FR","FRA","FRANCE" -"1040467136","1040467151","DE","DEU","GERMANY" -"1040467584","1040467647","FR","FRA","FRANCE" -"1040467712","1040467743","FR","FRA","FRANCE" -"1040467760","1040467823","FR","FRA","FRANCE" -"1040467936","1040467951","FR","FRA","FRANCE" -"1040467968","1040468223","FR","FRA","FRANCE" -"1040468232","1040468255","FR","FRA","FRANCE" -"1040468264","1040468287","FR","FRA","FRANCE" -"1040468416","1040468479","FR","FRA","FRANCE" -"1040468608","1040468735","DE","DEU","GERMANY" -"1040468736","1040468767","NL","NLD","NETHERLANDS" -"1040468800","1040468831","NL","NLD","NETHERLANDS" -"1040468864","1040468991","NL","NLD","NETHERLANDS" -"1040469056","1040469071","FR","FRA","FRANCE" -"1040469088","1040469183","FR","FRA","FRANCE" -"1040469216","1040469279","FR","FRA","FRANCE" -"1040469312","1040469343","FR","FRA","FRANCE" -"1040469376","1040469567","FR","FRA","FRANCE" -"1040469632","1040469887","FR","FRA","FRANCE" -"1040469904","1040469919","FR","FRA","FRANCE" -"1040469968","1040469999","FR","FRA","FRANCE" -"1040470272","1040470335","DE","DEU","GERMANY" -"1040470400","1040470431","DE","DEU","GERMANY" -"1040470784","1040471295","NL","NLD","NETHERLANDS" -"1040471488","1040471711","NL","NLD","NETHERLANDS" -"1040471744","1040471775","NL","NLD","NETHERLANDS" -"1040472992","1040473343","NL","NLD","NETHERLANDS" -"1040473856","1040474111","NL","NLD","NETHERLANDS" -"1040474112","1040482303","CZ","CZE","CZECH REPUBLIC" -"1040482304","1040515071","BE","BEL","BELGIUM" -"1040515072","1040547839","GB","GBR","UNITED KINGDOM" -"1040547840","1040580607","RU","RUS","RUSSIAN FEDERATION" -"1040580608","1040711679","GB","GBR","UNITED KINGDOM" -"1040711680","1040719871","FR","FRA","FRANCE" -"1040719872","1040728063","DE","DEU","GERMANY" -"1040736256","1040744447","GB","GBR","UNITED KINGDOM" -"1040744448","1040777215","DE","DEU","GERMANY" -"1040777216","1040842751","IE","IRL","IRELAND" -"1040842752","1040973823","IT","ITA","ITALY" -"1040973824","1040982015","NL","NLD","NETHERLANDS" -"1040982016","1040982279","DK","DNK","DENMARK" -"1040982280","1040982287","NG","NGA","NIGERIA" -"1040982288","1040982335","DK","DNK","DENMARK" -"1040982336","1040982351","ZW","ZWE","ZIMBABWE" -"1040982352","1040982359","GB","GBR","UNITED KINGDOM" -"1040982360","1040982399","DK","DNK","DENMARK" -"1040982400","1040982407","CH","CHE","SWITZERLAND" -"1040982408","1040982487","DK","DNK","DENMARK" -"1040982488","1040982495","IQ","IRQ","IRAQ" -"1040982496","1040982527","DK","DNK","DENMARK" -"1040982528","1040982535","IQ","IRQ","IRAQ" -"1040982536","1040982551","DK","DNK","DENMARK" -"1040982552","1040982559","FI","FIN","FINLAND" -"1040982560","1040982567","DK","DNK","DENMARK" -"1040982568","1040982575","IQ","IRQ","IRAQ" -"1040982576","1040982583","DK","DNK","DENMARK" -"1040982584","1040982591","IQ","IRQ","IRAQ" -"1040982592","1040982599","DK","DNK","DENMARK" -"1040982600","1040982615","IQ","IRQ","IRAQ" -"1040982616","1040982623","DK","DNK","DENMARK" -"1040982624","1040982631","FI","FIN","FINLAND" -"1040982632","1040982639","DE","DEU","GERMANY" -"1040982640","1040982647","FI","FIN","FINLAND" -"1040982648","1040982655","GB","GBR","UNITED KINGDOM" -"1040982656","1040982663","DE","DEU","GERMANY" -"1040982664","1040982679","NL","NLD","NETHERLANDS" -"1040982680","1040982687","DK","DNK","DENMARK" -"1040982688","1040982695","FI","FIN","FINLAND" -"1040982696","1040982703","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1040982704","1040982743","FI","FIN","FINLAND" -"1040982744","1040982751","EG","EGY","EGYPT" -"1040982752","1040982759","FI","FIN","FINLAND" -"1040982760","1040982783","DK","DNK","DENMARK" -"1040982784","1040982911","MW","MWI","MALAWI" -"1040982912","1040983055","DK","DNK","DENMARK" -"1040983056","1040983063","IE","IRL","IRELAND" -"1040983064","1040983079","DK","DNK","DENMARK" -"1040983080","1040983087","FI","FIN","FINLAND" -"1040983088","1040983095","DK","DNK","DENMARK" -"1040983096","1040983127","FI","FIN","FINLAND" -"1040983128","1040983159","DK","DNK","DENMARK" -"1040983160","1040983167","FI","FIN","FINLAND" -"1040983168","1040983359","DK","DNK","DENMARK" -"1040983360","1040983487","IQ","IRQ","IRAQ" -"1040983488","1040983551","DK","DNK","DENMARK" -"1040983552","1040983567","NG","NGA","NIGERIA" -"1040983568","1040983575","AE","ARE","UNITED ARAB EMIRATES" -"1040983576","1040983583","DK","DNK","DENMARK" -"1040983584","1040983599","PH","PHL","PHILIPPINES" -"1040983600","1040983807","DK","DNK","DENMARK" -"1040983808","1040983815","NG","NGA","NIGERIA" -"1040983816","1040984055","DK","DNK","DENMARK" -"1040984056","1040984063","IQ","IRQ","IRAQ" -"1040984064","1040984071","NG","NGA","NIGERIA" -"1040984072","1040984103","DK","DNK","DENMARK" -"1040984104","1040984111","NG","NGA","NIGERIA" -"1040984112","1040984119","DK","DNK","DENMARK" -"1040984120","1040984135","NG","NGA","NIGERIA" -"1040984136","1040984143","DK","DNK","DENMARK" -"1040984144","1040984151","NG","NGA","NIGERIA" -"1040984152","1040984175","DK","DNK","DENMARK" -"1040984176","1040984183","NG","NGA","NIGERIA" -"1040984184","1040984191","SD","SDN","SUDAN" -"1040984192","1040990207","DK","DNK","DENMARK" -"1040990208","1040994303","CY","CYP","CYPRUS" -"1040994304","1040994815","RU","RUS","RUSSIAN FEDERATION" -"1040994816","1040998399","CY","CYP","CYPRUS" -"1041006592","1041039359","CH","CHE","SWITZERLAND" -"1041039360","1041051647","SE","SWE","SWEDEN" -"1041051648","1041051839","NO","NOR","NORWAY" -"1041051840","1041052159","SE","SWE","SWEDEN" -"1041052160","1041052175","NO","NOR","NORWAY" -"1041052176","1041072127","SE","SWE","SWEDEN" -"1041072128","1041080319","GB","GBR","UNITED KINGDOM" -"1041080320","1041088511","IT","ITA","ITALY" -"1041088512","1041096703","AT","AUT","AUSTRIA" -"1041096704","1041235967","ES","ESP","SPAIN" -"1041235968","1041244159","UA","UKR","UKRAINE" -"1041244160","1041253119","RU","RUS","RUSSIAN FEDERATION" -"1041253120","1041253375","TJ","TJK","TAJIKISTAN" -"1041253376","1041268735","RU","RUS","RUSSIAN FEDERATION" -"1041268736","1041301503","NO","NOR","NORWAY" -"1041301504","1041301599","IE","IRL","IRELAND" -"1041301600","1041301615","GB","GBR","UNITED KINGDOM" -"1041301616","1041301887","IE","IRL","IRELAND" -"1041301888","1041301919","GB","GBR","UNITED KINGDOM" -"1041301920","1041302015","IE","IRL","IRELAND" -"1041302016","1041302271","GB","GBR","UNITED KINGDOM" -"1041302272","1041302303","IE","IRL","IRELAND" -"1041302304","1041302319","GB","GBR","UNITED KINGDOM" -"1041302320","1041305887","IE","IRL","IRELAND" -"1041305888","1041305903","GB","GBR","UNITED KINGDOM" -"1041305904","1041305919","IE","IRL","IRELAND" -"1041305920","1041305983","GB","GBR","UNITED KINGDOM" -"1041305984","1041306031","IE","IRL","IRELAND" -"1041306032","1041306063","GB","GBR","UNITED KINGDOM" -"1041306064","1041306399","IE","IRL","IRELAND" -"1041306400","1041306495","GB","GBR","UNITED KINGDOM" -"1041306496","1041306511","IE","IRL","IRELAND" -"1041306512","1041306527","GB","GBR","UNITED KINGDOM" -"1041306528","1041306607","IE","IRL","IRELAND" -"1041306608","1041306671","GB","GBR","UNITED KINGDOM" -"1041306672","1041306751","IE","IRL","IRELAND" -"1041306752","1041306815","GB","GBR","UNITED KINGDOM" -"1041306816","1041307551","IE","IRL","IRELAND" -"1041307552","1041307599","GB","GBR","UNITED KINGDOM" -"1041307600","1041308031","IE","IRL","IRELAND" -"1041308032","1041308063","GB","GBR","UNITED KINGDOM" -"1041308064","1041308287","IE","IRL","IRELAND" -"1041308288","1041308303","GB","GBR","UNITED KINGDOM" -"1041308304","1041308335","IE","IRL","IRELAND" -"1041308336","1041308343","GB","GBR","UNITED KINGDOM" -"1041308344","1041308415","IE","IRL","IRELAND" -"1041308416","1041308671","GB","GBR","UNITED KINGDOM" -"1041308672","1041310063","IE","IRL","IRELAND" -"1041310064","1041310079","GB","GBR","UNITED KINGDOM" -"1041310080","1041310511","IE","IRL","IRELAND" -"1041310512","1041310527","GB","GBR","UNITED KINGDOM" -"1041310528","1041334271","IE","IRL","IRELAND" -"1041334272","1041334527","GB","GBR","UNITED KINGDOM" -"1041334528","1041334783","IE","IRL","IRELAND" -"1041334784","1041335039","GB","GBR","UNITED KINGDOM" -"1041335040","1041335295","IE","IRL","IRELAND" -"1041335296","1041335327","GB","GBR","UNITED KINGDOM" -"1041335328","1041335343","IE","IRL","IRELAND" -"1041335344","1041335359","GB","GBR","UNITED KINGDOM" -"1041335360","1041335519","IE","IRL","IRELAND" -"1041335520","1041335535","GB","GBR","UNITED KINGDOM" -"1041335536","1041335551","IE","IRL","IRELAND" -"1041335552","1041335807","GB","GBR","UNITED KINGDOM" -"1041335808","1041335839","IE","IRL","IRELAND" -"1041335840","1041335871","GB","GBR","UNITED KINGDOM" -"1041335872","1041335887","IE","IRL","IRELAND" -"1041335888","1041335895","GB","GBR","UNITED KINGDOM" -"1041335896","1041335935","IE","IRL","IRELAND" -"1041335936","1041335967","GB","GBR","UNITED KINGDOM" -"1041335968","1041336015","IE","IRL","IRELAND" -"1041336016","1041336031","GB","GBR","UNITED KINGDOM" -"1041336032","1041336063","IE","IRL","IRELAND" -"1041336064","1041336127","GB","GBR","UNITED KINGDOM" -"1041336128","1041336207","IE","IRL","IRELAND" -"1041336208","1041336223","GB","GBR","UNITED KINGDOM" -"1041336224","1041336303","IE","IRL","IRELAND" -"1041336304","1041336319","GB","GBR","UNITED KINGDOM" -"1041336320","1041337471","IE","IRL","IRELAND" -"1041337472","1041337487","GB","GBR","UNITED KINGDOM" -"1041337488","1041337663","IE","IRL","IRELAND" -"1041337664","1041337695","GB","GBR","UNITED KINGDOM" -"1041337696","1041337727","IE","IRL","IRELAND" -"1041337728","1041337791","GB","GBR","UNITED KINGDOM" -"1041337792","1041337855","IE","IRL","IRELAND" -"1041337856","1041337887","GB","GBR","UNITED KINGDOM" -"1041337888","1041337919","IE","IRL","IRELAND" -"1041337920","1041337935","GB","GBR","UNITED KINGDOM" -"1041337936","1041337999","IE","IRL","IRELAND" -"1041338000","1041338015","GB","GBR","UNITED KINGDOM" -"1041338016","1041338031","IE","IRL","IRELAND" -"1041338032","1041338111","GB","GBR","UNITED KINGDOM" -"1041338112","1041338751","IE","IRL","IRELAND" -"1041338752","1041338815","GB","GBR","UNITED KINGDOM" -"1041338816","1041338831","IE","IRL","IRELAND" -"1041338832","1041338847","GB","GBR","UNITED KINGDOM" -"1041338848","1041338879","IE","IRL","IRELAND" -"1041338880","1041338895","GB","GBR","UNITED KINGDOM" -"1041338896","1041338943","IE","IRL","IRELAND" -"1041338944","1041339007","GB","GBR","UNITED KINGDOM" -"1041339008","1041339087","IE","IRL","IRELAND" -"1041339088","1041339119","GB","GBR","UNITED KINGDOM" -"1041339120","1041339263","IE","IRL","IRELAND" -"1041339264","1041339327","GB","GBR","UNITED KINGDOM" -"1041339328","1041339359","IE","IRL","IRELAND" -"1041339360","1041339391","GB","GBR","UNITED KINGDOM" -"1041339392","1041339423","IE","IRL","IRELAND" -"1041339424","1041339439","GB","GBR","UNITED KINGDOM" -"1041339440","1041339519","IE","IRL","IRELAND" -"1041339520","1041339535","GB","GBR","UNITED KINGDOM" -"1041339536","1041339679","IE","IRL","IRELAND" -"1041339680","1041339711","GB","GBR","UNITED KINGDOM" -"1041339712","1041339935","IE","IRL","IRELAND" -"1041339936","1041339967","GB","GBR","UNITED KINGDOM" -"1041339968","1041340063","IE","IRL","IRELAND" -"1041340064","1041340079","GB","GBR","UNITED KINGDOM" -"1041340080","1041340111","IE","IRL","IRELAND" -"1041340112","1041340127","GB","GBR","UNITED KINGDOM" -"1041340128","1041340191","IE","IRL","IRELAND" -"1041340192","1041340223","GB","GBR","UNITED KINGDOM" -"1041340224","1041340255","IE","IRL","IRELAND" -"1041340256","1041340271","GB","GBR","UNITED KINGDOM" -"1041340272","1041340319","IE","IRL","IRELAND" -"1041340320","1041340335","GB","GBR","UNITED KINGDOM" -"1041340336","1041340367","IE","IRL","IRELAND" -"1041340368","1041340383","GB","GBR","UNITED KINGDOM" -"1041340384","1041340447","IE","IRL","IRELAND" -"1041340448","1041340463","GB","GBR","UNITED KINGDOM" -"1041340464","1041340559","IE","IRL","IRELAND" -"1041340560","1041340607","GB","GBR","UNITED KINGDOM" -"1041340608","1041340639","IE","IRL","IRELAND" -"1041340640","1041340671","GB","GBR","UNITED KINGDOM" -"1041340672","1041340735","IE","IRL","IRELAND" -"1041340736","1041340751","GB","GBR","UNITED KINGDOM" -"1041340752","1041340799","IE","IRL","IRELAND" -"1041340800","1041340863","GB","GBR","UNITED KINGDOM" -"1041340864","1041340991","IE","IRL","IRELAND" -"1041340992","1041341007","GB","GBR","UNITED KINGDOM" -"1041341008","1041341151","IE","IRL","IRELAND" -"1041341152","1041341183","GB","GBR","UNITED KINGDOM" -"1041341184","1041341231","IE","IRL","IRELAND" -"1041341232","1041341247","GB","GBR","UNITED KINGDOM" -"1041341248","1041341295","IE","IRL","IRELAND" -"1041341296","1041341343","GB","GBR","UNITED KINGDOM" -"1041341344","1041341855","IE","IRL","IRELAND" -"1041341856","1041341887","GB","GBR","UNITED KINGDOM" -"1041341888","1041341919","IE","IRL","IRELAND" -"1041341920","1041341935","GB","GBR","UNITED KINGDOM" -"1041341936","1041342063","IE","IRL","IRELAND" -"1041342064","1041342079","GB","GBR","UNITED KINGDOM" -"1041342080","1041342207","IE","IRL","IRELAND" -"1041342208","1041342223","GB","GBR","UNITED KINGDOM" -"1041342224","1041342239","IE","IRL","IRELAND" -"1041342240","1041342255","GB","GBR","UNITED KINGDOM" -"1041342256","1041342383","IE","IRL","IRELAND" -"1041342384","1041342415","GB","GBR","UNITED KINGDOM" -"1041342416","1041342431","IE","IRL","IRELAND" -"1041342432","1041342463","GB","GBR","UNITED KINGDOM" -"1041342464","1041342479","IE","IRL","IRELAND" -"1041342480","1041342511","GB","GBR","UNITED KINGDOM" -"1041342512","1041342543","IE","IRL","IRELAND" -"1041342544","1041342575","GB","GBR","UNITED KINGDOM" -"1041342576","1041342591","IE","IRL","IRELAND" -"1041342592","1041342607","GB","GBR","UNITED KINGDOM" -"1041342608","1041342975","IE","IRL","IRELAND" -"1041342976","1041343023","GB","GBR","UNITED KINGDOM" -"1041343024","1041343055","IE","IRL","IRELAND" -"1041343056","1041343103","GB","GBR","UNITED KINGDOM" -"1041343104","1041343487","IE","IRL","IRELAND" -"1041343488","1041343743","GB","GBR","UNITED KINGDOM" -"1041343744","1041344111","IE","IRL","IRELAND" -"1041344112","1041344159","GB","GBR","UNITED KINGDOM" -"1041344160","1041344191","IE","IRL","IRELAND" -"1041344192","1041344207","GB","GBR","UNITED KINGDOM" -"1041344208","1041344255","IE","IRL","IRELAND" -"1041344256","1041344511","GB","GBR","UNITED KINGDOM" -"1041344512","1041344607","IE","IRL","IRELAND" -"1041344608","1041344639","GB","GBR","UNITED KINGDOM" -"1041344640","1041344687","IE","IRL","IRELAND" -"1041344688","1041344719","GB","GBR","UNITED KINGDOM" -"1041344720","1041344799","IE","IRL","IRELAND" -"1041344800","1041344831","GB","GBR","UNITED KINGDOM" -"1041344832","1041344895","IE","IRL","IRELAND" -"1041344896","1041344927","GB","GBR","UNITED KINGDOM" -"1041344928","1041345551","IE","IRL","IRELAND" -"1041345552","1041345583","GB","GBR","UNITED KINGDOM" -"1041345584","1041345599","IE","IRL","IRELAND" -"1041345600","1041345631","GB","GBR","UNITED KINGDOM" -"1041345632","1041345647","IE","IRL","IRELAND" -"1041345648","1041345663","GB","GBR","UNITED KINGDOM" -"1041345664","1041345759","IE","IRL","IRELAND" -"1041345760","1041345767","GB","GBR","UNITED KINGDOM" -"1041345768","1041345775","IE","IRL","IRELAND" -"1041345776","1041345791","GB","GBR","UNITED KINGDOM" -"1041345792","1041346047","IE","IRL","IRELAND" -"1041346048","1041346079","GB","GBR","UNITED KINGDOM" -"1041346080","1041346095","IE","IRL","IRELAND" -"1041346096","1041346119","GB","GBR","UNITED KINGDOM" -"1041346120","1041346135","IE","IRL","IRELAND" -"1041346136","1041346143","GB","GBR","UNITED KINGDOM" -"1041346144","1041346151","IE","IRL","IRELAND" -"1041346152","1041346159","GB","GBR","UNITED KINGDOM" -"1041346160","1041346207","IE","IRL","IRELAND" -"1041346208","1041346215","GB","GBR","UNITED KINGDOM" -"1041346216","1041346255","IE","IRL","IRELAND" -"1041346256","1041346263","GB","GBR","UNITED KINGDOM" -"1041346264","1041347071","IE","IRL","IRELAND" -"1041347072","1041347391","GB","GBR","UNITED KINGDOM" -"1041347392","1041358047","IE","IRL","IRELAND" -"1041358048","1041358079","GB","GBR","UNITED KINGDOM" -"1041358080","1041362959","IE","IRL","IRELAND" -"1041362960","1041362975","GB","GBR","UNITED KINGDOM" -"1041362976","1041363007","IE","IRL","IRELAND" -"1041363008","1041363023","GB","GBR","UNITED KINGDOM" -"1041363024","1041363167","IE","IRL","IRELAND" -"1041363168","1041363455","GB","GBR","UNITED KINGDOM" -"1041363456","1041363711","IE","IRL","IRELAND" -"1041363712","1041363751","GB","GBR","UNITED KINGDOM" -"1041363752","1041363759","IE","IRL","IRELAND" -"1041363760","1041363775","GB","GBR","UNITED KINGDOM" -"1041363776","1041363839","IE","IRL","IRELAND" -"1041363840","1041363871","GB","GBR","UNITED KINGDOM" -"1041363872","1041364495","IE","IRL","IRELAND" -"1041364496","1041364575","GB","GBR","UNITED KINGDOM" -"1041364576","1041364607","IE","IRL","IRELAND" -"1041364608","1041364735","GB","GBR","UNITED KINGDOM" -"1041364736","1041365039","IE","IRL","IRELAND" -"1041365040","1041365055","GB","GBR","UNITED KINGDOM" -"1041365056","1041365087","IE","IRL","IRELAND" -"1041365088","1041365103","GB","GBR","UNITED KINGDOM" -"1041365104","1041365151","IE","IRL","IRELAND" -"1041365152","1041365167","GB","GBR","UNITED KINGDOM" -"1041365168","1041365199","IE","IRL","IRELAND" -"1041365200","1041365247","GB","GBR","UNITED KINGDOM" -"1041365248","1041365503","IE","IRL","IRELAND" -"1041365504","1041365743","GB","GBR","UNITED KINGDOM" -"1041365744","1041366031","IE","IRL","IRELAND" -"1041366032","1041366079","GB","GBR","UNITED KINGDOM" -"1041366080","1041366119","IE","IRL","IRELAND" -"1041366120","1041366127","GB","GBR","UNITED KINGDOM" -"1041366128","1041366143","IE","IRL","IRELAND" -"1041366144","1041366207","GB","GBR","UNITED KINGDOM" -"1041366208","1041366271","IE","IRL","IRELAND" -"1041366272","1041366527","GB","GBR","UNITED KINGDOM" -"1041366528","1041367039","IE","IRL","IRELAND" -"1041367040","1041498111","GB","GBR","UNITED KINGDOM" -"1041498112","1041563647","SE","SWE","SWEDEN" -"1041563648","1041596415","PL","POL","POLAND" -"1041596416","1041629183","NL","NLD","NETHERLANDS" -"1041629184","1041633103","ES","ESP","SPAIN" -"1041633104","1041633119","GB","GBR","UNITED KINGDOM" -"1041633120","1041694719","ES","ESP","SPAIN" -"1041694720","1041694895","FR","FRA","FRANCE" -"1041694896","1041694911","GB","GBR","UNITED KINGDOM" -"1041694912","1041694919","FR","FRA","FRANCE" -"1041694920","1041694943","GB","GBR","UNITED KINGDOM" -"1041694944","1041694959","FR","FRA","FRANCE" -"1041694960","1041694975","GB","GBR","UNITED KINGDOM" -"1041694976","1041695711","FR","FRA","FRANCE" -"1041695712","1041695719","GB","GBR","UNITED KINGDOM" -"1041695720","1041695727","FR","FRA","FRANCE" -"1041695728","1041695743","GB","GBR","UNITED KINGDOM" -"1041695744","1041695759","FR","FRA","FRANCE" -"1041695760","1041695999","GB","GBR","UNITED KINGDOM" -"1041696000","1041697699","FR","FRA","FRANCE" -"1041697700","1041697703","GB","GBR","UNITED KINGDOM" -"1041697704","1041697855","FR","FRA","FRANCE" -"1041697856","1041697863","GB","GBR","UNITED KINGDOM" -"1041697864","1041697895","FR","FRA","FRANCE" -"1041697896","1041697903","GB","GBR","UNITED KINGDOM" -"1041697904","1041698135","FR","FRA","FRANCE" -"1041698136","1041698143","GB","GBR","UNITED KINGDOM" -"1041698144","1041698247","FR","FRA","FRANCE" -"1041698248","1041698255","GB","GBR","UNITED KINGDOM" -"1041698256","1041698263","FR","FRA","FRANCE" -"1041698264","1041698271","GB","GBR","UNITED KINGDOM" -"1041698272","1041698591","FR","FRA","FRANCE" -"1041698592","1041698607","GB","GBR","UNITED KINGDOM" -"1041698608","1041698703","FR","FRA","FRANCE" -"1041698704","1041698719","GB","GBR","UNITED KINGDOM" -"1041698720","1041698727","FR","FRA","FRANCE" -"1041698728","1041698735","GB","GBR","UNITED KINGDOM" -"1041698736","1041698807","FR","FRA","FRANCE" -"1041698808","1041698815","GB","GBR","UNITED KINGDOM" -"1041698816","1041699287","FR","FRA","FRANCE" -"1041699288","1041699295","GB","GBR","UNITED KINGDOM" -"1041699296","1041699583","FR","FRA","FRANCE" -"1041699584","1041699591","IT","ITA","ITALY" -"1041699592","1041699615","GB","GBR","UNITED KINGDOM" -"1041699616","1041699623","FR","FRA","FRANCE" -"1041699624","1041699631","GB","GBR","UNITED KINGDOM" -"1041699632","1041699767","FR","FRA","FRANCE" -"1041699768","1041699807","GB","GBR","UNITED KINGDOM" -"1041699808","1041700383","FR","FRA","FRANCE" -"1041700384","1041700607","GB","GBR","UNITED KINGDOM" -"1041700608","1041700863","FR","FRA","FRANCE" -"1041700864","1041700895","GB","GBR","UNITED KINGDOM" -"1041700896","1041700919","FR","FRA","FRANCE" -"1041700920","1041700927","GB","GBR","UNITED KINGDOM" -"1041700928","1041700959","FR","FRA","FRANCE" -"1041700960","1041700967","GB","GBR","UNITED KINGDOM" -"1041700968","1041700983","FR","FRA","FRANCE" -"1041700984","1041700991","GB","GBR","UNITED KINGDOM" -"1041700992","1041701119","FR","FRA","FRANCE" -"1041701120","1041701151","GB","GBR","UNITED KINGDOM" -"1041701152","1041701175","FR","FRA","FRANCE" -"1041701176","1041701231","GB","GBR","UNITED KINGDOM" -"1041701232","1041701239","FR","FRA","FRANCE" -"1041701240","1041701247","GB","GBR","UNITED KINGDOM" -"1041701248","1041701279","FR","FRA","FRANCE" -"1041701280","1041701551","GB","GBR","UNITED KINGDOM" -"1041701552","1041701567","FR","FRA","FRANCE" -"1041701568","1041701631","GB","GBR","UNITED KINGDOM" -"1041701632","1041701727","FR","FRA","FRANCE" -"1041701728","1041701735","GB","GBR","UNITED KINGDOM" -"1041701736","1041701783","FR","FRA","FRANCE" -"1041701784","1041701791","GB","GBR","UNITED KINGDOM" -"1041701792","1041701839","FR","FRA","FRANCE" -"1041701840","1041701847","GB","GBR","UNITED KINGDOM" -"1041701848","1041701935","FR","FRA","FRANCE" -"1041701936","1041701951","GB","GBR","UNITED KINGDOM" -"1041701952","1041702127","FR","FRA","FRANCE" -"1041702128","1041702143","GB","GBR","UNITED KINGDOM" -"1041702144","1041702175","FR","FRA","FRANCE" -"1041702176","1041702183","GB","GBR","UNITED KINGDOM" -"1041702184","1041702255","FR","FRA","FRANCE" -"1041702256","1041702263","GB","GBR","UNITED KINGDOM" -"1041702264","1041702303","FR","FRA","FRANCE" -"1041702304","1041702311","GB","GBR","UNITED KINGDOM" -"1041702312","1041702327","FR","FRA","FRANCE" -"1041702328","1041702335","GB","GBR","UNITED KINGDOM" -"1041702336","1041702351","FR","FRA","FRANCE" -"1041702352","1041702487","GB","GBR","UNITED KINGDOM" -"1041702488","1041702491","FR","FRA","FRANCE" -"1041702492","1041702623","GB","GBR","UNITED KINGDOM" -"1041702624","1041702639","FR","FRA","FRANCE" -"1041702640","1041702655","GB","GBR","UNITED KINGDOM" -"1041702656","1041702768","FR","FRA","FRANCE" -"1041702769","1041702775","GB","GBR","UNITED KINGDOM" -"1041702776","1041702895","FR","FRA","FRANCE" -"1041702896","1041702911","GB","GBR","UNITED KINGDOM" -"1041702912","1041703511","FR","FRA","FRANCE" -"1041703512","1041703519","GB","GBR","UNITED KINGDOM" -"1041703520","1041703567","FR","FRA","FRANCE" -"1041703568","1041703615","GB","GBR","UNITED KINGDOM" -"1041703616","1041703951","FR","FRA","FRANCE" -"1041703952","1041703967","GB","GBR","UNITED KINGDOM" -"1041703968","1041703991","FR","FRA","FRANCE" -"1041703992","1041703999","GB","GBR","UNITED KINGDOM" -"1041704000","1041704015","FR","FRA","FRANCE" -"1041704016","1041704039","GB","GBR","UNITED KINGDOM" -"1041704040","1041704111","FR","FRA","FRANCE" -"1041704112","1041704127","GB","GBR","UNITED KINGDOM" -"1041704128","1041704159","FR","FRA","FRANCE" -"1041704160","1041704175","GB","GBR","UNITED KINGDOM" -"1041704176","1041704255","FR","FRA","FRANCE" -"1041704256","1041704271","GB","GBR","UNITED KINGDOM" -"1041704272","1041704279","FR","FRA","FRANCE" -"1041704280","1041704287","GB","GBR","UNITED KINGDOM" -"1041704288","1041704319","FR","FRA","FRANCE" -"1041704320","1041704335","GB","GBR","UNITED KINGDOM" -"1041704336","1041704399","FR","FRA","FRANCE" -"1041704400","1041704431","GB","GBR","UNITED KINGDOM" -"1041704432","1041704439","FR","FRA","FRANCE" -"1041704440","1041704455","GB","GBR","UNITED KINGDOM" -"1041704456","1041704463","FR","FRA","FRANCE" -"1041704464","1041704487","GB","GBR","UNITED KINGDOM" -"1041704488","1041704503","FR","FRA","FRANCE" -"1041704504","1041704511","GB","GBR","UNITED KINGDOM" -"1041704512","1041704535","FR","FRA","FRANCE" -"1041704536","1041704575","GB","GBR","UNITED KINGDOM" -"1041704576","1041704607","FR","FRA","FRANCE" -"1041704608","1041704623","GB","GBR","UNITED KINGDOM" -"1041704624","1041704647","FR","FRA","FRANCE" -"1041704648","1041704655","GB","GBR","UNITED KINGDOM" -"1041704656","1041704671","FR","FRA","FRANCE" -"1041704672","1041704687","GB","GBR","UNITED KINGDOM" -"1041704688","1041704703","FR","FRA","FRANCE" -"1041704704","1041704711","GB","GBR","UNITED KINGDOM" -"1041704712","1041704743","FR","FRA","FRANCE" -"1041704744","1041704759","GB","GBR","UNITED KINGDOM" -"1041704760","1041704775","FR","FRA","FRANCE" -"1041704776","1041704783","GB","GBR","UNITED KINGDOM" -"1041704784","1041704815","FR","FRA","FRANCE" -"1041704816","1041704823","GB","GBR","UNITED KINGDOM" -"1041704824","1041704831","FR","FRA","FRANCE" -"1041704832","1041704863","GB","GBR","UNITED KINGDOM" -"1041704864","1041704879","FR","FRA","FRANCE" -"1041704880","1041704887","GB","GBR","UNITED KINGDOM" -"1041704888","1041705231","FR","FRA","FRANCE" -"1041705232","1041705239","GB","GBR","UNITED KINGDOM" -"1041705240","1041705255","FR","FRA","FRANCE" -"1041705256","1041705279","GB","GBR","UNITED KINGDOM" -"1041705280","1041705303","FR","FRA","FRANCE" -"1041705304","1041705311","GB","GBR","UNITED KINGDOM" -"1041705312","1041705343","FR","FRA","FRANCE" -"1041705344","1041705367","GB","GBR","UNITED KINGDOM" -"1041705368","1041705391","FR","FRA","FRANCE" -"1041705392","1041705439","GB","GBR","UNITED KINGDOM" -"1041705440","1041705447","FR","FRA","FRANCE" -"1041705448","1041705455","GB","GBR","UNITED KINGDOM" -"1041705456","1041705471","FR","FRA","FRANCE" -"1041705472","1041705519","GB","GBR","UNITED KINGDOM" -"1041705520","1041705527","FR","FRA","FRANCE" -"1041705528","1041705535","GB","GBR","UNITED KINGDOM" -"1041705536","1041705599","FR","FRA","FRANCE" -"1041705600","1041705663","GB","GBR","UNITED KINGDOM" -"1041705664","1041705695","FR","FRA","FRANCE" -"1041705696","1041705703","GB","GBR","UNITED KINGDOM" -"1041705704","1041705727","FR","FRA","FRANCE" -"1041705728","1041705815","GB","GBR","UNITED KINGDOM" -"1041705816","1041705831","FR","FRA","FRANCE" -"1041705832","1041705839","GB","GBR","UNITED KINGDOM" -"1041705840","1041705871","FR","FRA","FRANCE" -"1041705872","1041705879","GB","GBR","UNITED KINGDOM" -"1041705880","1041705887","FR","FRA","FRANCE" -"1041705888","1041705895","GB","GBR","UNITED KINGDOM" -"1041705896","1041705903","FR","FRA","FRANCE" -"1041705904","1041705911","GB","GBR","UNITED KINGDOM" -"1041705912","1041705935","FR","FRA","FRANCE" -"1041705936","1041705951","GB","GBR","UNITED KINGDOM" -"1041705952","1041705999","FR","FRA","FRANCE" -"1041706000","1041706007","GB","GBR","UNITED KINGDOM" -"1041706008","1041706111","FR","FRA","FRANCE" -"1041706112","1041706143","GB","GBR","UNITED KINGDOM" -"1041706144","1041706191","FR","FRA","FRANCE" -"1041706192","1041706239","GB","GBR","UNITED KINGDOM" -"1041706240","1041706255","FR","FRA","FRANCE" -"1041706256","1041706287","GB","GBR","UNITED KINGDOM" -"1041706288","1041706359","FR","FRA","FRANCE" -"1041706360","1041706367","GB","GBR","UNITED KINGDOM" -"1041706368","1041706447","FR","FRA","FRANCE" -"1041706448","1041706463","GB","GBR","UNITED KINGDOM" -"1041706464","1041706479","FR","FRA","FRANCE" -"1041706480","1041706487","GB","GBR","UNITED KINGDOM" -"1041706488","1041706535","FR","FRA","FRANCE" -"1041706536","1041706543","GB","GBR","UNITED KINGDOM" -"1041706544","1041706559","FR","FRA","FRANCE" -"1041706560","1041706567","GB","GBR","UNITED KINGDOM" -"1041706568","1041706583","FR","FRA","FRANCE" -"1041706584","1041706591","GB","GBR","UNITED KINGDOM" -"1041706592","1041706623","FR","FRA","FRANCE" -"1041706624","1041706631","GB","GBR","UNITED KINGDOM" -"1041706632","1041706767","FR","FRA","FRANCE" -"1041706768","1041706799","GB","GBR","UNITED KINGDOM" -"1041706800","1041706815","FR","FRA","FRANCE" -"1041706816","1041706847","GB","GBR","UNITED KINGDOM" -"1041706848","1041706871","FR","FRA","FRANCE" -"1041706872","1041706879","GB","GBR","UNITED KINGDOM" -"1041706880","1041706951","FR","FRA","FRANCE" -"1041706952","1041706975","GB","GBR","UNITED KINGDOM" -"1041706976","1041706999","FR","FRA","FRANCE" -"1041707000","1041707007","GB","GBR","UNITED KINGDOM" -"1041707008","1041707271","FR","FRA","FRANCE" -"1041707272","1041707279","GB","GBR","UNITED KINGDOM" -"1041707280","1041707295","FR","FRA","FRANCE" -"1041707296","1041707319","GB","GBR","UNITED KINGDOM" -"1041707320","1041707359","FR","FRA","FRANCE" -"1041707360","1041707367","GB","GBR","UNITED KINGDOM" -"1041707368","1041707375","FR","FRA","FRANCE" -"1041707376","1041707383","GB","GBR","UNITED KINGDOM" -"1041707384","1041707399","FR","FRA","FRANCE" -"1041707400","1041707415","GB","GBR","UNITED KINGDOM" -"1041707416","1041707439","FR","FRA","FRANCE" -"1041707440","1041707447","GB","GBR","UNITED KINGDOM" -"1041707448","1041707455","FR","FRA","FRANCE" -"1041707456","1041707463","GB","GBR","UNITED KINGDOM" -"1041707464","1041707487","FR","FRA","FRANCE" -"1041707488","1041707495","GB","GBR","UNITED KINGDOM" -"1041707496","1041707503","FR","FRA","FRANCE" -"1041707504","1041707519","GB","GBR","UNITED KINGDOM" -"1041707520","1041707559","FR","FRA","FRANCE" -"1041707560","1041707583","GB","GBR","UNITED KINGDOM" -"1041707584","1041707647","FR","FRA","FRANCE" -"1041707648","1041707655","GB","GBR","UNITED KINGDOM" -"1041707656","1041707679","FR","FRA","FRANCE" -"1041707680","1041707687","GB","GBR","UNITED KINGDOM" -"1041707688","1041707711","FR","FRA","FRANCE" -"1041707712","1041707743","GB","GBR","UNITED KINGDOM" -"1041707744","1041707807","FR","FRA","FRANCE" -"1041707808","1041707815","GB","GBR","UNITED KINGDOM" -"1041707816","1041707895","FR","FRA","FRANCE" -"1041707896","1041707903","GB","GBR","UNITED KINGDOM" -"1041707904","1041707999","FR","FRA","FRANCE" -"1041708000","1041708007","GB","GBR","UNITED KINGDOM" -"1041708008","1041708023","FR","FRA","FRANCE" -"1041708024","1041708031","GB","GBR","UNITED KINGDOM" -"1041708032","1041708295","FR","FRA","FRANCE" -"1041708296","1041708303","GB","GBR","UNITED KINGDOM" -"1041708304","1041708311","FR","FRA","FRANCE" -"1041708312","1041708319","GB","GBR","UNITED KINGDOM" -"1041708320","1041708327","FR","FRA","FRANCE" -"1041708328","1041708351","GB","GBR","UNITED KINGDOM" -"1041708352","1041708367","FR","FRA","FRANCE" -"1041708368","1041708383","GB","GBR","UNITED KINGDOM" -"1041708384","1041708415","FR","FRA","FRANCE" -"1041708416","1041708431","GB","GBR","UNITED KINGDOM" -"1041708432","1041708447","FR","FRA","FRANCE" -"1041708448","1041708463","GB","GBR","UNITED KINGDOM" -"1041708464","1041708479","FR","FRA","FRANCE" -"1041708480","1041708487","GB","GBR","UNITED KINGDOM" -"1041708488","1041708495","FR","FRA","FRANCE" -"1041708496","1041708511","GB","GBR","UNITED KINGDOM" -"1041708512","1041708551","FR","FRA","FRANCE" -"1041708552","1041708559","GB","GBR","UNITED KINGDOM" -"1041708560","1041708607","FR","FRA","FRANCE" -"1041708608","1041708615","GB","GBR","UNITED KINGDOM" -"1041708616","1041708671","FR","FRA","FRANCE" -"1041708672","1041708695","GB","GBR","UNITED KINGDOM" -"1041708696","1041708703","FR","FRA","FRANCE" -"1041708704","1041708735","GB","GBR","UNITED KINGDOM" -"1041708736","1041708807","FR","FRA","FRANCE" -"1041708808","1041708815","GB","GBR","UNITED KINGDOM" -"1041708816","1041708847","FR","FRA","FRANCE" -"1041708848","1041708855","GB","GBR","UNITED KINGDOM" -"1041708856","1041708879","FR","FRA","FRANCE" -"1041708880","1041708895","GB","GBR","UNITED KINGDOM" -"1041708896","1041708903","FR","FRA","FRANCE" -"1041708904","1041708911","GB","GBR","UNITED KINGDOM" -"1041708912","1041708927","FR","FRA","FRANCE" -"1041708928","1041708943","GB","GBR","UNITED KINGDOM" -"1041708944","1041708991","FR","FRA","FRANCE" -"1041708992","1041708999","GB","GBR","UNITED KINGDOM" -"1041709000","1041709023","FR","FRA","FRANCE" -"1041709024","1041709055","GB","GBR","UNITED KINGDOM" -"1041709056","1041709343","FR","FRA","FRANCE" -"1041709344","1041709375","GB","GBR","UNITED KINGDOM" -"1041709376","1041709463","FR","FRA","FRANCE" -"1041709464","1041709471","GB","GBR","UNITED KINGDOM" -"1041709472","1041709479","FR","FRA","FRANCE" -"1041709480","1041709487","GB","GBR","UNITED KINGDOM" -"1041709488","1041709767","FR","FRA","FRANCE" -"1041709768","1041709775","GB","GBR","UNITED KINGDOM" -"1041709776","1041709823","FR","FRA","FRANCE" -"1041709824","1041709831","GB","GBR","UNITED KINGDOM" -"1041709832","1041709903","FR","FRA","FRANCE" -"1041709904","1041709911","GB","GBR","UNITED KINGDOM" -"1041709912","1041709919","FR","FRA","FRANCE" -"1041709920","1041709927","GB","GBR","UNITED KINGDOM" -"1041709928","1041709935","FR","FRA","FRANCE" -"1041709936","1041709943","GB","GBR","UNITED KINGDOM" -"1041709944","1041709951","FR","FRA","FRANCE" -"1041709952","1041709983","GB","GBR","UNITED KINGDOM" -"1041709984","1041709991","FR","FRA","FRANCE" -"1041709992","1041709999","GB","GBR","UNITED KINGDOM" -"1041710000","1041710007","FR","FRA","FRANCE" -"1041710008","1041710015","GB","GBR","UNITED KINGDOM" -"1041710016","1041710047","FR","FRA","FRANCE" -"1041710048","1041710055","GB","GBR","UNITED KINGDOM" -"1041710056","1041710063","FR","FRA","FRANCE" -"1041710064","1041710079","GB","GBR","UNITED KINGDOM" -"1041710080","1041710343","FR","FRA","FRANCE" -"1041710344","1041710359","GB","GBR","UNITED KINGDOM" -"1041710360","1041710367","FR","FRA","FRANCE" -"1041710368","1041710383","GB","GBR","UNITED KINGDOM" -"1041710384","1041710391","FR","FRA","FRANCE" -"1041710392","1041710407","GB","GBR","UNITED KINGDOM" -"1041710408","1041710439","FR","FRA","FRANCE" -"1041710440","1041710455","GB","GBR","UNITED KINGDOM" -"1041710456","1041710471","FR","FRA","FRANCE" -"1041710472","1041710487","GB","GBR","UNITED KINGDOM" -"1041710488","1041710495","FR","FRA","FRANCE" -"1041710496","1041710511","GB","GBR","UNITED KINGDOM" -"1041710512","1041710535","FR","FRA","FRANCE" -"1041710536","1041710543","GB","GBR","UNITED KINGDOM" -"1041710544","1041710559","FR","FRA","FRANCE" -"1041710560","1041710567","GB","GBR","UNITED KINGDOM" -"1041710568","1041710575","FR","FRA","FRANCE" -"1041710576","1041710583","GB","GBR","UNITED KINGDOM" -"1041710584","1041710663","FR","FRA","FRANCE" -"1041710664","1041710671","GB","GBR","UNITED KINGDOM" -"1041710672","1041710687","FR","FRA","FRANCE" -"1041710688","1041710695","GB","GBR","UNITED KINGDOM" -"1041710696","1041710703","FR","FRA","FRANCE" -"1041710704","1041710711","GB","GBR","UNITED KINGDOM" -"1041710712","1041710719","FR","FRA","FRANCE" -"1041710720","1041710727","GB","GBR","UNITED KINGDOM" -"1041710728","1041710735","FR","FRA","FRANCE" -"1041710736","1041710743","GB","GBR","UNITED KINGDOM" -"1041710744","1041710775","FR","FRA","FRANCE" -"1041710776","1041710783","GB","GBR","UNITED KINGDOM" -"1041710784","1041711407","FR","FRA","FRANCE" -"1041711408","1041711439","GB","GBR","UNITED KINGDOM" -"1041711440","1041711455","FR","FRA","FRANCE" -"1041711456","1041711463","GB","GBR","UNITED KINGDOM" -"1041711464","1041711471","FR","FRA","FRANCE" -"1041711472","1041711519","GB","GBR","UNITED KINGDOM" -"1041711520","1041711535","FR","FRA","FRANCE" -"1041711536","1041711567","GB","GBR","UNITED KINGDOM" -"1041711568","1041711583","FR","FRA","FRANCE" -"1041711584","1041711599","GB","GBR","UNITED KINGDOM" -"1041711600","1041711911","FR","FRA","FRANCE" -"1041711912","1041711927","GB","GBR","UNITED KINGDOM" -"1041711928","1041711935","FR","FRA","FRANCE" -"1041711936","1041711951","GB","GBR","UNITED KINGDOM" -"1041711952","1041711967","FR","FRA","FRANCE" -"1041711968","1041711983","GB","GBR","UNITED KINGDOM" -"1041711984","1041712399","FR","FRA","FRANCE" -"1041712400","1041712415","GB","GBR","UNITED KINGDOM" -"1041712416","1041712423","FR","FRA","FRANCE" -"1041712424","1041712431","GB","GBR","UNITED KINGDOM" -"1041712432","1041712911","FR","FRA","FRANCE" -"1041712912","1041712919","GB","GBR","UNITED KINGDOM" -"1041712920","1041712927","FR","FRA","FRANCE" -"1041712928","1041712935","GB","GBR","UNITED KINGDOM" -"1041712936","1041712959","FR","FRA","FRANCE" -"1041712960","1041712967","GB","GBR","UNITED KINGDOM" -"1041712968","1041712991","FR","FRA","FRANCE" -"1041712992","1041712999","GB","GBR","UNITED KINGDOM" -"1041713000","1041713055","FR","FRA","FRANCE" -"1041713056","1041713063","GB","GBR","UNITED KINGDOM" -"1041713064","1041713119","FR","FRA","FRANCE" -"1041713120","1041713135","GB","GBR","UNITED KINGDOM" -"1041713136","1041713143","FR","FRA","FRANCE" -"1041713144","1041713151","GB","GBR","UNITED KINGDOM" -"1041713152","1041713687","FR","FRA","FRANCE" -"1041713688","1041713695","GB","GBR","UNITED KINGDOM" -"1041713696","1041713791","FR","FRA","FRANCE" -"1041713792","1041713799","GB","GBR","UNITED KINGDOM" -"1041713800","1041713823","FR","FRA","FRANCE" -"1041713824","1041713831","GB","GBR","UNITED KINGDOM" -"1041713832","1041713871","FR","FRA","FRANCE" -"1041713872","1041713887","GB","GBR","UNITED KINGDOM" -"1041713888","1041713919","FR","FRA","FRANCE" -"1041713920","1041713927","GB","GBR","UNITED KINGDOM" -"1041713928","1041713935","FR","FRA","FRANCE" -"1041713936","1041713951","GB","GBR","UNITED KINGDOM" -"1041713952","1041713975","FR","FRA","FRANCE" -"1041713976","1041713983","GB","GBR","UNITED KINGDOM" -"1041713984","1041713991","FR","FRA","FRANCE" -"1041713992","1041714007","GB","GBR","UNITED KINGDOM" -"1041714008","1041714047","FR","FRA","FRANCE" -"1041714048","1041714055","GB","GBR","UNITED KINGDOM" -"1041714056","1041714071","FR","FRA","FRANCE" -"1041714072","1041714079","GB","GBR","UNITED KINGDOM" -"1041714080","1041714095","FR","FRA","FRANCE" -"1041714096","1041714103","GB","GBR","UNITED KINGDOM" -"1041714104","1041714111","FR","FRA","FRANCE" -"1041714112","1041714175","GB","GBR","UNITED KINGDOM" -"1041714176","1041714439","FR","FRA","FRANCE" -"1041714440","1041714455","GB","GBR","UNITED KINGDOM" -"1041714456","1041714523","FR","FRA","FRANCE" -"1041714524","1041714527","GB","GBR","UNITED KINGDOM" -"1041714528","1041714623","FR","FRA","FRANCE" -"1041714624","1041714695","GB","GBR","UNITED KINGDOM" -"1041714696","1041714711","FR","FRA","FRANCE" -"1041714712","1041714719","GB","GBR","UNITED KINGDOM" -"1041714720","1041714727","FR","FRA","FRANCE" -"1041714728","1041714735","GB","GBR","UNITED KINGDOM" -"1041714736","1041714767","FR","FRA","FRANCE" -"1041714768","1041714783","GB","GBR","UNITED KINGDOM" -"1041714784","1041714815","FR","FRA","FRANCE" -"1041714816","1041714847","GB","GBR","UNITED KINGDOM" -"1041714848","1041714855","FR","FRA","FRANCE" -"1041714856","1041714879","GB","GBR","UNITED KINGDOM" -"1041714880","1041714911","FR","FRA","FRANCE" -"1041714912","1041714919","GB","GBR","UNITED KINGDOM" -"1041714920","1041714943","FR","FRA","FRANCE" -"1041714944","1041714975","GB","GBR","UNITED KINGDOM" -"1041714976","1041714991","FR","FRA","FRANCE" -"1041714992","1041715023","GB","GBR","UNITED KINGDOM" -"1041715024","1041715055","FR","FRA","FRANCE" -"1041715056","1041715071","GB","GBR","UNITED KINGDOM" -"1041715072","1041715079","FR","FRA","FRANCE" -"1041715080","1041715087","GB","GBR","UNITED KINGDOM" -"1041715088","1041715095","FR","FRA","FRANCE" -"1041715096","1041715103","GB","GBR","UNITED KINGDOM" -"1041715104","1041715119","FR","FRA","FRANCE" -"1041715120","1041715143","GB","GBR","UNITED KINGDOM" -"1041715144","1041715151","FR","FRA","FRANCE" -"1041715152","1041715167","GB","GBR","UNITED KINGDOM" -"1041715168","1041715183","FR","FRA","FRANCE" -"1041715184","1041715199","GB","GBR","UNITED KINGDOM" -"1041715200","1041715503","FR","FRA","FRANCE" -"1041715504","1041715535","GB","GBR","UNITED KINGDOM" -"1041715536","1041715551","FR","FRA","FRANCE" -"1041715552","1041715615","GB","GBR","UNITED KINGDOM" -"1041715616","1041715631","FR","FRA","FRANCE" -"1041715632","1041715647","GB","GBR","UNITED KINGDOM" -"1041715648","1041715751","FR","FRA","FRANCE" -"1041715752","1041715775","GB","GBR","UNITED KINGDOM" -"1041715776","1041715807","FR","FRA","FRANCE" -"1041715808","1041715823","GB","GBR","UNITED KINGDOM" -"1041715824","1041715863","FR","FRA","FRANCE" -"1041715864","1041715911","GB","GBR","UNITED KINGDOM" -"1041715912","1041715943","FR","FRA","FRANCE" -"1041715944","1041715951","GB","GBR","UNITED KINGDOM" -"1041715952","1041715967","FR","FRA","FRANCE" -"1041715968","1041716015","GB","GBR","UNITED KINGDOM" -"1041716016","1041716039","FR","FRA","FRANCE" -"1041716040","1041716063","GB","GBR","UNITED KINGDOM" -"1041716064","1041716111","FR","FRA","FRANCE" -"1041716112","1041716223","GB","GBR","UNITED KINGDOM" -"1041716224","1041716239","FR","FRA","FRANCE" -"1041716240","1041716247","GB","GBR","UNITED KINGDOM" -"1041716248","1041716295","FR","FRA","FRANCE" -"1041716296","1041716303","GB","GBR","UNITED KINGDOM" -"1041716304","1041716311","FR","FRA","FRANCE" -"1041716312","1041716319","GB","GBR","UNITED KINGDOM" -"1041716320","1041716335","FR","FRA","FRANCE" -"1041716336","1041716343","GB","GBR","UNITED KINGDOM" -"1041716344","1041716447","FR","FRA","FRANCE" -"1041716448","1041716479","GB","GBR","UNITED KINGDOM" -"1041716480","1041716487","FR","FRA","FRANCE" -"1041716488","1041716527","GB","GBR","UNITED KINGDOM" -"1041716528","1041716559","FR","FRA","FRANCE" -"1041716560","1041716607","GB","GBR","UNITED KINGDOM" -"1041716608","1041716671","FR","FRA","FRANCE" -"1041716672","1041716703","GB","GBR","UNITED KINGDOM" -"1041716704","1041717039","FR","FRA","FRANCE" -"1041717040","1041717103","GB","GBR","UNITED KINGDOM" -"1041717104","1041717111","FR","FRA","FRANCE" -"1041717112","1041717119","GB","GBR","UNITED KINGDOM" -"1041717120","1041717167","FR","FRA","FRANCE" -"1041717168","1041717183","GB","GBR","UNITED KINGDOM" -"1041717184","1041717199","FR","FRA","FRANCE" -"1041717200","1041717247","GB","GBR","UNITED KINGDOM" -"1041717248","1041717503","FR","FRA","FRANCE" -"1041717504","1041717511","GB","GBR","UNITED KINGDOM" -"1041717512","1041717687","FR","FRA","FRANCE" -"1041717688","1041717695","GB","GBR","UNITED KINGDOM" -"1041717696","1041718023","FR","FRA","FRANCE" -"1041718024","1041718031","GB","GBR","UNITED KINGDOM" -"1041718032","1041718055","FR","FRA","FRANCE" -"1041718056","1041718063","GB","GBR","UNITED KINGDOM" -"1041718064","1041718079","FR","FRA","FRANCE" -"1041718080","1041718119","GB","GBR","UNITED KINGDOM" -"1041718120","1041718127","FR","FRA","FRANCE" -"1041718128","1041718135","GB","GBR","UNITED KINGDOM" -"1041718136","1041718143","FR","FRA","FRANCE" -"1041718144","1041718159","GB","GBR","UNITED KINGDOM" -"1041718160","1041718191","FR","FRA","FRANCE" -"1041718192","1041718215","GB","GBR","UNITED KINGDOM" -"1041718216","1041718231","FR","FRA","FRANCE" -"1041718232","1041718255","GB","GBR","UNITED KINGDOM" -"1041718256","1041718271","FR","FRA","FRANCE" -"1041718272","1041718311","GB","GBR","UNITED KINGDOM" -"1041718312","1041718319","FR","FRA","FRANCE" -"1041718320","1041718327","GB","GBR","UNITED KINGDOM" -"1041718328","1041718335","FR","FRA","FRANCE" -"1041718336","1041718351","GB","GBR","UNITED KINGDOM" -"1041718352","1041718407","FR","FRA","FRANCE" -"1041718408","1041718415","GB","GBR","UNITED KINGDOM" -"1041718416","1041718431","FR","FRA","FRANCE" -"1041718432","1041718455","GB","GBR","UNITED KINGDOM" -"1041718456","1041718463","FR","FRA","FRANCE" -"1041718464","1041718479","GB","GBR","UNITED KINGDOM" -"1041718480","1041718495","FR","FRA","FRANCE" -"1041718496","1041718503","GB","GBR","UNITED KINGDOM" -"1041718504","1041718591","FR","FRA","FRANCE" -"1041718592","1041718607","GB","GBR","UNITED KINGDOM" -"1041718608","1041718623","FR","FRA","FRANCE" -"1041718624","1041718639","GB","GBR","UNITED KINGDOM" -"1041718640","1041718663","FR","FRA","FRANCE" -"1041718664","1041718671","GB","GBR","UNITED KINGDOM" -"1041718672","1041718687","FR","FRA","FRANCE" -"1041718688","1041718703","GB","GBR","UNITED KINGDOM" -"1041718704","1041718783","FR","FRA","FRANCE" -"1041718784","1041718799","GB","GBR","UNITED KINGDOM" -"1041718800","1041718815","FR","FRA","FRANCE" -"1041718816","1041718847","GB","GBR","UNITED KINGDOM" -"1041718848","1041718879","FR","FRA","FRANCE" -"1041718880","1041718911","GB","GBR","UNITED KINGDOM" -"1041718912","1041718927","FR","FRA","FRANCE" -"1041718928","1041718943","GB","GBR","UNITED KINGDOM" -"1041718944","1041718975","FR","FRA","FRANCE" -"1041718976","1041718991","GB","GBR","UNITED KINGDOM" -"1041718992","1041718999","FR","FRA","FRANCE" -"1041719000","1041719007","GB","GBR","UNITED KINGDOM" -"1041719008","1041719203","FR","FRA","FRANCE" -"1041719204","1041719207","GB","GBR","UNITED KINGDOM" -"1041719208","1041719215","FR","FRA","FRANCE" -"1041719216","1041719223","GB","GBR","UNITED KINGDOM" -"1041719224","1041719224","FR","FRA","FRANCE" -"1041719225","1041719227","GB","GBR","UNITED KINGDOM" -"1041719228","1041719228","FR","FRA","FRANCE" -"1041719229","1041719231","GB","GBR","UNITED KINGDOM" -"1041719232","1041719247","FR","FRA","FRANCE" -"1041719248","1041719263","GB","GBR","UNITED KINGDOM" -"1041719264","1041719375","FR","FRA","FRANCE" -"1041719376","1041719391","GB","GBR","UNITED KINGDOM" -"1041719392","1041719439","FR","FRA","FRANCE" -"1041719440","1041719487","GB","GBR","UNITED KINGDOM" -"1041719488","1041719599","FR","FRA","FRANCE" -"1041719600","1041719615","GB","GBR","UNITED KINGDOM" -"1041719616","1041719647","FR","FRA","FRANCE" -"1041719648","1041719663","GB","GBR","UNITED KINGDOM" -"1041719664","1041719679","FR","FRA","FRANCE" -"1041719680","1041719695","GB","GBR","UNITED KINGDOM" -"1041719696","1041719703","FR","FRA","FRANCE" -"1041719704","1041719711","GB","GBR","UNITED KINGDOM" -"1041719712","1041719743","FR","FRA","FRANCE" -"1041719744","1041719759","GB","GBR","UNITED KINGDOM" -"1041719760","1041719807","FR","FRA","FRANCE" -"1041719808","1041719855","GB","GBR","UNITED KINGDOM" -"1041719856","1041719879","FR","FRA","FRANCE" -"1041719880","1041719903","GB","GBR","UNITED KINGDOM" -"1041719904","1041719919","FR","FRA","FRANCE" -"1041719920","1041719935","GB","GBR","UNITED KINGDOM" -"1041719936","1041720015","FR","FRA","FRANCE" -"1041720016","1041720031","GB","GBR","UNITED KINGDOM" -"1041720032","1041720079","FR","FRA","FRANCE" -"1041720080","1041720087","GB","GBR","UNITED KINGDOM" -"1041720088","1041720351","FR","FRA","FRANCE" -"1041720352","1041720367","GB","GBR","UNITED KINGDOM" -"1041720368","1041720519","FR","FRA","FRANCE" -"1041720520","1041720527","GB","GBR","UNITED KINGDOM" -"1041720528","1041720551","FR","FRA","FRANCE" -"1041720552","1041720559","GB","GBR","UNITED KINGDOM" -"1041720560","1041720567","FR","FRA","FRANCE" -"1041720568","1041720607","GB","GBR","UNITED KINGDOM" -"1041720608","1041720615","FR","FRA","FRANCE" -"1041720616","1041720639","GB","GBR","UNITED KINGDOM" -"1041720640","1041720687","FR","FRA","FRANCE" -"1041720688","1041720703","GB","GBR","UNITED KINGDOM" -"1041720704","1041720719","FR","FRA","FRANCE" -"1041720720","1041720735","GB","GBR","UNITED KINGDOM" -"1041720736","1041720839","FR","FRA","FRANCE" -"1041720840","1041720847","GB","GBR","UNITED KINGDOM" -"1041720848","1041720895","FR","FRA","FRANCE" -"1041720896","1041720927","GB","GBR","UNITED KINGDOM" -"1041720928","1041720959","FR","FRA","FRANCE" -"1041720960","1041721007","GB","GBR","UNITED KINGDOM" -"1041721008","1041721039","FR","FRA","FRANCE" -"1041721040","1041721087","GB","GBR","UNITED KINGDOM" -"1041721088","1041721343","FR","FRA","FRANCE" -"1041721344","1041721375","GB","GBR","UNITED KINGDOM" -"1041721376","1041721391","FR","FRA","FRANCE" -"1041721392","1041721439","GB","GBR","UNITED KINGDOM" -"1041721440","1041721519","FR","FRA","FRANCE" -"1041721520","1041721599","GB","GBR","UNITED KINGDOM" -"1041721600","1041721727","FR","FRA","FRANCE" -"1041721728","1041721791","GB","GBR","UNITED KINGDOM" -"1041721792","1041721807","FR","FRA","FRANCE" -"1041721808","1041721855","GB","GBR","UNITED KINGDOM" -"1041721856","1041722119","FR","FRA","FRANCE" -"1041722120","1041722127","GB","GBR","UNITED KINGDOM" -"1041722128","1041722143","FR","FRA","FRANCE" -"1041722144","1041722159","GB","GBR","UNITED KINGDOM" -"1041722160","1041722167","FR","FRA","FRANCE" -"1041722168","1041722191","GB","GBR","UNITED KINGDOM" -"1041722192","1041722223","FR","FRA","FRANCE" -"1041722224","1041722271","GB","GBR","UNITED KINGDOM" -"1041722272","1041722279","FR","FRA","FRANCE" -"1041722280","1041722383","GB","GBR","UNITED KINGDOM" -"1041722384","1041722391","FR","FRA","FRANCE" -"1041722392","1041722399","GB","GBR","UNITED KINGDOM" -"1041722400","1041722415","FR","FRA","FRANCE" -"1041722416","1041722431","GB","GBR","UNITED KINGDOM" -"1041722432","1041722463","FR","FRA","FRANCE" -"1041722464","1041722503","GB","GBR","UNITED KINGDOM" -"1041722504","1041722535","FR","FRA","FRANCE" -"1041722536","1041722551","GB","GBR","UNITED KINGDOM" -"1041722552","1041722567","FR","FRA","FRANCE" -"1041722568","1041722575","GB","GBR","UNITED KINGDOM" -"1041722576","1041722583","FR","FRA","FRANCE" -"1041722584","1041722623","GB","GBR","UNITED KINGDOM" -"1041722624","1041722807","FR","FRA","FRANCE" -"1041722808","1041722815","GB","GBR","UNITED KINGDOM" -"1041722816","1041722855","FR","FRA","FRANCE" -"1041722856","1041722863","GB","GBR","UNITED KINGDOM" -"1041722864","1041722943","FR","FRA","FRANCE" -"1041722944","1041723007","GB","GBR","UNITED KINGDOM" -"1041723008","1041723031","FR","FRA","FRANCE" -"1041723032","1041723135","GB","GBR","UNITED KINGDOM" -"1041723136","1041723167","FR","FRA","FRANCE" -"1041723168","1041723175","GB","GBR","UNITED KINGDOM" -"1041723176","1041723231","FR","FRA","FRANCE" -"1041723232","1041723263","GB","GBR","UNITED KINGDOM" -"1041723264","1041723295","FR","FRA","FRANCE" -"1041723296","1041723391","GB","GBR","UNITED KINGDOM" -"1041723392","1041723647","FR","FRA","FRANCE" -"1041723648","1041723775","GB","GBR","UNITED KINGDOM" -"1041723776","1041723839","FR","FRA","FRANCE" -"1041723840","1041723903","GB","GBR","UNITED KINGDOM" -"1041723904","1041724455","FR","FRA","FRANCE" -"1041724456","1041724463","GB","GBR","UNITED KINGDOM" -"1041724464","1041724471","FR","FRA","FRANCE" -"1041724472","1041724479","GB","GBR","UNITED KINGDOM" -"1041724480","1041724511","FR","FRA","FRANCE" -"1041724512","1041724527","GB","GBR","UNITED KINGDOM" -"1041724528","1041724591","FR","FRA","FRANCE" -"1041724592","1041724607","GB","GBR","UNITED KINGDOM" -"1041724608","1041724671","FR","FRA","FRANCE" -"1041724672","1041724927","GB","GBR","UNITED KINGDOM" -"1041724928","1041725007","FR","FRA","FRANCE" -"1041725008","1041725023","GB","GBR","UNITED KINGDOM" -"1041725024","1041725135","FR","FRA","FRANCE" -"1041725136","1041725167","GB","GBR","UNITED KINGDOM" -"1041725168","1041725175","FR","FRA","FRANCE" -"1041725176","1041725231","GB","GBR","UNITED KINGDOM" -"1041725232","1041725255","FR","FRA","FRANCE" -"1041725256","1041725271","GB","GBR","UNITED KINGDOM" -"1041725272","1041725343","FR","FRA","FRANCE" -"1041725344","1041725407","GB","GBR","UNITED KINGDOM" -"1041725408","1041725703","FR","FRA","FRANCE" -"1041725704","1041725711","GB","GBR","UNITED KINGDOM" -"1041725712","1041725799","FR","FRA","FRANCE" -"1041725800","1041725807","GB","GBR","UNITED KINGDOM" -"1041725808","1041725815","FR","FRA","FRANCE" -"1041725816","1041725823","GB","GBR","UNITED KINGDOM" -"1041725824","1041725983","FR","FRA","FRANCE" -"1041725984","1041725999","GB","GBR","UNITED KINGDOM" -"1041726000","1041726063","FR","FRA","FRANCE" -"1041726064","1041726079","GB","GBR","UNITED KINGDOM" -"1041726080","1041726127","FR","FRA","FRANCE" -"1041726128","1041726151","GB","GBR","UNITED KINGDOM" -"1041726152","1041726159","FR","FRA","FRANCE" -"1041726160","1041726167","GB","GBR","UNITED KINGDOM" -"1041726168","1041726463","FR","FRA","FRANCE" -"1041726464","1041726471","GB","GBR","UNITED KINGDOM" -"1041726472","1041726487","FR","FRA","FRANCE" -"1041726488","1041726543","GB","GBR","UNITED KINGDOM" -"1041726544","1041726559","FR","FRA","FRANCE" -"1041726560","1041726591","GB","GBR","UNITED KINGDOM" -"1041726592","1041726639","FR","FRA","FRANCE" -"1041726640","1041726655","GB","GBR","UNITED KINGDOM" -"1041726656","1041726671","FR","FRA","FRANCE" -"1041726672","1041726687","GB","GBR","UNITED KINGDOM" -"1041726688","1041726735","FR","FRA","FRANCE" -"1041726736","1041726751","GB","GBR","UNITED KINGDOM" -"1041726752","1041726847","FR","FRA","FRANCE" -"1041726848","1041726855","GB","GBR","UNITED KINGDOM" -"1041726856","1041726879","FR","FRA","FRANCE" -"1041726880","1041726903","GB","GBR","UNITED KINGDOM" -"1041726904","1041726951","FR","FRA","FRANCE" -"1041726952","1041726959","GB","GBR","UNITED KINGDOM" -"1041726960","1041726975","FR","FRA","FRANCE" -"1041726976","1041726979","GB","GBR","UNITED KINGDOM" -"1041726980","1041726983","FR","FRA","FRANCE" -"1041726984","1041726987","GB","GBR","UNITED KINGDOM" -"1041726988","1041726991","FR","FRA","FRANCE" -"1041726992","1041726992","GB","GBR","UNITED KINGDOM" -"1041726993","1041726994","FR","FRA","FRANCE" -"1041726995","1041726995","GB","GBR","UNITED KINGDOM" -"1041726996","1041727003","FR","FRA","FRANCE" -"1041727004","1041727028","GB","GBR","UNITED KINGDOM" -"1041727029","1041727029","FR","FRA","FRANCE" -"1041727030","1041727036","GB","GBR","UNITED KINGDOM" -"1041727037","1041727038","FR","FRA","FRANCE" -"1041727039","1041727042","GB","GBR","UNITED KINGDOM" -"1041727043","1041727043","FR","FRA","FRANCE" -"1041727044","1041727049","GB","GBR","UNITED KINGDOM" -"1041727050","1041727050","FR","FRA","FRANCE" -"1041727051","1041727070","GB","GBR","UNITED KINGDOM" -"1041727071","1041727071","FR","FRA","FRANCE" -"1041727072","1041727089","GB","GBR","UNITED KINGDOM" -"1041727090","1041727090","FR","FRA","FRANCE" -"1041727091","1041727091","GB","GBR","UNITED KINGDOM" -"1041727092","1041727095","FR","FRA","FRANCE" -"1041727096","1041727103","GB","GBR","UNITED KINGDOM" -"1041727104","1041727167","FR","FRA","FRANCE" -"1041727168","1041727231","GB","GBR","UNITED KINGDOM" -"1041727232","1041727239","FR","FRA","FRANCE" -"1041727240","1041727247","GB","GBR","UNITED KINGDOM" -"1041727248","1041727303","FR","FRA","FRANCE" -"1041727304","1041727311","GB","GBR","UNITED KINGDOM" -"1041727312","1041727487","FR","FRA","FRANCE" -"1041727488","1041728047","GB","GBR","UNITED KINGDOM" -"1041728048","1041728063","FR","FRA","FRANCE" -"1041728064","1041728095","GB","GBR","UNITED KINGDOM" -"1041728096","1041728111","FR","FRA","FRANCE" -"1041728112","1041728127","GB","GBR","UNITED KINGDOM" -"1041728128","1041728255","FR","FRA","FRANCE" -"1041728256","1041728511","GB","GBR","UNITED KINGDOM" -"1041728512","1041728887","FR","FRA","FRANCE" -"1041728888","1041728895","GB","GBR","UNITED KINGDOM" -"1041728896","1041729023","FR","FRA","FRANCE" -"1041729024","1041729279","GB","GBR","UNITED KINGDOM" -"1041729280","1041729303","FR","FRA","FRANCE" -"1041729304","1041729311","GB","GBR","UNITED KINGDOM" -"1041729312","1041729343","FR","FRA","FRANCE" -"1041729344","1041729359","GB","GBR","UNITED KINGDOM" -"1041729360","1041729367","FR","FRA","FRANCE" -"1041729368","1041729391","GB","GBR","UNITED KINGDOM" -"1041729392","1041729431","FR","FRA","FRANCE" -"1041729432","1041729455","GB","GBR","UNITED KINGDOM" -"1041729456","1041729503","FR","FRA","FRANCE" -"1041729504","1041729519","GB","GBR","UNITED KINGDOM" -"1041729520","1041729527","FR","FRA","FRANCE" -"1041729528","1041729535","GB","GBR","UNITED KINGDOM" -"1041729536","1041729561","FR","FRA","FRANCE" -"1041729562","1041729564","GB","GBR","UNITED KINGDOM" -"1041729565","1041729566","FR","FRA","FRANCE" -"1041729567","1041729567","GB","GBR","UNITED KINGDOM" -"1041729568","1041729615","FR","FRA","FRANCE" -"1041729616","1041729623","GB","GBR","UNITED KINGDOM" -"1041729624","1041729663","FR","FRA","FRANCE" -"1041729664","1041729791","GB","GBR","UNITED KINGDOM" -"1041729792","1041730239","FR","FRA","FRANCE" -"1041730240","1041730247","GB","GBR","UNITED KINGDOM" -"1041730248","1041730639","FR","FRA","FRANCE" -"1041730640","1041730655","GB","GBR","UNITED KINGDOM" -"1041730656","1041730815","FR","FRA","FRANCE" -"1041730816","1041731071","GB","GBR","UNITED KINGDOM" -"1041731072","1041731975","FR","FRA","FRANCE" -"1041731976","1041732031","GB","GBR","UNITED KINGDOM" -"1041732032","1041732055","FR","FRA","FRANCE" -"1041732056","1041732063","GB","GBR","UNITED KINGDOM" -"1041732064","1041732095","FR","FRA","FRANCE" -"1041732096","1041732111","GB","GBR","UNITED KINGDOM" -"1041732112","1041732127","FR","FRA","FRANCE" -"1041732128","1041732191","GB","GBR","UNITED KINGDOM" -"1041732192","1041732255","FR","FRA","FRANCE" -"1041732256","1041732295","GB","GBR","UNITED KINGDOM" -"1041732296","1041732303","FR","FRA","FRANCE" -"1041732304","1041732311","GB","GBR","UNITED KINGDOM" -"1041732312","1041732375","FR","FRA","FRANCE" -"1041732376","1041732383","GB","GBR","UNITED KINGDOM" -"1041732384","1041732447","FR","FRA","FRANCE" -"1041732448","1041732455","GB","GBR","UNITED KINGDOM" -"1041732456","1041732463","FR","FRA","FRANCE" -"1041732464","1041732479","GB","GBR","UNITED KINGDOM" -"1041732480","1041732863","FR","FRA","FRANCE" -"1041732864","1041732871","GB","GBR","UNITED KINGDOM" -"1041732872","1041732879","FR","FRA","FRANCE" -"1041732880","1041732927","GB","GBR","UNITED KINGDOM" -"1041732928","1041732959","FR","FRA","FRANCE" -"1041732960","1041732967","GB","GBR","UNITED KINGDOM" -"1041732968","1041732991","FR","FRA","FRANCE" -"1041732992","1041733103","GB","GBR","UNITED KINGDOM" -"1041733104","1041733503","FR","FRA","FRANCE" -"1041733504","1041733535","GB","GBR","UNITED KINGDOM" -"1041733536","1041733887","FR","FRA","FRANCE" -"1041733888","1041734143","GB","GBR","UNITED KINGDOM" -"1041734144","1041734927","FR","FRA","FRANCE" -"1041734928","1041734943","GB","GBR","UNITED KINGDOM" -"1041734944","1041734975","FR","FRA","FRANCE" -"1041734976","1041734991","GB","GBR","UNITED KINGDOM" -"1041734992","1041734999","FR","FRA","FRANCE" -"1041735000","1041735039","GB","GBR","UNITED KINGDOM" -"1041735040","1041735055","FR","FRA","FRANCE" -"1041735056","1041735087","GB","GBR","UNITED KINGDOM" -"1041735088","1041735119","FR","FRA","FRANCE" -"1041735120","1041735167","GB","GBR","UNITED KINGDOM" -"1041735168","1041735431","FR","FRA","FRANCE" -"1041735432","1041735495","GB","GBR","UNITED KINGDOM" -"1041735496","1041735519","FR","FRA","FRANCE" -"1041735520","1041735551","GB","GBR","UNITED KINGDOM" -"1041735552","1041735567","FR","FRA","FRANCE" -"1041735568","1041735583","GB","GBR","UNITED KINGDOM" -"1041735584","1041735615","FR","FRA","FRANCE" -"1041735616","1041735663","GB","GBR","UNITED KINGDOM" -"1041735664","1041736191","FR","FRA","FRANCE" -"1041736192","1041736207","GB","GBR","UNITED KINGDOM" -"1041736208","1041736255","FR","FRA","FRANCE" -"1041736256","1041736263","GB","GBR","UNITED KINGDOM" -"1041736264","1041736367","FR","FRA","FRANCE" -"1041736368","1041736391","GB","GBR","UNITED KINGDOM" -"1041736392","1041736423","FR","FRA","FRANCE" -"1041736424","1041736463","GB","GBR","UNITED KINGDOM" -"1041736464","1041736503","FR","FRA","FRANCE" -"1041736504","1041736511","GB","GBR","UNITED KINGDOM" -"1041736512","1041736527","FR","FRA","FRANCE" -"1041736528","1041736535","GB","GBR","UNITED KINGDOM" -"1041736536","1041736543","FR","FRA","FRANCE" -"1041736544","1041736551","GB","GBR","UNITED KINGDOM" -"1041736552","1041736567","FR","FRA","FRANCE" -"1041736568","1041736599","GB","GBR","UNITED KINGDOM" -"1041736600","1041736607","FR","FRA","FRANCE" -"1041736608","1041736631","GB","GBR","UNITED KINGDOM" -"1041736632","1041736671","FR","FRA","FRANCE" -"1041736672","1041736695","GB","GBR","UNITED KINGDOM" -"1041736696","1041737015","FR","FRA","FRANCE" -"1041737016","1041737031","GB","GBR","UNITED KINGDOM" -"1041737032","1041737039","FR","FRA","FRANCE" -"1041737040","1041737055","GB","GBR","UNITED KINGDOM" -"1041737056","1041737071","FR","FRA","FRANCE" -"1041737072","1041737119","GB","GBR","UNITED KINGDOM" -"1041737120","1041737127","FR","FRA","FRANCE" -"1041737128","1041737151","GB","GBR","UNITED KINGDOM" -"1041737152","1041737247","FR","FRA","FRANCE" -"1041737248","1041737279","GB","GBR","UNITED KINGDOM" -"1041737280","1041737295","FR","FRA","FRANCE" -"1041737296","1041737303","GB","GBR","UNITED KINGDOM" -"1041737304","1041737375","FR","FRA","FRANCE" -"1041737376","1041737391","GB","GBR","UNITED KINGDOM" -"1041737392","1041737399","FR","FRA","FRANCE" -"1041737400","1041737423","GB","GBR","UNITED KINGDOM" -"1041737424","1041737455","FR","FRA","FRANCE" -"1041737456","1041737463","GB","GBR","UNITED KINGDOM" -"1041737464","1041737503","FR","FRA","FRANCE" -"1041737504","1041737535","GB","GBR","UNITED KINGDOM" -"1041737536","1041737583","FR","FRA","FRANCE" -"1041737584","1041737599","GB","GBR","UNITED KINGDOM" -"1041737600","1041737607","FR","FRA","FRANCE" -"1041737608","1041737615","GB","GBR","UNITED KINGDOM" -"1041737616","1041737647","FR","FRA","FRANCE" -"1041737648","1041737663","GB","GBR","UNITED KINGDOM" -"1041737664","1041737671","FR","FRA","FRANCE" -"1041737672","1041737695","GB","GBR","UNITED KINGDOM" -"1041737696","1041737727","FR","FRA","FRANCE" -"1041737728","1041737743","GB","GBR","UNITED KINGDOM" -"1041737744","1041737775","FR","FRA","FRANCE" -"1041737776","1041737823","GB","GBR","UNITED KINGDOM" -"1041737824","1041737847","FR","FRA","FRANCE" -"1041737848","1041737855","GB","GBR","UNITED KINGDOM" -"1041737856","1041737871","FR","FRA","FRANCE" -"1041737872","1041737879","GB","GBR","UNITED KINGDOM" -"1041737880","1041737919","FR","FRA","FRANCE" -"1041737920","1041737935","GB","GBR","UNITED KINGDOM" -"1041737936","1041738159","FR","FRA","FRANCE" -"1041738160","1041738167","GB","GBR","UNITED KINGDOM" -"1041738168","1041738215","FR","FRA","FRANCE" -"1041738216","1041738223","GB","GBR","UNITED KINGDOM" -"1041738224","1041738503","FR","FRA","FRANCE" -"1041738504","1041738511","GB","GBR","UNITED KINGDOM" -"1041738512","1041738519","FR","FRA","FRANCE" -"1041738520","1041738543","GB","GBR","UNITED KINGDOM" -"1041738544","1041738551","FR","FRA","FRANCE" -"1041738552","1041738559","GB","GBR","UNITED KINGDOM" -"1041738560","1041738567","FR","FRA","FRANCE" -"1041738568","1041738575","GB","GBR","UNITED KINGDOM" -"1041738576","1041738583","FR","FRA","FRANCE" -"1041738584","1041738591","GB","GBR","UNITED KINGDOM" -"1041738592","1041738599","FR","FRA","FRANCE" -"1041738600","1041738607","GB","GBR","UNITED KINGDOM" -"1041738608","1041738703","FR","FRA","FRANCE" -"1041738704","1041738711","GB","GBR","UNITED KINGDOM" -"1041738712","1041738735","FR","FRA","FRANCE" -"1041738736","1041738743","GB","GBR","UNITED KINGDOM" -"1041738744","1041739055","FR","FRA","FRANCE" -"1041739056","1041739063","GB","GBR","UNITED KINGDOM" -"1041739064","1041739071","FR","FRA","FRANCE" -"1041739072","1041739087","GB","GBR","UNITED KINGDOM" -"1041739088","1041739127","FR","FRA","FRANCE" -"1041739128","1041739175","GB","GBR","UNITED KINGDOM" -"1041739176","1041739183","FR","FRA","FRANCE" -"1041739184","1041739207","GB","GBR","UNITED KINGDOM" -"1041739208","1041739215","FR","FRA","FRANCE" -"1041739216","1041739231","GB","GBR","UNITED KINGDOM" -"1041739232","1041739287","FR","FRA","FRANCE" -"1041739288","1041739303","GB","GBR","UNITED KINGDOM" -"1041739304","1041739375","FR","FRA","FRANCE" -"1041739376","1041739383","GB","GBR","UNITED KINGDOM" -"1041739384","1041739391","FR","FRA","FRANCE" -"1041739392","1041739423","GB","GBR","UNITED KINGDOM" -"1041739424","1041739463","FR","FRA","FRANCE" -"1041739464","1041739471","GB","GBR","UNITED KINGDOM" -"1041739472","1041739487","FR","FRA","FRANCE" -"1041739488","1041739503","GB","GBR","UNITED KINGDOM" -"1041739504","1041739519","FR","FRA","FRANCE" -"1041739520","1041739535","GB","GBR","UNITED KINGDOM" -"1041739536","1041739743","FR","FRA","FRANCE" -"1041739744","1041739751","GB","GBR","UNITED KINGDOM" -"1041739752","1041740031","FR","FRA","FRANCE" -"1041740032","1041740039","GB","GBR","UNITED KINGDOM" -"1041740040","1041740135","FR","FRA","FRANCE" -"1041740136","1041740143","GB","GBR","UNITED KINGDOM" -"1041740144","1041740263","FR","FRA","FRANCE" -"1041740264","1041740271","GB","GBR","UNITED KINGDOM" -"1041740272","1041740567","FR","FRA","FRANCE" -"1041740568","1041740575","GB","GBR","UNITED KINGDOM" -"1041740576","1041740591","FR","FRA","FRANCE" -"1041740592","1041740607","GB","GBR","UNITED KINGDOM" -"1041740608","1041740647","FR","FRA","FRANCE" -"1041740648","1041740655","GB","GBR","UNITED KINGDOM" -"1041740656","1041740679","FR","FRA","FRANCE" -"1041740680","1041740687","GB","GBR","UNITED KINGDOM" -"1041740688","1041740703","FR","FRA","FRANCE" -"1041740704","1041740719","GB","GBR","UNITED KINGDOM" -"1041740720","1041740863","FR","FRA","FRANCE" -"1041740864","1041740879","GB","GBR","UNITED KINGDOM" -"1041740880","1041740959","FR","FRA","FRANCE" -"1041740960","1041740975","GB","GBR","UNITED KINGDOM" -"1041740976","1041741055","FR","FRA","FRANCE" -"1041741056","1041741087","GB","GBR","UNITED KINGDOM" -"1041741088","1041741103","FR","FRA","FRANCE" -"1041741104","1041741119","GB","GBR","UNITED KINGDOM" -"1041741120","1041741135","FR","FRA","FRANCE" -"1041741136","1041741151","GB","GBR","UNITED KINGDOM" -"1041741152","1041741239","FR","FRA","FRANCE" -"1041741240","1041741263","GB","GBR","UNITED KINGDOM" -"1041741264","1041741279","FR","FRA","FRANCE" -"1041741280","1041741295","GB","GBR","UNITED KINGDOM" -"1041741296","1041741607","FR","FRA","FRANCE" -"1041741608","1041741615","GB","GBR","UNITED KINGDOM" -"1041741616","1041741631","FR","FRA","FRANCE" -"1041741632","1041741647","GB","GBR","UNITED KINGDOM" -"1041741648","1041741663","FR","FRA","FRANCE" -"1041741664","1041741679","GB","GBR","UNITED KINGDOM" -"1041741680","1041741687","FR","FRA","FRANCE" -"1041741688","1041741823","GB","GBR","UNITED KINGDOM" -"1041741824","1041742095","FR","FRA","FRANCE" -"1041742096","1041742111","GB","GBR","UNITED KINGDOM" -"1041742112","1041742127","FR","FRA","FRANCE" -"1041742128","1041742135","GB","GBR","UNITED KINGDOM" -"1041742136","1041742151","FR","FRA","FRANCE" -"1041742152","1041742159","GB","GBR","UNITED KINGDOM" -"1041742160","1041742183","FR","FRA","FRANCE" -"1041742184","1041742191","GB","GBR","UNITED KINGDOM" -"1041742192","1041742223","FR","FRA","FRANCE" -"1041742224","1041742239","GB","GBR","UNITED KINGDOM" -"1041742240","1041742303","FR","FRA","FRANCE" -"1041742304","1041742335","GB","GBR","UNITED KINGDOM" -"1041742336","1041742359","FR","FRA","FRANCE" -"1041742360","1041742367","GB","GBR","UNITED KINGDOM" -"1041742368","1041742383","FR","FRA","FRANCE" -"1041742384","1041742391","GB","GBR","UNITED KINGDOM" -"1041742392","1041742407","FR","FRA","FRANCE" -"1041742408","1041742415","GB","GBR","UNITED KINGDOM" -"1041742416","1041742455","FR","FRA","FRANCE" -"1041742456","1041742463","GB","GBR","UNITED KINGDOM" -"1041742464","1041742471","FR","FRA","FRANCE" -"1041742472","1041742479","GB","GBR","UNITED KINGDOM" -"1041742480","1041742511","FR","FRA","FRANCE" -"1041742512","1041742591","GB","GBR","UNITED KINGDOM" -"1041742592","1041743135","FR","FRA","FRANCE" -"1041743136","1041743143","GB","GBR","UNITED KINGDOM" -"1041743144","1041743175","FR","FRA","FRANCE" -"1041743176","1041743215","GB","GBR","UNITED KINGDOM" -"1041743216","1041743303","FR","FRA","FRANCE" -"1041743304","1041743311","GB","GBR","UNITED KINGDOM" -"1041743312","1041743615","FR","FRA","FRANCE" -"1041743616","1041743623","GB","GBR","UNITED KINGDOM" -"1041743624","1041743639","FR","FRA","FRANCE" -"1041743640","1041743647","GB","GBR","UNITED KINGDOM" -"1041743648","1041743671","FR","FRA","FRANCE" -"1041743672","1041743679","GB","GBR","UNITED KINGDOM" -"1041743680","1041743703","FR","FRA","FRANCE" -"1041743704","1041743719","GB","GBR","UNITED KINGDOM" -"1041743720","1041743743","FR","FRA","FRANCE" -"1041743744","1041743759","GB","GBR","UNITED KINGDOM" -"1041743760","1041743767","FR","FRA","FRANCE" -"1041743768","1041743775","GB","GBR","UNITED KINGDOM" -"1041743776","1041743791","FR","FRA","FRANCE" -"1041743792","1041743799","GB","GBR","UNITED KINGDOM" -"1041743800","1041743807","FR","FRA","FRANCE" -"1041743808","1041743823","GB","GBR","UNITED KINGDOM" -"1041743824","1041743831","FR","FRA","FRANCE" -"1041743832","1041743847","GB","GBR","UNITED KINGDOM" -"1041743848","1041743863","FR","FRA","FRANCE" -"1041743864","1041743871","GB","GBR","UNITED KINGDOM" -"1041743872","1041744143","FR","FRA","FRANCE" -"1041744144","1041744151","GB","GBR","UNITED KINGDOM" -"1041744152","1041744255","FR","FRA","FRANCE" -"1041744256","1041744263","GB","GBR","UNITED KINGDOM" -"1041744264","1041744271","FR","FRA","FRANCE" -"1041744272","1041744295","GB","GBR","UNITED KINGDOM" -"1041744296","1041744311","FR","FRA","FRANCE" -"1041744312","1041744327","GB","GBR","UNITED KINGDOM" -"1041744328","1041744479","FR","FRA","FRANCE" -"1041744480","1041744543","GB","GBR","UNITED KINGDOM" -"1041744544","1041744599","FR","FRA","FRANCE" -"1041744600","1041744607","GB","GBR","UNITED KINGDOM" -"1041744608","1041744623","FR","FRA","FRANCE" -"1041744624","1041744895","GB","GBR","UNITED KINGDOM" -"1041744896","1041744919","FR","FRA","FRANCE" -"1041744920","1041744927","GB","GBR","UNITED KINGDOM" -"1041744928","1041744943","FR","FRA","FRANCE" -"1041744944","1041744951","GB","GBR","UNITED KINGDOM" -"1041744952","1041744975","FR","FRA","FRANCE" -"1041744976","1041744983","GB","GBR","UNITED KINGDOM" -"1041744984","1041745007","FR","FRA","FRANCE" -"1041745008","1041745031","GB","GBR","UNITED KINGDOM" -"1041745032","1041745063","FR","FRA","FRANCE" -"1041745064","1041745071","GB","GBR","UNITED KINGDOM" -"1041745072","1041745095","FR","FRA","FRANCE" -"1041745096","1041745143","GB","GBR","UNITED KINGDOM" -"1041745144","1041745151","FR","FRA","FRANCE" -"1041745152","1041745191","GB","GBR","UNITED KINGDOM" -"1041745192","1041745207","FR","FRA","FRANCE" -"1041745208","1041745215","GB","GBR","UNITED KINGDOM" -"1041745216","1041745247","FR","FRA","FRANCE" -"1041745248","1041745279","GB","GBR","UNITED KINGDOM" -"1041745280","1041745327","FR","FRA","FRANCE" -"1041745328","1041745343","GB","GBR","UNITED KINGDOM" -"1041745344","1041745359","FR","FRA","FRANCE" -"1041745360","1041745375","GB","GBR","UNITED KINGDOM" -"1041745376","1041745415","FR","FRA","FRANCE" -"1041745416","1041745423","GB","GBR","UNITED KINGDOM" -"1041745424","1041745447","FR","FRA","FRANCE" -"1041745448","1041745471","GB","GBR","UNITED KINGDOM" -"1041745472","1041745479","FR","FRA","FRANCE" -"1041745480","1041745487","GB","GBR","UNITED KINGDOM" -"1041745488","1041745495","FR","FRA","FRANCE" -"1041745496","1041745535","GB","GBR","UNITED KINGDOM" -"1041745536","1041745543","FR","FRA","FRANCE" -"1041745544","1041745551","GB","GBR","UNITED KINGDOM" -"1041745552","1041745567","FR","FRA","FRANCE" -"1041745568","1041745575","GB","GBR","UNITED KINGDOM" -"1041745576","1041745599","FR","FRA","FRANCE" -"1041745600","1041745615","GB","GBR","UNITED KINGDOM" -"1041745616","1041745639","FR","FRA","FRANCE" -"1041745640","1041745647","GB","GBR","UNITED KINGDOM" -"1041745648","1041745655","FR","FRA","FRANCE" -"1041745656","1041745663","GB","GBR","UNITED KINGDOM" -"1041745664","1041745751","FR","FRA","FRANCE" -"1041745752","1041745767","GB","GBR","UNITED KINGDOM" -"1041745768","1041745855","FR","FRA","FRANCE" -"1041745856","1041745871","GB","GBR","UNITED KINGDOM" -"1041745872","1041745887","FR","FRA","FRANCE" -"1041745888","1041745959","GB","GBR","UNITED KINGDOM" -"1041745960","1041745967","FR","FRA","FRANCE" -"1041745968","1041745983","GB","GBR","UNITED KINGDOM" -"1041745984","1041745999","FR","FRA","FRANCE" -"1041746000","1041746015","GB","GBR","UNITED KINGDOM" -"1041746016","1041746023","FR","FRA","FRANCE" -"1041746024","1041746031","GB","GBR","UNITED KINGDOM" -"1041746032","1041746039","FR","FRA","FRANCE" -"1041746040","1041746047","GB","GBR","UNITED KINGDOM" -"1041746048","1041746063","FR","FRA","FRANCE" -"1041746064","1041746079","GB","GBR","UNITED KINGDOM" -"1041746080","1041746111","FR","FRA","FRANCE" -"1041746112","1041746135","GB","GBR","UNITED KINGDOM" -"1041746136","1041746703","FR","FRA","FRANCE" -"1041746704","1041746735","GB","GBR","UNITED KINGDOM" -"1041746736","1041746743","FR","FRA","FRANCE" -"1041746744","1041746751","GB","GBR","UNITED KINGDOM" -"1041746752","1041746799","FR","FRA","FRANCE" -"1041746800","1041746823","GB","GBR","UNITED KINGDOM" -"1041746824","1041746831","FR","FRA","FRANCE" -"1041746832","1041746847","GB","GBR","UNITED KINGDOM" -"1041746848","1041746863","FR","FRA","FRANCE" -"1041746864","1041746895","GB","GBR","UNITED KINGDOM" -"1041746896","1041747199","FR","FRA","FRANCE" -"1041747200","1041747439","GB","GBR","UNITED KINGDOM" -"1041747440","1041747463","FR","FRA","FRANCE" -"1041747464","1041747487","GB","GBR","UNITED KINGDOM" -"1041747488","1041747503","FR","FRA","FRANCE" -"1041747504","1041747519","GB","GBR","UNITED KINGDOM" -"1041747520","1041749775","FR","FRA","FRANCE" -"1041749776","1041749783","GB","GBR","UNITED KINGDOM" -"1041749784","1041749807","FR","FRA","FRANCE" -"1041749808","1041749815","GB","GBR","UNITED KINGDOM" -"1041749816","1041749967","FR","FRA","FRANCE" -"1041749968","1041749975","GB","GBR","UNITED KINGDOM" -"1041749976","1041749999","FR","FRA","FRANCE" -"1041750000","1041750007","GB","GBR","UNITED KINGDOM" -"1041750008","1041750527","FR","FRA","FRANCE" -"1041750528","1041750543","GB","GBR","UNITED KINGDOM" -"1041750544","1041750559","FR","FRA","FRANCE" -"1041750560","1041750591","GB","GBR","UNITED KINGDOM" -"1041750592","1041750743","FR","FRA","FRANCE" -"1041750744","1041750751","GB","GBR","UNITED KINGDOM" -"1041750752","1041750775","FR","FRA","FRANCE" -"1041750776","1041750783","GB","GBR","UNITED KINGDOM" -"1041750784","1041751327","FR","FRA","FRANCE" -"1041751328","1041751343","GB","GBR","UNITED KINGDOM" -"1041751344","1041751551","FR","FRA","FRANCE" -"1041751552","1041751583","GB","GBR","UNITED KINGDOM" -"1041751584","1041751639","FR","FRA","FRANCE" -"1041751640","1041751647","GB","GBR","UNITED KINGDOM" -"1041751648","1041751695","FR","FRA","FRANCE" -"1041751696","1041751719","GB","GBR","UNITED KINGDOM" -"1041751720","1041751743","FR","FRA","FRANCE" -"1041751744","1041751751","GB","GBR","UNITED KINGDOM" -"1041751752","1041751767","FR","FRA","FRANCE" -"1041751768","1041751775","GB","GBR","UNITED KINGDOM" -"1041751776","1041753343","FR","FRA","FRANCE" -"1041753344","1041753535","GB","GBR","UNITED KINGDOM" -"1041753536","1041753599","FR","FRA","FRANCE" -"1041753600","1041753775","GB","GBR","UNITED KINGDOM" -"1041753776","1041753831","FR","FRA","FRANCE" -"1041753832","1041753839","GB","GBR","UNITED KINGDOM" -"1041753840","1041753983","FR","FRA","FRANCE" -"1041753984","1041754111","GB","GBR","UNITED KINGDOM" -"1041754112","1041754143","FR","FRA","FRANCE" -"1041754144","1041754151","GB","GBR","UNITED KINGDOM" -"1041754152","1041754175","FR","FRA","FRANCE" -"1041754176","1041754191","GB","GBR","UNITED KINGDOM" -"1041754192","1041754239","FR","FRA","FRANCE" -"1041754240","1041754247","GB","GBR","UNITED KINGDOM" -"1041754248","1041754455","FR","FRA","FRANCE" -"1041754456","1041754463","GB","GBR","UNITED KINGDOM" -"1041754464","1041754479","FR","FRA","FRANCE" -"1041754480","1041754495","GB","GBR","UNITED KINGDOM" -"1041754496","1041755231","FR","FRA","FRANCE" -"1041755232","1041755239","GB","GBR","UNITED KINGDOM" -"1041755240","1041755295","FR","FRA","FRANCE" -"1041755296","1041755303","GB","GBR","UNITED KINGDOM" -"1041755304","1041755335","FR","FRA","FRANCE" -"1041755336","1041755343","GB","GBR","UNITED KINGDOM" -"1041755344","1041755375","FR","FRA","FRANCE" -"1041755376","1041755391","GB","GBR","UNITED KINGDOM" -"1041755392","1041755455","FR","FRA","FRANCE" -"1041755456","1041755471","GB","GBR","UNITED KINGDOM" -"1041755472","1041755503","FR","FRA","FRANCE" -"1041755504","1041755519","GB","GBR","UNITED KINGDOM" -"1041755520","1041755631","FR","FRA","FRANCE" -"1041755632","1041755647","GB","GBR","UNITED KINGDOM" -"1041755648","1041756463","FR","FRA","FRANCE" -"1041756464","1041756471","GB","GBR","UNITED KINGDOM" -"1041756472","1041756543","FR","FRA","FRANCE" -"1041756544","1041756567","GB","GBR","UNITED KINGDOM" -"1041756568","1041756599","FR","FRA","FRANCE" -"1041756600","1041756607","GB","GBR","UNITED KINGDOM" -"1041756608","1041756655","FR","FRA","FRANCE" -"1041756656","1041756663","GB","GBR","UNITED KINGDOM" -"1041756664","1041756695","FR","FRA","FRANCE" -"1041756696","1041756703","GB","GBR","UNITED KINGDOM" -"1041756704","1041756895","FR","FRA","FRANCE" -"1041756896","1041756911","GB","GBR","UNITED KINGDOM" -"1041756912","1041756919","FR","FRA","FRANCE" -"1041756920","1041756927","GB","GBR","UNITED KINGDOM" -"1041756928","1041757023","FR","FRA","FRANCE" -"1041757024","1041757039","GB","GBR","UNITED KINGDOM" -"1041757040","1041757087","FR","FRA","FRANCE" -"1041757088","1041757095","GB","GBR","UNITED KINGDOM" -"1041757096","1041757111","FR","FRA","FRANCE" -"1041757112","1041757127","GB","GBR","UNITED KINGDOM" -"1041757128","1041757175","FR","FRA","FRANCE" -"1041757176","1041757179","GB","GBR","UNITED KINGDOM" -"1041757180","1041757503","FR","FRA","FRANCE" -"1041757504","1041757519","GB","GBR","UNITED KINGDOM" -"1041757520","1041757583","FR","FRA","FRANCE" -"1041757584","1041757591","GB","GBR","UNITED KINGDOM" -"1041757592","1041757639","FR","FRA","FRANCE" -"1041757640","1041757647","GB","GBR","UNITED KINGDOM" -"1041757648","1041757663","FR","FRA","FRANCE" -"1041757664","1041757671","GB","GBR","UNITED KINGDOM" -"1041757672","1041757687","FR","FRA","FRANCE" -"1041757688","1041757695","GB","GBR","UNITED KINGDOM" -"1041757696","1041758031","FR","FRA","FRANCE" -"1041758032","1041758039","GB","GBR","UNITED KINGDOM" -"1041758040","1041758095","FR","FRA","FRANCE" -"1041758096","1041758111","GB","GBR","UNITED KINGDOM" -"1041758112","1041758207","FR","FRA","FRANCE" -"1041758208","1041758239","GB","GBR","UNITED KINGDOM" -"1041758240","1041758255","FR","FRA","FRANCE" -"1041758256","1041758271","GB","GBR","UNITED KINGDOM" -"1041758272","1041758311","FR","FRA","FRANCE" -"1041758312","1041758343","GB","GBR","UNITED KINGDOM" -"1041758344","1041758351","FR","FRA","FRANCE" -"1041758352","1041758375","GB","GBR","UNITED KINGDOM" -"1041758376","1041758391","FR","FRA","FRANCE" -"1041758392","1041758415","GB","GBR","UNITED KINGDOM" -"1041758416","1041758423","FR","FRA","FRANCE" -"1041758424","1041758431","GB","GBR","UNITED KINGDOM" -"1041758432","1041758463","FR","FRA","FRANCE" -"1041758464","1041758495","GB","GBR","UNITED KINGDOM" -"1041758496","1041758511","FR","FRA","FRANCE" -"1041758512","1041758527","GB","GBR","UNITED KINGDOM" -"1041758528","1041758567","FR","FRA","FRANCE" -"1041758568","1041758599","GB","GBR","UNITED KINGDOM" -"1041758600","1041758607","FR","FRA","FRANCE" -"1041758608","1041758631","GB","GBR","UNITED KINGDOM" -"1041758632","1041758647","FR","FRA","FRANCE" -"1041758648","1041758671","GB","GBR","UNITED KINGDOM" -"1041758672","1041758679","FR","FRA","FRANCE" -"1041758680","1041758687","GB","GBR","UNITED KINGDOM" -"1041758688","1041758719","FR","FRA","FRANCE" -"1041758720","1041758975","GB","GBR","UNITED KINGDOM" -"1041758976","1041759103","FR","FRA","FRANCE" -"1041759104","1041760255","GB","GBR","UNITED KINGDOM" -"1041760256","1041768447","DE","DEU","GERMANY" -"1041768448","1041776639","NO","NOR","NORWAY" -"1041776640","1041784831","CZ","CZE","CZECH REPUBLIC" -"1041793024","1041825791","GB","GBR","UNITED KINGDOM" -"1041825792","1041842175","NL","NLD","NETHERLANDS" -"1041842176","1041891327","GB","GBR","UNITED KINGDOM" -"1041891328","1041921535","DE","DEU","GERMANY" -"1041921536","1041921727","US","USA","UNITED STATES" -"1041921728","1041945087","DE","DEU","GERMANY" -"1041945088","1041945151","AT","AUT","AUSTRIA" -"1041945152","1041958463","DE","DEU","GERMANY" -"1041958464","1041958527","DK","DNK","DENMARK" -"1041958528","1041959423","DE","DEU","GERMANY" -"1041959424","1041959679","US","USA","UNITED STATES" -"1041959680","1042022399","DE","DEU","GERMANY" -"1042022400","1042087935","PT","PRT","PORTUGAL" -"1042087936","1042120703","TR","TUR","TURKEY" -"1042120704","1042153471","PL","POL","POLAND" -"1042153472","1042284543","GB","GBR","UNITED KINGDOM" -"1042284544","1042288399","CH","CHE","SWITZERLAND" -"1042288400","1042288415","GB","GBR","UNITED KINGDOM" -"1042288416","1042292735","CH","CHE","SWITZERLAND" -"1042292736","1042293247","NL","NLD","NETHERLANDS" -"1042293248","1042293503","GB","GBR","UNITED KINGDOM" -"1042293504","1042293535","NL","NLD","NETHERLANDS" -"1042293536","1042293631","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1042293632","1042296063","GE","GEO","GEORGIA" -"1042296064","1042296191","CY","CYP","CYPRUS" -"1042296192","1042296575","GE","GEO","GEORGIA" -"1042296576","1042296831","BY","BLR","BELARUS" -"1042296832","1042297215","NL","NLD","NETHERLANDS" -"1042297216","1042297319","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1042297320","1042297327","GE","GEO","GEORGIA" -"1042297328","1042297599","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1042297600","1042297855","GB","GBR","UNITED KINGDOM" -"1042297856","1042298111","NL","NLD","NETHERLANDS" -"1042298112","1042298143","US","USA","UNITED STATES" -"1042298144","1042298175","NL","NLD","NETHERLANDS" -"1042298176","1042298239","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1042298240","1042298279","IQ","IRQ","IRAQ" -"1042298280","1042298287","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1042298288","1042298303","GB","GBR","UNITED KINGDOM" -"1042298304","1042298335","IQ","IRQ","IRAQ" -"1042298336","1042298351","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1042298352","1042298367","NL","NLD","NETHERLANDS" -"1042298368","1042298623","GB","GBR","UNITED KINGDOM" -"1042298624","1042298879","NL","NLD","NETHERLANDS" -"1042298880","1042299135","GB","GBR","UNITED KINGDOM" -"1042299136","1042299391","IQ","IRQ","IRAQ" -"1042299392","1042300159","NL","NLD","NETHERLANDS" -"1042300160","1042300175","BY","BLR","BELARUS" -"1042300176","1042300223","IQ","IRQ","IRAQ" -"1042300224","1042300255","AM","ARM","ARMENIA" -"1042300256","1042300287","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1042300288","1042300351","IT","ITA","ITALY" -"1042300352","1042300383","IQ","IRQ","IRAQ" -"1042300384","1042300415","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1042300416","1042300479","NL","NLD","NETHERLANDS" -"1042300480","1042300495","IQ","IRQ","IRAQ" -"1042300496","1042300543","GB","GBR","UNITED KINGDOM" -"1042300544","1042300639","IQ","IRQ","IRAQ" -"1042300640","1042300647","NL","NLD","NETHERLANDS" -"1042300648","1042300655","IQ","IRQ","IRAQ" -"1042300656","1042300671","LB","LBN","LEBANON" -"1042300672","1042300799","IQ","IRQ","IRAQ" -"1042300800","1042300863","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1042300864","1042300895","LB","LBN","LEBANON" -"1042300896","1042300903","MD","MDA","REPUBLIC OF MOLDOVA" -"1042300904","1042300911","UA","UKR","UKRAINE" -"1042300912","1042300919","NL","NLD","NETHERLANDS" -"1042300920","1042300927","UA","UKR","UKRAINE" -"1042300928","1042309119","RU","RUS","RUSSIAN FEDERATION" -"1042309120","1042317311","GB","GBR","UNITED KINGDOM" -"1042317312","1042350079","ES","ESP","SPAIN" -"1042350080","1042415615","RU","RUS","RUSSIAN FEDERATION" -"1042415616","1042546687","FR","FRA","FRANCE" -"1042546688","1042677759","ES","ESP","SPAIN" -"1042677760","1042743295","GR","GRC","GREECE" -"1042743296","1042808831","FR","FRA","FRANCE" -"1042808832","1042817023","DE","DEU","GERMANY" -"1042817024","1042825215","IE","IRL","IRELAND" -"1042825216","1042833407","CZ","CZE","CZECH REPUBLIC" -"1042833408","1042841599","GB","GBR","UNITED KINGDOM" -"1042841600","1042874367","AT","AUT","AUSTRIA" -"1042874368","1042875399","NL","NLD","NETHERLANDS" -"1042875400","1042875407","DE","DEU","GERMANY" -"1042875408","1042875903","NL","NLD","NETHERLANDS" -"1042875904","1042876159","GB","GBR","UNITED KINGDOM" -"1042876160","1042876415","NL","NLD","NETHERLANDS" -"1042876416","1042876479","GB","GBR","UNITED KINGDOM" -"1042876480","1042876671","NL","NLD","NETHERLANDS" -"1042876672","1042876927","DE","DEU","GERMANY" -"1042876928","1042880639","NL","NLD","NETHERLANDS" -"1042880640","1042880767","GB","GBR","UNITED KINGDOM" -"1042880768","1042882559","NL","NLD","NETHERLANDS" -"1042882560","1042882815","DE","DEU","GERMANY" -"1042882816","1042888703","NL","NLD","NETHERLANDS" -"1042888704","1042888959","GB","GBR","UNITED KINGDOM" -"1042888960","1042889215","NL","NLD","NETHERLANDS" -"1042889216","1042889471","US","USA","UNITED STATES" -"1042889472","1042889983","NL","NLD","NETHERLANDS" -"1042889984","1042890111","GB","GBR","UNITED KINGDOM" -"1042890112","1042890751","NL","NLD","NETHERLANDS" -"1042890752","1042890783","GB","GBR","UNITED KINGDOM" -"1042890784","1042890815","NL","NLD","NETHERLANDS" -"1042890816","1042890819","FR","FRA","FRANCE" -"1042890820","1042890847","NL","NLD","NETHERLANDS" -"1042890848","1042890879","GB","GBR","UNITED KINGDOM" -"1042890880","1042890944","NL","NLD","NETHERLANDS" -"1042890945","1042890950","GB","GBR","UNITED KINGDOM" -"1042890951","1042890959","NL","NLD","NETHERLANDS" -"1042890960","1042890991","GB","GBR","UNITED KINGDOM" -"1042890992","1042891775","NL","NLD","NETHERLANDS" -"1042891776","1042891839","GB","GBR","UNITED KINGDOM" -"1042891840","1042892015","NL","NLD","NETHERLANDS" -"1042892016","1042892031","DE","DEU","GERMANY" -"1042892032","1042892479","NL","NLD","NETHERLANDS" -"1042892480","1042892543","PL","POL","POLAND" -"1042892544","1042892879","NL","NLD","NETHERLANDS" -"1042892880","1042892887","DE","DEU","GERMANY" -"1042892888","1042892959","NL","NLD","NETHERLANDS" -"1042892960","1042892967","DE","DEU","GERMANY" -"1042892968","1042892975","PL","POL","POLAND" -"1042892976","1042892983","CH","CHE","SWITZERLAND" -"1042892984","1042893055","NL","NLD","NETHERLANDS" -"1042893056","1042893087","GB","GBR","UNITED KINGDOM" -"1042893088","1042893135","NL","NLD","NETHERLANDS" -"1042893136","1042893143","DE","DEU","GERMANY" -"1042893144","1042893183","NL","NLD","NETHERLANDS" -"1042893184","1042893311","GB","GBR","UNITED KINGDOM" -"1042893312","1042894079","NL","NLD","NETHERLANDS" -"1042894080","1042894143","DE","DEU","GERMANY" -"1042894144","1042894175","SE","SWE","SWEDEN" -"1042894176","1042894559","NL","NLD","NETHERLANDS" -"1042894560","1042894591","DE","DEU","GERMANY" -"1042894592","1042894655","FR","FRA","FRANCE" -"1042894656","1042894783","NL","NLD","NETHERLANDS" -"1042894784","1042894847","DE","DEU","GERMANY" -"1042894848","1042895231","NL","NLD","NETHERLANDS" -"1042895232","1042895359","DE","DEU","GERMANY" -"1042895360","1042895615","NL","NLD","NETHERLANDS" -"1042895616","1042895871","GB","GBR","UNITED KINGDOM" -"1042895872","1042900479","NL","NLD","NETHERLANDS" -"1042900480","1042900735","GB","GBR","UNITED KINGDOM" -"1042900736","1042939903","NL","NLD","NETHERLANDS" -"1042939904","1043070975","ES","ESP","SPAIN" -"1043070976","1043079167","CZ","CZE","CZECH REPUBLIC" -"1043079168","1043087359","DE","DEU","GERMANY" -"1043087360","1043095551","GB","GBR","UNITED KINGDOM" -"1043095552","1043103743","BG","BGR","BULGARIA" -"1043103744","1043120127","DK","DNK","DENMARK" -"1043120128","1043136511","FI","FIN","FINLAND" -"1043136512","1043202047","NL","NLD","NETHERLANDS" -"1043202048","1043333119","AT","AUT","AUSTRIA" -"1043333120","1043341311","CH","CHE","SWITZERLAND" -"1043341312","1043349503","IT","ITA","ITALY" -"1043349504","1043350587","DE","DEU","GERMANY" -"1043350588","1043350591","AT","AUT","AUSTRIA" -"1043350592","1043357695","DE","DEU","GERMANY" -"1043357696","1043365887","CH","CHE","SWITZERLAND" -"1043365888","1043398655","PT","PRT","PORTUGAL" -"1043398656","1043464191","GB","GBR","UNITED KINGDOM" -"1043464192","1043465215","NL","NLD","NETHERLANDS" -"1043465216","1043466503","GB","GBR","UNITED KINGDOM" -"1043466504","1043466511","NL","NLD","NETHERLANDS" -"1043466512","1043466687","GB","GBR","UNITED KINGDOM" -"1043466688","1043466711","NL","NLD","NETHERLANDS" -"1043466712","1043474703","GB","GBR","UNITED KINGDOM" -"1043474704","1043474719","DE","DEU","GERMANY" -"1043474720","1043480575","GB","GBR","UNITED KINGDOM" -"1043480576","1043488767","CH","CHE","SWITZERLAND" -"1043488768","1043496959","DE","DEU","GERMANY" -"1043496960","1043505151","GB","GBR","UNITED KINGDOM" -"1043505152","1043513343","NO","NOR","NORWAY" -"1043513344","1043529727","GB","GBR","UNITED KINGDOM" -"1043529728","1043562495","NL","NLD","NETHERLANDS" -"1043595264","1043600639","DE","DEU","GERMANY" -"1043600640","1043600895","FR","FRA","FRANCE" -"1043600896","1043607679","DE","DEU","GERMANY" -"1043607680","1043607711","FR","FRA","FRANCE" -"1043607712","1043609279","DE","DEU","GERMANY" -"1043609280","1043609343","AT","AUT","AUSTRIA" -"1043609344","1043609463","DE","DEU","GERMANY" -"1043609464","1043609471","IE","IRL","IRELAND" -"1043609472","1043619839","DE","DEU","GERMANY" -"1043619840","1043620095","IE","IRL","IRELAND" -"1043620096","1043621503","DE","DEU","GERMANY" -"1043621504","1043621567","GB","GBR","UNITED KINGDOM" -"1043621568","1043623215","DE","DEU","GERMANY" -"1043623216","1043623231","GB","GBR","UNITED KINGDOM" -"1043623232","1043633663","DE","DEU","GERMANY" -"1043633664","1043633919","FR","FRA","FRANCE" -"1043633920","1043693055","DE","DEU","GERMANY" -"1043693056","1043693127","GB","GBR","UNITED KINGDOM" -"1043693128","1043693183","DE","DEU","GERMANY" -"1043693184","1043693567","GB","GBR","UNITED KINGDOM" -"1043693568","1043718783","DE","DEU","GERMANY" -"1043718784","1043718815","FR","FRA","FRANCE" -"1043718816","1043857407","DE","DEU","GERMANY" -"1043857408","1043890183","GB","GBR","UNITED KINGDOM" -"1043890184","1043890191","NG","NGA","NIGERIA" -"1043890192","1043890495","GB","GBR","UNITED KINGDOM" -"1043890496","1043890591","NG","NGA","NIGERIA" -"1043890592","1043891775","GB","GBR","UNITED KINGDOM" -"1043891776","1043891839","NG","NGA","NIGERIA" -"1043891840","1043892223","GB","GBR","UNITED KINGDOM" -"1043892224","1043892239","MZ","MOZ","MOZAMBIQUE" -"1043892240","1043892255","GB","GBR","UNITED KINGDOM" -"1043892256","1043892287","MZ","MOZ","MOZAMBIQUE" -"1043892288","1043892479","GB","GBR","UNITED KINGDOM" -"1043892480","1043892735","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"1043892736","1043892991","MZ","MOZ","MOZAMBIQUE" -"1043892992","1043893567","GB","GBR","UNITED KINGDOM" -"1043893568","1043893583","NG","NGA","NIGERIA" -"1043893584","1043894559","GB","GBR","UNITED KINGDOM" -"1043894560","1043894591","NG","NGA","NIGERIA" -"1043894592","1043894751","GB","GBR","UNITED KINGDOM" -"1043894752","1043894783","NG","NGA","NIGERIA" -"1043894784","1043894847","GB","GBR","UNITED KINGDOM" -"1043894848","1043894879","NG","NGA","NIGERIA" -"1043894880","1043895039","GB","GBR","UNITED KINGDOM" -"1043895040","1043895167","NG","NGA","NIGERIA" -"1043895168","1043895983","GB","GBR","UNITED KINGDOM" -"1043895984","1043895999","AO","AGO","ANGOLA" -"1043896000","1043896063","GB","GBR","UNITED KINGDOM" -"1043896064","1043896319","NG","NGA","NIGERIA" -"1043896320","1043897343","GB","GBR","UNITED KINGDOM" -"1043897344","1043897855","KE","KEN","KENYA" -"1043897856","1043898623","GB","GBR","UNITED KINGDOM" -"1043898624","1043898751","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"1043898752","1043899391","GB","GBR","UNITED KINGDOM" -"1043899392","1043899647","CG","COG","CONGO" -"1043899648","1043910143","GB","GBR","UNITED KINGDOM" -"1043910144","1043910399","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"1043910400","1043912703","GB","GBR","UNITED KINGDOM" -"1043912704","1043913215","ZM","ZMB","ZAMBIA" -"1043913216","1043914751","GB","GBR","UNITED KINGDOM" -"1043914752","1043914879","NG","NGA","NIGERIA" -"1043914880","1043916799","GB","GBR","UNITED KINGDOM" -"1043916800","1043917055","NG","NGA","NIGERIA" -"1043917056","1043921919","GB","GBR","UNITED KINGDOM" -"1043921920","1043922943","IL","ISR","ISRAEL" -"1043922944","1043988479","ES","ESP","SPAIN" -"1043988480","1043988487","NL","NLD","NETHERLANDS" -"1043988488","1043988495","BE","BEL","BELGIUM" -"1043988496","1043988503","NL","NLD","NETHERLANDS" -"1043988504","1043988511","BE","BEL","BELGIUM" -"1043988512","1043988527","NL","NLD","NETHERLANDS" -"1043988528","1043988551","BE","BEL","BELGIUM" -"1043988552","1043988559","NL","NLD","NETHERLANDS" -"1043988560","1043988575","BE","BEL","BELGIUM" -"1043988576","1043988607","NL","NLD","NETHERLANDS" -"1043988608","1043988639","BE","BEL","BELGIUM" -"1043988640","1043988647","NL","NLD","NETHERLANDS" -"1043988648","1043988655","BE","BEL","BELGIUM" -"1043988656","1043988663","NL","NLD","NETHERLANDS" -"1043988664","1043988679","BE","BEL","BELGIUM" -"1043988680","1043988711","NL","NLD","NETHERLANDS" -"1043988712","1043988719","BE","BEL","BELGIUM" -"1043988720","1043988727","NL","NLD","NETHERLANDS" -"1043988728","1043988735","BE","BEL","BELGIUM" -"1043988736","1043988767","NL","NLD","NETHERLANDS" -"1043988768","1043988775","BE","BEL","BELGIUM" -"1043988776","1043988799","NL","NLD","NETHERLANDS" -"1043988800","1043988823","BE","BEL","BELGIUM" -"1043988824","1043988943","NL","NLD","NETHERLANDS" -"1043988944","1043989119","BE","BEL","BELGIUM" -"1043989120","1043989503","NL","NLD","NETHERLANDS" -"1043989504","1043989535","BE","BEL","BELGIUM" -"1043989536","1043989543","NL","NLD","NETHERLANDS" -"1043989544","1043989567","BE","BEL","BELGIUM" -"1043989568","1043989599","NL","NLD","NETHERLANDS" -"1043989600","1043989639","BE","BEL","BELGIUM" -"1043989640","1043989655","NL","NLD","NETHERLANDS" -"1043989656","1043989663","BE","BEL","BELGIUM" -"1043989664","1043989695","NL","NLD","NETHERLANDS" -"1043989696","1043989751","BE","BEL","BELGIUM" -"1043989752","1043990015","NL","NLD","NETHERLANDS" -"1043990016","1043990271","BE","BEL","BELGIUM" -"1043990272","1043990367","NL","NLD","NETHERLANDS" -"1043990368","1043990527","BE","BEL","BELGIUM" -"1043990528","1043990543","NL","NLD","NETHERLANDS" -"1043990544","1043990559","BE","BEL","BELGIUM" -"1043990560","1043990591","NL","NLD","NETHERLANDS" -"1043990592","1043990615","BE","BEL","BELGIUM" -"1043990616","1043990623","NL","NLD","NETHERLANDS" -"1043990624","1043990631","BE","BEL","BELGIUM" -"1043990632","1043990783","NL","NLD","NETHERLANDS" -"1043990784","1043991039","BE","BEL","BELGIUM" -"1043991040","1043991063","NL","NLD","NETHERLANDS" -"1043991064","1043991071","BE","BEL","BELGIUM" -"1043991072","1043991231","NL","NLD","NETHERLANDS" -"1043991232","1043992063","BE","BEL","BELGIUM" -"1043992064","1043992319","NL","NLD","NETHERLANDS" -"1043992320","1043992575","BE","BEL","BELGIUM" -"1043992576","1043992735","NL","NLD","NETHERLANDS" -"1043992736","1043992767","BE","BEL","BELGIUM" -"1043992768","1043992831","NL","NLD","NETHERLANDS" -"1043992832","1043993599","BE","BEL","BELGIUM" -"1043993600","1043993855","NL","NLD","NETHERLANDS" -"1043993856","1043994643","BE","BEL","BELGIUM" -"1043994644","1043994651","NL","NLD","NETHERLANDS" -"1043994652","1043994655","BE","BEL","BELGIUM" -"1043994656","1043994699","NL","NLD","NETHERLANDS" -"1043994700","1043994703","BE","BEL","BELGIUM" -"1043994704","1043994707","NL","NLD","NETHERLANDS" -"1043994708","1043994711","BE","BEL","BELGIUM" -"1043994712","1043994747","NL","NLD","NETHERLANDS" -"1043994748","1043994755","BE","BEL","BELGIUM" -"1043994756","1043994759","NL","NLD","NETHERLANDS" -"1043994760","1043994791","BE","BEL","BELGIUM" -"1043994792","1043994795","NL","NLD","NETHERLANDS" -"1043994796","1043994811","BE","BEL","BELGIUM" -"1043994812","1043994815","NL","NLD","NETHERLANDS" -"1043994816","1043994851","BE","BEL","BELGIUM" -"1043994852","1043994855","NL","NLD","NETHERLANDS" -"1043994856","1043994863","BE","BEL","BELGIUM" -"1043994864","1043994867","NL","NLD","NETHERLANDS" -"1043994868","1043994871","BE","BEL","BELGIUM" -"1043994872","1043994875","NL","NLD","NETHERLANDS" -"1043994876","1043994879","BE","BEL","BELGIUM" -"1043994880","1043994887","NL","NLD","NETHERLANDS" -"1043994888","1043994907","BE","BEL","BELGIUM" -"1043994908","1043994911","NL","NLD","NETHERLANDS" -"1043994912","1043994931","BE","BEL","BELGIUM" -"1043994932","1043994935","NL","NLD","NETHERLANDS" -"1043994936","1043994975","BE","BEL","BELGIUM" -"1043994976","1043994979","NL","NLD","NETHERLANDS" -"1043994980","1043994987","BE","BEL","BELGIUM" -"1043994988","1043994991","NL","NLD","NETHERLANDS" -"1043994992","1043994995","BE","BEL","BELGIUM" -"1043994996","1043995003","NL","NLD","NETHERLANDS" -"1043995004","1043995023","BE","BEL","BELGIUM" -"1043995024","1043995027","NL","NLD","NETHERLANDS" -"1043995028","1043995035","BE","BEL","BELGIUM" -"1043995036","1043995051","NL","NLD","NETHERLANDS" -"1043995052","1043995059","BE","BEL","BELGIUM" -"1043995060","1043995067","NL","NLD","NETHERLANDS" -"1043995068","1043995103","BE","BEL","BELGIUM" -"1043995104","1043995115","NL","NLD","NETHERLANDS" -"1043995116","1043995127","BE","BEL","BELGIUM" -"1043995128","1043995131","NL","NLD","NETHERLANDS" -"1043995132","1043995135","BE","BEL","BELGIUM" -"1043995136","1043995139","NL","NLD","NETHERLANDS" -"1043995140","1043995151","BE","BEL","BELGIUM" -"1043995152","1043995155","NL","NLD","NETHERLANDS" -"1043995156","1043995171","BE","BEL","BELGIUM" -"1043995172","1043995175","NL","NLD","NETHERLANDS" -"1043995176","1043995183","BE","BEL","BELGIUM" -"1043995184","1043995187","NL","NLD","NETHERLANDS" -"1043995188","1043995215","BE","BEL","BELGIUM" -"1043995216","1043995223","NL","NLD","NETHERLANDS" -"1043995224","1043995235","BE","BEL","BELGIUM" -"1043995236","1043995239","NL","NLD","NETHERLANDS" -"1043995240","1043995263","BE","BEL","BELGIUM" -"1043995264","1043995267","NL","NLD","NETHERLANDS" -"1043995268","1043995279","BE","BEL","BELGIUM" -"1043995280","1043995283","NL","NLD","NETHERLANDS" -"1043995284","1043995291","BE","BEL","BELGIUM" -"1043995292","1043995295","NL","NLD","NETHERLANDS" -"1043995296","1043995303","BE","BEL","BELGIUM" -"1043995304","1043995311","NL","NLD","NETHERLANDS" -"1043995312","1043995663","BE","BEL","BELGIUM" -"1043995664","1043995687","NL","NLD","NETHERLANDS" -"1043995688","1043995695","BE","BEL","BELGIUM" -"1043995696","1043995703","NL","NLD","NETHERLANDS" -"1043995704","1043995719","BE","BEL","BELGIUM" -"1043995720","1043995735","NL","NLD","NETHERLANDS" -"1043995736","1043995743","BE","BEL","BELGIUM" -"1043995744","1043995759","NL","NLD","NETHERLANDS" -"1043995760","1043995767","BE","BEL","BELGIUM" -"1043995768","1043995783","NL","NLD","NETHERLANDS" -"1043995784","1043995807","BE","BEL","BELGIUM" -"1043995808","1043995831","NL","NLD","NETHERLANDS" -"1043995832","1043995863","BE","BEL","BELGIUM" -"1043995864","1043995887","NL","NLD","NETHERLANDS" -"1043995888","1043995903","BE","BEL","BELGIUM" -"1043995904","1043995935","NL","NLD","NETHERLANDS" -"1043995936","1043995943","BE","BEL","BELGIUM" -"1043995944","1043995951","NL","NLD","NETHERLANDS" -"1043995952","1043995975","BE","BEL","BELGIUM" -"1043995976","1043995999","NL","NLD","NETHERLANDS" -"1043996000","1043996015","BE","BEL","BELGIUM" -"1043996016","1043996023","NL","NLD","NETHERLANDS" -"1043996024","1043996095","BE","BEL","BELGIUM" -"1043996096","1043996103","NL","NLD","NETHERLANDS" -"1043996104","1043996111","BE","BEL","BELGIUM" -"1043996112","1043996119","NL","NLD","NETHERLANDS" -"1043996120","1043996143","BE","BEL","BELGIUM" -"1043996144","1043996151","NL","NLD","NETHERLANDS" -"1043996152","1043996159","BE","BEL","BELGIUM" -"1043996160","1043996691","NL","NLD","NETHERLANDS" -"1043996692","1043996703","BE","BEL","BELGIUM" -"1043996704","1043996823","NL","NLD","NETHERLANDS" -"1043996824","1043996927","BE","BEL","BELGIUM" -"1043996928","1043997375","NL","NLD","NETHERLANDS" -"1043997376","1043997463","BE","BEL","BELGIUM" -"1043997464","1043997471","NL","NLD","NETHERLANDS" -"1043997472","1043997519","BE","BEL","BELGIUM" -"1043997520","1043997551","NL","NLD","NETHERLANDS" -"1043997552","1043997559","BE","BEL","BELGIUM" -"1043997560","1043997583","NL","NLD","NETHERLANDS" -"1043997584","1043997615","BE","BEL","BELGIUM" -"1043997616","1043997631","NL","NLD","NETHERLANDS" -"1043997632","1043997639","BE","BEL","BELGIUM" -"1043997640","1043997663","NL","NLD","NETHERLANDS" -"1043997664","1043997687","BE","BEL","BELGIUM" -"1043997688","1043997927","NL","NLD","NETHERLANDS" -"1043997928","1043998079","BE","BEL","BELGIUM" -"1043998080","1043998143","NL","NLD","NETHERLANDS" -"1043998144","1043998151","BE","BEL","BELGIUM" -"1043998152","1043998159","NL","NLD","NETHERLANDS" -"1043998160","1043998167","BE","BEL","BELGIUM" -"1043998168","1043998191","NL","NLD","NETHERLANDS" -"1043998192","1043998195","BE","BEL","BELGIUM" -"1043998196","1043998198","NL","NLD","NETHERLANDS" -"1043998199","1043998199","BE","BEL","BELGIUM" -"1043998200","1043998207","NL","NLD","NETHERLANDS" -"1043998208","1043998463","BE","BEL","BELGIUM" -"1043998464","1043998719","NL","NLD","NETHERLANDS" -"1043998720","1043998735","BE","BEL","BELGIUM" -"1043998736","1043998751","NL","NLD","NETHERLANDS" -"1043998752","1043998759","BE","BEL","BELGIUM" -"1043998760","1043998783","NL","NLD","NETHERLANDS" -"1043998784","1043998799","BE","BEL","BELGIUM" -"1043998800","1043998847","NL","NLD","NETHERLANDS" -"1043998848","1043998863","BE","BEL","BELGIUM" -"1043998864","1043998879","NL","NLD","NETHERLANDS" -"1043998880","1043998887","BE","BEL","BELGIUM" -"1043998888","1043998911","NL","NLD","NETHERLANDS" -"1043998912","1043998975","BE","BEL","BELGIUM" -"1043998976","1043998983","NL","NLD","NETHERLANDS" -"1043998984","1043999007","BE","BEL","BELGIUM" -"1043999008","1043999055","NL","NLD","NETHERLANDS" -"1043999056","1043999071","BE","BEL","BELGIUM" -"1043999072","1043999103","NL","NLD","NETHERLANDS" -"1043999104","1043999119","BE","BEL","BELGIUM" -"1043999120","1043999143","NL","NLD","NETHERLANDS" -"1043999144","1043999151","BE","BEL","BELGIUM" -"1043999152","1043999159","NL","NLD","NETHERLANDS" -"1043999160","1043999207","BE","BEL","BELGIUM" -"1043999208","1043999215","NL","NLD","NETHERLANDS" -"1043999216","1043999223","BE","BEL","BELGIUM" -"1043999224","1043999487","NL","NLD","NETHERLANDS" -"1043999488","1043999751","BE","BEL","BELGIUM" -"1043999752","1043999759","NL","NLD","NETHERLANDS" -"1043999760","1043999775","BE","BEL","BELGIUM" -"1043999776","1043999783","NL","NLD","NETHERLANDS" -"1043999784","1043999791","BE","BEL","BELGIUM" -"1043999792","1043999823","NL","NLD","NETHERLANDS" -"1043999824","1043999831","BE","BEL","BELGIUM" -"1043999832","1043999999","NL","NLD","NETHERLANDS" -"1044000000","1044000031","BE","BEL","BELGIUM" -"1044000032","1044000063","NL","NLD","NETHERLANDS" -"1044000064","1044000095","BE","BEL","BELGIUM" -"1044000096","1044000767","NL","NLD","NETHERLANDS" -"1044000768","1044000831","BE","BEL","BELGIUM" -"1044000832","1044000895","NL","NLD","NETHERLANDS" -"1044000896","1044000975","BE","BEL","BELGIUM" -"1044000976","1044000983","NL","NLD","NETHERLANDS" -"1044000984","1044000999","BE","BEL","BELGIUM" -"1044001000","1044001023","NL","NLD","NETHERLANDS" -"1044001024","1044001279","BE","BEL","BELGIUM" -"1044001280","1044001663","NL","NLD","NETHERLANDS" -"1044001664","1044001791","BE","BEL","BELGIUM" -"1044001792","1044001823","NL","NLD","NETHERLANDS" -"1044001824","1044001839","BE","BEL","BELGIUM" -"1044001840","1044001847","NL","NLD","NETHERLANDS" -"1044001848","1044001855","BE","BEL","BELGIUM" -"1044001856","1044001887","NL","NLD","NETHERLANDS" -"1044001888","1044001895","BE","BEL","BELGIUM" -"1044001896","1044001927","NL","NLD","NETHERLANDS" -"1044001928","1044001935","BE","BEL","BELGIUM" -"1044001936","1044001983","NL","NLD","NETHERLANDS" -"1044001984","1044002023","BE","BEL","BELGIUM" -"1044002024","1044002087","NL","NLD","NETHERLANDS" -"1044002088","1044002095","BE","BEL","BELGIUM" -"1044002096","1044002103","NL","NLD","NETHERLANDS" -"1044002104","1044002135","BE","BEL","BELGIUM" -"1044002136","1044002175","NL","NLD","NETHERLANDS" -"1044002176","1044002239","BE","BEL","BELGIUM" -"1044002240","1044002831","NL","NLD","NETHERLANDS" -"1044002832","1044002855","BE","BEL","BELGIUM" -"1044002856","1044002859","NL","NLD","NETHERLANDS" -"1044002860","1044002879","BE","BEL","BELGIUM" -"1044002880","1044002883","NL","NLD","NETHERLANDS" -"1044002884","1044002891","BE","BEL","BELGIUM" -"1044002892","1044002899","NL","NLD","NETHERLANDS" -"1044002900","1044002911","BE","BEL","BELGIUM" -"1044002912","1044002919","NL","NLD","NETHERLANDS" -"1044002920","1044002931","BE","BEL","BELGIUM" -"1044002932","1044002947","NL","NLD","NETHERLANDS" -"1044002948","1044002959","BE","BEL","BELGIUM" -"1044002960","1044002975","NL","NLD","NETHERLANDS" -"1044002976","1044002983","BE","BEL","BELGIUM" -"1044002984","1044002987","NL","NLD","NETHERLANDS" -"1044002988","1044002999","BE","BEL","BELGIUM" -"1044003000","1044003003","NL","NLD","NETHERLANDS" -"1044003004","1044003019","BE","BEL","BELGIUM" -"1044003020","1044003023","NL","NLD","NETHERLANDS" -"1044003024","1044003027","BE","BEL","BELGIUM" -"1044003028","1044003031","NL","NLD","NETHERLANDS" -"1044003032","1044003071","BE","BEL","BELGIUM" -"1044003072","1044003079","NL","NLD","NETHERLANDS" -"1044003080","1044003099","BE","BEL","BELGIUM" -"1044003100","1044003103","NL","NLD","NETHERLANDS" -"1044003104","1044003115","BE","BEL","BELGIUM" -"1044003116","1044003119","NL","NLD","NETHERLANDS" -"1044003120","1044003123","BE","BEL","BELGIUM" -"1044003124","1044003131","NL","NLD","NETHERLANDS" -"1044003132","1044003147","BE","BEL","BELGIUM" -"1044003148","1044003151","NL","NLD","NETHERLANDS" -"1044003152","1044003155","BE","BEL","BELGIUM" -"1044003156","1044003159","NL","NLD","NETHERLANDS" -"1044003160","1044003167","BE","BEL","BELGIUM" -"1044003168","1044003171","NL","NLD","NETHERLANDS" -"1044003172","1044003175","BE","BEL","BELGIUM" -"1044003176","1044003179","NL","NLD","NETHERLANDS" -"1044003180","1044003183","BE","BEL","BELGIUM" -"1044003184","1044003187","NL","NLD","NETHERLANDS" -"1044003188","1044003211","BE","BEL","BELGIUM" -"1044003212","1044003215","NL","NLD","NETHERLANDS" -"1044003216","1044003223","BE","BEL","BELGIUM" -"1044003224","1044003227","NL","NLD","NETHERLANDS" -"1044003228","1044003235","BE","BEL","BELGIUM" -"1044003236","1044003251","NL","NLD","NETHERLANDS" -"1044003252","1044003279","BE","BEL","BELGIUM" -"1044003280","1044003283","NL","NLD","NETHERLANDS" -"1044003284","1044003291","BE","BEL","BELGIUM" -"1044003292","1044003295","NL","NLD","NETHERLANDS" -"1044003296","1044003299","BE","BEL","BELGIUM" -"1044003300","1044003303","NL","NLD","NETHERLANDS" -"1044003304","1044003311","BE","BEL","BELGIUM" -"1044003312","1044003315","NL","NLD","NETHERLANDS" -"1044003316","1044003319","BE","BEL","BELGIUM" -"1044003320","1044003323","NL","NLD","NETHERLANDS" -"1044003324","1044003331","BE","BEL","BELGIUM" -"1044003332","1044003343","NL","NLD","NETHERLANDS" -"1044003344","1044003359","BE","BEL","BELGIUM" -"1044003360","1044003362","NL","NLD","NETHERLANDS" -"1044003363","1044003363","BE","BEL","BELGIUM" -"1044003364","1044003371","NL","NLD","NETHERLANDS" -"1044003372","1044003379","BE","BEL","BELGIUM" -"1044003380","1044003383","NL","NLD","NETHERLANDS" -"1044003384","1044003423","BE","BEL","BELGIUM" -"1044003424","1044003427","NL","NLD","NETHERLANDS" -"1044003428","1044003459","BE","BEL","BELGIUM" -"1044003460","1044003463","NL","NLD","NETHERLANDS" -"1044003464","1044003467","BE","BEL","BELGIUM" -"1044003468","1044003471","NL","NLD","NETHERLANDS" -"1044003472","1044003483","BE","BEL","BELGIUM" -"1044003484","1044003487","NL","NLD","NETHERLANDS" -"1044003488","1044003511","BE","BEL","BELGIUM" -"1044003512","1044003527","NL","NLD","NETHERLANDS" -"1044003528","1044003539","BE","BEL","BELGIUM" -"1044003540","1044003543","NL","NLD","NETHERLANDS" -"1044003544","1044003551","BE","BEL","BELGIUM" -"1044003552","1044003563","NL","NLD","NETHERLANDS" -"1044003564","1044003575","BE","BEL","BELGIUM" -"1044003576","1044003591","NL","NLD","NETHERLANDS" -"1044003592","1044003595","BE","BEL","BELGIUM" -"1044003596","1044003599","NL","NLD","NETHERLANDS" -"1044003600","1044003615","BE","BEL","BELGIUM" -"1044003616","1044003631","NL","NLD","NETHERLANDS" -"1044003632","1044003635","BE","BEL","BELGIUM" -"1044003636","1044003639","NL","NLD","NETHERLANDS" -"1044003640","1044003647","BE","BEL","BELGIUM" -"1044003648","1044003651","NL","NLD","NETHERLANDS" -"1044003652","1044003655","BE","BEL","BELGIUM" -"1044003656","1044003659","NL","NLD","NETHERLANDS" -"1044003660","1044003663","BE","BEL","BELGIUM" -"1044003664","1044003667","NL","NLD","NETHERLANDS" -"1044003668","1044003675","BE","BEL","BELGIUM" -"1044003676","1044003683","NL","NLD","NETHERLANDS" -"1044003684","1044003687","BE","BEL","BELGIUM" -"1044003688","1044003691","NL","NLD","NETHERLANDS" -"1044003692","1044003695","BE","BEL","BELGIUM" -"1044003696","1044003699","NL","NLD","NETHERLANDS" -"1044003700","1044003723","BE","BEL","BELGIUM" -"1044003724","1044003727","NL","NLD","NETHERLANDS" -"1044003728","1044003731","BE","BEL","BELGIUM" -"1044003732","1044003751","NL","NLD","NETHERLANDS" -"1044003752","1044003755","BE","BEL","BELGIUM" -"1044003756","1044003775","NL","NLD","NETHERLANDS" -"1044003776","1044003783","BE","BEL","BELGIUM" -"1044003784","1044003787","NL","NLD","NETHERLANDS" -"1044003788","1044003795","BE","BEL","BELGIUM" -"1044003796","1044003799","NL","NLD","NETHERLANDS" -"1044003800","1044003807","BE","BEL","BELGIUM" -"1044003808","1044003819","NL","NLD","NETHERLANDS" -"1044003820","1044003823","BE","BEL","BELGIUM" -"1044003824","1044003831","NL","NLD","NETHERLANDS" -"1044003832","1044003855","BE","BEL","BELGIUM" -"1044003856","1044003871","NL","NLD","NETHERLANDS" -"1044003872","1044003879","BE","BEL","BELGIUM" -"1044003880","1044003895","NL","NLD","NETHERLANDS" -"1044003896","1044003911","BE","BEL","BELGIUM" -"1044003912","1044003919","NL","NLD","NETHERLANDS" -"1044003920","1044003927","BE","BEL","BELGIUM" -"1044003928","1044003959","NL","NLD","NETHERLANDS" -"1044003960","1044003967","BE","BEL","BELGIUM" -"1044003968","1044003975","NL","NLD","NETHERLANDS" -"1044003976","1044003983","BE","BEL","BELGIUM" -"1044003984","1044003991","NL","NLD","NETHERLANDS" -"1044003992","1044004007","BE","BEL","BELGIUM" -"1044004008","1044004079","NL","NLD","NETHERLANDS" -"1044004080","1044004095","BE","BEL","BELGIUM" -"1044004096","1044004303","NL","NLD","NETHERLANDS" -"1044004304","1044004351","BE","BEL","BELGIUM" -"1044004352","1044004879","NL","NLD","NETHERLANDS" -"1044004880","1044004903","BE","BEL","BELGIUM" -"1044004904","1044004911","NL","NLD","NETHERLANDS" -"1044004912","1044004927","BE","BEL","BELGIUM" -"1044004928","1044005503","NL","NLD","NETHERLANDS" -"1044005504","1044005631","BE","BEL","BELGIUM" -"1044005632","1044005647","NL","NLD","NETHERLANDS" -"1044005648","1044005663","BE","BEL","BELGIUM" -"1044005664","1044005695","NL","NLD","NETHERLANDS" -"1044005696","1044005799","BE","BEL","BELGIUM" -"1044005800","1044005807","NL","NLD","NETHERLANDS" -"1044005808","1044005823","BE","BEL","BELGIUM" -"1044005824","1044005847","NL","NLD","NETHERLANDS" -"1044005848","1044005887","BE","BEL","BELGIUM" -"1044005888","1044006143","NL","NLD","NETHERLANDS" -"1044006144","1044006655","BE","BEL","BELGIUM" -"1044006656","1044006927","NL","NLD","NETHERLANDS" -"1044006928","1044006935","BE","BEL","BELGIUM" -"1044006936","1044006943","NL","NLD","NETHERLANDS" -"1044006944","1044007007","BE","BEL","BELGIUM" -"1044007008","1044007023","NL","NLD","NETHERLANDS" -"1044007024","1044007031","BE","BEL","BELGIUM" -"1044007032","1044007039","NL","NLD","NETHERLANDS" -"1044007040","1044007047","BE","BEL","BELGIUM" -"1044007048","1044007055","NL","NLD","NETHERLANDS" -"1044007056","1044007063","BE","BEL","BELGIUM" -"1044007064","1044007087","NL","NLD","NETHERLANDS" -"1044007088","1044007119","BE","BEL","BELGIUM" -"1044007120","1044007135","NL","NLD","NETHERLANDS" -"1044007136","1044007167","BE","BEL","BELGIUM" -"1044007168","1044007967","NL","NLD","NETHERLANDS" -"1044007968","1044007983","BE","BEL","BELGIUM" -"1044007984","1044007991","NL","NLD","NETHERLANDS" -"1044007992","1044008007","BE","BEL","BELGIUM" -"1044008008","1044008023","NL","NLD","NETHERLANDS" -"1044008024","1044008031","BE","BEL","BELGIUM" -"1044008032","1044008039","NL","NLD","NETHERLANDS" -"1044008040","1044008047","BE","BEL","BELGIUM" -"1044008048","1044008063","NL","NLD","NETHERLANDS" -"1044008064","1044008095","BE","BEL","BELGIUM" -"1044008096","1044008127","NL","NLD","NETHERLANDS" -"1044008128","1044008183","BE","BEL","BELGIUM" -"1044008184","1044008223","NL","NLD","NETHERLANDS" -"1044008224","1044008239","BE","BEL","BELGIUM" -"1044008240","1044008255","NL","NLD","NETHERLANDS" -"1044008256","1044008279","BE","BEL","BELGIUM" -"1044008280","1044008287","NL","NLD","NETHERLANDS" -"1044008288","1044008319","BE","BEL","BELGIUM" -"1044008320","1044008735","NL","NLD","NETHERLANDS" -"1044008736","1044009055","BE","BEL","BELGIUM" -"1044009056","1044009087","NL","NLD","NETHERLANDS" -"1044009088","1044009183","BE","BEL","BELGIUM" -"1044009184","1044009199","NL","NLD","NETHERLANDS" -"1044009200","1044009215","BE","BEL","BELGIUM" -"1044009216","1044009471","NL","NLD","NETHERLANDS" -"1044009472","1044009487","BE","BEL","BELGIUM" -"1044009488","1044009503","NL","NLD","NETHERLANDS" -"1044009504","1044009535","BE","BEL","BELGIUM" -"1044009536","1044009583","NL","NLD","NETHERLANDS" -"1044009584","1044009599","BE","BEL","BELGIUM" -"1044009600","1044009983","NL","NLD","NETHERLANDS" -"1044009984","1044011007","BE","BEL","BELGIUM" -"1044011008","1044011039","NL","NLD","NETHERLANDS" -"1044011040","1044011043","BE","BEL","BELGIUM" -"1044011044","1044011223","NL","NLD","NETHERLANDS" -"1044011224","1044011227","BE","BEL","BELGIUM" -"1044011228","1044011635","NL","NLD","NETHERLANDS" -"1044011636","1044011639","BE","BEL","BELGIUM" -"1044011640","1044011703","NL","NLD","NETHERLANDS" -"1044011704","1044011707","BE","BEL","BELGIUM" -"1044011708","1044011731","NL","NLD","NETHERLANDS" -"1044011732","1044011735","BE","BEL","BELGIUM" -"1044011736","1044011763","NL","NLD","NETHERLANDS" -"1044011764","1044011767","BE","BEL","BELGIUM" -"1044011768","1044011771","NL","NLD","NETHERLANDS" -"1044011772","1044011775","BE","BEL","BELGIUM" -"1044011776","1044011791","NL","NLD","NETHERLANDS" -"1044011792","1044011795","BE","BEL","BELGIUM" -"1044011796","1044011971","NL","NLD","NETHERLANDS" -"1044011972","1044012031","BE","BEL","BELGIUM" -"1044012032","1044012039","NL","NLD","NETHERLANDS" -"1044012040","1044012047","BE","BEL","BELGIUM" -"1044012048","1044012087","NL","NLD","NETHERLANDS" -"1044012088","1044012095","BE","BEL","BELGIUM" -"1044012096","1044012103","NL","NLD","NETHERLANDS" -"1044012104","1044012111","BE","BEL","BELGIUM" -"1044012112","1044012119","NL","NLD","NETHERLANDS" -"1044012120","1044012135","BE","BEL","BELGIUM" -"1044012136","1044012143","NL","NLD","NETHERLANDS" -"1044012144","1044012151","BE","BEL","BELGIUM" -"1044012152","1044012159","NL","NLD","NETHERLANDS" -"1044012160","1044012167","BE","BEL","BELGIUM" -"1044012168","1044012191","NL","NLD","NETHERLANDS" -"1044012192","1044012207","BE","BEL","BELGIUM" -"1044012208","1044012239","NL","NLD","NETHERLANDS" -"1044012240","1044012255","BE","BEL","BELGIUM" -"1044012256","1044013059","NL","NLD","NETHERLANDS" -"1044013060","1044013111","BE","BEL","BELGIUM" -"1044013112","1044013119","NL","NLD","NETHERLANDS" -"1044013120","1044013135","BE","BEL","BELGIUM" -"1044013136","1044013143","NL","NLD","NETHERLANDS" -"1044013144","1044013247","BE","BEL","BELGIUM" -"1044013248","1044013263","NL","NLD","NETHERLANDS" -"1044013264","1044013271","BE","BEL","BELGIUM" -"1044013272","1044013279","NL","NLD","NETHERLANDS" -"1044013280","1044013375","BE","BEL","BELGIUM" -"1044013376","1044013439","NL","NLD","NETHERLANDS" -"1044013440","1044013575","BE","BEL","BELGIUM" -"1044013576","1044013583","NL","NLD","NETHERLANDS" -"1044013584","1044013615","BE","BEL","BELGIUM" -"1044013616","1044013623","NL","NLD","NETHERLANDS" -"1044013624","1044014111","BE","BEL","BELGIUM" -"1044014112","1044014119","NL","NLD","NETHERLANDS" -"1044014120","1044017167","BE","BEL","BELGIUM" -"1044017168","1044017187","NL","NLD","NETHERLANDS" -"1044017188","1044017191","BE","BEL","BELGIUM" -"1044017192","1044017199","NL","NLD","NETHERLANDS" -"1044017200","1044017215","BE","BEL","BELGIUM" -"1044017216","1044017247","NL","NLD","NETHERLANDS" -"1044017248","1044017359","BE","BEL","BELGIUM" -"1044017360","1044017383","NL","NLD","NETHERLANDS" -"1044017384","1044017399","BE","BEL","BELGIUM" -"1044017400","1044017407","NL","NLD","NETHERLANDS" -"1044017408","1044017663","BE","BEL","BELGIUM" -"1044017664","1044017983","NL","NLD","NETHERLANDS" -"1044017984","1044018039","BE","BEL","BELGIUM" -"1044018040","1044018047","NL","NLD","NETHERLANDS" -"1044018048","1044019279","BE","BEL","BELGIUM" -"1044019280","1044019283","NL","NLD","NETHERLANDS" -"1044019284","1044019291","BE","BEL","BELGIUM" -"1044019292","1044019295","NL","NLD","NETHERLANDS" -"1044019296","1044019315","BE","BEL","BELGIUM" -"1044019316","1044019323","NL","NLD","NETHERLANDS" -"1044019324","1044019347","BE","BEL","BELGIUM" -"1044019348","1044019351","NL","NLD","NETHERLANDS" -"1044019352","1044019383","BE","BEL","BELGIUM" -"1044019384","1044019399","NL","NLD","NETHERLANDS" -"1044019400","1044019403","BE","BEL","BELGIUM" -"1044019404","1044019407","NL","NLD","NETHERLANDS" -"1044019408","1044019415","BE","BEL","BELGIUM" -"1044019416","1044019439","NL","NLD","NETHERLANDS" -"1044019440","1044019443","BE","BEL","BELGIUM" -"1044019444","1044019471","NL","NLD","NETHERLANDS" -"1044019472","1044019491","BE","BEL","BELGIUM" -"1044019492","1044019495","NL","NLD","NETHERLANDS" -"1044019496","1044019503","BE","BEL","BELGIUM" -"1044019504","1044019507","NL","NLD","NETHERLANDS" -"1044019508","1044019695","BE","BEL","BELGIUM" -"1044019696","1044019699","NL","NLD","NETHERLANDS" -"1044019700","1044019819","BE","BEL","BELGIUM" -"1044019820","1044019823","NL","NLD","NETHERLANDS" -"1044019824","1044019995","BE","BEL","BELGIUM" -"1044019996","1044019999","NL","NLD","NETHERLANDS" -"1044020000","1044020147","BE","BEL","BELGIUM" -"1044020148","1044020151","NL","NLD","NETHERLANDS" -"1044020152","1044020215","BE","BEL","BELGIUM" -"1044020216","1044020219","NL","NLD","NETHERLANDS" -"1044020220","1044020255","BE","BEL","BELGIUM" -"1044020256","1044020263","NL","NLD","NETHERLANDS" -"1044020264","1044020303","BE","BEL","BELGIUM" -"1044020304","1044020319","NL","NLD","NETHERLANDS" -"1044020320","1044020511","BE","BEL","BELGIUM" -"1044020512","1044020551","NL","NLD","NETHERLANDS" -"1044020552","1044020567","BE","BEL","BELGIUM" -"1044020568","1044020591","NL","NLD","NETHERLANDS" -"1044020592","1044020607","BE","BEL","BELGIUM" -"1044020608","1044020671","NL","NLD","NETHERLANDS" -"1044020672","1044020735","BE","BEL","BELGIUM" -"1044020736","1044021759","NL","NLD","NETHERLANDS" -"1044021760","1044021887","BE","BEL","BELGIUM" -"1044021888","1044022319","NL","NLD","NETHERLANDS" -"1044022320","1044022335","BE","BEL","BELGIUM" -"1044022336","1044022351","NL","NLD","NETHERLANDS" -"1044022352","1044022415","BE","BEL","BELGIUM" -"1044022416","1044023295","NL","NLD","NETHERLANDS" -"1044023296","1044023311","BE","BEL","BELGIUM" -"1044023312","1044023319","NL","NLD","NETHERLANDS" -"1044023320","1044023343","BE","BEL","BELGIUM" -"1044023344","1044023359","NL","NLD","NETHERLANDS" -"1044023360","1044023407","BE","BEL","BELGIUM" -"1044023408","1044023439","NL","NLD","NETHERLANDS" -"1044023440","1044024319","BE","BEL","BELGIUM" -"1044024320","1044024447","NL","NLD","NETHERLANDS" -"1044024448","1044024575","BE","BEL","BELGIUM" -"1044024576","1044024835","NL","NLD","NETHERLANDS" -"1044024836","1044024843","BE","BEL","BELGIUM" -"1044024844","1044024847","NL","NLD","NETHERLANDS" -"1044024848","1044024851","BE","BEL","BELGIUM" -"1044024852","1044024855","NL","NLD","NETHERLANDS" -"1044024856","1044024863","BE","BEL","BELGIUM" -"1044024864","1044024867","NL","NLD","NETHERLANDS" -"1044024868","1044024875","BE","BEL","BELGIUM" -"1044024876","1044024883","NL","NLD","NETHERLANDS" -"1044024884","1044024887","BE","BEL","BELGIUM" -"1044024888","1044024891","NL","NLD","NETHERLANDS" -"1044024892","1044024959","BE","BEL","BELGIUM" -"1044024960","1044025351","NL","NLD","NETHERLANDS" -"1044025352","1044025599","BE","BEL","BELGIUM" -"1044025600","1044026895","NL","NLD","NETHERLANDS" -"1044026896","1044027263","BE","BEL","BELGIUM" -"1044027264","1044027407","NL","NLD","NETHERLANDS" -"1044027408","1044027415","BE","BEL","BELGIUM" -"1044027416","1044027423","NL","NLD","NETHERLANDS" -"1044027424","1044027431","BE","BEL","BELGIUM" -"1044027432","1044027447","NL","NLD","NETHERLANDS" -"1044027448","1044027455","BE","BEL","BELGIUM" -"1044027456","1044027471","NL","NLD","NETHERLANDS" -"1044027472","1044027487","BE","BEL","BELGIUM" -"1044027488","1044027519","NL","NLD","NETHERLANDS" -"1044027520","1044027527","BE","BEL","BELGIUM" -"1044027528","1044027535","NL","NLD","NETHERLANDS" -"1044027536","1044027575","BE","BEL","BELGIUM" -"1044027576","1044027583","NL","NLD","NETHERLANDS" -"1044027584","1044027591","BE","BEL","BELGIUM" -"1044027592","1044027663","NL","NLD","NETHERLANDS" -"1044027664","1044027671","BE","BEL","BELGIUM" -"1044027672","1044027679","NL","NLD","NETHERLANDS" -"1044027680","1044027703","BE","BEL","BELGIUM" -"1044027704","1044027727","NL","NLD","NETHERLANDS" -"1044027728","1044027775","BE","BEL","BELGIUM" -"1044027776","1044027839","NL","NLD","NETHERLANDS" -"1044027840","1044027903","BE","BEL","BELGIUM" -"1044027904","1044028159","NL","NLD","NETHERLANDS" -"1044028160","1044028415","BE","BEL","BELGIUM" -"1044028416","1044028671","NL","NLD","NETHERLANDS" -"1044028672","1044028799","BE","BEL","BELGIUM" -"1044028800","1044028927","NL","NLD","NETHERLANDS" -"1044028928","1044028939","BE","BEL","BELGIUM" -"1044028940","1044028943","NL","NLD","NETHERLANDS" -"1044028944","1044028955","BE","BEL","BELGIUM" -"1044028956","1044028959","NL","NLD","NETHERLANDS" -"1044028960","1044028991","BE","BEL","BELGIUM" -"1044028992","1044028995","NL","NLD","NETHERLANDS" -"1044028996","1044029011","BE","BEL","BELGIUM" -"1044029012","1044029015","NL","NLD","NETHERLANDS" -"1044029016","1044029019","BE","BEL","BELGIUM" -"1044029020","1044029023","NL","NLD","NETHERLANDS" -"1044029024","1044029027","BE","BEL","BELGIUM" -"1044029028","1044029031","NL","NLD","NETHERLANDS" -"1044029032","1044029035","BE","BEL","BELGIUM" -"1044029036","1044029043","NL","NLD","NETHERLANDS" -"1044029044","1044029055","BE","BEL","BELGIUM" -"1044029056","1044029059","NL","NLD","NETHERLANDS" -"1044029060","1044029067","BE","BEL","BELGIUM" -"1044029068","1044029071","NL","NLD","NETHERLANDS" -"1044029072","1044029311","BE","BEL","BELGIUM" -"1044029312","1044029441","NL","NLD","NETHERLANDS" -"1044029442","1044029442","BE","BEL","BELGIUM" -"1044029443","1044029445","NL","NLD","NETHERLANDS" -"1044029446","1044029448","BE","BEL","BELGIUM" -"1044029449","1044029451","NL","NLD","NETHERLANDS" -"1044029452","1044029452","BE","BEL","BELGIUM" -"1044029453","1044029453","NL","NLD","NETHERLANDS" -"1044029454","1044029455","BE","BEL","BELGIUM" -"1044029456","1044029463","NL","NLD","NETHERLANDS" -"1044029464","1044029466","BE","BEL","BELGIUM" -"1044029467","1044029467","NL","NLD","NETHERLANDS" -"1044029468","1044029470","BE","BEL","BELGIUM" -"1044029471","1044029479","NL","NLD","NETHERLANDS" -"1044029480","1044029483","BE","BEL","BELGIUM" -"1044029484","1044029485","NL","NLD","NETHERLANDS" -"1044029486","1044029487","BE","BEL","BELGIUM" -"1044029488","1044029488","NL","NLD","NETHERLANDS" -"1044029489","1044029489","BE","BEL","BELGIUM" -"1044029490","1044029492","NL","NLD","NETHERLANDS" -"1044029493","1044029493","BE","BEL","BELGIUM" -"1044029494","1044029494","NL","NLD","NETHERLANDS" -"1044029495","1044029497","BE","BEL","BELGIUM" -"1044029498","1044029498","NL","NLD","NETHERLANDS" -"1044029499","1044029501","BE","BEL","BELGIUM" -"1044029502","1044029502","NL","NLD","NETHERLANDS" -"1044029503","1044029505","BE","BEL","BELGIUM" -"1044029506","1044029509","NL","NLD","NETHERLANDS" -"1044029510","1044029510","BE","BEL","BELGIUM" -"1044029511","1044029511","NL","NLD","NETHERLANDS" -"1044029512","1044029535","BE","BEL","BELGIUM" -"1044029536","1044029536","NL","NLD","NETHERLANDS" -"1044029537","1044029537","BE","BEL","BELGIUM" -"1044029538","1044029538","NL","NLD","NETHERLANDS" -"1044029539","1044029545","BE","BEL","BELGIUM" -"1044029546","1044029546","NL","NLD","NETHERLANDS" -"1044029547","1044029548","BE","BEL","BELGIUM" -"1044029549","1044029549","NL","NLD","NETHERLANDS" -"1044029550","1044029552","BE","BEL","BELGIUM" -"1044029553","1044029553","NL","NLD","NETHERLANDS" -"1044029554","1044029554","BE","BEL","BELGIUM" -"1044029555","1044029556","NL","NLD","NETHERLANDS" -"1044029557","1044029557","BE","BEL","BELGIUM" -"1044029558","1044029558","NL","NLD","NETHERLANDS" -"1044029559","1044029561","BE","BEL","BELGIUM" -"1044029562","1044029567","NL","NLD","NETHERLANDS" -"1044029568","1044029568","BE","BEL","BELGIUM" -"1044029569","1044029569","NL","NLD","NETHERLANDS" -"1044029570","1044029572","BE","BEL","BELGIUM" -"1044029573","1044029575","NL","NLD","NETHERLANDS" -"1044029576","1044029580","BE","BEL","BELGIUM" -"1044029581","1044029581","NL","NLD","NETHERLANDS" -"1044029582","1044029584","BE","BEL","BELGIUM" -"1044029585","1044029585","NL","NLD","NETHERLANDS" -"1044029586","1044029586","BE","BEL","BELGIUM" -"1044029587","1044029587","NL","NLD","NETHERLANDS" -"1044029588","1044029590","BE","BEL","BELGIUM" -"1044029591","1044029595","NL","NLD","NETHERLANDS" -"1044029596","1044029596","BE","BEL","BELGIUM" -"1044029597","1044029598","NL","NLD","NETHERLANDS" -"1044029599","1044029599","BE","BEL","BELGIUM" -"1044029600","1044029600","NL","NLD","NETHERLANDS" -"1044029601","1044029601","BE","BEL","BELGIUM" -"1044029602","1044029603","NL","NLD","NETHERLANDS" -"1044029604","1044029606","BE","BEL","BELGIUM" -"1044029607","1044029608","NL","NLD","NETHERLANDS" -"1044029609","1044029609","BE","BEL","BELGIUM" -"1044029610","1044029610","NL","NLD","NETHERLANDS" -"1044029611","1044029611","BE","BEL","BELGIUM" -"1044029612","1044029612","NL","NLD","NETHERLANDS" -"1044029613","1044029616","BE","BEL","BELGIUM" -"1044029617","1044029618","NL","NLD","NETHERLANDS" -"1044029619","1044029620","BE","BEL","BELGIUM" -"1044029621","1044029622","NL","NLD","NETHERLANDS" -"1044029623","1044029625","BE","BEL","BELGIUM" -"1044029626","1044029628","NL","NLD","NETHERLANDS" -"1044029629","1044029630","BE","BEL","BELGIUM" -"1044029631","1044029631","NL","NLD","NETHERLANDS" -"1044029632","1044029634","BE","BEL","BELGIUM" -"1044029635","1044029635","NL","NLD","NETHERLANDS" -"1044029636","1044029636","BE","BEL","BELGIUM" -"1044029637","1044029638","NL","NLD","NETHERLANDS" -"1044029639","1044029640","BE","BEL","BELGIUM" -"1044029641","1044029641","NL","NLD","NETHERLANDS" -"1044029642","1044029642","BE","BEL","BELGIUM" -"1044029643","1044029647","NL","NLD","NETHERLANDS" -"1044029648","1044029648","BE","BEL","BELGIUM" -"1044029649","1044029651","NL","NLD","NETHERLANDS" -"1044029652","1044029652","BE","BEL","BELGIUM" -"1044029653","1044029659","NL","NLD","NETHERLANDS" -"1044029660","1044029660","BE","BEL","BELGIUM" -"1044029661","1044029663","NL","NLD","NETHERLANDS" -"1044029664","1044029665","BE","BEL","BELGIUM" -"1044029666","1044029667","NL","NLD","NETHERLANDS" -"1044029668","1044029668","BE","BEL","BELGIUM" -"1044029669","1044029669","NL","NLD","NETHERLANDS" -"1044029670","1044029672","BE","BEL","BELGIUM" -"1044029673","1044029676","NL","NLD","NETHERLANDS" -"1044029677","1044029678","BE","BEL","BELGIUM" -"1044029679","1044029680","NL","NLD","NETHERLANDS" -"1044029681","1044029681","BE","BEL","BELGIUM" -"1044029682","1044029682","NL","NLD","NETHERLANDS" -"1044029683","1044029684","BE","BEL","BELGIUM" -"1044029685","1044029686","NL","NLD","NETHERLANDS" -"1044029687","1044029687","BE","BEL","BELGIUM" -"1044029688","1044029693","NL","NLD","NETHERLANDS" -"1044029694","1044029694","BE","BEL","BELGIUM" -"1044029695","1044029703","NL","NLD","NETHERLANDS" -"1044029704","1044029711","BE","BEL","BELGIUM" -"1044029712","1044029719","NL","NLD","NETHERLANDS" -"1044029720","1044029727","BE","BEL","BELGIUM" -"1044029728","1044029743","NL","NLD","NETHERLANDS" -"1044029744","1044029767","BE","BEL","BELGIUM" -"1044029768","1044029775","NL","NLD","NETHERLANDS" -"1044029776","1044029783","BE","BEL","BELGIUM" -"1044029784","1044029831","NL","NLD","NETHERLANDS" -"1044029832","1044029839","BE","BEL","BELGIUM" -"1044029840","1044029871","NL","NLD","NETHERLANDS" -"1044029872","1044029879","BE","BEL","BELGIUM" -"1044029880","1044029895","NL","NLD","NETHERLANDS" -"1044029896","1044029919","BE","BEL","BELGIUM" -"1044029920","1044029951","NL","NLD","NETHERLANDS" -"1044029952","1044029959","BE","BEL","BELGIUM" -"1044029960","1044029967","NL","NLD","NETHERLANDS" -"1044029968","1044029983","BE","BEL","BELGIUM" -"1044029984","1044030015","NL","NLD","NETHERLANDS" -"1044030016","1044030031","BE","BEL","BELGIUM" -"1044030032","1044030047","NL","NLD","NETHERLANDS" -"1044030048","1044030055","BE","BEL","BELGIUM" -"1044030056","1044030063","NL","NLD","NETHERLANDS" -"1044030064","1044030071","BE","BEL","BELGIUM" -"1044030072","1044030111","NL","NLD","NETHERLANDS" -"1044030112","1044030119","BE","BEL","BELGIUM" -"1044030120","1044030127","NL","NLD","NETHERLANDS" -"1044030128","1044030135","BE","BEL","BELGIUM" -"1044030136","1044030207","NL","NLD","NETHERLANDS" -"1044030208","1044030223","BE","BEL","BELGIUM" -"1044030224","1044030231","NL","NLD","NETHERLANDS" -"1044030232","1044030239","BE","BEL","BELGIUM" -"1044030240","1044030247","NL","NLD","NETHERLANDS" -"1044030248","1044030263","BE","BEL","BELGIUM" -"1044030264","1044030279","NL","NLD","NETHERLANDS" -"1044030280","1044030295","BE","BEL","BELGIUM" -"1044030296","1044030303","NL","NLD","NETHERLANDS" -"1044030304","1044030311","BE","BEL","BELGIUM" -"1044030312","1044030335","NL","NLD","NETHERLANDS" -"1044030336","1044030343","BE","BEL","BELGIUM" -"1044030344","1044030375","NL","NLD","NETHERLANDS" -"1044030376","1044030391","BE","BEL","BELGIUM" -"1044030392","1044030399","NL","NLD","NETHERLANDS" -"1044030400","1044030407","BE","BEL","BELGIUM" -"1044030408","1044030439","NL","NLD","NETHERLANDS" -"1044030440","1044030447","BE","BEL","BELGIUM" -"1044030448","1044030463","NL","NLD","NETHERLANDS" -"1044030464","1044030471","BE","BEL","BELGIUM" -"1044030472","1044030487","NL","NLD","NETHERLANDS" -"1044030488","1044030495","BE","BEL","BELGIUM" -"1044030496","1044030527","NL","NLD","NETHERLANDS" -"1044030528","1044030535","BE","BEL","BELGIUM" -"1044030536","1044030583","NL","NLD","NETHERLANDS" -"1044030584","1044030591","BE","BEL","BELGIUM" -"1044030592","1044030607","NL","NLD","NETHERLANDS" -"1044030608","1044030615","BE","BEL","BELGIUM" -"1044030616","1044030639","NL","NLD","NETHERLANDS" -"1044030640","1044030647","BE","BEL","BELGIUM" -"1044030648","1044030671","NL","NLD","NETHERLANDS" -"1044030672","1044030679","BE","BEL","BELGIUM" -"1044030680","1044030711","NL","NLD","NETHERLANDS" -"1044030712","1044030719","BE","BEL","BELGIUM" -"1044030720","1044030727","NL","NLD","NETHERLANDS" -"1044030728","1044030735","BE","BEL","BELGIUM" -"1044030736","1044030759","NL","NLD","NETHERLANDS" -"1044030760","1044030767","BE","BEL","BELGIUM" -"1044030768","1044030815","NL","NLD","NETHERLANDS" -"1044030816","1044030823","BE","BEL","BELGIUM" -"1044030824","1044030831","NL","NLD","NETHERLANDS" -"1044030832","1044030847","BE","BEL","BELGIUM" -"1044030848","1044030879","NL","NLD","NETHERLANDS" -"1044030880","1044030887","BE","BEL","BELGIUM" -"1044030888","1044030895","NL","NLD","NETHERLANDS" -"1044030896","1044030903","BE","BEL","BELGIUM" -"1044030904","1044030911","NL","NLD","NETHERLANDS" -"1044030912","1044030919","BE","BEL","BELGIUM" -"1044030920","1044030927","NL","NLD","NETHERLANDS" -"1044030928","1044030935","BE","BEL","BELGIUM" -"1044030936","1044030959","NL","NLD","NETHERLANDS" -"1044030960","1044030967","BE","BEL","BELGIUM" -"1044030968","1044030999","NL","NLD","NETHERLANDS" -"1044031000","1044031007","BE","BEL","BELGIUM" -"1044031008","1044031039","NL","NLD","NETHERLANDS" -"1044031040","1044031103","BE","BEL","BELGIUM" -"1044031104","1044031119","NL","NLD","NETHERLANDS" -"1044031120","1044031127","BE","BEL","BELGIUM" -"1044031128","1044031151","NL","NLD","NETHERLANDS" -"1044031152","1044031167","BE","BEL","BELGIUM" -"1044031168","1044031271","NL","NLD","NETHERLANDS" -"1044031272","1044031279","BE","BEL","BELGIUM" -"1044031280","1044031287","NL","NLD","NETHERLANDS" -"1044031288","1044031295","BE","BEL","BELGIUM" -"1044031296","1044031319","NL","NLD","NETHERLANDS" -"1044031320","1044031327","BE","BEL","BELGIUM" -"1044031328","1044031343","NL","NLD","NETHERLANDS" -"1044031344","1044031351","BE","BEL","BELGIUM" -"1044031352","1044031359","NL","NLD","NETHERLANDS" -"1044031360","1044031360","BE","BEL","BELGIUM" -"1044031361","1044031363","NL","NLD","NETHERLANDS" -"1044031364","1044031364","BE","BEL","BELGIUM" -"1044031365","1044031367","NL","NLD","NETHERLANDS" -"1044031368","1044031375","BE","BEL","BELGIUM" -"1044031376","1044031399","NL","NLD","NETHERLANDS" -"1044031400","1044031431","BE","BEL","BELGIUM" -"1044031432","1044031439","NL","NLD","NETHERLANDS" -"1044031440","1044031455","BE","BEL","BELGIUM" -"1044031456","1044031489","NL","NLD","NETHERLANDS" -"1044031490","1044031490","BE","BEL","BELGIUM" -"1044031491","1044031494","NL","NLD","NETHERLANDS" -"1044031495","1044031495","BE","BEL","BELGIUM" -"1044031496","1044031496","NL","NLD","NETHERLANDS" -"1044031497","1044031497","BE","BEL","BELGIUM" -"1044031498","1044031507","NL","NLD","NETHERLANDS" -"1044031508","1044031508","BE","BEL","BELGIUM" -"1044031509","1044031509","NL","NLD","NETHERLANDS" -"1044031510","1044031510","BE","BEL","BELGIUM" -"1044031511","1044031519","NL","NLD","NETHERLANDS" -"1044031520","1044031520","BE","BEL","BELGIUM" -"1044031521","1044031523","NL","NLD","NETHERLANDS" -"1044031524","1044031524","BE","BEL","BELGIUM" -"1044031525","1044031531","NL","NLD","NETHERLANDS" -"1044031532","1044031532","BE","BEL","BELGIUM" -"1044031533","1044031533","NL","NLD","NETHERLANDS" -"1044031534","1044031536","BE","BEL","BELGIUM" -"1044031537","1044031550","NL","NLD","NETHERLANDS" -"1044031551","1044031551","BE","BEL","BELGIUM" -"1044031552","1044031552","NL","NLD","NETHERLANDS" -"1044031553","1044031553","BE","BEL","BELGIUM" -"1044031554","1044031556","NL","NLD","NETHERLANDS" -"1044031557","1044031557","BE","BEL","BELGIUM" -"1044031558","1044031558","NL","NLD","NETHERLANDS" -"1044031559","1044031559","BE","BEL","BELGIUM" -"1044031560","1044031562","NL","NLD","NETHERLANDS" -"1044031563","1044031563","BE","BEL","BELGIUM" -"1044031564","1044031566","NL","NLD","NETHERLANDS" -"1044031567","1044031567","BE","BEL","BELGIUM" -"1044031568","1044031568","NL","NLD","NETHERLANDS" -"1044031569","1044031569","BE","BEL","BELGIUM" -"1044031570","1044031571","NL","NLD","NETHERLANDS" -"1044031572","1044031572","BE","BEL","BELGIUM" -"1044031573","1044031573","NL","NLD","NETHERLANDS" -"1044031574","1044031574","BE","BEL","BELGIUM" -"1044031575","1044031579","NL","NLD","NETHERLANDS" -"1044031580","1044031581","BE","BEL","BELGIUM" -"1044031582","1044031582","NL","NLD","NETHERLANDS" -"1044031583","1044031584","BE","BEL","BELGIUM" -"1044031585","1044031592","NL","NLD","NETHERLANDS" -"1044031593","1044031593","BE","BEL","BELGIUM" -"1044031594","1044031597","NL","NLD","NETHERLANDS" -"1044031598","1044031598","BE","BEL","BELGIUM" -"1044031599","1044031599","NL","NLD","NETHERLANDS" -"1044031600","1044031600","BE","BEL","BELGIUM" -"1044031601","1044031627","NL","NLD","NETHERLANDS" -"1044031628","1044031628","BE","BEL","BELGIUM" -"1044031629","1044031629","NL","NLD","NETHERLANDS" -"1044031630","1044031630","BE","BEL","BELGIUM" -"1044031631","1044031635","NL","NLD","NETHERLANDS" -"1044031636","1044031636","BE","BEL","BELGIUM" -"1044031637","1044031640","NL","NLD","NETHERLANDS" -"1044031641","1044031641","BE","BEL","BELGIUM" -"1044031642","1044031643","NL","NLD","NETHERLANDS" -"1044031644","1044031644","BE","BEL","BELGIUM" -"1044031645","1044031651","NL","NLD","NETHERLANDS" -"1044031652","1044031652","BE","BEL","BELGIUM" -"1044031653","1044031654","NL","NLD","NETHERLANDS" -"1044031655","1044031655","BE","BEL","BELGIUM" -"1044031656","1044031656","NL","NLD","NETHERLANDS" -"1044031657","1044031658","BE","BEL","BELGIUM" -"1044031659","1044031666","NL","NLD","NETHERLANDS" -"1044031667","1044031667","BE","BEL","BELGIUM" -"1044031668","1044031668","NL","NLD","NETHERLANDS" -"1044031669","1044031670","BE","BEL","BELGIUM" -"1044031671","1044031673","NL","NLD","NETHERLANDS" -"1044031674","1044031674","BE","BEL","BELGIUM" -"1044031675","1044031675","NL","NLD","NETHERLANDS" -"1044031676","1044031677","BE","BEL","BELGIUM" -"1044031678","1044031683","NL","NLD","NETHERLANDS" -"1044031684","1044031684","BE","BEL","BELGIUM" -"1044031685","1044031687","NL","NLD","NETHERLANDS" -"1044031688","1044031688","BE","BEL","BELGIUM" -"1044031689","1044031690","NL","NLD","NETHERLANDS" -"1044031691","1044031692","BE","BEL","BELGIUM" -"1044031693","1044031698","NL","NLD","NETHERLANDS" -"1044031699","1044031699","BE","BEL","BELGIUM" -"1044031700","1044031702","NL","NLD","NETHERLANDS" -"1044031703","1044031704","BE","BEL","BELGIUM" -"1044031705","1044031709","NL","NLD","NETHERLANDS" -"1044031710","1044031710","BE","BEL","BELGIUM" -"1044031711","1044031711","NL","NLD","NETHERLANDS" -"1044031712","1044031712","BE","BEL","BELGIUM" -"1044031713","1044031714","NL","NLD","NETHERLANDS" -"1044031715","1044031715","BE","BEL","BELGIUM" -"1044031716","1044031717","NL","NLD","NETHERLANDS" -"1044031718","1044031719","BE","BEL","BELGIUM" -"1044031720","1044031721","NL","NLD","NETHERLANDS" -"1044031722","1044031723","BE","BEL","BELGIUM" -"1044031724","1044031726","NL","NLD","NETHERLANDS" -"1044031727","1044031727","BE","BEL","BELGIUM" -"1044031728","1044031751","NL","NLD","NETHERLANDS" -"1044031752","1044031759","BE","BEL","BELGIUM" -"1044031760","1044031799","NL","NLD","NETHERLANDS" -"1044031800","1044031807","BE","BEL","BELGIUM" -"1044031808","1044031815","NL","NLD","NETHERLANDS" -"1044031816","1044031871","BE","BEL","BELGIUM" -"1044031872","1044031879","NL","NLD","NETHERLANDS" -"1044031880","1044031887","BE","BEL","BELGIUM" -"1044031888","1044031927","NL","NLD","NETHERLANDS" -"1044031928","1044031935","BE","BEL","BELGIUM" -"1044031936","1044031951","NL","NLD","NETHERLANDS" -"1044031952","1044031991","BE","BEL","BELGIUM" -"1044031992","1044031999","NL","NLD","NETHERLANDS" -"1044032000","1044032031","BE","BEL","BELGIUM" -"1044032032","1044032047","NL","NLD","NETHERLANDS" -"1044032048","1044032055","BE","BEL","BELGIUM" -"1044032056","1044032071","NL","NLD","NETHERLANDS" -"1044032072","1044032079","BE","BEL","BELGIUM" -"1044032080","1044032103","NL","NLD","NETHERLANDS" -"1044032104","1044032127","BE","BEL","BELGIUM" -"1044032128","1044032151","NL","NLD","NETHERLANDS" -"1044032152","1044032167","BE","BEL","BELGIUM" -"1044032168","1044032175","NL","NLD","NETHERLANDS" -"1044032176","1044032183","BE","BEL","BELGIUM" -"1044032184","1044032191","NL","NLD","NETHERLANDS" -"1044032192","1044032199","BE","BEL","BELGIUM" -"1044032200","1044032223","NL","NLD","NETHERLANDS" -"1044032224","1044032239","BE","BEL","BELGIUM" -"1044032240","1044032263","NL","NLD","NETHERLANDS" -"1044032264","1044032287","BE","BEL","BELGIUM" -"1044032288","1044032303","NL","NLD","NETHERLANDS" -"1044032304","1044032327","BE","BEL","BELGIUM" -"1044032328","1044032375","NL","NLD","NETHERLANDS" -"1044032376","1044032407","BE","BEL","BELGIUM" -"1044032408","1044032471","NL","NLD","NETHERLANDS" -"1044032472","1044032479","BE","BEL","BELGIUM" -"1044032480","1044032527","NL","NLD","NETHERLANDS" -"1044032528","1044032559","BE","BEL","BELGIUM" -"1044032560","1044032583","NL","NLD","NETHERLANDS" -"1044032584","1044032615","BE","BEL","BELGIUM" -"1044032616","1044032639","NL","NLD","NETHERLANDS" -"1044032640","1044032647","BE","BEL","BELGIUM" -"1044032648","1044032695","NL","NLD","NETHERLANDS" -"1044032696","1044032703","BE","BEL","BELGIUM" -"1044032704","1044032719","NL","NLD","NETHERLANDS" -"1044032720","1044032727","BE","BEL","BELGIUM" -"1044032728","1044032735","NL","NLD","NETHERLANDS" -"1044032736","1044032743","BE","BEL","BELGIUM" -"1044032744","1044032775","NL","NLD","NETHERLANDS" -"1044032776","1044032783","BE","BEL","BELGIUM" -"1044032784","1044032791","NL","NLD","NETHERLANDS" -"1044032792","1044032799","BE","BEL","BELGIUM" -"1044032800","1044032815","NL","NLD","NETHERLANDS" -"1044032816","1044032831","BE","BEL","BELGIUM" -"1044032832","1044032855","NL","NLD","NETHERLANDS" -"1044032856","1044032863","BE","BEL","BELGIUM" -"1044032864","1044032887","NL","NLD","NETHERLANDS" -"1044032888","1044032903","BE","BEL","BELGIUM" -"1044032904","1044032927","NL","NLD","NETHERLANDS" -"1044032928","1044032935","BE","BEL","BELGIUM" -"1044032936","1044032951","NL","NLD","NETHERLANDS" -"1044032952","1044032959","BE","BEL","BELGIUM" -"1044032960","1044032967","NL","NLD","NETHERLANDS" -"1044032968","1044032975","BE","BEL","BELGIUM" -"1044032976","1044032991","NL","NLD","NETHERLANDS" -"1044032992","1044032999","BE","BEL","BELGIUM" -"1044033000","1044033031","NL","NLD","NETHERLANDS" -"1044033032","1044033055","BE","BEL","BELGIUM" -"1044033056","1044033071","NL","NLD","NETHERLANDS" -"1044033072","1044033079","BE","BEL","BELGIUM" -"1044033080","1044033111","NL","NLD","NETHERLANDS" -"1044033112","1044033119","BE","BEL","BELGIUM" -"1044033120","1044033135","NL","NLD","NETHERLANDS" -"1044033136","1044033159","BE","BEL","BELGIUM" -"1044033160","1044033207","NL","NLD","NETHERLANDS" -"1044033208","1044033215","BE","BEL","BELGIUM" -"1044033216","1044033223","NL","NLD","NETHERLANDS" -"1044033224","1044033231","BE","BEL","BELGIUM" -"1044033232","1044033335","NL","NLD","NETHERLANDS" -"1044033336","1044033343","BE","BEL","BELGIUM" -"1044033344","1044033351","NL","NLD","NETHERLANDS" -"1044033352","1044033359","BE","BEL","BELGIUM" -"1044033360","1044033375","NL","NLD","NETHERLANDS" -"1044033376","1044033407","BE","BEL","BELGIUM" -"1044033408","1044033431","NL","NLD","NETHERLANDS" -"1044033432","1044033447","BE","BEL","BELGIUM" -"1044033448","1044033527","NL","NLD","NETHERLANDS" -"1044033528","1044033535","BE","BEL","BELGIUM" -"1044033536","1044033543","NL","NLD","NETHERLANDS" -"1044033544","1044033551","BE","BEL","BELGIUM" -"1044033552","1044033575","NL","NLD","NETHERLANDS" -"1044033576","1044033583","BE","BEL","BELGIUM" -"1044033584","1044033623","NL","NLD","NETHERLANDS" -"1044033624","1044033631","BE","BEL","BELGIUM" -"1044033632","1044033655","NL","NLD","NETHERLANDS" -"1044033656","1044033663","BE","BEL","BELGIUM" -"1044033664","1044033671","NL","NLD","NETHERLANDS" -"1044033672","1044033687","BE","BEL","BELGIUM" -"1044033688","1044033719","NL","NLD","NETHERLANDS" -"1044033720","1044033727","BE","BEL","BELGIUM" -"1044033728","1044033895","NL","NLD","NETHERLANDS" -"1044033896","1044033903","BE","BEL","BELGIUM" -"1044033904","1044033927","NL","NLD","NETHERLANDS" -"1044033928","1044033935","BE","BEL","BELGIUM" -"1044033936","1044033991","NL","NLD","NETHERLANDS" -"1044033992","1044033999","BE","BEL","BELGIUM" -"1044034000","1044034015","NL","NLD","NETHERLANDS" -"1044034016","1044034023","BE","BEL","BELGIUM" -"1044034024","1044034031","NL","NLD","NETHERLANDS" -"1044034032","1044034039","BE","BEL","BELGIUM" -"1044034040","1044034055","NL","NLD","NETHERLANDS" -"1044034056","1044034063","BE","BEL","BELGIUM" -"1044034064","1044034095","NL","NLD","NETHERLANDS" -"1044034096","1044034119","BE","BEL","BELGIUM" -"1044034120","1044034127","NL","NLD","NETHERLANDS" -"1044034128","1044034135","BE","BEL","BELGIUM" -"1044034136","1044034207","NL","NLD","NETHERLANDS" -"1044034208","1044034215","BE","BEL","BELGIUM" -"1044034216","1044034231","NL","NLD","NETHERLANDS" -"1044034232","1044034247","BE","BEL","BELGIUM" -"1044034248","1044034263","NL","NLD","NETHERLANDS" -"1044034264","1044034271","BE","BEL","BELGIUM" -"1044034272","1044034279","NL","NLD","NETHERLANDS" -"1044034280","1044034295","BE","BEL","BELGIUM" -"1044034296","1044034303","NL","NLD","NETHERLANDS" -"1044034304","1044034311","BE","BEL","BELGIUM" -"1044034312","1044034327","NL","NLD","NETHERLANDS" -"1044034328","1044034335","BE","BEL","BELGIUM" -"1044034336","1044034375","NL","NLD","NETHERLANDS" -"1044034376","1044034383","BE","BEL","BELGIUM" -"1044034384","1044034487","NL","NLD","NETHERLANDS" -"1044034488","1044034495","BE","BEL","BELGIUM" -"1044034496","1044034511","NL","NLD","NETHERLANDS" -"1044034512","1044034519","BE","BEL","BELGIUM" -"1044034520","1044034615","NL","NLD","NETHERLANDS" -"1044034616","1044034623","BE","BEL","BELGIUM" -"1044034624","1044034663","NL","NLD","NETHERLANDS" -"1044034664","1044034671","BE","BEL","BELGIUM" -"1044034672","1044034735","NL","NLD","NETHERLANDS" -"1044034736","1044034743","BE","BEL","BELGIUM" -"1044034744","1044034751","NL","NLD","NETHERLANDS" -"1044034752","1044034759","BE","BEL","BELGIUM" -"1044034760","1044034783","NL","NLD","NETHERLANDS" -"1044034784","1044034791","BE","BEL","BELGIUM" -"1044034792","1044034847","NL","NLD","NETHERLANDS" -"1044034848","1044034855","BE","BEL","BELGIUM" -"1044034856","1044034975","NL","NLD","NETHERLANDS" -"1044034976","1044034983","BE","BEL","BELGIUM" -"1044034984","1044034999","NL","NLD","NETHERLANDS" -"1044035000","1044035007","BE","BEL","BELGIUM" -"1044035008","1044035031","NL","NLD","NETHERLANDS" -"1044035032","1044035039","BE","BEL","BELGIUM" -"1044035040","1044035047","NL","NLD","NETHERLANDS" -"1044035048","1044035055","BE","BEL","BELGIUM" -"1044035056","1044035063","NL","NLD","NETHERLANDS" -"1044035064","1044035071","BE","BEL","BELGIUM" -"1044035072","1044035143","NL","NLD","NETHERLANDS" -"1044035144","1044035151","BE","BEL","BELGIUM" -"1044035152","1044035191","NL","NLD","NETHERLANDS" -"1044035192","1044035199","BE","BEL","BELGIUM" -"1044035200","1044035223","NL","NLD","NETHERLANDS" -"1044035224","1044035231","BE","BEL","BELGIUM" -"1044035232","1044035255","NL","NLD","NETHERLANDS" -"1044035256","1044035263","BE","BEL","BELGIUM" -"1044035264","1044035287","NL","NLD","NETHERLANDS" -"1044035288","1044035311","BE","BEL","BELGIUM" -"1044035312","1044035327","NL","NLD","NETHERLANDS" -"1044035328","1044035351","BE","BEL","BELGIUM" -"1044035352","1044035415","NL","NLD","NETHERLANDS" -"1044035416","1044035423","BE","BEL","BELGIUM" -"1044035424","1044035447","NL","NLD","NETHERLANDS" -"1044035448","1044035471","BE","BEL","BELGIUM" -"1044035472","1044035479","NL","NLD","NETHERLANDS" -"1044035480","1044035487","BE","BEL","BELGIUM" -"1044035488","1044035495","NL","NLD","NETHERLANDS" -"1044035496","1044035503","BE","BEL","BELGIUM" -"1044035504","1044035511","NL","NLD","NETHERLANDS" -"1044035512","1044035527","BE","BEL","BELGIUM" -"1044035528","1044035559","NL","NLD","NETHERLANDS" -"1044035560","1044035591","BE","BEL","BELGIUM" -"1044035592","1044035607","NL","NLD","NETHERLANDS" -"1044035608","1044035623","BE","BEL","BELGIUM" -"1044035624","1044035655","NL","NLD","NETHERLANDS" -"1044035656","1044035663","BE","BEL","BELGIUM" -"1044035664","1044035671","NL","NLD","NETHERLANDS" -"1044035672","1044035679","BE","BEL","BELGIUM" -"1044035680","1044035711","NL","NLD","NETHERLANDS" -"1044035712","1044035727","BE","BEL","BELGIUM" -"1044035728","1044035751","NL","NLD","NETHERLANDS" -"1044035752","1044035759","BE","BEL","BELGIUM" -"1044035760","1044035791","NL","NLD","NETHERLANDS" -"1044035792","1044035807","BE","BEL","BELGIUM" -"1044035808","1044035831","NL","NLD","NETHERLANDS" -"1044035832","1044035839","BE","BEL","BELGIUM" -"1044035840","1044035847","NL","NLD","NETHERLANDS" -"1044035848","1044035871","BE","BEL","BELGIUM" -"1044035872","1044035887","NL","NLD","NETHERLANDS" -"1044035888","1044035895","BE","BEL","BELGIUM" -"1044035896","1044035903","NL","NLD","NETHERLANDS" -"1044035904","1044035919","BE","BEL","BELGIUM" -"1044035920","1044035943","NL","NLD","NETHERLANDS" -"1044035944","1044035967","BE","BEL","BELGIUM" -"1044035968","1044035975","NL","NLD","NETHERLANDS" -"1044035976","1044035983","BE","BEL","BELGIUM" -"1044035984","1044035999","NL","NLD","NETHERLANDS" -"1044036000","1044036007","BE","BEL","BELGIUM" -"1044036008","1044036039","NL","NLD","NETHERLANDS" -"1044036040","1044036047","BE","BEL","BELGIUM" -"1044036048","1044036079","NL","NLD","NETHERLANDS" -"1044036080","1044036087","BE","BEL","BELGIUM" -"1044036088","1044036095","NL","NLD","NETHERLANDS" -"1044036096","1044036103","BE","BEL","BELGIUM" -"1044036104","1044036111","NL","NLD","NETHERLANDS" -"1044036112","1044036119","BE","BEL","BELGIUM" -"1044036120","1044036127","NL","NLD","NETHERLANDS" -"1044036128","1044036135","BE","BEL","BELGIUM" -"1044036136","1044036143","NL","NLD","NETHERLANDS" -"1044036144","1044036159","BE","BEL","BELGIUM" -"1044036160","1044036167","NL","NLD","NETHERLANDS" -"1044036168","1044036199","BE","BEL","BELGIUM" -"1044036200","1044036231","NL","NLD","NETHERLANDS" -"1044036232","1044036239","BE","BEL","BELGIUM" -"1044036240","1044036255","NL","NLD","NETHERLANDS" -"1044036256","1044036271","BE","BEL","BELGIUM" -"1044036272","1044036295","NL","NLD","NETHERLANDS" -"1044036296","1044036311","BE","BEL","BELGIUM" -"1044036312","1044036327","NL","NLD","NETHERLANDS" -"1044036328","1044036335","BE","BEL","BELGIUM" -"1044036336","1044036399","NL","NLD","NETHERLANDS" -"1044036400","1044036407","BE","BEL","BELGIUM" -"1044036408","1044036415","NL","NLD","NETHERLANDS" -"1044036416","1044036423","BE","BEL","BELGIUM" -"1044036424","1044036471","NL","NLD","NETHERLANDS" -"1044036472","1044036479","BE","BEL","BELGIUM" -"1044036480","1044036503","NL","NLD","NETHERLANDS" -"1044036504","1044036511","BE","BEL","BELGIUM" -"1044036512","1044036527","NL","NLD","NETHERLANDS" -"1044036528","1044036543","BE","BEL","BELGIUM" -"1044036544","1044036559","NL","NLD","NETHERLANDS" -"1044036560","1044036567","BE","BEL","BELGIUM" -"1044036568","1044036575","NL","NLD","NETHERLANDS" -"1044036576","1044036607","BE","BEL","BELGIUM" -"1044036608","1044036615","NL","NLD","NETHERLANDS" -"1044036616","1044036623","BE","BEL","BELGIUM" -"1044036624","1044036647","NL","NLD","NETHERLANDS" -"1044036648","1044036655","BE","BEL","BELGIUM" -"1044036656","1044036671","NL","NLD","NETHERLANDS" -"1044036672","1044036687","BE","BEL","BELGIUM" -"1044036688","1044036759","NL","NLD","NETHERLANDS" -"1044036760","1044036767","BE","BEL","BELGIUM" -"1044036768","1044036775","NL","NLD","NETHERLANDS" -"1044036776","1044036783","BE","BEL","BELGIUM" -"1044036784","1044036791","NL","NLD","NETHERLANDS" -"1044036792","1044036799","BE","BEL","BELGIUM" -"1044036800","1044036807","NL","NLD","NETHERLANDS" -"1044036808","1044036815","BE","BEL","BELGIUM" -"1044036816","1044036863","NL","NLD","NETHERLANDS" -"1044036864","1044036864","BE","BEL","BELGIUM" -"1044036865","1044036865","NL","NLD","NETHERLANDS" -"1044036866","1044036866","BE","BEL","BELGIUM" -"1044036867","1044036890","NL","NLD","NETHERLANDS" -"1044036891","1044036891","BE","BEL","BELGIUM" -"1044036892","1044036899","NL","NLD","NETHERLANDS" -"1044036900","1044036900","BE","BEL","BELGIUM" -"1044036901","1044036907","NL","NLD","NETHERLANDS" -"1044036908","1044036908","BE","BEL","BELGIUM" -"1044036909","1044036909","NL","NLD","NETHERLANDS" -"1044036910","1044036910","BE","BEL","BELGIUM" -"1044036911","1044036927","NL","NLD","NETHERLANDS" -"1044036928","1044036928","BE","BEL","BELGIUM" -"1044036929","1044036942","NL","NLD","NETHERLANDS" -"1044036943","1044036943","BE","BEL","BELGIUM" -"1044036944","1044036948","NL","NLD","NETHERLANDS" -"1044036949","1044036951","BE","BEL","BELGIUM" -"1044036952","1044036957","NL","NLD","NETHERLANDS" -"1044036958","1044036958","BE","BEL","BELGIUM" -"1044036959","1044036967","NL","NLD","NETHERLANDS" -"1044036968","1044036968","BE","BEL","BELGIUM" -"1044036969","1044036970","NL","NLD","NETHERLANDS" -"1044036971","1044036971","BE","BEL","BELGIUM" -"1044036972","1044036976","NL","NLD","NETHERLANDS" -"1044036977","1044036977","BE","BEL","BELGIUM" -"1044036978","1044036984","NL","NLD","NETHERLANDS" -"1044036985","1044036985","BE","BEL","BELGIUM" -"1044036986","1044036990","NL","NLD","NETHERLANDS" -"1044036991","1044036991","BE","BEL","BELGIUM" -"1044036992","1044037007","NL","NLD","NETHERLANDS" -"1044037008","1044037010","BE","BEL","BELGIUM" -"1044037011","1044037014","NL","NLD","NETHERLANDS" -"1044037015","1044037015","BE","BEL","BELGIUM" -"1044037016","1044037021","NL","NLD","NETHERLANDS" -"1044037022","1044037022","BE","BEL","BELGIUM" -"1044037023","1044037023","NL","NLD","NETHERLANDS" -"1044037024","1044037025","BE","BEL","BELGIUM" -"1044037026","1044037026","NL","NLD","NETHERLANDS" -"1044037027","1044037027","BE","BEL","BELGIUM" -"1044037028","1044037037","NL","NLD","NETHERLANDS" -"1044037038","1044037038","BE","BEL","BELGIUM" -"1044037039","1044037042","NL","NLD","NETHERLANDS" -"1044037043","1044037043","BE","BEL","BELGIUM" -"1044037044","1044037047","NL","NLD","NETHERLANDS" -"1044037048","1044037048","BE","BEL","BELGIUM" -"1044037049","1044037049","NL","NLD","NETHERLANDS" -"1044037050","1044037051","BE","BEL","BELGIUM" -"1044037052","1044037056","NL","NLD","NETHERLANDS" -"1044037057","1044037057","BE","BEL","BELGIUM" -"1044037058","1044037061","NL","NLD","NETHERLANDS" -"1044037062","1044037063","BE","BEL","BELGIUM" -"1044037064","1044037065","NL","NLD","NETHERLANDS" -"1044037066","1044037066","BE","BEL","BELGIUM" -"1044037067","1044037070","NL","NLD","NETHERLANDS" -"1044037071","1044037071","BE","BEL","BELGIUM" -"1044037072","1044037074","NL","NLD","NETHERLANDS" -"1044037075","1044037075","BE","BEL","BELGIUM" -"1044037076","1044037091","NL","NLD","NETHERLANDS" -"1044037092","1044037092","BE","BEL","BELGIUM" -"1044037093","1044037098","NL","NLD","NETHERLANDS" -"1044037099","1044037100","BE","BEL","BELGIUM" -"1044037101","1044037101","NL","NLD","NETHERLANDS" -"1044037102","1044037102","BE","BEL","BELGIUM" -"1044037103","1044037106","NL","NLD","NETHERLANDS" -"1044037107","1044037107","BE","BEL","BELGIUM" -"1044037108","1044037109","NL","NLD","NETHERLANDS" -"1044037110","1044037110","BE","BEL","BELGIUM" -"1044037111","1044037143","NL","NLD","NETHERLANDS" -"1044037144","1044037151","BE","BEL","BELGIUM" -"1044037152","1044037159","NL","NLD","NETHERLANDS" -"1044037160","1044037167","BE","BEL","BELGIUM" -"1044037168","1044037191","NL","NLD","NETHERLANDS" -"1044037192","1044037199","BE","BEL","BELGIUM" -"1044037200","1044037207","NL","NLD","NETHERLANDS" -"1044037208","1044037223","BE","BEL","BELGIUM" -"1044037224","1044037271","NL","NLD","NETHERLANDS" -"1044037272","1044037279","BE","BEL","BELGIUM" -"1044037280","1044037287","NL","NLD","NETHERLANDS" -"1044037288","1044037295","BE","BEL","BELGIUM" -"1044037296","1044037667","NL","NLD","NETHERLANDS" -"1044037668","1044037671","BE","BEL","BELGIUM" -"1044037672","1044037703","NL","NLD","NETHERLANDS" -"1044037704","1044037711","BE","BEL","BELGIUM" -"1044037712","1044037735","NL","NLD","NETHERLANDS" -"1044037736","1044037743","BE","BEL","BELGIUM" -"1044037744","1044037767","NL","NLD","NETHERLANDS" -"1044037768","1044037783","BE","BEL","BELGIUM" -"1044037784","1044037791","NL","NLD","NETHERLANDS" -"1044037792","1044037823","BE","BEL","BELGIUM" -"1044037824","1044037831","NL","NLD","NETHERLANDS" -"1044037832","1044037839","BE","BEL","BELGIUM" -"1044037840","1044037855","NL","NLD","NETHERLANDS" -"1044037856","1044037887","BE","BEL","BELGIUM" -"1044037888","1044038143","NL","NLD","NETHERLANDS" -"1044038144","1044038527","BE","BEL","BELGIUM" -"1044038528","1044038535","NL","NLD","NETHERLANDS" -"1044038536","1044038543","BE","BEL","BELGIUM" -"1044038544","1044038559","NL","NLD","NETHERLANDS" -"1044038560","1044038567","BE","BEL","BELGIUM" -"1044038568","1044038591","NL","NLD","NETHERLANDS" -"1044038592","1044038599","BE","BEL","BELGIUM" -"1044038600","1044038615","NL","NLD","NETHERLANDS" -"1044038616","1044038623","BE","BEL","BELGIUM" -"1044038624","1044038639","NL","NLD","NETHERLANDS" -"1044038640","1044038647","BE","BEL","BELGIUM" -"1044038648","1044038783","NL","NLD","NETHERLANDS" -"1044038784","1044038911","BE","BEL","BELGIUM" -"1044038912","1044038919","NL","NLD","NETHERLANDS" -"1044038920","1044038927","BE","BEL","BELGIUM" -"1044038928","1044038935","NL","NLD","NETHERLANDS" -"1044038936","1044038943","BE","BEL","BELGIUM" -"1044038944","1044039687","NL","NLD","NETHERLANDS" -"1044039688","1044039695","BE","BEL","BELGIUM" -"1044039696","1044039751","NL","NLD","NETHERLANDS" -"1044039752","1044039759","BE","BEL","BELGIUM" -"1044039760","1044039775","NL","NLD","NETHERLANDS" -"1044039776","1044039855","BE","BEL","BELGIUM" -"1044039856","1044039999","NL","NLD","NETHERLANDS" -"1044040000","1044040015","BE","BEL","BELGIUM" -"1044040016","1044040063","NL","NLD","NETHERLANDS" -"1044040064","1044040095","BE","BEL","BELGIUM" -"1044040096","1044040103","NL","NLD","NETHERLANDS" -"1044040104","1044040111","BE","BEL","BELGIUM" -"1044040112","1044040231","NL","NLD","NETHERLANDS" -"1044040232","1044040239","BE","BEL","BELGIUM" -"1044040240","1044040255","NL","NLD","NETHERLANDS" -"1044040256","1044040703","BE","BEL","BELGIUM" -"1044040704","1044041727","NL","NLD","NETHERLANDS" -"1044041728","1044043775","BE","BEL","BELGIUM" -"1044043776","1044043783","NL","NLD","NETHERLANDS" -"1044043784","1044043787","BE","BEL","BELGIUM" -"1044043788","1044043791","NL","NLD","NETHERLANDS" -"1044043792","1044043795","BE","BEL","BELGIUM" -"1044043796","1044043799","NL","NLD","NETHERLANDS" -"1044043800","1044043803","BE","BEL","BELGIUM" -"1044043804","1044043807","NL","NLD","NETHERLANDS" -"1044043808","1044043811","BE","BEL","BELGIUM" -"1044043812","1044043823","NL","NLD","NETHERLANDS" -"1044043824","1044043827","BE","BEL","BELGIUM" -"1044043828","1044043835","NL","NLD","NETHERLANDS" -"1044043836","1044043847","BE","BEL","BELGIUM" -"1044043848","1044043851","NL","NLD","NETHERLANDS" -"1044043852","1044043879","BE","BEL","BELGIUM" -"1044043880","1044043883","NL","NLD","NETHERLANDS" -"1044043884","1044043895","BE","BEL","BELGIUM" -"1044043896","1044043903","NL","NLD","NETHERLANDS" -"1044043904","1044043907","BE","BEL","BELGIUM" -"1044043908","1044043919","NL","NLD","NETHERLANDS" -"1044043920","1044043927","BE","BEL","BELGIUM" -"1044043928","1044043931","NL","NLD","NETHERLANDS" -"1044043932","1044043935","BE","BEL","BELGIUM" -"1044043936","1044043943","NL","NLD","NETHERLANDS" -"1044043944","1044043955","BE","BEL","BELGIUM" -"1044043956","1044043971","NL","NLD","NETHERLANDS" -"1044043972","1044043975","BE","BEL","BELGIUM" -"1044043976","1044043987","NL","NLD","NETHERLANDS" -"1044043988","1044043999","BE","BEL","BELGIUM" -"1044044000","1044044003","NL","NLD","NETHERLANDS" -"1044044004","1044044007","BE","BEL","BELGIUM" -"1044044008","1044044011","NL","NLD","NETHERLANDS" -"1044044012","1044044015","BE","BEL","BELGIUM" -"1044044016","1044044019","NL","NLD","NETHERLANDS" -"1044044020","1044044027","BE","BEL","BELGIUM" -"1044044028","1044044035","NL","NLD","NETHERLANDS" -"1044044036","1044044043","BE","BEL","BELGIUM" -"1044044044","1044044051","NL","NLD","NETHERLANDS" -"1044044052","1044044055","BE","BEL","BELGIUM" -"1044044056","1044044059","NL","NLD","NETHERLANDS" -"1044044060","1044044071","BE","BEL","BELGIUM" -"1044044072","1044044083","NL","NLD","NETHERLANDS" -"1044044084","1044044099","BE","BEL","BELGIUM" -"1044044100","1044044119","NL","NLD","NETHERLANDS" -"1044044120","1044044131","BE","BEL","BELGIUM" -"1044044132","1044044135","NL","NLD","NETHERLANDS" -"1044044136","1044044143","BE","BEL","BELGIUM" -"1044044144","1044044163","NL","NLD","NETHERLANDS" -"1044044164","1044044167","BE","BEL","BELGIUM" -"1044044168","1044044171","NL","NLD","NETHERLANDS" -"1044044172","1044044187","BE","BEL","BELGIUM" -"1044044188","1044044215","NL","NLD","NETHERLANDS" -"1044044216","1044044223","BE","BEL","BELGIUM" -"1044044224","1044044243","NL","NLD","NETHERLANDS" -"1044044244","1044044247","BE","BEL","BELGIUM" -"1044044248","1044044251","NL","NLD","NETHERLANDS" -"1044044252","1044045311","BE","BEL","BELGIUM" -"1044045312","1044045695","NL","NLD","NETHERLANDS" -"1044045696","1044045911","BE","BEL","BELGIUM" -"1044045912","1044045919","NL","NLD","NETHERLANDS" -"1044045920","1044046079","BE","BEL","BELGIUM" -"1044046080","1044046223","NL","NLD","NETHERLANDS" -"1044046224","1044046231","BE","BEL","BELGIUM" -"1044046232","1044046239","NL","NLD","NETHERLANDS" -"1044046240","1044046319","BE","BEL","BELGIUM" -"1044046320","1044046327","NL","NLD","NETHERLANDS" -"1044046328","1044051987","BE","BEL","BELGIUM" -"1044051988","1044051991","NL","NLD","NETHERLANDS" -"1044051992","1044052011","BE","BEL","BELGIUM" -"1044052012","1044052015","NL","NLD","NETHERLANDS" -"1044052016","1044052031","BE","BEL","BELGIUM" -"1044052032","1044052039","NL","NLD","NETHERLANDS" -"1044052040","1044052063","BE","BEL","BELGIUM" -"1044052064","1044052067","NL","NLD","NETHERLANDS" -"1044052068","1044052107","BE","BEL","BELGIUM" -"1044052108","1044052111","NL","NLD","NETHERLANDS" -"1044052112","1044052131","BE","BEL","BELGIUM" -"1044052132","1044052135","NL","NLD","NETHERLANDS" -"1044052136","1044052223","BE","BEL","BELGIUM" -"1044052224","1044052227","NL","NLD","NETHERLANDS" -"1044052228","1044052255","BE","BEL","BELGIUM" -"1044052256","1044052259","NL","NLD","NETHERLANDS" -"1044052260","1044052347","BE","BEL","BELGIUM" -"1044052348","1044052359","NL","NLD","NETHERLANDS" -"1044052360","1044052363","BE","BEL","BELGIUM" -"1044052364","1044052375","NL","NLD","NETHERLANDS" -"1044052376","1044052479","BE","BEL","BELGIUM" -"1044052480","1044052483","NL","NLD","NETHERLANDS" -"1044052484","1044052967","BE","BEL","BELGIUM" -"1044052968","1044052971","NL","NLD","NETHERLANDS" -"1044052972","1044052983","BE","BEL","BELGIUM" -"1044052984","1044052987","NL","NLD","NETHERLANDS" -"1044052988","1044053055","BE","BEL","BELGIUM" -"1044053056","1044053063","NL","NLD","NETHERLANDS" -"1044053064","1044053255","BE","BEL","BELGIUM" -"1044053256","1044053263","NL","NLD","NETHERLANDS" -"1044053264","1044053455","BE","BEL","BELGIUM" -"1044053456","1044053463","NL","NLD","NETHERLANDS" -"1044053464","1044053503","BE","BEL","BELGIUM" -"1044053504","1044059263","NL","NLD","NETHERLANDS" -"1044059264","1044059935","BE","BEL","BELGIUM" -"1044059936","1044060031","NL","NLD","NETHERLANDS" -"1044060032","1044060063","BE","BEL","BELGIUM" -"1044060064","1044061191","NL","NLD","NETHERLANDS" -"1044061192","1044061223","BE","BEL","BELGIUM" -"1044061224","1044061263","NL","NLD","NETHERLANDS" -"1044061264","1044061271","BE","BEL","BELGIUM" -"1044061272","1044061391","NL","NLD","NETHERLANDS" -"1044061392","1044061399","BE","BEL","BELGIUM" -"1044061400","1044061431","NL","NLD","NETHERLANDS" -"1044061432","1044061439","BE","BEL","BELGIUM" -"1044061440","1044061759","NL","NLD","NETHERLANDS" -"1044061760","1044061775","BE","BEL","BELGIUM" -"1044061776","1044061783","NL","NLD","NETHERLANDS" -"1044061784","1044061799","BE","BEL","BELGIUM" -"1044061800","1044061831","NL","NLD","NETHERLANDS" -"1044061832","1044061839","BE","BEL","BELGIUM" -"1044061840","1044061879","NL","NLD","NETHERLANDS" -"1044061880","1044061895","BE","BEL","BELGIUM" -"1044061896","1044061919","NL","NLD","NETHERLANDS" -"1044061920","1044061951","BE","BEL","BELGIUM" -"1044061952","1044062015","NL","NLD","NETHERLANDS" -"1044062016","1044062047","BE","BEL","BELGIUM" -"1044062048","1044062079","NL","NLD","NETHERLANDS" -"1044062080","1044062087","BE","BEL","BELGIUM" -"1044062088","1044062103","NL","NLD","NETHERLANDS" -"1044062104","1044062119","BE","BEL","BELGIUM" -"1044062120","1044062127","NL","NLD","NETHERLANDS" -"1044062128","1044062135","BE","BEL","BELGIUM" -"1044062136","1044062175","NL","NLD","NETHERLANDS" -"1044062176","1044062199","BE","BEL","BELGIUM" -"1044062200","1044062223","NL","NLD","NETHERLANDS" -"1044062224","1044062239","BE","BEL","BELGIUM" -"1044062240","1044062375","NL","NLD","NETHERLANDS" -"1044062376","1044062383","BE","BEL","BELGIUM" -"1044062384","1044062399","NL","NLD","NETHERLANDS" -"1044062400","1044062415","BE","BEL","BELGIUM" -"1044062416","1044062455","NL","NLD","NETHERLANDS" -"1044062456","1044062471","BE","BEL","BELGIUM" -"1044062472","1044062503","NL","NLD","NETHERLANDS" -"1044062504","1044062527","BE","BEL","BELGIUM" -"1044062528","1044062535","NL","NLD","NETHERLANDS" -"1044062536","1044062543","BE","BEL","BELGIUM" -"1044062544","1044062575","NL","NLD","NETHERLANDS" -"1044062576","1044062583","BE","BEL","BELGIUM" -"1044062584","1044062591","NL","NLD","NETHERLANDS" -"1044062592","1044062599","BE","BEL","BELGIUM" -"1044062600","1044062607","NL","NLD","NETHERLANDS" -"1044062608","1044062623","BE","BEL","BELGIUM" -"1044062624","1044062647","NL","NLD","NETHERLANDS" -"1044062648","1044062655","BE","BEL","BELGIUM" -"1044062656","1044062663","NL","NLD","NETHERLANDS" -"1044062664","1044062671","BE","BEL","BELGIUM" -"1044062672","1044063231","NL","NLD","NETHERLANDS" -"1044063232","1044063355","BE","BEL","BELGIUM" -"1044063356","1044063363","NL","NLD","NETHERLANDS" -"1044063364","1044067327","BE","BEL","BELGIUM" -"1044067328","1044068351","NL","NLD","NETHERLANDS" -"1044068352","1044068991","BE","BEL","BELGIUM" -"1044068992","1044069631","NL","NLD","NETHERLANDS" -"1044069632","1044070399","BE","BEL","BELGIUM" -"1044070400","1044076607","NL","NLD","NETHERLANDS" -"1044076608","1044076799","BE","BEL","BELGIUM" -"1044076800","1044092927","NL","NLD","NETHERLANDS" -"1044092928","1044093183","BE","BEL","BELGIUM" -"1044093184","1044094975","NL","NLD","NETHERLANDS" -"1044094976","1044099071","BE","BEL","BELGIUM" -"1044099072","1044103263","NL","NLD","NETHERLANDS" -"1044103264","1044103423","BE","BEL","BELGIUM" -"1044103424","1044103999","NL","NLD","NETHERLANDS" -"1044104000","1044104031","BE","BEL","BELGIUM" -"1044104032","1044104287","NL","NLD","NETHERLANDS" -"1044104288","1044104319","BE","BEL","BELGIUM" -"1044104320","1044104367","NL","NLD","NETHERLANDS" -"1044104368","1044104383","BE","BEL","BELGIUM" -"1044104384","1044104543","NL","NLD","NETHERLANDS" -"1044104544","1044104559","BE","BEL","BELGIUM" -"1044104560","1044104831","NL","NLD","NETHERLANDS" -"1044104832","1044105023","BE","BEL","BELGIUM" -"1044105024","1044105055","NL","NLD","NETHERLANDS" -"1044105056","1044105087","BE","BEL","BELGIUM" -"1044105088","1044105151","NL","NLD","NETHERLANDS" -"1044105152","1044106771","BE","BEL","BELGIUM" -"1044106772","1044106775","NL","NLD","NETHERLANDS" -"1044106776","1044106787","BE","BEL","BELGIUM" -"1044106788","1044106795","NL","NLD","NETHERLANDS" -"1044106796","1044106807","BE","BEL","BELGIUM" -"1044106808","1044106815","NL","NLD","NETHERLANDS" -"1044106816","1044107263","BE","BEL","BELGIUM" -"1044107264","1044111359","NL","NLD","NETHERLANDS" -"1044111360","1044115455","BE","BEL","BELGIUM" -"1044115456","1044117503","NL","NLD","NETHERLANDS" -"1044117504","1044117551","BE","BEL","BELGIUM" -"1044117552","1044117567","NL","NLD","NETHERLANDS" -"1044117568","1044118527","BE","BEL","BELGIUM" -"1044118528","1044119551","NL","NLD","NETHERLANDS" -"1044119552","1044152319","GB","GBR","UNITED KINGDOM" -"1044152320","1044185087","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1044185088","1044193279","RU","RUS","RUSSIAN FEDERATION" -"1044193280","1044201471","PL","POL","POLAND" -"1044201472","1044217855","FI","FIN","FINLAND" -"1044217856","1044226047","DK","DNK","DENMARK" -"1044226048","1044234239","OM","OMN","OMAN" -"1044250624","1044251391","BE","BEL","BELGIUM" -"1044251648","1044252415","BE","BEL","BELGIUM" -"1044252928","1044253439","BE","BEL","BELGIUM" -"1044253696","1044254463","BE","BEL","BELGIUM" -"1044254976","1044255487","BE","BEL","BELGIUM" -"1044256000","1044256511","BE","BEL","BELGIUM" -"1044256768","1044257535","BE","BEL","BELGIUM" -"1044257792","1044258559","BE","BEL","BELGIUM" -"1044259072","1044259583","BE","BEL","BELGIUM" -"1044260096","1044261631","BE","BEL","BELGIUM" -"1044262144","1044262399","BE","BEL","BELGIUM" -"1044263168","1044263423","BE","BEL","BELGIUM" -"1044264192","1044264447","BE","BEL","BELGIUM" -"1044265216","1044265471","BE","BEL","BELGIUM" -"1044265984","1044266751","BE","BEL","BELGIUM" -"1044267520","1044269567","BE","BEL","BELGIUM" -"1044270080","1044271615","BE","BEL","BELGIUM" -"1044272128","1044272383","BE","BEL","BELGIUM" -"1044272896","1044273151","BE","BEL","BELGIUM" -"1044283392","1044316159","FR","FRA","FRANCE" -"1044316160","1044332543","NO","NOR","NORWAY" -"1044332544","1044348927","RU","RUS","RUSSIAN FEDERATION" -"1044348928","1044365311","LV","LVA","LATVIA" -"1044365312","1044381695","SE","SWE","SWEDEN" -"1044381696","1044384511","RU","RUS","RUSSIAN FEDERATION" -"1044384512","1044384767","KZ","KAZ","KAZAKHSTAN" -"1044384768","1044389887","RU","RUS","RUSSIAN FEDERATION" -"1044389888","1044398079","FR","FRA","FRANCE" -"1044398080","1044414463","UA","UKR","UKRAINE" -"1044414464","1044447231","GB","GBR","UNITED KINGDOM" -"1044447232","1044451583","SE","SWE","SWEDEN" -"1044451584","1044451839","NO","NOR","NORWAY" -"1044451840","1044453183","SE","SWE","SWEDEN" -"1044453184","1044453263","NO","NOR","NORWAY" -"1044453264","1044454399","SE","SWE","SWEDEN" -"1044454400","1044454415","NO","NOR","NORWAY" -"1044454416","1044454423","SE","SWE","SWEDEN" -"1044454424","1044454427","NO","NOR","NORWAY" -"1044454428","1044454463","SE","SWE","SWEDEN" -"1044454464","1044454495","NO","NOR","NORWAY" -"1044454496","1044454511","SE","SWE","SWEDEN" -"1044454512","1044454559","NO","NOR","NORWAY" -"1044454560","1044454583","SE","SWE","SWEDEN" -"1044454584","1044454655","NO","NOR","NORWAY" -"1044454656","1044454911","SE","SWE","SWEDEN" -"1044454912","1044455423","NO","NOR","NORWAY" -"1044455424","1044463615","EE","EST","ESTONIA" -"1044463616","1044479999","SE","SWE","SWEDEN" -"1044480000","1044488191","CH","CHE","SWITZERLAND" -"1044488192","1044496383","SK","SVK","SLOVAKIA" -"1044496384","1044512767","EE","EST","ESTONIA" -"1044512768","1044578303","DK","DNK","DENMARK" -"1044578304","1044580607","DE","DEU","GERMANY" -"1044580608","1044586495","GB","GBR","UNITED KINGDOM" -"1044586496","1044587007","DE","DEU","GERMANY" -"1044587008","1044587519","GB","GBR","UNITED KINGDOM" -"1044587520","1044587775","DE","DEU","GERMANY" -"1044587776","1044588031","GB","GBR","UNITED KINGDOM" -"1044588032","1044588287","DE","DEU","GERMANY" -"1044588288","1044588575","GB","GBR","UNITED KINGDOM" -"1044588576","1044588607","DE","DEU","GERMANY" -"1044588608","1044589055","GB","GBR","UNITED KINGDOM" -"1044589056","1044590463","DE","DEU","GERMANY" -"1044590464","1044590591","GB","GBR","UNITED KINGDOM" -"1044590592","1044590671","DE","DEU","GERMANY" -"1044590672","1044590847","GB","GBR","UNITED KINGDOM" -"1044590848","1044591359","DE","DEU","GERMANY" -"1044591360","1044591871","GB","GBR","UNITED KINGDOM" -"1044591872","1044592127","DE","DEU","GERMANY" -"1044592128","1044592143","GB","GBR","UNITED KINGDOM" -"1044592144","1044592159","DE","DEU","GERMANY" -"1044592160","1044592191","GB","GBR","UNITED KINGDOM" -"1044592192","1044592255","DE","DEU","GERMANY" -"1044592256","1044592639","GB","GBR","UNITED KINGDOM" -"1044592640","1044592655","DE","DEU","GERMANY" -"1044592656","1044592831","GB","GBR","UNITED KINGDOM" -"1044592832","1044594175","DE","DEU","GERMANY" -"1044594176","1044625407","GB","GBR","UNITED KINGDOM" -"1044625408","1044625463","DE","DEU","GERMANY" -"1044625464","1044625471","GB","GBR","UNITED KINGDOM" -"1044625472","1044625535","DE","DEU","GERMANY" -"1044625536","1044625663","GB","GBR","UNITED KINGDOM" -"1044625664","1044625679","DE","DEU","GERMANY" -"1044625680","1044627455","GB","GBR","UNITED KINGDOM" -"1044627456","1044628479","DE","DEU","GERMANY" -"1044628480","1044629503","GB","GBR","UNITED KINGDOM" -"1044629504","1044629759","DE","DEU","GERMANY" -"1044629760","1044630527","GB","GBR","UNITED KINGDOM" -"1044630528","1044630783","DE","DEU","GERMANY" -"1044630784","1044631551","GB","GBR","UNITED KINGDOM" -"1044631552","1044631935","DE","DEU","GERMANY" -"1044631936","1044631951","GB","GBR","UNITED KINGDOM" -"1044631952","1044631967","DE","DEU","GERMANY" -"1044631968","1044632319","GB","GBR","UNITED KINGDOM" -"1044632320","1044633855","DE","DEU","GERMANY" -"1044633856","1044634111","GB","GBR","UNITED KINGDOM" -"1044634112","1044634367","DE","DEU","GERMANY" -"1044634368","1044634623","GB","GBR","UNITED KINGDOM" -"1044634624","1044634879","DE","DEU","GERMANY" -"1044634880","1044635135","GB","GBR","UNITED KINGDOM" -"1044635136","1044635391","DE","DEU","GERMANY" -"1044635392","1044635647","GB","GBR","UNITED KINGDOM" -"1044635648","1044636159","US","USA","UNITED STATES" -"1044636160","1044638207","DE","DEU","GERMANY" -"1044638208","1044638223","GB","GBR","UNITED KINGDOM" -"1044638224","1044638239","DE","DEU","GERMANY" -"1044638240","1044638463","GB","GBR","UNITED KINGDOM" -"1044638464","1044638719","DE","DEU","GERMANY" -"1044638720","1044639743","GB","GBR","UNITED KINGDOM" -"1044639744","1044643327","DE","DEU","GERMANY" -"1044643328","1044643839","GB","GBR","UNITED KINGDOM" -"1044643840","1044652031","DE","DEU","GERMANY" -"1044660224","1044664895","GR","GRC","GREECE" -"1044664896","1044664959","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1044664960","1044668415","GR","GRC","GREECE" -"1044668416","1044676607","BA","BIH","BOSNIA AND HERZEGOVINA" -"1044676608","1044684799","RU","RUS","RUSSIAN FEDERATION" -"1044684800","1044692991","HU","HUN","HUNGARY" -"1044692992","1044701183","AT","AUT","AUSTRIA" -"1044709376","1044717567","RU","RUS","RUSSIAN FEDERATION" -"1044717568","1044742143","GB","GBR","UNITED KINGDOM" -"1044742144","1044750335","KW","KWT","KUWAIT" -"1044750336","1044750351","US","USA","UNITED STATES" -"1044750352","1044750355","HU","HUN","HUNGARY" -"1044750356","1044750359","BE","BEL","BELGIUM" -"1044750360","1044750363","GB","GBR","UNITED KINGDOM" -"1044750364","1044750367","FI","FIN","FINLAND" -"1044750368","1044753151","NL","NLD","NETHERLANDS" -"1044753152","1044753183","DE","DEU","GERMANY" -"1044753184","1044753215","HU","HUN","HUNGARY" -"1044753216","1044758527","NL","NLD","NETHERLANDS" -"1044758528","1044774911","PL","POL","POLAND" -"1044774912","1044840447","NO","NOR","NORWAY" -"1044840448","1044905983","FI","FIN","FINLAND" -"1044905984","1044908031","GB","GBR","UNITED KINGDOM" -"1044908032","1044909055","US","USA","UNITED STATES" -"1044909056","1044916735","GB","GBR","UNITED KINGDOM" -"1044916736","1044917247","DE","DEU","GERMANY" -"1044917248","1044917279","GB","GBR","UNITED KINGDOM" -"1044917280","1044917295","US","USA","UNITED STATES" -"1044917296","1044917311","DE","DEU","GERMANY" -"1044917312","1044917343","GB","GBR","UNITED KINGDOM" -"1044917344","1044917359","DE","DEU","GERMANY" -"1044917360","1044917503","GB","GBR","UNITED KINGDOM" -"1044917504","1044917759","DE","DEU","GERMANY" -"1044917760","1044917823","GB","GBR","UNITED KINGDOM" -"1044917824","1044918271","DE","DEU","GERMANY" -"1044918272","1044918287","GB","GBR","UNITED KINGDOM" -"1044918288","1044919295","DE","DEU","GERMANY" -"1044919296","1044920191","GB","GBR","UNITED KINGDOM" -"1044920192","1044920319","DE","DEU","GERMANY" -"1044920320","1044921343","GB","GBR","UNITED KINGDOM" -"1044921344","1044922367","US","USA","UNITED STATES" -"1044922368","1044930559","DE","DEU","GERMANY" -"1044930560","1044930695","BE","BEL","BELGIUM" -"1044930696","1044930703","GB","GBR","UNITED KINGDOM" -"1044930704","1044930775","BE","BEL","BELGIUM" -"1044930776","1044930783","GB","GBR","UNITED KINGDOM" -"1044930784","1044930791","BE","BEL","BELGIUM" -"1044930792","1044930795","GB","GBR","UNITED KINGDOM" -"1044930796","1044930799","BE","BEL","BELGIUM" -"1044930800","1044930807","GB","GBR","UNITED KINGDOM" -"1044930808","1044930823","BE","BEL","BELGIUM" -"1044930824","1044930831","GB","GBR","UNITED KINGDOM" -"1044930832","1044930847","BE","BEL","BELGIUM" -"1044930848","1044930879","FR","FRA","FRANCE" -"1044930880","1044930911","BE","BEL","BELGIUM" -"1044930912","1044930927","DE","DEU","GERMANY" -"1044930928","1044930967","BE","BEL","BELGIUM" -"1044930968","1044930979","GB","GBR","UNITED KINGDOM" -"1044930980","1044931375","BE","BEL","BELGIUM" -"1044931376","1044931391","GB","GBR","UNITED KINGDOM" -"1044931392","1044931407","BE","BEL","BELGIUM" -"1044931408","1044931423","GB","GBR","UNITED KINGDOM" -"1044931424","1044931487","BE","BEL","BELGIUM" -"1044931488","1044931495","GB","GBR","UNITED KINGDOM" -"1044931496","1044931535","BE","BEL","BELGIUM" -"1044931536","1044931543","GB","GBR","UNITED KINGDOM" -"1044931544","1044931551","BE","BEL","BELGIUM" -"1044931552","1044931567","GB","GBR","UNITED KINGDOM" -"1044931568","1044931583","BE","BEL","BELGIUM" -"1044931584","1044931623","GB","GBR","UNITED KINGDOM" -"1044931624","1044931759","BE","BEL","BELGIUM" -"1044931760","1044931775","GB","GBR","UNITED KINGDOM" -"1044931776","1044931831","BE","BEL","BELGIUM" -"1044931832","1044931835","GB","GBR","UNITED KINGDOM" -"1044931836","1044931855","BE","BEL","BELGIUM" -"1044931856","1044931871","GB","GBR","UNITED KINGDOM" -"1044931872","1044931903","BE","BEL","BELGIUM" -"1044931904","1044931911","GB","GBR","UNITED KINGDOM" -"1044931912","1044931915","BE","BEL","BELGIUM" -"1044931916","1044931919","GB","GBR","UNITED KINGDOM" -"1044931920","1044931935","BE","BEL","BELGIUM" -"1044931936","1044931951","GB","GBR","UNITED KINGDOM" -"1044931952","1044931975","BE","BEL","BELGIUM" -"1044931976","1044931983","GB","GBR","UNITED KINGDOM" -"1044931984","1044932063","BE","BEL","BELGIUM" -"1044932064","1044932087","GB","GBR","UNITED KINGDOM" -"1044932088","1044932399","BE","BEL","BELGIUM" -"1044932400","1044932407","GB","GBR","UNITED KINGDOM" -"1044932408","1044932503","BE","BEL","BELGIUM" -"1044932504","1044932543","GB","GBR","UNITED KINGDOM" -"1044932544","1044932675","BE","BEL","BELGIUM" -"1044932676","1044932687","GB","GBR","UNITED KINGDOM" -"1044932688","1044932703","BE","BEL","BELGIUM" -"1044932704","1044932707","GB","GBR","UNITED KINGDOM" -"1044932708","1044932719","BE","BEL","BELGIUM" -"1044932720","1044932727","GB","GBR","UNITED KINGDOM" -"1044932728","1044932735","BE","BEL","BELGIUM" -"1044932736","1044932799","GB","GBR","UNITED KINGDOM" -"1044932800","1044932831","BE","BEL","BELGIUM" -"1044932832","1044932839","GB","GBR","UNITED KINGDOM" -"1044932840","1044932855","BE","BEL","BELGIUM" -"1044932856","1044932863","GB","GBR","UNITED KINGDOM" -"1044932864","1044932939","BE","BEL","BELGIUM" -"1044932940","1044932947","GB","GBR","UNITED KINGDOM" -"1044932948","1044932951","BE","BEL","BELGIUM" -"1044932952","1044932959","GB","GBR","UNITED KINGDOM" -"1044932960","1044933007","BE","BEL","BELGIUM" -"1044933008","1044933015","GB","GBR","UNITED KINGDOM" -"1044933016","1044933023","BE","BEL","BELGIUM" -"1044933024","1044933039","GB","GBR","UNITED KINGDOM" -"1044933040","1044933055","BE","BEL","BELGIUM" -"1044933056","1044933071","GB","GBR","UNITED KINGDOM" -"1044933072","1044933215","BE","BEL","BELGIUM" -"1044933216","1044933227","GB","GBR","UNITED KINGDOM" -"1044933228","1044933303","BE","BEL","BELGIUM" -"1044933304","1044933311","GB","GBR","UNITED KINGDOM" -"1044933312","1044933359","BE","BEL","BELGIUM" -"1044933360","1044933375","GB","GBR","UNITED KINGDOM" -"1044933376","1044933407","BE","BEL","BELGIUM" -"1044933408","1044933411","GB","GBR","UNITED KINGDOM" -"1044933412","1044933415","BE","BEL","BELGIUM" -"1044933416","1044933439","GB","GBR","UNITED KINGDOM" -"1044933440","1044933615","BE","BEL","BELGIUM" -"1044933616","1044933623","GB","GBR","UNITED KINGDOM" -"1044933624","1044933711","BE","BEL","BELGIUM" -"1044933712","1044933719","GB","GBR","UNITED KINGDOM" -"1044933720","1044933727","BE","BEL","BELGIUM" -"1044933728","1044933735","GB","GBR","UNITED KINGDOM" -"1044933736","1044933743","BE","BEL","BELGIUM" -"1044933744","1044933759","GB","GBR","UNITED KINGDOM" -"1044933760","1044933823","BE","BEL","BELGIUM" -"1044933824","1044933831","GB","GBR","UNITED KINGDOM" -"1044933832","1044933843","BE","BEL","BELGIUM" -"1044933844","1044933847","GB","GBR","UNITED KINGDOM" -"1044933848","1044933863","BE","BEL","BELGIUM" -"1044933864","1044933871","GB","GBR","UNITED KINGDOM" -"1044933872","1044934191","BE","BEL","BELGIUM" -"1044934192","1044934199","GB","GBR","UNITED KINGDOM" -"1044934200","1044934239","BE","BEL","BELGIUM" -"1044934240","1044934247","GB","GBR","UNITED KINGDOM" -"1044934248","1044934359","BE","BEL","BELGIUM" -"1044934360","1044934503","GB","GBR","UNITED KINGDOM" -"1044934504","1044934575","BE","BEL","BELGIUM" -"1044934576","1044934583","GB","GBR","UNITED KINGDOM" -"1044934584","1044934591","BE","BEL","BELGIUM" -"1044934592","1044934599","GB","GBR","UNITED KINGDOM" -"1044934600","1044934719","BE","BEL","BELGIUM" -"1044934720","1044934783","GB","GBR","UNITED KINGDOM" -"1044934784","1044934815","BE","BEL","BELGIUM" -"1044934816","1044934819","GB","GBR","UNITED KINGDOM" -"1044934820","1044934823","BE","BEL","BELGIUM" -"1044934824","1044934911","GB","GBR","UNITED KINGDOM" -"1044934912","1044935027","BE","BEL","BELGIUM" -"1044935028","1044935031","GB","GBR","UNITED KINGDOM" -"1044935032","1044935035","BE","BEL","BELGIUM" -"1044935036","1044935039","GB","GBR","UNITED KINGDOM" -"1044935040","1044935231","BE","BEL","BELGIUM" -"1044935232","1044935247","GB","GBR","UNITED KINGDOM" -"1044935248","1044935279","BE","BEL","BELGIUM" -"1044935280","1044935295","GB","GBR","UNITED KINGDOM" -"1044935296","1044935331","BE","BEL","BELGIUM" -"1044935332","1044935343","GB","GBR","UNITED KINGDOM" -"1044935344","1044935355","BE","BEL","BELGIUM" -"1044935356","1044935391","GB","GBR","UNITED KINGDOM" -"1044935392","1044935407","BE","BEL","BELGIUM" -"1044935408","1044935423","GB","GBR","UNITED KINGDOM" -"1044935424","1044935595","BE","BEL","BELGIUM" -"1044935596","1044935599","GB","GBR","UNITED KINGDOM" -"1044935600","1044935623","BE","BEL","BELGIUM" -"1044935624","1044935631","GB","GBR","UNITED KINGDOM" -"1044935632","1044935743","BE","BEL","BELGIUM" -"1044935744","1044935751","GB","GBR","UNITED KINGDOM" -"1044935752","1044935839","BE","BEL","BELGIUM" -"1044935840","1044935847","GB","GBR","UNITED KINGDOM" -"1044935848","1044935879","BE","BEL","BELGIUM" -"1044935880","1044935887","GB","GBR","UNITED KINGDOM" -"1044935888","1044935903","BE","BEL","BELGIUM" -"1044935904","1044936063","GB","GBR","UNITED KINGDOM" -"1044936064","1044936103","BE","BEL","BELGIUM" -"1044936104","1044936111","GB","GBR","UNITED KINGDOM" -"1044936112","1044936123","BE","BEL","BELGIUM" -"1044936124","1044936151","GB","GBR","UNITED KINGDOM" -"1044936152","1044936207","BE","BEL","BELGIUM" -"1044936208","1044936215","GB","GBR","UNITED KINGDOM" -"1044936216","1044936271","BE","BEL","BELGIUM" -"1044936272","1044936287","GB","GBR","UNITED KINGDOM" -"1044936288","1044936303","BE","BEL","BELGIUM" -"1044936304","1044936311","GB","GBR","UNITED KINGDOM" -"1044936312","1044936335","BE","BEL","BELGIUM" -"1044936336","1044936351","GB","GBR","UNITED KINGDOM" -"1044936352","1044936439","BE","BEL","BELGIUM" -"1044936440","1044936447","GB","GBR","UNITED KINGDOM" -"1044936448","1044936455","BE","BEL","BELGIUM" -"1044936456","1044936463","GB","GBR","UNITED KINGDOM" -"1044936464","1044936495","BE","BEL","BELGIUM" -"1044936496","1044936503","GB","GBR","UNITED KINGDOM" -"1044936504","1044936711","BE","BEL","BELGIUM" -"1044936712","1044936719","GB","GBR","UNITED KINGDOM" -"1044936720","1044937183","BE","BEL","BELGIUM" -"1044937184","1044937187","GB","GBR","UNITED KINGDOM" -"1044937188","1044937287","BE","BEL","BELGIUM" -"1044937288","1044937311","GB","GBR","UNITED KINGDOM" -"1044937312","1044937391","BE","BEL","BELGIUM" -"1044937392","1044937399","GB","GBR","UNITED KINGDOM" -"1044937400","1044937487","BE","BEL","BELGIUM" -"1044937488","1044937503","GB","GBR","UNITED KINGDOM" -"1044937504","1044937527","BE","BEL","BELGIUM" -"1044937528","1044937531","GB","GBR","UNITED KINGDOM" -"1044937532","1044937535","BE","BEL","BELGIUM" -"1044937536","1044937551","GB","GBR","UNITED KINGDOM" -"1044937552","1044937567","BE","BEL","BELGIUM" -"1044937568","1044937583","GB","GBR","UNITED KINGDOM" -"1044937584","1044937591","BE","BEL","BELGIUM" -"1044937592","1044937599","GB","GBR","UNITED KINGDOM" -"1044937600","1044937615","BE","BEL","BELGIUM" -"1044937616","1044937631","GB","GBR","UNITED KINGDOM" -"1044937632","1044937679","BE","BEL","BELGIUM" -"1044937680","1044937695","GB","GBR","UNITED KINGDOM" -"1044937696","1044937703","BE","BEL","BELGIUM" -"1044937704","1044937711","GB","GBR","UNITED KINGDOM" -"1044937712","1044937751","BE","BEL","BELGIUM" -"1044937752","1044937759","GB","GBR","UNITED KINGDOM" -"1044937760","1044937847","BE","BEL","BELGIUM" -"1044937848","1044937887","GB","GBR","UNITED KINGDOM" -"1044937888","1044937903","BE","BEL","BELGIUM" -"1044937904","1044937911","GB","GBR","UNITED KINGDOM" -"1044937912","1044937971","BE","BEL","BELGIUM" -"1044937972","1044937975","GB","GBR","UNITED KINGDOM" -"1044937976","1044938047","BE","BEL","BELGIUM" -"1044938048","1044938079","GB","GBR","UNITED KINGDOM" -"1044938080","1044938103","BE","BEL","BELGIUM" -"1044938104","1044938107","GB","GBR","UNITED KINGDOM" -"1044938108","1044938111","BE","BEL","BELGIUM" -"1044938112","1044938143","GB","GBR","UNITED KINGDOM" -"1044938144","1044938239","BE","BEL","BELGIUM" -"1044938240","1044938271","GB","GBR","UNITED KINGDOM" -"1044938272","1044938367","BE","BEL","BELGIUM" -"1044938368","1044938399","GB","GBR","UNITED KINGDOM" -"1044938400","1044938407","BE","BEL","BELGIUM" -"1044938408","1044938415","GB","GBR","UNITED KINGDOM" -"1044938416","1044938423","BE","BEL","BELGIUM" -"1044938424","1044938431","GB","GBR","UNITED KINGDOM" -"1044938432","1044938487","BE","BEL","BELGIUM" -"1044938488","1044938511","GB","GBR","UNITED KINGDOM" -"1044938512","1044938519","BE","BEL","BELGIUM" -"1044938520","1044938523","GB","GBR","UNITED KINGDOM" -"1044938524","1044938631","BE","BEL","BELGIUM" -"1044938632","1044938639","GB","GBR","UNITED KINGDOM" -"1044938640","1044938655","BE","BEL","BELGIUM" -"1044938656","1044938695","GB","GBR","UNITED KINGDOM" -"1044938696","1044938703","BE","BEL","BELGIUM" -"1044938704","1044946943","GB","GBR","UNITED KINGDOM" -"1044946944","1044955135","UA","UKR","UKRAINE" -"1044955136","1044963327","NL","NLD","NETHERLANDS" -"1044963328","1044971519","FI","FIN","FINLAND" -"1044971520","1044979711","FR","FRA","FRANCE" -"1044979712","1044987903","FI","FIN","FINLAND" -"1044987904","1045004287","BG","BGR","BULGARIA" -"1045004288","1045004671","GB","GBR","UNITED KINGDOM" -"1045004672","1045004751","IE","IRL","IRELAND" -"1045004752","1045018207","GB","GBR","UNITED KINGDOM" -"1045018208","1045018231","FI","FIN","FINLAND" -"1045018232","1045018367","GB","GBR","UNITED KINGDOM" -"1045018368","1045018399","ES","ESP","SPAIN" -"1045018400","1045018431","GB","GBR","UNITED KINGDOM" -"1045018432","1045018495","ES","ESP","SPAIN" -"1045018496","1045020671","GB","GBR","UNITED KINGDOM" -"1045020672","1045037055","NO","NOR","NORWAY" -"1045037056","1045119231","GR","GRC","GREECE" -"1045119232","1045119743","AL","ALB","ALBANIA" -"1045119744","1045135359","GR","GRC","GREECE" -"1045135360","1045141759","DE","DEU","GERMANY" -"1045141760","1045142015","PL","POL","POLAND" -"1045142016","1045154559","DE","DEU","GERMANY" -"1045154560","1045154591","NL","NLD","NETHERLANDS" -"1045154592","1045155071","DE","DEU","GERMANY" -"1045155072","1045155327","CH","CHE","SWITZERLAND" -"1045155328","1045161151","DE","DEU","GERMANY" -"1045161152","1045161183","PT","PRT","PORTUGAL" -"1045161184","1045168127","DE","DEU","GERMANY" -"1045168128","1045233663","RU","RUS","RUSSIAN FEDERATION" -"1045233664","1045241855","GB","GBR","UNITED KINGDOM" -"1045241856","1045250047","IT","ITA","ITALY" -"1045250048","1045266431","CZ","CZE","CZECH REPUBLIC" -"1045266432","1045274623","HU","HUN","HUNGARY" -"1045274624","1045282815","IE","IRL","IRELAND" -"1045282816","1045299199","HU","HUN","HUNGARY" -"1045299200","1045302271","GB","GBR","UNITED KINGDOM" -"1045303296","1045305855","DE","DEU","GERMANY" -"1045307392","1045315583","RU","RUS","RUSSIAN FEDERATION" -"1045315584","1045319679","DE","DEU","GERMANY" -"1045319680","1045323775","RU","RUS","RUSSIAN FEDERATION" -"1045323776","1045364735","FI","FIN","FINLAND" -"1045364736","1045430271","DK","DNK","DENMARK" -"1045430272","1045436911","DE","DEU","GERMANY" -"1045436912","1045436919","GB","GBR","UNITED KINGDOM" -"1045436920","1045446655","DE","DEU","GERMANY" -"1045446656","1045446911","HU","HUN","HUNGARY" -"1045446912","1045447167","SK","SVK","SLOVAKIA" -"1045447168","1045447231","HU","HUN","HUNGARY" -"1045447232","1045447239","CZ","CZE","CZECH REPUBLIC" -"1045447240","1045447263","HU","HUN","HUNGARY" -"1045447264","1045447279","CZ","CZE","CZECH REPUBLIC" -"1045447280","1045447287","HU","HUN","HUNGARY" -"1045447288","1045447295","CZ","CZE","CZECH REPUBLIC" -"1045447296","1045447311","HU","HUN","HUNGARY" -"1045447312","1045447423","CZ","CZE","CZECH REPUBLIC" -"1045447424","1045447431","HU","HUN","HUNGARY" -"1045447432","1045447439","CZ","CZE","CZECH REPUBLIC" -"1045447440","1045447447","HU","HUN","HUNGARY" -"1045447448","1045447471","CZ","CZE","CZECH REPUBLIC" -"1045447472","1045447551","HU","HUN","HUNGARY" -"1045447552","1045448031","CZ","CZE","CZECH REPUBLIC" -"1045448032","1045448039","HU","HUN","HUNGARY" -"1045448040","1045448055","CZ","CZE","CZECH REPUBLIC" -"1045448056","1045448063","HU","HUN","HUNGARY" -"1045448064","1045448159","CZ","CZE","CZECH REPUBLIC" -"1045448160","1045448191","HU","HUN","HUNGARY" -"1045448192","1045448239","CZ","CZE","CZECH REPUBLIC" -"1045448240","1045448263","HU","HUN","HUNGARY" -"1045448264","1045448543","CZ","CZE","CZECH REPUBLIC" -"1045448544","1045448559","SK","SVK","SLOVAKIA" -"1045448560","1045448703","CZ","CZE","CZECH REPUBLIC" -"1045448704","1045448767","HU","HUN","HUNGARY" -"1045448768","1045452543","CZ","CZE","CZECH REPUBLIC" -"1045452544","1045452799","SK","SVK","SLOVAKIA" -"1045452800","1045454847","CZ","CZE","CZECH REPUBLIC" -"1045454848","1045460735","DE","DEU","GERMANY" -"1045460736","1045460991","NL","NLD","NETHERLANDS" -"1045460992","1045461503","FR","FRA","FRANCE" -"1045461504","1045461631","DE","DEU","GERMANY" -"1045461632","1045461695","FR","FRA","FRANCE" -"1045461696","1045461703","DE","DEU","GERMANY" -"1045461704","1045461711","GB","GBR","UNITED KINGDOM" -"1045461712","1045461719","FR","FRA","FRANCE" -"1045461720","1045461727","IT","ITA","ITALY" -"1045461728","1045461735","ES","ESP","SPAIN" -"1045461736","1045461743","NL","NLD","NETHERLANDS" -"1045461744","1045463039","DE","DEU","GERMANY" -"1045463040","1045471231","FI","FIN","FINLAND" -"1045471232","1045479423","UA","UKR","UKRAINE" -"1045479424","1045487615","SE","SWE","SWEDEN" -"1045487616","1045495807","LT","LTU","LITHUANIA" -"1045495808","1045692415","ES","ESP","SPAIN" -"1045692416","1045700607","LV","LVA","LATVIA" -"1045700608","1045708799","KZ","KAZ","KAZAKHSTAN" -"1045708800","1045716991","LB","LBN","LEBANON" -"1045716992","1045725183","RU","RUS","RUSSIAN FEDERATION" -"1045725184","1045733375","CZ","CZE","CZECH REPUBLIC" -"1045733376","1045741567","GB","GBR","UNITED KINGDOM" -"1045741568","1045742031","SE","SWE","SWEDEN" -"1045742032","1045742039","GB","GBR","UNITED KINGDOM" -"1045742040","1045742047","SE","SWE","SWEDEN" -"1045742048","1045742111","GB","GBR","UNITED KINGDOM" -"1045742112","1045742127","SE","SWE","SWEDEN" -"1045742128","1045742175","GB","GBR","UNITED KINGDOM" -"1045742176","1045742199","SE","SWE","SWEDEN" -"1045742200","1045742207","GB","GBR","UNITED KINGDOM" -"1045742208","1045742239","SE","SWE","SWEDEN" -"1045742240","1045742247","GB","GBR","UNITED KINGDOM" -"1045742248","1045742271","SE","SWE","SWEDEN" -"1045742272","1045742335","GB","GBR","UNITED KINGDOM" -"1045742336","1045742351","SE","SWE","SWEDEN" -"1045742352","1045742367","GB","GBR","UNITED KINGDOM" -"1045742368","1045742383","SE","SWE","SWEDEN" -"1045742384","1045742391","GB","GBR","UNITED KINGDOM" -"1045742392","1045742495","SE","SWE","SWEDEN" -"1045742496","1045742535","GB","GBR","UNITED KINGDOM" -"1045742536","1045742551","SE","SWE","SWEDEN" -"1045742552","1045742559","GB","GBR","UNITED KINGDOM" -"1045742560","1045742763","SE","SWE","SWEDEN" -"1045742764","1045742767","GB","GBR","UNITED KINGDOM" -"1045742768","1045742783","SE","SWE","SWEDEN" -"1045742784","1045742831","GB","GBR","UNITED KINGDOM" -"1045742832","1045742839","SE","SWE","SWEDEN" -"1045742840","1045742847","GB","GBR","UNITED KINGDOM" -"1045742848","1045743023","SE","SWE","SWEDEN" -"1045743024","1045743031","GB","GBR","UNITED KINGDOM" -"1045743032","1045743043","SE","SWE","SWEDEN" -"1045743044","1045743063","GB","GBR","UNITED KINGDOM" -"1045743064","1045743095","SE","SWE","SWEDEN" -"1045743096","1045743099","GB","GBR","UNITED KINGDOM" -"1045743100","1045743679","SE","SWE","SWEDEN" -"1045743680","1045743743","GB","GBR","UNITED KINGDOM" -"1045743744","1045743783","SE","SWE","SWEDEN" -"1045743784","1045743791","GB","GBR","UNITED KINGDOM" -"1045743792","1045743803","SE","SWE","SWEDEN" -"1045743804","1045743807","GB","GBR","UNITED KINGDOM" -"1045743808","1045743999","SE","SWE","SWEDEN" -"1045744000","1045744007","LU","LUX","LUXEMBOURG" -"1045744008","1045744063","GB","GBR","UNITED KINGDOM" -"1045744064","1045744639","SE","SWE","SWEDEN" -"1045744640","1045745407","GB","GBR","UNITED KINGDOM" -"1045745408","1045745607","SE","SWE","SWEDEN" -"1045745608","1045745615","FI","FIN","FINLAND" -"1045745616","1045745623","GB","GBR","UNITED KINGDOM" -"1045745624","1045745639","SE","SWE","SWEDEN" -"1045745640","1045745647","GB","GBR","UNITED KINGDOM" -"1045745648","1045745655","SE","SWE","SWEDEN" -"1045745656","1045745663","GB","GBR","UNITED KINGDOM" -"1045745664","1045745695","SE","SWE","SWEDEN" -"1045745696","1045745759","GB","GBR","UNITED KINGDOM" -"1045745760","1045745768","SE","SWE","SWEDEN" -"1045745769","1045745879","GB","GBR","UNITED KINGDOM" -"1045745880","1045745919","SE","SWE","SWEDEN" -"1045745920","1045745999","GB","GBR","UNITED KINGDOM" -"1045746000","1045746079","SE","SWE","SWEDEN" -"1045746080","1045746095","GB","GBR","UNITED KINGDOM" -"1045746096","1045746163","SE","SWE","SWEDEN" -"1045746164","1045746175","GB","GBR","UNITED KINGDOM" -"1045746176","1045746431","SE","SWE","SWEDEN" -"1045746432","1045746447","GB","GBR","UNITED KINGDOM" -"1045746448","1045746463","SE","SWE","SWEDEN" -"1045746464","1045746543","GB","GBR","UNITED KINGDOM" -"1045746544","1045746559","SE","SWE","SWEDEN" -"1045746560","1045746687","GB","GBR","UNITED KINGDOM" -"1045746688","1045747071","SE","SWE","SWEDEN" -"1045747072","1045747199","GB","GBR","UNITED KINGDOM" -"1045747200","1045747455","SE","SWE","SWEDEN" -"1045747456","1045747583","GB","GBR","UNITED KINGDOM" -"1045747584","1045747615","SE","SWE","SWEDEN" -"1045747616","1045747679","GB","GBR","UNITED KINGDOM" -"1045747680","1045747711","SE","SWE","SWEDEN" -"1045747712","1045747743","GB","GBR","UNITED KINGDOM" -"1045747744","1045747775","SE","SWE","SWEDEN" -"1045747776","1045747815","GB","GBR","UNITED KINGDOM" -"1045747816","1045747823","SE","SWE","SWEDEN" -"1045747824","1045747839","GB","GBR","UNITED KINGDOM" -"1045747840","1045747871","SE","SWE","SWEDEN" -"1045747872","1045747919","GB","GBR","UNITED KINGDOM" -"1045747920","1045747935","SE","SWE","SWEDEN" -"1045747936","1045747967","GB","GBR","UNITED KINGDOM" -"1045747968","1045748223","SE","SWE","SWEDEN" -"1045748224","1045748239","GB","GBR","UNITED KINGDOM" -"1045748240","1045748287","SE","SWE","SWEDEN" -"1045748288","1045748295","GB","GBR","UNITED KINGDOM" -"1045748296","1045748303","SE","SWE","SWEDEN" -"1045748304","1045748319","GB","GBR","UNITED KINGDOM" -"1045748320","1045748351","SE","SWE","SWEDEN" -"1045748352","1045748391","GB","GBR","UNITED KINGDOM" -"1045748392","1045748395","SE","SWE","SWEDEN" -"1045748396","1045748399","GB","GBR","UNITED KINGDOM" -"1045748400","1045748407","SE","SWE","SWEDEN" -"1045748408","1045748463","GB","GBR","UNITED KINGDOM" -"1045748464","1045748479","SE","SWE","SWEDEN" -"1045748480","1045749503","GB","GBR","UNITED KINGDOM" -"1045749504","1045749759","SE","SWE","SWEDEN" -"1045749760","1045757951","GB","GBR","UNITED KINGDOM" -"1045757952","1045790719","LV","LVA","LATVIA" -"1045790720","1045798911","FR","FRA","FRANCE" -"1045798912","1045889023","IT","ITA","ITALY" -"1045889024","1045921791","ES","ESP","SPAIN" -"1045921792","1045954559","PL","POL","POLAND" -"1045954560","1045987327","BE","BEL","BELGIUM" -"1045987328","1046020095","SE","SWE","SWEDEN" -"1046020096","1046028287","AM","ARM","ARMENIA" -"1046028288","1046036479","NO","NOR","NORWAY" -"1046036480","1046052863","PL","POL","POLAND" -"1046052864","1046061055","GB","GBR","UNITED KINGDOM" -"1046061056","1046069247","DE","DEU","GERMANY" -"1046069248","1046085631","RU","RUS","RUSSIAN FEDERATION" -"1046085632","1046150143","IL","ISR","ISRAEL" -"1046150144","1046150399","LR","LBR","LIBERIA" -"1046150400","1046151167","IL","ISR","ISRAEL" -"1046151168","1046216703","DE","DEU","GERMANY" -"1046216704","1046225647","NO","NOR","NORWAY" -"1046225648","1046225655","SE","SWE","SWEDEN" -"1046225656","1046229111","NO","NOR","NORWAY" -"1046229112","1046229119","SE","SWE","SWEDEN" -"1046229120","1046282239","NO","NOR","NORWAY" -"1046282240","1046290431","DE","DEU","GERMANY" -"1046290432","1046298623","PL","POL","POLAND" -"1046298624","1046299903","AT","AUT","AUSTRIA" -"1046299904","1046300159","MK","MKD","THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA" -"1046300160","1046300799","AT","AUT","AUSTRIA" -"1046300800","1046300927","MK","MKD","THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA" -"1046300928","1046302143","AT","AUT","AUSTRIA" -"1046302144","1046302207","MK","MKD","THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA" -"1046302208","1046302911","AT","AUT","AUSTRIA" -"1046302912","1046302975","MK","MKD","THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA" -"1046302976","1046305279","AT","AUT","AUSTRIA" -"1046305280","1046305407","MK","MKD","THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA" -"1046305408","1046305535","AT","AUT","AUSTRIA" -"1046305536","1046305663","MK","MKD","THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA" -"1046305664","1046305791","AT","AUT","AUSTRIA" -"1046305792","1046306815","MK","MKD","THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA" -"1046306816","1046308927","AT","AUT","AUSTRIA" -"1046308928","1046309503","MK","MKD","THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA" -"1046309504","1046309887","AT","AUT","AUSTRIA" -"1046309888","1046310143","MK","MKD","THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA" -"1046310144","1046310399","AT","AUT","AUSTRIA" -"1046310400","1046311935","MK","MKD","THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA" -"1046311936","1046315007","AT","AUT","AUSTRIA" -"1046315008","1046315519","FR","FRA","FRANCE" -"1046315520","1046316031","IT","ITA","ITALY" -"1046316032","1046316543","FR","FRA","FRANCE" -"1046316544","1046317055","DK","DNK","DENMARK" -"1046317056","1046317567","ES","ESP","SPAIN" -"1046317568","1046317823","GB","GBR","UNITED KINGDOM" -"1046317824","1046318335","NL","NLD","NETHERLANDS" -"1046318336","1046318591","GB","GBR","UNITED KINGDOM" -"1046318592","1046320127","NL","NLD","NETHERLANDS" -"1046320128","1046321151","GB","GBR","UNITED KINGDOM" -"1046321152","1046323199","NL","NLD","NETHERLANDS" -"1046323200","1046327151","ES","ESP","SPAIN" -"1046327152","1046327155","FR","FRA","FRANCE" -"1046327156","1046331391","ES","ESP","SPAIN" -"1046331392","1046331455","DE","DEU","GERMANY" -"1046331648","1046331679","DE","DEU","GERMANY" -"1046331744","1046331775","DE","DEU","GERMANY" -"1046331840","1046331871","DE","DEU","GERMANY" -"1046331904","1046332159","NL","NLD","NETHERLANDS" -"1046332160","1046332415","FR","FRA","FRANCE" -"1046333440","1046333695","DE","DEU","GERMANY" -"1046334720","1046334975","DE","DEU","GERMANY" -"1046336224","1046336255","DE","DEU","GERMANY" -"1046336512","1046337023","DE","DEU","GERMANY" -"1046337536","1046338047","DE","DEU","GERMANY" -"1046339840","1046340095","FR","FRA","FRANCE" -"1046340096","1046341119","NL","NLD","NETHERLANDS" -"1046341632","1046342143","FR","FRA","FRANCE" -"1046342144","1046342719","NL","NLD","NETHERLANDS" -"1046343424","1046343935","NL","NLD","NETHERLANDS" -"1046344960","1046345215","DE","DEU","GERMANY" -"1046345328","1046345727","DE","DEU","GERMANY" -"1046346112","1046346239","DE","DEU","GERMANY" -"1046346304","1046346367","DE","DEU","GERMANY" -"1046346512","1046346559","DE","DEU","GERMANY" -"1046347776","1046349839","IT","ITA","ITALY" -"1046349840","1046349847","FR","FRA","FRANCE" -"1046349848","1046352831","IT","ITA","ITALY" -"1046352832","1046352847","SM","SMR","SAN MARINO" -"1046352848","1046366807","IT","ITA","ITALY" -"1046366808","1046366815","PL","POL","POLAND" -"1046366816","1046413311","IT","ITA","ITALY" -"1046413312","1046446079","SE","SWE","SWEDEN" -"1046446080","1046479535","DE","DEU","GERMANY" -"1046479536","1046479550","GB","GBR","UNITED KINGDOM" -"1046479551","1046479687","DE","DEU","GERMANY" -"1046479688","1046479695","GB","GBR","UNITED KINGDOM" -"1046479696","1046479711","DE","DEU","GERMANY" -"1046479712","1046479743","GB","GBR","UNITED KINGDOM" -"1046479744","1046480475","DE","DEU","GERMANY" -"1046480476","1046480479","GB","GBR","UNITED KINGDOM" -"1046480480","1046480719","DE","DEU","GERMANY" -"1046480720","1046480735","GB","GBR","UNITED KINGDOM" -"1046480736","1046481327","DE","DEU","GERMANY" -"1046481328","1046481375","GB","GBR","UNITED KINGDOM" -"1046481376","1046481535","DE","DEU","GERMANY" -"1046481536","1046481919","GB","GBR","UNITED KINGDOM" -"1046481920","1046481963","DE","DEU","GERMANY" -"1046481964","1046481967","GB","GBR","UNITED KINGDOM" -"1046481968","1046482751","DE","DEU","GERMANY" -"1046482752","1046482943","GB","GBR","UNITED KINGDOM" -"1046482944","1046483231","DE","DEU","GERMANY" -"1046483232","1046483471","GB","GBR","UNITED KINGDOM" -"1046483472","1046483871","DE","DEU","GERMANY" -"1046483872","1046483967","GB","GBR","UNITED KINGDOM" -"1046483968","1046484351","DE","DEU","GERMANY" -"1046484352","1046484479","GB","GBR","UNITED KINGDOM" -"1046484480","1046484511","DE","DEU","GERMANY" -"1046484512","1046484607","GB","GBR","UNITED KINGDOM" -"1046484608","1046484623","DE","DEU","GERMANY" -"1046484624","1046484991","GB","GBR","UNITED KINGDOM" -"1046484992","1046485023","DE","DEU","GERMANY" -"1046485024","1046485031","GB","GBR","UNITED KINGDOM" -"1046485032","1046485127","DE","DEU","GERMANY" -"1046485128","1046485135","GB","GBR","UNITED KINGDOM" -"1046485136","1046485159","DE","DEU","GERMANY" -"1046485160","1046485167","GB","GBR","UNITED KINGDOM" -"1046485168","1046485279","DE","DEU","GERMANY" -"1046485280","1046485287","GB","GBR","UNITED KINGDOM" -"1046485288","1046485367","DE","DEU","GERMANY" -"1046485368","1046485375","GB","GBR","UNITED KINGDOM" -"1046485376","1046485495","DE","DEU","GERMANY" -"1046485496","1046485543","GB","GBR","UNITED KINGDOM" -"1046485544","1046485647","DE","DEU","GERMANY" -"1046485648","1046485655","GB","GBR","UNITED KINGDOM" -"1046485656","1046485759","DE","DEU","GERMANY" -"1046485760","1046485791","GB","GBR","UNITED KINGDOM" -"1046485792","1046485823","DE","DEU","GERMANY" -"1046485824","1046485855","GB","GBR","UNITED KINGDOM" -"1046485856","1046486055","DE","DEU","GERMANY" -"1046486056","1046486063","GB","GBR","UNITED KINGDOM" -"1046486064","1046486159","DE","DEU","GERMANY" -"1046486160","1046486175","GB","GBR","UNITED KINGDOM" -"1046486176","1046486183","DE","DEU","GERMANY" -"1046486184","1046486191","GB","GBR","UNITED KINGDOM" -"1046486192","1046486375","DE","DEU","GERMANY" -"1046486376","1046486383","GB","GBR","UNITED KINGDOM" -"1046486384","1046491391","DE","DEU","GERMANY" -"1046491392","1046491399","GB","GBR","UNITED KINGDOM" -"1046491400","1046491423","DE","DEU","GERMANY" -"1046491424","1046491431","GB","GBR","UNITED KINGDOM" -"1046491432","1046491743","DE","DEU","GERMANY" -"1046491744","1046491775","GB","GBR","UNITED KINGDOM" -"1046491776","1046491839","DE","DEU","GERMANY" -"1046491840","1046492159","GB","GBR","UNITED KINGDOM" -"1046492160","1046492319","DE","DEU","GERMANY" -"1046492320","1046492327","GB","GBR","UNITED KINGDOM" -"1046492328","1046492415","DE","DEU","GERMANY" -"1046492416","1046492447","GB","GBR","UNITED KINGDOM" -"1046492448","1046492503","DE","DEU","GERMANY" -"1046492504","1046492511","GB","GBR","UNITED KINGDOM" -"1046492512","1046492543","DE","DEU","GERMANY" -"1046492544","1046492551","GB","GBR","UNITED KINGDOM" -"1046492552","1046492655","DE","DEU","GERMANY" -"1046492656","1046492663","GB","GBR","UNITED KINGDOM" -"1046492664","1046492911","DE","DEU","GERMANY" -"1046492912","1046492967","GB","GBR","UNITED KINGDOM" -"1046492968","1046493071","DE","DEU","GERMANY" -"1046493072","1046493087","GB","GBR","UNITED KINGDOM" -"1046493088","1046493095","DE","DEU","GERMANY" -"1046493096","1046493103","GB","GBR","UNITED KINGDOM" -"1046493104","1046493391","DE","DEU","GERMANY" -"1046493392","1046493471","GB","GBR","UNITED KINGDOM" -"1046493472","1046493487","DE","DEU","GERMANY" -"1046493488","1046493511","GB","GBR","UNITED KINGDOM" -"1046493512","1046493519","DE","DEU","GERMANY" -"1046493520","1046493535","GB","GBR","UNITED KINGDOM" -"1046493536","1046493551","DE","DEU","GERMANY" -"1046493552","1046493575","GB","GBR","UNITED KINGDOM" -"1046493576","1046493583","DE","DEU","GERMANY" -"1046493584","1046493591","GB","GBR","UNITED KINGDOM" -"1046493592","1046493599","DE","DEU","GERMANY" -"1046493600","1046493631","GB","GBR","UNITED KINGDOM" -"1046493632","1046493639","DE","DEU","GERMANY" -"1046493640","1046493695","GB","GBR","UNITED KINGDOM" -"1046493696","1046493951","DE","DEU","GERMANY" -"1046493952","1046493983","GB","GBR","UNITED KINGDOM" -"1046493984","1046494031","DE","DEU","GERMANY" -"1046494032","1046494039","GB","GBR","UNITED KINGDOM" -"1046494040","1046494087","DE","DEU","GERMANY" -"1046494088","1046494095","GB","GBR","UNITED KINGDOM" -"1046494096","1046494303","DE","DEU","GERMANY" -"1046494304","1046494311","GB","GBR","UNITED KINGDOM" -"1046494312","1046494327","DE","DEU","GERMANY" -"1046494328","1046494335","GB","GBR","UNITED KINGDOM" -"1046494336","1046494607","DE","DEU","GERMANY" -"1046494608","1046494615","GB","GBR","UNITED KINGDOM" -"1046494616","1046494623","DE","DEU","GERMANY" -"1046494624","1046494751","GB","GBR","UNITED KINGDOM" -"1046494752","1046494767","DE","DEU","GERMANY" -"1046494768","1046494775","GB","GBR","UNITED KINGDOM" -"1046494776","1046494815","DE","DEU","GERMANY" -"1046494816","1046494823","GB","GBR","UNITED KINGDOM" -"1046494824","1046494831","DE","DEU","GERMANY" -"1046494832","1046494839","GB","GBR","UNITED KINGDOM" -"1046494840","1046494975","DE","DEU","GERMANY" -"1046494976","1046495007","GB","GBR","UNITED KINGDOM" -"1046495008","1046495063","DE","DEU","GERMANY" -"1046495064","1046495071","GB","GBR","UNITED KINGDOM" -"1046495072","1046495079","DE","DEU","GERMANY" -"1046495080","1046495087","GB","GBR","UNITED KINGDOM" -"1046495088","1046495103","DE","DEU","GERMANY" -"1046495104","1046495127","GB","GBR","UNITED KINGDOM" -"1046495128","1046495223","DE","DEU","GERMANY" -"1046495224","1046495231","GB","GBR","UNITED KINGDOM" -"1046495232","1046495351","DE","DEU","GERMANY" -"1046495352","1046495359","GB","GBR","UNITED KINGDOM" -"1046495360","1046495407","DE","DEU","GERMANY" -"1046495408","1046495415","GB","GBR","UNITED KINGDOM" -"1046495416","1046495439","DE","DEU","GERMANY" -"1046495440","1046495447","GB","GBR","UNITED KINGDOM" -"1046495448","1046495487","DE","DEU","GERMANY" -"1046495488","1046495519","GB","GBR","UNITED KINGDOM" -"1046495520","1046495527","DE","DEU","GERMANY" -"1046495528","1046495535","GB","GBR","UNITED KINGDOM" -"1046495536","1046495543","DE","DEU","GERMANY" -"1046495544","1046495551","GB","GBR","UNITED KINGDOM" -"1046495552","1046495567","DE","DEU","GERMANY" -"1046495568","1046495575","GB","GBR","UNITED KINGDOM" -"1046495576","1046495599","DE","DEU","GERMANY" -"1046495600","1046495607","GB","GBR","UNITED KINGDOM" -"1046495608","1046495631","DE","DEU","GERMANY" -"1046495632","1046495639","GB","GBR","UNITED KINGDOM" -"1046495640","1046495647","DE","DEU","GERMANY" -"1046495648","1046495663","GB","GBR","UNITED KINGDOM" -"1046495664","1046495703","DE","DEU","GERMANY" -"1046495704","1046495719","GB","GBR","UNITED KINGDOM" -"1046495720","1046495879","DE","DEU","GERMANY" -"1046495880","1046495895","GB","GBR","UNITED KINGDOM" -"1046495896","1046495999","DE","DEU","GERMANY" -"1046496000","1046496047","GB","GBR","UNITED KINGDOM" -"1046496048","1046496127","DE","DEU","GERMANY" -"1046496128","1046496135","GB","GBR","UNITED KINGDOM" -"1046496136","1046496191","DE","DEU","GERMANY" -"1046496192","1046496215","GB","GBR","UNITED KINGDOM" -"1046496216","1046496231","DE","DEU","GERMANY" -"1046496232","1046496239","GB","GBR","UNITED KINGDOM" -"1046496240","1046496303","DE","DEU","GERMANY" -"1046496304","1046496511","GB","GBR","UNITED KINGDOM" -"1046496512","1046497463","DE","DEU","GERMANY" -"1046497464","1046497471","GB","GBR","UNITED KINGDOM" -"1046497472","1046497479","DE","DEU","GERMANY" -"1046497480","1046497567","GB","GBR","UNITED KINGDOM" -"1046497568","1046497639","DE","DEU","GERMANY" -"1046497640","1046497647","GB","GBR","UNITED KINGDOM" -"1046497648","1046497663","DE","DEU","GERMANY" -"1046497664","1046497671","GB","GBR","UNITED KINGDOM" -"1046497672","1046497719","DE","DEU","GERMANY" -"1046497720","1046497727","GB","GBR","UNITED KINGDOM" -"1046497728","1046497759","DE","DEU","GERMANY" -"1046497760","1046497775","GB","GBR","UNITED KINGDOM" -"1046497776","1046497975","DE","DEU","GERMANY" -"1046497976","1046497983","GB","GBR","UNITED KINGDOM" -"1046497984","1046498047","DE","DEU","GERMANY" -"1046498048","1046498079","GB","GBR","UNITED KINGDOM" -"1046498080","1046498103","DE","DEU","GERMANY" -"1046498104","1046498111","GB","GBR","UNITED KINGDOM" -"1046498112","1046498159","DE","DEU","GERMANY" -"1046498160","1046498167","GB","GBR","UNITED KINGDOM" -"1046498168","1046498175","DE","DEU","GERMANY" -"1046498176","1046498183","GB","GBR","UNITED KINGDOM" -"1046498184","1046498207","DE","DEU","GERMANY" -"1046498208","1046498215","GB","GBR","UNITED KINGDOM" -"1046498216","1046498239","DE","DEU","GERMANY" -"1046498240","1046498255","GB","GBR","UNITED KINGDOM" -"1046498256","1046498263","DE","DEU","GERMANY" -"1046498264","1046498271","GB","GBR","UNITED KINGDOM" -"1046498272","1046498279","DE","DEU","GERMANY" -"1046498280","1046498295","GB","GBR","UNITED KINGDOM" -"1046498296","1046498359","DE","DEU","GERMANY" -"1046498360","1046498367","GB","GBR","UNITED KINGDOM" -"1046498368","1046498455","DE","DEU","GERMANY" -"1046498456","1046498591","GB","GBR","UNITED KINGDOM" -"1046498592","1046498631","DE","DEU","GERMANY" -"1046498632","1046498639","GB","GBR","UNITED KINGDOM" -"1046498640","1046498655","DE","DEU","GERMANY" -"1046498656","1046498663","GB","GBR","UNITED KINGDOM" -"1046498664","1046498679","DE","DEU","GERMANY" -"1046498680","1046498687","GB","GBR","UNITED KINGDOM" -"1046498688","1046498719","DE","DEU","GERMANY" -"1046498720","1046498727","GB","GBR","UNITED KINGDOM" -"1046498728","1046498819","DE","DEU","GERMANY" -"1046498820","1046499327","GB","GBR","UNITED KINGDOM" -"1046499328","1046502655","DE","DEU","GERMANY" -"1046502656","1046502719","GB","GBR","UNITED KINGDOM" -"1046502720","1046502863","DE","DEU","GERMANY" -"1046502864","1046502951","GB","GBR","UNITED KINGDOM" -"1046502952","1046502967","DE","DEU","GERMANY" -"1046502968","1046502975","GB","GBR","UNITED KINGDOM" -"1046502976","1046503135","DE","DEU","GERMANY" -"1046503136","1046503143","GB","GBR","UNITED KINGDOM" -"1046503144","1046503167","DE","DEU","GERMANY" -"1046503168","1046503207","GB","GBR","UNITED KINGDOM" -"1046503208","1046503343","DE","DEU","GERMANY" -"1046503344","1046503351","GB","GBR","UNITED KINGDOM" -"1046503352","1046504415","DE","DEU","GERMANY" -"1046504416","1046504487","GB","GBR","UNITED KINGDOM" -"1046504488","1046504551","DE","DEU","GERMANY" -"1046504552","1046504559","GB","GBR","UNITED KINGDOM" -"1046504560","1046504599","DE","DEU","GERMANY" -"1046504600","1046504615","GB","GBR","UNITED KINGDOM" -"1046504616","1046504671","DE","DEU","GERMANY" -"1046504672","1046504679","GB","GBR","UNITED KINGDOM" -"1046504680","1046504703","DE","DEU","GERMANY" -"1046504704","1046504735","GB","GBR","UNITED KINGDOM" -"1046504736","1046504799","DE","DEU","GERMANY" -"1046504800","1046504807","GB","GBR","UNITED KINGDOM" -"1046504808","1046504871","DE","DEU","GERMANY" -"1046504872","1046504879","GB","GBR","UNITED KINGDOM" -"1046504880","1046504887","DE","DEU","GERMANY" -"1046504888","1046504895","GB","GBR","UNITED KINGDOM" -"1046504896","1046504919","DE","DEU","GERMANY" -"1046504920","1046504927","GB","GBR","UNITED KINGDOM" -"1046504928","1046504943","DE","DEU","GERMANY" -"1046504944","1046504951","GB","GBR","UNITED KINGDOM" -"1046504952","1046504959","DE","DEU","GERMANY" -"1046504960","1046504999","GB","GBR","UNITED KINGDOM" -"1046505000","1046505031","DE","DEU","GERMANY" -"1046505032","1046505039","GB","GBR","UNITED KINGDOM" -"1046505040","1046505055","DE","DEU","GERMANY" -"1046505056","1046505063","GB","GBR","UNITED KINGDOM" -"1046505064","1046505071","DE","DEU","GERMANY" -"1046505072","1046505087","GB","GBR","UNITED KINGDOM" -"1046505088","1046505159","DE","DEU","GERMANY" -"1046505160","1046505167","GB","GBR","UNITED KINGDOM" -"1046505168","1046505183","DE","DEU","GERMANY" -"1046505184","1046505191","GB","GBR","UNITED KINGDOM" -"1046505192","1046505215","DE","DEU","GERMANY" -"1046505216","1046505247","GB","GBR","UNITED KINGDOM" -"1046505248","1046505343","DE","DEU","GERMANY" -"1046505344","1046505359","GB","GBR","UNITED KINGDOM" -"1046505360","1046505415","DE","DEU","GERMANY" -"1046505416","1046505423","GB","GBR","UNITED KINGDOM" -"1046505424","1046505431","DE","DEU","GERMANY" -"1046505432","1046505439","GB","GBR","UNITED KINGDOM" -"1046505440","1046505463","DE","DEU","GERMANY" -"1046505464","1046505511","GB","GBR","UNITED KINGDOM" -"1046505512","1046505551","DE","DEU","GERMANY" -"1046505552","1046505559","GB","GBR","UNITED KINGDOM" -"1046505560","1046505583","DE","DEU","GERMANY" -"1046505584","1046505591","GB","GBR","UNITED KINGDOM" -"1046505592","1046505615","DE","DEU","GERMANY" -"1046505616","1046505631","GB","GBR","UNITED KINGDOM" -"1046505632","1046505663","DE","DEU","GERMANY" -"1046505664","1046505671","GB","GBR","UNITED KINGDOM" -"1046505672","1046505679","DE","DEU","GERMANY" -"1046505680","1046505687","GB","GBR","UNITED KINGDOM" -"1046505688","1046505695","DE","DEU","GERMANY" -"1046505696","1046505703","GB","GBR","UNITED KINGDOM" -"1046505704","1046505727","DE","DEU","GERMANY" -"1046505728","1046505759","GB","GBR","UNITED KINGDOM" -"1046505760","1046505807","DE","DEU","GERMANY" -"1046505808","1046505823","GB","GBR","UNITED KINGDOM" -"1046505824","1046505847","DE","DEU","GERMANY" -"1046505848","1046505879","GB","GBR","UNITED KINGDOM" -"1046505880","1046505895","DE","DEU","GERMANY" -"1046505896","1046505903","GB","GBR","UNITED KINGDOM" -"1046505904","1046505983","DE","DEU","GERMANY" -"1046505984","1046506015","GB","GBR","UNITED KINGDOM" -"1046506016","1046506039","DE","DEU","GERMANY" -"1046506040","1046506047","GB","GBR","UNITED KINGDOM" -"1046506048","1046506119","DE","DEU","GERMANY" -"1046506120","1046506135","GB","GBR","UNITED KINGDOM" -"1046506136","1046506239","DE","DEU","GERMANY" -"1046506240","1046506271","GB","GBR","UNITED KINGDOM" -"1046506272","1046506295","DE","DEU","GERMANY" -"1046506296","1046506303","GB","GBR","UNITED KINGDOM" -"1046506304","1046506327","DE","DEU","GERMANY" -"1046506328","1046506343","GB","GBR","UNITED KINGDOM" -"1046506344","1046506375","DE","DEU","GERMANY" -"1046506376","1046506383","GB","GBR","UNITED KINGDOM" -"1046506384","1046506391","DE","DEU","GERMANY" -"1046506392","1046506407","GB","GBR","UNITED KINGDOM" -"1046506408","1046506415","DE","DEU","GERMANY" -"1046506416","1046506423","GB","GBR","UNITED KINGDOM" -"1046506424","1046506439","DE","DEU","GERMANY" -"1046506440","1046506447","GB","GBR","UNITED KINGDOM" -"1046506448","1046506479","DE","DEU","GERMANY" -"1046506480","1046506487","GB","GBR","UNITED KINGDOM" -"1046506488","1046506495","DE","DEU","GERMANY" -"1046506496","1046506535","GB","GBR","UNITED KINGDOM" -"1046506536","1046506575","DE","DEU","GERMANY" -"1046506576","1046506591","GB","GBR","UNITED KINGDOM" -"1046506592","1046506599","DE","DEU","GERMANY" -"1046506600","1046506607","GB","GBR","UNITED KINGDOM" -"1046506608","1046506623","DE","DEU","GERMANY" -"1046506624","1046506639","GB","GBR","UNITED KINGDOM" -"1046506640","1046506647","DE","DEU","GERMANY" -"1046506648","1046506655","GB","GBR","UNITED KINGDOM" -"1046506656","1046506671","DE","DEU","GERMANY" -"1046506672","1046506679","GB","GBR","UNITED KINGDOM" -"1046506680","1046506687","DE","DEU","GERMANY" -"1046506688","1046506695","GB","GBR","UNITED KINGDOM" -"1046506696","1046506711","DE","DEU","GERMANY" -"1046506712","1046506743","GB","GBR","UNITED KINGDOM" -"1046506744","1046506751","DE","DEU","GERMANY" -"1046506752","1046506783","GB","GBR","UNITED KINGDOM" -"1046506784","1046506791","DE","DEU","GERMANY" -"1046506792","1046506807","GB","GBR","UNITED KINGDOM" -"1046506808","1046506823","DE","DEU","GERMANY" -"1046506824","1046506839","GB","GBR","UNITED KINGDOM" -"1046506840","1046506895","DE","DEU","GERMANY" -"1046506896","1046506903","GB","GBR","UNITED KINGDOM" -"1046506904","1046506927","DE","DEU","GERMANY" -"1046506928","1046506935","GB","GBR","UNITED KINGDOM" -"1046506936","1046506951","DE","DEU","GERMANY" -"1046506952","1046506959","GB","GBR","UNITED KINGDOM" -"1046506960","1046506991","DE","DEU","GERMANY" -"1046506992","1046506999","GB","GBR","UNITED KINGDOM" -"1046507000","1046507007","DE","DEU","GERMANY" -"1046507008","1046507039","GB","GBR","UNITED KINGDOM" -"1046507040","1046507047","DE","DEU","GERMANY" -"1046507048","1046507055","GB","GBR","UNITED KINGDOM" -"1046507056","1046507071","DE","DEU","GERMANY" -"1046507072","1046507111","GB","GBR","UNITED KINGDOM" -"1046507112","1046507143","DE","DEU","GERMANY" -"1046507144","1046507151","GB","GBR","UNITED KINGDOM" -"1046507152","1046507159","DE","DEU","GERMANY" -"1046507160","1046507175","GB","GBR","UNITED KINGDOM" -"1046507176","1046507199","DE","DEU","GERMANY" -"1046507200","1046507207","GB","GBR","UNITED KINGDOM" -"1046507208","1046507223","DE","DEU","GERMANY" -"1046507224","1046507247","GB","GBR","UNITED KINGDOM" -"1046507248","1046507263","DE","DEU","GERMANY" -"1046507264","1046507519","GB","GBR","UNITED KINGDOM" -"1046507520","1046511615","DE","DEU","GERMANY" -"1046511616","1046511647","GB","GBR","UNITED KINGDOM" -"1046511648","1046511695","DE","DEU","GERMANY" -"1046511696","1046511711","GB","GBR","UNITED KINGDOM" -"1046511712","1046511743","DE","DEU","GERMANY" -"1046511744","1046511751","GB","GBR","UNITED KINGDOM" -"1046511752","1046511759","DE","DEU","GERMANY" -"1046511760","1046511815","GB","GBR","UNITED KINGDOM" -"1046511816","1046511847","DE","DEU","GERMANY" -"1046511848","1046511863","GB","GBR","UNITED KINGDOM" -"1046511864","1046511871","DE","DEU","GERMANY" -"1046511872","1046511903","GB","GBR","UNITED KINGDOM" -"1046511904","1046511919","DE","DEU","GERMANY" -"1046511920","1046511927","GB","GBR","UNITED KINGDOM" -"1046511928","1046511935","DE","DEU","GERMANY" -"1046511936","1046511967","GB","GBR","UNITED KINGDOM" -"1046511968","1046511975","DE","DEU","GERMANY" -"1046511976","1046511991","GB","GBR","UNITED KINGDOM" -"1046511992","1046512007","DE","DEU","GERMANY" -"1046512008","1046512015","GB","GBR","UNITED KINGDOM" -"1046512016","1046512031","DE","DEU","GERMANY" -"1046512032","1046512055","GB","GBR","UNITED KINGDOM" -"1046512056","1046512063","DE","DEU","GERMANY" -"1046512064","1046512095","GB","GBR","UNITED KINGDOM" -"1046512096","1046512103","DE","DEU","GERMANY" -"1046512104","1046512167","GB","GBR","UNITED KINGDOM" -"1046512168","1046512175","DE","DEU","GERMANY" -"1046512176","1046512199","GB","GBR","UNITED KINGDOM" -"1046512200","1046512215","DE","DEU","GERMANY" -"1046512216","1046512223","GB","GBR","UNITED KINGDOM" -"1046512224","1046512231","DE","DEU","GERMANY" -"1046512232","1046512271","GB","GBR","UNITED KINGDOM" -"1046512272","1046512303","DE","DEU","GERMANY" -"1046512304","1046512311","GB","GBR","UNITED KINGDOM" -"1046512312","1046512327","DE","DEU","GERMANY" -"1046512328","1046512335","GB","GBR","UNITED KINGDOM" -"1046512336","1046512383","DE","DEU","GERMANY" -"1046512384","1046512415","GB","GBR","UNITED KINGDOM" -"1046512416","1046512447","DE","DEU","GERMANY" -"1046512448","1046512455","GB","GBR","UNITED KINGDOM" -"1046512456","1046512535","DE","DEU","GERMANY" -"1046512536","1046512543","GB","GBR","UNITED KINGDOM" -"1046512544","1046512551","DE","DEU","GERMANY" -"1046512552","1046512567","GB","GBR","UNITED KINGDOM" -"1046512568","1046512607","DE","DEU","GERMANY" -"1046512608","1046512623","GB","GBR","UNITED KINGDOM" -"1046512624","1046512631","DE","DEU","GERMANY" -"1046512632","1046512671","GB","GBR","UNITED KINGDOM" -"1046512672","1046512687","DE","DEU","GERMANY" -"1046512688","1046512711","GB","GBR","UNITED KINGDOM" -"1046512712","1046512727","DE","DEU","GERMANY" -"1046512728","1046512735","GB","GBR","UNITED KINGDOM" -"1046512736","1046512751","DE","DEU","GERMANY" -"1046512752","1046512759","GB","GBR","UNITED KINGDOM" -"1046512760","1046512847","DE","DEU","GERMANY" -"1046512848","1046512879","GB","GBR","UNITED KINGDOM" -"1046512880","1046512895","DE","DEU","GERMANY" -"1046512896","1046512927","GB","GBR","UNITED KINGDOM" -"1046512928","1046512943","DE","DEU","GERMANY" -"1046512944","1046512967","GB","GBR","UNITED KINGDOM" -"1046512968","1046512983","DE","DEU","GERMANY" -"1046512984","1046512991","GB","GBR","UNITED KINGDOM" -"1046512992","1046512999","DE","DEU","GERMANY" -"1046513000","1046513007","GB","GBR","UNITED KINGDOM" -"1046513008","1046513023","DE","DEU","GERMANY" -"1046513024","1046513031","GB","GBR","UNITED KINGDOM" -"1046513032","1046513039","DE","DEU","GERMANY" -"1046513040","1046513047","GB","GBR","UNITED KINGDOM" -"1046513048","1046513055","DE","DEU","GERMANY" -"1046513056","1046513063","GB","GBR","UNITED KINGDOM" -"1046513064","1046513079","DE","DEU","GERMANY" -"1046513080","1046513111","GB","GBR","UNITED KINGDOM" -"1046513112","1046513143","DE","DEU","GERMANY" -"1046513144","1046513231","GB","GBR","UNITED KINGDOM" -"1046513232","1046513239","DE","DEU","GERMANY" -"1046513240","1046513247","GB","GBR","UNITED KINGDOM" -"1046513248","1046513255","DE","DEU","GERMANY" -"1046513256","1046513263","GB","GBR","UNITED KINGDOM" -"1046513264","1046513295","DE","DEU","GERMANY" -"1046513296","1046513303","GB","GBR","UNITED KINGDOM" -"1046513304","1046513327","DE","DEU","GERMANY" -"1046513328","1046513343","GB","GBR","UNITED KINGDOM" -"1046513344","1046513391","DE","DEU","GERMANY" -"1046513392","1046513439","GB","GBR","UNITED KINGDOM" -"1046513440","1046513519","DE","DEU","GERMANY" -"1046513520","1046513527","GB","GBR","UNITED KINGDOM" -"1046513528","1046513551","DE","DEU","GERMANY" -"1046513552","1046513559","GB","GBR","UNITED KINGDOM" -"1046513560","1046513591","DE","DEU","GERMANY" -"1046513592","1046513607","GB","GBR","UNITED KINGDOM" -"1046513608","1046513615","DE","DEU","GERMANY" -"1046513616","1046513623","GB","GBR","UNITED KINGDOM" -"1046513624","1046513655","DE","DEU","GERMANY" -"1046513656","1046513719","GB","GBR","UNITED KINGDOM" -"1046513720","1046513735","DE","DEU","GERMANY" -"1046513736","1046513759","GB","GBR","UNITED KINGDOM" -"1046513760","1046513791","DE","DEU","GERMANY" -"1046513792","1046513799","GB","GBR","UNITED KINGDOM" -"1046513800","1046513831","DE","DEU","GERMANY" -"1046513832","1046513847","GB","GBR","UNITED KINGDOM" -"1046513848","1046513863","DE","DEU","GERMANY" -"1046513864","1046513871","GB","GBR","UNITED KINGDOM" -"1046513872","1046513879","DE","DEU","GERMANY" -"1046513880","1046513887","GB","GBR","UNITED KINGDOM" -"1046513888","1046513919","DE","DEU","GERMANY" -"1046513920","1046514207","GB","GBR","UNITED KINGDOM" -"1046514208","1046514223","DE","DEU","GERMANY" -"1046514224","1046514239","GB","GBR","UNITED KINGDOM" -"1046514240","1046514247","DE","DEU","GERMANY" -"1046514248","1046514255","GB","GBR","UNITED KINGDOM" -"1046514256","1046514279","DE","DEU","GERMANY" -"1046514280","1046514287","GB","GBR","UNITED KINGDOM" -"1046514288","1046514311","DE","DEU","GERMANY" -"1046514312","1046514319","GB","GBR","UNITED KINGDOM" -"1046514320","1046514335","DE","DEU","GERMANY" -"1046514336","1046514343","GB","GBR","UNITED KINGDOM" -"1046514344","1046514359","DE","DEU","GERMANY" -"1046514360","1046514367","GB","GBR","UNITED KINGDOM" -"1046514368","1046514383","DE","DEU","GERMANY" -"1046514384","1046514391","GB","GBR","UNITED KINGDOM" -"1046514392","1046514399","DE","DEU","GERMANY" -"1046514400","1046514415","GB","GBR","UNITED KINGDOM" -"1046514416","1046514423","DE","DEU","GERMANY" -"1046514424","1046514687","GB","GBR","UNITED KINGDOM" -"1046514688","1046516287","DE","DEU","GERMANY" -"1046516288","1046516735","GB","GBR","UNITED KINGDOM" -"1046516736","1046516743","DE","DEU","GERMANY" -"1046516744","1046516991","GB","GBR","UNITED KINGDOM" -"1046516992","1046517031","DE","DEU","GERMANY" -"1046517032","1046517039","GB","GBR","UNITED KINGDOM" -"1046517040","1046517087","DE","DEU","GERMANY" -"1046517088","1046517799","GB","GBR","UNITED KINGDOM" -"1046517800","1046517807","DE","DEU","GERMANY" -"1046517808","1046517815","GB","GBR","UNITED KINGDOM" -"1046517816","1046517831","DE","DEU","GERMANY" -"1046517832","1046517839","GB","GBR","UNITED KINGDOM" -"1046517840","1046517847","DE","DEU","GERMANY" -"1046517848","1046517855","GB","GBR","UNITED KINGDOM" -"1046517856","1046517863","DE","DEU","GERMANY" -"1046517864","1046517871","GB","GBR","UNITED KINGDOM" -"1046517872","1046517903","DE","DEU","GERMANY" -"1046517904","1046517911","GB","GBR","UNITED KINGDOM" -"1046517912","1046517927","DE","DEU","GERMANY" -"1046517928","1046524159","GB","GBR","UNITED KINGDOM" -"1046524160","1046524191","DE","DEU","GERMANY" -"1046524192","1046524207","GB","GBR","UNITED KINGDOM" -"1046524208","1046524215","DE","DEU","GERMANY" -"1046524216","1046524287","GB","GBR","UNITED KINGDOM" -"1046524288","1046524355","DE","DEU","GERMANY" -"1046524356","1046524415","GB","GBR","UNITED KINGDOM" -"1046524416","1046525183","DE","DEU","GERMANY" -"1046525184","1046525215","GB","GBR","UNITED KINGDOM" -"1046525216","1046525247","DE","DEU","GERMANY" -"1046525248","1046525311","GB","GBR","UNITED KINGDOM" -"1046525312","1046525343","DE","DEU","GERMANY" -"1046525344","1046525439","GB","GBR","UNITED KINGDOM" -"1046525440","1046525695","DE","DEU","GERMANY" -"1046525696","1046526591","GB","GBR","UNITED KINGDOM" -"1046526592","1046526599","DE","DEU","GERMANY" -"1046526600","1046526631","GB","GBR","UNITED KINGDOM" -"1046526632","1046526635","DE","DEU","GERMANY" -"1046526636","1046526719","GB","GBR","UNITED KINGDOM" -"1046526720","1046526991","DE","DEU","GERMANY" -"1046526992","1046526995","GB","GBR","UNITED KINGDOM" -"1046526996","1046527487","DE","DEU","GERMANY" -"1046527488","1046527743","GB","GBR","UNITED KINGDOM" -"1046527744","1046527999","DE","DEU","GERMANY" -"1046528000","1046528255","GB","GBR","UNITED KINGDOM" -"1046528256","1046528287","DE","DEU","GERMANY" -"1046528288","1046528319","GB","GBR","UNITED KINGDOM" -"1046528320","1046528335","DE","DEU","GERMANY" -"1046528336","1046528391","GB","GBR","UNITED KINGDOM" -"1046528392","1046528399","DE","DEU","GERMANY" -"1046528400","1046528459","GB","GBR","UNITED KINGDOM" -"1046528460","1046528463","DE","DEU","GERMANY" -"1046528464","1046528471","GB","GBR","UNITED KINGDOM" -"1046528472","1046528479","DE","DEU","GERMANY" -"1046528480","1046528487","GB","GBR","UNITED KINGDOM" -"1046528488","1046528495","DE","DEU","GERMANY" -"1046528496","1046528519","GB","GBR","UNITED KINGDOM" -"1046528520","1046528527","DE","DEU","GERMANY" -"1046528528","1046528543","GB","GBR","UNITED KINGDOM" -"1046528544","1046528559","DE","DEU","GERMANY" -"1046528560","1046528575","GB","GBR","UNITED KINGDOM" -"1046528576","1046528587","DE","DEU","GERMANY" -"1046528588","1046528599","GB","GBR","UNITED KINGDOM" -"1046528600","1046528603","DE","DEU","GERMANY" -"1046528604","1046528607","GB","GBR","UNITED KINGDOM" -"1046528608","1046528639","DE","DEU","GERMANY" -"1046528640","1046528671","GB","GBR","UNITED KINGDOM" -"1046528672","1046528703","DE","DEU","GERMANY" -"1046528704","1046529279","GB","GBR","UNITED KINGDOM" -"1046529280","1046529535","DE","DEU","GERMANY" -"1046529536","1046530047","GB","GBR","UNITED KINGDOM" -"1046530048","1046530687","DE","DEU","GERMANY" -"1046530688","1046530815","GB","GBR","UNITED KINGDOM" -"1046530816","1046530879","DE","DEU","GERMANY" -"1046530880","1046530943","GB","GBR","UNITED KINGDOM" -"1046530944","1046530947","DE","DEU","GERMANY" -"1046530948","1046530967","GB","GBR","UNITED KINGDOM" -"1046530968","1046530975","DE","DEU","GERMANY" -"1046530976","1046531007","GB","GBR","UNITED KINGDOM" -"1046531008","1046531087","DE","DEU","GERMANY" -"1046531088","1046531095","GB","GBR","UNITED KINGDOM" -"1046531096","1046531127","DE","DEU","GERMANY" -"1046531128","1046531839","GB","GBR","UNITED KINGDOM" -"1046531840","1046532095","DE","DEU","GERMANY" -"1046532096","1046534015","GB","GBR","UNITED KINGDOM" -"1046534016","1046534047","DE","DEU","GERMANY" -"1046534048","1046534143","GB","GBR","UNITED KINGDOM" -"1046534144","1046534655","DE","DEU","GERMANY" -"1046534656","1046534911","GB","GBR","UNITED KINGDOM" -"1046534912","1046535167","DE","DEU","GERMANY" -"1046535168","1046535295","GB","GBR","UNITED KINGDOM" -"1046535296","1046535311","DE","DEU","GERMANY" -"1046535312","1046535359","GB","GBR","UNITED KINGDOM" -"1046535360","1046535423","DE","DEU","GERMANY" -"1046535424","1046535487","GB","GBR","UNITED KINGDOM" -"1046535488","1046535615","DE","DEU","GERMANY" -"1046535616","1046535619","GB","GBR","UNITED KINGDOM" -"1046535620","1046535623","DE","DEU","GERMANY" -"1046535624","1046535631","GB","GBR","UNITED KINGDOM" -"1046535632","1046535935","DE","DEU","GERMANY" -"1046535936","1046536023","GB","GBR","UNITED KINGDOM" -"1046536024","1046536039","DE","DEU","GERMANY" -"1046536040","1046536063","GB","GBR","UNITED KINGDOM" -"1046536064","1046536151","DE","DEU","GERMANY" -"1046536152","1046536159","GB","GBR","UNITED KINGDOM" -"1046536160","1046536167","DE","DEU","GERMANY" -"1046536168","1046536187","GB","GBR","UNITED KINGDOM" -"1046536188","1046536199","DE","DEU","GERMANY" -"1046536200","1046536211","GB","GBR","UNITED KINGDOM" -"1046536212","1046536215","DE","DEU","GERMANY" -"1046536216","1046536255","GB","GBR","UNITED KINGDOM" -"1046536256","1046536271","DE","DEU","GERMANY" -"1046536272","1046536279","GB","GBR","UNITED KINGDOM" -"1046536280","1046536283","DE","DEU","GERMANY" -"1046536284","1046536287","GB","GBR","UNITED KINGDOM" -"1046536288","1046536295","DE","DEU","GERMANY" -"1046536296","1046536319","GB","GBR","UNITED KINGDOM" -"1046536320","1046536351","DE","DEU","GERMANY" -"1046536352","1046536423","GB","GBR","UNITED KINGDOM" -"1046536424","1046536439","DE","DEU","GERMANY" -"1046536440","1046536607","GB","GBR","UNITED KINGDOM" -"1046536608","1046536667","DE","DEU","GERMANY" -"1046536668","1046536703","GB","GBR","UNITED KINGDOM" -"1046536704","1046537023","DE","DEU","GERMANY" -"1046537024","1046537055","GB","GBR","UNITED KINGDOM" -"1046537056","1046537071","DE","DEU","GERMANY" -"1046537072","1046537087","GB","GBR","UNITED KINGDOM" -"1046537088","1046537151","DE","DEU","GERMANY" -"1046537152","1046537215","GB","GBR","UNITED KINGDOM" -"1046537216","1046537983","DE","DEU","GERMANY" -"1046537984","1046538431","GB","GBR","UNITED KINGDOM" -"1046538432","1046538447","DE","DEU","GERMANY" -"1046538448","1046538463","GB","GBR","UNITED KINGDOM" -"1046538464","1046538495","DE","DEU","GERMANY" -"1046538496","1046538751","GB","GBR","UNITED KINGDOM" -"1046538752","1046539519","DE","DEU","GERMANY" -"1046539520","1046540031","GB","GBR","UNITED KINGDOM" -"1046540032","1046540287","DE","DEU","GERMANY" -"1046540288","1046540543","GB","GBR","UNITED KINGDOM" -"1046540544","1046541055","DE","DEU","GERMANY" -"1046541056","1046541311","GB","GBR","UNITED KINGDOM" -"1046541312","1046541439","DE","DEU","GERMANY" -"1046541440","1046541503","GB","GBR","UNITED KINGDOM" -"1046541504","1046541567","DE","DEU","GERMANY" -"1046541568","1046541631","GB","GBR","UNITED KINGDOM" -"1046541632","1046541695","DE","DEU","GERMANY" -"1046541696","1046541727","GB","GBR","UNITED KINGDOM" -"1046541728","1046541759","DE","DEU","GERMANY" -"1046541760","1046541767","GB","GBR","UNITED KINGDOM" -"1046541768","1046541783","DE","DEU","GERMANY" -"1046541784","1046541807","GB","GBR","UNITED KINGDOM" -"1046541808","1046542591","DE","DEU","GERMANY" -"1046542592","1046542847","GB","GBR","UNITED KINGDOM" -"1046542848","1046543103","DE","DEU","GERMANY" -"1046543104","1046543263","GB","GBR","UNITED KINGDOM" -"1046543264","1046543295","DE","DEU","GERMANY" -"1046543296","1046543327","GB","GBR","UNITED KINGDOM" -"1046543328","1046543351","DE","DEU","GERMANY" -"1046543352","1046543359","GB","GBR","UNITED KINGDOM" -"1046543360","1046543871","DE","DEU","GERMANY" -"1046543872","1046544127","GB","GBR","UNITED KINGDOM" -"1046544128","1046544383","DE","DEU","GERMANY" -"1046544384","1046560767","IT","ITA","ITALY" -"1046560768","1046585343","ES","ESP","SPAIN" -"1046585344","1046609919","NO","NOR","NORWAY" -"1046609920","1046675455","IT","ITA","ITALY" -"1046675456","1046708223","ES","ESP","SPAIN" -"1046708224","1046740991","AT","AUT","AUSTRIA" -"1046740992","1046757375","NL","NLD","NETHERLANDS" -"1046757376","1046765567","IT","ITA","ITALY" -"1046765568","1046773759","ES","ESP","SPAIN" -"1046773760","1046781951","FR","FRA","FRANCE" -"1046781952","1046798335","GB","GBR","UNITED KINGDOM" -"1046798336","1046806527","HU","HUN","HUNGARY" -"1046806528","1046814719","IT","ITA","ITALY" -"1046814720","1046822911","SE","SWE","SWEDEN" -"1046822912","1046839295","IT","ITA","ITALY" -"1046847488","1046855679","ES","ESP","SPAIN" -"1046855680","1046872063","NO","NOR","NORWAY" -"1046872064","1046872583","BE","BEL","BELGIUM" -"1046872608","1046872615","BE","BEL","BELGIUM" -"1046872656","1046872671","BE","BEL","BELGIUM" -"1046872976","1046872999","BE","BEL","BELGIUM" -"1046873088","1046873279","BE","BEL","BELGIUM" -"1046873600","1046878463","BE","BEL","BELGIUM" -"1046879256","1046879263","BE","BEL","BELGIUM" -"1046879272","1046879311","BE","BEL","BELGIUM" -"1046879328","1046879495","BE","BEL","BELGIUM" -"1046879504","1046879511","BE","BEL","BELGIUM" -"1046879544","1046879551","BE","BEL","BELGIUM" -"1046879592","1046879623","BE","BEL","BELGIUM" -"1046879648","1046879655","BE","BEL","BELGIUM" -"1046879688","1046879711","BE","BEL","BELGIUM" -"1046879720","1046879735","BE","BEL","BELGIUM" -"1046879776","1046879791","BE","BEL","BELGIUM" -"1046879808","1046879831","BE","BEL","BELGIUM" -"1046879840","1046879847","BE","BEL","BELGIUM" -"1046879896","1046879911","BE","BEL","BELGIUM" -"1046879944","1046879959","BE","BEL","BELGIUM" -"1046879968","1046880127","BE","BEL","BELGIUM" -"1046880136","1046880143","BE","BEL","BELGIUM" -"1046880152","1046880191","BE","BEL","BELGIUM" -"1046880256","1046880511","BE","BEL","BELGIUM" -"1046880520","1046880527","BE","BEL","BELGIUM" -"1046880560","1046880567","RO","ROM","ROMANIA" -"1046880592","1046880615","BE","BEL","BELGIUM" -"1046880640","1046880671","BE","BEL","BELGIUM" -"1046880736","1046880759","BE","BEL","BELGIUM" -"1046880904","1046880911","BE","BEL","BELGIUM" -"1046880920","1046880935","BE","BEL","BELGIUM" -"1046880984","1046881039","BE","BEL","BELGIUM" -"1046881056","1046881071","BE","BEL","BELGIUM" -"1046881080","1046881087","BE","BEL","BELGIUM" -"1046881112","1046881127","BE","BEL","BELGIUM" -"1046881136","1046881239","BE","BEL","BELGIUM" -"1046881280","1046882047","BE","BEL","BELGIUM" -"1046882304","1046884383","BE","BEL","BELGIUM" -"1046885376","1046888447","BE","BEL","BELGIUM" -"1046888448","1046895103","GB","GBR","UNITED KINGDOM" -"1046896384","1046897663","GB","GBR","UNITED KINGDOM" -"1046897664","1046898431","BE","BEL","BELGIUM" -"1046898688","1046898943","BE","BEL","BELGIUM" -"1046899168","1046904831","BE","BEL","BELGIUM" -"1046904832","1046937599","RU","RUS","RUSSIAN FEDERATION" -"1046937600","1047003135","GR","GRC","GREECE" -"1047003136","1047068671","DE","DEU","GERMANY" -"1047068672","1047085055","RU","RUS","RUSSIAN FEDERATION" -"1047085056","1047101439","GB","GBR","UNITED KINGDOM" -"1047101440","1047109631","RU","RUS","RUSSIAN FEDERATION" -"1047109632","1047117823","GB","GBR","UNITED KINGDOM" -"1047117824","1047134207","NL","NLD","NETHERLANDS" -"1047134208","1047150591","FI","FIN","FINLAND" -"1047150592","1047158783","FR","FRA","FRANCE" -"1047158784","1047166975","RU","RUS","RUSSIAN FEDERATION" -"1047166976","1047199743","FR","FRA","FRANCE" -"1047199744","1047265279","DK","DNK","DENMARK" -"1047265280","1047273471","NL","NLD","NETHERLANDS" -"1047281664","1047289855","TR","TUR","TURKEY" -"1047289856","1047290111","RS","SRB","SERBIA" -"1047290112","1047290879","CS","SCG","SERBIA AND MONTENEGRO" -"1047290880","1047291647","RS","SRB","SERBIA" -"1047291648","1047291903","CS","SCG","SERBIA AND MONTENEGRO" -"1047291904","1047292927","RS","SRB","SERBIA" -"1047292928","1047293423","CS","SCG","SERBIA AND MONTENEGRO" -"1047293424","1047293431","RS","SRB","SERBIA" -"1047293432","1047293695","CS","SCG","SERBIA AND MONTENEGRO" -"1047293696","1047293951","CS","SCG","SERBIA AND MONTENEGRO" -"1047293952","1047294719","CS","SCG","SERBIA AND MONTENEGRO" -"1047294720","1047294735","CS","SCG","SERBIA AND MONTENEGRO" -"1047294736","1047295247","CS","SCG","SERBIA AND MONTENEGRO" -"1047295248","1047295263","CS","SCG","SERBIA AND MONTENEGRO" -"1047295264","1047295279","CS","SCG","SERBIA AND MONTENEGRO" -"1047295280","1047295295","CS","SCG","SERBIA AND MONTENEGRO" -"1047295296","1047295327","CS","SCG","SERBIA AND MONTENEGRO" -"1047295328","1047295343","CS","SCG","SERBIA AND MONTENEGRO" -"1047295344","1047295399","CS","SCG","SERBIA AND MONTENEGRO" -"1047295400","1047295415","RS","SRB","SERBIA" -"1047295416","1047295487","CS","SCG","SERBIA AND MONTENEGRO" -"1047295488","1047295744","RS","SRB","SERBIA" -"1047295745","1047295999","CS","SCG","SERBIA AND MONTENEGRO" -"1047296000","1047297023","CS","SCG","SERBIA AND MONTENEGRO" -"1047297024","1047297567","CS","SCG","SERBIA AND MONTENEGRO" -"1047297568","1047297599","CS","SCG","SERBIA AND MONTENEGRO" -"1047297600","1047298047","CS","SCG","SERBIA AND MONTENEGRO" -"1047298048","1047300095","CH","CHE","SWITZERLAND" -"1047300096","1047300415","GB","GBR","UNITED KINGDOM" -"1047300416","1047300479","CH","CHE","SWITZERLAND" -"1047300480","1047300495","FR","FRA","FRANCE" -"1047300496","1047300607","CH","CHE","SWITZERLAND" -"1047300608","1047300639","GB","GBR","UNITED KINGDOM" -"1047300640","1047302143","CH","CHE","SWITZERLAND" -"1047302144","1047302159","US","USA","UNITED STATES" -"1047302160","1047302175","GB","GBR","UNITED KINGDOM" -"1047302176","1047302191","AU","AUS","AUSTRALIA" -"1047302192","1047306239","CH","CHE","SWITZERLAND" -"1047306240","1047314431","PL","POL","POLAND" -"1047314432","1047322623","SE","SWE","SWEDEN" -"1047322624","1047330815","IT","ITA","ITALY" -"1047330816","1047339007","LU","LUX","LUXEMBOURG" -"1047339008","1047340431","SE","SWE","SWEDEN" -"1047340432","1047340439","NO","NOR","NORWAY" -"1047340440","1047340799","SE","SWE","SWEDEN" -"1047340800","1047341055","NO","NOR","NORWAY" -"1047341056","1047343871","SE","SWE","SWEDEN" -"1047343872","1047344127","NO","NOR","NORWAY" -"1047344128","1047347199","SE","SWE","SWEDEN" -"1047347200","1047363583","DE","DEU","GERMANY" -"1047363584","1047371775","CZ","CZE","CZECH REPUBLIC" -"1047371776","1047379967","RU","RUS","RUSSIAN FEDERATION" -"1047379968","1047396351","NL","NLD","NETHERLANDS" -"1047396352","1047461887","IT","ITA","ITALY" -"1047461888","1047494655","DE","DEU","GERMANY" -"1047494656","1047527423","PL","POL","POLAND" -"1047527424","1047535615","BE","BEL","BELGIUM" -"1047535616","1047551999","DE","DEU","GERMANY" -"1047552000","1047560191","RU","RUS","RUSSIAN FEDERATION" -"1047560192","1047561367","DE","DEU","GERMANY" -"1047561368","1047561371","CN","CHN","CHINA" -"1047561372","1047561375","AU","AUS","AUSTRALIA" -"1047561376","1047561747","DE","DEU","GERMANY" -"1047561748","1047561751","ES","ESP","SPAIN" -"1047561752","1047561887","DE","DEU","GERMANY" -"1047561888","1047561891","US","USA","UNITED STATES" -"1047561892","1047563227","DE","DEU","GERMANY" -"1047563228","1047563231","CH","CHE","SWITZERLAND" -"1047563232","1047563303","DE","DEU","GERMANY" -"1047563304","1047563307","CH","CHE","SWITZERLAND" -"1047563308","1047563407","DE","DEU","GERMANY" -"1047563408","1047563411","CH","CHE","SWITZERLAND" -"1047563412","1047563415","DE","DEU","GERMANY" -"1047563416","1047563419","BE","BEL","BELGIUM" -"1047563420","1047563431","DE","DEU","GERMANY" -"1047563432","1047563435","CH","CHE","SWITZERLAND" -"1047563436","1047563443","DE","DEU","GERMANY" -"1047563444","1047563447","CH","CHE","SWITZERLAND" -"1047563448","1047563451","DE","DEU","GERMANY" -"1047563452","1047563455","NL","NLD","NETHERLANDS" -"1047563456","1047563467","DE","DEU","GERMANY" -"1047563468","1047563471","CH","CHE","SWITZERLAND" -"1047563472","1047563727","DE","DEU","GERMANY" -"1047563728","1047563731","AU","AUS","AUSTRALIA" -"1047563732","1047566363","DE","DEU","GERMANY" -"1047566364","1047566367","CH","CHE","SWITZERLAND" -"1047566368","1047566407","DE","DEU","GERMANY" -"1047566408","1047566415","CH","CHE","SWITZERLAND" -"1047566416","1047566455","DE","DEU","GERMANY" -"1047566456","1047566459","CH","CHE","SWITZERLAND" -"1047566460","1047566475","DE","DEU","GERMANY" -"1047566476","1047566479","CH","CHE","SWITZERLAND" -"1047566480","1047566535","DE","DEU","GERMANY" -"1047566536","1047566539","CH","CHE","SWITZERLAND" -"1047566540","1047566559","DE","DEU","GERMANY" -"1047566560","1047566563","CH","CHE","SWITZERLAND" -"1047566564","1047566847","DE","DEU","GERMANY" -"1047566848","1047566851","AT","AUT","AUSTRIA" -"1047566852","1047566867","DE","DEU","GERMANY" -"1047566868","1047566871","AT","AUT","AUSTRIA" -"1047566872","1047566879","CH","CHE","SWITZERLAND" -"1047566880","1047566891","DE","DEU","GERMANY" -"1047566892","1047566903","CH","CHE","SWITZERLAND" -"1047566904","1047566995","DE","DEU","GERMANY" -"1047566996","1047566999","CH","CHE","SWITZERLAND" -"1047567000","1047567031","DE","DEU","GERMANY" -"1047567032","1047567035","CH","CHE","SWITZERLAND" -"1047567036","1047567039","DE","DEU","GERMANY" -"1047567040","1047567043","AT","AUT","AUSTRIA" -"1047567044","1047567047","CH","CHE","SWITZERLAND" -"1047567048","1047567063","DE","DEU","GERMANY" -"1047567064","1047567067","CH","CHE","SWITZERLAND" -"1047567068","1047567071","BE","BEL","BELGIUM" -"1047567072","1047567103","DE","DEU","GERMANY" -"1047567104","1047567111","NL","NLD","NETHERLANDS" -"1047567112","1047567119","DE","DEU","GERMANY" -"1047567120","1047567127","CH","CHE","SWITZERLAND" -"1047567128","1047567143","DE","DEU","GERMANY" -"1047567144","1047567147","CH","CHE","SWITZERLAND" -"1047567148","1047567151","BE","BEL","BELGIUM" -"1047567152","1047567163","DE","DEU","GERMANY" -"1047567164","1047567167","AT","AUT","AUSTRIA" -"1047567168","1047567211","DE","DEU","GERMANY" -"1047567212","1047567227","CH","CHE","SWITZERLAND" -"1047567228","1047567239","DE","DEU","GERMANY" -"1047567240","1047567243","CH","CHE","SWITZERLAND" -"1047567244","1047567247","DE","DEU","GERMANY" -"1047567248","1047567255","CH","CHE","SWITZERLAND" -"1047567256","1047567279","DE","DEU","GERMANY" -"1047567280","1047567287","CH","CHE","SWITZERLAND" -"1047567288","1047567315","DE","DEU","GERMANY" -"1047567316","1047567319","AT","AUT","AUSTRIA" -"1047567320","1047567359","DE","DEU","GERMANY" -"1047567360","1047567375","ES","ESP","SPAIN" -"1047567376","1047567435","DE","DEU","GERMANY" -"1047567436","1047567439","CH","CHE","SWITZERLAND" -"1047567440","1047567447","DE","DEU","GERMANY" -"1047567448","1047567451","CH","CHE","SWITZERLAND" -"1047567452","1047567455","AT","AUT","AUSTRIA" -"1047567456","1047567459","CH","CHE","SWITZERLAND" -"1047567460","1047567463","DE","DEU","GERMANY" -"1047567464","1047567467","CH","CHE","SWITZERLAND" -"1047567468","1047567495","DE","DEU","GERMANY" -"1047567496","1047567499","CH","CHE","SWITZERLAND" -"1047567500","1047567535","DE","DEU","GERMANY" -"1047567536","1047567539","CH","CHE","SWITZERLAND" -"1047567540","1047567551","DE","DEU","GERMANY" -"1047567552","1047567555","CH","CHE","SWITZERLAND" -"1047567556","1047567647","DE","DEU","GERMANY" -"1047567648","1047567651","CH","CHE","SWITZERLAND" -"1047567652","1047567655","DE","DEU","GERMANY" -"1047567656","1047567659","CH","CHE","SWITZERLAND" -"1047567660","1047567727","DE","DEU","GERMANY" -"1047567728","1047567731","BE","BEL","BELGIUM" -"1047567732","1047567735","DE","DEU","GERMANY" -"1047567736","1047567743","CH","CHE","SWITZERLAND" -"1047567744","1047567747","DE","DEU","GERMANY" -"1047567748","1047567751","CH","CHE","SWITZERLAND" -"1047567752","1047567755","LU","LUX","LUXEMBOURG" -"1047567756","1047567759","CH","CHE","SWITZERLAND" -"1047567760","1047567799","DE","DEU","GERMANY" -"1047567800","1047567803","CH","CHE","SWITZERLAND" -"1047567804","1047567847","DE","DEU","GERMANY" -"1047567848","1047567851","CH","CHE","SWITZERLAND" -"1047567852","1047567855","BE","BEL","BELGIUM" -"1047567856","1047567871","DE","DEU","GERMANY" -"1047567872","1047567875","CH","CHE","SWITZERLAND" -"1047567876","1047567879","AT","AUT","AUSTRIA" -"1047567880","1047567883","CH","CHE","SWITZERLAND" -"1047567884","1047567935","DE","DEU","GERMANY" -"1047567936","1047567939","CH","CHE","SWITZERLAND" -"1047567940","1047568047","DE","DEU","GERMANY" -"1047568048","1047568059","CH","CHE","SWITZERLAND" -"1047568060","1047568083","DE","DEU","GERMANY" -"1047568084","1047568095","CH","CHE","SWITZERLAND" -"1047568096","1047568159","DE","DEU","GERMANY" -"1047568160","1047568163","CH","CHE","SWITZERLAND" -"1047568164","1047568167","DE","DEU","GERMANY" -"1047568168","1047568171","ES","ESP","SPAIN" -"1047568172","1047568187","DE","DEU","GERMANY" -"1047568188","1047568191","CH","CHE","SWITZERLAND" -"1047568192","1047568215","DE","DEU","GERMANY" -"1047568216","1047568219","CH","CHE","SWITZERLAND" -"1047568220","1047568235","DE","DEU","GERMANY" -"1047568236","1047568239","CH","CHE","SWITZERLAND" -"1047568240","1047568247","DE","DEU","GERMANY" -"1047568248","1047568251","CH","CHE","SWITZERLAND" -"1047568252","1047568383","DE","DEU","GERMANY" -"1047568384","1047576575","NL","NLD","NETHERLANDS" -"1047576576","1047584767","HU","HUN","HUNGARY" -"1047584768","1047592959","NL","NLD","NETHERLANDS" -"1047592960","1047601151","BA","BIH","BOSNIA AND HERZEGOVINA" -"1047601152","1047625727","RU","RUS","RUSSIAN FEDERATION" -"1047625728","1047633919","NO","NOR","NORWAY" -"1047633920","1047642111","FI","FIN","FINLAND" -"1047642112","1047658495","DE","DEU","GERMANY" -"1047728128","1047732223","SE","SWE","SWEDEN" -"1047740544","1047740671","DE","DEU","GERMANY" -"1047740672","1047740927","GB","GBR","UNITED KINGDOM" -"1047781664","1047781671","GB","GBR","UNITED KINGDOM" -"1047782696","1047782703","GB","GBR","UNITED KINGDOM" -"1047782720","1047782751","SE","SWE","SWEDEN" -"1047782752","1047782783","NO","NOR","NORWAY" -"1047782784","1047782815","FI","FIN","FINLAND" -"1047789568","1047806031","AT","AUT","AUSTRIA" -"1047806032","1047806047","IT","ITA","ITALY" -"1047806048","1047822335","AT","AUT","AUSTRIA" -"1047822336","1047834895","DE","DEU","GERMANY" -"1047834896","1047834903","CY","CYP","CYPRUS" -"1047834904","1047838719","DE","DEU","GERMANY" -"1047838720","1047846911","DK","DNK","DENMARK" -"1047846912","1047855103","SE","SWE","SWEDEN" -"1047855104","1047863295","DE","DEU","GERMANY" -"1047871488","1047887871","RU","RUS","RUSSIAN FEDERATION" -"1047887872","1047920639","ES","ESP","SPAIN" -"1047920640","1047941119","RU","RUS","RUSSIAN FEDERATION" -"1047941120","1047941375","GB","GBR","UNITED KINGDOM" -"1047941376","1047986175","RU","RUS","RUSSIAN FEDERATION" -"1047986176","1047997439","SE","SWE","SWEDEN" -"1047997440","1047997503","NO","NOR","NORWAY" -"1047997504","1048012383","SE","SWE","SWEDEN" -"1048012384","1048012391","DE","DEU","GERMANY" -"1048012392","1048051711","SE","SWE","SWEDEN" -"1048051712","1048117247","SA","SAU","SAUDI ARABIA" -"1048117248","1048125439","GB","GBR","UNITED KINGDOM" -"1048125440","1048133631","FI","FIN","FINLAND" -"1048133632","1048158207","PL","POL","POLAND" -"1048158208","1048166399","DK","DNK","DENMARK" -"1048166400","1048182783","CH","CHE","SWITZERLAND" -"1048182784","1048184831","UA","UKR","UKRAINE" -"1048184832","1048186879","FR","FRA","FRANCE" -"1048186880","1048188927","LV","LVA","LATVIA" -"1048188928","1048190975","BE","BEL","BELGIUM" -"1048190976","1048193023","VG","VGB","VIRGIN ISLANDS, BRITISH" -"1048193024","1048195071","RO","ROM","ROMANIA" -"1048195072","1048197119","RU","RUS","RUSSIAN FEDERATION" -"1048197120","1048201215","UA","UKR","UKRAINE" -"1048203264","1048205311","DE","DEU","GERMANY" -"1048205312","1048209407","RU","RUS","RUSSIAN FEDERATION" -"1048209408","1048211455","UA","UKR","UKRAINE" -"1048211456","1048215551","PL","POL","POLAND" -"1048215552","1048221695","RU","RUS","RUSSIAN FEDERATION" -"1048221696","1048223743","UA","UKR","UKRAINE" -"1048223744","1048225791","DK","DNK","DENMARK" -"1048225792","1048227839","CZ","CZE","CZECH REPUBLIC" -"1048227840","1048233983","RU","RUS","RUSSIAN FEDERATION" -"1048233984","1048236031","UA","UKR","UKRAINE" -"1048236032","1048240127","RU","RUS","RUSSIAN FEDERATION" -"1048240128","1048242175","IL","ISR","ISRAEL" -"1048242176","1048244223","PL","POL","POLAND" -"1048244224","1048246271","RU","RUS","RUSSIAN FEDERATION" -"1048246272","1048248319","NO","NOR","NORWAY" -"1048248320","1048313855","IT","ITA","ITALY" -"1048313856","1048510463","GB","GBR","UNITED KINGDOM" -"1048510464","1048575999","SE","SWE","SWEDEN" -"1048576000","1048584191","DE","DEU","GERMANY" -"1048584192","1048592383","IL","ISR","ISRAEL" -"1048600576","1048602623","DE","DEU","GERMANY" -"1048602624","1048603135","EE","EST","ESTONIA" -"1048603136","1048604671","DE","DEU","GERMANY" -"1048604672","1048604687","EE","EST","ESTONIA" -"1048604688","1048604743","DE","DEU","GERMANY" -"1048604744","1048604759","EE","EST","ESTONIA" -"1048604760","1048604927","DE","DEU","GERMANY" -"1048604928","1048604963","LT","LTU","LITHUANIA" -"1048604964","1048604975","DE","DEU","GERMANY" -"1048604976","1048605055","LT","LTU","LITHUANIA" -"1048605056","1048607231","DE","DEU","GERMANY" -"1048607232","1048607247","EE","EST","ESTONIA" -"1048607248","1048607487","DE","DEU","GERMANY" -"1048607488","1048607519","EE","EST","ESTONIA" -"1048607520","1048607743","DE","DEU","GERMANY" -"1048607744","1048607759","EE","EST","ESTONIA" -"1048607760","1048607775","DE","DEU","GERMANY" -"1048607776","1048607839","EE","EST","ESTONIA" -"1048607840","1048608255","DE","DEU","GERMANY" -"1048608256","1048608287","RU","RUS","RUSSIAN FEDERATION" -"1048608288","1048608671","DE","DEU","GERMANY" -"1048608672","1048608703","EE","EST","ESTONIA" -"1048608704","1048608711","DE","DEU","GERMANY" -"1048608712","1048608727","EE","EST","ESTONIA" -"1048608728","1048608731","DE","DEU","GERMANY" -"1048608732","1048608767","EE","EST","ESTONIA" -"1048608768","1048611583","GB","GBR","UNITED KINGDOM" -"1048611584","1048611839","FR","FRA","FRANCE" -"1048611840","1048615423","GB","GBR","UNITED KINGDOM" -"1048615424","1048615487","US","USA","UNITED STATES" -"1048615488","1048616959","GB","GBR","UNITED KINGDOM" -"1048616960","1048621055","KE","KEN","KENYA" -"1048621056","1048625151","DE","DEU","GERMANY" -"1048625152","1048633343","GB","GBR","UNITED KINGDOM" -"1048633344","1048641535","NO","NOR","NORWAY" -"1048641536","1048649727","FR","FRA","FRANCE" -"1048649728","1048657919","CZ","CZE","CZECH REPUBLIC" -"1048657920","1048674303","GB","GBR","UNITED KINGDOM" -"1048674304","1048682495","NL","NLD","NETHERLANDS" -"1048682496","1048690687","FR","FRA","FRANCE" -"1048690688","1048707071","PL","POL","POLAND" -"1048707072","1048772607","GB","GBR","UNITED KINGDOM" -"1048772608","1048838143","NL","NLD","NETHERLANDS" -"1048838144","1048838175","DE","DEU","GERMANY" -"1048838176","1048838207","PL","POL","POLAND" -"1048838208","1048838239","NL","NLD","NETHERLANDS" -"1048838240","1048839935","DE","DEU","GERMANY" -"1048839936","1048840703","NL","NLD","NETHERLANDS" -"1048840704","1048843263","DE","DEU","GERMANY" -"1048843264","1048843311","NL","NLD","NETHERLANDS" -"1048843312","1048843319","DE","DEU","GERMANY" -"1048843320","1048843599","NL","NLD","NETHERLANDS" -"1048843600","1048843607","DE","DEU","GERMANY" -"1048843608","1048843951","NL","NLD","NETHERLANDS" -"1048843952","1048843959","DE","DEU","GERMANY" -"1048843960","1048843983","NL","NLD","NETHERLANDS" -"1048843984","1048843991","DE","DEU","GERMANY" -"1048843992","1048844263","NL","NLD","NETHERLANDS" -"1048844264","1048844271","DE","DEU","GERMANY" -"1048844272","1048844287","NL","NLD","NETHERLANDS" -"1048844288","1048844319","DE","DEU","GERMANY" -"1048844320","1048844351","NL","NLD","NETHERLANDS" -"1048844352","1048845567","DE","DEU","GERMANY" -"1048845568","1048845703","NL","NLD","NETHERLANDS" -"1048845704","1048845711","DE","DEU","GERMANY" -"1048845712","1048845759","NL","NLD","NETHERLANDS" -"1048845760","1048845767","DE","DEU","GERMANY" -"1048845768","1048845855","NL","NLD","NETHERLANDS" -"1048845856","1048845863","DE","DEU","GERMANY" -"1048845864","1048846575","NL","NLD","NETHERLANDS" -"1048846576","1048846583","DE","DEU","GERMANY" -"1048846584","1048846647","NL","NLD","NETHERLANDS" -"1048846648","1048846663","DE","DEU","GERMANY" -"1048846664","1048846687","NL","NLD","NETHERLANDS" -"1048846688","1048846695","DE","DEU","GERMANY" -"1048846696","1048846847","NL","NLD","NETHERLANDS" -"1048846848","1048847359","DE","DEU","GERMANY" -"1048847360","1048847423","NL","NLD","NETHERLANDS" -"1048847424","1048847431","DE","DEU","GERMANY" -"1048847432","1048847455","NL","NLD","NETHERLANDS" -"1048847456","1048847463","DE","DEU","GERMANY" -"1048847464","1048848119","NL","NLD","NETHERLANDS" -"1048848120","1048848127","DE","DEU","GERMANY" -"1048848128","1048848135","NL","NLD","NETHERLANDS" -"1048848136","1048848143","DE","DEU","GERMANY" -"1048848144","1048848479","NL","NLD","NETHERLANDS" -"1048848480","1048848487","DE","DEU","GERMANY" -"1048848488","1048848551","NL","NLD","NETHERLANDS" -"1048848552","1048848559","DE","DEU","GERMANY" -"1048848560","1048848703","NL","NLD","NETHERLANDS" -"1048848704","1048848711","DE","DEU","GERMANY" -"1048848712","1048848735","NL","NLD","NETHERLANDS" -"1048848736","1048848743","DE","DEU","GERMANY" -"1048848744","1048848895","NL","NLD","NETHERLANDS" -"1048848896","1048849407","DE","DEU","GERMANY" -"1048849408","1048849559","NL","NLD","NETHERLANDS" -"1048849560","1048849567","DE","DEU","GERMANY" -"1048849568","1048849599","NL","NLD","NETHERLANDS" -"1048849600","1048849607","DE","DEU","GERMANY" -"1048849608","1048849863","NL","NLD","NETHERLANDS" -"1048849864","1048849871","DE","DEU","GERMANY" -"1048849872","1048850959","NL","NLD","NETHERLANDS" -"1048850960","1048850967","DE","DEU","GERMANY" -"1048850968","1048851031","NL","NLD","NETHERLANDS" -"1048851032","1048851039","DE","DEU","GERMANY" -"1048851040","1048851151","NL","NLD","NETHERLANDS" -"1048851152","1048851159","DE","DEU","GERMANY" -"1048851160","1048851223","NL","NLD","NETHERLANDS" -"1048851224","1048851231","DE","DEU","GERMANY" -"1048851232","1048851591","NL","NLD","NETHERLANDS" -"1048851592","1048851607","DE","DEU","GERMANY" -"1048851608","1048851679","NL","NLD","NETHERLANDS" -"1048851680","1048851687","DE","DEU","GERMANY" -"1048851688","1048851703","NL","NLD","NETHERLANDS" -"1048851704","1048851711","DE","DEU","GERMANY" -"1048851712","1048851743","NL","NLD","NETHERLANDS" -"1048851744","1048851751","DE","DEU","GERMANY" -"1048851752","1048852039","NL","NLD","NETHERLANDS" -"1048852040","1048852047","DE","DEU","GERMANY" -"1048852048","1048852335","NL","NLD","NETHERLANDS" -"1048852336","1048852343","DE","DEU","GERMANY" -"1048852344","1048852807","NL","NLD","NETHERLANDS" -"1048852808","1048852815","DE","DEU","GERMANY" -"1048852816","1048852871","NL","NLD","NETHERLANDS" -"1048852872","1048852879","DE","DEU","GERMANY" -"1048852880","1048853127","NL","NLD","NETHERLANDS" -"1048853128","1048853135","DE","DEU","GERMANY" -"1048853136","1048853143","NL","NLD","NETHERLANDS" -"1048853144","1048853151","DE","DEU","GERMANY" -"1048853152","1048853191","NL","NLD","NETHERLANDS" -"1048853192","1048853199","DE","DEU","GERMANY" -"1048853200","1048853327","NL","NLD","NETHERLANDS" -"1048853328","1048853335","DE","DEU","GERMANY" -"1048853336","1048853575","NL","NLD","NETHERLANDS" -"1048853576","1048853583","DE","DEU","GERMANY" -"1048853584","1048853655","NL","NLD","NETHERLANDS" -"1048853656","1048853663","DE","DEU","GERMANY" -"1048853664","1048853863","NL","NLD","NETHERLANDS" -"1048853864","1048853871","DE","DEU","GERMANY" -"1048853872","1048854055","NL","NLD","NETHERLANDS" -"1048854056","1048854063","DE","DEU","GERMANY" -"1048854064","1048854391","NL","NLD","NETHERLANDS" -"1048854392","1048854407","DE","DEU","GERMANY" -"1048854408","1048854527","NL","NLD","NETHERLANDS" -"1048854528","1048855039","DE","DEU","GERMANY" -"1048855040","1048855047","NL","NLD","NETHERLANDS" -"1048855048","1048855055","DE","DEU","GERMANY" -"1048855056","1048855215","NL","NLD","NETHERLANDS" -"1048855216","1048855223","DE","DEU","GERMANY" -"1048855224","1048855271","NL","NLD","NETHERLANDS" -"1048855272","1048855279","DE","DEU","GERMANY" -"1048855280","1048855895","NL","NLD","NETHERLANDS" -"1048855896","1048855903","DE","DEU","GERMANY" -"1048855904","1048856015","NL","NLD","NETHERLANDS" -"1048856016","1048856031","DE","DEU","GERMANY" -"1048856032","1048856095","NL","NLD","NETHERLANDS" -"1048856096","1048856103","DE","DEU","GERMANY" -"1048856104","1048856359","NL","NLD","NETHERLANDS" -"1048856360","1048856367","DE","DEU","GERMANY" -"1048856368","1048856375","NL","NLD","NETHERLANDS" -"1048856376","1048856383","DE","DEU","GERMANY" -"1048856384","1048856559","NL","NLD","NETHERLANDS" -"1048856560","1048856567","DE","DEU","GERMANY" -"1048856568","1048856687","NL","NLD","NETHERLANDS" -"1048856688","1048856695","DE","DEU","GERMANY" -"1048856696","1048856839","NL","NLD","NETHERLANDS" -"1048856840","1048856847","DE","DEU","GERMANY" -"1048856848","1048856919","NL","NLD","NETHERLANDS" -"1048856920","1048856927","DE","DEU","GERMANY" -"1048856928","1048856999","NL","NLD","NETHERLANDS" -"1048857000","1048857007","DE","DEU","GERMANY" -"1048857008","1048857767","NL","NLD","NETHERLANDS" -"1048857768","1048857775","DE","DEU","GERMANY" -"1048857776","1048858111","NL","NLD","NETHERLANDS" -"1048858112","1048858623","DE","DEU","GERMANY" -"1048858624","1048859095","NL","NLD","NETHERLANDS" -"1048859096","1048859103","DE","DEU","GERMANY" -"1048859104","1048859903","NL","NLD","NETHERLANDS" -"1048859904","1048859911","DE","DEU","GERMANY" -"1048859912","1048860311","NL","NLD","NETHERLANDS" -"1048860312","1048860319","DE","DEU","GERMANY" -"1048860320","1048860407","NL","NLD","NETHERLANDS" -"1048860408","1048860415","DE","DEU","GERMANY" -"1048860416","1048860455","NL","NLD","NETHERLANDS" -"1048860456","1048860463","DE","DEU","GERMANY" -"1048860464","1048860511","NL","NLD","NETHERLANDS" -"1048860512","1048860519","DE","DEU","GERMANY" -"1048860520","1048860607","NL","NLD","NETHERLANDS" -"1048860608","1048860615","DE","DEU","GERMANY" -"1048860616","1048861383","NL","NLD","NETHERLANDS" -"1048861384","1048861391","DE","DEU","GERMANY" -"1048861392","1048861431","NL","NLD","NETHERLANDS" -"1048861432","1048861439","DE","DEU","GERMANY" -"1048861440","1048862247","NL","NLD","NETHERLANDS" -"1048862248","1048862255","DE","DEU","GERMANY" -"1048862256","1048862287","NL","NLD","NETHERLANDS" -"1048862288","1048862295","DE","DEU","GERMANY" -"1048862296","1048862511","NL","NLD","NETHERLANDS" -"1048862512","1048862519","DE","DEU","GERMANY" -"1048862520","1048862623","NL","NLD","NETHERLANDS" -"1048862624","1048862639","DE","DEU","GERMANY" -"1048862640","1048862671","NL","NLD","NETHERLANDS" -"1048862672","1048862679","DE","DEU","GERMANY" -"1048862680","1048862711","NL","NLD","NETHERLANDS" -"1048862712","1048862719","DE","DEU","GERMANY" -"1048862720","1048862919","NL","NLD","NETHERLANDS" -"1048862920","1048862927","DE","DEU","GERMANY" -"1048862928","1048863111","NL","NLD","NETHERLANDS" -"1048863112","1048863119","DE","DEU","GERMANY" -"1048863120","1048863271","NL","NLD","NETHERLANDS" -"1048863272","1048863279","DE","DEU","GERMANY" -"1048863280","1048863319","NL","NLD","NETHERLANDS" -"1048863320","1048863327","DE","DEU","GERMANY" -"1048863328","1048863343","NL","NLD","NETHERLANDS" -"1048863344","1048863351","DE","DEU","GERMANY" -"1048863352","1048863391","NL","NLD","NETHERLANDS" -"1048863392","1048863399","DE","DEU","GERMANY" -"1048863400","1048863575","NL","NLD","NETHERLANDS" -"1048863576","1048863591","DE","DEU","GERMANY" -"1048863592","1048863631","NL","NLD","NETHERLANDS" -"1048863632","1048863639","DE","DEU","GERMANY" -"1048863640","1048863743","NL","NLD","NETHERLANDS" -"1048863744","1048863751","DE","DEU","GERMANY" -"1048863752","1048863791","NL","NLD","NETHERLANDS" -"1048863792","1048863799","DE","DEU","GERMANY" -"1048863800","1048864071","NL","NLD","NETHERLANDS" -"1048864072","1048864079","DE","DEU","GERMANY" -"1048864080","1048864167","NL","NLD","NETHERLANDS" -"1048864168","1048864175","DE","DEU","GERMANY" -"1048864176","1048864471","NL","NLD","NETHERLANDS" -"1048864472","1048864479","DE","DEU","GERMANY" -"1048864480","1048864775","NL","NLD","NETHERLANDS" -"1048864776","1048864783","DE","DEU","GERMANY" -"1048864784","1048865279","NL","NLD","NETHERLANDS" -"1048865280","1048865791","DE","DEU","GERMANY" -"1048865792","1048865903","NL","NLD","NETHERLANDS" -"1048865904","1048865911","DE","DEU","GERMANY" -"1048865912","1048865935","NL","NLD","NETHERLANDS" -"1048865936","1048865943","DE","DEU","GERMANY" -"1048865944","1048866095","NL","NLD","NETHERLANDS" -"1048866096","1048866103","DE","DEU","GERMANY" -"1048866104","1048866847","NL","NLD","NETHERLANDS" -"1048866848","1048866855","DE","DEU","GERMANY" -"1048866856","1048867031","NL","NLD","NETHERLANDS" -"1048867032","1048867039","DE","DEU","GERMANY" -"1048867040","1048867207","NL","NLD","NETHERLANDS" -"1048867208","1048867215","DE","DEU","GERMANY" -"1048867216","1048867295","NL","NLD","NETHERLANDS" -"1048867296","1048867303","DE","DEU","GERMANY" -"1048867304","1048867327","NL","NLD","NETHERLANDS" -"1048867328","1048868351","DE","DEU","GERMANY" -"1048868352","1048868655","NL","NLD","NETHERLANDS" -"1048868656","1048868663","DE","DEU","GERMANY" -"1048868664","1048869183","NL","NLD","NETHERLANDS" -"1048869184","1048869191","DE","DEU","GERMANY" -"1048869192","1048869263","NL","NLD","NETHERLANDS" -"1048869264","1048869279","DE","DEU","GERMANY" -"1048869280","1048869367","NL","NLD","NETHERLANDS" -"1048869368","1048869375","DE","DEU","GERMANY" -"1048869376","1048869479","NL","NLD","NETHERLANDS" -"1048869480","1048869487","DE","DEU","GERMANY" -"1048869488","1048869543","NL","NLD","NETHERLANDS" -"1048869544","1048869551","DE","DEU","GERMANY" -"1048869552","1048869575","NL","NLD","NETHERLANDS" -"1048869576","1048869583","DE","DEU","GERMANY" -"1048869584","1048869615","NL","NLD","NETHERLANDS" -"1048869616","1048869623","DE","DEU","GERMANY" -"1048869624","1048869687","NL","NLD","NETHERLANDS" -"1048869688","1048869695","DE","DEU","GERMANY" -"1048869696","1048869759","NL","NLD","NETHERLANDS" -"1048869760","1048869767","DE","DEU","GERMANY" -"1048869768","1048869847","NL","NLD","NETHERLANDS" -"1048869848","1048869863","DE","DEU","GERMANY" -"1048869864","1048869951","NL","NLD","NETHERLANDS" -"1048869952","1048869967","DE","DEU","GERMANY" -"1048869968","1048869975","NL","NLD","NETHERLANDS" -"1048869976","1048869983","DE","DEU","GERMANY" -"1048869984","1048870015","NL","NLD","NETHERLANDS" -"1048870016","1048870023","DE","DEU","GERMANY" -"1048870024","1048870087","NL","NLD","NETHERLANDS" -"1048870088","1048870095","DE","DEU","GERMANY" -"1048870096","1048870103","NL","NLD","NETHERLANDS" -"1048870104","1048870111","DE","DEU","GERMANY" -"1048870112","1048870127","NL","NLD","NETHERLANDS" -"1048870128","1048870135","DE","DEU","GERMANY" -"1048870136","1048870279","NL","NLD","NETHERLANDS" -"1048870280","1048870287","DE","DEU","GERMANY" -"1048870288","1048870399","NL","NLD","NETHERLANDS" -"1048870400","1048870911","DE","DEU","GERMANY" -"1048870912","1048871095","NL","NLD","NETHERLANDS" -"1048871096","1048871103","DE","DEU","GERMANY" -"1048871104","1048871935","NL","NLD","NETHERLANDS" -"1048871936","1048872703","DE","DEU","GERMANY" -"1048872704","1048872735","NL","NLD","NETHERLANDS" -"1048872736","1048872743","DE","DEU","GERMANY" -"1048872744","1048873263","NL","NLD","NETHERLANDS" -"1048873264","1048873271","DE","DEU","GERMANY" -"1048873272","1048873743","NL","NLD","NETHERLANDS" -"1048873744","1048873751","DE","DEU","GERMANY" -"1048873752","1048873791","NL","NLD","NETHERLANDS" -"1048873792","1048873799","DE","DEU","GERMANY" -"1048873800","1048873935","NL","NLD","NETHERLANDS" -"1048873936","1048873951","DE","DEU","GERMANY" -"1048873952","1048874151","NL","NLD","NETHERLANDS" -"1048874152","1048874159","DE","DEU","GERMANY" -"1048874160","1048874295","NL","NLD","NETHERLANDS" -"1048874296","1048874303","DE","DEU","GERMANY" -"1048874304","1048874327","NL","NLD","NETHERLANDS" -"1048874328","1048874335","DE","DEU","GERMANY" -"1048874336","1048874359","NL","NLD","NETHERLANDS" -"1048874360","1048874367","DE","DEU","GERMANY" -"1048874368","1048874415","NL","NLD","NETHERLANDS" -"1048874416","1048874423","DE","DEU","GERMANY" -"1048874424","1048874447","NL","NLD","NETHERLANDS" -"1048874448","1048874455","DE","DEU","GERMANY" -"1048874456","1048874471","NL","NLD","NETHERLANDS" -"1048874472","1048874479","DE","DEU","GERMANY" -"1048874480","1048874535","NL","NLD","NETHERLANDS" -"1048874536","1048874543","DE","DEU","GERMANY" -"1048874544","1048874703","NL","NLD","NETHERLANDS" -"1048874704","1048874711","DE","DEU","GERMANY" -"1048874712","1048875015","NL","NLD","NETHERLANDS" -"1048875016","1048875023","DE","DEU","GERMANY" -"1048875024","1048875191","NL","NLD","NETHERLANDS" -"1048875192","1048875199","DE","DEU","GERMANY" -"1048875200","1048875391","NL","NLD","NETHERLANDS" -"1048875392","1048875399","DE","DEU","GERMANY" -"1048875400","1048875671","NL","NLD","NETHERLANDS" -"1048875672","1048875679","DE","DEU","GERMANY" -"1048875680","1048875687","NL","NLD","NETHERLANDS" -"1048875688","1048875695","DE","DEU","GERMANY" -"1048875696","1048875703","NL","NLD","NETHERLANDS" -"1048875704","1048875711","DE","DEU","GERMANY" -"1048875712","1048875823","NL","NLD","NETHERLANDS" -"1048875824","1048875839","DE","DEU","GERMANY" -"1048875840","1048876255","NL","NLD","NETHERLANDS" -"1048876256","1048876263","DE","DEU","GERMANY" -"1048876264","1048876327","NL","NLD","NETHERLANDS" -"1048876328","1048876335","DE","DEU","GERMANY" -"1048876336","1048876807","NL","NLD","NETHERLANDS" -"1048876808","1048876815","DE","DEU","GERMANY" -"1048876816","1048876823","NL","NLD","NETHERLANDS" -"1048876824","1048876831","DE","DEU","GERMANY" -"1048876832","1048876991","NL","NLD","NETHERLANDS" -"1048876992","1048876999","DE","DEU","GERMANY" -"1048877000","1048877023","NL","NLD","NETHERLANDS" -"1048877024","1048877031","DE","DEU","GERMANY" -"1048877032","1048877039","NL","NLD","NETHERLANDS" -"1048877040","1048877055","DE","DEU","GERMANY" -"1048877056","1048877071","NL","NLD","NETHERLANDS" -"1048877072","1048877079","DE","DEU","GERMANY" -"1048877080","1048877103","NL","NLD","NETHERLANDS" -"1048877104","1048877111","DE","DEU","GERMANY" -"1048877112","1048877191","NL","NLD","NETHERLANDS" -"1048877192","1048877199","DE","DEU","GERMANY" -"1048877200","1048877247","NL","NLD","NETHERLANDS" -"1048877248","1048877263","DE","DEU","GERMANY" -"1048877264","1048877287","NL","NLD","NETHERLANDS" -"1048877288","1048877295","DE","DEU","GERMANY" -"1048877296","1048877311","NL","NLD","NETHERLANDS" -"1048877312","1048878087","DE","DEU","GERMANY" -"1048878088","1048878103","NL","NLD","NETHERLANDS" -"1048878104","1048878111","DE","DEU","GERMANY" -"1048878112","1048878335","NL","NLD","NETHERLANDS" -"1048878336","1048878343","DE","DEU","GERMANY" -"1048878344","1048878447","NL","NLD","NETHERLANDS" -"1048878448","1048878455","DE","DEU","GERMANY" -"1048878456","1048878487","NL","NLD","NETHERLANDS" -"1048878488","1048878495","DE","DEU","GERMANY" -"1048878496","1048878543","NL","NLD","NETHERLANDS" -"1048878544","1048878551","DE","DEU","GERMANY" -"1048878552","1048878663","NL","NLD","NETHERLANDS" -"1048878664","1048878671","DE","DEU","GERMANY" -"1048878672","1048878751","NL","NLD","NETHERLANDS" -"1048878752","1048878759","DE","DEU","GERMANY" -"1048878760","1048878815","NL","NLD","NETHERLANDS" -"1048878816","1048878823","DE","DEU","GERMANY" -"1048878824","1048878831","NL","NLD","NETHERLANDS" -"1048878832","1048878839","DE","DEU","GERMANY" -"1048878840","1048878983","NL","NLD","NETHERLANDS" -"1048878984","1048878991","DE","DEU","GERMANY" -"1048878992","1048879047","NL","NLD","NETHERLANDS" -"1048879048","1048879055","DE","DEU","GERMANY" -"1048879056","1048879199","NL","NLD","NETHERLANDS" -"1048879200","1048879207","DE","DEU","GERMANY" -"1048879208","1048879263","NL","NLD","NETHERLANDS" -"1048879264","1048879271","DE","DEU","GERMANY" -"1048879272","1048879335","NL","NLD","NETHERLANDS" -"1048879336","1048879343","DE","DEU","GERMANY" -"1048879344","1048879455","NL","NLD","NETHERLANDS" -"1048879456","1048879463","DE","DEU","GERMANY" -"1048879464","1048879687","NL","NLD","NETHERLANDS" -"1048879688","1048879695","DE","DEU","GERMANY" -"1048879696","1048880311","NL","NLD","NETHERLANDS" -"1048880312","1048880327","DE","DEU","GERMANY" -"1048880328","1048880639","NL","NLD","NETHERLANDS" -"1048880640","1048881159","DE","DEU","GERMANY" -"1048881160","1048881615","NL","NLD","NETHERLANDS" -"1048881616","1048881631","DE","DEU","GERMANY" -"1048881632","1048882071","NL","NLD","NETHERLANDS" -"1048882072","1048882079","DE","DEU","GERMANY" -"1048882080","1048882143","NL","NLD","NETHERLANDS" -"1048882144","1048882151","DE","DEU","GERMANY" -"1048882152","1048882311","NL","NLD","NETHERLANDS" -"1048882312","1048882319","DE","DEU","GERMANY" -"1048882320","1048882495","NL","NLD","NETHERLANDS" -"1048882496","1048882503","DE","DEU","GERMANY" -"1048882504","1048882703","NL","NLD","NETHERLANDS" -"1048882704","1048882711","DE","DEU","GERMANY" -"1048882712","1048882743","NL","NLD","NETHERLANDS" -"1048882744","1048882751","DE","DEU","GERMANY" -"1048882752","1048882823","NL","NLD","NETHERLANDS" -"1048882824","1048882831","DE","DEU","GERMANY" -"1048882832","1048882855","NL","NLD","NETHERLANDS" -"1048882856","1048882863","DE","DEU","GERMANY" -"1048882864","1048882951","NL","NLD","NETHERLANDS" -"1048882952","1048882959","DE","DEU","GERMANY" -"1048882960","1048883167","NL","NLD","NETHERLANDS" -"1048883168","1048883175","DE","DEU","GERMANY" -"1048883176","1048883319","NL","NLD","NETHERLANDS" -"1048883320","1048883327","DE","DEU","GERMANY" -"1048883328","1048883351","NL","NLD","NETHERLANDS" -"1048883352","1048883359","DE","DEU","GERMANY" -"1048883360","1048883871","NL","NLD","NETHERLANDS" -"1048883872","1048883879","DE","DEU","GERMANY" -"1048883880","1048884279","NL","NLD","NETHERLANDS" -"1048884280","1048884295","DE","DEU","GERMANY" -"1048884296","1048884975","NL","NLD","NETHERLANDS" -"1048884976","1048884983","DE","DEU","GERMANY" -"1048884984","1048884991","NL","NLD","NETHERLANDS" -"1048884992","1048884999","DE","DEU","GERMANY" -"1048885000","1048885111","NL","NLD","NETHERLANDS" -"1048885112","1048885119","DE","DEU","GERMANY" -"1048885120","1048885471","NL","NLD","NETHERLANDS" -"1048885472","1048885479","DE","DEU","GERMANY" -"1048885480","1048885575","NL","NLD","NETHERLANDS" -"1048885576","1048885583","DE","DEU","GERMANY" -"1048885584","1048885703","NL","NLD","NETHERLANDS" -"1048885704","1048885711","DE","DEU","GERMANY" -"1048885712","1048885767","NL","NLD","NETHERLANDS" -"1048885768","1048885775","DE","DEU","GERMANY" -"1048885776","1048885815","NL","NLD","NETHERLANDS" -"1048885816","1048885823","DE","DEU","GERMANY" -"1048885824","1048885839","NL","NLD","NETHERLANDS" -"1048885840","1048885847","DE","DEU","GERMANY" -"1048885848","1048886239","NL","NLD","NETHERLANDS" -"1048886240","1048886247","DE","DEU","GERMANY" -"1048886248","1048886343","NL","NLD","NETHERLANDS" -"1048886344","1048886351","DE","DEU","GERMANY" -"1048886352","1048886431","NL","NLD","NETHERLANDS" -"1048886432","1048886439","DE","DEU","GERMANY" -"1048886440","1048886463","NL","NLD","NETHERLANDS" -"1048886464","1048886471","DE","DEU","GERMANY" -"1048886472","1048886615","NL","NLD","NETHERLANDS" -"1048886616","1048886623","DE","DEU","GERMANY" -"1048886624","1048886871","NL","NLD","NETHERLANDS" -"1048886872","1048886879","DE","DEU","GERMANY" -"1048886880","1048886903","NL","NLD","NETHERLANDS" -"1048886904","1048886911","DE","DEU","GERMANY" -"1048886912","1048887039","NL","NLD","NETHERLANDS" -"1048887040","1048887047","DE","DEU","GERMANY" -"1048887048","1048887935","NL","NLD","NETHERLANDS" -"1048887936","1048887999","DE","DEU","GERMANY" -"1048888000","1048891391","NL","NLD","NETHERLANDS" -"1048891392","1048891399","DE","DEU","GERMANY" -"1048891400","1048891823","NL","NLD","NETHERLANDS" -"1048891824","1048891831","DE","DEU","GERMANY" -"1048891832","1048891911","NL","NLD","NETHERLANDS" -"1048891912","1048891919","DE","DEU","GERMANY" -"1048891920","1048892311","NL","NLD","NETHERLANDS" -"1048892312","1048892319","DE","DEU","GERMANY" -"1048892320","1048892343","NL","NLD","NETHERLANDS" -"1048892344","1048892351","DE","DEU","GERMANY" -"1048892352","1048892367","NL","NLD","NETHERLANDS" -"1048892368","1048892375","DE","DEU","GERMANY" -"1048892376","1048892815","NL","NLD","NETHERLANDS" -"1048892816","1048892823","DE","DEU","GERMANY" -"1048892824","1048892863","NL","NLD","NETHERLANDS" -"1048892864","1048892871","DE","DEU","GERMANY" -"1048892872","1048892895","NL","NLD","NETHERLANDS" -"1048892896","1048892903","DE","DEU","GERMANY" -"1048892904","1048893279","NL","NLD","NETHERLANDS" -"1048893280","1048893287","DE","DEU","GERMANY" -"1048893288","1048893303","NL","NLD","NETHERLANDS" -"1048893304","1048893311","DE","DEU","GERMANY" -"1048893312","1048893591","NL","NLD","NETHERLANDS" -"1048893592","1048893599","DE","DEU","GERMANY" -"1048893600","1048893703","NL","NLD","NETHERLANDS" -"1048893704","1048893711","DE","DEU","GERMANY" -"1048893712","1048893719","NL","NLD","NETHERLANDS" -"1048893720","1048893727","DE","DEU","GERMANY" -"1048893728","1048893919","NL","NLD","NETHERLANDS" -"1048893920","1048893927","DE","DEU","GERMANY" -"1048893928","1048893983","NL","NLD","NETHERLANDS" -"1048893984","1048893991","DE","DEU","GERMANY" -"1048893992","1048894039","NL","NLD","NETHERLANDS" -"1048894040","1048894047","DE","DEU","GERMANY" -"1048894048","1048894071","NL","NLD","NETHERLANDS" -"1048894072","1048894079","DE","DEU","GERMANY" -"1048894080","1048894215","NL","NLD","NETHERLANDS" -"1048894216","1048894223","DE","DEU","GERMANY" -"1048894224","1048894471","NL","NLD","NETHERLANDS" -"1048894472","1048894479","DE","DEU","GERMANY" -"1048894480","1048894487","NL","NLD","NETHERLANDS" -"1048894488","1048894495","DE","DEU","GERMANY" -"1048894496","1048894607","NL","NLD","NETHERLANDS" -"1048894608","1048894615","DE","DEU","GERMANY" -"1048894616","1048894671","NL","NLD","NETHERLANDS" -"1048894672","1048894679","DE","DEU","GERMANY" -"1048894680","1048894735","NL","NLD","NETHERLANDS" -"1048894736","1048894743","DE","DEU","GERMANY" -"1048894744","1048894895","NL","NLD","NETHERLANDS" -"1048894896","1048894903","DE","DEU","GERMANY" -"1048894904","1048895031","NL","NLD","NETHERLANDS" -"1048895032","1048895039","DE","DEU","GERMANY" -"1048895040","1048895079","NL","NLD","NETHERLANDS" -"1048895080","1048895087","DE","DEU","GERMANY" -"1048895088","1048895271","NL","NLD","NETHERLANDS" -"1048895272","1048895279","DE","DEU","GERMANY" -"1048895280","1048895439","NL","NLD","NETHERLANDS" -"1048895440","1048895447","DE","DEU","GERMANY" -"1048895448","1048895551","NL","NLD","NETHERLANDS" -"1048895552","1048895559","DE","DEU","GERMANY" -"1048895560","1048895647","NL","NLD","NETHERLANDS" -"1048895648","1048895655","DE","DEU","GERMANY" -"1048895656","1048895967","NL","NLD","NETHERLANDS" -"1048895968","1048895975","DE","DEU","GERMANY" -"1048895976","1048896231","NL","NLD","NETHERLANDS" -"1048896232","1048896239","DE","DEU","GERMANY" -"1048896240","1048896271","NL","NLD","NETHERLANDS" -"1048896272","1048896279","DE","DEU","GERMANY" -"1048896280","1048896319","NL","NLD","NETHERLANDS" -"1048896320","1048896327","DE","DEU","GERMANY" -"1048896328","1048896479","NL","NLD","NETHERLANDS" -"1048896480","1048896487","DE","DEU","GERMANY" -"1048896488","1048896519","NL","NLD","NETHERLANDS" -"1048896520","1048896535","DE","DEU","GERMANY" -"1048896536","1048896671","NL","NLD","NETHERLANDS" -"1048896672","1048896679","DE","DEU","GERMANY" -"1048896680","1048896687","NL","NLD","NETHERLANDS" -"1048896688","1048896695","DE","DEU","GERMANY" -"1048896696","1048896735","NL","NLD","NETHERLANDS" -"1048896736","1048896743","DE","DEU","GERMANY" -"1048896744","1048896871","NL","NLD","NETHERLANDS" -"1048896872","1048896879","DE","DEU","GERMANY" -"1048896880","1048896967","NL","NLD","NETHERLANDS" -"1048896968","1048896975","DE","DEU","GERMANY" -"1048896976","1048897119","NL","NLD","NETHERLANDS" -"1048897120","1048897135","DE","DEU","GERMANY" -"1048897136","1048897239","NL","NLD","NETHERLANDS" -"1048897240","1048897247","DE","DEU","GERMANY" -"1048897248","1048897271","NL","NLD","NETHERLANDS" -"1048897272","1048897279","DE","DEU","GERMANY" -"1048897280","1048897295","NL","NLD","NETHERLANDS" -"1048897296","1048897311","DE","DEU","GERMANY" -"1048897312","1048897319","NL","NLD","NETHERLANDS" -"1048897320","1048897327","DE","DEU","GERMANY" -"1048897328","1048897367","NL","NLD","NETHERLANDS" -"1048897368","1048897375","DE","DEU","GERMANY" -"1048897376","1048897463","NL","NLD","NETHERLANDS" -"1048897464","1048897471","DE","DEU","GERMANY" -"1048897472","1048897495","NL","NLD","NETHERLANDS" -"1048897496","1048897503","DE","DEU","GERMANY" -"1048897504","1048897735","NL","NLD","NETHERLANDS" -"1048897736","1048897743","DE","DEU","GERMANY" -"1048897744","1048898719","NL","NLD","NETHERLANDS" -"1048898720","1048898727","DE","DEU","GERMANY" -"1048898728","1048898991","NL","NLD","NETHERLANDS" -"1048898992","1048898999","DE","DEU","GERMANY" -"1048899000","1048899047","NL","NLD","NETHERLANDS" -"1048899048","1048899055","DE","DEU","GERMANY" -"1048899056","1048899271","NL","NLD","NETHERLANDS" -"1048899272","1048899279","DE","DEU","GERMANY" -"1048899280","1048899287","NL","NLD","NETHERLANDS" -"1048899288","1048899295","DE","DEU","GERMANY" -"1048899296","1048899303","NL","NLD","NETHERLANDS" -"1048899304","1048899311","DE","DEU","GERMANY" -"1048899312","1048899591","NL","NLD","NETHERLANDS" -"1048899592","1048899599","DE","DEU","GERMANY" -"1048899600","1048900071","NL","NLD","NETHERLANDS" -"1048900072","1048900079","DE","DEU","GERMANY" -"1048900080","1048900127","NL","NLD","NETHERLANDS" -"1048900128","1048900135","DE","DEU","GERMANY" -"1048900136","1048900311","NL","NLD","NETHERLANDS" -"1048900312","1048900319","DE","DEU","GERMANY" -"1048900320","1048900343","NL","NLD","NETHERLANDS" -"1048900344","1048900351","DE","DEU","GERMANY" -"1048900352","1048900367","NL","NLD","NETHERLANDS" -"1048900368","1048900375","DE","DEU","GERMANY" -"1048900376","1048900391","NL","NLD","NETHERLANDS" -"1048900392","1048900399","DE","DEU","GERMANY" -"1048900400","1048900703","NL","NLD","NETHERLANDS" -"1048900704","1048900711","DE","DEU","GERMANY" -"1048900712","1048900935","NL","NLD","NETHERLANDS" -"1048900936","1048900951","DE","DEU","GERMANY" -"1048900952","1048901167","NL","NLD","NETHERLANDS" -"1048901168","1048901175","DE","DEU","GERMANY" -"1048901176","1048901199","NL","NLD","NETHERLANDS" -"1048901200","1048901207","DE","DEU","GERMANY" -"1048901208","1048901311","NL","NLD","NETHERLANDS" -"1048901312","1048901319","DE","DEU","GERMANY" -"1048901320","1048901327","NL","NLD","NETHERLANDS" -"1048901328","1048901335","DE","DEU","GERMANY" -"1048901336","1048901615","NL","NLD","NETHERLANDS" -"1048901616","1048901623","DE","DEU","GERMANY" -"1048901624","1048901831","NL","NLD","NETHERLANDS" -"1048901832","1048901839","DE","DEU","GERMANY" -"1048901840","1048901847","NL","NLD","NETHERLANDS" -"1048901848","1048901863","DE","DEU","GERMANY" -"1048901864","1048902335","NL","NLD","NETHERLANDS" -"1048902336","1048902343","DE","DEU","GERMANY" -"1048902344","1048902359","NL","NLD","NETHERLANDS" -"1048902360","1048902367","DE","DEU","GERMANY" -"1048902368","1048902391","NL","NLD","NETHERLANDS" -"1048902392","1048902399","DE","DEU","GERMANY" -"1048902400","1048902447","NL","NLD","NETHERLANDS" -"1048902448","1048902455","DE","DEU","GERMANY" -"1048902456","1048902527","NL","NLD","NETHERLANDS" -"1048902528","1048902535","DE","DEU","GERMANY" -"1048902536","1048902583","NL","NLD","NETHERLANDS" -"1048902584","1048902591","DE","DEU","GERMANY" -"1048902592","1048902671","NL","NLD","NETHERLANDS" -"1048902672","1048902679","DE","DEU","GERMANY" -"1048902680","1048903071","NL","NLD","NETHERLANDS" -"1048903072","1048903079","DE","DEU","GERMANY" -"1048903080","1048903095","NL","NLD","NETHERLANDS" -"1048903096","1048903103","DE","DEU","GERMANY" -"1048903104","1048903679","NL","NLD","NETHERLANDS" -"1048903680","1048911871","GB","GBR","UNITED KINGDOM" -"1048911872","1048920063","IT","ITA","ITALY" -"1048920064","1048936447","NL","NLD","NETHERLANDS" -"1048936448","1048944639","PL","POL","POLAND" -"1048944640","1048952831","RU","RUS","RUSSIAN FEDERATION" -"1048952832","1048953407","NL","NLD","NETHERLANDS" -"1048953408","1048953439","BE","BEL","BELGIUM" -"1048953440","1048954967","NL","NLD","NETHERLANDS" -"1048954968","1048954975","BE","BEL","BELGIUM" -"1048954976","1048969215","NL","NLD","NETHERLANDS" -"1048969216","1048973823","DE","DEU","GERMANY" -"1048974336","1048975183","DE","DEU","GERMANY" -"1048976288","1048976295","DE","DEU","GERMANY" -"1048976297","1048976302","DE","DEU","GERMANY" -"1048976304","1048976319","DE","DEU","GERMANY" -"1048976384","1048976447","DE","DEU","GERMANY" -"1048976512","1048977407","DE","DEU","GERMANY" -"1048978432","1048978943","DE","DEU","GERMANY" -"1048979136","1048979295","DE","DEU","GERMANY" -"1048979328","1048980495","DE","DEU","GERMANY" -"1048980512","1048980527","DE","DEU","GERMANY" -"1048980560","1048980731","DE","DEU","GERMANY" -"1048980736","1048980791","DE","DEU","GERMANY" -"1048980804","1048980807","DE","DEU","GERMANY" -"1048980816","1048980823","DE","DEU","GERMANY" -"1048980832","1048980959","DE","DEU","GERMANY" -"1048980968","1048980975","DE","DEU","GERMANY" -"1048981504","1048981759","DE","DEU","GERMANY" -"1048981792","1048981823","DE","DEU","GERMANY" -"1048982016","1048983039","DE","DEU","GERMANY" -"1048983168","1048983423","DE","DEU","GERMANY" -"1048983488","1048983679","DE","DEU","GERMANY" -"1048984832","1048985167","DE","DEU","GERMANY" -"1048985184","1048985199","DE","DEU","GERMANY" -"1048985216","1048985375","DE","DEU","GERMANY" -"1048985600","1049002015","DE","DEU","GERMANY" -"1049002176","1049002239","DE","DEU","GERMANY" -"1049002624","1049002751","DE","DEU","GERMANY" -"1049003264","1049004291","DE","DEU","GERMANY" -"1049004352","1049004415","DE","DEU","GERMANY" -"1049004544","1049006079","DE","DEU","GERMANY" -"1049007104","1049007111","DE","DEU","GERMANY" -"1049007120","1049007135","DE","DEU","GERMANY" -"1049007360","1049011711","DE","DEU","GERMANY" -"1049011968","1049012479","DE","DEU","GERMANY" -"1049012736","1049016703","DE","DEU","GERMANY" -"1049016704","1049016711","FR","FRA","FRANCE" -"1049016712","1049016715","RU","RUS","RUSSIAN FEDERATION" -"1049016716","1049016743","DE","DEU","GERMANY" -"1049016744","1049016751","MA","MAR","MOROCCO" -"1049016752","1049016759","DE","DEU","GERMANY" -"1049016760","1049016767","FR","FRA","FRANCE" -"1049016768","1049016815","DE","DEU","GERMANY" -"1049016816","1049016831","NL","NLD","NETHERLANDS" -"1049016832","1049016847","DE","DEU","GERMANY" -"1049016848","1049016863","FR","FRA","FRANCE" -"1049016864","1049017983","DE","DEU","GERMANY" -"1049017984","1049018047","GE","GEO","GEORGIA" -"1049018048","1049020127","DE","DEU","GERMANY" -"1049020128","1049020135","FR","FRA","FRANCE" -"1049020136","1049020479","DE","DEU","GERMANY" -"1049020480","1049020543","GE","GEO","GEORGIA" -"1049020544","1049026559","DE","DEU","GERMANY" -"1049026816","1049032159","DE","DEU","GERMANY" -"1049032168","1049032171","DE","DEU","GERMANY" -"1049032176","1049032287","DE","DEU","GERMANY" -"1049032296","1049032319","DE","DEU","GERMANY" -"1049032400","1049032639","DE","DEU","GERMANY" -"1049032648","1049032699","DE","DEU","GERMANY" -"1049032704","1049034751","DE","DEU","GERMANY" -"1049067520","1049100287","DK","DNK","DENMARK" -"1049100288","1049231359","GB","GBR","UNITED KINGDOM" -"1049231360","1049296895","DE","DEU","GERMANY" -"1049362432","1049362575","DE","DEU","GERMANY" -"1049362576","1049362943","GB","GBR","UNITED KINGDOM" -"1049362944","1049362959","DE","DEU","GERMANY" -"1049362960","1049363071","GB","GBR","UNITED KINGDOM" -"1049363072","1049363135","DE","DEU","GERMANY" -"1049363136","1049363967","GB","GBR","UNITED KINGDOM" -"1049363968","1049364223","DE","DEU","GERMANY" -"1049364224","1049364991","GB","GBR","UNITED KINGDOM" -"1049364992","1049365247","DE","DEU","GERMANY" -"1049365248","1049365711","GB","GBR","UNITED KINGDOM" -"1049365712","1049365719","DE","DEU","GERMANY" -"1049365720","1049365727","GB","GBR","UNITED KINGDOM" -"1049365728","1049365751","DE","DEU","GERMANY" -"1049365752","1049365887","GB","GBR","UNITED KINGDOM" -"1049365888","1049365951","DE","DEU","GERMANY" -"1049365952","1049366015","GB","GBR","UNITED KINGDOM" -"1049366016","1049366271","DE","DEU","GERMANY" -"1049366272","1049366335","GB","GBR","UNITED KINGDOM" -"1049366336","1049366399","DE","DEU","GERMANY" -"1049366400","1049366527","GB","GBR","UNITED KINGDOM" -"1049366528","1049368575","DE","DEU","GERMANY" -"1049368576","1049368671","GB","GBR","UNITED KINGDOM" -"1049368672","1049368687","DE","DEU","GERMANY" -"1049368688","1049369599","GB","GBR","UNITED KINGDOM" -"1049369600","1049369935","DE","DEU","GERMANY" -"1049369936","1049369983","GB","GBR","UNITED KINGDOM" -"1049369984","1049370047","DE","DEU","GERMANY" -"1049370048","1049370175","GB","GBR","UNITED KINGDOM" -"1049370176","1049370255","DE","DEU","GERMANY" -"1049370256","1049370367","GB","GBR","UNITED KINGDOM" -"1049370368","1049370623","DE","DEU","GERMANY" -"1049370624","1049378815","AT","AUT","AUSTRIA" -"1049395200","1049405055","NL","NLD","NETHERLANDS" -"1049405056","1049405183","GB","GBR","UNITED KINGDOM" -"1049405184","1049405247","LU","LUX","LUXEMBOURG" -"1049405248","1049405311","NL","NLD","NETHERLANDS" -"1049405312","1049405375","BE","BEL","BELGIUM" -"1049405376","1049405439","NL","NLD","NETHERLANDS" -"1049405440","1049405567","DE","DEU","GERMANY" -"1049405568","1049405631","BE","BEL","BELGIUM" -"1049405632","1049405695","AT","AUT","AUSTRIA" -"1049405696","1049405759","CH","CHE","SWITZERLAND" -"1049405760","1049405823","ES","ESP","SPAIN" -"1049405824","1049405887","FR","FRA","FRANCE" -"1049405888","1049405951","GB","GBR","UNITED KINGDOM" -"1049405952","1049407615","NL","NLD","NETHERLANDS" -"1049407616","1049407999","CH","CHE","SWITZERLAND" -"1049408000","1049409023","NL","NLD","NETHERLANDS" -"1049409024","1049409279","DE","DEU","GERMANY" -"1049409280","1049411583","NL","NLD","NETHERLANDS" -"1049411584","1049419775","GB","GBR","UNITED KINGDOM" -"1049419776","1049427967","RU","RUS","RUSSIAN FEDERATION" -"1049427968","1049436159","CZ","CZE","CZECH REPUBLIC" -"1049436160","1049444351","DE","DEU","GERMANY" -"1049444352","1049460735","RU","RUS","RUSSIAN FEDERATION" -"1049460736","1049468927","NO","NOR","NORWAY" -"1049468928","1049477119","DE","DEU","GERMANY" -"1049477120","1049493503","PL","POL","POLAND" -"1049493504","1049518079","FI","FIN","FINLAND" -"1049518080","1049518095","GB","GBR","UNITED KINGDOM" -"1049518096","1049559039","FI","FIN","FINLAND" -"1049559040","1049653095","DE","DEU","GERMANY" -"1049653096","1049653103","US","USA","UNITED STATES" -"1049653104","1049698303","DE","DEU","GERMANY" -"1049698304","1049706495","NL","NLD","NETHERLANDS" -"1049706496","1049707007","GB","GBR","UNITED KINGDOM" -"1049707008","1049707519","NL","NLD","NETHERLANDS" -"1049707520","1049707775","LB","LBN","LEBANON" -"1049707776","1049708031","DZ","DZA","ALGERIA" -"1049708032","1049709055","GB","GBR","UNITED KINGDOM" -"1049709056","1049709311","NL","NLD","NETHERLANDS" -"1049709312","1049709567","GB","GBR","UNITED KINGDOM" -"1049709568","1049710591","NL","NLD","NETHERLANDS" -"1049710592","1049712639","GB","GBR","UNITED KINGDOM" -"1049712640","1049713055","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1049713056","1049713087","MA","MAR","MOROCCO" -"1049713088","1049713151","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1049713152","1049713663","NL","NLD","NETHERLANDS" -"1049713664","1049713791","LB","LBN","LEBANON" -"1049713792","1049713919","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1049713920","1049714175","GB","GBR","UNITED KINGDOM" -"1049714176","1049714687","NL","NLD","NETHERLANDS" -"1049714688","1049715711","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1049715712","1049716735","NL","NLD","NETHERLANDS" -"1049716736","1049717759","IQ","IRQ","IRAQ" -"1049717760","1049718015","GB","GBR","UNITED KINGDOM" -"1049718016","1049718271","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1049718272","1049722879","NL","NLD","NETHERLANDS" -"1049722880","1049731071","IS","ISL","ICELAND" -"1049731072","1049739263","FI","FIN","FINLAND" -"1049739264","1049755647","NL","NLD","NETHERLANDS" -"1049755648","1049757599","DE","DEU","GERMANY" -"1049757600","1049757631","LU","LUX","LUXEMBOURG" -"1049757632","1049757647","DE","DEU","GERMANY" -"1049757648","1049757663","CA","CAN","CANADA" -"1049757664","1049757671","BA","BIH","BOSNIA AND HERZEGOVINA" -"1049757672","1049758063","DE","DEU","GERMANY" -"1049758064","1049758071","PL","POL","POLAND" -"1049758072","1049758095","DE","DEU","GERMANY" -"1049758096","1049758103","ES","ESP","SPAIN" -"1049758104","1049758527","DE","DEU","GERMANY" -"1049758528","1049758559","DK","DNK","DENMARK" -"1049758560","1049759983","DE","DEU","GERMANY" -"1049759984","1049759999","AE","ARE","UNITED ARAB EMIRATES" -"1049760000","1049760639","DE","DEU","GERMANY" -"1049760640","1049760703","IT","ITA","ITALY" -"1049760704","1049760927","DE","DEU","GERMANY" -"1049760928","1049760959","DK","DNK","DENMARK" -"1049760960","1049761023","PL","POL","POLAND" -"1049761024","1049761791","DE","DEU","GERMANY" -"1049761792","1049762047","PL","POL","POLAND" -"1049762048","1049762271","DE","DEU","GERMANY" -"1049762272","1049762303","DK","DNK","DENMARK" -"1049762304","1049763871","DE","DEU","GERMANY" -"1049763872","1049763903","PL","POL","POLAND" -"1049763904","1049764447","DE","DEU","GERMANY" -"1049764448","1049764463","AE","ARE","UNITED ARAB EMIRATES" -"1049764464","1049765695","DE","DEU","GERMANY" -"1049765696","1049765791","PL","POL","POLAND" -"1049765792","1049766415","DE","DEU","GERMANY" -"1049766416","1049766431","ES","ESP","SPAIN" -"1049766432","1049766511","DE","DEU","GERMANY" -"1049766512","1049766527","AE","ARE","UNITED ARAB EMIRATES" -"1049766528","1049767935","DE","DEU","GERMANY" -"1049767936","1049767951","AE","ARE","UNITED ARAB EMIRATES" -"1049767952","1049768063","DE","DEU","GERMANY" -"1049768064","1049768095","DK","DNK","DENMARK" -"1049768096","1049768367","DE","DEU","GERMANY" -"1049768368","1049768375","NL","NLD","NETHERLANDS" -"1049768376","1049768383","GB","GBR","UNITED KINGDOM" -"1049768384","1049768767","DE","DEU","GERMANY" -"1049768768","1049768799","AE","ARE","UNITED ARAB EMIRATES" -"1049768800","1049769119","DE","DEU","GERMANY" -"1049769120","1049769151","AE","ARE","UNITED ARAB EMIRATES" -"1049769152","1049770111","DE","DEU","GERMANY" -"1049770112","1049770127","AE","ARE","UNITED ARAB EMIRATES" -"1049770128","1049771391","DE","DEU","GERMANY" -"1049771392","1049771519","IT","ITA","ITALY" -"1049771520","1049772895","DE","DEU","GERMANY" -"1049772896","1049772927","AE","ARE","UNITED ARAB EMIRATES" -"1049772928","1049773055","ES","ESP","SPAIN" -"1049773056","1049773311","PL","POL","POLAND" -"1049773312","1049774367","DE","DEU","GERMANY" -"1049774368","1049774399","IT","ITA","ITALY" -"1049774400","1049775087","DE","DEU","GERMANY" -"1049775088","1049775103","AE","ARE","UNITED ARAB EMIRATES" -"1049775104","1049775119","CH","CHE","SWITZERLAND" -"1049775120","1049776447","DE","DEU","GERMANY" -"1049776448","1049776479","AE","ARE","UNITED ARAB EMIRATES" -"1049776480","1049777023","DE","DEU","GERMANY" -"1049777024","1049777039","CH","CHE","SWITZERLAND" -"1049777040","1049778111","DE","DEU","GERMANY" -"1049778112","1049778143","ES","ESP","SPAIN" -"1049778144","1049778335","DE","DEU","GERMANY" -"1049778336","1049778351","AE","ARE","UNITED ARAB EMIRATES" -"1049778352","1049778535","DE","DEU","GERMANY" -"1049778536","1049778543","AT","AUT","AUSTRIA" -"1049778544","1049779063","DE","DEU","GERMANY" -"1049779064","1049779071","PL","POL","POLAND" -"1049779072","1049779135","DE","DEU","GERMANY" -"1049779136","1049779167","AE","ARE","UNITED ARAB EMIRATES" -"1049779168","1049782303","DE","DEU","GERMANY" -"1049782304","1049782335","AE","ARE","UNITED ARAB EMIRATES" -"1049782336","1049782623","DE","DEU","GERMANY" -"1049782624","1049782639","ES","ESP","SPAIN" -"1049782640","1049782743","DE","DEU","GERMANY" -"1049782744","1049782751","IT","ITA","ITALY" -"1049782752","1049783071","DE","DEU","GERMANY" -"1049783072","1049783103","DK","DNK","DENMARK" -"1049783104","1049783743","DE","DEU","GERMANY" -"1049783744","1049783759","AE","ARE","UNITED ARAB EMIRATES" -"1049783760","1049784575","DE","DEU","GERMANY" -"1049784576","1049784831","PL","POL","POLAND" -"1049784832","1049784999","DE","DEU","GERMANY" -"1049785000","1049785007","AT","AUT","AUSTRIA" -"1049785008","1049787135","DE","DEU","GERMANY" -"1049787136","1049787391","PL","POL","POLAND" -"1049787392","1049787647","DE","DEU","GERMANY" -"1049787648","1049788159","PL","POL","POLAND" -"1049788160","1049791047","DE","DEU","GERMANY" -"1049791048","1049791055","PL","POL","POLAND" -"1049791056","1049817151","DE","DEU","GERMANY" -"1049817152","1049817159","PL","POL","POLAND" -"1049817160","1049817287","DE","DEU","GERMANY" -"1049817288","1049817295","AE","ARE","UNITED ARAB EMIRATES" -"1049817296","1049821183","DE","DEU","GERMANY" -"1049821184","1049886719","FR","FRA","FRANCE" -"1049886720","1049894911","RU","RUS","RUSSIAN FEDERATION" -"1049894912","1049903103","NO","NOR","NORWAY" -"1049903104","1049911295","PL","POL","POLAND" -"1049911296","1049919487","FI","FIN","FINLAND" -"1049919488","1049927679","RU","RUS","RUSSIAN FEDERATION" -"1049927680","1049935871","NL","NLD","NETHERLANDS" -"1049935872","1049944063","FI","FIN","FINLAND" -"1049944064","1049952255","RU","RUS","RUSSIAN FEDERATION" -"1049952256","1049960447","UA","UKR","UKRAINE" -"1049960448","1049968639","GB","GBR","UNITED KINGDOM" -"1049968640","1049985023","SA","SAU","SAUDI ARABIA" -"1049985024","1050017791","IT","ITA","ITALY" -"1050017792","1050083327","KW","KWT","KUWAIT" -"1050083328","1050148863","ES","ESP","SPAIN" -"1050148864","1050157055","CY","CYP","CYPRUS" -"1050157056","1050173439","RU","RUS","RUSSIAN FEDERATION" -"1050173440","1050174063","IT","ITA","ITALY" -"1050174064","1050174079","FR","FRA","FRANCE" -"1050174080","1050181631","IT","ITA","ITALY" -"1050181632","1050189823","PL","POL","POLAND" -"1050189824","1050198015","DE","DEU","GERMANY" -"1050198016","1050206207","RU","RUS","RUSSIAN FEDERATION" -"1050206208","1050214399","SK","SVK","SLOVAKIA" -"1050214400","1050244935","DE","DEU","GERMANY" -"1050244936","1050244943","PL","POL","POLAND" -"1050244944","1050320231","DE","DEU","GERMANY" -"1050320232","1050320239","GB","GBR","UNITED KINGDOM" -"1050320240","1050340607","DE","DEU","GERMANY" -"1050340608","1050340639","US","USA","UNITED STATES" -"1050340640","1050450711","DE","DEU","GERMANY" -"1050450712","1050450719","NL","NLD","NETHERLANDS" -"1050450720","1050471391","DE","DEU","GERMANY" -"1050471392","1050471399","IT","ITA","ITALY" -"1050471400","1050502559","DE","DEU","GERMANY" -"1050502560","1050502567","US","USA","UNITED STATES" -"1050502568","1050505247","DE","DEU","GERMANY" -"1050505248","1050505279","CA","CAN","CANADA" -"1050505280","1050515647","DE","DEU","GERMANY" -"1050515648","1050515663","DK","DNK","DENMARK" -"1050515664","1050522407","DE","DEU","GERMANY" -"1050522408","1050522415","CH","CHE","SWITZERLAND" -"1050522416","1050619503","DE","DEU","GERMANY" -"1050619504","1050619511","CH","CHE","SWITZERLAND" -"1050619512","1050621407","DE","DEU","GERMANY" -"1050621408","1050621439","BE","BEL","BELGIUM" -"1050621440","1050625959","DE","DEU","GERMANY" -"1050625960","1050625967","AT","AUT","AUSTRIA" -"1050625968","1050626559","DE","DEU","GERMANY" -"1050626560","1050626815","GB","GBR","UNITED KINGDOM" -"1050626816","1050647431","DE","DEU","GERMANY" -"1050647432","1050647439","NL","NLD","NETHERLANDS" -"1050647440","1050664911","DE","DEU","GERMANY" -"1050664912","1050664919","IT","ITA","ITALY" -"1050664920","1050667519","DE","DEU","GERMANY" -"1050667520","1050667775","FR","FRA","FRANCE" -"1050667776","1050672479","DE","DEU","GERMANY" -"1050672480","1050672487","SG","SGP","SINGAPORE" -"1050672488","1050673151","DE","DEU","GERMANY" -"1050673152","1050676470","FR","FRA","FRANCE" -"1050676471","1050676471","BE","BEL","BELGIUM" -"1050676472","1050677335","FR","FRA","FRANCE" -"1050677336","1050677343","DE","DEU","GERMANY" -"1050677344","1050677505","FR","FRA","FRANCE" -"1050677506","1050677506","BE","BEL","BELGIUM" -"1050677507","1050677702","FR","FRA","FRANCE" -"1050677703","1050677703","BE","BEL","BELGIUM" -"1050677704","1050683711","FR","FRA","FRANCE" -"1050683712","1050683719","DK","DNK","DENMARK" -"1050683720","1050684095","FR","FRA","FRANCE" -"1050684096","1050684103","GB","GBR","UNITED KINGDOM" -"1050684104","1050684609","FR","FRA","FRANCE" -"1050684610","1050684610","LU","LUX","LUXEMBOURG" -"1050684611","1050702623","FR","FRA","FRANCE" -"1050702624","1050702631","DE","DEU","GERMANY" -"1050702632","1050704082","FR","FRA","FRANCE" -"1050704083","1050704083","BE","BEL","BELGIUM" -"1050704084","1050704661","FR","FRA","FRANCE" -"1050704662","1050704662","GB","GBR","UNITED KINGDOM" -"1050704663","1050722831","FR","FRA","FRANCE" -"1050722832","1050722839","DE","DEU","GERMANY" -"1050722840","1050725463","FR","FRA","FRANCE" -"1050725464","1050725471","GB","GBR","UNITED KINGDOM" -"1050725472","1050726335","FR","FRA","FRANCE" -"1050726336","1050726343","DE","DEU","GERMANY" -"1050726344","1050731146","FR","FRA","FRANCE" -"1050731147","1050731147","GB","GBR","UNITED KINGDOM" -"1050731148","1050763476","FR","FRA","FRANCE" -"1050763477","1050763477","GB","GBR","UNITED KINGDOM" -"1050763478","1050765853","FR","FRA","FRANCE" -"1050765854","1050765854","BE","BEL","BELGIUM" -"1050765855","1050766665","FR","FRA","FRANCE" -"1050766666","1050766666","BE","BEL","BELGIUM" -"1050766667","1050766729","FR","FRA","FRANCE" -"1050766730","1050766730","BE","BEL","BELGIUM" -"1050766731","1050768551","FR","FRA","FRANCE" -"1050768552","1050768558","CH","CHE","SWITZERLAND" -"1050768559","1050804223","FR","FRA","FRANCE" -"1050804224","1050869759","MK","MKD","THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA" -"1050869760","1050935295","NL","NLD","NETHERLANDS" -"1050940928","1050941183","ES","ESP","SPAIN" -"1050943232","1050943487","ES","ESP","SPAIN" -"1050945536","1050945791","ES","ESP","SPAIN" -"1050948608","1050948863","ES","ESP","SPAIN" -"1050968064","1051000831","GB","GBR","UNITED KINGDOM" -"1051000832","1051017215","RU","RUS","RUSSIAN FEDERATION" -"1051017216","1051033599","NL","NLD","NETHERLANDS" -"1051033600","1051049983","FI","FIN","FINLAND" -"1051049984","1051066367","HU","HUN","HUNGARY" -"1051066368","1051084287","NL","NLD","NETHERLANDS" -"1051084288","1051084799","BE","BEL","BELGIUM" -"1051084800","1051096831","NL","NLD","NETHERLANDS" -"1051096832","1051097087","BE","BEL","BELGIUM" -"1051097088","1051098111","NL","NLD","NETHERLANDS" -"1051098112","1051099135","BE","BEL","BELGIUM" -"1051099136","1051099647","NL","NLD","NETHERLANDS" -"1051099648","1051099663","BE","BEL","BELGIUM" -"1051099664","1051099671","NL","NLD","NETHERLANDS" -"1051099672","1051099687","BE","BEL","BELGIUM" -"1051099688","1051099695","NL","NLD","NETHERLANDS" -"1051099696","1051099711","BE","BEL","BELGIUM" -"1051099712","1051099727","NL","NLD","NETHERLANDS" -"1051099728","1051099775","BE","BEL","BELGIUM" -"1051099776","1051099791","NL","NLD","NETHERLANDS" -"1051099792","1051099799","BE","BEL","BELGIUM" -"1051099800","1051099807","NL","NLD","NETHERLANDS" -"1051099808","1051099815","BE","BEL","BELGIUM" -"1051099816","1051099823","NL","NLD","NETHERLANDS" -"1051099824","1051099847","BE","BEL","BELGIUM" -"1051099848","1051099863","NL","NLD","NETHERLANDS" -"1051099864","1051099879","BE","BEL","BELGIUM" -"1051099880","1051099887","NL","NLD","NETHERLANDS" -"1051099888","1051099927","BE","BEL","BELGIUM" -"1051099928","1051099967","NL","NLD","NETHERLANDS" -"1051099968","1051099975","BE","BEL","BELGIUM" -"1051099976","1051099991","NL","NLD","NETHERLANDS" -"1051099992","1051100015","BE","BEL","BELGIUM" -"1051100016","1051100023","NL","NLD","NETHERLANDS" -"1051100024","1051100031","BE","BEL","BELGIUM" -"1051100032","1051100039","NL","NLD","NETHERLANDS" -"1051100040","1051100079","BE","BEL","BELGIUM" -"1051100080","1051100095","NL","NLD","NETHERLANDS" -"1051100096","1051100143","BE","BEL","BELGIUM" -"1051100144","1051100159","NL","NLD","NETHERLANDS" -"1051100160","1051100455","BE","BEL","BELGIUM" -"1051100456","1051100463","NL","NLD","NETHERLANDS" -"1051100464","1051100487","BE","BEL","BELGIUM" -"1051100488","1051100499","NL","NLD","NETHERLANDS" -"1051100500","1051100591","BE","BEL","BELGIUM" -"1051100592","1051100607","NL","NLD","NETHERLANDS" -"1051100608","1051100631","BE","BEL","BELGIUM" -"1051100632","1051100663","NL","NLD","NETHERLANDS" -"1051100664","1051100695","BE","BEL","BELGIUM" -"1051100696","1051100703","NL","NLD","NETHERLANDS" -"1051100704","1051100711","BE","BEL","BELGIUM" -"1051100712","1051100735","NL","NLD","NETHERLANDS" -"1051100736","1051100831","BE","BEL","BELGIUM" -"1051100832","1051100839","NL","NLD","NETHERLANDS" -"1051100840","1051100879","BE","BEL","BELGIUM" -"1051100880","1051100919","NL","NLD","NETHERLANDS" -"1051100920","1051100951","BE","BEL","BELGIUM" -"1051100952","1051100967","NL","NLD","NETHERLANDS" -"1051100968","1051101047","BE","BEL","BELGIUM" -"1051101048","1051101055","NL","NLD","NETHERLANDS" -"1051101056","1051101079","BE","BEL","BELGIUM" -"1051101080","1051101087","NL","NLD","NETHERLANDS" -"1051101088","1051101095","BE","BEL","BELGIUM" -"1051101096","1051101103","NL","NLD","NETHERLANDS" -"1051101104","1051101127","BE","BEL","BELGIUM" -"1051101128","1051101151","NL","NLD","NETHERLANDS" -"1051101152","1051101183","BE","BEL","BELGIUM" -"1051101184","1051101191","NL","NLD","NETHERLANDS" -"1051101192","1051101199","BE","BEL","BELGIUM" -"1051101200","1051101231","NL","NLD","NETHERLANDS" -"1051101232","1051101247","BE","BEL","BELGIUM" -"1051101248","1051101279","NL","NLD","NETHERLANDS" -"1051101280","1051101287","BE","BEL","BELGIUM" -"1051101288","1051101407","NL","NLD","NETHERLANDS" -"1051101408","1051101415","BE","BEL","BELGIUM" -"1051101416","1051101431","NL","NLD","NETHERLANDS" -"1051101432","1051101447","BE","BEL","BELGIUM" -"1051101448","1051101463","NL","NLD","NETHERLANDS" -"1051101464","1051101471","BE","BEL","BELGIUM" -"1051101472","1051101591","NL","NLD","NETHERLANDS" -"1051101592","1051101607","BE","BEL","BELGIUM" -"1051101608","1051101615","NL","NLD","NETHERLANDS" -"1051101616","1051101623","BE","BEL","BELGIUM" -"1051101624","1051101631","NL","NLD","NETHERLANDS" -"1051101632","1051101647","BE","BEL","BELGIUM" -"1051101648","1051101671","NL","NLD","NETHERLANDS" -"1051101672","1051101687","BE","BEL","BELGIUM" -"1051101688","1051101719","NL","NLD","NETHERLANDS" -"1051101720","1051101735","BE","BEL","BELGIUM" -"1051101736","1051101783","NL","NLD","NETHERLANDS" -"1051101784","1051101799","BE","BEL","BELGIUM" -"1051101800","1051101823","NL","NLD","NETHERLANDS" -"1051101824","1051101855","BE","BEL","BELGIUM" -"1051101856","1051101959","NL","NLD","NETHERLANDS" -"1051101960","1051101967","BE","BEL","BELGIUM" -"1051101968","1051101983","NL","NLD","NETHERLANDS" -"1051101984","1051102007","BE","BEL","BELGIUM" -"1051102008","1051102135","NL","NLD","NETHERLANDS" -"1051102136","1051102159","BE","BEL","BELGIUM" -"1051102160","1051102207","NL","NLD","NETHERLANDS" -"1051102208","1051102727","BE","BEL","BELGIUM" -"1051102728","1051103233","NL","NLD","NETHERLANDS" -"1051103234","1051103247","BE","BEL","BELGIUM" -"1051103248","1051103287","NL","NLD","NETHERLANDS" -"1051103288","1051103295","BE","BEL","BELGIUM" -"1051103296","1051103359","NL","NLD","NETHERLANDS" -"1051103360","1051103367","BE","BEL","BELGIUM" -"1051103368","1051103439","NL","NLD","NETHERLANDS" -"1051103440","1051103447","BE","BEL","BELGIUM" -"1051103448","1051103503","NL","NLD","NETHERLANDS" -"1051103504","1051103519","BE","BEL","BELGIUM" -"1051103520","1051103527","NL","NLD","NETHERLANDS" -"1051103528","1051103535","BE","BEL","BELGIUM" -"1051103536","1051103543","NL","NLD","NETHERLANDS" -"1051103544","1051103567","BE","BEL","BELGIUM" -"1051103568","1051103583","NL","NLD","NETHERLANDS" -"1051103584","1051103591","BE","BEL","BELGIUM" -"1051103592","1051103599","NL","NLD","NETHERLANDS" -"1051103600","1051103607","BE","BEL","BELGIUM" -"1051103608","1051103639","NL","NLD","NETHERLANDS" -"1051103640","1051103647","BE","BEL","BELGIUM" -"1051103648","1051103663","NL","NLD","NETHERLANDS" -"1051103664","1051103679","BE","BEL","BELGIUM" -"1051103680","1051103695","NL","NLD","NETHERLANDS" -"1051103696","1051103703","BE","BEL","BELGIUM" -"1051103704","1051103767","NL","NLD","NETHERLANDS" -"1051103768","1051103775","BE","BEL","BELGIUM" -"1051103776","1051103807","NL","NLD","NETHERLANDS" -"1051103808","1051103815","BE","BEL","BELGIUM" -"1051103816","1051103863","NL","NLD","NETHERLANDS" -"1051103864","1051103871","BE","BEL","BELGIUM" -"1051103872","1051103879","NL","NLD","NETHERLANDS" -"1051103880","1051103887","BE","BEL","BELGIUM" -"1051103888","1051103911","NL","NLD","NETHERLANDS" -"1051103912","1051103927","BE","BEL","BELGIUM" -"1051103928","1051103959","NL","NLD","NETHERLANDS" -"1051103960","1051103975","BE","BEL","BELGIUM" -"1051103976","1051103991","NL","NLD","NETHERLANDS" -"1051103992","1051103999","BE","BEL","BELGIUM" -"1051104000","1051104015","NL","NLD","NETHERLANDS" -"1051104016","1051104039","BE","BEL","BELGIUM" -"1051104040","1051104071","NL","NLD","NETHERLANDS" -"1051104072","1051104079","BE","BEL","BELGIUM" -"1051104080","1051104111","NL","NLD","NETHERLANDS" -"1051104112","1051104143","BE","BEL","BELGIUM" -"1051104144","1051104167","NL","NLD","NETHERLANDS" -"1051104168","1051104175","BE","BEL","BELGIUM" -"1051104176","1051104231","NL","NLD","NETHERLANDS" -"1051104232","1051104255","BE","BEL","BELGIUM" -"1051104256","1051104311","NL","NLD","NETHERLANDS" -"1051104312","1051104319","BE","BEL","BELGIUM" -"1051104320","1051104359","NL","NLD","NETHERLANDS" -"1051104360","1051104367","BE","BEL","BELGIUM" -"1051104368","1051104383","NL","NLD","NETHERLANDS" -"1051104384","1051104399","BE","BEL","BELGIUM" -"1051104400","1051104503","NL","NLD","NETHERLANDS" -"1051104504","1051104527","BE","BEL","BELGIUM" -"1051104528","1051104583","NL","NLD","NETHERLANDS" -"1051104584","1051104599","BE","BEL","BELGIUM" -"1051104600","1051104607","NL","NLD","NETHERLANDS" -"1051104608","1051104631","BE","BEL","BELGIUM" -"1051104632","1051104679","NL","NLD","NETHERLANDS" -"1051104680","1051104695","BE","BEL","BELGIUM" -"1051104696","1051104719","NL","NLD","NETHERLANDS" -"1051104720","1051104727","BE","BEL","BELGIUM" -"1051104728","1051104751","NL","NLD","NETHERLANDS" -"1051104752","1051104759","BE","BEL","BELGIUM" -"1051104760","1051104791","NL","NLD","NETHERLANDS" -"1051104792","1051104799","BE","BEL","BELGIUM" -"1051104800","1051104823","NL","NLD","NETHERLANDS" -"1051104824","1051104831","BE","BEL","BELGIUM" -"1051104832","1051104839","NL","NLD","NETHERLANDS" -"1051104840","1051104855","BE","BEL","BELGIUM" -"1051104856","1051104935","NL","NLD","NETHERLANDS" -"1051104936","1051104943","BE","BEL","BELGIUM" -"1051104944","1051104951","NL","NLD","NETHERLANDS" -"1051104952","1051104959","BE","BEL","BELGIUM" -"1051104960","1051104975","NL","NLD","NETHERLANDS" -"1051104976","1051104983","BE","BEL","BELGIUM" -"1051104984","1051104991","NL","NLD","NETHERLANDS" -"1051104992","1051104999","BE","BEL","BELGIUM" -"1051105000","1051105047","NL","NLD","NETHERLANDS" -"1051105048","1051105055","BE","BEL","BELGIUM" -"1051105056","1051105063","NL","NLD","NETHERLANDS" -"1051105064","1051105079","BE","BEL","BELGIUM" -"1051105080","1051105103","NL","NLD","NETHERLANDS" -"1051105104","1051105119","BE","BEL","BELGIUM" -"1051105120","1051105127","NL","NLD","NETHERLANDS" -"1051105128","1051105135","BE","BEL","BELGIUM" -"1051105136","1051105143","NL","NLD","NETHERLANDS" -"1051105144","1051105151","BE","BEL","BELGIUM" -"1051105152","1051105191","NL","NLD","NETHERLANDS" -"1051105192","1051105199","BE","BEL","BELGIUM" -"1051105200","1051105207","NL","NLD","NETHERLANDS" -"1051105208","1051105223","BE","BEL","BELGIUM" -"1051105224","1051105255","NL","NLD","NETHERLANDS" -"1051105256","1051105263","BE","BEL","BELGIUM" -"1051105264","1051105271","NL","NLD","NETHERLANDS" -"1051105272","1051105279","BE","BEL","BELGIUM" -"1051105280","1051105319","NL","NLD","NETHERLANDS" -"1051105320","1051105327","BE","BEL","BELGIUM" -"1051105328","1051105359","NL","NLD","NETHERLANDS" -"1051105360","1051105383","BE","BEL","BELGIUM" -"1051105384","1051105439","NL","NLD","NETHERLANDS" -"1051105440","1051105455","BE","BEL","BELGIUM" -"1051105456","1051105519","NL","NLD","NETHERLANDS" -"1051105520","1051105551","BE","BEL","BELGIUM" -"1051105552","1051105599","NL","NLD","NETHERLANDS" -"1051105600","1051105607","BE","BEL","BELGIUM" -"1051105608","1051105703","NL","NLD","NETHERLANDS" -"1051105704","1051105711","BE","BEL","BELGIUM" -"1051105712","1051105791","NL","NLD","NETHERLANDS" -"1051105792","1051105799","BE","BEL","BELGIUM" -"1051105800","1051105807","NL","NLD","NETHERLANDS" -"1051105808","1051105815","BE","BEL","BELGIUM" -"1051105816","1051105831","NL","NLD","NETHERLANDS" -"1051105832","1051105839","BE","BEL","BELGIUM" -"1051105840","1051105863","NL","NLD","NETHERLANDS" -"1051105864","1051105871","BE","BEL","BELGIUM" -"1051105872","1051105895","NL","NLD","NETHERLANDS" -"1051105896","1051105903","BE","BEL","BELGIUM" -"1051105904","1051105911","NL","NLD","NETHERLANDS" -"1051105912","1051105927","BE","BEL","BELGIUM" -"1051105928","1051105967","NL","NLD","NETHERLANDS" -"1051105968","1051105983","BE","BEL","BELGIUM" -"1051105984","1051105999","NL","NLD","NETHERLANDS" -"1051106000","1051106015","BE","BEL","BELGIUM" -"1051106016","1051106031","NL","NLD","NETHERLANDS" -"1051106032","1051106039","BE","BEL","BELGIUM" -"1051106040","1051106047","NL","NLD","NETHERLANDS" -"1051106048","1051106055","BE","BEL","BELGIUM" -"1051106056","1051106071","NL","NLD","NETHERLANDS" -"1051106072","1051106079","BE","BEL","BELGIUM" -"1051106080","1051106095","NL","NLD","NETHERLANDS" -"1051106096","1051106103","BE","BEL","BELGIUM" -"1051106104","1051106111","NL","NLD","NETHERLANDS" -"1051106112","1051106119","BE","BEL","BELGIUM" -"1051106120","1051106135","NL","NLD","NETHERLANDS" -"1051106136","1051106143","BE","BEL","BELGIUM" -"1051106144","1051106167","NL","NLD","NETHERLANDS" -"1051106168","1051106175","BE","BEL","BELGIUM" -"1051106176","1051106183","NL","NLD","NETHERLANDS" -"1051106184","1051106191","BE","BEL","BELGIUM" -"1051106192","1051106247","NL","NLD","NETHERLANDS" -"1051106248","1051106271","BE","BEL","BELGIUM" -"1051106272","1051106303","NL","NLD","NETHERLANDS" -"1051106304","1051106311","BE","BEL","BELGIUM" -"1051106312","1051106319","NL","NLD","NETHERLANDS" -"1051106320","1051106327","BE","BEL","BELGIUM" -"1051106328","1051106335","NL","NLD","NETHERLANDS" -"1051106336","1051106351","BE","BEL","BELGIUM" -"1051106352","1051106391","NL","NLD","NETHERLANDS" -"1051106392","1051106399","BE","BEL","BELGIUM" -"1051106400","1051106423","NL","NLD","NETHERLANDS" -"1051106424","1051106431","BE","BEL","BELGIUM" -"1051106432","1051106463","NL","NLD","NETHERLANDS" -"1051106464","1051106471","BE","BEL","BELGIUM" -"1051106472","1051106511","NL","NLD","NETHERLANDS" -"1051106512","1051106519","BE","BEL","BELGIUM" -"1051106520","1051106527","NL","NLD","NETHERLANDS" -"1051106528","1051106535","BE","BEL","BELGIUM" -"1051106536","1051106543","NL","NLD","NETHERLANDS" -"1051106544","1051106551","BE","BEL","BELGIUM" -"1051106552","1051106591","NL","NLD","NETHERLANDS" -"1051106592","1051106599","BE","BEL","BELGIUM" -"1051106600","1051106607","NL","NLD","NETHERLANDS" -"1051106608","1051106615","BE","BEL","BELGIUM" -"1051106616","1051106639","NL","NLD","NETHERLANDS" -"1051106640","1051106647","BE","BEL","BELGIUM" -"1051106648","1051106663","NL","NLD","NETHERLANDS" -"1051106664","1051106671","BE","BEL","BELGIUM" -"1051106672","1051106711","NL","NLD","NETHERLANDS" -"1051106712","1051106719","BE","BEL","BELGIUM" -"1051106720","1051106759","NL","NLD","NETHERLANDS" -"1051106760","1051106767","BE","BEL","BELGIUM" -"1051106768","1051106775","NL","NLD","NETHERLANDS" -"1051106776","1051106783","BE","BEL","BELGIUM" -"1051106784","1051106799","NL","NLD","NETHERLANDS" -"1051106800","1051106807","BE","BEL","BELGIUM" -"1051106808","1051106823","NL","NLD","NETHERLANDS" -"1051106824","1051106831","BE","BEL","BELGIUM" -"1051106832","1051106847","NL","NLD","NETHERLANDS" -"1051106848","1051106863","BE","BEL","BELGIUM" -"1051106864","1051106895","NL","NLD","NETHERLANDS" -"1051106896","1051106903","BE","BEL","BELGIUM" -"1051106904","1051106943","NL","NLD","NETHERLANDS" -"1051106944","1051106951","BE","BEL","BELGIUM" -"1051106952","1051106959","NL","NLD","NETHERLANDS" -"1051106960","1051106967","BE","BEL","BELGIUM" -"1051106968","1051106975","NL","NLD","NETHERLANDS" -"1051106976","1051107007","BE","BEL","BELGIUM" -"1051107008","1051107023","NL","NLD","NETHERLANDS" -"1051107024","1051107039","BE","BEL","BELGIUM" -"1051107040","1051107071","NL","NLD","NETHERLANDS" -"1051107072","1051107087","BE","BEL","BELGIUM" -"1051107088","1051107103","NL","NLD","NETHERLANDS" -"1051107104","1051107119","BE","BEL","BELGIUM" -"1051107120","1051107127","NL","NLD","NETHERLANDS" -"1051107128","1051107135","BE","BEL","BELGIUM" -"1051107136","1051107143","NL","NLD","NETHERLANDS" -"1051107144","1051107151","BE","BEL","BELGIUM" -"1051107152","1051107159","NL","NLD","NETHERLANDS" -"1051107160","1051107167","BE","BEL","BELGIUM" -"1051107168","1051107183","NL","NLD","NETHERLANDS" -"1051107184","1051107215","BE","BEL","BELGIUM" -"1051107216","1051107223","NL","NLD","NETHERLANDS" -"1051107224","1051107231","BE","BEL","BELGIUM" -"1051107232","1051107239","NL","NLD","NETHERLANDS" -"1051107240","1051107247","BE","BEL","BELGIUM" -"1051107248","1051107279","NL","NLD","NETHERLANDS" -"1051107280","1051107287","BE","BEL","BELGIUM" -"1051107288","1051107295","NL","NLD","NETHERLANDS" -"1051107296","1051107303","BE","BEL","BELGIUM" -"1051107304","1051107311","NL","NLD","NETHERLANDS" -"1051107312","1051107327","BE","BEL","BELGIUM" -"1051107328","1051107329","NL","NLD","NETHERLANDS" -"1051107330","1051107359","BE","BEL","BELGIUM" -"1051107360","1051107375","NL","NLD","NETHERLANDS" -"1051107376","1051107383","BE","BEL","BELGIUM" -"1051107384","1051107391","NL","NLD","NETHERLANDS" -"1051107392","1051107407","BE","BEL","BELGIUM" -"1051107408","1051107423","NL","NLD","NETHERLANDS" -"1051107424","1051107455","BE","BEL","BELGIUM" -"1051107456","1051107519","NL","NLD","NETHERLANDS" -"1051107520","1051107839","BE","BEL","BELGIUM" -"1051107840","1051115519","NL","NLD","NETHERLANDS" -"1051115520","1051121287","BE","BEL","BELGIUM" -"1051121288","1051121295","NL","NLD","NETHERLANDS" -"1051121296","1051123711","BE","BEL","BELGIUM" -"1051123712","1051125247","NL","NLD","NETHERLANDS" -"1051125248","1051125759","BE","BEL","BELGIUM" -"1051125760","1051131903","NL","NLD","NETHERLANDS" -"1051131904","1051197439","CH","CHE","SWITZERLAND" -"1051197440","1051213823","CZ","CZE","CZECH REPUBLIC" -"1051213824","1051230207","SK","SVK","SLOVAKIA" -"1051230208","1051238399","SE","SWE","SWEDEN" -"1051238400","1051246591","GE","GEO","GEORGIA" -"1051246592","1051254783","DE","DEU","GERMANY" -"1051254784","1051262975","RU","RUS","RUSSIAN FEDERATION" -"1051262976","1051271167","DE","DEU","GERMANY" -"1051271168","1051279359","IT","ITA","ITALY" -"1051279360","1051295743","PT","PRT","PORTUGAL" -"1051295744","1051303935","GB","GBR","UNITED KINGDOM" -"1051303936","1051312127","SK","SVK","SLOVAKIA" -"1051312128","1051328511","GR","GRC","GREECE" -"1051328512","1051460095","GB","GBR","UNITED KINGDOM" -"1051460096","1051460351","ES","ESP","SPAIN" -"1051460352","1051525119","GB","GBR","UNITED KINGDOM" -"1051525120","1051533311","MT","MLT","MALTA" -"1051541504","1051557887","GB","GBR","UNITED KINGDOM" -"1051557888","1051566079","RU","RUS","RUSSIAN FEDERATION" -"1051566080","1051574271","IT","ITA","ITALY" -"1051574272","1051574623","GB","GBR","UNITED KINGDOM" -"1051574624","1051574655","GM","GMB","GAMBIA" -"1051574656","1051575879","GB","GBR","UNITED KINGDOM" -"1051575880","1051575887","US","USA","UNITED STATES" -"1051575888","1051575999","GB","GBR","UNITED KINGDOM" -"1051576000","1051576015","IT","ITA","ITALY" -"1051576016","1051576903","GB","GBR","UNITED KINGDOM" -"1051576904","1051576911","US","USA","UNITED STATES" -"1051576912","1051577503","GB","GBR","UNITED KINGDOM" -"1051577504","1051577519","NL","NLD","NETHERLANDS" -"1051577520","1051577535","GB","GBR","UNITED KINGDOM" -"1051577536","1051577567","NL","NLD","NETHERLANDS" -"1051577568","1051577575","BE","BEL","BELGIUM" -"1051577576","1051577583","GB","GBR","UNITED KINGDOM" -"1051577584","1051577587","FI","FIN","FINLAND" -"1051577588","1051577591","GB","GBR","UNITED KINGDOM" -"1051577592","1051577599","NL","NLD","NETHERLANDS" -"1051577600","1051577855","GB","GBR","UNITED KINGDOM" -"1051577856","1051578111","NL","NLD","NETHERLANDS" -"1051578112","1051578143","GB","GBR","UNITED KINGDOM" -"1051578144","1051578175","NL","NLD","NETHERLANDS" -"1051578176","1051578239","GB","GBR","UNITED KINGDOM" -"1051578240","1051578263","FR","FRA","FRANCE" -"1051578264","1051578271","GB","GBR","UNITED KINGDOM" -"1051578272","1051578279","ES","ESP","SPAIN" -"1051578280","1051578287","GR","GRC","GREECE" -"1051578288","1051578295","GB","GBR","UNITED KINGDOM" -"1051578296","1051578303","PL","POL","POLAND" -"1051578304","1051578335","NL","NLD","NETHERLANDS" -"1051578336","1051578343","DE","DEU","GERMANY" -"1051578344","1051578351","NL","NLD","NETHERLANDS" -"1051578352","1051578363","GB","GBR","UNITED KINGDOM" -"1051578364","1051578367","DE","DEU","GERMANY" -"1051578368","1051580415","SZ","SWZ","SWAZILAND" -"1051580416","1051584511","GB","GBR","UNITED KINGDOM" -"1051584512","1051585663","MG","MDG","MADAGASCAR" -"1051585664","1051585919","GB","GBR","UNITED KINGDOM" -"1051585920","1051586047","MG","MDG","MADAGASCAR" -"1051586048","1051586175","GB","GBR","UNITED KINGDOM" -"1051586176","1051586303","MG","MDG","MADAGASCAR" -"1051586304","1051590655","GB","GBR","UNITED KINGDOM" -"1051590656","1051702527","ES","ESP","SPAIN" -"1051702528","1051702783","US","USA","UNITED STATES" -"1051702784","1051721727","ES","ESP","SPAIN" -"1051721728","1051729919","RU","RUS","RUSSIAN FEDERATION" -"1051729920","1051738111","FI","FIN","FINLAND" -"1051738112","1051754495","BG","BGR","BULGARIA" -"1051754496","1051762687","DE","DEU","GERMANY" -"1051762688","1051770879","SK","SVK","SLOVAKIA" -"1051770880","1051779071","NO","NOR","NORWAY" -"1051779072","1051787263","DE","DEU","GERMANY" -"1051787264","1051795455","IT","ITA","ITALY" -"1051795456","1051803647","RU","RUS","RUSSIAN FEDERATION" -"1051803648","1051820031","CZ","CZE","CZECH REPUBLIC" -"1051820032","1051852799","NL","NLD","NETHERLANDS" -"1051852800","1051918335","AT","AUT","AUSTRIA" -"1051918336","1051919359","PL","POL","POLAND" -"1051919360","1051920383","AT","AUT","AUSTRIA" -"1051920384","1051922431","PL","POL","POLAND" -"1051922432","1051983871","AT","AUT","AUSTRIA" -"1051983872","1051991551","DE","DEU","GERMANY" -"1051991808","1051991935","DE","DEU","GERMANY" -"1051992064","1051994699","DE","DEU","GERMANY" -"1051994700","1051994703","BE","BEL","BELGIUM" -"1051994704","1051994719","DE","DEU","GERMANY" -"1051994720","1051994751","BE","BEL","BELGIUM" -"1051994752","1051994791","DE","DEU","GERMANY" -"1051994792","1051994799","NL","NLD","NETHERLANDS" -"1051994800","1051995135","DE","DEU","GERMANY" -"1051995392","1051996159","DE","DEU","GERMANY" -"1051996336","1051996351","DE","DEU","GERMANY" -"1051996880","1051996927","DE","DEU","GERMANY" -"1051997440","1051997695","DE","DEU","GERMANY" -"1051997712","1051997727","DE","DEU","GERMANY" -"1051997952","1051997983","DE","DEU","GERMANY" -"1051998248","1051998255","DE","DEU","GERMANY" -"1051998688","1051998695","DE","DEU","GERMANY" -"1051999040","1051999043","DE","DEU","GERMANY" -"1051999136","1051999151","DE","DEU","GERMANY" -"1051999168","1051999359","DE","DEU","GERMANY" -"1051999488","1051999743","DE","DEU","GERMANY" -"1052000000","1052000063","DE","DEU","GERMANY" -"1052000128","1052000143","DE","DEU","GERMANY" -"1052000192","1052000511","DE","DEU","GERMANY" -"1052000520","1052000527","DE","DEU","GERMANY" -"1052000536","1052000539","DE","DEU","GERMANY" -"1052000576","1052000623","DE","DEU","GERMANY" -"1052000632","1052002303","DE","DEU","GERMANY" -"1052002312","1052002335","DE","DEU","GERMANY" -"1052002368","1052002431","DE","DEU","GERMANY" -"1052002440","1052002447","DE","DEU","GERMANY" -"1052002464","1052002511","DE","DEU","GERMANY" -"1052002520","1052002523","DE","DEU","GERMANY" -"1052002528","1052002543","DE","DEU","GERMANY" -"1052003328","1052003359","DE","DEU","GERMANY" -"1052003400","1052003455","DE","DEU","GERMANY" -"1052003480","1052003487","DE","DEU","GERMANY" -"1052003552","1052003839","DE","DEU","GERMANY" -"1052003968","1052003999","DE","DEU","GERMANY" -"1052004672","1052004759","DE","DEU","GERMANY" -"1052004768","1052004783","DE","DEU","GERMANY" -"1052004816","1052004831","DE","DEU","GERMANY" -"1052004896","1052004959","DE","DEU","GERMANY" -"1052005120","1052005151","DE","DEU","GERMANY" -"1052005248","1052005631","DE","DEU","GERMANY" -"1052005888","1052005911","DE","DEU","GERMANY" -"1052006544","1052006559","DE","DEU","GERMANY" -"1052006576","1052006607","DE","DEU","GERMANY" -"1052007040","1052007103","DE","DEU","GERMANY" -"1052007432","1052007435","DE","DEU","GERMANY" -"1052007456","1052007471","DE","DEU","GERMANY" -"1052007520","1052007535","DE","DEU","GERMANY" -"1052007776","1052007791","DE","DEU","GERMANY" -"1052007936","1052008223","DE","DEU","GERMANY" -"1052008516","1052008527","DE","DEU","GERMANY" -"1052008544","1052008583","DE","DEU","GERMANY" -"1052008608","1052008623","DE","DEU","GERMANY" -"1052008672","1052008687","DE","DEU","GERMANY" -"1052008704","1052009087","DE","DEU","GERMANY" -"1052009472","1052009487","DE","DEU","GERMANY" -"1052009504","1052009535","DE","DEU","GERMANY" -"1052009600","1052009607","DE","DEU","GERMANY" -"1052010464","1052010519","DE","DEU","GERMANY" -"1052010528","1052010559","DE","DEU","GERMANY" -"1052010624","1052010655","DE","DEU","GERMANY" -"1052010752","1052011135","DE","DEU","GERMANY" -"1052011264","1052012335","DE","DEU","GERMANY" -"1052012376","1052012399","DE","DEU","GERMANY" -"1052012544","1052013055","DE","DEU","GERMANY" -"1052013060","1052013063","DE","DEU","GERMANY" -"1052013072","1052013087","DE","DEU","GERMANY" -"1052013120","1052013127","DE","DEU","GERMANY" -"1052013144","1052013151","DE","DEU","GERMANY" -"1052013216","1052013263","DE","DEU","GERMANY" -"1052013312","1052013567","DE","DEU","GERMANY" -"1052013696","1052013823","DE","DEU","GERMANY" -"1052013848","1052013855","DE","DEU","GERMANY" -"1052013888","1052013951","DE","DEU","GERMANY" -"1052013960","1052013963","DE","DEU","GERMANY" -"1052014016","1052014079","DE","DEU","GERMANY" -"1052014112","1052014303","DE","DEU","GERMANY" -"1052014592","1052014623","DE","DEU","GERMANY" -"1052015368","1052015375","DE","DEU","GERMANY" -"1052015424","1052015519","DE","DEU","GERMANY" -"1052015552","1052015583","DE","DEU","GERMANY" -"1052015632","1052015647","DE","DEU","GERMANY" -"1052015696","1052015727","DE","DEU","GERMANY" -"1052016000","1052016127","DE","DEU","GERMANY" -"1052016208","1052016223","DE","DEU","GERMANY" -"1052016240","1052016247","DE","DEU","GERMANY" -"1052016256","1052016323","DE","DEU","GERMANY" -"1052016448","1052016463","DE","DEU","GERMANY" -"1052016480","1052016511","DE","DEU","GERMANY" -"1052016680","1052016687","DE","DEU","GERMANY" -"1052016896","1052017151","DE","DEU","GERMANY" -"1052017232","1052017247","DE","DEU","GERMANY" -"1052017280","1052017343","DE","DEU","GERMANY" -"1052017472","1052017503","DE","DEU","GERMANY" -"1052017536","1052017567","DE","DEU","GERMANY" -"1052017600","1052017663","DE","DEU","GERMANY" -"1052018168","1052018431","DE","DEU","GERMANY" -"1052018720","1052018767","DE","DEU","GERMANY" -"1052019200","1052019455","DE","DEU","GERMANY" -"1052019736","1052019775","DE","DEU","GERMANY" -"1052019904","1052020047","DE","DEU","GERMANY" -"1052020673","1052020702","DE","DEU","GERMANY" -"1052020704","1052041599","DE","DEU","GERMANY" -"1052041728","1052041863","DE","DEU","GERMANY" -"1052041984","1052042047","DE","DEU","GERMANY" -"1052042048","1052042087","NL","NLD","NETHERLANDS" -"1052042088","1052042239","DE","DEU","GERMANY" -"1052042304","1052042311","DE","DEU","GERMANY" -"1052042368","1052042431","DE","DEU","GERMANY" -"1052042480","1052042751","DE","DEU","GERMANY" -"1052042816","1052042863","DE","DEU","GERMANY" -"1052043008","1052043263","DE","DEU","GERMANY" -"1052043528","1052043535","DE","DEU","GERMANY" -"1052043552","1052043575","DE","DEU","GERMANY" -"1052043584","1052043651","DE","DEU","GERMANY" -"1052043664","1052043679","DE","DEU","GERMANY" -"1052043760","1052043775","DE","DEU","GERMANY" -"1052044288","1052044351","DE","DEU","GERMANY" -"1052044384","1052044399","DE","DEU","GERMANY" -"1052044416","1052044447","DE","DEU","GERMANY" -"1052044512","1052044527","DE","DEU","GERMANY" -"1052044544","1052044927","DE","DEU","GERMANY" -"1052045024","1052045055","DE","DEU","GERMANY" -"1052045312","1052046135","DE","DEU","GERMANY" -"1052046336","1052046591","DE","DEU","GERMANY" -"1052046848","1052047139","DE","DEU","GERMANY" -"1052049152","1052049183","DE","DEU","GERMANY" -"1052049408","1052057599","PL","POL","POLAND" -"1052057600","1052065791","RU","RUS","RUSSIAN FEDERATION" -"1052065792","1052082175","SE","SWE","SWEDEN" -"1052082176","1052090367","DE","DEU","GERMANY" -"1052090368","1052098559","PL","POL","POLAND" -"1052098560","1052116991","SE","SWE","SWEDEN" -"1052116992","1052119039","RU","RUS","RUSSIAN FEDERATION" -"1052119040","1052121087","RO","ROM","ROMANIA" -"1052121088","1052129279","RU","RUS","RUSSIAN FEDERATION" -"1052129280","1052131327","BE","BEL","BELGIUM" -"1052131328","1052135423","RU","RUS","RUSSIAN FEDERATION" -"1052135424","1052137471","UA","UKR","UKRAINE" -"1052137472","1052139519","RU","RUS","RUSSIAN FEDERATION" -"1052139520","1052141567","DE","DEU","GERMANY" -"1052141568","1052143615","RU","RUS","RUSSIAN FEDERATION" -"1052143616","1052145663","BG","BGR","BULGARIA" -"1052145664","1052147711","UA","UKR","UKRAINE" -"1052147712","1052151807","RU","RUS","RUSSIAN FEDERATION" -"1052153856","1052157951","UA","UKR","UKRAINE" -"1052157952","1052159999","DK","DNK","DENMARK" -"1052160000","1052162047","LU","LUX","LUXEMBOURG" -"1052162048","1052164095","CH","CHE","SWITZERLAND" -"1052164096","1052168191","RU","RUS","RUSSIAN FEDERATION" -"1052170240","1052172287","SE","SWE","SWEDEN" -"1052172288","1052174335","PL","POL","POLAND" -"1052174336","1052176383","CZ","CZE","CZECH REPUBLIC" -"1052176384","1052178431","NL","NLD","NETHERLANDS" -"1052178432","1052180479","DK","DNK","DENMARK" -"1052180480","1052213247","RU","RUS","RUSSIAN FEDERATION" -"1052213248","1052246015","FI","FIN","FINLAND" -"1052246016","1052247039","DE","DEU","GERMANY" -"1052247040","1052247295","FR","FRA","FRANCE" -"1052247296","1052247359","DE","DEU","GERMANY" -"1052247360","1052247391","FR","FRA","FRANCE" -"1052247392","1052247407","DE","DEU","GERMANY" -"1052247408","1052247415","GB","GBR","UNITED KINGDOM" -"1052247416","1052247423","NL","NLD","NETHERLANDS" -"1052247424","1052247551","GB","GBR","UNITED KINGDOM" -"1052247552","1052248095","DE","DEU","GERMANY" -"1052248096","1052248127","ZA","ZAF","SOUTH AFRICA" -"1052248128","1052248135","FR","FRA","FRANCE" -"1052248136","1052248143","DE","DEU","GERMANY" -"1052248144","1052248159","BE","BEL","BELGIUM" -"1052248160","1052249375","DE","DEU","GERMANY" -"1052249376","1052249407","IT","ITA","ITALY" -"1052249408","1052249471","DE","DEU","GERMANY" -"1052249472","1052249503","ZA","ZAF","SOUTH AFRICA" -"1052249504","1052250655","DE","DEU","GERMANY" -"1052250656","1052250687","GB","GBR","UNITED KINGDOM" -"1052250688","1052250719","IL","ISR","ISRAEL" -"1052250720","1052250735","IT","ITA","ITALY" -"1052250736","1052250751","NL","NLD","NETHERLANDS" -"1052250752","1052252863","DE","DEU","GERMANY" -"1052252864","1052252879","GB","GBR","UNITED KINGDOM" -"1052252880","1052252895","ZA","ZAF","SOUTH AFRICA" -"1052252896","1052252927","IT","ITA","ITALY" -"1052252928","1052254207","DE","DEU","GERMANY" -"1052254208","1052255255","NL","NLD","NETHERLANDS" -"1052255256","1052255263","GB","GBR","UNITED KINGDOM" -"1052255264","1052255871","NL","NLD","NETHERLANDS" -"1052255872","1052255935","GB","GBR","UNITED KINGDOM" -"1052255936","1052257279","NL","NLD","NETHERLANDS" -"1052257280","1052257791","FR","FRA","FRANCE" -"1052257792","1052258303","AT","AUT","AUSTRIA" -"1052258304","1052260623","FR","FRA","FRANCE" -"1052260624","1052260631","ZA","ZAF","SOUTH AFRICA" -"1052260632","1052260639","AT","AUT","AUSTRIA" -"1052260640","1052260735","FR","FRA","FRANCE" -"1052260736","1052260863","NL","NLD","NETHERLANDS" -"1052260864","1052260895","TR","TUR","TURKEY" -"1052260896","1052261055","FR","FRA","FRANCE" -"1052261056","1052261119","NL","NLD","NETHERLANDS" -"1052261120","1052262399","FR","FRA","FRANCE" -"1052262400","1052263423","DK","DNK","DENMARK" -"1052263424","1052263935","DE","DEU","GERMANY" -"1052263936","1052264447","DK","DNK","DENMARK" -"1052264448","1052264639","SE","SWE","SWEDEN" -"1052264640","1052264703","IT","ITA","ITALY" -"1052264704","1052265471","SE","SWE","SWEDEN" -"1052265472","1052265519","IT","ITA","ITALY" -"1052265520","1052265535","GB","GBR","UNITED KINGDOM" -"1052265536","1052265599","DE","DEU","GERMANY" -"1052265600","1052265983","IT","ITA","ITALY" -"1052265984","1052266239","DE","DEU","GERMANY" -"1052266240","1052266495","GB","GBR","UNITED KINGDOM" -"1052266496","1052268543","BE","BEL","BELGIUM" -"1052268544","1052268607","ZA","ZAF","SOUTH AFRICA" -"1052268608","1052268671","BE","BEL","BELGIUM" -"1052268672","1052268703","IT","ITA","ITALY" -"1052268704","1052268719","ZA","ZAF","SOUTH AFRICA" -"1052268720","1052268735","NL","NLD","NETHERLANDS" -"1052268736","1052268799","DE","DEU","GERMANY" -"1052268800","1052270591","ZA","ZAF","SOUTH AFRICA" -"1052270592","1052271871","FR","FRA","FRANCE" -"1052271872","1052272127","BE","BEL","BELGIUM" -"1052272128","1052272543","FR","FRA","FRANCE" -"1052272544","1052272575","AT","AUT","AUSTRIA" -"1052272576","1052272639","SE","SWE","SWEDEN" -"1052272640","1052274175","FR","FRA","FRANCE" -"1052274176","1052274687","ZA","ZAF","SOUTH AFRICA" -"1052274688","1052274943","ES","ESP","SPAIN" -"1052274944","1052275199","IT","ITA","ITALY" -"1052275200","1052275711","AT","AUT","AUSTRIA" -"1052275712","1052276735","GB","GBR","UNITED KINGDOM" -"1052276736","1052278207","IT","ITA","ITALY" -"1052278208","1052278271","GB","GBR","UNITED KINGDOM" -"1052278272","1052278783","IT","ITA","ITALY" -"1052278784","1052278823","CH","CHE","SWITZERLAND" -"1052278824","1052278831","GB","GBR","UNITED KINGDOM" -"1052278832","1052278847","AT","AUT","AUSTRIA" -"1052278848","1052278863","ZA","ZAF","SOUTH AFRICA" -"1052278864","1052278879","NL","NLD","NETHERLANDS" -"1052278880","1052284607","GB","GBR","UNITED KINGDOM" -"1052284672","1052286975","GB","GBR","UNITED KINGDOM" -"1052286976","1052287487","CH","CHE","SWITZERLAND" -"1052287488","1052288255","SE","SWE","SWEDEN" -"1052288288","1052288295","IL","ISR","ISRAEL" -"1052288296","1052288303","BE","BEL","BELGIUM" -"1052288304","1052288319","AT","AUT","AUSTRIA" -"1052288384","1052288511","FR","FRA","FRANCE" -"1052288512","1052289023","AT","AUT","AUSTRIA" -"1052289024","1052289151","GB","GBR","UNITED KINGDOM" -"1052289152","1052289183","CH","CHE","SWITZERLAND" -"1052289184","1052289215","DE","DEU","GERMANY" -"1052289216","1052289279","GB","GBR","UNITED KINGDOM" -"1052289536","1052290047","GB","GBR","UNITED KINGDOM" -"1052290048","1052290063","CH","CHE","SWITZERLAND" -"1052290064","1052290303","GB","GBR","UNITED KINGDOM" -"1052290368","1052290399","CH","CHE","SWITZERLAND" -"1052290400","1052290431","ZA","ZAF","SOUTH AFRICA" -"1052290432","1052290559","FR","FRA","FRANCE" -"1052290560","1052290575","GB","GBR","UNITED KINGDOM" -"1052290576","1052290591","BE","BEL","BELGIUM" -"1052290592","1052290639","GB","GBR","UNITED KINGDOM" -"1052290640","1052290655","ZA","ZAF","SOUTH AFRICA" -"1052290656","1052290687","DE","DEU","GERMANY" -"1052290688","1052290815","GB","GBR","UNITED KINGDOM" -"1052290816","1052290831","CH","CHE","SWITZERLAND" -"1052290832","1052291327","GB","GBR","UNITED KINGDOM" -"1052291328","1052291583","CH","CHE","SWITZERLAND" -"1052291584","1052291679","FI","FIN","FINLAND" -"1052291680","1052291687","TR","TUR","TURKEY" -"1052291688","1052291695","GB","GBR","UNITED KINGDOM" -"1052291696","1052291711","CH","CHE","SWITZERLAND" -"1052291712","1052292095","FR","FRA","FRANCE" -"1052292096","1052299263","GB","GBR","UNITED KINGDOM" -"1052299776","1052303359","GB","GBR","UNITED KINGDOM" -"1052303360","1052307455","DE","DEU","GERMANY" -"1052307456","1052309247","CH","CHE","SWITZERLAND" -"1052309248","1052309503","NO","NOR","NORWAY" -"1052309504","1052310527","CH","CHE","SWITZERLAND" -"1052310528","1052310783","FR","FRA","FRANCE" -"1052310784","1052311039","AT","AUT","AUSTRIA" -"1052311040","1052311551","GB","GBR","UNITED KINGDOM" -"1052311552","1052311615","DE","DEU","GERMANY" -"1052311616","1052311679","BE","BEL","BELGIUM" -"1052311680","1052311871","DE","DEU","GERMANY" -"1052311872","1052311895","BE","BEL","BELGIUM" -"1052311896","1052311903","NL","NLD","NETHERLANDS" -"1052311904","1052311935","IT","ITA","ITALY" -"1052311936","1052311967","GB","GBR","UNITED KINGDOM" -"1052311968","1052311999","DE","DEU","GERMANY" -"1052312000","1052312063","CH","CHE","SWITZERLAND" -"1052312064","1052312767","DE","DEU","GERMANY" -"1052312832","1052312895","DE","DEU","GERMANY" -"1052312896","1052312903","CH","CHE","SWITZERLAND" -"1052312904","1052312911","ES","ESP","SPAIN" -"1052312912","1052312927","CH","CHE","SWITZERLAND" -"1052312928","1052313087","GB","GBR","UNITED KINGDOM" -"1052313088","1052314751","DE","DEU","GERMANY" -"1052314752","1052314815","ES","ESP","SPAIN" -"1052314816","1052314823","DE","DEU","GERMANY" -"1052314824","1052314831","ES","ESP","SPAIN" -"1052314832","1052314847","IT","ITA","ITALY" -"1052314848","1052315071","DE","DEU","GERMANY" -"1052315072","1052315103","IT","ITA","ITALY" -"1052315104","1052315135","AT","AUT","AUSTRIA" -"1052315136","1052315551","DE","DEU","GERMANY" -"1052315552","1052315583","ES","ESP","SPAIN" -"1052315584","1052315647","GB","GBR","UNITED KINGDOM" -"1052315648","1052316319","DE","DEU","GERMANY" -"1052316320","1052316335","NL","NLD","NETHERLANDS" -"1052316336","1052316767","DE","DEU","GERMANY" -"1052316768","1052316799","IT","ITA","ITALY" -"1052316800","1052316927","DE","DEU","GERMANY" -"1052317184","1052317599","DE","DEU","GERMANY" -"1052317600","1052317607","BE","BEL","BELGIUM" -"1052317608","1052317615","DE","DEU","GERMANY" -"1052317616","1052317631","GB","GBR","UNITED KINGDOM" -"1052317632","1052317663","IT","ITA","ITALY" -"1052317664","1052318047","DE","DEU","GERMANY" -"1052318048","1052318079","ES","ESP","SPAIN" -"1052318080","1052318207","SE","SWE","SWEDEN" -"1052318208","1052318719","DE","DEU","GERMANY" -"1052319232","1052319743","DE","DEU","GERMANY" -"1052320000","1052320079","GB","GBR","UNITED KINGDOM" -"1052320080","1052320087","CZ","CZE","CZECH REPUBLIC" -"1052320088","1052320095","GB","GBR","UNITED KINGDOM" -"1052320096","1052320127","ZA","ZAF","SOUTH AFRICA" -"1052320128","1052320255","BE","BEL","BELGIUM" -"1052320256","1052322239","GB","GBR","UNITED KINGDOM" -"1052322240","1052322303","CH","CHE","SWITZERLAND" -"1052322304","1052323871","GB","GBR","UNITED KINGDOM" -"1052323872","1052323903","CH","CHE","SWITZERLAND" -"1052323904","1052324927","GB","GBR","UNITED KINGDOM" -"1052324928","1052324943","ZA","ZAF","SOUTH AFRICA" -"1052324944","1052324959","NL","NLD","NETHERLANDS" -"1052324960","1052324991","ES","ESP","SPAIN" -"1052324992","1052325191","GB","GBR","UNITED KINGDOM" -"1052325192","1052325199","DE","DEU","GERMANY" -"1052325200","1052325215","AT","AUT","AUSTRIA" -"1052325216","1052325247","ZA","ZAF","SOUTH AFRICA" -"1052325248","1052325311","GB","GBR","UNITED KINGDOM" -"1052325312","1052325375","NL","NLD","NETHERLANDS" -"1052325376","1052325567","GB","GBR","UNITED KINGDOM" -"1052325568","1052325631","ZA","ZAF","SOUTH AFRICA" -"1052325632","1052327935","GB","GBR","UNITED KINGDOM" -"1052327936","1052328223","CH","CHE","SWITZERLAND" -"1052328224","1052328255","IT","ITA","ITALY" -"1052328256","1052328319","ES","ESP","SPAIN" -"1052328320","1052328447","DE","DEU","GERMANY" -"1052328448","1052328639","CH","CHE","SWITZERLAND" -"1052328640","1052328671","ZA","ZAF","SOUTH AFRICA" -"1052328672","1052328703","ES","ESP","SPAIN" -"1052328704","1052329983","CH","CHE","SWITZERLAND" -"1052329984","1052330239","DE","DEU","GERMANY" -"1052330240","1052331167","CH","CHE","SWITZERLAND" -"1052331168","1052331183","GB","GBR","UNITED KINGDOM" -"1052331184","1052331199","CH","CHE","SWITZERLAND" -"1052331200","1052331263","GB","GBR","UNITED KINGDOM" -"1052331264","1052331615","CH","CHE","SWITZERLAND" -"1052331616","1052331647","AT","AUT","AUSTRIA" -"1052331648","1052331711","CH","CHE","SWITZERLAND" -"1052331712","1052331743","GB","GBR","UNITED KINGDOM" -"1052331744","1052332031","CH","CHE","SWITZERLAND" -"1052332032","1052333103","IT","ITA","ITALY" -"1052333104","1052333119","CH","CHE","SWITZERLAND" -"1052333120","1052333183","FR","FRA","FRANCE" -"1052333184","1052333311","ZA","ZAF","SOUTH AFRICA" -"1052333568","1052334751","IT","ITA","ITALY" -"1052334752","1052334759","NL","NLD","NETHERLANDS" -"1052334760","1052334767","ZA","ZAF","SOUTH AFRICA" -"1052334768","1052334815","GB","GBR","UNITED KINGDOM" -"1052334816","1052334847","ZA","ZAF","SOUTH AFRICA" -"1052334848","1052335423","IT","ITA","ITALY" -"1052335424","1052335455","NL","NLD","NETHERLANDS" -"1052335456","1052335519","ES","ESP","SPAIN" -"1052335520","1052335535","ZA","ZAF","SOUTH AFRICA" -"1052335536","1052335551","DE","DEU","GERMANY" -"1052335552","1052335615","AT","AUT","AUSTRIA" -"1052335616","1052336127","BE","BEL","BELGIUM" -"1052336128","1052336255","FR","FRA","FRANCE" -"1052336256","1052336383","GB","GBR","UNITED KINGDOM" -"1052336384","1052337343","FR","FRA","FRANCE" -"1052337344","1052337375","DE","DEU","GERMANY" -"1052337376","1052337759","FR","FRA","FRANCE" -"1052337760","1052337887","GB","GBR","UNITED KINGDOM" -"1052337888","1052337903","ZA","ZAF","SOUTH AFRICA" -"1052337904","1052337911","NL","NLD","NETHERLANDS" -"1052337912","1052337919","ZA","ZAF","SOUTH AFRICA" -"1052337920","1052340111","FR","FRA","FRANCE" -"1052340112","1052340127","ES","ESP","SPAIN" -"1052340128","1052340135","NL","NLD","NETHERLANDS" -"1052340136","1052340223","FR","FRA","FRANCE" -"1052340224","1052340527","AT","AUT","AUSTRIA" -"1052340528","1052340543","BE","BEL","BELGIUM" -"1052340544","1052340575","IT","ITA","ITALY" -"1052340576","1052340607","NL","NLD","NETHERLANDS" -"1052340608","1052340671","HU","HUN","HUNGARY" -"1052340672","1052340703","GB","GBR","UNITED KINGDOM" -"1052340704","1052340719","ZA","ZAF","SOUTH AFRICA" -"1052340720","1052340735","GB","GBR","UNITED KINGDOM" -"1052340736","1052340767","AT","AUT","AUSTRIA" -"1052340768","1052340799","DE","DEU","GERMANY" -"1052340800","1052340863","GB","GBR","UNITED KINGDOM" -"1052340864","1052341247","AT","AUT","AUSTRIA" -"1052341248","1052341503","DE","DEU","GERMANY" -"1052341504","1052342271","AT","AUT","AUSTRIA" -"1052342272","1052342303","SE","SWE","SWEDEN" -"1052342304","1052342335","CH","CHE","SWITZERLAND" -"1052342336","1052342463","SE","SWE","SWEDEN" -"1052342464","1052342471","ZA","ZAF","SOUTH AFRICA" -"1052342472","1052342479","GB","GBR","UNITED KINGDOM" -"1052342480","1052342495","ZA","ZAF","SOUTH AFRICA" -"1052342496","1052342527","FR","FRA","FRANCE" -"1052342528","1052343647","CH","CHE","SWITZERLAND" -"1052343648","1052343655","NL","NLD","NETHERLANDS" -"1052343656","1052343663","GB","GBR","UNITED KINGDOM" -"1052343664","1052343679","DE","DEU","GERMANY" -"1052343680","1052344319","CH","CHE","SWITZERLAND" -"1052344320","1052344863","NL","NLD","NETHERLANDS" -"1052344864","1052344895","ES","ESP","SPAIN" -"1052344896","1052344959","IT","ITA","ITALY" -"1052344960","1052345087","CH","CHE","SWITZERLAND" -"1052345088","1052345135","NL","NLD","NETHERLANDS" -"1052345136","1052345151","GB","GBR","UNITED KINGDOM" -"1052345152","1052345247","FR","FRA","FRANCE" -"1052345248","1052345279","IT","ITA","ITALY" -"1052345280","1052345343","DE","DEU","GERMANY" -"1052345344","1052345471","NL","NLD","NETHERLANDS" -"1052345488","1052345503","NL","NLD","NETHERLANDS" -"1052345504","1052345535","ZA","ZAF","SOUTH AFRICA" -"1052345536","1052345551","AT","AUT","AUSTRIA" -"1052345552","1052345567","GB","GBR","UNITED KINGDOM" -"1052345568","1052345631","NL","NLD","NETHERLANDS" -"1052345632","1052345663","IT","ITA","ITALY" -"1052345664","1052345695","HU","HUN","HUNGARY" -"1052345696","1052345727","PT","PRT","PORTUGAL" -"1052345728","1052345855","AT","AUT","AUSTRIA" -"1052345856","1052346903","NL","NLD","NETHERLANDS" -"1052346904","1052346911","BE","BEL","BELGIUM" -"1052346912","1052346943","ZA","ZAF","SOUTH AFRICA" -"1052346944","1052347007","ES","ESP","SPAIN" -"1052347008","1052347135","DE","DEU","GERMANY" -"1052347136","1052347391","NL","NLD","NETHERLANDS" -"1052347392","1052348415","CH","CHE","SWITZERLAND" -"1052348416","1052348799","GB","GBR","UNITED KINGDOM" -"1052348800","1052348831","DE","DEU","GERMANY" -"1052348832","1052348863","CH","CHE","SWITZERLAND" -"1052348864","1052348879","DE","DEU","GERMANY" -"1052348880","1052348895","GB","GBR","UNITED KINGDOM" -"1052348896","1052348927","DE","DEU","GERMANY" -"1052348928","1052349119","GB","GBR","UNITED KINGDOM" -"1052349120","1052349151","BE","BEL","BELGIUM" -"1052349152","1052349343","GB","GBR","UNITED KINGDOM" -"1052349344","1052349375","DE","DEU","GERMANY" -"1052349376","1052349407","GB","GBR","UNITED KINGDOM" -"1052349408","1052349439","ZA","ZAF","SOUTH AFRICA" -"1052349440","1052352559","GB","GBR","UNITED KINGDOM" -"1052352560","1052352591","ZA","ZAF","SOUTH AFRICA" -"1052352592","1052352607","GB","GBR","UNITED KINGDOM" -"1052352640","1052352703","GB","GBR","UNITED KINGDOM" -"1052352704","1052352767","DE","DEU","GERMANY" -"1052352768","1052352927","GB","GBR","UNITED KINGDOM" -"1052352928","1052352959","IT","ITA","ITALY" -"1052352960","1052352991","ES","ESP","SPAIN" -"1052352992","1052353023","BE","BEL","BELGIUM" -"1052353024","1052353279","IT","ITA","ITALY" -"1052353280","1052353407","DE","DEU","GERMANY" -"1052353536","1052354111","DE","DEU","GERMANY" -"1052354112","1052354175","TR","TUR","TURKEY" -"1052354176","1052354559","DE","DEU","GERMANY" -"1052354560","1052356607","GB","GBR","UNITED KINGDOM" -"1052356608","1052356703","ZA","ZAF","SOUTH AFRICA" -"1052356704","1052356735","ES","ESP","SPAIN" -"1052356736","1052356799","RU","RUS","RUSSIAN FEDERATION" -"1052356800","1052356863","IE","IRL","IRELAND" -"1052356864","1052358479","ZA","ZAF","SOUTH AFRICA" -"1052358480","1052358495","GB","GBR","UNITED KINGDOM" -"1052358496","1052358511","AT","AUT","AUSTRIA" -"1052358512","1052358527","ZA","ZAF","SOUTH AFRICA" -"1052358528","1052358655","DE","DEU","GERMANY" -"1052358656","1052359839","ZA","ZAF","SOUTH AFRICA" -"1052359840","1052359871","IE","IRL","IRELAND" -"1052359872","1052359935","IT","ITA","ITALY" -"1052359936","1052360735","ZA","ZAF","SOUTH AFRICA" -"1052360736","1052360743","GB","GBR","UNITED KINGDOM" -"1052360744","1052360767","ZA","ZAF","SOUTH AFRICA" -"1052360768","1052360783","DE","DEU","GERMANY" -"1052360784","1052360831","IT","ITA","ITALY" -"1052360832","1052360959","GB","GBR","UNITED KINGDOM" -"1052360960","1052360991","FR","FRA","FRANCE" -"1052360992","1052361023","BE","BEL","BELGIUM" -"1052361024","1052361039","ZA","ZAF","SOUTH AFRICA" -"1052361040","1052361055","NL","NLD","NETHERLANDS" -"1052361056","1052361087","DE","DEU","GERMANY" -"1052361088","1052361151","ES","ESP","SPAIN" -"1052361152","1052361215","GB","GBR","UNITED KINGDOM" -"1052361216","1052361471","ZA","ZAF","SOUTH AFRICA" -"1052361472","1052361647","BE","BEL","BELGIUM" -"1052361648","1052361655","GB","GBR","UNITED KINGDOM" -"1052361656","1052361663","DE","DEU","GERMANY" -"1052361664","1052361695","BE","BEL","BELGIUM" -"1052361696","1052361727","CH","CHE","SWITZERLAND" -"1052361728","1052361919","IT","ITA","ITALY" -"1052361920","1052361951","ZA","ZAF","SOUTH AFRICA" -"1052361952","1052361967","IT","ITA","ITALY" -"1052361968","1052361983","ZA","ZAF","SOUTH AFRICA" -"1052361984","1052362239","IT","ITA","ITALY" -"1052362240","1052362751","DK","DNK","DENMARK" -"1052362752","1052362783","ES","ESP","SPAIN" -"1052362784","1052362815","GB","GBR","UNITED KINGDOM" -"1052362816","1052362879","CH","CHE","SWITZERLAND" -"1052362880","1052363039","ES","ESP","SPAIN" -"1052363072","1052363135","GB","GBR","UNITED KINGDOM" -"1052363136","1052363263","ES","ESP","SPAIN" -"1052363264","1052364543","DE","DEU","GERMANY" -"1052364544","1052364671","BE","BEL","BELGIUM" -"1052364672","1052364687","DE","DEU","GERMANY" -"1052364688","1052364695","GB","GBR","UNITED KINGDOM" -"1052364696","1052364703","NL","NLD","NETHERLANDS" -"1052364704","1052364799","GB","GBR","UNITED KINGDOM" -"1052364800","1052366207","BE","BEL","BELGIUM" -"1052366208","1052366271","IE","IRL","IRELAND" -"1052366272","1052366335","GB","GBR","UNITED KINGDOM" -"1052366336","1052366655","BE","BEL","BELGIUM" -"1052366656","1052366719","DE","DEU","GERMANY" -"1052366720","1052367871","BE","BEL","BELGIUM" -"1052367872","1052368895","DK","DNK","DENMARK" -"1052368896","1052369023","IE","IRL","IRELAND" -"1052369024","1052369039","IT","ITA","ITALY" -"1052369040","1052369055","DE","DEU","GERMANY" -"1052369056","1052369087","ZA","ZAF","SOUTH AFRICA" -"1052369088","1052369151","IT","ITA","ITALY" -"1052369152","1052369407","IE","IRL","IRELAND" -"1052369408","1052369663","HU","HUN","HUNGARY" -"1052369664","1052369855","CZ","CZE","CZECH REPUBLIC" -"1052369888","1052369919","CZ","CZE","CZECH REPUBLIC" -"1052369920","1052370175","NO","NOR","NORWAY" -"1052370176","1052370431","DK","DNK","DENMARK" -"1052370432","1052370559","SE","SWE","SWEDEN" -"1052370560","1052370623","DE","DEU","GERMANY" -"1052370624","1052370687","IT","ITA","ITALY" -"1052370688","1052370943","DK","DNK","DENMARK" -"1052370944","1052372255","GB","GBR","UNITED KINGDOM" -"1052372256","1052372287","ZA","ZAF","SOUTH AFRICA" -"1052372288","1052372351","FI","FIN","FINLAND" -"1052372352","1052374015","GB","GBR","UNITED KINGDOM" -"1052374016","1052375039","CH","CHE","SWITZERLAND" -"1052375040","1052375551","DE","DEU","GERMANY" -"1052375680","1052375711","DE","DEU","GERMANY" -"1052375712","1052375807","FR","FRA","FRANCE" -"1052375808","1052376063","DE","DEU","GERMANY" -"1052376320","1052376831","DE","DEU","GERMANY" -"1052376832","1052377087","ES","ESP","SPAIN" -"1052377088","1052377535","DE","DEU","GERMANY" -"1052377536","1052377599","NO","NOR","NORWAY" -"1052377600","1052377743","FR","FRA","FRANCE" -"1052377744","1052377759","NL","NLD","NETHERLANDS" -"1052377760","1052377791","ZA","ZAF","SOUTH AFRICA" -"1052377792","1052377855","GB","GBR","UNITED KINGDOM" -"1052377856","1052377871","DE","DEU","GERMANY" -"1052377872","1052377887","CH","CHE","SWITZERLAND" -"1052377920","1052377951","DE","DEU","GERMANY" -"1052377952","1052377983","FR","FRA","FRANCE" -"1052377984","1052378047","GB","GBR","UNITED KINGDOM" -"1052378048","1052378079","FR","FRA","FRANCE" -"1052378080","1052378111","NL","NLD","NETHERLANDS" -"1052378112","1052378983","DE","DEU","GERMANY" -"1052378984","1052378991","NO","NOR","NORWAY" -"1052378992","1052379031","GB","GBR","UNITED KINGDOM" -"1052379032","1052379039","DE","DEU","GERMANY" -"1052379040","1052379103","GB","GBR","UNITED KINGDOM" -"1052379104","1052379135","SE","SWE","SWEDEN" -"1052379392","1052379791","DE","DEU","GERMANY" -"1052379792","1052379799","GB","GBR","UNITED KINGDOM" -"1052379800","1052379807","NL","NLD","NETHERLANDS" -"1052379808","1052379839","DE","DEU","GERMANY" -"1052379840","1052379903","ZA","ZAF","SOUTH AFRICA" -"1052379904","1052380063","GB","GBR","UNITED KINGDOM" -"1052380064","1052380127","DE","DEU","GERMANY" -"1052380128","1052380159","NL","NLD","NETHERLANDS" -"1052380160","1052381183","DE","DEU","GERMANY" -"1052381440","1052382623","DE","DEU","GERMANY" -"1052382656","1052382719","ES","ESP","SPAIN" -"1052382720","1052382975","DE","DEU","GERMANY" -"1052382976","1052383999","GB","GBR","UNITED KINGDOM" -"1052384000","1052384255","NL","NLD","NETHERLANDS" -"1052384256","1052385279","GB","GBR","UNITED KINGDOM" -"1052385280","1052385535","DE","DEU","GERMANY" -"1052385536","1052385615","GB","GBR","UNITED KINGDOM" -"1052385616","1052385631","ZA","ZAF","SOUTH AFRICA" -"1052385632","1052385695","GB","GBR","UNITED KINGDOM" -"1052385696","1052385791","FR","FRA","FRANCE" -"1052385792","1052388863","GB","GBR","UNITED KINGDOM" -"1052388864","1052389119","NL","NLD","NETHERLANDS" -"1052389120","1052390431","GB","GBR","UNITED KINGDOM" -"1052390432","1052390447","ZA","ZAF","SOUTH AFRICA" -"1052390448","1052390455","GB","GBR","UNITED KINGDOM" -"1052390456","1052390463","IT","ITA","ITALY" -"1052390464","1052393471","GB","GBR","UNITED KINGDOM" -"1052393472","1052393599","CH","CHE","SWITZERLAND" -"1052393600","1052393695","FR","FRA","FRANCE" -"1052393696","1052394271","CH","CHE","SWITZERLAND" -"1052394272","1052394303","ZA","ZAF","SOUTH AFRICA" -"1052394304","1052394367","GB","GBR","UNITED KINGDOM" -"1052394368","1052395263","CH","CHE","SWITZERLAND" -"1052395264","1052395679","GB","GBR","UNITED KINGDOM" -"1052395680","1052395743","DE","DEU","GERMANY" -"1052395744","1052395775","ES","ESP","SPAIN" -"1052395776","1052396031","NL","NLD","NETHERLANDS" -"1052396032","1052396543","CH","CHE","SWITZERLAND" -"1052396544","1052396607","SE","SWE","SWEDEN" -"1052396608","1052396671","BE","BEL","BELGIUM" -"1052396672","1052396799","SE","SWE","SWEDEN" -"1052396800","1052396863","TR","TUR","TURKEY" -"1052396864","1052396927","RO","ROM","ROMANIA" -"1052396928","1052397439","HU","HUN","HUNGARY" -"1052397568","1052399039","IT","ITA","ITALY" -"1052399040","1052399103","NO","NOR","NORWAY" -"1052399104","1052399903","IT","ITA","ITALY" -"1052399904","1052399919","DE","DEU","GERMANY" -"1052399920","1052399927","NL","NLD","NETHERLANDS" -"1052399928","1052399935","FR","FRA","FRANCE" -"1052399936","1052399999","IT","ITA","ITALY" -"1052400000","1052400127","BE","BEL","BELGIUM" -"1052400128","1052401151","IT","ITA","ITALY" -"1052401152","1052401279","BE","BEL","BELGIUM" -"1052401280","1052401311","IT","ITA","ITALY" -"1052401312","1052401343","AT","AUT","AUSTRIA" -"1052401344","1052401407","ZA","ZAF","SOUTH AFRICA" -"1052401408","1052401599","BE","BEL","BELGIUM" -"1052401600","1052401631","GB","GBR","UNITED KINGDOM" -"1052401632","1052401663","RU","RUS","RUSSIAN FEDERATION" -"1052401664","1052402047","FR","FRA","FRANCE" -"1052402048","1052402175","NL","NLD","NETHERLANDS" -"1052402176","1052402271","FR","FRA","FRANCE" -"1052402272","1052402303","IT","ITA","ITALY" -"1052402304","1052402367","GB","GBR","UNITED KINGDOM" -"1052402368","1052403359","FR","FRA","FRANCE" -"1052403360","1052403391","DE","DEU","GERMANY" -"1052403392","1052403407","IT","ITA","ITALY" -"1052403408","1052403415","GB","GBR","UNITED KINGDOM" -"1052403416","1052403423","NL","NLD","NETHERLANDS" -"1052403424","1052403455","RO","ROM","ROMANIA" -"1052403456","1052403727","FR","FRA","FRANCE" -"1052403728","1052403743","NL","NLD","NETHERLANDS" -"1052403744","1052403775","FR","FRA","FRANCE" -"1052403776","1052403839","ZA","ZAF","SOUTH AFRICA" -"1052403840","1052403967","CH","CHE","SWITZERLAND" -"1052403968","1052404383","FR","FRA","FRANCE" -"1052404384","1052404399","ZA","ZAF","SOUTH AFRICA" -"1052404400","1052404447","FR","FRA","FRANCE" -"1052404448","1052404479","GB","GBR","UNITED KINGDOM" -"1052404480","1052404767","FR","FRA","FRANCE" -"1052404768","1052404783","ZA","ZAF","SOUTH AFRICA" -"1052404784","1052404799","GB","GBR","UNITED KINGDOM" -"1052404800","1052404863","FR","FRA","FRANCE" -"1052404864","1052404991","GB","GBR","UNITED KINGDOM" -"1052404992","1052405759","FR","FRA","FRANCE" -"1052405760","1052407519","AT","AUT","AUSTRIA" -"1052407520","1052407535","FR","FRA","FRANCE" -"1052407536","1052407551","SE","SWE","SWEDEN" -"1052407552","1052407839","AT","AUT","AUSTRIA" -"1052407840","1052407871","ZA","ZAF","SOUTH AFRICA" -"1052407872","1052407887","DE","DEU","GERMANY" -"1052407888","1052407903","ZA","ZAF","SOUTH AFRICA" -"1052407904","1052407935","DE","DEU","GERMANY" -"1052407936","1052408159","AT","AUT","AUSTRIA" -"1052408160","1052408383","GB","GBR","UNITED KINGDOM" -"1052408384","1052408447","BE","BEL","BELGIUM" -"1052408448","1052408511","FR","FRA","FRANCE" -"1052408512","1052408575","GB","GBR","UNITED KINGDOM" -"1052408576","1052408831","AT","AUT","AUSTRIA" -"1052408832","1052409855","GB","GBR","UNITED KINGDOM" -"1052409856","1052409863","NL","NLD","NETHERLANDS" -"1052409864","1052409871","DE","DEU","GERMANY" -"1052409872","1052409951","NL","NLD","NETHERLANDS" -"1052409952","1052409983","BE","BEL","BELGIUM" -"1052409984","1052410047","GB","GBR","UNITED KINGDOM" -"1052410048","1052410111","BE","BEL","BELGIUM" -"1052411136","1052412327","NL","NLD","NETHERLANDS" -"1052412336","1052412343","NL","NLD","NETHERLANDS" -"1052412344","1052412351","GB","GBR","UNITED KINGDOM" -"1052412352","1052412415","CH","CHE","SWITZERLAND" -"1052412672","1052412831","NL","NLD","NETHERLANDS" -"1052412832","1052412863","DE","DEU","GERMANY" -"1052412864","1052413951","NL","NLD","NETHERLANDS" -"1052413952","1052414335","CZ","CZE","CZECH REPUBLIC" -"1052414464","1052414975","IE","IRL","IRELAND" -"1052414976","1052415999","BE","BEL","BELGIUM" -"1052416000","1052416575","DE","DEU","GERMANY" -"1052416576","1052416639","ZA","ZAF","SOUTH AFRICA" -"1052416640","1052416671","GB","GBR","UNITED KINGDOM" -"1052416672","1052416703","DE","DEU","GERMANY" -"1052416704","1052416735","IT","ITA","ITALY" -"1052416736","1052416767","DE","DEU","GERMANY" -"1052416768","1052417071","NO","NOR","NORWAY" -"1052417072","1052417087","DE","DEU","GERMANY" -"1052417088","1052417119","AT","AUT","AUSTRIA" -"1052417120","1052417151","IT","ITA","ITALY" -"1052417152","1052417279","GB","GBR","UNITED KINGDOM" -"1052417280","1052417359","NO","NOR","NORWAY" -"1052417368","1052417535","NO","NOR","NORWAY" -"1052417536","1052418047","ZA","ZAF","SOUTH AFRICA" -"1052418048","1052419583","BE","BEL","BELGIUM" -"1052419584","1052420031","IT","ITA","ITALY" -"1052420064","1052420095","IT","ITA","ITALY" -"1052420096","1052420735","GB","GBR","UNITED KINGDOM" -"1052420736","1052420767","DE","DEU","GERMANY" -"1052420768","1052420783","GB","GBR","UNITED KINGDOM" -"1052420784","1052420799","ZA","ZAF","SOUTH AFRICA" -"1052420800","1052420863","DE","DEU","GERMANY" -"1052420864","1052422143","GB","GBR","UNITED KINGDOM" -"1052422144","1052422847","ZA","ZAF","SOUTH AFRICA" -"1052422848","1052422863","SE","SWE","SWEDEN" -"1052422864","1052422879","FR","FRA","FRANCE" -"1052422880","1052423199","ZA","ZAF","SOUTH AFRICA" -"1052423200","1052423231","CH","CHE","SWITZERLAND" -"1052423232","1052423295","ZA","ZAF","SOUTH AFRICA" -"1052423304","1052423311","CH","CHE","SWITZERLAND" -"1052423360","1052423423","NL","NLD","NETHERLANDS" -"1052423424","1052423967","ZA","ZAF","SOUTH AFRICA" -"1052424000","1052424799","ZA","ZAF","SOUTH AFRICA" -"1052424800","1052424815","GB","GBR","UNITED KINGDOM" -"1052424816","1052424823","ES","ESP","SPAIN" -"1052424824","1052424831","BE","BEL","BELGIUM" -"1052424832","1052424959","GB","GBR","UNITED KINGDOM" -"1052424960","1052425151","ZA","ZAF","SOUTH AFRICA" -"1052425152","1052425215","BE","BEL","BELGIUM" -"1052425216","1052426239","ZA","ZAF","SOUTH AFRICA" -"1052426240","1052426319","PT","PRT","PORTUGAL" -"1052426328","1052426495","PT","PRT","PORTUGAL" -"1052426512","1052426527","FR","FRA","FRANCE" -"1052427264","1052427839","CH","CHE","SWITZERLAND" -"1052427840","1052427855","GB","GBR","UNITED KINGDOM" -"1052427856","1052427871","IT","ITA","ITALY" -"1052427872","1052427903","AT","AUT","AUSTRIA" -"1052427904","1052427967","DE","DEU","GERMANY" -"1052427968","1052428031","GB","GBR","UNITED KINGDOM" -"1052428032","1052428287","CH","CHE","SWITZERLAND" -"1052428288","1052428479","ES","ESP","SPAIN" -"1052428480","1052428543","BE","BEL","BELGIUM" -"1052428544","1052429407","ES","ESP","SPAIN" -"1052429408","1052429439","FR","FRA","FRANCE" -"1052429440","1052429567","BE","BEL","BELGIUM" -"1052429568","1052429759","ES","ESP","SPAIN" -"1052429760","1052429823","DE","DEU","GERMANY" -"1052429824","1052430335","ES","ESP","SPAIN" -"1052430336","1052430407","BE","BEL","BELGIUM" -"1052430408","1052430415","ZA","ZAF","SOUTH AFRICA" -"1052430416","1052430431","FR","FRA","FRANCE" -"1052430432","1052430463","DE","DEU","GERMANY" -"1052430464","1052430527","BE","BEL","BELGIUM" -"1052430528","1052430591","DE","DEU","GERMANY" -"1052430592","1052433407","BE","BEL","BELGIUM" -"1052433408","1052433719","DK","DNK","DENMARK" -"1052433720","1052433727","FR","FRA","FRANCE" -"1052433728","1052433919","DK","DNK","DENMARK" -"1052433920","1052434431","ZA","ZAF","SOUTH AFRICA" -"1052434432","1052434751","GB","GBR","UNITED KINGDOM" -"1052434752","1052434783","NO","NOR","NORWAY" -"1052434784","1052435455","GB","GBR","UNITED KINGDOM" -"1052435456","1052435647","NL","NLD","NETHERLANDS" -"1052435680","1052436479","NL","NLD","NETHERLANDS" -"1052436480","1052437023","DE","DEU","GERMANY" -"1052437024","1052437055","ZA","ZAF","SOUTH AFRICA" -"1052437056","1052437119","DE","DEU","GERMANY" -"1052437120","1052437135","ZA","ZAF","SOUTH AFRICA" -"1052437136","1052437151","DE","DEU","GERMANY" -"1052437152","1052437183","GB","GBR","UNITED KINGDOM" -"1052437184","1052437247","ZA","ZAF","SOUTH AFRICA" -"1052437248","1052437759","DE","DEU","GERMANY" -"1052437760","1052438015","CH","CHE","SWITZERLAND" -"1052438016","1052438399","BE","BEL","BELGIUM" -"1052438528","1052439503","AT","AUT","AUSTRIA" -"1052439520","1052439551","AT","AUT","AUSTRIA" -"1052439552","1052440575","FR","FRA","FRANCE" -"1052440576","1052441343","DE","DEU","GERMANY" -"1052441600","1052442623","GB","GBR","UNITED KINGDOM" -"1052442624","1052443647","DE","DEU","GERMANY" -"1052446208","1052446719","DE","DEU","GERMANY" -"1052446720","1052447743","CZ","CZE","CZECH REPUBLIC" -"1052447744","1052447871","PL","POL","POLAND" -"1052448000","1052448127","PL","POL","POLAND" -"1052448256","1052450815","ZA","ZAF","SOUTH AFRICA" -"1052450816","1052451839","DE","DEU","GERMANY" -"1052451840","1052452159","NO","NOR","NORWAY" -"1052452224","1052452351","NO","NOR","NORWAY" -"1052452352","1052452831","ES","ESP","SPAIN" -"1052452832","1052452847","GB","GBR","UNITED KINGDOM" -"1052452848","1052452863","FR","FRA","FRANCE" -"1052452992","1052452999","SK","SVK","SLOVAKIA" -"1052453120","1052453375","FR","FRA","FRANCE" -"1052453376","1052453887","AT","AUT","AUSTRIA" -"1052453888","1052454911","GB","GBR","UNITED KINGDOM" -"1052454912","1052454943","FR","FRA","FRANCE" -"1052454944","1052454959","NL","NLD","NETHERLANDS" -"1052454976","1052455359","NL","NLD","NETHERLANDS" -"1052455424","1052455935","GB","GBR","UNITED KINGDOM" -"1052455936","1052456447","NL","NLD","NETHERLANDS" -"1052456448","1052456959","CH","CHE","SWITZERLAND" -"1052456960","1052457983","NL","NLD","NETHERLANDS" -"1052457984","1052458367","AT","AUT","AUSTRIA" -"1052458432","1052458495","AT","AUT","AUSTRIA" -"1052458496","1052458847","NL","NLD","NETHERLANDS" -"1052458848","1052458863","FR","FRA","FRANCE" -"1052458864","1052458871","NL","NLD","NETHERLANDS" -"1052458872","1052458879","FR","FRA","FRANCE" -"1052458880","1052460031","GB","GBR","UNITED KINGDOM" -"1052460032","1052460127","NO","NOR","NORWAY" -"1052460224","1052460287","FR","FRA","FRANCE" -"1052460544","1052460799","NO","NOR","NORWAY" -"1052460800","1052461055","DE","DEU","GERMANY" -"1052461056","1052461295","FR","FRA","FRANCE" -"1052461296","1052461311","BE","BEL","BELGIUM" -"1052461312","1052461951","FR","FRA","FRANCE" -"1052461968","1052463103","FR","FRA","FRANCE" -"1052463104","1052463615","ES","ESP","SPAIN" -"1052463616","1052464639","GB","GBR","UNITED KINGDOM" -"1052464640","1052464927","ES","ESP","SPAIN" -"1052464960","1052465087","ES","ESP","SPAIN" -"1052465152","1052465375","ZA","ZAF","SOUTH AFRICA" -"1052465408","1052465663","ZA","ZAF","SOUTH AFRICA" -"1052466432","1052468223","FR","FRA","FRANCE" -"1052468224","1052469247","GB","GBR","UNITED KINGDOM" -"1052469248","1052470271","FR","FRA","FRANCE" -"1052470272","1052470783","ZA","ZAF","SOUTH AFRICA" -"1052470784","1052471007","FR","FRA","FRANCE" -"1052471040","1052471295","BE","BEL","BELGIUM" -"1052471296","1052472511","GB","GBR","UNITED KINGDOM" -"1052472576","1052475231","GB","GBR","UNITED KINGDOM" -"1052475240","1052475255","GB","GBR","UNITED KINGDOM" -"1052475264","1052475391","GB","GBR","UNITED KINGDOM" -"1052475392","1052476383","FR","FRA","FRANCE" -"1052476416","1052479487","FR","FRA","FRANCE" -"1052479488","1052479743","NL","NLD","NETHERLANDS" -"1052479744","1052479999","DE","DEU","GERMANY" -"1052480000","1052483583","NL","NLD","NETHERLANDS" -"1052483584","1052483999","IT","ITA","ITALY" -"1052484032","1052485279","IT","ITA","ITALY" -"1052485312","1052485631","IT","ITA","ITALY" -"1052485632","1052486655","GB","GBR","UNITED KINGDOM" -"1052486656","1052486911","CH","CHE","SWITZERLAND" -"1052486912","1052486975","DE","DEU","GERMANY" -"1052486976","1052487039","FR","FRA","FRANCE" -"1052487040","1052487167","DE","DEU","GERMANY" -"1052487168","1052487423","GB","GBR","UNITED KINGDOM" -"1052487424","1052487679","AT","AUT","AUSTRIA" -"1052487680","1052488703","CH","CHE","SWITZERLAND" -"1052488704","1052489727","GB","GBR","UNITED KINGDOM" -"1052489728","1052490239","IE","IRL","IRELAND" -"1052490240","1052490751","SE","SWE","SWEDEN" -"1052490752","1052491679","AT","AUT","AUSTRIA" -"1052491688","1052491775","AT","AUT","AUSTRIA" -"1052491776","1052493567","BE","BEL","BELGIUM" -"1052493696","1052494335","BE","BEL","BELGIUM" -"1052494336","1052494591","NL","NLD","NETHERLANDS" -"1052494592","1052495439","BE","BEL","BELGIUM" -"1052495440","1052495487","FR","FRA","FRANCE" -"1052495488","1052495551","BE","BEL","BELGIUM" -"1052495552","1052495583","GB","GBR","UNITED KINGDOM" -"1052495584","1052495871","BE","BEL","BELGIUM" -"1052495872","1052495879","UA","UKR","UKRAINE" -"1052496128","1052497407","DE","DEU","GERMANY" -"1052497664","1052497919","DE","DEU","GERMANY" -"1052497920","1052498431","ES","ESP","SPAIN" -"1052498432","1052498495","RO","ROM","ROMANIA" -"1052498944","1052499455","GB","GBR","UNITED KINGDOM" -"1052499968","1052500191","DK","DNK","DENMARK" -"1052500208","1052500319","DK","DNK","DENMARK" -"1052500480","1052500991","GB","GBR","UNITED KINGDOM" -"1052500992","1052501023","FI","FIN","FINLAND" -"1052501032","1052501039","FI","FIN","FINLAND" -"1052501120","1052501247","FI","FIN","FINLAND" -"1052501504","1052502015","CH","CHE","SWITZERLAND" -"1052502016","1052502783","IE","IRL","IRELAND" -"1052502816","1052502847","IE","IRL","IRELAND" -"1052503040","1052504319","GB","GBR","UNITED KINGDOM" -"1052504320","1052504351","BY","BLR","BELARUS" -"1052504384","1052507583","GB","GBR","UNITED KINGDOM" -"1052507648","1052507775","GB","GBR","UNITED KINGDOM" -"1052507904","1052596447","GB","GBR","UNITED KINGDOM" -"1052596448","1052596463","IT","ITA","ITALY" -"1052596464","1052602495","GB","GBR","UNITED KINGDOM" -"1052602496","1052602623","ES","ESP","SPAIN" -"1052602624","1052621951","GB","GBR","UNITED KINGDOM" -"1052621952","1052622015","IE","IRL","IRELAND" -"1052622016","1052634943","GB","GBR","UNITED KINGDOM" -"1052634944","1052634951","IE","IRL","IRELAND" -"1052634952","1052644095","GB","GBR","UNITED KINGDOM" -"1052644096","1052644351","SE","SWE","SWEDEN" -"1052644352","1052647167","GB","GBR","UNITED KINGDOM" -"1052647168","1052647423","SE","SWE","SWEDEN" -"1052647424","1052661759","GB","GBR","UNITED KINGDOM" -"1052661760","1052662271","SE","SWE","SWEDEN" -"1052662272","1052665343","GB","GBR","UNITED KINGDOM" -"1052665344","1052665599","SE","SWE","SWEDEN" -"1052665600","1052684575","GB","GBR","UNITED KINGDOM" -"1052684576","1052684607","IT","ITA","ITALY" -"1052684608","1052770303","GB","GBR","UNITED KINGDOM" -"1052770304","1052775711","CH","CHE","SWITZERLAND" -"1052775712","1052775727","DE","DEU","GERMANY" -"1052775728","1052775759","CH","CHE","SWITZERLAND" -"1052775760","1052775767","GB","GBR","UNITED KINGDOM" -"1052775768","1052778495","CH","CHE","SWITZERLAND" -"1052778496","1052786687","RU","RUS","RUSSIAN FEDERATION" -"1052786688","1052803071","NL","NLD","NETHERLANDS" -"1052803072","1052806655","DE","DEU","GERMANY" -"1052806656","1052807167","MW","MWI","MALAWI" -"1052807168","1052811263","DE","DEU","GERMANY" -"1052811264","1052819455","RU","RUS","RUSSIAN FEDERATION" -"1052819456","1052827647","DE","DEU","GERMANY" -"1052827648","1052835839","RU","RUS","RUSSIAN FEDERATION" -"1052835840","1052844031","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1052844032","1052852223","FR","FRA","FRANCE" -"1052868608","1052871935","RS","SRB","SERBIA" -"1052871936","1052871959","CS","SCG","SERBIA AND MONTENEGRO" -"1052871960","1052871975","RS","SRB","SERBIA" -"1052871976","1052871991","CS","SCG","SERBIA AND MONTENEGRO" -"1052871992","1052872000","CS","SCG","SERBIA AND MONTENEGRO" -"1052872001","1052872011","RS","SRB","SERBIA" -"1052872012","1052872019","CS","SCG","SERBIA AND MONTENEGRO" -"1052872020","1052872095","RS","SRB","SERBIA" -"1052872096","1052872127","CS","SCG","SERBIA AND MONTENEGRO" -"1052872128","1052872143","CS","SCG","SERBIA AND MONTENEGRO" -"1052872144","1052872159","CS","SCG","SERBIA AND MONTENEGRO" -"1052872160","1052872191","CS","SCG","SERBIA AND MONTENEGRO" -"1052872192","1052872207","CS","SCG","SERBIA AND MONTENEGRO" -"1052872208","1052872235","RS","SRB","SERBIA" -"1052872236","1052872243","CS","SCG","SERBIA AND MONTENEGRO" -"1052872244","1052872255","RS","SRB","SERBIA" -"1052872256","1052872271","CS","SCG","SERBIA AND MONTENEGRO" -"1052872272","1052872311","RS","SRB","SERBIA" -"1052872312","1052872323","CS","SCG","SERBIA AND MONTENEGRO" -"1052872324","1052872343","RS","SRB","SERBIA" -"1052872344","1052872355","CS","SCG","SERBIA AND MONTENEGRO" -"1052872356","1052872371","RS","SRB","SERBIA" -"1052872372","1052872375","CS","SCG","SERBIA AND MONTENEGRO" -"1052872376","1052872383","RS","SRB","SERBIA" -"1052872384","1052872403","CS","SCG","SERBIA AND MONTENEGRO" -"1052872404","1052872407","RS","SRB","SERBIA" -"1052872408","1052872411","CS","SCG","SERBIA AND MONTENEGRO" -"1052872412","1052872435","RS","SRB","SERBIA" -"1052872436","1052872451","CS","SCG","SERBIA AND MONTENEGRO" -"1052872452","1052872495","RS","SRB","SERBIA" -"1052872496","1052872503","CS","SCG","SERBIA AND MONTENEGRO" -"1052872504","1052872507","RS","SRB","SERBIA" -"1052872508","1052872511","CS","SCG","SERBIA AND MONTENEGRO" -"1052872512","1052872523","RS","SRB","SERBIA" -"1052872524","1052872527","CS","SCG","SERBIA AND MONTENEGRO" -"1052872528","1052872539","RS","SRB","SERBIA" -"1052872540","1052872543","CS","SCG","SERBIA AND MONTENEGRO" -"1052872544","1052872559","RS","SRB","SERBIA" -"1052872560","1052872571","CS","SCG","SERBIA AND MONTENEGRO" -"1052872572","1052872591","RS","SRB","SERBIA" -"1052872592","1052872615","CS","SCG","SERBIA AND MONTENEGRO" -"1052872616","1052872639","RS","SRB","SERBIA" -"1052872640","1052872643","CS","SCG","SERBIA AND MONTENEGRO" -"1052872644","1052872679","RS","SRB","SERBIA" -"1052872680","1052872687","CS","SCG","SERBIA AND MONTENEGRO" -"1052872688","1052872823","RS","SRB","SERBIA" -"1052872824","1052872831","CS","SCG","SERBIA AND MONTENEGRO" -"1052872832","1052872883","RS","SRB","SERBIA" -"1052872884","1052872895","CS","SCG","SERBIA AND MONTENEGRO" -"1052872896","1052876799","RS","SRB","SERBIA" -"1052884992","1052901375","FR","FRA","FRANCE" -"1052901376","1053032447","NL","NLD","NETHERLANDS" -"1053032448","1053097983","IT","ITA","ITALY" -"1053097984","1053106175","DE","DEU","GERMANY" -"1053106176","1053114367","GB","GBR","UNITED KINGDOM" -"1053114368","1053130751","BE","BEL","BELGIUM" -"1053130752","1053138943","NL","NLD","NETHERLANDS" -"1053138944","1053147135","FI","FIN","FINLAND" -"1053147136","1053163519","SK","SVK","SLOVAKIA" -"1053163520","1053294591","DK","DNK","DENMARK" -"1053294848","1053295103","AT","AUT","AUSTRIA" -"1053295392","1053295423","AT","AUT","AUSTRIA" -"1053295456","1053295471","AT","AUT","AUSTRIA" -"1053295616","1053296639","AT","AUT","AUSTRIA" -"1053296640","1053296927","IT","ITA","ITALY" -"1053296992","1053297023","IT","ITA","ITALY" -"1053297040","1053297055","IT","ITA","ITALY" -"1053297112","1053297151","IT","ITA","ITALY" -"1053298176","1053299199","CH","CHE","SWITZERLAND" -"1053299712","1053300023","GB","GBR","UNITED KINGDOM" -"1053300032","1053300143","GB","GBR","UNITED KINGDOM" -"1053300152","1053300159","GB","GBR","UNITED KINGDOM" -"1053300224","1053300495","GB","GBR","UNITED KINGDOM" -"1053300512","1053300735","GB","GBR","UNITED KINGDOM" -"1053300736","1053300991","CH","CHE","SWITZERLAND" -"1053300992","1053301023","FR","FRA","FRANCE" -"1053301040","1053301063","FR","FRA","FRANCE" -"1053301072","1053301135","FR","FRA","FRANCE" -"1053301168","1053301183","FR","FRA","FRANCE" -"1053301200","1053301295","FR","FRA","FRANCE" -"1053301304","1053301359","FR","FRA","FRANCE" -"1053301368","1053301503","FR","FRA","FRANCE" -"1053302032","1053302055","FR","FRA","FRANCE" -"1053302056","1053302063","DE","DEU","GERMANY" -"1053302064","1053302159","FR","FRA","FRANCE" -"1053302176","1053302183","FR","FRA","FRANCE" -"1053302320","1053302335","FR","FRA","FRANCE" -"1053302384","1053302687","FR","FRA","FRANCE" -"1053302728","1053302735","FR","FRA","FRANCE" -"1053302760","1053302783","FR","FRA","FRANCE" -"1053305088","1053305951","GR","GRC","GREECE" -"1053306112","1053306879","GR","GRC","GREECE" -"1053307904","1053307935","GB","GBR","UNITED KINGDOM" -"1053307944","1053307999","GB","GBR","UNITED KINGDOM" -"1053308032","1053308095","GB","GBR","UNITED KINGDOM" -"1053308160","1053308543","GB","GBR","UNITED KINGDOM" -"1053308672","1053308767","GB","GBR","UNITED KINGDOM" -"1053308800","1053308863","GB","GBR","UNITED KINGDOM" -"1053308928","1053308991","ZA","ZAF","SOUTH AFRICA" -"1053309184","1053309951","ZA","ZAF","SOUTH AFRICA" -"1053311232","1053311359","CZ","CZE","CZECH REPUBLIC" -"1053312000","1053312815","DK","DNK","DENMARK" -"1053312848","1053312871","DK","DNK","DENMARK" -"1053312880","1053312911","DK","DNK","DENMARK" -"1053312928","1053312959","DK","DNK","DENMARK" -"1053313024","1053313343","GB","GBR","UNITED KINGDOM" -"1053313440","1053313599","GB","GBR","UNITED KINGDOM" -"1053313664","1053313695","GB","GBR","UNITED KINGDOM" -"1053313728","1053313791","GB","GBR","UNITED KINGDOM" -"1053313920","1053314047","GB","GBR","UNITED KINGDOM" -"1053314064","1053314079","CZ","CZE","CZECH REPUBLIC" -"1053315072","1053316639","GB","GBR","UNITED KINGDOM" -"1053316648","1053316863","GB","GBR","UNITED KINGDOM" -"1053317120","1053317295","ZA","ZAF","SOUTH AFRICA" -"1053317376","1053317631","GB","GBR","UNITED KINGDOM" -"1053318144","1053318655","GB","GBR","UNITED KINGDOM" -"1053318656","1053318911","FI","FIN","FINLAND" -"1053318928","1053318951","FI","FIN","FINLAND" -"1053318952","1053318959","EE","EST","ESTONIA" -"1053318976","1053319007","FI","FIN","FINLAND" -"1053319424","1053320191","DE","DEU","GERMANY" -"1053320224","1053320319","DE","DEU","GERMANY" -"1053326336","1053326399","BE","BEL","BELGIUM" -"1053326432","1053326447","GB","GBR","UNITED KINGDOM" -"1053326448","1053326463","BE","BEL","BELGIUM" -"1053326528","1053326543","BE","BEL","BELGIUM" -"1053326560","1053326567","BE","BEL","BELGIUM" -"1053326576","1053326847","BE","BEL","BELGIUM" -"1053326848","1053327103","FI","FIN","FINLAND" -"1053327104","1053327359","DK","DNK","DENMARK" -"1053327872","1053328383","ZA","ZAF","SOUTH AFRICA" -"1053328640","1053328799","ZA","ZAF","SOUTH AFRICA" -"1053328896","1053329087","ZA","ZAF","SOUTH AFRICA" -"1053329120","1053329135","ZA","ZAF","SOUTH AFRICA" -"1053329144","1053329151","ZA","ZAF","SOUTH AFRICA" -"1053329184","1053329279","ZA","ZAF","SOUTH AFRICA" -"1053329408","1053329439","ES","ESP","SPAIN" -"1053329512","1053329527","ES","ESP","SPAIN" -"1053329632","1053329639","ES","ESP","SPAIN" -"1053330432","1053330687","ES","ESP","SPAIN" -"1053331456","1053331487","NL","NLD","NETHERLANDS" -"1053331584","1053331663","NL","NLD","NETHERLANDS" -"1053331680","1053331703","NL","NLD","NETHERLANDS" -"1053331712","1053331887","NL","NLD","NETHERLANDS" -"1053331904","1053331935","NL","NLD","NETHERLANDS" -"1053332224","1053332271","NL","NLD","NETHERLANDS" -"1053332320","1053332415","NL","NLD","NETHERLANDS" -"1053332448","1053332479","NL","NLD","NETHERLANDS" -"1053332992","1053334015","BE","BEL","BELGIUM" -"1053334016","1053334191","DK","DNK","DENMARK" -"1053334200","1053334223","DK","DNK","DENMARK" -"1053334240","1053334527","DK","DNK","DENMARK" -"1053334528","1053334783","SE","SWE","SWEDEN" -"1053335552","1053336831","ZA","ZAF","SOUTH AFRICA" -"1053337088","1053337119","ZA","ZAF","SOUTH AFRICA" -"1053337128","1053337183","ZA","ZAF","SOUTH AFRICA" -"1053337216","1053337279","ZA","ZAF","SOUTH AFRICA" -"1053337600","1053337631","CH","CHE","SWITZERLAND" -"1053338112","1053338623","FI","FIN","FINLAND" -"1053338624","1053338943","NO","NOR","NORWAY" -"1053338976","1053338983","NO","NOR","NORWAY" -"1053339136","1053339423","NO","NOR","NORWAY" -"1053339456","1053339519","NO","NOR","NORWAY" -"1053339592","1053339599","NO","NOR","NORWAY" -"1053339616","1053339647","NO","NOR","NORWAY" -"1053339648","1053340159","AT","AUT","AUSTRIA" -"1053340160","1053340415","ZA","ZAF","SOUTH AFRICA" -"1053340480","1053340495","NL","NLD","NETHERLANDS" -"1053340672","1053340679","GB","GBR","UNITED KINGDOM" -"1053340688","1053340711","GB","GBR","UNITED KINGDOM" -"1053340720","1053340919","GB","GBR","UNITED KINGDOM" -"1053340928","1053341183","GB","GBR","UNITED KINGDOM" -"1053341440","1053341615","GB","GBR","UNITED KINGDOM" -"1053341632","1053341695","GB","GBR","UNITED KINGDOM" -"1053343744","1053344255","FI","FIN","FINLAND" -"1053344512","1053344767","BG","BGR","BULGARIA" -"1053345280","1053345375","PK","PAK","PAKISTAN" -"1053345408","1053345471","PK","PAK","PAKISTAN" -"1053348640","1053348655","PT","PRT","PORTUGAL" -"1053349120","1053349631","NL","NLD","NETHERLANDS" -"1053349888","1053349951","IE","IRL","IRELAND" -"1053350144","1053350359","IE","IRL","IRELAND" -"1053350368","1053350383","IE","IRL","IRELAND" -"1053350400","1053350479","BE","BEL","BELGIUM" -"1053350488","1053350495","BE","BEL","BELGIUM" -"1053350656","1053350911","BE","BEL","BELGIUM" -"1053351936","1053352191","IL","ISR","ISRAEL" -"1053353024","1053353031","IE","IRL","IRELAND" -"1053353104","1053353111","IE","IRL","IRELAND" -"1053353136","1053353215","IE","IRL","IRELAND" -"1053353232","1053353279","IE","IRL","IRELAND" -"1053353984","1053354239","IL","ISR","ISRAEL" -"1053354496","1053354655","IL","ISR","ISRAEL" -"1053354688","1053354719","IL","ISR","ISRAEL" -"1053354752","1053354831","IL","ISR","ISRAEL" -"1053354856","1053354871","IL","ISR","ISRAEL" -"1053354912","1053355007","IL","ISR","ISRAEL" -"1053360128","1053364223","ES","ESP","SPAIN" -"1053364224","1053368319","CZ","CZE","CZECH REPUBLIC" -"1053368320","1053376511","SE","SWE","SWEDEN" -"1053376512","1053392895","HU","HUN","HUNGARY" -"1053392896","1053401087","FR","FRA","FRANCE" -"1053401088","1053409279","DE","DEU","GERMANY" -"1053409280","1053425663","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1053425664","1053556735","CH","CHE","SWITZERLAND" -"1053556736","1053564927","FI","FIN","FINLAND" -"1053564928","1053573119","GB","GBR","UNITED KINGDOM" -"1053573120","1053581311","NL","NLD","NETHERLANDS" -"1053581312","1053589503","CH","CHE","SWITZERLAND" -"1053589504","1053597695","BG","BGR","BULGARIA" -"1053597696","1053605887","DE","DEU","GERMANY" -"1053605888","1053614079","ES","ESP","SPAIN" -"1053614080","1053622271","CZ","CZE","CZECH REPUBLIC" -"1053622272","1053630463","IT","ITA","ITALY" -"1053630464","1053638655","GR","GRC","GREECE" -"1053638656","1053655039","BE","BEL","BELGIUM" -"1053655040","1053663231","UA","UKR","UKRAINE" -"1053663232","1053671423","RU","RUS","RUSSIAN FEDERATION" -"1053671424","1053687807","LV","LVA","LATVIA" -"1053687808","1053702635","DE","DEU","GERMANY" -"1053702636","1053702639","GB","GBR","UNITED KINGDOM" -"1053702640","1053753343","DE","DEU","GERMANY" -"1053818880","1053819391","DE","DEU","GERMANY" -"1053819424","1053819439","DE","DEU","GERMANY" -"1053819520","1053819563","DE","DEU","GERMANY" -"1053819584","1053819647","DE","DEU","GERMANY" -"1053820160","1053820927","DE","DEU","GERMANY" -"1053821440","1053821447","GB","GBR","UNITED KINGDOM" -"1053821568","1053821695","GB","GBR","UNITED KINGDOM" -"1053824016","1053824023","DE","DEU","GERMANY" -"1053824128","1053824255","NL","NLD","NETHERLANDS" -"1053825024","1053826047","ES","ESP","SPAIN" -"1053826816","1053827327","DE","DEU","GERMANY" -"1053827328","1053827583","BE","BEL","BELGIUM" -"1053829888","1053830143","DE","DEU","GERMANY" -"1053831168","1053831423","DE","DEU","GERMANY" -"1053834944","1053834975","DE","DEU","GERMANY" -"1053835264","1053835775","DE","DEU","GERMANY" -"1053837312","1053837439","FK","FLK","FALKLAND ISLANDS (MALVINAS)" -"1053837568","1053837823","GB","GBR","UNITED KINGDOM" -"1053837824","1053838335","FK","FLK","FALKLAND ISLANDS (MALVINAS)" -"1053838336","1053838591","DE","DEU","GERMANY" -"1053840400","1053840415","DE","DEU","GERMANY" -"1053840448","1053840511","DE","DEU","GERMANY" -"1053843200","1053843231","DK","DNK","DENMARK" -"1053843712","1053843967","DE","DEU","GERMANY" -"1053843968","1053844223","GB","GBR","UNITED KINGDOM" -"1053844224","1053844479","DE","DEU","GERMANY" -"1053844992","1053845503","DE","DEU","GERMANY" -"1053845728","1053845735","DE","DEU","GERMANY" -"1053846016","1053846527","DE","DEU","GERMANY" -"1053846784","1053847551","DE","DEU","GERMANY" -"1053847552","1053849599","GB","GBR","UNITED KINGDOM" -"1053849600","1053850367","DE","DEU","GERMANY" -"1053851136","1053851647","DE","DEU","GERMANY" -"1053851904","1053851919","FR","FRA","FRANCE" -"1053852032","1053852047","IT","ITA","ITALY" -"1053852096","1053852103","DE","DEU","GERMANY" -"1053852112","1053852127","GB","GBR","UNITED KINGDOM" -"1053852128","1053852159","DE","DEU","GERMANY" -"1053855744","1053859839","GB","GBR","UNITED KINGDOM" -"1053859840","1053860863","DE","DEU","GERMANY" -"1053862656","1053862783","DE","DEU","GERMANY" -"1053862848","1053862879","DE","DEU","GERMANY" -"1053863424","1053864959","DE","DEU","GERMANY" -"1053865216","1053865727","DE","DEU","GERMANY" -"1053865728","1053865759","US","USA","UNITED STATES" -"1053865984","1053866239","DE","DEU","GERMANY" -"1053866240","1053866495","ES","ESP","SPAIN" -"1053866496","1053866799","DE","DEU","GERMANY" -"1053866808","1053866823","DE","DEU","GERMANY" -"1053866832","1053866847","DE","DEU","GERMANY" -"1053867520","1053867775","DE","DEU","GERMANY" -"1053867976","1053867983","DE","DEU","GERMANY" -"1053867992","1053867999","DE","DEU","GERMANY" -"1053868008","1053868015","DE","DEU","GERMANY" -"1053868032","1053868447","ES","ESP","SPAIN" -"1053868448","1053868455","GB","GBR","UNITED KINGDOM" -"1053868456","1053868463","ES","ESP","SPAIN" -"1053868800","1053869567","DE","DEU","GERMANY" -"1053870080","1053870335","DE","DEU","GERMANY" -"1053870336","1053870591","GB","GBR","UNITED KINGDOM" -"1053870848","1053871359","DE","DEU","GERMANY" -"1053871616","1053871871","DE","DEU","GERMANY" -"1053872384","1053872447","DE","DEU","GERMANY" -"1053872896","1053873663","DE","DEU","GERMANY" -"1053876224","1053876991","DE","DEU","GERMANY" -"1053877248","1053878271","DE","DEU","GERMANY" -"1053878272","1053878783","GB","GBR","UNITED KINGDOM" -"1053878784","1053879047","DE","DEU","GERMANY" -"1053879056","1053879071","DE","DEU","GERMANY" -"1053879072","1053879167","GB","GBR","UNITED KINGDOM" -"1053879296","1053882111","DE","DEU","GERMANY" -"1053882368","1053882879","DE","DEU","GERMANY" -"1053882880","1053883391","GB","GBR","UNITED KINGDOM" -"1053883392","1053884415","DE","DEU","GERMANY" -"1053884416","1053892607","BH","BHR","BAHRAIN" -"1053892608","1053892619","DE","DEU","GERMANY" -"1053892620","1053892623","GB","GBR","UNITED KINGDOM" -"1053892624","1053892943","DE","DEU","GERMANY" -"1053892944","1053892959","GB","GBR","UNITED KINGDOM" -"1053892960","1053894495","DE","DEU","GERMANY" -"1053894496","1053894527","GB","GBR","UNITED KINGDOM" -"1053894528","1053894719","DE","DEU","GERMANY" -"1053894720","1053894735","FR","FRA","FRANCE" -"1053894736","1053894743","GB","GBR","UNITED KINGDOM" -"1053894744","1053894751","GE","GEO","GEORGIA" -"1053894752","1053894783","DE","DEU","GERMANY" -"1053894784","1053894815","IL","ISR","ISRAEL" -"1053894816","1053894831","NL","NLD","NETHERLANDS" -"1053894832","1053894847","US","USA","UNITED STATES" -"1053894848","1053895423","DE","DEU","GERMANY" -"1053895424","1053895679","GB","GBR","UNITED KINGDOM" -"1053895680","1053895935","US","USA","UNITED STATES" -"1053895936","1053896087","DE","DEU","GERMANY" -"1053896088","1053896095","US","USA","UNITED STATES" -"1053896096","1053896127","GB","GBR","UNITED KINGDOM" -"1053896128","1053896159","DE","DEU","GERMANY" -"1053896160","1053896175","US","USA","UNITED STATES" -"1053896176","1053896447","DE","DEU","GERMANY" -"1053896448","1053896703","US","USA","UNITED STATES" -"1053896704","1053900799","DE","DEU","GERMANY" -"1053900800","1053917183","NO","NOR","NORWAY" -"1053917184","1053925375","UZ","UZB","UZBEKISTAN" -"1053925376","1053933567","SE","SWE","SWEDEN" -"1053933568","1053949951","CZ","CZE","CZECH REPUBLIC" -"1053949952","1053984415","FR","FRA","FRANCE" -"1053984416","1053984447","US","USA","UNITED STATES" -"1053984448","1053984895","FR","FRA","FRANCE" -"1053984896","1053985023","US","USA","UNITED STATES" -"1053985024","1054015487","FR","FRA","FRANCE" -"1054015488","1054089215","IT","ITA","ITALY" -"1054089216","1054097407","GE","GEO","GEORGIA" -"1054097408","1054105599","NL","NLD","NETHERLANDS" -"1054105600","1054113791","FR","FRA","FRANCE" -"1054113792","1054121983","NL","NLD","NETHERLANDS" -"1054121984","1054130175","AT","AUT","AUSTRIA" -"1054130176","1054138367","LT","LTU","LITHUANIA" -"1054138368","1054146559","AZ","AZE","AZERBAIJAN" -"1054146560","1054179327","RU","RUS","RUSSIAN FEDERATION" -"1054179328","1054187519","GB","GBR","UNITED KINGDOM" -"1054187520","1054195711","BG","BGR","BULGARIA" -"1054195712","1054212095","BE","BEL","BELGIUM" -"1054212096","1054277631","DE","DEU","GERMANY" -"1054277632","1054343167","KW","KWT","KUWAIT" -"1054343168","1054351359","NL","NLD","NETHERLANDS" -"1054351360","1054359551","UA","UKR","UKRAINE" -"1054367744","1054375935","FI","FIN","FINLAND" -"1054375936","1054381055","GB","GBR","UNITED KINGDOM" -"1054381056","1054381823","EG","EGY","EGYPT" -"1054381824","1054384127","GB","GBR","UNITED KINGDOM" -"1054384128","1054400511","DE","DEU","GERMANY" -"1054400512","1054408703","GB","GBR","UNITED KINGDOM" -"1054408704","1054416895","FR","FRA","FRANCE" -"1054416896","1054425087","DE","DEU","GERMANY" -"1054425088","1054441471","GR","GRC","GREECE" -"1054441472","1054449663","AZ","AZE","AZERBAIJAN" -"1054449664","1054457855","RU","RUS","RUSSIAN FEDERATION" -"1054457856","1054474239","RO","ROM","ROMANIA" -"1054474240","1054539775","AT","AUT","AUSTRIA" -"1054539776","1054605311","IL","ISR","ISRAEL" -"1054605312","1054613503","DE","DEU","GERMANY" -"1054613504","1054621695","RU","RUS","RUSSIAN FEDERATION" -"1054621696","1054629887","IT","ITA","ITALY" -"1054629888","1054638079","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1054638080","1054646271","CH","CHE","SWITZERLAND" -"1054646272","1054654463","SE","SWE","SWEDEN" -"1054654464","1054662655","MK","MKD","THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA" -"1054662656","1054670847","FI","FIN","FINLAND" -"1054670848","1054671103","GB","GBR","UNITED KINGDOM" -"1054671168","1054671231","IE","IRL","IRELAND" -"1054671372","1054671375","IE","IRL","IRELAND" -"1054671416","1054671423","IE","IRL","IRELAND" -"1054671432","1054671439","IE","IRL","IRELAND" -"1054672160","1054672175","IE","IRL","IRELAND" -"1054672256","1054672287","IE","IRL","IRELAND" -"1054672320","1054672335","US","USA","UNITED STATES" -"1054672336","1054672367","IE","IRL","IRELAND" -"1054672384","1054672447","IE","IRL","IRELAND" -"1054672720","1054672727","IE","IRL","IRELAND" -"1054672744","1054672767","IE","IRL","IRELAND" -"1054672776","1054672783","IE","IRL","IRELAND" -"1054672792","1054672807","IE","IRL","IRELAND" -"1054673664","1054673727","IE","IRL","IRELAND" -"1054673856","1054673919","IE","IRL","IRELAND" -"1054673952","1054674047","IE","IRL","IRELAND" -"1054674080","1054674111","IE","IRL","IRELAND" -"1054674456","1054674471","IE","IRL","IRELAND" -"1054674480","1054674495","IE","IRL","IRELAND" -"1054674504","1054674511","IE","IRL","IRELAND" -"1054674520","1054674527","GB","GBR","UNITED KINGDOM" -"1054674688","1054675199","IE","IRL","IRELAND" -"1054675456","1054675711","IE","IRL","IRELAND" -"1054675968","1054676223","US","USA","UNITED STATES" -"1054679040","1054687231","UA","UKR","UKRAINE" -"1054687232","1054703615","MD","MDA","REPUBLIC OF MOLDOVA" -"1054703616","1054711807","BG","BGR","BULGARIA" -"1054711808","1054719999","IT","ITA","ITALY" -"1054720000","1054867455","NL","NLD","NETHERLANDS" -"1054867456","1054943231","DE","DEU","GERMANY" -"1054943232","1054943487","PL","POL","POLAND" -"1054943488","1054949807","DE","DEU","GERMANY" -"1054949808","1054949815","ES","ESP","SPAIN" -"1054949816","1054963255","DE","DEU","GERMANY" -"1054963256","1054963263","ES","ESP","SPAIN" -"1054963264","1054969031","DE","DEU","GERMANY" -"1054969032","1054969039","AT","AUT","AUSTRIA" -"1054969040","1054978815","DE","DEU","GERMANY" -"1054978816","1054979071","FR","FRA","FRANCE" -"1054979072","1055129599","DE","DEU","GERMANY" -"1055129600","1055162367","CY","CYP","CYPRUS" -"1055162368","1055195135","GR","GRC","GREECE" -"1055196160","1055197823","CH","CHE","SWITZERLAND" -"1055197920","1055198463","CH","CHE","SWITZERLAND" -"1055198976","1055199103","CH","CHE","SWITZERLAND" -"1055199360","1055199375","CH","CHE","SWITZERLAND" -"1055199464","1055199487","CH","CHE","SWITZERLAND" -"1055200416","1055200423","PT","PRT","PORTUGAL" -"1055201024","1055201279","US","USA","UNITED STATES" -"1055203328","1055203359","CZ","CZE","CZECH REPUBLIC" -"1055203840","1055204095","CZ","CZE","CZECH REPUBLIC" -"1055204864","1055205375","CZ","CZE","CZECH REPUBLIC" -"1055205632","1055205887","CZ","CZE","CZECH REPUBLIC" -"1055206656","1055207423","CZ","CZE","CZECH REPUBLIC" -"1055207680","1055209471","CZ","CZE","CZECH REPUBLIC" -"1055209728","1055210239","CZ","CZE","CZECH REPUBLIC" -"1055210496","1055210751","SK","SVK","SLOVAKIA" -"1055211264","1055211519","CZ","CZE","CZECH REPUBLIC" -"1055212044","1055212179","PT","PRT","PORTUGAL" -"1055212184","1055212247","PT","PRT","PORTUGAL" -"1055212352","1055212415","PT","PRT","PORTUGAL" -"1055212544","1055212799","PT","PRT","PORTUGAL" -"1055213056","1055213307","PT","PRT","PORTUGAL" -"1055213312","1055213319","PT","PRT","PORTUGAL" -"1055213328","1055213359","PT","PRT","PORTUGAL" -"1055213368","1055213455","PT","PRT","PORTUGAL" -"1055213472","1055213567","PT","PRT","PORTUGAL" -"1055213824","1055214239","PT","PRT","PORTUGAL" -"1055214272","1055214847","PT","PRT","PORTUGAL" -"1055215360","1055215999","PT","PRT","PORTUGAL" -"1055216032","1055216383","PT","PRT","PORTUGAL" -"1055216896","1055217663","PT","PRT","PORTUGAL" -"1055218208","1055218239","PT","PRT","PORTUGAL" -"1055218272","1055218299","PT","PRT","PORTUGAL" -"1055218352","1055218383","PT","PRT","PORTUGAL" -"1055218392","1055218399","PT","PRT","PORTUGAL" -"1055218432","1055218447","PT","PRT","PORTUGAL" -"1055218464","1055218471","PT","PRT","PORTUGAL" -"1055218480","1055219711","PT","PRT","PORTUGAL" -"1055220224","1055220287","NL","NLD","NETHERLANDS" -"1055220352","1055220399","NL","NLD","NETHERLANDS" -"1055221504","1055221631","BE","BEL","BELGIUM" -"1055223040","1055223807","NL","NLD","NETHERLANDS" -"1055223904","1055223999","LU","LUX","LUXEMBOURG" -"1055224064","1055224463","LU","LUX","LUXEMBOURG" -"1055224576","1055224607","LU","LUX","LUXEMBOURG" -"1055224832","1055224911","LU","LUX","LUXEMBOURG" -"1055226112","1055226175","ES","ESP","SPAIN" -"1055226192","1055226207","ES","ESP","SPAIN" -"1055226240","1055226255","ES","ESP","SPAIN" -"1055226264","1055226271","ES","ESP","SPAIN" -"1055226368","1055226399","ES","ESP","SPAIN" -"1055227640","1055227647","PT","PRT","PORTUGAL" -"1055227904","1055228159","TR","TUR","TURKEY" -"1055228928","1055229183","TR","TUR","TURKEY" -"1055232000","1055232255","NL","NLD","NETHERLANDS" -"1055232512","1055233023","NL","NLD","NETHERLANDS" -"1055234064","1055234079","NL","NLD","NETHERLANDS" -"1055234080","1055234127","US","USA","UNITED STATES" -"1055241984","1055242239","GR","GRC","GREECE" -"1055252736","1055252991","ES","ESP","SPAIN" -"1055253056","1055253087","ES","ESP","SPAIN" -"1055256448","1055256463","ES","ESP","SPAIN" -"1055260672","1055326207","SE","SWE","SWEDEN" -"1055326208","1055334399","RU","RUS","RUSSIAN FEDERATION" -"1055334400","1055342591","IE","IRL","IRELAND" -"1055342592","1055358975","RO","ROM","ROMANIA" -"1055358976","1055367167","GB","GBR","UNITED KINGDOM" -"1055367168","1055375359","RU","RUS","RUSSIAN FEDERATION" -"1055375360","1055391743","OM","OMN","OMAN" -"1055391744","1055457279","GB","GBR","UNITED KINGDOM" -"1055457280","1055465471","BE","BEL","BELGIUM" -"1055465472","1055467575","FR","FRA","FRANCE" -"1055467576","1055467579","ES","ESP","SPAIN" -"1055467580","1055469055","FR","FRA","FRANCE" -"1055469056","1055469059","CH","CHE","SWITZERLAND" -"1055469060","1055469063","DE","DEU","GERMANY" -"1055469064","1055469067","IT","ITA","ITALY" -"1055469068","1055469071","BE","BEL","BELGIUM" -"1055469072","1055471615","FR","FRA","FRANCE" -"1055471616","1055472127","BE","BEL","BELGIUM" -"1055472128","1055472159","NL","NLD","NETHERLANDS" -"1055472160","1055472383","FR","FRA","FRANCE" -"1055472384","1055472639","NL","NLD","NETHERLANDS" -"1055472640","1055473663","FR","FRA","FRANCE" -"1055473664","1055490047","GB","GBR","UNITED KINGDOM" -"1055490048","1055522815","PL","POL","POLAND" -"1055522816","1055588351","NL","NLD","NETHERLANDS" -"1055588352","1055653887","BE","BEL","BELGIUM" -"1055653888","1055681055","FI","FIN","FINLAND" -"1055681056","1055681071","SE","SWE","SWEDEN" -"1055681072","1055784959","FI","FIN","FINLAND" -"1055784960","1055850495","NL","NLD","NETHERLANDS" -"1055850496","1055916031","GB","GBR","UNITED KINGDOM" -"1055916032","1055919615","CS","SCG","SERBIA AND MONTENEGRO" -"1055919616","1055919871","RS","SRB","SERBIA" -"1055919872","1055921151","CS","SCG","SERBIA AND MONTENEGRO" -"1055921152","1055921407","RS","SRB","SERBIA" -"1055921408","1055924223","CS","SCG","SERBIA AND MONTENEGRO" -"1055932416","1055940607","FI","FIN","FINLAND" -"1055948800","1055956991","DE","DEU","GERMANY" -"1055956992","1055965183","CZ","CZE","CZECH REPUBLIC" -"1055965184","1055973375","CH","CHE","SWITZERLAND" -"1055973376","1055981567","FR","FRA","FRANCE" -"1055981568","1055989759","IT","ITA","ITALY" -"1055989760","1055992310","DE","DEU","GERMANY" -"1055992311","1055992318","CH","CHE","SWITZERLAND" -"1055992319","1055995135","DE","DEU","GERMANY" -"1055995136","1055995391","NL","NLD","NETHERLANDS" -"1055995392","1055997951","DE","DEU","GERMANY" -"1055997952","1056014335","FR","FRA","FRANCE" -"1056022528","1056030719","GB","GBR","UNITED KINGDOM" -"1056030720","1056047103","FI","FIN","FINLAND" -"1056047104","1056178175","DK","DNK","DENMARK" -"1056178176","1056194559","UA","UKR","UKRAINE" -"1056194560","1056210943","FR","FRA","FRANCE" -"1056210944","1056219135","PL","POL","POLAND" -"1056219136","1056227327","GB","GBR","UNITED KINGDOM" -"1056227328","1056243711","TR","TUR","TURKEY" -"1056243712","1056244447","CH","CHE","SWITZERLAND" -"1056244448","1056244479","MC","MCO","MONACO" -"1056244480","1056251903","CH","CHE","SWITZERLAND" -"1056251904","1056260095","RU","RUS","RUSSIAN FEDERATION" -"1056260096","1056276479","CZ","CZE","CZECH REPUBLIC" -"1056276480","1056374783","DE","DEU","GERMANY" -"1056374784","1056440319","SE","SWE","SWEDEN" -"1056440320","1056473087","TR","TUR","TURKEY" -"1056473088","1056505087","FI","FIN","FINLAND" -"1056505088","1056505107","SE","SWE","SWEDEN" -"1056505108","1056505115","FI","FIN","FINLAND" -"1056505116","1056505119","SE","SWE","SWEDEN" -"1056505120","1056505343","FI","FIN","FINLAND" -"1056505344","1056505599","SE","SWE","SWEDEN" -"1056505600","1056505855","FI","FIN","FINLAND" -"1056505856","1056514047","PT","PRT","PORTUGAL" -"1056514048","1056522239","IT","ITA","ITALY" -"1056522240","1056538623","AT","AUT","AUSTRIA" -"1056538624","1056546815","DE","DEU","GERMANY" -"1056546816","1056555007","NO","NOR","NORWAY" -"1056555008","1056571391","GB","GBR","UNITED KINGDOM" -"1056571392","1056669695","NL","NLD","NETHERLANDS" -"1056702464","1056874559","GB","GBR","UNITED KINGDOM" -"1056874560","1056874567","IE","IRL","IRELAND" -"1056874568","1056874599","GB","GBR","UNITED KINGDOM" -"1056874600","1056874607","IE","IRL","IRELAND" -"1056874608","1056874639","GB","GBR","UNITED KINGDOM" -"1056874640","1056874647","IE","IRL","IRELAND" -"1056874648","1056874655","GB","GBR","UNITED KINGDOM" -"1056874656","1056874679","IE","IRL","IRELAND" -"1056874680","1056874751","GB","GBR","UNITED KINGDOM" -"1056874752","1056874783","IE","IRL","IRELAND" -"1056874784","1056874919","GB","GBR","UNITED KINGDOM" -"1056874920","1056874927","IE","IRL","IRELAND" -"1056874928","1056874991","GB","GBR","UNITED KINGDOM" -"1056874992","1056875007","IE","IRL","IRELAND" -"1056875008","1056875071","GB","GBR","UNITED KINGDOM" -"1056875072","1056875103","IE","IRL","IRELAND" -"1056875104","1056875111","GB","GBR","UNITED KINGDOM" -"1056875112","1056875135","IE","IRL","IRELAND" -"1056875136","1056875151","GB","GBR","UNITED KINGDOM" -"1056875152","1056875167","IE","IRL","IRELAND" -"1056875168","1056875263","GB","GBR","UNITED KINGDOM" -"1056875264","1056875311","IE","IRL","IRELAND" -"1056875312","1056875615","GB","GBR","UNITED KINGDOM" -"1056875616","1056875623","IE","IRL","IRELAND" -"1056875624","1056875639","GB","GBR","UNITED KINGDOM" -"1056875640","1056875671","IE","IRL","IRELAND" -"1056875672","1056876031","GB","GBR","UNITED KINGDOM" -"1056876032","1056876047","IE","IRL","IRELAND" -"1056876048","1056964607","GB","GBR","UNITED KINGDOM" -"1056964608","1061227007","US","USA","UNITED STATES" -"1061227008","1061227263","HT","HTI","HAITI" -"1061227264","1061227519","BO","BOL","BOLIVIA" -"1061227520","1061588735","US","USA","UNITED STATES" -"1061588736","1061588991","GU","GUM","GUAM" -"1061588992","1062069247","US","USA","UNITED STATES" -"1062069248","1062070271","PR","PRI","PUERTO RICO" -"1062070272","1062497791","US","USA","UNITED STATES" -"1062497792","1062498303","FM","FSM","FEDERATED STATES OF MICRONESIA" -"1062498304","1062545919","US","USA","UNITED STATES" -"1062545920","1062546431","BM","BMU","BERMUDA" -"1062546432","1062871551","US","USA","UNITED STATES" -"1062871552","1062872063","PR","PRI","PUERTO RICO" -"1062872064","1063305727","US","USA","UNITED STATES" -"1063305728","1063305983","CA","CAN","CANADA" -"1063305984","1063334911","US","USA","UNITED STATES" -"1063334912","1063335423","CO","COL","COLOMBIA" -"1063335424","1063568895","US","USA","UNITED STATES" -"1063568896","1063569151","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"1063569152","1063573679","US","USA","UNITED STATES" -"1063573680","1063573695","VN","VNM","VIET NAM" -"1063573696","1063727615","US","USA","UNITED STATES" -"1063727616","1063728127","GU","GUM","GUAM" -"1063728128","1063747839","US","USA","UNITED STATES" -"1063747840","1063748095","UG","UGA","UGANDA" -"1063748096","1063748607","US","USA","UNITED STATES" -"1063748608","1063749119","GH","GHA","GHANA" -"1063749120","1063749631","US","USA","UNITED STATES" -"1063749632","1063749887","LR","LBR","LIBERIA" -"1063749888","1063750143","SA","SAU","SAUDI ARABIA" -"1063750144","1063750399","NG","NGA","NIGERIA" -"1063750400","1063750463","US","USA","UNITED STATES" -"1063750464","1063750527","NG","NGA","NIGERIA" -"1063750528","1063750655","US","USA","UNITED STATES" -"1063750656","1063751679","NG","NGA","NIGERIA" -"1063751680","1063895039","US","USA","UNITED STATES" -"1063895040","1063899135","KR","KOR","REPUBLIC OF KOREA" -"1063899136","1064124927","US","USA","UNITED STATES" -"1064124928","1064125695","EC","ECU","ECUADOR" -"1064125696","1064126719","US","USA","UNITED STATES" -"1064126720","1064126975","EC","ECU","ECUADOR" -"1064126976","1064127487","US","USA","UNITED STATES" -"1064127488","1064127999","EC","ECU","ECUADOR" -"1064128000","1064170799","US","USA","UNITED STATES" -"1064170800","1064170807","LB","LBN","LEBANON" -"1064170808","1064170991","US","USA","UNITED STATES" -"1064170992","1064170999","LB","LBN","LEBANON" -"1064171000","1064171007","US","USA","UNITED STATES" -"1064171008","1064171135","LB","LBN","LEBANON" -"1064171136","1064171263","US","USA","UNITED STATES" -"1064171264","1064171551","LB","LBN","LEBANON" -"1064171552","1064171559","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"1064171560","1064171575","US","USA","UNITED STATES" -"1064171576","1064171583","PK","PAK","PAKISTAN" -"1064171584","1064171607","US","USA","UNITED STATES" -"1064171608","1064171615","PK","PAK","PAKISTAN" -"1064171616","1064171631","GH","GHA","GHANA" -"1064171632","1064171855","US","USA","UNITED STATES" -"1064171856","1064171871","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"1064171872","1064171903","US","USA","UNITED STATES" -"1064171904","1064171911","LB","LBN","LEBANON" -"1064171912","1064171919","US","USA","UNITED STATES" -"1064171920","1064171927","PK","PAK","PAKISTAN" -"1064171928","1064171935","US","USA","UNITED STATES" -"1064171936","1064171967","LB","LBN","LEBANON" -"1064171968","1064204287","US","USA","UNITED STATES" -"1064204288","1064205311","MX","MEX","MEXICO" -"1064205312","1064650751","US","USA","UNITED STATES" -"1064650752","1064651775","EC","ECU","ECUADOR" -"1064651776","1065519359","US","USA","UNITED STATES" -"1065519360","1065519487","CA","CAN","CANADA" -"1065519488","1065611263","US","USA","UNITED STATES" -"1065611264","1065615359","PR","PRI","PUERTO RICO" -"1065615360","1065811967","US","USA","UNITED STATES" -"1065811968","1065820159","CA","CAN","CANADA" -"1065820160","1065873407","US","USA","UNITED STATES" -"1065873408","1065877503","PR","PRI","PUERTO RICO" -"1065877504","1065906175","US","USA","UNITED STATES" -"1065906176","1065908223","KY","CYM","CAYMAN ISLANDS" -"1065908224","1065926815","US","USA","UNITED STATES" -"1065926816","1065926823","CA","CAN","CANADA" -"1065926824","1066139647","US","USA","UNITED STATES" -"1066401792","1066584063","US","USA","UNITED STATES" -"1066584064","1066586111","PE","PER","PERU" -"1066586112","1066627335","US","USA","UNITED STATES" -"1066627336","1066627343","CA","CAN","CANADA" -"1066627344","1066718559","US","USA","UNITED STATES" -"1066718560","1066718591","PR","PRI","PUERTO RICO" -"1066718592","1066829311","US","USA","UNITED STATES" -"1066829312","1066829567","HK","HKG","HONG KONG" -"1066829568","1066830207","US","USA","UNITED STATES" -"1066830208","1066830239","SG","SGP","SINGAPORE" -"1066830240","1066830287","US","USA","UNITED STATES" -"1066830288","1066830303","SG","SGP","SINGAPORE" -"1066830304","1066830311","US","USA","UNITED STATES" -"1066830312","1066830319","SG","SGP","SINGAPORE" -"1066830320","1066830335","US","USA","UNITED STATES" -"1066830336","1066830591","SG","SGP","SINGAPORE" -"1066830592","1066830799","US","USA","UNITED STATES" -"1066830800","1066830807","SG","SGP","SINGAPORE" -"1066830808","1066898783","US","USA","UNITED STATES" -"1066898784","1066898815","CO","COL","COLOMBIA" -"1066898816","1067473471","US","USA","UNITED STATES" -"1067473472","1067473535","CA","CAN","CANADA" -"1067473536","1067474751","US","USA","UNITED STATES" -"1067474752","1067474767","NL","NLD","NETHERLANDS" -"1067474768","1067481855","US","USA","UNITED STATES" -"1067481856","1067482111","CA","CAN","CANADA" -"1067482112","1067494847","US","USA","UNITED STATES" -"1067494848","1067494879","CA","CAN","CANADA" -"1067494880","1067503615","US","USA","UNITED STATES" -"1067503616","1067503743","CA","CAN","CANADA" -"1067503744","1067532287","US","USA","UNITED STATES" -"1067532288","1067532799","HN","HND","HONDURAS" -"1067532800","1067537959","US","USA","UNITED STATES" -"1067537960","1067537967","GB","GBR","UNITED KINGDOM" -"1067537968","1067562495","US","USA","UNITED STATES" -"1067562496","1067562751","SL","SLE","SIERRA LEONE" -"1067562752","1067573247","US","USA","UNITED STATES" -"1067573248","1067573255","SG","SGP","SINGAPORE" -"1067573256","1067575295","US","USA","UNITED STATES" -"1067575296","1067577343","HN","HND","HONDURAS" -"1067577344","1067617791","US","USA","UNITED STATES" -"1067617792","1067618047","CN","CHN","CHINA" -"1067618048","1067625967","US","USA","UNITED STATES" -"1067625968","1067625983","CH","CHE","SWITZERLAND" -"1067625984","1067653255","US","USA","UNITED STATES" -"1067653256","1067653263","PR","PRI","PUERTO RICO" -"1067653264","1067693055","US","USA","UNITED STATES" -"1067693056","1067693567","CO","COL","COLOMBIA" -"1067693568","1067726847","US","USA","UNITED STATES" -"1067726848","1067727359","EC","ECU","ECUADOR" -"1067727360","1067740159","US","USA","UNITED STATES" -"1067740160","1067741183","HN","HND","HONDURAS" -"1067741184","1067762815","US","USA","UNITED STATES" -"1067762816","1067762831","CA","CAN","CANADA" -"1067762832","1067780607","US","USA","UNITED STATES" -"1067780608","1067780863","GB","GBR","UNITED KINGDOM" -"1067780864","1067808783","US","USA","UNITED STATES" -"1067808784","1067808799","GB","GBR","UNITED KINGDOM" -"1067808800","1067822863","US","USA","UNITED STATES" -"1067822864","1067822871","CA","CAN","CANADA" -"1067822872","1067824895","US","USA","UNITED STATES" -"1067824896","1067825151","PR","PRI","PUERTO RICO" -"1067825152","1067826239","US","USA","UNITED STATES" -"1067826240","1067826247","CA","CAN","CANADA" -"1067826248","1067908295","US","USA","UNITED STATES" -"1067908296","1067908303","CH","CHE","SWITZERLAND" -"1067908304","1067909023","US","USA","UNITED STATES" -"1067909024","1067909039","SG","SGP","SINGAPORE" -"1067909040","1067918879","US","USA","UNITED STATES" -"1067918880","1067918887","NL","NLD","NETHERLANDS" -"1067918888","1067923231","US","USA","UNITED STATES" -"1067923232","1067923239","CA","CAN","CANADA" -"1067923240","1067977895","US","USA","UNITED STATES" -"1067977896","1067977903","CA","CAN","CANADA" -"1067977904","1067989247","US","USA","UNITED STATES" -"1067989248","1067989503","EC","ECU","ECUADOR" -"1067989504","1067998463","US","USA","UNITED STATES" -"1067998464","1067998719","CO","COL","COLOMBIA" -"1067998720","1068119407","US","USA","UNITED STATES" -"1068119408","1068119423","DE","DEU","GERMANY" -"1068119424","1068167439","US","USA","UNITED STATES" -"1068167440","1068167447","GB","GBR","UNITED KINGDOM" -"1068167448","1068198879","US","USA","UNITED STATES" -"1068198880","1068198911","IN","IND","INDIA" -"1068198912","1068199935","US","USA","UNITED STATES" -"1068199936","1068204031","CA","CAN","CANADA" -"1068204032","1068230655","US","USA","UNITED STATES" -"1068230656","1068230911","CO","COL","COLOMBIA" -"1068230912","1068284735","US","USA","UNITED STATES" -"1068284736","1068284743","CA","CAN","CANADA" -"1068284744","1068326911","US","USA","UNITED STATES" -"1068326912","1068327167","EC","ECU","ECUADOR" -"1068327168","1068362863","US","USA","UNITED STATES" -"1068362864","1068362879","GB","GBR","UNITED KINGDOM" -"1068362880","1068419071","US","USA","UNITED STATES" -"1068419072","1068421119","CO","COL","COLOMBIA" -"1068421120","1068425983","US","USA","UNITED STATES" -"1068425984","1068426239","EC","ECU","ECUADOR" -"1068426240","1068480159","US","USA","UNITED STATES" -"1068480160","1068480191","IN","IND","INDIA" -"1068480192","1068491263","US","USA","UNITED STATES" -"1068491264","1068491519","HN","HND","HONDURAS" -"1068491520","1071472639","US","USA","UNITED STATES" -"1071472640","1071480831","CA","CAN","CANADA" -"1071480832","1071985631","US","USA","UNITED STATES" -"1071985632","1071985663","ML","MLI","MALI" -"1071985664","1072619023","US","USA","UNITED STATES" -"1072619024","1072619039","CA","CAN","CANADA" -"1072619040","1072680623","US","USA","UNITED STATES" -"1072680624","1072680631","CA","CAN","CANADA" -"1072680632","1072922623","US","USA","UNITED STATES" -"1072922624","1072922879","PH","PHL","PHILIPPINES" -"1072922880","1072923391","CA","CAN","CANADA" -"1072923392","1072923903","US","USA","UNITED STATES" -"1072923904","1072924671","CA","CAN","CANADA" -"1072924672","1072925183","US","USA","UNITED STATES" -"1072925184","1072926207","CA","CAN","CANADA" -"1072926208","1072926471","US","USA","UNITED STATES" -"1072926472","1072926527","CA","CAN","CANADA" -"1072926528","1072926591","US","USA","UNITED STATES" -"1072926592","1072926719","CA","CAN","CANADA" -"1072926720","1072926975","PH","PHL","PHILIPPINES" -"1072926976","1072927487","CA","CAN","CANADA" -"1072927488","1072927743","US","USA","UNITED STATES" -"1072927744","1072928047","CA","CAN","CANADA" -"1072928048","1072928063","IE","IRL","IRELAND" -"1072928064","1072928095","US","USA","UNITED STATES" -"1072928096","1072928263","CA","CAN","CANADA" -"1072928264","1072928271","US","USA","UNITED STATES" -"1072928272","1072928383","CA","CAN","CANADA" -"1072928384","1072928447","US","USA","UNITED STATES" -"1072928448","1072929535","CA","CAN","CANADA" -"1072929536","1072929791","US","USA","UNITED STATES" -"1072929792","1072930047","CA","CAN","CANADA" -"1072930048","1072930303","US","USA","UNITED STATES" -"1072930304","1072931071","CA","CAN","CANADA" -"1072931072","1072931199","US","USA","UNITED STATES" -"1072931200","1072932607","CA","CAN","CANADA" -"1072932608","1072932863","NG","NGA","NIGERIA" -"1072932864","1072934399","CA","CAN","CANADA" -"1072934400","1072934655","US","USA","UNITED STATES" -"1072934656","1072934783","CA","CAN","CANADA" -"1072934784","1072934847","AU","AUS","AUSTRALIA" -"1072934848","1072934879","CA","CAN","CANADA" -"1072934880","1072934911","TW","TWN","TAIWAN" -"1072934912","1072934943","CA","CAN","CANADA" -"1072934944","1072934975","PH","PHL","PHILIPPINES" -"1072934976","1072935039","CA","CAN","CANADA" -"1072935040","1072935135","US","USA","UNITED STATES" -"1072935136","1072935159","CA","CAN","CANADA" -"1072935160","1072935167","US","USA","UNITED STATES" -"1072935168","1072935679","CA","CAN","CANADA" -"1072935680","1072935807","PH","PHL","PHILIPPINES" -"1072935808","1072936447","CA","CAN","CANADA" -"1072936448","1072936703","PH","PHL","PHILIPPINES" -"1072936704","1072937215","CA","CAN","CANADA" -"1072937216","1072937471","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1072937472","1072938239","CA","CAN","CANADA" -"1072938240","1072938495","VG","VGB","VIRGIN ISLANDS, BRITISH" -"1072938496","1072939519","CA","CAN","CANADA" -"1072939520","1072940031","US","USA","UNITED STATES" -"1072940032","1072955391","CA","CAN","CANADA" -"1072955392","1073022975","US","USA","UNITED STATES" -"1073022976","1073025791","HN","HND","HONDURAS" -"1073025792","1073026047","NI","NIC","NICARAGUA" -"1073026048","1073026303","US","USA","UNITED STATES" -"1073026304","1073026431","DO","DOM","DOMINICAN REPUBLIC" -"1073026432","1073027071","US","USA","UNITED STATES" -"1073027072","1073028351","NI","NIC","NICARAGUA" -"1073028352","1073028607","US","USA","UNITED STATES" -"1073028608","1073029119","GD","GRD","GRENADA" -"1073029120","1073031167","PR","PRI","PUERTO RICO" -"1073031168","1073031231","US","USA","UNITED STATES" -"1073031232","1073031263","AN","ANT","NETHERLANDS ANTILLES" -"1073031264","1073031423","US","USA","UNITED STATES" -"1073031424","1073031935","AN","ANT","NETHERLANDS ANTILLES" -"1073031936","1073033215","US","USA","UNITED STATES" -"1073033216","1073035263","AN","ANT","NETHERLANDS ANTILLES" -"1073035264","1073036032","GD","GRD","GRENADA" -"1073036033","1073036543","US","USA","UNITED STATES" -"1073036544","1073037055","MX","MEX","MEXICO" -"1073037056","1073037311","AN","ANT","NETHERLANDS ANTILLES" -"1073037312","1073037823","CO","COL","COLOMBIA" -"1073037824","1073038335","GD","GRD","GRENADA" -"1073038336","1073039359","US","USA","UNITED STATES" -"1073039360","1073041407","GT","GTM","GUATEMALA" -"1073041408","1073043455","CO","COL","COLOMBIA" -"1073043456","1073045503","US","USA","UNITED STATES" -"1073045504","1073047551","CO","COL","COLOMBIA" -"1073047552","1073049599","PR","PRI","PUERTO RICO" -"1073049600","1073053695","BS","BHS","BAHAMAS" -"1073053696","1073070079","US","USA","UNITED STATES" -"1073074176","1073373183","US","USA","UNITED STATES" -"1073373184","1073381375","CA","CAN","CANADA" -"1073381376","1073381887","NL","NLD","NETHERLANDS" -"1073381888","1074020351","US","USA","UNITED STATES" -"1074020352","1074028543","CA","CAN","CANADA" -"1074028544","1074098175","US","USA","UNITED STATES" -"1074102272","1074118655","US","USA","UNITED STATES" -"1074118656","1074120703","CA","CAN","CANADA" -"1074120704","1074120719","US","USA","UNITED STATES" -"1074120720","1074120959","CA","CAN","CANADA" -"1074120960","1074121215","US","USA","UNITED STATES" -"1074121216","1074122415","CA","CAN","CANADA" -"1074122416","1074122431","US","USA","UNITED STATES" -"1074122432","1074125055","CA","CAN","CANADA" -"1074125056","1074125311","US","USA","UNITED STATES" -"1074125312","1074126847","CA","CAN","CANADA" -"1074126848","1074127359","US","USA","UNITED STATES" -"1074127360","1074128511","CA","CAN","CANADA" -"1074128512","1074128575","US","USA","UNITED STATES" -"1074128576","1074135039","CA","CAN","CANADA" -"1074135040","1074184191","US","USA","UNITED STATES" -"1074184192","1074188287","CA","CAN","CANADA" -"1074188288","1074229247","US","USA","UNITED STATES" -"1074229248","1074241535","CA","CAN","CANADA" -"1074241536","1074672671","US","USA","UNITED STATES" -"1074672672","1074672703","IN","IND","INDIA" -"1074672704","1074672943","US","USA","UNITED STATES" -"1074672944","1074672959","DK","DNK","DENMARK" -"1074672960","1074673663","US","USA","UNITED STATES" -"1074673664","1074673679","CY","CYP","CYPRUS" -"1074673680","1074675311","US","USA","UNITED STATES" -"1074675312","1074675327","NO","NOR","NORWAY" -"1074675328","1074675679","US","USA","UNITED STATES" -"1074675680","1074675687","GB","GBR","UNITED KINGDOM" -"1074675688","1074680623","US","USA","UNITED STATES" -"1074680624","1074680639","CA","CAN","CANADA" -"1074680640","1074680703","US","USA","UNITED STATES" -"1074680704","1074680719","IL","ISR","ISRAEL" -"1074680720","1074681263","US","USA","UNITED STATES" -"1074681264","1074681279","CA","CAN","CANADA" -"1074681280","1074681343","US","USA","UNITED STATES" -"1074681344","1074681359","CA","CAN","CANADA" -"1074681360","1074682687","US","USA","UNITED STATES" -"1074682688","1074682751","CA","CAN","CANADA" -"1074682752","1074683023","US","USA","UNITED STATES" -"1074683024","1074683039","CA","CAN","CANADA" -"1074683040","1074683807","US","USA","UNITED STATES" -"1074683808","1074683839","CA","CAN","CANADA" -"1074683840","1074690895","US","USA","UNITED STATES" -"1074690896","1074690911","AR","ARG","ARGENTINA" -"1074690912","1074690943","US","USA","UNITED STATES" -"1074690944","1074691007","AR","ARG","ARGENTINA" -"1074691008","1074691135","US","USA","UNITED STATES" -"1074691136","1074691199","AR","ARG","ARGENTINA" -"1074691200","1074701583","US","USA","UNITED STATES" -"1074701584","1074701591","CA","CAN","CANADA" -"1074701592","1074701599","US","USA","UNITED STATES" -"1074701600","1074701631","CA","CAN","CANADA" -"1074701632","1074702783","US","USA","UNITED STATES" -"1074702784","1074702847","CA","CAN","CANADA" -"1074702848","1074703615","US","USA","UNITED STATES" -"1074703616","1074703871","GB","GBR","UNITED KINGDOM" -"1074703872","1074704383","US","USA","UNITED STATES" -"1074704384","1074704639","GB","GBR","UNITED KINGDOM" -"1074704640","1074704703","US","USA","UNITED STATES" -"1074704704","1074704711","CH","CHE","SWITZERLAND" -"1074704712","1074704767","US","USA","UNITED STATES" -"1074704768","1074704831","CH","CHE","SWITZERLAND" -"1074704832","1074705727","US","USA","UNITED STATES" -"1074705728","1074705743","GB","GBR","UNITED KINGDOM" -"1074705744","1074705791","US","USA","UNITED STATES" -"1074705792","1074705799","IL","ISR","ISRAEL" -"1074705800","1074705887","US","USA","UNITED STATES" -"1074705888","1074705903","IL","ISR","ISRAEL" -"1074705904","1074706175","US","USA","UNITED STATES" -"1074706176","1074706303","IL","ISR","ISRAEL" -"1074706304","1074706367","US","USA","UNITED STATES" -"1074706368","1074706431","GB","GBR","UNITED KINGDOM" -"1074706432","1074706679","US","USA","UNITED STATES" -"1074706680","1074706687","GB","GBR","UNITED KINGDOM" -"1074706688","1074707775","US","USA","UNITED STATES" -"1074707776","1074707839","GB","GBR","UNITED KINGDOM" -"1074707840","1074707967","US","USA","UNITED STATES" -"1074707968","1074708223","GB","GBR","UNITED KINGDOM" -"1074708224","1074708991","US","USA","UNITED STATES" -"1074708992","1074709247","PH","PHL","PHILIPPINES" -"1074709248","1074711039","US","USA","UNITED STATES" -"1074711040","1074711055","IN","IND","INDIA" -"1074711056","1074716679","US","USA","UNITED STATES" -"1074716680","1074716687","GB","GBR","UNITED KINGDOM" -"1074716688","1074716719","US","USA","UNITED STATES" -"1074716720","1074716735","GB","GBR","UNITED KINGDOM" -"1074716736","1074733055","US","USA","UNITED STATES" -"1074733056","1074737151","AU","AUS","AUSTRALIA" -"1074737152","1074745343","CA","CAN","CANADA" -"1074745344","1074757631","US","USA","UNITED STATES" -"1074757632","1074765823","CA","CAN","CANADA" -"1074765824","1074777343","US","USA","UNITED STATES" -"1074777344","1074777599","AU","AUS","AUSTRALIA" -"1074777600","1074783167","US","USA","UNITED STATES" -"1074783168","1074783199","CA","CAN","CANADA" -"1074783200","1074783231","BM","BMU","BERMUDA" -"1074783232","1074937855","US","USA","UNITED STATES" -"1074937856","1074946047","CA","CAN","CANADA" -"1074946048","1074962431","US","USA","UNITED STATES" -"1074962432","1074970623","CA","CAN","CANADA" -"1074970624","1075117287","US","USA","UNITED STATES" -"1075117288","1075117311","IN","IND","INDIA" -"1075117312","1075421183","US","USA","UNITED STATES" -"1075421184","1075429375","CA","CAN","CANADA" -"1075429376","1075478527","US","USA","UNITED STATES" -"1075478528","1075494911","CA","CAN","CANADA" -"1075494912","1075558143","US","USA","UNITED STATES" -"1075558144","1075558911","VI","VIR","VIRGIN ISLANDS, U.S." -"1075558912","1075576831","US","USA","UNITED STATES" -"1075576832","1075580927","GB","GBR","UNITED KINGDOM" -"1075580928","1075585023","NO","NOR","NORWAY" -"1075585024","1075593967","US","USA","UNITED STATES" -"1075593968","1075593983","CA","CAN","CANADA" -"1075593984","1075594975","US","USA","UNITED STATES" -"1075594976","1075594991","CA","CAN","CANADA" -"1075594992","1075595343","US","USA","UNITED STATES" -"1075595344","1075595359","CA","CAN","CANADA" -"1075595360","1075596031","US","USA","UNITED STATES" -"1075596032","1075596047","CA","CAN","CANADA" -"1075596048","1075596831","US","USA","UNITED STATES" -"1075596832","1075596847","CA","CAN","CANADA" -"1075596848","1075597023","US","USA","UNITED STATES" -"1075597024","1075597039","CA","CAN","CANADA" -"1075597040","1075597167","US","USA","UNITED STATES" -"1075597168","1075597183","CA","CAN","CANADA" -"1075597184","1075597375","US","USA","UNITED STATES" -"1075597376","1075597407","CA","CAN","CANADA" -"1075597408","1075597439","IL","ISR","ISRAEL" -"1075597440","1075597551","US","USA","UNITED STATES" -"1075597552","1075597599","CA","CAN","CANADA" -"1075597600","1075598367","US","USA","UNITED STATES" -"1075598368","1075598383","CA","CAN","CANADA" -"1075598384","1075598943","US","USA","UNITED STATES" -"1075598944","1075598991","CA","CAN","CANADA" -"1075598992","1075599007","US","USA","UNITED STATES" -"1075599008","1075599039","CA","CAN","CANADA" -"1075599040","1075599471","US","USA","UNITED STATES" -"1075599472","1075599487","IL","ISR","ISRAEL" -"1075599488","1075599967","US","USA","UNITED STATES" -"1075599968","1075599983","IE","IRL","IRELAND" -"1075599984","1075601279","US","USA","UNITED STATES" -"1075601280","1075601295","CA","CAN","CANADA" -"1075601296","1075609599","US","USA","UNITED STATES" -"1075609600","1075613695","TT","TTO","TRINIDAD AND TOBAGO" -"1075613696","1075740671","US","USA","UNITED STATES" -"1075744768","1075773439","US","USA","UNITED STATES" -"1075789824","1075855359","US","USA","UNITED STATES" -"1075855360","1075871743","DO","DOM","DOMINICAN REPUBLIC" -"1075871744","1075970047","US","USA","UNITED STATES" -"1075970048","1075972095","CA","CAN","CANADA" -"1075972096","1075972351","GB","GBR","UNITED KINGDOM" -"1075972352","1075976191","US","USA","UNITED STATES" -"1075976192","1075976447","CA","CAN","CANADA" -"1075976448","1075977983","US","USA","UNITED STATES" -"1075977984","1075978239","CA","CAN","CANADA" -"1075978240","1075983359","US","USA","UNITED STATES" -"1075983360","1075984383","CA","CAN","CANADA" -"1075984384","1075985919","US","USA","UNITED STATES" -"1075985920","1075986431","CA","CAN","CANADA" -"1075986432","1075990271","US","USA","UNITED STATES" -"1075990272","1075990527","CA","CAN","CANADA" -"1075990528","1075995007","US","USA","UNITED STATES" -"1075995008","1075995023","VG","VGB","VIRGIN ISLANDS, BRITISH" -"1075995024","1075996991","US","USA","UNITED STATES" -"1075996992","1075997071","CA","CAN","CANADA" -"1075997072","1075997183","US","USA","UNITED STATES" -"1075997184","1075997439","CA","CAN","CANADA" -"1075997440","1075999999","US","USA","UNITED STATES" -"1076000000","1076000255","CA","CAN","CANADA" -"1076000256","1076000767","US","USA","UNITED STATES" -"1076000768","1076002047","CA","CAN","CANADA" -"1076002048","1076003071","US","USA","UNITED STATES" -"1076003072","1076003327","CA","CAN","CANADA" -"1076003328","1076003519","US","USA","UNITED STATES" -"1076003520","1076003535","CA","CAN","CANADA" -"1076003536","1076003583","US","USA","UNITED STATES" -"1076003584","1076004351","CA","CAN","CANADA" -"1076004352","1076004863","US","USA","UNITED STATES" -"1076004864","1076005119","CA","CAN","CANADA" -"1076005120","1076005375","US","USA","UNITED STATES" -"1076005376","1076005631","CA","CAN","CANADA" -"1076005632","1076006399","US","USA","UNITED STATES" -"1076006400","1076006655","CA","CAN","CANADA" -"1076006656","1076006911","US","USA","UNITED STATES" -"1076006912","1076007167","CA","CAN","CANADA" -"1076007168","1076007423","US","USA","UNITED STATES" -"1076007424","1076007679","CA","CAN","CANADA" -"1076007680","1076007935","US","USA","UNITED STATES" -"1076007936","1076008191","CA","CAN","CANADA" -"1076008192","1076008447","US","USA","UNITED STATES" -"1076008448","1076009215","CA","CAN","CANADA" -"1076009216","1076009727","US","USA","UNITED STATES" -"1076009728","1076010495","CA","CAN","CANADA" -"1076010496","1076026623","US","USA","UNITED STATES" -"1076026624","1076026879","CA","CAN","CANADA" -"1076026880","1076028159","US","USA","UNITED STATES" -"1076028160","1076028415","CA","CAN","CANADA" -"1076028416","1076028927","US","USA","UNITED STATES" -"1076028928","1076029183","BZ","BLZ","BELIZE" -"1076029184","1076029439","US","USA","UNITED STATES" -"1076029440","1076029951","CA","CAN","CANADA" -"1076029952","1076030783","US","USA","UNITED STATES" -"1076030784","1076030847","CA","CAN","CANADA" -"1076030848","1076030975","US","USA","UNITED STATES" -"1076030976","1076031487","CA","CAN","CANADA" -"1076031488","1076031743","US","USA","UNITED STATES" -"1076031744","1076031999","CA","CAN","CANADA" -"1076032000","1076166655","US","USA","UNITED STATES" -"1076183040","1076281695","US","USA","UNITED STATES" -"1076281696","1076281727","TH","THA","THAILAND" -"1076281728","1076282111","US","USA","UNITED STATES" -"1076282112","1076282143","AU","AUS","AUSTRALIA" -"1076282144","1076282351","US","USA","UNITED STATES" -"1076282352","1076282367","CA","CAN","CANADA" -"1076282368","1076283903","US","USA","UNITED STATES" -"1076283904","1076284159","NO","NOR","NORWAY" -"1076284160","1076284679","US","USA","UNITED STATES" -"1076284680","1076284687","HU","HUN","HUNGARY" -"1076284688","1076285439","US","USA","UNITED STATES" -"1076285440","1076285455","DK","DNK","DENMARK" -"1076285456","1076291903","US","USA","UNITED STATES" -"1076291904","1076291919","UA","UKR","UKRAINE" -"1076291920","1076292559","US","USA","UNITED STATES" -"1076292560","1076292567","NL","NLD","NETHERLANDS" -"1076292568","1076294655","US","USA","UNITED STATES" -"1076294656","1076294687","CY","CYP","CYPRUS" -"1076294688","1076294703","US","USA","UNITED STATES" -"1076294704","1076294719","NO","NOR","NORWAY" -"1076294720","1076295071","US","USA","UNITED STATES" -"1076295072","1076295087","NL","NLD","NETHERLANDS" -"1076295088","1076295167","US","USA","UNITED STATES" -"1076295168","1076295199","CY","CYP","CYPRUS" -"1076295200","1076306463","US","USA","UNITED STATES" -"1076306464","1076306479","GB","GBR","UNITED KINGDOM" -"1076306480","1076306511","US","USA","UNITED STATES" -"1076306512","1076306527","AE","ARE","UNITED ARAB EMIRATES" -"1076306528","1076307495","US","USA","UNITED STATES" -"1076307496","1076307503","DE","DEU","GERMANY" -"1076307504","1076307519","US","USA","UNITED STATES" -"1076307520","1076307535","DE","DEU","GERMANY" -"1076307536","1076307743","US","USA","UNITED STATES" -"1076307744","1076307807","DE","DEU","GERMANY" -"1076307808","1076307967","US","USA","UNITED STATES" -"1076307968","1076308223","DE","DEU","GERMANY" -"1076308224","1076308495","US","USA","UNITED STATES" -"1076308496","1076308511","AE","ARE","UNITED ARAB EMIRATES" -"1076308512","1076308575","US","USA","UNITED STATES" -"1076308576","1076308591","IL","ISR","ISRAEL" -"1076308592","1076308671","US","USA","UNITED STATES" -"1076308672","1076308687","DE","DEU","GERMANY" -"1076308688","1076308991","US","USA","UNITED STATES" -"1076308992","1076309007","IE","IRL","IRELAND" -"1076309008","1076309119","US","USA","UNITED STATES" -"1076309120","1076309135","IE","IRL","IRELAND" -"1076309136","1076309151","US","USA","UNITED STATES" -"1076309152","1076309183","DE","DEU","GERMANY" -"1076309184","1076309967","US","USA","UNITED STATES" -"1076309968","1076309983","DE","DEU","GERMANY" -"1076309984","1076310015","US","USA","UNITED STATES" -"1076310016","1076310271","DE","DEU","GERMANY" -"1076310272","1076310303","AE","ARE","UNITED ARAB EMIRATES" -"1076310304","1076310367","US","USA","UNITED STATES" -"1076310368","1076310383","IE","IRL","IRELAND" -"1076310384","1076310399","US","USA","UNITED STATES" -"1076310400","1076310431","AE","ARE","UNITED ARAB EMIRATES" -"1076310432","1076310463","AU","AUS","AUSTRALIA" -"1076310464","1076310527","IL","ISR","ISRAEL" -"1076310528","1076338687","US","USA","UNITED STATES" -"1076338688","1076346879","CA","CAN","CANADA" -"1076346880","1076387839","US","USA","UNITED STATES" -"1076387840","1076393727","CA","CAN","CANADA" -"1076393728","1076394239","US","USA","UNITED STATES" -"1076394240","1076396031","CA","CAN","CANADA" -"1076396032","1076408319","US","USA","UNITED STATES" -"1076408320","1076412415","CA","CAN","CANADA" -"1076412416","1076424703","US","USA","UNITED STATES" -"1076424704","1076428799","CA","CAN","CANADA" -"1076428800","1076493311","US","USA","UNITED STATES" -"1076493312","1076493375","IN","IND","INDIA" -"1076493376","1076543487","US","USA","UNITED STATES" -"1076543488","1076559871","CA","CAN","CANADA" -"1076559872","1076628991","US","USA","UNITED STATES" -"1076628992","1076629247","VI","VIR","VIRGIN ISLANDS, U.S." -"1076629248","1076756479","US","USA","UNITED STATES" -"1076756480","1076772863","CA","CAN","CANADA" -"1076772864","1076850687","US","USA","UNITED STATES" -"1076850688","1076850943","CA","CAN","CANADA" -"1076850944","1077055487","US","USA","UNITED STATES" -"1077055488","1077059583","CA","CAN","CANADA" -"1077059584","1077444607","US","USA","UNITED STATES" -"1077444608","1077452799","CA","CAN","CANADA" -"1077452800","1077460991","JP","JPN","JAPAN" -"1077460992","1077469183","US","USA","UNITED STATES" -"1077469184","1077477375","CA","CAN","CANADA" -"1077477376","1077506047","US","USA","UNITED STATES" -"1077510144","1077561327","US","USA","UNITED STATES" -"1077561328","1077561343","AR","ARG","ARGENTINA" -"1077561344","1077565503","US","USA","UNITED STATES" -"1077565504","1077565567","AR","ARG","ARGENTINA" -"1077565568","1077592063","US","USA","UNITED STATES" -"1077600256","1077641215","US","USA","UNITED STATES" -"1077641216","1077657599","CA","CAN","CANADA" -"1077657600","1077936127","US","USA","UNITED STATES" -"1078001664","1078067199","US","USA","UNITED STATES" -"1078067200","1078071295","BS","BHS","BAHAMAS" -"1078071296","1078075391","CA","CAN","CANADA" -"1078075392","1078124543","US","USA","UNITED STATES" -"1078124544","1078128639","CA","CAN","CANADA" -"1078128640","1078202367","US","USA","UNITED STATES" -"1078206464","1078247423","US","USA","UNITED STATES" -"1078247424","1078251519","CA","CAN","CANADA" -"1078251520","1078282751","US","USA","UNITED STATES" -"1078282752","1078283007","CA","CAN","CANADA" -"1078283008","1078283015","US","USA","UNITED STATES" -"1078283016","1078283023","VG","VGB","VIRGIN ISLANDS, BRITISH" -"1078283024","1078283423","US","USA","UNITED STATES" -"1078283424","1078283439","CA","CAN","CANADA" -"1078283440","1078283999","US","USA","UNITED STATES" -"1078284000","1078284031","CA","CAN","CANADA" -"1078284032","1078284367","US","USA","UNITED STATES" -"1078284368","1078284383","VG","VGB","VIRGIN ISLANDS, BRITISH" -"1078284384","1078287871","US","USA","UNITED STATES" -"1078287872","1078288383","CA","CAN","CANADA" -"1078288384","1078336447","US","USA","UNITED STATES" -"1078336448","1078336455","HK","HKG","HONG KONG" -"1078336456","1078336463","US","USA","UNITED STATES" -"1078336464","1078336479","HK","HKG","HONG KONG" -"1078336480","1078341807","US","USA","UNITED STATES" -"1078341808","1078341823","PH","PHL","PHILIPPINES" -"1078341824","1078349311","US","USA","UNITED STATES" -"1078349312","1078349823","PH","PHL","PHILIPPINES" -"1078349824","1078413311","US","USA","UNITED STATES" -"1078419456","1078456319","US","USA","UNITED STATES" -"1078456320","1078460415","CA","CAN","CANADA" -"1078460416","1078517759","US","USA","UNITED STATES" -"1078517760","1078525951","CA","CAN","CANADA" -"1078525952","1078660799","US","USA","UNITED STATES" -"1078660800","1078660831","CN","CHN","CHINA" -"1078660832","1078661807","US","USA","UNITED STATES" -"1078661808","1078661823","IN","IND","INDIA" -"1078661824","1078722559","US","USA","UNITED STATES" -"1078722560","1078734847","AR","ARG","ARGENTINA" -"1078734848","1078737919","CO","COL","COLOMBIA" -"1078737920","1078738943","EC","ECU","ECUADOR" -"1078738944","1078739455","VE","VEN","VENEZUELA" -"1078739456","1078739967","US","USA","UNITED STATES" -"1078739968","1078743039","PE","PER","PERU" -"1078743040","1078746111","CO","COL","COLOMBIA" -"1078746112","1078747135","PE","PER","PERU" -"1078747136","1078749183","CL","CHL","CHILE" -"1078749184","1078750231","PE","PER","PERU" -"1078750232","1078750239","CA","CAN","CANADA" -"1078750240","1078751231","PE","PER","PERU" -"1078751232","1078753279","CO","COL","COLOMBIA" -"1078753280","1078755327","AR","ARG","ARGENTINA" -"1078755328","1078757375","PE","PER","PERU" -"1078757376","1078767615","CL","CHL","CHILE" -"1078767616","1078768639","CO","COL","COLOMBIA" -"1078768640","1078769663","CL","CHL","CHILE" -"1078769664","1078771711","CO","COL","COLOMBIA" -"1078771712","1078773759","EC","ECU","ECUADOR" -"1078773760","1078775807","PE","PER","PERU" -"1078775808","1078777855","CO","COL","COLOMBIA" -"1078777856","1078780927","EC","ECU","ECUADOR" -"1078780928","1078895103","US","USA","UNITED STATES" -"1078895104","1078895359","CN","CHN","CHINA" -"1078895360","1078895967","US","USA","UNITED STATES" -"1078895968","1078895983","CN","CHN","CHINA" -"1078895984","1078931455","US","USA","UNITED STATES" -"1078935552","1079148543","US","USA","UNITED STATES" -"1079164928","1079320575","US","USA","UNITED STATES" -"1079320576","1079328767","CA","CAN","CANADA" -"1079328768","1079329919","US","USA","UNITED STATES" -"1079329920","1079329951","CA","CAN","CANADA" -"1079329952","1079377919","US","USA","UNITED STATES" -"1079377920","1079378943","CA","CAN","CANADA" -"1079378944","1079379711","US","USA","UNITED STATES" -"1079379712","1079380927","CA","CAN","CANADA" -"1079380928","1079380991","US","USA","UNITED STATES" -"1079380992","1079381567","CA","CAN","CANADA" -"1079381568","1079381599","US","USA","UNITED STATES" -"1079381600","1079381631","WS","WSM","SAMOA" -"1079381632","1079382527","CA","CAN","CANADA" -"1079382528","1079383039","US","USA","UNITED STATES" -"1079383040","1079383295","VG","VGB","VIRGIN ISLANDS, BRITISH" -"1079383296","1079383807","US","USA","UNITED STATES" -"1079383808","1079384063","MH","MHL","MARSHALL ISLANDS" -"1079384064","1079384575","CA","CAN","CANADA" -"1079384576","1079385087","ZW","ZWE","ZIMBABWE" -"1079385088","1079385471","CA","CAN","CANADA" -"1079385472","1079385599","US","USA","UNITED STATES" -"1079385600","1079385855","CA","CAN","CANADA" -"1079385856","1079386111","SZ","SWZ","SWAZILAND" -"1079386112","1079386623","CA","CAN","CANADA" -"1079386624","1079386879","SG","SGP","SINGAPORE" -"1079386880","1079387135","EG","EGY","EGYPT" -"1079387136","1079387391","US","USA","UNITED STATES" -"1079387392","1079387647","CA","CAN","CANADA" -"1079387648","1079387903","US","USA","UNITED STATES" -"1079387904","1079388159","PH","PHL","PHILIPPINES" -"1079388160","1079389439","CA","CAN","CANADA" -"1079389440","1079389567","US","USA","UNITED STATES" -"1079389568","1079389695","CA","CAN","CANADA" -"1079389696","1079389951","US","USA","UNITED STATES" -"1079389952","1079390719","CA","CAN","CANADA" -"1079390720","1079390975","US","USA","UNITED STATES" -"1079390976","1079391231","CA","CAN","CANADA" -"1079391232","1079391487","GB","GBR","UNITED KINGDOM" -"1079391488","1079394063","CA","CAN","CANADA" -"1079394064","1079394071","SG","SGP","SINGAPORE" -"1079394072","1079394079","CA","CAN","CANADA" -"1079394080","1079394111","US","USA","UNITED STATES" -"1079394112","1079394143","AF","AFG","AFGHANISTAN" -"1079394144","1079394175","CA","CAN","CANADA" -"1079394176","1079394207","US","USA","UNITED STATES" -"1079394208","1079394239","CA","CAN","CANADA" -"1079394240","1079394303","US","USA","UNITED STATES" -"1079394304","1079396351","CA","CAN","CANADA" -"1079396352","1079397375","MP","MNP","NORTHERN MARIANA ISLANDS" -"1079397376","1079397631","MH","MHL","MARSHALL ISLANDS" -"1079397632","1079399583","CA","CAN","CANADA" -"1079399584","1079399599","US","USA","UNITED STATES" -"1079399600","1079400447","CA","CAN","CANADA" -"1079400448","1079400511","FR","FRA","FRANCE" -"1079400512","1079400575","CA","CAN","CANADA" -"1079400576","1079400639","US","USA","UNITED STATES" -"1079400640","1079400767","CA","CAN","CANADA" -"1079400768","1079400831","US","USA","UNITED STATES" -"1079400832","1079401215","CA","CAN","CANADA" -"1079401216","1079401471","US","USA","UNITED STATES" -"1079401472","1079403775","CA","CAN","CANADA" -"1079403776","1079403807","US","USA","UNITED STATES" -"1079403808","1079403903","CA","CAN","CANADA" -"1079403904","1079403935","US","USA","UNITED STATES" -"1079403936","1079403999","CA","CAN","CANADA" -"1079404000","1079404031","US","USA","UNITED STATES" -"1079404032","1079404543","CA","CAN","CANADA" -"1079404544","1079404799","US","USA","UNITED STATES" -"1079404800","1079405023","CA","CAN","CANADA" -"1079405024","1079405119","US","USA","UNITED STATES" -"1079405120","1079405407","CA","CAN","CANADA" -"1079405408","1079405439","BD","BGD","BANGLADESH" -"1079405440","1079405567","US","USA","UNITED STATES" -"1079405568","1079407103","CA","CAN","CANADA" -"1079407104","1079407359","US","USA","UNITED STATES" -"1079407360","1079407615","CA","CAN","CANADA" -"1079407616","1079408127","US","USA","UNITED STATES" -"1079408128","1079408383","CA","CAN","CANADA" -"1079408384","1079408415","SA","SAU","SAUDI ARABIA" -"1079408416","1079408447","US","USA","UNITED STATES" -"1079408448","1079408639","CA","CAN","CANADA" -"1079408640","1079408895","US","USA","UNITED STATES" -"1079408896","1079409407","PK","PAK","PAKISTAN" -"1079409408","1079410687","CA","CAN","CANADA" -"1079410688","1079410943","US","USA","UNITED STATES" -"1079410944","1079411199","CA","CAN","CANADA" -"1079411200","1079411455","US","USA","UNITED STATES" -"1079411456","1079411711","PK","PAK","PAKISTAN" -"1079411712","1079413311","CA","CAN","CANADA" -"1079413312","1079413343","US","USA","UNITED STATES" -"1079413344","1079414783","CA","CAN","CANADA" -"1079414784","1079415039","US","USA","UNITED STATES" -"1079415040","1079415807","CA","CAN","CANADA" -"1079415808","1079416319","US","USA","UNITED STATES" -"1079416320","1079421951","CA","CAN","CANADA" -"1079421952","1079422207","US","USA","UNITED STATES" -"1079422208","1079425023","CA","CAN","CANADA" -"1079425024","1079425279","US","USA","UNITED STATES" -"1079425280","1079425535","CA","CAN","CANADA" -"1079425536","1079425551","ZA","ZAF","SOUTH AFRICA" -"1079425552","1079433215","CA","CAN","CANADA" -"1079433216","1079435263","CR","CRI","COSTA RICA" -"1079435264","1079437311","CA","CAN","CANADA" -"1079437312","1079439359","US","USA","UNITED STATES" -"1079439360","1079443199","CA","CAN","CANADA" -"1079443200","1079443231","PW","PLW","PALAU" -"1079443232","1079443327","CA","CAN","CANADA" -"1079443328","1079443455","AU","AUS","AUSTRALIA" -"1079443456","1079459839","US","USA","UNITED STATES" -"1079459840","1079508991","CA","CAN","CANADA" -"1079508992","1079566847","US","USA","UNITED STATES" -"1079566848","1079567103","GB","GBR","UNITED KINGDOM" -"1079567104","1079567359","US","USA","UNITED STATES" -"1079567360","1079567615","AU","AUS","AUSTRALIA" -"1079567616","1079574527","US","USA","UNITED STATES" -"1079574528","1079578623","PR","PRI","PUERTO RICO" -"1079578624","1079585391","US","USA","UNITED STATES" -"1079585392","1079585407","IN","IND","INDIA" -"1079585408","1079623679","US","USA","UNITED STATES" -"1079627776","1079664639","US","USA","UNITED STATES" -"1079664640","1079668735","CA","CAN","CANADA" -"1079668736","1079861247","US","USA","UNITED STATES" -"1079861248","1079865343","CA","CAN","CANADA" -"1079865344","1080033279","US","USA","UNITED STATES" -"1080033280","1080295423","CA","CAN","CANADA" -"1080295424","1080950783","US","USA","UNITED STATES" -"1080957952","1080983551","US","USA","UNITED STATES" -"1080986624","1080999935","US","USA","UNITED STATES" -"1080999936","1081016319","CA","CAN","CANADA" -"1081016320","1081085951","US","USA","UNITED STATES" -"1081085952","1081086207","VI","VIR","VIRGIN ISLANDS, U.S." -"1081086208","1081122559","US","USA","UNITED STATES" -"1081122560","1081122815","VI","VIR","VIRGIN ISLANDS, U.S." -"1081122816","1081212927","US","USA","UNITED STATES" -"1081212928","1081278463","CA","CAN","CANADA" -"1081278464","1081377983","US","USA","UNITED STATES" -"1081377984","1081377999","VE","VEN","VENEZUELA" -"1081378000","1081379327","US","USA","UNITED STATES" -"1081379328","1081379839","VE","VEN","VENEZUELA" -"1081379840","1081385215","US","USA","UNITED STATES" -"1081385216","1081385471","PA","PAN","PANAMA" -"1081385472","1081387519","US","USA","UNITED STATES" -"1081387520","1081388031","PA","PAN","PANAMA" -"1081388032","1081391103","US","USA","UNITED STATES" -"1081391104","1081393151","PA","PAN","PANAMA" -"1081393152","1081393775","US","USA","UNITED STATES" -"1081393776","1081393783","CL","CHL","CHILE" -"1081393784","1081394175","US","USA","UNITED STATES" -"1081394176","1081397247","CL","CHL","CHILE" -"1081397248","1081397759","US","USA","UNITED STATES" -"1081397760","1081398783","CL","CHL","CHILE" -"1081398784","1081399295","US","USA","UNITED STATES" -"1081399296","1081401343","CL","CHL","CHILE" -"1081401344","1081401415","US","USA","UNITED STATES" -"1081401416","1081401423","AR","ARG","ARGENTINA" -"1081401424","1081401855","US","USA","UNITED STATES" -"1081401856","1081402367","AR","ARG","ARGENTINA" -"1081402368","1081403615","US","USA","UNITED STATES" -"1081403616","1081403631","AR","ARG","ARGENTINA" -"1081403632","1081409791","US","USA","UNITED STATES" -"1081409792","1081410047","PR","PRI","PUERTO RICO" -"1081410048","1081410559","US","USA","UNITED STATES" -"1081410560","1081411583","PR","PRI","PUERTO RICO" -"1081411584","1081413423","US","USA","UNITED STATES" -"1081413424","1081413439","PR","PRI","PUERTO RICO" -"1081413440","1081416191","US","USA","UNITED STATES" -"1081416192","1081416447","PR","PRI","PUERTO RICO" -"1081416448","1081420319","US","USA","UNITED STATES" -"1081420320","1081420351","PR","PRI","PUERTO RICO" -"1081420352","1081443327","US","USA","UNITED STATES" -"1081443328","1081444351","CL","CHL","CHILE" -"1081444352","1081445375","US","USA","UNITED STATES" -"1081445376","1081446399","CL","CHL","CHILE" -"1081446400","1081460735","US","USA","UNITED STATES" -"1081460736","1081462783","PA","PAN","PANAMA" -"1081462784","1081462815","CO","COL","COLOMBIA" -"1081462816","1081462911","BR","BRA","BRAZIL" -"1081462912","1081479167","US","USA","UNITED STATES" -"1081479168","1081483263","CA","CAN","CANADA" -"1081483264","1081565183","US","USA","UNITED STATES" -"1081565184","1081573375","CA","CAN","CANADA" -"1081573376","1081589759","US","USA","UNITED STATES" -"1081589760","1081593855","BB","BRB","BARBADOS" -"1081593856","1081597951","CA","CAN","CANADA" -"1081597952","1081609823","US","USA","UNITED STATES" -"1081609824","1081609831","LK","LKA","SRI LANKA" -"1081609832","1081609887","US","USA","UNITED STATES" -"1081609888","1081609919","IN","IND","INDIA" -"1081609920","1081611415","US","USA","UNITED STATES" -"1081611416","1081611423","IN","IND","INDIA" -"1081611424","1081611511","US","USA","UNITED STATES" -"1081611512","1081611519","IN","IND","INDIA" -"1081611520","1081611815","US","USA","UNITED STATES" -"1081611816","1081611823","IN","IND","INDIA" -"1081611824","1081611831","US","USA","UNITED STATES" -"1081611832","1081611839","IN","IND","INDIA" -"1081611840","1081611847","US","USA","UNITED STATES" -"1081611848","1081611855","IN","IND","INDIA" -"1081611856","1081611903","US","USA","UNITED STATES" -"1081611904","1081611911","IN","IND","INDIA" -"1081611912","1081611919","US","USA","UNITED STATES" -"1081611920","1081611927","IN","IND","INDIA" -"1081611928","1081611935","LK","LKA","SRI LANKA" -"1081611936","1081611943","IN","IND","INDIA" -"1081611944","1081612015","US","USA","UNITED STATES" -"1081612016","1081612023","IN","IND","INDIA" -"1081612024","1081612159","US","USA","UNITED STATES" -"1081612160","1081612191","IN","IND","INDIA" -"1081612192","1081612663","US","USA","UNITED STATES" -"1081612664","1081612671","IN","IND","INDIA" -"1081612672","1081618951","US","USA","UNITED STATES" -"1081618952","1081618959","GB","GBR","UNITED KINGDOM" -"1081618960","1081639423","US","USA","UNITED STATES" -"1081639424","1081639679","DE","DEU","GERMANY" -"1081639680","1082314751","US","USA","UNITED STATES" -"1082314752","1082315263","CA","CAN","CANADA" -"1082315264","1082315471","US","USA","UNITED STATES" -"1082315472","1082318847","CA","CAN","CANADA" -"1082318848","1082434239","US","USA","UNITED STATES" -"1082434240","1082434255","IN","IND","INDIA" -"1082434256","1082683391","US","USA","UNITED STATES" -"1082683392","1082687487","CA","CAN","CANADA" -"1082687488","1082945535","US","USA","UNITED STATES" -"1082945536","1082949631","CA","CAN","CANADA" -"1082949632","1082982399","US","USA","UNITED STATES" -"1082982400","1083015167","CA","CAN","CANADA" -"1083015168","1083396095","US","USA","UNITED STATES" -"1083396096","1083400191","BM","BMU","BERMUDA" -"1083400192","1083437055","US","USA","UNITED STATES" -"1083437056","1083441151","CA","CAN","CANADA" -"1083441152","1083621375","US","USA","UNITED STATES" -"1083621376","1083637759","BS","BHS","BAHAMAS" -"1083637760","1083686911","US","USA","UNITED STATES" -"1083686912","1083703295","CA","CAN","CANADA" -"1083703296","1083738367","US","USA","UNITED STATES" -"1083738368","1083738879","PR","PRI","PUERTO RICO" -"1083738880","1084067583","US","USA","UNITED STATES" -"1084067584","1084067839","CA","CAN","CANADA" -"1084067840","1085439999","US","USA","UNITED STATES" -"1085440000","1085448191","CA","CAN","CANADA" -"1085448192","1085456383","US","USA","UNITED STATES" -"1085456384","1085464575","PR","PRI","PUERTO RICO" -"1085464576","1085526015","US","USA","UNITED STATES" -"1085526016","1085530111","CA","CAN","CANADA" -"1085530112","1085538303","US","USA","UNITED STATES" -"1085538304","1085603839","CA","CAN","CANADA" -"1085603840","1085849599","US","USA","UNITED STATES" -"1085849600","1085857791","CA","CAN","CANADA" -"1085857792","1085915135","US","USA","UNITED STATES" -"1085915136","1085923327","PR","PRI","PUERTO RICO" -"1085923328","1085927423","US","USA","UNITED STATES" -"1085931520","1085997055","US","USA","UNITED STATES" -"1085997056","1086013439","CA","CAN","CANADA" -"1086013440","1086022079","US","USA","UNITED STATES" -"1086022080","1086022111","CA","CAN","CANADA" -"1086022112","1086022175","US","USA","UNITED STATES" -"1086022176","1086022207","CA","CAN","CANADA" -"1086022208","1086022303","US","USA","UNITED STATES" -"1086022304","1086022367","CA","CAN","CANADA" -"1086022368","1086022591","US","USA","UNITED STATES" -"1086022592","1086022655","CA","CAN","CANADA" -"1086022656","1086025247","US","USA","UNITED STATES" -"1086025248","1086025279","CA","CAN","CANADA" -"1086025280","1086070783","US","USA","UNITED STATES" -"1086095360","1086358143","US","USA","UNITED STATES" -"1086358144","1086358271","PA","PAN","PANAMA" -"1086358272","1086359231","US","USA","UNITED STATES" -"1086359232","1086359295","IL","ISR","ISRAEL" -"1086359296","1086421503","US","USA","UNITED STATES" -"1086421504","1086422015","MP","MNP","NORTHERN MARIANA ISLANDS" -"1086422016","1086476543","US","USA","UNITED STATES" -"1086476544","1086476607","BM","BMU","BERMUDA" -"1086476608","1086922751","US","USA","UNITED STATES" -"1086922752","1086930943","CA","CAN","CANADA" -"1086930944","1086955519","US","USA","UNITED STATES" -"1086955520","1086971903","CA","CAN","CANADA" -"1086971904","1087008767","US","USA","UNITED STATES" -"1087008768","1087009279","CY","CYP","CYPRUS" -"1087009280","1087016959","US","USA","UNITED STATES" -"1087016960","1087021055","CA","CAN","CANADA" -"1087021056","1087419903","US","USA","UNITED STATES" -"1087419904","1087420159","CA","CAN","CANADA" -"1087420160","1087440895","US","USA","UNITED STATES" -"1087440896","1087442943","PR","PRI","PUERTO RICO" -"1087442944","1087444223","US","USA","UNITED STATES" -"1087444224","1087444479","CY","CYP","CYPRUS" -"1087444480","1087495519","US","USA","UNITED STATES" -"1087495520","1087495535","TW","TWN","TAIWAN" -"1087495536","1087496703","US","USA","UNITED STATES" -"1087496704","1087496959","CA","CAN","CANADA" -"1087496960","1087497855","US","USA","UNITED STATES" -"1087497856","1087497887","CA","CAN","CANADA" -"1087497888","1087554751","US","USA","UNITED STATES" -"1087554752","1087554759","IL","ISR","ISRAEL" -"1087554760","1087557631","US","USA","UNITED STATES" -"1087557632","1087557887","NO","NOR","NORWAY" -"1087557888","1087686655","US","USA","UNITED STATES" -"1087686656","1087686911","PR","PRI","PUERTO RICO" -"1087686912","1087715327","US","USA","UNITED STATES" -"1087715328","1087717375","PA","PAN","PANAMA" -"1087717376","1087758335","US","USA","UNITED STATES" -"1087758336","1087766527","PR","PRI","PUERTO RICO" -"1087766528","1087862783","US","USA","UNITED STATES" -"1087862784","1087864831","PA","PAN","PANAMA" -"1087864832","1088684031","US","USA","UNITED STATES" -"1088684032","1088946175","CA","CAN","CANADA" -"1088946176","1089154915","US","USA","UNITED STATES" -"1089154916","1089154932","AU","AUS","AUSTRALIA" -"1089154933","1089167359","US","USA","UNITED STATES" -"1089167360","1089171455","CA","CAN","CANADA" -"1089171456","1089191935","US","USA","UNITED STATES" -"1089191936","1089200127","CA","CAN","CANADA" -"1089200128","1089306623","US","USA","UNITED STATES" -"1089306624","1089339391","PR","PRI","PUERTO RICO" -"1089339392","1089482927","US","USA","UNITED STATES" -"1089482928","1089482935","CA","CAN","CANADA" -"1089482936","1089488463","US","USA","UNITED STATES" -"1089488464","1089488479","JP","JPN","JAPAN" -"1089488480","1089493631","US","USA","UNITED STATES" -"1089493632","1089493647","CA","CAN","CANADA" -"1089493648","1089503871","US","USA","UNITED STATES" -"1089503872","1089503879","CA","CAN","CANADA" -"1089503880","1089507159","US","USA","UNITED STATES" -"1089507160","1089507167","CA","CAN","CANADA" -"1089507168","1089526783","US","USA","UNITED STATES" -"1089526784","1089527039","VE","VEN","VENEZUELA" -"1089527040","1089552383","US","USA","UNITED STATES" -"1089552384","1089552391","AU","AUS","AUSTRALIA" -"1089552392","1089557551","US","USA","UNITED STATES" -"1089557552","1089557559","CA","CAN","CANADA" -"1089557560","1089576623","US","USA","UNITED STATES" -"1089576624","1089576631","CA","CAN","CANADA" -"1089576632","1089579215","US","USA","UNITED STATES" -"1089579216","1089579223","VI","VIR","VIRGIN ISLANDS, U.S." -"1089579224","1089579519","US","USA","UNITED STATES" -"1089579520","1089580031","VE","VEN","VENEZUELA" -"1089580032","1089581287","US","USA","UNITED STATES" -"1089581288","1089581295","CA","CAN","CANADA" -"1089581296","1089585919","US","USA","UNITED STATES" -"1089585920","1089585951","CA","CAN","CANADA" -"1089585952","1089587999","US","USA","UNITED STATES" -"1089588000","1089588015","IN","IND","INDIA" -"1089588016","1089593615","US","USA","UNITED STATES" -"1089593616","1089593623","CA","CAN","CANADA" -"1089593624","1089631055","US","USA","UNITED STATES" -"1089631056","1089631071","CA","CAN","CANADA" -"1089631072","1089644815","US","USA","UNITED STATES" -"1089644816","1089644831","GB","GBR","UNITED KINGDOM" -"1089644832","1089696063","US","USA","UNITED STATES" -"1089696064","1089696071","GB","GBR","UNITED KINGDOM" -"1089696072","1089703455","US","USA","UNITED STATES" -"1089703456","1089703487","CA","CAN","CANADA" -"1089703488","1089721503","US","USA","UNITED STATES" -"1089721504","1089721519","CA","CAN","CANADA" -"1089721520","1089721727","US","USA","UNITED STATES" -"1089721728","1089721791","CA","CAN","CANADA" -"1089721792","1089723823","US","USA","UNITED STATES" -"1089723824","1089723831","CA","CAN","CANADA" -"1089723832","1089961983","US","USA","UNITED STATES" -"1089961984","1089970175","CA","CAN","CANADA" -"1089970176","1089974271","PR","PRI","PUERTO RICO" -"1089974272","1090138111","US","USA","UNITED STATES" -"1090142208","1090146303","US","USA","UNITED STATES" -"1090146304","1090150399","CA","CAN","CANADA" -"1090150400","1090154495","US","USA","UNITED STATES" -"1090158592","1090207743","US","USA","UNITED STATES" -"1090207744","1090215935","CA","CAN","CANADA" -"1090220032","1090355199","US","USA","UNITED STATES" -"1090355200","1090363391","CA","CAN","CANADA" -"1090363392","1090387967","US","USA","UNITED STATES" -"1090387968","1090391300","CA","CAN","CANADA" -"1090391301","1090391302","US","USA","UNITED STATES" -"1090391303","1090391359","CA","CAN","CANADA" -"1090391360","1090391360","US","USA","UNITED STATES" -"1090391361","1090396159","CA","CAN","CANADA" -"1090396160","1090424831","US","USA","UNITED STATES" -"1090424832","1090428927","CA","CAN","CANADA" -"1090428928","1090445311","US","USA","UNITED STATES" -"1090445312","1090447359","CA","CAN","CANADA" -"1090447360","1090447487","US","USA","UNITED STATES" -"1090447488","1090448127","CA","CAN","CANADA" -"1090448128","1090448255","US","USA","UNITED STATES" -"1090448256","1090453503","CA","CAN","CANADA" -"1090453504","1090497903","US","USA","UNITED STATES" -"1090497904","1090497919","AU","AUS","AUSTRALIA" -"1090497920","1090499583","US","USA","UNITED STATES" -"1090499584","1090499839","NO","NOR","NORWAY" -"1090499840","1091797263","US","USA","UNITED STATES" -"1091797264","1091797279","IT","ITA","ITALY" -"1091797280","1091960831","US","USA","UNITED STATES" -"1091960832","1092026367","CA","CAN","CANADA" -"1092026368","1092075519","US","USA","UNITED STATES" -"1092075520","1092091903","PR","PRI","PUERTO RICO" -"1092091904","1093017599","US","USA","UNITED STATES" -"1093017600","1093021695","CA","CAN","CANADA" -"1093021696","1093025791","US","USA","UNITED STATES" -"1093025792","1093033983","CA","CAN","CANADA" -"1093033984","1093058559","US","USA","UNITED STATES" -"1093058560","1093059071","PR","PRI","PUERTO RICO" -"1093059072","1093059583","US","USA","UNITED STATES" -"1093059584","1093066751","PR","PRI","PUERTO RICO" -"1093066752","1093074943","US","USA","UNITED STATES" -"1093074944","1093091327","CA","CAN","CANADA" -"1093091328","1093108735","US","USA","UNITED STATES" -"1093108736","1093109247","CA","CAN","CANADA" -"1093109248","1093109503","US","USA","UNITED STATES" -"1093109504","1093109759","CA","CAN","CANADA" -"1093109760","1093110015","US","USA","UNITED STATES" -"1093110016","1093110271","CA","CAN","CANADA" -"1093110272","1093111295","US","USA","UNITED STATES" -"1093111296","1093111551","CA","CAN","CANADA" -"1093111552","1093111959","US","USA","UNITED STATES" -"1093111960","1093111967","VG","VGB","VIRGIN ISLANDS, BRITISH" -"1093111968","1093112063","US","USA","UNITED STATES" -"1093112064","1093112319","CA","CAN","CANADA" -"1093112320","1093114687","US","USA","UNITED STATES" -"1093114688","1093114703","CA","CAN","CANADA" -"1093114704","1093114711","US","USA","UNITED STATES" -"1093114712","1093114719","VG","VGB","VIRGIN ISLANDS, BRITISH" -"1093114720","1093114751","CA","CAN","CANADA" -"1093114752","1093114879","US","USA","UNITED STATES" -"1093114880","1093115647","CA","CAN","CANADA" -"1093115648","1093115903","US","USA","UNITED STATES" -"1093115904","1093116415","CA","CAN","CANADA" -"1093116416","1093117631","US","USA","UNITED STATES" -"1093117632","1093117647","VG","VGB","VIRGIN ISLANDS, BRITISH" -"1093117648","1093117951","US","USA","UNITED STATES" -"1093117952","1093118207","CA","CAN","CANADA" -"1093118208","1093119999","US","USA","UNITED STATES" -"1093120000","1093120255","CA","CAN","CANADA" -"1093120256","1093120399","US","USA","UNITED STATES" -"1093120400","1093120415","VG","VGB","VIRGIN ISLANDS, BRITISH" -"1093120416","1093120511","US","USA","UNITED STATES" -"1093120512","1093120767","GB","GBR","UNITED KINGDOM" -"1093120768","1093122735","US","USA","UNITED STATES" -"1093122736","1093122751","CA","CAN","CANADA" -"1093122752","1093123071","US","USA","UNITED STATES" -"1093123072","1093123583","CA","CAN","CANADA" -"1093123584","1093123983","US","USA","UNITED STATES" -"1093123984","1093123999","VG","VGB","VIRGIN ISLANDS, BRITISH" -"1093124000","1093124607","US","USA","UNITED STATES" -"1093124608","1093124863","CA","CAN","CANADA" -"1093124864","1093126143","US","USA","UNITED STATES" -"1093126144","1093126399","CA","CAN","CANADA" -"1093126400","1093126431","VG","VGB","VIRGIN ISLANDS, BRITISH" -"1093126432","1093126911","US","USA","UNITED STATES" -"1093126912","1093127167","CA","CAN","CANADA" -"1093127168","1093130751","US","USA","UNITED STATES" -"1093130752","1093131007","CA","CAN","CANADA" -"1093131008","1093131231","US","USA","UNITED STATES" -"1093131232","1093131247","VG","VGB","VIRGIN ISLANDS, BRITISH" -"1093131248","1093133695","US","USA","UNITED STATES" -"1093133696","1093133823","CA","CAN","CANADA" -"1093133824","1093135359","US","USA","UNITED STATES" -"1093135360","1093135615","CA","CAN","CANADA" -"1093135616","1093139663","US","USA","UNITED STATES" -"1093139664","1093139679","CA","CAN","CANADA" -"1093139680","1093139711","US","USA","UNITED STATES" -"1093139712","1093140223","CA","CAN","CANADA" -"1093140224","1093697535","US","USA","UNITED STATES" -"1093697536","1093699071","BB","BRB","BARBADOS" -"1093699072","1093700607","GD","GRD","GRENADA" -"1093700608","1093701631","VC","VCT","SAINT VINCENT AND THE GRENADINES" -"1093701632","1093708287","BB","BRB","BARBADOS" -"1093708288","1093709311","LC","LCA","SAINT LUCIA" -"1093709312","1093716479","BB","BRB","BARBADOS" -"1093716480","1093717759","GD","GRD","GRENADA" -"1093717760","1093719807","BB","BRB","BARBADOS" -"1093719808","1093720319","LC","LCA","SAINT LUCIA" -"1093720320","1093721343","VG","VGB","VIRGIN ISLANDS, BRITISH" -"1093721344","1093723391","BB","BRB","BARBADOS" -"1093723392","1093723647","VC","VCT","SAINT VINCENT AND THE GRENADINES" -"1093723648","1093724415","BB","BRB","BARBADOS" -"1093724416","1093725183","VC","VCT","SAINT VINCENT AND THE GRENADINES" -"1093725184","1093730303","BB","BRB","BARBADOS" -"1093730304","1093730559","US","USA","UNITED STATES" -"1093730560","1093730815","HK","HKG","HONG KONG" -"1093730816","1093844991","US","USA","UNITED STATES" -"1093861376","1094565887","US","USA","UNITED STATES" -"1094565888","1094582271","CA","CAN","CANADA" -"1094582272","1095450623","US","USA","UNITED STATES" -"1095450624","1095467007","BS","BHS","BAHAMAS" -"1095467008","1095627775","US","USA","UNITED STATES" -"1095627776","1095628287","CA","CAN","CANADA" -"1095628288","1096278015","US","USA","UNITED STATES" -"1096278016","1096286207","CA","CAN","CANADA" -"1096286208","1096548351","US","USA","UNITED STATES" -"1096548352","1096810495","CA","CAN","CANADA" -"1096810496","1096884223","US","USA","UNITED STATES" -"1096884224","1096888319","CA","CAN","CANADA" -"1096888320","1096925183","US","USA","UNITED STATES" -"1096925184","1096941567","CA","CAN","CANADA" -"1096941568","1096950551","US","USA","UNITED STATES" -"1096950552","1096950559","CA","CAN","CANADA" -"1096950560","1096952455","US","USA","UNITED STATES" -"1096952456","1096952463","GB","GBR","UNITED KINGDOM" -"1096952464","1096952519","US","USA","UNITED STATES" -"1096952520","1096952527","GB","GBR","UNITED KINGDOM" -"1096952528","1096956463","US","USA","UNITED STATES" -"1096956464","1096956471","GB","GBR","UNITED KINGDOM" -"1096956472","1096956631","US","USA","UNITED STATES" -"1096956632","1096956639","GB","GBR","UNITED KINGDOM" -"1096956640","1096957247","US","USA","UNITED STATES" -"1096957248","1096957255","CA","CAN","CANADA" -"1096957256","1096959599","US","USA","UNITED STATES" -"1096959600","1096959607","GB","GBR","UNITED KINGDOM" -"1096959608","1096960767","US","USA","UNITED STATES" -"1096960768","1096960895","GB","GBR","UNITED KINGDOM" -"1096960896","1096961023","US","USA","UNITED STATES" -"1096961024","1096961151","GB","GBR","UNITED KINGDOM" -"1096961152","1096968127","US","USA","UNITED STATES" -"1096968128","1096968159","CA","CAN","CANADA" -"1096968160","1096968191","US","USA","UNITED STATES" -"1096968192","1096968319","GB","GBR","UNITED KINGDOM" -"1096968320","1096968447","US","USA","UNITED STATES" -"1096968448","1096968575","GB","GBR","UNITED KINGDOM" -"1096968576","1097058303","US","USA","UNITED STATES" -"1097058304","1097058367","IT","ITA","ITALY" -"1097058368","1097063663","US","USA","UNITED STATES" -"1097063664","1097063679","IT","ITA","ITALY" -"1097063680","1097065151","US","USA","UNITED STATES" -"1097065152","1097065167","CA","CAN","CANADA" -"1097065168","1097067519","US","USA","UNITED STATES" -"1097067520","1097068031","GB","GBR","UNITED KINGDOM" -"1097068032","1097069055","US","USA","UNITED STATES" -"1097069056","1097069311","CA","CAN","CANADA" -"1097069312","1097727999","US","USA","UNITED STATES" -"1097728000","1097736191","CA","CAN","CANADA" -"1097736192","1097768959","US","USA","UNITED STATES" -"1097768960","1097777151","CA","CAN","CANADA" -"1097777152","1097799167","US","USA","UNITED STATES" -"1097799168","1097799423","CA","CAN","CANADA" -"1097799424","1097799679","US","USA","UNITED STATES" -"1097799680","1097799935","CA","CAN","CANADA" -"1097799936","1097800959","US","USA","UNITED STATES" -"1097800960","1097800991","CY","CYP","CYPRUS" -"1097800992","1097830399","US","USA","UNITED STATES" -"1097830400","1097834495","CA","CAN","CANADA" -"1097834496","1097896191","US","USA","UNITED STATES" -"1097896192","1097897215","VI","VIR","VIRGIN ISLANDS, U.S." -"1097897216","1097947135","US","USA","UNITED STATES" -"1097947136","1097949183","VI","VIR","VIRGIN ISLANDS, U.S." -"1097949184","1097951231","US","USA","UNITED STATES" -"1097951232","1097953279","VI","VIR","VIRGIN ISLANDS, U.S." -"1097953280","1098057375","US","USA","UNITED STATES" -"1098057376","1098057407","CA","CAN","CANADA" -"1098057408","1098188047","US","USA","UNITED STATES" -"1098188048","1098188055","CA","CAN","CANADA" -"1098188056","1098353967","US","USA","UNITED STATES" -"1098353968","1098353983","CA","CAN","CANADA" -"1098353984","1098382143","US","USA","UNITED STATES" -"1098382144","1098382175","CA","CAN","CANADA" -"1098382176","1098891599","US","USA","UNITED STATES" -"1098891600","1098891607","AU","AUS","AUSTRALIA" -"1098891608","1098891623","US","USA","UNITED STATES" -"1098891624","1098891631","AU","AUS","AUSTRALIA" -"1098891632","1098891695","US","USA","UNITED STATES" -"1098891696","1098891711","AU","AUS","AUSTRALIA" -"1098891712","1098891743","US","USA","UNITED STATES" -"1098891744","1098891775","AU","AUS","AUSTRALIA" -"1098891776","1098891871","US","USA","UNITED STATES" -"1098891872","1098891887","AU","AUS","AUSTRALIA" -"1098891888","1098891951","US","USA","UNITED STATES" -"1098891952","1098891999","AU","AUS","AUSTRALIA" -"1098892000","1098892015","US","USA","UNITED STATES" -"1098892016","1098892031","AU","AUS","AUSTRALIA" -"1098892032","1101041279","US","USA","UNITED STATES" -"1101041280","1101041407","IN","IND","INDIA" -"1101041408","1101078455","US","USA","UNITED STATES" -"1101078456","1101078463","CA","CAN","CANADA" -"1101078464","1101113135","US","USA","UNITED STATES" -"1101113136","1101113143","CA","CAN","CANADA" -"1101113144","1101118239","US","USA","UNITED STATES" -"1101118240","1101118271","GB","GBR","UNITED KINGDOM" -"1101118272","1101121535","US","USA","UNITED STATES" -"1101121536","1101121791","EC","ECU","ECUADOR" -"1101121792","1101190655","US","USA","UNITED STATES" -"1101190656","1101191167","EC","ECU","ECUADOR" -"1101191168","1101224959","US","USA","UNITED STATES" -"1101224960","1101225215","EC","ECU","ECUADOR" -"1101225216","1101267711","US","USA","UNITED STATES" -"1101267712","1101267967","CA","CAN","CANADA" -"1101267968","1101304063","US","USA","UNITED STATES" -"1101304064","1101304319","EC","ECU","ECUADOR" -"1101304320","1101304831","US","USA","UNITED STATES" -"1101304832","1101305855","HN","HND","HONDURAS" -"1101305856","1101339887","US","USA","UNITED STATES" -"1101339888","1101339903","CA","CAN","CANADA" -"1101339904","1101352959","US","USA","UNITED STATES" -"1101352960","1101355007","HN","HND","HONDURAS" -"1101355008","1101357215","US","USA","UNITED STATES" -"1101357216","1101357223","SE","SWE","SWEDEN" -"1101357224","1101384415","US","USA","UNITED STATES" -"1101384416","1101384447","CA","CAN","CANADA" -"1101384448","1101385855","US","USA","UNITED STATES" -"1101385856","1101385919","DK","DNK","DENMARK" -"1101385920","1101425919","US","USA","UNITED STATES" -"1101425920","1101426175","EC","ECU","ECUADOR" -"1101426176","1101431679","US","USA","UNITED STATES" -"1101431680","1101431807","AU","AUS","AUSTRALIA" -"1101431808","1101445775","US","USA","UNITED STATES" -"1101445776","1101445791","CA","CAN","CANADA" -"1101445792","1101461759","US","USA","UNITED STATES" -"1101461760","1101462015","AN","ANT","NETHERLANDS ANTILLES" -"1101462016","1101492623","US","USA","UNITED STATES" -"1101492624","1101492639","BE","BEL","BELGIUM" -"1101492640","1101523039","US","USA","UNITED STATES" -"1101523040","1101523071","GB","GBR","UNITED KINGDOM" -"1101523072","1101542399","US","USA","UNITED STATES" -"1101542400","1101542911","CO","COL","COLOMBIA" -"1101542912","1101574655","US","USA","UNITED STATES" -"1101574656","1101575167","EC","ECU","ECUADOR" -"1101575168","1101617679","US","USA","UNITED STATES" -"1101617680","1101617687","CA","CAN","CANADA" -"1101617688","1101619247","US","USA","UNITED STATES" -"1101619248","1101619255","NL","NLD","NETHERLANDS" -"1101619256","1101625343","US","USA","UNITED STATES" -"1101625344","1101625407","VI","VIR","VIRGIN ISLANDS, U.S." -"1101625408","1101635327","US","USA","UNITED STATES" -"1101635328","1101635583","HN","HND","HONDURAS" -"1101635584","1101650431","US","USA","UNITED STATES" -"1101650432","1101650943","HN","HND","HONDURAS" -"1101650944","1101668095","US","USA","UNITED STATES" -"1101668096","1101668351","EC","ECU","ECUADOR" -"1101668352","1101676135","US","USA","UNITED STATES" -"1101676136","1101676143","CA","CAN","CANADA" -"1101676144","1101676543","US","USA","UNITED STATES" -"1101676544","1101678591","EC","ECU","ECUADOR" -"1101678592","1101681407","US","USA","UNITED STATES" -"1101681408","1101681663","NL","NLD","NETHERLANDS" -"1101681664","1101685383","US","USA","UNITED STATES" -"1101685384","1101685391","NL","NLD","NETHERLANDS" -"1101685392","1101726407","US","USA","UNITED STATES" -"1101726408","1101726415","CA","CAN","CANADA" -"1101726416","1101732199","US","USA","UNITED STATES" -"1101732200","1101732207","CH","CHE","SWITZERLAND" -"1101732208","1101750783","US","USA","UNITED STATES" -"1101750784","1101751295","BM","BMU","BERMUDA" -"1101751296","1101837311","US","USA","UNITED STATES" -"1101837312","1101837567","EC","ECU","ECUADOR" -"1101837568","1101856767","US","USA","UNITED STATES" -"1101856768","1101856775","DK","DNK","DENMARK" -"1101856776","1101857295","US","USA","UNITED STATES" -"1101857296","1101857311","CA","CAN","CANADA" -"1101857312","1101864223","US","USA","UNITED STATES" -"1101864224","1101864255","BE","BEL","BELGIUM" -"1101864256","1101869055","US","USA","UNITED STATES" -"1101869056","1101869567","GH","GHA","GHANA" -"1101869568","1101871103","US","USA","UNITED STATES" -"1101871104","1101873151","BO","BOL","BOLIVIA" -"1101873152","1101881935","US","USA","UNITED STATES" -"1101881936","1101881951","GB","GBR","UNITED KINGDOM" -"1101881952","1101905407","US","USA","UNITED STATES" -"1101905408","1101905663","GH","GHA","GHANA" -"1101905664","1101921407","US","USA","UNITED STATES" -"1101921408","1101921471","BA","BIH","BOSNIA AND HERZEGOVINA" -"1101921472","1101952439","US","USA","UNITED STATES" -"1101952440","1101952447","CA","CAN","CANADA" -"1101952448","1101971071","US","USA","UNITED STATES" -"1101971072","1101971079","VI","VIR","VIRGIN ISLANDS, U.S." -"1101971080","1102389247","US","USA","UNITED STATES" -"1102389248","1102393343","CA","CAN","CANADA" -"1102393344","1102446591","US","USA","UNITED STATES" -"1102446592","1102448383","HN","HND","HONDURAS" -"1102448384","1102449151","US","USA","UNITED STATES" -"1102449152","1102449407","SV","SLV","EL SALVADOR" -"1102449408","1102454527","CR","CRI","COSTA RICA" -"1102454528","1102454783","HN","HND","HONDURAS" -"1102454784","1102512127","US","USA","UNITED STATES" -"1102512128","1102516223","JM","JAM","JAMAICA" -"1102516224","1103244799","US","USA","UNITED STATES" -"1103244800","1103245055","EC","ECU","ECUADOR" -"1103245056","1103474943","US","USA","UNITED STATES" -"1103474944","1103475199","MH","MHL","MARSHALL ISLANDS" -"1103475200","1103603711","US","USA","UNITED STATES" -"1103603712","1103605759","EC","ECU","ECUADOR" -"1103605760","1103623167","US","USA","UNITED STATES" -"1103623168","1103623679","CO","COL","COLOMBIA" -"1103623680","1103930879","US","USA","UNITED STATES" -"1103930880","1103931135","MX","MEX","MEXICO" -"1103931136","1103987967","US","USA","UNITED STATES" -"1103987968","1103988223","BR","BRA","BRAZIL" -"1103988224","1103996927","US","USA","UNITED STATES" -"1103996928","1103997439","EC","ECU","ECUADOR" -"1103997440","1104166911","US","USA","UNITED STATES" -"1104166912","1104168959","CO","COL","COLOMBIA" -"1104168960","1104399071","US","USA","UNITED STATES" -"1104399072","1104399079","CA","CAN","CANADA" -"1104399080","1104492287","US","USA","UNITED STATES" -"1104492288","1104492543","PH","PHL","PHILIPPINES" -"1104492544","1104510975","US","USA","UNITED STATES" -"1104510976","1104511743","EC","ECU","ECUADOR" -"1104511744","1105099519","US","USA","UNITED STATES" -"1105099520","1105099775","EC","ECU","ECUADOR" -"1105099776","1106320175","US","USA","UNITED STATES" -"1106320176","1106320183","CA","CAN","CANADA" -"1106320184","1106469695","US","USA","UNITED STATES" -"1106469696","1106469759","CO","COL","COLOMBIA" -"1106469760","1106469887","US","USA","UNITED STATES" -"1106469888","1106470911","BS","BHS","BAHAMAS" -"1106470912","1106475007","US","USA","UNITED STATES" -"1106475008","1106475519","CO","COL","COLOMBIA" -"1106475520","1106758655","US","USA","UNITED STATES" -"1106758656","1106759167","EC","ECU","ECUADOR" -"1106759168","1106759679","CO","COL","COLOMBIA" -"1106759680","1106767871","US","USA","UNITED STATES" -"1106767872","1106768383","CO","COL","COLOMBIA" -"1106768384","1106768895","EC","ECU","ECUADOR" -"1106768896","1106769919","CO","COL","COLOMBIA" -"1106769920","1106814719","US","USA","UNITED STATES" -"1106814720","1106814975","EC","ECU","ECUADOR" -"1106814976","1107243007","US","USA","UNITED STATES" -"1107243008","1107247103","TC","TCA","TURKS AND CAICOS ISLANDS" -"1107247104","1107275775","US","USA","UNITED STATES" -"1107275776","1107279871","CA","CAN","CANADA" -"1107279872","1107288063","US","USA","UNITED STATES" -"1107288064","1107296255","CA","CAN","CANADA" -"1107296256","1107697663","US","USA","UNITED STATES" -"1107701760","1107705855","CA","CAN","CANADA" -"1107705856","1107820543","US","USA","UNITED STATES" -"1107853312","1108025343","US","USA","UNITED STATES" -"1108025344","1108029439","CA","CAN","CANADA" -"1108029440","1108033535","US","USA","UNITED STATES" -"1108033536","1108041727","CA","CAN","CANADA" -"1108041728","1108054015","US","USA","UNITED STATES" -"1108054016","1108066303","CA","CAN","CANADA" -"1108066304","1108492287","US","USA","UNITED STATES" -"1108500480","1108525055","US","USA","UNITED STATES" -"1108525056","1108541439","CA","CAN","CANADA" -"1108541440","1108852735","US","USA","UNITED STATES" -"1108865024","1109639199","US","USA","UNITED STATES" -"1109639200","1109639215","IN","IND","INDIA" -"1109639216","1109641663","US","USA","UNITED STATES" -"1109641664","1109641679","JP","JPN","JAPAN" -"1109641680","1109642367","US","USA","UNITED STATES" -"1109642368","1109642383","IL","ISR","ISRAEL" -"1109642384","1109642415","US","USA","UNITED STATES" -"1109642416","1109642431","IL","ISR","ISRAEL" -"1109642432","1109642583","US","USA","UNITED STATES" -"1109642584","1109642591","DE","DEU","GERMANY" -"1109642592","1109643303","US","USA","UNITED STATES" -"1109643304","1109643311","DE","DEU","GERMANY" -"1109643312","1109643519","US","USA","UNITED STATES" -"1109643520","1109643551","CA","CAN","CANADA" -"1109643552","1109647231","US","USA","UNITED STATES" -"1109647232","1109647247","AU","AUS","AUSTRALIA" -"1109647248","1109648319","US","USA","UNITED STATES" -"1109648320","1109648335","JP","JPN","JAPAN" -"1109648336","1109648927","US","USA","UNITED STATES" -"1109648928","1109648943","AU","AUS","AUSTRALIA" -"1109648944","1109650639","US","USA","UNITED STATES" -"1109650640","1109650655","AU","AUS","AUSTRALIA" -"1109650656","1109688319","US","USA","UNITED STATES" -"1109688320","1109696511","CA","CAN","CANADA" -"1109696512","1109705727","US","USA","UNITED STATES" -"1109705728","1109705743","CG","COG","CONGO" -"1109705744","1109705759","US","USA","UNITED STATES" -"1109705760","1109705791","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"1109705792","1109705823","US","USA","UNITED STATES" -"1109705824","1109705839","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"1109705840","1109705855","US","USA","UNITED STATES" -"1109705856","1109705983","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"1109705984","1109706239","HT","HTI","HAITI" -"1109706240","1109707007","US","USA","UNITED STATES" -"1109707008","1109707263","JM","JAM","JAMAICA" -"1109707264","1109707519","US","USA","UNITED STATES" -"1109707520","1109707775","MW","MWI","MALAWI" -"1109707776","1109708639","US","USA","UNITED STATES" -"1109708640","1109708671","HT","HTI","HAITI" -"1109708672","1109709823","US","USA","UNITED STATES" -"1109709824","1109710847","ZM","ZMB","ZAMBIA" -"1109710848","1109711175","US","USA","UNITED STATES" -"1109711176","1109711183","HT","HTI","HAITI" -"1109711184","1109738495","US","USA","UNITED STATES" -"1109738496","1109738623","VA","VAT","HOLY SEE (VATICAN CITY STATE)" -"1109738624","1109774175","US","USA","UNITED STATES" -"1109774176","1109774183","CA","CAN","CANADA" -"1109774184","1109776575","US","USA","UNITED STATES" -"1109776576","1109776607","CN","CHN","CHINA" -"1109776608","1109776615","CA","CAN","CANADA" -"1109776616","1109819391","US","USA","UNITED STATES" -"1109819392","1109852159","CA","CAN","CANADA" -"1109852160","1109902415","US","USA","UNITED STATES" -"1109902416","1109902431","CY","CYP","CYPRUS" -"1109902432","1109902511","US","USA","UNITED STATES" -"1109902512","1109902527","CY","CYP","CYPRUS" -"1109902528","1109927167","US","USA","UNITED STATES" -"1109927168","1109927423","AU","AUS","AUSTRALIA" -"1109927424","1110126591","US","USA","UNITED STATES" -"1110126592","1110130687","CA","CAN","CANADA" -"1110130688","1110310911","US","USA","UNITED STATES" -"1110310912","1110376447","CA","CAN","CANADA" -"1110376448","1110445311","US","USA","UNITED STATES" -"1110445312","1110446591","CA","CAN","CANADA" -"1110446592","1110449151","US","USA","UNITED STATES" -"1110449152","1110449663","CA","CAN","CANADA" -"1110449664","1110450687","US","USA","UNITED STATES" -"1110450688","1110450943","CA","CAN","CANADA" -"1110450944","1110452223","US","USA","UNITED STATES" -"1110452224","1110453247","CA","CAN","CANADA" -"1110453248","1110454271","US","USA","UNITED STATES" -"1110454272","1110455295","CA","CAN","CANADA" -"1110455296","1110459551","US","USA","UNITED STATES" -"1110459552","1110459583","CA","CAN","CANADA" -"1110459584","1110461759","US","USA","UNITED STATES" -"1110461760","1110461823","CA","CAN","CANADA" -"1110461824","1110462463","US","USA","UNITED STATES" -"1110462464","1110462719","CA","CAN","CANADA" -"1110462720","1110472447","US","USA","UNITED STATES" -"1110472448","1110472703","CA","CAN","CANADA" -"1110472704","1110540287","US","USA","UNITED STATES" -"1110540288","1110573055","CA","CAN","CANADA" -"1110573056","1110638591","PR","PRI","PUERTO RICO" -"1110638592","1110663167","US","USA","UNITED STATES" -"1110663168","1110675455","CA","CAN","CANADA" -"1110675456","1110679551","US","USA","UNITED STATES" -"1110679552","1110683647","CA","CAN","CANADA" -"1110683648","1110700031","US","USA","UNITED STATES" -"1110700032","1110704127","CA","CAN","CANADA" -"1110704128","1110863871","US","USA","UNITED STATES" -"1110863872","1110867967","JM","JAM","JAMAICA" -"1110867968","1110921215","US","USA","UNITED STATES" -"1110925312","1110929407","US","USA","UNITED STATES" -"1110929408","1110933503","BM","BMU","BERMUDA" -"1110933504","1110941695","US","USA","UNITED STATES" -"1110949888","1111195647","US","USA","UNITED STATES" -"1111195648","1111212031","CA","CAN","CANADA" -"1111212032","1111228415","US","USA","UNITED STATES" -"1111228416","1111244799","AR","ARG","ARGENTINA" -"1111244800","1112432639","US","USA","UNITED STATES" -"1112432640","1112440831","CA","CAN","CANADA" -"1112440832","1112530943","US","USA","UNITED STATES" -"1112530944","1112539135","CA","CAN","CANADA" -"1112539136","1113212479","US","USA","UNITED STATES" -"1113212480","1113212495","CA","CAN","CANADA" -"1113212496","1113591807","US","USA","UNITED STATES" -"1113591808","1113595903","CA","CAN","CANADA" -"1113595904","1113596159","CL","CHL","CHILE" -"1113596160","1113602047","US","USA","UNITED STATES" -"1113602048","1113603071","VE","VEN","VENEZUELA" -"1113603072","1113657343","US","USA","UNITED STATES" -"1113657344","1113661439","CA","CAN","CANADA" -"1113661440","1113696575","US","USA","UNITED STATES" -"1113696576","1113696639","CA","CAN","CANADA" -"1113696640","1113696831","US","USA","UNITED STATES" -"1113696832","1113696895","CA","CAN","CANADA" -"1113696896","1113718783","US","USA","UNITED STATES" -"1113718784","1113743359","DO","DOM","DOMINICAN REPUBLIC" -"1113743360","1113854207","US","USA","UNITED STATES" -"1113854208","1113854463","CA","CAN","CANADA" -"1113854464","1113857023","US","USA","UNITED STATES" -"1113857024","1113857031","CA","CAN","CANADA" -"1113857032","1113862247","US","USA","UNITED STATES" -"1113862248","1113862255","MX","MEX","MEXICO" -"1113862256","1113864735","US","USA","UNITED STATES" -"1113864736","1113864743","BR","BRA","BRAZIL" -"1113864744","1113864767","US","USA","UNITED STATES" -"1113864768","1113864783","VI","VIR","VIRGIN ISLANDS, U.S." -"1113864784","1113881871","US","USA","UNITED STATES" -"1113881872","1113881879","GB","GBR","UNITED KINGDOM" -"1113881880","1113882351","US","USA","UNITED STATES" -"1113882352","1113882359","CA","CAN","CANADA" -"1113882360","1113888599","US","USA","UNITED STATES" -"1113888600","1113888607","CA","CAN","CANADA" -"1113888608","1113903295","US","USA","UNITED STATES" -"1113903296","1113903359","CA","CAN","CANADA" -"1113903360","1113905791","US","USA","UNITED STATES" -"1113905792","1113905807","CA","CAN","CANADA" -"1113905808","1113916831","US","USA","UNITED STATES" -"1113916832","1113916839","GB","GBR","UNITED KINGDOM" -"1113916840","1113919383","US","USA","UNITED STATES" -"1113919384","1113919391","CA","CAN","CANADA" -"1113919392","1113923839","US","USA","UNITED STATES" -"1113923840","1113923903","BR","BRA","BRAZIL" -"1113923904","1113932815","US","USA","UNITED STATES" -"1113932816","1113932823","CA","CAN","CANADA" -"1113932824","1113997311","US","USA","UNITED STATES" -"1113997312","1114005503","CA","CAN","CANADA" -"1114005504","1114054655","US","USA","UNITED STATES" -"1114054656","1114062847","CA","CAN","CANADA" -"1114062848","1114095615","US","USA","UNITED STATES" -"1114095616","1114103807","CA","CAN","CANADA" -"1114103808","1114170095","US","USA","UNITED STATES" -"1114170096","1114170111","CA","CAN","CANADA" -"1114170112","1114505215","US","USA","UNITED STATES" -"1114505216","1114507263","CA","CAN","CANADA" -"1114507264","1114507295","US","USA","UNITED STATES" -"1114507296","1114511359","CA","CAN","CANADA" -"1114511360","1114511871","US","USA","UNITED STATES" -"1114511872","1114513407","CA","CAN","CANADA" -"1114513408","1114515455","SA","SAU","SAUDI ARABIA" -"1114515456","1114517503","GU","GUM","GUAM" -"1114517504","1114524159","CA","CAN","CANADA" -"1114524160","1114524671","SA","SAU","SAUDI ARABIA" -"1114524672","1114533375","CA","CAN","CANADA" -"1114533376","1114533887","SA","SAU","SAUDI ARABIA" -"1114533888","1114550271","CA","CAN","CANADA" -"1114554368","1114681343","US","USA","UNITED STATES" -"1114681344","1114685439","CA","CAN","CANADA" -"1114685440","1114730495","US","USA","UNITED STATES" -"1114730496","1114734591","CA","CAN","CANADA" -"1114734592","1114877183","US","USA","UNITED STATES" -"1114877184","1114877439","CY","CYP","CYPRUS" -"1114877440","1114877951","US","USA","UNITED STATES" -"1114877952","1114878207","PA","PAN","PANAMA" -"1114878208","1114878849","US","USA","UNITED STATES" -"1114878850","1114878977","LT","LTU","LITHUANIA" -"1114878978","1115104511","US","USA","UNITED STATES" -"1115104512","1115104639","CA","CAN","CANADA" -"1115104640","1115113471","US","USA","UNITED STATES" -"1115113472","1115114495","HN","HND","HONDURAS" -"1115114496","1115114751","MX","MEX","MEXICO" -"1115114752","1115115007","GT","GTM","GUATEMALA" -"1115115008","1115115519","US","USA","UNITED STATES" -"1115115520","1115116543","HN","HND","HONDURAS" -"1115116544","1115117055","US","USA","UNITED STATES" -"1115117056","1115117311","GB","GBR","UNITED KINGDOM" -"1115117312","1115117567","US","USA","UNITED STATES" -"1115117568","1115118591","HN","HND","HONDURAS" -"1115118592","1115119615","SV","SLV","EL SALVADOR" -"1115119616","1115127807","US","USA","UNITED STATES" -"1115131904","1115135999","US","USA","UNITED STATES" -"1115136000","1115144191","CA","CAN","CANADA" -"1115144192","1115693055","US","USA","UNITED STATES" -"1115697152","1115705343","US","USA","UNITED STATES" -"1115705344","1115709439","CA","CAN","CANADA" -"1115709440","1115783167","US","USA","UNITED STATES" -"1115783168","1115791359","CA","CAN","CANADA" -"1115791360","1115795455","PR","PRI","PUERTO RICO" -"1115795456","1115799551","CA","CAN","CANADA" -"1115799552","1115815935","US","USA","UNITED STATES" -"1115815936","1115947007","CA","CAN","CANADA" -"1115947008","1116168191","US","USA","UNITED STATES" -"1116168192","1116176383","CA","CAN","CANADA" -"1116176384","1116897279","US","USA","UNITED STATES" -"1116897280","1116905471","CA","CAN","CANADA" -"1116905472","1117274111","US","USA","UNITED STATES" -"1117274112","1117282303","CA","CAN","CANADA" -"1117282304","1117413375","US","USA","UNITED STATES" -"1117413376","1117415423","CA","CAN","CANADA" -"1117415424","1117416191","AN","ANT","NETHERLANDS ANTILLES" -"1117416192","1117418655","CA","CAN","CANADA" -"1117418656","1117418671","US","USA","UNITED STATES" -"1117418672","1117419775","CA","CAN","CANADA" -"1117419776","1117420031","US","USA","UNITED STATES" -"1117420032","1117421567","CA","CAN","CANADA" -"1117421568","1117683711","US","USA","UNITED STATES" -"1117683712","1117691903","CA","CAN","CANADA" -"1117691904","1117724671","US","USA","UNITED STATES" -"1117724672","1117728767","CA","CAN","CANADA" -"1117728768","1117745151","US","USA","UNITED STATES" -"1117745152","1117749247","CA","CAN","CANADA" -"1117749248","1117978623","US","USA","UNITED STATES" -"1117978624","1117986815","CA","CAN","CANADA" -"1117986816","1117995007","US","USA","UNITED STATES" -"1117995008","1117999103","CA","CAN","CANADA" -"1117999104","1118027775","US","USA","UNITED STATES" -"1118027776","1118031871","CA","CAN","CANADA" -"1118031872","1118158847","US","USA","UNITED STATES" -"1118158848","1118167039","CA","CAN","CANADA" -"1118167040","1118474239","US","USA","UNITED STATES" -"1118474240","1118478335","CA","CAN","CANADA" -"1118478336","1118483455","US","USA","UNITED STATES" -"1118486528","1118796543","US","USA","UNITED STATES" -"1118796544","1118796799","CY","CYP","CYPRUS" -"1118796800","1118824447","US","USA","UNITED STATES" -"1118826496","1118962839","US","USA","UNITED STATES" -"1118962840","1118962847","NI","NIC","NICARAGUA" -"1118962848","1118962943","US","USA","UNITED STATES" -"1118962944","1118963199","TR","TUR","TURKEY" -"1118963200","1118963455","US","USA","UNITED STATES" -"1118963456","1118963463","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"1118963464","1118963471","US","USA","UNITED STATES" -"1118963472","1118963479","NG","NGA","NIGERIA" -"1118963480","1118963487","GB","GBR","UNITED KINGDOM" -"1118963488","1118963495","AO","AGO","ANGOLA" -"1118963496","1118963583","US","USA","UNITED STATES" -"1118963584","1118963647","KE","KEN","KENYA" -"1118963648","1118964863","US","USA","UNITED STATES" -"1118964864","1118964879","LB","LBN","LEBANON" -"1118964880","1118964991","US","USA","UNITED STATES" -"1118964992","1118965503","LC","LCA","SAINT LUCIA" -"1118965504","1118965839","US","USA","UNITED STATES" -"1118965840","1118965847","EC","ECU","ECUADOR" -"1118965848","1118965903","US","USA","UNITED STATES" -"1118965904","1118965911","NG","NGA","NIGERIA" -"1118965912","1118965919","MA","MAR","MOROCCO" -"1118965920","1118965991","US","USA","UNITED STATES" -"1118965992","1118966007","NG","NGA","NIGERIA" -"1118966008","1118966039","US","USA","UNITED STATES" -"1118966040","1118966063","EC","ECU","ECUADOR" -"1118966064","1118966079","US","USA","UNITED STATES" -"1118966080","1118966087","NG","NGA","NIGERIA" -"1118966088","1118966111","US","USA","UNITED STATES" -"1118966112","1118966119","SV","SLV","EL SALVADOR" -"1118966120","1118966143","VE","VEN","VENEZUELA" -"1118966144","1118966151","BB","BRB","BARBADOS" -"1118966152","1118966215","US","USA","UNITED STATES" -"1118966216","1118966223","EC","ECU","ECUADOR" -"1118966224","1118966271","US","USA","UNITED STATES" -"1118966272","1118966351","SV","SLV","EL SALVADOR" -"1118966352","1118966367","US","USA","UNITED STATES" -"1118966368","1118966399","SV","SLV","EL SALVADOR" -"1118966400","1118966407","US","USA","UNITED STATES" -"1118966408","1118966415","SV","SLV","EL SALVADOR" -"1118966416","1118966655","US","USA","UNITED STATES" -"1118966656","1118966687","SV","SLV","EL SALVADOR" -"1118966688","1118966719","US","USA","UNITED STATES" -"1118966720","1118966783","EC","ECU","ECUADOR" -"1118966784","1118966847","US","USA","UNITED STATES" -"1118966848","1118966911","PY","PRY","PARAGUAY" -"1118966912","1118966959","US","USA","UNITED STATES" -"1118966960","1118966975","SA","SAU","SAUDI ARABIA" -"1118966976","1118967391","US","USA","UNITED STATES" -"1118967392","1118967399","MA","MAR","MOROCCO" -"1118967400","1118967559","US","USA","UNITED STATES" -"1118967560","1118967567","LB","LBN","LEBANON" -"1118967568","1118967799","US","USA","UNITED STATES" -"1118967800","1118967807","RW","RWA","RWANDA" -"1118967808","1118968175","US","USA","UNITED STATES" -"1118968176","1118968183","AE","ARE","UNITED ARAB EMIRATES" -"1118968184","1118968207","US","USA","UNITED STATES" -"1118968208","1118968223","IQ","IRQ","IRAQ" -"1118968224","1118968255","US","USA","UNITED STATES" -"1118968256","1118968287","IQ","IRQ","IRAQ" -"1118968288","1118968295","AE","ARE","UNITED ARAB EMIRATES" -"1118968296","1118968303","US","USA","UNITED STATES" -"1118968304","1118968319","AE","ARE","UNITED ARAB EMIRATES" -"1118968320","1118968575","SR","SUR","SURINAME" -"1118968576","1118969471","US","USA","UNITED STATES" -"1118969472","1118969599","TT","TTO","TRINIDAD AND TOBAGO" -"1118969600","1118969727","GY","GUY","GUYANA" -"1118969728","1118969855","US","USA","UNITED STATES" -"1118969856","1118970111","LB","LBN","LEBANON" -"1118970112","1118970119","KE","KEN","KENYA" -"1118970120","1118970239","US","USA","UNITED STATES" -"1118970240","1118970367","NG","NGA","NIGERIA" -"1118970368","1118970623","GY","GUY","GUYANA" -"1118970624","1118970751","US","USA","UNITED STATES" -"1118970752","1118970879","GY","GUY","GUYANA" -"1118970880","1118971520","SR","SUR","SURINAME" -"1118971521","1118971647","US","USA","UNITED STATES" -"1118971648","1118971903","GY","GUY","GUYANA" -"1118971904","1118972159","CA","CAN","CANADA" -"1118972160","1118972415","VE","VEN","VENEZUELA" -"1118972416","1118972671","EC","ECU","ECUADOR" -"1118972672","1118972943","US","USA","UNITED STATES" -"1118972944","1118972959","VE","VEN","VENEZUELA" -"1118972960","1118972999","US","USA","UNITED STATES" -"1118973000","1118973007","SV","SLV","EL SALVADOR" -"1118973008","1118973063","US","USA","UNITED STATES" -"1118973064","1118973071","EC","ECU","ECUADOR" -"1118973072","1118973079","SV","SLV","EL SALVADOR" -"1118973080","1118973111","VE","VEN","VENEZUELA" -"1118973112","1118973119","SV","SLV","EL SALVADOR" -"1118973120","1118973183","US","USA","UNITED STATES" -"1118973184","1118973439","VE","VEN","VENEZUELA" -"1118973440","1118973695","GY","GUY","GUYANA" -"1118973696","1118973951","LB","LBN","LEBANON" -"1118973952","1118974015","GY","GUY","GUYANA" -"1118974016","1118974047","US","USA","UNITED STATES" -"1118974048","1118974055","SV","SLV","EL SALVADOR" -"1118974056","1118974095","US","USA","UNITED STATES" -"1118974096","1118974103","EC","ECU","ECUADOR" -"1118974104","1118974111","SV","SLV","EL SALVADOR" -"1118974112","1118974135","US","USA","UNITED STATES" -"1118974136","1118974207","EC","ECU","ECUADOR" -"1118974208","1118975231","US","USA","UNITED STATES" -"1118975232","1118975487","NI","NIC","NICARAGUA" -"1118975488","1118975743","KE","KEN","KENYA" -"1118975744","1118975999","US","USA","UNITED STATES" -"1118976000","1118976255","GB","GBR","UNITED KINGDOM" -"1118976256","1118976511","US","USA","UNITED STATES" -"1118976512","1118976575","NG","NGA","NIGERIA" -"1118976576","1118976599","US","USA","UNITED STATES" -"1118976600","1118976607","NI","NIC","NICARAGUA" -"1118976608","1118976687","US","USA","UNITED STATES" -"1118976688","1118976695","NG","NGA","NIGERIA" -"1118976696","1118976703","NI","NIC","NICARAGUA" -"1118976704","1118976727","US","USA","UNITED STATES" -"1118976728","1118976735","NI","NIC","NICARAGUA" -"1118976736","1118976767","US","USA","UNITED STATES" -"1118976768","1118976791","NI","NIC","NICARAGUA" -"1118976792","1118976831","US","USA","UNITED STATES" -"1118976832","1118976863","NI","NIC","NICARAGUA" -"1118976864","1118976895","US","USA","UNITED STATES" -"1118976896","1118977023","NI","NIC","NICARAGUA" -"1118977024","1118977311","US","USA","UNITED STATES" -"1118977312","1118977343","LB","LBN","LEBANON" -"1118977344","1118977351","KE","KEN","KENYA" -"1118977352","1118977631","US","USA","UNITED STATES" -"1118977632","1118977663","LB","LBN","LEBANON" -"1118977664","1118978447","US","USA","UNITED STATES" -"1118978448","1118978463","LB","LBN","LEBANON" -"1118978464","1118979311","US","USA","UNITED STATES" -"1118979312","1118979319","LB","LBN","LEBANON" -"1118979320","1118979455","US","USA","UNITED STATES" -"1118979456","1118979471","LB","LBN","LEBANON" -"1118979472","1118979495","US","USA","UNITED STATES" -"1118979496","1118979503","LB","LBN","LEBANON" -"1118979504","1118979535","US","USA","UNITED STATES" -"1118979536","1118979551","LB","LBN","LEBANON" -"1118979552","1118979567","US","USA","UNITED STATES" -"1118979568","1118979575","LB","LBN","LEBANON" -"1118979576","1118979711","US","USA","UNITED STATES" -"1118979712","1118979775","LB","LBN","LEBANON" -"1118979776","1118980095","US","USA","UNITED STATES" -"1118980096","1118980351","NG","NGA","NIGERIA" -"1118980352","1118980607","US","USA","UNITED STATES" -"1118980608","1118980863","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"1118980864","1118981119","LC","LCA","SAINT LUCIA" -"1118981120","1118981375","US","USA","UNITED STATES" -"1118981376","1118981631","IQ","IRQ","IRAQ" -"1118981632","1118981687","EC","ECU","ECUADOR" -"1118981688","1118981695","US","USA","UNITED STATES" -"1118981696","1118981735","SV","SLV","EL SALVADOR" -"1118981736","1118981743","EC","ECU","ECUADOR" -"1118981744","1118981751","SV","SLV","EL SALVADOR" -"1118981752","1118981759","NG","NGA","NIGERIA" -"1118981760","1118981791","US","USA","UNITED STATES" -"1118981792","1118981823","NG","NGA","NIGERIA" -"1118981824","1118981831","EC","ECU","ECUADOR" -"1118981832","1118981855","US","USA","UNITED STATES" -"1118981856","1118981863","EC","ECU","ECUADOR" -"1118981864","1118982175","US","USA","UNITED STATES" -"1118982176","1118982183","NI","NIC","NICARAGUA" -"1118982184","1118982191","US","USA","UNITED STATES" -"1118982192","1118982199","KE","KEN","KENYA" -"1118982200","1118982215","US","USA","UNITED STATES" -"1118982216","1118982231","NG","NGA","NIGERIA" -"1118982232","1118982239","NI","NIC","NICARAGUA" -"1118982240","1118982271","NG","NGA","NIGERIA" -"1118982272","1118982279","NI","NIC","NICARAGUA" -"1118982280","1118982287","US","USA","UNITED STATES" -"1118982288","1118982295","NG","NGA","NIGERIA" -"1118982296","1118982303","US","USA","UNITED STATES" -"1118982304","1118982311","KE","KEN","KENYA" -"1118982312","1118982327","NG","NGA","NIGERIA" -"1118982328","1118982335","US","USA","UNITED STATES" -"1118982336","1118982367","NG","NGA","NIGERIA" -"1118982368","1118982383","US","USA","UNITED STATES" -"1118982384","1118982391","NI","NIC","NICARAGUA" -"1118982392","1118982399","US","USA","UNITED STATES" -"1118982400","1118982407","NI","NIC","NICARAGUA" -"1118982408","1118982415","NG","NGA","NIGERIA" -"1118982416","1118982431","SV","SLV","EL SALVADOR" -"1118982432","1118982439","NI","NIC","NICARAGUA" -"1118982440","1118982447","NG","NGA","NIGERIA" -"1118982448","1118982463","US","USA","UNITED STATES" -"1118982464","1118982471","NI","NIC","NICARAGUA" -"1118982472","1118982479","NG","NGA","NIGERIA" -"1118982480","1118982487","US","USA","UNITED STATES" -"1118982488","1118982495","NI","NIC","NICARAGUA" -"1118982496","1118982543","NG","NGA","NIGERIA" -"1118982544","1118982551","NI","NIC","NICARAGUA" -"1118982552","1118982559","US","USA","UNITED STATES" -"1118982560","1118982567","NI","NIC","NICARAGUA" -"1118982568","1118982575","US","USA","UNITED STATES" -"1118982576","1118982583","NI","NIC","NICARAGUA" -"1118982584","1118982591","CM","CMR","CAMEROON" -"1118982592","1118982599","NG","NGA","NIGERIA" -"1118982600","1118982607","US","USA","UNITED STATES" -"1118982608","1118982615","NI","NIC","NICARAGUA" -"1118982616","1118982655","NG","NGA","NIGERIA" -"1118982656","1118982783","US","USA","UNITED STATES" -"1118982784","1118982911","NG","NGA","NIGERIA" -"1118982912","1118982919","LB","LBN","LEBANON" -"1118982920","1118982927","US","USA","UNITED STATES" -"1118982928","1118982935","NI","NIC","NICARAGUA" -"1118982936","1118983039","US","USA","UNITED STATES" -"1118983040","1118983047","NG","NGA","NIGERIA" -"1118983048","1118983079","US","USA","UNITED STATES" -"1118983080","1118983087","NG","NGA","NIGERIA" -"1118983088","1118983167","US","USA","UNITED STATES" -"1118983168","1118983199","AE","ARE","UNITED ARAB EMIRATES" -"1118983200","1118983295","US","USA","UNITED STATES" -"1118983296","1118983359","AE","ARE","UNITED ARAB EMIRATES" -"1118983360","1118983423","US","USA","UNITED STATES" -"1118983424","1118983679","NI","NIC","NICARAGUA" -"1118983680","1118983743","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"1118983744","1118983759","VE","VEN","VENEZUELA" -"1118983760","1118983871","US","USA","UNITED STATES" -"1118983872","1118983879","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"1118983880","1118984703","US","USA","UNITED STATES" -"1118984704","1118984775","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"1118984776","1118984783","IQ","IRQ","IRAQ" -"1118984784","1118984791","US","USA","UNITED STATES" -"1118984792","1118984799","NG","NGA","NIGERIA" -"1118984800","1118984831","US","USA","UNITED STATES" -"1118984832","1118984839","LB","LBN","LEBANON" -"1118984840","1118984855","US","USA","UNITED STATES" -"1118984856","1118984863","IQ","IRQ","IRAQ" -"1118984864","1118984887","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"1118984888","1118984959","US","USA","UNITED STATES" -"1118984960","1118985215","VE","VEN","VENEZUELA" -"1118985216","1118985983","US","USA","UNITED STATES" -"1118985984","1118986111","NG","NGA","NIGERIA" -"1118986112","1118986239","US","USA","UNITED STATES" -"1118986240","1118987007","GB","GBR","UNITED KINGDOM" -"1118987008","1118987263","US","USA","UNITED STATES" -"1118987264","1118988287","KE","KEN","KENYA" -"1118988288","1118988543","CA","CAN","CANADA" -"1118988544","1118988575","NG","NGA","NIGERIA" -"1118988576","1118988615","US","USA","UNITED STATES" -"1118988616","1118988623","GB","GBR","UNITED KINGDOM" -"1118988624","1118988735","US","USA","UNITED STATES" -"1118988736","1118988751","GB","GBR","UNITED KINGDOM" -"1118988752","1118988799","US","USA","UNITED STATES" -"1118988800","1118989055","VE","VEN","VENEZUELA" -"1118989056","1118989183","KE","KEN","KENYA" -"1118989184","1118989311","GB","GBR","UNITED KINGDOM" -"1118989312","1118989823","KE","KEN","KENYA" -"1118989824","1118989951","US","USA","UNITED STATES" -"1118989952","1118990079","FR","FRA","FRANCE" -"1118990080","1118990719","US","USA","UNITED STATES" -"1118990720","1118990727","KE","KEN","KENYA" -"1118990728","1118991487","US","USA","UNITED STATES" -"1118991488","1118991615","LR","LBR","LIBERIA" -"1118991616","1118992639","US","USA","UNITED STATES" -"1118992640","1118992655","KE","KEN","KENYA" -"1118992656","1118993919","US","USA","UNITED STATES" -"1118993920","1118994431","GY","GUY","GUYANA" -"1118994432","1119109119","US","USA","UNITED STATES" -"1119109120","1119111167","CA","CAN","CANADA" -"1119113216","1119150079","US","USA","UNITED STATES" -"1119158272","1119211519","US","USA","UNITED STATES" -"1119211520","1119215615","CA","CAN","CANADA" -"1119215616","1119289343","US","USA","UNITED STATES" -"1119289344","1119354879","CA","CAN","CANADA" -"1119354880","1119428607","US","USA","UNITED STATES" -"1119428608","1119432703","VI","VIR","VIRGIN ISLANDS, U.S." -"1119432704","1119436799","CA","CAN","CANADA" -"1119436800","1119440895","US","USA","UNITED STATES" -"1119440896","1119444991","CA","CAN","CANADA" -"1119444992","1119469567","US","USA","UNITED STATES" -"1119469568","1119477759","CA","CAN","CANADA" -"1119477760","1119502335","US","USA","UNITED STATES" -"1119502336","1119510527","CA","CAN","CANADA" -"1119510528","1119567871","US","USA","UNITED STATES" -"1119571968","1119580159","US","USA","UNITED STATES" -"1119580160","1119584255","CA","CAN","CANADA" -"1119584256","1120041983","US","USA","UNITED STATES" -"1120041984","1120042495","AR","ARG","ARGENTINA" -"1120042496","1120064511","US","USA","UNITED STATES" -"1120064512","1120064767","AR","ARG","ARGENTINA" -"1120064768","1120149503","US","USA","UNITED STATES" -"1120149504","1120149599","CA","CAN","CANADA" -"1120149600","1120149631","US","USA","UNITED STATES" -"1120149632","1120150031","CA","CAN","CANADA" -"1120150032","1120150039","TW","TWN","TAIWAN" -"1120150040","1120150047","CA","CAN","CANADA" -"1120150048","1120150055","US","USA","UNITED STATES" -"1120150056","1120151695","CA","CAN","CANADA" -"1120151696","1120151711","TW","TWN","TAIWAN" -"1120151712","1120152159","CA","CAN","CANADA" -"1120152160","1120152191","US","USA","UNITED STATES" -"1120152192","1120152319","CA","CAN","CANADA" -"1120152320","1120152575","US","USA","UNITED STATES" -"1120152576","1120153599","CA","CAN","CANADA" -"1120153600","1120272383","US","USA","UNITED STATES" -"1120272384","1120281087","CA","CAN","CANADA" -"1120281088","1120281095","PG","PNG","PAPUA NEW GUINEA" -"1120281096","1120281103","US","USA","UNITED STATES" -"1120281104","1120281111","CA","CAN","CANADA" -"1120281112","1120281119","US","USA","UNITED STATES" -"1120281120","1120281135","ZA","ZAF","SOUTH AFRICA" -"1120281136","1120281375","CA","CAN","CANADA" -"1120281376","1120281383","AR","ARG","ARGENTINA" -"1120281384","1120281391","US","USA","UNITED STATES" -"1120281392","1120281407","ZA","ZAF","SOUTH AFRICA" -"1120281408","1120281599","CA","CAN","CANADA" -"1120281600","1120282111","US","USA","UNITED STATES" -"1120282112","1120286719","CA","CAN","CANADA" -"1120286720","1120288767","US","USA","UNITED STATES" -"1120288768","1120299007","CA","CAN","CANADA" -"1120299008","1120299263","PK","PAK","PAKISTAN" -"1120299264","1120299519","CA","CAN","CANADA" -"1120299520","1120300799","PK","PAK","PAKISTAN" -"1120300800","1120306687","CA","CAN","CANADA" -"1120306688","1120306943","PH","PHL","PHILIPPINES" -"1120306944","1120310015","CA","CAN","CANADA" -"1120310016","1120310271","PH","PHL","PHILIPPINES" -"1120310272","1120312063","CA","CAN","CANADA" -"1120312064","1120312447","PH","PHL","PHILIPPINES" -"1120312448","1120312575","CA","CAN","CANADA" -"1120312576","1120312831","PH","PHL","PHILIPPINES" -"1120312832","1120321535","CA","CAN","CANADA" -"1120321536","1120346111","US","USA","UNITED STATES" -"1120346112","1120350207","CA","CAN","CANADA" -"1120350208","1120370943","US","USA","UNITED STATES" -"1120370944","1120371199","CA","CAN","CANADA" -"1120371200","1120372223","US","USA","UNITED STATES" -"1120372224","1120372479","CA","CAN","CANADA" -"1120372480","1120372735","US","USA","UNITED STATES" -"1120372736","1120373247","CA","CAN","CANADA" -"1120373248","1120373503","US","USA","UNITED STATES" -"1120373504","1120373759","CA","CAN","CANADA" -"1120373760","1120376831","US","USA","UNITED STATES" -"1120376832","1120377087","CA","CAN","CANADA" -"1120377088","1120377855","US","USA","UNITED STATES" -"1120377856","1120378367","CA","CAN","CANADA" -"1120378368","1120378623","US","USA","UNITED STATES" -"1120378624","1120378879","CA","CAN","CANADA" -"1120378880","1120379391","US","USA","UNITED STATES" -"1120379392","1120379647","CA","CAN","CANADA" -"1120379648","1120379999","US","USA","UNITED STATES" -"1120380000","1120380015","CA","CAN","CANADA" -"1120380016","1120380415","US","USA","UNITED STATES" -"1120380416","1120380431","VG","VGB","VIRGIN ISLANDS, BRITISH" -"1120380432","1120381439","US","USA","UNITED STATES" -"1120381440","1120381951","CA","CAN","CANADA" -"1120381952","1120382463","US","USA","UNITED STATES" -"1120382464","1120382719","CA","CAN","CANADA" -"1120382720","1120383999","US","USA","UNITED STATES" -"1120384000","1120385023","CA","CAN","CANADA" -"1120385024","1120509951","US","USA","UNITED STATES" -"1120509952","1120516095","SV","SLV","EL SALVADOR" -"1120516096","1120517375","US","USA","UNITED STATES" -"1120517376","1120517631","AR","ARG","ARGENTINA" -"1120517632","1120517887","US","USA","UNITED STATES" -"1120517888","1120518143","CL","CHL","CHILE" -"1120518144","1120534527","CA","CAN","CANADA" -"1120534528","1120641023","US","USA","UNITED STATES" -"1120641024","1120657407","CA","CAN","CANADA" -"1120657408","1120733183","US","USA","UNITED STATES" -"1120733184","1120735231","BB","BRB","BARBADOS" -"1120735232","1120735487","US","USA","UNITED STATES" -"1120735488","1120735743","BB","BRB","BARBADOS" -"1120735744","1120736207","US","USA","UNITED STATES" -"1120736208","1120736223","PY","PRY","PARAGUAY" -"1120736224","1120736991","US","USA","UNITED STATES" -"1120736992","1120737007","KN","KNA","SAINT KITTS AND NEVIS" -"1120737008","1120737023","US","USA","UNITED STATES" -"1120737024","1120737279","BS","BHS","BAHAMAS" -"1120737280","1120739951","US","USA","UNITED STATES" -"1120739952","1120739983","MX","MEX","MEXICO" -"1120739984","1120739991","US","USA","UNITED STATES" -"1120739992","1120740079","MX","MEX","MEXICO" -"1120740080","1120740095","US","USA","UNITED STATES" -"1120740096","1120740351","MX","MEX","MEXICO" -"1120740352","1120741375","TT","TTO","TRINIDAD AND TOBAGO" -"1120741376","1120741631","US","USA","UNITED STATES" -"1120741632","1120741887","MX","MEX","MEXICO" -"1120741888","1120743423","US","USA","UNITED STATES" -"1120743424","1120743679","KN","KNA","SAINT KITTS AND NEVIS" -"1120743680","1120744447","US","USA","UNITED STATES" -"1120744448","1120744703","KN","KNA","SAINT KITTS AND NEVIS" -"1120744704","1120804863","US","USA","UNITED STATES" -"1120808960","1120854015","US","USA","UNITED STATES" -"1120854016","1120862207","CA","CAN","CANADA" -"1120862208","1120870399","US","USA","UNITED STATES" -"1120874496","1120886783","US","USA","UNITED STATES" -"1120886784","1120894975","CA","CAN","CANADA" -"1120894976","1120911359","US","USA","UNITED STATES" -"1120911360","1120914415","CA","CAN","CANADA" -"1120914416","1120914431","AT","AUT","AUSTRIA" -"1120914432","1120914687","CA","CAN","CANADA" -"1120914688","1120914719","AG","ATG","ANTIGUA AND BARBUDA" -"1120914720","1120918623","CA","CAN","CANADA" -"1120918624","1120918639","US","USA","UNITED STATES" -"1120918640","1120919551","CA","CAN","CANADA" -"1120919552","1121005567","US","USA","UNITED STATES" -"1121005568","1121009663","CA","CAN","CANADA" -"1121009664","1121038335","US","USA","UNITED STATES" -"1121038336","1121042431","CA","CAN","CANADA" -"1121042432","1121230847","US","USA","UNITED STATES" -"1121230848","1121239039","CA","CAN","CANADA" -"1121239040","1121247231","US","USA","UNITED STATES" -"1121247232","1121247519","CA","CAN","CANADA" -"1121247520","1121247527","BZ","BLZ","BELIZE" -"1121247528","1121247535","CA","CAN","CANADA" -"1121247536","1121247543","BZ","BLZ","BELIZE" -"1121247544","1121247663","CA","CAN","CANADA" -"1121247664","1121247679","BZ","BLZ","BELIZE" -"1121247680","1121248127","CA","CAN","CANADA" -"1121248128","1121248135","MT","MLT","MALTA" -"1121248136","1121248311","CA","CAN","CANADA" -"1121248312","1121248319","MT","MLT","MALTA" -"1121248320","1121248343","CA","CAN","CANADA" -"1121248344","1121248351","BZ","BLZ","BELIZE" -"1121248352","1121248407","CA","CAN","CANADA" -"1121248408","1121248431","GB","GBR","UNITED KINGDOM" -"1121248432","1121248447","CA","CAN","CANADA" -"1121248448","1121248495","BZ","BLZ","BELIZE" -"1121248496","1121248911","CA","CAN","CANADA" -"1121248912","1121248919","BZ","BLZ","BELIZE" -"1121248920","1121250183","CA","CAN","CANADA" -"1121250184","1121250191","BZ","BLZ","BELIZE" -"1121250192","1121250303","CA","CAN","CANADA" -"1121250304","1121250815","BZ","BLZ","BELIZE" -"1121250816","1121251071","CA","CAN","CANADA" -"1121251072","1121251079","GB","GBR","UNITED KINGDOM" -"1121251080","1121251607","CA","CAN","CANADA" -"1121251608","1121251615","BZ","BLZ","BELIZE" -"1121251616","1121251663","CA","CAN","CANADA" -"1121251664","1121251671","MT","MLT","MALTA" -"1121251672","1121251727","CA","CAN","CANADA" -"1121251728","1121251775","BZ","BLZ","BELIZE" -"1121251776","1121251839","CA","CAN","CANADA" -"1121251840","1121251847","BZ","BLZ","BELIZE" -"1121251848","1121252863","CA","CAN","CANADA" -"1121252864","1121253119","BZ","BLZ","BELIZE" -"1121253120","1121255423","CA","CAN","CANADA" -"1121255424","1121655439","US","USA","UNITED STATES" -"1121655440","1121655447","VE","VEN","VENEZUELA" -"1121655448","1121878015","US","USA","UNITED STATES" -"1121878016","1121910783","CA","CAN","CANADA" -"1121910784","1122074623","US","USA","UNITED STATES" -"1122074624","1122087935","CA","CAN","CANADA" -"1122087936","1122088191","US","USA","UNITED STATES" -"1122088192","1122091007","CA","CAN","CANADA" -"1122091008","1122092799","US","USA","UNITED STATES" -"1122092800","1122093055","CA","CAN","CANADA" -"1122093056","1122140159","US","USA","UNITED STATES" -"1122140160","1122148351","CA","CAN","CANADA" -"1122148352","1122270207","US","USA","UNITED STATES" -"1122270208","1122270215","EG","EGY","EGYPT" -"1122270216","1122320959","US","USA","UNITED STATES" -"1122320960","1122320995","PT","PRT","PORTUGAL" -"1122320996","1122411551","US","USA","UNITED STATES" -"1122411552","1122411583","AU","AUS","AUSTRALIA" -"1122411584","1122412287","US","USA","UNITED STATES" -"1122412288","1122412543","AU","AUS","AUSTRALIA" -"1122412544","1122414335","US","USA","UNITED STATES" -"1122414336","1122414591","AU","AUS","AUSTRALIA" -"1122414592","1122416383","US","USA","UNITED STATES" -"1122416384","1122416639","DM","DMA","DOMINICA" -"1122416640","1122417919","US","USA","UNITED STATES" -"1122417920","1122418175","AU","AUS","AUSTRALIA" -"1122418176","1122430975","US","USA","UNITED STATES" -"1122435072","1122451455","US","USA","UNITED STATES" -"1122451456","1122455551","CO","COL","COLOMBIA" -"1122455552","1122476031","US","USA","UNITED STATES" -"1122476032","1122480127","PR","PRI","PUERTO RICO" -"1122480128","1122480415","US","USA","UNITED STATES" -"1122480416","1122480423","CL","CHL","CHILE" -"1122480424","1122535423","US","USA","UNITED STATES" -"1122535424","1122538495","KR","KOR","REPUBLIC OF KOREA" -"1122538496","1122635775","US","USA","UNITED STATES" -"1122635776","1122639871","CA","CAN","CANADA" -"1122639872","1123057663","US","USA","UNITED STATES" -"1123057664","1123074047","CA","CAN","CANADA" -"1123074048","1123119103","US","USA","UNITED STATES" -"1123123200","1123127295","CA","CAN","CANADA" -"1123127296","1123180543","US","USA","UNITED STATES" -"1123180544","1123184639","CA","CAN","CANADA" -"1123184640","1123319807","US","USA","UNITED STATES" -"1123319808","1123323903","CA","CAN","CANADA" -"1123323904","1123336191","US","USA","UNITED STATES" -"1123336192","1123352575","CA","CAN","CANADA" -"1123352576","1123397631","US","USA","UNITED STATES" -"1123398656","1123399679","US","USA","UNITED STATES" -"1123401728","1123534847","US","USA","UNITED STATES" -"1123534848","1123536895","AW","ABW","ARUBA" -"1123536896","1123582239","US","USA","UNITED STATES" -"1123582240","1123582271","CY","CYP","CYPRUS" -"1123582272","1123582431","US","USA","UNITED STATES" -"1123582432","1123582463","CA","CAN","CANADA" -"1123582464","1123583455","US","USA","UNITED STATES" -"1123583456","1123583519","CY","CYP","CYPRUS" -"1123583520","1123588063","US","USA","UNITED STATES" -"1123588064","1123588095","CY","CYP","CYPRUS" -"1123588096","1123589631","US","USA","UNITED STATES" -"1123589632","1123589887","CA","CAN","CANADA" -"1123589888","1123590143","US","USA","UNITED STATES" -"1123590144","1123598335","VI","VIR","VIRGIN ISLANDS, U.S." -"1123598336","1123651583","US","USA","UNITED STATES" -"1123651584","1123655679","JM","JAM","JAMAICA" -"1123655680","1123663871","US","USA","UNITED STATES" -"1123663872","1123667967","SV","SLV","EL SALVADOR" -"1123667968","1123670015","PR","PRI","PUERTO RICO" -"1123670016","1123671039","US","USA","UNITED STATES" -"1123671040","1123672063","PY","PRY","PARAGUAY" -"1123672064","1123794943","US","USA","UNITED STATES" -"1123794944","1123795199","DO","DOM","DOMINICAN REPUBLIC" -"1123795200","1123801087","US","USA","UNITED STATES" -"1123801088","1123801343","RU","RUS","RUSSIAN FEDERATION" -"1123801344","1123848191","US","USA","UNITED STATES" -"1123848192","1123852287","CA","CAN","CANADA" -"1123852288","1123950591","US","USA","UNITED STATES" -"1123950592","1123958783","CA","CAN","CANADA" -"1123958784","1125064703","US","USA","UNITED STATES" -"1125064704","1125065215","GB","GBR","UNITED KINGDOM" -"1125065216","1125081087","US","USA","UNITED STATES" -"1125081088","1125081151","CL","CHL","CHILE" -"1125081152","1125081183","CA","CAN","CANADA" -"1125081184","1125081215","US","USA","UNITED STATES" -"1125081216","1125081279","GB","GBR","UNITED KINGDOM" -"1125081280","1125081855","US","USA","UNITED STATES" -"1125081856","1125082111","DE","DEU","GERMANY" -"1125082112","1125082367","US","USA","UNITED STATES" -"1125082368","1125082623","DE","DEU","GERMANY" -"1125082624","1125082655","US","USA","UNITED STATES" -"1125082656","1125082687","UY","URY","URUGUAY" -"1125082688","1125082783","US","USA","UNITED STATES" -"1125082784","1125082799","UY","URY","URUGUAY" -"1125082800","1125083007","US","USA","UNITED STATES" -"1125083008","1125083023","RU","RUS","RUSSIAN FEDERATION" -"1125083024","1125083967","US","USA","UNITED STATES" -"1125083968","1125084031","UY","URY","URUGUAY" -"1125084032","1125084063","US","USA","UNITED STATES" -"1125084064","1125084095","SE","SWE","SWEDEN" -"1125084096","1125085135","US","USA","UNITED STATES" -"1125085136","1125085151","DE","DEU","GERMANY" -"1125085152","1125086079","US","USA","UNITED STATES" -"1125086080","1125086143","AU","AUS","AUSTRALIA" -"1125086144","1125087999","US","USA","UNITED STATES" -"1125088000","1125088255","CA","CAN","CANADA" -"1125088256","1125090303","US","USA","UNITED STATES" -"1125090304","1125090335","AU","AUS","AUSTRALIA" -"1125090336","1125090367","US","USA","UNITED STATES" -"1125090368","1125090431","ZA","ZAF","SOUTH AFRICA" -"1125090432","1125090479","US","USA","UNITED STATES" -"1125090480","1125090495","DE","DEU","GERMANY" -"1125090496","1125091087","US","USA","UNITED STATES" -"1125091088","1125091103","CA","CAN","CANADA" -"1125091104","1125091135","US","USA","UNITED STATES" -"1125091136","1125091167","SK","SVK","SLOVAKIA" -"1125091168","1125091183","US","USA","UNITED STATES" -"1125091184","1125091199","UY","URY","URUGUAY" -"1125091200","1125091455","US","USA","UNITED STATES" -"1125091456","1125091519","ES","ESP","SPAIN" -"1125091520","1125091583","US","USA","UNITED STATES" -"1125091584","1125091647","GB","GBR","UNITED KINGDOM" -"1125091648","1125091663","US","USA","UNITED STATES" -"1125091664","1125091679","HU","HUN","HUNGARY" -"1125091680","1125091711","SE","SWE","SWEDEN" -"1125091712","1125091743","CA","CAN","CANADA" -"1125091744","1125091759","US","USA","UNITED STATES" -"1125091760","1125091775","UY","URY","URUGUAY" -"1125091776","1125091839","CA","CAN","CANADA" -"1125091840","1125093471","US","USA","UNITED STATES" -"1125093472","1125093503","IL","ISR","ISRAEL" -"1125093504","1125093567","SK","SVK","SLOVAKIA" -"1125093568","1125093631","AU","AUS","AUSTRALIA" -"1125093632","1125094463","US","USA","UNITED STATES" -"1125094464","1125094527","BR","BRA","BRAZIL" -"1125094528","1125094655","US","USA","UNITED STATES" -"1125094656","1125094671","GB","GBR","UNITED KINGDOM" -"1125094672","1125094783","US","USA","UNITED STATES" -"1125094784","1125094799","GB","GBR","UNITED KINGDOM" -"1125094800","1125094847","CA","CAN","CANADA" -"1125094848","1125094911","BR","BRA","BRAZIL" -"1125094912","1125095039","AU","AUS","AUSTRALIA" -"1125095040","1125095167","GB","GBR","UNITED KINGDOM" -"1125095168","1125095183","BE","BEL","BELGIUM" -"1125095184","1125095295","US","USA","UNITED STATES" -"1125095296","1125095327","AU","AUS","AUSTRALIA" -"1125095328","1125096959","US","USA","UNITED STATES" -"1125096960","1125097087","AR","ARG","ARGENTINA" -"1125097088","1125097119","US","USA","UNITED STATES" -"1125097120","1125097151","TH","THA","THAILAND" -"1125097152","1125097215","US","USA","UNITED STATES" -"1125097216","1125097279","AU","AUS","AUSTRALIA" -"1125097280","1125097343","BR","BRA","BRAZIL" -"1125097344","1125097407","US","USA","UNITED STATES" -"1125097408","1125097439","IL","ISR","ISRAEL" -"1125097440","1125097455","US","USA","UNITED STATES" -"1125097456","1125097471","GB","GBR","UNITED KINGDOM" -"1125097472","1125097791","US","USA","UNITED STATES" -"1125097792","1125097823","ES","ESP","SPAIN" -"1125097824","1125097855","AU","AUS","AUSTRALIA" -"1125097856","1125097871","JO","JOR","JORDAN" -"1125097872","1125097887","UY","URY","URUGUAY" -"1125097888","1125097919","US","USA","UNITED STATES" -"1125097920","1125097983","IL","ISR","ISRAEL" -"1125097984","1125099775","US","USA","UNITED STATES" -"1125099776","1125100031","GB","GBR","UNITED KINGDOM" -"1125100032","1125103487","US","USA","UNITED STATES" -"1125103488","1125103519","UY","URY","URUGUAY" -"1125103520","1125106063","US","USA","UNITED STATES" -"1125106064","1125106111","CA","CAN","CANADA" -"1125106112","1125106175","GB","GBR","UNITED KINGDOM" -"1125106176","1125106207","AU","AUS","AUSTRALIA" -"1125106208","1125106223","TR","TUR","TURKEY" -"1125106224","1125106239","FR","FRA","FRANCE" -"1125106240","1125106255","UY","URY","URUGUAY" -"1125106256","1125106271","FR","FRA","FRANCE" -"1125106272","1125106303","US","USA","UNITED STATES" -"1125106304","1125106367","DE","DEU","GERMANY" -"1125106368","1125110271","US","USA","UNITED STATES" -"1125110272","1125110335","GB","GBR","UNITED KINGDOM" -"1125110336","1125110399","US","USA","UNITED STATES" -"1125110400","1125110463","KW","KWT","KUWAIT" -"1125110464","1125110783","US","USA","UNITED STATES" -"1125110784","1125110911","TR","TUR","TURKEY" -"1125110912","1125110927","UY","URY","URUGUAY" -"1125110928","1125110943","TW","TWN","TAIWAN" -"1125110944","1125110959","CA","CAN","CANADA" -"1125110960","1125110975","US","USA","UNITED STATES" -"1125110976","1125111039","MA","MAR","MOROCCO" -"1125111040","1125111423","US","USA","UNITED STATES" -"1125111424","1125111439","BR","BRA","BRAZIL" -"1125111440","1125111455","US","USA","UNITED STATES" -"1125111456","1125111471","CA","CAN","CANADA" -"1125111472","1125111487","US","USA","UNITED STATES" -"1125111488","1125111519","GB","GBR","UNITED KINGDOM" -"1125111520","1125111535","IL","ISR","ISRAEL" -"1125111536","1125111743","US","USA","UNITED STATES" -"1125111744","1125111775","DE","DEU","GERMANY" -"1125111776","1125112447","US","USA","UNITED STATES" -"1125112448","1125112511","PL","POL","POLAND" -"1125112512","1125112767","US","USA","UNITED STATES" -"1125112768","1125112783","GB","GBR","UNITED KINGDOM" -"1125112784","1125112831","US","USA","UNITED STATES" -"1125112832","1125113087","MA","MAR","MOROCCO" -"1125113088","1125115647","US","USA","UNITED STATES" -"1125115648","1125115663","ES","ESP","SPAIN" -"1125115664","1125115727","US","USA","UNITED STATES" -"1125115728","1125115743","ES","ESP","SPAIN" -"1125115744","1125116159","US","USA","UNITED STATES" -"1125116160","1125116191","BR","BRA","BRAZIL" -"1125116192","1125116223","TR","TUR","TURKEY" -"1125116224","1125116415","US","USA","UNITED STATES" -"1125116416","1125116671","MA","MAR","MOROCCO" -"1125116672","1125116959","US","USA","UNITED STATES" -"1125116960","1125116991","JP","JPN","JAPAN" -"1125116992","1125117023","US","USA","UNITED STATES" -"1125117024","1125117055","BR","BRA","BRAZIL" -"1125117056","1125117151","US","USA","UNITED STATES" -"1125117152","1125117167","UY","URY","URUGUAY" -"1125117168","1125117183","US","USA","UNITED STATES" -"1125117184","1125117439","MA","MAR","MOROCCO" -"1125117440","1125118495","US","USA","UNITED STATES" -"1125118496","1125118511","BR","BRA","BRAZIL" -"1125118512","1125118527","US","USA","UNITED STATES" -"1125118528","1125118559","UY","URY","URUGUAY" -"1125118560","1125118591","TR","TUR","TURKEY" -"1125118592","1125118655","US","USA","UNITED STATES" -"1125118656","1125118687","IL","ISR","ISRAEL" -"1125118688","1125118719","BR","BRA","BRAZIL" -"1125118720","1125119199","US","USA","UNITED STATES" -"1125119200","1125119231","TR","TUR","TURKEY" -"1125119232","1125119743","US","USA","UNITED STATES" -"1125119744","1125119871","RO","ROM","ROMANIA" -"1125119872","1125119903","US","USA","UNITED STATES" -"1125119904","1125119935","IL","ISR","ISRAEL" -"1125119936","1125119967","JP","JPN","JAPAN" -"1125119968","1125120255","US","USA","UNITED STATES" -"1125120256","1125120511","MA","MAR","MOROCCO" -"1125120512","1125120767","US","USA","UNITED STATES" -"1125120768","1125120799","UY","URY","URUGUAY" -"1125120800","1125120831","IL","ISR","ISRAEL" -"1125120832","1125120847","TH","THA","THAILAND" -"1125120848","1125120863","US","USA","UNITED STATES" -"1125120864","1125120895","GB","GBR","UNITED KINGDOM" -"1125120896","1125121023","RO","ROM","ROMANIA" -"1125121024","1125457919","US","USA","UNITED STATES" -"1125459200","1125459455","US","USA","UNITED STATES" -"1125462016","1125474303","US","USA","UNITED STATES" -"1125474304","1125478399","CA","CAN","CANADA" -"1125478400","1125498879","US","USA","UNITED STATES" -"1125498880","1125515263","CA","CAN","CANADA" -"1125515264","1125531647","US","USA","UNITED STATES" -"1125531648","1125543935","CA","CAN","CANADA" -"1125543936","1125545983","US","USA","UNITED STATES" -"1125548032","1125552127","CA","CAN","CANADA" -"1125556224","1125560319","US","USA","UNITED STATES" -"1125564416","1125572607","US","USA","UNITED STATES" -"1125572608","1125576703","CA","CAN","CANADA" -"1125576704","1125593087","US","USA","UNITED STATES" -"1125597184","1125613567","US","USA","UNITED STATES" -"1125613568","1125617663","CA","CAN","CANADA" -"1125617664","1125626623","US","USA","UNITED STATES" -"1125626624","1125626879","IN","IND","INDIA" -"1125626880","1125642239","US","USA","UNITED STATES" -"1125646336","1126009343","US","USA","UNITED STATES" -"1126009344","1126009599","AR","ARG","ARGENTINA" -"1126009600","1126924287","US","USA","UNITED STATES" -"1126924288","1126928383","CA","CAN","CANADA" -"1126928384","1126948863","US","USA","UNITED STATES" -"1126948864","1126952959","CA","CAN","CANADA" -"1126952960","1127677951","US","USA","UNITED STATES" -"1127677952","1127694335","CA","CAN","CANADA" -"1127694336","1127874559","US","USA","UNITED STATES" -"1127882752","1127923711","US","USA","UNITED STATES" -"1127923712","1127931903","CA","CAN","CANADA" -"1127931904","1128529919","US","USA","UNITED STATES" -"1128529920","1128641023","CA","CAN","CANADA" -"1128641024","1128641535","US","USA","UNITED STATES" -"1128641536","1128792063","CA","CAN","CANADA" -"1128792064","1128818687","US","USA","UNITED STATES" -"1128818688","1128818719","CA","CAN","CANADA" -"1128818720","1130536959","US","USA","UNITED STATES" -"1130536960","1130539007","GU","GUM","GUAM" -"1130539008","1132764423","US","USA","UNITED STATES" -"1132764424","1132764431","MX","MEX","MEXICO" -"1132764432","1132947431","US","USA","UNITED STATES" -"1132947432","1132947439","CA","CAN","CANADA" -"1132947440","1133785471","US","USA","UNITED STATES" -"1133785472","1133785503","GB","GBR","UNITED KINGDOM" -"1133785504","1134440447","US","USA","UNITED STATES" -"1134444544","1134448639","CA","CAN","CANADA" -"1134448640","1134546943","US","USA","UNITED STATES" -"1134546944","1134551039","CA","CAN","CANADA" -"1134551040","1136517007","US","USA","UNITED STATES" -"1136517008","1136517023","GB","GBR","UNITED KINGDOM" -"1136517024","1136517039","US","USA","UNITED STATES" -"1136517040","1136517055","GB","GBR","UNITED KINGDOM" -"1136517056","1136721919","US","USA","UNITED STATES" -"1136721920","1136787455","CA","CAN","CANADA" -"1136787456","1137195519","US","USA","UNITED STATES" -"1137195520","1137195775","JP","JPN","JAPAN" -"1137195776","1137278975","US","USA","UNITED STATES" -"1137278976","1137283071","CA","CAN","CANADA" -"1137283072","1137287167","US","USA","UNITED STATES" -"1137287168","1137295359","CA","CAN","CANADA" -"1137295360","1137426431","US","USA","UNITED STATES" -"1137426432","1137442815","PR","PRI","PUERTO RICO" -"1137442816","1137459199","CA","CAN","CANADA" -"1137459200","1137491967","US","USA","UNITED STATES" -"1137491968","1137508351","CA","CAN","CANADA" -"1137508352","1137524735","US","USA","UNITED STATES" -"1137524736","1137541119","CA","CAN","CANADA" -"1137541120","1137598463","US","USA","UNITED STATES" -"1137606656","1137623039","US","USA","UNITED STATES" -"1137623040","1137639423","PR","PRI","PUERTO RICO" -"1137639424","1137704959","US","USA","UNITED STATES" -"1137704960","1137713151","CA","CAN","CANADA" -"1137713152","1137843711","US","USA","UNITED STATES" -"1137843712","1137843775","NO","NOR","NORWAY" -"1137843776","1137868799","US","USA","UNITED STATES" -"1137868800","1137872895","CA","CAN","CANADA" -"1137872896","1137876991","US","USA","UNITED STATES" -"1137876992","1137881087","CA","CAN","CANADA" -"1137881088","1137889279","US","USA","UNITED STATES" -"1137889280","1137893375","CA","CAN","CANADA" -"1137893376","1137917951","US","USA","UNITED STATES" -"1137917952","1137922047","CA","CAN","CANADA" -"1137922048","1137926143","US","USA","UNITED STATES" -"1137926144","1137934335","CA","CAN","CANADA" -"1137934336","1137953023","US","USA","UNITED STATES" -"1137953024","1137954815","CA","CAN","CANADA" -"1137954816","1137963007","US","USA","UNITED STATES" -"1137963008","1137967103","VI","VIR","VIRGIN ISLANDS, U.S." -"1137967104","1137975295","CA","CAN","CANADA" -"1137975296","1137983487","US","USA","UNITED STATES" -"1137983488","1137983839","CA","CAN","CANADA" -"1137983840","1137983863","RU","RUS","RUSSIAN FEDERATION" -"1137983864","1137991679","CA","CAN","CANADA" -"1137991680","1138049023","US","USA","UNITED STATES" -"1138049024","1138049919","CA","CAN","CANADA" -"1138049920","1138050047","US","USA","UNITED STATES" -"1138050048","1138050175","CA","CAN","CANADA" -"1138050176","1138050303","US","USA","UNITED STATES" -"1138050304","1138061311","CA","CAN","CANADA" -"1138061312","1138163711","US","USA","UNITED STATES" -"1138163712","1138167039","CA","CAN","CANADA" -"1138167040","1138167199","MA","MAR","MOROCCO" -"1138167200","1138167807","CA","CAN","CANADA" -"1138167808","1138175999","US","USA","UNITED STATES" -"1138176000","1138180095","CA","CAN","CANADA" -"1138180096","1138188287","US","USA","UNITED STATES" -"1138188288","1138192383","PR","PRI","PUERTO RICO" -"1138192384","1138196479","US","USA","UNITED STATES" -"1138196480","1138204671","CA","CAN","CANADA" -"1138204672","1138212863","US","USA","UNITED STATES" -"1138212864","1138216959","CA","CAN","CANADA" -"1138216960","1138417663","US","USA","UNITED STATES" -"1138417664","1138417695","CA","CAN","CANADA" -"1138417696","1138420735","US","USA","UNITED STATES" -"1138420736","1138420991","CA","CAN","CANADA" -"1138420992","1138480127","US","USA","UNITED STATES" -"1138480128","1138482687","AU","AUS","AUSTRALIA" -"1138482688","1138499583","US","USA","UNITED STATES" -"1138499584","1138503679","CA","CAN","CANADA" -"1138503680","1138544895","US","USA","UNITED STATES" -"1138544896","1138545151","GB","GBR","UNITED KINGDOM" -"1138545152","1138548735","US","USA","UNITED STATES" -"1138548736","1138556927","CA","CAN","CANADA" -"1138556928","1138593791","US","USA","UNITED STATES" -"1138593792","1138597887","CA","CAN","CANADA" -"1138597888","1138704383","US","USA","UNITED STATES" -"1138704384","1138716671","CA","CAN","CANADA" -"1138716672","1138720767","US","USA","UNITED STATES" -"1138720768","1138728959","CA","CAN","CANADA" -"1138728960","1138774015","US","USA","UNITED STATES" -"1138774016","1138778111","CA","CAN","CANADA" -"1138778112","1138786303","US","USA","UNITED STATES" -"1138786304","1138819071","PR","PRI","PUERTO RICO" -"1138819072","1138851839","CA","CAN","CANADA" -"1138851840","1138917375","US","USA","UNITED STATES" -"1138917376","1138937855","CA","CAN","CANADA" -"1138941952","1138950143","CA","CAN","CANADA" -"1138950144","1139146751","US","USA","UNITED STATES" -"1139146752","1139154943","GT","GTM","GUATEMALA" -"1139154944","1139167231","JM","JAM","JAMAICA" -"1139167232","1139179519","US","USA","UNITED STATES" -"1139179520","1139195903","CA","CAN","CANADA" -"1139195904","1139204095","US","USA","UNITED STATES" -"1139212288","1139261439","US","USA","UNITED STATES" -"1139261440","1139265023","CA","CAN","CANADA" -"1139265024","1139265535","US","USA","UNITED STATES" -"1139265536","1139269631","CA","CAN","CANADA" -"1139269632","1140793343","US","USA","UNITED STATES" -"1140850688","1145141247","US","USA","UNITED STATES" -"1145142784","1145188351","US","USA","UNITED STATES" -"1145188352","1145192447","CA","CAN","CANADA" -"1145192448","1145249791","US","USA","UNITED STATES" -"1145249792","1145257983","CA","CAN","CANADA" -"1145257984","1145262079","US","USA","UNITED STATES" -"1145262080","1145266175","CA","CAN","CANADA" -"1145266176","1145307135","US","USA","UNITED STATES" -"1145307136","1145311231","CA","CAN","CANADA" -"1145315328","1145376767","US","USA","UNITED STATES" -"1145376768","1145380863","CA","CAN","CANADA" -"1145380864","1145405439","US","USA","UNITED STATES" -"1145405440","1145409535","CA","CAN","CANADA" -"1145413632","1145421823","US","USA","UNITED STATES" -"1145421824","1145430015","CA","CAN","CANADA" -"1145430016","1145434111","US","USA","UNITED STATES" -"1145438208","1145475071","US","USA","UNITED STATES" -"1145479168","1145491455","US","USA","UNITED STATES" -"1145503744","1145520127","CA","CAN","CANADA" -"1145520128","1145552895","US","USA","UNITED STATES" -"1145552896","1145556991","CA","CAN","CANADA" -"1145556992","1150287871","US","USA","UNITED STATES" -"1150287872","1150812159","CA","CAN","CANADA" -"1150812160","1151885311","US","USA","UNITED STATES" -"1151889408","1151897599","CA","CAN","CANADA" -"1151897600","1151909887","US","USA","UNITED STATES" -"1151913984","1151950847","US","USA","UNITED STATES" -"1151959040","1152020479","US","USA","UNITED STATES" -"1152024576","1152028671","US","USA","UNITED STATES" -"1152032768","1152045055","US","USA","UNITED STATES" -"1152049152","1152057343","US","USA","UNITED STATES" -"1152057344","1152061439","CA","CAN","CANADA" -"1152061440","1152073727","US","USA","UNITED STATES" -"1152073728","1152077823","CA","CAN","CANADA" -"1152077824","1152081919","US","USA","UNITED STATES" -"1152086016","1152094207","US","USA","UNITED STATES" -"1152098304","1152102399","US","USA","UNITED STATES" -"1152106496","1152114687","US","USA","UNITED STATES" -"1152114688","1152122879","CA","CAN","CANADA" -"1152122880","1152581631","US","USA","UNITED STATES" -"1152581632","1152614399","CA","CAN","CANADA" -"1152614400","1152778239","US","USA","UNITED STATES" -"1152778240","1152843775","CA","CAN","CANADA" -"1152843776","1156055039","US","USA","UNITED STATES" -"1156063232","1156071423","US","USA","UNITED STATES" -"1156071424","1156079615","CA","CAN","CANADA" -"1156079616","1156157439","US","USA","UNITED STATES" -"1156161536","1156259839","US","USA","UNITED STATES" -"1156268032","1156276223","US","USA","UNITED STATES" -"1156284416","1156296703","US","USA","UNITED STATES" -"1156296704","1156300799","CA","CAN","CANADA" -"1156300800","1157713663","US","USA","UNITED STATES" -"1157713664","1157713791","CA","CAN","CANADA" -"1157713792","1157931007","US","USA","UNITED STATES" -"1157931008","1157935103","BS","BHS","BAHAMAS" -"1157935104","1157943295","US","USA","UNITED STATES" -"1157943296","1157947391","CA","CAN","CANADA" -"1157947392","1157950919","US","USA","UNITED STATES" -"1157950920","1157950975","HK","HKG","HONG KONG" -"1157950976","1158027263","US","USA","UNITED STATES" -"1158027264","1158027519","CA","CAN","CANADA" -"1158027520","1158028287","US","USA","UNITED STATES" -"1158028288","1158028543","CA","CAN","CANADA" -"1158028544","1158041599","US","USA","UNITED STATES" -"1158045696","1158148095","US","USA","UNITED STATES" -"1158148096","1158152191","CA","CAN","CANADA" -"1158152192","1158193151","US","USA","UNITED STATES" -"1158197248","1158294719","US","USA","UNITED STATES" -"1158294720","1158294751","GB","GBR","UNITED KINGDOM" -"1158294752","1158295807","US","USA","UNITED STATES" -"1158295808","1158296063","GB","GBR","UNITED KINGDOM" -"1158296064","1158316031","US","USA","UNITED STATES" -"1158316032","1158320031","CA","CAN","CANADA" -"1158320032","1158320047","SY","SYR","SYRIAN ARAB REPUBLIC" -"1158320048","1158322671","CA","CAN","CANADA" -"1158322672","1158322687","SY","SYR","SYRIAN ARAB REPUBLIC" -"1158322688","1158324223","CA","CAN","CANADA" -"1158324224","1158328319","US","USA","UNITED STATES" -"1158332416","1158340607","US","USA","UNITED STATES" -"1158340608","1158343199","CA","CAN","CANADA" -"1158343200","1158343231","US","USA","UNITED STATES" -"1158343232","1158344703","CA","CAN","CANADA" -"1158344704","1158348799","US","USA","UNITED STATES" -"1158348800","1158381567","CA","CAN","CANADA" -"1158381568","1158774783","US","USA","UNITED STATES" -"1158774784","1158791167","CA","CAN","CANADA" -"1158791168","1158794239","BM","BMU","BERMUDA" -"1158794240","1158794495","US","USA","UNITED STATES" -"1158794496","1158799359","BM","BMU","BERMUDA" -"1158799360","1158807551","CA","CAN","CANADA" -"1158807552","1158995967","US","USA","UNITED STATES" -"1158995968","1159004159","CA","CAN","CANADA" -"1159004160","1159213055","US","USA","UNITED STATES" -"1159213056","1159217151","CA","CAN","CANADA" -"1159217152","1159314367","US","USA","UNITED STATES" -"1159314368","1159314383","BR","BRA","BRAZIL" -"1159314384","1159348223","US","USA","UNITED STATES" -"1159348224","1159356415","CA","CAN","CANADA" -"1159356416","1159421951","US","USA","UNITED STATES" -"1159421952","1159430143","CA","CAN","CANADA" -"1159430144","1159512575","US","USA","UNITED STATES" -"1159512576","1159512831","CA","CAN","CANADA" -"1159512832","1159514111","US","USA","UNITED STATES" -"1159514112","1159514367","CA","CAN","CANADA" -"1159514368","1159515391","US","USA","UNITED STATES" -"1159515392","1159515647","CA","CAN","CANADA" -"1159515648","1159515807","US","USA","UNITED STATES" -"1159515808","1159515839","CA","CAN","CANADA" -"1159515840","1159515903","US","USA","UNITED STATES" -"1159515904","1159516159","CA","CAN","CANADA" -"1159516160","1159519743","US","USA","UNITED STATES" -"1159519744","1159520255","CA","CAN","CANADA" -"1159520256","1159521535","US","USA","UNITED STATES" -"1159521536","1159521791","CA","CAN","CANADA" -"1159521792","1159522287","US","USA","UNITED STATES" -"1159522288","1159522303","VG","VGB","VIRGIN ISLANDS, BRITISH" -"1159522304","1159522815","CA","CAN","CANADA" -"1159522816","1159523583","US","USA","UNITED STATES" -"1159523584","1159523839","CA","CAN","CANADA" -"1159523840","1159524095","US","USA","UNITED STATES" -"1159524096","1159524351","CA","CAN","CANADA" -"1159524352","1159525375","US","USA","UNITED STATES" -"1159525376","1159526399","CA","CAN","CANADA" -"1159526400","1159527935","US","USA","UNITED STATES" -"1159527936","1159528191","CA","CAN","CANADA" -"1159528192","1159700479","US","USA","UNITED STATES" -"1159700480","1159725055","CA","CAN","CANADA" -"1159725056","1160011775","US","USA","UNITED STATES" -"1160011776","1160019967","CA","CAN","CANADA" -"1160019968","1160364031","US","USA","UNITED STATES" -"1160364032","1160368127","CA","CAN","CANADA" -"1160368128","1160392703","US","USA","UNITED STATES" -"1160392704","1160395519","CA","CAN","CANADA" -"1160395520","1160395775","US","USA","UNITED STATES" -"1160395776","1160396799","CA","CAN","CANADA" -"1160396800","1160397007","US","USA","UNITED STATES" -"1160397008","1160397023","GB","GBR","UNITED KINGDOM" -"1160397024","1160415637","US","USA","UNITED STATES" -"1160415638","1160415733","KN","KNA","SAINT KITTS AND NEVIS" -"1160415734","1160425471","US","USA","UNITED STATES" -"1160425472","1160429567","CA","CAN","CANADA" -"1160429568","1160543327","US","USA","UNITED STATES" -"1160543328","1160543359","MX","MEX","MEXICO" -"1160543360","1160544055","US","USA","UNITED STATES" -"1160544056","1160544071","CA","CAN","CANADA" -"1160544072","1160547839","US","USA","UNITED STATES" -"1160547840","1160548351","MX","MEX","MEXICO" -"1160548352","1160563199","US","USA","UNITED STATES" -"1160563200","1160563711","MP","MNP","NORTHERN MARIANA ISLANDS" -"1160563712","1160609791","US","USA","UNITED STATES" -"1160609792","1160610815","MX","MEX","MEXICO" -"1160610816","1160658943","US","USA","UNITED STATES" -"1160667136","1160675327","CA","CAN","CANADA" -"1160675328","1160677015","US","USA","UNITED STATES" -"1160677016","1160677023","AR","ARG","ARGENTINA" -"1160677024","1160677247","US","USA","UNITED STATES" -"1160677248","1160677279","GB","GBR","UNITED KINGDOM" -"1160677280","1160677375","US","USA","UNITED STATES" -"1160677376","1160677439","GB","GBR","UNITED KINGDOM" -"1160677440","1160678399","US","USA","UNITED STATES" -"1160678400","1160678655","MX","MEX","MEXICO" -"1160678656","1160683519","US","USA","UNITED STATES" -"1160683520","1160691711","CA","CAN","CANADA" -"1160691712","1160701439","US","USA","UNITED STATES" -"1160701440","1160701567","KY","CYM","CAYMAN ISLANDS" -"1160701568","1160702447","US","USA","UNITED STATES" -"1160702448","1160702455","KY","CYM","CAYMAN ISLANDS" -"1160702456","1160702703","US","USA","UNITED STATES" -"1160702704","1160702711","KY","CYM","CAYMAN ISLANDS" -"1160702712","1160702783","US","USA","UNITED STATES" -"1160702784","1160702847","KY","CYM","CAYMAN ISLANDS" -"1160702848","1160808255","US","USA","UNITED STATES" -"1160808256","1160808287","CA","CAN","CANADA" -"1160808288","1160811551","US","USA","UNITED STATES" -"1160811552","1160811559","BE","BEL","BELGIUM" -"1160811560","1160847359","US","USA","UNITED STATES" -"1160847360","1160855551","CA","CAN","CANADA" -"1160855552","1160863999","US","USA","UNITED STATES" -"1160864000","1160864255","CA","CAN","CANADA" -"1160864256","1160921087","US","USA","UNITED STATES" -"1160921088","1160925183","AG","ATG","ANTIGUA AND BARBUDA" -"1160925184","1160941535","US","USA","UNITED STATES" -"1160941536","1160941567","CA","CAN","CANADA" -"1160941568","1160945663","US","USA","UNITED STATES" -"1160953856","1161019391","US","USA","UNITED STATES" -"1161019392","1161035775","CA","CAN","CANADA" -"1161035776","1161285631","US","USA","UNITED STATES" -"1161289728","1161293823","US","USA","UNITED STATES" -"1161293824","1161297919","CA","CAN","CANADA" -"1161297920","1161298303","US","USA","UNITED STATES" -"1161298304","1161298311","IL","ISR","ISRAEL" -"1161298312","1161304591","US","USA","UNITED STATES" -"1161304592","1161304599","AU","AUS","AUSTRALIA" -"1161304600","1161311743","US","USA","UNITED STATES" -"1161311744","1161311759","KN","KNA","SAINT KITTS AND NEVIS" -"1161311760","1161311991","US","USA","UNITED STATES" -"1161311992","1161311999","KN","KNA","SAINT KITTS AND NEVIS" -"1161312000","1161312839","US","USA","UNITED STATES" -"1161312840","1161312855","BS","BHS","BAHAMAS" -"1161312856","1161312863","US","USA","UNITED STATES" -"1161312864","1161312871","BS","BHS","BAHAMAS" -"1161312872","1161312991","US","USA","UNITED STATES" -"1161312992","1161312999","IL","ISR","ISRAEL" -"1161313000","1161313127","US","USA","UNITED STATES" -"1161313128","1161313135","BS","BHS","BAHAMAS" -"1161313136","1161314151","US","USA","UNITED STATES" -"1161314152","1161314159","CA","CAN","CANADA" -"1161314160","1161363455","US","USA","UNITED STATES" -"1161363456","1161367551","CA","CAN","CANADA" -"1161367552","1161416703","US","USA","UNITED STATES" -"1161420800","1161422079","AG","ATG","ANTIGUA AND BARBUDA" -"1161422080","1161422335","VG","VGB","VIRGIN ISLANDS, BRITISH" -"1161422336","1161422591","LC","LCA","SAINT LUCIA" -"1161422592","1161422847","AG","ATG","ANTIGUA AND BARBUDA" -"1161422848","1161423103","LC","LCA","SAINT LUCIA" -"1161423104","1161423359","VG","VGB","VIRGIN ISLANDS, BRITISH" -"1161423360","1161423871","AG","ATG","ANTIGUA AND BARBUDA" -"1161423872","1161424127","LC","LCA","SAINT LUCIA" -"1161424128","1161424383","AG","ATG","ANTIGUA AND BARBUDA" -"1161424384","1161424639","KN","KNA","SAINT KITTS AND NEVIS" -"1161424640","1161424895","LC","LCA","SAINT LUCIA" -"1161424896","1161425151","VG","VGB","VIRGIN ISLANDS, BRITISH" -"1161425152","1161425407","DM","DMA","DOMINICA" -"1161425408","1161427199","AG","ATG","ANTIGUA AND BARBUDA" -"1161427200","1161427455","VG","VGB","VIRGIN ISLANDS, BRITISH" -"1161427456","1161428223","AG","ATG","ANTIGUA AND BARBUDA" -"1161428224","1161428991","KN","KNA","SAINT KITTS AND NEVIS" -"1161428992","1161453567","US","USA","UNITED STATES" -"1161453568","1161457663","CA","CAN","CANADA" -"1161457664","1161576447","US","USA","UNITED STATES" -"1161576448","1161580543","CA","CAN","CANADA" -"1161580544","1161617407","US","USA","UNITED STATES" -"1161617408","1161625599","CA","CAN","CANADA" -"1161625600","1161653503","US","USA","UNITED STATES" -"1161653504","1161653759","CA","CAN","CANADA" -"1161653760","1161764863","US","USA","UNITED STATES" -"1161764864","1161773055","CA","CAN","CANADA" -"1161777152","1161818111","US","USA","UNITED STATES" -"1161818112","1161822207","CA","CAN","CANADA" -"1161822208","1161837567","US","USA","UNITED STATES" -"1161837568","1161837823","JP","JPN","JAPAN" -"1161837824","1162018815","US","USA","UNITED STATES" -"1162018816","1162022911","CA","CAN","CANADA" -"1162022912","1162027007","US","USA","UNITED STATES" -"1162031104","1162059775","US","USA","UNITED STATES" -"1162059776","1162067967","CA","CAN","CANADA" -"1162067968","1162215423","US","USA","UNITED STATES" -"1162215424","1162280959","CA","CAN","CANADA" -"1162280960","1162297343","US","USA","UNITED STATES" -"1162297344","1162305535","CA","CAN","CANADA" -"1162305536","1162330111","US","USA","UNITED STATES" -"1162334208","1162394463","US","USA","UNITED STATES" -"1162394464","1162394471","GB","GBR","UNITED KINGDOM" -"1162394472","1162461183","US","USA","UNITED STATES" -"1162461184","1162461695","BB","BRB","BARBADOS" -"1162461696","1162462207","GD","GRD","GRENADA" -"1162462208","1162462975","BB","BRB","BARBADOS" -"1162462976","1162463999","VC","VCT","SAINT VINCENT AND THE GRENADINES" -"1162464000","1162465279","BB","BRB","BARBADOS" -"1162465280","1162465535","GD","GRD","GRENADA" -"1162465536","1162470911","BB","BRB","BARBADOS" -"1162470912","1162471423","GD","GRD","GRENADA" -"1162471424","1162472703","BB","BRB","BARBADOS" -"1162472704","1162473471","VC","VCT","SAINT VINCENT AND THE GRENADINES" -"1162473472","1162475007","GD","GRD","GRENADA" -"1162475008","1162477567","BB","BRB","BARBADOS" -"1162477568","1162715135","US","USA","UNITED STATES" -"1162715136","1162723327","CA","CAN","CANADA" -"1162723328","1162805247","US","USA","UNITED STATES" -"1162805248","1162811391","PR","PRI","PUERTO RICO" -"1162811392","1162811647","AN","ANT","NETHERLANDS ANTILLES" -"1162811648","1162812159","US","USA","UNITED STATES" -"1162812160","1162812415","DO","DOM","DOMINICAN REPUBLIC" -"1162812416","1162813439","BS","BHS","BAHAMAS" -"1162813440","1162821631","CO","COL","COLOMBIA" -"1162821632","1162823679","PR","PRI","PUERTO RICO" -"1162823680","1162825727","GT","GTM","GUATEMALA" -"1162825728","1162827775","US","USA","UNITED STATES" -"1162827776","1162833919","PR","PRI","PUERTO RICO" -"1162833920","1162835967","GT","GTM","GUATEMALA" -"1162835968","1162836223","BS","BHS","BAHAMAS" -"1162836224","1162836735","AN","ANT","NETHERLANDS ANTILLES" -"1162836736","1162836991","US","USA","UNITED STATES" -"1162836992","1162838015","BS","BHS","BAHAMAS" -"1162838016","1162870783","CO","COL","COLOMBIA" -"1162903552","1162932223","US","USA","UNITED STATES" -"1162936320","1163407359","US","USA","UNITED STATES" -"1163407360","1163411455","CA","CAN","CANADA" -"1163411456","1163527023","US","USA","UNITED STATES" -"1163527024","1163527039","VG","VGB","VIRGIN ISLANDS, BRITISH" -"1163527040","1163531007","US","USA","UNITED STATES" -"1163531008","1163532287","CA","CAN","CANADA" -"1163532288","1163533055","US","USA","UNITED STATES" -"1163533056","1163533311","CA","CAN","CANADA" -"1163533312","1163533567","US","USA","UNITED STATES" -"1163533568","1163533631","CA","CAN","CANADA" -"1163533632","1163536127","US","USA","UNITED STATES" -"1163536128","1163536383","CA","CAN","CANADA" -"1163536384","1163537663","US","USA","UNITED STATES" -"1163537664","1163537919","CA","CAN","CANADA" -"1163537920","1163538175","US","USA","UNITED STATES" -"1163538176","1163540479","CA","CAN","CANADA" -"1163540480","1163540735","US","USA","UNITED STATES" -"1163540736","1163541503","CA","CAN","CANADA" -"1163541504","1163542527","US","USA","UNITED STATES" -"1163542528","1163542783","CA","CAN","CANADA" -"1163542784","1163543295","US","USA","UNITED STATES" -"1163543296","1163543551","CA","CAN","CANADA" -"1163543552","1163544063","US","USA","UNITED STATES" -"1163544064","1163544319","CA","CAN","CANADA" -"1163544320","1163544511","US","USA","UNITED STATES" -"1163544512","1163544575","CA","CAN","CANADA" -"1163544576","1163544831","US","USA","UNITED STATES" -"1163544832","1163545087","CA","CAN","CANADA" -"1163545088","1163546623","US","USA","UNITED STATES" -"1163546624","1163546879","CA","CAN","CANADA" -"1163546880","1163547135","US","USA","UNITED STATES" -"1163547136","1163547391","CA","CAN","CANADA" -"1163547392","1163547567","US","USA","UNITED STATES" -"1163547568","1163547583","VG","VGB","VIRGIN ISLANDS, BRITISH" -"1163547584","1163547647","US","USA","UNITED STATES" -"1163547648","1163547903","CA","CAN","CANADA" -"1163547904","1163548159","US","USA","UNITED STATES" -"1163548160","1163548927","CA","CAN","CANADA" -"1163548928","1163549695","US","USA","UNITED STATES" -"1163549696","1163550207","CA","CAN","CANADA" -"1163550208","1163551455","US","USA","UNITED STATES" -"1163551456","1163551487","CR","CRI","COSTA RICA" -"1163551488","1163551743","US","USA","UNITED STATES" -"1163551744","1163552255","CA","CAN","CANADA" -"1163552256","1163553023","US","USA","UNITED STATES" -"1163553024","1163553535","CA","CAN","CANADA" -"1163553536","1163556095","US","USA","UNITED STATES" -"1163556096","1163556607","CA","CAN","CANADA" -"1163556608","1163560959","US","USA","UNITED STATES" -"1163560960","1163561215","CA","CAN","CANADA" -"1163561216","1163561471","US","USA","UNITED STATES" -"1163561472","1163561727","CA","CAN","CANADA" -"1163561728","1163561983","FI","FIN","FINLAND" -"1163561984","1163562239","US","USA","UNITED STATES" -"1163562240","1163563007","CA","CAN","CANADA" -"1163563008","1163571199","US","USA","UNITED STATES" -"1163571200","1163571711","CA","CAN","CANADA" -"1163571712","1163575295","US","USA","UNITED STATES" -"1163575296","1163575551","CA","CAN","CANADA" -"1163575552","1163576639","US","USA","UNITED STATES" -"1163576640","1163576703","CA","CAN","CANADA" -"1163576704","1163577151","US","USA","UNITED STATES" -"1163577152","1163577215","CA","CAN","CANADA" -"1163577216","1163578367","US","USA","UNITED STATES" -"1163578368","1163578495","CA","CAN","CANADA" -"1163578496","1163579135","US","USA","UNITED STATES" -"1163579136","1163579391","CA","CAN","CANADA" -"1163579392","1163581695","US","USA","UNITED STATES" -"1163581696","1163581951","CA","CAN","CANADA" -"1163581952","1163582207","US","USA","UNITED STATES" -"1163582208","1163583487","CA","CAN","CANADA" -"1163583488","1163588863","US","USA","UNITED STATES" -"1163588864","1163589631","CA","CAN","CANADA" -"1163589632","1167320679","US","USA","UNITED STATES" -"1167320680","1167320687","IN","IND","INDIA" -"1167320688","1167321959","US","USA","UNITED STATES" -"1167321960","1167321967","GB","GBR","UNITED KINGDOM" -"1167321968","1167322695","US","USA","UNITED STATES" -"1167322696","1167322703","IN","IND","INDIA" -"1167322704","1167323799","US","USA","UNITED STATES" -"1167323800","1167323807","IN","IND","INDIA" -"1167323808","1167323823","US","USA","UNITED STATES" -"1167323824","1167323831","IN","IND","INDIA" -"1167323832","1167325935","US","USA","UNITED STATES" -"1167325936","1167325951","CA","CAN","CANADA" -"1167325952","1167326207","US","USA","UNITED STATES" -"1167326208","1167326271","IN","IND","INDIA" -"1167326272","1167326303","US","USA","UNITED STATES" -"1167326304","1167326335","IN","IND","INDIA" -"1167326336","1167326367","SI","SVN","SLOVENIA" -"1167326368","1167326399","US","USA","UNITED STATES" -"1167326400","1167326431","IN","IND","INDIA" -"1167326432","1167326439","US","USA","UNITED STATES" -"1167326440","1167326447","IN","IND","INDIA" -"1167326448","1167326463","US","USA","UNITED STATES" -"1167326464","1167326719","IN","IND","INDIA" -"1167326720","1167326983","US","USA","UNITED STATES" -"1167326984","1167326991","IN","IND","INDIA" -"1167326992","1167327111","US","USA","UNITED STATES" -"1167327112","1167327119","IN","IND","INDIA" -"1167327120","1167327207","US","USA","UNITED STATES" -"1167327208","1167327215","IN","IND","INDIA" -"1167327216","1167851519","US","USA","UNITED STATES" -"1167851520","1168113663","CA","CAN","CANADA" -"1168113664","1168121855","US","USA","UNITED STATES" -"1168130048","1168138239","US","USA","UNITED STATES" -"1168146432","1168158719","US","USA","UNITED STATES" -"1168162816","1168211967","US","USA","UNITED STATES" -"1168211968","1168220159","CA","CAN","CANADA" -"1168228352","1168262767","US","USA","UNITED STATES" -"1168262768","1168262775","PK","PAK","PAKISTAN" -"1168262776","1168271687","US","USA","UNITED STATES" -"1168271688","1168271695","BR","BRA","BRAZIL" -"1168271696","1168318719","US","USA","UNITED STATES" -"1168318720","1168318975","CA","CAN","CANADA" -"1168318976","1168321535","US","USA","UNITED STATES" -"1168321536","1168321791","CA","CAN","CANADA" -"1168321792","1168330751","US","USA","UNITED STATES" -"1168343040","1168412671","US","USA","UNITED STATES" -"1168416768","1168420863","US","USA","UNITED STATES" -"1168424960","1168474111","US","USA","UNITED STATES" -"1168474112","1168502783","CA","CAN","CANADA" -"1168509440","1168509695","US","USA","UNITED STATES" -"1168509952","1168510975","US","USA","UNITED STATES" -"1168515072","1168535551","US","USA","UNITED STATES" -"1168539648","1168584703","US","USA","UNITED STATES" -"1168588800","1168625663","US","USA","UNITED STATES" -"1168637952","1168642047","US","USA","UNITED STATES" -"1168646144","1168670719","US","USA","UNITED STATES" -"1168670720","1168687103","CA","CAN","CANADA" -"1168687104","1168785407","US","USA","UNITED STATES" -"1168801792","1168859135","US","USA","UNITED STATES" -"1168859136","1168863231","CA","CAN","CANADA" -"1168863232","1168867327","US","USA","UNITED STATES" -"1168867328","1168875519","CA","CAN","CANADA" -"1168875520","1168887807","US","USA","UNITED STATES" -"1168900096","1168916479","US","USA","UNITED STATES" -"1168916480","1168932863","CA","CAN","CANADA" -"1168932864","1168936959","US","USA","UNITED STATES" -"1168949248","1168957695","US","USA","UNITED STATES" -"1168957696","1168957951","CA","CAN","CANADA" -"1168957952","1168963583","US","USA","UNITED STATES" -"1168963584","1168965119","CA","CAN","CANADA" -"1168965120","1168973823","US","USA","UNITED STATES" -"1168973824","1168982015","CA","CAN","CANADA" -"1168982016","1169076223","US","USA","UNITED STATES" -"1169080320","1169182975","US","USA","UNITED STATES" -"1169182976","1169183487","CA","CAN","CANADA" -"1169183488","1169184767","US","USA","UNITED STATES" -"1169184768","1169185023","CA","CAN","CANADA" -"1169185024","1169185535","US","USA","UNITED STATES" -"1169185536","1169186047","CA","CAN","CANADA" -"1169186048","1169186303","SG","SGP","SINGAPORE" -"1169186304","1169203199","US","USA","UNITED STATES" -"1169203200","1169211391","CA","CAN","CANADA" -"1169211392","1170374655","US","USA","UNITED STATES" -"1170407424","1170411519","US","USA","UNITED STATES" -"1170472960","1170481151","CA","CAN","CANADA" -"1170481152","1170489343","US","USA","UNITED STATES" -"1170489344","1170497535","CA","CAN","CANADA" -"1170497536","1170505727","US","USA","UNITED STATES" -"1170505728","1170522111","CA","CAN","CANADA" -"1170522112","1175977983","US","USA","UNITED STATES" -"1175977984","1176502271","CA","CAN","CANADA" -"1176502272","1176511831","US","USA","UNITED STATES" -"1176511832","1176511839","CA","CAN","CANADA" -"1176511840","1176513471","US","USA","UNITED STATES" -"1176513472","1176513503","IN","IND","INDIA" -"1176513504","1176513879","US","USA","UNITED STATES" -"1176513880","1176513887","GB","GBR","UNITED KINGDOM" -"1176513888","1176514271","US","USA","UNITED STATES" -"1176514272","1176514303","IN","IND","INDIA" -"1176514304","1176559615","US","USA","UNITED STATES" -"1176567808","1176613927","US","USA","UNITED STATES" -"1176613928","1176613935","CA","CAN","CANADA" -"1176613936","1176619007","US","USA","UNITED STATES" -"1176619008","1176620031","CY","CYP","CYPRUS" -"1176620032","1176621055","US","USA","UNITED STATES" -"1176621056","1176623103","CA","CAN","CANADA" -"1176623104","1176625151","US","USA","UNITED STATES" -"1176625152","1176629247","CA","CAN","CANADA" -"1176629248","1176629759","US","USA","UNITED STATES" -"1176629760","1176631039","CA","CAN","CANADA" -"1176631040","1176662015","US","USA","UNITED STATES" -"1176662016","1176666111","CA","CAN","CANADA" -"1176666112","1176702975","US","USA","UNITED STATES" -"1176702976","1176707071","CA","CAN","CANADA" -"1176707072","1176731647","US","USA","UNITED STATES" -"1176731648","1176735743","PR","PRI","PUERTO RICO" -"1176739840","1176743935","CA","CAN","CANADA" -"1176748032","1176752127","US","USA","UNITED STATES" -"1176756224","1176764415","US","USA","UNITED STATES" -"1176764416","1176768511","PM","SPM","SAINT PIERRE AND MIQUELON" -"1176768512","1176776703","US","USA","UNITED STATES" -"1176780800","1176784895","US","USA","UNITED STATES" -"1176788992","1176883199","US","USA","UNITED STATES" -"1176887296","1176895487","US","USA","UNITED STATES" -"1176895488","1176928255","CA","CAN","CANADA" -"1176928256","1177030655","US","USA","UNITED STATES" -"1177030656","1177033727","AG","ATG","ANTIGUA AND BARBUDA" -"1177033728","1177053695","US","USA","UNITED STATES" -"1177053696","1177053951","GB","GBR","UNITED KINGDOM" -"1177053952","1177354239","US","USA","UNITED STATES" -"1177354240","1177419775","PR","PRI","PUERTO RICO" -"1177419776","1177550847","US","USA","UNITED STATES" -"1177550848","1178000911","CA","CAN","CANADA" -"1178000912","1178000919","US","USA","UNITED STATES" -"1178000920","1178075135","CA","CAN","CANADA" -"1178075136","1178599423","US","USA","UNITED STATES" -"1178599424","1179910143","CA","CAN","CANADA" -"1179910144","1191673855","US","USA","UNITED STATES" -"1191673856","1191706623","CA","CAN","CANADA" -"1191706624","1192296447","US","USA","UNITED STATES" -"1192296448","1192361983","CA","CAN","CANADA" -"1192361984","1192427519","US","USA","UNITED STATES" -"1192427520","1192460287","CA","CAN","CANADA" -"1192493056","1207975935","US","USA","UNITED STATES" -"1207975936","1207980031","CA","CAN","CANADA" -"1207980032","1208008703","US","USA","UNITED STATES" -"1208008704","1208016895","CA","CAN","CANADA" -"1208016896","1208020991","US","USA","UNITED STATES" -"1208020992","1208025087","CA","CAN","CANADA" -"1208025088","1208050943","US","USA","UNITED STATES" -"1208050944","1208051199","CA","CAN","CANADA" -"1208051200","1208074239","US","USA","UNITED STATES" -"1208074240","1208082431","CA","CAN","CANADA" -"1208082432","1208090623","US","USA","UNITED STATES" -"1208090624","1208107007","CA","CAN","CANADA" -"1208107008","1208590335","US","USA","UNITED STATES" -"1208590336","1208598527","CA","CAN","CANADA" -"1208598528","1208647679","US","USA","UNITED STATES" -"1208647680","1208659967","CA","CAN","CANADA" -"1208659968","1208721407","US","USA","UNITED STATES" -"1208721408","1208729599","CA","CAN","CANADA" -"1208729600","1208770559","US","USA","UNITED STATES" -"1208770560","1208774655","CA","CAN","CANADA" -"1208774656","1208778751","US","USA","UNITED STATES" -"1208778752","1208795135","CA","CAN","CANADA" -"1208795136","1208832607","US","USA","UNITED STATES" -"1208832608","1208832623","IT","ITA","ITALY" -"1208832624","1208852479","US","USA","UNITED STATES" -"1208852480","1208860671","CA","CAN","CANADA" -"1208860672","1208918015","US","USA","UNITED STATES" -"1208918016","1208922111","CA","CAN","CANADA" -"1208922112","1208954879","US","USA","UNITED STATES" -"1208954880","1208958975","CA","CAN","CANADA" -"1208958976","1208975359","US","USA","UNITED STATES" -"1208975360","1208983551","CA","CAN","CANADA" -"1208983552","1209347839","US","USA","UNITED STATES" -"1209347840","1209348095","GB","GBR","UNITED KINGDOM" -"1209348096","1209434111","US","USA","UNITED STATES" -"1209434112","1209436671","BB","BRB","BARBADOS" -"1209436672","1209437183","VC","VCT","SAINT VINCENT AND THE GRENADINES" -"1209437184","1209440767","BB","BRB","BARBADOS" -"1209440768","1209441279","GD","GRD","GRENADA" -"1209441280","1209442303","BB","BRB","BARBADOS" -"1209442304","1209647103","US","USA","UNITED STATES" -"1209647104","1209663487","CA","CAN","CANADA" -"1209663488","1209729023","US","USA","UNITED STATES" -"1209729024","1209786367","JM","JAM","JAMAICA" -"1209786368","1209810943","US","USA","UNITED STATES" -"1209810944","1209819135","CA","CAN","CANADA" -"1209827328","1209885127","US","USA","UNITED STATES" -"1209885128","1209885143","IT","ITA","ITALY" -"1209885144","1209885167","US","USA","UNITED STATES" -"1209885168","1209885175","IT","ITA","ITALY" -"1209885176","1209917439","US","USA","UNITED STATES" -"1209917440","1209925631","CA","CAN","CANADA" -"1209925632","1210253311","US","USA","UNITED STATES" -"1210253312","1210254703","CA","CAN","CANADA" -"1210254704","1210254719","NZ","NZL","NEW ZEALAND" -"1210254720","1210261503","CA","CAN","CANADA" -"1210261504","1210366655","US","USA","UNITED STATES" -"1210366656","1210366719","GB","GBR","UNITED KINGDOM" -"1210366720","1210449919","US","USA","UNITED STATES" -"1210449920","1210580991","CA","CAN","CANADA" -"1210580992","1210925055","US","USA","UNITED STATES" -"1210925056","1210941439","CA","CAN","CANADA" -"1210941440","1211236351","US","USA","UNITED STATES" -"1211236352","1211269119","PR","PRI","PUERTO RICO" -"1211269120","1211304447","US","USA","UNITED STATES" -"1211304448","1211304703","CA","CAN","CANADA" -"1211304704","1211308175","US","USA","UNITED STATES" -"1211308176","1211308191","VG","VGB","VIRGIN ISLANDS, BRITISH" -"1211308192","1211308223","US","USA","UNITED STATES" -"1211308224","1211308543","CA","CAN","CANADA" -"1211308544","1211308703","US","USA","UNITED STATES" -"1211308704","1211308719","VG","VGB","VIRGIN ISLANDS, BRITISH" -"1211308720","1211308735","US","USA","UNITED STATES" -"1211308736","1211308751","VG","VGB","VIRGIN ISLANDS, BRITISH" -"1211308752","1211317503","US","USA","UNITED STATES" -"1211317504","1211317759","CA","CAN","CANADA" -"1211317760","1211318271","US","USA","UNITED STATES" -"1211318272","1211321343","BB","BRB","BARBADOS" -"1211321344","1211322367","VC","VCT","SAINT VINCENT AND THE GRENADINES" -"1211322368","1211322623","BB","BRB","BARBADOS" -"1211322624","1211324159","GD","GRD","GRENADA" -"1211324160","1211324927","VC","VCT","SAINT VINCENT AND THE GRENADINES" -"1211324928","1211333119","BB","BRB","BARBADOS" -"1211333120","1211333631","VC","VCT","SAINT VINCENT AND THE GRENADINES" -"1211333632","1211333887","GD","GRD","GRENADA" -"1211333888","1211334655","VG","VGB","VIRGIN ISLANDS, BRITISH" -"1211334656","1211413247","US","USA","UNITED STATES" -"1211413248","1211413503","CA","CAN","CANADA" -"1211413504","1211432959","US","USA","UNITED STATES" -"1211432960","1211473919","CA","CAN","CANADA" -"1211473920","1211596799","US","USA","UNITED STATES" -"1211596800","1211605247","CA","CAN","CANADA" -"1211605248","1211605311","BS","BHS","BAHAMAS" -"1211605312","1211610499","CA","CAN","CANADA" -"1211610500","1211610503","US","USA","UNITED STATES" -"1211610504","1211613183","CA","CAN","CANADA" -"1211613184","1216872447","US","USA","UNITED STATES" -"1216872448","1217396735","CA","CAN","CANADA" -"1217396736","1218778111","US","USA","UNITED STATES" -"1218778112","1218778367","SG","SGP","SINGAPORE" -"1218778368","1219256319","US","USA","UNITED STATES" -"1219256320","1219264511","CA","CAN","CANADA" -"1219264512","1219272703","US","USA","UNITED STATES" -"1219272704","1219276799","CA","CAN","CANADA" -"1219276800","1223199743","US","USA","UNITED STATES" -"1223199744","1223199999","GB","GBR","UNITED KINGDOM" -"1223200000","1223208831","US","USA","UNITED STATES" -"1223208832","1223208959","ES","ESP","SPAIN" -"1223208960","1224278111","US","USA","UNITED STATES" -"1224278112","1224278143","MY","MYS","MALAYSIA" -"1224278144","1224286719","US","USA","UNITED STATES" -"1224286720","1224286975","CA","CAN","CANADA" -"1224286976","1224290815","US","USA","UNITED STATES" -"1224290816","1224291071","CA","CAN","CANADA" -"1224291072","1224296447","US","USA","UNITED STATES" -"1224296448","1224296959","CA","CAN","CANADA" -"1224296960","1224299519","US","USA","UNITED STATES" -"1224299520","1224299775","CA","CAN","CANADA" -"1224299776","1224311247","US","USA","UNITED STATES" -"1224311248","1224311255","CA","CAN","CANADA" -"1224311256","1224311807","US","USA","UNITED STATES" -"1224311808","1224312319","CA","CAN","CANADA" -"1224312320","1224317439","US","USA","UNITED STATES" -"1224317440","1224317695","CA","CAN","CANADA" -"1224317696","1224318207","US","USA","UNITED STATES" -"1224318208","1224318463","CA","CAN","CANADA" -"1224318464","1224321023","US","USA","UNITED STATES" -"1224321024","1224321535","CA","CAN","CANADA" -"1224321536","1224474623","US","USA","UNITED STATES" -"1224474624","1224475647","GT","GTM","GUATEMALA" -"1224475648","1224476671","US","USA","UNITED STATES" -"1224476672","1224478719","AN","ANT","NETHERLANDS ANTILLES" -"1224478720","1224480767","US","USA","UNITED STATES" -"1224480768","1224484863","JM","JAM","JAMAICA" -"1224484864","1224493055","GT","GTM","GUATEMALA" -"1224493056","1224497151","US","USA","UNITED STATES" -"1224497152","1224501247","GT","GTM","GUATEMALA" -"1224501248","1224503551","JM","JAM","JAMAICA" -"1224503552","1224503807","BS","BHS","BAHAMAS" -"1224503808","1224523520","JM","JAM","JAMAICA" -"1224523521","1224523775","US","USA","UNITED STATES" -"1224523776","1224525568","JM","JAM","JAMAICA" -"1224525569","1224525823","US","USA","UNITED STATES" -"1224525824","1224527616","JM","JAM","JAMAICA" -"1224527617","1224527871","US","USA","UNITED STATES" -"1224527872","1224529664","JM","JAM","JAMAICA" -"1224529665","1224529919","US","USA","UNITED STATES" -"1224529920","1224539904","JM","JAM","JAMAICA" -"1224539905","1241743359","US","USA","UNITED STATES" -"1241743360","1241759743","CA","CAN","CANADA" -"1241759744","1242300415","US","USA","UNITED STATES" -"1242300416","1242562559","CA","CAN","CANADA" -"1242562560","1244659711","US","USA","UNITED STATES" -"1244659712","1244790783","CA","CAN","CANADA" -"1244790784","1244831743","US","USA","UNITED STATES" -"1244831744","1244839935","CA","CAN","CANADA" -"1244839936","1244848127","US","USA","UNITED STATES" -"1244848128","1244852223","CA","CAN","CANADA" -"1244852224","1244864511","US","USA","UNITED STATES" -"1244864512","1244872703","CA","CAN","CANADA" -"1244872704","1245183999","US","USA","UNITED STATES" -"1245184000","1245446143","CA","CAN","CANADA" -"1245446144","1246904319","US","USA","UNITED STATES" -"1246904320","1246912511","CA","CAN","CANADA" -"1246912512","1246924799","US","USA","UNITED STATES" -"1246928896","1246932991","US","USA","UNITED STATES" -"1246937088","1246945279","CA","CAN","CANADA" -"1246945280","1246949375","US","USA","UNITED STATES" -"1246953472","1247170743","US","USA","UNITED STATES" -"1247170744","1247170751","GB","GBR","UNITED KINGDOM" -"1247170752","1247170927","US","USA","UNITED STATES" -"1247170928","1247170935","GB","GBR","UNITED KINGDOM" -"1247170936","1247173319","US","USA","UNITED STATES" -"1247173320","1247173327","IE","IRL","IRELAND" -"1247173328","1247178703","US","USA","UNITED STATES" -"1247178704","1247178711","IE","IRL","IRELAND" -"1247178712","1247180399","US","USA","UNITED STATES" -"1247180400","1247180407","NO","NOR","NORWAY" -"1247180408","1247182343","US","USA","UNITED STATES" -"1247182344","1247182351","IE","IRL","IRELAND" -"1247182352","1247184559","US","USA","UNITED STATES" -"1247184560","1247184567","IE","IRL","IRELAND" -"1247184568","1247186703","US","USA","UNITED STATES" -"1247186704","1247186711","EG","EGY","EGYPT" -"1247186712","1247187199","US","USA","UNITED STATES" -"1247187200","1247187207","LB","LBN","LEBANON" -"1247187208","1247191127","US","USA","UNITED STATES" -"1247191128","1247191135","IE","IRL","IRELAND" -"1247191136","1247191199","US","USA","UNITED STATES" -"1247191200","1247191207","IE","IRL","IRELAND" -"1247191208","1247412223","US","USA","UNITED STATES" -"1247543296","1248864255","US","USA","UNITED STATES" -"1248864256","1248866303","CA","CAN","CANADA" -"1248866304","1248885759","US","USA","UNITED STATES" -"1248885760","1248886783","CA","CAN","CANADA" -"1248886784","1248899071","US","USA","UNITED STATES" -"1248899072","1248900095","CA","CAN","CANADA" -"1248900096","1248901119","US","USA","UNITED STATES" -"1248902144","1248913407","US","USA","UNITED STATES" -"1248913408","1248915455","MF","MAF","SAINT MARTIN" -"1248915456","1248919551","US","USA","UNITED STATES" -"1248919552","1248920575","CA","CAN","CANADA" -"1248920576","1248921599","US","USA","UNITED STATES" -"1248921600","1248923647","CA","CAN","CANADA" -"1248923648","1248931839","US","USA","UNITED STATES" -"1248933888","1248936959","US","USA","UNITED STATES" -"1248936960","1248939007","CA","CAN","CANADA" -"1248939008","1248946175","US","USA","UNITED STATES" -"1248946176","1248947199","VG","VGB","VIRGIN ISLANDS, BRITISH" -"1248947200","1248958463","US","USA","UNITED STATES" -"1248958464","1248959487","CA","CAN","CANADA" -"1248959488","1248964607","US","USA","UNITED STATES" -"1248964608","1248966655","CA","CAN","CANADA" -"1248966656","1249003519","US","USA","UNITED STATES" -"1249003520","1249005567","CA","CAN","CANADA" -"1249005568","1249010687","US","USA","UNITED STATES" -"1249010688","1249011711","CA","CAN","CANADA" -"1249011712","1249019903","US","USA","UNITED STATES" -"1249019904","1249020927","CA","CAN","CANADA" -"1249020928","1249029119","US","USA","UNITED STATES" -"1249029120","1249030143","CA","CAN","CANADA" -"1249030144","1249036287","US","USA","UNITED STATES" -"1249036288","1249037311","TC","TCA","TURKS AND CAICOS ISLANDS" -"1249037312","1249040383","CA","CAN","CANADA" -"1249040384","1249046527","US","USA","UNITED STATES" -"1249046528","1249047551","BM","BMU","BERMUDA" -"1249047552","1249063935","US","USA","UNITED STATES" -"1249064960","1249082367","US","USA","UNITED STATES" -"1249082368","1249083391","CA","CAN","CANADA" -"1249083392","1249099775","US","USA","UNITED STATES" -"1249099776","1249101823","CA","CAN","CANADA" -"1249101824","1249102847","PR","PRI","PUERTO RICO" -"1249102848","1249103871","CA","CAN","CANADA" -"1249103872","1249106943","US","USA","UNITED STATES" -"1249106944","1249107967","CA","CAN","CANADA" -"1249107968","1249130495","US","USA","UNITED STATES" -"1249130496","1249131519","JM","JAM","JAMAICA" -"1249131520","1249139711","US","USA","UNITED STATES" -"1249139712","1249140735","MF","MAF","SAINT MARTIN" -"1249140736","1249163263","US","USA","UNITED STATES" -"1249163264","1249167359","CA","CAN","CANADA" -"1249167360","1249171455","US","USA","UNITED STATES" -"1249171456","1249173503","CA","CAN","CANADA" -"1249173504","1249191935","US","USA","UNITED STATES" -"1249191936","1249193983","CA","CAN","CANADA" -"1249193984","1249203199","US","USA","UNITED STATES" -"1249203200","1249204223","GD","GRD","GRENADA" -"1249204224","1249210367","US","USA","UNITED STATES" -"1249210368","1249212415","KY","CYM","CAYMAN ISLANDS" -"1249212416","1249217535","US","USA","UNITED STATES" -"1249217536","1249218559","CA","CAN","CANADA" -"1249218560","1249236991","US","USA","UNITED STATES" -"1249236992","1249239039","KY","CYM","CAYMAN ISLANDS" -"1249239040","1249245183","US","USA","UNITED STATES" -"1249245184","1249247231","CA","CAN","CANADA" -"1249247232","1249256447","US","USA","UNITED STATES" -"1249256448","1249257471","CA","CAN","CANADA" -"1249257472","1249260543","US","USA","UNITED STATES" -"1249260544","1249261567","CA","CAN","CANADA" -"1249261568","1249272831","US","USA","UNITED STATES" -"1249272832","1249273855","CA","CAN","CANADA" -"1249273856","1249310719","US","USA","UNITED STATES" -"1249310720","1249311743","CA","CAN","CANADA" -"1249311744","1249312767","US","USA","UNITED STATES" -"1249312768","1249313791","CA","CAN","CANADA" -"1249313792","1249335295","US","USA","UNITED STATES" -"1249335296","1249337343","CA","CAN","CANADA" -"1249337344","1249349631","US","USA","UNITED STATES" -"1249350656","1249359871","US","USA","UNITED STATES" -"1249359872","1249361919","CA","CAN","CANADA" -"1249361920","1249384447","US","USA","UNITED STATES" -"1249384448","1249386495","PR","PRI","PUERTO RICO" -"1249386496","1249391615","US","USA","UNITED STATES" -"1249391616","1249392639","CA","CAN","CANADA" -"1249392640","1249396735","US","USA","UNITED STATES" -"1249396736","1249397759","CA","CAN","CANADA" -"1249397760","1249409023","US","USA","UNITED STATES" -"1249409024","1249410047","CA","CAN","CANADA" -"1249410048","1249452031","US","USA","UNITED STATES" -"1249452032","1249453055","CA","CAN","CANADA" -"1249453056","1249474559","US","USA","UNITED STATES" -"1249474560","1249475583","CA","CAN","CANADA" -"1249475584","1249484799","US","USA","UNITED STATES" -"1249484800","1249486847","CA","CAN","CANADA" -"1249486848","1249506303","US","USA","UNITED STATES" -"1249506304","1249507327","CA","CAN","CANADA" -"1249507328","1249522687","US","USA","UNITED STATES" -"1249522688","1249523711","CA","CAN","CANADA" -"1249523712","1249531903","US","USA","UNITED STATES" -"1249531904","1249533951","GD","GRD","GRENADA" -"1249533952","1249542143","US","USA","UNITED STATES" -"1249542144","1249544191","CA","CAN","CANADA" -"1249544192","1249562623","US","USA","UNITED STATES" -"1249562624","1249564671","CA","CAN","CANADA" -"1249564672","1249571839","US","USA","UNITED STATES" -"1249571840","1249572863","CA","CAN","CANADA" -"1249572864","1249576959","US","USA","UNITED STATES" -"1249576960","1249577983","CA","CAN","CANADA" -"1249577984","1249592319","US","USA","UNITED STATES" -"1249640448","1249677311","US","USA","UNITED STATES" -"1249681408","1249796095","US","USA","UNITED STATES" -"1249796096","1249804287","CA","CAN","CANADA" -"1249804288","1249886207","US","USA","UNITED STATES" -"1249886208","1249902591","CA","CAN","CANADA" -"1249902592","1254490111","US","USA","UNITED STATES" -"1254490112","1254555647","CA","CAN","CANADA" -"1254555648","1254621183","US","USA","UNITED STATES" -"1254621184","1254629375","CA","CAN","CANADA" -"1254629376","1254989823","US","USA","UNITED STATES" -"1254989824","1254998015","CA","CAN","CANADA" -"1254998016","1255002111","US","USA","UNITED STATES" -"1255002112","1255006207","CA","CAN","CANADA" -"1255006208","1255047167","US","USA","UNITED STATES" -"1255047168","1255055359","CA","CAN","CANADA" -"1255055360","1255062463","US","USA","UNITED STATES" -"1255062464","1255062527","PA","PAN","PANAMA" -"1255062528","1255063551","US","USA","UNITED STATES" -"1255063552","1255071743","PR","PRI","PUERTO RICO" -"1255071744","1255276543","US","USA","UNITED STATES" -"1255276544","1255342079","CA","CAN","CANADA" -"1255342080","1255372287","US","USA","UNITED STATES" -"1255372288","1255372543","CA","CAN","CANADA" -"1255372544","1255373823","US","USA","UNITED STATES" -"1255373824","1255374079","CA","CAN","CANADA" -"1255374080","1255489535","US","USA","UNITED STATES" -"1255489536","1255505919","PR","PRI","PUERTO RICO" -"1255505920","1255514111","US","USA","UNITED STATES" -"1255514112","1255522303","CA","CAN","CANADA" -"1255522304","1255571455","US","USA","UNITED STATES" -"1255571456","1255579647","CA","CAN","CANADA" -"1255579648","1255669759","US","USA","UNITED STATES" -"1255669760","1255735295","CA","CAN","CANADA" -"1255735296","1255771135","US","USA","UNITED STATES" -"1255771136","1255772159","CA","CAN","CANADA" -"1255772160","1255972863","US","USA","UNITED STATES" -"1255972864","1255981055","CA","CAN","CANADA" -"1255981056","1256001535","US","USA","UNITED STATES" -"1256001536","1256005631","CA","CAN","CANADA" -"1256005632","1256079359","US","USA","UNITED STATES" -"1256079360","1256087551","KY","CYM","CAYMAN ISLANDS" -"1256087552","1263264273","US","USA","UNITED STATES" -"1263264274","1263264289","PK","PAK","PAKISTAN" -"1263264290","1263264305","CA","CAN","CANADA" -"1263264306","1263264354","PK","PAK","PAKISTAN" -"1263264355","1263267327","US","USA","UNITED STATES" -"1263267328","1263267583","CA","CAN","CANADA" -"1263267584","1263268095","US","USA","UNITED STATES" -"1263268096","1263268191","CA","CAN","CANADA" -"1263268192","1263268275","US","USA","UNITED STATES" -"1263268276","1263268340","CA","CAN","CANADA" -"1263268341","1263268607","US","USA","UNITED STATES" -"1263268608","1263268672","CA","CAN","CANADA" -"1263268673","1263268769","US","USA","UNITED STATES" -"1263268770","1263268863","CA","CAN","CANADA" -"1263268864","1263271423","US","USA","UNITED STATES" -"1263271424","1263271679","CA","CAN","CANADA" -"1263271680","1264738303","US","USA","UNITED STATES" -"1264779264","1265102847","US","USA","UNITED STATES" -"1265106944","1266147327","US","USA","UNITED STATES" -"1266147328","1266155519","CA","CAN","CANADA" -"1266155520","1266489663","US","USA","UNITED STATES" -"1266489664","1266489695","CA","CAN","CANADA" -"1266489696","1266498175","US","USA","UNITED STATES" -"1266498176","1266498303","MA","MAR","MOROCCO" -"1266498304","1266514815","US","USA","UNITED STATES" -"1266514816","1266514879","CA","CAN","CANADA" -"1266514880","1266551519","US","USA","UNITED STATES" -"1266551520","1266551527","PH","PHL","PHILIPPINES" -"1266551528","1266554207","US","USA","UNITED STATES" -"1266554208","1266554215","SA","SAU","SAUDI ARABIA" -"1266554216","1266559095","US","USA","UNITED STATES" -"1266559096","1266559103","SA","SAU","SAUDI ARABIA" -"1266559104","1266559415","US","USA","UNITED STATES" -"1266559416","1266559423","CA","CAN","CANADA" -"1266559424","1266565031","US","USA","UNITED STATES" -"1266565032","1266565039","SA","SAU","SAUDI ARABIA" -"1266565040","1266569567","US","USA","UNITED STATES" -"1266569568","1266569575","NO","NOR","NORWAY" -"1266569576","1266574631","US","USA","UNITED STATES" -"1266574632","1266574639","TR","TUR","TURKEY" -"1266574640","1266581535","US","USA","UNITED STATES" -"1266581536","1266581543","IE","IRL","IRELAND" -"1266581544","1266581551","US","USA","UNITED STATES" -"1266581552","1266581559","IE","IRL","IRELAND" -"1266581560","1266583679","US","USA","UNITED STATES" -"1266583680","1266583687","ID","IDN","INDONESIA" -"1266583688","1266587511","US","USA","UNITED STATES" -"1266587512","1266587519","EG","EGY","EGYPT" -"1266587520","1266587631","US","USA","UNITED STATES" -"1266587632","1266587639","GB","GBR","UNITED KINGDOM" -"1266587640","1266589295","US","USA","UNITED STATES" -"1266589296","1266589303","IE","IRL","IRELAND" -"1266589304","1266599295","US","USA","UNITED STATES" -"1266599296","1266599303","IE","IRL","IRELAND" -"1266599304","1266599559","US","USA","UNITED STATES" -"1266599560","1266599567","SA","SAU","SAUDI ARABIA" -"1266599568","1266606527","US","USA","UNITED STATES" -"1266606528","1266606559","AR","ARG","ARGENTINA" -"1266606560","1266618367","US","USA","UNITED STATES" -"1266622464","1268252671","US","USA","UNITED STATES" -"1268252672","1268776959","CA","CAN","CANADA" -"1268776960","1275600895","US","USA","UNITED STATES" -"1275600896","1275604991","BM","BMU","BERMUDA" -"1275604992","1275621375","US","USA","UNITED STATES" -"1275621376","1275625471","CA","CAN","CANADA" -"1275625472","1275658239","US","USA","UNITED STATES" -"1275658240","1275658495","GB","GBR","UNITED KINGDOM" -"1275658496","1275659007","US","USA","UNITED STATES" -"1275659008","1275659263","GB","GBR","UNITED KINGDOM" -"1275659264","1275665151","US","USA","UNITED STATES" -"1275665152","1275665407","UA","UKR","UKRAINE" -"1275665408","1275666431","US","USA","UNITED STATES" -"1275666432","1275674623","CA","CAN","CANADA" -"1275674624","1275707391","US","USA","UNITED STATES" -"1275707392","1275708927","CA","CAN","CANADA" -"1275708928","1275709183","US","USA","UNITED STATES" -"1275709184","1275711487","CA","CAN","CANADA" -"1275711488","1275712511","US","USA","UNITED STATES" -"1275712512","1275714047","CA","CAN","CANADA" -"1275714048","1275714559","US","USA","UNITED STATES" -"1275714560","1275715583","CA","CAN","CANADA" -"1275715584","1275756543","US","USA","UNITED STATES" -"1275756544","1275772927","CA","CAN","CANADA" -"1275772928","1275785215","US","USA","UNITED STATES" -"1275789312","1275822079","CA","CAN","CANADA" -"1275822080","1279262719","US","USA","UNITED STATES" -"1279262720","1279787007","CA","CAN","CANADA" -"1279787008","1279819775","US","USA","UNITED STATES" -"1279852544","1279950847","US","USA","UNITED STATES" -"1279950848","1279951103","FI","FIN","FINLAND" -"1279951104","1279951359","US","USA","UNITED STATES" -"1279951360","1279952895","CA","CAN","CANADA" -"1279952896","1279952919","US","USA","UNITED STATES" -"1279952920","1279952927","VG","VGB","VIRGIN ISLANDS, BRITISH" -"1279952928","1279953023","US","USA","UNITED STATES" -"1279953024","1279953055","VG","VGB","VIRGIN ISLANDS, BRITISH" -"1279953056","1279960511","US","USA","UNITED STATES" -"1279960512","1279960527","CA","CAN","CANADA" -"1279960528","1279967231","US","USA","UNITED STATES" -"1279967232","1279971327","CA","CAN","CANADA" -"1279971328","1279971839","US","USA","UNITED STATES" -"1279971840","1279972095","CA","CAN","CANADA" -"1279972096","1279977471","US","USA","UNITED STATES" -"1279977472","1279977983","CA","CAN","CANADA" -"1279977984","1279980159","US","USA","UNITED STATES" -"1279980160","1279980287","CA","CAN","CANADA" -"1279980288","1279982335","US","USA","UNITED STATES" -"1279982336","1279982591","CA","CAN","CANADA" -"1279982592","1279999999","US","USA","UNITED STATES" -"1280000000","1280032767","CA","CAN","CANADA" -"1280032768","1280040959","US","USA","UNITED STATES" -"1280040960","1280049151","CA","CAN","CANADA" -"1280049152","1280073727","US","USA","UNITED STATES" -"1280073728","1280075295","CA","CAN","CANADA" -"1280075296","1280075303","US","USA","UNITED STATES" -"1280075304","1280075759","CA","CAN","CANADA" -"1280075760","1280075767","US","USA","UNITED STATES" -"1280075768","1280078711","CA","CAN","CANADA" -"1280078712","1280078719","US","USA","UNITED STATES" -"1280078720","1280078743","CA","CAN","CANADA" -"1280078744","1280078751","US","USA","UNITED STATES" -"1280078752","1280081919","CA","CAN","CANADA" -"1280081920","1280090111","US","USA","UNITED STATES" -"1280090112","1280092159","AG","ATG","ANTIGUA AND BARBUDA" -"1280092160","1280093183","KN","KNA","SAINT KITTS AND NEVIS" -"1280093184","1280095231","AG","ATG","ANTIGUA AND BARBUDA" -"1280095232","1280095487","KN","KNA","SAINT KITTS AND NEVIS" -"1280095488","1280097279","AG","ATG","ANTIGUA AND BARBUDA" -"1280097280","1280097791","LC","LCA","SAINT LUCIA" -"1280097792","1280098303","AG","ATG","ANTIGUA AND BARBUDA" -"1280098304","1280102399","PR","PRI","PUERTO RICO" -"1280102400","1280131071","US","USA","UNITED STATES" -"1280131072","1280139263","CA","CAN","CANADA" -"1280139264","1287589887","US","USA","UNITED STATES" -"1287593984","1291845631","US","USA","UNITED STATES" -"1291845632","1292894207","DE","DEU","GERMANY" -"1292894208","1293156351","NO","NOR","NORWAY" -"1293156352","1293549567","DE","DEU","GERMANY" -"1293549568","1293680639","ES","ESP","SPAIN" -"1293680640","1293811711","MK","MKD","THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA" -"1293811712","1293942783","SA","SAU","SAUDI ARABIA" -"1293942784","1294073855","PL","POL","POLAND" -"1294073856","1294204927","RU","RUS","RUSSIAN FEDERATION" -"1294204928","1294237695","RO","ROM","ROMANIA" -"1294237696","1294270463","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1294270464","1294303231","DE","DEU","GERMANY" -"1294303232","1294335999","RU","RUS","RUSSIAN FEDERATION" -"1294336000","1294368767","SI","SVN","SLOVENIA" -"1294368768","1294401535","LV","LVA","LATVIA" -"1294401536","1294434303","RU","RUS","RUSSIAN FEDERATION" -"1294434304","1294467071","IT","ITA","ITALY" -"1294467072","1294499839","RU","RUS","RUSSIAN FEDERATION" -"1294499840","1294532607","NO","NOR","NORWAY" -"1294532608","1294598143","RU","RUS","RUSSIAN FEDERATION" -"1294598144","1294630911","IT","ITA","ITALY" -"1294630912","1294663679","LB","LBN","LEBANON" -"1294663680","1294696447","IT","ITA","ITALY" -"1294696448","1294729215","RU","RUS","RUSSIAN FEDERATION" -"1294729216","1294761983","GB","GBR","UNITED KINGDOM" -"1294761984","1294794751","SY","SYR","SYRIAN ARAB REPUBLIC" -"1294794752","1294827519","PL","POL","POLAND" -"1294827520","1294860287","RU","RUS","RUSSIAN FEDERATION" -"1294860288","1294893055","PL","POL","POLAND" -"1294893056","1294895135","CS","SCG","SERBIA AND MONTENEGRO" -"1294895136","1294895151","RS","SRB","SERBIA" -"1294895152","1294895167","CS","SCG","SERBIA AND MONTENEGRO" -"1294895168","1294895199","RS","SRB","SERBIA" -"1294895200","1294895279","CS","SCG","SERBIA AND MONTENEGRO" -"1294895280","1294895287","RS","SRB","SERBIA" -"1294895288","1294895303","CS","SCG","SERBIA AND MONTENEGRO" -"1294895304","1294895311","RS","SRB","SERBIA" -"1294895312","1294895495","CS","SCG","SERBIA AND MONTENEGRO" -"1294895496","1294896127","RS","SRB","SERBIA" -"1294896128","1294899455","CS","SCG","SERBIA AND MONTENEGRO" -"1294899456","1294901247","RS","SRB","SERBIA" -"1294901248","1294902015","CS","SCG","SERBIA AND MONTENEGRO" -"1294902016","1294902271","RS","SRB","SERBIA" -"1294902272","1294925823","CS","SCG","SERBIA AND MONTENEGRO" -"1294925824","1294958591","DE","DEU","GERMANY" -"1294958592","1294991359","UA","UKR","UKRAINE" -"1294991360","1294998527","CZ","CZE","CZECH REPUBLIC" -"1294998528","1294998591","SK","SVK","SLOVAKIA" -"1294998592","1295009023","CZ","CZE","CZECH REPUBLIC" -"1295009024","1295009407","SK","SVK","SLOVAKIA" -"1295009408","1295047679","CZ","CZE","CZECH REPUBLIC" -"1295047680","1295048191","SK","SVK","SLOVAKIA" -"1295048192","1295056895","CZ","CZE","CZECH REPUBLIC" -"1295056896","1295122431","GR","GRC","GREECE" -"1295122432","1295253503","RU","RUS","RUSSIAN FEDERATION" -"1295253504","1295319039","UA","UKR","UKRAINE" -"1295319040","1295384575","SE","SWE","SWEDEN" -"1295384576","1295450111","PT","PRT","PORTUGAL" -"1295450112","1295515647","PL","POL","POLAND" -"1295515648","1295777791","CH","CHE","SWITZERLAND" -"1295777792","1296039935","NL","NLD","NETHERLANDS" -"1296039936","1296072703","SA","SAU","SAUDI ARABIA" -"1296072704","1296105471","DE","DEU","GERMANY" -"1296105472","1296171007","PL","POL","POLAND" -"1296171008","1296171599","DK","DNK","DENMARK" -"1296171600","1296171600","DE","DEU","GERMANY" -"1296171601","1296171601","GB","GBR","UNITED KINGDOM" -"1296171602","1296181743","DK","DNK","DENMARK" -"1296181744","1296181751","GB","GBR","UNITED KINGDOM" -"1296181752","1296203775","DK","DNK","DENMARK" -"1296203776","1296236543","RU","RUS","RUSSIAN FEDERATION" -"1296236544","1296236671","FR","FRA","FRANCE" -"1296236672","1296236799","IE","IRL","IRELAND" -"1296236800","1296237055","GB","GBR","UNITED KINGDOM" -"1296237056","1296237311","FR","FRA","FRANCE" -"1296237312","1296237567","US","USA","UNITED STATES" -"1296237568","1296237823","NL","NLD","NETHERLANDS" -"1296237824","1296238079","ES","ESP","SPAIN" -"1296238080","1296238591","IL","ISR","ISRAEL" -"1296238592","1296239103","NL","NLD","NETHERLANDS" -"1296239104","1296239231","FR","FRA","FRANCE" -"1296239232","1296239359","NL","NLD","NETHERLANDS" -"1296239360","1296239615","ES","ESP","SPAIN" -"1296239616","1296240127","IE","IRL","IRELAND" -"1296240128","1296241151","BE","BEL","BELGIUM" -"1296241152","1296241407","IT","ITA","ITALY" -"1296241408","1296242175","NL","NLD","NETHERLANDS" -"1296242176","1296242303","DE","DEU","GERMANY" -"1296242304","1296242431","NL","NLD","NETHERLANDS" -"1296242432","1296242687","BE","BEL","BELGIUM" -"1296242688","1296243199","IE","IRL","IRELAND" -"1296243200","1296243455","GB","GBR","UNITED KINGDOM" -"1296243456","1296243711","US","USA","UNITED STATES" -"1296243712","1296244223","IT","ITA","ITALY" -"1296244224","1296244479","NL","NLD","NETHERLANDS" -"1296244480","1296244735","GB","GBR","UNITED KINGDOM" -"1296244736","1296244991","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1296244992","1296245247","CH","CHE","SWITZERLAND" -"1296245248","1296245503","CA","CAN","CANADA" -"1296245504","1296245759","NL","NLD","NETHERLANDS" -"1296245760","1296246783","ES","ESP","SPAIN" -"1296246784","1296247295","NL","NLD","NETHERLANDS" -"1296247296","1296247807","FR","FRA","FRANCE" -"1296247808","1296247871","US","USA","UNITED STATES" -"1296247872","1296247935","FR","FRA","FRANCE" -"1296247936","1296248255","IE","IRL","IRELAND" -"1296248256","1296248318","BE","BEL","BELGIUM" -"1296248319","1296248319","IE","IRL","IRELAND" -"1296248320","1296248383","BE","BEL","BELGIUM" -"1296248384","1296248447","IE","IRL","IRELAND" -"1296248448","1296248575","US","USA","UNITED STATES" -"1296248576","1296249855","IE","IRL","IRELAND" -"1296249856","1296249887","US","USA","UNITED STATES" -"1296249888","1296249919","FR","FRA","FRANCE" -"1296249920","1296249951","IE","IRL","IRELAND" -"1296249952","1296250015","DE","DEU","GERMANY" -"1296250016","1296250047","IL","ISR","ISRAEL" -"1296250048","1296250079","IE","IRL","IRELAND" -"1296250080","1296250111","IL","ISR","ISRAEL" -"1296250112","1296250143","IE","IRL","IRELAND" -"1296250144","1296250175","GB","GBR","UNITED KINGDOM" -"1296250176","1296250207","BE","BEL","BELGIUM" -"1296250208","1296250239","ES","ESP","SPAIN" -"1296250240","1296250271","BE","BEL","BELGIUM" -"1296250272","1296250303","DE","DEU","GERMANY" -"1296250304","1296251135","IE","IRL","IRELAND" -"1296251136","1296251167","GB","GBR","UNITED KINGDOM" -"1296251168","1296251199","HR","HRV","CROATIA" -"1296251200","1296251295","DE","DEU","GERMANY" -"1296251296","1296251327","BE","BEL","BELGIUM" -"1296251328","1296251359","IE","IRL","IRELAND" -"1296251360","1296251391","DE","DEU","GERMANY" -"1296251392","1296251775","NL","NLD","NETHERLANDS" -"1296251776","1296252159","IE","IRL","IRELAND" -"1296252160","1296252175","GB","GBR","UNITED KINGDOM" -"1296252176","1296252191","PL","POL","POLAND" -"1296252192","1296252207","RO","ROM","ROMANIA" -"1296252208","1296252223","BG","BGR","BULGARIA" -"1296252224","1296252239","GB","GBR","UNITED KINGDOM" -"1296252240","1296252255","IT","ITA","ITALY" -"1296252256","1296252271","GB","GBR","UNITED KINGDOM" -"1296252272","1296252303","FR","FRA","FRANCE" -"1296252304","1296252319","IL","ISR","ISRAEL" -"1296252320","1296252335","IE","IRL","IRELAND" -"1296252336","1296252351","FR","FRA","FRANCE" -"1296252352","1296252367","IE","IRL","IRELAND" -"1296252368","1296252383","DE","DEU","GERMANY" -"1296252384","1296252739","IE","IRL","IRELAND" -"1296252740","1296252743","IM","IMN","ISLE OF MAN" -"1296252744","1296252759","FR","FRA","FRANCE" -"1296252760","1296252791","DE","DEU","GERMANY" -"1296252792","1296252799","IE","IRL","IRELAND" -"1296252800","1296252839","GB","GBR","UNITED KINGDOM" -"1296252840","1296252847","DE","DEU","GERMANY" -"1296252848","1296252871","IE","IRL","IRELAND" -"1296252872","1296252879","BE","BEL","BELGIUM" -"1296252880","1296252887","DE","DEU","GERMANY" -"1296252888","1296252895","IE","IRL","IRELAND" -"1296252896","1296252911","BE","BEL","BELGIUM" -"1296252912","1296252919","IE","IRL","IRELAND" -"1296252920","1296252927","PL","POL","POLAND" -"1296252928","1296255743","DE","DEU","GERMANY" -"1296255744","1296256511","IE","IRL","IRELAND" -"1296256512","1296257023","DE","DEU","GERMANY" -"1296257024","1296257535","US","USA","UNITED STATES" -"1296257536","1296257791","IE","IRL","IRELAND" -"1296257792","1296258047","US","USA","UNITED STATES" -"1296258048","1296258303","TW","TWN","TAIWAN" -"1296258304","1296259071","NL","NLD","NETHERLANDS" -"1296259072","1296259583","US","USA","UNITED STATES" -"1296259584","1296259839","IE","IRL","IRELAND" -"1296259840","1296260351","NL","NLD","NETHERLANDS" -"1296260352","1296260607","US","USA","UNITED STATES" -"1296260608","1296262143","IE","IRL","IRELAND" -"1296262144","1296262655","US","USA","UNITED STATES" -"1296262656","1296262911","CA","CAN","CANADA" -"1296262912","1296263935","US","USA","UNITED STATES" -"1296263936","1296263943","IE","IRL","IRELAND" -"1296263944","1296263999","US","USA","UNITED STATES" -"1296264000","1296264015","IE","IRL","IRELAND" -"1296264016","1296264023","US","USA","UNITED STATES" -"1296264024","1296264027","DE","DEU","GERMANY" -"1296264028","1296264031","IE","IRL","IRELAND" -"1296264032","1296264035","IM","IMN","ISLE OF MAN" -"1296264036","1296264039","IE","IRL","IRELAND" -"1296264040","1296264047","US","USA","UNITED STATES" -"1296264048","1296264063","IE","IRL","IRELAND" -"1296264064","1296264143","GB","GBR","UNITED KINGDOM" -"1296264144","1296264191","IE","IRL","IRELAND" -"1296264192","1296264223","US","USA","UNITED STATES" -"1296264224","1296264271","IE","IRL","IRELAND" -"1296264272","1296264303","US","USA","UNITED STATES" -"1296264304","1296264319","CA","CAN","CANADA" -"1296264320","1296264383","US","USA","UNITED STATES" -"1296264384","1296264447","IE","IRL","IRELAND" -"1296264448","1296264543","US","USA","UNITED STATES" -"1296264544","1296264639","CA","CAN","CANADA" -"1296264640","1296264671","US","USA","UNITED STATES" -"1296264672","1296264703","IE","IRL","IRELAND" -"1296264704","1296265023","US","USA","UNITED STATES" -"1296265024","1296265087","IE","IRL","IRELAND" -"1296265088","1296265151","CA","CAN","CANADA" -"1296265152","1296265215","FR","FRA","FRANCE" -"1296265216","1296266751","US","USA","UNITED STATES" -"1296266752","1296267007","IE","IRL","IRELAND" -"1296267008","1296267263","US","USA","UNITED STATES" -"1296267264","1296267519","IE","IRL","IRELAND" -"1296267520","1296267775","CA","CAN","CANADA" -"1296267776","1296268799","US","USA","UNITED STATES" -"1296268800","1296269055","FR","FRA","FRANCE" -"1296269056","1296269311","US","USA","UNITED STATES" -"1296269312","1296302079","TR","TUR","TURKEY" -"1296302080","1296334847","GB","GBR","UNITED KINGDOM" -"1296334848","1296367615","DK","DNK","DENMARK" -"1296367616","1296400383","GR","GRC","GREECE" -"1296400384","1296433151","BH","BHR","BAHRAIN" -"1296433152","1296465919","BG","BGR","BULGARIA" -"1296465920","1296466239","NG","NGA","NIGERIA" -"1296466240","1296466303","NO","NOR","NORWAY" -"1296466304","1296466335","BF","BFA","BURKINA FASO" -"1296466336","1296466367","NO","NOR","NORWAY" -"1296466368","1296466383","AO","AGO","ANGOLA" -"1296466384","1296466415","NO","NOR","NORWAY" -"1296466416","1296466431","NG","NGA","NIGERIA" -"1296466432","1296466559","CG","COG","CONGO" -"1296466560","1296466575","NG","NGA","NIGERIA" -"1296466576","1296466591","NO","NOR","NORWAY" -"1296466592","1296466607","NG","NGA","NIGERIA" -"1296466608","1296466623","NO","NOR","NORWAY" -"1296466624","1296466639","NG","NGA","NIGERIA" -"1296466640","1296466655","NO","NOR","NORWAY" -"1296466656","1296466671","BJ","BEN","BENIN" -"1296466672","1296466679","NG","NGA","NIGERIA" -"1296466680","1296468479","NO","NOR","NORWAY" -"1296468480","1296469247","NG","NGA","NIGERIA" -"1296469248","1296469503","NO","NOR","NORWAY" -"1296469504","1296469759","ZM","ZMB","ZAMBIA" -"1296469760","1296472351","NO","NOR","NORWAY" -"1296472352","1296472383","NG","NGA","NIGERIA" -"1296472384","1296472415","BI","BDI","BURUNDI" -"1296472416","1296473087","NO","NOR","NORWAY" -"1296473088","1296474623","LT","LTU","LITHUANIA" -"1296474624","1296476159","US","USA","UNITED STATES" -"1296476160","1296477183","GA","GAB","GABON" -"1296477184","1296498687","LT","LTU","LITHUANIA" -"1296498688","1296531455","BG","BGR","BULGARIA" -"1296531456","1296564223","MT","MLT","MALTA" -"1296564224","1296566271","GB","GBR","UNITED KINGDOM" -"1296566272","1296568319","DE","DEU","GERMANY" -"1296568320","1296570367","RU","RUS","RUSSIAN FEDERATION" -"1296570368","1296574463","IT","ITA","ITALY" -"1296574464","1296576511","FR","FRA","FRANCE" -"1296576512","1296578559","DK","DNK","DENMARK" -"1296578560","1296580607","FI","FIN","FINLAND" -"1296580608","1296582655","CH","CHE","SWITZERLAND" -"1296582656","1296584703","IE","IRL","IRELAND" -"1296584704","1296586751","RU","RUS","RUSSIAN FEDERATION" -"1296586752","1296588799","FR","FRA","FRANCE" -"1296588800","1296590847","SE","SWE","SWEDEN" -"1296590848","1296592895","ES","ESP","SPAIN" -"1296592896","1296594943","NL","NLD","NETHERLANDS" -"1296594944","1296596991","RU","RUS","RUSSIAN FEDERATION" -"1296596992","1296599039","CH","CHE","SWITZERLAND" -"1296599040","1296601087","RU","RUS","RUSSIAN FEDERATION" -"1296601088","1296603135","DE","DEU","GERMANY" -"1296603136","1296605183","NL","NLD","NETHERLANDS" -"1296605184","1296606271","AT","AUT","AUSTRIA" -"1296606272","1296606335","DE","DEU","GERMANY" -"1296606336","1296606367","AT","AUT","AUSTRIA" -"1296606368","1296606399","CH","CHE","SWITZERLAND" -"1296606400","1296607231","AT","AUT","AUSTRIA" -"1296607232","1296607759","DE","DEU","GERMANY" -"1296607760","1296607999","NL","NLD","NETHERLANDS" -"1296608000","1296609023","CH","CHE","SWITZERLAND" -"1296609024","1296609279","NL","NLD","NETHERLANDS" -"1296609280","1296611327","CH","CHE","SWITZERLAND" -"1296611328","1296613375","TR","TUR","TURKEY" -"1296613376","1296615423","IT","ITA","ITALY" -"1296615424","1296617471","GB","GBR","UNITED KINGDOM" -"1296617472","1296619519","ES","ESP","SPAIN" -"1296619520","1296621567","IT","ITA","ITALY" -"1296621568","1296623615","SE","SWE","SWEDEN" -"1296623616","1296625663","BE","BEL","BELGIUM" -"1296625664","1296629759","RU","RUS","RUSSIAN FEDERATION" -"1296629760","1296631807","NO","NOR","NORWAY" -"1296631808","1296633855","GB","GBR","UNITED KINGDOM" -"1296633856","1296635903","NL","NLD","NETHERLANDS" -"1296635904","1296637951","RU","RUS","RUSSIAN FEDERATION" -"1296637952","1296639999","CH","CHE","SWITZERLAND" -"1296640000","1296642047","ES","ESP","SPAIN" -"1296642048","1296644095","RU","RUS","RUSSIAN FEDERATION" -"1296644096","1296646143","IT","ITA","ITALY" -"1296646144","1296648191","RU","RUS","RUSSIAN FEDERATION" -"1296648192","1296650239","GB","GBR","UNITED KINGDOM" -"1296650240","1296652287","ES","ESP","SPAIN" -"1296652288","1296654335","RU","RUS","RUSSIAN FEDERATION" -"1296654336","1296656383","BE","BEL","BELGIUM" -"1296656384","1296658431","RU","RUS","RUSSIAN FEDERATION" -"1296658432","1296662527","GB","GBR","UNITED KINGDOM" -"1296662528","1296664575","KZ","KAZ","KAZAKHSTAN" -"1296664576","1296666623","RU","RUS","RUSSIAN FEDERATION" -"1296666624","1296670719","GB","GBR","UNITED KINGDOM" -"1296670720","1296672767","ES","ESP","SPAIN" -"1296672768","1296674815","GB","GBR","UNITED KINGDOM" -"1296674816","1296676863","BE","BEL","BELGIUM" -"1296676864","1296677271","NG","NGA","NIGERIA" -"1296677272","1296677287","JE","JEY","JERSEY" -"1296677288","1296677311","NG","NGA","NIGERIA" -"1296677312","1296677319","JE","JEY","JERSEY" -"1296677320","1296677343","NG","NGA","NIGERIA" -"1296677344","1296677351","JE","JEY","JERSEY" -"1296677352","1296677367","NG","NGA","NIGERIA" -"1296677368","1296677375","US","USA","UNITED STATES" -"1296677376","1296677511","NG","NGA","NIGERIA" -"1296677512","1296677519","JE","JEY","JERSEY" -"1296677520","1296677591","NG","NGA","NIGERIA" -"1296677592","1296677599","JE","JEY","JERSEY" -"1296677600","1296677703","NG","NGA","NIGERIA" -"1296677704","1296677719","JE","JEY","JERSEY" -"1296677720","1296677735","NG","NGA","NIGERIA" -"1296677736","1296677751","JE","JEY","JERSEY" -"1296677752","1296677767","NG","NGA","NIGERIA" -"1296677768","1296677775","JE","JEY","JERSEY" -"1296677776","1296677959","NG","NGA","NIGERIA" -"1296677960","1296677967","JE","JEY","JERSEY" -"1296677968","1296677991","NG","NGA","NIGERIA" -"1296677992","1296678015","JE","JEY","JERSEY" -"1296678016","1296678047","NG","NGA","NIGERIA" -"1296678048","1296678079","JE","JEY","JERSEY" -"1296678080","1296678119","NG","NGA","NIGERIA" -"1296678120","1296678143","JE","JEY","JERSEY" -"1296678144","1296678151","NG","NGA","NIGERIA" -"1296678152","1296678159","JE","JEY","JERSEY" -"1296678160","1296678215","NG","NGA","NIGERIA" -"1296678216","1296678223","JE","JEY","JERSEY" -"1296678224","1296678319","NG","NGA","NIGERIA" -"1296678320","1296678327","JE","JEY","JERSEY" -"1296678328","1296678351","NG","NGA","NIGERIA" -"1296678352","1296678367","JE","JEY","JERSEY" -"1296678368","1296678415","NG","NGA","NIGERIA" -"1296678416","1296678431","US","USA","UNITED STATES" -"1296678432","1296678447","NG","NGA","NIGERIA" -"1296678448","1296678463","JE","JEY","JERSEY" -"1296678464","1296678471","NG","NGA","NIGERIA" -"1296678472","1296678479","JE","JEY","JERSEY" -"1296678480","1296678775","NG","NGA","NIGERIA" -"1296678776","1296678791","JE","JEY","JERSEY" -"1296678792","1296678831","NG","NGA","NIGERIA" -"1296678832","1296678839","JE","JEY","JERSEY" -"1296678840","1296678911","NG","NGA","NIGERIA" -"1296678912","1296680959","SA","SAU","SAUDI ARABIA" -"1296680960","1296683007","ES","ESP","SPAIN" -"1296683008","1296685055","IE","IRL","IRELAND" -"1296685056","1296687103","TR","TUR","TURKEY" -"1296687104","1296689151","NL","NLD","NETHERLANDS" -"1296689152","1296691199","RU","RUS","RUSSIAN FEDERATION" -"1296691200","1296693247","CH","CHE","SWITZERLAND" -"1296693248","1296695295","DE","DEU","GERMANY" -"1296695296","1296697343","CH","CHE","SWITZERLAND" -"1296697344","1296699391","RU","RUS","RUSSIAN FEDERATION" -"1296699392","1296701439","IT","ITA","ITALY" -"1296701440","1296703487","RU","RUS","RUSSIAN FEDERATION" -"1296703488","1296705535","BY","BLR","BELARUS" -"1296705536","1296707583","GE","GEO","GEORGIA" -"1296707584","1296708039","NL","NLD","NETHERLANDS" -"1296708040","1296708047","AE","ARE","UNITED ARAB EMIRATES" -"1296708048","1296709631","NL","NLD","NETHERLANDS" -"1296709632","1296711679","CY","CYP","CYPRUS" -"1296711680","1296713727","KZ","KAZ","KAZAKHSTAN" -"1296713728","1296715775","RU","RUS","RUSSIAN FEDERATION" -"1296715776","1296717823","CH","CHE","SWITZERLAND" -"1296717824","1296719871","BE","BEL","BELGIUM" -"1296719872","1296721919","CH","CHE","SWITZERLAND" -"1296721920","1296723967","GB","GBR","UNITED KINGDOM" -"1296723968","1296726015","AT","AUT","AUSTRIA" -"1296726016","1296728063","GB","GBR","UNITED KINGDOM" -"1296728064","1296730111","SE","SWE","SWEDEN" -"1296730112","1296732159","DE","DEU","GERMANY" -"1296732160","1296734207","IT","ITA","ITALY" -"1296734208","1296736255","FR","FRA","FRANCE" -"1296736256","1296738303","NO","NOR","NORWAY" -"1296738304","1296738815","CH","CHE","SWITZERLAND" -"1296738816","1296739327","FI","FIN","FINLAND" -"1296739328","1296740351","CH","CHE","SWITZERLAND" -"1296740352","1296744447","RU","RUS","RUSSIAN FEDERATION" -"1296744448","1296746495","GB","GBR","UNITED KINGDOM" -"1296746496","1296748543","SI","SVN","SLOVENIA" -"1296748544","1296750591","FR","FRA","FRANCE" -"1296750592","1296752639","NO","NOR","NORWAY" -"1296752640","1296754687","BA","BIH","BOSNIA AND HERZEGOVINA" -"1296754688","1296754911","DE","DEU","GERMANY" -"1296754912","1296754927","AT","AUT","AUSTRIA" -"1296754928","1296756735","DE","DEU","GERMANY" -"1296756736","1296758783","FR","FRA","FRANCE" -"1296758784","1296760831","RS","SRB","SERBIA" -"1296760832","1296762879","GB","GBR","UNITED KINGDOM" -"1296762880","1296764927","RU","RUS","RUSSIAN FEDERATION" -"1296764928","1296769023","AT","AUT","AUSTRIA" -"1296769024","1296771071","TR","TUR","TURKEY" -"1296771072","1296773119","LT","LTU","LITHUANIA" -"1296773120","1296774367","FR","FRA","FRANCE" -"1296775168","1296779263","FR","FRA","FRANCE" -"1296779264","1296781311","CZ","CZE","CZECH REPUBLIC" -"1296781312","1296783359","DK","DNK","DENMARK" -"1296783360","1296785407","LB","LBN","LEBANON" -"1296785408","1296787455","IE","IRL","IRELAND" -"1296787456","1296789503","GB","GBR","UNITED KINGDOM" -"1296789504","1296791551","CH","CHE","SWITZERLAND" -"1296791552","1296793599","NL","NLD","NETHERLANDS" -"1296793600","1296795647","RU","RUS","RUSSIAN FEDERATION" -"1296795648","1296795903","NL","NLD","NETHERLANDS" -"1296795904","1296797695","GB","GBR","UNITED KINGDOM" -"1296797696","1296799743","UA","UKR","UKRAINE" -"1296799744","1296801791","RU","RUS","RUSSIAN FEDERATION" -"1296801792","1296803839","DK","DNK","DENMARK" -"1296803840","1296805887","RU","RUS","RUSSIAN FEDERATION" -"1296805888","1296807935","ES","ESP","SPAIN" -"1296807936","1296812031","GB","GBR","UNITED KINGDOM" -"1296812032","1296814079","DE","DEU","GERMANY" -"1296814080","1296816127","NO","NOR","NORWAY" -"1296816128","1296818175","TR","TUR","TURKEY" -"1296818176","1296820223","ES","ESP","SPAIN" -"1296820224","1296822271","GB","GBR","UNITED KINGDOM" -"1296822272","1296824319","IE","IRL","IRELAND" -"1296824320","1296826367","DE","DEU","GERMANY" -"1296826368","1296842751","BG","BGR","BULGARIA" -"1296842752","1296859135","GB","GBR","UNITED KINGDOM" -"1296859136","1296875519","BG","BGR","BULGARIA" -"1296875520","1296891903","DE","DEU","GERMANY" -"1296891904","1296908287","BG","BGR","BULGARIA" -"1296908288","1296924671","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1296924672","1296941055","BG","BGR","BULGARIA" -"1296941056","1296957439","BA","BIH","BOSNIA AND HERZEGOVINA" -"1296957440","1296973823","BG","BGR","BULGARIA" -"1296973824","1296990207","CZ","CZE","CZECH REPUBLIC" -"1296990208","1297006591","BG","BGR","BULGARIA" -"1297006592","1297022975","BA","BIH","BOSNIA AND HERZEGOVINA" -"1297022976","1297039359","LT","LTU","LITHUANIA" -"1297039360","1297055743","TR","TUR","TURKEY" -"1297055744","1297072127","RU","RUS","RUSSIAN FEDERATION" -"1297072128","1297074743","PL","POL","POLAND" -"1297074744","1297074751","SE","SWE","SWEDEN" -"1297074752","1297083375","PL","POL","POLAND" -"1297083376","1297083391","SE","SWE","SWEDEN" -"1297083392","1297088511","PL","POL","POLAND" -"1297088512","1297121279","AT","AUT","AUSTRIA" -"1297121280","1297154047","SE","SWE","SWEDEN" -"1297154048","1297219583","RO","ROM","ROMANIA" -"1297219584","1297285119","RU","RUS","RUSSIAN FEDERATION" -"1297285120","1297350655","GR","GRC","GREECE" -"1297350656","1297416191","FR","FRA","FRANCE" -"1297416192","1297481727","BG","BGR","BULGARIA" -"1297481728","1297514495","GB","GBR","UNITED KINGDOM" -"1297514496","1297547263","FI","FIN","FINLAND" -"1297547264","1297549311","PL","POL","POLAND" -"1297549312","1297551359","LT","LTU","LITHUANIA" -"1297551360","1297553407","SA","SAU","SAUDI ARABIA" -"1297553408","1297555455","IE","IRL","IRELAND" -"1297555456","1297559551","UA","UKR","UKRAINE" -"1297559552","1297561599","DE","DEU","GERMANY" -"1297561600","1297563647","NL","NLD","NETHERLANDS" -"1297563648","1297565695","RU","RUS","RUSSIAN FEDERATION" -"1297565696","1297567743","PL","POL","POLAND" -"1297567744","1297569791","RU","RUS","RUSSIAN FEDERATION" -"1297569792","1297571839","RO","ROM","ROMANIA" -"1297571840","1297573887","RU","RUS","RUSSIAN FEDERATION" -"1297573888","1297575935","FR","FRA","FRANCE" -"1297577984","1297580031","PL","POL","POLAND" -"1297580032","1297582079","GB","GBR","UNITED KINGDOM" -"1297582080","1297584127","PL","POL","POLAND" -"1297584128","1297588223","UA","UKR","UKRAINE" -"1297588224","1297590271","NL","NLD","NETHERLANDS" -"1297590272","1297592319","RU","RUS","RUSSIAN FEDERATION" -"1297592320","1297594367","GB","GBR","UNITED KINGDOM" -"1297594368","1297596415","DE","DEU","GERMANY" -"1297596416","1297598463","UA","UKR","UKRAINE" -"1297598464","1297602559","RU","RUS","RUSSIAN FEDERATION" -"1297602560","1297604607","PL","POL","POLAND" -"1297604608","1297606655","DE","DEU","GERMANY" -"1297606656","1297608703","CZ","CZE","CZECH REPUBLIC" -"1297610752","1297612799","DE","DEU","GERMANY" -"1297612800","1297629183","RU","RUS","RUSSIAN FEDERATION" -"1297629184","1297645567","NO","NOR","NORWAY" -"1297645568","1297661951","PL","POL","POLAND" -"1297661952","1297678335","UA","UKR","UKRAINE" -"1297678336","1297694719","IT","ITA","ITALY" -"1297694720","1297711103","PL","POL","POLAND" -"1297711104","1297727487","GB","GBR","UNITED KINGDOM" -"1297727488","1297743871","MD","MDA","REPUBLIC OF MOLDOVA" -"1297743872","1297760255","DE","DEU","GERMANY" -"1297760256","1297776639","LT","LTU","LITHUANIA" -"1297776640","1297793023","DE","DEU","GERMANY" -"1297793024","1297809407","UA","UKR","UKRAINE" -"1297809408","1297825791","PL","POL","POLAND" -"1297825792","1297842175","RU","RUS","RUSSIAN FEDERATION" -"1297842176","1297858559","UA","UKR","UKRAINE" -"1297858560","1297860607","RU","RUS","RUSSIAN FEDERATION" -"1297860608","1297862655","PT","PRT","PORTUGAL" -"1297862656","1297864703","FI","FIN","FINLAND" -"1297864704","1297866751","SE","SWE","SWEDEN" -"1297866752","1297867583","RU","RUS","RUSSIAN FEDERATION" -"1297867584","1297867647","SC","SYC","SEYCHELLES" -"1297867648","1297867687","RU","RUS","RUSSIAN FEDERATION" -"1297867688","1297867695","CY","CYP","CYPRUS" -"1297867696","1297867871","RU","RUS","RUSSIAN FEDERATION" -"1297867872","1297867879","ES","ESP","SPAIN" -"1297867880","1297868607","RU","RUS","RUSSIAN FEDERATION" -"1297868608","1297868671","CY","CYP","CYPRUS" -"1297868672","1297868799","RU","RUS","RUSSIAN FEDERATION" -"1297868800","1297870847","DE","DEU","GERMANY" -"1297870848","1297872895","FR","FRA","FRANCE" -"1297872896","1297874943","GB","GBR","UNITED KINGDOM" -"1297874944","1297875487","CY","CYP","CYPRUS" -"1297875488","1297875503","TR","TUR","TURKEY" -"1297875504","1297875536","CY","CYP","CYPRUS" -"1297875537","1297875551","TR","TUR","TURKEY" -"1297875552","1297879040","CY","CYP","CYPRUS" -"1297879041","1297883135","TR","TUR","TURKEY" -"1297883136","1297891327","PL","POL","POLAND" -"1297891328","1297899519","GB","GBR","UNITED KINGDOM" -"1297899520","1297915903","TR","TUR","TURKEY" -"1297915904","1297924095","BH","BHR","BAHRAIN" -"1297924096","1297932287","CZ","CZE","CZECH REPUBLIC" -"1297932288","1297940479","GE","GEO","GEORGIA" -"1297940480","1297948671","LV","LVA","LATVIA" -"1297948672","1297956863","UA","UKR","UKRAINE" -"1297956864","1297965055","NL","NLD","NETHERLANDS" -"1297965056","1297973247","RU","RUS","RUSSIAN FEDERATION" -"1297973248","1297981439","GB","GBR","UNITED KINGDOM" -"1297981440","1297989631","RO","ROM","ROMANIA" -"1297989632","1297993295","CZ","CZE","CZECH REPUBLIC" -"1297993296","1297993311","SK","SVK","SLOVAKIA" -"1297993312","1297997823","CZ","CZE","CZECH REPUBLIC" -"1297997824","1298006015","IT","ITA","ITALY" -"1298006016","1298014207","RU","RUS","RUSSIAN FEDERATION" -"1298014208","1298014719","LB","LBN","LEBANON" -"1298014720","1298014975","RU","RUS","RUSSIAN FEDERATION" -"1298014976","1298015231","LT","LTU","LITHUANIA" -"1298015232","1298015487","RU","RUS","RUSSIAN FEDERATION" -"1298015488","1298015743","LB","LBN","LEBANON" -"1298015744","1298015999","IQ","IRQ","IRAQ" -"1298016000","1298016511","LB","LBN","LEBANON" -"1298016512","1298017279","RU","RUS","RUSSIAN FEDERATION" -"1298017280","1298018303","KG","KGZ","KYRGYZSTAN" -"1298018304","1298018559","TM","TKM","TURKMENISTAN" -"1298018560","1298019327","RU","RUS","RUSSIAN FEDERATION" -"1298019328","1298019839","LT","LTU","LITHUANIA" -"1298019840","1298022399","RU","RUS","RUSSIAN FEDERATION" -"1298022400","1298030591","IT","ITA","ITALY" -"1298030592","1298038783","RU","RUS","RUSSIAN FEDERATION" -"1298038784","1298046975","SI","SVN","SLOVENIA" -"1298046976","1298063359","RU","RUS","RUSSIAN FEDERATION" -"1298063360","1298065407","FR","FRA","FRANCE" -"1298065408","1298067455","NO","NOR","NORWAY" -"1298067456","1298071551","NL","NLD","NETHERLANDS" -"1298071552","1298073599","TJ","TJK","TAJIKISTAN" -"1298073600","1298075647","RU","RUS","RUSSIAN FEDERATION" -"1298075648","1298076671","CY","CYP","CYPRUS" -"1298076672","1298077695","US","USA","UNITED STATES" -"1298077696","1298079743","DE","DEU","GERMANY" -"1298079744","1298081791","GB","GBR","UNITED KINGDOM" -"1298081792","1298083839","CZ","CZE","CZECH REPUBLIC" -"1298083840","1298085887","PL","POL","POLAND" -"1298085888","1298087935","KG","KGZ","KYRGYZSTAN" -"1298087936","1298089983","FR","FRA","FRANCE" -"1298089984","1298092031","NO","NOR","NORWAY" -"1298092032","1298094079","GB","GBR","UNITED KINGDOM" -"1298094080","1298096127","RU","RUS","RUSSIAN FEDERATION" -"1298096128","1298098175","NL","NLD","NETHERLANDS" -"1298098176","1298100223","SE","SWE","SWEDEN" -"1298100224","1298102271","GB","GBR","UNITED KINGDOM" -"1298102272","1298102687","CH","CHE","SWITZERLAND" -"1298102688","1298102703","LV","LVA","LATVIA" -"1298102704","1298104319","CH","CHE","SWITZERLAND" -"1298104320","1298106367","RU","RUS","RUSSIAN FEDERATION" -"1298106368","1298108415","IT","ITA","ITALY" -"1298108416","1298110463","FI","FIN","FINLAND" -"1298110464","1298112511","ES","ESP","SPAIN" -"1298112512","1298114559","IE","IRL","IRELAND" -"1298114560","1298116607","IT","ITA","ITALY" -"1298116608","1298118655","RU","RUS","RUSSIAN FEDERATION" -"1298118656","1298120703","AM","ARM","ARMENIA" -"1298120704","1298122751","CZ","CZE","CZECH REPUBLIC" -"1298122752","1298124799","RU","RUS","RUSSIAN FEDERATION" -"1298124800","1298126847","IT","ITA","ITALY" -"1298126848","1298127615","SA","SAU","SAUDI ARABIA" -"1298127616","1298128127","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1298128128","1298128895","SA","SAU","SAUDI ARABIA" -"1298128896","1298130943","FR","FRA","FRANCE" -"1298130944","1298132991","BG","BGR","BULGARIA" -"1298132992","1298135039","FI","FIN","FINLAND" -"1298135040","1298137087","NL","NLD","NETHERLANDS" -"1298137088","1298661375","GB","GBR","UNITED KINGDOM" -"1298661376","1298677759","FR","FRA","FRANCE" -"1298677760","1298694143","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1298710528","1298726911","CZ","CZE","CZECH REPUBLIC" -"1298726912","1298743295","RS","SRB","SERBIA" -"1298743296","1298759679","FI","FIN","FINLAND" -"1298759680","1298776063","RU","RUS","RUSSIAN FEDERATION" -"1298776064","1298792447","SE","SWE","SWEDEN" -"1298792448","1298825215","RU","RUS","RUSSIAN FEDERATION" -"1298825216","1298841599","NO","NOR","NORWAY" -"1298841600","1298857983","RU","RUS","RUSSIAN FEDERATION" -"1298857984","1298874367","SE","SWE","SWEDEN" -"1298874368","1298907135","GB","GBR","UNITED KINGDOM" -"1298907136","1298923519","IE","IRL","IRELAND" -"1298923520","1298939903","IT","ITA","ITALY" -"1298939904","1298956287","RU","RUS","RUSSIAN FEDERATION" -"1298956288","1298972671","GB","GBR","UNITED KINGDOM" -"1298972672","1298989055","RU","RUS","RUSSIAN FEDERATION" -"1298989056","1299005439","UA","UKR","UKRAINE" -"1299005440","1299006975","BE","BEL","BELGIUM" -"1299006976","1299007231","NL","NLD","NETHERLANDS" -"1299007232","1299009791","BE","BEL","BELGIUM" -"1299009792","1299010047","NL","NLD","NETHERLANDS" -"1299010048","1299010815","BE","BEL","BELGIUM" -"1299010816","1299011583","RU","RUS","RUSSIAN FEDERATION" -"1299011584","1299011839","FR","FRA","FRANCE" -"1299011840","1299012095","DE","DEU","GERMANY" -"1299012096","1299012607","BE","BEL","BELGIUM" -"1299012608","1299013119","GB","GBR","UNITED KINGDOM" -"1299013120","1299013375","FR","FRA","FRANCE" -"1299013376","1299013631","DE","DEU","GERMANY" -"1299013632","1299021823","BE","BEL","BELGIUM" -"1299021824","1299026111","CH","CHE","SWITZERLAND" -"1299026112","1299026127","ES","ESP","SPAIN" -"1299026128","1299031039","CH","CHE","SWITZERLAND" -"1299031040","1299031167","US","USA","UNITED STATES" -"1299031168","1299031807","CH","CHE","SWITZERLAND" -"1299031808","1299032063","US","USA","UNITED STATES" -"1299032064","1299038207","CH","CHE","SWITZERLAND" -"1299038208","1299054591","FI","FIN","FINLAND" -"1299054592","1299070975","SE","SWE","SWEDEN" -"1299070976","1299075071","SA","SAU","SAUDI ARABIA" -"1299075072","1299087359","LB","LBN","LEBANON" -"1299087360","1299103743","HU","HUN","HUNGARY" -"1299103744","1299120127","NO","NOR","NORWAY" -"1299120128","1299136511","SI","SVN","SLOVENIA" -"1299136512","1299169279","HU","HUN","HUNGARY" -"1299169280","1299174399","FR","FRA","FRANCE" -"1299174400","1299176959","GB","GBR","UNITED KINGDOM" -"1299176960","1299177471","FR","FRA","FRANCE" -"1299177472","1299180031","DE","DEU","GERMANY" -"1299180032","1299185663","FR","FRA","FRANCE" -"1299185664","1299447807","PL","POL","POLAND" -"1299447808","1299709951","AT","AUT","AUSTRIA" -"1299709952","1299972095","UA","UKR","UKRAINE" -"1299972096","1300234239","IL","ISR","ISRAEL" -"1302331392","1303379967","NL","NLD","NETHERLANDS" -"1303379968","1304428543","DE","DEU","GERMANY" -"1304428544","1305477119","FR","FRA","FRANCE" -"1305477120","1305739263","ES","ESP","SPAIN" -"1305739264","1306001407","DK","DNK","DENMARK" -"1306001408","1306132479","RU","RUS","RUSSIAN FEDERATION" -"1306132480","1306263551","SE","SWE","SWEDEN" -"1306271744","1306279935","RU","RUS","RUSSIAN FEDERATION" -"1306279936","1306286079","IT","ITA","ITALY" -"1306286080","1306288127","CH","CHE","SWITZERLAND" -"1306288128","1306296319","AT","AUT","AUSTRIA" -"1306296320","1306311143","RU","RUS","RUSSIAN FEDERATION" -"1306311144","1306311151","CH","CHE","SWITZERLAND" -"1306311152","1306312703","RU","RUS","RUSSIAN FEDERATION" -"1306312704","1306320895","UZ","UZB","UZBEKISTAN" -"1306320896","1306329087","DE","DEU","GERMANY" -"1306329088","1306337279","BA","BIH","BOSNIA AND HERZEGOVINA" -"1306337280","1306345471","HU","HUN","HUNGARY" -"1306345472","1306353663","LT","LTU","LITHUANIA" -"1306353664","1306361855","SA","SAU","SAUDI ARABIA" -"1306361856","1306370047","RU","RUS","RUSSIAN FEDERATION" -"1306370048","1306378239","GB","GBR","UNITED KINGDOM" -"1306378240","1306386431","RU","RUS","RUSSIAN FEDERATION" -"1306386432","1306394623","DK","DNK","DENMARK" -"1306394624","1306402815","ME","MNE","MONTENEGRO" -"1306402816","1306411007","RU","RUS","RUSSIAN FEDERATION" -"1306411008","1306413199","NL","NLD","NETHERLANDS" -"1306413200","1306413215","BE","BEL","BELGIUM" -"1306413216","1306419199","NL","NLD","NETHERLANDS" -"1306419200","1306427391","RU","RUS","RUSSIAN FEDERATION" -"1306427392","1306435583","UA","UKR","UKRAINE" -"1306435584","1306451967","NO","NOR","NORWAY" -"1306451968","1306460159","PL","POL","POLAND" -"1306460160","1306468351","IT","ITA","ITALY" -"1306468352","1306476543","FI","FIN","FINLAND" -"1306476544","1306492927","RU","RUS","RUSSIAN FEDERATION" -"1306492928","1306501119","TR","TUR","TURKEY" -"1306501120","1306509311","NO","NOR","NORWAY" -"1306509312","1306525695","PL","POL","POLAND" -"1306525696","1307049983","ES","ESP","SPAIN" -"1307049984","1307066367","RU","RUS","RUSSIAN FEDERATION" -"1307069696","1307069823","DE","DEU","GERMANY" -"1307069856","1307069887","DE","DEU","GERMANY" -"1307074560","1307082751","SA","SAU","SAUDI ARABIA" -"1307082752","1307090943","RU","RUS","RUSSIAN FEDERATION" -"1307090944","1307099135","GB","GBR","UNITED KINGDOM" -"1307099136","1307107327","RO","ROM","ROMANIA" -"1307107328","1307115519","DE","DEU","GERMANY" -"1307115520","1307123711","RU","RUS","RUSSIAN FEDERATION" -"1307123712","1307131903","NL","NLD","NETHERLANDS" -"1307131904","1307140095","EE","EST","ESTONIA" -"1307140096","1307148287","FR","FRA","FRANCE" -"1307148288","1307156479","GB","GBR","UNITED KINGDOM" -"1307156480","1307172863","RU","RUS","RUSSIAN FEDERATION" -"1307172864","1307181055","DK","DNK","DENMARK" -"1307181056","1307189247","RU","RUS","RUSSIAN FEDERATION" -"1307189248","1307197439","DE","DEU","GERMANY" -"1307197440","1307205631","HU","HUN","HUNGARY" -"1307205632","1307213823","FI","FIN","FINLAND" -"1307213824","1307222015","SI","SVN","SLOVENIA" -"1307222016","1307230207","DK","DNK","DENMARK" -"1307230208","1307238399","RU","RUS","RUSSIAN FEDERATION" -"1307238400","1307246591","SK","SVK","SLOVAKIA" -"1307246592","1307254783","KG","KGZ","KYRGYZSTAN" -"1307254784","1307255551","NL","NLD","NETHERLANDS" -"1307255552","1307255807","GR","GRC","GREECE" -"1307255808","1307262975","NL","NLD","NETHERLANDS" -"1307262976","1307271167","AT","AUT","AUSTRIA" -"1307271168","1307279359","MD","MDA","REPUBLIC OF MOLDOVA" -"1307279360","1307287551","LB","LBN","LEBANON" -"1307287552","1307295743","DE","DEU","GERMANY" -"1307295744","1307303935","RU","RUS","RUSSIAN FEDERATION" -"1307303936","1307312127","SE","SWE","SWEDEN" -"1307312128","1307320319","PL","POL","POLAND" -"1307320320","1307336703","RU","RUS","RUSSIAN FEDERATION" -"1307336704","1307344895","DE","DEU","GERMANY" -"1307344896","1307353087","RU","RUS","RUSSIAN FEDERATION" -"1307353088","1307361279","BG","BGR","BULGARIA" -"1307361280","1307369471","CZ","CZE","CZECH REPUBLIC" -"1307369472","1307377663","RU","RUS","RUSSIAN FEDERATION" -"1307377664","1307385855","PL","POL","POLAND" -"1307385856","1307394047","AT","AUT","AUSTRIA" -"1307394048","1307402239","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1307402240","1307410431","HR","HRV","CROATIA" -"1307410432","1307418623","CZ","CZE","CZECH REPUBLIC" -"1307418624","1307426815","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1307426816","1307435007","CH","CHE","SWITZERLAND" -"1307435008","1307443199","DE","DEU","GERMANY" -"1307443200","1307451391","IT","ITA","ITALY" -"1307451392","1307459583","SE","SWE","SWEDEN" -"1307459584","1307484159","RU","RUS","RUSSIAN FEDERATION" -"1307484160","1307488767","GB","GBR","UNITED KINGDOM" -"1307488768","1307489023","IE","IRL","IRELAND" -"1307489024","1307491327","GB","GBR","UNITED KINGDOM" -"1307491328","1307491839","IE","IRL","IRELAND" -"1307491840","1307492351","GB","GBR","UNITED KINGDOM" -"1307492352","1307500543","BA","BIH","BOSNIA AND HERZEGOVINA" -"1307500544","1307508735","RU","RUS","RUSSIAN FEDERATION" -"1307508736","1307516927","BA","BIH","BOSNIA AND HERZEGOVINA" -"1307516928","1307525119","CH","CHE","SWITZERLAND" -"1307525120","1307533311","BA","BIH","BOSNIA AND HERZEGOVINA" -"1307533312","1307541503","GB","GBR","UNITED KINGDOM" -"1307541504","1307549695","IT","ITA","ITALY" -"1307549696","1307557887","UA","UKR","UKRAINE" -"1307557888","1307574271","RU","RUS","RUSSIAN FEDERATION" -"1307574272","1307578367","GB","GBR","UNITED KINGDOM" -"1307578368","1307582463","FI","FIN","FINLAND" -"1307582464","1307586559","KZ","KAZ","KAZAKHSTAN" -"1307586560","1307590655","GB","GBR","UNITED KINGDOM" -"1307590656","1307594751","SE","SWE","SWEDEN" -"1307594752","1307598847","SA","SAU","SAUDI ARABIA" -"1307598848","1307602943","CZ","CZE","CZECH REPUBLIC" -"1307602944","1307607039","ES","ESP","SPAIN" -"1307607040","1307611135","SA","SAU","SAUDI ARABIA" -"1307611136","1307619327","RU","RUS","RUSSIAN FEDERATION" -"1307619328","1307623423","CZ","CZE","CZECH REPUBLIC" -"1307623424","1307627519","FR","FRA","FRANCE" -"1307627520","1307631615","SE","SWE","SWEDEN" -"1307631616","1307635711","IT","ITA","ITALY" -"1307635712","1307636991","EE","EST","ESTONIA" -"1307636992","1307637031","LV","LVA","LATVIA" -"1307637032","1307638015","EE","EST","ESTONIA" -"1307638016","1307638095","LT","LTU","LITHUANIA" -"1307638096","1307638375","EE","EST","ESTONIA" -"1307638376","1307638383","LT","LTU","LITHUANIA" -"1307638384","1307638447","EE","EST","ESTONIA" -"1307638448","1307638463","LT","LTU","LITHUANIA" -"1307638464","1307638575","EE","EST","ESTONIA" -"1307638576","1307638607","LT","LTU","LITHUANIA" -"1307638608","1307638783","EE","EST","ESTONIA" -"1307638784","1307639295","LT","LTU","LITHUANIA" -"1307639296","1307639495","EE","EST","ESTONIA" -"1307639496","1307639503","LT","LTU","LITHUANIA" -"1307639504","1307639807","EE","EST","ESTONIA" -"1307639808","1307643903","IT","ITA","ITALY" -"1307643904","1307652095","RU","RUS","RUSSIAN FEDERATION" -"1307652096","1307656191","ES","ESP","SPAIN" -"1307656192","1307660287","JO","JOR","JORDAN" -"1307660288","1307662335","BE","BEL","BELGIUM" -"1307662336","1307662351","NL","NLD","NETHERLANDS" -"1307662352","1307662359","GB","GBR","UNITED KINGDOM" -"1307662360","1307662367","FR","FRA","FRANCE" -"1307662368","1307664383","BE","BEL","BELGIUM" -"1307664384","1307668479","NO","NOR","NORWAY" -"1307668480","1307672575","ES","ESP","SPAIN" -"1307672576","1307674623","SE","SWE","SWEDEN" -"1307674624","1307676671","DK","DNK","DENMARK" -"1307676672","1307680767","RU","RUS","RUSSIAN FEDERATION" -"1307680768","1307684863","LV","LVA","LATVIA" -"1307684864","1307688959","GB","GBR","UNITED KINGDOM" -"1307688960","1307693055","LT","LTU","LITHUANIA" -"1307693056","1307697151","IT","ITA","ITALY" -"1307697152","1307701247","NL","NLD","NETHERLANDS" -"1307701248","1307709439","RU","RUS","RUSSIAN FEDERATION" -"1307709440","1307713535","AL","ALB","ALBANIA" -"1307713536","1307717631","IT","ITA","ITALY" -"1307717632","1307721727","DK","DNK","DENMARK" -"1307721728","1307725823","AT","AUT","AUSTRIA" -"1307725824","1307729919","CZ","CZE","CZECH REPUBLIC" -"1307729920","1307734015","RU","RUS","RUSSIAN FEDERATION" -"1307734016","1307738111","NL","NLD","NETHERLANDS" -"1307738112","1307742207","IT","ITA","ITALY" -"1307742208","1307746303","HU","HUN","HUNGARY" -"1307746304","1307750399","UA","UKR","UKRAINE" -"1307750400","1307754495","IT","ITA","ITALY" -"1307754496","1307755519","US","USA","UNITED STATES" -"1307755520","1307756031","GB","GBR","UNITED KINGDOM" -"1307756032","1307756287","US","USA","UNITED STATES" -"1307756288","1307756431","GB","GBR","UNITED KINGDOM" -"1307756432","1307756447","FR","FRA","FRANCE" -"1307756448","1307756543","GB","GBR","UNITED KINGDOM" -"1307756544","1307757567","FR","FRA","FRANCE" -"1307757568","1307758591","GB","GBR","UNITED KINGDOM" -"1307758592","1307762687","SM","SMR","SAN MARINO" -"1307762688","1307766783","PL","POL","POLAND" -"1307766784","1307770879","GB","GBR","UNITED KINGDOM" -"1307770880","1307774975","RU","RUS","RUSSIAN FEDERATION" -"1307774976","1307777023","CS","SCG","SERBIA AND MONTENEGRO" -"1307777024","1307778047","RS","SRB","SERBIA" -"1307778048","1307779071","CS","SCG","SERBIA AND MONTENEGRO" -"1307779072","1307787263","DK","DNK","DENMARK" -"1307787264","1307791359","MT","MLT","MALTA" -"1307791360","1307795455","KZ","KAZ","KAZAKHSTAN" -"1307795456","1307803647","RU","RUS","RUSSIAN FEDERATION" -"1307803648","1307807743","DK","DNK","DENMARK" -"1307807744","1307811839","SE","SWE","SWEDEN" -"1307811840","1307815935","NL","NLD","NETHERLANDS" -"1307815936","1307819791","BE","BEL","BELGIUM" -"1307820032","1307824127","ES","ESP","SPAIN" -"1307824128","1307828223","HU","HUN","HUNGARY" -"1307828224","1307832319","NL","NLD","NETHERLANDS" -"1307832320","1307836415","RU","RUS","RUSSIAN FEDERATION" -"1307836416","1307840511","SE","SWE","SWEDEN" -"1307840512","1307844607","RU","RUS","RUSSIAN FEDERATION" -"1307844608","1307848703","UA","UKR","UKRAINE" -"1307848704","1307852799","CH","CHE","SWITZERLAND" -"1307852800","1307856895","RU","RUS","RUSSIAN FEDERATION" -"1307856896","1307860991","IT","ITA","ITALY" -"1307860992","1307861119","DE","DEU","GERMANY" -"1307861120","1307861123","LU","LUX","LUXEMBOURG" -"1307861124","1307861151","DE","DEU","GERMANY" -"1307861152","1307861155","LU","LUX","LUXEMBOURG" -"1307861156","1307861919","DE","DEU","GERMANY" -"1307861920","1307861935","LU","LUX","LUXEMBOURG" -"1307861936","1307864127","DE","DEU","GERMANY" -"1307864128","1307864135","LU","LUX","LUXEMBOURG" -"1307864136","1307864467","DE","DEU","GERMANY" -"1307864468","1307864471","LU","LUX","LUXEMBOURG" -"1307864472","1307864479","DE","DEU","GERMANY" -"1307864480","1307864495","LU","LUX","LUXEMBOURG" -"1307864496","1307865087","DE","DEU","GERMANY" -"1307865088","1307869183","AZ","AZE","AZERBAIJAN" -"1307869184","1307873279","GB","GBR","UNITED KINGDOM" -"1307873280","1307877375","TJ","TJK","TAJIKISTAN" -"1307877376","1307881471","RU","RUS","RUSSIAN FEDERATION" -"1307881472","1307885567","IT","ITA","ITALY" -"1307885568","1307886975","DK","DNK","DENMARK" -"1307886976","1307887103","SE","SWE","SWEDEN" -"1307887104","1307889663","DK","DNK","DENMARK" -"1307889664","1307893759","RU","RUS","RUSSIAN FEDERATION" -"1307893760","1307897855","SE","SWE","SWEDEN" -"1307897856","1307901951","AT","AUT","AUSTRIA" -"1307901952","1307906047","JO","JOR","JORDAN" -"1307906048","1307906599","CH","CHE","SWITZERLAND" -"1307906600","1307906607","DK","DNK","DENMARK" -"1307906608","1307906943","CH","CHE","SWITZERLAND" -"1307906944","1307907071","IM","IMN","ISLE OF MAN" -"1307907072","1307907199","CH","CHE","SWITZERLAND" -"1307907200","1307907327","IM","IMN","ISLE OF MAN" -"1307907328","1307910143","CH","CHE","SWITZERLAND" -"1307910144","1307914239","DE","DEU","GERMANY" -"1307914240","1307918335","NL","NLD","NETHERLANDS" -"1307918336","1307919439","GB","GBR","UNITED KINGDOM" -"1307919440","1307919447","ES","ESP","SPAIN" -"1307919448","1307919503","GB","GBR","UNITED KINGDOM" -"1307919504","1307919511","ES","ESP","SPAIN" -"1307919512","1307919699","GB","GBR","UNITED KINGDOM" -"1307919700","1307919703","ZA","ZAF","SOUTH AFRICA" -"1307919704","1307920575","GB","GBR","UNITED KINGDOM" -"1307920576","1307920583","AU","AUS","AUSTRALIA" -"1307920584","1307921471","GB","GBR","UNITED KINGDOM" -"1307921472","1307921535","ES","ESP","SPAIN" -"1307921536","1307922431","GB","GBR","UNITED KINGDOM" -"1307922432","1307926527","NL","NLD","NETHERLANDS" -"1307926528","1307930623","KZ","KAZ","KAZAKHSTAN" -"1307930624","1307934719","RU","RUS","RUSSIAN FEDERATION" -"1307934720","1307938815","FR","FRA","FRANCE" -"1307938816","1307942911","TR","TUR","TURKEY" -"1307942912","1307947007","RU","RUS","RUSSIAN FEDERATION" -"1307947008","1307951103","CH","CHE","SWITZERLAND" -"1307951104","1307959295","RU","RUS","RUSSIAN FEDERATION" -"1307959296","1307963391","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1307963392","1307967487","PL","POL","POLAND" -"1307967488","1307971583","IT","ITA","ITALY" -"1307971584","1307980799","GB","GBR","UNITED KINGDOM" -"1307980800","1307981823","ZW","ZWE","ZIMBABWE" -"1307981824","1307982847","ZA","ZAF","SOUTH AFRICA" -"1307982848","1307983871","GB","GBR","UNITED KINGDOM" -"1307983872","1307987967","LB","LBN","LEBANON" -"1307987968","1307992063","FR","FRA","FRANCE" -"1307992064","1307996159","RU","RUS","RUSSIAN FEDERATION" -"1307996160","1308000255","DE","DEU","GERMANY" -"1308000256","1308004351","CH","CHE","SWITZERLAND" -"1308004352","1308008447","RU","RUS","RUSSIAN FEDERATION" -"1308008448","1308012543","GB","GBR","UNITED KINGDOM" -"1308012544","1308016639","ES","ESP","SPAIN" -"1308016640","1308020735","FI","FIN","FINLAND" -"1308020736","1308024831","BG","BGR","BULGARIA" -"1308024832","1308033023","RU","RUS","RUSSIAN FEDERATION" -"1308033024","1308033279","NL","NLD","NETHERLANDS" -"1308033280","1308033535","FR","FRA","FRANCE" -"1308033536","1308033791","DE","DEU","GERMANY" -"1308033792","1308034047","IT","ITA","ITALY" -"1308034048","1308034559","DE","DEU","GERMANY" -"1308034560","1308034815","CZ","CZE","CZECH REPUBLIC" -"1308034816","1308035327","DE","DEU","GERMANY" -"1308035328","1308035583","GB","GBR","UNITED KINGDOM" -"1308035584","1308035839","AE","ARE","UNITED ARAB EMIRATES" -"1308035840","1308036095","GB","GBR","UNITED KINGDOM" -"1308036096","1308037119","DE","DEU","GERMANY" -"1308037120","1308041215","UA","UKR","UKRAINE" -"1308041216","1308049407","RU","RUS","RUSSIAN FEDERATION" -"1308049408","1308053503","DK","DNK","DENMARK" -"1308053504","1308057599","RU","RUS","RUSSIAN FEDERATION" -"1308057600","1308061695","GR","GRC","GREECE" -"1308061696","1308069887","RU","RUS","RUSSIAN FEDERATION" -"1308069888","1308073983","NO","NOR","NORWAY" -"1308073984","1308078079","RU","RUS","RUSSIAN FEDERATION" -"1308078080","1308078263","NL","NLD","NETHERLANDS" -"1308078264","1308078267","SE","SWE","SWEDEN" -"1308078268","1308078879","NL","NLD","NETHERLANDS" -"1308078880","1308078911","FR","FRA","FRANCE" -"1308078912","1308080127","NL","NLD","NETHERLANDS" -"1308080128","1308082175","RU","RUS","RUSSIAN FEDERATION" -"1308082176","1308084223","GB","GBR","UNITED KINGDOM" -"1308084224","1308086271","RS","SRB","SERBIA" -"1308086272","1308088319","RU","RUS","RUSSIAN FEDERATION" -"1308088320","1308090367","UA","UKR","UKRAINE" -"1308090368","1308092415","SK","SVK","SLOVAKIA" -"1308092416","1308094463","RU","RUS","RUSSIAN FEDERATION" -"1308094464","1308096511","KW","KWT","KUWAIT" -"1308096512","1308098559","RS","SRB","SERBIA" -"1308098560","1308360703","NL","NLD","NETHERLANDS" -"1308360704","1308622847","PL","POL","POLAND" -"1308622848","1308884991","HR","HRV","CROATIA" -"1308884992","1309147135","IT","ITA","ITALY" -"1309147136","1309409279","PL","POL","POLAND" -"1309409280","1309671423","IT","ITA","ITALY" -"1309671424","1309933567","IE","IRL","IRELAND" -"1309933568","1310195711","BE","BEL","BELGIUM" -"1310195712","1310197759","RU","RUS","RUSSIAN FEDERATION" -"1310197760","1310199807","CZ","CZE","CZECH REPUBLIC" -"1310199808","1310201855","IE","IRL","IRELAND" -"1310201856","1310203903","RU","RUS","RUSSIAN FEDERATION" -"1310203904","1310204159","BE","BEL","BELGIUM" -"1310204160","1310204191","FR","FRA","FRANCE" -"1310204192","1310204255","BE","BEL","BELGIUM" -"1310204256","1310204271","FR","FRA","FRANCE" -"1310204272","1310204695","BE","BEL","BELGIUM" -"1310204696","1310204707","FR","FRA","FRANCE" -"1310204708","1310205951","BE","BEL","BELGIUM" -"1310205952","1310207999","RU","RUS","RUSSIAN FEDERATION" -"1310208000","1310210047","MD","MDA","REPUBLIC OF MOLDOVA" -"1310210048","1310212095","RU","RUS","RUSSIAN FEDERATION" -"1310212096","1310214143","HU","HUN","HUNGARY" -"1310214144","1310216191","UA","UKR","UKRAINE" -"1310216192","1310218239","IT","ITA","ITALY" -"1310218240","1310220287","NO","NOR","NORWAY" -"1310220288","1310222335","NL","NLD","NETHERLANDS" -"1310222336","1310224383","RS","SRB","SERBIA" -"1310224384","1310226431","GB","GBR","UNITED KINGDOM" -"1310226432","1310228479","BE","BEL","BELGIUM" -"1310228480","1310230527","FR","FRA","FRANCE" -"1310230528","1310232575","ES","ESP","SPAIN" -"1310232576","1310234623","NO","NOR","NORWAY" -"1310234624","1310236671","RU","RUS","RUSSIAN FEDERATION" -"1310236672","1310238719","PL","POL","POLAND" -"1310238720","1310240767","BE","BEL","BELGIUM" -"1310240768","1310242815","RU","RUS","RUSSIAN FEDERATION" -"1310242816","1310244863","HU","HUN","HUNGARY" -"1310244864","1310246911","EE","EST","ESTONIA" -"1310246912","1310246927","FR","FRA","FRANCE" -"1310246928","1310246943","ES","ESP","SPAIN" -"1310246944","1310246959","IT","ITA","ITALY" -"1310246960","1310246975","AT","AUT","AUSTRIA" -"1310246976","1310246991","PT","PRT","PORTUGAL" -"1310246992","1310247007","NL","NLD","NETHERLANDS" -"1310247008","1310247023","GB","GBR","UNITED KINGDOM" -"1310247024","1310247039","GR","GRC","GREECE" -"1310247040","1310247055","CL","CHL","CHILE" -"1310247056","1310247071","BE","BEL","BELGIUM" -"1310247072","1310247087","MX","MEX","MEXICO" -"1310247088","1310247103","AR","ARG","ARGENTINA" -"1310247104","1310247119","PL","POL","POLAND" -"1310247120","1310247135","IE","IRL","IRELAND" -"1310247136","1310247151","CH","CHE","SWITZERLAND" -"1310247152","1310247167","RU","RUS","RUSSIAN FEDERATION" -"1310247168","1310247183","BE","BEL","BELGIUM" -"1310247184","1310247199","BR","BRA","BRAZIL" -"1310247200","1310247215","CZ","CZE","CZECH REPUBLIC" -"1310247216","1310247231","HK","HKG","HONG KONG" -"1310247232","1310247247","LU","LUX","LUXEMBOURG" -"1310247248","1310247263","CN","CHN","CHINA" -"1310247264","1310247279","PH","PHL","PHILIPPINES" -"1310247280","1310247295","CH","CHE","SWITZERLAND" -"1310247296","1310247311","JP","JPN","JAPAN" -"1310247312","1310247327","PE","PER","PERU" -"1310247328","1310247343","DE","DEU","GERMANY" -"1310247344","1310247359","CA","CAN","CANADA" -"1310247360","1310247375","CR","CRI","COSTA RICA" -"1310247376","1310247391","IN","IND","INDIA" -"1310247392","1310247407","US","USA","UNITED STATES" -"1310247408","1310247423","CA","CAN","CANADA" -"1310247424","1310247431","IL","ISR","ISRAEL" -"1310247432","1310247439","BR","BRA","BRAZIL" -"1310247440","1310247447","CZ","CZE","CZECH REPUBLIC" -"1310247448","1310247463","BG","BGR","BULGARIA" -"1310247464","1310247471","CN","CHN","CHINA" -"1310247472","1310247479","LT","LTU","LITHUANIA" -"1310247480","1310247487","CY","CYP","CYPRUS" -"1310247488","1310247495","JP","JPN","JAPAN" -"1310247496","1310247503","HU","HUN","HUNGARY" -"1310247504","1310247511","DE","DEU","GERMANY" -"1310247512","1310247519","FI","FIN","FINLAND" -"1310247520","1310247527","LV","LVA","LATVIA" -"1310247528","1310247535","IN","IND","INDIA" -"1310247536","1310247543","US","USA","UNITED STATES" -"1310247544","1310247551","CA","CAN","CANADA" -"1310247552","1310247559","FR","FRA","FRANCE" -"1310247560","1310247567","ES","ESP","SPAIN" -"1310247568","1310247575","IT","ITA","ITALY" -"1310247576","1310247583","AT","AUT","AUSTRIA" -"1310247584","1310247591","PT","PRT","PORTUGAL" -"1310247592","1310247599","NL","NLD","NETHERLANDS" -"1310247600","1310247607","GB","GBR","UNITED KINGDOM" -"1310247608","1310247615","GR","GRC","GREECE" -"1310247616","1310247623","TR","TUR","TURKEY" -"1310247624","1310247631","SE","SWE","SWEDEN" -"1310247632","1310247639","NO","NOR","NORWAY" -"1310247640","1310247647","AR","ARG","ARGENTINA" -"1310247648","1310247655","PL","POL","POLAND" -"1310247656","1310247663","IE","IRL","IRELAND" -"1310247664","1310247671","DK","DNK","DENMARK" -"1310247672","1310247679","RU","RUS","RUSSIAN FEDERATION" -"1310247680","1310247687","IL","ISR","ISRAEL" -"1310247688","1310247695","BR","BRA","BRAZIL" -"1310247696","1310247703","CZ","CZE","CZECH REPUBLIC" -"1310247704","1310247711","BG","BGR","BULGARIA" -"1310247712","1310247719","RO","ROM","ROMANIA" -"1310247720","1310247727","CN","CHN","CHINA" -"1310247728","1310247735","LT","LTU","LITHUANIA" -"1310247736","1310247743","CY","CYP","CYPRUS" -"1310247744","1310247751","JP","JPN","JAPAN" -"1310247752","1310247759","HU","HUN","HUNGARY" -"1310247760","1310247767","DE","DEU","GERMANY" -"1310247768","1310247775","FI","FIN","FINLAND" -"1310247776","1310247783","LV","LVA","LATVIA" -"1310247784","1310247791","IN","IND","INDIA" -"1310247792","1310247799","US","USA","UNITED STATES" -"1310247800","1310247807","CA","CAN","CANADA" -"1310247808","1310247815","FR","FRA","FRANCE" -"1310247816","1310247823","ES","ESP","SPAIN" -"1310247824","1310247831","IT","ITA","ITALY" -"1310247832","1310247839","AT","AUT","AUSTRIA" -"1310247840","1310247847","PT","PRT","PORTUGAL" -"1310247848","1310247855","NL","NLD","NETHERLANDS" -"1310247856","1310247863","GB","GBR","UNITED KINGDOM" -"1310247864","1310247871","GR","GRC","GREECE" -"1310247872","1310247879","TR","TUR","TURKEY" -"1310247880","1310247887","SE","SWE","SWEDEN" -"1310247888","1310247895","NO","NOR","NORWAY" -"1310247896","1310247903","AR","ARG","ARGENTINA" -"1310247904","1310247911","PL","POL","POLAND" -"1310247912","1310247919","IE","IRL","IRELAND" -"1310247920","1310247927","DK","DNK","DENMARK" -"1310247928","1310247935","RU","RUS","RUSSIAN FEDERATION" -"1310247936","1310248447","CH","CHE","SWITZERLAND" -"1310248448","1310248455","BE","BEL","BELGIUM" -"1310248456","1310248463","BR","BRA","BRAZIL" -"1310248464","1310248487","FR","FRA","FRANCE" -"1310248488","1310248495","CN","CHN","CHINA" -"1310248496","1310248503","FR","FRA","FRANCE" -"1310248504","1310248511","CY","CYP","CYPRUS" -"1310248512","1310248519","JP","JPN","JAPAN" -"1310248520","1310248527","HU","HUN","HUNGARY" -"1310248528","1310248535","DE","DEU","GERMANY" -"1310248536","1310248543","FI","FIN","FINLAND" -"1310248544","1310248551","LV","LVA","LATVIA" -"1310248552","1310248559","IN","IND","INDIA" -"1310248560","1310248567","US","USA","UNITED STATES" -"1310248568","1310248575","CA","CAN","CANADA" -"1310248576","1310248583","FR","FRA","FRANCE" -"1310248584","1310248591","ES","ESP","SPAIN" -"1310248592","1310248599","IT","ITA","ITALY" -"1310248600","1310248607","AT","AUT","AUSTRIA" -"1310248608","1310248615","PT","PRT","PORTUGAL" -"1310248616","1310248623","NL","NLD","NETHERLANDS" -"1310248624","1310248631","GB","GBR","UNITED KINGDOM" -"1310248632","1310248639","GR","GRC","GREECE" -"1310248640","1310248647","TR","TUR","TURKEY" -"1310248648","1310248655","SE","SWE","SWEDEN" -"1310248656","1310248663","NO","NOR","NORWAY" -"1310248664","1310248671","AR","ARG","ARGENTINA" -"1310248672","1310248679","PL","POL","POLAND" -"1310248680","1310248687","IE","IRL","IRELAND" -"1310248688","1310248695","DK","DNK","DENMARK" -"1310248696","1310248703","RU","RUS","RUSSIAN FEDERATION" -"1310248704","1310248959","CH","CHE","SWITZERLAND" -"1310248960","1310249215","IM","IMN","ISLE OF MAN" -"1310249216","1310249279","GB","GBR","UNITED KINGDOM" -"1310249280","1310249775","IM","IMN","ISLE OF MAN" -"1310249776","1310249801","GG","GGY","GUERNSEY" -"1310249802","1310250111","IM","IMN","ISLE OF MAN" -"1310250112","1310250143","GG","GGY","GUERNSEY" -"1310250144","1310250495","IM","IMN","ISLE OF MAN" -"1310250496","1310251007","MT","MLT","MALTA" -"1310251008","1310253055","LU","LUX","LUXEMBOURG" -"1310253056","1310255103","RU","RUS","RUSSIAN FEDERATION" -"1310255104","1310257151","CZ","CZE","CZECH REPUBLIC" -"1310257152","1310259199","FR","FRA","FRANCE" -"1310259200","1310261247","DE","DEU","GERMANY" -"1310261248","1310277631","UA","UKR","UKRAINE" -"1310277632","1310310399","RU","RUS","RUSSIAN FEDERATION" -"1310310400","1310326783","GB","GBR","UNITED KINGDOM" -"1310326784","1310343167","NO","NOR","NORWAY" -"1310343168","1310359551","IT","ITA","ITALY" -"1310359552","1310392319","UA","UKR","UKRAINE" -"1310392320","1310408703","NL","NLD","NETHERLANDS" -"1310408704","1310425087","FI","FIN","FINLAND" -"1310441472","1310457855","UA","UKR","UKRAINE" -"1310457856","1310474239","PL","POL","POLAND" -"1310474240","1310490623","EE","EST","ESTONIA" -"1310490624","1310507007","BA","BIH","BOSNIA AND HERZEGOVINA" -"1310507008","1310523391","LV","LVA","LATVIA" -"1310523392","1310556159","RU","RUS","RUSSIAN FEDERATION" -"1310556160","1310572543","PT","PRT","PORTUGAL" -"1310572544","1310588927","BE","BEL","BELGIUM" -"1310588928","1310605311","RU","RUS","RUSSIAN FEDERATION" -"1310605312","1310621695","PL","POL","POLAND" -"1310621696","1310638079","RS","SRB","SERBIA" -"1310638080","1310654463","UA","UKR","UKRAINE" -"1310654464","1310656511","RU","RUS","RUSSIAN FEDERATION" -"1310656512","1310658559","LU","LUX","LUXEMBOURG" -"1310658560","1310660607","RU","RUS","RUSSIAN FEDERATION" -"1310660608","1310662655","CZ","CZE","CZECH REPUBLIC" -"1310662656","1310664703","DK","DNK","DENMARK" -"1310664704","1310666751","FR","FRA","FRANCE" -"1310666752","1310668799","NL","NLD","NETHERLANDS" -"1310668800","1310670847","RO","ROM","ROMANIA" -"1310670848","1310672895","DE","DEU","GERMANY" -"1310672896","1310674943","RU","RUS","RUSSIAN FEDERATION" -"1310674944","1310676991","NO","NOR","NORWAY" -"1310676992","1310679039","PL","POL","POLAND" -"1310679040","1310681087","RU","RUS","RUSSIAN FEDERATION" -"1310681088","1310683135","GB","GBR","UNITED KINGDOM" -"1310683136","1310685183","NL","NLD","NETHERLANDS" -"1310685184","1310687231","PL","POL","POLAND" -"1310687232","1310689279","RO","ROM","ROMANIA" -"1310689280","1310695423","PL","POL","POLAND" -"1310695424","1310697471","RO","ROM","ROMANIA" -"1310697472","1310699519","DE","DEU","GERMANY" -"1310699520","1310705663","UA","UKR","UKRAINE" -"1310705664","1310711807","RU","RUS","RUSSIAN FEDERATION" -"1310711808","1310713855","LT","LTU","LITHUANIA" -"1310713856","1310715903","UA","UKR","UKRAINE" -"1310715904","1310717951","RU","RUS","RUSSIAN FEDERATION" -"1310717952","1310719999","UA","UKR","UKRAINE" -"1310720000","1310851071","GB","GBR","UNITED KINGDOM" -"1310851072","1310982143","DE","DEU","GERMANY" -"1310982144","1311113215","RU","RUS","RUSSIAN FEDERATION" -"1311113216","1311244287","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1311244288","1311246335","MK","MKD","THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA" -"1311246336","1311248383","IT","ITA","ITALY" -"1311248384","1311250431","GB","GBR","UNITED KINGDOM" -"1311250432","1311252479","RU","RUS","RUSSIAN FEDERATION" -"1311252480","1311254527","GB","GBR","UNITED KINGDOM" -"1311254528","1311256575","SE","SWE","SWEDEN" -"1311256576","1311258623","FR","FRA","FRANCE" -"1311258624","1311262719","GB","GBR","UNITED KINGDOM" -"1311262720","1311262975","FR","FRA","FRANCE" -"1311262976","1311263407","CH","CHE","SWITZERLAND" -"1311263408","1311263423","BE","BEL","BELGIUM" -"1311263424","1311264767","CH","CHE","SWITZERLAND" -"1311264768","1311266815","RU","RUS","RUSSIAN FEDERATION" -"1311266816","1311268863","FR","FRA","FRANCE" -"1311268864","1311270911","BE","BEL","BELGIUM" -"1311270912","1311272959","RU","RUS","RUSSIAN FEDERATION" -"1311272960","1311275007","GB","GBR","UNITED KINGDOM" -"1311275008","1311277055","FR","FRA","FRANCE" -"1311277056","1311279103","IT","ITA","ITALY" -"1311279104","1311281151","BG","BGR","BULGARIA" -"1311281152","1311285247","GB","GBR","UNITED KINGDOM" -"1311285248","1311289343","IT","ITA","ITALY" -"1311289344","1311291391","LB","LBN","LEBANON" -"1311291392","1311293439","RU","RUS","RUSSIAN FEDERATION" -"1311293440","1311295487","NL","NLD","NETHERLANDS" -"1311295488","1311297535","IT","ITA","ITALY" -"1311297536","1311299583","AT","AUT","AUSTRIA" -"1311299584","1311301631","RU","RUS","RUSSIAN FEDERATION" -"1311301632","1311303679","TR","TUR","TURKEY" -"1311303680","1311307775","GB","GBR","UNITED KINGDOM" -"1311307776","1311309823","IS","ISL","ICELAND" -"1311309824","1311311871","GB","GBR","UNITED KINGDOM" -"1311311872","1311315967","CZ","CZE","CZECH REPUBLIC" -"1311315968","1311316423","PL","POL","POLAND" -"1311316424","1311316439","GB","GBR","UNITED KINGDOM" -"1311316440","1311316447","PL","POL","POLAND" -"1311316448","1311316455","HR","HRV","CROATIA" -"1311316456","1311318015","PL","POL","POLAND" -"1311318016","1311320063","RU","RUS","RUSSIAN FEDERATION" -"1311320064","1311322111","FR","FRA","FRANCE" -"1311322112","1311324159","IT","ITA","ITALY" -"1311324160","1311326207","LB","LBN","LEBANON" -"1311326208","1311328255","BE","BEL","BELGIUM" -"1311328256","1311330303","NL","NLD","NETHERLANDS" -"1311330304","1311332351","DE","DEU","GERMANY" -"1311332352","1311338495","RU","RUS","RUSSIAN FEDERATION" -"1311338496","1311340543","AT","AUT","AUSTRIA" -"1311340544","1311342591","NO","NOR","NORWAY" -"1311342592","1311344639","FR","FRA","FRANCE" -"1311344640","1311346687","NO","NOR","NORWAY" -"1311346688","1311348735","AT","AUT","AUSTRIA" -"1311348736","1311350783","GB","GBR","UNITED KINGDOM" -"1311350784","1311352831","RU","RUS","RUSSIAN FEDERATION" -"1311352832","1311354879","SK","SVK","SLOVAKIA" -"1311354880","1311356927","RU","RUS","RUSSIAN FEDERATION" -"1311356928","1311358263","FR","FRA","FRANCE" -"1311358264","1311358271","ES","ESP","SPAIN" -"1311358272","1311358975","FR","FRA","FRANCE" -"1311358976","1311361023","RU","RUS","RUSSIAN FEDERATION" -"1311361024","1311363071","NL","NLD","NETHERLANDS" -"1311363072","1311365119","GB","GBR","UNITED KINGDOM" -"1311365120","1311367167","DE","DEU","GERMANY" -"1311367168","1311367295","GN","GIN","GUINEA" -"1311367296","1311367423","GA","GAB","GABON" -"1311367424","1311367679","MM","MMR","MYANMAR" -"1311367680","1311367711","UG","UGA","UGANDA" -"1311367712","1311367743","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"1311367744","1311367775","SL","SLE","SIERRA LEONE" -"1311367776","1311367807","LR","LBR","LIBERIA" -"1311367808","1311367839","US","USA","UNITED STATES" -"1311367840","1311367871","DK","DNK","DENMARK" -"1311367872","1311367887","LR","LBR","LIBERIA" -"1311367888","1311367895","DE","DEU","GERMANY" -"1311367896","1311367935","DK","DNK","DENMARK" -"1311367936","1311367967","BJ","BEN","BENIN" -"1311367968","1311368191","DE","DEU","GERMANY" -"1311368192","1311368319","BD","BGD","BANGLADESH" -"1311368320","1311368447","CF","CAF","CENTRAL AFRICAN REPUBLIC" -"1311368448","1311368575","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"1311368576","1311368703","PG","PNG","PAPUA NEW GUINEA" -"1311368704","1311368831","NP","NPL","NEPAL" -"1311368832","1311368959","GM","GMB","GAMBIA" -"1311368960","1311369087","PT","PRT","PORTUGAL" -"1311369088","1311369215","BT","BTN","BHUTAN" -"1311369216","1311371263","FR","FRA","FRANCE" -"1311371264","1311373311","SE","SWE","SWEDEN" -"1311373312","1311375359","FR","FRA","FRANCE" -"1311375360","1311506431","DE","DEU","GERMANY" -"1311506432","1311637503","CZ","CZE","CZECH REPUBLIC" -"1311637504","1312292863","DE","DEU","GERMANY" -"1312292864","1312817151","LT","LTU","LITHUANIA" -"1312817152","1313865727","SE","SWE","SWEDEN" -"1313865728","1313931263","CZ","CZE","CZECH REPUBLIC" -"1313931264","1313996799","RU","RUS","RUSSIAN FEDERATION" -"1313996800","1314062335","SE","SWE","SWEDEN" -"1314062336","1314127871","BG","BGR","BULGARIA" -"1314127872","1314193407","LV","LVA","LATVIA" -"1314193408","1314258943","RU","RUS","RUSSIAN FEDERATION" -"1314258944","1314324479","GB","GBR","UNITED KINGDOM" -"1314324480","1314390015","GR","GRC","GREECE" -"1314390016","1314455551","PL","POL","POLAND" -"1314455552","1314521087","KW","KWT","KUWAIT" -"1314521088","1314586623","BG","BGR","BULGARIA" -"1314586624","1314652159","NO","NOR","NORWAY" -"1314652160","1314717695","HU","HUN","HUNGARY" -"1314717696","1314783231","SA","SAU","SAUDI ARABIA" -"1314783232","1314848767","DE","DEU","GERMANY" -"1314848768","1315045375","RO","ROM","ROMANIA" -"1315045376","1315176447","SK","SVK","SLOVAKIA" -"1315176448","1315307519","QA","QAT","QATAR" -"1315307520","1315438591","CZ","CZE","CZECH REPUBLIC" -"1315438592","1315504127","AT","AUT","AUSTRIA" -"1315504128","1315569663","GB","GBR","UNITED KINGDOM" -"1315569664","1315700735","RU","RUS","RUSSIAN FEDERATION" -"1315700736","1315704831","SE","SWE","SWEDEN" -"1315704832","1315708927","HU","HUN","HUNGARY" -"1315708928","1315713023","GR","GRC","GREECE" -"1315713024","1315717119","SE","SWE","SWEDEN" -"1315717120","1315725311","RU","RUS","RUSSIAN FEDERATION" -"1315725312","1315729407","CZ","CZE","CZECH REPUBLIC" -"1315733504","1315737599","NL","NLD","NETHERLANDS" -"1315737600","1315741695","CZ","CZE","CZECH REPUBLIC" -"1315741696","1315745791","LB","LBN","LEBANON" -"1315745792","1315749375","CZ","CZE","CZECH REPUBLIC" -"1315749376","1315749503","ES","ESP","SPAIN" -"1315749504","1315749887","CZ","CZE","CZECH REPUBLIC" -"1315749888","1315753983","RU","RUS","RUSSIAN FEDERATION" -"1315753984","1315758079","KZ","KAZ","KAZAKHSTAN" -"1315758080","1315762175","FR","FRA","FRANCE" -"1315762176","1315766271","BG","BGR","BULGARIA" -"1315766272","1315770367","NL","NLD","NETHERLANDS" -"1315770368","1315770383","UA","UKR","UKRAINE" -"1315770384","1315770399","NA","NAM","NAMIBIA" -"1315770400","1315770503","UA","UKR","UKRAINE" -"1315770504","1315770511","NA","NAM","NAMIBIA" -"1315770512","1315770575","UA","UKR","UKRAINE" -"1315770576","1315770583","NA","NAM","NAMIBIA" -"1315770584","1315770591","UA","UKR","UKRAINE" -"1315770592","1315770599","NA","NAM","NAMIBIA" -"1315770600","1315770639","UA","UKR","UKRAINE" -"1315770640","1315770647","NA","NAM","NAMIBIA" -"1315770648","1315770719","UA","UKR","UKRAINE" -"1315770720","1315770727","NA","NAM","NAMIBIA" -"1315770728","1315770975","UA","UKR","UKRAINE" -"1315770976","1315770983","NA","NAM","NAMIBIA" -"1315770984","1315770991","UA","UKR","UKRAINE" -"1315770992","1315770999","NA","NAM","NAMIBIA" -"1315771000","1315771199","UA","UKR","UKRAINE" -"1315771200","1315771207","NA","NAM","NAMIBIA" -"1315771208","1315771223","UA","UKR","UKRAINE" -"1315771224","1315771231","NA","NAM","NAMIBIA" -"1315771232","1315771247","UA","UKR","UKRAINE" -"1315771248","1315771263","NA","NAM","NAMIBIA" -"1315771264","1315771415","UA","UKR","UKRAINE" -"1315771416","1315771423","NA","NAM","NAMIBIA" -"1315771424","1315771639","UA","UKR","UKRAINE" -"1315771640","1315771647","NA","NAM","NAMIBIA" -"1315771648","1315771759","UA","UKR","UKRAINE" -"1315771760","1315771767","NA","NAM","NAMIBIA" -"1315771768","1315771815","UA","UKR","UKRAINE" -"1315771816","1315771823","NA","NAM","NAMIBIA" -"1315771824","1315771871","UA","UKR","UKRAINE" -"1315771872","1315771879","NA","NAM","NAMIBIA" -"1315771880","1315771935","UA","UKR","UKRAINE" -"1315771936","1315771951","NA","NAM","NAMIBIA" -"1315771952","1315771959","UA","UKR","UKRAINE" -"1315771960","1315771967","NA","NAM","NAMIBIA" -"1315771968","1315771975","UA","UKR","UKRAINE" -"1315771976","1315771983","NA","NAM","NAMIBIA" -"1315771984","1315772031","UA","UKR","UKRAINE" -"1315772032","1315772039","NA","NAM","NAMIBIA" -"1315772040","1315772167","UA","UKR","UKRAINE" -"1315772168","1315772175","NA","NAM","NAMIBIA" -"1315772176","1315772191","UA","UKR","UKRAINE" -"1315772192","1315772199","NA","NAM","NAMIBIA" -"1315772200","1315772223","UA","UKR","UKRAINE" -"1315772224","1315772231","NA","NAM","NAMIBIA" -"1315772232","1315772303","UA","UKR","UKRAINE" -"1315772304","1315772311","NA","NAM","NAMIBIA" -"1315772312","1315772319","UA","UKR","UKRAINE" -"1315772320","1315772327","NA","NAM","NAMIBIA" -"1315772328","1315772399","UA","UKR","UKRAINE" -"1315772400","1315772407","NA","NAM","NAMIBIA" -"1315772408","1315772463","UA","UKR","UKRAINE" -"1315772464","1315772479","NA","NAM","NAMIBIA" -"1315772480","1315772503","UA","UKR","UKRAINE" -"1315772504","1315772511","NA","NAM","NAMIBIA" -"1315772512","1315772583","UA","UKR","UKRAINE" -"1315772584","1315772599","NA","NAM","NAMIBIA" -"1315772600","1315772703","UA","UKR","UKRAINE" -"1315772704","1315772711","NA","NAM","NAMIBIA" -"1315772712","1315772887","UA","UKR","UKRAINE" -"1315772888","1315772895","NA","NAM","NAMIBIA" -"1315772896","1315772919","UA","UKR","UKRAINE" -"1315772920","1315772927","NA","NAM","NAMIBIA" -"1315772928","1315773463","UA","UKR","UKRAINE" -"1315773464","1315773471","NA","NAM","NAMIBIA" -"1315773472","1315773487","UA","UKR","UKRAINE" -"1315773488","1315773495","NA","NAM","NAMIBIA" -"1315773496","1315773511","UA","UKR","UKRAINE" -"1315773512","1315773519","NA","NAM","NAMIBIA" -"1315773520","1315773535","UA","UKR","UKRAINE" -"1315773536","1315773543","NA","NAM","NAMIBIA" -"1315773544","1315773551","UA","UKR","UKRAINE" -"1315773552","1315773559","NA","NAM","NAMIBIA" -"1315773560","1315773575","UA","UKR","UKRAINE" -"1315773576","1315773583","NA","NAM","NAMIBIA" -"1315773584","1315773655","UA","UKR","UKRAINE" -"1315773656","1315773663","NA","NAM","NAMIBIA" -"1315773664","1315773679","UA","UKR","UKRAINE" -"1315773680","1315773687","NA","NAM","NAMIBIA" -"1315773688","1315773703","UA","UKR","UKRAINE" -"1315773704","1315773711","NA","NAM","NAMIBIA" -"1315773712","1315773719","UA","UKR","UKRAINE" -"1315773720","1315773751","NA","NAM","NAMIBIA" -"1315773752","1315773895","UA","UKR","UKRAINE" -"1315773896","1315773903","NA","NAM","NAMIBIA" -"1315773904","1315773955","UA","UKR","UKRAINE" -"1315773956","1315773959","NA","NAM","NAMIBIA" -"1315773960","1315773983","UA","UKR","UKRAINE" -"1315773984","1315773991","BY","BLR","BELARUS" -"1315773992","1315774015","UA","UKR","UKRAINE" -"1315774016","1315774031","NA","NAM","NAMIBIA" -"1315774032","1315774039","UA","UKR","UKRAINE" -"1315774040","1315774071","NA","NAM","NAMIBIA" -"1315774072","1315774095","UA","UKR","UKRAINE" -"1315774096","1315774111","NA","NAM","NAMIBIA" -"1315774112","1315774135","UA","UKR","UKRAINE" -"1315774136","1315774143","US","USA","UNITED STATES" -"1315774144","1315774191","UA","UKR","UKRAINE" -"1315774192","1315774207","NA","NAM","NAMIBIA" -"1315774208","1315774223","UA","UKR","UKRAINE" -"1315774224","1315774231","NA","NAM","NAMIBIA" -"1315774232","1315774239","UA","UKR","UKRAINE" -"1315774240","1315774255","RU","RUS","RUSSIAN FEDERATION" -"1315774256","1315774263","NA","NAM","NAMIBIA" -"1315774264","1315774423","UA","UKR","UKRAINE" -"1315774424","1315774431","NA","NAM","NAMIBIA" -"1315774432","1315774463","UA","UKR","UKRAINE" -"1315774464","1315782655","RU","RUS","RUSSIAN FEDERATION" -"1315782656","1315786751","AM","ARM","ARMENIA" -"1315786752","1315790847","FR","FRA","FRANCE" -"1315790848","1315794943","RS","SRB","SERBIA" -"1315794944","1315803135","RU","RUS","RUSSIAN FEDERATION" -"1315803136","1315807231","KZ","KAZ","KAZAKHSTAN" -"1315807232","1315815423","GB","GBR","UNITED KINGDOM" -"1315815424","1315819519","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1315819520","1315823615","DK","DNK","DENMARK" -"1315823616","1315827711","IQ","IRQ","IRAQ" -"1315827712","1315831807","RU","RUS","RUSSIAN FEDERATION" -"1315831808","1315835903","SA","SAU","SAUDI ARABIA" -"1315835904","1315836159","CY","CYP","CYPRUS" -"1315836160","1315839487","MT","MLT","MALTA" -"1315839488","1315839743","CY","CYP","CYPRUS" -"1315839744","1315839999","MT","MLT","MALTA" -"1315840000","1315844095","EE","EST","ESTONIA" -"1315844096","1315848191","RU","RUS","RUSSIAN FEDERATION" -"1315848192","1315852287","BH","BHR","BAHRAIN" -"1315852288","1315856383","SE","SWE","SWEDEN" -"1315856384","1315860479","SY","SYR","SYRIAN ARAB REPUBLIC" -"1315860480","1315864575","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1315864576","1315868671","CH","CHE","SWITZERLAND" -"1315868672","1315872767","RU","RUS","RUSSIAN FEDERATION" -"1315872768","1315875183","GB","GBR","UNITED KINGDOM" -"1315875184","1315875199","ES","ESP","SPAIN" -"1315875200","1315876863","GB","GBR","UNITED KINGDOM" -"1315876864","1315880959","IT","ITA","ITALY" -"1315880960","1315885055","BE","BEL","BELGIUM" -"1315885056","1315889151","CZ","CZE","CZECH REPUBLIC" -"1315889152","1315893247","DE","DEU","GERMANY" -"1315893248","1315897343","RU","RUS","RUSSIAN FEDERATION" -"1315897344","1315897855","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1315897856","1315897863","AE","ARE","UNITED ARAB EMIRATES" -"1315897864","1315897879","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1315897880","1315897887","AE","ARE","UNITED ARAB EMIRATES" -"1315897888","1315897951","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1315897952","1315897991","AE","ARE","UNITED ARAB EMIRATES" -"1315897992","1315897999","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1315898000","1315898015","AE","ARE","UNITED ARAB EMIRATES" -"1315898016","1315898031","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1315898032","1315898111","AE","ARE","UNITED ARAB EMIRATES" -"1315898112","1315900799","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1315900800","1315900927","AE","ARE","UNITED ARAB EMIRATES" -"1315900928","1315901439","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1315901440","1315905535","UA","UKR","UKRAINE" -"1315905536","1315907583","BA","BIH","BOSNIA AND HERZEGOVINA" -"1315907584","1315908095","SI","SVN","SLOVENIA" -"1315908096","1315909631","BA","BIH","BOSNIA AND HERZEGOVINA" -"1315909632","1315913727","AZ","AZE","AZERBAIJAN" -"1315913728","1315917823","DE","DEU","GERMANY" -"1315917824","1315921919","RU","RUS","RUSSIAN FEDERATION" -"1315921920","1315926015","TR","TUR","TURKEY" -"1315926016","1315930111","CZ","CZE","CZECH REPUBLIC" -"1315930112","1315934207","DE","DEU","GERMANY" -"1315934208","1315938303","RU","RUS","RUSSIAN FEDERATION" -"1315938304","1315942399","DK","DNK","DENMARK" -"1315942400","1315946495","UA","UKR","UKRAINE" -"1315946496","1315950591","GB","GBR","UNITED KINGDOM" -"1315950592","1315954687","UA","UKR","UKRAINE" -"1315954688","1315958783","DE","DEU","GERMANY" -"1315958784","1315962879","RU","RUS","RUSSIAN FEDERATION" -"1315962880","1317011455","FR","FRA","FRANCE" -"1317011456","1317044223","BG","BGR","BULGARIA" -"1317044224","1317076991","CZ","CZE","CZECH REPUBLIC" -"1317076992","1317109759","BE","BEL","BELGIUM" -"1317109760","1317113279","GB","GBR","UNITED KINGDOM" -"1317113280","1317113343","RU","RUS","RUSSIAN FEDERATION" -"1317113344","1317113855","GB","GBR","UNITED KINGDOM" -"1317113856","1317114111","US","USA","UNITED STATES" -"1317114112","1317115135","GB","GBR","UNITED KINGDOM" -"1317115136","1317115391","IE","IRL","IRELAND" -"1317115392","1317115647","CN","CHN","CHINA" -"1317115648","1317118207","GB","GBR","UNITED KINGDOM" -"1317118208","1317118463","IN","IND","INDIA" -"1317118464","1317119103","GB","GBR","UNITED KINGDOM" -"1317119104","1317119167","IT","ITA","ITALY" -"1317119168","1317119487","GB","GBR","UNITED KINGDOM" -"1317119488","1317119743","KY","CYM","CAYMAN ISLANDS" -"1317119744","1317126399","GB","GBR","UNITED KINGDOM" -"1317126400","1317126655","US","USA","UNITED STATES" -"1317126656","1317129279","GB","GBR","UNITED KINGDOM" -"1317129280","1317129343","CA","CAN","CANADA" -"1317129344","1317129471","GB","GBR","UNITED KINGDOM" -"1317129472","1317129727","IT","ITA","ITALY" -"1317129728","1317133823","GB","GBR","UNITED KINGDOM" -"1317133824","1317134079","FI","FIN","FINLAND" -"1317134080","1317134655","GB","GBR","UNITED KINGDOM" -"1317134656","1317134719","CN","CHN","CHINA" -"1317134720","1317137279","GB","GBR","UNITED KINGDOM" -"1317137280","1317137343","CN","CHN","CHINA" -"1317137344","1317137663","GB","GBR","UNITED KINGDOM" -"1317137664","1317137919","SE","SWE","SWEDEN" -"1317137920","1317141247","GB","GBR","UNITED KINGDOM" -"1317141248","1317141503","CA","CAN","CANADA" -"1317141504","1317142143","GB","GBR","UNITED KINGDOM" -"1317142144","1317142271","CA","CAN","CANADA" -"1317142272","1317142527","GB","GBR","UNITED KINGDOM" -"1317142528","1317175295","PT","PRT","PORTUGAL" -"1317175296","1317208063","BG","BGR","BULGARIA" -"1317208064","1317240831","HU","HUN","HUNGARY" -"1317240832","1317273599","PL","POL","POLAND" -"1317273600","1317306367","AT","AUT","AUSTRIA" -"1317306368","1317339135","RU","RUS","RUSSIAN FEDERATION" -"1317339136","1317371903","MT","MLT","MALTA" -"1317371904","1317404671","PL","POL","POLAND" -"1317404672","1317437439","IT","ITA","ITALY" -"1317437440","1317470207","HR","HRV","CROATIA" -"1317470208","1317502975","TR","TUR","TURKEY" -"1317502976","1317535743","IE","IRL","IRELAND" -"1317535744","1317552127","GB","GBR","UNITED KINGDOM" -"1317552128","1317568511","ES","ESP","SPAIN" -"1317568512","1317584895","CZ","CZE","CZECH REPUBLIC" -"1317584896","1317601279","RU","RUS","RUSSIAN FEDERATION" -"1317601280","1317617663","UA","UKR","UKRAINE" -"1317617664","1317634047","RU","RUS","RUSSIAN FEDERATION" -"1317634048","1317646895","IE","IRL","IRELAND" -"1317646896","1317646911","GB","GBR","UNITED KINGDOM" -"1317646912","1317646991","IE","IRL","IRELAND" -"1317646992","1317646999","GB","GBR","UNITED KINGDOM" -"1317647000","1317649407","IE","IRL","IRELAND" -"1317649408","1317649919","GB","GBR","UNITED KINGDOM" -"1317649920","1317650431","IE","IRL","IRELAND" -"1317650432","1317666815","RU","RUS","RUSSIAN FEDERATION" -"1317666816","1317666823","IQ","IRQ","IRAQ" -"1317666824","1317666831","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"1317666832","1317666839","NG","NGA","NIGERIA" -"1317666840","1317666855","GH","GHA","GHANA" -"1317666856","1317666863","GB","GBR","UNITED KINGDOM" -"1317666864","1317666871","GH","GHA","GHANA" -"1317666872","1317666879","NG","NGA","NIGERIA" -"1317666880","1317666887","LR","LBR","LIBERIA" -"1317666888","1317666895","NG","NGA","NIGERIA" -"1317666896","1317666903","GB","GBR","UNITED KINGDOM" -"1317666904","1317666911","NG","NGA","NIGERIA" -"1317666912","1317666919","GB","GBR","UNITED KINGDOM" -"1317666920","1317666927","NG","NGA","NIGERIA" -"1317666928","1317666959","GB","GBR","UNITED KINGDOM" -"1317666960","1317666967","NG","NGA","NIGERIA" -"1317666968","1317666983","GB","GBR","UNITED KINGDOM" -"1317666984","1317666991","CM","CMR","CAMEROON" -"1317666992","1317666999","GB","GBR","UNITED KINGDOM" -"1317667000","1317667007","AO","AGO","ANGOLA" -"1317667008","1317667015","GH","GHA","GHANA" -"1317667016","1317667023","GB","GBR","UNITED KINGDOM" -"1317667024","1317667031","LR","LBR","LIBERIA" -"1317667032","1317667039","NG","NGA","NIGERIA" -"1317667040","1317667047","GH","GHA","GHANA" -"1317667048","1317667055","NG","NGA","NIGERIA" -"1317667056","1317667063","LR","LBR","LIBERIA" -"1317667064","1317667087","AO","AGO","ANGOLA" -"1317667088","1317667095","GB","GBR","UNITED KINGDOM" -"1317667096","1317667103","GH","GHA","GHANA" -"1317667104","1317667111","NG","NGA","NIGERIA" -"1317667112","1317667119","GH","GHA","GHANA" -"1317667120","1317667135","GB","GBR","UNITED KINGDOM" -"1317667136","1317667143","AO","AGO","ANGOLA" -"1317667144","1317667151","GB","GBR","UNITED KINGDOM" -"1317667152","1317667159","NG","NGA","NIGERIA" -"1317667160","1317667167","AO","AGO","ANGOLA" -"1317667168","1317667175","NG","NGA","NIGERIA" -"1317667176","1317667183","GH","GHA","GHANA" -"1317667184","1317667191","GB","GBR","UNITED KINGDOM" -"1317667192","1317667231","NG","NGA","NIGERIA" -"1317667232","1317667239","GH","GHA","GHANA" -"1317667240","1317667247","NG","NGA","NIGERIA" -"1317667248","1317667255","GB","GBR","UNITED KINGDOM" -"1317667256","1317667263","NG","NGA","NIGERIA" -"1317667264","1317667271","GB","GBR","UNITED KINGDOM" -"1317667272","1317667295","NG","NGA","NIGERIA" -"1317667296","1317667303","GB","GBR","UNITED KINGDOM" -"1317667304","1317667335","NG","NGA","NIGERIA" -"1317667336","1317667343","GB","GBR","UNITED KINGDOM" -"1317667344","1317667351","NG","NGA","NIGERIA" -"1317667352","1317667367","AO","AGO","ANGOLA" -"1317667368","1317667375","NG","NGA","NIGERIA" -"1317667376","1317667391","AO","AGO","ANGOLA" -"1317667392","1317667407","GB","GBR","UNITED KINGDOM" -"1317667408","1317667423","NG","NGA","NIGERIA" -"1317667424","1317667431","TD","TCD","CHAD" -"1317667432","1317667439","GH","GHA","GHANA" -"1317667440","1317667447","GB","GBR","UNITED KINGDOM" -"1317667448","1317667471","NG","NGA","NIGERIA" -"1317667472","1317667479","GB","GBR","UNITED KINGDOM" -"1317667480","1317667487","NG","NGA","NIGERIA" -"1317667488","1317667495","GH","GHA","GHANA" -"1317667496","1317667503","NG","NGA","NIGERIA" -"1317667504","1317667527","GB","GBR","UNITED KINGDOM" -"1317667528","1317667535","AO","AGO","ANGOLA" -"1317667536","1317667543","GB","GBR","UNITED KINGDOM" -"1317667544","1317667551","AO","AGO","ANGOLA" -"1317667552","1317667567","NG","NGA","NIGERIA" -"1317667568","1317667583","GH","GHA","GHANA" -"1317667584","1317667759","NG","NGA","NIGERIA" -"1317667760","1317667767","FR","FRA","FRANCE" -"1317667768","1317667775","ZA","ZAF","SOUTH AFRICA" -"1317667776","1317667783","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"1317667784","1317667823","NG","NGA","NIGERIA" -"1317667824","1317668095","GB","GBR","UNITED KINGDOM" -"1317668096","1317668103","GH","GHA","GHANA" -"1317668104","1317668111","ZM","ZMB","ZAMBIA" -"1317668112","1317668127","AO","AGO","ANGOLA" -"1317668128","1317668143","GB","GBR","UNITED KINGDOM" -"1317668144","1317668151","AO","AGO","ANGOLA" -"1317668152","1317668175","NG","NGA","NIGERIA" -"1317668176","1317668183","GB","GBR","UNITED KINGDOM" -"1317668184","1317668191","CI","CIV","COTE D'IVOIRE" -"1317668192","1317668199","NG","NGA","NIGERIA" -"1317668200","1317668207","BW","BWA","BOTSWANA" -"1317668208","1317668215","LR","LBR","LIBERIA" -"1317668216","1317668223","CM","CMR","CAMEROON" -"1317668224","1317668239","NG","NGA","NIGERIA" -"1317668240","1317668247","LR","LBR","LIBERIA" -"1317668248","1317668255","NG","NGA","NIGERIA" -"1317668256","1317668263","GB","GBR","UNITED KINGDOM" -"1317668264","1317668271","AO","AGO","ANGOLA" -"1317668272","1317668279","SL","SLE","SIERRA LEONE" -"1317668280","1317668295","GB","GBR","UNITED KINGDOM" -"1317668296","1317668303","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"1317668304","1317668311","NG","NGA","NIGERIA" -"1317668312","1317668319","IQ","IRQ","IRAQ" -"1317668320","1317668327","GB","GBR","UNITED KINGDOM" -"1317668328","1317668343","NG","NGA","NIGERIA" -"1317668344","1317668351","AO","AGO","ANGOLA" -"1317668352","1317668359","NG","NGA","NIGERIA" -"1317668360","1317668367","SL","SLE","SIERRA LEONE" -"1317668368","1317668383","NG","NGA","NIGERIA" -"1317668384","1317668391","GB","GBR","UNITED KINGDOM" -"1317668392","1317668399","NG","NGA","NIGERIA" -"1317668400","1317668407","GB","GBR","UNITED KINGDOM" -"1317668408","1317668415","GH","GHA","GHANA" -"1317668416","1317668447","NG","NGA","NIGERIA" -"1317668448","1317668455","SL","SLE","SIERRA LEONE" -"1317668456","1317668463","NG","NGA","NIGERIA" -"1317668464","1317668471","AO","AGO","ANGOLA" -"1317668472","1317668479","NG","NGA","NIGERIA" -"1317668480","1317668487","GH","GHA","GHANA" -"1317668488","1317668495","NG","NGA","NIGERIA" -"1317668496","1317668503","GH","GHA","GHANA" -"1317668504","1317668511","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"1317668512","1317668519","IQ","IRQ","IRAQ" -"1317668520","1317668527","MZ","MOZ","MOZAMBIQUE" -"1317668528","1317668535","AO","AGO","ANGOLA" -"1317668536","1317668543","BJ","BEN","BENIN" -"1317668544","1317668551","UG","UGA","UGANDA" -"1317668552","1317668559","AO","AGO","ANGOLA" -"1317668560","1317668575","NG","NGA","NIGERIA" -"1317668576","1317668583","IQ","IRQ","IRAQ" -"1317668584","1317668591","LR","LBR","LIBERIA" -"1317668592","1317668599","NG","NGA","NIGERIA" -"1317668600","1317668615","GB","GBR","UNITED KINGDOM" -"1317668616","1317668623","NG","NGA","NIGERIA" -"1317668624","1317668631","IQ","IRQ","IRAQ" -"1317668632","1317668639","GB","GBR","UNITED KINGDOM" -"1317668640","1317668655","NG","NGA","NIGERIA" -"1317668656","1317668671","GB","GBR","UNITED KINGDOM" -"1317668672","1317668735","NG","NGA","NIGERIA" -"1317668736","1317668743","GB","GBR","UNITED KINGDOM" -"1317668744","1317668751","AO","AGO","ANGOLA" -"1317668752","1317668759","GB","GBR","UNITED KINGDOM" -"1317668760","1317668767","IQ","IRQ","IRAQ" -"1317668768","1317668775","LR","LBR","LIBERIA" -"1317668776","1317668791","NG","NGA","NIGERIA" -"1317668792","1317668799","GB","GBR","UNITED KINGDOM" -"1317668800","1317668807","AO","AGO","ANGOLA" -"1317668808","1317668815","NG","NGA","NIGERIA" -"1317668816","1317668823","GB","GBR","UNITED KINGDOM" -"1317668824","1317668831","AO","AGO","ANGOLA" -"1317668832","1317668855","NG","NGA","NIGERIA" -"1317668856","1317668863","GB","GBR","UNITED KINGDOM" -"1317668864","1317668871","LR","LBR","LIBERIA" -"1317668872","1317668887","NG","NGA","NIGERIA" -"1317668888","1317668895","GB","GBR","UNITED KINGDOM" -"1317668896","1317668903","NG","NGA","NIGERIA" -"1317668904","1317668911","GB","GBR","UNITED KINGDOM" -"1317668912","1317668927","NG","NGA","NIGERIA" -"1317668928","1317668935","GB","GBR","UNITED KINGDOM" -"1317668936","1317668983","NG","NGA","NIGERIA" -"1317668984","1317668991","GB","GBR","UNITED KINGDOM" -"1317668992","1317668999","NG","NGA","NIGERIA" -"1317669000","1317669007","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"1317669008","1317669031","NG","NGA","NIGERIA" -"1317669032","1317669055","GB","GBR","UNITED KINGDOM" -"1317669056","1317669103","NG","NGA","NIGERIA" -"1317669104","1317669111","GB","GBR","UNITED KINGDOM" -"1317669112","1317669119","NG","NGA","NIGERIA" -"1317669120","1317669375","GE","GEO","GEORGIA" -"1317669376","1317669631","CG","COG","CONGO" -"1317669632","1317669887","GB","GBR","UNITED KINGDOM" -"1317669888","1317669895","AO","AGO","ANGOLA" -"1317669896","1317669911","NG","NGA","NIGERIA" -"1317669912","1317669919","GH","GHA","GHANA" -"1317669920","1317669959","NG","NGA","NIGERIA" -"1317669960","1317669983","GB","GBR","UNITED KINGDOM" -"1317669984","1317669991","LR","LBR","LIBERIA" -"1317669992","1317670015","NG","NGA","NIGERIA" -"1317670016","1317670031","GB","GBR","UNITED KINGDOM" -"1317670032","1317670103","NG","NGA","NIGERIA" -"1317670104","1317670111","GB","GBR","UNITED KINGDOM" -"1317670112","1317670143","NG","NGA","NIGERIA" -"1317670144","1317670175","SL","SLE","SIERRA LEONE" -"1317670176","1317670215","GB","GBR","UNITED KINGDOM" -"1317670216","1317670223","NG","NGA","NIGERIA" -"1317670224","1317670231","AO","AGO","ANGOLA" -"1317670232","1317670239","GB","GBR","UNITED KINGDOM" -"1317670240","1317670247","NG","NGA","NIGERIA" -"1317670248","1317670255","GB","GBR","UNITED KINGDOM" -"1317670256","1317670263","NG","NGA","NIGERIA" -"1317670264","1317670271","GB","GBR","UNITED KINGDOM" -"1317670272","1317670399","SD","SDN","SUDAN" -"1317670400","1317670415","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"1317670416","1317670447","NG","NGA","NIGERIA" -"1317670448","1317670455","IQ","IRQ","IRAQ" -"1317670456","1317670471","NG","NGA","NIGERIA" -"1317670472","1317670479","CO","COL","COLOMBIA" -"1317670480","1317670495","GB","GBR","UNITED KINGDOM" -"1317670496","1317670503","NG","NGA","NIGERIA" -"1317670504","1317670511","GB","GBR","UNITED KINGDOM" -"1317670512","1317670519","CI","CIV","COTE D'IVOIRE" -"1317670520","1317670543","NG","NGA","NIGERIA" -"1317670544","1317670551","IQ","IRQ","IRAQ" -"1317670552","1317670567","NG","NGA","NIGERIA" -"1317670568","1317670575","GB","GBR","UNITED KINGDOM" -"1317670576","1317670583","NG","NGA","NIGERIA" -"1317670584","1317670599","GH","GHA","GHANA" -"1317670600","1317670607","AO","AGO","ANGOLA" -"1317670608","1317670639","NG","NGA","NIGERIA" -"1317670640","1317670647","GB","GBR","UNITED KINGDOM" -"1317670648","1317670655","NG","NGA","NIGERIA" -"1317670656","1317670663","AO","AGO","ANGOLA" -"1317670664","1317670671","GB","GBR","UNITED KINGDOM" -"1317670672","1317670679","CM","CMR","CAMEROON" -"1317670680","1317670703","NG","NGA","NIGERIA" -"1317670704","1317670711","GB","GBR","UNITED KINGDOM" -"1317670712","1317670719","GH","GHA","GHANA" -"1317670720","1317670727","GB","GBR","UNITED KINGDOM" -"1317670728","1317670735","GH","GHA","GHANA" -"1317670736","1317670743","AO","AGO","ANGOLA" -"1317670744","1317670751","NG","NGA","NIGERIA" -"1317670752","1317670759","GB","GBR","UNITED KINGDOM" -"1317670760","1317670767","NG","NGA","NIGERIA" -"1317670768","1317670775","GH","GHA","GHANA" -"1317670776","1317670783","GB","GBR","UNITED KINGDOM" -"1317670784","1317670791","GH","GHA","GHANA" -"1317670792","1317670807","NG","NGA","NIGERIA" -"1317670808","1317670815","AO","AGO","ANGOLA" -"1317670816","1317670823","NG","NGA","NIGERIA" -"1317670824","1317670831","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"1317670832","1317670839","NG","NGA","NIGERIA" -"1317670840","1317670847","GB","GBR","UNITED KINGDOM" -"1317670848","1317670855","NG","NGA","NIGERIA" -"1317670856","1317670863","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"1317670864","1317670871","GB","GBR","UNITED KINGDOM" -"1317670872","1317670887","NG","NGA","NIGERIA" -"1317670888","1317670895","AO","AGO","ANGOLA" -"1317670896","1317670896","GB","GBR","UNITED KINGDOM" -"1317670897","1317670911","NG","NGA","NIGERIA" -"1317670912","1317671167","GB","GBR","UNITED KINGDOM" -"1317671168","1317671175","AO","AGO","ANGOLA" -"1317671176","1317671191","NG","NGA","NIGERIA" -"1317671192","1317671199","GB","GBR","UNITED KINGDOM" -"1317671200","1317671207","CI","CIV","COTE D'IVOIRE" -"1317671208","1317671231","GB","GBR","UNITED KINGDOM" -"1317671232","1317671239","NG","NGA","NIGERIA" -"1317671240","1317671247","CI","CIV","COTE D'IVOIRE" -"1317671248","1317671255","NG","NGA","NIGERIA" -"1317671256","1317671263","CI","CIV","COTE D'IVOIRE" -"1317671264","1317671271","NG","NGA","NIGERIA" -"1317671272","1317671279","GB","GBR","UNITED KINGDOM" -"1317671280","1317671335","NG","NGA","NIGERIA" -"1317671336","1317671343","BW","BWA","BOTSWANA" -"1317671344","1317671351","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"1317671352","1317671359","GB","GBR","UNITED KINGDOM" -"1317671360","1317671367","NG","NGA","NIGERIA" -"1317671368","1317671375","GB","GBR","UNITED KINGDOM" -"1317671376","1317671383","NG","NGA","NIGERIA" -"1317671384","1317671391","CI","CIV","COTE D'IVOIRE" -"1317671392","1317671399","NG","NGA","NIGERIA" -"1317671400","1317671407","IQ","IRQ","IRAQ" -"1317671408","1317671423","NG","NGA","NIGERIA" -"1317671424","1317671439","GB","GBR","UNITED KINGDOM" -"1317671440","1317671487","NG","NGA","NIGERIA" -"1317671488","1317671511","AO","AGO","ANGOLA" -"1317671512","1317671519","GB","GBR","UNITED KINGDOM" -"1317671520","1317671527","AO","AGO","ANGOLA" -"1317671528","1317671543","NG","NGA","NIGERIA" -"1317671544","1317671551","GH","GHA","GHANA" -"1317671552","1317671567","NG","NGA","NIGERIA" -"1317671568","1317671583","GB","GBR","UNITED KINGDOM" -"1317671584","1317671591","NG","NGA","NIGERIA" -"1317671592","1317671599","GB","GBR","UNITED KINGDOM" -"1317671600","1317671607","NG","NGA","NIGERIA" -"1317671608","1317671615","GH","GHA","GHANA" -"1317671616","1317671647","GB","GBR","UNITED KINGDOM" -"1317671648","1317671679","NG","NGA","NIGERIA" -"1317671680","1317671687","LR","LBR","LIBERIA" -"1317671688","1317671703","GB","GBR","UNITED KINGDOM" -"1317671704","1317671727","NG","NGA","NIGERIA" -"1317671728","1317671735","GB","GBR","UNITED KINGDOM" -"1317671736","1317671743","NG","NGA","NIGERIA" -"1317671744","1317671759","GB","GBR","UNITED KINGDOM" -"1317671760","1317671767","IQ","IRQ","IRAQ" -"1317671768","1317671775","GB","GBR","UNITED KINGDOM" -"1317671776","1317671807","NG","NGA","NIGERIA" -"1317671808","1317671823","CI","CIV","COTE D'IVOIRE" -"1317671824","1317671831","NG","NGA","NIGERIA" -"1317671832","1317671839","GH","GHA","GHANA" -"1317671840","1317671847","AO","AGO","ANGOLA" -"1317671848","1317671895","NG","NGA","NIGERIA" -"1317671896","1317671903","CM","CMR","CAMEROON" -"1317671904","1317671911","NG","NGA","NIGERIA" -"1317671912","1317671919","AO","AGO","ANGOLA" -"1317671920","1317671927","NG","NGA","NIGERIA" -"1317671928","1317671935","GB","GBR","UNITED KINGDOM" -"1317671936","1317672447","GA","GAB","GABON" -"1317672448","1317672455","NG","NGA","NIGERIA" -"1317672456","1317672463","GB","GBR","UNITED KINGDOM" -"1317672464","1317672471","NG","NGA","NIGERIA" -"1317672472","1317672479","GB","GBR","UNITED KINGDOM" -"1317672480","1317672487","ZM","ZMB","ZAMBIA" -"1317672488","1317672511","NG","NGA","NIGERIA" -"1317672512","1317672519","GB","GBR","UNITED KINGDOM" -"1317672520","1317672527","NG","NGA","NIGERIA" -"1317672528","1317672543","GB","GBR","UNITED KINGDOM" -"1317672544","1317672551","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"1317672552","1317672583","GB","GBR","UNITED KINGDOM" -"1317672584","1317672591","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"1317672592","1317672599","NG","NGA","NIGERIA" -"1317672600","1317672607","GB","GBR","UNITED KINGDOM" -"1317672608","1317672615","CM","CMR","CAMEROON" -"1317672616","1317672631","NG","NGA","NIGERIA" -"1317672632","1317672639","GB","GBR","UNITED KINGDOM" -"1317672640","1317672655","NG","NGA","NIGERIA" -"1317672656","1317672663","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"1317672664","1317672695","NG","NGA","NIGERIA" -"1317672696","1317672703","GB","GBR","UNITED KINGDOM" -"1317672704","1317672711","NG","NGA","NIGERIA" -"1317672712","1317672719","GB","GBR","UNITED KINGDOM" -"1317672720","1317672727","LR","LBR","LIBERIA" -"1317672728","1317672735","NG","NGA","NIGERIA" -"1317672736","1317672743","LR","LBR","LIBERIA" -"1317672744","1317672759","GB","GBR","UNITED KINGDOM" -"1317672760","1317672767","NG","NGA","NIGERIA" -"1317672768","1317672775","GB","GBR","UNITED KINGDOM" -"1317672776","1317672783","NG","NGA","NIGERIA" -"1317672784","1317672791","AO","AGO","ANGOLA" -"1317672792","1317672815","GB","GBR","UNITED KINGDOM" -"1317672816","1317672823","BW","BWA","BOTSWANA" -"1317672824","1317672831","NG","NGA","NIGERIA" -"1317672832","1317672839","GB","GBR","UNITED KINGDOM" -"1317672840","1317672895","NG","NGA","NIGERIA" -"1317672896","1317672903","GB","GBR","UNITED KINGDOM" -"1317672904","1317672919","CI","CIV","COTE D'IVOIRE" -"1317672920","1317672927","GH","GHA","GHANA" -"1317672928","1317672951","NG","NGA","NIGERIA" -"1317672952","1317672959","AO","AGO","ANGOLA" -"1317672960","1317673239","NG","NGA","NIGERIA" -"1317673240","1317673255","GB","GBR","UNITED KINGDOM" -"1317673256","1317673287","NG","NGA","NIGERIA" -"1317673288","1317673295","LR","LBR","LIBERIA" -"1317673296","1317673303","NG","NGA","NIGERIA" -"1317673304","1317673311","GB","GBR","UNITED KINGDOM" -"1317673312","1317673319","NG","NGA","NIGERIA" -"1317673320","1317673327","LR","LBR","LIBERIA" -"1317673328","1317673335","NG","NGA","NIGERIA" -"1317673336","1317673343","GH","GHA","GHANA" -"1317673344","1317673351","GB","GBR","UNITED KINGDOM" -"1317673352","1317673375","NG","NGA","NIGERIA" -"1317673376","1317673383","AO","AGO","ANGOLA" -"1317673384","1317673415","NG","NGA","NIGERIA" -"1317673416","1317673423","GB","GBR","UNITED KINGDOM" -"1317673424","1317673431","NG","NGA","NIGERIA" -"1317673432","1317673439","AO","AGO","ANGOLA" -"1317673440","1317673447","GB","GBR","UNITED KINGDOM" -"1317673448","1317673463","AO","AGO","ANGOLA" -"1317673464","1317673471","GB","GBR","UNITED KINGDOM" -"1317673472","1317673479","NG","NGA","NIGERIA" -"1317673480","1317673487","GB","GBR","UNITED KINGDOM" -"1317673488","1317673495","HK","HKG","HONG KONG" -"1317673496","1317673527","NG","NGA","NIGERIA" -"1317673528","1317673535","GB","GBR","UNITED KINGDOM" -"1317673536","1317673575","NG","NGA","NIGERIA" -"1317673576","1317673583","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"1317673584","1317673591","GB","GBR","UNITED KINGDOM" -"1317673592","1317673615","NG","NGA","NIGERIA" -"1317673616","1317673623","GB","GBR","UNITED KINGDOM" -"1317673624","1317673631","NG","NGA","NIGERIA" -"1317673632","1317673639","GB","GBR","UNITED KINGDOM" -"1317673640","1317673647","AO","AGO","ANGOLA" -"1317673648","1317673671","NG","NGA","NIGERIA" -"1317673672","1317673679","CM","CMR","CAMEROON" -"1317673680","1317673687","IQ","IRQ","IRAQ" -"1317673688","1317673711","NG","NGA","NIGERIA" -"1317673712","1317673719","CO","COL","COLOMBIA" -"1317673720","1317673727","NG","NGA","NIGERIA" -"1317673728","1317673743","AO","AGO","ANGOLA" -"1317673744","1317673751","IQ","IRQ","IRAQ" -"1317673752","1317673759","GB","GBR","UNITED KINGDOM" -"1317673760","1317673767","NG","NGA","NIGERIA" -"1317673768","1317673775","AO","AGO","ANGOLA" -"1317673776","1317673783","NG","NGA","NIGERIA" -"1317673784","1317673791","AO","AGO","ANGOLA" -"1317673792","1317673799","NG","NGA","NIGERIA" -"1317673800","1317673807","GB","GBR","UNITED KINGDOM" -"1317673808","1317673815","NG","NGA","NIGERIA" -"1317673816","1317673823","LR","LBR","LIBERIA" -"1317673824","1317673831","NG","NGA","NIGERIA" -"1317673832","1317673839","AO","AGO","ANGOLA" -"1317673840","1317673847","NG","NGA","NIGERIA" -"1317673848","1317673855","GB","GBR","UNITED KINGDOM" -"1317673856","1317673871","NG","NGA","NIGERIA" -"1317673872","1317673895","GB","GBR","UNITED KINGDOM" -"1317673896","1317673911","NG","NGA","NIGERIA" -"1317673912","1317673919","AO","AGO","ANGOLA" -"1317673920","1317673927","CI","CIV","COTE D'IVOIRE" -"1317673928","1317673943","NG","NGA","NIGERIA" -"1317673944","1317673951","AO","AGO","ANGOLA" -"1317673952","1317673967","NG","NGA","NIGERIA" -"1317673968","1317673975","GB","GBR","UNITED KINGDOM" -"1317673976","1317674239","NG","NGA","NIGERIA" -"1317674240","1317674247","GB","GBR","UNITED KINGDOM" -"1317674248","1317674255","NG","NGA","NIGERIA" -"1317674256","1317674263","CM","CMR","CAMEROON" -"1317674264","1317674271","AO","AGO","ANGOLA" -"1317674272","1317674279","NG","NGA","NIGERIA" -"1317674280","1317674287","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"1317674288","1317674295","GH","GHA","GHANA" -"1317674296","1317674303","AO","AGO","ANGOLA" -"1317674304","1317674319","NG","NGA","NIGERIA" -"1317674320","1317674351","GB","GBR","UNITED KINGDOM" -"1317674352","1317674359","NG","NGA","NIGERIA" -"1317674360","1317674367","AO","AGO","ANGOLA" -"1317674368","1317674375","NG","NGA","NIGERIA" -"1317674376","1317674383","GB","GBR","UNITED KINGDOM" -"1317674384","1317674399","NG","NGA","NIGERIA" -"1317674400","1317674407","GB","GBR","UNITED KINGDOM" -"1317674408","1317674415","NG","NGA","NIGERIA" -"1317674416","1317674423","AO","AGO","ANGOLA" -"1317674424","1317674431","NG","NGA","NIGERIA" -"1317674432","1317674440","AO","AGO","ANGOLA" -"1317674441","1317674447","GB","GBR","UNITED KINGDOM" -"1317674448","1317674455","AO","AGO","ANGOLA" -"1317674456","1317674471","NG","NGA","NIGERIA" -"1317674472","1317674479","GB","GBR","UNITED KINGDOM" -"1317674480","1317674487","AO","AGO","ANGOLA" -"1317674488","1317674495","NG","NGA","NIGERIA" -"1317674496","1317674503","GB","GBR","UNITED KINGDOM" -"1317674504","1317674511","AO","AGO","ANGOLA" -"1317674512","1317674519","NG","NGA","NIGERIA" -"1317674520","1317674527","GB","GBR","UNITED KINGDOM" -"1317674528","1317674535","NG","NGA","NIGERIA" -"1317674536","1317674543","IQ","IRQ","IRAQ" -"1317674544","1317674599","NG","NGA","NIGERIA" -"1317674600","1317674607","GB","GBR","UNITED KINGDOM" -"1317674608","1317674615","NG","NGA","NIGERIA" -"1317674616","1317674623","IQ","IRQ","IRAQ" -"1317674624","1317674631","NG","NGA","NIGERIA" -"1317674632","1317674639","GB","GBR","UNITED KINGDOM" -"1317674640","1317674647","NG","NGA","NIGERIA" -"1317674648","1317674655","GB","GBR","UNITED KINGDOM" -"1317674656","1317674671","NG","NGA","NIGERIA" -"1317674672","1317674679","GB","GBR","UNITED KINGDOM" -"1317674680","1317674687","AO","AGO","ANGOLA" -"1317674688","1317674735","NG","NGA","NIGERIA" -"1317674736","1317674743","AO","AGO","ANGOLA" -"1317674744","1317674751","IQ","IRQ","IRAQ" -"1317674752","1317674791","NG","NGA","NIGERIA" -"1317674792","1317674799","GB","GBR","UNITED KINGDOM" -"1317674800","1317674807","NG","NGA","NIGERIA" -"1317674808","1317674823","GB","GBR","UNITED KINGDOM" -"1317674824","1317674871","NG","NGA","NIGERIA" -"1317674872","1317674879","GB","GBR","UNITED KINGDOM" -"1317674880","1317674887","NG","NGA","NIGERIA" -"1317674888","1317674911","AO","AGO","ANGOLA" -"1317674912","1317674927","NG","NGA","NIGERIA" -"1317674928","1317674935","AO","AGO","ANGOLA" -"1317674936","1317674943","NG","NGA","NIGERIA" -"1317674944","1317674951","GA","GAB","GABON" -"1317674952","1317674959","NG","NGA","NIGERIA" -"1317674960","1317674967","GH","GHA","GHANA" -"1317674968","1317674975","NG","NGA","NIGERIA" -"1317674976","1317674991","GB","GBR","UNITED KINGDOM" -"1317674992","1317675007","NG","NGA","NIGERIA" -"1317675008","1317675023","GB","GBR","UNITED KINGDOM" -"1317675024","1317675047","NG","NGA","NIGERIA" -"1317675048","1317675055","GB","GBR","UNITED KINGDOM" -"1317675056","1317675063","NG","NGA","NIGERIA" -"1317675064","1317675071","AO","AGO","ANGOLA" -"1317675072","1317675095","NG","NGA","NIGERIA" -"1317675096","1317675111","GB","GBR","UNITED KINGDOM" -"1317675112","1317675127","NG","NGA","NIGERIA" -"1317675128","1317675135","HK","HKG","HONG KONG" -"1317675136","1317675143","NG","NGA","NIGERIA" -"1317675144","1317675159","GB","GBR","UNITED KINGDOM" -"1317675160","1317675167","AO","AGO","ANGOLA" -"1317675168","1317675175","NG","NGA","NIGERIA" -"1317675176","1317675183","GB","GBR","UNITED KINGDOM" -"1317675184","1317675199","CM","CMR","CAMEROON" -"1317675200","1317675231","NG","NGA","NIGERIA" -"1317675232","1317675239","LR","LBR","LIBERIA" -"1317675240","1317675255","AO","AGO","ANGOLA" -"1317675256","1317675263","GB","GBR","UNITED KINGDOM" -"1317675264","1317675279","NG","NGA","NIGERIA" -"1317675280","1317675287","CM","CMR","CAMEROON" -"1317675288","1317675319","NG","NGA","NIGERIA" -"1317675320","1317675343","CM","CMR","CAMEROON" -"1317675344","1317675351","AO","AGO","ANGOLA" -"1317675352","1317675359","IQ","IRQ","IRAQ" -"1317675360","1317675375","NG","NGA","NIGERIA" -"1317675376","1317675383","CM","CMR","CAMEROON" -"1317675384","1317675391","NG","NGA","NIGERIA" -"1317675392","1317675407","GB","GBR","UNITED KINGDOM" -"1317675408","1317675415","NG","NGA","NIGERIA" -"1317675416","1317675423","GB","GBR","UNITED KINGDOM" -"1317675424","1317675439","NG","NGA","NIGERIA" -"1317675440","1317675447","GB","GBR","UNITED KINGDOM" -"1317675448","1317675455","NG","NGA","NIGERIA" -"1317675456","1317675463","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"1317675464","1317675471","CI","CIV","COTE D'IVOIRE" -"1317675472","1317675479","GB","GBR","UNITED KINGDOM" -"1317675480","1317675511","NG","NGA","NIGERIA" -"1317675512","1317675519","GB","GBR","UNITED KINGDOM" -"1317675520","1317675527","NG","NGA","NIGERIA" -"1317675528","1317675535","AO","AGO","ANGOLA" -"1317675536","1317675543","NG","NGA","NIGERIA" -"1317675544","1317675551","IQ","IRQ","IRAQ" -"1317675552","1317675559","NG","NGA","NIGERIA" -"1317675560","1317675567","NA","NAM","NAMIBIA" -"1317675568","1317675575","AO","AGO","ANGOLA" -"1317675576","1317675583","GB","GBR","UNITED KINGDOM" -"1317675584","1317675591","LR","LBR","LIBERIA" -"1317675592","1317675607","NG","NGA","NIGERIA" -"1317675608","1317675615","GB","GBR","UNITED KINGDOM" -"1317675616","1317675639","NG","NGA","NIGERIA" -"1317675640","1317675647","FR","FRA","FRANCE" -"1317675648","1317675655","LR","LBR","LIBERIA" -"1317675656","1317675663","NG","NGA","NIGERIA" -"1317675664","1317675671","GB","GBR","UNITED KINGDOM" -"1317675672","1317675687","NG","NGA","NIGERIA" -"1317675688","1317675695","CM","CMR","CAMEROON" -"1317675696","1317675703","NG","NGA","NIGERIA" -"1317675704","1317675711","GB","GBR","UNITED KINGDOM" -"1317675712","1317675719","CM","CMR","CAMEROON" -"1317675720","1317675735","NG","NGA","NIGERIA" -"1317675736","1317675743","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"1317675744","1317675751","GH","GHA","GHANA" -"1317675752","1317675759","NG","NGA","NIGERIA" -"1317675760","1317675775","GH","GHA","GHANA" -"1317675776","1317675783","NG","NGA","NIGERIA" -"1317675784","1317675815","GB","GBR","UNITED KINGDOM" -"1317675816","1317675831","NG","NGA","NIGERIA" -"1317675832","1317675855","GB","GBR","UNITED KINGDOM" -"1317675856","1317675863","CM","CMR","CAMEROON" -"1317675864","1317675903","GB","GBR","UNITED KINGDOM" -"1317675904","1317675911","GN","GIN","GUINEA" -"1317675912","1317675935","GB","GBR","UNITED KINGDOM" -"1317675936","1317675943","NG","NGA","NIGERIA" -"1317675944","1317676287","GB","GBR","UNITED KINGDOM" -"1317676288","1317676543","LR","LBR","LIBERIA" -"1317676544","1317676807","GB","GBR","UNITED KINGDOM" -"1317676808","1317676815","NG","NGA","NIGERIA" -"1317676816","1317676823","GB","GBR","UNITED KINGDOM" -"1317676824","1317676831","NG","NGA","NIGERIA" -"1317676832","1317676847","GB","GBR","UNITED KINGDOM" -"1317676848","1317676855","NG","NGA","NIGERIA" -"1317676856","1317676895","GB","GBR","UNITED KINGDOM" -"1317676896","1317676935","NG","NGA","NIGERIA" -"1317676936","1317676999","GB","GBR","UNITED KINGDOM" -"1317677000","1317677007","IQ","IRQ","IRAQ" -"1317677008","1317683199","GB","GBR","UNITED KINGDOM" -"1317683200","1317683839","DE","DEU","GERMANY" -"1317683840","1317683855","CH","CHE","SWITZERLAND" -"1317683856","1317683859","US","USA","UNITED STATES" -"1317683860","1317683863","DE","DEU","GERMANY" -"1317683864","1317683871","FR","FRA","FRANCE" -"1317683872","1317686271","DE","DEU","GERMANY" -"1317686272","1317686287","NL","NLD","NETHERLANDS" -"1317686288","1317686303","DE","DEU","GERMANY" -"1317686304","1317686319","NL","NLD","NETHERLANDS" -"1317686320","1317695743","DE","DEU","GERMANY" -"1317695744","1317695999","CH","CHE","SWITZERLAND" -"1317696000","1317699583","DE","DEU","GERMANY" -"1317699584","1317715967","RU","RUS","RUSSIAN FEDERATION" -"1317715968","1317732351","SA","SAU","SAUDI ARABIA" -"1317732352","1317748735","HU","HUN","HUNGARY" -"1317748736","1317765119","RU","RUS","RUSSIAN FEDERATION" -"1317765120","1317781503","GE","GEO","GEORGIA" -"1317781504","1317814271","RU","RUS","RUSSIAN FEDERATION" -"1317814272","1317830655","DE","DEU","GERMANY" -"1317830656","1317832191","NL","NLD","NETHERLANDS" -"1317832192","1317832447","GB","GBR","UNITED KINGDOM" -"1317832448","1317832511","CY","CYP","CYPRUS" -"1317832512","1317832959","NL","NLD","NETHERLANDS" -"1317832960","1317833215","IT","ITA","ITALY" -"1317833216","1317835615","NL","NLD","NETHERLANDS" -"1317835616","1317835647","RU","RUS","RUSSIAN FEDERATION" -"1317835648","1317836863","NL","NLD","NETHERLANDS" -"1317836864","1317836927","CY","CYP","CYPRUS" -"1317836928","1317841407","NL","NLD","NETHERLANDS" -"1317841408","1317841439","SC","SYC","SEYCHELLES" -"1317841440","1317841727","NL","NLD","NETHERLANDS" -"1317841728","1317841855","CY","CYP","CYPRUS" -"1317841856","1317847039","NL","NLD","NETHERLANDS" -"1317847040","1317863423","RU","RUS","RUSSIAN FEDERATION" -"1317863424","1317879807","GB","GBR","UNITED KINGDOM" -"1317879808","1317896191","SK","SVK","SLOVAKIA" -"1317896192","1317912575","LU","LUX","LUXEMBOURG" -"1317912576","1317920767","GB","GBR","UNITED KINGDOM" -"1317920768","1317928959","ES","ESP","SPAIN" -"1317928960","1317945343","BG","BGR","BULGARIA" -"1317945344","1317965047","AT","AUT","AUSTRIA" -"1317965048","1317965055","DE","DEU","GERMANY" -"1317965056","1317978111","AT","AUT","AUSTRIA" -"1317978112","1317994495","RU","RUS","RUSSIAN FEDERATION" -"1317994496","1318000383","DE","DEU","GERMANY" -"1318000384","1318000447","NL","NLD","NETHERLANDS" -"1318000448","1318002175","DE","DEU","GERMANY" -"1318002176","1318002431","NL","NLD","NETHERLANDS" -"1318002432","1318005631","DE","DEU","GERMANY" -"1318005632","1318005759","NL","NLD","NETHERLANDS" -"1318005760","1318006271","DE","DEU","GERMANY" -"1318006272","1318006783","NL","NLD","NETHERLANDS" -"1318006784","1318010879","DE","DEU","GERMANY" -"1318010880","1318027263","DK","DNK","DENMARK" -"1318027264","1318043647","IE","IRL","IRELAND" -"1318043648","1318584319","GB","GBR","UNITED KINGDOM" -"1318584320","1318592511","PL","POL","POLAND" -"1318592512","1318599935","NL","NLD","NETHERLANDS" -"1318599936","1318600191","DE","DEU","GERMANY" -"1318600192","1318600703","NL","NLD","NETHERLANDS" -"1318600704","1318608895","AT","AUT","AUSTRIA" -"1318608896","1318617087","IT","ITA","ITALY" -"1318617088","1318625279","FR","FRA","FRANCE" -"1318625280","1318633471","UA","UKR","UKRAINE" -"1318633472","1318649855","IE","IRL","IRELAND" -"1318649856","1318658047","RU","RUS","RUSSIAN FEDERATION" -"1318658048","1318666239","SI","SVN","SLOVENIA" -"1318666240","1318674431","DE","DEU","GERMANY" -"1318674432","1318682623","HU","HUN","HUNGARY" -"1318682624","1318690815","RU","RUS","RUSSIAN FEDERATION" -"1318690816","1318699007","DK","DNK","DENMARK" -"1318699008","1318702303","IE","IRL","IRELAND" -"1318702304","1318702335","US","USA","UNITED STATES" -"1318702336","1318707199","IE","IRL","IRELAND" -"1318707200","1318708511","FR","FRA","FRANCE" -"1318708512","1318708527","SE","SWE","SWEDEN" -"1318708528","1318708535","FR","FRA","FRANCE" -"1318708536","1318708991","SE","SWE","SWEDEN" -"1318708992","1318711495","FR","FRA","FRANCE" -"1318711496","1318711503","SE","SWE","SWEDEN" -"1318711504","1318711511","FR","FRA","FRANCE" -"1318711512","1318711519","SE","SWE","SWEDEN" -"1318711520","1318711647","FR","FRA","FRANCE" -"1318711648","1318711663","IT","ITA","ITALY" -"1318711664","1318712271","FR","FRA","FRANCE" -"1318712272","1318712319","SE","SWE","SWEDEN" -"1318712320","1318712831","FR","FRA","FRANCE" -"1318712832","1318713343","SE","SWE","SWEDEN" -"1318713344","1318713855","FR","FRA","FRANCE" -"1318713856","1318714111","CH","CHE","SWITZERLAND" -"1318714112","1318715390","FR","FRA","FRANCE" -"1318715392","1318723583","BG","BGR","BULGARIA" -"1318723584","1318731775","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1318731776","1318739967","PL","POL","POLAND" -"1318739968","1318748159","GB","GBR","UNITED KINGDOM" -"1318748160","1318756351","LV","LVA","LATVIA" -"1318756352","1318764543","UA","UKR","UKRAINE" -"1318764544","1318780927","KW","KWT","KUWAIT" -"1318780928","1318789119","CH","CHE","SWITZERLAND" -"1318789120","1318797311","ME","MNE","MONTENEGRO" -"1318797312","1318805503","SY","SYR","SYRIAN ARAB REPUBLIC" -"1318805504","1318813695","PL","POL","POLAND" -"1318813696","1318821887","FR","FRA","FRANCE" -"1318821888","1318838271","RU","RUS","RUSSIAN FEDERATION" -"1318838272","1318846463","GB","GBR","UNITED KINGDOM" -"1318846464","1318854655","NO","NOR","NORWAY" -"1318854656","1318862847","CZ","CZE","CZECH REPUBLIC" -"1318862848","1318871039","GB","GBR","UNITED KINGDOM" -"1318871040","1318879231","DK","DNK","DENMARK" -"1318879232","1318887423","CZ","CZE","CZECH REPUBLIC" -"1318887424","1318895615","PL","POL","POLAND" -"1318895616","1318899711","SE","SWE","SWEDEN" -"1318899712","1318903807","DK","DNK","DENMARK" -"1318903808","1318911999","RU","RUS","RUSSIAN FEDERATION" -"1318912000","1318920191","MK","MKD","THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA" -"1318920192","1318928383","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1318928384","1318936575","LT","LTU","LITHUANIA" -"1318936576","1318944767","DK","DNK","DENMARK" -"1318944768","1318952959","LV","LVA","LATVIA" -"1318952960","1318956287","CZ","CZE","CZECH REPUBLIC" -"1318956288","1318957055","PL","POL","POLAND" -"1318957056","1318958847","CZ","CZE","CZECH REPUBLIC" -"1318958848","1318961151","PL","POL","POLAND" -"1318961152","1318969343","NL","NLD","NETHERLANDS" -"1318969344","1318977535","RU","RUS","RUSSIAN FEDERATION" -"1318977536","1318985727","LT","LTU","LITHUANIA" -"1318985728","1319001087","GB","GBR","UNITED KINGDOM" -"1319001088","1319002111","US","USA","UNITED STATES" -"1319002112","1319010303","IE","IRL","IRELAND" -"1319010304","1319017215","CY","CYP","CYPRUS" -"1319017216","1319017279","DE","DEU","GERMANY" -"1319017280","1319017295","CY","CYP","CYPRUS" -"1319017296","1319017303","DE","DEU","GERMANY" -"1319017304","1319018495","CY","CYP","CYPRUS" -"1319018496","1319026687","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1319026688","1319034879","RU","RUS","RUSSIAN FEDERATION" -"1319034880","1319035903","NO","NOR","NORWAY" -"1319035904","1319036927","DK","DNK","DENMARK" -"1319036928","1319038975","SE","SWE","SWEDEN" -"1319038976","1319043071","NO","NOR","NORWAY" -"1319043072","1319051263","FR","FRA","FRANCE" -"1319051264","1319059455","UA","UKR","UKRAINE" -"1319059456","1319067647","PL","POL","POLAND" -"1319067648","1319069776","DE","DEU","GERMANY" -"1319069777","1319069823","CN","CHN","CHINA" -"1319069824","1319070217","DE","DEU","GERMANY" -"1319070218","1319070254","CN","CHN","CHINA" -"1319070255","1319070271","GB","GBR","UNITED KINGDOM" -"1319070272","1319070335","PT","PRT","PORTUGAL" -"1319070336","1319070463","RU","RUS","RUSSIAN FEDERATION" -"1319070464","1319070975","DE","DEU","GERMANY" -"1319070976","1319071103","PL","POL","POLAND" -"1319071104","1319071231","RU","RUS","RUSSIAN FEDERATION" -"1319071232","1319071487","PL","POL","POLAND" -"1319071488","1319072767","DE","DEU","GERMANY" -"1319072768","1319073023","IT","ITA","ITALY" -"1319073024","1319073279","TR","TUR","TURKEY" -"1319073280","1319074303","DE","DEU","GERMANY" -"1319074304","1319074559","HK","HKG","HONG KONG" -"1319074560","1319074815","DE","DEU","GERMANY" -"1319074816","1319074943","PL","POL","POLAND" -"1319074944","1319075071","RU","RUS","RUSSIAN FEDERATION" -"1319075072","1319075199","PL","POL","POLAND" -"1319075200","1319075327","RU","RUS","RUSSIAN FEDERATION" -"1319075328","1319075455","DE","DEU","GERMANY" -"1319075456","1319075583","RU","RUS","RUSSIAN FEDERATION" -"1319075584","1319075664","DE","DEU","GERMANY" -"1319075665","1319075711","CN","CHN","CHINA" -"1319075712","1319075839","RU","RUS","RUSSIAN FEDERATION" -"1319075840","1319084031","BG","BGR","BULGARIA" -"1319084032","1319092223","KW","KWT","KUWAIT" -"1319092224","1319100415","IT","ITA","ITALY" -"1319100416","1319108607","RU","RUS","RUSSIAN FEDERATION" -"1319108608","1321205759","TR","TUR","TURKEY" -"1321205760","1325400063","FR","FRA","FRANCE" -"1325400064","1329594367","IT","ITA","ITALY" -"1329594368","1330642943","GB","GBR","UNITED KINGDOM" -"1330642944","1331691519","FR","FRA","FRANCE" -"1331691520","1331757055","PL","POL","POLAND" -"1331757056","1331822591","IE","IRL","IRELAND" -"1331822592","1331824639","IT","ITA","ITALY" -"1331824640","1331826687","RU","RUS","RUSSIAN FEDERATION" -"1331826688","1331828735","FR","FRA","FRANCE" -"1331828736","1331830783","LT","LTU","LITHUANIA" -"1331830784","1331831335","GB","GBR","UNITED KINGDOM" -"1331831336","1331831343","IE","IRL","IRELAND" -"1331831344","1331831351","AE","ARE","UNITED ARAB EMIRATES" -"1331831352","1331832831","GB","GBR","UNITED KINGDOM" -"1331832832","1331834879","IT","ITA","ITALY" -"1331834880","1331836927","BY","BLR","BELARUS" -"1331836928","1331838975","FR","FRA","FRANCE" -"1331838976","1331841023","GR","GRC","GREECE" -"1331841024","1331843071","CZ","CZE","CZECH REPUBLIC" -"1331843072","1331845119","GB","GBR","UNITED KINGDOM" -"1331845120","1331847167","RU","RUS","RUSSIAN FEDERATION" -"1331847168","1331849215","SE","SWE","SWEDEN" -"1331849216","1331851263","RU","RUS","RUSSIAN FEDERATION" -"1331851264","1331853311","AL","ALB","ALBANIA" -"1331853312","1331855359","AE","ARE","UNITED ARAB EMIRATES" -"1331855360","1331857407","TR","TUR","TURKEY" -"1331857408","1331859455","RU","RUS","RUSSIAN FEDERATION" -"1331859456","1331861503","PL","POL","POLAND" -"1331861504","1331863551","CZ","CZE","CZECH REPUBLIC" -"1331863552","1331865599","GB","GBR","UNITED KINGDOM" -"1331865600","1331869695","NL","NLD","NETHERLANDS" -"1331869696","1331871743","SA","SAU","SAUDI ARABIA" -"1331871744","1331873791","DK","DNK","DENMARK" -"1331873792","1331879935","RU","RUS","RUSSIAN FEDERATION" -"1331879936","1331881983","DE","DEU","GERMANY" -"1331881984","1331883007","GB","GBR","UNITED KINGDOM" -"1331883008","1331883263","SE","SWE","SWEDEN" -"1331883264","1331886079","GB","GBR","UNITED KINGDOM" -"1331886080","1331888127","ES","ESP","SPAIN" -"1331888128","1331890175","SE","SWE","SWEDEN" -"1331890176","1331892223","IT","ITA","ITALY" -"1331892224","1331894271","RU","RUS","RUSSIAN FEDERATION" -"1331894272","1331896319","NL","NLD","NETHERLANDS" -"1331896320","1331898367","FR","FRA","FRANCE" -"1331898368","1331900415","GB","GBR","UNITED KINGDOM" -"1331900416","1331902463","RU","RUS","RUSSIAN FEDERATION" -"1331902464","1331904511","MK","MKD","THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA" -"1331904512","1331908607","GB","GBR","UNITED KINGDOM" -"1331908608","1331910655","DE","DEU","GERMANY" -"1331910656","1331912703","BH","BHR","BAHRAIN" -"1331912704","1331914751","DE","DEU","GERMANY" -"1331914752","1331916799","RU","RUS","RUSSIAN FEDERATION" -"1331916800","1331918847","IT","ITA","ITALY" -"1331918848","1331920895","BE","BEL","BELGIUM" -"1331920896","1331922943","NL","NLD","NETHERLANDS" -"1331922944","1331924991","DE","DEU","GERMANY" -"1331924992","1331927039","GB","GBR","UNITED KINGDOM" -"1331927040","1331929087","FI","FIN","FINLAND" -"1331929088","1331931135","FR","FRA","FRANCE" -"1331931136","1331933183","SE","SWE","SWEDEN" -"1331933184","1331935231","TR","TUR","TURKEY" -"1331935232","1331937535","GB","GBR","UNITED KINGDOM" -"1331937536","1331937567","SM","SMR","SAN MARINO" -"1331937568","1331937583","US","USA","UNITED STATES" -"1331937584","1331937599","ZA","ZAF","SOUTH AFRICA" -"1331937600","1331938191","GB","GBR","UNITED KINGDOM" -"1331938192","1331938207","AE","ARE","UNITED ARAB EMIRATES" -"1331938208","1331939327","GB","GBR","UNITED KINGDOM" -"1331939328","1331941375","BE","BEL","BELGIUM" -"1331941376","1331943423","ES","ESP","SPAIN" -"1331943424","1331945471","RU","RUS","RUSSIAN FEDERATION" -"1331945472","1331947519","SE","SWE","SWEDEN" -"1331947520","1331948287","CH","CHE","SWITZERLAND" -"1331948288","1331948543","US","USA","UNITED STATES" -"1331948544","1331948547","NL","NLD","NETHERLANDS" -"1331948548","1331948551","CH","CHE","SWITZERLAND" -"1331948552","1331948559","FR","FRA","FRANCE" -"1331948560","1331948567","GB","GBR","UNITED KINGDOM" -"1331948568","1331948575","DE","DEU","GERMANY" -"1331948576","1331948583","CZ","CZE","CZECH REPUBLIC" -"1331948584","1331948591","CY","CYP","CYPRUS" -"1331948592","1331948607","BG","BGR","BULGARIA" -"1331948608","1331948615","US","USA","UNITED STATES" -"1331948616","1331949567","CH","CHE","SWITZERLAND" -"1331949568","1331951615","RU","RUS","RUSSIAN FEDERATION" -"1331951616","1331953663","GE","GEO","GEORGIA" -"1331953664","1332019199","BG","BGR","BULGARIA" -"1332019200","1332021247","RS","SRB","SERBIA" -"1332021248","1332027135","CS","SCG","SERBIA AND MONTENEGRO" -"1332027136","1332027391","RS","SRB","SERBIA" -"1332027392","1332027903","CS","SCG","SERBIA AND MONTENEGRO" -"1332027904","1332028159","RS","SRB","SERBIA" -"1332028160","1332028671","CS","SCG","SERBIA AND MONTENEGRO" -"1332028672","1332028735","RS","SRB","SERBIA" -"1332028736","1332028895","CS","SCG","SERBIA AND MONTENEGRO" -"1332028896","1332028903","RS","SRB","SERBIA" -"1332028904","1332028923","CS","SCG","SERBIA AND MONTENEGRO" -"1332028924","1332028927","RS","SRB","SERBIA" -"1332028928","1332028951","CS","SCG","SERBIA AND MONTENEGRO" -"1332028952","1332028959","RS","SRB","SERBIA" -"1332028960","1332029015","CS","SCG","SERBIA AND MONTENEGRO" -"1332029016","1332029023","RS","SRB","SERBIA" -"1332029024","1332029039","CS","SCG","SERBIA AND MONTENEGRO" -"1332029040","1332029047","RS","SRB","SERBIA" -"1332029048","1332029051","CS","SCG","SERBIA AND MONTENEGRO" -"1332029052","1332029055","RS","SRB","SERBIA" -"1332029056","1332029183","CS","SCG","SERBIA AND MONTENEGRO" -"1332029184","1332029191","RS","SRB","SERBIA" -"1332029192","1332029263","CS","SCG","SERBIA AND MONTENEGRO" -"1332029264","1332029279","RS","SRB","SERBIA" -"1332029280","1332029295","CS","SCG","SERBIA AND MONTENEGRO" -"1332029296","1332029311","RS","SRB","SERBIA" -"1332029312","1332029319","CS","SCG","SERBIA AND MONTENEGRO" -"1332029320","1332029327","RS","SRB","SERBIA" -"1332029328","1332029503","CS","SCG","SERBIA AND MONTENEGRO" -"1332029504","1332029511","RS","SRB","SERBIA" -"1332029512","1332029535","CS","SCG","SERBIA AND MONTENEGRO" -"1332029536","1332029551","RS","SRB","SERBIA" -"1332029552","1332029591","CS","SCG","SERBIA AND MONTENEGRO" -"1332029592","1332029631","RS","SRB","SERBIA" -"1332029632","1332029663","CS","SCG","SERBIA AND MONTENEGRO" -"1332029664","1332029711","RS","SRB","SERBIA" -"1332029712","1332029719","CS","SCG","SERBIA AND MONTENEGRO" -"1332029720","1332029743","RS","SRB","SERBIA" -"1332029744","1332029751","CS","SCG","SERBIA AND MONTENEGRO" -"1332029752","1332029943","RS","SRB","SERBIA" -"1332029944","1332029951","CS","SCG","SERBIA AND MONTENEGRO" -"1332029952","1332030463","RS","SRB","SERBIA" -"1332030464","1332033535","CS","SCG","SERBIA AND MONTENEGRO" -"1332033536","1332035071","RS","SRB","SERBIA" -"1332035072","1332044287","CS","SCG","SERBIA AND MONTENEGRO" -"1332044288","1332044799","RS","SRB","SERBIA" -"1332044800","1332045823","CS","SCG","SERBIA AND MONTENEGRO" -"1332045824","1332051967","RS","SRB","SERBIA" -"1332051968","1332084735","CS","SCG","SERBIA AND MONTENEGRO" -"1332084736","1332150271","SE","SWE","SWEDEN" -"1332150272","1332215807","GR","GRC","GREECE" -"1332215808","1332346879","RU","RUS","RUSSIAN FEDERATION" -"1332346880","1332412415","AL","ALB","ALBANIA" -"1332412416","1332477951","GR","GRC","GREECE" -"1332477952","1332609023","ES","ESP","SPAIN" -"1332609024","1332613119","PL","POL","POLAND" -"1332613120","1332621311","UA","UKR","UKRAINE" -"1332621312","1332625407","KZ","KAZ","KAZAKHSTAN" -"1332625408","1332629503","UA","UKR","UKRAINE" -"1332629504","1332633599","DE","DEU","GERMANY" -"1332633600","1332637695","UA","UKR","UKRAINE" -"1332637696","1332641791","BG","BGR","BULGARIA" -"1332641792","1332658175","UA","UKR","UKRAINE" -"1332658176","1332662271","PL","POL","POLAND" -"1332662272","1332670463","UA","UKR","UKRAINE" -"1332670464","1332740095","RU","RUS","RUSSIAN FEDERATION" -"1332740096","1333264383","RO","ROM","ROMANIA" -"1333264384","1333297151","RU","RUS","RUSSIAN FEDERATION" -"1333297152","1333317887","HU","HUN","HUNGARY" -"1333317888","1333318143","MK","MKD","THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA" -"1333318144","1333362687","HU","HUN","HUNGARY" -"1333362688","1333395455","GB","GBR","UNITED KINGDOM" -"1333395456","1333428223","HU","HUN","HUNGARY" -"1333428224","1333460991","RU","RUS","RUSSIAN FEDERATION" -"1333460992","1333493759","GB","GBR","UNITED KINGDOM" -"1333493760","1333526527","TR","TUR","TURKEY" -"1333526528","1333542911","BG","BGR","BULGARIA" -"1333542912","1333551103","RO","ROM","ROMANIA" -"1333551104","1333555199","UA","UKR","UKRAINE" -"1333555200","1333559295","RO","ROM","ROMANIA" -"1333559296","1333592063","UA","UKR","UKRAINE" -"1333592064","1333624831","IE","IRL","IRELAND" -"1333624832","1333657599","MK","MKD","THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA" -"1333657600","1333690367","RU","RUS","RUSSIAN FEDERATION" -"1333690368","1333723135","MK","MKD","THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA" -"1333723136","1333755903","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1333755904","1333788671","CZ","CZE","CZECH REPUBLIC" -"1333788672","1334050815","GR","GRC","GREECE" -"1334050816","1334059007","BG","BGR","BULGARIA" -"1334059008","1334067199","FR","FRA","FRANCE" -"1334067200","1334075391","LV","LVA","LATVIA" -"1334075392","1334083583","RU","RUS","RUSSIAN FEDERATION" -"1334083584","1334091775","DE","DEU","GERMANY" -"1334091776","1334099967","LT","LTU","LITHUANIA" -"1334099968","1334108159","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1334108160","1334109807","BE","BEL","BELGIUM" -"1334109808","1334109811","NL","NLD","NETHERLANDS" -"1334109812","1334113527","BE","BEL","BELGIUM" -"1334113528","1334113535","NL","NLD","NETHERLANDS" -"1334113536","1334116351","BE","BEL","BELGIUM" -"1334116352","1334124543","AX","FIN","FINLAND" -"1334124544","1334132735","DE","DEU","GERMANY" -"1334132736","1334165503","RU","RUS","RUSSIAN FEDERATION" -"1334165504","1334173695","PL","POL","POLAND" -"1334173696","1334181887","LT","LTU","LITHUANIA" -"1334181888","1334190079","RU","RUS","RUSSIAN FEDERATION" -"1334190080","1334198271","RO","ROM","ROMANIA" -"1334198272","1334206463","RU","RUS","RUSSIAN FEDERATION" -"1334206464","1334214655","FI","FIN","FINLAND" -"1334214656","1334222847","JO","JOR","JORDAN" -"1334222848","1334231039","BG","BGR","BULGARIA" -"1334231040","1334239231","EE","EST","ESTONIA" -"1334239232","1334247423","IS","ISL","ICELAND" -"1334247424","1334255615","NO","NOR","NORWAY" -"1334255616","1334263807","IT","ITA","ITALY" -"1334263808","1334271999","RU","RUS","RUSSIAN FEDERATION" -"1334272000","1334280191","GB","GBR","UNITED KINGDOM" -"1334280192","1334288383","LV","LVA","LATVIA" -"1334288384","1334296575","PL","POL","POLAND" -"1334296576","1334304767","UA","UKR","UKRAINE" -"1334304768","1334312959","RU","RUS","RUSSIAN FEDERATION" -"1334312960","1334316031","SE","SWE","SWEDEN" -"1334316032","1334316543","NO","NOR","NORWAY" -"1334316544","1334345727","SE","SWE","SWEDEN" -"1334345728","1334378495","RU","RUS","RUSSIAN FEDERATION" -"1334378496","1334411263","IT","ITA","ITALY" -"1334411264","1334444031","RU","RUS","RUSSIAN FEDERATION" -"1334444032","1334478847","SE","SWE","SWEDEN" -"1334478848","1334480895","DK","DNK","DENMARK" -"1334480896","1334484991","SE","SWE","SWEDEN" -"1334484992","1334489087","DK","DNK","DENMARK" -"1334489088","1334501375","SE","SWE","SWEDEN" -"1334501376","1334509567","DK","DNK","DENMARK" -"1334509568","1334542335","PL","POL","POLAND" -"1334542336","1334575103","RU","RUS","RUSSIAN FEDERATION" -"1334575104","1334579199","UA","UKR","UKRAINE" -"1334579200","1334583295","RU","RUS","RUSSIAN FEDERATION" -"1334583296","1334583311","DE","DEU","GERMANY" -"1334583312","1334583319","US","USA","UNITED STATES" -"1334583320","1334583535","DE","DEU","GERMANY" -"1334583536","1334583543","US","USA","UNITED STATES" -"1334583544","1334583807","DE","DEU","GERMANY" -"1334583808","1334584063","CH","CHE","SWITZERLAND" -"1334584064","1334584255","DE","DEU","GERMANY" -"1334584256","1334584287","AT","AUT","AUSTRIA" -"1334584288","1334584351","DE","DEU","GERMANY" -"1334584352","1334584383","LU","LUX","LUXEMBOURG" -"1334584384","1334584903","DE","DEU","GERMANY" -"1334584904","1334584911","AT","AUT","AUSTRIA" -"1334584912","1334584999","DE","DEU","GERMANY" -"1334585000","1334585007","US","USA","UNITED STATES" -"1334585008","1334585055","DE","DEU","GERMANY" -"1334585056","1334585087","US","USA","UNITED STATES" -"1334585088","1334585111","DE","DEU","GERMANY" -"1334585112","1334585119","AT","AUT","AUSTRIA" -"1334585120","1334591487","DE","DEU","GERMANY" -"1334591488","1334595583","RU","RUS","RUSSIAN FEDERATION" -"1334595584","1334596351","IT","ITA","ITALY" -"1334596352","1334596607","GR","GRC","GREECE" -"1334596608","1334597887","IT","ITA","ITALY" -"1334597888","1334598143","GR","GRC","GREECE" -"1334598144","1334598271","SK","SVK","SLOVAKIA" -"1334598272","1334598399","CZ","CZE","CZECH REPUBLIC" -"1334598400","1334598463","GR","GRC","GREECE" -"1334598464","1334598527","IT","ITA","ITALY" -"1334598528","1334598655","GR","GRC","GREECE" -"1334598656","1334599039","IT","ITA","ITALY" -"1334599040","1334599167","FR","FRA","FRANCE" -"1334599168","1334599679","IT","ITA","ITALY" -"1334599680","1334603775","RU","RUS","RUSSIAN FEDERATION" -"1334603776","1334607871","DE","DEU","GERMANY" -"1334607872","1334609994","IE","IRL","IRELAND" -"1334609995","1334609995","GB","GBR","UNITED KINGDOM" -"1334609996","1334610020","IE","IRL","IRELAND" -"1334610021","1334610021","GB","GBR","UNITED KINGDOM" -"1334610022","1334611967","IE","IRL","IRELAND" -"1334611968","1334616063","ME","MNE","MONTENEGRO" -"1334616064","1334620159","MD","MDA","REPUBLIC OF MOLDOVA" -"1334620160","1334624255","DE","DEU","GERMANY" -"1334624256","1334628351","GB","GBR","UNITED KINGDOM" -"1334628352","1334632447","IE","IRL","IRELAND" -"1334632448","1334636543","KZ","KAZ","KAZAKHSTAN" -"1334636544","1334640639","RU","RUS","RUSSIAN FEDERATION" -"1334640640","1334644735","FR","FRA","FRANCE" -"1334644736","1334644991","IQ","IRQ","IRAQ" -"1334644992","1334645247","DE","DEU","GERMANY" -"1334645248","1334648319","IQ","IRQ","IRAQ" -"1334648320","1334648831","DE","DEU","GERMANY" -"1334648832","1334650959","GB","GBR","UNITED KINGDOM" -"1334650960","1334650975","NL","NLD","NETHERLANDS" -"1334650976","1334651391","GB","GBR","UNITED KINGDOM" -"1334651392","1334651647","NL","NLD","NETHERLANDS" -"1334651648","1334651903","FR","FRA","FRANCE" -"1334651904","1334652159","DE","DEU","GERMANY" -"1334652160","1334652543","GB","GBR","UNITED KINGDOM" -"1334652544","1334652559","NL","NLD","NETHERLANDS" -"1334652560","1334652927","GB","GBR","UNITED KINGDOM" -"1334652928","1334661119","RU","RUS","RUSSIAN FEDERATION" -"1334661120","1334665215","CH","CHE","SWITZERLAND" -"1334665216","1334669311","NO","NOR","NORWAY" -"1334669312","1334673407","MK","MKD","THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA" -"1334673408","1334677503","GB","GBR","UNITED KINGDOM" -"1334677504","1334681599","FI","FIN","FINLAND" -"1334681600","1334681855","PL","POL","POLAND" -"1334681856","1334682111","GB","GBR","UNITED KINGDOM" -"1334682112","1334682367","IE","IRL","IRELAND" -"1334682368","1334682623","FR","FRA","FRANCE" -"1334682624","1334682879","NO","NOR","NORWAY" -"1334682880","1334683135","DK","DNK","DENMARK" -"1334683136","1334683391","CZ","CZE","CZECH REPUBLIC" -"1334683392","1334683647","CH","CHE","SWITZERLAND" -"1334683648","1334684159","DE","DEU","GERMANY" -"1334684160","1334684415","SE","SWE","SWEDEN" -"1334684416","1334684671","DE","DEU","GERMANY" -"1334684672","1334684927","FI","FIN","FINLAND" -"1334684928","1334685183","NL","NLD","NETHERLANDS" -"1334685184","1334685695","DE","DEU","GERMANY" -"1334685696","1334689791","IT","ITA","ITALY" -"1334689792","1334693887","FR","FRA","FRANCE" -"1334693888","1334702079","RU","RUS","RUSSIAN FEDERATION" -"1334702080","1334706175","CZ","CZE","CZECH REPUBLIC" -"1334706176","1334710271","BA","BIH","BOSNIA AND HERZEGOVINA" -"1334710272","1334714367","RU","RUS","RUSSIAN FEDERATION" -"1334714368","1334718463","DE","DEU","GERMANY" -"1334718464","1334722559","KZ","KAZ","KAZAKHSTAN" -"1334722560","1334726655","IT","ITA","ITALY" -"1334726656","1334729983","RU","RUS","RUSSIAN FEDERATION" -"1334729984","1334730431","KZ","KAZ","KAZAKHSTAN" -"1334730432","1334730439","RU","RUS","RUSSIAN FEDERATION" -"1334730440","1334730443","KZ","KAZ","KAZAKHSTAN" -"1334730444","1334730447","RU","RUS","RUSSIAN FEDERATION" -"1334730448","1334730463","KZ","KAZ","KAZAKHSTAN" -"1334730464","1334730495","RU","RUS","RUSSIAN FEDERATION" -"1334730496","1334730499","KZ","KAZ","KAZAKHSTAN" -"1334730500","1334730503","RU","RUS","RUSSIAN FEDERATION" -"1334730504","1334730539","KZ","KAZ","KAZAKHSTAN" -"1334730540","1334730543","RU","RUS","RUSSIAN FEDERATION" -"1334730544","1334730591","KZ","KAZ","KAZAKHSTAN" -"1334730592","1334730603","RU","RUS","RUSSIAN FEDERATION" -"1334730604","1334730655","KZ","KAZ","KAZAKHSTAN" -"1334730656","1334730659","RU","RUS","RUSSIAN FEDERATION" -"1334730660","1334730667","KZ","KAZ","KAZAKHSTAN" -"1334730668","1334730687","RU","RUS","RUSSIAN FEDERATION" -"1334730688","1334730699","KZ","KAZ","KAZAKHSTAN" -"1334730700","1334730703","RU","RUS","RUSSIAN FEDERATION" -"1334730704","1334730719","KZ","KAZ","KAZAKHSTAN" -"1334730720","1334730735","RU","RUS","RUSSIAN FEDERATION" -"1334730736","1334730739","KZ","KAZ","KAZAKHSTAN" -"1334730740","1334734847","RU","RUS","RUSSIAN FEDERATION" -"1334734848","1334738943","LT","LTU","LITHUANIA" -"1334738944","1334743039","CH","CHE","SWITZERLAND" -"1334743040","1334747135","UA","UKR","UKRAINE" -"1334747136","1334751231","RU","RUS","RUSSIAN FEDERATION" -"1334751232","1334755327","BH","BHR","BAHRAIN" -"1334755328","1334759423","UA","UKR","UKRAINE" -"1334759424","1334763519","SE","SWE","SWEDEN" -"1334763520","1334767615","DK","DNK","DENMARK" -"1334767616","1334771711","SE","SWE","SWEDEN" -"1334771712","1334779903","RU","RUS","RUSSIAN FEDERATION" -"1334779904","1334783999","UA","UKR","UKRAINE" -"1334784000","1334788095","AT","AUT","AUSTRIA" -"1334788096","1334796287","RU","RUS","RUSSIAN FEDERATION" -"1334796288","1334800383","ME","MNE","MONTENEGRO" -"1334800384","1334804479","IT","ITA","ITALY" -"1334804480","1334808575","FR","FRA","FRANCE" -"1334808576","1334812671","GB","GBR","UNITED KINGDOM" -"1334812672","1334816767","BA","BIH","BOSNIA AND HERZEGOVINA" -"1334816768","1334820863","DE","DEU","GERMANY" -"1334820864","1334824959","IE","IRL","IRELAND" -"1334824960","1334829055","NL","NLD","NETHERLANDS" -"1334829056","1334833151","RU","RUS","RUSSIAN FEDERATION" -"1334833152","1334837247","FR","FRA","FRANCE" -"1334837248","1335885823","ES","ESP","SPAIN" -"1335885824","1336016895","NO","NOR","NORWAY" -"1336016896","1336147967","PL","POL","POLAND" -"1336147968","1336279039","RU","RUS","RUSSIAN FEDERATION" -"1336279040","1336410111","GR","GRC","GREECE" -"1336410112","1336541183","PT","PRT","PORTUGAL" -"1336541184","1336543231","SA","SAU","SAUDI ARABIA" -"1336543232","1336545279","ES","ESP","SPAIN" -"1336545280","1336547327","SE","SWE","SWEDEN" -"1336547328","1336549375","RU","RUS","RUSSIAN FEDERATION" -"1336549376","1336551423","IM","IMN","ISLE OF MAN" -"1336551424","1336553471","GB","GBR","UNITED KINGDOM" -"1336553472","1336555519","SA","SAU","SAUDI ARABIA" -"1336555520","1336557567","BE","BEL","BELGIUM" -"1336557568","1336558591","ES","ESP","SPAIN" -"1336558592","1336559328","US","USA","UNITED STATES" -"1336559329","1336559615","ES","ESP","SPAIN" -"1336559616","1336561663","GB","GBR","UNITED KINGDOM" -"1336561664","1336563711","NO","NOR","NORWAY" -"1336563712","1336567807","NL","NLD","NETHERLANDS" -"1336567808","1336569855","BY","BLR","BELARUS" -"1336571904","1336573951","PL","POL","POLAND" -"1336573952","1336575999","DK","DNK","DENMARK" -"1336576000","1336578047","RU","RUS","RUSSIAN FEDERATION" -"1336578048","1336580095","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1336580096","1336584191","RU","RUS","RUSSIAN FEDERATION" -"1336584192","1336586239","TR","TUR","TURKEY" -"1336586240","1336588287","GB","GBR","UNITED KINGDOM" -"1336588288","1336590335","TJ","TJK","TAJIKISTAN" -"1336590336","1336592383","GB","GBR","UNITED KINGDOM" -"1336592384","1336594431","AM","ARM","ARMENIA" -"1336594432","1336596479","AT","AUT","AUSTRIA" -"1336596480","1336598527","FR","FRA","FRANCE" -"1336598528","1336600575","MD","MDA","REPUBLIC OF MOLDOVA" -"1336600576","1336602623","FR","FRA","FRANCE" -"1336602624","1336604671","IE","IRL","IRELAND" -"1336604672","1336606719","CZ","CZE","CZECH REPUBLIC" -"1336606720","1336608767","PL","POL","POLAND" -"1336608768","1336610815","RU","RUS","RUSSIAN FEDERATION" -"1336610816","1336612863","TR","TUR","TURKEY" -"1336612864","1336614911","ES","ESP","SPAIN" -"1336614912","1336616959","GB","GBR","UNITED KINGDOM" -"1336616960","1336619007","ES","ESP","SPAIN" -"1336619008","1336621055","AL","ALB","ALBANIA" -"1336621056","1336623103","IT","ITA","ITALY" -"1336623104","1336625151","BE","BEL","BELGIUM" -"1336625152","1336625823","IE","IRL","IRELAND" -"1336625824","1336625839","GB","GBR","UNITED KINGDOM" -"1336625840","1336626207","IE","IRL","IRELAND" -"1336626208","1336626239","GB","GBR","UNITED KINGDOM" -"1336626240","1336626303","IE","IRL","IRELAND" -"1336626304","1336626319","GB","GBR","UNITED KINGDOM" -"1336626320","1336626447","IE","IRL","IRELAND" -"1336626448","1336626463","GB","GBR","UNITED KINGDOM" -"1336626464","1336627199","IE","IRL","IRELAND" -"1336627200","1336629247","NO","NOR","NORWAY" -"1336629248","1336631295","DE","DEU","GERMANY" -"1336631296","1336633343","IS","ISL","ICELAND" -"1336633344","1336635391","ES","ESP","SPAIN" -"1336635392","1336637439","RU","RUS","RUSSIAN FEDERATION" -"1336637440","1336639487","UA","UKR","UKRAINE" -"1336639488","1336643583","HU","HUN","HUNGARY" -"1336643584","1336645631","DK","DNK","DENMARK" -"1336645632","1336647679","GB","GBR","UNITED KINGDOM" -"1336647680","1336649727","IT","ITA","ITALY" -"1336649728","1336651775","RU","RUS","RUSSIAN FEDERATION" -"1336651776","1336653823","DE","DEU","GERMANY" -"1336653824","1336655871","CZ","CZE","CZECH REPUBLIC" -"1336655872","1336657919","NL","NLD","NETHERLANDS" -"1336657920","1336659967","DE","DEU","GERMANY" -"1336659968","1336662015","RU","RUS","RUSSIAN FEDERATION" -"1336662016","1336663039","ES","ESP","SPAIN" -"1336663040","1336663071","FR","FRA","FRANCE" -"1336663072","1336664063","ES","ESP","SPAIN" -"1336664064","1336668159","FI","FIN","FINLAND" -"1336668160","1336670207","BH","BHR","BAHRAIN" -"1336670208","1336672255","SE","SWE","SWEDEN" -"1336672256","1336705023","RU","RUS","RUSSIAN FEDERATION" -"1336705024","1336721407","SA","SAU","SAUDI ARABIA" -"1336721408","1336737791","HU","HUN","HUNGARY" -"1336737792","1336754175","PL","POL","POLAND" -"1336754176","1336770559","RU","RUS","RUSSIAN FEDERATION" -"1336770560","1336786943","GB","GBR","UNITED KINGDOM" -"1336786944","1336803327","JO","JOR","JORDAN" -"1336803328","1336811519","UA","UKR","UKRAINE" -"1336811520","1336827903","RU","RUS","RUSSIAN FEDERATION" -"1336827904","1336836095","AT","AUT","AUSTRIA" -"1336836096","1336852479","RU","RUS","RUSSIAN FEDERATION" -"1336852480","1336868863","FR","FRA","FRANCE" -"1336868864","1336885247","RU","RUS","RUSSIAN FEDERATION" -"1336885248","1336901631","RS","SRB","SERBIA" -"1336901632","1336911103","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1336911104","1336911359","SE","SWE","SWEDEN" -"1336911360","1336918015","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1336918016","1336934399","PL","POL","POLAND" -"1336934400","1337458687","IL","ISR","ISRAEL" -"1337458688","1337982975","PL","POL","POLAND" -"1337982976","1342177279","DE","DEU","GERMANY" -"1342177280","1342628031","GB","GBR","UNITED KINGDOM" -"1342628032","1342628095","IE","IRL","IRELAND" -"1342628096","1342628159","GB","GBR","UNITED KINGDOM" -"1342628160","1342628175","IE","IRL","IRELAND" -"1342628176","1342628207","GB","GBR","UNITED KINGDOM" -"1342628208","1342628223","IE","IRL","IRELAND" -"1342628224","1342628319","GB","GBR","UNITED KINGDOM" -"1342628320","1342628335","IE","IRL","IRELAND" -"1342628336","1342628351","GB","GBR","UNITED KINGDOM" -"1342628352","1342628367","IE","IRL","IRELAND" -"1342628368","1342628431","GB","GBR","UNITED KINGDOM" -"1342628432","1342628463","IE","IRL","IRELAND" -"1342628464","1342628663","GB","GBR","UNITED KINGDOM" -"1342628664","1342628671","IE","IRL","IRELAND" -"1342628672","1342701567","GB","GBR","UNITED KINGDOM" -"1342701568","1342981887","FR","FRA","FRANCE" -"1342981888","1342981935","GB","GBR","UNITED KINGDOM" -"1342981936","1342982143","FR","FRA","FRANCE" -"1342982144","1342982399","MG","MDG","MADAGASCAR" -"1342982400","1342988287","FR","FRA","FRANCE" -"1342988288","1342989055","US","USA","UNITED STATES" -"1342989056","1343013119","FR","FRA","FRANCE" -"1343013120","1343013375","US","USA","UNITED STATES" -"1343013376","1343017983","FR","FRA","FRANCE" -"1343017984","1343018367","RE","REU","REUNION" -"1343018368","1343025151","FR","FRA","FRANCE" -"1343025152","1343025663","RE","REU","REUNION" -"1343025664","1343217663","FR","FRA","FRANCE" -"1343217664","1343218687","MU","MUS","MAURITIUS" -"1343218688","1343219711","FR","FRA","FRANCE" -"1343219712","1343219967","KR","KOR","REPUBLIC OF KOREA" -"1343219968","1343220479","FR","FRA","FRANCE" -"1343220480","1343220607","DE","DEU","GERMANY" -"1343220608","1343220735","FR","FRA","FRANCE" -"1343220736","1343220863","GB","GBR","UNITED KINGDOM" -"1343220864","1343221023","FR","FRA","FRANCE" -"1343221024","1343221027","DE","DEU","GERMANY" -"1343221028","1343221503","FR","FRA","FRANCE" -"1343221504","1343221759","GB","GBR","UNITED KINGDOM" -"1343221760","1343221823","LB","LBN","LEBANON" -"1343221824","1343221855","FR","FRA","FRANCE" -"1343221856","1343222271","LB","LBN","LEBANON" -"1343222272","1343222287","CI","CIV","COTE D'IVOIRE" -"1343222288","1343222527","FR","FRA","FRANCE" -"1343222528","1343222575","TD","TCD","CHAD" -"1343222576","1343222783","FR","FRA","FRANCE" -"1343222784","1343222911","TD","TCD","CHAD" -"1343222912","1343223551","FR","FRA","FRANCE" -"1343223552","1343223807","LB","LBN","LEBANON" -"1343223808","1343224063","FR","FRA","FRANCE" -"1343224064","1343224303","US","USA","UNITED STATES" -"1343224304","1343224319","FR","FRA","FRANCE" -"1343224320","1343224535","LB","LBN","LEBANON" -"1343224536","1343224543","FR","FRA","FRANCE" -"1343224544","1343224575","LB","LBN","LEBANON" -"1343224576","1343225855","FR","FRA","FRANCE" -"1343225856","1343750143","IT","ITA","ITALY" -"1343750144","1344798719","ES","ESP","SPAIN" -"1344798720","1345323007","GB","GBR","UNITED KINGDOM" -"1345323008","1345847295","PL","POL","POLAND" -"1345847296","1345978367","NL","NLD","NETHERLANDS" -"1345978368","1346109439","ES","ESP","SPAIN" -"1346109440","1346240511","NL","NLD","NETHERLANDS" -"1346240512","1346371583","DK","DNK","DENMARK" -"1346371584","1346375679","FI","FIN","FINLAND" -"1346375680","1346379775","RU","RUS","RUSSIAN FEDERATION" -"1346379776","1346383871","ES","ESP","SPAIN" -"1346383872","1346387967","GB","GBR","UNITED KINGDOM" -"1346387968","1346392063","HU","HUN","HUNGARY" -"1346392064","1346400255","RU","RUS","RUSSIAN FEDERATION" -"1346400256","1346404351","IT","ITA","ITALY" -"1346404352","1346408447","AT","AUT","AUSTRIA" -"1346408448","1346412543","LU","LUX","LUXEMBOURG" -"1346412544","1346416639","RU","RUS","RUSSIAN FEDERATION" -"1346416640","1346420735","DE","DEU","GERMANY" -"1346420736","1346424831","NO","NOR","NORWAY" -"1346424832","1346428927","JO","JOR","JORDAN" -"1346428928","1346431743","FR","FRA","FRANCE" -"1346431744","1346431999","KZ","KAZ","KAZAKHSTAN" -"1346432000","1346433023","FR","FRA","FRANCE" -"1346433024","1346439167","NL","NLD","NETHERLANDS" -"1346439168","1346440447","ES","ESP","SPAIN" -"1346440448","1346440463","NL","NLD","NETHERLANDS" -"1346440464","1346440479","ES","ESP","SPAIN" -"1346440480","1346441215","NL","NLD","NETHERLANDS" -"1346441216","1346445311","RU","RUS","RUSSIAN FEDERATION" -"1346445312","1346449407","DE","DEU","GERMANY" -"1346449408","1346453503","NO","NOR","NORWAY" -"1346453504","1346461695","BA","BIH","BOSNIA AND HERZEGOVINA" -"1346461696","1346469887","NL","NLD","NETHERLANDS" -"1346469888","1346473983","BE","BEL","BELGIUM" -"1346473984","1346477823","IT","ITA","ITALY" -"1346477824","1346477855","HU","HUN","HUNGARY" -"1346477856","1346478079","IT","ITA","ITALY" -"1346478080","1346482175","BA","BIH","BOSNIA AND HERZEGOVINA" -"1346482176","1346486271","CZ","CZE","CZECH REPUBLIC" -"1346486272","1346490367","SE","SWE","SWEDEN" -"1346490368","1346494463","GB","GBR","UNITED KINGDOM" -"1346494464","1346498559","FR","FRA","FRANCE" -"1346498560","1346502655","GB","GBR","UNITED KINGDOM" -"1346502656","1346510847","DE","DEU","GERMANY" -"1346510848","1346519039","AT","AUT","AUSTRIA" -"1346519040","1346527231","RU","RUS","RUSSIAN FEDERATION" -"1346527232","1346531327","DE","DEU","GERMANY" -"1346531328","1346535423","ES","ESP","SPAIN" -"1346535424","1346537983","BE","BEL","BELGIUM" -"1346537984","1346537988","AT","AUT","AUSTRIA" -"1346537989","1346537991","BE","BEL","BELGIUM" -"1346537992","1346537999","AT","AUT","AUSTRIA" -"1346538000","1346538007","CZ","CZE","CZECH REPUBLIC" -"1346538008","1346538015","BE","BEL","BELGIUM" -"1346538016","1346538031","CH","CHE","SWITZERLAND" -"1346538032","1346538143","BE","BEL","BELGIUM" -"1346538144","1346538175","HR","HRV","CROATIA" -"1346538176","1346539519","BE","BEL","BELGIUM" -"1346539520","1346543615","RU","RUS","RUSSIAN FEDERATION" -"1346543616","1346547711","FI","FIN","FINLAND" -"1346547712","1346551807","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1346551808","1346555903","DE","DEU","GERMANY" -"1346555904","1346559999","IT","ITA","ITALY" -"1346560000","1346563071","LI","LIE","LIECHTENSTEIN" -"1346563072","1346563327","CH","CHE","SWITZERLAND" -"1346563328","1346564095","LI","LIE","LIECHTENSTEIN" -"1346564096","1346568191","EE","EST","ESTONIA" -"1346568192","1346572287","SE","SWE","SWEDEN" -"1346572288","1346576383","DE","DEU","GERMANY" -"1346576384","1346580479","DK","DNK","DENMARK" -"1346580480","1346584575","RU","RUS","RUSSIAN FEDERATION" -"1346584576","1346588159","US","USA","UNITED STATES" -"1346588160","1346588671","KR","KOR","REPUBLIC OF KOREA" -"1346588672","1346589439","US","USA","UNITED STATES" -"1346589440","1346589695","DE","DEU","GERMANY" -"1346589696","1346592767","US","USA","UNITED STATES" -"1346592768","1346596863","ES","ESP","SPAIN" -"1346596864","1346600959","IT","ITA","ITALY" -"1346605056","1346609151","CH","CHE","SWITZERLAND" -"1346609152","1346617343","FR","FRA","FRANCE" -"1346617344","1346620415","SE","SWE","SWEDEN" -"1346620416","1346620927","DK","DNK","DENMARK" -"1346620928","1346621439","SE","SWE","SWEDEN" -"1346621440","1346625535","RU","RUS","RUSSIAN FEDERATION" -"1346625536","1346629631","DE","DEU","GERMANY" -"1346629632","1346637823","RU","RUS","RUSSIAN FEDERATION" -"1346637824","1346650111","GB","GBR","UNITED KINGDOM" -"1346650112","1346654207","RU","RUS","RUSSIAN FEDERATION" -"1346654208","1346658303","GB","GBR","UNITED KINGDOM" -"1346658304","1346666495","SE","SWE","SWEDEN" -"1346666496","1346670591","ES","ESP","SPAIN" -"1346670592","1346674687","IT","ITA","ITALY" -"1346674688","1346678783","DE","DEU","GERMANY" -"1346678784","1346686975","IT","ITA","ITALY" -"1346686976","1346691071","GB","GBR","UNITED KINGDOM" -"1346691072","1346695167","PL","POL","POLAND" -"1346695168","1346699263","RU","RUS","RUSSIAN FEDERATION" -"1346699264","1346700575","GB","GBR","UNITED KINGDOM" -"1346700576","1346700591","VG","VGB","VIRGIN ISLANDS, BRITISH" -"1346700592","1346700608","GB","GBR","UNITED KINGDOM" -"1346700609","1346700623","US","USA","UNITED STATES" -"1346700624","1346700847","GB","GBR","UNITED KINGDOM" -"1346700848","1346700855","US","USA","UNITED STATES" -"1346700856","1346701184","GB","GBR","UNITED KINGDOM" -"1346701185","1346701215","GR","GRC","GREECE" -"1346701216","1346703871","GB","GBR","UNITED KINGDOM" -"1346703872","1346704127","LI","LIE","LIECHTENSTEIN" -"1346704128","1346704479","GB","GBR","UNITED KINGDOM" -"1346704480","1346704511","US","USA","UNITED STATES" -"1346704512","1346704639","GB","GBR","UNITED KINGDOM" -"1346704640","1346704767","LI","LIE","LIECHTENSTEIN" -"1346704768","1346707455","GB","GBR","UNITED KINGDOM" -"1346707456","1346711551","DE","DEU","GERMANY" -"1346711552","1346715647","AZ","AZE","AZERBAIJAN" -"1346715648","1346723839","NL","NLD","NETHERLANDS" -"1346723840","1346732031","DE","DEU","GERMANY" -"1346732032","1346736127","GB","GBR","UNITED KINGDOM" -"1346736128","1346740223","RU","RUS","RUSSIAN FEDERATION" -"1346740224","1346744319","FI","FIN","FINLAND" -"1346744320","1346748415","RU","RUS","RUSSIAN FEDERATION" -"1346748416","1346752511","DE","DEU","GERMANY" -"1346752512","1346756607","FR","FRA","FRANCE" -"1346756608","1346760703","SE","SWE","SWEDEN" -"1346760704","1346764799","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1346764800","1346768895","DK","DNK","DENMARK" -"1346768896","1346772991","LV","LVA","LATVIA" -"1346772992","1346777087","FR","FRA","FRANCE" -"1346777088","1346781183","GB","GBR","UNITED KINGDOM" -"1346781184","1346789375","UA","UKR","UKRAINE" -"1346789376","1346793471","RU","RUS","RUSSIAN FEDERATION" -"1346793472","1346797567","IT","ITA","ITALY" -"1346797568","1346801663","IL","ISR","ISRAEL" -"1346801664","1346805759","SE","SWE","SWEDEN" -"1346805760","1346806079","DE","DEU","GERMANY" -"1346806080","1346806111","GB","GBR","UNITED KINGDOM" -"1346806112","1346806167","DE","DEU","GERMANY" -"1346806168","1346806207","SE","SWE","SWEDEN" -"1346806208","1346818047","DE","DEU","GERMANY" -"1346818048","1346822143","FR","FRA","FRANCE" -"1346822144","1346826239","RU","RUS","RUSSIAN FEDERATION" -"1346826240","1346830335","CS","SCG","SERBIA AND MONTENEGRO" -"1346830336","1346838527","GB","GBR","UNITED KINGDOM" -"1346838528","1346842623","RU","RUS","RUSSIAN FEDERATION" -"1346842624","1346846719","MT","MLT","MALTA" -"1346846720","1346854911","DK","DNK","DENMARK" -"1346854912","1346859007","MT","MLT","MALTA" -"1346859008","1346863103","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1346863104","1346867199","TR","TUR","TURKEY" -"1346867200","1346871295","BA","BIH","BOSNIA AND HERZEGOVINA" -"1346871296","1346879487","RU","RUS","RUSSIAN FEDERATION" -"1346879488","1346883583","FI","FIN","FINLAND" -"1346883584","1346887679","RU","RUS","RUSSIAN FEDERATION" -"1346887680","1346891775","IT","ITA","ITALY" -"1346891776","1346895871","RU","RUS","RUSSIAN FEDERATION" -"1346895872","1346899967","SE","SWE","SWEDEN" -"1346899968","1346904063","RU","RUS","RUSSIAN FEDERATION" -"1346904064","1346908159","PL","POL","POLAND" -"1346908160","1346912255","LI","LIE","LIECHTENSTEIN" -"1346912256","1346920447","BG","BGR","BULGARIA" -"1346924544","1346928639","RU","RUS","RUSSIAN FEDERATION" -"1346928640","1346932735","DE","DEU","GERMANY" -"1346932736","1346936831","DK","DNK","DENMARK" -"1346936832","1346940927","IT","ITA","ITALY" -"1346940928","1346945023","DE","DEU","GERMANY" -"1346945024","1346949119","PL","POL","POLAND" -"1346949120","1346957311","RU","RUS","RUSSIAN FEDERATION" -"1346957312","1346961407","DE","DEU","GERMANY" -"1346961408","1346965503","UA","UKR","UKRAINE" -"1346965504","1346969599","RU","RUS","RUSSIAN FEDERATION" -"1346969600","1346973695","DE","DEU","GERMANY" -"1346973696","1346977791","SE","SWE","SWEDEN" -"1346977792","1346985983","RU","RUS","RUSSIAN FEDERATION" -"1346985984","1346986975","DE","DEU","GERMANY" -"1346986976","1346987007","ES","ESP","SPAIN" -"1346987008","1346991231","DE","DEU","GERMANY" -"1346991232","1346991247","CH","CHE","SWITZERLAND" -"1346991248","1346994175","DE","DEU","GERMANY" -"1346994176","1346998271","NL","NLD","NETHERLANDS" -"1346998272","1347002367","ES","ESP","SPAIN" -"1347002368","1347006463","RU","RUS","RUSSIAN FEDERATION" -"1347006464","1347010559","SE","SWE","SWEDEN" -"1347010560","1347014655","RU","RUS","RUSSIAN FEDERATION" -"1347014656","1347018751","GB","GBR","UNITED KINGDOM" -"1347018752","1347022847","IT","ITA","ITALY" -"1347022848","1347024895","AT","AUT","AUSTRIA" -"1347024896","1347025071","GB","GBR","UNITED KINGDOM" -"1347025072","1347025079","FR","FRA","FRANCE" -"1347025080","1347025103","GB","GBR","UNITED KINGDOM" -"1347025104","1347025111","FR","FRA","FRANCE" -"1347025112","1347025151","GB","GBR","UNITED KINGDOM" -"1347025152","1347025215","US","USA","UNITED STATES" -"1347025216","1347025279","GB","GBR","UNITED KINGDOM" -"1347025280","1347025343","ES","ESP","SPAIN" -"1347025344","1347025407","DE","DEU","GERMANY" -"1347025408","1347026943","AT","AUT","AUSTRIA" -"1347026944","1347035135","GB","GBR","UNITED KINGDOM" -"1347035136","1347039231","CZ","CZE","CZECH REPUBLIC" -"1347039232","1347043327","RO","ROM","ROMANIA" -"1347043328","1347047423","FR","FRA","FRANCE" -"1347047424","1347051519","SA","SAU","SAUDI ARABIA" -"1347051520","1347059711","IL","ISR","ISRAEL" -"1347059712","1347067903","CH","CHE","SWITZERLAND" -"1347067904","1347071743","CS","SCG","SERBIA AND MONTENEGRO" -"1347071744","1347071751","CS","SCG","SERBIA AND MONTENEGRO" -"1347071752","1347071759","CS","SCG","SERBIA AND MONTENEGRO" -"1347071760","1347071767","CS","SCG","SERBIA AND MONTENEGRO" -"1347071768","1347071775","CS","SCG","SERBIA AND MONTENEGRO" -"1347071776","1347071791","CS","SCG","SERBIA AND MONTENEGRO" -"1347071792","1347071999","CS","SCG","SERBIA AND MONTENEGRO" -"1347072000","1347076095","IT","ITA","ITALY" -"1347076096","1347084287","FI","FIN","FINLAND" -"1347084288","1347092479","GB","GBR","UNITED KINGDOM" -"1347092480","1347096575","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1347096576","1347100671","SE","SWE","SWEDEN" -"1347100672","1347108863","AT","AUT","AUSTRIA" -"1347108864","1347112959","GB","GBR","UNITED KINGDOM" -"1347112960","1347117055","RU","RUS","RUSSIAN FEDERATION" -"1347117056","1347121151","FI","FIN","FINLAND" -"1347121152","1347125247","CH","CHE","SWITZERLAND" -"1347125248","1347129343","RU","RUS","RUSSIAN FEDERATION" -"1347129344","1347133439","GB","GBR","UNITED KINGDOM" -"1347141632","1347145727","CH","CHE","SWITZERLAND" -"1347145728","1347146239","GB","GBR","UNITED KINGDOM" -"1347146240","1347146751","FR","FRA","FRANCE" -"1347146752","1347149823","GB","GBR","UNITED KINGDOM" -"1347149824","1347153919","HU","HUN","HUNGARY" -"1347153920","1347158015","AT","AUT","AUSTRIA" -"1347158016","1347162111","CH","CHE","SWITZERLAND" -"1347162112","1347166207","IT","ITA","ITALY" -"1347166208","1347174399","GR","GRC","GREECE" -"1347174400","1347186687","IT","ITA","ITALY" -"1347186688","1347190783","GB","GBR","UNITED KINGDOM" -"1347190784","1347194879","RU","RUS","RUSSIAN FEDERATION" -"1347194880","1347198975","SE","SWE","SWEDEN" -"1347198976","1347203071","QA","QAT","QATAR" -"1347203072","1347207167","RU","RUS","RUSSIAN FEDERATION" -"1347207168","1347210735","GB","GBR","UNITED KINGDOM" -"1347210736","1347210743","IE","IRL","IRELAND" -"1347210744","1347210911","GB","GBR","UNITED KINGDOM" -"1347210912","1347210919","IE","IRL","IRELAND" -"1347210920","1347210927","GB","GBR","UNITED KINGDOM" -"1347210928","1347210935","IE","IRL","IRELAND" -"1347210936","1347211111","GB","GBR","UNITED KINGDOM" -"1347211112","1347211119","IE","IRL","IRELAND" -"1347211120","1347215359","GB","GBR","UNITED KINGDOM" -"1347215360","1347219455","RU","RUS","RUSSIAN FEDERATION" -"1347219456","1347223551","KW","KWT","KUWAIT" -"1347223552","1347223807","EG","EGY","EGYPT" -"1347223808","1347224063","HK","HKG","HONG KONG" -"1347224064","1347224319","US","USA","UNITED STATES" -"1347224320","1347224575","EG","EGY","EGYPT" -"1347224576","1347224831","US","USA","UNITED STATES" -"1347224832","1347225599","EG","EGY","EGYPT" -"1347225600","1347226623","PK","PAK","PAKISTAN" -"1347226624","1347227135","EG","EGY","EGYPT" -"1347227136","1347227391","HK","HKG","HONG KONG" -"1347227392","1347227647","EG","EGY","EGYPT" -"1347227648","1347229311","DE","DEU","GERMANY" -"1347229312","1347229343","AT","AUT","AUSTRIA" -"1347229344","1347231071","DE","DEU","GERMANY" -"1347231072","1347231087","AT","AUT","AUSTRIA" -"1347231088","1347231095","GR","GRC","GREECE" -"1347231096","1347231743","DE","DEU","GERMANY" -"1347231744","1347235839","UA","UKR","UKRAINE" -"1347235840","1347239935","GE","GEO","GEORGIA" -"1347239936","1347244031","DK","DNK","DENMARK" -"1347244032","1347247359","GB","GBR","UNITED KINGDOM" -"1347247360","1347247871","RU","RUS","RUSSIAN FEDERATION" -"1347247872","1347247872","GB","GBR","UNITED KINGDOM" -"1347247873","1347248127","US","USA","UNITED STATES" -"1347248128","1347248863","SE","SWE","SWEDEN" -"1347248864","1347248864","FI","FIN","FINLAND" -"1347248865","1347249343","SE","SWE","SWEDEN" -"1347249344","1347249375","FI","FIN","FINLAND" -"1347249376","1347249631","SE","SWE","SWEDEN" -"1347249632","1347249639","RU","RUS","RUSSIAN FEDERATION" -"1347249640","1347250687","SE","SWE","SWEDEN" -"1347250688","1347250691","NO","NOR","NORWAY" -"1347250692","1347250695","SE","SWE","SWEDEN" -"1347250696","1347250735","NO","NOR","NORWAY" -"1347250736","1347250767","SE","SWE","SWEDEN" -"1347250768","1347250783","FI","FIN","FINLAND" -"1347250784","1347252223","SE","SWE","SWEDEN" -"1347252224","1347255903","HU","HUN","HUNGARY" -"1347255904","1347255919","SC","SYC","SEYCHELLES" -"1347255920","1347256319","HU","HUN","HUNGARY" -"1347256320","1347260415","FO","FRO","FAROE ISLANDS" -"1347260416","1347264511","MK","MKD","THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA" -"1347264512","1347268607","RU","RUS","RUSSIAN FEDERATION" -"1347268608","1347271935","LB","LBN","LEBANON" -"1347271936","1347272447","IQ","IRQ","IRAQ" -"1347272448","1347272703","LB","LBN","LEBANON" -"1347272704","1347276799","MT","MLT","MALTA" -"1347276800","1347278831","DE","DEU","GERMANY" -"1347278832","1347278847","BR","BRA","BRAZIL" -"1347278848","1347280895","DE","DEU","GERMANY" -"1347280896","1347284991","FR","FRA","FRANCE" -"1347284992","1347286271","GB","GBR","UNITED KINGDOM" -"1347286272","1347286335","BN","BRN","BRUNEI DARUSSALAM" -"1347286336","1347286527","GB","GBR","UNITED KINGDOM" -"1347286528","1347286535","BG","BGR","BULGARIA" -"1347286536","1347289087","GB","GBR","UNITED KINGDOM" -"1347289088","1347293183","FR","FRA","FRANCE" -"1347293184","1347293311","SE","SWE","SWEDEN" -"1347293312","1347293319","LR","LBR","LIBERIA" -"1347293320","1347293327","GA","GAB","GABON" -"1347293328","1347293335","NG","NGA","NIGERIA" -"1347293336","1347293339","SE","SWE","SWEDEN" -"1347293340","1347293343","SO","SOM","SOMALIA" -"1347293344","1347293351","SE","SWE","SWEDEN" -"1347293352","1347293391","NG","NGA","NIGERIA" -"1347293392","1347293399","CY","CYP","CYPRUS" -"1347293400","1347293407","IQ","IRQ","IRAQ" -"1347293408","1347293415","NG","NGA","NIGERIA" -"1347293416","1347293423","SE","SWE","SWEDEN" -"1347293424","1347293431","GN","GIN","GUINEA" -"1347293432","1347293439","NG","NGA","NIGERIA" -"1347293440","1347293447","SE","SWE","SWEDEN" -"1347293448","1347293455","GB","GBR","UNITED KINGDOM" -"1347293456","1347293463","NG","NGA","NIGERIA" -"1347293464","1347293471","SE","SWE","SWEDEN" -"1347293472","1347293479","IQ","IRQ","IRAQ" -"1347293480","1347293487","LR","LBR","LIBERIA" -"1347293488","1347293495","TD","TCD","CHAD" -"1347293496","1347293503","GH","GHA","GHANA" -"1347293504","1347293511","US","USA","UNITED STATES" -"1347293512","1347293519","GN","GIN","GUINEA" -"1347293520","1347293527","PS","PSE","PALESTINIAN TERRITORY, OCCUPIED" -"1347293528","1347293535","NG","NGA","NIGERIA" -"1347293536","1347293543","GH","GHA","GHANA" -"1347293544","1347293551","US","USA","UNITED STATES" -"1347293552","1347293559","SE","SWE","SWEDEN" -"1347293560","1347293567","GN","GIN","GUINEA" -"1347293568","1347293575","GH","GHA","GHANA" -"1347293576","1347293583","IQ","IRQ","IRAQ" -"1347293584","1347293591","AF","AFG","AFGHANISTAN" -"1347293592","1347293599","SE","SWE","SWEDEN" -"1347293600","1347293607","NG","NGA","NIGERIA" -"1347293608","1347293615","SE","SWE","SWEDEN" -"1347293616","1347293639","US","USA","UNITED STATES" -"1347293640","1347293647","IQ","IRQ","IRAQ" -"1347293648","1347293655","US","USA","UNITED STATES" -"1347293656","1347293675","GN","GIN","GUINEA" -"1347293676","1347293679","BH","BHR","BAHRAIN" -"1347293680","1347293687","GN","GIN","GUINEA" -"1347293688","1347293723","NG","NGA","NIGERIA" -"1347293724","1347293727","IQ","IRQ","IRAQ" -"1347293728","1347293735","SE","SWE","SWEDEN" -"1347293736","1347293759","GN","GIN","GUINEA" -"1347293760","1347293767","NG","NGA","NIGERIA" -"1347293768","1347293775","CM","CMR","CAMEROON" -"1347293776","1347293799","NG","NGA","NIGERIA" -"1347293800","1347293807","IQ","IRQ","IRAQ" -"1347293808","1347293815","NG","NGA","NIGERIA" -"1347293816","1347293823","SO","SOM","SOMALIA" -"1347293824","1347293831","CM","CMR","CAMEROON" -"1347293832","1347293839","NG","NGA","NIGERIA" -"1347293840","1347293847","CA","CAN","CANADA" -"1347293848","1347293855","BH","BHR","BAHRAIN" -"1347293856","1347293863","GN","GIN","GUINEA" -"1347293864","1347293871","GB","GBR","UNITED KINGDOM" -"1347293872","1347293879","SE","SWE","SWEDEN" -"1347293880","1347293887","NG","NGA","NIGERIA" -"1347293888","1347293903","GQ","GNQ","EQUATORIAL GUINEA" -"1347293904","1347293911","NG","NGA","NIGERIA" -"1347293912","1347293919","GA","GAB","GABON" -"1347293920","1347293927","GB","GBR","UNITED KINGDOM" -"1347293928","1347293935","US","USA","UNITED STATES" -"1347293936","1347293943","NG","NGA","NIGERIA" -"1347293944","1347293951","SE","SWE","SWEDEN" -"1347293952","1347293959","NG","NGA","NIGERIA" -"1347293960","1347293967","GN","GIN","GUINEA" -"1347293968","1347293975","NG","NGA","NIGERIA" -"1347293976","1347293983","GN","GIN","GUINEA" -"1347293984","1347293991","US","USA","UNITED STATES" -"1347293992","1347293999","NG","NGA","NIGERIA" -"1347294000","1347294007","US","USA","UNITED STATES" -"1347294008","1347294015","SE","SWE","SWEDEN" -"1347294016","1347294023","US","USA","UNITED STATES" -"1347294024","1347294039","GN","GIN","GUINEA" -"1347294040","1347294047","GB","GBR","UNITED KINGDOM" -"1347294048","1347294055","TH","THA","THAILAND" -"1347294056","1347294063","NG","NGA","NIGERIA" -"1347294064","1347294071","GH","GHA","GHANA" -"1347294072","1347294079","NG","NGA","NIGERIA" -"1347294080","1347294087","SE","SWE","SWEDEN" -"1347294088","1347294095","US","USA","UNITED STATES" -"1347294096","1347294111","CM","CMR","CAMEROON" -"1347294112","1347294119","GN","GIN","GUINEA" -"1347294120","1347294127","SE","SWE","SWEDEN" -"1347294128","1347294135","NG","NGA","NIGERIA" -"1347294136","1347294143","LR","LBR","LIBERIA" -"1347294144","1347294151","NG","NGA","NIGERIA" -"1347294152","1347294159","GB","GBR","UNITED KINGDOM" -"1347294160","1347294167","CM","CMR","CAMEROON" -"1347294168","1347294175","GB","GBR","UNITED KINGDOM" -"1347294176","1347294183","NG","NGA","NIGERIA" -"1347294184","1347294191","SE","SWE","SWEDEN" -"1347294192","1347294199","GB","GBR","UNITED KINGDOM" -"1347294200","1347294207","NG","NGA","NIGERIA" -"1347294208","1347294215","SE","SWE","SWEDEN" -"1347294216","1347294223","IQ","IRQ","IRAQ" -"1347294224","1347294231","SE","SWE","SWEDEN" -"1347294232","1347294239","US","USA","UNITED STATES" -"1347294240","1347294271","SE","SWE","SWEDEN" -"1347294272","1347294279","BH","BHR","BAHRAIN" -"1347294280","1347294287","BD","BGD","BANGLADESH" -"1347294288","1347294303","UG","UGA","UGANDA" -"1347294304","1347294311","US","USA","UNITED STATES" -"1347294312","1347294319","SE","SWE","SWEDEN" -"1347294320","1347294327","NG","NGA","NIGERIA" -"1347294328","1347294343","SE","SWE","SWEDEN" -"1347294344","1347294351","CM","CMR","CAMEROON" -"1347294352","1347294367","LR","LBR","LIBERIA" -"1347294368","1347294375","NG","NGA","NIGERIA" -"1347294376","1347294383","SE","SWE","SWEDEN" -"1347294384","1347294399","NG","NGA","NIGERIA" -"1347294400","1347294407","SE","SWE","SWEDEN" -"1347294408","1347294415","GN","GIN","GUINEA" -"1347294416","1347294423","SE","SWE","SWEDEN" -"1347294424","1347294431","KW","KWT","KUWAIT" -"1347294432","1347294435","US","USA","UNITED STATES" -"1347294436","1347294439","SE","SWE","SWEDEN" -"1347294440","1347294447","SO","SOM","SOMALIA" -"1347294448","1347294975","US","USA","UNITED STATES" -"1347294976","1347294991","SE","SWE","SWEDEN" -"1347294992","1347295007","NG","NGA","NIGERIA" -"1347295008","1347295039","SE","SWE","SWEDEN" -"1347295040","1347295047","GB","GBR","UNITED KINGDOM" -"1347295048","1347295055","IQ","IRQ","IRAQ" -"1347295056","1347295063","AF","AFG","AFGHANISTAN" -"1347295064","1347295071","SE","SWE","SWEDEN" -"1347295072","1347295079","US","USA","UNITED STATES" -"1347295080","1347295087","NG","NGA","NIGERIA" -"1347295088","1347295095","SE","SWE","SWEDEN" -"1347295096","1347295103","NG","NGA","NIGERIA" -"1347295104","1347295143","SE","SWE","SWEDEN" -"1347295144","1347295151","IQ","IRQ","IRAQ" -"1347295152","1347295159","US","USA","UNITED STATES" -"1347295160","1347295199","SE","SWE","SWEDEN" -"1347295200","1347295215","GB","GBR","UNITED KINGDOM" -"1347295216","1347295223","SE","SWE","SWEDEN" -"1347295224","1347295231","CH","CHE","SWITZERLAND" -"1347295232","1347295743","SE","SWE","SWEDEN" -"1347295744","1347295755","US","USA","UNITED STATES" -"1347295756","1347295759","SE","SWE","SWEDEN" -"1347295760","1347295775","US","USA","UNITED STATES" -"1347295776","1347295783","IQ","IRQ","IRAQ" -"1347295784","1347295999","SE","SWE","SWEDEN" -"1347296000","1347296015","US","USA","UNITED STATES" -"1347296016","1347297279","SE","SWE","SWEDEN" -"1347297280","1347305471","UA","UKR","UKRAINE" -"1347305472","1347309567","AL","ALB","ALBANIA" -"1347309568","1347309839","DE","DEU","GERMANY" -"1347309840","1347309855","CH","CHE","SWITZERLAND" -"1347309856","1347313663","DE","DEU","GERMANY" -"1347313664","1347321855","RU","RUS","RUSSIAN FEDERATION" -"1347321856","1347323775","KW","KWT","KUWAIT" -"1347323776","1347323903","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1347323904","1347325183","KW","KWT","KUWAIT" -"1347325184","1347325439","SA","SAU","SAUDI ARABIA" -"1347325440","1347325951","KW","KWT","KUWAIT" -"1347325952","1347327231","CZ","CZE","CZECH REPUBLIC" -"1347327232","1347327487","SK","SVK","SLOVAKIA" -"1347327488","1347327743","CZ","CZE","CZECH REPUBLIC" -"1347327744","1347327999","SK","SVK","SLOVAKIA" -"1347328000","1347329535","CZ","CZE","CZECH REPUBLIC" -"1347329536","1347329599","SK","SVK","SLOVAKIA" -"1347329600","1347330047","CZ","CZE","CZECH REPUBLIC" -"1347330048","1347338239","DE","DEU","GERMANY" -"1347338240","1347342335","RU","RUS","RUSSIAN FEDERATION" -"1347342336","1347346431","SE","SWE","SWEDEN" -"1347354624","1347358719","PT","PRT","PORTUGAL" -"1347358720","1347362815","CZ","CZE","CZECH REPUBLIC" -"1347362816","1347366911","NL","NLD","NETHERLANDS" -"1347366912","1347371007","IT","ITA","ITALY" -"1347371008","1347375103","RU","RUS","RUSSIAN FEDERATION" -"1347375104","1347379199","GB","GBR","UNITED KINGDOM" -"1347379200","1347383295","NL","NLD","NETHERLANDS" -"1347383296","1347383695","EE","EST","ESTONIA" -"1347383696","1347383699","IL","ISR","ISRAEL" -"1347383700","1347384231","EE","EST","ESTONIA" -"1347384232","1347384235","IL","ISR","ISRAEL" -"1347384236","1347385031","EE","EST","ESTONIA" -"1347385032","1347385035","IL","ISR","ISRAEL" -"1347385036","1347385171","EE","EST","ESTONIA" -"1347385172","1347385175","IL","ISR","ISRAEL" -"1347385176","1347387391","EE","EST","ESTONIA" -"1347387392","1347391487","GB","GBR","UNITED KINGDOM" -"1347391488","1347395583","LB","LBN","LEBANON" -"1347395584","1347399679","SE","SWE","SWEDEN" -"1347399680","1347403775","RU","RUS","RUSSIAN FEDERATION" -"1347403776","1347407871","NL","NLD","NETHERLANDS" -"1347407872","1347411967","GB","GBR","UNITED KINGDOM" -"1347411968","1347416063","DE","DEU","GERMANY" -"1347416064","1347420159","RU","RUS","RUSSIAN FEDERATION" -"1347420160","1347420671","DK","DNK","DENMARK" -"1347420672","1347420679","SE","SWE","SWEDEN" -"1347420680","1347420791","DK","DNK","DENMARK" -"1347420792","1347420799","US","USA","UNITED STATES" -"1347420800","1347420831","DK","DNK","DENMARK" -"1347420832","1347420847","US","USA","UNITED STATES" -"1347420848","1347420991","DK","DNK","DENMARK" -"1347420992","1347421007","CH","CHE","SWITZERLAND" -"1347421008","1347423775","DK","DNK","DENMARK" -"1347423776","1347423807","NO","NOR","NORWAY" -"1347423808","1347424339","DK","DNK","DENMARK" -"1347424340","1347424351","NO","NOR","NORWAY" -"1347424352","1347427135","DK","DNK","DENMARK" -"1347427136","1347427327","NO","NOR","NORWAY" -"1347427328","1347428351","DK","DNK","DENMARK" -"1347428352","1347432447","IT","ITA","ITALY" -"1347432448","1347436543","HR","HRV","CROATIA" -"1347436544","1347440639","SE","SWE","SWEDEN" -"1347440640","1347444735","ES","ESP","SPAIN" -"1347444736","1347452927","RU","RUS","RUSSIAN FEDERATION" -"1347452928","1347461119","BG","BGR","BULGARIA" -"1347461120","1347465215","CS","SCG","SERBIA AND MONTENEGRO" -"1347465216","1347469311","GB","GBR","UNITED KINGDOM" -"1347469312","1347473407","RU","RUS","RUSSIAN FEDERATION" -"1347473408","1347477503","UZ","UZB","UZBEKISTAN" -"1347477504","1347481599","CH","CHE","SWITZERLAND" -"1347481600","1347485695","AT","AUT","AUSTRIA" -"1347485696","1347493887","DE","DEU","GERMANY" -"1347493888","1347502079","LV","LVA","LATVIA" -"1347502080","1347503103","ES","ESP","SPAIN" -"1347503104","1347503359","GB","GBR","UNITED KINGDOM" -"1347503360","1347504383","ES","ESP","SPAIN" -"1347504384","1347504639","GB","GBR","UNITED KINGDOM" -"1347504640","1347504959","ES","ESP","SPAIN" -"1347504960","1347505023","GB","GBR","UNITED KINGDOM" -"1347505024","1347506175","ES","ESP","SPAIN" -"1347506176","1347510271","FR","FRA","FRANCE" -"1347510272","1347518463","ES","ESP","SPAIN" -"1347518464","1347522559","AT","AUT","AUSTRIA" -"1347522560","1347526655","LB","LBN","LEBANON" -"1347526656","1347527967","FI","FIN","FINLAND" -"1347527968","1347527999","SE","SWE","SWEDEN" -"1347528000","1347534847","FI","FIN","FINLAND" -"1347534848","1347538943","DE","DEU","GERMANY" -"1347538944","1347543039","RU","RUS","RUSSIAN FEDERATION" -"1347543040","1347544063","SK","SVK","SLOVAKIA" -"1347544064","1347544319","SL","SLE","SIERRA LEONE" -"1347544320","1347547135","SK","SVK","SLOVAKIA" -"1347547136","1347550303","DE","DEU","GERMANY" -"1347550304","1347550335","AT","AUT","AUSTRIA" -"1347550336","1347551167","DE","DEU","GERMANY" -"1347551168","1347551231","PL","POL","POLAND" -"1347551232","1347555327","IT","ITA","ITALY" -"1347555328","1347559423","PL","POL","POLAND" -"1347559424","1347567615","RU","RUS","RUSSIAN FEDERATION" -"1347567616","1347571711","CH","CHE","SWITZERLAND" -"1347571712","1347575807","RU","RUS","RUSSIAN FEDERATION" -"1347575808","1347579903","DK","DNK","DENMARK" -"1347579904","1347588095","GB","GBR","UNITED KINGDOM" -"1347588096","1347592191","CZ","CZE","CZECH REPUBLIC" -"1347592192","1347600383","RU","RUS","RUSSIAN FEDERATION" -"1347600384","1347604479","IT","ITA","ITALY" -"1347604480","1347608575","DE","DEU","GERMANY" -"1347608576","1347612671","FR","FRA","FRANCE" -"1347612672","1347616767","GB","GBR","UNITED KINGDOM" -"1347616768","1347620863","FI","FIN","FINLAND" -"1347620864","1347624959","LB","LBN","LEBANON" -"1347624960","1347633151","CH","CHE","SWITZERLAND" -"1347633152","1347637247","CZ","CZE","CZECH REPUBLIC" -"1347637248","1347641343","SE","SWE","SWEDEN" -"1347641344","1347646194","DE","DEU","GERMANY" -"1347646195","1347646207","TR","TUR","TURKEY" -"1347646208","1347649535","DE","DEU","GERMANY" -"1347649536","1347653631","GE","GEO","GEORGIA" -"1347653632","1347654615","GB","GBR","UNITED KINGDOM" -"1347654616","1347654623","EG","EGY","EGYPT" -"1347654624","1347655175","GB","GBR","UNITED KINGDOM" -"1347655176","1347655183","EG","EGY","EGYPT" -"1347655184","1347657727","GB","GBR","UNITED KINGDOM" -"1347657728","1347661823","IT","ITA","ITALY" -"1347661824","1347663119","DE","DEU","GERMANY" -"1347663120","1347663127","GB","GBR","UNITED KINGDOM" -"1347663128","1347665919","DE","DEU","GERMANY" -"1347665920","1347670015","RU","RUS","RUSSIAN FEDERATION" -"1347670016","1347674111","SE","SWE","SWEDEN" -"1347674112","1347682303","RU","RUS","RUSSIAN FEDERATION" -"1347682304","1347686399","DE","DEU","GERMANY" -"1347688736","1347688743","BE","BEL","BELGIUM" -"1347688744","1347688751","ET","ETH","ETHIOPIA" -"1347688752","1347688767","SN","SEN","SENEGAL" -"1347688960","1347689343","BE","BEL","BELGIUM" -"1347690496","1347694591","SE","SWE","SWEDEN" -"1347694592","1347706879","GB","GBR","UNITED KINGDOM" -"1347706880","1347710975","IT","ITA","ITALY" -"1347710976","1347715071","RU","RUS","RUSSIAN FEDERATION" -"1347715072","1347715519","ES","ESP","SPAIN" -"1347715520","1347715527","SA","SAU","SAUDI ARABIA" -"1347715528","1347716151","ES","ESP","SPAIN" -"1347716152","1347716159","LB","LBN","LEBANON" -"1347716160","1347716207","ES","ESP","SPAIN" -"1347716208","1347716223","CY","CYP","CYPRUS" -"1347716224","1347718367","ES","ESP","SPAIN" -"1347718368","1347718399","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1347718400","1347719711","ES","ESP","SPAIN" -"1347719712","1347719719","SO","SOM","SOMALIA" -"1347719720","1347722495","ES","ESP","SPAIN" -"1347722496","1347722751","LB","LBN","LEBANON" -"1347722752","1347723263","ES","ESP","SPAIN" -"1347723264","1347727359","GB","GBR","UNITED KINGDOM" -"1347727360","1347731455","UA","UKR","UKRAINE" -"1347731456","1347739647","DE","DEU","GERMANY" -"1347739648","1347747839","NL","NLD","NETHERLANDS" -"1347747840","1347751935","DE","DEU","GERMANY" -"1347751936","1347754751","CY","CYP","CYPRUS" -"1347754752","1347754775","GR","GRC","GREECE" -"1347754776","1347754791","CY","CYP","CYPRUS" -"1347754792","1347754887","GR","GRC","GREECE" -"1347754888","1347754888","CY","CYP","CYPRUS" -"1347754889","1347754894","GR","GRC","GREECE" -"1347754895","1347754895","CY","CYP","CYPRUS" -"1347754896","1347754919","GR","GRC","GREECE" -"1347754920","1347754927","CY","CYP","CYPRUS" -"1347754928","1347754935","GR","GRC","GREECE" -"1347754936","1347754943","RS","SRB","SERBIA" -"1347754944","1347754951","CY","CYP","CYPRUS" -"1347754952","1347754959","TN","TUN","TUNISIA" -"1347754960","1347754967","MA","MAR","MOROCCO" -"1347754968","1347754983","GR","GRC","GREECE" -"1347754984","1347754991","CY","CYP","CYPRUS" -"1347754992","1347755112","GR","GRC","GREECE" -"1347755113","1347755119","CY","CYP","CYPRUS" -"1347755120","1347755191","GR","GRC","GREECE" -"1347755192","1347755223","CY","CYP","CYPRUS" -"1347755224","1347755231","GR","GRC","GREECE" -"1347755232","1347755263","CY","CYP","CYPRUS" -"1347755264","1347755519","GR","GRC","GREECE" -"1347755520","1347755775","CY","CYP","CYPRUS" -"1347755776","1347756031","GR","GRC","GREECE" -"1347756032","1347760127","NL","NLD","NETHERLANDS" -"1347760128","1347764223","HU","HUN","HUNGARY" -"1347764224","1347772415","GB","GBR","UNITED KINGDOM" -"1347772416","1347776511","MT","MLT","MALTA" -"1347776512","1347780607","SE","SWE","SWEDEN" -"1347780608","1347784703","NL","NLD","NETHERLANDS" -"1347784704","1347788799","RU","RUS","RUSSIAN FEDERATION" -"1347788800","1347792895","NL","NLD","NETHERLANDS" -"1347792896","1347796991","RU","RUS","RUSSIAN FEDERATION" -"1347796992","1347801087","DE","DEU","GERMANY" -"1347801088","1347805183","GB","GBR","UNITED KINGDOM" -"1347805184","1347809279","PL","POL","POLAND" -"1347809280","1347813375","RU","RUS","RUSSIAN FEDERATION" -"1347813376","1347817471","DE","DEU","GERMANY" -"1347817472","1347821567","IT","ITA","ITALY" -"1347821568","1347822343","GB","GBR","UNITED KINGDOM" -"1347822344","1347822351","NL","NLD","NETHERLANDS" -"1347822352","1347825663","GB","GBR","UNITED KINGDOM" -"1347825664","1347829759","IT","ITA","ITALY" -"1347829760","1347833855","SE","SWE","SWEDEN" -"1347833856","1347836223","DE","DEU","GERMANY" -"1347836224","1347836255","SE","SWE","SWEDEN" -"1347836256","1347837951","DE","DEU","GERMANY" -"1347837952","1347846143","RO","ROM","ROMANIA" -"1347846144","1347850239","NO","NOR","NORWAY" -"1347850240","1347854335","IT","ITA","ITALY" -"1347854336","1347854871","DE","DEU","GERMANY" -"1347854880","1347854887","DE","DEU","GERMANY" -"1347854912","1347855071","DE","DEU","GERMANY" -"1347855080","1347855103","DE","DEU","GERMANY" -"1347855104","1347855359","CH","CHE","SWITZERLAND" -"1347855360","1347855935","DE","DEU","GERMANY" -"1347855944","1347855951","DE","DEU","GERMANY" -"1347855960","1347855967","DE","DEU","GERMANY" -"1347856000","1347856063","DE","DEU","GERMANY" -"1347856080","1347856243","DE","DEU","GERMANY" -"1347856256","1347856383","DE","DEU","GERMANY" -"1347856392","1347856431","DE","DEU","GERMANY" -"1347856448","1347856639","DE","DEU","GERMANY" -"1347856640","1347856895","AT","AUT","AUSTRIA" -"1347856896","1347858495","DE","DEU","GERMANY" -"1347858504","1347858527","DE","DEU","GERMANY" -"1347858560","1347858575","DE","DEU","GERMANY" -"1347858592","1347858631","DE","DEU","GERMANY" -"1347858640","1347859351","DE","DEU","GERMANY" -"1347859360","1347859383","DE","DEU","GERMANY" -"1347859408","1347859439","DE","DEU","GERMANY" -"1347859456","1347860863","DE","DEU","GERMANY" -"1347860880","1347860895","DE","DEU","GERMANY" -"1347860912","1347861395","DE","DEU","GERMANY" -"1347861400","1347861471","DE","DEU","GERMANY" -"1347861504","1347861759","DE","DEU","GERMANY" -"1347861800","1347861823","DE","DEU","GERMANY" -"1347861944","1347861951","DE","DEU","GERMANY" -"1347862112","1347862143","DE","DEU","GERMANY" -"1347862280","1347862431","DE","DEU","GERMANY" -"1347862464","1347862527","DE","DEU","GERMANY" -"1347862528","1347866623","CH","CHE","SWITZERLAND" -"1347866624","1347870719","NO","NOR","NORWAY" -"1347870720","1347874815","AM","ARM","ARMENIA" -"1347874816","1347878911","SK","SVK","SLOVAKIA" -"1347878912","1347887103","GB","GBR","UNITED KINGDOM" -"1347887104","1347891199","PL","POL","POLAND" -"1347891200","1347895295","SE","SWE","SWEDEN" -"1347903488","1347907583","RU","RUS","RUSSIAN FEDERATION" -"1347907584","1347911679","DE","DEU","GERMANY" -"1347911680","1347915775","GB","GBR","UNITED KINGDOM" -"1347915776","1347919871","RU","RUS","RUSSIAN FEDERATION" -"1347919872","1347923967","DE","DEU","GERMANY" -"1347923968","1347928063","CZ","CZE","CZECH REPUBLIC" -"1347928064","1347932159","RU","RUS","RUSSIAN FEDERATION" -"1347932160","1347936255","SK","SVK","SLOVAKIA" -"1347936256","1347940351","FR","FRA","FRANCE" -"1347940352","1347944447","BA","BIH","BOSNIA AND HERZEGOVINA" -"1347948544","1347952639","DE","DEU","GERMANY" -"1347952640","1347956735","BE","BEL","BELGIUM" -"1347956736","1347960831","RU","RUS","RUSSIAN FEDERATION" -"1347960832","1347964927","DE","DEU","GERMANY" -"1347964928","1347969023","IT","ITA","ITALY" -"1347969024","1347977215","SE","SWE","SWEDEN" -"1347977216","1347977471","DK","DNK","DENMARK" -"1347977472","1347977487","NG","NGA","NIGERIA" -"1347977488","1347977503","DK","DNK","DENMARK" -"1347977504","1347977519","NG","NGA","NIGERIA" -"1347977520","1347977599","MZ","MOZ","MOZAMBIQUE" -"1347977600","1347977623","NG","NGA","NIGERIA" -"1347977624","1347977631","KE","KEN","KENYA" -"1347977632","1347977855","DK","DNK","DENMARK" -"1347977856","1347977863","NG","NGA","NIGERIA" -"1347977864","1347977871","DK","DNK","DENMARK" -"1347977872","1347977919","NG","NGA","NIGERIA" -"1347977920","1347977999","DK","DNK","DENMARK" -"1347978000","1347978007","SO","SOM","SOMALIA" -"1347978008","1347978047","NG","NGA","NIGERIA" -"1347978048","1347978055","ZW","ZWE","ZIMBABWE" -"1347978056","1347978063","SD","SDN","SUDAN" -"1347978064","1347978135","MZ","MOZ","MOZAMBIQUE" -"1347978136","1347978143","ZW","ZWE","ZIMBABWE" -"1347978144","1347978183","NG","NGA","NIGERIA" -"1347978184","1347978191","DK","DNK","DENMARK" -"1347978192","1347978207","NG","NGA","NIGERIA" -"1347978208","1347978215","MZ","MOZ","MOZAMBIQUE" -"1347978216","1347978223","NG","NGA","NIGERIA" -"1347978224","1347978239","DK","DNK","DENMARK" -"1347978240","1347978271","NG","NGA","NIGERIA" -"1347978272","1347978287","DK","DNK","DENMARK" -"1347978288","1347978359","NG","NGA","NIGERIA" -"1347978360","1347978367","DK","DNK","DENMARK" -"1347978368","1347978407","NG","NGA","NIGERIA" -"1347978408","1347978415","MZ","MOZ","MOZAMBIQUE" -"1347978416","1347978423","ET","ETH","ETHIOPIA" -"1347978424","1347978431","RW","RWA","RWANDA" -"1347978432","1347978439","DK","DNK","DENMARK" -"1347978440","1347978463","NG","NGA","NIGERIA" -"1347978464","1347978487","DK","DNK","DENMARK" -"1347978488","1347978495","YE","YEM","YEMEN" -"1347978496","1347978503","UG","UGA","UGANDA" -"1347978504","1347978559","NG","NGA","NIGERIA" -"1347978560","1347978575","DK","DNK","DENMARK" -"1347978576","1347978663","NG","NGA","NIGERIA" -"1347978664","1347978671","DK","DNK","DENMARK" -"1347978672","1347978679","NG","NGA","NIGERIA" -"1347978680","1347978687","AO","AGO","ANGOLA" -"1347978688","1347978695","NG","NGA","NIGERIA" -"1347978696","1347978711","AO","AGO","ANGOLA" -"1347978712","1347978719","DK","DNK","DENMARK" -"1347978720","1347978743","NG","NGA","NIGERIA" -"1347978744","1347978759","DK","DNK","DENMARK" -"1347978760","1347978807","NG","NGA","NIGERIA" -"1347978808","1347978847","DK","DNK","DENMARK" -"1347978848","1347978855","NG","NGA","NIGERIA" -"1347978856","1347978863","IQ","IRQ","IRAQ" -"1347978864","1347978895","DK","DNK","DENMARK" -"1347978896","1347978919","NG","NGA","NIGERIA" -"1347978920","1347978927","IQ","IRQ","IRAQ" -"1347978928","1347978935","CG","COG","CONGO" -"1347978936","1347978943","NG","NGA","NIGERIA" -"1347978944","1347978959","AO","AGO","ANGOLA" -"1347978960","1347978967","DK","DNK","DENMARK" -"1347978968","1347979007","AO","AGO","ANGOLA" -"1347979008","1347979015","NG","NGA","NIGERIA" -"1347979016","1347979023","DK","DNK","DENMARK" -"1347979024","1347979039","NG","NGA","NIGERIA" -"1347979040","1347979047","AO","AGO","ANGOLA" -"1347979048","1347979055","DK","DNK","DENMARK" -"1347979056","1347979071","NG","NGA","NIGERIA" -"1347979072","1347979135","DK","DNK","DENMARK" -"1347979136","1347979143","NG","NGA","NIGERIA" -"1347979144","1347979159","DK","DNK","DENMARK" -"1347979160","1347979167","NG","NGA","NIGERIA" -"1347979168","1347979183","DK","DNK","DENMARK" -"1347979184","1347979199","NG","NGA","NIGERIA" -"1347979200","1347979215","DK","DNK","DENMARK" -"1347979216","1347979247","NG","NGA","NIGERIA" -"1347979248","1347979263","DK","DNK","DENMARK" -"1347979264","1347979279","IQ","IRQ","IRAQ" -"1347979280","1347979287","UG","UGA","UGANDA" -"1347979288","1347979311","NG","NGA","NIGERIA" -"1347979312","1347979319","CG","COG","CONGO" -"1347979320","1347979327","DK","DNK","DENMARK" -"1347979328","1347979335","AO","AGO","ANGOLA" -"1347979336","1347979375","DK","DNK","DENMARK" -"1347979376","1347979399","NG","NGA","NIGERIA" -"1347979400","1347979407","KM","COM","COMOROS" -"1347979408","1347979431","DK","DNK","DENMARK" -"1347979432","1347979439","NG","NGA","NIGERIA" -"1347979440","1347979447","DK","DNK","DENMARK" -"1347979448","1347979471","NG","NGA","NIGERIA" -"1347979472","1347979479","DK","DNK","DENMARK" -"1347979480","1347979503","NG","NGA","NIGERIA" -"1347979504","1347979527","DK","DNK","DENMARK" -"1347979528","1347979535","NG","NGA","NIGERIA" -"1347979536","1347979543","UG","UGA","UGANDA" -"1347979544","1347979559","DK","DNK","DENMARK" -"1347979560","1347979567","SO","SOM","SOMALIA" -"1347979568","1347979591","NG","NGA","NIGERIA" -"1347979592","1347979607","IQ","IRQ","IRAQ" -"1347979608","1347979623","NG","NGA","NIGERIA" -"1347979624","1347979631","UG","UGA","UGANDA" -"1347979632","1347979655","DK","DNK","DENMARK" -"1347979656","1347979663","NG","NGA","NIGERIA" -"1347979664","1347979671","GB","GBR","UNITED KINGDOM" -"1347979672","1347979751","NG","NGA","NIGERIA" -"1347979752","1347979759","AE","ARE","UNITED ARAB EMIRATES" -"1347979760","1347979767","NG","NGA","NIGERIA" -"1347979768","1347979791","DK","DNK","DENMARK" -"1347979792","1347979807","NG","NGA","NIGERIA" -"1347979808","1347979839","DK","DNK","DENMARK" -"1347979840","1347979847","BI","BDI","BURUNDI" -"1347979848","1347979863","NG","NGA","NIGERIA" -"1347979864","1347979935","DK","DNK","DENMARK" -"1347979936","1347979967","NG","NGA","NIGERIA" -"1347979968","1347980063","DK","DNK","DENMARK" -"1347980064","1347980071","UG","UGA","UGANDA" -"1347980072","1347980079","DK","DNK","DENMARK" -"1347980080","1347980095","GH","GHA","GHANA" -"1347980096","1347980111","NG","NGA","NIGERIA" -"1347980112","1347980127","GN","GIN","GUINEA" -"1347980128","1347980143","NG","NGA","NIGERIA" -"1347980144","1347980151","DK","DNK","DENMARK" -"1347980152","1347980159","UG","UGA","UGANDA" -"1347980160","1347980167","DK","DNK","DENMARK" -"1347980168","1347980175","NG","NGA","NIGERIA" -"1347980176","1347980183","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"1347980184","1347980191","DK","DNK","DENMARK" -"1347980192","1347980271","NG","NGA","NIGERIA" -"1347980272","1347980415","DK","DNK","DENMARK" -"1347980416","1347980543","NG","NGA","NIGERIA" -"1347980544","1347980559","DK","DNK","DENMARK" -"1347980560","1347980607","NG","NGA","NIGERIA" -"1347980608","1347980623","DK","DNK","DENMARK" -"1347980624","1347980631","NG","NGA","NIGERIA" -"1347980632","1347980639","DK","DNK","DENMARK" -"1347980640","1347980647","NG","NGA","NIGERIA" -"1347980648","1347980671","DK","DNK","DENMARK" -"1347980672","1347980703","NG","NGA","NIGERIA" -"1347980704","1347980735","TR","TUR","TURKEY" -"1347980736","1347980799","NG","NGA","NIGERIA" -"1347980800","1347980999","DK","DNK","DENMARK" -"1347981000","1347981031","NG","NGA","NIGERIA" -"1347981032","1347981039","IQ","IRQ","IRAQ" -"1347981040","1347981055","NG","NGA","NIGERIA" -"1347981056","1347981183","DK","DNK","DENMARK" -"1347981184","1347981191","NG","NGA","NIGERIA" -"1347981192","1347981199","DK","DNK","DENMARK" -"1347981200","1347981207","NG","NGA","NIGERIA" -"1347981208","1347981215","DK","DNK","DENMARK" -"1347981216","1347981247","NG","NGA","NIGERIA" -"1347981248","1347981255","UG","UGA","UGANDA" -"1347981256","1347981263","DK","DNK","DENMARK" -"1347981264","1347981271","UG","UGA","UGANDA" -"1347981272","1347981279","DK","DNK","DENMARK" -"1347981280","1347981311","AO","AGO","ANGOLA" -"1347981312","1347981887","NG","NGA","NIGERIA" -"1347981888","1347981903","UG","UGA","UGANDA" -"1347981904","1347981911","DK","DNK","DENMARK" -"1347981912","1347981919","AO","AGO","ANGOLA" -"1347981920","1347981927","DK","DNK","DENMARK" -"1347981928","1347981935","NG","NGA","NIGERIA" -"1347981936","1347981943","CG","COG","CONGO" -"1347981944","1347981959","IQ","IRQ","IRAQ" -"1347981960","1347981983","DK","DNK","DENMARK" -"1347981984","1347981999","AO","AGO","ANGOLA" -"1347982000","1347982015","DK","DNK","DENMARK" -"1347982016","1347982055","NG","NGA","NIGERIA" -"1347982056","1347982063","DK","DNK","DENMARK" -"1347982064","1347982079","IQ","IRQ","IRAQ" -"1347982080","1347982087","NG","NGA","NIGERIA" -"1347982088","1347982103","DK","DNK","DENMARK" -"1347982104","1347982111","AO","AGO","ANGOLA" -"1347982112","1347982143","DK","DNK","DENMARK" -"1347982144","1347982207","NG","NGA","NIGERIA" -"1347982208","1347982223","DK","DNK","DENMARK" -"1347982224","1347982239","NG","NGA","NIGERIA" -"1347982240","1347982263","AO","AGO","ANGOLA" -"1347982264","1347982287","DK","DNK","DENMARK" -"1347982288","1347982303","NG","NGA","NIGERIA" -"1347982304","1347982335","AO","AGO","ANGOLA" -"1347982336","1347982847","NG","NGA","NIGERIA" -"1347982848","1347982879","DK","DNK","DENMARK" -"1347982880","1347982887","IQ","IRQ","IRAQ" -"1347982888","1347982991","NG","NGA","NIGERIA" -"1347982992","1347983007","DK","DNK","DENMARK" -"1347983008","1347983055","NG","NGA","NIGERIA" -"1347983056","1347983063","SE","SWE","SWEDEN" -"1347983064","1347983071","NG","NGA","NIGERIA" -"1347983072","1347983087","BJ","BEN","BENIN" -"1347983088","1347983103","DK","DNK","DENMARK" -"1347983104","1347983119","NG","NGA","NIGERIA" -"1347983120","1347983271","DK","DNK","DENMARK" -"1347983272","1347983279","IQ","IRQ","IRAQ" -"1347983280","1347983287","UG","UGA","UGANDA" -"1347983288","1347983303","DK","DNK","DENMARK" -"1347983304","1347983311","NG","NGA","NIGERIA" -"1347983312","1347983319","IQ","IRQ","IRAQ" -"1347983320","1347983327","NG","NGA","NIGERIA" -"1347983328","1347983335","ZM","ZMB","ZAMBIA" -"1347983336","1347983343","MU","MUS","MAURITIUS" -"1347983344","1347983359","DK","DNK","DENMARK" -"1347983360","1347983519","NG","NGA","NIGERIA" -"1347983520","1347983527","DK","DNK","DENMARK" -"1347983528","1347983535","NG","NGA","NIGERIA" -"1347983536","1347983543","DK","DNK","DENMARK" -"1347983544","1347983551","NG","NGA","NIGERIA" -"1347983552","1347983559","DK","DNK","DENMARK" -"1347983560","1347983575","NG","NGA","NIGERIA" -"1347983576","1347983591","DK","DNK","DENMARK" -"1347983592","1347983599","NG","NGA","NIGERIA" -"1347983600","1347983615","BJ","BEN","BENIN" -"1347983616","1347983903","DK","DNK","DENMARK" -"1347983904","1347983911","NG","NGA","NIGERIA" -"1347983912","1347983919","DK","DNK","DENMARK" -"1347983920","1347983935","NG","NGA","NIGERIA" -"1347983936","1347983943","UG","UGA","UGANDA" -"1347983944","1347983951","NG","NGA","NIGERIA" -"1347983952","1347983967","DK","DNK","DENMARK" -"1347983968","1347983975","NG","NGA","NIGERIA" -"1347983976","1347983983","NA","NAM","NAMIBIA" -"1347983984","1347984303","NG","NGA","NIGERIA" -"1347984304","1347984311","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"1347984312","1347984335","NG","NGA","NIGERIA" -"1347984336","1347984343","DK","DNK","DENMARK" -"1347984344","1347984351","NG","NGA","NIGERIA" -"1347984352","1347984367","DK","DNK","DENMARK" -"1347984368","1347984375","CI","CIV","COTE D'IVOIRE" -"1347984376","1347984383","DK","DNK","DENMARK" -"1347984384","1347984399","NG","NGA","NIGERIA" -"1347984400","1347984407","DK","DNK","DENMARK" -"1347984408","1347984415","IQ","IRQ","IRAQ" -"1347984416","1347984423","NG","NGA","NIGERIA" -"1347984424","1347984447","DK","DNK","DENMARK" -"1347984448","1347984575","IQ","IRQ","IRAQ" -"1347984576","1347984607","NG","NGA","NIGERIA" -"1347984608","1347984639","IQ","IRQ","IRAQ" -"1347984640","1347984647","MW","MWI","MALAWI" -"1347984648","1347984671","NG","NGA","NIGERIA" -"1347984672","1347984703","IQ","IRQ","IRAQ" -"1347984704","1347984719","DK","DNK","DENMARK" -"1347984720","1347984735","NG","NGA","NIGERIA" -"1347984736","1347984743","DK","DNK","DENMARK" -"1347984744","1347984751","NG","NGA","NIGERIA" -"1347984752","1347984799","DK","DNK","DENMARK" -"1347984800","1347984807","CM","CMR","CAMEROON" -"1347984808","1347984815","ZA","ZAF","SOUTH AFRICA" -"1347984816","1347984823","KE","KEN","KENYA" -"1347984824","1347984831","DK","DNK","DENMARK" -"1347984832","1347984839","ZW","ZWE","ZIMBABWE" -"1347984840","1347984847","BJ","BEN","BENIN" -"1347984848","1347984855","MR","MRT","MAURITANIA" -"1347984856","1347984863","KE","KEN","KENYA" -"1347984864","1347984871","UG","UGA","UGANDA" -"1347984872","1347984903","NG","NGA","NIGERIA" -"1347984904","1347984927","DK","DNK","DENMARK" -"1347984928","1347984943","NG","NGA","NIGERIA" -"1347984944","1347984959","DK","DNK","DENMARK" -"1347984960","1347984999","NG","NGA","NIGERIA" -"1347985000","1347985007","UG","UGA","UGANDA" -"1347985008","1347985015","NG","NGA","NIGERIA" -"1347985016","1347985023","DK","DNK","DENMARK" -"1347985024","1347985039","NG","NGA","NIGERIA" -"1347985040","1347985047","UG","UGA","UGANDA" -"1347985048","1347985095","DK","DNK","DENMARK" -"1347985096","1347985119","NG","NGA","NIGERIA" -"1347985120","1347985407","DK","DNK","DENMARK" -"1347985408","1347989503","IT","ITA","ITALY" -"1347989504","1347993599","FI","FIN","FINLAND" -"1347993600","1348001791","GB","GBR","UNITED KINGDOM" -"1348001792","1348005887","ES","ESP","SPAIN" -"1348005888","1348009983","BH","BHR","BAHRAIN" -"1348009984","1348014079","RU","RUS","RUSSIAN FEDERATION" -"1348014080","1348018175","DK","DNK","DENMARK" -"1348018176","1348026367","NO","NOR","NORWAY" -"1348026368","1348030463","DE","DEU","GERMANY" -"1348030464","1348034559","GB","GBR","UNITED KINGDOM" -"1348034560","1348038655","AT","AUT","AUSTRIA" -"1348038656","1348042751","FR","FRA","FRANCE" -"1348042752","1348050943","RU","RUS","RUSSIAN FEDERATION" -"1348050944","1348055039","SE","SWE","SWEDEN" -"1348055040","1348059135","LB","LBN","LEBANON" -"1348059136","1348063231","RU","RUS","RUSSIAN FEDERATION" -"1348063232","1348067327","CH","CHE","SWITZERLAND" -"1348067328","1348071423","NL","NLD","NETHERLANDS" -"1348071424","1348075519","DE","DEU","GERMANY" -"1348075520","1348075967","LV","LVA","LATVIA" -"1348075968","1348076031","PA","PAN","PANAMA" -"1348076032","1348076287","LV","LVA","LATVIA" -"1348076288","1348076543","RU","RUS","RUSSIAN FEDERATION" -"1348076544","1348083711","LV","LVA","LATVIA" -"1348083712","1348086535","LU","LUX","LUXEMBOURG" -"1348086536","1348086543","NL","NLD","NETHERLANDS" -"1348086544","1348091903","LU","LUX","LUXEMBOURG" -"1348091904","1348095999","RU","RUS","RUSSIAN FEDERATION" -"1348096000","1348100095","AL","ALB","ALBANIA" -"1348100096","1348104191","DE","DEU","GERMANY" -"1348104192","1348108287","RU","RUS","RUSSIAN FEDERATION" -"1348108288","1348112383","CZ","CZE","CZECH REPUBLIC" -"1348112384","1348116479","DE","DEU","GERMANY" -"1348116480","1348120575","JO","JOR","JORDAN" -"1348120576","1348124671","RU","RUS","RUSSIAN FEDERATION" -"1348124672","1348128767","GB","GBR","UNITED KINGDOM" -"1348128768","1348132863","SI","SVN","SLOVENIA" -"1348132864","1348136959","UA","UKR","UKRAINE" -"1348136960","1348141055","RU","RUS","RUSSIAN FEDERATION" -"1348141056","1348145151","DK","DNK","DENMARK" -"1348145152","1348149247","RU","RUS","RUSSIAN FEDERATION" -"1348149248","1348153343","NO","NOR","NORWAY" -"1348153344","1348157439","IT","ITA","ITALY" -"1348157440","1348165631","ES","ESP","SPAIN" -"1348165632","1348169727","DE","DEU","GERMANY" -"1348169728","1348173823","AL","ALB","ALBANIA" -"1348173824","1348174591","FI","FIN","FINLAND" -"1348174592","1348177919","DK","DNK","DENMARK" -"1348177920","1348182015","BE","BEL","BELGIUM" -"1348182016","1348190207","UA","UKR","UKRAINE" -"1348190208","1348194303","RU","RUS","RUSSIAN FEDERATION" -"1348194304","1348198399","GR","GRC","GREECE" -"1348198400","1348202495","NO","NOR","NORWAY" -"1348206592","1348218879","RU","RUS","RUSSIAN FEDERATION" -"1348218880","1348220415","DE","DEU","GERMANY" -"1348220416","1348220479","SA","SAU","SAUDI ARABIA" -"1348220480","1348220511","DE","DEU","GERMANY" -"1348220512","1348220543","SA","SAU","SAUDI ARABIA" -"1348220544","1348220687","DE","DEU","GERMANY" -"1348220688","1348220703","SA","SAU","SAUDI ARABIA" -"1348220704","1348220711","DE","DEU","GERMANY" -"1348220712","1348220735","SA","SAU","SAUDI ARABIA" -"1348220736","1348220799","BH","BHR","BAHRAIN" -"1348220800","1348220863","DE","DEU","GERMANY" -"1348220864","1348220895","BH","BHR","BAHRAIN" -"1348220896","1348222975","DE","DEU","GERMANY" -"1348222976","1348231167","LU","LUX","LUXEMBOURG" -"1348231168","1348235263","RU","RUS","RUSSIAN FEDERATION" -"1348235264","1348239359","AT","AUT","AUSTRIA" -"1348239360","1348241407","SE","SWE","SWEDEN" -"1348241408","1348242687","GB","GBR","UNITED KINGDOM" -"1348242688","1348243455","SE","SWE","SWEDEN" -"1348243456","1348247551","GB","GBR","UNITED KINGDOM" -"1348247552","1348251647","RU","RUS","RUSSIAN FEDERATION" -"1348251648","1348255743","GE","GEO","GEORGIA" -"1348255744","1348263935","RU","RUS","RUSSIAN FEDERATION" -"1348263936","1348268031","UA","UKR","UKRAINE" -"1348272128","1348274695","IE","IRL","IRELAND" -"1348274696","1348274771","CH","CHE","SWITZERLAND" -"1348274772","1348274775","IE","IRL","IRELAND" -"1348274776","1348274791","CH","CHE","SWITZERLAND" -"1348274792","1348274799","IE","IRL","IRELAND" -"1348274800","1348274815","IL","ISR","ISRAEL" -"1348274816","1348274927","IE","IRL","IRELAND" -"1348274928","1348274935","IL","ISR","ISRAEL" -"1348274936","1348274943","IE","IRL","IRELAND" -"1348274944","1348275199","CH","CHE","SWITZERLAND" -"1348275200","1348275711","GB","GBR","UNITED KINGDOM" -"1348275712","1348275967","CH","CHE","SWITZERLAND" -"1348275968","1348280319","IE","IRL","IRELAND" -"1348280320","1348284415","AT","AUT","AUSTRIA" -"1348284416","1348288511","RU","RUS","RUSSIAN FEDERATION" -"1348288512","1348292607","IT","ITA","ITALY" -"1348292608","1348296703","FR","FRA","FRANCE" -"1348296704","1348300799","RU","RUS","RUSSIAN FEDERATION" -"1348300800","1348304895","UA","UKR","UKRAINE" -"1348304896","1348308991","IT","ITA","ITALY" -"1348308992","1348313087","MT","MLT","MALTA" -"1348313088","1348317183","GB","GBR","UNITED KINGDOM" -"1348317184","1348321279","RU","RUS","RUSSIAN FEDERATION" -"1348321280","1348325375","GB","GBR","UNITED KINGDOM" -"1348325376","1348329471","TR","TUR","TURKEY" -"1348329472","1348331871","CS","SCG","SERBIA AND MONTENEGRO" -"1348331872","1348331903","RS","SRB","SERBIA" -"1348331904","1348332351","CS","SCG","SERBIA AND MONTENEGRO" -"1348332352","1348332352","RS","SRB","SERBIA" -"1348332353","1348332503","CS","SCG","SERBIA AND MONTENEGRO" -"1348332504","1348332511","RS","SRB","SERBIA" -"1348332512","1348333215","CS","SCG","SERBIA AND MONTENEGRO" -"1348333216","1348333231","RS","SRB","SERBIA" -"1348333232","1348333583","CS","SCG","SERBIA AND MONTENEGRO" -"1348333584","1348333599","RS","SRB","SERBIA" -"1348333600","1348333607","CS","SCG","SERBIA AND MONTENEGRO" -"1348333608","1348333631","RS","SRB","SERBIA" -"1348333632","1348333935","CS","SCG","SERBIA AND MONTENEGRO" -"1348333936","1348333945","RS","SRB","SERBIA" -"1348333946","1348336383","CS","SCG","SERBIA AND MONTENEGRO" -"1348336384","1348336639","RS","SRB","SERBIA" -"1348336640","1348337663","CS","SCG","SERBIA AND MONTENEGRO" -"1348337664","1348341759","ES","ESP","SPAIN" -"1348341760","1348345855","PL","POL","POLAND" -"1348345856","1348349951","GB","GBR","UNITED KINGDOM" -"1348349952","1348354047","SK","SVK","SLOVAKIA" -"1348354048","1348356959","NL","NLD","NETHERLANDS" -"1348356960","1348356991","IT","ITA","ITALY" -"1348356992","1348358143","NL","NLD","NETHERLANDS" -"1348358144","1348362239","DE","DEU","GERMANY" -"1348362240","1348366335","MC","MCO","MONACO" -"1348366336","1348370431","IT","ITA","ITALY" -"1348370432","1348374527","DE","DEU","GERMANY" -"1348374528","1348378623","CH","CHE","SWITZERLAND" -"1348378624","1348382719","BY","BLR","BELARUS" -"1348382720","1348386815","FR","FRA","FRANCE" -"1348386816","1348390911","GB","GBR","UNITED KINGDOM" -"1348390912","1348395007","SE","SWE","SWEDEN" -"1348395008","1348399103","BY","BLR","BELARUS" -"1348399104","1348403199","MD","MDA","REPUBLIC OF MOLDOVA" -"1348407296","1348411391","BG","BGR","BULGARIA" -"1348411392","1348415487","RU","RUS","RUSSIAN FEDERATION" -"1348415488","1348419583","GB","GBR","UNITED KINGDOM" -"1348419584","1348427775","HU","HUN","HUNGARY" -"1348427776","1348435967","CZ","CZE","CZECH REPUBLIC" -"1348435968","1348440063","FI","FIN","FINLAND" -"1348440064","1348444159","DE","DEU","GERMANY" -"1348444160","1348448255","NL","NLD","NETHERLANDS" -"1348448256","1348456447","GB","GBR","UNITED KINGDOM" -"1348456448","1348460543","BH","BHR","BAHRAIN" -"1348460544","1348464639","SI","SVN","SLOVENIA" -"1348464640","1348468735","CZ","CZE","CZECH REPUBLIC" -"1348468736","1348548607","RO","ROM","ROMANIA" -"1348548608","1348549631","MD","MDA","REPUBLIC OF MOLDOVA" -"1348549632","1348599807","RO","ROM","ROMANIA" -"1348599808","1348730879","HU","HUN","HUNGARY" -"1348730880","1348861951","NL","NLD","NETHERLANDS" -"1348861952","1348993023","ES","ESP","SPAIN" -"1348993024","1349124095","IT","ITA","ITALY" -"1349124096","1349255167","GR","GRC","GREECE" -"1349255168","1349517311","AT","AUT","AUSTRIA" -"1349517312","1349763071","NL","NLD","NETHERLANDS" -"1349763072","1349771263","RU","RUS","RUSSIAN FEDERATION" -"1349771264","1349779455","NL","NLD","NETHERLANDS" -"1349779456","1349910527","IT","ITA","ITALY" -"1349910528","1350041599","FR","FRA","FRANCE" -"1350041600","1350091135","AT","AUT","AUSTRIA" -"1350091136","1350091199","SA","SAU","SAUDI ARABIA" -"1350091200","1350091991","AT","AUT","AUSTRIA" -"1350091992","1350091999","SA","SAU","SAUDI ARABIA" -"1350092000","1350092375","AT","AUT","AUSTRIA" -"1350092376","1350092391","IQ","IRQ","IRAQ" -"1350092392","1350092467","AT","AUT","AUSTRIA" -"1350092468","1350092471","DE","DEU","GERMANY" -"1350092472","1350092495","AT","AUT","AUSTRIA" -"1350092496","1350092503","IQ","IRQ","IRAQ" -"1350092504","1350215167","AT","AUT","AUSTRIA" -"1350215168","1350215191","IQ","IRQ","IRAQ" -"1350215192","1350215679","AT","AUT","AUSTRIA" -"1350215680","1350215683","SA","SAU","SAUDI ARABIA" -"1350215684","1350215699","AT","AUT","AUSTRIA" -"1350215700","1350215703","IQ","IRQ","IRAQ" -"1350215704","1350215743","AT","AUT","AUSTRIA" -"1350215744","1350215751","IQ","IRQ","IRAQ" -"1350215752","1350215763","AT","AUT","AUSTRIA" -"1350215764","1350215767","IQ","IRQ","IRAQ" -"1350215768","1350215783","AT","AUT","AUSTRIA" -"1350215784","1350215787","AE","ARE","UNITED ARAB EMIRATES" -"1350215788","1350215791","IQ","IRQ","IRAQ" -"1350215792","1350215903","AT","AUT","AUSTRIA" -"1350215904","1350215911","IQ","IRQ","IRAQ" -"1350215912","1350215971","AT","AUT","AUSTRIA" -"1350215972","1350215975","IQ","IRQ","IRAQ" -"1350215976","1350215987","AT","AUT","AUSTRIA" -"1350215988","1350215991","DE","DEU","GERMANY" -"1350215992","1350216023","AT","AUT","AUSTRIA" -"1350216024","1350216031","IQ","IRQ","IRAQ" -"1350216032","1350216047","AT","AUT","AUSTRIA" -"1350216048","1350216055","SA","SAU","SAUDI ARABIA" -"1350216056","1350216075","AT","AUT","AUSTRIA" -"1350216076","1350216079","SA","SAU","SAUDI ARABIA" -"1350216080","1350216095","AT","AUT","AUSTRIA" -"1350216096","1350216107","SA","SAU","SAUDI ARABIA" -"1350216108","1350216111","AT","AUT","AUSTRIA" -"1350216112","1350216123","SA","SAU","SAUDI ARABIA" -"1350216124","1350216127","IQ","IRQ","IRAQ" -"1350216128","1350216151","AT","AUT","AUSTRIA" -"1350216152","1350216159","SA","SAU","SAUDI ARABIA" -"1350216160","1350216175","AT","AUT","AUSTRIA" -"1350216176","1350216183","SA","SAU","SAUDI ARABIA" -"1350216184","1350216203","AT","AUT","AUSTRIA" -"1350216204","1350216207","SA","SAU","SAUDI ARABIA" -"1350216208","1350216211","AT","AUT","AUSTRIA" -"1350216212","1350216219","SA","SAU","SAUDI ARABIA" -"1350216220","1350216223","AT","AUT","AUSTRIA" -"1350216224","1350216227","SA","SAU","SAUDI ARABIA" -"1350216228","1350216231","AT","AUT","AUSTRIA" -"1350216232","1350216235","SA","SAU","SAUDI ARABIA" -"1350216236","1350216239","AT","AUT","AUSTRIA" -"1350216240","1350216243","SA","SAU","SAUDI ARABIA" -"1350216244","1350216247","AT","AUT","AUSTRIA" -"1350216248","1350216251","SA","SAU","SAUDI ARABIA" -"1350216252","1350216275","AT","AUT","AUSTRIA" -"1350216276","1350216287","SA","SAU","SAUDI ARABIA" -"1350216288","1350216295","AT","AUT","AUSTRIA" -"1350216296","1350216299","SA","SAU","SAUDI ARABIA" -"1350216300","1350216311","AT","AUT","AUSTRIA" -"1350216312","1350216315","SA","SAU","SAUDI ARABIA" -"1350216316","1350216431","AT","AUT","AUSTRIA" -"1350216432","1350216451","SA","SAU","SAUDI ARABIA" -"1350216452","1350216455","AT","AUT","AUSTRIA" -"1350216456","1350216459","SA","SAU","SAUDI ARABIA" -"1350216460","1350216467","AT","AUT","AUSTRIA" -"1350216468","1350216471","SA","SAU","SAUDI ARABIA" -"1350216472","1350216475","IQ","IRQ","IRAQ" -"1350216476","1350216479","SA","SAU","SAUDI ARABIA" -"1350216480","1350216487","DE","DEU","GERMANY" -"1350216488","1350216551","AT","AUT","AUSTRIA" -"1350216552","1350216555","SA","SAU","SAUDI ARABIA" -"1350216556","1350216711","AT","AUT","AUSTRIA" -"1350216712","1350216719","SA","SAU","SAUDI ARABIA" -"1350216720","1350216723","AT","AUT","AUSTRIA" -"1350216724","1350216727","SA","SAU","SAUDI ARABIA" -"1350216728","1350216731","AT","AUT","AUSTRIA" -"1350216732","1350216735","IQ","IRQ","IRAQ" -"1350216736","1350216743","AT","AUT","AUSTRIA" -"1350216744","1350216759","IQ","IRQ","IRAQ" -"1350216760","1350216983","AT","AUT","AUSTRIA" -"1350216984","1350216987","IQ","IRQ","IRAQ" -"1350216988","1350217011","AT","AUT","AUSTRIA" -"1350217012","1350217015","IQ","IRQ","IRAQ" -"1350217016","1350217027","AT","AUT","AUSTRIA" -"1350217028","1350217031","SA","SAU","SAUDI ARABIA" -"1350217032","1350217043","AT","AUT","AUSTRIA" -"1350217044","1350217047","IQ","IRQ","IRAQ" -"1350217048","1350217051","SA","SAU","SAUDI ARABIA" -"1350217052","1350217079","AT","AUT","AUSTRIA" -"1350217080","1350217083","SA","SAU","SAUDI ARABIA" -"1350217084","1350217115","AT","AUT","AUSTRIA" -"1350217116","1350217119","SA","SAU","SAUDI ARABIA" -"1350217120","1350217135","AT","AUT","AUSTRIA" -"1350217136","1350217139","SA","SAU","SAUDI ARABIA" -"1350217140","1350217343","AT","AUT","AUSTRIA" -"1350217344","1350217347","IQ","IRQ","IRAQ" -"1350217348","1350217351","AE","ARE","UNITED ARAB EMIRATES" -"1350217352","1350217403","AT","AUT","AUSTRIA" -"1350217404","1350217407","SA","SAU","SAUDI ARABIA" -"1350217408","1350217423","AE","ARE","UNITED ARAB EMIRATES" -"1350217424","1350217455","AT","AUT","AUSTRIA" -"1350217456","1350217471","IT","ITA","ITALY" -"1350217472","1350217635","AT","AUT","AUSTRIA" -"1350217636","1350217639","DE","DEU","GERMANY" -"1350217640","1350217695","AT","AUT","AUSTRIA" -"1350217696","1350217711","AE","ARE","UNITED ARAB EMIRATES" -"1350217712","1350220287","AT","AUT","AUSTRIA" -"1350220288","1350220543","DE","DEU","GERMANY" -"1350220544","1350295823","AT","AUT","AUSTRIA" -"1350295824","1350295831","SA","SAU","SAUDI ARABIA" -"1350295832","1350295847","AT","AUT","AUSTRIA" -"1350295848","1350295855","SA","SAU","SAUDI ARABIA" -"1350295856","1350296071","AT","AUT","AUSTRIA" -"1350296072","1350296079","IQ","IRQ","IRAQ" -"1350296080","1350296099","AT","AUT","AUSTRIA" -"1350296100","1350296103","SA","SAU","SAUDI ARABIA" -"1350296104","1350296111","IQ","IRQ","IRAQ" -"1350296112","1350296119","AT","AUT","AUSTRIA" -"1350296120","1350296127","IQ","IRQ","IRAQ" -"1350296128","1350296199","AT","AUT","AUSTRIA" -"1350296200","1350296207","SA","SAU","SAUDI ARABIA" -"1350296208","1350296243","IQ","IRQ","IRAQ" -"1350296244","1350296247","AT","AUT","AUSTRIA" -"1350296248","1350296255","IQ","IRQ","IRAQ" -"1350296256","1350296303","AT","AUT","AUSTRIA" -"1350296304","1350296319","IQ","IRQ","IRAQ" -"1350296320","1350296327","AT","AUT","AUSTRIA" -"1350296328","1350296343","IQ","IRQ","IRAQ" -"1350296344","1350296351","AT","AUT","AUSTRIA" -"1350296352","1350296359","IQ","IRQ","IRAQ" -"1350296360","1350296367","AT","AUT","AUSTRIA" -"1350296368","1350296387","IQ","IRQ","IRAQ" -"1350296388","1350296391","AT","AUT","AUSTRIA" -"1350296392","1350296395","IQ","IRQ","IRAQ" -"1350296396","1350296399","AT","AUT","AUSTRIA" -"1350296400","1350296403","SA","SAU","SAUDI ARABIA" -"1350296404","1350296419","IQ","IRQ","IRAQ" -"1350296420","1350296431","SA","SAU","SAUDI ARABIA" -"1350296432","1350296439","DE","DEU","GERMANY" -"1350296440","1350296511","AT","AUT","AUSTRIA" -"1350296512","1350296519","IQ","IRQ","IRAQ" -"1350296520","1350296539","AT","AUT","AUSTRIA" -"1350296540","1350296543","SA","SAU","SAUDI ARABIA" -"1350296544","1350303743","AT","AUT","AUSTRIA" -"1350303744","1350434815","FR","FRA","FRANCE" -"1350434816","1350565887","NL","NLD","NETHERLANDS" -"1350565888","1351793791","DE","DEU","GERMANY" -"1351793792","1351793855","GB","GBR","UNITED KINGDOM" -"1351793856","1351797231","DE","DEU","GERMANY" -"1351797232","1351797239","PL","POL","POLAND" -"1351797240","1351801327","DE","DEU","GERMANY" -"1351801328","1351801335","HU","HUN","HUNGARY" -"1351801336","1351806975","DE","DEU","GERMANY" -"1351806976","1351807231","IT","ITA","ITALY" -"1351807232","1351879631","DE","DEU","GERMANY" -"1351879632","1351879639","IT","ITA","ITALY" -"1351879640","1351879999","DE","DEU","GERMANY" -"1351880000","1351880031","IT","ITA","ITALY" -"1351880032","1351965183","DE","DEU","GERMANY" -"1351965184","1351965439","US","USA","UNITED STATES" -"1351965440","1352010239","DE","DEU","GERMANY" -"1352010240","1352010495","US","USA","UNITED STATES" -"1352010496","1352011447","DE","DEU","GERMANY" -"1352011448","1352011455","IT","ITA","ITALY" -"1352011456","1352038695","DE","DEU","GERMANY" -"1352038696","1352038699","US","USA","UNITED STATES" -"1352038700","1352139671","DE","DEU","GERMANY" -"1352139672","1352139679","IT","ITA","ITALY" -"1352139680","1352144519","DE","DEU","GERMANY" -"1352144520","1352144527","IT","ITA","ITALY" -"1352144528","1352144535","US","USA","UNITED STATES" -"1352144536","1352147007","DE","DEU","GERMANY" -"1352147008","1352147015","SE","SWE","SWEDEN" -"1352147016","1352147107","DE","DEU","GERMANY" -"1352147108","1352147111","SE","SWE","SWEDEN" -"1352147112","1352147263","DE","DEU","GERMANY" -"1352147264","1352147271","ES","ESP","SPAIN" -"1352147272","1352147391","DE","DEU","GERMANY" -"1352147392","1352147399","CZ","CZE","CZECH REPUBLIC" -"1352147400","1352147423","DE","DEU","GERMANY" -"1352147424","1352147431","ES","ESP","SPAIN" -"1352147432","1352147439","DE","DEU","GERMANY" -"1352147440","1352147447","SZ","SWZ","SWAZILAND" -"1352147448","1352148151","DE","DEU","GERMANY" -"1352148152","1352148159","IT","ITA","ITALY" -"1352148160","1352148751","DE","DEU","GERMANY" -"1352148752","1352148759","US","USA","UNITED STATES" -"1352148760","1352277535","DE","DEU","GERMANY" -"1352277536","1352277567","IT","ITA","ITALY" -"1352277568","1352402791","DE","DEU","GERMANY" -"1352402792","1352402799","BE","BEL","BELGIUM" -"1352402800","1352404599","DE","DEU","GERMANY" -"1352404600","1352404607","NL","NLD","NETHERLANDS" -"1352404608","1352445687","DE","DEU","GERMANY" -"1352445688","1352445703","NL","NLD","NETHERLANDS" -"1352445704","1352663039","DE","DEU","GERMANY" -"1352663040","1353187327","DK","DNK","DENMARK" -"1353187328","1353255071","GB","GBR","UNITED KINGDOM" -"1353255072","1353255087","CA","CAN","CANADA" -"1353255088","1353255839","GB","GBR","UNITED KINGDOM" -"1353255840","1353255855","FR","FRA","FRANCE" -"1353255856","1353257111","GB","GBR","UNITED KINGDOM" -"1353257112","1353257119","ES","ESP","SPAIN" -"1353257120","1353257983","GB","GBR","UNITED KINGDOM" -"1353257984","1353258247","SE","SWE","SWEDEN" -"1353258248","1353258255","GB","GBR","UNITED KINGDOM" -"1353258256","1353258263","SE","SWE","SWEDEN" -"1353258264","1353258271","DK","DNK","DENMARK" -"1353258272","1353258303","SE","SWE","SWEDEN" -"1353258304","1353258367","FI","FIN","FINLAND" -"1353258368","1353258415","SE","SWE","SWEDEN" -"1353258416","1353258423","DK","DNK","DENMARK" -"1353258424","1353258495","SE","SWE","SWEDEN" -"1353258496","1353258503","GB","GBR","UNITED KINGDOM" -"1353258504","1353258647","SE","SWE","SWEDEN" -"1353258648","1353258783","GB","GBR","UNITED KINGDOM" -"1353258784","1353258807","SE","SWE","SWEDEN" -"1353258808","1353265943","GB","GBR","UNITED KINGDOM" -"1353265944","1353265951","IE","IRL","IRELAND" -"1353265952","1353266959","GB","GBR","UNITED KINGDOM" -"1353266960","1353266975","IE","IRL","IRELAND" -"1353266976","1353267455","GB","GBR","UNITED KINGDOM" -"1353267456","1353267839","IE","IRL","IRELAND" -"1353267840","1353267967","DE","DEU","GERMANY" -"1353267968","1353268223","IE","IRL","IRELAND" -"1353268224","1353268479","GB","GBR","UNITED KINGDOM" -"1353268480","1353269039","BE","BEL","BELGIUM" -"1353269040","1353269047","GB","GBR","UNITED KINGDOM" -"1353269048","1353269247","BE","BEL","BELGIUM" -"1353269248","1353271807","GB","GBR","UNITED KINGDOM" -"1353271808","1353271831","ES","ESP","SPAIN" -"1353271832","1353271839","GB","GBR","UNITED KINGDOM" -"1353271840","1353271847","ES","ESP","SPAIN" -"1353271848","1353271895","GB","GBR","UNITED KINGDOM" -"1353271896","1353271919","ES","ESP","SPAIN" -"1353271920","1353271927","GB","GBR","UNITED KINGDOM" -"1353271928","1353272031","ES","ESP","SPAIN" -"1353272032","1353272039","FR","FRA","FRANCE" -"1353272040","1353272055","ES","ESP","SPAIN" -"1353272056","1353272063","GB","GBR","UNITED KINGDOM" -"1353272064","1353272095","ES","ESP","SPAIN" -"1353272096","1353272103","GB","GBR","UNITED KINGDOM" -"1353272104","1353272245","ES","ESP","SPAIN" -"1353272246","1353272255","GB","GBR","UNITED KINGDOM" -"1353272256","1353272647","ES","ESP","SPAIN" -"1353272648","1353272655","GB","GBR","UNITED KINGDOM" -"1353272656","1353272691","ES","ESP","SPAIN" -"1353272692","1353272695","GB","GBR","UNITED KINGDOM" -"1353272696","1353272727","ES","ESP","SPAIN" -"1353272728","1353272735","GB","GBR","UNITED KINGDOM" -"1353272736","1353272783","ES","ESP","SPAIN" -"1353272784","1353272799","GB","GBR","UNITED KINGDOM" -"1353272800","1353272807","ES","ESP","SPAIN" -"1353272808","1353272815","GB","GBR","UNITED KINGDOM" -"1353272816","1353272847","ES","ESP","SPAIN" -"1353272848","1353272879","GB","GBR","UNITED KINGDOM" -"1353272880","1353272927","ES","ESP","SPAIN" -"1353272928","1353272959","GB","GBR","UNITED KINGDOM" -"1353272960","1353273007","ES","ESP","SPAIN" -"1353273008","1353273023","GB","GBR","UNITED KINGDOM" -"1353273024","1353273047","ES","ESP","SPAIN" -"1353273048","1353273055","GB","GBR","UNITED KINGDOM" -"1353273056","1353273343","ES","ESP","SPAIN" -"1353273344","1353273631","BE","BEL","BELGIUM" -"1353273632","1353273639","ES","ESP","SPAIN" -"1353273640","1353273711","BE","BEL","BELGIUM" -"1353273712","1353273719","GB","GBR","UNITED KINGDOM" -"1353273720","1353274367","BE","BEL","BELGIUM" -"1353274368","1353274655","ES","ESP","SPAIN" -"1353274656","1353274663","GB","GBR","UNITED KINGDOM" -"1353274664","1353274671","ES","ESP","SPAIN" -"1353274672","1353274679","GB","GBR","UNITED KINGDOM" -"1353274680","1353274687","ES","ESP","SPAIN" -"1353274688","1353274703","GB","GBR","UNITED KINGDOM" -"1353274704","1353274759","ES","ESP","SPAIN" -"1353274760","1353274767","GB","GBR","UNITED KINGDOM" -"1353274768","1353274831","ES","ESP","SPAIN" -"1353274832","1353274839","GB","GBR","UNITED KINGDOM" -"1353274840","1353274863","ES","ESP","SPAIN" -"1353274864","1353274879","GB","GBR","UNITED KINGDOM" -"1353274880","1353274895","ES","ESP","SPAIN" -"1353274896","1353274911","GB","GBR","UNITED KINGDOM" -"1353274912","1353274919","ES","ESP","SPAIN" -"1353274920","1353274927","GB","GBR","UNITED KINGDOM" -"1353274928","1353275023","ES","ESP","SPAIN" -"1353275024","1353275039","GB","GBR","UNITED KINGDOM" -"1353275040","1353275087","ES","ESP","SPAIN" -"1353275088","1353275103","GB","GBR","UNITED KINGDOM" -"1353275104","1353275231","ES","ESP","SPAIN" -"1353275232","1353275255","GB","GBR","UNITED KINGDOM" -"1353275256","1353275263","ES","ESP","SPAIN" -"1353275264","1353275279","GB","GBR","UNITED KINGDOM" -"1353275280","1353275335","ES","ESP","SPAIN" -"1353275336","1353275343","GB","GBR","UNITED KINGDOM" -"1353275344","1353275391","ES","ESP","SPAIN" -"1353275392","1353277439","GB","GBR","UNITED KINGDOM" -"1353277440","1353279487","CH","CHE","SWITZERLAND" -"1353279488","1353279695","IT","ITA","ITALY" -"1353279696","1353279711","GB","GBR","UNITED KINGDOM" -"1353279712","1353279743","IT","ITA","ITALY" -"1353279744","1353279751","GB","GBR","UNITED KINGDOM" -"1353279752","1353279759","IT","ITA","ITALY" -"1353279760","1353279767","GB","GBR","UNITED KINGDOM" -"1353279768","1353279783","IT","ITA","ITALY" -"1353279784","1353279791","GB","GBR","UNITED KINGDOM" -"1353279792","1353280031","IT","ITA","ITALY" -"1353280032","1353280039","GB","GBR","UNITED KINGDOM" -"1353280040","1353280079","IT","ITA","ITALY" -"1353280080","1353280087","GB","GBR","UNITED KINGDOM" -"1353280088","1353280111","IT","ITA","ITALY" -"1353280112","1353280119","GB","GBR","UNITED KINGDOM" -"1353280120","1353280591","IT","ITA","ITALY" -"1353280592","1353280607","GB","GBR","UNITED KINGDOM" -"1353280608","1353280671","IT","ITA","ITALY" -"1353280672","1353280679","GB","GBR","UNITED KINGDOM" -"1353280680","1353281023","IT","ITA","ITALY" -"1353281024","1353281535","BE","BEL","BELGIUM" -"1353281536","1353282047","GB","GBR","UNITED KINGDOM" -"1353282048","1353282127","IT","ITA","ITALY" -"1353282128","1353282135","GB","GBR","UNITED KINGDOM" -"1353282136","1353282559","IT","ITA","ITALY" -"1353282560","1353283071","GB","GBR","UNITED KINGDOM" -"1353283072","1353283327","IT","ITA","ITALY" -"1353283328","1353287327","GB","GBR","UNITED KINGDOM" -"1353287328","1353287359","IE","IRL","IRELAND" -"1353287360","1353287679","GB","GBR","UNITED KINGDOM" -"1353287680","1353287935","DE","DEU","GERMANY" -"1353287936","1353288031","IE","IRL","IRELAND" -"1353288032","1353288063","GB","GBR","UNITED KINGDOM" -"1353288064","1353288151","IE","IRL","IRELAND" -"1353288152","1353288159","GB","GBR","UNITED KINGDOM" -"1353288160","1353288167","IE","IRL","IRELAND" -"1353288168","1353288191","GB","GBR","UNITED KINGDOM" -"1353288192","1353288319","IE","IRL","IRELAND" -"1353288320","1353288327","GB","GBR","UNITED KINGDOM" -"1353288328","1353288351","IE","IRL","IRELAND" -"1353288352","1353288383","GB","GBR","UNITED KINGDOM" -"1353288384","1353288399","IE","IRL","IRELAND" -"1353288400","1353288407","GB","GBR","UNITED KINGDOM" -"1353288408","1353288519","IE","IRL","IRELAND" -"1353288520","1353288527","GB","GBR","UNITED KINGDOM" -"1353288528","1353288607","IE","IRL","IRELAND" -"1353288608","1353288639","GB","GBR","UNITED KINGDOM" -"1353288640","1353288655","IE","IRL","IRELAND" -"1353288656","1353288663","GB","GBR","UNITED KINGDOM" -"1353288664","1353288831","IE","IRL","IRELAND" -"1353288832","1353288959","GB","GBR","UNITED KINGDOM" -"1353288960","1353289247","IE","IRL","IRELAND" -"1353289248","1353289255","GB","GBR","UNITED KINGDOM" -"1353289256","1353289359","IE","IRL","IRELAND" -"1353289360","1353289367","GB","GBR","UNITED KINGDOM" -"1353289368","1353289391","IE","IRL","IRELAND" -"1353289392","1353289407","GB","GBR","UNITED KINGDOM" -"1353289408","1353289623","IE","IRL","IRELAND" -"1353289624","1353289631","GB","GBR","UNITED KINGDOM" -"1353289632","1353289647","IE","IRL","IRELAND" -"1353289648","1353290751","GB","GBR","UNITED KINGDOM" -"1353290752","1353290815","DE","DEU","GERMANY" -"1353290816","1353290927","GB","GBR","UNITED KINGDOM" -"1353290928","1353290935","IE","IRL","IRELAND" -"1353290936","1353297151","GB","GBR","UNITED KINGDOM" -"1353297152","1353297183","IE","IRL","IRELAND" -"1353297184","1353298687","GB","GBR","UNITED KINGDOM" -"1353298688","1353298695","SE","SWE","SWEDEN" -"1353298696","1353298703","DE","DEU","GERMANY" -"1353298704","1353298711","SE","SWE","SWEDEN" -"1353298712","1353298719","GB","GBR","UNITED KINGDOM" -"1353298720","1353298751","DE","DEU","GERMANY" -"1353298752","1353298879","SE","SWE","SWEDEN" -"1353298880","1353298887","GB","GBR","UNITED KINGDOM" -"1353298888","1353299711","SE","SWE","SWEDEN" -"1353299712","1353299839","GB","GBR","UNITED KINGDOM" -"1353299840","1353299855","SE","SWE","SWEDEN" -"1353299856","1353299863","GB","GBR","UNITED KINGDOM" -"1353299864","1353300207","SE","SWE","SWEDEN" -"1353300208","1353300215","GB","GBR","UNITED KINGDOM" -"1353300216","1353300271","SE","SWE","SWEDEN" -"1353300272","1353300279","GB","GBR","UNITED KINGDOM" -"1353300280","1353300351","SE","SWE","SWEDEN" -"1353300352","1353300359","GB","GBR","UNITED KINGDOM" -"1353300360","1353300383","SE","SWE","SWEDEN" -"1353300384","1353300479","GB","GBR","UNITED KINGDOM" -"1353300480","1353300735","SE","SWE","SWEDEN" -"1353300736","1353301095","GB","GBR","UNITED KINGDOM" -"1353301096","1353301103","US","USA","UNITED STATES" -"1353301104","1353304879","GB","GBR","UNITED KINGDOM" -"1353304880","1353304895","ES","ESP","SPAIN" -"1353304896","1353305599","GB","GBR","UNITED KINGDOM" -"1353305600","1353305607","IE","IRL","IRELAND" -"1353305608","1353306111","GB","GBR","UNITED KINGDOM" -"1353306112","1353306623","ES","ESP","SPAIN" -"1353306624","1353306880","BE","BEL","BELGIUM" -"1353306881","1353308159","GB","GBR","UNITED KINGDOM" -"1353308160","1353309183","FR","FRA","FRANCE" -"1353309184","1353310463","GB","GBR","UNITED KINGDOM" -"1353310464","1353310599","ES","ESP","SPAIN" -"1353310600","1353310607","DE","DEU","GERMANY" -"1353310608","1353310719","ES","ESP","SPAIN" -"1353310720","1353311175","IT","ITA","ITALY" -"1353311176","1353311183","ES","ESP","SPAIN" -"1353311184","1353311231","IT","ITA","ITALY" -"1353311232","1353312255","GB","GBR","UNITED KINGDOM" -"1353312256","1353312767","CH","CHE","SWITZERLAND" -"1353312768","1353313191","IT","ITA","ITALY" -"1353313192","1353313199","GB","GBR","UNITED KINGDOM" -"1353313200","1353313279","IT","ITA","ITALY" -"1353313280","1353313535","IE","IRL","IRELAND" -"1353313536","1353314303","GB","GBR","UNITED KINGDOM" -"1353314304","1353314815","CH","CHE","SWITZERLAND" -"1353314816","1353315327","GB","GBR","UNITED KINGDOM" -"1353315328","1353315415","ES","ESP","SPAIN" -"1353315416","1353315423","FR","FRA","FRANCE" -"1353315424","1353316351","ES","ESP","SPAIN" -"1353316352","1353317375","GB","GBR","UNITED KINGDOM" -"1353317376","1353317631","FR","FRA","FRANCE" -"1353317632","1353318143","GB","GBR","UNITED KINGDOM" -"1353318144","1353318399","IE","IRL","IRELAND" -"1353318400","1353383935","SE","SWE","SWEDEN" -"1353383936","1353449471","DE","DEU","GERMANY" -"1353449472","1353515007","PT","PRT","PORTUGAL" -"1353515008","1353646079","ES","ESP","SPAIN" -"1353646080","1353842687","GB","GBR","UNITED KINGDOM" -"1353842688","1353956607","IL","ISR","ISRAEL" -"1353956608","1353956863","GB","GBR","UNITED KINGDOM" -"1353956864","1353973759","IL","ISR","ISRAEL" -"1353973760","1354235903","IT","ITA","ITALY" -"1354235904","1354301439","KW","KWT","KUWAIT" -"1354301440","1354366975","FR","FRA","FRANCE" -"1354366976","1354432511","FI","FIN","FINLAND" -"1354432512","1354498047","DE","DEU","GERMANY" -"1354498048","1354563583","CZ","CZE","CZECH REPUBLIC" -"1354563584","1354629119","GB","GBR","UNITED KINGDOM" -"1354629120","1354662143","DE","DEU","GERMANY" -"1354662144","1354662151","AT","AUT","AUSTRIA" -"1354662152","1354662463","DE","DEU","GERMANY" -"1354662464","1354662527","AT","AUT","AUSTRIA" -"1354662528","1354662591","ES","ESP","SPAIN" -"1354662592","1354663807","DE","DEU","GERMANY" -"1354663808","1354663808","AT","AUT","AUSTRIA" -"1354663809","1354664743","DE","DEU","GERMANY" -"1354664744","1354664751","IT","ITA","ITALY" -"1354664752","1354664759","DE","DEU","GERMANY" -"1354664760","1354664767","IT","ITA","ITALY" -"1354664768","1354665215","DE","DEU","GERMANY" -"1354665216","1354665247","ES","ESP","SPAIN" -"1354665248","1354665943","DE","DEU","GERMANY" -"1354665944","1354665951","IT","ITA","ITALY" -"1354665952","1354666639","DE","DEU","GERMANY" -"1354666640","1354666650","FI","FIN","FINLAND" -"1354666651","1354666687","DE","DEU","GERMANY" -"1354666688","1354666688","FI","FIN","FINLAND" -"1354666689","1354668031","DE","DEU","GERMANY" -"1354668032","1354668159","AT","AUT","AUSTRIA" -"1354668160","1354673919","DE","DEU","GERMANY" -"1354673920","1354674175","PL","POL","POLAND" -"1354674176","1354674719","DE","DEU","GERMANY" -"1354674720","1354674751","CH","CHE","SWITZERLAND" -"1354674752","1354674783","DK","DNK","DENMARK" -"1354674784","1354674815","DE","DEU","GERMANY" -"1354674816","1354674943","IT","ITA","ITALY" -"1354674944","1354675199","AE","ARE","UNITED ARAB EMIRATES" -"1354675200","1354675327","DE","DEU","GERMANY" -"1354675328","1354675359","DK","DNK","DENMARK" -"1354675360","1354676479","DE","DEU","GERMANY" -"1354676480","1354676767","AE","ARE","UNITED ARAB EMIRATES" -"1354676768","1354676783","DE","DEU","GERMANY" -"1354676784","1354676791","PL","POL","POLAND" -"1354676792","1354676991","DE","DEU","GERMANY" -"1354676992","1354677023","AE","ARE","UNITED ARAB EMIRATES" -"1354677024","1354677247","DE","DEU","GERMANY" -"1354677248","1354677279","AE","ARE","UNITED ARAB EMIRATES" -"1354677280","1354678015","DE","DEU","GERMANY" -"1354678016","1354678031","AE","ARE","UNITED ARAB EMIRATES" -"1354678032","1354678159","DE","DEU","GERMANY" -"1354678160","1354678163","PL","POL","POLAND" -"1354678164","1354678335","DE","DEU","GERMANY" -"1354678336","1354678343","RO","ROM","ROMANIA" -"1354678344","1354678559","DE","DEU","GERMANY" -"1354678560","1354678575","AE","ARE","UNITED ARAB EMIRATES" -"1354678576","1354678743","DE","DEU","GERMANY" -"1354678744","1354678751","CH","CHE","SWITZERLAND" -"1354678752","1354678759","IT","ITA","ITALY" -"1354678760","1354679295","DE","DEU","GERMANY" -"1354679296","1354679807","AE","ARE","UNITED ARAB EMIRATES" -"1354679808","1354679839","DE","DEU","GERMANY" -"1354679840","1354679871","DK","DNK","DENMARK" -"1354679872","1354680063","DE","DEU","GERMANY" -"1354680064","1354680079","AE","ARE","UNITED ARAB EMIRATES" -"1354680080","1354680175","DE","DEU","GERMANY" -"1354680176","1354680179","PL","POL","POLAND" -"1354680180","1354681247","DE","DEU","GERMANY" -"1354681248","1354681279","DK","DNK","DENMARK" -"1354681280","1354681471","DE","DEU","GERMANY" -"1354681472","1354681487","AE","ARE","UNITED ARAB EMIRATES" -"1354681488","1354681815","DE","DEU","GERMANY" -"1354681816","1354681823","CH","CHE","SWITZERLAND" -"1354681824","1354682111","DE","DEU","GERMANY" -"1354682112","1354682143","DK","DNK","DENMARK" -"1354682144","1354682175","CH","CHE","SWITZERLAND" -"1354682176","1354682287","DE","DEU","GERMANY" -"1354682288","1354682303","AE","ARE","UNITED ARAB EMIRATES" -"1354682304","1354682771","DE","DEU","GERMANY" -"1354682772","1354682775","RS","SRB","SERBIA" -"1354682776","1354682895","DE","DEU","GERMANY" -"1354682896","1354682911","AE","ARE","UNITED ARAB EMIRATES" -"1354682912","1354682939","DE","DEU","GERMANY" -"1354682940","1354682943","MC","MCO","MONACO" -"1354682944","1354683095","DE","DEU","GERMANY" -"1354683096","1354683103","IT","ITA","ITALY" -"1354683104","1354683391","DE","DEU","GERMANY" -"1354683392","1354683903","PL","POL","POLAND" -"1354683904","1354684415","DE","DEU","GERMANY" -"1354684416","1354684431","AE","ARE","UNITED ARAB EMIRATES" -"1354684432","1354684671","DE","DEU","GERMANY" -"1354684672","1354684927","AE","ARE","UNITED ARAB EMIRATES" -"1354684928","1354687023","DE","DEU","GERMANY" -"1354687024","1354687031","LU","LUX","LUXEMBOURG" -"1354687032","1354687359","DE","DEU","GERMANY" -"1354687360","1354687375","NZ","NZL","NEW ZEALAND" -"1354687376","1354687383","DE","DEU","GERMANY" -"1354687384","1354687391","NZ","NZL","NEW ZEALAND" -"1354687392","1354687399","DE","DEU","GERMANY" -"1354687400","1354687407","IT","ITA","ITALY" -"1354687408","1354687455","DE","DEU","GERMANY" -"1354687456","1354687487","IT","ITA","ITALY" -"1354687488","1354687759","DE","DEU","GERMANY" -"1354687760","1354687763","CH","CHE","SWITZERLAND" -"1354687764","1354688362","DE","DEU","GERMANY" -"1354688363","1354688363","CH","CHE","SWITZERLAND" -"1354688364","1354694655","DE","DEU","GERMANY" -"1354694656","1354760191","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1354760192","1355022335","GB","GBR","UNITED KINGDOM" -"1355022336","1355284479","DK","DNK","DENMARK" -"1355284480","1355415551","BE","BEL","BELGIUM" -"1355415552","1355546623","NO","NOR","NORWAY" -"1355546624","1355808767","IT","ITA","ITALY" -"1355808768","1356070911","DK","DNK","DENMARK" -"1356070912","1356201983","NO","NOR","NORWAY" -"1356201984","1356333055","FR","FRA","FRANCE" -"1356333056","1356464127","SE","SWE","SWEDEN" -"1356464128","1356595199","CH","CHE","SWITZERLAND" -"1356595200","1356857343","FI","FIN","FINLAND" -"1356857344","1356922879","ES","ESP","SPAIN" -"1356922880","1356988415","GB","GBR","UNITED KINGDOM" -"1356988416","1357053951","DE","DEU","GERMANY" -"1357053952","1357119487","AE","ARE","UNITED ARAB EMIRATES" -"1357119488","1357126807","DE","DEU","GERMANY" -"1357126808","1357126815","NL","NLD","NETHERLANDS" -"1357126816","1357127063","DE","DEU","GERMANY" -"1357127064","1357127079","NL","NLD","NETHERLANDS" -"1357127080","1357127471","DE","DEU","GERMANY" -"1357127472","1357127487","CH","CHE","SWITZERLAND" -"1357127488","1357177943","DE","DEU","GERMANY" -"1357177944","1357177951","NL","NLD","NETHERLANDS" -"1357177952","1357185023","DE","DEU","GERMANY" -"1357185024","1357250559","GB","GBR","UNITED KINGDOM" -"1357250560","1357316095","IL","ISR","ISRAEL" -"1357316608","1357317119","LU","LUX","LUXEMBOURG" -"1357317632","1357318143","LY","LBY","LIBYAN ARAB JAMAHIRIYA" -"1357318144","1357320191","QA","QAT","QATAR" -"1357320192","1357320703","FR","FRA","FRANCE" -"1357320704","1357320959","RO","ROM","ROMANIA" -"1357320960","1357320991","ES","ESP","SPAIN" -"1357320992","1357320999","GB","GBR","UNITED KINGDOM" -"1357321000","1357321007","FR","FRA","FRANCE" -"1357321008","1357321015","GB","GBR","UNITED KINGDOM" -"1357321016","1357321023","DK","DNK","DENMARK" -"1357321216","1357321471","GB","GBR","UNITED KINGDOM" -"1357321472","1357321503","ES","ESP","SPAIN" -"1357321728","1357321983","CY","CYP","CYPRUS" -"1357321984","1357322239","SO","SOM","SOMALIA" -"1357322240","1357322751","DE","DEU","GERMANY" -"1357322752","1357323263","BH","BHR","BAHRAIN" -"1357323264","1357323519","ES","ESP","SPAIN" -"1357323520","1357323775","GB","GBR","UNITED KINGDOM" -"1357323776","1357324287","DE","DEU","GERMANY" -"1357324288","1357326335","GB","GBR","UNITED KINGDOM" -"1357326336","1357326591","NL","NLD","NETHERLANDS" -"1357326592","1357326847","DE","DEU","GERMANY" -"1357326848","1357327359","GB","GBR","UNITED KINGDOM" -"1357327360","1357328383","DE","DEU","GERMANY" -"1357330432","1357330943","DE","DEU","GERMANY" -"1357330944","1357331455","ES","ESP","SPAIN" -"1357332480","1357333247","DE","DEU","GERMANY" -"1357333248","1357333503","GB","GBR","UNITED KINGDOM" -"1357333504","1357333759","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1357333824","1357333855","GB","GBR","UNITED KINGDOM" -"1357333856","1357334015","ES","ESP","SPAIN" -"1357334016","1357334271","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"1357334272","1357334527","CA","CAN","CANADA" -"1357334528","1357335039","FR","FRA","FRANCE" -"1357335040","1357335295","LB","LBN","LEBANON" -"1357335296","1357335551","FR","FRA","FRANCE" -"1357335552","1357335807","GB","GBR","UNITED KINGDOM" -"1357335808","1357336063","KE","KEN","KENYA" -"1357336064","1357336319","GB","GBR","UNITED KINGDOM" -"1357336320","1357336575","FR","FRA","FRANCE" -"1357336576","1357337599","NL","NLD","NETHERLANDS" -"1357337600","1357337855","ES","ESP","SPAIN" -"1357338112","1357338879","FR","FRA","FRANCE" -"1357338880","1357339391","NO","NOR","NORWAY" -"1357339392","1357339647","AT","AUT","AUSTRIA" -"1357339648","1357339903","DZ","DZA","ALGERIA" -"1357340416","1357340671","LB","LBN","LEBANON" -"1357340672","1357342719","GB","GBR","UNITED KINGDOM" -"1357348864","1357349119","DE","DEU","GERMANY" -"1357349120","1357349375","LU","LUX","LUXEMBOURG" -"1357349888","1357350399","ES","ESP","SPAIN" -"1357350400","1357350911","QA","QAT","QATAR" -"1357350912","1357351167","GB","GBR","UNITED KINGDOM" -"1357351168","1357351423","PL","POL","POLAND" -"1357351424","1357351679","DE","DEU","GERMANY" -"1357351680","1357351935","PL","POL","POLAND" -"1357351936","1357352959","GB","GBR","UNITED KINGDOM" -"1357356032","1357356543","ES","ESP","SPAIN" -"1357357056","1357357567","ES","ESP","SPAIN" -"1357357568","1357358079","DE","DEU","GERMANY" -"1357358080","1357358335","ES","ESP","SPAIN" -"1357358336","1357358591","FR","FRA","FRANCE" -"1357358592","1357358847","DE","DEU","GERMANY" -"1357358848","1357359103","PL","POL","POLAND" -"1357359104","1357359615","ES","ESP","SPAIN" -"1357359872","1357359999","ES","ESP","SPAIN" -"1357360128","1357360255","GB","GBR","UNITED KINGDOM" -"1357360384","1357360639","ES","ESP","SPAIN" -"1357360640","1357360895","GB","GBR","UNITED KINGDOM" -"1357360896","1357361151","DE","DEU","GERMANY" -"1357363200","1357364223","QA","QAT","QATAR" -"1357364224","1357365247","ES","ESP","SPAIN" -"1357365248","1357365759","DZ","DZA","ALGERIA" -"1357365760","1357365791","ES","ESP","SPAIN" -"1357365792","1357365823","BH","BHR","BAHRAIN" -"1357365824","1357365887","GB","GBR","UNITED KINGDOM" -"1357365888","1357366015","DE","DEU","GERMANY" -"1357366016","1357366271","KM","COM","COMOROS" -"1357366272","1357366527","FR","FRA","FRANCE" -"1357366528","1357366591","BE","BEL","BELGIUM" -"1357366592","1357366655","FR","FRA","FRANCE" -"1357366656","1357366719","PT","PRT","PORTUGAL" -"1357366784","1357366799","MD","MDA","REPUBLIC OF MOLDOVA" -"1357366800","1357366815","ES","ESP","SPAIN" -"1357366816","1357366847","FR","FRA","FRANCE" -"1357366848","1357366863","GB","GBR","UNITED KINGDOM" -"1357366864","1357366879","ES","ESP","SPAIN" -"1357366880","1357366911","GB","GBR","UNITED KINGDOM" -"1357367040","1357367295","GB","GBR","UNITED KINGDOM" -"1357367808","1357368063","GB","GBR","UNITED KINGDOM" -"1357368064","1357368831","GN","GIN","GUINEA" -"1357368832","1357369343","ES","ESP","SPAIN" -"1357369344","1357369599","PL","POL","POLAND" -"1357369600","1357369855","GB","GBR","UNITED KINGDOM" -"1357369856","1357370111","KE","KEN","KENYA" -"1357370112","1357370367","DE","DEU","GERMANY" -"1357370880","1357371391","LY","LBY","LIBYAN ARAB JAMAHIRIYA" -"1357371904","1357372159","RU","RUS","RUSSIAN FEDERATION" -"1357372160","1357372415","GB","GBR","UNITED KINGDOM" -"1357372928","1357373183","AM","ARM","ARMENIA" -"1357373184","1357373439","GB","GBR","UNITED KINGDOM" -"1357381632","1357391615","NO","NOR","NORWAY" -"1357391616","1357391871","SE","SWE","SWEDEN" -"1357391872","1357414399","NO","NOR","NORWAY" -"1357414400","1357447167","LV","LVA","LATVIA" -"1357447168","1357479935","IE","IRL","IRELAND" -"1357479936","1357512703","LV","LVA","LATVIA" -"1357512704","1357545471","RU","RUS","RUSSIAN FEDERATION" -"1357545472","1357578239","GB","GBR","UNITED KINGDOM" -"1357578240","1357611007","EE","EST","ESTONIA" -"1357611008","1357643775","GB","GBR","UNITED KINGDOM" -"1357643776","1357676543","FR","FRA","FRANCE" -"1357676544","1357709311","BE","BEL","BELGIUM" -"1357709312","1357742079","RU","RUS","RUSSIAN FEDERATION" -"1357742080","1357759183","DE","DEU","GERMANY" -"1357759184","1357759191","AT","AUT","AUSTRIA" -"1357759192","1357765823","DE","DEU","GERMANY" -"1357765824","1357765831","AT","AUT","AUSTRIA" -"1357765832","1357773111","DE","DEU","GERMANY" -"1357773112","1357773119","PL","POL","POLAND" -"1357773120","1357774847","DE","DEU","GERMANY" -"1357774848","1357791231","GB","GBR","UNITED KINGDOM" -"1357791232","1357807615","PL","POL","POLAND" -"1357807616","1357840383","CH","CHE","SWITZERLAND" -"1357840384","1357867735","NO","NOR","NORWAY" -"1357867736","1357867743","SE","SWE","SWEDEN" -"1357867744","1357873151","NO","NOR","NORWAY" -"1357873152","1357875199","DE","DEU","GERMANY" -"1357875200","1357875215","AT","AUT","AUSTRIA" -"1357875216","1357875247","DE","DEU","GERMANY" -"1357875248","1357875263","US","USA","UNITED STATES" -"1357875264","1357875279","AT","AUT","AUSTRIA" -"1357875280","1357875423","DE","DEU","GERMANY" -"1357875424","1357875439","GB","GBR","UNITED KINGDOM" -"1357875440","1357875711","DE","DEU","GERMANY" -"1357875712","1357875967","PL","POL","POLAND" -"1357875968","1357876143","DE","DEU","GERMANY" -"1357876152","1357876191","DE","DEU","GERMANY" -"1357876208","1357876215","DE","DEU","GERMANY" -"1357876288","1357876303","PL","POL","POLAND" -"1357876336","1357876339","PL","POL","POLAND" -"1357876340","1357876343","RU","RUS","RUSSIAN FEDERATION" -"1357876392","1357876399","PL","POL","POLAND" -"1357876416","1357876479","PL","POL","POLAND" -"1357876480","1357876495","SE","SWE","SWEDEN" -"1357876544","1357876863","DE","DEU","GERMANY" -"1357876864","1357876927","SE","SWE","SWEDEN" -"1357876928","1357877759","DE","DEU","GERMANY" -"1357878272","1357879807","DE","DEU","GERMANY" -"1357879808","1357879871","RU","RUS","RUSSIAN FEDERATION" -"1357879872","1357879935","DE","DEU","GERMANY" -"1357879936","1357880063","GB","GBR","UNITED KINGDOM" -"1357880064","1357880319","NL","NLD","NETHERLANDS" -"1357880320","1357880447","DE","DEU","GERMANY" -"1357880448","1357880511","CH","CHE","SWITZERLAND" -"1357880512","1357880543","DE","DEU","GERMANY" -"1357880544","1357880559","AT","AUT","AUSTRIA" -"1357880560","1357880831","DE","DEU","GERMANY" -"1357880832","1357881087","AT","AUT","AUSTRIA" -"1357881088","1357881343","DE","DEU","GERMANY" -"1357881344","1357883391","FR","FRA","FRANCE" -"1357883392","1357883407","ES","ESP","SPAIN" -"1357883424","1357883519","FR","FRA","FRANCE" -"1357883536","1357883551","FR","FRA","FRANCE" -"1357883584","1357883719","FR","FRA","FRANCE" -"1357883760","1357883951","FR","FRA","FRANCE" -"1357884000","1357884031","FR","FRA","FRANCE" -"1357884160","1357884423","FR","FRA","FRANCE" -"1357884440","1357884447","FR","FRA","FRANCE" -"1357884512","1357884935","FR","FRA","FRANCE" -"1357884992","1357885055","FR","FRA","FRANCE" -"1357885120","1357885183","FR","FRA","FRANCE" -"1357885200","1357885215","ES","ESP","SPAIN" -"1357885248","1357885439","DE","DEU","GERMANY" -"1357885440","1357885695","FR","FRA","FRANCE" -"1357885696","1357885951","DE","DEU","GERMANY" -"1357885952","1357886463","FR","FRA","FRANCE" -"1357886464","1357887487","US","USA","UNITED STATES" -"1357887488","1357888511","FR","FRA","FRANCE" -"1357888768","1357889023","DE","DEU","GERMANY" -"1357889536","1357890815","PL","POL","POLAND" -"1357890816","1357890895","NL","NLD","NETHERLANDS" -"1357890912","1357890943","DE","DEU","GERMANY" -"1357890944","1357891407","NL","NLD","NETHERLANDS" -"1357891408","1357891423","CA","CAN","CANADA" -"1357891424","1357891455","NL","NLD","NETHERLANDS" -"1357891456","1357891583","SE","SWE","SWEDEN" -"1357891584","1357891679","NL","NLD","NETHERLANDS" -"1357891712","1357891839","NL","NLD","NETHERLANDS" -"1357891840","1357892095","GB","GBR","UNITED KINGDOM" -"1357892096","1357893119","NL","NLD","NETHERLANDS" -"1357893120","1357893375","SE","SWE","SWEDEN" -"1357893408","1357893439","SE","SWE","SWEDEN" -"1357893504","1357893631","DE","DEU","GERMANY" -"1357897856","1357898495","DE","DEU","GERMANY" -"1357898752","1357899015","DE","DEU","GERMANY" -"1357899024","1357899055","DE","DEU","GERMANY" -"1357899072","1357899199","DE","DEU","GERMANY" -"1357899328","1357899391","PL","POL","POLAND" -"1357899552","1357899567","AT","AUT","AUSTRIA" -"1357899776","1357900287","DE","DEU","GERMANY" -"1357900352","1357900415","CH","CHE","SWITZERLAND" -"1357900416","1357900543","SE","SWE","SWEDEN" -"1357900544","1357900799","NL","NLD","NETHERLANDS" -"1357900800","1357901823","DE","DEU","GERMANY" -"1357901824","1357902335","ES","ESP","SPAIN" -"1357902336","1357902847","PL","POL","POLAND" -"1357902848","1357903359","GB","GBR","UNITED KINGDOM" -"1357903360","1357903615","DE","DEU","GERMANY" -"1357903616","1357903871","SE","SWE","SWEDEN" -"1357904384","1357904895","DE","DEU","GERMANY" -"1357905920","1357910015","LT","LTU","LITHUANIA" -"1357910016","1357914111","GR","GRC","GREECE" -"1357914112","1357922303","RU","RUS","RUSSIAN FEDERATION" -"1357922304","1357926399","SA","SAU","SAUDI ARABIA" -"1357926400","1357930495","GB","GBR","UNITED KINGDOM" -"1357930496","1357942783","RU","RUS","RUSSIAN FEDERATION" -"1357942784","1357943039","RS","SRB","SERBIA" -"1357943040","1357946879","CS","SCG","SERBIA AND MONTENEGRO" -"1357946880","1357955071","PL","POL","POLAND" -"1357959168","1357963263","RU","RUS","RUSSIAN FEDERATION" -"1357963264","1357964199","AT","AUT","AUSTRIA" -"1357964200","1357964207","DE","DEU","GERMANY" -"1357964208","1357967359","AT","AUT","AUSTRIA" -"1357967360","1357971455","RU","RUS","RUSSIAN FEDERATION" -"1357971456","1357975551","KZ","KAZ","KAZAKHSTAN" -"1357975552","1357979647","AT","AUT","AUSTRIA" -"1357979648","1357983743","KZ","KAZ","KAZAKHSTAN" -"1357983744","1357987839","RU","RUS","RUSSIAN FEDERATION" -"1357987840","1357988495","GB","GBR","UNITED KINGDOM" -"1357988496","1357988543","DE","DEU","GERMANY" -"1357988544","1357988551","NL","NLD","NETHERLANDS" -"1357988552","1357988559","DE","DEU","GERMANY" -"1357988560","1357988567","GB","GBR","UNITED KINGDOM" -"1357988568","1357988607","DE","DEU","GERMANY" -"1357988608","1357988751","GB","GBR","UNITED KINGDOM" -"1357988752","1357988775","DE","DEU","GERMANY" -"1357988776","1357988783","GB","GBR","UNITED KINGDOM" -"1357988784","1357988863","DE","DEU","GERMANY" -"1357988864","1357989647","GB","GBR","UNITED KINGDOM" -"1357989648","1357989655","FR","FRA","FRANCE" -"1357989656","1357989663","GB","GBR","UNITED KINGDOM" -"1357989664","1357989695","FR","FRA","FRANCE" -"1357989696","1357989711","GB","GBR","UNITED KINGDOM" -"1357989712","1357989743","FR","FRA","FRANCE" -"1357989744","1357989759","GB","GBR","UNITED KINGDOM" -"1357989760","1357989783","FR","FRA","FRANCE" -"1357989784","1357989791","GB","GBR","UNITED KINGDOM" -"1357989792","1357989807","FR","FRA","FRANCE" -"1357989808","1357989823","GB","GBR","UNITED KINGDOM" -"1357989824","1357989839","FR","FRA","FRANCE" -"1357989840","1357989847","GB","GBR","UNITED KINGDOM" -"1357989848","1357989887","FR","FRA","FRANCE" -"1357989888","1357991679","GB","GBR","UNITED KINGDOM" -"1357991680","1357991935","DE","DEU","GERMANY" -"1357991936","1357996031","NO","NOR","NORWAY" -"1357996032","1358000127","CH","CHE","SWITZERLAND" -"1358000128","1358004223","LI","LIE","LIECHTENSTEIN" -"1358004224","1358008319","PL","POL","POLAND" -"1358008320","1358012415","BH","BHR","BAHRAIN" -"1358012416","1358016511","IT","ITA","ITALY" -"1358016512","1358020607","GE","GEO","GEORGIA" -"1358020608","1358024703","DE","DEU","GERMANY" -"1358024704","1358028799","EE","EST","ESTONIA" -"1358028800","1358032895","IT","ITA","ITALY" -"1358032896","1358036991","GE","GEO","GEORGIA" -"1358036992","1358041087","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1358041088","1358045183","FI","FIN","FINLAND" -"1358045184","1358049279","SK","SVK","SLOVAKIA" -"1358049280","1358061567","RU","RUS","RUSSIAN FEDERATION" -"1358061568","1358065663","UA","UKR","UKRAINE" -"1358065664","1358069759","BA","BIH","BOSNIA AND HERZEGOVINA" -"1358069760","1358074719","DE","DEU","GERMANY" -"1358074720","1358074751","CH","CHE","SWITZERLAND" -"1358074752","1358082815","DE","DEU","GERMANY" -"1358082816","1358083071","CH","CHE","SWITZERLAND" -"1358083072","1358086143","DE","DEU","GERMANY" -"1358086144","1358090239","CH","CHE","SWITZERLAND" -"1358090240","1358094335","KZ","KAZ","KAZAKHSTAN" -"1358094336","1358102527","NL","NLD","NETHERLANDS" -"1358102528","1358106623","RU","RUS","RUSSIAN FEDERATION" -"1358106624","1358110719","LT","LTU","LITHUANIA" -"1358110720","1358116895","DE","DEU","GERMANY" -"1358116896","1358116911","IT","ITA","ITALY" -"1358116912","1358118911","DE","DEU","GERMANY" -"1358118912","1358123007","RU","RUS","RUSSIAN FEDERATION" -"1358123008","1358127103","PT","PRT","PORTUGAL" -"1358127104","1358131199","CZ","CZE","CZECH REPUBLIC" -"1358131200","1358135295","DK","DNK","DENMARK" -"1358139392","1358143487","UA","UKR","UKRAINE" -"1358143488","1358144159","AT","AUT","AUSTRIA" -"1358144160","1358144191","MT","MLT","MALTA" -"1358144192","1358147519","AT","AUT","AUSTRIA" -"1358147520","1358147583","MT","MLT","MALTA" -"1358147584","1358151679","GB","GBR","UNITED KINGDOM" -"1358151680","1358155775","DE","DEU","GERMANY" -"1358155776","1358159871","CH","CHE","SWITZERLAND" -"1358159872","1358163967","ES","ESP","SPAIN" -"1358163968","1358168063","FR","FRA","FRANCE" -"1358168064","1358172159","GB","GBR","UNITED KINGDOM" -"1358172160","1358173183","CY","CYP","CYPRUS" -"1358173184","1358173951","GR","GRC","GREECE" -"1358173952","1358174207","DE","DEU","GERMANY" -"1358174208","1358176255","GR","GRC","GREECE" -"1358176256","1358180351","RU","RUS","RUSSIAN FEDERATION" -"1358180352","1358184447","ES","ESP","SPAIN" -"1358184448","1358192639","SE","SWE","SWEDEN" -"1358192640","1358196735","HU","HUN","HUNGARY" -"1358196736","1358200831","IT","ITA","ITALY" -"1358200832","1358209023","PL","POL","POLAND" -"1358209024","1358213119","IL","ISR","ISRAEL" -"1358213120","1358217215","GB","GBR","UNITED KINGDOM" -"1358217216","1358221311","SE","SWE","SWEDEN" -"1358221312","1358223359","DE","DEU","GERMANY" -"1358223360","1358223631","GB","GBR","UNITED KINGDOM" -"1358223632","1358223727","DE","DEU","GERMANY" -"1358223728","1358223775","GB","GBR","UNITED KINGDOM" -"1358223776","1358223843","DE","DEU","GERMANY" -"1358223844","1358223871","GB","GBR","UNITED KINGDOM" -"1358223872","1358223911","DE","DEU","GERMANY" -"1358223912","1358223927","NL","NLD","NETHERLANDS" -"1358223928","1358223967","DE","DEU","GERMANY" -"1358223968","1358224063","NL","NLD","NETHERLANDS" -"1358224064","1358224511","DE","DEU","GERMANY" -"1358224512","1358224519","BE","BEL","BELGIUM" -"1358224520","1358224611","DE","DEU","GERMANY" -"1358224612","1358224651","BE","BEL","BELGIUM" -"1358224652","1358224655","DE","DEU","GERMANY" -"1358224656","1358224719","BE","BEL","BELGIUM" -"1358224720","1358224927","DE","DEU","GERMANY" -"1358224928","1358225015","IT","ITA","ITALY" -"1358225016","1358225023","DE","DEU","GERMANY" -"1358225024","1358225079","IT","ITA","ITALY" -"1358225080","1358225083","DE","DEU","GERMANY" -"1358225084","1358225103","IT","ITA","ITALY" -"1358225104","1358225407","DE","DEU","GERMANY" -"1358225408","1358229503","RU","RUS","RUSSIAN FEDERATION" -"1358229504","1358229631","DE","DEU","GERMANY" -"1358229632","1358229639","LU","LUX","LUXEMBOURG" -"1358229640","1358230111","DE","DEU","GERMANY" -"1358230112","1358230115","AT","AUT","AUSTRIA" -"1358230116","1358230383","DE","DEU","GERMANY" -"1358230384","1358230391","TR","TUR","TURKEY" -"1358230392","1358230399","CH","CHE","SWITZERLAND" -"1358230400","1358232863","DE","DEU","GERMANY" -"1358232864","1358232879","IT","ITA","ITALY" -"1358232880","1358233599","DE","DEU","GERMANY" -"1358233600","1358237695","ES","ESP","SPAIN" -"1358237696","1358241791","FR","FRA","FRANCE" -"1358241792","1358241807","BE","BEL","BELGIUM" -"1358241808","1358241951","FR","FRA","FRANCE" -"1358241952","1358241983","BE","BEL","BELGIUM" -"1358241984","1358242591","FR","FRA","FRANCE" -"1358242592","1358242623","BE","BEL","BELGIUM" -"1358242624","1358245695","FR","FRA","FRANCE" -"1358245696","1358245727","BE","BEL","BELGIUM" -"1358245728","1358249215","FR","FRA","FRANCE" -"1358249216","1358249471","IT","ITA","ITALY" -"1358249472","1358249983","FR","FRA","FRANCE" -"1358249984","1358251815","DE","DEU","GERMANY" -"1358251816","1358251823","NL","NLD","NETHERLANDS" -"1358251824","1358254079","DE","DEU","GERMANY" -"1358254080","1358258175","MD","MDA","REPUBLIC OF MOLDOVA" -"1358258176","1358262271","GB","GBR","UNITED KINGDOM" -"1358262272","1358266367","UA","UKR","UKRAINE" -"1358266368","1358274559","DE","DEU","GERMANY" -"1358274560","1358278655","GR","GRC","GREECE" -"1358278656","1358282751","PL","POL","POLAND" -"1358282752","1358286847","AT","AUT","AUSTRIA" -"1358286848","1358290943","MT","MLT","MALTA" -"1358290944","1358295039","SE","SWE","SWEDEN" -"1358295040","1358299135","RU","RUS","RUSSIAN FEDERATION" -"1358303232","1358307327","RU","RUS","RUSSIAN FEDERATION" -"1358307328","1358313215","DE","DEU","GERMANY" -"1358313216","1358313727","ES","ESP","SPAIN" -"1358313728","1358315519","DE","DEU","GERMANY" -"1358315520","1358323711","RU","RUS","RUSSIAN FEDERATION" -"1358323712","1358327807","LU","LUX","LUXEMBOURG" -"1358327808","1358328671","DE","DEU","GERMANY" -"1358328672","1358328727","AT","AUT","AUSTRIA" -"1358328728","1358331903","DE","DEU","GERMANY" -"1358331904","1358335999","IL","ISR","ISRAEL" -"1358336000","1358344191","FI","FIN","FINLAND" -"1358344192","1358352383","NL","NLD","NETHERLANDS" -"1358352384","1358356479","RU","RUS","RUSSIAN FEDERATION" -"1358356480","1358360575","SI","SVN","SLOVENIA" -"1358360576","1358364671","RU","RUS","RUSSIAN FEDERATION" -"1358364672","1358372863","GB","GBR","UNITED KINGDOM" -"1358372864","1358376959","RU","RUS","RUSSIAN FEDERATION" -"1358376960","1358381055","GB","GBR","UNITED KINGDOM" -"1358381056","1358383311","IT","ITA","ITALY" -"1358383312","1358383327","FR","FRA","FRANCE" -"1358383328","1358384127","IT","ITA","ITALY" -"1358384128","1358384143","FR","FRA","FRANCE" -"1358384144","1358384191","IT","ITA","ITALY" -"1358384192","1358384199","FR","FRA","FRANCE" -"1358384200","1358385151","IT","ITA","ITALY" -"1358385152","1358389247","GB","GBR","UNITED KINGDOM" -"1358389248","1358397439","RU","RUS","RUSSIAN FEDERATION" -"1358397440","1358397951","GB","GBR","UNITED KINGDOM" -"1358397952","1358398463","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"1358398464","1358399487","GB","GBR","UNITED KINGDOM" -"1358399488","1358399999","NG","NGA","NIGERIA" -"1358400000","1358400007","PK","PAK","PAKISTAN" -"1358400008","1358400015","GB","GBR","UNITED KINGDOM" -"1358400016","1358400071","IN","IND","INDIA" -"1358400072","1358400255","GB","GBR","UNITED KINGDOM" -"1358400256","1358400511","AF","AFG","AFGHANISTAN" -"1358400512","1358400519","GA","GAB","GABON" -"1358400520","1358400527","GB","GBR","UNITED KINGDOM" -"1358400528","1358400535","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"1358400536","1358400543","GB","GBR","UNITED KINGDOM" -"1358400544","1358400551","GA","GAB","GABON" -"1358400552","1358400575","GB","GBR","UNITED KINGDOM" -"1358400576","1358400591","KE","KEN","KENYA" -"1358400592","1358400639","GB","GBR","UNITED KINGDOM" -"1358400640","1358400775","KE","KEN","KENYA" -"1358400776","1358400783","GB","GBR","UNITED KINGDOM" -"1358400784","1358400799","KE","KEN","KENYA" -"1358400800","1358400863","NG","NGA","NIGERIA" -"1358400864","1358400895","GA","GAB","GABON" -"1358400896","1358401279","NG","NGA","NIGERIA" -"1358401280","1358401391","KE","KEN","KENYA" -"1358401392","1358401407","GB","GBR","UNITED KINGDOM" -"1358401408","1358401439","KE","KEN","KENYA" -"1358401440","1358402175","GB","GBR","UNITED KINGDOM" -"1358402176","1358402303","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"1358402304","1358402319","GB","GBR","UNITED KINGDOM" -"1358402320","1358402343","NG","NGA","NIGERIA" -"1358402344","1358402351","KE","KEN","KENYA" -"1358402352","1358402359","GB","GBR","UNITED KINGDOM" -"1358402360","1358402363","ID","IDN","INDONESIA" -"1358402364","1358402367","GB","GBR","UNITED KINGDOM" -"1358402368","1358402399","NG","NGA","NIGERIA" -"1358402400","1358402415","CG","COG","CONGO" -"1358402416","1358402419","ID","IDN","INDONESIA" -"1358402420","1358402447","GB","GBR","UNITED KINGDOM" -"1358402448","1358402463","KE","KEN","KENYA" -"1358402464","1358402495","GB","GBR","UNITED KINGDOM" -"1358402496","1358402543","KE","KEN","KENYA" -"1358402544","1358403103","GB","GBR","UNITED KINGDOM" -"1358403104","1358403135","ID","IDN","INDONESIA" -"1358403136","1358403151","GB","GBR","UNITED KINGDOM" -"1358403152","1358403167","ID","IDN","INDONESIA" -"1358403168","1358403183","GB","GBR","UNITED KINGDOM" -"1358403184","1358403273","ID","IDN","INDONESIA" -"1358403274","1358403327","GB","GBR","UNITED KINGDOM" -"1358403328","1358403583","NG","NGA","NIGERIA" -"1358403584","1358403591","PK","PAK","PAKISTAN" -"1358403592","1358403631","GB","GBR","UNITED KINGDOM" -"1358403632","1358403679","PK","PAK","PAKISTAN" -"1358403680","1358403687","GB","GBR","UNITED KINGDOM" -"1358403688","1358403711","PK","PAK","PAKISTAN" -"1358403712","1358403839","GB","GBR","UNITED KINGDOM" -"1358403840","1358404095","NG","NGA","NIGERIA" -"1358404096","1358404607","GB","GBR","UNITED KINGDOM" -"1358404608","1358404611","NG","NGA","NIGERIA" -"1358404612","1358404615","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"1358404616","1358404623","NG","NGA","NIGERIA" -"1358404624","1358404655","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"1358404656","1358404671","NG","NGA","NIGERIA" -"1358404672","1358404695","GB","GBR","UNITED KINGDOM" -"1358404696","1358404703","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"1358404704","1358404735","GB","GBR","UNITED KINGDOM" -"1358404736","1358404751","NG","NGA","NIGERIA" -"1358404752","1358404767","GB","GBR","UNITED KINGDOM" -"1358404768","1358404783","NG","NGA","NIGERIA" -"1358404784","1358404863","GB","GBR","UNITED KINGDOM" -"1358404864","1358405119","NG","NGA","NIGERIA" -"1358405120","1358405375","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"1358405376","1358405631","NG","NGA","NIGERIA" -"1358405632","1358409727","NL","NLD","NETHERLANDS" -"1358409728","1358413823","RU","RUS","RUSSIAN FEDERATION" -"1358413824","1358422015","NL","NLD","NETHERLANDS" -"1358422016","1358426111","FR","FRA","FRANCE" -"1358426112","1358430207","FI","FIN","FINLAND" -"1358434304","1358438399","IS","ISL","ICELAND" -"1358438400","1358442495","NL","NLD","NETHERLANDS" -"1358442496","1358446591","RU","RUS","RUSSIAN FEDERATION" -"1358450688","1358454783","RU","RUS","RUSSIAN FEDERATION" -"1358454784","1358462975","FI","FIN","FINLAND" -"1358462976","1358467071","SE","SWE","SWEDEN" -"1358467072","1358471167","RU","RUS","RUSSIAN FEDERATION" -"1358471168","1358475263","FI","FIN","FINLAND" -"1358475264","1358479359","GB","GBR","UNITED KINGDOM" -"1358479360","1358483455","LI","LIE","LIECHTENSTEIN" -"1358483456","1358487551","FR","FRA","FRANCE" -"1358487552","1358491647","SE","SWE","SWEDEN" -"1358491648","1358495743","FI","FIN","FINLAND" -"1358495744","1358499839","PL","POL","POLAND" -"1358499840","1358503935","KZ","KAZ","KAZAKHSTAN" -"1358503936","1358508031","IT","ITA","ITALY" -"1358508032","1358512127","GB","GBR","UNITED KINGDOM" -"1358516224","1358520319","BY","BLR","BELARUS" -"1358520320","1358524415","GB","GBR","UNITED KINGDOM" -"1358524416","1358528511","DE","DEU","GERMANY" -"1358528512","1358536703","RU","RUS","RUSSIAN FEDERATION" -"1358536704","1358540799","HU","HUN","HUNGARY" -"1358540800","1358544895","RU","RUS","RUSSIAN FEDERATION" -"1358544896","1358548991","LV","LVA","LATVIA" -"1358548992","1358553087","JO","JOR","JORDAN" -"1358553088","1358557183","UA","UKR","UKRAINE" -"1358557184","1358559503","IE","IRL","IRELAND" -"1358559504","1358559519","GB","GBR","UNITED KINGDOM" -"1358559520","1358561279","IE","IRL","IRELAND" -"1358561280","1358569471","CZ","CZE","CZECH REPUBLIC" -"1358573568","1358577663","LV","LVA","LATVIA" -"1358577664","1358585855","RU","RUS","RUSSIAN FEDERATION" -"1358585856","1358589951","GB","GBR","UNITED KINGDOM" -"1358589952","1358594047","EE","EST","ESTONIA" -"1358594048","1358598143","DE","DEU","GERMANY" -"1358598144","1358602239","IL","ISR","ISRAEL" -"1358602240","1358622719","RU","RUS","RUSSIAN FEDERATION" -"1358622720","1358626815","SK","SVK","SLOVAKIA" -"1358626816","1358630911","GB","GBR","UNITED KINGDOM" -"1358630912","1358634495","US","USA","UNITED STATES" -"1358634496","1358635007","GB","GBR","UNITED KINGDOM" -"1358635008","1358639103","TR","TUR","TURKEY" -"1358639104","1358643199","RU","RUS","RUSSIAN FEDERATION" -"1358643200","1358647295","ES","ESP","SPAIN" -"1358647296","1358651391","DE","DEU","GERMANY" -"1358651392","1358655487","FR","FRA","FRANCE" -"1358655488","1358667775","RU","RUS","RUSSIAN FEDERATION" -"1358667776","1358668067","PT","PRT","PORTUGAL" -"1358668068","1358668071","GB","GBR","UNITED KINGDOM" -"1358668072","1358668231","PT","PRT","PORTUGAL" -"1358668232","1358668239","GB","GBR","UNITED KINGDOM" -"1358668240","1358668263","PT","PRT","PORTUGAL" -"1358668264","1358668279","GB","GBR","UNITED KINGDOM" -"1358668280","1358668287","PT","PRT","PORTUGAL" -"1358668288","1358668351","GB","GBR","UNITED KINGDOM" -"1358668352","1358668359","PT","PRT","PORTUGAL" -"1358668360","1358668367","GB","GBR","UNITED KINGDOM" -"1358668368","1358668463","PT","PRT","PORTUGAL" -"1358668464","1358668479","ES","ESP","SPAIN" -"1358668480","1358668487","PT","PRT","PORTUGAL" -"1358668488","1358668495","GB","GBR","UNITED KINGDOM" -"1358668496","1358668551","PT","PRT","PORTUGAL" -"1358668552","1358668575","GB","GBR","UNITED KINGDOM" -"1358668576","1358668799","PT","PRT","PORTUGAL" -"1358668800","1358668807","GB","GBR","UNITED KINGDOM" -"1358668808","1358668927","PT","PRT","PORTUGAL" -"1358668928","1358668959","ES","ESP","SPAIN" -"1358668960","1358668983","PT","PRT","PORTUGAL" -"1358668984","1358668991","GB","GBR","UNITED KINGDOM" -"1358668992","1358669351","PT","PRT","PORTUGAL" -"1358669352","1358669359","GB","GBR","UNITED KINGDOM" -"1358669360","1358669423","PT","PRT","PORTUGAL" -"1358669424","1358669439","GB","GBR","UNITED KINGDOM" -"1358669440","1358669503","PT","PRT","PORTUGAL" -"1358669504","1358669519","GB","GBR","UNITED KINGDOM" -"1358669520","1358669543","PT","PRT","PORTUGAL" -"1358669544","1358669551","GB","GBR","UNITED KINGDOM" -"1358669552","1358670015","PT","PRT","PORTUGAL" -"1358670016","1358670023","GB","GBR","UNITED KINGDOM" -"1358670024","1358670111","PT","PRT","PORTUGAL" -"1358670112","1358670335","GB","GBR","UNITED KINGDOM" -"1358670336","1358671415","PT","PRT","PORTUGAL" -"1358671416","1358671439","GB","GBR","UNITED KINGDOM" -"1358671440","1358671871","PT","PRT","PORTUGAL" -"1358671872","1358675967","GB","GBR","UNITED KINGDOM" -"1358675968","1358676735","SE","SWE","SWEDEN" -"1358676736","1358677759","DK","DNK","DENMARK" -"1358677760","1358679295","SE","SWE","SWEDEN" -"1358679296","1358679807","DK","DNK","DENMARK" -"1358679808","1358680063","SE","SWE","SWEDEN" -"1358680064","1358688255","RU","RUS","RUSSIAN FEDERATION" -"1358688256","1358692351","CZ","CZE","CZECH REPUBLIC" -"1358692352","1358696447","PL","POL","POLAND" -"1358696448","1358700543","RU","RUS","RUSSIAN FEDERATION" -"1358700544","1358704639","AT","AUT","AUSTRIA" -"1358704640","1358708735","HU","HUN","HUNGARY" -"1358708736","1358712831","GB","GBR","UNITED KINGDOM" -"1358712832","1358716927","NL","NLD","NETHERLANDS" -"1358716928","1358721023","DE","DEU","GERMANY" -"1358721024","1358725119","GB","GBR","UNITED KINGDOM" -"1358725120","1358733311","RU","RUS","RUSSIAN FEDERATION" -"1358733312","1358733639","SE","SWE","SWEDEN" -"1358733640","1358733643","DE","DEU","GERMANY" -"1358733644","1358734003","SE","SWE","SWEDEN" -"1358734004","1358734007","NO","NOR","NORWAY" -"1358734008","1358734123","SE","SWE","SWEDEN" -"1358734124","1358734127","AN","ANT","NETHERLANDS ANTILLES" -"1358734128","1358734343","SE","SWE","SWEDEN" -"1358734344","1358734347","NL","NLD","NETHERLANDS" -"1358734348","1358734715","SE","SWE","SWEDEN" -"1358734716","1358734719","NL","NLD","NETHERLANDS" -"1358734720","1358734975","SE","SWE","SWEDEN" -"1358734976","1358734979","NL","NLD","NETHERLANDS" -"1358734980","1358735139","SE","SWE","SWEDEN" -"1358735140","1358735143","NL","NLD","NETHERLANDS" -"1358735144","1358735319","SE","SWE","SWEDEN" -"1358735320","1358735327","DE","DEU","GERMANY" -"1358735328","1358735491","SE","SWE","SWEDEN" -"1358735492","1358735495","NL","NLD","NETHERLANDS" -"1358735496","1358735711","SE","SWE","SWEDEN" -"1358735712","1358735715","FR","FRA","FRANCE" -"1358735716","1358735743","SE","SWE","SWEDEN" -"1358735744","1358735751","FR","FRA","FRANCE" -"1358735752","1358736927","SE","SWE","SWEDEN" -"1358736928","1358736943","NL","NLD","NETHERLANDS" -"1358736944","1358737383","SE","SWE","SWEDEN" -"1358737384","1358737387","NL","NLD","NETHERLANDS" -"1358737388","1358738103","SE","SWE","SWEDEN" -"1358738104","1358738111","FR","FRA","FRANCE" -"1358738112","1358738303","SE","SWE","SWEDEN" -"1358738304","1358738307","FR","FRA","FRANCE" -"1358738308","1358738431","SE","SWE","SWEDEN" -"1358738432","1358738447","NL","NLD","NETHERLANDS" -"1358738448","1358738687","SE","SWE","SWEDEN" -"1358738688","1358738691","DE","DEU","GERMANY" -"1358738692","1358739135","SE","SWE","SWEDEN" -"1358739136","1358739151","NL","NLD","NETHERLANDS" -"1358739152","1358739503","SE","SWE","SWEDEN" -"1358739504","1358739519","FR","FRA","FRANCE" -"1358739520","1358740159","SE","SWE","SWEDEN" -"1358740160","1358740175","FR","FRA","FRANCE" -"1358740176","1358740335","SE","SWE","SWEDEN" -"1358740336","1358740351","GB","GBR","UNITED KINGDOM" -"1358740352","1358740671","SE","SWE","SWEDEN" -"1358740672","1358740687","GB","GBR","UNITED KINGDOM" -"1358740688","1358740883","SE","SWE","SWEDEN" -"1358740884","1358740887","NL","NLD","NETHERLANDS" -"1358740888","1358741055","SE","SWE","SWEDEN" -"1358741056","1358741071","GB","GBR","UNITED KINGDOM" -"1358741072","1358741503","SE","SWE","SWEDEN" -"1358741504","1358745599","IT","ITA","ITALY" -"1358745600","1358749695","SE","SWE","SWEDEN" -"1358749696","1358753791","IT","ITA","ITALY" -"1358753792","1358757887","UA","UKR","UKRAINE" -"1358757888","1358766079","RU","RUS","RUSSIAN FEDERATION" -"1358766080","1358770175","IT","ITA","ITALY" -"1358770176","1358774271","BG","BGR","BULGARIA" -"1358774272","1358778367","ES","ESP","SPAIN" -"1358778368","1358782463","CH","CHE","SWITZERLAND" -"1358782464","1358784015","GB","GBR","UNITED KINGDOM" -"1358784016","1358784039","NL","NLD","NETHERLANDS" -"1358784040","1358784063","DE","DEU","GERMANY" -"1358784064","1358784831","GB","GBR","UNITED KINGDOM" -"1358784832","1358784863","NL","NLD","NETHERLANDS" -"1358784864","1358784895","DE","DEU","GERMANY" -"1358784896","1358785087","GB","GBR","UNITED KINGDOM" -"1358785088","1358785151","NL","NLD","NETHERLANDS" -"1358785152","1358786559","GB","GBR","UNITED KINGDOM" -"1358786560","1358787071","NL","NLD","NETHERLANDS" -"1358787072","1358789167","GB","GBR","UNITED KINGDOM" -"1358789168","1358789183","IE","IRL","IRELAND" -"1358789184","1358798847","GB","GBR","UNITED KINGDOM" -"1358798848","1358799359","DE","DEU","GERMANY" -"1358799360","1358802943","HR","HRV","CROATIA" -"1358802944","1358807039","HU","HUN","HUNGARY" -"1358807040","1358811135","RU","RUS","RUSSIAN FEDERATION" -"1358811136","1358815231","DE","DEU","GERMANY" -"1358815232","1358819327","RU","RUS","RUSSIAN FEDERATION" -"1358819328","1358823423","TR","TUR","TURKEY" -"1358823424","1358827519","UA","UKR","UKRAINE" -"1358827520","1358831615","RU","RUS","RUSSIAN FEDERATION" -"1358831616","1358835711","NO","NOR","NORWAY" -"1358835712","1358839807","RU","RUS","RUSSIAN FEDERATION" -"1358839808","1358843903","CH","CHE","SWITZERLAND" -"1358843904","1358847999","MT","MLT","MALTA" -"1358848000","1358856191","RU","RUS","RUSSIAN FEDERATION" -"1358856192","1358860287","DE","DEU","GERMANY" -"1358860288","1358861311","GB","GBR","UNITED KINGDOM" -"1358861312","1358861823","DE","DEU","GERMANY" -"1358861824","1358862335","FR","FRA","FRANCE" -"1358862336","1358862591","US","USA","UNITED STATES" -"1358862592","1358862847","GB","GBR","UNITED KINGDOM" -"1358862848","1358863103","DK","DNK","DENMARK" -"1358863104","1358863359","GB","GBR","UNITED KINGDOM" -"1358863360","1358863615","US","USA","UNITED STATES" -"1358863616","1358864383","GB","GBR","UNITED KINGDOM" -"1358864384","1358864399","CH","CHE","SWITZERLAND" -"1358864400","1358864407","IN","IND","INDIA" -"1358864408","1358864535","CH","CHE","SWITZERLAND" -"1358864536","1358864543","LI","LIE","LIECHTENSTEIN" -"1358864544","1358872575","CH","CHE","SWITZERLAND" -"1358872576","1358876671","IT","ITA","ITALY" -"1358876672","1358880767","LV","LVA","LATVIA" -"1358880768","1358884863","GB","GBR","UNITED KINGDOM" -"1358884864","1358888959","SE","SWE","SWEDEN" -"1358888960","1358890943","DE","DEU","GERMANY" -"1358890944","1358891007","AT","AUT","AUSTRIA" -"1358891008","1358893055","DE","DEU","GERMANY" -"1358893056","1358897151","RU","RUS","RUSSIAN FEDERATION" -"1358897152","1358897183","US","USA","UNITED STATES" -"1358897184","1358897199","DE","DEU","GERMANY" -"1358897200","1358897215","GB","GBR","UNITED KINGDOM" -"1358897216","1358897343","US","USA","UNITED STATES" -"1358897344","1358897407","DE","DEU","GERMANY" -"1358897408","1358897919","US","USA","UNITED STATES" -"1358897920","1358898175","GB","GBR","UNITED KINGDOM" -"1358898176","1358898239","CA","CAN","CANADA" -"1358898240","1358898335","US","USA","UNITED STATES" -"1358898336","1358898351","DK","DNK","DENMARK" -"1358898352","1358898687","US","USA","UNITED STATES" -"1358898688","1358898816","DE","DEU","GERMANY" -"1358898817","1358898943","CG","COG","CONGO" -"1358898944","1358898975","DE","DEU","GERMANY" -"1358898976","1358898991","US","USA","UNITED STATES" -"1358898992","1358899079","DE","DEU","GERMANY" -"1358899080","1358899087","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"1358899088","1358899095","DE","DEU","GERMANY" -"1358899096","1358899103","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"1358899104","1358899111","DE","DEU","GERMANY" -"1358899112","1358899119","ZA","ZAF","SOUTH AFRICA" -"1358899120","1358899127","DE","DEU","GERMANY" -"1358899128","1358899135","NG","NGA","NIGERIA" -"1358899136","1358899199","DE","DEU","GERMANY" -"1358899200","1358899207","UG","UGA","UGANDA" -"1358899208","1358899215","LA","LAO","LAO PEOPLE'S DEMOCRATIC REPUBLIC" -"1358899216","1358899239","US","USA","UNITED STATES" -"1358899240","1358899247","LK","LKA","SRI LANKA" -"1358899248","1358899263","GB","GBR","UNITED KINGDOM" -"1358899264","1358899295","PK","PAK","PAKISTAN" -"1358899296","1358899303","NG","NGA","NIGERIA" -"1358899304","1358899311","AE","ARE","UNITED ARAB EMIRATES" -"1358899312","1358899327","NG","NGA","NIGERIA" -"1358899328","1358899335","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"1358899336","1358899343","NG","NGA","NIGERIA" -"1358899344","1358899359","MR","MRT","MAURITANIA" -"1358899360","1358899375","US","USA","UNITED STATES" -"1358899376","1358899383","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"1358899384","1358899391","UG","UGA","UGANDA" -"1358899392","1358899407","GB","GBR","UNITED KINGDOM" -"1358899408","1358899415","DE","DEU","GERMANY" -"1358899416","1358899423","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"1358899424","1358899431","US","USA","UNITED STATES" -"1358899432","1358899455","NG","NGA","NIGERIA" -"1358899456","1358899463","GB","GBR","UNITED KINGDOM" -"1358899464","1358899471","US","USA","UNITED STATES" -"1358899472","1358899479","SV","SLV","EL SALVADOR" -"1358899480","1358899583","GB","GBR","UNITED KINGDOM" -"1358899584","1358899591","IN","IND","INDIA" -"1358899592","1358899599","NG","NGA","NIGERIA" -"1358899600","1358899607","LK","LKA","SRI LANKA" -"1358899608","1358899615","GB","GBR","UNITED KINGDOM" -"1358899616","1358899631","NG","NGA","NIGERIA" -"1358899632","1358899647","NP","NPL","NEPAL" -"1358899648","1358899654","NG","NGA","NIGERIA" -"1358899655","1358899711","DE","DEU","GERMANY" -"1358899712","1358899967","US","USA","UNITED STATES" -"1358899968","1358899983","GB","GBR","UNITED KINGDOM" -"1358899984","1358899991","KY","CYM","CAYMAN ISLANDS" -"1358899992","1358900223","GB","GBR","UNITED KINGDOM" -"1358900224","1358900479","US","USA","UNITED STATES" -"1358900480","1358900543","DE","DEU","GERMANY" -"1358900544","1358900671","US","USA","UNITED STATES" -"1358900672","1358900735","CN","CHN","CHINA" -"1358900736","1358900767","GB","GBR","UNITED KINGDOM" -"1358900768","1358900783","BI","BDI","BURUNDI" -"1358900784","1358900959","GB","GBR","UNITED KINGDOM" -"1358900960","1358900975","SL","SLE","SIERRA LEONE" -"1358900976","1358901247","GB","GBR","UNITED KINGDOM" -"1358901248","1358901503","DE","DEU","GERMANY" -"1358901504","1358901543","US","USA","UNITED STATES" -"1358901544","1358901551","DE","DEU","GERMANY" -"1358901552","1358901615","US","USA","UNITED STATES" -"1358901616","1358901729","DE","DEU","GERMANY" -"1358901730","1358901759","US","USA","UNITED STATES" -"1358901760","1358901807","DE","DEU","GERMANY" -"1358901808","1358901815","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"1358901816","1358901935","DE","DEU","GERMANY" -"1358901936","1358901951","NG","NGA","NIGERIA" -"1358901952","1358901999","DE","DEU","GERMANY" -"1358902000","1358902039","NG","NGA","NIGERIA" -"1358902040","1358902063","GB","GBR","UNITED KINGDOM" -"1358902064","1358902079","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"1358902080","1358902087","NG","NGA","NIGERIA" -"1358902088","1358902103","MG","MDG","MADAGASCAR" -"1358902104","1358902143","NG","NGA","NIGERIA" -"1358902144","1358902151","GB","GBR","UNITED KINGDOM" -"1358902152","1358902167","NG","NGA","NIGERIA" -"1358902168","1358902175","AU","AUS","AUSTRALIA" -"1358902176","1358902207","GB","GBR","UNITED KINGDOM" -"1358902208","1358902215","US","USA","UNITED STATES" -"1358902216","1358902233","NG","NGA","NIGERIA" -"1358902234","1358902263","GB","GBR","UNITED KINGDOM" -"1358902264","1358902271","ZA","ZAF","SOUTH AFRICA" -"1358902272","1358903807","US","USA","UNITED STATES" -"1358903808","1358903951","NG","NGA","NIGERIA" -"1358903952","1358903967","GB","GBR","UNITED KINGDOM" -"1358903968","1358903983","CA","CAN","CANADA" -"1358903984","1358903999","NG","NGA","NIGERIA" -"1358904000","1358904032","ZA","ZAF","SOUTH AFRICA" -"1358904033","1358904063","NG","NGA","NIGERIA" -"1358904064","1358904071","DE","DEU","GERMANY" -"1358904072","1358904095","US","USA","UNITED STATES" -"1358904096","1358904103","DE","DEU","GERMANY" -"1358904104","1358904119","US","USA","UNITED STATES" -"1358904120","1358904127","DE","DEU","GERMANY" -"1358904128","1358904135","US","USA","UNITED STATES" -"1358904136","1358904143","DE","DEU","GERMANY" -"1358904144","1358904151","NG","NGA","NIGERIA" -"1358904152","1358904167","DE","DEU","GERMANY" -"1358904168","1358904175","US","USA","UNITED STATES" -"1358904176","1358904191","DE","DEU","GERMANY" -"1358904192","1358904199","NG","NGA","NIGERIA" -"1358904200","1358904262","US","USA","UNITED STATES" -"1358904263","1358904295","DE","DEU","GERMANY" -"1358904296","1358904311","NG","NGA","NIGERIA" -"1358904312","1358904319","DE","DEU","GERMANY" -"1358904320","1358904551","US","USA","UNITED STATES" -"1358904552","1358904559","IL","ISR","ISRAEL" -"1358904560","1358904575","US","USA","UNITED STATES" -"1358904576","1358904701","NG","NGA","NIGERIA" -"1358904702","1358904703","GB","GBR","UNITED KINGDOM" -"1358904704","1358904719","MU","MUS","MAURITIUS" -"1358904720","1358904735","KN","KNA","SAINT KITTS AND NEVIS" -"1358904736","1358904767","ZA","ZAF","SOUTH AFRICA" -"1358904768","1358904831","NG","NGA","NIGERIA" -"1358904832","1358905087","US","USA","UNITED STATES" -"1358905088","1358905095","GB","GBR","UNITED KINGDOM" -"1358905096","1358905103","GH","GHA","GHANA" -"1358905104","1358905111","GB","GBR","UNITED KINGDOM" -"1358905112","1358905119","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"1358905120","1358905127","GY","GUY","GUYANA" -"1358905128","1358905151","GB","GBR","UNITED KINGDOM" -"1358905152","1358905159","MG","MDG","MADAGASCAR" -"1358905160","1358905167","GB","GBR","UNITED KINGDOM" -"1358905168","1358905183","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"1358905184","1358905215","GH","GHA","GHANA" -"1358905216","1358905223","US","USA","UNITED STATES" -"1358905224","1358905231","GB","GBR","UNITED KINGDOM" -"1358905232","1358905247","GN","GIN","GUINEA" -"1358905248","1358905279","US","USA","UNITED STATES" -"1358905280","1358905295","GB","GBR","UNITED KINGDOM" -"1358905296","1358905311","LR","LBR","LIBERIA" -"1358905312","1358905327","US","USA","UNITED STATES" -"1358905328","1358905343","GB","GBR","UNITED KINGDOM" -"1358905344","1358909439","UA","UKR","UKRAINE" -"1358909440","1358913535","RU","RUS","RUSSIAN FEDERATION" -"1358913536","1358917631","CH","CHE","SWITZERLAND" -"1358917632","1358921727","ES","ESP","SPAIN" -"1358921728","1358929919","RU","RUS","RUSSIAN FEDERATION" -"1358929920","1358934015","LU","LUX","LUXEMBOURG" -"1358934016","1358938111","RU","RUS","RUSSIAN FEDERATION" -"1358938112","1358946303","GB","GBR","UNITED KINGDOM" -"1358946304","1358950399","LV","LVA","LATVIA" -"1358950400","1358954495","NL","NLD","NETHERLANDS" -"1358954496","1358970879","ES","ESP","SPAIN" -"1358970880","1358984191","HU","HUN","HUNGARY" -"1358984192","1358984703","SK","SVK","SLOVAKIA" -"1358984704","1358986239","HU","HUN","HUNGARY" -"1358986240","1358986495","SK","SVK","SLOVAKIA" -"1358986496","1358987263","HU","HUN","HUNGARY" -"1358987264","1359003647","NO","NOR","NORWAY" -"1359003648","1359020031","CZ","CZE","CZECH REPUBLIC" -"1359020032","1359036415","FR","FRA","FRANCE" -"1359036416","1359052799","GB","GBR","UNITED KINGDOM" -"1359052800","1359069183","SE","SWE","SWEDEN" -"1359069184","1359101951","RU","RUS","RUSSIAN FEDERATION" -"1359101952","1359118335","GB","GBR","UNITED KINGDOM" -"1359118336","1359118655","DE","DEU","GERMANY" -"1359118656","1359118719","NL","NLD","NETHERLANDS" -"1359118720","1359134719","DE","DEU","GERMANY" -"1359134720","1359150079","CZ","CZE","CZECH REPUBLIC" -"1359150080","1359150591","HU","HUN","HUNGARY" -"1359150592","1359151103","CZ","CZE","CZECH REPUBLIC" -"1359151104","1359158207","DE","DEU","GERMANY" -"1359158208","1359158215","CH","CHE","SWITZERLAND" -"1359158216","1359166175","DE","DEU","GERMANY" -"1359166176","1359166191","HK","HKG","HONG KONG" -"1359166192","1359167487","DE","DEU","GERMANY" -"1359167488","1359183871","GB","GBR","UNITED KINGDOM" -"1359183872","1359200255","RU","RUS","RUSSIAN FEDERATION" -"1359200256","1359216639","AT","AUT","AUSTRIA" -"1359233024","1359249407","NL","NLD","NETHERLANDS" -"1359249408","1359263743","CY","CYP","CYPRUS" -"1359263744","1359263999","LB","LBN","LEBANON" -"1359264000","1359265791","CY","CYP","CYPRUS" -"1359265792","1359282175","RU","RUS","RUSSIAN FEDERATION" -"1359282176","1359298559","IL","ISR","ISRAEL" -"1359298560","1359314943","RU","RUS","RUSSIAN FEDERATION" -"1359314944","1359331327","GB","GBR","UNITED KINGDOM" -"1359331328","1359347711","AT","AUT","AUSTRIA" -"1359347712","1359349351","CH","CHE","SWITZERLAND" -"1359349352","1359349359","LB","LBN","LEBANON" -"1359349360","1359364095","CH","CHE","SWITZERLAND" -"1359364096","1359380479","TR","TUR","TURKEY" -"1359380480","1359396863","PL","POL","POLAND" -"1359396864","1359413247","GB","GBR","UNITED KINGDOM" -"1359413248","1359429631","DE","DEU","GERMANY" -"1359429632","1359446015","LT","LTU","LITHUANIA" -"1359446016","1359462399","DK","DNK","DENMARK" -"1359462400","1359467007","DE","DEU","GERMANY" -"1359467008","1359467015","US","USA","UNITED STATES" -"1359467016","1359467063","DE","DEU","GERMANY" -"1359467064","1359467079","US","USA","UNITED STATES" -"1359467080","1359467087","DE","DEU","GERMANY" -"1359467088","1359467095","US","USA","UNITED STATES" -"1359467096","1359467103","BR","BRA","BRAZIL" -"1359467104","1359467135","US","USA","UNITED STATES" -"1359467136","1359467143","MX","MEX","MEXICO" -"1359467144","1359467215","US","USA","UNITED STATES" -"1359467216","1359467239","DE","DEU","GERMANY" -"1359467240","1359467255","US","USA","UNITED STATES" -"1359467256","1359467263","MX","MEX","MEXICO" -"1359467264","1359467455","US","USA","UNITED STATES" -"1359467456","1359467487","CA","CAN","CANADA" -"1359467488","1359467495","DE","DEU","GERMANY" -"1359467496","1359467647","US","USA","UNITED STATES" -"1359467648","1359467775","DE","DEU","GERMANY" -"1359467776","1359467807","US","USA","UNITED STATES" -"1359467808","1359467903","DE","DEU","GERMANY" -"1359467904","1359468031","US","USA","UNITED STATES" -"1359468032","1359468639","DE","DEU","GERMANY" -"1359468640","1359468655","SG","SGP","SINGAPORE" -"1359468656","1359468671","JP","JPN","JAPAN" -"1359468672","1359468695","SG","SGP","SINGAPORE" -"1359468696","1359468711","DE","DEU","GERMANY" -"1359468712","1359468735","SG","SGP","SINGAPORE" -"1359468736","1359468863","DE","DEU","GERMANY" -"1359468864","1359468879","SG","SGP","SINGAPORE" -"1359468880","1359468927","DE","DEU","GERMANY" -"1359468928","1359469055","SG","SGP","SINGAPORE" -"1359469056","1359469311","DE","DEU","GERMANY" -"1359469312","1359469567","SI","SVN","SLOVENIA" -"1359469568","1359469943","DE","DEU","GERMANY" -"1359469944","1359469983","AT","AUT","AUSTRIA" -"1359469984","1359470591","DE","DEU","GERMANY" -"1359470592","1359478783","CH","CHE","SWITZERLAND" -"1359478784","1359511551","TR","TUR","TURKEY" -"1359511552","1359544319","SE","SWE","SWEDEN" -"1359544320","1359547391","RU","RUS","RUSSIAN FEDERATION" -"1359547392","1359547903","US","USA","UNITED STATES" -"1359547904","1359548159","RU","RUS","RUSSIAN FEDERATION" -"1359548160","1359548415","US","USA","UNITED STATES" -"1359548416","1359552511","RU","RUS","RUSSIAN FEDERATION" -"1359552512","1359552767","US","USA","UNITED STATES" -"1359552768","1359553599","RU","RUS","RUSSIAN FEDERATION" -"1359553600","1359553631","US","USA","UNITED STATES" -"1359553632","1359577087","RU","RUS","RUSSIAN FEDERATION" -"1359577088","1359609855","ES","ESP","SPAIN" -"1359642624","1359675391","AT","AUT","AUSTRIA" -"1359675392","1359708159","DE","DEU","GERMANY" -"1359708160","1359740927","BE","BEL","BELGIUM" -"1359740928","1359773695","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1359773696","1359806463","RO","ROM","ROMANIA" -"1359806464","1359839231","RU","RUS","RUSSIAN FEDERATION" -"1359839232","1359871999","CH","CHE","SWITZERLAND" -"1359904768","1359937535","DE","DEU","GERMANY" -"1359937536","1359970303","IS","ISL","ICELAND" -"1359970304","1360003071","PL","POL","POLAND" -"1360003072","1360007167","AM","ARM","ARMENIA" -"1360007168","1360011263","GB","GBR","UNITED KINGDOM" -"1360011264","1360015359","AT","AUT","AUSTRIA" -"1360015360","1360019455","DE","DEU","GERMANY" -"1360019456","1360023551","FI","FIN","FINLAND" -"1360023552","1360027647","RU","RUS","RUSSIAN FEDERATION" -"1360027648","1360031743","AT","AUT","AUSTRIA" -"1360031744","1360039935","RU","RUS","RUSSIAN FEDERATION" -"1360039936","1360041439","AT","AUT","AUSTRIA" -"1360041440","1360041447","CZ","CZE","CZECH REPUBLIC" -"1360041448","1360043671","AT","AUT","AUSTRIA" -"1360043672","1360043679","CZ","CZE","CZECH REPUBLIC" -"1360043680","1360044031","AT","AUT","AUSTRIA" -"1360044032","1360048127","SE","SWE","SWEDEN" -"1360048128","1360049167","DE","DEU","GERMANY" -"1360049168","1360049183","GB","GBR","UNITED KINGDOM" -"1360049184","1360049199","DE","DEU","GERMANY" -"1360049200","1360049207","SE","SWE","SWEDEN" -"1360049208","1360049215","IT","ITA","ITALY" -"1360049216","1360049223","ES","ESP","SPAIN" -"1360049224","1360049231","JP","JPN","JAPAN" -"1360049232","1360049239","US","USA","UNITED STATES" -"1360049240","1360049247","GB","GBR","UNITED KINGDOM" -"1360049248","1360050959","DE","DEU","GERMANY" -"1360050960","1360050975","US","USA","UNITED STATES" -"1360050976","1360052223","DE","DEU","GERMANY" -"1360052224","1360056319","HU","HUN","HUNGARY" -"1360056320","1360060415","SA","SAU","SAUDI ARABIA" -"1360060416","1360064511","LT","LTU","LITHUANIA" -"1360064512","1360068607","GE","GEO","GEORGIA" -"1360068608","1360076799","RU","RUS","RUSSIAN FEDERATION" -"1360076800","1360084991","NL","NLD","NETHERLANDS" -"1360084992","1360089087","GB","GBR","UNITED KINGDOM" -"1360089088","1360093183","AZ","AZE","AZERBAIJAN" -"1360093184","1360101375","DE","DEU","GERMANY" -"1360101376","1360105471","UA","UKR","UKRAINE" -"1360105472","1360109567","RU","RUS","RUSSIAN FEDERATION" -"1360109568","1360113663","KZ","KAZ","KAZAKHSTAN" -"1360113664","1360117759","HU","HUN","HUNGARY" -"1360117760","1360121855","FI","FIN","FINLAND" -"1360121856","1360125951","DE","DEU","GERMANY" -"1360125952","1360126975","SI","SVN","SLOVENIA" -"1360126976","1360127487","HR","HRV","CROATIA" -"1360127488","1360127999","RS","SRB","SERBIA" -"1360128000","1360128511","MK","MKD","THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA" -"1360128512","1360129023","SI","SVN","SLOVENIA" -"1360129024","1360130047","BA","BIH","BOSNIA AND HERZEGOVINA" -"1360130048","1360130575","IE","IRL","IRELAND" -"1360130576","1360130583","GB","GBR","UNITED KINGDOM" -"1360130584","1360130815","IE","IRL","IRELAND" -"1360130816","1360130879","GB","GBR","UNITED KINGDOM" -"1360130880","1360131520","IE","IRL","IRELAND" -"1360131521","1360131583","GB","GBR","UNITED KINGDOM" -"1360131584","1360131903","IE","IRL","IRELAND" -"1360131904","1360131919","US","USA","UNITED STATES" -"1360131920","1360131935","AU","AUS","AUSTRALIA" -"1360131936","1360131951","GB","GBR","UNITED KINGDOM" -"1360131952","1360134143","IE","IRL","IRELAND" -"1360134144","1360138239","NL","NLD","NETHERLANDS" -"1360138240","1360142335","CH","CHE","SWITZERLAND" -"1360142336","1360146431","KZ","KAZ","KAZAKHSTAN" -"1360146432","1360148479","CS","SCG","SERBIA AND MONTENEGRO" -"1360148480","1360150527","RS","SRB","SERBIA" -"1360150528","1360158719","RO","ROM","ROMANIA" -"1360158720","1360162815","DE","DEU","GERMANY" -"1360162816","1360175103","RU","RUS","RUSSIAN FEDERATION" -"1360175104","1360179199","NL","NLD","NETHERLANDS" -"1360179200","1360183295","FR","FRA","FRANCE" -"1360183296","1360191487","PL","POL","POLAND" -"1360191488","1360195583","FO","FRO","FAROE ISLANDS" -"1360195584","1360199679","NL","NLD","NETHERLANDS" -"1360199680","1360203775","CZ","CZE","CZECH REPUBLIC" -"1360203776","1360207871","FR","FRA","FRANCE" -"1360207872","1360211967","CZ","CZE","CZECH REPUBLIC" -"1360211968","1360216063","GB","GBR","UNITED KINGDOM" -"1360216064","1360224255","RU","RUS","RUSSIAN FEDERATION" -"1360224256","1360225663","ES","ESP","SPAIN" -"1360225664","1360225695","GB","GBR","UNITED KINGDOM" -"1360225696","1360226079","ES","ESP","SPAIN" -"1360226080","1360226111","IT","ITA","ITALY" -"1360226112","1360226191","ES","ESP","SPAIN" -"1360226192","1360226199","IT","ITA","ITALY" -"1360226200","1360228351","ES","ESP","SPAIN" -"1360228352","1360232447","FI","FIN","FINLAND" -"1360232448","1360236543","RU","RUS","RUSSIAN FEDERATION" -"1360236544","1360239135","AT","AUT","AUSTRIA" -"1360239136","1360239167","DE","DEU","GERMANY" -"1360239168","1360240639","AT","AUT","AUSTRIA" -"1360240640","1360244735","ES","ESP","SPAIN" -"1360244736","1360257023","GB","GBR","UNITED KINGDOM" -"1360257024","1360265215","DK","DNK","DENMARK" -"1360265216","1360269311","GB","GBR","UNITED KINGDOM" -"1360269312","1360273407","KG","KGZ","KYRGYZSTAN" -"1360273408","1360281599","GB","GBR","UNITED KINGDOM" -"1360281600","1360285695","NL","NLD","NETHERLANDS" -"1360285696","1360289791","DE","DEU","GERMANY" -"1360289792","1360293887","RU","RUS","RUSSIAN FEDERATION" -"1360293888","1360302079","DE","DEU","GERMANY" -"1360302080","1360306175","EE","EST","ESTONIA" -"1360306176","1360310271","RU","RUS","RUSSIAN FEDERATION" -"1360310272","1360314367","GB","GBR","UNITED KINGDOM" -"1360314368","1360318463","RU","RUS","RUSSIAN FEDERATION" -"1360318464","1360322559","FR","FRA","FRANCE" -"1360322560","1360326655","FI","FIN","FINLAND" -"1360326656","1360330751","PT","PRT","PORTUGAL" -"1360330752","1360334847","UA","UKR","UKRAINE" -"1360334848","1360338943","AT","AUT","AUSTRIA" -"1360338944","1360343039","CY","CYP","CYPRUS" -"1360343040","1360347135","SA","SAU","SAUDI ARABIA" -"1360347136","1360351231","GB","GBR","UNITED KINGDOM" -"1360351232","1360355327","AZ","AZE","AZERBAIJAN" -"1360359424","1360363519","AT","AUT","AUSTRIA" -"1360363520","1360367615","IT","ITA","ITALY" -"1360367616","1360371711","IE","IRL","IRELAND" -"1360371712","1360375807","TR","TUR","TURKEY" -"1360375808","1360379903","NL","NLD","NETHERLANDS" -"1360379904","1360383999","PL","POL","POLAND" -"1360384000","1360388095","SE","SWE","SWEDEN" -"1360388096","1360392191","RU","RUS","RUSSIAN FEDERATION" -"1360392192","1360396287","EE","EST","ESTONIA" -"1360396288","1360400383","RU","RUS","RUSSIAN FEDERATION" -"1360400384","1360404479","BH","BHR","BAHRAIN" -"1360404480","1360404735","GB","GBR","UNITED KINGDOM" -"1360404736","1360404991","DE","DEU","GERMANY" -"1360404992","1360405247","FR","FRA","FRANCE" -"1360405248","1360405503","SE","SWE","SWEDEN" -"1360405504","1360408575","GB","GBR","UNITED KINGDOM" -"1360408576","1360412671","RU","RUS","RUSSIAN FEDERATION" -"1360420864","1360424959","TR","TUR","TURKEY" -"1360424960","1360429055","RU","RUS","RUSSIAN FEDERATION" -"1360429056","1360433151","UA","UKR","UKRAINE" -"1360433152","1360437247","RO","ROM","ROMANIA" -"1360437248","1360441343","FI","FIN","FINLAND" -"1360441344","1360445439","HU","HUN","HUNGARY" -"1360445440","1360453631","RU","RUS","RUSSIAN FEDERATION" -"1360453632","1360457727","DE","DEU","GERMANY" -"1360457728","1360459103","FI","FIN","FINLAND" -"1360459104","1360459135","IL","ISR","ISRAEL" -"1360459136","1360461823","FI","FIN","FINLAND" -"1360461824","1360465919","LT","LTU","LITHUANIA" -"1360465920","1360470015","UA","UKR","UKRAINE" -"1360470016","1360474111","FR","FRA","FRANCE" -"1360474112","1360478207","GB","GBR","UNITED KINGDOM" -"1360478208","1360482303","CH","CHE","SWITZERLAND" -"1360482304","1360486399","IT","ITA","ITALY" -"1360486400","1360515071","RU","RUS","RUSSIAN FEDERATION" -"1360515072","1360519167","GB","GBR","UNITED KINGDOM" -"1360519168","1360524031","NL","NLD","NETHERLANDS" -"1360524032","1360524287","US","USA","UNITED STATES" -"1360524288","1360531455","NL","NLD","NETHERLANDS" -"1360531456","1360535551","RO","ROM","ROMANIA" -"1360535552","1360539647","DE","DEU","GERMANY" -"1360539648","1360543743","NL","NLD","NETHERLANDS" -"1360543744","1360547839","DE","DEU","GERMANY" -"1360547840","1360551935","RU","RUS","RUSSIAN FEDERATION" -"1360551936","1360556031","SI","SVN","SLOVENIA" -"1360556032","1360564223","RU","RUS","RUSSIAN FEDERATION" -"1360564224","1360568319","AT","AUT","AUSTRIA" -"1360568320","1360572415","ES","ESP","SPAIN" -"1360572416","1360576511","GR","GRC","GREECE" -"1360576512","1360580607","GB","GBR","UNITED KINGDOM" -"1360580608","1360584703","UA","UKR","UKRAINE" -"1360584704","1360588799","IT","ITA","ITALY" -"1360588800","1360592895","GB","GBR","UNITED KINGDOM" -"1360592896","1360596991","RU","RUS","RUSSIAN FEDERATION" -"1360596992","1360601087","CZ","CZE","CZECH REPUBLIC" -"1360601088","1360605183","BY","BLR","BELARUS" -"1360605184","1360613375","RU","RUS","RUSSIAN FEDERATION" -"1360613376","1360617471","SE","SWE","SWEDEN" -"1360617472","1360621567","IT","ITA","ITALY" -"1360621568","1360625663","ES","ESP","SPAIN" -"1360625664","1360627967","DE","DEU","GERMANY" -"1360627968","1360628095","IQ","IRQ","IRAQ" -"1360628096","1360628223","LU","LUX","LUXEMBOURG" -"1360628224","1360628735","LB","LBN","LEBANON" -"1360628736","1360628991","IQ","IRQ","IRAQ" -"1360628992","1360629503","DE","DEU","GERMANY" -"1360629504","1360629759","IQ","IRQ","IRAQ" -"1360629760","1360633855","SE","SWE","SWEDEN" -"1360633856","1360637951","RU","RUS","RUSSIAN FEDERATION" -"1360637952","1360642047","FO","FRO","FAROE ISLANDS" -"1360642048","1360645711","FR","FRA","FRANCE" -"1360645712","1360645719","GB","GBR","UNITED KINGDOM" -"1360645720","1360646143","FR","FRA","FRANCE" -"1360646144","1360650239","AT","AUT","AUSTRIA" -"1360650240","1360654335","UA","UKR","UKRAINE" -"1360654336","1360658431","EE","EST","ESTONIA" -"1360658432","1360666623","PL","POL","POLAND" -"1360666624","1360674815","NO","NOR","NORWAY" -"1360678912","1360683007","RU","RUS","RUSSIAN FEDERATION" -"1360683008","1360691199","GB","GBR","UNITED KINGDOM" -"1360691200","1360699391","RU","RUS","RUSSIAN FEDERATION" -"1360699392","1360703487","DE","DEU","GERMANY" -"1360703488","1360707583","RU","RUS","RUSSIAN FEDERATION" -"1360707584","1360711679","IT","ITA","ITALY" -"1360711680","1360715775","NL","NLD","NETHERLANDS" -"1360715776","1360728063","SE","SWE","SWEDEN" -"1360728064","1360732159","FR","FRA","FRANCE" -"1360732160","1360736255","NO","NOR","NORWAY" -"1360736256","1360740351","RU","RUS","RUSSIAN FEDERATION" -"1360740352","1360743679","GB","GBR","UNITED KINGDOM" -"1360743680","1360743935","FR","FRA","FRANCE" -"1360743936","1360752639","GB","GBR","UNITED KINGDOM" -"1360752640","1360756735","DE","DEU","GERMANY" -"1360756736","1360760831","IT","ITA","ITALY" -"1360760832","1360764927","RU","RUS","RUSSIAN FEDERATION" -"1360764928","1360769023","DE","DEU","GERMANY" -"1360769024","1360773119","IT","ITA","ITALY" -"1360773120","1360777215","CZ","CZE","CZECH REPUBLIC" -"1360777216","1360781311","DK","DNK","DENMARK" -"1360781312","1360785407","DE","DEU","GERMANY" -"1360785408","1360793599","RU","RUS","RUSSIAN FEDERATION" -"1360793600","1360797695","CZ","CZE","CZECH REPUBLIC" -"1360797696","1360805887","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1360805888","1360809983","DE","DEU","GERMANY" -"1360809984","1360814079","NL","NLD","NETHERLANDS" -"1360814080","1360818175","FR","FRA","FRANCE" -"1360818176","1360822271","JO","JOR","JORDAN" -"1360822272","1360826367","AT","AUT","AUSTRIA" -"1360826368","1360830463","GB","GBR","UNITED KINGDOM" -"1360830464","1360838655","RU","RUS","RUSSIAN FEDERATION" -"1360838656","1360842751","FR","FRA","FRANCE" -"1360842752","1360846847","RU","RUS","RUSSIAN FEDERATION" -"1360846848","1360850943","DE","DEU","GERMANY" -"1360850944","1360855039","IT","ITA","ITALY" -"1360855040","1360855841","NL","NLD","NETHERLANDS" -"1360855842","1360855851","MX","MEX","MEXICO" -"1360855852","1360856075","NL","NLD","NETHERLANDS" -"1360856076","1360856079","AU","AUS","AUSTRALIA" -"1360856080","1360856109","NL","NLD","NETHERLANDS" -"1360856110","1360856113","AU","AUS","AUSTRALIA" -"1360856114","1360856133","NL","NLD","NETHERLANDS" -"1360856134","1360856144","MX","MEX","MEXICO" -"1360856145","1360859135","NL","NLD","NETHERLANDS" -"1360859136","1360863231","LT","LTU","LITHUANIA" -"1360863232","1360867327","NO","NOR","NORWAY" -"1360867328","1360879615","GB","GBR","UNITED KINGDOM" -"1360883712","1360887807","RU","RUS","RUSSIAN FEDERATION" -"1360887808","1360890367","FI","FIN","FINLAND" -"1360890368","1360890623","RU","RUS","RUSSIAN FEDERATION" -"1360890624","1360890879","FI","FIN","FINLAND" -"1360890880","1360891391","RU","RUS","RUSSIAN FEDERATION" -"1360891392","1360891647","FI","FIN","FINLAND" -"1360891648","1360891903","RU","RUS","RUSSIAN FEDERATION" -"1360891904","1360892159","IT","ITA","ITALY" -"1360892160","1360892427","CH","CHE","SWITZERLAND" -"1360892428","1360892431","IT","ITA","ITALY" -"1360892432","1360892479","CH","CHE","SWITZERLAND" -"1360892480","1360892487","FR","FRA","FRANCE" -"1360892488","1360892671","CH","CHE","SWITZERLAND" -"1360892672","1360892703","IT","ITA","ITALY" -"1360892704","1360892735","CH","CHE","SWITZERLAND" -"1360892736","1360892739","EE","EST","ESTONIA" -"1360892740","1360892743","GB","GBR","UNITED KINGDOM" -"1360892744","1360892763","CH","CHE","SWITZERLAND" -"1360892764","1360892771","IT","ITA","ITALY" -"1360892772","1360892791","CH","CHE","SWITZERLAND" -"1360892792","1360892799","IT","ITA","ITALY" -"1360892800","1360892807","CH","CHE","SWITZERLAND" -"1360892808","1360892823","IT","ITA","ITALY" -"1360892824","1360892927","CH","CHE","SWITZERLAND" -"1360892928","1360893055","IT","ITA","ITALY" -"1360893056","1360893191","CH","CHE","SWITZERLAND" -"1360893192","1360893195","IT","ITA","ITALY" -"1360893196","1360893831","CH","CHE","SWITZERLAND" -"1360893832","1360893835","IT","ITA","ITALY" -"1360893836","1360893951","CH","CHE","SWITZERLAND" -"1360893952","1360894207","IT","ITA","ITALY" -"1360894208","1360894975","CH","CHE","SWITZERLAND" -"1360894976","1360895007","IT","ITA","ITALY" -"1360895008","1360895751","CH","CHE","SWITZERLAND" -"1360895752","1360895755","IT","ITA","ITALY" -"1360895756","1360895999","CH","CHE","SWITZERLAND" -"1360896000","1360900095","QA","QAT","QATAR" -"1360900096","1360904335","IT","ITA","ITALY" -"1360904336","1360904343","GB","GBR","UNITED KINGDOM" -"1360904344","1360905039","IT","ITA","ITALY" -"1360905040","1360905055","GB","GBR","UNITED KINGDOM" -"1360905056","1360905391","IT","ITA","ITALY" -"1360905392","1360905407","GB","GBR","UNITED KINGDOM" -"1360905408","1360906687","IT","ITA","ITALY" -"1360906688","1360906719","GB","GBR","UNITED KINGDOM" -"1360906720","1360907679","IT","ITA","ITALY" -"1360907680","1360907711","GB","GBR","UNITED KINGDOM" -"1360907712","1360909391","IT","ITA","ITALY" -"1360909392","1360909407","GB","GBR","UNITED KINGDOM" -"1360909408","1360910495","IT","ITA","ITALY" -"1360910496","1360910511","GB","GBR","UNITED KINGDOM" -"1360910512","1360910527","IT","ITA","ITALY" -"1360910528","1360910559","GB","GBR","UNITED KINGDOM" -"1360910560","1360916479","IT","ITA","ITALY" -"1360916480","1360920575","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1360920576","1360928767","IT","ITA","ITALY" -"1360932864","1360936959","RU","RUS","RUSSIAN FEDERATION" -"1360936960","1360941055","NL","NLD","NETHERLANDS" -"1360941056","1360945151","BY","BLR","BELARUS" -"1360945152","1360949247","DE","DEU","GERMANY" -"1360949248","1360953343","RU","RUS","RUSSIAN FEDERATION" -"1360953344","1360957439","PL","POL","POLAND" -"1360961536","1360965631","UA","UKR","UKRAINE" -"1360965632","1360977919","RU","RUS","RUSSIAN FEDERATION" -"1360977920","1360986111","CZ","CZE","CZECH REPUBLIC" -"1360986112","1360987135","GB","GBR","UNITED KINGDOM" -"1360987136","1360987535","CZ","CZE","CZECH REPUBLIC" -"1360987536","1360987903","GB","GBR","UNITED KINGDOM" -"1360987904","1360987935","CZ","CZE","CZECH REPUBLIC" -"1360987936","1360987983","SK","SVK","SLOVAKIA" -"1360987984","1360987999","CZ","CZE","CZECH REPUBLIC" -"1360988000","1360988015","GB","GBR","UNITED KINGDOM" -"1360988016","1360988031","CZ","CZE","CZECH REPUBLIC" -"1360988032","1360988039","GB","GBR","UNITED KINGDOM" -"1360988040","1360988047","CZ","CZE","CZECH REPUBLIC" -"1360988048","1360988055","GB","GBR","UNITED KINGDOM" -"1360988056","1360988063","SK","SVK","SLOVAKIA" -"1360988064","1360988079","CZ","CZE","CZECH REPUBLIC" -"1360988080","1360988159","GB","GBR","UNITED KINGDOM" -"1360988160","1360988415","SK","SVK","SLOVAKIA" -"1360988416","1360988927","CZ","CZE","CZECH REPUBLIC" -"1360988928","1360989183","GB","GBR","UNITED KINGDOM" -"1360989184","1360989439","SK","SVK","SLOVAKIA" -"1360989440","1360989695","GB","GBR","UNITED KINGDOM" -"1360989696","1360990079","CZ","CZE","CZECH REPUBLIC" -"1360990080","1360990207","GB","GBR","UNITED KINGDOM" -"1360990208","1360990463","CZ","CZE","CZECH REPUBLIC" -"1360990464","1360990719","GB","GBR","UNITED KINGDOM" -"1360990720","1360990975","CZ","CZE","CZECH REPUBLIC" -"1360990976","1360991231","GB","GBR","UNITED KINGDOM" -"1360991232","1360991743","CZ","CZE","CZECH REPUBLIC" -"1360991744","1360991999","GB","GBR","UNITED KINGDOM" -"1360992000","1360992255","SK","SVK","SLOVAKIA" -"1360992256","1360992767","CZ","CZE","CZECH REPUBLIC" -"1360992768","1360994303","GB","GBR","UNITED KINGDOM" -"1360994304","1360998399","CZ","CZE","CZECH REPUBLIC" -"1360998400","1361002495","FI","FIN","FINLAND" -"1361002496","1361006591","GB","GBR","UNITED KINGDOM" -"1361006592","1361010687","DK","DNK","DENMARK" -"1361010688","1361018879","GB","GBR","UNITED KINGDOM" -"1361018880","1361022975","AT","AUT","AUSTRIA" -"1361022976","1361027071","IT","ITA","ITALY" -"1361027072","1361035263","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1361035264","1361035527","NL","NLD","NETHERLANDS" -"1361035528","1361035535","IT","ITA","ITALY" -"1361035536","1361035543","IQ","IRQ","IRAQ" -"1361035544","1361035547","ES","ESP","SPAIN" -"1361035548","1361035551","DE","DEU","GERMANY" -"1361035552","1361035555","IQ","IRQ","IRAQ" -"1361035556","1361035559","GI","GIB","GIBRALTAR" -"1361035560","1361035563","IQ","IRQ","IRAQ" -"1361035564","1361035567","DE","DEU","GERMANY" -"1361035568","1361035575","ES","ESP","SPAIN" -"1361035576","1361035583","DE","DEU","GERMANY" -"1361035584","1361035587","IT","ITA","ITALY" -"1361035588","1361035599","IQ","IRQ","IRAQ" -"1361035600","1361035607","NL","NLD","NETHERLANDS" -"1361035608","1361035615","IT","ITA","ITALY" -"1361035616","1361035619","GB","GBR","UNITED KINGDOM" -"1361035620","1361035623","IT","ITA","ITALY" -"1361035624","1361035627","DE","DEU","GERMANY" -"1361035628","1361035631","DZ","DZA","ALGERIA" -"1361035632","1361035635","IT","ITA","ITALY" -"1361035636","1361035655","IQ","IRQ","IRAQ" -"1361035656","1361035663","TR","TUR","TURKEY" -"1361035664","1361035671","IQ","IRQ","IRAQ" -"1361035672","1361035675","IT","ITA","ITALY" -"1361035676","1361035679","IQ","IRQ","IRAQ" -"1361035680","1361035683","IE","IRL","IRELAND" -"1361035684","1361035687","IQ","IRQ","IRAQ" -"1361035688","1361035691","GB","GBR","UNITED KINGDOM" -"1361035692","1361035715","IQ","IRQ","IRAQ" -"1361035716","1361035723","GB","GBR","UNITED KINGDOM" -"1361035724","1361035739","IQ","IRQ","IRAQ" -"1361035740","1361035743","IT","ITA","ITALY" -"1361035744","1361035751","IQ","IRQ","IRAQ" -"1361035752","1361035755","GB","GBR","UNITED KINGDOM" -"1361035756","1361035759","IQ","IRQ","IRAQ" -"1361035760","1361035763","ES","ESP","SPAIN" -"1361035764","1361035767","IE","IRL","IRELAND" -"1361035768","1361035775","IQ","IRQ","IRAQ" -"1361035776","1361035779","GB","GBR","UNITED KINGDOM" -"1361035780","1361035783","PL","POL","POLAND" -"1361035784","1361035799","IQ","IRQ","IRAQ" -"1361035800","1361035807","TR","TUR","TURKEY" -"1361035808","1361035811","NL","NLD","NETHERLANDS" -"1361035812","1361035815","BA","BIH","BOSNIA AND HERZEGOVINA" -"1361035816","1361035823","TR","TUR","TURKEY" -"1361035824","1361035831","DE","DEU","GERMANY" -"1361035832","1361035839","BE","BEL","BELGIUM" -"1361035840","1361035847","ES","ESP","SPAIN" -"1361035848","1361035851","GB","GBR","UNITED KINGDOM" -"1361035852","1361035855","IQ","IRQ","IRAQ" -"1361035856","1361035863","ES","ESP","SPAIN" -"1361035864","1361035871","BE","BEL","BELGIUM" -"1361035872","1361035875","GB","GBR","UNITED KINGDOM" -"1361035876","1361035879","NL","NLD","NETHERLANDS" -"1361035880","1361035899","IQ","IRQ","IRAQ" -"1361035900","1361035903","NL","NLD","NETHERLANDS" -"1361035904","1361035907","KW","KWT","KUWAIT" -"1361035908","1361035911","ES","ESP","SPAIN" -"1361035912","1361035915","IQ","IRQ","IRAQ" -"1361035916","1361035919","IT","ITA","ITALY" -"1361035920","1361035923","CH","CHE","SWITZERLAND" -"1361035924","1361035927","IQ","IRQ","IRAQ" -"1361035928","1361035931","DE","DEU","GERMANY" -"1361035932","1361035935","TR","TUR","TURKEY" -"1361035936","1361035943","GB","GBR","UNITED KINGDOM" -"1361035944","1361035959","IQ","IRQ","IRAQ" -"1361035960","1361035963","GB","GBR","UNITED KINGDOM" -"1361035964","1361035967","CH","CHE","SWITZERLAND" -"1361035968","1361035975","GB","GBR","UNITED KINGDOM" -"1361035976","1361035979","US","USA","UNITED STATES" -"1361035980","1361035983","IQ","IRQ","IRAQ" -"1361035984","1361035995","DE","DEU","GERMANY" -"1361035996","1361035999","IE","IRL","IRELAND" -"1361036000","1361036015","GB","GBR","UNITED KINGDOM" -"1361036016","1361036019","IQ","IRQ","IRAQ" -"1361036020","1361036023","NL","NLD","NETHERLANDS" -"1361036024","1361036031","IQ","IRQ","IRAQ" -"1361036032","1361036039","IE","IRL","IRELAND" -"1361036040","1361036043","IT","ITA","ITALY" -"1361036044","1361036055","IQ","IRQ","IRAQ" -"1361036056","1361036063","NL","NLD","NETHERLANDS" -"1361036064","1361036071","DE","DEU","GERMANY" -"1361036072","1361036079","BE","BEL","BELGIUM" -"1361036080","1361036087","FR","FRA","FRANCE" -"1361036088","1361036095","IT","ITA","ITALY" -"1361036096","1361036103","IQ","IRQ","IRAQ" -"1361036104","1361036111","NO","NOR","NORWAY" -"1361036112","1361036119","RO","ROM","ROMANIA" -"1361036120","1361036127","HU","HUN","HUNGARY" -"1361036128","1361036135","CZ","CZE","CZECH REPUBLIC" -"1361036136","1361036143","IQ","IRQ","IRAQ" -"1361036144","1361036151","TR","TUR","TURKEY" -"1361036152","1361036167","ES","ESP","SPAIN" -"1361036168","1361036175","IQ","IRQ","IRAQ" -"1361036176","1361036191","GB","GBR","UNITED KINGDOM" -"1361036192","1361036199","IQ","IRQ","IRAQ" -"1361036200","1361036207","TR","TUR","TURKEY" -"1361036208","1361036215","IQ","IRQ","IRAQ" -"1361036216","1361036223","DE","DEU","GERMANY" -"1361036224","1361036239","IQ","IRQ","IRAQ" -"1361036240","1361036243","NL","NLD","NETHERLANDS" -"1361036244","1361036247","IT","ITA","ITALY" -"1361036248","1361036251","TN","TUN","TUNISIA" -"1361036252","1361036255","NL","NLD","NETHERLANDS" -"1361036256","1361036259","GB","GBR","UNITED KINGDOM" -"1361036260","1361036287","IQ","IRQ","IRAQ" -"1361036288","1361036295","IT","ITA","ITALY" -"1361036296","1361036299","IQ","IRQ","IRAQ" -"1361036300","1361036303","GB","GBR","UNITED KINGDOM" -"1361036304","1361036307","ES","ESP","SPAIN" -"1361036308","1361036311","NL","NLD","NETHERLANDS" -"1361036312","1361036315","IQ","IRQ","IRAQ" -"1361036316","1361036319","DZ","DZA","ALGERIA" -"1361036320","1361036327","IQ","IRQ","IRAQ" -"1361036328","1361036331","DZ","DZA","ALGERIA" -"1361036332","1361036335","IT","ITA","ITALY" -"1361036336","1361036359","IQ","IRQ","IRAQ" -"1361036360","1361036367","DZ","DZA","ALGERIA" -"1361036368","1361036371","TR","TUR","TURKEY" -"1361036372","1361036375","GB","GBR","UNITED KINGDOM" -"1361036376","1361036379","NL","NLD","NETHERLANDS" -"1361036380","1361036383","GB","GBR","UNITED KINGDOM" -"1361036384","1361036387","DZ","DZA","ALGERIA" -"1361036388","1361036403","IQ","IRQ","IRAQ" -"1361036404","1361036411","IT","ITA","ITALY" -"1361036412","1361036415","NL","NLD","NETHERLANDS" -"1361036416","1361036419","US","USA","UNITED STATES" -"1361036420","1361036423","ES","ESP","SPAIN" -"1361036424","1361036431","GB","GBR","UNITED KINGDOM" -"1361036432","1361036435","EG","EGY","EGYPT" -"1361036436","1361036459","IQ","IRQ","IRAQ" -"1361036460","1361036471","TR","TUR","TURKEY" -"1361036472","1361036475","GB","GBR","UNITED KINGDOM" -"1361036476","1361036491","IQ","IRQ","IRAQ" -"1361036492","1361036495","GB","GBR","UNITED KINGDOM" -"1361036496","1361036515","IQ","IRQ","IRAQ" -"1361036516","1361036519","IT","ITA","ITALY" -"1361036520","1361036523","GB","GBR","UNITED KINGDOM" -"1361036524","1361036527","IQ","IRQ","IRAQ" -"1361036528","1361036531","IT","ITA","ITALY" -"1361036532","1361036535","IQ","IRQ","IRAQ" -"1361036536","1361036551","TR","TUR","TURKEY" -"1361036552","1361036559","GB","GBR","UNITED KINGDOM" -"1361036560","1361036567","IQ","IRQ","IRAQ" -"1361036568","1361036575","NL","NLD","NETHERLANDS" -"1361036576","1361036579","IQ","IRQ","IRAQ" -"1361036580","1361036583","IT","ITA","ITALY" -"1361036584","1361036595","IQ","IRQ","IRAQ" -"1361036596","1361036599","GI","GIB","GIBRALTAR" -"1361036600","1361036607","IQ","IRQ","IRAQ" -"1361036608","1361036611","GI","GIB","GIBRALTAR" -"1361036612","1361036615","IQ","IRQ","IRAQ" -"1361036616","1361036623","GB","GBR","UNITED KINGDOM" -"1361036624","1361036631","IQ","IRQ","IRAQ" -"1361036632","1361036635","GR","GRC","GREECE" -"1361036636","1361036639","GB","GBR","UNITED KINGDOM" -"1361036640","1361036655","IQ","IRQ","IRAQ" -"1361036656","1361036663","NL","NLD","NETHERLANDS" -"1361036664","1361036667","DZ","DZA","ALGERIA" -"1361036668","1361036671","CH","CHE","SWITZERLAND" -"1361036672","1361036675","TR","TUR","TURKEY" -"1361036676","1361036679","NL","NLD","NETHERLANDS" -"1361036680","1361036687","IQ","IRQ","IRAQ" -"1361036688","1361036695","NL","NLD","NETHERLANDS" -"1361036696","1361036703","TR","TUR","TURKEY" -"1361036704","1361036711","IQ","IRQ","IRAQ" -"1361036712","1361036719","GB","GBR","UNITED KINGDOM" -"1361036720","1361036727","IQ","IRQ","IRAQ" -"1361036728","1361036735","US","USA","UNITED STATES" -"1361036736","1361036763","IQ","IRQ","IRAQ" -"1361036764","1361036767","KW","KWT","KUWAIT" -"1361036768","1361036783","US","USA","UNITED STATES" -"1361036784","1361036787","GB","GBR","UNITED KINGDOM" -"1361036788","1361036791","IQ","IRQ","IRAQ" -"1361036792","1361036795","KW","KWT","KUWAIT" -"1361036796","1361036799","NL","NLD","NETHERLANDS" -"1361036800","1361036823","IQ","IRQ","IRAQ" -"1361036824","1361036827","GB","GBR","UNITED KINGDOM" -"1361036828","1361036831","DZ","DZA","ALGERIA" -"1361036832","1361036847","IQ","IRQ","IRAQ" -"1361036848","1361036851","DZ","DZA","ALGERIA" -"1361036852","1361036855","IQ","IRQ","IRAQ" -"1361036856","1361036863","NL","NLD","NETHERLANDS" -"1361036864","1361036867","IQ","IRQ","IRAQ" -"1361036868","1361036871","DE","DEU","GERMANY" -"1361036872","1361036879","TR","TUR","TURKEY" -"1361036880","1361036887","US","USA","UNITED STATES" -"1361036888","1361036891","GB","GBR","UNITED KINGDOM" -"1361036892","1361036899","NL","NLD","NETHERLANDS" -"1361036900","1361036919","IQ","IRQ","IRAQ" -"1361036920","1361036923","IT","ITA","ITALY" -"1361036924","1361036927","DZ","DZA","ALGERIA" -"1361036928","1361036935","TR","TUR","TURKEY" -"1361036936","1361036943","NL","NLD","NETHERLANDS" -"1361036944","1361036991","IQ","IRQ","IRAQ" -"1361036992","1361037007","TR","TUR","TURKEY" -"1361037008","1361037067","IQ","IRQ","IRAQ" -"1361037068","1361037075","TR","TUR","TURKEY" -"1361037076","1361037079","HU","HUN","HUNGARY" -"1361037080","1361037087","IQ","IRQ","IRAQ" -"1361037088","1361037091","AF","AFG","AFGHANISTAN" -"1361037092","1361037095","IQ","IRQ","IRAQ" -"1361037096","1361037099","IT","ITA","ITALY" -"1361037100","1361037103","TR","TUR","TURKEY" -"1361037104","1361037111","NL","NLD","NETHERLANDS" -"1361037112","1361037115","US","USA","UNITED STATES" -"1361037116","1361037119","IQ","IRQ","IRAQ" -"1361037120","1361037123","US","USA","UNITED STATES" -"1361037124","1361037127","IQ","IRQ","IRAQ" -"1361037128","1361037135","NL","NLD","NETHERLANDS" -"1361037136","1361037151","IQ","IRQ","IRAQ" -"1361037152","1361037159","US","USA","UNITED STATES" -"1361037160","1361037171","IQ","IRQ","IRAQ" -"1361037172","1361037175","TR","TUR","TURKEY" -"1361037176","1361037179","IQ","IRQ","IRAQ" -"1361037180","1361037183","GB","GBR","UNITED KINGDOM" -"1361037184","1361037203","IQ","IRQ","IRAQ" -"1361037204","1361037207","FR","FRA","FRANCE" -"1361037208","1361037215","DE","DEU","GERMANY" -"1361037216","1361037255","IQ","IRQ","IRAQ" -"1361037256","1361037263","NL","NLD","NETHERLANDS" -"1361037264","1361037271","IQ","IRQ","IRAQ" -"1361037272","1361037279","NL","NLD","NETHERLANDS" -"1361037280","1361037295","IQ","IRQ","IRAQ" -"1361037296","1361037311","DZ","DZA","ALGERIA" -"1361037312","1361037319","IQ","IRQ","IRAQ" -"1361037320","1361037327","GB","GBR","UNITED KINGDOM" -"1361037328","1361037351","IQ","IRQ","IRAQ" -"1361037352","1361037359","NL","NLD","NETHERLANDS" -"1361037360","1361037367","IQ","IRQ","IRAQ" -"1361037368","1361037375","TR","TUR","TURKEY" -"1361037376","1361037391","IQ","IRQ","IRAQ" -"1361037392","1361037395","IT","ITA","ITALY" -"1361037396","1361037399","US","USA","UNITED STATES" -"1361037400","1361037407","DZ","DZA","ALGERIA" -"1361037408","1361037415","TR","TUR","TURKEY" -"1361037416","1361037439","IQ","IRQ","IRAQ" -"1361037440","1361037447","TR","TUR","TURKEY" -"1361037448","1361037455","IQ","IRQ","IRAQ" -"1361037456","1361037463","DZ","DZA","ALGERIA" -"1361037464","1361037471","CH","CHE","SWITZERLAND" -"1361037472","1361037479","NL","NLD","NETHERLANDS" -"1361037480","1361037487","DZ","DZA","ALGERIA" -"1361037488","1361037503","IQ","IRQ","IRAQ" -"1361037504","1361037511","DE","DEU","GERMANY" -"1361037512","1361037527","IQ","IRQ","IRAQ" -"1361037528","1361037531","NL","NLD","NETHERLANDS" -"1361037532","1361037535","DZ","DZA","ALGERIA" -"1361037536","1361037551","TR","TUR","TURKEY" -"1361037552","1361037567","IQ","IRQ","IRAQ" -"1361037568","1361037575","TR","TUR","TURKEY" -"1361037576","1361037583","IQ","IRQ","IRAQ" -"1361037584","1361037587","GB","GBR","UNITED KINGDOM" -"1361037588","1361037591","NL","NLD","NETHERLANDS" -"1361037592","1361037607","IQ","IRQ","IRAQ" -"1361037608","1361037611","NL","NLD","NETHERLANDS" -"1361037612","1361037615","ES","ESP","SPAIN" -"1361037616","1361037619","NL","NLD","NETHERLANDS" -"1361037620","1361037627","ES","ESP","SPAIN" -"1361037628","1361037631","IT","ITA","ITALY" -"1361037632","1361037639","DZ","DZA","ALGERIA" -"1361037640","1361037667","IQ","IRQ","IRAQ" -"1361037668","1361037671","DZ","DZA","ALGERIA" -"1361037672","1361037679","TR","TUR","TURKEY" -"1361037680","1361037683","IQ","IRQ","IRAQ" -"1361037684","1361037687","TR","TUR","TURKEY" -"1361037688","1361037695","IQ","IRQ","IRAQ" -"1361037696","1361037703","TR","TUR","TURKEY" -"1361037704","1361037771","IQ","IRQ","IRAQ" -"1361037772","1361037775","GB","GBR","UNITED KINGDOM" -"1361037776","1361037783","NL","NLD","NETHERLANDS" -"1361037784","1361037819","IQ","IRQ","IRAQ" -"1361037820","1361037823","NL","NLD","NETHERLANDS" -"1361037824","1361037835","IQ","IRQ","IRAQ" -"1361037836","1361037839","ES","ESP","SPAIN" -"1361037840","1361037847","IQ","IRQ","IRAQ" -"1361037848","1361037851","NL","NLD","NETHERLANDS" -"1361037852","1361037855","ES","ESP","SPAIN" -"1361037856","1361037871","IQ","IRQ","IRAQ" -"1361037872","1361037875","ES","ESP","SPAIN" -"1361037876","1361037879","NL","NLD","NETHERLANDS" -"1361037880","1361037883","PT","PRT","PORTUGAL" -"1361037884","1361037891","IQ","IRQ","IRAQ" -"1361037892","1361037895","ES","ESP","SPAIN" -"1361037896","1361037899","NL","NLD","NETHERLANDS" -"1361037900","1361037903","IQ","IRQ","IRAQ" -"1361037904","1361037907","NL","NLD","NETHERLANDS" -"1361037908","1361037911","US","USA","UNITED STATES" -"1361037912","1361038007","IQ","IRQ","IRAQ" -"1361038008","1361038015","NL","NLD","NETHERLANDS" -"1361038016","1361038023","IQ","IRQ","IRAQ" -"1361038024","1361038031","IT","ITA","ITALY" -"1361038032","1361038039","IQ","IRQ","IRAQ" -"1361038040","1361038047","US","USA","UNITED STATES" -"1361038048","1361038055","IQ","IRQ","IRAQ" -"1361038056","1361038071","NL","NLD","NETHERLANDS" -"1361038072","1361038087","IQ","IRQ","IRAQ" -"1361038088","1361038095","NL","NLD","NETHERLANDS" -"1361038096","1361038103","US","USA","UNITED STATES" -"1361038104","1361038119","IQ","IRQ","IRAQ" -"1361038120","1361038127","NL","NLD","NETHERLANDS" -"1361038128","1361038135","MA","MAR","MOROCCO" -"1361038136","1361038143","IQ","IRQ","IRAQ" -"1361038144","1361038147","NL","NLD","NETHERLANDS" -"1361038148","1361038159","GB","GBR","UNITED KINGDOM" -"1361038160","1361038163","NL","NLD","NETHERLANDS" -"1361038164","1361038175","GB","GBR","UNITED KINGDOM" -"1361038176","1361038179","NL","NLD","NETHERLANDS" -"1361038180","1361038191","GB","GBR","UNITED KINGDOM" -"1361038192","1361038195","NL","NLD","NETHERLANDS" -"1361038196","1361038199","IQ","IRQ","IRAQ" -"1361038200","1361038211","GB","GBR","UNITED KINGDOM" -"1361038212","1361038215","NL","NLD","NETHERLANDS" -"1361038216","1361038223","GB","GBR","UNITED KINGDOM" -"1361038224","1361038231","IQ","IRQ","IRAQ" -"1361038232","1361038239","DE","DEU","GERMANY" -"1361038240","1361038247","IQ","IRQ","IRAQ" -"1361038248","1361038271","US","USA","UNITED STATES" -"1361038272","1361038275","GB","GBR","UNITED KINGDOM" -"1361038276","1361038279","NL","NLD","NETHERLANDS" -"1361038280","1361038287","GB","GBR","UNITED KINGDOM" -"1361038288","1361038295","NL","NLD","NETHERLANDS" -"1361038296","1361038303","DE","DEU","GERMANY" -"1361038304","1361038311","IQ","IRQ","IRAQ" -"1361038312","1361038319","NL","NLD","NETHERLANDS" -"1361038320","1361038335","US","USA","UNITED STATES" -"1361038336","1361039359","NL","NLD","NETHERLANDS" -"1361039360","1361043455","IT","ITA","ITALY" -"1361043456","1361051647","NO","NOR","NORWAY" -"1361051648","1362100223","ES","ESP","SPAIN" -"1362100224","1362395135","FR","FRA","FRANCE" -"1362395136","1362395183","CH","CHE","SWITZERLAND" -"1362395184","1362395391","FR","FRA","FRANCE" -"1362395392","1362395519","SG","SGP","SINGAPORE" -"1362395520","1362395647","FR","FRA","FRANCE" -"1362395648","1362396159","US","USA","UNITED STATES" -"1362396160","1362396415","FR","FRA","FRANCE" -"1362396416","1362396927","US","USA","UNITED STATES" -"1362396928","1362397183","CM","CMR","CAMEROON" -"1362397184","1362397255","GB","GBR","UNITED KINGDOM" -"1362397256","1362398463","FR","FRA","FRANCE" -"1362398464","1362398719","DE","DEU","GERMANY" -"1362398720","1362399231","FR","FRA","FRANCE" -"1362399232","1362399263","GB","GBR","UNITED KINGDOM" -"1362399264","1362399487","FR","FRA","FRANCE" -"1362399488","1362400767","GB","GBR","UNITED KINGDOM" -"1362400768","1362403583","FR","FRA","FRANCE" -"1362403584","1362405887","DZ","DZA","ALGERIA" -"1362405888","1362406143","FR","FRA","FRANCE" -"1362406144","1362407167","SV","SLV","EL SALVADOR" -"1362407168","1362411519","FR","FRA","FRANCE" -"1362411520","1362413273","MQ","MTQ","MARTINIQUE" -"1362413274","1362413567","FR","FRA","FRANCE" -"1362413568","1362413587","CM","CMR","CAMEROON" -"1362413588","1362414079","FR","FRA","FRANCE" -"1362414080","1362414847","US","USA","UNITED STATES" -"1362414848","1362415103","GB","GBR","UNITED KINGDOM" -"1362415104","1362415359","FR","FRA","FRANCE" -"1362415360","1362415615","DE","DEU","GERMANY" -"1362415616","1362417663","GP","GLP","GUADELOUPE" -"1362417664","1362419711","SG","SGP","SINGAPORE" -"1362419712","1362423039","FR","FRA","FRANCE" -"1362423040","1362423167","SG","SGP","SINGAPORE" -"1362423168","1362423263","FR","FRA","FRANCE" -"1362423264","1362423295","SG","SGP","SINGAPORE" -"1362423296","1362423807","VE","VEN","VENEZUELA" -"1362423808","1362425855","SG","SGP","SINGAPORE" -"1362425856","1362426623","US","USA","UNITED STATES" -"1362426624","1362426879","FR","FRA","FRANCE" -"1362426880","1362427903","MQ","MTQ","MARTINIQUE" -"1362427904","1362755583","FR","FRA","FRANCE" -"1362755584","1362817055","NL","NLD","NETHERLANDS" -"1362817056","1362817063","BE","BEL","BELGIUM" -"1362817064","1362817071","NL","NLD","NETHERLANDS" -"1362817072","1362817087","BE","BEL","BELGIUM" -"1362817088","1362817111","NL","NLD","NETHERLANDS" -"1362817112","1362817119","BE","BEL","BELGIUM" -"1362817120","1362817127","NL","NLD","NETHERLANDS" -"1362817128","1362817135","BE","BEL","BELGIUM" -"1362817136","1362817311","NL","NLD","NETHERLANDS" -"1362817312","1362817343","BE","BEL","BELGIUM" -"1362817344","1362817563","NL","NLD","NETHERLANDS" -"1362817564","1362817567","BE","BEL","BELGIUM" -"1362817568","1362817743","NL","NLD","NETHERLANDS" -"1362817744","1362817791","BE","BEL","BELGIUM" -"1362817792","1362837503","NL","NLD","NETHERLANDS" -"1362837504","1362845695","BE","BEL","BELGIUM" -"1362845696","1362870271","NL","NLD","NETHERLANDS" -"1362870272","1362872319","BE","BEL","BELGIUM" -"1362872320","1362872335","NL","NLD","NETHERLANDS" -"1362872336","1362872343","BE","BEL","BELGIUM" -"1362872344","1362872351","NL","NLD","NETHERLANDS" -"1362872352","1362873855","BE","BEL","BELGIUM" -"1362873856","1362873863","NL","NLD","NETHERLANDS" -"1362873864","1362874367","BE","BEL","BELGIUM" -"1362874368","1362874375","NL","NLD","NETHERLANDS" -"1362874376","1362875903","BE","BEL","BELGIUM" -"1362875904","1362875907","NL","NLD","NETHERLANDS" -"1362875908","1362876423","BE","BEL","BELGIUM" -"1362876424","1362876591","NL","NLD","NETHERLANDS" -"1362876592","1362876607","BE","BEL","BELGIUM" -"1362876608","1362876639","NL","NLD","NETHERLANDS" -"1362876640","1362877955","BE","BEL","BELGIUM" -"1362877956","1362878019","NL","NLD","NETHERLANDS" -"1362878020","1362878463","BE","BEL","BELGIUM" -"1362878464","1362878479","NL","NLD","NETHERLANDS" -"1362878480","1362879999","BE","BEL","BELGIUM" -"1362880000","1362880007","NL","NLD","NETHERLANDS" -"1362880008","1362880511","BE","BEL","BELGIUM" -"1362880512","1362880727","NL","NLD","NETHERLANDS" -"1362880728","1362880735","BE","BEL","BELGIUM" -"1362880736","1362880967","NL","NLD","NETHERLANDS" -"1362880968","1362880975","BE","BEL","BELGIUM" -"1362880976","1362881023","NL","NLD","NETHERLANDS" -"1362881024","1362881055","BE","BEL","BELGIUM" -"1362881056","1362881111","NL","NLD","NETHERLANDS" -"1362881112","1362882047","BE","BEL","BELGIUM" -"1362882048","1362882143","NL","NLD","NETHERLANDS" -"1362882144","1362882147","BE","BEL","BELGIUM" -"1362882148","1362882207","NL","NLD","NETHERLANDS" -"1362882208","1362882211","BE","BEL","BELGIUM" -"1362882212","1362882231","NL","NLD","NETHERLANDS" -"1362882232","1362884095","BE","BEL","BELGIUM" -"1362884096","1362884099","NL","NLD","NETHERLANDS" -"1362884100","1362885119","BE","BEL","BELGIUM" -"1362885120","1362886399","NL","NLD","NETHERLANDS" -"1362886400","1362886400","BE","BEL","BELGIUM" -"1362886401","1362886409","NL","NLD","NETHERLANDS" -"1362886410","1362886413","BE","BEL","BELGIUM" -"1362886414","1362886416","NL","NLD","NETHERLANDS" -"1362886417","1362886419","BE","BEL","BELGIUM" -"1362886420","1362886421","NL","NLD","NETHERLANDS" -"1362886422","1362886422","BE","BEL","BELGIUM" -"1362886423","1362886423","NL","NLD","NETHERLANDS" -"1362886424","1362886655","BE","BEL","BELGIUM" -"1362886656","1363017727","ES","ESP","SPAIN" -"1363017728","1363148799","CH","CHE","SWITZERLAND" -"1363148800","1363410943","FR","FRA","FRANCE" -"1363410944","1363673087","NL","NLD","NETHERLANDS" -"1363673088","1363935231","IT","ITA","ITALY" -"1363935232","1364197375","GB","GBR","UNITED KINGDOM" -"1364197376","1364204034","FR","FRA","FRANCE" -"1364204035","1364204035","GB","GBR","UNITED KINGDOM" -"1364204036","1364262911","FR","FRA","FRANCE" -"1364262912","1364328447","IT","ITA","ITALY" -"1364328448","1364459519","BE","BEL","BELGIUM" -"1364459520","1364525055","PT","PRT","PORTUGAL" -"1364525056","1364526335","NL","NLD","NETHERLANDS" -"1364526336","1364526591","US","USA","UNITED STATES" -"1364526592","1364528639","GB","GBR","UNITED KINGDOM" -"1364528640","1364528895","UA","UKR","UKRAINE" -"1364528896","1364530175","GB","GBR","UNITED KINGDOM" -"1364530176","1364539903","NL","NLD","NETHERLANDS" -"1364539904","1364540159","US","USA","UNITED STATES" -"1364540160","1364540671","NL","NLD","NETHERLANDS" -"1364540672","1364540927","US","USA","UNITED STATES" -"1364540928","1364577791","NL","NLD","NETHERLANDS" -"1364577792","1364578303","GB","GBR","UNITED KINGDOM" -"1364578304","1364581375","NL","NLD","NETHERLANDS" -"1364581376","1364582399","LY","LBY","LIBYAN ARAB JAMAHIRIYA" -"1364582400","1364582415","NL","NLD","NETHERLANDS" -"1364582416","1364582431","LB","LBN","LEBANON" -"1364582432","1364585983","NL","NLD","NETHERLANDS" -"1364585984","1364586240","LB","LBN","LEBANON" -"1364586241","1364586495","NL","NLD","NETHERLANDS" -"1364586496","1364586752","LB","LBN","LEBANON" -"1364586753","1364590591","NL","NLD","NETHERLANDS" -"1364590592","1364721663","GB","GBR","UNITED KINGDOM" -"1364721664","1364725759","SE","SWE","SWEDEN" -"1364725760","1364733951","DE","DEU","GERMANY" -"1364733952","1364738047","IT","ITA","ITALY" -"1364738048","1364742143","NO","NOR","NORWAY" -"1364742144","1364746239","RU","RUS","RUSSIAN FEDERATION" -"1364746240","1364749311","FR","FRA","FRANCE" -"1364749312","1364749374","BE","BEL","BELGIUM" -"1364749375","1364749455","FR","FRA","FRANCE" -"1364749456","1364749463","BE","BEL","BELGIUM" -"1364749464","1364749471","FR","FRA","FRANCE" -"1364749472","1364749583","BE","BEL","BELGIUM" -"1364749584","1364749599","FR","FRA","FRANCE" -"1364749600","1364749696","BE","BEL","BELGIUM" -"1364749697","1364749823","FR","FRA","FRANCE" -"1364749824","1364750079","BE","BEL","BELGIUM" -"1364750080","1364750335","FR","FRA","FRANCE" -"1364750336","1364754431","RU","RUS","RUSSIAN FEDERATION" -"1364754432","1364758527","SK","SVK","SLOVAKIA" -"1364758528","1364762623","KZ","KAZ","KAZAKHSTAN" -"1364762624","1364766719","GB","GBR","UNITED KINGDOM" -"1364766720","1364770815","CH","CHE","SWITZERLAND" -"1364770816","1364774911","KG","KGZ","KYRGYZSTAN" -"1364774912","1364779007","RU","RUS","RUSSIAN FEDERATION" -"1364779008","1364787199","IT","ITA","ITALY" -"1364787200","1364795391","RO","ROM","ROMANIA" -"1364795392","1364799487","ES","ESP","SPAIN" -"1364799488","1364803583","SK","SVK","SLOVAKIA" -"1364803584","1364811775","RU","RUS","RUSSIAN FEDERATION" -"1364811776","1364811807","LU","LUX","LUXEMBOURG" -"1364811808","1364815871","DE","DEU","GERMANY" -"1364815872","1364819967","RU","RUS","RUSSIAN FEDERATION" -"1364819968","1364824063","GB","GBR","UNITED KINGDOM" -"1364824064","1364828159","SE","SWE","SWEDEN" -"1364828160","1364829439","GB","GBR","UNITED KINGDOM" -"1364829440","1364829487","FR","FRA","FRANCE" -"1364829488","1364829503","GB","GBR","UNITED KINGDOM" -"1364829504","1364829527","FR","FRA","FRANCE" -"1364829528","1364832255","GB","GBR","UNITED KINGDOM" -"1364832256","1364836351","RU","RUS","RUSSIAN FEDERATION" -"1364836352","1364840447","DE","DEU","GERMANY" -"1364840448","1364844543","AM","ARM","ARMENIA" -"1364844544","1364852111","DE","DEU","GERMANY" -"1364852112","1364852127","GB","GBR","UNITED KINGDOM" -"1364852128","1364852479","DE","DEU","GERMANY" -"1364852480","1364852735","GB","GBR","UNITED KINGDOM" -"1364852736","1364856831","RU","RUS","RUSSIAN FEDERATION" -"1364856832","1364860927","IQ","IRQ","IRAQ" -"1364860928","1364865023","DE","DEU","GERMANY" -"1364865024","1364869119","PT","PRT","PORTUGAL" -"1364869120","1364873215","FI","FIN","FINLAND" -"1364873216","1364877311","GB","GBR","UNITED KINGDOM" -"1364877312","1364881407","ES","ESP","SPAIN" -"1364881408","1364885503","EE","EST","ESTONIA" -"1364885504","1364889599","GB","GBR","UNITED KINGDOM" -"1364889600","1364893695","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1364893696","1364897791","CZ","CZE","CZECH REPUBLIC" -"1364897792","1364901887","SI","SVN","SLOVENIA" -"1364901888","1364905983","DE","DEU","GERMANY" -"1364905984","1364910079","RU","RUS","RUSSIAN FEDERATION" -"1364910080","1364914175","UA","UKR","UKRAINE" -"1364914176","1364918271","CZ","CZE","CZECH REPUBLIC" -"1364918272","1364922367","NL","NLD","NETHERLANDS" -"1364922368","1364926463","TR","TUR","TURKEY" -"1364926464","1364934655","RU","RUS","RUSSIAN FEDERATION" -"1364934656","1364938751","FR","FRA","FRANCE" -"1364938752","1364942847","CZ","CZE","CZECH REPUBLIC" -"1364942848","1364946943","GB","GBR","UNITED KINGDOM" -"1364946944","1364947167","TR","TUR","TURKEY" -"1364947168","1364947199","US","USA","UNITED STATES" -"1364947200","1364948479","GB","GBR","UNITED KINGDOM" -"1364948480","1364949247","TR","TUR","TURKEY" -"1364949248","1364949503","CY","CYP","CYPRUS" -"1364949504","1364949759","TR","TUR","TURKEY" -"1364949760","1364950015","CY","CYP","CYPRUS" -"1364950016","1364950527","TR","TUR","TURKEY" -"1364950528","1364950783","CY","CYP","CYPRUS" -"1364950784","1364950847","TR","TUR","TURKEY" -"1364950848","1364950911","GB","GBR","UNITED KINGDOM" -"1364950912","1364951039","TR","TUR","TURKEY" -"1364951040","1364959231","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1364959232","1364963327","DE","DEU","GERMANY" -"1364963328","1364967423","RU","RUS","RUSSIAN FEDERATION" -"1364967424","1364971519","GB","GBR","UNITED KINGDOM" -"1364971520","1364975615","CZ","CZE","CZECH REPUBLIC" -"1364979712","1364983807","GB","GBR","UNITED KINGDOM" -"1364983808","1364991999","DE","DEU","GERMANY" -"1364992000","1364996095","IT","ITA","ITALY" -"1364996096","1365000191","GR","GRC","GREECE" -"1365000192","1365002431","SE","SWE","SWEDEN" -"1365002432","1365002447","GB","GBR","UNITED KINGDOM" -"1365002448","1365002751","SE","SWE","SWEDEN" -"1365002752","1365003263","GB","GBR","UNITED KINGDOM" -"1365003264","1365003903","SE","SWE","SWEDEN" -"1365003904","1365004035","GB","GBR","UNITED KINGDOM" -"1365004036","1365004039","SE","SWE","SWEDEN" -"1365004040","1365004047","GB","GBR","UNITED KINGDOM" -"1365004048","1365004063","SE","SWE","SWEDEN" -"1365004064","1365004287","GB","GBR","UNITED KINGDOM" -"1365004288","1365008383","FR","FRA","FRANCE" -"1365008384","1365012479","CH","CHE","SWITZERLAND" -"1365012480","1365016575","FR","FRA","FRANCE" -"1365016576","1365020671","ES","ESP","SPAIN" -"1365020672","1365024767","CZ","CZE","CZECH REPUBLIC" -"1365024768","1365027839","DE","DEU","GERMANY" -"1365027840","1365027871","US","USA","UNITED STATES" -"1365027872","1365028863","DE","DEU","GERMANY" -"1365028864","1365032959","NL","NLD","NETHERLANDS" -"1365032960","1365041151","PT","PRT","PORTUGAL" -"1365041152","1365041407","IQ","IRQ","IRAQ" -"1365041408","1365041663","LU","LUX","LUXEMBOURG" -"1365041664","1365041695","FR","FRA","FRANCE" -"1365041696","1365041727","GB","GBR","UNITED KINGDOM" -"1365041728","1365042047","LU","LUX","LUXEMBOURG" -"1365042048","1365042055","GB","GBR","UNITED KINGDOM" -"1365042056","1365044895","LU","LUX","LUXEMBOURG" -"1365044896","1365044903","FR","FRA","FRANCE" -"1365044904","1365045247","LU","LUX","LUXEMBOURG" -"1365045248","1365045535","AT","AUT","AUSTRIA" -"1365045536","1365045543","BA","BIH","BOSNIA AND HERZEGOVINA" -"1365045544","1365045551","BG","BGR","BULGARIA" -"1365045552","1365045559","DE","DEU","GERMANY" -"1365045560","1365045567","GB","GBR","UNITED KINGDOM" -"1365045568","1365045575","HR","HRV","CROATIA" -"1365045576","1365045583","AT","AUT","AUSTRIA" -"1365045584","1365045591","PL","POL","POLAND" -"1365045592","1365045599","RO","ROM","ROMANIA" -"1365045600","1365045607","RU","RUS","RUSSIAN FEDERATION" -"1365045608","1365045615","RS","SRB","SERBIA" -"1365045616","1365045623","SI","SVN","SLOVENIA" -"1365045624","1365045631","SK","SVK","SLOVAKIA" -"1365045632","1365045639","CZ","CZE","CZECH REPUBLIC" -"1365045640","1365045647","UA","UKR","UKRAINE" -"1365045648","1365045663","HU","HUN","HUNGARY" -"1365045664","1365047295","AT","AUT","AUSTRIA" -"1365047296","1365047423","SK","SVK","SLOVAKIA" -"1365047424","1365047551","AT","AUT","AUSTRIA" -"1365047552","1365047647","SK","SVK","SLOVAKIA" -"1365047648","1365047679","AT","AUT","AUSTRIA" -"1365047680","1365047807","SK","SVK","SLOVAKIA" -"1365047808","1365047871","AT","AUT","AUSTRIA" -"1365047872","1365047903","SK","SVK","SLOVAKIA" -"1365047904","1365047999","AT","AUT","AUSTRIA" -"1365048000","1365048191","SK","SVK","SLOVAKIA" -"1365048192","1365048255","AT","AUT","AUSTRIA" -"1365048256","1365048383","SK","SVK","SLOVAKIA" -"1365048384","1365048511","AT","AUT","AUSTRIA" -"1365048512","1365048607","SK","SVK","SLOVAKIA" -"1365048608","1365048703","AT","AUT","AUSTRIA" -"1365048704","1365048887","SK","SVK","SLOVAKIA" -"1365048888","1365048895","AT","AUT","AUSTRIA" -"1365048896","1365048927","SK","SVK","SLOVAKIA" -"1365048928","1365049343","AT","AUT","AUSTRIA" -"1365049344","1365057535","FR","FRA","FRANCE" -"1365057536","1365061631","IT","ITA","ITALY" -"1365061632","1365065727","NL","NLD","NETHERLANDS" -"1365065728","1365073919","BA","BIH","BOSNIA AND HERZEGOVINA" -"1365073920","1365078015","NO","NOR","NORWAY" -"1365078016","1365082111","DE","DEU","GERMANY" -"1365082112","1365090303","SE","SWE","SWEDEN" -"1365090304","1365094399","NO","NOR","NORWAY" -"1365094400","1365095087","FR","FRA","FRANCE" -"1365095088","1365095095","GB","GBR","UNITED KINGDOM" -"1365095096","1365095575","FR","FRA","FRANCE" -"1365095576","1365095583","GB","GBR","UNITED KINGDOM" -"1365095584","1365096703","FR","FRA","FRANCE" -"1365096704","1365096711","GB","GBR","UNITED KINGDOM" -"1365096712","1365096735","FR","FRA","FRANCE" -"1365096736","1365096767","IT","ITA","ITALY" -"1365096768","1365097215","FR","FRA","FRANCE" -"1365097216","1365097471","ES","ESP","SPAIN" -"1365097472","1365097727","FR","FRA","FRANCE" -"1365097728","1365097983","CH","CHE","SWITZERLAND" -"1365097984","1365098495","FR","FRA","FRANCE" -"1365098496","1365102591","HU","HUN","HUNGARY" -"1365102592","1365102911","ES","ESP","SPAIN" -"1365102912","1365102919","GB","GBR","UNITED KINGDOM" -"1365102920","1365103383","ES","ESP","SPAIN" -"1365103384","1365103391","GB","GBR","UNITED KINGDOM" -"1365103392","1365103479","ES","ESP","SPAIN" -"1365103480","1365103487","GB","GBR","UNITED KINGDOM" -"1365103488","1365103519","ES","ESP","SPAIN" -"1365103520","1365103551","GB","GBR","UNITED KINGDOM" -"1365103552","1365103679","ES","ESP","SPAIN" -"1365103680","1365103743","GB","GBR","UNITED KINGDOM" -"1365103744","1365103775","ES","ESP","SPAIN" -"1365103776","1365103791","GB","GBR","UNITED KINGDOM" -"1365103792","1365103871","ES","ESP","SPAIN" -"1365103872","1365104135","GB","GBR","UNITED KINGDOM" -"1365104136","1365104199","ES","ESP","SPAIN" -"1365104200","1365104207","GB","GBR","UNITED KINGDOM" -"1365104208","1365106687","ES","ESP","SPAIN" -"1365106688","1365110783","GB","GBR","UNITED KINGDOM" -"1365110784","1365114879","FR","FRA","FRANCE" -"1365114880","1365118975","BA","BIH","BOSNIA AND HERZEGOVINA" -"1365118976","1365127167","RU","RUS","RUSSIAN FEDERATION" -"1365127168","1365130271","AT","AUT","AUSTRIA" -"1365130272","1365130303","IT","ITA","ITALY" -"1365130304","1365130495","AT","AUT","AUSTRIA" -"1365130496","1365131007","IT","ITA","ITALY" -"1365131008","1365131263","AT","AUT","AUSTRIA" -"1365131264","1365139455","SE","SWE","SWEDEN" -"1365139456","1365147647","CH","CHE","SWITZERLAND" -"1365147648","1365155839","RU","RUS","RUSSIAN FEDERATION" -"1365155840","1365159935","SE","SWE","SWEDEN" -"1365159936","1365164031","HU","HUN","HUNGARY" -"1365164032","1365166255","GB","GBR","UNITED KINGDOM" -"1365166256","1365166271","IE","IRL","IRELAND" -"1365166272","1365172223","GB","GBR","UNITED KINGDOM" -"1365172224","1365176319","LV","LVA","LATVIA" -"1365176320","1365180415","HU","HUN","HUNGARY" -"1365180416","1365183231","DE","DEU","GERMANY" -"1365183232","1365183295","SC","SYC","SEYCHELLES" -"1365183296","1365184511","DE","DEU","GERMANY" -"1365184512","1365192703","RU","RUS","RUSSIAN FEDERATION" -"1365192704","1365196799","GB","GBR","UNITED KINGDOM" -"1365196800","1365200895","ES","ESP","SPAIN" -"1365200896","1365204991","IQ","IRQ","IRAQ" -"1365204992","1365209087","CZ","CZE","CZECH REPUBLIC" -"1365209088","1365213183","BE","BEL","BELGIUM" -"1365213184","1365217279","RU","RUS","RUSSIAN FEDERATION" -"1365217280","1365220391","GB","GBR","UNITED KINGDOM" -"1365220392","1365220399","ZA","ZAF","SOUTH AFRICA" -"1365220400","1365220471","GB","GBR","UNITED KINGDOM" -"1365220472","1365220479","US","USA","UNITED STATES" -"1365220480","1365220487","AU","AUS","AUSTRALIA" -"1365220488","1365220495","GB","GBR","UNITED KINGDOM" -"1365220496","1365220503","US","USA","UNITED STATES" -"1365220504","1365220511","GB","GBR","UNITED KINGDOM" -"1365220512","1365220519","US","USA","UNITED STATES" -"1365220520","1365220527","GB","GBR","UNITED KINGDOM" -"1365220528","1365220535","IS","ISL","ICELAND" -"1365220536","1365220551","GB","GBR","UNITED KINGDOM" -"1365220552","1365220567","IS","ISL","ICELAND" -"1365220568","1365220575","GB","GBR","UNITED KINGDOM" -"1365220576","1365220583","CH","CHE","SWITZERLAND" -"1365220584","1365220599","TR","TUR","TURKEY" -"1365220600","1365220607","GR","GRC","GREECE" -"1365220608","1365220615","TR","TUR","TURKEY" -"1365220616","1365220623","GB","GBR","UNITED KINGDOM" -"1365220624","1365220631","US","USA","UNITED STATES" -"1365220632","1365220663","GB","GBR","UNITED KINGDOM" -"1365220664","1365220679","US","USA","UNITED STATES" -"1365220680","1365220687","IT","ITA","ITALY" -"1365220688","1365220703","US","USA","UNITED STATES" -"1365220704","1365220719","GB","GBR","UNITED KINGDOM" -"1365220720","1365220727","US","USA","UNITED STATES" -"1365220728","1365220735","GB","GBR","UNITED KINGDOM" -"1365220736","1365220743","US","USA","UNITED STATES" -"1365220744","1365220767","GB","GBR","UNITED KINGDOM" -"1365220768","1365220775","GR","GRC","GREECE" -"1365220776","1365220783","JO","JOR","JORDAN" -"1365220784","1365220791","IN","IND","INDIA" -"1365220792","1365220799","KW","KWT","KUWAIT" -"1365220800","1365220807","RU","RUS","RUSSIAN FEDERATION" -"1365220808","1365220815","GB","GBR","UNITED KINGDOM" -"1365220816","1365220823","IN","IND","INDIA" -"1365220824","1365220831","GB","GBR","UNITED KINGDOM" -"1365220832","1365220839","IT","ITA","ITALY" -"1365220840","1365220847","GB","GBR","UNITED KINGDOM" -"1365220848","1365220855","AU","AUS","AUSTRALIA" -"1365220856","1365220863","US","USA","UNITED STATES" -"1365220864","1365220895","GB","GBR","UNITED KINGDOM" -"1365220896","1365220903","GR","GRC","GREECE" -"1365220904","1365221375","GB","GBR","UNITED KINGDOM" -"1365221376","1365225471","GE","GEO","GEORGIA" -"1365225472","1365229567","UA","UKR","UKRAINE" -"1365229568","1365231103","PL","POL","POLAND" -"1365231104","1365231359","NL","NLD","NETHERLANDS" -"1365231360","1365233151","PL","POL","POLAND" -"1365233152","1365233279","NL","NLD","NETHERLANDS" -"1365233280","1365233375","PL","POL","POLAND" -"1365233376","1365233391","NL","NLD","NETHERLANDS" -"1365233392","1365233631","PL","POL","POLAND" -"1365233632","1365233647","NL","NLD","NETHERLANDS" -"1365233648","1365233663","PL","POL","POLAND" -"1365233664","1365237759","RU","RUS","RUSSIAN FEDERATION" -"1365237760","1365241855","UZ","UZB","UZBEKISTAN" -"1365241856","1365245951","DK","DNK","DENMARK" -"1365245952","1366294527","GB","GBR","UNITED KINGDOM" -"1366294528","1367343103","IT","ITA","ITALY" -"1367343104","1369440255","GB","GBR","UNITED KINGDOM" -"1369440256","1369473023","DE","DEU","GERMANY" -"1369473024","1369505791","HU","HUN","HUNGARY" -"1369505792","1369538559","DE","DEU","GERMANY" -"1369538560","1369554943","DK","DNK","DENMARK" -"1369554944","1369559039","PL","POL","POLAND" -"1369559040","1369563135","RU","RUS","RUSSIAN FEDERATION" -"1369563136","1369567231","PL","POL","POLAND" -"1369567232","1369571327","BG","BGR","BULGARIA" -"1369702400","1369833471","BE","BEL","BELGIUM" -"1369833472","1369964543","NO","NOR","NORWAY" -"1369964544","1369997311","GB","GBR","UNITED KINGDOM" -"1369997312","1370030079","PL","POL","POLAND" -"1370030080","1370062847","BE","BEL","BELGIUM" -"1370062848","1370095615","DE","DEU","GERMANY" -"1370095616","1370128383","GB","GBR","UNITED KINGDOM" -"1370128384","1370161151","SE","SWE","SWEDEN" -"1370161152","1370187775","NL","NLD","NETHERLANDS" -"1370187776","1370188031","GR","GRC","GREECE" -"1370188032","1370193919","NL","NLD","NETHERLANDS" -"1370193920","1370226687","GB","GBR","UNITED KINGDOM" -"1370226688","1370259455","ES","ESP","SPAIN" -"1370259456","1370292223","SE","SWE","SWEDEN" -"1370292224","1370299903","NL","NLD","NETHERLANDS" -"1370299904","1370300159","US","USA","UNITED STATES" -"1370300160","1370324991","NL","NLD","NETHERLANDS" -"1370324992","1370357759","DE","DEU","GERMANY" -"1370357760","1370390527","IT","ITA","ITALY" -"1370390528","1370423295","GB","GBR","UNITED KINGDOM" -"1370423296","1370439679","NO","NOR","NORWAY" -"1370439680","1370456063","NL","NLD","NETHERLANDS" -"1370456064","1370488831","FI","FIN","FINLAND" -"1370488832","1370505855","RU","RUS","RUSSIAN FEDERATION" -"1370505856","1370505871","CY","CYP","CYPRUS" -"1370505872","1370508895","RU","RUS","RUSSIAN FEDERATION" -"1370508896","1370508911","CY","CYP","CYPRUS" -"1370508912","1370555887","RU","RUS","RUSSIAN FEDERATION" -"1370555888","1370555903","CY","CYP","CYPRUS" -"1370555904","1370563967","RU","RUS","RUSSIAN FEDERATION" -"1370563968","1370564031","US","USA","UNITED STATES" -"1370564032","1370619903","RU","RUS","RUSSIAN FEDERATION" -"1370619904","1370750975","GB","GBR","UNITED KINGDOM" -"1370750976","1370767359","RO","ROM","ROMANIA" -"1370767360","1370771455","MD","MDA","REPUBLIC OF MOLDOVA" -"1370771456","1370772479","RO","ROM","ROMANIA" -"1370772480","1370772991","MD","MDA","REPUBLIC OF MOLDOVA" -"1370772992","1370882047","RO","ROM","ROMANIA" -"1370882048","1371013119","HU","HUN","HUNGARY" -"1371013120","1371078655","ES","ESP","SPAIN" -"1371078656","1371144191","FR","FRA","FRANCE" -"1371144192","1371201535","GR","GRC","GREECE" -"1371201536","1371205631","PL","POL","POLAND" -"1371205632","1371209727","SE","SWE","SWEDEN" -"1371209728","1371275263","GB","GBR","UNITED KINGDOM" -"1371275264","1371340799","BE","BEL","BELGIUM" -"1371340800","1371374740","AT","AUT","AUSTRIA" -"1371374741","1371374741","SK","SVK","SLOVAKIA" -"1371374742","1371406335","AT","AUT","AUSTRIA" -"1371406336","1371471871","PL","POL","POLAND" -"1371471872","1371537407","NO","NOR","NORWAY" -"1371602944","1371668479","PT","PRT","PORTUGAL" -"1371668480","1371734015","FR","FRA","FRANCE" -"1371734016","1371799551","RU","RUS","RUSSIAN FEDERATION" -"1371799552","1371865087","RO","ROM","ROMANIA" -"1371865088","1371930623","FI","FIN","FINLAND" -"1371930624","1371996159","LV","LVA","LATVIA" -"1371996160","1371997183","GB","GBR","UNITED KINGDOM" -"1371997184","1371997439","KE","KEN","KENYA" -"1371997440","1371998207","NG","NGA","NIGERIA" -"1371998208","1371998463","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"1371998464","1371998719","NG","NGA","NIGERIA" -"1371998720","1372000255","GB","GBR","UNITED KINGDOM" -"1372000256","1372004351","UG","UGA","UGANDA" -"1372004352","1372006399","GB","GBR","UNITED KINGDOM" -"1372006400","1372006407","NG","NGA","NIGERIA" -"1372006408","1372006463","GB","GBR","UNITED KINGDOM" -"1372006464","1372006495","NG","NGA","NIGERIA" -"1372006496","1372007039","GB","GBR","UNITED KINGDOM" -"1372007040","1372007455","NG","NGA","NIGERIA" -"1372007456","1372008095","GB","GBR","UNITED KINGDOM" -"1372008096","1372008127","NG","NGA","NIGERIA" -"1372008128","1372008159","GB","GBR","UNITED KINGDOM" -"1372008160","1372008191","NG","NGA","NIGERIA" -"1372008192","1372008927","GB","GBR","UNITED KINGDOM" -"1372008928","1372008959","MW","MWI","MALAWI" -"1372008960","1372010239","GB","GBR","UNITED KINGDOM" -"1372010240","1372010272","NG","NGA","NIGERIA" -"1372010273","1372010967","GB","GBR","UNITED KINGDOM" -"1372010968","1372011007","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"1372011008","1372011775","GB","GBR","UNITED KINGDOM" -"1372011776","1372012031","ZM","ZMB","ZAMBIA" -"1372012032","1372012543","GB","GBR","UNITED KINGDOM" -"1372012544","1372014591","ZM","ZMB","ZAMBIA" -"1372014592","1372015615","GB","GBR","UNITED KINGDOM" -"1372015616","1372015871","NG","NGA","NIGERIA" -"1372015872","1372016127","GB","GBR","UNITED KINGDOM" -"1372016128","1372016383","GH","GHA","GHANA" -"1372016384","1372019199","GB","GBR","UNITED KINGDOM" -"1372019200","1372019455","GA","GAB","GABON" -"1372019456","1372020735","GB","GBR","UNITED KINGDOM" -"1372020736","1372022783","ZM","ZMB","ZAMBIA" -"1372022784","1372024831","GB","GBR","UNITED KINGDOM" -"1372024832","1372025087","ZM","ZMB","ZAMBIA" -"1372025088","1372025631","GB","GBR","UNITED KINGDOM" -"1372025632","1372025663","ZM","ZMB","ZAMBIA" -"1372025664","1372025695","KE","KEN","KENYA" -"1372025696","1372025727","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"1372025728","1372025855","GB","GBR","UNITED KINGDOM" -"1372025856","1372026367","IL","ISR","ISRAEL" -"1372026368","1372026879","GB","GBR","UNITED KINGDOM" -"1372026880","1372027903","IL","ISR","ISRAEL" -"1372027904","1372029439","GB","GBR","UNITED KINGDOM" -"1372029440","1372029695","NG","NGA","NIGERIA" -"1372029696","1372029951","NE","NER","NIGER" -"1372029952","1372031999","GB","GBR","UNITED KINGDOM" -"1372032000","1372032255","CM","CMR","CAMEROON" -"1372032256","1372041343","GB","GBR","UNITED KINGDOM" -"1372041344","1372041471","NG","NGA","NIGERIA" -"1372041472","1372042239","GB","GBR","UNITED KINGDOM" -"1372042240","1372042495","LR","LBR","LIBERIA" -"1372042496","1372043519","GB","GBR","UNITED KINGDOM" -"1372043520","1372043775","NG","NGA","NIGERIA" -"1372043776","1372044415","GB","GBR","UNITED KINGDOM" -"1372044416","1372044447","NG","NGA","NIGERIA" -"1372044448","1372044799","GB","GBR","UNITED KINGDOM" -"1372044800","1372044863","CM","CMR","CAMEROON" -"1372044864","1372044927","NG","NGA","NIGERIA" -"1372044928","1372045055","GB","GBR","UNITED KINGDOM" -"1372045056","1372045087","CM","CMR","CAMEROON" -"1372045088","1372045119","GB","GBR","UNITED KINGDOM" -"1372045120","1372045151","NG","NGA","NIGERIA" -"1372045152","1372045567","GB","GBR","UNITED KINGDOM" -"1372045568","1372045887","NG","NGA","NIGERIA" -"1372045888","1372046559","GB","GBR","UNITED KINGDOM" -"1372046560","1372046591","NG","NGA","NIGERIA" -"1372046592","1372047231","GB","GBR","UNITED KINGDOM" -"1372047232","1372047295","NG","NGA","NIGERIA" -"1372047296","1372047359","GB","GBR","UNITED KINGDOM" -"1372047360","1372047615","CM","CMR","CAMEROON" -"1372047616","1372049919","GB","GBR","UNITED KINGDOM" -"1372049920","1372050175","NG","NGA","NIGERIA" -"1372050176","1372060159","GB","GBR","UNITED KINGDOM" -"1372060160","1372061695","IL","ISR","ISRAEL" -"1372061696","1372069887","RU","RUS","RUSSIAN FEDERATION" -"1372069888","1372073983","FR","FRA","FRANCE" -"1372073984","1372078079","CZ","CZE","CZECH REPUBLIC" -"1372078080","1372082175","GB","GBR","UNITED KINGDOM" -"1372082176","1372086271","RU","RUS","RUSSIAN FEDERATION" -"1372086272","1372090367","DE","DEU","GERMANY" -"1372090368","1372094463","RU","RUS","RUSSIAN FEDERATION" -"1372094464","1372098559","IT","ITA","ITALY" -"1372098560","1372102655","RU","RUS","RUSSIAN FEDERATION" -"1372102656","1372106751","SE","SWE","SWEDEN" -"1372106752","1372110591","FR","FRA","FRANCE" -"1372110592","1372110623","GB","GBR","UNITED KINGDOM" -"1372110624","1372110655","DE","DEU","GERMANY" -"1372110656","1372110687","IT","ITA","ITALY" -"1372110688","1372110719","ES","ESP","SPAIN" -"1372110720","1372110751","FR","FRA","FRANCE" -"1372110752","1372110783","NL","NLD","NETHERLANDS" -"1372110784","1372110847","FR","FRA","FRANCE" -"1372110848","1372114943","DE","DEU","GERMANY" -"1372114944","1372119039","RU","RUS","RUSSIAN FEDERATION" -"1372119040","1372123135","IT","ITA","ITALY" -"1372123136","1372127231","RU","RUS","RUSSIAN FEDERATION" -"1372127232","1372131327","IT","ITA","ITALY" -"1372131328","1372135423","RU","RUS","RUSSIAN FEDERATION" -"1372135424","1372138255","DE","DEU","GERMANY" -"1372138256","1372138263","GB","GBR","UNITED KINGDOM" -"1372138264","1372139519","DE","DEU","GERMANY" -"1372139520","1372143615","CZ","CZE","CZECH REPUBLIC" -"1372143616","1372147711","RU","RUS","RUSSIAN FEDERATION" -"1372147712","1372151807","BE","BEL","BELGIUM" -"1372151808","1372152823","DE","DEU","GERMANY" -"1372152824","1372152831","GB","GBR","UNITED KINGDOM" -"1372152832","1372159999","DE","DEU","GERMANY" -"1372160000","1372164095","GB","GBR","UNITED KINGDOM" -"1372164096","1372168191","DE","DEU","GERMANY" -"1372168192","1372172287","GB","GBR","UNITED KINGDOM" -"1372172288","1372176383","FR","FRA","FRANCE" -"1372176384","1372180479","CH","CHE","SWITZERLAND" -"1372180480","1372184071","SE","SWE","SWEDEN" -"1372184072","1372184079","ES","ESP","SPAIN" -"1372184080","1372184575","SE","SWE","SWEDEN" -"1372184576","1372188671","DE","DEU","GERMANY" -"1372188672","1372192767","RU","RUS","RUSSIAN FEDERATION" -"1372192768","1372323839","ES","ESP","SPAIN" -"1372323840","1372585983","NL","NLD","NETHERLANDS" -"1372585984","1372610047","IT","ITA","ITALY" -"1372610048","1372610303","VA","VAT","HOLY SEE (VATICAN CITY STATE)" -"1372610304","1372618751","IT","ITA","ITALY" -"1372618752","1372651519","GB","GBR","UNITED KINGDOM" -"1372651520","1372684287","FI","FIN","FINLAND" -"1372684288","1372684415","DE","DEU","GERMANY" -"1372684544","1372685631","DE","DEU","GERMANY" -"1372685656","1372685663","DE","DEU","GERMANY" -"1372685696","1372685823","DE","DEU","GERMANY" -"1372685888","1372686335","DE","DEU","GERMANY" -"1372687360","1372687711","DE","DEU","GERMANY" -"1372687720","1372687727","DE","DEU","GERMANY" -"1372687736","1372688199","DE","DEU","GERMANY" -"1372688224","1372689839","DE","DEU","GERMANY" -"1372689856","1372691455","DE","DEU","GERMANY" -"1372691456","1372691711","US","USA","UNITED STATES" -"1372691968","1372694271","DE","DEU","GERMANY" -"1372694336","1372694367","DE","DEU","GERMANY" -"1372694560","1372694591","DE","DEU","GERMANY" -"1372694624","1372694719","DE","DEU","GERMANY" -"1372694784","1372694815","DE","DEU","GERMANY" -"1372694832","1372695039","DE","DEU","GERMANY" -"1372695168","1372695295","DE","DEU","GERMANY" -"1372695424","1372695551","DE","DEU","GERMANY" -"1372695552","1372695807","CZ","CZE","CZECH REPUBLIC" -"1372695808","1372696007","DK","DNK","DENMARK" -"1372696064","1372697215","DE","DEU","GERMANY" -"1372697232","1372697239","DE","DEU","GERMANY" -"1372697248","1372697279","DE","DEU","GERMANY" -"1372697344","1372698471","DE","DEU","GERMANY" -"1372698560","1372700159","DE","DEU","GERMANY" -"1372700160","1372700415","SE","SWE","SWEDEN" -"1372700672","1372702463","DE","DEU","GERMANY" -"1372702720","1372702735","DE","DEU","GERMANY" -"1372702752","1372702991","DE","DEU","GERMANY" -"1372703232","1372703263","DE","DEU","GERMANY" -"1372703272","1372703323","DE","DEU","GERMANY" -"1372703328","1372703407","DE","DEU","GERMANY" -"1372703424","1372703487","DE","DEU","GERMANY" -"1372703744","1372713327","DE","DEU","GERMANY" -"1372713344","1372713375","DE","DEU","GERMANY" -"1372713472","1372714239","DE","DEU","GERMANY" -"1372714496","1372717055","DE","DEU","GERMANY" -"1372717056","1372749823","PL","POL","POLAND" -"1372749824","1372782591","DE","DEU","GERMANY" -"1372782592","1372815359","RU","RUS","RUSSIAN FEDERATION" -"1372815360","1372848127","IT","ITA","ITALY" -"1372848128","1373110271","TR","TUR","TURKEY" -"1373110272","1373175807","SE","SWE","SWEDEN" -"1373175808","1373241343","AT","AUT","AUSTRIA" -"1373241344","1373299967","IL","ISR","ISRAEL" -"1373299968","1373300223","NL","NLD","NETHERLANDS" -"1373300224","1373306879","IL","ISR","ISRAEL" -"1373306880","1373372415","PL","POL","POLAND" -"1373372416","1373437951","FR","FRA","FRANCE" -"1373437952","1373503487","CH","CHE","SWITZERLAND" -"1373503488","1373519871","RU","RUS","RUSSIAN FEDERATION" -"1373519872","1373520895","GB","GBR","UNITED KINGDOM" -"1373520896","1373569023","RU","RUS","RUSSIAN FEDERATION" -"1373569024","1373634559","AT","AUT","AUSTRIA" -"1373634560","1374683135","SE","SWE","SWEDEN" -"1374683136","1375207423","BE","BEL","BELGIUM" -"1375207424","1375731711","FR","FRA","FRANCE" -"1375731712","1375798335","GB","GBR","UNITED KINGDOM" -"1375798336","1375798351","IE","IRL","IRELAND" -"1375798352","1375852543","GB","GBR","UNITED KINGDOM" -"1375852544","1375852799","IE","IRL","IRELAND" -"1375852800","1378877439","GB","GBR","UNITED KINGDOM" -"1378877440","1379926015","IT","ITA","ITALY" -"1379926016","1380188159","FR","FRA","FRANCE" -"1380188160","1380450303","GB","GBR","UNITED KINGDOM" -"1380450304","1380712447","NL","NLD","NETHERLANDS" -"1380712448","1380903935","RO","ROM","ROMANIA" -"1380903936","1380904447","SK","SVK","SLOVAKIA" -"1380904448","1380974591","RO","ROM","ROMANIA" -"1380974592","1381105663","IL","ISR","ISRAEL" -"1381105664","1381236735","DE","DEU","GERMANY" -"1381236736","1381367807","IT","ITA","ITALY" -"1381367808","1381498879","ES","ESP","SPAIN" -"1381498880","1381761023","IT","ITA","ITALY" -"1381761024","1382023167","NL","NLD","NETHERLANDS" -"1382023168","1382024959","SE","SWE","SWEDEN" -"1382024960","1382025215","DK","DNK","DENMARK" -"1382025216","1382033583","SE","SWE","SWEDEN" -"1382033584","1382033599","NL","NLD","NETHERLANDS" -"1382033600","1382035359","SE","SWE","SWEDEN" -"1382035360","1382035375","NO","NOR","NORWAY" -"1382035376","1382039007","SE","SWE","SWEDEN" -"1382039008","1382039023","FR","FRA","FRANCE" -"1382039024","1382039055","SE","SWE","SWEDEN" -"1382039056","1382039071","DE","DEU","GERMANY" -"1382039072","1382039175","SE","SWE","SWEDEN" -"1382039176","1382039191","GB","GBR","UNITED KINGDOM" -"1382039192","1382039551","SE","SWE","SWEDEN" -"1382039552","1382055935","DE","DEU","GERMANY" -"1382055936","1382072319","FR","FRA","FRANCE" -"1382072320","1382088703","RU","RUS","RUSSIAN FEDERATION" -"1382088704","1382091311","FR","FRA","FRANCE" -"1382091312","1382091327","MC","MCO","MONACO" -"1382091328","1382091375","FR","FRA","FRANCE" -"1382091376","1382091391","MC","MCO","MONACO" -"1382091392","1382091775","FR","FRA","FRANCE" -"1382091776","1382092031","MC","MCO","MONACO" -"1382092032","1382092367","FR","FRA","FRANCE" -"1382092368","1382092399","MC","MCO","MONACO" -"1382092400","1382092815","FR","FRA","FRANCE" -"1382092816","1382092831","MC","MCO","MONACO" -"1382092832","1382092927","FR","FRA","FRANCE" -"1382092928","1382092943","MC","MCO","MONACO" -"1382092944","1382093055","FR","FRA","FRANCE" -"1382093056","1382093087","GB","GBR","UNITED KINGDOM" -"1382093088","1382093119","FR","FRA","FRANCE" -"1382093120","1382093151","MC","MCO","MONACO" -"1382093152","1382093503","FR","FRA","FRANCE" -"1382093504","1382093583","MC","MCO","MONACO" -"1382093584","1382093823","FR","FRA","FRANCE" -"1382093824","1382093887","MC","MCO","MONACO" -"1382093888","1382094079","FR","FRA","FRANCE" -"1382094080","1382094143","MC","MCO","MONACO" -"1382094144","1382094335","FR","FRA","FRANCE" -"1382094336","1382094351","MC","MCO","MONACO" -"1382094352","1382094591","FR","FRA","FRANCE" -"1382094592","1382094623","MC","MCO","MONACO" -"1382094624","1382105087","FR","FRA","FRANCE" -"1382105088","1382137855","DE","DEU","GERMANY" -"1382137856","1382154239","RU","RUS","RUSSIAN FEDERATION" -"1382154240","1382170623","FR","FRA","FRANCE" -"1382170624","1382171776","DE","DEU","GERMANY" -"1382171777","1382171791","CH","CHE","SWITZERLAND" -"1382171792","1382177983","DE","DEU","GERMANY" -"1382177984","1382178303","LI","LIE","LIECHTENSTEIN" -"1382178304","1382179247","DE","DEU","GERMANY" -"1382179248","1382179279","GB","GBR","UNITED KINGDOM" -"1382179280","1382179839","DE","DEU","GERMANY" -"1382179840","1382180863","CN","CHN","CHINA" -"1382180864","1382182327","DE","DEU","GERMANY" -"1382182328","1382182335","GB","GBR","UNITED KINGDOM" -"1382182336","1382182799","DE","DEU","GERMANY" -"1382182800","1382182831","GB","GBR","UNITED KINGDOM" -"1382182832","1382182895","DE","DEU","GERMANY" -"1382182896","1382182911","GB","GBR","UNITED KINGDOM" -"1382182912","1382187007","DE","DEU","GERMANY" -"1382187008","1382191871","ES","ESP","SPAIN" -"1382191872","1382192127","VE","VEN","VENEZUELA" -"1382192128","1382203391","ES","ESP","SPAIN" -"1382203392","1382204479","NL","NLD","NETHERLANDS" -"1382204480","1382205439","GB","GBR","UNITED KINGDOM" -"1382205696","1382206463","DE","DEU","GERMANY" -"1382207744","1382207999","DE","DEU","GERMANY" -"1382208256","1382208319","DE","DEU","GERMANY" -"1382209536","1382209791","DE","DEU","GERMANY" -"1382211072","1382211199","DE","DEU","GERMANY" -"1382211328","1382211583","NL","NLD","NETHERLANDS" -"1382211584","1382211711","FR","FRA","FRANCE" -"1382211840","1382212095","FR","FRA","FRANCE" -"1382212224","1382212239","FR","FRA","FRANCE" -"1382212288","1382212351","NL","NLD","NETHERLANDS" -"1382212352","1382212479","FR","FRA","FRANCE" -"1382212608","1382212863","FR","FRA","FRANCE" -"1382212864","1382213183","NL","NLD","NETHERLANDS" -"1382213200","1382214079","NL","NLD","NETHERLANDS" -"1382214080","1382214111","GB","GBR","UNITED KINGDOM" -"1382214112","1382214879","NL","NLD","NETHERLANDS" -"1382214880","1382214895","GB","GBR","UNITED KINGDOM" -"1382214896","1382216831","NL","NLD","NETHERLANDS" -"1382216832","1382216895","GB","GBR","UNITED KINGDOM" -"1382216896","1382216959","NL","NLD","NETHERLANDS" -"1382216960","1382217215","FR","FRA","FRANCE" -"1382217216","1382217727","NL","NLD","NETHERLANDS" -"1382217728","1382217983","GB","GBR","UNITED KINGDOM" -"1382217984","1382218399","NL","NLD","NETHERLANDS" -"1382218400","1382218447","GB","GBR","UNITED KINGDOM" -"1382218448","1382218455","NL","NLD","NETHERLANDS" -"1382218456","1382218495","GB","GBR","UNITED KINGDOM" -"1382218496","1382218623","NL","NLD","NETHERLANDS" -"1382218624","1382218751","GB","GBR","UNITED KINGDOM" -"1382218752","1382218815","NL","NLD","NETHERLANDS" -"1382218816","1382218911","GB","GBR","UNITED KINGDOM" -"1382218912","1382218959","NL","NLD","NETHERLANDS" -"1382218960","1382218991","GB","GBR","UNITED KINGDOM" -"1382218992","1382219775","NL","NLD","NETHERLANDS" -"1382219776","1382224287","SE","SWE","SWEDEN" -"1382224288","1382224319","NO","NOR","NORWAY" -"1382224320","1382226271","SE","SWE","SWEDEN" -"1382226272","1382226303","NO","NOR","NORWAY" -"1382226304","1382227327","SE","SWE","SWEDEN" -"1382227328","1382227455","NO","NOR","NORWAY" -"1382227456","1382227583","SE","SWE","SWEDEN" -"1382227584","1382227711","DK","DNK","DENMARK" -"1382227712","1382229503","SE","SWE","SWEDEN" -"1382229504","1382229511","NO","NOR","NORWAY" -"1382229512","1382232575","SE","SWE","SWEDEN" -"1382232576","1382232639","NO","NOR","NORWAY" -"1382232640","1382232703","DK","DNK","DENMARK" -"1382232704","1382233407","SE","SWE","SWEDEN" -"1382233408","1382233423","NO","NOR","NORWAY" -"1382233424","1382252543","SE","SWE","SWEDEN" -"1382252544","1382268927","CZ","CZE","CZECH REPUBLIC" -"1382268928","1382285311","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1382285312","1382301391","CZ","CZE","CZECH REPUBLIC" -"1382301392","1382301407","SK","SVK","SLOVAKIA" -"1382301408","1382301695","CZ","CZE","CZECH REPUBLIC" -"1382301696","1382318079","SE","SWE","SWEDEN" -"1382318080","1382334463","RU","RUS","RUSSIAN FEDERATION" -"1382334464","1382350847","DE","DEU","GERMANY" -"1382350848","1382367231","FR","FRA","FRANCE" -"1382367232","1382383615","BG","BGR","BULGARIA" -"1382400000","1382416383","NL","NLD","NETHERLANDS" -"1382416384","1382419479","PT","PRT","PORTUGAL" -"1382419480","1382419487","ES","ESP","SPAIN" -"1382419488","1382419967","PT","PRT","PORTUGAL" -"1382419968","1382419999","ES","ESP","SPAIN" -"1382420000","1382420831","PT","PRT","PORTUGAL" -"1382420832","1382420863","ES","ESP","SPAIN" -"1382420864","1382420927","PT","PRT","PORTUGAL" -"1382420928","1382420991","GB","GBR","UNITED KINGDOM" -"1382420992","1382421247","FR","FRA","FRANCE" -"1382421248","1382422783","PT","PRT","PORTUGAL" -"1382422784","1382423039","ES","ESP","SPAIN" -"1382423040","1382432767","PT","PRT","PORTUGAL" -"1382432768","1382449151","CY","CYP","CYPRUS" -"1382449152","1382465535","IL","ISR","ISRAEL" -"1382465536","1382481919","PS","PSE","PALESTINIAN TERRITORY, OCCUPIED" -"1382481920","1382498303","AT","AUT","AUSTRIA" -"1382498304","1382514687","BG","BGR","BULGARIA" -"1382514688","1382531071","DK","DNK","DENMARK" -"1382531072","1382547455","FI","FIN","FINLAND" -"1382547456","1382809599","IT","ITA","ITALY" -"1382809600","1383025663","GB","GBR","UNITED KINGDOM" -"1383025664","1383025672","DE","DEU","GERMANY" -"1383025673","1383025679","GB","GBR","UNITED KINGDOM" -"1383025680","1383025711","DE","DEU","GERMANY" -"1383025712","1383025727","GB","GBR","UNITED KINGDOM" -"1383025728","1383025759","DE","DEU","GERMANY" -"1383025760","1383071743","GB","GBR","UNITED KINGDOM" -"1383071744","1383073279","RU","RUS","RUSSIAN FEDERATION" -"1383073280","1383073535","KZ","KAZ","KAZAKHSTAN" -"1383073536","1383079935","RU","RUS","RUSSIAN FEDERATION" -"1383088128","1383096319","IS","ISL","ICELAND" -"1383096320","1383103271","GB","GBR","UNITED KINGDOM" -"1383103272","1383103279","ES","ESP","SPAIN" -"1383103280","1383103471","GB","GBR","UNITED KINGDOM" -"1383103472","1383103487","NL","NLD","NETHERLANDS" -"1383103488","1383104015","GB","GBR","UNITED KINGDOM" -"1383104016","1383104023","ES","ESP","SPAIN" -"1383104024","1383104255","GB","GBR","UNITED KINGDOM" -"1383104256","1383104511","FR","FRA","FRANCE" -"1383104512","1383112703","GB","GBR","UNITED KINGDOM" -"1383112704","1383120895","GE","GEO","GEORGIA" -"1383120896","1383129031","IT","ITA","ITALY" -"1383129032","1383129039","ES","ESP","SPAIN" -"1383129040","1383129087","IT","ITA","ITALY" -"1383129088","1383137279","GB","GBR","UNITED KINGDOM" -"1383137280","1383145471","MC","MCO","MONACO" -"1383145472","1383153663","CZ","CZE","CZECH REPUBLIC" -"1383153664","1383161855","GB","GBR","UNITED KINGDOM" -"1383161856","1383170047","DE","DEU","GERMANY" -"1383170048","1383171743","GB","GBR","UNITED KINGDOM" -"1383171744","1383171775","NZ","NZL","NEW ZEALAND" -"1383171776","1383172559","GB","GBR","UNITED KINGDOM" -"1383172560","1383172567","ZA","ZAF","SOUTH AFRICA" -"1383172568","1383186431","GB","GBR","UNITED KINGDOM" -"1383186432","1383194623","IT","ITA","ITALY" -"1383194624","1383202815","GB","GBR","UNITED KINGDOM" -"1383202816","1383211007","RU","RUS","RUSSIAN FEDERATION" -"1383211008","1383219199","CY","CYP","CYPRUS" -"1383219200","1383222015","CS","SCG","SERBIA AND MONTENEGRO" -"1383222016","1383222527","MK","MKD","THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA" -"1383222528","1383222783","RS","SRB","SERBIA" -"1383222784","1383223039","MK","MKD","THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA" -"1383223040","1383224863","CS","SCG","SERBIA AND MONTENEGRO" -"1383224864","1383224895","RS","SRB","SERBIA" -"1383224896","1383225343","CS","SCG","SERBIA AND MONTENEGRO" -"1383225344","1383227391","RS","SRB","SERBIA" -"1383227392","1383239295","RU","RUS","RUSSIAN FEDERATION" -"1383239296","1383239423","AR","ARG","ARGENTINA" -"1383239424","1383243775","RU","RUS","RUSSIAN FEDERATION" -"1383243776","1383251967","YE","YEM","YEMEN" -"1383251968","1383260159","CZ","CZE","CZECH REPUBLIC" -"1383260160","1383268351","RU","RUS","RUSSIAN FEDERATION" -"1383268352","1383273983","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1383273984","1383276543","KW","KWT","KUWAIT" -"1383276544","1383284735","KZ","KAZ","KAZAKHSTAN" -"1383284736","1383292927","PL","POL","POLAND" -"1383292928","1383301119","DE","DEU","GERMANY" -"1383301120","1383309311","SE","SWE","SWEDEN" -"1383309312","1383317503","IT","ITA","ITALY" -"1383317504","1383321599","SE","SWE","SWEDEN" -"1383321600","1383325695","RU","RUS","RUSSIAN FEDERATION" -"1383325696","1383333887","GB","GBR","UNITED KINGDOM" -"1383333888","1383350271","RU","RUS","RUSSIAN FEDERATION" -"1383350272","1383358463","NO","NOR","NORWAY" -"1383358464","1383366911","DE","DEU","GERMANY" -"1383366912","1383367167","SY","SYR","SYRIAN ARAB REPUBLIC" -"1383367168","1383368703","KW","KWT","KUWAIT" -"1383368704","1383368831","DE","DEU","GERMANY" -"1383368832","1383368847","GB","GBR","UNITED KINGDOM" -"1383368848","1383368895","KW","KWT","KUWAIT" -"1383368896","1383369087","DE","DEU","GERMANY" -"1383369088","1383369119","GB","GBR","UNITED KINGDOM" -"1383369120","1383369231","KW","KWT","KUWAIT" -"1383369232","1383369247","GB","GBR","UNITED KINGDOM" -"1383369248","1383369535","KW","KWT","KUWAIT" -"1383369536","1383369567","GB","GBR","UNITED KINGDOM" -"1383369568","1383369599","DE","DEU","GERMANY" -"1383369600","1383370751","KW","KWT","KUWAIT" -"1383370752","1383371775","DE","DEU","GERMANY" -"1383371776","1383374591","KW","KWT","KUWAIT" -"1383374592","1383374847","US","USA","UNITED STATES" -"1383374848","1383383039","ES","ESP","SPAIN" -"1383383040","1383391231","CY","CYP","CYPRUS" -"1383391232","1383399423","FI","FIN","FINLAND" -"1383399424","1383402015","LI","LIE","LIECHTENSTEIN" -"1383402016","1383402023","CH","CHE","SWITZERLAND" -"1383402024","1383407615","LI","LIE","LIECHTENSTEIN" -"1383407616","1383415807","NO","NOR","NORWAY" -"1383415808","1383423999","RU","RUS","RUSSIAN FEDERATION" -"1383424000","1383432191","SE","SWE","SWEDEN" -"1383432192","1383440383","CZ","CZE","CZECH REPUBLIC" -"1383440384","1383448575","RU","RUS","RUSSIAN FEDERATION" -"1383448576","1383449551","RS","SRB","SERBIA" -"1383449552","1383449567","CS","SCG","SERBIA AND MONTENEGRO" -"1383449568","1383456767","RS","SRB","SERBIA" -"1383456768","1383464959","UA","UKR","UKRAINE" -"1383464960","1383473151","US","USA","UNITED STATES" -"1383473152","1383481343","DE","DEU","GERMANY" -"1383481344","1383481599","GB","GBR","UNITED KINGDOM" -"1383481600","1383481615","US","USA","UNITED STATES" -"1383481616","1383481663","GB","GBR","UNITED KINGDOM" -"1383481664","1383481695","US","USA","UNITED STATES" -"1383481696","1383481703","GB","GBR","UNITED KINGDOM" -"1383481704","1383481711","US","USA","UNITED STATES" -"1383481712","1383481775","GB","GBR","UNITED KINGDOM" -"1383481776","1383481791","SA","SAU","SAUDI ARABIA" -"1383481792","1383482367","GB","GBR","UNITED KINGDOM" -"1383482368","1383482879","NL","NLD","NETHERLANDS" -"1383482880","1383483375","GB","GBR","UNITED KINGDOM" -"1383483376","1383483383","US","USA","UNITED STATES" -"1383483384","1383483887","GB","GBR","UNITED KINGDOM" -"1383483888","1383483903","JP","JPN","JAPAN" -"1383483904","1383485375","GB","GBR","UNITED KINGDOM" -"1383485376","1383485407","US","USA","UNITED STATES" -"1383485408","1383497727","GB","GBR","UNITED KINGDOM" -"1383497728","1383499039","RU","RUS","RUSSIAN FEDERATION" -"1383499040","1383499047","UA","UKR","UKRAINE" -"1383499048","1383502335","RU","RUS","RUSSIAN FEDERATION" -"1383502336","1383502847","CH","CHE","SWITZERLAND" -"1383502848","1383503615","RU","RUS","RUSSIAN FEDERATION" -"1383503616","1383503616","CZ","CZE","CZECH REPUBLIC" -"1383503617","1383505919","RU","RUS","RUSSIAN FEDERATION" -"1383505920","1383514111","SA","SAU","SAUDI ARABIA" -"1383514112","1383522303","FI","FIN","FINLAND" -"1383522304","1383530495","BG","BGR","BULGARIA" -"1383530496","1383538687","DE","DEU","GERMANY" -"1383538688","1383546879","IT","ITA","ITALY" -"1383546880","1383555071","BG","BGR","BULGARIA" -"1383555072","1383563263","SK","SVK","SLOVAKIA" -"1383563264","1383571455","RU","RUS","RUSSIAN FEDERATION" -"1383571456","1383579647","DE","DEU","GERMANY" -"1383579648","1383587839","IT","ITA","ITALY" -"1383587840","1383591935","SK","SVK","SLOVAKIA" -"1383591936","1383592607","CZ","CZE","CZECH REPUBLIC" -"1383592608","1383592623","SK","SVK","SLOVAKIA" -"1383592624","1383592887","CZ","CZE","CZECH REPUBLIC" -"1383592888","1383592895","VC","VCT","SAINT VINCENT AND THE GRENADINES" -"1383592896","1383593471","CZ","CZE","CZECH REPUBLIC" -"1383593472","1383593727","SK","SVK","SLOVAKIA" -"1383593728","1383594367","CZ","CZE","CZECH REPUBLIC" -"1383594368","1383594495","SK","SVK","SLOVAKIA" -"1383594496","1383595279","CZ","CZE","CZECH REPUBLIC" -"1383595280","1383595295","SK","SVK","SLOVAKIA" -"1383595296","1383595467","CZ","CZE","CZECH REPUBLIC" -"1383595468","1383595471","SK","SVK","SLOVAKIA" -"1383595472","1383596031","CZ","CZE","CZECH REPUBLIC" -"1383596032","1384120319","FR","FRA","FRANCE" -"1384153088","1384185855","FI","FIN","FINLAND" -"1384185856","1384187903","DE","DEU","GERMANY" -"1384187904","1384188031","CH","CHE","SWITZERLAND" -"1384188032","1384188095","DE","DEU","GERMANY" -"1384188096","1384188127","NL","NLD","NETHERLANDS" -"1384188128","1384189055","DE","DEU","GERMANY" -"1384189056","1384189183","CH","CHE","SWITZERLAND" -"1384189184","1384189439","AT","AUT","AUSTRIA" -"1384189440","1384190463","DE","DEU","GERMANY" -"1384190464","1384190719","NL","NLD","NETHERLANDS" -"1384190720","1384190975","DE","DEU","GERMANY" -"1384190976","1384191231","DK","DNK","DENMARK" -"1384191232","1384191359","DE","DEU","GERMANY" -"1384191360","1384191423","AT","AUT","AUSTRIA" -"1384191424","1384191999","DE","DEU","GERMANY" -"1384192000","1384192191","NL","NLD","NETHERLANDS" -"1384192192","1384192255","DE","DEU","GERMANY" -"1384192256","1384192511","NL","NLD","NETHERLANDS" -"1384192512","1384192575","DE","DEU","GERMANY" -"1384192576","1384192639","SE","SWE","SWEDEN" -"1384192640","1384192767","DE","DEU","GERMANY" -"1384192768","1384193023","BG","BGR","BULGARIA" -"1384193024","1384194047","NL","NLD","NETHERLANDS" -"1384194048","1384194191","DE","DEU","GERMANY" -"1384194192","1384194207","AT","AUT","AUSTRIA" -"1384194208","1384194271","DE","DEU","GERMANY" -"1384194272","1384194303","NL","NLD","NETHERLANDS" -"1384194304","1384194559","DE","DEU","GERMANY" -"1384194560","1384194815","NL","NLD","NETHERLANDS" -"1384194816","1384195711","DE","DEU","GERMANY" -"1384195712","1384195743","NL","NLD","NETHERLANDS" -"1384195744","1384195751","CH","CHE","SWITZERLAND" -"1384195752","1384195775","DE","DEU","GERMANY" -"1384195776","1384195839","SE","SWE","SWEDEN" -"1384195840","1384196095","DE","DEU","GERMANY" -"1384196096","1384197119","CZ","CZE","CZECH REPUBLIC" -"1384197120","1384218623","DE","DEU","GERMANY" -"1384251392","1384267775","FI","FIN","FINLAND" -"1384267776","1384284159","CH","CHE","SWITZERLAND" -"1384284160","1384316927","ES","ESP","SPAIN" -"1384316928","1384349695","EE","EST","ESTONIA" -"1384349696","1384382463","HU","HUN","HUNGARY" -"1384382464","1384415231","HR","HRV","CROATIA" -"1384415232","1384480767","GB","GBR","UNITED KINGDOM" -"1384480768","1384513535","FI","FIN","FINLAND" -"1384513536","1384546303","NO","NOR","NORWAY" -"1384546304","1384579071","NL","NLD","NETHERLANDS" -"1384579072","1384611839","DE","DEU","GERMANY" -"1384611840","1384644607","LT","LTU","LITHUANIA" -"1384644608","1384660991","GB","GBR","UNITED KINGDOM" -"1384660992","1384677375","CH","CHE","SWITZERLAND" -"1384677376","1384693759","SE","SWE","SWEDEN" -"1384693760","1384710143","NL","NLD","NETHERLANDS" -"1384710144","1384726527","RO","ROM","ROMANIA" -"1384726528","1384742911","BG","BGR","BULGARIA" -"1384742912","1384759295","RU","RUS","RUSSIAN FEDERATION" -"1384759296","1384775679","SY","SYR","SYRIAN ARAB REPUBLIC" -"1384775680","1384792063","RU","RUS","RUSSIAN FEDERATION" -"1384792064","1384792623","FR","FRA","FRANCE" -"1384792624","1384792639","BE","BEL","BELGIUM" -"1384792640","1384793663","FR","FRA","FRANCE" -"1384793664","1384793695","BE","BEL","BELGIUM" -"1384793696","1384793791","FR","FRA","FRANCE" -"1384793792","1384793823","BE","BEL","BELGIUM" -"1384793824","1384794127","FR","FRA","FRANCE" -"1384794128","1384794143","CH","CHE","SWITZERLAND" -"1384794144","1384794271","FR","FRA","FRANCE" -"1384794272","1384794287","CH","CHE","SWITZERLAND" -"1384794288","1384794815","FR","FRA","FRANCE" -"1384794816","1384794847","BE","BEL","BELGIUM" -"1384794848","1384794879","FR","FRA","FRANCE" -"1384794880","1384795135","CH","CHE","SWITZERLAND" -"1384795136","1384795279","FR","FRA","FRANCE" -"1384795280","1384795327","BE","BEL","BELGIUM" -"1384795328","1384796351","FR","FRA","FRANCE" -"1384796352","1384796415","IT","ITA","ITALY" -"1384796416","1384799807","FR","FRA","FRANCE" -"1384799808","1384799871","CH","CHE","SWITZERLAND" -"1384799872","1384801023","FR","FRA","FRANCE" -"1384801024","1384801087","SM","SMR","SAN MARINO" -"1384801088","1384802495","FR","FRA","FRANCE" -"1384802496","1384802559","IT","ITA","ITALY" -"1384802560","1384808447","FR","FRA","FRANCE" -"1384808960","1384808967","DE","DEU","GERMANY" -"1384808968","1384808975","SE","SWE","SWEDEN" -"1384808976","1384808991","DE","DEU","GERMANY" -"1384808992","1384809007","FI","FIN","FINLAND" -"1384809008","1384809015","PT","PRT","PORTUGAL" -"1384809016","1384809023","GB","GBR","UNITED KINGDOM" -"1384809040","1384809055","FR","FRA","FRANCE" -"1384809056","1384809063","GE","GEO","GEORGIA" -"1384809064","1384809071","GB","GBR","UNITED KINGDOM" -"1384809088","1384809103","FR","FRA","FRANCE" -"1384811008","1384811519","GB","GBR","UNITED KINGDOM" -"1384811520","1384811647","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1384812800","1384813311","GB","GBR","UNITED KINGDOM" -"1384818464","1384818495","BE","BEL","BELGIUM" -"1384824832","1384841215","GB","GBR","UNITED KINGDOM" -"1384841216","1384857599","PL","POL","POLAND" -"1384857600","1384873983","NL","NLD","NETHERLANDS" -"1384873984","1384890367","PL","POL","POLAND" -"1384890368","1384923135","DE","DEU","GERMANY" -"1384923136","1384939519","RU","RUS","RUSSIAN FEDERATION" -"1384939520","1384955903","LT","LTU","LITHUANIA" -"1384955904","1384972287","RU","RUS","RUSSIAN FEDERATION" -"1384972288","1384988671","DE","DEU","GERMANY" -"1384988672","1385005055","FI","FIN","FINLAND" -"1385005056","1385021439","HU","HUN","HUNGARY" -"1385021440","1385037823","IE","IRL","IRELAND" -"1385037824","1385054207","FR","FRA","FRANCE" -"1385054208","1385070591","CZ","CZE","CZECH REPUBLIC" -"1385070592","1385086975","RU","RUS","RUSSIAN FEDERATION" -"1385086976","1385103359","GB","GBR","UNITED KINGDOM" -"1385103360","1385119743","IT","ITA","ITALY" -"1385119744","1385136127","BE","BEL","BELGIUM" -"1385136128","1385152511","PL","POL","POLAND" -"1385152512","1385168895","DK","DNK","DENMARK" -"1385168896","1385177087","ES","ESP","SPAIN" -"1385177088","1385185279","DE","DEU","GERMANY" -"1385185280","1385193471","RU","RUS","RUSSIAN FEDERATION" -"1385193472","1385201663","ES","ESP","SPAIN" -"1385201664","1385209855","CZ","CZE","CZECH REPUBLIC" -"1385209856","1385218047","HU","HUN","HUNGARY" -"1385218048","1385226239","UA","UKR","UKRAINE" -"1385226240","1385234431","GB","GBR","UNITED KINGDOM" -"1385234432","1385242623","DE","DEU","GERMANY" -"1385242624","1385250815","GB","GBR","UNITED KINGDOM" -"1385250816","1385259007","PL","POL","POLAND" -"1385259008","1385267199","IT","ITA","ITALY" -"1385267200","1385275391","SE","SWE","SWEDEN" -"1385275392","1385283583","IT","ITA","ITALY" -"1385283584","1385291775","KW","KWT","KUWAIT" -"1385291776","1385299967","TR","TUR","TURKEY" -"1385299968","1385308159","BG","BGR","BULGARIA" -"1385308160","1385310207","BE","BEL","BELGIUM" -"1385310208","1385312255","RU","RUS","RUSSIAN FEDERATION" -"1385312256","1385314303","US","USA","UNITED STATES" -"1385314304","1385316351","RU","RUS","RUSSIAN FEDERATION" -"1385316352","1385324543","NO","NOR","NORWAY" -"1385324544","1385332735","BE","BEL","BELGIUM" -"1385332736","1385340927","GB","GBR","UNITED KINGDOM" -"1385340928","1385349119","LB","LBN","LEBANON" -"1385349120","1385357311","CH","CHE","SWITZERLAND" -"1385357312","1385365503","PL","POL","POLAND" -"1385365504","1385373695","GB","GBR","UNITED KINGDOM" -"1385373696","1385381887","NO","NOR","NORWAY" -"1385381888","1385398271","RU","RUS","RUSSIAN FEDERATION" -"1385398272","1385406463","BG","BGR","BULGARIA" -"1385406464","1385414655","EE","EST","ESTONIA" -"1385414656","1385422847","SA","SAU","SAUDI ARABIA" -"1385422848","1385431039","DK","DNK","DENMARK" -"1385431040","1385439231","RU","RUS","RUSSIAN FEDERATION" -"1385439232","1385447423","GB","GBR","UNITED KINGDOM" -"1385447424","1385455615","IS","ISL","ICELAND" -"1385455616","1385463807","QA","QAT","QATAR" -"1385463808","1385480191","NO","NOR","NORWAY" -"1385480192","1385488383","NL","NLD","NETHERLANDS" -"1385488384","1385496575","GB","GBR","UNITED KINGDOM" -"1385496576","1385504767","SI","SVN","SLOVENIA" -"1385504768","1385512959","GB","GBR","UNITED KINGDOM" -"1385512960","1385521151","DE","DEU","GERMANY" -"1385521152","1385529343","AT","AUT","AUSTRIA" -"1385529344","1385537535","RU","RUS","RUSSIAN FEDERATION" -"1385537536","1385545727","DE","DEU","GERMANY" -"1385545728","1385553919","RU","RUS","RUSSIAN FEDERATION" -"1385553920","1385554515","DE","DEU","GERMANY" -"1385554516","1385554519","CH","CHE","SWITZERLAND" -"1385554520","1385554527","DE","DEU","GERMANY" -"1385554528","1385554531","AT","AUT","AUSTRIA" -"1385554532","1385554719","DE","DEU","GERMANY" -"1385554720","1385554735","AT","AUT","AUSTRIA" -"1385554736","1385557503","DE","DEU","GERMANY" -"1385557504","1385557759","AT","AUT","AUSTRIA" -"1385557760","1385559039","DE","DEU","GERMANY" -"1385559040","1385559295","SK","SVK","SLOVAKIA" -"1385559296","1385560831","DE","DEU","GERMANY" -"1385560832","1385561087","SK","SVK","SLOVAKIA" -"1385561088","1385562111","DE","DEU","GERMANY" -"1385562112","1385562367","ES","ESP","SPAIN" -"1385562624","1385563135","ES","ESP","SPAIN" -"1385563136","1385563391","IE","IRL","IRELAND" -"1385563648","1385563935","IE","IRL","IRELAND" -"1385564032","1385564095","IE","IRL","IRELAND" -"1385564104","1385564127","IE","IRL","IRELAND" -"1385564160","1385564231","HU","HUN","HUNGARY" -"1385564384","1385564671","HU","HUN","HUNGARY" -"1385565184","1385565439","ES","ESP","SPAIN" -"1385566208","1385566399","FR","FRA","FRANCE" -"1385566432","1385566847","FR","FRA","FRANCE" -"1385566928","1385566935","FR","FRA","FRANCE" -"1385566944","1385566991","FR","FRA","FRANCE" -"1385567000","1385567023","FR","FRA","FRANCE" -"1385567088","1385567103","FR","FRA","FRANCE" -"1385567136","1385567155","FR","FRA","FRANCE" -"1385567160","1385567215","FR","FRA","FRANCE" -"1385567224","1385567227","FR","FRA","FRANCE" -"1385567232","1385568255","IE","IRL","IRELAND" -"1385568256","1385568767","FR","FRA","FRANCE" -"1385569280","1385569407","FR","FRA","FRANCE" -"1385569408","1385569487","CZ","CZE","CZECH REPUBLIC" -"1385569488","1385569503","DE","DEU","GERMANY" -"1385569528","1385569535","GB","GBR","UNITED KINGDOM" -"1385569792","1385570303","FR","FRA","FRANCE" -"1385570304","1385578495","HU","HUN","HUNGARY" -"1385586688","1385587967","GB","GBR","UNITED KINGDOM" -"1385587968","1385588735","US","USA","UNITED STATES" -"1385588736","1385589247","HK","HKG","HONG KONG" -"1385589248","1385589503","JP","JPN","JAPAN" -"1385589504","1385589759","SG","SGP","SINGAPORE" -"1385589760","1385590015","JP","JPN","JAPAN" -"1385590016","1385590783","GB","GBR","UNITED KINGDOM" -"1385590784","1385591295","US","USA","UNITED STATES" -"1385591296","1385591807","HK","HKG","HONG KONG" -"1385591808","1385592063","SG","SGP","SINGAPORE" -"1385592064","1385594879","GB","GBR","UNITED KINGDOM" -"1385594880","1385603071","NL","NLD","NETHERLANDS" -"1385603072","1385611263","CZ","CZE","CZECH REPUBLIC" -"1385611264","1385619455","AT","AUT","AUSTRIA" -"1385619456","1385625599","DE","DEU","GERMANY" -"1385625600","1385626111","FR","FRA","FRANCE" -"1385626112","1385627647","DE","DEU","GERMANY" -"1385635840","1385644031","NL","NLD","NETHERLANDS" -"1385652224","1385660415","RU","RUS","RUSSIAN FEDERATION" -"1385660416","1385668607","TR","TUR","TURKEY" -"1385668608","1385676799","NL","NLD","NETHERLANDS" -"1385676800","1385684991","RU","RUS","RUSSIAN FEDERATION" -"1385684992","1385824255","GB","GBR","UNITED KINGDOM" -"1385824256","1385955327","PT","PRT","PORTUGAL" -"1385955328","1386086399","NL","NLD","NETHERLANDS" -"1386086400","1386217471","ES","ESP","SPAIN" -"1386217472","1386283007","PL","POL","POLAND" -"1386283008","1386348543","NL","NLD","NETHERLANDS" -"1386348544","1386414079","RU","RUS","RUSSIAN FEDERATION" -"1386414080","1386479615","GB","GBR","UNITED KINGDOM" -"1386479616","1386545151","NO","NOR","NORWAY" -"1386545152","1386577919","DE","DEU","GERMANY" -"1386577920","1386594303","US","USA","UNITED STATES" -"1386594304","1386602495","DE","DEU","GERMANY" -"1386602496","1386610687","US","USA","UNITED STATES" -"1386610688","1386676223","IL","ISR","ISRAEL" -"1386676224","1386741759","SA","SAU","SAUDI ARABIA" -"1386741760","1387233623","NL","NLD","NETHERLANDS" -"1387233624","1387233627","BE","BEL","BELGIUM" -"1387233628","1387233663","NL","NLD","NETHERLANDS" -"1387233664","1387233727","BE","BEL","BELGIUM" -"1387233728","1387233791","NL","NLD","NETHERLANDS" -"1387233792","1387233919","BE","BEL","BELGIUM" -"1387233920","1387249663","NL","NLD","NETHERLANDS" -"1387249664","1387251231","BE","BEL","BELGIUM" -"1387251232","1387251263","NL","NLD","NETHERLANDS" -"1387251264","1387251615","BE","BEL","BELGIUM" -"1387251616","1387251647","NL","NLD","NETHERLANDS" -"1387251648","1387251727","BE","BEL","BELGIUM" -"1387251728","1387251751","NL","NLD","NETHERLANDS" -"1387251752","1387251759","BE","BEL","BELGIUM" -"1387251760","1387252223","NL","NLD","NETHERLANDS" -"1387252224","1387252479","BE","BEL","BELGIUM" -"1387252480","1387331583","NL","NLD","NETHERLANDS" -"1387331584","1387397119","PL","POL","POLAND" -"1387397120","1387462655","OM","OMN","OMAN" -"1387462656","1387528191","RU","RUS","RUSSIAN FEDERATION" -"1387528192","1387593727","DK","DNK","DENMARK" -"1387593728","1387659263","FI","FIN","FINLAND" -"1387659264","1387790335","SE","SWE","SWEDEN" -"1387790336","1388314623","IT","ITA","ITALY" -"1388314624","1388322815","AT","AUT","AUSTRIA" -"1388322816","1388331007","SI","SVN","SLOVENIA" -"1388331008","1388339199","NL","NLD","NETHERLANDS" -"1388339200","1388347391","GB","GBR","UNITED KINGDOM" -"1388347392","1388363775","DK","DNK","DENMARK" -"1388363776","1388371967","DE","DEU","GERMANY" -"1388371968","1388380159","CH","CHE","SWITZERLAND" -"1388380160","1388396543","IT","ITA","ITALY" -"1388396544","1388404735","LV","LVA","LATVIA" -"1388404736","1388412927","UA","UKR","UKRAINE" -"1388412928","1388421119","RU","RUS","RUSSIAN FEDERATION" -"1388421120","1388429311","SE","SWE","SWEDEN" -"1388429312","1388437503","HR","HRV","CROATIA" -"1388437504","1388445695","DE","DEU","GERMANY" -"1388445696","1388453887","AZ","AZE","AZERBAIJAN" -"1388453888","1388462079","BH","BHR","BAHRAIN" -"1388462080","1388470271","ES","ESP","SPAIN" -"1388470272","1388478463","DE","DEU","GERMANY" -"1388478464","1388486655","AT","AUT","AUSTRIA" -"1388486656","1388494847","RU","RUS","RUSSIAN FEDERATION" -"1388494848","1388503039","NO","NOR","NORWAY" -"1388503040","1388519423","RU","RUS","RUSSIAN FEDERATION" -"1388519424","1388527615","NL","NLD","NETHERLANDS" -"1388527616","1388535807","DE","DEU","GERMANY" -"1388535808","1388543999","GB","GBR","UNITED KINGDOM" -"1388544000","1388546191","IE","IRL","IRELAND" -"1388546192","1388546201","GB","GBR","UNITED KINGDOM" -"1388546202","1388547583","IE","IRL","IRELAND" -"1388547584","1388547775","GB","GBR","UNITED KINGDOM" -"1388547776","1388547871","IE","IRL","IRELAND" -"1388547872","1388547903","GB","GBR","UNITED KINGDOM" -"1388547904","1388547935","IE","IRL","IRELAND" -"1388547936","1388547951","GB","GBR","UNITED KINGDOM" -"1388547952","1388552191","IE","IRL","IRELAND" -"1388552192","1388560383","GB","GBR","UNITED KINGDOM" -"1388560384","1388568575","FI","FIN","FINLAND" -"1388568576","1388576767","CH","CHE","SWITZERLAND" -"1388576768","1388584959","FR","FRA","FRANCE" -"1388584960","1388586303","GB","GBR","UNITED KINGDOM" -"1388586368","1388586391","GB","GBR","UNITED KINGDOM" -"1388586400","1388586447","GB","GBR","UNITED KINGDOM" -"1388586456","1388586495","GB","GBR","UNITED KINGDOM" -"1388587264","1388587391","GB","GBR","UNITED KINGDOM" -"1388587408","1388587423","GB","GBR","UNITED KINGDOM" -"1388587440","1388587471","GB","GBR","UNITED KINGDOM" -"1388587488","1388587503","FR","FRA","FRANCE" -"1388587504","1388587511","GB","GBR","UNITED KINGDOM" -"1388587520","1388587615","GB","GBR","UNITED KINGDOM" -"1388587632","1388588415","GB","GBR","UNITED KINGDOM" -"1388588544","1388588575","US","USA","UNITED STATES" -"1388588784","1388588799","US","USA","UNITED STATES" -"1388588800","1388589823","GB","GBR","UNITED KINGDOM" -"1388590080","1388590127","FR","FRA","FRANCE" -"1388590328","1388590335","FR","FRA","FRANCE" -"1388591104","1388591151","SG","SGP","SINGAPORE" -"1388591168","1388591187","SG","SGP","SINGAPORE" -"1388591200","1388591231","SG","SGP","SINGAPORE" -"1388591304","1388591311","SG","SGP","SINGAPORE" -"1388591356","1388591359","SG","SGP","SINGAPORE" -"1388591616","1388591631","US","USA","UNITED STATES" -"1388591648","1388591663","US","USA","UNITED STATES" -"1388593152","1388601343","RU","RUS","RUSSIAN FEDERATION" -"1388601344","1388609535","SE","SWE","SWEDEN" -"1388609536","1388617727","RU","RUS","RUSSIAN FEDERATION" -"1388617728","1388625919","SE","SWE","SWEDEN" -"1388625920","1388634111","NO","NOR","NORWAY" -"1388634112","1388642303","GB","GBR","UNITED KINGDOM" -"1388642304","1388650495","FI","FIN","FINLAND" -"1388650496","1388658687","PL","POL","POLAND" -"1388658688","1388666879","GB","GBR","UNITED KINGDOM" -"1388666880","1388675071","GR","GRC","GREECE" -"1388675072","1388675327","NL","NLD","NETHERLANDS" -"1388675584","1388676095","DE","DEU","GERMANY" -"1388677120","1388677375","GB","GBR","UNITED KINGDOM" -"1388677632","1388677663","AT","AUT","AUSTRIA" -"1388677888","1388679167","DE","DEU","GERMANY" -"1388679168","1388679423","FR","FRA","FRANCE" -"1388679424","1388679455","DE","DEU","GERMANY" -"1388679680","1388682239","DE","DEU","GERMANY" -"1388682752","1388683263","DE","DEU","GERMANY" -"1388683264","1388689639","CH","CHE","SWITZERLAND" -"1388689640","1388689647","DE","DEU","GERMANY" -"1388689648","1388691455","CH","CHE","SWITZERLAND" -"1388691456","1388699647","NL","NLD","NETHERLANDS" -"1388699648","1388707839","SE","SWE","SWEDEN" -"1388707840","1388708863","RU","RUS","RUSSIAN FEDERATION" -"1388708864","1388709119","LB","LBN","LEBANON" -"1388709120","1388712191","RU","RUS","RUSSIAN FEDERATION" -"1388712192","1388712703","LT","LTU","LITHUANIA" -"1388712704","1388713215","LB","LBN","LEBANON" -"1388713216","1388713727","TJ","TJK","TAJIKISTAN" -"1388713728","1388714239","LB","LBN","LEBANON" -"1388714240","1388714495","LT","LTU","LITHUANIA" -"1388714496","1388714751","RU","RUS","RUSSIAN FEDERATION" -"1388714752","1388715007","IQ","IRQ","IRAQ" -"1388715008","1388715263","LT","LTU","LITHUANIA" -"1388715264","1388715519","LB","LBN","LEBANON" -"1388715520","1388715775","LV","LVA","LATVIA" -"1388715776","1388716031","LT","LTU","LITHUANIA" -"1388716032","1388724223","ES","ESP","SPAIN" -"1388724224","1388728600","DE","DEU","GERMANY" -"1388728601","1388728608","CZ","CZE","CZECH REPUBLIC" -"1388728609","1388728640","DE","DEU","GERMANY" -"1388728641","1388728673","AT","AUT","AUSTRIA" -"1388728674","1388728734","DE","DEU","GERMANY" -"1388728735","1388728762","AT","AUT","AUSTRIA" -"1388728763","1388728783","DE","DEU","GERMANY" -"1388728784","1388728799","AT","AUT","AUSTRIA" -"1388728800","1388728815","DE","DEU","GERMANY" -"1388728816","1388728820","AT","AUT","AUSTRIA" -"1388728821","1388729208","DE","DEU","GERMANY" -"1388729209","1388729240","AT","AUT","AUSTRIA" -"1388729241","1388729280","DE","DEU","GERMANY" -"1388729281","1388729296","AT","AUT","AUSTRIA" -"1388729297","1388729304","DE","DEU","GERMANY" -"1388729305","1388729320","AT","AUT","AUSTRIA" -"1388729321","1388729856","DE","DEU","GERMANY" -"1388729857","1388729888","AT","AUT","AUSTRIA" -"1388729889","1388731136","DE","DEU","GERMANY" -"1388731137","1388731391","AT","AUT","AUSTRIA" -"1388731392","1388732415","DE","DEU","GERMANY" -"1388732416","1388740607","ES","ESP","SPAIN" -"1388740608","1388746967","IE","IRL","IRELAND" -"1388746968","1388746975","GB","GBR","UNITED KINGDOM" -"1388746976","1388748799","IE","IRL","IRELAND" -"1388748800","1388756991","RU","RUS","RUSSIAN FEDERATION" -"1388756992","1388765183","DE","DEU","GERMANY" -"1388765184","1388773375","GB","GBR","UNITED KINGDOM" -"1388773376","1388781567","NO","NOR","NORWAY" -"1388781568","1388789759","ES","ESP","SPAIN" -"1388789760","1388797951","NL","NLD","NETHERLANDS" -"1388797952","1388806143","RU","RUS","RUSSIAN FEDERATION" -"1388814336","1388815103","AX","FIN","FINLAND" -"1388815104","1388815231","FI","FIN","FINLAND" -"1388815232","1388818687","AX","FIN","FINLAND" -"1388818688","1388818815","FI","FIN","FINLAND" -"1388818816","1388821119","AX","FIN","FINLAND" -"1388821120","1388821150","SE","SWE","SWEDEN" -"1388821151","1388821247","AX","FIN","FINLAND" -"1388821248","1388822527","SE","SWE","SWEDEN" -"1388822528","1388830719","BG","BGR","BULGARIA" -"1388830720","1388838911","FI","FIN","FINLAND" -"1388838912","1388871679","RU","RUS","RUSSIAN FEDERATION" -"1388871680","1388904447","KZ","KAZ","KAZAKHSTAN" -"1388904448","1388937215","NL","NLD","NETHERLANDS" -"1388969984","1389002751","CZ","CZE","CZECH REPUBLIC" -"1389002752","1389035519","RU","RUS","RUSSIAN FEDERATION" -"1389035520","1389068287","GB","GBR","UNITED KINGDOM" -"1389068288","1389101055","FI","FIN","FINLAND" -"1389101056","1389133823","NL","NLD","NETHERLANDS" -"1389133824","1389166591","RU","RUS","RUSSIAN FEDERATION" -"1389166592","1389199359","PS","PSE","PALESTINIAN TERRITORY, OCCUPIED" -"1389199360","1389199615","AE","ARE","UNITED ARAB EMIRATES" -"1389199616","1389199647","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1389199648","1389203391","AE","ARE","UNITED ARAB EMIRATES" -"1389203392","1389203455","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1389203456","1389203487","IQ","IRQ","IRAQ" -"1389203488","1389203519","AE","ARE","UNITED ARAB EMIRATES" -"1389203520","1389203551","IQ","IRQ","IRAQ" -"1389203552","1389203567","LB","LBN","LEBANON" -"1389203568","1389203583","AE","ARE","UNITED ARAB EMIRATES" -"1389203584","1389203615","IQ","IRQ","IRAQ" -"1389203616","1389203743","AE","ARE","UNITED ARAB EMIRATES" -"1389203744","1389203775","IQ","IRQ","IRAQ" -"1389203776","1389203967","AE","ARE","UNITED ARAB EMIRATES" -"1389203968","1389203999","LY","LBY","LIBYAN ARAB JAMAHIRIYA" -"1389204000","1389204223","AE","ARE","UNITED ARAB EMIRATES" -"1389204224","1389204255","IQ","IRQ","IRAQ" -"1389204256","1389204287","AE","ARE","UNITED ARAB EMIRATES" -"1389204288","1389204303","SA","SAU","SAUDI ARABIA" -"1389204304","1389204799","AE","ARE","UNITED ARAB EMIRATES" -"1389204800","1389204863","IQ","IRQ","IRAQ" -"1389204864","1389204879","AE","ARE","UNITED ARAB EMIRATES" -"1389204880","1389204895","IQ","IRQ","IRAQ" -"1389204896","1389205631","AE","ARE","UNITED ARAB EMIRATES" -"1389205632","1389205759","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1389205760","1389205791","AE","ARE","UNITED ARAB EMIRATES" -"1389205792","1389205935","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1389205936","1389205999","AE","ARE","UNITED ARAB EMIRATES" -"1389206000","1389206015","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1389206016","1389206047","IQ","IRQ","IRAQ" -"1389206048","1389206143","AE","ARE","UNITED ARAB EMIRATES" -"1389206144","1389206175","LY","LBY","LIBYAN ARAB JAMAHIRIYA" -"1389206176","1389206271","AE","ARE","UNITED ARAB EMIRATES" -"1389206272","1389206656","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1389206657","1389206719","AE","ARE","UNITED ARAB EMIRATES" -"1389206720","1389207039","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1389207040","1389207295","LB","LBN","LEBANON" -"1389207296","1389207359","AE","ARE","UNITED ARAB EMIRATES" -"1389207360","1389207391","SA","SAU","SAUDI ARABIA" -"1389207392","1389207487","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1389207488","1389207519","AE","ARE","UNITED ARAB EMIRATES" -"1389207520","1389207551","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1389207552","1389209087","AE","ARE","UNITED ARAB EMIRATES" -"1389209088","1389209343","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1389209344","1389209887","AE","ARE","UNITED ARAB EMIRATES" -"1389209888","1389209903","IQ","IRQ","IRAQ" -"1389209904","1389210127","AE","ARE","UNITED ARAB EMIRATES" -"1389210128","1389210207","IQ","IRQ","IRAQ" -"1389210208","1389210223","AE","ARE","UNITED ARAB EMIRATES" -"1389210224","1389210255","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1389210256","1389210271","AE","ARE","UNITED ARAB EMIRATES" -"1389210272","1389210303","IQ","IRQ","IRAQ" -"1389210304","1389210335","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1389210336","1389210623","AE","ARE","UNITED ARAB EMIRATES" -"1389210624","1389210655","IQ","IRQ","IRAQ" -"1389210656","1389210687","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1389210688","1389210719","IQ","IRQ","IRAQ" -"1389210720","1389210767","AE","ARE","UNITED ARAB EMIRATES" -"1389210768","1389210783","IQ","IRQ","IRAQ" -"1389210784","1389210815","AE","ARE","UNITED ARAB EMIRATES" -"1389210816","1389210879","IQ","IRQ","IRAQ" -"1389210880","1389211135","AE","ARE","UNITED ARAB EMIRATES" -"1389211136","1389211183","IQ","IRQ","IRAQ" -"1389211184","1389211199","AE","ARE","UNITED ARAB EMIRATES" -"1389211200","1389211263","IQ","IRQ","IRAQ" -"1389211264","1389211343","AE","ARE","UNITED ARAB EMIRATES" -"1389211344","1389211359","LY","LBY","LIBYAN ARAB JAMAHIRIYA" -"1389211360","1389211391","AE","ARE","UNITED ARAB EMIRATES" -"1389211392","1389211423","IQ","IRQ","IRAQ" -"1389211424","1389211439","AE","ARE","UNITED ARAB EMIRATES" -"1389211440","1389211455","IQ","IRQ","IRAQ" -"1389211456","1389211519","AE","ARE","UNITED ARAB EMIRATES" -"1389211520","1389211535","IQ","IRQ","IRAQ" -"1389211536","1389211567","AE","ARE","UNITED ARAB EMIRATES" -"1389211568","1389211647","IQ","IRQ","IRAQ" -"1389211648","1389211719","AE","ARE","UNITED ARAB EMIRATES" -"1389211720","1389211727","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1389211728","1389212671","AE","ARE","UNITED ARAB EMIRATES" -"1389212672","1389212767","IQ","IRQ","IRAQ" -"1389212768","1389212927","AE","ARE","UNITED ARAB EMIRATES" -"1389212928","1389212991","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1389212992","1389213055","AE","ARE","UNITED ARAB EMIRATES" -"1389213056","1389213087","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1389213088","1389213119","IQ","IRQ","IRAQ" -"1389213120","1389213183","AE","ARE","UNITED ARAB EMIRATES" -"1389213184","1389213199","IQ","IRQ","IRAQ" -"1389213200","1389213207","AE","ARE","UNITED ARAB EMIRATES" -"1389213208","1389213215","LY","LBY","LIBYAN ARAB JAMAHIRIYA" -"1389213216","1389213311","AE","ARE","UNITED ARAB EMIRATES" -"1389213312","1389213343","LY","LBY","LIBYAN ARAB JAMAHIRIYA" -"1389213344","1389215231","AE","ARE","UNITED ARAB EMIRATES" -"1389215232","1389217791","AF","AFG","AFGHANISTAN" -"1389217792","1389218303","AE","ARE","UNITED ARAB EMIRATES" -"1389218304","1389219839","AF","AFG","AFGHANISTAN" -"1389219840","1389220095","AE","ARE","UNITED ARAB EMIRATES" -"1389220096","1389220143","SA","SAU","SAUDI ARABIA" -"1389220144","1389220191","AE","ARE","UNITED ARAB EMIRATES" -"1389220192","1389220207","IQ","IRQ","IRAQ" -"1389220208","1389220223","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1389220224","1389220479","AE","ARE","UNITED ARAB EMIRATES" -"1389220480","1389220495","IQ","IRQ","IRAQ" -"1389220496","1389220575","AE","ARE","UNITED ARAB EMIRATES" -"1389220576","1389220591","IQ","IRQ","IRAQ" -"1389220592","1389220607","AE","ARE","UNITED ARAB EMIRATES" -"1389220608","1389220639","SA","SAU","SAUDI ARABIA" -"1389220640","1389220671","AE","ARE","UNITED ARAB EMIRATES" -"1389220672","1389220687","IQ","IRQ","IRAQ" -"1389220688","1389220703","SA","SAU","SAUDI ARABIA" -"1389220704","1389220735","AE","ARE","UNITED ARAB EMIRATES" -"1389220736","1389220751","IQ","IRQ","IRAQ" -"1389220752","1389220767","SA","SAU","SAUDI ARABIA" -"1389220768","1389220895","AE","ARE","UNITED ARAB EMIRATES" -"1389220896","1389220927","SA","SAU","SAUDI ARABIA" -"1389220928","1389220959","AE","ARE","UNITED ARAB EMIRATES" -"1389220960","1389220975","IQ","IRQ","IRAQ" -"1389220976","1389221119","AE","ARE","UNITED ARAB EMIRATES" -"1389221120","1389221631","LY","LBY","LIBYAN ARAB JAMAHIRIYA" -"1389221632","1389221887","AE","ARE","UNITED ARAB EMIRATES" -"1389221888","1389222399","SA","SAU","SAUDI ARABIA" -"1389222400","1389222495","AE","ARE","UNITED ARAB EMIRATES" -"1389222496","1389222511","SA","SAU","SAUDI ARABIA" -"1389222512","1389222543","AE","ARE","UNITED ARAB EMIRATES" -"1389222544","1389222559","LY","LBY","LIBYAN ARAB JAMAHIRIYA" -"1389222560","1389222591","SA","SAU","SAUDI ARABIA" -"1389222592","1389222607","IQ","IRQ","IRAQ" -"1389222608","1389222687","AE","ARE","UNITED ARAB EMIRATES" -"1389222688","1389222703","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1389222704","1389222719","SA","SAU","SAUDI ARABIA" -"1389222720","1389222751","IQ","IRQ","IRAQ" -"1389222752","1389222799","AE","ARE","UNITED ARAB EMIRATES" -"1389222800","1389222815","SA","SAU","SAUDI ARABIA" -"1389222816","1389222847","AE","ARE","UNITED ARAB EMIRATES" -"1389222848","1389222879","SA","SAU","SAUDI ARABIA" -"1389222880","1389222911","AE","ARE","UNITED ARAB EMIRATES" -"1389222912","1389223167","SA","SAU","SAUDI ARABIA" -"1389223168","1389223175","LY","LBY","LIBYAN ARAB JAMAHIRIYA" -"1389223176","1389223183","AE","ARE","UNITED ARAB EMIRATES" -"1389223184","1389223215","SA","SAU","SAUDI ARABIA" -"1389223216","1389223231","AE","ARE","UNITED ARAB EMIRATES" -"1389223232","1389223263","SA","SAU","SAUDI ARABIA" -"1389223264","1389223327","IQ","IRQ","IRAQ" -"1389223328","1389223423","AE","ARE","UNITED ARAB EMIRATES" -"1389223424","1389223471","SA","SAU","SAUDI ARABIA" -"1389223472","1389223487","IQ","IRQ","IRAQ" -"1389223488","1389223519","LY","LBY","LIBYAN ARAB JAMAHIRIYA" -"1389223520","1389223679","AE","ARE","UNITED ARAB EMIRATES" -"1389223680","1389224191","DE","DEU","GERMANY" -"1389224192","1389224447","SA","SAU","SAUDI ARABIA" -"1389224448","1389224511","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1389224512","1389224543","AE","ARE","UNITED ARAB EMIRATES" -"1389224544","1389224559","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1389224560","1389224575","SA","SAU","SAUDI ARABIA" -"1389224576","1389224703","AE","ARE","UNITED ARAB EMIRATES" -"1389224704","1389224959","LY","LBY","LIBYAN ARAB JAMAHIRIYA" -"1389224960","1389225215","AE","ARE","UNITED ARAB EMIRATES" -"1389225216","1389225471","SA","SAU","SAUDI ARABIA" -"1389225472","1389225535","AE","ARE","UNITED ARAB EMIRATES" -"1389225536","1389225599","IQ","IRQ","IRAQ" -"1389225600","1389227775","AE","ARE","UNITED ARAB EMIRATES" -"1389227776","1389227791","IQ","IRQ","IRAQ" -"1389227792","1389227839","AE","ARE","UNITED ARAB EMIRATES" -"1389227840","1389227855","SA","SAU","SAUDI ARABIA" -"1389227856","1389228031","AE","ARE","UNITED ARAB EMIRATES" -"1389228032","1389228047","IQ","IRQ","IRAQ" -"1389228048","1389228063","AE","ARE","UNITED ARAB EMIRATES" -"1389228064","1389228079","IQ","IRQ","IRAQ" -"1389228080","1389228303","AE","ARE","UNITED ARAB EMIRATES" -"1389228304","1389228319","IQ","IRQ","IRAQ" -"1389228320","1389228415","AE","ARE","UNITED ARAB EMIRATES" -"1389228416","1389228479","LB","LBN","LEBANON" -"1389228480","1389231871","AE","ARE","UNITED ARAB EMIRATES" -"1389231872","1389232127","SA","SAU","SAUDI ARABIA" -"1389232128","1389232319","DE","DEU","GERMANY" -"1389232320","1389232327","LT","LTU","LITHUANIA" -"1389232328","1389264031","DE","DEU","GERMANY" -"1389264032","1389264063","ES","ESP","SPAIN" -"1389264064","1389264127","DE","DEU","GERMANY" -"1389264128","1389264639","ES","ESP","SPAIN" -"1389264640","1389264911","US","USA","UNITED STATES" -"1389264912","1389264927","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"1389264928","1389264943","GB","GBR","UNITED KINGDOM" -"1389264944","1389264959","GH","GHA","GHANA" -"1389264960","1389265039","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"1389265040","1389265055","GB","GBR","UNITED KINGDOM" -"1389265056","1389265071","ZA","ZAF","SOUTH AFRICA" -"1389265072","1389265079","GB","GBR","UNITED KINGDOM" -"1389265080","1389265087","NG","NGA","NIGERIA" -"1389265088","1389265127","GB","GBR","UNITED KINGDOM" -"1389265128","1389265135","BH","BHR","BAHRAIN" -"1389265136","1389265151","GB","GBR","UNITED KINGDOM" -"1389265152","1389265167","NG","NGA","NIGERIA" -"1389265168","1389265183","US","USA","UNITED STATES" -"1389265184","1389265199","ZA","ZAF","SOUTH AFRICA" -"1389265200","1389265231","ET","ETH","ETHIOPIA" -"1389265232","1389265239","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"1389265240","1389265263","GB","GBR","UNITED KINGDOM" -"1389265264","1389265279","NG","NGA","NIGERIA" -"1389265280","1389265407","TD","TCD","CHAD" -"1389265408","1389265535","US","USA","UNITED STATES" -"1389265536","1389265536","GB","GBR","UNITED KINGDOM" -"1389265537","1389265551","US","USA","UNITED STATES" -"1389265552","1389265559","CA","CAN","CANADA" -"1389265560","1389265567","LR","LBR","LIBERIA" -"1389265568","1389265574","GM","GMB","GAMBIA" -"1389265575","1389265575","GB","GBR","UNITED KINGDOM" -"1389265576","1389265591","SC","SYC","SEYCHELLES" -"1389265592","1389265598","CG","COG","CONGO" -"1389265599","1389265599","GB","GBR","UNITED KINGDOM" -"1389265600","1389265663","SO","SOM","SOMALIA" -"1389265664","1389265791","ZA","ZAF","SOUTH AFRICA" -"1389265792","1389265807","GB","GBR","UNITED KINGDOM" -"1389265808","1389265823","CA","CAN","CANADA" -"1389265824","1389265855","NG","NGA","NIGERIA" -"1389265856","1389265863","US","USA","UNITED STATES" -"1389265864","1389265919","GB","GBR","UNITED KINGDOM" -"1389265920","1389266463","US","USA","UNITED STATES" -"1389266464","1389266471","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"1389266472","1389266543","US","USA","UNITED STATES" -"1389266544","1389266551","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"1389266552","1389266559","US","USA","UNITED STATES" -"1389266560","1389266569","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"1389266570","1389266575","US","USA","UNITED STATES" -"1389266576","1389266591","NG","NGA","NIGERIA" -"1389266592","1389266599","US","USA","UNITED STATES" -"1389266600","1389266607","NG","NGA","NIGERIA" -"1389266608","1389266663","US","USA","UNITED STATES" -"1389266664","1389266687","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"1389266688","1389266695","ZA","ZAF","SOUTH AFRICA" -"1389266696","1389266943","US","USA","UNITED STATES" -"1389266944","1389267199","KE","KEN","KENYA" -"1389267200","1389267455","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"1389267456","1389267967","GB","GBR","UNITED KINGDOM" -"1389267968","1389268223","BI","BDI","BURUNDI" -"1389268224","1389268735","US","USA","UNITED STATES" -"1389268736","1389268863","GB","GBR","UNITED KINGDOM" -"1389268864","1389268871","KE","KEN","KENYA" -"1389268872","1389268991","GB","GBR","UNITED KINGDOM" -"1389268992","1389269023","DE","DEU","GERMANY" -"1389269024","1389269031","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"1389269032","1389269055","DE","DEU","GERMANY" -"1389269056","1389269063","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"1389269064","1389269151","DE","DEU","GERMANY" -"1389269152","1389269159","NG","NGA","NIGERIA" -"1389269160","1389269183","DE","DEU","GERMANY" -"1389269184","1389269215","NG","NGA","NIGERIA" -"1389269216","1389269247","DE","DEU","GERMANY" -"1389269248","1389269376","NG","NGA","NIGERIA" -"1389269377","1389269759","GB","GBR","UNITED KINGDOM" -"1389269760","1389269887","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"1389269888","1389270015","GB","GBR","UNITED KINGDOM" -"1389270016","1389270271","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"1389270272","1389270783","GB","GBR","UNITED KINGDOM" -"1389270784","1389271039","US","USA","UNITED STATES" -"1389271040","1389271295","CA","CAN","CANADA" -"1389271296","1389272063","GB","GBR","UNITED KINGDOM" -"1389272064","1389272191","NO","NOR","NORWAY" -"1389272192","1389272319","GB","GBR","UNITED KINGDOM" -"1389272320","1389272575","AE","ARE","UNITED ARAB EMIRATES" -"1389272576","1389272831","GB","GBR","UNITED KINGDOM" -"1389272832","1389272959","ZA","ZAF","SOUTH AFRICA" -"1389272960","1389273087","FR","FRA","FRANCE" -"1389273088","1389273343","LB","LBN","LEBANON" -"1389273344","1389273599","AE","ARE","UNITED ARAB EMIRATES" -"1389273600","1389273855","MG","MDG","MADAGASCAR" -"1389273856","1389274111","NG","NGA","NIGERIA" -"1389274112","1389274367","GB","GBR","UNITED KINGDOM" -"1389274368","1389274383","US","USA","UNITED STATES" -"1389274384","1389274399","SA","SAU","SAUDI ARABIA" -"1389274400","1389274431","GH","GHA","GHANA" -"1389274432","1389274494","US","USA","UNITED STATES" -"1389274495","1389274495","GB","GBR","UNITED KINGDOM" -"1389274496","1389274751","ZA","ZAF","SOUTH AFRICA" -"1389274752","1389274815","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"1389274816","1389274839","LR","LBR","LIBERIA" -"1389274840","1389274847","GB","GBR","UNITED KINGDOM" -"1389274848","1389274879","LR","LBR","LIBERIA" -"1389274880","1389275135","AE","ARE","UNITED ARAB EMIRATES" -"1389275136","1389275391","GB","GBR","UNITED KINGDOM" -"1389275392","1389275471","BD","BGD","BANGLADESH" -"1389275472","1389275503","GB","GBR","UNITED KINGDOM" -"1389275504","1389275511","DE","DEU","GERMANY" -"1389275512","1389275839","GB","GBR","UNITED KINGDOM" -"1389275840","1389275902","SA","SAU","SAUDI ARABIA" -"1389275903","1389275903","GB","GBR","UNITED KINGDOM" -"1389275904","1389276415","US","USA","UNITED STATES" -"1389276416","1389276671","MX","MEX","MEXICO" -"1389276672","1389277055","GB","GBR","UNITED KINGDOM" -"1389277056","1389277183","MX","MEX","MEXICO" -"1389277184","1389277439","GB","GBR","UNITED KINGDOM" -"1389277440","1389277695","US","USA","UNITED STATES" -"1389277696","1389277951","AE","ARE","UNITED ARAB EMIRATES" -"1389277952","1389278207","GB","GBR","UNITED KINGDOM" -"1389278208","1389278463","SN","SEN","SENEGAL" -"1389278464","1389278719","MX","MEX","MEXICO" -"1389278720","1389278847","DE","DEU","GERMANY" -"1389278848","1389278975","NG","NGA","NIGERIA" -"1389278976","1389279103","MX","MEX","MEXICO" -"1389279104","1389279231","NG","NGA","NIGERIA" -"1389279232","1389279487","US","USA","UNITED STATES" -"1389279488","1389279615","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"1389279616","1389279743","US","USA","UNITED STATES" -"1389279744","1389279999","LR","LBR","LIBERIA" -"1389280000","1389280255","CI","CIV","COTE D'IVOIRE" -"1389280256","1389280511","GB","GBR","UNITED KINGDOM" -"1389280512","1389280767","FR","FRA","FRANCE" -"1389280768","1389281023","VG","VGB","VIRGIN ISLANDS, BRITISH" -"1389281024","1389281279","GB","GBR","UNITED KINGDOM" -"1389281280","1389282047","ZA","ZAF","SOUTH AFRICA" -"1389282048","1389282815","GB","GBR","UNITED KINGDOM" -"1389282816","1389282943","LR","LBR","LIBERIA" -"1389282944","1389283071","SN","SEN","SENEGAL" -"1389283072","1389283327","GB","GBR","UNITED KINGDOM" -"1389283328","1389283583","LR","LBR","LIBERIA" -"1389283584","1389283711","GB","GBR","UNITED KINGDOM" -"1389283712","1389283839","ZA","ZAF","SOUTH AFRICA" -"1389283840","1389284351","GB","GBR","UNITED KINGDOM" -"1389284352","1389286399","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"1389286400","1389287423","GB","GBR","UNITED KINGDOM" -"1389287424","1389287551","US","USA","UNITED STATES" -"1389287552","1389287679","GB","GBR","UNITED KINGDOM" -"1389287680","1389287935","DK","DNK","DENMARK" -"1389287936","1389288447","US","USA","UNITED STATES" -"1389288448","1389289471","GN","GIN","GUINEA" -"1389289472","1389290495","GB","GBR","UNITED KINGDOM" -"1389290496","1389290751","US","USA","UNITED STATES" -"1389290752","1389291007","FR","FRA","FRANCE" -"1389291008","1389291519","GB","GBR","UNITED KINGDOM" -"1389291520","1389291855","US","USA","UNITED STATES" -"1389291856","1389292031","GB","GBR","UNITED KINGDOM" -"1389292032","1389292799","GH","GHA","GHANA" -"1389292800","1389293055","MG","MDG","MADAGASCAR" -"1389293056","1389293311","US","USA","UNITED STATES" -"1389293312","1389293567","KE","KEN","KENYA" -"1389293568","1389294335","GB","GBR","UNITED KINGDOM" -"1389294336","1389295615","US","USA","UNITED STATES" -"1389295616","1389295887","ZA","ZAF","SOUTH AFRICA" -"1389295888","1389295935","US","USA","UNITED STATES" -"1389295936","1389295967","SN","SEN","SENEGAL" -"1389295968","1389296383","US","USA","UNITED STATES" -"1389296384","1389296447","AD","AND","ANDORRA" -"1389296448","1389296639","US","USA","UNITED STATES" -"1389296640","1389297151","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"1389297152","1389297408","US","USA","UNITED STATES" -"1389297409","1389297663","GB","GBR","UNITED KINGDOM" -"1389297664","1389330431","UA","UKR","UKRAINE" -"1389330432","1389363199","DE","DEU","GERMANY" -"1389363200","1389379583","CZ","CZE","CZECH REPUBLIC" -"1389379584","1389395967","RU","RUS","RUSSIAN FEDERATION" -"1389395968","1389412351","RO","ROM","ROMANIA" -"1389412352","1389428735","RS","SRB","SERBIA" -"1389428736","1389445119","CZ","CZE","CZECH REPUBLIC" -"1389445120","1389461503","RU","RUS","RUSSIAN FEDERATION" -"1389461504","1389477887","SE","SWE","SWEDEN" -"1389477888","1389494271","BY","BLR","BELARUS" -"1389494272","1389495615","DE","DEU","GERMANY" -"1389495616","1389495645","CH","CHE","SWITZERLAND" -"1389495646","1389502239","DE","DEU","GERMANY" -"1389502240","1389502271","CH","CHE","SWITZERLAND" -"1389502272","1389504511","DE","DEU","GERMANY" -"1389504512","1389504772","FR","FRA","FRANCE" -"1389504773","1389504780","CH","CHE","SWITZERLAND" -"1389504781","1389505023","FR","FRA","FRANCE" -"1389505024","1389510655","DE","DEU","GERMANY" -"1389510656","1389527039","NL","NLD","NETHERLANDS" -"1389527040","1389543423","PL","POL","POLAND" -"1389543424","1389548991","DE","DEU","GERMANY" -"1389548992","1389549055","BE","BEL","BELGIUM" -"1389549056","1389554023","DE","DEU","GERMANY" -"1389554024","1389554039","FR","FRA","FRANCE" -"1389554040","1389554047","TR","TUR","TURKEY" -"1389554048","1389554087","DE","DEU","GERMANY" -"1389554088","1389554095","ES","ESP","SPAIN" -"1389554096","1389554103","DE","DEU","GERMANY" -"1389554104","1389554111","FR","FRA","FRANCE" -"1389554112","1389554135","IT","ITA","ITALY" -"1389554136","1389555263","DE","DEU","GERMANY" -"1389555264","1389555327","AT","AUT","AUSTRIA" -"1389555328","1389556751","DE","DEU","GERMANY" -"1389556752","1389556759","CH","CHE","SWITZERLAND" -"1389556760","1389559039","DE","DEU","GERMANY" -"1389559040","1389559103","CH","CHE","SWITZERLAND" -"1389559104","1389559743","DE","DEU","GERMANY" -"1389559744","1389559807","CH","CHE","SWITZERLAND" -"1389559808","1389562879","DE","DEU","GERMANY" -"1389562880","1389563135","IT","ITA","ITALY" -"1389563136","1389563391","DE","DEU","GERMANY" -"1389563392","1389563647","IT","ITA","ITALY" -"1389563648","1389576191","DE","DEU","GERMANY" -"1389576192","1389592575","GB","GBR","UNITED KINGDOM" -"1389592576","1389608959","CY","CYP","CYPRUS" -"1389608960","1389625343","DK","DNK","DENMARK" -"1389625344","1389641727","DE","DEU","GERMANY" -"1389641728","1389658111","JO","JOR","JORDAN" -"1389658112","1389674495","BE","BEL","BELGIUM" -"1389674496","1389690879","DE","DEU","GERMANY" -"1389690880","1389707263","PS","PSE","PALESTINIAN TERRITORY, OCCUPIED" -"1389707264","1389723647","IT","ITA","ITALY" -"1389723648","1389756415","ES","ESP","SPAIN" -"1389756416","1389772799","SE","SWE","SWEDEN" -"1389772800","1389780991","SI","SVN","SLOVENIA" -"1389780992","1389782527","HR","HRV","CROATIA" -"1389782528","1389783039","SI","SVN","SLOVENIA" -"1389783040","1389784063","BA","BIH","BOSNIA AND HERZEGOVINA" -"1389784064","1389788671","SI","SVN","SLOVENIA" -"1389788672","1389789183","RS","SRB","SERBIA" -"1389789184","1389805567","PL","POL","POLAND" -"1389805568","1389821951","DE","DEU","GERMANY" -"1389821952","1389838335","NL","NLD","NETHERLANDS" -"1389838336","1389854719","UZ","UZB","UZBEKISTAN" -"1389854720","1389871103","IT","ITA","ITALY" -"1389871104","1389887487","FI","FIN","FINLAND" -"1389887488","1389953023","FR","FRA","FRANCE" -"1389953024","1390018559","NL","NLD","NETHERLANDS" -"1390018560","1390084095","AT","AUT","AUSTRIA" -"1390084096","1390149631","GB","GBR","UNITED KINGDOM" -"1390149632","1390215167","CH","CHE","SWITZERLAND" -"1390215168","1390280703","IS","ISL","ICELAND" -"1390280704","1390346239","TR","TUR","TURKEY" -"1390346240","1390394367","ES","ESP","SPAIN" -"1390394368","1390394879","PT","PRT","PORTUGAL" -"1390394880","1390395391","ES","ESP","SPAIN" -"1390395392","1390396415","FR","FRA","FRANCE" -"1390396416","1390397183","PT","PRT","PORTUGAL" -"1390397184","1390411775","ES","ESP","SPAIN" -"1390411776","1392508927","FR","FRA","FRANCE" -"1392508928","1394606079","PL","POL","POLAND" -"1394606080","1396703231","ES","ESP","SPAIN" -"1396703232","1396834303","AT","AUT","AUSTRIA" -"1396834304","1396899839","TR","TUR","TURKEY" -"1396899840","1396965375","GB","GBR","UNITED KINGDOM" -"1396965376","1396973567","NL","NLD","NETHERLANDS" -"1396973568","1396981759","RU","RUS","RUSSIAN FEDERATION" -"1396981760","1396989951","PL","POL","POLAND" -"1396989952","1396998143","FR","FRA","FRANCE" -"1396998144","1397006335","AT","AUT","AUSTRIA" -"1397006336","1397014527","KW","KWT","KUWAIT" -"1397014528","1397022719","CH","CHE","SWITZERLAND" -"1397022720","1397030911","SE","SWE","SWEDEN" -"1397030912","1397039103","RU","RUS","RUSSIAN FEDERATION" -"1397039104","1397047295","CZ","CZE","CZECH REPUBLIC" -"1397047296","1397063679","RU","RUS","RUSSIAN FEDERATION" -"1397063680","1397071871","UZ","UZB","UZBEKISTAN" -"1397071872","1397096447","RU","RUS","RUSSIAN FEDERATION" -"1397096448","1397227519","IE","IRL","IRELAND" -"1397227520","1397489663","DK","DNK","DENMARK" -"1397489664","1397751807","CH","CHE","SWITZERLAND" -"1397751808","1398276095","NL","NLD","NETHERLANDS" -"1398276096","1398800383","DK","DNK","DENMARK" -"1398800384","1398833151","KW","KWT","KUWAIT" -"1398833152","1398840447","NL","NLD","NETHERLANDS" -"1398840448","1398840575","GB","GBR","UNITED KINGDOM" -"1398840576","1398865919","NL","NLD","NETHERLANDS" -"1398865920","1398867967","DE","DEU","GERMANY" -"1398867968","1398870015","NL","NLD","NETHERLANDS" -"1398870016","1398872063","PL","POL","POLAND" -"1398872064","1398874111","BG","BGR","BULGARIA" -"1398874112","1398876159","GB","GBR","UNITED KINGDOM" -"1398876160","1398880255","DE","DEU","GERMANY" -"1398880256","1398882303","FR","FRA","FRANCE" -"1398882304","1398884351","BG","BGR","BULGARIA" -"1398884352","1398886399","DE","DEU","GERMANY" -"1398886400","1398888447","CH","CHE","SWITZERLAND" -"1398888448","1398890495","GB","GBR","UNITED KINGDOM" -"1398890496","1398892543","DK","DNK","DENMARK" -"1398892544","1398894591","UA","UKR","UKRAINE" -"1398894592","1398896639","DE","DEU","GERMANY" -"1398896640","1398898687","CH","CHE","SWITZERLAND" -"1398898688","1398931455","ES","ESP","SPAIN" -"1398931456","1398964223","GB","GBR","UNITED KINGDOM" -"1398964224","1398965503","NL","NLD","NETHERLANDS" -"1398965504","1398965759","US","USA","UNITED STATES" -"1398965760","1398966015","DE","DEU","GERMANY" -"1398966016","1398966839","NL","NLD","NETHERLANDS" -"1398966840","1398966847","PL","POL","POLAND" -"1398966848","1398967871","NL","NLD","NETHERLANDS" -"1398967872","1398967903","IE","IRL","IRELAND" -"1398967904","1398968063","NL","NLD","NETHERLANDS" -"1398968064","1398968319","DE","DEU","GERMANY" -"1398968320","1398972415","NL","NLD","NETHERLANDS" -"1398972416","1398972671","IE","IRL","IRELAND" -"1398972672","1398973695","NL","NLD","NETHERLANDS" -"1398973696","1398973951","AT","AUT","AUSTRIA" -"1398973952","1398974207","IE","IRL","IRELAND" -"1398974208","1398979327","NL","NLD","NETHERLANDS" -"1398979328","1398979583","US","USA","UNITED STATES" -"1398979584","1398979839","GB","GBR","UNITED KINGDOM" -"1398979840","1398980873","NL","NLD","NETHERLANDS" -"1398980874","1398980881","US","USA","UNITED STATES" -"1398980882","1398980956","NL","NLD","NETHERLANDS" -"1398980957","1398980975","US","USA","UNITED STATES" -"1398980976","1398982143","NL","NLD","NETHERLANDS" -"1398982144","1398982399","US","USA","UNITED STATES" -"1398982400","1398983423","NL","NLD","NETHERLANDS" -"1398983424","1398983487","GB","GBR","UNITED KINGDOM" -"1398983488","1398983519","JE","JEY","JERSEY" -"1398983520","1398983551","GB","GBR","UNITED KINGDOM" -"1398983552","1398983679","NL","NLD","NETHERLANDS" -"1398983680","1398984191","US","USA","UNITED STATES" -"1398984192","1398996991","NL","NLD","NETHERLANDS" -"1398996992","1399029759","LU","LUX","LUXEMBOURG" -"1399029760","1399062527","LV","LVA","LATVIA" -"1399062528","1399095295","FI","FIN","FINLAND" -"1399095296","1399128063","GB","GBR","UNITED KINGDOM" -"1399128064","1399160831","BE","BEL","BELGIUM" -"1399160832","1399193599","SA","SAU","SAUDI ARABIA" -"1399193600","1399226367","FI","FIN","FINLAND" -"1399226368","1399259135","RU","RUS","RUSSIAN FEDERATION" -"1399259136","1399291903","IT","ITA","ITALY" -"1399291904","1399324671","RO","ROM","ROMANIA" -"1399324672","1399586815","GB","GBR","UNITED KINGDOM" -"1399586816","1399717887","NO","NOR","NORWAY" -"1399717888","1399848959","AE","ARE","UNITED ARAB EMIRATES" -"1399848960","1400111103","FR","FRA","FRANCE" -"1400111104","1400373247","NL","NLD","NETHERLANDS" -"1400373248","1400705279","DE","DEU","GERMANY" -"1400709120","1400710143","DE","DEU","GERMANY" -"1400710400","1400716287","DE","DEU","GERMANY" -"1400717312","1400718335","DE","DEU","GERMANY" -"1400718848","1400722431","DE","DEU","GERMANY" -"1400729600","1400730639","DE","DEU","GERMANY" -"1400731136","1400733695","DE","DEU","GERMANY" -"1400897536","1400963071","NL","NLD","NETHERLANDS" -"1400963072","1401028607","DE","DEU","GERMANY" -"1401028608","1401094143","IL","ISR","ISRAEL" -"1401094144","1401159679","HR","HRV","CROATIA" -"1401159680","1401225215","PT","PRT","PORTUGAL" -"1401225216","1401241599","DE","DEU","GERMANY" -"1401241600","1401242623","DK","DNK","DENMARK" -"1401242624","1401244159","DE","DEU","GERMANY" -"1401246720","1401264903","DE","DEU","GERMANY" -"1401265152","1401265919","DE","DEU","GERMANY" -"1401266176","1401273599","DE","DEU","GERMANY" -"1401273728","1401274367","DE","DEU","GERMANY" -"1401278464","1401283583","DE","DEU","GERMANY" -"1401286656","1401290751","DE","DEU","GERMANY" -"1401290752","1401356287","BE","BEL","BELGIUM" -"1401356288","1401421823","DE","DEU","GERMANY" -"1401421824","1401423135","GB","GBR","UNITED KINGDOM" -"1401423136","1401423167","IN","IND","INDIA" -"1401423168","1401423199","GB","GBR","UNITED KINGDOM" -"1401423200","1401423231","US","USA","UNITED STATES" -"1401423232","1401423871","GB","GBR","UNITED KINGDOM" -"1401423872","1401423903","AE","ARE","UNITED ARAB EMIRATES" -"1401423904","1401423967","GR","GRC","GREECE" -"1401423968","1401423999","SA","SAU","SAUDI ARABIA" -"1401424000","1401425151","AE","ARE","UNITED ARAB EMIRATES" -"1401425152","1401425407","GR","GRC","GREECE" -"1401425408","1401425919","AE","ARE","UNITED ARAB EMIRATES" -"1401425920","1401427967","NL","NLD","NETHERLANDS" -"1401427968","1401430015","RU","RUS","RUSSIAN FEDERATION" -"1401430016","1401432063","AT","AUT","AUSTRIA" -"1401432064","1401434111","IE","IRL","IRELAND" -"1401434112","1401436159","RU","RUS","RUSSIAN FEDERATION" -"1401436160","1401438207","BH","BHR","BAHRAIN" -"1401438208","1401440255","GB","GBR","UNITED KINGDOM" -"1401440256","1401443487","DE","DEU","GERMANY" -"1401443488","1401443519","GI","GIB","GIBRALTAR" -"1401443520","1401444351","DE","DEU","GERMANY" -"1401444352","1401446399","DK","DNK","DENMARK" -"1401446400","1401448447","DE","DEU","GERMANY" -"1401448448","1401450495","IT","ITA","ITALY" -"1401450496","1401452543","RU","RUS","RUSSIAN FEDERATION" -"1401452544","1401454591","GB","GBR","UNITED KINGDOM" -"1401454592","1401456639","DE","DEU","GERMANY" -"1401456640","1401458687","LV","LVA","LATVIA" -"1401458688","1401460735","IT","ITA","ITALY" -"1401460736","1401462783","PL","POL","POLAND" -"1401462784","1401464831","FR","FRA","FRANCE" -"1401464832","1401466879","IE","IRL","IRELAND" -"1401466880","1401468927","RS","SRB","SERBIA" -"1401468928","1401470975","ES","ESP","SPAIN" -"1401470976","1401473023","NL","NLD","NETHERLANDS" -"1401473024","1401475071","CZ","CZE","CZECH REPUBLIC" -"1401475072","1401477119","FR","FRA","FRANCE" -"1401477120","1401479167","BE","BEL","BELGIUM" -"1401479168","1401481215","PL","POL","POLAND" -"1401481216","1401485311","RU","RUS","RUSSIAN FEDERATION" -"1401485312","1401486095","IT","ITA","ITALY" -"1401486096","1401486111","CH","CHE","SWITZERLAND" -"1401486112","1401487359","IT","ITA","ITALY" -"1401487360","1401489407","GB","GBR","UNITED KINGDOM" -"1401489408","1401491455","SE","SWE","SWEDEN" -"1401491456","1401493503","NL","NLD","NETHERLANDS" -"1401493504","1401495551","CH","CHE","SWITZERLAND" -"1401495552","1401497599","DK","DNK","DENMARK" -"1401497600","1401499647","AT","AUT","AUSTRIA" -"1401499648","1401501695","RU","RUS","RUSSIAN FEDERATION" -"1401501696","1401503743","IT","ITA","ITALY" -"1401503744","1401505791","DE","DEU","GERMANY" -"1401505792","1401509887","CH","CHE","SWITZERLAND" -"1401509888","1401511935","UA","UKR","UKRAINE" -"1401511936","1401513983","DE","DEU","GERMANY" -"1401513984","1401516031","IT","ITA","ITALY" -"1401516032","1401516439","AT","AUT","AUSTRIA" -"1401516440","1401516447","AE","ARE","UNITED ARAB EMIRATES" -"1401516448","1401518079","AT","AUT","AUSTRIA" -"1401518080","1401520127","IT","ITA","ITALY" -"1401520128","1401522175","GB","GBR","UNITED KINGDOM" -"1401522176","1401526271","NL","NLD","NETHERLANDS" -"1401528320","1401530367","IT","ITA","ITALY" -"1401530368","1401532415","DE","DEU","GERMANY" -"1401532416","1401534463","GB","GBR","UNITED KINGDOM" -"1401534464","1401536511","DE","DEU","GERMANY" -"1401536512","1401538559","NL","NLD","NETHERLANDS" -"1401538560","1401540607","NO","NOR","NORWAY" -"1401540608","1401542655","GB","GBR","UNITED KINGDOM" -"1401542656","1401544703","RU","RUS","RUSSIAN FEDERATION" -"1401544704","1401546751","GB","GBR","UNITED KINGDOM" -"1401546752","1401548799","IT","ITA","ITALY" -"1401548800","1401550847","FR","FRA","FRANCE" -"1401550848","1401552895","GB","GBR","UNITED KINGDOM" -"1401552896","1401554943","NL","NLD","NETHERLANDS" -"1401554944","1401556991","IE","IRL","IRELAND" -"1401556992","1401563135","GB","GBR","UNITED KINGDOM" -"1401563136","1401565183","ES","ESP","SPAIN" -"1401565184","1401567231","RU","RUS","RUSSIAN FEDERATION" -"1401567232","1401569279","GB","GBR","UNITED KINGDOM" -"1401569280","1401585663","DE","DEU","GERMANY" -"1401585664","1401599167","GB","GBR","UNITED KINGDOM" -"1401599168","1401599231","IE","IRL","IRELAND" -"1401599232","1401602047","GB","GBR","UNITED KINGDOM" -"1401602048","1401618431","ES","ESP","SPAIN" -"1401618432","1401634815","AM","ARM","ARMENIA" -"1401634816","1401651199","HR","HRV","CROATIA" -"1401651200","1401667583","RU","RUS","RUSSIAN FEDERATION" -"1401667584","1401683967","IT","ITA","ITALY" -"1401683968","1401684479","SE","SWE","SWEDEN" -"1401684480","1401684511","DK","DNK","DENMARK" -"1401684512","1401684543","SE","SWE","SWEDEN" -"1401684544","1401684607","DK","DNK","DENMARK" -"1401684608","1401684671","SE","SWE","SWEDEN" -"1401684672","1401684703","DK","DNK","DENMARK" -"1401684704","1401684731","SE","SWE","SWEDEN" -"1401684732","1401684735","DK","DNK","DENMARK" -"1401684736","1401684755","NO","NOR","NORWAY" -"1401684756","1401684767","SE","SWE","SWEDEN" -"1401684768","1401684895","NO","NOR","NORWAY" -"1401684896","1401686015","SE","SWE","SWEDEN" -"1401686016","1401686059","GB","GBR","UNITED KINGDOM" -"1401686060","1401686063","SE","SWE","SWEDEN" -"1401686064","1401686143","GB","GBR","UNITED KINGDOM" -"1401686144","1401686223","SE","SWE","SWEDEN" -"1401686224","1401686271","GB","GBR","UNITED KINGDOM" -"1401686272","1401686287","NL","NLD","NETHERLANDS" -"1401686288","1401686335","SE","SWE","SWEDEN" -"1401686336","1401686399","NL","NLD","NETHERLANDS" -"1401686400","1401686911","SE","SWE","SWEDEN" -"1401686912","1401686927","DE","DEU","GERMANY" -"1401686928","1401691519","SE","SWE","SWEDEN" -"1401691520","1401691535","DE","DEU","GERMANY" -"1401691536","1401697815","SE","SWE","SWEDEN" -"1401697816","1401697823","DE","DEU","GERMANY" -"1401697824","1401708543","SE","SWE","SWEDEN" -"1401708544","1401709055","FR","FRA","FRANCE" -"1401709056","1401714047","SE","SWE","SWEDEN" -"1401714048","1401714063","FR","FRA","FRANCE" -"1401714064","1401717759","SE","SWE","SWEDEN" -"1401717760","1401718015","NL","NLD","NETHERLANDS" -"1401718016","1401719935","SE","SWE","SWEDEN" -"1401719936","1401719951","DK","DNK","DENMARK" -"1401719952","1401727743","SE","SWE","SWEDEN" -"1401727744","1401727999","GB","GBR","UNITED KINGDOM" -"1401728000","1401728335","SE","SWE","SWEDEN" -"1401728336","1401728351","NL","NLD","NETHERLANDS" -"1401728352","1401728431","SE","SWE","SWEDEN" -"1401728432","1401728447","NL","NLD","NETHERLANDS" -"1401728448","1401740543","SE","SWE","SWEDEN" -"1401740544","1401740799","DE","DEU","GERMANY" -"1401740800","1401742847","SE","SWE","SWEDEN" -"1401742848","1401742879","GB","GBR","UNITED KINGDOM" -"1401742880","1401742895","SE","SWE","SWEDEN" -"1401742896","1401742911","GB","GBR","UNITED KINGDOM" -"1401742912","1401743055","SE","SWE","SWEDEN" -"1401743056","1401743071","GB","GBR","UNITED KINGDOM" -"1401743072","1401743087","SE","SWE","SWEDEN" -"1401743088","1401743119","GB","GBR","UNITED KINGDOM" -"1401743120","1401743151","SE","SWE","SWEDEN" -"1401743152","1401743167","GB","GBR","UNITED KINGDOM" -"1401743168","1401743311","SE","SWE","SWEDEN" -"1401743312","1401743327","GB","GBR","UNITED KINGDOM" -"1401743328","1401743343","SE","SWE","SWEDEN" -"1401743344","1401743359","GB","GBR","UNITED KINGDOM" -"1401743360","1401745487","SE","SWE","SWEDEN" -"1401745488","1401745503","ES","ESP","SPAIN" -"1401745504","1401745919","SE","SWE","SWEDEN" -"1401745920","1401745935","IT","ITA","ITALY" -"1401745936","1401745983","SE","SWE","SWEDEN" -"1401745984","1401745999","NL","NLD","NETHERLANDS" -"1401746000","1401746015","ES","ESP","SPAIN" -"1401746016","1401746175","SE","SWE","SWEDEN" -"1401746176","1401746191","DK","DNK","DENMARK" -"1401746192","1401746215","SE","SWE","SWEDEN" -"1401746216","1401746223","GB","GBR","UNITED KINGDOM" -"1401746224","1401746239","SE","SWE","SWEDEN" -"1401746240","1401746255","NL","NLD","NETHERLANDS" -"1401746256","1401746271","ES","ESP","SPAIN" -"1401746272","1401746431","SE","SWE","SWEDEN" -"1401746432","1401746447","NL","NLD","NETHERLANDS" -"1401746448","1401746467","SE","SWE","SWEDEN" -"1401746468","1401746471","NL","NLD","NETHERLANDS" -"1401746472","1401746487","GB","GBR","UNITED KINGDOM" -"1401746488","1401746495","SE","SWE","SWEDEN" -"1401746496","1401746511","NL","NLD","NETHERLANDS" -"1401746512","1401746527","ES","ESP","SPAIN" -"1401746528","1401746623","SE","SWE","SWEDEN" -"1401746624","1401746639","DE","DEU","GERMANY" -"1401746640","1401746687","SE","SWE","SWEDEN" -"1401746688","1401746703","NO","NOR","NORWAY" -"1401746704","1401746751","SE","SWE","SWEDEN" -"1401746752","1401746767","NL","NLD","NETHERLANDS" -"1401746768","1401746783","ES","ESP","SPAIN" -"1401746784","1401746879","SE","SWE","SWEDEN" -"1401746880","1401746895","DE","DEU","GERMANY" -"1401746896","1401746943","SE","SWE","SWEDEN" -"1401746944","1401746959","FR","FRA","FRANCE" -"1401746960","1401747007","SE","SWE","SWEDEN" -"1401747008","1401747023","NL","NLD","NETHERLANDS" -"1401747024","1401747039","ES","ESP","SPAIN" -"1401747040","1401747135","SE","SWE","SWEDEN" -"1401747136","1401747151","DE","DEU","GERMANY" -"1401747152","1401747199","SE","SWE","SWEDEN" -"1401747200","1401747215","IT","ITA","ITALY" -"1401747216","1401747279","SE","SWE","SWEDEN" -"1401747280","1401747295","ES","ESP","SPAIN" -"1401747296","1401747391","SE","SWE","SWEDEN" -"1401747392","1401747407","DE","DEU","GERMANY" -"1401747408","1401747647","SE","SWE","SWEDEN" -"1401747648","1401747663","DE","DEU","GERMANY" -"1401747664","1401749135","SE","SWE","SWEDEN" -"1401749136","1401749151","DE","DEU","GERMANY" -"1401749152","1401749503","SE","SWE","SWEDEN" -"1401749504","1401753087","DE","DEU","GERMANY" -"1401753088","1401753343","AT","AUT","AUSTRIA" -"1401753344","1401759231","DE","DEU","GERMANY" -"1401759232","1401759487","GB","GBR","UNITED KINGDOM" -"1401759488","1401760255","DE","DEU","GERMANY" -"1401760256","1401760767","SK","SVK","SLOVAKIA" -"1401760768","1401765887","DE","DEU","GERMANY" -"1401765888","1401782271","IE","IRL","IRELAND" -"1401782272","1401815039","FR","FRA","FRANCE" -"1401815040","1401817087","SE","SWE","SWEDEN" -"1401817088","1401819135","RU","RUS","RUSSIAN FEDERATION" -"1401819136","1401821183","BG","BGR","BULGARIA" -"1401821184","1401825279","GB","GBR","UNITED KINGDOM" -"1401825280","1401827327","PL","POL","POLAND" -"1401827328","1401829375","GB","GBR","UNITED KINGDOM" -"1401829376","1401831423","PL","POL","POLAND" -"1401831424","1401833471","GB","GBR","UNITED KINGDOM" -"1401833472","1401835519","FI","FIN","FINLAND" -"1401835520","1401837567","DE","DEU","GERMANY" -"1401837568","1401839615","CH","CHE","SWITZERLAND" -"1401839616","1401841663","NO","NOR","NORWAY" -"1401841664","1401843711","UA","UKR","UKRAINE" -"1401843712","1401847807","PL","POL","POLAND" -"1401847808","1401849855","DE","DEU","GERMANY" -"1401849856","1401851903","PL","POL","POLAND" -"1401851904","1401853951","FR","FRA","FRANCE" -"1401853952","1401855999","PL","POL","POLAND" -"1401856000","1401858047","RU","RUS","RUSSIAN FEDERATION" -"1401858048","1401868287","PL","POL","POLAND" -"1401868288","1401870335","UA","UKR","UKRAINE" -"1401870336","1401872383","PL","POL","POLAND" -"1401872384","1401874431","GB","GBR","UNITED KINGDOM" -"1401874432","1401876479","UA","UKR","UKRAINE" -"1401876480","1401878527","ES","ESP","SPAIN" -"1401878528","1401880575","MT","MLT","MALTA" -"1401880576","1401882623","DE","DEU","GERMANY" -"1401882624","1401884671","NG","NGA","NIGERIA" -"1401884672","1401886719","FR","FRA","FRANCE" -"1401888768","1401890815","RU","RUS","RUSSIAN FEDERATION" -"1401890816","1401892863","PL","POL","POLAND" -"1401892864","1401894911","RU","RUS","RUSSIAN FEDERATION" -"1401894912","1401896959","FI","FIN","FINLAND" -"1401896960","1401899007","RU","RUS","RUSSIAN FEDERATION" -"1401899008","1401901055","PL","POL","POLAND" -"1401901056","1401903103","NO","NOR","NORWAY" -"1401903104","1401905151","FI","FIN","FINLAND" -"1401905152","1401907199","PL","POL","POLAND" -"1401907200","1401909247","GR","GRC","GREECE" -"1401909248","1401911295","NO","NOR","NORWAY" -"1401911296","1401913343","DK","DNK","DENMARK" -"1401913344","1401917439","PL","POL","POLAND" -"1401917440","1401919487","BG","BGR","BULGARIA" -"1401919488","1401921535","RU","RUS","RUSSIAN FEDERATION" -"1401921536","1401923583","PL","POL","POLAND" -"1401923584","1401925631","BE","BEL","BELGIUM" -"1401925632","1401927679","BG","BGR","BULGARIA" -"1401927680","1401929727","NL","NLD","NETHERLANDS" -"1401929728","1401931775","RU","RUS","RUSSIAN FEDERATION" -"1401931776","1401933823","UA","UKR","UKRAINE" -"1401933824","1401935871","PL","POL","POLAND" -"1401935872","1401937919","FI","FIN","FINLAND" -"1401937920","1401939967","GB","GBR","UNITED KINGDOM" -"1401939968","1401942015","UA","UKR","UKRAINE" -"1401944064","1401946111","BG","BGR","BULGARIA" -"1401946112","1401962495","FR","FRA","FRANCE" -"1401962496","1401978879","PL","POL","POLAND" -"1401978880","1401995263","PT","PRT","PORTUGAL" -"1401995264","1402011647","CH","CHE","SWITZERLAND" -"1402011648","1402025951","SE","SWE","SWEDEN" -"1402025952","1402025983","DK","DNK","DENMARK" -"1402025984","1402028031","SE","SWE","SWEDEN" -"1402028032","1402044415","FR","FRA","FRANCE" -"1402044416","1402060799","PL","POL","POLAND" -"1402060800","1402077183","FI","FIN","FINLAND" -"1402077184","1402093567","GB","GBR","UNITED KINGDOM" -"1402093568","1402109951","RU","RUS","RUSSIAN FEDERATION" -"1402109952","1402142719","FI","FIN","FINLAND" -"1402142720","1402159103","ES","ESP","SPAIN" -"1402159104","1402175487","IT","ITA","ITALY" -"1402175488","1402191871","IE","IRL","IRELAND" -"1402191872","1402208255","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1402208256","1402224639","CZ","CZE","CZECH REPUBLIC" -"1402224640","1402241023","BG","BGR","BULGARIA" -"1402241024","1402257407","GB","GBR","UNITED KINGDOM" -"1402257408","1402273791","FI","FIN","FINLAND" -"1402273792","1402277119","RU","RUS","RUSSIAN FEDERATION" -"1402277120","1402277375","MD","MDA","REPUBLIC OF MOLDOVA" -"1402277376","1402277631","KG","KGZ","KYRGYZSTAN" -"1402277632","1402277887","TJ","TJK","TAJIKISTAN" -"1402277888","1402290175","RU","RUS","RUSSIAN FEDERATION" -"1402290176","1402306559","NL","NLD","NETHERLANDS" -"1402306560","1402322943","IT","ITA","ITALY" -"1402322944","1402339327","RU","RUS","RUSSIAN FEDERATION" -"1402339328","1402355711","CH","CHE","SWITZERLAND" -"1402355712","1402372095","FI","FIN","FINLAND" -"1402372096","1402388479","SE","SWE","SWEDEN" -"1402388480","1402404863","ES","ESP","SPAIN" -"1402404864","1402408959","RU","RUS","RUSSIAN FEDERATION" -"1402408960","1402413055","DE","DEU","GERMANY" -"1402413056","1402417151","PL","POL","POLAND" -"1402417152","1402421247","DE","DEU","GERMANY" -"1402421248","1402422783","FR","FRA","FRANCE" -"1402422784","1402423039","LU","LUX","LUXEMBOURG" -"1402423040","1402423295","FR","FRA","FRANCE" -"1402423296","1402423807","BE","BEL","BELGIUM" -"1402423808","1402424319","FR","FRA","FRANCE" -"1402424320","1402424575","BE","BEL","BELGIUM" -"1402424576","1402424831","FR","FRA","FRANCE" -"1402424832","1402425343","GB","GBR","UNITED KINGDOM" -"1402425344","1402425599","DE","DEU","GERMANY" -"1402425600","1402425855","LU","LUX","LUXEMBOURG" -"1402425856","1402426367","FR","FRA","FRANCE" -"1402426368","1402426623","DE","DEU","GERMANY" -"1402426624","1402427135","CH","CHE","SWITZERLAND" -"1402427136","1402429439","GB","GBR","UNITED KINGDOM" -"1402429440","1402431487","US","USA","UNITED STATES" -"1402431488","1402433535","GB","GBR","UNITED KINGDOM" -"1402433536","1402434047","FR","FRA","FRANCE" -"1402434048","1402434559","GB","GBR","UNITED KINGDOM" -"1402434560","1402434815","US","USA","UNITED STATES" -"1402434816","1402437631","GB","GBR","UNITED KINGDOM" -"1402437632","1402454015","DK","DNK","DENMARK" -"1402454016","1402470399","GB","GBR","UNITED KINGDOM" -"1402470400","1402994687","FR","FRA","FRANCE" -"1402994688","1403256831","NL","NLD","NETHERLANDS" -"1403256832","1403322367","AT","AUT","AUSTRIA" -"1403322368","1403387903","ES","ESP","SPAIN" -"1403387904","1403396095","SE","SWE","SWEDEN" -"1403396096","1403400191","EE","EST","ESTONIA" -"1403400192","1403400207","TR","TUR","TURKEY" -"1403400208","1403400215","EE","EST","ESTONIA" -"1403400216","1403400219","US","USA","UNITED STATES" -"1403400220","1403400239","EE","EST","ESTONIA" -"1403400240","1403400255","BG","BGR","BULGARIA" -"1403400256","1403400263","EE","EST","ESTONIA" -"1403400264","1403400271","US","USA","UNITED STATES" -"1403400272","1403404287","EE","EST","ESTONIA" -"1403404288","1403412479","GB","GBR","UNITED KINGDOM" -"1403420672","1403428863","NL","NLD","NETHERLANDS" -"1403428864","1403437055","GB","GBR","UNITED KINGDOM" -"1403437056","1403445247","RO","ROM","ROMANIA" -"1403445248","1403461631","RU","RUS","RUSSIAN FEDERATION" -"1403461632","1403464663","FR","FRA","FRANCE" -"1403464664","1403464671","BE","BEL","BELGIUM" -"1403464672","1403469423","FR","FRA","FRANCE" -"1403469424","1403469431","US","USA","UNITED STATES" -"1403469432","1403469823","FR","FRA","FRANCE" -"1403469824","1403486207","RU","RUS","RUSSIAN FEDERATION" -"1403486208","1403494399","FR","FRA","FRANCE" -"1403494400","1403502591","GB","GBR","UNITED KINGDOM" -"1403502592","1403510783","NL","NLD","NETHERLANDS" -"1403510784","1403518975","CZ","CZE","CZECH REPUBLIC" -"1403518976","1403535359","CY","CYP","CYPRUS" -"1403535360","1403551743","PL","POL","POLAND" -"1403551744","1403568127","SK","SVK","SLOVAKIA" -"1403568128","1403584511","SE","SWE","SWEDEN" -"1403584512","1403600895","DE","DEU","GERMANY" -"1403600896","1403617279","FR","FRA","FRANCE" -"1403617280","1403633663","DE","DEU","GERMANY" -"1403633664","1403650047","RU","RUS","RUSSIAN FEDERATION" -"1403650048","1403655935","DE","DEU","GERMANY" -"1403655936","1403655943","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1403655944","1403656703","DE","DEU","GERMANY" -"1403656704","1403656959","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1403656960","1403658495","DE","DEU","GERMANY" -"1403658496","1403658527","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1403658528","1403658559","KW","KWT","KUWAIT" -"1403658560","1403658847","DE","DEU","GERMANY" -"1403658848","1403658879","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1403658880","1403658911","DE","DEU","GERMANY" -"1403658912","1403658975","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1403658976","1403660735","DE","DEU","GERMANY" -"1403660736","1403660799","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1403660800","1403661183","DE","DEU","GERMANY" -"1403661184","1403661215","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1403661216","1403661279","AE","ARE","UNITED ARAB EMIRATES" -"1403661280","1403661310","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1403661311","1403661631","DE","DEU","GERMANY" -"1403661632","1403661663","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1403661664","1403661727","DE","DEU","GERMANY" -"1403661728","1403661759","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1403661760","1403661887","DE","DEU","GERMANY" -"1403661888","1403661919","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1403661920","1403661951","DE","DEU","GERMANY" -"1403661952","1403661983","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1403661984","1403662015","DE","DEU","GERMANY" -"1403662016","1403662047","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1403662048","1403662111","DE","DEU","GERMANY" -"1403662112","1403662143","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1403662144","1403662175","DE","DEU","GERMANY" -"1403662176","1403662207","AE","ARE","UNITED ARAB EMIRATES" -"1403662208","1403662271","DE","DEU","GERMANY" -"1403662272","1403662303","AE","ARE","UNITED ARAB EMIRATES" -"1403662304","1403662495","DE","DEU","GERMANY" -"1403662496","1403662527","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1403662528","1403662655","DE","DEU","GERMANY" -"1403662656","1403662687","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1403662688","1403662815","DE","DEU","GERMANY" -"1403662816","1403662911","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1403662912","1403662943","DE","DEU","GERMANY" -"1403662944","1403662975","AE","ARE","UNITED ARAB EMIRATES" -"1403662976","1403663039","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1403663040","1403663135","DE","DEU","GERMANY" -"1403663136","1403663199","AE","ARE","UNITED ARAB EMIRATES" -"1403663200","1403663359","DE","DEU","GERMANY" -"1403663360","1403663487","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1403663488","1403663511","DE","DEU","GERMANY" -"1403663512","1403663519","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1403663520","1403663527","DE","DEU","GERMANY" -"1403663528","1403663535","IQ","IRQ","IRAQ" -"1403663536","1403663567","DE","DEU","GERMANY" -"1403663568","1403663575","AE","ARE","UNITED ARAB EMIRATES" -"1403663576","1403663589","DE","DEU","GERMANY" -"1403663590","1403663590","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1403663591","1403664895","DE","DEU","GERMANY" -"1403664896","1403664927","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"1403664928","1403666431","DE","DEU","GERMANY" -"1403666432","1403699199","GB","GBR","UNITED KINGDOM" -"1403699200","1403715583","UA","UKR","UKRAINE" -"1403715584","1403731967","LT","LTU","LITHUANIA" -"1403731968","1403748351","RU","RUS","RUSSIAN FEDERATION" -"1403748352","1403764735","DE","DEU","GERMANY" -"1403764736","1403781119","GR","GRC","GREECE" -"1403781120","1403797503","RU","RUS","RUSSIAN FEDERATION" -"1403797504","1403813887","SE","SWE","SWEDEN" -"1403813888","1403830271","NL","NLD","NETHERLANDS" -"1403830272","1403846655","CH","CHE","SWITZERLAND" -"1403846656","1403863039","IS","ISL","ICELAND" -"1403863040","1403879423","FR","FRA","FRANCE" -"1403879424","1403895807","ES","ESP","SPAIN" -"1403895808","1403912191","CH","CHE","SWITZERLAND" -"1403912192","1403928575","PT","PRT","PORTUGAL" -"1403928576","1403944959","SE","SWE","SWEDEN" -"1403944960","1403961343","GR","GRC","GREECE" -"1403961344","1403977727","RU","RUS","RUSSIAN FEDERATION" -"1403977728","1403994111","IT","ITA","ITALY" -"1403994112","1404010495","AT","AUT","AUSTRIA" -"1404010496","1404026879","PL","POL","POLAND" -"1404026880","1404043263","ES","ESP","SPAIN" -"1404043264","1404076031","SE","SWE","SWEDEN" -"1404076032","1404084223","DE","DEU","GERMANY" -"1404084224","1404088319","BE","BEL","BELGIUM" -"1404088320","1404184063","SE","SWE","SWEDEN" -"1404184064","1404184575","NO","NOR","NORWAY" -"1404184576","1404186623","SE","SWE","SWEDEN" -"1404186624","1404187647","NO","NOR","NORWAY" -"1404187648","1404188671","SE","SWE","SWEDEN" -"1404188672","1404189183","LT","LTU","LITHUANIA" -"1404189184","1404189695","EE","EST","ESTONIA" -"1404189696","1404192767","SE","SWE","SWEDEN" -"1404192768","1404194815","LV","LVA","LATVIA" -"1404194816","1404195839","LT","LTU","LITHUANIA" -"1404195840","1404196351","SE","SWE","SWEDEN" -"1404196352","1404197375","LT","LTU","LITHUANIA" -"1404197376","1404197887","SE","SWE","SWEDEN" -"1404197888","1404198911","LT","LTU","LITHUANIA" -"1404198912","1404200959","SE","SWE","SWEDEN" -"1404200960","1404203007","NL","NLD","NETHERLANDS" -"1404203008","1404204031","HR","HRV","CROATIA" -"1404204032","1404210175","SE","SWE","SWEDEN" -"1404210176","1404212223","LV","LVA","LATVIA" -"1404212224","1404215295","SE","SWE","SWEDEN" -"1404215296","1404219391","LV","LVA","LATVIA" -"1404219392","1404220415","SE","SWE","SWEDEN" -"1404220416","1404221439","EE","EST","ESTONIA" -"1404221440","1404222463","RU","RUS","RUSSIAN FEDERATION" -"1404222464","1404222975","LV","LVA","LATVIA" -"1404222976","1404225535","SE","SWE","SWEDEN" -"1404225536","1404227071","RU","RUS","RUSSIAN FEDERATION" -"1404227072","1404227583","HR","HRV","CROATIA" -"1404227584","1404231679","LV","LVA","LATVIA" -"1404231680","1404232703","SE","SWE","SWEDEN" -"1404232704","1404233215","CH","CHE","SWITZERLAND" -"1404233216","1404234239","SE","SWE","SWEDEN" -"1404234240","1404235775","HR","HRV","CROATIA" -"1404235776","1404305407","SE","SWE","SWEDEN" -"1404305408","1404321791","NL","NLD","NETHERLANDS" -"1404321792","1404379135","SE","SWE","SWEDEN" -"1404379136","1404383231","AT","AUT","AUSTRIA" -"1404383232","1404387327","SE","SWE","SWEDEN" -"1404387328","1404395519","DE","DEU","GERMANY" -"1404395520","1404403711","SE","SWE","SWEDEN" -"1404403712","1404411903","NL","NLD","NETHERLANDS" -"1404411904","1404436479","SE","SWE","SWEDEN" -"1404436480","1404502015","BE","BEL","BELGIUM" -"1404502016","1404645375","SE","SWE","SWEDEN" -"1404645376","1404645887","HR","HRV","CROATIA" -"1404645888","1404698623","SE","SWE","SWEDEN" -"1404698624","1404764159","BE","BEL","BELGIUM" -"1404764160","1404768255","NL","NLD","NETHERLANDS" -"1404768256","1404802047","SE","SWE","SWEDEN" -"1404802048","1404802559","EE","EST","ESTONIA" -"1404802560","1404803071","SE","SWE","SWEDEN" -"1404803072","1404803583","LV","LVA","LATVIA" -"1404803584","1404805119","SE","SWE","SWEDEN" -"1404805120","1404813311","AT","AUT","AUSTRIA" -"1404813312","1404829695","SE","SWE","SWEDEN" -"1404829696","1404870655","RU","RUS","RUSSIAN FEDERATION" -"1404870656","1404872703","LT","LTU","LITHUANIA" -"1404872704","1404874751","SE","SWE","SWEDEN" -"1404874752","1404875775","LV","LVA","LATVIA" -"1404875776","1404876799","LT","LTU","LITHUANIA" -"1404876800","1404895231","SE","SWE","SWEDEN" -"1404895232","1404927999","DE","DEU","GERMANY" -"1404928000","1404952575","SE","SWE","SWEDEN" -"1404952576","1404960767","NL","NLD","NETHERLANDS" -"1404960768","1405050879","SE","SWE","SWEDEN" -"1405050880","1405059071","AT","AUT","AUSTRIA" -"1405059072","1405063167","SE","SWE","SWEDEN" -"1405063168","1405065215","NO","NOR","NORWAY" -"1405065216","1405067263","SE","SWE","SWEDEN" -"1405067264","1405075455","DE","DEU","GERMANY" -"1405075456","1405083647","FR","FRA","FRANCE" -"1405083648","1405091839","SE","SWE","SWEDEN" -"1405091840","1406140415","FR","FRA","FRANCE" -"1406140416","1406205951","CZ","CZE","CZECH REPUBLIC" -"1406205952","1406271487","SE","SWE","SWEDEN" -"1406271488","1406337023","IE","IRL","IRELAND" -"1406337024","1406402559","IT","ITA","ITALY" -"1406402560","1406468095","GR","GRC","GREECE" -"1406468096","1406533631","ES","ESP","SPAIN" -"1406533632","1406599167","FR","FRA","FRANCE" -"1406599168","1406664703","AT","AUT","AUSTRIA" -"1406664704","1406672895","FI","FIN","FINLAND" -"1406672896","1406681087","HU","HUN","HUNGARY" -"1406681088","1406689279","GB","GBR","UNITED KINGDOM" -"1406689280","1406697471","SE","SWE","SWEDEN" -"1406697472","1406705663","GB","GBR","UNITED KINGDOM" -"1406705664","1406713855","IT","ITA","ITALY" -"1406713856","1406717695","AT","AUT","AUSTRIA" -"1406717696","1406717951","DE","DEU","GERMANY" -"1406717952","1406722047","AT","AUT","AUSTRIA" -"1406722048","1406730239","DE","DEU","GERMANY" -"1406730240","1406746623","RU","RUS","RUSSIAN FEDERATION" -"1406746624","1406754815","BE","BEL","BELGIUM" -"1406754816","1406763007","GB","GBR","UNITED KINGDOM" -"1406763008","1406771199","BE","BEL","BELGIUM" -"1406771200","1406779391","GB","GBR","UNITED KINGDOM" -"1406779392","1406787583","RU","RUS","RUSSIAN FEDERATION" -"1406787584","1406795775","AM","ARM","ARMENIA" -"1406795776","1406803967","GB","GBR","UNITED KINGDOM" -"1406803968","1406812159","DE","DEU","GERMANY" -"1406812160","1406820351","SE","SWE","SWEDEN" -"1406820352","1406828543","PL","POL","POLAND" -"1406828544","1406836735","GB","GBR","UNITED KINGDOM" -"1406836736","1406844927","AT","AUT","AUSTRIA" -"1406844928","1406853119","MD","MDA","REPUBLIC OF MOLDOVA" -"1406853120","1406861311","UA","UKR","UKRAINE" -"1406861312","1406869503","RU","RUS","RUSSIAN FEDERATION" -"1406869504","1406877695","GB","GBR","UNITED KINGDOM" -"1406877696","1406885887","NL","NLD","NETHERLANDS" -"1406885888","1406894079","CH","CHE","SWITZERLAND" -"1406894080","1406902271","RU","RUS","RUSSIAN FEDERATION" -"1406902272","1406910463","AT","AUT","AUSTRIA" -"1406910464","1406918655","SE","SWE","SWEDEN" -"1406918656","1406926335","RU","RUS","RUSSIAN FEDERATION" -"1406926336","1406926847","DE","DEU","GERMANY" -"1406926848","1406935039","IT","ITA","ITALY" -"1406935040","1406951423","RU","RUS","RUSSIAN FEDERATION" -"1406951424","1406959615","PL","POL","POLAND" -"1406959616","1406964287","DE","DEU","GERMANY" -"1406964288","1406964319","CH","CHE","SWITZERLAND" -"1406964320","1406964735","DE","DEU","GERMANY" -"1406964736","1406964927","US","USA","UNITED STATES" -"1406964928","1406964991","DE","DEU","GERMANY" -"1406964992","1406965007","US","USA","UNITED STATES" -"1406965008","1406967295","DE","DEU","GERMANY" -"1406967296","1406967327","GB","GBR","UNITED KINGDOM" -"1406967328","1406967343","NL","NLD","NETHERLANDS" -"1406967344","1406967347","US","USA","UNITED STATES" -"1406967348","1406967807","DE","DEU","GERMANY" -"1406967808","1406975999","RU","RUS","RUSSIAN FEDERATION" -"1406976000","1406984191","IE","IRL","IRELAND" -"1406984192","1407000575","RU","RUS","RUSSIAN FEDERATION" -"1407000576","1407016959","DE","DEU","GERMANY" -"1407016960","1407025151","IT","ITA","ITALY" -"1407025152","1407025663","DK","DNK","DENMARK" -"1407025664","1407025919","US","USA","UNITED STATES" -"1407025920","1407033343","DK","DNK","DENMARK" -"1407033344","1407033855","UZ","UZB","UZBEKISTAN" -"1407033856","1407034111","RU","RUS","RUSSIAN FEDERATION" -"1407034112","1407034367","UZ","UZB","UZBEKISTAN" -"1407034368","1407035391","RU","RUS","RUSSIAN FEDERATION" -"1407035392","1407041535","UZ","UZB","UZBEKISTAN" -"1407041536","1407049727","RU","RUS","RUSSIAN FEDERATION" -"1407049728","1407057919","DE","DEU","GERMANY" -"1407057920","1407066111","RU","RUS","RUSSIAN FEDERATION" -"1407066112","1407074303","LU","LUX","LUXEMBOURG" -"1407074304","1407082623","RU","RUS","RUSSIAN FEDERATION" -"1407082624","1407082639","DE","DEU","GERMANY" -"1407082640","1407089663","RU","RUS","RUSSIAN FEDERATION" -"1407089664","1407090687","US","USA","UNITED STATES" -"1407090688","1407098879","CH","CHE","SWITZERLAND" -"1407098880","1407107071","BG","BGR","BULGARIA" -"1407107072","1407115263","RU","RUS","RUSSIAN FEDERATION" -"1407115264","1407123455","GB","GBR","UNITED KINGDOM" -"1407123456","1407131647","SE","SWE","SWEDEN" -"1407131648","1407139839","NL","NLD","NETHERLANDS" -"1407139840","1407148031","DE","DEU","GERMANY" -"1407148032","1407156223","GB","GBR","UNITED KINGDOM" -"1407156224","1407164415","LV","LVA","LATVIA" -"1407164416","1407172607","PT","PRT","PORTUGAL" -"1407172608","1407180799","GB","GBR","UNITED KINGDOM" -"1407180800","1407188991","RU","RUS","RUSSIAN FEDERATION" -"1407188992","1407320063","IT","ITA","ITALY" -"1407320064","1407451135","SE","SWE","SWEDEN" -"1407451136","1407483903","BG","BGR","BULGARIA" -"1407483904","1407516671","CH","CHE","SWITZERLAND" -"1407516672","1407516679","GB","GBR","UNITED KINGDOM" -"1407516680","1407516687","NG","NGA","NIGERIA" -"1407516688","1407516703","GB","GBR","UNITED KINGDOM" -"1407516704","1407516735","NG","NGA","NIGERIA" -"1407516736","1407516743","UG","UGA","UGANDA" -"1407516744","1407516751","LR","LBR","LIBERIA" -"1407516752","1407516759","SL","SLE","SIERRA LEONE" -"1407516760","1407516767","GB","GBR","UNITED KINGDOM" -"1407516768","1407516775","AO","AGO","ANGOLA" -"1407516776","1407516783","GB","GBR","UNITED KINGDOM" -"1407516784","1407516791","NG","NGA","NIGERIA" -"1407516792","1407516799","AO","AGO","ANGOLA" -"1407516800","1407516807","GH","GHA","GHANA" -"1407516808","1407516815","NG","NGA","NIGERIA" -"1407516816","1407516831","GB","GBR","UNITED KINGDOM" -"1407516832","1407516839","NG","NGA","NIGERIA" -"1407516840","1407516847","GB","GBR","UNITED KINGDOM" -"1407516848","1407516855","NG","NGA","NIGERIA" -"1407516856","1407516863","GB","GBR","UNITED KINGDOM" -"1407516864","1407516895","NG","NGA","NIGERIA" -"1407516896","1407516911","GB","GBR","UNITED KINGDOM" -"1407516912","1407516927","NG","NGA","NIGERIA" -"1407516928","1407517183","ZW","ZWE","ZIMBABWE" -"1407517184","1407517383","GB","GBR","UNITED KINGDOM" -"1407517384","1407517391","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"1407517392","1407517415","GB","GBR","UNITED KINGDOM" -"1407517416","1407517439","NG","NGA","NIGERIA" -"1407517440","1407517823","GB","GBR","UNITED KINGDOM" -"1407517824","1407517887","NG","NGA","NIGERIA" -"1407517888","1407517919","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"1407517920","1407517951","ZW","ZWE","ZIMBABWE" -"1407517952","1407518015","SL","SLE","SIERRA LEONE" -"1407518016","1407518031","ZA","ZAF","SOUTH AFRICA" -"1407518032","1407518039","GB","GBR","UNITED KINGDOM" -"1407518040","1407518047","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"1407518048","1407518063","NG","NGA","NIGERIA" -"1407518064","1407518079","GB","GBR","UNITED KINGDOM" -"1407518080","1407518111","FR","FRA","FRANCE" -"1407518112","1407518127","NG","NGA","NIGERIA" -"1407518128","1407518135","KE","KEN","KENYA" -"1407518136","1407518143","GH","GHA","GHANA" -"1407518144","1407518159","ZA","ZAF","SOUTH AFRICA" -"1407518160","1407518167","NG","NGA","NIGERIA" -"1407518168","1407518175","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"1407518176","1407518183","GH","GHA","GHANA" -"1407518184","1407518199","NG","NGA","NIGERIA" -"1407518200","1407518207","AE","ARE","UNITED ARAB EMIRATES" -"1407518208","1407518215","ZW","ZWE","ZIMBABWE" -"1407518216","1407518223","ZA","ZAF","SOUTH AFRICA" -"1407518224","1407518231","GB","GBR","UNITED KINGDOM" -"1407518232","1407518255","NG","NGA","NIGERIA" -"1407518256","1407518269","GH","GHA","GHANA" -"1407518270","1407518335","GB","GBR","UNITED KINGDOM" -"1407518336","1407518343","CG","COG","CONGO" -"1407518344","1407518351","ZA","ZAF","SOUTH AFRICA" -"1407518352","1407518359","GH","GHA","GHANA" -"1407518360","1407518367","NG","NGA","NIGERIA" -"1407518368","1407518375","ZA","ZAF","SOUTH AFRICA" -"1407518376","1407518391","NG","NGA","NIGERIA" -"1407518392","1407518399","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"1407518400","1407518719","GB","GBR","UNITED KINGDOM" -"1407518720","1407518783","AO","AGO","ANGOLA" -"1407518784","1407518815","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"1407518816","1407518831","GB","GBR","UNITED KINGDOM" -"1407518832","1407518847","NG","NGA","NIGERIA" -"1407518848","1407518911","GB","GBR","UNITED KINGDOM" -"1407518912","1407518943","NG","NGA","NIGERIA" -"1407518944","1407518975","GB","GBR","UNITED KINGDOM" -"1407518976","1407518983","NG","NGA","NIGERIA" -"1407518984","1407518991","GB","GBR","UNITED KINGDOM" -"1407518992","1407518999","NG","NGA","NIGERIA" -"1407519000","1407519007","GB","GBR","UNITED KINGDOM" -"1407519008","1407519015","NG","NGA","NIGERIA" -"1407519016","1407519023","AO","AGO","ANGOLA" -"1407519024","1407519031","NG","NGA","NIGERIA" -"1407519032","1407519039","AO","AGO","ANGOLA" -"1407519040","1407519047","NG","NGA","NIGERIA" -"1407519048","1407519055","GB","GBR","UNITED KINGDOM" -"1407519056","1407519063","NG","NGA","NIGERIA" -"1407519064","1407519071","BJ","BEN","BENIN" -"1407519072","1407519079","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"1407519080","1407519095","NG","NGA","NIGERIA" -"1407519096","1407519103","CM","CMR","CAMEROON" -"1407519104","1407519111","NG","NGA","NIGERIA" -"1407519112","1407519135","SL","SLE","SIERRA LEONE" -"1407519136","1407519143","GB","GBR","UNITED KINGDOM" -"1407519144","1407519151","AO","AGO","ANGOLA" -"1407519152","1407519159","GB","GBR","UNITED KINGDOM" -"1407519160","1407519167","AO","AGO","ANGOLA" -"1407519168","1407519175","NG","NGA","NIGERIA" -"1407519176","1407519183","SL","SLE","SIERRA LEONE" -"1407519184","1407519191","NG","NGA","NIGERIA" -"1407519192","1407519199","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"1407519200","1407519207","AO","AGO","ANGOLA" -"1407519208","1407519215","TG","TGO","TOGO" -"1407519216","1407519223","NG","NGA","NIGERIA" -"1407519224","1407519231","GB","GBR","UNITED KINGDOM" -"1407519232","1407519615","NG","NGA","NIGERIA" -"1407519616","1407519743","GB","GBR","UNITED KINGDOM" -"1407519744","1407519751","NG","NGA","NIGERIA" -"1407519752","1407519759","GB","GBR","UNITED KINGDOM" -"1407519760","1407519775","NG","NGA","NIGERIA" -"1407519776","1407519783","GB","GBR","UNITED KINGDOM" -"1407519784","1407519791","NG","NGA","NIGERIA" -"1407519792","1407519799","IQ","IRQ","IRAQ" -"1407519800","1407519839","GB","GBR","UNITED KINGDOM" -"1407519840","1407519847","NG","NGA","NIGERIA" -"1407519848","1407520271","GB","GBR","UNITED KINGDOM" -"1407520272","1407520279","NG","NGA","NIGERIA" -"1407520280","1407520303","GB","GBR","UNITED KINGDOM" -"1407520304","1407520327","NG","NGA","NIGERIA" -"1407520328","1407520335","SL","SLE","SIERRA LEONE" -"1407520336","1407520343","GB","GBR","UNITED KINGDOM" -"1407520344","1407520359","NG","NGA","NIGERIA" -"1407520360","1407520367","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"1407520368","1407520375","GB","GBR","UNITED KINGDOM" -"1407520376","1407520397","NG","NGA","NIGERIA" -"1407520398","1407520399","GB","GBR","UNITED KINGDOM" -"1407520400","1407520423","NG","NGA","NIGERIA" -"1407520424","1407520439","GB","GBR","UNITED KINGDOM" -"1407520440","1407520447","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"1407520448","1407520463","NG","NGA","NIGERIA" -"1407520464","1407520511","GB","GBR","UNITED KINGDOM" -"1407520512","1407520519","NG","NGA","NIGERIA" -"1407520520","1407520527","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"1407520528","1407520543","NG","NGA","NIGERIA" -"1407520544","1407520551","GB","GBR","UNITED KINGDOM" -"1407520552","1407520559","NG","NGA","NIGERIA" -"1407520560","1407520567","SL","SLE","SIERRA LEONE" -"1407520568","1407520575","NG","NGA","NIGERIA" -"1407520576","1407520607","GB","GBR","UNITED KINGDOM" -"1407520608","1407520615","AO","AGO","ANGOLA" -"1407520616","1407520623","GB","GBR","UNITED KINGDOM" -"1407520624","1407520631","NG","NGA","NIGERIA" -"1407520632","1407520639","GB","GBR","UNITED KINGDOM" -"1407520640","1407520655","NG","NGA","NIGERIA" -"1407520656","1407520663","GA","GAB","GABON" -"1407520664","1407520671","GB","GBR","UNITED KINGDOM" -"1407520672","1407520679","CM","CMR","CAMEROON" -"1407520680","1407520687","GB","GBR","UNITED KINGDOM" -"1407520688","1407520695","NG","NGA","NIGERIA" -"1407520696","1407520711","GB","GBR","UNITED KINGDOM" -"1407520712","1407520719","NG","NGA","NIGERIA" -"1407520720","1407520727","GB","GBR","UNITED KINGDOM" -"1407520728","1407520735","AO","AGO","ANGOLA" -"1407520736","1407520759","GB","GBR","UNITED KINGDOM" -"1407520760","1407520767","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"1407520768","1407520775","ZW","ZWE","ZIMBABWE" -"1407520776","1407520839","GB","GBR","UNITED KINGDOM" -"1407520840","1407520847","NG","NGA","NIGERIA" -"1407520848","1407520855","ZM","ZMB","ZAMBIA" -"1407520856","1407520863","GB","GBR","UNITED KINGDOM" -"1407520864","1407520871","NG","NGA","NIGERIA" -"1407520872","1407520895","GB","GBR","UNITED KINGDOM" -"1407520896","1407520903","AO","AGO","ANGOLA" -"1407520904","1407520911","NG","NGA","NIGERIA" -"1407520912","1407520919","ZW","ZWE","ZIMBABWE" -"1407520920","1407520927","IQ","IRQ","IRAQ" -"1407520928","1407520935","GB","GBR","UNITED KINGDOM" -"1407520936","1407520943","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"1407520944","1407520951","IQ","IRQ","IRAQ" -"1407520952","1407520959","ZW","ZWE","ZIMBABWE" -"1407520960","1407520967","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"1407520968","1407520975","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"1407520976","1407520983","GB","GBR","UNITED KINGDOM" -"1407520984","1407520991","ZM","ZMB","ZAMBIA" -"1407520992","1407520999","AO","AGO","ANGOLA" -"1407521000","1407521023","GB","GBR","UNITED KINGDOM" -"1407521024","1407521031","ZW","ZWE","ZIMBABWE" -"1407521032","1407521055","GB","GBR","UNITED KINGDOM" -"1407521056","1407521063","KE","KEN","KENYA" -"1407521064","1407521415","GB","GBR","UNITED KINGDOM" -"1407521416","1407521423","LR","LBR","LIBERIA" -"1407521424","1407522047","GB","GBR","UNITED KINGDOM" -"1407522048","1407522303","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"1407522304","1407522319","GB","GBR","UNITED KINGDOM" -"1407522320","1407522327","BF","BFA","BURKINA FASO" -"1407522328","1407522335","NG","NGA","NIGERIA" -"1407522336","1407522351","SO","SOM","SOMALIA" -"1407522352","1407522359","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"1407522360","1407522367","NG","NGA","NIGERIA" -"1407522368","1407522375","GB","GBR","UNITED KINGDOM" -"1407522376","1407522383","LR","LBR","LIBERIA" -"1407522384","1407522399","GB","GBR","UNITED KINGDOM" -"1407522400","1407522407","NG","NGA","NIGERIA" -"1407522408","1407522415","LR","LBR","LIBERIA" -"1407522416","1407522431","NG","NGA","NIGERIA" -"1407522432","1407522439","IQ","IRQ","IRAQ" -"1407522440","1407522440","NG","NGA","NIGERIA" -"1407522441","1407522463","GB","GBR","UNITED KINGDOM" -"1407522464","1407522479","NG","NGA","NIGERIA" -"1407522480","1407522487","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"1407522488","1407522495","GB","GBR","UNITED KINGDOM" -"1407522496","1407522503","NG","NGA","NIGERIA" -"1407522504","1407522527","GB","GBR","UNITED KINGDOM" -"1407522528","1407522559","NG","NGA","NIGERIA" -"1407522560","1407522567","GB","GBR","UNITED KINGDOM" -"1407522568","1407522575","NG","NGA","NIGERIA" -"1407522576","1407522583","GB","GBR","UNITED KINGDOM" -"1407522584","1407522591","NG","NGA","NIGERIA" -"1407522592","1407522615","GB","GBR","UNITED KINGDOM" -"1407522616","1407522623","NG","NGA","NIGERIA" -"1407522624","1407522639","GB","GBR","UNITED KINGDOM" -"1407522640","1407522647","GQ","GNQ","EQUATORIAL GUINEA" -"1407522648","1407522655","NG","NGA","NIGERIA" -"1407522656","1407522671","GB","GBR","UNITED KINGDOM" -"1407522672","1407522679","ZM","ZMB","ZAMBIA" -"1407522680","1407522687","IQ","IRQ","IRAQ" -"1407522688","1407522695","LR","LBR","LIBERIA" -"1407522696","1407522703","GB","GBR","UNITED KINGDOM" -"1407522704","1407522711","NG","NGA","NIGERIA" -"1407522712","1407522727","GB","GBR","UNITED KINGDOM" -"1407522728","1407522735","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"1407522736","1407522775","GB","GBR","UNITED KINGDOM" -"1407522776","1407522799","NG","NGA","NIGERIA" -"1407522800","1407522807","ZM","ZMB","ZAMBIA" -"1407522808","1407522815","IQ","IRQ","IRAQ" -"1407522816","1407523071","ZW","ZWE","ZIMBABWE" -"1407523072","1407523327","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"1407523328","1407523343","MW","MWI","MALAWI" -"1407523344","1407523351","NG","NGA","NIGERIA" -"1407523352","1407523359","LU","LUX","LUXEMBOURG" -"1407523360","1407523367","ZW","ZWE","ZIMBABWE" -"1407523368","1407523375","NG","NGA","NIGERIA" -"1407523376","1407523391","GB","GBR","UNITED KINGDOM" -"1407523392","1407523455","ZW","ZWE","ZIMBABWE" -"1407523456","1407523519","MW","MWI","MALAWI" -"1407523520","1407523535","GB","GBR","UNITED KINGDOM" -"1407523536","1407523551","NG","NGA","NIGERIA" -"1407523552","1407523559","CM","CMR","CAMEROON" -"1407523560","1407523567","KE","KEN","KENYA" -"1407523568","1407523575","GB","GBR","UNITED KINGDOM" -"1407523576","1407523583","MW","MWI","MALAWI" -"1407523584","1407523839","SO","SOM","SOMALIA" -"1407523840","1407524351","MW","MWI","MALAWI" -"1407524352","1407524615","GB","GBR","UNITED KINGDOM" -"1407524616","1407524631","NG","NGA","NIGERIA" -"1407524632","1407526911","GB","GBR","UNITED KINGDOM" -"1407526912","1407527935","MZ","MOZ","MOZAMBIQUE" -"1407527936","1407529023","GB","GBR","UNITED KINGDOM" -"1407529024","1407529087","NG","NGA","NIGERIA" -"1407529088","1407529095","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"1407529096","1407529103","ZW","ZWE","ZIMBABWE" -"1407529104","1407529111","NG","NGA","NIGERIA" -"1407529112","1407529127","GB","GBR","UNITED KINGDOM" -"1407529128","1407529135","ZW","ZWE","ZIMBABWE" -"1407529136","1407529143","MW","MWI","MALAWI" -"1407529144","1407529151","ZW","ZWE","ZIMBABWE" -"1407529152","1407529183","GB","GBR","UNITED KINGDOM" -"1407529184","1407529191","NG","NGA","NIGERIA" -"1407529192","1407529199","MZ","MOZ","MOZAMBIQUE" -"1407529200","1407529207","GB","GBR","UNITED KINGDOM" -"1407529208","1407529215","NG","NGA","NIGERIA" -"1407529216","1407531007","GB","GBR","UNITED KINGDOM" -"1407531008","1407531775","NG","NGA","NIGERIA" -"1407531776","1407532543","GB","GBR","UNITED KINGDOM" -"1407532544","1407532551","UG","UGA","UGANDA" -"1407532552","1407532559","AO","AGO","ANGOLA" -"1407532560","1407532583","GB","GBR","UNITED KINGDOM" -"1407532584","1407532591","ZW","ZWE","ZIMBABWE" -"1407532592","1407532607","GB","GBR","UNITED KINGDOM" -"1407532608","1407532615","ZW","ZWE","ZIMBABWE" -"1407532616","1407532623","KG","KGZ","KYRGYZSTAN" -"1407532624","1407532631","GB","GBR","UNITED KINGDOM" -"1407532632","1407532639","MW","MWI","MALAWI" -"1407532640","1407532647","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"1407532648","1407532663","GB","GBR","UNITED KINGDOM" -"1407532664","1407532671","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"1407532672","1407532799","ZW","ZWE","ZIMBABWE" -"1407532800","1407532927","SO","SOM","SOMALIA" -"1407532928","1407533055","GB","GBR","UNITED KINGDOM" -"1407533056","1407533311","NG","NGA","NIGERIA" -"1407533312","1407533327","AO","AGO","ANGOLA" -"1407533328","1407533343","GB","GBR","UNITED KINGDOM" -"1407533344","1407533359","NG","NGA","NIGERIA" -"1407533360","1407533375","GB","GBR","UNITED KINGDOM" -"1407533376","1407533407","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"1407533408","1407533423","GB","GBR","UNITED KINGDOM" -"1407533424","1407533567","GH","GHA","GHANA" -"1407533568","1407533591","NG","NGA","NIGERIA" -"1407533592","1407533607","GB","GBR","UNITED KINGDOM" -"1407533608","1407533631","NG","NGA","NIGERIA" -"1407533632","1407533663","IQ","IRQ","IRAQ" -"1407533664","1407533679","GB","GBR","UNITED KINGDOM" -"1407533680","1407533695","NG","NGA","NIGERIA" -"1407533696","1407533711","GB","GBR","UNITED KINGDOM" -"1407533712","1407533719","ZW","ZWE","ZIMBABWE" -"1407533720","1407533727","SL","SLE","SIERRA LEONE" -"1407533728","1407533735","GB","GBR","UNITED KINGDOM" -"1407533736","1407533743","GN","GIN","GUINEA" -"1407533744","1407533751","NG","NGA","NIGERIA" -"1407533752","1407533759","GB","GBR","UNITED KINGDOM" -"1407533760","1407533783","NG","NGA","NIGERIA" -"1407533784","1407533815","GB","GBR","UNITED KINGDOM" -"1407533816","1407533823","NG","NGA","NIGERIA" -"1407533824","1407534079","GB","GBR","UNITED KINGDOM" -"1407534080","1407534335","AE","ARE","UNITED ARAB EMIRATES" -"1407534336","1407534359","GB","GBR","UNITED KINGDOM" -"1407534360","1407534383","NG","NGA","NIGERIA" -"1407534384","1407534391","GB","GBR","UNITED KINGDOM" -"1407534392","1407534399","AO","AGO","ANGOLA" -"1407534400","1407534407","NG","NGA","NIGERIA" -"1407534408","1407534415","CI","CIV","COTE D'IVOIRE" -"1407534416","1407534447","GB","GBR","UNITED KINGDOM" -"1407534448","1407534463","NG","NGA","NIGERIA" -"1407534464","1407534543","GB","GBR","UNITED KINGDOM" -"1407534544","1407534559","GH","GHA","GHANA" -"1407534560","1407534567","NG","NGA","NIGERIA" -"1407534568","1407534575","GB","GBR","UNITED KINGDOM" -"1407534576","1407534583","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"1407534584","1407534591","GB","GBR","UNITED KINGDOM" -"1407534592","1407534727","NG","NGA","NIGERIA" -"1407534728","1407534735","GB","GBR","UNITED KINGDOM" -"1407534736","1407534775","NG","NGA","NIGERIA" -"1407534776","1407534783","ML","MLI","MALI" -"1407534784","1407534791","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"1407534792","1407534847","GB","GBR","UNITED KINGDOM" -"1407534848","1407535103","CM","CMR","CAMEROON" -"1407535104","1407535615","GA","GAB","GABON" -"1407535616","1407536127","GB","GBR","UNITED KINGDOM" -"1407536128","1407536639","GA","GAB","GABON" -"1407536640","1407536895","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"1407536896","1407536903","GB","GBR","UNITED KINGDOM" -"1407536904","1407536919","ZW","ZWE","ZIMBABWE" -"1407536920","1407536935","GB","GBR","UNITED KINGDOM" -"1407536936","1407536943","NG","NGA","NIGERIA" -"1407536944","1407536951","AO","AGO","ANGOLA" -"1407536952","1407536983","GB","GBR","UNITED KINGDOM" -"1407536984","1407536991","IQ","IRQ","IRAQ" -"1407536992","1407537031","GB","GBR","UNITED KINGDOM" -"1407537032","1407537039","NG","NGA","NIGERIA" -"1407537040","1407537047","GB","GBR","UNITED KINGDOM" -"1407537048","1407537055","NG","NGA","NIGERIA" -"1407537056","1407537071","GH","GHA","GHANA" -"1407537072","1407537087","NG","NGA","NIGERIA" -"1407537088","1407537095","GH","GHA","GHANA" -"1407537096","1407537103","GB","GBR","UNITED KINGDOM" -"1407537104","1407537111","NG","NGA","NIGERIA" -"1407537112","1407537119","LR","LBR","LIBERIA" -"1407537120","1407537135","GB","GBR","UNITED KINGDOM" -"1407537136","1407537143","NG","NGA","NIGERIA" -"1407537144","1407537167","GB","GBR","UNITED KINGDOM" -"1407537168","1407537175","ZM","ZMB","ZAMBIA" -"1407537176","1407537191","NG","NGA","NIGERIA" -"1407537192","1407537199","GB","GBR","UNITED KINGDOM" -"1407537200","1407537207","NG","NGA","NIGERIA" -"1407537208","1407537215","GB","GBR","UNITED KINGDOM" -"1407537216","1407537255","NG","NGA","NIGERIA" -"1407537256","1407537263","GB","GBR","UNITED KINGDOM" -"1407537264","1407537279","NG","NGA","NIGERIA" -"1407537280","1407537287","LR","LBR","LIBERIA" -"1407537288","1407537311","NG","NGA","NIGERIA" -"1407537312","1407537327","GB","GBR","UNITED KINGDOM" -"1407537328","1407537351","NG","NGA","NIGERIA" -"1407537352","1407537359","GB","GBR","UNITED KINGDOM" -"1407537360","1407537367","LR","LBR","LIBERIA" -"1407537368","1407537391","NG","NGA","NIGERIA" -"1407537392","1407537399","LR","LBR","LIBERIA" -"1407537400","1407537407","GB","GBR","UNITED KINGDOM" -"1407537408","1407537415","NG","NGA","NIGERIA" -"1407537416","1407537423","GB","GBR","UNITED KINGDOM" -"1407537424","1407537455","NG","NGA","NIGERIA" -"1407537456","1407537479","GB","GBR","UNITED KINGDOM" -"1407537480","1407537487","CM","CMR","CAMEROON" -"1407537488","1407537495","GH","GHA","GHANA" -"1407537496","1407537511","NG","NGA","NIGERIA" -"1407537512","1407537519","LR","LBR","LIBERIA" -"1407537520","1407537527","GB","GBR","UNITED KINGDOM" -"1407537528","1407537535","NG","NGA","NIGERIA" -"1407537536","1407537543","LR","LBR","LIBERIA" -"1407537544","1407537559","GB","GBR","UNITED KINGDOM" -"1407537560","1407537567","NG","NGA","NIGERIA" -"1407537568","1407537575","GB","GBR","UNITED KINGDOM" -"1407537576","1407537639","NG","NGA","NIGERIA" -"1407537640","1407537647","GB","GBR","UNITED KINGDOM" -"1407537648","1407537663","NG","NGA","NIGERIA" -"1407537664","1407537671","AO","AGO","ANGOLA" -"1407537672","1407537679","NG","NGA","NIGERIA" -"1407537680","1407537687","IQ","IRQ","IRAQ" -"1407537688","1407537703","GB","GBR","UNITED KINGDOM" -"1407537704","1407537735","NG","NGA","NIGERIA" -"1407537736","1407537743","GB","GBR","UNITED KINGDOM" -"1407537744","1407537751","IQ","IRQ","IRAQ" -"1407537752","1407537847","NG","NGA","NIGERIA" -"1407537848","1407537855","GB","GBR","UNITED KINGDOM" -"1407537856","1407537863","NG","NGA","NIGERIA" -"1407537864","1407537871","GB","GBR","UNITED KINGDOM" -"1407537872","1407537879","IQ","IRQ","IRAQ" -"1407537880","1407537887","GB","GBR","UNITED KINGDOM" -"1407537888","1407537895","NG","NGA","NIGERIA" -"1407537896","1407537903","IQ","IRQ","IRAQ" -"1407537904","1407537911","GB","GBR","UNITED KINGDOM" -"1407537912","1407537927","NG","NGA","NIGERIA" -"1407537928","1407537935","GB","GBR","UNITED KINGDOM" -"1407537936","1407537943","GH","GHA","GHANA" -"1407537944","1407537959","NG","NGA","NIGERIA" -"1407537960","1407537967","GB","GBR","UNITED KINGDOM" -"1407537968","1407537991","NG","NGA","NIGERIA" -"1407537992","1407537999","IQ","IRQ","IRAQ" -"1407538000","1407538023","NG","NGA","NIGERIA" -"1407538024","1407538039","GB","GBR","UNITED KINGDOM" -"1407538040","1407538047","IQ","IRQ","IRAQ" -"1407538048","1407538055","NG","NGA","NIGERIA" -"1407538056","1407538071","LU","LUX","LUXEMBOURG" -"1407538072","1407538079","NG","NGA","NIGERIA" -"1407538080","1407538087","GB","GBR","UNITED KINGDOM" -"1407538088","1407538095","AO","AGO","ANGOLA" -"1407538096","1407538111","GB","GBR","UNITED KINGDOM" -"1407538112","1407538119","LR","LBR","LIBERIA" -"1407538120","1407538135","NG","NGA","NIGERIA" -"1407538136","1407538143","GB","GBR","UNITED KINGDOM" -"1407538144","1407538151","GN","GIN","GUINEA" -"1407538152","1407538167","GB","GBR","UNITED KINGDOM" -"1407538168","1407538175","IQ","IRQ","IRAQ" -"1407538176","1407538431","AT","AUT","AUSTRIA" -"1407538432","1407538439","GB","GBR","UNITED KINGDOM" -"1407538440","1407538447","NG","NGA","NIGERIA" -"1407538448","1407538463","GB","GBR","UNITED KINGDOM" -"1407538464","1407538471","ZM","ZMB","ZAMBIA" -"1407538472","1407538479","NG","NGA","NIGERIA" -"1407538480","1407538495","GB","GBR","UNITED KINGDOM" -"1407538496","1407538503","NG","NGA","NIGERIA" -"1407538504","1407538559","GB","GBR","UNITED KINGDOM" -"1407538560","1407538623","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"1407538624","1407538663","GB","GBR","UNITED KINGDOM" -"1407538664","1407538687","NG","NGA","NIGERIA" -"1407538688","1407538751","GB","GBR","UNITED KINGDOM" -"1407538752","1407538783","NG","NGA","NIGERIA" -"1407538784","1407538847","GB","GBR","UNITED KINGDOM" -"1407538848","1407538863","NG","NGA","NIGERIA" -"1407538864","1407538879","GE","GEO","GEORGIA" -"1407538880","1407538887","GB","GBR","UNITED KINGDOM" -"1407538888","1407538895","NG","NGA","NIGERIA" -"1407538896","1407538911","GB","GBR","UNITED KINGDOM" -"1407538912","1407538919","GH","GHA","GHANA" -"1407538920","1407538927","GB","GBR","UNITED KINGDOM" -"1407538928","1407538935","NG","NGA","NIGERIA" -"1407538936","1407538943","GH","GHA","GHANA" -"1407538944","1407538967","GB","GBR","UNITED KINGDOM" -"1407538968","1407538975","CM","CMR","CAMEROON" -"1407538976","1407538983","NG","NGA","NIGERIA" -"1407538984","1407538991","SL","SLE","SIERRA LEONE" -"1407538992","1407538999","GB","GBR","UNITED KINGDOM" -"1407539000","1407539007","NG","NGA","NIGERIA" -"1407539008","1407539055","GB","GBR","UNITED KINGDOM" -"1407539056","1407539063","NG","NGA","NIGERIA" -"1407539064","1407539071","GB","GBR","UNITED KINGDOM" -"1407539072","1407539079","NG","NGA","NIGERIA" -"1407539080","1407539087","GB","GBR","UNITED KINGDOM" -"1407539088","1407539095","AO","AGO","ANGOLA" -"1407539096","1407539103","GB","GBR","UNITED KINGDOM" -"1407539104","1407539111","NG","NGA","NIGERIA" -"1407539112","1407539143","GB","GBR","UNITED KINGDOM" -"1407539144","1407539151","NG","NGA","NIGERIA" -"1407539152","1407539167","GB","GBR","UNITED KINGDOM" -"1407539168","1407539175","TD","TCD","CHAD" -"1407539176","1407539183","GH","GHA","GHANA" -"1407539184","1407539199","NG","NGA","NIGERIA" -"1407539200","1407539455","GE","GEO","GEORGIA" -"1407539456","1407539967","NG","NGA","NIGERIA" -"1407539968","1407541471","GB","GBR","UNITED KINGDOM" -"1407541472","1407541495","NG","NGA","NIGERIA" -"1407541496","1407541535","GB","GBR","UNITED KINGDOM" -"1407541536","1407541543","CM","CMR","CAMEROON" -"1407541544","1407541551","GB","GBR","UNITED KINGDOM" -"1407541552","1407541559","NG","NGA","NIGERIA" -"1407541560","1407541567","GH","GHA","GHANA" -"1407541568","1407541703","GB","GBR","UNITED KINGDOM" -"1407541704","1407541719","NG","NGA","NIGERIA" -"1407541720","1407541727","GB","GBR","UNITED KINGDOM" -"1407541728","1407541735","NG","NGA","NIGERIA" -"1407541736","1407541751","GB","GBR","UNITED KINGDOM" -"1407541752","1407541759","NG","NGA","NIGERIA" -"1407541760","1407541887","GB","GBR","UNITED KINGDOM" -"1407541888","1407542143","NG","NGA","NIGERIA" -"1407542144","1407542543","GB","GBR","UNITED KINGDOM" -"1407542544","1407542551","LR","LBR","LIBERIA" -"1407542552","1407542575","GB","GBR","UNITED KINGDOM" -"1407542576","1407542583","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"1407542584","1407542591","GB","GBR","UNITED KINGDOM" -"1407542592","1407542599","NG","NGA","NIGERIA" -"1407542600","1407542607","TG","TGO","TOGO" -"1407542608","1407542623","GB","GBR","UNITED KINGDOM" -"1407542624","1407542631","BJ","BEN","BENIN" -"1407542632","1407542639","NG","NGA","NIGERIA" -"1407542640","1407542655","GB","GBR","UNITED KINGDOM" -"1407542656","1407542663","SL","SLE","SIERRA LEONE" -"1407542664","1407542671","GB","GBR","UNITED KINGDOM" -"1407542672","1407542679","CM","CMR","CAMEROON" -"1407542680","1407542687","NG","NGA","NIGERIA" -"1407542688","1407542695","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"1407542696","1407542703","NG","NGA","NIGERIA" -"1407542704","1407542719","GB","GBR","UNITED KINGDOM" -"1407542720","1407542735","NG","NGA","NIGERIA" -"1407542736","1407542767","GB","GBR","UNITED KINGDOM" -"1407542768","1407542775","GA","GAB","GABON" -"1407542776","1407542783","NG","NGA","NIGERIA" -"1407542784","1407542791","GB","GBR","UNITED KINGDOM" -"1407542792","1407542799","NG","NGA","NIGERIA" -"1407542800","1407542831","GB","GBR","UNITED KINGDOM" -"1407542832","1407542863","NG","NGA","NIGERIA" -"1407542864","1407542879","GB","GBR","UNITED KINGDOM" -"1407542880","1407542887","NG","NGA","NIGERIA" -"1407542888","1407542903","GB","GBR","UNITED KINGDOM" -"1407542904","1407542911","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"1407542912","1407543039","AT","AUT","AUSTRIA" -"1407543040","1407543167","GB","GBR","UNITED KINGDOM" -"1407543168","1407543183","GH","GHA","GHANA" -"1407543184","1407543239","NG","NGA","NIGERIA" -"1407543240","1407543255","GB","GBR","UNITED KINGDOM" -"1407543256","1407543263","NG","NGA","NIGERIA" -"1407543264","1407543279","GB","GBR","UNITED KINGDOM" -"1407543280","1407543287","NG","NGA","NIGERIA" -"1407543288","1407545343","GB","GBR","UNITED KINGDOM" -"1407545344","1407546367","SL","SLE","SIERRA LEONE" -"1407546368","1407546495","AE","ARE","UNITED ARAB EMIRATES" -"1407546496","1407546879","GB","GBR","UNITED KINGDOM" -"1407546880","1407547135","ZW","ZWE","ZIMBABWE" -"1407547136","1407547143","GB","GBR","UNITED KINGDOM" -"1407547144","1407547151","GH","GHA","GHANA" -"1407547152","1407547167","GB","GBR","UNITED KINGDOM" -"1407547168","1407547175","NG","NGA","NIGERIA" -"1407547176","1407547183","GH","GHA","GHANA" -"1407547184","1407547199","NG","NGA","NIGERIA" -"1407547200","1407547207","AO","AGO","ANGOLA" -"1407547208","1407547215","TD","TCD","CHAD" -"1407547216","1407547223","SL","SLE","SIERRA LEONE" -"1407547224","1407547231","GB","GBR","UNITED KINGDOM" -"1407547232","1407547255","SL","SLE","SIERRA LEONE" -"1407547256","1407547263","GB","GBR","UNITED KINGDOM" -"1407547264","1407547271","SL","SLE","SIERRA LEONE" -"1407547272","1407547295","NG","NGA","NIGERIA" -"1407547296","1407547303","GB","GBR","UNITED KINGDOM" -"1407547304","1407547311","SL","SLE","SIERRA LEONE" -"1407547312","1407547327","NG","NGA","NIGERIA" -"1407547328","1407547335","GB","GBR","UNITED KINGDOM" -"1407547336","1407547343","CI","CIV","COTE D'IVOIRE" -"1407547344","1407547911","NG","NGA","NIGERIA" -"1407547912","1407547919","GB","GBR","UNITED KINGDOM" -"1407547920","1407547927","CG","COG","CONGO" -"1407547928","1407547943","GB","GBR","UNITED KINGDOM" -"1407547944","1407547951","BJ","BEN","BENIN" -"1407547952","1407547983","GB","GBR","UNITED KINGDOM" -"1407547984","1407547999","BJ","BEN","BENIN" -"1407548000","1407548023","GB","GBR","UNITED KINGDOM" -"1407548024","1407548031","NG","NGA","NIGERIA" -"1407548032","1407548047","GB","GBR","UNITED KINGDOM" -"1407548048","1407548055","GA","GAB","GABON" -"1407548056","1407548063","NG","NGA","NIGERIA" -"1407548064","1407548111","GB","GBR","UNITED KINGDOM" -"1407548112","1407548119","CI","CIV","COTE D'IVOIRE" -"1407548120","1407548127","GB","GBR","UNITED KINGDOM" -"1407548128","1407548143","CM","CMR","CAMEROON" -"1407548144","1407548151","GB","GBR","UNITED KINGDOM" -"1407548152","1407548415","NG","NGA","NIGERIA" -"1407548416","1407548543","GE","GEO","GEORGIA" -"1407548544","1407549183","GB","GBR","UNITED KINGDOM" -"1407549184","1407549439","GE","GEO","GEORGIA" -"1407549440","1407582207","RU","RUS","RUSSIAN FEDERATION" -"1407582208","1407614975","PL","POL","POLAND" -"1407614976","1407680511","ES","ESP","SPAIN" -"1407680512","1407681535","GB","GBR","UNITED KINGDOM" -"1407681536","1407681639","FR","FRA","FRANCE" -"1407681640","1407681983","GB","GBR","UNITED KINGDOM" -"1407681984","1407681999","ES","ESP","SPAIN" -"1407682000","1407682303","GB","GBR","UNITED KINGDOM" -"1407682304","1407682559","FR","FRA","FRANCE" -"1407682560","1407682879","GB","GBR","UNITED KINGDOM" -"1407682880","1407682911","FI","FIN","FINLAND" -"1407682912","1407687423","GB","GBR","UNITED KINGDOM" -"1407687424","1407687679","ES","ESP","SPAIN" -"1407687680","1407695215","GB","GBR","UNITED KINGDOM" -"1407695216","1407695223","ES","ESP","SPAIN" -"1407695224","1407700271","GB","GBR","UNITED KINGDOM" -"1407700272","1407700287","DE","DEU","GERMANY" -"1407700288","1407702015","GB","GBR","UNITED KINGDOM" -"1407702016","1407702271","FR","FRA","FRANCE" -"1407702272","1407702783","GB","GBR","UNITED KINGDOM" -"1407702784","1407702911","FR","FRA","FRANCE" -"1407702912","1407703039","GB","GBR","UNITED KINGDOM" -"1407703040","1407703407","FR","FRA","FRANCE" -"1407703408","1407703415","GB","GBR","UNITED KINGDOM" -"1407703416","1407703455","FR","FRA","FRANCE" -"1407703456","1407703535","GB","GBR","UNITED KINGDOM" -"1407703536","1407703871","FR","FRA","FRANCE" -"1407703872","1407703935","GB","GBR","UNITED KINGDOM" -"1407703936","1407704039","FR","FRA","FRANCE" -"1407704040","1407704063","GB","GBR","UNITED KINGDOM" -"1407704064","1407704127","FR","FRA","FRANCE" -"1407704128","1407704191","GB","GBR","UNITED KINGDOM" -"1407704192","1407704319","FR","FRA","FRANCE" -"1407704320","1407705207","GB","GBR","UNITED KINGDOM" -"1407705208","1407705215","ES","ESP","SPAIN" -"1407705216","1407705247","GB","GBR","UNITED KINGDOM" -"1407705248","1407705295","ES","ESP","SPAIN" -"1407705296","1407705599","GB","GBR","UNITED KINGDOM" -"1407705600","1407705727","FR","FRA","FRANCE" -"1407705728","1407705759","GB","GBR","UNITED KINGDOM" -"1407705760","1407705791","FR","FRA","FRANCE" -"1407705792","1407706367","GB","GBR","UNITED KINGDOM" -"1407706368","1407706415","FR","FRA","FRANCE" -"1407706416","1407707703","GB","GBR","UNITED KINGDOM" -"1407707704","1407707823","CH","CHE","SWITZERLAND" -"1407707824","1407707903","GB","GBR","UNITED KINGDOM" -"1407707904","1407707935","CH","CHE","SWITZERLAND" -"1407707936","1407709183","GB","GBR","UNITED KINGDOM" -"1407709184","1407709455","DE","DEU","GERMANY" -"1407709456","1407709471","GB","GBR","UNITED KINGDOM" -"1407709472","1407709503","DE","DEU","GERMANY" -"1407709504","1407710207","GB","GBR","UNITED KINGDOM" -"1407710208","1407710239","ES","ESP","SPAIN" -"1407710240","1407710975","GB","GBR","UNITED KINGDOM" -"1407710976","1407711319","FR","FRA","FRANCE" -"1407711320","1407711327","GB","GBR","UNITED KINGDOM" -"1407711328","1407711471","FR","FRA","FRANCE" -"1407711472","1407712207","GB","GBR","UNITED KINGDOM" -"1407712208","1407712223","FR","FRA","FRANCE" -"1407712224","1407712767","GB","GBR","UNITED KINGDOM" -"1407712768","1407712831","DE","DEU","GERMANY" -"1407712832","1407712887","GB","GBR","UNITED KINGDOM" -"1407712888","1407713055","DE","DEU","GERMANY" -"1407713056","1407713279","GB","GBR","UNITED KINGDOM" -"1407713280","1407778815","NL","NLD","NETHERLANDS" -"1407778816","1407842303","SE","SWE","SWEDEN" -"1407842304","1407842367","NO","NOR","NORWAY" -"1407842368","1407844351","SE","SWE","SWEDEN" -"1407844352","1407909887","RU","RUS","RUSSIAN FEDERATION" -"1407909888","1407975423","GR","GRC","GREECE" -"1407975424","1408040959","DE","DEU","GERMANY" -"1408040960","1408106495","RU","RUS","RUSSIAN FEDERATION" -"1408106496","1408172031","PL","POL","POLAND" -"1408172032","1408237567","RU","RUS","RUSSIAN FEDERATION" -"1408237568","1408270335","CZ","CZE","CZECH REPUBLIC" -"1408270336","1408303103","PT","PRT","PORTUGAL" -"1408303104","1408335871","LV","LVA","LATVIA" -"1408335872","1408336879","SE","SWE","SWEDEN" -"1408336880","1408336887","FI","FIN","FINLAND" -"1408336888","1408340047","SE","SWE","SWEDEN" -"1408340048","1408340055","NO","NOR","NORWAY" -"1408340056","1408360935","SE","SWE","SWEDEN" -"1408360936","1408360943","DK","DNK","DENMARK" -"1408360944","1408368639","SE","SWE","SWEDEN" -"1408368640","1408376831","NO","NOR","NORWAY" -"1408376832","1408385023","DE","DEU","GERMANY" -"1408385024","1408393215","PL","POL","POLAND" -"1408393216","1408401407","NL","NLD","NETHERLANDS" -"1408401408","1408434175","RU","RUS","RUSSIAN FEDERATION" -"1408434176","1408436223","DE","DEU","GERMANY" -"1408436224","1408438271","LU","LUX","LUXEMBOURG" -"1408438272","1408440319","FR","FRA","FRANCE" -"1408440320","1408442367","SE","SWE","SWEDEN" -"1408442368","1408444415","PL","POL","POLAND" -"1408444416","1408450559","DE","DEU","GERMANY" -"1408450560","1408454655","RU","RUS","RUSSIAN FEDERATION" -"1408454656","1408456703","DE","DEU","GERMANY" -"1408456704","1408458751","LV","LVA","LATVIA" -"1408458752","1408460799","GB","GBR","UNITED KINGDOM" -"1408460800","1408462847","PL","POL","POLAND" -"1408462848","1408464895","DE","DEU","GERMANY" -"1408464896","1408466943","RO","ROM","ROMANIA" -"1408466944","1408499711","NO","NOR","NORWAY" -"1408499712","1408532479","PS","PSE","PALESTINIAN TERRITORY, OCCUPIED" -"1408532480","1408567919","GB","GBR","UNITED KINGDOM" -"1408567920","1408567927","IE","IRL","IRELAND" -"1408567928","1408574847","GB","GBR","UNITED KINGDOM" -"1408574848","1408574911","IE","IRL","IRELAND" -"1408574912","1408575231","GB","GBR","UNITED KINGDOM" -"1408575232","1408575239","IE","IRL","IRELAND" -"1408575240","1408584191","GB","GBR","UNITED KINGDOM" -"1408584192","1408584703","IE","IRL","IRELAND" -"1408584704","1408585407","GB","GBR","UNITED KINGDOM" -"1408585408","1408585471","IE","IRL","IRELAND" -"1408585472","1408590847","GB","GBR","UNITED KINGDOM" -"1408590848","1408591103","BE","BEL","BELGIUM" -"1408591104","1408598015","GB","GBR","UNITED KINGDOM" -"1408598016","1408630783","FI","FIN","FINLAND" -"1408630784","1408634879","RO","ROM","ROMANIA" -"1408634880","1408663551","DE","DEU","GERMANY" -"1408663552","1408696319","RU","RUS","RUSSIAN FEDERATION" -"1408696320","1408729087","NL","NLD","NETHERLANDS" -"1408729088","1408761855","ES","ESP","SPAIN" -"1408761856","1409286143","SE","SWE","SWEDEN" -"1409286144","1409362431","HU","HUN","HUNGARY" -"1409362432","1409363967","BG","BGR","BULGARIA" -"1409363968","1409413119","HU","HUN","HUNGARY" -"1409413120","1409415167","BG","BGR","BULGARIA" -"1409415168","1409430271","HU","HUN","HUNGARY" -"1409430272","1409430783","RO","ROM","ROMANIA" -"1409430784","1409548287","HU","HUN","HUNGARY" -"1409548288","1409810431","FR","FRA","FRANCE" -"1409810432","1409941503","GB","GBR","UNITED KINGDOM" -"1409941504","1410007039","PL","POL","POLAND" -"1410007040","1410007551","DE","DEU","GERMANY" -"1410007552","1410007807","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1410007808","1410008575","DE","DEU","GERMANY" -"1410008576","1410008607","AE","ARE","UNITED ARAB EMIRATES" -"1410008608","1410008831","DE","DEU","GERMANY" -"1410008832","1410008911","US","USA","UNITED STATES" -"1410008912","1410009343","DE","DEU","GERMANY" -"1410009344","1410009479","US","USA","UNITED STATES" -"1410009480","1410009487","DE","DEU","GERMANY" -"1410009488","1410009535","GI","GIB","GIBRALTAR" -"1410009536","1410010367","DE","DEU","GERMANY" -"1410010368","1410010399","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1410010400","1410010431","LY","LBY","LIBYAN ARAB JAMAHIRIYA" -"1410010432","1410010543","DE","DEU","GERMANY" -"1410010544","1410010575","LY","LBY","LIBYAN ARAB JAMAHIRIYA" -"1410010576","1410010591","DE","DEU","GERMANY" -"1410010592","1410010599","LY","LBY","LIBYAN ARAB JAMAHIRIYA" -"1410010600","1410010607","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1410010608","1410010623","LY","LBY","LIBYAN ARAB JAMAHIRIYA" -"1410010624","1410010687","DE","DEU","GERMANY" -"1410010688","1410010703","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1410010704","1410010719","DE","DEU","GERMANY" -"1410010720","1410010751","LY","LBY","LIBYAN ARAB JAMAHIRIYA" -"1410010752","1410010823","DE","DEU","GERMANY" -"1410010824","1410010831","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1410010832","1410010879","DE","DEU","GERMANY" -"1410010880","1410011135","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1410011136","1410011903","DE","DEU","GERMANY" -"1410011904","1410011919","US","USA","UNITED STATES" -"1410011920","1410012159","DE","DEU","GERMANY" -"1410012160","1410012415","IQ","IRQ","IRAQ" -"1410012416","1410013183","DE","DEU","GERMANY" -"1410013184","1410013439","ES","ESP","SPAIN" -"1410013440","1410013471","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1410013472","1410013535","AE","ARE","UNITED ARAB EMIRATES" -"1410013536","1410013567","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1410013568","1410013631","AE","ARE","UNITED ARAB EMIRATES" -"1410013632","1410013663","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1410013664","1410013695","AE","ARE","UNITED ARAB EMIRATES" -"1410013696","1410013727","KW","KWT","KUWAIT" -"1410013728","1410013759","AE","ARE","UNITED ARAB EMIRATES" -"1410013760","1410013823","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1410013824","1410013887","AF","AFG","AFGHANISTAN" -"1410013888","1410013919","DE","DEU","GERMANY" -"1410013920","1410013951","KW","KWT","KUWAIT" -"1410013952","1410013983","AE","ARE","UNITED ARAB EMIRATES" -"1410013984","1410014015","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1410014016","1410014047","KW","KWT","KUWAIT" -"1410014048","1410014079","AE","ARE","UNITED ARAB EMIRATES" -"1410014080","1410014207","DE","DEU","GERMANY" -"1410014208","1410014239","AE","ARE","UNITED ARAB EMIRATES" -"1410014240","1410014335","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1410014336","1410014399","AE","ARE","UNITED ARAB EMIRATES" -"1410014400","1410014463","ES","ESP","SPAIN" -"1410014464","1410014495","KW","KWT","KUWAIT" -"1410014496","1410014591","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1410014592","1410014885","DE","DEU","GERMANY" -"1410014886","1410014886","ES","ESP","SPAIN" -"1410014887","1410014895","DE","DEU","GERMANY" -"1410014896","1410014927","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1410014928","1410014935","PA","PAN","PANAMA" -"1410014936","1410014943","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1410014944","1410014951","AE","ARE","UNITED ARAB EMIRATES" -"1410014952","1410014966","DE","DEU","GERMANY" -"1410014967","1410014967","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1410014968","1410014968","DE","DEU","GERMANY" -"1410014969","1410014969","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1410014970","1410014972","DE","DEU","GERMANY" -"1410014973","1410014974","AE","ARE","UNITED ARAB EMIRATES" -"1410014975","1410015007","DE","DEU","GERMANY" -"1410015008","1410015103","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1410015104","1410015135","ES","ESP","SPAIN" -"1410015136","1410015423","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1410015424","1410015487","AE","ARE","UNITED ARAB EMIRATES" -"1410015488","1410015743","AF","AFG","AFGHANISTAN" -"1410015744","1410015871","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1410015872","1410015935","AE","ARE","UNITED ARAB EMIRATES" -"1410015936","1410016255","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1410016256","1410016319","AE","ARE","UNITED ARAB EMIRATES" -"1410016320","1410016383","ES","ESP","SPAIN" -"1410016384","1410016415","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1410016416","1410016447","PA","PAN","PANAMA" -"1410016448","1410016543","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1410016544","1410016575","DE","DEU","GERMANY" -"1410016576","1410016607","AE","ARE","UNITED ARAB EMIRATES" -"1410016608","1410016639","PA","PAN","PANAMA" -"1410016640","1410016671","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1410016672","1410016703","PA","PAN","PANAMA" -"1410016704","1410016767","DE","DEU","GERMANY" -"1410016768","1410016831","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1410016832","1410016863","AE","ARE","UNITED ARAB EMIRATES" -"1410016864","1410016895","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1410016896","1410017023","AE","ARE","UNITED ARAB EMIRATES" -"1410017024","1410017055","PA","PAN","PANAMA" -"1410017056","1410017119","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1410017120","1410017279","DE","DEU","GERMANY" -"1410017280","1410017407","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1410017408","1410017791","DE","DEU","GERMANY" -"1410017792","1410018079","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1410018080","1410018303","DE","DEU","GERMANY" -"1410018304","1410018559","AE","ARE","UNITED ARAB EMIRATES" -"1410018560","1410018591","DE","DEU","GERMANY" -"1410018592","1410018607","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1410018608","1410018623","LY","LBY","LIBYAN ARAB JAMAHIRIYA" -"1410018624","1410020103","DE","DEU","GERMANY" -"1410020104","1410020111","US","USA","UNITED STATES" -"1410020112","1410020351","DE","DEU","GERMANY" -"1410020352","1410020863","US","USA","UNITED STATES" -"1410020864","1410021375","DE","DEU","GERMANY" -"1410021376","1410021407","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1410021408","1410021631","DE","DEU","GERMANY" -"1410021632","1410021663","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1410021664","1410021791","DE","DEU","GERMANY" -"1410021792","1410021823","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1410021824","1410022527","DE","DEU","GERMANY" -"1410022528","1410022591","AE","ARE","UNITED ARAB EMIRATES" -"1410022592","1410022655","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1410022656","1410022911","DE","DEU","GERMANY" -"1410022912","1410023423","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1410023424","1410024191","DE","DEU","GERMANY" -"1410024192","1410024223","AE","ARE","UNITED ARAB EMIRATES" -"1410024224","1410024287","DE","DEU","GERMANY" -"1410024288","1410024319","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1410024320","1410024447","DE","DEU","GERMANY" -"1410024448","1410025087","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1410025088","1410025215","DE","DEU","GERMANY" -"1410025216","1410025247","ES","ESP","SPAIN" -"1410025248","1410025279","DE","DEU","GERMANY" -"1410025280","1410025311","AE","ARE","UNITED ARAB EMIRATES" -"1410025312","1410025343","ES","ESP","SPAIN" -"1410025344","1410025407","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1410025408","1410025439","AE","ARE","UNITED ARAB EMIRATES" -"1410025440","1410025503","DE","DEU","GERMANY" -"1410025504","1410025519","AE","ARE","UNITED ARAB EMIRATES" -"1410025520","1410025535","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1410025536","1410025567","ES","ESP","SPAIN" -"1410025568","1410025599","DE","DEU","GERMANY" -"1410025600","1410025727","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1410025728","1410025759","AE","ARE","UNITED ARAB EMIRATES" -"1410025760","1410025791","DE","DEU","GERMANY" -"1410025792","1410025823","AE","ARE","UNITED ARAB EMIRATES" -"1410025824","1410025855","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1410025856","1410025983","DE","DEU","GERMANY" -"1410025984","1410026015","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1410026016","1410026047","AE","ARE","UNITED ARAB EMIRATES" -"1410026048","1410026111","ES","ESP","SPAIN" -"1410026112","1410026143","DE","DEU","GERMANY" -"1410026144","1410026175","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1410026176","1410026207","AE","ARE","UNITED ARAB EMIRATES" -"1410026208","1410026239","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1410026240","1410026367","AE","ARE","UNITED ARAB EMIRATES" -"1410026368","1410026431","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1410026432","1410026463","DE","DEU","GERMANY" -"1410026464","1410026751","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1410026752","1410026815","CA","CAN","CANADA" -"1410026816","1410026847","DE","DEU","GERMANY" -"1410026848","1410026911","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1410026912","1410026943","DE","DEU","GERMANY" -"1410026944","1410027006","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1410027007","1410027007","DE","DEU","GERMANY" -"1410027008","1410027263","KW","KWT","KUWAIT" -"1410027264","1410027519","AF","AFG","AFGHANISTAN" -"1410027520","1410027711","DE","DEU","GERMANY" -"1410027712","1410027775","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1410027776","1410028799","DE","DEU","GERMANY" -"1410028800","1410028831","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1410028832","1410032127","DE","DEU","GERMANY" -"1410032128","1410033151","IQ","IRQ","IRAQ" -"1410033152","1410035199","DE","DEU","GERMANY" -"1410035200","1410035231","KW","KWT","KUWAIT" -"1410035232","1410035263","DE","DEU","GERMANY" -"1410035264","1410035295","KW","KWT","KUWAIT" -"1410035296","1410035367","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1410035368","1410035967","DE","DEU","GERMANY" -"1410035968","1410036063","PA","PAN","PANAMA" -"1410036064","1410036079","IQ","IRQ","IRAQ" -"1410036080","1410036095","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1410036096","1410036111","IQ","IRQ","IRAQ" -"1410036112","1410036127","PA","PAN","PANAMA" -"1410036128","1410036143","DE","DEU","GERMANY" -"1410036144","1410036175","PA","PAN","PANAMA" -"1410036176","1410036191","DE","DEU","GERMANY" -"1410036192","1410036223","PA","PAN","PANAMA" -"1410036224","1410036735","DE","DEU","GERMANY" -"1410036736","1410036751","PA","PAN","PANAMA" -"1410036752","1410037759","DE","DEU","GERMANY" -"1410037760","1410038015","US","USA","UNITED STATES" -"1410038016","1410039807","DE","DEU","GERMANY" -"1410039808","1410041855","AE","ARE","UNITED ARAB EMIRATES" -"1410041856","1410042815","LB","LBN","LEBANON" -"1410042816","1410042831","US","USA","UNITED STATES" -"1410042832","1410043903","LB","LBN","LEBANON" -"1410043904","1410044415","JO","JOR","JORDAN" -"1410044416","1410072319","DE","DEU","GERMANY" -"1410072320","1410072575","AE","ARE","UNITED ARAB EMIRATES" -"1410072576","1410203647","GB","GBR","UNITED KINGDOM" -"1410203648","1410206543","FR","FRA","FRANCE" -"1410206544","1410206551","ES","ESP","SPAIN" -"1410206552","1410212863","FR","FRA","FRANCE" -"1410212864","1410213119","GB","GBR","UNITED KINGDOM" -"1410213120","1410214495","FR","FRA","FRANCE" -"1410214496","1410214503","PT","PRT","PORTUGAL" -"1410214504","1410240423","FR","FRA","FRANCE" -"1410240424","1410240431","IT","ITA","ITALY" -"1410240432","1410250551","FR","FRA","FRANCE" -"1410250552","1410250559","GB","GBR","UNITED KINGDOM" -"1410250560","1410261007","FR","FRA","FRANCE" -"1410261008","1410261015","GB","GBR","UNITED KINGDOM" -"1410261016","1410262799","FR","FRA","FRANCE" -"1410262800","1410262815","DE","DEU","GERMANY" -"1410262816","1410267039","FR","FRA","FRANCE" -"1410267040","1410267055","ES","ESP","SPAIN" -"1410267056","1410267071","GB","GBR","UNITED KINGDOM" -"1410267072","1410267087","IT","ITA","ITALY" -"1410267088","1410269183","FR","FRA","FRANCE" -"1410269184","1410318335","LT","LTU","LITHUANIA" -"1410318336","1410319359","LV","LVA","LATVIA" -"1410319360","1410334719","LT","LTU","LITHUANIA" -"1410334720","1410341887","ES","ESP","SPAIN" -"1410341888","1410342911","MA","MAR","MOROCCO" -"1410342912","1410351103","SK","SVK","SLOVAKIA" -"1410351104","1410353039","CH","CHE","SWITZERLAND" -"1410353040","1410353047","NI","NIC","NICARAGUA" -"1410353048","1410353143","CH","CHE","SWITZERLAND" -"1410353144","1410353151","NI","NIC","NICARAGUA" -"1410353152","1410354175","CH","CHE","SWITZERLAND" -"1410354176","1410354431","FR","FRA","FRANCE" -"1410354432","1410359295","CH","CHE","SWITZERLAND" -"1410359296","1410367487","CZ","CZE","CZECH REPUBLIC" -"1410367488","1410375679","RU","RUS","RUSSIAN FEDERATION" -"1410375680","1410375935","DK","DNK","DENMARK" -"1410375936","1410376191","CH","CHE","SWITZERLAND" -"1410376192","1410383871","DK","DNK","DENMARK" -"1410383872","1410392063","NO","NOR","NORWAY" -"1410392064","1410397183","DE","DEU","GERMANY" -"1410397184","1410397439","PL","POL","POLAND" -"1410397440","1410399487","DE","DEU","GERMANY" -"1410399488","1410399743","TR","TUR","TURKEY" -"1410399744","1410400063","DE","DEU","GERMANY" -"1410400064","1410400127","TR","TUR","TURKEY" -"1410400128","1410400255","DE","DEU","GERMANY" -"1410400256","1410408447","RU","RUS","RUSSIAN FEDERATION" -"1410408448","1410416639","IT","ITA","ITALY" -"1410416640","1410424831","TR","TUR","TURKEY" -"1410424832","1410433023","DE","DEU","GERMANY" -"1410433024","1410441215","BE","BEL","BELGIUM" -"1410441216","1410449407","DE","DEU","GERMANY" -"1410449408","1410457599","SE","SWE","SWEDEN" -"1410457600","1410465791","RU","RUS","RUSSIAN FEDERATION" -"1410465792","1410473983","ES","ESP","SPAIN" -"1410473984","1410490367","JO","JOR","JORDAN" -"1410490368","1410498559","RU","RUS","RUSSIAN FEDERATION" -"1410498560","1410502803","IT","ITA","ITALY" -"1410502804","1410502807","US","USA","UNITED STATES" -"1410502808","1410506751","IT","ITA","ITALY" -"1410506752","1410514943","IE","IRL","IRELAND" -"1410514944","1410523135","GB","GBR","UNITED KINGDOM" -"1410523136","1410531327","PT","PRT","PORTUGAL" -"1410531328","1410539519","DE","DEU","GERMANY" -"1410539520","1410542591","GB","GBR","UNITED KINGDOM" -"1410542592","1410543103","IE","IRL","IRELAND" -"1410543104","1410544415","GB","GBR","UNITED KINGDOM" -"1410544416","1410544431","DE","DEU","GERMANY" -"1410544432","1410544447","FR","FRA","FRANCE" -"1410544448","1410547711","GB","GBR","UNITED KINGDOM" -"1410547712","1410555903","CZ","CZE","CZECH REPUBLIC" -"1410555904","1410564095","GB","GBR","UNITED KINGDOM" -"1410564096","1410572287","SE","SWE","SWEDEN" -"1410572288","1410572863","DE","DEU","GERMANY" -"1410572864","1410572895","RU","RUS","RUSSIAN FEDERATION" -"1410572896","1410573407","DE","DEU","GERMANY" -"1410573408","1410573439","RU","RUS","RUSSIAN FEDERATION" -"1410573440","1410573695","DE","DEU","GERMANY" -"1410573696","1410573711","RU","RUS","RUSSIAN FEDERATION" -"1410573712","1410573815","DE","DEU","GERMANY" -"1410573816","1410573823","RU","RUS","RUSSIAN FEDERATION" -"1410573824","1410574527","DE","DEU","GERMANY" -"1410574528","1410574559","CH","CHE","SWITZERLAND" -"1410574560","1410574583","DE","DEU","GERMANY" -"1410574584","1410574591","RU","RUS","RUSSIAN FEDERATION" -"1410574592","1410574719","DE","DEU","GERMANY" -"1410574720","1410574727","RU","RUS","RUSSIAN FEDERATION" -"1410574728","1410574847","DE","DEU","GERMANY" -"1410574848","1410575103","GB","GBR","UNITED KINGDOM" -"1410575104","1410575111","US","USA","UNITED STATES" -"1410575112","1410575119","IT","ITA","ITALY" -"1410575120","1410575231","DE","DEU","GERMANY" -"1410575232","1410575263","CH","CHE","SWITZERLAND" -"1410575264","1410575279","DE","DEU","GERMANY" -"1410575280","1410575295","IL","ISR","ISRAEL" -"1410575296","1410575327","IT","ITA","ITALY" -"1410575328","1410575359","SI","SVN","SLOVENIA" -"1410575360","1410575551","DE","DEU","GERMANY" -"1410575552","1410575615","IT","ITA","ITALY" -"1410575616","1410575775","DE","DEU","GERMANY" -"1410575776","1410575791","RU","RUS","RUSSIAN FEDERATION" -"1410575792","1410575807","DE","DEU","GERMANY" -"1410575808","1410575823","IL","ISR","ISRAEL" -"1410575824","1410575839","BG","BGR","BULGARIA" -"1410575840","1410575855","IT","ITA","ITALY" -"1410575856","1410575871","DE","DEU","GERMANY" -"1410575872","1410575999","DK","DNK","DENMARK" -"1410576000","1410576063","DE","DEU","GERMANY" -"1410576064","1410576127","IT","ITA","ITALY" -"1410576128","1410576255","DE","DEU","GERMANY" -"1410576256","1410576383","IT","ITA","ITALY" -"1410576384","1410588671","DE","DEU","GERMANY" -"1410588672","1410596863","GB","GBR","UNITED KINGDOM" -"1410596864","1410597839","ES","ESP","SPAIN" -"1410597840","1410597855","FR","FRA","FRANCE" -"1410597856","1410605055","ES","ESP","SPAIN" -"1410605056","1410613247","CH","CHE","SWITZERLAND" -"1410613248","1410621439","AL","ALB","ALBANIA" -"1410621440","1410629631","NO","NOR","NORWAY" -"1410629632","1410637823","FI","FIN","FINLAND" -"1410637824","1410646015","AT","AUT","AUSTRIA" -"1410646016","1410654207","GB","GBR","UNITED KINGDOM" -"1410654208","1410662399","SI","SVN","SLOVENIA" -"1410662400","1410670591","HU","HUN","HUNGARY" -"1410670592","1410678783","DE","DEU","GERMANY" -"1410678784","1410686975","RU","RUS","RUSSIAN FEDERATION" -"1410686976","1410695167","CZ","CZE","CZECH REPUBLIC" -"1410695168","1410703359","GB","GBR","UNITED KINGDOM" -"1410703360","1410711551","ES","ESP","SPAIN" -"1410711552","1410719743","BG","BGR","BULGARIA" -"1410719744","1410727935","RU","RUS","RUSSIAN FEDERATION" -"1410727936","1410736127","BG","BGR","BULGARIA" -"1410736128","1410744319","CS","SCG","SERBIA AND MONTENEGRO" -"1410744320","1410745223","FR","FRA","FRANCE" -"1410745224","1410745231","AE","ARE","UNITED ARAB EMIRATES" -"1410745232","1410745247","FR","FRA","FRANCE" -"1410745248","1410745279","US","USA","UNITED STATES" -"1410745280","1410745855","FR","FRA","FRANCE" -"1410745856","1410746111","CH","CHE","SWITZERLAND" -"1410746112","1410746623","AO","AGO","ANGOLA" -"1410746624","1410752511","FR","FRA","FRANCE" -"1410752512","1410754815","AQ","ATA","ANTARCTICA" -"1410754816","1410754847","DE","DEU","GERMANY" -"1410754848","1410754879","NL","NLD","NETHERLANDS" -"1410754880","1410755071","DE","DEU","GERMANY" -"1410755072","1410755327","AQ","ATA","ANTARCTICA" -"1410755328","1410755583","RO","ROM","ROMANIA" -"1410755584","1410756095","AQ","ATA","ANTARCTICA" -"1410756096","1410756607","US","USA","UNITED STATES" -"1410756608","1410756863","DE","DEU","GERMANY" -"1410756864","1410757119","AQ","ATA","ANTARCTICA" -"1410757120","1410758655","DE","DEU","GERMANY" -"1410758656","1410760191","AQ","ATA","ANTARCTICA" -"1410760192","1410760447","DE","DEU","GERMANY" -"1410760448","1410760683","AQ","ATA","ANTARCTICA" -"1410760684","1410760687","US","USA","UNITED STATES" -"1410760688","1410760699","AQ","ATA","ANTARCTICA" -"1410760700","1410760703","US","USA","UNITED STATES" -"1410760704","1410768895","RU","RUS","RUSSIAN FEDERATION" -"1410768896","1410777087","GB","GBR","UNITED KINGDOM" -"1410777088","1410785279","RU","RUS","RUSSIAN FEDERATION" -"1410785280","1410793471","SA","SAU","SAUDI ARABIA" -"1410793472","1410801663","GB","GBR","UNITED KINGDOM" -"1410801664","1410809855","RU","RUS","RUSSIAN FEDERATION" -"1410809856","1410818047","DE","DEU","GERMANY" -"1410818048","1410826239","SA","SAU","SAUDI ARABIA" -"1410826240","1410834431","SE","SWE","SWEDEN" -"1410834432","1410842623","PL","POL","POLAND" -"1410842624","1410850815","PT","PRT","PORTUGAL" -"1410850816","1410859007","DE","DEU","GERMANY" -"1410859008","1411383295","NL","NLD","NETHERLANDS" -"1411383296","1411448831","LT","LTU","LITHUANIA" -"1411448832","1411451391","IT","ITA","ITALY" -"1411451392","1411451903","DE","DEU","GERMANY" -"1411451904","1411452159","IT","ITA","ITALY" -"1411452160","1411452415","DE","DEU","GERMANY" -"1411452416","1411453439","IT","ITA","ITALY" -"1411453440","1411453695","DE","DEU","GERMANY" -"1411453696","1411454975","IT","ITA","ITALY" -"1411454976","1411455743","DE","DEU","GERMANY" -"1411455744","1411456255","IT","ITA","ITALY" -"1411456256","1411456511","DE","DEU","GERMANY" -"1411456512","1411457279","IT","ITA","ITALY" -"1411457280","1411457535","DE","DEU","GERMANY" -"1411457536","1411465215","IT","ITA","ITALY" -"1411465216","1411465471","GB","GBR","UNITED KINGDOM" -"1411465472","1411465727","US","USA","UNITED STATES" -"1411465728","1411481855","IT","ITA","ITALY" -"1411481856","1411483903","DE","DEU","GERMANY" -"1411483904","1411500799","IT","ITA","ITALY" -"1411500800","1411501055","DE","DEU","GERMANY" -"1411501056","1411505407","IT","ITA","ITALY" -"1411505408","1411505663","US","USA","UNITED STATES" -"1411505664","1411514367","IT","ITA","ITALY" -"1411514368","1411579903","FI","FIN","FINLAND" -"1411579904","1411645439","NL","NLD","NETHERLANDS" -"1411710976","1411776511","FR","FRA","FRANCE" -"1411776512","1411780607","GR","GRC","GREECE" -"1411780608","1411784703","PL","POL","POLAND" -"1411784704","1411788799","GB","GBR","UNITED KINGDOM" -"1411788800","1411792895","IT","ITA","ITALY" -"1411792896","1411796991","DE","DEU","GERMANY" -"1411796992","1411805183","PL","POL","POLAND" -"1411805184","1411809279","AT","AUT","AUSTRIA" -"1411809280","1411813375","LV","LVA","LATVIA" -"1411813376","1411817471","NO","NOR","NORWAY" -"1411817472","1411821567","PL","POL","POLAND" -"1411825664","1411829759","DE","DEU","GERMANY" -"1411829760","1411833855","PL","POL","POLAND" -"1411833856","1411837951","NL","NLD","NETHERLANDS" -"1411837952","1411842047","BG","BGR","BULGARIA" -"1411842048","1411907583","PT","PRT","PORTUGAL" -"1411907840","1411908351","GB","GBR","UNITED KINGDOM" -"1411908400","1411908479","GB","GBR","UNITED KINGDOM" -"1411908536","1411908559","GB","GBR","UNITED KINGDOM" -"1411908560","1411908563","AU","AUS","AUSTRALIA" -"1411908608","1411909375","GB","GBR","UNITED KINGDOM" -"1411909632","1411909759","GB","GBR","UNITED KINGDOM" -"1411909888","1411910143","GB","GBR","UNITED KINGDOM" -"1411910400","1411910655","GB","GBR","UNITED KINGDOM" -"1411910912","1411911167","GB","GBR","UNITED KINGDOM" -"1411911424","1411911439","GB","GBR","UNITED KINGDOM" -"1411911616","1411911647","GB","GBR","UNITED KINGDOM" -"1411911680","1411915775","US","USA","UNITED STATES" -"1411915776","1411915839","GB","GBR","UNITED KINGDOM" -"1411915904","1411915911","GB","GBR","UNITED KINGDOM" -"1411915936","1411915967","GB","GBR","UNITED KINGDOM" -"1411916032","1411916095","GB","GBR","UNITED KINGDOM" -"1411916296","1411916303","GB","GBR","UNITED KINGDOM" -"1411916800","1411916863","GB","GBR","UNITED KINGDOM" -"1411917568","1411917639","GB","GBR","UNITED KINGDOM" -"1411917664","1411917695","GB","GBR","UNITED KINGDOM" -"1411919872","1411923967","DE","DEU","GERMANY" -"1411923968","1411940351","BG","BGR","BULGARIA" -"1411940352","1411973119","PL","POL","POLAND" -"1411973120","1411999759","SI","SVN","SLOVENIA" -"1411999760","1411999767","BA","BIH","BOSNIA AND HERZEGOVINA" -"1411999768","1411999775","SI","SVN","SLOVENIA" -"1411999776","1411999799","BA","BIH","BOSNIA AND HERZEGOVINA" -"1411999800","1411999807","SI","SVN","SLOVENIA" -"1411999808","1411999823","BA","BIH","BOSNIA AND HERZEGOVINA" -"1411999824","1411999831","SI","SVN","SLOVENIA" -"1411999832","1411999839","BA","BIH","BOSNIA AND HERZEGOVINA" -"1411999840","1411999871","SI","SVN","SLOVENIA" -"1411999872","1412000767","BA","BIH","BOSNIA AND HERZEGOVINA" -"1412000768","1412000783","SI","SVN","SLOVENIA" -"1412000784","1412000791","BA","BIH","BOSNIA AND HERZEGOVINA" -"1412000792","1412001791","SI","SVN","SLOVENIA" -"1412001792","1412002303","RO","ROM","ROMANIA" -"1412002304","1412002559","SI","SVN","SLOVENIA" -"1412002560","1412002815","MK","MKD","THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA" -"1412002816","1412003391","BA","BIH","BOSNIA AND HERZEGOVINA" -"1412003392","1412003399","HR","HRV","CROATIA" -"1412003400","1412003839","BA","BIH","BOSNIA AND HERZEGOVINA" -"1412003840","1412004607","BG","BGR","BULGARIA" -"1412004608","1412005887","SI","SVN","SLOVENIA" -"1412005888","1412038655","NL","NLD","NETHERLANDS" -"1412038656","1412071423","RU","RUS","RUSSIAN FEDERATION" -"1412071424","1412104191","CZ","CZE","CZECH REPUBLIC" -"1412104192","1412136959","GB","GBR","UNITED KINGDOM" -"1412136960","1412169727","BG","BGR","BULGARIA" -"1412169728","1412202495","TR","TUR","TURKEY" -"1412202496","1412235263","DE","DEU","GERMANY" -"1412235264","1412241111","GB","GBR","UNITED KINGDOM" -"1412241112","1412241119","NL","NLD","NETHERLANDS" -"1412241120","1412257535","GB","GBR","UNITED KINGDOM" -"1412257536","1412257615","NL","NLD","NETHERLANDS" -"1412257616","1412258559","GB","GBR","UNITED KINGDOM" -"1412258560","1412258815","DE","DEU","GERMANY" -"1412258816","1412300799","GB","GBR","UNITED KINGDOM" -"1412300800","1412333567","DE","DEU","GERMANY" -"1412333568","1412366335","LT","LTU","LITHUANIA" -"1412366336","1412399103","SK","SVK","SLOVAKIA" -"1412399104","1412415487","RU","RUS","RUSSIAN FEDERATION" -"1412415488","1412415743","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1412415744","1412415999","AE","ARE","UNITED ARAB EMIRATES" -"1412416000","1412420351","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1412420352","1412420607","AE","ARE","UNITED ARAB EMIRATES" -"1412420608","1412431871","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1412431872","1412562943","NO","NOR","NORWAY" -"1412562944","1412628479","EE","EST","ESTONIA" -"1412628480","1412641791","TR","TUR","TURKEY" -"1412641792","1412642815","DE","DEU","GERMANY" -"1412642816","1412644863","TR","TUR","TURKEY" -"1412644864","1412661247","RU","RUS","RUSSIAN FEDERATION" -"1412661248","1412677631","GB","GBR","UNITED KINGDOM" -"1412677632","1412685823","RU","RUS","RUSSIAN FEDERATION" -"1412685824","1412686239","IE","IRL","IRELAND" -"1412686240","1412686335","BB","BRB","BARBADOS" -"1412686336","1412686591","IE","IRL","IRELAND" -"1412686592","1412686847","GB","GBR","UNITED KINGDOM" -"1412686848","1412690191","IE","IRL","IRELAND" -"1412690192","1412690199","GB","GBR","UNITED KINGDOM" -"1412690200","1412694015","IE","IRL","IRELAND" -"1412694016","1412710399","EE","EST","ESTONIA" -"1412710400","1412726783","RU","RUS","RUSSIAN FEDERATION" -"1412726784","1412743167","SI","SVN","SLOVENIA" -"1412743168","1412775935","NO","NOR","NORWAY" -"1412775936","1412792319","NL","NLD","NETHERLANDS" -"1412792320","1412793343","US","USA","UNITED STATES" -"1412793856","1412804607","US","USA","UNITED STATES" -"1412804864","1412805631","US","USA","UNITED STATES" -"1412806144","1412808703","US","USA","UNITED STATES" -"1412808704","1412825087","RU","RUS","RUSSIAN FEDERATION" -"1412825088","1412830463","IQ","IRQ","IRAQ" -"1412830464","1412833279","LB","LBN","LEBANON" -"1412833280","1412833535","CI","CIV","COTE D'IVOIRE" -"1412833536","1412841471","LB","LBN","LEBANON" -"1412841472","1412857855","UZ","UZB","UZBEKISTAN" -"1412857856","1412874239","BG","BGR","BULGARIA" -"1412874240","1412890623","RU","RUS","RUSSIAN FEDERATION" -"1412890624","1412907007","LT","LTU","LITHUANIA" -"1412907008","1412923391","SE","SWE","SWEDEN" -"1412923392","1412939775","FR","FRA","FRANCE" -"1412939776","1412956159","CH","CHE","SWITZERLAND" -"1412956160","1413480447","DE","DEU","GERMANY" -"1413480448","1414004735","GB","GBR","UNITED KINGDOM" -"1414004736","1414266879","CH","CHE","SWITZERLAND" -"1414266880","1414529023","ES","ESP","SPAIN" -"1414529024","1415053311","NL","NLD","NETHERLANDS" -"1415053312","1415184383","ES","ESP","SPAIN" -"1415184384","1415315455","PT","PRT","PORTUGAL" -"1415315456","1415446527","GB","GBR","UNITED KINGDOM" -"1415446528","1415577599","IL","ISR","ISRAEL" -"1415577600","1416101887","FR","FRA","FRANCE" -"1416101888","1416364031","NL","NLD","NETHERLANDS" -"1416364032","1416626175","IL","ISR","ISRAEL" -"1416626176","1417150463","AT","AUT","AUSTRIA" -"1417150464","1417674751","ES","ESP","SPAIN" -"1417674752","1421869055","DE","DEU","GERMANY" -"1421869056","1422393343","BE","BEL","BELGIUM" -"1422393344","1422393599","DE","DEU","GERMANY" -"1422393600","1422393855","IT","ITA","ITALY" -"1422393856","1422399103","DE","DEU","GERMANY" -"1422399104","1422399231","IT","ITA","ITALY" -"1422399232","1422399999","DE","DEU","GERMANY" -"1422400000","1422400255","IT","ITA","ITALY" -"1422400256","1422401023","DE","DEU","GERMANY" -"1422401024","1422401087","RO","ROM","ROMANIA" -"1422401088","1422401151","GB","GBR","UNITED KINGDOM" -"1422401152","1422401279","DE","DEU","GERMANY" -"1422401280","1422401283","RO","ROM","ROMANIA" -"1422401284","1422462207","DE","DEU","GERMANY" -"1422462208","1422462463","TR","TUR","TURKEY" -"1422462464","1422468671","DE","DEU","GERMANY" -"1422468672","1422468735","IT","ITA","ITALY" -"1422468736","1422479615","DE","DEU","GERMANY" -"1422479616","1422479871","BE","BEL","BELGIUM" -"1422479872","1422491647","DE","DEU","GERMANY" -"1422491648","1422508031","GB","GBR","UNITED KINGDOM" -"1422508032","1422512127","BG","BGR","BULGARIA" -"1422512128","1422516223","PL","POL","POLAND" -"1422516224","1422520319","BY","BLR","BELARUS" -"1422520320","1422524415","RU","RUS","RUSSIAN FEDERATION" -"1422524416","1422589951","NO","NOR","NORWAY" -"1422589952","1422655487","IE","IRL","IRELAND" -"1422655488","1422721023","RU","RUS","RUSSIAN FEDERATION" -"1422721024","1422729215","PL","POL","POLAND" -"1422729216","1422737407","NO","NOR","NORWAY" -"1422753792","1422761983","FR","FRA","FRANCE" -"1422761984","1422770175","PL","POL","POLAND" -"1422770176","1422786559","GR","GRC","GREECE" -"1422786560","1422852095","HU","HUN","HUNGARY" -"1422852096","1422853119","FR","FRA","FRANCE" -"1422853632","1422853919","FR","FRA","FRANCE" -"1422854144","1422854151","FR","FRA","FRANCE" -"1422856320","1422856575","FR","FRA","FRANCE" -"1422856704","1422857855","FR","FRA","FRANCE" -"1422857920","1422858143","FR","FRA","FRANCE" -"1422858240","1422858623","FR","FRA","FRANCE" -"1422909440","1422909695","NL","NLD","NETHERLANDS" -"1422917376","1422917631","GB","GBR","UNITED KINGDOM" -"1422917632","1423441919","NO","NOR","NORWAY" -"1423441920","1423704063","SE","SWE","SWEDEN" -"1423704064","1423966207","IT","ITA","ITALY" -"1423966208","1424097279","HU","HUN","HUNGARY" -"1424097280","1424228351","CH","CHE","SWITZERLAND" -"1424228352","1424359423","IL","ISR","ISRAEL" -"1424359424","1424490495","FI","FIN","FINLAND" -"1424490496","1424523263","ES","ESP","SPAIN" -"1424523264","1424556031","RO","ROM","ROMANIA" -"1424588800","1424588839","DE","DEU","GERMANY" -"1424588840","1424588847","GB","GBR","UNITED KINGDOM" -"1424588848","1424588959","DE","DEU","GERMANY" -"1424588960","1424588963","GB","GBR","UNITED KINGDOM" -"1424588964","1424589311","DE","DEU","GERMANY" -"1424589312","1424589567","FR","FRA","FRANCE" -"1424589568","1424590719","GB","GBR","UNITED KINGDOM" -"1424590720","1424590767","SE","SWE","SWEDEN" -"1424590768","1424590775","GB","GBR","UNITED KINGDOM" -"1424590776","1424590783","SE","SWE","SWEDEN" -"1424590784","1424590847","CH","CHE","SWITZERLAND" -"1424590848","1424591406","SE","SWE","SWEDEN" -"1424591407","1424591407","GB","GBR","UNITED KINGDOM" -"1424591408","1424591423","SE","SWE","SWEDEN" -"1424591424","1424591439","GB","GBR","UNITED KINGDOM" -"1424591440","1424591551","SE","SWE","SWEDEN" -"1424591552","1424591615","CZ","CZE","CZECH REPUBLIC" -"1424591616","1424591839","GB","GBR","UNITED KINGDOM" -"1424591840","1424591871","ZA","ZAF","SOUTH AFRICA" -"1424591872","1424592639","GB","GBR","UNITED KINGDOM" -"1424592640","1424592675","FR","FRA","FRANCE" -"1424592676","1424592679","GB","GBR","UNITED KINGDOM" -"1424592680","1424592683","FR","FRA","FRANCE" -"1424592684","1424592687","GB","GBR","UNITED KINGDOM" -"1424592688","1424592767","FR","FRA","FRANCE" -"1424592768","1424593407","GB","GBR","UNITED KINGDOM" -"1424593408","1424593663","DE","DEU","GERMANY" -"1424593664","1424593727","SK","SVK","SLOVAKIA" -"1424593728","1424593791","HU","HUN","HUNGARY" -"1424593792","1424593919","DE","DEU","GERMANY" -"1424593920","1424593967","FR","FRA","FRANCE" -"1424593968","1424593983","GB","GBR","UNITED KINGDOM" -"1424593984","1424594055","FR","FRA","FRANCE" -"1424594056","1424594063","IT","ITA","ITALY" -"1424594064","1424594175","FR","FRA","FRANCE" -"1424594176","1424594431","GB","GBR","UNITED KINGDOM" -"1424594432","1424594495","IE","IRL","IRELAND" -"1424594496","1424595455","GB","GBR","UNITED KINGDOM" -"1424595456","1424595527","IT","ITA","ITALY" -"1424595528","1424595535","GB","GBR","UNITED KINGDOM" -"1424595536","1424595575","IT","ITA","ITALY" -"1424595576","1424595583","ES","ESP","SPAIN" -"1424595584","1424595663","IT","ITA","ITALY" -"1424595664","1424595671","GB","GBR","UNITED KINGDOM" -"1424595672","1424596479","IT","ITA","ITALY" -"1424596480","1424596991","FR","FRA","FRANCE" -"1424596992","1424597255","CZ","CZE","CZECH REPUBLIC" -"1424597256","1424597263","GB","GBR","UNITED KINGDOM" -"1424597264","1424597311","CZ","CZE","CZECH REPUBLIC" -"1424597312","1424597343","GB","GBR","UNITED KINGDOM" -"1424597344","1424597351","CH","CHE","SWITZERLAND" -"1424597352","1424597503","GB","GBR","UNITED KINGDOM" -"1424597504","1424597759","FR","FRA","FRANCE" -"1424597760","1424598015","IT","ITA","ITALY" -"1424598016","1424599039","GB","GBR","UNITED KINGDOM" -"1424599040","1424599279","DK","DNK","DENMARK" -"1424599280","1424599295","GB","GBR","UNITED KINGDOM" -"1424599296","1424599551","DK","DNK","DENMARK" -"1424599552","1424599839","HU","HUN","HUNGARY" -"1424599840","1424599847","GB","GBR","UNITED KINGDOM" -"1424599848","1424599855","HU","HUN","HUNGARY" -"1424599856","1424599871","GB","GBR","UNITED KINGDOM" -"1424599872","1424599875","HU","HUN","HUNGARY" -"1424599876","1424599879","GB","GBR","UNITED KINGDOM" -"1424599880","1424599887","HU","HUN","HUNGARY" -"1424599888","1424599903","GB","GBR","UNITED KINGDOM" -"1424599904","1424599951","HU","HUN","HUNGARY" -"1424599952","1424600063","GB","GBR","UNITED KINGDOM" -"1424600064","1424600319","CH","CHE","SWITZERLAND" -"1424600320","1424600575","GB","GBR","UNITED KINGDOM" -"1424600576","1424600831","FR","FRA","FRANCE" -"1424600832","1424601087","BE","BEL","BELGIUM" -"1424601088","1424601343","GB","GBR","UNITED KINGDOM" -"1424601344","1424601599","ES","ESP","SPAIN" -"1424601600","1424601855","CH","CHE","SWITZERLAND" -"1424601856","1424602111","GB","GBR","UNITED KINGDOM" -"1424602112","1424602623","DE","DEU","GERMANY" -"1424602624","1424602879","GB","GBR","UNITED KINGDOM" -"1424602880","1424602911","US","USA","UNITED STATES" -"1424602912","1424602927","FR","FRA","FRANCE" -"1424602928","1424603007","US","USA","UNITED STATES" -"1424603008","1424603023","GB","GBR","UNITED KINGDOM" -"1424603024","1424603055","US","USA","UNITED STATES" -"1424603056","1424603063","NL","NLD","NETHERLANDS" -"1424603064","1424603087","US","USA","UNITED STATES" -"1424603088","1424603095","GB","GBR","UNITED KINGDOM" -"1424603096","1424603135","US","USA","UNITED STATES" -"1424603136","1424603391","SK","SVK","SLOVAKIA" -"1424603392","1424603647","DE","DEU","GERMANY" -"1424603648","1424603903","GB","GBR","UNITED KINGDOM" -"1424603904","1424604159","ES","ESP","SPAIN" -"1424604160","1424604543","NL","NLD","NETHERLANDS" -"1424604544","1424604671","GB","GBR","UNITED KINGDOM" -"1424604672","1424604799","NL","NLD","NETHERLANDS" -"1424604800","1424604927","GB","GBR","UNITED KINGDOM" -"1424604928","1424605119","NL","NLD","NETHERLANDS" -"1424605120","1424605151","GB","GBR","UNITED KINGDOM" -"1424605152","1424605183","NL","NLD","NETHERLANDS" -"1424605184","1424605439","GB","GBR","UNITED KINGDOM" -"1424605440","1424605583","BG","BGR","BULGARIA" -"1424605584","1424605631","GB","GBR","UNITED KINGDOM" -"1424605632","1424605695","BG","BGR","BULGARIA" -"1424605696","1424605951","NL","NLD","NETHERLANDS" -"1424605952","1424605959","CH","CHE","SWITZERLAND" -"1424605960","1424606023","AT","AUT","AUSTRIA" -"1424606024","1424606199","GB","GBR","UNITED KINGDOM" -"1424606200","1424606207","AT","AUT","AUSTRIA" -"1424606208","1424606455","GB","GBR","UNITED KINGDOM" -"1424606456","1424606463","AT","AUT","AUSTRIA" -"1424606464","1424606711","GB","GBR","UNITED KINGDOM" -"1424606712","1424606719","AT","AUT","AUSTRIA" -"1424606720","1424606967","GB","GBR","UNITED KINGDOM" -"1424606968","1424606975","AT","AUT","AUSTRIA" -"1424606976","1424607103","GB","GBR","UNITED KINGDOM" -"1424607104","1424607119","SK","SVK","SLOVAKIA" -"1424607120","1424607167","GB","GBR","UNITED KINGDOM" -"1424607168","1424607199","SK","SVK","SLOVAKIA" -"1424607200","1424607215","GB","GBR","UNITED KINGDOM" -"1424607216","1424607231","SK","SVK","SLOVAKIA" -"1424607232","1424607487","GB","GBR","UNITED KINGDOM" -"1424607488","1424607871","DE","DEU","GERMANY" -"1424607872","1424608031","GB","GBR","UNITED KINGDOM" -"1424608032","1424608083","FR","FRA","FRANCE" -"1424608084","1424608087","GB","GBR","UNITED KINGDOM" -"1424608088","1424608127","FR","FRA","FRANCE" -"1424608128","1424608279","GB","GBR","UNITED KINGDOM" -"1424608280","1424608383","FR","FRA","FRANCE" -"1424608384","1424608399","ES","ESP","SPAIN" -"1424608400","1424608511","FR","FRA","FRANCE" -"1424608512","1424608687","ES","ESP","SPAIN" -"1424608688","1424608695","GB","GBR","UNITED KINGDOM" -"1424608696","1424608703","ES","ESP","SPAIN" -"1424608704","1424608719","GB","GBR","UNITED KINGDOM" -"1424608720","1424609023","ES","ESP","SPAIN" -"1424609024","1424609259","DE","DEU","GERMANY" -"1424609260","1424609271","GB","GBR","UNITED KINGDOM" -"1424609272","1424609279","DE","DEU","GERMANY" -"1424609280","1424609395","CH","CHE","SWITZERLAND" -"1424609396","1424609399","GB","GBR","UNITED KINGDOM" -"1424609400","1424609791","CH","CHE","SWITZERLAND" -"1424609792","1424610303","GB","GBR","UNITED KINGDOM" -"1424610304","1424610559","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"1424610560","1424610815","PL","POL","POLAND" -"1424610816","1424611071","FR","FRA","FRANCE" -"1424611072","1424611143","BE","BEL","BELGIUM" -"1424611144","1424611151","GB","GBR","UNITED KINGDOM" -"1424611152","1424611327","BE","BEL","BELGIUM" -"1424611328","1424611583","PL","POL","POLAND" -"1424611584","1424612095","GB","GBR","UNITED KINGDOM" -"1424612096","1424612231","CZ","CZE","CZECH REPUBLIC" -"1424612232","1424612239","CH","CHE","SWITZERLAND" -"1424612240","1424612319","CZ","CZE","CZECH REPUBLIC" -"1424612320","1424612607","GB","GBR","UNITED KINGDOM" -"1424612608","1424612671","AE","ARE","UNITED ARAB EMIRATES" -"1424612672","1424612863","GB","GBR","UNITED KINGDOM" -"1424612864","1424613119","FR","FRA","FRANCE" -"1424613120","1424613375","GB","GBR","UNITED KINGDOM" -"1424613376","1424613631","ES","ESP","SPAIN" -"1424613632","1424614103","IT","ITA","ITALY" -"1424614104","1424614111","GB","GBR","UNITED KINGDOM" -"1424614112","1424614127","IT","ITA","ITALY" -"1424614128","1424614399","GB","GBR","UNITED KINGDOM" -"1424614400","1424614415","FR","FRA","FRANCE" -"1424614416","1424614439","IT","ITA","ITALY" -"1424614440","1424614447","GB","GBR","UNITED KINGDOM" -"1424614448","1424614655","IT","ITA","ITALY" -"1424614656","1424614911","FR","FRA","FRANCE" -"1424614912","1424615167","RO","ROM","ROMANIA" -"1424615168","1424615679","GB","GBR","UNITED KINGDOM" -"1424615680","1424615803","IT","ITA","ITALY" -"1424615804","1424615807","GB","GBR","UNITED KINGDOM" -"1424615808","1424615935","IT","ITA","ITALY" -"1424615936","1424616191","FR","FRA","FRANCE" -"1424616192","1424616447","IT","ITA","ITALY" -"1424616448","1424616483","ES","ESP","SPAIN" -"1424616484","1424616487","GB","GBR","UNITED KINGDOM" -"1424616488","1424616607","ES","ESP","SPAIN" -"1424616608","1424616615","PT","PRT","PORTUGAL" -"1424616616","1424616687","ES","ESP","SPAIN" -"1424616688","1424616695","PT","PRT","PORTUGAL" -"1424616696","1424616703","GB","GBR","UNITED KINGDOM" -"1424616704","1424616959","US","USA","UNITED STATES" -"1424616960","1424617215","FR","FRA","FRANCE" -"1424617216","1424617343","IT","ITA","ITALY" -"1424617344","1424617391","GB","GBR","UNITED KINGDOM" -"1424617392","1424617395","IT","ITA","ITALY" -"1424617396","1424617399","GB","GBR","UNITED KINGDOM" -"1424617400","1424617407","IT","ITA","ITALY" -"1424617408","1424617423","ES","ESP","SPAIN" -"1424617424","1424617431","GB","GBR","UNITED KINGDOM" -"1424617432","1424617439","ES","ESP","SPAIN" -"1424617440","1424617463","IT","ITA","ITALY" -"1424617464","1424617471","GB","GBR","UNITED KINGDOM" -"1424617472","1424617727","US","USA","UNITED STATES" -"1424617728","1424618239","IT","ITA","ITALY" -"1424618240","1424618495","NL","NLD","NETHERLANDS" -"1424618496","1424618751","GB","GBR","UNITED KINGDOM" -"1424618752","1424619007","FR","FRA","FRANCE" -"1424619008","1424619775","IT","ITA","ITALY" -"1424619776","1424619811","BE","BEL","BELGIUM" -"1424619812","1424619815","GB","GBR","UNITED KINGDOM" -"1424619816","1424619823","BE","BEL","BELGIUM" -"1424619824","1424619839","GB","GBR","UNITED KINGDOM" -"1424619840","1424619915","BE","BEL","BELGIUM" -"1424619916","1424619919","GB","GBR","UNITED KINGDOM" -"1424619920","1424620031","BE","BEL","BELGIUM" -"1424620032","1424621055","GB","GBR","UNITED KINGDOM" -"1424621056","1424621567","IT","ITA","ITALY" -"1424621568","1424625663","PL","POL","POLAND" -"1424625664","1424629759","GB","GBR","UNITED KINGDOM" -"1424629760","1424633855","PL","POL","POLAND" -"1424633856","1424637951","MD","MDA","REPUBLIC OF MOLDOVA" -"1424637952","1424642047","FI","FIN","FINLAND" -"1424642048","1424646143","DK","DNK","DENMARK" -"1424646144","1424650239","RO","ROM","ROMANIA" -"1424650240","1424654335","PL","POL","POLAND" -"1424654336","1424687103","NO","NOR","NORWAY" -"1424687104","1424711679","SA","SAU","SAUDI ARABIA" -"1424711680","1424713727","BH","BHR","BAHRAIN" -"1424713728","1424719871","SA","SAU","SAUDI ARABIA" -"1424719872","1424722431","IE","IRL","IRELAND" -"1424722432","1424723199","CZ","CZE","CZECH REPUBLIC" -"1424723200","1424724735","DE","DEU","GERMANY" -"1424724736","1424724991","IE","IRL","IRELAND" -"1424724992","1424727039","GB","GBR","UNITED KINGDOM" -"1424727040","1424727295","IE","IRL","IRELAND" -"1424727296","1424727551","SL","SLE","SIERRA LEONE" -"1424727552","1424728063","PL","POL","POLAND" -"1424728064","1424728319","IE","IRL","IRELAND" -"1424728320","1424729855","FR","FRA","FRANCE" -"1424729856","1424730367","DE","DEU","GERMANY" -"1424730368","1424730623","ES","ESP","SPAIN" -"1424730624","1424730879","GB","GBR","UNITED KINGDOM" -"1424730880","1424733183","IE","IRL","IRELAND" -"1424733184","1424733951","NL","NLD","NETHERLANDS" -"1424733952","1424735103","SE","SWE","SWEDEN" -"1424735104","1424736127","DE","DEU","GERMANY" -"1424736128","1424736383","AT","AUT","AUSTRIA" -"1424736384","1424736895","FR","FRA","FRANCE" -"1424736896","1424737151","DE","DEU","GERMANY" -"1424737152","1424737279","GB","GBR","UNITED KINGDOM" -"1424737280","1424737407","DK","DNK","DENMARK" -"1424737408","1424737535","AT","AUT","AUSTRIA" -"1424737536","1424738815","DE","DEU","GERMANY" -"1424738816","1424739583","SE","SWE","SWEDEN" -"1424739584","1424739839","GB","GBR","UNITED KINGDOM" -"1424739840","1424740511","DE","DEU","GERMANY" -"1424740512","1424740551","GB","GBR","UNITED KINGDOM" -"1424740552","1424741119","DE","DEU","GERMANY" -"1424741120","1424741375","IE","IRL","IRELAND" -"1424741376","1424742911","DE","DEU","GERMANY" -"1424742912","1424743167","IE","IRL","IRELAND" -"1424743168","1424743423","IT","ITA","ITALY" -"1424743424","1424743935","DE","DEU","GERMANY" -"1424743936","1424744191","GB","GBR","UNITED KINGDOM" -"1424744192","1424744703","DE","DEU","GERMANY" -"1424744704","1424744959","GB","GBR","UNITED KINGDOM" -"1424744960","1424746495","DE","DEU","GERMANY" -"1424746496","1424749055","IE","IRL","IRELAND" -"1424749056","1424749311","SL","SLE","SIERRA LEONE" -"1424749312","1424750079","DE","DEU","GERMANY" -"1424750080","1424750335","FR","FRA","FRANCE" -"1424750336","1424750591","GB","GBR","UNITED KINGDOM" -"1424750592","1424750847","FR","FRA","FRANCE" -"1424750848","1424751103","IE","IRL","IRELAND" -"1424751104","1424751359","DE","DEU","GERMANY" -"1424751360","1424751615","AT","AUT","AUSTRIA" -"1424751616","1424752127","IE","IRL","IRELAND" -"1424752128","1424752383","DE","DEU","GERMANY" -"1424752384","1424752639","NL","NLD","NETHERLANDS" -"1424752640","1424784383","HU","HUN","HUNGARY" -"1424784384","1424785407","RS","SRB","SERBIA" -"1424785408","1424818175","ES","ESP","SPAIN" -"1424818176","1424850943","RU","RUS","RUSSIAN FEDERATION" -"1424850944","1424883711","LV","LVA","LATVIA" -"1424883712","1424916479","DK","DNK","DENMARK" -"1424916480","1424949247","BG","BGR","BULGARIA" -"1424949248","1424982015","GB","GBR","UNITED KINGDOM" -"1424982016","1425014783","FI","FIN","FINLAND" -"1425014784","1425031167","LT","LTU","LITHUANIA" -"1425031168","1425047551","FI","FIN","FINLAND" -"1425047552","1425063935","IT","ITA","ITALY" -"1425063936","1425080319","KZ","KAZ","KAZAKHSTAN" -"1425080320","1425096703","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1425096704","1425113087","CH","CHE","SWITZERLAND" -"1425113088","1425145855","NL","NLD","NETHERLANDS" -"1425145856","1425162239","RU","RUS","RUSSIAN FEDERATION" -"1425162240","1425178623","CZ","CZE","CZECH REPUBLIC" -"1425178624","1425195007","BG","BGR","BULGARIA" -"1425195008","1425211391","RU","RUS","RUSSIAN FEDERATION" -"1425211392","1425227775","SE","SWE","SWEDEN" -"1425227776","1425244159","RO","ROM","ROMANIA" -"1425244160","1425260543","NO","NOR","NORWAY" -"1425260544","1425276927","NL","NLD","NETHERLANDS" -"1425293312","1425309695","CZ","CZE","CZECH REPUBLIC" -"1425309696","1425326079","NL","NLD","NETHERLANDS" -"1425326080","1425342463","SE","SWE","SWEDEN" -"1425342464","1425358847","NL","NLD","NETHERLANDS" -"1425358848","1425375231","SK","SVK","SLOVAKIA" -"1425375232","1425391615","DE","DEU","GERMANY" -"1425391616","1425407999","LV","LVA","LATVIA" -"1425408000","1425424383","NL","NLD","NETHERLANDS" -"1425424384","1425424639","DE","DEU","GERMANY" -"1425424640","1425424895","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1425424896","1425425151","NE","NER","NIGER" -"1425425152","1425425663","DE","DEU","GERMANY" -"1425425664","1425425919","NE","NER","NIGER" -"1425425920","1425426303","DE","DEU","GERMANY" -"1425426304","1425426319","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1425426320","1425426343","DE","DEU","GERMANY" -"1425426344","1425426352","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1425426353","1425426431","DE","DEU","GERMANY" -"1425426432","1425428479","KW","KWT","KUWAIT" -"1425428480","1425430527","GB","GBR","UNITED KINGDOM" -"1425430528","1425432575","SE","SWE","SWEDEN" -"1425432576","1425434623","IT","ITA","ITALY" -"1425434624","1425436671","FR","FRA","FRANCE" -"1425436672","1425438719","GB","GBR","UNITED KINGDOM" -"1425438720","1425439271","DE","DEU","GERMANY" -"1425439272","1425439279","CZ","CZE","CZECH REPUBLIC" -"1425439280","1425439535","DE","DEU","GERMANY" -"1425439536","1425439543","CZ","CZE","CZECH REPUBLIC" -"1425439544","1425439711","DE","DEU","GERMANY" -"1425439712","1425439727","CZ","CZE","CZECH REPUBLIC" -"1425439728","1425440767","DE","DEU","GERMANY" -"1425440768","1425442815","SE","SWE","SWEDEN" -"1425442816","1425444863","GB","GBR","UNITED KINGDOM" -"1425444864","1425445126","IT","ITA","ITALY" -"1425445127","1425445127","FR","FRA","FRANCE" -"1425445128","1425445139","IT","ITA","ITALY" -"1425445140","1425445141","GB","GBR","UNITED KINGDOM" -"1425445142","1425446911","IT","ITA","ITALY" -"1425446912","1425448959","GB","GBR","UNITED KINGDOM" -"1425448960","1425451007","CZ","CZE","CZECH REPUBLIC" -"1425451008","1425457855","GB","GBR","UNITED KINGDOM" -"1425457856","1425457919","US","USA","UNITED STATES" -"1425457920","1425458271","GB","GBR","UNITED KINGDOM" -"1425458272","1425458303","US","USA","UNITED STATES" -"1425458304","1425461247","GB","GBR","UNITED KINGDOM" -"1425461248","1425463295","ES","ESP","SPAIN" -"1425463296","1425467135","FR","FRA","FRANCE" -"1425467136","1425467391","ES","ESP","SPAIN" -"1425467392","1425469439","CH","CHE","SWITZERLAND" -"1425469440","1425471487","DK","DNK","DENMARK" -"1425471488","1425473535","DE","DEU","GERMANY" -"1425473536","1425506303","RO","ROM","ROMANIA" -"1425506304","1425522687","NO","NOR","NORWAY" -"1425522688","1425539071","IT","ITA","ITALY" -"1425539072","1425801215","FI","FIN","FINLAND" -"1425801216","1425817599","BG","BGR","BULGARIA" -"1425817600","1425833983","DE","DEU","GERMANY" -"1425833984","1425850367","RU","RUS","RUSSIAN FEDERATION" -"1425850368","1425866751","GB","GBR","UNITED KINGDOM" -"1425866752","1425883135","CH","CHE","SWITZERLAND" -"1425883136","1425899519","RU","RUS","RUSSIAN FEDERATION" -"1425899520","1425915903","IT","ITA","ITALY" -"1425915904","1425932287","FI","FIN","FINLAND" -"1425932288","1425948671","GR","GRC","GREECE" -"1425948672","1425965055","DE","DEU","GERMANY" -"1425965056","1425965100","ES","ESP","SPAIN" -"1425965101","1425965112","FR","FRA","FRANCE" -"1425965113","1425965116","ZA","ZAF","SOUTH AFRICA" -"1425965117","1425965120","FR","FRA","FRANCE" -"1425965121","1425965503","IT","ITA","ITALY" -"1425965504","1425965567","FR","FRA","FRANCE" -"1425965568","1425965568","IT","ITA","ITALY" -"1425965569","1425965572","NG","NGA","NIGERIA" -"1425965573","1425965576","US","USA","UNITED STATES" -"1425965577","1425965580","FR","FRA","FRANCE" -"1425965581","1425965584","BJ","BEN","BENIN" -"1425965585","1425965588","ES","ESP","SPAIN" -"1425965589","1425965592","IT","ITA","ITALY" -"1425965593","1425965631","FR","FRA","FRANCE" -"1425965632","1425965952","IT","ITA","ITALY" -"1425965953","1425965992","ZA","ZAF","SOUTH AFRICA" -"1425965993","1425966015","IT","ITA","ITALY" -"1425966016","1425966079","ZA","ZAF","SOUTH AFRICA" -"1425966080","1425966080","IT","ITA","ITALY" -"1425966081","1425966088","DE","DEU","GERMANY" -"1425966089","1425966104","IT","ITA","ITALY" -"1425966105","1425966128","DE","DEU","GERMANY" -"1425966129","1425966144","IT","ITA","ITALY" -"1425966145","1425966152","DE","DEU","GERMANY" -"1425966153","1425966208","IT","ITA","ITALY" -"1425966209","1425966224","DE","DEU","GERMANY" -"1425966225","1425966271","IT","ITA","ITALY" -"1425966272","1425966335","DE","DEU","GERMANY" -"1425966336","1425966592","IT","ITA","ITALY" -"1425966593","1425966608","FR","FRA","FRANCE" -"1425966609","1425966720","IT","ITA","ITALY" -"1425966721","1425966728","BJ","BEN","BENIN" -"1425966729","1425966735","IT","ITA","ITALY" -"1425966736","1425966751","BJ","BEN","BENIN" -"1425966752","1425966784","IT","ITA","ITALY" -"1425966785","1425966808","BJ","BEN","BENIN" -"1425966809","1425966815","IT","ITA","ITALY" -"1425966816","1425966847","BJ","BEN","BENIN" -"1425966848","1425966852","IT","ITA","ITALY" -"1425966853","1425966896","DE","DEU","GERMANY" -"1425966897","1425966911","IT","ITA","ITALY" -"1425966912","1425966975","DE","DEU","GERMANY" -"1425966976","1425967039","IT","ITA","ITALY" -"1425967040","1425967103","DE","DEU","GERMANY" -"1425967104","1425967104","IT","ITA","ITALY" -"1425967105","1425967120","TR","TUR","TURKEY" -"1425967121","1425967876","IT","ITA","ITALY" -"1425967877","1425967892","DE","DEU","GERMANY" -"1425967893","1425967896","IT","ITA","ITALY" -"1425967897","1425967904","DE","DEU","GERMANY" -"1425967905","1425967912","IT","ITA","ITALY" -"1425967913","1425967924","DE","DEU","GERMANY" -"1425967925","1425967928","IT","ITA","ITALY" -"1425967929","1425967940","DE","DEU","GERMANY" -"1425967941","1425967999","IT","ITA","ITALY" -"1425968000","1425968127","DE","DEU","GERMANY" -"1425968128","1425968383","IT","ITA","ITALY" -"1425968384","1425968638","GB","GBR","UNITED KINGDOM" -"1425968639","1425969663","IT","ITA","ITALY" -"1425969664","1425969727","FR","FRA","FRANCE" -"1425969728","1425969791","IT","ITA","ITALY" -"1425969792","1425969855","FR","FRA","FRANCE" -"1425969856","1425969919","IT","ITA","ITALY" -"1425969920","1425969983","ZA","ZAF","SOUTH AFRICA" -"1425969984","1425970047","IT","ITA","ITALY" -"1425970048","1425970111","DE","DEU","GERMANY" -"1425970112","1425970176","IT","ITA","ITALY" -"1425970177","1425970180","DE","DEU","GERMANY" -"1425970181","1425970184","IT","ITA","ITALY" -"1425970185","1425970188","GB","GBR","UNITED KINGDOM" -"1425970189","1425970192","DE","DEU","GERMANY" -"1425970193","1425970239","GB","GBR","UNITED KINGDOM" -"1425970240","1425970688","IT","ITA","ITALY" -"1425970689","1425970751","DE","DEU","GERMANY" -"1425970752","1425971007","IT","ITA","ITALY" -"1425971008","1425971071","NL","NLD","NETHERLANDS" -"1425971072","1425971199","IT","ITA","ITALY" -"1425971200","1425971455","NL","NLD","NETHERLANDS" -"1425971456","1425971711","IT","ITA","ITALY" -"1425971712","1425971727","AE","ARE","UNITED ARAB EMIRATES" -"1425971728","1425971743","US","USA","UNITED STATES" -"1425971744","1425971775","IT","ITA","ITALY" -"1425971776","1425971839","DE","DEU","GERMANY" -"1425971840","1425971903","SE","SWE","SWEDEN" -"1425971904","1425972351","IT","ITA","ITALY" -"1425972352","1425972415","FR","FRA","FRANCE" -"1425972416","1425972607","IT","ITA","ITALY" -"1425972608","1425972671","FR","FRA","FRANCE" -"1425972672","1425972863","IT","ITA","ITALY" -"1425972864","1425972927","FR","FRA","FRANCE" -"1425972928","1425973119","IT","ITA","ITALY" -"1425973120","1425973183","FR","FRA","FRANCE" -"1425973184","1425973248","IT","ITA","ITALY" -"1425973249","1425973260","PL","POL","POLAND" -"1425973261","1425973264","IT","ITA","ITALY" -"1425973265","1425973268","DE","DEU","GERMANY" -"1425973269","1425973272","FR","FRA","FRANCE" -"1425973273","1425973276","PL","POL","POLAND" -"1425973277","1425973280","IT","ITA","ITALY" -"1425973281","1425973300","PL","POL","POLAND" -"1425973301","1425973308","DE","DEU","GERMANY" -"1425973309","1425973332","PL","POL","POLAND" -"1425973333","1425973336","DE","DEU","GERMANY" -"1425973337","1425973439","IT","ITA","ITALY" -"1425973440","1425973503","PL","POL","POLAND" -"1425973504","1425973759","IT","ITA","ITALY" -"1425973760","1425973823","PL","POL","POLAND" -"1425973824","1425974847","IT","ITA","ITALY" -"1425974848","1425974911","SE","SWE","SWEDEN" -"1425974912","1425975039","IT","ITA","ITALY" -"1425975040","1425975103","FR","FRA","FRANCE" -"1425975104","1425975167","IT","ITA","ITALY" -"1425975168","1425975231","FR","FRA","FRANCE" -"1425975232","1425975296","IT","ITA","ITALY" -"1425975297","1425975360","PE","PER","PERU" -"1425975361","1425975551","IT","ITA","ITALY" -"1425975552","1425975679","FR","FRA","FRANCE" -"1425975680","1425976064","IT","ITA","ITALY" -"1425976065","1425976126","FR","FRA","FRANCE" -"1425976127","1425976191","IT","ITA","ITALY" -"1425976192","1425976255","FR","FRA","FRANCE" -"1425976256","1425976320","IT","ITA","ITALY" -"1425976321","1425976328","FR","FRA","FRANCE" -"1425976329","1425976336","GB","GBR","UNITED KINGDOM" -"1425976337","1425976344","IT","ITA","ITALY" -"1425976345","1425976352","FR","FRA","FRANCE" -"1425976353","1425976368","GB","GBR","UNITED KINGDOM" -"1425976369","1425976372","FR","FRA","FRANCE" -"1425976373","1425976380","GB","GBR","UNITED KINGDOM" -"1425976381","1425976388","FR","FRA","FRANCE" -"1425976389","1425976392","IT","ITA","ITALY" -"1425976393","1425976432","FR","FRA","FRANCE" -"1425976433","1425976440","GB","GBR","UNITED KINGDOM" -"1425976441","1425976448","FR","FRA","FRANCE" -"1425976449","1425976464","GB","GBR","UNITED KINGDOM" -"1425976465","1425976575","IT","ITA","ITALY" -"1425976576","1425976830","GB","GBR","UNITED KINGDOM" -"1425976831","1425976831","IT","ITA","ITALY" -"1425976832","1425977342","GB","GBR","UNITED KINGDOM" -"1425977343","1425977855","IT","ITA","ITALY" -"1425977856","1425978111","DE","DEU","GERMANY" -"1425978112","1425978367","BG","BGR","BULGARIA" -"1425978368","1425979392","IT","ITA","ITALY" -"1425979393","1425979400","DE","DEU","GERMANY" -"1425979401","1425979412","IT","ITA","ITALY" -"1425979413","1425979416","DE","DEU","GERMANY" -"1425979417","1425979436","IT","ITA","ITALY" -"1425979437","1425979456","DE","DEU","GERMANY" -"1425979457","1425979460","IT","ITA","ITALY" -"1425979461","1425979464","DE","DEU","GERMANY" -"1425979465","1425979472","IT","ITA","ITALY" -"1425979473","1425979476","DE","DEU","GERMANY" -"1425979477","1425979480","IT","ITA","ITALY" -"1425979481","1425979488","DE","DEU","GERMANY" -"1425979489","1425979519","IT","ITA","ITALY" -"1425979520","1425979583","DE","DEU","GERMANY" -"1425979584","1425979652","IT","ITA","ITALY" -"1425979653","1425979656","AE","ARE","UNITED ARAB EMIRATES" -"1425979657","1425979660","IT","ITA","ITALY" -"1425979661","1425979692","AE","ARE","UNITED ARAB EMIRATES" -"1425979693","1425979704","IT","ITA","ITALY" -"1425979705","1425979708","AE","ARE","UNITED ARAB EMIRATES" -"1425979709","1425979711","IT","ITA","ITALY" -"1425979712","1425979775","DE","DEU","GERMANY" -"1425979776","1425979839","US","USA","UNITED STATES" -"1425979840","1425979904","IT","ITA","ITALY" -"1425979905","1425979968","AE","ARE","UNITED ARAB EMIRATES" -"1425979969","1425979976","IT","ITA","ITALY" -"1425979977","1425979984","FR","FRA","FRANCE" -"1425979985","1425979999","IT","ITA","ITALY" -"1425980000","1425980031","US","USA","UNITED STATES" -"1425980032","1425980095","DE","DEU","GERMANY" -"1425980096","1425980159","AE","ARE","UNITED ARAB EMIRATES" -"1425980160","1425980415","IT","ITA","ITALY" -"1425980416","1425980479","GR","GRC","GREECE" -"1425980480","1425980543","IT","ITA","ITALY" -"1425980544","1425980607","GR","GRC","GREECE" -"1425980608","1425981439","IT","ITA","ITALY" -"1425981440","1425997823","RU","RUS","RUSSIAN FEDERATION" -"1425997824","1426014207","MT","MLT","MALTA" -"1426014208","1426030591","DK","DNK","DENMARK" -"1426030592","1426046975","BH","BHR","BAHRAIN" -"1426046976","1426063359","SI","SVN","SLOVENIA" -"1426063360","1426587647","CH","CHE","SWITZERLAND" -"1426587648","1426604031","SE","SWE","SWEDEN" -"1426604032","1426620415","DE","DEU","GERMANY" -"1426620416","1426653183","GB","GBR","UNITED KINGDOM" -"1426653184","1426669567","RO","ROM","ROMANIA" -"1426669568","1426685951","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1426685952","1426702335","TJ","TJK","TAJIKISTAN" -"1426702336","1426703103","LV","LVA","LATVIA" -"1426703104","1426703167","RU","RUS","RUSSIAN FEDERATION" -"1426703168","1426718719","LV","LVA","LATVIA" -"1426718720","1426731007","SI","SVN","SLOVENIA" -"1426731008","1426735103","HR","HRV","CROATIA" -"1426735104","1426751487","BE","BEL","BELGIUM" -"1426751488","1426767871","FR","FRA","FRANCE" -"1426767872","1426784255","DE","DEU","GERMANY" -"1426784256","1426800639","SE","SWE","SWEDEN" -"1426800640","1426817023","PL","POL","POLAND" -"1426817024","1426833407","BG","BGR","BULGARIA" -"1426833408","1426849791","SE","SWE","SWEDEN" -"1426849792","1426850303","NL","NLD","NETHERLANDS" -"1426850304","1426850335","SE","SWE","SWEDEN" -"1426850336","1426850367","GB","GBR","UNITED KINGDOM" -"1426850368","1426850463","NL","NLD","NETHERLANDS" -"1426850464","1426850495","GB","GBR","UNITED KINGDOM" -"1426850496","1426851519","NL","NLD","NETHERLANDS" -"1426851520","1426851583","PA","PAN","PANAMA" -"1426851584","1426851839","NL","NLD","NETHERLANDS" -"1426851840","1426852095","SE","SWE","SWEDEN" -"1426852096","1426852352","NL","NLD","NETHERLANDS" -"1426852353","1426852359","RU","RUS","RUSSIAN FEDERATION" -"1426852360","1426852367","SE","SWE","SWEDEN" -"1426852368","1426852383","US","USA","UNITED STATES" -"1426852384","1426852543","GB","GBR","UNITED KINGDOM" -"1426852544","1426856447","NL","NLD","NETHERLANDS" -"1426856448","1426856703","ES","ESP","SPAIN" -"1426856704","1426857472","NL","NLD","NETHERLANDS" -"1426857473","1426857500","ES","ESP","SPAIN" -"1426857501","1426859263","NL","NLD","NETHERLANDS" -"1426859264","1426859519","RU","RUS","RUSSIAN FEDERATION" -"1426859520","1426864511","NL","NLD","NETHERLANDS" -"1426864512","1426864639","PA","PAN","PANAMA" -"1426864640","1426864895","FR","FRA","FRANCE" -"1426864896","1426865151","NL","NLD","NETHERLANDS" -"1426865152","1426865407","BE","BEL","BELGIUM" -"1426865408","1426865663","NL","NLD","NETHERLANDS" -"1426865664","1426865919","BE","BEL","BELGIUM" -"1426865920","1426866175","ES","ESP","SPAIN" -"1426866176","1426882559","GB","GBR","UNITED KINGDOM" -"1426882560","1426898943","FR","FRA","FRANCE" -"1426898944","1426915327","RU","RUS","RUSSIAN FEDERATION" -"1426915328","1426931711","AT","AUT","AUSTRIA" -"1426931712","1426948095","CZ","CZE","CZECH REPUBLIC" -"1426948096","1426964479","DE","DEU","GERMANY" -"1426964480","1426967455","GB","GBR","UNITED KINGDOM" -"1426967456","1426967463","ES","ESP","SPAIN" -"1426967464","1426967567","GB","GBR","UNITED KINGDOM" -"1426967568","1426967575","ES","ESP","SPAIN" -"1426967576","1426967671","GB","GBR","UNITED KINGDOM" -"1426967672","1426967679","ES","ESP","SPAIN" -"1426967680","1426968447","GB","GBR","UNITED KINGDOM" -"1426968448","1426968455","ES","ESP","SPAIN" -"1426968456","1426969135","GB","GBR","UNITED KINGDOM" -"1426969136","1426969151","ES","ESP","SPAIN" -"1426969152","1426972319","GB","GBR","UNITED KINGDOM" -"1426972320","1426972326","FR","FRA","FRANCE" -"1426972327","1426973335","GB","GBR","UNITED KINGDOM" -"1426973336","1426973343","ES","ESP","SPAIN" -"1426973344","1426976031","GB","GBR","UNITED KINGDOM" -"1426976032","1426976047","ES","ESP","SPAIN" -"1426976048","1426976111","GB","GBR","UNITED KINGDOM" -"1426976112","1426976119","ES","ESP","SPAIN" -"1426976120","1426978999","GB","GBR","UNITED KINGDOM" -"1426979000","1426979007","ES","ESP","SPAIN" -"1426979008","1426980863","GB","GBR","UNITED KINGDOM" -"1426980864","1426997247","BG","BGR","BULGARIA" -"1426997248","1427013631","PL","POL","POLAND" -"1427013632","1427030015","FR","FRA","FRANCE" -"1427030016","1427031679","DE","DEU","GERMANY" -"1427031680","1427031743","AT","AUT","AUSTRIA" -"1427031744","1427031807","DE","DEU","GERMANY" -"1427031808","1427032063","AT","AUT","AUSTRIA" -"1427032064","1427032143","DE","DEU","GERMANY" -"1427032144","1427032151","AT","AUT","AUSTRIA" -"1427032152","1427032183","DE","DEU","GERMANY" -"1427032184","1427032191","PL","POL","POLAND" -"1427032192","1427032223","DE","DEU","GERMANY" -"1427032224","1427032231","GR","GRC","GREECE" -"1427032232","1427032727","DE","DEU","GERMANY" -"1427032728","1427032735","IT","ITA","ITALY" -"1427032736","1427032743","AT","AUT","AUSTRIA" -"1427032744","1427032943","DE","DEU","GERMANY" -"1427032944","1427032951","AT","AUT","AUSTRIA" -"1427032952","1427032959","DE","DEU","GERMANY" -"1427032960","1427032967","NL","NLD","NETHERLANDS" -"1427032968","1427032991","DE","DEU","GERMANY" -"1427032992","1427032999","CH","CHE","SWITZERLAND" -"1427033000","1427033007","GR","GRC","GREECE" -"1427033008","1427033247","DE","DEU","GERMANY" -"1427033248","1427033263","MZ","MOZ","MOZAMBIQUE" -"1427033264","1427033287","DE","DEU","GERMANY" -"1427033288","1427033295","SE","SWE","SWEDEN" -"1427033296","1427033335","DE","DEU","GERMANY" -"1427033336","1427033343","TR","TUR","TURKEY" -"1427033344","1427035391","DE","DEU","GERMANY" -"1427035392","1427035519","GB","GBR","UNITED KINGDOM" -"1427035520","1427046399","DE","DEU","GERMANY" -"1427046400","1427062783","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1427062784","1427095551","RU","RUS","RUSSIAN FEDERATION" -"1427095552","1427111935","LV","LVA","LATVIA" -"1427111936","1427177471","DE","DEU","GERMANY" -"1427177472","1427227135","NL","NLD","NETHERLANDS" -"1427227136","1427227647","US","USA","UNITED STATES" -"1427227648","1427227967","NL","NLD","NETHERLANDS" -"1427227968","1427227975","GB","GBR","UNITED KINGDOM" -"1427227976","1427227983","DE","DEU","GERMANY" -"1427227984","1427227991","IT","ITA","ITALY" -"1427227992","1427227999","ES","ESP","SPAIN" -"1427228000","1427228007","PL","POL","POLAND" -"1427228008","1427228015","RU","RUS","RUSSIAN FEDERATION" -"1427228016","1427228023","FR","FRA","FRANCE" -"1427228024","1427243007","NL","NLD","NETHERLANDS" -"1427243008","1427308543","IT","ITA","ITALY" -"1427308544","1427374079","NO","NOR","NORWAY" -"1427374080","1427439615","IT","ITA","ITALY" -"1427439616","1427505151","RU","RUS","RUSSIAN FEDERATION" -"1427505152","1427570687","DE","DEU","GERMANY" -"1427570688","1427636223","FI","FIN","FINLAND" -"1427636224","1427668991","DK","DNK","DENMARK" -"1427668992","1427701759","SE","SWE","SWEDEN" -"1427701760","1427723391","DE","DEU","GERMANY" -"1427723392","1427723519","LI","LIE","LIECHTENSTEIN" -"1427723520","1427728383","DE","DEU","GERMANY" -"1427728384","1427728415","US","USA","UNITED STATES" -"1427728416","1427728479","DE","DEU","GERMANY" -"1427728480","1427728511","CY","CYP","CYPRUS" -"1427728512","1427728543","DE","DEU","GERMANY" -"1427728544","1427728575","MD","MDA","REPUBLIC OF MOLDOVA" -"1427728576","1427728703","DE","DEU","GERMANY" -"1427728704","1427728735","GB","GBR","UNITED KINGDOM" -"1427728736","1427728799","DE","DEU","GERMANY" -"1427728800","1427728831","RU","RUS","RUSSIAN FEDERATION" -"1427728832","1427728959","DE","DEU","GERMANY" -"1427728960","1427728991","RU","RUS","RUSSIAN FEDERATION" -"1427728992","1427729311","DE","DEU","GERMANY" -"1427729312","1427729343","GR","GRC","GREECE" -"1427729344","1427742719","DE","DEU","GERMANY" -"1427742720","1427742751","IO","IOT","BRITISH INDIAN OCEAN TERRITORY" -"1427742752","1427743455","DE","DEU","GERMANY" -"1427743456","1427743487","CY","CYP","CYPRUS" -"1427743488","1427743615","DE","DEU","GERMANY" -"1427743616","1427743647","DK","DNK","DENMARK" -"1427743648","1427744159","DE","DEU","GERMANY" -"1427744160","1427744191","RU","RUS","RUSSIAN FEDERATION" -"1427744192","1427744255","DE","DEU","GERMANY" -"1427744256","1427744287","US","USA","UNITED STATES" -"1427744288","1427744863","DE","DEU","GERMANY" -"1427744864","1427744895","TR","TUR","TURKEY" -"1427744896","1427744991","DE","DEU","GERMANY" -"1427744992","1427745023","DK","DNK","DENMARK" -"1427745024","1427745663","DE","DEU","GERMANY" -"1427745664","1427745695","CY","CYP","CYPRUS" -"1427745696","1427746079","DE","DEU","GERMANY" -"1427746080","1427746111","GB","GBR","UNITED KINGDOM" -"1427746112","1427748447","DE","DEU","GERMANY" -"1427748448","1427748479","TR","TUR","TURKEY" -"1427748480","1427749567","DE","DEU","GERMANY" -"1427749568","1427749599","CY","CYP","CYPRUS" -"1427749600","1427751167","DE","DEU","GERMANY" -"1427751168","1427751423","NL","NLD","NETHERLANDS" -"1427751424","1427760127","DE","DEU","GERMANY" -"1427760128","1427760159","DK","DNK","DENMARK" -"1427760160","1427760191","DE","DEU","GERMANY" -"1427760192","1427760223","TR","TUR","TURKEY" -"1427760224","1427760255","DE","DEU","GERMANY" -"1427760256","1427760319","BR","BRA","BRAZIL" -"1427760320","1427760351","DE","DEU","GERMANY" -"1427760352","1427760383","DK","DNK","DENMARK" -"1427760384","1427760415","TR","TUR","TURKEY" -"1427760416","1427760799","DE","DEU","GERMANY" -"1427760800","1427760831","NL","NLD","NETHERLANDS" -"1427760832","1427760959","DE","DEU","GERMANY" -"1427760960","1427760991","CZ","CZE","CZECH REPUBLIC" -"1427760992","1427761023","DE","DEU","GERMANY" -"1427761024","1427761055","CR","CRI","COSTA RICA" -"1427761056","1427767295","DE","DEU","GERMANY" -"1427767296","1427800063","BE","BEL","BELGIUM" -"1427800064","1427823615","RU","RUS","RUSSIAN FEDERATION" -"1427823616","1427824639","KG","KGZ","KYRGYZSTAN" -"1427824640","1427831807","RU","RUS","RUSSIAN FEDERATION" -"1427831808","1427832831","MD","MDA","REPUBLIC OF MOLDOVA" -"1427832832","1427865599","BE","BEL","BELGIUM" -"1427865600","1427898367","DK","DNK","DENMARK" -"1427898368","1427914751","RU","RUS","RUSSIAN FEDERATION" -"1427914752","1427931135","BE","BEL","BELGIUM" -"1427931136","1427947519","PL","POL","POLAND" -"1427947520","1427963903","RU","RUS","RUSSIAN FEDERATION" -"1427963904","1427980287","TR","TUR","TURKEY" -"1427980288","1427996671","FI","FIN","FINLAND" -"1427996672","1428013055","KZ","KAZ","KAZAKHSTAN" -"1428013056","1428029439","EE","EST","ESTONIA" -"1428029440","1428045823","GR","GRC","GREECE" -"1428045824","1428062207","MK","MKD","THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA" -"1428062208","1428078591","SE","SWE","SWEDEN" -"1428078592","1428094975","RU","RUS","RUSSIAN FEDERATION" -"1428094976","1428096031","AT","AUT","AUSTRIA" -"1428096032","1428096039","CH","CHE","SWITZERLAND" -"1428096040","1428103167","AT","AUT","AUSTRIA" -"1428103168","1428119551","GB","GBR","UNITED KINGDOM" -"1428119552","1428121599","LV","LVA","LATVIA" -"1428121600","1428123647","FR","FRA","FRANCE" -"1428123648","1428126975","RU","RUS","RUSSIAN FEDERATION" -"1428126976","1428127231","TR","TUR","TURKEY" -"1428127232","1428127743","RU","RUS","RUSSIAN FEDERATION" -"1428127744","1428129791","ES","ESP","SPAIN" -"1428129792","1428131839","GB","GBR","UNITED KINGDOM" -"1428131840","1428133887","FR","FRA","FRANCE" -"1428133888","1428135935","LI","LIE","LIECHTENSTEIN" -"1428135936","1428137983","IT","ITA","ITALY" -"1428137984","1428140031","GB","GBR","UNITED KINGDOM" -"1428140032","1428142079","RU","RUS","RUSSIAN FEDERATION" -"1428142080","1428143263","DE","DEU","GERMANY" -"1428143264","1428143279","CH","CHE","SWITZERLAND" -"1428143280","1428144127","DE","DEU","GERMANY" -"1428144128","1428146847","FR","FRA","FRANCE" -"1428146848","1428146855","SE","SWE","SWEDEN" -"1428146856","1428147071","FR","FRA","FRANCE" -"1428147072","1428147087","SE","SWE","SWEDEN" -"1428147088","1428147103","FR","FRA","FRANCE" -"1428147104","1428147119","SE","SWE","SWEDEN" -"1428147120","1428147127","FR","FRA","FRANCE" -"1428147128","1428147135","SE","SWE","SWEDEN" -"1428147136","1428147359","FR","FRA","FRANCE" -"1428147360","1428147375","IT","ITA","ITALY" -"1428147376","1428147391","ES","ESP","SPAIN" -"1428147392","1428147855","FR","FRA","FRANCE" -"1428147856","1428147871","US","USA","UNITED STATES" -"1428147872","1428147903","GB","GBR","UNITED KINGDOM" -"1428147904","1428148031","FR","FRA","FRANCE" -"1428148032","1428148063","SE","SWE","SWEDEN" -"1428148064","1428148135","FR","FRA","FRANCE" -"1428148136","1428148143","BE","BEL","BELGIUM" -"1428148144","1428148151","DE","DEU","GERMANY" -"1428148152","1428148159","NL","NLD","NETHERLANDS" -"1428148160","1428148175","SE","SWE","SWEDEN" -"1428148176","1428148191","CH","CHE","SWITZERLAND" -"1428148192","1428148223","SE","SWE","SWEDEN" -"1428148224","1428150495","FR","FRA","FRANCE" -"1428150496","1428150511","SE","SWE","SWEDEN" -"1428150512","1428150735","FR","FRA","FRANCE" -"1428150736","1428150751","SE","SWE","SWEDEN" -"1428150752","1428151007","FR","FRA","FRANCE" -"1428151008","1428151039","SE","SWE","SWEDEN" -"1428151040","1428151295","FR","FRA","FRANCE" -"1428151296","1428151551","SE","SWE","SWEDEN" -"1428151552","1428152319","FR","FRA","FRANCE" -"1428152320","1428160511","PL","POL","POLAND" -"1428160512","1429209087","IT","ITA","ITALY" -"1429209088","1430257663","ES","ESP","SPAIN" -"1430257664","1430388735","IL","ISR","ISRAEL" -"1430388736","1430519807","HU","HUN","HUNGARY" -"1430519808","1430650879","FR","FRA","FRANCE" -"1430650880","1430781951","CZ","CZE","CZECH REPUBLIC" -"1430781952","1431044095","GR","GRC","GREECE" -"1431044096","1431306239","FI","FIN","FINLAND" -"1431306240","1431568383","DK","DNK","DENMARK" -"1431568384","1431830527","ES","ESP","SPAIN" -"1431830528","1431832832","DE","DEU","GERMANY" -"1431832833","1431832846","AT","AUT","AUSTRIA" -"1431832847","1431837680","DE","DEU","GERMANY" -"1431837681","1431837694","AT","AUT","AUSTRIA" -"1431837695","1431838719","DE","DEU","GERMANY" -"1431838720","1431839007","BE","BEL","BELGIUM" -"1431839008","1431839039","DE","DEU","GERMANY" -"1431839040","1431846911","BE","BEL","BELGIUM" -"1431846912","1431855103","NO","NOR","NORWAY" -"1431855104","1431863295","NL","NLD","NETHERLANDS" -"1431863296","1431864263","PT","PRT","PORTUGAL" -"1431864264","1431864271","ES","ESP","SPAIN" -"1431864272","1431864935","PT","PRT","PORTUGAL" -"1431864936","1431864943","ES","ESP","SPAIN" -"1431864944","1431865335","PT","PRT","PORTUGAL" -"1431865336","1431865343","ES","ESP","SPAIN" -"1431865344","1431865631","PT","PRT","PORTUGAL" -"1431865632","1431865647","ES","ESP","SPAIN" -"1431865648","1431865663","PT","PRT","PORTUGAL" -"1431865664","1431865679","ES","ESP","SPAIN" -"1431865680","1431865711","PT","PRT","PORTUGAL" -"1431865712","1431865719","ES","ESP","SPAIN" -"1431865720","1431866447","PT","PRT","PORTUGAL" -"1431866448","1431866455","NL","NLD","NETHERLANDS" -"1431866456","1431871487","PT","PRT","PORTUGAL" -"1431871488","1431879679","RU","RUS","RUSSIAN FEDERATION" -"1431879680","1431887871","IT","ITA","ITALY" -"1431887872","1431896063","GB","GBR","UNITED KINGDOM" -"1431896064","1431904255","NO","NOR","NORWAY" -"1431904256","1431912447","EE","EST","ESTONIA" -"1431912448","1431920639","SE","SWE","SWEDEN" -"1431920640","1431928831","RU","RUS","RUSSIAN FEDERATION" -"1431928832","1431937023","IT","ITA","ITALY" -"1431937024","1431945215","PL","POL","POLAND" -"1431945216","1431953407","NO","NOR","NORWAY" -"1431953408","1431961599","DK","DNK","DENMARK" -"1431961600","1431969791","CH","CHE","SWITZERLAND" -"1431969792","1431977983","GB","GBR","UNITED KINGDOM" -"1431977984","1431980151","NL","NLD","NETHERLANDS" -"1431980152","1431980159","US","USA","UNITED STATES" -"1431980160","1431986175","NL","NLD","NETHERLANDS" -"1431986176","1431994367","RU","RUS","RUSSIAN FEDERATION" -"1431994368","1432002559","AT","AUT","AUSTRIA" -"1432002560","1432010751","HU","HUN","HUNGARY" -"1432010752","1432018943","UA","UKR","UKRAINE" -"1432018944","1432023551","GB","GBR","UNITED KINGDOM" -"1432023552","1432023567","BG","BGR","BULGARIA" -"1432023568","1432027135","GB","GBR","UNITED KINGDOM" -"1432027136","1432035327","IE","IRL","IRELAND" -"1432035328","1432043519","GB","GBR","UNITED KINGDOM" -"1432043520","1432051711","ES","ESP","SPAIN" -"1432051712","1432059903","RU","RUS","RUSSIAN FEDERATION" -"1432059904","1432068095","BG","BGR","BULGARIA" -"1432068096","1432076287","BE","BEL","BELGIUM" -"1432076288","1432084479","RU","RUS","RUSSIAN FEDERATION" -"1432084480","1432092671","GB","GBR","UNITED KINGDOM" -"1432092672","1432100863","RU","RUS","RUSSIAN FEDERATION" -"1432100864","1432109055","CZ","CZE","CZECH REPUBLIC" -"1432109056","1432117247","GB","GBR","UNITED KINGDOM" -"1432117248","1432125439","CY","CYP","CYPRUS" -"1432125440","1432131583","NL","NLD","NETHERLANDS" -"1432131584","1432133631","PH","PHL","PHILIPPINES" -"1432133632","1432150015","GB","GBR","UNITED KINGDOM" -"1432150016","1432158207","BA","BIH","BOSNIA AND HERZEGOVINA" -"1432158208","1432158463","CH","CHE","SWITZERLAND" -"1432158464","1432159743","DE","DEU","GERMANY" -"1432159744","1432159871","PL","POL","POLAND" -"1432159872","1432160255","DE","DEU","GERMANY" -"1432160256","1432160511","CH","CHE","SWITZERLAND" -"1432160512","1432165247","DE","DEU","GERMANY" -"1432165248","1432165375","PL","POL","POLAND" -"1432165376","1432166143","DE","DEU","GERMANY" -"1432166144","1432166399","CH","CHE","SWITZERLAND" -"1432166400","1432174591","RU","RUS","RUSSIAN FEDERATION" -"1432174592","1432182783","DE","DEU","GERMANY" -"1432182784","1432190975","CZ","CZE","CZECH REPUBLIC" -"1432190976","1432199167","RU","RUS","RUSSIAN FEDERATION" -"1432199168","1432207359","CZ","CZE","CZECH REPUBLIC" -"1432207360","1432215551","LU","LUX","LUXEMBOURG" -"1432215552","1432223743","NO","NOR","NORWAY" -"1432223744","1432240127","RU","RUS","RUSSIAN FEDERATION" -"1432240128","1432248319","HR","HRV","CROATIA" -"1432248320","1432256511","ME","MNE","MONTENEGRO" -"1432256512","1432264703","BA","BIH","BOSNIA AND HERZEGOVINA" -"1432264704","1432272895","AD","AND","ANDORRA" -"1432272896","1432281087","IT","ITA","ITALY" -"1432281088","1432289279","LU","LUX","LUXEMBOURG" -"1432289280","1432297471","GB","GBR","UNITED KINGDOM" -"1432297472","1432305663","NO","NOR","NORWAY" -"1432305664","1432313855","BG","BGR","BULGARIA" -"1432313856","1432322047","GB","GBR","UNITED KINGDOM" -"1432322048","1432338431","RU","RUS","RUSSIAN FEDERATION" -"1432338432","1432346623","FR","FRA","FRANCE" -"1432346624","1433403391","TR","TUR","TURKEY" -"1433403392","1433407711","ES","ESP","SPAIN" -"1433407712","1433408767","NL","NLD","NETHERLANDS" -"1433408768","1433409023","ES","ESP","SPAIN" -"1433409024","1433409279","NL","NLD","NETHERLANDS" -"1433409280","1433409535","ES","ESP","SPAIN" -"1433409536","1433409791","NL","NLD","NETHERLANDS" -"1433409792","1433411583","ES","ESP","SPAIN" -"1433411584","1433419775","RU","RUS","RUSSIAN FEDERATION" -"1433419776","1433427967","LB","LBN","LEBANON" -"1433427968","1433436159","RU","RUS","RUSSIAN FEDERATION" -"1433436160","1433444351","NO","NOR","NORWAY" -"1433444352","1433452543","SE","SWE","SWEDEN" -"1433452544","1433460735","PL","POL","POLAND" -"1433460736","1433468927","DE","DEU","GERMANY" -"1433468928","1433477119","KG","KGZ","KYRGYZSTAN" -"1433477120","1433485311","RU","RUS","RUSSIAN FEDERATION" -"1433485312","1433493503","GB","GBR","UNITED KINGDOM" -"1433493504","1433501695","PS","PSE","PALESTINIAN TERRITORY, OCCUPIED" -"1433501696","1433509887","RU","RUS","RUSSIAN FEDERATION" -"1433509888","1433518079","NO","NOR","NORWAY" -"1433518080","1433526271","RU","RUS","RUSSIAN FEDERATION" -"1433526272","1433534463","NL","NLD","NETHERLANDS" -"1433534464","1433542655","RU","RUS","RUSSIAN FEDERATION" -"1433542656","1433550847","HR","HRV","CROATIA" -"1433550848","1433559039","RU","RUS","RUSSIAN FEDERATION" -"1433559040","1433567231","PS","PSE","PALESTINIAN TERRITORY, OCCUPIED" -"1433567232","1433575423","DE","DEU","GERMANY" -"1433575424","1433583615","RU","RUS","RUSSIAN FEDERATION" -"1433583616","1433591807","UA","UKR","UKRAINE" -"1433591808","1433599999","GE","GEO","GEORGIA" -"1433600000","1433602303","DE","DEU","GERMANY" -"1433602304","1433602319","LU","LUX","LUXEMBOURG" -"1433602320","1433608191","DE","DEU","GERMANY" -"1433608192","1433608959","GB","GBR","UNITED KINGDOM" -"1433608960","1433609215","DE","DEU","GERMANY" -"1433609216","1433609727","GB","GBR","UNITED KINGDOM" -"1433609728","1433610239","CH","CHE","SWITZERLAND" -"1433610240","1433612287","US","USA","UNITED STATES" -"1433612288","1433614335","GB","GBR","UNITED KINGDOM" -"1433614336","1433615359","DE","DEU","GERMANY" -"1433615360","1433615871","FR","FRA","FRANCE" -"1433615872","1433616383","GB","GBR","UNITED KINGDOM" -"1433616384","1433624575","AE","ARE","UNITED ARAB EMIRATES" -"1433624576","1433632767","LV","LVA","LATVIA" -"1433632768","1433640959","GI","GIB","GIBRALTAR" -"1433640960","1433649151","RU","RUS","RUSSIAN FEDERATION" -"1433649152","1433657343","KG","KGZ","KYRGYZSTAN" -"1433657344","1433665535","RU","RUS","RUSSIAN FEDERATION" -"1433665536","1433673727","GB","GBR","UNITED KINGDOM" -"1433673728","1433681919","FR","FRA","FRANCE" -"1433681920","1433690111","IS","ISL","ICELAND" -"1433690112","1433698303","RU","RUS","RUSSIAN FEDERATION" -"1433698304","1433706495","IT","ITA","ITALY" -"1433706496","1433714687","GB","GBR","UNITED KINGDOM" -"1433714688","1433722879","DE","DEU","GERMANY" -"1433722880","1433731071","IT","ITA","ITALY" -"1433731072","1433739263","PL","POL","POLAND" -"1433739264","1433747455","GE","GEO","GEORGIA" -"1433747456","1433755647","RU","RUS","RUSSIAN FEDERATION" -"1433755648","1433763839","EE","EST","ESTONIA" -"1433763840","1433765887","CZ","CZE","CZECH REPUBLIC" -"1433765888","1433766911","DE","DEU","GERMANY" -"1433766912","1433767935","RU","RUS","RUSSIAN FEDERATION" -"1433767936","1433769983","CZ","CZE","CZECH REPUBLIC" -"1433769984","1433771007","SK","SVK","SLOVAKIA" -"1433771008","1433772031","RU","RUS","RUSSIAN FEDERATION" -"1433772032","1433788415","SE","SWE","SWEDEN" -"1433788416","1433796607","UZ","UZB","UZBEKISTAN" -"1433796608","1433804799","GB","GBR","UNITED KINGDOM" -"1433804800","1433812991","FR","FRA","FRANCE" -"1433812992","1433820159","BG","BGR","BULGARIA" -"1433820160","1433821183","HR","HRV","CROATIA" -"1433821184","1433829375","GE","GEO","GEORGIA" -"1433829376","1433833471","RU","RUS","RUSSIAN FEDERATION" -"1433833472","1433835519","IT","ITA","ITALY" -"1433835520","1433837567","GB","GBR","UNITED KINGDOM" -"1433837568","1433839615","DE","DEU","GERMANY" -"1433839616","1433841663","GB","GBR","UNITED KINGDOM" -"1433841664","1433843711","RU","RUS","RUSSIAN FEDERATION" -"1433843712","1433843839","SE","SWE","SWEDEN" -"1433843840","1433843967","NL","NLD","NETHERLANDS" -"1433843968","1433843983","CS","SCG","SERBIA AND MONTENEGRO" -"1433843984","1433845759","NL","NLD","NETHERLANDS" -"1433845760","1433847807","BG","BGR","BULGARIA" -"1433847808","1433849855","SE","SWE","SWEDEN" -"1433849856","1433851903","BE","BEL","BELGIUM" -"1433851904","1433853951","CH","CHE","SWITZERLAND" -"1433853952","1433855999","RU","RUS","RUSSIAN FEDERATION" -"1433856000","1433858047","GB","GBR","UNITED KINGDOM" -"1433858048","1433860095","ES","ESP","SPAIN" -"1433860096","1433862143","DE","DEU","GERMANY" -"1433862144","1433862751","CH","CHE","SWITZERLAND" -"1433862752","1433862783","MC","MCO","MONACO" -"1433862784","1433863423","CH","CHE","SWITZERLAND" -"1433863424","1433863487","US","USA","UNITED STATES" -"1433863488","1433864191","CH","CHE","SWITZERLAND" -"1433864192","1433866239","HU","HUN","HUNGARY" -"1433866240","1433866623","NL","NLD","NETHERLANDS" -"1433866624","1433870335","GB","GBR","UNITED KINGDOM" -"1433870336","1433872383","TR","TUR","TURKEY" -"1433872384","1433874431","IT","ITA","ITALY" -"1433874432","1433876479","NL","NLD","NETHERLANDS" -"1433876480","1433878527","GB","GBR","UNITED KINGDOM" -"1433878528","1433880575","TR","TUR","TURKEY" -"1433880576","1433882623","RU","RUS","RUSSIAN FEDERATION" -"1433882624","1433884671","GB","GBR","UNITED KINGDOM" -"1433884672","1433886719","CZ","CZE","CZECH REPUBLIC" -"1433886720","1433888767","GB","GBR","UNITED KINGDOM" -"1433888768","1433890815","SA","SAU","SAUDI ARABIA" -"1433890816","1433892863","GB","GBR","UNITED KINGDOM" -"1433892864","1433894911","MT","MLT","MALTA" -"1433894912","1433896959","SE","SWE","SWEDEN" -"1433896960","1433897471","NO","NOR","NORWAY" -"1433897472","1433897727","NL","NLD","NETHERLANDS" -"1433897728","1433899007","NO","NOR","NORWAY" -"1433899008","1433901055","RU","RUS","RUSSIAN FEDERATION" -"1433901056","1433905151","DE","DEU","GERMANY" -"1433905152","1433907199","FR","FRA","FRANCE" -"1433907200","1433909247","IT","ITA","ITALY" -"1433909248","1433911295","BE","BEL","BELGIUM" -"1433911296","1433913343","ES","ESP","SPAIN" -"1433913344","1433913875","NL","NLD","NETHERLANDS" -"1433913876","1433913879","DE","DEU","GERMANY" -"1433913880","1433914111","NL","NLD","NETHERLANDS" -"1433914112","1433915135","DE","DEU","GERMANY" -"1433915136","1433915391","NL","NLD","NETHERLANDS" -"1433915392","1433917439","DE","DEU","GERMANY" -"1433917440","1433919487","BE","BEL","BELGIUM" -"1433919488","1433921535","GB","GBR","UNITED KINGDOM" -"1433921536","1433923583","CH","CHE","SWITZERLAND" -"1433923584","1433923711","BE","BEL","BELGIUM" -"1433923712","1433924479","NL","NLD","NETHERLANDS" -"1433924480","1433925631","BE","BEL","BELGIUM" -"1433925632","1433927679","GB","GBR","UNITED KINGDOM" -"1433927680","1434189823","RO","ROM","ROMANIA" -"1434189824","1434451967","AT","AUT","AUSTRIA" -"1434451968","1434517503","PL","POL","POLAND" -"1434517504","1434550271","DK","DNK","DENMARK" -"1434550272","1434583039","SA","SAU","SAUDI ARABIA" -"1434583040","1434615807","BG","BGR","BULGARIA" -"1434615808","1434648575","IL","ISR","ISRAEL" -"1434648576","1434681343","FI","FIN","FINLAND" -"1434681344","1434681855","DE","DEU","GERMANY" -"1434681856","1434682111","MY","MYS","MALAYSIA" -"1434682112","1434705791","DE","DEU","GERMANY" -"1434705792","1434705919","NL","NLD","NETHERLANDS" -"1434705920","1434714111","DE","DEU","GERMANY" -"1434714112","1434746879","AZ","AZE","AZERBAIJAN" -"1434746880","1434779647","CZ","CZE","CZECH REPUBLIC" -"1434779648","1434812415","GB","GBR","UNITED KINGDOM" -"1434812416","1434845183","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1434845184","1434877951","FI","FIN","FINLAND" -"1434877952","1434910719","IE","IRL","IRELAND" -"1434910720","1434943487","CZ","CZE","CZECH REPUBLIC" -"1434943488","1434976255","SK","SVK","SLOVAKIA" -"1434976256","1435107327","ES","ESP","SPAIN" -"1435107328","1435238399","PT","PRT","PORTUGAL" -"1435238400","1435500543","RU","RUS","RUSSIAN FEDERATION" -"1435500544","1436024831","NL","NLD","NETHERLANDS" -"1436024832","1436090367","ES","ESP","SPAIN" -"1436090368","1436155903","TR","TUR","TURKEY" -"1436155904","1436221439","OM","OMN","OMAN" -"1436221440","1436286975","ES","ESP","SPAIN" -"1436286976","1436418047","FI","FIN","FINLAND" -"1436418048","1436420095","DE","DEU","GERMANY" -"1436420096","1436422143","GB","GBR","UNITED KINGDOM" -"1436422144","1436424191","FR","FRA","FRANCE" -"1436424192","1436426239","CH","CHE","SWITZERLAND" -"1436426240","1436428287","BA","BIH","BOSNIA AND HERZEGOVINA" -"1436428288","1436430335","GB","GBR","UNITED KINGDOM" -"1436430336","1436432383","RU","RUS","RUSSIAN FEDERATION" -"1436432384","1436436479","GB","GBR","UNITED KINGDOM" -"1436436480","1436438527","LV","LVA","LATVIA" -"1436438528","1436440575","IT","ITA","ITALY" -"1436440576","1436442623","RU","RUS","RUSSIAN FEDERATION" -"1436442624","1436444671","TR","TUR","TURKEY" -"1436444672","1436446719","BE","BEL","BELGIUM" -"1436446720","1436450815","FR","FRA","FRANCE" -"1436450816","1436452863","BH","BHR","BAHRAIN" -"1436452864","1436453119","NL","NLD","NETHERLANDS" -"1436453120","1436453631","DE","DEU","GERMANY" -"1436453632","1436453887","NL","NLD","NETHERLANDS" -"1436453888","1436454399","GB","GBR","UNITED KINGDOM" -"1436454400","1436454655","NL","NLD","NETHERLANDS" -"1436454656","1436454911","DE","DEU","GERMANY" -"1436454912","1436456959","AZ","AZE","AZERBAIJAN" -"1436456960","1436459007","GB","GBR","UNITED KINGDOM" -"1436459008","1436461055","NL","NLD","NETHERLANDS" -"1436461056","1436463103","ES","ESP","SPAIN" -"1436463104","1436465151","DE","DEU","GERMANY" -"1436465152","1436467199","RU","RUS","RUSSIAN FEDERATION" -"1436467200","1436469247","DE","DEU","GERMANY" -"1436469248","1436471295","NL","NLD","NETHERLANDS" -"1436471296","1436471551","BE","BEL","BELGIUM" -"1436471552","1436471615","NL","NLD","NETHERLANDS" -"1436471616","1436471679","FR","FRA","FRANCE" -"1436471680","1436471743","BE","BEL","BELGIUM" -"1436471744","1436471807","BR","BRA","BRAZIL" -"1436471808","1436473343","BE","BEL","BELGIUM" -"1436473344","1436475391","RO","ROM","ROMANIA" -"1436475392","1436477439","AT","AUT","AUSTRIA" -"1436477440","1436481535","CH","CHE","SWITZERLAND" -"1436481536","1436483583","NL","NLD","NETHERLANDS" -"1436483584","1436485631","UA","UKR","UKRAINE" -"1436485632","1436487471","DE","DEU","GERMANY" -"1436487472","1436487487","AT","AUT","AUSTRIA" -"1436487488","1436487623","DE","DEU","GERMANY" -"1436487624","1436487631","AT","AUT","AUSTRIA" -"1436487632","1436487679","DE","DEU","GERMANY" -"1436487680","1436489727","IE","IRL","IRELAND" -"1436489728","1436491775","KZ","KAZ","KAZAKHSTAN" -"1436491776","1436495871","RU","RUS","RUSSIAN FEDERATION" -"1436495872","1436497919","HU","HUN","HUNGARY" -"1436497920","1436499967","GB","GBR","UNITED KINGDOM" -"1436499968","1436504063","TR","TUR","TURKEY" -"1436504064","1436508159","GB","GBR","UNITED KINGDOM" -"1436508160","1436510207","NL","NLD","NETHERLANDS" -"1436510208","1436512255","SK","SVK","SLOVAKIA" -"1436512256","1436514303","NL","NLD","NETHERLANDS" -"1436514304","1436516351","GI","GIB","GIBRALTAR" -"1436516352","1436520447","GB","GBR","UNITED KINGDOM" -"1436520448","1436522495","IT","ITA","ITALY" -"1436522496","1436524543","GB","GBR","UNITED KINGDOM" -"1436524544","1436526591","IL","ISR","ISRAEL" -"1436526592","1436528639","GB","GBR","UNITED KINGDOM" -"1436528640","1436530687","IT","ITA","ITALY" -"1436530688","1436531243","GB","GBR","UNITED KINGDOM" -"1436531244","1436531263","FR","FRA","FRANCE" -"1436531264","1436531327","GB","GBR","UNITED KINGDOM" -"1436531328","1436531455","FR","FRA","FRANCE" -"1436531456","1436532207","GB","GBR","UNITED KINGDOM" -"1436532208","1436532211","FR","FRA","FRANCE" -"1436532212","1436532219","GB","GBR","UNITED KINGDOM" -"1436532220","1436532223","FR","FRA","FRANCE" -"1436532224","1436532235","GB","GBR","UNITED KINGDOM" -"1436532236","1436532255","FR","FRA","FRANCE" -"1436532256","1436532287","GB","GBR","UNITED KINGDOM" -"1436532288","1436532735","FR","FRA","FRANCE" -"1436532736","1436535839","IT","ITA","ITALY" -"1436535840","1436535855","ET","ETH","ETHIOPIA" -"1436535856","1436535943","IT","ITA","ITALY" -"1436535944","1436535951","ET","ETH","ETHIOPIA" -"1436535952","1436535999","IT","ITA","ITALY" -"1436536000","1436536007","MO","MAC","MACAO" -"1436536008","1436536831","IT","ITA","ITALY" -"1436536832","1436538879","GB","GBR","UNITED KINGDOM" -"1436538880","1436540927","JO","JOR","JORDAN" -"1436540928","1436542975","RU","RUS","RUSSIAN FEDERATION" -"1436542976","1436543999","NL","NLD","NETHERLANDS" -"1436544000","1436544511","FR","FRA","FRANCE" -"1436544512","1436545023","NL","NLD","NETHERLANDS" -"1436545024","1436547071","DE","DEU","GERMANY" -"1436547072","1436549119","GB","GBR","UNITED KINGDOM" -"1436549120","1436811263","CZ","CZE","CZECH REPUBLIC" -"1436811264","1437073407","NO","NOR","NORWAY" -"1437073408","1437335551","FR","FRA","FRANCE" -"1437335552","1437597695","RU","RUS","RUSSIAN FEDERATION" -"1437597696","1438121983","DE","DEU","GERMANY" -"1438121984","1438127103","NL","NLD","NETHERLANDS" -"1438127104","1438127359","GB","GBR","UNITED KINGDOM" -"1438127360","1438127615","SE","SWE","SWEDEN" -"1438127616","1438127871","BE","BEL","BELGIUM" -"1438127872","1438142463","NL","NLD","NETHERLANDS" -"1438142464","1438142719","GB","GBR","UNITED KINGDOM" -"1438142720","1438187519","NL","NLD","NETHERLANDS" -"1438187520","1438253055","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1438253056","1438318591","RO","ROM","ROMANIA" -"1438318592","1438384127","BG","BGR","BULGARIA" -"1438384128","1438400511","FI","FIN","FINLAND" -"1438400512","1438433279","SE","SWE","SWEDEN" -"1438433280","1438515199","GB","GBR","UNITED KINGDOM" -"1438515200","1438519007","DE","DEU","GERMANY" -"1438519008","1438519039","SI","SVN","SLOVENIA" -"1438519040","1438523391","DE","DEU","GERMANY" -"1438523392","1438524947","NL","NLD","NETHERLANDS" -"1438524948","1438524951","DE","DEU","GERMANY" -"1438524952","1438525335","NL","NLD","NETHERLANDS" -"1438525336","1438525343","DE","DEU","GERMANY" -"1438525344","1438525607","NL","NLD","NETHERLANDS" -"1438525608","1438525695","DE","DEU","GERMANY" -"1438525696","1438526719","NL","NLD","NETHERLANDS" -"1438526720","1438580735","DE","DEU","GERMANY" -"1438580736","1438646271","NL","NLD","NETHERLANDS" -"1438646272","1438662655","RU","RUS","RUSSIAN FEDERATION" -"1438662656","1438679039","ES","ESP","SPAIN" -"1438679040","1438695423","RU","RUS","RUSSIAN FEDERATION" -"1438695424","1438711807","FR","FRA","FRANCE" -"1438711808","1438728191","CZ","CZE","CZECH REPUBLIC" -"1438728192","1438744575","RU","RUS","RUSSIAN FEDERATION" -"1438744576","1438760959","AT","AUT","AUSTRIA" -"1438760960","1438777343","PL","POL","POLAND" -"1438777344","1438793727","SE","SWE","SWEDEN" -"1438793728","1438810111","SA","SAU","SAUDI ARABIA" -"1438810112","1438826495","SE","SWE","SWEDEN" -"1438826496","1438842879","FI","FIN","FINLAND" -"1438842880","1438859263","SE","SWE","SWEDEN" -"1438859264","1438861823","DE","DEU","GERMANY" -"1438861824","1438862079","CH","CHE","SWITZERLAND" -"1438862080","1438873119","DE","DEU","GERMANY" -"1438873120","1438873127","PA","PAN","PANAMA" -"1438873128","1438873671","DE","DEU","GERMANY" -"1438873672","1438873679","PA","PAN","PANAMA" -"1438873680","1438874411","DE","DEU","GERMANY" -"1438874412","1438874413","GB","GBR","UNITED KINGDOM" -"1438874414","1438874623","DE","DEU","GERMANY" -"1438874624","1438874639","GB","GBR","UNITED KINGDOM" -"1438874640","1438874687","DE","DEU","GERMANY" -"1438874688","1438874695","CH","CHE","SWITZERLAND" -"1438874696","1438874719","DE","DEU","GERMANY" -"1438874720","1438874751","NL","NLD","NETHERLANDS" -"1438874752","1438874759","DE","DEU","GERMANY" -"1438874760","1438874767","PA","PAN","PANAMA" -"1438874768","1438874783","DE","DEU","GERMANY" -"1438874784","1438874791","PA","PAN","PANAMA" -"1438874792","1438874799","DE","DEU","GERMANY" -"1438874800","1438874855","PA","PAN","PANAMA" -"1438874856","1438874863","DE","DEU","GERMANY" -"1438874864","1438874879","PA","PAN","PANAMA" -"1438874880","1438875223","DE","DEU","GERMANY" -"1438875224","1438875255","GB","GBR","UNITED KINGDOM" -"1438875256","1438875257","CH","CHE","SWITZERLAND" -"1438875258","1438875647","DE","DEU","GERMANY" -"1438875648","1438875903","RU","RUS","RUSSIAN FEDERATION" -"1438875904","1438876159","SE","SWE","SWEDEN" -"1438876160","1438876415","LB","LBN","LEBANON" -"1438876416","1438876927","RU","RUS","RUSSIAN FEDERATION" -"1438876928","1438877183","SE","SWE","SWEDEN" -"1438877184","1438877439","LT","LTU","LITHUANIA" -"1438877440","1438877695","LB","LBN","LEBANON" -"1438877696","1438877951","LT","LTU","LITHUANIA" -"1438877952","1438878719","LB","LBN","LEBANON" -"1438878720","1438878975","LT","LTU","LITHUANIA" -"1438878976","1438879231","IQ","IRQ","IRAQ" -"1438879232","1438880511","RU","RUS","RUSSIAN FEDERATION" -"1438880512","1438880767","LT","LTU","LITHUANIA" -"1438880768","1438881791","LB","LBN","LEBANON" -"1438881792","1438882303","RU","RUS","RUSSIAN FEDERATION" -"1438882304","1438882559","LT","LTU","LITHUANIA" -"1438882560","1438883583","RU","RUS","RUSSIAN FEDERATION" -"1438883584","1438883839","AM","ARM","ARMENIA" -"1438883840","1438884351","RU","RUS","RUSSIAN FEDERATION" -"1438884352","1438884607","LB","LBN","LEBANON" -"1438884608","1438884863","IQ","IRQ","IRAQ" -"1438884864","1438885887","RU","RUS","RUSSIAN FEDERATION" -"1438885888","1438889983","LT","LTU","LITHUANIA" -"1438889984","1438890239","LB","LBN","LEBANON" -"1438890240","1438890495","RU","RUS","RUSSIAN FEDERATION" -"1438890496","1438890751","IQ","IRQ","IRAQ" -"1438890752","1438892031","RU","RUS","RUSSIAN FEDERATION" -"1438892032","1438892287","AQ","ATA","ANTARCTICA" -"1438892288","1438900223","CH","CHE","SWITZERLAND" -"1438900224","1438908415","AQ","ATA","ANTARCTICA" -"1438908416","1438924799","GR","GRC","GREECE" -"1438924800","1438941183","NO","NOR","NORWAY" -"1438941184","1438957567","BG","BGR","BULGARIA" -"1438957568","1438973951","EE","EST","ESTONIA" -"1438973952","1438994175","DE","DEU","GERMANY" -"1438994176","1438994431","SE","SWE","SWEDEN" -"1438994432","1438994619","DE","DEU","GERMANY" -"1438994620","1438994623","SE","SWE","SWEDEN" -"1438994624","1438994751","DE","DEU","GERMANY" -"1438994752","1438994759","GB","GBR","UNITED KINGDOM" -"1438994760","1438994763","SE","SWE","SWEDEN" -"1438994764","1438995039","DE","DEU","GERMANY" -"1438995040","1438995047","GB","GBR","UNITED KINGDOM" -"1438995048","1438995067","DE","DEU","GERMANY" -"1438995068","1438995071","SE","SWE","SWEDEN" -"1438995072","1438998781","DE","DEU","GERMANY" -"1438998782","1438998783","CH","CHE","SWITZERLAND" -"1438998784","1438999098","DE","DEU","GERMANY" -"1438999099","1438999103","CH","CHE","SWITZERLAND" -"1438999104","1438999167","DE","DEU","GERMANY" -"1438999168","1438999185","IT","ITA","ITALY" -"1438999186","1438999261","DE","DEU","GERMANY" -"1438999262","1438999295","NL","NLD","NETHERLANDS" -"1438999296","1438999475","DE","DEU","GERMANY" -"1438999476","1438999487","PT","PRT","PORTUGAL" -"1438999488","1438999517","DE","DEU","GERMANY" -"1438999518","1438999518","CH","CHE","SWITZERLAND" -"1438999519","1438999533","DE","DEU","GERMANY" -"1438999534","1438999534","CH","CHE","SWITZERLAND" -"1438999535","1438999791","DE","DEU","GERMANY" -"1438999792","1438999807","GB","GBR","UNITED KINGDOM" -"1438999808","1439000575","DE","DEU","GERMANY" -"1439000576","1439002623","NL","NLD","NETHERLANDS" -"1439002624","1439006567","DE","DEU","GERMANY" -"1439006568","1439006575","AT","AUT","AUSTRIA" -"1439006576","1439006671","DE","DEU","GERMANY" -"1439006672","1439006675","PL","POL","POLAND" -"1439006676","1439006719","DE","DEU","GERMANY" -"1439006720","1439023103","SE","SWE","SWEDEN" -"1439023104","1439039487","IS","ISL","ICELAND" -"1439039488","1439055871","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1439055872","1439072255","RU","RUS","RUSSIAN FEDERATION" -"1439072256","1439088639","UA","UKR","UKRAINE" -"1439088640","1439105023","PL","POL","POLAND" -"1439105024","1439121407","AT","AUT","AUSTRIA" -"1439121408","1439154175","DE","DEU","GERMANY" -"1439154176","1439170559","GB","GBR","UNITED KINGDOM" -"1439170560","1439236095","NO","NOR","NORWAY" -"1439236096","1439301631","BE","BEL","BELGIUM" -"1439301632","1439305727","RU","RUS","RUSSIAN FEDERATION" -"1439305728","1439309823","DK","DNK","DENMARK" -"1439309824","1439318015","PL","POL","POLAND" -"1439318016","1439322111","DK","DNK","DENMARK" -"1439322112","1439326207","RO","ROM","ROMANIA" -"1439326208","1439330303","PL","POL","POLAND" -"1439330304","1439338495","RU","RUS","RUSSIAN FEDERATION" -"1439338496","1439342591","PL","POL","POLAND" -"1439342592","1439346687","UA","UKR","UKRAINE" -"1439346688","1439350783","RU","RUS","RUSSIAN FEDERATION" -"1439350784","1439354879","UA","UKR","UKRAINE" -"1439354880","1439358975","PL","POL","POLAND" -"1439358976","1439367167","RU","RUS","RUSSIAN FEDERATION" -"1439367168","1439432703","NL","NLD","NETHERLANDS" -"1439432704","1439498239","RO","ROM","ROMANIA" -"1439498240","1439514623","DE","DEU","GERMANY" -"1439514624","1439516671","IT","ITA","ITALY" -"1439516672","1439518207","DE","DEU","GERMANY" -"1439518208","1439518719","IT","ITA","ITALY" -"1439518720","1439529983","DE","DEU","GERMANY" -"1439529984","1439530239","EG","EGY","EGYPT" -"1439530240","1439535103","DE","DEU","GERMANY" -"1439535104","1439538175","IT","ITA","ITALY" -"1439538176","1439538687","DE","DEU","GERMANY" -"1439538688","1439539199","IT","ITA","ITALY" -"1439539200","1439549439","DE","DEU","GERMANY" -"1439549440","1439551487","IT","ITA","ITALY" -"1439551488","1439556095","DE","DEU","GERMANY" -"1439556096","1439556607","IT","ITA","ITALY" -"1439556608","1439558143","DE","DEU","GERMANY" -"1439558144","1439558911","IT","ITA","ITALY" -"1439558912","1439560191","DE","DEU","GERMANY" -"1439560192","1439560447","IT","ITA","ITALY" -"1439560448","1439560703","DE","DEU","GERMANY" -"1439560704","1439561215","IT","ITA","ITALY" -"1439561216","1439561727","DE","DEU","GERMANY" -"1439561728","1439562239","GB","GBR","UNITED KINGDOM" -"1439562240","1439562751","IE","IRL","IRELAND" -"1439562752","1439562879","DE","DEU","GERMANY" -"1439562880","1439563199","GB","GBR","UNITED KINGDOM" -"1439563200","1439563775","DE","DEU","GERMANY" -"1439563776","1439629311","LT","LTU","LITHUANIA" -"1439629312","1439694847","CZ","CZE","CZECH REPUBLIC" -"1439694848","1439825919","SA","SAU","SAUDI ARABIA" -"1439825920","1439956991","GB","GBR","UNITED KINGDOM" -"1439956992","1440251903","DE","DEU","GERMANY" -"1440251904","1440284671","SK","SVK","SLOVAKIA" -"1440284672","1440317439","FI","FIN","FINLAND" -"1440317440","1440350207","BG","BGR","BULGARIA" -"1440350208","1440382975","CH","CHE","SWITZERLAND" -"1440382976","1440415743","DK","DNK","DENMARK" -"1440415744","1440448511","ES","ESP","SPAIN" -"1440448512","1440481279","PL","POL","POLAND" -"1440481280","1440514047","IS","ISL","ICELAND" -"1440514048","1440546815","DE","DEU","GERMANY" -"1440546816","1440579583","NO","NOR","NORWAY" -"1440579584","1440645119","PL","POL","POLAND" -"1440645120","1440654591","CS","SCG","SERBIA AND MONTENEGRO" -"1440654592","1440659455","RS","SRB","SERBIA" -"1440659456","1440661751","CS","SCG","SERBIA AND MONTENEGRO" -"1440661752","1440662015","RS","SRB","SERBIA" -"1440662016","1440663751","CS","SCG","SERBIA AND MONTENEGRO" -"1440663752","1440663759","RS","SRB","SERBIA" -"1440663760","1440668671","CS","SCG","SERBIA AND MONTENEGRO" -"1440668672","1440669695","RS","SRB","SERBIA" -"1440669696","1440677887","CS","SCG","SERBIA AND MONTENEGRO" -"1440677888","1440710655","NL","NLD","NETHERLANDS" -"1440710656","1440743423","UA","UKR","UKRAINE" -"1440743424","1441267711","SE","SWE","SWEDEN" -"1441267712","1441275903","DE","DEU","GERMANY" -"1441275904","1441284095","GB","GBR","UNITED KINGDOM" -"1441284096","1441292287","AT","AUT","AUSTRIA" -"1441292288","1441300479","RU","RUS","RUSSIAN FEDERATION" -"1441300480","1441308671","LT","LTU","LITHUANIA" -"1441308672","1441316863","SE","SWE","SWEDEN" -"1441316864","1441325055","MT","MLT","MALTA" -"1441325056","1441327519","PL","POL","POLAND" -"1441327520","1441327551","SE","SWE","SWEDEN" -"1441327552","1441333247","PL","POL","POLAND" -"1441333248","1441349631","DE","DEU","GERMANY" -"1441349632","1441357823","RU","RUS","RUSSIAN FEDERATION" -"1441357824","1441366015","AT","AUT","AUSTRIA" -"1441366016","1441374207","RU","RUS","RUSSIAN FEDERATION" -"1441374208","1441382399","GB","GBR","UNITED KINGDOM" -"1441382400","1441384511","FR","FRA","FRANCE" -"1441384512","1441384543","US","USA","UNITED STATES" -"1441384544","1441384591","FR","FRA","FRANCE" -"1441384592","1441384599","AU","AUS","AUSTRALIA" -"1441384600","1441384607","FR","FRA","FRANCE" -"1441384608","1441384639","CN","CHN","CHINA" -"1441384640","1441385103","FR","FRA","FRANCE" -"1441385104","1441385119","ES","ESP","SPAIN" -"1441385120","1441386111","FR","FRA","FRANCE" -"1441386112","1441386239","IL","ISR","ISRAEL" -"1441386240","1441390591","FR","FRA","FRANCE" -"1441390592","1441398783","DK","DNK","DENMARK" -"1441398784","1441415167","RU","RUS","RUSSIAN FEDERATION" -"1441415168","1441423359","GB","GBR","UNITED KINGDOM" -"1441423360","1441431551","RU","RUS","RUSSIAN FEDERATION" -"1441431552","1441439743","GB","GBR","UNITED KINGDOM" -"1441439744","1441447935","LV","LVA","LATVIA" -"1441447936","1441456127","BE","BEL","BELGIUM" -"1441456128","1441464319","NL","NLD","NETHERLANDS" -"1441464320","1441468671","SE","SWE","SWEDEN" -"1441468672","1441470719","DK","DNK","DENMARK" -"1441470720","1441472511","SE","SWE","SWEDEN" -"1441472512","1441480703","RU","RUS","RUSSIAN FEDERATION" -"1441480704","1441488895","TR","TUR","TURKEY" -"1441488896","1441492223","GB","GBR","UNITED KINGDOM" -"1441492224","1441492479","BE","BEL","BELGIUM" -"1441492480","1441497087","GB","GBR","UNITED KINGDOM" -"1441497088","1441505279","IT","ITA","ITALY" -"1441505280","1441521663","RU","RUS","RUSSIAN FEDERATION" -"1441521664","1441529855","DK","DNK","DENMARK" -"1441529856","1441538047","RU","RUS","RUSSIAN FEDERATION" -"1441538048","1441543151","DE","DEU","GERMANY" -"1441543152","1441543167","LI","LIE","LIECHTENSTEIN" -"1441543168","1441543567","DE","DEU","GERMANY" -"1441543568","1441543583","CH","CHE","SWITZERLAND" -"1441543584","1441544063","DE","DEU","GERMANY" -"1441544064","1441544127","TR","TUR","TURKEY" -"1441544128","1441544143","DE","DEU","GERMANY" -"1441544144","1441544159","CH","CHE","SWITZERLAND" -"1441544160","1441545535","DE","DEU","GERMANY" -"1441545536","1441545599","AT","AUT","AUSTRIA" -"1441545600","1441546239","DE","DEU","GERMANY" -"1441546240","1441554431","DK","DNK","DENMARK" -"1441554432","1441554687","GB","GBR","UNITED KINGDOM" -"1441554688","1441554943","NL","NLD","NETHERLANDS" -"1441554944","1441557759","GB","GBR","UNITED KINGDOM" -"1441557760","1441558015","NL","NLD","NETHERLANDS" -"1441558016","1441562623","GB","GBR","UNITED KINGDOM" -"1441562624","1441564671","IQ","IRQ","IRAQ" -"1441564672","1441566719","PK","PAK","PAKISTAN" -"1441566720","1441570815","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1441570816","1441579007","RU","RUS","RUSSIAN FEDERATION" -"1441579008","1441582975","DE","DEU","GERMANY" -"1441582976","1441583103","US","USA","UNITED STATES" -"1441583104","1441587199","DE","DEU","GERMANY" -"1441587200","1441594879","AT","AUT","AUSTRIA" -"1441594880","1441595135","DE","DEU","GERMANY" -"1441595136","1441596415","AT","AUT","AUSTRIA" -"1441596416","1441602815","SK","SVK","SLOVAKIA" -"1441602816","1441603071","AT","AUT","AUSTRIA" -"1441603072","1441603583","SK","SVK","SLOVAKIA" -"1441603584","1441611775","RU","RUS","RUSSIAN FEDERATION" -"1441611776","1441619967","DE","DEU","GERMANY" -"1441619968","1441620271","FR","FRA","FRANCE" -"1441620272","1441620287","ES","ESP","SPAIN" -"1441620288","1441620407","FR","FRA","FRANCE" -"1441620408","1441620411","ES","ESP","SPAIN" -"1441620412","1441620735","FR","FRA","FRANCE" -"1441620736","1441620767","ES","ESP","SPAIN" -"1441620768","1441620895","FR","FRA","FRANCE" -"1441620896","1441620927","PT","PRT","PORTUGAL" -"1441620928","1441628159","FR","FRA","FRANCE" -"1441628160","1441636351","SA","SAU","SAUDI ARABIA" -"1441636352","1441644543","PL","POL","POLAND" -"1441644544","1441652735","GB","GBR","UNITED KINGDOM" -"1441652736","1441660927","SK","SVK","SLOVAKIA" -"1441660928","1441669119","ES","ESP","SPAIN" -"1441669120","1441677311","GE","GEO","GEORGIA" -"1441677312","1441685503","HU","HUN","HUNGARY" -"1441685504","1441693695","UA","UKR","UKRAINE" -"1441693696","1441694719","BR","BRA","BRAZIL" -"1441694720","1441695743","DE","DEU","GERMANY" -"1441695744","1441696767","US","USA","UNITED STATES" -"1441696768","1441697791","SG","SGP","SINGAPORE" -"1441697792","1441698815","US","USA","UNITED STATES" -"1441698816","1441701887","DE","DEU","GERMANY" -"1441701888","1441710079","AT","AUT","AUSTRIA" -"1441710080","1441718271","SE","SWE","SWEDEN" -"1441718272","1441726463","DE","DEU","GERMANY" -"1441726464","1441729023","KW","KWT","KUWAIT" -"1441729024","1441729535","SG","SGP","SINGAPORE" -"1441729536","1441734655","KW","KWT","KUWAIT" -"1441734656","1441742847","RU","RUS","RUSSIAN FEDERATION" -"1441742848","1441751039","CZ","CZE","CZECH REPUBLIC" -"1441751040","1441759231","DE","DEU","GERMANY" -"1441759232","1441767423","BG","BGR","BULGARIA" -"1441767424","1441775615","IT","ITA","ITALY" -"1441775616","1441783807","ES","ESP","SPAIN" -"1441783808","1441791999","CZ","CZE","CZECH REPUBLIC" -"1441792000","1442316287","PT","PRT","PORTUGAL" -"1442316288","1442316583","SK","SVK","SLOVAKIA" -"1442316584","1442316591","DE","DEU","GERMANY" -"1442316592","1442321455","SK","SVK","SLOVAKIA" -"1442321456","1442321463","DE","DEU","GERMANY" -"1442321464","1442332927","SK","SVK","SLOVAKIA" -"1442332928","1442333055","BE","BEL","BELGIUM" -"1442333056","1442381823","SK","SVK","SLOVAKIA" -"1442381824","1442447359","RU","RUS","RUSSIAN FEDERATION" -"1442447360","1442512895","IL","ISR","ISRAEL" -"1442512896","1442578431","ES","ESP","SPAIN" -"1442578432","1442643967","NO","NOR","NORWAY" -"1442643968","1442709503","EE","EST","ESTONIA" -"1442709504","1442775039","LV","LVA","LATVIA" -"1442775040","1442779135","PL","POL","POLAND" -"1442779136","1442783231","DE","DEU","GERMANY" -"1442783232","1442787327","NO","NOR","NORWAY" -"1442787328","1442791423","LT","LTU","LITHUANIA" -"1442791424","1442795519","LV","LVA","LATVIA" -"1442795520","1442799615","DE","DEU","GERMANY" -"1442799616","1442803711","LT","LTU","LITHUANIA" -"1442803712","1442807807","UA","UKR","UKRAINE" -"1442807808","1442811903","BG","BGR","BULGARIA" -"1442811904","1442815999","AT","AUT","AUSTRIA" -"1442816000","1442820095","BG","BGR","BULGARIA" -"1442820096","1442824191","PL","POL","POLAND" -"1442824192","1442828287","BE","BEL","BELGIUM" -"1442828288","1442832383","NL","NLD","NETHERLANDS" -"1442832384","1442836479","GB","GBR","UNITED KINGDOM" -"1442836480","1442840575","PL","POL","POLAND" -"1442840576","1444937727","GB","GBR","UNITED KINGDOM" -"1444937728","1445068799","AT","AUT","AUSTRIA" -"1445068800","1445199871","RO","ROM","ROMANIA" -"1445199872","1445330943","QA","QAT","QATAR" -"1445330944","1445396479","LT","LTU","LITHUANIA" -"1445396480","1445462015","BE","BEL","BELGIUM" -"1445462016","1445986303","IE","IRL","IRELAND" -"1445986304","1446051839","DK","DNK","DENMARK" -"1446051840","1446117375","CZ","CZE","CZECH REPUBLIC" -"1446117376","1446182911","FI","FIN","FINLAND" -"1446182912","1446248447","SA","SAU","SAUDI ARABIA" -"1446248448","1446313983","DK","DNK","DENMARK" -"1446313984","1446445055","GB","GBR","UNITED KINGDOM" -"1446445056","1446510591","RO","ROM","ROMANIA" -"1446510592","1446543359","DE","DEU","GERMANY" -"1446543360","1446576127","AT","AUT","AUSTRIA" -"1446576128","1446608895","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1446608896","1446641663","BY","BLR","BELARUS" -"1446641664","1446674431","SI","SVN","SLOVENIA" -"1446674432","1446707175","DK","DNK","DENMARK" -"1446707176","1446707179","NO","NOR","NORWAY" -"1446707180","1446707183","FI","FIN","FINLAND" -"1446707184","1446707199","DK","DNK","DENMARK" -"1446707200","1446710687","AT","AUT","AUSTRIA" -"1446710688","1446710703","ES","ESP","SPAIN" -"1446710704","1446739967","AT","AUT","AUSTRIA" -"1446739968","1446772735","RU","RUS","RUSSIAN FEDERATION" -"1446772736","1446805503","SA","SAU","SAUDI ARABIA" -"1446805504","1446838271","FI","FIN","FINLAND" -"1446838272","1446862079","SI","SVN","SLOVENIA" -"1446862080","1446862591","HR","HRV","CROATIA" -"1446862592","1446871039","SI","SVN","SLOVENIA" -"1446871040","1446903807","CZ","CZE","CZECH REPUBLIC" -"1446903808","1446904071","AE","ARE","UNITED ARAB EMIRATES" -"1446904072","1446904079","CY","CYP","CYPRUS" -"1446904080","1446904095","BH","BHR","BAHRAIN" -"1446904096","1446904111","SA","SAU","SAUDI ARABIA" -"1446904112","1446904119","BH","BHR","BAHRAIN" -"1446904120","1446904127","AE","ARE","UNITED ARAB EMIRATES" -"1446904128","1446904135","SA","SAU","SAUDI ARABIA" -"1446904136","1446904143","IQ","IRQ","IRAQ" -"1446904144","1446904151","SA","SAU","SAUDI ARABIA" -"1446904152","1446904159","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1446904160","1446904167","ES","ESP","SPAIN" -"1446904168","1446904175","IQ","IRQ","IRAQ" -"1446904176","1446904831","AE","ARE","UNITED ARAB EMIRATES" -"1446904832","1446904835","LY","LBY","LIBYAN ARAB JAMAHIRIYA" -"1446904836","1446920191","AE","ARE","UNITED ARAB EMIRATES" -"1446920192","1446936575","RU","RUS","RUSSIAN FEDERATION" -"1446936576","1446952959","NO","NOR","NORWAY" -"1446952960","1446969343","QA","QAT","QATAR" -"1446969344","1446985727","GB","GBR","UNITED KINGDOM" -"1446985728","1447010303","PL","POL","POLAND" -"1447010304","1447018495","LV","LVA","LATVIA" -"1447018496","1447019007","CZ","CZE","CZECH REPUBLIC" -"1447019008","1447019023","BZ","BLZ","BELIZE" -"1447019024","1447026687","CZ","CZE","CZECH REPUBLIC" -"1447026688","1447169375","FR","FRA","FRANCE" -"1447169376","1447169391","TN","TUN","TUNISIA" -"1447169392","1448083455","FR","FRA","FRANCE" -"1448083456","1449132031","NL","NLD","NETHERLANDS" -"1449132032","1449394175","AE","ARE","UNITED ARAB EMIRATES" -"1449394176","1449459711","LT","LTU","LITHUANIA" -"1449459712","1449525247","HU","HUN","HUNGARY" -"1449525248","1449590783","RU","RUS","RUSSIAN FEDERATION" -"1449590784","1449656319","DE","DEU","GERMANY" -"1449656320","1449717759","RO","ROM","ROMANIA" -"1449717760","1449718783","MD","MDA","REPUBLIC OF MOLDOVA" -"1449718784","1449808639","RO","ROM","ROMANIA" -"1449808640","1449808895","UA","UKR","UKRAINE" -"1449808896","1449840639","RO","ROM","ROMANIA" -"1449840640","1449852927","MD","MDA","REPUBLIC OF MOLDOVA" -"1449852928","1449918463","RO","ROM","ROMANIA" -"1449918464","1449951231","JO","JOR","JORDAN" -"1449951232","1449983999","TR","TUR","TURKEY" -"1449984000","1449992191","NL","NLD","NETHERLANDS" -"1449992192","1450000383","GB","GBR","UNITED KINGDOM" -"1450000384","1450008575","HU","HUN","HUNGARY" -"1450008576","1450016767","ES","ESP","SPAIN" -"1450016768","1450024959","IT","ITA","ITALY" -"1450024960","1450033151","ES","ESP","SPAIN" -"1450033152","1450041343","RU","RUS","RUSSIAN FEDERATION" -"1450041344","1450049535","DE","DEU","GERMANY" -"1450049536","1450057727","RU","RUS","RUSSIAN FEDERATION" -"1450057728","1450065919","EE","EST","ESTONIA" -"1450065920","1450074111","DE","DEU","GERMANY" -"1450074112","1450082303","RU","RUS","RUSSIAN FEDERATION" -"1450082304","1450090495","IT","ITA","ITALY" -"1450090496","1450106879","RU","RUS","RUSSIAN FEDERATION" -"1450106880","1450115071","SK","SVK","SLOVAKIA" -"1450115072","1450123263","RU","RUS","RUSSIAN FEDERATION" -"1450123264","1450131455","AT","AUT","AUSTRIA" -"1450131456","1450139647","UA","UKR","UKRAINE" -"1450139648","1450147839","PL","POL","POLAND" -"1450147840","1450156031","RU","RUS","RUSSIAN FEDERATION" -"1450156032","1450164223","GB","GBR","UNITED KINGDOM" -"1450164224","1450166271","SA","SAU","SAUDI ARABIA" -"1450166272","1450168319","PL","POL","POLAND" -"1450170368","1450172415","GB","GBR","UNITED KINGDOM" -"1450172416","1450174463","UA","UKR","UKRAINE" -"1450174464","1450176511","DE","DEU","GERMANY" -"1450176512","1450178559","PL","POL","POLAND" -"1450178560","1450180607","DE","DEU","GERMANY" -"1450180608","1450311679","GB","GBR","UNITED KINGDOM" -"1450311680","1450442751","FI","FIN","FINLAND" -"1450442752","1450704895","CH","CHE","SWITZERLAND" -"1450704896","1451173887","RO","ROM","ROMANIA" -"1451173888","1451175935","HU","HUN","HUNGARY" -"1451175936","1451229183","RO","ROM","ROMANIA" -"1451229184","1455423487","GB","GBR","UNITED KINGDOM" -"1455423488","1459617791","FR","FRA","FRANCE" -"1459617792","1461714943","IT","ITA","ITALY" -"1461714944","1462763519","IE","IRL","IRELAND" -"1462763520","1463812095","DK","DNK","DENMARK" -"1463812096","1464074239","BE","BEL","BELGIUM" -"1464074240","1464336383","IL","ISR","ISRAEL" -"1464336384","1464467455","DK","DNK","DENMARK" -"1464467456","1464598527","GB","GBR","UNITED KINGDOM" -"1464664064","1464860671","DE","DEU","GERMANY" -"1464860672","1465384959","GB","GBR","UNITED KINGDOM" -"1465384960","1465647103","FR","FRA","FRANCE" -"1465647104","1465909247","FI","FIN","FINLAND" -"1465909248","1465942015","PL","POL","POLAND" -"1465942016","1465974783","SE","SWE","SWEDEN" -"1465974784","1466007551","HU","HUN","HUNGARY" -"1466007552","1466040319","BG","BGR","BULGARIA" -"1466040320","1466073087","EE","EST","ESTONIA" -"1466073088","1466097663","FR","FRA","FRANCE" -"1466097664","1466099711","ES","ESP","SPAIN" -"1466099712","1466101759","PL","POL","POLAND" -"1466101760","1466103807","DE","DEU","GERMANY" -"1466103808","1466104575","GB","GBR","UNITED KINGDOM" -"1466104576","1466104831","FR","FRA","FRANCE" -"1466104832","1466105343","BE","BEL","BELGIUM" -"1466105344","1466105855","GB","GBR","UNITED KINGDOM" -"1466105856","1466122239","PL","POL","POLAND" -"1466122240","1466130431","LV","LVA","LATVIA" -"1466130432","1466138623","PL","POL","POLAND" -"1466138624","1466171391","SE","SWE","SWEDEN" -"1466171392","1466204159","FR","FRA","FRANCE" -"1466204160","1466236927","FI","FIN","FINLAND" -"1466236928","1466241023","NL","NLD","NETHERLANDS" -"1466241024","1466249215","PL","POL","POLAND" -"1466249216","1466253311","GR","GRC","GREECE" -"1466253312","1466257407","PL","POL","POLAND" -"1466257408","1466261503","GR","GRC","GREECE" -"1466261504","1466265599","GB","GBR","UNITED KINGDOM" -"1466265600","1466269695","HU","HUN","HUNGARY" -"1466269696","1466302463","SA","SAU","SAUDI ARABIA" -"1466302464","1466335231","GB","GBR","UNITED KINGDOM" -"1466335232","1466367999","CH","CHE","SWITZERLAND" -"1466368000","1466400767","PT","PRT","PORTUGAL" -"1466400768","1466433535","RU","RUS","RUSSIAN FEDERATION" -"1466433536","1466499071","DK","DNK","DENMARK" -"1466499072","1466564607","PL","POL","POLAND" -"1466564608","1466589183","DE","DEU","GERMANY" -"1466589184","1466590207","FR","FRA","FRANCE" -"1466590208","1466592255","GB","GBR","UNITED KINGDOM" -"1466592256","1466592511","FR","FRA","FRANCE" -"1466592512","1466592767","GB","GBR","UNITED KINGDOM" -"1466592768","1466593279","FR","FRA","FRANCE" -"1466593280","1466606847","DE","DEU","GERMANY" -"1466606848","1466607103","FR","FRA","FRANCE" -"1466607104","1466613759","DE","DEU","GERMANY" -"1466613760","1466615807","ES","ESP","SPAIN" -"1466615808","1466616575","GB","GBR","UNITED KINGDOM" -"1466616576","1466617343","ES","ESP","SPAIN" -"1466617344","1466617471","FR","FRA","FRANCE" -"1466617472","1466617599","GB","GBR","UNITED KINGDOM" -"1466617600","1466617855","ES","ESP","SPAIN" -"1466617856","1466630143","DE","DEU","GERMANY" -"1466630144","1466695679","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1466695680","1466761215","FI","FIN","FINLAND" -"1466761216","1466826751","SA","SAU","SAUDI ARABIA" -"1466826752","1466886399","LV","LVA","LATVIA" -"1466886400","1466886655","LT","LTU","LITHUANIA" -"1466886656","1466892287","LV","LVA","LATVIA" -"1466892288","1466957823","ES","ESP","SPAIN" -"1466957824","1467219967","GB","GBR","UNITED KINGDOM" -"1467219968","1467236351","DK","DNK","DENMARK" -"1467236352","1467252735","BG","BGR","BULGARIA" -"1467252736","1467269119","RS","SRB","SERBIA" -"1467269120","1467285503","PL","POL","POLAND" -"1467285504","1467301887","RU","RUS","RUSSIAN FEDERATION" -"1467301888","1467318271","GB","GBR","UNITED KINGDOM" -"1467318272","1467334655","RU","RUS","RUSSIAN FEDERATION" -"1467334656","1467344127","GB","GBR","UNITED KINGDOM" -"1467344128","1467344383","CA","CAN","CANADA" -"1467344384","1467347903","GB","GBR","UNITED KINGDOM" -"1467347904","1467347935","SE","SWE","SWEDEN" -"1467347936","1467351039","GB","GBR","UNITED KINGDOM" -"1467351040","1467367423","NO","NOR","NORWAY" -"1467367424","1467367615","DE","DEU","GERMANY" -"1467367616","1467367647","SE","SWE","SWEDEN" -"1467367648","1467367679","DE","DEU","GERMANY" -"1467367680","1467367695","IT","ITA","ITALY" -"1467367696","1467367871","DE","DEU","GERMANY" -"1467367872","1467367903","SE","SWE","SWEDEN" -"1467367904","1467367935","DE","DEU","GERMANY" -"1467367936","1467368191","SI","SVN","SLOVENIA" -"1467368192","1467368319","DK","DNK","DENMARK" -"1467368320","1467369519","DE","DEU","GERMANY" -"1467369520","1467369535","RU","RUS","RUSSIAN FEDERATION" -"1467369536","1467369599","DE","DEU","GERMANY" -"1467369600","1467369663","IT","ITA","ITALY" -"1467369664","1467369727","AT","AUT","AUSTRIA" -"1467369728","1467369759","DE","DEU","GERMANY" -"1467369760","1467369791","HR","HRV","CROATIA" -"1467369792","1467369855","SE","SWE","SWEDEN" -"1467369856","1467369887","DE","DEU","GERMANY" -"1467369888","1467369903","RU","RUS","RUSSIAN FEDERATION" -"1467369904","1467383807","DE","DEU","GERMANY" -"1467383808","1467400191","BG","BGR","BULGARIA" -"1467400192","1467416575","RU","RUS","RUSSIAN FEDERATION" -"1467416576","1467432959","PL","POL","POLAND" -"1467432960","1467449343","BG","BGR","BULGARIA" -"1467449344","1467457535","SI","SVN","SLOVENIA" -"1467457536","1467465727","EE","EST","ESTONIA" -"1467465728","1467465759","NL","NLD","NETHERLANDS" -"1467465760","1467465791","AT","AUT","AUSTRIA" -"1467465792","1467465799","NL","NLD","NETHERLANDS" -"1467465800","1467465807","AT","AUT","AUSTRIA" -"1467465808","1467465823","NL","NLD","NETHERLANDS" -"1467465824","1467465855","AT","AUT","AUSTRIA" -"1467465856","1467466015","NL","NLD","NETHERLANDS" -"1467466016","1467466023","DE","DEU","GERMANY" -"1467466024","1467466031","AT","AUT","AUSTRIA" -"1467466032","1467466111","NL","NLD","NETHERLANDS" -"1467466112","1467466143","DE","DEU","GERMANY" -"1467466144","1467466175","NL","NLD","NETHERLANDS" -"1467466176","1467466191","DE","DEU","GERMANY" -"1467466192","1467466207","NL","NLD","NETHERLANDS" -"1467466208","1467466215","DE","DEU","GERMANY" -"1467466216","1467466223","RU","RUS","RUSSIAN FEDERATION" -"1467466224","1467466239","NL","NLD","NETHERLANDS" -"1467466240","1467466271","DE","DEU","GERMANY" -"1467466272","1467466495","NL","NLD","NETHERLANDS" -"1467466496","1467467071","DE","DEU","GERMANY" -"1467467072","1467467103","CH","CHE","SWITZERLAND" -"1467467104","1467467903","DE","DEU","GERMANY" -"1467467904","1467468031","CH","CHE","SWITZERLAND" -"1467468032","1467468111","DE","DEU","GERMANY" -"1467468112","1467468119","BR","BRA","BRAZIL" -"1467468120","1467473919","DE","DEU","GERMANY" -"1467473920","1467482111","RU","RUS","RUSSIAN FEDERATION" -"1467482112","1467613183","BG","BGR","BULGARIA" -"1467613184","1467744255","DE","DEU","GERMANY" -"1467744256","1467875327","GB","GBR","UNITED KINGDOM" -"1467875328","1467940863","BG","BGR","BULGARIA" -"1467940864","1468006399","GB","GBR","UNITED KINGDOM" -"1468006400","1472200703","DE","DEU","GERMANY" -"1472200704","1472226463","IE","IRL","IRELAND" -"1472226464","1472226479","GB","GBR","UNITED KINGDOM" -"1472226480","1472259207","IE","IRL","IRELAND" -"1472259208","1472259231","GB","GBR","UNITED KINGDOM" -"1472259232","1472259247","IE","IRL","IRELAND" -"1472259248","1472259255","GB","GBR","UNITED KINGDOM" -"1472259256","1472264799","IE","IRL","IRELAND" -"1472264800","1472264807","GB","GBR","UNITED KINGDOM" -"1472264808","1472266239","IE","IRL","IRELAND" -"1472266240","1472331775","DE","DEU","GERMANY" -"1472331776","1472397311","GB","GBR","UNITED KINGDOM" -"1472397312","1472462847","NL","NLD","NETHERLANDS" -"1472462848","1472528383","PT","PRT","PORTUGAL" -"1472528384","1472593919","SK","SVK","SLOVAKIA" -"1472593920","1472659455","IE","IRL","IRELAND" -"1472659456","1472724991","PL","POL","POLAND" -"1472724992","1472856063","AE","ARE","UNITED ARAB EMIRATES" -"1472856064","1472987135","GR","GRC","GREECE" -"1472987136","1473249279","PL","POL","POLAND" -"1473249280","1473724415","NL","NLD","NETHERLANDS" -"1473724416","1473740799","BE","BEL","BELGIUM" -"1473740800","1473773567","NL","NLD","NETHERLANDS" -"1473773568","1474297855","ES","ESP","SPAIN" -"1474297856","1474330623","GB","GBR","UNITED KINGDOM" -"1474330624","1474396159","RU","RUS","RUSSIAN FEDERATION" -"1474396160","1474428927","DE","DEU","GERMANY" -"1474428928","1474461695","LV","LVA","LATVIA" -"1474461696","1474494463","RU","RUS","RUSSIAN FEDERATION" -"1474494464","1474527231","SE","SWE","SWEDEN" -"1474527232","1474559999","BG","BGR","BULGARIA" -"1474560000","1474592767","RU","RUS","RUSSIAN FEDERATION" -"1474592768","1474625535","CY","CYP","CYPRUS" -"1474625536","1474658303","HU","HUN","HUNGARY" -"1474658304","1474691071","RU","RUS","RUSSIAN FEDERATION" -"1474691072","1474723839","DE","DEU","GERMANY" -"1474723840","1474756607","SA","SAU","SAUDI ARABIA" -"1474756608","1474822143","FR","FRA","FRANCE" -"1474822144","1474887679","IE","IRL","IRELAND" -"1474887680","1474953215","NL","NLD","NETHERLANDS" -"1474953216","1475018751","DE","DEU","GERMANY" -"1475018752","1475084287","ES","ESP","SPAIN" -"1475084288","1475086335","NL","NLD","NETHERLANDS" -"1475086336","1475092479","RU","RUS","RUSSIAN FEDERATION" -"1475092480","1475094527","CY","CYP","CYPRUS" -"1475094528","1475096575","RU","RUS","RUSSIAN FEDERATION" -"1475096576","1475098623","BH","BHR","BAHRAIN" -"1475098624","1475101695","GB","GBR","UNITED KINGDOM" -"1475101696","1475102207","ZA","ZAF","SOUTH AFRICA" -"1475102208","1475102719","GB","GBR","UNITED KINGDOM" -"1475102720","1475104767","FR","FRA","FRANCE" -"1475104768","1475106815","RU","RUS","RUSSIAN FEDERATION" -"1475106816","1475108863","GB","GBR","UNITED KINGDOM" -"1475108864","1475110911","NL","NLD","NETHERLANDS" -"1475110912","1475112959","DE","DEU","GERMANY" -"1475112960","1475115007","AT","AUT","AUSTRIA" -"1475115008","1475117055","KW","KWT","KUWAIT" -"1475117056","1475119103","GB","GBR","UNITED KINGDOM" -"1475119104","1475121151","BH","BHR","BAHRAIN" -"1475121152","1475121919","GB","GBR","UNITED KINGDOM" -"1475121920","1475122175","US","USA","UNITED STATES" -"1475122176","1475123199","GB","GBR","UNITED KINGDOM" -"1475123200","1475125247","FI","FIN","FINLAND" -"1475125248","1475127295","IT","ITA","ITALY" -"1475127296","1475129343","FI","FIN","FINLAND" -"1475129344","1475131391","BE","BEL","BELGIUM" -"1475131392","1475133439","RU","RUS","RUSSIAN FEDERATION" -"1475133440","1475135487","CZ","CZE","CZECH REPUBLIC" -"1475135488","1475137535","CH","CHE","SWITZERLAND" -"1475137536","1475139583","SE","SWE","SWEDEN" -"1475139584","1475141631","BE","BEL","BELGIUM" -"1475141632","1475143679","FI","FIN","FINLAND" -"1475143680","1475145727","JO","JOR","JORDAN" -"1475145728","1475147775","ES","ESP","SPAIN" -"1475147776","1475149823","GB","GBR","UNITED KINGDOM" -"1475149824","1475151871","NL","NLD","NETHERLANDS" -"1475151872","1475153919","BE","BEL","BELGIUM" -"1475153920","1475155967","GB","GBR","UNITED KINGDOM" -"1475155968","1475158015","NL","NLD","NETHERLANDS" -"1475158016","1475160063","IS","ISL","ICELAND" -"1475160064","1475162111","RU","RUS","RUSSIAN FEDERATION" -"1475162112","1475170303","GB","GBR","UNITED KINGDOM" -"1475170304","1475172351","ES","ESP","SPAIN" -"1475172352","1475174399","DE","DEU","GERMANY" -"1475174400","1475175047","NL","NLD","NETHERLANDS" -"1475175048","1475175055","US","USA","UNITED STATES" -"1475175056","1475176447","NL","NLD","NETHERLANDS" -"1475176448","1475178495","RO","ROM","ROMANIA" -"1475178496","1475180543","RU","RUS","RUSSIAN FEDERATION" -"1475180544","1475184639","DE","DEU","GERMANY" -"1475184640","1475186687","RU","RUS","RUSSIAN FEDERATION" -"1475186688","1475188735","ES","ESP","SPAIN" -"1475188736","1475190783","SE","SWE","SWEDEN" -"1475190784","1475192831","GB","GBR","UNITED KINGDOM" -"1475192832","1475194879","CH","CHE","SWITZERLAND" -"1475194880","1475196927","DE","DEU","GERMANY" -"1475196928","1475197071","FR","FRA","FRANCE" -"1475197072","1475197079","DZ","DZA","ALGERIA" -"1475197080","1475197791","FR","FRA","FRANCE" -"1475197792","1475197807","ES","ESP","SPAIN" -"1475197808","1475198975","FR","FRA","FRANCE" -"1475198976","1475201023","BH","BHR","BAHRAIN" -"1475201024","1475203071","RS","SRB","SERBIA" -"1475203072","1475205119","SE","SWE","SWEDEN" -"1475205120","1475205887","DE","DEU","GERMANY" -"1475205888","1475206143","US","USA","UNITED STATES" -"1475206144","1475206207","JP","JPN","JAPAN" -"1475206208","1475206271","US","USA","UNITED STATES" -"1475206272","1475206383","DE","DEU","GERMANY" -"1475206384","1475206399","NL","NLD","NETHERLANDS" -"1475206400","1475206655","HK","HKG","HONG KONG" -"1475206656","1475206911","DE","DEU","GERMANY" -"1475206912","1475206927","NL","NLD","NETHERLANDS" -"1475206928","1475206943","FR","FRA","FRANCE" -"1475206944","1475206959","PT","PRT","PORTUGAL" -"1475206960","1475206975","GB","GBR","UNITED KINGDOM" -"1475206976","1475206991","IT","ITA","ITALY" -"1475206992","1475207007","SE","SWE","SWEDEN" -"1475207008","1475207023","RU","RUS","RUSSIAN FEDERATION" -"1475207024","1475207039","ES","ESP","SPAIN" -"1475207040","1475207055","AU","AUS","AUSTRALIA" -"1475207056","1475207071","KR","KOR","REPUBLIC OF KOREA" -"1475207072","1475207087","CH","CHE","SWITZERLAND" -"1475207088","1475207103","JP","JPN","JAPAN" -"1475207104","1475207135","KR","KOR","REPUBLIC OF KOREA" -"1475207136","1475207147","DE","DEU","GERMANY" -"1475207148","1475207167","US","USA","UNITED STATES" -"1475207168","1475207263","AE","ARE","UNITED ARAB EMIRATES" -"1475207264","1475207295","US","USA","UNITED STATES" -"1475207296","1475207423","AE","ARE","UNITED ARAB EMIRATES" -"1475207424","1475207679","GR","GRC","GREECE" -"1475207680","1475208191","SA","SAU","SAUDI ARABIA" -"1475208192","1475209215","AE","ARE","UNITED ARAB EMIRATES" -"1475209216","1475211263","UZ","UZB","UZBEKISTAN" -"1475211264","1475213311","DE","DEU","GERMANY" -"1475213312","1475215359","FR","FRA","FRANCE" -"1475215360","1475223551","IT","ITA","ITALY" -"1475223552","1475229695","NO","NOR","NORWAY" -"1475229696","1475229759","SE","SWE","SWEDEN" -"1475229760","1475229951","NO","NOR","NORWAY" -"1475229952","1475229983","SE","SWE","SWEDEN" -"1475229984","1475233791","NO","NOR","NORWAY" -"1475233792","1475234303","GB","GBR","UNITED KINGDOM" -"1475234304","1475234559","IE","IRL","IRELAND" -"1475234560","1475235839","GB","GBR","UNITED KINGDOM" -"1475235840","1475237887","IE","IRL","IRELAND" -"1475237888","1475239935","ES","ESP","SPAIN" -"1475239936","1475241983","RU","RUS","RUSSIAN FEDERATION" -"1475241984","1475244031","MC","MCO","MONACO" -"1475244032","1475245055","DE","DEU","GERMANY" -"1475245056","1475245183","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1475245184","1475245311","DE","DEU","GERMANY" -"1475245312","1475245567","CV","CPV","CAPE VERDE" -"1475245568","1475246078","SA","SAU","SAUDI ARABIA" -"1475246080","1475248127","DE","DEU","GERMANY" -"1475248128","1475250175","JO","JOR","JORDAN" -"1475250176","1475252223","DE","DEU","GERMANY" -"1475252224","1475254271","FR","FRA","FRANCE" -"1475254272","1475256319","UA","UKR","UKRAINE" -"1475256320","1475257120","BE","BEL","BELGIUM" -"1475257121","1475257121","NL","NLD","NETHERLANDS" -"1475257122","1475257136","BE","BEL","BELGIUM" -"1475257137","1475257137","FR","FRA","FRANCE" -"1475257138","1475257275","BE","BEL","BELGIUM" -"1475257276","1475257276","NL","NLD","NETHERLANDS" -"1475257277","1475257277","GB","GBR","UNITED KINGDOM" -"1475257278","1475257278","BE","BEL","BELGIUM" -"1475257279","1475257280","GB","GBR","UNITED KINGDOM" -"1475257281","1475257282","NL","NLD","NETHERLANDS" -"1475257283","1475257286","BE","BEL","BELGIUM" -"1475257287","1475257287","NL","NLD","NETHERLANDS" -"1475257288","1475257290","BE","BEL","BELGIUM" -"1475257291","1475257291","DE","DEU","GERMANY" -"1475257292","1475257295","BE","BEL","BELGIUM" -"1475257296","1475257296","GB","GBR","UNITED KINGDOM" -"1475257297","1475257297","NL","NLD","NETHERLANDS" -"1475257298","1475257298","BE","BEL","BELGIUM" -"1475257299","1475257299","ES","ESP","SPAIN" -"1475257300","1475258175","BE","BEL","BELGIUM" -"1475258176","1475258207","NL","NLD","NETHERLANDS" -"1475258208","1475258239","DE","DEU","GERMANY" -"1475258240","1475258367","BE","BEL","BELGIUM" -"1475258368","1475260415","NL","NLD","NETHERLANDS" -"1475260416","1475262463","FR","FRA","FRANCE" -"1475262464","1475266559","DE","DEU","GERMANY" -"1475266560","1475268607","GB","GBR","UNITED KINGDOM" -"1475268608","1475270655","CS","SCG","SERBIA AND MONTENEGRO" -"1475270656","1475272703","GB","GBR","UNITED KINGDOM" -"1475272704","1475274751","BE","BEL","BELGIUM" -"1475274752","1475276799","RU","RUS","RUSSIAN FEDERATION" -"1475276800","1475278847","ES","ESP","SPAIN" -"1475278848","1475280895","DK","DNK","DENMARK" -"1475280896","1475282943","PL","POL","POLAND" -"1475282944","1475284991","NL","NLD","NETHERLANDS" -"1475284992","1475287039","GB","GBR","UNITED KINGDOM" -"1475287040","1475291135","RU","RUS","RUSSIAN FEDERATION" -"1475291136","1475293183","PL","POL","POLAND" -"1475293184","1475295231","GB","GBR","UNITED KINGDOM" -"1475295232","1475299327","DK","DNK","DENMARK" -"1475299328","1475301375","PL","POL","POLAND" -"1475301376","1475303423","LT","LTU","LITHUANIA" -"1475303424","1475305471","PL","POL","POLAND" -"1475305472","1475307519","NL","NLD","NETHERLANDS" -"1475307520","1475309567","RU","RUS","RUSSIAN FEDERATION" -"1475309568","1475311615","LT","LTU","LITHUANIA" -"1475311616","1475313663","FI","FIN","FINLAND" -"1475313664","1475317759","DE","DEU","GERMANY" -"1475317760","1475319807","RU","RUS","RUSSIAN FEDERATION" -"1475319808","1475321855","BG","BGR","BULGARIA" -"1475321856","1475323903","RO","ROM","ROMANIA" -"1475323904","1475327999","PL","POL","POLAND" -"1475328000","1475330047","DE","DEU","GERMANY" -"1475330048","1475332095","PL","POL","POLAND" -"1475332096","1475334143","LI","LIE","LIECHTENSTEIN" -"1475334144","1475336191","CH","CHE","SWITZERLAND" -"1475336192","1475338239","PL","POL","POLAND" -"1475338240","1475340287","RO","ROM","ROMANIA" -"1475340288","1475342335","GR","GRC","GREECE" -"1475342336","1475344383","PL","POL","POLAND" -"1475344384","1475346431","RO","ROM","ROMANIA" -"1475346432","1475362815","RU","RUS","RUSSIAN FEDERATION" -"1475362816","1475379199","FR","FRA","FRANCE" -"1475379200","1475395583","RU","RUS","RUSSIAN FEDERATION" -"1475395584","1475411967","LU","LUX","LUXEMBOURG" -"1475411968","1475412471","IT","ITA","ITALY" -"1475412472","1475412479","ES","ESP","SPAIN" -"1475412480","1475414927","IT","ITA","ITALY" -"1475414928","1475414935","GB","GBR","UNITED KINGDOM" -"1475414936","1475421239","IT","ITA","ITALY" -"1475421240","1475421247","FR","FRA","FRANCE" -"1475421248","1475428351","IT","ITA","ITALY" -"1475428352","1475444735","SE","SWE","SWEDEN" -"1475444736","1475461119","AM","ARM","ARMENIA" -"1475461120","1475477503","RU","RUS","RUSSIAN FEDERATION" -"1475477504","1475493887","HU","HUN","HUNGARY" -"1475493888","1475510271","RU","RUS","RUSSIAN FEDERATION" -"1475510272","1475543039","GB","GBR","UNITED KINGDOM" -"1475543040","1475559423","DE","DEU","GERMANY" -"1475559424","1475575807","GR","GRC","GREECE" -"1475575808","1475592191","AT","AUT","AUSTRIA" -"1475592192","1475608575","GB","GBR","UNITED KINGDOM" -"1475608576","1475624959","RU","RUS","RUSSIAN FEDERATION" -"1475624960","1475639263","GB","GBR","UNITED KINGDOM" -"1475639264","1475639271","BB","BRB","BARBADOS" -"1475639272","1475641343","GB","GBR","UNITED KINGDOM" -"1475641344","1475657727","UA","UKR","UKRAINE" -"1475657728","1475664263","SK","SVK","SLOVAKIA" -"1475664264","1475664271","UA","UKR","UKRAINE" -"1475664272","1475674111","SK","SVK","SLOVAKIA" -"1475674112","1475690495","DE","DEU","GERMANY" -"1475690496","1475706879","CH","CHE","SWITZERLAND" -"1475706880","1475723263","RU","RUS","RUSSIAN FEDERATION" -"1475723264","1475725311","CY","CYP","CYPRUS" -"1475725312","1475725951","RU","RUS","RUSSIAN FEDERATION" -"1475725952","1475729407","GB","GBR","UNITED KINGDOM" -"1475729408","1475731455","UA","UKR","UKRAINE" -"1475731456","1475739647","GB","GBR","UNITED KINGDOM" -"1475739648","1475756031","BG","BGR","BULGARIA" -"1475756032","1475772415","GB","GBR","UNITED KINGDOM" -"1475772416","1475788799","LV","LVA","LATVIA" -"1475788800","1475805183","PL","POL","POLAND" -"1475805184","1475821567","KZ","KAZ","KAZAKHSTAN" -"1475821568","1475837951","LT","LTU","LITHUANIA" -"1475837952","1475846143","GB","GBR","UNITED KINGDOM" -"1475846144","1475854335","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1475854336","1475862527","AT","AUT","AUSTRIA" -"1475862528","1475866623","IT","ITA","ITALY" -"1475866624","1475868671","GB","GBR","UNITED KINGDOM" -"1475868672","1475870719","BG","BGR","BULGARIA" -"1475870720","1475878911","NO","NOR","NORWAY" -"1475878912","1475887103","IT","ITA","ITALY" -"1475887104","1475895295","PL","POL","POLAND" -"1475895296","1475895551","GB","GBR","UNITED KINGDOM" -"1475895552","1475897343","IE","IRL","IRELAND" -"1475897344","1475899903","GB","GBR","UNITED KINGDOM" -"1475899904","1475901439","IE","IRL","IRELAND" -"1475901440","1475903487","CH","CHE","SWITZERLAND" -"1475903488","1475911679","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1475911680","1475919871","MD","MDA","REPUBLIC OF MOLDOVA" -"1475919872","1475928063","GB","GBR","UNITED KINGDOM" -"1475928064","1475952639","RU","RUS","RUSSIAN FEDERATION" -"1475952640","1475953151","AE","ARE","UNITED ARAB EMIRATES" -"1475953152","1475955199","GB","GBR","UNITED KINGDOM" -"1475955200","1475955839","NG","NGA","NIGERIA" -"1475955840","1475955967","GH","GHA","GHANA" -"1475955968","1475956223","GB","GBR","UNITED KINGDOM" -"1475956224","1475956607","NG","NGA","NIGERIA" -"1475956608","1475956735","GH","GHA","GHANA" -"1475956736","1475957503","GB","GBR","UNITED KINGDOM" -"1475957504","1475957759","IN","IND","INDIA" -"1475957760","1475958015","AF","AFG","AFGHANISTAN" -"1475958016","1475959039","GB","GBR","UNITED KINGDOM" -"1475959040","1475959047","US","USA","UNITED STATES" -"1475959048","1475960831","GB","GBR","UNITED KINGDOM" -"1475960832","1475969023","NL","NLD","NETHERLANDS" -"1475969024","1475977215","CZ","CZE","CZECH REPUBLIC" -"1475977216","1475985407","SE","SWE","SWEDEN" -"1475985408","1476009983","RU","RUS","RUSSIAN FEDERATION" -"1476009984","1476016127","CS","SCG","SERBIA AND MONTENEGRO" -"1476016128","1476016383","RS","SRB","SERBIA" -"1476016384","1476018175","CS","SCG","SERBIA AND MONTENEGRO" -"1476018176","1476026367","IT","ITA","ITALY" -"1476026368","1476034559","BA","BIH","BOSNIA AND HERZEGOVINA" -"1476034560","1476042751","NL","NLD","NETHERLANDS" -"1476042752","1476050943","PL","POL","POLAND" -"1476050944","1476067327","RU","RUS","RUSSIAN FEDERATION" -"1476067328","1476075519","TR","TUR","TURKEY" -"1476075520","1476083711","NL","NLD","NETHERLANDS" -"1476083712","1476116479","RU","RUS","RUSSIAN FEDERATION" -"1476116480","1476124671","SE","SWE","SWEDEN" -"1476124672","1476132863","PL","POL","POLAND" -"1476132864","1476134911","FR","FRA","FRANCE" -"1476134912","1476135167","GB","GBR","UNITED KINGDOM" -"1476135168","1476141055","FR","FRA","FRANCE" -"1476141056","1476149247","GB","GBR","UNITED KINGDOM" -"1476149248","1476157439","NO","NOR","NORWAY" -"1476157440","1476165375","BH","BHR","BAHRAIN" -"1476165376","1476165631","JO","JOR","JORDAN" -"1476165632","1476173823","HR","HRV","CROATIA" -"1476173824","1476182015","BG","BGR","BULGARIA" -"1476182016","1476190207","IE","IRL","IRELAND" -"1476190208","1476198399","BY","BLR","BELARUS" -"1476198400","1476206591","RU","RUS","RUSSIAN FEDERATION" -"1476206592","1476214783","GE","GEO","GEORGIA" -"1476214784","1476222975","SE","SWE","SWEDEN" -"1476222976","1476231167","IT","ITA","ITALY" -"1476231168","1476239359","NL","NLD","NETHERLANDS" -"1476239360","1476247551","DE","DEU","GERMANY" -"1476247552","1476263935","RU","RUS","RUSSIAN FEDERATION" -"1476263936","1476272127","GB","GBR","UNITED KINGDOM" -"1476272128","1476280319","NO","NOR","NORWAY" -"1476280320","1476288511","GB","GBR","UNITED KINGDOM" -"1476288512","1476296703","LU","LUX","LUXEMBOURG" -"1476296704","1476304895","RU","RUS","RUSSIAN FEDERATION" -"1476304896","1476313087","BG","BGR","BULGARIA" -"1476313088","1476315135","FI","FIN","FINLAND" -"1476315136","1476316159","US","USA","UNITED STATES" -"1476316160","1476321279","FI","FIN","FINLAND" -"1476321280","1476329471","MC","MCO","MONACO" -"1476329472","1476337663","RU","RUS","RUSSIAN FEDERATION" -"1476337664","1476345855","NL","NLD","NETHERLANDS" -"1476345856","1476354047","MD","MDA","REPUBLIC OF MOLDOVA" -"1476362240","1476370431","FR","FRA","FRANCE" -"1476370432","1476378623","SE","SWE","SWEDEN" -"1476378624","1476386815","KZ","KAZ","KAZAKHSTAN" -"1476386816","1476395007","RU","RUS","RUSSIAN FEDERATION" -"1476395008","1478492159","ES","ESP","SPAIN" -"1478492160","1480589311","IT","ITA","ITALY" -"1480589312","1481637887","DE","DEU","GERMANY" -"1481637888","1481646079","SE","SWE","SWEDEN" -"1481646080","1481654271","RU","RUS","RUSSIAN FEDERATION" -"1481654272","1481662463","IT","ITA","ITALY" -"1481662464","1481678847","BG","BGR","BULGARIA" -"1481678848","1481679743","SE","SWE","SWEDEN" -"1481679744","1481679775","GB","GBR","UNITED KINGDOM" -"1481679776","1481680639","SE","SWE","SWEDEN" -"1481680640","1481680643","GB","GBR","UNITED KINGDOM" -"1481680644","1481687039","SE","SWE","SWEDEN" -"1481687040","1481691071","DE","DEU","GERMANY" -"1481691072","1481691135","ES","ESP","SPAIN" -"1481691136","1481695231","DE","DEU","GERMANY" -"1481695232","1481703423","SK","SVK","SLOVAKIA" -"1481703424","1481711615","SA","SAU","SAUDI ARABIA" -"1481711616","1481719807","RU","RUS","RUSSIAN FEDERATION" -"1481719808","1481727999","CZ","CZE","CZECH REPUBLIC" -"1481728000","1481736191","IE","IRL","IRELAND" -"1481736192","1481744383","GB","GBR","UNITED KINGDOM" -"1481744384","1481752575","IT","ITA","ITALY" -"1481752576","1481760767","RU","RUS","RUSSIAN FEDERATION" -"1481760768","1481768959","UA","UKR","UKRAINE" -"1481768960","1481777151","GB","GBR","UNITED KINGDOM" -"1481777152","1481785343","BE","BEL","BELGIUM" -"1481785344","1481793535","RU","RUS","RUSSIAN FEDERATION" -"1481793536","1481801727","LI","LIE","LIECHTENSTEIN" -"1481801728","1481809919","GB","GBR","UNITED KINGDOM" -"1481809920","1481818111","RU","RUS","RUSSIAN FEDERATION" -"1481818112","1481826303","ES","ESP","SPAIN" -"1481826304","1481834495","DE","DEU","GERMANY" -"1481834496","1481842687","GL","GRL","GREENLAND" -"1481842688","1481850879","SE","SWE","SWEDEN" -"1481850880","1481859071","DK","DNK","DENMARK" -"1481859072","1481867263","GB","GBR","UNITED KINGDOM" -"1481867264","1481875455","SE","SWE","SWEDEN" -"1481875456","1481883647","CZ","CZE","CZECH REPUBLIC" -"1481883648","1481891839","RU","RUS","RUSSIAN FEDERATION" -"1481891840","1481893119","CZ","CZE","CZECH REPUBLIC" -"1481893120","1481893375","SK","SVK","SLOVAKIA" -"1481893376","1481893631","CZ","CZE","CZECH REPUBLIC" -"1481893632","1481893887","SK","SVK","SLOVAKIA" -"1481893888","1481900031","CZ","CZE","CZECH REPUBLIC" -"1481900032","1481908223","CH","CHE","SWITZERLAND" -"1481908224","1481916415","NO","NOR","NORWAY" -"1481916416","1481924607","ES","ESP","SPAIN" -"1481924608","1481932799","SA","SAU","SAUDI ARABIA" -"1481932800","1481940991","DE","DEU","GERMANY" -"1481940992","1481949183","NO","NOR","NORWAY" -"1481949184","1481957375","RU","RUS","RUSSIAN FEDERATION" -"1481957376","1481965567","SE","SWE","SWEDEN" -"1481965568","1481973759","CH","CHE","SWITZERLAND" -"1481973760","1481981951","FO","FRO","FAROE ISLANDS" -"1481981952","1481984127","NL","NLD","NETHERLANDS" -"1481984128","1481984255","PA","PAN","PANAMA" -"1481984256","1481984383","NL","NLD","NETHERLANDS" -"1481984384","1481984511","GI","GIB","GIBRALTAR" -"1481984512","1481984639","CY","CYP","CYPRUS" -"1481984640","1481985023","NL","NLD","NETHERLANDS" -"1481985024","1481985279","MT","MLT","MALTA" -"1481985280","1481987967","NL","NLD","NETHERLANDS" -"1481987968","1481988031","PA","PAN","PANAMA" -"1481988032","1481988095","NL","NLD","NETHERLANDS" -"1481988096","1481988159","GI","GIB","GIBRALTAR" -"1481988160","1481988167","RU","RUS","RUSSIAN FEDERATION" -"1481988168","1481988319","NL","NLD","NETHERLANDS" -"1481988320","1481988335","BZ","BLZ","BELIZE" -"1481988336","1481988351","NL","NLD","NETHERLANDS" -"1481988352","1481988607","GB","GBR","UNITED KINGDOM" -"1481988608","1481990143","NL","NLD","NETHERLANDS" -"1481990144","1481998335","MK","MKD","THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA" -"1481998336","1482006527","FI","FIN","FINLAND" -"1482006528","1482022911","RU","RUS","RUSSIAN FEDERATION" -"1482022912","1482031103","SA","SAU","SAUDI ARABIA" -"1482031104","1482039295","SY","SYR","SYRIAN ARAB REPUBLIC" -"1482039296","1482047487","SE","SWE","SWEDEN" -"1482047488","1482055679","RU","RUS","RUSSIAN FEDERATION" -"1482055680","1482063871","CZ","CZE","CZECH REPUBLIC" -"1482063872","1482072063","FI","FIN","FINLAND" -"1482072064","1482076159","IT","ITA","ITALY" -"1482076160","1482076223","CH","CHE","SWITZERLAND" -"1482076224","1482076383","IT","ITA","ITALY" -"1482076384","1482076415","MT","MLT","MALTA" -"1482076416","1482080255","IT","ITA","ITALY" -"1482080256","1482088447","RU","RUS","RUSSIAN FEDERATION" -"1482088448","1482096639","FR","FRA","FRANCE" -"1482096640","1482104831","BG","BGR","BULGARIA" -"1482104832","1482113023","NO","NOR","NORWAY" -"1482113024","1482121215","RU","RUS","RUSSIAN FEDERATION" -"1482121216","1482127123","IT","ITA","ITALY" -"1482127124","1482127127","TR","TUR","TURKEY" -"1482127128","1482129407","IT","ITA","ITALY" -"1482129408","1482137599","ES","ESP","SPAIN" -"1482137600","1482145791","IE","IRL","IRELAND" -"1482145792","1482153983","ES","ESP","SPAIN" -"1482153984","1482162175","HU","HUN","HUNGARY" -"1482162176","1482686463","NO","NOR","NORWAY" -"1482686464","1482948607","GB","GBR","UNITED KINGDOM" -"1482948608","1483210751","CZ","CZE","CZECH REPUBLIC" -"1483210752","1483735039","GB","GBR","UNITED KINGDOM" -"1483735040","1483997183","FI","FIN","FINLAND" -"1483997184","1484038223","AT","AUT","AUSTRIA" -"1484038224","1484038227","SA","SAU","SAUDI ARABIA" -"1484038228","1484038243","AT","AUT","AUSTRIA" -"1484038244","1484038247","AE","ARE","UNITED ARAB EMIRATES" -"1484038248","1484038251","AT","AUT","AUSTRIA" -"1484038252","1484038255","IQ","IRQ","IRAQ" -"1484038256","1484038391","AT","AUT","AUSTRIA" -"1484038392","1484038399","IQ","IRQ","IRAQ" -"1484038400","1484128255","AT","AUT","AUSTRIA" -"1484128256","1484259327","LT","LTU","LITHUANIA" -"1484259328","1484783615","FR","FRA","FRANCE" -"1484783616","1484849151","DE","DEU","GERMANY" -"1484849152","1484914687","SE","SWE","SWEDEN" -"1484914688","1484980223","DE","DEU","GERMANY" -"1484980224","1485045759","SE","SWE","SWEDEN" -"1485045760","1485111295","HU","HUN","HUNGARY" -"1485111296","1485242367","DE","DEU","GERMANY" -"1485242368","1485246463","RU","RUS","RUSSIAN FEDERATION" -"1485246464","1485250559","UA","UKR","UKRAINE" -"1485250560","1485254655","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1485254656","1485258751","RU","RUS","RUSSIAN FEDERATION" -"1485258752","1485266943","UA","UKR","UKRAINE" -"1485266944","1485271039","RO","ROM","ROMANIA" -"1485271040","1485275135","UA","UKR","UKRAINE" -"1485275136","1485283327","LV","LVA","LATVIA" -"1485283328","1485291519","PL","POL","POLAND" -"1485291520","1485307903","UA","UKR","UKRAINE" -"1485307904","1485832191","FR","FRA","FRANCE" -"1485832192","1485963263","GB","GBR","UNITED KINGDOM" -"1485963264","1486028799","CZ","CZE","CZECH REPUBLIC" -"1486028800","1486061567","BE","BEL","BELGIUM" -"1486061568","1486094335","RU","RUS","RUSSIAN FEDERATION" -"1486094336","1486127103","ES","ESP","SPAIN" -"1486127104","1486159871","FI","FIN","FINLAND" -"1486159872","1486192639","IS","ISL","ICELAND" -"1486192640","1486211687","IT","ITA","ITALY" -"1486211688","1486211695","GB","GBR","UNITED KINGDOM" -"1486211696","1486225407","IT","ITA","ITALY" -"1486225408","1486258175","DE","DEU","GERMANY" -"1486258176","1486290943","CS","SCG","SERBIA AND MONTENEGRO" -"1486290944","1486290959","IE","IRL","IRELAND" -"1486290960","1486291071","GB","GBR","UNITED KINGDOM" -"1486291072","1486291103","IE","IRL","IRELAND" -"1486291104","1486291199","GB","GBR","UNITED KINGDOM" -"1486291200","1486291215","IE","IRL","IRELAND" -"1486291216","1486291455","GB","GBR","UNITED KINGDOM" -"1486291456","1486291487","IE","IRL","IRELAND" -"1486291488","1486292991","GB","GBR","UNITED KINGDOM" -"1486292992","1486295039","RU","RUS","RUSSIAN FEDERATION" -"1486295040","1486297087","ES","ESP","SPAIN" -"1486297088","1486299135","IE","IRL","IRELAND" -"1486299136","1486301183","NL","NLD","NETHERLANDS" -"1486301184","1486301951","DK","DNK","DENMARK" -"1486301952","1486302719","SE","SWE","SWEDEN" -"1486302720","1486302863","DK","DNK","DENMARK" -"1486302864","1486302879","SE","SWE","SWEDEN" -"1486302880","1486303231","DK","DNK","DENMARK" -"1486303232","1486305023","IS","ISL","ICELAND" -"1486305024","1486305279","GB","GBR","UNITED KINGDOM" -"1486305280","1486307327","NO","NOR","NORWAY" -"1486307328","1486309375","DE","DEU","GERMANY" -"1486309376","1486311423","AT","AUT","AUSTRIA" -"1486311424","1486313471","IE","IRL","IRELAND" -"1486313472","1486315519","RU","RUS","RUSSIAN FEDERATION" -"1486315520","1486317567","HU","HUN","HUNGARY" -"1486317568","1486320383","RU","RUS","RUSSIAN FEDERATION" -"1486320384","1486320639","US","USA","UNITED STATES" -"1486320640","1486321663","RU","RUS","RUSSIAN FEDERATION" -"1486321824","1486321855","US","USA","UNITED STATES" -"1486321856","1486321887","NL","NLD","NETHERLANDS" -"1486321888","1486321919","US","USA","UNITED STATES" -"1486323200","1486323215","US","USA","UNITED STATES" -"1486323216","1486323231","NL","NLD","NETHERLANDS" -"1486323232","1486323239","GB","GBR","UNITED KINGDOM" -"1486323712","1486325759","GB","GBR","UNITED KINGDOM" -"1486325760","1486327807","SA","SAU","SAUDI ARABIA" -"1486327808","1486329855","CH","CHE","SWITZERLAND" -"1486329856","1486331903","FR","FRA","FRANCE" -"1486331904","1486333951","NO","NOR","NORWAY" -"1486333952","1486335999","SE","SWE","SWEDEN" -"1486336000","1486338047","KZ","KAZ","KAZAKHSTAN" -"1486338048","1486340095","RU","RUS","RUSSIAN FEDERATION" -"1486340096","1486342143","AZ","AZE","AZERBAIJAN" -"1486342144","1486344191","RU","RUS","RUSSIAN FEDERATION" -"1486346240","1486348287","GB","GBR","UNITED KINGDOM" -"1486348288","1486349311","NL","NLD","NETHERLANDS" -"1486349312","1486350335","US","USA","UNITED STATES" -"1486350336","1486352383","TR","TUR","TURKEY" -"1486352384","1486354431","BE","BEL","BELGIUM" -"1486354432","1486356479","RU","RUS","RUSSIAN FEDERATION" -"1486356480","1486487551","DE","DEU","GERMANY" -"1486487552","1486618623","UA","UKR","UKRAINE" -"1486618624","1486684159","PL","POL","POLAND" -"1486684160","1486749695","PT","PRT","PORTUGAL" -"1486749696","1486815231","RO","ROM","ROMANIA" -"1486815232","1486880767","NL","NLD","NETHERLANDS" -"1486880768","1488977919","FR","FRA","FRANCE" -"1488977920","1489240063","FI","FIN","FINLAND" -"1489240064","1489305599","EE","EST","ESTONIA" -"1489305600","1489338367","GR","GRC","GREECE" -"1489338368","1489371135","BE","BEL","BELGIUM" -"1489371136","1489402239","DE","DEU","GERMANY" -"1489402240","1489402367","TR","TUR","TURKEY" -"1489402368","1489436671","DE","DEU","GERMANY" -"1489436672","1489502207","PL","POL","POLAND" -"1489502208","1489534975","SI","SVN","SLOVENIA" -"1489534976","1489567743","RU","RUS","RUSSIAN FEDERATION" -"1489567744","1489600511","BH","BHR","BAHRAIN" -"1489600512","1489633279","RU","RUS","RUSSIAN FEDERATION" -"1489633280","1489635327","IT","ITA","ITALY" -"1489635328","1489635838","GB","GBR","UNITED KINGDOM" -"1489635839","1489636863","IT","ITA","ITALY" -"1489636864","1489637119","FR","FRA","FRANCE" -"1489637120","1489637887","IT","ITA","ITALY" -"1489637888","1489638399","GB","GBR","UNITED KINGDOM" -"1489638400","1489638655","IT","ITA","ITALY" -"1489638656","1489638911","FR","FRA","FRANCE" -"1489638912","1489640703","IT","ITA","ITALY" -"1489640704","1489640959","FR","FRA","FRANCE" -"1489640960","1489642495","IT","ITA","ITALY" -"1489642496","1489642751","FR","FRA","FRANCE" -"1489642752","1489644543","IT","ITA","ITALY" -"1489644544","1489645055","GB","GBR","UNITED KINGDOM" -"1489645056","1489645567","IT","ITA","ITALY" -"1489645568","1489646335","GB","GBR","UNITED KINGDOM" -"1489646336","1489646591","IT","ITA","ITALY" -"1489646592","1489646847","GB","GBR","UNITED KINGDOM" -"1489646848","1489647103","IT","ITA","ITALY" -"1489647104","1489647359","GB","GBR","UNITED KINGDOM" -"1489647360","1489648639","IT","ITA","ITALY" -"1489648640","1489649407","GB","GBR","UNITED KINGDOM" -"1489649408","1489650687","FR","FRA","FRANCE" -"1489650688","1489661951","IT","ITA","ITALY" -"1489661952","1489662719","GB","GBR","UNITED KINGDOM" -"1489662720","1489662975","ZA","ZAF","SOUTH AFRICA" -"1489662976","1489663487","FR","FRA","FRANCE" -"1489663488","1489663999","ES","ESP","SPAIN" -"1489664000","1489664511","LY","LBY","LIBYAN ARAB JAMAHIRIYA" -"1489664512","1489665023","IT","ITA","ITALY" -"1489665024","1489665279","ZA","ZAF","SOUTH AFRICA" -"1489665280","1489666047","IT","ITA","ITALY" -"1489666048","1489698815","GB","GBR","UNITED KINGDOM" -"1489698816","1489731583","MT","MLT","MALTA" -"1489731584","1489764351","BG","BGR","BULGARIA" -"1489764352","1489797119","RU","RUS","RUSSIAN FEDERATION" -"1489797120","1489829887","KZ","KAZ","KAZAKHSTAN" -"1489829888","1489862655","DE","DEU","GERMANY" -"1489862656","1489928191","RU","RUS","RUSSIAN FEDERATION" -"1489928192","1489960959","SE","SWE","SWEDEN" -"1489960960","1489993727","HR","HRV","CROATIA" -"1489993728","1490026495","LU","LUX","LUXEMBOURG" -"1490026496","1490028543","US","USA","UNITED STATES" -"1490028544","1490029055","UA","UKR","UKRAINE" -"1490029056","1490041855","NL","NLD","NETHERLANDS" -"1490041856","1490049879","CZ","CZE","CZECH REPUBLIC" -"1490049880","1490049887","AT","AUT","AUSTRIA" -"1490049888","1490049919","CZ","CZE","CZECH REPUBLIC" -"1490049920","1490049983","PL","POL","POLAND" -"1490049984","1490053375","CZ","CZE","CZECH REPUBLIC" -"1490053376","1490054143","PL","POL","POLAND" -"1490054144","1490059263","CZ","CZE","CZECH REPUBLIC" -"1490059264","1490075647","DE","DEU","GERMANY" -"1490075648","1490092031","GB","GBR","UNITED KINGDOM" -"1490092032","1490108415","DE","DEU","GERMANY" -"1490108416","1490124799","MC","MCO","MONACO" -"1490124800","1490157567","HU","HUN","HUNGARY" -"1490157568","1490173951","RU","RUS","RUSSIAN FEDERATION" -"1490173952","1490190335","PT","PRT","PORTUGAL" -"1490190336","1490196479","GB","GBR","UNITED KINGDOM" -"1490196480","1490196511","FR","FRA","FRANCE" -"1490196512","1490196527","DE","DEU","GERMANY" -"1490196528","1490196543","RS","SRB","SERBIA" -"1490196544","1490196735","AL","ALB","ALBANIA" -"1490196736","1490196863","CZ","CZE","CZECH REPUBLIC" -"1490196864","1490196895","ES","ESP","SPAIN" -"1490196896","1490196927","HU","HUN","HUNGARY" -"1490196928","1490196959","IT","ITA","ITALY" -"1490196960","1490196991","CZ","CZE","CZECH REPUBLIC" -"1490196992","1490197247","IE","IRL","IRELAND" -"1490197248","1490206719","GB","GBR","UNITED KINGDOM" -"1490206720","1490223103","GE","GEO","GEORGIA" -"1490223104","1490226047","GB","GBR","UNITED KINGDOM" -"1490226048","1490226175","FR","FRA","FRANCE" -"1490226176","1490230719","GB","GBR","UNITED KINGDOM" -"1490230720","1490230751","FR","FRA","FRANCE" -"1490230752","1490235263","GB","GBR","UNITED KINGDOM" -"1490235264","1490235391","FR","FRA","FRANCE" -"1490235392","1490255871","GB","GBR","UNITED KINGDOM" -"1490255872","1490272255","NL","NLD","NETHERLANDS" -"1490272256","1490288639","GB","GBR","UNITED KINGDOM" -"1490288640","1490305023","SK","SVK","SLOVAKIA" -"1490305024","1490321407","DK","DNK","DENMARK" -"1490321408","1490337791","GB","GBR","UNITED KINGDOM" -"1490337792","1490354175","RU","RUS","RUSSIAN FEDERATION" -"1490354176","1490386943","SA","SAU","SAUDI ARABIA" -"1490386944","1490403327","IT","ITA","ITALY" -"1490403328","1490419711","BG","BGR","BULGARIA" -"1490419712","1490436095","DE","DEU","GERMANY" -"1490436096","1490452479","UA","UKR","UKRAINE" -"1490452480","1490468863","PT","PRT","PORTUGAL" -"1490468864","1490472447","GB","GBR","UNITED KINGDOM" -"1490472448","1490472703","US","USA","UNITED STATES" -"1490472704","1490473983","GB","GBR","UNITED KINGDOM" -"1490473984","1490474239","US","USA","UNITED STATES" -"1490474240","1490484223","GB","GBR","UNITED KINGDOM" -"1490484224","1490484479","US","USA","UNITED STATES" -"1490484480","1490501631","GB","GBR","UNITED KINGDOM" -"1490501632","1490518015","DE","DEU","GERMANY" -"1490518016","1490534399","RU","RUS","RUSSIAN FEDERATION" -"1490534400","1490550783","DE","DEU","GERMANY" -"1490550784","1490616319","LT","LTU","LITHUANIA" -"1490616320","1490681855","DE","DEU","GERMANY" -"1490681856","1490747391","GR","GRC","GREECE" -"1490747392","1490812927","FR","FRA","FRANCE" -"1490812928","1490878463","PL","POL","POLAND" -"1490878464","1490879487","DE","DEU","GERMANY" -"1490879488","1490880511","US","USA","UNITED STATES" -"1490880512","1490881535","FR","FRA","FRANCE" -"1490882560","1490883583","US","USA","UNITED STATES" -"1490885632","1490886655","US","USA","UNITED STATES" -"1490904064","1490905087","US","USA","UNITED STATES" -"1490909184","1490910207","US","USA","UNITED STATES" -"1490913280","1490915327","US","USA","UNITED STATES" -"1490915328","1490917375","IT","ITA","ITALY" -"1490917376","1490919423","IL","ISR","ISRAEL" -"1490927616","1490929663","FR","FRA","FRANCE" -"1490931712","1490933759","DE","DEU","GERMANY" -"1490934528","1490934783","IL","ISR","ISRAEL" -"1490944000","1491075071","LT","LTU","LITHUANIA" -"1491075072","1493172223","TR","TUR","TURKEY" -"1493172224","1493303295","DE","DEU","GERMANY" -"1493303296","1493434367","FR","FRA","FRANCE" -"1493434368","1493565439","SA","SAU","SAUDI ARABIA" -"1493565440","1493696511","ES","ESP","SPAIN" -"1493696512","1493958655","NO","NOR","NORWAY" -"1493958656","1494220799","DE","DEU","GERMANY" -"1494220800","1494228991","FR","FRA","FRANCE" -"1494228992","1494237183","RU","RUS","RUSSIAN FEDERATION" -"1494237184","1494245375","IE","IRL","IRELAND" -"1494245376","1494253567","RU","RUS","RUSSIAN FEDERATION" -"1494253568","1494261759","DE","DEU","GERMANY" -"1494261760","1494269951","GB","GBR","UNITED KINGDOM" -"1494269952","1494278143","AT","AUT","AUSTRIA" -"1494278144","1494286335","GB","GBR","UNITED KINGDOM" -"1494286336","1494294527","HR","HRV","CROATIA" -"1494294528","1494302719","RU","RUS","RUSSIAN FEDERATION" -"1494302720","1494310911","FI","FIN","FINLAND" -"1494310912","1494319103","GB","GBR","UNITED KINGDOM" -"1494319104","1494327295","MT","MLT","MALTA" -"1494327296","1494335487","IT","ITA","ITALY" -"1494335488","1494343679","ES","ESP","SPAIN" -"1494343680","1494351871","PL","POL","POLAND" -"1494351872","1494360063","RO","ROM","ROMANIA" -"1494360064","1494368255","HR","HRV","CROATIA" -"1494368256","1494376447","IE","IRL","IRELAND" -"1494376448","1494384639","SE","SWE","SWEDEN" -"1494384640","1494392831","RU","RUS","RUSSIAN FEDERATION" -"1494392832","1494393087","US","USA","UNITED STATES" -"1494393088","1494398975","NL","NLD","NETHERLANDS" -"1494398976","1494399743","US","USA","UNITED STATES" -"1494399744","1494401023","NL","NLD","NETHERLANDS" -"1494401024","1494409215","LV","LVA","LATVIA" -"1494409216","1494417407","FI","FIN","FINLAND" -"1494417408","1494425599","TR","TUR","TURKEY" -"1494425600","1494433791","RU","RUS","RUSSIAN FEDERATION" -"1494433792","1494441983","IE","IRL","IRELAND" -"1494441984","1494450175","UA","UKR","UKRAINE" -"1494450176","1494458367","DK","DNK","DENMARK" -"1494458368","1494474751","RU","RUS","RUSSIAN FEDERATION" -"1494474752","1494477471","DE","DEU","GERMANY" -"1494477472","1494477503","IL","ISR","ISRAEL" -"1494477504","1494482943","DE","DEU","GERMANY" -"1494482944","1494499327","RU","RUS","RUSSIAN FEDERATION" -"1494499328","1494507519","NL","NLD","NETHERLANDS" -"1494507520","1494523903","RU","RUS","RUSSIAN FEDERATION" -"1494523904","1494532095","NL","NLD","NETHERLANDS" -"1494532096","1494540287","GB","GBR","UNITED KINGDOM" -"1494540288","1494548479","NO","NOR","NORWAY" -"1494548480","1494556671","GB","GBR","UNITED KINGDOM" -"1494556672","1494564863","DE","DEU","GERMANY" -"1494564864","1494573055","UA","UKR","UKRAINE" -"1494573056","1494581247","RO","ROM","ROMANIA" -"1494581248","1494589439","RU","RUS","RUSSIAN FEDERATION" -"1494589440","1494589455","NL","NLD","NETHERLANDS" -"1494589456","1494589471","US","USA","UNITED STATES" -"1494589472","1494589535","NL","NLD","NETHERLANDS" -"1494589536","1494589695","US","USA","UNITED STATES" -"1494589696","1494589723","IQ","IRQ","IRAQ" -"1494589724","1494597631","US","USA","UNITED STATES" -"1494605824","1494614015","GB","GBR","UNITED KINGDOM" -"1494679552","1494687743","RU","RUS","RUSSIAN FEDERATION" -"1494745088","1494810623","CZ","CZE","CZECH REPUBLIC" -"1494810624","1494843391","BG","BGR","BULGARIA" -"1494843392","1494876159","PL","POL","POLAND" -"1494876160","1494908927","AT","AUT","AUSTRIA" -"1494908928","1494941695","PT","PRT","PORTUGAL" -"1494941696","1494974463","FI","FIN","FINLAND" -"1494974464","1495007231","DE","DEU","GERMANY" -"1495007232","1495039999","MD","MDA","REPUBLIC OF MOLDOVA" -"1495040000","1495042047","KZ","KAZ","KAZAKHSTAN" -"1495042048","1495044095","DE","DEU","GERMANY" -"1495044096","1495046143","FR","FRA","FRANCE" -"1495046144","1495048191","BH","BHR","BAHRAIN" -"1495048192","1495050239","RU","RUS","RUSSIAN FEDERATION" -"1495050240","1495052287","GB","GBR","UNITED KINGDOM" -"1495052288","1495054335","IE","IRL","IRELAND" -"1495054336","1495056383","GB","GBR","UNITED KINGDOM" -"1495056384","1495058431","RU","RUS","RUSSIAN FEDERATION" -"1495058432","1495060479","UA","UKR","UKRAINE" -"1495060480","1495062527","GB","GBR","UNITED KINGDOM" -"1495062528","1495064575","JO","JOR","JORDAN" -"1495064576","1495066623","PL","POL","POLAND" -"1495066624","1495068671","GB","GBR","UNITED KINGDOM" -"1495068672","1495070719","DE","DEU","GERMANY" -"1495070720","1495072767","RU","RUS","RUSSIAN FEDERATION" -"1495072768","1495105535","CZ","CZE","CZECH REPUBLIC" -"1495105536","1495138303","ES","ESP","SPAIN" -"1495138304","1495139327","FR","FRA","FRANCE" -"1495139584","1495139591","GB","GBR","UNITED KINGDOM" -"1495139712","1495139839","GB","GBR","UNITED KINGDOM" -"1495139840","1495139871","ES","ESP","SPAIN" -"1495139872","1495139903","FR","FRA","FRANCE" -"1495140352","1495142399","FR","FRA","FRANCE" -"1495146496","1495150847","FR","FRA","FRANCE" -"1495150848","1495151103","GB","GBR","UNITED KINGDOM" -"1495151104","1495151359","NL","NLD","NETHERLANDS" -"1495151360","1495154687","FR","FRA","FRANCE" -"1495162368","1495162879","US","USA","UNITED STATES" -"1495162880","1495163903","FR","FRA","FRANCE" -"1495164416","1495164671","FR","FRA","FRANCE" -"1495164928","1495165055","FR","FRA","FRANCE" -"1495165184","1495165199","FR","FRA","FRANCE" -"1495165208","1495165215","ES","ESP","SPAIN" -"1495165440","1495168383","FR","FRA","FRANCE" -"1495168512","1495168767","FR","FRA","FRANCE" -"1495168768","1495169023","GB","GBR","UNITED KINGDOM" -"1495169024","1495169279","FR","FRA","FRANCE" -"1495169536","1495169791","FR","FRA","FRANCE" -"1495170048","1495170079","FR","FRA","FRANCE" -"1495170160","1495170175","FR","FRA","FRANCE" -"1495170304","1495170335","FR","FRA","FRANCE" -"1495170560","1495170815","FR","FRA","FRANCE" -"1495170816","1495171071","GB","GBR","UNITED KINGDOM" -"1495171072","1495174399","NL","NLD","NETHERLANDS" -"1495174400","1495174655","US","USA","UNITED STATES" -"1495174656","1495203839","NL","NLD","NETHERLANDS" -"1495203840","1495205887","DE","DEU","GERMANY" -"1495205888","1495207935","CZ","CZE","CZECH REPUBLIC" -"1495207936","1495209983","RU","RUS","RUSSIAN FEDERATION" -"1495209984","1495212031","KZ","KAZ","KAZAKHSTAN" -"1495212032","1495214079","DE","DEU","GERMANY" -"1495214080","1495216127","CZ","CZE","CZECH REPUBLIC" -"1495216128","1495218175","GB","GBR","UNITED KINGDOM" -"1495218176","1495220223","IT","ITA","ITALY" -"1495220224","1495222271","PL","POL","POLAND" -"1495222272","1495224319","IT","ITA","ITALY" -"1495224320","1495228415","RU","RUS","RUSSIAN FEDERATION" -"1495228416","1495230463","NL","NLD","NETHERLANDS" -"1495230464","1495234559","RU","RUS","RUSSIAN FEDERATION" -"1495234560","1495236607","CH","CHE","SWITZERLAND" -"1495236608","1495237711","AT","AUT","AUSTRIA" -"1495237712","1495237727","NL","NLD","NETHERLANDS" -"1495237728","1495238655","AT","AUT","AUSTRIA" -"1495238656","1495240703","DE","DEU","GERMANY" -"1495240704","1495240751","FR","FRA","FRANCE" -"1495240752","1495240759","BE","BEL","BELGIUM" -"1495240760","1495240767","CH","CHE","SWITZERLAND" -"1495240768","1495242751","FR","FRA","FRANCE" -"1495242752","1495244799","MK","MKD","THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA" -"1495244800","1495246847","CZ","CZE","CZECH REPUBLIC" -"1495246848","1495248895","IE","IRL","IRELAND" -"1495248896","1495250943","GR","GRC","GREECE" -"1495250944","1495252991","RU","RUS","RUSSIAN FEDERATION" -"1495252992","1495255039","BH","BHR","BAHRAIN" -"1495255040","1495257087","IT","ITA","ITALY" -"1495257088","1495259135","GB","GBR","UNITED KINGDOM" -"1495259136","1495261183","BE","BEL","BELGIUM" -"1495261184","1495263231","PT","PRT","PORTUGAL" -"1495263232","1495265279","GB","GBR","UNITED KINGDOM" -"1495265280","1495265791","DE","DEU","GERMANY" -"1495265792","1495267327","RU","RUS","RUSSIAN FEDERATION" -"1495267328","1495269375","SE","SWE","SWEDEN" -"1495269376","1495326719","RO","ROM","ROMANIA" -"1495326720","1495330815","MD","MDA","REPUBLIC OF MOLDOVA" -"1495330816","1495334911","RO","ROM","ROMANIA" -"1495334912","1495335935","MD","MDA","REPUBLIC OF MOLDOVA" -"1495335936","1495399935","RO","ROM","ROMANIA" -"1495399936","1495400191","MD","MDA","REPUBLIC OF MOLDOVA" -"1495400192","1495623679","RO","ROM","ROMANIA" -"1495623680","1495623935","MD","MDA","REPUBLIC OF MOLDOVA" -"1495623936","1495647743","RO","ROM","ROMANIA" -"1495647744","1495648255","MD","MDA","REPUBLIC OF MOLDOVA" -"1495648256","1495752703","RO","ROM","ROMANIA" -"1495752704","1495754751","ES","ESP","SPAIN" -"1495754752","1495801855","RO","ROM","ROMANIA" -"1495801856","1495802879","GB","GBR","UNITED KINGDOM" -"1495802880","1495875583","RO","ROM","ROMANIA" -"1495875584","1495891967","MD","MDA","REPUBLIC OF MOLDOVA" -"1495891968","1495927295","RO","ROM","ROMANIA" -"1495927296","1495927551","AE","ARE","UNITED ARAB EMIRATES" -"1495927552","1495937023","RO","ROM","ROMANIA" -"1495937024","1495937535","ES","ESP","SPAIN" -"1495937536","1496078335","RO","ROM","ROMANIA" -"1496078336","1496079359","MD","MDA","REPUBLIC OF MOLDOVA" -"1496079360","1496121343","RO","ROM","ROMANIA" -"1496121344","1496122367","MD","MDA","REPUBLIC OF MOLDOVA" -"1496122368","1496178943","RO","ROM","ROMANIA" -"1496178944","1496179199","AE","ARE","UNITED ARAB EMIRATES" -"1496179200","1496317951","RO","ROM","ROMANIA" -"1496317952","1497366527","DE","DEU","GERMANY" -"1497366528","1498415103","PL","POL","POLAND" -"1498415104","1499463679","FR","FRA","FRANCE" -"1499463680","1499594751","IT","ITA","ITALY" -"1499594752","1499725823","NL","NLD","NETHERLANDS" -"1499725824","1499856895","IE","IRL","IRELAND" -"1499856896","1499987967","CZ","CZE","CZECH REPUBLIC" -"1499987968","1499996159","AT","AUT","AUSTRIA" -"1499996160","1500004351","GB","GBR","UNITED KINGDOM" -"1500004352","1500020735","RU","RUS","RUSSIAN FEDERATION" -"1500020736","1500028927","IS","ISL","ICELAND" -"1500028928","1500037119","NL","NLD","NETHERLANDS" -"1500037120","1500045311","DK","DNK","DENMARK" -"1500045312","1500061695","GB","GBR","UNITED KINGDOM" -"1500061696","1500069887","NO","NOR","NORWAY" -"1500069888","1500078079","IT","ITA","ITALY" -"1500078080","1500086271","GB","GBR","UNITED KINGDOM" -"1500086272","1500094463","RU","RUS","RUSSIAN FEDERATION" -"1500094464","1500102655","AT","AUT","AUSTRIA" -"1500102656","1500104063","NL","NLD","NETHERLANDS" -"1500104064","1500104071","DE","DEU","GERMANY" -"1500104072","1500110847","NL","NLD","NETHERLANDS" -"1500110848","1500119039","UA","UKR","UKRAINE" -"1500119040","1500127231","TR","TUR","TURKEY" -"1500135424","1500135555","DE","DEU","GERMANY" -"1500135556","1500135559","CH","CHE","SWITZERLAND" -"1500135560","1500140560","DE","DEU","GERMANY" -"1500140561","1500140564","AT","AUT","AUSTRIA" -"1500140565","1500140568","CH","CHE","SWITZERLAND" -"1500140569","1500143615","DE","DEU","GERMANY" -"1500143616","1500151807","BG","BGR","BULGARIA" -"1500151808","1500153855","GB","GBR","UNITED KINGDOM" -"1500153856","1500155903","IE","IRL","IRELAND" -"1500155904","1500157951","GB","GBR","UNITED KINGDOM" -"1500157952","1500159999","DE","DEU","GERMANY" -"1500160000","1500162047","NL","NLD","NETHERLANDS" -"1500162048","1500164095","RU","RUS","RUSSIAN FEDERATION" -"1500164096","1500166143","GB","GBR","UNITED KINGDOM" -"1500166144","1500168191","FR","FRA","FRANCE" -"1500168192","1500170239","RU","RUS","RUSSIAN FEDERATION" -"1500170240","1500172287","LU","LUX","LUXEMBOURG" -"1500172288","1500174335","AT","AUT","AUSTRIA" -"1500174336","1500176383","DE","DEU","GERMANY" -"1500176384","1500178431","GB","GBR","UNITED KINGDOM" -"1500178432","1500180479","KZ","KAZ","KAZAKHSTAN" -"1500180480","1500182527","BE","BEL","BELGIUM" -"1500182528","1500184575","RU","RUS","RUSSIAN FEDERATION" -"1500184576","1500186623","GB","GBR","UNITED KINGDOM" -"1500186624","1500188671","KW","KWT","KUWAIT" -"1500188672","1500190719","GB","GBR","UNITED KINGDOM" -"1500190720","1500194815","RU","RUS","RUSSIAN FEDERATION" -"1500194816","1500196863","GB","GBR","UNITED KINGDOM" -"1500196864","1500198911","ES","ESP","SPAIN" -"1500198912","1500200959","GB","GBR","UNITED KINGDOM" -"1500200960","1500203007","DE","DEU","GERMANY" -"1500203008","1500205055","GB","GBR","UNITED KINGDOM" -"1500205056","1500207103","RU","RUS","RUSSIAN FEDERATION" -"1500207104","1500209151","IT","ITA","ITALY" -"1500209152","1500211199","KZ","KAZ","KAZAKHSTAN" -"1500211200","1500211711","RU","RUS","RUSSIAN FEDERATION" -"1500211712","1500212223","JO","JOR","JORDAN" -"1500212224","1500217343","RU","RUS","RUSSIAN FEDERATION" -"1500217344","1500217599","CZ","CZE","CZECH REPUBLIC" -"1500217600","1500218111","DE","DEU","GERMANY" -"1500218112","1500218367","CZ","CZE","CZECH REPUBLIC" -"1500218368","1500219391","DE","DEU","GERMANY" -"1500219392","1500221439","FR","FRA","FRANCE" -"1500221440","1500223487","SK","SVK","SLOVAKIA" -"1500223488","1500225535","PL","POL","POLAND" -"1500225536","1500227583","DE","DEU","GERMANY" -"1500227584","1500229631","FR","FRA","FRANCE" -"1500229632","1500231679","ES","ESP","SPAIN" -"1500231680","1500233727","DE","DEU","GERMANY" -"1500233728","1500237823","RU","RUS","RUSSIAN FEDERATION" -"1500237824","1500241919","SE","SWE","SWEDEN" -"1500241920","1500242483","TR","TUR","TURKEY" -"1500242484","1500242485","US","USA","UNITED STATES" -"1500242486","1500242486","TR","TUR","TURKEY" -"1500242487","1500242488","US","USA","UNITED STATES" -"1500242489","1500242801","TR","TUR","TURKEY" -"1500242802","1500242814","US","USA","UNITED STATES" -"1500242815","1500243008","TR","TUR","TURKEY" -"1500243009","1500243038","GB","GBR","UNITED KINGDOM" -"1500243039","1500243967","TR","TUR","TURKEY" -"1500243968","1500246015","GB","GBR","UNITED KINGDOM" -"1500246016","1500248063","ES","ESP","SPAIN" -"1500248064","1500250111","HU","HUN","HUNGARY" -"1500250112","1500266495","SA","SAU","SAUDI ARABIA" -"1500266496","1500282879","RU","RUS","RUSSIAN FEDERATION" -"1500282880","1500299263","LB","LBN","LEBANON" -"1500299264","1500315647","PL","POL","POLAND" -"1500315648","1500332031","RU","RUS","RUSSIAN FEDERATION" -"1500332032","1500348415","PT","PRT","PORTUGAL" -"1500348416","1500397567","RU","RUS","RUSSIAN FEDERATION" -"1500397568","1500399615","UA","UKR","UKRAINE" -"1500399616","1500413951","RU","RUS","RUSSIAN FEDERATION" -"1500413952","1500430335","DE","DEU","GERMANY" -"1500430336","1500446719","RS","SRB","SERBIA" -"1500446720","1500447743","LV","LVA","LATVIA" -"1500447744","1500447999","LT","LTU","LITHUANIA" -"1500448000","1500448511","LV","LVA","LATVIA" -"1500448512","1500448767","LT","LTU","LITHUANIA" -"1500448768","1500463103","LV","LVA","LATVIA" -"1500463104","1500479487","CZ","CZE","CZECH REPUBLIC" -"1500479488","1500495871","RU","RUS","RUSSIAN FEDERATION" -"1500495872","1500512255","BA","BIH","BOSNIA AND HERZEGOVINA" -"1500512256","1500643327","RU","RUS","RUSSIAN FEDERATION" -"1500643328","1500774399","RO","ROM","ROMANIA" -"1500774400","1500905471","LT","LTU","LITHUANIA" -"1500905472","1501036543","IT","ITA","ITALY" -"1501036544","1501298687","RO","ROM","ROMANIA" -"1501298688","1501560831","IE","IRL","IRELAND" -"1501560832","1501822975","ES","ESP","SPAIN" -"1501822976","1502085119","HU","HUN","HUNGARY" -"1502085120","1502216191","RO","ROM","ROMANIA" -"1502216192","1502347263","IL","ISR","ISRAEL" -"1502347264","1502478335","ES","ESP","SPAIN" -"1502478336","1502605311","SI","SVN","SLOVENIA" -"1502605312","1502606335","HR","HRV","CROATIA" -"1502606336","1502609407","SI","SVN","SLOVENIA" -"1502609408","1502610175","AT","AUT","AUSTRIA" -"1502610176","1502625791","DE","DEU","GERMANY" -"1502625792","1502642175","SA","SAU","SAUDI ARABIA" -"1502642176","1502658559","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1502658560","1502674943","AT","AUT","AUSTRIA" -"1502674944","1502691327","DE","DEU","GERMANY" -"1502691328","1502692415","GB","GBR","UNITED KINGDOM" -"1502692416","1502692479","ES","ESP","SPAIN" -"1502692480","1502707711","GB","GBR","UNITED KINGDOM" -"1502707712","1502724095","RU","RUS","RUSSIAN FEDERATION" -"1502724096","1502740479","GB","GBR","UNITED KINGDOM" -"1502740480","1502756863","NL","NLD","NETHERLANDS" -"1502756864","1502773247","UZ","UZB","UZBEKISTAN" -"1502773248","1502789631","BA","BIH","BOSNIA AND HERZEGOVINA" -"1502789632","1502791551","DE","DEU","GERMANY" -"1502791552","1502791679","PL","POL","POLAND" -"1502791680","1502793503","DE","DEU","GERMANY" -"1502793504","1502793511","NL","NLD","NETHERLANDS" -"1502793512","1502794239","DE","DEU","GERMANY" -"1502794240","1502794495","NL","NLD","NETHERLANDS" -"1502794496","1502806015","DE","DEU","GERMANY" -"1502806016","1502822399","SA","SAU","SAUDI ARABIA" -"1502822400","1502838783","HU","HUN","HUNGARY" -"1502838784","1502855167","SE","SWE","SWEDEN" -"1502855168","1502871551","AZ","AZE","AZERBAIJAN" -"1502871552","1502887935","BH","BHR","BAHRAIN" -"1502887936","1502904319","HU","HUN","HUNGARY" -"1502904320","1502920703","IT","ITA","ITALY" -"1502920704","1502937087","RU","RUS","RUSSIAN FEDERATION" -"1502937088","1502953471","RO","ROM","ROMANIA" -"1502953472","1502969855","MD","MDA","REPUBLIC OF MOLDOVA" -"1502969856","1502975231","US","USA","UNITED STATES" -"1502975232","1502975383","IE","IRL","IRELAND" -"1502975384","1502975391","ES","ESP","SPAIN" -"1502975392","1502975423","IE","IRL","IRELAND" -"1502975424","1502975455","GB","GBR","UNITED KINGDOM" -"1502975456","1502975487","IE","IRL","IRELAND" -"1502975488","1502975743","ES","ESP","SPAIN" -"1502975744","1502975999","IE","IRL","IRELAND" -"1502976000","1502977055","US","USA","UNITED STATES" -"1502977056","1502977279","IE","IRL","IRELAND" -"1502977280","1502979071","US","USA","UNITED STATES" -"1502979072","1502979103","IE","IRL","IRELAND" -"1502979104","1502979111","ES","ESP","SPAIN" -"1502979112","1502979119","IE","IRL","IRELAND" -"1502979120","1502979135","ES","ESP","SPAIN" -"1502979136","1502979199","IE","IRL","IRELAND" -"1502979200","1502979215","ES","ESP","SPAIN" -"1502979216","1502979327","IE","IRL","IRELAND" -"1502979328","1502979583","US","USA","UNITED STATES" -"1502979584","1502980095","IE","IRL","IRELAND" -"1502980096","1502980159","US","USA","UNITED STATES" -"1502980160","1502980351","IE","IRL","IRELAND" -"1502980352","1502980871","US","USA","UNITED STATES" -"1502980872","1502981119","IE","IRL","IRELAND" -"1502981120","1502981887","US","USA","UNITED STATES" -"1502981888","1502982143","NL","NLD","NETHERLANDS" -"1502982144","1502982911","DE","DEU","GERMANY" -"1502982912","1502983679","IE","IRL","IRELAND" -"1502983680","1502986255","DE","DEU","GERMANY" -"1502986256","1502986495","TR","TUR","TURKEY" -"1502986496","1502986511","DE","DEU","GERMANY" -"1502986512","1502986751","PL","POL","POLAND" -"1502986752","1502987775","DE","DEU","GERMANY" -"1502987776","1502988031","TR","TUR","TURKEY" -"1502988032","1502989055","DE","DEU","GERMANY" -"1502989056","1502989567","TR","TUR","TURKEY" -"1502989568","1502990847","DE","DEU","GERMANY" -"1502990848","1502991103","PL","POL","POLAND" -"1502991104","1502991359","DE","DEU","GERMANY" -"1502991360","1502991615","PL","POL","POLAND" -"1502991616","1502994687","DE","DEU","GERMANY" -"1502994688","1502994943","PL","POL","POLAND" -"1502994944","1502995967","DE","DEU","GERMANY" -"1502995968","1502996479","PL","POL","POLAND" -"1502996480","1502996735","DE","DEU","GERMANY" -"1502996736","1502997247","PL","POL","POLAND" -"1502997248","1502997503","LT","LTU","LITHUANIA" -"1502997504","1502997759","HK","HKG","HONG KONG" -"1502997760","1503000063","DE","DEU","GERMANY" -"1503000064","1503000319","PL","POL","POLAND" -"1503000320","1503000831","DE","DEU","GERMANY" -"1503000832","1503001343","PL","POL","POLAND" -"1503001344","1503002623","DE","DEU","GERMANY" -"1503002624","1503006719","GE","GEO","GEORGIA" -"1503006720","1503010815","GB","GBR","UNITED KINGDOM" -"1503019008","1503051775","DK","DNK","DENMARK" -"1503051776","1503068159","SE","SWE","SWEDEN" -"1503068160","1503084543","PL","POL","POLAND" -"1503084544","1503100927","GB","GBR","UNITED KINGDOM" -"1503100928","1503117311","RU","RUS","RUSSIAN FEDERATION" -"1503117312","1503133695","NO","NOR","NORWAY" -"1503133696","1503395839","PT","PRT","PORTUGAL" -"1503395840","1503657983","FR","FRA","FRANCE" -"1503657984","1503690751","SE","SWE","SWEDEN" -"1503690752","1503723519","IS","ISL","ICELAND" -"1503723520","1503789055","PL","POL","POLAND" -"1503789056","1503821823","NO","NOR","NORWAY" -"1503821824","1503854591","UA","UKR","UKRAINE" -"1503854592","1503887359","RU","RUS","RUSSIAN FEDERATION" -"1503887360","1503895615","DE","DEU","GERMANY" -"1503895616","1503895623","NL","NLD","NETHERLANDS" -"1503895624","1503895631","DE","DEU","GERMANY" -"1503895632","1503895639","AT","AUT","AUSTRIA" -"1503895640","1503895671","DE","DEU","GERMANY" -"1503895672","1503895679","PL","POL","POLAND" -"1503895680","1503895751","DE","DEU","GERMANY" -"1503895752","1503895759","US","USA","UNITED STATES" -"1503895760","1503895767","GR","GRC","GREECE" -"1503895768","1503895783","IT","ITA","ITALY" -"1503895784","1503895791","CH","CHE","SWITZERLAND" -"1503895792","1503895799","DE","DEU","GERMANY" -"1503895800","1503895807","CA","CAN","CANADA" -"1503895808","1503896303","DE","DEU","GERMANY" -"1503896304","1503896311","GR","GRC","GREECE" -"1503896312","1503896351","DE","DEU","GERMANY" -"1503896352","1503896359","AT","AUT","AUSTRIA" -"1503896360","1503896375","DE","DEU","GERMANY" -"1503896376","1503896383","CH","CHE","SWITZERLAND" -"1503896384","1503896391","RO","ROM","ROMANIA" -"1503896392","1503896415","DE","DEU","GERMANY" -"1503896416","1503896423","GR","GRC","GREECE" -"1503896424","1503896439","DE","DEU","GERMANY" -"1503896440","1503896447","NO","NOR","NORWAY" -"1503896448","1503896519","DE","DEU","GERMANY" -"1503896520","1503896527","AT","AUT","AUSTRIA" -"1503896528","1503896551","DE","DEU","GERMANY" -"1503896552","1503896559","AT","AUT","AUSTRIA" -"1503896560","1503908351","DE","DEU","GERMANY" -"1503908352","1503909375","IT","ITA","ITALY" -"1503909376","1503920127","DE","DEU","GERMANY" -"1503920128","1503985663","HR","HRV","CROATIA" -"1503985664","1504018431","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1504018432","1504051199","RO","ROM","ROMANIA" -"1504051200","1504083967","FI","FIN","FINLAND" -"1504083968","1504116735","DE","DEU","GERMANY" -"1504116736","1504149503","PL","POL","POLAND" -"1504149504","1504152127","GB","GBR","UNITED KINGDOM" -"1504152128","1504152191","IE","IRL","IRELAND" -"1504152192","1504152415","GB","GBR","UNITED KINGDOM" -"1504152416","1504152431","IE","IRL","IRELAND" -"1504152432","1504152447","GB","GBR","UNITED KINGDOM" -"1504152448","1504152575","IE","IRL","IRELAND" -"1504152576","1504154623","GB","GBR","UNITED KINGDOM" -"1504154624","1504155647","IE","IRL","IRELAND" -"1504155648","1504156927","GB","GBR","UNITED KINGDOM" -"1504156928","1504157183","IE","IRL","IRELAND" -"1504157184","1504161279","GB","GBR","UNITED KINGDOM" -"1504161280","1504161535","IE","IRL","IRELAND" -"1504161536","1504164607","GB","GBR","UNITED KINGDOM" -"1504164608","1504164863","IE","IRL","IRELAND" -"1504164864","1504169983","GB","GBR","UNITED KINGDOM" -"1504169984","1504170239","IE","IRL","IRELAND" -"1504170240","1504171007","GB","GBR","UNITED KINGDOM" -"1504171008","1504171263","PT","PRT","PORTUGAL" -"1504171264","1504171775","GB","GBR","UNITED KINGDOM" -"1504171776","1504172031","US","USA","UNITED STATES" -"1504172032","1504173055","GB","GBR","UNITED KINGDOM" -"1504173056","1504173311","IE","IRL","IRELAND" -"1504173312","1504174591","GB","GBR","UNITED KINGDOM" -"1504174592","1504175103","IE","IRL","IRELAND" -"1504175104","1504176383","GB","GBR","UNITED KINGDOM" -"1504176384","1504176639","IE","IRL","IRELAND" -"1504176640","1504178431","GB","GBR","UNITED KINGDOM" -"1504178432","1504178687","IE","IRL","IRELAND" -"1504178688","1504247807","GB","GBR","UNITED KINGDOM" -"1504247808","1504313343","RU","RUS","RUSSIAN FEDERATION" -"1504313344","1504378879","FR","FRA","FRANCE" -"1504378880","1504444415","PL","POL","POLAND" -"1504444416","1504509951","HR","HRV","CROATIA" -"1504509952","1504575487","SK","SVK","SLOVAKIA" -"1504575488","1504641023","PL","POL","POLAND" -"1504641024","1504706559","RU","RUS","RUSSIAN FEDERATION" -"1504706560","1504837631","CZ","CZE","CZECH REPUBLIC" -"1504837632","1504968703","RU","RUS","RUSSIAN FEDERATION" -"1504968704","1505099775","PT","PRT","PORTUGAL" -"1505099776","1505230847","DE","DEU","GERMANY" -"1505230848","1505239039","RU","RUS","RUSSIAN FEDERATION" -"1505239040","1505247231","IE","IRL","IRELAND" -"1505247232","1505255423","UA","UKR","UKRAINE" -"1505255424","1505263615","IT","ITA","ITALY" -"1505263616","1505271807","DK","DNK","DENMARK" -"1505271808","1505273087","NL","NLD","NETHERLANDS" -"1505273088","1505273095","NZ","NZL","NEW ZEALAND" -"1505273096","1505279999","NL","NLD","NETHERLANDS" -"1505288192","1505296383","RU","RUS","RUSSIAN FEDERATION" -"1505296384","1505304575","UA","UKR","UKRAINE" -"1505304576","1505305198","FR","FRA","FRANCE" -"1505305199","1505305199","DK","DNK","DENMARK" -"1505305200","1505305200","BE","BEL","BELGIUM" -"1505305201","1505305201","NL","NLD","NETHERLANDS" -"1505305202","1505305202","GB","GBR","UNITED KINGDOM" -"1505305203","1505305203","CA","CAN","CANADA" -"1505305204","1505305204","FR","FRA","FRANCE" -"1505305205","1505305205","CH","CHE","SWITZERLAND" -"1505305206","1505305206","DE","DEU","GERMANY" -"1505305207","1505305207","AT","AUT","AUSTRIA" -"1505305208","1505305208","IT","ITA","ITALY" -"1505305209","1505305209","ES","ESP","SPAIN" -"1505305210","1505305210","SE","SWE","SWEDEN" -"1505305211","1505305211","NO","NOR","NORWAY" -"1505305212","1505305878","FR","FRA","FRANCE" -"1505305879","1505305879","US","USA","UNITED STATES" -"1505305880","1505305880","ES","ESP","SPAIN" -"1505305881","1505305899","FR","FRA","FRANCE" -"1505305900","1505305900","GB","GBR","UNITED KINGDOM" -"1505305901","1505305901","DE","DEU","GERMANY" -"1505305902","1505305902","IT","ITA","ITALY" -"1505305903","1505306303","FR","FRA","FRANCE" -"1505306304","1505306319","ES","ESP","SPAIN" -"1505306320","1505306335","DE","DEU","GERMANY" -"1505306336","1505306351","GB","GBR","UNITED KINGDOM" -"1505306352","1505306367","IT","ITA","ITALY" -"1505306368","1505312767","FR","FRA","FRANCE" -"1505312768","1505320959","RU","RUS","RUSSIAN FEDERATION" -"1505320960","1505329151","AT","AUT","AUSTRIA" -"1505329152","1505329215","GB","GBR","UNITED KINGDOM" -"1505329216","1505332991","IE","IRL","IRELAND" -"1505332992","1505332999","GB","GBR","UNITED KINGDOM" -"1505333000","1505336063","IE","IRL","IRELAND" -"1505336064","1505336071","GB","GBR","UNITED KINGDOM" -"1505336072","1505336831","IE","IRL","IRELAND" -"1505336832","1505336863","GB","GBR","UNITED KINGDOM" -"1505336864","1505336864","IE","IRL","IRELAND" -"1505336865","1505336879","GB","GBR","UNITED KINGDOM" -"1505336880","1505337087","IE","IRL","IRELAND" -"1505337088","1505337215","GB","GBR","UNITED KINGDOM" -"1505337216","1505337343","IE","IRL","IRELAND" -"1505337344","1505345535","FR","FRA","FRANCE" -"1505345536","1505353727","MK","MKD","THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA" -"1505353728","1505359663","CZ","CZE","CZECH REPUBLIC" -"1505359664","1505359671","SK","SVK","SLOVAKIA" -"1505359672","1505359675","CZ","CZE","CZECH REPUBLIC" -"1505359676","1505359679","SK","SVK","SLOVAKIA" -"1505359680","1505359759","CZ","CZE","CZECH REPUBLIC" -"1505359760","1505359775","SK","SVK","SLOVAKIA" -"1505359776","1505361919","CZ","CZE","CZECH REPUBLIC" -"1505361920","1505370111","PL","POL","POLAND" -"1505370112","1505378303","SM","SMR","SAN MARINO" -"1505378304","1505386495","IT","ITA","ITALY" -"1505386496","1505394687","HU","HUN","HUNGARY" -"1505394688","1505402879","DE","DEU","GERMANY" -"1505402880","1505411071","DK","DNK","DENMARK" -"1505411072","1505419263","BG","BGR","BULGARIA" -"1505419264","1505427455","RU","RUS","RUSSIAN FEDERATION" -"1505427456","1505435647","UA","UKR","UKRAINE" -"1505435648","1505443839","MD","MDA","REPUBLIC OF MOLDOVA" -"1505443840","1505452327","GB","GBR","UNITED KINGDOM" -"1505452328","1505452335","NO","NOR","NORWAY" -"1505452336","1505454367","GB","GBR","UNITED KINGDOM" -"1505454368","1505454375","US","USA","UNITED STATES" -"1505454376","1505454383","GB","GBR","UNITED KINGDOM" -"1505454384","1505454391","US","USA","UNITED STATES" -"1505454392","1505454399","SG","SGP","SINGAPORE" -"1505454400","1505454463","GB","GBR","UNITED KINGDOM" -"1505454464","1505454495","AU","AUS","AUSTRALIA" -"1505454496","1505454511","GB","GBR","UNITED KINGDOM" -"1505454512","1505454527","DE","DEU","GERMANY" -"1505454528","1505454543","NZ","NZL","NEW ZEALAND" -"1505454544","1505454911","GB","GBR","UNITED KINGDOM" -"1505454912","1505454943","CZ","CZE","CZECH REPUBLIC" -"1505454944","1505454975","GB","GBR","UNITED KINGDOM" -"1505454976","1505455103","US","USA","UNITED STATES" -"1505455104","1505456127","GB","GBR","UNITED KINGDOM" -"1505456128","1505456255","US","USA","UNITED STATES" -"1505456256","1505456639","GB","GBR","UNITED KINGDOM" -"1505456640","1505456895","US","USA","UNITED STATES" -"1505456896","1505456927","GB","GBR","UNITED KINGDOM" -"1505456928","1505456935","US","USA","UNITED STATES" -"1505456936","1505458175","GB","GBR","UNITED KINGDOM" -"1505458176","1505458431","US","USA","UNITED STATES" -"1505458432","1505460223","GB","GBR","UNITED KINGDOM" -"1505460224","1505476607","CZ","CZE","CZECH REPUBLIC" -"1505476608","1505484799","RU","RUS","RUSSIAN FEDERATION" -"1505484800","1505492991","PL","POL","POLAND" -"1505492992","1505501183","NL","NLD","NETHERLANDS" -"1505501184","1505509375","ME","MNE","MONTENEGRO" -"1505509376","1505517567","SA","SAU","SAUDI ARABIA" -"1505517568","1505525759","RU","RUS","RUSSIAN FEDERATION" -"1505525760","1505533951","IT","ITA","ITALY" -"1505533952","1505542143","RU","RUS","RUSSIAN FEDERATION" -"1505542144","1505550335","PL","POL","POLAND" -"1505550336","1505566719","RU","RUS","RUSSIAN FEDERATION" -"1505566720","1505574911","IT","ITA","ITALY" -"1505574912","1505583103","YE","YEM","YEMEN" -"1505583104","1505607679","RU","RUS","RUSSIAN FEDERATION" -"1505607680","1505615871","SE","SWE","SWEDEN" -"1505615872","1505624063","SA","SAU","SAUDI ARABIA" -"1505624064","1505632255","FI","FIN","FINLAND" -"1505632256","1505648639","CZ","CZE","CZECH REPUBLIC" -"1505648640","1505656831","LT","LTU","LITHUANIA" -"1505656832","1505665023","BH","BHR","BAHRAIN" -"1505665024","1505668263","IT","ITA","ITALY" -"1505668264","1505668267","DE","DEU","GERMANY" -"1505668268","1505670615","IT","ITA","ITALY" -"1505670616","1505670623","US","USA","UNITED STATES" -"1505670624","1505673215","IT","ITA","ITALY" -"1505673216","1505681407","BG","BGR","BULGARIA" -"1505681408","1505689599","RU","RUS","RUSSIAN FEDERATION" -"1505689600","1505697791","NO","NOR","NORWAY" -"1505697792","1505705983","IE","IRL","IRELAND" -"1505705984","1505708543","DE","DEU","GERMANY" -"1505708544","1505709055","AT","AUT","AUSTRIA" -"1505709056","1505714175","DE","DEU","GERMANY" -"1505714176","1505722367","LV","LVA","LATVIA" -"1505722368","1505738751","PL","POL","POLAND" -"1505738752","1505745839","GB","GBR","UNITED KINGDOM" -"1505745840","1505745855","IL","ISR","ISRAEL" -"1505745856","1505746943","GB","GBR","UNITED KINGDOM" -"1505746944","1505755135","RU","RUS","RUSSIAN FEDERATION" -"1505755136","1506017279","GB","GBR","UNITED KINGDOM" -"1506017280","1506279423","DE","DEU","GERMANY" -"1506279424","1506312191","NL","NLD","NETHERLANDS" -"1506312192","1506316287","GB","GBR","UNITED KINGDOM" -"1506316288","1506322431","PL","POL","POLAND" -"1506322432","1506324479","DE","DEU","GERMANY" -"1506324480","1506328575","RU","RUS","RUSSIAN FEDERATION" -"1506328576","1506330623","FI","FIN","FINLAND" -"1506330624","1506332671","NL","NLD","NETHERLANDS" -"1506332672","1506334719","PL","POL","POLAND" -"1506334720","1506336767","GB","GBR","UNITED KINGDOM" -"1506336768","1506338815","PL","POL","POLAND" -"1506338816","1506340863","UA","UKR","UKRAINE" -"1506340864","1506342911","RO","ROM","ROMANIA" -"1506342912","1506344959","UA","UKR","UKRAINE" -"1506344960","1506377727","LV","LVA","LATVIA" -"1506377728","1506410495","HR","HRV","CROATIA" -"1506410496","1506427663","DE","DEU","GERMANY" -"1506427664","1506427679","GB","GBR","UNITED KINGDOM" -"1506427680","1506428223","DE","DEU","GERMANY" -"1506428224","1506428239","US","USA","UNITED STATES" -"1506428240","1506437887","DE","DEU","GERMANY" -"1506437888","1506437903","CA","CAN","CANADA" -"1506437904","1506437919","DE","DEU","GERMANY" -"1506437920","1506437951","IN","IND","INDIA" -"1506437952","1506437983","DE","DEU","GERMANY" -"1506437984","1506437991","US","USA","UNITED STATES" -"1506437992","1506437999","DE","DEU","GERMANY" -"1506438000","1506438015","CA","CAN","CANADA" -"1506438016","1506438143","DE","DEU","GERMANY" -"1506438144","1506438271","HK","HKG","HONG KONG" -"1506438272","1506438399","DE","DEU","GERMANY" -"1506438400","1506438527","US","USA","UNITED STATES" -"1506438528","1506438783","DE","DEU","GERMANY" -"1506438784","1506438799","KR","KOR","REPUBLIC OF KOREA" -"1506438800","1506438847","DE","DEU","GERMANY" -"1506438848","1506438863","US","USA","UNITED STATES" -"1506438864","1506438911","DE","DEU","GERMANY" -"1506438912","1506439039","US","USA","UNITED STATES" -"1506439040","1506439935","DE","DEU","GERMANY" -"1506439936","1506440191","US","USA","UNITED STATES" -"1506440192","1506440447","DE","DEU","GERMANY" -"1506440448","1506440575","US","USA","UNITED STATES" -"1506440576","1506440703","DE","DEU","GERMANY" -"1506440704","1506440711","US","USA","UNITED STATES" -"1506440712","1506440719","FR","FRA","FRANCE" -"1506440720","1506440735","US","USA","UNITED STATES" -"1506440736","1506440767","GB","GBR","UNITED KINGDOM" -"1506440768","1506440799","US","USA","UNITED STATES" -"1506440800","1506440831","DE","DEU","GERMANY" -"1506440832","1506440959","US","USA","UNITED STATES" -"1506440960","1506440991","FR","FRA","FRANCE" -"1506440992","1506440999","US","USA","UNITED STATES" -"1506441000","1506441007","GB","GBR","UNITED KINGDOM" -"1506441008","1506441023","US","USA","UNITED STATES" -"1506441024","1506441087","HK","HKG","HONG KONG" -"1506441088","1506441215","CA","CAN","CANADA" -"1506441216","1506441343","US","USA","UNITED STATES" -"1506441344","1506441407","HK","HKG","HONG KONG" -"1506441408","1506441415","DE","DEU","GERMANY" -"1506441416","1506441423","FR","FRA","FRANCE" -"1506441424","1506441495","DE","DEU","GERMANY" -"1506441496","1506441503","GB","GBR","UNITED KINGDOM" -"1506441504","1506441535","US","USA","UNITED STATES" -"1506441536","1506441599","DE","DEU","GERMANY" -"1506441600","1506441631","US","USA","UNITED STATES" -"1506441632","1506441647","DE","DEU","GERMANY" -"1506441648","1506441663","GB","GBR","UNITED KINGDOM" -"1506441664","1506441671","NL","NLD","NETHERLANDS" -"1506441672","1506441679","CA","CAN","CANADA" -"1506441680","1506441695","DE","DEU","GERMANY" -"1506441696","1506441727","CA","CAN","CANADA" -"1506441728","1506442239","MU","MUS","MAURITIUS" -"1506442240","1506442383","US","USA","UNITED STATES" -"1506442384","1506442399","GB","GBR","UNITED KINGDOM" -"1506442400","1506442415","FR","FRA","FRANCE" -"1506442416","1506442427","US","USA","UNITED STATES" -"1506442428","1506442431","DE","DEU","GERMANY" -"1506442432","1506442463","HK","HKG","HONG KONG" -"1506442464","1506442623","DE","DEU","GERMANY" -"1506442624","1506442655","GB","GBR","UNITED KINGDOM" -"1506442656","1506442687","US","USA","UNITED STATES" -"1506442688","1506442703","GB","GBR","UNITED KINGDOM" -"1506442704","1506442711","US","USA","UNITED STATES" -"1506442712","1506442715","NL","NLD","NETHERLANDS" -"1506442716","1506442719","US","USA","UNITED STATES" -"1506442720","1506442735","GB","GBR","UNITED KINGDOM" -"1506442736","1506442743","DE","DEU","GERMANY" -"1506442744","1506442751","US","USA","UNITED STATES" -"1506442752","1506442879","DE","DEU","GERMANY" -"1506442880","1506442911","GB","GBR","UNITED KINGDOM" -"1506442912","1506442919","DE","DEU","GERMANY" -"1506442920","1506442923","GB","GBR","UNITED KINGDOM" -"1506442924","1506442927","NL","NLD","NETHERLANDS" -"1506442928","1506442975","US","USA","UNITED STATES" -"1506442976","1506442991","DE","DEU","GERMANY" -"1506442992","1506442999","GB","GBR","UNITED KINGDOM" -"1506443000","1506443003","IE","IRL","IRELAND" -"1506443004","1506443151","DE","DEU","GERMANY" -"1506443152","1506443159","US","USA","UNITED STATES" -"1506443160","1506443167","GB","GBR","UNITED KINGDOM" -"1506443168","1506443183","NL","NLD","NETHERLANDS" -"1506443184","1506443199","DE","DEU","GERMANY" -"1506443200","1506443263","US","USA","UNITED STATES" -"1506443264","1506444287","GB","GBR","UNITED KINGDOM" -"1506444288","1506445311","DE","DEU","GERMANY" -"1506445312","1506445337","FR","FRA","FRANCE" -"1506445338","1506445343","GB","GBR","UNITED KINGDOM" -"1506445344","1506445519","FR","FRA","FRANCE" -"1506445520","1506445527","GB","GBR","UNITED KINGDOM" -"1506445528","1506445703","FR","FRA","FRANCE" -"1506445704","1506445719","GB","GBR","UNITED KINGDOM" -"1506445720","1506445807","FR","FRA","FRANCE" -"1506445808","1506445815","GB","GBR","UNITED KINGDOM" -"1506445816","1506446335","FR","FRA","FRANCE" -"1506446336","1506447359","NL","NLD","NETHERLANDS" -"1506447360","1506448383","IT","ITA","ITALY" -"1506448384","1506448639","AT","AUT","AUSTRIA" -"1506448640","1506448647","GB","GBR","UNITED KINGDOM" -"1506448648","1506448663","AT","AUT","AUSTRIA" -"1506448664","1506448671","GB","GBR","UNITED KINGDOM" -"1506448672","1506448719","AT","AUT","AUSTRIA" -"1506448720","1506448727","GB","GBR","UNITED KINGDOM" -"1506448728","1506448735","AT","AUT","AUSTRIA" -"1506448736","1506448895","GB","GBR","UNITED KINGDOM" -"1506448896","1506449167","BE","BEL","BELGIUM" -"1506449168","1506449171","GB","GBR","UNITED KINGDOM" -"1506449172","1506449407","BE","BEL","BELGIUM" -"1506449408","1506449663","NL","NLD","NETHERLANDS" -"1506449664","1506449919","SK","SVK","SLOVAKIA" -"1506449920","1506449927","CH","CHE","SWITZERLAND" -"1506449928","1506449935","GB","GBR","UNITED KINGDOM" -"1506449936","1506450431","CH","CHE","SWITZERLAND" -"1506450432","1506450767","CZ","CZE","CZECH REPUBLIC" -"1506450768","1506450847","GB","GBR","UNITED KINGDOM" -"1506450848","1506450943","CZ","CZE","CZECH REPUBLIC" -"1506450944","1506451007","DK","DNK","DENMARK" -"1506451008","1506451199","GB","GBR","UNITED KINGDOM" -"1506451200","1506451895","ES","ESP","SPAIN" -"1506451896","1506451903","GB","GBR","UNITED KINGDOM" -"1506451904","1506452223","ES","ESP","SPAIN" -"1506452224","1506452479","GB","GBR","UNITED KINGDOM" -"1506452480","1506452735","US","USA","UNITED STATES" -"1506452736","1506452751","RO","ROM","ROMANIA" -"1506452752","1506452991","GB","GBR","UNITED KINGDOM" -"1506452992","1506453247","AT","AUT","AUSTRIA" -"1506453248","1506453391","SE","SWE","SWEDEN" -"1506453392","1506453399","ES","ESP","SPAIN" -"1506453400","1506453415","SE","SWE","SWEDEN" -"1506453416","1506453423","GB","GBR","UNITED KINGDOM" -"1506453424","1506453503","SE","SWE","SWEDEN" -"1506453504","1506453759","DE","DEU","GERMANY" -"1506453760","1506454015","FR","FRA","FRANCE" -"1506454016","1506454271","GB","GBR","UNITED KINGDOM" -"1506454272","1506454527","ES","ESP","SPAIN" -"1506454528","1506455039","US","USA","UNITED STATES" -"1506455040","1506455295","GB","GBR","UNITED KINGDOM" -"1506455296","1506455551","IT","ITA","ITALY" -"1506455552","1506456063","AE","ARE","UNITED ARAB EMIRATES" -"1506456064","1506456319","HU","HUN","HUNGARY" -"1506456320","1506456575","IT","ITA","ITALY" -"1506456576","1506456831","IE","IRL","IRELAND" -"1506456832","1506456847","IT","ITA","ITALY" -"1506456848","1506456863","GB","GBR","UNITED KINGDOM" -"1506456864","1506457087","IT","ITA","ITALY" -"1506457088","1506458239","GB","GBR","UNITED KINGDOM" -"1506458240","1506458311","CH","CHE","SWITZERLAND" -"1506458312","1506458319","GB","GBR","UNITED KINGDOM" -"1506458320","1506458623","CH","CHE","SWITZERLAND" -"1506458624","1506459135","GB","GBR","UNITED KINGDOM" -"1506459136","1506459207","BE","BEL","BELGIUM" -"1506459208","1506459215","GB","GBR","UNITED KINGDOM" -"1506459216","1506459231","BE","BEL","BELGIUM" -"1506459232","1506459391","GB","GBR","UNITED KINGDOM" -"1506459392","1506459647","BE","BEL","BELGIUM" -"1506459648","1506460047","FR","FRA","FRANCE" -"1506460048","1506460055","GB","GBR","UNITED KINGDOM" -"1506460056","1506460339","FR","FRA","FRANCE" -"1506460340","1506460343","GB","GBR","UNITED KINGDOM" -"1506460344","1506460671","FR","FRA","FRANCE" -"1506460672","1506460927","AT","AUT","AUSTRIA" -"1506460928","1506461311","IT","ITA","ITALY" -"1506461312","1506461315","GB","GBR","UNITED KINGDOM" -"1506461316","1506461319","IT","ITA","ITALY" -"1506461320","1506461327","GB","GBR","UNITED KINGDOM" -"1506461328","1506461351","IT","ITA","ITALY" -"1506461352","1506461359","FR","FRA","FRANCE" -"1506461360","1506461695","IT","ITA","ITALY" -"1506461696","1506461863","FR","FRA","FRANCE" -"1506461864","1506461887","GB","GBR","UNITED KINGDOM" -"1506461888","1506462207","FR","FRA","FRANCE" -"1506462208","1506462463","ES","ESP","SPAIN" -"1506462464","1506462719","FR","FRA","FRANCE" -"1506462720","1506463231","IT","ITA","ITALY" -"1506463232","1506463487","SE","SWE","SWEDEN" -"1506463488","1506463999","DE","DEU","GERMANY" -"1506464000","1506464767","GB","GBR","UNITED KINGDOM" -"1506464768","1506465087","NL","NLD","NETHERLANDS" -"1506465088","1506465151","DE","DEU","GERMANY" -"1506465152","1506465279","NL","NLD","NETHERLANDS" -"1506465280","1506465791","GB","GBR","UNITED KINGDOM" -"1506465792","1506466047","DE","DEU","GERMANY" -"1506466048","1506466303","BE","BEL","BELGIUM" -"1506466304","1506466559","DE","DEU","GERMANY" -"1506466560","1506467071","GB","GBR","UNITED KINGDOM" -"1506467072","1506467327","DE","DEU","GERMANY" -"1506467328","1506467583","GB","GBR","UNITED KINGDOM" -"1506467584","1506468351","IT","ITA","ITALY" -"1506468352","1506468607","GB","GBR","UNITED KINGDOM" -"1506468608","1506468863","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"1506468864","1506469487","IT","ITA","ITALY" -"1506469488","1506469503","GB","GBR","UNITED KINGDOM" -"1506469504","1506470143","IT","ITA","ITALY" -"1506470144","1506470399","GB","GBR","UNITED KINGDOM" -"1506470400","1506470655","DE","DEU","GERMANY" -"1506470656","1506471679","IT","ITA","ITALY" -"1506471680","1506471935","GB","GBR","UNITED KINGDOM" -"1506471936","1506471975","NL","NLD","NETHERLANDS" -"1506471976","1506471983","GB","GBR","UNITED KINGDOM" -"1506471984","1506471999","NL","NLD","NETHERLANDS" -"1506472000","1506472031","BE","BEL","BELGIUM" -"1506472032","1506472191","NL","NLD","NETHERLANDS" -"1506472192","1506472447","IT","ITA","ITALY" -"1506472448","1506472703","GB","GBR","UNITED KINGDOM" -"1506472704","1506473215","IT","ITA","ITALY" -"1506473216","1506473471","GB","GBR","UNITED KINGDOM" -"1506473472","1506474271","IT","ITA","ITALY" -"1506474272","1506474303","SE","SWE","SWEDEN" -"1506474304","1506474495","IT","ITA","ITALY" -"1506474496","1506474751","FR","FRA","FRANCE" -"1506474752","1506475519","IT","ITA","ITALY" -"1506475520","1506476031","GB","GBR","UNITED KINGDOM" -"1506476032","1506508799","KW","KWT","KUWAIT" -"1506508800","1506541567","CZ","CZE","CZECH REPUBLIC" -"1506541568","1506574335","RU","RUS","RUSSIAN FEDERATION" -"1506574336","1506582527","DE","DEU","GERMANY" -"1506582528","1506607103","IE","IRL","IRELAND" -"1506607104","1506639871","MK","MKD","THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA" -"1506639872","1506672639","NL","NLD","NETHERLANDS" -"1506672640","1506689023","PL","POL","POLAND" -"1506689024","1506705407","CH","CHE","SWITZERLAND" -"1506705408","1506740223","GB","GBR","UNITED KINGDOM" -"1506740224","1506742271","FI","FIN","FINLAND" -"1506742272","1506743167","SE","SWE","SWEDEN" -"1506743168","1506743183","DE","DEU","GERMANY" -"1506743184","1506743199","FR","FRA","FRANCE" -"1506743200","1506743215","IE","IRL","IRELAND" -"1506743216","1506743232","GB","GBR","UNITED KINGDOM" -"1506743233","1506744319","SE","SWE","SWEDEN" -"1506744320","1506746367","NL","NLD","NETHERLANDS" -"1506746368","1506750463","RU","RUS","RUSSIAN FEDERATION" -"1506750464","1506752511","GB","GBR","UNITED KINGDOM" -"1506752512","1506754559","IE","IRL","IRELAND" -"1506754560","1506758655","RU","RUS","RUSSIAN FEDERATION" -"1506758656","1506760703","IT","ITA","ITALY" -"1506760704","1506764799","RU","RUS","RUSSIAN FEDERATION" -"1506764800","1506766847","IT","ITA","ITALY" -"1506766848","1506766903","NO","NOR","NORWAY" -"1506766904","1506768895","GE","GEO","GEORGIA" -"1506768896","1506770943","AT","AUT","AUSTRIA" -"1506770944","1506772991","NL","NLD","NETHERLANDS" -"1506772992","1506775039","GB","GBR","UNITED KINGDOM" -"1506775040","1506777087","AT","AUT","AUSTRIA" -"1506777088","1506781695","GB","GBR","UNITED KINGDOM" -"1506781696","1506781951","IE","IRL","IRELAND" -"1506781952","1506783231","GB","GBR","UNITED KINGDOM" -"1506783232","1506785279","RU","RUS","RUSSIAN FEDERATION" -"1506785280","1506787327","UA","UKR","UKRAINE" -"1506787328","1506789375","ME","MNE","MONTENEGRO" -"1506789376","1506791423","DE","DEU","GERMANY" -"1506791424","1506793471","GB","GBR","UNITED KINGDOM" -"1506793472","1506795519","RU","RUS","RUSSIAN FEDERATION" -"1506795520","1506797567","IE","IRL","IRELAND" -"1506797568","1506799615","ES","ESP","SPAIN" -"1506799616","1506801663","LV","LVA","LATVIA" -"1506801664","1506803135","DE","DEU","GERMANY" -"1506803136","1506803151","CH","CHE","SWITZERLAND" -"1506803152","1506803711","DE","DEU","GERMANY" -"1506803712","1506869247","RU","RUS","RUSSIAN FEDERATION" -"1506869248","1506934783","UA","UKR","UKRAINE" -"1506934784","1507000319","GR","GRC","GREECE" -"1507000320","1507065855","QA","QAT","QATAR" -"1507065856","1507131391","SI","SVN","SLOVENIA" -"1507131392","1507196927","GB","GBR","UNITED KINGDOM" -"1507196928","1507262463","PT","PRT","PORTUGAL" -"1507262464","1507327999","BG","BGR","BULGARIA" -"1507328000","1507336447","RS","SRB","SERBIA" -"1507336448","1507336511","CS","SCG","SERBIA AND MONTENEGRO" -"1507336512","1507341727","RS","SRB","SERBIA" -"1507341728","1507341743","CS","SCG","SERBIA AND MONTENEGRO" -"1507341744","1507342959","RS","SRB","SERBIA" -"1507342960","1507342967","CS","SCG","SERBIA AND MONTENEGRO" -"1507342968","1507343071","RS","SRB","SERBIA" -"1507343072","1507343103","CS","SCG","SERBIA AND MONTENEGRO" -"1507343104","1507360767","RS","SRB","SERBIA" -"1507360768","1507377151","CS","SCG","SERBIA AND MONTENEGRO" -"1507377152","1507393535","RS","SRB","SERBIA" -"1507393536","1507459071","CH","CHE","SWITZERLAND" -"1507459072","1507524607","KZ","KAZ","KAZAKHSTAN" -"1507524608","1507590143","EE","EST","ESTONIA" -"1507590144","1507655679","NL","NLD","NETHERLANDS" -"1507655680","1507659119","DE","DEU","GERMANY" -"1507659120","1507659135","TR","TUR","TURKEY" -"1507659136","1507659775","DE","DEU","GERMANY" -"1507659776","1507663871","RU","RUS","RUSSIAN FEDERATION" -"1507663872","1507664127","IT","ITA","ITALY" -"1507664128","1507664383","GR","GRC","GREECE" -"1507664384","1507664767","DE","DEU","GERMANY" -"1507664768","1507664895","US","USA","UNITED STATES" -"1507664896","1507665407","GR","GRC","GREECE" -"1507665408","1507665663","IT","ITA","ITALY" -"1507665664","1507666431","US","USA","UNITED STATES" -"1507666432","1507666559","GR","GRC","GREECE" -"1507666560","1507666591","FR","FRA","FRANCE" -"1507666592","1507666639","GR","GRC","GREECE" -"1507666640","1507666687","IT","ITA","ITALY" -"1507666688","1507666943","GB","GBR","UNITED KINGDOM" -"1507666944","1507667455","IT","ITA","ITALY" -"1507667456","1507667711","DE","DEU","GERMANY" -"1507667712","1507667967","US","USA","UNITED STATES" -"1507667968","1507672063","RU","RUS","RUSSIAN FEDERATION" -"1507672064","1507676159","EE","EST","ESTONIA" -"1507676160","1507680255","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1507680256","1507684351","NO","NOR","NORWAY" -"1507684352","1507688447","LV","LVA","LATVIA" -"1507688448","1507696639","IT","ITA","ITALY" -"1507696640","1507700735","DK","DNK","DENMARK" -"1507700736","1507704831","NL","NLD","NETHERLANDS" -"1507704832","1507708927","RU","RUS","RUSSIAN FEDERATION" -"1507708928","1507713023","CZ","CZE","CZECH REPUBLIC" -"1507713024","1507717119","RU","RUS","RUSSIAN FEDERATION" -"1507717120","1507717631","SE","SWE","SWEDEN" -"1507717632","1507718911","NO","NOR","NORWAY" -"1507718912","1507721215","SE","SWE","SWEDEN" -"1507721216","1507753983","GB","GBR","UNITED KINGDOM" -"1507753984","1507819519","RU","RUS","RUSSIAN FEDERATION" -"1507819520","1507852287","HU","HUN","HUNGARY" -"1507852288","1508114431","FR","FRA","FRANCE" -"1508114432","1508376575","PL","POL","POLAND" -"1508376576","1508392959","GE","GEO","GEORGIA" -"1508392960","1508442111","RU","RUS","RUSSIAN FEDERATION" -"1508442112","1508458495","DK","DNK","DENMARK" -"1508458496","1508474879","RU","RUS","RUSSIAN FEDERATION" -"1508474880","1508479263","CZ","CZE","CZECH REPUBLIC" -"1508479264","1508479295","GB","GBR","UNITED KINGDOM" -"1508479296","1508486463","CZ","CZE","CZECH REPUBLIC" -"1508486464","1508486527","DE","DEU","GERMANY" -"1508486528","1508491263","CZ","CZE","CZECH REPUBLIC" -"1508491264","1508507647","SE","SWE","SWEDEN" -"1508507648","1508521535","GB","GBR","UNITED KINGDOM" -"1508521536","1508521551","IE","IRL","IRELAND" -"1508521552","1508524031","GB","GBR","UNITED KINGDOM" -"1508524032","1508540415","IE","IRL","IRELAND" -"1508540416","1508556799","FR","FRA","FRANCE" -"1508556800","1508573183","PL","POL","POLAND" -"1508573184","1508573255","CZ","CZE","CZECH REPUBLIC" -"1508573256","1508573259","SK","SVK","SLOVAKIA" -"1508573260","1508589567","CZ","CZE","CZECH REPUBLIC" -"1508589568","1508605951","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1508605952","1508622335","RU","RUS","RUSSIAN FEDERATION" -"1508622336","1508638719","EE","EST","ESTONIA" -"1508638720","1508639231","SE","SWE","SWEDEN" -"1508639232","1508640767","DK","DNK","DENMARK" -"1508640768","1508641279","SE","SWE","SWEDEN" -"1508641280","1508641535","DK","DNK","DENMARK" -"1508641536","1508642175","SE","SWE","SWEDEN" -"1508642176","1508642303","DK","DNK","DENMARK" -"1508642304","1508642559","SE","SWE","SWEDEN" -"1508642560","1508642815","DK","DNK","DENMARK" -"1508642816","1508646911","SE","SWE","SWEDEN" -"1508646912","1508646927","DK","DNK","DENMARK" -"1508646928","1508646935","SE","SWE","SWEDEN" -"1508646936","1508646991","DK","DNK","DENMARK" -"1508646992","1508648447","SE","SWE","SWEDEN" -"1508648448","1508648703","DK","DNK","DENMARK" -"1508648704","1508650751","SE","SWE","SWEDEN" -"1508650752","1508650815","DK","DNK","DENMARK" -"1508650816","1508651007","SE","SWE","SWEDEN" -"1508651008","1508651135","DK","DNK","DENMARK" -"1508651136","1508652543","SE","SWE","SWEDEN" -"1508652544","1508654079","DK","DNK","DENMARK" -"1508654080","1508655103","SE","SWE","SWEDEN" -"1508655104","1508671487","FI","FIN","FINLAND" -"1508671488","1508687871","CH","CHE","SWITZERLAND" -"1508687872","1508704255","UZ","UZB","UZBEKISTAN" -"1508704256","1508720639","RU","RUS","RUSSIAN FEDERATION" -"1508720640","1508737023","FR","FRA","FRANCE" -"1508737024","1508753407","SA","SAU","SAUDI ARABIA" -"1508753408","1508769791","KG","KGZ","KYRGYZSTAN" -"1508769792","1508786175","PL","POL","POLAND" -"1508786176","1508787199","DE","DEU","GERMANY" -"1508787200","1508787455","ES","ESP","SPAIN" -"1508787456","1508788031","DE","DEU","GERMANY" -"1508788032","1508788063","BE","BEL","BELGIUM" -"1508788064","1508802559","DE","DEU","GERMANY" -"1508802560","1508803183","GB","GBR","UNITED KINGDOM" -"1508803184","1508803199","FR","FRA","FRANCE" -"1508803200","1508804783","GB","GBR","UNITED KINGDOM" -"1508804784","1508804791","DE","DEU","GERMANY" -"1508804792","1508805119","GB","GBR","UNITED KINGDOM" -"1508805120","1508805375","NL","NLD","NETHERLANDS" -"1508805376","1508809263","GB","GBR","UNITED KINGDOM" -"1508809264","1508809271","FR","FRA","FRANCE" -"1508809272","1508818943","GB","GBR","UNITED KINGDOM" -"1508818944","1508835327","RO","ROM","ROMANIA" -"1508835328","1508851711","CZ","CZE","CZECH REPUBLIC" -"1508851712","1508868095","PL","POL","POLAND" -"1508868096","1508884479","RU","RUS","RUSSIAN FEDERATION" -"1508884480","1508900863","DK","DNK","DENMARK" -"1508900864","1509163007","GB","GBR","UNITED KINGDOM" -"1509163008","1509425151","DE","DEU","GERMANY" -"1509425152","1509429247","NO","NOR","NORWAY" -"1509429248","1509433343","GB","GBR","UNITED KINGDOM" -"1509433344","1509437439","CH","CHE","SWITZERLAND" -"1509437440","1509443583","GB","GBR","UNITED KINGDOM" -"1509443584","1509445631","FR","FRA","FRANCE" -"1509445632","1509449727","LV","LVA","LATVIA" -"1509449728","1509453823","ES","ESP","SPAIN" -"1509453824","1509457919","RU","RUS","RUSSIAN FEDERATION" -"1509457920","1509462015","GB","GBR","UNITED KINGDOM" -"1509462016","1509465599","LI","LIE","LIECHTENSTEIN" -"1509465600","1509466111","CH","CHE","SWITZERLAND" -"1509466112","1509466879","NL","NLD","NETHERLANDS" -"1509466880","1509466911","FR","FRA","FRANCE" -"1509466912","1509467055","NL","NLD","NETHERLANDS" -"1509467056","1509467103","SE","SWE","SWEDEN" -"1509467104","1509467399","NL","NLD","NETHERLANDS" -"1509467400","1509467407","PL","POL","POLAND" -"1509467408","1509467423","NL","NLD","NETHERLANDS" -"1509467424","1509467455","PL","POL","POLAND" -"1509467456","1509467487","NL","NLD","NETHERLANDS" -"1509467488","1509467519","PL","POL","POLAND" -"1509467520","1509467583","BE","BEL","BELGIUM" -"1509467584","1509467839","NL","NLD","NETHERLANDS" -"1509467840","1509467871","PL","POL","POLAND" -"1509467872","1509469439","NL","NLD","NETHERLANDS" -"1509469440","1509469567","SE","SWE","SWEDEN" -"1509469568","1509469887","NL","NLD","NETHERLANDS" -"1509469888","1509469919","MY","MYS","MALAYSIA" -"1509469920","1509470207","NL","NLD","NETHERLANDS" -"1509470208","1509478399","RU","RUS","RUSSIAN FEDERATION" -"1509478400","1509482495","FR","FRA","FRANCE" -"1509482496","1509486591","RU","RUS","RUSSIAN FEDERATION" -"1509486592","1509489407","CZ","CZE","CZECH REPUBLIC" -"1509489408","1509489535","US","USA","UNITED STATES" -"1509489536","1509490687","CZ","CZE","CZECH REPUBLIC" -"1509490688","1509494783","DK","DNK","DENMARK" -"1509494784","1509498879","RU","RUS","RUSSIAN FEDERATION" -"1509498880","1509501151","CH","CHE","SWITZERLAND" -"1509501152","1509501159","GB","GBR","UNITED KINGDOM" -"1509501160","1509502975","CH","CHE","SWITZERLAND" -"1509502976","1509507071","RU","RUS","RUSSIAN FEDERATION" -"1509507072","1509511167","GB","GBR","UNITED KINGDOM" -"1509511168","1509515263","LT","LTU","LITHUANIA" -"1509515264","1509519359","HR","HRV","CROATIA" -"1509519360","1509531647","RU","RUS","RUSSIAN FEDERATION" -"1509531648","1509535743","GB","GBR","UNITED KINGDOM" -"1509535744","1509539839","RU","RUS","RUSSIAN FEDERATION" -"1509539840","1509543935","AM","ARM","ARMENIA" -"1509543936","1509548031","LB","LBN","LEBANON" -"1509548032","1509564415","RU","RUS","RUSSIAN FEDERATION" -"1509564416","1509568511","GB","GBR","UNITED KINGDOM" -"1509568512","1509572607","FI","FIN","FINLAND" -"1509572608","1509576703","NL","NLD","NETHERLANDS" -"1509576704","1509580799","KZ","KAZ","KAZAKHSTAN" -"1509580800","1509584895","CZ","CZE","CZECH REPUBLIC" -"1509584896","1509588479","NO","NOR","NORWAY" -"1509588480","1509588607","GB","GBR","UNITED KINGDOM" -"1509588608","1509588751","NO","NOR","NORWAY" -"1509588752","1509588767","GB","GBR","UNITED KINGDOM" -"1509588768","1509588991","NO","NOR","NORWAY" -"1509588992","1509593087","DE","DEU","GERMANY" -"1509593088","1509601279","RU","RUS","RUSSIAN FEDERATION" -"1509601280","1509605375","NL","NLD","NETHERLANDS" -"1509605376","1509609471","PL","POL","POLAND" -"1509609472","1509617663","RU","RUS","RUSSIAN FEDERATION" -"1509617664","1509621759","CZ","CZE","CZECH REPUBLIC" -"1509621760","1509624319","NL","NLD","NETHERLANDS" -"1509624320","1509624831","US","USA","UNITED STATES" -"1509624832","1509625855","NL","NLD","NETHERLANDS" -"1509625856","1509629951","UA","UKR","UKRAINE" -"1509629952","1509634047","HU","HUN","HUNGARY" -"1509634048","1509638143","FR","FRA","FRANCE" -"1509638144","1509642239","RU","RUS","RUSSIAN FEDERATION" -"1509642240","1509644351","KW","KWT","KUWAIT" -"1509644352","1509644383","GB","GBR","UNITED KINGDOM" -"1509644384","1509646335","KW","KWT","KUWAIT" -"1509646336","1509650431","RU","RUS","RUSSIAN FEDERATION" -"1509650432","1509654527","GB","GBR","UNITED KINGDOM" -"1509654528","1509658623","DE","DEU","GERMANY" -"1509658624","1509666815","RU","RUS","RUSSIAN FEDERATION" -"1509666816","1509670911","IT","ITA","ITALY" -"1509670912","1509675007","GB","GBR","UNITED KINGDOM" -"1509675008","1509677823","NO","NOR","NORWAY" -"1509677824","1509678591","GB","GBR","UNITED KINGDOM" -"1509678592","1509679103","NO","NOR","NORWAY" -"1509679104","1509683199","ES","ESP","SPAIN" -"1509683200","1509687295","CH","CHE","SWITZERLAND" -"1509687296","1509703679","UA","UKR","UKRAINE" -"1509703680","1509720063","RU","RUS","RUSSIAN FEDERATION" -"1509720064","1509736447","TR","TUR","TURKEY" -"1509736448","1509752831","BG","BGR","BULGARIA" -"1509752832","1509769215","RU","RUS","RUSSIAN FEDERATION" -"1509769216","1509785599","SE","SWE","SWEDEN" -"1509785600","1509801983","BG","BGR","BULGARIA" -"1509801984","1509818367","RU","RUS","RUSSIAN FEDERATION" -"1509818368","1509851135","NO","NOR","NORWAY" -"1509851136","1509867519","LV","LVA","LATVIA" -"1509867520","1509883903","RU","RUS","RUSSIAN FEDERATION" -"1509883904","1509900287","NL","NLD","NETHERLANDS" -"1509900288","1509916671","RU","RUS","RUSSIAN FEDERATION" -"1509916672","1509933055","GB","GBR","UNITED KINGDOM" -"1509933056","1509949439","US","USA","UNITED STATES" -"1509949440","1515467007","FR","FRA","FRANCE" -"1515467008","1515467263","ES","ESP","SPAIN" -"1515467264","1515486975","FR","FRA","FRANCE" -"1515486976","1515487231","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"1515487232","1515487359","HK","HKG","HONG KONG" -"1515487360","1515487999","FR","FRA","FRANCE" -"1515488000","1515488255","HK","HKG","HONG KONG" -"1515488256","1515519743","FR","FRA","FRANCE" -"1515519744","1515519999","ES","ESP","SPAIN" -"1515520000","1518338047","FR","FRA","FRANCE" -"1518338048","1518370815","DE","DEU","GERMANY" -"1518370816","1518403583","NL","NLD","NETHERLANDS" -"1518403584","1518436351","SE","SWE","SWEDEN" -"1518436352","1518437375","BE","BEL","BELGIUM" -"1518437376","1518452735","SE","SWE","SWEDEN" -"1518452736","1518460927","AT","AUT","AUSTRIA" -"1518460928","1518501887","SE","SWE","SWEDEN" -"1518501888","1518502911","EE","EST","ESTONIA" -"1518502912","1518503935","SE","SWE","SWEDEN" -"1518503936","1518504959","LT","LTU","LITHUANIA" -"1518504960","1518505983","SE","SWE","SWEDEN" -"1518505984","1518508031","LT","LTU","LITHUANIA" -"1518508032","1518510079","SE","SWE","SWEDEN" -"1518510080","1518514175","LV","LVA","LATVIA" -"1518514176","1518665727","SE","SWE","SWEDEN" -"1518665728","1518727167","RU","RUS","RUSSIAN FEDERATION" -"1518727168","1518731263","SE","SWE","SWEDEN" -"1518731264","1518927871","DE","DEU","GERMANY" -"1518927872","1518944255","RU","RUS","RUSSIAN FEDERATION" -"1518944256","1518960639","SE","SWE","SWEDEN" -"1518960640","1518961663","LT","LTU","LITHUANIA" -"1518961664","1518962175","EE","EST","ESTONIA" -"1518962176","1518962687","LV","LVA","LATVIA" -"1518962688","1518964735","NO","NOR","NORWAY" -"1518964736","1518966783","HR","HRV","CROATIA" -"1518966784","1518967807","SE","SWE","SWEDEN" -"1518967808","1518969855","HR","HRV","CROATIA" -"1518969856","1518993407","SE","SWE","SWEDEN" -"1518993408","1519190015","RU","RUS","RUSSIAN FEDERATION" -"1519190016","1519321087","SE","SWE","SWEDEN" -"1519321088","1519386623","RU","RUS","RUSSIAN FEDERATION" -"1519386624","1519452159","SE","SWE","SWEDEN" -"1519452160","1519517695","NL","NLD","NETHERLANDS" -"1519517696","1519583231","AT","AUT","AUSTRIA" -"1519583232","1519648767","IT","ITA","ITALY" -"1519648768","1519714303","SA","SAU","SAUDI ARABIA" -"1519714304","1519779839","NO","NOR","NORWAY" -"1519779840","1519910911","RU","RUS","RUSSIAN FEDERATION" -"1519910912","1519927295","GB","GBR","UNITED KINGDOM" -"1519927296","1519927311","FR","FRA","FRANCE" -"1519927312","1519927319","BE","BEL","BELGIUM" -"1519927320","1519927327","FR","FRA","FRANCE" -"1519927328","1519927335","ES","ESP","SPAIN" -"1519927336","1519927343","CH","CHE","SWITZERLAND" -"1519927344","1519927351","AT","AUT","AUSTRIA" -"1519927352","1519927375","NL","NLD","NETHERLANDS" -"1519927376","1519927383","CH","CHE","SWITZERLAND" -"1519927384","1519927399","NL","NLD","NETHERLANDS" -"1519927400","1519927407","FR","FRA","FRANCE" -"1519927408","1519927415","AT","AUT","AUSTRIA" -"1519927416","1519927423","BE","BEL","BELGIUM" -"1519927424","1519927431","LU","LUX","LUXEMBOURG" -"1519927432","1519927439","NL","NLD","NETHERLANDS" -"1519927440","1519927447","CH","CHE","SWITZERLAND" -"1519927448","1519927463","FR","FRA","FRANCE" -"1519927464","1519927471","IT","ITA","ITALY" -"1519927472","1519927479","NL","NLD","NETHERLANDS" -"1519927480","1519927503","FR","FRA","FRANCE" -"1519927504","1519927511","NL","NLD","NETHERLANDS" -"1519927512","1519927527","ES","ESP","SPAIN" -"1519927528","1519927535","NL","NLD","NETHERLANDS" -"1519927536","1519927543","FR","FRA","FRANCE" -"1519927544","1519927551","IE","IRL","IRELAND" -"1519927552","1519927559","SE","SWE","SWEDEN" -"1519927560","1519927567","IT","ITA","ITALY" -"1519927568","1519927575","GB","GBR","UNITED KINGDOM" -"1519927576","1519927583","FR","FRA","FRANCE" -"1519927584","1519927591","AT","AUT","AUSTRIA" -"1519927592","1519927607","BE","BEL","BELGIUM" -"1519927608","1519927615","FR","FRA","FRANCE" -"1519927616","1519927631","NL","NLD","NETHERLANDS" -"1519927632","1519927639","CH","CHE","SWITZERLAND" -"1519927640","1519927647","BE","BEL","BELGIUM" -"1519927648","1519927655","FR","FRA","FRANCE" -"1519927656","1519927663","NL","NLD","NETHERLANDS" -"1519927664","1519927671","IT","ITA","ITALY" -"1519927672","1519927679","FI","FIN","FINLAND" -"1519927680","1519927687","IE","IRL","IRELAND" -"1519927688","1519927695","IT","ITA","ITALY" -"1519927696","1519927719","NL","NLD","NETHERLANDS" -"1519927720","1519927727","ES","ESP","SPAIN" -"1519927728","1519927735","FR","FRA","FRANCE" -"1519927736","1519927743","NL","NLD","NETHERLANDS" -"1519927744","1519927751","ES","ESP","SPAIN" -"1519927752","1519927759","IT","ITA","ITALY" -"1519927760","1519927767","ES","ESP","SPAIN" -"1519927768","1519927775","NL","NLD","NETHERLANDS" -"1519927776","1519927783","FR","FRA","FRANCE" -"1519927784","1519927823","GB","GBR","UNITED KINGDOM" -"1519927824","1519927831","BE","BEL","BELGIUM" -"1519927832","1519927855","GB","GBR","UNITED KINGDOM" -"1519927856","1519927863","DK","DNK","DENMARK" -"1519927864","1519927871","FI","FIN","FINLAND" -"1519927872","1519927879","NL","NLD","NETHERLANDS" -"1519927880","1519927895","GB","GBR","UNITED KINGDOM" -"1519927896","1519927903","NL","NLD","NETHERLANDS" -"1519927904","1519928119","GB","GBR","UNITED KINGDOM" -"1519928120","1519928143","NO","NOR","NORWAY" -"1519928144","1519928151","NL","NLD","NETHERLANDS" -"1519928152","1519928183","DK","DNK","DENMARK" -"1519928184","1519928191","GB","GBR","UNITED KINGDOM" -"1519928192","1519928199","SE","SWE","SWEDEN" -"1519928200","1519928247","GB","GBR","UNITED KINGDOM" -"1519928248","1519928255","DK","DNK","DENMARK" -"1519928256","1519929279","GB","GBR","UNITED KINGDOM" -"1519929280","1519929287","NL","NLD","NETHERLANDS" -"1519929288","1519929343","GB","GBR","UNITED KINGDOM" -"1519929344","1519929471","NL","NLD","NETHERLANDS" -"1519929472","1519929503","FI","FIN","FINLAND" -"1519929504","1519929567","NL","NLD","NETHERLANDS" -"1519929568","1519929599","FI","FIN","FINLAND" -"1519929600","1519929759","NL","NLD","NETHERLANDS" -"1519929760","1519929791","CZ","CZE","CZECH REPUBLIC" -"1519929792","1519929792","GB","GBR","UNITED KINGDOM" -"1519929793","1519929823","SE","SWE","SWEDEN" -"1519929824","1519929855","DK","DNK","DENMARK" -"1519929856","1519929951","SE","SWE","SWEDEN" -"1519929952","1519930111","BE","BEL","BELGIUM" -"1519930112","1519930207","NL","NLD","NETHERLANDS" -"1519930208","1519930239","BE","BEL","BELGIUM" -"1519930240","1519930271","NL","NLD","NETHERLANDS" -"1519930272","1519930335","DK","DNK","DENMARK" -"1519930336","1519930367","SE","SWE","SWEDEN" -"1519930368","1519930399","DK","DNK","DENMARK" -"1519930400","1519930527","NL","NLD","NETHERLANDS" -"1519930528","1519930559","NO","NOR","NORWAY" -"1519930560","1519930591","SE","SWE","SWEDEN" -"1519930592","1519930655","NO","NOR","NORWAY" -"1519930656","1519930751","NL","NLD","NETHERLANDS" -"1519930752","1519930783","BE","BEL","BELGIUM" -"1519930784","1519930911","NL","NLD","NETHERLANDS" -"1519930912","1519930943","CZ","CZE","CZECH REPUBLIC" -"1519930944","1519930975","BE","BEL","BELGIUM" -"1519930976","1519931007","NL","NLD","NETHERLANDS" -"1519931008","1519931039","BE","BEL","BELGIUM" -"1519931040","1519931071","DK","DNK","DENMARK" -"1519931072","1519931103","NO","NOR","NORWAY" -"1519931104","1519931135","SE","SWE","SWEDEN" -"1519931136","1519931231","NL","NLD","NETHERLANDS" -"1519931232","1519931263","NO","NOR","NORWAY" -"1519931264","1519931359","GB","GBR","UNITED KINGDOM" -"1519931360","1519931375","BE","BEL","BELGIUM" -"1519931376","1519931391","GB","GBR","UNITED KINGDOM" -"1519931392","1519934463","NL","NLD","NETHERLANDS" -"1519934464","1519934975","GB","GBR","UNITED KINGDOM" -"1519934976","1519935487","NL","NLD","NETHERLANDS" -"1519935488","1519935615","FR","FRA","FRANCE" -"1519935616","1519935743","NL","NLD","NETHERLANDS" -"1519935744","1519935935","FI","FIN","FINLAND" -"1519935936","1519936191","BE","BEL","BELGIUM" -"1519936192","1519936255","DK","DNK","DENMARK" -"1519936256","1519936383","NL","NLD","NETHERLANDS" -"1519936384","1519936447","BE","BEL","BELGIUM" -"1519936448","1519936511","NO","NOR","NORWAY" -"1519936512","1519936575","SK","SVK","SLOVAKIA" -"1519936576","1519936767","DK","DNK","DENMARK" -"1519936768","1519936895","SE","SWE","SWEDEN" -"1519936896","1519937023","BE","BEL","BELGIUM" -"1519937024","1519937279","DK","DNK","DENMARK" -"1519937280","1519937343","NL","NLD","NETHERLANDS" -"1519937344","1519937407","SE","SWE","SWEDEN" -"1519937408","1519937471","NO","NOR","NORWAY" -"1519937472","1519937535","GB","GBR","UNITED KINGDOM" -"1519937536","1519937727","NL","NLD","NETHERLANDS" -"1519937728","1519938559","GB","GBR","UNITED KINGDOM" -"1519938560","1519939583","NL","NLD","NETHERLANDS" -"1519939584","1519939615","NO","NOR","NORWAY" -"1519939616","1519939647","NL","NLD","NETHERLANDS" -"1519939648","1519939679","SE","SWE","SWEDEN" -"1519939680","1519939711","SK","SVK","SLOVAKIA" -"1519939712","1519939743","NL","NLD","NETHERLANDS" -"1519939744","1519939807","BE","BEL","BELGIUM" -"1519939808","1519939839","NL","NLD","NETHERLANDS" -"1519939840","1519940095","GB","GBR","UNITED KINGDOM" -"1519940096","1519940159","NL","NLD","NETHERLANDS" -"1519940160","1519940191","FI","FIN","FINLAND" -"1519940192","1519940223","SE","SWE","SWEDEN" -"1519940224","1519943679","GB","GBR","UNITED KINGDOM" -"1519943680","1519976447","AT","AUT","AUSTRIA" -"1519976448","1520009215","DE","DEU","GERMANY" -"1520009216","1520041983","SY","SYR","SYRIAN ARAB REPUBLIC" -"1520041984","1520074751","RU","RUS","RUSSIAN FEDERATION" -"1520074752","1520107519","BG","BGR","BULGARIA" -"1520107520","1520140287","GB","GBR","UNITED KINGDOM" -"1520140288","1520173055","RU","RUS","RUSSIAN FEDERATION" -"1520173056","1520205823","PL","POL","POLAND" -"1520205824","1520230399","RU","RUS","RUSSIAN FEDERATION" -"1520230400","1520230911","NL","NLD","NETHERLANDS" -"1520230912","1520231935","RU","RUS","RUSSIAN FEDERATION" -"1520231936","1520232191","NL","NLD","NETHERLANDS" -"1520232192","1520232959","RU","RUS","RUSSIAN FEDERATION" -"1520232960","1520233471","NL","NLD","NETHERLANDS" -"1520233472","1520271359","RU","RUS","RUSSIAN FEDERATION" -"1520271360","1520304127","SI","SVN","SLOVENIA" -"1520304128","1520435199","TR","TUR","TURKEY" -"1520435200","1521483775","ES","ESP","SPAIN" -"1521483776","1522008063","CZ","CZE","CZECH REPUBLIC" -"1522008064","1522139135","DK","DNK","DENMARK" -"1522139136","1522270207","DE","DEU","GERMANY" -"1522270208","1522401279","RU","RUS","RUSSIAN FEDERATION" -"1522401280","1522532351","EE","EST","ESTONIA" -"1522532352","1524629503","GB","GBR","UNITED KINGDOM" -"1524629504","1525678079","SE","SWE","SWEDEN" -"1525678080","1526726655","GB","GBR","UNITED KINGDOM" -"1526726656","1531183103","DE","DEU","GERMANY" -"1531183104","1531445247","FR","FRA","FRANCE" -"1531445248","1531707391","AE","ARE","UNITED ARAB EMIRATES" -"1531707392","1531969535","RU","RUS","RUSSIAN FEDERATION" -"1531969536","1532100607","IT","ITA","ITALY" -"1532100608","1532199935","HU","HUN","HUNGARY" -"1532199936","1532200959","RS","SRB","SERBIA" -"1532200960","1532231679","HU","HUN","HUNGARY" -"1532231680","1532362751","GB","GBR","UNITED KINGDOM" -"1532362752","1532493823","BE","BEL","BELGIUM" -"1532493824","1532559359","FR","FRA","FRANCE" -"1532559360","1532624895","DE","DEU","GERMANY" -"1532624896","1532626943","ES","ESP","SPAIN" -"1532626944","1532631039","UA","UKR","UKRAINE" -"1532631040","1532633087","SE","SWE","SWEDEN" -"1532633088","1532635135","RU","RUS","RUSSIAN FEDERATION" -"1532635136","1532637183","NO","NOR","NORWAY" -"1532637184","1532639231","FI","FIN","FINLAND" -"1532639232","1532641279","PL","POL","POLAND" -"1532641280","1532643327","NO","NOR","NORWAY" -"1532643328","1532645375","PL","POL","POLAND" -"1532645376","1532647423","RU","RUS","RUSSIAN FEDERATION" -"1532647424","1532649471","PL","POL","POLAND" -"1532649472","1532651519","FR","FRA","FRANCE" -"1532651520","1532653567","NO","NOR","NORWAY" -"1532653568","1532655615","PL","POL","POLAND" -"1532655616","1532657663","RO","ROM","ROMANIA" -"1532657664","1532661759","IL","ISR","ISRAEL" -"1532661760","1532665855","DE","DEU","GERMANY" -"1532665856","1532674047","PL","POL","POLAND" -"1532674048","1532682239","UA","UKR","UKRAINE" -"1532682240","1532690431","LV","LVA","LATVIA" -"1532690432","1532755967","FR","FRA","FRANCE" -"1532755968","1532821503","BG","BGR","BULGARIA" -"1532821504","1532887039","TR","TUR","TURKEY" -"1532887040","1532952575","PL","POL","POLAND" -"1532952576","1533018111","SE","SWE","SWEDEN" -"1533018112","1533149183","DE","DEU","GERMANY" -"1533149184","1533280255","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1533280256","1533411327","DK","DNK","DENMARK" -"1533411328","1533413375","GB","GBR","UNITED KINGDOM" -"1533413376","1533415423","DE","DEU","GERMANY" -"1533415424","1533417471","SA","SAU","SAUDI ARABIA" -"1533417472","1533419519","NO","NOR","NORWAY" -"1533419520","1533419775","KW","KWT","KUWAIT" -"1533419776","1533420031","SA","SAU","SAUDI ARABIA" -"1533420032","1533420287","KW","KWT","KUWAIT" -"1533420288","1533420543","AE","ARE","UNITED ARAB EMIRATES" -"1533420544","1533421567","KW","KWT","KUWAIT" -"1533421568","1533423615","NL","NLD","NETHERLANDS" -"1533423616","1533425663","IT","ITA","ITALY" -"1533425664","1533428479","GB","GBR","UNITED KINGDOM" -"1533428480","1533428735","US","USA","UNITED STATES" -"1533428736","1533429759","GB","GBR","UNITED KINGDOM" -"1533429760","1533431807","IT","ITA","ITALY" -"1533431808","1533433855","IE","IRL","IRELAND" -"1533433856","1533435903","DK","DNK","DENMARK" -"1533435904","1533437951","CZ","CZE","CZECH REPUBLIC" -"1533437952","1533439999","RU","RUS","RUSSIAN FEDERATION" -"1533440000","1533441519","PL","POL","POLAND" -"1533441520","1533441535","CH","CHE","SWITZERLAND" -"1533441536","1533442047","PL","POL","POLAND" -"1533442048","1533444095","AE","ARE","UNITED ARAB EMIRATES" -"1533444096","1533446143","IT","ITA","ITALY" -"1533446144","1533448191","DE","DEU","GERMANY" -"1533448192","1533450239","KW","KWT","KUWAIT" -"1533450240","1533452287","RU","RUS","RUSSIAN FEDERATION" -"1533452288","1533454335","TR","TUR","TURKEY" -"1533454336","1533456383","CS","SCG","SERBIA AND MONTENEGRO" -"1533456384","1533458431","UA","UKR","UKRAINE" -"1533458432","1533460479","GB","GBR","UNITED KINGDOM" -"1533460480","1533462527","NL","NLD","NETHERLANDS" -"1533462528","1533464575","RU","RUS","RUSSIAN FEDERATION" -"1533464576","1533466623","NL","NLD","NETHERLANDS" -"1533466624","1533468671","RU","RUS","RUSSIAN FEDERATION" -"1533468672","1533470719","RS","SRB","SERBIA" -"1533470720","1533472767","KW","KWT","KUWAIT" -"1533472768","1533474815","ES","ESP","SPAIN" -"1533474816","1533476863","FR","FRA","FRANCE" -"1533476864","1533478911","IE","IRL","IRELAND" -"1533478912","1533478943","CS","SCG","SERBIA AND MONTENEGRO" -"1533478944","1533480959","RS","SRB","SERBIA" -"1533480960","1533483007","NL","NLD","NETHERLANDS" -"1533483008","1533485055","AM","ARM","ARMENIA" -"1533485056","1533485567","GB","GBR","UNITED KINGDOM" -"1533485568","1533485823","DE","DEU","GERMANY" -"1533485824","1533486335","SE","SWE","SWEDEN" -"1533486336","1533486591","NO","NOR","NORWAY" -"1533486592","1533486847","DK","DNK","DENMARK" -"1533486848","1533487103","FI","FIN","FINLAND" -"1533487104","1533487359","FR","FRA","FRANCE" -"1533487360","1533487615","US","USA","UNITED STATES" -"1533487616","1533487871","JP","JPN","JAPAN" -"1533487872","1533489151","FR","FRA","FRANCE" -"1533489152","1533491199","ES","ESP","SPAIN" -"1533491200","1533493247","AM","ARM","ARMENIA" -"1533493248","1533499391","RU","RUS","RUSSIAN FEDERATION" -"1533499392","1533501439","MT","MLT","MALTA" -"1533501440","1533503487","LT","LTU","LITHUANIA" -"1533503488","1533505535","RU","RUS","RUSSIAN FEDERATION" -"1533505536","1533507583","DE","DEU","GERMANY" -"1533507584","1533509631","UA","UKR","UKRAINE" -"1533509632","1533511679","GB","GBR","UNITED KINGDOM" -"1533511680","1533512383","FR","FRA","FRANCE" -"1533512384","1533512447","DE","DEU","GERMANY" -"1533512448","1533513215","FR","FRA","FRANCE" -"1533513216","1533513471","GB","GBR","UNITED KINGDOM" -"1533513472","1533513727","DE","DEU","GERMANY" -"1533513728","1533515775","KW","KWT","KUWAIT" -"1533515776","1533517823","RU","RUS","RUSSIAN FEDERATION" -"1533517824","1533519871","CZ","CZE","CZECH REPUBLIC" -"1533519872","1533526015","GB","GBR","UNITED KINGDOM" -"1533526016","1533532159","RU","RUS","RUSSIAN FEDERATION" -"1533532160","1533534207","GB","GBR","UNITED KINGDOM" -"1533534208","1533536255","RU","RUS","RUSSIAN FEDERATION" -"1533536256","1533538303","FR","FRA","FRANCE" -"1533538304","1533540351","DE","DEU","GERMANY" -"1533540352","1533542399","AT","AUT","AUSTRIA" -"1533542400","1534066687","GB","GBR","UNITED KINGDOM" -"1534066688","1534129151","AT","AUT","AUSTRIA" -"1534129152","1534129407","AE","ARE","UNITED ARAB EMIRATES" -"1534129408","1534328831","AT","AUT","AUSTRIA" -"1534328832","1534459903","ES","ESP","SPAIN" -"1534459904","1534590975","AT","AUT","AUSTRIA" -"1534590976","1534656511","HU","HUN","HUNGARY" -"1534656512","1534711807","FR","FRA","FRANCE" -"1534711808","1534712831","BE","BEL","BELGIUM" -"1534712832","1534713855","FR","FRA","FRANCE" -"1534713856","1534713887","PL","POL","POLAND" -"1534713888","1534713935","FR","FRA","FRANCE" -"1534713936","1534713951","GB","GBR","UNITED KINGDOM" -"1534713952","1534713983","FR","FRA","FRANCE" -"1534713984","1534713999","PL","POL","POLAND" -"1534714000","1534714015","FR","FRA","FRANCE" -"1534714016","1534714031","DE","DEU","GERMANY" -"1534714032","1534714047","BE","BEL","BELGIUM" -"1534714048","1534714063","FR","FRA","FRANCE" -"1534714064","1534714079","ES","ESP","SPAIN" -"1534714080","1534714095","FR","FRA","FRANCE" -"1534714096","1534714111","BE","BEL","BELGIUM" -"1534714112","1534714127","ES","ESP","SPAIN" -"1534714128","1534714143","BE","BEL","BELGIUM" -"1534714144","1534714159","GB","GBR","UNITED KINGDOM" -"1534714160","1534714259","FR","FRA","FRANCE" -"1534714260","1534714271","PL","POL","POLAND" -"1534714272","1534714287","IT","ITA","ITALY" -"1534714288","1534714303","ES","ESP","SPAIN" -"1534714304","1534714307","GB","GBR","UNITED KINGDOM" -"1534714308","1534714311","ES","ESP","SPAIN" -"1534714312","1534714315","FR","FRA","FRANCE" -"1534714316","1534714319","GB","GBR","UNITED KINGDOM" -"1534714320","1534714351","FR","FRA","FRANCE" -"1534714352","1534714367","CH","CHE","SWITZERLAND" -"1534714368","1534714383","GB","GBR","UNITED KINGDOM" -"1534714384","1534714399","FR","FRA","FRANCE" -"1534714400","1534714415","ES","ESP","SPAIN" -"1534714416","1534714431","GB","GBR","UNITED KINGDOM" -"1534714432","1534714463","FR","FRA","FRANCE" -"1534714464","1534714495","GB","GBR","UNITED KINGDOM" -"1534714496","1534714511","FR","FRA","FRANCE" -"1534714512","1534714527","PL","POL","POLAND" -"1534714528","1534714543","GB","GBR","UNITED KINGDOM" -"1534714544","1534714547","FR","FRA","FRANCE" -"1534714548","1534714551","ES","ESP","SPAIN" -"1534714552","1534714559","GB","GBR","UNITED KINGDOM" -"1534714560","1534714575","NL","NLD","NETHERLANDS" -"1534714576","1534714703","FR","FRA","FRANCE" -"1534714704","1534714719","CH","CHE","SWITZERLAND" -"1534714720","1534714751","BE","BEL","BELGIUM" -"1534714752","1534714767","DE","DEU","GERMANY" -"1534714768","1534714783","FR","FRA","FRANCE" -"1534714784","1534714799","PL","POL","POLAND" -"1534714800","1534714847","FR","FRA","FRANCE" -"1534714848","1534714863","CH","CHE","SWITZERLAND" -"1534714864","1534714871","FR","FRA","FRANCE" -"1534714872","1534714875","DE","DEU","GERMANY" -"1534714876","1534714879","FR","FRA","FRANCE" -"1534714880","1534714895","IT","ITA","ITALY" -"1534714896","1534714911","FR","FRA","FRANCE" -"1534714912","1534714927","DE","DEU","GERMANY" -"1534714928","1534715039","FR","FRA","FRANCE" -"1534715040","1534715055","GB","GBR","UNITED KINGDOM" -"1534715056","1534715071","PL","POL","POLAND" -"1534715072","1534715135","FR","FRA","FRANCE" -"1534715136","1534715139","PL","POL","POLAND" -"1534715140","1534715143","GB","GBR","UNITED KINGDOM" -"1534715144","1534715151","NL","NLD","NETHERLANDS" -"1534715152","1534715167","FR","FRA","FRANCE" -"1534715168","1534715183","NL","NLD","NETHERLANDS" -"1534715184","1534715199","FR","FRA","FRANCE" -"1534715200","1534715203","DE","DEU","GERMANY" -"1534715204","1534715207","FR","FRA","FRANCE" -"1534715208","1534715215","BE","BEL","BELGIUM" -"1534715216","1534715263","FR","FRA","FRANCE" -"1534715264","1534715279","ES","ESP","SPAIN" -"1534715280","1534715295","FR","FRA","FRANCE" -"1534715296","1534715311","ES","ESP","SPAIN" -"1534715312","1534715315","FR","FRA","FRANCE" -"1534715316","1534715319","ES","ESP","SPAIN" -"1534715320","1534715327","PL","POL","POLAND" -"1534715328","1534715375","FR","FRA","FRANCE" -"1534715376","1534715391","ES","ESP","SPAIN" -"1534715392","1534715407","PL","POL","POLAND" -"1534715408","1534715423","ES","ESP","SPAIN" -"1534715424","1534715439","PL","POL","POLAND" -"1534715440","1534715447","DE","DEU","GERMANY" -"1534715448","1534715451","FR","FRA","FRANCE" -"1534715452","1534715487","PL","POL","POLAND" -"1534715488","1534715503","ES","ESP","SPAIN" -"1534715504","1534715519","CH","CHE","SWITZERLAND" -"1534715520","1534715551","FR","FRA","FRANCE" -"1534715552","1534715599","ES","ESP","SPAIN" -"1534715600","1534715615","BE","BEL","BELGIUM" -"1534715616","1534715631","FR","FRA","FRANCE" -"1534715632","1534715647","ES","ESP","SPAIN" -"1534715648","1534715663","PL","POL","POLAND" -"1534715664","1534715679","ES","ESP","SPAIN" -"1534715680","1534715695","GB","GBR","UNITED KINGDOM" -"1534715696","1534715731","FR","FRA","FRANCE" -"1534715732","1534715735","GB","GBR","UNITED KINGDOM" -"1534715736","1534715759","PL","POL","POLAND" -"1534715760","1534715807","ES","ESP","SPAIN" -"1534715808","1534715871","FR","FRA","FRANCE" -"1534715872","1534715887","DE","DEU","GERMANY" -"1534715888","1534715919","FR","FRA","FRANCE" -"1534715920","1534715935","ES","ESP","SPAIN" -"1534715936","1534715999","FR","FRA","FRANCE" -"1534716000","1534716007","PL","POL","POLAND" -"1534716008","1534716015","ES","ESP","SPAIN" -"1534716016","1534716047","FR","FRA","FRANCE" -"1534716048","1534716063","GB","GBR","UNITED KINGDOM" -"1534716064","1534716143","FR","FRA","FRANCE" -"1534716144","1534716159","PL","POL","POLAND" -"1534716160","1534716163","IT","ITA","ITALY" -"1534716164","1534716167","FR","FRA","FRANCE" -"1534716168","1534716175","IE","IRL","IRELAND" -"1534716176","1534716191","FR","FRA","FRANCE" -"1534716192","1534716223","DE","DEU","GERMANY" -"1534716224","1534716239","FR","FRA","FRANCE" -"1534716240","1534716255","GB","GBR","UNITED KINGDOM" -"1534716256","1534716319","FR","FRA","FRANCE" -"1534716320","1534716359","PL","POL","POLAND" -"1534716360","1534716363","CZ","CZE","CZECH REPUBLIC" -"1534716364","1534716367","GB","GBR","UNITED KINGDOM" -"1534716368","1534716463","FR","FRA","FRANCE" -"1534716464","1534716479","GB","GBR","UNITED KINGDOM" -"1534716480","1534716495","ES","ESP","SPAIN" -"1534716496","1534716511","FR","FRA","FRANCE" -"1534716512","1534716527","DE","DEU","GERMANY" -"1534716528","1534716591","FR","FRA","FRANCE" -"1534716592","1534716607","PL","POL","POLAND" -"1534716608","1534716655","FR","FRA","FRANCE" -"1534716656","1534716663","IE","IRL","IRELAND" -"1534716664","1534716671","FR","FRA","FRANCE" -"1534716672","1534716687","PL","POL","POLAND" -"1534716688","1534716703","FR","FRA","FRANCE" -"1534716704","1534716735","ES","ESP","SPAIN" -"1534716736","1534716879","FR","FRA","FRANCE" -"1534716880","1534716895","BE","BEL","BELGIUM" -"1534716896","1534716927","FR","FRA","FRANCE" -"1534716928","1534716943","DE","DEU","GERMANY" -"1534716944","1534716991","FR","FRA","FRANCE" -"1534716992","1534717007","DE","DEU","GERMANY" -"1534717008","1534717023","FR","FRA","FRANCE" -"1534717024","1534717055","PL","POL","POLAND" -"1534717056","1534717119","FR","FRA","FRANCE" -"1534717120","1534717135","IT","ITA","ITALY" -"1534717136","1534717215","FR","FRA","FRANCE" -"1534717216","1534717231","NL","NLD","NETHERLANDS" -"1534717232","1534717263","FR","FRA","FRANCE" -"1534717264","1534717279","ES","ESP","SPAIN" -"1534717280","1534717315","FR","FRA","FRANCE" -"1534717316","1534717319","IE","IRL","IRELAND" -"1534717320","1534717323","GB","GBR","UNITED KINGDOM" -"1534717324","1534717343","FR","FRA","FRANCE" -"1534717344","1534717359","GB","GBR","UNITED KINGDOM" -"1534717360","1534717375","PL","POL","POLAND" -"1534717376","1534717503","FR","FRA","FRANCE" -"1534717504","1534717519","DE","DEU","GERMANY" -"1534717520","1534717535","FR","FRA","FRANCE" -"1534717536","1534717551","DE","DEU","GERMANY" -"1534717552","1534717567","CZ","CZE","CZECH REPUBLIC" -"1534717568","1534717583","PL","POL","POLAND" -"1534717584","1534717647","FR","FRA","FRANCE" -"1534717648","1534717655","BE","BEL","BELGIUM" -"1534717656","1534717659","ES","ESP","SPAIN" -"1534717660","1534717663","FR","FRA","FRANCE" -"1534717664","1534717679","GB","GBR","UNITED KINGDOM" -"1534717680","1534717695","ES","ESP","SPAIN" -"1534717696","1534717759","PL","POL","POLAND" -"1534717760","1534717823","ES","ESP","SPAIN" -"1534717824","1534717855","BE","BEL","BELGIUM" -"1534717856","1534717871","NL","NLD","NETHERLANDS" -"1534717872","1534717903","FR","FRA","FRANCE" -"1534717904","1534717919","GB","GBR","UNITED KINGDOM" -"1534717920","1534717935","ES","ESP","SPAIN" -"1534717936","1534717951","IT","ITA","ITALY" -"1534717952","1534717967","BE","BEL","BELGIUM" -"1534717968","1534717983","IT","ITA","ITALY" -"1534717984","1534718015","FR","FRA","FRANCE" -"1534718016","1534718031","BE","BEL","BELGIUM" -"1534718032","1534718063","FR","FRA","FRANCE" -"1534718064","1534718079","IT","ITA","ITALY" -"1534718080","1534718087","ES","ESP","SPAIN" -"1534718088","1534718095","CZ","CZE","CZECH REPUBLIC" -"1534718096","1534718111","FR","FRA","FRANCE" -"1534718112","1534718127","IT","ITA","ITALY" -"1534718128","1534718143","ES","ESP","SPAIN" -"1534718144","1534718207","FR","FRA","FRANCE" -"1534718208","1534718271","ES","ESP","SPAIN" -"1534718272","1534718399","FR","FRA","FRANCE" -"1534718400","1534718415","DE","DEU","GERMANY" -"1534718416","1534718431","FR","FRA","FRANCE" -"1534718432","1534718447","PL","POL","POLAND" -"1534718448","1534718559","FR","FRA","FRANCE" -"1534718560","1534718575","BE","BEL","BELGIUM" -"1534718576","1534718687","FR","FRA","FRANCE" -"1534718688","1534718703","PL","POL","POLAND" -"1534718704","1534718751","FR","FRA","FRANCE" -"1534718752","1534718767","PL","POL","POLAND" -"1534718768","1534718799","FR","FRA","FRANCE" -"1534718800","1534718815","ES","ESP","SPAIN" -"1534718816","1534718831","GB","GBR","UNITED KINGDOM" -"1534718832","1534718847","FR","FRA","FRANCE" -"1534718848","1534718911","BE","BEL","BELGIUM" -"1534718912","1534718927","IT","ITA","ITALY" -"1534718928","1534718943","FR","FRA","FRANCE" -"1534718944","1534718959","PL","POL","POLAND" -"1534718960","1534718975","ES","ESP","SPAIN" -"1534718976","1534719039","FR","FRA","FRANCE" -"1534719040","1534719167","BE","BEL","BELGIUM" -"1534719168","1534719215","PL","POL","POLAND" -"1534719216","1534719359","FR","FRA","FRANCE" -"1534719360","1534719375","PL","POL","POLAND" -"1534719376","1534719391","DE","DEU","GERMANY" -"1534719392","1534719395","CH","CHE","SWITZERLAND" -"1534719396","1534719399","GB","GBR","UNITED KINGDOM" -"1534719400","1534719403","IT","ITA","ITALY" -"1534719404","1534719423","FR","FRA","FRANCE" -"1534719424","1534719439","DE","DEU","GERMANY" -"1534719440","1534719455","PL","POL","POLAND" -"1534719456","1534719471","FR","FRA","FRANCE" -"1534719472","1534719487","GB","GBR","UNITED KINGDOM" -"1534719488","1534719631","FR","FRA","FRANCE" -"1534719632","1534719639","ES","ESP","SPAIN" -"1534719640","1534719643","GB","GBR","UNITED KINGDOM" -"1534719644","1534719647","FR","FRA","FRANCE" -"1534719648","1534719655","ES","ESP","SPAIN" -"1534719656","1534719663","FR","FRA","FRANCE" -"1534719664","1534719679","PL","POL","POLAND" -"1534719680","1534719695","GB","GBR","UNITED KINGDOM" -"1534719696","1534719759","FR","FRA","FRANCE" -"1534719760","1534719775","IT","ITA","ITALY" -"1534719776","1534719823","FR","FRA","FRANCE" -"1534719824","1534719839","CH","CHE","SWITZERLAND" -"1534719840","1534719871","FR","FRA","FRANCE" -"1534719872","1534719887","PL","POL","POLAND" -"1534719888","1534719951","FR","FRA","FRANCE" -"1534719952","1534719967","DE","DEU","GERMANY" -"1534719968","1534719983","PL","POL","POLAND" -"1534719984","1534719999","FR","FRA","FRANCE" -"1534720000","1534720015","PL","POL","POLAND" -"1534720016","1534720031","GB","GBR","UNITED KINGDOM" -"1534720032","1534720047","DE","DEU","GERMANY" -"1534720048","1534720063","ES","ESP","SPAIN" -"1534720064","1534720079","IT","ITA","ITALY" -"1534720080","1534720095","GB","GBR","UNITED KINGDOM" -"1534720096","1534720111","FR","FRA","FRANCE" -"1534720112","1534720127","ES","ESP","SPAIN" -"1534720128","1534720207","FR","FRA","FRANCE" -"1534720208","1534720223","GB","GBR","UNITED KINGDOM" -"1534720224","1534720239","DE","DEU","GERMANY" -"1534720240","1534720255","BE","BEL","BELGIUM" -"1534720256","1534720287","PL","POL","POLAND" -"1534720288","1534720447","FR","FRA","FRANCE" -"1534720448","1534720463","GB","GBR","UNITED KINGDOM" -"1534720464","1534720479","FR","FRA","FRANCE" -"1534720480","1534720495","GB","GBR","UNITED KINGDOM" -"1534720496","1534720511","PL","POL","POLAND" -"1534720512","1534720575","FR","FRA","FRANCE" -"1534720576","1534720591","ES","ESP","SPAIN" -"1534720592","1534720655","FR","FRA","FRANCE" -"1534720656","1534720671","PL","POL","POLAND" -"1534720672","1534720703","FR","FRA","FRANCE" -"1534720704","1534720735","PL","POL","POLAND" -"1534720736","1534720751","FR","FRA","FRANCE" -"1534720752","1534720767","GB","GBR","UNITED KINGDOM" -"1534720768","1534720783","ES","ESP","SPAIN" -"1534720784","1534720799","BE","BEL","BELGIUM" -"1534720800","1534720815","PL","POL","POLAND" -"1534720816","1534720831","FR","FRA","FRANCE" -"1534720832","1534720863","PL","POL","POLAND" -"1534720864","1534720895","FR","FRA","FRANCE" -"1534720896","1534720899","ES","ESP","SPAIN" -"1534720900","1534720903","GB","GBR","UNITED KINGDOM" -"1534720904","1534720959","FR","FRA","FRANCE" -"1534720960","1534720975","ES","ESP","SPAIN" -"1534720976","1534720979","NL","NLD","NETHERLANDS" -"1534720980","1534720983","FR","FRA","FRANCE" -"1534720984","1534720991","PL","POL","POLAND" -"1534720992","1534721007","FR","FRA","FRANCE" -"1534721008","1534721023","ES","ESP","SPAIN" -"1534721024","1534721055","FR","FRA","FRANCE" -"1534721056","1534721063","ES","ESP","SPAIN" -"1534721064","1534721071","FR","FRA","FRANCE" -"1534721072","1534721087","GB","GBR","UNITED KINGDOM" -"1534721088","1534721103","FR","FRA","FRANCE" -"1534721104","1534721107","PL","POL","POLAND" -"1534721108","1534721111","ES","ESP","SPAIN" -"1534721112","1534721115","FR","FRA","FRANCE" -"1534721116","1534721119","BE","BEL","BELGIUM" -"1534721120","1534721135","IT","ITA","ITALY" -"1534721136","1534721183","FR","FRA","FRANCE" -"1534721184","1534721191","LT","LTU","LITHUANIA" -"1534721192","1534721195","FR","FRA","FRANCE" -"1534721196","1534721199","IT","ITA","ITALY" -"1534721200","1534721215","FR","FRA","FRANCE" -"1534721216","1534721223","BE","BEL","BELGIUM" -"1534721224","1534721231","CH","CHE","SWITZERLAND" -"1534721232","1534721247","DE","DEU","GERMANY" -"1534721248","1534721263","FR","FRA","FRANCE" -"1534721264","1534721279","GB","GBR","UNITED KINGDOM" -"1534721280","1534721311","FR","FRA","FRANCE" -"1534721312","1534721319","PL","POL","POLAND" -"1534721320","1534721327","PT","PRT","PORTUGAL" -"1534721328","1534721343","NL","NLD","NETHERLANDS" -"1534721344","1534721359","ES","ESP","SPAIN" -"1534721360","1534721375","FR","FRA","FRANCE" -"1534721376","1534721391","ES","ESP","SPAIN" -"1534721392","1534721407","GB","GBR","UNITED KINGDOM" -"1534721408","1534721439","DE","DEU","GERMANY" -"1534721440","1534721455","BE","BEL","BELGIUM" -"1534721456","1534721487","FR","FRA","FRANCE" -"1534721488","1534721495","GB","GBR","UNITED KINGDOM" -"1534721496","1534721519","PL","POL","POLAND" -"1534721520","1534721527","FR","FRA","FRANCE" -"1534721528","1534721531","ES","ESP","SPAIN" -"1534721532","1534721535","FR","FRA","FRANCE" -"1534721536","1534721567","CH","CHE","SWITZERLAND" -"1534721568","1534721583","GB","GBR","UNITED KINGDOM" -"1534721584","1534721599","FR","FRA","FRANCE" -"1534721600","1534721623","ES","ESP","SPAIN" -"1534721624","1534721627","PL","POL","POLAND" -"1534721628","1534721631","DE","DEU","GERMANY" -"1534721632","1534721663","FR","FRA","FRANCE" -"1534721664","1534721679","ES","ESP","SPAIN" -"1534721680","1534721711","FR","FRA","FRANCE" -"1534721712","1534721727","ES","ESP","SPAIN" -"1534721728","1534721743","FR","FRA","FRANCE" -"1534721744","1534721747","PL","POL","POLAND" -"1534721748","1534721751","IT","ITA","ITALY" -"1534721752","1534721755","DE","DEU","GERMANY" -"1534721756","1534721775","FR","FRA","FRANCE" -"1534721776","1534721791","ES","ESP","SPAIN" -"1534721792","1534721823","FR","FRA","FRANCE" -"1534721824","1534721827","GB","GBR","UNITED KINGDOM" -"1534721828","1534721831","FR","FRA","FRANCE" -"1534721832","1534721835","PL","POL","POLAND" -"1534721836","1534721839","BE","BEL","BELGIUM" -"1534721840","1534721855","PL","POL","POLAND" -"1534721856","1534721887","ES","ESP","SPAIN" -"1534721888","1534721903","FR","FRA","FRANCE" -"1534721904","1534721919","DE","DEU","GERMANY" -"1534721920","1534721935","FR","FRA","FRANCE" -"1534721936","1534721951","PL","POL","POLAND" -"1534721952","1534721955","FR","FRA","FRANCE" -"1534721956","1534721959","PL","POL","POLAND" -"1534721960","1534721963","IE","IRL","IRELAND" -"1534721964","1534721967","CH","CHE","SWITZERLAND" -"1534721968","1534721975","DE","DEU","GERMANY" -"1534721976","1534721979","ES","ESP","SPAIN" -"1534721980","1534721983","GB","GBR","UNITED KINGDOM" -"1534721984","1534721999","PL","POL","POLAND" -"1534722000","1534722031","FR","FRA","FRANCE" -"1534722032","1534722047","BE","BEL","BELGIUM" -"1534722048","1534787583","RU","RUS","RUSSIAN FEDERATION" -"1534787584","1534791679","RO","ROM","ROMANIA" -"1534791680","1534795775","RU","RUS","RUSSIAN FEDERATION" -"1534795776","1534803967","NO","NOR","NORWAY" -"1534803968","1534808063","LV","LVA","LATVIA" -"1534808064","1534812159","RU","RUS","RUSSIAN FEDERATION" -"1534812160","1534816255","CH","CHE","SWITZERLAND" -"1534816256","1534820351","FR","FRA","FRANCE" -"1534820352","1534824447","FI","FIN","FINLAND" -"1534824448","1534828543","UA","UKR","UKRAINE" -"1534828544","1534836735","PL","POL","POLAND" -"1534836736","1534840831","SE","SWE","SWEDEN" -"1534840832","1534844927","PL","POL","POLAND" -"1534844928","1534849023","IE","IRL","IRELAND" -"1534849024","1534853119","NL","NLD","NETHERLANDS" -"1534853120","1534918655","UA","UKR","UKRAINE" -"1534918656","1534984191","GB","GBR","UNITED KINGDOM" -"1534984192","1534989855","SE","SWE","SWEDEN" -"1534989856","1534990063","ES","ESP","SPAIN" -"1534990064","1534990079","SE","SWE","SWEDEN" -"1534990080","1534990335","ES","ESP","SPAIN" -"1534990336","1534999551","SE","SWE","SWEDEN" -"1534999552","1535004671","ES","ESP","SPAIN" -"1535004672","1535008767","SE","SWE","SWEDEN" -"1535008768","1535011839","ES","ESP","SPAIN" -"1535011840","1535017983","SE","SWE","SWEDEN" -"1535017984","1535019519","ES","ESP","SPAIN" -"1535019520","1535020543","SE","SWE","SWEDEN" -"1535020544","1535021055","ES","ESP","SPAIN" -"1535021056","1535024127","SE","SWE","SWEDEN" -"1535024128","1535049727","ES","ESP","SPAIN" -"1535049728","1535115263","SK","SVK","SLOVAKIA" -"1535115264","1535377407","AT","AUT","AUSTRIA" -"1535377408","1535442943","GR","GRC","GREECE" -"1535442944","1535508479","FI","FIN","FINLAND" -"1535508480","1535574015","BG","BGR","BULGARIA" -"1535574016","1535578111","GB","GBR","UNITED KINGDOM" -"1535578112","1535582207","LV","LVA","LATVIA" -"1535582208","1535590399","NO","NOR","NORWAY" -"1535590400","1535594495","CH","CHE","SWITZERLAND" -"1535594496","1535598591","LV","LVA","LATVIA" -"1535598592","1535602687","IL","ISR","ISRAEL" -"1535602688","1535606783","HU","HUN","HUNGARY" -"1535606784","1535610879","NO","NOR","NORWAY" -"1535610880","1535614975","RU","RUS","RUSSIAN FEDERATION" -"1535614976","1535619071","AT","AUT","AUSTRIA" -"1535619072","1535623167","FR","FRA","FRANCE" -"1535623168","1535627263","KZ","KAZ","KAZAKHSTAN" -"1535627264","1535631359","RU","RUS","RUSSIAN FEDERATION" -"1535631360","1535635455","GB","GBR","UNITED KINGDOM" -"1535635456","1535639551","AZ","AZE","AZERBAIJAN" -"1535639552","1535672319","GB","GBR","UNITED KINGDOM" -"1535672320","1535705087","DE","DEU","GERMANY" -"1535705088","1535737855","CH","CHE","SWITZERLAND" -"1535737856","1535769855","HU","HUN","HUNGARY" -"1535769856","1535770623","SR","SUR","SURINAME" -"1535770624","1535803391","CH","CHE","SWITZERLAND" -"1535803392","1535836159","GR","GRC","GREECE" -"1535836160","1535868927","HU","HUN","HUNGARY" -"1535868928","1535901695","BG","BGR","BULGARIA" -"1535901696","1535934463","GR","GRC","GREECE" -"1535934464","1535967231","KW","KWT","KUWAIT" -"1535967232","1535999999","AT","AUT","AUSTRIA" -"1536000000","1536032767","NL","NLD","NETHERLANDS" -"1536032768","1536036863","LV","LVA","LATVIA" -"1536036864","1536040959","AT","AUT","AUSTRIA" -"1536040960","1536045055","GB","GBR","UNITED KINGDOM" -"1536045056","1536045567","DE","DEU","GERMANY" -"1536045568","1536046079","IQ","IRQ","IRAQ" -"1536046080","1536046591","DE","DEU","GERMANY" -"1536046592","1536046847","IQ","IRQ","IRAQ" -"1536046848","1536046975","DE","DEU","GERMANY" -"1536046976","1536047039","SA","SAU","SAUDI ARABIA" -"1536047040","1536047103","IQ","IRQ","IRAQ" -"1536047104","1536047679","LB","LBN","LEBANON" -"1536047680","1536047999","DE","DEU","GERMANY" -"1536048000","1536048127","SA","SAU","SAUDI ARABIA" -"1536048128","1536048255","AE","ARE","UNITED ARAB EMIRATES" -"1536048256","1536048319","DE","DEU","GERMANY" -"1536048320","1536048383","IQ","IRQ","IRAQ" -"1536048384","1536048639","DE","DEU","GERMANY" -"1536048640","1536048671","FR","FRA","FRANCE" -"1536048672","1536048703","LU","LUX","LUXEMBOURG" -"1536048704","1536048719","IQ","IRQ","IRAQ" -"1536048720","1536048735","NL","NLD","NETHERLANDS" -"1536048736","1536049151","DE","DEU","GERMANY" -"1536049152","1536053247","NL","NLD","NETHERLANDS" -"1536053248","1536057343","RU","RUS","RUSSIAN FEDERATION" -"1536057344","1536061439","IE","IRL","IRELAND" -"1536061440","1536065535","SE","SWE","SWEDEN" -"1536065536","1536069631","LU","LUX","LUXEMBOURG" -"1536069632","1536073727","RU","RUS","RUSSIAN FEDERATION" -"1536073728","1536077823","UA","UKR","UKRAINE" -"1536077824","1536081919","SE","SWE","SWEDEN" -"1536081920","1536086015","PL","POL","POLAND" -"1536086016","1536090111","ES","ESP","SPAIN" -"1536090112","1536094207","IE","IRL","IRELAND" -"1536094208","1536098303","NL","NLD","NETHERLANDS" -"1536098304","1536114687","RU","RUS","RUSSIAN FEDERATION" -"1536114688","1536118783","GB","GBR","UNITED KINGDOM" -"1536118784","1536122879","DE","DEU","GERMANY" -"1536122880","1536126975","AT","AUT","AUSTRIA" -"1536126976","1536131071","DK","DNK","DENMARK" -"1536131072","1536143359","RU","RUS","RUSSIAN FEDERATION" -"1536143360","1536147455","GB","GBR","UNITED KINGDOM" -"1536147456","1536151551","IT","ITA","ITALY" -"1536151552","1536151807","CS","SCG","SERBIA AND MONTENEGRO" -"1536151808","1536151823","RS","SRB","SERBIA" -"1536151824","1536151999","CS","SCG","SERBIA AND MONTENEGRO" -"1536152000","1536152015","RS","SRB","SERBIA" -"1536152016","1536152655","CS","SCG","SERBIA AND MONTENEGRO" -"1536152656","1536152719","RS","SRB","SERBIA" -"1536152720","1536155647","CS","SCG","SERBIA AND MONTENEGRO" -"1536155648","1536159743","IL","ISR","ISRAEL" -"1536159744","1536163839","DE","DEU","GERMANY" -"1536163840","1536180223","SY","SYR","SYRIAN ARAB REPUBLIC" -"1536180224","1536196607","HU","HUN","HUNGARY" -"1536196608","1536212991","RU","RUS","RUSSIAN FEDERATION" -"1536212992","1536229375","DK","DNK","DENMARK" -"1536229376","1536245759","SE","SWE","SWEDEN" -"1536245760","1536262143","FI","FIN","FINLAND" -"1536262144","1536278527","PL","POL","POLAND" -"1536278528","1536294911","UA","UKR","UKRAINE" -"1536294912","1536327679","RU","RUS","RUSSIAN FEDERATION" -"1536327680","1536344063","HU","HUN","HUNGARY" -"1536344064","1536360447","PL","POL","POLAND" -"1536360448","1536376831","RU","RUS","RUSSIAN FEDERATION" -"1536376832","1536393215","KZ","KAZ","KAZAKHSTAN" -"1536393216","1536409599","SA","SAU","SAUDI ARABIA" -"1536409600","1536425983","HU","HUN","HUNGARY" -"1536425984","1536442367","SK","SVK","SLOVAKIA" -"1536442368","1536444671","CS","SCG","SERBIA AND MONTENEGRO" -"1536444672","1536444927","RS","SRB","SERBIA" -"1536444928","1536453903","CS","SCG","SERBIA AND MONTENEGRO" -"1536453904","1536455679","RS","SRB","SERBIA" -"1536455680","1536455935","CS","SCG","SERBIA AND MONTENEGRO" -"1536455936","1536456191","RS","SRB","SERBIA" -"1536456192","1536456447","CS","SCG","SERBIA AND MONTENEGRO" -"1536456448","1536456703","RS","SRB","SERBIA" -"1536456704","1536458751","CS","SCG","SERBIA AND MONTENEGRO" -"1536458752","1536475135","BG","BGR","BULGARIA" -"1536475136","1536491519","NL","NLD","NETHERLANDS" -"1536491520","1536499711","NO","NOR","NORWAY" -"1536499712","1536503807","SE","SWE","SWEDEN" -"1536503808","1536507903","NO","NOR","NORWAY" -"1536507904","1536524287","RU","RUS","RUSSIAN FEDERATION" -"1536524288","1536540671","BY","BLR","BELARUS" -"1536540672","1536557055","PL","POL","POLAND" -"1536557056","1536573439","FI","FIN","FINLAND" -"1536573440","1536574719","CS","SCG","SERBIA AND MONTENEGRO" -"1536574720","1536574975","RS","SRB","SERBIA" -"1536574976","1536575615","CS","SCG","SERBIA AND MONTENEGRO" -"1536575616","1536575727","RS","SRB","SERBIA" -"1536575728","1536575743","CS","SCG","SERBIA AND MONTENEGRO" -"1536575744","1536576511","RS","SRB","SERBIA" -"1536576512","1536578559","CS","SCG","SERBIA AND MONTENEGRO" -"1536578560","1536579071","RS","SRB","SERBIA" -"1536579072","1536580095","CS","SCG","SERBIA AND MONTENEGRO" -"1536580096","1536580351","RS","SRB","SERBIA" -"1536580352","1536580607","CS","SCG","SERBIA AND MONTENEGRO" -"1536580608","1536580807","RS","SRB","SERBIA" -"1536580808","1536580815","CS","SCG","SERBIA AND MONTENEGRO" -"1536580816","1536580863","RS","SRB","SERBIA" -"1536580864","1536589823","CS","SCG","SERBIA AND MONTENEGRO" -"1536589824","1536614399","PL","POL","POLAND" -"1536614400","1536622591","DK","DNK","DENMARK" -"1536622592","1536626687","GB","GBR","UNITED KINGDOM" -"1536626688","1536630783","IT","ITA","ITALY" -"1536630784","1536634879","RU","RUS","RUSSIAN FEDERATION" -"1536634880","1536643071","FR","FRA","FRANCE" -"1536643072","1536647167","TR","TUR","TURKEY" -"1536647168","1536647434","ES","ESP","SPAIN" -"1536647435","1536647435","PT","PRT","PORTUGAL" -"1536647436","1536651263","ES","ESP","SPAIN" -"1536651264","1536655359","FR","FRA","FRANCE" -"1536655360","1536659455","GE","GEO","GEORGIA" -"1536659456","1536659751","DE","DEU","GERMANY" -"1536659752","1536659759","NG","NGA","NIGERIA" -"1536659760","1536659775","BI","BDI","BURUNDI" -"1536659776","1536659791","LB","LBN","LEBANON" -"1536659792","1536659823","SD","SDN","SUDAN" -"1536659824","1536659967","DE","DEU","GERMANY" -"1536659968","1536659975","EG","EGY","EGYPT" -"1536659976","1536659991","DE","DEU","GERMANY" -"1536659992","1536660003","EG","EGY","EGYPT" -"1536660004","1536660007","SO","SOM","SOMALIA" -"1536660008","1536660015","DE","DEU","GERMANY" -"1536660016","1536660019","KW","KWT","KUWAIT" -"1536660020","1536660023","DE","DEU","GERMANY" -"1536660024","1536660031","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1536660032","1536660039","DJ","DJI","DJIBOUTI" -"1536660040","1536660223","DE","DEU","GERMANY" -"1536660224","1536660479","AE","ARE","UNITED ARAB EMIRATES" -"1536660480","1536660735","IQ","IRQ","IRAQ" -"1536660736","1536660991","SA","SAU","SAUDI ARABIA" -"1536660992","1536661247","AE","ARE","UNITED ARAB EMIRATES" -"1536661248","1536661759","GQ","GNQ","EQUATORIAL GUINEA" -"1536661760","1536662015","DE","DEU","GERMANY" -"1536662016","1536662271","AE","ARE","UNITED ARAB EMIRATES" -"1536662272","1536662303","SO","SOM","SOMALIA" -"1536662304","1536662311","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1536662312","1536662335","LB","LBN","LEBANON" -"1536662336","1536662351","AE","ARE","UNITED ARAB EMIRATES" -"1536662352","1536662359","TD","TCD","CHAD" -"1536662360","1536662367","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1536662368","1536662399","IQ","IRQ","IRAQ" -"1536662400","1536662415","DE","DEU","GERMANY" -"1536662416","1536662431","GN","GIN","GUINEA" -"1536662432","1536662527","IQ","IRQ","IRAQ" -"1536662528","1536662783","AE","ARE","UNITED ARAB EMIRATES" -"1536662784","1536663039","SA","SAU","SAUDI ARABIA" -"1536663040","1536663295","AE","ARE","UNITED ARAB EMIRATES" -"1536663296","1536663319","DE","DEU","GERMANY" -"1536663320","1536663327","LB","LBN","LEBANON" -"1536663328","1536663335","CV","CPV","CAPE VERDE" -"1536663336","1536663359","DE","DEU","GERMANY" -"1536663360","1536663391","IQ","IRQ","IRAQ" -"1536663392","1536663407","LB","LBN","LEBANON" -"1536663408","1536663423","DE","DEU","GERMANY" -"1536663424","1536663551","KW","KWT","KUWAIT" -"1536663552","1536667647","SA","SAU","SAUDI ARABIA" -"1536667648","1536675839","RU","RUS","RUSSIAN FEDERATION" -"1536675840","1536679935","GB","GBR","UNITED KINGDOM" -"1536679936","1536684031","LB","LBN","LEBANON" -"1536684032","1536688127","RU","RUS","RUSSIAN FEDERATION" -"1536688128","1537212415","FI","FIN","FINLAND" -"1537212416","1538260991","FR","FRA","FRANCE" -"1538260992","1538785279","BE","BEL","BELGIUM" -"1538785280","1538793471","NL","NLD","NETHERLANDS" -"1538793472","1538797567","DE","DEU","GERMANY" -"1538797568","1538799551","NL","NLD","NETHERLANDS" -"1538799552","1538799615","DE","DEU","GERMANY" -"1538799616","1538801663","NL","NLD","NETHERLANDS" -"1538801664","1538809855","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1538809856","1538818047","GE","GEO","GEORGIA" -"1538818048","1538826239","NO","NOR","NORWAY" -"1538826240","1538834431","DE","DEU","GERMANY" -"1538834432","1538842623","CY","CYP","CYPRUS" -"1538842624","1538850815","RU","RUS","RUSSIAN FEDERATION" -"1538850816","1538859007","KZ","KAZ","KAZAKHSTAN" -"1538859008","1538875391","RU","RUS","RUSSIAN FEDERATION" -"1538875392","1538875719","CS","SCG","SERBIA AND MONTENEGRO" -"1538875720","1538875903","RS","SRB","SERBIA" -"1538875904","1538878207","CS","SCG","SERBIA AND MONTENEGRO" -"1538878208","1538878463","RS","SRB","SERBIA" -"1538878464","1538879487","CS","SCG","SERBIA AND MONTENEGRO" -"1538879488","1538883583","RS","SRB","SERBIA" -"1538883584","1538891775","BE","BEL","BELGIUM" -"1538891776","1538899967","DE","DEU","GERMANY" -"1538899968","1538902063","SI","SVN","SLOVENIA" -"1538902064","1538902079","NZ","NZL","NEW ZEALAND" -"1538902080","1538904031","SI","SVN","SLOVENIA" -"1538904032","1538904039","BH","BHR","BAHRAIN" -"1538904040","1538908159","SI","SVN","SLOVENIA" -"1538908160","1538916351","RU","RUS","RUSSIAN FEDERATION" -"1538916352","1538924543","GB","GBR","UNITED KINGDOM" -"1538924544","1538932735","DE","DEU","GERMANY" -"1538932736","1538940927","NO","NOR","NORWAY" -"1538940928","1538949119","RU","RUS","RUSSIAN FEDERATION" -"1538949120","1538957311","AT","AUT","AUSTRIA" -"1538957312","1538961535","DE","DEU","GERMANY" -"1538961536","1538961599","IT","ITA","ITALY" -"1538961600","1538962263","DE","DEU","GERMANY" -"1538962264","1538962271","GB","GBR","UNITED KINGDOM" -"1538962272","1538963399","DE","DEU","GERMANY" -"1538963400","1538963407","FR","FRA","FRANCE" -"1538963408","1538965503","DE","DEU","GERMANY" -"1538965504","1538973695","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1538973696","1538981887","JO","JOR","JORDAN" -"1538981888","1538990079","BY","BLR","BELARUS" -"1538990080","1538998271","CZ","CZE","CZECH REPUBLIC" -"1538998272","1539006463","AD","AND","ANDORRA" -"1539006464","1539014655","CS","SCG","SERBIA AND MONTENEGRO" -"1539014656","1539014783","RS","SRB","SERBIA" -"1539014784","1539014911","CS","SCG","SERBIA AND MONTENEGRO" -"1539014912","1539014912","RS","SRB","SERBIA" -"1539014913","1539015039","CS","SCG","SERBIA AND MONTENEGRO" -"1539015040","1539015167","RS","SRB","SERBIA" -"1539015168","1539015263","CS","SCG","SERBIA AND MONTENEGRO" -"1539015264","1539015679","RS","SRB","SERBIA" -"1539015680","1539015871","CS","SCG","SERBIA AND MONTENEGRO" -"1539015872","1539016191","RS","SRB","SERBIA" -"1539016192","1539016319","CS","SCG","SERBIA AND MONTENEGRO" -"1539016320","1539016703","RS","SRB","SERBIA" -"1539016704","1539016735","CS","SCG","SERBIA AND MONTENEGRO" -"1539016736","1539016831","RS","SRB","SERBIA" -"1539016832","1539016959","CS","SCG","SERBIA AND MONTENEGRO" -"1539016960","1539017215","RS","SRB","SERBIA" -"1539017216","1539017343","CS","SCG","SERBIA AND MONTENEGRO" -"1539017344","1539017727","RS","SRB","SERBIA" -"1539017728","1539017855","CS","SCG","SERBIA AND MONTENEGRO" -"1539017856","1539018751","RS","SRB","SERBIA" -"1539018752","1539018879","CS","SCG","SERBIA AND MONTENEGRO" -"1539018880","1539022847","RS","SRB","SERBIA" -"1539022848","1539031039","LT","LTU","LITHUANIA" -"1539031040","1539039231","IT","ITA","ITALY" -"1539039232","1539047423","PL","POL","POLAND" -"1539047424","1539047583","IT","ITA","ITALY" -"1539047584","1539047591","US","USA","UNITED STATES" -"1539047592","1539048279","IT","ITA","ITALY" -"1539048280","1539048287","GB","GBR","UNITED KINGDOM" -"1539048288","1539048319","IT","ITA","ITALY" -"1539048320","1539048335","GB","GBR","UNITED KINGDOM" -"1539048336","1539048383","IT","ITA","ITALY" -"1539048384","1539048391","GB","GBR","UNITED KINGDOM" -"1539048392","1539048399","IT","ITA","ITALY" -"1539048400","1539048447","GB","GBR","UNITED KINGDOM" -"1539048448","1539048543","IT","ITA","ITALY" -"1539048544","1539048551","LY","LBY","LIBYAN ARAB JAMAHIRIYA" -"1539048552","1539048559","IT","ITA","ITALY" -"1539048560","1539048575","LY","LBY","LIBYAN ARAB JAMAHIRIYA" -"1539048576","1539048639","IT","ITA","ITALY" -"1539048640","1539048687","IQ","IRQ","IRAQ" -"1539048688","1539049255","IT","ITA","ITALY" -"1539049256","1539049263","LY","LBY","LIBYAN ARAB JAMAHIRIYA" -"1539049264","1539049279","IT","ITA","ITALY" -"1539049280","1539049287","LY","LBY","LIBYAN ARAB JAMAHIRIYA" -"1539049288","1539049311","IT","ITA","ITALY" -"1539049312","1539049327","LY","LBY","LIBYAN ARAB JAMAHIRIYA" -"1539049328","1539049335","IT","ITA","ITALY" -"1539049336","1539049343","LY","LBY","LIBYAN ARAB JAMAHIRIYA" -"1539049344","1539050367","IT","ITA","ITALY" -"1539050368","1539050375","FR","FRA","FRANCE" -"1539050376","1539050383","IT","ITA","ITALY" -"1539050384","1539050399","FR","FRA","FRANCE" -"1539050400","1539050407","IT","ITA","ITALY" -"1539050408","1539050415","AL","ALB","ALBANIA" -"1539050416","1539055471","IT","ITA","ITALY" -"1539055472","1539055487","FR","FRA","FRANCE" -"1539055488","1539055535","IT","ITA","ITALY" -"1539055536","1539055543","TR","TUR","TURKEY" -"1539055544","1539055615","IT","ITA","ITALY" -"1539055616","1539063807","LV","LVA","LATVIA" -"1539063808","1539071999","FR","FRA","FRANCE" -"1539072000","1539080191","PL","POL","POLAND" -"1539080192","1539088383","UZ","UZB","UZBEKISTAN" -"1539088384","1539096575","RU","RUS","RUSSIAN FEDERATION" -"1539096576","1539112959","TR","TUR","TURKEY" -"1539112960","1539115007","PL","POL","POLAND" -"1539115008","1539117055","CH","CHE","SWITZERLAND" -"1539117056","1539123199","PL","POL","POLAND" -"1539123200","1539125247","SE","SWE","SWEDEN" -"1539125248","1539127295","RU","RUS","RUSSIAN FEDERATION" -"1539127296","1539129343","PL","POL","POLAND" -"1539129344","1539131391","IE","IRL","IRELAND" -"1539131392","1539133439","PL","POL","POLAND" -"1539133440","1539135487","RU","RUS","RUSSIAN FEDERATION" -"1539135488","1539137535","GB","GBR","UNITED KINGDOM" -"1539137536","1539139583","NL","NLD","NETHERLANDS" -"1539139584","1539141631","FR","FRA","FRANCE" -"1539141632","1539143679","RU","RUS","RUSSIAN FEDERATION" -"1539143680","1539145727","NO","NOR","NORWAY" -"1539145728","1539147775","UA","UKR","UKRAINE" -"1539147776","1539149823","PL","POL","POLAND" -"1539149824","1539151871","GB","GBR","UNITED KINGDOM" -"1539153920","1539155967","RU","RUS","RUSSIAN FEDERATION" -"1539155968","1539160063","NO","NOR","NORWAY" -"1539160064","1539162111","RU","RUS","RUSSIAN FEDERATION" -"1539162112","1539164159","DE","DEU","GERMANY" -"1539164160","1539166207","DK","DNK","DENMARK" -"1539166208","1539168255","FI","FIN","FINLAND" -"1539168256","1539170303","PL","POL","POLAND" -"1539170304","1539172351","NL","NLD","NETHERLANDS" -"1539172352","1539176447","RU","RUS","RUSSIAN FEDERATION" -"1539176448","1539178495","PL","POL","POLAND" -"1539178496","1539186687","CH","CHE","SWITZERLAND" -"1539186688","1539194879","LV","LVA","LATVIA" -"1539194880","1539203071","RU","RUS","RUSSIAN FEDERATION" -"1539203072","1539207167","NL","NLD","NETHERLANDS" -"1539207168","1539211263","RU","RUS","RUSSIAN FEDERATION" -"1539211264","1539211527","CZ","CZE","CZECH REPUBLIC" -"1539211528","1539211531","GB","GBR","UNITED KINGDOM" -"1539211532","1539211775","CZ","CZE","CZECH REPUBLIC" -"1539211776","1539212031","DE","DEU","GERMANY" -"1539212032","1539212287","CZ","CZE","CZECH REPUBLIC" -"1539212288","1539212543","DE","DEU","GERMANY" -"1539212544","1539213311","CZ","CZE","CZECH REPUBLIC" -"1539213312","1539215359","SE","SWE","SWEDEN" -"1539215360","1539219455","DE","DEU","GERMANY" -"1539219456","1539221503","DK","DNK","DENMARK" -"1539221504","1539222271","FR","FRA","FRANCE" -"1539222272","1539222303","HK","HKG","HONG KONG" -"1539222304","1539223551","FR","FRA","FRANCE" -"1539223552","1539225599","DE","DEU","GERMANY" -"1539225600","1539227647","HU","HUN","HUNGARY" -"1539227648","1539229695","KW","KWT","KUWAIT" -"1539229696","1539231743","DE","DEU","GERMANY" -"1539231744","1539233791","BE","BEL","BELGIUM" -"1539233792","1539235839","GR","GRC","GREECE" -"1539235840","1539237887","DE","DEU","GERMANY" -"1539237888","1539239935","RU","RUS","RUSSIAN FEDERATION" -"1539239936","1539244031","DE","DEU","GERMANY" -"1539244032","1539260415","BA","BIH","BOSNIA AND HERZEGOVINA" -"1539260416","1539276799","SK","SVK","SLOVAKIA" -"1539276800","1539280895","SE","SWE","SWEDEN" -"1539280896","1539284991","FR","FRA","FRANCE" -"1539284992","1539287039","DE","DEU","GERMANY" -"1539287040","1539289087","TR","TUR","TURKEY" -"1539289088","1539293183","RU","RUS","RUSSIAN FEDERATION" -"1539293184","1539297279","AZ","AZE","AZERBAIJAN" -"1539297280","1539301375","BG","BGR","BULGARIA" -"1539301376","1539309567","RU","RUS","RUSSIAN FEDERATION" -"1539309568","1539310591","PL","POL","POLAND" -"1539310592","1539311615","UA","UKR","UKRAINE" -"1539311616","1539312639","NL","NLD","NETHERLANDS" -"1539312640","1539314687","DE","DEU","GERMANY" -"1539314688","1539315711","RU","RUS","RUSSIAN FEDERATION" -"1539315712","1539316735","UA","UKR","UKRAINE" -"1539316736","1539317759","SE","SWE","SWEDEN" -"1539317760","1539318783","RU","RUS","RUSSIAN FEDERATION" -"1539318784","1539319807","NL","NLD","NETHERLANDS" -"1539319808","1539320831","DE","DEU","GERMANY" -"1539320832","1539321855","UA","UKR","UKRAINE" -"1539321856","1539322879","EG","EGY","EGYPT" -"1539322880","1539323903","DK","DNK","DENMARK" -"1539323904","1539324927","PL","POL","POLAND" -"1539324928","1539325951","RU","RUS","RUSSIAN FEDERATION" -"1539325952","1539326975","KG","KGZ","KYRGYZSTAN" -"1539326976","1539329023","RU","RUS","RUSSIAN FEDERATION" -"1539329024","1539330047","PL","POL","POLAND" -"1539330048","1539331071","RU","RUS","RUSSIAN FEDERATION" -"1539331072","1539332095","UA","UKR","UKRAINE" -"1539332096","1539333119","PL","POL","POLAND" -"1539333120","1539335167","RU","RUS","RUSSIAN FEDERATION" -"1539335168","1539336191","CH","CHE","SWITZERLAND" -"1539336192","1539336703","UA","UKR","UKRAINE" -"1539336704","1539337215","EE","EST","ESTONIA" -"1539337216","1539338239","ES","ESP","SPAIN" -"1539339264","1539340287","NL","NLD","NETHERLANDS" -"1539340288","1539341311","PL","POL","POLAND" -"1539341312","1539342335","IT","ITA","ITALY" -"1539342336","1539345407","UA","UKR","UKRAINE" -"1539345408","1539346431","RO","ROM","ROMANIA" -"1539346432","1539347455","PL","POL","POLAND" -"1539347456","1539348479","RU","RUS","RUSSIAN FEDERATION" -"1539348480","1539351551","UA","UKR","UKRAINE" -"1539351552","1539352575","PL","POL","POLAND" -"1539352576","1539354623","RU","RUS","RUSSIAN FEDERATION" -"1539354624","1539355647","PL","POL","POLAND" -"1539355648","1539357695","UA","UKR","UKRAINE" -"1539357696","1539358719","RU","RUS","RUSSIAN FEDERATION" -"1539358720","1539359743","GB","GBR","UNITED KINGDOM" -"1539359744","1539360767","PL","POL","POLAND" -"1539360768","1539361279","UA","UKR","UKRAINE" -"1539361280","1539361791","DE","DEU","GERMANY" -"1539361792","1539362815","PL","POL","POLAND" -"1539362816","1539363839","GB","GBR","UNITED KINGDOM" -"1539363840","1539364863","DK","DNK","DENMARK" -"1539364864","1539365887","UA","UKR","UKRAINE" -"1539365888","1539366911","NO","NOR","NORWAY" -"1539366912","1539368959","PL","POL","POLAND" -"1539368960","1539369983","GB","GBR","UNITED KINGDOM" -"1539369984","1539371007","BG","BGR","BULGARIA" -"1539371008","1539373055","RU","RUS","RUSSIAN FEDERATION" -"1539373056","1539374079","PL","POL","POLAND" -"1539374080","1539375103","SE","SWE","SWEDEN" -"1539375104","1539376127","NO","NOR","NORWAY" -"1539376128","1539377151","IL","ISR","ISRAEL" -"1539377152","1539378175","UA","UKR","UKRAINE" -"1539378176","1539379199","PL","POL","POLAND" -"1539380224","1539381247","CH","CHE","SWITZERLAND" -"1539381248","1539382271","RS","SRB","SERBIA" -"1539383296","1539384319","UA","UKR","UKRAINE" -"1539384320","1539385343","RU","RUS","RUSSIAN FEDERATION" -"1539385344","1539385855","PL","POL","POLAND" -"1539385856","1539386367","BE","BEL","BELGIUM" -"1539386368","1539387391","IT","ITA","ITALY" -"1539387392","1539388415","IL","ISR","ISRAEL" -"1539388416","1539389439","PL","POL","POLAND" -"1539389440","1539389951","FR","FRA","FRANCE" -"1539389952","1539390463","RU","RUS","RUSSIAN FEDERATION" -"1539390464","1539391487","RO","ROM","ROMANIA" -"1539391488","1539392511","LV","LVA","LATVIA" -"1539392512","1539393535","UA","UKR","UKRAINE" -"1539393536","1539394559","RU","RUS","RUSSIAN FEDERATION" -"1539394560","1539396607","UA","UKR","UKRAINE" -"1539396608","1539397631","PL","POL","POLAND" -"1539397632","1539398143","RU","RUS","RUSSIAN FEDERATION" -"1539398144","1539398655","PL","POL","POLAND" -"1539398656","1539399679","ES","ESP","SPAIN" -"1539399680","1539401727","PL","POL","POLAND" -"1539402752","1539403263","GB","GBR","UNITED KINGDOM" -"1539403264","1539403775","RU","RUS","RUSSIAN FEDERATION" -"1539403776","1539404799","GR","GRC","GREECE" -"1539404800","1539405823","LV","LVA","LATVIA" -"1539405824","1539406847","PL","POL","POLAND" -"1539406848","1539407871","UA","UKR","UKRAINE" -"1539408896","1539409919","CZ","CZE","CZECH REPUBLIC" -"1539409920","1539410943","DK","DNK","DENMARK" -"1539410944","1539411967","RU","RUS","RUSSIAN FEDERATION" -"1539411968","1539412991","PL","POL","POLAND" -"1539412992","1539414015","RU","RUS","RUSSIAN FEDERATION" -"1539414016","1539415039","UA","UKR","UKRAINE" -"1539415040","1539416063","BG","BGR","BULGARIA" -"1539416064","1539417087","PL","POL","POLAND" -"1539417088","1539418111","UA","UKR","UKRAINE" -"1539418112","1539419135","RU","RUS","RUSSIAN FEDERATION" -"1539419136","1539420159","UA","UKR","UKRAINE" -"1539420160","1539421183","RU","RUS","RUSSIAN FEDERATION" -"1539421184","1539422207","GB","GBR","UNITED KINGDOM" -"1539422208","1539423231","PL","POL","POLAND" -"1539423232","1539424255","IE","IRL","IRELAND" -"1539424256","1539425279","RU","RUS","RUSSIAN FEDERATION" -"1539425280","1539426303","PL","POL","POLAND" -"1539426304","1539427327","BG","BGR","BULGARIA" -"1539427328","1539428351","UA","UKR","UKRAINE" -"1539428352","1539429375","PL","POL","POLAND" -"1539429376","1539434495","RU","RUS","RUSSIAN FEDERATION" -"1539434496","1539435519","UA","UKR","UKRAINE" -"1539435520","1539437567","RU","RUS","RUSSIAN FEDERATION" -"1539437568","1539439615","GB","GBR","UNITED KINGDOM" -"1539439616","1539440639","UA","UKR","UKRAINE" -"1539440640","1539441663","RU","RUS","RUSSIAN FEDERATION" -"1539441664","1539442175","US","USA","UNITED STATES" -"1539442176","1539442687","DE","DEU","GERMANY" -"1539442688","1539443199","NL","NLD","NETHERLANDS" -"1539443200","1539444223","RU","RUS","RUSSIAN FEDERATION" -"1539444736","1539445247","RU","RUS","RUSSIAN FEDERATION" -"1539445248","1539445759","PL","POL","POLAND" -"1539445760","1539446271","FI","FIN","FINLAND" -"1539446272","1539446783","SE","SWE","SWEDEN" -"1539446784","1539447295","RU","RUS","RUSSIAN FEDERATION" -"1539447296","1539447807","SE","SWE","SWEDEN" -"1539447808","1539448831","RO","ROM","ROMANIA" -"1539448832","1539449343","AT","AUT","AUSTRIA" -"1539449344","1539449855","UA","UKR","UKRAINE" -"1539449856","1539450367","DK","DNK","DENMARK" -"1539450368","1539450879","SE","SWE","SWEDEN" -"1539450880","1539451391","UA","UKR","UKRAINE" -"1539451392","1539452415","RO","ROM","ROMANIA" -"1539452416","1539452927","GB","GBR","UNITED KINGDOM" -"1539452928","1539453439","CH","CHE","SWITZERLAND" -"1539453440","1539453951","UA","UKR","UKRAINE" -"1539453952","1539454463","GB","GBR","UNITED KINGDOM" -"1539454464","1539454975","RU","RUS","RUSSIAN FEDERATION" -"1539454976","1539455487","UA","UKR","UKRAINE" -"1539455488","1539455999","RU","RUS","RUSSIAN FEDERATION" -"1539456000","1539456511","FR","FRA","FRANCE" -"1539456512","1539457023","ES","ESP","SPAIN" -"1539457024","1539457535","RU","RUS","RUSSIAN FEDERATION" -"1539457536","1539458047","SE","SWE","SWEDEN" -"1539458048","1539459071","GB","GBR","UNITED KINGDOM" -"1539459072","1539459583","UA","UKR","UKRAINE" -"1539459584","1539460095","GB","GBR","UNITED KINGDOM" -"1539460096","1539460607","LV","LVA","LATVIA" -"1539460608","1539461631","UA","UKR","UKRAINE" -"1539461632","1539462143","RS","SRB","SERBIA" -"1539462144","1539462655","DE","DEU","GERMANY" -"1539462656","1539463167","BE","BEL","BELGIUM" -"1539463168","1539463679","UA","UKR","UKRAINE" -"1539463680","1539464191","DE","DEU","GERMANY" -"1539464192","1539464703","RO","ROM","ROMANIA" -"1539464704","1539465215","DK","DNK","DENMARK" -"1539465216","1539466751","FR","FRA","FRANCE" -"1539466752","1539467263","KW","KWT","KUWAIT" -"1539467264","1539467775","RU","RUS","RUSSIAN FEDERATION" -"1539467776","1539468287","PL","POL","POLAND" -"1539468288","1539468799","DE","DEU","GERMANY" -"1539468800","1539469823","RU","RUS","RUSSIAN FEDERATION" -"1539469824","1539470335","IL","ISR","ISRAEL" -"1539470336","1539470847","GB","GBR","UNITED KINGDOM" -"1539470848","1539471359","SE","SWE","SWEDEN" -"1539471360","1539471871","RU","RUS","RUSSIAN FEDERATION" -"1539471872","1539472383","PL","POL","POLAND" -"1539472384","1539472895","UA","UKR","UKRAINE" -"1539472896","1539473407","GB","GBR","UNITED KINGDOM" -"1539473408","1539473919","FR","FRA","FRANCE" -"1539473920","1539474431","KW","KWT","KUWAIT" -"1539474432","1539474943","DE","DEU","GERMANY" -"1539474944","1539475455","UA","UKR","UKRAINE" -"1539475456","1539475967","NL","NLD","NETHERLANDS" -"1539475968","1539476479","PL","POL","POLAND" -"1539476480","1539476991","CZ","CZE","CZECH REPUBLIC" -"1539476992","1539477503","IT","ITA","ITALY" -"1539477504","1539478015","PL","POL","POLAND" -"1539478016","1539478527","CH","CHE","SWITZERLAND" -"1539478528","1539479039","RO","ROM","ROMANIA" -"1539479040","1539479551","DK","DNK","DENMARK" -"1539479552","1539480063","GB","GBR","UNITED KINGDOM" -"1539480064","1539480575","DK","DNK","DENMARK" -"1539480576","1539481087","PL","POL","POLAND" -"1539481088","1539481599","GB","GBR","UNITED KINGDOM" -"1539481600","1539482111","RU","RUS","RUSSIAN FEDERATION" -"1539482112","1539482623","UA","UKR","UKRAINE" -"1539482624","1539483135","RU","RUS","RUSSIAN FEDERATION" -"1539483136","1539483647","ES","ESP","SPAIN" -"1539483648","1539484159","NL","NLD","NETHERLANDS" -"1539484160","1539484671","GB","GBR","UNITED KINGDOM" -"1539484672","1539485695","RU","RUS","RUSSIAN FEDERATION" -"1539485696","1539486207","RO","ROM","ROMANIA" -"1539486208","1539486719","FR","FRA","FRANCE" -"1539486720","1539487231","DE","DEU","GERMANY" -"1539487232","1539488255","RU","RUS","RUSSIAN FEDERATION" -"1539488256","1539488767","SE","SWE","SWEDEN" -"1539488768","1539489279","PL","POL","POLAND" -"1539489280","1539490815","RU","RUS","RUSSIAN FEDERATION" -"1539490816","1539491327","CH","CHE","SWITZERLAND" -"1539491328","1539491839","PL","POL","POLAND" -"1539491840","1539492351","RU","RUS","RUSSIAN FEDERATION" -"1539492352","1539492863","BE","BEL","BELGIUM" -"1539492864","1539493375","KR","KOR","REPUBLIC OF KOREA" -"1539493376","1539493887","RU","RUS","RUSSIAN FEDERATION" -"1539493888","1539494399","FR","FRA","FRANCE" -"1539494400","1539494911","PL","POL","POLAND" -"1539494912","1539495423","RU","RUS","RUSSIAN FEDERATION" -"1539495424","1539495935","UA","UKR","UKRAINE" -"1539495936","1539496447","RS","SRB","SERBIA" -"1539496448","1539496959","NL","NLD","NETHERLANDS" -"1539496960","1539497471","GB","GBR","UNITED KINGDOM" -"1539497472","1539497983","DE","DEU","GERMANY" -"1539497984","1539498495","NL","NLD","NETHERLANDS" -"1539498496","1539499007","RU","RUS","RUSSIAN FEDERATION" -"1539499008","1539499519","PL","POL","POLAND" -"1539499520","1539500543","DE","DEU","GERMANY" -"1539500544","1539501055","RO","ROM","ROMANIA" -"1539501056","1539501567","BE","BEL","BELGIUM" -"1539501568","1539502079","UA","UKR","UKRAINE" -"1539502080","1539502591","PL","POL","POLAND" -"1539502592","1539503103","HR","HRV","CROATIA" -"1539503104","1539504127","RU","RUS","RUSSIAN FEDERATION" -"1539504128","1539504639","AT","AUT","AUSTRIA" -"1539504640","1539505151","UA","UKR","UKRAINE" -"1539505152","1539506175","RU","RUS","RUSSIAN FEDERATION" -"1539506176","1539506687","NL","NLD","NETHERLANDS" -"1539506688","1539507199","UA","UKR","UKRAINE" -"1539507200","1539508223","RO","ROM","ROMANIA" -"1539508224","1539508735","NO","NOR","NORWAY" -"1539508736","1539509759","UA","UKR","UKRAINE" -"1539509760","1539510271","RO","ROM","ROMANIA" -"1539510272","1539510783","RU","RUS","RUSSIAN FEDERATION" -"1539510784","1539511295","LU","LUX","LUXEMBOURG" -"1539511296","1539511807","UA","UKR","UKRAINE" -"1539511808","1539512319","RU","RUS","RUSSIAN FEDERATION" -"1539512320","1539512831","BG","BGR","BULGARIA" -"1539512832","1539513343","PL","POL","POLAND" -"1539513344","1539513855","RO","ROM","ROMANIA" -"1539513856","1539514367","RU","RUS","RUSSIAN FEDERATION" -"1539514368","1539514879","SE","SWE","SWEDEN" -"1539514880","1539515391","ES","ESP","SPAIN" -"1539515392","1539515903","FR","FRA","FRANCE" -"1539515904","1539516415","CS","SCG","SERBIA AND MONTENEGRO" -"1539516416","1539516927","AT","AUT","AUSTRIA" -"1539516928","1539517439","PL","POL","POLAND" -"1539517440","1539517951","RO","ROM","ROMANIA" -"1539517952","1539518463","GB","GBR","UNITED KINGDOM" -"1539518464","1539518975","DE","DEU","GERMANY" -"1539518976","1539519487","RU","RUS","RUSSIAN FEDERATION" -"1539519488","1539519999","UA","UKR","UKRAINE" -"1539520000","1539520511","DE","DEU","GERMANY" -"1539520512","1539521023","PL","POL","POLAND" -"1539521024","1539521535","DK","DNK","DENMARK" -"1539521536","1539522047","RU","RUS","RUSSIAN FEDERATION" -"1539522048","1539522559","RO","ROM","ROMANIA" -"1539522560","1539523071","RU","RUS","RUSSIAN FEDERATION" -"1539523072","1539523583","RO","ROM","ROMANIA" -"1539523584","1539524095","UA","UKR","UKRAINE" -"1539524096","1539524607","GR","GRC","GREECE" -"1539524608","1539525119","FR","FRA","FRANCE" -"1539525120","1539525631","UA","UKR","UKRAINE" -"1539525632","1539526143","SE","SWE","SWEDEN" -"1539526144","1539526655","DE","DEU","GERMANY" -"1539526656","1539527167","NL","NLD","NETHERLANDS" -"1539527168","1539527679","GB","GBR","UNITED KINGDOM" -"1539527680","1539528191","RO","ROM","ROMANIA" -"1539528192","1539528703","UA","UKR","UKRAINE" -"1539528704","1539529215","SA","SAU","SAUDI ARABIA" -"1539529216","1539529727","UA","UKR","UKRAINE" -"1539529728","1539530239","PL","POL","POLAND" -"1539530240","1539530751","AT","AUT","AUSTRIA" -"1539530752","1539531263","UA","UKR","UKRAINE" -"1539531264","1539531775","RO","ROM","ROMANIA" -"1539531776","1539532799","RU","RUS","RUSSIAN FEDERATION" -"1539532800","1539533311","DE","DEU","GERMANY" -"1539533312","1539533823","CZ","CZE","CZECH REPUBLIC" -"1539533824","1539534335","PL","POL","POLAND" -"1539534336","1539534847","RU","RUS","RUSSIAN FEDERATION" -"1539534848","1539535359","GB","GBR","UNITED KINGDOM" -"1539535360","1539535871","RU","RUS","RUSSIAN FEDERATION" -"1539535872","1539536383","AT","AUT","AUSTRIA" -"1539536384","1539536895","NL","NLD","NETHERLANDS" -"1539536896","1539537407","UA","UKR","UKRAINE" -"1539537408","1539537919","GB","GBR","UNITED KINGDOM" -"1539537920","1539540479","RU","RUS","RUSSIAN FEDERATION" -"1539540480","1539540991","PL","POL","POLAND" -"1539540992","1539541503","RU","RUS","RUSSIAN FEDERATION" -"1539541504","1539542015","TR","TUR","TURKEY" -"1539542016","1539542527","DE","DEU","GERMANY" -"1539542528","1539543039","CH","CHE","SWITZERLAND" -"1539543040","1539543551","RO","ROM","ROMANIA" -"1539543552","1539544063","SI","SVN","SLOVENIA" -"1539544064","1539544575","RU","RUS","RUSSIAN FEDERATION" -"1539544576","1539545087","CH","CHE","SWITZERLAND" -"1539545088","1539545599","GR","GRC","GREECE" -"1539545600","1539546111","SE","SWE","SWEDEN" -"1539546112","1539546623","UA","UKR","UKRAINE" -"1539546624","1539547135","PL","POL","POLAND" -"1539547136","1539547647","NL","NLD","NETHERLANDS" -"1539547648","1539548159","IL","ISR","ISRAEL" -"1539548160","1539548671","FR","FRA","FRANCE" -"1539549184","1539549695","GB","GBR","UNITED KINGDOM" -"1539549696","1539550207","RU","RUS","RUSSIAN FEDERATION" -"1539550208","1539550719","UA","UKR","UKRAINE" -"1539550720","1539551231","ES","ESP","SPAIN" -"1539551232","1539551743","RS","SRB","SERBIA" -"1539551744","1539552255","RU","RUS","RUSSIAN FEDERATION" -"1539552256","1539552767","RO","ROM","ROMANIA" -"1539552768","1539553279","GB","GBR","UNITED KINGDOM" -"1539553280","1539553791","UA","UKR","UKRAINE" -"1539553792","1539554303","GB","GBR","UNITED KINGDOM" -"1539554304","1539554815","CH","CHE","SWITZERLAND" -"1539554816","1539555327","PL","POL","POLAND" -"1539555328","1539555839","GB","GBR","UNITED KINGDOM" -"1539555840","1539556863","RO","ROM","ROMANIA" -"1539556864","1539557375","AT","AUT","AUSTRIA" -"1539557376","1539557887","NL","NLD","NETHERLANDS" -"1539557888","1539558399","CZ","CZE","CZECH REPUBLIC" -"1539558400","1539558911","RU","RUS","RUSSIAN FEDERATION" -"1539558912","1539559423","FR","FRA","FRANCE" -"1539559424","1539560447","RU","RUS","RUSSIAN FEDERATION" -"1539560448","1539560959","GB","GBR","UNITED KINGDOM" -"1539560960","1539561471","UA","UKR","UKRAINE" -"1539561472","1539561983","RO","ROM","ROMANIA" -"1539561984","1539563007","DE","DEU","GERMANY" -"1539563008","1539563519","RU","RUS","RUSSIAN FEDERATION" -"1539563520","1539564031","SE","SWE","SWEDEN" -"1539564032","1539564543","KZ","KAZ","KAZAKHSTAN" -"1539564544","1539565055","GB","GBR","UNITED KINGDOM" -"1539565056","1539565567","UA","UKR","UKRAINE" -"1539565568","1539566079","PL","POL","POLAND" -"1539566080","1539567103","NL","NLD","NETHERLANDS" -"1539567104","1539567615","CH","CHE","SWITZERLAND" -"1539567616","1539568127","DE","DEU","GERMANY" -"1539568128","1539568639","NL","NLD","NETHERLANDS" -"1539568640","1539569151","UA","UKR","UKRAINE" -"1539569152","1539569663","EE","EST","ESTONIA" -"1539569664","1539570175","UA","UKR","UKRAINE" -"1539570176","1539570687","PL","POL","POLAND" -"1539570688","1539571711","RU","RUS","RUSSIAN FEDERATION" -"1539571712","1539572735","UA","UKR","UKRAINE" -"1539572736","1539573759","RU","RUS","RUSSIAN FEDERATION" -"1539573760","1539575807","PL","POL","POLAND" -"1539575808","1539576831","LV","LVA","LATVIA" -"1539576832","1539577855","GB","GBR","UNITED KINGDOM" -"1539577856","1539578879","RU","RUS","RUSSIAN FEDERATION" -"1539578880","1539579903","PL","POL","POLAND" -"1539579904","1539580927","RU","RUS","RUSSIAN FEDERATION" -"1539580928","1539581951","AM","ARM","ARMENIA" -"1539581952","1539582975","RU","RUS","RUSSIAN FEDERATION" -"1539582976","1539583999","RO","ROM","ROMANIA" -"1539584000","1539585023","PL","POL","POLAND" -"1539585024","1539586047","UA","UKR","UKRAINE" -"1539586048","1539587071","PL","POL","POLAND" -"1539587072","1539588095","UA","UKR","UKRAINE" -"1539588096","1539589119","BG","BGR","BULGARIA" -"1539589120","1539590143","GB","GBR","UNITED KINGDOM" -"1539590144","1539591167","RU","RUS","RUSSIAN FEDERATION" -"1539591168","1539592191","UZ","UZB","UZBEKISTAN" -"1539592192","1539593215","UA","UKR","UKRAINE" -"1539593216","1539594239","IL","ISR","ISRAEL" -"1539594240","1539598335","UA","UKR","UKRAINE" -"1539598336","1539599359","NL","NLD","NETHERLANDS" -"1539599360","1539600383","PL","POL","POLAND" -"1539600384","1539601407","HU","HUN","HUNGARY" -"1539601408","1539602431","DE","DEU","GERMANY" -"1539602432","1539603455","UA","UKR","UKRAINE" -"1539603456","1539604479","BG","BGR","BULGARIA" -"1539604480","1539605503","ES","ESP","SPAIN" -"1539605504","1539606527","UA","UKR","UKRAINE" -"1539606528","1539607551","RU","RUS","RUSSIAN FEDERATION" -"1539607552","1539609599","DE","DEU","GERMANY" -"1539609600","1539610623","UA","UKR","UKRAINE" -"1539610624","1539611647","RU","RUS","RUSSIAN FEDERATION" -"1539611648","1539614719","UA","UKR","UKRAINE" -"1539614720","1539615743","NL","NLD","NETHERLANDS" -"1539615744","1539616767","DK","DNK","DENMARK" -"1539616768","1539617791","UA","UKR","UKRAINE" -"1539617792","1539618815","FR","FRA","FRANCE" -"1539618816","1539619839","GB","GBR","UNITED KINGDOM" -"1539619840","1539620863","RU","RUS","RUSSIAN FEDERATION" -"1539620864","1539623935","UA","UKR","UKRAINE" -"1539623936","1539624959","DE","DEU","GERMANY" -"1539624960","1539625983","RU","RUS","RUSSIAN FEDERATION" -"1539625984","1539627007","PL","POL","POLAND" -"1539627008","1539628031","RU","RUS","RUSSIAN FEDERATION" -"1539628032","1539629055","UA","UKR","UKRAINE" -"1539629056","1539630079","BG","BGR","BULGARIA" -"1539630080","1539631103","UA","UKR","UKRAINE" -"1539631104","1539632127","CN","CHN","CHINA" -"1539632128","1539633151","RU","RUS","RUSSIAN FEDERATION" -"1539633152","1539634175","SE","SWE","SWEDEN" -"1539634176","1539638271","RU","RUS","RUSSIAN FEDERATION" -"1539638272","1539639295","UA","UKR","UKRAINE" -"1539639296","1539640319","RU","RUS","RUSSIAN FEDERATION" -"1539640320","1539641343","PL","POL","POLAND" -"1539641344","1539642367","UA","UKR","UKRAINE" -"1539642368","1539643391","RU","RUS","RUSSIAN FEDERATION" -"1539643392","1539644415","UA","UKR","UKRAINE" -"1539644416","1539645439","DE","DEU","GERMANY" -"1539645440","1539646463","GB","GBR","UNITED KINGDOM" -"1539646464","1539647487","IE","IRL","IRELAND" -"1539647488","1539648511","RU","RUS","RUSSIAN FEDERATION" -"1539648512","1539650559","UA","UKR","UKRAINE" -"1539650560","1539651583","RU","RUS","RUSSIAN FEDERATION" -"1539651584","1539652607","UA","UKR","UKRAINE" -"1539652608","1539653631","IL","ISR","ISRAEL" -"1539653632","1539655679","RU","RUS","RUSSIAN FEDERATION" -"1539655680","1539656703","NL","NLD","NETHERLANDS" -"1539656704","1539657727","RU","RUS","RUSSIAN FEDERATION" -"1539657728","1539658751","UA","UKR","UKRAINE" -"1539658752","1539659775","FI","FIN","FINLAND" -"1539659776","1539660799","PL","POL","POLAND" -"1539660800","1539661823","GB","GBR","UNITED KINGDOM" -"1539661824","1539662847","RU","RUS","RUSSIAN FEDERATION" -"1539662848","1539663871","IL","ISR","ISRAEL" -"1539663872","1539664895","RU","RUS","RUSSIAN FEDERATION" -"1539664896","1539665919","BE","BEL","BELGIUM" -"1539665920","1539666943","RU","RUS","RUSSIAN FEDERATION" -"1539666944","1539667967","CZ","CZE","CZECH REPUBLIC" -"1539667968","1539668991","UA","UKR","UKRAINE" -"1539668992","1539670015","RU","RUS","RUSSIAN FEDERATION" -"1539670016","1539672063","UA","UKR","UKRAINE" -"1539672064","1539673087","FR","FRA","FRANCE" -"1539673088","1539674111","GB","GBR","UNITED KINGDOM" -"1539674112","1539675135","UA","UKR","UKRAINE" -"1539675136","1539677183","PL","POL","POLAND" -"1539677184","1539678207","UA","UKR","UKRAINE" -"1539678208","1539679231","RU","RUS","RUSSIAN FEDERATION" -"1539679232","1539680255","FR","FRA","FRANCE" -"1539680256","1539681279","UA","UKR","UKRAINE" -"1539681280","1539684351","RU","RUS","RUSSIAN FEDERATION" -"1539684352","1539685375","UA","UKR","UKRAINE" -"1539685376","1539688447","RU","RUS","RUSSIAN FEDERATION" -"1539688448","1539689471","SA","SAU","SAUDI ARABIA" -"1539689472","1539690495","RU","RUS","RUSSIAN FEDERATION" -"1539690496","1539691519","FI","FIN","FINLAND" -"1539691520","1539692543","RU","RUS","RUSSIAN FEDERATION" -"1539692544","1539694591","UA","UKR","UKRAINE" -"1539694592","1539695615","PL","POL","POLAND" -"1539695616","1539696639","GB","GBR","UNITED KINGDOM" -"1539696640","1539697663","RU","RUS","RUSSIAN FEDERATION" -"1539697664","1539698687","UA","UKR","UKRAINE" -"1539698688","1539699711","GE","GEO","GEORGIA" -"1539699712","1539700735","RO","ROM","ROMANIA" -"1539700736","1539701759","DK","DNK","DENMARK" -"1539701760","1539702783","UA","UKR","UKRAINE" -"1539702784","1539703039","SI","SVN","SLOVENIA" -"1539703040","1539703295","UA","UKR","UKRAINE" -"1539703296","1539703551","DE","DEU","GERMANY" -"1539703552","1539703807","GB","GBR","UNITED KINGDOM" -"1539704064","1539704319","IL","ISR","ISRAEL" -"1539704320","1539704575","CH","CHE","SWITZERLAND" -"1539704576","1539704831","HU","HUN","HUNGARY" -"1539704832","1539705087","CH","CHE","SWITZERLAND" -"1539705088","1539705343","GB","GBR","UNITED KINGDOM" -"1539705344","1539705599","UA","UKR","UKRAINE" -"1539705600","1539706111","CH","CHE","SWITZERLAND" -"1539706112","1539706367","GB","GBR","UNITED KINGDOM" -"1539706368","1539706623","RU","RUS","RUSSIAN FEDERATION" -"1539706624","1539707135","PL","POL","POLAND" -"1539707136","1539707391","LT","LTU","LITHUANIA" -"1539707392","1539707647","GB","GBR","UNITED KINGDOM" -"1539707648","1539707903","RO","ROM","ROMANIA" -"1539707904","1539708159","UA","UKR","UKRAINE" -"1539708160","1539708415","DE","DEU","GERMANY" -"1539708416","1539708671","GB","GBR","UNITED KINGDOM" -"1539708672","1539708927","RO","ROM","ROMANIA" -"1539708928","1539709183","IE","IRL","IRELAND" -"1539709184","1539709439","AT","AUT","AUSTRIA" -"1539709440","1539709695","BE","BEL","BELGIUM" -"1539709696","1539709951","NL","NLD","NETHERLANDS" -"1539709952","1539710207","DE","DEU","GERMANY" -"1539710208","1539710463","GB","GBR","UNITED KINGDOM" -"1539710464","1539710719","FR","FRA","FRANCE" -"1539710720","1539710975","UA","UKR","UKRAINE" -"1539710976","1539711231","DE","DEU","GERMANY" -"1539711232","1539711487","RU","RUS","RUSSIAN FEDERATION" -"1539711488","1539711743","UA","UKR","UKRAINE" -"1539711744","1539711999","DE","DEU","GERMANY" -"1539712000","1539712255","UA","UKR","UKRAINE" -"1539712256","1539712511","NL","NLD","NETHERLANDS" -"1539712512","1539712767","RU","RUS","RUSSIAN FEDERATION" -"1539712768","1539713023","RO","ROM","ROMANIA" -"1539713024","1539713279","UA","UKR","UKRAINE" -"1539713280","1539713535","FR","FRA","FRANCE" -"1539713536","1539713791","DK","DNK","DENMARK" -"1539713792","1539714047","DE","DEU","GERMANY" -"1539714048","1539714303","FR","FRA","FRANCE" -"1539714304","1539714559","AT","AUT","AUSTRIA" -"1539714560","1539714815","RU","RUS","RUSSIAN FEDERATION" -"1539714816","1539715071","PT","PRT","PORTUGAL" -"1539715072","1539715327","SE","SWE","SWEDEN" -"1539715328","1539715583","TR","TUR","TURKEY" -"1539715584","1539715839","UA","UKR","UKRAINE" -"1539715840","1539716095","RU","RUS","RUSSIAN FEDERATION" -"1539716096","1539716351","SI","SVN","SLOVENIA" -"1539716352","1539716607","PL","POL","POLAND" -"1539716608","1539716863","RU","RUS","RUSSIAN FEDERATION" -"1539716864","1539717375","PL","POL","POLAND" -"1539717376","1539717631","DE","DEU","GERMANY" -"1539717632","1539717887","CH","CHE","SWITZERLAND" -"1539717888","1539718143","MK","MKD","THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA" -"1539718144","1539718399","DE","DEU","GERMANY" -"1539718400","1539718655","TR","TUR","TURKEY" -"1539718656","1539718911","SA","SAU","SAUDI ARABIA" -"1539718912","1539719167","KZ","KAZ","KAZAKHSTAN" -"1539719168","1539719423","IE","IRL","IRELAND" -"1539719424","1539719679","PL","POL","POLAND" -"1539719680","1539719935","IE","IRL","IRELAND" -"1539719936","1539720191","DE","DEU","GERMANY" -"1539720192","1539720703","RU","RUS","RUSSIAN FEDERATION" -"1539720704","1539720959","IL","ISR","ISRAEL" -"1539720960","1539721215","RU","RUS","RUSSIAN FEDERATION" -"1539721216","1539721727","CH","CHE","SWITZERLAND" -"1539721728","1539721983","PL","POL","POLAND" -"1539721984","1539722239","RU","RUS","RUSSIAN FEDERATION" -"1539722240","1539722495","PL","POL","POLAND" -"1539722496","1539722751","GB","GBR","UNITED KINGDOM" -"1539722752","1539723007","DE","DEU","GERMANY" -"1539723008","1539723263","CH","CHE","SWITZERLAND" -"1539723264","1539723519","PL","POL","POLAND" -"1539723520","1539723775","GB","GBR","UNITED KINGDOM" -"1539723776","1539724031","DE","DEU","GERMANY" -"1539724032","1539724287","UA","UKR","UKRAINE" -"1539724288","1539724543","IT","ITA","ITALY" -"1539724544","1539724799","RU","RUS","RUSSIAN FEDERATION" -"1539724800","1539725055","UA","UKR","UKRAINE" -"1539725056","1539725311","NL","NLD","NETHERLANDS" -"1539725312","1539725567","FR","FRA","FRANCE" -"1539725568","1539725823","PL","POL","POLAND" -"1539725824","1539726079","PT","PRT","PORTUGAL" -"1539726080","1539726335","RU","RUS","RUSSIAN FEDERATION" -"1539726336","1539726591","SE","SWE","SWEDEN" -"1539726592","1539726847","AT","AUT","AUSTRIA" -"1539726848","1539727103","PL","POL","POLAND" -"1539727104","1539727359","SE","SWE","SWEDEN" -"1539727360","1539727615","SI","SVN","SLOVENIA" -"1539727616","1539727871","PL","POL","POLAND" -"1539727872","1539728127","RU","RUS","RUSSIAN FEDERATION" -"1539728384","1539728639","PL","POL","POLAND" -"1539728640","1539728895","UA","UKR","UKRAINE" -"1539728896","1539729151","SA","SAU","SAUDI ARABIA" -"1539729152","1539729407","NL","NLD","NETHERLANDS" -"1539729408","1539729663","RU","RUS","RUSSIAN FEDERATION" -"1539729664","1539729919","FR","FRA","FRANCE" -"1539729920","1539730175","NL","NLD","NETHERLANDS" -"1539730176","1539730431","GB","GBR","UNITED KINGDOM" -"1539730432","1539730687","GR","GRC","GREECE" -"1539730688","1539730943","KZ","KAZ","KAZAKHSTAN" -"1539730944","1539731455","PL","POL","POLAND" -"1539731456","1539731711","SI","SVN","SLOVENIA" -"1539731712","1539732223","DE","DEU","GERMANY" -"1539732224","1539732479","FR","FRA","FRANCE" -"1539732480","1539732735","UA","UKR","UKRAINE" -"1539732736","1539732991","DK","DNK","DENMARK" -"1539732992","1539733247","PL","POL","POLAND" -"1539733248","1539733503","BG","BGR","BULGARIA" -"1539733504","1539733759","FI","FIN","FINLAND" -"1539733760","1539734015","PL","POL","POLAND" -"1539734016","1539734271","FR","FRA","FRANCE" -"1539734272","1539734527","NO","NOR","NORWAY" -"1539734528","1539734783","TR","TUR","TURKEY" -"1539734784","1539735039","DE","DEU","GERMANY" -"1539735040","1539735295","BE","BEL","BELGIUM" -"1539735552","1539735807","AT","AUT","AUSTRIA" -"1539735808","1539736063","IL","ISR","ISRAEL" -"1539736064","1539736319","RU","RUS","RUSSIAN FEDERATION" -"1539736320","1539736575","HU","HUN","HUNGARY" -"1539736576","1539736831","BG","BGR","BULGARIA" -"1539736832","1539737087","UA","UKR","UKRAINE" -"1539737088","1539737343","KW","KWT","KUWAIT" -"1539737344","1539737599","RU","RUS","RUSSIAN FEDERATION" -"1539737600","1539737855","RO","ROM","ROMANIA" -"1539737856","1539738111","RU","RUS","RUSSIAN FEDERATION" -"1539738112","1539738367","DK","DNK","DENMARK" -"1539738368","1539738623","DE","DEU","GERMANY" -"1539738624","1539738879","UA","UKR","UKRAINE" -"1539738880","1539739135","NL","NLD","NETHERLANDS" -"1539739136","1539739391","AT","AUT","AUSTRIA" -"1539739392","1539739647","UA","UKR","UKRAINE" -"1539739648","1539739903","DK","DNK","DENMARK" -"1539739904","1539740415","PL","POL","POLAND" -"1539740416","1539740671","RO","ROM","ROMANIA" -"1539740672","1539740927","AT","AUT","AUSTRIA" -"1539740928","1539741183","RU","RUS","RUSSIAN FEDERATION" -"1539741184","1539741439","PL","POL","POLAND" -"1539741440","1539741695","NL","NLD","NETHERLANDS" -"1539741696","1539741951","DE","DEU","GERMANY" -"1539741952","1539742207","UA","UKR","UKRAINE" -"1539742208","1539742463","CH","CHE","SWITZERLAND" -"1539742464","1539742719","RU","RUS","RUSSIAN FEDERATION" -"1539742720","1539742975","LV","LVA","LATVIA" -"1539742976","1539743231","DE","DEU","GERMANY" -"1539743232","1539743487","GR","GRC","GREECE" -"1539743488","1539743743","FR","FRA","FRANCE" -"1539743744","1539743999","RO","ROM","ROMANIA" -"1539744000","1539744255","HR","HRV","CROATIA" -"1539744256","1539744511","RO","ROM","ROMANIA" -"1539744512","1539744767","DE","DEU","GERMANY" -"1539744768","1539745023","SE","SWE","SWEDEN" -"1539745024","1539745535","GB","GBR","UNITED KINGDOM" -"1539745536","1539745791","CH","CHE","SWITZERLAND" -"1539745792","1539746303","DK","DNK","DENMARK" -"1539746304","1539746815","RU","RUS","RUSSIAN FEDERATION" -"1539746816","1539747071","DK","DNK","DENMARK" -"1539747072","1539747327","CH","CHE","SWITZERLAND" -"1539747328","1539747583","NL","NLD","NETHERLANDS" -"1539747584","1539747839","UA","UKR","UKRAINE" -"1539747840","1539748095","NO","NOR","NORWAY" -"1539748096","1539748351","PL","POL","POLAND" -"1539748352","1539748607","NL","NLD","NETHERLANDS" -"1539748608","1539748863","PL","POL","POLAND" -"1539748864","1539749119","GB","GBR","UNITED KINGDOM" -"1539749120","1539749375","BG","BGR","BULGARIA" -"1539749376","1539749631","PT","PRT","PORTUGAL" -"1539749632","1539749887","GR","GRC","GREECE" -"1539749888","1539750143","RU","RUS","RUSSIAN FEDERATION" -"1539750144","1539750399","TR","TUR","TURKEY" -"1539750400","1539750655","PL","POL","POLAND" -"1539750656","1539750911","DE","DEU","GERMANY" -"1539750912","1539751167","UA","UKR","UKRAINE" -"1539751168","1539751423","TR","TUR","TURKEY" -"1539751424","1539751679","SI","SVN","SLOVENIA" -"1539751680","1539751935","FR","FRA","FRANCE" -"1539751936","1539752191","DE","DEU","GERMANY" -"1539752192","1539752447","SE","SWE","SWEDEN" -"1539752448","1539752703","PL","POL","POLAND" -"1539752704","1539752959","AT","AUT","AUSTRIA" -"1539752960","1539753215","RO","ROM","ROMANIA" -"1539753216","1539753471","DE","DEU","GERMANY" -"1539753472","1539753727","HU","HUN","HUNGARY" -"1539753728","1539754239","FR","FRA","FRANCE" -"1539754240","1539754495","NO","NOR","NORWAY" -"1539754496","1539754751","SE","SWE","SWEDEN" -"1539754752","1539755007","BE","BEL","BELGIUM" -"1539755008","1539755263","DK","DNK","DENMARK" -"1539755264","1539755519","IL","ISR","ISRAEL" -"1539755520","1539755775","EE","EST","ESTONIA" -"1539755776","1539756031","MT","MLT","MALTA" -"1539756032","1539756543","PL","POL","POLAND" -"1539756544","1539756799","DE","DEU","GERMANY" -"1539756800","1539757055","BE","BEL","BELGIUM" -"1539757056","1539757311","RU","RUS","RUSSIAN FEDERATION" -"1539757312","1539757567","GB","GBR","UNITED KINGDOM" -"1539757568","1539757823","SI","SVN","SLOVENIA" -"1539757824","1539758079","UA","UKR","UKRAINE" -"1539758080","1539758335","HR","HRV","CROATIA" -"1539758336","1539758591","DE","DEU","GERMANY" -"1539758592","1539758847","NL","NLD","NETHERLANDS" -"1539758848","1539759103","BA","BIH","BOSNIA AND HERZEGOVINA" -"1539759104","1539759359","DK","DNK","DENMARK" -"1539759360","1539759615","RU","RUS","RUSSIAN FEDERATION" -"1539759616","1539759871","PL","POL","POLAND" -"1539759872","1539760127","SE","SWE","SWEDEN" -"1539760128","1539760383","DE","DEU","GERMANY" -"1539760384","1539760639","RU","RUS","RUSSIAN FEDERATION" -"1539760640","1539760895","PL","POL","POLAND" -"1539760896","1539761151","DK","DNK","DENMARK" -"1539761152","1539761407","DE","DEU","GERMANY" -"1539761408","1539761663","CH","CHE","SWITZERLAND" -"1539761664","1539761919","PL","POL","POLAND" -"1539761920","1539762175","RU","RUS","RUSSIAN FEDERATION" -"1539762176","1539762431","PL","POL","POLAND" -"1539762432","1539762687","UA","UKR","UKRAINE" -"1539762944","1539763199","UA","UKR","UKRAINE" -"1539763200","1539763455","MD","MDA","REPUBLIC OF MOLDOVA" -"1539763456","1539763711","DK","DNK","DENMARK" -"1539763712","1539763967","DE","DEU","GERMANY" -"1539763968","1539764223","PT","PRT","PORTUGAL" -"1539764224","1539764479","AT","AUT","AUSTRIA" -"1539764480","1539764735","GB","GBR","UNITED KINGDOM" -"1539764736","1539764991","RO","ROM","ROMANIA" -"1539764992","1539765247","BE","BEL","BELGIUM" -"1539765248","1539765503","IE","IRL","IRELAND" -"1539765504","1539766015","PL","POL","POLAND" -"1539766016","1539766271","AM","ARM","ARMENIA" -"1539766272","1539766527","PL","POL","POLAND" -"1539766528","1539766783","UA","UKR","UKRAINE" -"1539766784","1539767039","DE","DEU","GERMANY" -"1539767040","1539767295","SA","SAU","SAUDI ARABIA" -"1539767296","1539767551","DK","DNK","DENMARK" -"1539767552","1539767807","DE","DEU","GERMANY" -"1539767808","1539768063","IL","ISR","ISRAEL" -"1539768064","1539768319","GB","GBR","UNITED KINGDOM" -"1539768320","1539768575","FR","FRA","FRANCE" -"1539768576","1539768831","GB","GBR","UNITED KINGDOM" -"1539768832","1539769087","IT","ITA","ITALY" -"1539769088","1539769599","BE","BEL","BELGIUM" -"1539769600","1539769855","AT","AUT","AUSTRIA" -"1539769856","1539770111","FR","FRA","FRANCE" -"1539770112","1539770367","GR","GRC","GREECE" -"1539770368","1539770623","DE","DEU","GERMANY" -"1539770624","1539770879","FR","FRA","FRANCE" -"1539770880","1539771135","RU","RUS","RUSSIAN FEDERATION" -"1539771136","1539771391","FR","FRA","FRANCE" -"1539771392","1539771647","PL","POL","POLAND" -"1539771648","1539771903","UA","UKR","UKRAINE" -"1539771904","1539772159","RU","RUS","RUSSIAN FEDERATION" -"1539772160","1539772415","BE","BEL","BELGIUM" -"1539772416","1539772671","RU","RUS","RUSSIAN FEDERATION" -"1539772672","1539772927","RS","SRB","SERBIA" -"1539772928","1539773183","RU","RUS","RUSSIAN FEDERATION" -"1539773184","1539773439","GB","GBR","UNITED KINGDOM" -"1539773440","1539773695","KZ","KAZ","KAZAKHSTAN" -"1539773696","1539773951","DE","DEU","GERMANY" -"1539773952","1539774207","PL","POL","POLAND" -"1539774208","1539774463","SI","SVN","SLOVENIA" -"1539774464","1539774719","RU","RUS","RUSSIAN FEDERATION" -"1539774720","1539774975","PL","POL","POLAND" -"1539774976","1539775231","RU","RUS","RUSSIAN FEDERATION" -"1539775232","1539775487","CH","CHE","SWITZERLAND" -"1539775488","1539775743","UA","UKR","UKRAINE" -"1539775744","1539775999","IL","ISR","ISRAEL" -"1539776000","1539776255","PL","POL","POLAND" -"1539776256","1539776511","SK","SVK","SLOVAKIA" -"1539776512","1539776767","HU","HUN","HUNGARY" -"1539776768","1539777023","UA","UKR","UKRAINE" -"1539777024","1539777279","RU","RUS","RUSSIAN FEDERATION" -"1539777280","1539777535","UA","UKR","UKRAINE" -"1539777536","1539777791","BG","BGR","BULGARIA" -"1539777792","1539778047","UA","UKR","UKRAINE" -"1539778048","1539778303","AM","ARM","ARMENIA" -"1539778304","1539778559","LB","LBN","LEBANON" -"1539778560","1539778815","RU","RUS","RUSSIAN FEDERATION" -"1539778816","1539779071","RO","ROM","ROMANIA" -"1539779072","1539779327","GB","GBR","UNITED KINGDOM" -"1539779328","1539779583","CH","CHE","SWITZERLAND" -"1539779584","1539779839","PL","POL","POLAND" -"1539779840","1539780095","NL","NLD","NETHERLANDS" -"1539780096","1539780351","RU","RUS","RUSSIAN FEDERATION" -"1539780352","1539780607","AT","AUT","AUSTRIA" -"1539780608","1539780863","PL","POL","POLAND" -"1539780864","1539781119","RO","ROM","ROMANIA" -"1539781120","1539781375","NL","NLD","NETHERLANDS" -"1539781632","1539781887","HU","HUN","HUNGARY" -"1539781888","1539782143","IL","ISR","ISRAEL" -"1539782144","1539782399","UA","UKR","UKRAINE" -"1539782400","1539782655","LT","LTU","LITHUANIA" -"1539782656","1539782911","GI","GIB","GIBRALTAR" -"1539782912","1539783167","PL","POL","POLAND" -"1539783168","1539783679","NL","NLD","NETHERLANDS" -"1539783680","1539783935","DE","DEU","GERMANY" -"1539783936","1539784191","SI","SVN","SLOVENIA" -"1539784192","1539784447","RU","RUS","RUSSIAN FEDERATION" -"1539784448","1539784703","NO","NOR","NORWAY" -"1539784704","1539784959","SE","SWE","SWEDEN" -"1539784960","1539785215","DE","DEU","GERMANY" -"1539785216","1539785471","CH","CHE","SWITZERLAND" -"1539785472","1539785727","RU","RUS","RUSSIAN FEDERATION" -"1539785728","1539785983","SE","SWE","SWEDEN" -"1539785984","1539786239","IL","ISR","ISRAEL" -"1539786240","1539786495","AT","AUT","AUSTRIA" -"1539786496","1539786751","GB","GBR","UNITED KINGDOM" -"1539786752","1539787007","HU","HUN","HUNGARY" -"1539787008","1539787263","TR","TUR","TURKEY" -"1539787264","1539787519","IE","IRL","IRELAND" -"1539787520","1539787775","UA","UKR","UKRAINE" -"1539787776","1539788031","CH","CHE","SWITZERLAND" -"1539788032","1539788287","HR","HRV","CROATIA" -"1539788288","1539788543","GB","GBR","UNITED KINGDOM" -"1539788544","1539788799","HR","HRV","CROATIA" -"1539789056","1539789311","RU","RUS","RUSSIAN FEDERATION" -"1539789312","1539789567","UA","UKR","UKRAINE" -"1539789568","1539789823","DE","DEU","GERMANY" -"1539789824","1539790079","NL","NLD","NETHERLANDS" -"1539790080","1539790335","CH","CHE","SWITZERLAND" -"1539790336","1539790591","EE","EST","ESTONIA" -"1539790592","1539790847","PL","POL","POLAND" -"1539790848","1539791103","DE","DEU","GERMANY" -"1539791104","1539791359","PL","POL","POLAND" -"1539791360","1539791615","RU","RUS","RUSSIAN FEDERATION" -"1539791616","1539792383","UA","UKR","UKRAINE" -"1539792384","1539792639","IL","ISR","ISRAEL" -"1539792640","1539792895","PL","POL","POLAND" -"1539792896","1539793151","GR","GRC","GREECE" -"1539793152","1539793407","PL","POL","POLAND" -"1539793408","1539793663","CH","CHE","SWITZERLAND" -"1539793664","1539794175","IL","ISR","ISRAEL" -"1539794176","1539794431","PL","POL","POLAND" -"1539794432","1539794687","DK","DNK","DENMARK" -"1539794688","1539794943","FR","FRA","FRANCE" -"1539794944","1539795199","RO","ROM","ROMANIA" -"1539795200","1539795455","PL","POL","POLAND" -"1539795456","1539795711","UA","UKR","UKRAINE" -"1539795712","1539795967","SA","SAU","SAUDI ARABIA" -"1539795968","1539796223","NL","NLD","NETHERLANDS" -"1539796224","1539796479","MC","MCO","MONACO" -"1539796480","1539796735","GB","GBR","UNITED KINGDOM" -"1539796736","1539796991","TR","TUR","TURKEY" -"1539796992","1539797247","CY","CYP","CYPRUS" -"1539797248","1539797503","DK","DNK","DENMARK" -"1539797504","1539797759","RU","RUS","RUSSIAN FEDERATION" -"1539797760","1539798015","UA","UKR","UKRAINE" -"1539798016","1539798271","HU","HUN","HUNGARY" -"1539798272","1539798527","PL","POL","POLAND" -"1539798528","1539798783","GB","GBR","UNITED KINGDOM" -"1539798784","1539799039","IL","ISR","ISRAEL" -"1539799040","1539799295","ES","ESP","SPAIN" -"1539799296","1539799551","DK","DNK","DENMARK" -"1539799552","1539799807","ES","ESP","SPAIN" -"1539799808","1539800063","RO","ROM","ROMANIA" -"1539800064","1539800319","SI","SVN","SLOVENIA" -"1539800320","1539800575","GB","GBR","UNITED KINGDOM" -"1539800576","1539800831","LV","LVA","LATVIA" -"1539800832","1539801087","PL","POL","POLAND" -"1539801088","1539801343","BG","BGR","BULGARIA" -"1539801344","1539801855","GB","GBR","UNITED KINGDOM" -"1539801856","1539802111","SI","SVN","SLOVENIA" -"1539802112","1539802367","PL","POL","POLAND" -"1539802368","1539802623","RO","ROM","ROMANIA" -"1539802624","1539802879","IS","ISL","ICELAND" -"1539802880","1539803135","NL","NLD","NETHERLANDS" -"1539803136","1539803391","GB","GBR","UNITED KINGDOM" -"1539803392","1539803647","NL","NLD","NETHERLANDS" -"1539803648","1539804159","UA","UKR","UKRAINE" -"1539804160","1539804671","PL","POL","POLAND" -"1539804672","1539804927","SI","SVN","SLOVENIA" -"1539804928","1539805439","UA","UKR","UKRAINE" -"1539805440","1539805695","AT","AUT","AUSTRIA" -"1539805696","1539805951","CH","CHE","SWITZERLAND" -"1539805952","1539806207","RU","RUS","RUSSIAN FEDERATION" -"1539806208","1539806463","FI","FIN","FINLAND" -"1539806464","1539806719","RU","RUS","RUSSIAN FEDERATION" -"1539806720","1539806975","BG","BGR","BULGARIA" -"1539806976","1539807231","GB","GBR","UNITED KINGDOM" -"1539807232","1539807487","FR","FRA","FRANCE" -"1539807488","1539807999","GB","GBR","UNITED KINGDOM" -"1539808000","1539808255","HU","HUN","HUNGARY" -"1539808256","1539808511","RU","RUS","RUSSIAN FEDERATION" -"1539808512","1539808767","RO","ROM","ROMANIA" -"1539808768","1539809023","DE","DEU","GERMANY" -"1539809024","1539809279","GB","GBR","UNITED KINGDOM" -"1539809536","1539809791","SI","SVN","SLOVENIA" -"1539809792","1539810047","DE","DEU","GERMANY" -"1539810048","1539810303","UA","UKR","UKRAINE" -"1539810304","1539810559","CZ","CZE","CZECH REPUBLIC" -"1539810560","1539810815","DE","DEU","GERMANY" -"1539810816","1539811071","TR","TUR","TURKEY" -"1539811072","1539811327","NL","NLD","NETHERLANDS" -"1539811328","1539811583","CZ","CZE","CZECH REPUBLIC" -"1539811584","1539811839","DE","DEU","GERMANY" -"1539811840","1539812095","SE","SWE","SWEDEN" -"1539812096","1539812351","RU","RUS","RUSSIAN FEDERATION" -"1539812352","1539812607","CH","CHE","SWITZERLAND" -"1539812608","1539812863","IT","ITA","ITALY" -"1539812864","1539813119","SI","SVN","SLOVENIA" -"1539813120","1539813375","AT","AUT","AUSTRIA" -"1539813376","1539813631","PL","POL","POLAND" -"1539813632","1539813887","NL","NLD","NETHERLANDS" -"1539813888","1539814143","RU","RUS","RUSSIAN FEDERATION" -"1539814144","1539814399","NL","NLD","NETHERLANDS" -"1539814400","1539814911","GB","GBR","UNITED KINGDOM" -"1539814912","1539815167","UA","UKR","UKRAINE" -"1539815168","1539815423","GB","GBR","UNITED KINGDOM" -"1539815424","1539815935","RU","RUS","RUSSIAN FEDERATION" -"1539815936","1539816191","CH","CHE","SWITZERLAND" -"1539816192","1539816447","SA","SAU","SAUDI ARABIA" -"1539816448","1539816703","UA","UKR","UKRAINE" -"1539816704","1539816959","RU","RUS","RUSSIAN FEDERATION" -"1539816960","1539817215","DK","DNK","DENMARK" -"1539817216","1539817471","TR","TUR","TURKEY" -"1539817472","1539817727","DE","DEU","GERMANY" -"1539817728","1539817983","PL","POL","POLAND" -"1539817984","1539818239","UA","UKR","UKRAINE" -"1539818240","1539818495","NO","NOR","NORWAY" -"1539818496","1539819007","RU","RUS","RUSSIAN FEDERATION" -"1539819008","1539819263","CH","CHE","SWITZERLAND" -"1539819264","1539819519","RO","ROM","ROMANIA" -"1539819520","1539819775","AT","AUT","AUSTRIA" -"1539819776","1539820031","SI","SVN","SLOVENIA" -"1539820032","1539820287","VG","VGB","VIRGIN ISLANDS, BRITISH" -"1539820288","1539820543","PL","POL","POLAND" -"1539820544","1539820799","ES","ESP","SPAIN" -"1539820800","1539821055","RU","RUS","RUSSIAN FEDERATION" -"1539821056","1539821311","UA","UKR","UKRAINE" -"1539821312","1539821567","CZ","CZE","CZECH REPUBLIC" -"1539821568","1539821823","DK","DNK","DENMARK" -"1539821824","1539822079","DE","DEU","GERMANY" -"1539822080","1539822335","RO","ROM","ROMANIA" -"1539822336","1539822591","RU","RUS","RUSSIAN FEDERATION" -"1539822592","1539822847","GB","GBR","UNITED KINGDOM" -"1539822848","1539823103","IE","IRL","IRELAND" -"1539823104","1539823359","DE","DEU","GERMANY" -"1539823360","1539823615","CY","CYP","CYPRUS" -"1539823616","1539823871","RO","ROM","ROMANIA" -"1539823872","1539824127","DK","DNK","DENMARK" -"1539824128","1539824383","CH","CHE","SWITZERLAND" -"1539824384","1539824639","NL","NLD","NETHERLANDS" -"1539824640","1539824895","HU","HUN","HUNGARY" -"1539825152","1539825407","UA","UKR","UKRAINE" -"1539825408","1539825919","RU","RUS","RUSSIAN FEDERATION" -"1539825920","1539826175","DE","DEU","GERMANY" -"1539826176","1539826431","AM","ARM","ARMENIA" -"1539826432","1539826687","BE","BEL","BELGIUM" -"1539826688","1539826943","CH","CHE","SWITZERLAND" -"1539826944","1539827199","DE","DEU","GERMANY" -"1539827200","1539827455","RU","RUS","RUSSIAN FEDERATION" -"1539827456","1539827711","MK","MKD","THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA" -"1539827712","1539827967","RU","RUS","RUSSIAN FEDERATION" -"1539827968","1539828479","FR","FRA","FRANCE" -"1539828480","1539828735","SI","SVN","SLOVENIA" -"1539828736","1539828991","NL","NLD","NETHERLANDS" -"1539828992","1539829247","BG","BGR","BULGARIA" -"1539829248","1539829503","SE","SWE","SWEDEN" -"1539829504","1539829759","DE","DEU","GERMANY" -"1539829760","1539830015","PL","POL","POLAND" -"1539830016","1539830271","DE","DEU","GERMANY" -"1539830272","1539830527","FR","FRA","FRANCE" -"1539830528","1539830783","RO","ROM","ROMANIA" -"1539830784","1539831039","RU","RUS","RUSSIAN FEDERATION" -"1539831040","1539831295","UA","UKR","UKRAINE" -"1539831296","1539831551","PL","POL","POLAND" -"1539831552","1539831807","DE","DEU","GERMANY" -"1539831808","1539832063","RU","RUS","RUSSIAN FEDERATION" -"1539832064","1539832319","GB","GBR","UNITED KINGDOM" -"1539832320","1539832575","PL","POL","POLAND" -"1539832576","1539832831","RU","RUS","RUSSIAN FEDERATION" -"1539832832","1539833087","GB","GBR","UNITED KINGDOM" -"1539833088","1539833343","RU","RUS","RUSSIAN FEDERATION" -"1539833344","1539833855","FR","FRA","FRANCE" -"1539833856","1539837951","UA","UKR","UKRAINE" -"1539837952","1539838975","NL","NLD","NETHERLANDS" -"1539838976","1539839999","GR","GRC","GREECE" -"1539840000","1539841023","PL","POL","POLAND" -"1539841024","1539842047","RU","RUS","RUSSIAN FEDERATION" -"1539842048","1539844095","PL","POL","POLAND" -"1539844096","1539846143","UA","UKR","UKRAINE" -"1539846144","1539847167","NL","NLD","NETHERLANDS" -"1539847168","1539849215","UA","UKR","UKRAINE" -"1539849216","1539850239","RU","RUS","RUSSIAN FEDERATION" -"1539850240","1539851263","LV","LVA","LATVIA" -"1539851264","1539852287","PL","POL","POLAND" -"1539852288","1539853311","UA","UKR","UKRAINE" -"1539853312","1539854335","PL","POL","POLAND" -"1539854336","1539855359","UA","UKR","UKRAINE" -"1539855360","1539856383","RU","RUS","RUSSIAN FEDERATION" -"1539856384","1539857407","UA","UKR","UKRAINE" -"1539857408","1539858431","PL","POL","POLAND" -"1539858432","1539859455","RO","ROM","ROMANIA" -"1539859456","1539860479","DE","DEU","GERMANY" -"1539861504","1539862527","DE","DEU","GERMANY" -"1539862528","1539863551","UA","UKR","UKRAINE" -"1539863552","1539864575","MD","MDA","REPUBLIC OF MOLDOVA" -"1539864576","1539865599","RO","ROM","ROMANIA" -"1539865600","1539866623","UA","UKR","UKRAINE" -"1539866624","1539867647","IT","ITA","ITALY" -"1539867648","1539869695","UA","UKR","UKRAINE" -"1539869696","1539870719","ES","ESP","SPAIN" -"1539870720","1539871743","IL","ISR","ISRAEL" -"1539871744","1539872767","ES","ESP","SPAIN" -"1539872768","1539873791","SE","SWE","SWEDEN" -"1539873792","1539875839","UA","UKR","UKRAINE" -"1539875840","1539876863","MD","MDA","REPUBLIC OF MOLDOVA" -"1539876864","1539877887","ES","ESP","SPAIN" -"1539877888","1539878911","PL","POL","POLAND" -"1539878912","1539880959","UA","UKR","UKRAINE" -"1539880960","1539881983","PL","POL","POLAND" -"1539881984","1539884031","UA","UKR","UKRAINE" -"1539884032","1539885055","MT","MLT","MALTA" -"1539885056","1539886079","UA","UKR","UKRAINE" -"1539886080","1539887103","FR","FRA","FRANCE" -"1539887104","1539888127","IT","ITA","ITALY" -"1539888128","1539889151","UA","UKR","UKRAINE" -"1539889152","1539890175","RU","RUS","RUSSIAN FEDERATION" -"1539890176","1539891199","UA","UKR","UKRAINE" -"1539891200","1539893247","RU","RUS","RUSSIAN FEDERATION" -"1539893248","1539894271","UA","UKR","UKRAINE" -"1539894272","1539895295","PL","POL","POLAND" -"1539895296","1539899391","UA","UKR","UKRAINE" -"1539899392","1539900415","RU","RUS","RUSSIAN FEDERATION" -"1539900416","1539901439","UA","UKR","UKRAINE" -"1539901440","1539902463","RU","RUS","RUSSIAN FEDERATION" -"1539902464","1539903487","LV","LVA","LATVIA" -"1539903488","1539904511","PL","POL","POLAND" -"1539904512","1539905535","CZ","CZE","CZECH REPUBLIC" -"1539905536","1539910655","UA","UKR","UKRAINE" -"1539910656","1539911679","PL","POL","POLAND" -"1539911680","1539913727","RU","RUS","RUSSIAN FEDERATION" -"1539913728","1539914751","CH","CHE","SWITZERLAND" -"1539914752","1539915775","SE","SWE","SWEDEN" -"1539915776","1539916799","RU","RUS","RUSSIAN FEDERATION" -"1539916800","1539917823","UA","UKR","UKRAINE" -"1539917824","1539918847","RU","RUS","RUSSIAN FEDERATION" -"1539918848","1539920895","RO","ROM","ROMANIA" -"1539920896","1539921919","UA","UKR","UKRAINE" -"1539921920","1539922943","PL","POL","POLAND" -"1539922944","1539923967","SE","SWE","SWEDEN" -"1539923968","1539924991","RU","RUS","RUSSIAN FEDERATION" -"1539924992","1539926015","DE","DEU","GERMANY" -"1539926016","1539927039","RU","RUS","RUSSIAN FEDERATION" -"1539927040","1539928063","UA","UKR","UKRAINE" -"1539928064","1539930111","RU","RUS","RUSSIAN FEDERATION" -"1539930112","1539931135","PL","POL","POLAND" -"1539931136","1539932159","UA","UKR","UKRAINE" -"1539932160","1539933183","DE","DEU","GERMANY" -"1539933184","1539934207","ES","ESP","SPAIN" -"1539934208","1539935231","RS","SRB","SERBIA" -"1539935232","1539936255","LV","LVA","LATVIA" -"1539936256","1539937279","UA","UKR","UKRAINE" -"1539937280","1539938303","CH","CHE","SWITZERLAND" -"1539938304","1539939327","PL","POL","POLAND" -"1539939328","1539940351","UA","UKR","UKRAINE" -"1539940352","1539941375","GB","GBR","UNITED KINGDOM" -"1539941376","1539942399","NL","NLD","NETHERLANDS" -"1539942400","1539943423","UA","UKR","UKRAINE" -"1539943424","1539944447","BG","BGR","BULGARIA" -"1539944448","1539946495","UA","UKR","UKRAINE" -"1539946496","1539947519","RU","RUS","RUSSIAN FEDERATION" -"1539947520","1539948543","UA","UKR","UKRAINE" -"1539948544","1539949567","RO","ROM","ROMANIA" -"1539949568","1539950591","MD","MDA","REPUBLIC OF MOLDOVA" -"1539950592","1539951615","KZ","KAZ","KAZAKHSTAN" -"1539951616","1539953663","RU","RUS","RUSSIAN FEDERATION" -"1539953664","1539954687","UA","UKR","UKRAINE" -"1539954688","1539956735","RO","ROM","ROMANIA" -"1539956736","1539957759","UA","UKR","UKRAINE" -"1539957760","1539958783","RU","RUS","RUSSIAN FEDERATION" -"1539958784","1539962879","UA","UKR","UKRAINE" -"1539962880","1539964927","RU","RUS","RUSSIAN FEDERATION" -"1539964928","1539965951","UA","UKR","UKRAINE" -"1539965952","1539966975","RU","RUS","RUSSIAN FEDERATION" -"1539966976","1539967999","UA","UKR","UKRAINE" -"1539968000","1539972095","RU","RUS","RUSSIAN FEDERATION" -"1539972096","1539973119","GB","GBR","UNITED KINGDOM" -"1539973120","1539975167","RU","RUS","RUSSIAN FEDERATION" -"1539975168","1539976191","DE","DEU","GERMANY" -"1539976192","1539977215","RU","RUS","RUSSIAN FEDERATION" -"1539977216","1539978239","DE","DEU","GERMANY" -"1539978240","1539980287","UA","UKR","UKRAINE" -"1539980288","1539981311","VG","VGB","VIRGIN ISLANDS, BRITISH" -"1539981312","1539982335","SI","SVN","SLOVENIA" -"1539982336","1539983359","RU","RUS","RUSSIAN FEDERATION" -"1539983360","1539984383","UA","UKR","UKRAINE" -"1539984384","1539985407","RU","RUS","RUSSIAN FEDERATION" -"1539985408","1539986431","SE","SWE","SWEDEN" -"1539986432","1539987455","RU","RUS","RUSSIAN FEDERATION" -"1539987456","1539988479","RO","ROM","ROMANIA" -"1539988480","1539990527","RU","RUS","RUSSIAN FEDERATION" -"1539990528","1539991551","PL","POL","POLAND" -"1539991552","1539993599","UA","UKR","UKRAINE" -"1539993600","1539994623","FI","FIN","FINLAND" -"1539994624","1539995647","AT","AUT","AUSTRIA" -"1539995648","1539996671","CH","CHE","SWITZERLAND" -"1539996672","1539997695","PL","POL","POLAND" -"1539997696","1539999743","UA","UKR","UKRAINE" -"1539999744","1540000767","GB","GBR","UNITED KINGDOM" -"1540000768","1540001791","RU","RUS","RUSSIAN FEDERATION" -"1540001792","1540002815","UA","UKR","UKRAINE" -"1540002816","1540003839","RU","RUS","RUSSIAN FEDERATION" -"1540003840","1540004863","PL","POL","POLAND" -"1540004864","1540005887","SE","SWE","SWEDEN" -"1540005888","1540006911","UA","UKR","UKRAINE" -"1540006912","1540007935","RU","RUS","RUSSIAN FEDERATION" -"1540007936","1540008959","IL","ISR","ISRAEL" -"1540008960","1540011007","PL","POL","POLAND" -"1540011008","1540014079","RU","RUS","RUSSIAN FEDERATION" -"1540014080","1540015103","PL","POL","POLAND" -"1540015104","1540016127","RU","RUS","RUSSIAN FEDERATION" -"1540016128","1540017151","KR","KOR","REPUBLIC OF KOREA" -"1540017152","1540018175","RU","RUS","RUSSIAN FEDERATION" -"1540018176","1540020223","UA","UKR","UKRAINE" -"1540020224","1540022271","RU","RUS","RUSSIAN FEDERATION" -"1540022272","1540023295","GB","GBR","UNITED KINGDOM" -"1540023296","1540024319","PL","POL","POLAND" -"1540024320","1540025343","RU","RUS","RUSSIAN FEDERATION" -"1540025344","1540026367","GB","GBR","UNITED KINGDOM" -"1540026368","1540028415","UA","UKR","UKRAINE" -"1540028416","1540029439","ES","ESP","SPAIN" -"1540029440","1540030463","RU","RUS","RUSSIAN FEDERATION" -"1540030464","1540031487","DE","DEU","GERMANY" -"1540031488","1540032511","UA","UKR","UKRAINE" -"1540032512","1540033535","RU","RUS","RUSSIAN FEDERATION" -"1540033536","1540034559","UA","UKR","UKRAINE" -"1540034560","1540035583","PL","POL","POLAND" -"1540035584","1540036607","RU","RUS","RUSSIAN FEDERATION" -"1540036608","1540037631","UA","UKR","UKRAINE" -"1540037632","1540038655","EE","EST","ESTONIA" -"1540038656","1540039679","FR","FRA","FRANCE" -"1540039680","1540040703","RU","RUS","RUSSIAN FEDERATION" -"1540040704","1540041727","SE","SWE","SWEDEN" -"1540041728","1540042751","RU","RUS","RUSSIAN FEDERATION" -"1540042752","1540043775","UA","UKR","UKRAINE" -"1540043776","1540044799","PL","POL","POLAND" -"1540044800","1540045823","GB","GBR","UNITED KINGDOM" -"1540045824","1540046847","UA","UKR","UKRAINE" -"1540046848","1540047871","RU","RUS","RUSSIAN FEDERATION" -"1540047872","1540048895","LV","LVA","LATVIA" -"1540048896","1540049919","GB","GBR","UNITED KINGDOM" -"1540049920","1540050943","UA","UKR","UKRAINE" -"1540050944","1540052991","RU","RUS","RUSSIAN FEDERATION" -"1540052992","1540054052","UA","UKR","UKRAINE" -"1540054053","1540054062","MD","MDA","REPUBLIC OF MOLDOVA" -"1540054063","1540055039","UA","UKR","UKRAINE" -"1540055040","1540056063","NO","NOR","NORWAY" -"1540056064","1540057087","NL","NLD","NETHERLANDS" -"1540058112","1540059135","DE","DEU","GERMANY" -"1540059136","1540060159","UA","UKR","UKRAINE" -"1540060160","1540061183","NO","NOR","NORWAY" -"1540061184","1540062207","NG","NGA","NIGERIA" -"1540062208","1540063231","RU","RUS","RUSSIAN FEDERATION" -"1540063232","1540064255","NL","NLD","NETHERLANDS" -"1540064256","1540065279","PL","POL","POLAND" -"1540065280","1540068351","UA","UKR","UKRAINE" -"1540068352","1540069375","FR","FRA","FRANCE" -"1540069376","1540070399","RU","RUS","RUSSIAN FEDERATION" -"1540071424","1540072447","SE","SWE","SWEDEN" -"1540072448","1540073471","UA","UKR","UKRAINE" -"1540073472","1540074495","RU","RUS","RUSSIAN FEDERATION" -"1540074496","1540075519","UZ","UZB","UZBEKISTAN" -"1540075520","1540077567","RU","RUS","RUSSIAN FEDERATION" -"1540077568","1540078591","FR","FRA","FRANCE" -"1540078592","1540081663","RU","RUS","RUSSIAN FEDERATION" -"1540081664","1540082687","DE","DEU","GERMANY" -"1540082688","1540083711","NO","NOR","NORWAY" -"1540083712","1540084735","RU","RUS","RUSSIAN FEDERATION" -"1540084736","1540085759","LU","LUX","LUXEMBOURG" -"1540085760","1540087807","PL","POL","POLAND" -"1540087808","1540092927","RU","RUS","RUSSIAN FEDERATION" -"1540092928","1540094975","PL","POL","POLAND" -"1540096000","1540097023","SE","SWE","SWEDEN" -"1540097024","1540099071","DE","DEU","GERMANY" -"1540099072","1540100095","UA","UKR","UKRAINE" -"1540100096","1540103167","RU","RUS","RUSSIAN FEDERATION" -"1540103168","1540105215","DE","DEU","GERMANY" -"1540105216","1540110335","UA","UKR","UKRAINE" -"1540110336","1540111359","RU","RUS","RUSSIAN FEDERATION" -"1540111360","1540112383","UA","UKR","UKRAINE" -"1540112384","1540113407","LV","LVA","LATVIA" -"1540113408","1540115455","RU","RUS","RUSSIAN FEDERATION" -"1540115456","1540116479","UA","UKR","UKRAINE" -"1540116480","1540117503","CH","CHE","SWITZERLAND" -"1540117504","1540118527","UA","UKR","UKRAINE" -"1540118528","1540119551","PL","POL","POLAND" -"1540119552","1540120575","UA","UKR","UKRAINE" -"1540120576","1540124671","RU","RUS","RUSSIAN FEDERATION" -"1540124672","1540125695","NO","NOR","NORWAY" -"1540125696","1540126719","FR","FRA","FRANCE" -"1540126720","1540127743","UA","UKR","UKRAINE" -"1540127744","1540128767","GB","GBR","UNITED KINGDOM" -"1540128768","1540129791","RU","RUS","RUSSIAN FEDERATION" -"1540129792","1540130815","UA","UKR","UKRAINE" -"1540130816","1540131839","RU","RUS","RUSSIAN FEDERATION" -"1540131840","1540132863","PL","POL","POLAND" -"1540132864","1540134911","RU","RUS","RUSSIAN FEDERATION" -"1540134912","1540135935","PL","POL","POLAND" -"1540135936","1540136959","BG","BGR","BULGARIA" -"1540136960","1540137983","PL","POL","POLAND" -"1540137984","1540139007","RU","RUS","RUSSIAN FEDERATION" -"1540139008","1540140031","DE","DEU","GERMANY" -"1540140032","1540141055","GB","GBR","UNITED KINGDOM" -"1540141056","1540142079","RU","RUS","RUSSIAN FEDERATION" -"1540142080","1540143103","UA","UKR","UKRAINE" -"1540143104","1540144127","RU","RUS","RUSSIAN FEDERATION" -"1540144128","1540145151","AM","ARM","ARMENIA" -"1540145152","1540146175","AT","AUT","AUSTRIA" -"1540146176","1540147199","UA","UKR","UKRAINE" -"1540147200","1540148223","RU","RUS","RUSSIAN FEDERATION" -"1540148224","1540149247","PL","POL","POLAND" -"1540149248","1540150271","GB","GBR","UNITED KINGDOM" -"1540150272","1540151295","UA","UKR","UKRAINE" -"1540151296","1540152319","AT","AUT","AUSTRIA" -"1540152320","1540153343","SE","SWE","SWEDEN" -"1540153344","1540156415","RU","RUS","RUSSIAN FEDERATION" -"1540156416","1540157439","UZ","UZB","UZBEKISTAN" -"1540157440","1540158463","RU","RUS","RUSSIAN FEDERATION" -"1540158464","1540159487","GB","GBR","UNITED KINGDOM" -"1540159488","1540160511","UA","UKR","UKRAINE" -"1540160512","1540162559","RU","RUS","RUSSIAN FEDERATION" -"1540162560","1540163583","UA","UKR","UKRAINE" -"1540163584","1540164607","RU","RUS","RUSSIAN FEDERATION" -"1540164608","1540165631","DE","DEU","GERMANY" -"1540165632","1540166655","UA","UKR","UKRAINE" -"1540166656","1540167679","PL","POL","POLAND" -"1540167680","1540168703","RU","RUS","RUSSIAN FEDERATION" -"1540168704","1540169727","DE","DEU","GERMANY" -"1540169728","1540170751","NL","NLD","NETHERLANDS" -"1540170752","1540171775","DE","DEU","GERMANY" -"1540171776","1540172799","GB","GBR","UNITED KINGDOM" -"1540172800","1540173823","RU","RUS","RUSSIAN FEDERATION" -"1540173824","1540174847","KG","KGZ","KYRGYZSTAN" -"1540174848","1540175871","RU","RUS","RUSSIAN FEDERATION" -"1540175872","1540176895","DE","DEU","GERMANY" -"1540176896","1540177919","SE","SWE","SWEDEN" -"1540177920","1540178943","UA","UKR","UKRAINE" -"1540178944","1540179967","BA","BIH","BOSNIA AND HERZEGOVINA" -"1540179968","1540180991","PL","POL","POLAND" -"1540180992","1540182015","DE","DEU","GERMANY" -"1540182016","1540183039","UA","UKR","UKRAINE" -"1540183040","1540184063","RU","RUS","RUSSIAN FEDERATION" -"1540184064","1540185087","PL","POL","POLAND" -"1540185088","1540186111","RU","RUS","RUSSIAN FEDERATION" -"1540186112","1540187135","NL","NLD","NETHERLANDS" -"1540187136","1540188159","US","USA","UNITED STATES" -"1540188160","1540189183","KZ","KAZ","KAZAKHSTAN" -"1540189184","1540190207","GB","GBR","UNITED KINGDOM" -"1540190208","1540191231","PT","PRT","PORTUGAL" -"1540191232","1540192255","FR","FRA","FRANCE" -"1540192256","1540195327","RU","RUS","RUSSIAN FEDERATION" -"1540195328","1540198399","AM","ARM","ARMENIA" -"1540198400","1540199423","RU","RUS","RUSSIAN FEDERATION" -"1540199424","1540200447","CH","CHE","SWITZERLAND" -"1540200448","1540201471","IL","ISR","ISRAEL" -"1540201472","1540202495","UA","UKR","UKRAINE" -"1540203520","1540204543","UA","UKR","UKRAINE" -"1540204544","1540205567","RU","RUS","RUSSIAN FEDERATION" -"1540205568","1540206591","DE","DEU","GERMANY" -"1540206592","1540207615","RU","RUS","RUSSIAN FEDERATION" -"1540208640","1540209663","NO","NOR","NORWAY" -"1540209664","1540211711","RU","RUS","RUSSIAN FEDERATION" -"1540211712","1540212735","DE","DEU","GERMANY" -"1540213760","1540214783","UA","UKR","UKRAINE" -"1540214784","1540215807","RU","RUS","RUSSIAN FEDERATION" -"1540215808","1540216831","NL","NLD","NETHERLANDS" -"1540216832","1540217855","UA","UKR","UKRAINE" -"1540217856","1540218879","GB","GBR","UNITED KINGDOM" -"1540218880","1540219903","RU","RUS","RUSSIAN FEDERATION" -"1540219904","1540220927","PL","POL","POLAND" -"1540220928","1540221951","NL","NLD","NETHERLANDS" -"1540221952","1540223999","RU","RUS","RUSSIAN FEDERATION" -"1540224000","1540225023","PL","POL","POLAND" -"1540225024","1540226047","GB","GBR","UNITED KINGDOM" -"1540226048","1540227071","RU","RUS","RUSSIAN FEDERATION" -"1540227072","1540227583","GB","GBR","UNITED KINGDOM" -"1540227584","1540228095","RU","RUS","RUSSIAN FEDERATION" -"1540228096","1540228607","UA","UKR","UKRAINE" -"1540228608","1540229119","PL","POL","POLAND" -"1540229120","1540229631","AT","AUT","AUSTRIA" -"1540229632","1540230143","NL","NLD","NETHERLANDS" -"1540230144","1540232191","RU","RUS","RUSSIAN FEDERATION" -"1540232192","1540232703","BG","BGR","BULGARIA" -"1540232704","1540233215","RU","RUS","RUSSIAN FEDERATION" -"1540233216","1540233727","CH","CHE","SWITZERLAND" -"1540233728","1540234239","PL","POL","POLAND" -"1540234240","1540234751","DE","DEU","GERMANY" -"1540234752","1540235775","UA","UKR","UKRAINE" -"1540235776","1540236287","NO","NOR","NORWAY" -"1540236288","1540236799","RO","ROM","ROMANIA" -"1540236800","1540237311","PL","POL","POLAND" -"1540237312","1540238847","RO","ROM","ROMANIA" -"1540238848","1540239359","DE","DEU","GERMANY" -"1540239360","1540239871","UA","UKR","UKRAINE" -"1540240384","1540240895","CH","CHE","SWITZERLAND" -"1540240896","1540242431","RU","RUS","RUSSIAN FEDERATION" -"1540242432","1540242943","DE","DEU","GERMANY" -"1540242944","1540243455","RU","RUS","RUSSIAN FEDERATION" -"1540243456","1540243967","PL","POL","POLAND" -"1540243968","1540244479","RU","RUS","RUSSIAN FEDERATION" -"1540244480","1540244991","CH","CHE","SWITZERLAND" -"1540244992","1540245503","DE","DEU","GERMANY" -"1540245504","1540246015","RU","RUS","RUSSIAN FEDERATION" -"1540246016","1540246527","IT","ITA","ITALY" -"1540246528","1540247551","RO","ROM","ROMANIA" -"1540247552","1540248063","NL","NLD","NETHERLANDS" -"1540248064","1540248575","RO","ROM","ROMANIA" -"1540248576","1540249087","GB","GBR","UNITED KINGDOM" -"1540249088","1540249599","PL","POL","POLAND" -"1540249600","1540250111","KZ","KAZ","KAZAKHSTAN" -"1540250112","1540250623","DK","DNK","DENMARK" -"1540250624","1540251135","RU","RUS","RUSSIAN FEDERATION" -"1540251136","1540251647","GB","GBR","UNITED KINGDOM" -"1540251648","1540252159","PL","POL","POLAND" -"1540252160","1540252671","DE","DEU","GERMANY" -"1540252672","1540253183","RU","RUS","RUSSIAN FEDERATION" -"1540253184","1540253695","AT","AUT","AUSTRIA" -"1540253696","1540254207","CH","CHE","SWITZERLAND" -"1540254208","1540254719","RU","RUS","RUSSIAN FEDERATION" -"1540254720","1540255231","PL","POL","POLAND" -"1540255232","1540255743","UA","UKR","UKRAINE" -"1540255744","1540256255","AT","AUT","AUSTRIA" -"1540256256","1540256767","PL","POL","POLAND" -"1540256768","1540257279","RU","RUS","RUSSIAN FEDERATION" -"1540257280","1540257791","GB","GBR","UNITED KINGDOM" -"1540257792","1540258303","RU","RUS","RUSSIAN FEDERATION" -"1540258304","1540258815","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1540258816","1540259327","UA","UKR","UKRAINE" -"1540259328","1540259839","RU","RUS","RUSSIAN FEDERATION" -"1540259840","1540260351","IT","ITA","ITALY" -"1540260352","1540260863","RU","RUS","RUSSIAN FEDERATION" -"1540260864","1540261375","LT","LTU","LITHUANIA" -"1540261376","1540261887","SA","SAU","SAUDI ARABIA" -"1540261888","1540262399","NL","NLD","NETHERLANDS" -"1540262400","1540262911","BG","BGR","BULGARIA" -"1540262912","1540263423","RO","ROM","ROMANIA" -"1540263424","1540263935","DE","DEU","GERMANY" -"1540263936","1540264447","GB","GBR","UNITED KINGDOM" -"1540264448","1540265983","RU","RUS","RUSSIAN FEDERATION" -"1540265984","1540266495","DE","DEU","GERMANY" -"1540266496","1540267007","PL","POL","POLAND" -"1540267008","1540267519","FR","FRA","FRANCE" -"1540267520","1540268543","RO","ROM","ROMANIA" -"1540268544","1540269055","RU","RUS","RUSSIAN FEDERATION" -"1540269056","1540269567","DK","DNK","DENMARK" -"1540269568","1540270079","RU","RUS","RUSSIAN FEDERATION" -"1540270080","1540270591","GB","GBR","UNITED KINGDOM" -"1540270592","1540271103","IL","ISR","ISRAEL" -"1540271104","1540271615","PL","POL","POLAND" -"1540271616","1540272127","SE","SWE","SWEDEN" -"1540272128","1540272639","GB","GBR","UNITED KINGDOM" -"1540272640","1540273663","PL","POL","POLAND" -"1540273664","1540274175","GB","GBR","UNITED KINGDOM" -"1540274176","1540274687","DE","DEU","GERMANY" -"1540274688","1540275199","UA","UKR","UKRAINE" -"1540275200","1540275711","DE","DEU","GERMANY" -"1540275712","1540276223","GR","GRC","GREECE" -"1540276224","1540276735","AT","AUT","AUSTRIA" -"1540276736","1540277247","RO","ROM","ROMANIA" -"1540277248","1540277759","RU","RUS","RUSSIAN FEDERATION" -"1540277760","1540278271","FR","FRA","FRANCE" -"1540278272","1540278783","UA","UKR","UKRAINE" -"1540278784","1540279807","RU","RUS","RUSSIAN FEDERATION" -"1540279808","1540280319","RO","ROM","ROMANIA" -"1540280320","1540280831","MD","MDA","REPUBLIC OF MOLDOVA" -"1540280832","1540281343","PL","POL","POLAND" -"1540281344","1540281855","UA","UKR","UKRAINE" -"1540281856","1540282367","DE","DEU","GERMANY" -"1540282368","1540282879","RU","RUS","RUSSIAN FEDERATION" -"1540282880","1540283391","UA","UKR","UKRAINE" -"1540283392","1540284415","RU","RUS","RUSSIAN FEDERATION" -"1540284416","1540284927","AT","AUT","AUSTRIA" -"1540284928","1540285439","UA","UKR","UKRAINE" -"1540285440","1540285951","DE","DEU","GERMANY" -"1540285952","1540286463","RU","RUS","RUSSIAN FEDERATION" -"1540286464","1540286975","NL","NLD","NETHERLANDS" -"1540286976","1540287487","GB","GBR","UNITED KINGDOM" -"1540287488","1540288511","AT","AUT","AUSTRIA" -"1540288512","1540289535","RU","RUS","RUSSIAN FEDERATION" -"1540289536","1540290047","PL","POL","POLAND" -"1540290048","1540290559","NL","NLD","NETHERLANDS" -"1540290560","1540291071","RU","RUS","RUSSIAN FEDERATION" -"1540291072","1540291583","BE","BEL","BELGIUM" -"1540291584","1540292095","UA","UKR","UKRAINE" -"1540292096","1540292607","RU","RUS","RUSSIAN FEDERATION" -"1540292608","1540293119","FR","FRA","FRANCE" -"1540293120","1540293631","DK","DNK","DENMARK" -"1540293632","1540295167","UA","UKR","UKRAINE" -"1540295168","1540295679","PL","POL","POLAND" -"1540295680","1540296191","SA","SAU","SAUDI ARABIA" -"1540296192","1540296703","PL","POL","POLAND" -"1540296704","1540297215","DE","DEU","GERMANY" -"1540297216","1540298239","FR","FRA","FRANCE" -"1540298240","1540298751","HR","HRV","CROATIA" -"1540298752","1540299263","RU","RUS","RUSSIAN FEDERATION" -"1540299264","1540299775","UA","UKR","UKRAINE" -"1540299776","1540300287","KZ","KAZ","KAZAKHSTAN" -"1540300288","1540300799","RU","RUS","RUSSIAN FEDERATION" -"1540300800","1540301311","DK","DNK","DENMARK" -"1540301312","1540301823","IL","ISR","ISRAEL" -"1540301824","1540302847","GB","GBR","UNITED KINGDOM" -"1540302848","1540303871","RU","RUS","RUSSIAN FEDERATION" -"1540303872","1540304895","UA","UKR","UKRAINE" -"1540304896","1540305407","PL","POL","POLAND" -"1540305408","1540305919","GB","GBR","UNITED KINGDOM" -"1540305920","1540306431","RU","RUS","RUSSIAN FEDERATION" -"1540306432","1540306943","UA","UKR","UKRAINE" -"1540306944","1540307455","GB","GBR","UNITED KINGDOM" -"1540307456","1540307967","RU","RUS","RUSSIAN FEDERATION" -"1540307968","1540308479","UA","UKR","UKRAINE" -"1540308480","1540308991","RS","SRB","SERBIA" -"1540308992","1540309503","PL","POL","POLAND" -"1540309504","1540310015","UA","UKR","UKRAINE" -"1540310016","1540310527","PL","POL","POLAND" -"1540310528","1540313087","RU","RUS","RUSSIAN FEDERATION" -"1540313088","1540313599","SE","SWE","SWEDEN" -"1540313600","1540315135","RU","RUS","RUSSIAN FEDERATION" -"1540315136","1540315647","UA","UKR","UKRAINE" -"1540315648","1540316159","IL","ISR","ISRAEL" -"1540316160","1540316671","DE","DEU","GERMANY" -"1540316672","1540317183","RO","ROM","ROMANIA" -"1540317184","1540317695","KG","KGZ","KYRGYZSTAN" -"1540317696","1540318207","UA","UKR","UKRAINE" -"1540318208","1540318719","RU","RUS","RUSSIAN FEDERATION" -"1540318720","1540319231","RO","ROM","ROMANIA" -"1540319232","1540320255","UA","UKR","UKRAINE" -"1540320256","1540320767","RU","RUS","RUSSIAN FEDERATION" -"1540320768","1540321279","FR","FRA","FRANCE" -"1540321280","1540321791","SE","SWE","SWEDEN" -"1540321792","1540322303","RU","RUS","RUSSIAN FEDERATION" -"1540322304","1540322815","UA","UKR","UKRAINE" -"1540322816","1540323327","DE","DEU","GERMANY" -"1540323328","1540323839","RO","ROM","ROMANIA" -"1540323840","1540324351","UA","UKR","UKRAINE" -"1540324352","1540324863","RO","ROM","ROMANIA" -"1540324864","1540325375","PL","POL","POLAND" -"1540325376","1540325887","DE","DEU","GERMANY" -"1540325888","1540326399","LI","LIE","LIECHTENSTEIN" -"1540326400","1540326911","RU","RUS","RUSSIAN FEDERATION" -"1540326912","1540327423","AT","AUT","AUSTRIA" -"1540327424","1540327935","RU","RUS","RUSSIAN FEDERATION" -"1540328448","1540329983","RU","RUS","RUSSIAN FEDERATION" -"1540329984","1540330495","UA","UKR","UKRAINE" -"1540330496","1540331007","PL","POL","POLAND" -"1540331008","1540331519","IT","ITA","ITALY" -"1540331520","1540332031","GB","GBR","UNITED KINGDOM" -"1540332032","1540332543","RU","RUS","RUSSIAN FEDERATION" -"1540332544","1540333055","PL","POL","POLAND" -"1540333056","1540333567","NO","NOR","NORWAY" -"1540333568","1540334079","RO","ROM","ROMANIA" -"1540334080","1540334591","DE","DEU","GERMANY" -"1540334592","1540335103","RU","RUS","RUSSIAN FEDERATION" -"1540335104","1540336127","PL","POL","POLAND" -"1540336128","1540336639","RU","RUS","RUSSIAN FEDERATION" -"1540336640","1540337663","MC","MCO","MONACO" -"1540337664","1540338175","FR","FRA","FRANCE" -"1540338176","1540339199","RU","RUS","RUSSIAN FEDERATION" -"1540339200","1540339711","UA","UKR","UKRAINE" -"1540339712","1540340735","PL","POL","POLAND" -"1540340736","1540341247","CZ","CZE","CZECH REPUBLIC" -"1540341248","1540341759","BG","BGR","BULGARIA" -"1540341760","1540342271","GB","GBR","UNITED KINGDOM" -"1540342272","1540342783","UA","UKR","UKRAINE" -"1540342784","1540343295","ES","ESP","SPAIN" -"1540343296","1540343807","GB","GBR","UNITED KINGDOM" -"1540343808","1540344831","PL","POL","POLAND" -"1540344832","1540345343","UA","UKR","UKRAINE" -"1540345344","1540345855","IL","ISR","ISRAEL" -"1540345856","1540346367","FR","FRA","FRANCE" -"1540346368","1540346879","UA","UKR","UKRAINE" -"1540346880","1540347391","GB","GBR","UNITED KINGDOM" -"1540347392","1540347903","DK","DNK","DENMARK" -"1540347904","1540348415","RO","ROM","ROMANIA" -"1540348416","1540348927","UA","UKR","UKRAINE" -"1540348928","1540349439","GB","GBR","UNITED KINGDOM" -"1540349440","1540349951","AT","AUT","AUSTRIA" -"1540349952","1540350463","UA","UKR","UKRAINE" -"1540350464","1540350975","NO","NOR","NORWAY" -"1540350976","1540351487","DK","DNK","DENMARK" -"1540351488","1540351999","RO","ROM","ROMANIA" -"1540352000","1540352511","NL","NLD","NETHERLANDS" -"1540352512","1540353023","RU","RUS","RUSSIAN FEDERATION" -"1540353024","1540353535","GR","GRC","GREECE" -"1540353536","1540354047","RU","RUS","RUSSIAN FEDERATION" -"1540354048","1540354559","IL","ISR","ISRAEL" -"1540354560","1540355071","PL","POL","POLAND" -"1540355072","1540355583","UA","UKR","UKRAINE" -"1540355584","1540356607","RU","RUS","RUSSIAN FEDERATION" -"1540356608","1540357119","DE","DEU","GERMANY" -"1540357120","1540357631","RU","RUS","RUSSIAN FEDERATION" -"1540357632","1540358143","FR","FRA","FRANCE" -"1540358144","1540358399","RU","RUS","RUSSIAN FEDERATION" -"1540358400","1540358655","GB","GBR","UNITED KINGDOM" -"1540358656","1540358911","SE","SWE","SWEDEN" -"1540358912","1540359167","GB","GBR","UNITED KINGDOM" -"1540359168","1540359423","SA","SAU","SAUDI ARABIA" -"1540359424","1540359679","DE","DEU","GERMANY" -"1540359680","1540359935","GB","GBR","UNITED KINGDOM" -"1540359936","1540360191","AT","AUT","AUSTRIA" -"1540360192","1540360447","NO","NOR","NORWAY" -"1540360448","1540360703","FR","FRA","FRANCE" -"1540360704","1540360959","PL","POL","POLAND" -"1540360960","1540361215","GB","GBR","UNITED KINGDOM" -"1540361216","1540361471","BE","BEL","BELGIUM" -"1540361472","1540361727","DE","DEU","GERMANY" -"1540361728","1540361983","IT","ITA","ITALY" -"1540361984","1540362239","EE","EST","ESTONIA" -"1540362240","1540362495","DK","DNK","DENMARK" -"1540362496","1540363007","DE","DEU","GERMANY" -"1540363008","1540363263","FR","FRA","FRANCE" -"1540363264","1540363519","RU","RUS","RUSSIAN FEDERATION" -"1540363520","1540363775","GB","GBR","UNITED KINGDOM" -"1540363776","1540364031","IS","ISL","ICELAND" -"1540364032","1540364287","RU","RUS","RUSSIAN FEDERATION" -"1540364288","1540364543","NO","NOR","NORWAY" -"1540364544","1540364799","UA","UKR","UKRAINE" -"1540364800","1540365055","EE","EST","ESTONIA" -"1540365056","1540365311","SI","SVN","SLOVENIA" -"1540365312","1540365567","GB","GBR","UNITED KINGDOM" -"1540365568","1540365823","RU","RUS","RUSSIAN FEDERATION" -"1540365824","1540366079","CH","CHE","SWITZERLAND" -"1540366080","1540366335","IE","IRL","IRELAND" -"1540366336","1540366591","PL","POL","POLAND" -"1540366592","1540366847","RU","RUS","RUSSIAN FEDERATION" -"1540366848","1540367103","AT","AUT","AUSTRIA" -"1540367360","1540367615","HU","HUN","HUNGARY" -"1540367616","1540367871","BE","BEL","BELGIUM" -"1540367872","1540368127","DE","DEU","GERMANY" -"1540368128","1540368383","RU","RUS","RUSSIAN FEDERATION" -"1540368384","1540368639","FR","FRA","FRANCE" -"1540368640","1540368895","SK","SVK","SLOVAKIA" -"1540368896","1540369407","RU","RUS","RUSSIAN FEDERATION" -"1540369408","1540369663","PL","POL","POLAND" -"1540369664","1540369919","DE","DEU","GERMANY" -"1540369920","1540370175","UA","UKR","UKRAINE" -"1540370176","1540370431","DE","DEU","GERMANY" -"1540370432","1540370687","LB","LBN","LEBANON" -"1540370688","1540370943","NL","NLD","NETHERLANDS" -"1540370944","1540371199","PL","POL","POLAND" -"1540371200","1540371455","BE","BEL","BELGIUM" -"1540371456","1540371711","UA","UKR","UKRAINE" -"1540371712","1540371967","GB","GBR","UNITED KINGDOM" -"1540371968","1540372223","NO","NOR","NORWAY" -"1540372224","1540372479","PL","POL","POLAND" -"1540372736","1540372991","GR","GRC","GREECE" -"1540372992","1540373247","DE","DEU","GERMANY" -"1540373248","1540373503","UA","UKR","UKRAINE" -"1540373504","1540373759","NL","NLD","NETHERLANDS" -"1540373760","1540374015","TR","TUR","TURKEY" -"1540374016","1540374271","NL","NLD","NETHERLANDS" -"1540374272","1540374527","HU","HUN","HUNGARY" -"1540374528","1540374783","RU","RUS","RUSSIAN FEDERATION" -"1540374784","1540375039","UA","UKR","UKRAINE" -"1540375040","1540375295","DE","DEU","GERMANY" -"1540375296","1540375551","GB","GBR","UNITED KINGDOM" -"1540375552","1540375807","DE","DEU","GERMANY" -"1540375808","1540376063","NL","NLD","NETHERLANDS" -"1540376064","1540376319","TR","TUR","TURKEY" -"1540376320","1540376575","DK","DNK","DENMARK" -"1540376576","1540376831","PL","POL","POLAND" -"1540376832","1540377087","RU","RUS","RUSSIAN FEDERATION" -"1540377088","1540377343","DE","DEU","GERMANY" -"1540377344","1540377599","RO","ROM","ROMANIA" -"1540377600","1540377855","AM","ARM","ARMENIA" -"1540377856","1540378111","ES","ESP","SPAIN" -"1540378368","1540378623","CH","CHE","SWITZERLAND" -"1540378624","1540378879","AT","AUT","AUSTRIA" -"1540378880","1540379135","SE","SWE","SWEDEN" -"1540379136","1540379391","CH","CHE","SWITZERLAND" -"1540379392","1540379647","DE","DEU","GERMANY" -"1540379648","1540379903","RU","RUS","RUSSIAN FEDERATION" -"1540380160","1540380415","IL","ISR","ISRAEL" -"1540380416","1540380671","NL","NLD","NETHERLANDS" -"1540380672","1540380927","SI","SVN","SLOVENIA" -"1540380928","1540381183","RS","SRB","SERBIA" -"1540381184","1540381439","RO","ROM","ROMANIA" -"1540381440","1540381695","AT","AUT","AUSTRIA" -"1540381696","1540381951","RO","ROM","ROMANIA" -"1540381952","1540382207","PL","POL","POLAND" -"1540382208","1540382463","UA","UKR","UKRAINE" -"1540382464","1540382719","GB","GBR","UNITED KINGDOM" -"1540382720","1540382975","LB","LBN","LEBANON" -"1540382976","1540383231","UA","UKR","UKRAINE" -"1540383232","1540383487","AT","AUT","AUSTRIA" -"1540383488","1540383743","GB","GBR","UNITED KINGDOM" -"1540383744","1540383999","RO","ROM","ROMANIA" -"1540384000","1540384255","SI","SVN","SLOVENIA" -"1540384256","1540384511","FR","FRA","FRANCE" -"1540384512","1540384767","SE","SWE","SWEDEN" -"1540384768","1540385023","HR","HRV","CROATIA" -"1540385024","1540385279","GB","GBR","UNITED KINGDOM" -"1540385280","1540385535","PL","POL","POLAND" -"1540385536","1540385791","DE","DEU","GERMANY" -"1540385792","1540386303","FR","FRA","FRANCE" -"1540386304","1540386559","NL","NLD","NETHERLANDS" -"1540386560","1540386815","GB","GBR","UNITED KINGDOM" -"1540386816","1540387071","NL","NLD","NETHERLANDS" -"1540387072","1540387327","RU","RUS","RUSSIAN FEDERATION" -"1540387328","1540387583","GB","GBR","UNITED KINGDOM" -"1540387584","1540388095","UA","UKR","UKRAINE" -"1540388096","1540388351","GB","GBR","UNITED KINGDOM" -"1540388352","1540388607","IL","ISR","ISRAEL" -"1540388608","1540388863","RU","RUS","RUSSIAN FEDERATION" -"1540388864","1540389119","RO","ROM","ROMANIA" -"1540389120","1540389375","RU","RUS","RUSSIAN FEDERATION" -"1540389376","1540389631","GB","GBR","UNITED KINGDOM" -"1540389632","1540389887","RO","ROM","ROMANIA" -"1540389888","1540390143","GB","GBR","UNITED KINGDOM" -"1540390144","1540390399","SI","SVN","SLOVENIA" -"1540390400","1540390655","RU","RUS","RUSSIAN FEDERATION" -"1540390656","1540390911","UA","UKR","UKRAINE" -"1540390912","1540391167","SA","SAU","SAUDI ARABIA" -"1540391168","1540391423","IL","ISR","ISRAEL" -"1540391424","1540391679","CH","CHE","SWITZERLAND" -"1540391680","1540391935","NL","NLD","NETHERLANDS" -"1540391936","1540392191","RU","RUS","RUSSIAN FEDERATION" -"1540392192","1540392447","PL","POL","POLAND" -"1540392448","1540392703","RU","RUS","RUSSIAN FEDERATION" -"1540392704","1540392959","PL","POL","POLAND" -"1540392960","1540393471","GB","GBR","UNITED KINGDOM" -"1540393472","1540393727","UA","UKR","UKRAINE" -"1540393728","1540394239","IL","ISR","ISRAEL" -"1540394240","1540394495","GB","GBR","UNITED KINGDOM" -"1540394496","1540394751","RO","ROM","ROMANIA" -"1540394752","1540395007","DK","DNK","DENMARK" -"1540395008","1540395263","GE","GEO","GEORGIA" -"1540395264","1540395519","UA","UKR","UKRAINE" -"1540395520","1540395775","GB","GBR","UNITED KINGDOM" -"1540395776","1540396031","IL","ISR","ISRAEL" -"1540396032","1540396287","NO","NOR","NORWAY" -"1540396288","1540396543","AM","ARM","ARMENIA" -"1540396544","1540396799","PL","POL","POLAND" -"1540396800","1540397055","RU","RUS","RUSSIAN FEDERATION" -"1540397056","1540397311","IT","ITA","ITALY" -"1540397312","1540397823","UA","UKR","UKRAINE" -"1540397824","1540398079","DE","DEU","GERMANY" -"1540398080","1540398335","SA","SAU","SAUDI ARABIA" -"1540398336","1540398591","DK","DNK","DENMARK" -"1540398592","1540398847","IT","ITA","ITALY" -"1540398848","1540399359","DE","DEU","GERMANY" -"1540399360","1540399871","RU","RUS","RUSSIAN FEDERATION" -"1540399872","1540400127","GB","GBR","UNITED KINGDOM" -"1540400128","1540400383","NL","NLD","NETHERLANDS" -"1540400384","1540400639","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1540400640","1540400895","RU","RUS","RUSSIAN FEDERATION" -"1540400896","1540401151","NL","NLD","NETHERLANDS" -"1540401152","1540401407","SI","SVN","SLOVENIA" -"1540401408","1540401663","AT","AUT","AUSTRIA" -"1540401664","1540401919","GB","GBR","UNITED KINGDOM" -"1540401920","1540402175","RU","RUS","RUSSIAN FEDERATION" -"1540402176","1540402431","FR","FRA","FRANCE" -"1540402432","1540402687","CH","CHE","SWITZERLAND" -"1540402688","1540402943","SE","SWE","SWEDEN" -"1540402944","1540403199","NL","NLD","NETHERLANDS" -"1540403200","1540403455","AT","AUT","AUSTRIA" -"1540403456","1540403711","GB","GBR","UNITED KINGDOM" -"1540403712","1540404223","RO","ROM","ROMANIA" -"1540404224","1540404479","CH","CHE","SWITZERLAND" -"1540404480","1540404735","FR","FRA","FRANCE" -"1540404736","1540404991","PL","POL","POLAND" -"1540404992","1540405247","RU","RUS","RUSSIAN FEDERATION" -"1540405248","1540405503","GB","GBR","UNITED KINGDOM" -"1540405504","1540405759","RU","RUS","RUSSIAN FEDERATION" -"1540405760","1540406015","PL","POL","POLAND" -"1540406016","1540406271","RU","RUS","RUSSIAN FEDERATION" -"1540406272","1540406527","SE","SWE","SWEDEN" -"1540406528","1540407039","PL","POL","POLAND" -"1540407040","1540407807","DE","DEU","GERMANY" -"1540407808","1540408063","UA","UKR","UKRAINE" -"1540408064","1540408319","IT","ITA","ITALY" -"1540408320","1540408575","NL","NLD","NETHERLANDS" -"1540408576","1540408831","HR","HRV","CROATIA" -"1540408832","1540409087","UA","UKR","UKRAINE" -"1540409088","1540409343","TR","TUR","TURKEY" -"1540409344","1540409599","SI","SVN","SLOVENIA" -"1540409600","1540409855","AT","AUT","AUSTRIA" -"1540409856","1540410111","DE","DEU","GERMANY" -"1540410112","1540410367","KW","KWT","KUWAIT" -"1540410368","1540410623","CH","CHE","SWITZERLAND" -"1540410624","1540410879","RU","RUS","RUSSIAN FEDERATION" -"1540410880","1540411135","TR","TUR","TURKEY" -"1540411136","1540411391","SG","SGP","SINGAPORE" -"1540411392","1540411647","RU","RUS","RUSSIAN FEDERATION" -"1540411648","1540411903","FR","FRA","FRANCE" -"1540411904","1540412159","RU","RUS","RUSSIAN FEDERATION" -"1540412160","1540412415","BE","BEL","BELGIUM" -"1540412416","1540412671","DE","DEU","GERMANY" -"1540412672","1540412927","RO","ROM","ROMANIA" -"1540412928","1540413183","FR","FRA","FRANCE" -"1540413184","1540413439","RO","ROM","ROMANIA" -"1540413440","1540413695","RU","RUS","RUSSIAN FEDERATION" -"1540413696","1540413951","AT","AUT","AUSTRIA" -"1540413952","1540414207","IL","ISR","ISRAEL" -"1540414208","1540414463","GB","GBR","UNITED KINGDOM" -"1540414464","1540414719","BE","BEL","BELGIUM" -"1540414720","1540414975","SE","SWE","SWEDEN" -"1540414976","1540415231","FR","FRA","FRANCE" -"1540415232","1540415487","RO","ROM","ROMANIA" -"1540415488","1540415743","FR","FRA","FRANCE" -"1540415744","1540415999","SI","SVN","SLOVENIA" -"1540416000","1540416255","FR","FRA","FRANCE" -"1540416256","1540416511","CH","CHE","SWITZERLAND" -"1540416512","1540416767","RU","RUS","RUSSIAN FEDERATION" -"1540416768","1540417023","NL","NLD","NETHERLANDS" -"1540417024","1540417279","RU","RUS","RUSSIAN FEDERATION" -"1540417280","1540417535","FR","FRA","FRANCE" -"1540417536","1540417791","RU","RUS","RUSSIAN FEDERATION" -"1540417792","1540418047","HR","HRV","CROATIA" -"1540418048","1540418559","RO","ROM","ROMANIA" -"1540418560","1540418815","AT","AUT","AUSTRIA" -"1540418816","1540419071","FR","FRA","FRANCE" -"1540419072","1540419327","RU","RUS","RUSSIAN FEDERATION" -"1540419328","1540419839","GB","GBR","UNITED KINGDOM" -"1540419840","1540420095","NL","NLD","NETHERLANDS" -"1540420096","1540420607","GB","GBR","UNITED KINGDOM" -"1540420608","1540420863","DE","DEU","GERMANY" -"1540420864","1540421119","GB","GBR","UNITED KINGDOM" -"1540421120","1540421375","RU","RUS","RUSSIAN FEDERATION" -"1540421376","1540421631","PL","POL","POLAND" -"1540421632","1540422143","RU","RUS","RUSSIAN FEDERATION" -"1540422144","1540422399","PL","POL","POLAND" -"1540422400","1540422655","UA","UKR","UKRAINE" -"1540422656","1540422911","GB","GBR","UNITED KINGDOM" -"1540422912","1540423423","RU","RUS","RUSSIAN FEDERATION" -"1540423424","1540423679","BA","BIH","BOSNIA AND HERZEGOVINA" -"1540423680","1540423935","SE","SWE","SWEDEN" -"1540424448","1540424703","ES","ESP","SPAIN" -"1540424704","1540424959","PL","POL","POLAND" -"1540424960","1540425215","RO","ROM","ROMANIA" -"1540425216","1540425471","US","USA","UNITED STATES" -"1540425472","1540425727","NL","NLD","NETHERLANDS" -"1540425728","1540425983","BG","BGR","BULGARIA" -"1540425984","1540426239","DE","DEU","GERMANY" -"1540426240","1540426495","IE","IRL","IRELAND" -"1540426496","1540426751","UA","UKR","UKRAINE" -"1540426752","1540427263","NL","NLD","NETHERLANDS" -"1540427264","1540427519","RU","RUS","RUSSIAN FEDERATION" -"1540427520","1540427775","FR","FRA","FRANCE" -"1540427776","1540428287","RU","RUS","RUSSIAN FEDERATION" -"1540428544","1540428799","FR","FRA","FRANCE" -"1540428800","1540429055","PL","POL","POLAND" -"1540429056","1540429311","BG","BGR","BULGARIA" -"1540429312","1540429823","RO","ROM","ROMANIA" -"1540429824","1540430079","UA","UKR","UKRAINE" -"1540430080","1540430335","FR","FRA","FRANCE" -"1540430336","1540430591","DE","DEU","GERMANY" -"1540430592","1540430847","PL","POL","POLAND" -"1540430848","1540431103","CH","CHE","SWITZERLAND" -"1540431104","1540431359","FI","FIN","FINLAND" -"1540431360","1540431615","NO","NOR","NORWAY" -"1540431616","1540431871","GB","GBR","UNITED KINGDOM" -"1540431872","1540432127","HR","HRV","CROATIA" -"1540432128","1540432383","AT","AUT","AUSTRIA" -"1540432384","1540432639","GB","GBR","UNITED KINGDOM" -"1540432640","1540432895","FR","FRA","FRANCE" -"1540432896","1540433151","UA","UKR","UKRAINE" -"1540433152","1540433407","GB","GBR","UNITED KINGDOM" -"1540433408","1540433663","AM","ARM","ARMENIA" -"1540433664","1540433919","DK","DNK","DENMARK" -"1540433920","1540434175","GB","GBR","UNITED KINGDOM" -"1540434176","1540434431","CH","CHE","SWITZERLAND" -"1540434432","1540434687","DE","DEU","GERMANY" -"1540434688","1540434943","GB","GBR","UNITED KINGDOM" -"1540434944","1540435199","FR","FRA","FRANCE" -"1540435200","1540435455","RO","ROM","ROMANIA" -"1540435456","1540435967","GR","GRC","GREECE" -"1540435968","1540436223","RU","RUS","RUSSIAN FEDERATION" -"1540436224","1540436479","SI","SVN","SLOVENIA" -"1540436480","1540436735","GB","GBR","UNITED KINGDOM" -"1540436736","1540436991","UA","UKR","UKRAINE" -"1540436992","1540437247","DE","DEU","GERMANY" -"1540437248","1540437503","CH","CHE","SWITZERLAND" -"1540437504","1540438015","UA","UKR","UKRAINE" -"1540438016","1540438271","PL","POL","POLAND" -"1540438272","1540438527","LB","LBN","LEBANON" -"1540438528","1540439039","RU","RUS","RUSSIAN FEDERATION" -"1540439040","1540439295","NO","NOR","NORWAY" -"1540439296","1540439551","RO","ROM","ROMANIA" -"1540439552","1540440063","PL","POL","POLAND" -"1540440064","1540440319","UA","UKR","UKRAINE" -"1540440320","1540440575","RU","RUS","RUSSIAN FEDERATION" -"1540440576","1540440831","MD","MDA","REPUBLIC OF MOLDOVA" -"1540440832","1540441087","FR","FRA","FRANCE" -"1540441088","1540441343","PL","POL","POLAND" -"1540441344","1540441855","RU","RUS","RUSSIAN FEDERATION" -"1540441856","1540442111","GB","GBR","UNITED KINGDOM" -"1540442112","1540442367","RU","RUS","RUSSIAN FEDERATION" -"1540442368","1540442623","GB","GBR","UNITED KINGDOM" -"1540442624","1540442879","IE","IRL","IRELAND" -"1540442880","1540443135","AT","AUT","AUSTRIA" -"1540443136","1540443647","RU","RUS","RUSSIAN FEDERATION" -"1540443648","1540443903","NL","NLD","NETHERLANDS" -"1540443904","1540444159","GB","GBR","UNITED KINGDOM" -"1540444160","1540444415","RU","RUS","RUSSIAN FEDERATION" -"1540444416","1540444671","DE","DEU","GERMANY" -"1540444672","1540445183","GB","GBR","UNITED KINGDOM" -"1540445184","1540445439","CH","CHE","SWITZERLAND" -"1540445440","1540445695","RU","RUS","RUSSIAN FEDERATION" -"1540445696","1540445951","GB","GBR","UNITED KINGDOM" -"1540445952","1540446207","DE","DEU","GERMANY" -"1540446208","1540446463","NO","NOR","NORWAY" -"1540446464","1540446719","AT","AUT","AUSTRIA" -"1540446720","1540446975","UA","UKR","UKRAINE" -"1540446976","1540447231","RU","RUS","RUSSIAN FEDERATION" -"1540447232","1540447487","DE","DEU","GERMANY" -"1540447488","1540447743","PL","POL","POLAND" -"1540447744","1540447999","RU","RUS","RUSSIAN FEDERATION" -"1540448000","1540448255","PL","POL","POLAND" -"1540448256","1540448511","UA","UKR","UKRAINE" -"1540448512","1540448767","IT","ITA","ITALY" -"1540448768","1540449023","CH","CHE","SWITZERLAND" -"1540449024","1540449279","DE","DEU","GERMANY" -"1540449280","1540449535","UA","UKR","UKRAINE" -"1540449536","1540449791","CZ","CZE","CZECH REPUBLIC" -"1540449792","1540450047","RO","ROM","ROMANIA" -"1540450048","1540450303","DE","DEU","GERMANY" -"1540450304","1540450559","GB","GBR","UNITED KINGDOM" -"1540450560","1540450815","AM","ARM","ARMENIA" -"1540450816","1540451071","IE","IRL","IRELAND" -"1540451072","1540451327","FR","FRA","FRANCE" -"1540451328","1540451583","ES","ESP","SPAIN" -"1540451584","1540451839","RO","ROM","ROMANIA" -"1540451840","1540452095","GB","GBR","UNITED KINGDOM" -"1540452096","1540452351","CH","CHE","SWITZERLAND" -"1540452352","1540452607","AT","AUT","AUSTRIA" -"1540452608","1540452863","IL","ISR","ISRAEL" -"1540452864","1540453119","HU","HUN","HUNGARY" -"1540453120","1540453375","RU","RUS","RUSSIAN FEDERATION" -"1540453376","1540453631","PL","POL","POLAND" -"1540453632","1540453887","FR","FRA","FRANCE" -"1540453888","1540454143","UA","UKR","UKRAINE" -"1540454144","1540454399","RU","RUS","RUSSIAN FEDERATION" -"1540454400","1540454911","DE","DEU","GERMANY" -"1540454912","1540455167","RU","RUS","RUSSIAN FEDERATION" -"1540455168","1540455423","RO","ROM","ROMANIA" -"1540455424","1540455679","RU","RUS","RUSSIAN FEDERATION" -"1540455680","1540455935","GB","GBR","UNITED KINGDOM" -"1540455936","1540456191","UA","UKR","UKRAINE" -"1540456192","1540457215","RU","RUS","RUSSIAN FEDERATION" -"1540457216","1540457471","GE","GEO","GEORGIA" -"1540457472","1540457727","SI","SVN","SLOVENIA" -"1540457728","1540457983","BE","BEL","BELGIUM" -"1540457984","1540458239","CH","CHE","SWITZERLAND" -"1540458240","1540458495","ES","ESP","SPAIN" -"1540458496","1540458751","HR","HRV","CROATIA" -"1540458752","1540459007","NL","NLD","NETHERLANDS" -"1540459008","1540459519","UA","UKR","UKRAINE" -"1540459520","1540459775","GB","GBR","UNITED KINGDOM" -"1540459776","1540460031","PL","POL","POLAND" -"1540460032","1540460543","NL","NLD","NETHERLANDS" -"1540460544","1540460799","GB","GBR","UNITED KINGDOM" -"1540460800","1540461055","SI","SVN","SLOVENIA" -"1540461056","1540461311","BG","BGR","BULGARIA" -"1540461312","1540461823","RU","RUS","RUSSIAN FEDERATION" -"1540461824","1540462079","RO","ROM","ROMANIA" -"1540462080","1540462335","SI","SVN","SLOVENIA" -"1540462336","1540462591","UA","UKR","UKRAINE" -"1540462592","1540463103","PL","POL","POLAND" -"1540463104","1540463359","FR","FRA","FRANCE" -"1540463360","1540463615","PL","POL","POLAND" -"1540463616","1540463871","DK","DNK","DENMARK" -"1540463872","1540464127","UA","UKR","UKRAINE" -"1540464128","1540464383","CH","CHE","SWITZERLAND" -"1540464384","1540464895","DE","DEU","GERMANY" -"1540464896","1540465407","GB","GBR","UNITED KINGDOM" -"1540465408","1540465663","ES","ESP","SPAIN" -"1540465664","1540465919","IE","IRL","IRELAND" -"1540465920","1540466175","UA","UKR","UKRAINE" -"1540466176","1540466431","DK","DNK","DENMARK" -"1540466432","1540466687","RU","RUS","RUSSIAN FEDERATION" -"1540466688","1540466943","NL","NLD","NETHERLANDS" -"1540466944","1540467455","CH","CHE","SWITZERLAND" -"1540467456","1540467711","RO","ROM","ROMANIA" -"1540467712","1540467967","KW","KWT","KUWAIT" -"1540467968","1540468223","GR","GRC","GREECE" -"1540468224","1540468735","FR","FRA","FRANCE" -"1540468736","1540468991","UA","UKR","UKRAINE" -"1540468992","1540469247","PL","POL","POLAND" -"1540469248","1540469503","GB","GBR","UNITED KINGDOM" -"1540469504","1540469759","RO","ROM","ROMANIA" -"1540469760","1540470015","PL","POL","POLAND" -"1540470016","1540470271","SI","SVN","SLOVENIA" -"1540470272","1540470527","IL","ISR","ISRAEL" -"1540470528","1540471039","RU","RUS","RUSSIAN FEDERATION" -"1540471040","1540471295","DE","DEU","GERMANY" -"1540471296","1540471551","RU","RUS","RUSSIAN FEDERATION" -"1540471552","1540471807","GB","GBR","UNITED KINGDOM" -"1540471808","1540472063","SI","SVN","SLOVENIA" -"1540472064","1540472319","RO","ROM","ROMANIA" -"1540472320","1540472575","DK","DNK","DENMARK" -"1540472576","1540472831","FR","FRA","FRANCE" -"1540472832","1540473087","NL","NLD","NETHERLANDS" -"1540473088","1540473343","UA","UKR","UKRAINE" -"1540473344","1540473599","IT","ITA","ITALY" -"1540473600","1540473855","RO","ROM","ROMANIA" -"1540473856","1540474367","GB","GBR","UNITED KINGDOM" -"1540474368","1540474623","RO","ROM","ROMANIA" -"1540474624","1540474879","PL","POL","POLAND" -"1540474880","1540475135","GB","GBR","UNITED KINGDOM" -"1540475136","1540475903","UA","UKR","UKRAINE" -"1540475904","1540476159","CH","CHE","SWITZERLAND" -"1540476160","1540476415","DE","DEU","GERMANY" -"1540476416","1540476671","UA","UKR","UKRAINE" -"1540476672","1540476927","SI","SVN","SLOVENIA" -"1540476928","1540477183","NL","NLD","NETHERLANDS" -"1540477184","1540477439","RO","ROM","ROMANIA" -"1540477440","1540477695","UA","UKR","UKRAINE" -"1540477696","1540477951","DE","DEU","GERMANY" -"1540477952","1540478207","NO","NOR","NORWAY" -"1540478208","1540478463","NL","NLD","NETHERLANDS" -"1540478464","1540478719","UA","UKR","UKRAINE" -"1540478720","1540478975","SA","SAU","SAUDI ARABIA" -"1540478976","1540479231","HR","HRV","CROATIA" -"1540479232","1540479487","GB","GBR","UNITED KINGDOM" -"1540479488","1540479743","RU","RUS","RUSSIAN FEDERATION" -"1540479744","1540479999","AT","AUT","AUSTRIA" -"1540480000","1540480255","GB","GBR","UNITED KINGDOM" -"1540480256","1540480767","PL","POL","POLAND" -"1540481024","1540481279","LT","LTU","LITHUANIA" -"1540481280","1540481535","GB","GBR","UNITED KINGDOM" -"1540481536","1540481791","UA","UKR","UKRAINE" -"1540481792","1540482047","RU","RUS","RUSSIAN FEDERATION" -"1540482048","1540482303","DK","DNK","DENMARK" -"1540482304","1540482559","FR","FRA","FRANCE" -"1540482560","1540482815","CH","CHE","SWITZERLAND" -"1540482816","1540483071","DE","DEU","GERMANY" -"1540483072","1540483327","SE","SWE","SWEDEN" -"1540483328","1540483839","RU","RUS","RUSSIAN FEDERATION" -"1540483840","1540484095","UA","UKR","UKRAINE" -"1540484096","1540484351","DK","DNK","DENMARK" -"1540484352","1540484607","SI","SVN","SLOVENIA" -"1540484608","1540484863","MD","MDA","REPUBLIC OF MOLDOVA" -"1540484864","1540485119","UA","UKR","UKRAINE" -"1540485376","1540485631","RO","ROM","ROMANIA" -"1540485632","1540485887","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1540485888","1540486143","ES","ESP","SPAIN" -"1540486144","1540486399","GB","GBR","UNITED KINGDOM" -"1540486400","1540486655","FR","FRA","FRANCE" -"1540486656","1540486911","GB","GBR","UNITED KINGDOM" -"1540486912","1540487167","SK","SVK","SLOVAKIA" -"1540487168","1540487423","PS","PSE","PALESTINIAN TERRITORY, OCCUPIED" -"1540487424","1540487679","UA","UKR","UKRAINE" -"1540487680","1540487935","DE","DEU","GERMANY" -"1540487936","1540488447","GB","GBR","UNITED KINGDOM" -"1540488448","1540488703","SA","SAU","SAUDI ARABIA" -"1540488704","1540488959","DE","DEU","GERMANY" -"1540488960","1540489215","RO","ROM","ROMANIA" -"1540489216","1540491263","RU","RUS","RUSSIAN FEDERATION" -"1540491264","1540493311","UA","UKR","UKRAINE" -"1540493312","1540494335","CZ","CZE","CZECH REPUBLIC" -"1540494336","1540495359","UA","UKR","UKRAINE" -"1540495360","1540496383","RU","RUS","RUSSIAN FEDERATION" -"1540496384","1540499455","UA","UKR","UKRAINE" -"1540499456","1540500479","AM","ARM","ARMENIA" -"1540500480","1540501503","RU","RUS","RUSSIAN FEDERATION" -"1540501504","1540502527","PL","POL","POLAND" -"1540502528","1540503551","RU","RUS","RUSSIAN FEDERATION" -"1540503552","1540504575","NL","NLD","NETHERLANDS" -"1540504576","1540505599","SE","SWE","SWEDEN" -"1540505600","1540506623","RU","RUS","RUSSIAN FEDERATION" -"1540506624","1540507647","GB","GBR","UNITED KINGDOM" -"1540507648","1540508671","RU","RUS","RUSSIAN FEDERATION" -"1540508672","1540509695","UA","UKR","UKRAINE" -"1540509696","1540510719","RO","ROM","ROMANIA" -"1540510720","1540511743","RU","RUS","RUSSIAN FEDERATION" -"1540511744","1540512767","BG","BGR","BULGARIA" -"1540512768","1540514815","UA","UKR","UKRAINE" -"1540514816","1540515839","GB","GBR","UNITED KINGDOM" -"1540515840","1540516863","RU","RUS","RUSSIAN FEDERATION" -"1540516864","1540517887","UA","UKR","UKRAINE" -"1540517888","1540518911","RU","RUS","RUSSIAN FEDERATION" -"1540518912","1540520959","UA","UKR","UKRAINE" -"1540520960","1540521983","RU","RUS","RUSSIAN FEDERATION" -"1540521984","1540523007","PL","POL","POLAND" -"1540523008","1540524031","RU","RUS","RUSSIAN FEDERATION" -"1540524032","1540525055","AL","ALB","ALBANIA" -"1540525056","1540526079","AT","AUT","AUSTRIA" -"1540526080","1540528127","UA","UKR","UKRAINE" -"1540528128","1540529151","RU","RUS","RUSSIAN FEDERATION" -"1540529152","1540530175","UA","UKR","UKRAINE" -"1540530176","1540531199","RU","RUS","RUSSIAN FEDERATION" -"1540531200","1540532223","UA","UKR","UKRAINE" -"1540532224","1540533247","RU","RUS","RUSSIAN FEDERATION" -"1540533248","1540534271","KZ","KAZ","KAZAKHSTAN" -"1540534272","1540535295","UA","UKR","UKRAINE" -"1540535296","1540536319","SK","SVK","SLOVAKIA" -"1540536320","1540537343","RU","RUS","RUSSIAN FEDERATION" -"1540537344","1540538367","UA","UKR","UKRAINE" -"1540538368","1540542463","RU","RUS","RUSSIAN FEDERATION" -"1540542464","1540543487","PL","POL","POLAND" -"1540543488","1540544511","DE","DEU","GERMANY" -"1540544512","1540545535","RU","RUS","RUSSIAN FEDERATION" -"1540545536","1540546559","AT","AUT","AUSTRIA" -"1540546560","1540548607","RU","RUS","RUSSIAN FEDERATION" -"1540548608","1540549631","IE","IRL","IRELAND" -"1540549632","1540552703","PL","POL","POLAND" -"1540552704","1540553727","UA","UKR","UKRAINE" -"1540553728","1540555775","RU","RUS","RUSSIAN FEDERATION" -"1540555776","1540556799","UZ","UZB","UZBEKISTAN" -"1540556800","1540557823","GB","GBR","UNITED KINGDOM" -"1540557824","1540559871","UA","UKR","UKRAINE" -"1540559872","1540562943","RU","RUS","RUSSIAN FEDERATION" -"1540562944","1540563967","AT","AUT","AUSTRIA" -"1540563968","1540564991","RU","RUS","RUSSIAN FEDERATION" -"1540564992","1540566015","DE","DEU","GERMANY" -"1540566016","1540567039","RU","RUS","RUSSIAN FEDERATION" -"1540567040","1540568063","MD","MDA","REPUBLIC OF MOLDOVA" -"1540568064","1540572159","RU","RUS","RUSSIAN FEDERATION" -"1540572160","1540573183","UA","UKR","UKRAINE" -"1540573184","1540574207","NL","NLD","NETHERLANDS" -"1540574208","1540576255","RU","RUS","RUSSIAN FEDERATION" -"1540576256","1540577279","PL","POL","POLAND" -"1540577280","1540579327","RU","RUS","RUSSIAN FEDERATION" -"1540579328","1540580351","IE","IRL","IRELAND" -"1540580352","1540581375","PL","POL","POLAND" -"1540581376","1540582399","RU","RUS","RUSSIAN FEDERATION" -"1540582400","1540583423","BG","BGR","BULGARIA" -"1540583424","1540584447","DE","DEU","GERMANY" -"1540584448","1540586495","UA","UKR","UKRAINE" -"1540586496","1540588543","RU","RUS","RUSSIAN FEDERATION" -"1540588544","1540589567","UA","UKR","UKRAINE" -"1540589568","1540593663","RU","RUS","RUSSIAN FEDERATION" -"1540593664","1540594687","GB","GBR","UNITED KINGDOM" -"1540594688","1540595711","IT","ITA","ITALY" -"1540595712","1540596735","KZ","KAZ","KAZAKHSTAN" -"1540596736","1540597759","FR","FRA","FRANCE" -"1540597760","1540598783","SE","SWE","SWEDEN" -"1540598784","1540600831","UA","UKR","UKRAINE" -"1540600832","1540602879","RU","RUS","RUSSIAN FEDERATION" -"1540602880","1540603903","BG","BGR","BULGARIA" -"1540603904","1540605951","RU","RUS","RUSSIAN FEDERATION" -"1540605952","1540606975","MD","MDA","REPUBLIC OF MOLDOVA" -"1540606976","1540607999","UA","UKR","UKRAINE" -"1540608000","1540609023","RU","RUS","RUSSIAN FEDERATION" -"1540609024","1540610047","UA","UKR","UKRAINE" -"1540610048","1540611071","RU","RUS","RUSSIAN FEDERATION" -"1540611072","1540612095","PL","POL","POLAND" -"1540612096","1540613119","TR","TUR","TURKEY" -"1540613120","1540614143","RU","RUS","RUSSIAN FEDERATION" -"1540614144","1540615167","BG","BGR","BULGARIA" -"1540615168","1540616191","RU","RUS","RUSSIAN FEDERATION" -"1540616192","1540617215","AT","AUT","AUSTRIA" -"1540617216","1540618239","LT","LTU","LITHUANIA" -"1540618240","1540619263","UA","UKR","UKRAINE" -"1540619264","1540620287","PL","POL","POLAND" -"1540620288","1540620543","NL","NLD","NETHERLANDS" -"1540620544","1540620799","LB","LBN","LEBANON" -"1540620800","1540621055","PL","POL","POLAND" -"1540621056","1540621311","DE","DEU","GERMANY" -"1540621312","1540621567","BA","BIH","BOSNIA AND HERZEGOVINA" -"1540621568","1540621823","PL","POL","POLAND" -"1540621824","1540622335","RU","RUS","RUSSIAN FEDERATION" -"1540622336","1540622591","KW","KWT","KUWAIT" -"1540622592","1540622847","PL","POL","POLAND" -"1540622848","1540623103","RU","RUS","RUSSIAN FEDERATION" -"1540623104","1540623359","SE","SWE","SWEDEN" -"1540623360","1540623615","GB","GBR","UNITED KINGDOM" -"1540623616","1540623871","BG","BGR","BULGARIA" -"1540623872","1540624127","RO","ROM","ROMANIA" -"1540624128","1540624383","CS","SCG","SERBIA AND MONTENEGRO" -"1540624384","1540624639","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1540624640","1540624895","BG","BGR","BULGARIA" -"1540624896","1540625151","GB","GBR","UNITED KINGDOM" -"1540625152","1540625407","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1540625408","1540625663","RU","RUS","RUSSIAN FEDERATION" -"1540625664","1540625919","FR","FRA","FRANCE" -"1540625920","1540626175","UA","UKR","UKRAINE" -"1540626176","1540626431","RO","ROM","ROMANIA" -"1540626432","1540626687","SI","SVN","SLOVENIA" -"1540626688","1540626943","PL","POL","POLAND" -"1540626944","1540627199","FR","FRA","FRANCE" -"1540627200","1540627455","PL","POL","POLAND" -"1540627456","1540627711","DK","DNK","DENMARK" -"1540627712","1540627967","CH","CHE","SWITZERLAND" -"1540627968","1540628223","PL","POL","POLAND" -"1540628224","1540628479","HR","HRV","CROATIA" -"1540628480","1540628735","KW","KWT","KUWAIT" -"1540628736","1540628991","PL","POL","POLAND" -"1540628992","1540629247","UA","UKR","UKRAINE" -"1540629248","1540629503","RO","ROM","ROMANIA" -"1540629504","1540629759","DK","DNK","DENMARK" -"1540629760","1540630015","BG","BGR","BULGARIA" -"1540630016","1540630271","DE","DEU","GERMANY" -"1540630272","1540630527","RO","ROM","ROMANIA" -"1540630528","1540630783","CH","CHE","SWITZERLAND" -"1540630784","1540631039","RU","RUS","RUSSIAN FEDERATION" -"1540631040","1540631295","NL","NLD","NETHERLANDS" -"1540631296","1540631551","CH","CHE","SWITZERLAND" -"1540631552","1540631807","HR","HRV","CROATIA" -"1540631808","1540632063","LV","LVA","LATVIA" -"1540632064","1540632319","AT","AUT","AUSTRIA" -"1540632320","1540632575","RU","RUS","RUSSIAN FEDERATION" -"1540632576","1540632831","DK","DNK","DENMARK" -"1540632832","1540633087","GB","GBR","UNITED KINGDOM" -"1540633088","1540633343","RU","RUS","RUSSIAN FEDERATION" -"1540633344","1540633599","CH","CHE","SWITZERLAND" -"1540633600","1540633855","RO","ROM","ROMANIA" -"1540633856","1540634367","GB","GBR","UNITED KINGDOM" -"1540634368","1540634623","FR","FRA","FRANCE" -"1540634624","1540634879","UA","UKR","UKRAINE" -"1540634880","1540635135","RU","RUS","RUSSIAN FEDERATION" -"1540635136","1540635391","FR","FRA","FRANCE" -"1540635392","1540635647","RO","ROM","ROMANIA" -"1540635648","1540636159","RU","RUS","RUSSIAN FEDERATION" -"1540636160","1540636415","RO","ROM","ROMANIA" -"1540636416","1540636671","LV","LVA","LATVIA" -"1540636672","1540636927","RU","RUS","RUSSIAN FEDERATION" -"1540636928","1540637183","UA","UKR","UKRAINE" -"1540637184","1540637439","RO","ROM","ROMANIA" -"1540637440","1540637695","SA","SAU","SAUDI ARABIA" -"1540637696","1540637951","RU","RUS","RUSSIAN FEDERATION" -"1540637952","1540638207","RS","SRB","SERBIA" -"1540638208","1540638463","RO","ROM","ROMANIA" -"1540638464","1540638719","AM","ARM","ARMENIA" -"1540638720","1540638975","UA","UKR","UKRAINE" -"1540638976","1540639487","RO","ROM","ROMANIA" -"1540639488","1540639743","CH","CHE","SWITZERLAND" -"1540639744","1540639999","IL","ISR","ISRAEL" -"1540640000","1540640255","CH","CHE","SWITZERLAND" -"1540640256","1540640511","FR","FRA","FRANCE" -"1540640512","1540640767","ES","ESP","SPAIN" -"1540640768","1540641023","UA","UKR","UKRAINE" -"1540641024","1540641535","RU","RUS","RUSSIAN FEDERATION" -"1540641536","1540641791","DE","DEU","GERMANY" -"1540641792","1540642047","PL","POL","POLAND" -"1540642048","1540642303","DE","DEU","GERMANY" -"1540642304","1540642559","PL","POL","POLAND" -"1540642560","1540642815","DE","DEU","GERMANY" -"1540642816","1540643071","IE","IRL","IRELAND" -"1540643072","1540643327","UZ","UZB","UZBEKISTAN" -"1540643328","1540643583","GB","GBR","UNITED KINGDOM" -"1540643584","1540643839","CH","CHE","SWITZERLAND" -"1540643840","1540644095","NO","NOR","NORWAY" -"1540644096","1540644607","GB","GBR","UNITED KINGDOM" -"1540644608","1540644863","DE","DEU","GERMANY" -"1540644864","1540645119","NL","NLD","NETHERLANDS" -"1540645120","1540645375","RU","RUS","RUSSIAN FEDERATION" -"1540645376","1540645631","BE","BEL","BELGIUM" -"1540645632","1540645887","NL","NLD","NETHERLANDS" -"1540645888","1540646143","PL","POL","POLAND" -"1540646144","1540646399","RO","ROM","ROMANIA" -"1540646400","1540646655","PS","PSE","PALESTINIAN TERRITORY, OCCUPIED" -"1540646656","1540646911","SE","SWE","SWEDEN" -"1540646912","1540647167","RU","RUS","RUSSIAN FEDERATION" -"1540647168","1540647423","GB","GBR","UNITED KINGDOM" -"1540647424","1540647679","RU","RUS","RUSSIAN FEDERATION" -"1540647680","1540647935","CY","CYP","CYPRUS" -"1540647936","1540648191","GB","GBR","UNITED KINGDOM" -"1540648192","1540648447","CH","CHE","SWITZERLAND" -"1540648448","1540648959","RO","ROM","ROMANIA" -"1540648960","1540649215","FR","FRA","FRANCE" -"1540649216","1540649471","DE","DEU","GERMANY" -"1540649472","1540649727","IL","ISR","ISRAEL" -"1540649728","1540649983","GB","GBR","UNITED KINGDOM" -"1540649984","1540650239","FR","FRA","FRANCE" -"1540650240","1540650495","CH","CHE","SWITZERLAND" -"1540650496","1540650751","RU","RUS","RUSSIAN FEDERATION" -"1540650752","1540651007","FR","FRA","FRANCE" -"1540651008","1540651263","RO","ROM","ROMANIA" -"1540651264","1540651519","CH","CHE","SWITZERLAND" -"1540651520","1540651775","MK","MKD","THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA" -"1540651776","1540652031","RU","RUS","RUSSIAN FEDERATION" -"1540652032","1540652543","UA","UKR","UKRAINE" -"1540652544","1540652799","TR","TUR","TURKEY" -"1540653056","1540653311","FR","FRA","FRANCE" -"1540653312","1540653567","DK","DNK","DENMARK" -"1540653568","1540653823","DE","DEU","GERMANY" -"1540653824","1540654079","GB","GBR","UNITED KINGDOM" -"1540654080","1540654335","RS","SRB","SERBIA" -"1540654336","1540654591","RU","RUS","RUSSIAN FEDERATION" -"1540654592","1540654847","SI","SVN","SLOVENIA" -"1540654848","1540655103","RU","RUS","RUSSIAN FEDERATION" -"1540655104","1540655359","AT","AUT","AUSTRIA" -"1540655360","1540655615","RU","RUS","RUSSIAN FEDERATION" -"1540655616","1540655871","GB","GBR","UNITED KINGDOM" -"1540655872","1540656383","NL","NLD","NETHERLANDS" -"1540656384","1540656895","RU","RUS","RUSSIAN FEDERATION" -"1540656896","1540657151","RO","ROM","ROMANIA" -"1540657152","1540657407","DE","DEU","GERMANY" -"1540657408","1540657663","CY","CYP","CYPRUS" -"1540657664","1540657919","RU","RUS","RUSSIAN FEDERATION" -"1540657920","1540658175","FR","FRA","FRANCE" -"1540658176","1540658431","RO","ROM","ROMANIA" -"1540658432","1540659199","RU","RUS","RUSSIAN FEDERATION" -"1540659200","1540659455","FR","FRA","FRANCE" -"1540659456","1540659967","UA","UKR","UKRAINE" -"1540659968","1540660223","PL","POL","POLAND" -"1540660224","1540660479","UA","UKR","UKRAINE" -"1540660480","1540660735","FR","FRA","FRANCE" -"1540660736","1540660991","UA","UKR","UKRAINE" -"1540660992","1540661247","RO","ROM","ROMANIA" -"1540661248","1540661503","GB","GBR","UNITED KINGDOM" -"1540661504","1540662015","RO","ROM","ROMANIA" -"1540662016","1540662271","BG","BGR","BULGARIA" -"1540662272","1540662527","RO","ROM","ROMANIA" -"1540662528","1540662783","PL","POL","POLAND" -"1540662784","1540663039","GB","GBR","UNITED KINGDOM" -"1540663040","1540663295","IT","ITA","ITALY" -"1540663296","1540663551","RU","RUS","RUSSIAN FEDERATION" -"1540663552","1540664063","PL","POL","POLAND" -"1540664064","1540664319","RU","RUS","RUSSIAN FEDERATION" -"1540664320","1540664575","PL","POL","POLAND" -"1540664576","1540665087","UA","UKR","UKRAINE" -"1540665088","1540665343","ES","ESP","SPAIN" -"1540665344","1540665599","NL","NLD","NETHERLANDS" -"1540665600","1540665855","UA","UKR","UKRAINE" -"1540665856","1540666111","TR","TUR","TURKEY" -"1540666112","1540666367","RU","RUS","RUSSIAN FEDERATION" -"1540666368","1540666623","UZ","UZB","UZBEKISTAN" -"1540666624","1540666879","DE","DEU","GERMANY" -"1540666880","1540667135","GB","GBR","UNITED KINGDOM" -"1540667136","1540667647","NL","NLD","NETHERLANDS" -"1540667648","1540668159","BE","BEL","BELGIUM" -"1540668160","1540668415","AT","AUT","AUSTRIA" -"1540668416","1540668671","SE","SWE","SWEDEN" -"1540668672","1540668927","IL","ISR","ISRAEL" -"1540668928","1540669695","RO","ROM","ROMANIA" -"1540669696","1540669951","KZ","KAZ","KAZAKHSTAN" -"1540670208","1540670463","RU","RUS","RUSSIAN FEDERATION" -"1540670464","1540670719","CH","CHE","SWITZERLAND" -"1540670720","1540671231","RU","RUS","RUSSIAN FEDERATION" -"1540671232","1540671487","SI","SVN","SLOVENIA" -"1540671488","1540671743","CH","CHE","SWITZERLAND" -"1540671744","1540671999","BG","BGR","BULGARIA" -"1540672000","1540672255","FR","FRA","FRANCE" -"1540672256","1540672511","UA","UKR","UKRAINE" -"1540672512","1540672767","DE","DEU","GERMANY" -"1540672768","1540673023","FR","FRA","FRANCE" -"1540673024","1540673279","DE","DEU","GERMANY" -"1540673280","1540673535","SE","SWE","SWEDEN" -"1540673536","1540673791","SI","SVN","SLOVENIA" -"1540673792","1540674047","SE","SWE","SWEDEN" -"1540674048","1540674303","GB","GBR","UNITED KINGDOM" -"1540674304","1540674559","FR","FRA","FRANCE" -"1540674560","1540674815","GB","GBR","UNITED KINGDOM" -"1540674816","1540675071","GE","GEO","GEORGIA" -"1540675072","1540675327","UA","UKR","UKRAINE" -"1540675328","1540675583","NL","NLD","NETHERLANDS" -"1540675584","1540675839","GB","GBR","UNITED KINGDOM" -"1540675840","1540676351","RU","RUS","RUSSIAN FEDERATION" -"1540676352","1540676607","IT","ITA","ITALY" -"1540676608","1540677119","RU","RUS","RUSSIAN FEDERATION" -"1540677120","1540677375","GB","GBR","UNITED KINGDOM" -"1540677376","1540677631","PL","POL","POLAND" -"1540677632","1540677887","DK","DNK","DENMARK" -"1540677888","1540678143","DE","DEU","GERMANY" -"1540678144","1540678399","RU","RUS","RUSSIAN FEDERATION" -"1540678400","1540678655","RO","ROM","ROMANIA" -"1540678656","1540678911","SE","SWE","SWEDEN" -"1540678912","1540679167","RO","ROM","ROMANIA" -"1540679168","1540679423","RU","RUS","RUSSIAN FEDERATION" -"1540679424","1540679679","PL","POL","POLAND" -"1540679680","1540679935","LT","LTU","LITHUANIA" -"1540679936","1540680191","BG","BGR","BULGARIA" -"1540680192","1540680447","CH","CHE","SWITZERLAND" -"1540680448","1540680703","BG","BGR","BULGARIA" -"1540680704","1540680959","FR","FRA","FRANCE" -"1540680960","1540681215","NL","NLD","NETHERLANDS" -"1540681216","1540681471","FR","FRA","FRANCE" -"1540681472","1540681727","RU","RUS","RUSSIAN FEDERATION" -"1540681728","1540681983","TR","TUR","TURKEY" -"1540681984","1540682239","IT","ITA","ITALY" -"1540682240","1540682495","PL","POL","POLAND" -"1540682496","1540682751","DE","DEU","GERMANY" -"1540682752","1540683007","EE","EST","ESTONIA" -"1540683008","1540683263","DE","DEU","GERMANY" -"1540683264","1540683775","HR","HRV","CROATIA" -"1540683776","1540684031","UA","UKR","UKRAINE" -"1540684032","1540684287","IT","ITA","ITALY" -"1540684288","1540684543","HU","HUN","HUNGARY" -"1540684544","1540684799","SI","SVN","SLOVENIA" -"1540684800","1540685055","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1540685056","1540685311","UA","UKR","UKRAINE" -"1540685312","1540685567","RO","ROM","ROMANIA" -"1540685568","1540685823","FR","FRA","FRANCE" -"1540685824","1540686079","SE","SWE","SWEDEN" -"1540686080","1540686335","TR","TUR","TURKEY" -"1540686336","1540686591","CH","CHE","SWITZERLAND" -"1540686592","1540686847","GB","GBR","UNITED KINGDOM" -"1540686848","1540687103","CH","CHE","SWITZERLAND" -"1540687104","1540687359","RU","RUS","RUSSIAN FEDERATION" -"1540687360","1540687615","AT","AUT","AUSTRIA" -"1540687616","1540687871","IT","ITA","ITALY" -"1540687872","1540688127","UA","UKR","UKRAINE" -"1540688128","1540688383","HU","HUN","HUNGARY" -"1540688384","1540688639","CZ","CZE","CZECH REPUBLIC" -"1540688640","1540688895","RO","ROM","ROMANIA" -"1540688896","1540689151","BG","BGR","BULGARIA" -"1540689152","1540689407","NL","NLD","NETHERLANDS" -"1540689408","1540689663","RU","RUS","RUSSIAN FEDERATION" -"1540689664","1540689919","FR","FRA","FRANCE" -"1540689920","1540690175","RO","ROM","ROMANIA" -"1540690176","1540690431","DK","DNK","DENMARK" -"1540690432","1540690687","SA","SAU","SAUDI ARABIA" -"1540690688","1540690943","RO","ROM","ROMANIA" -"1540690944","1540691711","DE","DEU","GERMANY" -"1540691712","1540691967","RU","RUS","RUSSIAN FEDERATION" -"1540691968","1540692223","CH","CHE","SWITZERLAND" -"1540692224","1540692479","FR","FRA","FRANCE" -"1540692480","1540692735","BE","BEL","BELGIUM" -"1540692736","1540692991","DE","DEU","GERMANY" -"1540692992","1540693247","GB","GBR","UNITED KINGDOM" -"1540693248","1540693503","RU","RUS","RUSSIAN FEDERATION" -"1540693504","1540693759","ES","ESP","SPAIN" -"1540693760","1540694015","UZ","UZB","UZBEKISTAN" -"1540694016","1540694271","CH","CHE","SWITZERLAND" -"1540694272","1540694527","RU","RUS","RUSSIAN FEDERATION" -"1540694528","1540695039","RO","ROM","ROMANIA" -"1540695040","1540695295","DE","DEU","GERMANY" -"1540695296","1540695551","NL","NLD","NETHERLANDS" -"1540695552","1540695807","PL","POL","POLAND" -"1540695808","1540696063","RU","RUS","RUSSIAN FEDERATION" -"1540696064","1540696319","HU","HUN","HUNGARY" -"1540696320","1540696575","FR","FRA","FRANCE" -"1540696576","1540696831","GB","GBR","UNITED KINGDOM" -"1540696832","1540697087","EE","EST","ESTONIA" -"1540697088","1540697343","RU","RUS","RUSSIAN FEDERATION" -"1540697344","1540697599","GB","GBR","UNITED KINGDOM" -"1540697600","1540697855","ES","ESP","SPAIN" -"1540697856","1540698111","NO","NOR","NORWAY" -"1540698112","1540698367","DE","DEU","GERMANY" -"1540698368","1540698623","IE","IRL","IRELAND" -"1540698880","1540699135","RU","RUS","RUSSIAN FEDERATION" -"1540699136","1540699391","GR","GRC","GREECE" -"1540699392","1540699647","NL","NLD","NETHERLANDS" -"1540699648","1540699903","AT","AUT","AUSTRIA" -"1540699904","1540700159","RO","ROM","ROMANIA" -"1540700160","1540700415","DE","DEU","GERMANY" -"1540700416","1540700671","RO","ROM","ROMANIA" -"1540700672","1540700927","PL","POL","POLAND" -"1540700928","1540701183","UA","UKR","UKRAINE" -"1540701184","1540701695","DE","DEU","GERMANY" -"1540701696","1540701951","UA","UKR","UKRAINE" -"1540701952","1540702207","GB","GBR","UNITED KINGDOM" -"1540702208","1540702463","PL","POL","POLAND" -"1540702464","1540702719","PT","PRT","PORTUGAL" -"1540702720","1540702975","AT","AUT","AUSTRIA" -"1540702976","1540703231","RU","RUS","RUSSIAN FEDERATION" -"1540703232","1540703487","MH","MHL","MARSHALL ISLANDS" -"1540703488","1540703743","NL","NLD","NETHERLANDS" -"1540703744","1540703999","DK","DNK","DENMARK" -"1540704000","1540704255","PL","POL","POLAND" -"1540704256","1540704511","KZ","KAZ","KAZAKHSTAN" -"1540704512","1540704767","IE","IRL","IRELAND" -"1540704768","1540705023","UA","UKR","UKRAINE" -"1540705024","1540705279","HU","HUN","HUNGARY" -"1540705280","1540705535","RO","ROM","ROMANIA" -"1540705536","1540705791","AT","AUT","AUSTRIA" -"1540705792","1540706047","NL","NLD","NETHERLANDS" -"1540706048","1540706303","FR","FRA","FRANCE" -"1540706304","1540706559","SI","SVN","SLOVENIA" -"1540706560","1540706815","GB","GBR","UNITED KINGDOM" -"1540706816","1540707071","FR","FRA","FRANCE" -"1540707072","1540707583","GB","GBR","UNITED KINGDOM" -"1540707584","1540707839","NL","NLD","NETHERLANDS" -"1540707840","1540708095","MD","MDA","REPUBLIC OF MOLDOVA" -"1540708096","1540708351","RU","RUS","RUSSIAN FEDERATION" -"1540708352","1540708607","PL","POL","POLAND" -"1540708608","1540708863","SI","SVN","SLOVENIA" -"1540708864","1540709119","FR","FRA","FRANCE" -"1540709120","1540709375","DE","DEU","GERMANY" -"1540709376","1540709631","UA","UKR","UKRAINE" -"1540709632","1540709887","KZ","KAZ","KAZAKHSTAN" -"1540709888","1540710143","UA","UKR","UKRAINE" -"1540710144","1540710399","NL","NLD","NETHERLANDS" -"1540710400","1540710655","PL","POL","POLAND" -"1540710656","1540710911","FI","FIN","FINLAND" -"1540710912","1540711423","DE","DEU","GERMANY" -"1540711424","1540711679","CH","CHE","SWITZERLAND" -"1540711680","1540711935","RO","ROM","ROMANIA" -"1540711936","1540712191","FR","FRA","FRANCE" -"1540712192","1540712447","DE","DEU","GERMANY" -"1540712448","1540712703","RU","RUS","RUSSIAN FEDERATION" -"1540712704","1540713215","LV","LVA","LATVIA" -"1540713216","1540713727","PL","POL","POLAND" -"1540713728","1540713983","RU","RUS","RUSSIAN FEDERATION" -"1540713984","1540714239","GB","GBR","UNITED KINGDOM" -"1540714240","1540714495","RO","ROM","ROMANIA" -"1540714496","1540714751","NL","NLD","NETHERLANDS" -"1540714752","1540715519","RU","RUS","RUSSIAN FEDERATION" -"1540715520","1540715775","DE","DEU","GERMANY" -"1540715776","1540716031","UA","UKR","UKRAINE" -"1540716032","1540716287","PL","POL","POLAND" -"1540716288","1540716543","UA","UKR","UKRAINE" -"1540716544","1540716799","RU","RUS","RUSSIAN FEDERATION" -"1540716800","1540717055","UA","UKR","UKRAINE" -"1540717056","1540717311","CZ","CZE","CZECH REPUBLIC" -"1540717312","1540717823","PL","POL","POLAND" -"1540717824","1540718079","UA","UKR","UKRAINE" -"1540718080","1540718335","CR","CRI","COSTA RICA" -"1540718336","1540718591","DE","DEU","GERMANY" -"1540718592","1540718847","CH","CHE","SWITZERLAND" -"1540718848","1540719103","IT","ITA","ITALY" -"1540719104","1540719359","RU","RUS","RUSSIAN FEDERATION" -"1540719360","1540719615","SI","SVN","SLOVENIA" -"1540719616","1540719871","AT","AUT","AUSTRIA" -"1540719872","1540720127","CH","CHE","SWITZERLAND" -"1540720128","1540720383","NL","NLD","NETHERLANDS" -"1540720384","1540720639","RO","ROM","ROMANIA" -"1540720896","1540721151","PL","POL","POLAND" -"1540721152","1540721663","RU","RUS","RUSSIAN FEDERATION" -"1540721664","1540721919","GB","GBR","UNITED KINGDOM" -"1540721920","1540722431","RU","RUS","RUSSIAN FEDERATION" -"1540722432","1540722687","CZ","CZE","CZECH REPUBLIC" -"1540722688","1540722943","RU","RUS","RUSSIAN FEDERATION" -"1540722944","1540723455","FR","FRA","FRANCE" -"1540723456","1540723711","SI","SVN","SLOVENIA" -"1540723712","1540723967","RU","RUS","RUSSIAN FEDERATION" -"1540723968","1540724223","UA","UKR","UKRAINE" -"1540724224","1540724479","HU","HUN","HUNGARY" -"1540724480","1540724735","DE","DEU","GERMANY" -"1540724736","1540724991","CH","CHE","SWITZERLAND" -"1540724992","1540725247","IT","ITA","ITALY" -"1540725248","1540725503","UA","UKR","UKRAINE" -"1540725504","1540725759","SE","SWE","SWEDEN" -"1540725760","1540726015","PL","POL","POLAND" -"1540726016","1540726271","TT","TTO","TRINIDAD AND TOBAGO" -"1540726272","1540726527","RU","RUS","RUSSIAN FEDERATION" -"1540726528","1540726783","CH","CHE","SWITZERLAND" -"1540726784","1540727039","CZ","CZE","CZECH REPUBLIC" -"1540727040","1540727295","FI","FIN","FINLAND" -"1540727296","1540727551","PL","POL","POLAND" -"1540727552","1540727807","RU","RUS","RUSSIAN FEDERATION" -"1540727808","1540728063","GB","GBR","UNITED KINGDOM" -"1540728064","1540728319","NL","NLD","NETHERLANDS" -"1540728320","1540729343","RU","RUS","RUSSIAN FEDERATION" -"1540729344","1540729599","PL","POL","POLAND" -"1540729600","1540729855","CH","CHE","SWITZERLAND" -"1540729856","1540730111","RU","RUS","RUSSIAN FEDERATION" -"1540730112","1540730367","GB","GBR","UNITED KINGDOM" -"1540730368","1540730623","RU","RUS","RUSSIAN FEDERATION" -"1540730624","1540730879","UA","UKR","UKRAINE" -"1540730880","1540731135","IL","ISR","ISRAEL" -"1540731136","1540731391","DE","DEU","GERMANY" -"1540731392","1540731647","NL","NLD","NETHERLANDS" -"1540731648","1540731903","SE","SWE","SWEDEN" -"1540731904","1540732159","FR","FRA","FRANCE" -"1540732160","1540732415","MD","MDA","REPUBLIC OF MOLDOVA" -"1540732416","1540732671","UA","UKR","UKRAINE" -"1540732672","1540732927","GB","GBR","UNITED KINGDOM" -"1540732928","1540733183","RU","RUS","RUSSIAN FEDERATION" -"1540733184","1540733439","UA","UKR","UKRAINE" -"1540733440","1540733695","RU","RUS","RUSSIAN FEDERATION" -"1540733696","1540733951","UA","UKR","UKRAINE" -"1540733952","1540734207","GB","GBR","UNITED KINGDOM" -"1540734208","1540734463","RU","RUS","RUSSIAN FEDERATION" -"1540734464","1540734719","NL","NLD","NETHERLANDS" -"1540734720","1540734975","IQ","IRQ","IRAQ" -"1540734976","1540735231","UA","UKR","UKRAINE" -"1540735232","1540735487","PL","POL","POLAND" -"1540735488","1540735743","CH","CHE","SWITZERLAND" -"1540735744","1540735999","NL","NLD","NETHERLANDS" -"1540736000","1540736255","RU","RUS","RUSSIAN FEDERATION" -"1540736256","1540736511","IT","ITA","ITALY" -"1540736512","1540736767","DE","DEU","GERMANY" -"1540736768","1540737791","GB","GBR","UNITED KINGDOM" -"1540737792","1540738047","NO","NOR","NORWAY" -"1540738048","1540738303","AT","AUT","AUSTRIA" -"1540738304","1540738559","SA","SAU","SAUDI ARABIA" -"1540738560","1540738815","PL","POL","POLAND" -"1540738816","1540739071","DE","DEU","GERMANY" -"1540739072","1540739327","SE","SWE","SWEDEN" -"1540739328","1540739583","PA","PAN","PANAMA" -"1540739584","1540739839","IT","ITA","ITALY" -"1540739840","1540740095","CZ","CZE","CZECH REPUBLIC" -"1540740096","1540740351","GB","GBR","UNITED KINGDOM" -"1540740352","1540740607","SA","SAU","SAUDI ARABIA" -"1540740608","1540740863","NL","NLD","NETHERLANDS" -"1540740864","1540741119","RO","ROM","ROMANIA" -"1540741120","1540741375","GB","GBR","UNITED KINGDOM" -"1540741632","1540742143","NL","NLD","NETHERLANDS" -"1540742144","1540742399","RU","RUS","RUSSIAN FEDERATION" -"1540742400","1540742655","DE","DEU","GERMANY" -"1540742656","1540742911","AT","AUT","AUSTRIA" -"1540742912","1540743167","RU","RUS","RUSSIAN FEDERATION" -"1540743168","1540743423","NO","NOR","NORWAY" -"1540743424","1540743679","RU","RUS","RUSSIAN FEDERATION" -"1540743680","1540743935","GB","GBR","UNITED KINGDOM" -"1540743936","1540744191","CH","CHE","SWITZERLAND" -"1540744192","1540744447","GR","GRC","GREECE" -"1540744448","1540744703","UA","UKR","UKRAINE" -"1540744704","1540744959","GB","GBR","UNITED KINGDOM" -"1540744960","1540745215","UA","UKR","UKRAINE" -"1540745216","1540745471","DE","DEU","GERMANY" -"1540745472","1540745727","KG","KGZ","KYRGYZSTAN" -"1540745728","1540746239","AT","AUT","AUSTRIA" -"1540746240","1540746495","FR","FRA","FRANCE" -"1540746496","1540747263","PL","POL","POLAND" -"1540747264","1540747519","RU","RUS","RUSSIAN FEDERATION" -"1540747520","1540747775","SI","SVN","SLOVENIA" -"1540747776","1540748031","FR","FRA","FRANCE" -"1540748032","1540748287","RU","RUS","RUSSIAN FEDERATION" -"1540748288","1540748543","CZ","CZE","CZECH REPUBLIC" -"1540748544","1540748799","TR","TUR","TURKEY" -"1540748800","1540749055","SE","SWE","SWEDEN" -"1540749056","1540749311","RU","RUS","RUSSIAN FEDERATION" -"1540749312","1540749567","UZ","UZB","UZBEKISTAN" -"1540749568","1540749823","RU","RUS","RUSSIAN FEDERATION" -"1540749824","1540750079","SE","SWE","SWEDEN" -"1540750080","1540750335","BE","BEL","BELGIUM" -"1540750336","1540750591","GB","GBR","UNITED KINGDOM" -"1540750592","1540751103","TR","TUR","TURKEY" -"1540751104","1540752383","PL","POL","POLAND" -"1540752384","1540753407","GB","GBR","UNITED KINGDOM" -"1540753408","1540754431","DE","DEU","GERMANY" -"1540754432","1540755455","RO","ROM","ROMANIA" -"1540755456","1540756479","UA","UKR","UKRAINE" -"1540756480","1540757503","DK","DNK","DENMARK" -"1540757504","1540758527","PL","POL","POLAND" -"1540758528","1540760575","UA","UKR","UKRAINE" -"1540760576","1540761599","PL","POL","POLAND" -"1540761600","1540762623","RU","RUS","RUSSIAN FEDERATION" -"1540762624","1540763647","LU","LUX","LUXEMBOURG" -"1540763648","1540764671","UA","UKR","UKRAINE" -"1540764672","1540765695","PL","POL","POLAND" -"1540765696","1540766719","RU","RUS","RUSSIAN FEDERATION" -"1540766720","1540767743","IT","ITA","ITALY" -"1540767744","1540768767","GB","GBR","UNITED KINGDOM" -"1540768768","1540769791","RU","RUS","RUSSIAN FEDERATION" -"1540769792","1540770815","IT","ITA","ITALY" -"1540770816","1540771839","RU","RUS","RUSSIAN FEDERATION" -"1540771840","1540773887","UA","UKR","UKRAINE" -"1540773888","1540774911","SE","SWE","SWEDEN" -"1540774912","1540775935","GB","GBR","UNITED KINGDOM" -"1540775936","1540776959","RU","RUS","RUSSIAN FEDERATION" -"1540776960","1540777983","IL","ISR","ISRAEL" -"1540777984","1540779007","HR","HRV","CROATIA" -"1540779008","1540780031","NL","NLD","NETHERLANDS" -"1540780032","1540781055","UA","UKR","UKRAINE" -"1540781056","1540783103","RU","RUS","RUSSIAN FEDERATION" -"1540783104","1540787199","UA","UKR","UKRAINE" -"1540787200","1540788223","KZ","KAZ","KAZAKHSTAN" -"1540788224","1540790271","RU","RUS","RUSSIAN FEDERATION" -"1540790272","1540791295","KW","KWT","KUWAIT" -"1540791296","1540792319","CZ","CZE","CZECH REPUBLIC" -"1540792320","1540793343","UA","UKR","UKRAINE" -"1540793344","1540794367","FI","FIN","FINLAND" -"1540794368","1540795391","CH","CHE","SWITZERLAND" -"1540795392","1540796415","RU","RUS","RUSSIAN FEDERATION" -"1540796416","1540798463","UA","UKR","UKRAINE" -"1540798464","1540799487","RU","RUS","RUSSIAN FEDERATION" -"1540799488","1540800511","RO","ROM","ROMANIA" -"1540800512","1540801535","CZ","CZE","CZECH REPUBLIC" -"1540801536","1540802559","RU","RUS","RUSSIAN FEDERATION" -"1540802560","1540803583","MD","MDA","REPUBLIC OF MOLDOVA" -"1540803584","1540804607","RU","RUS","RUSSIAN FEDERATION" -"1540804608","1540805631","UA","UKR","UKRAINE" -"1540805632","1540809727","RU","RUS","RUSSIAN FEDERATION" -"1540809728","1540810751","GB","GBR","UNITED KINGDOM" -"1540810752","1540811775","UA","UKR","UKRAINE" -"1540811776","1540812799","PL","POL","POLAND" -"1540812800","1540813823","RU","RUS","RUSSIAN FEDERATION" -"1540813824","1540815871","UA","UKR","UKRAINE" -"1540815872","1540816895","DE","DEU","GERMANY" -"1540816896","1540817919","PL","POL","POLAND" -"1540817920","1540818943","NL","NLD","NETHERLANDS" -"1540818944","1540819967","UA","UKR","UKRAINE" -"1540819968","1540820991","CZ","CZE","CZECH REPUBLIC" -"1540820992","1540822015","RU","RUS","RUSSIAN FEDERATION" -"1540822016","1540823039","FR","FRA","FRANCE" -"1540823040","1540824063","UA","UKR","UKRAINE" -"1540824064","1540825087","RU","RUS","RUSSIAN FEDERATION" -"1540825088","1540826111","PL","POL","POLAND" -"1540826112","1540828159","RU","RUS","RUSSIAN FEDERATION" -"1540828160","1540829183","PL","POL","POLAND" -"1540829184","1540830207","RU","RUS","RUSSIAN FEDERATION" -"1540830208","1540833279","UA","UKR","UKRAINE" -"1540833280","1540834303","ES","ESP","SPAIN" -"1540834304","1540835327","UA","UKR","UKRAINE" -"1540835328","1540836351","DE","DEU","GERMANY" -"1540836352","1540837375","RU","RUS","RUSSIAN FEDERATION" -"1540837376","1540838399","PL","POL","POLAND" -"1540838400","1540840447","RU","RUS","RUSSIAN FEDERATION" -"1540840448","1540841471","SE","SWE","SWEDEN" -"1540841472","1540842495","RO","ROM","ROMANIA" -"1540842496","1540843519","DE","DEU","GERMANY" -"1540843520","1540844543","PL","POL","POLAND" -"1540844544","1540846591","RU","RUS","RUSSIAN FEDERATION" -"1540846592","1540847615","DE","DEU","GERMANY" -"1540847616","1540848639","RU","RUS","RUSSIAN FEDERATION" -"1540848640","1540849663","UA","UKR","UKRAINE" -"1540849664","1540850687","RU","RUS","RUSSIAN FEDERATION" -"1540850688","1540851711","FI","FIN","FINLAND" -"1540851712","1540852735","UA","UKR","UKRAINE" -"1540852736","1540853759","RU","RUS","RUSSIAN FEDERATION" -"1540853760","1540854783","UA","UKR","UKRAINE" -"1540854784","1540855807","NL","NLD","NETHERLANDS" -"1540855808","1540856831","RU","RUS","RUSSIAN FEDERATION" -"1540856832","1540857855","NL","NLD","NETHERLANDS" -"1540857856","1540858879","DK","DNK","DENMARK" -"1540858880","1540859903","GB","GBR","UNITED KINGDOM" -"1540859904","1540860927","RU","RUS","RUSSIAN FEDERATION" -"1540860928","1540861951","KZ","KAZ","KAZAKHSTAN" -"1540861952","1540862975","BY","BLR","BELARUS" -"1540862976","1540865023","GB","GBR","UNITED KINGDOM" -"1540865024","1540872191","RU","RUS","RUSSIAN FEDERATION" -"1540872192","1540873215","BG","BGR","BULGARIA" -"1540873216","1540875263","RU","RUS","RUSSIAN FEDERATION" -"1540875264","1540876287","PL","POL","POLAND" -"1540876288","1540877311","RU","RUS","RUSSIAN FEDERATION" -"1540878336","1540879359","AT","AUT","AUSTRIA" -"1540879360","1540880383","RU","RUS","RUSSIAN FEDERATION" -"1540880384","1540881407","UA","UKR","UKRAINE" -"1540881408","1540882431","RU","RUS","RUSSIAN FEDERATION" -"1543503872","1545601023","GB","GBR","UNITED KINGDOM" -"1545601024","1545863167","SE","SWE","SWEDEN" -"1545863168","1545895935","RU","RUS","RUSSIAN FEDERATION" -"1545895936","1545928703","BA","BIH","BOSNIA AND HERZEGOVINA" -"1545928704","1545961471","SI","SVN","SLOVENIA" -"1545961472","1545994239","RU","RUS","RUSSIAN FEDERATION" -"1545994240","1546027007","CZ","CZE","CZECH REPUBLIC" -"1546027008","1546059775","RU","RUS","RUSSIAN FEDERATION" -"1546059776","1546063871","SE","SWE","SWEDEN" -"1546063872","1546067967","DE","DEU","GERMANY" -"1546067968","1546072063","SE","SWE","SWEDEN" -"1546072064","1546076159","MD","MDA","REPUBLIC OF MOLDOVA" -"1546076160","1546080255","RU","RUS","RUSSIAN FEDERATION" -"1546080256","1546084351","AZ","AZE","AZERBAIJAN" -"1546084352","1546088447","RU","RUS","RUSSIAN FEDERATION" -"1546088448","1546088575","SN","SEN","SENEGAL" -"1546088576","1546088703","TM","TKM","TURKMENISTAN" -"1546088704","1546088831","BA","BIH","BOSNIA AND HERZEGOVINA" -"1546088832","1546088959","TJ","TJK","TAJIKISTAN" -"1546088960","1546089087","SD","SDN","SUDAN" -"1546089088","1546089215","DE","DEU","GERMANY" -"1546089216","1546089343","MW","MWI","MALAWI" -"1546089344","1546089471","ZW","ZWE","ZIMBABWE" -"1546089472","1546089599","BI","BDI","BURUNDI" -"1546089600","1546089727","GW","GNB","GUINEA-BISSAU" -"1546089728","1546089855","LS","LSO","LESOTHO" -"1546089856","1546089983","NE","NER","NIGER" -"1546089984","1546090111","DE","DEU","GERMANY" -"1546090112","1546090239","MR","MRT","MAURITANIA" -"1546090240","1546090367","ZM","ZMB","ZAMBIA" -"1546090368","1546090495","MG","MDG","MADAGASCAR" -"1546090496","1546090623","BW","BWA","BOTSWANA" -"1546090624","1546090751","GH","GHA","GHANA" -"1546090752","1546090879","ER","ERI","ERITREA" -"1546090880","1546091007","AO","AGO","ANGOLA" -"1546091008","1546091135","NA","NAM","NAMIBIA" -"1546091136","1546091263","KM","COM","COMOROS" -"1546091264","1546091391","GN","GIN","GUINEA" -"1546091392","1546091519","HT","HTI","HAITI" -"1546091520","1546091647","AF","AFG","AFGHANISTAN" -"1546091648","1546091775","TD","TCD","CHAD" -"1546091776","1546091903","BF","BFA","BURKINA FASO" -"1546091904","1546092031","RW","RWA","RWANDA" -"1546092032","1546092159","TG","TGO","TOGO" -"1546092160","1546092287","SD","SDN","SUDAN" -"1546092288","1546092415","RW","RWA","RWANDA" -"1546092416","1546092543","NG","NGA","NIGERIA" -"1546092544","1546096639","RU","RUS","RUSSIAN FEDERATION" -"1546096640","1546100735","IT","ITA","ITALY" -"1546104832","1546108927","IE","IRL","IRELAND" -"1546108928","1546113023","GB","GBR","UNITED KINGDOM" -"1546113024","1546121215","RU","RUS","RUSSIAN FEDERATION" -"1546121216","1546125311","ES","ESP","SPAIN" -"1546125312","1546256383","GB","GBR","UNITED KINGDOM" -"1546256384","1546264575","RU","RUS","RUSSIAN FEDERATION" -"1546264576","1546266623","TR","TUR","TURKEY" -"1546266624","1546268671","RU","RUS","RUSSIAN FEDERATION" -"1546268672","1546270719","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1546270720","1546272767","GB","GBR","UNITED KINGDOM" -"1546272768","1546274815","NO","NOR","NORWAY" -"1546274816","1546276863","SE","SWE","SWEDEN" -"1546276864","1546278399","GB","GBR","UNITED KINGDOM" -"1546278400","1546278911","BZ","BLZ","BELIZE" -"1546278912","1546280959","RU","RUS","RUSSIAN FEDERATION" -"1546280960","1546283007","IT","ITA","ITALY" -"1546283008","1546285055","CH","CHE","SWITZERLAND" -"1546285056","1546287103","PL","POL","POLAND" -"1546287104","1546289151","GB","GBR","UNITED KINGDOM" -"1546289152","1546291199","RU","RUS","RUSSIAN FEDERATION" -"1546291200","1546293247","AT","AUT","AUSTRIA" -"1546293248","1546295295","GB","GBR","UNITED KINGDOM" -"1546295296","1546297343","SE","SWE","SWEDEN" -"1546297344","1546299391","RU","RUS","RUSSIAN FEDERATION" -"1546299392","1546301439","GB","GBR","UNITED KINGDOM" -"1546301440","1546303487","LU","LUX","LUXEMBOURG" -"1546303488","1546305535","CH","CHE","SWITZERLAND" -"1546305536","1546307583","DE","DEU","GERMANY" -"1546307584","1546311679","RU","RUS","RUSSIAN FEDERATION" -"1546311680","1546313727","FR","FRA","FRANCE" -"1546313728","1546315775","DE","DEU","GERMANY" -"1546315776","1546317823","NL","NLD","NETHERLANDS" -"1546317824","1546319871","CH","CHE","SWITZERLAND" -"1546319872","1546320383","RS","SRB","SERBIA" -"1546320384","1546320387","SR","SUR","SURINAME" -"1546320388","1546320391","CS","SCG","SERBIA AND MONTENEGRO" -"1546320392","1546321919","RS","SRB","SERBIA" -"1546321920","1546323967","RU","RUS","RUSSIAN FEDERATION" -"1546323968","1546324479","GE","GEO","GEORGIA" -"1546324480","1546326015","NO","NOR","NORWAY" -"1546326016","1546327295","ES","ESP","SPAIN" -"1546327296","1546327551","FR","FRA","FRANCE" -"1546327552","1546328063","ES","ESP","SPAIN" -"1546328064","1546330111","CZ","CZE","CZECH REPUBLIC" -"1546330112","1546332159","SE","SWE","SWEDEN" -"1546332160","1546334207","GB","GBR","UNITED KINGDOM" -"1546334208","1546336255","DE","DEU","GERMANY" -"1546336256","1546338303","CZ","CZE","CZECH REPUBLIC" -"1546338304","1546340351","GB","GBR","UNITED KINGDOM" -"1546340352","1546342399","DK","DNK","DENMARK" -"1546342400","1546344447","TR","TUR","TURKEY" -"1546344448","1546346495","DK","DNK","DENMARK" -"1546346496","1546348543","AT","AUT","AUSTRIA" -"1546348544","1546350399","DE","DEU","GERMANY" -"1546350400","1546350431","JP","JPN","JAPAN" -"1546350432","1546350591","DE","DEU","GERMANY" -"1546350592","1546352639","PL","POL","POLAND" -"1546352640","1546354687","DK","DNK","DENMARK" -"1546354688","1546356735","FR","FRA","FRANCE" -"1546356736","1546358783","AM","ARM","ARMENIA" -"1546358784","1546360831","PL","POL","POLAND" -"1546360832","1546364927","RU","RUS","RUSSIAN FEDERATION" -"1546364928","1546366975","SA","SAU","SAUDI ARABIA" -"1546366976","1546369023","DK","DNK","DENMARK" -"1546369024","1546371071","RU","RUS","RUSSIAN FEDERATION" -"1546371072","1546373119","IS","ISL","ICELAND" -"1546373120","1546375167","HU","HUN","HUNGARY" -"1546375168","1546377215","GB","GBR","UNITED KINGDOM" -"1546377216","1546379263","CH","CHE","SWITZERLAND" -"1546379264","1546381311","ES","ESP","SPAIN" -"1546381312","1546383359","DK","DNK","DENMARK" -"1546383360","1546385407","IT","ITA","ITALY" -"1546385408","1546387455","FR","FRA","FRANCE" -"1546387456","1546518527","TR","TUR","TURKEY" -"1546518528","1546649599","KZ","KAZ","KAZAKHSTAN" -"1546649600","1546665983","SA","SAU","SAUDI ARABIA" -"1546665984","1546673823","GB","GBR","UNITED KINGDOM" -"1546673824","1546673839","RS","SRB","SERBIA" -"1546673840","1546677503","GB","GBR","UNITED KINGDOM" -"1546677504","1546677557","IN","IND","INDIA" -"1546677558","1546677559","GB","GBR","UNITED KINGDOM" -"1546677560","1546677561","IN","IND","INDIA" -"1546677562","1546677563","GB","GBR","UNITED KINGDOM" -"1546677564","1546677569","IN","IND","INDIA" -"1546677570","1546677571","GB","GBR","UNITED KINGDOM" -"1546677572","1546677573","IN","IND","INDIA" -"1546677574","1546677575","GB","GBR","UNITED KINGDOM" -"1546677576","1546677664","IN","IND","INDIA" -"1546677665","1546677666","GB","GBR","UNITED KINGDOM" -"1546677667","1546677671","IN","IND","INDIA" -"1546677672","1546677675","GB","GBR","UNITED KINGDOM" -"1546677676","1546677759","IN","IND","INDIA" -"1546677760","1546678863","GB","GBR","UNITED KINGDOM" -"1546678864","1546678871","RS","SRB","SERBIA" -"1546678872","1546680831","GB","GBR","UNITED KINGDOM" -"1546680832","1546680895","RS","SRB","SERBIA" -"1546680896","1546681407","GB","GBR","UNITED KINGDOM" -"1546681408","1546681439","RS","SRB","SERBIA" -"1546681440","1546681455","GB","GBR","UNITED KINGDOM" -"1546681456","1546681471","RS","SRB","SERBIA" -"1546681472","1546682367","GB","GBR","UNITED KINGDOM" -"1546682368","1546698751","BE","BEL","BELGIUM" -"1546698752","1546715135","NL","NLD","NETHERLANDS" -"1546715136","1546731519","LV","LVA","LATVIA" -"1546731520","1546747903","FR","FRA","FRANCE" -"1546747904","1546764287","RU","RUS","RUSSIAN FEDERATION" -"1546764288","1546780671","UA","UKR","UKRAINE" -"1546780672","1546797055","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1546797056","1546813439","DE","DEU","GERMANY" -"1546813440","1546862591","RU","RUS","RUSSIAN FEDERATION" -"1546862592","1546878975","GE","GEO","GEORGIA" -"1546878976","1546895359","DE","DEU","GERMANY" -"1546895360","1546911743","IE","IRL","IRELAND" -"1546911744","1546928127","SK","SVK","SLOVAKIA" -"1546928128","1546944511","GB","GBR","UNITED KINGDOM" -"1546944512","1546960895","UA","UKR","UKRAINE" -"1546960896","1546977279","HU","HUN","HUNGARY" -"1546977280","1546993663","MK","MKD","THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA" -"1546993664","1547010047","RU","RUS","RUSSIAN FEDERATION" -"1547010048","1547026431","SI","SVN","SLOVENIA" -"1547026432","1547042815","NL","NLD","NETHERLANDS" -"1547042816","1547059199","ES","ESP","SPAIN" -"1547059200","1547075583","RU","RUS","RUSSIAN FEDERATION" -"1547075584","1547091967","GB","GBR","UNITED KINGDOM" -"1547091968","1547108351","GE","GEO","GEORGIA" -"1547108352","1547124735","RU","RUS","RUSSIAN FEDERATION" -"1547124736","1547141119","MK","MKD","THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA" -"1547141120","1547157503","RO","ROM","ROMANIA" -"1547157504","1547173887","PL","POL","POLAND" -"1547173888","1547436031","ES","ESP","SPAIN" -"1547436032","1547440127","AT","AUT","AUSTRIA" -"1547440128","1547444223","AL","ALB","ALBANIA" -"1547444224","1547448319","IT","ITA","ITALY" -"1547448320","1547452415","SK","SVK","SLOVAKIA" -"1547452416","1547456511","IT","ITA","ITALY" -"1547456512","1547460607","RU","RUS","RUSSIAN FEDERATION" -"1547460608","1547468799","GB","GBR","UNITED KINGDOM" -"1547468800","1547472895","PL","POL","POLAND" -"1547472896","1547476991","DK","DNK","DENMARK" -"1547476992","1547481087","ES","ESP","SPAIN" -"1547481088","1547485183","UA","UKR","UKRAINE" -"1547485184","1547489279","IE","IRL","IRELAND" -"1547489280","1547493375","DE","DEU","GERMANY" -"1547493376","1547497471","RS","SRB","SERBIA" -"1547497472","1547501567","GB","GBR","UNITED KINGDOM" -"1547501568","1547505663","TR","TUR","TURKEY" -"1547505664","1547509759","RU","RUS","RUSSIAN FEDERATION" -"1547509760","1547513855","LT","LTU","LITHUANIA" -"1547513856","1547517951","AT","AUT","AUSTRIA" -"1547517952","1547522047","RU","RUS","RUSSIAN FEDERATION" -"1547522048","1547526143","CZ","CZE","CZECH REPUBLIC" -"1547526144","1547534335","HU","HUN","HUNGARY" -"1547534336","1547538431","FR","FRA","FRANCE" -"1547538432","1547542527","DE","DEU","GERMANY" -"1547542528","1547546623","FR","FRA","FRANCE" -"1547546624","1547550719","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1547550720","1547554815","IE","IRL","IRELAND" -"1547554816","1547558911","AT","AUT","AUSTRIA" -"1547558912","1547563007","IL","ISR","ISRAEL" -"1547563008","1547564287","NL","NLD","NETHERLANDS" -"1547564288","1547564311","CH","CHE","SWITZERLAND" -"1547564312","1547564315","BG","BGR","BULGARIA" -"1547564316","1547564335","NL","NLD","NETHERLANDS" -"1547564336","1547564415","US","USA","UNITED STATES" -"1547564416","1547564439","NZ","NZL","NEW ZEALAND" -"1547564440","1547564543","NL","NLD","NETHERLANDS" -"1547564544","1547564799","US","USA","UNITED STATES" -"1547564800","1547564831","NL","NLD","NETHERLANDS" -"1547564832","1547564863","LV","LVA","LATVIA" -"1547564864","1547565055","NL","NLD","NETHERLANDS" -"1547565056","1547566079","US","USA","UNITED STATES" -"1547566080","1547567103","NL","NLD","NETHERLANDS" -"1547567104","1547571199","GB","GBR","UNITED KINGDOM" -"1547571200","1547575295","AT","AUT","AUSTRIA" -"1547575296","1547579391","NO","NOR","NORWAY" -"1547579392","1547583487","RU","RUS","RUSSIAN FEDERATION" -"1547583488","1547587583","KG","KGZ","KYRGYZSTAN" -"1547587584","1547591679","IT","ITA","ITALY" -"1547591680","1547595775","EE","EST","ESTONIA" -"1547595776","1547599871","JO","JOR","JORDAN" -"1547599872","1547603967","LT","LTU","LITHUANIA" -"1547603968","1547608063","RU","RUS","RUSSIAN FEDERATION" -"1547608064","1547612159","LB","LBN","LEBANON" -"1547612160","1547616255","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1547616256","1547620351","DK","DNK","DENMARK" -"1547620352","1547620359","JE","JEY","JERSEY" -"1547620360","1547620367","NG","NGA","NIGERIA" -"1547620368","1547620375","JE","JEY","JERSEY" -"1547620376","1547620383","NG","NGA","NIGERIA" -"1547620384","1547620399","JE","JEY","JERSEY" -"1547620400","1547620407","NG","NGA","NIGERIA" -"1547620408","1547620415","JE","JEY","JERSEY" -"1547620416","1547620423","NG","NGA","NIGERIA" -"1547620424","1547620439","JE","JEY","JERSEY" -"1547620440","1547620551","NG","NGA","NIGERIA" -"1547620552","1547620559","JE","JEY","JERSEY" -"1547620560","1547620615","NG","NGA","NIGERIA" -"1547620616","1547620639","JE","JEY","JERSEY" -"1547620640","1547620647","NG","NGA","NIGERIA" -"1547620648","1547620863","JE","JEY","JERSEY" -"1547620864","1547620871","NG","NGA","NIGERIA" -"1547620872","1547620879","JE","JEY","JERSEY" -"1547620880","1547620887","NG","NGA","NIGERIA" -"1547620888","1547620895","JE","JEY","JERSEY" -"1547620896","1547620903","NG","NGA","NIGERIA" -"1547620904","1547620911","JE","JEY","JERSEY" -"1547620912","1547620935","NG","NGA","NIGERIA" -"1547620936","1547620951","JE","JEY","JERSEY" -"1547620952","1547620959","NG","NGA","NIGERIA" -"1547620960","1547620967","JE","JEY","JERSEY" -"1547620968","1547620983","NG","NGA","NIGERIA" -"1547620984","1547620999","JE","JEY","JERSEY" -"1547621000","1547621031","NG","NGA","NIGERIA" -"1547621032","1547621039","JE","JEY","JERSEY" -"1547621040","1547621063","NG","NGA","NIGERIA" -"1547621064","1547621071","JE","JEY","JERSEY" -"1547621072","1547621087","NG","NGA","NIGERIA" -"1547621088","1547621095","JE","JEY","JERSEY" -"1547621096","1547621119","NG","NGA","NIGERIA" -"1547621120","1547621127","JE","JEY","JERSEY" -"1547621128","1547621135","NG","NGA","NIGERIA" -"1547621136","1547621143","JE","JEY","JERSEY" -"1547621144","1547621151","NG","NGA","NIGERIA" -"1547621152","1547621167","JE","JEY","JERSEY" -"1547621168","1547621191","NG","NGA","NIGERIA" -"1547621192","1547621199","JE","JEY","JERSEY" -"1547621200","1547621223","NG","NGA","NIGERIA" -"1547621224","1547621231","JE","JEY","JERSEY" -"1547621232","1547621239","NG","NGA","NIGERIA" -"1547621240","1547621247","JE","JEY","JERSEY" -"1547621248","1547621263","NG","NGA","NIGERIA" -"1547621264","1547621271","JE","JEY","JERSEY" -"1547621272","1547621279","NG","NGA","NIGERIA" -"1547621280","1547621303","JE","JEY","JERSEY" -"1547621304","1547621335","NG","NGA","NIGERIA" -"1547621336","1547621351","JE","JEY","JERSEY" -"1547621352","1547621375","NG","NGA","NIGERIA" -"1547621376","1547624447","JE","JEY","JERSEY" -"1547624448","1547628543","CZ","CZE","CZECH REPUBLIC" -"1547628544","1547632639","BG","BGR","BULGARIA" -"1547632640","1547636735","TR","TUR","TURKEY" -"1547636736","1547640831","SI","SVN","SLOVENIA" -"1547640832","1547644927","PL","POL","POLAND" -"1547644928","1547649023","CZ","CZE","CZECH REPUBLIC" -"1547649024","1547653119","RU","RUS","RUSSIAN FEDERATION" -"1547653120","1547654911","LV","LVA","LATVIA" -"1547654912","1547655167","SE","SWE","SWEDEN" -"1547655168","1547657215","LV","LVA","LATVIA" -"1547657216","1547660287","RU","RUS","RUSSIAN FEDERATION" -"1547660288","1547661311","BE","BEL","BELGIUM" -"1547661312","1547665407","LV","LVA","LATVIA" -"1547665408","1547669503","GB","GBR","UNITED KINGDOM" -"1547669504","1547672575","AT","AUT","AUSTRIA" -"1547672576","1547673087","HR","HRV","CROATIA" -"1547673088","1547673599","AT","AUT","AUSTRIA" -"1547673600","1547685887","RU","RUS","RUSSIAN FEDERATION" -"1547685888","1547689983","AT","AUT","AUSTRIA" -"1547689984","1547694079","IT","ITA","ITALY" -"1547694080","1547698175","HU","HUN","HUNGARY" -"1547698176","1548157119","NL","NLD","NETHERLANDS" -"1548157120","1548157183","DE","DEU","GERMANY" -"1548157184","1548222463","NL","NLD","NETHERLANDS" -"1548222464","1548746751","DE","DEU","GERMANY" -"1548746752","1549271039","RO","ROM","ROMANIA" -"1549271040","1549795327","FR","FRA","FRANCE" -"1549795328","1550057471","AE","ARE","UNITED ARAB EMIRATES" -"1550057472","1550188543","RU","RUS","RUSSIAN FEDERATION" -"1550188544","1550319615","FR","FRA","FRANCE" -"1550319616","1550581759","CH","CHE","SWITZERLAND" -"1550581760","1550843903","NL","NLD","NETHERLANDS" -"1550843904","1550974975","UA","UKR","UKRAINE" -"1550974976","1550996223","RO","ROM","ROMANIA" -"1550996224","1550996479","CH","CHE","SWITZERLAND" -"1550996480","1551007743","RO","ROM","ROMANIA" -"1551007744","1551106047","MD","MDA","REPUBLIC OF MOLDOVA" -"1551106048","1551237119","DE","DEU","GERMANY" -"1551237120","1551368191","GR","GRC","GREECE" -"1551368192","1551499263","NL","NLD","NETHERLANDS" -"1551503360","1551504383","GB","GBR","UNITED KINGDOM" -"1551504384","1551505407","FR","FRA","FRANCE" -"1551507456","1551508479","DE","DEU","GERMANY" -"1551508480","1551509503","IT","ITA","ITALY" -"1551511552","1551512575","GB","GBR","UNITED KINGDOM" -"1551516672","1551517695","IT","ITA","ITALY" -"1551517696","1551518719","ES","ESP","SPAIN" -"1551528960","1551529983","FR","FRA","FRANCE" -"1551544320","1551547391","DE","DEU","GERMANY" -"1551548416","1551551487","DE","DEU","GERMANY" -"1551556608","1551558655","FR","FRA","FRANCE" -"1551564800","1551572991","FR","FRA","FRANCE" -"1551572992","1551576063","NL","NLD","NETHERLANDS" -"1551577088","1551580159","NL","NLD","NETHERLANDS" -"1551630336","1551892479","RU","RUS","RUSSIAN FEDERATION" -"1551892480","1556086783","FR","FRA","FRANCE" -"1556086784","1558708223","DE","DEU","GERMANY" -"1558708224","1559232511","GB","GBR","UNITED KINGDOM" -"1559232512","1559240703","IL","ISR","ISRAEL" -"1559240704","1559248895","BA","BIH","BOSNIA AND HERZEGOVINA" -"1559248896","1559257087","LV","LVA","LATVIA" -"1559257088","1559265279","UA","UKR","UKRAINE" -"1559265280","1559273471","RU","RUS","RUSSIAN FEDERATION" -"1559273472","1559281663","CZ","CZE","CZECH REPUBLIC" -"1559281664","1559289855","RU","RUS","RUSSIAN FEDERATION" -"1559289856","1559295359","SK","SVK","SLOVAKIA" -"1559295360","1559295487","CZ","CZE","CZECH REPUBLIC" -"1559295488","1559296255","SK","SVK","SLOVAKIA" -"1559296256","1559296383","CZ","CZE","CZECH REPUBLIC" -"1559296384","1559298047","SK","SVK","SLOVAKIA" -"1559298048","1559306239","RU","RUS","RUSSIAN FEDERATION" -"1559306240","1559314431","JO","JOR","JORDAN" -"1559314432","1559322623","GE","GEO","GEORGIA" -"1559322624","1559330815","RU","RUS","RUSSIAN FEDERATION" -"1559330816","1559339007","BA","BIH","BOSNIA AND HERZEGOVINA" -"1559339008","1559339711","RU","RUS","RUSSIAN FEDERATION" -"1559339712","1559339775","PA","PAN","PANAMA" -"1559339776","1559341695","RU","RUS","RUSSIAN FEDERATION" -"1559341696","1559341703","ES","ESP","SPAIN" -"1559341704","1559347199","RU","RUS","RUSSIAN FEDERATION" -"1559347200","1559351295","SE","SWE","SWEDEN" -"1559351296","1559355391","DK","DNK","DENMARK" -"1559355392","1559388159","RU","RUS","RUSSIAN FEDERATION" -"1559388160","1559396351","UA","UKR","UKRAINE" -"1559396352","1559404543","GB","GBR","UNITED KINGDOM" -"1559404544","1559412735","FI","FIN","FINLAND" -"1559412736","1559420927","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1559420928","1559429119","HR","HRV","CROATIA" -"1559429120","1559437311","FR","FRA","FRANCE" -"1559437312","1559445503","AT","AUT","AUSTRIA" -"1559445504","1559461887","RU","RUS","RUSSIAN FEDERATION" -"1559461888","1559470079","IT","ITA","ITALY" -"1559470080","1559478271","RU","RUS","RUSSIAN FEDERATION" -"1559478272","1559486463","CZ","CZE","CZECH REPUBLIC" -"1559486464","1559494655","DK","DNK","DENMARK" -"1559494656","1559502847","SE","SWE","SWEDEN" -"1559502848","1559511039","PL","POL","POLAND" -"1559511040","1559519231","SI","SVN","SLOVENIA" -"1559519232","1559527423","UA","UKR","UKRAINE" -"1559527424","1559529471","RS","SRB","SERBIA" -"1559529472","1559530495","CS","SCG","SERBIA AND MONTENEGRO" -"1559530496","1559531519","RS","SRB","SERBIA" -"1559531520","1559532543","CS","SCG","SERBIA AND MONTENEGRO" -"1559532544","1559535615","RS","SRB","SERBIA" -"1559535616","1559543807","GB","GBR","UNITED KINGDOM" -"1559543808","1559551999","SE","SWE","SWEDEN" -"1559552000","1559560191","RU","RUS","RUSSIAN FEDERATION" -"1559560192","1559568383","SK","SVK","SLOVAKIA" -"1559568384","1559576575","RU","RUS","RUSSIAN FEDERATION" -"1559576576","1559584767","HU","HUN","HUNGARY" -"1559584768","1559592959","KG","KGZ","KYRGYZSTAN" -"1559592960","1559601151","FR","FRA","FRANCE" -"1559601152","1559609343","IT","ITA","ITALY" -"1559609344","1559617535","SK","SVK","SLOVAKIA" -"1559617536","1559625727","GB","GBR","UNITED KINGDOM" -"1559625728","1559633919","DK","DNK","DENMARK" -"1559633920","1559642111","IT","ITA","ITALY" -"1559642112","1559650303","RU","RUS","RUSSIAN FEDERATION" -"1559650304","1559658495","IT","ITA","ITALY" -"1559658496","1559683071","RU","RUS","RUSSIAN FEDERATION" -"1559683072","1559691263","CH","CHE","SWITZERLAND" -"1559691264","1559756799","BG","BGR","BULGARIA" -"1559756800","1559789567","AT","AUT","AUSTRIA" -"1559789568","1559838719","RU","RUS","RUSSIAN FEDERATION" -"1559838720","1559855103","UA","UKR","UKRAINE" -"1559855104","1559887871","HU","HUN","HUNGARY" -"1559887872","1559920639","PT","PRT","PORTUGAL" -"1559920640","1559932927","LU","LUX","LUXEMBOURG" -"1559932928","1559943167","DE","DEU","GERMANY" -"1559943168","1559950335","LU","LUX","LUXEMBOURG" -"1559950336","1559953407","DE","DEU","GERMANY" -"1559953408","1559986175","MT","MLT","MALTA" -"1559986176","1560018943","IE","IRL","IRELAND" -"1560018944","1560051711","DE","DEU","GERMANY" -"1560051712","1560084479","RU","RUS","RUSSIAN FEDERATION" -"1560084480","1560117247","JO","JOR","JORDAN" -"1560117248","1560150015","CZ","CZE","CZECH REPUBLIC" -"1560150016","1560182783","NL","NLD","NETHERLANDS" -"1560182784","1560215551","SE","SWE","SWEDEN" -"1560215552","1560281087","RU","RUS","RUSSIAN FEDERATION" -"1560281088","1562378239","FR","FRA","FRANCE" -"1562378240","1564999679","IT","ITA","ITALY" -"1564999680","1565523967","UA","UKR","UKRAINE" -"1565523968","1565655039","RU","RUS","RUSSIAN FEDERATION" -"1565655040","1565786111","AT","AUT","AUSTRIA" -"1565786112","1565917183","BY","BLR","BELARUS" -"1565917184","1565983863","RS","SRB","SERBIA" -"1565983864","1565983871","CS","SCG","SERBIA AND MONTENEGRO" -"1565983872","1565986159","RS","SRB","SERBIA" -"1565986160","1565986175","CS","SCG","SERBIA AND MONTENEGRO" -"1565986176","1565987119","RS","SRB","SERBIA" -"1565987120","1565987135","CS","SCG","SERBIA AND MONTENEGRO" -"1565987136","1565987531","RS","SRB","SERBIA" -"1565987532","1565987535","CS","SCG","SERBIA AND MONTENEGRO" -"1565987536","1565993215","RS","SRB","SERBIA" -"1565993216","1565993983","CS","SCG","SERBIA AND MONTENEGRO" -"1565993984","1565994239","RS","SRB","SERBIA" -"1565994240","1565995263","CS","SCG","SERBIA AND MONTENEGRO" -"1565995264","1565996543","RS","SRB","SERBIA" -"1565996544","1565997055","CS","SCG","SERBIA AND MONTENEGRO" -"1565997056","1566048255","RS","SRB","SERBIA" -"1566048256","1566056447","RU","RUS","RUSSIAN FEDERATION" -"1566056448","1566060543","IT","ITA","ITALY" -"1566060544","1566064639","UA","UKR","UKRAINE" -"1566064640","1566068735","RU","RUS","RUSSIAN FEDERATION" -"1566068736","1566072831","AZ","AZE","AZERBAIJAN" -"1566072832","1566081023","IT","ITA","ITALY" -"1566081024","1566085119","RU","RUS","RUSSIAN FEDERATION" -"1566085120","1566089215","NL","NLD","NETHERLANDS" -"1566089216","1566097407","RU","RUS","RUSSIAN FEDERATION" -"1566097408","1566101503","GB","GBR","UNITED KINGDOM" -"1566101504","1566105599","RU","RUS","RUSSIAN FEDERATION" -"1566105600","1566109695","DE","DEU","GERMANY" -"1566109696","1566113791","CH","CHE","SWITZERLAND" -"1566113792","1566117887","DE","DEU","GERMANY" -"1566117888","1566121983","TR","TUR","TURKEY" -"1566121984","1566126079","NO","NOR","NORWAY" -"1566126080","1566130175","IT","ITA","ITALY" -"1566130176","1566134271","TR","TUR","TURKEY" -"1566134272","1566138367","GB","GBR","UNITED KINGDOM" -"1566138368","1566142463","CZ","CZE","CZECH REPUBLIC" -"1566142464","1566146559","NO","NOR","NORWAY" -"1566146560","1566150655","GB","GBR","UNITED KINGDOM" -"1566150656","1566154751","CZ","CZE","CZECH REPUBLIC" -"1566154752","1566158847","HU","HUN","HUNGARY" -"1566158848","1566162943","RU","RUS","RUSSIAN FEDERATION" -"1566162944","1566167039","PL","POL","POLAND" -"1566167040","1566171135","UA","UKR","UKRAINE" -"1566171136","1566175231","HU","HUN","HUNGARY" -"1566175232","1566179327","IE","IRL","IRELAND" -"1566179328","1566183423","DK","DNK","DENMARK" -"1566183424","1566187519","ES","ESP","SPAIN" -"1566187520","1566191615","RU","RUS","RUSSIAN FEDERATION" -"1566191616","1566195711","FI","FIN","FINLAND" -"1566195712","1566199807","AL","ALB","ALBANIA" -"1566199808","1566207999","RU","RUS","RUSSIAN FEDERATION" -"1566208000","1566212095","DK","DNK","DENMARK" -"1566212096","1566216191","DE","DEU","GERMANY" -"1566216192","1566220287","SE","SWE","SWEDEN" -"1566220288","1566224383","CZ","CZE","CZECH REPUBLIC" -"1566224384","1566228479","DE","DEU","GERMANY" -"1566228480","1566232575","GB","GBR","UNITED KINGDOM" -"1566232576","1566248959","RU","RUS","RUSSIAN FEDERATION" -"1566248960","1566257151","GB","GBR","UNITED KINGDOM" -"1566257152","1566261247","CZ","CZE","CZECH REPUBLIC" -"1566261248","1566265343","TR","TUR","TURKEY" -"1566265344","1566265599","DE","DEU","GERMANY" -"1566265600","1566269439","US","USA","UNITED STATES" -"1566269440","1566271487","NO","NOR","NORWAY" -"1566271488","1566271999","FI","FIN","FINLAND" -"1566272000","1566272511","SE","SWE","SWEDEN" -"1566272512","1566273535","NO","NOR","NORWAY" -"1566273536","1566277631","RU","RUS","RUSSIAN FEDERATION" -"1566277632","1566281727","IT","ITA","ITALY" -"1566281728","1566285823","CZ","CZE","CZECH REPUBLIC" -"1566285824","1566289919","RU","RUS","RUSSIAN FEDERATION" -"1566289920","1566294015","FI","FIN","FINLAND" -"1566294016","1566298111","IQ","IRQ","IRAQ" -"1566298112","1566302207","PL","POL","POLAND" -"1566302208","1566306303","RU","RUS","RUSSIAN FEDERATION" -"1566306304","1566310399","CZ","CZE","CZECH REPUBLIC" -"1566310400","1566312447","SE","SWE","SWEDEN" -"1566312448","1566314495","IE","IRL","IRELAND" -"1566314496","1566316543","BE","BEL","BELGIUM" -"1566316544","1566318591","NO","NOR","NORWAY" -"1566318592","1566320639","RU","RUS","RUSSIAN FEDERATION" -"1566320640","1566321151","GB","GBR","UNITED KINGDOM" -"1566321152","1566321407","NL","NLD","NETHERLANDS" -"1566321408","1566321663","UA","UKR","UKRAINE" -"1566321664","1566321919","BZ","BLZ","BELIZE" -"1566321920","1566322431","GB","GBR","UNITED KINGDOM" -"1566322432","1566322687","BS","BHS","BAHAMAS" -"1566322688","1566324735","CZ","CZE","CZECH REPUBLIC" -"1566324736","1566326783","HU","HUN","HUNGARY" -"1566326784","1566328831","RU","RUS","RUSSIAN FEDERATION" -"1566328832","1566330879","IT","ITA","ITALY" -"1566330880","1566334975","RU","RUS","RUSSIAN FEDERATION" -"1566334976","1566337023","NL","NLD","NETHERLANDS" -"1566337024","1566339071","FR","FRA","FRANCE" -"1566339072","1566341119","RU","RUS","RUSSIAN FEDERATION" -"1566341120","1566343167","GB","GBR","UNITED KINGDOM" -"1566343168","1566345215","DE","DEU","GERMANY" -"1566345216","1566347263","RU","RUS","RUSSIAN FEDERATION" -"1566347264","1566349311","DE","DEU","GERMANY" -"1566349312","1566351359","IT","ITA","ITALY" -"1566351360","1566353407","AT","AUT","AUSTRIA" -"1566353408","1566355455","ES","ESP","SPAIN" -"1566355456","1566357503","RU","RUS","RUSSIAN FEDERATION" -"1566357504","1566359551","IT","ITA","ITALY" -"1566359552","1566363647","RU","RUS","RUSSIAN FEDERATION" -"1566363648","1566365695","GB","GBR","UNITED KINGDOM" -"1566365696","1566367743","RU","RUS","RUSSIAN FEDERATION" -"1566367744","1566371839","ES","ESP","SPAIN" -"1566371840","1566373887","RU","RUS","RUSSIAN FEDERATION" -"1566373888","1566375935","RS","SRB","SERBIA" -"1566375936","1566377983","DE","DEU","GERMANY" -"1566377984","1566380031","BG","BGR","BULGARIA" -"1566380032","1566382079","IT","ITA","ITALY" -"1566382080","1566384127","TR","TUR","TURKEY" -"1566384128","1566386175","RU","RUS","RUSSIAN FEDERATION" -"1566386176","1566388223","FR","FRA","FRANCE" -"1566388224","1566388735","HU","HUN","HUNGARY" -"1566388736","1566388991","PT","PRT","PORTUGAL" -"1566388992","1566389247","SC","SYC","SEYCHELLES" -"1566389248","1566389503","HU","HUN","HUNGARY" -"1566389504","1566389759","SC","SYC","SEYCHELLES" -"1566389760","1566390271","US","USA","UNITED STATES" -"1566390272","1566392319","LT","LTU","LITHUANIA" -"1566392320","1566394367","ES","ESP","SPAIN" -"1566394368","1566396415","NO","NOR","NORWAY" -"1566396416","1566398463","GB","GBR","UNITED KINGDOM" -"1566398464","1566400511","RU","RUS","RUSSIAN FEDERATION" -"1566400512","1566400575","NO","NOR","NORWAY" -"1566400576","1566400607","NL","NLD","NETHERLANDS" -"1566400608","1566400639","GB","GBR","UNITED KINGDOM" -"1566400640","1566400671","NO","NOR","NORWAY" -"1566400672","1566400703","DE","DEU","GERMANY" -"1566400704","1566400735","NL","NLD","NETHERLANDS" -"1566400736","1566400767","DE","DEU","GERMANY" -"1566400768","1566400832","NO","NOR","NORWAY" -"1566400833","1566400895","GB","GBR","UNITED KINGDOM" -"1566400896","1566401023","NO","NOR","NORWAY" -"1566401024","1566401055","US","USA","UNITED STATES" -"1566401056","1566401087","NO","NOR","NORWAY" -"1566401088","1566401215","US","USA","UNITED STATES" -"1566401216","1566401279","NO","NOR","NORWAY" -"1566401280","1566401535","US","USA","UNITED STATES" -"1566401536","1566401599","IN","IND","INDIA" -"1566401600","1566401663","CN","CHN","CHINA" -"1566401664","1566401727","SG","SGP","SINGAPORE" -"1566401728","1566401791","AU","AUS","AUSTRALIA" -"1566401792","1566401856","SI","SVN","SLOVENIA" -"1566401857","1566401919","HK","HKG","HONG KONG" -"1566401920","1566401983","NO","NOR","NORWAY" -"1566401984","1566402047","AU","AUS","AUSTRALIA" -"1566402048","1566402559","NO","NOR","NORWAY" -"1566402560","1566404607","IT","ITA","ITALY" -"1566404608","1566406655","ES","ESP","SPAIN" -"1566406656","1566408703","NL","NLD","NETHERLANDS" -"1566408704","1566410751","GB","GBR","UNITED KINGDOM" -"1566410752","1566414847","RU","RUS","RUSSIAN FEDERATION" -"1566414848","1566416895","FR","FRA","FRANCE" -"1566416896","1566418943","IT","ITA","ITALY" -"1566418944","1566420991","RU","RUS","RUSSIAN FEDERATION" -"1566420992","1566423039","ES","ESP","SPAIN" -"1566423040","1566425087","FR","FRA","FRANCE" -"1566425088","1566427135","RS","SRB","SERBIA" -"1566427136","1566429183","IT","ITA","ITALY" -"1566429184","1566437375","GB","GBR","UNITED KINGDOM" -"1566437376","1566439423","BE","BEL","BELGIUM" -"1566439424","1566443519","DE","DEU","GERMANY" -"1566443520","1566445567","NO","NOR","NORWAY" -"1566445568","1566447615","CY","CYP","CYPRUS" -"1566447616","1566451711","IT","ITA","ITALY" -"1566451712","1566453759","IL","ISR","ISRAEL" -"1566453760","1566455807","IQ","IRQ","IRAQ" -"1566455808","1566457855","PT","PRT","PORTUGAL" -"1566457856","1566459903","CH","CHE","SWITZERLAND" -"1566459904","1566461951","GB","GBR","UNITED KINGDOM" -"1566461952","1566463999","DE","DEU","GERMANY" -"1566464000","1566466047","IT","ITA","ITALY" -"1566466048","1566468095","ES","ESP","SPAIN" -"1566468096","1566468879","BE","BEL","BELGIUM" -"1566468880","1566468895","HU","HUN","HUNGARY" -"1566468896","1566469391","BE","BEL","BELGIUM" -"1566469392","1566469407","HU","HUN","HUNGARY" -"1566469408","1566470143","BE","BEL","BELGIUM" -"1566470144","1566472191","IE","IRL","IRELAND" -"1566472192","1566474239","GB","GBR","UNITED KINGDOM" -"1566474240","1566476287","DE","DEU","GERMANY" -"1566476288","1566478335","BG","BGR","BULGARIA" -"1566478336","1566482431","RU","RUS","RUSSIAN FEDERATION" -"1566482432","1566484479","FR","FRA","FRANCE" -"1566484480","1566486527","SE","SWE","SWEDEN" -"1566486528","1566488575","RU","RUS","RUSSIAN FEDERATION" -"1566488576","1566490623","PL","POL","POLAND" -"1566490624","1566492671","TR","TUR","TURKEY" -"1566492672","1566494719","NL","NLD","NETHERLANDS" -"1566494720","1566496767","SE","SWE","SWEDEN" -"1566496768","1566498815","AM","ARM","ARMENIA" -"1566498816","1566500863","NL","NLD","NETHERLANDS" -"1566500864","1566502911","RU","RUS","RUSSIAN FEDERATION" -"1566502912","1566504959","CH","CHE","SWITZERLAND" -"1566504960","1566507007","TR","TUR","TURKEY" -"1566507008","1566509055","NL","NLD","NETHERLANDS" -"1566509056","1566511103","GB","GBR","UNITED KINGDOM" -"1566511104","1566511359","KN","KNA","SAINT KITTS AND NEVIS" -"1566511360","1566513151","BE","BEL","BELGIUM" -"1566513152","1566515199","BH","BHR","BAHRAIN" -"1566515200","1566517247","CZ","CZE","CZECH REPUBLIC" -"1566517248","1566519295","RU","RUS","RUSSIAN FEDERATION" -"1566519296","1566521343","BE","BEL","BELGIUM" -"1566521344","1566523391","FR","FRA","FRANCE" -"1566523392","1566525439","MK","MKD","THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA" -"1566525440","1566527487","IS","ISL","ICELAND" -"1566527488","1566529535","IE","IRL","IRELAND" -"1566529536","1566531583","PL","POL","POLAND" -"1566531584","1566533631","RU","RUS","RUSSIAN FEDERATION" -"1566533632","1566535679","GB","GBR","UNITED KINGDOM" -"1566535680","1566537727","NL","NLD","NETHERLANDS" -"1566537728","1566539775","GB","GBR","UNITED KINGDOM" -"1566539776","1566541823","DE","DEU","GERMANY" -"1566541824","1566543871","RU","RUS","RUSSIAN FEDERATION" -"1566543872","1566545919","NL","NLD","NETHERLANDS" -"1566545920","1566552063","RU","RUS","RUSSIAN FEDERATION" -"1566552064","1566554111","TR","TUR","TURKEY" -"1566554112","1566556159","UA","UKR","UKRAINE" -"1566556160","1566558207","RU","RUS","RUSSIAN FEDERATION" -"1566558208","1566560255","JO","JOR","JORDAN" -"1566560256","1566564351","IT","ITA","ITALY" -"1566564352","1566566399","IS","ISL","ICELAND" -"1566566400","1566568447","FR","FRA","FRANCE" -"1566568448","1566570495","KZ","KAZ","KAZAKHSTAN" -"1566570496","1566572543","NL","NLD","NETHERLANDS" -"1566572544","1566703615","GB","GBR","UNITED KINGDOM" -"1566703616","1566769151","SA","SAU","SAUDI ARABIA" -"1566769152","1566773759","CZ","CZE","CZECH REPUBLIC" -"1566773760","1566774015","SK","SVK","SLOVAKIA" -"1566774016","1566793215","CZ","CZE","CZECH REPUBLIC" -"1566793216","1566793471","SK","SVK","SLOVAKIA" -"1566793472","1566834687","CZ","CZE","CZECH REPUBLIC" -"1566834688","1566900223","RU","RUS","RUSSIAN FEDERATION" -"1566900224","1566965759","IT","ITA","ITALY" -"1566965760","1567031295","PT","PRT","PORTUGAL" -"1567031296","1567096831","SI","SVN","SLOVENIA" -"1567096832","1567162367","DE","DEU","GERMANY" -"1567162368","1567227903","PL","POL","POLAND" -"1567227904","1567293439","FI","FIN","FINLAND" -"1567293440","1567358975","IE","IRL","IRELAND" -"1567358976","1567424511","PT","PRT","PORTUGAL" -"1567424512","1567490047","CY","CYP","CYPRUS" -"1567490048","1567555583","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1567555584","1567621119","AT","AUT","AUSTRIA" -"1567621120","1567696383","RO","ROM","ROMANIA" -"1567696384","1567696895","MD","MDA","REPUBLIC OF MOLDOVA" -"1567696896","1567705087","RO","ROM","ROMANIA" -"1567705088","1567707135","MD","MDA","REPUBLIC OF MOLDOVA" -"1567707136","1567715327","RO","ROM","ROMANIA" -"1567715328","1567717375","MD","MDA","REPUBLIC OF MOLDOVA" -"1567717376","1567752191","RO","ROM","ROMANIA" -"1567752192","1567756287","MD","MDA","REPUBLIC OF MOLDOVA" -"1567756288","1567775743","RO","ROM","ROMANIA" -"1567775744","1567776767","MD","MDA","REPUBLIC OF MOLDOVA" -"1567776768","1567830015","RO","ROM","ROMANIA" -"1567830016","1567831039","MD","MDA","REPUBLIC OF MOLDOVA" -"1567831040","1567883263","RO","ROM","ROMANIA" -"1567883264","1567948799","MD","MDA","REPUBLIC OF MOLDOVA" -"1567948800","1568024575","RO","ROM","ROMANIA" -"1568024576","1568024831","GB","GBR","UNITED KINGDOM" -"1568024832","1568083967","RO","ROM","ROMANIA" -"1568083968","1568086015","MD","MDA","REPUBLIC OF MOLDOVA" -"1568086016","1568178175","RO","ROM","ROMANIA" -"1568178176","1568243711","RU","RUS","RUSSIAN FEDERATION" -"1568243712","1568276479","FR","FRA","FRANCE" -"1568276480","1568293135","DE","DEU","GERMANY" -"1568293136","1568293151","SA","SAU","SAUDI ARABIA" -"1568293152","1568294223","DE","DEU","GERMANY" -"1568294224","1568294239","IT","ITA","ITALY" -"1568294240","1568294983","DE","DEU","GERMANY" -"1568294984","1568294991","FR","FRA","FRANCE" -"1568294992","1568309247","DE","DEU","GERMANY" -"1568309248","1568342015","RO","ROM","ROMANIA" -"1568342016","1568374783","BG","BGR","BULGARIA" -"1568374784","1568440319","RU","RUS","RUSSIAN FEDERATION" -"1568440320","1568473087","NO","NOR","NORWAY" -"1568473088","1568505855","BY","BLR","BELARUS" -"1568505856","1568538623","NL","NLD","NETHERLANDS" -"1568538624","1568555007","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1568555008","1568571391","UA","UKR","UKRAINE" -"1568571392","1568579583","RO","ROM","ROMANIA" -"1568579584","1568581631","BG","BGR","BULGARIA" -"1568581632","1568604159","RO","ROM","ROMANIA" -"1568604160","1568636927","UA","UKR","UKRAINE" -"1568636928","1568662271","DE","DEU","GERMANY" -"1568662272","1568663039","GB","GBR","UNITED KINGDOM" -"1568663040","1568665599","DE","DEU","GERMANY" -"1568665600","1568665631","MD","MDA","REPUBLIC OF MOLDOVA" -"1568665632","1568665663","DK","DNK","DENMARK" -"1568665664","1568665727","MD","MDA","REPUBLIC OF MOLDOVA" -"1568665728","1568665759","UA","UKR","UKRAINE" -"1568665760","1568665887","MD","MDA","REPUBLIC OF MOLDOVA" -"1568665888","1568665935","DK","DNK","DENMARK" -"1568665936","1568665951","PA","PAN","PANAMA" -"1568665952","1568665983","DK","DNK","DENMARK" -"1568665984","1568665999","MD","MDA","REPUBLIC OF MOLDOVA" -"1568666000","1568666031","DK","DNK","DENMARK" -"1568666032","1568667135","MD","MDA","REPUBLIC OF MOLDOVA" -"1568667136","1568667391","DK","DNK","DENMARK" -"1568667392","1568667399","PA","PAN","PANAMA" -"1568667400","1568667407","RU","RUS","RUSSIAN FEDERATION" -"1568667408","1568667647","MD","MDA","REPUBLIC OF MOLDOVA" -"1568667648","1568667655","AF","AFG","AFGHANISTAN" -"1568667656","1568669695","MD","MDA","REPUBLIC OF MOLDOVA" -"1568669696","1569193983","DE","DEU","GERMANY" -"1569193984","1569718271","HR","HRV","CROATIA" -"1569718272","1570242559","IT","ITA","ITALY" -"1570242560","1570275327","GB","GBR","UNITED KINGDOM" -"1570275328","1570308095","BG","BGR","BULGARIA" -"1570308096","1570340863","CZ","CZE","CZECH REPUBLIC" -"1570340864","1570406399","RU","RUS","RUSSIAN FEDERATION" -"1570406400","1570439167","PL","POL","POLAND" -"1570439168","1570471935","TR","TUR","TURKEY" -"1570471936","1570504703","BG","BGR","BULGARIA" -"1570504704","1570570239","ES","ESP","SPAIN" -"1570570240","1570572287","NL","NLD","NETHERLANDS" -"1570572288","1570574335","UA","UKR","UKRAINE" -"1570574336","1570576383","RU","RUS","RUSSIAN FEDERATION" -"1570576384","1570578431","UA","UKR","UKRAINE" -"1570578432","1570580479","CH","CHE","SWITZERLAND" -"1570580480","1570582527","RU","RUS","RUSSIAN FEDERATION" -"1570582528","1570584575","DE","DEU","GERMANY" -"1570584576","1570586623","RU","RUS","RUSSIAN FEDERATION" -"1570586624","1570590719","PL","POL","POLAND" -"1570590720","1570592767","IL","ISR","ISRAEL" -"1570592768","1570596863","PL","POL","POLAND" -"1570596864","1570598911","UA","UKR","UKRAINE" -"1570598912","1570600959","PL","POL","POLAND" -"1570600960","1570603007","RU","RUS","RUSSIAN FEDERATION" -"1570605056","1570607103","NL","NLD","NETHERLANDS" -"1570607104","1570609151","RU","RUS","RUSSIAN FEDERATION" -"1570609152","1570611199","PL","POL","POLAND" -"1570611200","1570619391","RU","RUS","RUSSIAN FEDERATION" -"1570619392","1570621439","BA","BIH","BOSNIA AND HERZEGOVINA" -"1570621440","1570625535","RU","RUS","RUSSIAN FEDERATION" -"1570625536","1570627583","GB","GBR","UNITED KINGDOM" -"1570627584","1570635775","RU","RUS","RUSSIAN FEDERATION" -"1570635776","1570652159","FR","FRA","FRANCE" -"1570652160","1570652543","SE","SWE","SWEDEN" -"1570652544","1570652551","FR","FRA","FRANCE" -"1570652552","1570652891","SE","SWE","SWEDEN" -"1570652892","1570652895","DE","DEU","GERMANY" -"1570652896","1570655631","SE","SWE","SWEDEN" -"1570655632","1570655635","DE","DEU","GERMANY" -"1570655636","1570655999","SE","SWE","SWEDEN" -"1570656000","1570656003","DE","DEU","GERMANY" -"1570656004","1570656119","SE","SWE","SWEDEN" -"1570656120","1570656127","GB","GBR","UNITED KINGDOM" -"1570656128","1570660351","SE","SWE","SWEDEN" -"1570660352","1570660359","FI","FIN","FINLAND" -"1570660360","1570660367","SE","SWE","SWEDEN" -"1570660368","1570660383","FR","FRA","FRANCE" -"1570660384","1570660387","RU","RUS","RUSSIAN FEDERATION" -"1570660388","1570660543","SE","SWE","SWEDEN" -"1570660544","1570660575","FI","FIN","FINLAND" -"1570660576","1570660599","SE","SWE","SWEDEN" -"1570660600","1570660607","FI","FIN","FINLAND" -"1570660608","1570660615","SE","SWE","SWEDEN" -"1570660616","1570660619","RU","RUS","RUSSIAN FEDERATION" -"1570660620","1570660623","SE","SWE","SWEDEN" -"1570660624","1570660639","FR","FRA","FRANCE" -"1570660640","1570660863","SE","SWE","SWEDEN" -"1570660864","1570661375","NO","NOR","NORWAY" -"1570661376","1570663423","SE","SWE","SWEDEN" -"1570663424","1570663679","US","USA","UNITED STATES" -"1570663680","1570663935","GB","GBR","UNITED KINGDOM" -"1570663936","1570665343","SE","SWE","SWEDEN" -"1570665344","1570665351","GB","GBR","UNITED KINGDOM" -"1570665352","1570665407","SE","SWE","SWEDEN" -"1570665408","1570665423","GB","GBR","UNITED KINGDOM" -"1570665424","1570665439","SE","SWE","SWEDEN" -"1570665440","1570665455","FR","FRA","FRANCE" -"1570665456","1570665919","SE","SWE","SWEDEN" -"1570665920","1570665935","GB","GBR","UNITED KINGDOM" -"1570665936","1570665951","IT","ITA","ITALY" -"1570665952","1570665967","FR","FRA","FRANCE" -"1570665968","1570666175","SE","SWE","SWEDEN" -"1570666176","1570666191","GB","GBR","UNITED KINGDOM" -"1570666192","1570666223","FR","FRA","FRANCE" -"1570666224","1570666367","SE","SWE","SWEDEN" -"1570666368","1570666383","FR","FRA","FRANCE" -"1570666384","1570666431","SE","SWE","SWEDEN" -"1570666432","1570666447","GB","GBR","UNITED KINGDOM" -"1570666448","1570666463","DE","DEU","GERMANY" -"1570666464","1570666495","SE","SWE","SWEDEN" -"1570666496","1570666499","ES","ESP","SPAIN" -"1570666500","1570666511","SE","SWE","SWEDEN" -"1570666512","1570666519","NO","NOR","NORWAY" -"1570666520","1570666687","SE","SWE","SWEDEN" -"1570666688","1570666703","GB","GBR","UNITED KINGDOM" -"1570666704","1570666719","ES","ESP","SPAIN" -"1570666720","1570666735","FR","FRA","FRANCE" -"1570666736","1570666751","SE","SWE","SWEDEN" -"1570666752","1570666755","ES","ESP","SPAIN" -"1570666756","1570666759","SE","SWE","SWEDEN" -"1570666760","1570666767","GB","GBR","UNITED KINGDOM" -"1570666768","1570666943","SE","SWE","SWEDEN" -"1570666944","1570666959","FR","FRA","FRANCE" -"1570666960","1570666975","SE","SWE","SWEDEN" -"1570666976","1570666991","FR","FRA","FRANCE" -"1570666992","1570667007","SE","SWE","SWEDEN" -"1570667008","1570667011","ES","ESP","SPAIN" -"1570667012","1570667015","SE","SWE","SWEDEN" -"1570667016","1570667023","GB","GBR","UNITED KINGDOM" -"1570667024","1570667039","ES","ESP","SPAIN" -"1570667040","1570667199","SE","SWE","SWEDEN" -"1570667200","1570667215","FR","FRA","FRANCE" -"1570667216","1570667231","SE","SWE","SWEDEN" -"1570667232","1570667247","FR","FRA","FRANCE" -"1570667248","1570667263","SE","SWE","SWEDEN" -"1570667264","1570667267","ES","ESP","SPAIN" -"1570667268","1570667279","SE","SWE","SWEDEN" -"1570667280","1570667295","ES","ESP","SPAIN" -"1570667296","1570667455","SE","SWE","SWEDEN" -"1570667456","1570667471","FR","FRA","FRANCE" -"1570667472","1570667487","SE","SWE","SWEDEN" -"1570667488","1570667503","FR","FRA","FRANCE" -"1570667504","1570667519","SE","SWE","SWEDEN" -"1570667520","1570667523","NL","NLD","NETHERLANDS" -"1570667524","1570667527","IT","ITA","ITALY" -"1570667528","1570667531","NO","NOR","NORWAY" -"1570667532","1570667535","GB","GBR","UNITED KINGDOM" -"1570667536","1570667711","SE","SWE","SWEDEN" -"1570667712","1570667727","FR","FRA","FRANCE" -"1570667728","1570667743","NL","NLD","NETHERLANDS" -"1570667744","1570667775","SE","SWE","SWEDEN" -"1570667776","1570667779","NL","NLD","NETHERLANDS" -"1570667780","1570667791","SE","SWE","SWEDEN" -"1570667792","1570667807","ES","ESP","SPAIN" -"1570667808","1570667839","SE","SWE","SWEDEN" -"1570667840","1570667903","FR","FRA","FRANCE" -"1570667904","1570667967","SE","SWE","SWEDEN" -"1570667968","1570667983","FR","FRA","FRANCE" -"1570667984","1570668031","SE","SWE","SWEDEN" -"1570668032","1570668035","NL","NLD","NETHERLANDS" -"1570668036","1570668287","SE","SWE","SWEDEN" -"1570668288","1570668291","NL","NLD","NETHERLANDS" -"1570668292","1570668351","SE","SWE","SWEDEN" -"1570668352","1570668415","NO","NOR","NORWAY" -"1570668416","1570668543","SE","SWE","SWEDEN" -"1570668544","1570701311","RU","RUS","RUSSIAN FEDERATION" -"1570701312","1570717695","PL","POL","POLAND" -"1570717696","1570725887","HR","HRV","CROATIA" -"1570725888","1570734079","DE","DEU","GERMANY" -"1570734080","1570750463","PL","POL","POLAND" -"1570750464","1570752511","NO","NOR","NORWAY" -"1570752512","1570754559","GB","GBR","UNITED KINGDOM" -"1570754560","1570756607","ES","ESP","SPAIN" -"1570756608","1570764799","RU","RUS","RUSSIAN FEDERATION" -"1570764800","1570766847","DE","DEU","GERMANY" -"1570766848","1571291135","DK","DNK","DENMARK" -"1571291136","1571422207","RO","ROM","ROMANIA" -"1571422208","1571553279","CZ","CZE","CZECH REPUBLIC" -"1571553280","1571684351","IL","ISR","ISRAEL" -"1571684352","1571686399","ES","ESP","SPAIN" -"1571686400","1571688447","GB","GBR","UNITED KINGDOM" -"1571688448","1571690495","CH","CHE","SWITZERLAND" -"1571690496","1571692543","GE","GEO","GEORGIA" -"1571692544","1571694591","FR","FRA","FRANCE" -"1571694592","1571696639","LU","LUX","LUXEMBOURG" -"1571696640","1571700735","RU","RUS","RUSSIAN FEDERATION" -"1571700736","1571702783","IT","ITA","ITALY" -"1571702784","1571704831","RU","RUS","RUSSIAN FEDERATION" -"1571704832","1571706879","GB","GBR","UNITED KINGDOM" -"1571706880","1571707647","NL","NLD","NETHERLANDS" -"1571707648","1571707903","BZ","BLZ","BELIZE" -"1571707904","1571708927","NL","NLD","NETHERLANDS" -"1571708928","1571709439","GB","GBR","UNITED KINGDOM" -"1571709440","1571709567","DE","DEU","GERMANY" -"1571709568","1571709695","GB","GBR","UNITED KINGDOM" -"1571709696","1571709823","FR","FRA","FRANCE" -"1571709824","1571709951","GB","GBR","UNITED KINGDOM" -"1571709952","1571710079","NL","NLD","NETHERLANDS" -"1571710080","1571710207","GB","GBR","UNITED KINGDOM" -"1571710208","1571710335","ES","ESP","SPAIN" -"1571710336","1571710463","GB","GBR","UNITED KINGDOM" -"1571710464","1571710591","IT","ITA","ITALY" -"1571710592","1571710975","GB","GBR","UNITED KINGDOM" -"1571710976","1571713023","NL","NLD","NETHERLANDS" -"1571713024","1571715071","RU","RUS","RUSSIAN FEDERATION" -"1571715072","1571717119","GR","GRC","GREECE" -"1571717120","1571719167","RU","RUS","RUSSIAN FEDERATION" -"1571719168","1571721215","GB","GBR","UNITED KINGDOM" -"1571721216","1571723263","FR","FRA","FRANCE" -"1571723264","1571723775","GB","GBR","UNITED KINGDOM" -"1571723776","1571724031","SE","SWE","SWEDEN" -"1571724032","1571725311","GB","GBR","UNITED KINGDOM" -"1571725312","1571727359","RO","ROM","ROMANIA" -"1571727360","1571729407","IE","IRL","IRELAND" -"1571729408","1571731455","SK","SVK","SLOVAKIA" -"1571731456","1571732479","CH","CHE","SWITZERLAND" -"1571732480","1571732495","LI","LIE","LIECHTENSTEIN" -"1571732496","1571733503","CH","CHE","SWITZERLAND" -"1571733504","1571735551","FI","FIN","FINLAND" -"1571735552","1571737599","NL","NLD","NETHERLANDS" -"1571737600","1571737855","GB","GBR","UNITED KINGDOM" -"1571738112","1571738367","NL","NLD","NETHERLANDS" -"1571739648","1571741695","GB","GBR","UNITED KINGDOM" -"1571741696","1571743743","RU","RUS","RUSSIAN FEDERATION" -"1571743744","1571745791","GB","GBR","UNITED KINGDOM" -"1571745792","1571747839","RU","RUS","RUSSIAN FEDERATION" -"1571747840","1571749887","GB","GBR","UNITED KINGDOM" -"1571749888","1571758079","RU","RUS","RUSSIAN FEDERATION" -"1571758080","1571766271","IL","ISR","ISRAEL" -"1571766272","1571786751","PL","POL","POLAND" -"1571790848","1571794943","PL","POL","POLAND" -"1571794944","1571799039","NL","NLD","NETHERLANDS" -"1571799040","1571815423","UA","UKR","UKRAINE" -"1571815424","1571831807","FR","FRA","FRANCE" -"1571831808","1571838079","DK","DNK","DENMARK" -"1571838080","1571838111","CY","CYP","CYPRUS" -"1571838112","1571848191","DK","DNK","DENMARK" -"1571848192","1571864575","RU","RUS","RUSSIAN FEDERATION" -"1571864576","1571880959","PL","POL","POLAND" -"1571880960","1571897343","RU","RUS","RUSSIAN FEDERATION" -"1571897344","1571913727","NO","NOR","NORWAY" -"1571913728","1571930111","GE","GEO","GEORGIA" -"1571930112","1571946495","LV","LVA","LATVIA" -"1571946496","1571962879","SA","SAU","SAUDI ARABIA" -"1571962880","1571979263","RU","RUS","RUSSIAN FEDERATION" -"1571979264","1571995647","DK","DNK","DENMARK" -"1571995648","1572012031","UA","UKR","UKRAINE" -"1572012032","1572020223","NO","NOR","NORWAY" -"1572020224","1572028415","SE","SWE","SWEDEN" -"1572028416","1572044799","RU","RUS","RUSSIAN FEDERATION" -"1572044800","1572061183","IT","ITA","ITALY" -"1572061184","1572077567","PL","POL","POLAND" -"1572077568","1572093951","RU","RUS","RUSSIAN FEDERATION" -"1572093952","1572110335","BG","BGR","BULGARIA" -"1572110336","1572126719","RU","RUS","RUSSIAN FEDERATION" -"1572126720","1572143103","UA","UKR","UKRAINE" -"1572143104","1572159487","DE","DEU","GERMANY" -"1572159488","1572175871","CZ","CZE","CZECH REPUBLIC" -"1572175872","1572192255","PL","POL","POLAND" -"1572192256","1572225023","RU","RUS","RUSSIAN FEDERATION" -"1572225024","1572241407","TR","TUR","TURKEY" -"1572241408","1572257791","SE","SWE","SWEDEN" -"1572257792","1572274175","FR","FRA","FRANCE" -"1572274176","1572282111","US","USA","UNITED STATES" -"1572282112","1572282367","PT","PRT","PORTUGAL" -"1572282368","1572290559","US","USA","UNITED STATES" -"1572290560","1572306943","RU","RUS","RUSSIAN FEDERATION" -"1572306944","1572323327","BG","BGR","BULGARIA" -"1572323328","1572339711","UA","UKR","UKRAINE" -"1572339712","1572343807","PS","PSE","PALESTINIAN TERRITORY, OCCUPIED" -"1572343808","1572347903","CH","CHE","SWITZERLAND" -"1572347904","1572351999","FR","FRA","FRANCE" -"1572352000","1572356095","DE","DEU","GERMANY" -"1572356096","1572360191","SK","SVK","SLOVAKIA" -"1572360192","1572362751","CS","SCG","SERBIA AND MONTENEGRO" -"1572362752","1572364287","RS","SRB","SERBIA" -"1572364288","1572368383","NL","NLD","NETHERLANDS" -"1572368384","1572372479","NO","NOR","NORWAY" -"1572372480","1572376575","DE","DEU","GERMANY" -"1572376576","1572380671","TR","TUR","TURKEY" -"1572380672","1572384767","RU","RUS","RUSSIAN FEDERATION" -"1572384768","1572388863","DE","DEU","GERMANY" -"1572388864","1572392959","DK","DNK","DENMARK" -"1572392960","1572397055","US","USA","UNITED STATES" -"1572397056","1572401151","AZ","AZE","AZERBAIJAN" -"1572401152","1572405247","GB","GBR","UNITED KINGDOM" -"1572405248","1572409343","CZ","CZE","CZECH REPUBLIC" -"1572409344","1572413439","RU","RUS","RUSSIAN FEDERATION" -"1572413440","1572417535","AM","ARM","ARMENIA" -"1572417536","1572421631","CZ","CZE","CZECH REPUBLIC" -"1572421632","1572425727","KZ","KAZ","KAZAKHSTAN" -"1572425728","1572429823","LB","LBN","LEBANON" -"1572429824","1572433919","CZ","CZE","CZECH REPUBLIC" -"1572433920","1572438015","IT","ITA","ITALY" -"1572438016","1572442111","AT","AUT","AUSTRIA" -"1572442112","1572446207","RU","RUS","RUSSIAN FEDERATION" -"1572446208","1572450303","NO","NOR","NORWAY" -"1572450304","1572458495","RU","RUS","RUSSIAN FEDERATION" -"1572458496","1572462591","UA","UKR","UKRAINE" -"1572462592","1572466687","LB","LBN","LEBANON" -"1572466688","1572470783","EE","EST","ESTONIA" -"1572470784","1572474879","DE","DEU","GERMANY" -"1572474880","1572483071","GB","GBR","UNITED KINGDOM" -"1572483072","1572487167","RU","RUS","RUSSIAN FEDERATION" -"1572487168","1572490751","RS","SRB","SERBIA" -"1572490752","1572491007","HR","HRV","CROATIA" -"1572491008","1572491263","LU","LUX","LUXEMBOURG" -"1572491264","1572495359","IT","ITA","ITALY" -"1572495360","1572499455","RU","RUS","RUSSIAN FEDERATION" -"1572499456","1572503551","TR","TUR","TURKEY" -"1572503552","1572504063","IT","ITA","ITALY" -"1572504064","1572504319","US","USA","UNITED STATES" -"1572504320","1572504575","DE","DEU","GERMANY" -"1572504576","1572504703","RO","ROM","ROMANIA" -"1572504704","1572504831","TR","TUR","TURKEY" -"1572504832","1572507647","IT","ITA","ITALY" -"1572507648","1572511743","GB","GBR","UNITED KINGDOM" -"1572511744","1572515839","DE","DEU","GERMANY" -"1572515840","1572517759","NL","NLD","NETHERLANDS" -"1572517760","1572517775","CA","CAN","CANADA" -"1572517776","1572519935","NL","NLD","NETHERLANDS" -"1572519936","1572524031","DE","DEU","GERMANY" -"1572524032","1572528127","GE","GEO","GEORGIA" -"1572528128","1572532223","RU","RUS","RUSSIAN FEDERATION" -"1572532224","1572536319","IT","ITA","ITALY" -"1572536320","1572538367","GB","GBR","UNITED KINGDOM" -"1572538368","1572540415","NL","NLD","NETHERLANDS" -"1572540416","1572541439","GB","GBR","UNITED KINGDOM" -"1572541440","1572541695","FR","FRA","FRANCE" -"1572541696","1572541951","GB","GBR","UNITED KINGDOM" -"1572541952","1572542207","DE","DEU","GERMANY" -"1572542208","1572542463","FR","FRA","FRANCE" -"1572542464","1572544511","IT","ITA","ITALY" -"1572544512","1572546559","HR","HRV","CROATIA" -"1572546560","1572548607","FR","FRA","FRANCE" -"1572548608","1572550655","GB","GBR","UNITED KINGDOM" -"1572550656","1572552703","DE","DEU","GERMANY" -"1572552704","1572554751","TR","TUR","TURKEY" -"1572554752","1572556799","CH","CHE","SWITZERLAND" -"1572556800","1572558847","NO","NOR","NORWAY" -"1572558848","1572560895","IT","ITA","ITALY" -"1572560896","1572562943","RU","RUS","RUSSIAN FEDERATION" -"1572562944","1572564991","CZ","CZE","CZECH REPUBLIC" -"1572564992","1572567039","DE","DEU","GERMANY" -"1572567040","1572569087","RU","RUS","RUSSIAN FEDERATION" -"1572569088","1572571135","NL","NLD","NETHERLANDS" -"1572571136","1572573183","RO","ROM","ROMANIA" -"1572573184","1572575231","GB","GBR","UNITED KINGDOM" -"1572575232","1572577279","RU","RUS","RUSSIAN FEDERATION" -"1572577280","1572579327","AM","ARM","ARMENIA" -"1572579328","1572581375","GB","GBR","UNITED KINGDOM" -"1572581376","1572585471","RU","RUS","RUSSIAN FEDERATION" -"1572585472","1572587519","CH","CHE","SWITZERLAND" -"1572587520","1572589567","TR","TUR","TURKEY" -"1572589568","1572591615","CH","CHE","SWITZERLAND" -"1572591616","1572593663","NL","NLD","NETHERLANDS" -"1572593664","1572595711","GB","GBR","UNITED KINGDOM" -"1572595712","1572597759","DE","DEU","GERMANY" -"1572597760","1572599807","RS","SRB","SERBIA" -"1572599808","1572601855","DE","DEU","GERMANY" -"1572601856","1572603903","SE","SWE","SWEDEN" -"1572603904","1572605951","GE","GEO","GEORGIA" -"1572605952","1572607999","RU","RUS","RUSSIAN FEDERATION" -"1572608000","1572610047","DE","DEU","GERMANY" -"1572610048","1572612095","UA","UKR","UKRAINE" -"1572612096","1572614143","RU","RUS","RUSSIAN FEDERATION" -"1572614144","1572616191","ES","ESP","SPAIN" -"1572616192","1572618239","CH","CHE","SWITZERLAND" -"1572618240","1572620287","RS","SRB","SERBIA" -"1572620288","1572620415","CH","CHE","SWITZERLAND" -"1572620416","1572620431","CZ","CZE","CZECH REPUBLIC" -"1572620432","1572620559","CH","CHE","SWITZERLAND" -"1572620560","1572620567","NL","NLD","NETHERLANDS" -"1572620568","1572622335","CH","CHE","SWITZERLAND" -"1572622336","1572624383","RU","RUS","RUSSIAN FEDERATION" -"1572624384","1572626431","NO","NOR","NORWAY" -"1572626432","1572628479","RU","RUS","RUSSIAN FEDERATION" -"1572628480","1572630527","DE","DEU","GERMANY" -"1572630528","1572632575","IT","ITA","ITALY" -"1572632576","1572634623","RU","RUS","RUSSIAN FEDERATION" -"1572634624","1572636671","US","USA","UNITED STATES" -"1572636672","1572638719","ES","ESP","SPAIN" -"1572638720","1572640767","FR","FRA","FRANCE" -"1572640768","1572642815","RU","RUS","RUSSIAN FEDERATION" -"1572642816","1572644863","UA","UKR","UKRAINE" -"1572644864","1572646911","FR","FRA","FRANCE" -"1572646912","1572648959","GB","GBR","UNITED KINGDOM" -"1572648960","1572651007","RU","RUS","RUSSIAN FEDERATION" -"1572651008","1572653055","BH","BHR","BAHRAIN" -"1572653056","1572657151","RU","RUS","RUSSIAN FEDERATION" -"1572657152","1572659199","DE","DEU","GERMANY" -"1572659200","1572661247","IT","ITA","ITALY" -"1572661248","1572663295","NO","NOR","NORWAY" -"1572663296","1572665343","DE","DEU","GERMANY" -"1572665344","1572667391","NL","NLD","NETHERLANDS" -"1572667392","1572669439","GB","GBR","UNITED KINGDOM" -"1572669440","1572673535","RU","RUS","RUSSIAN FEDERATION" -"1572673536","1572675583","AT","AUT","AUSTRIA" -"1572675584","1572677631","ES","ESP","SPAIN" -"1572677632","1572681727","RU","RUS","RUSSIAN FEDERATION" -"1572681728","1572681983","DE","DEU","GERMANY" -"1572681984","1572682239","RU","RUS","RUSSIAN FEDERATION" -"1572682240","1572682751","DE","DEU","GERMANY" -"1572682752","1572683775","RU","RUS","RUSSIAN FEDERATION" -"1572683776","1572685823","CH","CHE","SWITZERLAND" -"1572685824","1572689919","RU","RUS","RUSSIAN FEDERATION" -"1572689920","1572691967","ES","ESP","SPAIN" -"1572691968","1572694015","SA","SAU","SAUDI ARABIA" -"1572694016","1572694214","GB","GBR","UNITED KINGDOM" -"1572694215","1572694217","US","USA","UNITED STATES" -"1572694218","1572694655","GB","GBR","UNITED KINGDOM" -"1572694656","1572694783","SG","SGP","SINGAPORE" -"1572694784","1572696063","GB","GBR","UNITED KINGDOM" -"1572696064","1572698111","HU","HUN","HUNGARY" -"1572698112","1572700159","RU","RUS","RUSSIAN FEDERATION" -"1572700160","1572702207","NL","NLD","NETHERLANDS" -"1572702208","1572704255","IT","ITA","ITALY" -"1572704256","1572706303","RU","RUS","RUSSIAN FEDERATION" -"1572706304","1572708351","DE","DEU","GERMANY" -"1572708352","1572710399","GB","GBR","UNITED KINGDOM" -"1572710400","1572712447","DE","DEU","GERMANY" -"1572712448","1572714495","ES","ESP","SPAIN" -"1572714496","1572716543","IT","ITA","ITALY" -"1572716544","1572718591","SA","SAU","SAUDI ARABIA" -"1572718592","1572720639","RU","RUS","RUSSIAN FEDERATION" -"1572720640","1572722687","IT","ITA","ITALY" -"1572722688","1572726783","RU","RUS","RUSSIAN FEDERATION" -"1572726784","1572728831","CH","CHE","SWITZERLAND" -"1572728832","1572730879","SE","SWE","SWEDEN" -"1572730880","1572732927","RU","RUS","RUSSIAN FEDERATION" -"1572732928","1572734975","HU","HUN","HUNGARY" -"1572734976","1572739071","RU","RUS","RUSSIAN FEDERATION" -"1572739072","1572741119","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1572741120","1572743167","FI","FIN","FINLAND" -"1572743168","1572745215","UA","UKR","UKRAINE" -"1572745216","1572749311","CZ","CZE","CZECH REPUBLIC" -"1572749312","1572751359","DE","DEU","GERMANY" -"1572751360","1572753407","CH","CHE","SWITZERLAND" -"1572753408","1572755455","NO","NOR","NORWAY" -"1572755456","1572757503","DE","DEU","GERMANY" -"1572757504","1572759551","FI","FIN","FINLAND" -"1572759552","1572761599","RU","RUS","RUSSIAN FEDERATION" -"1572761600","1572763647","GB","GBR","UNITED KINGDOM" -"1572763648","1572765695","TR","TUR","TURKEY" -"1572765696","1572767743","CZ","CZE","CZECH REPUBLIC" -"1572767744","1572769740","NL","NLD","NETHERLANDS" -"1572769741","1572769790","KY","CYM","CAYMAN ISLANDS" -"1572769792","1572770047","RO","ROM","ROMANIA" -"1572770048","1572770111","RS","SRB","SERBIA" -"1572770112","1572771839","RO","ROM","ROMANIA" -"1572771840","1572773887","ES","ESP","SPAIN" -"1572773888","1572775935","RS","SRB","SERBIA" -"1572775936","1572777983","GB","GBR","UNITED KINGDOM" -"1572777984","1572780031","UA","UKR","UKRAINE" -"1572780032","1572782079","NL","NLD","NETHERLANDS" -"1572782080","1572784127","SE","SWE","SWEDEN" -"1572784128","1572786175","RU","RUS","RUSSIAN FEDERATION" -"1572786176","1572788223","FR","FRA","FRANCE" -"1572788224","1572790271","TR","TUR","TURKEY" -"1572790272","1572792319","RU","RUS","RUSSIAN FEDERATION" -"1572792320","1572794367","DE","DEU","GERMANY" -"1572794368","1572796415","RU","RUS","RUSSIAN FEDERATION" -"1572796416","1572798463","DE","DEU","GERMANY" -"1572798464","1572800511","NL","NLD","NETHERLANDS" -"1572800512","1572804607","RU","RUS","RUSSIAN FEDERATION" -"1572804608","1572808703","GB","GBR","UNITED KINGDOM" -"1572808704","1572810751","FR","FRA","FRANCE" -"1572810752","1572812799","DE","DEU","GERMANY" -"1572812800","1572814847","RU","RUS","RUSSIAN FEDERATION" -"1572814848","1572816895","KW","KWT","KUWAIT" -"1572816896","1572818943","RU","RUS","RUSSIAN FEDERATION" -"1572818944","1572820991","FR","FRA","FRANCE" -"1572820992","1572823039","GB","GBR","UNITED KINGDOM" -"1572823040","1572825087","BY","BLR","BELARUS" -"1572825088","1572827135","RU","RUS","RUSSIAN FEDERATION" -"1572827136","1572829183","NO","NOR","NORWAY" -"1572829184","1572831231","FI","FIN","FINLAND" -"1572831232","1572833279","BH","BHR","BAHRAIN" -"1572833280","1572835327","ES","ESP","SPAIN" -"1572835328","1572837375","IE","IRL","IRELAND" -"1572837376","1572839423","AM","ARM","ARMENIA" -"1572839424","1572841471","DE","DEU","GERMANY" -"1572842240","1572842495","LV","LVA","LATVIA" -"1572842752","1572843007","NL","NLD","NETHERLANDS" -"1572843520","1572845567","JO","JOR","JORDAN" -"1572845568","1572847615","FR","FRA","FRANCE" -"1572847616","1572849663","GI","GIB","GIBRALTAR" -"1572849664","1572851711","GB","GBR","UNITED KINGDOM" -"1572851712","1572853759","DE","DEU","GERMANY" -"1572853760","1572854015","BE","BEL","BELGIUM" -"1572854272","1572854527","BE","BEL","BELGIUM" -"1572855552","1572855807","LU","LUX","LUXEMBOURG" -"1572855808","1572857855","KZ","KAZ","KAZAKHSTAN" -"1572857856","1572859903","SE","SWE","SWEDEN" -"1572859904","1572861951","IT","ITA","ITALY" -"1572861952","1572863999","CH","CHE","SWITZERLAND" -"1572864000","1577058303","DE","DEU","GERMANY" -"1577058304","1578106879","GB","GBR","UNITED KINGDOM" -"1578106880","1578172415","DE","DEU","GERMANY" -"1578172416","1578237951","MT","MLT","MALTA" -"1578237952","1578303487","DK","DNK","DENMARK" -"1578303488","1578369023","RU","RUS","RUSSIAN FEDERATION" -"1578369024","1578434559","AZ","AZE","AZERBAIJAN" -"1578434560","1578500095","HU","HUN","HUNGARY" -"1578500096","1578565631","FI","FIN","FINLAND" -"1578565632","1578582015","FR","FRA","FRANCE" -"1578582016","1578584575","IT","ITA","ITALY" -"1578584576","1578586111","PT","PRT","PORTUGAL" -"1578586112","1578588159","ES","ESP","SPAIN" -"1578588160","1578590207","PL","POL","POLAND" -"1578590208","1578590271","FR","FRA","FRANCE" -"1578590272","1578590275","NL","NLD","NETHERLANDS" -"1578590276","1578590279","PT","PRT","PORTUGAL" -"1578590280","1578590283","PL","POL","POLAND" -"1578590284","1578590287","GB","GBR","UNITED KINGDOM" -"1578590288","1578590303","PL","POL","POLAND" -"1578590304","1578590311","IT","ITA","ITALY" -"1578590312","1578590319","FR","FRA","FRANCE" -"1578590320","1578590335","CH","CHE","SWITZERLAND" -"1578590336","1578590343","ES","ESP","SPAIN" -"1578590344","1578590351","GB","GBR","UNITED KINGDOM" -"1578590352","1578590415","FR","FRA","FRANCE" -"1578590416","1578590431","PL","POL","POLAND" -"1578590432","1578590447","BE","BEL","BELGIUM" -"1578590448","1578590471","FR","FRA","FRANCE" -"1578590472","1578590479","DE","DEU","GERMANY" -"1578590480","1578590495","IT","ITA","ITALY" -"1578590496","1578590527","PL","POL","POLAND" -"1578590528","1578590543","FR","FRA","FRANCE" -"1578590544","1578590559","GB","GBR","UNITED KINGDOM" -"1578590560","1578590575","ES","ESP","SPAIN" -"1578590576","1578590603","FR","FRA","FRANCE" -"1578590604","1578590607","PL","POL","POLAND" -"1578590608","1578590639","FR","FRA","FRANCE" -"1578590640","1578590647","CZ","CZE","CZECH REPUBLIC" -"1578590648","1578590655","BE","BEL","BELGIUM" -"1578590656","1578590671","GB","GBR","UNITED KINGDOM" -"1578590672","1578590687","PL","POL","POLAND" -"1578590688","1578590703","FR","FRA","FRANCE" -"1578590704","1578590719","PL","POL","POLAND" -"1578590720","1578590799","FR","FRA","FRANCE" -"1578590800","1578590831","GB","GBR","UNITED KINGDOM" -"1578590832","1578590847","ES","ESP","SPAIN" -"1578590848","1578590879","FR","FRA","FRANCE" -"1578590880","1578590911","PL","POL","POLAND" -"1578590912","1578590927","ES","ESP","SPAIN" -"1578590928","1578590935","DE","DEU","GERMANY" -"1578590936","1578590943","ES","ESP","SPAIN" -"1578590944","1578590959","CH","CHE","SWITZERLAND" -"1578590960","1578590975","NL","NLD","NETHERLANDS" -"1578590976","1578590991","GB","GBR","UNITED KINGDOM" -"1578590992","1578590999","IT","ITA","ITALY" -"1578591000","1578591007","FR","FRA","FRANCE" -"1578591008","1578591011","GB","GBR","UNITED KINGDOM" -"1578591012","1578591023","FR","FRA","FRANCE" -"1578591024","1578591039","PL","POL","POLAND" -"1578591040","1578591055","NL","NLD","NETHERLANDS" -"1578591056","1578591087","FR","FRA","FRANCE" -"1578591088","1578591103","ES","ESP","SPAIN" -"1578591104","1578591119","GB","GBR","UNITED KINGDOM" -"1578591120","1578591127","FR","FRA","FRANCE" -"1578591128","1578591135","DE","DEU","GERMANY" -"1578591136","1578591143","FR","FRA","FRANCE" -"1578591144","1578591151","GB","GBR","UNITED KINGDOM" -"1578591152","1578591183","FR","FRA","FRANCE" -"1578591184","1578591199","ES","ESP","SPAIN" -"1578591200","1578591247","FR","FRA","FRANCE" -"1578591248","1578591263","PL","POL","POLAND" -"1578591264","1578591279","FR","FRA","FRANCE" -"1578591280","1578591287","ES","ESP","SPAIN" -"1578591288","1578591291","DE","DEU","GERMANY" -"1578591292","1578591295","ES","ESP","SPAIN" -"1578591296","1578591327","FR","FRA","FRANCE" -"1578591328","1578591343","PL","POL","POLAND" -"1578591344","1578591359","ES","ESP","SPAIN" -"1578591360","1578591375","PL","POL","POLAND" -"1578591376","1578591391","FR","FRA","FRANCE" -"1578591392","1578591407","CH","CHE","SWITZERLAND" -"1578591408","1578591439","GB","GBR","UNITED KINGDOM" -"1578591440","1578591471","FR","FRA","FRANCE" -"1578591472","1578591487","PL","POL","POLAND" -"1578591488","1578591503","FR","FRA","FRANCE" -"1578591504","1578591519","CH","CHE","SWITZERLAND" -"1578591520","1578591551","ES","ESP","SPAIN" -"1578591552","1578591555","BE","BEL","BELGIUM" -"1578591556","1578591559","IT","ITA","ITALY" -"1578591560","1578591563","PL","POL","POLAND" -"1578591564","1578591583","FR","FRA","FRANCE" -"1578591584","1578591599","IT","ITA","ITALY" -"1578591600","1578591663","FR","FRA","FRANCE" -"1578591664","1578591695","PL","POL","POLAND" -"1578591696","1578591711","FR","FRA","FRANCE" -"1578591712","1578591743","PL","POL","POLAND" -"1578591744","1578591759","ES","ESP","SPAIN" -"1578591760","1578591791","FR","FRA","FRANCE" -"1578591792","1578591807","PL","POL","POLAND" -"1578591808","1578591823","DE","DEU","GERMANY" -"1578591824","1578591887","FR","FRA","FRANCE" -"1578591888","1578591919","PL","POL","POLAND" -"1578591920","1578591951","ES","ESP","SPAIN" -"1578591952","1578591967","PT","PRT","PORTUGAL" -"1578591968","1578591983","FR","FRA","FRANCE" -"1578591984","1578592031","PL","POL","POLAND" -"1578592032","1578592047","IT","ITA","ITALY" -"1578592048","1578592079","FR","FRA","FRANCE" -"1578592080","1578592095","PL","POL","POLAND" -"1578592096","1578592111","FR","FRA","FRANCE" -"1578592112","1578592127","GB","GBR","UNITED KINGDOM" -"1578592128","1578592143","DE","DEU","GERMANY" -"1578592144","1578592159","PL","POL","POLAND" -"1578592160","1578592163","FR","FRA","FRANCE" -"1578592164","1578592171","IT","ITA","ITALY" -"1578592172","1578592223","FR","FRA","FRANCE" -"1578592224","1578592255","ES","ESP","SPAIN" -"1578592256","1578592271","FR","FRA","FRANCE" -"1578592272","1578592279","NL","NLD","NETHERLANDS" -"1578592280","1578592283","BE","BEL","BELGIUM" -"1578592284","1578592287","FR","FRA","FRANCE" -"1578592288","1578592303","DE","DEU","GERMANY" -"1578592304","1578592319","FR","FRA","FRANCE" -"1578592320","1578592335","ES","ESP","SPAIN" -"1578592336","1578592351","FR","FRA","FRANCE" -"1578592352","1578592367","PL","POL","POLAND" -"1578592368","1578592383","FR","FRA","FRANCE" -"1578592384","1578592399","IE","IRL","IRELAND" -"1578592400","1578592415","GB","GBR","UNITED KINGDOM" -"1578592416","1578592423","IT","ITA","ITALY" -"1578592424","1578592431","IE","IRL","IRELAND" -"1578592432","1578592447","FR","FRA","FRANCE" -"1578592448","1578592495","PL","POL","POLAND" -"1578592496","1578592511","FR","FRA","FRANCE" -"1578592512","1578592543","GB","GBR","UNITED KINGDOM" -"1578592544","1578592559","FR","FRA","FRANCE" -"1578592560","1578592575","NL","NLD","NETHERLANDS" -"1578592576","1578592687","FR","FRA","FRANCE" -"1578592688","1578592719","ES","ESP","SPAIN" -"1578592720","1578592735","CH","CHE","SWITZERLAND" -"1578592736","1578592751","FR","FRA","FRANCE" -"1578592752","1578592799","DE","DEU","GERMANY" -"1578592800","1578592831","FR","FRA","FRANCE" -"1578592832","1578592847","PL","POL","POLAND" -"1578592848","1578592863","FR","FRA","FRANCE" -"1578592864","1578592879","PL","POL","POLAND" -"1578592880","1578592895","CH","CHE","SWITZERLAND" -"1578592896","1578592959","IT","ITA","ITALY" -"1578592960","1578593007","FR","FRA","FRANCE" -"1578593008","1578593279","DE","DEU","GERMANY" -"1578593280","1578593295","PL","POL","POLAND" -"1578593296","1578593323","FR","FRA","FRANCE" -"1578593324","1578593327","ES","ESP","SPAIN" -"1578593328","1578593343","IT","ITA","ITALY" -"1578593344","1578593359","FR","FRA","FRANCE" -"1578593360","1578593407","GB","GBR","UNITED KINGDOM" -"1578593408","1578593415","FR","FRA","FRANCE" -"1578593416","1578593423","PL","POL","POLAND" -"1578593424","1578593439","FR","FRA","FRANCE" -"1578593440","1578593455","PL","POL","POLAND" -"1578593456","1578593487","FR","FRA","FRANCE" -"1578593488","1578593495","ES","ESP","SPAIN" -"1578593496","1578593503","FR","FRA","FRANCE" -"1578593504","1578593535","PL","POL","POLAND" -"1578593536","1578593599","GB","GBR","UNITED KINGDOM" -"1578593600","1578593631","FR","FRA","FRANCE" -"1578593632","1578593647","NL","NLD","NETHERLANDS" -"1578593648","1578593663","DE","DEU","GERMANY" -"1578593664","1578593679","IT","ITA","ITALY" -"1578593680","1578593711","FR","FRA","FRANCE" -"1578593712","1578593727","CZ","CZE","CZECH REPUBLIC" -"1578593728","1578593759","FR","FRA","FRANCE" -"1578593760","1578593775","ES","ESP","SPAIN" -"1578593776","1578593791","NL","NLD","NETHERLANDS" -"1578593792","1578593823","FR","FRA","FRANCE" -"1578593824","1578593839","GB","GBR","UNITED KINGDOM" -"1578593840","1578593871","FR","FRA","FRANCE" -"1578593872","1578593875","ES","ESP","SPAIN" -"1578593876","1578593879","FR","FRA","FRANCE" -"1578593880","1578593887","DE","DEU","GERMANY" -"1578593888","1578593935","FR","FRA","FRANCE" -"1578593936","1578593951","PL","POL","POLAND" -"1578593952","1578593955","FR","FRA","FRANCE" -"1578593956","1578593967","PL","POL","POLAND" -"1578593968","1578593983","FR","FRA","FRANCE" -"1578593984","1578593999","PL","POL","POLAND" -"1578594000","1578594015","FR","FRA","FRANCE" -"1578594016","1578594031","BE","BEL","BELGIUM" -"1578594032","1578594047","PL","POL","POLAND" -"1578594048","1578594063","FR","FRA","FRANCE" -"1578594064","1578594079","PL","POL","POLAND" -"1578594080","1578594087","CH","CHE","SWITZERLAND" -"1578594088","1578594095","CZ","CZE","CZECH REPUBLIC" -"1578594096","1578594111","FR","FRA","FRANCE" -"1578594112","1578594127","PL","POL","POLAND" -"1578594128","1578594159","FR","FRA","FRANCE" -"1578594160","1578594175","DE","DEU","GERMANY" -"1578594176","1578594191","FR","FRA","FRANCE" -"1578594192","1578594207","IT","ITA","ITALY" -"1578594208","1578594223","PL","POL","POLAND" -"1578594224","1578594239","ES","ESP","SPAIN" -"1578594240","1578594255","FR","FRA","FRANCE" -"1578594256","1578594271","GB","GBR","UNITED KINGDOM" -"1578594272","1578594303","PL","POL","POLAND" -"1578594304","1578594319","FR","FRA","FRANCE" -"1578594320","1578594335","PL","POL","POLAND" -"1578594336","1578594375","FR","FRA","FRANCE" -"1578594376","1578594383","PT","PRT","PORTUGAL" -"1578594384","1578594399","FR","FRA","FRANCE" -"1578594400","1578594431","PL","POL","POLAND" -"1578594432","1578594447","FR","FRA","FRANCE" -"1578594448","1578594463","PL","POL","POLAND" -"1578594464","1578594479","FR","FRA","FRANCE" -"1578594480","1578594495","ES","ESP","SPAIN" -"1578594496","1578594511","FR","FRA","FRANCE" -"1578594512","1578594515","DE","DEU","GERMANY" -"1578594516","1578594519","FR","FRA","FRANCE" -"1578594520","1578594523","PL","POL","POLAND" -"1578594524","1578594559","FR","FRA","FRANCE" -"1578594560","1578594575","PL","POL","POLAND" -"1578594576","1578594607","ES","ESP","SPAIN" -"1578594608","1578594623","FR","FRA","FRANCE" -"1578594624","1578594687","DE","DEU","GERMANY" -"1578594688","1578594703","FR","FRA","FRANCE" -"1578594704","1578594707","BE","BEL","BELGIUM" -"1578594708","1578594711","DE","DEU","GERMANY" -"1578594712","1578594715","IT","ITA","ITALY" -"1578594716","1578594751","FR","FRA","FRANCE" -"1578594752","1578594767","ES","ESP","SPAIN" -"1578594768","1578594771","DE","DEU","GERMANY" -"1578594772","1578594775","FR","FRA","FRANCE" -"1578594776","1578594783","ES","ESP","SPAIN" -"1578594784","1578594799","FR","FRA","FRANCE" -"1578594800","1578594815","DE","DEU","GERMANY" -"1578594816","1578595039","FR","FRA","FRANCE" -"1578595040","1578595055","GB","GBR","UNITED KINGDOM" -"1578595056","1578595103","FR","FRA","FRANCE" -"1578595104","1578595119","GB","GBR","UNITED KINGDOM" -"1578595120","1578595127","FR","FRA","FRANCE" -"1578595128","1578595131","ES","ESP","SPAIN" -"1578595132","1578595151","FR","FRA","FRANCE" -"1578595152","1578595167","ES","ESP","SPAIN" -"1578595168","1578595199","FR","FRA","FRANCE" -"1578595200","1578595327","GB","GBR","UNITED KINGDOM" -"1578595328","1578595343","IT","ITA","ITALY" -"1578595344","1578595359","PL","POL","POLAND" -"1578595360","1578595455","FR","FRA","FRANCE" -"1578595456","1578595463","DE","DEU","GERMANY" -"1578595464","1578595487","FR","FRA","FRANCE" -"1578595488","1578595503","DE","DEU","GERMANY" -"1578595504","1578595519","PL","POL","POLAND" -"1578595520","1578595607","FR","FRA","FRANCE" -"1578595608","1578595611","GB","GBR","UNITED KINGDOM" -"1578595612","1578595615","ES","ESP","SPAIN" -"1578595616","1578595647","PL","POL","POLAND" -"1578595648","1578595679","FR","FRA","FRANCE" -"1578595680","1578595695","BE","BEL","BELGIUM" -"1578595696","1578595759","FR","FRA","FRANCE" -"1578595760","1578595775","GB","GBR","UNITED KINGDOM" -"1578595776","1578595807","CH","CHE","SWITZERLAND" -"1578595808","1578595983","FR","FRA","FRANCE" -"1578595984","1578595991","NL","NLD","NETHERLANDS" -"1578595992","1578596111","FR","FRA","FRANCE" -"1578596112","1578596127","ES","ESP","SPAIN" -"1578596128","1578596143","PL","POL","POLAND" -"1578596144","1578596159","GB","GBR","UNITED KINGDOM" -"1578596160","1578596191","PL","POL","POLAND" -"1578596192","1578596207","ES","ESP","SPAIN" -"1578596208","1578596255","FR","FRA","FRANCE" -"1578596256","1578596287","GB","GBR","UNITED KINGDOM" -"1578596288","1578596303","ES","ESP","SPAIN" -"1578596304","1578596335","FR","FRA","FRANCE" -"1578596336","1578596351","ES","ESP","SPAIN" -"1578596352","1578596863","GB","GBR","UNITED KINGDOM" -"1578596864","1578600191","FR","FRA","FRANCE" -"1578600192","1578600255","BE","BEL","BELGIUM" -"1578600256","1578600511","FR","FRA","FRANCE" -"1578600512","1578600575","BE","BEL","BELGIUM" -"1578600576","1578602495","FR","FRA","FRANCE" -"1578602496","1578604543","NL","NLD","NETHERLANDS" -"1578604544","1578606591","GB","GBR","UNITED KINGDOM" -"1578606592","1578608639","DE","DEU","GERMANY" -"1578608640","1578610687","CZ","CZE","CZECH REPUBLIC" -"1578610688","1578610943","FR","FRA","FRANCE" -"1578610944","1578610975","ES","ESP","SPAIN" -"1578610976","1578611039","PL","POL","POLAND" -"1578611040","1578611079","FR","FRA","FRANCE" -"1578611080","1578611087","NL","NLD","NETHERLANDS" -"1578611088","1578611103","DE","DEU","GERMANY" -"1578611104","1578611119","GB","GBR","UNITED KINGDOM" -"1578611120","1578611135","FR","FRA","FRANCE" -"1578611136","1578611151","CH","CHE","SWITZERLAND" -"1578611152","1578611167","FR","FRA","FRANCE" -"1578611168","1578611183","ES","ESP","SPAIN" -"1578611184","1578611199","FR","FRA","FRANCE" -"1578611200","1578611215","NL","NLD","NETHERLANDS" -"1578611216","1578611231","PL","POL","POLAND" -"1578611232","1578611247","FR","FRA","FRANCE" -"1578611248","1578611251","ES","ESP","SPAIN" -"1578611252","1578611255","IT","ITA","ITALY" -"1578611256","1578611263","PL","POL","POLAND" -"1578611264","1578611279","IT","ITA","ITALY" -"1578611280","1578611295","FR","FRA","FRANCE" -"1578611296","1578611327","PL","POL","POLAND" -"1578611328","1578611359","FR","FRA","FRANCE" -"1578611360","1578611375","CH","CHE","SWITZERLAND" -"1578611376","1578611391","FR","FRA","FRANCE" -"1578611392","1578611407","DE","DEU","GERMANY" -"1578611408","1578611423","IT","ITA","ITALY" -"1578611424","1578611439","FR","FRA","FRANCE" -"1578611440","1578611455","IT","ITA","ITALY" -"1578611456","1578611711","FR","FRA","FRANCE" -"1578611712","1578611775","CH","CHE","SWITZERLAND" -"1578611776","1578611791","ES","ESP","SPAIN" -"1578611792","1578611807","FR","FRA","FRANCE" -"1578611808","1578611839","CH","CHE","SWITZERLAND" -"1578611840","1578611919","FR","FRA","FRANCE" -"1578611920","1578611935","BE","BEL","BELGIUM" -"1578611936","1578611943","PL","POL","POLAND" -"1578611944","1578611947","FR","FRA","FRANCE" -"1578611948","1578611951","GB","GBR","UNITED KINGDOM" -"1578611952","1578611967","FR","FRA","FRANCE" -"1578611968","1578612159","GB","GBR","UNITED KINGDOM" -"1578612160","1578612223","PL","POL","POLAND" -"1578612224","1578612239","DE","DEU","GERMANY" -"1578612240","1578612255","FR","FRA","FRANCE" -"1578612256","1578612259","PL","POL","POLAND" -"1578612260","1578612263","IT","ITA","ITALY" -"1578612264","1578612271","FR","FRA","FRANCE" -"1578612272","1578612287","ES","ESP","SPAIN" -"1578612288","1578612303","BE","BEL","BELGIUM" -"1578612304","1578612319","DE","DEU","GERMANY" -"1578612320","1578612383","FR","FRA","FRANCE" -"1578612384","1578612415","PL","POL","POLAND" -"1578612416","1578612623","FR","FRA","FRANCE" -"1578612624","1578612639","CH","CHE","SWITZERLAND" -"1578612640","1578612671","PL","POL","POLAND" -"1578612672","1578612687","FR","FRA","FRANCE" -"1578612688","1578612703","DE","DEU","GERMANY" -"1578612704","1578612863","FR","FRA","FRANCE" -"1578612864","1578612895","NL","NLD","NETHERLANDS" -"1578612896","1578612911","PL","POL","POLAND" -"1578612912","1578612975","ES","ESP","SPAIN" -"1578612976","1578612991","FR","FRA","FRANCE" -"1578612992","1578613247","DE","DEU","GERMANY" -"1578613248","1578613503","FR","FRA","FRANCE" -"1578613504","1578613567","DE","DEU","GERMANY" -"1578613568","1578613631","PL","POL","POLAND" -"1578613632","1578613647","DE","DEU","GERMANY" -"1578613648","1578613679","FR","FRA","FRANCE" -"1578613680","1578613695","ES","ESP","SPAIN" -"1578613696","1578613711","NL","NLD","NETHERLANDS" -"1578613712","1578613719","BE","BEL","BELGIUM" -"1578613720","1578613723","ES","ESP","SPAIN" -"1578613724","1578613727","IT","ITA","ITALY" -"1578613728","1578613743","CZ","CZE","CZECH REPUBLIC" -"1578613744","1578613751","ES","ESP","SPAIN" -"1578613752","1578613759","NL","NLD","NETHERLANDS" -"1578613760","1578613791","DE","DEU","GERMANY" -"1578613792","1578613823","ES","ESP","SPAIN" -"1578613824","1578613887","IT","ITA","ITALY" -"1578613888","1578613951","ES","ESP","SPAIN" -"1578613952","1578614015","IE","IRL","IRELAND" -"1578614016","1578614031","FR","FRA","FRANCE" -"1578614032","1578614047","BE","BEL","BELGIUM" -"1578614048","1578614071","FR","FRA","FRANCE" -"1578614072","1578614079","ES","ESP","SPAIN" -"1578614080","1578614175","FR","FRA","FRANCE" -"1578614176","1578614191","ES","ESP","SPAIN" -"1578614192","1578614195","FR","FRA","FRANCE" -"1578614196","1578614207","GB","GBR","UNITED KINGDOM" -"1578614208","1578614271","PL","POL","POLAND" -"1578614272","1578614527","ES","ESP","SPAIN" -"1578614528","1578631167","FR","FRA","FRANCE" -"1578631168","1578663935","RO","ROM","ROMANIA" -"1578663936","1578762239","RU","RUS","RUSSIAN FEDERATION" -"1578762240","1578795007","BG","BGR","BULGARIA" -"1578795008","1578827775","RU","RUS","RUSSIAN FEDERATION" -"1578827776","1578860543","UA","UKR","UKRAINE" -"1578860544","1578893311","HU","HUN","HUNGARY" -"1578893312","1578991615","RU","RUS","RUSSIAN FEDERATION" -"1578991616","1579024383","KW","KWT","KUWAIT" -"1579024384","1579057151","GB","GBR","UNITED KINGDOM" -"1579057152","1579089919","LV","LVA","LATVIA" -"1579089920","1579090575","NL","NLD","NETHERLANDS" -"1579090576","1579090687","GB","GBR","UNITED KINGDOM" -"1579090688","1579090943","NL","NLD","NETHERLANDS" -"1579090944","1579091967","GB","GBR","UNITED KINGDOM" -"1579091968","1579092223","DE","DEU","GERMANY" -"1579092224","1579104511","GB","GBR","UNITED KINGDOM" -"1579104512","1579104767","NL","NLD","NETHERLANDS" -"1579104768","1579105023","GB","GBR","UNITED KINGDOM" -"1579105024","1579105151","NL","NLD","NETHERLANDS" -"1579105152","1579105279","GB","GBR","UNITED KINGDOM" -"1579105280","1579105343","NL","NLD","NETHERLANDS" -"1579105344","1579105535","GB","GBR","UNITED KINGDOM" -"1579105536","1579105599","NL","NLD","NETHERLANDS" -"1579105600","1579106303","GB","GBR","UNITED KINGDOM" -"1579106304","1579122687","DE","DEU","GERMANY" -"1579122688","1579155455","RU","RUS","RUSSIAN FEDERATION" -"1579155456","1579679743","IT","ITA","ITALY" -"1579679744","1579745279","PL","POL","POLAND" -"1579745280","1579810815","RU","RUS","RUSSIAN FEDERATION" -"1579810816","1579876351","PL","POL","POLAND" -"1579876352","1579941887","GE","GEO","GEORGIA" -"1579941888","1580007423","HU","HUN","HUNGARY" -"1580007424","1580015615","RU","RUS","RUSSIAN FEDERATION" -"1580015616","1580048383","UA","UKR","UKRAINE" -"1580048384","1580064767","RU","RUS","RUSSIAN FEDERATION" -"1580064768","1580072959","DE","DEU","GERMANY" -"1580072960","1580134399","PT","PRT","PORTUGAL" -"1580134400","1580136447","ES","ESP","SPAIN" -"1580136448","1580138495","PT","PRT","PORTUGAL" -"1580138496","1580204031","IT","ITA","ITALY" -"1580204032","1580335103","RO","ROM","ROMANIA" -"1580335104","1580466175","RU","RUS","RUSSIAN FEDERATION" -"1580466176","1580597247","RO","ROM","ROMANIA" -"1580597248","1580728319","TR","TUR","TURKEY" -"1580728320","1580990463","AE","ARE","UNITED ARAB EMIRATES" -"1580990464","1581252607","RO","ROM","ROMANIA" -"1581252608","1581776895","GR","GRC","GREECE" -"1581776896","1581793279","RU","RUS","RUSSIAN FEDERATION" -"1581793280","1581809663","PL","POL","POLAND" -"1581809664","1581826047","BG","BGR","BULGARIA" -"1581826048","1581842431","GB","GBR","UNITED KINGDOM" -"1581842432","1581858815","BG","BGR","BULGARIA" -"1581858816","1581875199","IT","ITA","ITALY" -"1581875200","1581891583","TR","TUR","TURKEY" -"1581891584","1581907967","RU","RUS","RUSSIAN FEDERATION" -"1581907968","1581924351","IT","ITA","ITALY" -"1581924352","1581940735","UA","UKR","UKRAINE" -"1581940736","1581957119","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1581957120","1581973503","CZ","CZE","CZECH REPUBLIC" -"1581973504","1581989887","RU","RUS","RUSSIAN FEDERATION" -"1581989888","1582006271","PL","POL","POLAND" -"1582006272","1582022655","RU","RUS","RUSSIAN FEDERATION" -"1582022656","1582039039","NL","NLD","NETHERLANDS" -"1582039040","1582055423","RU","RUS","RUSSIAN FEDERATION" -"1582055424","1582071807","UA","UKR","UKRAINE" -"1582071808","1582088191","ES","ESP","SPAIN" -"1582088192","1582104575","GB","GBR","UNITED KINGDOM" -"1582104576","1582153727","RU","RUS","RUSSIAN FEDERATION" -"1582153728","1582170111","SA","SAU","SAUDI ARABIA" -"1582170112","1582186495","CH","CHE","SWITZERLAND" -"1582186496","1582202879","TR","TUR","TURKEY" -"1582202880","1582219263","PL","POL","POLAND" -"1582219264","1582252031","RU","RUS","RUSSIAN FEDERATION" -"1582252032","1582268415","TR","TUR","TURKEY" -"1582268416","1582284799","DE","DEU","GERMANY" -"1582284800","1582301183","BH","BHR","BAHRAIN" -"1582301184","1583349759","IT","ITA","ITALY" -"1583349760","1583611903","SA","SAU","SAUDI ARABIA" -"1583611904","1583615999","LV","LVA","LATVIA" -"1583616000","1583620095","NL","NLD","NETHERLANDS" -"1583620096","1583624191","IT","ITA","ITALY" -"1583624192","1583628287","RS","SRB","SERBIA" -"1583628288","1583632383","DE","DEU","GERMANY" -"1583632384","1583636479","RU","RUS","RUSSIAN FEDERATION" -"1583636480","1583640575","MK","MKD","THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA" -"1583640576","1583644671","NL","NLD","NETHERLANDS" -"1583644672","1583648767","DE","DEU","GERMANY" -"1583648768","1583652863","CH","CHE","SWITZERLAND" -"1583652864","1583656959","FR","FRA","FRANCE" -"1583656960","1583665151","RU","RUS","RUSSIAN FEDERATION" -"1583665152","1583669247","UA","UKR","UKRAINE" -"1583669248","1583673343","GE","GEO","GEORGIA" -"1583673344","1583673991","DE","DEU","GERMANY" -"1583673992","1583673999","GB","GBR","UNITED KINGDOM" -"1583674000","1583674015","DE","DEU","GERMANY" -"1583674016","1583674039","NL","NLD","NETHERLANDS" -"1583674040","1583677439","DE","DEU","GERMANY" -"1583677440","1583681535","FI","FIN","FINLAND" -"1583681536","1583685631","PL","POL","POLAND" -"1583685632","1583689727","DE","DEU","GERMANY" -"1583689728","1583693823","IT","ITA","ITALY" -"1583693824","1583697919","RU","RUS","RUSSIAN FEDERATION" -"1583697920","1583702015","TR","TUR","TURKEY" -"1583702016","1583706111","RU","RUS","RUSSIAN FEDERATION" -"1583706112","1583710207","GI","GIB","GIBRALTAR" -"1583710208","1583712255","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1583712256","1583714303","AE","ARE","UNITED ARAB EMIRATES" -"1583714304","1583722495","GB","GBR","UNITED KINGDOM" -"1583722496","1583726591","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1583726592","1583730687","BG","BGR","BULGARIA" -"1583730688","1583732383","DK","DNK","DENMARK" -"1583732384","1583732399","DE","DEU","GERMANY" -"1583732400","1583734783","DK","DNK","DENMARK" -"1583734784","1583738879","LV","LVA","LATVIA" -"1583738880","1583742975","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1583742976","1583747071","TR","TUR","TURKEY" -"1583747072","1583751167","RU","RUS","RUSSIAN FEDERATION" -"1583751168","1583755263","NO","NOR","NORWAY" -"1583755264","1583759359","NL","NLD","NETHERLANDS" -"1583759360","1583763455","TR","TUR","TURKEY" -"1583763456","1583767551","RU","RUS","RUSSIAN FEDERATION" -"1583767552","1583771647","AT","AUT","AUSTRIA" -"1583771648","1583775743","RU","RUS","RUSSIAN FEDERATION" -"1583775744","1583779839","IT","ITA","ITALY" -"1583779840","1583783935","GB","GBR","UNITED KINGDOM" -"1583788032","1583792127","TM","TKM","TURKMENISTAN" -"1583792128","1583796223","IE","IRL","IRELAND" -"1583796224","1583800319","DE","DEU","GERMANY" -"1583800320","1583804415","ME","MNE","MONTENEGRO" -"1583804416","1583808511","GB","GBR","UNITED KINGDOM" -"1583808512","1583812607","MD","MDA","REPUBLIC OF MOLDOVA" -"1583812608","1583813679","NL","NLD","NETHERLANDS" -"1583813680","1583813683","GB","GBR","UNITED KINGDOM" -"1583813684","1583813711","NL","NLD","NETHERLANDS" -"1583813712","1583813727","US","USA","UNITED STATES" -"1583813728","1583816703","NL","NLD","NETHERLANDS" -"1583816704","1583820799","TR","TUR","TURKEY" -"1583820800","1583824895","LV","LVA","LATVIA" -"1583824896","1583828991","SI","SVN","SLOVENIA" -"1583828992","1583833087","RU","RUS","RUSSIAN FEDERATION" -"1583833088","1583837183","CH","CHE","SWITZERLAND" -"1583837184","1583841279","GB","GBR","UNITED KINGDOM" -"1583841280","1583845375","FR","FRA","FRANCE" -"1583845376","1583845727","NL","NLD","NETHERLANDS" -"1583845728","1583845743","BE","BEL","BELGIUM" -"1583845744","1583848639","NL","NLD","NETHERLANDS" -"1583848640","1583848703","BE","BEL","BELGIUM" -"1583848704","1583848735","NL","NLD","NETHERLANDS" -"1583848736","1583848799","BE","BEL","BELGIUM" -"1583848800","1583849471","NL","NLD","NETHERLANDS" -"1583849472","1583853567","DE","DEU","GERMANY" -"1583853568","1583857663","RU","RUS","RUSSIAN FEDERATION" -"1583857664","1583861759","SE","SWE","SWEDEN" -"1583861760","1583865855","LU","LUX","LUXEMBOURG" -"1583865856","1583869951","RU","RUS","RUSSIAN FEDERATION" -"1583869952","1583874047","KZ","KAZ","KAZAKHSTAN" -"1583874048","1584398335","BE","BEL","BELGIUM" -"1584398336","1584660479","CZ","CZE","CZECH REPUBLIC" -"1584660480","1584922623","GB","GBR","UNITED KINGDOM" -"1584922624","1585184767","TR","TUR","TURKEY" -"1585184768","1585190911","PL","POL","POLAND" -"1585190912","1585192959","ES","ESP","SPAIN" -"1585192960","1585195007","IT","ITA","ITALY" -"1585195008","1585197055","CZ","CZE","CZECH REPUBLIC" -"1585197056","1585199103","IT","ITA","ITALY" -"1585199104","1585201151","NL","NLD","NETHERLANDS" -"1585201152","1585205247","IT","ITA","ITALY" -"1585205248","1585207295","FR","FRA","FRANCE" -"1585207296","1585209855","NL","NLD","NETHERLANDS" -"1585209856","1585210111","IQ","IRQ","IRAQ" -"1585210112","1585210879","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1585210880","1585211391","NL","NLD","NETHERLANDS" -"1585211392","1585213439","CZ","CZE","CZECH REPUBLIC" -"1585213440","1585214463","GB","GBR","UNITED KINGDOM" -"1585214464","1585217535","NL","NLD","NETHERLANDS" -"1585217536","1585219583","FR","FRA","FRANCE" -"1585219584","1585221631","NL","NLD","NETHERLANDS" -"1585221632","1585223679","SK","SVK","SLOVAKIA" -"1585223680","1585225727","FR","FRA","FRANCE" -"1585225728","1585227775","UA","UKR","UKRAINE" -"1585227776","1585231871","RU","RUS","RUSSIAN FEDERATION" -"1585231872","1585233919","CZ","CZE","CZECH REPUBLIC" -"1585233920","1585235967","LB","LBN","LEBANON" -"1585235968","1585238015","RU","RUS","RUSSIAN FEDERATION" -"1585238016","1585240063","DE","DEU","GERMANY" -"1585240064","1585241087","FR","FRA","FRANCE" -"1585241088","1585242111","MQ","MTQ","MARTINIQUE" -"1585242112","1585244159","RU","RUS","RUSSIAN FEDERATION" -"1585244160","1585246207","FR","FRA","FRANCE" -"1585246208","1585248255","RU","RUS","RUSSIAN FEDERATION" -"1585248256","1585250303","CZ","CZE","CZECH REPUBLIC" -"1585250304","1585254399","RU","RUS","RUSSIAN FEDERATION" -"1585254400","1585256447","GB","GBR","UNITED KINGDOM" -"1585256448","1585258495","DE","DEU","GERMANY" -"1585258496","1585262591","GB","GBR","UNITED KINGDOM" -"1585262592","1585264639","RU","RUS","RUSSIAN FEDERATION" -"1585264640","1585265663","MT","MLT","MALTA" -"1585265664","1585266687","IM","IMN","ISLE OF MAN" -"1585266688","1585270783","DE","DEU","GERMANY" -"1585270784","1585272831","IT","ITA","ITALY" -"1585272832","1585274879","RU","RUS","RUSSIAN FEDERATION" -"1585274880","1585276927","ES","ESP","SPAIN" -"1585276928","1585278975","FR","FRA","FRANCE" -"1585278976","1585281023","AL","ALB","ALBANIA" -"1585281024","1585283071","UA","UKR","UKRAINE" -"1585283072","1585285119","GB","GBR","UNITED KINGDOM" -"1585285120","1585287167","ES","ESP","SPAIN" -"1585287168","1585289215","CY","CYP","CYPRUS" -"1585289216","1585291263","DE","DEU","GERMANY" -"1585291264","1585295359","FR","FRA","FRANCE" -"1585295360","1585297407","HU","HUN","HUNGARY" -"1585297408","1585299455","RU","RUS","RUSSIAN FEDERATION" -"1585299456","1585301503","GB","GBR","UNITED KINGDOM" -"1585301504","1585303551","LU","LUX","LUXEMBOURG" -"1585303552","1585305599","DE","DEU","GERMANY" -"1585305600","1585307647","CZ","CZE","CZECH REPUBLIC" -"1585307648","1585309695","QA","QAT","QATAR" -"1585309696","1585311743","IT","ITA","ITALY" -"1585311744","1585313791","RU","RUS","RUSSIAN FEDERATION" -"1585313792","1585315839","HU","HUN","HUNGARY" -"1585315840","1585317887","DK","DNK","DENMARK" -"1585317888","1585319935","IT","ITA","ITALY" -"1585319936","1585321983","CH","CHE","SWITZERLAND" -"1585321984","1585324031","RU","RUS","RUSSIAN FEDERATION" -"1585324032","1585326079","NL","NLD","NETHERLANDS" -"1585326080","1585328127","GB","GBR","UNITED KINGDOM" -"1585328128","1585330175","BE","BEL","BELGIUM" -"1585330176","1585332223","IT","ITA","ITALY" -"1585332224","1585334271","NL","NLD","NETHERLANDS" -"1585334272","1585336319","DE","DEU","GERMANY" -"1585336320","1585338367","SE","SWE","SWEDEN" -"1585338368","1585340415","RU","RUS","RUSSIAN FEDERATION" -"1585340416","1585342463","AT","AUT","AUSTRIA" -"1585342464","1585344511","GB","GBR","UNITED KINGDOM" -"1585344512","1585346559","FR","FRA","FRANCE" -"1585346560","1585348607","GB","GBR","UNITED KINGDOM" -"1585348608","1585350655","CH","CHE","SWITZERLAND" -"1585350656","1585352703","IT","ITA","ITALY" -"1585352704","1585354751","PT","PRT","PORTUGAL" -"1585354752","1585356799","RU","RUS","RUSSIAN FEDERATION" -"1585356800","1585358847","FI","FIN","FINLAND" -"1585358848","1585360895","PT","PRT","PORTUGAL" -"1585360896","1585362943","GB","GBR","UNITED KINGDOM" -"1585362944","1585363455","IT","ITA","ITALY" -"1585363456","1585363551","ES","ESP","SPAIN" -"1585363552","1585364991","IT","ITA","ITALY" -"1585364992","1585367039","GB","GBR","UNITED KINGDOM" -"1585367040","1585369087","RU","RUS","RUSSIAN FEDERATION" -"1585369088","1585371135","GB","GBR","UNITED KINGDOM" -"1585371136","1585375231","SE","SWE","SWEDEN" -"1585375232","1585377279","GB","GBR","UNITED KINGDOM" -"1585377280","1585379327","ES","ESP","SPAIN" -"1585379328","1585381375","CH","CHE","SWITZERLAND" -"1585381376","1585383423","GB","GBR","UNITED KINGDOM" -"1585383424","1585385471","FR","FRA","FRANCE" -"1585385472","1585387519","DE","DEU","GERMANY" -"1585387520","1585389567","SI","SVN","SLOVENIA" -"1585389568","1585391615","SE","SWE","SWEDEN" -"1585391616","1585393663","IT","ITA","ITALY" -"1585393664","1585395711","DK","DNK","DENMARK" -"1585395712","1585397759","NO","NOR","NORWAY" -"1585397760","1585399807","RU","RUS","RUSSIAN FEDERATION" -"1585399808","1585400063","NL","NLD","NETHERLANDS" -"1585400064","1585400319","IL","ISR","ISRAEL" -"1585400320","1585400575","GB","GBR","UNITED KINGDOM" -"1585400576","1585401855","US","USA","UNITED STATES" -"1585401856","1585403903","IT","ITA","ITALY" -"1585403904","1585405951","RU","RUS","RUSSIAN FEDERATION" -"1585405952","1585407999","GB","GBR","UNITED KINGDOM" -"1585408000","1585410047","PL","POL","POLAND" -"1585410048","1585412095","GB","GBR","UNITED KINGDOM" -"1585412096","1585414143","NO","NOR","NORWAY" -"1585414144","1585416191","CZ","CZE","CZECH REPUBLIC" -"1585416192","1585422335","RU","RUS","RUSSIAN FEDERATION" -"1585422336","1585424383","ES","ESP","SPAIN" -"1585424384","1585428479","RU","RUS","RUSSIAN FEDERATION" -"1585428480","1585432575","ES","ESP","SPAIN" -"1585432576","1585434623","RU","RUS","RUSSIAN FEDERATION" -"1585434624","1585436671","JO","JOR","JORDAN" -"1585436672","1585438719","RU","RUS","RUSSIAN FEDERATION" -"1585438720","1585440767","DE","DEU","GERMANY" -"1585440768","1585442815","IT","ITA","ITALY" -"1585442816","1585446911","RU","RUS","RUSSIAN FEDERATION" -"1585446912","1585577983","KW","KWT","KUWAIT" -"1585577984","1585709055","UA","UKR","UKRAINE" -"1585709056","1585840127","PT","PRT","PORTUGAL" -"1585840128","1585971199","DE","DEU","GERMANY" -"1585971200","1585979391","AT","AUT","AUSTRIA" -"1585979392","1585987583","GB","GBR","UNITED KINGDOM" -"1585987584","1585988095","SE","SWE","SWEDEN" -"1585988096","1585988103","IT","ITA","ITALY" -"1585988104","1585988351","SE","SWE","SWEDEN" -"1585988352","1585988359","DE","DEU","GERMANY" -"1585988360","1585995775","SE","SWE","SWEDEN" -"1585995776","1586003967","AT","AUT","AUSTRIA" -"1586003968","1586012159","SK","SVK","SLOVAKIA" -"1586012160","1586020351","DE","DEU","GERMANY" -"1586020352","1586028543","RU","RUS","RUSSIAN FEDERATION" -"1586028544","1586036735","GB","GBR","UNITED KINGDOM" -"1586036736","1586061311","RU","RUS","RUSSIAN FEDERATION" -"1586061312","1586069503","HR","HRV","CROATIA" -"1586069504","1586077695","DE","DEU","GERMANY" -"1586077696","1586085887","GE","GEO","GEORGIA" -"1586085888","1586110463","RU","RUS","RUSSIAN FEDERATION" -"1586110464","1586118655","IT","ITA","ITALY" -"1586118656","1586126847","DK","DNK","DENMARK" -"1586126848","1586128383","CZ","CZE","CZECH REPUBLIC" -"1586128384","1586128639","SK","SVK","SLOVAKIA" -"1586128640","1586135039","CZ","CZE","CZECH REPUBLIC" -"1586135040","1586143231","RU","RUS","RUSSIAN FEDERATION" -"1586143232","1586151423","IT","ITA","ITALY" -"1586151424","1586159615","TR","TUR","TURKEY" -"1586159616","1586167807","MT","MLT","MALTA" -"1586167808","1586175999","DE","DEU","GERMANY" -"1586176000","1586184191","BE","BEL","BELGIUM" -"1586184192","1586192383","NO","NOR","NORWAY" -"1586192384","1586200575","RU","RUS","RUSSIAN FEDERATION" -"1586200576","1586208767","MD","MDA","REPUBLIC OF MOLDOVA" -"1586208768","1586216959","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1586216960","1586225151","BG","BGR","BULGARIA" -"1586225152","1586233343","RU","RUS","RUSSIAN FEDERATION" -"1586233344","1586241535","FR","FRA","FRANCE" -"1586241536","1586249727","SE","SWE","SWEDEN" -"1586249728","1586257919","SI","SVN","SLOVENIA" -"1586257920","1586259199","LV","LVA","LATVIA" -"1586263040","1586265087","LV","LVA","LATVIA" -"1586266112","1586274303","RU","RUS","RUSSIAN FEDERATION" -"1586274304","1586282495","BE","BEL","BELGIUM" -"1586282496","1586298879","RU","RUS","RUSSIAN FEDERATION" -"1586298880","1586307071","IT","ITA","ITALY" -"1586307072","1586315263","RU","RUS","RUSSIAN FEDERATION" -"1586315264","1586323455","UZ","UZB","UZBEKISTAN" -"1586323456","1586331647","RU","RUS","RUSSIAN FEDERATION" -"1586331648","1586339839","PL","POL","POLAND" -"1586339840","1586348031","RU","RUS","RUSSIAN FEDERATION" -"1586348032","1586356223","SY","SYR","SYRIAN ARAB REPUBLIC" -"1586356224","1586372607","RU","RUS","RUSSIAN FEDERATION" -"1586372608","1586380799","JO","JOR","JORDAN" -"1586380800","1586388991","GB","GBR","UNITED KINGDOM" -"1586388992","1586397183","ES","ESP","SPAIN" -"1586397184","1586399231","LV","LVA","LATVIA" -"1586399232","1586401279","RU","RUS","RUSSIAN FEDERATION" -"1586401280","1586403327","IT","ITA","ITALY" -"1586403328","1586405375","IS","ISL","ICELAND" -"1586405376","1586407423","AT","AUT","AUSTRIA" -"1586407424","1586409471","GB","GBR","UNITED KINGDOM" -"1586409472","1586411519","IT","ITA","ITALY" -"1586411520","1586411775","GB","GBR","UNITED KINGDOM" -"1586411776","1586412287","US","USA","UNITED STATES" -"1586412288","1586412543","HK","HKG","HONG KONG" -"1586412544","1586413567","GB","GBR","UNITED KINGDOM" -"1586413568","1586415615","IT","ITA","ITALY" -"1586415616","1586417663","ES","ESP","SPAIN" -"1586417664","1586419711","NL","NLD","NETHERLANDS" -"1586419712","1586421759","DE","DEU","GERMANY" -"1586421760","1586423807","SE","SWE","SWEDEN" -"1586423808","1586425855","CZ","CZE","CZECH REPUBLIC" -"1586425856","1586427903","NL","NLD","NETHERLANDS" -"1586427904","1586428159","CH","CHE","SWITZERLAND" -"1586428160","1586429951","FR","FRA","FRANCE" -"1586429952","1586431999","CH","CHE","SWITZERLAND" -"1586432000","1586434047","DK","DNK","DENMARK" -"1586434048","1586436095","BE","BEL","BELGIUM" -"1586436096","1586438143","ES","ESP","SPAIN" -"1586438144","1586446335","RU","RUS","RUSSIAN FEDERATION" -"1586446336","1586448383","NO","NOR","NORWAY" -"1586448384","1586450431","ES","ESP","SPAIN" -"1586450432","1586452479","RU","RUS","RUSSIAN FEDERATION" -"1586452480","1586454527","CH","CHE","SWITZERLAND" -"1586454528","1586456575","IT","ITA","ITALY" -"1586456576","1586458623","GB","GBR","UNITED KINGDOM" -"1586458624","1586460671","FR","FRA","FRANCE" -"1586460672","1586462719","GB","GBR","UNITED KINGDOM" -"1586462720","1586464767","RU","RUS","RUSSIAN FEDERATION" -"1586464768","1586466815","ES","ESP","SPAIN" -"1586466816","1586468863","RU","RUS","RUSSIAN FEDERATION" -"1586468864","1586470911","IT","ITA","ITALY" -"1586470912","1586472959","GB","GBR","UNITED KINGDOM" -"1586472960","1586475007","CZ","CZE","CZECH REPUBLIC" -"1586475008","1586477055","GR","GRC","GREECE" -"1586477056","1586479103","BE","BEL","BELGIUM" -"1586479104","1586481151","KG","KGZ","KYRGYZSTAN" -"1586481152","1586483199","ES","ESP","SPAIN" -"1586483200","1586485247","NL","NLD","NETHERLANDS" -"1586485248","1586487295","FR","FRA","FRANCE" -"1586487296","1586489343","SA","SAU","SAUDI ARABIA" -"1586489344","1586491391","CZ","CZE","CZECH REPUBLIC" -"1586491392","1586493439","RU","RUS","RUSSIAN FEDERATION" -"1586493440","1586495487","GB","GBR","UNITED KINGDOM" -"1586495488","1587019775","DK","DNK","DENMARK" -"1587019776","1587085311","PL","POL","POLAND" -"1587085312","1587183615","UA","UKR","UKRAINE" -"1587183616","1587199999","RU","RUS","RUSSIAN FEDERATION" -"1587200000","1587216383","UA","UKR","UKRAINE" -"1587216384","1587347455","BG","BGR","BULGARIA" -"1587347456","1587412991","NL","NLD","NETHERLANDS" -"1587412992","1587417087","RU","RUS","RUSSIAN FEDERATION" -"1587417088","1587425279","UA","UKR","UKRAINE" -"1587425280","1587429375","UZ","UZB","UZBEKISTAN" -"1587429376","1587437567","UA","UKR","UKRAINE" -"1587437568","1587445759","RU","RUS","RUSSIAN FEDERATION" -"1587445760","1587449855","PL","POL","POLAND" -"1587449856","1587453951","UA","UKR","UKRAINE" -"1587453952","1587470335","RU","RUS","RUSSIAN FEDERATION" -"1587470336","1587474431","PL","POL","POLAND" -"1587474432","1587478527","UA","UKR","UKRAINE" -"1587478528","1587511295","RU","RUS","RUSSIAN FEDERATION" -"1587511296","1587544063","IL","ISR","ISRAEL" -"1587544064","1588068351","IT","ITA","ITALY" -"1588068352","1588592639","GB","GBR","UNITED KINGDOM" -"1588592640","1588621311","RO","ROM","ROMANIA" -"1588621312","1588625407","MD","MDA","REPUBLIC OF MOLDOVA" -"1588625408","1588723711","RO","ROM","ROMANIA" -"1588723712","1588854783","UA","UKR","UKRAINE" -"1588854784","1588985855","RU","RUS","RUSSIAN FEDERATION" -"1588985856","1589182463","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1589182464","1589215231","RU","RUS","RUSSIAN FEDERATION" -"1589215232","1589247999","GB","GBR","UNITED KINGDOM" -"1589248000","1589280767","NO","NOR","NORWAY" -"1589280768","1589313535","DE","DEU","GERMANY" -"1589313536","1589346303","LB","LBN","LEBANON" -"1589346304","1589379071","KW","KWT","KUWAIT" -"1589379072","1589411839","RU","RUS","RUSSIAN FEDERATION" -"1589411840","1589444607","IL","ISR","ISRAEL" -"1589444608","1589477375","DK","DNK","DENMARK" -"1589477376","1589510143","RS","SRB","SERBIA" -"1589510144","1589542911","RU","RUS","RUSSIAN FEDERATION" -"1589542912","1589575679","BG","BGR","BULGARIA" -"1589575680","1589608447","RU","RUS","RUSSIAN FEDERATION" -"1589608448","1589610495","DK","DNK","DENMARK" -"1589610496","1589620735","SE","SWE","SWEDEN" -"1589620736","1589623807","DK","DNK","DENMARK" -"1589623808","1589628927","SE","SWE","SWEDEN" -"1589628928","1589641215","DK","DNK","DENMARK" -"1589641216","1590034431","GB","GBR","UNITED KINGDOM" -"1590034432","1590036479","RU","RUS","RUSSIAN FEDERATION" -"1590036480","1590038527","GB","GBR","UNITED KINGDOM" -"1590038528","1590048767","RU","RUS","RUSSIAN FEDERATION" -"1590048768","1590050815","DE","DEU","GERMANY" -"1590050816","1590052863","SE","SWE","SWEDEN" -"1590052864","1590054911","IT","ITA","ITALY" -"1590054912","1590056959","GB","GBR","UNITED KINGDOM" -"1590056960","1590059007","ES","ESP","SPAIN" -"1590059008","1590060223","IT","ITA","ITALY" -"1590060224","1590060255","CH","CHE","SWITZERLAND" -"1590060256","1590061055","IT","ITA","ITALY" -"1590061056","1590063103","RU","RUS","RUSSIAN FEDERATION" -"1590063104","1590065151","CZ","CZE","CZECH REPUBLIC" -"1590065152","1590067199","IE","IRL","IRELAND" -"1590067200","1590069247","RU","RUS","RUSSIAN FEDERATION" -"1590069248","1590071295","AT","AUT","AUSTRIA" -"1590071296","1590073343","FR","FRA","FRANCE" -"1590073344","1590075391","NL","NLD","NETHERLANDS" -"1590075392","1590077247","BE","BEL","BELGIUM" -"1590077248","1590077279","NL","NLD","NETHERLANDS" -"1590077280","1590077439","BE","BEL","BELGIUM" -"1590077440","1590079487","GB","GBR","UNITED KINGDOM" -"1590079488","1590081535","FR","FRA","FRANCE" -"1590081536","1590083583","GB","GBR","UNITED KINGDOM" -"1590083584","1590085631","RU","RUS","RUSSIAN FEDERATION" -"1590085632","1590087679","FR","FRA","FRANCE" -"1590087680","1590089727","IT","ITA","ITALY" -"1590089728","1590091775","RU","RUS","RUSSIAN FEDERATION" -"1590091776","1590093823","CZ","CZE","CZECH REPUBLIC" -"1590093824","1590095871","RU","RUS","RUSSIAN FEDERATION" -"1590095872","1590097919","CZ","CZE","CZECH REPUBLIC" -"1590097920","1590099967","CH","CHE","SWITZERLAND" -"1590099968","1590102015","RU","RUS","RUSSIAN FEDERATION" -"1590102016","1590104063","IT","ITA","ITALY" -"1590104064","1590106111","TJ","TJK","TAJIKISTAN" -"1590106112","1590108159","FI","FIN","FINLAND" -"1590108160","1590110207","TR","TUR","TURKEY" -"1590110208","1590112255","CZ","CZE","CZECH REPUBLIC" -"1590112256","1590114303","HU","HUN","HUNGARY" -"1590114304","1590116351","FI","FIN","FINLAND" -"1590116352","1590120447","RU","RUS","RUSSIAN FEDERATION" -"1590120448","1590122495","IT","ITA","ITALY" -"1590122496","1590124543","DE","DEU","GERMANY" -"1590124544","1590126591","CH","CHE","SWITZERLAND" -"1590126592","1590128639","RU","RUS","RUSSIAN FEDERATION" -"1590128640","1590130687","FI","FIN","FINLAND" -"1590130688","1590132735","FR","FRA","FRANCE" -"1590134784","1590136831","ES","ESP","SPAIN" -"1590136832","1590138879","GB","GBR","UNITED KINGDOM" -"1590138880","1590140927","CZ","CZE","CZECH REPUBLIC" -"1590140928","1590142975","UA","UKR","UKRAINE" -"1590142976","1590145023","AT","AUT","AUSTRIA" -"1590145024","1590147071","HU","HUN","HUNGARY" -"1590147072","1590149119","GB","GBR","UNITED KINGDOM" -"1590149120","1590151167","CZ","CZE","CZECH REPUBLIC" -"1590151168","1590153215","TR","TUR","TURKEY" -"1590153216","1590157311","RU","RUS","RUSSIAN FEDERATION" -"1590157312","1590159359","IE","IRL","IRELAND" -"1590159360","1590161407","GB","GBR","UNITED KINGDOM" -"1590161408","1590163455","DE","DEU","GERMANY" -"1590163456","1590165503","NL","NLD","NETHERLANDS" -"1590165504","1590689791","AE","ARE","UNITED ARAB EMIRATES" -"1590689792","1591214079","NL","NLD","NETHERLANDS" -"1591214080","1591738367","DE","DEU","GERMANY" -"1591738368","1592000511","BE","BEL","BELGIUM" -"1592000512","1592004607","ES","ESP","SPAIN" -"1592004608","1592008703","AM","ARM","ARMENIA" -"1592008704","1592012799","GB","GBR","UNITED KINGDOM" -"1592012800","1592016895","CH","CHE","SWITZERLAND" -"1592016896","1592020991","GB","GBR","UNITED KINGDOM" -"1592020992","1592025087","SK","SVK","SLOVAKIA" -"1592025088","1592029183","DE","DEU","GERMANY" -"1592029184","1592033279","RU","RUS","RUSSIAN FEDERATION" -"1592033280","1592037375","NL","NLD","NETHERLANDS" -"1592037376","1592041471","CH","CHE","SWITZERLAND" -"1592041472","1592045567","RU","RUS","RUSSIAN FEDERATION" -"1592045568","1592049663","FR","FRA","FRANCE" -"1592049664","1592053759","RU","RUS","RUSSIAN FEDERATION" -"1592053760","1592054271","NL","NLD","NETHERLANDS" -"1592054272","1592054527","AE","ARE","UNITED ARAB EMIRATES" -"1592054528","1592054783","NL","NLD","NETHERLANDS" -"1592054784","1592055295","AE","ARE","UNITED ARAB EMIRATES" -"1592055296","1592057855","NL","NLD","NETHERLANDS" -"1592057856","1592061951","RS","SRB","SERBIA" -"1592061952","1592066047","RU","RUS","RUSSIAN FEDERATION" -"1592066048","1592067583","US","USA","UNITED STATES" -"1592067584","1592067711","NO","NOR","NORWAY" -"1592067712","1592069631","CY","CYP","CYPRUS" -"1592069632","1592069695","NL","NLD","NETHERLANDS" -"1592069696","1592069887","CY","CYP","CYPRUS" -"1592069888","1592074239","RU","RUS","RUSSIAN FEDERATION" -"1592074240","1592078335","SK","SVK","SLOVAKIA" -"1592078336","1592082431","NL","NLD","NETHERLANDS" -"1592082432","1592085023","GB","GBR","UNITED KINGDOM" -"1592085024","1592085039","ES","ESP","SPAIN" -"1592085040","1592086527","GB","GBR","UNITED KINGDOM" -"1592086528","1592087295","CZ","CZE","CZECH REPUBLIC" -"1592087296","1592088063","PL","POL","POLAND" -"1592088064","1592090623","CZ","CZE","CZECH REPUBLIC" -"1592090624","1592094719","RU","RUS","RUSSIAN FEDERATION" -"1592094720","1592098815","RS","SRB","SERBIA" -"1592098816","1592102911","GB","GBR","UNITED KINGDOM" -"1592102912","1592107007","PT","PRT","PORTUGAL" -"1592107008","1592111103","GB","GBR","UNITED KINGDOM" -"1592111104","1592115199","DE","DEU","GERMANY" -"1592115200","1592119295","ES","ESP","SPAIN" -"1592119296","1592123391","PL","POL","POLAND" -"1592123392","1592135679","RU","RUS","RUSSIAN FEDERATION" -"1592135680","1592139775","PL","POL","POLAND" -"1592139776","1592143871","RU","RUS","RUSSIAN FEDERATION" -"1592143872","1592147967","DE","DEU","GERMANY" -"1592147968","1592152063","IT","ITA","ITALY" -"1592152064","1592156159","IL","ISR","ISRAEL" -"1592156160","1592160255","IE","IRL","IRELAND" -"1592160256","1592168447","RU","RUS","RUSSIAN FEDERATION" -"1592168448","1592172543","CZ","CZE","CZECH REPUBLIC" -"1592172544","1592176639","RU","RUS","RUSSIAN FEDERATION" -"1592176640","1592178687","CS","SCG","SERBIA AND MONTENEGRO" -"1592178688","1592179199","RS","SRB","SERBIA" -"1592179200","1592180735","CS","SCG","SERBIA AND MONTENEGRO" -"1592180736","1592184831","UA","UKR","UKRAINE" -"1592184832","1592188927","CH","CHE","SWITZERLAND" -"1592188928","1592193023","UZ","UZB","UZBEKISTAN" -"1592193024","1592197119","RU","RUS","RUSSIAN FEDERATION" -"1592197120","1592201215","PL","POL","POLAND" -"1592201216","1592205311","RU","RUS","RUSSIAN FEDERATION" -"1592205312","1592209407","UA","UKR","UKRAINE" -"1592209408","1592213503","PL","POL","POLAND" -"1592213504","1592217599","UA","UKR","UKRAINE" -"1592217600","1592221695","CH","CHE","SWITZERLAND" -"1592221696","1592225791","DK","DNK","DENMARK" -"1592225792","1592242175","RU","RUS","RUSSIAN FEDERATION" -"1592242176","1592246271","UA","UKR","UKRAINE" -"1592246272","1592254463","RU","RUS","RUSSIAN FEDERATION" -"1592254464","1592258559","PL","POL","POLAND" -"1592258560","1592262655","NL","NLD","NETHERLANDS" -"1592262656","1592270847","RU","RUS","RUSSIAN FEDERATION" -"1592270848","1592272895","PL","POL","POLAND" -"1592272896","1592281087","RU","RUS","RUSSIAN FEDERATION" -"1592281088","1592283135","UA","UKR","UKRAINE" -"1592283136","1592285183","GR","GRC","GREECE" -"1592285184","1592287231","RU","RUS","RUSSIAN FEDERATION" -"1592287232","1592289279","RO","ROM","ROMANIA" -"1592289280","1592291327","RU","RUS","RUSSIAN FEDERATION" -"1592291328","1592293375","NL","NLD","NETHERLANDS" -"1592293376","1592299519","RU","RUS","RUSSIAN FEDERATION" -"1592299520","1592303615","PL","POL","POLAND" -"1592303616","1592305663","NL","NLD","NETHERLANDS" -"1592305664","1592307711","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1592307712","1592309759","UA","UKR","UKRAINE" -"1592309760","1592311807","RU","RUS","RUSSIAN FEDERATION" -"1592311808","1592313855","DE","DEU","GERMANY" -"1592313856","1592315903","RU","RUS","RUSSIAN FEDERATION" -"1592315904","1592317951","UA","UKR","UKRAINE" -"1592317952","1592319999","PL","POL","POLAND" -"1592320000","1592322047","LT","LTU","LITHUANIA" -"1592322048","1592324095","RU","RUS","RUSSIAN FEDERATION" -"1592324096","1592326143","KZ","KAZ","KAZAKHSTAN" -"1592326144","1592328191","UA","UKR","UKRAINE" -"1592328192","1592393727","RU","RUS","RUSSIAN FEDERATION" -"1592393728","1592459263","SE","SWE","SWEDEN" -"1592459264","1592524799","GE","GEO","GEORGIA" -"1592524800","1592557567","GB","GBR","UNITED KINGDOM" -"1592557568","1592590335","BG","BGR","BULGARIA" -"1592590336","1592623103","FI","FIN","FINLAND" -"1592623104","1592655871","RU","RUS","RUSSIAN FEDERATION" -"1592655872","1592786943","FR","FRA","FRANCE" -"1592786944","1592803327","PL","POL","POLAND" -"1592803328","1592819711","RU","RUS","RUSSIAN FEDERATION" -"1592819712","1592836095","UA","UKR","UKRAINE" -"1592836096","1592852479","GE","GEO","GEORGIA" -"1592852480","1592868863","RU","RUS","RUSSIAN FEDERATION" -"1592868864","1592885247","CZ","CZE","CZECH REPUBLIC" -"1592885248","1592901631","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1592901632","1592934399","RU","RUS","RUSSIAN FEDERATION" -"1592934400","1592950783","CZ","CZE","CZECH REPUBLIC" -"1592950784","1592967167","RU","RUS","RUSSIAN FEDERATION" -"1592967168","1592983551","LU","LUX","LUXEMBOURG" -"1592983552","1592999935","RU","RUS","RUSSIAN FEDERATION" -"1592999936","1593016319","MD","MDA","REPUBLIC OF MOLDOVA" -"1593016320","1593049087","RU","RUS","RUSSIAN FEDERATION" -"1593049088","1593065471","UA","UKR","UKRAINE" -"1593065472","1593081855","LT","LTU","LITHUANIA" -"1593081856","1593098239","UA","UKR","UKRAINE" -"1593098240","1593114623","CH","CHE","SWITZERLAND" -"1593114624","1593122815","DK","DNK","DENMARK" -"1593122816","1593131007","SE","SWE","SWEDEN" -"1593131008","1593147391","GB","GBR","UNITED KINGDOM" -"1593147392","1593163775","RU","RUS","RUSSIAN FEDERATION" -"1593163776","1593180159","AT","AUT","AUSTRIA" -"1593180160","1593196543","NO","NOR","NORWAY" -"1593196544","1593196783","SE","SWE","SWEDEN" -"1593196784","1593196799","GB","GBR","UNITED KINGDOM" -"1593196800","1593205567","SE","SWE","SWEDEN" -"1593205568","1593205631","DK","DNK","DENMARK" -"1593205632","1593206083","SE","SWE","SWEDEN" -"1593206084","1593206095","DK","DNK","DENMARK" -"1593206096","1593206103","FI","FIN","FINLAND" -"1593206104","1593206111","GB","GBR","UNITED KINGDOM" -"1593206112","1593206207","SE","SWE","SWEDEN" -"1593206208","1593206271","FI","FIN","FINLAND" -"1593206272","1593209151","SE","SWE","SWEDEN" -"1593209152","1593209155","GR","GRC","GREECE" -"1593209156","1593209159","HU","HUN","HUNGARY" -"1593209160","1593209163","FI","FIN","FINLAND" -"1593209164","1593209167","CH","CHE","SWITZERLAND" -"1593209168","1593210879","SE","SWE","SWEDEN" -"1593210880","1593211391","NO","NOR","NORWAY" -"1593211392","1593212415","SE","SWE","SWEDEN" -"1593212416","1593212927","NO","NOR","NORWAY" -"1593212928","1593229311","PL","POL","POLAND" -"1593229312","1593245695","EE","EST","ESTONIA" -"1593245696","1593247743","NL","NLD","NETHERLANDS" -"1593247744","1593249791","IT","ITA","ITALY" -"1593249792","1593251839","RU","RUS","RUSSIAN FEDERATION" -"1593251840","1593252159","FR","FRA","FRANCE" -"1593252160","1593252192","GB","GBR","UNITED KINGDOM" -"1593252193","1593253887","FR","FRA","FRANCE" -"1593253888","1593255935","CZ","CZE","CZECH REPUBLIC" -"1593255936","1593257983","DE","DEU","GERMANY" -"1593257984","1593260031","IE","IRL","IRELAND" -"1593260032","1593262079","RU","RUS","RUSSIAN FEDERATION" -"1593262080","1593264127","KZ","KAZ","KAZAKHSTAN" -"1593264128","1593266175","NL","NLD","NETHERLANDS" -"1593266176","1593268223","GB","GBR","UNITED KINGDOM" -"1593268224","1593270271","HU","HUN","HUNGARY" -"1593270272","1593272319","GB","GBR","UNITED KINGDOM" -"1593272320","1593274367","RU","RUS","RUSSIAN FEDERATION" -"1593274368","1593276415","DE","DEU","GERMANY" -"1593276416","1593278463","RU","RUS","RUSSIAN FEDERATION" -"1593278464","1593280511","KZ","KAZ","KAZAKHSTAN" -"1593280512","1593282559","EE","EST","ESTONIA" -"1593282560","1593284607","AT","AUT","AUSTRIA" -"1593284608","1593286655","GB","GBR","UNITED KINGDOM" -"1593286656","1593288703","FR","FRA","FRANCE" -"1593288704","1593290751","SE","SWE","SWEDEN" -"1593290752","1593292799","FR","FRA","FRANCE" -"1593292800","1593294847","IT","ITA","ITALY" -"1593294848","1593296895","NL","NLD","NETHERLANDS" -"1593296896","1593298943","RS","SRB","SERBIA" -"1593298944","1593300991","RU","RUS","RUSSIAN FEDERATION" -"1593300992","1593303039","CH","CHE","SWITZERLAND" -"1593303040","1593305087","UA","UKR","UKRAINE" -"1593305088","1593307135","FR","FRA","FRANCE" -"1593307136","1593311231","RU","RUS","RUSSIAN FEDERATION" -"1593311232","1593343999","UA","UKR","UKRAINE" -"1593344000","1593376767","HU","HUN","HUNGARY" -"1593376768","1593409535","JO","JOR","JORDAN" -"1593409536","1593416231","DE","DEU","GERMANY" -"1593416232","1593416239","CH","CHE","SWITZERLAND" -"1593416240","1593442303","DE","DEU","GERMANY" -"1593442304","1593475071","BA","BIH","BOSNIA AND HERZEGOVINA" -"1593475072","1593540607","RU","RUS","RUSSIAN FEDERATION" -"1593540608","1593573375","PL","POL","POLAND" -"1593573376","1593606143","LU","LUX","LUXEMBOURG" -"1593606144","1593638911","SY","SYR","SYRIAN ARAB REPUBLIC" -"1593638912","1593671679","RU","RUS","RUSSIAN FEDERATION" -"1593671680","1593704447","HR","HRV","CROATIA" -"1593704448","1593704959","SE","SWE","SWEDEN" -"1593704960","1593705471","NO","NOR","NORWAY" -"1593705472","1593737215","SE","SWE","SWEDEN" -"1593737216","1593769983","PL","POL","POLAND" -"1593769984","1593802751","RU","RUS","RUSSIAN FEDERATION" -"1593802752","1593835519","SE","SWE","SWEDEN" -"1593835520","1594884095","TR","TUR","TURKEY" -"1594884096","1595408383","ES","ESP","SPAIN" -"1595408384","1595998207","RU","RUS","RUSSIAN FEDERATION" -"1595998208","1596063743","DE","DEU","GERMANY" -"1596063744","1596129279","NO","NOR","NORWAY" -"1596129280","1596194815","IL","ISR","ISRAEL" -"1596194816","1596260351","NL","NLD","NETHERLANDS" -"1596260352","1596325887","RU","RUS","RUSSIAN FEDERATION" -"1596325888","1596391423","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1596391424","1596456959","ES","ESP","SPAIN" -"1596456960","1596588031","PL","POL","POLAND" -"1596588032","1596719103","BG","BGR","BULGARIA" -"1596719104","1596850175","IE","IRL","IRELAND" -"1596850176","1596981247","CZ","CZE","CZECH REPUBLIC" -"1596981248","1597243391","PL","POL","POLAND" -"1597243392","1597505535","RU","RUS","RUSSIAN FEDERATION" -"1597505536","1597767679","KZ","KAZ","KAZAKHSTAN" -"1597767680","1598029823","ES","ESP","SPAIN" -"1598029824","1598062591","RO","ROM","ROMANIA" -"1598062592","1598095359","RU","RUS","RUSSIAN FEDERATION" -"1598095360","1598128127","MD","MDA","REPUBLIC OF MOLDOVA" -"1598128128","1598160895","TR","TUR","TURKEY" -"1598160896","1598193663","KW","KWT","KUWAIT" -"1598193664","1598226431","RU","RUS","RUSSIAN FEDERATION" -"1598226432","1598259199","UA","UKR","UKRAINE" -"1598259200","1598291967","RU","RUS","RUSSIAN FEDERATION" -"1598291968","1598324735","LV","LVA","LATVIA" -"1598324736","1598357503","RU","RUS","RUSSIAN FEDERATION" -"1598357504","1598390271","PT","PRT","PORTUGAL" -"1598390272","1598423039","UA","UKR","UKRAINE" -"1598423040","1598455807","RU","RUS","RUSSIAN FEDERATION" -"1598455808","1598488575","TR","TUR","TURKEY" -"1598488576","1598685183","RU","RUS","RUSSIAN FEDERATION" -"1598685184","1598816255","IT","ITA","ITALY" -"1598816256","1598947327","RO","ROM","ROMANIA" -"1598947328","1599078399","RU","RUS","RUSSIAN FEDERATION" -"1599078400","1599094783","SE","SWE","SWEDEN" -"1599094784","1599111167","RU","RUS","RUSSIAN FEDERATION" -"1599111168","1599127551","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1599127552","1599143935","CZ","CZE","CZECH REPUBLIC" -"1599143936","1599160319","UA","UKR","UKRAINE" -"1599160320","1599176703","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1599176704","1599193087","FR","FRA","FRANCE" -"1599193088","1599209471","RU","RUS","RUSSIAN FEDERATION" -"1599209472","1599242239","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1599242240","1599258623","CZ","CZE","CZECH REPUBLIC" -"1599258624","1599324159","RU","RUS","RUSSIAN FEDERATION" -"1599324160","1599340543","IE","IRL","IRELAND" -"1599340544","1599356927","RU","RUS","RUSSIAN FEDERATION" -"1599356928","1599373311","BH","BHR","BAHRAIN" -"1599373312","1599438847","RU","RUS","RUSSIAN FEDERATION" -"1599438848","1599455231","RS","SRB","SERBIA" -"1599455232","1599471615","CZ","CZE","CZECH REPUBLIC" -"1599471616","1599487999","MK","MKD","THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA" -"1599488000","1599504383","IL","ISR","ISRAEL" -"1599504384","1599520767","AZ","AZE","AZERBAIJAN" -"1599520768","1599537151","RU","RUS","RUSSIAN FEDERATION" -"1599537152","1599553535","BG","BGR","BULGARIA" -"1599553536","1599569919","RU","RUS","RUSSIAN FEDERATION" -"1599569920","1599586303","SI","SVN","SLOVENIA" -"1599586304","1599602687","BG","BGR","BULGARIA" -"1599602688","1599864831","DE","DEU","GERMANY" -"1599864832","1600126975","PT","PRT","PORTUGAL" -"1600126976","1600389119","NL","NLD","NETHERLANDS" -"1600397312","1600401407","DE","DEU","GERMANY" -"1600520192","1600651263","SK","SVK","SLOVAKIA" -"1600651264","1600684031","GE","GEO","GEORGIA" -"1600684032","1600749567","RU","RUS","RUSSIAN FEDERATION" -"1600749568","1600782335","SK","SVK","SLOVAKIA" -"1600782336","1600880639","RU","RUS","RUSSIAN FEDERATION" -"1600880640","1600913407","AL","ALB","ALBANIA" -"1600913408","1600946175","PL","POL","POLAND" -"1600946176","1600963167","RU","RUS","RUSSIAN FEDERATION" -"1600963168","1600963175","UA","UKR","UKRAINE" -"1600963176","1600963183","RU","RUS","RUSSIAN FEDERATION" -"1600963184","1600963191","BY","BLR","BELARUS" -"1600963192","1600963199","KZ","KAZ","KAZAKHSTAN" -"1600963200","1600967679","RU","RUS","RUSSIAN FEDERATION" -"1600967680","1600967935","BY","BLR","BELARUS" -"1600967936","1600978943","RU","RUS","RUSSIAN FEDERATION" -"1600978944","1601011711","SE","SWE","SWEDEN" -"1601011712","1601044479","UA","UKR","UKRAINE" -"1601044480","1601077247","RU","RUS","RUSSIAN FEDERATION" -"1601077248","1601110015","IT","ITA","ITALY" -"1601110016","1601142783","BG","BGR","BULGARIA" -"1601142784","1601175551","UA","UKR","UKRAINE" -"1601175552","1601699839","DE","DEU","GERMANY" -"1601699840","1602224127","ES","ESP","SPAIN" -"1602224128","1602226175","NL","NLD","NETHERLANDS" -"1602226176","1602228223","GB","GBR","UNITED KINGDOM" -"1602228224","1602230271","DE","DEU","GERMANY" -"1602230272","1602232319","DK","DNK","DENMARK" -"1602232320","1602234367","CH","CHE","SWITZERLAND" -"1602234368","1602234591","FR","FRA","FRANCE" -"1602234592","1602234623","GB","GBR","UNITED KINGDOM" -"1602234624","1602234703","FR","FRA","FRANCE" -"1602234704","1602234848","GB","GBR","UNITED KINGDOM" -"1602234849","1602234895","FR","FRA","FRANCE" -"1602234896","1602234903","GB","GBR","UNITED KINGDOM" -"1602234904","1602234943","FR","FRA","FRANCE" -"1602234944","1602235135","GB","GBR","UNITED KINGDOM" -"1602235136","1602235263","FR","FRA","FRANCE" -"1602235264","1602235647","GB","GBR","UNITED KINGDOM" -"1602235648","1602235775","FR","FRA","FRANCE" -"1602235776","1602235903","GB","GBR","UNITED KINGDOM" -"1602235904","1602235967","ES","ESP","SPAIN" -"1602235968","1602238463","GB","GBR","UNITED KINGDOM" -"1602238464","1602240511","TR","TUR","TURKEY" -"1602240512","1602242559","BY","BLR","BELARUS" -"1602242560","1602244607","FR","FRA","FRANCE" -"1602244608","1602246655","CH","CHE","SWITZERLAND" -"1602246656","1602248703","NL","NLD","NETHERLANDS" -"1602248704","1602250751","BE","BEL","BELGIUM" -"1602250752","1602252799","NO","NOR","NORWAY" -"1602252800","1602254847","SE","SWE","SWEDEN" -"1602254848","1602255103","US","USA","UNITED STATES" -"1602255104","1602255359","HU","HUN","HUNGARY" -"1602255360","1602255615","US","USA","UNITED STATES" -"1602255616","1602256895","HU","HUN","HUNGARY" -"1602256896","1602258943","GB","GBR","UNITED KINGDOM" -"1602258944","1602260991","RU","RUS","RUSSIAN FEDERATION" -"1602260992","1602263039","FR","FRA","FRANCE" -"1602263040","1602265087","ES","ESP","SPAIN" -"1602265088","1602267135","RU","RUS","RUSSIAN FEDERATION" -"1602267136","1602269183","RO","ROM","ROMANIA" -"1602269184","1602271231","RU","RUS","RUSSIAN FEDERATION" -"1602271232","1602273279","MK","MKD","THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA" -"1602273280","1602273535","FR","FRA","FRANCE" -"1602273536","1602275327","IE","IRL","IRELAND" -"1602275328","1602275615","DE","DEU","GERMANY" -"1602275616","1602275647","CY","CYP","CYPRUS" -"1602275648","1602279423","DE","DEU","GERMANY" -"1602279424","1602281471","GB","GBR","UNITED KINGDOM" -"1602281472","1602283519","RU","RUS","RUSSIAN FEDERATION" -"1602283520","1602285567","HR","HRV","CROATIA" -"1602285568","1602287615","RU","RUS","RUSSIAN FEDERATION" -"1602287616","1602289663","DE","DEU","GERMANY" -"1602289664","1602291711","LB","LBN","LEBANON" -"1602291712","1602293759","SA","SAU","SAUDI ARABIA" -"1602293760","1602295807","RU","RUS","RUSSIAN FEDERATION" -"1602295808","1602297855","NL","NLD","NETHERLANDS" -"1602297856","1602298367","IL","ISR","ISRAEL" -"1602298368","1602298431","MT","MLT","MALTA" -"1602298432","1602299903","IL","ISR","ISRAEL" -"1602299904","1602301951","DK","DNK","DENMARK" -"1602301952","1602303999","DE","DEU","GERMANY" -"1602304000","1602306047","RU","RUS","RUSSIAN FEDERATION" -"1602306048","1602308095","GB","GBR","UNITED KINGDOM" -"1602308096","1602310143","RU","RUS","RUSSIAN FEDERATION" -"1602310144","1602312191","NL","NLD","NETHERLANDS" -"1602312192","1602314239","RU","RUS","RUSSIAN FEDERATION" -"1602314240","1602316287","CZ","CZE","CZECH REPUBLIC" -"1602316288","1602318335","GB","GBR","UNITED KINGDOM" -"1602318336","1602320383","ES","ESP","SPAIN" -"1602320384","1602324479","NL","NLD","NETHERLANDS" -"1602324480","1602326527","RU","RUS","RUSSIAN FEDERATION" -"1602326528","1602328575","GB","GBR","UNITED KINGDOM" -"1602328576","1602330623","ES","ESP","SPAIN" -"1602330624","1602336767","RU","RUS","RUSSIAN FEDERATION" -"1602336768","1602338815","GB","GBR","UNITED KINGDOM" -"1602338816","1602340863","EE","EST","ESTONIA" -"1602340864","1602342911","AT","AUT","AUSTRIA" -"1602342912","1602344959","DE","DEU","GERMANY" -"1602344960","1602347007","ES","ESP","SPAIN" -"1602347008","1602349055","PL","POL","POLAND" -"1602349056","1602351103","RU","RUS","RUSSIAN FEDERATION" -"1602351104","1602353151","CZ","CZE","CZECH REPUBLIC" -"1602353152","1602355199","RU","RUS","RUSSIAN FEDERATION" -"1602355200","1602357247","GB","GBR","UNITED KINGDOM" -"1602357248","1602359295","FR","FRA","FRANCE" -"1602359296","1602361343","DE","DEU","GERMANY" -"1602361344","1602363391","FI","FIN","FINLAND" -"1602363392","1602365439","LV","LVA","LATVIA" -"1602365440","1602367487","BE","BEL","BELGIUM" -"1602367488","1602369535","ES","ESP","SPAIN" -"1602369536","1602371583","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1602371584","1602373631","SE","SWE","SWEDEN" -"1602373632","1602375679","GB","GBR","UNITED KINGDOM" -"1602375680","1602377727","BY","BLR","BELARUS" -"1602377728","1602379775","PS","PSE","PALESTINIAN TERRITORY, OCCUPIED" -"1602379776","1602383871","GB","GBR","UNITED KINGDOM" -"1602383873","1602383873","DE","DEU","GERMANY" -"1602384896","1602385151","DE","DEU","GERMANY" -"1602385920","1602387967","AT","AUT","AUSTRIA" -"1602387968","1602390015","RU","RUS","RUSSIAN FEDERATION" -"1602390016","1602392063","IT","ITA","ITALY" -"1602392064","1602394111","GB","GBR","UNITED KINGDOM" -"1602394112","1602396159","FR","FRA","FRANCE" -"1602396160","1602398207","DE","DEU","GERMANY" -"1602398208","1602400255","TR","TUR","TURKEY" -"1602400256","1602402303","RU","RUS","RUSSIAN FEDERATION" -"1602402304","1602404351","LU","LUX","LUXEMBOURG" -"1602404352","1602406399","GB","GBR","UNITED KINGDOM" -"1602406400","1602408447","DE","DEU","GERMANY" -"1602408448","1602410495","DK","DNK","DENMARK" -"1602410496","1602412543","NO","NOR","NORWAY" -"1602412544","1602414591","GB","GBR","UNITED KINGDOM" -"1602414592","1602416639","NL","NLD","NETHERLANDS" -"1602416640","1602418687","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1602418688","1602420735","DE","DEU","GERMANY" -"1602420736","1602424831","RU","RUS","RUSSIAN FEDERATION" -"1602424832","1602426879","FR","FRA","FRANCE" -"1602426880","1602428927","RU","RUS","RUSSIAN FEDERATION" -"1602428928","1602430975","PL","POL","POLAND" -"1602430976","1602433023","IT","ITA","ITALY" -"1602433024","1602433471","HU","HUN","HUNGARY" -"1602433472","1602433479","CY","CYP","CYPRUS" -"1602433480","1602435071","HU","HUN","HUNGARY" -"1602435072","1602437119","IT","ITA","ITALY" -"1602437120","1602439167","GB","GBR","UNITED KINGDOM" -"1602439168","1602441215","RU","RUS","RUSSIAN FEDERATION" -"1602441216","1602443263","GB","GBR","UNITED KINGDOM" -"1602443264","1602445311","RU","RUS","RUSSIAN FEDERATION" -"1602445312","1602447359","DE","DEU","GERMANY" -"1602447360","1602447871","GB","GBR","UNITED KINGDOM" -"1602447872","1602448383","DE","DEU","GERMANY" -"1602448384","1602448895","NL","NLD","NETHERLANDS" -"1602448896","1602449407","GB","GBR","UNITED KINGDOM" -"1602449408","1602451455","LV","LVA","LATVIA" -"1602451456","1602453503","DE","DEU","GERMANY" -"1602453504","1602455551","SK","SVK","SLOVAKIA" -"1602455552","1602457599","FR","FRA","FRANCE" -"1602457600","1602459647","RU","RUS","RUSSIAN FEDERATION" -"1602459648","1602461695","GB","GBR","UNITED KINGDOM" -"1602461696","1602465791","ES","ESP","SPAIN" -"1602465792","1602467839","RU","RUS","RUSSIAN FEDERATION" -"1602467840","1602469887","GI","GIB","GIBRALTAR" -"1602469888","1602471935","AT","AUT","AUSTRIA" -"1602471936","1602473983","SE","SWE","SWEDEN" -"1602473984","1602476031","RU","RUS","RUSSIAN FEDERATION" -"1602476032","1602478079","GB","GBR","UNITED KINGDOM" -"1602478080","1602482175","RU","RUS","RUSSIAN FEDERATION" -"1602482176","1602484223","FR","FRA","FRANCE" -"1602484224","1602486271","GB","GBR","UNITED KINGDOM" -"1602486272","1602748415","UA","UKR","UKRAINE" -"1602748416","1602781183","PT","PRT","PORTUGAL" -"1602781184","1602813951","FR","FRA","FRANCE" -"1602813952","1602846719","RU","RUS","RUSSIAN FEDERATION" -"1602846720","1602879487","GE","GEO","GEORGIA" -"1602879488","1602912255","FR","FRA","FRANCE" -"1602912256","1603010559","RU","RUS","RUSSIAN FEDERATION" -"1603010560","1603014655","FR","FRA","FRANCE" -"1603014656","1603018751","RU","RUS","RUSSIAN FEDERATION" -"1603018752","1603022847","HU","HUN","HUNGARY" -"1603022848","1603026943","GB","GBR","UNITED KINGDOM" -"1603026944","1603031039","SE","SWE","SWEDEN" -"1603031040","1603035135","RU","RUS","RUSSIAN FEDERATION" -"1603035136","1603039231","SY","SYR","SYRIAN ARAB REPUBLIC" -"1603039232","1603043327","RS","SRB","SERBIA" -"1603043328","1603047423","IT","ITA","ITALY" -"1603047424","1603051519","RU","RUS","RUSSIAN FEDERATION" -"1603051520","1603055615","JO","JOR","JORDAN" -"1603055616","1603059711","SE","SWE","SWEDEN" -"1603059712","1603063807","AM","ARM","ARMENIA" -"1603063808","1603067903","BG","BGR","BULGARIA" -"1603067904","1603071999","GB","GBR","UNITED KINGDOM" -"1603072000","1603076095","CZ","CZE","CZECH REPUBLIC" -"1603076096","1603080191","RU","RUS","RUSSIAN FEDERATION" -"1603080192","1603084287","DE","DEU","GERMANY" -"1603084288","1603088383","IT","ITA","ITALY" -"1603088384","1603092479","LB","LBN","LEBANON" -"1603092480","1603100671","NO","NOR","NORWAY" -"1603100672","1603108863","FR","FRA","FRANCE" -"1603108864","1603112959","KZ","KAZ","KAZAKHSTAN" -"1603112960","1603121151","GB","GBR","UNITED KINGDOM" -"1603121152","1603129343","RU","RUS","RUSSIAN FEDERATION" -"1603129344","1603133439","JO","JOR","JORDAN" -"1603133440","1603137535","RU","RUS","RUSSIAN FEDERATION" -"1603137536","1603141631","KW","KWT","KUWAIT" -"1603141632","1603145727","ES","ESP","SPAIN" -"1603145728","1603145935","NL","NLD","NETHERLANDS" -"1603145936","1603145983","IL","ISR","ISRAEL" -"1603145984","1603146015","NL","NLD","NETHERLANDS" -"1603146016","1603146079","CY","CYP","CYPRUS" -"1603146080","1603146111","IL","ISR","ISRAEL" -"1603146112","1603146239","NL","NLD","NETHERLANDS" -"1603146240","1603146751","US","USA","UNITED STATES" -"1603146752","1603146815","NL","NLD","NETHERLANDS" -"1603146816","1603147775","IL","ISR","ISRAEL" -"1603147776","1603147839","US","USA","UNITED STATES" -"1603147840","1603149567","IL","ISR","ISRAEL" -"1603149568","1603149631","US","USA","UNITED STATES" -"1603149632","1603149823","IL","ISR","ISRAEL" -"1603149824","1603153919","RU","RUS","RUSSIAN FEDERATION" -"1603153920","1603158015","NL","NLD","NETHERLANDS" -"1603158016","1603162111","DE","DEU","GERMANY" -"1603162112","1603166207","TJ","TJK","TAJIKISTAN" -"1603166208","1603166751","NL","NLD","NETHERLANDS" -"1603166752","1603166767","MT","MLT","MALTA" -"1603166768","1603166815","NL","NLD","NETHERLANDS" -"1603166816","1603166847","VE","VEN","VENEZUELA" -"1603166848","1603166911","NL","NLD","NETHERLANDS" -"1603166912","1603166943","VE","VEN","VENEZUELA" -"1603166944","1603166959","NL","NLD","NETHERLANDS" -"1603166960","1603166975","US","USA","UNITED STATES" -"1603166976","1603167135","NL","NLD","NETHERLANDS" -"1603167136","1603167167","JP","JPN","JAPAN" -"1603167168","1603170303","NL","NLD","NETHERLANDS" -"1603170304","1603174399","IE","IRL","IRELAND" -"1603174400","1603178495","TR","TUR","TURKEY" -"1603178496","1603182591","DK","DNK","DENMARK" -"1603182592","1603184639","FR","FRA","FRANCE" -"1603184640","1603185663","GB","GBR","UNITED KINGDOM" -"1603185664","1603186687","FR","FRA","FRANCE" -"1603186688","1603190783","IT","ITA","ITALY" -"1603190784","1603194879","RU","RUS","RUSSIAN FEDERATION" -"1603194880","1603198975","IT","ITA","ITALY" -"1603198976","1603203071","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1603203072","1603207167","NL","NLD","NETHERLANDS" -"1603207168","1603215359","RU","RUS","RUSSIAN FEDERATION" -"1603215360","1603219455","DE","DEU","GERMANY" -"1603219456","1603220495","CH","CHE","SWITZERLAND" -"1603220496","1603220503","LI","LIE","LIECHTENSTEIN" -"1603220504","1603223551","CH","CHE","SWITZERLAND" -"1603223552","1603223615","FR","FRA","FRANCE" -"1603223616","1603223631","SE","SWE","SWEDEN" -"1603223632","1603223703","FR","FRA","FRANCE" -"1603223704","1603223711","SE","SWE","SWEDEN" -"1603223712","1603223759","FR","FRA","FRANCE" -"1603223760","1603223807","SE","SWE","SWEDEN" -"1603223808","1603223871","FR","FRA","FRANCE" -"1603223872","1603224319","SE","SWE","SWEDEN" -"1603224320","1603224335","GB","GBR","UNITED KINGDOM" -"1603224336","1603226623","SE","SWE","SWEDEN" -"1603226624","1603226879","FR","FRA","FRANCE" -"1603226880","1603227647","SE","SWE","SWEDEN" -"1603227648","1603231743","AT","AUT","AUSTRIA" -"1603231744","1603235839","IT","ITA","ITALY" -"1603235840","1603239935","RU","RUS","RUSSIAN FEDERATION" -"1603239936","1603244031","CZ","CZE","CZECH REPUBLIC" -"1603244032","1603248127","SI","SVN","SLOVENIA" -"1603248128","1603252223","DE","DEU","GERMANY" -"1603252224","1603256319","RU","RUS","RUSSIAN FEDERATION" -"1603256320","1603260415","SE","SWE","SWEDEN" -"1603260416","1603264511","RU","RUS","RUSSIAN FEDERATION" -"1603264512","1603268607","AT","AUT","AUSTRIA" -"1603268608","1603272703","PL","POL","POLAND" -"1603272704","1603796991","GB","GBR","UNITED KINGDOM" -"1603796992","1603813375","RU","RUS","RUSSIAN FEDERATION" -"1603813376","1603829759","CH","CHE","SWITZERLAND" -"1603829760","1603846143","NL","NLD","NETHERLANDS" -"1603846144","1603862527","GB","GBR","UNITED KINGDOM" -"1603862528","1603878911","EE","EST","ESTONIA" -"1603878912","1603895295","MD","MDA","REPUBLIC OF MOLDOVA" -"1603895296","1603928063","RU","RUS","RUSSIAN FEDERATION" -"1603928064","1603944447","DK","DNK","DENMARK" -"1603944448","1603977215","RU","RUS","RUSSIAN FEDERATION" -"1603977216","1603980463","GB","GBR","UNITED KINGDOM" -"1603980464","1603980479","CH","CHE","SWITZERLAND" -"1603980480","1603981823","GB","GBR","UNITED KINGDOM" -"1603981824","1603982079","IE","IRL","IRELAND" -"1603982080","1603982655","GB","GBR","UNITED KINGDOM" -"1603982656","1603982687","DK","DNK","DENMARK" -"1603982688","1603982719","AN","ANT","NETHERLANDS ANTILLES" -"1603982720","1603982783","US","USA","UNITED STATES" -"1603982784","1603982847","AN","ANT","NETHERLANDS ANTILLES" -"1603982848","1603984895","GB","GBR","UNITED KINGDOM" -"1603984896","1603985151","PT","PRT","PORTUGAL" -"1603985152","1603986687","GB","GBR","UNITED KINGDOM" -"1603986688","1603986751","TR","TUR","TURKEY" -"1603986752","1603990271","GB","GBR","UNITED KINGDOM" -"1603990272","1603990527","SA","SAU","SAUDI ARABIA" -"1603990528","1603993599","GB","GBR","UNITED KINGDOM" -"1603993600","1604009983","ME","MNE","MONTENEGRO" -"1604009984","1604026367","PL","POL","POLAND" -"1604026368","1604042751","NL","NLD","NETHERLANDS" -"1604042752","1604059135","SE","SWE","SWEDEN" -"1604059136","1604075519","MK","MKD","THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA" -"1604075520","1604091903","RU","RUS","RUSSIAN FEDERATION" -"1604091904","1604108287","BA","BIH","BOSNIA AND HERZEGOVINA" -"1604108288","1604141055","DE","DEU","GERMANY" -"1604141056","1604157439","RO","ROM","ROMANIA" -"1604157440","1604190207","FR","FRA","FRANCE" -"1604190208","1604206591","UA","UKR","UKRAINE" -"1604206592","1604222975","PL","POL","POLAND" -"1604222976","1604239359","BG","BGR","BULGARIA" -"1604239360","1604255743","RU","RUS","RUSSIAN FEDERATION" -"1604255744","1604272127","SY","SYR","SYRIAN ARAB REPUBLIC" -"1604272128","1604288511","IQ","IRQ","IRAQ" -"1604288512","1604304895","RU","RUS","RUSSIAN FEDERATION" -"1604304896","1604321279","SI","SVN","SLOVENIA" -"1604321280","1604386815","PL","POL","POLAND" -"1604386816","1604452351","RU","RUS","RUSSIAN FEDERATION" -"1604452352","1604517887","RO","ROM","ROMANIA" -"1604517888","1604583423","RU","RUS","RUSSIAN FEDERATION" -"1604583424","1604616191","UA","UKR","UKRAINE" -"1604616192","1604632320","RU","RUS","RUSSIAN FEDERATION" -"1604632321","1604632575","UA","UKR","UKRAINE" -"1604632576","1604647679","RU","RUS","RUSSIAN FEDERATION" -"1604647680","1604647935","UA","UKR","UKRAINE" -"1604647936","1604648191","RU","RUS","RUSSIAN FEDERATION" -"1604648192","1604648959","UA","UKR","UKRAINE" -"1604648960","1604714495","RU","RUS","RUSSIAN FEDERATION" -"1604714496","1604780031","DK","DNK","DENMARK" -"1604780032","1604845567","RU","RUS","RUSSIAN FEDERATION" -"1604845568","1604853759","FR","FRA","FRANCE" -"1604853760","1604861951","HU","HUN","HUNGARY" -"1604861952","1604870143","RS","SRB","SERBIA" -"1604870144","1604878335","HR","HRV","CROATIA" -"1604878336","1604886655","DE","DEU","GERMANY" -"1604886656","1604886783","RU","RUS","RUSSIAN FEDERATION" -"1604886784","1604887039","DE","DEU","GERMANY" -"1604887040","1604887295","KZ","KAZ","KAZAKHSTAN" -"1604887296","1604887807","DE","DEU","GERMANY" -"1604887808","1604888063","BY","BLR","BELARUS" -"1604888064","1604889599","TR","TUR","TURKEY" -"1604889600","1604889855","DE","DEU","GERMANY" -"1604889856","1604890111","BY","BLR","BELARUS" -"1604890112","1604890367","RU","RUS","RUSSIAN FEDERATION" -"1604890368","1604890879","TR","TUR","TURKEY" -"1604890880","1604891391","BY","BLR","BELARUS" -"1604891392","1604891647","DE","DEU","GERMANY" -"1604891648","1604891903","BY","BLR","BELARUS" -"1604891904","1604892031","DE","DEU","GERMANY" -"1604892032","1604892159","RU","RUS","RUSSIAN FEDERATION" -"1604892160","1604892927","DE","DEU","GERMANY" -"1604892928","1604893183","HK","HKG","HONG KONG" -"1604893184","1604893311","RU","RUS","RUSSIAN FEDERATION" -"1604893312","1604893375","TR","TUR","TURKEY" -"1604893376","1604893439","DE","DEU","GERMANY" -"1604893440","1604893695","TR","TUR","TURKEY" -"1604893696","1604893951","DE","DEU","GERMANY" -"1604893952","1604894463","TR","TUR","TURKEY" -"1604894464","1604894719","BY","BLR","BELARUS" -"1604894720","1604902911","CZ","CZE","CZECH REPUBLIC" -"1604902912","1604911103","BG","BGR","BULGARIA" -"1604911104","1604919295","UA","UKR","UKRAINE" -"1604919296","1604927487","NO","NOR","NORWAY" -"1604927488","1604935679","IT","ITA","ITALY" -"1604935680","1604952063","RU","RUS","RUSSIAN FEDERATION" -"1604952064","1604958719","DE","DEU","GERMANY" -"1604958720","1604959231","RU","RUS","RUSSIAN FEDERATION" -"1604959232","1604959743","DE","DEU","GERMANY" -"1604959744","1604960255","RU","RUS","RUSSIAN FEDERATION" -"1604960256","1604968447","BG","BGR","BULGARIA" -"1604968448","1604976639","ES","ESP","SPAIN" -"1604976640","1604993023","FR","FRA","FRANCE" -"1604993024","1605001215","NL","NLD","NETHERLANDS" -"1605001216","1605025791","RU","RUS","RUSSIAN FEDERATION" -"1605025792","1605033983","IQ","IRQ","IRAQ" -"1605033984","1605042175","SK","SVK","SLOVAKIA" -"1605042176","1605050367","RU","RUS","RUSSIAN FEDERATION" -"1605050368","1605052039","IT","ITA","ITALY" -"1605052040","1605052047","DE","DEU","GERMANY" -"1605052048","1605058559","IT","ITA","ITALY" -"1605058560","1605066751","HU","HUN","HUNGARY" -"1605066752","1605074943","PL","POL","POLAND" -"1605074944","1605083135","FR","FRA","FRANCE" -"1605083136","1605091327","BE","BEL","BELGIUM" -"1605091328","1605099519","PL","POL","POLAND" -"1605099520","1605107711","RU","RUS","RUSSIAN FEDERATION" -"1605107712","1605115903","GB","GBR","UNITED KINGDOM" -"1605115904","1605124095","RU","RUS","RUSSIAN FEDERATION" -"1605124096","1605124351","US","USA","UNITED STATES" -"1605124352","1605125327","GB","GBR","UNITED KINGDOM" -"1605125328","1605125335","US","USA","UNITED STATES" -"1605125336","1605125375","GB","GBR","UNITED KINGDOM" -"1605125376","1605125439","US","USA","UNITED STATES" -"1605125440","1605125631","GB","GBR","UNITED KINGDOM" -"1605125632","1605126143","DE","DEU","GERMANY" -"1605126144","1605126911","US","USA","UNITED STATES" -"1605126912","1605132287","GB","GBR","UNITED KINGDOM" -"1605132288","1605148671","RU","RUS","RUSSIAN FEDERATION" -"1605148672","1605156863","PT","PRT","PORTUGAL" -"1605156864","1605165055","JO","JOR","JORDAN" -"1605165056","1605173247","GB","GBR","UNITED KINGDOM" -"1605173248","1605181439","TR","TUR","TURKEY" -"1605181440","1605189631","LT","LTU","LITHUANIA" -"1605189632","1605189663","SK","SVK","SLOVAKIA" -"1605189664","1605197823","CZ","CZE","CZECH REPUBLIC" -"1605197824","1605206015","DE","DEU","GERMANY" -"1605206016","1605214207","RU","RUS","RUSSIAN FEDERATION" -"1605214208","1605222399","TR","TUR","TURKEY" -"1605222400","1605230591","CZ","CZE","CZECH REPUBLIC" -"1605230592","1605238783","TR","TUR","TURKEY" -"1605238784","1605246975","IT","ITA","ITALY" -"1605246976","1605255167","PL","POL","POLAND" -"1605255168","1605263359","HU","HUN","HUNGARY" -"1605263360","1605271551","RU","RUS","RUSSIAN FEDERATION" -"1605271552","1605279743","DE","DEU","GERMANY" -"1605279744","1605287935","FR","FRA","FRANCE" -"1605287936","1605296127","RU","RUS","RUSSIAN FEDERATION" -"1605296128","1605304319","CH","CHE","SWITZERLAND" -"1605304320","1605312511","PL","POL","POLAND" -"1605312512","1605320703","IL","ISR","ISRAEL" -"1605320704","1605328895","KW","KWT","KUWAIT" -"1605328896","1605337087","FI","FIN","FINLAND" -"1605337088","1605345279","GB","GBR","UNITED KINGDOM" -"1605345280","1605353471","FR","FRA","FRANCE" -"1605353472","1605361663","GB","GBR","UNITED KINGDOM" -"1605361664","1605369855","RU","RUS","RUSSIAN FEDERATION" -"1605369856","1605402623","FR","FRA","FRANCE" -"1605402624","1605435391","SI","SVN","SLOVENIA" -"1605435392","1605468159","GB","GBR","UNITED KINGDOM" -"1605468160","1605500927","RO","ROM","ROMANIA" -"1605500928","1605533695","PL","POL","POLAND" -"1605533696","1605566463","HR","HRV","CROATIA" -"1605566464","1605599231","RU","RUS","RUSSIAN FEDERATION" -"1605599232","1605631999","GR","GRC","GREECE" -"1605632000","1605664767","RS","SRB","SERBIA" -"1605664768","1605697535","MK","MKD","THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA" -"1605697536","1605795839","RU","RUS","RUSSIAN FEDERATION" -"1605795840","1605828607","BE","BEL","BELGIUM" -"1605828608","1605861375","RU","RUS","RUSSIAN FEDERATION" -"1605861376","1605894143","TR","TUR","TURKEY" -"1605894144","1606156287","RO","ROM","ROMANIA" -"1606156288","1606418431","RU","RUS","RUSSIAN FEDERATION" -"1606418432","1607467007","SE","SWE","SWEDEN" -"1607467008","1607532543","DE","DEU","GERMANY" -"1607532544","1607570431","SE","SWE","SWEDEN" -"1607570432","1607571455","DK","DNK","DENMARK" -"1607571456","1607585791","SE","SWE","SWEDEN" -"1607585792","1607587839","DK","DNK","DENMARK" -"1607587840","1607588863","SE","SWE","SWEDEN" -"1607588864","1607598079","DK","DNK","DENMARK" -"1607598080","1607610367","IT","ITA","ITALY" -"1607610368","1607612415","IE","IRL","IRELAND" -"1607612416","1607614463","IT","ITA","ITALY" -"1607614464","1607616511","GR","GRC","GREECE" -"1607616512","1607663615","IT","ITA","ITALY" -"1607663616","1607729151","NL","NLD","NETHERLANDS" -"1607729152","1607794687","SY","SYR","SYRIAN ARAB REPUBLIC" -"1607794688","1607860223","RU","RUS","RUSSIAN FEDERATION" -"1607860224","1607925759","ES","ESP","SPAIN" -"1607925760","1607926783","RU","RUS","RUSSIAN FEDERATION" -"1607926784","1607927807","NL","NLD","NETHERLANDS" -"1607927808","1607929855","RU","RUS","RUSSIAN FEDERATION" -"1607929856","1607930879","SE","SWE","SWEDEN" -"1607930880","1607933951","PL","POL","POLAND" -"1607933952","1607934975","DE","DEU","GERMANY" -"1607934976","1607935999","UA","UKR","UKRAINE" -"1607937024","1607938047","LV","LVA","LATVIA" -"1607938048","1607939071","UA","UKR","UKRAINE" -"1607939072","1607940095","PL","POL","POLAND" -"1607940096","1607941119","RU","RUS","RUSSIAN FEDERATION" -"1607942144","1607944191","RU","RUS","RUSSIAN FEDERATION" -"1607944192","1607945215","FR","FRA","FRANCE" -"1607946240","1607947263","UA","UKR","UKRAINE" -"1607948288","1607949311","GB","GBR","UNITED KINGDOM" -"1607949312","1607950335","UA","UKR","UKRAINE" -"1607952384","1607953407","UA","UKR","UKRAINE" -"1607956480","1607957503","ES","ESP","SPAIN" -"1607957504","1607958527","UA","UKR","UKRAINE" -"1607958528","1607959551","PS","PSE","PALESTINIAN TERRITORY, OCCUPIED" -"1607959552","1607960575","EE","EST","ESTONIA" -"1607960576","1607962623","RU","RUS","RUSSIAN FEDERATION" -"1607962624","1607963647","UA","UKR","UKRAINE" -"1607963648","1607965695","RU","RUS","RUSSIAN FEDERATION" -"1607965696","1607966719","UA","UKR","UKRAINE" -"1607966720","1607967743","RU","RUS","RUSSIAN FEDERATION" -"1607968768","1607969791","SE","SWE","SWEDEN" -"1607969792","1607972863","RU","RUS","RUSSIAN FEDERATION" -"1607974912","1607975935","LV","LVA","LATVIA" -"1607976960","1607977983","KZ","KAZ","KAZAKHSTAN" -"1607977984","1607979007","NL","NLD","NETHERLANDS" -"1607979008","1607980031","RU","RUS","RUSSIAN FEDERATION" -"1607980032","1607981055","DE","DEU","GERMANY" -"1607981056","1607982079","UA","UKR","UKRAINE" -"1607982080","1607983103","RU","RUS","RUSSIAN FEDERATION" -"1607983104","1607984127","GB","GBR","UNITED KINGDOM" -"1607984128","1607985151","RU","RUS","RUSSIAN FEDERATION" -"1607986176","1607987199","UA","UKR","UKRAINE" -"1607987200","1607988223","ES","ESP","SPAIN" -"1607988224","1607989247","KG","KGZ","KYRGYZSTAN" -"1607990272","1607991295","RU","RUS","RUSSIAN FEDERATION" -"1607991296","1608122367","UA","UKR","UKRAINE" -"1608122368","1608253439","RO","ROM","ROMANIA" -"1608253440","1608384511","RU","RUS","RUSSIAN FEDERATION" -"1608384512","1608515583","DE","DEU","GERMANY" -"1608515584","1610612735","IT","ITA","ITALY" -"1610612736","1610678271","US","USA","UNITED STATES" -"1610678272","1610743807","CA","CAN","CANADA" -"1610743808","1611153407","US","USA","UNITED STATES" -"1611169792","1611227135","US","USA","UNITED STATES" -"1611227136","1611235327","CA","CAN","CANADA" -"1611235328","1611923455","US","USA","UNITED STATES" -"1611923456","1612185599","CA","CAN","CANADA" -"1612185600","1612611583","US","USA","UNITED STATES" -"1612611584","1612636159","CA","CAN","CANADA" -"1612636160","1613451263","US","USA","UNITED STATES" -"1613455360","1613459455","US","USA","UNITED STATES" -"1613463552","1613467647","US","USA","UNITED STATES" -"1613471744","1613479935","JM","JAM","JAMAICA" -"1613479936","1613488127","US","USA","UNITED STATES" -"1613488128","1613492223","CA","CAN","CANADA" -"1613496320","1613504511","US","USA","UNITED STATES" -"1613512704","1613529087","CA","CAN","CANADA" -"1613529088","1613545471","US","USA","UNITED STATES" -"1613545472","1613565951","CA","CAN","CANADA" -"1613565952","1613570047","US","USA","UNITED STATES" -"1613570048","1613574143","CA","CAN","CANADA" -"1613574144","1613586431","US","USA","UNITED STATES" -"1613586432","1613590527","CA","CAN","CANADA" -"1613590528","1613606911","US","USA","UNITED STATES" -"1613606912","1613615103","CA","CAN","CANADA" -"1613615104","1613635583","US","USA","UNITED STATES" -"1613635584","1613643775","CA","CAN","CANADA" -"1613643776","1613676543","US","USA","UNITED STATES" -"1613676544","1613680639","CA","CAN","CANADA" -"1613680640","1613737983","US","USA","UNITED STATES" -"1613737984","1613742079","CA","CAN","CANADA" -"1613742080","1613758463","US","USA","UNITED STATES" -"1613758464","1614282751","CA","CAN","CANADA" -"1614282752","1614741503","US","USA","UNITED STATES" -"1614741504","1614757887","CA","CAN","CANADA" -"1614757888","1614774271","US","USA","UNITED STATES" -"1614774272","1614778367","CA","CAN","CANADA" -"1614790656","1618804735","US","USA","UNITED STATES" -"1619001344","1632305151","US","USA","UNITED STATES" -"1632305152","1632321535","CA","CAN","CANADA" -"1632321536","1632342015","US","USA","UNITED STATES" -"1632346112","1632354303","US","USA","UNITED STATES" -"1632354304","1632362495","CA","CAN","CANADA" -"1632362496","1634414591","US","USA","UNITED STATES" -"1634414592","1634418687","CA","CAN","CANADA" -"1634418688","1634447359","US","USA","UNITED STATES" -"1634447360","1634451455","CA","CAN","CANADA" -"1634451456","1634455551","US","USA","UNITED STATES" -"1634455552","1634459647","CA","CAN","CANADA" -"1634459648","1634467839","US","USA","UNITED STATES" -"1634467840","1634729983","CA","CAN","CANADA" -"1634729984","1652293631","US","USA","UNITED STATES" -"1652293632","1652310015","CA","CAN","CANADA" -"1652310016","1653501951","US","USA","UNITED STATES" -"1653506048","1653534719","US","USA","UNITED STATES" -"1653534720","1653538815","CA","CAN","CANADA" -"1653538816","1653542911","US","USA","UNITED STATES" -"1653547008","1653555199","US","USA","UNITED STATES" -"1653555200","1653567487","CA","CAN","CANADA" -"1653567488","1653571583","US","USA","UNITED STATES" -"1653571584","1653575679","CA","CAN","CANADA" -"1653575680","1653592063","US","USA","UNITED STATES" -"1653592064","1653596159","CA","CAN","CANADA" -"1653596160","1653600255","US","USA","UNITED STATES" -"1653600256","1653604351","CA","CAN","CANADA" -"1653604352","1654542335","US","USA","UNITED STATES" -"1654542336","1654546431","CA","CAN","CANADA" -"1654546432","1654550527","VG","VGB","VIRGIN ISLANDS, BRITISH" -"1654550528","1654554623","US","USA","UNITED STATES" -"1654554624","1654558719","CA","CAN","CANADA" -"1654558720","1654587391","US","USA","UNITED STATES" -"1654652928","1673527295","US","USA","UNITED STATES" -"1673527296","1673560063","CA","CAN","CANADA" -"1673560064","1673576447","US","USA","UNITED STATES" -"1673592832","1673986047","US","USA","UNITED STATES" -"1673986048","1674051583","CA","CAN","CANADA" -"1674051584","1674575871","US","USA","UNITED STATES" -"1674575872","1677721599","CA","CAN","CANADA" -"1811939328","1815724031","US","USA","UNITED STATES" -"1816133632","1820327935","US","USA","UNITED STATES" -"1828716544","1830813695","FR","FRA","FRANCE" -"1830813696","1831337983","NL","NLD","NETHERLANDS" -"1831337984","1831862271","DE","DEU","GERMANY" -"1831862272","1832124415","PT","PRT","PORTUGAL" -"1832124416","1832386559","IT","ITA","ITALY" -"1832386560","1832517631","DK","DNK","DENMARK" -"1832517632","1832648703","SE","SWE","SWEDEN" -"1832648704","1832681471","HR","HRV","CROATIA" -"1832681472","1832714239","RU","RUS","RUSSIAN FEDERATION" -"1832714240","1832747007","HU","HUN","HUNGARY" -"1832747008","1832779775","RU","RUS","RUSSIAN FEDERATION" -"1832779776","1832812543","FR","FRA","FRANCE" -"1832812544","1832845311","RU","RUS","RUSSIAN FEDERATION" -"1832845312","1832878079","BH","BHR","BAHRAIN" -"1832910848","1833172991","IL","ISR","ISRAEL" -"1833172992","1833177087","GB","GBR","UNITED KINGDOM" -"1833177088","1833179135","RU","RUS","RUSSIAN FEDERATION" -"1833179136","1833181183","IT","ITA","ITALY" -"1833181184","1833183231","GB","GBR","UNITED KINGDOM" -"1833183232","1833185279","UA","UKR","UKRAINE" -"1833185280","1833187327","DE","DEU","GERMANY" -"1833187328","1833189375","NL","NLD","NETHERLANDS" -"1833189376","1833191423","GB","GBR","UNITED KINGDOM" -"1833191424","1833193471","RU","RUS","RUSSIAN FEDERATION" -"1833193472","1833195519","ES","ESP","SPAIN" -"1833195520","1833197567","NO","NOR","NORWAY" -"1833197568","1833199615","DE","DEU","GERMANY" -"1833199616","1833201663","AT","AUT","AUSTRIA" -"1833201664","1833203711","RU","RUS","RUSSIAN FEDERATION" -"1833203712","1833205759","AM","ARM","ARMENIA" -"1833205760","1833207807","FI","FIN","FINLAND" -"1833207808","1833209855","RU","RUS","RUSSIAN FEDERATION" -"1833209856","1833211903","GR","GRC","GREECE" -"1833211904","1833213951","IT","ITA","ITALY" -"1833213952","1833215999","BE","BEL","BELGIUM" -"1833216000","1833218047","RU","RUS","RUSSIAN FEDERATION" -"1833218048","1833220095","NO","NOR","NORWAY" -"1833220096","1833222143","RU","RUS","RUSSIAN FEDERATION" -"1833222144","1833224191","GB","GBR","UNITED KINGDOM" -"1833224192","1833228287","RU","RUS","RUSSIAN FEDERATION" -"1833228288","1833232383","DE","DEU","GERMANY" -"1833232384","1833234431","TJ","TJK","TAJIKISTAN" -"1833234432","1833236479","GB","GBR","UNITED KINGDOM" -"1833236480","1833238527","FI","FIN","FINLAND" -"1833238528","1833240575","AL","ALB","ALBANIA" -"1833240576","1833242623","ES","ESP","SPAIN" -"1833242624","1833246719","RU","RUS","RUSSIAN FEDERATION" -"1833246720","1833248767","FI","FIN","FINLAND" -"1833248768","1833250815","MK","MKD","THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA" -"1833250816","1833254911","GB","GBR","UNITED KINGDOM" -"1833254912","1833256047","DE","DEU","GERMANY" -"1833256048","1833256063","US","USA","UNITED STATES" -"1833256064","1833256151","DE","DEU","GERMANY" -"1833256152","1833256155","US","USA","UNITED STATES" -"1833256156","1833256159","DE","DEU","GERMANY" -"1833256160","1833256175","GB","GBR","UNITED KINGDOM" -"1833256176","1833256191","DE","DEU","GERMANY" -"1833256192","1833256223","US","USA","UNITED STATES" -"1833256224","1833256255","DE","DEU","GERMANY" -"1833256256","1833256271","GB","GBR","UNITED KINGDOM" -"1833256272","1833256447","DE","DEU","GERMANY" -"1833256448","1833256479","US","USA","UNITED STATES" -"1833256480","1833256511","DE","DEU","GERMANY" -"1833256512","1833256543","US","USA","UNITED STATES" -"1833256544","1833256703","DE","DEU","GERMANY" -"1833256704","1833256735","US","USA","UNITED STATES" -"1833256736","1833256799","DE","DEU","GERMANY" -"1833256800","1833256831","US","USA","UNITED STATES" -"1833256832","1833256959","DE","DEU","GERMANY" -"1833256960","1833261055","GB","GBR","UNITED KINGDOM" -"1833263104","1833265151","DE","DEU","GERMANY" -"1833265152","1833267199","GB","GBR","UNITED KINGDOM" -"1833267200","1833269247","HU","HUN","HUNGARY" -"1833269248","1833271295","FI","FIN","FINLAND" -"1833271296","1833273343","IT","ITA","ITALY" -"1833275392","1833277439","GB","GBR","UNITED KINGDOM" -"1833277440","1833279487","CH","CHE","SWITZERLAND" -"1833279488","1833281535","AL","ALB","ALBANIA" -"1833281536","1833283583","AT","AUT","AUSTRIA" -"1833283584","1833285631","RU","RUS","RUSSIAN FEDERATION" -"1833285632","1833289727","FR","FRA","FRANCE" -"1833289728","1833291775","IT","ITA","ITALY" -"1833291776","1833293823","CZ","CZE","CZECH REPUBLIC" -"1833293824","1833295871","BE","BEL","BELGIUM" -"1833295872","1833297919","NL","NLD","NETHERLANDS" -"1833297920","1833299967","GB","GBR","UNITED KINGDOM" -"1833299968","1833302015","LU","LUX","LUXEMBOURG" -"1833302016","1833304063","AT","AUT","AUSTRIA" -"1833304064","1833308159","NL","NLD","NETHERLANDS" -"1833308160","1833308239","FR","FRA","FRANCE" -"1833308240","1833308263","NL","NLD","NETHERLANDS" -"1833308264","1833310207","FR","FRA","FRANCE" -"1833310208","1833312255","RU","RUS","RUSSIAN FEDERATION" -"1833312256","1833314303","ES","ESP","SPAIN" -"1833314304","1833316351","GB","GBR","UNITED KINGDOM" -"1833316352","1833318399","DK","DNK","DENMARK" -"1833318400","1833320447","GB","GBR","UNITED KINGDOM" -"1833320448","1833322495","AE","ARE","UNITED ARAB EMIRATES" -"1833322496","1833324543","IT","ITA","ITALY" -"1833324544","1833326591","NO","NOR","NORWAY" -"1833326592","1833328639","US","USA","UNITED STATES" -"1833328640","1833330687","AT","AUT","AUSTRIA" -"1833330688","1833332735","UA","UKR","UKRAINE" -"1833332736","1833334783","CH","CHE","SWITZERLAND" -"1833334784","1833336831","IT","ITA","ITALY" -"1833336832","1833336959","ES","ESP","SPAIN" -"1833336960","1833336975","FR","FRA","FRANCE" -"1833336976","1833338879","ES","ESP","SPAIN" -"1833338880","1833342975","GB","GBR","UNITED KINGDOM" -"1833342976","1833345023","CH","CHE","SWITZERLAND" -"1833345024","1833347071","FI","FIN","FINLAND" -"1833347072","1833349119","FR","FRA","FRANCE" -"1833349120","1833351167","FI","FIN","FINLAND" -"1833351168","1833353215","RU","RUS","RUSSIAN FEDERATION" -"1833353216","1833355263","DE","DEU","GERMANY" -"1833355264","1833357311","IT","ITA","ITALY" -"1833357312","1833359359","IE","IRL","IRELAND" -"1833359360","1833361407","DE","DEU","GERMANY" -"1833361408","1833363455","GB","GBR","UNITED KINGDOM" -"1833363456","1833365503","RU","RUS","RUSSIAN FEDERATION" -"1833365504","1833367551","IT","ITA","ITALY" -"1833367552","1833369599","RU","RUS","RUSSIAN FEDERATION" -"1833369600","1833370111","NL","NLD","NETHERLANDS" -"1833370112","1833370367","BG","BGR","BULGARIA" -"1833370368","1833370623","SE","SWE","SWEDEN" -"1833370624","1833371647","NL","NLD","NETHERLANDS" -"1833371648","1833373695","RU","RUS","RUSSIAN FEDERATION" -"1833373696","1833377791","DE","DEU","GERMANY" -"1833377792","1833379839","KZ","KAZ","KAZAKHSTAN" -"1833379840","1833381887","PT","PRT","PORTUGAL" -"1833381888","1833383935","NL","NLD","NETHERLANDS" -"1833383936","1833385983","DK","DNK","DENMARK" -"1833385984","1833388031","SK","SVK","SLOVAKIA" -"1833388032","1833390079","RU","RUS","RUSSIAN FEDERATION" -"1833390080","1833392127","GB","GBR","UNITED KINGDOM" -"1833392128","1833396223","CH","CHE","SWITZERLAND" -"1833396224","1833398271","NL","NLD","NETHERLANDS" -"1833398272","1833400319","DE","DEU","GERMANY" -"1833400320","1833402367","GB","GBR","UNITED KINGDOM" -"1833402368","1833406463","FR","FRA","FRANCE" -"1833406464","1833408511","GB","GBR","UNITED KINGDOM" -"1833408512","1833410559","RS","SRB","SERBIA" -"1833410560","1833412607","PT","PRT","PORTUGAL" -"1833412608","1833414655","GB","GBR","UNITED KINGDOM" -"1833414656","1833416703","RU","RUS","RUSSIAN FEDERATION" -"1833416704","1833418751","NL","NLD","NETHERLANDS" -"1833418752","1833422847","RU","RUS","RUSSIAN FEDERATION" -"1833422848","1833424895","CZ","CZE","CZECH REPUBLIC" -"1833424896","1833426943","DE","DEU","GERMANY" -"1833426944","1833428991","KG","KGZ","KYRGYZSTAN" -"1833428992","1833431039","IT","ITA","ITALY" -"1833431040","1833433087","RU","RUS","RUSSIAN FEDERATION" -"1833433088","1833435135","GB","GBR","UNITED KINGDOM" -"1833435136","1833439231","CZ","CZE","CZECH REPUBLIC" -"1833439232","1833443327","GB","GBR","UNITED KINGDOM" -"1833443328","1833447423","NL","NLD","NETHERLANDS" -"1833447424","1833449471","RS","SRB","SERBIA" -"1833449472","1833451519","CS","SCG","SERBIA AND MONTENEGRO" -"1833451520","1833455615","RU","RUS","RUSSIAN FEDERATION" -"1833455616","1833459711","NL","NLD","NETHERLANDS" -"1833459712","1833463807","ME","MNE","MONTENEGRO" -"1833463808","1833467903","UA","UKR","UKRAINE" -"1833467904","1833468031","RU","RUS","RUSSIAN FEDERATION" -"1833468032","1833468063","CH","CHE","SWITZERLAND" -"1833468064","1833468079","RU","RUS","RUSSIAN FEDERATION" -"1833468080","1833471999","CH","CHE","SWITZERLAND" -"1833476096","1833484287","NL","NLD","NETHERLANDS" -"1833484288","1833488383","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1833488384","1833492479","GB","GBR","UNITED KINGDOM" -"1833492480","1833504767","RU","RUS","RUSSIAN FEDERATION" -"1833504768","1833508863","DE","DEU","GERMANY" -"1833508864","1833512959","RU","RUS","RUSSIAN FEDERATION" -"1833512960","1833517055","DE","DEU","GERMANY" -"1833517056","1833521151","ES","ESP","SPAIN" -"1833521152","1833525247","IT","ITA","ITALY" -"1833525248","1833529343","LV","LVA","LATVIA" -"1833529344","1833533439","GB","GBR","UNITED KINGDOM" -"1833533440","1833537535","RU","RUS","RUSSIAN FEDERATION" -"1833537536","1833541631","AT","AUT","AUSTRIA" -"1833541632","1833542143","IL","ISR","ISRAEL" -"1833542144","1833542655","GB","GBR","UNITED KINGDOM" -"1833542656","1833542911","IN","IND","INDIA" -"1833542912","1833545727","GB","GBR","UNITED KINGDOM" -"1833545728","1833549823","IT","ITA","ITALY" -"1833549824","1833553919","RU","RUS","RUSSIAN FEDERATION" -"1833553920","1833558015","CZ","CZE","CZECH REPUBLIC" -"1833558016","1833562111","RO","ROM","ROMANIA" -"1833562112","1833566207","PS","PSE","PALESTINIAN TERRITORY, OCCUPIED" -"1833566208","1833570303","SE","SWE","SWEDEN" -"1833570304","1833574399","NL","NLD","NETHERLANDS" -"1833574400","1833578495","YE","YEM","YEMEN" -"1833578496","1833582591","HU","HUN","HUNGARY" -"1833582592","1833586687","TJ","TJK","TAJIKISTAN" -"1833586688","1833590783","FR","FRA","FRANCE" -"1833590784","1833594879","PL","POL","POLAND" -"1833594880","1833603071","RU","RUS","RUSSIAN FEDERATION" -"1833603072","1833607167","SK","SVK","SLOVAKIA" -"1833607168","1833611263","RU","RUS","RUSSIAN FEDERATION" -"1833611264","1833615359","NO","NOR","NORWAY" -"1833615360","1833619455","US","USA","UNITED STATES" -"1833619456","1833623551","RU","RUS","RUSSIAN FEDERATION" -"1833623552","1833627647","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1833627648","1833631743","GB","GBR","UNITED KINGDOM" -"1833631744","1833635839","CZ","CZE","CZECH REPUBLIC" -"1833635840","1833639935","DE","DEU","GERMANY" -"1833639936","1833644031","AM","ARM","ARMENIA" -"1833644032","1833648127","TJ","TJK","TAJIKISTAN" -"1833648128","1833652223","LB","LBN","LEBANON" -"1833652224","1833659903","DE","DEU","GERMANY" -"1833659904","1833659919","NA","NAM","NAMIBIA" -"1833659920","1833660415","DE","DEU","GERMANY" -"1833660416","1833664511","IT","ITA","ITALY" -"1833664512","1833668607","RU","RUS","RUSSIAN FEDERATION" -"1833668608","1833672703","CZ","CZE","CZECH REPUBLIC" -"1833672704","1833676799","GB","GBR","UNITED KINGDOM" -"1833676800","1833680895","DE","DEU","GERMANY" -"1833680896","1833684991","UA","UKR","UKRAINE" -"1833684992","1833689087","DE","DEU","GERMANY" -"1833689088","1833693183","FI","FIN","FINLAND" -"1833693184","1833697279","RU","RUS","RUSSIAN FEDERATION" -"1833697280","1833959423","IE","IRL","IRELAND" -"1833959424","1834090495","CZ","CZE","CZECH REPUBLIC" -"1834090496","1834221567","SA","SAU","SAUDI ARABIA" -"1834221568","1834352639","DE","DEU","GERMANY" -"1834352640","1834483711","UA","UKR","UKRAINE" -"1834483712","1834614783","BE","BEL","BELGIUM" -"1834614784","1834745855","DE","DEU","GERMANY" -"1834745856","1834876927","RS","SRB","SERBIA" -"1834876928","1834885119","RU","RUS","RUSSIAN FEDERATION" -"1834885120","1834893311","FR","FRA","FRANCE" -"1834893312","1834901503","RU","RUS","RUSSIAN FEDERATION" -"1834901504","1834909695","RS","SRB","SERBIA" -"1834909696","1834913791","GB","GBR","UNITED KINGDOM" -"1834913792","1834917887","RO","ROM","ROMANIA" -"1834917888","1834921983","UA","UKR","UKRAINE" -"1834921984","1834930175","RU","RUS","RUSSIAN FEDERATION" -"1834930176","1834934271","UA","UKR","UKRAINE" -"1834934272","1834938367","RS","SRB","SERBIA" -"1834938368","1834944511","PL","POL","POLAND" -"1834944512","1834946559","RO","ROM","ROMANIA" -"1834946560","1834948607","RU","RUS","RUSSIAN FEDERATION" -"1834948608","1834950655","PL","POL","POLAND" -"1834950656","1834956799","UA","UKR","UKRAINE" -"1834956800","1834960895","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1834960896","1834964991","RU","RUS","RUSSIAN FEDERATION" -"1834964992","1834967039","PL","POL","POLAND" -"1834967040","1834971135","RU","RUS","RUSSIAN FEDERATION" -"1834971136","1834973183","KZ","KAZ","KAZAKHSTAN" -"1834973184","1834975231","RU","RUS","RUSSIAN FEDERATION" -"1834975232","1834977279","IL","ISR","ISRAEL" -"1834977280","1834983423","PL","POL","POLAND" -"1834983424","1834985471","RU","RUS","RUSSIAN FEDERATION" -"1834985472","1834989567","PL","POL","POLAND" -"1834989568","1834991615","GB","GBR","UNITED KINGDOM" -"1834991616","1834993663","RU","RUS","RUSSIAN FEDERATION" -"1834993664","1834995711","PL","POL","POLAND" -"1834995712","1835001855","RU","RUS","RUSSIAN FEDERATION" -"1835001856","1835003903","PL","POL","POLAND" -"1835003904","1835005951","CH","CHE","SWITZERLAND" -"1835005952","1835007999","RU","RUS","RUSSIAN FEDERATION" -"1835008000","1835532287","RO","ROM","ROMANIA" -"1835532288","1835540479","SE","SWE","SWEDEN" -"1835540480","1835548671","DE","DEU","GERMANY" -"1835548672","1835549695","GB","GBR","UNITED KINGDOM" -"1835549696","1835550207","ES","ESP","SPAIN" -"1835550208","1835565055","GB","GBR","UNITED KINGDOM" -"1835565056","1835573247","AL","ALB","ALBANIA" -"1835573248","1835581439","UA","UKR","UKRAINE" -"1835581440","1835589631","BG","BGR","BULGARIA" -"1835589632","1835597823","IT","ITA","ITALY" -"1835597824","1835606015","HU","HUN","HUNGARY" -"1835606016","1835614207","CZ","CZE","CZECH REPUBLIC" -"1835614208","1835622399","RU","RUS","RUSSIAN FEDERATION" -"1835622400","1835624959","SE","SWE","SWEDEN" -"1835624960","1835625215","DK","DNK","DENMARK" -"1835625216","1835625471","SE","SWE","SWEDEN" -"1835625472","1835625599","DK","DNK","DENMARK" -"1835625600","1835625983","SE","SWE","SWEDEN" -"1835625984","1835626495","DK","DNK","DENMARK" -"1835626496","1835626751","SE","SWE","SWEDEN" -"1835626752","1835627007","DK","DNK","DENMARK" -"1835627008","1835627519","SE","SWE","SWEDEN" -"1835627520","1835627647","DK","DNK","DENMARK" -"1835627648","1835629567","SE","SWE","SWEDEN" -"1835629568","1835630335","DK","DNK","DENMARK" -"1835630336","1835630591","SE","SWE","SWEDEN" -"1835630592","1835646975","RU","RUS","RUSSIAN FEDERATION" -"1835646976","1835655167","BA","BIH","BOSNIA AND HERZEGOVINA" -"1835655168","1835663359","CY","CYP","CYPRUS" -"1835663360","1835671551","UA","UKR","UKRAINE" -"1835671552","1835679743","LV","LVA","LATVIA" -"1835679744","1835687935","FR","FRA","FRANCE" -"1835687936","1835696127","IE","IRL","IRELAND" -"1835696128","1835704319","RU","RUS","RUSSIAN FEDERATION" -"1835704320","1835709439","NL","NLD","NETHERLANDS" -"1835712512","1835720703","RU","RUS","RUSSIAN FEDERATION" -"1835720704","1835728895","RS","SRB","SERBIA" -"1835728896","1835737087","PL","POL","POLAND" -"1835745280","1835753471","BG","BGR","BULGARIA" -"1835753472","1835761663","ES","ESP","SPAIN" -"1835761664","1835769855","JO","JOR","JORDAN" -"1835769856","1835778047","RU","RUS","RUSSIAN FEDERATION" -"1835778048","1835786239","CZ","CZE","CZECH REPUBLIC" -"1835786240","1835794431","JO","JOR","JORDAN" -"1835794432","1835802623","FI","FIN","FINLAND" -"1835802624","1835810815","RU","RUS","RUSSIAN FEDERATION" -"1835810816","1835819007","UA","UKR","UKRAINE" -"1835819008","1835827199","CZ","CZE","CZECH REPUBLIC" -"1835827200","1835835391","GB","GBR","UNITED KINGDOM" -"1835835392","1835843583","ES","ESP","SPAIN" -"1835843584","1835851775","NO","NOR","NORWAY" -"1835851776","1835859967","UA","UKR","UKRAINE" -"1835859968","1835868159","DE","DEU","GERMANY" -"1835868160","1835876351","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1835876352","1835884543","NO","NOR","NORWAY" -"1835884544","1835892735","NL","NLD","NETHERLANDS" -"1835892736","1835909119","GB","GBR","UNITED KINGDOM" -"1835909120","1835913215","RS","SRB","SERBIA" -"1835913216","1835917311","RU","RUS","RUSSIAN FEDERATION" -"1835917312","1835925503","GB","GBR","UNITED KINGDOM" -"1835925504","1835933695","LV","LVA","LATVIA" -"1835933696","1835941887","RU","RUS","RUSSIAN FEDERATION" -"1835941888","1835950079","UA","UKR","UKRAINE" -"1835950080","1835958271","LB","LBN","LEBANON" -"1835958272","1835966463","HU","HUN","HUNGARY" -"1835966464","1835974655","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1835974656","1835982847","PL","POL","POLAND" -"1835982848","1835991039","CY","CYP","CYPRUS" -"1835991040","1835999231","RU","RUS","RUSSIAN FEDERATION" -"1835999232","1836007423","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1836007424","1836015615","RU","RUS","RUSSIAN FEDERATION" -"1836015616","1836023807","AD","AND","ANDORRA" -"1836023808","1836040191","RU","RUS","RUSSIAN FEDERATION" -"1836040192","1836048383","GB","GBR","UNITED KINGDOM" -"1836048384","1836056575","RS","SRB","SERBIA" -"1836056576","1836580863","IT","ITA","ITALY" -"1836580864","1836597247","RU","RUS","RUSSIAN FEDERATION" -"1836597248","1836597759","LU","LUX","LUXEMBOURG" -"1836597760","1836601599","DE","DEU","GERMANY" -"1836601600","1836613631","LU","LUX","LUXEMBOURG" -"1836613632","1836630015","RU","RUS","RUSSIAN FEDERATION" -"1836630016","1836646399","BG","BGR","BULGARIA" -"1836646400","1836670975","RS","SRB","SERBIA" -"1836670976","1836679167","CS","SCG","SERBIA AND MONTENEGRO" -"1836679168","1836711935","BG","BGR","BULGARIA" -"1836711936","1836728319","UA","UKR","UKRAINE" -"1836728320","1836744703","RS","SRB","SERBIA" -"1836744704","1836761087","FR","FRA","FRANCE" -"1836761088","1836777471","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1836777472","1836793855","SI","SVN","SLOVENIA" -"1836793856","1836810239","GB","GBR","UNITED KINGDOM" -"1836810240","1836826623","RU","RUS","RUSSIAN FEDERATION" -"1836826624","1836843007","CZ","CZE","CZECH REPUBLIC" -"1836843008","1836875775","RU","RUS","RUSSIAN FEDERATION" -"1836875776","1836892159","SE","SWE","SWEDEN" -"1836892160","1836908543","RU","RUS","RUSSIAN FEDERATION" -"1836908544","1836924927","IE","IRL","IRELAND" -"1836941312","1836957695","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1836957696","1836974079","PL","POL","POLAND" -"1836974080","1836990463","RU","RUS","RUSSIAN FEDERATION" -"1836990464","1837006847","AT","AUT","AUSTRIA" -"1837006848","1837023231","BY","BLR","BELARUS" -"1837023232","1837039615","RU","RUS","RUSSIAN FEDERATION" -"1837039616","1837055999","AZ","AZE","AZERBAIJAN" -"1837056000","1837072383","IQ","IRQ","IRAQ" -"1837072384","1837088767","RU","RUS","RUSSIAN FEDERATION" -"1837088768","1837105151","SI","SVN","SLOVENIA" -"1837105152","1838153727","BE","BEL","BELGIUM" -"1838153728","1839202303","GB","GBR","UNITED KINGDOM" -"1839202304","1839235071","BG","BGR","BULGARIA" -"1839235072","1839267839","IL","ISR","ISRAEL" -"1839267840","1839300607","RU","RUS","RUSSIAN FEDERATION" -"1839300608","1839333375","BH","BHR","BAHRAIN" -"1839333376","1839366143","UA","UKR","UKRAINE" -"1839398912","1839431679","NO","NOR","NORWAY" -"1839431680","1839464447","RU","RUS","RUSSIAN FEDERATION" -"1839464448","1839497215","CZ","CZE","CZECH REPUBLIC" -"1839497216","1839529983","CH","CHE","SWITZERLAND" -"1839529984","1839562751","RU","RUS","RUSSIAN FEDERATION" -"1839562752","1839595519","BA","BIH","BOSNIA AND HERZEGOVINA" -"1839595520","1839661055","RO","ROM","ROMANIA" -"1839661056","1839693823","UA","UKR","UKRAINE" -"1839693824","1839726591","RU","RUS","RUSSIAN FEDERATION" -"1839726592","1839759359","IT","ITA","ITALY" -"1839759360","1839792127","RU","RUS","RUSSIAN FEDERATION" -"1839792128","1839793663","GB","GBR","UNITED KINGDOM" -"1839793664","1839793919","SG","SGP","SINGAPORE" -"1839793920","1839794687","GB","GBR","UNITED KINGDOM" -"1839794688","1839794943","US","USA","UNITED STATES" -"1839794944","1839795071","GB","GBR","UNITED KINGDOM" -"1839795072","1839795087","US","USA","UNITED STATES" -"1839795088","1839795151","GB","GBR","UNITED KINGDOM" -"1839795152","1839795167","US","USA","UNITED STATES" -"1839795168","1839796607","GB","GBR","UNITED KINGDOM" -"1839796608","1839796671","US","USA","UNITED STATES" -"1839796672","1839796735","GB","GBR","UNITED KINGDOM" -"1839796736","1839796991","TR","TUR","TURKEY" -"1839796992","1839797759","GB","GBR","UNITED KINGDOM" -"1839797760","1839798015","GR","GRC","GREECE" -"1839798016","1839816703","GB","GBR","UNITED KINGDOM" -"1839824896","1839890431","RU","RUS","RUSSIAN FEDERATION" -"1839890432","1839923199","GB","GBR","UNITED KINGDOM" -"1839923200","1839955967","RU","RUS","RUSSIAN FEDERATION" -"1839955968","1839988735","SA","SAU","SAUDI ARABIA" -"1839988736","1840021503","RU","RUS","RUSSIAN FEDERATION" -"1840021504","1840054271","GE","GEO","GEORGIA" -"1840054272","1840087039","RU","RUS","RUSSIAN FEDERATION" -"1840087040","1840119807","PL","POL","POLAND" -"1840119808","1840152575","RU","RUS","RUSSIAN FEDERATION" -"1840152576","1840185343","GB","GBR","UNITED KINGDOM" -"1840185344","1840218111","BA","BIH","BOSNIA AND HERZEGOVINA" -"1840250880","1840316415","GB","GBR","UNITED KINGDOM" -"1840316416","1840381951","RU","RUS","RUSSIAN FEDERATION" -"1840381952","1840447487","GR","GRC","GREECE" -"1840447488","1840513023","NO","NOR","NORWAY" -"1840513024","1840578559","GB","GBR","UNITED KINGDOM" -"1840644096","1840709631","SI","SVN","SLOVENIA" -"1840709632","1840775167","CZ","CZE","CZECH REPUBLIC" -"1840775168","1840840703","RU","RUS","RUSSIAN FEDERATION" -"1840840704","1840906239","MD","MDA","REPUBLIC OF MOLDOVA" -"1840906240","1840971775","IL","ISR","ISRAEL" -"1840971776","1841102847","RU","RUS","RUSSIAN FEDERATION" -"1841102848","1841168383","NO","NOR","NORWAY" -"1841168384","1841299455","RU","RUS","RUSSIAN FEDERATION" -"1841299456","1841430527","DE","DEU","GERMANY" -"1841430528","1841561599","RU","RUS","RUSSIAN FEDERATION" -"1841561600","1841565695","PL","POL","POLAND" -"1841565696","1841569791","RU","RUS","RUSSIAN FEDERATION" -"1841569792","1841577983","PL","POL","POLAND" -"1841577984","1841582079","RU","RUS","RUSSIAN FEDERATION" -"1841582080","1841586175","PL","POL","POLAND" -"1841586176","1841590271","RU","RUS","RUSSIAN FEDERATION" -"1841590272","1841594367","PL","POL","POLAND" -"1841594368","1841598463","RU","RUS","RUSSIAN FEDERATION" -"1841598464","1841602559","PL","POL","POLAND" -"1841602560","1841610751","UA","UKR","UKRAINE" -"1841610752","1841618943","RU","RUS","RUSSIAN FEDERATION" -"1841618944","1841627135","PL","POL","POLAND" -"1841627136","1841629183","NO","NOR","NORWAY" -"1841629184","1841635327","RU","RUS","RUSSIAN FEDERATION" -"1841635328","1841639423","PL","POL","POLAND" -"1841639424","1841641471","RU","RUS","RUSSIAN FEDERATION" -"1841641472","1841643519","PL","POL","POLAND" -"1841643520","1841645567","SI","SVN","SLOVENIA" -"1841645568","1841647615","RU","RUS","RUSSIAN FEDERATION" -"1841647616","1841649663","RO","ROM","ROMANIA" -"1841649664","1841651711","RU","RUS","RUSSIAN FEDERATION" -"1841651712","1841653759","PL","POL","POLAND" -"1841653760","1841655807","FR","FRA","FRANCE" -"1841655808","1841668095","RU","RUS","RUSSIAN FEDERATION" -"1841692672","1841694719","CS","SCG","SERBIA AND MONTENEGRO" -"1841694720","1841700863","RS","SRB","SERBIA" -"1841700864","1841709055","MD","MDA","REPUBLIC OF MOLDOVA" -"1841709056","1841725439","RU","RUS","RUSSIAN FEDERATION" -"1841725440","1841733631","DK","DNK","DENMARK" -"1841733632","1841758207","RU","RUS","RUSSIAN FEDERATION" -"1841758208","1841766399","PL","POL","POLAND" -"1841766400","1841774591","HU","HUN","HUNGARY" -"1841774592","1841782783","PL","POL","POLAND" -"1841782784","1841790975","RO","ROM","ROMANIA" -"1841790976","1841799167","BG","BGR","BULGARIA" -"1841799168","1841807359","DE","DEU","GERMANY" -"1841807360","1841815551","NO","NOR","NORWAY" -"1841815552","1841823743","BG","BGR","BULGARIA" -"1841823744","1841831935","GB","GBR","UNITED KINGDOM" -"1841831936","1841840127","MT","MLT","MALTA" -"1841840128","1841848319","PL","POL","POLAND" -"1841848320","1841856511","RU","RUS","RUSSIAN FEDERATION" -"1841856512","1841864703","UA","UKR","UKRAINE" -"1841864704","1841872895","YE","YEM","YEMEN" -"1841872896","1841881087","NL","NLD","NETHERLANDS" -"1841881088","1841889279","UA","UKR","UKRAINE" -"1841889280","1841897471","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1841897472","1841905663","RO","ROM","ROMANIA" -"1841905664","1841922047","RU","RUS","RUSSIAN FEDERATION" -"1841922048","1841930239","NL","NLD","NETHERLANDS" -"1841930240","1841938431","KG","KGZ","KYRGYZSTAN" -"1841938432","1841946623","RU","RUS","RUSSIAN FEDERATION" -"1841946624","1841954815","UA","UKR","UKRAINE" -"1841954816","1841971199","RU","RUS","RUSSIAN FEDERATION" -"1841971200","1841979391","CZ","CZE","CZECH REPUBLIC" -"1841979392","1841987583","NL","NLD","NETHERLANDS" -"1841987584","1841995775","DK","DNK","DENMARK" -"1841995776","1842003967","RU","RUS","RUSSIAN FEDERATION" -"1842003968","1842012159","CH","CHE","SWITZERLAND" -"1842012160","1842020351","GB","GBR","UNITED KINGDOM" -"1842020352","1842028543","NO","NOR","NORWAY" -"1842028544","1842036735","CH","CHE","SWITZERLAND" -"1842036736","1842038783","FR","FRA","FRANCE" -"1842038784","1842044927","LU","LUX","LUXEMBOURG" -"1842044928","1842053119","GB","GBR","UNITED KINGDOM" -"1842053120","1842061311","ES","ESP","SPAIN" -"1842085888","1842118655","GB","GBR","UNITED KINGDOM" -"1842118656","1842151423","FI","FIN","FINLAND" -"1842151424","1842153471","FR","FRA","FRANCE" -"1842153472","1842155519","NO","NOR","NORWAY" -"1842155520","1842157567","IT","ITA","ITALY" -"1842157568","1842159615","AE","ARE","UNITED ARAB EMIRATES" -"1842159616","1842161663","BA","BIH","BOSNIA AND HERZEGOVINA" -"1842161664","1842163711","GE","GEO","GEORGIA" -"1842163712","1842165759","PL","POL","POLAND" -"1842165760","1842167807","RU","RUS","RUSSIAN FEDERATION" -"1842167808","1842169855","FR","FRA","FRANCE" -"1842169856","1842171903","CZ","CZE","CZECH REPUBLIC" -"1842171904","1842173951","RU","RUS","RUSSIAN FEDERATION" -"1842173952","1842175999","RO","ROM","ROMANIA" -"1842176000","1842178047","FI","FIN","FINLAND" -"1842178048","1842180095","IT","ITA","ITALY" -"1842180096","1842182143","IQ","IRQ","IRAQ" -"1842182144","1842184191","LV","LVA","LATVIA" -"1842184192","1842186239","DE","DEU","GERMANY" -"1842186240","1842188287","ES","ESP","SPAIN" -"1842188288","1842190335","RU","RUS","RUSSIAN FEDERATION" -"1842190336","1842192383","GB","GBR","UNITED KINGDOM" -"1842192384","1842194431","AZ","AZE","AZERBAIJAN" -"1842194432","1842196479","CH","CHE","SWITZERLAND" -"1842196480","1842198527","DE","DEU","GERMANY" -"1842198528","1842200575","GB","GBR","UNITED KINGDOM" -"1842200576","1842202623","NL","NLD","NETHERLANDS" -"1842202624","1842204671","CH","CHE","SWITZERLAND" -"1842204672","1842206719","AZ","AZE","AZERBAIJAN" -"1842206720","1842208767","SE","SWE","SWEDEN" -"1842208768","1842210815","GB","GBR","UNITED KINGDOM" -"1842210816","1842212863","LT","LTU","LITHUANIA" -"1842212864","1842214911","CZ","CZE","CZECH REPUBLIC" -"1842214912","1842216959","RU","RUS","RUSSIAN FEDERATION" -"1842216960","1842225151","RO","ROM","ROMANIA" -"1842225152","1842233343","UA","UKR","UKRAINE" -"1842233344","1842241535","RO","ROM","ROMANIA" -"1842241536","1842249727","RS","SRB","SERBIA" -"1842249728","1842257919","RU","RUS","RUSSIAN FEDERATION" -"1842266112","1842274303","PL","POL","POLAND" -"1842274304","1842282495","RO","ROM","ROMANIA" -"1842282496","1842286591","RU","RUS","RUSSIAN FEDERATION" -"1842286592","1842290687","GB","GBR","UNITED KINGDOM" -"1842290688","1842294783","RS","SRB","SERBIA" -"1842294784","1842298879","PL","POL","POLAND" -"1842298880","1842302975","UA","UKR","UKRAINE" -"1842302976","1842307071","RU","RUS","RUSSIAN FEDERATION" -"1842307072","1842311167","PL","POL","POLAND" -"1842311168","1842315263","UA","UKR","UKRAINE" -"1842315264","1842319359","RO","ROM","ROMANIA" -"1842319360","1842323455","PL","POL","POLAND" -"1842323456","1842331647","RU","RUS","RUSSIAN FEDERATION" -"1842348032","1843396607","FR","FRA","FRANCE" -"1843412992","1843429375","CZ","CZE","CZECH REPUBLIC" -"1843429376","1843462143","GB","GBR","UNITED KINGDOM" -"1843462144","1843478527","RU","RUS","RUSSIAN FEDERATION" -"1843478528","1843494911","SE","SWE","SWEDEN" -"1843494912","1843511295","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1843511296","1843527679","RU","RUS","RUSSIAN FEDERATION" -"1843527680","1843544063","IL","ISR","ISRAEL" -"1843544064","1843560447","RU","RUS","RUSSIAN FEDERATION" -"1843560448","1843576831","DE","DEU","GERMANY" -"1843576832","1843593215","RU","RUS","RUSSIAN FEDERATION" -"1843593216","1843609599","HR","HRV","CROATIA" -"1843609600","1843625983","UA","UKR","UKRAINE" -"1843625984","1843642367","ES","ESP","SPAIN" -"1843642368","1843658751","RU","RUS","RUSSIAN FEDERATION" -"1843658752","1843675135","GB","GBR","UNITED KINGDOM" -"1843675136","1843691519","ME","MNE","MONTENEGRO" -"1843691520","1843707903","SE","SWE","SWEDEN" -"1843707904","1843724287","TR","TUR","TURKEY" -"1843724288","1843732479","UA","UKR","UKRAINE" -"1843789824","1843806207","SK","SVK","SLOVAKIA" -"1843806208","1843822591","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1843822592","1843838975","RU","RUS","RUSSIAN FEDERATION" -"1843838976","1843855359","DE","DEU","GERMANY" -"1843855360","1843871743","PL","POL","POLAND" -"1843871744","1843888127","GB","GBR","UNITED KINGDOM" -"1843920896","1843922943","KZ","KAZ","KAZAKHSTAN" -"1843922944","1843924991","NL","NLD","NETHERLANDS" -"1843924992","1843927039","ES","ESP","SPAIN" -"1843927040","1843929087","PL","POL","POLAND" -"1843929088","1843931135","IT","ITA","ITALY" -"1843931136","1843933183","NL","NLD","NETHERLANDS" -"1843933184","1843935231","IT","ITA","ITALY" -"1843935232","1843937279","GB","GBR","UNITED KINGDOM" -"1843937280","1843939327","ES","ESP","SPAIN" -"1843939328","1843941375","DK","DNK","DENMARK" -"1843941376","1843943423","FI","FIN","FINLAND" -"1843943424","1843945471","CH","CHE","SWITZERLAND" -"1843945472","1843947519","FR","FRA","FRANCE" -"1843947520","1843949567","RU","RUS","RUSSIAN FEDERATION" -"1843949568","1843951615","BY","BLR","BELARUS" -"1843953664","1843955711","DE","DEU","GERMANY" -"1843955712","1843957759","IT","ITA","ITALY" -"1843957760","1843959807","CZ","CZE","CZECH REPUBLIC" -"1843959808","1843961855","GB","GBR","UNITED KINGDOM" -"1843961856","1843965951","DE","DEU","GERMANY" -"1843965952","1843967999","GB","GBR","UNITED KINGDOM" -"1843968000","1843970047","RU","RUS","RUSSIAN FEDERATION" -"1843970048","1843972095","FR","FRA","FRANCE" -"1843972096","1843974143","HU","HUN","HUNGARY" -"1843974144","1843976191","ES","ESP","SPAIN" -"1843976192","1843978239","TR","TUR","TURKEY" -"1843978240","1843978495","NL","NLD","NETHERLANDS" -"1843978496","1843978527","AW","ABW","ARUBA" -"1843978528","1843980287","NL","NLD","NETHERLANDS" -"1843980288","1843982335","FR","FRA","FRANCE" -"1843982336","1843984383","PL","POL","POLAND" -"1843984384","1843986431","RU","RUS","RUSSIAN FEDERATION" -"1843986432","1843988479","NO","NOR","NORWAY" -"1843988480","1843990527","GB","GBR","UNITED KINGDOM" -"1843990528","1843992575","LB","LBN","LEBANON" -"1843992576","1843994623","AT","AUT","AUSTRIA" -"1843994624","1844000767","GB","GBR","UNITED KINGDOM" -"1844000768","1844002047","NL","NLD","NETHERLANDS" -"1844002048","1844002815","NO","NOR","NORWAY" -"1844002816","1844006911","CZ","CZE","CZECH REPUBLIC" -"1844006912","1844008959","SM","SMR","SAN MARINO" -"1844008960","1844011007","PL","POL","POLAND" -"1844011008","1844013055","IT","ITA","ITALY" -"1844013056","1844015103","PL","POL","POLAND" -"1844015104","1844017151","GB","GBR","UNITED KINGDOM" -"1844017152","1844019199","IT","ITA","ITALY" -"1844019200","1844021247","RU","RUS","RUSSIAN FEDERATION" -"1844021248","1844027391","DE","DEU","GERMANY" -"1844027392","1844029439","CZ","CZE","CZECH REPUBLIC" -"1844029440","1844031487","RU","RUS","RUSSIAN FEDERATION" -"1844031744","1844031999","CH","CHE","SWITZERLAND" -"1844032000","1844032255","GB","GBR","UNITED KINGDOM" -"1844033536","1844035583","RS","SRB","SERBIA" -"1844035584","1844037631","MD","MDA","REPUBLIC OF MOLDOVA" -"1844037632","1844041727","RU","RUS","RUSSIAN FEDERATION" -"1844041728","1844043775","IT","ITA","ITALY" -"1844043776","1844047871","RU","RUS","RUSSIAN FEDERATION" -"1844047872","1844049919","KZ","KAZ","KAZAKHSTAN" -"1844049920","1844051967","DE","DEU","GERMANY" -"1844051968","1844054015","FR","FRA","FRANCE" -"1844054016","1844056063","RU","RUS","RUSSIAN FEDERATION" -"1844056064","1844058111","IL","ISR","ISRAEL" -"1844058112","1844062207","RU","RUS","RUSSIAN FEDERATION" -"1844062208","1844064255","CZ","CZE","CZECH REPUBLIC" -"1844064256","1844068351","IT","ITA","ITALY" -"1844068352","1844072447","GB","GBR","UNITED KINGDOM" -"1844072448","1844076543","ES","ESP","SPAIN" -"1844076544","1844078591","IE","IRL","IRELAND" -"1844078592","1844080639","DE","DEU","GERMANY" -"1844080640","1844082687","GE","GEO","GEORGIA" -"1844082688","1844084735","DE","DEU","GERMANY" -"1844084736","1844086783","RU","RUS","RUSSIAN FEDERATION" -"1844086784","1844088831","IT","ITA","ITALY" -"1844088832","1844090879","AT","AUT","AUSTRIA" -"1844090880","1844092927","RU","RUS","RUSSIAN FEDERATION" -"1844092928","1844094975","FR","FRA","FRANCE" -"1844094976","1844099071","GB","GBR","UNITED KINGDOM" -"1844099072","1844101119","DE","DEU","GERMANY" -"1844101120","1844105215","GB","GBR","UNITED KINGDOM" -"1844105216","1844107263","ES","ESP","SPAIN" -"1844107264","1844109311","DE","DEU","GERMANY" -"1844109312","1844109567","US","USA","UNITED STATES" -"1844109568","1844111359","GB","GBR","UNITED KINGDOM" -"1844111360","1844113407","AL","ALB","ALBANIA" -"1844113408","1844115455","FI","FIN","FINLAND" -"1844115456","1844117503","DE","DEU","GERMANY" -"1844117504","1844119551","CZ","CZE","CZECH REPUBLIC" -"1844119552","1844121599","UA","UKR","UKRAINE" -"1844121600","1844123647","ES","ESP","SPAIN" -"1844123648","1844125695","RU","RUS","RUSSIAN FEDERATION" -"1844125696","1844127743","NL","NLD","NETHERLANDS" -"1844127744","1844129791","DE","DEU","GERMANY" -"1844129792","1844130047","SE","SWE","SWEDEN" -"1844130048","1844131839","NL","NLD","NETHERLANDS" -"1844131840","1844133887","DE","DEU","GERMANY" -"1844133888","1844135935","LT","LTU","LITHUANIA" -"1844135936","1844137983","NL","NLD","NETHERLANDS" -"1844137984","1844140031","FR","FRA","FRANCE" -"1844140032","1844142079","RU","RUS","RUSSIAN FEDERATION" -"1844142080","1844144127","RS","SRB","SERBIA" -"1844144128","1844146175","SM","SMR","SAN MARINO" -"1844146176","1844148223","NO","NOR","NORWAY" -"1844148224","1844150271","GB","GBR","UNITED KINGDOM" -"1844150272","1844152319","ES","ESP","SPAIN" -"1844152320","1844154367","DE","DEU","GERMANY" -"1844154368","1844154879","GB","GBR","UNITED KINGDOM" -"1844154880","1844155135","FR","FRA","FRANCE" -"1844155136","1844155391","US","USA","UNITED STATES" -"1844155392","1844156415","GB","GBR","UNITED KINGDOM" -"1844156416","1844158463","IT","ITA","ITALY" -"1844158464","1844160511","RU","RUS","RUSSIAN FEDERATION" -"1844160512","1844162559","SE","SWE","SWEDEN" -"1844162560","1844164607","CZ","CZE","CZECH REPUBLIC" -"1844164608","1844166655","RU","RUS","RUSSIAN FEDERATION" -"1844166656","1844168703","AZ","AZE","AZERBAIJAN" -"1844168704","1844169727","LB","LBN","LEBANON" -"1844169728","1844170387","DE","DEU","GERMANY" -"1844170388","1844170751","GI","GIB","GIBRALTAR" -"1844170752","1844174847","RU","RUS","RUSSIAN FEDERATION" -"1844174848","1844178943","DE","DEU","GERMANY" -"1844178944","1844180991","EE","EST","ESTONIA" -"1844180992","1844181488","TR","TUR","TURKEY" -"1844181489","1844181503","DE","DEU","GERMANY" -"1844181504","1844183039","TR","TUR","TURKEY" -"1844183040","1844191231","IT","ITA","ITALY" -"1844191232","1844195327","AL","ALB","ALBANIA" -"1844195328","1844203519","RU","RUS","RUSSIAN FEDERATION" -"1844203520","1844207615","NL","NLD","NETHERLANDS" -"1844207616","1844211711","RU","RUS","RUSSIAN FEDERATION" -"1844211712","1844215807","SK","SVK","SLOVAKIA" -"1844215808","1844219903","BE","BEL","BELGIUM" -"1844224000","1844228095","GB","GBR","UNITED KINGDOM" -"1844228096","1844232191","DK","DNK","DENMARK" -"1844232192","1844235775","FR","FRA","FRANCE" -"1844235776","1844236031","GB","GBR","UNITED KINGDOM" -"1844236032","1844236287","FR","FRA","FRANCE" -"1844236288","1844252671","RU","RUS","RUSSIAN FEDERATION" -"1844252672","1844256767","GB","GBR","UNITED KINGDOM" -"1844256768","1844260863","BA","BIH","BOSNIA AND HERZEGOVINA" -"1844260864","1844264959","CH","CHE","SWITZERLAND" -"1844264960","1844269055","NL","NLD","NETHERLANDS" -"1844273152","1844277247","RU","RUS","RUSSIAN FEDERATION" -"1844277248","1844281343","AZ","AZE","AZERBAIJAN" -"1844281344","1844285439","DE","DEU","GERMANY" -"1844285440","1844289535","RU","RUS","RUSSIAN FEDERATION" -"1844289536","1844293631","IT","ITA","ITALY" -"1844293632","1844297727","DE","DEU","GERMANY" -"1844297728","1844301823","IQ","IRQ","IRAQ" -"1844301824","1844305919","NL","NLD","NETHERLANDS" -"1844305920","1844310015","RU","RUS","RUSSIAN FEDERATION" -"1844310016","1844318207","FR","FRA","FRANCE" -"1844318208","1844322303","IT","ITA","ITALY" -"1844322304","1844326399","CZ","CZE","CZECH REPUBLIC" -"1844326400","1844330495","DK","DNK","DENMARK" -"1844330496","1844338687","GB","GBR","UNITED KINGDOM" -"1844338688","1844342783","RU","RUS","RUSSIAN FEDERATION" -"1844342784","1844346879","IT","ITA","ITALY" -"1844346880","1844347007","US","USA","UNITED STATES" -"1844347008","1844347135","GB","GBR","UNITED KINGDOM" -"1844347136","1844347263","BE","BEL","BELGIUM" -"1844347264","1844347903","GB","GBR","UNITED KINGDOM" -"1844347904","1844348671","US","USA","UNITED STATES" -"1844348672","1844348927","BE","BEL","BELGIUM" -"1844348928","1844349439","GB","GBR","UNITED KINGDOM" -"1844349440","1844349951","US","USA","UNITED STATES" -"1844349952","1844350207","HK","HKG","HONG KONG" -"1844350208","1844350719","CA","CAN","CANADA" -"1844350720","1844350975","GB","GBR","UNITED KINGDOM" -"1844350976","1844355071","SY","SYR","SYRIAN ARAB REPUBLIC" -"1844355072","1844359167","KZ","KAZ","KAZAKHSTAN" -"1844359168","1844363263","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1844363264","1844367359","RU","RUS","RUSSIAN FEDERATION" -"1844367360","1844371455","CZ","CZE","CZECH REPUBLIC" -"1844371456","1844375551","GE","GEO","GEORGIA" -"1844375552","1844379647","RU","RUS","RUSSIAN FEDERATION" -"1844379648","1844383743","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"1844383744","1844387839","AZ","AZE","AZERBAIJAN" -"1844387840","1844391935","KZ","KAZ","KAZAKHSTAN" -"1844391936","1844396031","DE","DEU","GERMANY" -"1844396032","1844400127","CZ","CZE","CZECH REPUBLIC" -"1844400128","1844408319","GB","GBR","UNITED KINGDOM" -"1844408320","1844412415","FR","FRA","FRANCE" -"1844412416","1844416511","RU","RUS","RUSSIAN FEDERATION" -"1844416512","1844420607","FR","FRA","FRANCE" -"1844420608","1844424703","DE","DEU","GERMANY" -"1844424704","1844428799","SI","SVN","SLOVENIA" -"1844428800","1844432895","DE","DEU","GERMANY" -"1844432896","1844436991","RU","RUS","RUSSIAN FEDERATION" -"1844436992","1844441087","NO","NOR","NORWAY" -"1844441088","1844445183","IT","ITA","ITALY" -"1844445184","1844510719","FI","FIN","FINLAND" -"1844510720","1844576255","RU","RUS","RUSSIAN FEDERATION" -"1844576256","1844641791","GR","GRC","GREECE" -"1844641792","1844707327","PL","POL","POLAND" -"1844707328","1844772863","RU","RUS","RUSSIAN FEDERATION" -"1844772864","1844838399","RS","SRB","SERBIA" -"1844838400","1844903935","GB","GBR","UNITED KINGDOM" -"1844969472","1845035007","RU","RUS","RUSSIAN FEDERATION" -"1845035008","1845100543","GB","GBR","UNITED KINGDOM" -"1845100544","1845166079","DE","DEU","GERMANY" -"1845231616","1845297151","RU","RUS","RUSSIAN FEDERATION" -"1845297152","1845362687","IL","ISR","ISRAEL" -"1845362688","1845428223","UA","UKR","UKRAINE" -"1845428224","1845493759","IE","IRL","IRELAND" -"1845493760","1845755903","JP","JPN","JAPAN" -"1845755904","1845764095","HK","HKG","HONG KONG" -"1845764096","1845766143","JP","JPN","JAPAN" -"1845766144","1845768191","MY","MYS","MALAYSIA" -"1845768192","1845772287","JP","JPN","JAPAN" -"1845772288","1845788671","KR","KOR","REPUBLIC OF KOREA" -"1845788672","1845837823","JP","JPN","JAPAN" -"1845837824","1845839871","PH","PHL","PHILIPPINES" -"1845839872","1845841919","IN","IND","INDIA" -"1845841920","1845846015","AU","AUS","AUSTRALIA" -"1845846016","1845850111","ID","IDN","INDONESIA" -"1845850112","1845851135","WS","WSM","SAMOA" -"1845851136","1845852159","AU","AUS","AUSTRALIA" -"1845852160","1845854207","JP","JPN","JAPAN" -"1845854208","1845886975","KR","KOR","REPUBLIC OF KOREA" -"1845886976","1846018047","CN","CHN","CHINA" -"1846018048","1846542335","KR","KOR","REPUBLIC OF KOREA" -"1846542336","1846804479","CN","CHN","CHINA" -"1846804480","1847066623","AU","AUS","AUSTRALIA" -"1847066624","1847590911","TW","TWN","TAIWAN" -"1847590912","1847721983","AU","AUS","AUSTRALIA" -"1847721984","1847730175","NP","NPL","NEPAL" -"1847730176","1847732223","PK","PAK","PAKISTAN" -"1847732224","1847734271","AU","AUS","AUSTRALIA" -"1847734272","1847735295","NZ","NZL","NEW ZEALAND" -"1847735296","1847736319","AU","AUS","AUSTRALIA" -"1847736320","1847738367","HK","HKG","HONG KONG" -"1847738368","1847754751","KR","KOR","REPUBLIC OF KOREA" -"1847754752","1847787519","TH","THA","THAILAND" -"1847787520","1847803903","KR","KOR","REPUBLIC OF KOREA" -"1847803904","1847807999","VN","VNM","VIET NAM" -"1847808000","1847810047","ID","IDN","INDONESIA" -"1847810048","1847812095","AU","AUS","AUSTRALIA" -"1847812096","1847853055","KR","KOR","REPUBLIC OF KOREA" -"1847853056","1848115199","PK","PAK","PAKISTAN" -"1848115200","1848377343","CN","CHN","CHINA" -"1848377344","1848381439","HK","HKG","HONG KONG" -"1848381440","1848382463","NZ","NZL","NEW ZEALAND" -"1848382464","1848385535","AU","AUS","AUSTRALIA" -"1848385536","1848393727","KR","KOR","REPUBLIC OF KOREA" -"1848393728","1848401919","JP","JPN","JAPAN" -"1848401920","1848406015","PH","PHL","PHILIPPINES" -"1848406016","1848410111","NP","NPL","NEPAL" -"1848410112","1848414207","PH","PHL","PHILIPPINES" -"1848414208","1848420351","AU","AUS","AUSTRALIA" -"1848420352","1848422399","ID","IDN","INDONESIA" -"1848422400","1848424447","JP","JPN","JAPAN" -"1848424448","1848426495","VN","VNM","VIET NAM" -"1848426496","1848639487","KR","KOR","REPUBLIC OF KOREA" -"1848639488","1848705023","CN","CHN","CHINA" -"1848705024","1848770559","TH","THA","THAILAND" -"1848770560","1848774655","JP","JPN","JAPAN" -"1848774656","1848778751","AU","AUS","AUSTRALIA" -"1848778752","1848786943","IN","IND","INDIA" -"1848786944","1848791039","JP","JPN","JAPAN" -"1848791040","1848793087","ID","IDN","INDONESIA" -"1848793088","1848803327","JP","JPN","JAPAN" -"1848803328","1848819711","TW","TWN","TAIWAN" -"1848819712","1848827903","JP","JPN","JAPAN" -"1848827904","1848831999","PH","PHL","PHILIPPINES" -"1848832000","1848832255","JP","JPN","JAPAN" -"1848832256","1848832511","NL","NLD","NETHERLANDS" -"1848832512","1848832959","JP","JPN","JAPAN" -"1848832960","1848832975","NL","NLD","NETHERLANDS" -"1848832976","1848833023","JP","JPN","JAPAN" -"1848833024","1848833055","NL","NLD","NETHERLANDS" -"1848833056","1848836095","JP","JPN","JAPAN" -"1848836096","1849032703","CN","CHN","CHINA" -"1849032704","1849065471","JP","JPN","JAPAN" -"1849065472","1849163775","PH","PHL","PHILIPPINES" -"1849163776","1849819135","CN","CHN","CHINA" -"1849819136","1849950207","JP","JPN","JAPAN" -"1849950208","1850212351","KR","KOR","REPUBLIC OF KOREA" -"1850212352","1850343423","CN","CHN","CHINA" -"1850343424","1850376191","JP","JPN","JAPAN" -"1850376192","1850392575","MY","MYS","MALAYSIA" -"1850392576","1850400767","KH","KHM","CAMBODIA" -"1850400768","1850408959","JP","JPN","JAPAN" -"1850408960","1850441727","AU","AUS","AUSTRALIA" -"1850441728","1850490879","CN","CHN","CHINA" -"1850490880","1850507263","KR","KOR","REPUBLIC OF KOREA" -"1850507264","1850511359","AU","AUS","AUSTRALIA" -"1850511360","1850513407","ID","IDN","INDONESIA" -"1850513408","1850514431","TH","THA","THAILAND" -"1850514432","1850515455","AU","AUS","AUSTRALIA" -"1850515456","1850519551","IN","IND","INDIA" -"1850519552","1850522623","AU","AUS","AUSTRALIA" -"1850522624","1850523647","HK","HKG","HONG KONG" -"1850523648","1850572799","CN","CHN","CHINA" -"1850572800","1850671103","TH","THA","THAILAND" -"1850671104","1850736639","HK","HKG","HONG KONG" -"1850736640","1851523071","CN","CHN","CHINA" -"1851523072","1851527167","JP","JPN","JAPAN" -"1851527168","1851528191","NZ","NZL","NEW ZEALAND" -"1851528192","1851529215","AU","AUS","AUSTRALIA" -"1851529216","1851531263","PH","PHL","PHILIPPINES" -"1851531264","1851539455","JP","JPN","JAPAN" -"1851539456","1851542527","ID","IDN","INDONESIA" -"1851542528","1851543551","HK","HKG","HONG KONG" -"1851543552","1851547647","JP","JPN","JAPAN" -"1851547648","1851555839","SG","SGP","SINGAPORE" -"1851555840","1851588607","KR","KOR","REPUBLIC OF KOREA" -"1851588608","1851590655","JP","JPN","JAPAN" -"1851590656","1851594751","AU","AUS","AUSTRALIA" -"1851594752","1851596799","KR","KOR","REPUBLIC OF KOREA" -"1851596800","1851604991","IN","IND","INDIA" -"1851604992","1851613183","PH","PHL","PHILIPPINES" -"1851613184","1851617279","JP","JPN","JAPAN" -"1851617280","1851637759","KR","KOR","REPUBLIC OF KOREA" -"1851637760","1851654143","PK","PAK","PAKISTAN" -"1851654144","1853882367","CN","CHN","CHINA" -"1853882368","1854406655","JP","JPN","JAPAN" -"1854406656","1854668799","ID","IDN","INDONESIA" -"1854668800","1855455231","AU","AUS","AUSTRALIA" -"1855455232","1855848447","CN","CHN","CHINA" -"1855848448","1855913983","JP","JPN","JAPAN" -"1855913984","1855979519","MY","MYS","MALAYSIA" -"1855979520","1856241663","JP","JPN","JAPAN" -"1856241664","1856307199","TH","THA","THAILAND" -"1856307200","1856315391","KR","KOR","REPUBLIC OF KOREA" -"1856315392","1856323583","HK","HKG","HONG KONG" -"1856323584","1856339967","KR","KOR","REPUBLIC OF KOREA" -"1856339968","1856372735","JP","JPN","JAPAN" -"1856372736","1856503807","CN","CHN","CHINA" -"1856503808","1856765951","TH","THA","THAILAND" -"1856765952","1856770047","JP","JPN","JAPAN" -"1856770048","1856774143","IN","IND","INDIA" -"1856774144","1856779263","JP","JPN","JAPAN" -"1856779264","1856780287","IN","IND","INDIA" -"1856780288","1856782335","JP","JPN","JAPAN" -"1856782336","1856798719","KR","KOR","REPUBLIC OF KOREA" -"1856798720","1856815103","IN","IND","INDIA" -"1856815104","1856843775","CN","CHN","CHINA" -"1856843776","1856847871","HK","HKG","HONG KONG" -"1856847872","1856864255","CN","CHN","CHINA" -"1856864256","1856872447","AU","AUS","AUSTRALIA" -"1856872448","1856876543","NZ","NZL","NEW ZEALAND" -"1856876544","1856880639","AU","AUS","AUSTRALIA" -"1856880640","1856888831","CN","CHN","CHINA" -"1856888832","1856892927","AU","AUS","AUSTRALIA" -"1856892928","1856897023","JP","JPN","JAPAN" -"1856897024","1857028095","AU","AUS","AUSTRALIA" -"1857028096","1860173823","CN","CHN","CHINA" -"1860173824","1860435967","IN","IND","INDIA" -"1860435968","1860698111","CN","CHN","CHINA" -"1860698112","1860706303","JP","JPN","JAPAN" -"1860706304","1860714495","CN","CHN","CHINA" -"1860714496","1860722687","ID","IDN","INDONESIA" -"1860722688","1860726783","KR","KOR","REPUBLIC OF KOREA" -"1860726784","1860728831","AU","AUS","AUSTRALIA" -"1860728832","1860733951","JP","JPN","JAPAN" -"1860733952","1860734975","AU","AUS","AUSTRALIA" -"1860734976","1860735999","NZ","NZL","NEW ZEALAND" -"1860736000","1860737023","AU","AUS","AUSTRALIA" -"1860737024","1860739071","JP","JPN","JAPAN" -"1860739072","1860743167","PH","PHL","PHILIPPINES" -"1860743168","1860747263","AU","AUS","AUSTRALIA" -"1860747264","1860759551","JP","JPN","JAPAN" -"1860759552","1860763647","AU","AUS","AUSTRALIA" -"1860763648","1860829183","JP","JPN","JAPAN" -"1860829184","1860960255","IN","IND","INDIA" -"1860960256","1861091327","CN","CHN","CHINA" -"1861091328","1861222399","AU","AUS","AUSTRALIA" -"1861222400","1866465279","CN","CHN","CHINA" -"1866465280","1866530815","JP","JPN","JAPAN" -"1866530816","1866563583","SG","SGP","SINGAPORE" -"1866563584","1866579967","KR","KOR","REPUBLIC OF KOREA" -"1866579968","1866588159","JP","JPN","JAPAN" -"1866588160","1866592255","NZ","NZL","NEW ZEALAND" -"1866592256","1866596351","AU","AUS","AUSTRALIA" -"1866596352","1866661887","CN","CHN","CHINA" -"1866661888","1866670079","AU","AUS","AUSTRALIA" -"1866670080","1866674175","MY","MYS","MALAYSIA" -"1866674176","1866678271","TW","TWN","TAIWAN" -"1866678272","1866686463","ID","IDN","INDONESIA" -"1866686464","1866690559","KH","KHM","CAMBODIA" -"1866690560","1866711039","JP","JPN","JAPAN" -"1866711040","1866715135","CN","CHN","CHINA" -"1866715136","1866727423","KR","KOR","REPUBLIC OF KOREA" -"1866727424","1866731519","HK","HKG","HONG KONG" -"1866731520","1866733567","JP","JPN","JAPAN" -"1866733568","1866735615","ID","IDN","INDONESIA" -"1866735616","1866743807","PH","PHL","PHILIPPINES" -"1866743808","1866751999","CN","CHN","CHINA" -"1866752000","1866756095","PK","PAK","PAKISTAN" -"1866756096","1866760191","ID","IDN","INDONESIA" -"1866760192","1866792959","JP","JPN","JAPAN" -"1866792960","1866858495","NZ","NZL","NEW ZEALAND" -"1866858496","1866989567","TW","TWN","TAIWAN" -"1866989568","1867513855","CN","CHN","CHINA" -"1867513856","1867775999","TW","TWN","TAIWAN" -"1867776000","1867841535","TH","THA","THAILAND" -"1867841536","1867907071","CN","CHN","CHINA" -"1867907072","1868038143","JP","JPN","JAPAN" -"1868038144","1868103679","PK","PAK","PAKISTAN" -"1868103680","1868201983","JP","JPN","JAPAN" -"1868201984","1868210175","MY","MYS","MALAYSIA" -"1868210176","1868212223","JP","JPN","JAPAN" -"1868212224","1868214271","IN","IND","INDIA" -"1868214272","1868218367","KH","KHM","CAMBODIA" -"1868218368","1868234751","SG","SGP","SINGAPORE" -"1868234752","1868267519","IN","IND","INDIA" -"1868267520","1868283903","KR","KOR","REPUBLIC OF KOREA" -"1868283904","1868292095","CN","CHN","CHINA" -"1868292096","1868294143","IN","IND","INDIA" -"1868294144","1868295167","VN","VNM","VIET NAM" -"1868295168","1868296191","HK","HKG","HONG KONG" -"1868296192","1868300287","JP","JPN","JAPAN" -"1868300288","1868333055","IN","IND","INDIA" -"1868333056","1868341247","PK","PAK","PAKISTAN" -"1868341248","1868345343","ID","IDN","INDONESIA" -"1868345344","1868346367","GU","GUM","GUAM" -"1868346368","1868349439","AU","AUS","AUSTRALIA" -"1868349440","1868357631","SG","SGP","SINGAPORE" -"1868357632","1868361727","HK","HKG","HONG KONG" -"1868361728","1868362751","KH","KHM","CAMBODIA" -"1868362752","1868363775","JP","JPN","JAPAN" -"1868363776","1868365823","BD","BGD","BANGLADESH" -"1868365824","1868431359","IN","IND","INDIA" -"1868431360","1868562431","ID","IDN","INDONESIA" -"1868562432","1869611007","JP","JPN","JAPAN" -"1869611008","1870004223","CN","CHN","CHINA" -"1870004224","1870036991","KR","KOR","REPUBLIC OF KOREA" -"1870036992","1870045183","KH","KHM","CAMBODIA" -"1870045184","1870086143","AU","AUS","AUSTRALIA" -"1870086144","1870110719","CN","CHN","CHINA" -"1870110720","1870118911","PK","PAK","PAKISTAN" -"1870118912","1870135295","IN","IND","INDIA" -"1870135296","1870462975","CN","CHN","CHINA" -"1870462976","1870479359","JP","JPN","JAPAN" -"1870479360","1870495743","PH","PHL","PHILIPPINES" -"1870495744","1870497791","TW","TWN","TAIWAN" -"1870497792","1870499839","IN","IND","INDIA" -"1870499840","1870501887","JP","JPN","JAPAN" -"1870501888","1870503935","AF","AFG","AFGHANISTAN" -"1870503936","1870512127","AU","AUS","AUSTRALIA" -"1870512128","1870528511","IN","IND","INDIA" -"1870528512","1873281023","CN","CHN","CHINA" -"1873281024","1873412095","JP","JPN","JAPAN" -"1873412096","1873477631","CN","CHN","CHINA" -"1873477632","1873510399","KR","KOR","REPUBLIC OF KOREA" -"1873510400","1873543167","JP","JPN","JAPAN" -"1873543168","1874329599","CN","CHN","CHINA" -"1874329600","1874460671","TW","TWN","TAIWAN" -"1874460672","1874591743","CN","CHN","CHINA" -"1874591744","1874853887","JP","JPN","JAPAN" -"1874853888","1876426751","CN","CHN","CHINA" -"1876426752","1876557823","JP","JPN","JAPAN" -"1876557824","1876688895","KR","KOR","REPUBLIC OF KOREA" -"1876688896","1876754431","AU","AUS","AUSTRALIA" -"1876754432","1876756479","BD","BGD","BANGLADESH" -"1876756480","1876762623","SG","SGP","SINGAPORE" -"1876762624","1876764671","KR","KOR","REPUBLIC OF KOREA" -"1876764672","1876765695","ID","IDN","INDONESIA" -"1876765696","1876766719","SG","SGP","SINGAPORE" -"1876766720","1876768767","MY","MYS","MALAYSIA" -"1876768768","1876769791","AU","AUS","AUSTRALIA" -"1876769792","1876770815","JP","JPN","JAPAN" -"1876770816","1876787199","SG","SGP","SINGAPORE" -"1876787200","1876885503","CN","CHN","CHINA" -"1876885504","1876893695","PH","PHL","PHILIPPINES" -"1876893696","1876901887","TH","THA","THAILAND" -"1876901888","1876918271","SG","SGP","SINGAPORE" -"1876918272","1876934655","LK","LKA","SRI LANKA" -"1876934656","1876942847","JP","JPN","JAPAN" -"1876942848","1876951039","AU","AUS","AUSTRALIA" -"1876951040","1877475327","CN","CHN","CHINA" -"1877475328","1877688319","JP","JPN","JAPAN" -"1877688320","1877689343","IN","IND","INDIA" -"1877689344","1877690367","TH","THA","THAILAND" -"1877690368","1877691391","IN","IND","INDIA" -"1877691392","1877692415","JP","JPN","JAPAN" -"1877692416","1877696511","PH","PHL","PHILIPPINES" -"1877696512","1877704703","CN","CHN","CHINA" -"1877704704","1877706751","AU","AUS","AUSTRALIA" -"1877706752","1877707775","SG","SGP","SINGAPORE" -"1877707776","1877710847","AU","AUS","AUSTRALIA" -"1877710848","1877711871","HK","HKG","HONG KONG" -"1877711872","1877712895","BD","BGD","BANGLADESH" -"1877712896","1877721087","CN","CHN","CHINA" -"1877721088","1877737471","TW","TWN","TAIWAN" -"1877737472","1877999615","JP","JPN","JAPAN" -"1877999616","1879048191","TW","TWN","TAIWAN" -"1879048192","1883218547","CN","CHN","CHINA" -"1883218548","1883218551","ES","ESP","SPAIN" -"1883218552","1883218555","FR","FRA","FRANCE" -"1883218556","1883218579","CN","CHN","CHINA" -"1883218580","1883218583","BE","BEL","BELGIUM" -"1883218584","1883504639","CN","CHN","CHINA" -"1883504640","1883766783","JP","JPN","JAPAN" -"1883766784","1883770879","MN","MNG","MONGOLIA" -"1883770880","1883783167","KR","KOR","REPUBLIC OF KOREA" -"1883783168","1883799551","VN","VNM","VIET NAM" -"1883799552","1883832319","KR","KOR","REPUBLIC OF KOREA" -"1883832320","1884028927","CN","CHN","CHINA" -"1884028928","1884159999","KR","KOR","REPUBLIC OF KOREA" -"1884160000","1884164095","VN","VNM","VIET NAM" -"1884164096","1884168191","TW","TWN","TAIWAN" -"1884168192","1884172287","ID","IDN","INDONESIA" -"1884172288","1884176383","PH","PHL","PHILIPPINES" -"1884176384","1884184575","TW","TWN","TAIWAN" -"1884184576","1884186623","ID","IDN","INDONESIA" -"1884186624","1884188671","TW","TWN","TAIWAN" -"1884188672","1884192767","JP","JPN","JAPAN" -"1884192768","1884209151","ID","IDN","INDONESIA" -"1884209152","1884217343","JP","JPN","JAPAN" -"1884217344","1884225535","SG","SGP","SINGAPORE" -"1884225536","1884291071","IN","IND","INDIA" -"1884291072","1885863935","CN","CHN","CHINA" -"1885863936","1885995007","TW","TWN","TAIWAN" -"1885995008","1886191615","KR","KOR","REPUBLIC OF KOREA" -"1886191616","1886195711","PH","PHL","PHILIPPINES" -"1886195712","1886197759","ID","IDN","INDONESIA" -"1886197760","1886199807","AU","AUS","AUSTRALIA" -"1886199808","1886207999","KR","KOR","REPUBLIC OF KOREA" -"1886208000","1886214143","NZ","NZL","NEW ZEALAND" -"1886214144","1886224383","AU","AUS","AUSTRALIA" -"1886224384","1886257151","CN","CHN","CHINA" -"1886257152","1886322687","IN","IND","INDIA" -"1886322688","1886781439","CN","CHN","CHINA" -"1886781440","1886978047","HK","HKG","HONG KONG" -"1886978048","1886986239","KR","KOR","REPUBLIC OF KOREA" -"1886986240","1886990335","TW","TWN","TAIWAN" -"1886990336","1886994431","IN","IND","INDIA" -"1886994432","1887005695","TW","TWN","TAIWAN" -"1887005696","1887006719","US","USA","UNITED STATES" -"1887006720","1887010815","HK","HKG","HONG KONG" -"1887010816","1887019007","TH","THA","THAILAND" -"1887019008","1887027199","HK","HKG","HONG KONG" -"1887027200","1887043583","KR","KOR","REPUBLIC OF KOREA" -"1887043584","1887764479","CN","CHN","CHINA" -"1887764480","1887813631","KR","KOR","REPUBLIC OF KOREA" -"1887813632","1887830015","IN","IND","INDIA" -"1887830016","1887961087","LK","LKA","SRI LANKA" -"1887961088","1887993855","JP","JPN","JAPAN" -"1887993856","1888026623","KR","KOR","REPUBLIC OF KOREA" -"1888026624","1888030719","BD","BGD","BANGLADESH" -"1888030720","1888034815","HK","HKG","HONG KONG" -"1888034816","1888038911","JP","JPN","JAPAN" -"1888038912","1888040959","IN","IND","INDIA" -"1888040960","1888059391","JP","JPN","JAPAN" -"1888059392","1888063487","VN","VNM","VIET NAM" -"1888063488","1888067583","JP","JPN","JAPAN" -"1888067584","1888071679","MY","MYS","MALAYSIA" -"1888071680","1888073727","KR","KOR","REPUBLIC OF KOREA" -"1888073728","1888239615","JP","JPN","JAPAN" -"1888239616","1888255999","KR","KOR","REPUBLIC OF KOREA" -"1888256000","1888260095","JP","JPN","JAPAN" -"1888260096","1888264191","KR","KOR","REPUBLIC OF KOREA" -"1888264192","1888266239","ID","IDN","INDONESIA" -"1888266240","1888268287","JP","JPN","JAPAN" -"1888268288","1888270335","AU","AUS","AUSTRALIA" -"1888270336","1888271359","SG","SGP","SINGAPORE" -"1888271360","1888272383","TH","THA","THAILAND" -"1888272384","1888288767","KR","KOR","REPUBLIC OF KOREA" -"1888288768","1888354303","AU","AUS","AUSTRALIA" -"1888354304","1888485375","TH","THA","THAILAND" -"1888485376","1891631103","KR","KOR","REPUBLIC OF KOREA" -"1891631104","1891893247","CN","CHN","CHINA" -"1891893248","1891942399","IN","IND","INDIA" -"1891942400","1891950591","KR","KOR","REPUBLIC OF KOREA" -"1891950592","1891958783","PH","PHL","PHILIPPINES" -"1891958784","1892024319","VN","VNM","VIET NAM" -"1892024320","1892122623","PH","PHL","PHILIPPINES" -"1892122624","1892155391","SG","SGP","SINGAPORE" -"1892155392","1892941823","PH","PHL","PHILIPPINES" -"1892941824","1893015551","KR","KOR","REPUBLIC OF KOREA" -"1893015552","1893023743","AU","AUS","AUSTRALIA" -"1893023744","1893027839","HK","HKG","HONG KONG" -"1893027840","1893031935","VN","VNM","VIET NAM" -"1893031936","1893040127","HK","HKG","HONG KONG" -"1893040128","1893072895","AU","AUS","AUSTRALIA" -"1893072896","1893138431","KR","KOR","REPUBLIC OF KOREA" -"1893138432","1893203967","ID","IDN","INDONESIA" -"1893203968","1893728255","KR","KOR","REPUBLIC OF KOREA" -"1893728256","1896480767","CN","CHN","CHINA" -"1896480768","1896497151","KR","KOR","REPUBLIC OF KOREA" -"1896497152","1896513535","SG","SGP","SINGAPORE" -"1896513536","1896546303","HK","HKG","HONG KONG" -"1896546304","1896579071","BD","BGD","BANGLADESH" -"1896579072","1896587263","ID","IDN","INDONESIA" -"1896587264","1896591359","SG","SGP","SINGAPORE" -"1896591360","1896593407","ID","IDN","INDONESIA" -"1896593408","1896595455","AU","AUS","AUSTRALIA" -"1896595456","1896603647","CN","CHN","CHINA" -"1896603648","1896605695","IN","IND","INDIA" -"1896605696","1896607743","AU","AUS","AUSTRALIA" -"1896607744","1896609791","VU","VUT","VANUATU" -"1896609792","1896611839","AU","AUS","AUSTRALIA" -"1896611840","1897070591","CN","CHN","CHINA" -"1897070592","1897136127","IN","IND","INDIA" -"1897136128","1897140223","AU","AUS","AUSTRALIA" -"1897140224","1897141247","IN","IND","INDIA" -"1897141248","1897142271","HK","HKG","HONG KONG" -"1897142272","1897144319","AU","AUS","AUSTRALIA" -"1897144320","1897152511","NC","NCL","NEW CALEDONIA" -"1897152512","1897160703","FJ","FJI","FIJI" -"1897160704","1897170943","AU","AUS","AUSTRALIA" -"1897170944","1897172991","ID","IDN","INDONESIA" -"1897172992","1897175039","SG","SGP","SINGAPORE" -"1897175040","1897176063","JP","JPN","JAPAN" -"1897176064","1897177087","SG","SGP","SINGAPORE" -"1897177088","1897185279","PH","PHL","PHILIPPINES" -"1897185280","1897201663","JP","JPN","JAPAN" -"1897201664","1897209855","KR","KOR","REPUBLIC OF KOREA" -"1897209856","1897213951","AU","AUS","AUSTRALIA" -"1897213952","1897218047","JP","JPN","JAPAN" -"1897218048","1897222143","IN","IND","INDIA" -"1897222144","1897226239","TW","TWN","TAIWAN" -"1897226240","1897234431","NC","NCL","NEW CALEDONIA" -"1897234432","1897242623","AU","AUS","AUSTRALIA" -"1897242624","1897250815","TW","TWN","TAIWAN" -"1897250816","1897259007","HK","HKG","HONG KONG" -"1897259008","1897260031","NZ","NZL","NEW ZEALAND" -"1897260032","1897261055","BD","BGD","BANGLADESH" -"1897261056","1897263103","JP","JPN","JAPAN" -"1897263104","1897265151","TH","THA","THAILAND" -"1897265152","1897267199","JP","JPN","JAPAN" -"1897267200","1897365503","VN","VNM","VIET NAM" -"1897365504","1897398271","MY","MYS","MALAYSIA" -"1897398272","1897660415","CN","CHN","CHINA" -"1897660416","1897725951","HK","HKG","HONG KONG" -"1897725952","1897725983","JP","JPN","JAPAN" -"1897725984","1897725999","AU","AUS","AUSTRALIA" -"1897726000","1897726015","JP","JPN","JAPAN" -"1897726016","1897734143","AU","AUS","AUSTRALIA" -"1897734144","1897734159","HK","HKG","HONG KONG" -"1897734160","1897734223","AU","AUS","AUSTRALIA" -"1897734224","1897734239","KR","KOR","REPUBLIC OF KOREA" -"1897734240","1897738239","AU","AUS","AUSTRALIA" -"1897738240","1897738255","KR","KOR","REPUBLIC OF KOREA" -"1897738256","1897742335","AU","AUS","AUSTRALIA" -"1897742336","1897742383","SG","SGP","SINGAPORE" -"1897742384","1897758719","AU","AUS","AUSTRALIA" -"1897758720","1897779199","KR","KOR","REPUBLIC OF KOREA" -"1897779200","1897781247","AU","AUS","AUSTRALIA" -"1897781248","1897783295","JP","JPN","JAPAN" -"1897783296","1897787391","SG","SGP","SINGAPORE" -"1897787392","1897789439","AU","AUS","AUSTRALIA" -"1897789440","1897790463","KH","KHM","CAMBODIA" -"1897790464","1897791487","HK","HKG","HONG KONG" -"1897791488","1897824255","KR","KOR","REPUBLIC OF KOREA" -"1897824256","1897857023","IN","IND","INDIA" -"1897857024","1897922559","CN","CHN","CHINA" -"1897922560","1898708991","JP","JPN","JAPAN" -"1898708992","1899233279","CN","CHN","CHINA" -"1899233280","1899241471","AU","AUS","AUSTRALIA" -"1899241472","1899249663","VN","VNM","VIET NAM" -"1899249664","1899266047","MO","MAC","MACAO" -"1899266048","1899268095","AU","AUS","AUSTRALIA" -"1899268096","1899270143","KR","KOR","REPUBLIC OF KOREA" -"1899270144","1899272191","AU","AUS","AUSTRALIA" -"1899272192","1899273215","SG","SGP","SINGAPORE" -"1899273216","1899274239","JP","JPN","JAPAN" -"1899274240","1899282431","CN","CHN","CHINA" -"1899282432","1899290623","KR","KOR","REPUBLIC OF KOREA" -"1899290624","1899298815","AU","AUS","AUSTRALIA" -"1899298816","1899364351","TH","THA","THAILAND" -"1899364352","1899724799","CN","CHN","CHINA" -"1899724800","1899741183","KR","KOR","REPUBLIC OF KOREA" -"1899741184","1899749375","LK","LKA","SRI LANKA" -"1899749376","1899750399","AU","AUS","AUSTRALIA" -"1899750400","1899751423","JP","JPN","JAPAN" -"1899751424","1899753471","ID","IDN","INDONESIA" -"1899753472","1899757567","HK","HKG","HONG KONG" -"1899757568","1899831295","KR","KOR","REPUBLIC OF KOREA" -"1899831296","1899839487","PH","PHL","PHILIPPINES" -"1899839488","1899849727","AU","AUS","AUSTRALIA" -"1899849728","1899850751","KR","KOR","REPUBLIC OF KOREA" -"1899850752","1899851775","VN","VNM","VIET NAM" -"1899851776","1899855871","JP","JPN","JAPAN" -"1899855872","1899888639","TW","TWN","TAIWAN" -"1899888640","1904345087","CN","CHN","CHINA" -"1904345088","1904361471","JP","JPN","JAPAN" -"1904361472","1904369663","KR","KOR","REPUBLIC OF KOREA" -"1904369664","1904375807","CN","CHN","CHINA" -"1904375808","1904376831","NZ","NZL","NEW ZEALAND" -"1904376832","1904377855","AU","AUS","AUSTRALIA" -"1904377856","1904476159","KR","KOR","REPUBLIC OF KOREA" -"1904476160","1905262591","CN","CHN","CHINA" -"1905262592","1906311167","JP","JPN","JAPAN" -"1906311168","1908408319","VN","VNM","VIET NAM" -"1908408320","1908441087","AU","AUS","AUSTRALIA" -"1908441088","1908473855","JP","JPN","JAPAN" -"1908473856","1908539391","IN","IND","INDIA" -"1908539392","1908670463","CN","CHN","CHINA" -"1908670464","1908735999","TW","TWN","TAIWAN" -"1908736000","1908744191","AU","AUS","AUSTRALIA" -"1908744192","1908746239","SG","SGP","SINGAPORE" -"1908746240","1908748287","JP","JPN","JAPAN" -"1908748288","1908750335","PK","PAK","PAKISTAN" -"1908750336","1908752383","AU","AUS","AUSTRALIA" -"1908752384","1908753407","NZ","NZL","NEW ZEALAND" -"1908753408","1908754431","AU","AUS","AUSTRALIA" -"1908754432","1908756479","PH","PHL","PHILIPPINES" -"1908756480","1908760575","KR","KOR","REPUBLIC OF KOREA" -"1908760576","1908761599","NZ","NZL","NEW ZEALAND" -"1908761600","1908762623","AU","AUS","AUSTRALIA" -"1908762624","1908762879","IN","IND","INDIA" -"1908762880","1908763135","HK","HKG","HONG KONG" -"1908763136","1908763647","IN","IND","INDIA" -"1908763648","1908768767","AU","AUS","AUSTRALIA" -"1908768768","1908801535","JP","JPN","JAPAN" -"1908801536","1908899839","KR","KOR","REPUBLIC OF KOREA" -"1908899840","1908932607","NP","NPL","NEPAL" -"1908932608","1909129215","CN","CHN","CHINA" -"1909129216","1909194751","AU","AUS","AUSTRALIA" -"1909194752","1909456895","CN","CHN","CHINA" -"1909456896","1909473279","JP","JPN","JAPAN" -"1909473280","1909473791","ID","IDN","INDONESIA" -"1909473792","1909475327","HK","HKG","HONG KONG" -"1909475328","1909475839","PK","PAK","PAKISTAN" -"1909475840","1909477631","HK","HKG","HONG KONG" -"1909477632","1909477887","IQ","IRQ","IRAQ" -"1909477888","1909478655","HK","HKG","HONG KONG" -"1909478656","1909478911","BD","BGD","BANGLADESH" -"1909478912","1909481471","HK","HKG","HONG KONG" -"1909481472","1909587967","CN","CHN","CHINA" -"1909587968","1909719039","MY","MYS","MALAYSIA" -"1909719040","1909735423","CN","CHN","CHINA" -"1909735424","1909743615","IN","IND","INDIA" -"1909743616","1909745663","AU","AUS","AUSTRALIA" -"1909745664","1909746687","JP","JPN","JAPAN" -"1909746688","1909747711","MY","MYS","MALAYSIA" -"1909747712","1909751807","ID","IDN","INDONESIA" -"1909751808","1909759999","JP","JPN","JAPAN" -"1909760000","1909762047","ID","IDN","INDONESIA" -"1909762048","1909764095","AU","AUS","AUSTRALIA" -"1909764096","1909766143","PH","PHL","PHILIPPINES" -"1909766144","1909768191","AU","AUS","AUSTRALIA" -"1909768192","1909784575","HK","HKG","HONG KONG" -"1909784576","1909817343","CN","CHN","CHINA" -"1909817344","1909850111","JP","JPN","JAPAN" -"1909850112","1909981183","CN","CHN","CHINA" -"1909981184","1910112255","KR","KOR","REPUBLIC OF KOREA" -"1910112256","1912340479","CN","CHN","CHINA" -"1912340480","1912602623","HK","HKG","HONG KONG" -"1912602624","1913651199","ID","IDN","INDONESIA" -"1913651200","1914109951","JP","JPN","JAPAN" -"1914109952","1914175487","AU","AUS","AUSTRALIA" -"1914175488","1914437631","TW","TWN","TAIWAN" -"1914437632","1914503167","CN","CHN","CHINA" -"1914503168","1914552319","KR","KOR","REPUBLIC OF KOREA" -"1914552320","1914560511","SG","SGP","SINGAPORE" -"1914560512","1914568703","KH","KHM","CAMBODIA" -"1914568704","1914576895","KR","KOR","REPUBLIC OF KOREA" -"1914576896","1914580991","TW","TWN","TAIWAN" -"1914580992","1914585087","KR","KOR","REPUBLIC OF KOREA" -"1914585088","1914587135","AU","AUS","AUSTRALIA" -"1914587136","1914589183","IN","IND","INDIA" -"1914589184","1914593279","ID","IDN","INDONESIA" -"1914593280","1914601471","AU","AUS","AUSTRALIA" -"1914601472","1914634239","KR","KOR","REPUBLIC OF KOREA" -"1914634240","1914642431","BD","BGD","BANGLADESH" -"1914642432","1914650623","KR","KOR","REPUBLIC OF KOREA" -"1914650624","1914652671","MN","MNG","MONGOLIA" -"1914652672","1914654719","AU","AUS","AUSTRALIA" -"1914654720","1914658815","JP","JPN","JAPAN" -"1914658816","1914662911","AU","AUS","AUSTRALIA" -"1914662912","1914667007","KR","KOR","REPUBLIC OF KOREA" -"1914667008","1914683391","IN","IND","INDIA" -"1914683392","1914691583","AU","AUS","AUSTRALIA" -"1914691584","1914695679","IN","IND","INDIA" -"1914695680","1914697727","ID","IDN","INDONESIA" -"1914697728","1914699775","IN","IND","INDIA" -"1914699776","1915748351","TW","TWN","TAIWAN" -"1915748352","1916010495","JP","JPN","JAPAN" -"1916010496","1916141567","KR","KOR","REPUBLIC OF KOREA" -"1916141568","1916272639","CN","CHN","CHINA" -"1916272640","1916534783","ID","IDN","INDONESIA" -"1916534784","1917124607","CN","CHN","CHINA" -"1917124608","1917169663","JP","JPN","JAPAN" -"1917169664","1917177855","NC","NCL","NEW CALEDONIA" -"1917177856","1917181951","AU","AUS","AUSTRALIA" -"1917181952","1917190143","IN","IND","INDIA" -"1917190144","1917321215","KR","KOR","REPUBLIC OF KOREA" -"1917321216","1917779967","AU","AUS","AUSTRALIA" -"1917779968","1917796351","ID","IDN","INDONESIA" -"1917796352","1917845503","IN","IND","INDIA" -"1917845504","1918894079","AU","AUS","AUSTRALIA" -"1918894080","1919680511","CN","CHN","CHINA" -"1919680512","1919729663","KR","KOR","REPUBLIC OF KOREA" -"1919729664","1919746047","PH","PHL","PHILIPPINES" -"1919746048","1919811583","TH","THA","THAILAND" -"1919811584","1919815679","CN","CHN","CHINA" -"1919815680","1919817727","ID","IDN","INDONESIA" -"1919817728","1919819775","KR","KOR","REPUBLIC OF KOREA" -"1919819776","1919821823","NZ","NZL","NEW ZEALAND" -"1919821824","1919823871","AU","AUS","AUSTRALIA" -"1919823872","1919827967","JP","JPN","JAPAN" -"1919827968","1919844351","CN","CHN","CHINA" -"1919844352","1919877119","AU","AUS","AUSTRALIA" -"1919877120","1919885311","CN","CHN","CHINA" -"1919885312","1919893503","KR","KOR","REPUBLIC OF KOREA" -"1919893504","1919909887","JP","JPN","JAPAN" -"1919909888","1919918079","AU","AUS","AUSTRALIA" -"1919918080","1919926271","CN","CHN","CHINA" -"1919926272","1919942655","KR","KOR","REPUBLIC OF KOREA" -"1919942656","1920466943","CN","CHN","CHINA" -"1920466944","1920991231","ID","IDN","INDONESIA" -"1920991232","1921056767","TH","THA","THAILAND" -"1921056768","1921058815","JP","JPN","JAPAN" -"1921058816","1921060863","BD","BGD","BANGLADESH" -"1921060864","1921062911","ID","IDN","INDONESIA" -"1921062912","1921064959","LA","LAO","LAO PEOPLE'S DEMOCRATIC REPUBLIC" -"1921064960","1921069055","SG","SGP","SINGAPORE" -"1921069056","1921073151","JP","JPN","JAPAN" -"1921073152","1921089535","KR","KOR","REPUBLIC OF KOREA" -"1921089536","1921105919","AU","AUS","AUSTRALIA" -"1921105920","1921122303","KR","KOR","REPUBLIC OF KOREA" -"1921122304","1921187839","BD","BGD","BANGLADESH" -"1921187840","1921253375","AU","AUS","AUSTRALIA" -"1921253376","1921318911","CN","CHN","CHINA" -"1921318912","1921384447","MY","MYS","MALAYSIA" -"1921384448","1921388543","NZ","NZL","NEW ZEALAND" -"1921388544","1921392639","AU","AUS","AUSTRALIA" -"1921392640","1921400831","JP","JPN","JAPAN" -"1921400832","1921404927","ID","IDN","INDONESIA" -"1921404928","1921405183","HK","HKG","HONG KONG" -"1921405184","1921405439","ID","IDN","INDONESIA" -"1921405440","1921406975","HK","HKG","HONG KONG" -"1921406976","1921409023","BD","BGD","BANGLADESH" -"1921409024","1921425407","JP","JPN","JAPAN" -"1921425408","1921431551","NZ","NZL","NEW ZEALAND" -"1921431552","1921433599","AU","AUS","AUSTRALIA" -"1921433600","1921449983","JP","JPN","JAPAN" -"1921449984","1921515519","CN","CHN","CHINA" -"1921515520","1921646591","TW","TWN","TAIWAN" -"1921646592","1921777663","CN","CHN","CHINA" -"1921777664","1921843199","TW","TWN","TAIWAN" -"1921843200","1921851391","KR","KOR","REPUBLIC OF KOREA" -"1921851392","1921853439","JP","JPN","JAPAN" -"1921853440","1921855487","KR","KOR","REPUBLIC OF KOREA" -"1921855488","1921859583","ID","IDN","INDONESIA" -"1921859584","1921861631","AU","AUS","AUSTRALIA" -"1921861632","1921863679","SG","SGP","SINGAPORE" -"1921863680","1921865727","BD","BGD","BANGLADESH" -"1921865728","1921867775","ID","IDN","INDONESIA" -"1921867776","1921875967","AU","AUS","AUSTRALIA" -"1921875968","1921892351","CN","CHN","CHINA" -"1921892352","1921900543","AU","AUS","AUSTRALIA" -"1921900544","1921908735","KR","KOR","REPUBLIC OF KOREA" -"1921908736","1921943551","JP","JPN","JAPAN" -"1921943552","1921945599","IN","IND","INDIA" -"1921945600","1921949695","HK","HKG","HONG KONG" -"1921949696","1921957887","AU","AUS","AUSTRALIA" -"1921957888","1921966079","GU","GUM","GUAM" -"1921966080","1921974271","AU","AUS","AUSTRALIA" -"1921974272","1922039807","IN","IND","INDIA" -"1922039808","1925447679","JP","JPN","JAPAN" -"1925447680","1925578751","CN","CHN","CHINA" -"1925578752","1925611519","AU","AUS","AUSTRALIA" -"1925611520","1925619711","PH","PHL","PHILIPPINES" -"1925619712","1925627903","TW","TWN","TAIWAN" -"1925627904","1925638143","JP","JPN","JAPAN" -"1925638144","1925638399","SA","SAU","SAUDI ARABIA" -"1925638400","1925638655","PK","PAK","PAKISTAN" -"1925638656","1925638911","KW","KWT","KUWAIT" -"1925638912","1925639679","EG","EGY","EGYPT" -"1925639680","1925639935","KW","KWT","KUWAIT" -"1925639936","1925640191","SA","SAU","SAUDI ARABIA" -"1925640192","1925642239","ID","IDN","INDONESIA" -"1925642240","1925644287","AU","AUS","AUSTRALIA" -"1925644288","1925660671","KR","KOR","REPUBLIC OF KOREA" -"1925660672","1925664767","HK","HKG","HONG KONG" -"1925664768","1925677055","ID","IDN","INDONESIA" -"1925677056","1926234111","KR","KOR","REPUBLIC OF KOREA" -"1926234112","1929379839","CN","CHN","CHINA" -"1929379840","1930952703","KR","KOR","REPUBLIC OF KOREA" -"1930952704","1931345919","CN","CHN","CHINA" -"1931345920","1931354111","JP","JPN","JAPAN" -"1931354112","1931362303","AU","AUS","AUSTRALIA" -"1931362304","1931378687","TW","TWN","TAIWAN" -"1931378688","1931427839","JP","JPN","JAPAN" -"1931427840","1931431935","PH","PHL","PHILIPPINES" -"1931431936","1931433983","JP","JPN","JAPAN" -"1931433984","1931436031","AU","AUS","AUSTRALIA" -"1931436032","1931444223","KR","KOR","REPUBLIC OF KOREA" -"1931444224","1931460607","TH","THA","THAILAND" -"1931460608","1931468799","JP","JPN","JAPAN" -"1931468800","1931476991","SG","SGP","SINGAPORE" -"1931476992","1931739135","CN","CHN","CHINA" -"1931739136","1932001279","JP","JPN","JAPAN" -"1932001280","1932132351","KR","KOR","REPUBLIC OF KOREA" -"1932132352","1932148735","AU","AUS","AUSTRALIA" -"1932148736","1932152831","PK","PAK","PAKISTAN" -"1932152832","1932156927","AU","AUS","AUSTRALIA" -"1932156928","1932161023","JP","JPN","JAPAN" -"1932161024","1932163071","TW","TWN","TAIWAN" -"1932163072","1932165119","PH","PHL","PHILIPPINES" -"1932165120","1932197887","SG","SGP","SINGAPORE" -"1932197888","1932263423","TW","TWN","TAIWAN" -"1932263424","1933574143","CN","CHN","CHINA" -"1933574144","1933639679","AU","AUS","AUSTRALIA" -"1933639680","1933705215","JP","JPN","JAPAN" -"1933705216","1933770751","SG","SGP","SINGAPORE" -"1933770752","1933836287","TH","THA","THAILAND" -"1933836288","1933901823","KR","KOR","REPUBLIC OF KOREA" -"1933901824","1933922303","AU","AUS","AUSTRALIA" -"1933922304","1933926399","IN","IND","INDIA" -"1933926400","1933934591","KR","KOR","REPUBLIC OF KOREA" -"1933934592","1933942783","IN","IND","INDIA" -"1933942784","1933950975","AU","AUS","AUSTRALIA" -"1933950976","1933955071","JP","JPN","JAPAN" -"1933955072","1933957119","BD","BGD","BANGLADESH" -"1933957120","1933959167","ID","IDN","INDONESIA" -"1933959168","1933963263","JP","JPN","JAPAN" -"1933963264","1933967359","IN","IND","INDIA" -"1933967360","1934098431","AU","AUS","AUSTRALIA" -"1934098432","1934622719","VN","VNM","VIET NAM" -"1934622720","1934884863","TW","TWN","TAIWAN" -"1934884864","1934901247","CN","CHN","CHINA" -"1934901248","1934917631","LA","LAO","LAO PEOPLE'S DEMOCRATIC REPUBLIC" -"1934917632","1934925823","MV","MDV","MALDIVES" -"1934925824","1934927871","KR","KOR","REPUBLIC OF KOREA" -"1934927872","1934929919","PH","PHL","PHILIPPINES" -"1934929920","1934931967","VN","VNM","VIET NAM" -"1934931968","1934934015","JP","JPN","JAPAN" -"1934934016","1934942207","CN","CHN","CHINA" -"1934942208","1934966783","PH","PHL","PHILIPPINES" -"1934966784","1934974975","ID","IDN","INDONESIA" -"1934974976","1934983167","JP","JPN","JAPAN" -"1934983168","1934983423","MY","MYS","MALAYSIA" -"1934983424","1934987263","AU","AUS","AUSTRALIA" -"1934987264","1934991359","TW","TWN","TAIWAN" -"1934991360","1934999551","KR","KOR","REPUBLIC OF KOREA" -"1934999552","1935015935","CN","CHN","CHINA" -"1935015936","1935081471","KR","KOR","REPUBLIC OF KOREA" -"1935081472","1935147007","TH","THA","THAILAND" -"1935147008","1935671295","KR","KOR","REPUBLIC OF KOREA" -"1935671296","1935933439","IN","IND","INDIA" -"1935933440","1936457727","CN","CHN","CHINA" -"1936457728","1937244159","IN","IND","INDIA" -"1937244160","1937506303","CN","CHN","CHINA" -"1937506304","1937510399","AU","AUS","AUSTRALIA" -"1937510400","1937514495","CN","CHN","CHINA" -"1937514496","1937522687","AU","AUS","AUSTRALIA" -"1937522688","1937530879","ID","IDN","INDONESIA" -"1937530880","1937532927","US","USA","UNITED STATES" -"1937532928","1937533439","IN","IND","INDIA" -"1937533440","1937534463","US","USA","UNITED STATES" -"1937534464","1937534975","GB","GBR","UNITED KINGDOM" -"1937534976","1937535743","US","USA","UNITED STATES" -"1937535744","1937535999","IN","IND","INDIA" -"1937536000","1937536511","GB","GBR","UNITED KINGDOM" -"1937536512","1937537023","US","USA","UNITED STATES" -"1937537024","1937539071","IN","IND","INDIA" -"1937539072","1937637375","JP","JPN","JAPAN" -"1937637376","1937670143","HK","HKG","HONG KONG" -"1937670144","1937672191","NZ","NZL","NEW ZEALAND" -"1937672192","1937674239","AU","AUS","AUSTRALIA" -"1937674240","1937678335","JP","JPN","JAPAN" -"1937678336","1937682431","NC","NCL","NEW CALEDONIA" -"1937682432","1937686527","AU","AUS","AUSTRALIA" -"1937686528","1937702911","KR","KOR","REPUBLIC OF KOREA" -"1937702912","1937768447","BD","BGD","BANGLADESH" -"1937768448","1938030591","AU","AUS","AUSTRALIA" -"1938030592","1938292735","MY","MYS","MALAYSIA" -"1938292736","1938948095","KR","KOR","REPUBLIC OF KOREA" -"1938948096","1938964479","JP","JPN","JAPAN" -"1938964480","1938972671","AU","AUS","AUSTRALIA" -"1938972672","1938976767","MY","MYS","MALAYSIA" -"1938976768","1938978815","SG","SGP","SINGAPORE" -"1938978816","1938980863","VN","VNM","VIET NAM" -"1938980864","1939079167","PH","PHL","PHILIPPINES" -"1939079168","1939865599","CN","CHN","CHINA" -"1939865600","1939898367","KR","KOR","REPUBLIC OF KOREA" -"1939898368","1939914751","HK","HKG","HONG KONG" -"1939914752","1939931135","IN","IND","INDIA" -"1939931136","1939996671","KR","KOR","REPUBLIC OF KOREA" -"1939996672","1940127743","JP","JPN","JAPAN" -"1940127744","1940193279","MY","MYS","MALAYSIA" -"1940193280","1940234239","JP","JPN","JAPAN" -"1940234240","1940236287","VN","VNM","VIET NAM" -"1940236288","1940238335","AU","AUS","AUSTRALIA" -"1940238336","1940240383","KR","KOR","REPUBLIC OF KOREA" -"1940240384","1940242431","JP","JPN","JAPAN" -"1940242432","1940258815","TW","TWN","TAIWAN" -"1940258816","1940283391","AU","AUS","AUSTRALIA" -"1940283392","1940291583","ID","IDN","INDONESIA" -"1940291584","1940295679","HK","HKG","HONG KONG" -"1940295680","1940324351","JP","JPN","JAPAN" -"1940324352","1940357119","PK","PAK","PAKISTAN" -"1940357120","1940389887","JP","JPN","JAPAN" -"1940389888","1940914175","CN","CHN","CHINA" -"1940914176","1941046271","JP","JPN","JAPAN" -"1941046272","1941048319","AU","AUS","AUSTRALIA" -"1941048320","1941048831","SG","SGP","SINGAPORE" -"1941048832","1941051391","AU","AUS","AUSTRALIA" -"1941051392","1941052415","KH","KHM","CAMBODIA" -"1941052416","1941053439","AU","AUS","AUSTRALIA" -"1941053440","1941057535","KR","KOR","REPUBLIC OF KOREA" -"1941057536","1941059583","ID","IDN","INDONESIA" -"1941059584","1941061631","TH","THA","THAILAND" -"1941061632","1941069823","KR","KOR","REPUBLIC OF KOREA" -"1941069824","1941071871","IN","IND","INDIA" -"1941071872","1941073919","AU","AUS","AUSTRALIA" -"1941073920","1941075967","JP","JPN","JAPAN" -"1941075968","1941110783","ID","IDN","INDONESIA" -"1941110784","1941176319","JP","JPN","JAPAN" -"1941176320","1941438463","CN","CHN","CHINA" -"1941438464","1941569535","IN","IND","INDIA" -"1941569536","1941618687","PK","PAK","PAKISTAN" -"1941618688","1941635071","AU","AUS","AUSTRALIA" -"1941635072","1941639167","IN","IND","INDIA" -"1941639168","1941643263","NP","NPL","NEPAL" -"1941643264","1941651455","IN","IND","INDIA" -"1941651456","1941655551","JP","JPN","JAPAN" -"1941655552","1941657599","KR","KOR","REPUBLIC OF KOREA" -"1941657600","1941658623","MN","MNG","MONGOLIA" -"1941658624","1941659647","JP","JPN","JAPAN" -"1941659648","1941667839","NZ","NZL","NEW ZEALAND" -"1941667840","1941700607","AU","AUS","AUSTRALIA" -"1941700608","1941831679","NZ","NZL","NEW ZEALAND" -"1941831680","1941962751","AU","AUS","AUSTRALIA" -"1941962752","1945108479","CN","CHN","CHINA" -"1945108480","1946157055","IN","IND","INDIA" -"1946157056","1946159103","ID","IDN","INDONESIA" -"1946159104","1946165247","AU","AUS","AUSTRALIA" -"1946165248","1946173439","PK","PAK","PAKISTAN" -"1946173440","1946173503","PG","PNG","PAPUA NEW GUINEA" -"1946173504","1946173519","SG","SGP","SINGAPORE" -"1946173520","1946173535","MY","MYS","MALAYSIA" -"1946173536","1946173567","AU","AUS","AUSTRALIA" -"1946173568","1946173631","HK","HKG","HONG KONG" -"1946173632","1946173663","AU","AUS","AUSTRALIA" -"1946173664","1946173679","PH","PHL","PHILIPPINES" -"1946173680","1946173687","TW","TWN","TAIWAN" -"1946173688","1946173695","AU","AUS","AUSTRALIA" -"1946173696","1946173951","TW","TWN","TAIWAN" -"1946173952","1946174463","AU","AUS","AUSTRALIA" -"1946174464","1946174720","SG","SGP","SINGAPORE" -"1946174721","1946175487","AU","AUS","AUSTRALIA" -"1946175488","1946176511","SY","SYR","SYRIAN ARAB REPUBLIC" -"1946176512","1946176767","PH","PHL","PHILIPPINES" -"1946176768","1946177535","AU","AUS","AUSTRALIA" -"1946177536","1946177791","SG","SGP","SINGAPORE" -"1946177792","1946181631","AU","AUS","AUSTRALIA" -"1946181632","1946189823","MY","MYS","MALAYSIA" -"1946189824","1946222591","JP","JPN","JAPAN" -"1946222592","1946943487","CN","CHN","CHINA" -"1946943488","1946951679","JP","JPN","JAPAN" -"1946951680","1946953727","BD","BGD","BANGLADESH" -"1946953728","1946955775","ID","IDN","INDONESIA" -"1946955776","1946957823","SG","SGP","SINGAPORE" -"1946957824","1946959871","AU","AUS","AUSTRALIA" -"1946959872","1946976255","LK","LKA","SRI LANKA" -"1946976256","1947009023","SG","SGP","SINGAPORE" -"1947009024","1947074559","CN","CHN","CHINA" -"1947074560","1947205631","SG","SGP","SINGAPORE" -"1947205632","1948254207","CN","CHN","CHINA" -"1948254208","1949302783","KR","KOR","REPUBLIC OF KOREA" -"1949302784","1949433855","HK","HKG","HONG KONG" -"1949433856","1949439999","AU","AUS","AUSTRALIA" -"1949440000","1949442047","ID","IDN","INDONESIA" -"1949442048","1949446143","TW","TWN","TAIWAN" -"1949446144","1949448191","JP","JPN","JAPAN" -"1949448192","1949450239","AU","AUS","AUSTRALIA" -"1949450240","1949466623","IN","IND","INDIA" -"1949466624","1949499391","PH","PHL","PHILIPPINES" -"1949499392","1949564927","SG","SGP","SINGAPORE" -"1949564928","1949958143","CN","CHN","CHINA" -"1949958144","1949990911","PK","PAK","PAKISTAN" -"1949990912","1949995007","CN","CHN","CHINA" -"1949995008","1950007295","JP","JPN","JAPAN" -"1950007296","1950009343","ID","IDN","INDONESIA" -"1950009344","1950011391","BD","BGD","BANGLADESH" -"1950011392","1950015487","CN","CHN","CHINA" -"1950015488","1950023679","TH","THA","THAILAND" -"1950023680","1950089215","TW","TWN","TAIWAN" -"1950089216","1950351359","CN","CHN","CHINA" -"1950351360","1950482431","JP","JPN","JAPAN" -"1950482432","1950515199","CN","CHN","CHINA" -"1950515200","1950518271","US","USA","UNITED STATES" -"1950518272","1950518783","UK","GBR","UNITED KINGDOM" -"1950518784","1950519295","NL","NLD","NETHERLANDS" -"1950519296","1950523391","IN","IND","INDIA" -"1950523392","1950531583","AU","AUS","AUSTRALIA" -"1950531584","1950533631","NP","NPL","NEPAL" -"1950533632","1950535679","ID","IDN","INDONESIA" -"1950535680","1950539775","HK","HKG","HONG KONG" -"1950539776","1950543871","AU","AUS","AUSTRALIA" -"1950543872","1950545919","NZ","NZL","NEW ZEALAND" -"1950545920","1950547967","PH","PHL","PHILIPPINES" -"1950547968","1950580735","KR","KOR","REPUBLIC OF KOREA" -"1950580736","1950613503","AU","AUS","AUSTRALIA" -"1950613504","1950617599","GU","GUM","GUAM" -"1950617600","1950621695","AU","AUS","AUSTRALIA" -"1950621696","1950629887","KR","KOR","REPUBLIC OF KOREA" -"1950629888","1950646271","IN","IND","INDIA" -"1950646272","1950648319","VN","VNM","VIET NAM" -"1950648320","1950650367","PH","PHL","PHILIPPINES" -"1950650368","1950654463","TH","THA","THAILAND" -"1950654464","1950658559","ID","IDN","INDONESIA" -"1950658560","1950660607","PH","PHL","PHILIPPINES" -"1950660608","1950661127","AU","AUS","AUSTRALIA" -"1950661128","1950661135","HK","HKG","HONG KONG" -"1950661136","1950662655","AU","AUS","AUSTRALIA" -"1950662656","1950666751","BD","BGD","BANGLADESH" -"1950666752","1950668799","NP","NPL","NEPAL" -"1950668800","1950670847","JP","JPN","JAPAN" -"1950670848","1950672895","ID","IDN","INDONESIA" -"1950672896","1950674943","KR","KOR","REPUBLIC OF KOREA" -"1950674944","1950676991","IN","IND","INDIA" -"1950676992","1950679039","ID","IDN","INDONESIA" -"1950679040","1950777343","CN","CHN","CHINA" -"1950777344","1950793727","JP","JPN","JAPAN" -"1950793728","1950810111","AU","AUS","AUSTRALIA" -"1950810112","1950875647","PK","PAK","PAKISTAN" -"1950875648","1951137791","IN","IND","INDIA" -"1951137792","1951399935","CN","CHN","CHINA" -"1951399936","1951662079","JP","JPN","JAPAN" -"1951662080","1951727615","KR","KOR","REPUBLIC OF KOREA" -"1951727616","1951793151","AU","AUS","AUSTRALIA" -"1951793152","1952022527","SG","SGP","SINGAPORE" -"1952022528","1952026623","TW","TWN","TAIWAN" -"1952026624","1952030719","CN","CHN","CHINA" -"1952030720","1952038911","KR","KOR","REPUBLIC OF KOREA" -"1952038912","1952047103","JP","JPN","JAPAN" -"1952047104","1952051199","NZ","NZL","NEW ZEALAND" -"1952051200","1952071679","AU","AUS","AUSTRALIA" -"1952071680","1952073727","HK","HKG","HONG KONG" -"1952073728","1952074751","AU","AUS","AUSTRALIA" -"1952074752","1952075775","NZ","NZL","NEW ZEALAND" -"1952075776","1952079871","CN","CHN","CHINA" -"1952079872","1952088063","PK","PAK","PAKISTAN" -"1952088064","1952092159","NZ","NZL","NEW ZEALAND" -"1952092160","1952096255","JP","JPN","JAPAN" -"1952096256","1952102399","ID","IDN","INDONESIA" -"1952102400","1952104447","CN","CHN","CHINA" -"1952104448","1952108543","JP","JPN","JAPAN" -"1952108544","1952110591","ID","IDN","INDONESIA" -"1952110592","1952112639","KR","KOR","REPUBLIC OF KOREA" -"1952112640","1952116735","NP","NPL","NEPAL" -"1952116736","1952120831","IN","IND","INDIA" -"1952120832","1952186367","JP","JPN","JAPAN" -"1952186368","1952251903","HK","HKG","HONG KONG" -"1952251904","1952268575","PH","PHL","PHILIPPINES" -"1952268576","1952268607","SG","SGP","SINGAPORE" -"1952268608","1952284671","PH","PHL","PHILIPPINES" -"1952284672","1952288767","NZ","NZL","NEW ZEALAND" -"1952288768","1952301055","AU","AUS","AUSTRALIA" -"1952301056","1952317439","KR","KOR","REPUBLIC OF KOREA" -"1952317440","1952382975","JP","JPN","JAPAN" -"1952382976","1952448511","CN","CHN","CHINA" -"1952448512","1953497087","VN","VNM","VIET NAM" -"1953497088","1953890303","CN","CHN","CHINA" -"1953890304","1953923071","VN","VNM","VIET NAM" -"1953923072","1953939455","TW","TWN","TAIWAN" -"1953939456","1953951743","JP","JPN","JAPAN" -"1953951744","1953955839","AU","AUS","AUSTRALIA" -"1953955840","1954021375","IN","IND","INDIA" -"1954021376","1954545663","KR","KOR","REPUBLIC OF KOREA" -"1954545664","1958805503","CN","CHN","CHINA" -"1958805504","1958807551","SG","SGP","SINGAPORE" -"1958807552","1958809599","MO","MAC","MACAO" -"1958809600","1958821887","CN","CHN","CHINA" -"1958821888","1958825983","VN","VNM","VIET NAM" -"1958825984","1958830079","KR","KOR","REPUBLIC OF KOREA" -"1958830080","1958838271","JP","JPN","JAPAN" -"1958838272","1958842367","IN","IND","INDIA" -"1958842368","1958844415","NZ","NZL","NEW ZEALAND" -"1958844416","1958846463","AU","AUS","AUSTRALIA" -"1958846464","1958848511","IN","IND","INDIA" -"1958848512","1958850559","BD","BGD","BANGLADESH" -"1958850560","1958871039","AU","AUS","AUSTRALIA" -"1958871040","1959067647","CN","CHN","CHINA" -"1959067648","1959100415","MY","MYS","MALAYSIA" -"1959100416","1959102463","ID","IDN","INDONESIA" -"1959102464","1959104511","JP","JPN","JAPAN" -"1959104512","1959108607","AU","AUS","AUSTRALIA" -"1959108608","1959110655","NP","NPL","NEPAL" -"1959110656","1959112703","JP","JPN","JAPAN" -"1959112704","1959116799","HK","HKG","HONG KONG" -"1959116800","1959133183","SG","SGP","SINGAPORE" -"1959133184","1959239679","CN","CHN","CHINA" -"1959239680","1959241727","KR","KOR","REPUBLIC OF KOREA" -"1959241728","1959243775","IN","IND","INDIA" -"1959243776","1959247871","JP","JPN","JAPAN" -"1959247872","1959251967","ID","IDN","INDONESIA" -"1959251968","1959256063","NZ","NZL","NEW ZEALAND" -"1959256064","1959264255","AU","AUS","AUSTRALIA" -"1959264256","1959395327","KR","KOR","REPUBLIC OF KOREA" -"1959395328","1959526399","AU","AUS","AUSTRALIA" -"1959526400","1959657471","CN","CHN","CHINA" -"1959657472","1959723007","MY","MYS","MALAYSIA" -"1959723008","1960050687","CN","CHN","CHINA" -"1960050688","1960058879","KR","KOR","REPUBLIC OF KOREA" -"1960058880","1960069119","AU","AUS","AUSTRALIA" -"1960069120","1960071167","ID","IDN","INDONESIA" -"1960071168","1960075263","TW","TWN","TAIWAN" -"1960075264","1960077311","ID","IDN","INDONESIA" -"1960077312","1960079359","BD","BGD","BANGLADESH" -"1960079360","1960080127","HK","HKG","HONG KONG" -"1960080128","1960080383","CN","CHN","CHINA" -"1960080384","1960083455","HK","HKG","HONG KONG" -"1960083456","1960091647","KH","KHM","CAMBODIA" -"1960091648","1960095743","CN","CHN","CHINA" -"1960095744","1960097791","IN","IND","INDIA" -"1960097792","1960099839","BD","BGD","BANGLADESH" -"1960099840","1960128511","AU","AUS","AUSTRALIA" -"1960128512","1960132607","ID","IDN","INDONESIA" -"1960132608","1960181759","CN","CHN","CHINA" -"1960181760","1960185855","TW","TWN","TAIWAN" -"1960185856","1960187903","JP","JPN","JAPAN" -"1960187904","1960189951","IN","IND","INDIA" -"1960189952","1960202239","CN","CHN","CHINA" -"1960202240","1960206335","JP","JPN","JAPAN" -"1960206336","1960208383","SG","SGP","SINGAPORE" -"1960208384","1960209407","PH","PHL","PHILIPPINES" -"1960209408","1960210431","SG","SGP","SINGAPORE" -"1960210432","1960210943","TH","THA","THAILAND" -"1960210944","1960211455","IN","IND","INDIA" -"1960211456","1960212479","SG","SGP","SINGAPORE" -"1960212480","1960212991","IN","IND","INDIA" -"1960212992","1960213247","SG","SGP","SINGAPORE" -"1960213248","1960213503","PH","PHL","PHILIPPINES" -"1960213504","1960214015","SG","SGP","SINGAPORE" -"1960214016","1960214271","IN","IND","INDIA" -"1960214272","1960214527","SG","SGP","SINGAPORE" -"1960214528","1960574975","CN","CHN","CHINA" -"1960574976","1960837119","JP","JPN","JAPAN" -"1960837120","1961885695","CN","CHN","CHINA" -"1961885696","1962016767","AU","AUS","AUSTRALIA" -"1962016768","1962541055","CN","CHN","CHINA" -"1962541056","1962672127","AU","AUS","AUSTRALIA" -"1962672128","1962803199","CN","CHN","CHINA" -"1962803200","1962827775","JP","JPN","JAPAN" -"1962827776","1962829823","ID","IDN","INDONESIA" -"1962829824","1962831871","JP","JPN","JAPAN" -"1962831872","1962835967","ID","IDN","INDONESIA" -"1962835968","1962868735","CN","CHN","CHINA" -"1962868736","1962901503","AU","AUS","AUSTRALIA" -"1962901504","1962934271","CN","CHN","CHINA" -"1962934272","1963458559","VN","VNM","VIET NAM" -"1963458560","1963982847","CN","CHN","CHINA" -"1963982848","1964113919","KR","KOR","REPUBLIC OF KOREA" -"1964113920","1964118015","HK","HKG","HONG KONG" -"1964118016","1964120063","ID","IDN","INDONESIA" -"1964120064","1964122111","JP","JPN","JAPAN" -"1964122112","1964126207","SG","SGP","SINGAPORE" -"1964126208","1964126463","HK","HKG","HONG KONG" -"1964126464","1964130303","SG","SGP","SINGAPORE" -"1964130304","1964134399","HK","HKG","HONG KONG" -"1964134400","1964136447","NZ","NZL","NEW ZEALAND" -"1964136448","1964138495","AU","AUS","AUSTRALIA" -"1964138496","1964146687","HK","HKG","HONG KONG" -"1964146688","1964171263","JP","JPN","JAPAN" -"1964171264","1964173311","BD","BGD","BANGLADESH" -"1964173312","1964175359","AU","AUS","AUSTRALIA" -"1964175360","1964179455","PK","PAK","PAKISTAN" -"1964179456","1964244991","TW","TWN","TAIWAN" -"1964244992","1964249087","AU","AUS","AUSTRALIA" -"1964249088","1964253183","PK","PAK","PAKISTAN" -"1964253184","1964255231","WF","WLF","WALLIS AND FUTUNA" -"1964255232","1964257279","SG","SGP","SINGAPORE" -"1964257280","1964261375","ID","IDN","INDONESIA" -"1964261376","1964263423","AU","AUS","AUSTRALIA" -"1964263424","1964265471","JP","JPN","JAPAN" -"1964265472","1964269567","KR","KOR","REPUBLIC OF KOREA" -"1964269568","1964273663","AU","AUS","AUSTRALIA" -"1964273664","1964275711","KH","KHM","CAMBODIA" -"1964275712","1964277759","GU","GUM","GUAM" -"1964277760","1964294143","SG","SGP","SINGAPORE" -"1964294144","1964310527","KR","KOR","REPUBLIC OF KOREA" -"1964310528","1965948927","CN","CHN","CHINA" -"1965948928","1966014463","JP","JPN","JAPAN" -"1966014464","1966079999","TH","THA","THAILAND" -"1966080000","1966342143","CN","CHN","CHINA" -"1966342144","1966407679","AU","AUS","AUSTRALIA" -"1966407680","1966417919","JP","JPN","JAPAN" -"1966417920","1966419967","AU","AUS","AUSTRALIA" -"1966419968","1966424063","CN","CHN","CHINA" -"1966424064","1966440447","KR","KOR","REPUBLIC OF KOREA" -"1966440448","1966444543","AU","AUS","AUSTRALIA" -"1966444544","1966446591","NZ","NZL","NEW ZEALAND" -"1966446592","1966452735","AU","AUS","AUSTRALIA" -"1966452736","1966456831","CN","CHN","CHINA" -"1966456832","1966473215","KR","KOR","REPUBLIC OF KOREA" -"1966473216","1966538751","ID","IDN","INDONESIA" -"1966538752","1966571519","JP","JPN","JAPAN" -"1966571520","1966587903","KR","KOR","REPUBLIC OF KOREA" -"1966587904","1966591999","AF","AFG","AFGHANISTAN" -"1966592000","1966596095","JP","JPN","JAPAN" -"1966596096","1966600191","TW","TWN","TAIWAN" -"1966600192","1966602239","IN","IND","INDIA" -"1966602240","1966604287","KH","KHM","CAMBODIA" -"1966604288","1966669823","TW","TWN","TAIWAN" -"1966669824","1966768127","CN","CHN","CHINA" -"1966768128","1966772223","KR","KOR","REPUBLIC OF KOREA" -"1966772224","1966776319","JP","JPN","JAPAN" -"1966776320","1966784511","SG","SGP","SINGAPORE" -"1966784512","1966792703","PH","PHL","PHILIPPINES" -"1966792704","1966796799","JP","JPN","JAPAN" -"1966796800","1966798847","BD","BGD","BANGLADESH" -"1966798848","1966800895","AU","AUS","AUSTRALIA" -"1966800896","1967783935","CN","CHN","CHINA" -"1967783936","1967800319","JP","JPN","JAPAN" -"1967800320","1967804415","CN","CHN","CHINA" -"1967804416","1967812607","AU","AUS","AUSTRALIA" -"1967812608","1967816703","ID","IDN","INDONESIA" -"1967816704","1969225727","CN","CHN","CHINA" -"1969225728","1969487871","IN","IND","INDIA" -"1969487872","1969618943","CN","CHN","CHINA" -"1969618944","1969635327","PK","PAK","PAKISTAN" -"1969635328","1969651711","ID","IDN","INDONESIA" -"1969651712","1969659903","AU","AUS","AUSTRALIA" -"1969659904","1969661951","ID","IDN","INDONESIA" -"1969661952","1969676287","JP","JPN","JAPAN" -"1969676288","1969688575","ID","IDN","INDONESIA" -"1969688576","1969692671","CN","CHN","CHINA" -"1969692672","1969694719","ID","IDN","INDONESIA" -"1969694720","1969696767","AU","AUS","AUSTRALIA" -"1969696768","1969702911","ID","IDN","INDONESIA" -"1969702912","1969704959","AU","AUS","AUSTRALIA" -"1969704960","1969707007","BD","BGD","BANGLADESH" -"1969707008","1969709055","MH","MHL","MARSHALL ISLANDS" -"1969709056","1969713151","TW","TWN","TAIWAN" -"1969713152","1969717247","AU","AUS","AUSTRALIA" -"1969717248","1969721343","CN","CHN","CHINA" -"1969721344","1969725439","HK","HKG","HONG KONG" -"1969725440","1969727487","JP","JPN","JAPAN" -"1969727488","1969729535","ID","IDN","INDONESIA" -"1969729536","1969733631","JP","JPN","JAPAN" -"1969733632","1969750015","VN","VNM","VIET NAM" -"1969750016","1969790975","JP","JPN","JAPAN" -"1969790976","1969795071","AU","AUS","AUSTRALIA" -"1969795072","1969797119","NZ","NZL","NEW ZEALAND" -"1969797120","1969798143","SG","SGP","SINGAPORE" -"1969798144","1969799167","HK","HKG","HONG KONG" -"1969799168","1969807359","ID","IDN","INDONESIA" -"1969807360","1969809407","AF","AFG","AFGHANISTAN" -"1969809408","1969811455","IN","IND","INDIA" -"1969811456","1969815551","PH","PHL","PHILIPPINES" -"1969815552","1969881087","SG","SGP","SINGAPORE" -"1969881088","1970012159","CN","CHN","CHINA" -"1970012160","1970143231","JP","JPN","JAPAN" -"1970143232","1970274303","KR","KOR","REPUBLIC OF KOREA" -"1970274304","1970798591","CN","CHN","CHINA" -"1970798592","1970800639","SG","SGP","SINGAPORE" -"1970800640","1970803711","AU","AUS","AUSTRALIA" -"1970803712","1970804223","HK","HKG","HONG KONG" -"1970804224","1970804735","AU","AUS","AUSTRALIA" -"1970804736","1970806783","KH","KHM","CAMBODIA" -"1970806784","1970808831","NZ","NZL","NEW ZEALAND" -"1970808832","1970810879","AU","AUS","AUSTRALIA" -"1970810880","1970812927","JP","JPN","JAPAN" -"1970812928","1970814975","AU","AUS","AUSTRALIA" -"1970814976","1970915327","CN","CHN","CHINA" -"1970915328","1970917375","ID","IDN","INDONESIA" -"1970917376","1970921471","TH","THA","THAILAND" -"1970921472","1970925567","NP","NPL","NEPAL" -"1970925568","1970925823","MY","MYS","MALAYSIA" -"1970925824","1970926335","SG","SGP","SINGAPORE" -"1970926336","1970926591","US","USA","UNITED STATES" -"1970926592","1970926847","SG","SGP","SINGAPORE" -"1970926848","1970927103","IL","ISR","ISRAEL" -"1970927104","1970927359","SG","SGP","SINGAPORE" -"1970927360","1970927615","US","USA","UNITED STATES" -"1970927616","1970929663","AU","AUS","AUSTRALIA" -"1970929664","1970962431","VN","VNM","VIET NAM" -"1970962432","1970995199","CN","CHN","CHINA" -"1970995200","1971060735","KR","KOR","REPUBLIC OF KOREA" -"1971060736","1975517183","CN","CHN","CHINA" -"1975517184","1979711487","IN","IND","INDIA" -"1979711488","1981284351","JP","JPN","JAPAN" -"1981284352","1981808639","CN","CHN","CHINA" -"1981808640","1983905791","KR","KOR","REPUBLIC OF KOREA" -"1983905792","1984102399","CN","CHN","CHINA" -"1984102400","1984118783","AU","AUS","AUSTRALIA" -"1984118784","1984131071","JP","JPN","JAPAN" -"1984131072","1984135167","CN","CHN","CHINA" -"1984135168","1984151551","KR","KOR","REPUBLIC OF KOREA" -"1984151552","1984153599","AU","AUS","AUSTRALIA" -"1984153600","1984155647","KH","KHM","CAMBODIA" -"1984155648","1984159743","AU","AUS","AUSTRALIA" -"1984159744","1984167935","IN","IND","INDIA" -"1984167936","1984430079","VN","VNM","VIET NAM" -"1984430080","1985085439","CN","CHN","CHINA" -"1985085440","1985093631","ID","IDN","INDONESIA" -"1985093632","1985101823","AU","AUS","AUSTRALIA" -"1985101824","1985118207","JP","JPN","JAPAN" -"1985118208","1985150975","NZ","NZL","NEW ZEALAND" -"1985150976","1985216511","JP","JPN","JAPAN" -"1985216512","1985347583","CN","CHN","CHINA" -"1985347584","1985478655","JP","JPN","JAPAN" -"1985478656","1985480703","IN","IND","INDIA" -"1985480704","1985482751","PH","PHL","PHILIPPINES" -"1985482752","1985486847","AU","AUS","AUSTRALIA" -"1985486848","1985609727","CN","CHN","CHINA" -"1985609728","1985675263","NZ","NZL","NEW ZEALAND" -"1985675264","1985708031","KR","KOR","REPUBLIC OF KOREA" -"1985708032","1985712127","ID","IDN","INDONESIA" -"1985712128","1985716223","KR","KOR","REPUBLIC OF KOREA" -"1985716224","1985720319","NP","NPL","NEPAL" -"1985720320","1985724415","IN","IND","INDIA" -"1985724416","1985732607","JP","JPN","JAPAN" -"1985732608","1985734655","ID","IDN","INDONESIA" -"1985734656","1985736703","IN","IND","INDIA" -"1985736704","1985740799","CN","CHN","CHINA" -"1985740800","1985871871","NZ","NZL","NEW ZEALAND" -"1985871872","1986002943","IN","IND","INDIA" -"1986002944","1986199551","ID","IDN","INDONESIA" -"1986199552","1986202623","HK","HKG","HONG KONG" -"1986202624","1986202879","TW","TWN","TAIWAN" -"1986202880","1986215935","HK","HKG","HONG KONG" -"1986215936","1986232319","ID","IDN","INDONESIA" -"1986232320","1986265087","TW","TWN","TAIWAN" -"1986265088","1986396159","MY","MYS","MALAYSIA" -"1986396160","1986398207","VN","VNM","VIET NAM" -"1986398208","1986400255","HK","HKG","HONG KONG" -"1986400256","1986404351","CN","CHN","CHINA" -"1986404352","1986406399","AU","AUS","AUSTRALIA" -"1986406400","1986412543","JP","JPN","JAPAN" -"1986412544","1986428927","AU","AUS","AUSTRALIA" -"1986428928","1986461695","IN","IND","INDIA" -"1986461696","1986496511","JP","JPN","JAPAN" -"1986496512","1986498559","BT","BTN","BHUTAN" -"1986498560","1986502655","HK","HKG","HONG KONG" -"1986502656","1986510847","KH","KHM","CAMBODIA" -"1986510848","1986519039","KR","KOR","REPUBLIC OF KOREA" -"1986519040","1986523135","PK","PAK","PAKISTAN" -"1986523136","1986525183","CN","CHN","CHINA" -"1986525184","1986527231","BN","BRN","BRUNEI DARUSSALAM" -"1986527232","1986723839","JP","JPN","JAPAN" -"1986723840","1986756607","AU","AUS","AUSTRALIA" -"1986756608","1986760703","PK","PAK","PAKISTAN" -"1986760704","1986764799","AU","AUS","AUSTRALIA" -"1986764800","1986768895","KR","KOR","REPUBLIC OF KOREA" -"1986768896","1986772991","AU","AUS","AUSTRALIA" -"1986772992","1986789375","MY","MYS","MALAYSIA" -"1986789376","1987051519","JP","JPN","JAPAN" -"1987051520","1988034559","CN","CHN","CHINA" -"1988034560","1988083711","AU","AUS","AUSTRALIA" -"1988083712","1988362239","KR","KOR","REPUBLIC OF KOREA" -"1988362240","1988624383","CN","CHN","CHINA" -"1988624384","1988755455","ID","IDN","INDONESIA" -"1988755456","1988886527","AU","AUS","AUSTRALIA" -"1988886528","1989148671","HK","HKG","HONG KONG" -"1989148672","1989410815","CN","CHN","CHINA" -"1989410816","1989541887","NZ","NZL","NEW ZEALAND" -"1989541888","1989607423","TW","TWN","TAIWAN" -"1989607424","1989660671","JP","JPN","JAPAN" -"1989660672","1989661695","IN","IND","INDIA" -"1989661696","1989662719","ID","IDN","INDONESIA" -"1989662720","1989663743","AU","AUS","AUSTRALIA" -"1989663744","1989664767","ID","IDN","INDONESIA" -"1989664768","1990197247","JP","JPN","JAPAN" -"1990197248","1990983679","TW","TWN","TAIWAN" -"1990983680","1991245823","TH","THA","THAILAND" -"1991245824","1991311359","KR","KOR","REPUBLIC OF KOREA" -"1991311360","1991376895","JP","JPN","JAPAN" -"1991376896","1991442431","CN","CHN","CHINA" -"1991442432","1991499775","BD","BGD","BANGLADESH" -"1991499776","1991507967","AU","AUS","AUSTRALIA" -"1991507968","1993342975","CN","CHN","CHINA" -"1993342976","1993605119","AU","AUS","AUSTRALIA" -"1993605120","1993736191","CN","CHN","CHINA" -"1993736192","1993867263","SG","SGP","SINGAPORE" -"1993867264","1994391551","KR","KOR","REPUBLIC OF KOREA" -"1994391552","1994850303","CN","CHN","CHINA" -"1994850304","1995046911","TW","TWN","TAIWAN" -"1995046912","1995177983","KR","KOR","REPUBLIC OF KOREA" -"1995177984","1995374591","JP","JPN","JAPAN" -"1995374592","1995440127","CN","CHN","CHINA" -"1995440128","1995571199","JP","JPN","JAPAN" -"1995571200","1995636735","CN","CHN","CHINA" -"1995636736","1995702271","JP","JPN","JAPAN" -"1995702272","1996627967","CN","CHN","CHINA" -"1996627968","1996630015","PH","PHL","PHILIPPINES" -"1996630016","1996634111","ID","IDN","INDONESIA" -"1996634112","1996636159","NP","NPL","NEPAL" -"1996636160","1996644351","ID","IDN","INDONESIA" -"1996644352","1996652543","BT","BTN","BHUTAN" -"1996652544","1997176831","CN","CHN","CHINA" -"1997176832","1997185023","AU","AUS","AUSTRALIA" -"1997185024","1997187071","JP","JPN","JAPAN" -"1997187072","1997189119","HK","HKG","HONG KONG" -"1997189120","1997191167","ID","IDN","INDONESIA" -"1997191168","1997209599","JP","JPN","JAPAN" -"1997209600","1997242367","AU","AUS","AUSTRALIA" -"1997242368","1997275135","ID","IDN","INDONESIA" -"1997275136","1997406207","AU","AUS","AUSTRALIA" -"1997406208","1997471743","TW","TWN","TAIWAN" -"1997471744","1997479935","NZ","NZL","NEW ZEALAND" -"1997479936","1997492223","AU","AUS","AUSTRALIA" -"1997492224","1997496319","KH","KHM","CAMBODIA" -"1997496320","1997504511","AU","AUS","AUSTRALIA" -"1997504512","1997506559","ID","IDN","INDONESIA" -"1997506560","1997508607","CN","CHN","CHINA" -"1997508608","1997510655","JP","JPN","JAPAN" -"1997510656","1997512703","BD","BGD","BANGLADESH" -"1997512704","1997520895","VN","VNM","VIET NAM" -"1997520896","1997537279","TW","TWN","TAIWAN" -"1997537280","1997602815","CN","CHN","CHINA" -"1997602816","1997611007","KR","KOR","REPUBLIC OF KOREA" -"1997611008","1997619199","AU","AUS","AUSTRALIA" -"1997619200","1997635583","KR","KOR","REPUBLIC OF KOREA" -"1997635584","1997651967","AU","AUS","AUSTRALIA" -"1997651968","1997668351","VN","VNM","VIET NAM" -"1997668352","1997701119","AU","AUS","AUSTRALIA" -"1997701120","1997705215","VN","VNM","VIET NAM" -"1997705216","1997707263","BD","BGD","BANGLADESH" -"1997707264","1997709311","ID","IDN","INDONESIA" -"1997709312","1997715455","JP","JPN","JAPAN" -"1997715456","1997717503","VN","VNM","VIET NAM" -"1997717504","1997723647","CN","CHN","CHINA" -"1997723648","1997724495","JP","JPN","JAPAN" -"1997724496","1997724543","NL","NLD","NETHERLANDS" -"1997724544","1997725695","JP","JPN","JAPAN" -"1997725696","1998061567","CN","CHN","CHINA" -"1998061568","1998258175","JP","JPN","JAPAN" -"1998258176","1998274559","SG","SGP","SINGAPORE" -"1998274560","1998290943","CN","CHN","CHINA" -"1998290944","1998299135","AU","AUS","AUSTRALIA" -"1998299136","1998454783","CN","CHN","CHINA" -"1998454784","1998458879","AU","AUS","AUSTRALIA" -"1998458880","1998462975","TW","TWN","TAIWAN" -"1998462976","1998467071","BD","BGD","BANGLADESH" -"1998467072","1998471167","CN","CHN","CHINA" -"1998471168","1998487551","PK","PAK","PAKISTAN" -"1998487552","1998503935","KR","KOR","REPUBLIC OF KOREA" -"1998503936","1998520319","JP","JPN","JAPAN" -"1998520320","1998553087","TH","THA","THAILAND" -"1998553088","1998561279","JP","JPN","JAPAN" -"1998561280","1998561535","IN","IND","INDIA" -"1998561536","1998561791","SG","SGP","SINGAPORE" -"1998561792","1998562047","IN","IND","INDIA" -"1998562048","1998562303","TH","THA","THAILAND" -"1998562304","1998562559","IN","IND","INDIA" -"1998562560","1998562815","CN","CHN","CHINA" -"1998562816","1998563071","JP","JPN","JAPAN" -"1998563072","1998563327","SG","SGP","SINGAPORE" -"1998563328","1998565375","IN","IND","INDIA" -"1998565376","1998569471","TW","TWN","TAIWAN" -"1998569472","1998577663","CN","CHN","CHINA" -"1998577664","1998581759","AU","AUS","AUSTRALIA" -"1998581760","1998585855","KR","KOR","REPUBLIC OF KOREA" -"1998585856","1999130623","CN","CHN","CHINA" -"1999130624","1999134719","BD","BGD","BANGLADESH" -"1999134720","1999136767","MN","MNG","MONGOLIA" -"1999136768","1999138815","AU","AUS","AUSTRALIA" -"1999138816","1999142911","MY","MYS","MALAYSIA" -"1999142912","1999249407","CN","CHN","CHINA" -"1999249408","1999257599","AU","AUS","AUSTRALIA" -"1999257600","1999273983","TH","THA","THAILAND" -"1999273984","1999276031","AU","AUS","AUSTRALIA" -"1999276032","1999278079","CN","CHN","CHINA" -"1999278080","1999280127","HK","HKG","HONG KONG" -"1999280128","1999282175","IN","IND","INDIA" -"1999282176","1999290367","KR","KOR","REPUBLIC OF KOREA" -"1999290368","1999298559","SG","SGP","SINGAPORE" -"1999298560","1999306751","CN","CHN","CHINA" -"1999306752","1999372287","IN","IND","INDIA" -"1999372288","1999503359","CN","CHN","CHINA" -"1999503360","1999568895","TH","THA","THAILAND" -"1999568896","1999589375","JP","JPN","JAPAN" -"1999589376","1999591423","HK","HKG","HONG KONG" -"1999591424","1999593471","ID","IDN","INDONESIA" -"1999593472","1999597567","JP","JPN","JAPAN" -"1999597568","1999601663","NZ","NZL","NEW ZEALAND" -"1999601664","1999634431","JP","JPN","JAPAN" -"1999634432","2000158719","CN","CHN","CHINA" -"2000158720","2000191487","SG","SGP","SINGAPORE" -"2000191488","2000224255","AU","AUS","AUSTRALIA" -"2000224256","2000355327","CN","CHN","CHINA" -"2000355328","2000371711","KR","KOR","REPUBLIC OF KOREA" -"2000371712","2000373759","JP","JPN","JAPAN" -"2000373760","2000374399","HK","HKG","HONG KONG" -"2000374400","2000374527","US","USA","UNITED STATES" -"2000374528","2000375807","HK","HKG","HONG KONG" -"2000375808","2000377855","AF","AFG","AFGHANISTAN" -"2000377856","2000379903","JP","JPN","JAPAN" -"2000379904","2000388095","AU","AUS","AUSTRALIA" -"2000388096","2000617471","CN","CHN","CHINA" -"2000617472","2000621567","PH","PHL","PHILIPPINES" -"2000621568","2000625663","JP","JPN","JAPAN" -"2000625664","2000633855","CN","CHN","CHINA" -"2000633856","2000642047","TH","THA","THAILAND" -"2000642048","2000646143","HK","HKG","HONG KONG" -"2000646144","2000650239","JP","JPN","JAPAN" -"2000650240","2000654335","PK","PAK","PAKISTAN" -"2000654336","2000658431","AU","AUS","AUSTRALIA" -"2000658432","2000668671","JP","JPN","JAPAN" -"2000668672","2000674815","AU","AUS","AUSTRALIA" -"2000674816","2001207295","KR","KOR","REPUBLIC OF KOREA" -"2001207296","2001272831","JP","JPN","JAPAN" -"2001272832","2001305599","PK","PAK","PAKISTAN" -"2001305600","2001420287","SG","SGP","SINGAPORE" -"2001420288","2001453055","KR","KOR","REPUBLIC OF KOREA" -"2001453056","2001457151","SG","SGP","SINGAPORE" -"2001457152","2001461247","CN","CHN","CHINA" -"2001461248","2001465343","JP","JPN","JAPAN" -"2001465344","2001469439","TW","TWN","TAIWAN" -"2001469440","2001534975","TH","THA","THAILAND" -"2001534976","2001559551","AU","AUS","AUSTRALIA" -"2001559552","2001567743","KR","KOR","REPUBLIC OF KOREA" -"2001567744","2001600511","TW","TWN","TAIWAN" -"2001600512","2001862655","CN","CHN","CHINA" -"2001862656","2001866751","AU","AUS","AUSTRALIA" -"2001866752","2001870847","JP","JPN","JAPAN" -"2001870848","2001879039","KR","KOR","REPUBLIC OF KOREA" -"2001879040","2001895423","IN","IND","INDIA" -"2001895424","2001899519","VN","VNM","VIET NAM" -"2001899520","2001903615","AU","AUS","AUSTRALIA" -"2001903616","2001915903","JP","JPN","JAPAN" -"2001915904","2001919999","AU","AUS","AUSTRALIA" -"2001920000","2001926143","ID","IDN","INDONESIA" -"2001926144","2001928191","KH","KHM","CAMBODIA" -"2001928192","2001993727","JP","JPN","JAPAN" -"2001993728","2002518015","CN","CHN","CHINA" -"2002518016","2002780159","PH","PHL","PHILIPPINES" -"2002780160","2003304447","CN","CHN","CHINA" -"2003304448","2003566591","JP","JPN","JAPAN" -"2003566592","2003697663","CN","CHN","CHINA" -"2003697664","2003714047","MY","MYS","MALAYSIA" -"2003714048","2003720191","ID","IDN","INDONESIA" -"2003720192","2003722239","JP","JPN","JAPAN" -"2003722240","2003726335","MY","MYS","MALAYSIA" -"2003726336","2003730431","ID","IDN","INDONESIA" -"2003730432","2003763199","MY","MYS","MALAYSIA" -"2003763200","2003828735","PH","PHL","PHILIPPINES" -"2003828736","2006188031","CN","CHN","CHINA" -"2006188032","2006204415","BD","BGD","BANGLADESH" -"2006204416","2006212607","AU","AUS","AUSTRALIA" -"2006212608","2006214655","TH","THA","THAILAND" -"2006214656","2006216703","JP","JPN","JAPAN" -"2006216704","2006228991","KR","KOR","REPUBLIC OF KOREA" -"2006228992","2006233087","CN","CHN","CHINA" -"2006233088","2006237183","AU","AUS","AUSTRALIA" -"2006237184","2006253567","JP","JPN","JAPAN" -"2006253568","2006319103","KR","KOR","REPUBLIC OF KOREA" -"2006319104","2006384639","JP","JPN","JAPAN" -"2006384640","2006450175","IN","IND","INDIA" -"2006450176","2007007231","PK","PAK","PAKISTAN" -"2007007232","2007023615","BN","BRN","BRUNEI DARUSSALAM" -"2007023616","2007025663","IN","IND","INDIA" -"2007025664","2007027711","ID","IDN","INDONESIA" -"2007027712","2007031807","TH","THA","THAILAND" -"2007031808","2007035903","AU","AUS","AUSTRALIA" -"2007035904","2007039999","TW","TWN","TAIWAN" -"2007040000","2007048191","KR","KOR","REPUBLIC OF KOREA" -"2007048192","2007064575","AU","AUS","AUSTRALIA" -"2007064576","2007066623","MY","MYS","MALAYSIA" -"2007066624","2007070719","JP","JPN","JAPAN" -"2007070720","2007072767","US","USA","UNITED STATES" -"2007072768","2007498751","CN","CHN","CHINA" -"2007498752","2008023039","JP","JPN","JAPAN" -"2008023040","2009071615","CN","CHN","CHINA" -"2009071616","2011168767","KR","KOR","REPUBLIC OF KOREA" -"2011168768","2011205631","NZ","NZL","NEW ZEALAND" -"2011205632","2011299839","AU","AUS","AUSTRALIA" -"2011299840","2011430911","IN","IND","INDIA" -"2011430912","2011693055","JP","JPN","JAPAN" -"2011693056","2011824127","CN","CHN","CHINA" -"2011824128","2011889663","SG","SGP","SINGAPORE" -"2011889664","2011893759","LK","LKA","SRI LANKA" -"2011893760","2011897855","ID","IDN","INDONESIA" -"2011897856","2011899903","NZ","NZL","NEW ZEALAND" -"2011899904","2011901951","HK","HKG","HONG KONG" -"2011901952","2011906047","IN","IND","INDIA" -"2011906048","2011916287","FJ","FJI","FIJI" -"2011916288","2011922431","AU","AUS","AUSTRALIA" -"2011922432","2011938815","CN","CHN","CHINA" -"2011938816","2011942911","KR","KOR","REPUBLIC OF KOREA" -"2011942912","2011947007","ID","IDN","INDONESIA" -"2011947008","2011951103","JP","JPN","JAPAN" -"2011951104","2011953151","KR","KOR","REPUBLIC OF KOREA" -"2011953152","2011955199","ID","IDN","INDONESIA" -"2011955200","2012086271","HK","HKG","HONG KONG" -"2012086272","2012610559","JP","JPN","JAPAN" -"2012610560","2012741631","HK","HKG","HONG KONG" -"2012741632","2013003775","CN","CHN","CHINA" -"2013003776","2013028351","AU","AUS","AUSTRALIA" -"2013028352","2013030399","TH","THA","THAILAND" -"2013030400","2013032447","ID","IDN","INDONESIA" -"2013032448","2013036543","FM","FSM","FEDERATED STATES OF MICRONESIA" -"2013036544","2013038591","ID","IDN","INDONESIA" -"2013038592","2013040639","HK","HKG","HONG KONG" -"2013040640","2013044735","IN","IND","INDIA" -"2013044736","2013048831","ID","IDN","INDONESIA" -"2013048832","2013052927","AU","AUS","AUSTRALIA" -"2013052928","2013061119","IN","IND","INDIA" -"2013061120","2013065215","PG","PNG","PAPUA NEW GUINEA" -"2013065216","2013069311","AU","AUS","AUSTRALIA" -"2013069312","2014314495","CN","CHN","CHINA" -"2014314496","2014838783","AU","AUS","AUSTRALIA" -"2014838784","2015100927","CN","CHN","CHINA" -"2015100928","2015166463","PH","PHL","PHILIPPINES" -"2015166464","2015199231","AU","AUS","AUSTRALIA" -"2015199232","2015203327","KR","KOR","REPUBLIC OF KOREA" -"2015203328","2015205375","JP","JPN","JAPAN" -"2015205376","2015207423","ID","IDN","INDONESIA" -"2015207424","2015215615","JP","JPN","JAPAN" -"2015215616","2015216279","HK","HKG","HONG KONG" -"2015216280","2015216319","SG","SGP","SINGAPORE" -"2015216320","2015216383","HK","HKG","HONG KONG" -"2015216384","2015217151","SG","SGP","SINGAPORE" -"2015217152","2015217663","JP","JPN","JAPAN" -"2015217664","2015219456","GU","GUM","GUAM" -"2015219457","2015219775","CA","CAN","CANADA" -"2015219776","2015219815","SG","SGP","SINGAPORE" -"2015219816","2015219823","PH","PHL","PHILIPPINES" -"2015219824","2015219839","HK","HKG","HONG KONG" -"2015219840","2015219903","SG","SGP","SINGAPORE" -"2015219904","2015219935","HK","HKG","HONG KONG" -"2015219936","2015219967","SG","SGP","SINGAPORE" -"2015219968","2015220223","PH","PHL","PHILIPPINES" -"2015220224","2015220351","HK","HKG","HONG KONG" -"2015220352","2015220479","ID","IDN","INDONESIA" -"2015220480","2015220735","HK","HKG","HONG KONG" -"2015220736","2015221247","IN","IND","INDIA" -"2015221248","2015221759","SG","SGP","SINGAPORE" -"2015221760","2015222015","HK","HKG","HONG KONG" -"2015222016","2015222271","JP","JPN","JAPAN" -"2015222272","2015222527","IN","IND","INDIA" -"2015222528","2015222783","CA","CAN","CANADA" -"2015222784","2015223039","IN","IND","INDIA" -"2015223040","2015223295","CA","CAN","CANADA" -"2015223296","2015223551","TH","THA","THAILAND" -"2015223552","2015223679","IN","IND","INDIA" -"2015223680","2015223687","HK","HKG","HONG KONG" -"2015223688","2015223695","SG","SGP","SINGAPORE" -"2015223696","2015223711","ID","IDN","INDONESIA" -"2015223712","2015223735","PH","PHL","PHILIPPINES" -"2015223736","2015223743","MY","MYS","MALAYSIA" -"2015223744","2015223751","PG","PNG","PAPUA NEW GUINEA" -"2015223752","2015223759","CA","CAN","CANADA" -"2015223760","2015223767","JP","JPN","JAPAN" -"2015223768","2015223775","SG","SGP","SINGAPORE" -"2015223776","2015223807","CA","CAN","CANADA" -"2015223808","2015225855","ID","IDN","INDONESIA" -"2015225856","2015227903","IN","IND","INDIA" -"2015227904","2015231999","AU","AUS","AUSTRALIA" -"2015232000","2016542719","CN","CHN","CHINA" -"2016542720","2016550911","BD","BGD","BANGLADESH" -"2016550912","2016555007","SG","SGP","SINGAPORE" -"2016555008","2016559103","MY","MYS","MALAYSIA" -"2016559104","2016583679","KR","KOR","REPUBLIC OF KOREA" -"2016583680","2016585727","JP","JPN","JAPAN" -"2016585728","2016587775","AU","AUS","AUSTRALIA" -"2016587776","2016589823","BD","BGD","BANGLADESH" -"2016589824","2016591871","VN","VNM","VIET NAM" -"2016591872","2016595967","JP","JPN","JAPAN" -"2016595968","2016600063","AU","AUS","AUSTRALIA" -"2016600064","2016673791","JP","JPN","JAPAN" -"2016673792","2016935935","CN","CHN","CHINA" -"2016935936","2017460223","IN","IND","INDIA" -"2017460224","2017984511","CN","CHN","CHINA" -"2017984512","2017988607","JP","JPN","JAPAN" -"2017988608","2017992703","PH","PHL","PHILIPPINES" -"2017992704","2018000895","CN","CHN","CHINA" -"2018000896","2018004991","JP","JPN","JAPAN" -"2018004992","2018007039","VN","VNM","VIET NAM" -"2018007040","2018009087","IN","IND","INDIA" -"2018009088","2018017279","VN","VNM","VIET NAM" -"2018017280","2018050047","CN","CHN","CHINA" -"2018050048","2018115583","KR","KOR","REPUBLIC OF KOREA" -"2018115584","2018246655","JP","JPN","JAPAN" -"2018246656","2019033087","CN","CHN","CHINA" -"2019033088","2019035135","AU","AUS","AUSTRALIA" -"2019035136","2019037183","CN","CHN","CHINA" -"2019037184","2019041279","JP","JPN","JAPAN" -"2019041280","2019045375","IN","IND","INDIA" -"2019045376","2019098623","AU","AUS","AUSTRALIA" -"2019098624","2019115007","PH","PHL","PHILIPPINES" -"2019115008","2019117055","US","USA","UNITED STATES" -"2019117056","2019119103","IN","IND","INDIA" -"2019119104","2019121151","NZ","NZL","NEW ZEALAND" -"2019121152","2019123199","AU","AUS","AUSTRALIA" -"2019123200","2019131391","NP","NPL","NEPAL" -"2019131392","2019164159","JP","JPN","JAPAN" -"2019164160","2019360767","CN","CHN","CHINA" -"2019360768","2019426303","JP","JPN","JAPAN" -"2019426304","2019557375","CN","CHN","CHINA" -"2019557376","2021654527","TW","TWN","TAIWAN" -"2021654528","2022178815","CN","CHN","CHINA" -"2022178816","2022180863","NZ","NZL","NEW ZEALAND" -"2022180864","2022182911","AU","AUS","AUSTRALIA" -"2022182912","2022184959","ID","IDN","INDONESIA" -"2022184960","2022187007","KH","KHM","CAMBODIA" -"2022187008","2022187071","US","USA","UNITED STATES" -"2022187072","2022187663","HK","HKG","HONG KONG" -"2022187664","2022187679","US","USA","UNITED STATES" -"2022187680","2022187719","HK","HKG","HONG KONG" -"2022187720","2022187775","US","USA","UNITED STATES" -"2022187776","2022187783","HK","HKG","HONG KONG" -"2022187784","2022187791","US","USA","UNITED STATES" -"2022187792","2022187807","HK","HKG","HONG KONG" -"2022187808","2022187831","US","USA","UNITED STATES" -"2022187832","2022187839","HK","HKG","HONG KONG" -"2022187840","2022187959","US","USA","UNITED STATES" -"2022187960","2022187991","HK","HKG","HONG KONG" -"2022187992","2022188015","US","USA","UNITED STATES" -"2022188016","2022188031","HK","HKG","HONG KONG" -"2022188032","2022188063","US","USA","UNITED STATES" -"2022188064","2022188071","HK","HKG","HONG KONG" -"2022188072","2022188111","US","USA","UNITED STATES" -"2022188112","2022188119","HK","HKG","HONG KONG" -"2022188120","2022188135","US","USA","UNITED STATES" -"2022188136","2022188199","HK","HKG","HONG KONG" -"2022188200","2022188223","US","USA","UNITED STATES" -"2022188224","2022188239","HK","HKG","HONG KONG" -"2022188240","2022188255","US","USA","UNITED STATES" -"2022188256","2022188671","HK","HKG","HONG KONG" -"2022188672","2022188927","US","USA","UNITED STATES" -"2022188928","2022188959","HK","HKG","HONG KONG" -"2022188960","2022188991","US","USA","UNITED STATES" -"2022188992","2022189199","HK","HKG","HONG KONG" -"2022189200","2022189207","US","USA","UNITED STATES" -"2022189208","2022189223","HK","HKG","HONG KONG" -"2022189224","2022189231","US","USA","UNITED STATES" -"2022189232","2022189823","HK","HKG","HONG KONG" -"2022189824","2022189831","US","USA","UNITED STATES" -"2022189832","2022190335","HK","HKG","HONG KONG" -"2022190336","2022190847","US","USA","UNITED STATES" -"2022190848","2022191103","HK","HKG","HONG KONG" -"2022191104","2022193151","NZ","NZL","NEW ZEALAND" -"2022193152","2022195199","AU","AUS","AUSTRALIA" -"2022195200","2022211583","KR","KOR","REPUBLIC OF KOREA" -"2022211584","2022227967","CN","CHN","CHINA" -"2022227968","2022244351","JP","JPN","JAPAN" -"2022244352","2022277119","CN","CHN","CHINA" -"2022277120","2022309887","JP","JPN","JAPAN" -"2022309888","2022313983","PH","PHL","PHILIPPINES" -"2022313984","2022316031","NZ","NZL","NEW ZEALAND" -"2022316032","2022318079","AU","AUS","AUSTRALIA" -"2022318080","2022318143","HK","HKG","HONG KONG" -"2022318144","2022318207","JP","JPN","JAPAN" -"2022318208","2022318239","CN","CHN","CHINA" -"2022318240","2022318271","IN","IND","INDIA" -"2022318272","2022326271","AU","AUS","AUSTRALIA" -"2022326272","2022330367","VN","VNM","VIET NAM" -"2022330368","2022334463","MY","MYS","MALAYSIA" -"2022334464","2022342655","IN","IND","INDIA" -"2022342656","2022359039","JP","JPN","JAPAN" -"2022359040","2022375423","IN","IND","INDIA" -"2022375424","2022572031","MY","MYS","MALAYSIA" -"2022572032","2022637567","KR","KOR","REPUBLIC OF KOREA" -"2022637568","2022662143","JP","JPN","JAPAN" -"2022662144","2022678527","AU","AUS","AUSTRALIA" -"2022678528","2022703103","KR","KOR","REPUBLIC OF KOREA" -"2022703104","2023751679","AU","AUS","AUSTRALIA" -"2023751680","2025848831","ID","IDN","INDONESIA" -"2025848832","2030043135","CN","CHN","CHINA" -"2030043136","2030047231","AU","AUS","AUSTRALIA" -"2030047232","2030051327","CN","CHN","CHINA" -"2030051328","2030057471","JP","JPN","JAPAN" -"2030057472","2030059519","AU","AUS","AUSTRALIA" -"2030059520","2030108671","KR","KOR","REPUBLIC OF KOREA" -"2030108672","2030125055","PH","PHL","PHILIPPINES" -"2030125056","2030141439","KR","KOR","REPUBLIC OF KOREA" -"2030141440","2030305279","JP","JPN","JAPAN" -"2030305280","2030436351","CN","CHN","CHINA" -"2030436352","2030567423","SG","SGP","SINGAPORE" -"2030567424","2032926719","CN","CHN","CHINA" -"2032926720","2033057791","AU","AUS","AUSTRALIA" -"2033057792","2033074175","CN","CHN","CHINA" -"2033074176","2033090559","AU","AUS","AUSTRALIA" -"2033090560","2033319935","CN","CHN","CHINA" -"2033319936","2033321983","IN","IND","INDIA" -"2033321984","2033324031","AU","AUS","AUSTRALIA" -"2033324032","2033328127","KR","KOR","REPUBLIC OF KOREA" -"2033328128","2033330175","ID","IDN","INDONESIA" -"2033330176","2033336319","JP","JPN","JAPAN" -"2033336320","2033352703","KR","KOR","REPUBLIC OF KOREA" -"2033352704","2033356799","ID","IDN","INDONESIA" -"2033356800","2033358847","TW","TWN","TAIWAN" -"2033358848","2033362943","JP","JPN","JAPAN" -"2033362944","2033364991","AU","AUS","AUSTRALIA" -"2033364992","2033369087","TW","TWN","TAIWAN" -"2033369088","2033377279","AU","AUS","AUSTRALIA" -"2033377280","2033385471","KR","KOR","REPUBLIC OF KOREA" -"2033385472","2033451007","CN","CHN","CHINA" -"2033451008","2033487871","ID","IDN","INDONESIA" -"2033487872","2033491967","PK","PAK","PAKISTAN" -"2033491968","2033500159","CN","CHN","CHINA" -"2033500160","2033502207","AU","AUS","AUSTRALIA" -"2033502208","2033504255","SG","SGP","SINGAPORE" -"2033504256","2033516543","CN","CHN","CHINA" -"2033516544","2033582079","KR","KOR","REPUBLIC OF KOREA" -"2033582080","2033614847","PH","PHL","PHILIPPINES" -"2033614848","2033623039","AU","AUS","AUSTRALIA" -"2033623040","2033625087","PH","PHL","PHILIPPINES" -"2033625088","2033625599","HK","HKG","HONG KONG" -"2033625600","2033626111","CN","CHN","CHINA" -"2033626112","2033627135","HK","HKG","HONG KONG" -"2033627136","2033631231","AU","AUS","AUSTRALIA" -"2033631232","2033647615","KR","KOR","REPUBLIC OF KOREA" -"2033647616","2033663999","CN","CHN","CHINA" -"2033664000","2033696767","KR","KOR","REPUBLIC OF KOREA" -"2033696768","2033713151","GU","GUM","GUAM" -"2033713152","2033876991","CN","CHN","CHINA" -"2033876992","2033879039","JP","JPN","JAPAN" -"2033879040","2033881087","AU","AUS","AUSTRALIA" -"2033881088","2033885183","CN","CHN","CHINA" -"2033885184","2033887231","AU","AUS","AUSTRALIA" -"2033887232","2033889279","IN","IND","INDIA" -"2033889280","2033891327","JP","JPN","JAPAN" -"2033891328","2033893375","ID","IDN","INDONESIA" -"2033893376","2033909759","PH","PHL","PHILIPPINES" -"2033909760","2034213775","CN","CHN","CHINA" -"2034213776","2034213779","FR","FRA","FRANCE" -"2034213780","2034213783","DE","DEU","GERMANY" -"2034213784","2034213787","CN","CHN","CHINA" -"2034213788","2034213791","SL","SLE","SIERRA LEONE" -"2034213792","2034237439","CN","CHN","CHINA" -"2034237440","2034499583","KR","KOR","REPUBLIC OF KOREA" -"2034499584","2034761727","CN","CHN","CHINA" -"2034761728","2035023871","NZ","NZL","NEW ZEALAND" -"2035023872","2035154943","CN","CHN","CHINA" -"2035154944","2035220479","KR","KOR","REPUBLIC OF KOREA" -"2035220480","2035253247","AU","AUS","AUSTRALIA" -"2035253248","2035269631","CN","CHN","CHINA" -"2035269632","2035279871","NZ","NZL","NEW ZEALAND" -"2035279872","2035286015","AU","AUS","AUSTRALIA" -"2035286016","2035810303","JP","JPN","JAPAN" -"2035810304","2035875839","KR","KOR","REPUBLIC OF KOREA" -"2035875840","2035941375","CN","CHN","CHINA" -"2035941376","2036006911","NZ","NZL","NEW ZEALAND" -"2036006912","2036072447","AU","AUS","AUSTRALIA" -"2036072448","2036334591","JP","JPN","JAPAN" -"2036334592","2036465663","PH","PHL","PHILIPPINES" -"2036465664","2036531199","NZ","NZL","NEW ZEALAND" -"2036531200","2036596735","AU","AUS","AUSTRALIA" -"2036596736","2036598783","ID","IDN","INDONESIA" -"2036598784","2036600831","JP","JPN","JAPAN" -"2036600832","2036604927","ID","IDN","INDONESIA" -"2036604928","2036609023","SG","SGP","SINGAPORE" -"2036609024","2036611071","AF","AFG","AFGHANISTAN" -"2036611072","2036613119","AU","AUS","AUSTRALIA" -"2036613120","2036629503","KR","KOR","REPUBLIC OF KOREA" -"2036629504","2036662271","CN","CHN","CHINA" -"2036662272","2036678655","AU","AUS","AUSTRALIA" -"2036678656","2036695039","JP","JPN","JAPAN" -"2036695040","2036697087","ID","IDN","INDONESIA" -"2036697088","2036699135","AU","AUS","AUSTRALIA" -"2036699136","2036703231","IN","IND","INDIA" -"2036703232","2036705279","AU","AUS","AUSTRALIA" -"2036705280","2036707327","HK","HKG","HONG KONG" -"2036707328","2036709375","MN","MNG","MONGOLIA" -"2036709376","2036711423","ID","IDN","INDONESIA" -"2036711424","2036715519","KR","KOR","REPUBLIC OF KOREA" -"2036715520","2036719615","CN","CHN","CHINA" -"2036719616","2036727807","KR","KOR","REPUBLIC OF KOREA" -"2036727808","2037907455","JP","JPN","JAPAN" -"2037907456","2038169599","MY","MYS","MALAYSIA" -"2038169600","2038366207","KR","KOR","REPUBLIC OF KOREA" -"2038366208","2038374399","PH","PHL","PHILIPPINES" -"2038374400","2038382591","AF","AFG","AFGHANISTAN" -"2038382592","2038415359","KR","KOR","REPUBLIC OF KOREA" -"2038415360","2038423551","AU","AUS","AUSTRALIA" -"2038423552","2038431743","HK","HKG","HONG KONG" -"2038431744","2042626047","KR","KOR","REPUBLIC OF KOREA" -"2042626048","2043150335","CN","CHN","CHINA" -"2043150336","2043166719","AU","AUS","AUSTRALIA" -"2043166720","2043183103","KR","KOR","REPUBLIC OF KOREA" -"2043183104","2043199487","JP","JPN","JAPAN" -"2043199488","2043201535","BD","BGD","BANGLADESH" -"2043201536","2043203583","JP","JPN","JAPAN" -"2043203584","2043215871","AU","AUS","AUSTRALIA" -"2043215872","2043281407","CN","CHN","CHINA" -"2043281408","2043412479","HK","HKG","HONG KONG" -"2043412480","2043674623","CN","CHN","CHINA" -"2043674624","2044723199","AU","AUS","AUSTRALIA" -"2044723200","2045771775","CN","CHN","CHINA" -"2045771776","2046296063","IN","IND","INDIA" -"2046296064","2046558207","CN","CHN","CHINA" -"2046558208","2046705663","KR","KOR","REPUBLIC OF KOREA" -"2046705664","2046722047","TW","TWN","TAIWAN" -"2046722048","2046754815","KR","KOR","REPUBLIC OF KOREA" -"2046754816","2046820351","CN","CHN","CHINA" -"2046820352","2046822399","TH","THA","THAILAND" -"2046822400","2046824447","KR","KOR","REPUBLIC OF KOREA" -"2046824448","2046828543","MY","MYS","MALAYSIA" -"2046828544","2046836735","KR","KOR","REPUBLIC OF KOREA" -"2046836736","2046885887","CN","CHN","CHINA" -"2046885888","2046951423","JP","JPN","JAPAN" -"2046951424","2047082495","PH","PHL","PHILIPPINES" -"2047082496","2047868927","CN","CHN","CHINA" -"2047868928","2048917503","JP","JPN","JAPAN" -"2048917504","2049966079","KR","KOR","REPUBLIC OF KOREA" -"2049966080","2050047999","CN","CHN","CHINA" -"2050048000","2050064383","KR","KOR","REPUBLIC OF KOREA" -"2050064384","2050080767","AU","AUS","AUSTRALIA" -"2050080768","2050082815","JP","JPN","JAPAN" -"2050082816","2050084863","AU","AUS","AUSTRALIA" -"2050084864","2050088959","PH","PHL","PHILIPPINES" -"2050088960","2050091007","ID","IDN","INDONESIA" -"2050091008","2050097151","JP","JPN","JAPAN" -"2050097152","2050101247","SG","SGP","SINGAPORE" -"2050101248","2050113535","JP","JPN","JAPAN" -"2050113536","2050129591","SG","SGP","SINGAPORE" -"2050129592","2050129595","US","USA","UNITED STATES" -"2050129596","2050129647","SG","SGP","SINGAPORE" -"2050129648","2050129655","JP","JPN","JAPAN" -"2050129656","2050129663","US","USA","UNITED STATES" -"2050129664","2050129919","JP","JPN","JAPAN" -"2050129920","2050162687","IN","IND","INDIA" -"2050162688","2050228223","CN","CHN","CHINA" -"2050228224","2050490367","PH","PHL","PHILIPPINES" -"2050490368","2051014655","NZ","NZL","NEW ZEALAND" -"2051014656","2053242879","CN","CHN","CHINA" -"2053242880","2053308415","IN","IND","INDIA" -"2053308416","2053324799","TW","TWN","TAIWAN" -"2053324800","2053332991","AU","AUS","AUSTRALIA" -"2053332992","2053335039","BD","BGD","BANGLADESH" -"2053335040","2053337087","JP","JPN","JAPAN" -"2053337088","2053340159","AU","AUS","AUSTRALIA" -"2053340160","2053341183","IN","IND","INDIA" -"2053341184","2053373951","KR","KOR","REPUBLIC OF KOREA" -"2053373952","2053378047","AU","AUS","AUSTRALIA" -"2053378048","2053380095","JP","JPN","JAPAN" -"2053380096","2053382143","AU","AUS","AUSTRALIA" -"2053382144","2053390335","KR","KOR","REPUBLIC OF KOREA" -"2053390336","2053406719","TW","TWN","TAIWAN" -"2053406720","2053439487","MO","MAC","MACAO" -"2053439488","2053505023","KR","KOR","REPUBLIC OF KOREA" -"2053505024","2053509119","CN","CHN","CHINA" -"2053509120","2053513215","AU","AUS","AUSTRALIA" -"2053513216","2053515263","BD","BGD","BANGLADESH" -"2053515264","2053517311","AU","AUS","AUSTRALIA" -"2053517312","2053519359","ID","IDN","INDONESIA" -"2053519360","2053521407","AU","AUS","AUSTRALIA" -"2053521408","2053529599","CN","CHN","CHINA" -"2053529600","2053532671","AU","AUS","AUSTRALIA" -"2053532672","2053533183","NZ","NZL","NEW ZEALAND" -"2053533184","2053537791","AU","AUS","AUSTRALIA" -"2053537792","2053636095","JP","JPN","JAPAN" -"2053636096","2054160383","AU","AUS","AUSTRALIA" -"2054160384","2054422527","CN","CHN","CHINA" -"2054422528","2054619135","TW","TWN","TAIWAN" -"2054619136","2054684671","CN","CHN","CHINA" -"2054684672","2055208959","TW","TWN","TAIWAN" -"2055208960","2055213055","JP","JPN","JAPAN" -"2055213056","2055217151","ID","IDN","INDONESIA" -"2055217152","2055229439","KR","KOR","REPUBLIC OF KOREA" -"2055229440","2055231487","TW","TWN","TAIWAN" -"2055231488","2055233535","AU","AUS","AUSTRALIA" -"2055233536","2055235583","NP","NPL","NEPAL" -"2055235584","2055237631","HK","HKG","HONG KONG" -"2055237632","2055239679","JP","JPN","JAPAN" -"2055239680","2055241727","AU","AUS","AUSTRALIA" -"2055241728","2055274495","KR","KOR","REPUBLIC OF KOREA" -"2055274496","2055290879","AU","AUS","AUSTRALIA" -"2055290880","2055299071","PK","PAK","PAKISTAN" -"2055299072","2055305215","ID","IDN","INDONESIA" -"2055305216","2055323647","AU","AUS","AUSTRALIA" -"2055323648","2055327743","ID","IDN","INDONESIA" -"2055327744","2055329791","KR","KOR","REPUBLIC OF KOREA" -"2055329792","2055331839","AU","AUS","AUSTRALIA" -"2055331840","2055335935","JP","JPN","JAPAN" -"2055335936","2055340031","KR","KOR","REPUBLIC OF KOREA" -"2055340032","2055733247","JP","JPN","JAPAN" -"2055733248","2056257535","CN","CHN","CHINA" -"2056257536","2056259583","ID","IDN","INDONESIA" -"2056259584","2056261631","BD","BGD","BANGLADESH" -"2056261632","2056263679","IN","IND","INDIA" -"2056263680","2056265727","TH","THA","THAILAND" -"2056265728","2056273919","TW","TWN","TAIWAN" -"2056273920","2056290303","PH","PHL","PHILIPPINES" -"2056290304","2056323071","CN","CHN","CHINA" -"2056323072","2056388607","JP","JPN","JAPAN" -"2056388608","2056519679","TW","TWN","TAIWAN" -"2056519680","2056781823","AU","AUS","AUSTRALIA" -"2056781824","2056794111","JP","JPN","JAPAN" -"2056794112","2056796159","BD","BGD","BANGLADESH" -"2056796160","2056798207","AU","AUS","AUSTRALIA" -"2056798208","2056806399","JP","JPN","JAPAN" -"2056806400","2056814591","AU","AUS","AUSTRALIA" -"2056814592","2056815103","JP","JPN","JAPAN" -"2056815104","2056815195","HK","HKG","HONG KONG" -"2056815196","2056815215","JP","JPN","JAPAN" -"2056815216","2056815343","HK","HKG","HONG KONG" -"2056815344","2056815391","JP","JPN","JAPAN" -"2056815392","2056815487","HK","HKG","HONG KONG" -"2056815488","2056815519","JP","JPN","JAPAN" -"2056815520","2056815615","HK","HKG","HONG KONG" -"2056815616","2056816031","JP","JPN","JAPAN" -"2056816032","2056816047","NZ","NZL","NEW ZEALAND" -"2056816048","2056816159","JP","JPN","JAPAN" -"2056816160","2056816191","PH","PHL","PHILIPPINES" -"2056816192","2056816319","JP","JPN","JAPAN" -"2056816320","2056816383","PH","PHL","PHILIPPINES" -"2056816384","2056816479","JP","JPN","JAPAN" -"2056816480","2056816511","PH","PHL","PHILIPPINES" -"2056816512","2056816639","TW","TWN","TAIWAN" -"2056816640","2056816783","SG","SGP","SINGAPORE" -"2056816784","2056816791","MY","MYS","MALAYSIA" -"2056816792","2056816799","JP","JPN","JAPAN" -"2056816800","2056816823","SG","SGP","SINGAPORE" -"2056816824","2056816831","MY","MYS","MALAYSIA" -"2056816832","2056816943","SG","SGP","SINGAPORE" -"2056816944","2056817007","MY","MYS","MALAYSIA" -"2056817008","2056817151","SG","SGP","SINGAPORE" -"2056817152","2056817215","HK","HKG","HONG KONG" -"2056817216","2056817311","JP","JPN","JAPAN" -"2056817312","2056817343","HK","HKG","HONG KONG" -"2056817344","2056817375","JP","JPN","JAPAN" -"2056817376","2056817399","HK","HKG","HONG KONG" -"2056817400","2056817407","JP","JPN","JAPAN" -"2056817408","2056817663","HK","HKG","HONG KONG" -"2056817664","2056818175","JP","JPN","JAPAN" -"2056818176","2056818239","SG","SGP","SINGAPORE" -"2056818240","2056818271","MY","MYS","MALAYSIA" -"2056818272","2056818623","SG","SGP","SINGAPORE" -"2056818624","2056818639","JP","JPN","JAPAN" -"2056818640","2056818687","SG","SGP","SINGAPORE" -"2056818688","2056818815","MY","MYS","MALAYSIA" -"2056818816","2056818847","SG","SGP","SINGAPORE" -"2056818848","2056818863","MY","MYS","MALAYSIA" -"2056818864","2056818879","SG","SGP","SINGAPORE" -"2056818880","2056818927","JP","JPN","JAPAN" -"2056818928","2056818943","SG","SGP","SINGAPORE" -"2056818944","2056819007","MY","MYS","MALAYSIA" -"2056819008","2056819023","SG","SGP","SINGAPORE" -"2056819024","2056819039","MY","MYS","MALAYSIA" -"2056819040","2056819071","JP","JPN","JAPAN" -"2056819072","2056819199","MY","MYS","MALAYSIA" -"2056819200","2056819759","JP","JPN","JAPAN" -"2056819760","2056819775","NZ","NZL","NEW ZEALAND" -"2056819776","2056819839","JP","JPN","JAPAN" -"2056819840","2056819871","NZ","NZL","NEW ZEALAND" -"2056819872","2056819903","JP","JPN","JAPAN" -"2056819904","2056819911","NZ","NZL","NEW ZEALAND" -"2056819912","2056820223","JP","JPN","JAPAN" -"2056820224","2056820279","HK","HKG","HONG KONG" -"2056820280","2056820287","JP","JPN","JAPAN" -"2056820288","2056820319","HK","HKG","HONG KONG" -"2056820320","2056820351","JP","JPN","JAPAN" -"2056820352","2056820415","HK","HKG","HONG KONG" -"2056820416","2056820511","JP","JPN","JAPAN" -"2056820512","2056820607","HK","HKG","HONG KONG" -"2056820608","2056822911","JP","JPN","JAPAN" -"2056822912","2056822959","HK","HKG","HONG KONG" -"2056822960","2056825535","JP","JPN","JAPAN" -"2056825536","2056825663","HK","HKG","HONG KONG" -"2056825664","2056825727","JP","JPN","JAPAN" -"2056825728","2056825855","HK","HKG","HONG KONG" -"2056825856","2056827935","JP","JPN","JAPAN" -"2056827936","2056827965","HK","HKG","HONG KONG" -"2056827966","2056830271","JP","JPN","JAPAN" -"2056830272","2056830275","HK","HKG","HONG KONG" -"2056830276","2056830419","JP","JPN","JAPAN" -"2056830420","2056830423","HK","HKG","HONG KONG" -"2056830424","2056830975","JP","JPN","JAPAN" -"2056830976","2056847359","CN","CHN","CHINA" -"2056847360","2056912895","KR","KOR","REPUBLIC OF KOREA" -"2056912896","2057043967","TH","THA","THAILAND" -"2057043968","2057306111","CN","CHN","CHINA" -"2057306112","2059141119","IN","IND","INDIA" -"2059141120","2059403263","AU","AUS","AUSTRALIA" -"2059403264","2059665407","CN","CHN","CHINA" -"2059665408","2059796479","JP","JPN","JAPAN" -"2059796480","2059862015","CN","CHN","CHINA" -"2059862016","2059878399","AU","AUS","AUSTRALIA" -"2059878400","2059927551","KR","KOR","REPUBLIC OF KOREA" -"2059927552","2059931647","ID","IDN","INDONESIA" -"2059931648","2059933695","IN","IND","INDIA" -"2059933696","2059935743","AU","AUS","AUSTRALIA" -"2059935744","2059937791","JP","JPN","JAPAN" -"2059937792","2059939839","BD","BGD","BANGLADESH" -"2059939840","2059941887","ID","IDN","INDONESIA" -"2059941888","2059943935","AU","AUS","AUSTRALIA" -"2059943936","2059960319","CN","CHN","CHINA" -"2059960320","2059961343","AU","AUS","AUSTRALIA" -"2059961344","2059962367","HK","HKG","HONG KONG" -"2059962368","2059964415","JP","JPN","JAPAN" -"2059964416","2059966463","ID","IDN","INDONESIA" -"2059966464","2059968511","TW","TWN","TAIWAN" -"2059968512","2059976703","AU","AUS","AUSTRALIA" -"2059976704","2059995135","JP","JPN","JAPAN" -"2059995136","2059997183","VN","VNM","VIET NAM" -"2059997184","2060001279","MN","MNG","MONGOLIA" -"2060001280","2060001791","AE","ARE","UNITED ARAB EMIRATES" -"2060001792","2060002239","HK","HKG","HONG KONG" -"2060002240","2060002247","PK","PAK","PAKISTAN" -"2060002248","2060002391","HK","HKG","HONG KONG" -"2060002392","2060002415","AF","AFG","AFGHANISTAN" -"2060002416","2060002455","HK","HKG","HONG KONG" -"2060002456","2060002463","PK","PAK","PAKISTAN" -"2060002464","2060002847","HK","HKG","HONG KONG" -"2060002848","2060002863","AF","AFG","AFGHANISTAN" -"2060002864","2060003039","HK","HKG","HONG KONG" -"2060003040","2060003071","AF","AFG","AFGHANISTAN" -"2060003072","2060003199","HK","HKG","HONG KONG" -"2060003200","2060003215","AF","AFG","AFGHANISTAN" -"2060003216","2060005375","HK","HKG","HONG KONG" -"2060005376","2060025855","AU","AUS","AUSTRALIA" -"2060025856","2060058623","TW","TWN","TAIWAN" -"2060058624","2060062719","AU","AUS","AUSTRALIA" -"2060062720","2060066815","JP","JPN","JAPAN" -"2060066816","2060075007","KR","KOR","REPUBLIC OF KOREA" -"2060075008","2060083199","AU","AUS","AUSTRALIA" -"2060083200","2060091391","PH","PHL","PHILIPPINES" -"2060091392","2060189695","KR","KOR","REPUBLIC OF KOREA" -"2060189696","2060451839","CN","CHN","CHINA" -"2060451840","2061500415","JP","JPN","JAPAN" -"2061500416","2063073279","CN","CHN","CHINA" -"2063073280","2063077375","BD","BGD","BANGLADESH" -"2063077376","2063081471","HK","HKG","HONG KONG" -"2063081472","2063085567","AU","AUS","AUSTRALIA" -"2063085568","2063089663","CN","CHN","CHINA" -"2063089664","2063097855","JP","JPN","JAPAN" -"2063097856","2063106047","AU","AUS","AUSTRALIA" -"2063106048","2063107455","SG","SGP","SINGAPORE" -"2063107456","2063107551","AU","AUS","AUSTRALIA" -"2063107552","2063107623","SG","SGP","SINGAPORE" -"2063107624","2063107631","AU","AUS","AUSTRALIA" -"2063107632","2063107639","NZ","NZL","NEW ZEALAND" -"2063107640","2063107647","PH","PHL","PHILIPPINES" -"2063107648","2063107655","MY","MYS","MALAYSIA" -"2063107656","2063107663","HK","HKG","HONG KONG" -"2063107664","2063107671","TW","TWN","TAIWAN" -"2063107672","2063107679","CN","CHN","CHINA" -"2063107680","2063107703","SG","SGP","SINGAPORE" -"2063107704","2063107711","AU","AUS","AUSTRALIA" -"2063107712","2063108095","SG","SGP","SINGAPORE" -"2063108096","2063109119","HK","HKG","HONG KONG" -"2063109120","2063109375","AU","AUS","AUSTRALIA" -"2063109376","2063109423","HK","HKG","HONG KONG" -"2063109424","2063109439","AU","AUS","AUSTRALIA" -"2063109440","2063109471","HK","HKG","HONG KONG" -"2063109472","2063109503","AU","AUS","AUSTRALIA" -"2063109504","2063109623","HK","HKG","HONG KONG" -"2063109624","2063109759","AU","AUS","AUSTRALIA" -"2063109760","2063109967","HK","HKG","HONG KONG" -"2063109968","2063110015","AU","AUS","AUSTRALIA" -"2063110016","2063110079","HK","HKG","HONG KONG" -"2063110080","2063110143","AU","AUS","AUSTRALIA" -"2063110144","2063110399","JP","JPN","JAPAN" -"2063110400","2063110527","AU","AUS","AUSTRALIA" -"2063110528","2063110663","JP","JPN","JAPAN" -"2063110664","2063110687","AU","AUS","AUSTRALIA" -"2063110688","2063110783","JP","JPN","JAPAN" -"2063110784","2063114239","AU","AUS","AUSTRALIA" -"2063114240","2063115263","IN","IND","INDIA" -"2063115264","2063115519","JP","JPN","JAPAN" -"2063115520","2063116287","AU","AUS","AUSTRALIA" -"2063116288","2063116319","SG","SGP","SINGAPORE" -"2063116320","2063116351","AU","AUS","AUSTRALIA" -"2063116352","2063116367","SG","SGP","SINGAPORE" -"2063116368","2063116383","AU","AUS","AUSTRALIA" -"2063116384","2063116415","SG","SGP","SINGAPORE" -"2063116416","2063116799","AU","AUS","AUSTRALIA" -"2063116800","2063116807","KR","KOR","REPUBLIC OF KOREA" -"2063116808","2063117311","AU","AUS","AUSTRALIA" -"2063117312","2063117327","NZ","NZL","NEW ZEALAND" -"2063117328","2063117575","AU","AUS","AUSTRALIA" -"2063117576","2063117583","NZ","NZL","NEW ZEALAND" -"2063117584","2063117823","AU","AUS","AUSTRALIA" -"2063117824","2063117839","PH","PHL","PHILIPPINES" -"2063117840","2063117855","AU","AUS","AUSTRALIA" -"2063117856","2063117927","PH","PHL","PHILIPPINES" -"2063117928","2063117935","AU","AUS","AUSTRALIA" -"2063117936","2063117951","PH","PHL","PHILIPPINES" -"2063117952","2063118335","AU","AUS","AUSTRALIA" -"2063118336","2063118343","IN","IND","INDIA" -"2063118344","2063118463","AU","AUS","AUSTRALIA" -"2063118464","2063118591","IN","IND","INDIA" -"2063118592","2063118847","AU","AUS","AUSTRALIA" -"2063118848","2063119103","SG","SGP","SINGAPORE" -"2063119104","2063138815","AU","AUS","AUSTRALIA" -"2063138816","2063335423","JP","JPN","JAPAN" -"2063335424","2063351807","AU","AUS","AUSTRALIA" -"2063351808","2063368191","KR","KOR","REPUBLIC OF KOREA" -"2063368192","2063370239","AU","AUS","AUSTRALIA" -"2063370240","2063372287","JP","JPN","JAPAN" -"2063372288","2063376383","AU","AUS","AUSTRALIA" -"2063376384","2063380479","TW","TWN","TAIWAN" -"2063380480","2063382527","KH","KHM","CAMBODIA" -"2063382528","2063384575","AU","AUS","AUSTRALIA" -"2063384576","2063392767","KR","KOR","REPUBLIC OF KOREA" -"2063392768","2063400959","IN","IND","INDIA" -"2063400960","2063466495","JP","JPN","JAPAN" -"2063466496","2063482879","TW","TWN","TAIWAN" -"2063482880","2063499263","MN","MNG","MONGOLIA" -"2063499264","2063532031","KR","KOR","REPUBLIC OF KOREA" -"2063532032","2063548415","LK","LKA","SRI LANKA" -"2063548416","2063550463","AU","AUS","AUSTRALIA" -"2063550464","2063551487","IN","IND","INDIA" -"2063551488","2063552511","AU","AUS","AUSTRALIA" -"2063552512","2063556607","TW","TWN","TAIWAN" -"2063556608","2063564799","MY","MYS","MALAYSIA" -"2063564800","2063597567","JP","JPN","JAPAN" -"2063597568","2063601663","KR","KOR","REPUBLIC OF KOREA" -"2063601664","2063605759","AU","AUS","AUSTRALIA" -"2063605760","2063613951","TW","TWN","TAIWAN" -"2063613952","2063630335","JP","JPN","JAPAN" -"2063630336","2063646719","CN","CHN","CHINA" -"2063646720","2063663103","TW","TWN","TAIWAN" -"2063663104","2063695871","JP","JPN","JAPAN" -"2063695872","2063859711","AU","AUS","AUSTRALIA" -"2063859712","2064646143","CN","CHN","CHINA" -"2064646144","2065694719","VN","VNM","VIET NAM" -"2065694720","2066743295","KR","KOR","REPUBLIC OF KOREA" -"2066743296","2066808831","JP","JPN","JAPAN" -"2066808832","2066825215","BD","BGD","BANGLADESH" -"2066825216","2066841599","SG","SGP","SINGAPORE" -"2066841600","2066874367","CN","CHN","CHINA" -"2066874368","2066882559","JP","JPN","JAPAN" -"2066882560","2066890751","TW","TWN","TAIWAN" -"2066890752","2066907135","PF","PYF","FRENCH POLYNESIA" -"2066907136","2066915327","AU","AUS","AUSTRALIA" -"2066915328","2066923519","IN","IND","INDIA" -"2066923520","2066939903","JP","JPN","JAPAN" -"2066939904","2066972671","AU","AUS","AUSTRALIA" -"2066972672","2067005439","TW","TWN","TAIWAN" -"2067005440","2070052863","CN","CHN","CHINA" -"2070052864","2070056959","AU","AUS","AUSTRALIA" -"2070056960","2070061055","JP","JPN","JAPAN" -"2070061056","2070077439","KR","KOR","REPUBLIC OF KOREA" -"2070077440","2070085631","JP","JPN","JAPAN" -"2070085632","2070102015","TW","TWN","TAIWAN" -"2070102016","2070118399","KR","KOR","REPUBLIC OF KOREA" -"2070118400","2070159359","CN","CHN","CHINA" -"2070159360","2070167551","AU","AUS","AUSTRALIA" -"2070167552","2070183935","NZ","NZL","NEW ZEALAND" -"2070183936","2070200319","AU","AUS","AUSTRALIA" -"2070200320","2070208511","JP","JPN","JAPAN" -"2070208512","2070209279","MY","MYS","MALAYSIA" -"2070209280","2070210559","SG","SGP","SINGAPORE" -"2070210560","2070210815","CN","CHN","CHINA" -"2070210816","2070211071","SG","SGP","SINGAPORE" -"2070211072","2070211327","IN","IND","INDIA" -"2070211328","2070216703","SG","SGP","SINGAPORE" -"2070216704","2070282239","CN","CHN","CHINA" -"2070282240","2070347775","AU","AUS","AUSTRALIA" -"2070347776","2070380543","CN","CHN","CHINA" -"2070380544","2070396927","JP","JPN","JAPAN" -"2070396928","2070405119","AU","AUS","AUSTRALIA" -"2070405120","2070409215","JP","JPN","JAPAN" -"2070409216","2070413311","AU","AUS","AUSTRALIA" -"2070413312","2070677503","JP","JPN","JAPAN" -"2070677504","2070679551","ID","IDN","INDONESIA" -"2070679552","2070683647","KR","KOR","REPUBLIC OF KOREA" -"2070683648","2070691839","IN","IND","INDIA" -"2070691840","2070700031","AU","AUS","AUSTRALIA" -"2070700032","2070702079","ID","IDN","INDONESIA" -"2070702080","2070703103","AU","AUS","AUSTRALIA" -"2070703104","2070704127","HK","HKG","HONG KONG" -"2070704128","2070708223","PH","PHL","PHILIPPINES" -"2070708224","2070712319","CN","CHN","CHINA" -"2070712320","2070714367","NZ","NZL","NEW ZEALAND" -"2070714368","2070716415","AU","AUS","AUSTRALIA" -"2070716416","2070724607","KR","KOR","REPUBLIC OF KOREA" -"2070724608","2070726655","JP","JPN","JAPAN" -"2070726656","2070728703","IN","IND","INDIA" -"2070728704","2070732799","CN","CHN","CHINA" -"2070732800","2070734847","IN","IND","INDIA" -"2070734848","2070736895","JP","JPN","JAPAN" -"2070736896","2070738943","BD","BGD","BANGLADESH" -"2070738944","2070740991","KH","KHM","CAMBODIA" -"2070740992","2070806527","KR","KOR","REPUBLIC OF KOREA" -"2070806528","2070872063","TW","TWN","TAIWAN" -"2070872064","2070937599","KR","KOR","REPUBLIC OF KOREA" -"2070937600","2072510463","CN","CHN","CHINA" -"2072510464","2072514559","HK","HKG","HONG KONG" -"2072514560","2072516607","IN","IND","INDIA" -"2072516608","2072518655","BD","BGD","BANGLADESH" -"2072518656","2072526847","AU","AUS","AUSTRALIA" -"2072526848","2072528895","SG","SGP","SINGAPORE" -"2072528896","2072530943","PH","PHL","PHILIPPINES" -"2072530944","2072535039","CN","CHN","CHINA" -"2072535040","2072543231","MY","MYS","MALAYSIA" -"2072543232","2072575999","IN","IND","INDIA" -"2072576000","2072772607","CN","CHN","CHINA" -"2072772608","2073034751","KR","KOR","REPUBLIC OF KOREA" -"2073034752","2075131903","CN","CHN","CHINA" -"2075131904","2075140095","MV","MDV","MALDIVES" -"2075140096","2075144191","IN","IND","INDIA" -"2075144192","2075146239","JP","JPN","JAPAN" -"2075146240","2075147263","BD","BGD","BANGLADESH" -"2075147264","2075148287","AU","AUS","AUSTRALIA" -"2075148288","2075150335","PH","PHL","PHILIPPINES" -"2075150336","2075152383","WS","WSM","SAMOA" -"2075152384","2075156479","CN","CHN","CHINA" -"2075156480","2075158527","HK","HKG","HONG KONG" -"2075158528","2075160575","JP","JPN","JAPAN" -"2075160576","2075162623","AU","AUS","AUSTRALIA" -"2075162624","2075164671","ID","IDN","INDONESIA" -"2075164672","2075197439","JP","JPN","JAPAN" -"2075197440","2076180479","CN","CHN","CHINA" -"2076180480","2076442623","TW","TWN","TAIWAN" -"2076442624","2076573695","CN","CHN","CHINA" -"2076573696","2076639231","JP","JPN","JAPAN" -"2076639232","2076671999","KR","KOR","REPUBLIC OF KOREA" -"2076672000","2076704767","CN","CHN","CHINA" -"2076704768","2076712959","BD","BGD","BANGLADESH" -"2076712960","2076721151","JP","JPN","JAPAN" -"2076721152","2076737535","KR","KOR","REPUBLIC OF KOREA" -"2076737536","2076770303","AU","AUS","AUSTRALIA" -"2076770304","2076835839","IN","IND","INDIA" -"2076835840","2076966911","HK","HKG","HONG KONG" -"2076966912","2077097983","TW","TWN","TAIWAN" -"2077097984","2077229055","CN","CHN","CHINA" -"2077229056","2077491199","AU","AUS","AUSTRALIA" -"2077491200","2077753343","KR","KOR","REPUBLIC OF KOREA" -"2077753344","2078539775","JP","JPN","JAPAN" -"2078539776","2078670847","KR","KOR","REPUBLIC OF KOREA" -"2078670848","2078736383","JP","JPN","JAPAN" -"2078736384","2078769151","LK","LKA","SRI LANKA" -"2078769152","2078801919","ID","IDN","INDONESIA" -"2078801920","2079064063","CN","CHN","CHINA" -"2079064064","2079326207","IN","IND","INDIA" -"2079326208","2079457279","TW","TWN","TAIWAN" -"2079457280","2079490047","CN","CHN","CHINA" -"2079490048","2079506431","TH","THA","THAILAND" -"2079506432","2079508479","AU","AUS","AUSTRALIA" -"2079508480","2079510527","PH","PHL","PHILIPPINES" -"2079510528","2079514623","JP","JPN","JAPAN" -"2079514624","2079516671","HK","HKG","HONG KONG" -"2079516672","2079518719","JP","JPN","JAPAN" -"2079518720","2079522815","IN","IND","INDIA" -"2079522816","2079588351","AU","AUS","AUSTRALIA" -"2079588352","2079850495","CN","CHN","CHINA" -"2079850496","2079916031","KR","KOR","REPUBLIC OF KOREA" -"2079916032","2079981567","CN","CHN","CHINA" -"2079981568","2080112639","KR","KOR","REPUBLIC OF KOREA" -"2080112640","2080145407","TW","TWN","TAIWAN" -"2080145408","2080178175","IN","IND","INDIA" -"2080178176","2080243711","CN","CHN","CHINA" -"2080243712","2080260095","JP","JPN","JAPAN" -"2080260096","2080268287","KR","KOR","REPUBLIC OF KOREA" -"2080268288","2080276479","AU","AUS","AUSTRALIA" -"2080276480","2080309247","KR","KOR","REPUBLIC OF KOREA" -"2080309248","2080325631","NZ","NZL","NEW ZEALAND" -"2080325632","2080342015","HK","HKG","HONG KONG" -"2080342016","2080360447","JP","JPN","JAPAN" -"2080360448","2080362495","ID","IDN","INDONESIA" -"2080362496","2080366591","AU","AUS","AUSTRALIA" -"2080366592","2080368639","TW","TWN","TAIWAN" -"2080368640","2080372735","JP","JPN","JAPAN" -"2080372736","2080374783","IN","IND","INDIA" -"2080374784","2080636927","KR","KOR","REPUBLIC OF KOREA" -"2080636928","2080702463","IN","IND","INDIA" -"2080702464","2080767999","KR","KOR","REPUBLIC OF KOREA" -"2080768000","2080776191","TW","TWN","TAIWAN" -"2080776192","2080777215","ID","IDN","INDONESIA" -"2080777216","2080778239","AU","AUS","AUSTRALIA" -"2080778240","2080779263","ID","IDN","INDONESIA" -"2080779264","2080784383","AU","AUS","AUSTRALIA" -"2080784384","2080800767","CN","CHN","CHINA" -"2080800768","2080817151","PH","PHL","PHILIPPINES" -"2080817152","2080825343","NZ","NZL","NEW ZEALAND" -"2080825344","2080829439","BD","BGD","BANGLADESH" -"2080829440","2080833535","AU","AUS","AUSTRALIA" -"2080833536","2080899071","IN","IND","INDIA" -"2080899072","2081226751","TW","TWN","TAIWAN" -"2081226752","2081292287","MY","MYS","MALAYSIA" -"2081292288","2081554431","CN","CHN","CHINA" -"2081554432","2081619967","JP","JPN","JAPAN" -"2081619968","2081652735","AU","AUS","AUSTRALIA" -"2081652736","2081685503","PH","PHL","PHILIPPINES" -"2081685504","2081947647","CN","CHN","CHINA" -"2081947648","2082209791","JP","JPN","JAPAN" -"2082209792","2082258943","KR","KOR","REPUBLIC OF KOREA" -"2082258944","2082308095","CN","CHN","CHINA" -"2082308096","2082324479","TW","TWN","TAIWAN" -"2082324480","2082340863","PK","PAK","PAKISTAN" -"2082340864","2082406399","IN","IND","INDIA" -"2082406400","2082471935","CN","CHN","CHINA" -"2082471936","2083024895","JP","JPN","JAPAN" -"2083024896","2083045375","CN","CHN","CHINA" -"2083045376","2083053567","AU","AUS","AUSTRALIA" -"2083053568","2083057663","TH","THA","THAILAND" -"2083057664","2083059711","AU","AUS","AUSTRALIA" -"2083059712","2083061759","ID","IDN","INDONESIA" -"2083061760","2083110911","JP","JPN","JAPAN" -"2083110912","2083127295","NP","NPL","NEPAL" -"2083127296","2083192831","CN","CHN","CHINA" -"2083192832","2083258367","LK","LKA","SRI LANKA" -"2083258368","2083389439","JP","JPN","JAPAN" -"2083389440","2083454975","KR","KOR","REPUBLIC OF KOREA" -"2083454976","2083471359","CN","CHN","CHINA" -"2083471360","2083487743","JP","JPN","JAPAN" -"2083487744","2083504127","IN","IND","INDIA" -"2083504128","2083520511","JP","JPN","JAPAN" -"2083520512","2084569087","KR","KOR","REPUBLIC OF KOREA" -"2084569088","2084732927","CN","CHN","CHINA" -"2084732928","2084741119","SG","SGP","SINGAPORE" -"2084741120","2084743167","ID","IDN","INDONESIA" -"2084743168","2084745215","JP","JPN","JAPAN" -"2084745216","2084749311","KR","KOR","REPUBLIC OF KOREA" -"2084749312","2084753407","JP","JPN","JAPAN" -"2084753408","2084757503","AU","AUS","AUSTRALIA" -"2084757504","2084765695","JP","JPN","JAPAN" -"2084765696","2085617663","CN","CHN","CHINA" -"2085617664","2085683199","KR","KOR","REPUBLIC OF KOREA" -"2085683200","2085748735","ID","IDN","INDONESIA" -"2085748736","2085814271","MY","MYS","MALAYSIA" -"2085814272","2085847039","PH","PHL","PHILIPPINES" -"2085847040","2086141951","JP","JPN","JAPAN" -"2086141952","2086666239","CN","CHN","CHINA" -"2086666240","2087190527","JP","JPN","JAPAN" -"2087190528","2087452671","PH","PHL","PHILIPPINES" -"2087452672","2087453695","AU","AUS","AUSTRALIA" -"2087453696","2087454719","KH","KHM","CAMBODIA" -"2087454720","2087456767","CN","CHN","CHINA" -"2087456768","2087457791","AU","AUS","AUSTRALIA" -"2087457792","2087458815","BD","BGD","BANGLADESH" -"2087458816","2087460863","FJ","FJI","FIJI" -"2087460864","2087462911","JP","JPN","JAPAN" -"2087462912","2087464959","CN","CHN","CHINA" -"2087464960","2087467007","KH","KHM","CAMBODIA" -"2087467008","2087469055","JP","JPN","JAPAN" -"2087469056","2087472639","AU","AUS","AUSTRALIA" -"2087472640","2087473151","SG","SGP","SINGAPORE" -"2087473152","2087474175","HK","HKG","HONG KONG" -"2087474176","2087475711","AU","AUS","AUSTRALIA" -"2087475712","2087476223","JP","JPN","JAPAN" -"2087476224","2087477247","HK","HKG","HONG KONG" -"2087477248","2087481343","AU","AUS","AUSTRALIA" -"2087481344","2087485439","HK","HKG","HONG KONG" -"2087485440","2087501823","TW","TWN","TAIWAN" -"2087501824","2087518207","JP","JPN","JAPAN" -"2087518208","2087519231","TH","THA","THAILAND" -"2087519232","2087520255","SG","SGP","SINGAPORE" -"2087520256","2087522303","FM","FSM","FEDERATED STATES OF MICRONESIA" -"2087522304","2087524351","BD","BGD","BANGLADESH" -"2087524352","2087526399","TH","THA","THAILAND" -"2087526400","2087534591","PK","PAK","PAKISTAN" -"2087534592","2087544831","AU","AUS","AUSTRALIA" -"2087544832","2087545855","BD","BGD","BANGLADESH" -"2087545856","2087546879","JP","JPN","JAPAN" -"2087546880","2087550975","TW","TWN","TAIWAN" -"2087550976","2087649279","JP","JPN","JAPAN" -"2087649280","2087714815","KR","KOR","REPUBLIC OF KOREA" -"2087714816","2088239103","CN","CHN","CHINA" -"2088239104","2088435711","TH","THA","THAILAND" -"2088435712","2088632319","IN","IND","INDIA" -"2088632320","2089287679","CN","CHN","CHINA" -"2089287680","2089549823","KR","KOR","REPUBLIC OF KOREA" -"2089549824","2089943039","JP","JPN","JAPAN" -"2089943040","2089959423","KR","KOR","REPUBLIC OF KOREA" -"2089959424","2090041343","JP","JPN","JAPAN" -"2090041344","2090074111","CN","CHN","CHINA" -"2090074112","2090237951","AU","AUS","AUSTRALIA" -"2090237952","2090239999","TW","TWN","TAIWAN" -"2090240000","2090241023","IN","IND","INDIA" -"2090241024","2090242047","MY","MYS","MALAYSIA" -"2090242048","2090246143","JP","JPN","JAPAN" -"2090246144","2090248191","NZ","NZL","NEW ZEALAND" -"2090248192","2090250239","AU","AUS","AUSTRALIA" -"2090250240","2090270719","JP","JPN","JAPAN" -"2090270720","2090336255","CN","CHN","CHINA" -"2090336256","2090401791","AU","AUS","AUSTRALIA" -"2090401792","2090418175","ID","IDN","INDONESIA" -"2090418176","2090434559","IN","IND","INDIA" -"2090434560","2090467327","KR","KOR","REPUBLIC OF KOREA" -"2090467328","2090565631","JP","JPN","JAPAN" -"2090565632","2090582015","TW","TWN","TAIWAN" -"2090582016","2090590207","SG","SGP","SINGAPORE" -"2090590208","2090594303","NZ","NZL","NEW ZEALAND" -"2090594304","2090598399","AU","AUS","AUSTRALIA" -"2090598400","2090663935","CN","CHN","CHINA" -"2090663936","2090680319","AU","AUS","AUSTRALIA" -"2090680320","2090696703","NZ","NZL","NEW ZEALAND" -"2090696704","2090729471","TH","THA","THAILAND" -"2090729472","2090733567","VN","VNM","VIET NAM" -"2090733568","2090736639","AU","AUS","AUSTRALIA" -"2090736640","2090737663","IN","IND","INDIA" -"2090737664","2090745855","PH","PHL","PHILIPPINES" -"2090745856","2090762239","MN","MNG","MONGOLIA" -"2090762240","2090778623","ID","IDN","INDONESIA" -"2090778624","2090786815","HK","HKG","HONG KONG" -"2090786816","2090795007","MY","MYS","MALAYSIA" -"2090795008","2090860543","JP","JPN","JAPAN" -"2090860544","2091384831","CN","CHN","CHINA" -"2091384832","2091646975","AU","AUS","AUSTRALIA" -"2091646976","2091909119","CN","CHN","CHINA" -"2091909120","2092957695","AU","AUS","AUSTRALIA" -"2092957696","2093088767","CN","CHN","CHINA" -"2093088768","2093154303","KR","KOR","REPUBLIC OF KOREA" -"2093154304","2093187071","ID","IDN","INDONESIA" -"2093187072","2093191167","MY","MYS","MALAYSIA" -"2093191168","2093195263","JP","JPN","JAPAN" -"2093195264","2093203455","KR","KOR","REPUBLIC OF KOREA" -"2093203456","2093211647","MV","MDV","MALDIVES" -"2093211648","2093219839","KR","KOR","REPUBLIC OF KOREA" -"2093219840","2093285375","CN","CHN","CHINA" -"2093285376","2093301759","NZ","NZL","NEW ZEALAND" -"2093301760","2093318143","SG","SGP","SINGAPORE" -"2093318144","2093342719","KR","KOR","REPUBLIC OF KOREA" -"2093342720","2093350911","MY","MYS","MALAYSIA" -"2093350912","2093383679","KR","KOR","REPUBLIC OF KOREA" -"2093383680","2093400063","NZ","NZL","NEW ZEALAND" -"2093400064","2093416447","AU","AUS","AUSTRALIA" -"2093416448","2093432831","KR","KOR","REPUBLIC OF KOREA" -"2093432832","2093445119","TW","TWN","TAIWAN" -"2093445120","2093449215","AU","AUS","AUSTRALIA" -"2093449216","2093481983","KR","KOR","REPUBLIC OF KOREA" -"2093481984","2094006271","CN","CHN","CHINA" -"2094006272","2094530559","JP","JPN","JAPAN" -"2094530560","2094596095","KR","KOR","REPUBLIC OF KOREA" -"2094596096","2094628863","PH","PHL","PHILIPPINES" -"2094628864","2094645247","HK","HKG","HONG KONG" -"2094645248","2094653439","KR","KOR","REPUBLIC OF KOREA" -"2094653440","2094661631","MY","MYS","MALAYSIA" -"2094661632","2094759935","TW","TWN","TAIWAN" -"2094759936","2094792703","JP","JPN","JAPAN" -"2094792704","2096152575","CN","CHN","CHINA" -"2096152576","2096160767","PG","PNG","PAPUA NEW GUINEA" -"2096160768","2096168959","AU","AUS","AUSTRALIA" -"2096168960","2096234495","JP","JPN","JAPAN" -"2096234496","2096300031","CN","CHN","CHINA" -"2096300032","2096332799","KR","KOR","REPUBLIC OF KOREA" -"2096332800","2096349183","AU","AUS","AUSTRALIA" -"2096349184","2096365567","CN","CHN","CHINA" -"2096365568","2096431103","HK","HKG","HONG KONG" -"2096431104","2096496639","JP","JPN","JAPAN" -"2096496640","2096513023","AU","AUS","AUSTRALIA" -"2096513024","2096529407","SG","SGP","SINGAPORE" -"2096529408","2096611327","JP","JPN","JAPAN" -"2096611328","2096627711","IN","IND","INDIA" -"2096627712","2096660479","CN","CHN","CHINA" -"2096660480","2096664575","NZ","NZL","NEW ZEALAND" -"2096664576","2096668671","AU","AUS","AUSTRALIA" -"2096668672","2096676863","KH","KHM","CAMBODIA" -"2096676864","2096693247","HK","HKG","HONG KONG" -"2096693248","2096889855","CN","CHN","CHINA" -"2096889856","2096955391","AU","AUS","AUSTRALIA" -"2096955392","2097020927","IN","IND","INDIA" -"2097020928","2097037311","CN","CHN","CHINA" -"2097037312","2097053695","AU","AUS","AUSTRALIA" -"2097053696","2097086463","KR","KOR","REPUBLIC OF KOREA" -"2097086464","2097479679","JP","JPN","JAPAN" -"2097479680","2097504791","PH","PHL","PHILIPPINES" -"2097504792","2097504799","US","USA","UNITED STATES" -"2097504800","2097510687","PH","PHL","PHILIPPINES" -"2097510688","2097510695","HK","HKG","HONG KONG" -"2097510696","2097545215","PH","PHL","PHILIPPINES" -"2097545216","2097610751","JP","JPN","JAPAN" -"2097610752","2097643519","AU","AUS","AUSTRALIA" -"2097643520","2097676287","KR","KOR","REPUBLIC OF KOREA" -"2097676288","2098200575","JP","JPN","JAPAN" -"2098200576","2098724863","IN","IND","INDIA" -"2098724864","2098987007","TH","THA","THAILAND" -"2098987008","2099183615","JP","JPN","JAPAN" -"2099183616","2099199999","MO","MAC","MACAO" -"2099200000","2099216383","JP","JPN","JAPAN" -"2099216384","2099232767","KR","KOR","REPUBLIC OF KOREA" -"2099232768","2100297727","CN","CHN","CHINA" -"2100297728","2100854783","JP","JPN","JAPAN" -"2100854784","2100887551","US","USA","UNITED STATES" -"2100887552","2100953087","KR","KOR","REPUBLIC OF KOREA" -"2100953088","2100969471","AU","AUS","AUSTRALIA" -"2100969472","2100985855","JP","JPN","JAPAN" -"2100985856","2101018623","CN","CHN","CHINA" -"2101018624","2101084159","HK","HKG","HONG KONG" -"2101084160","2101116927","KR","KOR","REPUBLIC OF KOREA" -"2101116928","2101149695","PH","PHL","PHILIPPINES" -"2101149696","2101182463","KR","KOR","REPUBLIC OF KOREA" -"2101182464","2101231615","CN","CHN","CHINA" -"2101231616","2101239807","AU","AUS","AUSTRALIA" -"2101239808","2101270527","IN","IND","INDIA" -"2101270528","2101272575","AU","AUS","AUSTRALIA" -"2101272576","2101276671","TW","TWN","TAIWAN" -"2101276672","2101280767","JP","JPN","JAPAN" -"2101280768","2101288959","AU","AUS","AUSTRALIA" -"2101288960","2101293055","JP","JPN","JAPAN" -"2101293056","2101297151","AU","AUS","AUSTRALIA" -"2101297152","2101313535","IN","IND","INDIA" -"2101313536","2101346303","AU","AUS","AUSTRALIA" -"2101346304","2103640063","CN","CHN","CHINA" -"2103640064","2103705599","IN","IND","INDIA" -"2103705600","2103967743","JP","JPN","JAPAN" -"2103967744","2105540607","CN","CHN","CHINA" -"2105540608","2107637759","KR","KOR","REPUBLIC OF KOREA" -"2107637760","2108162047","ID","IDN","INDONESIA" -"2108162048","2108227583","AU","AUS","AUSTRALIA" -"2108227584","2108293119","CN","CHN","CHINA" -"2108293120","2108358655","JP","JPN","JAPAN" -"2108358656","2108424191","CN","CHN","CHINA" -"2108424192","2108686335","JP","JPN","JAPAN" -"2108686336","2109734911","KR","KOR","REPUBLIC OF KOREA" -"2109734912","2110783487","JP","JPN","JAPAN" -"2110783488","2110799871","CN","CHN","CHINA" -"2110799872","2110816255","KR","KOR","REPUBLIC OF KOREA" -"2110816256","2110832639","ID","IDN","INDONESIA" -"2110832640","2110865407","KR","KOR","REPUBLIC OF KOREA" -"2110865408","2110881791","PK","PAK","PAKISTAN" -"2110881792","2110914559","AU","AUS","AUSTRALIA" -"2110914560","2111045631","CN","CHN","CHINA" -"2111045632","2111078399","PH","PHL","PHILIPPINES" -"2111078400","2111111167","VN","VNM","VIET NAM" -"2111111168","2111143935","CN","CHN","CHINA" -"2111143936","2111152127","ID","IDN","INDONESIA" -"2111152128","2111160319","AU","AUS","AUSTRALIA" -"2111160320","2111168511","AF","AFG","AFGHANISTAN" -"2111168512","2111176703","TH","THA","THAILAND" -"2111176704","2111187815","VN","VNM","VIET NAM" -"2111187816","2111187823","KH","KHM","CAMBODIA" -"2111187824","2111193087","VN","VNM","VIET NAM" -"2111193088","2111201279","AU","AUS","AUSTRALIA" -"2111201280","2111209471","CN","CHN","CHINA" -"2111209472","2111217663","JP","JPN","JAPAN" -"2111217664","2111225855","LK","LKA","SRI LANKA" -"2111225856","2111242239","HK","HKG","HONG KONG" -"2111242240","2111258623","CN","CHN","CHINA" -"2111258624","2111275007","JP","JPN","JAPAN" -"2111275008","2111307775","HK","HKG","HONG KONG" -"2111307776","2111832063","CN","CHN","CHINA" -"2111832064","2112487423","TW","TWN","TAIWAN" -"2112487424","2112618495","VN","VNM","VIET NAM" -"2112618496","2112880639","NZ","NZL","NEW ZEALAND" -"2112880640","2113683455","KR","KOR","REPUBLIC OF KOREA" -"2113683456","2113683487","PH","PHL","PHILIPPINES" -"2113683488","2113683519","TW","TWN","TAIWAN" -"2113683520","2113683599","PH","PHL","PHILIPPINES" -"2113683600","2113683647","TW","TWN","TAIWAN" -"2113683648","2113683679","PH","PHL","PHILIPPINES" -"2113683680","2113683775","TW","TWN","TAIWAN" -"2113683776","2113683839","PH","PHL","PHILIPPINES" -"2113683840","2113683967","AU","AUS","AUSTRALIA" -"2113683968","2113683999","PH","PHL","PHILIPPINES" -"2113684000","2113684031","AU","AUS","AUSTRALIA" -"2113684032","2113684059","PH","PHL","PHILIPPINES" -"2113684060","2113684095","AU","AUS","AUSTRALIA" -"2113684096","2113684127","TW","TWN","TAIWAN" -"2113684128","2113684183","AU","AUS","AUSTRALIA" -"2113684184","2113684223","PH","PHL","PHILIPPINES" -"2113684224","2113684239","TW","TWN","TAIWAN" -"2113684240","2113684255","PH","PHL","PHILIPPINES" -"2113684256","2113684271","TW","TWN","TAIWAN" -"2113684272","2113684279","AU","AUS","AUSTRALIA" -"2113684280","2113684431","PH","PHL","PHILIPPINES" -"2113684432","2113684439","TW","TWN","TAIWAN" -"2113684440","2113684447","AU","AUS","AUSTRALIA" -"2113684448","2113684511","TW","TWN","TAIWAN" -"2113684512","2113684527","AU","AUS","AUSTRALIA" -"2113684528","2113684543","PH","PHL","PHILIPPINES" -"2113684544","2113684671","AU","AUS","AUSTRALIA" -"2113684672","2113684735","PH","PHL","PHILIPPINES" -"2113684736","2113684991","TW","TWN","TAIWAN" -"2113684992","2113685007","PH","PHL","PHILIPPINES" -"2113685008","2113685023","AU","AUS","AUSTRALIA" -"2113685024","2113685047","PH","PHL","PHILIPPINES" -"2113685048","2113685055","AU","AUS","AUSTRALIA" -"2113685056","2113685231","PH","PHL","PHILIPPINES" -"2113685232","2113685247","TW","TWN","TAIWAN" -"2113685248","2113685375","AU","AUS","AUSTRALIA" -"2113685376","2113685503","PH","PHL","PHILIPPINES" -"2113685504","2113686015","AU","AUS","AUSTRALIA" -"2113686016","2113686079","PH","PHL","PHILIPPINES" -"2113686080","2113686207","TW","TWN","TAIWAN" -"2113686208","2113686271","AU","AUS","AUSTRALIA" -"2113686272","2113686303","PH","PHL","PHILIPPINES" -"2113686304","2113686311","AU","AUS","AUSTRALIA" -"2113686312","2113686319","PH","PHL","PHILIPPINES" -"2113686320","2113686335","AU","AUS","AUSTRALIA" -"2113686336","2113686399","TW","TWN","TAIWAN" -"2113686400","2113686527","AU","AUS","AUSTRALIA" -"2113686528","2113687039","TW","TWN","TAIWAN" -"2113687040","2113688063","AU","AUS","AUSTRALIA" -"2113688064","2113688319","TW","TWN","TAIWAN" -"2113688320","2113688575","MY","MYS","MALAYSIA" -"2113688576","2113688831","AU","AUS","AUSTRALIA" -"2113688832","2113689087","PH","PHL","PHILIPPINES" -"2113689088","2113689343","JP","JPN","JAPAN" -"2113689344","2113689599","HK","HKG","HONG KONG" -"2113689600","2113689791","AU","AUS","AUSTRALIA" -"2113689792","2113689983","JP","JPN","JAPAN" -"2113689984","2113692287","AU","AUS","AUSTRALIA" -"2113692288","2113692415","PH","PHL","PHILIPPINES" -"2113692416","2113693183","AU","AUS","AUSTRALIA" -"2113693184","2113693343","HK","HKG","HONG KONG" -"2113693344","2113693359","AU","AUS","AUSTRALIA" -"2113693360","2113693375","HK","HKG","HONG KONG" -"2113693376","2113693439","AU","AUS","AUSTRALIA" -"2113693440","2113693503","HK","HKG","HONG KONG" -"2113693504","2113693535","AU","AUS","AUSTRALIA" -"2113693536","2113693599","HK","HKG","HONG KONG" -"2113693600","2113693631","AU","AUS","AUSTRALIA" -"2113693632","2113693663","HK","HKG","HONG KONG" -"2113693664","2113693695","AU","AUS","AUSTRALIA" -"2113693696","2113693951","HK","HKG","HONG KONG" -"2113693952","2113694463","AU","AUS","AUSTRALIA" -"2113694464","2113694719","HK","HKG","HONG KONG" -"2113694720","2113699839","AU","AUS","AUSTRALIA" -"2113699840","2113716223","JP","JPN","JAPAN" -"2113716224","2113724927","AU","AUS","AUSTRALIA" -"2113724928","2113725183","IN","IND","INDIA" -"2113725184","2113728511","AU","AUS","AUSTRALIA" -"2113728512","2113732607","JP","JPN","JAPAN" -"2113732608","2113765375","AU","AUS","AUSTRALIA" -"2113765376","2113798143","HK","HKG","HONG KONG" -"2113798144","2113830911","AU","AUS","AUSTRALIA" -"2113830912","2113863679","CN","CHN","CHINA" -"2113863680","2113929215","AU","AUS","AUSTRALIA" -"2113929216","2130706431","JP","JPN","JAPAN" -"2147549184","2147942399","US","USA","UNITED STATES" -"2147942400","2148007935","DE","DEU","GERMANY" -"2148007936","2148532223","US","USA","UNITED STATES" -"2148532224","2148597759","GB","GBR","UNITED KINGDOM" -"2148597760","2150039551","US","USA","UNITED STATES" -"2150039552","2150105087","NO","NOR","NORWAY" -"2150105088","2150236159","GB","GBR","UNITED KINGDOM" -"2150236160","2150301695","US","USA","UNITED STATES" -"2150301696","2150367231","CA","CAN","CANADA" -"2150367232","2150432767","US","USA","UNITED STATES" -"2150498304","2151743487","US","USA","UNITED STATES" -"2152726528","2153119743","US","USA","UNITED STATES" -"2153119744","2153250815","GB","GBR","UNITED KINGDOM" -"2153250816","2153578495","US","USA","UNITED STATES" -"2153578496","2153644031","FR","FRA","FRANCE" -"2153644032","2153906175","US","USA","UNITED STATES" -"2153906176","2153971711","GB","GBR","UNITED KINGDOM" -"2153971712","2154037247","US","USA","UNITED STATES" -"2154037248","2154102783","CA","CAN","CANADA" -"2154102784","2155610111","US","USA","UNITED STATES" -"2155675648","2155806719","US","USA","UNITED STATES" -"2155872256","2156003327","US","USA","UNITED STATES" -"2156003328","2156134399","AT","AUT","AUSTRIA" -"2156134400","2156265471","US","USA","UNITED STATES" -"2156265472","2156331007","KR","KOR","REPUBLIC OF KOREA" -"2156331008","2156593151","US","USA","UNITED STATES" -"2156593152","2156658687","IL","ISR","ISRAEL" -"2156724224","2156855295","CH","CHE","SWITZERLAND" -"2156855296","2156920831","US","USA","UNITED STATES" -"2156920832","2156986367","CA","CAN","CANADA" -"2156986368","2159017983","US","USA","UNITED STATES" -"2159017984","2159083519","DE","DEU","GERMANY" -"2159083520","2159149055","US","USA","UNITED STATES" -"2159149056","2159280127","CH","CHE","SWITZERLAND" -"2159280128","2159542271","US","USA","UNITED STATES" -"2159542272","2159607807","AU","AUS","AUSTRALIA" -"2159607808","2159869951","US","USA","UNITED STATES" -"2159869952","2159935487","CA","CAN","CANADA" -"2159935488","2160525311","US","USA","UNITED STATES" -"2160525312","2160590847","GB","GBR","UNITED KINGDOM" -"2160590848","2160656383","US","USA","UNITED STATES" -"2160656384","2160721919","FR","FRA","FRANCE" -"2160721920","2160852991","US","USA","UNITED STATES" -"2160918528","2161508351","US","USA","UNITED STATES" -"2161508352","2161573887","FI","FIN","FINLAND" -"2161573888","2162687999","US","USA","UNITED STATES" -"2162688000","2162753535","GB","GBR","UNITED KINGDOM" -"2162753536","2162819071","CA","CAN","CANADA" -"2162884608","2163212287","US","USA","UNITED STATES" -"2163212288","2163277823","GB","GBR","UNITED KINGDOM" -"2163277824","2163408895","US","USA","UNITED STATES" -"2163408896","2163474431","GB","GBR","UNITED KINGDOM" -"2163474432","2163605503","US","USA","UNITED STATES" -"2163605504","2163671039","CH","CHE","SWITZERLAND" -"2163671040","2163867647","US","USA","UNITED STATES" -"2163867648","2163933183","AU","AUS","AUSTRALIA" -"2163933184","2164260863","US","USA","UNITED STATES" -"2164326400","2164981759","US","USA","UNITED STATES" -"2164981760","2165112831","GB","GBR","UNITED KINGDOM" -"2165112832","2165178367","DE","DEU","GERMANY" -"2165178368","2165309439","US","USA","UNITED STATES" -"2165309440","2165374975","SE","SWE","SWEDEN" -"2165374976","2165440511","US","USA","UNITED STATES" -"2165506048","2165571583","US","USA","UNITED STATES" -"2165571584","2165637119","FR","FRA","FRANCE" -"2165637120","2165964799","US","USA","UNITED STATES" -"2165964800","2166030335","DE","DEU","GERMANY" -"2166030336","2166095871","AT","AUT","AUSTRIA" -"2166095872","2166292479","US","USA","UNITED STATES" -"2166292480","2166358015","GB","GBR","UNITED KINGDOM" -"2166358016","2166571007","US","USA","UNITED STATES" -"2166571008","2166575103","GB","GBR","UNITED KINGDOM" -"2166575104","2167209983","US","USA","UNITED STATES" -"2167275520","2167930879","US","USA","UNITED STATES" -"2167996416","2168193023","US","USA","UNITED STATES" -"2168193024","2168258559","JP","JPN","JAPAN" -"2168258560","2168651775","US","USA","UNITED STATES" -"2168651776","2168717311","GB","GBR","UNITED KINGDOM" -"2168717312","2168782847","US","USA","UNITED STATES" -"2168782848","2168913919","DE","DEU","GERMANY" -"2168913920","2169044991","US","USA","UNITED STATES" -"2169044992","2169110527","CR","CRI","COSTA RICA" -"2169110528","2169372671","US","USA","UNITED STATES" -"2169372672","2169438207","AU","AUS","AUSTRALIA" -"2169438208","2170028031","US","USA","UNITED STATES" -"2170028032","2170093567","FR","FRA","FRANCE" -"2170093568","2170159103","US","USA","UNITED STATES" -"2170159104","2170224639","VE","VEN","VENEZUELA" -"2170224640","2170421247","US","USA","UNITED STATES" -"2170421248","2170486783","AU","AUS","AUSTRALIA" -"2170486784","2170552319","US","USA","UNITED STATES" -"2170552320","2170617855","AU","AUS","AUSTRALIA" -"2170617856","2170683391","CA","CAN","CANADA" -"2170683392","2170814463","US","USA","UNITED STATES" -"2170814464","2170879999","CA","CAN","CANADA" -"2170880000","2170945535","US","USA","UNITED STATES" -"2170945536","2171011071","FR","FRA","FRANCE" -"2171011072","2171076607","DE","DEU","GERMANY" -"2171076608","2171142143","FR","FRA","FRANCE" -"2171142144","2172256255","US","USA","UNITED STATES" -"2172321792","2172452863","US","USA","UNITED STATES" -"2172452864","2172518399","NL","NLD","NETHERLANDS" -"2172518400","2172583935","US","USA","UNITED STATES" -"2172583936","2172649471","AU","AUS","AUSTRALIA" -"2172649472","2172715007","CA","CAN","CANADA" -"2172715008","2172780543","CH","CHE","SWITZERLAND" -"2172780544","2172911615","US","USA","UNITED STATES" -"2172911616","2172977151","CH","CHE","SWITZERLAND" -"2172977152","2173173759","US","USA","UNITED STATES" -"2173173760","2173239295","JP","JPN","JAPAN" -"2173239296","2173435903","US","USA","UNITED STATES" -"2173501440","2173566975","US","USA","UNITED STATES" -"2173566976","2173632511","DK","DNK","DENMARK" -"2173632512","2173698047","DE","DEU","GERMANY" -"2173698048","2175336447","US","USA","UNITED STATES" -"2175336448","2175401983","GB","GBR","UNITED KINGDOM" -"2175401984","2175598591","US","USA","UNITED STATES" -"2175598592","2175664127","CA","CAN","CANADA" -"2175664128","2175729663","US","USA","UNITED STATES" -"2175729664","2175795199","FR","FRA","FRANCE" -"2175795200","2175860735","US","USA","UNITED STATES" -"2175860736","2175926271","NO","NOR","NORWAY" -"2175926272","2175991807","SE","SWE","SWEDEN" -"2175991808","2176057343","US","USA","UNITED STATES" -"2176057344","2176122879","AU","AUS","AUSTRALIA" -"2176122880","2176450559","FR","FRA","FRANCE" -"2176450560","2176516095","US","USA","UNITED STATES" -"2176516096","2176581631","DE","DEU","GERMANY" -"2176581632","2176974847","US","USA","UNITED STATES" -"2176974848","2177105919","CH","CHE","SWITZERLAND" -"2177105920","2177302527","US","USA","UNITED STATES" -"2177302528","2177368063","FR","FRA","FRANCE" -"2177368064","2177695743","US","USA","UNITED STATES" -"2177761280","2177826815","DE","DEU","GERMANY" -"2177826816","2177892351","US","USA","UNITED STATES" -"2177892352","2177957887","GB","GBR","UNITED KINGDOM" -"2177957888","2178285567","US","USA","UNITED STATES" -"2178285568","2178351103","AR","ARG","ARGENTINA" -"2178351104","2178416639","GB","GBR","UNITED KINGDOM" -"2178416640","2178482175","US","USA","UNITED STATES" -"2178482176","2178547711","DE","DEU","GERMANY" -"2178547712","2179465215","US","USA","UNITED STATES" -"2179530752","2179596287","DE","DEU","GERMANY" -"2179596288","2179661823","GB","GBR","UNITED KINGDOM" -"2179661824","2179989503","US","USA","UNITED STATES" -"2179989504","2180186111","NO","NOR","NORWAY" -"2180186112","2180448255","US","USA","UNITED STATES" -"2180448256","2180513791","DE","DEU","GERMANY" -"2180513792","2180579327","US","USA","UNITED STATES" -"2180579328","2180644863","JP","JPN","JAPAN" -"2180644864","2180907007","US","USA","UNITED STATES" -"2180907008","2180972543","KR","KOR","REPUBLIC OF KOREA" -"2180972544","2181038079","US","USA","UNITED STATES" -"2181103616","2181824511","US","USA","UNITED STATES" -"2181824512","2181890047","CA","CAN","CANADA" -"2181890048","2182021119","US","USA","UNITED STATES" -"2182021120","2182086655","CA","CAN","CANADA" -"2182086656","2182610943","US","USA","UNITED STATES" -"2182610944","2182676479","GB","GBR","UNITED KINGDOM" -"2182742016","2182873087","US","USA","UNITED STATES" -"2182873088","2182938623","SE","SWE","SWEDEN" -"2182938624","2183135231","US","USA","UNITED STATES" -"2183135232","2183200767","GB","GBR","UNITED KINGDOM" -"2183200768","2183266303","US","USA","UNITED STATES" -"2183266304","2183331839","JP","JPN","JAPAN" -"2183331840","2183462911","US","USA","UNITED STATES" -"2183462912","2183528447","NL","NLD","NETHERLANDS" -"2183528448","2183856127","US","USA","UNITED STATES" -"2183921664","2184577023","US","USA","UNITED STATES" -"2184577024","2184642559","JP","JPN","JAPAN" -"2184642560","2184708095","US","USA","UNITED STATES" -"2184708096","2184773631","AU","AUS","AUSTRALIA" -"2184773632","2184904703","US","USA","UNITED STATES" -"2184904704","2185035775","CH","CHE","SWITZERLAND" -"2185035776","2185166847","US","USA","UNITED STATES" -"2185166848","2185232383","CA","CAN","CANADA" -"2185232384","2185363455","US","USA","UNITED STATES" -"2185363456","2185428991","FR","FRA","FRANCE" -"2185428992","2185494527","NO","NOR","NORWAY" -"2185494528","2185560063","US","USA","UNITED STATES" -"2185560064","2185625599","JP","JPN","JAPAN" -"2185625600","2185822207","US","USA","UNITED STATES" -"2185822208","2185887743","DE","DEU","GERMANY" -"2185887744","2185953279","US","USA","UNITED STATES" -"2185953280","2186018815","DE","DEU","GERMANY" -"2186018816","2186149887","US","USA","UNITED STATES" -"2186149888","2186215423","NL","NLD","NETHERLANDS" -"2186215424","2186280959","FR","FRA","FRANCE" -"2186280960","2186412031","US","USA","UNITED STATES" -"2186412032","2186477567","CH","CHE","SWITZERLAND" -"2186477568","2186543103","DE","DEU","GERMANY" -"2186543104","2186608639","FR","FRA","FRANCE" -"2186608640","2186739711","US","USA","UNITED STATES" -"2186739712","2186805247","JP","JPN","JAPAN" -"2186805248","2186870783","GB","GBR","UNITED KINGDOM" -"2186870784","2186936319","NL","NLD","NETHERLANDS" -"2186936320","2187067391","US","USA","UNITED STATES" -"2187067392","2187132927","CH","CHE","SWITZERLAND" -"2187132928","2187263999","US","USA","UNITED STATES" -"2187264000","2187329535","AU","AUS","AUSTRALIA" -"2187329536","2187460607","US","USA","UNITED STATES" -"2187460608","2187526143","FR","FRA","FRANCE" -"2187526144","2187591679","US","USA","UNITED STATES" -"2187591680","2187657215","SE","SWE","SWEDEN" -"2187657216","2187722751","US","USA","UNITED STATES" -"2187722752","2187788287","AU","AUS","AUSTRALIA" -"2187788288","2187853823","US","USA","UNITED STATES" -"2187853824","2187919359","BE","BEL","BELGIUM" -"2187919360","2188378111","US","USA","UNITED STATES" -"2188378112","2188443647","NL","NLD","NETHERLANDS" -"2188443648","2188509183","CA","CAN","CANADA" -"2188509184","2188574719","US","USA","UNITED STATES" -"2188574720","2188640255","NL","NLD","NETHERLANDS" -"2188640256","2188705791","AU","AUS","AUSTRALIA" -"2188705792","2188902399","US","USA","UNITED STATES" -"2188902400","2188967935","FR","FRA","FRANCE" -"2188967936","2189099007","US","USA","UNITED STATES" -"2189099008","2189164543","NZ","NZL","NEW ZEALAND" -"2189164544","2189230079","US","USA","UNITED STATES" -"2189230080","2189295615","CH","CHE","SWITZERLAND" -"2189295616","2189557759","US","USA","UNITED STATES" -"2189557760","2189623295","AU","AUS","AUSTRALIA" -"2189623296","2189754367","US","USA","UNITED STATES" -"2189754368","2189819903","DE","DEU","GERMANY" -"2189819904","2189950975","US","USA","UNITED STATES" -"2189950976","2190016511","IT","ITA","ITALY" -"2190016512","2190082047","US","USA","UNITED STATES" -"2190082048","2190737407","NL","NLD","NETHERLANDS" -"2190737408","2190802943","GB","GBR","UNITED KINGDOM" -"2190802944","2190868479","DE","DEU","GERMANY" -"2190868480","2191065087","US","USA","UNITED STATES" -"2191065088","2191130623","JP","JPN","JAPAN" -"2191130624","2191196159","US","USA","UNITED STATES" -"2191196160","2191261695","AU","AUS","AUSTRALIA" -"2191261696","2191392767","US","USA","UNITED STATES" -"2191392768","2191458303","JP","JPN","JAPAN" -"2191458304","2191523839","GB","GBR","UNITED KINGDOM" -"2191523840","2191589375","US","USA","UNITED STATES" -"2191589376","2191654911","NL","NLD","NETHERLANDS" -"2191654912","2192769023","US","USA","UNITED STATES" -"2192769024","2192834559","CA","CAN","CANADA" -"2192900096","2193031167","US","USA","UNITED STATES" -"2193031168","2193096703","DE","DEU","GERMANY" -"2193096704","2193162239","US","USA","UNITED STATES" -"2193227776","2193293311","IT","ITA","ITALY" -"2193293312","2193358847","US","USA","UNITED STATES" -"2193358848","2193424383","FI","FIN","FINLAND" -"2193424384","2193489919","US","USA","UNITED STATES" -"2193489920","2193555455","FR","FRA","FRANCE" -"2193555456","2193620991","US","USA","UNITED STATES" -"2193620992","2193686527","IT","ITA","ITALY" -"2193752064","2193817599","AU","AUS","AUSTRALIA" -"2193817600","2193883135","NZ","NZL","NEW ZEALAND" -"2193883136","2194014207","US","USA","UNITED STATES" -"2194014208","2194079743","CH","CHE","SWITZERLAND" -"2194079744","2194407423","US","USA","UNITED STATES" -"2194472960","2194538495","US","USA","UNITED STATES" -"2194538496","2194604031","ES","ESP","SPAIN" -"2194604032","2194669567","US","USA","UNITED STATES" -"2194669568","2194735103","IS","ISL","ICELAND" -"2194735104","2194800639","GB","GBR","UNITED KINGDOM" -"2194800640","2195193855","US","USA","UNITED STATES" -"2195193856","2195324927","NZ","NZL","NEW ZEALAND" -"2195324928","2195455999","US","USA","UNITED STATES" -"2195456000","2195521535","AU","AUS","AUSTRALIA" -"2195521536","2195652607","US","USA","UNITED STATES" -"2195652608","2195718143","CH","CHE","SWITZERLAND" -"2195718144","2195783679","US","USA","UNITED STATES" -"2195783680","2196045823","DK","DNK","DENMARK" -"2196045824","2196111359","SE","SWE","SWEDEN" -"2196111360","2196439039","FI","FIN","FINLAND" -"2196439040","2197094399","SE","SWE","SWEDEN" -"2197094400","2197159935","US","USA","UNITED STATES" -"2197159936","2197225471","GB","GBR","UNITED KINGDOM" -"2197225472","2197422079","US","USA","UNITED STATES" -"2197422080","2197487615","CA","CAN","CANADA" -"2197487616","2197553151","IT","ITA","ITALY" -"2197553152","2197749759","US","USA","UNITED STATES" -"2197880832","2197946367","IT","ITA","ITALY" -"2197946368","2202533887","US","USA","UNITED STATES" -"2202599424","2204172287","US","USA","UNITED STATES" -"2204172288","2204237823","SE","SWE","SWEDEN" -"2204237824","2204303359","US","USA","UNITED STATES" -"2204303360","2204368895","DE","DEU","GERMANY" -"2204434432","2204499967","US","USA","UNITED STATES" -"2204499968","2204565503","CH","CHE","SWITZERLAND" -"2204565504","2204631039","US","USA","UNITED STATES" -"2204631040","2204696575","CA","CAN","CANADA" -"2204696576","2204893183","US","USA","UNITED STATES" -"2204958720","2205089791","US","USA","UNITED STATES" -"2205089792","2205155327","GB","GBR","UNITED KINGDOM" -"2205155328","2205286399","JP","JPN","JAPAN" -"2205286400","2205351935","IT","ITA","ITALY" -"2205351936","2205483007","SE","SWE","SWEDEN" -"2205483008","2205515775","CH","CHE","SWITZERLAND" -"2205548544","2206269439","US","USA","UNITED STATES" -"2206269440","2206334975","CA","CAN","CANADA" -"2206334976","2206400511","AT","AUT","AUSTRIA" -"2206400512","2206466047","US","USA","UNITED STATES" -"2206466048","2207121407","CA","CAN","CANADA" -"2207121408","2207449087","US","USA","UNITED STATES" -"2207449088","2207711231","CA","CAN","CANADA" -"2207711232","2207776767","US","USA","UNITED STATES" -"2207776768","2207842303","CH","CHE","SWITZERLAND" -"2207842304","2207907839","US","USA","UNITED STATES" -"2207907840","2207973375","IT","ITA","ITALY" -"2207973376","2208038911","NL","NLD","NETHERLANDS" -"2208038912","2208235519","US","USA","UNITED STATES" -"2208235520","2208301055","DE","DEU","GERMANY" -"2208301056","2208366591","FI","FIN","FINLAND" -"2208432128","2208563199","CA","CAN","CANADA" -"2208563200","2208759807","DK","DNK","DENMARK" -"2208759808","2208890879","US","USA","UNITED STATES" -"2208890880","2208956415","DE","DEU","GERMANY" -"2208956416","2209021951","AU","AUS","AUSTRALIA" -"2209021952","2209087487","US","USA","UNITED STATES" -"2209087488","2209153023","AU","AUS","AUSTRALIA" -"2209153024","2209218559","DE","DEU","GERMANY" -"2209218560","2209284095","NL","NLD","NETHERLANDS" -"2209284096","2209349631","IT","ITA","ITALY" -"2209415168","2209480703","FI","FIN","FINLAND" -"2209480704","2209546239","MX","MEX","MEXICO" -"2209546240","2209611775","US","USA","UNITED STATES" -"2209611776","2209677311","NL","NLD","NETHERLANDS" -"2209677312","2209742847","AU","AUS","AUSTRALIA" -"2209742848","2209939455","US","USA","UNITED STATES" -"2209939456","2210004991","AU","AUS","AUSTRALIA" -"2210004992","2210136063","US","USA","UNITED STATES" -"2210136064","2210201599","DE","DEU","GERMANY" -"2210201600","2210594815","US","USA","UNITED STATES" -"2210594816","2210660351","CA","CAN","CANADA" -"2210660352","2210725887","FR","FRA","FRANCE" -"2210725888","2211053567","US","USA","UNITED STATES" -"2211053568","2211119103","CA","CAN","CANADA" -"2211119104","2211184639","NZ","NZL","NEW ZEALAND" -"2211184640","2211250175","US","USA","UNITED STATES" -"2211250176","2211315711","SE","SWE","SWEDEN" -"2211315712","2211381247","JP","JPN","JAPAN" -"2211381248","2211446783","FI","FIN","FINLAND" -"2211446784","2211643391","US","USA","UNITED STATES" -"2211643392","2211708927","NL","NLD","NETHERLANDS" -"2211708928","2211774463","US","USA","UNITED STATES" -"2211774464","2211839999","CA","CAN","CANADA" -"2211840000","2212036607","US","USA","UNITED STATES" -"2212036608","2212102143","AU","AUS","AUSTRALIA" -"2212102144","2212233215","US","USA","UNITED STATES" -"2212233216","2212298751","DE","DEU","GERMANY" -"2212364288","2212495359","US","USA","UNITED STATES" -"2212495360","2212560895","NL","NLD","NETHERLANDS" -"2212560896","2212691967","US","USA","UNITED STATES" -"2212691968","2212757503","GB","GBR","UNITED KINGDOM" -"2212757504","2212823039","FI","FIN","FINLAND" -"2212823040","2212954111","US","USA","UNITED STATES" -"2212954112","2213019647","GB","GBR","UNITED KINGDOM" -"2213019648","2213085183","CA","CAN","CANADA" -"2213085184","2213150719","US","USA","UNITED STATES" -"2213150720","2213216255","DE","DEU","GERMANY" -"2213216256","2213281791","CA","CAN","CANADA" -"2213281792","2213347327","AU","AUS","AUSTRALIA" -"2213347328","2213412863","NL","NLD","NETHERLANDS" -"2213412864","2213675007","US","USA","UNITED STATES" -"2213675008","2213740543","AU","AUS","AUSTRALIA" -"2213740544","2213806079","US","USA","UNITED STATES" -"2213806080","2213937151","AU","AUS","AUSTRALIA" -"2213937152","2214002687","DE","DEU","GERMANY" -"2214002688","2214068223","US","USA","UNITED STATES" -"2214068224","2214133759","JP","JPN","JAPAN" -"2214133760","2214264831","US","USA","UNITED STATES" -"2214264832","2214330367","GB","GBR","UNITED KINGDOM" -"2214330368","2214395903","US","USA","UNITED STATES" -"2214395904","2214461439","CA","CAN","CANADA" -"2214461440","2214526975","FR","FRA","FRANCE" -"2214592512","2218786815","US","USA","UNITED STATES" -"2218786816","2219769855","IL","ISR","ISRAEL" -"2219769856","2224160767","US","USA","UNITED STATES" -"2224160768","2224226303","GB","GBR","UNITED KINGDOM" -"2224226304","2224357375","US","USA","UNITED STATES" -"2224357376","2224422911","FR","FRA","FRANCE" -"2224422912","2224488447","NO","NOR","NORWAY" -"2224488448","2224619519","US","USA","UNITED STATES" -"2224619520","2224685055","GB","GBR","UNITED KINGDOM" -"2224685056","2224750591","US","USA","UNITED STATES" -"2224750592","2224816127","FI","FIN","FINLAND" -"2224816128","2224881663","CA","CAN","CANADA" -"2224947200","2225405951","US","USA","UNITED STATES" -"2225405952","2225733631","FR","FRA","FRANCE" -"2225733632","2225799167","US","USA","UNITED STATES" -"2225799168","2225864703","FI","FIN","FINLAND" -"2225864704","2226126847","US","USA","UNITED STATES" -"2226126848","2226192383","DE","DEU","GERMANY" -"2226192384","2226323455","US","USA","UNITED STATES" -"2226323456","2226388991","JP","JPN","JAPAN" -"2226388992","2226454527","DE","DEU","GERMANY" -"2226454528","2226520063","NZ","NZL","NEW ZEALAND" -"2226520064","2226585599","JP","JPN","JAPAN" -"2226585600","2226651135","US","USA","UNITED STATES" -"2226716672","2226782207","GB","GBR","UNITED KINGDOM" -"2226782208","2226847743","AE","ARE","UNITED ARAB EMIRATES" -"2226847744","2226913279","DE","DEU","GERMANY" -"2226913280","2227109887","US","USA","UNITED STATES" -"2227175424","2227372031","US","USA","UNITED STATES" -"2227372032","2227437567","DE","DEU","GERMANY" -"2227437568","2227503103","SE","SWE","SWEDEN" -"2227503104","2227634175","US","USA","UNITED STATES" -"2227634176","2227699711","DE","DEU","GERMANY" -"2227699712","2227830783","US","USA","UNITED STATES" -"2227830784","2229141503","CA","CAN","CANADA" -"2229141504","2229207039","JP","JPN","JAPAN" -"2229207040","2229338111","US","USA","UNITED STATES" -"2229338112","2229403647","CA","CAN","CANADA" -"2229403648","2229469183","US","USA","UNITED STATES" -"2229469184","2229534719","FR","FRA","FRANCE" -"2229534720","2229600255","US","USA","UNITED STATES" -"2229600256","2229665791","NL","NLD","NETHERLANDS" -"2229665792","2229796863","DE","DEU","GERMANY" -"2229796864","2229862399","GB","GBR","UNITED KINGDOM" -"2229862400","2229927935","US","USA","UNITED STATES" -"2229927936","2229993471","AU","AUS","AUSTRALIA" -"2229993472","2230583295","US","USA","UNITED STATES" -"2230583296","2230648831","GB","GBR","UNITED KINGDOM" -"2230648832","2230714367","US","USA","UNITED STATES" -"2230714368","2230779903","CA","CAN","CANADA" -"2230779904","2230910975","MX","MEX","MEXICO" -"2230910976","2231042047","US","USA","UNITED STATES" -"2231107584","2231173119","DE","DEU","GERMANY" -"2231173120","2231238655","US","USA","UNITED STATES" -"2231238656","2231304191","MX","MEX","MEXICO" -"2231369728","2248146943","JP","JPN","JAPAN" -"2248212480","2248343551","DE","DEU","GERMANY" -"2248409088","2248605695","US","USA","UNITED STATES" -"2248605696","2248671231","AU","AUS","AUSTRALIA" -"2248671232","2249261055","US","USA","UNITED STATES" -"2249326592","2249392127","AU","AUS","AUSTRALIA" -"2249457664","2249523199","US","USA","UNITED STATES" -"2249523200","2249588735","CH","CHE","SWITZERLAND" -"2249588736","2249654271","CA","CAN","CANADA" -"2249654272","2249785343","US","USA","UNITED STATES" -"2249785344","2249850879","SE","SWE","SWEDEN" -"2249850880","2249916415","US","USA","UNITED STATES" -"2249916416","2249981951","NL","NLD","NETHERLANDS" -"2249981952","2250047487","DE","DEU","GERMANY" -"2250047488","2250113023","US","USA","UNITED STATES" -"2250113024","2250178559","DE","DEU","GERMANY" -"2250178560","2250244095","CA","CAN","CANADA" -"2250244096","2250375167","US","USA","UNITED STATES" -"2250375168","2250440703","DE","DEU","GERMANY" -"2250440704","2250506239","US","USA","UNITED STATES" -"2250506240","2250571775","GB","GBR","UNITED KINGDOM" -"2250571776","2250637311","FI","FIN","FINLAND" -"2250637312","2251227135","US","USA","UNITED STATES" -"2251227136","2251292671","NO","NOR","NORWAY" -"2251292672","2251685887","US","USA","UNITED STATES" -"2251685888","2251751423","BE","BEL","BELGIUM" -"2251751424","2251948031","US","USA","UNITED STATES" -"2251948032","2252013567","BE","BEL","BELGIUM" -"2252013568","2252079103","FR","FRA","FRANCE" -"2252079104","2252210175","DE","DEU","GERMANY" -"2252210176","2253062143","US","USA","UNITED STATES" -"2253062144","2253127679","KR","KOR","REPUBLIC OF KOREA" -"2253127680","2253193215","DE","DEU","GERMANY" -"2253193216","2253455359","US","USA","UNITED STATES" -"2253455360","2253520895","DE","DEU","GERMANY" -"2253520896","2253586431","US","USA","UNITED STATES" -"2253586432","2253651967","GB","GBR","UNITED KINGDOM" -"2253651968","2253848575","US","USA","UNITED STATES" -"2253848576","2253914111","CA","CAN","CANADA" -"2253914112","2254045183","US","USA","UNITED STATES" -"2254110720","2255421439","DE","DEU","GERMANY" -"2255421440","2255683583","US","USA","UNITED STATES" -"2255683584","2255749119","AU","AUS","AUSTRALIA" -"2255749120","2255814655","US","USA","UNITED STATES" -"2255814656","2255880191","CA","CAN","CANADA" -"2255880192","2255945727","US","USA","UNITED STATES" -"2255945728","2256011263","NO","NOR","NORWAY" -"2256011264","2256666623","US","USA","UNITED STATES" -"2256666624","2256732159","DE","DEU","GERMANY" -"2256732160","2257190911","US","USA","UNITED STATES" -"2257190912","2257256447","SE","SWE","SWEDEN" -"2257256448","2257453055","US","USA","UNITED STATES" -"2257453056","2257518591","GB","GBR","UNITED KINGDOM" -"2257518592","2257584127","NL","NLD","NETHERLANDS" -"2257584128","2257649663","AU","AUS","AUSTRALIA" -"2257649664","2257780735","NL","NLD","NETHERLANDS" -"2257780736","2257846271","DE","DEU","GERMANY" -"2257846272","2257911807","AU","AUS","AUSTRALIA" -"2257911808","2257977343","US","USA","UNITED STATES" -"2257977344","2258042879","CA","CAN","CANADA" -"2258042880","2258108415","GB","GBR","UNITED KINGDOM" -"2258108416","2258173951","US","USA","UNITED STATES" -"2258173952","2258239487","CA","CAN","CANADA" -"2258239488","2258305023","US","USA","UNITED STATES" -"2258305024","2258370559","DE","DEU","GERMANY" -"2258370560","2258436095","US","USA","UNITED STATES" -"2258436096","2258567167","FR","FRA","FRANCE" -"2258567168","2258567679","US","USA","UNITED STATES" -"2258567680","2258567935","HK","HKG","HONG KONG" -"2258567936","2258568191","US","USA","UNITED STATES" -"2258568192","2258568447","HK","HKG","HONG KONG" -"2258568448","2258571647","US","USA","UNITED STATES" -"2258571648","2258571679","HK","HKG","HONG KONG" -"2258571680","2258582783","US","USA","UNITED STATES" -"2258582784","2258582791","GB","GBR","UNITED KINGDOM" -"2258582792","2258583551","US","USA","UNITED STATES" -"2258583552","2258591743","GB","GBR","UNITED KINGDOM" -"2258591744","2258591839","AU","AUS","AUSTRALIA" -"2258591840","2258591847","TW","TWN","TAIWAN" -"2258591848","2258591855","JP","JPN","JAPAN" -"2258591856","2258591935","TW","TWN","TAIWAN" -"2258591936","2258591967","HK","HKG","HONG KONG" -"2258591968","2258592255","AU","AUS","AUSTRALIA" -"2258592256","2258592383","JP","JPN","JAPAN" -"2258592384","2258592439","AU","AUS","AUSTRALIA" -"2258592440","2258592447","JP","JPN","JAPAN" -"2258592448","2258592479","IN","IND","INDIA" -"2258592480","2258593023","AU","AUS","AUSTRALIA" -"2258593024","2258593151","SG","SGP","SINGAPORE" -"2258593152","2258593279","AU","AUS","AUSTRALIA" -"2258593280","2258593535","HK","HKG","HONG KONG" -"2258593536","2258594047","AU","AUS","AUSTRALIA" -"2258594048","2258594831","HK","HKG","HONG KONG" -"2258594832","2258594839","JP","JPN","JAPAN" -"2258594840","2258594959","HK","HKG","HONG KONG" -"2258594960","2258594967","JP","JPN","JAPAN" -"2258594968","2258594975","HK","HKG","HONG KONG" -"2258594976","2258594991","JP","JPN","JAPAN" -"2258594992","2258595007","HK","HKG","HONG KONG" -"2258595008","2258595023","TW","TWN","TAIWAN" -"2258595024","2258595031","JP","JPN","JAPAN" -"2258595032","2258595071","HK","HKG","HONG KONG" -"2258595072","2258595135","AU","AUS","AUSTRALIA" -"2258595136","2258595151","SG","SGP","SINGAPORE" -"2258595152","2258595167","JP","JPN","JAPAN" -"2258595168","2258595199","AU","AUS","AUSTRALIA" -"2258595200","2258595215","JP","JPN","JAPAN" -"2258595216","2258595231","AU","AUS","AUSTRALIA" -"2258595232","2258595263","TW","TWN","TAIWAN" -"2258595264","2258595295","AU","AUS","AUSTRALIA" -"2258595296","2258595327","SG","SGP","SINGAPORE" -"2258595328","2258595335","KR","KOR","REPUBLIC OF KOREA" -"2258595336","2258595343","TW","TWN","TAIWAN" -"2258595344","2258595351","AU","AUS","AUSTRALIA" -"2258595352","2258595359","JP","JPN","JAPAN" -"2258595360","2258595383","AU","AUS","AUSTRALIA" -"2258595384","2258595391","KR","KOR","REPUBLIC OF KOREA" -"2258595392","2258595463","AU","AUS","AUSTRALIA" -"2258595464","2258595471","TW","TWN","TAIWAN" -"2258595472","2258595495","AU","AUS","AUSTRALIA" -"2258595496","2258595503","HK","HKG","HONG KONG" -"2258595504","2258595551","AU","AUS","AUSTRALIA" -"2258595552","2258595567","JP","JPN","JAPAN" -"2258595568","2258595583","AU","AUS","AUSTRALIA" -"2258595584","2258595591","TW","TWN","TAIWAN" -"2258595592","2258595603","AU","AUS","AUSTRALIA" -"2258595604","2258595607","JP","JPN","JAPAN" -"2258595608","2258595639","AU","AUS","AUSTRALIA" -"2258595640","2258595643","JP","JPN","JAPAN" -"2258595644","2258595655","AU","AUS","AUSTRALIA" -"2258595656","2258595663","IN","IND","INDIA" -"2258595664","2258595711","AU","AUS","AUSTRALIA" -"2258595712","2258595775","HK","HKG","HONG KONG" -"2258595776","2258596079","AU","AUS","AUSTRALIA" -"2258596080","2258596087","JP","JPN","JAPAN" -"2258596088","2258596095","AU","AUS","AUSTRALIA" -"2258596096","2258597071","HK","HKG","HONG KONG" -"2258597072","2258597087","TW","TWN","TAIWAN" -"2258597088","2258597631","HK","HKG","HONG KONG" -"2258597632","2258597895","AU","AUS","AUSTRALIA" -"2258597896","2258597903","NZ","NZL","NEW ZEALAND" -"2258597904","2258597927","AU","AUS","AUSTRALIA" -"2258597928","2258597935","JP","JPN","JAPAN" -"2258597936","2258597951","AU","AUS","AUSTRALIA" -"2258597952","2258597983","NZ","NZL","NEW ZEALAND" -"2258597984","2258597999","JP","JPN","JAPAN" -"2258598000","2258598079","AU","AUS","AUSTRALIA" -"2258598080","2258598111","TW","TWN","TAIWAN" -"2258598112","2258598143","AU","AUS","AUSTRALIA" -"2258598144","2258598239","KR","KOR","REPUBLIC OF KOREA" -"2258598240","2258598255","AU","AUS","AUSTRALIA" -"2258598256","2258598287","KR","KOR","REPUBLIC OF KOREA" -"2258598288","2258598319","NZ","NZL","NEW ZEALAND" -"2258598320","2258598335","JP","JPN","JAPAN" -"2258598336","2258598351","TW","TWN","TAIWAN" -"2258598352","2258598527","AU","AUS","AUSTRALIA" -"2258598528","2258598535","JP","JPN","JAPAN" -"2258598536","2258598551","AU","AUS","AUSTRALIA" -"2258598552","2258598567","JP","JPN","JAPAN" -"2258598568","2258598639","AU","AUS","AUSTRALIA" -"2258598640","2258598647","JP","JPN","JAPAN" -"2258598648","2258600799","AU","AUS","AUSTRALIA" -"2258600800","2258600831","KR","KOR","REPUBLIC OF KOREA" -"2258600832","2258600959","AU","AUS","AUSTRALIA" -"2258600960","2258601087","SG","SGP","SINGAPORE" -"2258601088","2258601167","AU","AUS","AUSTRALIA" -"2258601168","2258601175","NZ","NZL","NEW ZEALAND" -"2258601176","2258601199","AU","AUS","AUSTRALIA" -"2258601200","2258601207","JP","JPN","JAPAN" -"2258601208","2258601471","AU","AUS","AUSTRALIA" -"2258601472","2258601983","JP","JPN","JAPAN" -"2258601984","2258602239","AU","AUS","AUSTRALIA" -"2258602240","2258602495","HK","HKG","HONG KONG" -"2258602496","2258602751","VN","VNM","VIET NAM" -"2258602752","2258603263","HK","HKG","HONG KONG" -"2258603264","2258603279","IN","IND","INDIA" -"2258603280","2258603679","AU","AUS","AUSTRALIA" -"2258603680","2258603711","IN","IND","INDIA" -"2258603712","2258603743","AU","AUS","AUSTRALIA" -"2258603744","2258603751","TW","TWN","TAIWAN" -"2258603752","2258603775","AU","AUS","AUSTRALIA" -"2258603776","2258604031","HK","HKG","HONG KONG" -"2258604032","2258604543","AU","AUS","AUSTRALIA" -"2258604544","2258604575","IN","IND","INDIA" -"2258604576","2258604591","SG","SGP","SINGAPORE" -"2258604592","2258604607","IN","IND","INDIA" -"2258604608","2258604671","AU","AUS","AUSTRALIA" -"2258604672","2258604735","SG","SGP","SINGAPORE" -"2258604736","2258604799","AU","AUS","AUSTRALIA" -"2258604800","2258605055","HK","HKG","HONG KONG" -"2258605056","2258605567","AU","AUS","AUSTRALIA" -"2258605568","2258605631","SG","SGP","SINGAPORE" -"2258605632","2258605967","AU","AUS","AUSTRALIA" -"2258605968","2258605991","NZ","NZL","NEW ZEALAND" -"2258605992","2258606079","AU","AUS","AUSTRALIA" -"2258606080","2258606367","HK","HKG","HONG KONG" -"2258606368","2258606463","AU","AUS","AUSTRALIA" -"2258606464","2258606471","JP","JPN","JAPAN" -"2258606472","2258606687","AU","AUS","AUSTRALIA" -"2258606688","2258606703","JP","JPN","JAPAN" -"2258606704","2258607343","AU","AUS","AUSTRALIA" -"2258607344","2258607351","SG","SGP","SINGAPORE" -"2258607352","2258607871","AU","AUS","AUSTRALIA" -"2258607872","2258608127","HK","HKG","HONG KONG" -"2258608128","2258608895","AU","AUS","AUSTRALIA" -"2258608896","2258608959","IN","IND","INDIA" -"2258608960","2258609487","AU","AUS","AUSTRALIA" -"2258609488","2258609503","IN","IND","INDIA" -"2258609504","2258609511","AU","AUS","AUSTRALIA" -"2258609512","2258609527","IN","IND","INDIA" -"2258609528","2258610303","AU","AUS","AUSTRALIA" -"2258610304","2258610431","IN","IND","INDIA" -"2258610432","2258611071","AU","AUS","AUSTRALIA" -"2258611072","2258611075","JP","JPN","JAPAN" -"2258611076","2258611967","AU","AUS","AUSTRALIA" -"2258611968","2258612223","HK","HKG","HONG KONG" -"2258612224","2258614783","AU","AUS","AUSTRALIA" -"2258614784","2258614799","TW","TWN","TAIWAN" -"2258614800","2258616319","AU","AUS","AUSTRALIA" -"2258616320","2258632703","HK","HKG","HONG KONG" -"2258632704","2258698239","JP","JPN","JAPAN" -"2258698240","2259222527","US","USA","UNITED STATES" -"2259222528","2259288063","DE","DEU","GERMANY" -"2259288064","2259353599","US","USA","UNITED STATES" -"2259353600","2259419135","DE","DEU","GERMANY" -"2259419136","2259681279","US","USA","UNITED STATES" -"2259681280","2259746815","DE","DEU","GERMANY" -"2259746816","2259812351","US","USA","UNITED STATES" -"2259812352","2259877887","AU","AUS","AUSTRALIA" -"2259877888","2259943423","US","USA","UNITED STATES" -"2259943424","2260008959","JP","JPN","JAPAN" -"2260008960","2260140031","US","USA","UNITED STATES" -"2260140032","2260205567","GB","GBR","UNITED KINGDOM" -"2260205568","2260271103","BE","BEL","BELGIUM" -"2260271104","2260467711","US","USA","UNITED STATES" -"2260467712","2260533247","NL","NLD","NETHERLANDS" -"2260533248","2260598783","US","USA","UNITED STATES" -"2260598784","2260664319","CA","CAN","CANADA" -"2260664320","2260729855","GB","GBR","UNITED KINGDOM" -"2260729856","2260991999","US","USA","UNITED STATES" -"2260992000","2261057535","CN","CHN","CHINA" -"2261057536","2261188607","US","USA","UNITED STATES" -"2261188608","2261254143","CA","CAN","CANADA" -"2261254144","2261385215","US","USA","UNITED STATES" -"2261385216","2261450751","PR","PRI","PUERTO RICO" -"2261450752","2261516287","NL","NLD","NETHERLANDS" -"2261516288","2261647359","US","USA","UNITED STATES" -"2261647360","2261712895","FR","FRA","FRANCE" -"2261712896","2261778431","US","USA","UNITED STATES" -"2261778432","2261843967","TW","TWN","TAIWAN" -"2261843968","2261975039","US","USA","UNITED STATES" -"2261975040","2262040575","AU","AUS","AUSTRALIA" -"2262040576","2262106111","FR","FRA","FRANCE" -"2262106112","2262171647","IE","IRL","IRELAND" -"2262171648","2262237183","FR","FRA","FRANCE" -"2262237184","2262499327","US","USA","UNITED STATES" -"2262499328","2262630399","GB","GBR","UNITED KINGDOM" -"2262630400","2262761471","NL","NLD","NETHERLANDS" -"2262761472","2262892543","US","USA","UNITED STATES" -"2262892544","2262958079","GB","GBR","UNITED KINGDOM" -"2262958080","2263023615","IE","IRL","IRELAND" -"2263023616","2263089151","FR","FRA","FRANCE" -"2263089152","2263678975","US","USA","UNITED STATES" -"2263678976","2263744511","JP","JPN","JAPAN" -"2263744512","2263810047","US","USA","UNITED STATES" -"2263810048","2263875583","GB","GBR","UNITED KINGDOM" -"2263875584","2264203263","US","USA","UNITED STATES" -"2264203264","2264268799","DE","DEU","GERMANY" -"2264268800","2264334335","FR","FRA","FRANCE" -"2264334336","2264399871","DE","DEU","GERMANY" -"2264399872","2264465407","US","USA","UNITED STATES" -"2264530944","2264858623","US","USA","UNITED STATES" -"2264989696","2265710591","US","USA","UNITED STATES" -"2265710592","2265776127","CA","CAN","CANADA" -"2265776128","2266169343","US","USA","UNITED STATES" -"2266234880","2276786175","US","USA","UNITED STATES" -"2276786176","2276851711","CA","CAN","CANADA" -"2276851712","2277769215","US","USA","UNITED STATES" -"2277769216","2277772543","GB","GBR","UNITED KINGDOM" -"2277772544","2277772799","DE","DEU","GERMANY" -"2277772800","2277834751","GB","GBR","UNITED KINGDOM" -"2277834752","2281701375","US","USA","UNITED STATES" -"2281766912","2291204095","US","USA","UNITED STATES" -"2291204096","2291269631","PR","PRI","PUERTO RICO" -"2291269632","2291400703","CA","CAN","CANADA" -"2291400704","2291466239","GB","GBR","UNITED KINGDOM" -"2291466240","2291728383","US","USA","UNITED STATES" -"2291728384","2291859455","AU","AUS","AUSTRALIA" -"2291859456","2291924991","SE","SWE","SWEDEN" -"2291924992","2291990527","GB","GBR","UNITED KINGDOM" -"2291990528","2292056063","US","USA","UNITED STATES" -"2292056064","2292121599","NO","NOR","NORWAY" -"2292121600","2292187135","CA","CAN","CANADA" -"2292187136","2292383743","US","USA","UNITED STATES" -"2292383744","2292449279","SE","SWE","SWEDEN" -"2292449280","2292514815","NO","NOR","NORWAY" -"2292514816","2292776959","US","USA","UNITED STATES" -"2292842496","2292908031","GB","GBR","UNITED KINGDOM" -"2292908032","2292973567","US","USA","UNITED STATES" -"2292973568","2293039103","DE","DEU","GERMANY" -"2293039104","2293104639","LU","LUX","LUXEMBOURG" -"2293104640","2293891071","US","USA","UNITED STATES" -"2293891072","2293956607","AU","AUS","AUSTRALIA" -"2293956608","2294022143","JP","JPN","JAPAN" -"2294022144","2294677503","US","USA","UNITED STATES" -"2294677504","2294743039","JP","JPN","JAPAN" -"2294743040","2294808575","DE","DEU","GERMANY" -"2294808576","2294874111","US","USA","UNITED STATES" -"2294874112","2294939647","IE","IRL","IRELAND" -"2294939648","2295201791","US","USA","UNITED STATES" -"2295201792","2295267327","IE","IRL","IRELAND" -"2295267328","2296446975","US","USA","UNITED STATES" -"2296446976","2296512511","SE","SWE","SWEDEN" -"2296512512","2296774655","US","USA","UNITED STATES" -"2296774656","2296840191","DE","DEU","GERMANY" -"2296840192","2296905727","NL","NLD","NETHERLANDS" -"2296905728","2297626623","US","USA","UNITED STATES" -"2297626624","2297692159","DE","DEU","GERMANY" -"2297692160","2298413055","US","USA","UNITED STATES" -"2298478592","2299461631","US","USA","UNITED STATES" -"2299461632","2299527167","CA","CAN","CANADA" -"2299527168","2299592703","US","USA","UNITED STATES" -"2299592704","2299658239","NL","NLD","NETHERLANDS" -"2299658240","2300641279","US","USA","UNITED STATES" -"2300641280","2300706815","FI","FIN","FINLAND" -"2300706816","2300772351","CH","CHE","SWITZERLAND" -"2300772352","2301296639","US","USA","UNITED STATES" -"2301296640","2301362175","IE","IRL","IRELAND" -"2301362176","2301427711","GB","GBR","UNITED KINGDOM" -"2301427712","2301558783","US","USA","UNITED STATES" -"2301558784","2301624319","NO","NOR","NORWAY" -"2301624320","2301755391","US","USA","UNITED STATES" -"2301755392","2301820927","GB","GBR","UNITED KINGDOM" -"2301820928","2302083071","US","USA","UNITED STATES" -"2302083072","2302214143","NL","NLD","NETHERLANDS" -"2302214144","2302279679","US","USA","UNITED STATES" -"2302279680","2302541823","SE","SWE","SWEDEN" -"2302541824","2302607359","CH","CHE","SWITZERLAND" -"2302738432","2302935039","US","USA","UNITED STATES" -"2302935040","2303000575","KR","KOR","REPUBLIC OF KOREA" -"2303000576","2303262719","US","USA","UNITED STATES" -"2303262720","2303328255","GB","GBR","UNITED KINGDOM" -"2303328256","2303393791","CA","CAN","CANADA" -"2303393792","2303459327","US","USA","UNITED STATES" -"2303459328","2303524863","AU","AUS","AUSTRALIA" -"2303524864","2303852543","US","USA","UNITED STATES" -"2303852544","2303918079","CA","CAN","CANADA" -"2303918080","2304507903","US","USA","UNITED STATES" -"2304507904","2304573439","AU","AUS","AUSTRALIA" -"2304573440","2304638975","NO","NOR","NORWAY" -"2304638976","2304704511","CA","CAN","CANADA" -"2304704512","2304770047","US","USA","UNITED STATES" -"2304770048","2304835583","SE","SWE","SWEDEN" -"2304835584","2305097727","US","USA","UNITED STATES" -"2305097728","2305163263","GB","GBR","UNITED KINGDOM" -"2305163264","2305359871","US","USA","UNITED STATES" -"2305359872","2305425407","GB","GBR","UNITED KINGDOM" -"2305425408","2305556479","US","USA","UNITED STATES" -"2305556480","2305622015","GB","GBR","UNITED KINGDOM" -"2305622016","2305687551","AU","AUS","AUSTRALIA" -"2305687552","2305753087","US","USA","UNITED STATES" -"2305753088","2305818623","AU","AUS","AUSTRALIA" -"2305818624","2306015231","US","USA","UNITED STATES" -"2306080768","2306146303","US","USA","UNITED STATES" -"2306146304","2306211839","CA","CAN","CANADA" -"2306211840","2306342911","US","USA","UNITED STATES" -"2306342912","2306408447","NL","NLD","NETHERLANDS" -"2306408448","2306473983","FR","FRA","FRANCE" -"2306473984","2306539519","CA","CAN","CANADA" -"2306539520","2306932735","US","USA","UNITED STATES" -"2306932736","2306998271","FR","FRA","FRANCE" -"2306998272","2307129343","US","USA","UNITED STATES" -"2307129344","2307194879","SG","SGP","SINGAPORE" -"2307194880","2307260415","NO","NOR","NORWAY" -"2307260416","2307522559","US","USA","UNITED STATES" -"2307522560","2307588095","CH","CHE","SWITZERLAND" -"2307588096","2308112383","US","USA","UNITED STATES" -"2308112384","2308177919","AU","AUS","AUSTRALIA" -"2308177920","2308243455","US","USA","UNITED STATES" -"2308243456","2308308991","CA","CAN","CANADA" -"2308308992","2308505599","US","USA","UNITED STATES" -"2308505600","2308571135","JP","JPN","JAPAN" -"2308571136","2308636671","AU","AUS","AUSTRALIA" -"2308636672","2308702207","US","USA","UNITED STATES" -"2308702208","2308767743","CH","CHE","SWITZERLAND" -"2308767744","2308833279","AU","AUS","AUSTRALIA" -"2308898816","2309160959","US","USA","UNITED STATES" -"2309160960","2309226495","FI","FIN","FINLAND" -"2309226496","2309357567","US","USA","UNITED STATES" -"2309357568","2309423103","AU","AUS","AUSTRALIA" -"2309423104","2309685247","US","USA","UNITED STATES" -"2309750784","2309816319","AU","AUS","AUSTRALIA" -"2309816320","2309881855","US","USA","UNITED STATES" -"2309881856","2309947391","NL","NLD","NETHERLANDS" -"2309947392","2310668287","US","USA","UNITED STATES" -"2310668288","2310733823","CA","CAN","CANADA" -"2310733824","2310864895","US","USA","UNITED STATES" -"2310864896","2310930431","HK","HKG","HONG KONG" -"2310930432","2310995967","US","USA","UNITED STATES" -"2310995968","2311061503","IE","IRL","IRELAND" -"2311061504","2311127039","US","USA","UNITED STATES" -"2311127040","2311192575","DE","DEU","GERMANY" -"2311192576","2311258111","FR","FRA","FRANCE" -"2311258112","2311323647","GB","GBR","UNITED KINGDOM" -"2311389184","2311847935","US","USA","UNITED STATES" -"2311847936","2311913471","IT","ITA","ITALY" -"2311913472","2311979007","GB","GBR","UNITED KINGDOM" -"2311979008","2312044543","US","USA","UNITED STATES" -"2312044544","2312110079","CA","CAN","CANADA" -"2312110080","2312175615","AT","AUT","AUSTRIA" -"2312175616","2312437759","US","USA","UNITED STATES" -"2312437760","2312503295","GB","GBR","UNITED KINGDOM" -"2312634368","2312699903","US","USA","UNITED STATES" -"2312699904","2312765439","NO","NOR","NORWAY" -"2312765440","2312830975","GB","GBR","UNITED KINGDOM" -"2312830976","2312896511","AU","AUS","AUSTRALIA" -"2312896512","2312962047","US","USA","UNITED STATES" -"2312962048","2313158655","GB","GBR","UNITED KINGDOM" -"2313158656","2313224191","NL","NLD","NETHERLANDS" -"2313224192","2313289727","US","USA","UNITED STATES" -"2313289728","2313355263","DE","DEU","GERMANY" -"2313355264","2314731519","US","USA","UNITED STATES" -"2314731520","2314797055","DE","DEU","GERMANY" -"2314797056","2314862591","US","USA","UNITED STATES" -"2314862592","2314993663","DE","DEU","GERMANY" -"2314993664","2315059199","US","USA","UNITED STATES" -"2315059200","2315124735","GB","GBR","UNITED KINGDOM" -"2315124736","2315190271","US","USA","UNITED STATES" -"2315321344","2315452415","US","USA","UNITED STATES" -"2315452416","2315517951","GB","GBR","UNITED KINGDOM" -"2315517952","2315583487","ES","ESP","SPAIN" -"2315583488","2315649023","US","USA","UNITED STATES" -"2315649024","2315714559","SE","SWE","SWEDEN" -"2315714560","2315780095","AU","AUS","AUSTRALIA" -"2315780096","2315911167","US","USA","UNITED STATES" -"2315911168","2316042239","CA","CAN","CANADA" -"2316042240","2316173311","US","USA","UNITED STATES" -"2316173312","2316238847","SE","SWE","SWEDEN" -"2316238848","2316500991","US","USA","UNITED STATES" -"2316500992","2316566527","AU","AUS","AUSTRALIA" -"2316566528","2316632063","US","USA","UNITED STATES" -"2316632064","2316697599","FR","FRA","FRANCE" -"2316697600","2316763135","AT","AUT","AUSTRIA" -"2316763136","2316828671","US","USA","UNITED STATES" -"2316828672","2316959743","AU","AUS","AUSTRALIA" -"2316959744","2317221887","US","USA","UNITED STATES" -"2317221888","2317287423","JP","JPN","JAPAN" -"2317287424","2317484031","US","USA","UNITED STATES" -"2317484032","2317549567","CA","CAN","CANADA" -"2317549568","2317615103","US","USA","UNITED STATES" -"2317680640","2317811711","GB","GBR","UNITED KINGDOM" -"2317811712","2317877247","US","USA","UNITED STATES" -"2317877248","2317942783","GB","GBR","UNITED KINGDOM" -"2317942784","2318008319","IT","ITA","ITALY" -"2318008320","2318139391","US","USA","UNITED STATES" -"2318139392","2318204927","AU","AUS","AUSTRALIA" -"2318204928","2318401535","US","USA","UNITED STATES" -"2318401536","2318467071","BE","BEL","BELGIUM" -"2318467072","2318598143","US","USA","UNITED STATES" -"2318598144","2318663679","CA","CAN","CANADA" -"2318663680","2319122431","US","USA","UNITED STATES" -"2319187968","2319319039","US","USA","UNITED STATES" -"2319319040","2319384575","NO","NOR","NORWAY" -"2319384576","2319450111","FR","FRA","FRANCE" -"2319450112","2319581183","US","USA","UNITED STATES" -"2319581184","2319646719","IT","ITA","ITALY" -"2319646720","2319843327","US","USA","UNITED STATES" -"2319843328","2319908863","IT","ITA","ITALY" -"2319908864","2319974399","AU","AUS","AUSTRALIA" -"2319974400","2320039935","US","USA","UNITED STATES" -"2320039936","2320105471","CA","CAN","CANADA" -"2320105472","2320171007","US","USA","UNITED STATES" -"2320171008","2320236543","NZ","NZL","NEW ZEALAND" -"2320236544","2320302079","US","USA","UNITED STATES" -"2320302080","2320367615","AU","AUS","AUSTRALIA" -"2320367616","2320433151","US","USA","UNITED STATES" -"2320433152","2320564223","AU","AUS","AUSTRALIA" -"2320564224","2320629759","CH","CHE","SWITZERLAND" -"2320629760","2320695295","CA","CAN","CANADA" -"2320695296","2321416191","US","USA","UNITED STATES" -"2321481728","2321547263","US","USA","UNITED STATES" -"2321547264","2321612799","FR","FRA","FRANCE" -"2321678336","2321743871","US","USA","UNITED STATES" -"2321809408","2321874943","ES","ESP","SPAIN" -"2321874944","2321940479","JP","JPN","JAPAN" -"2321940480","2322006015","FR","FRA","FRANCE" -"2322006016","2322071551","SE","SWE","SWEDEN" -"2322071552","2322137087","GB","GBR","UNITED KINGDOM" -"2322137088","2322202623","US","USA","UNITED STATES" -"2322202624","2322268159","SE","SWE","SWEDEN" -"2322268160","2322333695","JP","JPN","JAPAN" -"2322333696","2322923519","US","USA","UNITED STATES" -"2323054592","2323185663","CA","CAN","CANADA" -"2323316736","2323382271","US","USA","UNITED STATES" -"2323382272","2323447807","NO","NOR","NORWAY" -"2323447808","2323644415","US","USA","UNITED STATES" -"2323677184","2323677695","US","USA","UNITED STATES" -"2323709952","2323775487","US","USA","UNITED STATES" -"2323775488","2323841023","AU","AUS","AUSTRALIA" -"2323841024","2323906559","CH","CHE","SWITZERLAND" -"2323906560","2323972095","IT","ITA","ITALY" -"2323972096","2324037631","US","USA","UNITED STATES" -"2324037632","2324103167","IL","ISR","ISRAEL" -"2324103168","2327379967","US","USA","UNITED STATES" -"2327511040","2327838719","CH","CHE","SWITZERLAND" -"2327838720","2327969791","US","USA","UNITED STATES" -"2327969792","2328035327","AU","AUS","AUSTRALIA" -"2328035328","2328100863","FR","FRA","FRANCE" -"2328100864","2328231935","US","USA","UNITED STATES" -"2328231936","2328297471","GB","GBR","UNITED KINGDOM" -"2328313856","2328317951","NL","NLD","NETHERLANDS" -"2328342528","2328342783","DE","DEU","GERMANY" -"2328362752","2328494079","DE","DEU","GERMANY" -"2328494080","2328559615","US","USA","UNITED STATES" -"2328559616","2328625151","BE","BEL","BELGIUM" -"2328690688","2328756223","BE","BEL","BELGIUM" -"2328756224","2328821759","CH","CHE","SWITZERLAND" -"2328821760","2329083903","US","USA","UNITED STATES" -"2329083904","2329149439","NZ","NZL","NEW ZEALAND" -"2329149440","2329280511","JP","JPN","JAPAN" -"2329280512","2329346047","CA","CAN","CANADA" -"2329346048","2329411583","SE","SWE","SWEDEN" -"2329411584","2329477119","FI","FIN","FINLAND" -"2329477120","2329542655","AU","AUS","AUSTRALIA" -"2329542656","2329608191","CA","CAN","CANADA" -"2329673728","2329739263","US","USA","UNITED STATES" -"2329739264","2329804799","SE","SWE","SWEDEN" -"2329804800","2329870335","DE","DEU","GERMANY" -"2329870336","2330132479","CH","CHE","SWITZERLAND" -"2330132480","2330198015","SE","SWE","SWEDEN" -"2330198016","2330263551","CH","CHE","SWITZERLAND" -"2330263552","2330394623","US","USA","UNITED STATES" -"2330394624","2330460159","FR","FRA","FRANCE" -"2330460160","2330525695","AT","AUT","AUSTRIA" -"2330525696","2330591231","SE","SWE","SWEDEN" -"2330591232","2330656767","US","USA","UNITED STATES" -"2330656768","2330722303","NZ","NZL","NEW ZEALAND" -"2330722304","2331181055","US","USA","UNITED STATES" -"2331181056","2331246591","JP","JPN","JAPAN" -"2331246592","2331443199","DE","DEU","GERMANY" -"2331443200","2331508735","US","USA","UNITED STATES" -"2331508736","2331574271","GB","GBR","UNITED KINGDOM" -"2331574272","2331639807","FI","FIN","FINLAND" -"2331639808","2331770879","GB","GBR","UNITED KINGDOM" -"2331770880","2331836415","AU","AUS","AUSTRALIA" -"2331836416","2331901951","GB","GBR","UNITED KINGDOM" -"2331901952","2331967487","US","USA","UNITED STATES" -"2332098560","2332622847","DE","DEU","GERMANY" -"2332688384","2332753919","BE","BEL","BELGIUM" -"2332753920","2334064639","DE","DEU","GERMANY" -"2334064640","2334916607","US","USA","UNITED STATES" -"2334916608","2334982143","AU","AUS","AUSTRALIA" -"2334982144","2335178751","US","USA","UNITED STATES" -"2335178752","2335244287","CA","CAN","CANADA" -"2335244288","2335309823","US","USA","UNITED STATES" -"2335309824","2335375359","DE","DEU","GERMANY" -"2335375360","2335506431","US","USA","UNITED STATES" -"2335571968","2335637503","FR","FRA","FRANCE" -"2335637504","2335768575","US","USA","UNITED STATES" -"2335768576","2335834111","CA","CAN","CANADA" -"2335834112","2335899647","SE","SWE","SWEDEN" -"2335899648","2335965183","AU","AUS","AUSTRALIA" -"2335965184","2336161791","US","USA","UNITED STATES" -"2336161792","2336227327","NL","NLD","NETHERLANDS" -"2336227328","2336358399","US","USA","UNITED STATES" -"2336358400","2336423935","FI","FIN","FINLAND" -"2336423936","2336882687","US","USA","UNITED STATES" -"2336882688","2336948223","FI","FIN","FINLAND" -"2336948224","2337013759","DE","DEU","GERMANY" -"2337013760","2337210367","US","USA","UNITED STATES" -"2337210368","2337275903","CH","CHE","SWITZERLAND" -"2337275904","2337341439","NZ","NZL","NEW ZEALAND" -"2337341440","2337406975","US","USA","UNITED STATES" -"2337406976","2337472511","BR","BRA","BRAZIL" -"2337472512","2337538047","PT","PRT","PORTUGAL" -"2337538048","2337669119","US","USA","UNITED STATES" -"2337669120","2337734655","AU","AUS","AUSTRALIA" -"2337734656","2337865727","US","USA","UNITED STATES" -"2337865728","2337931263","DE","DEU","GERMANY" -"2337931264","2337996799","BE","BEL","BELGIUM" -"2337996800","2338062335","GR","GRC","GREECE" -"2338075392","2338075647","IL","ISR","ISRAEL" -"2338084864","2338085375","IL","ISR","ISRAEL" -"2338085632","2338086143","IL","ISR","ISRAEL" -"2338087424","2338087679","IL","ISR","ISRAEL" -"2338108928","2338109951","IL","ISR","ISRAEL" -"2338115072","2338115839","IL","ISR","ISRAEL" -"2338126592","2338127615","IL","ISR","ISRAEL" -"2338127872","2338324479","US","USA","UNITED STATES" -"2338324480","2338390015","SE","SWE","SWEDEN" -"2338390016","2338455551","FI","FIN","FINLAND" -"2338455552","2338521087","NO","NOR","NORWAY" -"2338521088","2338586623","US","USA","UNITED STATES" -"2338586624","2338652159","FR","FRA","FRANCE" -"2338717696","2338783231","US","USA","UNITED STATES" -"2338783232","2338848767","CA","CAN","CANADA" -"2338848768","2338914303","US","USA","UNITED STATES" -"2338914304","2339962879","NO","NOR","NORWAY" -"2339962880","2340028415","US","USA","UNITED STATES" -"2340028416","2340093951","NL","NLD","NETHERLANDS" -"2340093952","2340159487","FI","FIN","FINLAND" -"2340159488","2340225023","FR","FRA","FRANCE" -"2340225024","2340421631","US","USA","UNITED STATES" -"2340421632","2340487167","IT","ITA","ITALY" -"2340552704","2340618239","AU","AUS","AUSTRALIA" -"2340618240","2340683775","US","USA","UNITED STATES" -"2340683776","2340749311","AU","AUS","AUSTRALIA" -"2340749312","2340814847","GB","GBR","UNITED KINGDOM" -"2340814848","2340880383","AU","AUS","AUSTRALIA" -"2340880384","2341273599","US","USA","UNITED STATES" -"2341273600","2341339135","KW","KWT","KUWAIT" -"2341339136","2341404671","CA","CAN","CANADA" -"2341404672","2341470207","GB","GBR","UNITED KINGDOM" -"2341470208","2341535743","US","USA","UNITED STATES" -"2341535744","2341601279","NO","NOR","NORWAY" -"2341601280","2341732351","US","USA","UNITED STATES" -"2341797888","2341863423","GB","GBR","UNITED KINGDOM" -"2341928960","2341994495","US","USA","UNITED STATES" -"2341994496","2342060031","JP","JPN","JAPAN" -"2342060032","2342125567","GB","GBR","UNITED KINGDOM" -"2342125568","2342191103","JP","JPN","JAPAN" -"2342256640","2342322175","NL","NLD","NETHERLANDS" -"2342322176","2342387711","FI","FIN","FINLAND" -"2342387712","2342453247","FR","FRA","FRANCE" -"2342518784","2342584319","FR","FRA","FRANCE" -"2342584320","2342649855","US","USA","UNITED STATES" -"2342649856","2342715391","NL","NLD","NETHERLANDS" -"2342715392","2342780927","AU","AUS","AUSTRALIA" -"2342780928","2342846463","NO","NOR","NORWAY" -"2342846464","2342911999","BE","BEL","BELGIUM" -"2342912000","2342977535","GB","GBR","UNITED KINGDOM" -"2342977536","2343043071","US","USA","UNITED STATES" -"2343043072","2343108607","AU","AUS","AUSTRALIA" -"2343108608","2343174143","US","USA","UNITED STATES" -"2343239680","2343370751","US","USA","UNITED STATES" -"2343370752","2343436287","CA","CAN","CANADA" -"2343436288","2343501823","DE","DEU","GERMANY" -"2343501824","2343567359","TW","TWN","TAIWAN" -"2343632896","2343698431","US","USA","UNITED STATES" -"2343698432","2343763967","NL","NLD","NETHERLANDS" -"2343763968","2343829503","TR","TUR","TURKEY" -"2343829504","2344026111","US","USA","UNITED STATES" -"2344091648","2344157183","GB","GBR","UNITED KINGDOM" -"2344157184","2344222719","US","USA","UNITED STATES" -"2344288256","2344353791","US","USA","UNITED STATES" -"2344353792","2344419327","AU","AUS","AUSTRALIA" -"2346582016","2346647551","GB","GBR","UNITED KINGDOM" -"2346647552","2346713087","TW","TWN","TAIWAN" -"2346778624","2346844159","US","USA","UNITED STATES" -"2347040768","2347106303","US","USA","UNITED STATES" -"2347106304","2347171839","AU","AUS","AUSTRALIA" -"2347171840","2348744703","US","USA","UNITED STATES" -"2348875776","2353725439","US","USA","UNITED STATES" -"2353790976","2353856511","US","USA","UNITED STATES" -"2353856512","2353922047","FR","FRA","FRANCE" -"2353922048","2353987583","AT","AUT","AUSTRIA" -"2353987584","2354053119","AU","AUS","AUSTRALIA" -"2354053120","2354118655","CA","CAN","CANADA" -"2354118656","2354184191","JP","JPN","JAPAN" -"2354184192","2354249727","US","USA","UNITED STATES" -"2354249728","2354315263","AU","AUS","AUSTRALIA" -"2354315264","2354380799","DE","DEU","GERMANY" -"2354380800","2354446335","NL","NLD","NETHERLANDS" -"2354446336","2354511871","FR","FRA","FRANCE" -"2354511872","2354577407","CA","CAN","CANADA" -"2354577408","2354839551","US","USA","UNITED STATES" -"2354839552","2354905087","TW","TWN","TAIWAN" -"2354905088","2355036159","FR","FRA","FRANCE" -"2355036160","2355101695","US","USA","UNITED STATES" -"2355101696","2355167231","TW","TWN","TAIWAN" -"2355167232","2355232767","GB","GBR","UNITED KINGDOM" -"2355232768","2355305583","US","USA","UNITED STATES" -"2355305584","2355305591","DK","DNK","DENMARK" -"2355305592","2355691519","US","USA","UNITED STATES" -"2355691520","2355757055","IT","ITA","ITALY" -"2355757056","2355953663","US","USA","UNITED STATES" -"2355953664","2357919743","TW","TWN","TAIWAN" -"2357919744","2358181887","US","USA","UNITED STATES" -"2358247424","2358509567","US","USA","UNITED STATES" -"2358509568","2358575103","MX","MEX","MEXICO" -"2358640640","2358706175","SE","SWE","SWEDEN" -"2358706176","2358771711","FI","FIN","FINLAND" -"2358771712","2359230463","US","USA","UNITED STATES" -"2359230464","2359295999","AU","AUS","AUSTRALIA" -"2359296000","2359361535","US","USA","UNITED STATES" -"2359361536","2359427071","CA","CAN","CANADA" -"2359427072","2359558143","US","USA","UNITED STATES" -"2359558144","2359623679","IT","ITA","ITALY" -"2359623680","2359689215","US","USA","UNITED STATES" -"2359689216","2359754751","SE","SWE","SWEDEN" -"2359754752","2359820287","CA","CAN","CANADA" -"2359820288","2359885823","AU","AUS","AUSTRALIA" -"2359885824","2360672255","US","USA","UNITED STATES" -"2360672256","2360737791","DE","DEU","GERMANY" -"2360737792","2360868863","US","USA","UNITED STATES" -"2360868864","2360934399","CA","CAN","CANADA" -"2360934400","2361327615","US","USA","UNITED STATES" -"2361327616","2361393151","AR","ARG","ARGENTINA" -"2361393152","2361458687","US","USA","UNITED STATES" -"2361458688","2361524223","CA","CAN","CANADA" -"2361524224","2361917439","US","USA","UNITED STATES" -"2361917440","2361982975","NZ","NZL","NEW ZEALAND" -"2361982976","2362114047","US","USA","UNITED STATES" -"2362114048","2362179583","IE","IRL","IRELAND" -"2362179584","2362245119","US","USA","UNITED STATES" -"2362441728","2362572799","US","USA","UNITED STATES" -"2362638336","2362769407","US","USA","UNITED STATES" -"2362834944","2363490303","US","USA","UNITED STATES" -"2363555840","2363883519","US","USA","UNITED STATES" -"2363883520","2363949055","CA","CAN","CANADA" -"2363949056","2364342271","US","USA","UNITED STATES" -"2364407808","2364538879","US","USA","UNITED STATES" -"2364604416","2364735487","US","USA","UNITED STATES" -"2364801024","2364932095","US","USA","UNITED STATES" -"2364997632","2365128703","US","USA","UNITED STATES" -"2365259776","2365390847","US","USA","UNITED STATES" -"2365390848","2365456383","AU","AUS","AUSTRALIA" -"2365456384","2365521919","US","USA","UNITED STATES" -"2365652992","2367487999","DE","DEU","GERMANY" -"2367488000","2367553535","BA","BIH","BOSNIA AND HERZEGOVINA" -"2367553536","2370895871","DE","DEU","GERMANY" -"2370895872","2370961407","SE","SWE","SWEDEN" -"2370961408","2371158015","DE","DEU","GERMANY" -"2371158016","2371223551","RO","ROM","ROMANIA" -"2371223552","2371289087","US","USA","UNITED STATES" -"2371289088","2371616767","DE","DEU","GERMANY" -"2371616768","2371682303","GB","GBR","UNITED KINGDOM" -"2371682304","2371747839","NL","NLD","NETHERLANDS" -"2371747840","2371878911","GB","GBR","UNITED KINGDOM" -"2371878912","2371944447","BE","BEL","BELGIUM" -"2371944448","2372009983","GB","GBR","UNITED KINGDOM" -"2372009984","2372075519","CH","CHE","SWITZERLAND" -"2372075520","2372206591","DE","DEU","GERMANY" -"2372272128","2372337663","US","USA","UNITED STATES" -"2372337664","2372403199","ID","IDN","INDONESIA" -"2372403200","2372468735","US","USA","UNITED STATES" -"2372534272","2372665343","US","USA","UNITED STATES" -"2372665344","2372730879","IT","ITA","ITALY" -"2372730880","2372796415","CA","CAN","CANADA" -"2372796416","2372993023","US","USA","UNITED STATES" -"2372993024","2373058559","DE","DEU","GERMANY" -"2373058560","2373124095","US","USA","UNITED STATES" -"2373124096","2373189631","FR","FRA","FRANCE" -"2373189632","2373255167","US","USA","UNITED STATES" -"2373255168","2373451775","CA","CAN","CANADA" -"2373451776","2373517311","AU","AUS","AUSTRALIA" -"2373517312","2374107135","US","USA","UNITED STATES" -"2374107136","2374172671","DE","DEU","GERMANY" -"2374172672","2374238207","US","USA","UNITED STATES" -"2374238208","2374303743","AU","AUS","AUSTRALIA" -"2374303744","2374369279","US","USA","UNITED STATES" -"2374565888","2374631423","SE","SWE","SWEDEN" -"2374696960","2374959103","US","USA","UNITED STATES" -"2374959104","2375024639","BE","BEL","BELGIUM" -"2375024640","2375090175","DK","DNK","DENMARK" -"2375090176","2375155711","NO","NOR","NORWAY" -"2375155712","2375221247","FI","FIN","FINLAND" -"2375221248","2375286783","SE","SWE","SWEDEN" -"2375286784","2375352319","CH","CHE","SWITZERLAND" -"2375352320","2376269823","US","USA","UNITED STATES" -"2376269824","2376335359","GB","GBR","UNITED KINGDOM" -"2376335360","2376597503","US","USA","UNITED STATES" -"2376597504","2376663039","AU","AUS","AUSTRALIA" -"2376663040","2376728575","DE","DEU","GERMANY" -"2376794112","2376859647","CH","CHE","SWITZERLAND" -"2376859648","2376925183","FI","FIN","FINLAND" -"2376925184","2377056255","US","USA","UNITED STATES" -"2377056256","2377121791","FR","FRA","FRANCE" -"2377121792","2377187327","NL","NLD","NETHERLANDS" -"2377187328","2377252863","US","USA","UNITED STATES" -"2377252864","2377318399","JP","JPN","JAPAN" -"2377318400","2378170367","US","USA","UNITED STATES" -"2378170368","2378235903","FI","FIN","FINLAND" -"2378235904","2378301439","US","USA","UNITED STATES" -"2378301440","2378366975","FR","FRA","FRANCE" -"2378366976","2378432511","US","USA","UNITED STATES" -"2378498048","2378694655","US","USA","UNITED STATES" -"2378694656","2378760191","DE","DEU","GERMANY" -"2378760192","2378825727","AT","AUT","AUSTRIA" -"2378825728","2378891263","US","USA","UNITED STATES" -"2378891264","2378956799","AT","AUT","AUSTRIA" -"2378956800","2379218943","US","USA","UNITED STATES" -"2379218944","2379284479","FI","FIN","FINLAND" -"2379284480","2380201983","US","USA","UNITED STATES" -"2380201984","2380267519","KR","KOR","REPUBLIC OF KOREA" -"2380267520","2380398591","US","USA","UNITED STATES" -"2380398592","2380464127","IL","ISR","ISRAEL" -"2380464128","2380529663","FR","FRA","FRANCE" -"2380529664","2380595199","GB","GBR","UNITED KINGDOM" -"2380595200","2380660735","JP","JPN","JAPAN" -"2380660736","2380726271","US","USA","UNITED STATES" -"2380726272","2380791807","GB","GBR","UNITED KINGDOM" -"2380791808","2381119487","US","USA","UNITED STATES" -"2381185024","2381381631","US","USA","UNITED STATES" -"2381381632","2381447167","GB","GBR","UNITED KINGDOM" -"2381447168","2381512703","US","USA","UNITED STATES" -"2381512704","2381578239","AU","AUS","AUSTRALIA" -"2381578240","2381643775","AT","AUT","AUSTRIA" -"2381643776","2381709311","GB","GBR","UNITED KINGDOM" -"2381709312","2381905919","US","USA","UNITED STATES" -"2381905920","2381971455","CH","CHE","SWITZERLAND" -"2381971456","2382036991","IT","ITA","ITALY" -"2382036992","2382102527","US","USA","UNITED STATES" -"2382102528","2382168063","NL","NLD","NETHERLANDS" -"2382168064","2382233599","BE","BEL","BELGIUM" -"2382233600","2382299135","US","USA","UNITED STATES" -"2382430208","2383085567","CA","CAN","CANADA" -"2383151104","2386624511","CA","CAN","CANADA" -"2386624512","2386690047","US","USA","UNITED STATES" -"2386690048","2386989055","CA","CAN","CANADA" -"2386989056","2386989311","GB","GBR","UNITED KINGDOM" -"2386989312","2387410943","CA","CAN","CANADA" -"2387410944","2387476479","US","USA","UNITED STATES" -"2387476480","2387542015","CA","CAN","CANADA" -"2387542016","2387607551","US","USA","UNITED STATES" -"2387607552","2388328447","CA","CAN","CANADA" -"2388393984","2389245951","CA","CAN","CANADA" -"2389311488","2389639167","CA","CAN","CANADA" -"2389704704","2390818815","CA","CAN","CANADA" -"2390884352","2391277567","CA","CAN","CANADA" -"2391343104","2394947583","CA","CAN","CANADA" -"2394947584","2395013119","US","USA","UNITED STATES" -"2395013120","2395209727","CA","CAN","CANADA" -"2395340800","2397700095","CA","CAN","CANADA" -"2397765632","2398748671","CA","CAN","CANADA" -"2398945280","2399010815","CA","CAN","CANADA" -"2399207424","2401828863","US","USA","UNITED STATES" -"2401828864","2401894399","GB","GBR","UNITED KINGDOM" -"2401894400","2402222079","US","USA","UNITED STATES" -"2402222080","2402287615","IE","IRL","IRELAND" -"2402287616","2402418687","US","USA","UNITED STATES" -"2402418688","2402484223","AT","AUT","AUSTRIA" -"2402484224","2402549759","FI","FIN","FINLAND" -"2402549760","2402680831","GB","GBR","UNITED KINGDOM" -"2402680832","2402746367","BR","BRA","BRAZIL" -"2402746368","2403401727","US","USA","UNITED STATES" -"2403401728","2403467263","GB","GBR","UNITED KINGDOM" -"2403467264","2404974591","US","USA","UNITED STATES" -"2404974592","2405040127","HK","HKG","HONG KONG" -"2405040128","2405105663","JP","JPN","JAPAN" -"2405105664","2405171199","US","USA","UNITED STATES" -"2405171200","2405236735","AU","AUS","AUSTRALIA" -"2405236736","2405302271","DE","DEU","GERMANY" -"2405302272","2405367807","JP","JPN","JAPAN" -"2405367808","2405433343","US","USA","UNITED STATES" -"2405433344","2405498879","NZ","NZL","NEW ZEALAND" -"2405498880","2405564415","NO","NOR","NORWAY" -"2405564416","2405629951","US","USA","UNITED STATES" -"2405629952","2405695487","CH","CHE","SWITZERLAND" -"2405695488","2406088703","US","USA","UNITED STATES" -"2406088704","2406285311","BR","BRA","BRAZIL" -"2406285312","2406809599","US","USA","UNITED STATES" -"2406809600","2406875135","GB","GBR","UNITED KINGDOM" -"2406875136","2406940671","SE","SWE","SWEDEN" -"2406940672","2407006207","AU","AUS","AUSTRALIA" -"2407006208","2407071743","US","USA","UNITED STATES" -"2407071744","2407137279","NL","NLD","NETHERLANDS" -"2407137280","2407333887","US","USA","UNITED STATES" -"2407333888","2407399423","JP","JPN","JAPAN" -"2407399424","2407464959","FR","FRA","FRANCE" -"2407464960","2407530495","US","USA","UNITED STATES" -"2407596032","2407661567","BE","BEL","BELGIUM" -"2407661568","2407727103","AT","AUT","AUSTRIA" -"2407727104","2408054783","US","USA","UNITED STATES" -"2408054784","2408120319","JP","JPN","JAPAN" -"2408185856","2409627647","US","USA","UNITED STATES" -"2409693184","2409758719","AT","AUT","AUSTRIA" -"2409758720","2409824255","US","USA","UNITED STATES" -"2409824256","2409955327","DE","DEU","GERMANY" -"2409955328","2410086399","US","USA","UNITED STATES" -"2410086400","2410151935","GB","GBR","UNITED KINGDOM" -"2410151936","2410217471","US","USA","UNITED STATES" -"2410217472","2410283007","BE","BEL","BELGIUM" -"2410283008","2410348543","US","USA","UNITED STATES" -"2410348544","2410414079","JP","JPN","JAPAN" -"2410414080","2410545151","US","USA","UNITED STATES" -"2410545152","2410610687","AU","AUS","AUSTRALIA" -"2410610688","2410676223","US","USA","UNITED STATES" -"2410676224","2410938367","NL","NLD","NETHERLANDS" -"2410938368","2411003903","CH","CHE","SWITZERLAND" -"2411003904","2411462655","US","USA","UNITED STATES" -"2411462656","2411593727","AU","AUS","AUSTRALIA" -"2411593728","2411986943","US","USA","UNITED STATES" -"2411986944","2412052479","FR","FRA","FRANCE" -"2412052480","2412314623","US","USA","UNITED STATES" -"2412314624","2412380159","JP","JPN","JAPAN" -"2412445696","2412576767","US","USA","UNITED STATES" -"2412576768","2412642303","AT","AUT","AUSTRIA" -"2412642304","2412773375","US","USA","UNITED STATES" -"2412838912","2412904447","US","USA","UNITED STATES" -"2412904448","2412969983","GB","GBR","UNITED KINGDOM" -"2412969984","2413297663","US","USA","UNITED STATES" -"2413297664","2413363199","AU","AUS","AUSTRALIA" -"2413363200","2413428735","SE","SWE","SWEDEN" -"2413428736","2413494271","AU","AUS","AUSTRALIA" -"2413494272","2413625343","US","USA","UNITED STATES" -"2413625344","2413690879","JP","JPN","JAPAN" -"2413690880","2413821951","US","USA","UNITED STATES" -"2413821952","2413887487","AT","AUT","AUSTRIA" -"2413887488","2413953023","IT","ITA","ITALY" -"2413953024","2414411775","US","USA","UNITED STATES" -"2414411776","2414477311","GR","GRC","GREECE" -"2414477312","2414542847","GB","GBR","UNITED KINGDOM" -"2414542848","2414673919","US","USA","UNITED STATES" -"2414673920","2414739455","SE","SWE","SWEDEN" -"2414739456","2414804991","AU","AUS","AUSTRALIA" -"2414804992","2414870527","IE","IRL","IRELAND" -"2414870528","2415198207","US","USA","UNITED STATES" -"2415198208","2415263743","AT","AUT","AUSTRIA" -"2415263744","2415394815","US","USA","UNITED STATES" -"2415394816","2415460351","KR","KOR","REPUBLIC OF KOREA" -"2415460352","2415656959","US","USA","UNITED STATES" -"2415656960","2415722495","GB","GBR","UNITED KINGDOM" -"2415722496","2415788031","JP","JPN","JAPAN" -"2415788032","2415853567","US","USA","UNITED STATES" -"2415984640","2416050175","JP","JPN","JAPAN" -"2416050176","2416115711","NL","NLD","NETHERLANDS" -"2416115712","2416181247","US","USA","UNITED STATES" -"2416181248","2416246783","FI","FIN","FINLAND" -"2416246784","2416312319","US","USA","UNITED STATES" -"2416312320","2416377855","AU","AUS","AUSTRALIA" -"2416443392","2416705535","US","USA","UNITED STATES" -"2416771072","2416967679","US","USA","UNITED STATES" -"2416967680","2417033215","IN","IND","INDIA" -"2417033216","2417229823","US","USA","UNITED STATES" -"2417229824","2417295359","ES","ESP","SPAIN" -"2417295360","2417360895","PT","PRT","PORTUGAL" -"2417360896","2417426431","MX","MEX","MEXICO" -"2417426432","2417491967","BR","BRA","BRAZIL" -"2417491968","2417557503","GR","GRC","GREECE" -"2417557504","2417688575","US","USA","UNITED STATES" -"2417688576","2417754111","SE","SWE","SWEDEN" -"2417754112","2418016255","US","USA","UNITED STATES" -"2418016256","2418081791","GB","GBR","UNITED KINGDOM" -"2418081792","2418606079","US","USA","UNITED STATES" -"2418606080","2418671615","DE","DEU","GERMANY" -"2418671616","2418737151","US","USA","UNITED STATES" -"2418737152","2418802687","NL","NLD","NETHERLANDS" -"2418868224","2419326975","US","USA","UNITED STATES" -"2419392512","2419458047","AU","AUS","AUSTRALIA" -"2419458048","2419523583","NL","NLD","NETHERLANDS" -"2419523584","2419589119","AU","AUS","AUSTRALIA" -"2419589120","2419654655","FR","FRA","FRANCE" -"2419654656","2419720191","SE","SWE","SWEDEN" -"2419720192","2420047871","US","USA","UNITED STATES" -"2420047872","2420113407","SE","SWE","SWEDEN" -"2420113408","2420178943","PT","PRT","PORTUGAL" -"2420178944","2420244479","AT","AUT","AUSTRIA" -"2420244480","2420310015","NZ","NZL","NEW ZEALAND" -"2420310016","2420899839","US","USA","UNITED STATES" -"2420899840","2420965375","DE","DEU","GERMANY" -"2420965376","2421096447","US","USA","UNITED STATES" -"2421096448","2421161983","AU","AUS","AUSTRALIA" -"2421161984","2421293055","US","USA","UNITED STATES" -"2421293056","2421358591","GB","GBR","UNITED KINGDOM" -"2421358592","2421424127","US","USA","UNITED STATES" -"2421424128","2421489663","NO","NOR","NORWAY" -"2421489664","2421555199","CH","CHE","SWITZERLAND" -"2421555200","2421620735","US","USA","UNITED STATES" -"2421620736","2421686271","GB","GBR","UNITED KINGDOM" -"2421686272","2422145023","US","USA","UNITED STATES" -"2422145024","2422154239","NL","NLD","NETHERLANDS" -"2422154240","2422155263","US","USA","UNITED STATES" -"2422155264","2422161407","NL","NLD","NETHERLANDS" -"2422161408","2422163455","GB","GBR","UNITED KINGDOM" -"2422163456","2422165503","US","USA","UNITED STATES" -"2422165504","2422167551","HK","HKG","HONG KONG" -"2422167552","2422210559","NL","NLD","NETHERLANDS" -"2422210560","2422276095","US","USA","UNITED STATES" -"2422276096","2422341631","AU","AUS","AUSTRALIA" -"2422341632","2422407167","GB","GBR","UNITED KINGDOM" -"2422407168","2423128063","US","USA","UNITED STATES" -"2423128064","2423193599","AU","AUS","AUSTRALIA" -"2423193600","2423717887","US","USA","UNITED STATES" -"2423717888","2423783423","NL","NLD","NETHERLANDS" -"2423783424","2423848959","FJ","FJI","FIJI" -"2423848960","2423914495","US","USA","UNITED STATES" -"2423914496","2423980031","TR","TUR","TURKEY" -"2424045568","2424111103","GB","GBR","UNITED KINGDOM" -"2424111104","2424242175","US","USA","UNITED STATES" -"2424242176","2424307711","NO","NOR","NORWAY" -"2424307712","2424438783","US","USA","UNITED STATES" -"2424438784","2425159679","AU","AUS","AUSTRALIA" -"2425159680","2425421823","US","USA","UNITED STATES" -"2425421824","2425487359","DE","DEU","GERMANY" -"2425487360","2426667007","US","USA","UNITED STATES" -"2426667008","2426732543","NO","NOR","NORWAY" -"2426732544","2426798079","FR","FRA","FRANCE" -"2426798080","2426929151","US","USA","UNITED STATES" -"2426929152","2426994687","GB","GBR","UNITED KINGDOM" -"2426994688","2427256831","US","USA","UNITED STATES" -"2427256832","2427322367","GB","GBR","UNITED KINGDOM" -"2427322368","2427453439","US","USA","UNITED STATES" -"2427453440","2427584511","NO","NOR","NORWAY" -"2427584512","2427650047","GB","GBR","UNITED KINGDOM" -"2427650048","2427846655","NO","NOR","NORWAY" -"2427846656","2428567551","US","USA","UNITED STATES" -"2428567552","2428633087","NO","NOR","NORWAY" -"2428633088","2428698623","CA","CAN","CANADA" -"2428698624","2428960767","US","USA","UNITED STATES" -"2428960768","2429026303","MY","MYS","MALAYSIA" -"2429026304","2429091839","CH","CHE","SWITZERLAND" -"2429091840","2429288447","US","USA","UNITED STATES" -"2429288448","2429353983","FR","FRA","FRANCE" -"2429353984","2429419519","AU","AUS","AUSTRALIA" -"2429419520","2429485055","RU","RUS","RUSSIAN FEDERATION" -"2429485056","2429616127","US","USA","UNITED STATES" -"2429616128","2429681663","NL","NLD","NETHERLANDS" -"2429681664","2429878271","US","USA","UNITED STATES" -"2429878272","2429943807","JP","JPN","JAPAN" -"2429943808","2430009343","HK","HKG","HONG KONG" -"2430009344","2430205951","US","USA","UNITED STATES" -"2430205952","2430271487","AU","AUS","AUSTRALIA" -"2430271488","2432172031","US","USA","UNITED STATES" -"2432172032","2432237567","BE","BEL","BELGIUM" -"2432237568","2432630783","US","USA","UNITED STATES" -"2432696320","2433810431","NL","NLD","NETHERLANDS" -"2433810432","2433875967","GB","GBR","UNITED KINGDOM" -"2433875968","2436300799","NL","NLD","NETHERLANDS" -"2436300800","2436366335","GB","GBR","UNITED KINGDOM" -"2436366336","2436759551","NL","NLD","NETHERLANDS" -"2436759552","2436825087","GB","GBR","UNITED KINGDOM" -"2436825088","2447376383","NL","NLD","NETHERLANDS" -"2447376384","2447441919","GB","GBR","UNITED KINGDOM" -"2447441920","2447507455","DE","DEU","GERMANY" -"2447507456","2447572991","FR","FRA","FRANCE" -"2447572992","2447638527","GB","GBR","UNITED KINGDOM" -"2447638528","2447679819","DE","DEU","GERMANY" -"2447679820","2447679839","IT","ITA","ITALY" -"2447679840","2447704063","DE","DEU","GERMANY" -"2447704064","2447769599","GB","GBR","UNITED KINGDOM" -"2447769600","2447835135","DE","DEU","GERMANY" -"2447835136","2447900671","FR","FRA","FRANCE" -"2447900672","2447966207","CH","CHE","SWITZERLAND" -"2447966208","2448031743","GB","GBR","UNITED KINGDOM" -"2448031744","2448097279","CH","CHE","SWITZERLAND" -"2448097280","2448162815","SE","SWE","SWEDEN" -"2448162816","2448228351","HU","HUN","HUNGARY" -"2448228352","2448293887","PL","POL","POLAND" -"2448293888","2448359423","FR","FRA","FRANCE" -"2448359424","2448424959","GB","GBR","UNITED KINGDOM" -"2448424960","2448490495","FR","FRA","FRANCE" -"2448490496","2448556031","AT","AUT","AUSTRIA" -"2448556032","2448621567","FR","FRA","FRANCE" -"2448621568","2448687103","DE","DEU","GERMANY" -"2448687104","2448752639","AT","AUT","AUSTRIA" -"2448752640","2448818175","CH","CHE","SWITZERLAND" -"2448818176","2448883711","GB","GBR","UNITED KINGDOM" -"2448883712","2448922367","FI","FIN","FINLAND" -"2448922368","2448927487","NO","NOR","NORWAY" -"2448927488","2448949247","FI","FIN","FINLAND" -"2448949248","2449014783","FR","FRA","FRANCE" -"2449014784","2449080319","RU","RUS","RUSSIAN FEDERATION" -"2449080320","2449145855","CH","CHE","SWITZERLAND" -"2449145856","2449211391","SE","SWE","SWEDEN" -"2449211392","2449276927","CH","CHE","SWITZERLAND" -"2449276928","2449407999","DE","DEU","GERMANY" -"2449539072","2449604607","US","USA","UNITED STATES" -"2449604608","2449670143","NO","NOR","NORWAY" -"2449670144","2449735679","LU","LUX","LUXEMBOURG" -"2449735680","2449801215","CH","CHE","SWITZERLAND" -"2449801216","2450194431","US","USA","UNITED STATES" -"2450194432","2450259967","AU","AUS","AUSTRALIA" -"2450259968","2450718719","US","USA","UNITED STATES" -"2450718720","2450784255","FR","FRA","FRANCE" -"2450784256","2450849791","US","USA","UNITED STATES" -"2450849792","2450915327","SE","SWE","SWEDEN" -"2450915328","2452619263","US","USA","UNITED STATES" -"2452619264","2452684799","IT","ITA","ITALY" -"2452684800","2452750335","US","USA","UNITED STATES" -"2452750336","2452815871","NL","NLD","NETHERLANDS" -"2452815872","2452881407","JP","JPN","JAPAN" -"2452946944","2453143551","US","USA","UNITED STATES" -"2453143552","2453209087","JP","JPN","JAPAN" -"2453209088","2453340159","US","USA","UNITED STATES" -"2453340160","2453405695","NO","NOR","NORWAY" -"2453471232","2453536767","US","USA","UNITED STATES" -"2453536768","2453602303","AU","AUS","AUSTRALIA" -"2453602304","2453667839","US","USA","UNITED STATES" -"2453733376","2453798911","US","USA","UNITED STATES" -"2453864448","2453929983","CH","CHE","SWITZERLAND" -"2453929984","2454061055","US","USA","UNITED STATES" -"2454061056","2454126591","GB","GBR","UNITED KINGDOM" -"2454126592","2454192127","US","USA","UNITED STATES" -"2454192128","2454257663","NO","NOR","NORWAY" -"2454257664","2454388735","US","USA","UNITED STATES" -"2454388736","2454454271","SE","SWE","SWEDEN" -"2454454272","2454519807","US","USA","UNITED STATES" -"2454519808","2454585343","GB","GBR","UNITED KINGDOM" -"2454585344","2454716415","US","USA","UNITED STATES" -"2454716416","2454781951","GB","GBR","UNITED KINGDOM" -"2454781952","2454847487","FI","FIN","FINLAND" -"2454847488","2454851583","US","USA","UNITED STATES" -"2454851584","2454851839","DK","DNK","DENMARK" -"2454851840","2454853119","US","USA","UNITED STATES" -"2454853120","2454853375","DK","DNK","DENMARK" -"2454853376","2454887423","US","USA","UNITED STATES" -"2454887424","2454887679","DK","DNK","DENMARK" -"2454887680","2454913023","US","USA","UNITED STATES" -"2454913024","2454978559","CL","CHL","CHILE" -"2454978560","2455175167","US","USA","UNITED STATES" -"2455175168","2455240703","GB","GBR","UNITED KINGDOM" -"2455240704","2455371775","US","USA","UNITED STATES" -"2455437312","2455830527","US","USA","UNITED STATES" -"2455830528","2455896063","GB","GBR","UNITED KINGDOM" -"2455896064","2456027135","US","USA","UNITED STATES" -"2456027136","2456092671","IT","ITA","ITALY" -"2456092672","2456158207","GB","GBR","UNITED KINGDOM" -"2456158208","2456223743","CZ","CZE","CZECH REPUBLIC" -"2456223744","2456289279","BE","BEL","BELGIUM" -"2456289280","2456354815","NL","NLD","NETHERLANDS" -"2456354816","2456420351","GB","GBR","UNITED KINGDOM" -"2456485888","2456551423","DE","DEU","GERMANY" -"2456551424","2456616959","AT","AUT","AUSTRIA" -"2456616960","2456682495","CH","CHE","SWITZERLAND" -"2456682496","2456748031","HU","HUN","HUNGARY" -"2456748032","2456813567","US","USA","UNITED STATES" -"2456813568","2456879103","AT","AUT","AUSTRIA" -"2456879104","2457075711","US","USA","UNITED STATES" -"2457075712","2457141247","AU","AUS","AUSTRALIA" -"2457141248","2457206783","JP","JPN","JAPAN" -"2457206784","2457272319","AU","AUS","AUSTRALIA" -"2457272320","2457337855","FI","FIN","FINLAND" -"2457403392","2457599999","US","USA","UNITED STATES" -"2457600000","2457665535","GR","GRC","GREECE" -"2457665536","2458058751","US","USA","UNITED STATES" -"2458058752","2458124287","CA","CAN","CANADA" -"2458124288","2458189823","US","USA","UNITED STATES" -"2458189824","2458255359","IT","ITA","ITALY" -"2458255360","2458320895","BR","BRA","BRAZIL" -"2458320896","2458386431","US","USA","UNITED STATES" -"2458386432","2458451967","CH","CHE","SWITZERLAND" -"2458451968","2458648575","US","USA","UNITED STATES" -"2458648576","2458714111","DE","DEU","GERMANY" -"2458779648","2458910719","US","USA","UNITED STATES" -"2458910720","2458976255","AU","AUS","AUSTRALIA" -"2458976256","2459631615","US","USA","UNITED STATES" -"2459631616","2459697151","CL","CHL","CHILE" -"2459697152","2459828223","US","USA","UNITED STATES" -"2459893760","2459959295","CH","CHE","SWITZERLAND" -"2459959296","2460024831","US","USA","UNITED STATES" -"2460024832","2460090367","FI","FIN","FINLAND" -"2460090368","2460155903","GB","GBR","UNITED KINGDOM" -"2460155904","2460221439","US","USA","UNITED STATES" -"2460221440","2460286975","BR","BRA","BRAZIL" -"2460286976","2460549119","US","USA","UNITED STATES" -"2460549120","2460614655","GB","GBR","UNITED KINGDOM" -"2460614656","2460680191","US","USA","UNITED STATES" -"2460680192","2460745727","NZ","NZL","NEW ZEALAND" -"2460745728","2460811263","NO","NOR","NORWAY" -"2460811264","2460876799","SE","SWE","SWEDEN" -"2460876800","2460942335","US","USA","UNITED STATES" -"2460942336","2461007871","BE","BEL","BELGIUM" -"2461007872","2461138943","GB","GBR","UNITED KINGDOM" -"2461138944","2461204479","AU","AUS","AUSTRALIA" -"2461204480","2461270015","GB","GBR","UNITED KINGDOM" -"2461270016","2461401087","US","USA","UNITED STATES" -"2461466624","2461597695","US","USA","UNITED STATES" -"2461663232","2461794303","US","USA","UNITED STATES" -"2461794304","2461859839","GB","GBR","UNITED KINGDOM" -"2461859840","2461990911","US","USA","UNITED STATES" -"2461990912","2462056447","GB","GBR","UNITED KINGDOM" -"2462056448","2462121983","NO","NOR","NORWAY" -"2462121984","2462187519","PT","PRT","PORTUGAL" -"2462187520","2462253055","GB","GBR","UNITED KINGDOM" -"2462253056","2462384127","AU","AUS","AUSTRALIA" -"2462384128","2463236095","US","USA","UNITED STATES" -"2463236096","2463301631","AT","AUT","AUSTRIA" -"2463301632","2463367167","FI","FIN","FINLAND" -"2463432704","2463498239","NO","NOR","NORWAY" -"2463498240","2463629311","US","USA","UNITED STATES" -"2463629312","2463694847","CH","CHE","SWITZERLAND" -"2463694848","2463825919","US","USA","UNITED STATES" -"2463825920","2463891455","ES","ESP","SPAIN" -"2463891456","2463911935","LU","LUX","LUXEMBOURG" -"2463911936","2463916031","FR","FRA","FRANCE" -"2463916032","2463956991","LU","LUX","LUXEMBOURG" -"2463956992","2464022527","AU","AUS","AUSTRALIA" -"2464022528","2464153599","US","USA","UNITED STATES" -"2464153600","2464219135","NO","NOR","NORWAY" -"2464219136","2464284671","US","USA","UNITED STATES" -"2464284672","2464350207","VI","VIR","VIRGIN ISLANDS, U.S." -"2464350208","2464415743","GB","GBR","UNITED KINGDOM" -"2464415744","2464481279","CH","CHE","SWITZERLAND" -"2464481280","2464546815","US","USA","UNITED STATES" -"2464743424","2464808959","US","USA","UNITED STATES" -"2464808960","2464874495","DE","DEU","GERMANY" -"2464874496","2465660927","US","USA","UNITED STATES" -"2465726464","2465791999","CH","CHE","SWITZERLAND" -"2465792000","2465857535","FR","FRA","FRANCE" -"2465857536","2465923071","US","USA","UNITED STATES" -"2465988608","2466054143","US","USA","UNITED STATES" -"2466054144","2466119679","SE","SWE","SWEDEN" -"2466119680","2466185215","DE","DEU","GERMANY" -"2466316288","2466643967","US","USA","UNITED STATES" -"2466709504","2466775039","HU","HUN","HUNGARY" -"2466775040","2466840575","HK","HKG","HONG KONG" -"2466840576","2466906111","US","USA","UNITED STATES" -"2466906112","2466971647","AU","AUS","AUSTRALIA" -"2466971648","2467037183","US","USA","UNITED STATES" -"2467037184","2467102719","NL","NLD","NETHERLANDS" -"2467102720","2467233791","SE","SWE","SWEDEN" -"2467233792","2468020223","US","USA","UNITED STATES" -"2468020224","2468085759","GR","GRC","GREECE" -"2468085760","2468151295","JP","JPN","JAPAN" -"2468151296","2468174847","DK","DNK","DENMARK" -"2468174848","2468175359","NO","NOR","NORWAY" -"2468175360","2468189663","DK","DNK","DENMARK" -"2468189664","2468189695","GB","GBR","UNITED KINGDOM" -"2468189696","2468216831","DK","DNK","DENMARK" -"2468216832","2468282367","DE","DEU","GERMANY" -"2468282368","2468347903","US","USA","UNITED STATES" -"2468347904","2468478975","CZ","CZE","CZECH REPUBLIC" -"2468478976","2468937727","US","USA","UNITED STATES" -"2468937728","2469003263","AU","AUS","AUSTRALIA" -"2469003264","2469068799","US","USA","UNITED STATES" -"2469068800","2469134335","KR","KOR","REPUBLIC OF KOREA" -"2469134336","2469199871","SE","SWE","SWEDEN" -"2469199872","2469265407","RU","RUS","RUSSIAN FEDERATION" -"2469265408","2469396479","KR","KOR","REPUBLIC OF KOREA" -"2469396480","2469658623","US","USA","UNITED STATES" -"2469658624","2469724159","GR","GRC","GREECE" -"2469724160","2469789695","US","USA","UNITED STATES" -"2469789696","2469855231","DE","DEU","GERMANY" -"2469855232","2470182911","US","USA","UNITED STATES" -"2470182912","2470248447","CH","CHE","SWITZERLAND" -"2470248448","2470510591","US","USA","UNITED STATES" -"2470510592","2470576127","BR","BRA","BRAZIL" -"2470576128","2470641663","AU","AUS","AUSTRALIA" -"2470641664","2470707199","LU","LUX","LUXEMBOURG" -"2470707200","2470772735","GB","GBR","UNITED KINGDOM" -"2470772736","2470838271","AU","AUS","AUSTRALIA" -"2470838272","2471165951","US","USA","UNITED STATES" -"2471165952","2471231487","CH","CHE","SWITZERLAND" -"2471231488","2471297023","AU","AUS","AUSTRALIA" -"2471297024","2471362559","GB","GBR","UNITED KINGDOM" -"2471428096","2471690239","US","USA","UNITED STATES" -"2471690240","2471821311","ES","ESP","SPAIN" -"2471886848","2472083455","CH","CHE","SWITZERLAND" -"2472083456","2472148991","GB","GBR","UNITED KINGDOM" -"2472148992","2472214527","US","USA","UNITED STATES" -"2472214528","2472280063","RS","SRB","SERBIA" -"2472280064","2472345599","US","USA","UNITED STATES" -"2472345600","2472411135","BE","BEL","BELGIUM" -"2472411136","2472476671","FR","FRA","FRANCE" -"2472476672","2472542207","GR","GRC","GREECE" -"2472542208","2472607743","ES","ESP","SPAIN" -"2472607744","2472673279","US","USA","UNITED STATES" -"2472673280","2472869887","FR","FRA","FRANCE" -"2472869888","2472935423","US","USA","UNITED STATES" -"2472935424","2473000959","GR","GRC","GREECE" -"2473000960","2473394175","US","USA","UNITED STATES" -"2473394176","2473459711","AU","AUS","AUSTRALIA" -"2473525248","2473656319","NO","NOR","NORWAY" -"2473656320","2474049535","US","USA","UNITED STATES" -"2474049536","2474115071","GB","GBR","UNITED KINGDOM" -"2474115072","2474246143","US","USA","UNITED STATES" -"2474246144","2474377215","IT","ITA","ITALY" -"2474377216","2474442751","US","USA","UNITED STATES" -"2474442752","2474508287","AT","AUT","AUSTRIA" -"2474508288","2474573823","US","USA","UNITED STATES" -"2474573824","2474639359","FR","FRA","FRANCE" -"2474639360","2474901503","US","USA","UNITED STATES" -"2474901504","2474967039","AU","AUS","AUSTRALIA" -"2474967040","2475556863","US","USA","UNITED STATES" -"2475556864","2475622399","DE","DEU","GERMANY" -"2475622400","2475687935","GB","GBR","UNITED KINGDOM" -"2475687936","2475884543","US","USA","UNITED STATES" -"2475884544","2476277759","GB","GBR","UNITED KINGDOM" -"2476277760","2476474367","US","USA","UNITED STATES" -"2476474368","2476539903","ES","ESP","SPAIN" -"2476539904","2476605439","JP","JPN","JAPAN" -"2476605440","2476670975","NZ","NZL","NEW ZEALAND" -"2476670976","2476802047","US","USA","UNITED STATES" -"2476802048","2476867583","IL","ISR","ISRAEL" -"2476867584","2476998655","IT","ITA","ITALY" -"2476998656","2477195263","US","USA","UNITED STATES" -"2477195264","2477260799","CH","CHE","SWITZERLAND" -"2477260800","2477457407","US","USA","UNITED STATES" -"2477457408","2477522943","FR","FRA","FRANCE" -"2477522944","2477588479","DE","DEU","GERMANY" -"2477588480","2477654015","FR","FRA","FRANCE" -"2477654016","2477719551","US","USA","UNITED STATES" -"2477719552","2477785087","SK","SVK","SLOVAKIA" -"2477785088","2477850623","JP","JPN","JAPAN" -"2477850624","2478047231","US","USA","UNITED STATES" -"2478047232","2478112767","SE","SWE","SWEDEN" -"2478112768","2478178303","NL","NLD","NETHERLANDS" -"2478178304","2478309375","US","USA","UNITED STATES" -"2478309376","2478374911","GB","GBR","UNITED KINGDOM" -"2478374912","2478440447","US","USA","UNITED STATES" -"2478440448","2478505983","SE","SWE","SWEDEN" -"2478505984","2478571519","US","USA","UNITED STATES" -"2478571520","2478702591","GB","GBR","UNITED KINGDOM" -"2478702592","2478899199","US","USA","UNITED STATES" -"2478899200","2478964735","GB","GBR","UNITED KINGDOM" -"2479030272","2479095807","US","USA","UNITED STATES" -"2479095808","2479161343","FR","FRA","FRANCE" -"2479161344","2479226879","GB","GBR","UNITED KINGDOM" -"2479226880","2479357951","US","USA","UNITED STATES" -"2479357952","2479423487","AU","AUS","AUSTRALIA" -"2479423488","2479489023","GB","GBR","UNITED KINGDOM" -"2479489024","2479620095","US","USA","UNITED STATES" -"2479620096","2479685631","DE","DEU","GERMANY" -"2479685632","2479947775","US","USA","UNITED STATES" -"2479947776","2480013311","AU","AUS","AUSTRALIA" -"2480013312","2480078847","FR","FRA","FRANCE" -"2480078848","2480209919","AU","AUS","AUSTRALIA" -"2480209920","2480275455","SK","SVK","SLOVAKIA" -"2480275456","2480340991","SE","SWE","SWEDEN" -"2480340992","2480406527","FR","FRA","FRANCE" -"2480406528","2480668671","US","USA","UNITED STATES" -"2480668672","2480734207","SE","SWE","SWEDEN" -"2480734208","2481192959","US","USA","UNITED STATES" -"2481192960","2481455103","CZ","CZE","CZECH REPUBLIC" -"2481455104","2481520639","SK","SVK","SLOVAKIA" -"2481520640","2481848319","IL","ISR","ISRAEL" -"2481848320","2482175999","US","USA","UNITED STATES" -"2482176000","2482208767","FI","FIN","FINLAND" -"2482208768","2482216959","US","USA","UNITED STATES" -"2482216960","2482225151","FI","FIN","FINLAND" -"2482225152","2482233343","SG","SGP","SINGAPORE" -"2482233344","2482241535","CN","CHN","CHINA" -"2482241536","2482634751","US","USA","UNITED STATES" -"2482634752","2482700287","FR","FRA","FRANCE" -"2482700288","2482765823","CZ","CZE","CZECH REPUBLIC" -"2482765824","2482831359","IE","IRL","IRELAND" -"2482831360","2482962431","US","USA","UNITED STATES" -"2483093504","2483159039","US","USA","UNITED STATES" -"2483159040","2483224575","SE","SWE","SWEDEN" -"2483224576","2483290111","GB","GBR","UNITED KINGDOM" -"2483290112","2483421183","US","USA","UNITED STATES" -"2483421184","2483486719","HU","HUN","HUNGARY" -"2483486720","2486566911","US","USA","UNITED STATES" -"2486566912","2486632447","CH","CHE","SWITZERLAND" -"2486632448","2486697983","US","USA","UNITED STATES" -"2486697984","2486763519","AT","AUT","AUSTRIA" -"2486763520","2486960127","US","USA","UNITED STATES" -"2486960128","2487025663","FR","FRA","FRANCE" -"2487025664","2488205311","US","USA","UNITED STATES" -"2488205312","2488270847","GB","GBR","UNITED KINGDOM" -"2488270848","2488336383","US","USA","UNITED STATES" -"2488336384","2488401919","PL","POL","POLAND" -"2488401920","2488532991","NO","NOR","NORWAY" -"2488532992","2488795135","US","USA","UNITED STATES" -"2488795136","2488860671","GB","GBR","UNITED KINGDOM" -"2488860672","2489647103","US","USA","UNITED STATES" -"2489843712","2490236927","US","USA","UNITED STATES" -"2490236928","2490302463","LU","LUX","LUXEMBOURG" -"2490302464","2490695679","US","USA","UNITED STATES" -"2490695680","2490761215","CA","CAN","CANADA" -"2490761216","2491154431","NO","NOR","NORWAY" -"2491154432","2491875327","US","USA","UNITED STATES" -"2491875328","2492006399","SE","SWE","SWEDEN" -"2492006400","2492071935","US","USA","UNITED STATES" -"2492071936","2492137471","SE","SWE","SWEDEN" -"2492137472","2492203007","US","USA","UNITED STATES" -"2492203008","2492268543","NO","NOR","NORWAY" -"2492268544","2492399615","US","USA","UNITED STATES" -"2492399616","2492465151","FR","FRA","FRANCE" -"2492465152","2492530687","US","USA","UNITED STATES" -"2492530688","2492596223","AU","AUS","AUSTRALIA" -"2492596224","2492727295","US","USA","UNITED STATES" -"2492727296","2492792831","NL","NLD","NETHERLANDS" -"2492792832","2492923903","US","USA","UNITED STATES" -"2492923904","2492989439","OM","OMN","OMAN" -"2492989440","2493513727","US","USA","UNITED STATES" -"2493513728","2493579263","SE","SWE","SWEDEN" -"2493579264","2493644799","JP","JPN","JAPAN" -"2493644800","2494103551","US","USA","UNITED STATES" -"2494103552","2494169087","FR","FRA","FRANCE" -"2494169088","2494562303","US","USA","UNITED STATES" -"2494562304","2494627839","GB","GBR","UNITED KINGDOM" -"2494627840","2494889983","US","USA","UNITED STATES" -"2494889984","2494955519","GB","GBR","UNITED KINGDOM" -"2494955520","2495021055","AU","AUS","AUSTRALIA" -"2495021056","2495152127","US","USA","UNITED STATES" -"2495217664","2495283199","US","USA","UNITED STATES" -"2495283200","2495348735","CH","CHE","SWITZERLAND" -"2495348736","2495807487","US","USA","UNITED STATES" -"2495807488","2495873023","AU","AUS","AUSTRALIA" -"2495873024","2495938559","CH","CHE","SWITZERLAND" -"2495938560","2496004095","GB","GBR","UNITED KINGDOM" -"2496004096","2496069631","AT","AUT","AUSTRIA" -"2496069632","2496135167","US","USA","UNITED STATES" -"2496135168","2496200703","NL","NLD","NETHERLANDS" -"2496200704","2497682431","MX","MEX","MEXICO" -"2497682432","2497683455","EC","ECU","ECUADOR" -"2497683456","2498464415","MX","MEX","MEXICO" -"2498464416","2498464431","US","USA","UNITED STATES" -"2498464432","2498475007","MX","MEX","MEXICO" -"2498475008","2498476031","EC","ECU","ECUADOR" -"2498476032","2499477503","MX","MEX","MEXICO" -"2499477504","2499543039","DE","DEU","GERMANY" -"2499543040","2499608575","NL","NLD","NETHERLANDS" -"2499608576","2499674111","GB","GBR","UNITED KINGDOM" -"2499674112","2499739647","US","USA","UNITED STATES" -"2499870720","2500001791","US","USA","UNITED STATES" -"2500067328","2501574655","US","USA","UNITED STATES" -"2501640192","2503016447","US","USA","UNITED STATES" -"2503016448","2503081983","IL","ISR","ISRAEL" -"2503081984","2503671807","US","USA","UNITED STATES" -"2503671808","2503737343","NL","NLD","NETHERLANDS" -"2503737344","2503868415","US","USA","UNITED STATES" -"2503933952","2506293247","US","USA","UNITED STATES" -"2506293248","2506358783","CA","CAN","CANADA" -"2506358784","2508062719","US","USA","UNITED STATES" -"2508128256","2508455935","US","USA","UNITED STATES" -"2508455936","2508521471","IT","ITA","ITALY" -"2508521472","2508587007","CH","CHE","SWITZERLAND" -"2508587008","2508652543","BE","BEL","BELGIUM" -"2508652544","2508718079","AU","AUS","AUSTRALIA" -"2508718080","2508914687","US","USA","UNITED STATES" -"2508914688","2508980223","IT","ITA","ITALY" -"2509045760","2509242367","US","USA","UNITED STATES" -"2509242368","2509307903","AU","AUS","AUSTRALIA" -"2509307904","2509373439","US","USA","UNITED STATES" -"2509373440","2509438975","NL","NLD","NETHERLANDS" -"2509504512","2509570047","AT","AUT","AUSTRIA" -"2509570048","2509832191","US","USA","UNITED STATES" -"2509832192","2509897727","IE","IRL","IRELAND" -"2509963264","2510028799","GB","GBR","UNITED KINGDOM" -"2510028800","2510094335","PL","POL","POLAND" -"2510094336","2510159871","IE","IRL","IRELAND" -"2510159872","2510749695","US","USA","UNITED STATES" -"2510749696","2510815231","AU","AUS","AUSTRALIA" -"2510815232","2510946303","US","USA","UNITED STATES" -"2510946304","2511011839","GB","GBR","UNITED KINGDOM" -"2511011840","2511077375","AU","AUS","AUSTRALIA" -"2511142912","2511339519","US","USA","UNITED STATES" -"2511339520","2511405055","AU","AUS","AUSTRALIA" -"2511405056","2512715775","GB","GBR","UNITED KINGDOM" -"2512715776","2512781311","FI","FIN","FINLAND" -"2512781312","2512912383","US","USA","UNITED STATES" -"2512977920","2513502207","DE","DEU","GERMANY" -"2513502208","2513567743","NO","NOR","NORWAY" -"2513633280","2513698815","DE","DEU","GERMANY" -"2513698816","2513764351","DK","DNK","DENMARK" -"2513764352","2514419711","DE","DEU","GERMANY" -"2514419712","2514485247","GB","GBR","UNITED KINGDOM" -"2514485248","2514514431","DE","DEU","GERMANY" -"2514514432","2514514687","NL","NLD","NETHERLANDS" -"2514514688","2516254719","DE","DEU","GERMANY" -"2516254720","2516320255","FR","FRA","FRANCE" -"2516320256","2516451327","US","USA","UNITED STATES" -"2516451328","2516516863","GB","GBR","UNITED KINGDOM" -"2516647936","2523201535","JP","JPN","JAPAN" -"2523201536","2523267071","AU","AUS","AUSTRALIA" -"2523267072","2523529215","US","USA","UNITED STATES" -"2523529216","2523594751","NO","NOR","NORWAY" -"2523594752","2523660287","AT","AUT","AUSTRIA" -"2523660288","2524119039","US","USA","UNITED STATES" -"2524315648","2524512255","US","USA","UNITED STATES" -"2524643328","2524971007","US","USA","UNITED STATES" -"2524971008","2525036543","ES","ESP","SPAIN" -"2525102080","2525233151","US","USA","UNITED STATES" -"2525233152","2525298687","SE","SWE","SWEDEN" -"2525298688","2525626367","US","USA","UNITED STATES" -"2525757440","2525822975","GR","GRC","GREECE" -"2525822976","2526085119","US","USA","UNITED STATES" -"2526085120","2526216191","IT","ITA","ITALY" -"2526216192","2526412799","US","USA","UNITED STATES" -"2526412800","2526478335","KR","KOR","REPUBLIC OF KOREA" -"2526478336","2526543871","AU","AUS","AUSTRALIA" -"2526543872","2526937087","US","USA","UNITED STATES" -"2526937088","2527002623","BE","BEL","BELGIUM" -"2527002624","2527133695","US","USA","UNITED STATES" -"2527133696","2527461375","BR","BRA","BRAZIL" -"2527461376","2527920127","US","USA","UNITED STATES" -"2527920128","2527985663","AU","AUS","AUSTRALIA" -"2527985664","2528051199","US","USA","UNITED STATES" -"2528051200","2528116735","FR","FRA","FRANCE" -"2528116736","2528247807","US","USA","UNITED STATES" -"2528247808","2528313343","IT","ITA","ITALY" -"2528313344","2528575487","US","USA","UNITED STATES" -"2528575488","2528641023","KR","KOR","REPUBLIC OF KOREA" -"2528641024","2528706559","US","USA","UNITED STATES" -"2528706560","2529034239","VE","VEN","VENEZUELA" -"2529034240","2529099775","US","USA","UNITED STATES" -"2529099776","2529165311","AU","AUS","AUSTRALIA" -"2529165312","2529492991","US","USA","UNITED STATES" -"2529492992","2529558527","KR","KOR","REPUBLIC OF KOREA" -"2529558528","2529886207","US","USA","UNITED STATES" -"2529886208","2529951743","AU","AUS","AUSTRALIA" -"2529951744","2530017279","GB","GBR","UNITED KINGDOM" -"2530017280","2530082815","CH","CHE","SWITZERLAND" -"2530082816","2530148351","NZ","NZL","NEW ZEALAND" -"2530148352","2530213887","AU","AUS","AUSTRALIA" -"2530213888","2530541567","US","USA","UNITED STATES" -"2530541568","2530607103","CH","CHE","SWITZERLAND" -"2530607104","2530672639","ES","ESP","SPAIN" -"2530672640","2530803711","US","USA","UNITED STATES" -"2530803712","2530869247","IT","ITA","ITALY" -"2530869248","2531196927","US","USA","UNITED STATES" -"2531262464","2531459071","US","USA","UNITED STATES" -"2531459072","2531524607","SE","SWE","SWEDEN" -"2531524608","2531590143","US","USA","UNITED STATES" -"2531590144","2531655679","AU","AUS","AUSTRALIA" -"2531655680","2532048895","US","USA","UNITED STATES" -"2532048896","2532114431","SE","SWE","SWEDEN" -"2532114432","2532179967","GB","GBR","UNITED KINGDOM" -"2532179968","2532376575","US","USA","UNITED STATES" -"2532376576","2532442111","ES","ESP","SPAIN" -"2532442112","2532507647","FR","FRA","FRANCE" -"2532507648","2532573183","US","USA","UNITED STATES" -"2532573184","2532638719","ES","ESP","SPAIN" -"2532638720","2533031935","US","USA","UNITED STATES" -"2533031936","2533097471","BE","BEL","BELGIUM" -"2533097472","2533228543","US","USA","UNITED STATES" -"2533228544","2533294079","PL","POL","POLAND" -"2533425152","2539978751","IT","ITA","ITALY" -"2539978752","2540240895","US","USA","UNITED STATES" -"2540240896","2540306431","FI","FIN","FINLAND" -"2540306432","2540896255","US","USA","UNITED STATES" -"2540896256","2540961791","GB","GBR","UNITED KINGDOM" -"2540961792","2541223935","US","USA","UNITED STATES" -"2541223936","2541289471","CH","CHE","SWITZERLAND" -"2541289472","2541682687","US","USA","UNITED STATES" -"2541682688","2541748223","CH","CHE","SWITZERLAND" -"2541748224","2541813759","US","USA","UNITED STATES" -"2541813760","2541879295","GB","GBR","UNITED KINGDOM" -"2541879296","2541944831","AU","AUS","AUSTRALIA" -"2541944832","2542075903","US","USA","UNITED STATES" -"2542075904","2542141439","GB","GBR","UNITED KINGDOM" -"2542141440","2542206975","US","USA","UNITED STATES" -"2542272512","2542338047","DE","DEU","GERMANY" -"2542338048","2543583231","US","USA","UNITED STATES" -"2543583232","2543648767","SE","SWE","SWEDEN" -"2543648768","2543714303","NO","NOR","NORWAY" -"2543714304","2543779839","JP","JPN","JAPAN" -"2543779840","2544500735","US","USA","UNITED STATES" -"2544500736","2544566271","GB","GBR","UNITED KINGDOM" -"2544566272","2544631807","US","USA","UNITED STATES" -"2544631808","2544697343","JP","JPN","JAPAN" -"2544697344","2544828415","US","USA","UNITED STATES" -"2544893952","2544959487","GB","GBR","UNITED KINGDOM" -"2544959488","2545025023","SE","SWE","SWEDEN" -"2545025024","2545090559","AU","AUS","AUSTRALIA" -"2545090560","2545156095","US","USA","UNITED STATES" -"2545156096","2545221631","GB","GBR","UNITED KINGDOM" -"2545221632","2545287167","US","USA","UNITED STATES" -"2545287168","2545352703","GB","GBR","UNITED KINGDOM" -"2545352704","2545418239","CH","CHE","SWITZERLAND" -"2545418240","2545483775","NL","NLD","NETHERLANDS" -"2545483776","2545614847","US","USA","UNITED STATES" -"2545614848","2545680383","NO","NOR","NORWAY" -"2545680384","2545745919","US","USA","UNITED STATES" -"2545745920","2545811455","DE","DEU","GERMANY" -"2545811456","2547187711","US","USA","UNITED STATES" -"2547187712","2547318783","GB","GBR","UNITED KINGDOM" -"2547318784","2547515391","US","USA","UNITED STATES" -"2550202368","2554462207","US","USA","UNITED STATES" -"2554462208","2554527743","HU","HUN","HUNGARY" -"2554527744","2554789887","US","USA","UNITED STATES" -"2554789888","2554855423","GB","GBR","UNITED KINGDOM" -"2554855424","2554920959","US","USA","UNITED STATES" -"2554920960","2554986495","DK","DNK","DENMARK" -"2554986496","2555052031","CL","CHL","CHILE" -"2555052032","2555117567","US","USA","UNITED STATES" -"2555117568","2555183103","AU","AUS","AUSTRALIA" -"2555183104","2555248639","FR","FRA","FRANCE" -"2555248640","2555314175","GB","GBR","UNITED KINGDOM" -"2555314176","2555445247","US","USA","UNITED STATES" -"2555445248","2555510783","FR","FRA","FRANCE" -"2555510784","2555576319","US","USA","UNITED STATES" -"2555576320","2555641855","AU","AUS","AUSTRALIA" -"2555641856","2555707391","BR","BRA","BRAZIL" -"2555707392","2555903999","US","USA","UNITED STATES" -"2555904000","2555969535","CH","CHE","SWITZERLAND" -"2555969536","2556035071","FR","FRA","FRANCE" -"2556035072","2556100607","NO","NOR","NORWAY" -"2556100608","2556166143","AU","AUS","AUSTRALIA" -"2556166144","2556231679","BR","BRA","BRAZIL" -"2556231680","2556362751","NO","NOR","NORWAY" -"2556362752","2556428287","DK","DNK","DENMARK" -"2556428288","2556493823","CH","CHE","SWITZERLAND" -"2556493824","2556559359","US","USA","UNITED STATES" -"2556559360","2556624895","AU","AUS","AUSTRALIA" -"2556624896","2556690431","KR","KOR","REPUBLIC OF KOREA" -"2556690432","2556755967","US","USA","UNITED STATES" -"2556755968","2556821503","HK","HKG","HONG KONG" -"2556821504","2556887039","SG","SGP","SINGAPORE" -"2556887040","2557018111","HK","HKG","HONG KONG" -"2557018112","2557083647","GB","GBR","UNITED KINGDOM" -"2557542400","2557607935","US","USA","UNITED STATES" -"2557607936","2557673471","GB","GBR","UNITED KINGDOM" -"2557673472","2557739007","DK","DNK","DENMARK" -"2557739008","2557870079","US","USA","UNITED STATES" -"2557870080","2557935615","ID","IDN","INDONESIA" -"2557935616","2558918655","US","USA","UNITED STATES" -"2558918656","2558984191","GB","GBR","UNITED KINGDOM" -"2558984192","2559246335","US","USA","UNITED STATES" -"2559246336","2559311871","CL","CHL","CHILE" -"2559311872","2559508479","US","USA","UNITED STATES" -"2559508480","2559574015","DE","DEU","GERMANY" -"2559574016","2559770623","US","USA","UNITED STATES" -"2559770624","2559836159","AU","AUS","AUSTRALIA" -"2559836160","2559901695","US","USA","UNITED STATES" -"2559901696","2559967231","KR","KOR","REPUBLIC OF KOREA" -"2559967232","2560032767","GB","GBR","UNITED KINGDOM" -"2560032768","2560098303","US","USA","UNITED STATES" -"2560098304","2560163839","BE","BEL","BELGIUM" -"2560163840","2560229375","NZ","NZL","NEW ZEALAND" -"2560229376","2560360447","US","USA","UNITED STATES" -"2560425984","2561015807","US","USA","UNITED STATES" -"2561671168","2563244031","US","USA","UNITED STATES" -"2563768320","2564947967","US","USA","UNITED STATES" -"2564947968","2565013503","SG","SGP","SINGAPORE" -"2565013504","2565210111","US","USA","UNITED STATES" -"2566979584","2567045119","FI","FIN","FINLAND" -"2567045120","2567110655","US","USA","UNITED STATES" -"2567176192","2567241727","US","USA","UNITED STATES" -"2567241728","2567307263","SI","SVN","SLOVENIA" -"2567307264","2567897087","US","USA","UNITED STATES" -"2567897088","2567962623","NO","NOR","NORWAY" -"2567962624","2568028159","US","USA","UNITED STATES" -"2568028160","2568093695","DE","DEU","GERMANY" -"2568093696","2568159231","US","USA","UNITED STATES" -"2568159232","2568224767","PL","POL","POLAND" -"2568224768","2568290303","SG","SGP","SINGAPORE" -"2568290304","2569142271","US","USA","UNITED STATES" -"2569404416","2569797631","US","USA","UNITED STATES" -"2569797632","2569863167","NO","NOR","NORWAY" -"2569863168","2569928703","CH","CHE","SWITZERLAND" -"2569928704","2569989631","US","USA","UNITED STATES" -"2569989632","2569989888","CH","CHE","SWITZERLAND" -"2569989889","2572681215","US","USA","UNITED STATES" -"2572681216","2572746751","SE","SWE","SWEDEN" -"2572746752","2572943359","US","USA","UNITED STATES" -"2572943360","2573402111","DE","DEU","GERMANY" -"2573467648","2573533183","DE","DEU","GERMANY" -"2573598720","2573926399","US","USA","UNITED STATES" -"2573926400","2573991935","AU","AUS","AUSTRALIA" -"2573991936","2574123007","CH","CHE","SWITZERLAND" -"2574123008","2574188543","NO","NOR","NORWAY" -"2574188544","2574254079","NZ","NZL","NEW ZEALAND" -"2574254080","2574315007","SE","SWE","SWEDEN" -"2574315008","2574315263","NO","NOR","NORWAY" -"2574315264","2574319615","SE","SWE","SWEDEN" -"2574319616","2574647295","US","USA","UNITED STATES" -"2583756800","2584018943","US","USA","UNITED STATES" -"2584018944","2584084479","CA","CAN","CANADA" -"2584084480","2584215551","US","USA","UNITED STATES" -"2584215552","2584281087","GB","GBR","UNITED KINGDOM" -"2584281088","2584346623","US","USA","UNITED STATES" -"2584346624","2584412159","KR","KOR","REPUBLIC OF KOREA" -"2584412160","2584477695","CA","CAN","CANADA" -"2584477696","2584608767","US","USA","UNITED STATES" -"2584608768","2584805375","CH","CHE","SWITZERLAND" -"2584805376","2585001983","US","USA","UNITED STATES" -"2585001984","2585067519","CA","CAN","CANADA" -"2585067520","2585788415","US","USA","UNITED STATES" -"2585788416","2585853951","GB","GBR","UNITED KINGDOM" -"2585853952","2585985023","JP","JPN","JAPAN" -"2585985024","2587951103","US","USA","UNITED STATES" -"2600534016","2600665087","US","USA","UNITED STATES" -"2600665088","2600730623","CA","CAN","CANADA" -"2600730624","2600796159","NO","NOR","NORWAY" -"2600796160","2601123839","US","USA","UNITED STATES" -"2601123840","2601189375","CA","CAN","CANADA" -"2601320448","2601451519","US","USA","UNITED STATES" -"2601451520","2601517055","CA","CAN","CANADA" -"2601517056","2602565631","US","USA","UNITED STATES" -"2602565632","2602631167","NZ","NZL","NEW ZEALAND" -"2602631168","2604007423","US","USA","UNITED STATES" -"2604007424","2604072959","ES","ESP","SPAIN" -"2604072960","2604138495","NO","NOR","NORWAY" -"2604138496","2604204031","DE","DEU","GERMANY" -"2604204032","2604335103","US","USA","UNITED STATES" -"2604335104","2604400639","NZ","NZL","NEW ZEALAND" -"2604400640","2604466175","AU","AUS","AUSTRALIA" -"2604466176","2604531711","US","USA","UNITED STATES" -"2604531712","2604597247","CA","CAN","CANADA" -"2604597248","2604793855","US","USA","UNITED STATES" -"2604793856","2604859391","CH","CHE","SWITZERLAND" -"2604859392","2604990463","US","USA","UNITED STATES" -"2604990464","2605055999","SG","SGP","SINGAPORE" -"2605056000","2605121535","US","USA","UNITED STATES" -"2605121536","2605187071","AU","AUS","AUSTRALIA" -"2605187072","2605252607","US","USA","UNITED STATES" -"2605252608","2605318143","AT","AUT","AUSTRIA" -"2605318144","2606301183","US","USA","UNITED STATES" -"2606366720","2606563327","US","USA","UNITED STATES" -"2606628864","2607349759","US","USA","UNITED STATES" -"2607349760","2607415295","CH","CHE","SWITZERLAND" -"2607415296","2609053695","US","USA","UNITED STATES" -"2609053696","2609119231","GB","GBR","UNITED KINGDOM" -"2609119232","2609184767","FR","FRA","FRANCE" -"2609184768","2609250303","DE","DEU","GERMANY" -"2609250304","2609381375","US","USA","UNITED STATES" -"2609381376","2609446911","GB","GBR","UNITED KINGDOM" -"2609446912","2609512447","DK","DNK","DENMARK" -"2609512448","2609643519","US","USA","UNITED STATES" -"2609643520","2609709055","GB","GBR","UNITED KINGDOM" -"2609709056","2609840127","US","USA","UNITED STATES" -"2609840128","2609971199","AU","AUS","AUSTRALIA" -"2609971200","2610036735","GB","GBR","UNITED KINGDOM" -"2610036736","2610823167","US","USA","UNITED STATES" -"2610823168","2610888703","PL","POL","POLAND" -"2610954240","2611019775","JP","JPN","JAPAN" -"2611019776","2612592639","US","USA","UNITED STATES" -"2612592640","2612658175","IT","ITA","ITALY" -"2612658176","2612723711","US","USA","UNITED STATES" -"2612723712","2612789247","AU","AUS","AUSTRALIA" -"2612789248","2613051391","US","USA","UNITED STATES" -"2613051392","2613116927","GB","GBR","UNITED KINGDOM" -"2613116928","2613182463","US","USA","UNITED STATES" -"2613182464","2613247999","CA","CAN","CANADA" -"2613248000","2613313535","US","USA","UNITED STATES" -"2613379072","2613444607","US","USA","UNITED STATES" -"2613444608","2613510143","GB","GBR","UNITED KINGDOM" -"2613510144","2613706751","US","USA","UNITED STATES" -"2613706752","2613772287","GB","GBR","UNITED KINGDOM" -"2613772288","2613837823","US","USA","UNITED STATES" -"2613837824","2613903359","NL","NLD","NETHERLANDS" -"2613903360","2613968895","AU","AUS","AUSTRALIA" -"2613968896","2614034431","US","USA","UNITED STATES" -"2614034432","2614099967","GR","GRC","GREECE" -"2614099968","2614165503","US","USA","UNITED STATES" -"2614165504","2614231039","NO","NOR","NORWAY" -"2614231040","2614296575","ES","ESP","SPAIN" -"2614296576","2614362111","BR","BRA","BRAZIL" -"2614362112","2615083007","US","USA","UNITED STATES" -"2615083008","2615148543","TR","TUR","TURKEY" -"2615148544","2615345151","US","USA","UNITED STATES" -"2615345152","2615410687","NO","NOR","NORWAY" -"2615410688","2615476223","CH","CHE","SWITZERLAND" -"2615476224","2615541759","US","USA","UNITED STATES" -"2615541760","2615607295","KR","KOR","REPUBLIC OF KOREA" -"2615607296","2615672831","GB","GBR","UNITED KINGDOM" -"2616262656","2616524799","US","USA","UNITED STATES" -"2616524800","2616590335","GB","GBR","UNITED KINGDOM" -"2616590336","2616786943","US","USA","UNITED STATES" -"2616786944","2616852479","GB","GBR","UNITED KINGDOM" -"2616852480","2616918015","DE","DEU","GERMANY" -"2616983552","2617049087","US","USA","UNITED STATES" -"2617049088","2617114623","IT","ITA","ITALY" -"2617114880","2617115135","US","USA","UNITED STATES" -"2617147392","2617148159","US","USA","UNITED STATES" -"2617311232","2617769983","US","USA","UNITED STATES" -"2617835520","2617901055","US","USA","UNITED STATES" -"2617901056","2617966591","FI","FIN","FINLAND" -"2617966592","2618032127","CA","CAN","CANADA" -"2618032128","2618097663","US","USA","UNITED STATES" -"2618097664","2618163199","NZ","NZL","NEW ZEALAND" -"2618163200","2618228735","IT","ITA","ITALY" -"2618228736","2618294271","US","USA","UNITED STATES" -"2618294272","2618359807","AU","AUS","AUSTRALIA" -"2618359808","2618425343","PL","POL","POLAND" -"2618425344","2618490879","FR","FRA","FRANCE" -"2618490880","2618687487","US","USA","UNITED STATES" -"2618687488","2618753023","AU","AUS","AUSTRALIA" -"2618753024","2618884095","US","USA","UNITED STATES" -"2618884096","2618949631","CH","CHE","SWITZERLAND" -"2618949632","2619080703","US","USA","UNITED STATES" -"2619080704","2619146239","FR","FRA","FRANCE" -"2619146240","2619277311","US","USA","UNITED STATES" -"2619277312","2619342847","BN","BRN","BRUNEI DARUSSALAM" -"2619342848","2619473919","US","USA","UNITED STATES" -"2619473920","2619539455","CA","CAN","CANADA" -"2619539456","2619604991","ES","ESP","SPAIN" -"2619604992","2619736063","US","USA","UNITED STATES" -"2619801600","2620063743","US","USA","UNITED STATES" -"2620063744","2620129279","GB","GBR","UNITED KINGDOM" -"2620129280","2620194815","CA","CAN","CANADA" -"2620194816","2620391423","US","USA","UNITED STATES" -"2620391424","2620456959","GB","GBR","UNITED KINGDOM" -"2620456960","2620522495","SE","SWE","SWEDEN" -"2620522496","2620588031","AU","AUS","AUSTRALIA" -"2620588032","2620653567","SE","SWE","SWEDEN" -"2620653568","2620719103","NO","NOR","NORWAY" -"2620719104","2620784639","US","USA","UNITED STATES" -"2620784640","2620850175","IT","ITA","ITALY" -"2620850176","2620981247","US","USA","UNITED STATES" -"2620981248","2621046783","CA","CAN","CANADA" -"2621046784","2621112319","AT","AUT","AUSTRIA" -"2621112320","2621177855","NZ","NZL","NEW ZEALAND" -"2621177856","2621243391","US","USA","UNITED STATES" -"2621243392","2621308927","GB","GBR","UNITED KINGDOM" -"2621308928","2621374463","NZ","NZL","NEW ZEALAND" -"2621374464","2621636607","US","USA","UNITED STATES" -"2621636608","2621702143","DE","DEU","GERMANY" -"2621702144","2621767679","US","USA","UNITED STATES" -"2621767680","2621833215","NZ","NZL","NEW ZEALAND" -"2621833216","2622423039","US","USA","UNITED STATES" -"2622423040","2622488575","CA","CAN","CANADA" -"2622488576","2622685183","US","USA","UNITED STATES" -"2622685184","2622750719","NL","NLD","NETHERLANDS" -"2622750720","2623602687","US","USA","UNITED STATES" -"2623602688","2623668223","CL","CHL","CHILE" -"2623668224","2624192511","US","USA","UNITED STATES" -"2624192512","2624258047","CH","CHE","SWITZERLAND" -"2624258048","2624716799","US","USA","UNITED STATES" -"2624716800","2624782335","NL","NLD","NETHERLANDS" -"2624782336","2624847871","CH","CHE","SWITZERLAND" -"2624847872","2624913407","NO","NOR","NORWAY" -"2624913408","2624978943","US","USA","UNITED STATES" -"2624978944","2625044479","FR","FRA","FRANCE" -"2625044480","2625961983","US","USA","UNITED STATES" -"2625961984","2626027519","LU","LUX","LUXEMBOURG" -"2626027520","2626093055","US","USA","UNITED STATES" -"2626093056","2626158591","CH","CHE","SWITZERLAND" -"2626158592","2626879487","US","USA","UNITED STATES" -"2626879488","2626945023","KR","KOR","REPUBLIC OF KOREA" -"2626945024","2627010559","IT","ITA","ITALY" -"2627010560","2627076095","NZ","NZL","NEW ZEALAND" -"2627076096","2627141631","NL","NLD","NETHERLANDS" -"2627141632","2627403775","US","USA","UNITED STATES" -"2634088448","2635202559","JP","JPN","JAPAN" -"2635268096","2635333631","JP","JPN","JAPAN" -"2635399168","2635530239","US","USA","UNITED STATES" -"2635530240","2635595775","FR","FRA","FRANCE" -"2635595776","2635661311","FI","FIN","FINLAND" -"2635661312","2635726847","PL","POL","POLAND" -"2635726848","2635792383","CH","CHE","SWITZERLAND" -"2635792384","2635988991","IT","ITA","ITALY" -"2635988992","2638020607","US","USA","UNITED STATES" -"2638086144","2638151679","US","USA","UNITED STATES" -"2638151680","2639462399","JP","JPN","JAPAN" -"2639462400","2639593471","GB","GBR","UNITED KINGDOM" -"2639593472","2639659007","AU","AUS","AUSTRALIA" -"2639659008","2639724543","BR","BRA","BRAZIL" -"2639724544","2639790079","US","USA","UNITED STATES" -"2639790080","2639855615","ES","ESP","SPAIN" -"2639855616","2640052223","US","USA","UNITED STATES" -"2640052224","2640117759","AR","ARG","ARGENTINA" -"2640117760","2640183295","US","USA","UNITED STATES" -"2640183296","2640248831","FI","FIN","FINLAND" -"2640248832","2640314367","US","USA","UNITED STATES" -"2640314368","2640379903","SE","SWE","SWEDEN" -"2640379904","2640445439","CA","CAN","CANADA" -"2640445440","2640510975","US","USA","UNITED STATES" -"2640510976","2640576511","FR","FRA","FRANCE" -"2640576512","2640642047","EC","ECU","ECUADOR" -"2640642048","2641821695","JP","JPN","JAPAN" -"2641887232","2641952767","JP","JPN","JAPAN" -"2641952768","2642018303","US","USA","UNITED STATES" -"2642083840","2642149375","US","USA","UNITED STATES" -"2642149376","2642214911","FI","FIN","FINLAND" -"2642214912","2642280447","SE","SWE","SWEDEN" -"2642280448","2642411519","US","USA","UNITED STATES" -"2642411520","2642477055","AU","AUS","AUSTRALIA" -"2642477056","2642542591","FI","FIN","FINLAND" -"2642542592","2642935807","US","USA","UNITED STATES" -"2642935808","2643001343","FR","FRA","FRANCE" -"2643001344","2643066879","US","USA","UNITED STATES" -"2643066880","2643132415","IT","ITA","ITALY" -"2643132416","2643197951","US","USA","UNITED STATES" -"2643197952","2643263487","GB","GBR","UNITED KINGDOM" -"2643263488","2643460095","US","USA","UNITED STATES" -"2643460096","2643525631","FI","FIN","FINLAND" -"2643525632","2643722239","US","USA","UNITED STATES" -"2643787776","2644180991","US","USA","UNITED STATES" -"2644180992","2644246527","AU","AUS","AUSTRALIA" -"2644312064","2644377599","IS","ISL","ICELAND" -"2644377600","2644443135","PL","POL","POLAND" -"2644443136","2644508671","FR","FRA","FRANCE" -"2644508672","2644574207","US","USA","UNITED STATES" -"2644574208","2644639743","CH","CHE","SWITZERLAND" -"2644639744","2644770815","DE","DEU","GERMANY" -"2644770816","2644836351","BE","BEL","BELGIUM" -"2644836352","2644967423","US","USA","UNITED STATES" -"2644967424","2645098495","AT","AUT","AUSTRIA" -"2645098496","2645164031","FR","FRA","FRANCE" -"2645164032","2645229567","US","USA","UNITED STATES" -"2645229568","2645295103","SE","SWE","SWEDEN" -"2645295104","2645360639","FR","FRA","FRANCE" -"2645360640","2645426175","GB","GBR","UNITED KINGDOM" -"2645426176","2645622783","US","USA","UNITED STATES" -"2645622784","2645688319","AT","AUT","AUSTRIA" -"2645688320","2645753855","US","USA","UNITED STATES" -"2645753856","2645819391","TH","THA","THAILAND" -"2645819392","2645884927","SE","SWE","SWEDEN" -"2645884928","2645950463","HU","HUN","HUNGARY" -"2645950464","2646212607","US","USA","UNITED STATES" -"2646212608","2646278143","RU","RUS","RUSSIAN FEDERATION" -"2646278144","2646474751","US","USA","UNITED STATES" -"2646474752","2646540287","IE","IRL","IRELAND" -"2646540288","2646605823","US","USA","UNITED STATES" -"2646605824","2646671359","JP","JPN","JAPAN" -"2646671360","2646736895","BE","BEL","BELGIUM" -"2646736896","2646933503","US","USA","UNITED STATES" -"2646933504","2646999039","KR","KOR","REPUBLIC OF KOREA" -"2646999040","2647130111","US","USA","UNITED STATES" -"2647130112","2647195647","FI","FIN","FINLAND" -"2647195648","2647326719","US","USA","UNITED STATES" -"2647326720","2647392255","GB","GBR","UNITED KINGDOM" -"2647392256","2647457791","US","USA","UNITED STATES" -"2647457792","2647523327","JP","JPN","JAPAN" -"2647523328","2647851007","US","USA","UNITED STATES" -"2647851008","2647916543","AU","AUS","AUSTRALIA" -"2647916544","2648899583","US","USA","UNITED STATES" -"2648899584","2648965119","IN","IND","INDIA" -"2648965120","2649030655","GB","GBR","UNITED KINGDOM" -"2649030656","2649489407","US","USA","UNITED STATES" -"2649489408","2649554943","GB","GBR","UNITED KINGDOM" -"2649554944","2649620479","NO","NOR","NORWAY" -"2649620480","2649948159","US","USA","UNITED STATES" -"2649948160","2650013695","FR","FRA","FRANCE" -"2650013696","2650079231","CA","CAN","CANADA" -"2650079232","2650210303","US","USA","UNITED STATES" -"2650210304","2650275839","AT","AUT","AUSTRIA" -"2650275840","2650341375","US","USA","UNITED STATES" -"2650341376","2650406911","NO","NOR","NORWAY" -"2650406912","2650603519","US","USA","UNITED STATES" -"2650603520","2650669055","CO","COL","COLOMBIA" -"2650669056","2650734591","US","USA","UNITED STATES" -"2650800128","2653159423","US","USA","UNITED STATES" -"2653159424","2653421567","NO","NOR","NORWAY" -"2653421568","2653487103","AU","AUS","AUSTRALIA" -"2653487104","2653552639","GB","GBR","UNITED KINGDOM" -"2653552640","2653618175","ES","ESP","SPAIN" -"2653618176","2653683711","GB","GBR","UNITED KINGDOM" -"2653683712","2653749247","KR","KOR","REPUBLIC OF KOREA" -"2653749248","2653814783","AU","AUS","AUSTRALIA" -"2653880320","2653945855","IT","ITA","ITALY" -"2653945856","2654011391","US","USA","UNITED STATES" -"2654011392","2654076927","ES","ESP","SPAIN" -"2654076928","2654142463","FR","FRA","FRANCE" -"2654142464","2654207999","CA","CAN","CANADA" -"2654208000","2654339071","US","USA","UNITED STATES" -"2654339072","2654404607","AU","AUS","AUSTRALIA" -"2654404608","2654601215","US","USA","UNITED STATES" -"2654666752","2654994431","US","USA","UNITED STATES" -"2654994432","2655059967","LU","LUX","LUXEMBOURG" -"2655059968","2655125503","US","USA","UNITED STATES" -"2655185152","2655186944","PL","POL","POLAND" -"2655256576","2655715327","US","USA","UNITED STATES" -"2655715328","2655780863","PL","POL","POLAND" -"2655780864","2656632831","US","USA","UNITED STATES" -"2656632832","2656698367","AU","AUS","AUSTRALIA" -"2656698368","2656763903","FI","FIN","FINLAND" -"2656763904","2656829439","US","USA","UNITED STATES" -"2656829440","2656894975","SE","SWE","SWEDEN" -"2656894976","2656960511","US","USA","UNITED STATES" -"2656960512","2657026047","GB","GBR","UNITED KINGDOM" -"2657026048","2657157119","US","USA","UNITED STATES" -"2657157120","2657222655","MX","MEX","MEXICO" -"2657222656","2657288191","US","USA","UNITED STATES" -"2657288192","2657353727","ES","ESP","SPAIN" -"2657353728","2657484799","US","USA","UNITED STATES" -"2657484800","2657550335","IT","ITA","ITALY" -"2657550336","2657681407","US","USA","UNITED STATES" -"2657681408","2657746943","SE","SWE","SWEDEN" -"2657746944","2657878015","US","USA","UNITED STATES" -"2657878016","2657943551","TH","THA","THAILAND" -"2657943552","2658009087","ES","ESP","SPAIN" -"2658009088","2658074623","IT","ITA","ITALY" -"2658074624","2658140159","US","USA","UNITED STATES" -"2658140160","2658205695","NO","NOR","NORWAY" -"2658205696","2658598911","US","USA","UNITED STATES" -"2658598912","2658664447","GB","GBR","UNITED KINGDOM" -"2658664448","2658926591","US","USA","UNITED STATES" -"2658926592","2659057663","GB","GBR","UNITED KINGDOM" -"2659057664","2659123199","SE","SWE","SWEDEN" -"2659123200","2659188735","FI","FIN","FINLAND" -"2659188736","2659254271","CA","CAN","CANADA" -"2659254272","2659319807","LT","LTU","LITHUANIA" -"2659319808","2659385343","US","USA","UNITED STATES" -"2659385344","2659450879","FI","FIN","FINLAND" -"2659450880","2659516415","HK","HKG","HONG KONG" -"2659516416","2659581951","CH","CHE","SWITZERLAND" -"2659581952","2660040703","US","USA","UNITED STATES" -"2660040704","2660106239","CA","CAN","CANADA" -"2660106240","2660171775","US","USA","UNITED STATES" -"2660171776","2660237311","GB","GBR","UNITED KINGDOM" -"2660237312","2660302847","IN","IND","INDIA" -"2660302848","2660499455","US","USA","UNITED STATES" -"2660564992","2660696063","NO","NOR","NORWAY" -"2660696064","2660761599","US","USA","UNITED STATES" -"2660761600","2660827135","GB","GBR","UNITED KINGDOM" -"2660827136","2661023743","US","USA","UNITED STATES" -"2661023744","2661089279","FR","FRA","FRANCE" -"2661089280","2661285887","US","USA","UNITED STATES" -"2661285888","2661351423","VE","VEN","VENEZUELA" -"2661351424","2661416959","BN","BRN","BRUNEI DARUSSALAM" -"2661416960","2661482495","PT","PRT","PORTUGAL" -"2661482496","2661548031","CA","CAN","CANADA" -"2661548032","2661679103","US","USA","UNITED STATES" -"2661679104","2661941247","LU","LUX","LUXEMBOURG" -"2661941248","2662006783","CL","CHL","CHILE" -"2662006784","2662072319","US","USA","UNITED STATES" -"2662072320","2662137855","ES","ESP","SPAIN" -"2662137856","2662203391","SE","SWE","SWEDEN" -"2662203392","2662662143","GB","GBR","UNITED KINGDOM" -"2662727680","2662793215","HK","HKG","HONG KONG" -"2662793216","2663251967","US","USA","UNITED STATES" -"2663251968","2663448575","FR","FRA","FRANCE" -"2663448576","2663514111","SK","SVK","SLOVAKIA" -"2663514112","2663579647","CZ","CZE","CZECH REPUBLIC" -"2663579648","2663645183","SK","SVK","SLOVAKIA" -"2663645184","2663710719","CZ","CZE","CZECH REPUBLIC" -"2663710720","2663776255","SK","SVK","SLOVAKIA" -"2663776256","2664955903","JP","JPN","JAPAN" -"2664955904","2665021439","CH","CHE","SWITZERLAND" -"2665021440","2665086975","JP","JPN","JAPAN" -"2665086976","2665152511","GB","GBR","UNITED KINGDOM" -"2665152512","2665218047","US","USA","UNITED STATES" -"2665218048","2665283583","CH","CHE","SWITZERLAND" -"2665283584","2665349119","US","USA","UNITED STATES" -"2665359872","2665361407","US","USA","UNITED STATES" -"2665374720","2665375231","US","USA","UNITED STATES" -"2665414656","2665480191","GB","GBR","UNITED KINGDOM" -"2665480192","2665545727","US","USA","UNITED STATES" -"2665545728","2665611263","DE","DEU","GERMANY" -"2665611264","2665676799","CH","CHE","SWITZERLAND" -"2665676800","2665742335","ES","ESP","SPAIN" -"2665742336","2665873407","US","USA","UNITED STATES" -"2665873408","2665938943","GB","GBR","UNITED KINGDOM" -"2665938944","2666004479","FR","FRA","FRANCE" -"2666004480","2666070015","CH","CHE","SWITZERLAND" -"2666070016","2666135551","FI","FIN","FINLAND" -"2666135552","2666201087","GB","GBR","UNITED KINGDOM" -"2666201088","2667053055","US","USA","UNITED STATES" -"2667053056","2667118591","SE","SWE","SWEDEN" -"2667118592","2667184127","HU","HUN","HUNGARY" -"2667184128","2667249663","RU","RUS","RUSSIAN FEDERATION" -"2667249664","2667315199","CL","CHL","CHILE" -"2667315200","2667511807","US","USA","UNITED STATES" -"2667642880","2667970559","US","USA","UNITED STATES" -"2667970560","2668036095","CA","CAN","CANADA" -"2668036096","2668101631","SE","SWE","SWEDEN" -"2668101632","2668167167","CH","CHE","SWITZERLAND" -"2668167168","2668363775","US","USA","UNITED STATES" -"2668363776","2668429311","CH","CHE","SWITZERLAND" -"2668429312","2668494847","AU","AUS","AUSTRALIA" -"2668494848","2668560383","US","USA","UNITED STATES" -"2668560384","2668625919","GB","GBR","UNITED KINGDOM" -"2668625920","2668691455","MX","MEX","MEXICO" -"2668691456","2668756991","US","USA","UNITED STATES" -"2668756992","2668822527","CA","CAN","CANADA" -"2668822528","2668888063","US","USA","UNITED STATES" -"2668953600","2669019135","US","USA","UNITED STATES" -"2669019136","2669084671","CH","CHE","SWITZERLAND" -"2669084672","2669150207","ES","ESP","SPAIN" -"2669150208","2669215743","US","USA","UNITED STATES" -"2669215744","2669281279","DE","DEU","GERMANY" -"2669281280","2669477887","US","USA","UNITED STATES" -"2669477888","2669543423","CH","CHE","SWITZERLAND" -"2669543424","2669608959","GB","GBR","UNITED KINGDOM" -"2669608960","2669674495","FR","FRA","FRANCE" -"2669674496","2669805567","CA","CAN","CANADA" -"2669805568","2669871103","GB","GBR","UNITED KINGDOM" -"2669871104","2670067711","US","USA","UNITED STATES" -"2670067712","2670133247","SE","SWE","SWEDEN" -"2670133248","2670591999","US","USA","UNITED STATES" -"2670592000","2670657535","NL","NLD","NETHERLANDS" -"2670657536","2670854143","US","USA","UNITED STATES" -"2670854144","2670919679","FR","FRA","FRANCE" -"2670919680","2670985215","DE","DEU","GERMANY" -"2670985216","2671050751","AU","AUS","AUSTRALIA" -"2671050752","2671181823","US","USA","UNITED STATES" -"2671181824","2671247359","CA","CAN","CANADA" -"2671247360","2671378431","US","USA","UNITED STATES" -"2671378432","2671443967","NO","NOR","NORWAY" -"2671443968","2671509503","US","USA","UNITED STATES" -"2671509504","2671575039","NL","NLD","NETHERLANDS" -"2671575040","2672295935","US","USA","UNITED STATES" -"2672295936","2672361471","SE","SWE","SWEDEN" -"2672361472","2672427007","AU","AUS","AUSTRALIA" -"2672427008","2672820223","US","USA","UNITED STATES" -"2672820224","2672885759","JP","JPN","JAPAN" -"2672885760","2672951295","NO","NOR","NORWAY" -"2672951296","2673082367","US","USA","UNITED STATES" -"2673082368","2673147903","FR","FRA","FRANCE" -"2673147904","2673213439","US","USA","UNITED STATES" -"2673278976","2673410047","US","USA","UNITED STATES" -"2673410048","2673475583","CA","CAN","CANADA" -"2673475584","2673541119","VE","VEN","VENEZUELA" -"2673541120","2673606655","US","USA","UNITED STATES" -"2673606656","2673672191","GB","GBR","UNITED KINGDOM" -"2673672192","2673737727","RU","RUS","RUSSIAN FEDERATION" -"2673737728","2673803263","US","USA","UNITED STATES" -"2673803264","2673868799","FR","FRA","FRANCE" -"2673868800","2674130943","US","USA","UNITED STATES" -"2674130944","2674262015","GB","GBR","UNITED KINGDOM" -"2674262016","2674327551","US","USA","UNITED STATES" -"2674327552","2674380799","CH","CHE","SWITZERLAND" -"2674380800","2674381055","NL","NLD","NETHERLANDS" -"2674381056","2674393087","CH","CHE","SWITZERLAND" -"2674393088","2674458623","GB","GBR","UNITED KINGDOM" -"2674458624","2674589695","US","USA","UNITED STATES" -"2674589696","2674655231","SE","SWE","SWEDEN" -"2674655232","2674720767","US","USA","UNITED STATES" -"2674720768","2674786303","FR","FRA","FRANCE" -"2674786304","2674851839","US","USA","UNITED STATES" -"2674851840","2674917375","AU","AUS","AUSTRALIA" -"2674917376","2675048447","US","USA","UNITED STATES" -"2675048448","2675113983","GB","GBR","UNITED KINGDOM" -"2675113984","2675245055","US","USA","UNITED STATES" -"2675245056","2675310591","NZ","NZL","NEW ZEALAND" -"2675310592","2675572735","US","USA","UNITED STATES" -"2675572736","2675638271","CH","CHE","SWITZERLAND" -"2675638272","2675965951","US","USA","UNITED STATES" -"2675965952","2676031487","CA","CAN","CANADA" -"2676031488","2676097023","US","USA","UNITED STATES" -"2676097024","2676162559","NO","NOR","NORWAY" -"2676162560","2676359167","US","USA","UNITED STATES" -"2676359168","2676424703","IE","IRL","IRELAND" -"2676424704","2677014527","US","USA","UNITED STATES" -"2677014528","2677080063","CH","CHE","SWITZERLAND" -"2677080064","2677145599","US","USA","UNITED STATES" -"2677211136","2677276671","GB","GBR","UNITED KINGDOM" -"2677276672","2677342207","LV","LVA","LATVIA" -"2677342208","2677407743","IT","ITA","ITALY" -"2677407744","2677473279","US","USA","UNITED STATES" -"2677473280","2677538815","FR","FRA","FRANCE" -"2677538816","2677604351","FI","FIN","FINLAND" -"2677604352","2677669887","US","USA","UNITED STATES" -"2677669888","2677735423","DE","DEU","GERMANY" -"2677735424","2677800959","US","USA","UNITED STATES" -"2677800960","2677866495","CH","CHE","SWITZERLAND" -"2677866496","2677997567","US","USA","UNITED STATES" -"2677997568","2678063103","CA","CAN","CANADA" -"2678128640","2678194175","US","USA","UNITED STATES" -"2678194176","2678259711","NO","NOR","NORWAY" -"2678259712","2678521855","US","USA","UNITED STATES" -"2678521856","2678587391","GB","GBR","UNITED KINGDOM" -"2678587392","2678652927","CH","CHE","SWITZERLAND" -"2678652928","2678718463","US","USA","UNITED STATES" -"2678718464","2678783999","GB","GBR","UNITED KINGDOM" -"2678784000","2678849535","NO","NOR","NORWAY" -"2678849536","2678915071","US","USA","UNITED STATES" -"2678915072","2678980607","FR","FRA","FRANCE" -"2678980608","2679046143","US","USA","UNITED STATES" -"2679046144","2679111679","CA","CAN","CANADA" -"2679111680","2679177215","US","USA","UNITED STATES" -"2679177216","2679242751","CA","CAN","CANADA" -"2679242752","2679308287","US","USA","UNITED STATES" -"2679308288","2679373823","CH","CHE","SWITZERLAND" -"2679373824","2679439359","GB","GBR","UNITED KINGDOM" -"2679439360","2680029183","US","USA","UNITED STATES" -"2680029184","2680094719","SE","SWE","SWEDEN" -"2680094720","2680225791","US","USA","UNITED STATES" -"2680225792","2680356863","SE","SWE","SWEDEN" -"2680356864","2680422399","DK","DNK","DENMARK" -"2680422400","2680487935","AU","AUS","AUSTRALIA" -"2680487936","2680553471","GB","GBR","UNITED KINGDOM" -"2680553472","2680684543","US","USA","UNITED STATES" -"2680684544","2680750079","SE","SWE","SWEDEN" -"2680750080","2681012223","US","USA","UNITED STATES" -"2681077760","2681143295","CA","CAN","CANADA" -"2681143296","2681208831","AU","AUS","AUSTRALIA" -"2681208832","2681274367","CA","CAN","CANADA" -"2681274368","2681339903","US","USA","UNITED STATES" -"2681339904","2681405439","IT","ITA","ITALY" -"2681405440","2681470975","JP","JPN","JAPAN" -"2681470976","2681536511","US","USA","UNITED STATES" -"2681536512","2681602047","IT","ITA","ITALY" -"2681602048","2681733119","US","USA","UNITED STATES" -"2681733120","2681798655","NO","NOR","NORWAY" -"2681798656","2681864191","FR","FRA","FRANCE" -"2681864192","2681929727","US","USA","UNITED STATES" -"2681929728","2681995263","GB","GBR","UNITED KINGDOM" -"2681995264","2682257407","US","USA","UNITED STATES" -"2682322944","2682388479","US","USA","UNITED STATES" -"2682388480","2682454015","CN","CHN","CHINA" -"2682454016","2682519551","US","USA","UNITED STATES" -"2682519552","2682585087","JP","JPN","JAPAN" -"2682585088","2682716159","US","USA","UNITED STATES" -"2682716160","2682781695","CA","CAN","CANADA" -"2682781696","2682847231","CH","CHE","SWITZERLAND" -"2682847232","2683043839","US","USA","UNITED STATES" -"2683043840","2683109375","GB","GBR","UNITED KINGDOM" -"2683109376","2683174911","ES","ESP","SPAIN" -"2683174912","2683240447","US","USA","UNITED STATES" -"2683240448","2683305983","GB","GBR","UNITED KINGDOM" -"2683305984","2683371519","US","USA","UNITED STATES" -"2683371520","2683437055","CH","CHE","SWITZERLAND" -"2683437056","2683568127","US","USA","UNITED STATES" -"2683568128","2683633663","GB","GBR","UNITED KINGDOM" -"2683637760","2683641855","NL","NLD","NETHERLANDS" -"2683641856","2683645951","US","USA","UNITED STATES" -"2683645952","2683650047","SG","SGP","SINGAPORE" -"2683699200","2683830271","US","USA","UNITED STATES" -"2683830272","2683895807","AU","AUS","AUSTRALIA" -"2683895808","2684157951","US","USA","UNITED STATES" -"2684223488","2684289023","GB","GBR","UNITED KINGDOM" -"2684420096","2684616703","US","USA","UNITED STATES" -"2684616704","2684682239","NZ","NZL","NEW ZEALAND" -"2684682240","2684747775","GB","GBR","UNITED KINGDOM" -"2684747776","2684813311","IE","IRL","IRELAND" -"2684813312","2684878847","US","USA","UNITED STATES" -"2684878848","2684944383","SE","SWE","SWEDEN" -"2684944384","2685009919","GB","GBR","UNITED KINGDOM" -"2685009920","2685075455","US","USA","UNITED STATES" -"2685075456","2686386175","JP","JPN","JAPAN" -"2686386176","2686844927","US","USA","UNITED STATES" -"2686844928","2686910463","GB","GBR","UNITED KINGDOM" -"2686910464","2686975999","US","USA","UNITED STATES" -"2686976000","2687041535","GR","GRC","GREECE" -"2687041536","2687238143","US","USA","UNITED STATES" -"2687238144","2687762431","DE","DEU","GERMANY" -"2687762432","2687827967","AT","AUT","AUSTRIA" -"2687827968","2687893503","CH","CHE","SWITZERLAND" -"2687893504","2688221183","DE","DEU","GERMANY" -"2688221184","2688286719","CH","CHE","SWITZERLAND" -"2688286720","2688352255","DE","DEU","GERMANY" -"2688352256","2688420095","CH","CHE","SWITZERLAND" -"2688420096","2688420351","CN","CHN","CHINA" -"2688420352","2688420863","CH","CHE","SWITZERLAND" -"2688420864","2688421375","SG","SGP","SINGAPORE" -"2688421376","2688421887","US","USA","UNITED STATES" -"2688421888","2688548863","CH","CHE","SWITZERLAND" -"2688548864","2688614399","AU","AUS","AUSTRALIA" -"2688614400","2688679935","US","USA","UNITED STATES" -"2688679936","2688745471","IT","ITA","ITALY" -"2688745472","2688876543","NO","NOR","NORWAY" -"2688876544","2688942079","US","USA","UNITED STATES" -"2688942080","2689007615","DE","DEU","GERMANY" -"2689007616","2689073151","FI","FIN","FINLAND" -"2689073152","2689138687","CA","CAN","CANADA" -"2689138688","2689204223","US","USA","UNITED STATES" -"2689204224","2689269759","JP","JPN","JAPAN" -"2689269760","2689335295","TR","TUR","TURKEY" -"2689335296","2689400831","US","USA","UNITED STATES" -"2689466368","2689531903","IT","ITA","ITALY" -"2689531904","2689597439","US","USA","UNITED STATES" -"2689597440","2689662975","IT","ITA","ITALY" -"2689662976","2689925119","US","USA","UNITED STATES" -"2689925120","2689990655","CH","CHE","SWITZERLAND" -"2689990656","2690187263","US","USA","UNITED STATES" -"2690318336","2690383871","US","USA","UNITED STATES" -"2690383872","2690449407","FR","FRA","FRANCE" -"2690449408","2690646015","US","USA","UNITED STATES" -"2690646016","2690711551","SG","SGP","SINGAPORE" -"2690711552","2690777087","IT","ITA","ITALY" -"2690777088","2690842623","CH","CHE","SWITZERLAND" -"2690842624","2690908159","RS","SRB","SERBIA" -"2690908160","2690973695","GB","GBR","UNITED KINGDOM" -"2690973696","2691104767","US","USA","UNITED STATES" -"2691104768","2691170303","FR","FRA","FRANCE" -"2691170304","2691235839","GB","GBR","UNITED KINGDOM" -"2691301376","2691366911","CA","CAN","CANADA" -"2691366912","2691760127","US","USA","UNITED STATES" -"2691825664","2691891199","HU","HUN","HUNGARY" -"2692546560","2694316031","US","USA","UNITED STATES" -"2694381568","2694447103","US","USA","UNITED STATES" -"2696151040","2696216575","IT","ITA","ITALY" -"2696478720","2697789439","JP","JPN","JAPAN" -"2697789440","2697854975","US","USA","UNITED STATES" -"2697854976","2697920511","AU","AUS","AUSTRALIA" -"2697920512","2698117119","US","USA","UNITED STATES" -"2698117120","2698182655","IS","ISL","ICELAND" -"2698182656","2698248191","DE","DEU","GERMANY" -"2698248192","2698313727","US","USA","UNITED STATES" -"2698313728","2698379263","GB","GBR","UNITED KINGDOM" -"2698379264","2698444799","ES","ESP","SPAIN" -"2698444800","2698510335","JP","JPN","JAPAN" -"2698510336","2698706943","CZ","CZE","CZECH REPUBLIC" -"2698706944","2698772479","CH","CHE","SWITZERLAND" -"2698772480","2698838015","IT","ITA","ITALY" -"2698838016","2698903551","BE","BEL","BELGIUM" -"2698903552","2698969087","AU","AUS","AUSTRALIA" -"2698969088","2699034623","CA","CAN","CANADA" -"2699231232","2699296767","US","USA","UNITED STATES" -"2699296768","2699362303","FR","FRA","FRANCE" -"2699362304","2699624447","US","USA","UNITED STATES" -"2699624448","2700214271","JP","JPN","JAPAN" -"2700279808","2700935167","JP","JPN","JAPAN" -"2700935168","2701066239","US","USA","UNITED STATES" -"2701197312","2701262847","US","USA","UNITED STATES" -"2701262848","2701328383","GB","GBR","UNITED KINGDOM" -"2701328384","2701393919","FR","FRA","FRANCE" -"2701393920","2701459455","NO","NOR","NORWAY" -"2701459456","2701524991","AT","AUT","AUSTRIA" -"2701524992","2701656063","US","USA","UNITED STATES" -"2701656064","2701721599","RU","RUS","RUSSIAN FEDERATION" -"2701721600","2701787135","TR","TUR","TURKEY" -"2701852672","2701918207","US","USA","UNITED STATES" -"2701918208","2701983743","GB","GBR","UNITED KINGDOM" -"2701983744","2702245887","US","USA","UNITED STATES" -"2702245888","2702311423","GB","GBR","UNITED KINGDOM" -"2702376960","2702442495","CA","CAN","CANADA" -"2702442496","2702508031","CH","CHE","SWITZERLAND" -"2702508032","2702573567","US","USA","UNITED STATES" -"2702639104","2702704639","GB","GBR","UNITED KINGDOM" -"2702704640","2702770175","BR","BRA","BRAZIL" -"2702770176","2702835711","CL","CHL","CHILE" -"2702835712","2702901247","US","USA","UNITED STATES" -"2702901248","2702966783","IT","ITA","ITALY" -"2702966784","2703032319","US","USA","UNITED STATES" -"2703032320","2703097855","NZ","NZL","NEW ZEALAND" -"2703097856","2703163391","GB","GBR","UNITED KINGDOM" -"2703163392","2703556607","US","USA","UNITED STATES" -"2703556608","2703622143","ES","ESP","SPAIN" -"2703622144","2703818751","US","USA","UNITED STATES" -"2703818752","2703884287","FI","FIN","FINLAND" -"2703884288","2703949823","DE","DEU","GERMANY" -"2703949824","2704015359","AU","AUS","AUSTRALIA" -"2704015360","2704277503","US","USA","UNITED STATES" -"2704277504","2704343039","FR","FRA","FRANCE" -"2704343040","2704408575","US","USA","UNITED STATES" -"2704408576","2704474111","AU","AUS","AUSTRALIA" -"2704474112","2704539647","US","USA","UNITED STATES" -"2704539648","2704605183","SE","SWE","SWEDEN" -"2704605184","2704670719","HR","HRV","CROATIA" -"2704670720","2704736255","SE","SWE","SWEDEN" -"2704736256","2704801791","US","USA","UNITED STATES" -"2704867328","2704998399","US","USA","UNITED STATES" -"2704998400","2705063935","BE","BEL","BELGIUM" -"2705063936","2705195007","US","USA","UNITED STATES" -"2705195008","2705260543","CH","CHE","SWITZERLAND" -"2705260544","2705326079","US","USA","UNITED STATES" -"2705326080","2705391615","MO","MAC","MACAO" -"2705391616","2705522687","NZ","NZL","NEW ZEALAND" -"2705522688","2705588223","ES","ESP","SPAIN" -"2705588224","2705784831","US","USA","UNITED STATES" -"2705784832","2705850367","GB","GBR","UNITED KINGDOM" -"2705850368","2705915903","ES","ESP","SPAIN" -"2705915904","2706046975","GB","GBR","UNITED KINGDOM" -"2706046976","2706112511","JP","JPN","JAPAN" -"2706112512","2706178047","GB","GBR","UNITED KINGDOM" -"2706178048","2706243583","US","USA","UNITED STATES" -"2706243584","2706309119","CH","CHE","SWITZERLAND" -"2706309120","2706374655","BR","BRA","BRAZIL" -"2706374656","2706571263","US","USA","UNITED STATES" -"2706571264","2706694143","NL","NLD","NETHERLANDS" -"2706694144","2706702335","US","USA","UNITED STATES" -"2706702336","2706960383","NL","NLD","NETHERLANDS" -"2706960384","2706964479","US","USA","UNITED STATES" -"2706964480","2707226623","NL","NLD","NETHERLANDS" -"2707226624","2707488767","JP","JPN","JAPAN" -"2707488768","2707947519","US","USA","UNITED STATES" -"2707947520","2708144127","FR","FRA","FRANCE" -"2708144128","2708340735","US","USA","UNITED STATES" -"2708340736","2708406271","AT","AUT","AUSTRIA" -"2708406272","2708471807","ES","ESP","SPAIN" -"2708471808","2708537343","GB","GBR","UNITED KINGDOM" -"2708537344","2708733951","US","USA","UNITED STATES" -"2708733952","2708799487","ES","ESP","SPAIN" -"2708799488","2708865023","AU","AUS","AUSTRALIA" -"2708865024","2708930559","JP","JPN","JAPAN" -"2708930560","2709127167","US","USA","UNITED STATES" -"2709127168","2709192703","KR","KOR","REPUBLIC OF KOREA" -"2709258240","2709389311","US","USA","UNITED STATES" -"2709389312","2709454847","SG","SGP","SINGAPORE" -"2709454848","2709716991","US","USA","UNITED STATES" -"2709716992","2709782527","CL","CHL","CHILE" -"2709782528","2709848063","PE","PER","PERU" -"2709848064","2710175743","US","USA","UNITED STATES" -"2710241280","2710306815","MY","MYS","MALAYSIA" -"2710372352","2710437887","CA","CAN","CANADA" -"2710437888","2710503423","MY","MYS","MALAYSIA" -"2710503424","2710568959","AU","AUS","AUSTRALIA" -"2710568960","2710700031","US","USA","UNITED STATES" -"2710700032","2710765567","AU","AUS","AUSTRALIA" -"2710765568","2710831103","IT","ITA","ITALY" -"2710831104","2710896639","BR","BRA","BRAZIL" -"2710896640","2711093247","US","USA","UNITED STATES" -"2711093248","2711158783","AU","AUS","AUSTRALIA" -"2711158784","2711486463","US","USA","UNITED STATES" -"2711486464","2711551999","NL","NLD","NETHERLANDS" -"2711552000","2713190399","US","USA","UNITED STATES" -"2713190400","2713255935","CA","CAN","CANADA" -"2713255936","2713387007","US","USA","UNITED STATES" -"2713387008","2713452543","CA","CAN","CANADA" -"2713452544","2713583615","US","USA","UNITED STATES" -"2713583616","2713649151","AR","ARG","ARGENTINA" -"2713649152","2713976831","US","USA","UNITED STATES" -"2713976832","2714042367","VE","VEN","VENEZUELA" -"2714042368","2714238975","US","USA","UNITED STATES" -"2714238976","2714304511","TH","THA","THAILAND" -"2714304512","2714370047","US","USA","UNITED STATES" -"2714370048","2714435583","CH","CHE","SWITZERLAND" -"2714435584","2714697727","US","USA","UNITED STATES" -"2714697728","2714763263","CN","CHN","CHINA" -"2714763264","2715025407","US","USA","UNITED STATES" -"2715090944","2715287551","US","USA","UNITED STATES" -"2715287552","2715353087","CA","CAN","CANADA" -"2715353088","2716139519","US","USA","UNITED STATES" -"2716139520","2716205055","SG","SGP","SINGAPORE" -"2716205056","2716467199","US","USA","UNITED STATES" -"2716532736","2716729343","US","USA","UNITED STATES" -"2716729344","2716794879","CL","CHL","CHILE" -"2716794880","2717253631","US","USA","UNITED STATES" -"2717253632","2717319167","TH","THA","THAILAND" -"2717319168","2717384703","US","USA","UNITED STATES" -"2717384704","2717450239","JP","JPN","JAPAN" -"2717450240","2717646847","US","USA","UNITED STATES" -"2717646848","2717712383","KW","KWT","KUWAIT" -"2717712384","2717843455","US","USA","UNITED STATES" -"2717974528","2718171135","US","USA","UNITED STATES" -"2718171136","2718236671","JP","JPN","JAPAN" -"2718236672","2718629887","US","USA","UNITED STATES" -"2718629888","2718695423","GB","GBR","UNITED KINGDOM" -"2718695424","2718760959","US","USA","UNITED STATES" -"2718760960","2718826495","GB","GBR","UNITED KINGDOM" -"2718826496","2719023103","US","USA","UNITED STATES" -"2719088640","2719285247","US","USA","UNITED STATES" -"2719285248","2719350783","CH","CHE","SWITZERLAND" -"2719350784","2719416319","US","USA","UNITED STATES" -"2719416320","2719481855","CH","CHE","SWITZERLAND" -"2719481856","2719547391","US","USA","UNITED STATES" -"2719547392","2719612927","AT","AUT","AUSTRIA" -"2719612928","2719678463","CH","CHE","SWITZERLAND" -"2719678464","2720399359","US","USA","UNITED STATES" -"2720399360","2720464895","FR","FRA","FRANCE" -"2720464896","2721382399","US","USA","UNITED STATES" -"2721382400","2721447935","CA","CAN","CANADA" -"2721447936","2722627583","US","USA","UNITED STATES" -"2722693120","2722758655","CA","CAN","CANADA" -"2722758656","2723479551","US","USA","UNITED STATES" -"2723479552","2723545087","CA","CAN","CANADA" -"2723545088","2723610623","CH","CHE","SWITZERLAND" -"2723610624","2724724735","US","USA","UNITED STATES" -"2724790272","2724855807","CN","CHN","CHINA" -"2724855808","2724921343","CA","CAN","CANADA" -"2724921344","2725249023","US","USA","UNITED STATES" -"2725249024","2725314559","NZ","NZL","NEW ZEALAND" -"2725314560","2725904383","US","USA","UNITED STATES" -"2725904384","2725969919","VE","VEN","VENEZUELA" -"2725969920","2727018495","US","USA","UNITED STATES" -"2727018496","2727084031","CA","CAN","CANADA" -"2727084032","2727346175","US","USA","UNITED STATES" -"2727411712","2727608319","AU","AUS","AUSTRALIA" -"2734751744","2734817279","GB","GBR","UNITED KINGDOM" -"2734817280","2734882815","US","USA","UNITED STATES" -"2734882816","2734948351","SE","SWE","SWEDEN" -"2734948352","2735013887","US","USA","UNITED STATES" -"2735013888","2735079423","FR","FRA","FRANCE" -"2735079424","2735144959","US","USA","UNITED STATES" -"2735144960","2735210495","NZ","NZL","NEW ZEALAND" -"2735210496","2735276031","AU","AUS","AUSTRALIA" -"2735276032","2735341567","FR","FRA","FRANCE" -"2735341568","2735407103","AR","ARG","ARGENTINA" -"2735407104","2735538175","US","USA","UNITED STATES" -"2735538176","2736848895","TW","TWN","TAIWAN" -"2736848896","2736914431","US","USA","UNITED STATES" -"2736914432","2736979967","NO","NOR","NORWAY" -"2736979968","2737438719","US","USA","UNITED STATES" -"2737438720","2738749439","JP","JPN","JAPAN" -"2738749440","2742353919","FR","FRA","FRANCE" -"2742353920","2742419455","ES","ESP","SPAIN" -"2742419456","2742484991","US","USA","UNITED STATES" -"2742484992","2742550527","GB","GBR","UNITED KINGDOM" -"2742550528","2742616063","US","USA","UNITED STATES" -"2742681600","2742747135","IN","IND","INDIA" -"2742747136","2742779903","CA","CAN","CANADA" -"2742812672","2742878207","US","USA","UNITED STATES" -"2742943744","2743009279","US","USA","UNITED STATES" -"2743009280","2743140351","AU","AUS","AUSTRALIA" -"2743140352","2743205887","US","USA","UNITED STATES" -"2743205888","2743992319","JP","JPN","JAPAN" -"2744057856","2744516607","JP","JPN","JAPAN" -"2744516608","2744647679","US","USA","UNITED STATES" -"2744647680","2744713215","KR","KOR","REPUBLIC OF KOREA" -"2744713216","2744844287","US","USA","UNITED STATES" -"2744844288","2744909823","CA","CAN","CANADA" -"2744909824","2744975359","GB","GBR","UNITED KINGDOM" -"2744975360","2745040895","SE","SWE","SWEDEN" -"2745040896","2745106431","DE","DEU","GERMANY" -"2745106432","2745171967","SI","SVN","SLOVENIA" -"2745171968","2745237503","GB","GBR","UNITED KINGDOM" -"2745237504","2745303039","CH","CHE","SWITZERLAND" -"2745303040","2745368575","IT","ITA","ITALY" -"2745368576","2745434111","BE","BEL","BELGIUM" -"2745434112","2745499647","GB","GBR","UNITED KINGDOM" -"2745499648","2745548799","BE","BEL","BELGIUM" -"2745548800","2745565183","DE","DEU","GERMANY" -"2745565184","2745696255","GB","GBR","UNITED KINGDOM" -"2745696256","2745761791","CH","CHE","SWITZERLAND" -"2745761792","2746023935","GB","GBR","UNITED KINGDOM" -"2746023936","2746089471","FR","FRA","FRANCE" -"2746089472","2746155007","NO","NOR","NORWAY" -"2746155008","2746220543","NL","NLD","NETHERLANDS" -"2746220544","2746286079","US","USA","UNITED STATES" -"2746351616","2746417151","CR","CRI","COSTA RICA" -"2746482688","2746548223","KR","KOR","REPUBLIC OF KOREA" -"2746548224","2747072511","US","USA","UNITED STATES" -"2747072512","2747138047","AU","AUS","AUSTRALIA" -"2747138048","2747465727","US","USA","UNITED STATES" -"2748121088","2748317695","US","USA","UNITED STATES" -"2748317696","2748645375","JP","JPN","JAPAN" -"2748710912","2749235199","JP","JPN","JAPAN" -"2749300736","2749628415","JP","JPN","JAPAN" -"2749628416","2749693951","US","USA","UNITED STATES" -"2749759488","2749890559","US","USA","UNITED STATES" -"2749890560","2750021631","AU","AUS","AUSTRALIA" -"2750021632","2750349311","US","USA","UNITED STATES" -"2750349312","2750414847","KR","KOR","REPUBLIC OF KOREA" -"2750414848","2750873599","US","USA","UNITED STATES" -"2750873600","2750939135","CL","CHL","CHILE" -"2750939136","2751070207","US","USA","UNITED STATES" -"2751070208","2751135743","CL","CHL","CHILE" -"2751135744","2751397887","US","USA","UNITED STATES" -"2751528960","2751660031","FR","FRA","FRANCE" -"2751660032","2751725567","AT","AUT","AUSTRIA" -"2751725568","2751791103","SE","SWE","SWEDEN" -"2751791104","2751856639","FI","FIN","FINLAND" -"2751856640","2751922175","GB","GBR","UNITED KINGDOM" -"2751922176","2751987711","FR","FRA","FRANCE" -"2751987712","2752053247","SI","SVN","SLOVENIA" -"2752053248","2752184319","SE","SWE","SWEDEN" -"2752184320","2752315391","GB","GBR","UNITED KINGDOM" -"2752315392","2752380927","FI","FIN","FINLAND" -"2752380928","2752446463","CH","CHE","SWITZERLAND" -"2752446464","2752511999","BE","BEL","BELGIUM" -"2752512000","2753757183","DE","DEU","GERMANY" -"2753757184","2753822719","BE","BEL","BELGIUM" -"2753822720","2753888255","GB","GBR","UNITED KINGDOM" -"2753888256","2753953791","SE","SWE","SWEDEN" -"2753953792","2754084863","GB","GBR","UNITED KINGDOM" -"2754150400","2754215935","BR","BRA","BRAZIL" -"2754215936","2754281471","PR","PRI","PUERTO RICO" -"2754281472","2754347007","JP","JPN","JAPAN" -"2754347008","2754478079","US","USA","UNITED STATES" -"2754478080","2754543615","JP","JPN","JAPAN" -"2754543616","2754609151","US","USA","UNITED STATES" -"2754609152","2754674687","SE","SWE","SWEDEN" -"2754674688","2754936831","US","USA","UNITED STATES" -"2754936832","2755002367","AU","AUS","AUSTRALIA" -"2755002368","2755330047","US","USA","UNITED STATES" -"2755330048","2755395583","DE","DEU","GERMANY" -"2755395584","2755461119","FR","FRA","FRANCE" -"2755461120","2755526655","DE","DEU","GERMANY" -"2755526656","2755985407","US","USA","UNITED STATES" -"2755985408","2756182015","JP","JPN","JAPAN" -"2756182016","2756247551","US","USA","UNITED STATES" -"2756247552","2756313087","UY","URY","URUGUAY" -"2756313088","2756378623","US","USA","UNITED STATES" -"2756378624","2756444159","AU","AUS","AUSTRALIA" -"2756444160","2756509695","US","USA","UNITED STATES" -"2756509696","2756556543","CL","CHL","CHILE" -"2756556544","2756557311","PE","PER","PERU" -"2756557312","2756575231","CL","CHL","CHILE" -"2756575232","2756640767","SG","SGP","SINGAPORE" -"2756640768","2756706303","US","USA","UNITED STATES" -"2756706304","2756771839","AU","AUS","AUSTRALIA" -"2756771840","2756837375","FR","FRA","FRANCE" -"2756837376","2757033983","US","USA","UNITED STATES" -"2757033984","2757099519","BR","BRA","BRAZIL" -"2757099520","2757230591","US","USA","UNITED STATES" -"2757296128","2757754879","US","USA","UNITED STATES" -"2757754880","2757820415","CL","CHL","CHILE" -"2757820416","2757885951","AU","AUS","AUSTRALIA" -"2757885952","2757951487","CL","CHL","CHILE" -"2757951488","2758017023","US","USA","UNITED STATES" -"2758017024","2758082559","IN","IND","INDIA" -"2758082560","2758148095","US","USA","UNITED STATES" -"2758148096","2758213631","CA","CAN","CANADA" -"2758213632","2758541311","US","USA","UNITED STATES" -"2758541312","2758606847","AU","AUS","AUSTRALIA" -"2758606848","2758803455","US","USA","UNITED STATES" -"2758803456","2758868991","AU","AUS","AUSTRALIA" -"2758868992","2759000063","US","USA","UNITED STATES" -"2759000064","2759065599","TH","THA","THAILAND" -"2759065600","2759589887","US","USA","UNITED STATES" -"2759589888","2759720959","KR","KOR","REPUBLIC OF KOREA" -"2759852032","2759871035","CH","CHE","SWITZERLAND" -"2759871036","2759871039","GB","GBR","UNITED KINGDOM" -"2759871040","2759883439","CH","CHE","SWITZERLAND" -"2759883440","2759883443","LI","LIE","LIECHTENSTEIN" -"2759883444","2759883451","CH","CHE","SWITZERLAND" -"2759883452","2759883455","LI","LIE","LIECHTENSTEIN" -"2759883456","2759884111","CH","CHE","SWITZERLAND" -"2759884112","2759884115","GB","GBR","UNITED KINGDOM" -"2759884116","2759894559","CH","CHE","SWITZERLAND" -"2759894560","2759894563","LI","LIE","LIECHTENSTEIN" -"2759894564","2759917567","CH","CHE","SWITZERLAND" -"2759917568","2759983103","FR","FRA","FRANCE" -"2759983104","2760048639","IT","ITA","ITALY" -"2760048640","2760114175","FR","FRA","FRANCE" -"2760114176","2760179711","IT","ITA","ITALY" -"2760179712","2760245247","DE","DEU","GERMANY" -"2760245248","2760310783","GB","GBR","UNITED KINGDOM" -"2760310784","2760376319","SE","SWE","SWEDEN" -"2760376320","2760507391","GB","GBR","UNITED KINGDOM" -"2760507392","2760572927","FR","FRA","FRANCE" -"2760572928","2760638463","DE","DEU","GERMANY" -"2760638464","2760703999","NL","NLD","NETHERLANDS" -"2760704000","2760769535","FI","FIN","FINLAND" -"2760769536","2760835071","IT","ITA","ITALY" -"2760835072","2760898559","GB","GBR","UNITED KINGDOM" -"2760898560","2760899583","US","USA","UNITED STATES" -"2760899584","2760900607","GB","GBR","UNITED KINGDOM" -"2760900608","2761031679","US","USA","UNITED STATES" -"2761424896","2761621503","US","USA","UNITED STATES" -"2761687040","2761949183","US","USA","UNITED STATES" -"2762014720","2762145791","JP","JPN","JAPAN" -"2762211328","2762276863","IN","IND","INDIA" -"2762276864","2762342399","US","USA","UNITED STATES" -"2762342400","2762407935","CA","CAN","CANADA" -"2762407936","2763063295","US","USA","UNITED STATES" -"2763128832","2763194367","CA","CAN","CANADA" -"2763194368","2765553663","US","USA","UNITED STATES" -"2765619200","2768240639","US","USA","UNITED STATES" -"2768306176","2768437247","US","USA","UNITED STATES" -"2768633856","2768764927","US","USA","UNITED STATES" -"2769027072","2769092607","AU","AUS","AUSTRALIA" -"2769092608","2769158143","US","USA","UNITED STATES" -"2769158144","2769289215","JP","JPN","JAPAN" -"2769354752","2769485823","JP","JPN","JAPAN" -"2769485824","2769616895","US","USA","UNITED STATES" -"2769616896","2769682431","SG","SGP","SINGAPORE" -"2769682432","2769747967","US","USA","UNITED STATES" -"2769747968","2769813503","CA","CAN","CANADA" -"2769813504","2769879039","US","USA","UNITED STATES" -"2769944576","2770272255","US","USA","UNITED STATES" -"2770272256","2770337791","AU","AUS","AUSTRALIA" -"2770337792","2771451903","US","USA","UNITED STATES" -"2772434944","2772631551","US","USA","UNITED STATES" -"2772631552","2772697087","AU","AUS","AUSTRALIA" -"2772697088","2772762623","US","USA","UNITED STATES" -"2772762624","2772828159","AU","AUS","AUSTRALIA" -"2772828160","2773221375","US","USA","UNITED STATES" -"2773221376","2773286911","JP","JPN","JAPAN" -"2773286912","2773352447","US","USA","UNITED STATES" -"2773352448","2773417983","CA","CAN","CANADA" -"2773417984","2773745663","US","USA","UNITED STATES" -"2773745664","2773811199","NZ","NZL","NEW ZEALAND" -"2773811200","2773876735","US","USA","UNITED STATES" -"2773876736","2773942271","AU","AUS","AUSTRALIA" -"2773942272","2774138879","US","USA","UNITED STATES" -"2774204416","2774335487","US","USA","UNITED STATES" -"2774335488","2774401023","JP","JPN","JAPAN" -"2774401024","2774532095","US","USA","UNITED STATES" -"2774532096","2774597631","JP","JPN","JAPAN" -"2774597632","2774663167","US","USA","UNITED STATES" -"2774663168","2774728703","NI","NIC","NICARAGUA" -"2774728704","2774990847","JP","JPN","JAPAN" -"2774990848","2775318527","US","USA","UNITED STATES" -"2775318528","2775384063","JP","JPN","JAPAN" -"2775384064","2775711743","US","USA","UNITED STATES" -"2775711744","2775777279","NL","NLD","NETHERLANDS" -"2775777280","2775842815","CA","CAN","CANADA" -"2775842816","2775973887","US","USA","UNITED STATES" -"2775973888","2776039423","AU","AUS","AUSTRALIA" -"2776039424","2776891391","US","USA","UNITED STATES" -"2776891392","2777022463","KR","KOR","REPUBLIC OF KOREA" -"2777022464","2777481215","US","USA","UNITED STATES" -"2777481216","2777546751","KR","KOR","REPUBLIC OF KOREA" -"2777546752","2777612287","AU","AUS","AUSTRALIA" -"2778071040","2778333183","US","USA","UNITED STATES" -"2778333184","2778398719","CA","CAN","CANADA" -"2778398720","2779054079","US","USA","UNITED STATES" -"2779119616","2779316223","US","USA","UNITED STATES" -"2779381760","2779906047","US","USA","UNITED STATES" -"2779906048","2779971583","CA","CAN","CANADA" -"2779971584","2780037119","US","USA","UNITED STATES" -"2780102656","2780168191","US","USA","UNITED STATES" -"2780168192","2780299263","CL","CHL","CHILE" -"2780299264","2780364799","US","USA","UNITED STATES" -"2780364800","2780430335","CA","CAN","CANADA" -"2780430336","2780495871","KR","KOR","REPUBLIC OF KOREA" -"2780495872","2780561407","AU","AUS","AUSTRALIA" -"2780561408","2780758015","US","USA","UNITED STATES" -"2780758016","2780823551","AU","AUS","AUSTRALIA" -"2780823552","2780904159","US","USA","UNITED STATES" -"2780904160","2780904191","CA","CAN","CANADA" -"2780904192","2780909887","US","USA","UNITED STATES" -"2780909888","2780909903","CA","CAN","CANADA" -"2780909904","2780921359","US","USA","UNITED STATES" -"2780921360","2780921367","GB","GBR","UNITED KINGDOM" -"2780921368","2780925951","US","USA","UNITED STATES" -"2780925952","2780926207","GB","GBR","UNITED KINGDOM" -"2780926208","2780926271","US","USA","UNITED STATES" -"2780926272","2780926303","FR","FRA","FRANCE" -"2780926304","2780926319","IT","ITA","ITALY" -"2780926320","2780926823","US","USA","UNITED STATES" -"2780926824","2780926847","GB","GBR","UNITED KINGDOM" -"2780926848","2780926975","US","USA","UNITED STATES" -"2780926976","2780927487","GB","GBR","UNITED KINGDOM" -"2780927488","2780927743","US","USA","UNITED STATES" -"2780927744","2780927999","GB","GBR","UNITED KINGDOM" -"2780928000","2780928031","US","USA","UNITED STATES" -"2780928032","2780928127","GB","GBR","UNITED KINGDOM" -"2780928128","2780928383","US","USA","UNITED STATES" -"2780928384","2780928415","GB","GBR","UNITED KINGDOM" -"2780928416","2780928447","US","USA","UNITED STATES" -"2780928448","2780928455","GB","GBR","UNITED KINGDOM" -"2780928456","2780928463","US","USA","UNITED STATES" -"2780928464","2780928471","DE","DEU","GERMANY" -"2780928472","2780929023","US","USA","UNITED STATES" -"2780929024","2780929279","GB","GBR","UNITED KINGDOM" -"2780929280","2780929791","FR","FRA","FRANCE" -"2780929792","2780930047","US","USA","UNITED STATES" -"2780930048","2780930559","GB","GBR","UNITED KINGDOM" -"2780930560","2780930879","US","USA","UNITED STATES" -"2780930880","2780930927","GB","GBR","UNITED KINGDOM" -"2780930928","2780930943","US","USA","UNITED STATES" -"2780930944","2780930959","GB","GBR","UNITED KINGDOM" -"2780930960","2780930975","FR","FRA","FRANCE" -"2780930976","2780931007","US","USA","UNITED STATES" -"2780931008","2780931039","GB","GBR","UNITED KINGDOM" -"2780931040","2780931071","US","USA","UNITED STATES" -"2780931072","2780932335","GB","GBR","UNITED KINGDOM" -"2780932336","2780932607","US","USA","UNITED STATES" -"2780932608","2780933119","GB","GBR","UNITED KINGDOM" -"2780933120","2780933151","US","USA","UNITED STATES" -"2780933152","2780933191","GB","GBR","UNITED KINGDOM" -"2780933192","2780933247","US","USA","UNITED STATES" -"2780933248","2780933631","GB","GBR","UNITED KINGDOM" -"2780933632","2780933887","US","USA","UNITED STATES" -"2780933888","2780934143","GB","GBR","UNITED KINGDOM" -"2780934144","2780934167","PL","POL","POLAND" -"2780934168","2780940367","US","USA","UNITED STATES" -"2780940368","2780940383","CA","CAN","CANADA" -"2780940384","2780941055","US","USA","UNITED STATES" -"2780941056","2780941087","GB","GBR","UNITED KINGDOM" -"2780941088","2780941719","US","USA","UNITED STATES" -"2780941720","2780941727","GB","GBR","UNITED KINGDOM" -"2780941728","2780943575","US","USA","UNITED STATES" -"2780943576","2780943583","BM","BMU","BERMUDA" -"2780943584","2780945311","US","USA","UNITED STATES" -"2780945312","2780945375","BM","BMU","BERMUDA" -"2780945376","2780945663","US","USA","UNITED STATES" -"2780945664","2780945695","BM","BMU","BERMUDA" -"2780945696","2780946127","US","USA","UNITED STATES" -"2780946128","2780946135","CA","CAN","CANADA" -"2780946136","2780947903","US","USA","UNITED STATES" -"2780947904","2780947967","MY","MYS","MALAYSIA" -"2780947968","2780952967","US","USA","UNITED STATES" -"2780952968","2780952975","GB","GBR","UNITED KINGDOM" -"2780952976","2780954623","US","USA","UNITED STATES" -"2780954624","2781020159","KR","KOR","REPUBLIC OF KOREA" -"2781020160","2781478911","US","USA","UNITED STATES" -"2781478912","2781544447","HK","HKG","HONG KONG" -"2781544448","2781675519","US","USA","UNITED STATES" -"2781675520","2781741055","NZ","NZL","NEW ZEALAND" -"2781741056","2781937663","US","USA","UNITED STATES" -"2781937664","2782003199","TH","THA","THAILAND" -"2782134272","2782199807","US","USA","UNITED STATES" -"2782199808","2782265343","KR","KOR","REPUBLIC OF KOREA" -"2782265344","2782658559","US","USA","UNITED STATES" -"2782658560","2782724095","PH","PHL","PHILIPPINES" -"2782724096","2782789631","US","USA","UNITED STATES" -"2782789632","2782855167","CH","CHE","SWITZERLAND" -"2782855168","2783182847","US","USA","UNITED STATES" -"2783182848","2783248383","AU","AUS","AUSTRALIA" -"2783248384","2783313919","KR","KOR","REPUBLIC OF KOREA" -"2783313920","2783379455","US","USA","UNITED STATES" -"2783444992","2783510527","US","USA","UNITED STATES" -"2783576064","2783969279","US","USA","UNITED STATES" -"2783969280","2784034815","AU","AUS","AUSTRALIA" -"2784034816","2784165887","JP","JPN","JAPAN" -"2784165888","2784296959","KR","KOR","REPUBLIC OF KOREA" -"2784296960","2784362495","US","USA","UNITED STATES" -"2784362496","2784428031","KR","KOR","REPUBLIC OF KOREA" -"2784428032","2784952319","US","USA","UNITED STATES" -"2785148928","2785542143","US","USA","UNITED STATES" -"2785542144","2786066431","CH","CHE","SWITZERLAND" -"2786066432","2788163583","US","USA","UNITED STATES" -"2788229120","2788229935","US","USA","UNITED STATES" -"2788229936","2788229943","GB","GBR","UNITED KINGDOM" -"2788229944","2788230663","US","USA","UNITED STATES" -"2788230664","2788230679","GB","GBR","UNITED KINGDOM" -"2788230680","2788233263","US","USA","UNITED STATES" -"2788233264","2788233271","GB","GBR","UNITED KINGDOM" -"2788233272","2788234279","US","USA","UNITED STATES" -"2788234280","2788234287","CA","CAN","CANADA" -"2788234288","2788234767","US","USA","UNITED STATES" -"2788234768","2788234775","GB","GBR","UNITED KINGDOM" -"2788234776","2788238847","US","USA","UNITED STATES" -"2788238848","2788238855","GB","GBR","UNITED KINGDOM" -"2788238856","2788241447","US","USA","UNITED STATES" -"2788241448","2788241455","GB","GBR","UNITED KINGDOM" -"2788241456","2788245007","US","USA","UNITED STATES" -"2788245008","2788245023","CA","CAN","CANADA" -"2788245024","2788261887","US","USA","UNITED STATES" -"2788261888","2788294655","GB","GBR","UNITED KINGDOM" -"2788294656","2789081087","US","USA","UNITED STATES" -"2789179392","2789203967","US","USA","UNITED STATES" -"2789212160","2789277695","AU","AUS","AUSTRALIA" -"2789277696","2789343231","NZ","NZL","NEW ZEALAND" -"2789343232","2789933055","US","USA","UNITED STATES" -"2789933056","2789998591","CL","CHL","CHILE" -"2789998592","2790129663","US","USA","UNITED STATES" -"2790195200","2790260735","KR","KOR","REPUBLIC OF KOREA" -"2790260736","2790326271","US","USA","UNITED STATES" -"2790326272","2790391807","HK","HKG","HONG KONG" -"2790391808","2790457343","US","USA","UNITED STATES" -"2790457344","2790522879","NZ","NZL","NEW ZEALAND" -"2790522880","2790588415","US","USA","UNITED STATES" -"2790653952","2790719487","US","USA","UNITED STATES" -"2790719488","2790785023","SA","SAU","SAUDI ARABIA" -"2790850560","2791571455","US","USA","UNITED STATES" -"2791571456","2791636991","JP","JPN","JAPAN" -"2791636992","2791768063","US","USA","UNITED STATES" -"2791768064","2791899135","KR","KOR","REPUBLIC OF KOREA" -"2791899136","2791964671","US","USA","UNITED STATES" -"2791964672","2792030207","NZ","NZL","NEW ZEALAND" -"2792030208","2792226815","US","USA","UNITED STATES" -"2792226816","2792292351","CL","CHL","CHILE" -"2792292352","2792357887","CN","CHN","CHINA" -"2792357888","2792488959","US","USA","UNITED STATES" -"2792488960","2792554495","BO","BOL","BOLIVIA" -"2792554496","2792751103","US","USA","UNITED STATES" -"2792751104","2792882175","JP","JPN","JAPAN" -"2792882176","2792947711","AU","AUS","AUSTRALIA" -"2792947712","2793013247","SG","SGP","SINGAPORE" -"2793013248","2793209855","US","USA","UNITED STATES" -"2793209856","2793275391","KR","KOR","REPUBLIC OF KOREA" -"2793275392","2801795071","US","USA","UNITED STATES" -"2801860608","2802515967","US","USA","UNITED STATES" -"2802515968","2802581503","CA","CAN","CANADA" -"2802581504","2802909183","US","USA","UNITED STATES" -"2802909184","2802974719","CA","CAN","CANADA" -"2802974720","2803630079","US","USA","UNITED STATES" -"2803630080","2803695615","CL","CHL","CHILE" -"2803695616","2803761151","US","USA","UNITED STATES" -"2803761152","2803826687","AU","AUS","AUSTRALIA" -"2803826688","2803892223","US","USA","UNITED STATES" -"2803892224","2805465087","CA","CAN","CANADA" -"2805989376","2806644735","US","USA","UNITED STATES" -"2806644736","2806710271","CA","CAN","CANADA" -"2806710272","2807103487","US","USA","UNITED STATES" -"2807103488","2807169023","NL","NLD","NETHERLANDS" -"2807169024","2807824383","US","USA","UNITED STATES" -"2807824384","2807889919","CA","CAN","CANADA" -"2807889920","2808545279","US","USA","UNITED STATES" -"2808545280","2808610815","AU","AUS","AUSTRALIA" -"2808610816","2808872959","US","USA","UNITED STATES" -"2808938496","2809069567","US","USA","UNITED STATES" -"2809069568","2809135103","SA","SAU","SAUDI ARABIA" -"2809135104","2809397247","US","USA","UNITED STATES" -"2809462784","2809855999","US","USA","UNITED STATES" -"2809856000","2809921535","AU","AUS","AUSTRALIA" -"2809921536","2809987071","US","USA","UNITED STATES" -"2809987072","2810052607","CA","CAN","CANADA" -"2810052608","2810249215","US","USA","UNITED STATES" -"2810249216","2810314751","CA","CAN","CANADA" -"2810314752","2810380287","AU","AUS","AUSTRALIA" -"2810380288","2810576895","US","USA","UNITED STATES" -"2810576896","2810642431","VE","VEN","VENEZUELA" -"2810642432","2810904575","US","USA","UNITED STATES" -"2810904576","2810970111","CN","CHN","CHINA" -"2810970112","2811559935","US","USA","UNITED STATES" -"2811559936","2811625471","CH","CHE","SWITZERLAND" -"2811625472","2812084223","US","USA","UNITED STATES" -"2812084224","2812149759","BO","BOL","BOLIVIA" -"2812149760","2812411903","US","USA","UNITED STATES" -"2812411904","2812477439","AU","AUS","AUSTRALIA" -"2812477440","2812805119","US","USA","UNITED STATES" -"2812805120","2812870655","CH","CHE","SWITZERLAND" -"2812870656","2812936191","JP","JPN","JAPAN" -"2812936192","2813067263","US","USA","UNITED STATES" -"2813067264","2813132799","GB","GBR","UNITED KINGDOM" -"2813132800","2813263871","US","USA","UNITED STATES" -"2813263872","2813329407","JP","JPN","JAPAN" -"2813329408","2813526015","US","USA","UNITED STATES" -"2813526016","2813591551","NZ","NZL","NEW ZEALAND" -"2813591552","2814181375","US","USA","UNITED STATES" -"2814181376","2814246911","AU","AUS","AUSTRALIA" -"2814246912","2815098879","US","USA","UNITED STATES" -"2815098880","2815164415","GB","GBR","UNITED KINGDOM" -"2815164416","2815229951","US","USA","UNITED STATES" -"2815229952","2815295487","ID","IDN","INDONESIA" -"2815295488","2815986687","US","USA","UNITED STATES" -"2815986688","2815986815","GB","GBR","UNITED KINGDOM" -"2815986816","2815986831","US","USA","UNITED STATES" -"2815986832","2815987215","GB","GBR","UNITED KINGDOM" -"2815987216","2815987231","US","USA","UNITED STATES" -"2815987232","2815987271","GB","GBR","UNITED KINGDOM" -"2815987272","2815987327","US","USA","UNITED STATES" -"2815987328","2815987391","GB","GBR","UNITED KINGDOM" -"2815987392","2815987711","US","USA","UNITED STATES" -"2815987712","2815988351","FR","FRA","FRANCE" -"2815988352","2815988479","US","USA","UNITED STATES" -"2815988480","2815988543","GB","GBR","UNITED KINGDOM" -"2815988544","2816001151","US","USA","UNITED STATES" -"2816001152","2816001183","DE","DEU","GERMANY" -"2816001184","2816671743","US","USA","UNITED STATES" -"2816671744","2816737279","CA","CAN","CANADA" -"2816737280","2818113535","US","USA","UNITED STATES" -"2818244608","2818310143","US","USA","UNITED STATES" -"2818310144","2818375679","AR","ARG","ARGENTINA" -"2818375680","2818572287","US","USA","UNITED STATES" -"2818637824","2818703359","CH","CHE","SWITZERLAND" -"2818703360","2823159807","US","USA","UNITED STATES" -"2823159808","2823225343","HK","HKG","HONG KONG" -"2823225344","2823553023","US","USA","UNITED STATES" -"2823618560","2823684095","PA","PAN","PANAMA" -"2823684096","2823749631","KR","KOR","REPUBLIC OF KOREA" -"2823749632","2823815167","JP","JPN","JAPAN" -"2823946240","2824011775","US","USA","UNITED STATES" -"2824011776","2824077311","AR","ARG","ARGENTINA" -"2824077312","2824404991","US","USA","UNITED STATES" -"2824536064","2824798207","US","USA","UNITED STATES" -"2824798208","2824863743","TW","TWN","TAIWAN" -"2824863744","2824929279","AR","ARG","ARGENTINA" -"2824929280","2825191423","US","USA","UNITED STATES" -"2825191424","2825256959","AR","ARG","ARGENTINA" -"2825256960","2825519103","US","USA","UNITED STATES" -"2825519104","2825584639","HK","HKG","HONG KONG" -"2825584640","2826108927","US","USA","UNITED STATES" -"2826108928","2826174463","KR","KOR","REPUBLIC OF KOREA" -"2826174464","2826436607","US","USA","UNITED STATES" -"2826436608","2826502143","TH","THA","THAILAND" -"2826567680","2826633215","US","USA","UNITED STATES" -"2826633216","2826698751","GU","GUM","GUAM" -"2826698752","2826829823","US","USA","UNITED STATES" -"2826829824","2826895359","KR","KOR","REPUBLIC OF KOREA" -"2826895360","2826960895","US","USA","UNITED STATES" -"2827026432","2827091967","US","USA","UNITED STATES" -"2827091968","2827157503","AU","AUS","AUSTRALIA" -"2827157504","2827223039","KR","KOR","REPUBLIC OF KOREA" -"2827223040","2827288575","AU","AUS","AUSTRALIA" -"2827288576","2827354111","US","USA","UNITED STATES" -"2827354112","2827419647","AU","AUS","AUSTRALIA" -"2827419648","2827681791","US","USA","UNITED STATES" -"2827681792","2827747327","TR","TUR","TURKEY" -"2827747328","2827812863","AU","AUS","AUSTRALIA" -"2827812864","2827878399","US","USA","UNITED STATES" -"2827943936","2828009471","US","USA","UNITED STATES" -"2828009472","2828075007","CA","CAN","CANADA" -"2828075008","2828533759","US","USA","UNITED STATES" -"2828533760","2828664831","AU","AUS","AUSTRALIA" -"2828664832","2828730367","KR","KOR","REPUBLIC OF KOREA" -"2828795904","2829058047","US","USA","UNITED STATES" -"2829058048","2829123583","CN","CHN","CHINA" -"2829123584","2829254655","US","USA","UNITED STATES" -"2829254656","2829320191","CH","CHE","SWITZERLAND" -"2829385728","2829451263","MX","MEX","MEXICO" -"2829451264","2829516799","US","USA","UNITED STATES" -"2829582336","2829844479","US","USA","UNITED STATES" -"2829910016","2830106623","US","USA","UNITED STATES" -"2830106624","2830172159","CO","COL","COLOMBIA" -"2830172160","2830434303","US","USA","UNITED STATES" -"2830499840","2830761983","US","USA","UNITED STATES" -"2830761984","2830827519","AU","AUS","AUSTRALIA" -"2830827520","2830893055","KW","KWT","KUWAIT" -"2830893056","2830958591","KR","KOR","REPUBLIC OF KOREA" -"2830958592","2831286271","US","USA","UNITED STATES" -"2831548416","2831613951","AU","AUS","AUSTRALIA" -"2831613952","2831810559","US","USA","UNITED STATES" -"2831810560","2831876095","IT","ITA","ITALY" -"2831876096","2832007167","US","USA","UNITED STATES" -"2832138240","2832269311","US","USA","UNITED STATES" -"2832465920","2832793599","US","USA","UNITED STATES" -"2832793600","2832859135","AU","AUS","AUSTRALIA" -"2832859136","2832924671","US","USA","UNITED STATES" -"2832924672","2832990207","KR","KOR","REPUBLIC OF KOREA" -"2832990208","2833383423","US","USA","UNITED STATES" -"2833383424","2833448959","AR","ARG","ARGENTINA" -"2833580032","2833711103","US","USA","UNITED STATES" -"2833711104","2833776639","CL","CHL","CHILE" -"2833842176","2833907711","US","USA","UNITED STATES" -"2833907712","2833973247","GT","GTM","GUATEMALA" -"2833973248","2833989631","US","USA","UNITED STATES" -"2834038784","2834497535","US","USA","UNITED STATES" -"2834497536","2834563071","SV","SLV","EL SALVADOR" -"2834563072","2834825215","US","USA","UNITED STATES" -"2834825216","2834956287","KR","KOR","REPUBLIC OF KOREA" -"2834956288","2835087359","US","USA","UNITED STATES" -"2835087360","2835152895","AU","AUS","AUSTRALIA" -"2835218432","2835283967","US","USA","UNITED STATES" -"2835283968","2835349503","MX","MEX","MEXICO" -"2835480576","2837446655","US","USA","UNITED STATES" -"2837446656","2839543807","CH","CHE","SWITZERLAND" -"2839543808","2840015359","US","USA","UNITED STATES" -"2840015360","2840015615","GB","GBR","UNITED KINGDOM" -"2840015616","2843803647","US","USA","UNITED STATES" -"2843869184","2844524543","US","USA","UNITED STATES" -"2844524544","2844590079","KR","KOR","REPUBLIC OF KOREA" -"2844590080","2845704191","US","USA","UNITED STATES" -"2845704192","2845769727","CU","CUB","CUBA" -"2845835264","2848276479","US","USA","UNITED STATES" -"2848325632","2848522239","US","USA","UNITED STATES" -"2848522240","2848587775","AU","AUS","AUSTRALIA" -"2848653312","2848980991","US","USA","UNITED STATES" -"2848980992","2849177599","AU","AUS","AUSTRALIA" -"2849177600","2849177855","JP","JPN","JAPAN" -"2849177856","2849178111","CN","CHN","CHINA" -"2849178112","2849178367","KR","KOR","REPUBLIC OF KOREA" -"2849178368","2849178623","TW","TWN","TAIWAN" -"2849178624","2849178879","ID","IDN","INDONESIA" -"2849178880","2849179135","VN","VNM","VIET NAM" -"2849179136","2849964031","AU","AUS","AUSTRALIA" -"2849964032","2850029567","MY","MYS","MALAYSIA" -"2850029568","2851012607","US","USA","UNITED STATES" -"2851078144","2852061183","US","USA","UNITED STATES" -"2852192256","2853306367","US","USA","UNITED STATES" -"2853306368","2853371903","CL","CHL","CHILE" -"2853371904","2853765119","US","USA","UNITED STATES" -"2853765120","2853830655","MX","MEX","MEXICO" -"2853830656","2854617087","US","USA","UNITED STATES" -"2854617088","2854682623","MY","MYS","MALAYSIA" -"2854682624","2855469055","US","USA","UNITED STATES" -"2855469056","2855484671","PY","PRY","PARAGUAY" -"2855484672","2855485439","AR","ARG","ARGENTINA" -"2855485440","2855501823","UY","URY","URUGUAY" -"2855501824","2855534591","AR","ARG","ARGENTINA" -"2855534592","2856058879","US","USA","UNITED STATES" -"2856058880","2856124415","CH","CHE","SWITZERLAND" -"2856124416","2856452095","US","USA","UNITED STATES" -"2856452096","2856517631","BR","BRA","BRAZIL" -"2856517632","2856714239","US","USA","UNITED STATES" -"2856714240","2856779775","MX","MEX","MEXICO" -"2856779776","2857238527","US","USA","UNITED STATES" -"2857697280","2858352639","US","USA","UNITED STATES" -"2858352640","2858418175","SG","SGP","SINGAPORE" -"2858418176","2859007999","US","USA","UNITED STATES" -"2859008000","2859073535","JP","JPN","JAPAN" -"2859073536","2861957119","US","USA","UNITED STATES" -"2862022656","2862284799","US","USA","UNITED STATES" -"2862284800","2862350335","AR","ARG","ARGENTINA" -"2862350336","2862415871","US","USA","UNITED STATES" -"2862415872","2862481407","AU","AUS","AUSTRALIA" -"2862481408","2863202303","US","USA","UNITED STATES" -"2863202304","2863267839","MX","MEX","MEXICO" -"2863267840","2863595519","US","USA","UNITED STATES" -"2863595520","2863661055","CA","CAN","CANADA" -"2863661056","2863857663","US","USA","UNITED STATES" -"2863857664","2863923199","SG","SGP","SINGAPORE" -"2863923200","2865577983","US","USA","UNITED STATES" -"2865577984","2865610751","BE","BEL","BELGIUM" -"2865610752","2865889279","US","USA","UNITED STATES" -"2865889280","2865954815","AR","ARG","ARGENTINA" -"2865954816","2867265535","US","USA","UNITED STATES" -"2867331072","2867396607","US","USA","UNITED STATES" -"2867462144","2867593215","US","USA","UNITED STATES" -"2867593216","2867639295","CH","CHE","SWITZERLAND" -"2867639296","2867639551","AT","AUT","AUSTRIA" -"2867639552","2867724287","CH","CHE","SWITZERLAND" -"2867855360","2868117503","US","USA","UNITED STATES" -"2868379648","2868772863","US","USA","UNITED STATES" -"2868838400","2868903935","BE","BEL","BELGIUM" -"2869952512","2870018047","FR","FRA","FRANCE" -"2870018048","2870083583","DE","DEU","GERMANY" -"2870083584","2870149119","FR","FRA","FRANCE" -"2870149120","2870214655","HU","HUN","HUNGARY" -"2870214656","2870280191","DK","DNK","DENMARK" -"2870280192","2870345727","NL","NLD","NETHERLANDS" -"2870345728","2870411263","GB","GBR","UNITED KINGDOM" -"2870411264","2870476799","NO","NOR","NORWAY" -"2870476800","2870542335","DE","DEU","GERMANY" -"2870542336","2870575103","CH","CHE","SWITZERLAND" -"2870575104","2870583295","SE","SWE","SWEDEN" -"2870583296","2870583551","NL","NLD","NETHERLANDS" -"2870583552","2870584319","NO","NOR","NORWAY" -"2870607872","2870673407","BE","BEL","BELGIUM" -"2870673408","2870738943","CH","CHE","SWITZERLAND" -"2870738944","2870935551","GB","GBR","UNITED KINGDOM" -"2870935552","2871001087","HU","HUN","HUNGARY" -"2871001088","2871066623","SE","SWE","SWEDEN" -"2871066624","2871083007","CH","CHE","SWITZERLAND" -"2873098240","2873884671","US","USA","UNITED STATES" -"2877292544","2882469887","US","USA","UNITED STATES" -"2894069760","2899902463","US","USA","UNITED STATES" -"2902523904","2904555519","US","USA","UNITED STATES" -"2904555520","2904817663","CA","CAN","CANADA" -"2904817664","2905381887","US","USA","UNITED STATES" -"2905381888","2905382016","CA","CAN","CANADA" -"2905382017","2905382399","US","USA","UNITED STATES" -"2905382400","2905382655","CA","CAN","CANADA" -"2905382656","2905383423","US","USA","UNITED STATES" -"2905383424","2905383679","CA","CAN","CANADA" -"2905383680","2905384447","US","USA","UNITED STATES" -"2905384448","2905384703","CA","CAN","CANADA" -"2905384704","2905388031","US","USA","UNITED STATES" -"2905388032","2905390335","CA","CAN","CANADA" -"2905390336","2905391871","US","USA","UNITED STATES" -"2905391872","2905392127","CA","CAN","CANADA" -"2905392128","2905393151","US","USA","UNITED STATES" -"2905393152","2905394687","CA","CAN","CANADA" -"2905394688","2905395455","US","USA","UNITED STATES" -"2905395456","2905398527","CA","CAN","CANADA" -"2905398528","2905404671","US","USA","UNITED STATES" -"2905404672","2905405439","CA","CAN","CANADA" -"2905405440","2905407743","US","USA","UNITED STATES" -"2905407744","2905407999","TW","TWN","TAIWAN" -"2905408000","2905450495","US","USA","UNITED STATES" -"2905450496","2905451007","CA","CAN","CANADA" -"2905451008","2905451519","US","USA","UNITED STATES" -"2905451520","2905451647","PA","PAN","PANAMA" -"2905451648","2905451775","US","USA","UNITED STATES" -"2905451776","2905451903","PA","PAN","PANAMA" -"2905451904","2905473023","US","USA","UNITED STATES" -"2905473024","2905481215","CA","CAN","CANADA" -"2905481216","2913861631","US","USA","UNITED STATES" -"2913992704","2914516991","CA","CAN","CANADA" -"2914516992","2915237887","US","USA","UNITED STATES" -"2915303424","2915475455","US","USA","UNITED STATES" -"2915565568","2915860479","US","USA","UNITED STATES" -"2915893248","2915958783","US","USA","UNITED STATES" -"2915958784","2916024319","CA","CAN","CANADA" -"2916024320","2916163583","US","USA","UNITED STATES" -"2916163584","2916171775","CA","CAN","CANADA" -"2916171776","2916175871","US","USA","UNITED STATES" -"2916179968","2916184063","US","USA","UNITED STATES" -"2916188160","2916196351","CA","CAN","CANADA" -"2916196352","2916200447","US","USA","UNITED STATES" -"2916204544","2916253695","US","USA","UNITED STATES" -"2916253696","2916286463","CA","CAN","CANADA" -"2916286464","2916319231","US","USA","UNITED STATES" -"2916319232","2916335615","PR","PRI","PUERTO RICO" -"2916352000","2916364287","US","USA","UNITED STATES" -"2916368384","2916401151","CA","CAN","CANADA" -"2916401152","2916410879","US","USA","UNITED STATES" -"2916410880","2916411135","GB","GBR","UNITED KINGDOM" -"2916411136","2916417535","US","USA","UNITED STATES" -"2916417536","2916433919","CA","CAN","CANADA" -"2916433920","2916434175","US","USA","UNITED STATES" -"2916434176","2916434495","CA","CAN","CANADA" -"2916434496","2916437503","US","USA","UNITED STATES" -"2916437504","2916437567","CA","CAN","CANADA" -"2916437568","2916442111","US","USA","UNITED STATES" -"2916442112","2916442367","CA","CAN","CANADA" -"2916442368","2916442623","US","USA","UNITED STATES" -"2916442624","2916442879","CA","CAN","CANADA" -"2916442880","2916443582","US","USA","UNITED STATES" -"2916443583","2916443614","PK","PAK","PAKISTAN" -"2916443615","2916443647","CA","CAN","CANADA" -"2916443648","2916444638","US","USA","UNITED STATES" -"2916444639","2916444671","CA","CAN","CANADA" -"2916444672","2916444927","US","USA","UNITED STATES" -"2916444928","2916445951","CA","CAN","CANADA" -"2916445952","2916447231","US","USA","UNITED STATES" -"2916447232","2916448255","CA","CAN","CANADA" -"2916448256","2916449279","US","USA","UNITED STATES" -"2916449280","2916450303","CA","CAN","CANADA" -"2916450304","2916470783","US","USA","UNITED STATES" -"2916483072","2916499455","US","USA","UNITED STATES" -"2916548608","2916581375","US","USA","UNITED STATES" -"2916581376","2916614143","PR","PRI","PUERTO RICO" -"2916614144","2917171199","US","USA","UNITED STATES" -"2917175296","2917195775","US","USA","UNITED STATES" -"2917195776","2917203967","CA","CAN","CANADA" -"2917203968","2917240831","US","USA","UNITED STATES" -"2917244928","2917257215","US","USA","UNITED STATES" -"2917257216","2917261311","KY","CYM","CAYMAN ISLANDS" -"2917261312","2917265407","US","USA","UNITED STATES" -"2917265408","2917269503","JM","JAM","JAMAICA" -"2917269504","2917441535","US","USA","UNITED STATES" -"2917466112","2917474303","US","USA","UNITED STATES" -"2917498880","2917564415","US","USA","UNITED STATES" -"2917662720","2917681919","US","USA","UNITED STATES" -"2917681920","2917682175","CA","CAN","CANADA" -"2917682176","2917685247","US","USA","UNITED STATES" -"2917685248","2917685503","CA","CAN","CANADA" -"2917685504","2917765119","US","USA","UNITED STATES" -"2917769216","2917777407","US","USA","UNITED STATES" -"2917793792","2917875711","US","USA","UNITED STATES" -"2918481920","2918486015","US","USA","UNITED STATES" -"2919206912","2919211007","CA","CAN","CANADA" -"2919235584","2919759871","CA","CAN","CANADA" -"2919759872","2921496895","US","USA","UNITED STATES" -"2921496896","2921496903","IN","IND","INDIA" -"2921496904","2921496967","US","USA","UNITED STATES" -"2921496968","2921496975","IN","IND","INDIA" -"2921496976","2921497375","US","USA","UNITED STATES" -"2921497376","2921497407","IN","IND","INDIA" -"2921497408","2921497415","US","USA","UNITED STATES" -"2921497416","2921497423","IN","IND","INDIA" -"2921497424","2921497471","US","USA","UNITED STATES" -"2921497472","2921497599","IN","IND","INDIA" -"2921497600","2921503695","US","USA","UNITED STATES" -"2921503696","2921503703","GB","GBR","UNITED KINGDOM" -"2921503704","2921505919","US","USA","UNITED STATES" -"2921505920","2921506047","IN","IND","INDIA" -"2921506048","2921506431","US","USA","UNITED STATES" -"2921506432","2921506463","IN","IND","INDIA" -"2921506464","2921508095","US","USA","UNITED STATES" -"2921508096","2921508103","IN","IND","INDIA" -"2921508104","2921508319","US","USA","UNITED STATES" -"2921508320","2921508351","IN","IND","INDIA" -"2921508352","2921508639","US","USA","UNITED STATES" -"2921508640","2921508671","IN","IND","INDIA" -"2921508672","2921508679","US","USA","UNITED STATES" -"2921508680","2921508727","IN","IND","INDIA" -"2921508728","2921511351","US","USA","UNITED STATES" -"2921511352","2921511359","IN","IND","INDIA" -"2921511360","2921511743","US","USA","UNITED STATES" -"2921511744","2921511759","BE","BEL","BELGIUM" -"2921511760","2921512703","US","USA","UNITED STATES" -"2921512704","2921512959","CA","CAN","CANADA" -"2921512960","2921562111","US","USA","UNITED STATES" -"2921562112","2921594879","CA","CAN","CANADA" -"2921594880","2925002751","US","USA","UNITED STATES" -"2925002752","2925527039","CA","CAN","CANADA" -"2925527040","2926575615","US","USA","UNITED STATES" -"2926575616","2927099903","CA","CAN","CANADA" -"2927099904","2927575039","US","USA","UNITED STATES" -"2927591424","2927599615","US","USA","UNITED STATES" -"2927689728","2928177151","US","USA","UNITED STATES" -"2928181248","2928221695","US","USA","UNITED STATES" -"2928221696","2928221951","CA","CAN","CANADA" -"2928221952","2928226303","US","USA","UNITED STATES" -"2928226304","2928228087","CA","CAN","CANADA" -"2928228088","2928228095","RU","RUS","RUSSIAN FEDERATION" -"2928228096","2928230399","CA","CAN","CANADA" -"2928230400","2928261375","US","USA","UNITED STATES" -"2928261376","2928261887","CA","CAN","CANADA" -"2928261888","2928263167","US","USA","UNITED STATES" -"2928263168","2928279551","CA","CAN","CANADA" -"2928279552","2928312319","US","USA","UNITED STATES" -"2928312320","2928316415","CA","CAN","CANADA" -"2928316416","2928323135","US","USA","UNITED STATES" -"2928323136","2928323143","RU","RUS","RUSSIAN FEDERATION" -"2928323144","2928328703","US","USA","UNITED STATES" -"2928328704","2928336895","CA","CAN","CANADA" -"2928336896","2928455679","US","USA","UNITED STATES" -"2928455680","2928459775","CA","CAN","CANADA" -"2928459776","2928541695","US","USA","UNITED STATES" -"2928541696","2928571615","CA","CAN","CANADA" -"2928571616","2928571647","IT","ITA","ITALY" -"2928571648","2928607231","CA","CAN","CANADA" -"2928607232","2936012799","US","USA","UNITED STATES" -"2936012800","2937847807","CN","CHN","CHINA" -"2937847808","2937848831","KH","KHM","CAMBODIA" -"2937848832","2937849855","JP","JPN","JAPAN" -"2937849856","2937850879","AU","AUS","AUSTRALIA" -"2937850880","2937851903","MY","MYS","MALAYSIA" -"2937851904","2937855999","JP","JPN","JAPAN" -"2937856000","2937860095","KR","KOR","REPUBLIC OF KOREA" -"2937860096","2937864191","JP","JPN","JAPAN" -"2937864192","2937880575","SG","SGP","SINGAPORE" -"2937880576","2937913343","JP","JPN","JAPAN" -"2937913344","2937978879","BD","BGD","BANGLADESH" -"2937978880","2938109951","CN","CHN","CHINA" -"2938109952","2938634239","AU","AUS","AUSTRALIA" -"2938634240","2938699775","IN","IND","INDIA" -"2938699776","2938703871","KR","KOR","REPUBLIC OF KOREA" -"2938703872","2938707967","HK","HKG","HONG KONG" -"2938707968","2938710015","JP","JPN","JAPAN" -"2938710016","2938712063","AU","AUS","AUSTRALIA" -"2938712064","2938716159","TW","TWN","TAIWAN" -"2938716160","2938732543","JP","JPN","JAPAN" -"2938732544","2938765311","SG","SGP","SINGAPORE" -"2938765312","2938961919","CN","CHN","CHINA" -"2938961920","2938978303","HK","HKG","HONG KONG" -"2938978304","2938996735","AU","AUS","AUSTRALIA" -"2938996736","2938998783","JP","JPN","JAPAN" -"2938998784","2939002879","AU","AUS","AUSTRALIA" -"2939002880","2939004927","KR","KOR","REPUBLIC OF KOREA" -"2939004928","2939006975","JP","JPN","JAPAN" -"2939006976","2939007999","KP","PRK","DEMOCRATIC PEOPLE'S REPUBLIC OF KOREA" -"2939008000","2939009023","IN","IND","INDIA" -"2939009024","2939011071","ID","IDN","INDONESIA" -"2939011072","2939027455","KR","KOR","REPUBLIC OF KOREA" -"2939027456","2942304255","CN","CHN","CHINA" -"2942304256","2942566399","TW","TWN","TAIWAN" -"2942566400","2942599167","KH","KHM","CAMBODIA" -"2942599168","2942608383","IN","IND","INDIA" -"2942608384","2942609407","HK","HKG","HONG KONG" -"2942609408","2942615551","IN","IND","INDIA" -"2942615552","2942619647","HK","HKG","HONG KONG" -"2942619648","2942631935","JP","JPN","JAPAN" -"2942631936","2942697471","IN","IND","INDIA" -"2942697472","2942763007","CN","CHN","CHINA" -"2942763008","2942767103","JP","JPN","JAPAN" -"2942767104","2942771199","AU","AUS","AUSTRALIA" -"2942771200","2942779391","ID","IDN","INDONESIA" -"2942779392","2942795775","KR","KOR","REPUBLIC OF KOREA" -"2942795776","2942959615","JP","JPN","JAPAN" -"2942959616","2942960639","VN","VNM","VIET NAM" -"2942960640","2942961663","AU","AUS","AUSTRALIA" -"2942961664","2942965759","ID","IDN","INDONESIA" -"2942965760","2942967807","AU","AUS","AUSTRALIA" -"2942967808","2942975999","AF","AFG","AFGHANISTAN" -"2942976000","2942992383","KR","KOR","REPUBLIC OF KOREA" -"2942992384","2943025151","CN","CHN","CHINA" -"2943025152","2943041535","PK","PAK","PAKISTAN" -"2943041536","2943057919","KR","KOR","REPUBLIC OF KOREA" -"2943057920","2943090687","AU","AUS","AUSTRALIA" -"2943090688","2943221759","JP","JPN","JAPAN" -"2943221760","2943291391","PK","PAK","PAKISTAN" -"2943291392","2943295487","KR","KOR","REPUBLIC OF KOREA" -"2943295488","2943303679","TW","TWN","TAIWAN" -"2943303680","2943309823","JP","JPN","JAPAN" -"2943309824","2943310847","ID","IDN","INDONESIA" -"2943310848","2943311871","JP","JPN","JAPAN" -"2943311872","2943312895","HK","HKG","HONG KONG" -"2943312896","2943313919","NZ","NZL","NEW ZEALAND" -"2943313920","2943314943","SG","SGP","SINGAPORE" -"2943314944","2943315967","BD","BGD","BANGLADESH" -"2943315968","2943318015","ID","IDN","INDONESIA" -"2943318016","2943320063","JP","JPN","JAPAN" -"2943320064","2943336447","PK","PAK","PAKISTAN" -"2943336448","2943352831","TW","TWN","TAIWAN" -"2943352832","2944401407","KR","KOR","REPUBLIC OF KOREA" -"2944401408","2944925695","JP","JPN","JAPAN" -"2944925696","2945581055","MY","MYS","MALAYSIA" -"2945581056","2946236415","CN","CHN","CHINA" -"2946236416","2946301951","SG","SGP","SINGAPORE" -"2946301952","2946367487","LK","LKA","SRI LANKA" -"2946367488","2946375679","KR","KOR","REPUBLIC OF KOREA" -"2946375680","2946383871","ID","IDN","INDONESIA" -"2946383872","2946392063","IN","IND","INDIA" -"2946392064","2946393087","BD","BGD","BANGLADESH" -"2946393088","2946394111","JP","JPN","JAPAN" -"2946394112","2946396159","AU","AUS","AUSTRALIA" -"2946396160","2946400255","JP","JPN","JAPAN" -"2946400256","2946416639","NC","NCL","NEW CALEDONIA" -"2946416640","2946433023","PH","PHL","PHILIPPINES" -"2946433024","2946498559","HK","HKG","HONG KONG" -"2946498560","2947547135","CN","CHN","CHINA" -"2947547136","2947579903","PH","PHL","PHILIPPINES" -"2947579904","2947583999","KR","KOR","REPUBLIC OF KOREA" -"2947584000","2947586047","TO","TON","TONGA" -"2947586048","2947588095","JP","JPN","JAPAN" -"2947588096","2947590143","ID","IDN","INDONESIA" -"2947590144","2947590655","JP","JPN","JAPAN" -"2947590656","2947590783","HK","HKG","HONG KONG" -"2947590784","2947592191","SG","SGP","SINGAPORE" -"2947592192","2947596287","HK","HKG","HONG KONG" -"2947596288","2947597311","IN","IND","INDIA" -"2947597312","2947598335","JP","JPN","JAPAN" -"2947598336","2947602431","AU","AUS","AUSTRALIA" -"2947602432","2947603455","NZ","NZL","NEW ZEALAND" -"2947603456","2947604479","TH","THA","THAILAND" -"2947604480","2947612671","HK","HKG","HONG KONG" -"2947612672","2947678207","JP","JPN","JAPAN" -"2947678208","2947743743","CN","CHN","CHINA" -"2947743744","2947809279","JP","JPN","JAPAN" -"2947809280","2948071423","TW","TWN","TAIWAN" -"2948071424","2948104191","JP","JPN","JAPAN" -"2948104192","2948120575","CN","CHN","CHINA" -"2948120576","2948128767","AU","AUS","AUSTRALIA" -"2948128768","2948132863","ID","IDN","INDONESIA" -"2948132864","2948134911","TW","TWN","TAIWAN" -"2948134912","2948135935","ID","IDN","INDONESIA" -"2948135936","2948136959","IN","IND","INDIA" -"2948136960","2948595711","CN","CHN","CHINA" -"2948595712","2952790015","KR","KOR","REPUBLIC OF KOREA" -"2986344448","2987393023","DE","DEU","GERMANY" -"2987393024","2987397119","GB","GBR","UNITED KINGDOM" -"2987397120","2987401215","LV","LVA","LATVIA" -"2987401216","2987405311","LT","LTU","LITHUANIA" -"2987405312","2987409407","DE","DEU","GERMANY" -"2987409408","2987413503","NO","NOR","NORWAY" -"2987413504","2987417599","UA","UKR","UKRAINE" -"2987417600","2987425791","PL","POL","POLAND" -"2987425792","2987429887","BG","BGR","BULGARIA" -"2987429888","2987433983","RU","RUS","RUSSIAN FEDERATION" -"2987433984","2987438079","FR","FRA","FRANCE" -"2987438080","2987442175","FI","FIN","FINLAND" -"2987655168","2987659263","DE","DEU","GERMANY" -"2987659264","2987659519","BA","BIH","BOSNIA AND HERZEGOVINA" -"2987659520","2987661311","SI","SVN","SLOVENIA" -"2987661312","2987663359","GB","GBR","UNITED KINGDOM" -"2987663360","2987665407","IT","ITA","ITALY" -"2987665408","2987667455","RU","RUS","RUSSIAN FEDERATION" -"2987667456","2987669503","FR","FRA","FRANCE" -"2987669504","2987671551","NL","NLD","NETHERLANDS" -"2987671552","2987673599","FR","FRA","FRANCE" -"2987673600","2987675647","IT","ITA","ITALY" -"2987675648","2987677695","IE","IRL","IRELAND" -"2987677696","2987681791","DE","DEU","GERMANY" -"2987681792","2987683839","NO","NOR","NORWAY" -"2987683840","2987685887","IT","ITA","ITALY" -"2987685888","2987687935","GR","GRC","GREECE" -"2987687936","2987689983","RU","RUS","RUSSIAN FEDERATION" -"2987689984","2987692031","CZ","CZE","CZECH REPUBLIC" -"2987692032","2987694079","SA","SAU","SAUDI ARABIA" -"2987694080","2987696127","UA","UKR","UKRAINE" -"2987696128","2987698175","RS","SRB","SERBIA" -"2987698176","2987700223","NL","NLD","NETHERLANDS" -"2987700224","2987702271","RU","RUS","RUSSIAN FEDERATION" -"2987702272","2987704319","JO","JOR","JORDAN" -"2987704320","2987706367","GB","GBR","UNITED KINGDOM" -"2987706368","2987708415","RS","SRB","SERBIA" -"2987708416","2987710463","PT","PRT","PORTUGAL" -"2987710464","2987712511","DK","DNK","DENMARK" -"2987712512","2987714559","GB","GBR","UNITED KINGDOM" -"2987917312","2988179455","DE","DEU","GERMANY" -"2988179456","2988441599","SE","SWE","SWEDEN" -"2988441600","2988441603","CH","CHE","SWITZERLAND" -"2988441604","2988441655","FR","FRA","FRANCE" -"2988441656","2988441663","DE","DEU","GERMANY" -"2988441664","2988441839","FR","FRA","FRANCE" -"2988441840","2988441843","PL","POL","POLAND" -"2988441844","2988441847","BE","BEL","BELGIUM" -"2988441848","2988441855","FR","FRA","FRANCE" -"2988441856","2988441887","IT","ITA","ITALY" -"2988441888","2988441895","FR","FRA","FRANCE" -"2988441896","2988441903","PL","POL","POLAND" -"2988441904","2988441911","IT","ITA","ITALY" -"2988441912","2988441983","FR","FRA","FRANCE" -"2988441984","2988441999","NL","NLD","NETHERLANDS" -"2988442000","2988442003","FR","FRA","FRANCE" -"2988442004","2988442007","ES","ESP","SPAIN" -"2988442008","2988442047","FR","FRA","FRANCE" -"2988442048","2988442063","GB","GBR","UNITED KINGDOM" -"2988442064","2988442067","FR","FRA","FRANCE" -"2988442068","2988442071","BE","BEL","BELGIUM" -"2988442072","2988442075","FR","FRA","FRANCE" -"2988442076","2988442079","GB","GBR","UNITED KINGDOM" -"2988442080","2988442399","FR","FRA","FRANCE" -"2988442400","2988442431","ES","ESP","SPAIN" -"2988442432","2988442439","CZ","CZE","CZECH REPUBLIC" -"2988442440","2988442447","ES","ESP","SPAIN" -"2988442448","2988442463","GB","GBR","UNITED KINGDOM" -"2988442464","2988442895","FR","FRA","FRANCE" -"2988442896","2988442919","NL","NLD","NETHERLANDS" -"2988442920","2988442923","LT","LTU","LITHUANIA" -"2988442924","2988442927","GB","GBR","UNITED KINGDOM" -"2988442928","2988442975","FR","FRA","FRANCE" -"2988442976","2988442991","GB","GBR","UNITED KINGDOM" -"2988442992","2988443007","DE","DEU","GERMANY" -"2988443008","2988443023","GB","GBR","UNITED KINGDOM" -"2988443024","2988443027","FR","FRA","FRANCE" -"2988443028","2988443031","BE","BEL","BELGIUM" -"2988443032","2988443039","GB","GBR","UNITED KINGDOM" -"2988443040","2988443055","PL","POL","POLAND" -"2988443056","2988443071","DE","DEU","GERMANY" -"2988443072","2988443087","ES","ESP","SPAIN" -"2988443088","2988443111","PL","POL","POLAND" -"2988443112","2988443119","ES","ESP","SPAIN" -"2988443120","2988443391","FR","FRA","FRANCE" -"2988443392","2988443407","ES","ESP","SPAIN" -"2988443408","2988443455","FR","FRA","FRANCE" -"2988443456","2988443487","BE","BEL","BELGIUM" -"2988443488","2988443539","FR","FRA","FRANCE" -"2988443540","2988443547","ES","ESP","SPAIN" -"2988443548","2988443551","IT","ITA","ITALY" -"2988443552","2988443555","FR","FRA","FRANCE" -"2988443556","2988443559","PL","POL","POLAND" -"2988443560","2988443563","GB","GBR","UNITED KINGDOM" -"2988443564","2988443567","PL","POL","POLAND" -"2988443568","2988443583","FR","FRA","FRANCE" -"2988443584","2988443647","GB","GBR","UNITED KINGDOM" -"2988443648","2988444167","FR","FRA","FRANCE" -"2988444168","2988444171","CZ","CZE","CZECH REPUBLIC" -"2988444172","2988444199","FR","FRA","FRANCE" -"2988444200","2988444203","DE","DEU","GERMANY" -"2988444204","2988444207","NL","NLD","NETHERLANDS" -"2988444208","2988444415","FR","FRA","FRANCE" -"2988444416","2988444679","ES","ESP","SPAIN" -"2988444680","2988444695","PL","POL","POLAND" -"2988444696","2988444719","FR","FRA","FRANCE" -"2988444720","2988444735","ES","ESP","SPAIN" -"2988444736","2988444739","GB","GBR","UNITED KINGDOM" -"2988444740","2988444755","BE","BEL","BELGIUM" -"2988444756","2988444759","DE","DEU","GERMANY" -"2988444760","2988444767","IE","IRL","IRELAND" -"2988444768","2988444771","DE","DEU","GERMANY" -"2988444772","2988444783","GB","GBR","UNITED KINGDOM" -"2988444784","2988444799","FR","FRA","FRANCE" -"2988444800","2988445055","ES","ESP","SPAIN" -"2988445056","2988445119","FR","FRA","FRANCE" -"2988445120","2988445151","IT","ITA","ITALY" -"2988445152","2988445183","GB","GBR","UNITED KINGDOM" -"2988445184","2988445951","DE","DEU","GERMANY" -"2988445952","2988445967","FR","FRA","FRANCE" -"2988445968","2988445983","GB","GBR","UNITED KINGDOM" -"2988445984","2988446207","DE","DEU","GERMANY" -"2988446208","2988446271","PL","POL","POLAND" -"2988446272","2988446275","IT","ITA","ITALY" -"2988446276","2988446279","GB","GBR","UNITED KINGDOM" -"2988446280","2988446287","FR","FRA","FRANCE" -"2988446288","2988446303","GB","GBR","UNITED KINGDOM" -"2988446304","2988446323","FR","FRA","FRANCE" -"2988446324","2988446327","LT","LTU","LITHUANIA" -"2988446328","2988446335","NL","NLD","NETHERLANDS" -"2988446336","2988446399","PL","POL","POLAND" -"2988446400","2988446463","FR","FRA","FRANCE" -"2988446464","2988446719","PL","POL","POLAND" -"2988446720","2988446975","DE","DEU","GERMANY" -"2988446976","2988447103","IT","ITA","ITALY" -"2988447104","2988447231","FR","FRA","FRANCE" -"2988447232","2988447871","DE","DEU","GERMANY" -"2988447872","2988447923","PL","POL","POLAND" -"2988447924","2988447927","IT","ITA","ITALY" -"2988447928","2988447935","PL","POL","POLAND" -"2988447936","2988447943","DE","DEU","GERMANY" -"2988447944","2988447947","NL","NLD","NETHERLANDS" -"2988447948","2988447951","DE","DEU","GERMANY" -"2988447952","2988447955","GB","GBR","UNITED KINGDOM" -"2988447956","2988447959","BE","BEL","BELGIUM" -"2988447960","2988447967","IT","ITA","ITALY" -"2988447968","2988447999","GB","GBR","UNITED KINGDOM" -"2988448000","2988448127","DE","DEU","GERMANY" -"2988448128","2988448255","ES","ESP","SPAIN" -"2988448256","2988448511","DE","DEU","GERMANY" -"2988448512","2988448515","ES","ESP","SPAIN" -"2988448516","2988448519","FR","FRA","FRANCE" -"2988448520","2988448543","PL","POL","POLAND" -"2988448544","2988448559","FR","FRA","FRANCE" -"2988448560","2988448563","DE","DEU","GERMANY" -"2988448564","2988448567","ES","ESP","SPAIN" -"2988448568","2988448607","FR","FRA","FRANCE" -"2988448608","2988448639","ES","ESP","SPAIN" -"2988448640","2988448671","GB","GBR","UNITED KINGDOM" -"2988448672","2988448691","IT","ITA","ITALY" -"2988448692","2988448695","DE","DEU","GERMANY" -"2988448696","2988448699","IT","ITA","ITALY" -"2988448700","2988448703","LT","LTU","LITHUANIA" -"2988448704","2988448767","GB","GBR","UNITED KINGDOM" -"2988448768","2988448783","FR","FRA","FRANCE" -"2988448784","2988448815","PL","POL","POLAND" -"2988448816","2988448831","ES","ESP","SPAIN" -"2988448832","2988448895","FR","FRA","FRANCE" -"2988448896","2988448899","PT","PRT","PORTUGAL" -"2988448900","2988448903","PL","POL","POLAND" -"2988448904","2988448907","ES","ESP","SPAIN" -"2988448908","2988448959","FR","FRA","FRANCE" -"2988448960","2988448991","DE","DEU","GERMANY" -"2988448992","2988449007","FR","FRA","FRANCE" -"2988449008","2988449023","GB","GBR","UNITED KINGDOM" -"2988449024","2988449055","PL","POL","POLAND" -"2988449056","2988449087","ES","ESP","SPAIN" -"2988449088","2988449103","PL","POL","POLAND" -"2988449104","2988449119","DE","DEU","GERMANY" -"2988449120","2988449123","FR","FRA","FRANCE" -"2988449124","2988449127","DE","DEU","GERMANY" -"2988449128","2988449135","ES","ESP","SPAIN" -"2988449136","2988449151","FR","FRA","FRANCE" -"2988449152","2988449279","PL","POL","POLAND" -"2988449280","2988449535","GB","GBR","UNITED KINGDOM" -"2988449536","2988449663","PL","POL","POLAND" -"2988449664","2988449695","DE","DEU","GERMANY" -"2988449696","2988449727","IT","ITA","ITALY" -"2988449728","2988449743","BE","BEL","BELGIUM" -"2988449744","2988449759","GB","GBR","UNITED KINGDOM" -"2988449760","2988449791","CH","CHE","SWITZERLAND" -"2988449792","2988457983","FR","FRA","FRANCE" -"2988457984","2988457987","GB","GBR","UNITED KINGDOM" -"2988457988","2988457991","PL","POL","POLAND" -"2988457992","2988457999","FR","FRA","FRANCE" -"2988458000","2988458015","IE","IRL","IRELAND" -"2988458016","2988458031","FR","FRA","FRANCE" -"2988458032","2988458047","IT","ITA","ITALY" -"2988458048","2988458067","ES","ESP","SPAIN" -"2988458068","2988458075","FR","FRA","FRANCE" -"2988458076","2988458111","PL","POL","POLAND" -"2988458112","2988458255","FR","FRA","FRANCE" -"2988458256","2988458271","IT","ITA","ITALY" -"2988458272","2988458287","PL","POL","POLAND" -"2988458288","2988458295","FR","FRA","FRANCE" -"2988458296","2988458299","GB","GBR","UNITED KINGDOM" -"2988458300","2988458319","ES","ESP","SPAIN" -"2988458320","2988458323","CZ","CZE","CZECH REPUBLIC" -"2988458324","2988458327","FR","FRA","FRANCE" -"2988458328","2988458335","GB","GBR","UNITED KINGDOM" -"2988458336","2988458367","DE","DEU","GERMANY" -"2988458368","2988458399","FR","FRA","FRANCE" -"2988458400","2988458431","PL","POL","POLAND" -"2988458432","2988458495","FR","FRA","FRANCE" -"2988458496","2988458751","GB","GBR","UNITED KINGDOM" -"2988458752","2988459015","PL","POL","POLAND" -"2988459016","2988459019","DE","DEU","GERMANY" -"2988459020","2988459023","GB","GBR","UNITED KINGDOM" -"2988459024","2988459039","DE","DEU","GERMANY" -"2988459040","2988459051","FR","FRA","FRANCE" -"2988459052","2988459055","ES","ESP","SPAIN" -"2988459056","2988459071","CH","CHE","SWITZERLAND" -"2988459072","2988459135","IE","IRL","IRELAND" -"2988459136","2988459167","IT","ITA","ITALY" -"2988459168","2988459171","IE","IRL","IRELAND" -"2988459172","2988459175","FR","FRA","FRANCE" -"2988459176","2988459183","DE","DEU","GERMANY" -"2988459184","2988459199","ES","ESP","SPAIN" -"2988459200","2988459215","FR","FRA","FRANCE" -"2988459216","2988459223","GB","GBR","UNITED KINGDOM" -"2988459224","2988459231","DE","DEU","GERMANY" -"2988459232","2988459263","PL","POL","POLAND" -"2988459264","2988459519","ES","ESP","SPAIN" -"2988459520","2988459583","DE","DEU","GERMANY" -"2988459584","2988459599","FR","FRA","FRANCE" -"2988459600","2988459603","GB","GBR","UNITED KINGDOM" -"2988459604","2988459615","FR","FRA","FRANCE" -"2988459616","2988459631","CZ","CZE","CZECH REPUBLIC" -"2988459632","2988459639","FR","FRA","FRANCE" -"2988459640","2988459643","IT","ITA","ITALY" -"2988459644","2988459647","CH","CHE","SWITZERLAND" -"2988459648","2988459711","NL","NLD","NETHERLANDS" -"2988459712","2988459715","ES","ESP","SPAIN" -"2988459716","2988459719","FR","FRA","FRANCE" -"2988459720","2988459727","GB","GBR","UNITED KINGDOM" -"2988459728","2988459731","FR","FRA","FRANCE" -"2988459732","2988459735","BE","BEL","BELGIUM" -"2988459736","2988459743","PL","POL","POLAND" -"2988459744","2988459747","ES","ESP","SPAIN" -"2988459748","2988459751","PL","POL","POLAND" -"2988459752","2988460031","FR","FRA","FRANCE" -"2988460032","2988460063","DE","DEU","GERMANY" -"2988460064","2988460095","FR","FRA","FRANCE" -"2988460096","2988460103","ES","ESP","SPAIN" -"2988460104","2988460119","FR","FRA","FRANCE" -"2988460120","2988460123","ES","ESP","SPAIN" -"2988460124","2988460127","FR","FRA","FRANCE" -"2988460128","2988460131","PL","POL","POLAND" -"2988460132","2988460135","CZ","CZE","CZECH REPUBLIC" -"2988460136","2988460147","FR","FRA","FRANCE" -"2988460148","2988460151","GB","GBR","UNITED KINGDOM" -"2988460152","2988460159","ES","ESP","SPAIN" -"2988460160","2988460191","GB","GBR","UNITED KINGDOM" -"2988460192","2988460195","FR","FRA","FRANCE" -"2988460196","2988460199","CZ","CZE","CZECH REPUBLIC" -"2988460200","2988460207","FR","FRA","FRANCE" -"2988460208","2988460223","PL","POL","POLAND" -"2988460224","2988460239","FR","FRA","FRANCE" -"2988460240","2988460243","BE","BEL","BELGIUM" -"2988460244","2988460247","PL","POL","POLAND" -"2988460248","2988460255","FR","FRA","FRANCE" -"2988460256","2988460271","ES","ESP","SPAIN" -"2988460272","2988460319","FR","FRA","FRANCE" -"2988460320","2988460335","GB","GBR","UNITED KINGDOM" -"2988460336","2988460351","DE","DEU","GERMANY" -"2988460352","2988460375","GB","GBR","UNITED KINGDOM" -"2988460376","2988460543","FR","FRA","FRANCE" -"2988460544","2988460547","GB","GBR","UNITED KINGDOM" -"2988460548","2988460551","FR","FRA","FRANCE" -"2988460552","2988460575","PL","POL","POLAND" -"2988460576","2988460591","PT","PRT","PORTUGAL" -"2988460592","2988460607","GB","GBR","UNITED KINGDOM" -"2988460608","2988460671","FR","FRA","FRANCE" -"2988460672","2988460687","DE","DEU","GERMANY" -"2988460688","2988460703","FR","FRA","FRANCE" -"2988460704","2988460711","CH","CHE","SWITZERLAND" -"2988460712","2988460719","FR","FRA","FRANCE" -"2988460720","2988460735","ES","ESP","SPAIN" -"2988460736","2988572671","FR","FRA","FRANCE" -"2988572672","2988703743","RU","RUS","RUSSIAN FEDERATION" -"2988703744","2988834815","PL","POL","POLAND" -"2988834816","2988965887","CH","CHE","SWITZERLAND" -"2988965888","2989096959","SK","SVK","SLOVAKIA" -"2989096960","2989228031","PL","POL","POLAND" -"2989228032","2989490175","RU","RUS","RUSSIAN FEDERATION" -"2989490176","2989555711","UA","UKR","UKRAINE" -"2989555712","2989621247","RU","RUS","RUSSIAN FEDERATION" -"2989621248","2989686783","BE","BEL","BELGIUM" -"2989752320","2989817855","SY","SYR","SYRIAN ARAB REPUBLIC" -"2989817856","2989883391","KW","KWT","KUWAIT" -"2989948928","2990014463","FI","FIN","FINLAND" -"2990014464","2990079999","PL","POL","POLAND" -"2990080000","2990145535","RU","RUS","RUSSIAN FEDERATION" -"2990145536","2990211071","SI","SVN","SLOVENIA" -"2990211072","2990243839","GR","GRC","GREECE" -"2990243840","2990276607","CY","CYP","CYPRUS" -"2990276608","2990342143","ES","ESP","SPAIN" -"2990342144","2990407679","KW","KWT","KUWAIT" -"2990407680","2990473215","RU","RUS","RUSSIAN FEDERATION" -"2990473216","2990538751","DE","DEU","GERMANY" -"2990538752","2991063039","RU","RUS","RUSSIAN FEDERATION" -"2991063040","2991079423","SE","SWE","SWEDEN" -"2991079424","2991095807","RU","RUS","RUSSIAN FEDERATION" -"2991587328","2991718399","RU","RUS","RUSSIAN FEDERATION" -"2991718400","2991849471","CH","CHE","SWITZERLAND" -"2991849472","2991980543","NL","NLD","NETHERLANDS" -"2991980544","2991981375","UA","UKR","UKRAINE" -"2991981376","2991981383","NA","NAM","NAMIBIA" -"2991981384","2991981415","UA","UKR","UKRAINE" -"2991981416","2991981423","NA","NAM","NAMIBIA" -"2991981424","2991981439","UA","UKR","UKRAINE" -"2991981440","2991981447","NA","NAM","NAMIBIA" -"2991981448","2991981463","UA","UKR","UKRAINE" -"2991981464","2991981471","NA","NAM","NAMIBIA" -"2991981472","2991981495","UA","UKR","UKRAINE" -"2991981496","2991981503","NA","NAM","NAMIBIA" -"2991981504","2992111615","UA","UKR","UKRAINE" -"2992111616","2992373759","KZ","KAZ","KAZAKHSTAN" -"2992373760","2992635903","UA","UKR","UKRAINE" -"2992635904","2993684479","GB","GBR","UNITED KINGDOM" -"2993684480","2993946623","AT","AUT","AUSTRIA" -"2993946624","2994208767","BE","BEL","BELGIUM" -"2994208768","2994733055","BY","BLR","BELARUS" -"2994733056","2994798591","GR","GRC","GREECE" -"2995781632","2995912703","BE","BEL","BELGIUM" -"2995912704","2996043775","GR","GRC","GREECE" -"2996830208","2996862975","HR","HRV","CROATIA" -"2996862976","2996895743","AM","ARM","ARMENIA" -"2996895744","2996928511","KW","KWT","KUWAIT" -"2996928512","2996994047","RU","RUS","RUSSIAN FEDERATION" -"2996994048","2996994303","DE","DEU","GERMANY" -"2996994304","2996994815","BY","BLR","BELARUS" -"2996994816","2996994879","DE","DEU","GERMANY" -"2996994880","2996994943","UA","UKR","UKRAINE" -"2996994944","2996995071","US","USA","UNITED STATES" -"2996995072","2996995327","BZ","BLZ","BELIZE" -"2996995328","2996995647","DE","DEU","GERMANY" -"2996995648","2996995711","BZ","BLZ","BELIZE" -"2996995712","2996995775","BY","BLR","BELARUS" -"2996995776","2996995839","DE","DEU","GERMANY" -"2996995840","2996996095","UA","UKR","UKRAINE" -"2996996096","2996996159","DE","DEU","GERMANY" -"2996996160","2996996287","IN","IND","INDIA" -"2996996288","2997026815","DE","DEU","GERMANY" -"2997026816","2997059583","RU","RUS","RUSSIAN FEDERATION" -"2997059584","2997092351","BY","BLR","BELARUS" -"2997092352","2997125119","NO","NOR","NORWAY" -"2997125120","2997157887","HU","HUN","HUNGARY" -"2997157888","2997190655","UA","UKR","UKRAINE" -"2997190656","2997223423","AT","AUT","AUSTRIA" -"2997223424","2997256191","PT","PRT","PORTUGAL" -"2997878784","2998140927","RU","RUS","RUSSIAN FEDERATION" -"2998140928","2998403071","PL","POL","POLAND" -"2998403072","2998665215","RU","RUS","RUSSIAN FEDERATION" -"2998665216","2998927359","AT","AUT","AUSTRIA" -"2998927360","2999451647","CH","CHE","SWITZERLAND" -"2999975936","2999984127","FR","FRA","FRANCE" -"2999984128","2999992319","BE","BEL","BELGIUM" -"3019898880","3024093183","JP","JPN","JAPAN" -"3024093184","3024617471","KR","KOR","REPUBLIC OF KOREA" -"3024617472","3024879615","MY","MYS","MALAYSIA" -"3024879616","3025141759","CN","CHN","CHINA" -"3025141760","3025403903","KR","KOR","REPUBLIC OF KOREA" -"3025403904","3025600511","CN","CHN","CHINA" -"3025600512","3025600767","IN","IND","INDIA" -"3025600768","3025600783","HK","HKG","HONG KONG" -"3025600784","3025600799","PH","PHL","PHILIPPINES" -"3025600800","3025600831","SG","SGP","SINGAPORE" -"3025600832","3025601023","AU","AUS","AUSTRALIA" -"3025601024","3025601031","JP","JPN","JAPAN" -"3025601032","3025601039","SG","SGP","SINGAPORE" -"3025601040","3025601055","HK","HKG","HONG KONG" -"3025601056","3025601279","AU","AUS","AUSTRALIA" -"3025601280","3025601295","HK","HKG","HONG KONG" -"3025601296","3025601303","SG","SGP","SINGAPORE" -"3025601304","3025601311","TH","THA","THAILAND" -"3025601312","3025601327","HK","HKG","HONG KONG" -"3025601328","3025601551","AU","AUS","AUSTRALIA" -"3025601552","3025601567","HK","HKG","HONG KONG" -"3025601568","3025601791","AU","AUS","AUSTRALIA" -"3025601792","3025601807","HK","HKG","HONG KONG" -"3025601808","3025602063","AU","AUS","AUSTRALIA" -"3025602064","3025602079","HK","HKG","HONG KONG" -"3025602080","3025602431","AU","AUS","AUSTRALIA" -"3025602432","3025602447","HK","HKG","HONG KONG" -"3025602448","3025602559","AU","AUS","AUSTRALIA" -"3025602560","3025602815","SG","SGP","SINGAPORE" -"3025602816","3025603071","GU","GUM","GUAM" -"3025603072","3025603583","HK","HKG","HONG KONG" -"3025603584","3025603839","ID","IDN","INDONESIA" -"3025603840","3025604607","AU","AUS","AUSTRALIA" -"3025604608","3025606655","SG","SGP","SINGAPORE" -"3025606656","3025649663","AU","AUS","AUSTRALIA" -"3025649664","3025666047","IN","IND","INDIA" -"3025666048","3025928191","CN","CHN","CHINA" -"3025928192","3025932287","TW","TWN","TAIWAN" -"3025932288","3025944575","JP","JPN","JAPAN" -"3025944576","3025960959","KR","KOR","REPUBLIC OF KOREA" -"3025960960","3025969151","PK","PAK","PAKISTAN" -"3025969152","3025973247","IN","IND","INDIA" -"3025973248","3025975295","AU","AUS","AUSTRALIA" -"3025975296","3025975551","SG","SGP","SINGAPORE" -"3025975552","3025975807","IN","IND","INDIA" -"3025975808","3025977343","SG","SGP","SINGAPORE" -"3025977344","3025979391","AU","AUS","AUSTRALIA" -"3025979392","3025981439","IN","IND","INDIA" -"3025981440","3025985535","AU","AUS","AUSTRALIA" -"3025985536","3025989631","BD","BGD","BANGLADESH" -"3025989632","3025993727","KR","KOR","REPUBLIC OF KOREA" -"3025993728","3026059263","VN","VNM","VIET NAM" -"3026059264","3026067455","PH","PHL","PHILIPPINES" -"3026067456","3026068479","BD","BGD","BANGLADESH" -"3026068480","3026069503","PH","PHL","PHILIPPINES" -"3026069504","3026071551","JP","JPN","JAPAN" -"3026071552","3026073599","AU","AUS","AUSTRALIA" -"3026073600","3026075647","CN","CHN","CHINA" -"3026075648","3026083839","AF","AFG","AFGHANISTAN" -"3026083840","3026087935","CN","CHN","CHINA" -"3026087936","3026089983","AU","AUS","AUSTRALIA" -"3026089984","3026092031","MN","MNG","MONGOLIA" -"3026092032","3026108415","MO","MAC","MACAO" -"3026108416","3026114559","JP","JPN","JAPAN" -"3026114560","3026115583","SG","SGP","SINGAPORE" -"3026115584","3026116607","AU","AUS","AUSTRALIA" -"3026116608","3026118655","HK","HKG","HONG KONG" -"3026118656","3026120703","AU","AUS","AUSTRALIA" -"3026120704","3026124799","JP","JPN","JAPAN" -"3026124800","3026157567","AU","AUS","AUSTRALIA" -"3026157568","3028287487","CN","CHN","CHINA" -"3028287488","3028353023","TH","THA","THAILAND" -"3028353024","3028385791","SG","SGP","SINGAPORE" -"3028385792","3028484095","CN","CHN","CHINA" -"3028484096","3028500479","KR","KOR","REPUBLIC OF KOREA" -"3028500480","3028516863","JP","JPN","JAPAN" -"3028516864","3028520959","AU","AUS","AUSTRALIA" -"3028520960","3028521983","ID","IDN","INDONESIA" -"3028521984","3028523007","LA","LAO","LAO PEOPLE'S DEMOCRATIC REPUBLIC" -"3028523008","3028525055","JP","JPN","JAPAN" -"3028525056","3028533247","HK","HKG","HONG KONG" -"3028533248","3028549631","JP","JPN","JAPAN" -"3028549632","3028811775","KR","KOR","REPUBLIC OF KOREA" -"3028811776","3029336063","CN","CHN","CHINA" -"3029336064","3029598207","JP","JPN","JAPAN" -"3029598208","3029600255","VN","VNM","VIET NAM" -"3029600256","3029606399","AU","AUS","AUSTRALIA" -"3029606400","3029614591","IN","IND","INDIA" -"3029614592","3029630975","AU","AUS","AUSTRALIA" -"3029630976","3029635071","VN","VNM","VIET NAM" -"3029635072","3029637119","JP","JPN","JAPAN" -"3029637120","3029639167","BD","BGD","BANGLADESH" -"3029639168","3029643263","JP","JPN","JAPAN" -"3029643264","3029645311","AU","AUS","AUSTRALIA" -"3029645312","3029651455","JP","JPN","JAPAN" -"3029651456","3029654527","BD","BGD","BANGLADESH" -"3029654528","3029655551","IN","IND","INDIA" -"3029655552","3029663743","CN","CHN","CHINA" -"3029663744","3029671935","BD","BGD","BANGLADESH" -"3029671936","3029680127","IN","IND","INDIA" -"3029680128","3029696511","MN","MNG","MONGOLIA" -"3029696512","3029704703","CN","CHN","CHINA" -"3029704704","3029712895","JP","JPN","JAPAN" -"3029712896","3029714943","AU","AUS","AUSTRALIA" -"3029714944","3029716991","JP","JPN","JAPAN" -"3029716992","3029721087","PK","PAK","PAKISTAN" -"3029721088","3029725183","AU","AUS","AUSTRALIA" -"3029725184","3029727231","IN","IND","INDIA" -"3029727232","3029728255","AU","AUS","AUSTRALIA" -"3029728256","3029729279","HK","HKG","HONG KONG" -"3029729280","3029762047","AU","AUS","AUSTRALIA" -"3029762048","3029770239","HK","HKG","HONG KONG" -"3029770240","3029778431","CN","CHN","CHINA" -"3029778432","3029788671","KR","KOR","REPUBLIC OF KOREA" -"3029788672","3029790719","ID","IDN","INDONESIA" -"3029790720","3029791743","IN","IND","INDIA" -"3029791744","3029792767","ID","IDN","INDONESIA" -"3029792768","3029793791","IN","IND","INDIA" -"3029793792","3029794815","PG","PNG","PAPUA NEW GUINEA" -"3029794816","3029860351","IN","IND","INDIA" -"3029860352","3031433215","CN","CHN","CHINA" -"3031433216","3031564287","TW","TWN","TAIWAN" -"3031564288","3031572479","IN","IND","INDIA" -"3031572480","3031580671","HK","HKG","HONG KONG" -"3031580672","3031582719","AU","AUS","AUSTRALIA" -"3031582720","3031584767","SG","SGP","SINGAPORE" -"3031584768","3031587839","JP","JPN","JAPAN" -"3031587840","3031592959","ID","IDN","INDONESIA" -"3031592960","3031595007","HK","HKG","HONG KONG" -"3031595008","3031597055","AU","AUS","AUSTRALIA" -"3031597056","3031613439","PK","PAK","PAKISTAN" -"3031613440","3031629823","CN","CHN","CHINA" -"3031629824","3031695359","IN","IND","INDIA" -"3031695360","3031760895","TH","THA","THAILAND" -"3031760896","3031826431","AU","AUS","AUSTRALIA" -"3031826432","3031891967","KR","KOR","REPUBLIC OF KOREA" -"3031891968","3031957503","TH","THA","THAILAND" -"3031957504","3032252415","CN","CHN","CHINA" -"3032252416","3032271871","HK","HKG","HONG KONG" -"3032271872","3032272895","AU","AUS","AUSTRALIA" -"3032272896","3032276991","JP","JPN","JAPAN" -"3032276992","3032285183","IN","IND","INDIA" -"3032285184","3032301567","JP","JPN","JAPAN" -"3032301568","3032317951","KR","KOR","REPUBLIC OF KOREA" -"3032317952","3032319999","JP","JPN","JAPAN" -"3032320000","3032323071","AU","AUS","AUSTRALIA" -"3032323072","3032324095","CN","CHN","CHINA" -"3032324096","3032326143","AU","AUS","AUSTRALIA" -"3032326144","3032330239","TL","TLS","TIMOR-LESTE" -"3032330240","3032334335","KR","KOR","REPUBLIC OF KOREA" -"3032334336","3032342527","NZ","NZL","NEW ZEALAND" -"3032342528","3032350719","AU","AUS","AUSTRALIA" -"3032350720","3032743935","PH","PHL","PHILIPPINES" -"3032743936","3033038847","JP","JPN","JAPAN" -"3033038848","3033071615","AU","AUS","AUSTRALIA" -"3033071616","3033268223","CN","CHN","CHINA" -"3033268224","3033530367","TW","TWN","TAIWAN" -"3033530368","3033661439","CN","CHN","CHINA" -"3033661440","3033694207","KR","KOR","REPUBLIC OF KOREA" -"3033694208","3033710591","BD","BGD","BANGLADESH" -"3033710592","3033712639","KR","KOR","REPUBLIC OF KOREA" -"3033712640","3033714687","SG","SGP","SINGAPORE" -"3033714688","3033715711","NZ","NZL","NEW ZEALAND" -"3033715712","3033716735","AU","AUS","AUSTRALIA" -"3033716736","3033717759","TH","THA","THAILAND" -"3033717760","3033718783","BD","BGD","BANGLADESH" -"3033718784","3033726975","CN","CHN","CHINA" -"3033726976","3033743359","KR","KOR","REPUBLIC OF KOREA" -"3033743360","3033745407","IN","IND","INDIA" -"3033745408","3033747455","JP","JPN","JAPAN" -"3033747456","3033748479","IN","IND","INDIA" -"3033748480","3033749503","JP","JPN","JAPAN" -"3033749504","3033751551","ID","IDN","INDONESIA" -"3033751552","3033759743","IN","IND","INDIA" -"3033759744","3033792511","BD","BGD","BANGLADESH" -"3033792512","3033923583","CN","CHN","CHINA" -"3033923584","3033939967","JP","JPN","JAPAN" -"3033939968","3033956351","AU","AUS","AUSTRALIA" -"3033956352","3033964543","IN","IND","INDIA" -"3033964544","3033966591","HK","HKG","HONG KONG" -"3033966592","3033968639","AU","AUS","AUSTRALIA" -"3033968640","3033972735","TW","TWN","TAIWAN" -"3033972736","3033980927","TH","THA","THAILAND" -"3033980928","3033982975","JP","JPN","JAPAN" -"3033982976","3033983999","ID","IDN","INDONESIA" -"3033984000","3033985023","VN","VNM","VIET NAM" -"3033985024","3033989119","ID","IDN","INDONESIA" -"3033989120","3034054655","IN","IND","INDIA" -"3034054656","3034120191","AU","AUS","AUSTRALIA" -"3034120192","3034251263","TW","TWN","TAIWAN" -"3034251264","3034316799","HK","HKG","HONG KONG" -"3034316800","3034447871","JP","JPN","JAPAN" -"3034447872","3034464255","AU","AUS","AUSTRALIA" -"3034464256","3034465279","NZ","NZL","NEW ZEALAND" -"3034465280","3034466303","AU","AUS","AUSTRALIA" -"3034466304","3034472447","JP","JPN","JAPAN" -"3034472448","3034478591","IN","IND","INDIA" -"3034478592","3034480639","AU","AUS","AUSTRALIA" -"3034480640","3034482687","SG","SGP","SINGAPORE" -"3034482688","3034484735","AF","AFG","AFGHANISTAN" -"3034484736","3034488831","TH","THA","THAILAND" -"3034488832","3034499071","AU","AUS","AUSTRALIA" -"3034499072","3034500095","HK","HKG","HONG KONG" -"3034500096","3034501119","TW","TWN","TAIWAN" -"3034501120","3034502143","VU","VUT","VANUATU" -"3034502144","3034503167","AU","AUS","AUSTRALIA" -"3034503168","3034504191","ID","IDN","INDONESIA" -"3034504192","3034505215","KR","KOR","REPUBLIC OF KOREA" -"3034505216","3034578943","CN","CHN","CHINA" -"3034578944","3035103231","KR","KOR","REPUBLIC OF KOREA" -"3035103232","3035168767","PH","PHL","PHILIPPINES" -"3035168768","3035193343","CN","CHN","CHINA" -"3035193344","3035197439","JP","JPN","JAPAN" -"3035197440","3035198463","SG","SGP","SINGAPORE" -"3035198464","3035199487","AU","AUS","AUSTRALIA" -"3035199488","3035200511","IN","IND","INDIA" -"3035200512","3035202559","AU","AUS","AUSTRALIA" -"3035202560","3035205631","JP","JPN","JAPAN" -"3035205632","3035207679","MY","MYS","MALAYSIA" -"3035207680","3035209727","ID","IDN","INDONESIA" -"3035209728","3035217919","HK","HKG","HONG KONG" -"3035217920","3035234303","KR","KOR","REPUBLIC OF KOREA" -"3035234304","3035299839","BD","BGD","BANGLADESH" -"3035299840","3035316223","JP","JPN","JAPAN" -"3035316224","3035324415","CN","CHN","CHINA" -"3035324416","3035326463","JP","JPN","JAPAN" -"3035326464","3035328511","AU","AUS","AUSTRALIA" -"3035328512","3035332607","BD","BGD","BANGLADESH" -"3035332608","3035335679","AU","AUS","AUSTRALIA" -"3035335680","3035337727","JP","JPN","JAPAN" -"3035337728","3035338751","ID","IDN","INDONESIA" -"3035338752","3035339007","SG","SGP","SINGAPORE" -"3035339008","3035339263","IN","IND","INDIA" -"3035339264","3035339775","HK","HKG","HONG KONG" -"3035339776","3035340799","AU","AUS","AUSTRALIA" -"3035340800","3035348991","MN","MNG","MONGOLIA" -"3035348992","3035365375","AU","AUS","AUSTRALIA" -"3035365376","3035627519","KR","KOR","REPUBLIC OF KOREA" -"3035627520","3036610559","ID","IDN","INDONESIA" -"3036610560","3036676095","AU","AUS","AUSTRALIA" -"3053453312","3054501887","ID","IDN","INDONESIA" -"3054501888","3054534655","HK","HKG","HONG KONG" -"3054534656","3054537727","PH","PHL","PHILIPPINES" -"3054537728","3054538751","SG","SGP","SINGAPORE" -"3054538752","3054540799","BD","BGD","BANGLADESH" -"3054540800","3054541823","NZ","NZL","NEW ZEALAND" -"3054541824","3054542847","BD","BGD","BANGLADESH" -"3054542848","3054551039","ID","IDN","INDONESIA" -"3054551040","3054559231","CN","CHN","CHINA" -"3054559232","3054561279","JP","JPN","JAPAN" -"3054561280","3054562303","SG","SGP","SINGAPORE" -"3054562304","3054563327","JP","JPN","JAPAN" -"3054563328","3054567423","ID","IDN","INDONESIA" -"3054567424","3054632959","TH","THA","THAILAND" -"3054632960","3054665727","CN","CHN","CHINA" -"3054665728","3054682111","IN","IND","INDIA" -"3054682112","3054698495","PH","PHL","PHILIPPINES" -"3054698496","3054731263","IN","IND","INDIA" -"3054731264","3054764031","AU","AUS","AUSTRALIA" -"3054764032","3054960639","JP","JPN","JAPAN" -"3054960640","3054993407","ID","IDN","INDONESIA" -"3054993408","3054997503","IN","IND","INDIA" -"3054997504","3055001599","SG","SGP","SINGAPORE" -"3055001600","3055005695","ID","IDN","INDONESIA" -"3055005696","3055007743","NZ","NZL","NEW ZEALAND" -"3055007744","3055013887","AU","AUS","AUSTRALIA" -"3055013888","3055014911","JP","JPN","JAPAN" -"3055014912","3055015935","AU","AUS","AUSTRALIA" -"3055015936","3055026175","JP","JPN","JAPAN" -"3055026176","3055484927","ID","IDN","INDONESIA" -"3055484928","3055550463","AU","AUS","AUSTRALIA" -"3055550464","3056599039","CN","CHN","CHINA" -"3056599040","3056615423","JP","JPN","JAPAN" -"3056615424","3056623615","BD","BGD","BANGLADESH" -"3056623616","3056631807","CN","CHN","CHINA" -"3056631808","3056639999","NZ","NZL","NEW ZEALAND" -"3056640000","3056648191","AU","AUS","AUSTRALIA" -"3056648192","3056664575","IN","IND","INDIA" -"3056664576","3056734207","CN","CHN","CHINA" -"3056734208","3056746495","KR","KOR","REPUBLIC OF KOREA" -"3056746496","3056747519","NP","NPL","NEPAL" -"3056747520","3056748543","BD","BGD","BANGLADESH" -"3056748544","3056749567","WS","WSM","SAMOA" -"3056749568","3056750591","AU","AUS","AUSTRALIA" -"3056750592","3056754687","TH","THA","THAILAND" -"3056754688","3056758783","JP","JPN","JAPAN" -"3056758784","3056762879","CN","CHN","CHINA" -"3056762880","3056771071","SG","SGP","SINGAPORE" -"3056771072","3056772095","NZ","NZL","NEW ZEALAND" -"3056772096","3056773119","AU","AUS","AUSTRALIA" -"3056773120","3056774143","WS","WSM","SAMOA" -"3056774144","3056775167","AU","AUS","AUSTRALIA" -"3056775168","3056779263","AF","AFG","AFGHANISTAN" -"3056779264","3056791551","JP","JPN","JAPAN" -"3056791552","3056795647","ID","IDN","INDONESIA" -"3056795648","3056861183","CN","CHN","CHINA" -"3056861184","3056992255","TH","THA","THAILAND" -"3056992256","3057025023","CN","CHN","CHINA" -"3057025024","3057033215","PH","PHL","PHILIPPINES" -"3057033216","3057037311","NZ","NZL","NEW ZEALAND" -"3057037312","3057041407","AU","AUS","AUSTRALIA" -"3057041408","3057049599","MY","MYS","MALAYSIA" -"3057049600","3057057791","AU","AUS","AUSTRALIA" -"3057057792","3057123327","SG","SGP","SINGAPORE" -"3057123328","3057451007","IN","IND","INDIA" -"3057451008","3057516543","CN","CHN","CHINA" -"3057516544","3057647615","MY","MYS","MALAYSIA" -"3057647616","3058696191","IN","IND","INDIA" -"3058696192","3059548159","CN","CHN","CHINA" -"3059548160","3059564543","MO","MAC","MACAO" -"3059564544","3059572735","NP","NPL","NEPAL" -"3059572736","3059580927","AU","AUS","AUSTRALIA" -"3059580928","3059613695","TH","THA","THAILAND" -"3059613696","3059744767","IN","IND","INDIA" -"3059744768","3063414783","CN","CHN","CHINA" -"3063414784","3063545855","HK","HKG","HONG KONG" -"3063545856","3063611391","NZ","NZL","NEW ZEALAND" -"3063611392","3063676927","AU","AUS","AUSTRALIA" -"3063676928","3063742463","IN","IND","INDIA" -"3063742464","3070230527","AU","AUS","AUSTRALIA" -"3070230528","3074949119","CN","CHN","CHINA" -"3074949120","3075342335","JP","JPN","JAPAN" -"3075342336","3075375103","MY","MYS","MALAYSIA" -"3075375104","3075383295","KR","KOR","REPUBLIC OF KOREA" -"3075383296","3075385343","IN","IND","INDIA" -"3075385344","3075385599","CN","CHN","CHINA" -"3075385600","3075386111","MY","MYS","MALAYSIA" -"3075386112","3075386367","HK","HKG","HONG KONG" -"3075386368","3075387391","AU","AUS","AUSTRALIA" -"3075387392","3075388415","JP","JPN","JAPAN" -"3075388416","3075389439","MY","MYS","MALAYSIA" -"3075389440","3075390463","IN","IND","INDIA" -"3075390464","3075391487","JP","JPN","JAPAN" -"3075391488","3075407871","KR","KOR","REPUBLIC OF KOREA" -"3075407872","3075473407","JP","JPN","JAPAN" -"3075473408","3075571711","VN","VNM","VIET NAM" -"3075571712","3075575807","FJ","FJI","FIJI" -"3075575808","3075579903","AU","AUS","AUSTRALIA" -"3075579904","3075581951","MY","MYS","MALAYSIA" -"3075581952","3075582975","MN","MNG","MONGOLIA" -"3075582976","3075583999","TH","THA","THAILAND" -"3075584000","3075585023","JP","JPN","JAPAN" -"3075585024","3075586047","CN","CHN","CHINA" -"3075586048","3075588095","KH","KHM","CAMBODIA" -"3075588096","3075604479","SG","SGP","SINGAPORE" -"3075604480","3075735551","IN","IND","INDIA" -"3075735552","3075866623","CN","CHN","CHINA" -"3075866624","3075915775","JP","JPN","JAPAN" -"3075915776","3075932159","KR","KOR","REPUBLIC OF KOREA" -"3075932160","3075997695","IN","IND","INDIA" -"3075997696","3076128767","TH","THA","THAILAND" -"3076128768","3076161535","SG","SGP","SINGAPORE" -"3076161536","3076169727","KR","KOR","REPUBLIC OF KOREA" -"3076169728","3076171775","VN","VNM","VIET NAM" -"3076171776","3076173823","TH","THA","THAILAND" -"3076173824","3076175871","JP","JPN","JAPAN" -"3076175872","3076177919","HK","HKG","HONG KONG" -"3076177920","3076194303","JP","JPN","JAPAN" -"3076194304","3076202495","VN","VNM","VIET NAM" -"3076202496","3076210687","HK","HKG","HONG KONG" -"3076210688","3076218879","ID","IDN","INDONESIA" -"3076218880","3076227071","AU","AUS","AUSTRALIA" -"3076227072","3076228095","CN","CHN","CHINA" -"3076228096","3076229119","NP","NPL","NEPAL" -"3076229120","3076231167","TH","THA","THAILAND" -"3076231168","3076235263","CN","CHN","CHINA" -"3076235264","3076243455","VN","VNM","VIET NAM" -"3076243456","3076259839","KR","KOR","REPUBLIC OF KOREA" -"3076259840","3076521983","CN","CHN","CHINA" -"3076521984","3078619135","KR","KOR","REPUBLIC OF KOREA" -"3078619136","3081437183","CN","CHN","CHINA" -"3081437184","3081502719","MY","MYS","MALAYSIA" -"3081502720","3081764863","CN","CHN","CHINA" -"3081764864","3081846783","JP","JPN","JAPAN" -"3081846784","3081847807","TW","TWN","TAIWAN" -"3081847808","3081848831","KR","KOR","REPUBLIC OF KOREA" -"3081848832","3081849855","SG","SGP","SINGAPORE" -"3081849856","3081854975","AU","AUS","AUSTRALIA" -"3081854976","3081859071","MN","MNG","MONGOLIA" -"3081859072","3081861119","PH","PHL","PHILIPPINES" -"3081861120","3081862143","AU","AUS","AUSTRALIA" -"3081862144","3081863167","IN","IND","INDIA" -"3081863168","3081895935","JP","JPN","JAPAN" -"3081895936","3082027007","HK","HKG","HONG KONG" -"3082027008","3082158079","JP","JPN","JAPAN" -"3082158080","3082166271","CN","CHN","CHINA" -"3082166272","3082174463","JP","JPN","JAPAN" -"3082174464","3082178559","BZ","BLZ","BELIZE" -"3082178560","3082179583","HK","HKG","HONG KONG" -"3082179584","3082181631","IN","IND","INDIA" -"3082181632","3082182655","ID","IDN","INDONESIA" -"3082182656","3082190847","LA","LAO","LAO PEOPLE'S DEMOCRATIC REPUBLIC" -"3082190848","3082289151","JP","JPN","JAPAN" -"3082289152","3087007743","CN","CHN","CHINA" -"3087007744","3088318463","US","USA","UNITED STATES" -"3089104896","3091202047","US","USA","UNITED STATES" -"3091202048","3091726335","CA","CAN","CANADA" -"3091726336","3091955711","US","USA","UNITED STATES" -"3091988480","3092381695","US","USA","UNITED STATES" -"3092512768","3092774911","US","USA","UNITED STATES" -"3094085632","3095412735","US","USA","UNITED STATES" -"3120562176","3120578559","CO","COL","COLOMBIA" -"3120627712","3120644095","NI","NIC","NICARAGUA" -"3120693248","3120709631","BO","BOL","BOLIVIA" -"3120758784","3120791551","EC","ECU","ECUADOR" -"3120824320","3120840703","CR","CRI","COSTA RICA" -"3121086464","3121151999","UY","URY","URUGUAY" -"3121152000","3121250303","CL","CHL","CHILE" -"3121348608","3121479679","AR","ARG","ARGENTINA" -"3121479680","3121545215","VE","VEN","VENEZUELA" -"3121545216","3121610751","CR","CRI","COSTA RICA" -"3121610752","3121676287","PY","PRY","PARAGUAY" -"3121741824","3121872895","AR","ARG","ARGENTINA" -"3122135040","3122282495","VE","VEN","VENEZUELA" -"3122298880","3122331647","VE","VEN","VENEZUELA" -"3122397184","3122593791","CO","COL","COLOMBIA" -"3122659328","3122675711","CR","CRI","COSTA RICA" -"3122675712","3122683903","SV","SLV","EL SALVADOR" -"3122683904","3122692095","GT","GTM","GUATEMALA" -"3122692096","3122700287","HN","HND","HONDURAS" -"3122700288","3122724863","GT","GTM","GUATEMALA" -"3122921472","3122987007","CL","CHL","CHILE" -"3123183616","3123216383","CL","CHL","CHILE" -"3123314688","3123347455","EC","ECU","ECUADOR" -"3123380224","3123412991","CO","COL","COLOMBIA" -"3123445760","3123576831","TT","TTO","TRINIDAD AND TOBAGO" -"3123707904","3123970047","UY","URY","URUGUAY" -"3124232192","3124772863","AR","ARG","ARGENTINA" -"3124887552","3124953087","EC","ECU","ECUADOR" -"3125018624","3125149695","EC","ECU","ECUADOR" -"3125280768","3125346303","CO","COL","COLOMBIA" -"3125346304","3125542911","PA","PAN","PANAMA" -"3125805056","3126329343","CO","COL","COLOMBIA" -"3126329344","3126853631","VE","VEN","VENEZUELA" -"3126853632","3126854911","US","USA","UNITED STATES" -"3126854912","3126855167","UM","UMI","UNITED STATES MINOR OUTLYING ISLANDS" -"3126855168","3126855423","US","USA","UNITED STATES" -"3126855424","3126855679","UM","UMI","UNITED STATES MINOR OUTLYING ISLANDS" -"3126855680","3126870015","US","USA","UNITED STATES" -"3126886400","3126913023","AR","ARG","ARGENTINA" -"3126913024","3126915071","US","USA","UNITED STATES" -"3126915072","3126919167","AR","ARG","ARGENTINA" -"3126919168","3127115775","CO","COL","COLOMBIA" -"3127115776","3127181311","AR","ARG","ARGENTINA" -"3127377920","3127508991","CL","CHL","CHILE" -"3127640064","3127902207","AR","ARG","ARGENTINA" -"3127902208","3128164351","CO","COL","COLOMBIA" -"3128426496","3128459263","DO","DOM","DOMINICAN REPUBLIC" -"3128492032","3128524799","CO","COL","COLOMBIA" -"3128557568","3128623103","AR","ARG","ARGENTINA" -"3128688640","3128802975","AR","ARG","ARGENTINA" -"3128802976","3128802983","US","USA","UNITED STATES" -"3128802984","3128819711","AR","ARG","ARGENTINA" -"3128950784","3129212927","AR","ARG","ARGENTINA" -"3129475072","3129606143","AR","ARG","ARGENTINA" -"3129737216","3129999359","AR","ARG","ARGENTINA" -"3131047936","3131310079","PE","PER","PERU" -"3133145088","3135242239","BR","BRA","BRAZIL" -"3137339392","3145727999","BR","BRA","BRAZIL" -"3145728000","3148873727","MX","MEX","MEXICO" -"3154182144","3154247679","DE","DEU","GERMANY" -"3154247680","3154313215","RS","SRB","SERBIA" -"3154313216","3154378751","TR","TUR","TURKEY" -"3154378752","3154444287","GR","GRC","GREECE" -"3154444288","3154509823","BE","BEL","BELGIUM" -"3154509824","3154575359","RU","RUS","RUSSIAN FEDERATION" -"3154575360","3154640895","FR","FRA","FRANCE" -"3154640896","3155165183","IT","ITA","ITALY" -"3155165184","3155427327","RU","RUS","RUSSIAN FEDERATION" -"3155427328","3155689471","AT","AUT","AUSTRIA" -"3155689472","3155951615","RO","ROM","ROMANIA" -"3155951616","3156213759","GB","GBR","UNITED KINGDOM" -"3156213760","3156279295","RU","RUS","RUSSIAN FEDERATION" -"3156279296","3156344831","PL","POL","POLAND" -"3156344832","3156410367","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3156410368","3156475903","RU","RUS","RUSSIAN FEDERATION" -"3156475904","3156539391","HU","HUN","HUNGARY" -"3156539392","3156539647","RO","ROM","ROMANIA" -"3156539648","3156541439","HU","HUN","HUNGARY" -"3156606976","3156672511","TR","TUR","TURKEY" -"3156672512","3156738047","GB","GBR","UNITED KINGDOM" -"3156738048","3156759431","DE","DEU","GERMANY" -"3156759432","3156759432","GB","GBR","UNITED KINGDOM" -"3156759433","3156803583","DE","DEU","GERMANY" -"3156803584","3156869119","TR","TUR","TURKEY" -"3156869120","3156934655","LU","LUX","LUXEMBOURG" -"3156934656","3157065727","RU","RUS","RUSSIAN FEDERATION" -"3157065728","3157131263","AT","AUT","AUSTRIA" -"3157131264","3157196799","DE","DEU","GERMANY" -"3157196800","3157262335","PL","POL","POLAND" -"3157262336","3157786623","SA","SAU","SAUDI ARABIA" -"3157786624","3158048767","TR","TUR","TURKEY" -"3158048768","3158310911","CH","CHE","SWITZERLAND" -"3158310912","3158312959","FI","FIN","FINLAND" -"3158312960","3158315007","NL","NLD","NETHERLANDS" -"3158315008","3158317055","DE","DEU","GERMANY" -"3158317056","3158319103","SI","SVN","SLOVENIA" -"3158319104","3158321151","GB","GBR","UNITED KINGDOM" -"3158321152","3158321407","DE","DEU","GERMANY" -"3158321408","3158321423","US","USA","UNITED STATES" -"3158321424","3158322687","DE","DEU","GERMANY" -"3158322688","3158322831","NL","NLD","NETHERLANDS" -"3158322832","3158323199","DE","DEU","GERMANY" -"3158323200","3158325247","BE","BEL","BELGIUM" -"3158325248","3158327295","DE","DEU","GERMANY" -"3158327296","3158329343","NL","NLD","NETHERLANDS" -"3158329344","3158331391","BE","BEL","BELGIUM" -"3158331392","3158333439","GB","GBR","UNITED KINGDOM" -"3158333440","3158335487","IT","ITA","ITALY" -"3158335488","3158337535","IL","ISR","ISRAEL" -"3158337536","3158339583","SI","SVN","SLOVENIA" -"3158339584","3158341631","RU","RUS","RUSSIAN FEDERATION" -"3158341632","3158343679","IT","ITA","ITALY" -"3158343680","3158345727","RU","RUS","RUSSIAN FEDERATION" -"3158345728","3158347775","CY","CYP","CYPRUS" -"3158347776","3158349823","RU","RUS","RUSSIAN FEDERATION" -"3158349824","3158351871","DK","DNK","DENMARK" -"3158351872","3158355967","RU","RUS","RUSSIAN FEDERATION" -"3158355968","3158358015","LV","LVA","LATVIA" -"3158358016","3158360063","GB","GBR","UNITED KINGDOM" -"3158360064","3158362111","DE","DEU","GERMANY" -"3158362112","3158364159","IL","ISR","ISRAEL" -"3158364160","3158366207","TR","TUR","TURKEY" -"3158366208","3158368255","RU","RUS","RUSSIAN FEDERATION" -"3158368256","3158370303","FR","FRA","FRANCE" -"3158370304","3158372351","BE","BEL","BELGIUM" -"3158372352","3158374399","FR","FRA","FRANCE" -"3158374400","3158376447","DE","DEU","GERMANY" -"3158376448","3158378495","IT","ITA","ITALY" -"3158378496","3158382591","RU","RUS","RUSSIAN FEDERATION" -"3158382592","3158384639","OM","OMN","OMAN" -"3158384640","3158386687","GB","GBR","UNITED KINGDOM" -"3158386688","3158388735","PL","POL","POLAND" -"3158388736","3158390783","RU","RUS","RUSSIAN FEDERATION" -"3158390784","3158392831","GB","GBR","UNITED KINGDOM" -"3158392832","3158394879","RU","RUS","RUSSIAN FEDERATION" -"3158394880","3158395007","AT","AUT","AUSTRIA" -"3158395008","3158395135","GB","GBR","UNITED KINGDOM" -"3158395136","3158395151","AT","AUT","AUSTRIA" -"3158395152","3158395159","DE","DEU","GERMANY" -"3158395160","3158395167","AT","AUT","AUSTRIA" -"3158395168","3158395175","DE","DEU","GERMANY" -"3158395176","3158395263","AT","AUT","AUSTRIA" -"3158395264","3158395295","DE","DEU","GERMANY" -"3158395296","3158395647","AT","AUT","AUSTRIA" -"3158395648","3158395664","DE","DEU","GERMANY" -"3158395665","3158396927","AT","AUT","AUSTRIA" -"3158396928","3158398975","IT","ITA","ITALY" -"3158398976","3158401023","ES","ESP","SPAIN" -"3158401024","3158403071","GB","GBR","UNITED KINGDOM" -"3158403072","3158405119","RU","RUS","RUSSIAN FEDERATION" -"3158405120","3158407167","GB","GBR","UNITED KINGDOM" -"3158407168","3158409215","FR","FRA","FRANCE" -"3158409216","3158411263","RU","RUS","RUSSIAN FEDERATION" -"3158411264","3158413311","FI","FIN","FINLAND" -"3158413312","3158415359","DE","DEU","GERMANY" -"3158415360","3158417407","SE","SWE","SWEDEN" -"3158417408","3158419455","NL","NLD","NETHERLANDS" -"3158419456","3158421503","FR","FRA","FRANCE" -"3158421504","3158423551","GB","GBR","UNITED KINGDOM" -"3158423552","3158425599","MT","MLT","MALTA" -"3158425600","3158427647","NL","NLD","NETHERLANDS" -"3158427648","3158429695","DE","DEU","GERMANY" -"3158429696","3158431743","RU","RUS","RUSSIAN FEDERATION" -"3158431744","3158433791","BE","BEL","BELGIUM" -"3158433792","3158435839","NL","NLD","NETHERLANDS" -"3158435840","3158439935","RU","RUS","RUSSIAN FEDERATION" -"3158439936","3158441983","GB","GBR","UNITED KINGDOM" -"3158441984","3158444031","EE","EST","ESTONIA" -"3158444032","3158446079","BE","BEL","BELGIUM" -"3158446080","3158448127","NL","NLD","NETHERLANDS" -"3158448128","3158452223","RU","RUS","RUSSIAN FEDERATION" -"3158452224","3158454271","DE","DEU","GERMANY" -"3158573056","3158638591","RU","RUS","RUSSIAN FEDERATION" -"3158638592","3158704127","LT","LTU","LITHUANIA" -"3158835200","3158851583","IQ","IRQ","IRAQ" -"3158851584","3158867967","RU","RUS","RUSSIAN FEDERATION" -"3158867968","3158884351","AZ","AZE","AZERBAIJAN" -"3158884352","3158884607","DE","DEU","GERMANY" -"3158884608","3158884863","BE","BEL","BELGIUM" -"3158884864","3158885119","GB","GBR","UNITED KINGDOM" -"3158885120","3158885887","TR","TUR","TURKEY" -"3158885888","3158886143","HK","HKG","HONG KONG" -"3158886144","3158886175","DE","DEU","GERMANY" -"3158886176","3158886207","BZ","BLZ","BELIZE" -"3158886208","3158886271","DE","DEU","GERMANY" -"3158886272","3158886335","RO","ROM","ROMANIA" -"3158886336","3158886399","DE","DEU","GERMANY" -"3158886400","3158886655","TR","TUR","TURKEY" -"3158886656","3158886911","BY","BLR","BELARUS" -"3158886912","3158887167","DE","DEU","GERMANY" -"3158887168","3158887423","CA","CAN","CANADA" -"3158887424","3158887679","BY","BLR","BELARUS" -"3158887680","3158889215","DE","DEU","GERMANY" -"3158889216","3158889727","TR","TUR","TURKEY" -"3158889728","3158889983","BY","BLR","BELARUS" -"3158889984","3158890239","HK","HKG","HONG KONG" -"3158890240","3158891263","DE","DEU","GERMANY" -"3158891264","3158891519","CA","CAN","CANADA" -"3158891520","3158891583","DE","DEU","GERMANY" -"3158891584","3158891647","RU","RUS","RUSSIAN FEDERATION" -"3158891648","3158891711","DE","DEU","GERMANY" -"3158891712","3158891775","RU","RUS","RUSSIAN FEDERATION" -"3158891776","3158892031","PL","POL","POLAND" -"3158892032","3158892671","DE","DEU","GERMANY" -"3158892672","3158892799","RU","RUS","RUSSIAN FEDERATION" -"3158892800","3158893567","DE","DEU","GERMANY" -"3158893568","3158893823","GB","GBR","UNITED KINGDOM" -"3158893824","3158894079","TR","TUR","TURKEY" -"3158894080","3158895167","DE","DEU","GERMANY" -"3158895168","3158895231","RU","RUS","RUSSIAN FEDERATION" -"3158895232","3158895423","DE","DEU","GERMANY" -"3158895424","3158895487","RU","RUS","RUSSIAN FEDERATION" -"3158895488","3158895551","MK","MKD","THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA" -"3158895552","3158895615","AE","ARE","UNITED ARAB EMIRATES" -"3158895616","3158896127","DE","DEU","GERMANY" -"3158896128","3158896255","UA","UKR","UKRAINE" -"3158896256","3158896383","IN","IND","INDIA" -"3158896384","3158896511","DE","DEU","GERMANY" -"3158896512","3158896639","UA","UKR","UKRAINE" -"3158896640","3158897151","DE","DEU","GERMANY" -"3158897152","3158897407","BY","BLR","BELARUS" -"3158897408","3158897439","DE","DEU","GERMANY" -"3158897440","3158897503","IN","IND","INDIA" -"3158897504","3158897567","RU","RUS","RUSSIAN FEDERATION" -"3158897568","3158897631","IN","IND","INDIA" -"3158897632","3158897663","BZ","BLZ","BELIZE" -"3158897664","3158897727","DE","DEU","GERMANY" -"3158897728","3158897791","RU","RUS","RUSSIAN FEDERATION" -"3158897792","3158897919","US","USA","UNITED STATES" -"3158897920","3158898175","BY","BLR","BELARUS" -"3158898176","3158898207","DE","DEU","GERMANY" -"3158898208","3158898271","CZ","CZE","CZECH REPUBLIC" -"3158898272","3158898335","RU","RUS","RUSSIAN FEDERATION" -"3158898336","3158898431","DE","DEU","GERMANY" -"3158898432","3158898687","US","USA","UNITED STATES" -"3158898688","3158898943","DE","DEU","GERMANY" -"3158898944","3158899199","ES","ESP","SPAIN" -"3158899200","3158899455","DE","DEU","GERMANY" -"3158899456","3158899711","CA","CAN","CANADA" -"3158899712","3158900735","DE","DEU","GERMANY" -"3158900736","3158917119","FR","FRA","FRANCE" -"3158917120","3158933503","DE","DEU","GERMANY" -"3158933504","3158949887","RU","RUS","RUSSIAN FEDERATION" -"3158949888","3158966271","GR","GRC","GREECE" -"3158982656","3158999039","GB","GBR","UNITED KINGDOM" -"3158999040","3159031807","RO","ROM","ROMANIA" -"3159031808","3159048191","RU","RUS","RUSSIAN FEDERATION" -"3159048192","3159064575","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3159064576","3159080959","CZ","CZE","CZECH REPUBLIC" -"3159080960","3159097343","RU","RUS","RUSSIAN FEDERATION" -"3159359488","3159621631","PT","PRT","PORTUGAL" -"3159621632","3159883775","ES","ESP","SPAIN" -"3159883776","3160145919","NL","NLD","NETHERLANDS" -"3160145920","3160147967","RU","RUS","RUSSIAN FEDERATION" -"3160147968","3160150015","CZ","CZE","CZECH REPUBLIC" -"3160150016","3160152063","LV","LVA","LATVIA" -"3160152064","3160154111","IT","ITA","ITALY" -"3160154112","3160156159","DE","DEU","GERMANY" -"3160156160","3160158207","AM","ARM","ARMENIA" -"3160160256","3160162303","NL","NLD","NETHERLANDS" -"3160162304","3160164351","FR","FRA","FRANCE" -"3160164352","3160166399","LV","LVA","LATVIA" -"3160166400","3160168447","NO","NOR","NORWAY" -"3160168448","3160170495","GB","GBR","UNITED KINGDOM" -"3160170496","3160172543","IT","ITA","ITALY" -"3160172544","3160174591","RU","RUS","RUSSIAN FEDERATION" -"3160174592","3160176639","DE","DEU","GERMANY" -"3160176640","3160178687","IT","ITA","ITALY" -"3160178688","3160180735","DE","DEU","GERMANY" -"3160180736","3160182783","GB","GBR","UNITED KINGDOM" -"3160182784","3160184831","CH","CHE","SWITZERLAND" -"3160184832","3160186879","NL","NLD","NETHERLANDS" -"3160186880","3160188927","EE","EST","ESTONIA" -"3160188928","3160190975","SE","SWE","SWEDEN" -"3160190976","3160193023","RU","RUS","RUSSIAN FEDERATION" -"3160193024","3160193279","IT","ITA","ITALY" -"3160193280","3160193535","US","USA","UNITED STATES" -"3160193536","3160193791","IT","ITA","ITALY" -"3160193792","3160193807","US","USA","UNITED STATES" -"3160193808","3160193871","LY","LBY","LIBYAN ARAB JAMAHIRIYA" -"3160193872","3160194047","IT","ITA","ITALY" -"3160194048","3160194175","LY","LBY","LIBYAN ARAB JAMAHIRIYA" -"3160194176","3160195071","IT","ITA","ITALY" -"3160195072","3160197119","RU","RUS","RUSSIAN FEDERATION" -"3160197120","3160199167","DE","DEU","GERMANY" -"3160199168","3160201215","GE","GEO","GEORGIA" -"3160201216","3160203263","RU","RUS","RUSSIAN FEDERATION" -"3160203264","3160203775","CH","CHE","SWITZERLAND" -"3160203776","3160203783","DE","DEU","GERMANY" -"3160203784","3160203807","CH","CHE","SWITZERLAND" -"3160203808","3160203815","FR","FRA","FRANCE" -"3160203816","3160205311","CH","CHE","SWITZERLAND" -"3160205312","3160207359","GB","GBR","UNITED KINGDOM" -"3160207360","3160209407","RU","RUS","RUSSIAN FEDERATION" -"3160209408","3160211455","SE","SWE","SWEDEN" -"3160211456","3160213503","IE","IRL","IRELAND" -"3160213504","3160215551","DE","DEU","GERMANY" -"3160215552","3160219647","RU","RUS","RUSSIAN FEDERATION" -"3160219648","3160221695","ES","ESP","SPAIN" -"3160221696","3160223743","FR","FRA","FRANCE" -"3160223744","3160227839","RU","RUS","RUSSIAN FEDERATION" -"3160227840","3160229887","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3160229888","3160231935","ES","ESP","SPAIN" -"3160231936","3160233983","BE","BEL","BELGIUM" -"3160233984","3160236031","GE","GEO","GEORGIA" -"3160236032","3160238079","BE","BEL","BELGIUM" -"3160238080","3160240127","RU","RUS","RUSSIAN FEDERATION" -"3160240128","3160242175","BE","BEL","BELGIUM" -"3160242176","3160244223","RS","SRB","SERBIA" -"3160244224","3160246271","RU","RUS","RUSSIAN FEDERATION" -"3160246272","3160248319","IT","ITA","ITALY" -"3160248320","3160250367","NL","NLD","NETHERLANDS" -"3160250368","3160252415","BE","BEL","BELGIUM" -"3160252416","3160254463","PL","POL","POLAND" -"3160254464","3160256511","LU","LUX","LUXEMBOURG" -"3160256512","3160258559","GB","GBR","UNITED KINGDOM" -"3160258560","3160260607","NO","NOR","NORWAY" -"3160260608","3160262655","PT","PRT","PORTUGAL" -"3160262656","3160264703","HU","HUN","HUNGARY" -"3160264704","3160266751","RU","RUS","RUSSIAN FEDERATION" -"3160266752","3160268799","DE","DEU","GERMANY" -"3160268800","3160271615","PT","PRT","PORTUGAL" -"3160271616","3160271871","ES","ESP","SPAIN" -"3160271872","3160272895","PT","PRT","PORTUGAL" -"3160272896","3160274943","RU","RUS","RUSSIAN FEDERATION" -"3160274944","3160276991","AT","AUT","AUSTRIA" -"3160276992","3160279039","RU","RUS","RUSSIAN FEDERATION" -"3160279040","3160281087","ES","ESP","SPAIN" -"3160281088","3160283135","GB","GBR","UNITED KINGDOM" -"3160283136","3160285183","DE","DEU","GERMANY" -"3160285184","3160287231","RU","RUS","RUSSIAN FEDERATION" -"3160287232","3160289279","GB","GBR","UNITED KINGDOM" -"3160289280","3160291327","RU","RUS","RUSSIAN FEDERATION" -"3160291328","3160293375","ES","ESP","SPAIN" -"3160293376","3160295423","FI","FIN","FINLAND" -"3160295424","3160297471","GB","GBR","UNITED KINGDOM" -"3160297472","3160299519","MD","MDA","REPUBLIC OF MOLDOVA" -"3160299520","3160301567","RU","RUS","RUSSIAN FEDERATION" -"3160301568","3160303615","DE","DEU","GERMANY" -"3160303616","3160305663","GB","GBR","UNITED KINGDOM" -"3160305664","3160307711","DE","DEU","GERMANY" -"3160307712","3160309759","IT","ITA","ITALY" -"3160309760","3160311807","GB","GBR","UNITED KINGDOM" -"3160311808","3160313855","HU","HUN","HUNGARY" -"3160313856","3160315903","IT","ITA","ITALY" -"3160315904","3160317951","KZ","KAZ","KAZAKHSTAN" -"3160317952","3160322047","RU","RUS","RUSSIAN FEDERATION" -"3160322048","3160324095","CH","CHE","SWITZERLAND" -"3160324096","3160328191","IT","ITA","ITALY" -"3160328192","3160330239","FR","FRA","FRANCE" -"3160330240","3160332287","RU","RUS","RUSSIAN FEDERATION" -"3160332288","3160333055","NO","NOR","NORWAY" -"3160333056","3160333087","CO","COL","COLOMBIA" -"3160333088","3160334335","NO","NOR","NORWAY" -"3160334336","3160336383","RU","RUS","RUSSIAN FEDERATION" -"3160336384","3160338431","CZ","CZE","CZECH REPUBLIC" -"3160338432","3160340479","GB","GBR","UNITED KINGDOM" -"3160340480","3160346623","DE","DEU","GERMANY" -"3160346624","3160348671","IT","ITA","ITALY" -"3160348672","3160350719","PL","POL","POLAND" -"3160350720","3160352767","SE","SWE","SWEDEN" -"3160352768","3160354815","GB","GBR","UNITED KINGDOM" -"3160354816","3160356863","NL","NLD","NETHERLANDS" -"3160356864","3160358911","CZ","CZE","CZECH REPUBLIC" -"3160358912","3160360959","JO","JOR","JORDAN" -"3160360960","3160363007","IT","ITA","ITALY" -"3160363008","3160365055","GB","GBR","UNITED KINGDOM" -"3160365056","3160369151","NL","NLD","NETHERLANDS" -"3160369152","3160371199","RU","RUS","RUSSIAN FEDERATION" -"3160371200","3160373247","ES","ESP","SPAIN" -"3160373248","3160375295","CZ","CZE","CZECH REPUBLIC" -"3160375296","3160377343","GB","GBR","UNITED KINGDOM" -"3160377344","3160379391","NL","NLD","NETHERLANDS" -"3160379392","3160381439","TR","TUR","TURKEY" -"3160381440","3160383487","UA","UKR","UKRAINE" -"3160383488","3160385535","GB","GBR","UNITED KINGDOM" -"3160385536","3160387583","NL","NLD","NETHERLANDS" -"3160387584","3160389631","RS","SRB","SERBIA" -"3160389632","3160391679","RU","RUS","RUSSIAN FEDERATION" -"3160391680","3160395775","GB","GBR","UNITED KINGDOM" -"3160395776","3160397823","EE","EST","ESTONIA" -"3160397824","3160399871","ES","ESP","SPAIN" -"3160399872","3160403967","SE","SWE","SWEDEN" -"3160403968","3160406015","NO","NOR","NORWAY" -"3160408064","3161456639","DE","DEU","GERMANY" -"3161456640","3161473023","PL","POL","POLAND" -"3161473024","3161489407","SK","SVK","SLOVAKIA" -"3161489408","3161505791","LV","LVA","LATVIA" -"3161505792","3161538559","RU","RUS","RUSSIAN FEDERATION" -"3161538560","3161554943","NO","NOR","NORWAY" -"3161554944","3161571327","RU","RUS","RUSSIAN FEDERATION" -"3161571328","3161587711","UZ","UZB","UZBEKISTAN" -"3161587712","3161620479","RU","RUS","RUSSIAN FEDERATION" -"3161620480","3161636863","DK","DNK","DENMARK" -"3161636864","3161653247","RU","RUS","RUSSIAN FEDERATION" -"3161653248","3161669631","LU","LUX","LUXEMBOURG" -"3161669632","3161686015","FR","FRA","FRANCE" -"3161686016","3161702399","UA","UKR","UKRAINE" -"3161702400","3161718783","AM","ARM","ARMENIA" -"3161718784","3161735167","PL","POL","POLAND" -"3161735168","3161751551","CZ","CZE","CZECH REPUBLIC" -"3161751552","3161767935","RU","RUS","RUSSIAN FEDERATION" -"3161767936","3161784319","BH","BHR","BAHRAIN" -"3161784320","3161800703","FI","FIN","FINLAND" -"3161800704","3161817087","SA","SAU","SAUDI ARABIA" -"3161817088","3161833471","PL","POL","POLAND" -"3161833472","3161833983","MK","MKD","THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA" -"3161833984","3161834495","AT","AUT","AUSTRIA" -"3161834496","3161835263","MK","MKD","THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA" -"3161835264","3161849855","AT","AUT","AUSTRIA" -"3161849856","3161866239","BE","BEL","BELGIUM" -"3161866240","3161882623","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3161882624","3161899007","DE","DEU","GERMANY" -"3161899008","3161915391","AT","AUT","AUSTRIA" -"3161931776","3161948159","SA","SAU","SAUDI ARABIA" -"3161948160","3161964543","RO","ROM","ROMANIA" -"3161964544","3161980927","ES","ESP","SPAIN" -"3161980928","3161989119","SK","SVK","SLOVAKIA" -"3161989120","3161997311","RU","RUS","RUSSIAN FEDERATION" -"3161997312","3162005503","DK","DNK","DENMARK" -"3162005504","3162013695","CS","SCG","SERBIA AND MONTENEGRO" -"3162013696","3162021887","IL","ISR","ISRAEL" -"3162021888","3162030079","SE","SWE","SWEDEN" -"3162030080","3162038271","CZ","CZE","CZECH REPUBLIC" -"3162038272","3162046463","RU","RUS","RUSSIAN FEDERATION" -"3162046464","3162054655","PL","POL","POLAND" -"3162054656","3162062847","NL","NLD","NETHERLANDS" -"3162062848","3162071039","SE","SWE","SWEDEN" -"3162071040","3162087423","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3162087424","3162095615","SK","SVK","SLOVAKIA" -"3162095616","3162103807","GE","GEO","GEORGIA" -"3162103808","3162104831","FR","FRA","FRANCE" -"3162104832","3162108415","NL","NLD","NETHERLANDS" -"3162108416","3162111999","FR","FRA","FRANCE" -"3162112000","3162120191","PL","POL","POLAND" -"3162120192","3162128383","GB","GBR","UNITED KINGDOM" -"3162128384","3162129407","NL","NLD","NETHERLANDS" -"3162129408","3162129919","DE","DEU","GERMANY" -"3162129920","3162136575","NL","NLD","NETHERLANDS" -"3162144768","3162152959","SE","SWE","SWEDEN" -"3162152960","3162161151","RU","RUS","RUSSIAN FEDERATION" -"3162161152","3162169343","CZ","CZE","CZECH REPUBLIC" -"3162169344","3162177535","RU","RUS","RUSSIAN FEDERATION" -"3162177536","3162185727","FI","FIN","FINLAND" -"3162185728","3162193919","RU","RUS","RUSSIAN FEDERATION" -"3162193920","3162202111","FR","FRA","FRANCE" -"3162202112","3162210303","SK","SVK","SLOVAKIA" -"3162210304","3162218495","GE","GEO","GEORGIA" -"3162218496","3162226687","JO","JOR","JORDAN" -"3162226688","3162234879","PL","POL","POLAND" -"3162234880","3162243071","RU","RUS","RUSSIAN FEDERATION" -"3162243072","3162251263","TR","TUR","TURKEY" -"3162251264","3162259455","RU","RUS","RUSSIAN FEDERATION" -"3162259456","3162267647","CZ","CZE","CZECH REPUBLIC" -"3162267648","3162275839","RU","RUS","RUSSIAN FEDERATION" -"3162275840","3162284031","NO","NOR","NORWAY" -"3162284032","3162292223","PL","POL","POLAND" -"3162292224","3162300415","BA","BIH","BOSNIA AND HERZEGOVINA" -"3162300416","3162308607","RU","RUS","RUSSIAN FEDERATION" -"3162308608","3162316799","HR","HRV","CROATIA" -"3162316800","3162324991","PL","POL","POLAND" -"3162324992","3162327039","GB","GBR","UNITED KINGDOM" -"3162327040","3162327296","CH","CHE","SWITZERLAND" -"3162327297","3162333183","GB","GBR","UNITED KINGDOM" -"3162333184","3162341375","IT","ITA","ITALY" -"3162341376","3162349567","PL","POL","POLAND" -"3162349568","3162357759","TR","TUR","TURKEY" -"3162357760","3162365951","PT","PRT","PORTUGAL" -"3162365952","3162374143","PL","POL","POLAND" -"3162374144","3162382335","BG","BGR","BULGARIA" -"3162382336","3162390527","RU","RUS","RUSSIAN FEDERATION" -"3162390528","3162398719","SE","SWE","SWEDEN" -"3162398720","3162406911","BE","BEL","BELGIUM" -"3162406912","3162415103","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3162415104","3162423295","DE","DEU","GERMANY" -"3162423296","3162431487","NO","NOR","NORWAY" -"3162431488","3162439679","SE","SWE","SWEDEN" -"3162439680","3162447871","PL","POL","POLAND" -"3162447872","3162456063","RU","RUS","RUSSIAN FEDERATION" -"3162456064","3162464255","BG","BGR","BULGARIA" -"3162464256","3162472447","BA","BIH","BOSNIA AND HERZEGOVINA" -"3162472448","3162480639","HU","HUN","HUNGARY" -"3162480640","3162488831","ES","ESP","SPAIN" -"3162488832","3162497023","FI","FIN","FINLAND" -"3162497024","3162537983","RU","RUS","RUSSIAN FEDERATION" -"3162537984","3162570751","PL","POL","POLAND" -"3162570752","3162603519","HR","HRV","CROATIA" -"3162603520","3162636287","GE","GEO","GEORGIA" -"3162636288","3162669055","FR","FRA","FRANCE" -"3162669056","3162681343","RU","RUS","RUSSIAN FEDERATION" -"3162681344","3162682367","UA","UKR","UKRAINE" -"3162682368","3162685439","RU","RUS","RUSSIAN FEDERATION" -"3162685440","3162697727","UA","UKR","UKRAINE" -"3162697728","3162700287","RU","RUS","RUSSIAN FEDERATION" -"3162700288","3162700799","LV","LVA","LATVIA" -"3162700800","3162701823","RU","RUS","RUSSIAN FEDERATION" -"3162701824","3162734591","MD","MDA","REPUBLIC OF MOLDOVA" -"3162734592","3162767359","RU","RUS","RUSSIAN FEDERATION" -"3162767360","3162800127","SA","SAU","SAUDI ARABIA" -"3162800128","3162802175","TR","TUR","TURKEY" -"3162802176","3162803199","CZ","CZE","CZECH REPUBLIC" -"3162803200","3162824703","TR","TUR","TURKEY" -"3162824704","3162828799","NL","NLD","NETHERLANDS" -"3162828800","3162832895","TR","TUR","TURKEY" -"3162832896","3162865663","GR","GRC","GREECE" -"3162865664","3162931199","RU","RUS","RUSSIAN FEDERATION" -"3162931200","3162963967","CZ","CZE","CZECH REPUBLIC" -"3162963968","3162996735","OM","OMN","OMAN" -"3162996736","3163029503","IT","ITA","ITALY" -"3163029504","3163062271","DE","DEU","GERMANY" -"3163062272","3163095039","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3163095040","3163127807","PL","POL","POLAND" -"3163160576","3163161695","DE","DEU","GERMANY" -"3163161696","3163161727","BG","BGR","BULGARIA" -"3163161728","3163162239","DE","DEU","GERMANY" -"3163162240","3163162271","CH","CHE","SWITZERLAND" -"3163162272","3163162303","NL","NLD","NETHERLANDS" -"3163162304","3163162367","DE","DEU","GERMANY" -"3163162368","3163162399","TR","TUR","TURKEY" -"3163162400","3163163743","DE","DEU","GERMANY" -"3163163744","3163163775","GB","GBR","UNITED KINGDOM" -"3163163776","3163166111","DE","DEU","GERMANY" -"3163166112","3163166143","PT","PRT","PORTUGAL" -"3163166144","3163166527","DE","DEU","GERMANY" -"3163166528","3163166559","TR","TUR","TURKEY" -"3163166560","3163167807","DE","DEU","GERMANY" -"3163167808","3163167839","TR","TUR","TURKEY" -"3163167840","3163168351","DE","DEU","GERMANY" -"3163168352","3163168383","RU","RUS","RUSSIAN FEDERATION" -"3163168384","3163168575","DE","DEU","GERMANY" -"3163168576","3163168607","TR","TUR","TURKEY" -"3163168608","3163168639","UA","UKR","UKRAINE" -"3163168640","3163168671","DE","DEU","GERMANY" -"3163168672","3163168703","US","USA","UNITED STATES" -"3163168704","3163169823","DE","DEU","GERMANY" -"3163169824","3163169855","RU","RUS","RUSSIAN FEDERATION" -"3163169856","3163169887","TR","TUR","TURKEY" -"3163169888","3163169951","DE","DEU","GERMANY" -"3163169952","3163169983","GB","GBR","UNITED KINGDOM" -"3163169984","3163170015","DE","DEU","GERMANY" -"3163170016","3163170047","TR","TUR","TURKEY" -"3163170048","3163170079","DE","DEU","GERMANY" -"3163170080","3163170111","TR","TUR","TURKEY" -"3163170112","3163170207","DE","DEU","GERMANY" -"3163170208","3163170239","RU","RUS","RUSSIAN FEDERATION" -"3163170240","3163170655","DE","DEU","GERMANY" -"3163170656","3163170687","DK","DNK","DENMARK" -"3163170688","3163172127","DE","DEU","GERMANY" -"3163172128","3163172159","TR","TUR","TURKEY" -"3163172160","3163172223","DE","DEU","GERMANY" -"3163172224","3163172255","TR","TUR","TURKEY" -"3163172256","3163172287","DE","DEU","GERMANY" -"3163172288","3163172319","TR","TUR","TURKEY" -"3163172320","3163172351","DE","DEU","GERMANY" -"3163172352","3163172383","GB","GBR","UNITED KINGDOM" -"3163172384","3163172607","DE","DEU","GERMANY" -"3163172608","3163172639","DK","DNK","DENMARK" -"3163172640","3163172671","DE","DEU","GERMANY" -"3163172672","3163172703","TR","TUR","TURKEY" -"3163172704","3163172735","DE","DEU","GERMANY" -"3163172736","3163172767","GR","GRC","GREECE" -"3163172768","3163174047","DE","DEU","GERMANY" -"3163174048","3163174079","DK","DNK","DENMARK" -"3163174080","3163174175","DE","DEU","GERMANY" -"3163174176","3163174207","RU","RUS","RUSSIAN FEDERATION" -"3163174208","3163174335","DE","DEU","GERMANY" -"3163174336","3163174367","RU","RUS","RUSSIAN FEDERATION" -"3163174368","3163193343","DE","DEU","GERMANY" -"3163226112","3163258879","SA","SAU","SAUDI ARABIA" -"3163258880","3163291647","SY","SYR","SYRIAN ARAB REPUBLIC" -"3163291648","3163324415","PT","PRT","PORTUGAL" -"3163324416","3163357183","OM","OMN","OMAN" -"3163357184","3163389951","IE","IRL","IRELAND" -"3163389952","3163422719","FR","FRA","FRANCE" -"3163422720","3163455487","NL","NLD","NETHERLANDS" -"3163455488","3163488255","HU","HUN","HUNGARY" -"3163488256","3163521023","UA","UKR","UKRAINE" -"3163521024","3163553791","RU","RUS","RUSSIAN FEDERATION" -"3163553792","3163684863","DE","DEU","GERMANY" -"3163684864","3163815935","PL","POL","POLAND" -"3163815936","3164078079","NO","NOR","NORWAY" -"3164078080","3164209151","IT","ITA","ITALY" -"3164209152","3164340223","CH","CHE","SWITZERLAND" -"3164340224","3164471295","HU","HUN","HUNGARY" -"3164471296","3164602367","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3164602368","3164667903","SY","SYR","SYRIAN ARAB REPUBLIC" -"3164667904","3164733439","PS","PSE","PALESTINIAN TERRITORY, OCCUPIED" -"3164733440","3164798975","RU","RUS","RUSSIAN FEDERATION" -"3164798976","3164864511","UA","UKR","UKRAINE" -"3164864512","3164930047","RU","RUS","RUSSIAN FEDERATION" -"3164930048","3164932095","IE","IRL","IRELAND" -"3164932096","3164934143","FR","FRA","FRANCE" -"3164934144","3164936191","PL","POL","POLAND" -"3164936192","3164938239","LT","LTU","LITHUANIA" -"3164938240","3164946431","FR","FRA","FRANCE" -"3164946432","3164946435","PL","POL","POLAND" -"3164946436","3164946439","PT","PRT","PORTUGAL" -"3164946440","3164946447","ES","ESP","SPAIN" -"3164946448","3164946479","FR","FRA","FRANCE" -"3164946480","3164946483","ES","ESP","SPAIN" -"3164946484","3164946487","PL","POL","POLAND" -"3164946488","3164946495","FR","FRA","FRANCE" -"3164946496","3164946499","IT","ITA","ITALY" -"3164946500","3164946503","GB","GBR","UNITED KINGDOM" -"3164946504","3164946507","BE","BEL","BELGIUM" -"3164946508","3164946511","FR","FRA","FRANCE" -"3164946512","3164946527","ES","ESP","SPAIN" -"3164946528","3164946559","GB","GBR","UNITED KINGDOM" -"3164946560","3164946783","FR","FRA","FRANCE" -"3164946784","3164946799","BE","BEL","BELGIUM" -"3164946800","3164947071","FR","FRA","FRANCE" -"3164947072","3164947199","DE","DEU","GERMANY" -"3164947200","3164947455","FR","FRA","FRANCE" -"3164947456","3164947711","DE","DEU","GERMANY" -"3164947712","3164947743","FR","FRA","FRANCE" -"3164947744","3164947747","ES","ESP","SPAIN" -"3164947748","3164947751","BE","BEL","BELGIUM" -"3164947752","3164947839","FR","FRA","FRANCE" -"3164947840","3164947967","GB","GBR","UNITED KINGDOM" -"3164947968","3164948479","BE","BEL","BELGIUM" -"3164948480","3164948735","FR","FRA","FRANCE" -"3164948736","3164948991","PL","POL","POLAND" -"3164948992","3164949087","GB","GBR","UNITED KINGDOM" -"3164949088","3164949095","FR","FRA","FRANCE" -"3164949096","3164949103","IT","ITA","ITALY" -"3164949104","3164949119","FR","FRA","FRANCE" -"3164949120","3164949131","DE","DEU","GERMANY" -"3164949132","3164949135","FR","FRA","FRANCE" -"3164949136","3164949151","GB","GBR","UNITED KINGDOM" -"3164949152","3164949159","CH","CHE","SWITZERLAND" -"3164949160","3164949163","CZ","CZE","CZECH REPUBLIC" -"3164949164","3164949183","FR","FRA","FRANCE" -"3164949184","3164949215","DE","DEU","GERMANY" -"3164949216","3164949231","NL","NLD","NETHERLANDS" -"3164949232","3164949247","BE","BEL","BELGIUM" -"3164949248","3164949279","FR","FRA","FRANCE" -"3164949280","3164949295","ES","ESP","SPAIN" -"3164949296","3164949327","FR","FRA","FRANCE" -"3164949328","3164949343","PL","POL","POLAND" -"3164949344","3164949359","FR","FRA","FRANCE" -"3164949360","3164949363","BE","BEL","BELGIUM" -"3164949364","3164949391","FR","FRA","FRANCE" -"3164949392","3164949395","ES","ESP","SPAIN" -"3164949396","3164949439","FR","FRA","FRANCE" -"3164949440","3164949471","PL","POL","POLAND" -"3164949472","3164949503","FR","FRA","FRANCE" -"3164949504","3164950015","BE","BEL","BELGIUM" -"3164950016","3164950271","GB","GBR","UNITED KINGDOM" -"3164950272","3164950527","DE","DEU","GERMANY" -"3164950528","3164950543","BE","BEL","BELGIUM" -"3164950544","3164950591","NL","NLD","NETHERLANDS" -"3164950592","3164950623","FR","FRA","FRANCE" -"3164950624","3164950655","GB","GBR","UNITED KINGDOM" -"3164950656","3164950687","FR","FRA","FRANCE" -"3164950688","3164950703","ES","ESP","SPAIN" -"3164950704","3164950719","FR","FRA","FRANCE" -"3164950720","3164950735","GB","GBR","UNITED KINGDOM" -"3164950736","3164950751","ES","ESP","SPAIN" -"3164950752","3164950759","GB","GBR","UNITED KINGDOM" -"3164950760","3164950783","ES","ESP","SPAIN" -"3164950784","3164951039","FR","FRA","FRANCE" -"3164951040","3164951231","DE","DEU","GERMANY" -"3164951232","3164951239","GB","GBR","UNITED KINGDOM" -"3164951240","3164951263","FR","FRA","FRANCE" -"3164951264","3164951295","DE","DEU","GERMANY" -"3164951296","3164951471","PL","POL","POLAND" -"3164951472","3164951487","FR","FRA","FRANCE" -"3164951488","3164951519","PL","POL","POLAND" -"3164951520","3164951535","FR","FRA","FRANCE" -"3164951536","3164951543","BE","BEL","BELGIUM" -"3164951544","3164951547","NL","NLD","NETHERLANDS" -"3164951548","3164951551","FR","FRA","FRANCE" -"3164951552","3164951583","IT","ITA","ITALY" -"3164951584","3164951615","NL","NLD","NETHERLANDS" -"3164951616","3164951647","GB","GBR","UNITED KINGDOM" -"3164951648","3164951679","NL","NLD","NETHERLANDS" -"3164951680","3164951711","GB","GBR","UNITED KINGDOM" -"3164951712","3164951743","FR","FRA","FRANCE" -"3164951744","3164951775","NL","NLD","NETHERLANDS" -"3164951776","3164951807","FR","FRA","FRANCE" -"3164951808","3164951823","NL","NLD","NETHERLANDS" -"3164951824","3164951839","FR","FRA","FRANCE" -"3164951840","3164951855","PL","POL","POLAND" -"3164951856","3164951871","FR","FRA","FRANCE" -"3164951872","3164951875","CZ","CZE","CZECH REPUBLIC" -"3164951876","3164951879","IT","ITA","ITALY" -"3164951880","3164951887","DE","DEU","GERMANY" -"3164951888","3164951895","ES","ESP","SPAIN" -"3164951896","3164951903","FR","FRA","FRANCE" -"3164951904","3164951911","IE","IRL","IRELAND" -"3164951912","3164951919","DE","DEU","GERMANY" -"3164951920","3164951935","FR","FRA","FRANCE" -"3164951936","3164951999","DE","DEU","GERMANY" -"3164952000","3164952015","ES","ESP","SPAIN" -"3164952016","3164952031","FR","FRA","FRANCE" -"3164952032","3164952063","PL","POL","POLAND" -"3164952064","3164952191","FR","FRA","FRANCE" -"3164952192","3164952207","ES","ESP","SPAIN" -"3164952208","3164952219","NL","NLD","NETHERLANDS" -"3164952220","3164952223","FR","FRA","FRANCE" -"3164952224","3164952239","NL","NLD","NETHERLANDS" -"3164952240","3164952255","FR","FRA","FRANCE" -"3164952256","3164952319","DE","DEU","GERMANY" -"3164952320","3164952575","ES","ESP","SPAIN" -"3164952576","3164952831","FR","FRA","FRANCE" -"3164952832","3164952959","IT","ITA","ITALY" -"3164952960","3164952975","GB","GBR","UNITED KINGDOM" -"3164952976","3164952991","FR","FRA","FRANCE" -"3164952992","3164953007","PL","POL","POLAND" -"3164953008","3164953023","ES","ESP","SPAIN" -"3164953024","3164953343","FR","FRA","FRANCE" -"3164953344","3164953375","PL","POL","POLAND" -"3164953376","3164953391","FR","FRA","FRANCE" -"3164953392","3164953395","IT","ITA","ITALY" -"3164953396","3164953399","NL","NLD","NETHERLANDS" -"3164953400","3164953403","BE","BEL","BELGIUM" -"3164953404","3164953407","CH","CHE","SWITZERLAND" -"3164953408","3164953423","BE","BEL","BELGIUM" -"3164953424","3164953439","FR","FRA","FRANCE" -"3164953440","3164953443","CZ","CZE","CZECH REPUBLIC" -"3164953444","3164953447","DE","DEU","GERMANY" -"3164953448","3164953451","ES","ESP","SPAIN" -"3164953452","3164953455","FR","FRA","FRANCE" -"3164953456","3164953459","IE","IRL","IRELAND" -"3164953460","3164953463","PT","PRT","PORTUGAL" -"3164953464","3164953467","PL","POL","POLAND" -"3164953468","3164953471","GB","GBR","UNITED KINGDOM" -"3164953472","3164953503","PL","POL","POLAND" -"3164953504","3164953511","FR","FRA","FRANCE" -"3164953512","3164953515","PL","POL","POLAND" -"3164953516","3164953519","IE","IRL","IRELAND" -"3164953520","3164953567","PL","POL","POLAND" -"3164953568","3164953571","FR","FRA","FRANCE" -"3164953572","3164953575","GB","GBR","UNITED KINGDOM" -"3164953576","3164953583","IT","ITA","ITALY" -"3164953584","3164954111","ES","ESP","SPAIN" -"3164954112","3164954239","DE","DEU","GERMANY" -"3164954240","3164954263","FR","FRA","FRANCE" -"3164954264","3164954271","DE","DEU","GERMANY" -"3164954272","3164954275","IT","ITA","ITALY" -"3164954276","3164954279","GB","GBR","UNITED KINGDOM" -"3164954280","3164954287","FR","FRA","FRANCE" -"3164954288","3164954303","ES","ESP","SPAIN" -"3164954304","3164954367","DE","DEU","GERMANY" -"3164954368","3164954431","FR","FRA","FRANCE" -"3164954432","3164954439","ES","ESP","SPAIN" -"3164954440","3164954479","FR","FRA","FRANCE" -"3164954480","3164954495","GB","GBR","UNITED KINGDOM" -"3164954496","3164954499","PL","POL","POLAND" -"3164954500","3164954503","ES","ESP","SPAIN" -"3164954504","3164954543","GB","GBR","UNITED KINGDOM" -"3164954544","3164954591","FR","FRA","FRANCE" -"3164954592","3164954623","PL","POL","POLAND" -"3164954624","3164958847","FR","FRA","FRANCE" -"3164958848","3164958911","IT","ITA","ITALY" -"3164958912","3164958927","CH","CHE","SWITZERLAND" -"3164958928","3164958943","ES","ESP","SPAIN" -"3164958944","3164959039","FR","FRA","FRANCE" -"3164959040","3164959135","DE","DEU","GERMANY" -"3164959136","3164959231","ES","ESP","SPAIN" -"3164959232","3164959247","FR","FRA","FRANCE" -"3164959248","3164959255","BE","BEL","BELGIUM" -"3164959256","3164959259","FR","FRA","FRANCE" -"3164959260","3164959263","DE","DEU","GERMANY" -"3164959264","3164959295","GB","GBR","UNITED KINGDOM" -"3164959296","3164959299","CZ","CZE","CZECH REPUBLIC" -"3164959300","3164959303","PT","PRT","PORTUGAL" -"3164959304","3164959307","FR","FRA","FRANCE" -"3164959308","3164959311","DE","DEU","GERMANY" -"3164959312","3164959327","ES","ESP","SPAIN" -"3164959328","3164959343","BE","BEL","BELGIUM" -"3164959344","3164959359","PL","POL","POLAND" -"3164959360","3164959375","ES","ESP","SPAIN" -"3164959376","3164959383","DE","DEU","GERMANY" -"3164959384","3164959387","PL","POL","POLAND" -"3164959388","3164959391","FR","FRA","FRANCE" -"3164959392","3164959487","DE","DEU","GERMANY" -"3164959488","3164959743","ES","ESP","SPAIN" -"3164959744","3164960255","DE","DEU","GERMANY" -"3164960256","3164960511","FR","FRA","FRANCE" -"3164960512","3164960575","PL","POL","POLAND" -"3164960576","3164960767","IT","ITA","ITALY" -"3164960768","3164960831","PL","POL","POLAND" -"3164960832","3164960895","FR","FRA","FRANCE" -"3164960896","3164960959","PT","PRT","PORTUGAL" -"3164960960","3164961023","CH","CHE","SWITZERLAND" -"3164961024","3164961279","FR","FRA","FRANCE" -"3164961280","3164961311","DE","DEU","GERMANY" -"3164961312","3164961319","FR","FRA","FRANCE" -"3164961320","3164961327","PL","POL","POLAND" -"3164961328","3164961363","FR","FRA","FRANCE" -"3164961364","3164961367","ES","ESP","SPAIN" -"3164961368","3164961375","FR","FRA","FRANCE" -"3164961376","3164961391","DE","DEU","GERMANY" -"3164961392","3164961399","ES","ESP","SPAIN" -"3164961400","3164961403","PL","POL","POLAND" -"3164961404","3164961471","FR","FRA","FRANCE" -"3164961472","3164961503","DE","DEU","GERMANY" -"3164961504","3164961551","ES","ESP","SPAIN" -"3164961552","3164961559","FR","FRA","FRANCE" -"3164961560","3164961563","DE","DEU","GERMANY" -"3164961564","3164961583","FR","FRA","FRANCE" -"3164961584","3164961599","DE","DEU","GERMANY" -"3164961600","3164961631","BE","BEL","BELGIUM" -"3164961632","3164961647","IT","ITA","ITALY" -"3164961648","3164961655","NL","NLD","NETHERLANDS" -"3164961656","3164961663","ES","ESP","SPAIN" -"3164961664","3164961695","DE","DEU","GERMANY" -"3164961696","3164961727","GB","GBR","UNITED KINGDOM" -"3164961728","3164961743","FR","FRA","FRANCE" -"3164961744","3164961759","PL","POL","POLAND" -"3164961760","3164961855","FR","FRA","FRANCE" -"3164961856","3164961871","PL","POL","POLAND" -"3164961872","3164961887","IE","IRL","IRELAND" -"3164961888","3164961903","ES","ESP","SPAIN" -"3164961904","3164961919","GB","GBR","UNITED KINGDOM" -"3164961920","3164961951","IT","ITA","ITALY" -"3164961952","3164961967","ES","ESP","SPAIN" -"3164961968","3164961971","FR","FRA","FRANCE" -"3164961972","3164961975","PL","POL","POLAND" -"3164961976","3164961979","GB","GBR","UNITED KINGDOM" -"3164961980","3164961999","DE","DEU","GERMANY" -"3164962000","3164962015","FR","FRA","FRANCE" -"3164962016","3164962047","NL","NLD","NETHERLANDS" -"3164962048","3164962303","GB","GBR","UNITED KINGDOM" -"3164962304","3164962335","NL","NLD","NETHERLANDS" -"3164962336","3164962367","DE","DEU","GERMANY" -"3164962368","3164962431","FR","FRA","FRANCE" -"3164962432","3164962495","ES","ESP","SPAIN" -"3164962496","3164962527","FR","FRA","FRANCE" -"3164962528","3164962535","PL","POL","POLAND" -"3164962536","3164962539","CH","CHE","SWITZERLAND" -"3164962540","3164962543","CZ","CZE","CZECH REPUBLIC" -"3164962544","3164962623","FR","FRA","FRANCE" -"3164962624","3164962627","BE","BEL","BELGIUM" -"3164962628","3164962631","CH","CHE","SWITZERLAND" -"3164962632","3164962655","FR","FRA","FRANCE" -"3164962656","3164962687","ES","ESP","SPAIN" -"3164962688","3164962751","GB","GBR","UNITED KINGDOM" -"3164962752","3164964863","ES","ESP","SPAIN" -"3164964864","3164966911","FI","FIN","FINLAND" -"3164966912","3164967039","FR","FRA","FRANCE" -"3164967040","3164967071","PL","POL","POLAND" -"3164967072","3164967087","FR","FRA","FRANCE" -"3164967088","3164967095","IT","ITA","ITALY" -"3164967096","3164967103","PL","POL","POLAND" -"3164967104","3164967135","ES","ESP","SPAIN" -"3164967136","3164967155","FR","FRA","FRANCE" -"3164967156","3164967159","PL","POL","POLAND" -"3164967160","3164967167","FR","FRA","FRANCE" -"3164967168","3164967295","ES","ESP","SPAIN" -"3164967296","3164967303","NL","NLD","NETHERLANDS" -"3164967304","3164967307","IT","ITA","ITALY" -"3164967308","3164967311","DE","DEU","GERMANY" -"3164967312","3164967343","IT","ITA","ITALY" -"3164967344","3164967351","ES","ESP","SPAIN" -"3164967352","3164967359","PL","POL","POLAND" -"3164967360","3164967423","FR","FRA","FRANCE" -"3164967424","3164967679","ES","ESP","SPAIN" -"3164967680","3164967935","FR","FRA","FRANCE" -"3164967936","3164967967","DE","DEU","GERMANY" -"3164967968","3164967971","FR","FRA","FRANCE" -"3164967972","3164967975","DE","DEU","GERMANY" -"3164967976","3164967999","FR","FRA","FRANCE" -"3164968000","3164968063","ES","ESP","SPAIN" -"3164968064","3164968191","FR","FRA","FRANCE" -"3164968192","3164968703","PL","POL","POLAND" -"3164968704","3164968831","FR","FRA","FRANCE" -"3164968832","3164968863","DE","DEU","GERMANY" -"3164968864","3164968895","FR","FRA","FRANCE" -"3164968896","3164968927","GB","GBR","UNITED KINGDOM" -"3164968928","3164968959","IT","ITA","ITALY" -"3164968960","3164968991","DE","DEU","GERMANY" -"3164968992","3164969007","FR","FRA","FRANCE" -"3164969008","3164969015","PT","PRT","PORTUGAL" -"3164969016","3164969023","FR","FRA","FRANCE" -"3164969024","3164969055","PL","POL","POLAND" -"3164969056","3164969071","CZ","CZE","CZECH REPUBLIC" -"3164969072","3164969087","FR","FRA","FRANCE" -"3164969088","3164969095","ES","ESP","SPAIN" -"3164969096","3164969099","PL","POL","POLAND" -"3164969100","3164969103","DE","DEU","GERMANY" -"3164969104","3164969135","FR","FRA","FRANCE" -"3164969136","3164969143","ES","ESP","SPAIN" -"3164969144","3164969147","PT","PRT","PORTUGAL" -"3164969148","3164969151","PL","POL","POLAND" -"3164969152","3164969183","GB","GBR","UNITED KINGDOM" -"3164969184","3164969199","DE","DEU","GERMANY" -"3164969200","3164969207","GB","GBR","UNITED KINGDOM" -"3164969208","3164969211","IT","ITA","ITALY" -"3164969212","3164969471","FR","FRA","FRANCE" -"3164969472","3164969727","PL","POL","POLAND" -"3164969728","3164969983","GB","GBR","UNITED KINGDOM" -"3164969984","3164970047","IE","IRL","IRELAND" -"3164970048","3164970079","GB","GBR","UNITED KINGDOM" -"3164970080","3164970111","DE","DEU","GERMANY" -"3164970112","3164970211","FR","FRA","FRANCE" -"3164970212","3164970215","GB","GBR","UNITED KINGDOM" -"3164970216","3164970219","PL","POL","POLAND" -"3164970220","3164970223","FR","FRA","FRANCE" -"3164970224","3164970239","GB","GBR","UNITED KINGDOM" -"3164970240","3164970495","IE","IRL","IRELAND" -"3164970496","3164970623","FR","FRA","FRANCE" -"3164970624","3164970751","IE","IRL","IRELAND" -"3164970752","3164970783","FR","FRA","FRANCE" -"3164970784","3164970791","PL","POL","POLAND" -"3164970792","3164970831","FR","FRA","FRANCE" -"3164970832","3164970835","IT","ITA","ITALY" -"3164970836","3164970839","PL","POL","POLAND" -"3164970840","3164970847","GB","GBR","UNITED KINGDOM" -"3164970848","3164970991","FR","FRA","FRANCE" -"3164970992","3164971007","BE","BEL","BELGIUM" -"3164971008","3164971011","ES","ESP","SPAIN" -"3164971012","3164971015","FR","FRA","FRANCE" -"3164971016","3164971023","PL","POL","POLAND" -"3164971024","3164971055","FR","FRA","FRANCE" -"3164971056","3164971071","NL","NLD","NETHERLANDS" -"3164971072","3164971135","DE","DEU","GERMANY" -"3164971136","3164971263","GB","GBR","UNITED KINGDOM" -"3164971264","3164971455","DE","DEU","GERMANY" -"3164971456","3164971459","NL","NLD","NETHERLANDS" -"3164971460","3164971463","IT","ITA","ITALY" -"3164971464","3164971467","CH","CHE","SWITZERLAND" -"3164971468","3164971471","FR","FRA","FRANCE" -"3164971472","3164971479","NL","NLD","NETHERLANDS" -"3164971480","3164971483","FR","FRA","FRANCE" -"3164971484","3164971487","PL","POL","POLAND" -"3164971488","3164971503","ES","ESP","SPAIN" -"3164971504","3164971511","PL","POL","POLAND" -"3164971512","3164971519","CZ","CZE","CZECH REPUBLIC" -"3164971520","3164971775","ES","ESP","SPAIN" -"3164971776","3164971903","FR","FRA","FRANCE" -"3164971904","3164971967","DE","DEU","GERMANY" -"3164971968","3164971983","FR","FRA","FRANCE" -"3164971984","3164971999","ES","ESP","SPAIN" -"3164972000","3164972015","CH","CHE","SWITZERLAND" -"3164972016","3164972019","ES","ESP","SPAIN" -"3164972020","3164972027","FR","FRA","FRANCE" -"3164972028","3164972031","ES","ESP","SPAIN" -"3164972032","3164972287","GB","GBR","UNITED KINGDOM" -"3164972288","3164972319","FR","FRA","FRANCE" -"3164972320","3164972351","DE","DEU","GERMANY" -"3164972352","3164972415","NL","NLD","NETHERLANDS" -"3164972416","3164972479","BE","BEL","BELGIUM" -"3164972480","3164972499","FR","FRA","FRANCE" -"3164972500","3164972503","IT","ITA","ITALY" -"3164972504","3164972511","DE","DEU","GERMANY" -"3164972512","3164972527","GB","GBR","UNITED KINGDOM" -"3164972528","3164972799","FR","FRA","FRANCE" -"3164972800","3164973311","ES","ESP","SPAIN" -"3164973312","3164973823","FR","FRA","FRANCE" -"3164973824","3164973855","DE","DEU","GERMANY" -"3164973856","3164973863","PL","POL","POLAND" -"3164973864","3164973867","FR","FRA","FRANCE" -"3164973868","3164973875","ES","ESP","SPAIN" -"3164973876","3164973879","GB","GBR","UNITED KINGDOM" -"3164973880","3164973883","FR","FRA","FRANCE" -"3164973884","3164973887","DE","DEU","GERMANY" -"3164973888","3164973919","ES","ESP","SPAIN" -"3164973920","3164973935","FR","FRA","FRANCE" -"3164973936","3164973939","IT","ITA","ITALY" -"3164973940","3164974591","FR","FRA","FRANCE" -"3164974592","3164975103","GB","GBR","UNITED KINGDOM" -"3164975104","3164975167","CH","CHE","SWITZERLAND" -"3164975168","3164975231","GB","GBR","UNITED KINGDOM" -"3164975232","3164975299","IT","ITA","ITALY" -"3164975300","3164975307","ES","ESP","SPAIN" -"3164975308","3164975311","GB","GBR","UNITED KINGDOM" -"3164975312","3164975343","ES","ESP","SPAIN" -"3164975344","3164975359","NL","NLD","NETHERLANDS" -"3164975360","3164975615","ES","ESP","SPAIN" -"3164975616","3164976127","GB","GBR","UNITED KINGDOM" -"3164976128","3164976639","IT","ITA","ITALY" -"3164976640","3164976783","FR","FRA","FRANCE" -"3164976784","3164976799","ES","ESP","SPAIN" -"3164976800","3164976815","DE","DEU","GERMANY" -"3164976816","3164976831","GB","GBR","UNITED KINGDOM" -"3164976832","3164976835","IT","ITA","ITALY" -"3164976836","3164976839","ES","ESP","SPAIN" -"3164976840","3164976847","FR","FRA","FRANCE" -"3164976848","3164976863","CH","CHE","SWITZERLAND" -"3164976864","3164976895","CZ","CZE","CZECH REPUBLIC" -"3164976896","3164977151","FR","FRA","FRANCE" -"3164977152","3164977215","PL","POL","POLAND" -"3164977216","3164977247","DE","DEU","GERMANY" -"3164977248","3164977279","ES","ESP","SPAIN" -"3164977280","3164977407","FR","FRA","FRANCE" -"3164977408","3164977663","PL","POL","POLAND" -"3164977664","3164977695","GB","GBR","UNITED KINGDOM" -"3164977696","3164977727","IT","ITA","ITALY" -"3164977728","3164977743","LT","LTU","LITHUANIA" -"3164977744","3164977759","PT","PRT","PORTUGAL" -"3164977760","3164977775","NL","NLD","NETHERLANDS" -"3164977776","3164977791","PL","POL","POLAND" -"3164977792","3164977807","FR","FRA","FRANCE" -"3164977808","3164977823","NL","NLD","NETHERLANDS" -"3164977824","3164977839","GB","GBR","UNITED KINGDOM" -"3164977840","3164977883","FR","FRA","FRANCE" -"3164977884","3164977887","GB","GBR","UNITED KINGDOM" -"3164977888","3164977903","IT","ITA","ITALY" -"3164977904","3164977919","NL","NLD","NETHERLANDS" -"3164977920","3164978047","DE","DEU","GERMANY" -"3164978048","3164978067","FR","FRA","FRANCE" -"3164978068","3164978079","ES","ESP","SPAIN" -"3164978080","3164978111","IT","ITA","ITALY" -"3164978112","3164978143","FR","FRA","FRANCE" -"3164978144","3164978147","DE","DEU","GERMANY" -"3164978148","3164978151","ES","ESP","SPAIN" -"3164978152","3164978155","GB","GBR","UNITED KINGDOM" -"3164978156","3164978159","DE","DEU","GERMANY" -"3164978160","3164978175","FR","FRA","FRANCE" -"3164978176","3164978431","IT","ITA","ITALY" -"3164978432","3164978447","FR","FRA","FRANCE" -"3164978448","3164978463","PT","PRT","PORTUGAL" -"3164978464","3164978495","DE","DEU","GERMANY" -"3164978496","3164978511","IT","ITA","ITALY" -"3164978512","3164978527","ES","ESP","SPAIN" -"3164978528","3164978543","FR","FRA","FRANCE" -"3164978544","3164978559","PT","PRT","PORTUGAL" -"3164978560","3164978575","GB","GBR","UNITED KINGDOM" -"3164978576","3164978591","ES","ESP","SPAIN" -"3164978592","3164978607","FR","FRA","FRANCE" -"3164978608","3164978623","CZ","CZE","CZECH REPUBLIC" -"3164978624","3164978687","FR","FRA","FRANCE" -"3164978688","3164978943","PL","POL","POLAND" -"3164978944","3164978951","PT","PRT","PORTUGAL" -"3164978952","3164978955","PL","POL","POLAND" -"3164978956","3164978959","GB","GBR","UNITED KINGDOM" -"3164978960","3164978975","FR","FRA","FRANCE" -"3164978976","3164978991","ES","ESP","SPAIN" -"3164978992","3164979007","FR","FRA","FRANCE" -"3164979008","3164979023","ES","ESP","SPAIN" -"3164979024","3164979039","CH","CHE","SWITZERLAND" -"3164979040","3164979071","PT","PRT","PORTUGAL" -"3164979072","3164979103","ES","ESP","SPAIN" -"3164979104","3164979111","DE","DEU","GERMANY" -"3164979112","3164979119","PL","POL","POLAND" -"3164979120","3164979135","NL","NLD","NETHERLANDS" -"3164979136","3164979151","DE","DEU","GERMANY" -"3164979152","3164979167","FR","FRA","FRANCE" -"3164979168","3164979175","DE","DEU","GERMANY" -"3164979176","3164979183","FR","FRA","FRANCE" -"3164979184","3164979199","DE","DEU","GERMANY" -"3164979200","3164995583","FR","FRA","FRANCE" -"3164995584","3165061119","RU","RUS","RUSSIAN FEDERATION" -"3165061120","3165126655","SK","SVK","SLOVAKIA" -"3165126656","3165192191","RU","RUS","RUSSIAN FEDERATION" -"3165192192","3165257727","GE","GEO","GEORGIA" -"3165257728","3165323263","RO","ROM","ROMANIA" -"3165323264","3165388799","ES","ESP","SPAIN" -"3165388800","3165519871","RO","ROM","ROMANIA" -"3165519872","3165585407","DE","DEU","GERMANY" -"3165585408","3165650943","CZ","CZE","CZECH REPUBLIC" -"3165650944","3166175231","DK","DNK","DENMARK" -"3166175232","3166306303","CH","CHE","SWITZERLAND" -"3166306304","3166437375","RU","RUS","RUSSIAN FEDERATION" -"3166437376","3166568447","BE","BEL","BELGIUM" -"3166699520","3166961663","DE","DEU","GERMANY" -"3167223808","3167748095","NL","NLD","NETHERLANDS" -"3167748096","3167940095","RO","ROM","ROMANIA" -"3167940096","3167940351","CY","CYP","CYPRUS" -"3167940352","3167952895","RO","ROM","ROMANIA" -"3167952896","3168002047","GB","GBR","UNITED KINGDOM" -"3168002048","3168272383","RO","ROM","ROMANIA" -"3168272384","3168534527","IT","ITA","ITALY" -"3168534528","3168796671","GB","GBR","UNITED KINGDOM" -"3168796672","3168829439","FR","FRA","FRANCE" -"3168829440","3168862207","RO","ROM","ROMANIA" -"3168862208","3168894975","RU","RUS","RUSSIAN FEDERATION" -"3168894976","3168927743","PS","PSE","PALESTINIAN TERRITORY, OCCUPIED" -"3168927744","3169058815","RU","RUS","RUSSIAN FEDERATION" -"3169058816","3169091583","DK","DNK","DENMARK" -"3169091584","3169124351","IT","ITA","ITALY" -"3169124352","3169157119","RO","ROM","ROMANIA" -"3169189888","3169222655","UA","UKR","UKRAINE" -"3169222656","3169255423","SI","SVN","SLOVENIA" -"3169255424","3169264895","KW","KWT","KUWAIT" -"3169264896","3169264927","OM","OMN","OMAN" -"3169264928","3169265167","KW","KWT","KUWAIT" -"3169265168","3169265175","IQ","IRQ","IRAQ" -"3169265176","3169265183","SA","SAU","SAUDI ARABIA" -"3169265184","3169265223","KW","KWT","KUWAIT" -"3169265224","3169265231","IQ","IRQ","IRAQ" -"3169265232","3169265295","SA","SAU","SAUDI ARABIA" -"3169265296","3169265303","SD","SDN","SUDAN" -"3169265304","3169265311","SA","SAU","SAUDI ARABIA" -"3169265312","3169265567","KW","KWT","KUWAIT" -"3169265568","3169265583","IQ","IRQ","IRAQ" -"3169265584","3169271807","KW","KWT","KUWAIT" -"3169271808","3169275903","SY","SYR","SYRIAN ARAB REPUBLIC" -"3169275904","3169278991","KW","KWT","KUWAIT" -"3169278992","3169279007","SA","SAU","SAUDI ARABIA" -"3169279008","3169279231","KW","KWT","KUWAIT" -"3169279232","3169279239","IQ","IRQ","IRAQ" -"3169279240","3169279255","SA","SAU","SAUDI ARABIA" -"3169279256","3169279263","KW","KWT","KUWAIT" -"3169279264","3169279295","SA","SAU","SAUDI ARABIA" -"3169279296","3169279303","KW","KWT","KUWAIT" -"3169279304","3169279311","SA","SAU","SAUDI ARABIA" -"3169279312","3169279319","SD","SDN","SUDAN" -"3169279320","3169279743","KW","KWT","KUWAIT" -"3169279744","3169279759","IQ","IRQ","IRAQ" -"3169279760","3169281023","KW","KWT","KUWAIT" -"3169281024","3169281279","US","USA","UNITED STATES" -"3169281280","3169288191","KW","KWT","KUWAIT" -"3169288192","3169320959","UA","UKR","UKRAINE" -"3169845248","3169965823","RO","ROM","ROMANIA" -"3169965824","3169966079","GB","GBR","UNITED KINGDOM" -"3169966080","3169967871","RO","ROM","ROMANIA" -"3169967872","3169968127","CY","CYP","CYPRUS" -"3169968128","3169976319","RO","ROM","ROMANIA" -"3169976320","3170111487","RU","RUS","RUSSIAN FEDERATION" -"3170111488","3170115583","MD","MDA","REPUBLIC OF MOLDOVA" -"3170115584","3170119679","RU","RUS","RUSSIAN FEDERATION" -"3170119680","3170123775","CZ","CZE","CZECH REPUBLIC" -"3170123776","3170127871","DK","DNK","DENMARK" -"3170127872","3170131967","ES","ESP","SPAIN" -"3170131968","3170136063","JO","JOR","JORDAN" -"3170238464","3170246655","DE","DEU","GERMANY" -"3170246656","3170254847","RS","SRB","SERBIA" -"3170254848","3170263039","BA","BIH","BOSNIA AND HERZEGOVINA" -"3170263040","3170271231","CZ","CZE","CZECH REPUBLIC" -"3170271232","3170279423","PL","POL","POLAND" -"3170279424","3170287615","RU","RUS","RUSSIAN FEDERATION" -"3170295808","3170303999","RU","RUS","RUSSIAN FEDERATION" -"3170304000","3170312191","SY","SYR","SYRIAN ARAB REPUBLIC" -"3170312192","3170320383","RU","RUS","RUSSIAN FEDERATION" -"3170320384","3170328575","JO","JOR","JORDAN" -"3170369536","3170500607","SA","SAU","SAUDI ARABIA" -"3170893824","3179282431","BR","BRA","BRAZIL" -"3179282432","3184269567","MX","MEX","MEXICO" -"3184269568","3184269575","US","USA","UNITED STATES" -"3184269576","3187671039","MX","MEX","MEXICO" -"3187671040","3187687423","CO","COL","COLOMBIA" -"3187687424","3187695615","DO","DOM","DOMINICAN REPUBLIC" -"3187695616","3187703807","AR","ARG","ARGENTINA" -"3187703808","3187711999","UY","URY","URUGUAY" -"3187712000","3187716095","AR","ARG","ARGENTINA" -"3187720192","3187728383","GT","GTM","GUATEMALA" -"3187736576","3187752959","AR","ARG","ARGENTINA" -"3187752960","3187761151","CO","COL","COLOMBIA" -"3187769344","3187802111","CO","COL","COLOMBIA" -"3187802112","3187818495","AR","ARG","ARGENTINA" -"3187818496","3187820543","PY","PRY","PARAGUAY" -"3187822592","3187824639","AR","ARG","ARGENTINA" -"3187824640","3187826687","CL","CHL","CHILE" -"3187826688","3187834879","AR","ARG","ARGENTINA" -"3187834880","3187851263","AN","ANT","NETHERLANDS ANTILLES" -"3187851264","3187855359","PY","PRY","PARAGUAY" -"3187859456","3187863551","PA","PAN","PANAMA" -"3187867648","3187908607","AR","ARG","ARGENTINA" -"3187908608","3187910655","CO","COL","COLOMBIA" -"3187910656","3187914751","CL","CHL","CHILE" -"3187914752","3187916799","BO","BOL","BOLIVIA" -"3187916800","3187933183","CO","COL","COLOMBIA" -"3187933184","3187933311","HN","HND","HONDURAS" -"3187933312","3187934783","GT","GTM","GUATEMALA" -"3187934784","3187934815","HN","HND","HONDURAS" -"3187934816","3187934823","GT","GTM","GUATEMALA" -"3187934824","3187934847","HN","HND","HONDURAS" -"3187934848","3187934991","GT","GTM","GUATEMALA" -"3187934992","3187935023","HN","HND","HONDURAS" -"3187935024","3187935027","GT","GTM","GUATEMALA" -"3187935028","3187935039","HN","HND","HONDURAS" -"3187935040","3187935047","GT","GTM","GUATEMALA" -"3187935048","3187935079","HN","HND","HONDURAS" -"3187935080","3187935087","GT","GTM","GUATEMALA" -"3187935088","3187935111","HN","HND","HONDURAS" -"3187935112","3187935151","GT","GTM","GUATEMALA" -"3187935152","3187935159","HN","HND","HONDURAS" -"3187935160","3187935167","GT","GTM","GUATEMALA" -"3187935168","3187935239","HN","HND","HONDURAS" -"3187935240","3187935247","GT","GTM","GUATEMALA" -"3187935248","3187935287","HN","HND","HONDURAS" -"3187935288","3187935291","GT","GTM","GUATEMALA" -"3187935292","3187935339","HN","HND","HONDURAS" -"3187935340","3187935351","GT","GTM","GUATEMALA" -"3187935352","3187935391","HN","HND","HONDURAS" -"3187935392","3187935395","GT","GTM","GUATEMALA" -"3187935396","3187935415","HN","HND","HONDURAS" -"3187935416","3187935423","GT","GTM","GUATEMALA" -"3187935424","3187935431","HN","HND","HONDURAS" -"3187935432","3187935439","GT","GTM","GUATEMALA" -"3187935440","3187935463","HN","HND","HONDURAS" -"3187935464","3187935467","GT","GTM","GUATEMALA" -"3187935468","3187935511","HN","HND","HONDURAS" -"3187935512","3187935519","GT","GTM","GUATEMALA" -"3187935520","3187935711","HN","HND","HONDURAS" -"3187935712","3187935735","GT","GTM","GUATEMALA" -"3187935736","3187935743","HN","HND","HONDURAS" -"3187935744","3187936007","GT","GTM","GUATEMALA" -"3187936008","3187936011","HN","HND","HONDURAS" -"3187936012","3187936015","GT","GTM","GUATEMALA" -"3187936016","3187936027","HN","HND","HONDURAS" -"3187936028","3187936039","GT","GTM","GUATEMALA" -"3187936040","3187936067","HN","HND","HONDURAS" -"3187936068","3187936071","GT","GTM","GUATEMALA" -"3187936072","3187936079","HN","HND","HONDURAS" -"3187936080","3187936095","GT","GTM","GUATEMALA" -"3187936096","3187936115","HN","HND","HONDURAS" -"3187936116","3187936119","GT","GTM","GUATEMALA" -"3187936120","3187936127","HN","HND","HONDURAS" -"3187936128","3187936131","GT","GTM","GUATEMALA" -"3187936132","3187936135","HN","HND","HONDURAS" -"3187936136","3187936151","GT","GTM","GUATEMALA" -"3187936152","3187936167","HN","HND","HONDURAS" -"3187936168","3187936183","GT","GTM","GUATEMALA" -"3187936184","3187936191","HN","HND","HONDURAS" -"3187936192","3187936199","GT","GTM","GUATEMALA" -"3187936200","3187936207","HN","HND","HONDURAS" -"3187936208","3187936223","GT","GTM","GUATEMALA" -"3187936224","3187936239","HN","HND","HONDURAS" -"3187936240","3187936519","GT","GTM","GUATEMALA" -"3187936520","3187936527","HN","HND","HONDURAS" -"3187936528","3187936583","GT","GTM","GUATEMALA" -"3187936584","3187936599","HN","HND","HONDURAS" -"3187936600","3187936607","GT","GTM","GUATEMALA" -"3187936608","3187936631","HN","HND","HONDURAS" -"3187936632","3187936639","GT","GTM","GUATEMALA" -"3187936640","3187936655","HN","HND","HONDURAS" -"3187936656","3187936663","GT","GTM","GUATEMALA" -"3187936664","3187936695","HN","HND","HONDURAS" -"3187936696","3187936711","GT","GTM","GUATEMALA" -"3187936712","3187936735","HN","HND","HONDURAS" -"3187936736","3187937031","GT","GTM","GUATEMALA" -"3187937032","3187937035","HN","HND","HONDURAS" -"3187937036","3187937071","GT","GTM","GUATEMALA" -"3187937072","3187937079","HN","HND","HONDURAS" -"3187937080","3187937103","GT","GTM","GUATEMALA" -"3187937104","3187937119","HN","HND","HONDURAS" -"3187937120","3187937135","GT","GTM","GUATEMALA" -"3187937136","3187937139","HN","HND","HONDURAS" -"3187937140","3187937143","GT","GTM","GUATEMALA" -"3187937144","3187937187","HN","HND","HONDURAS" -"3187937188","3187937207","GT","GTM","GUATEMALA" -"3187937208","3187937215","HN","HND","HONDURAS" -"3187937216","3187937235","GT","GTM","GUATEMALA" -"3187937236","3187937263","HN","HND","HONDURAS" -"3187937264","3187937275","GT","GTM","GUATEMALA" -"3187937276","3187937279","HN","HND","HONDURAS" -"3187937280","3187937287","GT","GTM","GUATEMALA" -"3187937288","3187937375","HN","HND","HONDURAS" -"3187937376","3187937383","GT","GTM","GUATEMALA" -"3187937384","3187937391","HN","HND","HONDURAS" -"3187937392","3187937407","GT","GTM","GUATEMALA" -"3187937408","3187937487","HN","HND","HONDURAS" -"3187937488","3187937503","GT","GTM","GUATEMALA" -"3187937504","3187937527","HN","HND","HONDURAS" -"3187937528","3187937791","GT","GTM","GUATEMALA" -"3187937792","3187937911","HN","HND","HONDURAS" -"3187937912","3187937919","GT","GTM","GUATEMALA" -"3187937920","3187938047","HN","HND","HONDURAS" -"3187938048","3187939071","GT","GTM","GUATEMALA" -"3187939072","3187939127","HN","HND","HONDURAS" -"3187939128","3187939135","GT","GTM","GUATEMALA" -"3187939136","3187939139","HN","HND","HONDURAS" -"3187939140","3187939143","GT","GTM","GUATEMALA" -"3187939144","3187939167","HN","HND","HONDURAS" -"3187939168","3187939175","GT","GTM","GUATEMALA" -"3187939176","3187939207","HN","HND","HONDURAS" -"3187939208","3187939215","GT","GTM","GUATEMALA" -"3187939216","3187939231","HN","HND","HONDURAS" -"3187939232","3187939239","GT","GTM","GUATEMALA" -"3187939240","3187939255","HN","HND","HONDURAS" -"3187939256","3187939271","GT","GTM","GUATEMALA" -"3187939272","3187939327","HN","HND","HONDURAS" -"3187939328","3187939839","GT","GTM","GUATEMALA" -"3187939840","3187939855","HN","HND","HONDURAS" -"3187939856","3187939863","GT","GTM","GUATEMALA" -"3187939864","3187939879","HN","HND","HONDURAS" -"3187939880","3187939887","GT","GTM","GUATEMALA" -"3187939888","3187939927","HN","HND","HONDURAS" -"3187939928","3187939939","GT","GTM","GUATEMALA" -"3187939940","3187939967","HN","HND","HONDURAS" -"3187939968","3187939975","GT","GTM","GUATEMALA" -"3187939976","3187940071","HN","HND","HONDURAS" -"3187940072","3187940075","GT","GTM","GUATEMALA" -"3187940076","3187940211","HN","HND","HONDURAS" -"3187940212","3187940215","GT","GTM","GUATEMALA" -"3187940216","3187940311","HN","HND","HONDURAS" -"3187940312","3187940319","GT","GTM","GUATEMALA" -"3187940320","3187940339","HN","HND","HONDURAS" -"3187940340","3187940343","GT","GTM","GUATEMALA" -"3187940344","3187940559","HN","HND","HONDURAS" -"3187940560","3187940567","GT","GTM","GUATEMALA" -"3187940568","3187940639","HN","HND","HONDURAS" -"3187940640","3187940647","GT","GTM","GUATEMALA" -"3187940648","3187940691","HN","HND","HONDURAS" -"3187940692","3187940695","GT","GTM","GUATEMALA" -"3187940696","3187940719","HN","HND","HONDURAS" -"3187940720","3187940723","GT","GTM","GUATEMALA" -"3187940724","3187940727","HN","HND","HONDURAS" -"3187940728","3187940735","GT","GTM","GUATEMALA" -"3187940736","3187940791","HN","HND","HONDURAS" -"3187940792","3187940795","GT","GTM","GUATEMALA" -"3187940796","3187940847","HN","HND","HONDURAS" -"3187940848","3187940851","GT","GTM","GUATEMALA" -"3187940852","3187940935","HN","HND","HONDURAS" -"3187940936","3187940947","GT","GTM","GUATEMALA" -"3187940948","3187940975","HN","HND","HONDURAS" -"3187940976","3187940983","GT","GTM","GUATEMALA" -"3187940984","3187940991","HN","HND","HONDURAS" -"3187940992","3187940999","GT","GTM","GUATEMALA" -"3187941000","3187941003","HN","HND","HONDURAS" -"3187941004","3187941007","GT","GTM","GUATEMALA" -"3187941008","3187941063","HN","HND","HONDURAS" -"3187941064","3187941071","GT","GTM","GUATEMALA" -"3187941072","3187941079","HN","HND","HONDURAS" -"3187941080","3187941087","GT","GTM","GUATEMALA" -"3187941088","3187941131","HN","HND","HONDURAS" -"3187941132","3187941139","GT","GTM","GUATEMALA" -"3187941140","3187941191","HN","HND","HONDURAS" -"3187941192","3187941199","GT","GTM","GUATEMALA" -"3187941200","3187941203","HN","HND","HONDURAS" -"3187941204","3187941207","GT","GTM","GUATEMALA" -"3187941208","3187941375","HN","HND","HONDURAS" -"3187941376","3187941383","GT","GTM","GUATEMALA" -"3187941384","3187941399","HN","HND","HONDURAS" -"3187941400","3187941407","GT","GTM","GUATEMALA" -"3187941408","3187941415","HN","HND","HONDURAS" -"3187941416","3187941439","GT","GTM","GUATEMALA" -"3187941440","3187941463","HN","HND","HONDURAS" -"3187941464","3187941471","GT","GTM","GUATEMALA" -"3187941472","3187941503","HN","HND","HONDURAS" -"3187941504","3187941511","GT","GTM","GUATEMALA" -"3187941512","3187941527","HN","HND","HONDURAS" -"3187941528","3187941531","GT","GTM","GUATEMALA" -"3187941532","3187941591","HN","HND","HONDURAS" -"3187941592","3187941599","GT","GTM","GUATEMALA" -"3187941600","3187941619","HN","HND","HONDURAS" -"3187941620","3187941631","GT","GTM","GUATEMALA" -"3187941632","3187941659","HN","HND","HONDURAS" -"3187941660","3187941667","GT","GTM","GUATEMALA" -"3187941668","3187941691","HN","HND","HONDURAS" -"3187941692","3187941695","GT","GTM","GUATEMALA" -"3187941696","3187941715","HN","HND","HONDURAS" -"3187941716","3187941719","GT","GTM","GUATEMALA" -"3187941720","3187941727","HN","HND","HONDURAS" -"3187941728","3187941739","GT","GTM","GUATEMALA" -"3187941740","3187941743","HN","HND","HONDURAS" -"3187941744","3187941755","GT","GTM","GUATEMALA" -"3187941756","3187941767","HN","HND","HONDURAS" -"3187941768","3187941787","GT","GTM","GUATEMALA" -"3187941788","3187941791","HN","HND","HONDURAS" -"3187941792","3187941799","GT","GTM","GUATEMALA" -"3187941800","3187941807","HN","HND","HONDURAS" -"3187941808","3187941815","GT","GTM","GUATEMALA" -"3187941816","3187941831","HN","HND","HONDURAS" -"3187941832","3187941839","GT","GTM","GUATEMALA" -"3187941840","3187941847","HN","HND","HONDURAS" -"3187941848","3187941855","GT","GTM","GUATEMALA" -"3187941856","3187941863","HN","HND","HONDURAS" -"3187941864","3187941879","GT","GTM","GUATEMALA" -"3187941880","3187941895","HN","HND","HONDURAS" -"3187941896","3187941903","GT","GTM","GUATEMALA" -"3187941904","3187941919","HN","HND","HONDURAS" -"3187941920","3187941927","GT","GTM","GUATEMALA" -"3187941928","3187941931","HN","HND","HONDURAS" -"3187941932","3187941935","GT","GTM","GUATEMALA" -"3187941936","3187941959","HN","HND","HONDURAS" -"3187941960","3187941963","GT","GTM","GUATEMALA" -"3187941964","3187941967","HN","HND","HONDURAS" -"3187941968","3187941975","GT","GTM","GUATEMALA" -"3187941976","3187942023","HN","HND","HONDURAS" -"3187942024","3187942031","GT","GTM","GUATEMALA" -"3187942032","3187942039","HN","HND","HONDURAS" -"3187942040","3187942063","GT","GTM","GUATEMALA" -"3187942064","3187942087","HN","HND","HONDURAS" -"3187942088","3187942091","GT","GTM","GUATEMALA" -"3187942092","3187942111","HN","HND","HONDURAS" -"3187942112","3187942123","GT","GTM","GUATEMALA" -"3187942124","3187942127","HN","HND","HONDURAS" -"3187942128","3187942143","GT","GTM","GUATEMALA" -"3187942144","3187942147","HN","HND","HONDURAS" -"3187942148","3187942151","GT","GTM","GUATEMALA" -"3187942152","3187942163","HN","HND","HONDURAS" -"3187942164","3187942179","GT","GTM","GUATEMALA" -"3187942180","3187942183","HN","HND","HONDURAS" -"3187942184","3187942195","GT","GTM","GUATEMALA" -"3187942196","3187942207","HN","HND","HONDURAS" -"3187942208","3187942223","GT","GTM","GUATEMALA" -"3187942224","3187942231","HN","HND","HONDURAS" -"3187942232","3187942235","GT","GTM","GUATEMALA" -"3187942236","3187942239","HN","HND","HONDURAS" -"3187942240","3187942247","GT","GTM","GUATEMALA" -"3187942248","3187942287","HN","HND","HONDURAS" -"3187942288","3187942303","GT","GTM","GUATEMALA" -"3187942304","3187942327","HN","HND","HONDURAS" -"3187942328","3187942335","GT","GTM","GUATEMALA" -"3187942336","3187942359","HN","HND","HONDURAS" -"3187942360","3187942391","GT","GTM","GUATEMALA" -"3187942392","3187942403","HN","HND","HONDURAS" -"3187942404","3187942407","GT","GTM","GUATEMALA" -"3187942408","3187942415","HN","HND","HONDURAS" -"3187942416","3187942423","GT","GTM","GUATEMALA" -"3187942424","3187942439","HN","HND","HONDURAS" -"3187942440","3187942447","GT","GTM","GUATEMALA" -"3187942448","3187942495","HN","HND","HONDURAS" -"3187942496","3187942503","GT","GTM","GUATEMALA" -"3187942504","3187942527","HN","HND","HONDURAS" -"3187942528","3187942551","GT","GTM","GUATEMALA" -"3187942552","3187942559","HN","HND","HONDURAS" -"3187942560","3187942563","GT","GTM","GUATEMALA" -"3187942564","3187942579","HN","HND","HONDURAS" -"3187942580","3187942591","GT","GTM","GUATEMALA" -"3187942592","3187942599","HN","HND","HONDURAS" -"3187942600","3187942623","GT","GTM","GUATEMALA" -"3187942624","3187942627","HN","HND","HONDURAS" -"3187942628","3187942647","GT","GTM","GUATEMALA" -"3187942648","3187942719","HN","HND","HONDURAS" -"3187942720","3187942727","GT","GTM","GUATEMALA" -"3187942728","3187942767","HN","HND","HONDURAS" -"3187942768","3187942775","GT","GTM","GUATEMALA" -"3187942776","3187942831","HN","HND","HONDURAS" -"3187942832","3187942839","GT","GTM","GUATEMALA" -"3187942840","3187942867","HN","HND","HONDURAS" -"3187942868","3187942871","GT","GTM","GUATEMALA" -"3187942872","3187942875","HN","HND","HONDURAS" -"3187942876","3187942879","GT","GTM","GUATEMALA" -"3187942880","3187942935","HN","HND","HONDURAS" -"3187942936","3187942943","GT","GTM","GUATEMALA" -"3187942944","3187942959","HN","HND","HONDURAS" -"3187942960","3187942975","GT","GTM","GUATEMALA" -"3187942976","3187943015","HN","HND","HONDURAS" -"3187943016","3187943023","GT","GTM","GUATEMALA" -"3187943024","3187943043","HN","HND","HONDURAS" -"3187943044","3187943047","GT","GTM","GUATEMALA" -"3187943048","3187943087","HN","HND","HONDURAS" -"3187943088","3187943091","GT","GTM","GUATEMALA" -"3187943092","3187943095","HN","HND","HONDURAS" -"3187943096","3187943103","GT","GTM","GUATEMALA" -"3187943104","3187943271","HN","HND","HONDURAS" -"3187943272","3187943279","GT","GTM","GUATEMALA" -"3187943280","3187943431","HN","HND","HONDURAS" -"3187943432","3187943439","GT","GTM","GUATEMALA" -"3187943440","3187943455","HN","HND","HONDURAS" -"3187943456","3187943475","GT","GTM","GUATEMALA" -"3187943476","3187943727","HN","HND","HONDURAS" -"3187943728","3187943743","GT","GTM","GUATEMALA" -"3187943744","3187943791","HN","HND","HONDURAS" -"3187943792","3187943807","GT","GTM","GUATEMALA" -"3187943808","3187943879","HN","HND","HONDURAS" -"3187943880","3187943887","GT","GTM","GUATEMALA" -"3187943888","3187943911","HN","HND","HONDURAS" -"3187943912","3187943983","GT","GTM","GUATEMALA" -"3187943984","3187943991","HN","HND","HONDURAS" -"3187943992","3187944015","GT","GTM","GUATEMALA" -"3187944016","3187944031","HN","HND","HONDURAS" -"3187944032","3187944039","GT","GTM","GUATEMALA" -"3187944040","3187944067","HN","HND","HONDURAS" -"3187944068","3187944071","GT","GTM","GUATEMALA" -"3187944072","3187944075","HN","HND","HONDURAS" -"3187944076","3187944095","GT","GTM","GUATEMALA" -"3187944096","3187944103","HN","HND","HONDURAS" -"3187944104","3187944107","GT","GTM","GUATEMALA" -"3187944108","3187944111","HN","HND","HONDURAS" -"3187944112","3187944119","GT","GTM","GUATEMALA" -"3187944120","3187944127","HN","HND","HONDURAS" -"3187944128","3187944131","GT","GTM","GUATEMALA" -"3187944132","3187944135","HN","HND","HONDURAS" -"3187944136","3187944139","GT","GTM","GUATEMALA" -"3187944140","3187944147","HN","HND","HONDURAS" -"3187944148","3187944151","GT","GTM","GUATEMALA" -"3187944152","3187944159","HN","HND","HONDURAS" -"3187944160","3187944175","GT","GTM","GUATEMALA" -"3187944176","3187944183","HN","HND","HONDURAS" -"3187944184","3187944187","GT","GTM","GUATEMALA" -"3187944188","3187944207","HN","HND","HONDURAS" -"3187944208","3187944211","GT","GTM","GUATEMALA" -"3187944212","3187944255","HN","HND","HONDURAS" -"3187944256","3187944263","GT","GTM","GUATEMALA" -"3187944264","3187944271","HN","HND","HONDURAS" -"3187944272","3187944279","GT","GTM","GUATEMALA" -"3187944280","3187944291","HN","HND","HONDURAS" -"3187944292","3187944307","GT","GTM","GUATEMALA" -"3187944308","3187944311","HN","HND","HONDURAS" -"3187944312","3187944319","GT","GTM","GUATEMALA" -"3187944320","3187944343","HN","HND","HONDURAS" -"3187944344","3187944351","GT","GTM","GUATEMALA" -"3187944352","3187944359","HN","HND","HONDURAS" -"3187944360","3187944367","GT","GTM","GUATEMALA" -"3187944368","3187944399","HN","HND","HONDURAS" -"3187944400","3187944407","GT","GTM","GUATEMALA" -"3187944408","3187944415","HN","HND","HONDURAS" -"3187944416","3187944423","GT","GTM","GUATEMALA" -"3187944424","3187944447","HN","HND","HONDURAS" -"3187944448","3187944463","GT","GTM","GUATEMALA" -"3187944464","3187944479","HN","HND","HONDURAS" -"3187944480","3187944487","GT","GTM","GUATEMALA" -"3187944488","3187944647","HN","HND","HONDURAS" -"3187944648","3187944651","GT","GTM","GUATEMALA" -"3187944652","3187944663","HN","HND","HONDURAS" -"3187944664","3187944671","GT","GTM","GUATEMALA" -"3187944672","3187944695","HN","HND","HONDURAS" -"3187944696","3187944719","GT","GTM","GUATEMALA" -"3187944720","3187944727","HN","HND","HONDURAS" -"3187944728","3187944743","GT","GTM","GUATEMALA" -"3187944744","3187944759","HN","HND","HONDURAS" -"3187944760","3187944799","GT","GTM","GUATEMALA" -"3187944800","3187944803","HN","HND","HONDURAS" -"3187944804","3187944807","GT","GTM","GUATEMALA" -"3187944808","3187944811","HN","HND","HONDURAS" -"3187944812","3187944819","GT","GTM","GUATEMALA" -"3187944820","3187944823","HN","HND","HONDURAS" -"3187944824","3187944831","GT","GTM","GUATEMALA" -"3187944832","3187944835","HN","HND","HONDURAS" -"3187944836","3187944839","GT","GTM","GUATEMALA" -"3187944840","3187944843","HN","HND","HONDURAS" -"3187944844","3187944851","GT","GTM","GUATEMALA" -"3187944852","3187944863","HN","HND","HONDURAS" -"3187944864","3187944871","GT","GTM","GUATEMALA" -"3187944872","3187944883","HN","HND","HONDURAS" -"3187944884","3187944915","GT","GTM","GUATEMALA" -"3187944916","3187944923","HN","HND","HONDURAS" -"3187944924","3187944927","GT","GTM","GUATEMALA" -"3187944928","3187944931","HN","HND","HONDURAS" -"3187944932","3187944935","GT","GTM","GUATEMALA" -"3187944936","3187944939","HN","HND","HONDURAS" -"3187944940","3187944959","GT","GTM","GUATEMALA" -"3187944960","3187945063","HN","HND","HONDURAS" -"3187945064","3187945071","GT","GTM","GUATEMALA" -"3187945072","3187945087","HN","HND","HONDURAS" -"3187945088","3187945095","GT","GTM","GUATEMALA" -"3187945096","3187945143","HN","HND","HONDURAS" -"3187945144","3187945151","GT","GTM","GUATEMALA" -"3187945152","3187945167","HN","HND","HONDURAS" -"3187945168","3187945175","GT","GTM","GUATEMALA" -"3187945176","3187945471","HN","HND","HONDURAS" -"3187945472","3187945735","GT","GTM","GUATEMALA" -"3187945736","3187945743","HN","HND","HONDURAS" -"3187945744","3187945751","GT","GTM","GUATEMALA" -"3187945752","3187945759","HN","HND","HONDURAS" -"3187945760","3187945767","GT","GTM","GUATEMALA" -"3187945768","3187945775","HN","HND","HONDURAS" -"3187945776","3187945783","GT","GTM","GUATEMALA" -"3187945784","3187945799","HN","HND","HONDURAS" -"3187945800","3187945831","GT","GTM","GUATEMALA" -"3187945832","3187945855","HN","HND","HONDURAS" -"3187945856","3187945863","GT","GTM","GUATEMALA" -"3187945864","3187945871","HN","HND","HONDURAS" -"3187945872","3187945875","GT","GTM","GUATEMALA" -"3187945876","3187945879","HN","HND","HONDURAS" -"3187945880","3187945887","GT","GTM","GUATEMALA" -"3187945888","3187945895","HN","HND","HONDURAS" -"3187945896","3187945911","GT","GTM","GUATEMALA" -"3187945912","3187945939","HN","HND","HONDURAS" -"3187945940","3187945951","GT","GTM","GUATEMALA" -"3187945952","3187945967","HN","HND","HONDURAS" -"3187945968","3187945971","GT","GTM","GUATEMALA" -"3187945972","3187946247","HN","HND","HONDURAS" -"3187946248","3187946255","GT","GTM","GUATEMALA" -"3187946256","3187946319","HN","HND","HONDURAS" -"3187946320","3187946343","GT","GTM","GUATEMALA" -"3187946344","3187946359","HN","HND","HONDURAS" -"3187946360","3187946375","GT","GTM","GUATEMALA" -"3187946376","3187946383","HN","HND","HONDURAS" -"3187946384","3187946455","GT","GTM","GUATEMALA" -"3187946456","3187946459","HN","HND","HONDURAS" -"3187946460","3187946463","GT","GTM","GUATEMALA" -"3187946464","3187946471","HN","HND","HONDURAS" -"3187946472","3187946475","GT","GTM","GUATEMALA" -"3187946476","3187946623","HN","HND","HONDURAS" -"3187946624","3187946631","GT","GTM","GUATEMALA" -"3187946632","3187946743","HN","HND","HONDURAS" -"3187946744","3187946751","GT","GTM","GUATEMALA" -"3187946752","3187946911","HN","HND","HONDURAS" -"3187946912","3187946919","GT","GTM","GUATEMALA" -"3187946920","3187946935","HN","HND","HONDURAS" -"3187946936","3187946939","GT","GTM","GUATEMALA" -"3187946940","3187946979","HN","HND","HONDURAS" -"3187946980","3187946983","GT","GTM","GUATEMALA" -"3187946984","3187946991","HN","HND","HONDURAS" -"3187946992","3187946999","GT","GTM","GUATEMALA" -"3187947000","3187947075","HN","HND","HONDURAS" -"3187947076","3187947095","GT","GTM","GUATEMALA" -"3187947096","3187947135","HN","HND","HONDURAS" -"3187947136","3187947151","GT","GTM","GUATEMALA" -"3187947152","3187947167","HN","HND","HONDURAS" -"3187947168","3187947175","GT","GTM","GUATEMALA" -"3187947176","3187947231","HN","HND","HONDURAS" -"3187947232","3187947239","GT","GTM","GUATEMALA" -"3187947240","3187947303","HN","HND","HONDURAS" -"3187947304","3187947315","GT","GTM","GUATEMALA" -"3187947316","3187947447","HN","HND","HONDURAS" -"3187947448","3187947455","GT","GTM","GUATEMALA" -"3187947456","3187947503","HN","HND","HONDURAS" -"3187947504","3187947511","GT","GTM","GUATEMALA" -"3187947512","3187947599","HN","HND","HONDURAS" -"3187947600","3187947607","GT","GTM","GUATEMALA" -"3187947608","3187947615","HN","HND","HONDURAS" -"3187947616","3187947623","GT","GTM","GUATEMALA" -"3187947624","3187947687","HN","HND","HONDURAS" -"3187947688","3187947695","GT","GTM","GUATEMALA" -"3187947696","3187947727","HN","HND","HONDURAS" -"3187947728","3187947735","GT","GTM","GUATEMALA" -"3187947736","3187947775","HN","HND","HONDURAS" -"3187947776","3187947791","GT","GTM","GUATEMALA" -"3187947792","3187947811","HN","HND","HONDURAS" -"3187947812","3187947815","GT","GTM","GUATEMALA" -"3187947816","3187947847","HN","HND","HONDURAS" -"3187947848","3187947855","GT","GTM","GUATEMALA" -"3187947856","3187947887","HN","HND","HONDURAS" -"3187947888","3187947895","GT","GTM","GUATEMALA" -"3187947896","3187947903","HN","HND","HONDURAS" -"3187947904","3187947911","GT","GTM","GUATEMALA" -"3187947912","3187947919","HN","HND","HONDURAS" -"3187947920","3187947935","GT","GTM","GUATEMALA" -"3187947936","3187947991","HN","HND","HONDURAS" -"3187947992","3187947999","GT","GTM","GUATEMALA" -"3187948000","3187948159","HN","HND","HONDURAS" -"3187948160","3187948287","GT","GTM","GUATEMALA" -"3187948288","3187948327","HN","HND","HONDURAS" -"3187948328","3187948331","GT","GTM","GUATEMALA" -"3187948332","3187948359","HN","HND","HONDURAS" -"3187948360","3187948367","GT","GTM","GUATEMALA" -"3187948368","3187948387","HN","HND","HONDURAS" -"3187948388","3187948391","GT","GTM","GUATEMALA" -"3187948392","3187948455","HN","HND","HONDURAS" -"3187948456","3187948463","GT","GTM","GUATEMALA" -"3187948464","3187948471","HN","HND","HONDURAS" -"3187948472","3187948479","GT","GTM","GUATEMALA" -"3187948480","3187948543","HN","HND","HONDURAS" -"3187948544","3187948799","GT","GTM","GUATEMALA" -"3187948800","3187948951","HN","HND","HONDURAS" -"3187948952","3187948959","GT","GTM","GUATEMALA" -"3187948960","3187949003","HN","HND","HONDURAS" -"3187949004","3187949007","GT","GTM","GUATEMALA" -"3187949008","3187949055","HN","HND","HONDURAS" -"3187949056","3187949059","GT","GTM","GUATEMALA" -"3187949060","3187949083","HN","HND","HONDURAS" -"3187949084","3187949087","GT","GTM","GUATEMALA" -"3187949088","3187949155","HN","HND","HONDURAS" -"3187949156","3187949159","GT","GTM","GUATEMALA" -"3187949160","3187949167","HN","HND","HONDURAS" -"3187949168","3187949175","GT","GTM","GUATEMALA" -"3187949176","3187949203","HN","HND","HONDURAS" -"3187949204","3187949207","GT","GTM","GUATEMALA" -"3187949208","3187949231","HN","HND","HONDURAS" -"3187949232","3187949239","GT","GTM","GUATEMALA" -"3187949240","3187949263","HN","HND","HONDURAS" -"3187949264","3187949287","GT","GTM","GUATEMALA" -"3187949288","3187949295","HN","HND","HONDURAS" -"3187949296","3187949311","GT","GTM","GUATEMALA" -"3187949312","3187949567","HN","HND","HONDURAS" -"3187949568","3187953663","AN","ANT","NETHERLANDS ANTILLES" -"3187957760","3187961855","CL","CHL","CHILE" -"3187965952","3187982335","AN","ANT","NETHERLANDS ANTILLES" -"3187982336","3187998719","CL","CHL","CHILE" -"3187998720","3188006911","AR","ARG","ARGENTINA" -"3188015104","3188031487","HN","HND","HONDURAS" -"3188031488","3188039679","SV","SLV","EL SALVADOR" -"3188047872","3188051967","CO","COL","COLOMBIA" -"3188056064","3188064255","PA","PAN","PANAMA" -"3188064256","3188080639","VE","VEN","VENEZUELA" -"3188080640","3188084735","CU","CUB","CUBA" -"3188088832","3188092927","AR","ARG","ARGENTINA" -"3188097024","3188105215","DO","DOM","DOMINICAN REPUBLIC" -"3188105216","3188113407","CO","COL","COLOMBIA" -"3188113408","3188117503","HN","HND","HONDURAS" -"3188121600","3188125695","TT","TTO","TRINIDAD AND TOBAGO" -"3188129792","3188146175","AR","ARG","ARGENTINA" -"3188146176","3188158463","CO","COL","COLOMBIA" -"3188162560","3188170751","CO","COL","COLOMBIA" -"3188170752","3188174847","CR","CRI","COSTA RICA" -"3188178944","3188187135","CR","CRI","COSTA RICA" -"3188187136","3188199423","AR","ARG","ARGENTINA" -"3188203520","3188207615","DO","DOM","DOMINICAN REPUBLIC" -"3188211712","3188228095","CL","CHL","CHILE" -"3188228096","3188236287","PE","PER","PERU" -"3188244480","3188252671","CO","COL","COLOMBIA" -"3188260864","3188264959","AR","ARG","ARGENTINA" -"3188269056","3188269311","VE","VEN","VENEZUELA" -"3188269312","3188269439","MX","MEX","MEXICO" -"3188269440","3188273151","VE","VEN","VENEZUELA" -"3188273152","3188275199","PA","PAN","PANAMA" -"3188275200","3188277247","CL","CHL","CHILE" -"3188277248","3188293631","CO","COL","COLOMBIA" -"3188293632","3188301823","VE","VEN","VENEZUELA" -"3188301824","3188310015","EC","ECU","ECUADOR" -"3188310016","3188326399","CO","COL","COLOMBIA" -"3188326400","3188359167","CR","CRI","COSTA RICA" -"3188359168","3188400127","EC","ECU","ECUADOR" -"3188400128","3188404223","AR","ARG","ARGENTINA" -"3188408320","3188416511","BO","BOL","BOLIVIA" -"3188416512","3188445183","AR","ARG","ARGENTINA" -"3188449280","3188453375","HN","HND","HONDURAS" -"3188457472","3188473855","EC","ECU","ECUADOR" -"3188473856","3188482047","PE","PER","PERU" -"3188482048","3188490239","AR","ARG","ARGENTINA" -"3188490240","3188498431","CO","COL","COLOMBIA" -"3188506624","3188506879","AR","ARG","ARGENTINA" -"3188506880","3188520959","US","USA","UNITED STATES" -"3188520960","3188523007","AR","ARG","ARGENTINA" -"3188523008","3188539391","CO","COL","COLOMBIA" -"3188539392","3188542207","CL","CHL","CHILE" -"3188542208","3188542463","US","USA","UNITED STATES" -"3188542464","3188543487","CL","CHL","CHILE" -"3188547584","3188551679","CO","COL","COLOMBIA" -"3188555776","3188559871","CL","CHL","CHILE" -"3188563968","3188572159","CL","CHL","CHILE" -"3188572160","3188576255","CO","COL","COLOMBIA" -"3188580352","3188596735","AR","ARG","ARGENTINA" -"3188621312","3188625407","GT","GTM","GUATEMALA" -"3188629504","3188637695","AR","ARG","ARGENTINA" -"3188637696","3188645887","PA","PAN","PANAMA" -"3188645888","3188662271","CO","COL","COLOMBIA" -"3188670464","3188674559","HN","HND","HONDURAS" -"3188678656","3188686847","AR","ARG","ARGENTINA" -"3188686848","3188690943","EC","ECU","ECUADOR" -"3188695040","3188703231","VE","VEN","VENEZUELA" -"3188703232","3188711423","AR","ARG","ARGENTINA" -"3188719616","3188981759","AR","ARG","ARGENTINA" -"3188981760","3189178367","CL","CHL","CHILE" -"3189178368","3189211135","PY","PRY","PARAGUAY" -"3189243904","3189637119","CO","COL","COLOMBIA" -"3189637120","3189694175","AR","ARG","ARGENTINA" -"3189694176","3189694183","AW","ABW","ARUBA" -"3189694184","3189694231","AR","ARG","ARGENTINA" -"3189694232","3189694239","BO","BOL","BOLIVIA" -"3189694240","3189768191","AR","ARG","ARGENTINA" -"3189768192","3190030335","PA","PAN","PANAMA" -"3190030336","3190292479","VE","VEN","VENEZUELA" -"3190292480","3190554623","PE","PER","PERU" -"3190554624","3190816767","CL","CHL","CHILE" -"3190816768","3191078911","AR","ARG","ARGENTINA" -"3191078912","3191087103","CO","COL","COLOMBIA" -"3191095296","3191099391","EC","ECU","ECUADOR" -"3191103488","3191107583","CO","COL","COLOMBIA" -"3191111680","3191128063","PY","PRY","PARAGUAY" -"3191128064","3191132159","EC","ECU","ECUADOR" -"3191136256","3191144447","DO","DOM","DOMINICAN REPUBLIC" -"3191144448","3191152639","SV","SLV","EL SALVADOR" -"3191152640","3191156735","NI","NIC","NICARAGUA" -"3191156736","3191169023","HN","HND","HONDURAS" -"3191169024","3191209983","SV","SLV","EL SALVADOR" -"3191209984","3191275519","CL","CHL","CHILE" -"3191275520","3191341055","AR","ARG","ARGENTINA" -"3191341056","3191406591","GT","GTM","GUATEMALA" -"3191406592","3191427071","SV","SLV","EL SALVADOR" -"3191427072","3191439359","GT","GTM","GUATEMALA" -"3191472128","3191603199","TT","TTO","TRINIDAD AND TOBAGO" -"3191603200","3191608831","MX","MEX","MEXICO" -"3191608832","3191609343","US","USA","UNITED STATES" -"3191609344","3191610879","CO","COL","COLOMBIA" -"3191610880","3191611135","US","USA","UNITED STATES" -"3191611136","3191611391","CO","COL","COLOMBIA" -"3191611392","3191619583","VE","VEN","VENEZUELA" -"3191619584","3191719935","CO","COL","COLOMBIA" -"3191719936","3191721471","AR","ARG","ARGENTINA" -"3191721472","3191725055","CO","COL","COLOMBIA" -"3191725056","3191725311","AR","ARG","ARGENTINA" -"3191725312","3191725567","CO","COL","COLOMBIA" -"3191725568","3191725823","AR","ARG","ARGENTINA" -"3191725824","3191726079","CO","COL","COLOMBIA" -"3191726080","3191726335","AR","ARG","ARGENTINA" -"3191726336","3191726591","CO","COL","COLOMBIA" -"3191726592","3191726847","AR","ARG","ARGENTINA" -"3191726848","3191727103","CO","COL","COLOMBIA" -"3191727104","3191727359","AR","ARG","ARGENTINA" -"3191727360","3191727615","CO","COL","COLOMBIA" -"3191727616","3191727871","AR","ARG","ARGENTINA" -"3191727872","3191728127","CO","COL","COLOMBIA" -"3191728128","3191728383","AR","ARG","ARGENTINA" -"3191728384","3191728639","CO","COL","COLOMBIA" -"3191728640","3191728895","AR","ARG","ARGENTINA" -"3191728896","3191729151","CO","COL","COLOMBIA" -"3191729152","3191729407","AR","ARG","ARGENTINA" -"3191729408","3191729663","CO","COL","COLOMBIA" -"3191729664","3191729919","AR","ARG","ARGENTINA" -"3191729920","3191730431","CO","COL","COLOMBIA" -"3191730432","3191730687","AR","ARG","ARGENTINA" -"3191730688","3191730943","CO","COL","COLOMBIA" -"3191730944","3191731199","AR","ARG","ARGENTINA" -"3191731200","3191731455","CO","COL","COLOMBIA" -"3191731456","3191731711","AR","ARG","ARGENTINA" -"3191731712","3191731967","CO","COL","COLOMBIA" -"3191731968","3191732223","AR","ARG","ARGENTINA" -"3191732224","3191732479","CO","COL","COLOMBIA" -"3191732480","3191732735","AR","ARG","ARGENTINA" -"3191732736","3191734015","CO","COL","COLOMBIA" -"3191734016","3191734031","US","USA","UNITED STATES" -"3191734032","3191734079","CO","COL","COLOMBIA" -"3191734080","3191734143","US","USA","UNITED STATES" -"3191734144","3191734271","CO","COL","COLOMBIA" -"3191865344","3191930879","UY","URY","URUGUAY" -"3191930880","3192389631","CO","COL","COLOMBIA" -"3192389632","3192913919","VE","VEN","VENEZUELA" -"3192913920","3192946687","GY","GUY","GUYANA" -"3192946688","3192979455","DO","DOM","DOMINICAN REPUBLIC" -"3192979456","3192988767","PE","PER","PERU" -"3192988768","3192988775","PA","PAN","PANAMA" -"3192988776","3193044991","PE","PER","PERU" -"3193044992","3193110527","CL","CHL","CHILE" -"3193110528","3193143295","CO","COL","COLOMBIA" -"3193176064","3193241599","CO","COL","COLOMBIA" -"3193307136","3193438207","SV","SLV","EL SALVADOR" -"3193438208","3193569279","AN","ANT","NETHERLANDS ANTILLES" -"3193569280","3193574399","CO","COL","COLOMBIA" -"3193574400","3193575423","PE","PER","PERU" -"3193575424","3193576447","CO","COL","COLOMBIA" -"3193576448","3193576703","EC","ECU","ECUADOR" -"3193576704","3193576959","CO","COL","COLOMBIA" -"3193576960","3193577215","PE","PER","PERU" -"3193577216","3193592319","CO","COL","COLOMBIA" -"3193592320","3193592575","EC","ECU","ECUADOR" -"3193592576","3193617151","CO","COL","COLOMBIA" -"3193617152","3193617407","EC","ECU","ECUADOR" -"3193617408","3193620479","CO","COL","COLOMBIA" -"3193620480","3193620991","PE","PER","PERU" -"3193620992","3193628671","CO","COL","COLOMBIA" -"3193628672","3193628927","EC","ECU","ECUADOR" -"3193628928","3193634815","CO","COL","COLOMBIA" -"3193700352","3193716735","HN","HND","HONDURAS" -"3193733120","3193741311","AR","ARG","ARGENTINA" -"3193741312","3193742335","US","USA","UNITED STATES" -"3193742336","3193742847","AR","ARG","ARGENTINA" -"3193742848","3193743359","US","USA","UNITED STATES" -"3193743360","3193743615","AR","ARG","ARGENTINA" -"3193743616","3193743871","US","USA","UNITED STATES" -"3193743872","3193744383","AR","ARG","ARGENTINA" -"3193744384","3193745407","US","USA","UNITED STATES" -"3193745408","3193748479","AR","ARG","ARGENTINA" -"3193748480","3193748735","US","USA","UNITED STATES" -"3193748736","3193752575","AR","ARG","ARGENTINA" -"3193752576","3193753087","US","USA","UNITED STATES" -"3193753088","3193753343","AR","ARG","ARGENTINA" -"3193753344","3193760511","US","USA","UNITED STATES" -"3193760512","3193760767","AR","ARG","ARGENTINA" -"3193760768","3193761023","US","USA","UNITED STATES" -"3193761024","3193765887","AR","ARG","ARGENTINA" -"3193765888","3193774079","TT","TTO","TRINIDAD AND TOBAGO" -"3193782272","3193798655","TT","TTO","TRINIDAD AND TOBAGO" -"3193798656","3193806847","CO","COL","COLOMBIA" -"3193815040","3193819135","AR","ARG","ARGENTINA" -"3193823232","3193827327","CL","CHL","CHILE" -"3193831424","3193864191","DO","DOM","DOMINICAN REPUBLIC" -"3193864192","3193872383","EC","ECU","ECUADOR" -"3193880576","3193888767","VE","VEN","VENEZUELA" -"3193896960","3193929727","CL","CHL","CHILE" -"3193929728","3193962495","EC","ECU","ECUADOR" -"3193962496","3193987071","CL","CHL","CHILE" -"3193995264","3194028031","CO","COL","COLOMBIA" -"3194028032","3194044415","AR","ARG","ARGENTINA" -"3194044416","3194052607","CO","COL","COLOMBIA" -"3194052608","3194056461","TT","TTO","TRINIDAD AND TOBAGO" -"3194056462","3194056462","US","USA","UNITED STATES" -"3194056463","3194056703","TT","TTO","TRINIDAD AND TOBAGO" -"3194060800","3194068991","CO","COL","COLOMBIA" -"3194077184","3194085375","CO","COL","COLOMBIA" -"3194093568","3194126335","SR","SUR","SURINAME" -"3194126336","3194127359","GT","GTM","GUATEMALA" -"3194127360","3194129407","PE","PER","PERU" -"3194129408","3194129919","BR","BRA","BRAZIL" -"3194129920","3194130175","AR","ARG","ARGENTINA" -"3194130176","3194134527","BR","BRA","BRAZIL" -"3194134528","3194135039","HN","HND","HONDURAS" -"3194135040","3194142719","AR","ARG","ARGENTINA" -"3194142720","3194159103","CL","CHL","CHILE" -"3194159104","3194163199","HN","HND","HONDURAS" -"3194163200","3194167295","GT","GTM","GUATEMALA" -"3194167296","3194175487","SV","SLV","EL SALVADOR" -"3194191872","3194224639","CO","COL","COLOMBIA" -"3194224640","3194322943","CL","CHL","CHILE" -"3194355712","3194363903","AN","ANT","NETHERLANDS ANTILLES" -"3194368000","3194370047","BO","BOL","BOLIVIA" -"3194370048","3194372095","PA","PAN","PANAMA" -"3194372096","3194380287","HT","HTI","HAITI" -"3194388480","3194396671","PE","PER","PERU" -"3194404864","3194413055","CO","COL","COLOMBIA" -"3194413056","3194421247","CL","CHL","CHILE" -"3194421248","3194425343","AR","ARG","ARGENTINA" -"3194429440","3194437631","VE","VEN","VENEZUELA" -"3194437632","3194441727","BO","BOL","BOLIVIA" -"3194445824","3194454015","CO","COL","COLOMBIA" -"3194454016","3194458111","AR","ARG","ARGENTINA" -"3194470400","3194486783","AR","ARG","ARGENTINA" -"3194486784","3194494975","BO","BOL","BOLIVIA" -"3194519552","3194535935","PY","PRY","PARAGUAY" -"3194552320","3194585087","AR","ARG","ARGENTINA" -"3194617856","3194626047","NI","NIC","NICARAGUA" -"3194634240","3194638335","CR","CRI","COSTA RICA" -"3194642432","3194646527","AR","ARG","ARGENTINA" -"3194650624","3194654719","AR","ARG","ARGENTINA" -"3194654720","3194658303","US","USA","UNITED STATES" -"3194658304","3194658815","AR","ARG","ARGENTINA" -"3194658816","3194660351","US","USA","UNITED STATES" -"3194660352","3194660607","AR","ARG","ARGENTINA" -"3194660608","3194660863","US","USA","UNITED STATES" -"3194660864","3194661119","AR","ARG","ARGENTINA" -"3194661120","3194661631","US","USA","UNITED STATES" -"3194661632","3194661887","AR","ARG","ARGENTINA" -"3194661888","3194667007","US","USA","UNITED STATES" -"3194683392","3194687487","CU","CUB","CUBA" -"3194691584","3194695679","BO","BOL","BOLIVIA" -"3194699776","3194703871","EC","ECU","ECUADOR" -"3194707968","3194716159","AR","ARG","ARGENTINA" -"3194716160","3194720255","HN","HND","HONDURAS" -"3194724352","3194728447","PA","PAN","PANAMA" -"3194732544","3194736639","AR","ARG","ARGENTINA" -"3194740736","3194742783","CL","CHL","CHILE" -"3194742784","3194744831","EC","ECU","ECUADOR" -"3194744832","3194746879","AR","ARG","ARGENTINA" -"3194746880","3194748927","AN","ANT","NETHERLANDS ANTILLES" -"3194748928","3194757119","UY","URY","URUGUAY" -"3194781696","3194798079","CL","CHL","CHILE" -"3194814464","3194822655","AR","ARG","ARGENTINA" -"3194847232","3194863615","CO","COL","COLOMBIA" -"3194863616","3194871807","HN","HND","HONDURAS" -"3194880000","3194896383","DO","DOM","DOMINICAN REPUBLIC" -"3194896384","3194904575","CO","COL","COLOMBIA" -"3194912768","3194920959","CL","CHL","CHILE" -"3194929152","3194937343","EC","ECU","ECUADOR" -"3194945536","3194953727","GT","GTM","GUATEMALA" -"3194961920","3194966015","EC","ECU","ECUADOR" -"3194970112","3194974207","PA","PAN","PANAMA" -"3194978304","3194978559","PA","PAN","PANAMA" -"3194978560","3194978815","AN","ANT","NETHERLANDS ANTILLES" -"3194978816","3194981375","PA","PAN","PANAMA" -"3194981376","3194984447","US","USA","UNITED STATES" -"3194984448","3194984703","PR","PRI","PUERTO RICO" -"3194984704","3194985215","UK","GBR","UNITED KINGDOM" -"3194985216","3194985983","US","USA","UNITED STATES" -"3194985984","3194990591","PA","PAN","PANAMA" -"3194990592","3194990719","US","USA","UNITED STATES" -"3194990720","3194990784","CA","CAN","CANADA" -"3194990785","3194990785","PR","PRI","PUERTO RICO" -"3194990786","3194990788","CA","CAN","CANADA" -"3194990789","3194990789","PR","PRI","PUERTO RICO" -"3194990790","3194991359","CA","CAN","CANADA" -"3194991360","3194991679","ES","ESP","SPAIN" -"3194991680","3194991871","CA","CAN","CANADA" -"3194991872","3194991935","ES","ESP","SPAIN" -"3194991936","3194992159","CA","CAN","CANADA" -"3194992160","3194992191","PR","PRI","PUERTO RICO" -"3194992192","3194992255","CA","CAN","CANADA" -"3194992256","3194992287","ES","ESP","SPAIN" -"3194992288","3194994687","CA","CAN","CANADA" -"3194994688","3195002879","AR","ARG","ARGENTINA" -"3195011072","3195011327","AR","ARG","ARGENTINA" -"3195011328","3195011583","US","USA","UNITED STATES" -"3195011584","3195012351","AR","ARG","ARGENTINA" -"3195012352","3195012607","US","USA","UNITED STATES" -"3195012608","3195012863","AR","ARG","ARGENTINA" -"3195012864","3195013119","US","USA","UNITED STATES" -"3195013120","3195013375","AR","ARG","ARGENTINA" -"3195013376","3195013631","US","USA","UNITED STATES" -"3195013632","3195014143","AR","ARG","ARGENTINA" -"3195014144","3195014399","US","USA","UNITED STATES" -"3195014400","3195014655","AR","ARG","ARGENTINA" -"3195014656","3195014911","US","USA","UNITED STATES" -"3195014912","3195019263","AR","ARG","ARGENTINA" -"3195043840","3195052031","CO","COL","COLOMBIA" -"3195060224","3195062783","UY","URY","URUGUAY" -"3195062784","3195062791","AR","ARG","ARGENTINA" -"3195062792","3195066367","UY","URY","URUGUAY" -"3195076608","3195084799","CL","CHL","CHILE" -"3195109376","3195117567","AR","ARG","ARGENTINA" -"3195142144","3195150335","VE","VEN","VENEZUELA" -"3195174912","3195183103","AR","ARG","ARGENTINA" -"3195191296","3195199487","AR","ARG","ARGENTINA" -"3195535360","3195539455","SV","SLV","EL SALVADOR" -"3195543552","3195547647","PE","PER","PERU" -"3195551744","3195555839","EC","ECU","ECUADOR" -"3195559936","3195564031","AR","ARG","ARGENTINA" -"3195568128","3195572223","CO","COL","COLOMBIA" -"3195576320","3195580415","CL","CHL","CHILE" -"3195584512","3195592703","HT","HTI","HAITI" -"3195592704","3195596799","PA","PAN","PANAMA" -"3195600896","3195609087","CL","CHL","CHILE" -"3195617280","3195633663","CL","CHL","CHILE" -"3195633664","3195637759","CO","COL","COLOMBIA" -"3195641856","3195645951","PY","PRY","PARAGUAY" -"3195650048","3195654143","GT","GTM","GUATEMALA" -"3195658240","3195662335","VE","VEN","VENEZUELA" -"3195666432","3195670527","AR","ARG","ARGENTINA" -"3195674624","3195678719","AR","ARG","ARGENTINA" -"3195682816","3195686911","AR","ARG","ARGENTINA" -"3195691008","3195695103","DO","DOM","DOMINICAN REPUBLIC" -"3195699200","3195703295","AR","ARG","ARGENTINA" -"3195707392","3195711487","PA","PAN","PANAMA" -"3195715584","3195719679","AR","ARG","ARGENTINA" -"3195723776","3195731967","AR","ARG","ARGENTINA" -"3195731968","3195736063","EC","ECU","ECUADOR" -"3195740160","3195744255","PA","PAN","PANAMA" -"3195748352","3195752447","CL","CHL","CHILE" -"3195756544","3195760639","AR","ARG","ARGENTINA" -"3195764736","3195768831","CR","CRI","COSTA RICA" -"3195772928","3195777023","VE","VEN","VENEZUELA" -"3195781120","3195785215","PA","PAN","PANAMA" -"3195789312","3195793407","PA","PAN","PANAMA" -"3195797504","3195801599","AR","ARG","ARGENTINA" -"3195805696","3195807743","NI","NIC","NICARAGUA" -"3195807744","3195809791","BZ","BLZ","BELIZE" -"3195809792","3195811839","PE","PER","PERU" -"3195811840","3195813887","AR","ARG","ARGENTINA" -"3195813888","3195822079","DO","DOM","DOMINICAN REPUBLIC" -"3195830272","3195834367","AR","ARG","ARGENTINA" -"3195838464","3195840511","HN","HND","HONDURAS" -"3195846656","3195852799","AR","ARG","ARGENTINA" -"3195852800","3195853823","AN","ANT","NETHERLANDS ANTILLES" -"3195853824","3195854847","GY","GUY","GUYANA" -"3195854848","3195859967","AR","ARG","ARGENTINA" -"3195859968","3195862015","CR","CRI","COSTA RICA" -"3195863040","3196092415","CO","COL","COLOMBIA" -"3196092416","3196125183","PY","PRY","PARAGUAY" -"3196125184","3196190719","BO","BOL","BOLIVIA" -"3196190720","3196207103","HN","HND","HONDURAS" -"3196256256","3196289023","EC","ECU","ECUADOR" -"3196321792","3196583935","UY","URY","URUGUAY" -"3196583936","3196690687","AR","ARG","ARGENTINA" -"3196690688","3196690943","UY","URY","URUGUAY" -"3196690944","3196807359","AR","ARG","ARGENTINA" -"3196807360","3196807367","AW","ABW","ARUBA" -"3196807368","3196846079","AR","ARG","ARGENTINA" -"3196846080","3196874431","PA","PAN","PANAMA" -"3196874432","3196874447","PG","PNG","PAPUA NEW GUINEA" -"3196874448","3196977151","PA","PAN","PANAMA" -"3196977152","3197042687","VE","VEN","VENEZUELA" -"3197042688","3197059071","CO","COL","COLOMBIA" -"3197075456","3197091839","GT","GTM","GUATEMALA" -"3197108224","3197370367","CO","COL","COLOMBIA" -"3197370368","3197501439","GT","GTM","GUATEMALA" -"3197501440","3197534207","SV","SLV","EL SALVADOR" -"3197566976","3197599743","CL","CHL","CHILE" -"3197632512","3197698047","EC","ECU","ECUADOR" -"3197698048","3197730815","VE","VEN","VENEZUELA" -"3197763584","3197894655","EC","ECU","ECUADOR" -"3197894656","3198156799","CO","COL","COLOMBIA" -"3198156800","3198484479","CL","CHL","CHILE" -"3198484480","3198500863","CO","COL","COLOMBIA" -"3198517248","3198550015","CO","COL","COLOMBIA" -"3198550016","3198681087","DO","DOM","DOMINICAN REPUBLIC" -"3198681088","3198877695","VE","VEN","VENEZUELA" -"3198943232","3199467519","AR","ARG","ARGENTINA" -"3199467520","3199467775","US","USA","UNITED STATES" -"3199467776","3199506687","AR","ARG","ARGENTINA" -"3199506688","3199506943","US","USA","UNITED STATES" -"3199506944","3199518719","AR","ARG","ARGENTINA" -"3199518720","3199518975","US","USA","UNITED STATES" -"3199518976","3199533055","AR","ARG","ARGENTINA" -"3199533056","3199549439","BO","BOL","BOLIVIA" -"3199598592","3199631359","CO","COL","COLOMBIA" -"3199664128","3199721471","AR","ARG","ARGENTINA" -"3199729664","3199762431","NI","NIC","NICARAGUA" -"3199795200","3199815679","AN","ANT","NETHERLANDS ANTILLES" -"3199860736","3199909887","BO","BOL","BOLIVIA" -"3199926272","3199991807","PE","PER","PERU" -"3199991808","3200385023","AR","ARG","ARGENTINA" -"3200516096","3200565247","CL","CHL","CHILE" -"3200581632","3200614399","BZ","BLZ","BELIZE" -"3200614400","3200647167","AR","ARG","ARGENTINA" -"3200647168","3201302527","VE","VEN","VENEZUELA" -"3201302528","3201433599","CL","CHL","CHILE" -"3201433600","3201435135","AR","ARG","ARGENTINA" -"3201435136","3201435263","US","USA","UNITED STATES" -"3201435264","3201435559","AR","ARG","ARGENTINA" -"3201435560","3201435567","US","USA","UNITED STATES" -"3201435568","3201441791","AR","ARG","ARGENTINA" -"3201441792","3201442047","US","USA","UNITED STATES" -"3201442048","3201466367","AR","ARG","ARGENTINA" -"3201564672","3201630207","NI","NIC","NICARAGUA" -"3201630208","3201695743","TT","TTO","TRINIDAD AND TOBAGO" -"3201695744","3201761279","EC","ECU","ECUADOR" -"3201826816","3201867775","AR","ARG","ARGENTINA" -"3201867776","3201871871","PE","PER","PERU" -"3201871872","3201875967","AR","ARG","ARGENTINA" -"3201875968","3201880063","CO","COL","COLOMBIA" -"3201880064","3201884159","EC","ECU","ECUADOR" -"3201884160","3201888255","AR","ARG","ARGENTINA" -"3201888256","3201892351","VE","VEN","VENEZUELA" -"3201957888","3202023423","PA","PAN","PANAMA" -"3202088960","3202127999","AR","ARG","ARGENTINA" -"3202128000","3202128015","AN","ANT","NETHERLANDS ANTILLES" -"3202128016","3202220031","AR","ARG","ARGENTINA" -"3202220032","3202351103","PE","PER","PERU" -"3202351104","3202444455","AR","ARG","ARGENTINA" -"3202444456","3202444463","BR","BRA","BRAZIL" -"3202444464","3202495495","AR","ARG","ARGENTINA" -"3202495496","3202495503","AW","ABW","ARUBA" -"3202495504","3202647039","AR","ARG","ARGENTINA" -"3202647040","3202647295","AW","ABW","ARUBA" -"3202647296","3202875391","AR","ARG","ARGENTINA" -"3202875392","3203137535","PE","PER","PERU" -"3203399680","3203432447","CO","COL","COLOMBIA" -"3203465216","3203530751","CR","CRI","COSTA RICA" -"3203530752","3203531519","CO","COL","COLOMBIA" -"3203531520","3203531775","PA","PAN","PANAMA" -"3203531776","3203532031","CR","CRI","COSTA RICA" -"3203532032","3203532287","CO","COL","COLOMBIA" -"3203532288","3203534847","PA","PAN","PANAMA" -"3203534848","3203535359","CO","COL","COLOMBIA" -"3203535360","3203535423","AN","ANT","NETHERLANDS ANTILLES" -"3203535424","3203547135","CO","COL","COLOMBIA" -"3203547136","3203549183","PA","PAN","PANAMA" -"3203549184","3203596287","CO","COL","COLOMBIA" -"3203661824","3203923967","AR","ARG","ARGENTINA" -"3203923968","3204055039","CO","COL","COLOMBIA" -"3204186112","3204448255","CO","COL","COLOMBIA" -"3221225472","3221225727","US","USA","UNITED STATES" -"3221225984","3221226239","US","USA","UNITED STATES" -"3221233664","3221237759","US","USA","UNITED STATES" -"3221291008","3221410411","US","USA","UNITED STATES" -"3221410412","3221410412","FR","FRA","FRANCE" -"3221410413","3221422079","US","USA","UNITED STATES" -"3221487616","3221553151","US","USA","UNITED STATES" -"3221553664","3221555967","US","USA","UNITED STATES" -"3221556224","3221560319","US","USA","UNITED STATES" -"3221560320","3221561087","GB","GBR","UNITED KINGDOM" -"3221561344","3221562367","US","USA","UNITED STATES" -"3221562368","3221562623","SE","SWE","SWEDEN" -"3221562624","3221564927","US","USA","UNITED STATES" -"3221565184","3221565951","US","USA","UNITED STATES" -"3221565952","3221566207","SE","SWE","SWEDEN" -"3221566464","3221567743","US","USA","UNITED STATES" -"3221568256","3221568511","FR","FRA","FRANCE" -"3221568768","3221569279","FR","FRA","FRANCE" -"3221569280","3221570559","US","USA","UNITED STATES" -"3221571072","3221571327","US","USA","UNITED STATES" -"3221571584","3221576191","US","USA","UNITED STATES" -"3221576192","3221576447","KR","KOR","REPUBLIC OF KOREA" -"3221576448","3221577727","US","USA","UNITED STATES" -"3221577728","3221577983","CA","CAN","CANADA" -"3221577984","3221578239","IT","ITA","ITALY" -"3221578240","3221579775","US","USA","UNITED STATES" -"3221580032","3221589503","US","USA","UNITED STATES" -"3221589504","3221589759","FR","FRA","FRANCE" -"3221589760","3221590015","US","USA","UNITED STATES" -"3221590016","3221590271","CA","CAN","CANADA" -"3221590272","3221590527","DE","DEU","GERMANY" -"3221590528","3221591807","US","USA","UNITED STATES" -"3221592064","3221592575","US","USA","UNITED STATES" -"3221593088","3221594623","US","USA","UNITED STATES" -"3221594624","3221594879","AT","AUT","AUSTRIA" -"3221594880","3221605119","US","USA","UNITED STATES" -"3221605376","3221605887","CA","CAN","CANADA" -"3221605888","3221607167","US","USA","UNITED STATES" -"3221607424","3221608447","US","USA","UNITED STATES" -"3221608448","3221608703","JP","JPN","JAPAN" -"3221608704","3221609727","US","USA","UNITED STATES" -"3221610240","3221614335","US","USA","UNITED STATES" -"3221614336","3221614591","GB","GBR","UNITED KINGDOM" -"3221614592","3221614847","AU","AUS","AUSTRALIA" -"3221615104","3221618175","US","USA","UNITED STATES" -"3221618176","3221618431","GB","GBR","UNITED KINGDOM" -"3221618688","3221621247","US","USA","UNITED STATES" -"3221621248","3221621503","GB","GBR","UNITED KINGDOM" -"3221621504","3221627391","US","USA","UNITED STATES" -"3221627392","3221627647","FR","FRA","FRANCE" -"3221627648","3221633279","US","USA","UNITED STATES" -"3221633280","3221633535","CH","CHE","SWITZERLAND" -"3221633536","3221633791","US","USA","UNITED STATES" -"3221633792","3221634047","CH","CHE","SWITZERLAND" -"3221634048","3221636607","US","USA","UNITED STATES" -"3221636608","3221636863","CH","CHE","SWITZERLAND" -"3221636864","3221637119","US","USA","UNITED STATES" -"3221637120","3221637375","DE","DEU","GERMANY" -"3221637376","3221638143","US","USA","UNITED STATES" -"3221638144","3221638399","DE","DEU","GERMANY" -"3221638400","3221640191","US","USA","UNITED STATES" -"3221640192","3221640447","NL","NLD","NETHERLANDS" -"3221640448","3221642495","US","USA","UNITED STATES" -"3221642496","3221642751","DE","DEU","GERMANY" -"3221642752","3221647103","US","USA","UNITED STATES" -"3221647104","3221647359","FR","FRA","FRANCE" -"3221647360","3221650943","US","USA","UNITED STATES" -"3221650944","3221651199","GB","GBR","UNITED KINGDOM" -"3221651200","3221654783","US","USA","UNITED STATES" -"3221654784","3221655039","FR","FRA","FRANCE" -"3221655040","3221663743","US","USA","UNITED STATES" -"3221663744","3221663999","DE","DEU","GERMANY" -"3221664000","3221664255","NL","NLD","NETHERLANDS" -"3221664256","3221664511","US","USA","UNITED STATES" -"3221664512","3221664767","GB","GBR","UNITED KINGDOM" -"3221664768","3221866495","US","USA","UNITED STATES" -"3221866752","3221880575","US","USA","UNITED STATES" -"3221880832","3222011903","US","USA","UNITED STATES" -"3222012160","3222012415","GB","GBR","UNITED KINGDOM" -"3222012672","3222016511","US","USA","UNITED STATES" -"3222016768","3222017023","US","USA","UNITED STATES" -"3222017536","3222017791","US","USA","UNITED STATES" -"3222018048","3222018559","US","USA","UNITED STATES" -"3222018816","3222019839","US","USA","UNITED STATES" -"3222020096","3222022399","US","USA","UNITED STATES" -"3222022656","3222023423","US","USA","UNITED STATES" -"3222023936","3222024191","IT","ITA","ITALY" -"3222024192","3222024959","US","USA","UNITED STATES" -"3222025216","3222025727","US","USA","UNITED STATES" -"3222025728","3222025983","NL","NLD","NETHERLANDS" -"3222026240","3222027775","US","USA","UNITED STATES" -"3222027776","3222028031","CA","CAN","CANADA" -"3222028032","3222030335","US","USA","UNITED STATES" -"3222030336","3222030847","GB","GBR","UNITED KINGDOM" -"3222030848","3222031359","US","USA","UNITED STATES" -"3222031360","3222031615","AU","AUS","AUSTRALIA" -"3222031616","3222031871","IT","ITA","ITALY" -"3222031872","3222032639","US","USA","UNITED STATES" -"3222032640","3222032895","DE","DEU","GERMANY" -"3222032896","3222036479","US","USA","UNITED STATES" -"3222036480","3222036735","FR","FRA","FRANCE" -"3222036736","3222036991","US","USA","UNITED STATES" -"3222036992","3222037247","CA","CAN","CANADA" -"3222037248","3222037503","GB","GBR","UNITED KINGDOM" -"3222037504","3222038271","US","USA","UNITED STATES" -"3222039808","3222044671","US","USA","UNITED STATES" -"3222044928","3222045183","CA","CAN","CANADA" -"3222045184","3222048767","US","USA","UNITED STATES" -"3222049024","3222049279","US","USA","UNITED STATES" -"3222050304","3222051327","US","USA","UNITED STATES" -"3222051584","3222055935","US","USA","UNITED STATES" -"3222056192","3222056447","US","USA","UNITED STATES" -"3222056448","3222059007","CA","CAN","CANADA" -"3222059008","3222061055","US","USA","UNITED STATES" -"3222061056","3222061823","IT","ITA","ITALY" -"3222061824","3222066943","US","USA","UNITED STATES" -"3222066944","3222067199","CA","CAN","CANADA" -"3222067200","3222067455","US","USA","UNITED STATES" -"3222067456","3222067967","CH","CHE","SWITZERLAND" -"3222068224","3222068479","US","USA","UNITED STATES" -"3222068992","3222071039","US","USA","UNITED STATES" -"3222071040","3222071295","GB","GBR","UNITED KINGDOM" -"3222071296","3222071551","PT","PRT","PORTUGAL" -"3222071552","3222072063","US","USA","UNITED STATES" -"3222072064","3222072319","SE","SWE","SWEDEN" -"3222072576","3222075135","US","USA","UNITED STATES" -"3222075136","3222075391","CH","CHE","SWITZERLAND" -"3222075392","3222075903","US","USA","UNITED STATES" -"3222076160","3222274047","US","USA","UNITED STATES" -"3222292480","3222292735","US","USA","UNITED STATES" -"3222292992","3222305535","US","USA","UNITED STATES" -"3222305536","3222309119","SE","SWE","SWEDEN" -"3222309376","3222313727","SE","SWE","SWEDEN" -"3222313728","3222316799","CH","CHE","SWITZERLAND" -"3222316800","3222318591","US","USA","UNITED STATES" -"3222318848","3222319615","US","USA","UNITED STATES" -"3222319616","3222320127","JP","JPN","JAPAN" -"3222320128","3222320383","AU","AUS","AUSTRALIA" -"3222320384","3222320895","US","USA","UNITED STATES" -"3222320896","3222326015","NL","NLD","NETHERLANDS" -"3222326016","3222326527","US","USA","UNITED STATES" -"3222326528","3222339583","CA","CAN","CANADA" -"3222339584","3222455039","US","USA","UNITED STATES" -"3222455040","3222455295","GB","GBR","UNITED KINGDOM" -"3222455296","3222868735","US","USA","UNITED STATES" -"3222868736","3222868991","DE","DEU","GERMANY" -"3222868992","3222869503","US","USA","UNITED STATES" -"3222869504","3222869759","GB","GBR","UNITED KINGDOM" -"3222869760","3222893311","US","USA","UNITED STATES" -"3222893824","3222931711","US","USA","UNITED STATES" -"3222931968","3222934527","US","USA","UNITED STATES" -"3222934784","3222936319","US","USA","UNITED STATES" -"3222936576","3222940927","CH","CHE","SWITZERLAND" -"3222940928","3222941183","GB","GBR","UNITED KINGDOM" -"3222941184","3222941695","CH","CHE","SWITZERLAND" -"3222941696","3222952703","US","USA","UNITED STATES" -"3222952704","3222952959","JP","JPN","JAPAN" -"3222952960","3222953215","US","USA","UNITED STATES" -"3222953216","3222953727","JP","JPN","JAPAN" -"3222953728","3222953983","US","USA","UNITED STATES" -"3222953984","3222954239","JP","JPN","JAPAN" -"3222954240","3222954495","US","USA","UNITED STATES" -"3222955008","3222956031","US","USA","UNITED STATES" -"3222956288","3222962431","FI","FIN","FINLAND" -"3222963456","3222964223","FI","FIN","FINLAND" -"3222964224","3222964479","US","USA","UNITED STATES" -"3222967040","3222968831","US","USA","UNITED STATES" -"3222968832","3222973951","NL","NLD","NETHERLANDS" -"3222973952","3222979071","DE","DEU","GERMANY" -"3222979072","3222983167","US","USA","UNITED STATES" -"3222983168","3222983935","CA","CAN","CANADA" -"3222983936","3222984447","US","USA","UNITED STATES" -"3222984448","3222988543","AU","AUS","AUSTRALIA" -"3222988544","3222988799","PT","PRT","PORTUGAL" -"3222988800","3222989055","AU","AUS","AUSTRALIA" -"3222989056","3222989311","US","USA","UNITED STATES" -"3222989312","3222989567","GB","GBR","UNITED KINGDOM" -"3222989568","3222989823","CA","CAN","CANADA" -"3222989824","3222990079","PT","PRT","PORTUGAL" -"3222990080","3222990335","NL","NLD","NETHERLANDS" -"3222990336","3222990591","AT","AUT","AUSTRIA" -"3222990592","3222990847","PT","PRT","PORTUGAL" -"3222990848","3222994687","US","USA","UNITED STATES" -"3222994944","3223191551","US","USA","UNITED STATES" -"3223201024","3223201279","US","USA","UNITED STATES" -"3223202816","3223203071","US","USA","UNITED STATES" -"3223204352","3223204607","US","USA","UNITED STATES" -"3223205120","3223205375","US","USA","UNITED STATES" -"3223207168","3223207423","US","USA","UNITED STATES" -"3223214848","3223215871","US","USA","UNITED STATES" -"3223216128","3223216383","US","USA","UNITED STATES" -"3223217152","3223217407","US","USA","UNITED STATES" -"3223219200","3223219455","US","USA","UNITED STATES" -"3223220480","3223220735","US","USA","UNITED STATES" -"3223220992","3223221247","US","USA","UNITED STATES" -"3223222784","3223223039","US","USA","UNITED STATES" -"3223223552","3223223807","US","USA","UNITED STATES" -"3223227904","3223228159","CA","CAN","CANADA" -"3223229184","3223229695","US","USA","UNITED STATES" -"3223229696","3223229951","CA","CAN","CANADA" -"3223240448","3223240703","US","USA","UNITED STATES" -"3223242752","3223243007","US","USA","UNITED STATES" -"3223243264","3223243519","CA","CAN","CANADA" -"3223244288","3223245311","US","USA","UNITED STATES" -"3223249408","3223249663","CA","CAN","CANADA" -"3223254784","3223255295","US","USA","UNITED STATES" -"3223257088","3223258623","US","USA","UNITED STATES" -"3223258624","3223258879","CA","CAN","CANADA" -"3223258880","3223260671","US","USA","UNITED STATES" -"3223260672","3223260927","DE","DEU","GERMANY" -"3223261184","3223262975","US","USA","UNITED STATES" -"3223262976","3223263231","BE","BEL","BELGIUM" -"3223263232","3223263743","US","USA","UNITED STATES" -"3223263744","3223263999","GB","GBR","UNITED KINGDOM" -"3223264000","3223264255","FR","FRA","FRANCE" -"3223264256","3223265023","US","USA","UNITED STATES" -"3223265024","3223265279","GB","GBR","UNITED KINGDOM" -"3223265280","3223267327","US","USA","UNITED STATES" -"3223267328","3223267583","BE","BEL","BELGIUM" -"3223267584","3223269119","US","USA","UNITED STATES" -"3223269376","3223269631","US","USA","UNITED STATES" -"3223272960","3223273215","GB","GBR","UNITED KINGDOM" -"3223273216","3223280383","US","USA","UNITED STATES" -"3223280640","3223280895","US","USA","UNITED STATES" -"3223281408","3223283199","US","USA","UNITED STATES" -"3223283200","3223283455","DE","DEU","GERMANY" -"3223283968","3223284991","US","USA","UNITED STATES" -"3223285504","3223286783","US","USA","UNITED STATES" -"3223286784","3223289087","JP","JPN","JAPAN" -"3223294208","3223297279","US","USA","UNITED STATES" -"3223297536","3223298815","US","USA","UNITED STATES" -"3223299072","3223299327","US","USA","UNITED STATES" -"3223299584","3223301119","NL","NLD","NETHERLANDS" -"3223301120","3223302399","US","USA","UNITED STATES" -"3223303168","3223303423","CA","CAN","CANADA" -"3223303424","3223303679","US","USA","UNITED STATES" -"3223305984","3223307519","US","USA","UNITED STATES" -"3223307520","3223310079","JP","JPN","JAPAN" -"3223310080","3223310335","US","USA","UNITED STATES" -"3223310848","3223311103","US","USA","UNITED STATES" -"3223311104","3223311359","FR","FRA","FRANCE" -"3223311360","3223311871","US","USA","UNITED STATES" -"3223312128","3223314431","US","USA","UNITED STATES" -"3223314432","3223314687","CA","CAN","CANADA" -"3223314688","3223315455","US","USA","UNITED STATES" -"3223315712","3223316223","US","USA","UNITED STATES" -"3223316224","3223316479","NL","NLD","NETHERLANDS" -"3223316480","3223316991","US","USA","UNITED STATES" -"3223317248","3223317759","US","USA","UNITED STATES" -"3223318016","3223319039","US","USA","UNITED STATES" -"3223319808","3223321343","US","USA","UNITED STATES" -"3223321600","3223321855","FR","FRA","FRANCE" -"3223321856","3223322367","US","USA","UNITED STATES" -"3223322624","3223388159","US","USA","UNITED STATES" -"3223388672","3223390719","US","USA","UNITED STATES" -"3223391232","3223391999","US","USA","UNITED STATES" -"3223392000","3223392255","FR","FRA","FRANCE" -"3223392256","3223392511","GB","GBR","UNITED KINGDOM" -"3223393024","3223394047","US","USA","UNITED STATES" -"3223396608","3223396863","US","USA","UNITED STATES" -"3223397120","3223397375","US","USA","UNITED STATES" -"3223397376","3223397631","NL","NLD","NETHERLANDS" -"3223397632","3223410431","US","USA","UNITED STATES" -"3223410432","3223416831","CH","CHE","SWITZERLAND" -"3223416832","3223417087","US","USA","UNITED STATES" -"3223417088","3223417599","FR","FRA","FRANCE" -"3223417600","3223418367","US","USA","UNITED STATES" -"3223418368","3223420927","CH","CHE","SWITZERLAND" -"3223420928","3223421439","US","USA","UNITED STATES" -"3223421440","3223421695","GB","GBR","UNITED KINGDOM" -"3223421696","3223421951","NL","NLD","NETHERLANDS" -"3223422464","3223422719","US","USA","UNITED STATES" -"3223422720","3223422975","JP","JPN","JAPAN" -"3223423232","3223423743","US","USA","UNITED STATES" -"3223424000","3223424767","US","USA","UNITED STATES" -"3223424768","3223425535","FR","FRA","FRANCE" -"3223425792","3223430911","FR","FRA","FRANCE" -"3223431424","3223432191","FR","FRA","FRANCE" -"3223433216","3223435007","FR","FRA","FRANCE" -"3223435008","3223437055","US","USA","UNITED STATES" -"3223437312","3223447551","CH","CHE","SWITZERLAND" -"3223447552","3223447807","US","USA","UNITED STATES" -"3223447808","3223449599","NL","NLD","NETHERLANDS" -"3223449600","3223452671","US","USA","UNITED STATES" -"3223452928","3223453183","US","USA","UNITED STATES" -"3223453184","3223453439","DE","DEU","GERMANY" -"3223458560","3223458815","GB","GBR","UNITED KINGDOM" -"3223460096","3223460351","US","USA","UNITED STATES" -"3223462656","3223462911","US","USA","UNITED STATES" -"3223466496","3223466751","GB","GBR","UNITED KINGDOM" -"3223471616","3223471871","CA","CAN","CANADA" -"3223471872","3223472383","US","USA","UNITED STATES" -"3223476736","3223476991","US","USA","UNITED STATES" -"3223481088","3223481343","SE","SWE","SWEDEN" -"3223483392","3223483647","NL","NLD","NETHERLANDS" -"3223490816","3223491071","US","USA","UNITED STATES" -"3223496960","3223497215","US","USA","UNITED STATES" -"3223499520","3223499775","FI","FIN","FINLAND" -"3223500032","3223503871","CA","CAN","CANADA" -"3223504640","3223504895","CA","CAN","CANADA" -"3223507968","3223508223","US","USA","UNITED STATES" -"3223508480","3223508735","US","USA","UNITED STATES" -"3223513344","3223513599","US","USA","UNITED STATES" -"3223514880","3223515135","US","USA","UNITED STATES" -"3223516160","3223516415","US","USA","UNITED STATES" -"3223516928","3223517183","US","USA","UNITED STATES" -"3223519232","3223524351","DE","DEU","GERMANY" -"3223524352","3223534335","US","USA","UNITED STATES" -"3223534336","3223534591","AU","AUS","AUSTRALIA" -"3223534592","3223534847","US","USA","UNITED STATES" -"3223535104","3223535359","US","USA","UNITED STATES" -"3223535360","3223537919","DE","DEU","GERMANY" -"3223537920","3223540991","US","USA","UNITED STATES" -"3223541248","3223542271","US","USA","UNITED STATES" -"3223542272","3223542527","DE","DEU","GERMANY" -"3223542528","3223543295","US","USA","UNITED STATES" -"3223543296","3223543551","GB","GBR","UNITED KINGDOM" -"3223543552","3223545855","US","USA","UNITED STATES" -"3223546112","3223546879","US","USA","UNITED STATES" -"3223546880","3223547135","GB","GBR","UNITED KINGDOM" -"3223547136","3223551743","US","USA","UNITED STATES" -"3223552000","3223552511","US","USA","UNITED STATES" -"3223552512","3223553535","NL","NLD","NETHERLANDS" -"3223553536","3223554559","US","USA","UNITED STATES" -"3223554560","3223554815","GB","GBR","UNITED KINGDOM" -"3223555328","3223556095","US","USA","UNITED STATES" -"3223556096","3223556351","CA","CAN","CANADA" -"3223556352","3223556607","US","USA","UNITED STATES" -"3223556608","3223556863","IT","ITA","ITALY" -"3223556864","3223557375","US","USA","UNITED STATES" -"3223557376","3223558655","DE","DEU","GERMANY" -"3223558656","3223559423","US","USA","UNITED STATES" -"3223559936","3223563263","US","USA","UNITED STATES" -"3223563264","3223563519","GB","GBR","UNITED KINGDOM" -"3223563520","3223565567","US","USA","UNITED STATES" -"3223565824","3223566079","US","USA","UNITED STATES" -"3223566080","3223568639","NL","NLD","NETHERLANDS" -"3223568640","3223569663","US","USA","UNITED STATES" -"3223569664","3223570175","GB","GBR","UNITED KINGDOM" -"3223571456","3223571711","US","USA","UNITED STATES" -"3223571712","3223572223","GB","GBR","UNITED KINGDOM" -"3223572224","3223572479","IE","IRL","IRELAND" -"3223572480","3223577855","US","USA","UNITED STATES" -"3223577856","3223578111","DE","DEU","GERMANY" -"3223578112","3223580671","US","USA","UNITED STATES" -"3223580672","3223581951","AT","AUT","AUSTRIA" -"3223581952","3223582207","US","USA","UNITED STATES" -"3223582208","3223582463","PT","PRT","PORTUGAL" -"3223582464","3223582719","NL","NLD","NETHERLANDS" -"3223582720","3223582975","AU","AUS","AUSTRALIA" -"3223583488","3223583743","US","USA","UNITED STATES" -"3223584000","3223584511","US","USA","UNITED STATES" -"3223584768","3223650303","SE","SWE","SWEDEN" -"3223650304","3223715839","CH","CHE","SWITZERLAND" -"3223715840","3223781375","DK","DNK","DENMARK" -"3223781376","3223823871","GB","GBR","UNITED KINGDOM" -"3223823872","3223824127","AT","AUT","AUSTRIA" -"3223824128","3223846911","GB","GBR","UNITED KINGDOM" -"3223848704","3223852799","US","USA","UNITED STATES" -"3223853312","3223853567","US","USA","UNITED STATES" -"3223854336","3223854591","US","USA","UNITED STATES" -"3223857920","3223858175","US","USA","UNITED STATES" -"3223858944","3223859455","US","USA","UNITED STATES" -"3223859968","3223860223","US","USA","UNITED STATES" -"3223860480","3223860991","US","USA","UNITED STATES" -"3223862528","3223862783","US","USA","UNITED STATES" -"3223863552","3223863807","US","USA","UNITED STATES" -"3223864576","3223867647","FI","FIN","FINLAND" -"3223874816","3223875071","US","USA","UNITED STATES" -"3223876608","3223876863","US","USA","UNITED STATES" -"3223883520","3223883775","US","USA","UNITED STATES" -"3223886592","3223887103","US","USA","UNITED STATES" -"3223887616","3223887871","US","USA","UNITED STATES" -"3223898368","3223898623","US","USA","UNITED STATES" -"3223902464","3223902719","CA","CAN","CANADA" -"3223905280","3223905535","FI","FIN","FINLAND" -"3223909632","3223910143","US","USA","UNITED STATES" -"3223910400","3223910911","US","USA","UNITED STATES" -"3223911936","3223912191","CA","CAN","CANADA" -"3223912448","3223938559","US","USA","UNITED STATES" -"3223938816","3223946239","GB","GBR","UNITED KINGDOM" -"3223946240","3223947519","CH","CHE","SWITZERLAND" -"3223947520","3223947775","US","USA","UNITED STATES" -"3223948288","3223948543","NL","NLD","NETHERLANDS" -"3223948544","3223949823","CH","CHE","SWITZERLAND" -"3223949824","3223950079","AU","AUS","AUSTRALIA" -"3223950080","3223950335","DE","DEU","GERMANY" -"3223950336","3223950591","CA","CAN","CANADA" -"3223950592","3223953663","CH","CHE","SWITZERLAND" -"3223953664","3223955967","US","USA","UNITED STATES" -"3223955968","3223956223","TH","THA","THAILAND" -"3223956224","3223957759","US","USA","UNITED STATES" -"3223958016","3223963135","JP","JPN","JAPAN" -"3223963136","3223963647","US","USA","UNITED STATES" -"3223963904","3223964159","CA","CAN","CANADA" -"3223964160","3223964415","US","USA","UNITED STATES" -"3223964416","3223964671","AU","AUS","AUSTRALIA" -"3223964672","3223965183","US","USA","UNITED STATES" -"3223965184","3223965439","ID","IDN","INDONESIA" -"3223965440","3223966207","US","USA","UNITED STATES" -"3223966208","3223966463","GB","GBR","UNITED KINGDOM" -"3223966464","3223967743","US","USA","UNITED STATES" -"3223968000","3223968255","US","USA","UNITED STATES" -"3223968256","3223968511","IT","ITA","ITALY" -"3223968512","3223970303","US","USA","UNITED STATES" -"3223970560","3223970815","DE","DEU","GERMANY" -"3223971072","3223975935","US","USA","UNITED STATES" -"3223976192","3223977983","US","USA","UNITED STATES" -"3223978240","3223978495","DE","DEU","GERMANY" -"3223978752","3223979263","US","USA","UNITED STATES" -"3223979264","3223979775","CA","CAN","CANADA" -"3223979776","3223988735","US","USA","UNITED STATES" -"3223988736","3223990271","CH","CHE","SWITZERLAND" -"3223990272","3223991295","US","USA","UNITED STATES" -"3223991296","3223991551","AU","AUS","AUSTRALIA" -"3223991552","3223991807","GB","GBR","UNITED KINGDOM" -"3223991808","3223992063","CA","CAN","CANADA" -"3223992064","3223993343","US","USA","UNITED STATES" -"3223993344","3223994111","AU","AUS","AUSTRALIA" -"3223994112","3223994623","DE","DEU","GERMANY" -"3223994624","3223994879","NO","NOR","NORWAY" -"3223994880","3223995391","US","USA","UNITED STATES" -"3223995392","3223995647","CA","CAN","CANADA" -"3223995648","3223996159","US","USA","UNITED STATES" -"3223997184","3223999487","US","USA","UNITED STATES" -"3223999488","3224000255","JP","JPN","JAPAN" -"3224000256","3224000511","GB","GBR","UNITED KINGDOM" -"3224000512","3224001023","US","USA","UNITED STATES" -"3224001024","3224001279","CA","CAN","CANADA" -"3224001280","3224002559","US","USA","UNITED STATES" -"3224002816","3224003327","US","USA","UNITED STATES" -"3224003584","3224003839","GB","GBR","UNITED KINGDOM" -"3224003840","3224004095","US","USA","UNITED STATES" -"3224004096","3224004351","FR","FRA","FRANCE" -"3224004352","3224005631","JP","JPN","JAPAN" -"3224005632","3224006143","US","USA","UNITED STATES" -"3224006400","3224006655","US","USA","UNITED STATES" -"3224006912","3224012031","NL","NLD","NETHERLANDS" -"3224012032","3224014591","US","USA","UNITED STATES" -"3224014592","3224014847","DE","DEU","GERMANY" -"3224014848","3224015615","US","USA","UNITED STATES" -"3224015872","3224016639","US","USA","UNITED STATES" -"3224016640","3224016895","AU","AUS","AUSTRALIA" -"3224016896","3224017663","US","USA","UNITED STATES" -"3224017920","3224022271","US","USA","UNITED STATES" -"3224023808","3224024063","US","USA","UNITED STATES" -"3224024064","3224029695","CH","CHE","SWITZERLAND" -"3224029696","3224030463","CA","CAN","CANADA" -"3224030720","3224030975","CA","CAN","CANADA" -"3224030976","3224038655","US","USA","UNITED STATES" -"3224038656","3224038911","JP","JPN","JAPAN" -"3224038912","3224039679","US","USA","UNITED STATES" -"3224039936","3224040959","US","USA","UNITED STATES" -"3224041216","3224042239","US","USA","UNITED STATES" -"3224042496","3224042751","US","USA","UNITED STATES" -"3224042752","3224043007","DE","DEU","GERMANY" -"3224043008","3224043263","US","USA","UNITED STATES" -"3224043776","3224084991","US","USA","UNITED STATES" -"3224084992","3224087551","SE","SWE","SWEDEN" -"3224087552","3224088063","US","USA","UNITED STATES" -"3224088064","3224088319","JP","JPN","JAPAN" -"3224088320","3224090879","US","USA","UNITED STATES" -"3224090880","3224091135","AU","AUS","AUSTRALIA" -"3224091648","3224091903","US","USA","UNITED STATES" -"3224091904","3224092159","JP","JPN","JAPAN" -"3224092416","3224092671","US","USA","UNITED STATES" -"3224092672","3224093951","CH","CHE","SWITZERLAND" -"3224093952","3224094207","US","USA","UNITED STATES" -"3224094208","3224094463","AU","AUS","AUSTRALIA" -"3224094464","3224094975","US","USA","UNITED STATES" -"3224094976","3224095487","JP","JPN","JAPAN" -"3224095488","3224096255","US","USA","UNITED STATES" -"3224096512","3224097279","AU","AUS","AUSTRALIA" -"3224097280","3224097535","NL","NLD","NETHERLANDS" -"3224097536","3224097791","US","USA","UNITED STATES" -"3224097792","3224098047","NL","NLD","NETHERLANDS" -"3224098048","3224098559","US","USA","UNITED STATES" -"3224098816","3224099583","US","USA","UNITED STATES" -"3224099584","3224099839","CA","CAN","CANADA" -"3224099840","3224100607","US","USA","UNITED STATES" -"3224101120","3224101375","US","USA","UNITED STATES" -"3224101376","3224102399","AU","AUS","AUSTRALIA" -"3224103424","3224103679","GB","GBR","UNITED KINGDOM" -"3224103680","3224104447","US","USA","UNITED STATES" -"3224104704","3224104959","AU","AUS","AUSTRALIA" -"3224104960","3224105471","US","USA","UNITED STATES" -"3224105728","3224106495","US","USA","UNITED STATES" -"3224106752","3224108799","US","USA","UNITED STATES" -"3224109056","3224119551","DE","DEU","GERMANY" -"3224119552","3224126463","FR","FRA","FRANCE" -"3224127232","3224129791","FR","FRA","FRANCE" -"3224129792","3224132351","DE","DEU","GERMANY" -"3224132352","3224170495","US","USA","UNITED STATES" -"3224170496","3224173567","SE","SWE","SWEDEN" -"3224173568","3224174335","US","USA","UNITED STATES" -"3224174592","3224258047","US","USA","UNITED STATES" -"3224258048","3224258303","FI","FIN","FINLAND" -"3224258304","3224258559","BE","BEL","BELGIUM" -"3224258560","3224305663","US","USA","UNITED STATES" -"3224305664","3224367615","JP","JPN","JAPAN" -"3224367616","3224368127","US","USA","UNITED STATES" -"3224368128","3224369663","CH","CHE","SWITZERLAND" -"3224369664","3224370431","US","USA","UNITED STATES" -"3224370688","3224370943","US","USA","UNITED STATES" -"3224371200","3224379135","US","USA","UNITED STATES" -"3224379136","3224379391","DE","DEU","GERMANY" -"3224379392","3224392191","US","USA","UNITED STATES" -"3224394752","3224396287","US","USA","UNITED STATES" -"3224396544","3224397055","US","USA","UNITED STATES" -"3224397824","3224398079","US","USA","UNITED STATES" -"3224398336","3224398591","US","USA","UNITED STATES" -"3224398592","3224398847","DE","DEU","GERMANY" -"3224398848","3224399103","US","USA","UNITED STATES" -"3224399104","3224399615","AU","AUS","AUSTRALIA" -"3224399616","3224406015","US","USA","UNITED STATES" -"3224406272","3224406527","US","USA","UNITED STATES" -"3224406784","3224407039","US","USA","UNITED STATES" -"3224407296","3224407551","CA","CAN","CANADA" -"3224407808","3224408319","US","USA","UNITED STATES" -"3224408320","3224408575","DE","DEU","GERMANY" -"3224408576","3224424959","US","USA","UNITED STATES" -"3224425216","3224427007","US","USA","UNITED STATES" -"3224427776","3224428287","US","USA","UNITED STATES" -"3224428544","3224428799","DE","DEU","GERMANY" -"3224428800","3224430079","US","USA","UNITED STATES" -"3224430336","3224430591","DE","DEU","GERMANY" -"3224430592","3224430847","US","USA","UNITED STATES" -"3224431104","3224431359","CA","CAN","CANADA" -"3224431360","3224431615","US","USA","UNITED STATES" -"3224432128","3224432383","US","USA","UNITED STATES" -"3224433152","3224433407","US","USA","UNITED STATES" -"3224433664","3224434687","US","USA","UNITED STATES" -"3224434688","3224434943","AU","AUS","AUSTRALIA" -"3224434944","3224435967","US","USA","UNITED STATES" -"3224436224","3224436479","US","USA","UNITED STATES" -"3224436736","3224502271","FI","FIN","FINLAND" -"3224502272","3224567807","JP","JPN","JAPAN" -"3224567808","3224571903","NO","NOR","NORWAY" -"3224571904","3224580095","JP","JPN","JAPAN" -"3224580352","3224615935","JP","JPN","JAPAN" -"3224616192","3224616959","JP","JPN","JAPAN" -"3224617472","3224629247","JP","JPN","JAPAN" -"3224629504","3224633343","JP","JPN","JAPAN" -"3224633344","3224646399","DE","DEU","GERMANY" -"3224646400","3224651775","US","USA","UNITED STATES" -"3224651776","3224652287","AU","AUS","AUSTRALIA" -"3224652800","3224660991","US","USA","UNITED STATES" -"3224660992","3224661247","CA","CAN","CANADA" -"3224661504","3224662527","US","USA","UNITED STATES" -"3224663040","3224663551","US","USA","UNITED STATES" -"3224663808","3224671999","JP","JPN","JAPAN" -"3224672000","3224672255","US","USA","UNITED STATES" -"3224672256","3224672511","NL","NLD","NETHERLANDS" -"3224672512","3224673791","US","USA","UNITED STATES" -"3224674048","3224674559","DE","DEU","GERMANY" -"3224674560","3224674815","GB","GBR","UNITED KINGDOM" -"3224675072","3224675839","US","USA","UNITED STATES" -"3224676864","3224677119","US","USA","UNITED STATES" -"3224677120","3224678655","AU","AUS","AUSTRALIA" -"3224678656","3224680703","US","USA","UNITED STATES" -"3224680704","3224680959","AU","AUS","AUSTRALIA" -"3224680960","3224681471","US","USA","UNITED STATES" -"3224682752","3224683519","US","USA","UNITED STATES" -"3224683520","3224684031","AU","AUS","AUSTRALIA" -"3224684032","3224689919","US","USA","UNITED STATES" -"3224689920","3224690687","NL","NLD","NETHERLANDS" -"3224690688","3224691455","US","USA","UNITED STATES" -"3224691968","3224692735","US","USA","UNITED STATES" -"3224692992","3224694527","US","USA","UNITED STATES" -"3224694528","3224694783","CA","CAN","CANADA" -"3224694784","3224695039","US","USA","UNITED STATES" -"3224695808","3224697343","US","USA","UNITED STATES" -"3224697856","3224698111","US","USA","UNITED STATES" -"3224698112","3224698367","GB","GBR","UNITED KINGDOM" -"3224698368","3224698623","FR","FRA","FRANCE" -"3224698880","3224725247","US","USA","UNITED STATES" -"3224725248","3224725503","DE","DEU","GERMANY" -"3224725504","3224725759","CH","CHE","SWITZERLAND" -"3224725760","3224772351","US","USA","UNITED STATES" -"3224772352","3224777983","DE","DEU","GERMANY" -"3224778240","3224785151","DE","DEU","GERMANY" -"3224785152","3224787967","US","USA","UNITED STATES" -"3224788480","3224791039","US","USA","UNITED STATES" -"3224791040","3224791295","DE","DEU","GERMANY" -"3224791296","3224791807","AU","AUS","AUSTRALIA" -"3224791808","3224793343","US","USA","UNITED STATES" -"3224793344","3224793599","DE","DEU","GERMANY" -"3224793600","3224793855","US","USA","UNITED STATES" -"3224793856","3224795391","DK","DNK","DENMARK" -"3224795392","3224795647","CA","CAN","CANADA" -"3224795648","3224795903","CH","CHE","SWITZERLAND" -"3224796160","3224796415","US","USA","UNITED STATES" -"3224796416","3224797439","DE","DEU","GERMANY" -"3224797440","3224797695","US","USA","UNITED STATES" -"3224797696","3224797951","NZ","NZL","NEW ZEALAND" -"3224797952","3224798207","US","USA","UNITED STATES" -"3224798208","3224798463","CH","CHE","SWITZERLAND" -"3224798464","3224798975","US","USA","UNITED STATES" -"3224798976","3224799231","AU","AUS","AUSTRALIA" -"3224799488","3224799743","AU","AUS","AUSTRALIA" -"3224799744","3224799999","US","USA","UNITED STATES" -"3224800000","3224800255","DE","DEU","GERMANY" -"3224800512","3224816639","FR","FRA","FRANCE" -"3224816896","3224820735","FR","FRA","FRANCE" -"3224820736","3224820991","AT","AUT","AUSTRIA" -"3224820992","3224821247","DE","DEU","GERMANY" -"3224821248","3224822015","US","USA","UNITED STATES" -"3224822016","3224822271","SE","SWE","SWEDEN" -"3224822272","3224822527","US","USA","UNITED STATES" -"3224822784","3224823039","US","USA","UNITED STATES" -"3224823296","3224826367","US","USA","UNITED STATES" -"3224826368","3224826623","CA","CAN","CANADA" -"3224826624","3224826879","US","USA","UNITED STATES" -"3224826880","3224827135","CH","CHE","SWITZERLAND" -"3224827136","3224827391","GB","GBR","UNITED KINGDOM" -"3224827392","3224827647","US","USA","UNITED STATES" -"3224827648","3224827903","JP","JPN","JAPAN" -"3224827904","3224828671","US","USA","UNITED STATES" -"3224828672","3224828927","AU","AUS","AUSTRALIA" -"3224829184","3224829439","US","USA","UNITED STATES" -"3224829440","3224829695","DE","DEU","GERMANY" -"3224830208","3224850943","US","USA","UNITED STATES" -"3224851200","3224851455","US","USA","UNITED STATES" -"3224851456","3224851711","DE","DEU","GERMANY" -"3224851968","3224852735","US","USA","UNITED STATES" -"3224852736","3224852991","DE","DEU","GERMANY" -"3224852992","3224854527","US","USA","UNITED STATES" -"3224854784","3224855039","US","USA","UNITED STATES" -"3224855040","3224855551","AU","AUS","AUSTRALIA" -"3224855552","3224855807","US","USA","UNITED STATES" -"3224855808","3224856063","IT","ITA","ITALY" -"3224856064","3224856575","US","USA","UNITED STATES" -"3224856832","3224857087","NL","NLD","NETHERLANDS" -"3224857088","3224857855","US","USA","UNITED STATES" -"3224858112","3224858367","JP","JPN","JAPAN" -"3224858368","3224858623","US","USA","UNITED STATES" -"3224858624","3224858879","AU","AUS","AUSTRALIA" -"3224858880","3224859391","US","USA","UNITED STATES" -"3224859392","3224859647","NL","NLD","NETHERLANDS" -"3224859648","3224860159","US","USA","UNITED STATES" -"3224860160","3224860415","JP","JPN","JAPAN" -"3224860928","3224862719","US","USA","UNITED STATES" -"3224862976","3224863231","NL","NLD","NETHERLANDS" -"3224863488","3224863743","US","USA","UNITED STATES" -"3224863744","3224863999","GB","GBR","UNITED KINGDOM" -"3224864000","3224878079","US","USA","UNITED STATES" -"3224878080","3224878335","DE","DEU","GERMANY" -"3224878336","3224878591","US","USA","UNITED STATES" -"3224878592","3224878847","AU","AUS","AUSTRALIA" -"3224879360","3224879615","GB","GBR","UNITED KINGDOM" -"3224879616","3224879871","CA","CAN","CANADA" -"3224879872","3224880383","US","USA","UNITED STATES" -"3224880384","3224880639","DE","DEU","GERMANY" -"3224880640","3224880895","AU","AUS","AUSTRALIA" -"3224880896","3224881151","US","USA","UNITED STATES" -"3224881408","3224882431","US","USA","UNITED STATES" -"3224882688","3224882943","CA","CAN","CANADA" -"3224882944","3224883455","US","USA","UNITED STATES" -"3224883456","3224883711","AU","AUS","AUSTRALIA" -"3224883712","3224884223","US","USA","UNITED STATES" -"3224884224","3224884479","GB","GBR","UNITED KINGDOM" -"3224884480","3224884991","US","USA","UNITED STATES" -"3224885248","3224885503","CA","CAN","CANADA" -"3224885760","3224886015","US","USA","UNITED STATES" -"3224886272","3224886527","JP","JPN","JAPAN" -"3224886528","3224887295","US","USA","UNITED STATES" -"3224887296","3224887551","CA","CAN","CANADA" -"3224887808","3224889087","US","USA","UNITED STATES" -"3224889344","3224889599","AU","AUS","AUSTRALIA" -"3224889600","3224890879","US","USA","UNITED STATES" -"3224890880","3224891135","JP","JPN","JAPAN" -"3224891136","3224891647","US","USA","UNITED STATES" -"3224892160","3224892415","CA","CAN","CANADA" -"3224892416","3224892671","DE","DEU","GERMANY" -"3224892928","3224893183","US","USA","UNITED STATES" -"3224893440","3224893951","US","USA","UNITED STATES" -"3224895488","3224900607","US","USA","UNITED STATES" -"3224900608","3224900863","FR","FRA","FRANCE" -"3224900864","3224921087","US","USA","UNITED STATES" -"3224921088","3224921343","FI","FIN","FINLAND" -"3224921344","3224928255","US","USA","UNITED STATES" -"3224928256","3224928511","FI","FIN","FINLAND" -"3224928512","3225026559","US","USA","UNITED STATES" -"3225026816","3225028863","US","USA","UNITED STATES" -"3225028864","3225031423","JP","JPN","JAPAN" -"3225031424","3225033727","US","USA","UNITED STATES" -"3225033728","3225035775","LU","LUX","LUXEMBOURG" -"3225035776","3225037055","US","USA","UNITED STATES" -"3225037056","3225049599","FI","FIN","FINLAND" -"3225051392","3225052671","JP","JPN","JAPAN" -"3225052672","3225056767","US","USA","UNITED STATES" -"3225057024","3225057535","US","USA","UNITED STATES" -"3225057536","3225057791","CA","CAN","CANADA" -"3225057792","3225060095","US","USA","UNITED STATES" -"3225060608","3225061631","AU","AUS","AUSTRALIA" -"3225064704","3225075967","US","USA","UNITED STATES" -"3225076224","3225076479","CA","CAN","CANADA" -"3225076480","3225076991","US","USA","UNITED STATES" -"3225076992","3225077247","SE","SWE","SWEDEN" -"3225077504","3225081087","US","USA","UNITED STATES" -"3225081088","3225081343","CA","CAN","CANADA" -"3225081600","3225082367","US","USA","UNITED STATES" -"3225082368","3225082623","IT","ITA","ITALY" -"3225082880","3225084671","US","USA","UNITED STATES" -"3225084672","3225085439","NL","NLD","NETHERLANDS" -"3225085440","3225089279","US","USA","UNITED STATES" -"3225089280","3225089535","CA","CAN","CANADA" -"3225089536","3225091071","US","USA","UNITED STATES" -"3225091584","3225091839","US","USA","UNITED STATES" -"3225092096","3225419775","US","USA","UNITED STATES" -"3225420032","3225420287","US","USA","UNITED STATES" -"3225423872","3225424383","US","USA","UNITED STATES" -"3225426944","3225427199","AT","AUT","AUSTRIA" -"3225429504","3225429759","CA","CAN","CANADA" -"3225431552","3225433087","US","USA","UNITED STATES" -"3225437184","3225437695","US","USA","UNITED STATES" -"3225442304","3225442559","US","USA","UNITED STATES" -"3225444352","3225444607","US","USA","UNITED STATES" -"3225445376","3225446399","BE","BEL","BELGIUM" -"3225451776","3225452031","SE","SWE","SWEDEN" -"3225459968","3225460479","US","USA","UNITED STATES" -"3225460480","3225460735","CA","CAN","CANADA" -"3225460992","3225462015","CA","CAN","CANADA" -"3225470464","3225470719","US","USA","UNITED STATES" -"3225471488","3225471743","DE","DEU","GERMANY" -"3225471744","3225472511","US","USA","UNITED STATES" -"3225477632","3225480191","US","USA","UNITED STATES" -"3225485568","3225498111","US","USA","UNITED STATES" -"3225498368","3225503487","NL","NLD","NETHERLANDS" -"3225503488","3225505535","US","USA","UNITED STATES" -"3225505792","3225506047","US","USA","UNITED STATES" -"3225506304","3225508863","AU","AUS","AUSTRALIA" -"3225508864","3225509631","CH","CHE","SWITZERLAND" -"3225509632","3225509887","US","USA","UNITED STATES" -"3225509888","3225510143","NL","NLD","NETHERLANDS" -"3225510144","3225518591","US","USA","UNITED STATES" -"3225518592","3225518847","AU","AUS","AUSTRALIA" -"3225518848","3225519103","IT","ITA","ITALY" -"3225519104","3225519359","GB","GBR","UNITED KINGDOM" -"3225519872","3225520639","US","USA","UNITED STATES" -"3225520896","3225521151","DE","DEU","GERMANY" -"3225521152","3225522175","US","USA","UNITED STATES" -"3225522176","3225522943","GB","GBR","UNITED KINGDOM" -"3225522944","3225524223","US","USA","UNITED STATES" -"3225524224","3225524479","VE","VEN","VENEZUELA" -"3225524480","3225524735","GB","GBR","UNITED KINGDOM" -"3225529088","3225529343","US","USA","UNITED STATES" -"3225529600","3225530367","US","USA","UNITED STATES" -"3225530368","3225530623","PR","PRI","PUERTO RICO" -"3225530624","3225530879","US","USA","UNITED STATES" -"3225531136","3225531647","US","USA","UNITED STATES" -"3225531904","3225532159","AU","AUS","AUSTRALIA" -"3225532160","3225535999","CH","CHE","SWITZERLAND" -"3225536000","3225539839","US","USA","UNITED STATES" -"3225540096","3225540863","US","USA","UNITED STATES" -"3225540864","3225541119","AU","AUS","AUSTRALIA" -"3225541120","3225541375","US","USA","UNITED STATES" -"3225541376","3225543935","GB","GBR","UNITED KINGDOM" -"3225547776","3225548543","US","USA","UNITED STATES" -"3225548800","3225549055","NZ","NZL","NEW ZEALAND" -"3225549056","3225549311","US","USA","UNITED STATES" -"3225549312","3225549567","AU","AUS","AUSTRALIA" -"3225549568","3225550591","US","USA","UNITED STATES" -"3225550848","3225616383","DK","DNK","DENMARK" -"3225616640","3225616895","AU","AUS","AUSTRALIA" -"3225617152","3225617407","IE","IRL","IRELAND" -"3225617408","3225617663","GB","GBR","UNITED KINGDOM" -"3225617920","3225618175","US","USA","UNITED STATES" -"3225618432","3225618687","US","USA","UNITED STATES" -"3225618688","3225618943","CA","CAN","CANADA" -"3225619200","3225619455","US","USA","UNITED STATES" -"3225619456","3225619711","AU","AUS","AUSTRALIA" -"3225619712","3225622527","US","USA","UNITED STATES" -"3225626368","3225626623","GB","GBR","UNITED KINGDOM" -"3225626880","3225627391","US","USA","UNITED STATES" -"3225627392","3225627647","GB","GBR","UNITED KINGDOM" -"3225627648","3225627903","US","USA","UNITED STATES" -"3225627904","3225628159","CA","CAN","CANADA" -"3225628160","3225628415","US","USA","UNITED STATES" -"3225628416","3225628671","GB","GBR","UNITED KINGDOM" -"3225628672","3225629183","US","USA","UNITED STATES" -"3225629184","3225629439","GB","GBR","UNITED KINGDOM" -"3225629440","3225629695","US","USA","UNITED STATES" -"3225629696","3225629951","GB","GBR","UNITED KINGDOM" -"3225629952","3225630207","US","USA","UNITED STATES" -"3225630464","3225630719","DE","DEU","GERMANY" -"3225630720","3225631231","US","USA","UNITED STATES" -"3225631232","3225631487","SE","SWE","SWEDEN" -"3225631488","3225632767","US","USA","UNITED STATES" -"3225633536","3225633791","US","USA","UNITED STATES" -"3225634048","3225634815","US","USA","UNITED STATES" -"3225635072","3225635583","US","USA","UNITED STATES" -"3225635840","3225636095","PT","PRT","PORTUGAL" -"3225636096","3225636607","US","USA","UNITED STATES" -"3225636608","3225636863","ES","ESP","SPAIN" -"3225636864","3225637887","US","USA","UNITED STATES" -"3225637888","3225638399","AU","AUS","AUSTRALIA" -"3225638400","3225638655","US","USA","UNITED STATES" -"3225638656","3225638911","GB","GBR","UNITED KINGDOM" -"3225639424","3225640447","US","USA","UNITED STATES" -"3225640448","3225640703","GB","GBR","UNITED KINGDOM" -"3225640704","3225641983","US","USA","UNITED STATES" -"3225641984","3225643263","GB","GBR","UNITED KINGDOM" -"3225643264","3225643775","CA","CAN","CANADA" -"3225643776","3225649919","US","USA","UNITED STATES" -"3225650176","3225650943","US","USA","UNITED STATES" -"3225650944","3225651199","GB","GBR","UNITED KINGDOM" -"3225651200","3225657087","US","USA","UNITED STATES" -"3225658624","3225659135","US","USA","UNITED STATES" -"3225659136","3225659391","DE","DEU","GERMANY" -"3225659392","3225659647","NZ","NZL","NEW ZEALAND" -"3225659904","3225660159","DE","DEU","GERMANY" -"3225660160","3225660415","AU","AUS","AUSTRALIA" -"3225660672","3225663743","US","USA","UNITED STATES" -"3225664000","3225664511","US","USA","UNITED STATES" -"3225664768","3225669887","DE","DEU","GERMANY" -"3225669888","3225671935","US","USA","UNITED STATES" -"3225671936","3225672191","AU","AUS","AUSTRALIA" -"3225672192","3225672447","DE","DEU","GERMANY" -"3225672448","3225672703","US","USA","UNITED STATES" -"3225672704","3225673215","NL","NLD","NETHERLANDS" -"3225673472","3225673727","IE","IRL","IRELAND" -"3225673984","3225679871","US","USA","UNITED STATES" -"3225679872","3225680127","AU","AUS","AUSTRALIA" -"3225680128","3225680383","GR","GRC","GREECE" -"3225680640","3225681151","US","USA","UNITED STATES" -"3225681408","3225681663","US","USA","UNITED STATES" -"3225681920","3225682943","DE","DEU","GERMANY" -"3225682944","3225683199","AT","AUT","AUSTRIA" -"3225683200","3225687039","DE","DEU","GERMANY" -"3225687040","3225687807","US","USA","UNITED STATES" -"3225687808","3225688063","GB","GBR","UNITED KINGDOM" -"3225688320","3225689343","US","USA","UNITED STATES" -"3225689600","3225689855","US","USA","UNITED STATES" -"3225689856","3225694975","NL","NLD","NETHERLANDS" -"3225695232","3225695487","US","USA","UNITED STATES" -"3225695488","3225701119","CA","CAN","CANADA" -"3225701120","3225701375","US","USA","UNITED STATES" -"3225701376","3225709567","NO","NOR","NORWAY" -"3225709568","3225710079","US","USA","UNITED STATES" -"3225710080","3225710591","JP","JPN","JAPAN" -"3225710592","3225711615","US","USA","UNITED STATES" -"3225712128","3225714175","US","USA","UNITED STATES" -"3225715456","3225715711","CA","CAN","CANADA" -"3225715712","3225715967","AU","AUS","AUSTRALIA" -"3225715968","3225716991","US","USA","UNITED STATES" -"3225716992","3225717247","CA","CAN","CANADA" -"3225717504","3225717759","AU","AUS","AUSTRALIA" -"3225717760","3225720063","US","USA","UNITED STATES" -"3225720576","3225721343","GB","GBR","UNITED KINGDOM" -"3225721344","3225722111","US","USA","UNITED STATES" -"3225722624","3225723647","US","USA","UNITED STATES" -"3225724160","3225725439","DE","DEU","GERMANY" -"3225725440","3225725695","GB","GBR","UNITED KINGDOM" -"3225725696","3225726207","AU","AUS","AUSTRALIA" -"3225726208","3225726463","US","USA","UNITED STATES" -"3225726464","3225726719","GB","GBR","UNITED KINGDOM" -"3225726720","3225726975","US","USA","UNITED STATES" -"3225726976","3225727231","IT","ITA","ITALY" -"3225727232","3225727487","US","USA","UNITED STATES" -"3225727744","3225727999","AU","AUS","AUSTRALIA" -"3225728000","3225728511","US","USA","UNITED STATES" -"3225728512","3225728767","NL","NLD","NETHERLANDS" -"3225728768","3225729023","US","USA","UNITED STATES" -"3225729024","3225729279","CA","CAN","CANADA" -"3225729280","3225729535","US","USA","UNITED STATES" -"3225729536","3225729791","PT","PRT","PORTUGAL" -"3225729792","3225730047","US","USA","UNITED STATES" -"3225730304","3225730559","US","USA","UNITED STATES" -"3225730816","3225733887","US","USA","UNITED STATES" -"3225734144","3225735167","US","USA","UNITED STATES" -"3225735424","3225735679","PT","PRT","PORTUGAL" -"3225735680","3225735935","US","USA","UNITED STATES" -"3225735936","3225737215","DE","DEU","GERMANY" -"3225737216","3225737471","PT","PRT","PORTUGAL" -"3225737472","3225738495","US","USA","UNITED STATES" -"3225738496","3225738751","PT","PRT","PORTUGAL" -"3225738752","3225739263","US","USA","UNITED STATES" -"3225739264","3225739519","PT","PRT","PORTUGAL" -"3225739520","3225740543","US","USA","UNITED STATES" -"3225740544","3225740799","CA","CAN","CANADA" -"3225740800","3225741055","NL","NLD","NETHERLANDS" -"3225741056","3225741823","US","USA","UNITED STATES" -"3225742080","3225745919","JP","JPN","JAPAN" -"3225745920","3225746687","NL","NLD","NETHERLANDS" -"3225746688","3225746943","US","USA","UNITED STATES" -"3225746944","3225747199","DE","DEU","GERMANY" -"3225747456","3225747711","US","USA","UNITED STATES" -"3225752832","3225753087","US","USA","UNITED STATES" -"3225759232","3225759487","US","USA","UNITED STATES" -"3225763840","3225764095","BE","BEL","BELGIUM" -"3225766400","3225766655","CA","CAN","CANADA" -"3225767936","3225768191","US","USA","UNITED STATES" -"3225768960","3225769215","US","USA","UNITED STATES" -"3225773312","3225773567","CA","CAN","CANADA" -"3225776128","3225776383","US","USA","UNITED STATES" -"3225777152","3225777407","AU","AUS","AUSTRALIA" -"3225777408","3225777663","US","USA","UNITED STATES" -"3225780224","3225780479","US","USA","UNITED STATES" -"3225783296","3225783551","US","USA","UNITED STATES" -"3225783808","3225784063","US","USA","UNITED STATES" -"3225785600","3225788159","CA","CAN","CANADA" -"3225796096","3225796351","US","USA","UNITED STATES" -"3225806080","3225806847","US","USA","UNITED STATES" -"3225807360","3225807615","DE","DEU","GERMANY" -"3225810688","3225810943","US","USA","UNITED STATES" -"3225812992","3225827071","FR","FRA","FRANCE" -"3225827072","3225827327","US","USA","UNITED STATES" -"3225827328","3225843711","FR","FRA","FRANCE" -"3225843712","3225846527","US","USA","UNITED STATES" -"3225846784","3225847039","US","USA","UNITED STATES" -"3225847040","3225847551","TR","TUR","TURKEY" -"3225847552","3225847807","AU","AUS","AUSTRALIA" -"3225847808","3225848063","IT","ITA","ITALY" -"3225848064","3225848831","US","USA","UNITED STATES" -"3225848832","3225853951","DE","DEU","GERMANY" -"3225853952","3225854719","US","USA","UNITED STATES" -"3225855232","3225857023","US","USA","UNITED STATES" -"3225857024","3225857279","CA","CAN","CANADA" -"3225857280","3225857535","US","USA","UNITED STATES" -"3225857536","3225857791","AU","AUS","AUSTRALIA" -"3225857792","3225858047","US","USA","UNITED STATES" -"3225858048","3225858559","CA","CAN","CANADA" -"3225858560","3225858815","US","USA","UNITED STATES" -"3225858816","3225860095","JP","JPN","JAPAN" -"3225860096","3225861887","US","USA","UNITED STATES" -"3225862144","3225867775","US","USA","UNITED STATES" -"3225868032","3225868287","US","USA","UNITED STATES" -"3225868288","3225868543","AU","AUS","AUSTRALIA" -"3225868544","3225869055","US","USA","UNITED STATES" -"3225869056","3225869311","AU","AUS","AUSTRALIA" -"3225869568","3225870335","US","USA","UNITED STATES" -"3225870336","3225870591","CA","CAN","CANADA" -"3225870592","3225873663","US","USA","UNITED STATES" -"3225873920","3225874943","US","USA","UNITED STATES" -"3225874944","3225875199","GB","GBR","UNITED KINGDOM" -"3225875456","3225875967","US","USA","UNITED STATES" -"3225876480","3225878271","US","USA","UNITED STATES" -"3225878528","3225880319","SE","SWE","SWEDEN" -"3225880320","3225880575","US","USA","UNITED STATES" -"3225880576","3225944063","SE","SWE","SWEDEN" -"3225944832","3226008831","TW","TWN","TAIWAN" -"3226008832","3226009343","US","USA","UNITED STATES" -"3226009856","3226010879","US","USA","UNITED STATES" -"3226010880","3226011135","CA","CAN","CANADA" -"3226011136","3226012415","US","USA","UNITED STATES" -"3226012672","3226012927","AU","AUS","AUSTRALIA" -"3226012928","3226014207","US","USA","UNITED STATES" -"3226014464","3226014975","GB","GBR","UNITED KINGDOM" -"3226014976","3226015231","NZ","NZL","NEW ZEALAND" -"3226015232","3226015487","AU","AUS","AUSTRALIA" -"3226015744","3226016255","ID","IDN","INDONESIA" -"3226016256","3226018303","US","USA","UNITED STATES" -"3226018304","3226018559","DE","DEU","GERMANY" -"3226018560","3226021119","CH","CHE","SWITZERLAND" -"3226021120","3226023423","US","USA","UNITED STATES" -"3226023680","3226026495","US","USA","UNITED STATES" -"3226026496","3226026751","AU","AUS","AUSTRALIA" -"3226026752","3226030079","US","USA","UNITED STATES" -"3226030592","3226064383","US","USA","UNITED STATES" -"3226064640","3226066687","US","USA","UNITED STATES" -"3226066944","3226067455","US","USA","UNITED STATES" -"3226067456","3226067711","BE","BEL","BELGIUM" -"3226067712","3226068223","US","USA","UNITED STATES" -"3226068224","3226068479","GB","GBR","UNITED KINGDOM" -"3226068480","3226068991","US","USA","UNITED STATES" -"3226075136","3226107647","US","USA","UNITED STATES" -"3226110208","3226110719","US","USA","UNITED STATES" -"3226110720","3226128639","AU","AUS","AUSTRALIA" -"3226128640","3226131455","US","USA","UNITED STATES" -"3226140928","3226143487","CA","CAN","CANADA" -"3226143744","3226156543","CA","CAN","CANADA" -"3226156800","3226157567","CA","CAN","CANADA" -"3226157568","3226157823","US","USA","UNITED STATES" -"3226157824","3226167807","CA","CAN","CANADA" -"3226168064","3226175231","CA","CAN","CANADA" -"3226175744","3226188543","CA","CAN","CANADA" -"3226189056","3226189311","CA","CAN","CANADA" -"3226189568","3226189823","CA","CAN","CANADA" -"3226191360","3226191615","US","USA","UNITED STATES" -"3226191872","3226194175","CA","CAN","CANADA" -"3226194432","3226194687","CA","CAN","CANADA" -"3226194944","3226201855","CA","CAN","CANADA" -"3226201856","3226202111","US","USA","UNITED STATES" -"3226202112","3226205439","CA","CAN","CANADA" -"3226205440","3226205695","AE","ARE","UNITED ARAB EMIRATES" -"3226205696","3226205951","CA","CAN","CANADA" -"3226207744","3226215423","GB","GBR","UNITED KINGDOM" -"3226215424","3226236159","US","USA","UNITED STATES" -"3226237184","3226237439","US","USA","UNITED STATES" -"3226237440","3226237695","AU","AUS","AUSTRALIA" -"3226237696","3226240255","DE","DEU","GERMANY" -"3226240512","3226250495","DE","DEU","GERMANY" -"3226250496","3226251263","US","USA","UNITED STATES" -"3226251264","3226251519","DE","DEU","GERMANY" -"3226251520","3226252287","US","USA","UNITED STATES" -"3226252544","3226253567","US","USA","UNITED STATES" -"3226253824","3226267903","US","USA","UNITED STATES" -"3226267904","3226268159","DE","DEU","GERMANY" -"3226268160","3226268415","PT","PRT","PORTUGAL" -"3226268416","3226268927","AT","AUT","AUSTRIA" -"3226268928","3226269951","DE","DEU","GERMANY" -"3226269952","3226270719","US","USA","UNITED STATES" -"3226270720","3226271487","JP","JPN","JAPAN" -"3226272000","3226273791","US","USA","UNITED STATES" -"3226273792","3226274047","AU","AUS","AUSTRALIA" -"3226274048","3226274559","US","USA","UNITED STATES" -"3226274560","3226274815","CH","CHE","SWITZERLAND" -"3226274816","3226276095","US","USA","UNITED STATES" -"3226276096","3226276351","AU","AUS","AUSTRALIA" -"3226276352","3226276863","US","USA","UNITED STATES" -"3226277632","3226283519","US","USA","UNITED STATES" -"3226283520","3226291199","CA","CAN","CANADA" -"3226291200","3226300159","US","USA","UNITED STATES" -"3226300416","3226300927","US","USA","UNITED STATES" -"3226300928","3226301439","DE","DEU","GERMANY" -"3226301440","3226302463","US","USA","UNITED STATES" -"3226302464","3226303487","FI","FIN","FINLAND" -"3226303488","3226304511","US","USA","UNITED STATES" -"3226304768","3226305535","US","USA","UNITED STATES" -"3226305536","3226307327","GB","GBR","UNITED KINGDOM" -"3226307328","3226307583","US","USA","UNITED STATES" -"3226307584","3226308095","ES","ESP","SPAIN" -"3226308096","3226308863","US","USA","UNITED STATES" -"3226309120","3226316799","US","USA","UNITED STATES" -"3226318080","3226318335","US","USA","UNITED STATES" -"3226319360","3226319615","US","USA","UNITED STATES" -"3226320896","3226331903","US","USA","UNITED STATES" -"3226337536","3226365439","US","USA","UNITED STATES" -"3226365440","3226365951","DE","DEU","GERMANY" -"3226365952","3226374143","US","USA","UNITED STATES" -"3226374144","3226375423","DE","DEU","GERMANY" -"3226375424","3226468351","US","USA","UNITED STATES" -"3226470656","3226473471","US","USA","UNITED STATES" -"3226473472","3226473983","PT","PRT","PORTUGAL" -"3226473984","3226474495","US","USA","UNITED STATES" -"3226474496","3226474751","CL","CHL","CHILE" -"3226475264","3226475519","US","USA","UNITED STATES" -"3226475776","3226476287","US","USA","UNITED STATES" -"3226476288","3226479359","CH","CHE","SWITZERLAND" -"3226479360","3226479871","US","USA","UNITED STATES" -"3226480128","3226480383","GB","GBR","UNITED KINGDOM" -"3226480384","3226481407","US","USA","UNITED STATES" -"3226481408","3226481663","DE","DEU","GERMANY" -"3226481664","3226483199","US","USA","UNITED STATES" -"3226483968","3226484479","US","USA","UNITED STATES" -"3226484736","3226487295","US","USA","UNITED STATES" -"3226488064","3226488831","US","USA","UNITED STATES" -"3226489088","3226490879","US","USA","UNITED STATES" -"3226491904","3226492927","US","USA","UNITED STATES" -"3226521344","3226521855","US","USA","UNITED STATES" -"3226521856","3226522111","BR","BRA","BRAZIL" -"3226522112","3226523135","US","USA","UNITED STATES" -"3226523392","3226533631","US","USA","UNITED STATES" -"3226535936","3226536191","US","USA","UNITED STATES" -"3226546176","3226546431","US","USA","UNITED STATES" -"3226548992","3226549247","BE","BEL","BELGIUM" -"3226549504","3226550015","GB","GBR","UNITED KINGDOM" -"3226551040","3226551807","US","USA","UNITED STATES" -"3226552832","3226553087","US","USA","UNITED STATES" -"3226555648","3226555903","CA","CAN","CANADA" -"3226556416","3226556671","US","USA","UNITED STATES" -"3226558720","3226558975","US","USA","UNITED STATES" -"3226561792","3226562047","NO","NOR","NORWAY" -"3226563072","3226563327","US","USA","UNITED STATES" -"3226564864","3226565119","DE","DEU","GERMANY" -"3226565376","3226565631","FI","FIN","FINLAND" -"3226569984","3226570239","US","USA","UNITED STATES" -"3226574848","3226575103","FI","FIN","FINLAND" -"3226576384","3226576639","US","USA","UNITED STATES" -"3226580480","3226581247","FI","FIN","FINLAND" -"3226582528","3226582783","US","USA","UNITED STATES" -"3226583040","3226583295","US","USA","UNITED STATES" -"3226583552","3226583807","SE","SWE","SWEDEN" -"3226592768","3226593023","DE","DEU","GERMANY" -"3226593792","3226594047","GB","GBR","UNITED KINGDOM" -"3226598400","3226598911","US","USA","UNITED STATES" -"3226599424","3226625535","US","USA","UNITED STATES" -"3226625792","3226626047","US","USA","UNITED STATES" -"3226626048","3226626303","CA","CAN","CANADA" -"3226626304","3226627327","US","USA","UNITED STATES" -"3226627584","3226629375","US","USA","UNITED STATES" -"3226629376","3226629631","CA","CAN","CANADA" -"3226629632","3226630399","US","USA","UNITED STATES" -"3226630400","3226630655","GB","GBR","UNITED KINGDOM" -"3226630912","3226631167","US","USA","UNITED STATES" -"3226631168","3226631423","CH","CHE","SWITZERLAND" -"3226631424","3226631935","US","USA","UNITED STATES" -"3226631936","3226632191","PT","PRT","PORTUGAL" -"3226632192","3226633215","CA","CAN","CANADA" -"3226633216","3226633471","JP","JPN","JAPAN" -"3226635008","3226635263","US","USA","UNITED STATES" -"3226635264","3226635519","AU","AUS","AUSTRALIA" -"3226635520","3226635775","US","USA","UNITED STATES" -"3226636032","3226636287","AU","AUS","AUSTRALIA" -"3226637056","3226637823","US","USA","UNITED STATES" -"3226637824","3226638079","CA","CAN","CANADA" -"3226638080","3226638335","US","USA","UNITED STATES" -"3226638592","3226638847","GB","GBR","UNITED KINGDOM" -"3226638848","3226639615","US","USA","UNITED STATES" -"3226639616","3226640127","AT","AUT","AUSTRIA" -"3226640128","3226640639","US","USA","UNITED STATES" -"3226640640","3226640895","AU","AUS","AUSTRALIA" -"3226640896","3226654207","US","USA","UNITED STATES" -"3226654208","3226654463","PT","PRT","PORTUGAL" -"3226654464","3226655743","US","USA","UNITED STATES" -"3226655744","3226656255","IT","ITA","ITALY" -"3226656256","3226656511","AU","AUS","AUSTRALIA" -"3226656512","3226658303","US","USA","UNITED STATES" -"3226658304","3226658559","AU","AUS","AUSTRALIA" -"3226658560","3226658815","US","USA","UNITED STATES" -"3226659072","3226661119","US","USA","UNITED STATES" -"3226661120","3226661375","DE","DEU","GERMANY" -"3226661888","3226662143","US","USA","UNITED STATES" -"3226664960","3226690815","FI","FIN","FINLAND" -"3226690816","3226691071","CA","CAN","CANADA" -"3226691072","3226691327","GB","GBR","UNITED KINGDOM" -"3226691584","3226691839","JP","JPN","JAPAN" -"3226691840","3226693119","US","USA","UNITED STATES" -"3226693376","3226693887","US","USA","UNITED STATES" -"3226694144","3226695167","US","USA","UNITED STATES" -"3226695168","3226695679","AU","AUS","AUSTRALIA" -"3226695680","3226695935","US","USA","UNITED STATES" -"3226695936","3226696191","CA","CAN","CANADA" -"3226696192","3226696447","CN","CHN","CHINA" -"3226696448","3226696703","AU","AUS","AUSTRALIA" -"3226705152","3226705407","JP","JPN","JAPAN" -"3226705408","3226705919","US","USA","UNITED STATES" -"3226705920","3226706175","FR","FRA","FRANCE" -"3226706176","3226706943","US","USA","UNITED STATES" -"3226707456","3226715391","TW","TWN","TAIWAN" -"3226715392","3226715647","US","USA","UNITED STATES" -"3226715648","3226715903","AU","AUS","AUSTRALIA" -"3226715904","3226716159","US","USA","UNITED STATES" -"3226716160","3226716415","GB","GBR","UNITED KINGDOM" -"3226716672","3226716927","GB","GBR","UNITED KINGDOM" -"3226716928","3226717439","US","USA","UNITED STATES" -"3226717696","3226717951","US","USA","UNITED STATES" -"3226717952","3226720511","GB","GBR","UNITED KINGDOM" -"3226720512","3226721279","JP","JPN","JAPAN" -"3226721280","3226721791","US","USA","UNITED STATES" -"3226722048","3226722303","CH","CHE","SWITZERLAND" -"3226722304","3226722559","AU","AUS","AUSTRALIA" -"3226722560","3226723583","US","USA","UNITED STATES" -"3226723584","3226723839","DE","DEU","GERMANY" -"3226723840","3226724095","JP","JPN","JAPAN" -"3226724096","3226724351","AU","AUS","AUSTRALIA" -"3226724352","3226725631","US","USA","UNITED STATES" -"3226725632","3226726143","AU","AUS","AUSTRALIA" -"3226726144","3226728191","US","USA","UNITED STATES" -"3226728192","3226728447","CA","CAN","CANADA" -"3226728448","3226729983","US","USA","UNITED STATES" -"3226731008","3226731519","US","USA","UNITED STATES" -"3226731776","3226732031","GB","GBR","UNITED KINGDOM" -"3226732288","3226733567","US","USA","UNITED STATES" -"3226733568","3226733823","MX","MEX","MEXICO" -"3226733824","3226734079","PT","PRT","PORTUGAL" -"3226734080","3226734335","US","USA","UNITED STATES" -"3226734336","3226734591","PT","PRT","PORTUGAL" -"3226734592","3226736383","US","USA","UNITED STATES" -"3226736640","3226737407","US","USA","UNITED STATES" -"3226737408","3226737663","AT","AUT","AUSTRIA" -"3226737664","3226738175","US","USA","UNITED STATES" -"3226738176","3226738431","NL","NLD","NETHERLANDS" -"3226738432","3226738687","US","USA","UNITED STATES" -"3226738688","3226739199","NO","NOR","NORWAY" -"3226740736","3226742783","US","USA","UNITED STATES" -"3226744576","3226746367","US","USA","UNITED STATES" -"3226746368","3226746623","PT","PRT","PORTUGAL" -"3226746624","3226748671","US","USA","UNITED STATES" -"3226748672","3226749439","JP","JPN","JAPAN" -"3226749440","3226749695","US","USA","UNITED STATES" -"3226749696","3226752255","GB","GBR","UNITED KINGDOM" -"3226752256","3226752767","US","USA","UNITED STATES" -"3226752768","3226753023","IT","ITA","ITALY" -"3226753024","3226753279","US","USA","UNITED STATES" -"3226753280","3226753535","AU","AUS","AUSTRALIA" -"3226753536","3226753791","SI","SVN","SLOVENIA" -"3226753792","3226754303","HR","HRV","CROATIA" -"3226754304","3226756095","SI","SVN","SLOVENIA" -"3226756352","3226757375","SI","SVN","SLOVENIA" -"3226757376","3226757887","HR","HRV","CROATIA" -"3226757888","3226758655","SI","SVN","SLOVENIA" -"3226758912","3226762751","US","USA","UNITED STATES" -"3226763008","3226770687","IT","ITA","ITALY" -"3226770688","3226772991","US","USA","UNITED STATES" -"3226772992","3226773247","CH","CHE","SWITZERLAND" -"3226773248","3226774783","US","USA","UNITED STATES" -"3226774784","3226775039","GB","GBR","UNITED KINGDOM" -"3226775040","3226775295","US","USA","UNITED STATES" -"3226775552","3226783743","FI","FIN","FINLAND" -"3226783744","3226783999","US","USA","UNITED STATES" -"3226784256","3226784767","US","USA","UNITED STATES" -"3226784768","3226785023","GB","GBR","UNITED KINGDOM" -"3226785024","3226786559","US","USA","UNITED STATES" -"3226786560","3226786815","AU","AUS","AUSTRALIA" -"3226786816","3226787071","DE","DEU","GERMANY" -"3226787072","3226787327","AT","AUT","AUSTRIA" -"3226787328","3226788095","US","USA","UNITED STATES" -"3226788352","3226789375","HU","HUN","HUNGARY" -"3226789376","3226789631","AU","AUS","AUSTRALIA" -"3226789632","3226791167","US","USA","UNITED STATES" -"3226791168","3226791679","AU","AUS","AUSTRALIA" -"3226791680","3226792191","US","USA","UNITED STATES" -"3226792192","3226792703","AU","AUS","AUSTRALIA" -"3226792704","3226792959","US","USA","UNITED STATES" -"3226793216","3226793983","DE","DEU","GERMANY" -"3226793984","3226794239","US","USA","UNITED STATES" -"3226794496","3226795263","US","USA","UNITED STATES" -"3226795264","3226795519","NZ","NZL","NEW ZEALAND" -"3226795520","3226795775","US","USA","UNITED STATES" -"3226796032","3226861567","US","USA","UNITED STATES" -"3226861824","3226862079","CA","CAN","CANADA" -"3226862080","3226864383","US","USA","UNITED STATES" -"3226864384","3226864639","RU","RUS","RUSSIAN FEDERATION" -"3226864640","3226864895","NZ","NZL","NEW ZEALAND" -"3226864896","3226865151","US","USA","UNITED STATES" -"3226865152","3226865407","PL","POL","POLAND" -"3226865408","3226866175","US","USA","UNITED STATES" -"3226866176","3226866431","GB","GBR","UNITED KINGDOM" -"3226866432","3226866943","US","USA","UNITED STATES" -"3226867456","3226867967","US","USA","UNITED STATES" -"3226867968","3226868223","IL","ISR","ISRAEL" -"3226868224","3226868479","US","USA","UNITED STATES" -"3226868480","3226868735","GB","GBR","UNITED KINGDOM" -"3226868736","3226882303","US","USA","UNITED STATES" -"3226882560","3226884351","US","USA","UNITED STATES" -"3226884352","3226884607","IL","ISR","ISRAEL" -"3226884608","3226892799","US","USA","UNITED STATES" -"3226893056","3226893567","US","USA","UNITED STATES" -"3226893568","3226894079","NL","NLD","NETHERLANDS" -"3226894080","3226894335","GB","GBR","UNITED KINGDOM" -"3226894336","3226894591","US","USA","UNITED STATES" -"3226894592","3226894847","AU","AUS","AUSTRALIA" -"3226895104","3226895359","US","USA","UNITED STATES" -"3226895360","3226895871","SG","SGP","SINGAPORE" -"3226895872","3226896127","GB","GBR","UNITED KINGDOM" -"3226896128","3226896639","US","USA","UNITED STATES" -"3226896640","3226896895","GB","GBR","UNITED KINGDOM" -"3226896896","3226897151","PT","PRT","PORTUGAL" -"3226897152","3226902527","US","USA","UNITED STATES" -"3226903040","3226903295","US","USA","UNITED STATES" -"3226903296","3226903551","DE","DEU","GERMANY" -"3226903552","3226903807","US","USA","UNITED STATES" -"3226903808","3226904063","AU","AUS","AUSTRALIA" -"3226904064","3226904319","CH","CHE","SWITZERLAND" -"3226904320","3226904575","FR","FRA","FRANCE" -"3226904576","3226904831","US","USA","UNITED STATES" -"3226904832","3226905087","GB","GBR","UNITED KINGDOM" -"3226905088","3226926591","US","USA","UNITED STATES" -"3226926592","3226926847","SE","SWE","SWEDEN" -"3226927104","3226992639","NL","NLD","NETHERLANDS" -"3226992896","3226993151","CH","CHE","SWITZERLAND" -"3226993152","3226993663","US","USA","UNITED STATES" -"3226993664","3226993919","DE","DEU","GERMANY" -"3226993920","3226994175","US","USA","UNITED STATES" -"3226994176","3226994687","AU","AUS","AUSTRALIA" -"3226994688","3226994943","US","USA","UNITED STATES" -"3226994944","3226995455","GB","GBR","UNITED KINGDOM" -"3226995456","3226996479","US","USA","UNITED STATES" -"3226996992","3226997247","PT","PRT","PORTUGAL" -"3226998016","3226998527","US","USA","UNITED STATES" -"3226998528","3226999039","AT","AUT","AUSTRIA" -"3226999040","3227005439","US","USA","UNITED STATES" -"3227005696","3227013119","US","USA","UNITED STATES" -"3227013120","3227013375","JP","JPN","JAPAN" -"3227013376","3227013887","US","USA","UNITED STATES" -"3227013888","3227014399","GB","GBR","UNITED KINGDOM" -"3227014400","3227014655","NZ","NZL","NEW ZEALAND" -"3227014656","3227014911","FI","FIN","FINLAND" -"3227014912","3227017215","US","USA","UNITED STATES" -"3227017472","3227017983","DE","DEU","GERMANY" -"3227017984","3227018239","US","USA","UNITED STATES" -"3227018752","3227019007","JP","JPN","JAPAN" -"3227019008","3227020287","US","USA","UNITED STATES" -"3227020288","3227020543","DE","DEU","GERMANY" -"3227020800","3227022847","US","USA","UNITED STATES" -"3227022848","3227023103","GB","GBR","UNITED KINGDOM" -"3227023104","3227023359","NZ","NZL","NEW ZEALAND" -"3227023360","3227023615","US","USA","UNITED STATES" -"3227023872","3227024127","US","USA","UNITED STATES" -"3227024128","3227024383","PT","PRT","PORTUGAL" -"3227024384","3227024895","US","USA","UNITED STATES" -"3227025408","3227025663","GB","GBR","UNITED KINGDOM" -"3227025664","3227025919","US","USA","UNITED STATES" -"3227025920","3227026175","GB","GBR","UNITED KINGDOM" -"3227026176","3227026687","US","USA","UNITED STATES" -"3227026688","3227026943","GB","GBR","UNITED KINGDOM" -"3227027456","3227032319","US","USA","UNITED STATES" -"3227032576","3227038207","US","USA","UNITED STATES" -"3227039744","3227040255","US","USA","UNITED STATES" -"3227040512","3227040767","AU","AUS","AUSTRALIA" -"3227040768","3227041279","US","USA","UNITED STATES" -"3227041280","3227041535","NZ","NZL","NEW ZEALAND" -"3227041536","3227042815","US","USA","UNITED STATES" -"3227042816","3227043071","IT","ITA","ITALY" -"3227043072","3227043327","US","USA","UNITED STATES" -"3227043584","3227044863","US","USA","UNITED STATES" -"3227045120","3227053567","US","USA","UNITED STATES" -"3227053568","3227053823","GB","GBR","UNITED KINGDOM" -"3227053824","3227054079","DE","DEU","GERMANY" -"3227054080","3227056639","US","USA","UNITED STATES" -"3227056640","3227057919","PT","PRT","PORTUGAL" -"3227058176","3227083519","FI","FIN","FINLAND" -"3227083520","3227083775","ES","ESP","SPAIN" -"3227083776","3227123711","FI","FIN","FINLAND" -"3227123712","3227189247","US","USA","UNITED STATES" -"3227189504","3227224831","US","USA","UNITED STATES" -"3227225088","3227225599","LU","LUX","LUXEMBOURG" -"3227225600","3227226111","US","USA","UNITED STATES" -"3227226368","3227234559","US","USA","UNITED STATES" -"3227234560","3227234815","PT","PRT","PORTUGAL" -"3227234816","3227235071","US","USA","UNITED STATES" -"3227235072","3227235327","AU","AUS","AUSTRALIA" -"3227235328","3227236607","US","USA","UNITED STATES" -"3227236608","3227236863","AU","AUS","AUSTRALIA" -"3227236864","3227237119","RU","RUS","RUSSIAN FEDERATION" -"3227237120","3227237631","US","USA","UNITED STATES" -"3227237632","3227237887","NO","NOR","NORWAY" -"3227237888","3227238143","US","USA","UNITED STATES" -"3227238144","3227238399","GB","GBR","UNITED KINGDOM" -"3227238400","3227239935","US","USA","UNITED STATES" -"3227240192","3227240447","GB","GBR","UNITED KINGDOM" -"3227240448","3227240703","BE","BEL","BELGIUM" -"3227240704","3227240959","GB","GBR","UNITED KINGDOM" -"3227240960","3227241471","US","USA","UNITED STATES" -"3227241728","3227243007","US","USA","UNITED STATES" -"3227243008","3227243263","CA","CAN","CANADA" -"3227243264","3227243519","GB","GBR","UNITED KINGDOM" -"3227243520","3227243775","US","USA","UNITED STATES" -"3227243776","3227244031","AU","AUS","AUSTRALIA" -"3227244032","3227249151","SE","SWE","SWEDEN" -"3227249408","3227249663","US","USA","UNITED STATES" -"3227249664","3227252735","CH","CHE","SWITZERLAND" -"3227252736","3227252991","US","USA","UNITED STATES" -"3227253248","3227254271","US","USA","UNITED STATES" -"3227257088","3227258623","US","USA","UNITED STATES" -"3227258624","3227258879","NZ","NZL","NEW ZEALAND" -"3227258880","3227259135","US","USA","UNITED STATES" -"3227259392","3227276543","US","USA","UNITED STATES" -"3227276800","3227277055","FR","FRA","FRANCE" -"3227277312","3227278847","US","USA","UNITED STATES" -"3227278848","3227279103","IE","IRL","IRELAND" -"3227279104","3227279615","US","USA","UNITED STATES" -"3227279872","3227280895","US","USA","UNITED STATES" -"3227281152","3227281407","US","USA","UNITED STATES" -"3227281408","3227282175","IT","ITA","ITALY" -"3227282176","3227282431","US","USA","UNITED STATES" -"3227282432","3227282687","NL","NLD","NETHERLANDS" -"3227282688","3227282943","GB","GBR","UNITED KINGDOM" -"3227282944","3227284479","US","USA","UNITED STATES" -"3227284480","3227284735","FI","FIN","FINLAND" -"3227284992","3227286783","US","USA","UNITED STATES" -"3227286784","3227287039","AT","AUT","AUSTRIA" -"3227287040","3227287295","IT","ITA","ITALY" -"3227287296","3227287551","NL","NLD","NETHERLANDS" -"3227287552","3227287807","CH","CHE","SWITZERLAND" -"3227287808","3227288063","BG","BGR","BULGARIA" -"3227288064","3227288319","BE","BEL","BELGIUM" -"3227288320","3227288831","NL","NLD","NETHERLANDS" -"3227288832","3227289087","PT","PRT","PORTUGAL" -"3227289088","3227289343","NL","NLD","NETHERLANDS" -"3227289344","3227289599","PT","PRT","PORTUGAL" -"3227289600","3227290111","NL","NLD","NETHERLANDS" -"3227290112","3227290367","AT","AUT","AUSTRIA" -"3227290368","3227290623","CH","CHE","SWITZERLAND" -"3227290880","3227291135","AT","AUT","AUSTRIA" -"3227291136","3227294463","PT","PRT","PORTUGAL" -"3227294464","3227294975","GR","GRC","GREECE" -"3227295232","3227299839","US","USA","UNITED STATES" -"3227300096","3227301375","US","USA","UNITED STATES" -"3227301632","3227302399","US","USA","UNITED STATES" -"3227302656","3227304191","US","USA","UNITED STATES" -"3227304448","3227304959","US","USA","UNITED STATES" -"3227305216","3227305983","US","USA","UNITED STATES" -"3227309824","3227310079","US","USA","UNITED STATES" -"3227310080","3227310335","NO","NOR","NORWAY" -"3227310336","3227312127","US","USA","UNITED STATES" -"3227312128","3227312383","DK","DNK","DENMARK" -"3227312384","3227314943","US","USA","UNITED STATES" -"3227320320","3227361791","FR","FRA","FRANCE" -"3227361792","3227362303","US","USA","UNITED STATES" -"3227362304","3227385855","FR","FRA","FRANCE" -"3227386112","3227391999","US","USA","UNITED STATES" -"3227392000","3227392255","PT","PRT","PORTUGAL" -"3227392256","3227393023","US","USA","UNITED STATES" -"3227393024","3227393279","AT","AUT","AUSTRIA" -"3227393280","3227396351","US","USA","UNITED STATES" -"3227396352","3227396607","AU","AUS","AUSTRALIA" -"3227396608","3227398399","US","USA","UNITED STATES" -"3227398656","3227400447","US","USA","UNITED STATES" -"3227400448","3227400703","AT","AUT","AUSTRIA" -"3227400704","3227400959","GB","GBR","UNITED KINGDOM" -"3227400960","3227401471","US","USA","UNITED STATES" -"3227401728","3227402495","AU","AUS","AUSTRALIA" -"3227402496","3227403007","US","USA","UNITED STATES" -"3227403008","3227403519","GR","GRC","GREECE" -"3227403520","3227403775","US","USA","UNITED STATES" -"3227404544","3227405311","US","USA","UNITED STATES" -"3227405312","3227405567","DE","DEU","GERMANY" -"3227405568","3227414015","US","USA","UNITED STATES" -"3227414272","3227415551","GB","GBR","UNITED KINGDOM" -"3227415552","3227415807","US","USA","UNITED STATES" -"3227415808","3227416063","GB","GBR","UNITED KINGDOM" -"3227416064","3227417087","US","USA","UNITED STATES" -"3227417088","3227417343","BN","BRN","BRUNEI DARUSSALAM" -"3227417344","3227417599","US","USA","UNITED STATES" -"3227417856","3227418111","US","USA","UNITED STATES" -"3227418112","3227418367","CA","CAN","CANADA" -"3227418368","3227425023","US","USA","UNITED STATES" -"3227425280","3227425791","US","USA","UNITED STATES" -"3227425792","3227427583","DK","DNK","DENMARK" -"3227427584","3227427839","ES","ESP","SPAIN" -"3227427840","3227428351","US","USA","UNITED STATES" -"3227428608","3227429119","US","USA","UNITED STATES" -"3227429120","3227429375","NZ","NZL","NEW ZEALAND" -"3227429376","3227429887","US","USA","UNITED STATES" -"3227429888","3227430143","GB","GBR","UNITED KINGDOM" -"3227430144","3227430399","US","USA","UNITED STATES" -"3227430400","3227430655","HK","HKG","HONG KONG" -"3227430656","3227437055","FR","FRA","FRANCE" -"3227437056","3227437311","AU","AUS","AUSTRALIA" -"3227437312","3227437823","US","USA","UNITED STATES" -"3227438848","3227439103","US","USA","UNITED STATES" -"3227439104","3227439615","AU","AUS","AUSTRALIA" -"3227439872","3227440127","US","USA","UNITED STATES" -"3227440128","3227440383","IT","ITA","ITALY" -"3227440384","3227442175","US","USA","UNITED STATES" -"3227442176","3227442431","JP","JPN","JAPAN" -"3227442432","3227442687","RU","RUS","RUSSIAN FEDERATION" -"3227442688","3227443711","US","USA","UNITED STATES" -"3227443712","3227443967","AT","AUT","AUSTRIA" -"3227443968","3227444223","AU","AUS","AUSTRALIA" -"3227444224","3227445503","US","USA","UNITED STATES" -"3227445504","3227445759","CH","CHE","SWITZERLAND" -"3227445760","3227446015","US","USA","UNITED STATES" -"3227446016","3227446271","GB","GBR","UNITED KINGDOM" -"3227446272","3227446783","US","USA","UNITED STATES" -"3227446784","3227447039","JP","JPN","JAPAN" -"3227447040","3227447295","AT","AUT","AUSTRIA" -"3227447808","3227448063","US","USA","UNITED STATES" -"3227448064","3227448575","AU","AUS","AUSTRALIA" -"3227448576","3227448831","US","USA","UNITED STATES" -"3227449088","3227450111","US","USA","UNITED STATES" -"3227468032","3227468287","US","USA","UNITED STATES" -"3227582464","3227647999","US","USA","UNITED STATES" -"3227648000","3227659775","FI","FIN","FINLAND" -"3227659776","3227660031","JP","JPN","JAPAN" -"3227660032","3227660543","FI","FIN","FINLAND" -"3227660544","3227660799","EE","EST","ESTONIA" -"3227660800","3227713535","FI","FIN","FINLAND" -"3227779584","3227779839","KR","KOR","REPUBLIC OF KOREA" -"3227779840","3227783679","US","USA","UNITED STATES" -"3227783680","3227783935","FR","FRA","FRANCE" -"3227783936","3227784703","US","USA","UNITED STATES" -"3227784704","3227784959","AU","AUS","AUSTRALIA" -"3227784960","3227785727","AT","AUT","AUSTRIA" -"3227785728","3227786495","US","USA","UNITED STATES" -"3227786752","3227792383","US","USA","UNITED STATES" -"3227792384","3227792639","GB","GBR","UNITED KINGDOM" -"3227792640","3227792895","NZ","NZL","NEW ZEALAND" -"3227792896","3227794687","US","USA","UNITED STATES" -"3227794688","3227794943","GB","GBR","UNITED KINGDOM" -"3227794944","3227795199","US","USA","UNITED STATES" -"3227795200","3227795455","NO","NOR","NORWAY" -"3227795456","3227797503","US","USA","UNITED STATES" -"3227798528","3227798783","US","USA","UNITED STATES" -"3227798784","3227799039","TH","THA","THAILAND" -"3227799040","3227799295","GB","GBR","UNITED KINGDOM" -"3227799296","3227799551","US","USA","UNITED STATES" -"3227799552","3227799807","AU","AUS","AUSTRALIA" -"3227799808","3227800063","US","USA","UNITED STATES" -"3227800320","3227801343","US","USA","UNITED STATES" -"3227801600","3227803647","US","USA","UNITED STATES" -"3227803648","3227804415","DE","DEU","GERMANY" -"3227804416","3227804671","GB","GBR","UNITED KINGDOM" -"3227804672","3227804927","US","USA","UNITED STATES" -"3227804928","3227805183","CA","CAN","CANADA" -"3227805184","3227813375","FI","FIN","FINLAND" -"3227813376","3227813631","US","USA","UNITED STATES" -"3227813632","3227815167","GB","GBR","UNITED KINGDOM" -"3227815168","3227815935","US","USA","UNITED STATES" -"3227815936","3227816191","GB","GBR","UNITED KINGDOM" -"3227816192","3227818495","US","USA","UNITED STATES" -"3227818496","3227818751","GB","GBR","UNITED KINGDOM" -"3227818752","3227844351","MX","MEX","MEXICO" -"3227844864","3227845119","ES","ESP","SPAIN" -"3227845120","3227845631","US","USA","UNITED STATES" -"3227845632","3227845887","RU","RUS","RUSSIAN FEDERATION" -"3227846144","3227846655","US","USA","UNITED STATES" -"3227846656","3227846911","ES","ESP","SPAIN" -"3227847424","3227847679","GB","GBR","UNITED KINGDOM" -"3227847680","3227848703","US","USA","UNITED STATES" -"3227848704","3227848959","NZ","NZL","NEW ZEALAND" -"3227848960","3227851775","US","USA","UNITED STATES" -"3227851776","3227852031","DE","DEU","GERMANY" -"3227852032","3227853055","US","USA","UNITED STATES" -"3227853312","3227853567","GB","GBR","UNITED KINGDOM" -"3227853568","3227856127","US","USA","UNITED STATES" -"3227856896","3227860991","US","USA","UNITED STATES" -"3227863808","3227864063","DE","DEU","GERMANY" -"3227864064","3227864831","US","USA","UNITED STATES" -"3227865088","3227865343","US","USA","UNITED STATES" -"3227865344","3227867903","NL","NLD","NETHERLANDS" -"3227867904","3227868159","TH","THA","THAILAND" -"3227868160","3227873023","US","USA","UNITED STATES" -"3227873024","3227874047","NL","NLD","NETHERLANDS" -"3227874048","3227874815","US","USA","UNITED STATES" -"3227874816","3227875071","PT","PRT","PORTUGAL" -"3227875072","3227878911","US","USA","UNITED STATES" -"3227878912","3227879167","AU","AUS","AUSTRALIA" -"3227879168","3227879679","US","USA","UNITED STATES" -"3227879680","3227879935","GB","GBR","UNITED KINGDOM" -"3227880192","3227880959","US","USA","UNITED STATES" -"3227881472","3227885567","US","USA","UNITED STATES" -"3227885824","3227887871","ES","ESP","SPAIN" -"3227887872","3227888127","PR","PRI","PUERTO RICO" -"3227888128","3227888383","BE","BEL","BELGIUM" -"3227888384","3227889151","US","USA","UNITED STATES" -"3227889408","3227889663","US","USA","UNITED STATES" -"3227889664","3227889919","CH","CHE","SWITZERLAND" -"3227889920","3227890431","US","USA","UNITED STATES" -"3227890432","3227890943","DE","DEU","GERMANY" -"3227890944","3227891455","US","USA","UNITED STATES" -"3227891456","3227891711","AU","AUS","AUSTRALIA" -"3227891712","3227893759","US","USA","UNITED STATES" -"3227893760","3227894015","FI","FIN","FINLAND" -"3227894016","3227895039","US","USA","UNITED STATES" -"3227895040","3227895551","DE","DEU","GERMANY" -"3227895808","3227909119","US","USA","UNITED STATES" -"3227909120","3227909375","BE","BEL","BELGIUM" -"3227909376","3227909631","US","USA","UNITED STATES" -"3227909632","3227909887","AU","AUS","AUSTRALIA" -"3227910400","3227910655","AT","AUT","AUSTRIA" -"3227910656","3227911679","US","USA","UNITED STATES" -"3227911680","3227912191","HU","HUN","HUNGARY" -"3227912192","3227912447","GB","GBR","UNITED KINGDOM" -"3227912704","3227912959","US","USA","UNITED STATES" -"3227912960","3227913215","CA","CAN","CANADA" -"3227913216","3227913983","US","USA","UNITED STATES" -"3227914240","3227914495","US","USA","UNITED STATES" -"3227914496","3227914751","AT","AUT","AUSTRIA" -"3227914752","3227918591","FI","FIN","FINLAND" -"3227918592","3227918847","US","USA","UNITED STATES" -"3227918848","3227931135","FI","FIN","FINLAND" -"3227931136","3227931391","US","USA","UNITED STATES" -"3227931392","3227931647","TH","THA","THAILAND" -"3227931648","3227931903","PE","PER","PERU" -"3227932672","3227932927","US","USA","UNITED STATES" -"3227932928","3227933183","DE","DEU","GERMANY" -"3227933184","3227933695","US","USA","UNITED STATES" -"3227933696","3227933951","NZ","NZL","NEW ZEALAND" -"3227933952","3227934463","US","USA","UNITED STATES" -"3227934464","3227934719","CH","CHE","SWITZERLAND" -"3227934720","3227947519","US","USA","UNITED STATES" -"3227947520","3227955711","DE","DEU","GERMANY" -"3227955712","3227964927","US","USA","UNITED STATES" -"3227964928","3227965183","GB","GBR","UNITED KINGDOM" -"3227965184","3227966975","US","USA","UNITED STATES" -"3227967232","3227967487","US","USA","UNITED STATES" -"3227967488","3227967743","FR","FRA","FRANCE" -"3227967744","3227967999","PL","POL","POLAND" -"3227968000","3227968255","US","USA","UNITED STATES" -"3227968256","3227968767","GB","GBR","UNITED KINGDOM" -"3227968768","3227969023","RU","RUS","RUSSIAN FEDERATION" -"3227969024","3227971327","US","USA","UNITED STATES" -"3227971328","3227971583","AU","AUS","AUSTRALIA" -"3227971584","3227974143","US","USA","UNITED STATES" -"3227974144","3227974655","AU","AUS","AUSTRALIA" -"3227974656","3227975167","US","USA","UNITED STATES" -"3227975936","3227976191","US","USA","UNITED STATES" -"3227976192","3227976447","LU","LUX","LUXEMBOURG" -"3227976448","3227977471","US","USA","UNITED STATES" -"3227977472","3227977727","FR","FRA","FRANCE" -"3227977728","3227978495","US","USA","UNITED STATES" -"3227979008","3227979263","US","USA","UNITED STATES" -"3227979264","3227979519","AE","ARE","UNITED ARAB EMIRATES" -"3227979520","3227980799","US","USA","UNITED STATES" -"3227980800","3227981055","GR","GRC","GREECE" -"3227981056","3227981567","US","USA","UNITED STATES" -"3227981568","3227981823","DE","DEU","GERMANY" -"3227981824","3227982591","US","USA","UNITED STATES" -"3227982592","3227982847","DE","DEU","GERMANY" -"3227982848","3227985919","GB","GBR","UNITED KINGDOM" -"3227985920","3227986175","DE","DEU","GERMANY" -"3227986176","3227986431","US","USA","UNITED STATES" -"3227986432","3227986943","JP","JPN","JAPAN" -"3227986944","3227987455","US","USA","UNITED STATES" -"3227987456","3227987711","AU","AUS","AUSTRALIA" -"3227987712","3227997439","US","USA","UNITED STATES" -"3227997440","3228005631","FI","FIN","FINLAND" -"3228005632","3228008959","US","USA","UNITED STATES" -"3228008960","3228009215","AU","AUS","AUSTRALIA" -"3228009472","3228009727","AU","AUS","AUSTRALIA" -"3228009728","3228010751","US","USA","UNITED STATES" -"3228010752","3228011519","GB","GBR","UNITED KINGDOM" -"3228011520","3228013311","US","USA","UNITED STATES" -"3228013312","3228013567","PT","PRT","PORTUGAL" -"3228013568","3228039423","US","USA","UNITED STATES" -"3228041472","3228042239","US","USA","UNITED STATES" -"3228042752","3228045055","US","USA","UNITED STATES" -"3228045056","3228045311","KR","KOR","REPUBLIC OF KOREA" -"3228045312","3228046335","US","USA","UNITED STATES" -"3228046592","3228047103","US","USA","UNITED STATES" -"3228047104","3228047359","IT","ITA","ITALY" -"3228047360","3228048383","US","USA","UNITED STATES" -"3228048384","3228048895","GB","GBR","UNITED KINGDOM" -"3228048896","3228050175","US","USA","UNITED STATES" -"3228050176","3228050943","PT","PRT","PORTUGAL" -"3228051200","3228051455","US","USA","UNITED STATES" -"3228051456","3228051711","JP","JPN","JAPAN" -"3228051712","3228051967","CH","CHE","SWITZERLAND" -"3228051968","3228052223","US","USA","UNITED STATES" -"3228052224","3228052991","AU","AUS","AUSTRALIA" -"3228052992","3228053503","US","USA","UNITED STATES" -"3228053504","3228053759","PT","PRT","PORTUGAL" -"3228054016","3228054783","US","USA","UNITED STATES" -"3228054784","3228055039","GB","GBR","UNITED KINGDOM" -"3228055040","3228055295","US","USA","UNITED STATES" -"3228055296","3228055807","NL","NLD","NETHERLANDS" -"3228055808","3228056319","NO","NOR","NORWAY" -"3228056320","3228059647","US","USA","UNITED STATES" -"3228059648","3228059903","CH","CHE","SWITZERLAND" -"3228060160","3228060927","US","USA","UNITED STATES" -"3228060928","3228061183","DE","DEU","GERMANY" -"3228061184","3228061695","US","USA","UNITED STATES" -"3228061696","3228061951","JP","JPN","JAPAN" -"3228061952","3228062207","US","USA","UNITED STATES" -"3228062208","3228062463","GB","GBR","UNITED KINGDOM" -"3228062464","3228069631","US","USA","UNITED STATES" -"3228076288","3228077055","US","USA","UNITED STATES" -"3228077056","3228077311","NL","NLD","NETHERLANDS" -"3228077312","3228077567","US","USA","UNITED STATES" -"3228077568","3228077823","NL","NLD","NETHERLANDS" -"3228077824","3228078847","US","USA","UNITED STATES" -"3228078848","3228079103","GR","GRC","GREECE" -"3228079360","3228079871","US","USA","UNITED STATES" -"3228080128","3228080639","US","USA","UNITED STATES" -"3228080640","3228080895","IE","IRL","IRELAND" -"3228080896","3228081151","FR","FRA","FRANCE" -"3228081152","3228081919","US","USA","UNITED STATES" -"3228082944","3228083967","US","USA","UNITED STATES" -"3228083968","3228084479","BE","BEL","BELGIUM" -"3228084480","3228085247","US","USA","UNITED STATES" -"3228085248","3228085503","JP","JPN","JAPAN" -"3228085504","3228100607","US","USA","UNITED STATES" -"3228100608","3228101119","JP","JPN","JAPAN" -"3228101120","3228102143","US","USA","UNITED STATES" -"3228102144","3228102399","GB","GBR","UNITED KINGDOM" -"3228102400","3228103423","US","USA","UNITED STATES" -"3228103680","3228103935","US","USA","UNITED STATES" -"3228103936","3228104191","FR","FRA","FRANCE" -"3228104192","3228104703","JP","JPN","JAPAN" -"3228104704","3228104959","DK","DNK","DENMARK" -"3228104960","3228105471","US","USA","UNITED STATES" -"3228105472","3228105727","CH","CHE","SWITZERLAND" -"3228105728","3228105983","NZ","NZL","NEW ZEALAND" -"3228105984","3228106495","US","USA","UNITED STATES" -"3228106752","3228109311","US","USA","UNITED STATES" -"3228109312","3228109567","NZ","NZL","NEW ZEALAND" -"3228109568","3228125951","US","USA","UNITED STATES" -"3228125952","3228126207","DE","DEU","GERMANY" -"3228126208","3228172287","US","USA","UNITED STATES" -"3228172288","3228222463","IT","ITA","ITALY" -"3228222464","3228222975","NL","NLD","NETHERLANDS" -"3228222976","3228237823","IT","ITA","ITALY" -"3228238080","3228238335","NO","NOR","NORWAY" -"3228238336","3228238591","GB","GBR","UNITED KINGDOM" -"3228238592","3228238847","US","USA","UNITED STATES" -"3228238848","3228239359","GB","GBR","UNITED KINGDOM" -"3228239616","3228240127","US","USA","UNITED STATES" -"3228240128","3228240383","AU","AUS","AUSTRALIA" -"3228240384","3228240639","NZ","NZL","NEW ZEALAND" -"3228240640","3228241407","GB","GBR","UNITED KINGDOM" -"3228241408","3228250367","US","USA","UNITED STATES" -"3228250624","3228250879","US","USA","UNITED STATES" -"3228250880","3228263679","IT","ITA","ITALY" -"3228263680","3228263935","AU","AUS","AUSTRALIA" -"3228263936","3228264447","US","USA","UNITED STATES" -"3228264448","3228264703","NI","NIC","NICARAGUA" -"3228264704","3228265983","US","USA","UNITED STATES" -"3228265984","3228266239","IE","IRL","IRELAND" -"3228266496","3228267007","NZ","NZL","NEW ZEALAND" -"3228267008","3228267263","NO","NOR","NORWAY" -"3228267264","3228268543","US","USA","UNITED STATES" -"3228269056","3228269311","PT","PRT","PORTUGAL" -"3228269312","3228269567","DE","DEU","GERMANY" -"3228269568","3228270079","AT","AUT","AUSTRIA" -"3228270080","3228271103","GB","GBR","UNITED KINGDOM" -"3228271104","3228271359","US","USA","UNITED STATES" -"3228271360","3228271615","CA","CAN","CANADA" -"3228271616","3228271871","DE","DEU","GERMANY" -"3228272128","3228272383","US","USA","UNITED STATES" -"3228274944","3228280831","US","USA","UNITED STATES" -"3228280832","3228281087","GB","GBR","UNITED KINGDOM" -"3228281088","3228281599","US","USA","UNITED STATES" -"3228281600","3228282111","NZ","NZL","NEW ZEALAND" -"3228282112","3228282367","US","USA","UNITED STATES" -"3228282368","3228282623","GB","GBR","UNITED KINGDOM" -"3228282624","3228283135","US","USA","UNITED STATES" -"3228283136","3228283391","GR","GRC","GREECE" -"3228283392","3228283647","GB","GBR","UNITED KINGDOM" -"3228283648","3228285695","US","USA","UNITED STATES" -"3228285696","3228285951","SE","SWE","SWEDEN" -"3228285952","3228289023","US","USA","UNITED STATES" -"3228289024","3228297215","FI","FIN","FINLAND" -"3228297216","3228297727","AT","AUT","AUSTRIA" -"3228297728","3228297983","US","USA","UNITED STATES" -"3228297984","3228298495","DE","DEU","GERMANY" -"3228298496","3228303103","US","USA","UNITED STATES" -"3228303360","3228309247","US","USA","UNITED STATES" -"3228309248","3228316159","DE","DEU","GERMANY" -"3228316416","3228327167","DE","DEU","GERMANY" -"3228327168","3228328703","US","USA","UNITED STATES" -"3228328704","3228328959","AU","AUS","AUSTRALIA" -"3228328960","3228329471","NO","NOR","NORWAY" -"3228329472","3228330751","US","USA","UNITED STATES" -"3228330752","3228331263","SE","SWE","SWEDEN" -"3228331264","3228332287","US","USA","UNITED STATES" -"3228332288","3228332543","AU","AUS","AUSTRALIA" -"3228332544","3228332799","GR","GRC","GREECE" -"3228332800","3228334079","FR","FRA","FRANCE" -"3228334080","3228334335","GB","GBR","UNITED KINGDOM" -"3228334336","3228334591","AT","AUT","AUSTRIA" -"3228334592","3228335359","US","USA","UNITED STATES" -"3228335360","3228335615","SK","SVK","SLOVAKIA" -"3228335616","3228335871","CZ","CZE","CZECH REPUBLIC" -"3228336128","3228336639","CZ","CZE","CZECH REPUBLIC" -"3228336640","3228337663","SK","SVK","SLOVAKIA" -"3228337664","3228338431","CZ","CZE","CZECH REPUBLIC" -"3228338432","3228340735","SK","SVK","SLOVAKIA" -"3228340736","3228341247","CZ","CZE","CZECH REPUBLIC" -"3228341248","3228341759","SK","SVK","SLOVAKIA" -"3228341760","3228342271","CZ","CZE","CZECH REPUBLIC" -"3228342272","3228342783","SK","SVK","SLOVAKIA" -"3228342784","3228343039","CZ","CZE","CZECH REPUBLIC" -"3228343040","3228343295","SK","SVK","SLOVAKIA" -"3228343296","3228343551","CZ","CZE","CZECH REPUBLIC" -"3228343552","3228344063","SK","SVK","SLOVAKIA" -"3228344064","3228344575","CZ","CZE","CZECH REPUBLIC" -"3228344576","3228347135","SK","SVK","SLOVAKIA" -"3228347136","3228347391","CZ","CZE","CZECH REPUBLIC" -"3228347392","3228348159","SK","SVK","SLOVAKIA" -"3228348160","3228353279","US","USA","UNITED STATES" -"3228353280","3228358399","SE","SWE","SWEDEN" -"3228358400","3228361471","US","USA","UNITED STATES" -"3228361728","3228362239","US","USA","UNITED STATES" -"3228362240","3228362495","TH","THA","THAILAND" -"3228362496","3228362751","US","USA","UNITED STATES" -"3228363008","3228363263","US","USA","UNITED STATES" -"3228363264","3228363519","CH","CHE","SWITZERLAND" -"3228363520","3228364287","US","USA","UNITED STATES" -"3228364288","3228364543","AT","AUT","AUSTRIA" -"3228364800","3228368383","US","USA","UNITED STATES" -"3228368896","3228380415","DE","DEU","GERMANY" -"3228380672","3228388095","DE","DEU","GERMANY" -"3228388352","3228392447","DE","DEU","GERMANY" -"3228392960","3228394239","DE","DEU","GERMANY" -"3228394496","3228395263","DE","DEU","GERMANY" -"3228395776","3228399615","DE","DEU","GERMANY" -"3228399872","3228404735","DE","DEU","GERMANY" -"3228404736","3228407039","FR","FRA","FRANCE" -"3228407040","3228413183","DE","DEU","GERMANY" -"3228413184","3228413439","SG","SGP","SINGAPORE" -"3228413440","3228417791","DE","DEU","GERMANY" -"3228417792","3228418559","AT","AUT","AUSTRIA" -"3228418560","3228418815","IN","IND","INDIA" -"3228418816","3228421119","DE","DEU","GERMANY" -"3228421120","3228421375","BE","BEL","BELGIUM" -"3228421376","3228423679","DE","DEU","GERMANY" -"3228423680","3228424191","CH","CHE","SWITZERLAND" -"3228424192","3228434431","DE","DEU","GERMANY" -"3228434688","3228471295","US","USA","UNITED STATES" -"3228472320","3228472831","US","USA","UNITED STATES" -"3228473344","3228473599","US","USA","UNITED STATES" -"3228473856","3228474111","US","USA","UNITED STATES" -"3228477440","3228477695","US","USA","UNITED STATES" -"3228491520","3228499711","US","USA","UNITED STATES" -"3228500224","3228508159","US","USA","UNITED STATES" -"3228508160","3228508415","AU","AUS","AUSTRALIA" -"3228508416","3228508671","NO","NOR","NORWAY" -"3228508672","3228509439","US","USA","UNITED STATES" -"3228509952","3228510207","IE","IRL","IRELAND" -"3228510208","3228511231","US","USA","UNITED STATES" -"3228511232","3228511487","CZ","CZE","CZECH REPUBLIC" -"3228511488","3228511999","US","USA","UNITED STATES" -"3228512000","3228512255","DE","DEU","GERMANY" -"3228512256","3228512511","CH","CHE","SWITZERLAND" -"3228512512","3228513791","US","USA","UNITED STATES" -"3228521984","3228522495","US","USA","UNITED STATES" -"3228522496","3228522751","GB","GBR","UNITED KINGDOM" -"3228522752","3228525823","US","USA","UNITED STATES" -"3228525824","3228526079","PT","PRT","PORTUGAL" -"3228526080","3228526335","NZ","NZL","NEW ZEALAND" -"3228526336","3228526591","CH","CHE","SWITZERLAND" -"3228526592","3228526847","AT","AUT","AUSTRIA" -"3228526848","3228527103","AU","AUS","AUSTRALIA" -"3228527104","3228528383","US","USA","UNITED STATES" -"3228528640","3228531711","US","USA","UNITED STATES" -"3228531712","3228532223","NO","NOR","NORWAY" -"3228532224","3228532479","US","USA","UNITED STATES" -"3228532480","3228532735","DE","DEU","GERMANY" -"3228540928","3228554751","US","USA","UNITED STATES" -"3228555008","3228557311","US","USA","UNITED STATES" -"3228557568","3228558591","US","USA","UNITED STATES" -"3228558592","3228559103","BR","BRA","BRAZIL" -"3228559104","3228564223","US","USA","UNITED STATES" -"3228564480","3228564735","AT","AUT","AUSTRIA" -"3228564736","3228565247","US","USA","UNITED STATES" -"3228565760","3228571391","US","USA","UNITED STATES" -"3228571648","3228572927","US","USA","UNITED STATES" -"3228573184","3228573951","PT","PRT","PORTUGAL" -"3228573952","3228574463","US","USA","UNITED STATES" -"3228574720","3228577023","US","USA","UNITED STATES" -"3228577024","3228577279","PT","PRT","PORTUGAL" -"3228577280","3228578047","US","USA","UNITED STATES" -"3228578048","3228578303","GB","GBR","UNITED KINGDOM" -"3228578304","3228581119","US","USA","UNITED STATES" -"3228581120","3228581375","AT","AUT","AUSTRIA" -"3228581376","3228583167","US","USA","UNITED STATES" -"3228583424","3228585983","ES","ESP","SPAIN" -"3228585984","3228590591","US","USA","UNITED STATES" -"3228590592","3228590847","GB","GBR","UNITED KINGDOM" -"3228590848","3228591103","DK","DNK","DENMARK" -"3228591104","3228591359","GB","GBR","UNITED KINGDOM" -"3228591360","3228603391","US","USA","UNITED STATES" -"3228603648","3228603903","US","USA","UNITED STATES" -"3228604160","3228611583","US","USA","UNITED STATES" -"3228611840","3228617727","US","USA","UNITED STATES" -"3228617728","3228617983","FI","FIN","FINLAND" -"3228617984","3228618239","US","USA","UNITED STATES" -"3228618240","3228618495","SE","SWE","SWEDEN" -"3228618496","3228618751","US","USA","UNITED STATES" -"3228618752","3228619007","DE","DEU","GERMANY" -"3228619008","3228620031","US","USA","UNITED STATES" -"3228620032","3228620287","DE","DEU","GERMANY" -"3228620288","3228620543","CH","CHE","SWITZERLAND" -"3228620544","3228620799","AU","AUS","AUSTRALIA" -"3228620800","3228628735","US","USA","UNITED STATES" -"3228628736","3228628991","ES","ESP","SPAIN" -"3228628992","3228630527","US","USA","UNITED STATES" -"3228630528","3228630783","CH","CHE","SWITZERLAND" -"3228631040","3228696575","NL","NLD","NETHERLANDS" -"3228696576","3228827647","IL","ISR","ISRAEL" -"3228827648","3228828159","PS","PSE","PALESTINIAN TERRITORY, OCCUPIED" -"3228828160","3228829183","IL","ISR","ISRAEL" -"3228829184","3228829695","PS","PSE","PALESTINIAN TERRITORY, OCCUPIED" -"3228829696","3228830207","IL","ISR","ISRAEL" -"3228830208","3228833791","PS","PSE","PALESTINIAN TERRITORY, OCCUPIED" -"3228833792","3228846335","IL","ISR","ISRAEL" -"3228846336","3228846591","GB","GBR","UNITED KINGDOM" -"3228846592","3228849407","IL","ISR","ISRAEL" -"3228849408","3228849663","GB","GBR","UNITED KINGDOM" -"3228849664","3228850175","IL","ISR","ISRAEL" -"3228850176","3228850431","GB","GBR","UNITED KINGDOM" -"3228850432","3228858111","IL","ISR","ISRAEL" -"3228858112","3228858367","GB","GBR","UNITED KINGDOM" -"3228858368","3228864255","IL","ISR","ISRAEL" -"3228864256","3228864511","GB","GBR","UNITED KINGDOM" -"3228864512","3229024255","IL","ISR","ISRAEL" -"3229024512","3229024767","US","USA","UNITED STATES" -"3229058816","3229059071","US","USA","UNITED STATES" -"3229090048","3229101823","US","USA","UNITED STATES" -"3229101824","3229102591","FI","FIN","FINLAND" -"3229102592","3229155327","US","USA","UNITED STATES" -"3229155328","3229219583","SE","SWE","SWEDEN" -"3229219584","3229219839","EE","EST","ESTONIA" -"3229219840","3229220863","SE","SWE","SWEDEN" -"3229221120","3229221375","FR","FRA","FRANCE" -"3229221376","3229245439","GB","GBR","UNITED KINGDOM" -"3229245440","3229246719","US","USA","UNITED STATES" -"3229246720","3229250815","GB","GBR","UNITED KINGDOM" -"3229250816","3229251071","US","USA","UNITED STATES" -"3229251072","3229254399","GB","GBR","UNITED KINGDOM" -"3229254400","3229256959","SG","SGP","SINGAPORE" -"3229256960","3229258495","GB","GBR","UNITED KINGDOM" -"3229258496","3229259007","US","USA","UNITED STATES" -"3229259520","3229264639","GB","GBR","UNITED KINGDOM" -"3229264640","3229264895","NZ","NZL","NEW ZEALAND" -"3229264896","3229265919","US","USA","UNITED STATES" -"3229265920","3229266175","AU","AUS","AUSTRALIA" -"3229266176","3229266943","US","USA","UNITED STATES" -"3229266944","3229267199","NZ","NZL","NEW ZEALAND" -"3229267200","3229272319","US","USA","UNITED STATES" -"3229273856","3229274623","US","USA","UNITED STATES" -"3229274624","3229274879","AU","AUS","AUSTRALIA" -"3229274880","3229275647","US","USA","UNITED STATES" -"3229275648","3229275903","GB","GBR","UNITED KINGDOM" -"3229276160","3229281023","IE","IRL","IRELAND" -"3229281024","3229281791","US","USA","UNITED STATES" -"3229281792","3229283071","PT","PRT","PORTUGAL" -"3229283072","3229285887","US","USA","UNITED STATES" -"3229285888","3229286143","NO","NOR","NORWAY" -"3229286400","3229351935","US","USA","UNITED STATES" -"3229352192","3229354495","US","USA","UNITED STATES" -"3229354496","3229355775","AU","AUS","AUSTRALIA" -"3229355776","3229356543","US","USA","UNITED STATES" -"3229356800","3229357823","US","USA","UNITED STATES" -"3229358080","3229358335","NZ","NZL","NEW ZEALAND" -"3229358336","3229359359","DE","DEU","GERMANY" -"3229359872","3229360127","US","USA","UNITED STATES" -"3229360128","3229360383","AT","AUT","AUSTRIA" -"3229360384","3229361919","US","USA","UNITED STATES" -"3229361920","3229362175","BE","BEL","BELGIUM" -"3229362176","3229363199","US","USA","UNITED STATES" -"3229363456","3229363711","US","USA","UNITED STATES" -"3229363712","3229363967","GB","GBR","UNITED KINGDOM" -"3229363968","3229380607","US","USA","UNITED STATES" -"3229380608","3229380863","DE","DEU","GERMANY" -"3229380864","3229381375","US","USA","UNITED STATES" -"3229381376","3229381631","DE","DEU","GERMANY" -"3229381632","3229381887","PL","POL","POLAND" -"3229381888","3229382143","AU","AUS","AUSTRALIA" -"3229382144","3229382399","US","USA","UNITED STATES" -"3229382656","3229384191","US","USA","UNITED STATES" -"3229384448","3229384959","US","USA","UNITED STATES" -"3229385216","3229385727","US","USA","UNITED STATES" -"3229385984","3229390847","US","USA","UNITED STATES" -"3229390848","3229391103","AU","AUS","AUSTRALIA" -"3229391104","3229391359","US","USA","UNITED STATES" -"3229391360","3229391615","CN","CHN","CHINA" -"3229391616","3229391871","AT","AUT","AUSTRIA" -"3229392128","3229394175","US","USA","UNITED STATES" -"3229395456","3229408255","RU","RUS","RUSSIAN FEDERATION" -"3229408256","3229409279","US","USA","UNITED STATES" -"3229409536","3229412095","US","USA","UNITED STATES" -"3229412096","3229412351","DE","DEU","GERMANY" -"3229412608","3229414911","DE","DEU","GERMANY" -"3229414912","3229415167","US","USA","UNITED STATES" -"3229415168","3229415679","DE","DEU","GERMANY" -"3229415936","3229417215","DE","DEU","GERMANY" -"3229417472","3229483007","DE","DEU","GERMANY" -"3229483264","3229499647","FI","FIN","FINLAND" -"3229499648","3229500671","US","USA","UNITED STATES" -"3229548544","3229679615","US","USA","UNITED STATES" -"3229679872","3229680383","DE","DEU","GERMANY" -"3229680384","3229680895","RO","ROM","ROMANIA" -"3229680896","3229693183","DE","DEU","GERMANY" -"3229693440","3229695487","DE","DEU","GERMANY" -"3229695488","3229697535","US","USA","UNITED STATES" -"3229697792","3229699071","US","USA","UNITED STATES" -"3229699328","3229699583","US","USA","UNITED STATES" -"3229699840","3229700095","US","USA","UNITED STATES" -"3229700096","3229700351","AT","AUT","AUSTRIA" -"3229700352","3229701887","US","USA","UNITED STATES" -"3229701888","3229702143","TR","TUR","TURKEY" -"3229702144","3229704703","US","USA","UNITED STATES" -"3229704704","3229704959","DE","DEU","GERMANY" -"3229705216","3229708031","US","USA","UNITED STATES" -"3229745152","3229749759","FI","FIN","FINLAND" -"3229749760","3229750015","BE","BEL","BELGIUM" -"3229750016","3229810687","FI","FIN","FINLAND" -"3229810944","3229811711","US","USA","UNITED STATES" -"3229812224","3229814015","US","USA","UNITED STATES" -"3229814016","3229814271","AU","AUS","AUSTRALIA" -"3229814272","3229815807","US","USA","UNITED STATES" -"3229815808","3229816063","DE","DEU","GERMANY" -"3229816320","3229817087","US","USA","UNITED STATES" -"3229817088","3229817599","SE","SWE","SWEDEN" -"3229817600","3229818623","AU","AUS","AUSTRALIA" -"3229818624","3229818879","US","USA","UNITED STATES" -"3229822208","3229825023","US","USA","UNITED STATES" -"3229827072","3229830911","US","USA","UNITED STATES" -"3229830912","3229831167","GB","GBR","UNITED KINGDOM" -"3229831168","3229833215","US","USA","UNITED STATES" -"3229833472","3229833727","GB","GBR","UNITED KINGDOM" -"3229833728","3229834239","IN","IND","INDIA" -"3229834240","3229834495","AU","AUS","AUSTRALIA" -"3229834496","3229834751","US","USA","UNITED STATES" -"3229834752","3229835007","CA","CAN","CANADA" -"3229835008","3229835263","US","USA","UNITED STATES" -"3229835264","3229835519","FI","FIN","FINLAND" -"3229835520","3229835775","CA","CAN","CANADA" -"3229835776","3229838079","US","USA","UNITED STATES" -"3229838336","3229838591","GB","GBR","UNITED KINGDOM" -"3229838592","3229838847","US","USA","UNITED STATES" -"3229839104","3229844479","US","USA","UNITED STATES" -"3229844480","3229844735","BE","BEL","BELGIUM" -"3229844736","3229844991","US","USA","UNITED STATES" -"3229845248","3229845503","US","USA","UNITED STATES" -"3229845760","3229847295","CA","CAN","CANADA" -"3229847296","3229870335","US","USA","UNITED STATES" -"3229870848","3229874943","US","USA","UNITED STATES" -"3229874944","3229875455","AU","AUS","AUSTRALIA" -"3229875456","3229875967","US","USA","UNITED STATES" -"3229876480","3229877503","US","USA","UNITED STATES" -"3229877760","3229878271","US","USA","UNITED STATES" -"3229878528","3229878783","GB","GBR","UNITED KINGDOM" -"3229878784","3229879039","IT","ITA","ITALY" -"3229879040","3229879295","NO","NOR","NORWAY" -"3229879296","3229880063","US","USA","UNITED STATES" -"3229880064","3229880319","KR","KOR","REPUBLIC OF KOREA" -"3229880320","3229881087","US","USA","UNITED STATES" -"3229881088","3229881343","CA","CAN","CANADA" -"3229881344","3229883135","US","USA","UNITED STATES" -"3229883648","3229883903","US","USA","UNITED STATES" -"3229884160","3229884415","JP","JPN","JAPAN" -"3229884928","3229885183","IT","ITA","ITALY" -"3229885184","3229885439","BR","BRA","BRAZIL" -"3229885440","3229886719","US","USA","UNITED STATES" -"3229886720","3229886975","AU","AUS","AUSTRALIA" -"3229886976","3229887487","US","USA","UNITED STATES" -"3229887744","3229889791","US","USA","UNITED STATES" -"3229889792","3229890047","PT","PRT","PORTUGAL" -"3229890048","3229890303","US","USA","UNITED STATES" -"3229890304","3229890559","PT","PRT","PORTUGAL" -"3229890560","3229891327","US","USA","UNITED STATES" -"3229891584","3229891839","CA","CAN","CANADA" -"3229892608","3229900031","US","USA","UNITED STATES" -"3229900032","3229900287","AU","AUS","AUSTRALIA" -"3229900288","3229901567","US","USA","UNITED STATES" -"3229901568","3229901823","GB","GBR","UNITED KINGDOM" -"3229901824","3229902335","US","USA","UNITED STATES" -"3229902336","3229902591","AU","AUS","AUSTRALIA" -"3229902592","3229928703","US","USA","UNITED STATES" -"3229928960","3229930495","US","USA","UNITED STATES" -"3229930752","3229937407","US","USA","UNITED STATES" -"3229937408","3229937663","GB","GBR","UNITED KINGDOM" -"3229937664","3229937919","US","USA","UNITED STATES" -"3229937920","3229938175","CA","CAN","CANADA" -"3229938176","3229938431","US","USA","UNITED STATES" -"3229938688","3229938943","IL","ISR","ISRAEL" -"3229938944","3229939199","AT","AUT","AUSTRIA" -"3229939200","3229939455","US","USA","UNITED STATES" -"3229939456","3229940735","KR","KOR","REPUBLIC OF KOREA" -"3229940736","3229940991","CH","CHE","SWITZERLAND" -"3229940992","3229941247","AU","AUS","AUSTRALIA" -"3229941248","3229941503","US","USA","UNITED STATES" -"3229942272","3229942783","US","USA","UNITED STATES" -"3229943040","3229943295","US","USA","UNITED STATES" -"3229943552","3229944319","US","USA","UNITED STATES" -"3229944320","3229944575","TH","THA","THAILAND" -"3229944576","3229945343","US","USA","UNITED STATES" -"3229945344","3229945599","AU","AUS","AUSTRALIA" -"3229945600","3229945855","PT","PRT","PORTUGAL" -"3229946112","3229947135","US","USA","UNITED STATES" -"3229947136","3229947391","AU","AUS","AUSTRALIA" -"3229947392","3229948415","US","USA","UNITED STATES" -"3229948672","3229948927","US","USA","UNITED STATES" -"3229948928","3229949183","IT","ITA","ITALY" -"3229949184","3229949695","US","USA","UNITED STATES" -"3229949696","3229949951","NZ","NZL","NEW ZEALAND" -"3229949952","3229950207","NO","NOR","NORWAY" -"3229950208","3229950975","US","USA","UNITED STATES" -"3229950976","3229951231","IL","ISR","ISRAEL" -"3229951232","3229952255","US","USA","UNITED STATES" -"3229952256","3229952511","AU","AUS","AUSTRALIA" -"3229952512","3229953279","US","USA","UNITED STATES" -"3229953536","3229953791","US","USA","UNITED STATES" -"3229954048","3229954303","US","USA","UNITED STATES" -"3229954560","3229955327","US","USA","UNITED STATES" -"3229955328","3229955583","NL","NLD","NETHERLANDS" -"3229955584","3229956095","PT","PRT","PORTUGAL" -"3229956096","3229956607","US","USA","UNITED STATES" -"3229956608","3229956863","GB","GBR","UNITED KINGDOM" -"3229956864","3229958143","US","USA","UNITED STATES" -"3229958144","3229958399","NO","NOR","NORWAY" -"3229958400","3229958655","US","USA","UNITED STATES" -"3229958656","3229958911","NZ","NZL","NEW ZEALAND" -"3229958912","3229959167","SG","SGP","SINGAPORE" -"3229959168","3229960191","US","USA","UNITED STATES" -"3229960448","3229960959","US","USA","UNITED STATES" -"3229963008","3229963519","US","USA","UNITED STATES" -"3229963776","3229964799","US","USA","UNITED STATES" -"3229965056","3229967615","US","USA","UNITED STATES" -"3229967872","3229968127","US","USA","UNITED STATES" -"3229968128","3229968383","BE","BEL","BELGIUM" -"3229968384","3229968895","US","USA","UNITED STATES" -"3229969408","3229969663","PT","PRT","PORTUGAL" -"3229969664","3229969919","AT","AUT","AUSTRIA" -"3229969920","3229970431","FI","FIN","FINLAND" -"3229971456","3229972735","US","USA","UNITED STATES" -"3229972736","3229972991","SE","SWE","SWEDEN" -"3229972992","3229975295","US","USA","UNITED STATES" -"3229975296","3229975551","GB","GBR","UNITED KINGDOM" -"3229975552","3229976575","US","USA","UNITED STATES" -"3229978624","3230004223","US","USA","UNITED STATES" -"3230004224","3230004479","GB","GBR","UNITED KINGDOM" -"3230004480","3230004991","US","USA","UNITED STATES" -"3230006016","3230007039","US","USA","UNITED STATES" -"3230007296","3230072831","FR","FRA","FRANCE" -"3230073088","3230074623","US","USA","UNITED STATES" -"3230074624","3230074879","DE","DEU","GERMANY" -"3230074880","3230082559","IT","ITA","ITALY" -"3230082560","3230082815","US","USA","UNITED STATES" -"3230083072","3230084607","US","USA","UNITED STATES" -"3230084608","3230084863","NO","NOR","NORWAY" -"3230084864","3230085119","US","USA","UNITED STATES" -"3230085120","3230085375","CA","CAN","CANADA" -"3230085376","3230085631","US","USA","UNITED STATES" -"3230085888","3230086143","DE","DEU","GERMANY" -"3230086144","3230086655","GB","GBR","UNITED KINGDOM" -"3230088960","3230089215","AT","AUT","AUSTRIA" -"3230089216","3230089727","US","USA","UNITED STATES" -"3230089728","3230089983","GB","GBR","UNITED KINGDOM" -"3230089984","3230090239","US","USA","UNITED STATES" -"3230090240","3230090495","GB","GBR","UNITED KINGDOM" -"3230090496","3230092543","US","USA","UNITED STATES" -"3230092544","3230092799","CA","CAN","CANADA" -"3230092800","3230093823","US","USA","UNITED STATES" -"3230093824","3230094079","NL","NLD","NETHERLANDS" -"3230094080","3230094335","CA","CAN","CANADA" -"3230094336","3230095615","US","USA","UNITED STATES" -"3230095616","3230095871","JP","JPN","JAPAN" -"3230096384","3230096639","JP","JPN","JAPAN" -"3230096896","3230097151","JP","JPN","JAPAN" -"3230097408","3230097663","JP","JPN","JAPAN" -"3230098688","3230100735","JP","JPN","JAPAN" -"3230101504","3230104319","US","USA","UNITED STATES" -"3230104576","3230105855","US","USA","UNITED STATES" -"3230105856","3230106111","PT","PRT","PORTUGAL" -"3230106112","3230106879","US","USA","UNITED STATES" -"3230106880","3230107135","AT","AUT","AUSTRIA" -"3230107136","3230107647","US","USA","UNITED STATES" -"3230107904","3230109439","US","USA","UNITED STATES" -"3230109440","3230109695","NO","NOR","NORWAY" -"3230109696","3230109951","US","USA","UNITED STATES" -"3230109952","3230115071","CH","CHE","SWITZERLAND" -"3230115072","3230115327","IT","ITA","ITALY" -"3230115328","3230115583","GR","GRC","GREECE" -"3230115584","3230116095","BE","BEL","BELGIUM" -"3230116096","3230117631","US","USA","UNITED STATES" -"3230117632","3230117887","FR","FRA","FRANCE" -"3230117888","3230120191","US","USA","UNITED STATES" -"3230120192","3230120447","BE","BEL","BELGIUM" -"3230120448","3230120703","US","USA","UNITED STATES" -"3230120704","3230120959","PT","PRT","PORTUGAL" -"3230121216","3230122495","US","USA","UNITED STATES" -"3230123264","3230123775","US","USA","UNITED STATES" -"3230125312","3230125567","US","USA","UNITED STATES" -"3230125824","3230126335","AU","AUS","AUSTRALIA" -"3230126336","3230126591","US","USA","UNITED STATES" -"3230126592","3230126847","AU","AUS","AUSTRALIA" -"3230126848","3230128639","US","USA","UNITED STATES" -"3230128896","3230129151","PT","PRT","PORTUGAL" -"3230129152","3230129663","US","USA","UNITED STATES" -"3230129664","3230129919","JP","JPN","JAPAN" -"3230130176","3230130431","US","USA","UNITED STATES" -"3230130432","3230130687","IE","IRL","IRELAND" -"3230130688","3230131711","US","USA","UNITED STATES" -"3230131968","3230132991","GB","GBR","UNITED KINGDOM" -"3230132992","3230136319","US","USA","UNITED STATES" -"3230136576","3230137087","US","USA","UNITED STATES" -"3230137344","3230137599","US","USA","UNITED STATES" -"3230137600","3230137855","NO","NOR","NORWAY" -"3230137856","3230138111","PL","POL","POLAND" -"3230138624","3230140159","US","USA","UNITED STATES" -"3230140160","3230140415","MT","MLT","MALTA" -"3230140416","3230140671","US","USA","UNITED STATES" -"3230140672","3230140927","FI","FIN","FINLAND" -"3230140928","3230142975","US","USA","UNITED STATES" -"3230142976","3230143231","GB","GBR","UNITED KINGDOM" -"3230143232","3230143487","BE","BEL","BELGIUM" -"3230143488","3230144255","US","USA","UNITED STATES" -"3230144256","3230144511","NL","NLD","NETHERLANDS" -"3230144512","3230145279","US","USA","UNITED STATES" -"3230145280","3230145535","CA","CAN","CANADA" -"3230145536","3230145791","US","USA","UNITED STATES" -"3230145792","3230146047","GB","GBR","UNITED KINGDOM" -"3230146048","3230146303","FR","FRA","FRANCE" -"3230146304","3230146559","PT","PRT","PORTUGAL" -"3230146560","3230147583","US","USA","UNITED STATES" -"3230147840","3230148351","US","USA","UNITED STATES" -"3230148352","3230148607","AU","AUS","AUSTRALIA" -"3230148608","3230148863","GB","GBR","UNITED KINGDOM" -"3230148864","3230149119","CH","CHE","SWITZERLAND" -"3230149120","3230150655","NI","NIC","NICARAGUA" -"3230150656","3230150911","US","USA","UNITED STATES" -"3230150912","3230151167","PT","PRT","PORTUGAL" -"3230151168","3230151423","US","USA","UNITED STATES" -"3230151424","3230151679","NL","NLD","NETHERLANDS" -"3230151680","3230151935","PT","PRT","PORTUGAL" -"3230152192","3230152447","FR","FRA","FRANCE" -"3230153216","3230153471","FR","FRA","FRANCE" -"3230153472","3230153727","PF","PYF","FRENCH POLYNESIA" -"3230153728","3230153983","US","USA","UNITED STATES" -"3230153984","3230154239","RU","RUS","RUSSIAN FEDERATION" -"3230154240","3230156543","US","USA","UNITED STATES" -"3230156544","3230164735","FI","FIN","FINLAND" -"3230165504","3230167295","US","USA","UNITED STATES" -"3230167552","3230168063","CA","CAN","CANADA" -"3230168832","3230172927","US","USA","UNITED STATES" -"3230173184","3230174463","US","USA","UNITED STATES" -"3230174464","3230175231","IN","IND","INDIA" -"3230175232","3230177791","US","USA","UNITED STATES" -"3230177792","3230178303","GB","GBR","UNITED KINGDOM" -"3230178304","3230178559","CH","CHE","SWITZERLAND" -"3230203904","3230269439","US","USA","UNITED STATES" -"3230269696","3230271743","GB","GBR","UNITED KINGDOM" -"3230275584","3230291455","US","USA","UNITED STATES" -"3230291456","3230291711","PT","PRT","PORTUGAL" -"3230291712","3230294783","US","USA","UNITED STATES" -"3230295040","3230295295","AU","AUS","AUSTRALIA" -"3230295296","3230296319","US","USA","UNITED STATES" -"3230296320","3230297343","NO","NOR","NORWAY" -"3230297344","3230299647","SE","SWE","SWEDEN" -"3230299648","3230301695","SG","SGP","SINGAPORE" -"3230301696","3230302207","US","USA","UNITED STATES" -"3230302208","3230302975","CA","CAN","CANADA" -"3230302976","3230303487","US","USA","UNITED STATES" -"3230303744","3230307327","US","USA","UNITED STATES" -"3230307584","3230309119","US","USA","UNITED STATES" -"3230309120","3230309375","NO","NOR","NORWAY" -"3230309376","3230310143","GB","GBR","UNITED KINGDOM" -"3230310144","3230310655","US","USA","UNITED STATES" -"3230310912","3230311423","US","USA","UNITED STATES" -"3230311680","3230316287","US","USA","UNITED STATES" -"3230316288","3230316543","IT","ITA","ITALY" -"3230316544","3230316799","US","USA","UNITED STATES" -"3230316800","3230317311","CA","CAN","CANADA" -"3230317312","3230317567","US","USA","UNITED STATES" -"3230317568","3230317823","SG","SGP","SINGAPORE" -"3230317824","3230318591","US","USA","UNITED STATES" -"3230318592","3230318847","GB","GBR","UNITED KINGDOM" -"3230318848","3230321663","US","USA","UNITED STATES" -"3230321664","3230321919","PT","PRT","PORTUGAL" -"3230321920","3230322175","US","USA","UNITED STATES" -"3230322432","3230322943","US","USA","UNITED STATES" -"3230323968","3230325247","US","USA","UNITED STATES" -"3230325760","3230327551","US","USA","UNITED STATES" -"3230327808","3230328063","AT","AUT","AUSTRIA" -"3230328064","3230328319","GB","GBR","UNITED KINGDOM" -"3230328320","3230329087","CH","CHE","SWITZERLAND" -"3230329088","3230332927","US","USA","UNITED STATES" -"3230332928","3230333183","GB","GBR","UNITED KINGDOM" -"3230333184","3230333695","US","USA","UNITED STATES" -"3230333696","3230333951","NZ","NZL","NEW ZEALAND" -"3230333952","3230334719","US","USA","UNITED STATES" -"3230335232","3230335743","CA","CAN","CANADA" -"3230336000","3230336255","CA","CAN","CANADA" -"3230336512","3230339583","CA","CAN","CANADA" -"3230339840","3230340095","CA","CAN","CANADA" -"3230340352","3230350847","CA","CAN","CANADA" -"3230351104","3230354943","CA","CAN","CANADA" -"3230354944","3230355199","FR","FRA","FRANCE" -"3230355200","3230367743","CA","CAN","CANADA" -"3230368000","3230368511","CA","CAN","CANADA" -"3230369024","3230370303","US","USA","UNITED STATES" -"3230370304","3230370559","CA","CAN","CANADA" -"3230370816","3230372607","CA","CAN","CANADA" -"3230372864","3230383359","CA","CAN","CANADA" -"3230383616","3230384127","CA","CAN","CANADA" -"3230384384","3230387455","CA","CAN","CANADA" -"3230387712","3230400255","CA","CAN","CANADA" -"3230400768","3230591231","FR","FRA","FRANCE" -"3230591232","3230591487","FI","FIN","FINLAND" -"3230591488","3230625791","FR","FRA","FRANCE" -"3230625792","3230626047","FI","FIN","FINLAND" -"3230626048","3230654879","FR","FRA","FRANCE" -"3230654880","3230654895","HU","HUN","HUNGARY" -"3230654896","3230787327","FR","FRA","FRANCE" -"3230793984","3230822655","US","USA","UNITED STATES" -"3230822912","3230823679","US","USA","UNITED STATES" -"3230823680","3230823935","DK","DNK","DENMARK" -"3230824192","3230824447","FR","FRA","FRANCE" -"3230824448","3230825215","US","USA","UNITED STATES" -"3230825216","3230825471","GB","GBR","UNITED KINGDOM" -"3230825472","3230826239","ES","ESP","SPAIN" -"3230826240","3230827007","US","USA","UNITED STATES" -"3230827520","3230827775","AT","AUT","AUSTRIA" -"3230827776","3230828031","NZ","NZL","NEW ZEALAND" -"3230828032","3230828543","HU","HUN","HUNGARY" -"3230828544","3230830079","GB","GBR","UNITED KINGDOM" -"3230830080","3230832127","US","USA","UNITED STATES" -"3230832128","3230832383","NZ","NZL","NEW ZEALAND" -"3230832384","3230832639","US","USA","UNITED STATES" -"3230832640","3230832895","FI","FIN","FINLAND" -"3230832896","3230833663","US","USA","UNITED STATES" -"3230833664","3230833919","CA","CAN","CANADA" -"3230833920","3230834175","BR","BRA","BRAZIL" -"3230834176","3230835455","US","USA","UNITED STATES" -"3230835456","3230837503","NO","NOR","NORWAY" -"3230837504","3230837759","US","USA","UNITED STATES" -"3230837760","3230838015","ES","ESP","SPAIN" -"3230838016","3230840319","IT","ITA","ITALY" -"3230840320","3230840575","FR","FRA","FRANCE" -"3230840576","3230840831","US","USA","UNITED STATES" -"3230840832","3230841087","JP","JPN","JAPAN" -"3230841088","3230841343","DE","DEU","GERMANY" -"3230841600","3230841855","ES","ESP","SPAIN" -"3230841856","3230842111","US","USA","UNITED STATES" -"3230842112","3230842367","AU","AUS","AUSTRALIA" -"3230842624","3230843135","US","USA","UNITED STATES" -"3230843136","3230843391","NO","NOR","NORWAY" -"3230843392","3230844671","US","USA","UNITED STATES" -"3230844928","3230845183","AU","AUS","AUSTRALIA" -"3230845184","3230845951","US","USA","UNITED STATES" -"3230845952","3230846207","CZ","CZE","CZECH REPUBLIC" -"3230846208","3230849535","US","USA","UNITED STATES" -"3230849536","3230850047","NZ","NZL","NEW ZEALAND" -"3230850048","3230851839","US","USA","UNITED STATES" -"3230851840","3230852095","NO","NOR","NORWAY" -"3230852096","3230852351","GB","GBR","UNITED KINGDOM" -"3230852352","3230852607","BR","BRA","BRAZIL" -"3230853120","3230853375","AU","AUS","AUSTRALIA" -"3230853376","3230853887","FR","FRA","FRANCE" -"3230853888","3230854399","US","USA","UNITED STATES" -"3230854400","3230854655","UY","URY","URUGUAY" -"3230854656","3230855167","NO","NOR","NORWAY" -"3230855168","3230855679","US","USA","UNITED STATES" -"3230855680","3230855935","IT","ITA","ITALY" -"3230855936","3230857983","US","USA","UNITED STATES" -"3230857984","3230858751","AU","AUS","AUSTRALIA" -"3230858752","3230859007","US","USA","UNITED STATES" -"3230860032","3230865151","US","USA","UNITED STATES" -"3230865152","3230865407","GB","GBR","UNITED KINGDOM" -"3230865664","3230867967","US","USA","UNITED STATES" -"3230867968","3230868223","IS","ISL","ICELAND" -"3230868224","3230868479","US","USA","UNITED STATES" -"3230868480","3230868735","GB","GBR","UNITED KINGDOM" -"3230868992","3230870015","US","USA","UNITED STATES" -"3230870016","3230870271","PL","POL","POLAND" -"3230870272","3230877183","US","USA","UNITED STATES" -"3230877696","3230878719","US","USA","UNITED STATES" -"3230878720","3230879487","PT","PRT","PORTUGAL" -"3230879488","3230879743","FR","FRA","FRANCE" -"3230879744","3230888447","US","USA","UNITED STATES" -"3230888448","3230888703","AU","AUS","AUSTRALIA" -"3230888704","3230888959","US","USA","UNITED STATES" -"3230889216","3230895359","US","USA","UNITED STATES" -"3230895360","3230895615","PL","POL","POLAND" -"3230895616","3230897151","US","USA","UNITED STATES" -"3230897408","3230897663","US","USA","UNITED STATES" -"3230897664","3230897919","GB","GBR","UNITED KINGDOM" -"3230897920","3230898687","NZ","NZL","NEW ZEALAND" -"3230898688","3230898943","US","USA","UNITED STATES" -"3230898944","3230899199","PT","PRT","PORTUGAL" -"3230899200","3230913023","US","USA","UNITED STATES" -"3230913024","3230913279","BR","BRA","BRAZIL" -"3230913280","3230913535","US","USA","UNITED STATES" -"3230913536","3230913791","GB","GBR","UNITED KINGDOM" -"3230913792","3230914047","CA","CAN","CANADA" -"3230914048","3230914303","US","USA","UNITED STATES" -"3230914304","3230914815","FI","FIN","FINLAND" -"3230914816","3230915071","GB","GBR","UNITED KINGDOM" -"3230915072","3230915327","BR","BRA","BRAZIL" -"3230915328","3230915583","GB","GBR","UNITED KINGDOM" -"3230915584","3230917631","US","USA","UNITED STATES" -"3230917632","3230917887","GB","GBR","UNITED KINGDOM" -"3230917888","3230918399","US","USA","UNITED STATES" -"3230918656","3230919423","US","USA","UNITED STATES" -"3230919424","3230919679","AU","AUS","AUSTRALIA" -"3230919680","3230920959","US","USA","UNITED STATES" -"3230921216","3230922239","US","USA","UNITED STATES" -"3230922240","3230922495","AU","AUS","AUSTRALIA" -"3230922496","3230922751","IT","ITA","ITALY" -"3230922752","3230923519","US","USA","UNITED STATES" -"3230923776","3230924031","US","USA","UNITED STATES" -"3230924032","3230924287","AU","AUS","AUSTRALIA" -"3230924288","3230924543","US","USA","UNITED STATES" -"3230924800","3230933247","US","USA","UNITED STATES" -"3230933248","3230948607","SE","SWE","SWEDEN" -"3230948608","3230951167","US","USA","UNITED STATES" -"3230951168","3230951423","PT","PRT","PORTUGAL" -"3230951680","3230951935","US","USA","UNITED STATES" -"3230952192","3230953215","US","USA","UNITED STATES" -"3230954496","3230967295","AU","AUS","AUSTRALIA" -"3230967296","3230967551","RU","RUS","RUSSIAN FEDERATION" -"3230967552","3230967807","ES","ESP","SPAIN" -"3230967808","3230969087","US","USA","UNITED STATES" -"3230969344","3230969599","US","USA","UNITED STATES" -"3230969600","3230969855","MX","MEX","MEXICO" -"3230969856","3230970111","US","USA","UNITED STATES" -"3230970112","3230972671","GB","GBR","UNITED KINGDOM" -"3230972672","3230973951","US","USA","UNITED STATES" -"3230973952","3230974207","NL","NLD","NETHERLANDS" -"3230974208","3230974463","IT","ITA","ITALY" -"3230974464","3230974719","GB","GBR","UNITED KINGDOM" -"3230974720","3230975487","US","USA","UNITED STATES" -"3230975488","3230975999","GB","GBR","UNITED KINGDOM" -"3230976000","3230976255","NL","NLD","NETHERLANDS" -"3230976256","3230980095","ES","ESP","SPAIN" -"3230980096","3230980351","GB","GBR","UNITED KINGDOM" -"3230980352","3230980607","CA","CAN","CANADA" -"3230980608","3230980863","US","USA","UNITED STATES" -"3230981120","3230981375","IT","ITA","ITALY" -"3230981376","3230981631","NZ","NZL","NEW ZEALAND" -"3230981632","3230981887","US","USA","UNITED STATES" -"3230981888","3230983935","AU","AUS","AUSTRALIA" -"3230983936","3230989823","US","USA","UNITED STATES" -"3230990592","3230991103","US","USA","UNITED STATES" -"3230991104","3230991359","PL","POL","POLAND" -"3230991360","3230991615","US","USA","UNITED STATES" -"3230991616","3230991871","FI","FIN","FINLAND" -"3230991872","3230992383","US","USA","UNITED STATES" -"3230992640","3230994175","US","USA","UNITED STATES" -"3230994176","3230994431","GB","GBR","UNITED KINGDOM" -"3230994432","3230994687","US","USA","UNITED STATES" -"3230994944","3230995199","US","USA","UNITED STATES" -"3230995200","3230995455","ES","ESP","SPAIN" -"3230995456","3230995711","AU","AUS","AUSTRALIA" -"3230995712","3230996223","US","USA","UNITED STATES" -"3230996480","3230997247","US","USA","UNITED STATES" -"3230997248","3230997503","AT","AUT","AUSTRIA" -"3230997504","3230997759","US","USA","UNITED STATES" -"3230997760","3230999039","NL","NLD","NETHERLANDS" -"3230999040","3230999295","US","USA","UNITED STATES" -"3230999296","3230999551","NL","NLD","NETHERLANDS" -"3230999552","3230999807","AU","AUS","AUSTRALIA" -"3230999808","3231000319","US","USA","UNITED STATES" -"3231000576","3231000831","US","USA","UNITED STATES" -"3231000832","3231001087","FR","FRA","FRANCE" -"3231001088","3231003903","US","USA","UNITED STATES" -"3231003904","3231004159","CA","CAN","CANADA" -"3231004160","3231004415","AU","AUS","AUSTRALIA" -"3231004416","3231004927","US","USA","UNITED STATES" -"3231004928","3231005183","GB","GBR","UNITED KINGDOM" -"3231005440","3231005695","FR","FRA","FRANCE" -"3231005696","3231005951","GB","GBR","UNITED KINGDOM" -"3231005952","3231007487","US","USA","UNITED STATES" -"3231009280","3231009791","US","USA","UNITED STATES" -"3231010048","3231010303","FR","FRA","FRANCE" -"3231010304","3231010815","NO","NOR","NORWAY" -"3231010816","3231011071","CA","CAN","CANADA" -"3231011072","3231011839","US","USA","UNITED STATES" -"3231012096","3231012863","US","USA","UNITED STATES" -"3231013120","3231013375","US","USA","UNITED STATES" -"3231013376","3231013631","DE","DEU","GERMANY" -"3231013888","3231014655","US","USA","UNITED STATES" -"3231015168","3231015423","US","USA","UNITED STATES" -"3231015424","3231015679","CA","CAN","CANADA" -"3231015680","3231015935","US","USA","UNITED STATES" -"3231015936","3231016191","NO","NOR","NORWAY" -"3231016192","3231016447","US","USA","UNITED STATES" -"3231016448","3231016703","NO","NOR","NORWAY" -"3231016704","3231016959","US","USA","UNITED STATES" -"3231017216","3231018495","US","USA","UNITED STATES" -"3231018496","3231018751","IT","ITA","ITALY" -"3231018752","3231019007","GB","GBR","UNITED KINGDOM" -"3231019008","3231020287","US","USA","UNITED STATES" -"3231020288","3231020543","GB","GBR","UNITED KINGDOM" -"3231020544","3231020799","NL","NLD","NETHERLANDS" -"3231020800","3231021567","GB","GBR","UNITED KINGDOM" -"3231021568","3231021823","US","USA","UNITED STATES" -"3231021824","3231022079","CA","CAN","CANADA" -"3231022080","3231022591","US","USA","UNITED STATES" -"3231022592","3231022847","DE","DEU","GERMANY" -"3231022848","3231028479","US","USA","UNITED STATES" -"3231028480","3231028735","AU","AUS","AUSTRALIA" -"3231028736","3231042047","US","USA","UNITED STATES" -"3231042048","3231042303","GU","GUM","GUAM" -"3231042304","3231043839","US","USA","UNITED STATES" -"3231043840","3231044095","JP","JPN","JAPAN" -"3231044352","3231046399","US","USA","UNITED STATES" -"3231046656","3231048447","US","USA","UNITED STATES" -"3231048448","3231048703","NL","NLD","NETHERLANDS" -"3231048704","3231049727","US","USA","UNITED STATES" -"3231049728","3231049983","AT","AUT","AUSTRIA" -"3231049984","3231050239","US","USA","UNITED STATES" -"3231050496","3231051263","US","USA","UNITED STATES" -"3231051264","3231051519","GB","GBR","UNITED KINGDOM" -"3231051520","3231051775","HK","HKG","HONG KONG" -"3231051776","3231053055","US","USA","UNITED STATES" -"3231054848","3231055103","US","USA","UNITED STATES" -"3231056128","3231066367","US","USA","UNITED STATES" -"3231067392","3231067647","US","USA","UNITED STATES" -"3231068928","3231070463","US","USA","UNITED STATES" -"3231070720","3231074559","SE","SWE","SWEDEN" -"3231075072","3231075583","SE","SWE","SWEDEN" -"3231075840","3231077119","SE","SWE","SWEDEN" -"3231077376","3231077631","SE","SWE","SWEDEN" -"3231078144","3231078655","US","USA","UNITED STATES" -"3231078656","3231078911","GB","GBR","UNITED KINGDOM" -"3231078912","3231079423","CA","CAN","CANADA" -"3231079424","3231079679","GB","GBR","UNITED KINGDOM" -"3231079680","3231079935","US","USA","UNITED STATES" -"3231079936","3231080191","NL","NLD","NETHERLANDS" -"3231080192","3231080447","US","USA","UNITED STATES" -"3231080448","3231080703","AU","AUS","AUSTRALIA" -"3231080704","3231082495","US","USA","UNITED STATES" -"3231082496","3231082751","PL","POL","POLAND" -"3231082752","3231083007","US","USA","UNITED STATES" -"3231083008","3231083263","GB","GBR","UNITED KINGDOM" -"3231083264","3231083519","AU","AUS","AUSTRALIA" -"3231083520","3231085567","US","USA","UNITED STATES" -"3231085824","3231087359","US","USA","UNITED STATES" -"3231087616","3231087871","NO","NOR","NORWAY" -"3231087872","3231088127","US","USA","UNITED STATES" -"3231088128","3231088383","GT","GTM","GUATEMALA" -"3231088384","3231088895","US","USA","UNITED STATES" -"3231088896","3231091711","AU","AUS","AUSTRALIA" -"3231091712","3231091967","GB","GBR","UNITED KINGDOM" -"3231091968","3231092223","US","USA","UNITED STATES" -"3231092480","3231092735","US","USA","UNITED STATES" -"3231092736","3231092991","NZ","NZL","NEW ZEALAND" -"3231092992","3231093247","US","USA","UNITED STATES" -"3231093248","3231093503","IT","ITA","ITALY" -"3231093504","3231094527","US","USA","UNITED STATES" -"3231097088","3231100415","US","USA","UNITED STATES" -"3231100672","3231101183","US","USA","UNITED STATES" -"3231101184","3231103231","GB","GBR","UNITED KINGDOM" -"3231103488","3231103999","US","USA","UNITED STATES" -"3231104000","3231104255","NO","NOR","NORWAY" -"3231104256","3231104767","DE","DEU","GERMANY" -"3231104768","3231105023","US","USA","UNITED STATES" -"3231105024","3231105535","PT","PRT","PORTUGAL" -"3231105536","3231106303","IT","ITA","ITALY" -"3231106304","3231106559","NO","NOR","NORWAY" -"3231106560","3231106815","GB","GBR","UNITED KINGDOM" -"3231106816","3231107071","US","USA","UNITED STATES" -"3231107072","3231107327","AU","AUS","AUSTRALIA" -"3231107328","3231107583","US","USA","UNITED STATES" -"3231107584","3231107839","AU","AUS","AUSTRALIA" -"3231107840","3231108095","AT","AUT","AUSTRIA" -"3231108096","3231108351","GB","GBR","UNITED KINGDOM" -"3231108352","3231108607","RU","RUS","RUSSIAN FEDERATION" -"3231108608","3231108863","US","USA","UNITED STATES" -"3231109120","3231109375","GB","GBR","UNITED KINGDOM" -"3231109376","3231109631","NO","NOR","NORWAY" -"3231109632","3231109887","US","USA","UNITED STATES" -"3231110144","3231110399","US","USA","UNITED STATES" -"3231111168","3231111679","US","USA","UNITED STATES" -"3231111680","3231112447","NZ","NZL","NEW ZEALAND" -"3231112448","3231112959","US","USA","UNITED STATES" -"3231112960","3231113215","NO","NOR","NORWAY" -"3231113216","3231113983","US","USA","UNITED STATES" -"3231113984","3231115775","GB","GBR","UNITED KINGDOM" -"3231115776","3231116799","AU","AUS","AUSTRALIA" -"3231116800","3231117055","HU","HUN","HUNGARY" -"3231117056","3231118335","US","USA","UNITED STATES" -"3231118592","3231118847","US","USA","UNITED STATES" -"3231118848","3231119103","AU","AUS","AUSTRALIA" -"3231119104","3231119359","US","USA","UNITED STATES" -"3231119360","3231119615","GB","GBR","UNITED KINGDOM" -"3231119616","3231120383","TH","THA","THAILAND" -"3231120384","3231120639","NO","NOR","NORWAY" -"3231120640","3231120895","US","USA","UNITED STATES" -"3231120896","3231121151","NO","NOR","NORWAY" -"3231121664","3231135231","US","USA","UNITED STATES" -"3231135232","3231135487","CH","CHE","SWITZERLAND" -"3231135488","3231149311","US","USA","UNITED STATES" -"3231149312","3231149567","CA","CAN","CANADA" -"3231149568","3231150079","US","USA","UNITED STATES" -"3231150080","3231150335","NL","NLD","NETHERLANDS" -"3231150336","3231154431","US","USA","UNITED STATES" -"3231154432","3231154687","IN","IND","INDIA" -"3231187200","3231188479","US","USA","UNITED STATES" -"3231188480","3231188735","NO","NOR","NORWAY" -"3231188736","3231189503","US","USA","UNITED STATES" -"3231189760","3231190527","US","USA","UNITED STATES" -"3231190528","3231190783","GB","GBR","UNITED KINGDOM" -"3231190784","3231191295","US","USA","UNITED STATES" -"3231191296","3231191551","GB","GBR","UNITED KINGDOM" -"3231191552","3231192575","US","USA","UNITED STATES" -"3231193600","3231194111","DE","DEU","GERMANY" -"3231194368","3231197695","US","USA","UNITED STATES" -"3231197696","3231197951","FR","FRA","FRANCE" -"3231197952","3231198207","US","USA","UNITED STATES" -"3231198208","3231198463","GB","GBR","UNITED KINGDOM" -"3231198464","3231198975","US","USA","UNITED STATES" -"3231198976","3231199231","PT","PRT","PORTUGAL" -"3231199232","3231199487","GB","GBR","UNITED KINGDOM" -"3231199488","3231200255","NL","NLD","NETHERLANDS" -"3231200256","3231200767","US","USA","UNITED STATES" -"3231200768","3231201023","AT","AUT","AUSTRIA" -"3231201024","3231202559","US","USA","UNITED STATES" -"3231202560","3231203071","GB","GBR","UNITED KINGDOM" -"3231203072","3231203327","AT","AUT","AUSTRIA" -"3231203328","3231203839","US","USA","UNITED STATES" -"3231204096","3231204351","US","USA","UNITED STATES" -"3231204352","3231204607","FI","FIN","FINLAND" -"3231204608","3231204863","JP","JPN","JAPAN" -"3231204864","3231207167","US","USA","UNITED STATES" -"3231207424","3231207935","US","USA","UNITED STATES" -"3231207936","3231208191","DE","DEU","GERMANY" -"3231208192","3231208959","US","USA","UNITED STATES" -"3231208960","3231209471","AU","AUS","AUSTRALIA" -"3231209472","3231210239","US","USA","UNITED STATES" -"3231210496","3231211775","US","USA","UNITED STATES" -"3231211776","3231212031","CA","CAN","CANADA" -"3231212032","3231212287","CH","CHE","SWITZERLAND" -"3231212288","3231214335","US","USA","UNITED STATES" -"3231214336","3231214591","CA","CAN","CANADA" -"3231214592","3231215103","US","USA","UNITED STATES" -"3231215360","3231215615","NO","NOR","NORWAY" -"3231215616","3231215871","GB","GBR","UNITED KINGDOM" -"3231215872","3231217151","US","USA","UNITED STATES" -"3231217408","3231217663","AU","AUS","AUSTRALIA" -"3231217664","3231218175","US","USA","UNITED STATES" -"3231218176","3231218431","GB","GBR","UNITED KINGDOM" -"3231218432","3231218687","US","USA","UNITED STATES" -"3231218688","3231218943","BE","BEL","BELGIUM" -"3231218944","3231219967","US","USA","UNITED STATES" -"3231221248","3231221503","US","USA","UNITED STATES" -"3231221760","3231223039","US","USA","UNITED STATES" -"3231223040","3231223295","IT","ITA","ITALY" -"3231223296","3231223807","US","USA","UNITED STATES" -"3231223808","3231224063","AU","AUS","AUSTRALIA" -"3231224064","3231224319","US","USA","UNITED STATES" -"3231224320","3231224575","AU","AUS","AUSTRALIA" -"3231224576","3231225599","US","USA","UNITED STATES" -"3231225600","3231225855","DE","DEU","GERMANY" -"3231226368","3231226879","US","USA","UNITED STATES" -"3231226880","3231227135","GB","GBR","UNITED KINGDOM" -"3231227648","3231228927","US","USA","UNITED STATES" -"3231228928","3231229183","PR","PRI","PUERTO RICO" -"3231229184","3231229439","CA","CAN","CANADA" -"3231229440","3231229695","IT","ITA","ITALY" -"3231229696","3231229951","FR","FRA","FRANCE" -"3231229952","3231231487","US","USA","UNITED STATES" -"3231231488","3231231743","PT","PRT","PORTUGAL" -"3231231744","3231233023","US","USA","UNITED STATES" -"3231233280","3231234047","US","USA","UNITED STATES" -"3231234048","3231235071","GB","GBR","UNITED KINGDOM" -"3231235072","3231236095","US","USA","UNITED STATES" -"3231236608","3231236863","US","USA","UNITED STATES" -"3231236864","3231237119","CA","CAN","CANADA" -"3231237120","3231237375","US","USA","UNITED STATES" -"3231237376","3231237631","AU","AUS","AUSTRALIA" -"3231237632","3231238911","US","USA","UNITED STATES" -"3231239168","3231241215","US","USA","UNITED STATES" -"3231241216","3231241471","JP","JPN","JAPAN" -"3231241984","3231244287","US","USA","UNITED STATES" -"3231244544","3231248639","US","USA","UNITED STATES" -"3231248640","3231248895","GB","GBR","UNITED KINGDOM" -"3231248896","3231249407","US","USA","UNITED STATES" -"3231249408","3231249663","GB","GBR","UNITED KINGDOM" -"3231249664","3231250431","US","USA","UNITED STATES" -"3231250432","3231250687","CA","CAN","CANADA" -"3231250688","3231251711","US","USA","UNITED STATES" -"3231251712","3231251967","GB","GBR","UNITED KINGDOM" -"3231251968","3231252223","AT","AUT","AUSTRIA" -"3231252736","3231252991","US","USA","UNITED STATES" -"3231252992","3231253503","GB","GBR","UNITED KINGDOM" -"3231253504","3231254015","US","USA","UNITED STATES" -"3231254272","3231254783","US","USA","UNITED STATES" -"3231254784","3231255039","AU","AUS","AUSTRALIA" -"3231255040","3231255551","US","USA","UNITED STATES" -"3231255552","3231255807","GB","GBR","UNITED KINGDOM" -"3231255808","3231256063","PT","PRT","PORTUGAL" -"3231256320","3231257087","US","USA","UNITED STATES" -"3231257088","3231257599","HU","HUN","HUNGARY" -"3231257600","3231258879","US","USA","UNITED STATES" -"3231259136","3231264255","US","USA","UNITED STATES" -"3231264512","3231265791","US","USA","UNITED STATES" -"3231266048","3231275007","US","USA","UNITED STATES" -"3231275008","3231275263","BR","BRA","BRAZIL" -"3231275264","3231275519","CH","CHE","SWITZERLAND" -"3231275520","3231276287","US","USA","UNITED STATES" -"3231276288","3231276543","AU","AUS","AUSTRALIA" -"3231276544","3231276799","US","USA","UNITED STATES" -"3231276800","3231281919","JP","JPN","JAPAN" -"3231281920","3231282175","US","USA","UNITED STATES" -"3231282176","3231282431","HU","HUN","HUNGARY" -"3231282432","3231282943","US","USA","UNITED STATES" -"3231282944","3231283199","CL","CHL","CHILE" -"3231283200","3231283455","BR","BRA","BRAZIL" -"3231283456","3231284991","US","USA","UNITED STATES" -"3231284992","3231285247","PL","POL","POLAND" -"3231285248","3231290111","US","USA","UNITED STATES" -"3231290368","3231291647","US","USA","UNITED STATES" -"3231291648","3231291903","GB","GBR","UNITED KINGDOM" -"3231291904","3231292159","US","USA","UNITED STATES" -"3231292160","3231292415","BR","BRA","BRAZIL" -"3231292416","3231292927","US","USA","UNITED STATES" -"3231292928","3231293183","AU","AUS","AUSTRALIA" -"3231293184","3231294975","US","USA","UNITED STATES" -"3231294976","3231295231","GB","GBR","UNITED KINGDOM" -"3231295232","3231295487","CR","CRI","COSTA RICA" -"3231295488","3231295743","BE","BEL","BELGIUM" -"3231295744","3231296255","US","USA","UNITED STATES" -"3231296256","3231296511","RU","RUS","RUSSIAN FEDERATION" -"3231296512","3231296767","US","USA","UNITED STATES" -"3231296768","3231299327","AT","AUT","AUSTRIA" -"3231299328","3231299583","US","USA","UNITED STATES" -"3231300352","3231300607","US","USA","UNITED STATES" -"3231300608","3231300863","SE","SWE","SWEDEN" -"3231300864","3231301119","GB","GBR","UNITED KINGDOM" -"3231301120","3231302143","US","USA","UNITED STATES" -"3231302144","3231302399","NO","NOR","NORWAY" -"3231302400","3231302655","US","USA","UNITED STATES" -"3231302656","3231303167","AU","AUS","AUSTRALIA" -"3231303168","3231307007","US","USA","UNITED STATES" -"3231307008","3231307263","GB","GBR","UNITED KINGDOM" -"3231307264","3231308031","US","USA","UNITED STATES" -"3231308032","3231308287","CA","CAN","CANADA" -"3231308288","3231308799","US","USA","UNITED STATES" -"3231308800","3231309055","CA","CAN","CANADA" -"3231309056","3231311103","PH","PHL","PHILIPPINES" -"3231311104","3231316735","US","USA","UNITED STATES" -"3231316736","3231316991","NZ","NZL","NEW ZEALAND" -"3231316992","3231317759","US","USA","UNITED STATES" -"3231318272","3231318783","US","USA","UNITED STATES" -"3231319040","3231319807","US","USA","UNITED STATES" -"3231320064","3231321343","US","USA","UNITED STATES" -"3231322112","3231324671","SG","SGP","SINGAPORE" -"3231326208","3231333119","US","USA","UNITED STATES" -"3231333376","3231338495","US","USA","UNITED STATES" -"3231338752","3231342591","US","USA","UNITED STATES" -"3231350528","3231351551","US","USA","UNITED STATES" -"3231383808","3231385343","NO","NOR","NORWAY" -"3231385856","3231401215","US","USA","UNITED STATES" -"3231416320","3231423999","US","USA","UNITED STATES" -"3231449088","3231482879","US","USA","UNITED STATES" -"3231482880","3231483135","BE","BEL","BELGIUM" -"3231483136","3231484927","US","USA","UNITED STATES" -"3231484928","3231485951","JP","JPN","JAPAN" -"3231486208","3231489279","JP","JPN","JAPAN" -"3231489536","3231490047","JP","JPN","JAPAN" -"3231490048","3231490559","US","USA","UNITED STATES" -"3231490560","3231490815","GB","GBR","UNITED KINGDOM" -"3231490816","3231491071","US","USA","UNITED STATES" -"3231491328","3231491583","NZ","NZL","NEW ZEALAND" -"3231491584","3231491839","US","USA","UNITED STATES" -"3231491840","3231492095","GB","GBR","UNITED KINGDOM" -"3231492096","3231497727","US","USA","UNITED STATES" -"3231497984","3231499263","US","USA","UNITED STATES" -"3231499520","3231500031","US","USA","UNITED STATES" -"3231500032","3231500287","BM","BMU","BERMUDA" -"3231500288","3231502079","US","USA","UNITED STATES" -"3231502080","3231502591","AU","AUS","AUSTRALIA" -"3231502592","3231502847","US","USA","UNITED STATES" -"3231502848","3231503103","PT","PRT","PORTUGAL" -"3231503104","3231503615","US","USA","UNITED STATES" -"3231503616","3231503871","IT","ITA","ITALY" -"3231503872","3231504383","US","USA","UNITED STATES" -"3231504640","3231504895","GB","GBR","UNITED KINGDOM" -"3231505152","3231505407","US","USA","UNITED STATES" -"3231505664","3231506687","US","USA","UNITED STATES" -"3231506688","3231506943","NZ","NZL","NEW ZEALAND" -"3231506944","3231507199","US","USA","UNITED STATES" -"3231507200","3231507455","BE","BEL","BELGIUM" -"3231507456","3231507967","US","USA","UNITED STATES" -"3231508224","3231508479","US","USA","UNITED STATES" -"3231508992","3231509247","US","USA","UNITED STATES" -"3231510272","3231510527","GB","GBR","UNITED KINGDOM" -"3231510784","3231511551","US","USA","UNITED STATES" -"3231512576","3231512831","LU","LUX","LUXEMBOURG" -"3231512832","3231513087","AU","AUS","AUSTRALIA" -"3231513088","3231513343","US","USA","UNITED STATES" -"3231513600","3231514367","US","USA","UNITED STATES" -"3231514880","3231515647","NO","NOR","NORWAY" -"3231515648","3231516159","US","USA","UNITED STATES" -"3231516672","3231519231","SE","SWE","SWEDEN" -"3231522560","3231524607","US","USA","UNITED STATES" -"3231531008","3231533567","US","USA","UNITED STATES" -"3231547392","3231547647","US","USA","UNITED STATES" -"3231547648","3231547903","NO","NOR","NORWAY" -"3231547904","3231556095","US","USA","UNITED STATES" -"3231556096","3231556351","HK","HKG","HONG KONG" -"3231556352","3231556863","US","USA","UNITED STATES" -"3231556864","3231557887","AT","AUT","AUSTRIA" -"3231557888","3231558399","GB","GBR","UNITED KINGDOM" -"3231558400","3231558655","DE","DEU","GERMANY" -"3231558656","3231558911","GB","GBR","UNITED KINGDOM" -"3231558912","3231559167","CA","CAN","CANADA" -"3231559168","3231559423","GB","GBR","UNITED KINGDOM" -"3231559424","3231559679","US","USA","UNITED STATES" -"3231559680","3231559935","GB","GBR","UNITED KINGDOM" -"3231559936","3231561983","US","USA","UNITED STATES" -"3231561984","3231562239","IT","ITA","ITALY" -"3231562240","3231562495","US","USA","UNITED STATES" -"3231562496","3231562751","GB","GBR","UNITED KINGDOM" -"3231562752","3231563007","US","USA","UNITED STATES" -"3231563008","3231563263","CH","CHE","SWITZERLAND" -"3231563520","3231563775","HK","HKG","HONG KONG" -"3231580416","3231580927","US","USA","UNITED STATES" -"3231581184","3231583231","US","USA","UNITED STATES" -"3231584256","3231586559","US","USA","UNITED STATES" -"3231588352","3231596031","US","USA","UNITED STATES" -"3231596544","3231634943","US","USA","UNITED STATES" -"3231643648","3231644927","US","USA","UNITED STATES" -"3231645184","3231645439","US","USA","UNITED STATES" -"3231645952","3231647743","US","USA","UNITED STATES" -"3231648000","3231649791","US","USA","UNITED STATES" -"3231649792","3231653631","SG","SGP","SINGAPORE" -"3231653888","3231655167","US","USA","UNITED STATES" -"3231663616","3231663871","FI","FIN","FINLAND" -"3231663872","3231664127","CA","CAN","CANADA" -"3231664128","3231664383","US","USA","UNITED STATES" -"3231664384","3231664639","GB","GBR","UNITED KINGDOM" -"3231664640","3231665407","US","USA","UNITED STATES" -"3231665408","3231665663","IT","ITA","ITALY" -"3231665664","3231667199","US","USA","UNITED STATES" -"3231667200","3231667711","ES","ESP","SPAIN" -"3231667712","3231668735","US","USA","UNITED STATES" -"3231668736","3231668991","BE","BEL","BELGIUM" -"3231669248","3231669503","US","USA","UNITED STATES" -"3231669760","3231670015","CA","CAN","CANADA" -"3231670016","3231670271","DE","DEU","GERMANY" -"3231670272","3231671039","US","USA","UNITED STATES" -"3231671040","3231672319","GB","GBR","UNITED KINGDOM" -"3231672320","3231672575","US","USA","UNITED STATES" -"3231672576","3231672831","NL","NLD","NETHERLANDS" -"3231672832","3231673343","US","USA","UNITED STATES" -"3231673344","3231673599","NO","NOR","NORWAY" -"3231673600","3231673855","IE","IRL","IRELAND" -"3231673856","3231674111","US","USA","UNITED STATES" -"3231674112","3231674367","CA","CAN","CANADA" -"3231674368","3231675391","US","USA","UNITED STATES" -"3231675392","3231675903","BR","BRA","BRAZIL" -"3231675904","3231676159","IE","IRL","IRELAND" -"3231676672","3231676927","FR","FRA","FRANCE" -"3231676928","3231677183","FI","FIN","FINLAND" -"3231678464","3231682047","US","USA","UNITED STATES" -"3231711488","3231713023","US","USA","UNITED STATES" -"3231713024","3231713279","CA","CAN","CANADA" -"3231713280","3231713791","US","USA","UNITED STATES" -"3231713792","3231714047","IE","IRL","IRELAND" -"3231714048","3231715071","US","USA","UNITED STATES" -"3231715072","3231715327","SI","SVN","SLOVENIA" -"3231715328","3231715583","AU","AUS","AUSTRALIA" -"3231715584","3231716095","US","USA","UNITED STATES" -"3231716096","3231716351","AU","AUS","AUSTRALIA" -"3231716352","3231716607","US","USA","UNITED STATES" -"3231716608","3231716863","TR","TUR","TURKEY" -"3231716864","3231717119","LU","LUX","LUXEMBOURG" -"3231717120","3231717375","NO","NOR","NORWAY" -"3231717632","3231718143","US","USA","UNITED STATES" -"3231718144","3231718399","IT","ITA","ITALY" -"3231718400","3231718655","US","USA","UNITED STATES" -"3231718656","3231718911","PG","PNG","PAPUA NEW GUINEA" -"3231718912","3231719679","US","USA","UNITED STATES" -"3231719680","3231719935","ES","ESP","SPAIN" -"3231720192","3231720703","US","USA","UNITED STATES" -"3231720704","3231720959","IT","ITA","ITALY" -"3231720960","3231722751","US","USA","UNITED STATES" -"3231722752","3231723007","BR","BRA","BRAZIL" -"3231723008","3231723519","US","USA","UNITED STATES" -"3231723776","3231724031","US","USA","UNITED STATES" -"3231724032","3231724287","BR","BRA","BRAZIL" -"3231724288","3231725055","US","USA","UNITED STATES" -"3231725312","3231727871","US","USA","UNITED STATES" -"3231727872","3231728127","DE","DEU","GERMANY" -"3231728384","3231728639","AT","AUT","AUSTRIA" -"3231728640","3231729407","US","USA","UNITED STATES" -"3231729408","3231729663","AU","AUS","AUSTRALIA" -"3231729664","3231735551","US","USA","UNITED STATES" -"3231735552","3231736063","CH","CHE","SWITZERLAND" -"3231736064","3231737087","US","USA","UNITED STATES" -"3231737600","3231738367","US","USA","UNITED STATES" -"3231738368","3231738623","NL","NLD","NETHERLANDS" -"3231738624","3231739135","US","USA","UNITED STATES" -"3231739136","3231739391","GB","GBR","UNITED KINGDOM" -"3231739392","3231739647","PL","POL","POLAND" -"3231739648","3231739903","BR","BRA","BRAZIL" -"3231739904","3231742719","US","USA","UNITED STATES" -"3231742720","3231742975","FR","FRA","FRANCE" -"3231742976","3231743487","US","USA","UNITED STATES" -"3231743488","3231743743","NO","NOR","NORWAY" -"3231743744","3231743999","US","USA","UNITED STATES" -"3231744000","3231744255","BR","BRA","BRAZIL" -"3231744256","3231747583","US","USA","UNITED STATES" -"3231747584","3231747839","DE","DEU","GERMANY" -"3231747840","3231748095","GB","GBR","UNITED KINGDOM" -"3231748096","3231750143","US","USA","UNITED STATES" -"3231750144","3231750399","NL","NLD","NETHERLANDS" -"3231750400","3231750911","US","USA","UNITED STATES" -"3231750912","3231751167","AU","AUS","AUSTRALIA" -"3231751168","3231751423","IT","ITA","ITALY" -"3231751424","3231752191","US","USA","UNITED STATES" -"3231752192","3231752447","IT","ITA","ITALY" -"3231752448","3231752703","JP","JPN","JAPAN" -"3231752704","3231753983","US","USA","UNITED STATES" -"3231753984","3231754239","CA","CAN","CANADA" -"3231754240","3231754495","US","USA","UNITED STATES" -"3231754496","3231755263","AU","AUS","AUSTRALIA" -"3231755264","3231755519","HU","HUN","HUNGARY" -"3231755520","3231755775","US","USA","UNITED STATES" -"3231755776","3231756543","PR","PRI","PUERTO RICO" -"3231756544","3231757311","GB","GBR","UNITED KINGDOM" -"3231757312","3231759359","US","USA","UNITED STATES" -"3231759360","3231759615","BR","BRA","BRAZIL" -"3231759616","3231760895","US","USA","UNITED STATES" -"3231760896","3231761407","GB","GBR","UNITED KINGDOM" -"3231761408","3231763711","US","USA","UNITED STATES" -"3231763712","3231763967","AU","AUS","AUSTRALIA" -"3231763968","3231766271","US","USA","UNITED STATES" -"3231766528","3231768575","US","USA","UNITED STATES" -"3231768832","3231769087","NO","NOR","NORWAY" -"3231769088","3231769343","NZ","NZL","NEW ZEALAND" -"3231769344","3231769855","US","USA","UNITED STATES" -"3231769856","3231770111","AU","AUS","AUSTRALIA" -"3231770112","3231770367","US","USA","UNITED STATES" -"3231770368","3231770879","AT","AUT","AUSTRIA" -"3231770880","3231771135","RU","RUS","RUSSIAN FEDERATION" -"3231771136","3231773951","US","USA","UNITED STATES" -"3231773952","3231775231","PT","PRT","PORTUGAL" -"3231775488","3231775743","PT","PRT","PORTUGAL" -"3231775744","3231775999","IL","ISR","ISRAEL" -"3231776000","3231776511","US","USA","UNITED STATES" -"3231777024","3231778047","US","USA","UNITED STATES" -"3231778816","3231786495","US","USA","UNITED STATES" -"3231793152","3231793663","BE","BEL","BELGIUM" -"3231809536","3231810047","NZ","NZL","NEW ZEALAND" -"3231846400","3231846655","RO","ROM","ROMANIA" -"3231908096","3231913215","US","USA","UNITED STATES" -"3231916032","3231948799","FI","FIN","FINLAND" -"3231973376","3232038911","AT","AUT","AUSTRIA" -"3232038912","3232092671","SE","SWE","SWEDEN" -"3232092672","3232093183","GB","GBR","UNITED KINGDOM" -"3232093184","3232093439","US","USA","UNITED STATES" -"3232093440","3232094207","GB","GBR","UNITED KINGDOM" -"3232094208","3232094719","CH","CHE","SWITZERLAND" -"3232094720","3232095231","US","USA","UNITED STATES" -"3232095232","3232096255","GB","GBR","UNITED KINGDOM" -"3232096256","3232104447","SE","SWE","SWEDEN" -"3232104448","3232107519","DE","DEU","GERMANY" -"3232108544","3232129023","DE","DEU","GERMANY" -"3232131072","3232133119","DE","DEU","GERMANY" -"3232133632","3232134143","DE","DEU","GERMANY" -"3232141824","3232156159","DE","DEU","GERMANY" -"3232156672","3232159743","DE","DEU","GERMANY" -"3232160768","3232163839","DE","DEU","GERMANY" -"3232165888","3232169727","DE","DEU","GERMANY" -"3232169984","3232235519","IT","ITA","ITALY" -"3232301056","3232302335","US","USA","UNITED STATES" -"3232303104","3232303615","US","USA","UNITED STATES" -"3232305152","3232305919","US","USA","UNITED STATES" -"3232309248","3232311807","SG","SGP","SINGAPORE" -"3232317440","3232317951","US","USA","UNITED STATES" -"3232366592","3232391167","US","USA","UNITED STATES" -"3232391168","3232399359","CH","CHE","SWITZERLAND" -"3232399360","3232399615","US","USA","UNITED STATES" -"3232433920","3232435455","US","USA","UNITED STATES" -"3232436224","3232436735","US","USA","UNITED STATES" -"3232448512","3232461311","US","USA","UNITED STATES" -"3232464896","3232483327","GB","GBR","UNITED KINGDOM" -"3232497664","3232555007","US","USA","UNITED STATES" -"3232555264","3232555775","US","USA","UNITED STATES" -"3232555776","3232557055","JP","JPN","JAPAN" -"3232557568","3232559103","JP","JPN","JAPAN" -"3232559360","3232560127","JP","JPN","JAPAN" -"3232560384","3232560895","JP","JPN","JAPAN" -"3232560896","3232561663","US","USA","UNITED STATES" -"3232561664","3232561919","CA","CAN","CANADA" -"3232561920","3232562431","US","USA","UNITED STATES" -"3232562432","3232562687","LU","LUX","LUXEMBOURG" -"3232562688","3232562943","CA","CAN","CANADA" -"3232563456","3232564479","GB","GBR","UNITED KINGDOM" -"3232565248","3232566527","US","USA","UNITED STATES" -"3232567296","3232569599","NZ","NZL","NEW ZEALAND" -"3232571392","3232579583","US","USA","UNITED STATES" -"3232595968","3232598015","GB","GBR","UNITED KINGDOM" -"3232629248","3232629759","US","USA","UNITED STATES" -"3232630784","3232632575","US","USA","UNITED STATES" -"3232632832","3232634879","US","USA","UNITED STATES" -"3232636928","3232645119","US","USA","UNITED STATES" -"3232645120","3232646399","AT","AUT","AUSTRIA" -"3232661504","3232694271","JP","JPN","JAPAN" -"3232694528","3232695807","US","USA","UNITED STATES" -"3232696320","3232697599","US","USA","UNITED STATES" -"3232698368","3232699903","US","USA","UNITED STATES" -"3232702464","3232706559","FI","FIN","FINLAND" -"3232706560","3232706815","US","USA","UNITED STATES" -"3232710656","3232716799","US","USA","UNITED STATES" -"3232727040","3232759807","US","USA","UNITED STATES" -"3232759808","3232825343","SE","SWE","SWEDEN" -"3233285120","3233285375","US","USA","UNITED STATES" -"3233481728","3233484799","US","USA","UNITED STATES" -"3233484800","3233487359","ES","ESP","SPAIN" -"3233488896","3233496575","US","USA","UNITED STATES" -"3233497088","3233505279","US","USA","UNITED STATES" -"3233513472","3233546239","US","USA","UNITED STATES" -"3233546496","3233546751","US","USA","UNITED STATES" -"3233547008","3233548287","US","USA","UNITED STATES" -"3233548800","3233549055","PT","PRT","PORTUGAL" -"3233549056","3233549311","BR","BRA","BRAZIL" -"3233549312","3233557247","US","USA","UNITED STATES" -"3233557248","3233557503","NZ","NZL","NEW ZEALAND" -"3233557504","3233561855","EC","ECU","ECUADOR" -"3233561856","3233562367","US","USA","UNITED STATES" -"3233562368","3233562879","GB","GBR","UNITED KINGDOM" -"3233562880","3233563135","FR","FRA","FRANCE" -"3233563136","3233563903","US","USA","UNITED STATES" -"3233563904","3233564159","GB","GBR","UNITED KINGDOM" -"3233564160","3233564415","US","USA","UNITED STATES" -"3233564416","3233564671","NZ","NZL","NEW ZEALAND" -"3233564672","3233564927","US","USA","UNITED STATES" -"3233564928","3233566975","JP","JPN","JAPAN" -"3233568000","3233568767","JP","JPN","JAPAN" -"3233569024","3233569535","JP","JPN","JAPAN" -"3233569792","3233570047","JP","JPN","JAPAN" -"3233570048","3233570559","US","USA","UNITED STATES" -"3233570816","3233571071","GB","GBR","UNITED KINGDOM" -"3233571072","3233572095","US","USA","UNITED STATES" -"3233572096","3233572351","AU","AUS","AUSTRALIA" -"3233572352","3233573119","US","USA","UNITED STATES" -"3233573120","3233573375","NO","NOR","NORWAY" -"3233573376","3233573631","US","USA","UNITED STATES" -"3233573632","3233573887","AU","AUS","AUSTRALIA" -"3233573888","3233575679","US","USA","UNITED STATES" -"3233575680","3233575935","AU","AUS","AUSTRALIA" -"3233575936","3233576191","RU","RUS","RUSSIAN FEDERATION" -"3233576192","3233576447","GB","GBR","UNITED KINGDOM" -"3233576448","3233577215","US","USA","UNITED STATES" -"3233577216","3233577471","AT","AUT","AUSTRIA" -"3233577472","3233577727","GB","GBR","UNITED KINGDOM" -"3233577984","3233578239","US","USA","UNITED STATES" -"3233578240","3233578495","GB","GBR","UNITED KINGDOM" -"3233578496","3233578751","US","USA","UNITED STATES" -"3233578752","3233579007","IE","IRL","IRELAND" -"3233579008","3233579263","AU","AUS","AUSTRALIA" -"3233579264","3233579519","GB","GBR","UNITED KINGDOM" -"3233579520","3233580031","US","USA","UNITED STATES" -"3233580032","3233580287","GB","GBR","UNITED KINGDOM" -"3233580288","3233581055","US","USA","UNITED STATES" -"3233581056","3233581311","DE","DEU","GERMANY" -"3233581312","3233583359","US","USA","UNITED STATES" -"3233583360","3233583615","GB","GBR","UNITED KINGDOM" -"3233583616","3233584895","US","USA","UNITED STATES" -"3233584896","3233585151","AU","AUS","AUSTRALIA" -"3233585152","3233586431","US","USA","UNITED STATES" -"3233586432","3233586943","GB","GBR","UNITED KINGDOM" -"3233586944","3233588223","US","USA","UNITED STATES" -"3233589248","3233589759","CA","CAN","CANADA" -"3233589760","3233590015","CN","CHN","CHINA" -"3233590016","3233590271","TW","TWN","TAIWAN" -"3233590272","3233590527","TH","THA","THAILAND" -"3233590528","3233590783","PR","PRI","PUERTO RICO" -"3233590784","3233591039","PH","PHL","PHILIPPINES" -"3233591040","3233591295","ID","IDN","INDONESIA" -"3233591552","3233593087","US","USA","UNITED STATES" -"3233593344","3233593599","US","USA","UNITED STATES" -"3233593600","3233593855","NZ","NZL","NEW ZEALAND" -"3233593856","3233594111","AU","AUS","AUSTRALIA" -"3233594112","3233594367","RU","RUS","RUSSIAN FEDERATION" -"3233594368","3233594623","US","USA","UNITED STATES" -"3233594624","3233594879","RU","RUS","RUSSIAN FEDERATION" -"3233594880","3233595903","US","USA","UNITED STATES" -"3233595904","3233596927","EC","ECU","ECUADOR" -"3233596928","3233603327","US","USA","UNITED STATES" -"3233603584","3233605887","US","USA","UNITED STATES" -"3233605888","3233607167","PL","POL","POLAND" -"3233607168","3233607935","US","USA","UNITED STATES" -"3233607936","3233608191","NZ","NZL","NEW ZEALAND" -"3233608192","3233609727","HU","HUN","HUNGARY" -"3233609728","3233609983","BE","BEL","BELGIUM" -"3233609984","3233610495","US","USA","UNITED STATES" -"3233610752","3233611519","US","USA","UNITED STATES" -"3233612032","3233612287","GB","GBR","UNITED KINGDOM" -"3233612544","3233612799","US","USA","UNITED STATES" -"3233613056","3233613311","US","USA","UNITED STATES" -"3233613568","3233613823","US","USA","UNITED STATES" -"3233613824","3233614847","GB","GBR","UNITED KINGDOM" -"3233615104","3233615359","US","USA","UNITED STATES" -"3233615360","3233615615","DE","DEU","GERMANY" -"3233615616","3233617151","US","USA","UNITED STATES" -"3233617408","3233617663","CA","CAN","CANADA" -"3233617664","3233617919","GB","GBR","UNITED KINGDOM" -"3233617920","3233618175","JP","JPN","JAPAN" -"3233619456","3233620479","US","USA","UNITED STATES" -"3233620480","3233620735","NZ","NZL","NEW ZEALAND" -"3233620736","3233620991","US","USA","UNITED STATES" -"3233622272","3233622527","GB","GBR","UNITED KINGDOM" -"3233622528","3233624831","US","USA","UNITED STATES" -"3233624832","3233625087","AT","AUT","AUSTRIA" -"3233625088","3233625343","GB","GBR","UNITED KINGDOM" -"3233625344","3233625599","US","USA","UNITED STATES" -"3233625600","3233625855","AU","AUS","AUSTRALIA" -"3233625856","3233626111","GB","GBR","UNITED KINGDOM" -"3233626112","3233626879","US","USA","UNITED STATES" -"3233627136","3233628671","US","USA","UNITED STATES" -"3233628672","3233628927","FR","FRA","FRANCE" -"3233628928","3233629439","CA","CAN","CANADA" -"3233629440","3233629695","GB","GBR","UNITED KINGDOM" -"3233629696","3233629951","IL","ISR","ISRAEL" -"3233629952","3233630463","US","USA","UNITED STATES" -"3233630464","3233630719","NL","NLD","NETHERLANDS" -"3233630720","3233630975","US","USA","UNITED STATES" -"3233631232","3233631487","DE","DEU","GERMANY" -"3233631488","3233631743","US","USA","UNITED STATES" -"3233632000","3233633535","US","USA","UNITED STATES" -"3233633792","3233635839","US","USA","UNITED STATES" -"3233635840","3233636095","AU","AUS","AUSTRALIA" -"3233636096","3233642239","US","USA","UNITED STATES" -"3233642240","3233642495","GB","GBR","UNITED KINGDOM" -"3233642496","3233646591","US","USA","UNITED STATES" -"3233646592","3233646847","AU","AUS","AUSTRALIA" -"3233646848","3233647359","US","USA","UNITED STATES" -"3233647872","3233649663","US","USA","UNITED STATES" -"3233649664","3233649919","AU","AUS","AUSTRALIA" -"3233649920","3233650431","US","USA","UNITED STATES" -"3233650432","3233650687","DE","DEU","GERMANY" -"3233651200","3233651455","IT","ITA","ITALY" -"3233651456","3233651967","US","USA","UNITED STATES" -"3233651968","3233652223","GB","GBR","UNITED KINGDOM" -"3233652224","3233652479","US","USA","UNITED STATES" -"3233652480","3233652735","AU","AUS","AUSTRALIA" -"3233652736","3233652991","GB","GBR","UNITED KINGDOM" -"3233652992","3233654271","US","USA","UNITED STATES" -"3233654272","3233655551","GB","GBR","UNITED KINGDOM" -"3233655552","3233662975","US","USA","UNITED STATES" -"3233663488","3233663999","GB","GBR","UNITED KINGDOM" -"3233664256","3233665023","US","USA","UNITED STATES" -"3233665024","3233666047","AU","AUS","AUSTRALIA" -"3233666048","3233668863","US","USA","UNITED STATES" -"3233668864","3233669119","PH","PHL","PHILIPPINES" -"3233669120","3233670399","US","USA","UNITED STATES" -"3233670400","3233671679","AU","AUS","AUSTRALIA" -"3233671680","3233675263","US","USA","UNITED STATES" -"3233675520","3233676031","US","USA","UNITED STATES" -"3233676032","3233676287","DE","DEU","GERMANY" -"3233676288","3233677055","US","USA","UNITED STATES" -"3233677568","3233679103","US","USA","UNITED STATES" -"3233679360","3233681151","US","USA","UNITED STATES" -"3233681408","3233682431","US","USA","UNITED STATES" -"3233682944","3233684991","US","USA","UNITED STATES" -"3233684992","3233685503","BR","BRA","BRAZIL" -"3233685760","3233688063","US","USA","UNITED STATES" -"3233688576","3233688831","GB","GBR","UNITED KINGDOM" -"3233688832","3233692159","US","USA","UNITED STATES" -"3233692160","3233692671","NO","NOR","NORWAY" -"3233692672","3233692927","US","USA","UNITED STATES" -"3233692928","3233693183","AU","AUS","AUSTRALIA" -"3233693184","3233693695","US","USA","UNITED STATES" -"3233693696","3233693951","GB","GBR","UNITED KINGDOM" -"3233693952","3233694207","US","USA","UNITED STATES" -"3233694208","3233694463","AU","AUS","AUSTRALIA" -"3233694464","3233694719","GB","GBR","UNITED KINGDOM" -"3233694720","3233694975","US","USA","UNITED STATES" -"3233694976","3233695231","FR","FRA","FRANCE" -"3233695232","3233696511","US","USA","UNITED STATES" -"3233696512","3233696767","CA","CAN","CANADA" -"3233696768","3233697791","US","USA","UNITED STATES" -"3233701632","3233701887","NO","NOR","NORWAY" -"3233701888","3233704959","US","USA","UNITED STATES" -"3233704960","3233705215","NZ","NZL","NEW ZEALAND" -"3233705216","3233705983","US","USA","UNITED STATES" -"3233707008","3233710335","US","USA","UNITED STATES" -"3233710336","3233711359","FR","FRA","FRANCE" -"3233711360","3233721599","US","USA","UNITED STATES" -"3233721600","3233721855","HU","HUN","HUNGARY" -"3233721856","3233722111","PT","PRT","PORTUGAL" -"3233722112","3233723391","US","USA","UNITED STATES" -"3233723392","3233723903","AU","AUS","AUSTRALIA" -"3233723904","3233724415","GB","GBR","UNITED KINGDOM" -"3233724416","3233725439","US","USA","UNITED STATES" -"3233725952","3233726975","NO","NOR","NORWAY" -"3233726976","3233728767","US","USA","UNITED STATES" -"3233728768","3233729279","GB","GBR","UNITED KINGDOM" -"3233729280","3233729535","US","USA","UNITED STATES" -"3233729536","3233730047","SG","SGP","SINGAPORE" -"3233730560","3233732607","AU","AUS","AUSTRALIA" -"3233732608","3233733631","US","USA","UNITED STATES" -"3233734656","3233734911","US","USA","UNITED STATES" -"3233735680","3233736959","US","USA","UNITED STATES" -"3233736960","3233737983","FR","FRA","FRANCE" -"3233737984","3233738751","US","USA","UNITED STATES" -"3233738752","3233739007","GB","GBR","UNITED KINGDOM" -"3233739008","3233739263","US","USA","UNITED STATES" -"3233739264","3233739519","FR","FRA","FRANCE" -"3233739520","3233740543","US","USA","UNITED STATES" -"3233740544","3233741311","GB","GBR","UNITED KINGDOM" -"3233741312","3233742591","US","USA","UNITED STATES" -"3233742848","3233808383","US","USA","UNITED STATES" -"3233808384","3233873919","TW","TWN","TAIWAN" -"3233873920","3233939455","US","USA","UNITED STATES" -"3233939456","3233980671","FI","FIN","FINLAND" -"3233980672","3233980927","GB","GBR","UNITED KINGDOM" -"3233980928","3233991167","FI","FIN","FINLAND" -"3233991168","3233991423","DE","DEU","GERMANY" -"3233991424","3234004991","FI","FIN","FINLAND" -"3234005248","3234005503","GB","GBR","UNITED KINGDOM" -"3234005504","3234005759","AU","AUS","AUSTRALIA" -"3234006528","3234007039","US","USA","UNITED STATES" -"3234007040","3234007295","RU","RUS","RUSSIAN FEDERATION" -"3234007296","3234007551","US","USA","UNITED STATES" -"3234007552","3234007807","AU","AUS","AUSTRALIA" -"3234007808","3234008063","US","USA","UNITED STATES" -"3234008064","3234008831","NZ","NZL","NEW ZEALAND" -"3234008832","3234011135","US","USA","UNITED STATES" -"3234012160","3234013183","US","USA","UNITED STATES" -"3234013440","3234013695","US","USA","UNITED STATES" -"3234013696","3234013951","AU","AUS","AUSTRALIA" -"3234013952","3234014207","US","USA","UNITED STATES" -"3234014464","3234014975","US","USA","UNITED STATES" -"3234014976","3234015487","KR","KOR","REPUBLIC OF KOREA" -"3234015488","3234015743","US","USA","UNITED STATES" -"3234015744","3234015999","IE","IRL","IRELAND" -"3234016000","3234016255","GB","GBR","UNITED KINGDOM" -"3234016256","3234019327","AU","AUS","AUSTRALIA" -"3234019328","3234019839","MX","MEX","MEXICO" -"3234019840","3234023423","US","USA","UNITED STATES" -"3234023424","3234023679","PL","POL","POLAND" -"3234023680","3234024703","US","USA","UNITED STATES" -"3234026752","3234030079","US","USA","UNITED STATES" -"3234030080","3234030335","DE","DEU","GERMANY" -"3234030336","3234031103","US","USA","UNITED STATES" -"3234031104","3234031359","AU","AUS","AUSTRALIA" -"3234031360","3234031871","US","USA","UNITED STATES" -"3234031872","3234032127","GB","GBR","UNITED KINGDOM" -"3234032128","3234032383","PL","POL","POLAND" -"3234032384","3234032895","US","USA","UNITED STATES" -"3234033152","3234033407","IT","ITA","ITALY" -"3234033408","3234033663","US","USA","UNITED STATES" -"3234033664","3234033919","AU","AUS","AUSTRALIA" -"3234033920","3234034687","US","USA","UNITED STATES" -"3234034688","3234035455","GB","GBR","UNITED KINGDOM" -"3234035456","3234039295","US","USA","UNITED STATES" -"3234039296","3234043135","SE","SWE","SWEDEN" -"3234043136","3234043903","US","USA","UNITED STATES" -"3234043904","3234044159","AU","AUS","AUSTRALIA" -"3234044160","3234048511","US","USA","UNITED STATES" -"3234048512","3234048767","AU","AUS","AUSTRALIA" -"3234048768","3234049279","US","USA","UNITED STATES" -"3234049792","3234051839","US","USA","UNITED STATES" -"3234051840","3234052095","NL","NLD","NETHERLANDS" -"3234052096","3234052351","DE","DEU","GERMANY" -"3234052352","3234052607","US","USA","UNITED STATES" -"3234052608","3234052863","NZ","NZL","NEW ZEALAND" -"3234052864","3234054911","US","USA","UNITED STATES" -"3234054912","3234055167","PT","PRT","PORTUGAL" -"3234055168","3234055423","US","USA","UNITED STATES" -"3234055424","3234055679","AU","AUS","AUSTRALIA" -"3234055680","3234056959","US","USA","UNITED STATES" -"3234057216","3234061055","US","USA","UNITED STATES" -"3234061056","3234061311","NZ","NZL","NEW ZEALAND" -"3234061312","3234064639","US","USA","UNITED STATES" -"3234064640","3234064895","AU","AUS","AUSTRALIA" -"3234064896","3234065407","US","USA","UNITED STATES" -"3234065408","3234065663","GB","GBR","UNITED KINGDOM" -"3234065664","3234065919","BR","BRA","BRAZIL" -"3234065920","3234066943","US","USA","UNITED STATES" -"3234067200","3234069247","US","USA","UNITED STATES" -"3234069504","3234069759","US","USA","UNITED STATES" -"3234070016","3234070271","US","USA","UNITED STATES" -"3234070784","3234110463","FR","FRA","FRANCE" -"3234136064","3234150911","CA","CAN","CANADA" -"3234151424","3234158847","CA","CAN","CANADA" -"3234159104","3234159359","CA","CAN","CANADA" -"3234160128","3234163455","CA","CAN","CANADA" -"3234163456","3234163711","US","USA","UNITED STATES" -"3234163712","3234167295","CA","CAN","CANADA" -"3234167808","3234172927","CA","CAN","CANADA" -"3234172928","3234173951","US","USA","UNITED STATES" -"3234173952","3234175999","CA","CAN","CANADA" -"3234176256","3234177279","US","USA","UNITED STATES" -"3234177280","3234187007","CA","CAN","CANADA" -"3234187008","3234187519","US","USA","UNITED STATES" -"3234187520","3234189055","CA","CAN","CANADA" -"3234189312","3234192383","CA","CAN","CANADA" -"3234192384","3234193663","US","USA","UNITED STATES" -"3234193664","3234198783","CA","CAN","CANADA" -"3234199040","3234201343","CA","CAN","CANADA" -"3234202624","3234203647","US","USA","UNITED STATES" -"3234203648","3234205695","BR","BRA","BRAZIL" -"3234205696","3234208255","US","USA","UNITED STATES" -"3234209792","3234215935","US","USA","UNITED STATES" -"3234217984","3234221823","US","USA","UNITED STATES" -"3234234368","3234247167","US","USA","UNITED STATES" -"3234267392","3234269695","US","USA","UNITED STATES" -"3234271232","3234275327","PT","PRT","PORTUGAL" -"3234275328","3234279423","AU","AUS","AUSTRALIA" -"3234283520","3234312703","US","USA","UNITED STATES" -"3234332928","3234334975","US","USA","UNITED STATES" -"3234340864","3234349055","US","USA","UNITED STATES" -"3234349056","3234353151","NZ","NZL","NEW ZEALAND" -"3234365440","3234367487","US","USA","UNITED STATES" -"3234398208","3234529279","US","USA","UNITED STATES" -"3234529536","3234538751","US","USA","UNITED STATES" -"3234539008","3234539519","AU","AUS","AUSTRALIA" -"3234539520","3234549759","US","USA","UNITED STATES" -"3234549760","3234550015","RU","RUS","RUSSIAN FEDERATION" -"3234550016","3234553855","NZ","NZL","NEW ZEALAND" -"3234553856","3234554367","US","USA","UNITED STATES" -"3234554624","3234554879","NZ","NZL","NEW ZEALAND" -"3234555904","3234556415","US","USA","UNITED STATES" -"3234556416","3234556927","CA","CAN","CANADA" -"3234556928","3234557439","FI","FIN","FINLAND" -"3234557440","3234564607","US","USA","UNITED STATES" -"3234564608","3234566911","KR","KOR","REPUBLIC OF KOREA" -"3234566912","3234568703","US","USA","UNITED STATES" -"3234568704","3234568959","NZ","NZL","NEW ZEALAND" -"3234568960","3234569215","US","USA","UNITED STATES" -"3234569216","3234569727","AU","AUS","AUSTRALIA" -"3234569728","3234569983","CL","CHL","CHILE" -"3234569984","3234574335","US","USA","UNITED STATES" -"3234574336","3234574591","AU","AUS","AUSTRALIA" -"3234574592","3234574847","MX","MEX","MEXICO" -"3234574848","3234576127","US","USA","UNITED STATES" -"3234576128","3234576895","HK","HKG","HONG KONG" -"3234576896","3234578687","US","USA","UNITED STATES" -"3234578688","3234578943","AU","AUS","AUSTRALIA" -"3234578944","3234579711","US","USA","UNITED STATES" -"3234579712","3234579967","CA","CAN","CANADA" -"3234579968","3234581247","US","USA","UNITED STATES" -"3234581248","3234581503","CA","CAN","CANADA" -"3234581504","3234582527","US","USA","UNITED STATES" -"3234582528","3234583039","NZ","NZL","NEW ZEALAND" -"3234583040","3234583807","US","USA","UNITED STATES" -"3234583808","3234584063","AU","AUS","AUSTRALIA" -"3234584064","3234584575","US","USA","UNITED STATES" -"3234584576","3234584831","NZ","NZL","NEW ZEALAND" -"3234584832","3234585343","US","USA","UNITED STATES" -"3234585600","3234587391","US","USA","UNITED STATES" -"3234587392","3234587647","SA","SAU","SAUDI ARABIA" -"3234587648","3234588415","US","USA","UNITED STATES" -"3234588672","3234588927","MO","MAC","MACAO" -"3234588928","3234589439","US","USA","UNITED STATES" -"3234589440","3234589695","AU","AUS","AUSTRALIA" -"3234589696","3234589951","US","USA","UNITED STATES" -"3234590208","3234590463","US","USA","UNITED STATES" -"3234590720","3234592511","US","USA","UNITED STATES" -"3234592512","3234592767","TH","THA","THAILAND" -"3234592768","3234594047","US","USA","UNITED STATES" -"3234594816","3234725887","US","USA","UNITED STATES" -"3234726144","3234726399","CA","CAN","CANADA" -"3234726400","3234726911","US","USA","UNITED STATES" -"3234728192","3234730495","US","USA","UNITED STATES" -"3234730752","3234733055","US","USA","UNITED STATES" -"3234733056","3234733311","CA","CAN","CANADA" -"3234733312","3234734079","US","USA","UNITED STATES" -"3234735616","3234737407","US","USA","UNITED STATES" -"3234738176","3234739455","US","USA","UNITED STATES" -"3234740224","3234742015","US","USA","UNITED STATES" -"3234742272","3234743551","US","USA","UNITED STATES" -"3234744832","3234745599","US","USA","UNITED STATES" -"3234745600","3234746879","GB","GBR","UNITED KINGDOM" -"3234746880","3234747903","US","USA","UNITED STATES" -"3234747904","3234748159","IL","ISR","ISRAEL" -"3234748160","3234749439","US","USA","UNITED STATES" -"3234749696","3234750207","CA","CAN","CANADA" -"3234750720","3234751999","US","USA","UNITED STATES" -"3234752000","3234752255","HK","HKG","HONG KONG" -"3234752256","3234753535","US","USA","UNITED STATES" -"3234753536","3234753791","AU","AUS","AUSTRALIA" -"3234753792","3234754047","US","USA","UNITED STATES" -"3234754560","3234755839","US","USA","UNITED STATES" -"3234755840","3234756095","AU","AUS","AUSTRALIA" -"3234756096","3234760703","US","USA","UNITED STATES" -"3234760960","3234761727","US","USA","UNITED STATES" -"3234763264","3234764799","CA","CAN","CANADA" -"3234764800","3234766335","NZ","NZL","NEW ZEALAND" -"3234766336","3234772223","US","USA","UNITED STATES" -"3234772224","3234772479","CA","CAN","CANADA" -"3234772480","3234772735","US","USA","UNITED STATES" -"3234772992","3234777599","US","USA","UNITED STATES" -"3234778368","3234781439","US","USA","UNITED STATES" -"3234781440","3234781951","CA","CAN","CANADA" -"3234781952","3234782719","US","USA","UNITED STATES" -"3234782720","3234783999","IL","ISR","ISRAEL" -"3234784000","3234786815","US","USA","UNITED STATES" -"3234787328","3234791167","US","USA","UNITED STATES" -"3234791680","3234794495","US","USA","UNITED STATES" -"3234794752","3234795007","US","USA","UNITED STATES" -"3234795008","3234795263","GB","GBR","UNITED KINGDOM" -"3234795264","3234795519","US","USA","UNITED STATES" -"3234795776","3234796031","US","USA","UNITED STATES" -"3234796544","3234799359","US","USA","UNITED STATES" -"3234799360","3234799615","NL","NLD","NETHERLANDS" -"3234799616","3234799871","US","USA","UNITED STATES" -"3234799872","3234800127","AU","AUS","AUSTRALIA" -"3234800640","3234800895","AU","AUS","AUSTRALIA" -"3234800896","3234801663","US","USA","UNITED STATES" -"3234801664","3234802431","EC","ECU","ECUADOR" -"3234802432","3234803711","US","USA","UNITED STATES" -"3234803712","3234803967","PR","PRI","PUERTO RICO" -"3234804224","3234805503","US","USA","UNITED STATES" -"3234805760","3234806527","US","USA","UNITED STATES" -"3234807552","3234807807","US","USA","UNITED STATES" -"3234807808","3234808063","TH","THA","THAILAND" -"3234808064","3234809087","EC","ECU","ECUADOR" -"3234809088","3234810879","US","USA","UNITED STATES" -"3234810880","3234811135","CA","CAN","CANADA" -"3234811136","3234814719","US","USA","UNITED STATES" -"3234814720","3234814975","HK","HKG","HONG KONG" -"3234814976","3234815999","US","USA","UNITED STATES" -"3234816000","3234816767","AU","AUS","AUSTRALIA" -"3234816768","3234820351","US","USA","UNITED STATES" -"3234820352","3234820607","AU","AUS","AUSTRALIA" -"3234820608","3234820863","US","USA","UNITED STATES" -"3234821120","3234821887","US","USA","UNITED STATES" -"3234821888","3234822655","AU","AUS","AUSTRALIA" -"3234822656","3234826751","US","USA","UNITED STATES" -"3234826752","3234827007","CA","CAN","CANADA" -"3234827008","3234827519","US","USA","UNITED STATES" -"3234827520","3234827775","GB","GBR","UNITED KINGDOM" -"3234827776","3234828031","LU","LUX","LUXEMBOURG" -"3234828032","3234828287","NZ","NZL","NEW ZEALAND" -"3234828288","3234828799","US","USA","UNITED STATES" -"3234828800","3234829055","CL","CHL","CHILE" -"3234829056","3234830079","US","USA","UNITED STATES" -"3234830080","3234832127","AU","AUS","AUSTRALIA" -"3234832128","3234832639","US","USA","UNITED STATES" -"3234832640","3234832895","AU","AUS","AUSTRALIA" -"3234832896","3234833663","US","USA","UNITED STATES" -"3234833664","3234833919","AU","AUS","AUSTRALIA" -"3234833920","3234838271","US","USA","UNITED STATES" -"3234838272","3234838527","GT","GTM","GUATEMALA" -"3234838528","3234839295","US","USA","UNITED STATES" -"3234839296","3234839551","AU","AUS","AUSTRALIA" -"3234839552","3234841087","US","USA","UNITED STATES" -"3234841088","3234841599","BR","BRA","BRAZIL" -"3234841600","3234841855","PT","PRT","PORTUGAL" -"3234841856","3234842367","AU","AUS","AUSTRALIA" -"3234842368","3234842623","US","USA","UNITED STATES" -"3234842624","3234844415","BR","BRA","BRAZIL" -"3234844416","3234853375","US","USA","UNITED STATES" -"3234853376","3234853631","TH","THA","THAILAND" -"3234853632","3234853887","US","USA","UNITED STATES" -"3234853888","3234854143","EC","ECU","ECUADOR" -"3234854144","3234854911","US","USA","UNITED STATES" -"3234854912","3234855167","AU","AUS","AUSTRALIA" -"3234855168","3234855935","US","USA","UNITED STATES" -"3234856192","3234856447","US","USA","UNITED STATES" -"3234856448","3234856703","TH","THA","THAILAND" -"3234857216","3234861055","CA","CAN","CANADA" -"3234861056","3234864383","US","USA","UNITED STATES" -"3234865152","3234870271","US","USA","UNITED STATES" -"3234873344","3234886143","US","USA","UNITED STATES" -"3234889728","3234897407","US","USA","UNITED STATES" -"3234922752","3234926847","US","USA","UNITED STATES" -"3234930688","3234938367","US","USA","UNITED STATES" -"3234938880","3234988031","US","USA","UNITED STATES" -"3234988288","3234990847","CA","CAN","CANADA" -"3234996224","3234998783","US","USA","UNITED STATES" -"3235004416","3235020799","CA","CAN","CANADA" -"3235053824","3235056383","US","USA","UNITED STATES" -"3235057664","3235065343","US","USA","UNITED STATES" -"3235069952","3235085311","US","USA","UNITED STATES" -"3235119104","3235275007","US","USA","UNITED STATES" -"3235315712","3235512319","US","USA","UNITED STATES" -"3235512320","3235577855","JP","JPN","JAPAN" -"3235578112","3235641855","CA","CAN","CANADA" -"3235642112","3235643135","CA","CAN","CANADA" -"3235643392","3235774463","US","USA","UNITED STATES" -"3235774720","3235776767","CA","CAN","CANADA" -"3235778560","3235800319","US","USA","UNITED STATES" -"3235840256","3235842303","US","USA","UNITED STATES" -"3235844096","3235846143","US","USA","UNITED STATES" -"3235848192","3235856383","US","USA","UNITED STATES" -"3235856384","3235872767","BR","BRA","BRAZIL" -"3235872768","3235971071","US","USA","UNITED STATES" -"3235971328","3235977727","US","USA","UNITED STATES" -"3235979264","3235985663","US","USA","UNITED STATES" -"3235987456","3235995647","US","USA","UNITED STATES" -"3236003840","3236010239","US","USA","UNITED STATES" -"3236038656","3236044799","US","USA","UNITED STATES" -"3236044800","3236052991","CA","CAN","CANADA" -"3236052992","3236069375","US","USA","UNITED STATES" -"3236102400","3236106239","PH","PHL","PHILIPPINES" -"3236106240","3236134911","US","USA","UNITED STATES" -"3236167936","3236175871","CA","CAN","CANADA" -"3236175872","3236191487","US","USA","UNITED STATES" -"3236200448","3236233215","MY","MYS","MALAYSIA" -"3236233472","3236238591","US","USA","UNITED STATES" -"3236241408","3236249599","US","USA","UNITED STATES" -"3236298752","3236302847","US","USA","UNITED STATES" -"3236302848","3236306943","NZ","NZL","NEW ZEALAND" -"3236364544","3236365567","US","USA","UNITED STATES" -"3236365824","3236368127","US","USA","UNITED STATES" -"3236368128","3236368383","NZ","NZL","NEW ZEALAND" -"3236368384","3236372991","US","USA","UNITED STATES" -"3236372992","3236373247","AU","AUS","AUSTRALIA" -"3236373760","3236379391","US","USA","UNITED STATES" -"3236379392","3236379647","AU","AUS","AUSTRALIA" -"3236379648","3236380927","US","USA","UNITED STATES" -"3236381184","3236381439","CA","CAN","CANADA" -"3236381440","3236381695","AT","AUT","AUSTRIA" -"3236381696","3236383999","US","USA","UNITED STATES" -"3236384000","3236384255","AU","AUS","AUSTRALIA" -"3236384256","3236385279","US","USA","UNITED STATES" -"3236385280","3236385535","DE","DEU","GERMANY" -"3236385536","3236385791","US","USA","UNITED STATES" -"3236386304","3236387071","US","USA","UNITED STATES" -"3236387072","3236387327","CA","CAN","CANADA" -"3236387328","3236387839","US","USA","UNITED STATES" -"3236387840","3236389375","PR","PRI","PUERTO RICO" -"3236389376","3236392447","US","USA","UNITED STATES" -"3236392448","3236392703","CL","CHL","CHILE" -"3236392704","3236393471","US","USA","UNITED STATES" -"3236393472","3236395519","BR","BRA","BRAZIL" -"3236395520","3236396799","US","USA","UNITED STATES" -"3236396800","3236397055","AU","AUS","AUSTRALIA" -"3236397056","3236398591","US","USA","UNITED STATES" -"3236398848","3236399615","AU","AUS","AUSTRALIA" -"3236399616","3236400127","US","USA","UNITED STATES" -"3236400128","3236400383","CL","CHL","CHILE" -"3236400384","3236401151","US","USA","UNITED STATES" -"3236401152","3236401407","AU","AUS","AUSTRALIA" -"3236401408","3236403967","US","USA","UNITED STATES" -"3236404224","3236406783","US","USA","UNITED STATES" -"3236406784","3236407551","AU","AUS","AUSTRALIA" -"3236407552","3236408063","SG","SGP","SINGAPORE" -"3236408064","3236408319","US","USA","UNITED STATES" -"3236408320","3236409087","CA","CAN","CANADA" -"3236409088","3236409599","BR","BRA","BRAZIL" -"3236409600","3236411135","US","USA","UNITED STATES" -"3236411136","3236411391","NZ","NZL","NEW ZEALAND" -"3236411392","3236412415","US","USA","UNITED STATES" -"3236412672","3236413695","US","USA","UNITED STATES" -"3236413696","3236413951","AU","AUS","AUSTRALIA" -"3236413952","3236416255","US","USA","UNITED STATES" -"3236416256","3236416511","AU","AUS","AUSTRALIA" -"3236416512","3236418303","US","USA","UNITED STATES" -"3236418304","3236418815","AU","AUS","AUSTRALIA" -"3236418816","3236419071","US","USA","UNITED STATES" -"3236419328","3236419583","US","USA","UNITED STATES" -"3236419584","3236419839","AU","AUS","AUSTRALIA" -"3236419840","3236420095","US","USA","UNITED STATES" -"3236420096","3236420351","AU","AUS","AUSTRALIA" -"3236420352","3236424959","US","USA","UNITED STATES" -"3236425216","3236427519","US","USA","UNITED STATES" -"3236427520","3236427775","CA","CAN","CANADA" -"3236427776","3236428031","NZ","NZL","NEW ZEALAND" -"3236428800","3236429311","US","USA","UNITED STATES" -"3236430080","3236432639","US","USA","UNITED STATES" -"3236433920","3236438015","US","USA","UNITED STATES" -"3236438016","3236446207","AU","AUS","AUSTRALIA" -"3236446208","3236462591","US","USA","UNITED STATES" -"3236462592","3236470783","AU","AUS","AUSTRALIA" -"3236495360","3236560895","US","USA","UNITED STATES" -"3236561152","3236566783","US","USA","UNITED STATES" -"3236566784","3236567039","CA","CAN","CANADA" -"3236567040","3236568831","US","USA","UNITED STATES" -"3236569856","3236570367","US","USA","UNITED STATES" -"3236571392","3236575743","US","USA","UNITED STATES" -"3236575744","3236575999","JP","JPN","JAPAN" -"3236576000","3236581119","US","USA","UNITED STATES" -"3236583680","3236585983","US","USA","UNITED STATES" -"3236585984","3236586239","CA","CAN","CANADA" -"3236586240","3236587775","US","USA","UNITED STATES" -"3236588032","3236589823","US","USA","UNITED STATES" -"3236590080","3236591103","US","USA","UNITED STATES" -"3236592128","3236601343","US","USA","UNITED STATES" -"3236601600","3236604671","US","USA","UNITED STATES" -"3236604672","3236604927","CA","CAN","CANADA" -"3236604928","3236610047","US","USA","UNITED STATES" -"3236610560","3236611071","US","USA","UNITED STATES" -"3236612096","3236612607","US","USA","UNITED STATES" -"3236613376","3236617471","US","USA","UNITED STATES" -"3236617728","3236617983","US","USA","UNITED STATES" -"3236617984","3236619775","CA","CAN","CANADA" -"3236619776","3236620031","US","USA","UNITED STATES" -"3236620032","3236620287","AU","AUS","AUSTRALIA" -"3236620288","3236623615","US","USA","UNITED STATES" -"3236623616","3236623871","AU","AUS","AUSTRALIA" -"3236623872","3236625919","US","USA","UNITED STATES" -"3236625920","3236626175","CA","CAN","CANADA" -"3236626432","3236642815","US","USA","UNITED STATES" -"3236692224","3236694271","US","USA","UNITED STATES" -"3236696064","3236698623","US","USA","UNITED STATES" -"3236700160","3236708351","US","USA","UNITED STATES" -"3236757504","3236765695","CA","CAN","CANADA" -"3236765696","3236790271","US","USA","UNITED STATES" -"3236823296","3236825855","CH","CHE","SWITZERLAND" -"3236827136","3236829183","US","USA","UNITED STATES" -"3236831232","3236855807","US","USA","UNITED STATES" -"3236888576","3236958207","US","USA","UNITED STATES" -"3236958208","3236962303","AU","AUS","AUSTRALIA" -"3236962304","3236966143","US","USA","UNITED STATES" -"3236970496","3236978687","US","USA","UNITED STATES" -"3236986880","3236991999","US","USA","UNITED STATES" -"3237019648","3237021695","US","USA","UNITED STATES" -"3237023744","3237031935","US","USA","UNITED STATES" -"3237085184","3237155839","US","USA","UNITED STATES" -"3237155840","3237156863","AU","AUS","AUSTRALIA" -"3237158912","3237159167","US","USA","UNITED STATES" -"3237160192","3237160703","US","USA","UNITED STATES" -"3237183488","3237205247","US","USA","UNITED STATES" -"3237216256","3237281791","JP","JPN","JAPAN" -"3237282560","3237284607","US","USA","UNITED STATES" -"3237284608","3237284863","AU","AUS","AUSTRALIA" -"3237284864","3237285119","US","USA","UNITED STATES" -"3237285120","3237285631","AU","AUS","AUSTRALIA" -"3237285632","3237287935","US","USA","UNITED STATES" -"3237287936","3237288191","CA","CAN","CANADA" -"3237288192","3237289471","US","USA","UNITED STATES" -"3237289728","3237290495","US","USA","UNITED STATES" -"3237290496","3237291007","AU","AUS","AUSTRALIA" -"3237291008","3237291263","NZ","NZL","NEW ZEALAND" -"3237291264","3237294847","US","USA","UNITED STATES" -"3237294848","3237295103","CA","CAN","CANADA" -"3237295104","3237296639","US","USA","UNITED STATES" -"3237296640","3237297151","SG","SGP","SINGAPORE" -"3237297152","3237297407","CL","CHL","CHILE" -"3237297408","3237300479","US","USA","UNITED STATES" -"3237300480","3237302527","NZ","NZL","NEW ZEALAND" -"3237302528","3237305087","US","USA","UNITED STATES" -"3237305088","3237305343","CA","CAN","CANADA" -"3237305344","3237305855","US","USA","UNITED STATES" -"3237305856","3237306111","NZ","NZL","NEW ZEALAND" -"3237306112","3237308671","US","USA","UNITED STATES" -"3237308672","3237310719","AU","AUS","AUSTRALIA" -"3237310720","3237311999","US","USA","UNITED STATES" -"3237312256","3237312767","US","USA","UNITED STATES" -"3237312768","3237313023","BO","BOL","BOLIVIA" -"3237313024","3237317631","US","USA","UNITED STATES" -"3237317888","3237319679","US","USA","UNITED STATES" -"3237319936","3237320703","US","USA","UNITED STATES" -"3237320704","3237320959","UA","UKR","UKRAINE" -"3237320960","3237321471","US","USA","UNITED STATES" -"3237321472","3237321727","HK","HKG","HONG KONG" -"3237321728","3237321983","US","USA","UNITED STATES" -"3237323264","3237325055","US","USA","UNITED STATES" -"3237325056","3237325311","PL","POL","POLAND" -"3237325312","3237325823","US","USA","UNITED STATES" -"3237325824","3237326079","CA","CAN","CANADA" -"3237326080","3237328127","US","USA","UNITED STATES" -"3237328384","3237328639","US","USA","UNITED STATES" -"3237328640","3237328895","CA","CAN","CANADA" -"3237328896","3237329151","US","USA","UNITED STATES" -"3237329152","3237329407","NZ","NZL","NEW ZEALAND" -"3237329408","3237330943","US","USA","UNITED STATES" -"3237330944","3237331199","AU","AUS","AUSTRALIA" -"3237331456","3237331967","US","USA","UNITED STATES" -"3237331968","3237332223","HK","HKG","HONG KONG" -"3237332224","3237335039","US","USA","UNITED STATES" -"3237335040","3237335295","HK","HKG","HONG KONG" -"3237335296","3237335551","US","USA","UNITED STATES" -"3237335552","3237337599","AU","AUS","AUSTRALIA" -"3237337600","3237337855","US","USA","UNITED STATES" -"3237337856","3237338111","AU","AUS","AUSTRALIA" -"3237338112","3237338367","NZ","NZL","NEW ZEALAND" -"3237338368","3237339391","US","USA","UNITED STATES" -"3237339392","3237339647","GB","GBR","UNITED KINGDOM" -"3237339648","3237340159","US","USA","UNITED STATES" -"3237340160","3237340415","CA","CAN","CANADA" -"3237340416","3237345535","US","USA","UNITED STATES" -"3237345536","3237346303","KR","KOR","REPUBLIC OF KOREA" -"3237346304","3237347071","US","USA","UNITED STATES" -"3237347328","3237412863","US","USA","UNITED STATES" -"3237413120","3237415679","GB","GBR","UNITED KINGDOM" -"3237416960","3237437439","US","USA","UNITED STATES" -"3237445632","3237478399","US","USA","UNITED STATES" -"3237478400","3237511167","LK","LKA","SRI LANKA" -"3237511168","3237548031","US","USA","UNITED STATES" -"3237548032","3237552127","KR","KOR","REPUBLIC OF KOREA" -"3237552128","3237557247","US","USA","UNITED STATES" -"3237609472","3237613567","US","USA","UNITED STATES" -"3237615104","3237615615","US","USA","UNITED STATES" -"3237615616","3237616895","CA","CAN","CANADA" -"3237617152","3237658623","US","USA","UNITED STATES" -"3237675264","3237681663","US","USA","UNITED STATES" -"3237681664","3237682943","CA","CAN","CANADA" -"3237682944","3237684991","US","USA","UNITED STATES" -"3237684992","3237685247","CL","CHL","CHILE" -"3237685248","3237688319","US","USA","UNITED STATES" -"3237688320","3237689343","CA","CAN","CANADA" -"3237689344","3237690623","US","USA","UNITED STATES" -"3237690624","3237691903","SA","SAU","SAUDI ARABIA" -"3237691904","3237698303","US","USA","UNITED STATES" -"3237698304","3237698559","CA","CAN","CANADA" -"3237698560","3237701631","US","USA","UNITED STATES" -"3237702400","3237707775","US","USA","UNITED STATES" -"3237708032","3237712895","US","USA","UNITED STATES" -"3237712896","3237713151","AU","AUS","AUSTRALIA" -"3237713152","3237716991","US","USA","UNITED STATES" -"3237716992","3237717247","CA","CAN","CANADA" -"3237717248","3237717503","US","USA","UNITED STATES" -"3237717504","3237717759","CA","CAN","CANADA" -"3237717760","3237724927","US","USA","UNITED STATES" -"3237724928","3237725183","AU","AUS","AUSTRALIA" -"3237725184","3237725439","CA","CAN","CANADA" -"3237725440","3237725695","US","USA","UNITED STATES" -"3237726464","3237726719","AU","AUS","AUSTRALIA" -"3237726976","3237727231","US","USA","UNITED STATES" -"3237727232","3237728255","AU","AUS","AUSTRALIA" -"3237728256","3237732863","US","USA","UNITED STATES" -"3237732864","3237733119","DE","DEU","GERMANY" -"3237733120","3237733631","TH","THA","THAILAND" -"3237733632","3237733887","AU","AUS","AUSTRALIA" -"3237734144","3237734399","CA","CAN","CANADA" -"3237734400","3237735679","US","USA","UNITED STATES" -"3237740544","3237773311","US","USA","UNITED STATES" -"3237806336","3237857535","US","USA","UNITED STATES" -"3237871616","3237887999","US","USA","UNITED STATES" -"3238002688","3238006783","NL","NLD","NETHERLANDS" -"3238006784","3238007039","GB","GBR","UNITED KINGDOM" -"3238007040","3238010879","NL","NLD","NETHERLANDS" -"3238010880","3238017023","CH","CHE","SWITZERLAND" -"3238017024","3238018303","DK","DNK","DENMARK" -"3238018560","3238018815","FR","FRA","FRANCE" -"3238018816","3238019071","DE","DEU","GERMANY" -"3238019072","3238035455","PL","POL","POLAND" -"3238035456","3238060031","FR","FRA","FRANCE" -"3238060032","3238060287","CH","CHE","SWITZERLAND" -"3238060288","3238060543","RO","ROM","ROMANIA" -"3238060544","3238060799","HU","HUN","HUNGARY" -"3238060800","3238061311","UA","UKR","UKRAINE" -"3238061312","3238061567","GB","GBR","UNITED KINGDOM" -"3238061568","3238061823","AT","AUT","AUSTRIA" -"3238061824","3238062079","CZ","CZE","CZECH REPUBLIC" -"3238062080","3238062591","CH","CHE","SWITZERLAND" -"3238062592","3238062847","GB","GBR","UNITED KINGDOM" -"3238062848","3238063103","SE","SWE","SWEDEN" -"3238063104","3238063359","PL","POL","POLAND" -"3238063360","3238063615","CH","CHE","SWITZERLAND" -"3238063616","3238063871","DE","DEU","GERMANY" -"3238063872","3238064127","GB","GBR","UNITED KINGDOM" -"3238064128","3238064383","UA","UKR","UKRAINE" -"3238064384","3238064639","ES","ESP","SPAIN" -"3238064640","3238064895","PL","POL","POLAND" -"3238064896","3238065151","DK","DNK","DENMARK" -"3238065152","3238065407","SI","SVN","SLOVENIA" -"3238065408","3238065663","FR","FRA","FRANCE" -"3238065664","3238065919","DE","DEU","GERMANY" -"3238065920","3238066175","UA","UKR","UKRAINE" -"3238066176","3238066431","DE","DEU","GERMANY" -"3238066432","3238066687","GB","GBR","UNITED KINGDOM" -"3238066688","3238066943","DE","DEU","GERMANY" -"3238066944","3238067199","LT","LTU","LITHUANIA" -"3238067200","3238067455","NO","NOR","NORWAY" -"3238067456","3238067711","SE","SWE","SWEDEN" -"3238067712","3238067967","AT","AUT","AUSTRIA" -"3238067968","3238068223","GB","GBR","UNITED KINGDOM" -"3238068224","3238133759","IE","IRL","IRELAND" -"3238133760","3238199295","SI","SVN","SLOVENIA" -"3238199296","3238201599","DK","DNK","DENMARK" -"3238201600","3238202367","US","USA","UNITED STATES" -"3238202368","3238264831","DK","DNK","DENMARK" -"3238264832","3238330367","IS","ISL","ICELAND" -"3238330368","3238337023","CH","CHE","SWITZERLAND" -"3238337024","3238337535","LI","LIE","LIECHTENSTEIN" -"3238337536","3238395903","CH","CHE","SWITZERLAND" -"3238395904","3238461439","HU","HUN","HUNGARY" -"3238461440","3238502399","DE","DEU","GERMANY" -"3238502400","3238504447","RU","RUS","RUSSIAN FEDERATION" -"3238504448","3238526975","DE","DEU","GERMANY" -"3238527232","3238541567","CH","CHE","SWITZERLAND" -"3238541824","3238542591","CH","CHE","SWITZERLAND" -"3238542848","3238545919","CH","CHE","SWITZERLAND" -"3238546432","3238546943","CH","CHE","SWITZERLAND" -"3238547456","3238548991","CH","CHE","SWITZERLAND" -"3238549504","3238559231","CH","CHE","SWITZERLAND" -"3238559488","3238562559","CH","CHE","SWITZERLAND" -"3238562816","3238573567","CH","CHE","SWITZERLAND" -"3238574080","3238582271","CH","CHE","SWITZERLAND" -"3238582784","3238583295","CH","CHE","SWITZERLAND" -"3238583808","3238589951","CH","CHE","SWITZERLAND" -"3238590208","3238590719","CH","CHE","SWITZERLAND" -"3238591232","3238592511","CH","CHE","SWITZERLAND" -"3238592512","3238593023","GB","GBR","UNITED KINGDOM" -"3238594304","3238594559","GB","GBR","UNITED KINGDOM" -"3238594560","3238595583","BE","BEL","BELGIUM" -"3238595584","3238595839","SI","SVN","SLOVENIA" -"3238595840","3238596607","GB","GBR","UNITED KINGDOM" -"3238596608","3238596863","BG","BGR","BULGARIA" -"3238596864","3238597119","RU","RUS","RUSSIAN FEDERATION" -"3238597120","3238597375","DE","DEU","GERMANY" -"3238597376","3238597631","SI","SVN","SLOVENIA" -"3238597632","3238597887","GB","GBR","UNITED KINGDOM" -"3238597888","3238598143","SI","SVN","SLOVENIA" -"3238598144","3238598399","RU","RUS","RUSSIAN FEDERATION" -"3238598400","3238598655","NL","NLD","NETHERLANDS" -"3238598656","3238598911","CH","CHE","SWITZERLAND" -"3238598912","3238599167","PL","POL","POLAND" -"3238599168","3238599679","HU","HUN","HUNGARY" -"3238599680","3238599935","UA","UKR","UKRAINE" -"3238599936","3238600703","HU","HUN","HUNGARY" -"3238600704","3238604799","DE","DEU","GERMANY" -"3238604800","3238606335","NL","NLD","NETHERLANDS" -"3238606336","3238606591","SE","SWE","SWEDEN" -"3238606592","3238607359","NL","NLD","NETHERLANDS" -"3238607360","3238607871","SE","SWE","SWEDEN" -"3238607872","3238608895","NL","NLD","NETHERLANDS" -"3238621184","3238621439","FI","FIN","FINLAND" -"3238621440","3238621695","FR","FRA","FRANCE" -"3238621696","3238621951","IT","ITA","ITALY" -"3238621952","3238622207","NL","NLD","NETHERLANDS" -"3238622208","3238622463","NO","NOR","NORWAY" -"3238622464","3238622719","SE","SWE","SWEDEN" -"3238622720","3238622975","DK","DNK","DENMARK" -"3238622976","3238623231","GB","GBR","UNITED KINGDOM" -"3238623232","3238623487","LV","LVA","LATVIA" -"3238623488","3238623743","PL","POL","POLAND" -"3238623744","3238623999","CH","CHE","SWITZERLAND" -"3238624000","3238624255","PL","POL","POLAND" -"3238624256","3238625279","HU","HUN","HUNGARY" -"3238630400","3238630655","GR","GRC","GREECE" -"3238630656","3238632959","GB","GBR","UNITED KINGDOM" -"3238632960","3238633215","UA","UKR","UKRAINE" -"3238633216","3238657791","DK","DNK","DENMARK" -"3238657792","3238658047","AT","AUT","AUSTRIA" -"3238658048","3238675455","SE","SWE","SWEDEN" -"3238675456","3238675711","DK","DNK","DENMARK" -"3238675712","3238723071","SE","SWE","SWEDEN" -"3238723072","3238723327","DK","DNK","DENMARK" -"3238723328","3238795263","SE","SWE","SWEDEN" -"3238795264","3238795775","IT","ITA","ITALY" -"3238795776","3238801279","SE","SWE","SWEDEN" -"3238801280","3238801343","GB","GBR","UNITED KINGDOM" -"3238801344","3239051263","SE","SWE","SWEDEN" -"3239051264","3239051519","CH","CHE","SWITZERLAND" -"3239051520","3239062271","DE","DEU","GERMANY" -"3239062272","3239062527","ES","ESP","SPAIN" -"3239062528","3239062783","CH","CHE","SWITZERLAND" -"3239062784","3239063551","UA","UKR","UKRAINE" -"3239063552","3239075839","DE","DEU","GERMANY" -"3239075840","3239076095","MT","MLT","MALTA" -"3239076096","3239076351","SE","SWE","SWEDEN" -"3239076352","3239076607","DE","DEU","GERMANY" -"3239076608","3239076863","PL","POL","POLAND" -"3239076864","3239077119","NL","NLD","NETHERLANDS" -"3239077120","3239077375","UA","UKR","UKRAINE" -"3239077376","3239077631","BG","BGR","BULGARIA" -"3239077632","3239077887","PT","PRT","PORTUGAL" -"3239077888","3239078143","CZ","CZE","CZECH REPUBLIC" -"3239078144","3239078399","UA","UKR","UKRAINE" -"3239078400","3239078655","RU","RUS","RUSSIAN FEDERATION" -"3239078656","3239078911","PL","POL","POLAND" -"3239078912","3239079167","GB","GBR","UNITED KINGDOM" -"3239079168","3239079423","SI","SVN","SLOVENIA" -"3239079424","3239079679","FR","FRA","FRANCE" -"3239079680","3239079935","MD","MDA","REPUBLIC OF MOLDOVA" -"3239079936","3239088127","DE","DEU","GERMANY" -"3239088128","3239088639","GB","GBR","UNITED KINGDOM" -"3239088640","3239088895","DK","DNK","DENMARK" -"3239088896","3239089151","IL","ISR","ISRAEL" -"3239089152","3239089407","RO","ROM","ROMANIA" -"3239089408","3239089919","GB","GBR","UNITED KINGDOM" -"3239089920","3239090175","DE","DEU","GERMANY" -"3239090176","3239090431","SI","SVN","SLOVENIA" -"3239090432","3239090687","ES","ESP","SPAIN" -"3239090688","3239090943","NL","NLD","NETHERLANDS" -"3239090944","3239091199","AT","AUT","AUSTRIA" -"3239091200","3239091455","FR","FRA","FRANCE" -"3239091456","3239091711","BG","BGR","BULGARIA" -"3239091712","3239091967","UA","UKR","UKRAINE" -"3239091968","3239092223","FR","FRA","FRANCE" -"3239092224","3239104511","DE","DEU","GERMANY" -"3239104512","3239105279","RU","RUS","RUSSIAN FEDERATION" -"3239105280","3239105535","CH","CHE","SWITZERLAND" -"3239105536","3239105791","DE","DEU","GERMANY" -"3239105792","3239106047","RO","ROM","ROMANIA" -"3239106048","3239106559","AT","AUT","AUSTRIA" -"3239106560","3239106815","ES","ESP","SPAIN" -"3239106816","3239107071","CH","CHE","SWITZERLAND" -"3239107072","3239107327","RO","ROM","ROMANIA" -"3239107328","3239107583","GR","GRC","GREECE" -"3239107584","3239107839","CH","CHE","SWITZERLAND" -"3239107840","3239108095","RO","ROM","ROMANIA" -"3239108096","3239109887","DE","DEU","GERMANY" -"3239109888","3239110143","PL","POL","POLAND" -"3239110144","3239110655","DE","DEU","GERMANY" -"3239110912","3239111167","UA","UKR","UKRAINE" -"3239111168","3239111423","NL","NLD","NETHERLANDS" -"3239111424","3239111935","DE","DEU","GERMANY" -"3239111936","3239112191","AT","AUT","AUSTRIA" -"3239112192","3239112447","UA","UKR","UKRAINE" -"3239112448","3239112959","PL","POL","POLAND" -"3239112960","3239113215","CH","CHE","SWITZERLAND" -"3239113216","3239113471","AT","AUT","AUSTRIA" -"3239113472","3239113727","ES","ESP","SPAIN" -"3239113728","3239113983","AT","AUT","AUSTRIA" -"3239113984","3239114239","DE","DEU","GERMANY" -"3239114240","3239114495","BG","BGR","BULGARIA" -"3239114496","3239114751","UA","UKR","UKRAINE" -"3239114752","3239116543","DE","DEU","GERMANY" -"3239116544","3239116799","PL","POL","POLAND" -"3239116800","3239117055","PT","PRT","PORTUGAL" -"3239117312","3239119871","DE","DEU","GERMANY" -"3239119872","3239120127","GB","GBR","UNITED KINGDOM" -"3239120128","3239120383","CZ","CZE","CZECH REPUBLIC" -"3239120384","3239120639","PL","POL","POLAND" -"3239120640","3239120895","FR","FRA","FRANCE" -"3239120896","3239121663","DE","DEU","GERMANY" -"3239121664","3239121919","FR","FRA","FRANCE" -"3239121920","3239127039","DE","DEU","GERMANY" -"3239127040","3239127295","PT","PRT","PORTUGAL" -"3239127296","3239127551","PL","POL","POLAND" -"3239127552","3239127807","IL","ISR","ISRAEL" -"3239127808","3239128063","RU","RUS","RUSSIAN FEDERATION" -"3239128064","3239128319","AT","AUT","AUSTRIA" -"3239128320","3239128575","IT","ITA","ITALY" -"3239128576","3239128831","UA","UKR","UKRAINE" -"3239128832","3239129087","CZ","CZE","CZECH REPUBLIC" -"3239129088","3239130111","DE","DEU","GERMANY" -"3239130112","3239130367","RU","RUS","RUSSIAN FEDERATION" -"3239130368","3239130623","JO","JOR","JORDAN" -"3239130624","3239131135","PL","POL","POLAND" -"3239131136","3239133183","DE","DEU","GERMANY" -"3239133184","3239133439","CH","CHE","SWITZERLAND" -"3239133440","3239133695","GB","GBR","UNITED KINGDOM" -"3239133696","3239133951","ES","ESP","SPAIN" -"3239133952","3239134207","SE","SWE","SWEDEN" -"3239134208","3239134463","IL","ISR","ISRAEL" -"3239134464","3239134719","UA","UKR","UKRAINE" -"3239134720","3239134975","RO","ROM","ROMANIA" -"3239134976","3239135231","PL","POL","POLAND" -"3239135232","3239135487","SE","SWE","SWEDEN" -"3239135488","3239135743","FR","FRA","FRANCE" -"3239135744","3239135999","IL","ISR","ISRAEL" -"3239136000","3239136255","UA","UKR","UKRAINE" -"3239136256","3239136511","CH","CHE","SWITZERLAND" -"3239136512","3239136767","DE","DEU","GERMANY" -"3239136768","3239137023","MD","MDA","REPUBLIC OF MOLDOVA" -"3239137024","3239137279","LI","LIE","LIECHTENSTEIN" -"3239137280","3239138303","DE","DEU","GERMANY" -"3239138304","3239138559","PL","POL","POLAND" -"3239138560","3239138815","CH","CHE","SWITZERLAND" -"3239138816","3239149567","DE","DEU","GERMANY" -"3239149568","3239160319","GB","GBR","UNITED KINGDOM" -"3239160320","3239160575","RU","RUS","RUSSIAN FEDERATION" -"3239160576","3239160831","DE","DEU","GERMANY" -"3239160832","3239161087","PL","POL","POLAND" -"3239161088","3239161343","BY","BLR","BELARUS" -"3239161344","3239161599","UA","UKR","UKRAINE" -"3239161600","3239161855","HU","HUN","HUNGARY" -"3239161856","3239162623","DE","DEU","GERMANY" -"3239162624","3239162879","BE","BEL","BELGIUM" -"3239162880","3239163903","DE","DEU","GERMANY" -"3239164160","3239164671","DE","DEU","GERMANY" -"3239164672","3239164927","GB","GBR","UNITED KINGDOM" -"3239164928","3239165183","DK","DNK","DENMARK" -"3239165184","3239165951","DE","DEU","GERMANY" -"3239165952","3239166207","FR","FRA","FRANCE" -"3239166208","3239166463","DE","DEU","GERMANY" -"3239166464","3239166719","CH","CHE","SWITZERLAND" -"3239166720","3239166975","RO","ROM","ROMANIA" -"3239166976","3239167231","FR","FRA","FRANCE" -"3239167232","3239167487","DE","DEU","GERMANY" -"3239167488","3239167743","FR","FRA","FRANCE" -"3239167744","3239168511","CH","CHE","SWITZERLAND" -"3239168512","3239168767","SE","SWE","SWEDEN" -"3239168768","3239169023","PL","POL","POLAND" -"3239169024","3239169535","DE","DEU","GERMANY" -"3239169536","3239169791","DK","DNK","DENMARK" -"3239169792","3239170047","SE","SWE","SWEDEN" -"3239170048","3239170303","UA","UKR","UKRAINE" -"3239170304","3239170559","FR","FRA","FRANCE" -"3239170560","3239170815","GB","GBR","UNITED KINGDOM" -"3239170816","3239171071","SE","SWE","SWEDEN" -"3239171072","3239171327","PL","POL","POLAND" -"3239171328","3239171583","UA","UKR","UKRAINE" -"3239171584","3239171839","PL","POL","POLAND" -"3239172096","3239172607","UA","UKR","UKRAINE" -"3239172608","3239172863","SE","SWE","SWEDEN" -"3239172864","3239173119","DE","DEU","GERMANY" -"3239173120","3239173375","RO","ROM","ROMANIA" -"3239173376","3239173631","DE","DEU","GERMANY" -"3239173632","3239173887","AT","AUT","AUSTRIA" -"3239173888","3239174143","PL","POL","POLAND" -"3239174144","3239174399","DE","DEU","GERMANY" -"3239174400","3239174655","FR","FRA","FRANCE" -"3239174656","3239174911","GB","GBR","UNITED KINGDOM" -"3239174912","3239175167","SI","SVN","SLOVENIA" -"3239175168","3239175423","UA","UKR","UKRAINE" -"3239175424","3239175679","BG","BGR","BULGARIA" -"3239175680","3239175935","DE","DEU","GERMANY" -"3239175936","3239176191","FI","FIN","FINLAND" -"3239176192","3239180287","DE","DEU","GERMANY" -"3239181312","3239181567","AT","AUT","AUSTRIA" -"3239181568","3239181823","UA","UKR","UKRAINE" -"3239181824","3239264255","DE","DEU","GERMANY" -"3239264256","3239264767","NO","NOR","NORWAY" -"3239264768","3239266303","RU","RUS","RUSSIAN FEDERATION" -"3239266304","3239266815","PL","POL","POLAND" -"3239266816","3239267327","UA","UKR","UKRAINE" -"3239267328","3239267839","FR","FRA","FRANCE" -"3239267840","3239268351","DE","DEU","GERMANY" -"3239268352","3239268863","SE","SWE","SWEDEN" -"3239268864","3239269375","RU","RUS","RUSSIAN FEDERATION" -"3239269376","3239270399","UA","UKR","UKRAINE" -"3239270400","3239270911","GB","GBR","UNITED KINGDOM" -"3239270912","3239271423","SA","SAU","SAUDI ARABIA" -"3239271424","3239271935","AT","AUT","AUSTRIA" -"3239271936","3239272447","CH","CHE","SWITZERLAND" -"3239272448","3239272959","UA","UKR","UKRAINE" -"3239272960","3239273471","GB","GBR","UNITED KINGDOM" -"3239273472","3239273983","UA","UKR","UKRAINE" -"3239273984","3239274495","RU","RUS","RUSSIAN FEDERATION" -"3239274496","3239275007","PL","POL","POLAND" -"3239275008","3239275519","RO","ROM","ROMANIA" -"3239275520","3239276543","UA","UKR","UKRAINE" -"3239276544","3239277055","LU","LUX","LUXEMBOURG" -"3239277056","3239277567","DE","DEU","GERMANY" -"3239277568","3239278079","RU","RUS","RUSSIAN FEDERATION" -"3239278080","3239278591","UA","UKR","UKRAINE" -"3239278592","3239279103","RU","RUS","RUSSIAN FEDERATION" -"3239279104","3239280127","PL","POL","POLAND" -"3239280128","3239280639","RU","RUS","RUSSIAN FEDERATION" -"3239280640","3239281663","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3239281664","3239282687","UA","UKR","UKRAINE" -"3239282688","3239283711","FI","FIN","FINLAND" -"3239283712","3239284735","PL","POL","POLAND" -"3239284736","3239285759","UA","UKR","UKRAINE" -"3239285760","3239286783","KW","KWT","KUWAIT" -"3239286784","3239287807","UA","UKR","UKRAINE" -"3239287808","3239288831","GB","GBR","UNITED KINGDOM" -"3239288832","3239289855","DE","DEU","GERMANY" -"3239289856","3239290879","PL","POL","POLAND" -"3239291904","3239292927","BG","BGR","BULGARIA" -"3239292928","3239293951","CZ","CZE","CZECH REPUBLIC" -"3239293952","3239294975","DE","DEU","GERMANY" -"3239294976","3239295999","UA","UKR","UKRAINE" -"3239296000","3239297023","SA","SAU","SAUDI ARABIA" -"3239297024","3239298047","RO","ROM","ROMANIA" -"3239298048","3239299071","GB","GBR","UNITED KINGDOM" -"3239299072","3239301119","UA","UKR","UKRAINE" -"3239301120","3239302143","FR","FRA","FRANCE" -"3239302144","3239303167","PL","POL","POLAND" -"3239303168","3239304191","FR","FRA","FRANCE" -"3239304192","3239305215","SI","SVN","SLOVENIA" -"3239305216","3239306239","NL","NLD","NETHERLANDS" -"3239306240","3239307263","UA","UKR","UKRAINE" -"3239308288","3239309311","DE","DEU","GERMANY" -"3239309312","3239311359","UA","UKR","UKRAINE" -"3239311360","3239312383","FR","FRA","FRANCE" -"3239312384","3239313407","UA","UKR","UKRAINE" -"3239313408","3239445759","DE","DEU","GERMANY" -"3239445760","3239446015","PL","POL","POLAND" -"3239446016","3239446271","RU","RUS","RUSSIAN FEDERATION" -"3239446272","3239446527","FR","FRA","FRANCE" -"3239446528","3239451647","DE","DEU","GERMANY" -"3239451904","3239452159","DE","DEU","GERMANY" -"3239452160","3239452415","CY","CYP","CYPRUS" -"3239452416","3239452671","HR","HRV","CROATIA" -"3239452672","3239464959","DE","DEU","GERMANY" -"3239464960","3239465215","IL","ISR","ISRAEL" -"3239465216","3239465471","HR","HRV","CROATIA" -"3239465472","3239465727","AT","AUT","AUSTRIA" -"3239465728","3239465983","PL","POL","POLAND" -"3239465984","3239466239","UA","UKR","UKRAINE" -"3239466240","3239466495","AT","AUT","AUSTRIA" -"3239466496","3239466751","FI","FIN","FINLAND" -"3239466752","3239467007","GB","GBR","UNITED KINGDOM" -"3239467008","3239467263","RU","RUS","RUSSIAN FEDERATION" -"3239467264","3239467519","GB","GBR","UNITED KINGDOM" -"3239467520","3239467775","IT","ITA","ITALY" -"3239467776","3239468031","PL","POL","POLAND" -"3239468032","3239468287","FR","FRA","FRANCE" -"3239468288","3239468543","RO","ROM","ROMANIA" -"3239468544","3239468799","NO","NOR","NORWAY" -"3239468800","3239469055","RO","ROM","ROMANIA" -"3239469056","3239470591","DE","DEU","GERMANY" -"3239470592","3239470847","CH","CHE","SWITZERLAND" -"3239470848","3239471103","BG","BGR","BULGARIA" -"3239471104","3239471871","DE","DEU","GERMANY" -"3239471872","3239472127","FR","FRA","FRANCE" -"3239472128","3239474943","DE","DEU","GERMANY" -"3239474944","3239475199","ES","ESP","SPAIN" -"3239475200","3239479295","DE","DEU","GERMANY" -"3239479552","3239479807","DE","DEU","GERMANY" -"3239479808","3239480063","UA","UKR","UKRAINE" -"3239480064","3239480319","FR","FRA","FRANCE" -"3239480320","3239480575","UA","UKR","UKRAINE" -"3239480576","3239480831","RO","ROM","ROMANIA" -"3239480832","3239481087","CH","CHE","SWITZERLAND" -"3239481088","3239481343","FR","FRA","FRANCE" -"3239481344","3239486719","DE","DEU","GERMANY" -"3239486720","3239486975","ES","ESP","SPAIN" -"3239486976","3239487487","DE","DEU","GERMANY" -"3239487488","3239487743","GB","GBR","UNITED KINGDOM" -"3239487744","3239487999","PL","POL","POLAND" -"3239488000","3239488255","AT","AUT","AUSTRIA" -"3239488256","3239488511","CH","CHE","SWITZERLAND" -"3239488512","3239488767","KW","KWT","KUWAIT" -"3239488768","3239489023","RO","ROM","ROMANIA" -"3239489024","3239489279","RU","RUS","RUSSIAN FEDERATION" -"3239489280","3239489535","PL","POL","POLAND" -"3239489536","3239501823","DE","DEU","GERMANY" -"3239501824","3239505919","BE","BEL","BELGIUM" -"3239505920","3239506431","DE","DEU","GERMANY" -"3239506432","3239506687","RU","RUS","RUSSIAN FEDERATION" -"3239506688","3239507455","GB","GBR","UNITED KINGDOM" -"3239507456","3239507967","DE","DEU","GERMANY" -"3239507968","3239508223","BG","BGR","BULGARIA" -"3239508224","3239508479","SA","SAU","SAUDI ARABIA" -"3239508480","3239508735","NO","NOR","NORWAY" -"3239508736","3239508991","DE","DEU","GERMANY" -"3239508992","3239509247","PL","POL","POLAND" -"3239509248","3239510015","DE","DEU","GERMANY" -"3239510016","3239510271","UA","UKR","UKRAINE" -"3239510272","3239522303","DE","DEU","GERMANY" -"3239522304","3239522559","PL","POL","POLAND" -"3239522560","3239522815","SI","SVN","SLOVENIA" -"3239522816","3239523071","LT","LTU","LITHUANIA" -"3239523072","3239523327","PL","POL","POLAND" -"3239523328","3239523583","BG","BGR","BULGARIA" -"3239523584","3239523839","UA","UKR","UKRAINE" -"3239523840","3239524095","PL","POL","POLAND" -"3239524096","3239524351","SE","SWE","SWEDEN" -"3239524352","3239524607","DE","DEU","GERMANY" -"3239524608","3239524863","SE","SWE","SWEDEN" -"3239524864","3239525119","UA","UKR","UKRAINE" -"3239525120","3239525375","LT","LTU","LITHUANIA" -"3239525376","3239525631","UA","UKR","UKRAINE" -"3239525632","3239525887","PL","POL","POLAND" -"3239525888","3239526143","SI","SVN","SLOVENIA" -"3239526144","3239526399","PL","POL","POLAND" -"3239526400","3239538687","DE","DEU","GERMANY" -"3239538688","3239539199","NL","NLD","NETHERLANDS" -"3239539200","3239539455","IT","ITA","ITALY" -"3239539456","3239539711","BE","BEL","BELGIUM" -"3239539712","3239539967","GB","GBR","UNITED KINGDOM" -"3239539968","3239540223","SE","SWE","SWEDEN" -"3239540224","3239540479","GR","GRC","GREECE" -"3239540480","3239540735","DE","DEU","GERMANY" -"3239540736","3239540991","GB","GBR","UNITED KINGDOM" -"3239540992","3239541247","FR","FRA","FRANCE" -"3239541248","3239541503","UA","UKR","UKRAINE" -"3239541504","3239541759","FR","FRA","FRANCE" -"3239541760","3239542015","GB","GBR","UNITED KINGDOM" -"3239542016","3239542271","PL","POL","POLAND" -"3239542272","3239542527","GB","GBR","UNITED KINGDOM" -"3239542528","3239542783","FR","FRA","FRANCE" -"3239542784","3239544831","DE","DEU","GERMANY" -"3239544832","3239545087","GB","GBR","UNITED KINGDOM" -"3239545088","3239545343","SI","SVN","SLOVENIA" -"3239545344","3239545855","HU","HUN","HUNGARY" -"3239545856","3239546111","UA","UKR","UKRAINE" -"3239546112","3239546367","GB","GBR","UNITED KINGDOM" -"3239546368","3239546623","RU","RUS","RUSSIAN FEDERATION" -"3239546624","3239546879","NL","NLD","NETHERLANDS" -"3239546880","3239549951","DE","DEU","GERMANY" -"3239549952","3239550207","TR","TUR","TURKEY" -"3239550208","3239550463","UA","UKR","UKRAINE" -"3239550464","3239550719","FR","FRA","FRANCE" -"3239550720","3239550975","NO","NOR","NORWAY" -"3239550976","3239554047","DE","DEU","GERMANY" -"3239554048","3239554303","SE","SWE","SWEDEN" -"3239554304","3239554559","DK","DNK","DENMARK" -"3239554560","3239554815","PL","POL","POLAND" -"3239554816","3239555071","UA","UKR","UKRAINE" -"3239555072","3239556095","DE","DEU","GERMANY" -"3239556096","3239556351","SA","SAU","SAUDI ARABIA" -"3239556352","3239556607","UA","UKR","UKRAINE" -"3239556608","3239556863","HR","HRV","CROATIA" -"3239556864","3239557119","UA","UKR","UKRAINE" -"3239557120","3239567359","DE","DEU","GERMANY" -"3239567616","3239567871","UA","UKR","UKRAINE" -"3239567872","3239568127","DE","DEU","GERMANY" -"3239568128","3239568383","FR","FRA","FRANCE" -"3239568384","3239568639","SE","SWE","SWEDEN" -"3239568640","3239568895","NO","NOR","NORWAY" -"3239568896","3239575295","DE","DEU","GERMANY" -"3239575296","3239575551","DK","DNK","DENMARK" -"3239575552","3239575807","RO","ROM","ROMANIA" -"3239575808","3239578879","DE","DEU","GERMANY" -"3239579136","3239579391","PL","POL","POLAND" -"3239579392","3239581695","DE","DEU","GERMANY" -"3239581696","3239581951","PL","POL","POLAND" -"3239581952","3239582207","UA","UKR","UKRAINE" -"3239582208","3239582463","GB","GBR","UNITED KINGDOM" -"3239582464","3239582719","DE","DEU","GERMANY" -"3239582720","3239582975","GB","GBR","UNITED KINGDOM" -"3239582976","3239583231","IT","ITA","ITALY" -"3239583232","3239583487","UA","UKR","UKRAINE" -"3239583488","3239583743","RO","ROM","ROMANIA" -"3239583744","3239591935","DE","DEU","GERMANY" -"3239591936","3239593983","FI","FIN","FINLAND" -"3239593984","3239624703","DE","DEU","GERMANY" -"3239624704","3239625727","CH","CHE","SWITZERLAND" -"3239626752","3239628799","PL","POL","POLAND" -"3239628800","3239629823","DE","DEU","GERMANY" -"3239629824","3239630847","FR","FRA","FRANCE" -"3239630848","3239631871","DE","DEU","GERMANY" -"3239632896","3239633919","DE","DEU","GERMANY" -"3239633920","3239634943","FR","FRA","FRANCE" -"3239634944","3239635967","RU","RUS","RUSSIAN FEDERATION" -"3239635968","3239636991","DE","DEU","GERMANY" -"3239636992","3239638015","BG","BGR","BULGARIA" -"3239638016","3239639039","PL","POL","POLAND" -"3239639040","3239640063","SI","SVN","SLOVENIA" -"3239640064","3239641087","DE","DEU","GERMANY" -"3239641088","3239643135","PL","POL","POLAND" -"3239643136","3239645183","RU","RUS","RUSSIAN FEDERATION" -"3239645184","3239665663","DE","DEU","GERMANY" -"3239665664","3239666175","BE","BEL","BELGIUM" -"3239666176","3239666687","AT","AUT","AUSTRIA" -"3239666688","3239667199","SE","SWE","SWEDEN" -"3239667200","3239667711","CH","CHE","SWITZERLAND" -"3239667712","3239668223","RO","ROM","ROMANIA" -"3239668224","3239668735","UA","UKR","UKRAINE" -"3239668736","3239669247","PL","POL","POLAND" -"3239669248","3239670271","RO","ROM","ROMANIA" -"3239670272","3239670783","DE","DEU","GERMANY" -"3239670784","3239671295","GB","GBR","UNITED KINGDOM" -"3239671296","3239671807","DE","DEU","GERMANY" -"3239672320","3239672831","DE","DEU","GERMANY" -"3239672832","3239673343","TR","TUR","TURKEY" -"3239673344","3239673855","SE","SWE","SWEDEN" -"3239673856","3239682047","DE","DEU","GERMANY" -"3239682048","3239682559","PL","POL","POLAND" -"3239682560","3239683071","BG","BGR","BULGARIA" -"3239683072","3239683583","PT","PRT","PORTUGAL" -"3239683584","3239684607","PL","POL","POLAND" -"3239684608","3239685119","GB","GBR","UNITED KINGDOM" -"3239685120","3239686143","DE","DEU","GERMANY" -"3239686144","3239686655","UA","UKR","UKRAINE" -"3239686656","3239687167","IT","ITA","ITALY" -"3239687168","3239687679","UA","UKR","UKRAINE" -"3239687680","3239688191","DE","DEU","GERMANY" -"3239688192","3239688703","PL","POL","POLAND" -"3239688704","3239689727","GB","GBR","UNITED KINGDOM" -"3239689728","3239690239","RU","RUS","RUSSIAN FEDERATION" -"3239690240","3239690495","ES","ESP","SPAIN" -"3239690496","3239690751","PL","POL","POLAND" -"3239690752","3239691263","FR","FRA","FRANCE" -"3239691264","3239691519","IT","ITA","ITALY" -"3239691520","3239691775","FR","FRA","FRANCE" -"3239692032","3239692287","AT","AUT","AUSTRIA" -"3239692288","3239697407","DE","DEU","GERMANY" -"3239697408","3239697663","NL","NLD","NETHERLANDS" -"3239697664","3239697919","RU","RUS","RUSSIAN FEDERATION" -"3239697920","3239698431","PL","POL","POLAND" -"3239698432","3239702527","DE","DEU","GERMANY" -"3239704576","3239706367","DE","DEU","GERMANY" -"3239706368","3239706623","UA","UKR","UKRAINE" -"3239706624","3239706879","RU","RUS","RUSSIAN FEDERATION" -"3239706880","3239707135","NL","NLD","NETHERLANDS" -"3239707136","3239707391","RU","RUS","RUSSIAN FEDERATION" -"3239707392","3239707647","UA","UKR","UKRAINE" -"3239707648","3239707903","GB","GBR","UNITED KINGDOM" -"3239707904","3239708159","DE","DEU","GERMANY" -"3239708160","3239708415","SE","SWE","SWEDEN" -"3239708416","3239708671","RO","ROM","ROMANIA" -"3239708672","3239708927","AT","AUT","AUSTRIA" -"3239708928","3239709183","NL","NLD","NETHERLANDS" -"3239709184","3239709439","RO","ROM","ROMANIA" -"3239709440","3239709695","FR","FRA","FRANCE" -"3239709696","3239709951","DE","DEU","GERMANY" -"3239709952","3239710207","UA","UKR","UKRAINE" -"3239710208","3239710463","BG","BGR","BULGARIA" -"3239710464","3239710719","DE","DEU","GERMANY" -"3239710720","3239710975","RU","RUS","RUSSIAN FEDERATION" -"3239710976","3239711231","SE","SWE","SWEDEN" -"3239711232","3239711487","BY","BLR","BELARUS" -"3239711488","3239711743","FR","FRA","FRANCE" -"3239711744","3239711999","UA","UKR","UKRAINE" -"3239712000","3239712255","PL","POL","POLAND" -"3239712256","3239712511","DE","DEU","GERMANY" -"3239712512","3239712767","GB","GBR","UNITED KINGDOM" -"3239712768","3239713023","DE","DEU","GERMANY" -"3239713024","3239713279","PL","POL","POLAND" -"3239713280","3239713535","SI","SVN","SLOVENIA" -"3239713536","3239713791","UA","UKR","UKRAINE" -"3239713792","3239714047","DE","DEU","GERMANY" -"3239714048","3239714303","FR","FRA","FRANCE" -"3239714304","3239714559","SE","SWE","SWEDEN" -"3239714560","3239714815","HU","HUN","HUNGARY" -"3239714816","3239723007","DE","DEU","GERMANY" -"3239723008","3239731199","GB","GBR","UNITED KINGDOM" -"3239731200","3239739391","DE","DEU","GERMANY" -"3239739392","3239739647","IT","ITA","ITALY" -"3239739648","3239739903","RO","ROM","ROMANIA" -"3239739904","3239740159","CH","CHE","SWITZERLAND" -"3239740160","3239740415","PL","POL","POLAND" -"3239740416","3239740671","DK","DNK","DENMARK" -"3239740672","3239740927","GB","GBR","UNITED KINGDOM" -"3239740928","3239741183","UA","UKR","UKRAINE" -"3239741184","3239741439","RU","RUS","RUSSIAN FEDERATION" -"3239741440","3239759871","DE","DEU","GERMANY" -"3239759872","3239760127","RU","RUS","RUSSIAN FEDERATION" -"3239760128","3239760383","UA","UKR","UKRAINE" -"3239760384","3239760895","PL","POL","POLAND" -"3239760896","3239761151","RU","RUS","RUSSIAN FEDERATION" -"3239761152","3239761407","GB","GBR","UNITED KINGDOM" -"3239761408","3239761663","RU","RUS","RUSSIAN FEDERATION" -"3239761664","3239761919","PL","POL","POLAND" -"3239761920","3239762175","BG","BGR","BULGARIA" -"3239762176","3239762431","CH","CHE","SWITZERLAND" -"3239762432","3239762687","DK","DNK","DENMARK" -"3239762688","3239762943","RO","ROM","ROMANIA" -"3239762944","3239763199","PL","POL","POLAND" -"3239763200","3239763455","SE","SWE","SWEDEN" -"3239763456","3239763967","GB","GBR","UNITED KINGDOM" -"3239763968","3239772159","DE","DEU","GERMANY" -"3239772160","3239772415","UA","UKR","UKRAINE" -"3239772416","3239772671","GB","GBR","UNITED KINGDOM" -"3239772672","3239773183","DK","DNK","DENMARK" -"3239773184","3239773439","FR","FRA","FRANCE" -"3239773440","3239773951","PL","POL","POLAND" -"3239773952","3239774207","SA","SAU","SAUDI ARABIA" -"3239774208","3239774463","PL","POL","POLAND" -"3239774464","3239774719","ES","ESP","SPAIN" -"3239774720","3239774975","FR","FRA","FRANCE" -"3239774976","3239775231","PT","PRT","PORTUGAL" -"3239775232","3239776255","DE","DEU","GERMANY" -"3239776512","3239782399","DE","DEU","GERMANY" -"3239782400","3239782655","AT","AUT","AUSTRIA" -"3239782656","3239782911","RU","RUS","RUSSIAN FEDERATION" -"3239782912","3239783167","GB","GBR","UNITED KINGDOM" -"3239783168","3239783423","CH","CHE","SWITZERLAND" -"3239783424","3239783679","DK","DNK","DENMARK" -"3239783680","3239783935","CH","CHE","SWITZERLAND" -"3239783936","3239784191","DE","DEU","GERMANY" -"3239784192","3239784447","UA","UKR","UKRAINE" -"3239784448","3239788543","DE","DEU","GERMANY" -"3239789056","3239789567","RU","RUS","RUSSIAN FEDERATION" -"3239790080","3239791103","RO","ROM","ROMANIA" -"3239791104","3239792127","CH","CHE","SWITZERLAND" -"3239792128","3239792639","FR","FRA","FRANCE" -"3239792640","3239793151","UA","UKR","UKRAINE" -"3239793152","3239793663","PL","POL","POLAND" -"3239793664","3239794175","RO","ROM","ROMANIA" -"3239794176","3239794687","NL","NLD","NETHERLANDS" -"3239794688","3239795199","GB","GBR","UNITED KINGDOM" -"3239795200","3239795711","PL","POL","POLAND" -"3239795712","3239796223","IL","ISR","ISRAEL" -"3239796224","3239796735","NO","NOR","NORWAY" -"3239796736","3239821311","DE","DEU","GERMANY" -"3239821312","3239821823","SE","SWE","SWEDEN" -"3239821824","3239822335","FR","FRA","FRANCE" -"3239822336","3239822847","RU","RUS","RUSSIAN FEDERATION" -"3239822848","3239823359","PL","POL","POLAND" -"3239823360","3239823871","SE","SWE","SWEDEN" -"3239823872","3239824383","IT","ITA","ITALY" -"3239824384","3239824895","PL","POL","POLAND" -"3239824896","3239825407","UZ","UZB","UZBEKISTAN" -"3239825408","3239825919","UA","UKR","UKRAINE" -"3239825920","3239826431","PL","POL","POLAND" -"3239826432","3239826943","GB","GBR","UNITED KINGDOM" -"3239826944","3239827455","RU","RUS","RUSSIAN FEDERATION" -"3239827456","3239827967","DK","DNK","DENMARK" -"3239827968","3239828479","CH","CHE","SWITZERLAND" -"3239828480","3239828991","DE","DEU","GERMANY" -"3239828992","3239830015","RU","RUS","RUSSIAN FEDERATION" -"3239830016","3239830527","CH","CHE","SWITZERLAND" -"3239830528","3239831039","SE","SWE","SWEDEN" -"3239831040","3239832063","RU","RUS","RUSSIAN FEDERATION" -"3239832064","3239832575","UA","UKR","UKRAINE" -"3239832576","3239834111","RU","RUS","RUSSIAN FEDERATION" -"3239834112","3239834623","UA","UKR","UKRAINE" -"3239834624","3239835135","AT","AUT","AUSTRIA" -"3239835136","3239836159","RU","RUS","RUSSIAN FEDERATION" -"3239836160","3239836671","DK","DNK","DENMARK" -"3239837184","3239837695","SE","SWE","SWEDEN" -"3239837696","3239837951","PL","POL","POLAND" -"3239837952","3239839231","DE","DEU","GERMANY" -"3239839232","3239839487","RU","RUS","RUSSIAN FEDERATION" -"3239839488","3239839743","DE","DEU","GERMANY" -"3239839744","3239839999","SK","SVK","SLOVAKIA" -"3239840000","3239840511","SA","SAU","SAUDI ARABIA" -"3239840512","3239840767","DE","DEU","GERMANY" -"3239840768","3239841023","AT","AUT","AUSTRIA" -"3239841024","3239841279","NL","NLD","NETHERLANDS" -"3239841280","3239848447","DE","DEU","GERMANY" -"3239848448","3239848703","CH","CHE","SWITZERLAND" -"3239848704","3239848959","SE","SWE","SWEDEN" -"3239848960","3239849215","RU","RUS","RUSSIAN FEDERATION" -"3239849216","3239849471","GB","GBR","UNITED KINGDOM" -"3239849472","3239849727","RU","RUS","RUSSIAN FEDERATION" -"3239849728","3239849983","NL","NLD","NETHERLANDS" -"3239849984","3239852287","DE","DEU","GERMANY" -"3239852544","3239852799","DE","DEU","GERMANY" -"3239853056","3239859199","DE","DEU","GERMANY" -"3239859200","3239859455","PL","POL","POLAND" -"3239859456","3239859711","UA","UKR","UKRAINE" -"3239859712","3239859967","HU","HUN","HUNGARY" -"3239859968","3239860223","CA","CAN","CANADA" -"3239860224","3239860479","DE","DEU","GERMANY" -"3239860480","3239860735","GB","GBR","UNITED KINGDOM" -"3239860736","3239861247","DE","DEU","GERMANY" -"3239861248","3239861503","UA","UKR","UKRAINE" -"3239861504","3239861759","PL","POL","POLAND" -"3239861760","3239862015","SA","SAU","SAUDI ARABIA" -"3239862016","3239862271","IT","ITA","ITALY" -"3239862272","3239874559","DE","DEU","GERMANY" -"3239874560","3239874815","NL","NLD","NETHERLANDS" -"3239874816","3239875071","DE","DEU","GERMANY" -"3239875072","3239875327","SI","SVN","SLOVENIA" -"3239875328","3239875583","DK","DNK","DENMARK" -"3239875584","3239875839","PL","POL","POLAND" -"3239875840","3239876095","DK","DNK","DENMARK" -"3239876096","3239876351","DE","DEU","GERMANY" -"3239876352","3239876607","RO","ROM","ROMANIA" -"3239876608","3239876863","NL","NLD","NETHERLANDS" -"3239876864","3239877119","DE","DEU","GERMANY" -"3239877120","3239877375","GB","GBR","UNITED KINGDOM" -"3239877376","3239877631","IL","ISR","ISRAEL" -"3239877632","3239877887","UA","UKR","UKRAINE" -"3239877888","3239878143","IT","ITA","ITALY" -"3239878144","3239878399","PL","POL","POLAND" -"3239878400","3239882751","DE","DEU","GERMANY" -"3239882752","3239883007","GB","GBR","UNITED KINGDOM" -"3239883008","3239883263","UA","UKR","UKRAINE" -"3239883264","3239883775","GB","GBR","UNITED KINGDOM" -"3239883776","3239884031","DE","DEU","GERMANY" -"3239884032","3239884287","CH","CHE","SWITZERLAND" -"3239884288","3239884543","GB","GBR","UNITED KINGDOM" -"3239884544","3239884799","FR","FRA","FRANCE" -"3239884800","3239885055","UA","UKR","UKRAINE" -"3239885056","3239885311","CH","CHE","SWITZERLAND" -"3239885312","3239885567","UA","UKR","UKRAINE" -"3239885568","3239885823","PL","POL","POLAND" -"3239885824","3239886079","CH","CHE","SWITZERLAND" -"3239886080","3239886335","PL","POL","POLAND" -"3239886336","3239886591","RU","RUS","RUSSIAN FEDERATION" -"3239886592","3239886847","FR","FRA","FRANCE" -"3239886848","3239888895","DE","DEU","GERMANY" -"3239888896","3239889151","UA","UKR","UKRAINE" -"3239889152","3239889407","GB","GBR","UNITED KINGDOM" -"3239889408","3239889663","CZ","CZE","CZECH REPUBLIC" -"3239889664","3239889919","FI","FIN","FINLAND" -"3239889920","3239890175","AT","AUT","AUSTRIA" -"3239890176","3239890431","FR","FRA","FRANCE" -"3239890432","3239890687","NL","NLD","NETHERLANDS" -"3239890688","3239895039","DE","DEU","GERMANY" -"3239895040","3239895295","DK","DNK","DENMARK" -"3239895296","3239895551","TR","TUR","TURKEY" -"3239895552","3239895807","PL","POL","POLAND" -"3239895808","3239896063","DK","DNK","DENMARK" -"3239896064","3239896575","DE","DEU","GERMANY" -"3239896576","3239896831","PL","POL","POLAND" -"3239896832","3239897087","HU","HUN","HUNGARY" -"3239897088","3239897343","GB","GBR","UNITED KINGDOM" -"3239897344","3239897599","FR","FRA","FRANCE" -"3239897600","3239897855","RU","RUS","RUSSIAN FEDERATION" -"3239897856","3239898111","FR","FRA","FRANCE" -"3239898112","3239898367","NO","NOR","NORWAY" -"3239898368","3239898623","GB","GBR","UNITED KINGDOM" -"3239898624","3239898879","DE","DEU","GERMANY" -"3239899136","3239901695","DE","DEU","GERMANY" -"3239901696","3239901951","BG","BGR","BULGARIA" -"3239901952","3239902207","DE","DEU","GERMANY" -"3239902208","3239902463","PL","POL","POLAND" -"3239902464","3239902719","RU","RUS","RUSSIAN FEDERATION" -"3239902720","3239902975","EE","EST","ESTONIA" -"3239902976","3239903231","GB","GBR","UNITED KINGDOM" -"3239903232","3239907327","DE","DEU","GERMANY" -"3239907584","3239913215","DE","DEU","GERMANY" -"3239913216","3239913471","LT","LTU","LITHUANIA" -"3239913472","3239915519","DE","DEU","GERMANY" -"3239915520","3239915775","PL","POL","POLAND" -"3239915776","3239916031","HU","HUN","HUNGARY" -"3239916032","3239916287","SA","SAU","SAUDI ARABIA" -"3239916288","3239916543","PL","POL","POLAND" -"3239916544","3239916799","FR","FRA","FRANCE" -"3239916800","3239917055","KZ","KAZ","KAZAKHSTAN" -"3239917056","3239917311","DE","DEU","GERMANY" -"3239917312","3239917567","BG","BGR","BULGARIA" -"3239917568","3239935999","DE","DEU","GERMANY" -"3239936000","3239936255","UA","UKR","UKRAINE" -"3239936256","3239936511","FR","FRA","FRANCE" -"3239936512","3239938815","DE","DEU","GERMANY" -"3239938816","3239939071","NL","NLD","NETHERLANDS" -"3239939072","3239950335","DE","DEU","GERMANY" -"3239950848","3239951103","DE","DEU","GERMANY" -"3239951104","3239951359","AT","AUT","AUSTRIA" -"3239951360","3239954431","DE","DEU","GERMANY" -"3239954688","3239954943","DK","DNK","DENMARK" -"3239954944","3239955199","ES","ESP","SPAIN" -"3239955200","3239955711","UA","UKR","UKRAINE" -"3239955712","3239955967","PL","POL","POLAND" -"3239955968","3239956223","CZ","CZE","CZECH REPUBLIC" -"3239956224","3239956479","PL","POL","POLAND" -"3239956480","3239959551","DE","DEU","GERMANY" -"3239959552","3239959807","UA","UKR","UKRAINE" -"3239959808","3239960063","BE","BEL","BELGIUM" -"3239960064","3239960319","FR","FRA","FRANCE" -"3239960320","3239960575","GB","GBR","UNITED KINGDOM" -"3239960576","3239962111","DE","DEU","GERMANY" -"3239962368","3239968511","DE","DEU","GERMANY" -"3239968512","3239968767","PL","POL","POLAND" -"3239968768","3239969023","NO","NOR","NORWAY" -"3239969024","3239970047","DE","DEU","GERMANY" -"3239970304","3239974911","DE","DEU","GERMANY" -"3239974912","3239975935","GB","GBR","UNITED KINGDOM" -"3239976960","3239978751","DE","DEU","GERMANY" -"3239978752","3239979007","RU","RUS","RUSSIAN FEDERATION" -"3239979008","3239979263","UA","UKR","UKRAINE" -"3239979264","3239979519","GB","GBR","UNITED KINGDOM" -"3239979520","3239979775","DE","DEU","GERMANY" -"3239979776","3239980031","SI","SVN","SLOVENIA" -"3239980032","3239993087","DE","DEU","GERMANY" -"3239995392","3239996415","DE","DEU","GERMANY" -"3239996416","3239996671","GB","GBR","UNITED KINGDOM" -"3239996672","3239996927","PL","POL","POLAND" -"3239996928","3239997183","BE","BEL","BELGIUM" -"3239997184","3239997439","GB","GBR","UNITED KINGDOM" -"3239997440","3240004863","DE","DEU","GERMANY" -"3240004864","3240005119","FR","FRA","FRANCE" -"3240005120","3240005375","SE","SWE","SWEDEN" -"3240005376","3240005631","NL","NLD","NETHERLANDS" -"3240005632","3240009727","DE","DEU","GERMANY" -"3240009728","3240009983","PL","POL","POLAND" -"3240009984","3240010239","IL","ISR","ISRAEL" -"3240010240","3240010495","GB","GBR","UNITED KINGDOM" -"3240010496","3240010751","AT","AUT","AUSTRIA" -"3240010752","3240011007","HU","HUN","HUNGARY" -"3240011008","3240011263","DE","DEU","GERMANY" -"3240011264","3240011519","GB","GBR","UNITED KINGDOM" -"3240011520","3240011775","CH","CHE","SWITZERLAND" -"3240011776","3240026111","DE","DEU","GERMANY" -"3240026112","3240027135","FR","FRA","FRANCE" -"3240027136","3240028159","BG","BGR","BULGARIA" -"3240028160","3240029183","GB","GBR","UNITED KINGDOM" -"3240029184","3240030207","RU","RUS","RUSSIAN FEDERATION" -"3240030208","3240032255","UA","UKR","UKRAINE" -"3240033280","3240034303","DE","DEU","GERMANY" -"3240034304","3240034559","RU","RUS","RUSSIAN FEDERATION" -"3240034560","3240035583","DE","DEU","GERMANY" -"3240035840","3240037375","DE","DEU","GERMANY" -"3240037888","3240038143","AT","AUT","AUSTRIA" -"3240038144","3240038399","DK","DNK","DENMARK" -"3240038400","3240098815","DE","DEU","GERMANY" -"3240098816","3240099327","CH","CHE","SWITZERLAND" -"3240099584","3240099839","DE","DEU","GERMANY" -"3240099840","3240102911","GB","GBR","UNITED KINGDOM" -"3240103936","3240104703","GB","GBR","UNITED KINGDOM" -"3240104704","3240104959","NL","NLD","NETHERLANDS" -"3240104960","3240105215","RU","RUS","RUSSIAN FEDERATION" -"3240105216","3240105471","UA","UKR","UKRAINE" -"3240105472","3240109055","GB","GBR","UNITED KINGDOM" -"3240109056","3240109567","PL","POL","POLAND" -"3240109568","3240125439","GB","GBR","UNITED KINGDOM" -"3240125440","3240125695","RO","ROM","ROMANIA" -"3240125696","3240125951","IE","IRL","IRELAND" -"3240125952","3240165375","GB","GBR","UNITED KINGDOM" -"3240165376","3240165887","IT","ITA","ITALY" -"3240165888","3240166399","ES","ESP","SPAIN" -"3240166400","3240166911","PL","POL","POLAND" -"3240166912","3240167423","RO","ROM","ROMANIA" -"3240167936","3240168447","RU","RUS","RUSSIAN FEDERATION" -"3240168448","3240168959","FR","FRA","FRANCE" -"3240168960","3240169471","CZ","CZE","CZECH REPUBLIC" -"3240169472","3240169983","IL","ISR","ISRAEL" -"3240169984","3240170495","IT","ITA","ITALY" -"3240170496","3240171007","DE","DEU","GERMANY" -"3240171008","3240171519","CZ","CZE","CZECH REPUBLIC" -"3240171520","3240172031","RO","ROM","ROMANIA" -"3240172032","3240173055","RU","RUS","RUSSIAN FEDERATION" -"3240173056","3240173567","CH","CHE","SWITZERLAND" -"3240173568","3240174079","RO","ROM","ROMANIA" -"3240174080","3240174591","PL","POL","POLAND" -"3240174592","3240175103","FR","FRA","FRANCE" -"3240175104","3240176127","RU","RUS","RUSSIAN FEDERATION" -"3240176128","3240176639","PL","POL","POLAND" -"3240176640","3240177151","UA","UKR","UKRAINE" -"3240177152","3240177663","FR","FRA","FRANCE" -"3240177664","3240178175","UA","UKR","UKRAINE" -"3240178176","3240178687","NL","NLD","NETHERLANDS" -"3240178688","3240179199","BE","BEL","BELGIUM" -"3240179200","3240179711","UA","UKR","UKRAINE" -"3240179712","3240180223","RO","ROM","ROMANIA" -"3240180224","3240180735","PL","POL","POLAND" -"3240180736","3240181247","NL","NLD","NETHERLANDS" -"3240181248","3240181759","RU","RUS","RUSSIAN FEDERATION" -"3240181760","3240182271","UA","UKR","UKRAINE" -"3240182272","3240182783","RO","ROM","ROMANIA" -"3240182784","3240183295","RU","RUS","RUSSIAN FEDERATION" -"3240183296","3240183615","NL","NLD","NETHERLANDS" -"3240183616","3240183647","CR","CRI","COSTA RICA" -"3240183648","3240183807","NL","NLD","NETHERLANDS" -"3240183808","3240184319","GB","GBR","UNITED KINGDOM" -"3240184832","3240185343","GB","GBR","UNITED KINGDOM" -"3240185344","3240185855","FR","FRA","FRANCE" -"3240185856","3240187391","RU","RUS","RUSSIAN FEDERATION" -"3240187392","3240187903","UA","UKR","UKRAINE" -"3240187904","3240188415","RU","RUS","RUSSIAN FEDERATION" -"3240188416","3240188927","RO","ROM","ROMANIA" -"3240188928","3240189439","MD","MDA","REPUBLIC OF MOLDOVA" -"3240189440","3240189951","RO","ROM","ROMANIA" -"3240189952","3240190463","DE","DEU","GERMANY" -"3240190464","3240190975","IT","ITA","ITALY" -"3240190976","3240191487","RU","RUS","RUSSIAN FEDERATION" -"3240191488","3240191999","SE","SWE","SWEDEN" -"3240192000","3240192511","UA","UKR","UKRAINE" -"3240192512","3240193023","RO","ROM","ROMANIA" -"3240193024","3240193535","GB","GBR","UNITED KINGDOM" -"3240193536","3240194047","PL","POL","POLAND" -"3240194048","3240194559","GB","GBR","UNITED KINGDOM" -"3240194560","3240195071","AT","AUT","AUSTRIA" -"3240195072","3240195583","GB","GBR","UNITED KINGDOM" -"3240195584","3240196095","RO","ROM","ROMANIA" -"3240196096","3240197119","RU","RUS","RUSSIAN FEDERATION" -"3240197120","3240197631","PL","POL","POLAND" -"3240197632","3240198143","CZ","CZE","CZECH REPUBLIC" -"3240198144","3240198655","CH","CHE","SWITZERLAND" -"3240198656","3240199167","RO","ROM","ROMANIA" -"3240199168","3240199679","HU","HUN","HUNGARY" -"3240199680","3240200191","NL","NLD","NETHERLANDS" -"3240200192","3240200703","RO","ROM","ROMANIA" -"3240200704","3240201215","GB","GBR","UNITED KINGDOM" -"3240201216","3240201727","RO","ROM","ROMANIA" -"3240201728","3240202239","CH","CHE","SWITZERLAND" -"3240202240","3240202751","RU","RUS","RUSSIAN FEDERATION" -"3240203776","3240204287","AT","AUT","AUSTRIA" -"3240204800","3240205311","RO","ROM","ROMANIA" -"3240205312","3240205823","GB","GBR","UNITED KINGDOM" -"3240205824","3240206335","DE","DEU","GERMANY" -"3240206336","3240206847","RU","RUS","RUSSIAN FEDERATION" -"3240206848","3240207871","RO","ROM","ROMANIA" -"3240207872","3240208383","CN","CHN","CHINA" -"3240208384","3240208895","FR","FRA","FRANCE" -"3240208896","3240209407","GB","GBR","UNITED KINGDOM" -"3240209408","3240209919","UA","UKR","UKRAINE" -"3240209920","3240210943","PL","POL","POLAND" -"3240210944","3240211455","GB","GBR","UNITED KINGDOM" -"3240211456","3240211967","NL","NLD","NETHERLANDS" -"3240211968","3240212479","BE","BEL","BELGIUM" -"3240212480","3240212991","RU","RUS","RUSSIAN FEDERATION" -"3240212992","3240213503","GB","GBR","UNITED KINGDOM" -"3240213504","3240214015","SE","SWE","SWEDEN" -"3240214016","3240214527","DK","DNK","DENMARK" -"3240214528","3240215551","RU","RUS","RUSSIAN FEDERATION" -"3240215552","3240216063","UA","UKR","UKRAINE" -"3240216064","3240216575","GB","GBR","UNITED KINGDOM" -"3240216576","3240217087","RO","ROM","ROMANIA" -"3240217088","3240217599","UA","UKR","UKRAINE" -"3240217600","3240218111","RU","RUS","RUSSIAN FEDERATION" -"3240218112","3240218623","UA","UKR","UKRAINE" -"3240218624","3240219135","NL","NLD","NETHERLANDS" -"3240219136","3240219647","AT","AUT","AUSTRIA" -"3240219648","3240220159","UA","UKR","UKRAINE" -"3240220160","3240220671","NL","NLD","NETHERLANDS" -"3240220672","3240221183","AT","AUT","AUSTRIA" -"3240221696","3240222207","NL","NLD","NETHERLANDS" -"3240222208","3240222719","FR","FRA","FRANCE" -"3240222720","3240223231","KW","KWT","KUWAIT" -"3240223232","3240223743","RU","RUS","RUSSIAN FEDERATION" -"3240223744","3240224255","MT","MLT","MALTA" -"3240224256","3240225279","RU","RUS","RUSSIAN FEDERATION" -"3240225280","3240225791","IL","ISR","ISRAEL" -"3240225792","3240226303","UA","UKR","UKRAINE" -"3240226304","3240226815","CH","CHE","SWITZERLAND" -"3240226816","3240227839","RU","RUS","RUSSIAN FEDERATION" -"3240227840","3240228351","GB","GBR","UNITED KINGDOM" -"3240228352","3240228863","SE","SWE","SWEDEN" -"3240228864","3240229375","GB","GBR","UNITED KINGDOM" -"3240229376","3240230399","RO","ROM","ROMANIA" -"3240230400","3240230911","GB","GBR","UNITED KINGDOM" -"3240230912","3240231935","PL","POL","POLAND" -"3240231936","3240232959","NL","NLD","NETHERLANDS" -"3240232960","3240235007","RU","RUS","RUSSIAN FEDERATION" -"3240235008","3240236031","FR","FRA","FRANCE" -"3240236032","3240237055","UA","UKR","UKRAINE" -"3240237056","3240238079","DE","DEU","GERMANY" -"3240238080","3240239103","GB","GBR","UNITED KINGDOM" -"3240239104","3240240127","FR","FRA","FRANCE" -"3240240128","3240241151","US","USA","UNITED STATES" -"3240241152","3240242175","FI","FIN","FINLAND" -"3240242176","3240243199","PL","POL","POLAND" -"3240243200","3240244223","DE","DEU","GERMANY" -"3240244224","3240245247","PL","POL","POLAND" -"3240245248","3240246271","IL","ISR","ISRAEL" -"3240246272","3240247295","UA","UKR","UKRAINE" -"3240247296","3240248319","RS","SRB","SERBIA" -"3240248320","3240249343","DE","DEU","GERMANY" -"3240249344","3240251391","UA","UKR","UKRAINE" -"3240251392","3240252415","IE","IRL","IRELAND" -"3240252416","3240253439","LT","LTU","LITHUANIA" -"3240253440","3240254463","BE","BEL","BELGIUM" -"3240254464","3240256511","UA","UKR","UKRAINE" -"3240256512","3240257535","DE","DEU","GERMANY" -"3240257536","3240258559","FO","FRO","FAROE ISLANDS" -"3240258560","3240259583","RO","ROM","ROMANIA" -"3240259584","3240260607","PL","POL","POLAND" -"3240260608","3240262655","DE","DEU","GERMANY" -"3240262656","3240263679","RU","RUS","RUSSIAN FEDERATION" -"3240263680","3240264191","UA","UKR","UKRAINE" -"3240264192","3240264703","FR","FRA","FRANCE" -"3240264704","3240265215","TR","TUR","TURKEY" -"3240265728","3240266239","CH","CHE","SWITZERLAND" -"3240266240","3240266751","PL","POL","POLAND" -"3240266752","3240267263","UA","UKR","UKRAINE" -"3240267264","3240267775","CS","SCG","SERBIA AND MONTENEGRO" -"3240267776","3240268287","DE","DEU","GERMANY" -"3240268288","3240269311","GB","GBR","UNITED KINGDOM" -"3240269312","3240269823","NL","NLD","NETHERLANDS" -"3240269824","3240270335","SE","SWE","SWEDEN" -"3240270336","3240270847","UA","UKR","UKRAINE" -"3240270848","3240271359","RO","ROM","ROMANIA" -"3240271360","3240271871","PL","POL","POLAND" -"3240271872","3240272383","RU","RUS","RUSSIAN FEDERATION" -"3240272384","3240272895","PL","POL","POLAND" -"3240272896","3240273407","RU","RUS","RUSSIAN FEDERATION" -"3240273408","3240273919","NL","NLD","NETHERLANDS" -"3240273920","3240274431","UA","UKR","UKRAINE" -"3240274432","3240274943","GB","GBR","UNITED KINGDOM" -"3240274944","3240275455","UA","UKR","UKRAINE" -"3240275456","3240275967","RO","ROM","ROMANIA" -"3240275968","3240276479","GR","GRC","GREECE" -"3240276480","3240276991","PL","POL","POLAND" -"3240276992","3240278015","RO","ROM","ROMANIA" -"3240278016","3240278527","RU","RUS","RUSSIAN FEDERATION" -"3240278528","3240279039","GB","GBR","UNITED KINGDOM" -"3240279040","3240279551","CH","CHE","SWITZERLAND" -"3240279552","3240280063","RO","ROM","ROMANIA" -"3240280064","3240280191","DE","DEU","GERMANY" -"3240280320","3240280447","PL","POL","POLAND" -"3240280448","3240280575","UA","UKR","UKRAINE" -"3240280576","3240280703","GB","GBR","UNITED KINGDOM" -"3240280704","3240280831","RU","RUS","RUSSIAN FEDERATION" -"3240280832","3240280959","GB","GBR","UNITED KINGDOM" -"3240280960","3240281215","PL","POL","POLAND" -"3240281216","3240281343","FR","FRA","FRANCE" -"3240281344","3240281471","PL","POL","POLAND" -"3240281472","3240281599","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3240281728","3240281855","PL","POL","POLAND" -"3240282112","3240282239","DE","DEU","GERMANY" -"3240282240","3240282367","UA","UKR","UKRAINE" -"3240282368","3240282495","RO","ROM","ROMANIA" -"3240288256","3240296447","GB","GBR","UNITED KINGDOM" -"3240296448","3240296703","RO","ROM","ROMANIA" -"3240296704","3240302847","GB","GBR","UNITED KINGDOM" -"3240302848","3240303103","UA","UKR","UKRAINE" -"3240303104","3240321023","GB","GBR","UNITED KINGDOM" -"3240325120","3240361983","GB","GBR","UNITED KINGDOM" -"3240361984","3240362239","TR","TUR","TURKEY" -"3240362496","3240370175","GB","GBR","UNITED KINGDOM" -"3240370176","3240370431","CH","CHE","SWITZERLAND" -"3240370432","3240370687","DE","DEU","GERMANY" -"3240370688","3240370943","GB","GBR","UNITED KINGDOM" -"3240370944","3240371199","RU","RUS","RUSSIAN FEDERATION" -"3240371200","3240371455","CH","CHE","SWITZERLAND" -"3240371456","3240371711","RO","ROM","ROMANIA" -"3240371712","3240371967","RU","RUS","RUSSIAN FEDERATION" -"3240371968","3240372223","TR","TUR","TURKEY" -"3240372224","3240372479","SI","SVN","SLOVENIA" -"3240372480","3240372991","RU","RUS","RUSSIAN FEDERATION" -"3240372992","3240373247","IE","IRL","IRELAND" -"3240373248","3240373503","RO","ROM","ROMANIA" -"3240373504","3240373759","FR","FRA","FRANCE" -"3240373760","3240374015","DE","DEU","GERMANY" -"3240374016","3240407039","GB","GBR","UNITED KINGDOM" -"3240407040","3240407295","IL","ISR","ISRAEL" -"3240407296","3240407551","NL","NLD","NETHERLANDS" -"3240407552","3240407807","NO","NOR","NORWAY" -"3240407808","3240408063","NL","NLD","NETHERLANDS" -"3240408064","3240408319","DE","DEU","GERMANY" -"3240408320","3240408575","CH","CHE","SWITZERLAND" -"3240408576","3240408831","FR","FRA","FRANCE" -"3240408832","3240409087","PL","POL","POLAND" -"3240409088","3240409343","TR","TUR","TURKEY" -"3240409344","3240409599","GB","GBR","UNITED KINGDOM" -"3240409600","3240409855","NL","NLD","NETHERLANDS" -"3240409856","3240410111","DE","DEU","GERMANY" -"3240410112","3240410367","CH","CHE","SWITZERLAND" -"3240410368","3240410623","AT","AUT","AUSTRIA" -"3240410624","3240410879","PT","PRT","PORTUGAL" -"3240410880","3240411135","NO","NOR","NORWAY" -"3240411136","3240419839","GB","GBR","UNITED KINGDOM" -"3240419840","3240420095","AT","AUT","AUSTRIA" -"3240420096","3240420351","DE","DEU","GERMANY" -"3240420352","3240420607","RO","ROM","ROMANIA" -"3240420608","3240420863","NL","NLD","NETHERLANDS" -"3240420864","3240460287","GB","GBR","UNITED KINGDOM" -"3240460288","3240461055","IL","ISR","ISRAEL" -"3240461056","3240461567","DE","DEU","GERMANY" -"3240461568","3240461823","UA","UKR","UKRAINE" -"3240462080","3240462335","TR","TUR","TURKEY" -"3240462336","3240462591","RO","ROM","ROMANIA" -"3240462592","3240462847","RU","RUS","RUSSIAN FEDERATION" -"3240462848","3240463103","RO","ROM","ROMANIA" -"3240463104","3240463615","PL","POL","POLAND" -"3240463616","3240463871","UA","UKR","UKRAINE" -"3240463872","3240464127","GB","GBR","UNITED KINGDOM" -"3240464128","3240464383","SA","SAU","SAUDI ARABIA" -"3240464384","3240464639","AT","AUT","AUSTRIA" -"3240464640","3240464895","FR","FRA","FRANCE" -"3240464896","3240465151","GB","GBR","UNITED KINGDOM" -"3240465152","3240465407","CH","CHE","SWITZERLAND" -"3240465408","3240465919","DE","DEU","GERMANY" -"3240465920","3240466175","FR","FRA","FRANCE" -"3240466176","3240466687","DE","DEU","GERMANY" -"3240466688","3240466943","PT","PRT","PORTUGAL" -"3240466944","3240467199","TR","TUR","TURKEY" -"3240467200","3240467455","NL","NLD","NETHERLANDS" -"3240467456","3240467711","UA","UKR","UKRAINE" -"3240467712","3240467967","RU","RUS","RUSSIAN FEDERATION" -"3240467968","3240468223","GB","GBR","UNITED KINGDOM" -"3240468224","3240468479","CH","CHE","SWITZERLAND" -"3240468480","3240487935","GB","GBR","UNITED KINGDOM" -"3240487936","3240488191","CH","CHE","SWITZERLAND" -"3240488192","3240488447","GB","GBR","UNITED KINGDOM" -"3240488448","3240488703","BG","BGR","BULGARIA" -"3240488704","3240488959","NL","NLD","NETHERLANDS" -"3240488960","3240575487","GB","GBR","UNITED KINGDOM" -"3240575488","3240575743","RO","ROM","ROMANIA" -"3240575744","3240575999","GB","GBR","UNITED KINGDOM" -"3240576000","3240576255","DE","DEU","GERMANY" -"3240576256","3240576511","UA","UKR","UKRAINE" -"3240576512","3240576767","FR","FRA","FRANCE" -"3240576768","3240577023","PL","POL","POLAND" -"3240577024","3240577279","UA","UKR","UKRAINE" -"3240577280","3240577535","RO","ROM","ROMANIA" -"3240577536","3240577791","DE","DEU","GERMANY" -"3240577792","3240578559","UA","UKR","UKRAINE" -"3240578816","3240579071","IL","ISR","ISRAEL" -"3240579072","3240587263","GB","GBR","UNITED KINGDOM" -"3240587264","3240587519","NL","NLD","NETHERLANDS" -"3240587520","3240587775","RU","RUS","RUSSIAN FEDERATION" -"3240587776","3240588031","UA","UKR","UKRAINE" -"3240588032","3240588287","DE","DEU","GERMANY" -"3240588288","3240588543","RU","RUS","RUSSIAN FEDERATION" -"3240588544","3240588799","RO","ROM","ROMANIA" -"3240588800","3240589055","UA","UKR","UKRAINE" -"3240589056","3240589311","RO","ROM","ROMANIA" -"3240589312","3240593407","SE","SWE","SWEDEN" -"3240593408","3240594175","GB","GBR","UNITED KINGDOM" -"3240594176","3240594431","DK","DNK","DENMARK" -"3240594432","3240609791","GB","GBR","UNITED KINGDOM" -"3240609792","3240611839","DE","DEU","GERMANY" -"3240611840","3240622079","GB","GBR","UNITED KINGDOM" -"3240622080","3240622591","RU","RUS","RUSSIAN FEDERATION" -"3240622592","3240624127","GB","GBR","UNITED KINGDOM" -"3240624128","3240689663","EE","EST","ESTONIA" -"3240689664","3240690175","GB","GBR","UNITED KINGDOM" -"3240690176","3240690687","TR","TUR","TURKEY" -"3240690688","3240691199","UA","UKR","UKRAINE" -"3240691200","3240691711","IT","ITA","ITALY" -"3240691712","3240692735","DE","DEU","GERMANY" -"3240692736","3240693247","DK","DNK","DENMARK" -"3240693248","3240693759","ES","ESP","SPAIN" -"3240693760","3240695807","BE","BEL","BELGIUM" -"3240695808","3240697855","ES","ESP","SPAIN" -"3240697856","3240698111","SE","SWE","SWEDEN" -"3240698112","3240698367","LV","LVA","LATVIA" -"3240698368","3240698623","GB","GBR","UNITED KINGDOM" -"3240698624","3240699135","SI","SVN","SLOVENIA" -"3240699136","3240699391","DE","DEU","GERMANY" -"3240699392","3240699647","UA","UKR","UKRAINE" -"3240699648","3240699903","NO","NOR","NORWAY" -"3240699904","3240700159","LT","LTU","LITHUANIA" -"3240700160","3240700415","AT","AUT","AUSTRIA" -"3240700416","3240700671","BE","BEL","BELGIUM" -"3240700672","3240700927","ES","ESP","SPAIN" -"3240700928","3240701183","FR","FRA","FRANCE" -"3240701184","3240701439","LV","LVA","LATVIA" -"3240701440","3240701695","ES","ESP","SPAIN" -"3240701696","3240701951","FR","FRA","FRANCE" -"3240701952","3240702975","UA","UKR","UKRAINE" -"3240702976","3240703999","DE","DEU","GERMANY" -"3240704000","3240705023","GR","GRC","GREECE" -"3240705024","3240706047","UA","UKR","UKRAINE" -"3240706048","3240707071","BG","BGR","BULGARIA" -"3240707072","3240707839","NL","NLD","NETHERLANDS" -"3240707840","3240709119","FR","FRA","FRANCE" -"3240709120","3240710143","IT","ITA","ITALY" -"3240710144","3240710399","UA","UKR","UKRAINE" -"3240710400","3240710655","LT","LTU","LITHUANIA" -"3240710656","3240710911","DE","DEU","GERMANY" -"3240710912","3240711167","FR","FRA","FRANCE" -"3240711168","3240711679","IT","ITA","ITALY" -"3240711680","3240711935","RU","RUS","RUSSIAN FEDERATION" -"3240711936","3240712191","DE","DEU","GERMANY" -"3240712192","3240712447","UA","UKR","UKRAINE" -"3240712448","3240712703","SI","SVN","SLOVENIA" -"3240712704","3240712959","CH","CHE","SWITZERLAND" -"3240712960","3240713215","IT","ITA","ITALY" -"3240713216","3240713471","GB","GBR","UNITED KINGDOM" -"3240713472","3240713727","DE","DEU","GERMANY" -"3240713728","3240713983","AT","AUT","AUSTRIA" -"3240713984","3240714239","FR","FRA","FRANCE" -"3240714240","3240716287","GB","GBR","UNITED KINGDOM" -"3240716288","3240718335","CH","CHE","SWITZERLAND" -"3240718336","3240718847","PL","POL","POLAND" -"3240718848","3240719359","PT","PRT","PORTUGAL" -"3240719360","3240719871","DE","DEU","GERMANY" -"3240719872","3240720383","SE","SWE","SWEDEN" -"3240720384","3240720895","DE","DEU","GERMANY" -"3240720896","3240721407","RO","ROM","ROMANIA" -"3240721408","3240721919","DE","DEU","GERMANY" -"3240721920","3240722431","RO","ROM","ROMANIA" -"3240722432","3240723455","UA","UKR","UKRAINE" -"3240723456","3240724479","DE","DEU","GERMANY" -"3240724480","3240724991","CH","CHE","SWITZERLAND" -"3240724992","3240725503","AT","AUT","AUSTRIA" -"3240725504","3240726527","RU","RUS","RUSSIAN FEDERATION" -"3240726528","3240727039","DE","DEU","GERMANY" -"3240727552","3240728063","CH","CHE","SWITZERLAND" -"3240728064","3240728575","GR","GRC","GREECE" -"3240728576","3240729599","GB","GBR","UNITED KINGDOM" -"3240729600","3240730111","DK","DNK","DENMARK" -"3240730112","3240730623","BE","BEL","BELGIUM" -"3240731648","3240732671","GB","GBR","UNITED KINGDOM" -"3240732672","3240733695","SE","SWE","SWEDEN" -"3240733696","3240734719","UA","UKR","UKRAINE" -"3240734720","3240735743","IT","ITA","ITALY" -"3240735744","3240736255","FR","FRA","FRANCE" -"3240736256","3240736767","BG","BGR","BULGARIA" -"3240736768","3240737791","UA","UKR","UKRAINE" -"3240737792","3240738815","BG","BGR","BULGARIA" -"3240738816","3240739071","UA","UKR","UKRAINE" -"3240739072","3240739327","CH","CHE","SWITZERLAND" -"3240739328","3240739583","FR","FRA","FRANCE" -"3240739584","3240739839","LV","LVA","LATVIA" -"3240739840","3240740095","US","USA","UNITED STATES" -"3240740096","3240740351","LT","LTU","LITHUANIA" -"3240740352","3240740607","IT","ITA","ITALY" -"3240740608","3240741119","DE","DEU","GERMANY" -"3240741120","3240741375","AT","AUT","AUSTRIA" -"3240741376","3240741631","IL","ISR","ISRAEL" -"3240741888","3240742143","LV","LVA","LATVIA" -"3240742144","3240742399","IT","ITA","ITALY" -"3240742656","3240742911","AT","AUT","AUSTRIA" -"3240742912","3240743423","IL","ISR","ISRAEL" -"3240743424","3240743935","DK","DNK","DENMARK" -"3240743936","3240744447","DE","DEU","GERMANY" -"3240744448","3240744959","SE","SWE","SWEDEN" -"3240744960","3240745471","RO","ROM","ROMANIA" -"3240745472","3240745983","UA","UKR","UKRAINE" -"3240745984","3240746495","GB","GBR","UNITED KINGDOM" -"3240746496","3240747007","FR","FRA","FRANCE" -"3240747008","3240747263","SE","SWE","SWEDEN" -"3240747520","3240747775","RU","RUS","RUSSIAN FEDERATION" -"3240747776","3240748031","ES","ESP","SPAIN" -"3240748032","3240748287","AT","AUT","AUSTRIA" -"3240748288","3240748543","GR","GRC","GREECE" -"3240748544","3240749055","PL","POL","POLAND" -"3240749056","3240749311","AT","AUT","AUSTRIA" -"3240749312","3240749567","BE","BEL","BELGIUM" -"3240749568","3240749823","ES","ESP","SPAIN" -"3240749824","3240750335","IT","ITA","ITALY" -"3240750336","3240750591","LU","LUX","LUXEMBOURG" -"3240750592","3240750847","FR","FRA","FRANCE" -"3240750848","3240751103","UA","UKR","UKRAINE" -"3240751104","3240752127","ES","ESP","SPAIN" -"3240752128","3240754175","RO","ROM","ROMANIA" -"3240754176","3240755199","DE","DEU","GERMANY" -"3240755200","3240755455","IE","IRL","IRELAND" -"3240755456","3240791551","IT","ITA","ITALY" -"3240791552","3240791807","RU","RUS","RUSSIAN FEDERATION" -"3240791808","3240792063","ES","ESP","SPAIN" -"3240792064","3240792319","GB","GBR","UNITED KINGDOM" -"3240792320","3240792575","RO","ROM","ROMANIA" -"3240792576","3240792831","CH","CHE","SWITZERLAND" -"3240792832","3240793087","PL","POL","POLAND" -"3240793088","3240793343","UA","UKR","UKRAINE" -"3240793344","3240793599","RU","RUS","RUSSIAN FEDERATION" -"3240793600","3240794111","FR","FRA","FRANCE" -"3240794112","3240794367","GB","GBR","UNITED KINGDOM" -"3240794368","3240794879","PL","POL","POLAND" -"3240794880","3240795135","DE","DEU","GERMANY" -"3240795136","3240795391","BG","BGR","BULGARIA" -"3240795392","3240795647","UA","UKR","UKRAINE" -"3240795648","3240795903","CH","CHE","SWITZERLAND" -"3240795904","3240796159","SE","SWE","SWEDEN" -"3240796160","3240808959","IT","ITA","ITALY" -"3240808960","3240809215","GB","GBR","UNITED KINGDOM" -"3240809216","3240809471","PL","POL","POLAND" -"3240809472","3240809727","NL","NLD","NETHERLANDS" -"3240809728","3240809983","FR","FRA","FRANCE" -"3240809984","3240810239","GR","GRC","GREECE" -"3240810240","3240810495","SA","SAU","SAUDI ARABIA" -"3240810496","3240810751","TR","TUR","TURKEY" -"3240810752","3240811007","GB","GBR","UNITED KINGDOM" -"3240811008","3240811263","PL","POL","POLAND" -"3240811264","3240811519","FR","FRA","FRANCE" -"3240811520","3240811775","SA","SAU","SAUDI ARABIA" -"3240811776","3240812031","DE","DEU","GERMANY" -"3240812032","3240812287","HU","HUN","HUNGARY" -"3240812288","3240812543","KW","KWT","KUWAIT" -"3240813568","3240814591","PL","POL","POLAND" -"3240814592","3240818687","IT","ITA","ITALY" -"3240818688","3240820735","NL","NLD","NETHERLANDS" -"3240820800","3240820831","RU","RUS","RUSSIAN FEDERATION" -"3240820832","3240822783","IT","ITA","ITALY" -"3240824320","3240827135","IT","ITA","ITALY" -"3240827136","3240827391","FR","FRA","FRANCE" -"3240827392","3240827647","BG","BGR","BULGARIA" -"3240827648","3240827903","CH","CHE","SWITZERLAND" -"3240827904","3240828159","IT","ITA","ITALY" -"3240828160","3240828415","DE","DEU","GERMANY" -"3240828416","3240837119","IT","ITA","ITALY" -"3240837120","3240837375","GB","GBR","UNITED KINGDOM" -"3240837632","3240840447","IT","ITA","ITALY" -"3240840448","3240840703","PL","POL","POLAND" -"3240840960","3240841215","GB","GBR","UNITED KINGDOM" -"3240841216","3240843263","IT","ITA","ITALY" -"3240843264","3240843775","NL","NLD","NETHERLANDS" -"3240843776","3240844031","PL","POL","POLAND" -"3240844032","3240844543","NL","NLD","NETHERLANDS" -"3240844544","3240844799","CH","CHE","SWITZERLAND" -"3240844800","3240845055","GB","GBR","UNITED KINGDOM" -"3240845056","3240845311","UA","UKR","UKRAINE" -"3240845312","3240846847","IT","ITA","ITALY" -"3240846848","3240847359","VA","VAT","HOLY SEE (VATICAN CITY STATE)" -"3240847360","3240852735","IT","ITA","ITALY" -"3240852736","3240852991","GB","GBR","UNITED KINGDOM" -"3240852992","3240853247","IT","ITA","ITALY" -"3240853248","3240853503","RU","RUS","RUSSIAN FEDERATION" -"3240853504","3240854527","VA","VAT","HOLY SEE (VATICAN CITY STATE)" -"3240854528","3240855039","IT","ITA","ITALY" -"3240855296","3240857599","IT","ITA","ITALY" -"3240857600","3240857855","PL","POL","POLAND" -"3240857856","3240858623","IT","ITA","ITALY" -"3240858624","3240858879","UA","UKR","UKRAINE" -"3240858880","3240859135","IT","ITA","ITALY" -"3240859136","3240859391","NL","NLD","NETHERLANDS" -"3240859392","3240859647","SE","SWE","SWEDEN" -"3240859648","3240861183","CH","CHE","SWITZERLAND" -"3240861184","3240861695","AT","AUT","AUSTRIA" -"3240861696","3240866815","IT","ITA","ITALY" -"3240866816","3240867071","GB","GBR","UNITED KINGDOM" -"3240867072","3240867327","PL","POL","POLAND" -"3240867328","3240867583","RU","RUS","RUSSIAN FEDERATION" -"3240867584","3240867839","CH","CHE","SWITZERLAND" -"3240867840","3240873983","IT","ITA","ITALY" -"3240873984","3240874495","RU","RUS","RUSSIAN FEDERATION" -"3240874496","3240875007","FR","FRA","FRANCE" -"3240875008","3240875519","AT","AUT","AUSTRIA" -"3240875520","3240876031","FR","FRA","FRANCE" -"3240876032","3240876543","DK","DNK","DENMARK" -"3240876544","3240877055","GR","GRC","GREECE" -"3240877056","3240877567","DE","DEU","GERMANY" -"3240877568","3240879103","UA","UKR","UKRAINE" -"3240879104","3240880127","PL","POL","POLAND" -"3240880128","3240881151","RU","RUS","RUSSIAN FEDERATION" -"3240882176","3240883199","PL","POL","POLAND" -"3240883200","3240884223","IL","ISR","ISRAEL" -"3240884224","3240886271","UA","UKR","UKRAINE" -"3240886272","3240952071","SE","SWE","SWEDEN" -"3240952072","3240952079","IE","IRL","IRELAND" -"3240952080","3240952087","GB","GBR","UNITED KINGDOM" -"3240952088","3240952095","SE","SWE","SWEDEN" -"3240952096","3240952127","US","USA","UNITED STATES" -"3240952128","3240953471","SE","SWE","SWEDEN" -"3240953472","3240953599","DE","DEU","GERMANY" -"3240953600","3240954495","SE","SWE","SWEDEN" -"3240954496","3240954623","DE","DEU","GERMANY" -"3240954624","3240955647","SE","SWE","SWEDEN" -"3240955648","3240955903","GB","GBR","UNITED KINGDOM" -"3240955904","3240961791","SE","SWE","SWEDEN" -"3240961792","3240961799","FI","FIN","FINLAND" -"3240961800","3240968191","SE","SWE","SWEDEN" -"3240968192","3240968447","DE","DEU","GERMANY" -"3240968448","3240968703","SE","SWE","SWEDEN" -"3240968704","3240968959","GB","GBR","UNITED KINGDOM" -"3240968960","3240969215","SE","SWE","SWEDEN" -"3240969216","3240969231","GB","GBR","UNITED KINGDOM" -"3240969232","3240988159","SE","SWE","SWEDEN" -"3240988160","3240988167","PL","POL","POLAND" -"3240988168","3241017343","SE","SWE","SWEDEN" -"3241017344","3241017855","AT","AUT","AUSTRIA" -"3241017856","3241018111","DE","DEU","GERMANY" -"3241018112","3241029119","AT","AUT","AUSTRIA" -"3241029120","3241029375","UA","UKR","UKRAINE" -"3241029376","3241029631","PL","POL","POLAND" -"3241029632","3241032703","AT","AUT","AUSTRIA" -"3241032704","3241032959","RU","RUS","RUSSIAN FEDERATION" -"3241032960","3241033215","GB","GBR","UNITED KINGDOM" -"3241033216","3241033727","DE","DEU","GERMANY" -"3241033728","3241033983","IL","ISR","ISRAEL" -"3241033984","3241034239","RU","RUS","RUSSIAN FEDERATION" -"3241034240","3241034495","UA","UKR","UKRAINE" -"3241034496","3241034751","DE","DEU","GERMANY" -"3241034752","3241035007","PL","POL","POLAND" -"3241035008","3241035263","DK","DNK","DENMARK" -"3241035264","3241035519","RO","ROM","ROMANIA" -"3241035520","3241035775","SI","SVN","SLOVENIA" -"3241035776","3241036031","GB","GBR","UNITED KINGDOM" -"3241036032","3241036287","CH","CHE","SWITZERLAND" -"3241036288","3241036543","RU","RUS","RUSSIAN FEDERATION" -"3241036544","3241036799","SI","SVN","SLOVENIA" -"3241036800","3241037055","GB","GBR","UNITED KINGDOM" -"3241037056","3241037311","RU","RUS","RUSSIAN FEDERATION" -"3241037312","3241037567","BE","BEL","BELGIUM" -"3241037568","3241037823","DK","DNK","DENMARK" -"3241037824","3241038079","NL","NLD","NETHERLANDS" -"3241038080","3241038335","UA","UKR","UKRAINE" -"3241038336","3241038591","DE","DEU","GERMANY" -"3241038592","3241039103","LT","LTU","LITHUANIA" -"3241039104","3241039359","FR","FRA","FRANCE" -"3241039360","3241039615","UA","UKR","UKRAINE" -"3241039616","3241039871","GB","GBR","UNITED KINGDOM" -"3241039872","3241040127","CH","CHE","SWITZERLAND" -"3241040128","3241040383","UA","UKR","UKRAINE" -"3241040384","3241040639","GB","GBR","UNITED KINGDOM" -"3241040640","3241040895","RO","ROM","ROMANIA" -"3241040896","3241063423","AT","AUT","AUSTRIA" -"3241063424","3241063679","IT","ITA","ITALY" -"3241063680","3241063935","PL","POL","POLAND" -"3241063936","3241064191","DE","DEU","GERMANY" -"3241064192","3241064447","GB","GBR","UNITED KINGDOM" -"3241064448","3241064703","DE","DEU","GERMANY" -"3241064704","3241065471","PL","POL","POLAND" -"3241065472","3241068543","AT","AUT","AUSTRIA" -"3241068544","3241068799","GB","GBR","UNITED KINGDOM" -"3241068800","3241069055","UA","UKR","UKRAINE" -"3241069312","3241069567","FR","FRA","FRANCE" -"3241069568","3241070079","GB","GBR","UNITED KINGDOM" -"3241070080","3241070335","FR","FRA","FRANCE" -"3241070336","3241070847","RU","RUS","RUSSIAN FEDERATION" -"3241070848","3241071103","AT","AUT","AUSTRIA" -"3241071104","3241071359","UA","UKR","UKRAINE" -"3241071360","3241071615","RU","RUS","RUSSIAN FEDERATION" -"3241071616","3241071871","MD","MDA","REPUBLIC OF MOLDOVA" -"3241071872","3241072127","RU","RUS","RUSSIAN FEDERATION" -"3241072128","3241072383","BE","BEL","BELGIUM" -"3241072384","3241072639","DE","DEU","GERMANY" -"3241072640","3241073919","AT","AUT","AUSTRIA" -"3241073920","3241074175","GB","GBR","UNITED KINGDOM" -"3241074176","3241076735","AT","AUT","AUSTRIA" -"3241076736","3241076991","GR","GRC","GREECE" -"3241076992","3241077759","AT","AUT","AUSTRIA" -"3241077760","3241078015","LV","LVA","LATVIA" -"3241078016","3241078271","PL","POL","POLAND" -"3241078272","3241078527","ES","ESP","SPAIN" -"3241078528","3241078783","DE","DEU","GERMANY" -"3241078784","3241082879","AT","AUT","AUSTRIA" -"3241082880","3241083135","FR","FRA","FRANCE" -"3241083136","3241100031","CH","CHE","SWITZERLAND" -"3241100800","3241101055","UA","UKR","UKRAINE" -"3241101056","3241101311","DK","DNK","DENMARK" -"3241101312","3241101567","RO","ROM","ROMANIA" -"3241101568","3241101823","DE","DEU","GERMANY" -"3241101824","3241102079","BG","BGR","BULGARIA" -"3241102080","3241102335","RO","ROM","ROMANIA" -"3241102336","3241102591","ES","ESP","SPAIN" -"3241102592","3241102847","DE","DEU","GERMANY" -"3241102848","3241103359","NL","NLD","NETHERLANDS" -"3241103360","3241103615","FR","FRA","FRANCE" -"3241103616","3241103871","DK","DNK","DENMARK" -"3241103872","3241104127","DE","DEU","GERMANY" -"3241104128","3241104383","GB","GBR","UNITED KINGDOM" -"3241104384","3241104639","ES","ESP","SPAIN" -"3241104640","3241104895","UA","UKR","UKRAINE" -"3241104896","3241105151","ES","ESP","SPAIN" -"3241105152","3241105407","RU","RUS","RUSSIAN FEDERATION" -"3241105408","3241108223","CH","CHE","SWITZERLAND" -"3241108224","3241108735","DE","DEU","GERMANY" -"3241108736","3241108991","RO","ROM","ROMANIA" -"3241108992","3241109247","SA","SAU","SAUDI ARABIA" -"3241109248","3241117695","CH","CHE","SWITZERLAND" -"3241117696","3241117951","SI","SVN","SLOVENIA" -"3241117952","3241118207","UA","UKR","UKRAINE" -"3241118208","3241118463","AT","AUT","AUSTRIA" -"3241118464","3241118719","FR","FRA","FRANCE" -"3241118720","3241118975","CH","CHE","SWITZERLAND" -"3241118976","3241119231","FR","FRA","FRANCE" -"3241119488","3241119743","BE","BEL","BELGIUM" -"3241119744","3241119999","RO","ROM","ROMANIA" -"3241120000","3241120255","UA","UKR","UKRAINE" -"3241120256","3241120511","CZ","CZE","CZECH REPUBLIC" -"3241120512","3241120767","GB","GBR","UNITED KINGDOM" -"3241120768","3241121023","RU","RUS","RUSSIAN FEDERATION" -"3241121024","3241121279","CH","CHE","SWITZERLAND" -"3241121280","3241121535","FR","FRA","FRANCE" -"3241121536","3241121791","PL","POL","POLAND" -"3241121792","3241122047","DE","DEU","GERMANY" -"3241122048","3241122303","CH","CHE","SWITZERLAND" -"3241122304","3241122559","RU","RUS","RUSSIAN FEDERATION" -"3241122560","3241123327","AT","AUT","AUSTRIA" -"3241123328","3241124095","PL","POL","POLAND" -"3241124096","3241124351","DE","DEU","GERMANY" -"3241124352","3241124607","RO","ROM","ROMANIA" -"3241124608","3241124863","PL","POL","POLAND" -"3241124864","3241125119","ES","ESP","SPAIN" -"3241125120","3241125375","IL","ISR","ISRAEL" -"3241125376","3241125631","UA","UKR","UKRAINE" -"3241125632","3241125887","SE","SWE","SWEDEN" -"3241125888","3241129983","CH","CHE","SWITZERLAND" -"3241129984","3241130239","FR","FRA","FRANCE" -"3241130240","3241130495","PT","PRT","PORTUGAL" -"3241130496","3241130751","DK","DNK","DENMARK" -"3241130752","3241131007","DE","DEU","GERMANY" -"3241131008","3241131263","NL","NLD","NETHERLANDS" -"3241131264","3241131519","FR","FRA","FRANCE" -"3241131520","3241131775","CH","CHE","SWITZERLAND" -"3241131776","3241132031","DK","DNK","DENMARK" -"3241132032","3241145855","CH","CHE","SWITZERLAND" -"3241145856","3241146111","HR","HRV","CROATIA" -"3241146112","3241146367","PL","POL","POLAND" -"3241146368","3241146623","IL","ISR","ISRAEL" -"3241146624","3241146879","RO","ROM","ROMANIA" -"3241146880","3241148415","CH","CHE","SWITZERLAND" -"3241148416","3241476095","FR","FRA","FRANCE" -"3241476096","3241476351","CH","CHE","SWITZERLAND" -"3241476352","3241477887","BE","BEL","BELGIUM" -"3241478144","3241481471","BE","BEL","BELGIUM" -"3241481472","3241481727","NL","NLD","NETHERLANDS" -"3241481728","3241481983","PT","PRT","PORTUGAL" -"3241481984","3241482239","DE","DEU","GERMANY" -"3241482240","3241484799","SE","SWE","SWEDEN" -"3241484800","3241485311","BE","BEL","BELGIUM" -"3241485312","3241485567","GB","GBR","UNITED KINGDOM" -"3241485568","3241496575","BE","BEL","BELGIUM" -"3241496576","3241496831","AT","AUT","AUSTRIA" -"3241496832","3241497343","BE","BEL","BELGIUM" -"3241497344","3241497599","UA","UKR","UKRAINE" -"3241497600","3241497855","SE","SWE","SWEDEN" -"3241497856","3241498111","DK","DNK","DENMARK" -"3241498112","3241498367","BE","BEL","BELGIUM" -"3241498368","3241498623","RO","ROM","ROMANIA" -"3241498624","3241498879","NO","NOR","NORWAY" -"3241498880","3241499135","UA","UKR","UKRAINE" -"3241499136","3241499903","BE","BEL","BELGIUM" -"3241499904","3241500159","DE","DEU","GERMANY" -"3241500160","3241500671","GB","GBR","UNITED KINGDOM" -"3241500672","3241502975","BE","BEL","BELGIUM" -"3241502976","3241503231","GR","GRC","GREECE" -"3241503232","3241503487","FR","FRA","FRANCE" -"3241503488","3241508095","BE","BEL","BELGIUM" -"3241508096","3241508351","NL","NLD","NETHERLANDS" -"3241508352","3241538815","BE","BEL","BELGIUM" -"3241539072","3241541375","BE","BEL","BELGIUM" -"3241541376","3241541631","PL","POL","POLAND" -"3241541632","3241673215","FR","FRA","FRANCE" -"3241673472","3241674751","FR","FRA","FRANCE" -"3241675008","3241681407","FR","FRA","FRANCE" -"3241681664","3241683199","FR","FRA","FRANCE" -"3241683456","3241702399","FR","FRA","FRANCE" -"3241702912","3241704447","FR","FRA","FRANCE" -"3241704704","3241714687","FR","FRA","FRANCE" -"3241715200","3241724927","FR","FRA","FRANCE" -"3241725952","3241726975","FR","FRA","FRANCE" -"3241728000","3241741311","FR","FRA","FRANCE" -"3241741568","3241760767","FR","FRA","FRANCE" -"3241761024","3241780223","FR","FRA","FRANCE" -"3241780736","3241780991","FR","FRA","FRANCE" -"3241781248","3241782527","FR","FRA","FRANCE" -"3241783296","3241784319","FR","FRA","FRANCE" -"3241784576","3241800191","FR","FRA","FRANCE" -"3241800448","3241803775","FR","FRA","FRANCE" -"3241803776","3241803791","GB","GBR","UNITED KINGDOM" -"3241803800","3241803815","GB","GBR","UNITED KINGDOM" -"3241803816","3241803823","RU","RUS","RUSSIAN FEDERATION" -"3241803832","3241803839","GB","GBR","UNITED KINGDOM" -"3241803840","3241803903","PT","PRT","PORTUGAL" -"3241804032","3241820159","BE","BEL","BELGIUM" -"3241820160","3241821695","GB","GBR","UNITED KINGDOM" -"3241821696","3241822207","GR","GRC","GREECE" -"3241822208","3241824255","CZ","CZE","CZECH REPUBLIC" -"3241824256","3241827071","BE","BEL","BELGIUM" -"3241827328","3241843455","BE","BEL","BELGIUM" -"3241843456","3241843711","CH","CHE","SWITZERLAND" -"3241843712","3241848063","BE","BEL","BELGIUM" -"3241848064","3241851391","CH","CHE","SWITZERLAND" -"3241851392","3241851903","GR","GRC","GREECE" -"3241851904","3241852927","GB","GBR","UNITED KINGDOM" -"3241852928","3241854463","SK","SVK","SLOVAKIA" -"3241854464","3241854975","GB","GBR","UNITED KINGDOM" -"3241854976","3241855999","DE","DEU","GERMANY" -"3241856000","3241857279","NL","NLD","NETHERLANDS" -"3241857280","3241857535","CH","CHE","SWITZERLAND" -"3241857536","3241859071","AT","AUT","AUSTRIA" -"3241859072","3241861119","US","USA","UNITED STATES" -"3241861120","3241863167","BE","BEL","BELGIUM" -"3241863168","3241863423","PL","POL","POLAND" -"3241863424","3241863679","FR","FRA","FRANCE" -"3241863680","3241863935","GR","GRC","GREECE" -"3241863936","3241864191","GB","GBR","UNITED KINGDOM" -"3241864192","3241864447","TR","TUR","TURKEY" -"3241864448","3241864703","RU","RUS","RUSSIAN FEDERATION" -"3241864704","3241864959","SE","SWE","SWEDEN" -"3241864960","3241865215","IT","ITA","ITALY" -"3241865216","3241865471","DE","DEU","GERMANY" -"3241865472","3241865727","NO","NOR","NORWAY" -"3241865728","3241865983","CH","CHE","SWITZERLAND" -"3241865984","3241866239","RO","ROM","ROMANIA" -"3241866240","3241866751","DE","DEU","GERMANY" -"3241866752","3241867007","GB","GBR","UNITED KINGDOM" -"3241867008","3241867263","FR","FRA","FRANCE" -"3241867264","3241867519","UA","UKR","UKRAINE" -"3241867520","3241867775","PL","POL","POLAND" -"3241867776","3241868031","CH","CHE","SWITZERLAND" -"3241868288","3241868543","HR","HRV","CROATIA" -"3241868544","3241868799","DE","DEU","GERMANY" -"3241868800","3241869055","UA","UKR","UKRAINE" -"3241869312","3241934847","PL","POL","POLAND" -"3241934848","3242196991","GB","GBR","UNITED KINGDOM" -"3242196992","3242393599","FI","FIN","FINLAND" -"3242393600","3242459135","NL","NLD","NETHERLANDS" -"3242459136","3242467327","BG","BGR","BULGARIA" -"3242467328","3242475519","HU","HUN","HUNGARY" -"3242475520","3242483711","LV","LVA","LATVIA" -"3242483712","3242524671","BG","BGR","BULGARIA" -"3242524672","3242590207","NO","NOR","NORWAY" -"3242590208","3242655743","IT","ITA","ITALY" -"3242655744","3242721279","NO","NOR","NORWAY" -"3242721280","3242852351","CH","CHE","SWITZERLAND" -"3242852352","3242911231","BE","BEL","BELGIUM" -"3242911232","3242911743","NL","NLD","NETHERLANDS" -"3242911744","3242917887","BE","BEL","BELGIUM" -"3242917888","3242950655","NO","NOR","NORWAY" -"3242950656","3242983423","BE","BEL","BELGIUM" -"3242983424","3243048959","IT","ITA","ITALY" -"3243048960","3243114495","SI","SVN","SLOVENIA" -"3243114496","3243150847","NL","NLD","NETHERLANDS" -"3243150848","3243151103","IT","ITA","ITALY" -"3243151104","3243216823","NL","NLD","NETHERLANDS" -"3243216824","3243216831","GB","GBR","UNITED KINGDOM" -"3243216832","3243223615","NL","NLD","NETHERLANDS" -"3243223616","3243223623","NO","NOR","NORWAY" -"3243223624","3243223695","NL","NLD","NETHERLANDS" -"3243223696","3243223703","PT","PRT","PORTUGAL" -"3243223704","3243245567","NL","NLD","NETHERLANDS" -"3243245568","3243297791","AT","AUT","AUSTRIA" -"3243297792","3243298047","SI","SVN","SLOVENIA" -"3243298048","3243376639","AT","AUT","AUSTRIA" -"3243376640","3243441919","GB","GBR","UNITED KINGDOM" -"3243441920","3243442175","MT","MLT","MALTA" -"3243442176","3243444167","AT","AUT","AUSTRIA" -"3243444168","3243444183","NL","NLD","NETHERLANDS" -"3243444184","3243507711","AT","AUT","AUSTRIA" -"3243507712","3243507967","GB","GBR","UNITED KINGDOM" -"3243508224","3243508991","CZ","CZE","CZECH REPUBLIC" -"3243509248","3243509759","CZ","CZE","CZECH REPUBLIC" -"3243509760","3243510015","RU","RUS","RUSSIAN FEDERATION" -"3243510016","3243510271","NL","NLD","NETHERLANDS" -"3243510272","3243510527","CZ","CZE","CZECH REPUBLIC" -"3243510784","3243511807","CZ","CZE","CZECH REPUBLIC" -"3243511808","3243512063","GB","GBR","UNITED KINGDOM" -"3243512064","3243512319","UA","UKR","UKRAINE" -"3243512320","3243512575","FR","FRA","FRANCE" -"3243512576","3243512831","UA","UKR","UKRAINE" -"3243512832","3243513087","DE","DEU","GERMANY" -"3243513088","3243513343","GR","GRC","GREECE" -"3243513344","3243513855","UA","UKR","UKRAINE" -"3243513856","3243514111","BE","BEL","BELGIUM" -"3243514112","3243514367","CH","CHE","SWITZERLAND" -"3243514368","3243514623","IE","IRL","IRELAND" -"3243514624","3243514879","DK","DNK","DENMARK" -"3243514880","3243515135","AT","AUT","AUSTRIA" -"3243515136","3243515391","PL","POL","POLAND" -"3243515392","3243515647","DE","DEU","GERMANY" -"3243515648","3243515903","RU","RUS","RUSSIAN FEDERATION" -"3243515904","3243519999","CZ","CZE","CZECH REPUBLIC" -"3243520512","3243520767","UA","UKR","UKRAINE" -"3243520768","3243521023","GB","GBR","UNITED KINGDOM" -"3243521024","3243521279","AT","AUT","AUSTRIA" -"3243521280","3243521535","CZ","CZE","CZECH REPUBLIC" -"3243521536","3243521791","DE","DEU","GERMANY" -"3243521792","3243524095","CZ","CZE","CZECH REPUBLIC" -"3243524096","3243524351","RO","ROM","ROMANIA" -"3243524352","3243524607","AT","AUT","AUSTRIA" -"3243524608","3243524863","DE","DEU","GERMANY" -"3243524864","3243525119","NL","NLD","NETHERLANDS" -"3243525120","3243525375","CZ","CZE","CZECH REPUBLIC" -"3243525376","3243525631","RO","ROM","ROMANIA" -"3243525888","3243526143","PL","POL","POLAND" -"3243526144","3243526399","UA","UKR","UKRAINE" -"3243526400","3243526655","FR","FRA","FRANCE" -"3243526656","3243526911","PL","POL","POLAND" -"3243526912","3243527167","SE","SWE","SWEDEN" -"3243527168","3243527679","UA","UKR","UKRAINE" -"3243527680","3243527935","GB","GBR","UNITED KINGDOM" -"3243527936","3243528191","PL","POL","POLAND" -"3243528192","3243529215","CZ","CZE","CZECH REPUBLIC" -"3243529216","3243529471","BE","BEL","BELGIUM" -"3243529472","3243529727","GB","GBR","UNITED KINGDOM" -"3243529728","3243529983","BG","BGR","BULGARIA" -"3243529984","3243530239","GB","GBR","UNITED KINGDOM" -"3243530240","3243530495","RU","RUS","RUSSIAN FEDERATION" -"3243530496","3243530751","FR","FRA","FRANCE" -"3243530752","3243531007","UA","UKR","UKRAINE" -"3243531008","3243531263","DE","DEU","GERMANY" -"3243531776","3243532031","AT","AUT","AUSTRIA" -"3243532032","3243532287","DE","DEU","GERMANY" -"3243532288","3243533311","CZ","CZE","CZECH REPUBLIC" -"3243534336","3243535359","CZ","CZE","CZECH REPUBLIC" -"3243536384","3243536639","AT","AUT","AUSTRIA" -"3243536640","3243536895","CH","CHE","SWITZERLAND" -"3243536896","3243537151","CZ","CZE","CZECH REPUBLIC" -"3243537152","3243537407","RO","ROM","ROMANIA" -"3243537408","3243540991","CZ","CZE","CZECH REPUBLIC" -"3243542528","3243543551","CZ","CZE","CZECH REPUBLIC" -"3243544064","3243544319","GB","GBR","UNITED KINGDOM" -"3243544320","3243544575","CH","CHE","SWITZERLAND" -"3243544576","3243552767","CZ","CZE","CZECH REPUBLIC" -"3243552768","3243553023","NL","NLD","NETHERLANDS" -"3243553024","3243553279","FR","FRA","FRANCE" -"3243553280","3243553535","DE","DEU","GERMANY" -"3243553536","3243553791","PL","POL","POLAND" -"3243553792","3243554303","DE","DEU","GERMANY" -"3243554304","3243554559","PL","POL","POLAND" -"3243554560","3243554815","MD","MDA","REPUBLIC OF MOLDOVA" -"3243554816","3243555071","LV","LVA","LATVIA" -"3243555072","3243555327","RO","ROM","ROMANIA" -"3243555328","3243555583","CZ","CZE","CZECH REPUBLIC" -"3243555584","3243555839","FR","FRA","FRANCE" -"3243556864","3243565055","CZ","CZE","CZECH REPUBLIC" -"3243565056","3243569151","GB","GBR","UNITED KINGDOM" -"3243570432","3243570687","CZ","CZE","CZECH REPUBLIC" -"3243570688","3243570943","PL","POL","POLAND" -"3243570944","3243571199","CZ","CZE","CZECH REPUBLIC" -"3243571456","3243571711","CZ","CZE","CZECH REPUBLIC" -"3243571712","3243571967","GB","GBR","UNITED KINGDOM" -"3243571968","3243572223","GR","GRC","GREECE" -"3243572224","3243572479","CZ","CZE","CZECH REPUBLIC" -"3243572736","3243572991","CZ","CZE","CZECH REPUBLIC" -"3243572992","3243573247","RU","RUS","RUSSIAN FEDERATION" -"3243573248","3243704319","CZ","CZE","CZECH REPUBLIC" -"3243704320","3243769855","SK","SVK","SLOVAKIA" -"3243769856","3243900927","DK","DNK","DENMARK" -"3243900928","3243966463","NO","NOR","NORWAY" -"3243966464","3243974655","PL","POL","POLAND" -"3243974656","3243978751","LU","LUX","LUXEMBOURG" -"3243978752","3243982847","NL","NLD","NETHERLANDS" -"3243982848","3243991039","HU","HUN","HUNGARY" -"3243991040","3243999231","BE","BEL","BELGIUM" -"3243999232","3244031999","NO","NOR","NORWAY" -"3244032000","3244097535","GR","GRC","GREECE" -"3244097536","3244098559","DE","DEU","GERMANY" -"3244098560","3244099583","GB","GBR","UNITED KINGDOM" -"3244099584","3244100607","FR","FRA","FRANCE" -"3244100608","3244102655","UA","UKR","UKRAINE" -"3244102656","3244103679","CH","CHE","SWITZERLAND" -"3244103680","3244104703","BG","BGR","BULGARIA" -"3244104704","3244105727","DE","DEU","GERMANY" -"3244105728","3244107775","GB","GBR","UNITED KINGDOM" -"3244107776","3244108799","RO","ROM","ROMANIA" -"3244108800","3244109823","GB","GBR","UNITED KINGDOM" -"3244109824","3244111871","UA","UKR","UKRAINE" -"3244111872","3244112895","KZ","KAZ","KAZAKHSTAN" -"3244112896","3244113919","RU","RUS","RUSSIAN FEDERATION" -"3244113920","3244114943","CH","CHE","SWITZERLAND" -"3244114944","3244115967","PL","POL","POLAND" -"3244115968","3244116991","SK","SVK","SLOVAKIA" -"3244116992","3244118015","UA","UKR","UKRAINE" -"3244118016","3244120063","GB","GBR","UNITED KINGDOM" -"3244120064","3244122111","PL","POL","POLAND" -"3244123136","3244124159","UA","UKR","UKRAINE" -"3244124160","3244125183","PL","POL","POLAND" -"3244125184","3244126207","UA","UKR","UKRAINE" -"3244126208","3244127231","BE","BEL","BELGIUM" -"3244127232","3244128255","UA","UKR","UKRAINE" -"3244128256","3244129279","RU","RUS","RUSSIAN FEDERATION" -"3244129280","3244130303","FR","FRA","FRANCE" -"3244130304","3244131327","NO","NOR","NORWAY" -"3244131328","3244133375","FI","FIN","FINLAND" -"3244133376","3244134399","RO","ROM","ROMANIA" -"3244134400","3244135423","PL","POL","POLAND" -"3244135424","3244137471","GB","GBR","UNITED KINGDOM" -"3244137472","3244138495","PL","POL","POLAND" -"3244138496","3244139519","UA","UKR","UKRAINE" -"3244139520","3244140543","GR","GRC","GREECE" -"3244141568","3244142591","NL","NLD","NETHERLANDS" -"3244142592","3244143615","DE","DEU","GERMANY" -"3244143616","3244144639","FR","FRA","FRANCE" -"3244144640","3244146687","UA","UKR","UKRAINE" -"3244147712","3244149759","GB","GBR","UNITED KINGDOM" -"3244149760","3244150783","PL","POL","POLAND" -"3244150784","3244151807","CH","CHE","SWITZERLAND" -"3244151808","3244152831","KZ","KAZ","KAZAKHSTAN" -"3244152832","3244153855","UA","UKR","UKRAINE" -"3244153856","3244154879","NO","NOR","NORWAY" -"3244154880","3244155903","GB","GBR","UNITED KINGDOM" -"3244155904","3244156927","UA","UKR","UKRAINE" -"3244156928","3244158975","RU","RUS","RUSSIAN FEDERATION" -"3244158976","3244159999","DE","DEU","GERMANY" -"3244160000","3244161023","RU","RUS","RUSSIAN FEDERATION" -"3244161024","3244163071","NO","NOR","NORWAY" -"3244163072","3244228607","FI","FIN","FINLAND" -"3244261376","3244265823","IE","IRL","IRELAND" -"3244265824","3244265831","ES","ESP","SPAIN" -"3244265832","3244272575","IE","IRL","IRELAND" -"3244272576","3244272639","US","USA","UNITED STATES" -"3244272640","3244273687","IE","IRL","IRELAND" -"3244273688","3244273695","US","USA","UNITED STATES" -"3244273696","3244273727","IE","IRL","IRELAND" -"3244273728","3244273735","GB","GBR","UNITED KINGDOM" -"3244273736","3244274279","IE","IRL","IRELAND" -"3244274280","3244274287","US","USA","UNITED STATES" -"3244274288","3244277359","IE","IRL","IRELAND" -"3244277360","3244277367","GB","GBR","UNITED KINGDOM" -"3244277368","3244277631","IE","IRL","IRELAND" -"3244277632","3244277695","US","USA","UNITED STATES" -"3244277696","3244277759","IE","IRL","IRELAND" -"3244277760","3244294143","SI","SVN","SLOVENIA" -"3244294144","3244408575","DE","DEU","GERMANY" -"3244408576","3244408831","GB","GBR","UNITED KINGDOM" -"3244408832","3244592127","DE","DEU","GERMANY" -"3244592128","3244592639","CH","CHE","SWITZERLAND" -"3244592640","3244818431","DE","DEU","GERMANY" -"3244818432","3244818687","ES","ESP","SPAIN" -"3244818688","3244818943","AT","AUT","AUSTRIA" -"3244818944","3244819199","PL","POL","POLAND" -"3244819200","3244819455","DE","DEU","GERMANY" -"3244819456","3244819711","GB","GBR","UNITED KINGDOM" -"3244819712","3244819967","RO","ROM","ROMANIA" -"3244819968","3244820223","NL","NLD","NETHERLANDS" -"3244820224","3244820479","UA","UKR","UKRAINE" -"3244820480","3244820735","BE","BEL","BELGIUM" -"3244820736","3244820991","DE","DEU","GERMANY" -"3244820992","3244821247","SI","SVN","SLOVENIA" -"3244821248","3244821503","RU","RUS","RUSSIAN FEDERATION" -"3244821504","3244821759","PA","PAN","PANAMA" -"3244821760","3244822015","TR","TUR","TURKEY" -"3244822016","3244822271","RU","RUS","RUSSIAN FEDERATION" -"3244822272","3244822527","GB","GBR","UNITED KINGDOM" -"3244822528","3244822783","UA","UKR","UKRAINE" -"3244822784","3244823039","CZ","CZE","CZECH REPUBLIC" -"3244823040","3244823295","DE","DEU","GERMANY" -"3244823296","3244823551","FR","FRA","FRANCE" -"3244823552","3244823807","GE","GEO","GEORGIA" -"3244823808","3244824063","RO","ROM","ROMANIA" -"3244824064","3244824319","MT","MLT","MALTA" -"3244824320","3244824575","SI","SVN","SLOVENIA" -"3244824576","3244824831","RU","RUS","RUSSIAN FEDERATION" -"3244824832","3244825087","GB","GBR","UNITED KINGDOM" -"3244825088","3244825343","DE","DEU","GERMANY" -"3244825344","3244826111","RU","RUS","RUSSIAN FEDERATION" -"3244826112","3244826367","RO","ROM","ROMANIA" -"3244826368","3244826623","CH","CHE","SWITZERLAND" -"3244826624","3244826879","DE","DEU","GERMANY" -"3244826880","3244827135","MK","MKD","THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA" -"3244827136","3244827391","RU","RUS","RUSSIAN FEDERATION" -"3244827392","3244827647","GB","GBR","UNITED KINGDOM" -"3244827648","3244827903","FR","FRA","FRANCE" -"3244827904","3244828159","BE","BEL","BELGIUM" -"3244828160","3244828415","FI","FIN","FINLAND" -"3244828416","3244828671","FR","FRA","FRANCE" -"3244828672","3244828927","SA","SAU","SAUDI ARABIA" -"3244828928","3244829183","MD","MDA","REPUBLIC OF MOLDOVA" -"3244829184","3244829439","CH","CHE","SWITZERLAND" -"3244829440","3244829695","DK","DNK","DENMARK" -"3244829696","3244829951","IL","ISR","ISRAEL" -"3244829952","3244830463","PL","POL","POLAND" -"3244830464","3244830719","CH","CHE","SWITZERLAND" -"3244830720","3244830975","FR","FRA","FRANCE" -"3244830976","3244831231","DE","DEU","GERMANY" -"3244831232","3244831487","PL","POL","POLAND" -"3244831488","3244831743","ES","ESP","SPAIN" -"3244831744","3244831999","PT","PRT","PORTUGAL" -"3244832000","3244832255","HU","HUN","HUNGARY" -"3244832256","3244832511","FR","FRA","FRANCE" -"3244832512","3244832767","AT","AUT","AUSTRIA" -"3244832768","3244833023","FR","FRA","FRANCE" -"3244833024","3244833279","RU","RUS","RUSSIAN FEDERATION" -"3244833280","3244833535","UA","UKR","UKRAINE" -"3244833536","3244833791","RU","RUS","RUSSIAN FEDERATION" -"3244833792","3244834047","FR","FRA","FRANCE" -"3244834048","3244834303","CH","CHE","SWITZERLAND" -"3244834304","3244834559","IL","ISR","ISRAEL" -"3244834560","3244834815","GB","GBR","UNITED KINGDOM" -"3244834816","3244835071","RU","RUS","RUSSIAN FEDERATION" -"3244835072","3244835327","AT","AUT","AUSTRIA" -"3244835328","3244835583","DE","DEU","GERMANY" -"3244835584","3244835839","UA","UKR","UKRAINE" -"3244836096","3244836607","RU","RUS","RUSSIAN FEDERATION" -"3244836608","3244836863","PL","POL","POLAND" -"3244836864","3244837119","FR","FRA","FRANCE" -"3244837120","3244837375","RO","ROM","ROMANIA" -"3244837376","3244837631","ES","ESP","SPAIN" -"3244837632","3244837887","RU","RUS","RUSSIAN FEDERATION" -"3244837888","3244838143","CY","CYP","CYPRUS" -"3244838144","3244838399","IL","ISR","ISRAEL" -"3244838400","3244838655","GB","GBR","UNITED KINGDOM" -"3244838656","3244838911","BG","BGR","BULGARIA" -"3244838912","3244839167","TR","TUR","TURKEY" -"3244839168","3244839423","GB","GBR","UNITED KINGDOM" -"3244839424","3244839679","AT","AUT","AUSTRIA" -"3244839680","3244839935","DK","DNK","DENMARK" -"3244839936","3244840191","DE","DEU","GERMANY" -"3244840192","3244840447","UA","UKR","UKRAINE" -"3244840448","3244840703","IT","ITA","ITALY" -"3244840704","3244840959","RU","RUS","RUSSIAN FEDERATION" -"3244840960","3244841215","PL","POL","POLAND" -"3244841216","3244841471","GB","GBR","UNITED KINGDOM" -"3244841472","3244841727","DE","DEU","GERMANY" -"3244841728","3244842495","GB","GBR","UNITED KINGDOM" -"3244842496","3244842751","RU","RUS","RUSSIAN FEDERATION" -"3244842752","3244843007","DE","DEU","GERMANY" -"3244843008","3244843263","UA","UKR","UKRAINE" -"3244843264","3244843519","RU","RUS","RUSSIAN FEDERATION" -"3244843520","3244843775","NL","NLD","NETHERLANDS" -"3244843776","3244844031","PL","POL","POLAND" -"3244844032","3244844287","SE","SWE","SWEDEN" -"3244844288","3244844543","GB","GBR","UNITED KINGDOM" -"3244844544","3244844799","RU","RUS","RUSSIAN FEDERATION" -"3244844800","3244845055","GB","GBR","UNITED KINGDOM" -"3244845056","3244845311","NL","NLD","NETHERLANDS" -"3244845312","3244845567","NO","NOR","NORWAY" -"3244845568","3244845823","AD","AND","ANDORRA" -"3244845824","3244846335","GB","GBR","UNITED KINGDOM" -"3244846336","3244846591","TR","TUR","TURKEY" -"3244846592","3244846847","CZ","CZE","CZECH REPUBLIC" -"3244846848","3244847103","NL","NLD","NETHERLANDS" -"3244847104","3244847359","SE","SWE","SWEDEN" -"3244847360","3244847615","GB","GBR","UNITED KINGDOM" -"3244847616","3244847871","DK","DNK","DENMARK" -"3244847872","3244848127","IL","ISR","ISRAEL" -"3244848128","3244848383","CH","CHE","SWITZERLAND" -"3244848640","3244848895","HU","HUN","HUNGARY" -"3244848896","3244849151","IL","ISR","ISRAEL" -"3244849152","3244849407","AT","AUT","AUSTRIA" -"3244849408","3244849663","RO","ROM","ROMANIA" -"3244849664","3244849919","SE","SWE","SWEDEN" -"3244849920","3244850175","RO","ROM","ROMANIA" -"3244850432","3244850687","AT","AUT","AUSTRIA" -"3244850688","3244850943","GB","GBR","UNITED KINGDOM" -"3244850944","3244851455","RU","RUS","RUSSIAN FEDERATION" -"3244851456","3244851711","NL","NLD","NETHERLANDS" -"3244851712","3244851967","TR","TUR","TURKEY" -"3244851968","3244852223","GB","GBR","UNITED KINGDOM" -"3244852224","3244852479","CH","CHE","SWITZERLAND" -"3244852480","3244852735","UA","UKR","UKRAINE" -"3244852736","3244852991","SI","SVN","SLOVENIA" -"3244852992","3244853247","DK","DNK","DENMARK" -"3244853248","3244853503","IE","IRL","IRELAND" -"3244853504","3244853759","IT","ITA","ITALY" -"3244853760","3244854015","TR","TUR","TURKEY" -"3244854016","3244854271","NL","NLD","NETHERLANDS" -"3244854272","3244854527","GB","GBR","UNITED KINGDOM" -"3244854528","3244855295","RU","RUS","RUSSIAN FEDERATION" -"3244855296","3244855551","GB","GBR","UNITED KINGDOM" -"3244855552","3244855807","UA","UKR","UKRAINE" -"3244855808","3244856063","CZ","CZE","CZECH REPUBLIC" -"3244856064","3244856319","IL","ISR","ISRAEL" -"3244856320","3244856575","CH","CHE","SWITZERLAND" -"3244856576","3244856831","RU","RUS","RUSSIAN FEDERATION" -"3244856832","3244857087","RO","ROM","ROMANIA" -"3244857088","3244857343","IT","ITA","ITALY" -"3244857344","3244857599","GB","GBR","UNITED KINGDOM" -"3244857600","3244857855","LU","LUX","LUXEMBOURG" -"3244857856","3244858111","PL","POL","POLAND" -"3244858112","3244858367","DE","DEU","GERMANY" -"3244858368","3244858623","PL","POL","POLAND" -"3244858624","3244858879","RU","RUS","RUSSIAN FEDERATION" -"3244858880","3244859135","FR","FRA","FRANCE" -"3244859136","3244859391","BE","BEL","BELGIUM" -"3244859392","3244859647","SE","SWE","SWEDEN" -"3244859648","3244859903","PL","POL","POLAND" -"3244859904","3244860159","FR","FRA","FRANCE" -"3244860160","3244860415","PL","POL","POLAND" -"3244860416","3244860671","GB","GBR","UNITED KINGDOM" -"3244860672","3244860927","BG","BGR","BULGARIA" -"3244860928","3244861183","PL","POL","POLAND" -"3244861184","3244861439","CH","CHE","SWITZERLAND" -"3244861440","3244861951","GB","GBR","UNITED KINGDOM" -"3244861952","3244862207","RU","RUS","RUSSIAN FEDERATION" -"3244862208","3244862463","DK","DNK","DENMARK" -"3244862464","3244862719","CZ","CZE","CZECH REPUBLIC" -"3244862720","3244862975","RO","ROM","ROMANIA" -"3244862976","3244863231","DE","DEU","GERMANY" -"3244863232","3244863487","GB","GBR","UNITED KINGDOM" -"3244863488","3244863743","KZ","KAZ","KAZAKHSTAN" -"3244863744","3244863999","RU","RUS","RUSSIAN FEDERATION" -"3244864000","3244864255","UA","UKR","UKRAINE" -"3244864512","3244864767","RO","ROM","ROMANIA" -"3244864768","3244865023","RU","RUS","RUSSIAN FEDERATION" -"3244865024","3244865535","UA","UKR","UKRAINE" -"3244865536","3244865791","PL","POL","POLAND" -"3244865792","3244866047","CH","CHE","SWITZERLAND" -"3244866048","3244866559","NL","NLD","NETHERLANDS" -"3244866816","3244867071","UA","UKR","UKRAINE" -"3244867072","3244867583","RU","RUS","RUSSIAN FEDERATION" -"3244867584","3244868095","NL","NLD","NETHERLANDS" -"3244868096","3244868351","DE","DEU","GERMANY" -"3244868352","3244868607","RU","RUS","RUSSIAN FEDERATION" -"3244868608","3244868863","FI","FIN","FINLAND" -"3244868864","3244869119","RU","RUS","RUSSIAN FEDERATION" -"3244869120","3244869375","GB","GBR","UNITED KINGDOM" -"3244869376","3244869631","FR","FRA","FRANCE" -"3244869632","3244869887","GR","GRC","GREECE" -"3244869888","3244870143","TR","TUR","TURKEY" -"3244870144","3244870399","DK","DNK","DENMARK" -"3244870400","3244870655","UA","UKR","UKRAINE" -"3244870656","3244870911","SA","SAU","SAUDI ARABIA" -"3244870912","3244871167","FR","FRA","FRANCE" -"3244871168","3244871423","LT","LTU","LITHUANIA" -"3244871424","3244871679","RU","RUS","RUSSIAN FEDERATION" -"3244871680","3244872447","UA","UKR","UKRAINE" -"3244872448","3244872703","CH","CHE","SWITZERLAND" -"3244872704","3244872959","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3244872960","3244873215","UA","UKR","UKRAINE" -"3244873216","3244873471","SE","SWE","SWEDEN" -"3244873472","3244873727","IE","IRL","IRELAND" -"3244873728","3244873983","DE","DEU","GERMANY" -"3244873984","3244874239","SE","SWE","SWEDEN" -"3244874240","3244874495","ES","ESP","SPAIN" -"3244874496","3244874751","FR","FRA","FRANCE" -"3244874752","3244875007","DE","DEU","GERMANY" -"3244875008","3244875263","PL","POL","POLAND" -"3244875264","3244875519","LI","LIE","LIECHTENSTEIN" -"3244875520","3244875775","IT","ITA","ITALY" -"3244876800","3244877055","GB","GBR","UNITED KINGDOM" -"3244877056","3244877311","JO","JOR","JORDAN" -"3244877312","3244877567","RU","RUS","RUSSIAN FEDERATION" -"3244877568","3244877823","FR","FRA","FRANCE" -"3244877824","3244878079","AT","AUT","AUSTRIA" -"3244878080","3244878335","GB","GBR","UNITED KINGDOM" -"3244878336","3244878591","RU","RUS","RUSSIAN FEDERATION" -"3244878592","3244878847","PL","POL","POLAND" -"3244878848","3244879103","SI","SVN","SLOVENIA" -"3244879104","3244879359","RU","RUS","RUSSIAN FEDERATION" -"3244879360","3244879615","CH","CHE","SWITZERLAND" -"3244879616","3244879871","RO","ROM","ROMANIA" -"3244879872","3244880127","SI","SVN","SLOVENIA" -"3244880128","3244880383","RU","RUS","RUSSIAN FEDERATION" -"3244880384","3244880639","UA","UKR","UKRAINE" -"3244880640","3244880895","RU","RUS","RUSSIAN FEDERATION" -"3244880896","3244881151","PL","POL","POLAND" -"3244881152","3244881407","RU","RUS","RUSSIAN FEDERATION" -"3244881408","3244881663","DK","DNK","DENMARK" -"3244881664","3244881919","RO","ROM","ROMANIA" -"3244881920","3244882175","RU","RUS","RUSSIAN FEDERATION" -"3244882176","3244882431","UA","UKR","UKRAINE" -"3244882432","3244882687","IT","ITA","ITALY" -"3244882688","3244882943","PL","POL","POLAND" -"3244882944","3244883199","NL","NLD","NETHERLANDS" -"3244883200","3244883455","UA","UKR","UKRAINE" -"3244883456","3244883711","CZ","CZE","CZECH REPUBLIC" -"3244883712","3244883967","NL","NLD","NETHERLANDS" -"3244883968","3244884223","MD","MDA","REPUBLIC OF MOLDOVA" -"3244884224","3244884479","FR","FRA","FRANCE" -"3244884480","3244884735","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3244884736","3244884991","NL","NLD","NETHERLANDS" -"3244884992","3244885247","GR","GRC","GREECE" -"3244885248","3244885503","CH","CHE","SWITZERLAND" -"3244885504","3244885759","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3244885760","3244886015","UA","UKR","UKRAINE" -"3244886016","3244886271","LB","LBN","LEBANON" -"3244886272","3244886527","CH","CHE","SWITZERLAND" -"3244886528","3244886783","DK","DNK","DENMARK" -"3244886784","3244887039","UA","UKR","UKRAINE" -"3244887040","3244887295","NL","NLD","NETHERLANDS" -"3244887296","3244887551","GB","GBR","UNITED KINGDOM" -"3244887552","3244887807","CZ","CZE","CZECH REPUBLIC" -"3244887808","3244888063","BE","BEL","BELGIUM" -"3244888064","3244888319","RU","RUS","RUSSIAN FEDERATION" -"3244888320","3244888575","DE","DEU","GERMANY" -"3244888576","3244888831","FR","FRA","FRANCE" -"3244888832","3244889087","DE","DEU","GERMANY" -"3244889088","3244889343","PL","POL","POLAND" -"3244889344","3244889599","RO","ROM","ROMANIA" -"3244889600","3244889855","SI","SVN","SLOVENIA" -"3244889856","3244890111","HR","HRV","CROATIA" -"3244890112","3244890367","PL","POL","POLAND" -"3244890368","3244890623","NL","NLD","NETHERLANDS" -"3244890624","3244890879","FR","FRA","FRANCE" -"3244890880","3244891135","RU","RUS","RUSSIAN FEDERATION" -"3244891136","3244891391","RO","ROM","ROMANIA" -"3244891392","3244891647","PL","POL","POLAND" -"3244891648","3244891903","UA","UKR","UKRAINE" -"3244891904","3244892159","RO","ROM","ROMANIA" -"3244892160","3244892415","PL","POL","POLAND" -"3244892416","3244892671","NL","NLD","NETHERLANDS" -"3244892672","3244892927","ES","ESP","SPAIN" -"3244892928","3244893183","PL","POL","POLAND" -"3244893184","3244893439","BE","BEL","BELGIUM" -"3244893440","3244893695","RU","RUS","RUSSIAN FEDERATION" -"3244893696","3244893951","DE","DEU","GERMANY" -"3244893952","3244894463","RU","RUS","RUSSIAN FEDERATION" -"3244894464","3244894719","UA","UKR","UKRAINE" -"3244894720","3244894975","GR","GRC","GREECE" -"3244894976","3244895231","FR","FRA","FRANCE" -"3244895232","3244895487","DK","DNK","DENMARK" -"3244895488","3244895743","PL","POL","POLAND" -"3244896000","3244896511","GB","GBR","UNITED KINGDOM" -"3244896512","3244896767","LT","LTU","LITHUANIA" -"3244896768","3244897023","NL","NLD","NETHERLANDS" -"3244897024","3244897279","GB","GBR","UNITED KINGDOM" -"3244897280","3244897535","DE","DEU","GERMANY" -"3244897536","3244897791","RU","RUS","RUSSIAN FEDERATION" -"3244897792","3244898047","GB","GBR","UNITED KINGDOM" -"3244898048","3244898303","DE","DEU","GERMANY" -"3244898304","3244898559","UA","UKR","UKRAINE" -"3244898560","3244898815","GI","GIB","GIBRALTAR" -"3244898816","3244899071","RO","ROM","ROMANIA" -"3244899072","3244899327","RU","RUS","RUSSIAN FEDERATION" -"3244899328","3244899583","BG","BGR","BULGARIA" -"3244899584","3244899839","GB","GBR","UNITED KINGDOM" -"3244899840","3244900095","UA","UKR","UKRAINE" -"3244900096","3244900351","PL","POL","POLAND" -"3244900352","3244900607","RO","ROM","ROMANIA" -"3244900608","3244900863","RU","RUS","RUSSIAN FEDERATION" -"3244900864","3244901119","PL","POL","POLAND" -"3244901120","3244901375","SI","SVN","SLOVENIA" -"3244901376","3244901631","DE","DEU","GERMANY" -"3244901632","3244901887","GB","GBR","UNITED KINGDOM" -"3244901888","3244902143","UA","UKR","UKRAINE" -"3244902144","3244902655","RU","RUS","RUSSIAN FEDERATION" -"3244902656","3244902911","BE","BEL","BELGIUM" -"3244902912","3244903167","IM","IMN","ISLE OF MAN" -"3244903168","3244903423","PL","POL","POLAND" -"3244903424","3244903679","FI","FIN","FINLAND" -"3244903680","3244903935","NO","NOR","NORWAY" -"3244903936","3244904191","TR","TUR","TURKEY" -"3244904192","3244904447","IT","ITA","ITALY" -"3244904448","3244904703","GR","GRC","GREECE" -"3244904704","3244904959","FR","FRA","FRANCE" -"3244904960","3244905215","BY","BLR","BELARUS" -"3244905216","3244905471","MD","MDA","REPUBLIC OF MOLDOVA" -"3244905472","3244905727","GB","GBR","UNITED KINGDOM" -"3244905728","3244905983","GR","GRC","GREECE" -"3244905984","3244906239","AT","AUT","AUSTRIA" -"3244906240","3244906751","DE","DEU","GERMANY" -"3244906752","3244907007","SA","SAU","SAUDI ARABIA" -"3244907008","3244907263","FR","FRA","FRANCE" -"3244907264","3244907519","RO","ROM","ROMANIA" -"3244907520","3244907775","GB","GBR","UNITED KINGDOM" -"3244907776","3244908287","RU","RUS","RUSSIAN FEDERATION" -"3244908288","3244908543","NL","NLD","NETHERLANDS" -"3244908544","3244908799","RU","RUS","RUSSIAN FEDERATION" -"3244908800","3244909055","FI","FIN","FINLAND" -"3244909056","3244909311","GB","GBR","UNITED KINGDOM" -"3244909312","3244909567","IL","ISR","ISRAEL" -"3244909568","3244909823","RU","RUS","RUSSIAN FEDERATION" -"3244909824","3244910335","NL","NLD","NETHERLANDS" -"3244910336","3244910591","DE","DEU","GERMANY" -"3244910592","3244910847","GB","GBR","UNITED KINGDOM" -"3244910848","3244911103","DE","DEU","GERMANY" -"3244911104","3244911359","BE","BEL","BELGIUM" -"3244911360","3244911615","RU","RUS","RUSSIAN FEDERATION" -"3244911616","3244911871","GB","GBR","UNITED KINGDOM" -"3244911872","3244912127","GR","GRC","GREECE" -"3244912128","3244912383","PL","POL","POLAND" -"3244912384","3244912639","NL","NLD","NETHERLANDS" -"3244912640","3244912895","NO","NOR","NORWAY" -"3244912896","3244913151","SE","SWE","SWEDEN" -"3244913152","3244913407","RU","RUS","RUSSIAN FEDERATION" -"3244913408","3244913663","SI","SVN","SLOVENIA" -"3244913664","3244913919","DK","DNK","DENMARK" -"3244913920","3244914431","RU","RUS","RUSSIAN FEDERATION" -"3244914432","3244914687","UA","UKR","UKRAINE" -"3244914688","3244914943","GB","GBR","UNITED KINGDOM" -"3244914944","3244915199","UA","UKR","UKRAINE" -"3244915200","3244915455","PL","POL","POLAND" -"3244915456","3244915711","FI","FIN","FINLAND" -"3244915712","3244915967","UA","UKR","UKRAINE" -"3244915968","3244916223","PL","POL","POLAND" -"3244916224","3244916479","RU","RUS","RUSSIAN FEDERATION" -"3244916480","3244916735","SI","SVN","SLOVENIA" -"3244916736","3244916991","FR","FRA","FRANCE" -"3244916992","3244917247","PL","POL","POLAND" -"3244917248","3244917503","SE","SWE","SWEDEN" -"3244917504","3244917759","AT","AUT","AUSTRIA" -"3244917760","3244918015","UA","UKR","UKRAINE" -"3244918016","3244918271","BE","BEL","BELGIUM" -"3244918272","3244918527","SE","SWE","SWEDEN" -"3244918528","3244918783","UA","UKR","UKRAINE" -"3244918784","3244919039","CH","CHE","SWITZERLAND" -"3244919040","3244919295","DE","DEU","GERMANY" -"3244919296","3244919551","SE","SWE","SWEDEN" -"3244919552","3244919807","DE","DEU","GERMANY" -"3244919808","3244920063","RO","ROM","ROMANIA" -"3244920064","3244920319","RU","RUS","RUSSIAN FEDERATION" -"3244920320","3244920575","SK","SVK","SLOVAKIA" -"3244920576","3244920831","PL","POL","POLAND" -"3244920832","3244921087","NL","NLD","NETHERLANDS" -"3244921088","3244921343","IE","IRL","IRELAND" -"3244921344","3244921599","LT","LTU","LITHUANIA" -"3244921600","3244921855","DE","DEU","GERMANY" -"3244921856","3244922111","BG","BGR","BULGARIA" -"3244922112","3244922367","DK","DNK","DENMARK" -"3244922368","3244922623","NL","NLD","NETHERLANDS" -"3244922624","3244922879","BG","BGR","BULGARIA" -"3244922880","3244923135","UA","UKR","UKRAINE" -"3244923136","3244923391","AT","AUT","AUSTRIA" -"3244923392","3244923903","LV","LVA","LATVIA" -"3244923904","3244924159","RU","RUS","RUSSIAN FEDERATION" -"3244924160","3244924927","CZ","CZE","CZECH REPUBLIC" -"3244924928","3244925183","FI","FIN","FINLAND" -"3244925184","3244925439","CH","CHE","SWITZERLAND" -"3244925440","3244925695","GB","GBR","UNITED KINGDOM" -"3244925696","3244925951","RS","SRB","SERBIA" -"3244925952","3244926207","UA","UKR","UKRAINE" -"3244926208","3244926463","NL","NLD","NETHERLANDS" -"3244926464","3244926719","LV","LVA","LATVIA" -"3244926720","3244926975","PL","POL","POLAND" -"3244926976","3244927231","DE","DEU","GERMANY" -"3244927232","3244927487","UA","UKR","UKRAINE" -"3244927488","3244927743","GB","GBR","UNITED KINGDOM" -"3244927744","3244927999","UA","UKR","UKRAINE" -"3244928000","3244928255","GB","GBR","UNITED KINGDOM" -"3244928256","3244928511","IT","ITA","ITALY" -"3244928512","3244928767","UA","UKR","UKRAINE" -"3244928768","3244929023","RU","RUS","RUSSIAN FEDERATION" -"3244929024","3244929535","RO","ROM","ROMANIA" -"3244929536","3244929791","PL","POL","POLAND" -"3244929792","3244930047","RU","RUS","RUSSIAN FEDERATION" -"3244930048","3244930303","PL","POL","POLAND" -"3244949504","3244951551","RU","RUS","RUSSIAN FEDERATION" -"3244951552","3244952575","FI","FIN","FINLAND" -"3244952576","3244953599","GB","GBR","UNITED KINGDOM" -"3244953600","3244954623","DE","DEU","GERMANY" -"3244954624","3244955647","RU","RUS","RUSSIAN FEDERATION" -"3244955648","3244957695","UA","UKR","UKRAINE" -"3244957696","3244958719","AG","ATG","ANTIGUA AND BARBUDA" -"3244958720","3244959743","FR","FRA","FRANCE" -"3244959744","3244960767","RU","RUS","RUSSIAN FEDERATION" -"3244960768","3244961791","RO","ROM","ROMANIA" -"3244961792","3244962815","KG","KGZ","KYRGYZSTAN" -"3244962816","3244963839","IL","ISR","ISRAEL" -"3244963840","3244966911","UA","UKR","UKRAINE" -"3244966912","3244968959","RU","RUS","RUSSIAN FEDERATION" -"3244968960","3244969983","PL","POL","POLAND" -"3244969984","3244971007","UA","UKR","UKRAINE" -"3244971008","3244972031","PL","POL","POLAND" -"3244972032","3244975103","RU","RUS","RUSSIAN FEDERATION" -"3244975104","3244977151","PL","POL","POLAND" -"3244977152","3244978175","RU","RUS","RUSSIAN FEDERATION" -"3244978176","3244979199","GB","GBR","UNITED KINGDOM" -"3244979200","3244980223","FR","FRA","FRANCE" -"3244981248","3244982271","RO","ROM","ROMANIA" -"3244982272","3244983295","PL","POL","POLAND" -"3244983296","3244984319","RU","RUS","RUSSIAN FEDERATION" -"3244984320","3244985343","UA","UKR","UKRAINE" -"3244985344","3244986367","DE","DEU","GERMANY" -"3244986368","3244987391","UA","UKR","UKRAINE" -"3244987392","3244988415","RU","RUS","RUSSIAN FEDERATION" -"3244988416","3244990463","PL","POL","POLAND" -"3244990464","3244991487","UA","UKR","UKRAINE" -"3244991488","3244992511","DK","DNK","DENMARK" -"3244992512","3244994559","RU","RUS","RUSSIAN FEDERATION" -"3244994560","3244995583","ES","ESP","SPAIN" -"3244995584","3244996607","IT","ITA","ITALY" -"3244996608","3244997631","UA","UKR","UKRAINE" -"3244997632","3244998655","RO","ROM","ROMANIA" -"3244998656","3244999679","PL","POL","POLAND" -"3244999680","3245000703","IQ","IRQ","IRAQ" -"3245000704","3245001727","UA","UKR","UKRAINE" -"3245001728","3245002751","IL","ISR","ISRAEL" -"3245002752","3245003775","ES","ESP","SPAIN" -"3245003776","3245004799","RU","RUS","RUSSIAN FEDERATION" -"3245004800","3245005823","PL","POL","POLAND" -"3245005824","3245006847","UA","UKR","UKRAINE" -"3245006848","3245007871","DE","DEU","GERMANY" -"3245007872","3245008895","PL","POL","POLAND" -"3245008896","3245011967","RU","RUS","RUSSIAN FEDERATION" -"3245011968","3245012991","PL","POL","POLAND" -"3245012992","3245014015","UA","UKR","UKRAINE" -"3245014016","3245015039","GR","GRC","GREECE" -"3245015040","3245016063","RU","RUS","RUSSIAN FEDERATION" -"3245016064","3245017087","RS","SRB","SERBIA" -"3245018112","3245019135","RU","RUS","RUSSIAN FEDERATION" -"3245019136","3245020159","SC","SYC","SEYCHELLES" -"3245020160","3245021183","RU","RUS","RUSSIAN FEDERATION" -"3245021184","3245022207","UA","UKR","UKRAINE" -"3245022208","3245023231","NO","NOR","NORWAY" -"3245023232","3245024255","PL","POL","POLAND" -"3245024256","3245025279","BG","BGR","BULGARIA" -"3245025280","3245026303","UA","UKR","UKRAINE" -"3245026304","3245027327","GB","GBR","UNITED KINGDOM" -"3245027328","3245028351","RU","RUS","RUSSIAN FEDERATION" -"3245028352","3245029375","PL","POL","POLAND" -"3245029376","3245030399","FR","FRA","FRANCE" -"3245030400","3245032447","RU","RUS","RUSSIAN FEDERATION" -"3245032448","3245033471","BG","BGR","BULGARIA" -"3245033472","3245034495","UA","UKR","UKRAINE" -"3245034496","3245035519","SE","SWE","SWEDEN" -"3245035520","3245036543","UA","UKR","UKRAINE" -"3245036544","3245037567","IS","ISL","ICELAND" -"3245037568","3245038591","PL","POL","POLAND" -"3245038592","3245039615","RU","RUS","RUSSIAN FEDERATION" -"3245039616","3245040639","MD","MDA","REPUBLIC OF MOLDOVA" -"3245040640","3245041663","RU","RUS","RUSSIAN FEDERATION" -"3245041664","3245044735","UA","UKR","UKRAINE" -"3245044736","3245045759","GB","GBR","UNITED KINGDOM" -"3245045760","3245046783","DE","DEU","GERMANY" -"3245046784","3245047807","FR","FRA","FRANCE" -"3245047808","3245050879","UA","UKR","UKRAINE" -"3245050880","3245051903","RU","RUS","RUSSIAN FEDERATION" -"3245051904","3245052927","DE","DEU","GERMANY" -"3245052928","3245054975","RU","RUS","RUSSIAN FEDERATION" -"3245054976","3245055999","AT","AUT","AUSTRIA" -"3245056000","3245057023","CZ","CZE","CZECH REPUBLIC" -"3245057024","3245058047","PL","POL","POLAND" -"3245058048","3245061119","UA","UKR","UKRAINE" -"3245062144","3245063167","UA","UKR","UKRAINE" -"3245063168","3245065215","RU","RUS","RUSSIAN FEDERATION" -"3245065216","3245066239","PL","POL","POLAND" -"3245080576","3245082623","SE","SWE","SWEDEN" -"3245082624","3245084927","DE","DEU","GERMANY" -"3245084928","3245085183","BE","BEL","BELGIUM" -"3245085184","3245085439","GB","GBR","UNITED KINGDOM" -"3245085440","3245085695","DE","DEU","GERMANY" -"3245085696","3245086207","FR","FRA","FRANCE" -"3245086208","3245086463","AT","AUT","AUSTRIA" -"3245086720","3245086975","BG","BGR","BULGARIA" -"3245086976","3245087231","IT","ITA","ITALY" -"3245087232","3245087487","CH","CHE","SWITZERLAND" -"3245087488","3245087743","NL","NLD","NETHERLANDS" -"3245088000","3245088255","LV","LVA","LATVIA" -"3245088256","3245088511","KW","KWT","KUWAIT" -"3245088512","3245088767","FR","FRA","FRANCE" -"3245088768","3245089279","BG","BGR","BULGARIA" -"3245089280","3245089791","PL","POL","POLAND" -"3245089792","3245090303","BG","BGR","BULGARIA" -"3245090304","3245090815","UA","UKR","UKRAINE" -"3245090816","3245091327","AT","AUT","AUSTRIA" -"3245091328","3245091839","SE","SWE","SWEDEN" -"3245091840","3245093887","UA","UKR","UKRAINE" -"3245093888","3245094911","RO","ROM","ROMANIA" -"3245094912","3245095935","UA","UKR","UKRAINE" -"3245095936","3245096959","IT","ITA","ITALY" -"3245096960","3245099007","CZ","CZE","CZECH REPUBLIC" -"3245099008","3245103103","GB","GBR","UNITED KINGDOM" -"3245105152","3245105663","GB","GBR","UNITED KINGDOM" -"3245105664","3245106175","NL","NLD","NETHERLANDS" -"3245106176","3245106687","AT","AUT","AUSTRIA" -"3245106688","3245107711","UA","UKR","UKRAINE" -"3245107712","3245108735","CZ","CZE","CZECH REPUBLIC" -"3245108736","3245109247","FR","FRA","FRANCE" -"3245109248","3245112319","UA","UKR","UKRAINE" -"3245113344","3245113855","UA","UKR","UKRAINE" -"3245113856","3245114367","RU","RUS","RUSSIAN FEDERATION" -"3245114368","3245114879","SK","SVK","SLOVAKIA" -"3245114880","3245115391","JO","JOR","JORDAN" -"3245115392","3245115903","CH","CHE","SWITZERLAND" -"3245115904","3245116415","AT","AUT","AUSTRIA" -"3245116416","3245116927","FR","FRA","FRANCE" -"3245117440","3245118463","LV","LVA","LATVIA" -"3245118464","3245119487","GB","GBR","UNITED KINGDOM" -"3245120512","3245121535","GB","GBR","UNITED KINGDOM" -"3245121536","3245122047","GR","GRC","GREECE" -"3245122048","3245122559","UA","UKR","UKRAINE" -"3245122560","3245123071","DE","DEU","GERMANY" -"3245123072","3245123583","FR","FRA","FRANCE" -"3245123584","3245124095","GB","GBR","UNITED KINGDOM" -"3245124096","3245124607","UA","UKR","UKRAINE" -"3245124608","3245125119","DE","DEU","GERMANY" -"3245125120","3245125631","ES","ESP","SPAIN" -"3245125632","3245125887","DE","DEU","GERMANY" -"3245125888","3245126143","PL","POL","POLAND" -"3245126144","3245126399","FR","FRA","FRANCE" -"3245126400","3245126655","DE","DEU","GERMANY" -"3245126656","3245126911","FR","FRA","FRANCE" -"3245126912","3245127167","DE","DEU","GERMANY" -"3245127168","3245127423","RU","RUS","RUSSIAN FEDERATION" -"3245127424","3245127679","AT","AUT","AUSTRIA" -"3245127680","3245127935","DE","DEU","GERMANY" -"3245127936","3245128191","LV","LVA","LATVIA" -"3245128192","3245128447","IT","ITA","ITALY" -"3245128448","3245128703","CH","CHE","SWITZERLAND" -"3245128704","3245128959","GB","GBR","UNITED KINGDOM" -"3245128960","3245129471","DK","DNK","DENMARK" -"3245129472","3245129983","GB","GBR","UNITED KINGDOM" -"3245129984","3245130239","DE","DEU","GERMANY" -"3245130240","3245130495","PL","POL","POLAND" -"3245130496","3245130751","IL","ISR","ISRAEL" -"3245130752","3245131007","SE","SWE","SWEDEN" -"3245131008","3245131519","FR","FRA","FRANCE" -"3245131520","3245132031","GB","GBR","UNITED KINGDOM" -"3245132032","3245132287","BE","BEL","BELGIUM" -"3245132288","3245132543","PL","POL","POLAND" -"3245132544","3245132799","FR","FRA","FRANCE" -"3245132800","3245133311","IT","ITA","ITALY" -"3245133312","3245133567","PL","POL","POLAND" -"3245133568","3245133823","RU","RUS","RUSSIAN FEDERATION" -"3245133824","3245134079","NO","NOR","NORWAY" -"3245134080","3245134335","UA","UKR","UKRAINE" -"3245134336","3245134591","NL","NLD","NETHERLANDS" -"3245134592","3245134847","IL","ISR","ISRAEL" -"3245134848","3245135103","AT","AUT","AUSTRIA" -"3245135104","3245135359","TR","TUR","TURKEY" -"3245135616","3245135871","BE","BEL","BELGIUM" -"3245135872","3245136127","FR","FRA","FRANCE" -"3245136128","3245136383","DE","DEU","GERMANY" -"3245136384","3245136639","GB","GBR","UNITED KINGDOM" -"3245136896","3245137151","PL","POL","POLAND" -"3245137408","3245137663","DE","DEU","GERMANY" -"3245137664","3245137919","SE","SWE","SWEDEN" -"3245137920","3245138431","DK","DNK","DENMARK" -"3245138432","3245138943","UA","UKR","UKRAINE" -"3245138944","3245139455","PL","POL","POLAND" -"3245139456","3245139967","RU","RUS","RUSSIAN FEDERATION" -"3245139968","3245140479","CH","CHE","SWITZERLAND" -"3245140480","3245140991","RO","ROM","ROMANIA" -"3245140992","3245141503","UA","UKR","UKRAINE" -"3245142016","3245143039","UA","UKR","UKRAINE" -"3245143040","3245144063","GB","GBR","UNITED KINGDOM" -"3245144064","3245145087","UA","UKR","UKRAINE" -"3245146112","3245147135","FR","FRA","FRANCE" -"3245147136","3245148159","DE","DEU","GERMANY" -"3245148160","3245149183","UA","UKR","UKRAINE" -"3245149184","3245150207","RU","RUS","RUSSIAN FEDERATION" -"3245150208","3245154303","IS","ISL","ICELAND" -"3245154304","3245158399","IT","ITA","ITALY" -"3245158400","3245158911","CH","CHE","SWITZERLAND" -"3245158912","3245159423","GB","GBR","UNITED KINGDOM" -"3245159424","3245159935","CH","CHE","SWITZERLAND" -"3245159936","3245160447","BG","BGR","BULGARIA" -"3245160448","3245160959","DK","DNK","DENMARK" -"3245160960","3245161471","LU","LUX","LUXEMBOURG" -"3245161472","3245161983","SE","SWE","SWEDEN" -"3245161984","3245162495","BE","BEL","BELGIUM" -"3245162496","3245163007","DE","DEU","GERMANY" -"3245163520","3245164543","RU","RUS","RUSSIAN FEDERATION" -"3245164544","3245165055","BE","BEL","BELGIUM" -"3245165056","3245165567","AT","AUT","AUSTRIA" -"3245165568","3245166079","RU","RUS","RUSSIAN FEDERATION" -"3245166080","3245166591","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"3245166592","3245166847","UA","UKR","UKRAINE" -"3245166848","3245167103","GB","GBR","UNITED KINGDOM" -"3245167104","3245167359","IL","ISR","ISRAEL" -"3245167360","3245167615","GB","GBR","UNITED KINGDOM" -"3245167616","3245167871","UA","UKR","UKRAINE" -"3245167872","3245168127","LV","LVA","LATVIA" -"3245168128","3245168383","SE","SWE","SWEDEN" -"3245168384","3245168639","FR","FRA","FRANCE" -"3245168640","3245168895","AT","AUT","AUSTRIA" -"3245168896","3245169151","RU","RUS","RUSSIAN FEDERATION" -"3245169152","3245169407","IT","ITA","ITALY" -"3245169408","3245169919","PL","POL","POLAND" -"3245169920","3245170175","UA","UKR","UKRAINE" -"3245170176","3245170431","GB","GBR","UNITED KINGDOM" -"3245170432","3245170687","CH","CHE","SWITZERLAND" -"3245170688","3245171711","DE","DEU","GERMANY" -"3245171712","3245172735","UA","UKR","UKRAINE" -"3245172736","3245173759","IT","ITA","ITALY" -"3245173760","3245174783","UA","UKR","UKRAINE" -"3245174784","3245175039","IT","ITA","ITALY" -"3245175040","3245175295","DE","DEU","GERMANY" -"3245175296","3245175551","RU","RUS","RUSSIAN FEDERATION" -"3245175552","3245175807","PL","POL","POLAND" -"3245175808","3245176063","GB","GBR","UNITED KINGDOM" -"3245176064","3245176319","IT","ITA","ITALY" -"3245176320","3245176575","UA","UKR","UKRAINE" -"3245176576","3245176831","FR","FRA","FRANCE" -"3245176832","3245177343","ES","ESP","SPAIN" -"3245177344","3245177599","NL","NLD","NETHERLANDS" -"3245177600","3245177855","PL","POL","POLAND" -"3245177856","3245178111","SI","SVN","SLOVENIA" -"3245178112","3245178623","BE","BEL","BELGIUM" -"3245178624","3245178879","PL","POL","POLAND" -"3245178880","3245179391","UA","UKR","UKRAINE" -"3245179392","3245179903","LU","LUX","LUXEMBOURG" -"3245179904","3245180415","DE","DEU","GERMANY" -"3245180416","3245180927","TR","TUR","TURKEY" -"3245180928","3245181439","NL","NLD","NETHERLANDS" -"3245181440","3245181951","DE","DEU","GERMANY" -"3245181952","3245182463","AT","AUT","AUSTRIA" -"3245182464","3245182975","FR","FRA","FRANCE" -"3245182976","3245183999","UA","UKR","UKRAINE" -"3245184000","3245187071","AT","AUT","AUSTRIA" -"3245187072","3245190143","UA","UKR","UKRAINE" -"3245190144","3245191167","ES","ESP","SPAIN" -"3245191168","3245193215","CZ","CZE","CZECH REPUBLIC" -"3245193216","3245195263","BE","BEL","BELGIUM" -"3245195264","3245197311","GB","GBR","UNITED KINGDOM" -"3245197312","3245199359","IT","ITA","ITALY" -"3245199360","3245199615","LU","LUX","LUXEMBOURG" -"3245199616","3245199871","SE","SWE","SWEDEN" -"3245199872","3245200127","NO","NOR","NORWAY" -"3245200128","3245200383","LV","LVA","LATVIA" -"3245200384","3245200639","PL","POL","POLAND" -"3245200640","3245200895","GR","GRC","GREECE" -"3245200896","3245201151","DE","DEU","GERMANY" -"3245201152","3245201407","GB","GBR","UNITED KINGDOM" -"3245201664","3245201919","NO","NOR","NORWAY" -"3245201920","3245202175","SA","SAU","SAUDI ARABIA" -"3245202176","3245202687","GB","GBR","UNITED KINGDOM" -"3245202688","3245203455","DE","DEU","GERMANY" -"3245203456","3245203711","FR","FRA","FRANCE" -"3245203712","3245204223","PL","POL","POLAND" -"3245204224","3245204479","SI","SVN","SLOVENIA" -"3245204480","3245204735","BE","BEL","BELGIUM" -"3245204736","3245205247","ES","ESP","SPAIN" -"3245205248","3245205503","DE","DEU","GERMANY" -"3245205504","3245205759","AT","AUT","AUSTRIA" -"3245205760","3245206015","IT","ITA","ITALY" -"3245206016","3245206271","BE","BEL","BELGIUM" -"3245206272","3245206527","LT","LTU","LITHUANIA" -"3245206528","3245207551","DE","DEU","GERMANY" -"3245207552","3245208063","UA","UKR","UKRAINE" -"3245208064","3245208575","DE","DEU","GERMANY" -"3245208576","3245209087","PL","POL","POLAND" -"3245209088","3245209599","RU","RUS","RUSSIAN FEDERATION" -"3245209600","3245210111","UA","UKR","UKRAINE" -"3245210112","3245210623","FR","FRA","FRANCE" -"3245210624","3245211135","HU","HUN","HUNGARY" -"3245211136","3245211647","GB","GBR","UNITED KINGDOM" -"3245211648","3245212159","RU","RUS","RUSSIAN FEDERATION" -"3245212160","3245212671","NG","NGA","NIGERIA" -"3245212672","3245213183","RU","RUS","RUSSIAN FEDERATION" -"3245213184","3245213695","DE","DEU","GERMANY" -"3245213696","3245214207","LV","LVA","LATVIA" -"3245214208","3245214719","AT","AUT","AUSTRIA" -"3245214720","3245215231","SE","SWE","SWEDEN" -"3245215232","3245215743","SI","SVN","SLOVENIA" -"3245215744","3245217791","UA","UKR","UKRAINE" -"3245217792","3245218815","DE","DEU","GERMANY" -"3245218816","3245219839","AT","AUT","AUSTRIA" -"3245219840","3245221887","FI","FIN","FINLAND" -"3245221888","3245223935","DE","DEU","GERMANY" -"3245223936","3245225983","GB","GBR","UNITED KINGDOM" -"3245225984","3245228031","HU","HUN","HUNGARY" -"3245228032","3245229055","FI","FIN","FINLAND" -"3245229056","3245230079","DE","DEU","GERMANY" -"3245230080","3245232127","UA","UKR","UKRAINE" -"3245232128","3245232383","PL","POL","POLAND" -"3245232384","3245232639","BE","BEL","BELGIUM" -"3245232640","3245232895","BG","BGR","BULGARIA" -"3245232896","3245233151","IT","ITA","ITALY" -"3245233152","3245233407","DK","DNK","DENMARK" -"3245233664","3245233919","GR","GRC","GREECE" -"3245233920","3245234175","DK","DNK","DENMARK" -"3245234176","3245234431","GB","GBR","UNITED KINGDOM" -"3245234432","3245234687","UA","UKR","UKRAINE" -"3245234688","3245234943","DE","DEU","GERMANY" -"3245234944","3245235199","GB","GBR","UNITED KINGDOM" -"3245235200","3245235455","BE","BEL","BELGIUM" -"3245235456","3245235711","GB","GBR","UNITED KINGDOM" -"3245235712","3245235967","AT","AUT","AUSTRIA" -"3245235968","3245236223","CH","CHE","SWITZERLAND" -"3245236224","3245237247","PL","POL","POLAND" -"3245237248","3245237759","UA","UKR","UKRAINE" -"3245237760","3245238271","DE","DEU","GERMANY" -"3245238784","3245239295","UA","UKR","UKRAINE" -"3245239296","3245240319","FI","FIN","FINLAND" -"3245240320","3245241343","UA","UKR","UKRAINE" -"3245241344","3245242367","DE","DEU","GERMANY" -"3245242368","3245243391","PL","POL","POLAND" -"3245243392","3245244415","UA","UKR","UKRAINE" -"3245244416","3245244671","ES","ESP","SPAIN" -"3245244672","3245244927","AT","AUT","AUSTRIA" -"3245244928","3245245183","BE","BEL","BELGIUM" -"3245245184","3245245439","CH","CHE","SWITZERLAND" -"3245245440","3245245695","BG","BGR","BULGARIA" -"3245245696","3245245951","DE","DEU","GERMANY" -"3245245952","3245246207","UA","UKR","UKRAINE" -"3245246208","3245246463","GB","GBR","UNITED KINGDOM" -"3245246464","3245246719","AT","AUT","AUSTRIA" -"3245246720","3245246975","PL","POL","POLAND" -"3245246976","3245247231","GB","GBR","UNITED KINGDOM" -"3245247232","3245247487","DE","DEU","GERMANY" -"3245247488","3245247999","FR","FRA","FRANCE" -"3245248000","3245248255","PL","POL","POLAND" -"3245248256","3245248511","GB","GBR","UNITED KINGDOM" -"3245248512","3245248767","UA","UKR","UKRAINE" -"3245248768","3245249023","SI","SVN","SLOVENIA" -"3245249024","3245249279","FR","FRA","FRANCE" -"3245249280","3245249535","NL","NLD","NETHERLANDS" -"3245249536","3245249791","FR","FRA","FRANCE" -"3245249792","3245250047","GB","GBR","UNITED KINGDOM" -"3245250048","3245250303","DE","DEU","GERMANY" -"3245250304","3245250559","IT","ITA","ITALY" -"3245250560","3245250815","FR","FRA","FRANCE" -"3245250816","3245251071","DE","DEU","GERMANY" -"3245251072","3245251327","ES","ESP","SPAIN" -"3245251328","3245251583","MT","MLT","MALTA" -"3245251584","3245251839","UA","UKR","UKRAINE" -"3245251840","3245252095","NL","NLD","NETHERLANDS" -"3245252096","3245252351","BE","BEL","BELGIUM" -"3245252352","3245252607","BG","BGR","BULGARIA" -"3245252608","3245253631","UA","UKR","UKRAINE" -"3245253632","3245254143","LV","LVA","LATVIA" -"3245254144","3245254655","DK","DNK","DENMARK" -"3245254656","3245255167","UA","UKR","UKRAINE" -"3245255168","3245255679","TR","TUR","TURKEY" -"3245255680","3245257215","UA","UKR","UKRAINE" -"3245257216","3245257727","DE","DEU","GERMANY" -"3245257728","3245258239","GB","GBR","UNITED KINGDOM" -"3245258240","3245258751","AT","AUT","AUSTRIA" -"3245258752","3245259263","UA","UKR","UKRAINE" -"3245259264","3245259775","SK","SVK","SLOVAKIA" -"3245259776","3245260287","UA","UKR","UKRAINE" -"3245260288","3245260799","BE","BEL","BELGIUM" -"3245260800","3245261823","DE","DEU","GERMANY" -"3245261824","3245262847","DK","DNK","DENMARK" -"3245262848","3245263871","IT","ITA","ITALY" -"3245263872","3245264895","DE","DEU","GERMANY" -"3245264896","3245266943","TR","TUR","TURKEY" -"3245266944","3245268991","BG","BGR","BULGARIA" -"3245268992","3245270015","FI","FIN","FINLAND" -"3245270016","3245271039","PL","POL","POLAND" -"3245271040","3245272063","NL","NLD","NETHERLANDS" -"3245272064","3245273087","RU","RUS","RUSSIAN FEDERATION" -"3245273088","3245275135","GB","GBR","UNITED KINGDOM" -"3245275136","3245277183","BE","BEL","BELGIUM" -"3245277184","3245277695","UA","UKR","UKRAINE" -"3245277696","3245278207","RU","RUS","RUSSIAN FEDERATION" -"3245278208","3245278719","GB","GBR","UNITED KINGDOM" -"3245278720","3245279743","UA","UKR","UKRAINE" -"3245279744","3245280255","TJ","TJK","TAJIKISTAN" -"3245280256","3245280767","BE","BEL","BELGIUM" -"3245280768","3245281279","FR","FRA","FRANCE" -"3245281280","3245281791","RO","ROM","ROMANIA" -"3245281792","3245282303","ES","ESP","SPAIN" -"3245282304","3245282815","IT","ITA","ITALY" -"3245282816","3245283327","PL","POL","POLAND" -"3245283328","3245283839","GB","GBR","UNITED KINGDOM" -"3245283840","3245284351","PL","POL","POLAND" -"3245284352","3245284863","GB","GBR","UNITED KINGDOM" -"3245284864","3245285375","PL","POL","POLAND" -"3245285376","3245285631","NL","NLD","NETHERLANDS" -"3245285632","3245285887","GB","GBR","UNITED KINGDOM" -"3245285888","3245286143","DE","DEU","GERMANY" -"3245286144","3245286399","GB","GBR","UNITED KINGDOM" -"3245286400","3245287423","PL","POL","POLAND" -"3245287424","3245287679","DE","DEU","GERMANY" -"3245287680","3245287935","PL","POL","POLAND" -"3245287936","3245288191","PT","PRT","PORTUGAL" -"3245288192","3245288703","DE","DEU","GERMANY" -"3245288704","3245288959","FI","FIN","FINLAND" -"3245288960","3245289215","IT","ITA","ITALY" -"3245289216","3245289471","AT","AUT","AUSTRIA" -"3245289472","3245290495","UA","UKR","UKRAINE" -"3245290496","3245291519","LU","LUX","LUXEMBOURG" -"3245291520","3245292543","DE","DEU","GERMANY" -"3245292544","3245293567","UA","UKR","UKRAINE" -"3245293568","3245294079","FI","FIN","FINLAND" -"3245294080","3245294591","ES","ESP","SPAIN" -"3245294592","3245295103","RO","ROM","ROMANIA" -"3245295104","3245296127","IT","ITA","ITALY" -"3245296128","3245296639","GB","GBR","UNITED KINGDOM" -"3245296640","3245297151","TJ","TJK","TAJIKISTAN" -"3245297152","3245297663","IT","ITA","ITALY" -"3245297664","3245297919","FR","FRA","FRANCE" -"3245297920","3245298175","NL","NLD","NETHERLANDS" -"3245298176","3245298431","IE","IRL","IRELAND" -"3245298432","3245298687","UA","UKR","UKRAINE" -"3245298688","3245298943","GB","GBR","UNITED KINGDOM" -"3245298944","3245299199","UA","UKR","UKRAINE" -"3245299200","3245299455","GB","GBR","UNITED KINGDOM" -"3245299456","3245299711","CY","CYP","CYPRUS" -"3245299712","3245299967","DE","DEU","GERMANY" -"3245299968","3245300223","BG","BGR","BULGARIA" -"3245300224","3245300479","FR","FRA","FRANCE" -"3245300480","3245300991","RU","RUS","RUSSIAN FEDERATION" -"3245300992","3245301247","FI","FIN","FINLAND" -"3245301248","3245301503","DK","DNK","DENMARK" -"3245301504","3245301759","BE","BEL","BELGIUM" -"3245301760","3245302783","SK","SVK","SLOVAKIA" -"3245302784","3245303807","DE","DEU","GERMANY" -"3245303808","3245304831","SE","SWE","SWEDEN" -"3245304832","3245306367","DE","DEU","GERMANY" -"3245306368","3245306879","UA","UKR","UKRAINE" -"3245306880","3245307391","RU","RUS","RUSSIAN FEDERATION" -"3245307392","3245307903","FI","FIN","FINLAND" -"3245307904","3245308415","RO","ROM","ROMANIA" -"3245308416","3245308927","ES","ESP","SPAIN" -"3245308928","3245309439","SE","SWE","SWEDEN" -"3245309440","3245309951","UA","UKR","UKRAINE" -"3245309952","3245311999","CZ","CZE","CZECH REPUBLIC" -"3245312000","3245314047","GB","GBR","UNITED KINGDOM" -"3245314048","3245315071","PL","POL","POLAND" -"3245315072","3245316095","IT","ITA","ITALY" -"3245316096","3245317119","SE","SWE","SWEDEN" -"3245317120","3245318143","UA","UKR","UKRAINE" -"3245318144","3245318399","IT","ITA","ITALY" -"3245318400","3245318655","RO","ROM","ROMANIA" -"3245318656","3245318911","DK","DNK","DENMARK" -"3245318912","3245319167","DE","DEU","GERMANY" -"3245319168","3245319423","HR","HRV","CROATIA" -"3245319424","3245319679","SE","SWE","SWEDEN" -"3245319680","3245319935","PL","POL","POLAND" -"3245319936","3245320191","DE","DEU","GERMANY" -"3245320192","3245320703","GB","GBR","UNITED KINGDOM" -"3245320704","3245320959","DE","DEU","GERMANY" -"3245320960","3245321215","IE","IRL","IRELAND" -"3245321216","3245321471","NL","NLD","NETHERLANDS" -"3245321472","3245321727","UA","UKR","UKRAINE" -"3245321728","3245321983","PL","POL","POLAND" -"3245321984","3245322239","DE","DEU","GERMANY" -"3245322240","3245323263","RU","RUS","RUSSIAN FEDERATION" -"3245323264","3245325311","GB","GBR","UNITED KINGDOM" -"3245325312","3245326335","UA","UKR","UKRAINE" -"3245326336","3245326847","SI","SVN","SLOVENIA" -"3245326848","3245327359","BG","BGR","BULGARIA" -"3245327360","3245327871","CH","CHE","SWITZERLAND" -"3245327872","3245328383","DE","DEU","GERMANY" -"3245328384","3245328895","GB","GBR","UNITED KINGDOM" -"3245328896","3245329407","CH","CHE","SWITZERLAND" -"3245329408","3245329919","UA","UKR","UKRAINE" -"3245329920","3245333503","DE","DEU","GERMANY" -"3245333504","3245334527","SI","SVN","SLOVENIA" -"3245334528","3245334783","HU","HUN","HUNGARY" -"3245334784","3245335039","BE","BEL","BELGIUM" -"3245335040","3245335551","GB","GBR","UNITED KINGDOM" -"3245335552","3245335807","NL","NLD","NETHERLANDS" -"3245335808","3245336063","RO","ROM","ROMANIA" -"3245336064","3245336575","GB","GBR","UNITED KINGDOM" -"3245336576","3245336831","RO","ROM","ROMANIA" -"3245336832","3245337087","DE","DEU","GERMANY" -"3245337088","3245337343","GB","GBR","UNITED KINGDOM" -"3245337344","3245337599","BE","BEL","BELGIUM" -"3245337600","3245337855","PL","POL","POLAND" -"3245337856","3245338367","DE","DEU","GERMANY" -"3245338368","3245339647","UA","UKR","UKRAINE" -"3245339648","3245340671","LV","LVA","LATVIA" -"3245340672","3245341695","UA","UKR","UKRAINE" -"3245341696","3245342719","RU","RUS","RUSSIAN FEDERATION" -"3245342720","3245867007","GB","GBR","UNITED KINGDOM" -"3245867008","3245868543","IE","IRL","IRELAND" -"3245868544","3245868575","GB","GBR","UNITED KINGDOM" -"3245868576","3245878303","IE","IRL","IRELAND" -"3245878304","3245878335","US","USA","UNITED STATES" -"3245878336","3245888703","IE","IRL","IRELAND" -"3245888704","3245888767","US","USA","UNITED STATES" -"3245888768","3245892639","IE","IRL","IRELAND" -"3245892640","3245892647","US","USA","UNITED STATES" -"3245892648","3245894391","IE","IRL","IRELAND" -"3245894392","3245894399","GB","GBR","UNITED KINGDOM" -"3245894400","3245894719","IE","IRL","IRELAND" -"3245894720","3245894751","US","USA","UNITED STATES" -"3245894752","3245896311","IE","IRL","IRELAND" -"3245896312","3245896319","GB","GBR","UNITED KINGDOM" -"3245896320","3245896991","IE","IRL","IRELAND" -"3245896992","3245897007","US","USA","UNITED STATES" -"3245897008","3245899343","IE","IRL","IRELAND" -"3245899344","3245899351","GB","GBR","UNITED KINGDOM" -"3245899352","3245901831","IE","IRL","IRELAND" -"3245901832","3245901839","GB","GBR","UNITED KINGDOM" -"3245901840","3245902887","IE","IRL","IRELAND" -"3245902888","3245902895","GB","GBR","UNITED KINGDOM" -"3245902896","3245902903","IE","IRL","IRELAND" -"3245902904","3245902911","GB","GBR","UNITED KINGDOM" -"3245902912","3245903031","IE","IRL","IRELAND" -"3245903032","3245903039","GB","GBR","UNITED KINGDOM" -"3245903040","3245903959","IE","IRL","IRELAND" -"3245903960","3245903967","FR","FRA","FRANCE" -"3245903968","3245906367","IE","IRL","IRELAND" -"3245906368","3245906431","GB","GBR","UNITED KINGDOM" -"3245906432","3245910831","IE","IRL","IRELAND" -"3245910832","3245910847","GB","GBR","UNITED KINGDOM" -"3245910848","3245921279","IE","IRL","IRELAND" -"3245921280","3245921535","BE","BEL","BELGIUM" -"3245921536","3245924647","IE","IRL","IRELAND" -"3245924648","3245924655","GB","GBR","UNITED KINGDOM" -"3245924656","3245924671","IE","IRL","IRELAND" -"3245924672","3245924679","GB","GBR","UNITED KINGDOM" -"3245924680","3245924687","IE","IRL","IRELAND" -"3245924688","3245924695","GB","GBR","UNITED KINGDOM" -"3245924696","3245924751","IE","IRL","IRELAND" -"3245924752","3245924767","GB","GBR","UNITED KINGDOM" -"3245924768","3245927959","IE","IRL","IRELAND" -"3245927960","3245927967","US","USA","UNITED STATES" -"3245927968","3245931263","IE","IRL","IRELAND" -"3245931264","3245931519","GB","GBR","UNITED KINGDOM" -"3245931520","3245932543","IE","IRL","IRELAND" -"3245932544","3245998079","BE","BEL","BELGIUM" -"3245998080","3246100351","GB","GBR","UNITED KINGDOM" -"3246100352","3246100367","DE","DEU","GERMANY" -"3246100368","3246128479","GB","GBR","UNITED KINGDOM" -"3246128480","3246128495","DE","DEU","GERMANY" -"3246128496","3246129151","GB","GBR","UNITED KINGDOM" -"3246129152","3246141439","RU","RUS","RUSSIAN FEDERATION" -"3246141440","3246141695","UA","UKR","UKRAINE" -"3246141696","3246142975","RU","RUS","RUSSIAN FEDERATION" -"3246142976","3246143231","UA","UKR","UKRAINE" -"3246143232","3246143743","RU","RUS","RUSSIAN FEDERATION" -"3246143744","3246143999","UA","UKR","UKRAINE" -"3246144000","3246144255","RU","RUS","RUSSIAN FEDERATION" -"3246144256","3246145023","UA","UKR","UKRAINE" -"3246145024","3246147839","RU","RUS","RUSSIAN FEDERATION" -"3246147840","3246148095","UA","UKR","UKRAINE" -"3246148096","3246148607","RU","RUS","RUSSIAN FEDERATION" -"3246148608","3246149631","UA","UKR","UKRAINE" -"3246149632","3246260223","RU","RUS","RUSSIAN FEDERATION" -"3246260224","3246325759","PT","PRT","PORTUGAL" -"3246325760","3246328831","ES","ESP","SPAIN" -"3246329088","3246329855","ES","ESP","SPAIN" -"3246350848","3246351103","ES","ESP","SPAIN" -"3246351616","3246352639","ES","ESP","SPAIN" -"3246375160","3246375423","GB","GBR","UNITED KINGDOM" -"3246378496","3246379007","ES","ESP","SPAIN" -"3246379008","3246381055","GB","GBR","UNITED KINGDOM" -"3246391296","3246418887","GB","GBR","UNITED KINGDOM" -"3246418888","3246418895","SE","SWE","SWEDEN" -"3246418896","3246613503","GB","GBR","UNITED KINGDOM" -"3246613504","3246614527","HU","HUN","HUNGARY" -"3246614528","3246784511","GB","GBR","UNITED KINGDOM" -"3246784512","3246915583","CH","CHE","SWITZERLAND" -"3246915584","3247046655","PT","PRT","PORTUGAL" -"3247046656","3247046911","AT","AUT","AUSTRIA" -"3247046912","3247048191","SI","SVN","SLOVENIA" -"3247048704","3247048959","EE","EST","ESTONIA" -"3247048960","3247049215","SI","SVN","SLOVENIA" -"3247049216","3247054079","DE","DEU","GERMANY" -"3247054080","3247054335","CH","CHE","SWITZERLAND" -"3247054336","3247054591","LT","LTU","LITHUANIA" -"3247054592","3247054847","DE","DEU","GERMANY" -"3247054848","3247063039","SI","SVN","SLOVENIA" -"3247063040","3247063295","FR","FRA","FRANCE" -"3247063296","3247063551","GR","GRC","GREECE" -"3247063552","3247063807","DE","DEU","GERMANY" -"3247063808","3247064063","BG","BGR","BULGARIA" -"3247064064","3247064319","DE","DEU","GERMANY" -"3247064320","3247064575","CH","CHE","SWITZERLAND" -"3247064576","3247064831","RU","RUS","RUSSIAN FEDERATION" -"3247064832","3247065087","SE","SWE","SWEDEN" -"3247065088","3247065343","US","USA","UNITED STATES" -"3247065344","3247065599","CH","CHE","SWITZERLAND" -"3247065600","3247065855","SE","SWE","SWEDEN" -"3247065856","3247066111","GB","GBR","UNITED KINGDOM" -"3247066112","3247066367","DK","DNK","DENMARK" -"3247066368","3247066623","UA","UKR","UKRAINE" -"3247066624","3247066879","CZ","CZE","CZECH REPUBLIC" -"3247066880","3247067135","RU","RUS","RUSSIAN FEDERATION" -"3247067136","3247067647","DE","DEU","GERMANY" -"3247067648","3247067903","RU","RUS","RUSSIAN FEDERATION" -"3247067904","3247068159","CH","CHE","SWITZERLAND" -"3247068160","3247068415","UA","UKR","UKRAINE" -"3247068416","3247068671","RO","ROM","ROMANIA" -"3247068672","3247068927","GB","GBR","UNITED KINGDOM" -"3247068928","3247069183","UA","UKR","UKRAINE" -"3247069184","3247069439","DE","DEU","GERMANY" -"3247069440","3247069695","RU","RUS","RUSSIAN FEDERATION" -"3247069696","3247069951","FR","FRA","FRANCE" -"3247069952","3247070207","DE","DEU","GERMANY" -"3247070208","3247070463","IL","ISR","ISRAEL" -"3247070464","3247070719","UA","UKR","UKRAINE" -"3247070720","3247070975","AT","AUT","AUSTRIA" -"3247070976","3247071231","GB","GBR","UNITED KINGDOM" -"3247071232","3247071487","DE","DEU","GERMANY" -"3247071488","3247072255","RO","ROM","ROMANIA" -"3247072256","3247072511","IE","IRL","IRELAND" -"3247072512","3247072767","BE","BEL","BELGIUM" -"3247072768","3247073023","SE","SWE","SWEDEN" -"3247073024","3247073279","RO","ROM","ROMANIA" -"3247073280","3247073535","DE","DEU","GERMANY" -"3247073536","3247073791","AT","AUT","AUSTRIA" -"3247073792","3247074047","CZ","CZE","CZECH REPUBLIC" -"3247074048","3247074303","GB","GBR","UNITED KINGDOM" -"3247074304","3247074559","DE","DEU","GERMANY" -"3247074560","3247074815","SE","SWE","SWEDEN" -"3247074816","3247075071","PL","POL","POLAND" -"3247075072","3247075327","IE","IRL","IRELAND" -"3247075328","3247075839","DE","DEU","GERMANY" -"3247075840","3247076095","UA","UKR","UKRAINE" -"3247076096","3247076351","DK","DNK","DENMARK" -"3247076352","3247076607","RU","RUS","RUSSIAN FEDERATION" -"3247076608","3247076863","DE","DEU","GERMANY" -"3247076864","3247077119","PL","POL","POLAND" -"3247077120","3247077375","DE","DEU","GERMANY" -"3247077376","3247077631","GB","GBR","UNITED KINGDOM" -"3247077632","3247077887","NL","NLD","NETHERLANDS" -"3247077888","3247078143","UA","UKR","UKRAINE" -"3247078144","3247078399","AT","AUT","AUSTRIA" -"3247078400","3247078655","DK","DNK","DENMARK" -"3247078656","3247078911","HU","HUN","HUNGARY" -"3247078912","3247079167","FI","FIN","FINLAND" -"3247079168","3247079423","HU","HUN","HUNGARY" -"3247079424","3247080447","RU","RUS","RUSSIAN FEDERATION" -"3247080448","3247081471","UA","UKR","UKRAINE" -"3247081472","3247083519","PL","POL","POLAND" -"3247083520","3247084543","UA","UKR","UKRAINE" -"3247084544","3247086591","RU","RUS","RUSSIAN FEDERATION" -"3247086592","3247087615","NL","NLD","NETHERLANDS" -"3247087616","3247088639","IT","ITA","ITALY" -"3247088640","3247089663","DE","DEU","GERMANY" -"3247089664","3247090687","RO","ROM","ROMANIA" -"3247090688","3247091711","LV","LVA","LATVIA" -"3247091712","3247092735","RU","RUS","RUSSIAN FEDERATION" -"3247092736","3247093759","DE","DEU","GERMANY" -"3247093760","3247094783","UA","UKR","UKRAINE" -"3247094784","3247095807","LV","LVA","LATVIA" -"3247095808","3247097855","RO","ROM","ROMANIA" -"3247097856","3247098879","FI","FIN","FINLAND" -"3247098880","3247099903","NL","NLD","NETHERLANDS" -"3247099904","3247100927","PL","POL","POLAND" -"3247100928","3247101951","CH","CHE","SWITZERLAND" -"3247101952","3247102975","SE","SWE","SWEDEN" -"3247102976","3247106047","NL","NLD","NETHERLANDS" -"3247106048","3247107071","RU","RUS","RUSSIAN FEDERATION" -"3247107072","3247108095","UA","UKR","UKRAINE" -"3247108096","3247109119","PL","POL","POLAND" -"3247109120","3247110143","UA","UKR","UKRAINE" -"3247110144","3247111167","NL","NLD","NETHERLANDS" -"3247111168","3247112191","DE","DEU","GERMANY" -"3247112192","3247177727","FR","FRA","FRANCE" -"3247177728","3247243263","TR","TUR","TURKEY" -"3247243264","3247244287","DE","DEU","GERMANY" -"3247244288","3247244351","NL","NLD","NETHERLANDS" -"3247244352","3247244359","DE","DEU","GERMANY" -"3247244360","3247244367","NL","NLD","NETHERLANDS" -"3247244368","3247244375","DE","DEU","GERMANY" -"3247244376","3247244927","NL","NLD","NETHERLANDS" -"3247244928","3247244935","DE","DEU","GERMANY" -"3247244936","3247246015","NL","NLD","NETHERLANDS" -"3247246016","3247246023","DE","DEU","GERMANY" -"3247246024","3247246039","NL","NLD","NETHERLANDS" -"3247246040","3247246047","DE","DEU","GERMANY" -"3247246048","3247246967","NL","NLD","NETHERLANDS" -"3247246968","3247246975","DE","DEU","GERMANY" -"3247246976","3247247111","NL","NLD","NETHERLANDS" -"3247247112","3247247119","DE","DEU","GERMANY" -"3247247120","3247247175","NL","NLD","NETHERLANDS" -"3247247176","3247247183","DE","DEU","GERMANY" -"3247247184","3247247543","NL","NLD","NETHERLANDS" -"3247247544","3247247551","DE","DEU","GERMANY" -"3247247552","3247247671","NL","NLD","NETHERLANDS" -"3247247672","3247247679","DE","DEU","GERMANY" -"3247247680","3247247879","NL","NLD","NETHERLANDS" -"3247247880","3247247887","DE","DEU","GERMANY" -"3247247888","3247247999","NL","NLD","NETHERLANDS" -"3247248000","3247248015","DE","DEU","GERMANY" -"3247248016","3247248095","NL","NLD","NETHERLANDS" -"3247248096","3247248103","DE","DEU","GERMANY" -"3247248104","3247248159","NL","NLD","NETHERLANDS" -"3247248160","3247248167","DE","DEU","GERMANY" -"3247248168","3247248175","NL","NLD","NETHERLANDS" -"3247248176","3247248183","DE","DEU","GERMANY" -"3247248184","3247248359","NL","NLD","NETHERLANDS" -"3247248360","3247248367","DE","DEU","GERMANY" -"3247248368","3247248383","NL","NLD","NETHERLANDS" -"3247248384","3247250431","DE","DEU","GERMANY" -"3247250432","3247252959","NL","NLD","NETHERLANDS" -"3247252960","3247252967","DE","DEU","GERMANY" -"3247252968","3247252999","NL","NLD","NETHERLANDS" -"3247253000","3247253007","DE","DEU","GERMANY" -"3247253008","3247253111","NL","NLD","NETHERLANDS" -"3247253112","3247253119","DE","DEU","GERMANY" -"3247253120","3247253503","NL","NLD","NETHERLANDS" -"3247253504","3247255295","DE","DEU","GERMANY" -"3247255296","3247255655","NL","NLD","NETHERLANDS" -"3247255656","3247255663","DE","DEU","GERMANY" -"3247255664","3247255711","NL","NLD","NETHERLANDS" -"3247255712","3247255719","DE","DEU","GERMANY" -"3247255720","3247256623","NL","NLD","NETHERLANDS" -"3247256624","3247256631","DE","DEU","GERMANY" -"3247256632","3247256831","NL","NLD","NETHERLANDS" -"3247256832","3247260671","DE","DEU","GERMANY" -"3247260672","3247260879","NL","NLD","NETHERLANDS" -"3247260880","3247260887","DE","DEU","GERMANY" -"3247260888","3247260983","NL","NLD","NETHERLANDS" -"3247260984","3247260991","DE","DEU","GERMANY" -"3247260992","3247261215","NL","NLD","NETHERLANDS" -"3247261216","3247261223","DE","DEU","GERMANY" -"3247261224","3247261935","NL","NLD","NETHERLANDS" -"3247261936","3247261943","DE","DEU","GERMANY" -"3247261944","3247261951","NL","NLD","NETHERLANDS" -"3247261952","3247261959","DE","DEU","GERMANY" -"3247261960","3247262151","NL","NLD","NETHERLANDS" -"3247262152","3247262159","DE","DEU","GERMANY" -"3247262160","3247262439","NL","NLD","NETHERLANDS" -"3247262440","3247262447","DE","DEU","GERMANY" -"3247262448","3247262663","NL","NLD","NETHERLANDS" -"3247262664","3247262671","DE","DEU","GERMANY" -"3247262672","3247263335","NL","NLD","NETHERLANDS" -"3247263336","3247263343","DE","DEU","GERMANY" -"3247263344","3247263599","NL","NLD","NETHERLANDS" -"3247263600","3247263607","DE","DEU","GERMANY" -"3247263608","3247263623","NL","NLD","NETHERLANDS" -"3247263624","3247263631","DE","DEU","GERMANY" -"3247263632","3247263911","NL","NLD","NETHERLANDS" -"3247263912","3247263919","DE","DEU","GERMANY" -"3247263920","3247263927","NL","NLD","NETHERLANDS" -"3247263928","3247263935","DE","DEU","GERMANY" -"3247263936","3247265095","NL","NLD","NETHERLANDS" -"3247265096","3247265103","DE","DEU","GERMANY" -"3247265104","3247265239","NL","NLD","NETHERLANDS" -"3247265240","3247265247","DE","DEU","GERMANY" -"3247265248","3247265663","NL","NLD","NETHERLANDS" -"3247265664","3247265671","DE","DEU","GERMANY" -"3247265672","3247266287","NL","NLD","NETHERLANDS" -"3247266288","3247266295","DE","DEU","GERMANY" -"3247266296","3247266359","NL","NLD","NETHERLANDS" -"3247266360","3247266367","DE","DEU","GERMANY" -"3247266368","3247266559","NL","NLD","NETHERLANDS" -"3247266560","3247271679","DE","DEU","GERMANY" -"3247271680","3247272375","NL","NLD","NETHERLANDS" -"3247272376","3247272383","DE","DEU","GERMANY" -"3247272384","3247272671","NL","NLD","NETHERLANDS" -"3247272672","3247272679","DE","DEU","GERMANY" -"3247272680","3247273063","NL","NLD","NETHERLANDS" -"3247273064","3247273071","DE","DEU","GERMANY" -"3247273072","3247273751","NL","NLD","NETHERLANDS" -"3247273752","3247273759","DE","DEU","GERMANY" -"3247273760","3247274239","NL","NLD","NETHERLANDS" -"3247274240","3247274495","DE","DEU","GERMANY" -"3247274496","3247274519","NL","NLD","NETHERLANDS" -"3247274520","3247274535","DE","DEU","GERMANY" -"3247274536","3247274567","NL","NLD","NETHERLANDS" -"3247274568","3247274575","DE","DEU","GERMANY" -"3247274576","3247274863","NL","NLD","NETHERLANDS" -"3247274864","3247274871","DE","DEU","GERMANY" -"3247274872","3247275263","NL","NLD","NETHERLANDS" -"3247275264","3247276031","DE","DEU","GERMANY" -"3247276032","3247276615","NL","NLD","NETHERLANDS" -"3247276616","3247276631","DE","DEU","GERMANY" -"3247276632","3247276871","NL","NLD","NETHERLANDS" -"3247276872","3247276879","DE","DEU","GERMANY" -"3247276880","3247276927","NL","NLD","NETHERLANDS" -"3247276928","3247276935","DE","DEU","GERMANY" -"3247276936","3247276951","NL","NLD","NETHERLANDS" -"3247276952","3247276959","DE","DEU","GERMANY" -"3247276960","3247278103","NL","NLD","NETHERLANDS" -"3247278104","3247278111","DE","DEU","GERMANY" -"3247278112","3247278847","NL","NLD","NETHERLANDS" -"3247278848","3247280127","DE","DEU","GERMANY" -"3247280128","3247280255","NL","NLD","NETHERLANDS" -"3247280256","3247280263","DE","DEU","GERMANY" -"3247280264","3247280279","NL","NLD","NETHERLANDS" -"3247280280","3247280287","DE","DEU","GERMANY" -"3247280288","3247280807","NL","NLD","NETHERLANDS" -"3247280808","3247280815","DE","DEU","GERMANY" -"3247280816","3247281447","NL","NLD","NETHERLANDS" -"3247281448","3247281455","DE","DEU","GERMANY" -"3247281456","3247281527","NL","NLD","NETHERLANDS" -"3247281528","3247281535","DE","DEU","GERMANY" -"3247281536","3247281567","NL","NLD","NETHERLANDS" -"3247281568","3247281575","DE","DEU","GERMANY" -"3247281576","3247281663","NL","NLD","NETHERLANDS" -"3247281664","3247281671","DE","DEU","GERMANY" -"3247281672","3247281855","NL","NLD","NETHERLANDS" -"3247281856","3247281863","DE","DEU","GERMANY" -"3247281864","3247282999","NL","NLD","NETHERLANDS" -"3247283000","3247283007","DE","DEU","GERMANY" -"3247283008","3247283263","NL","NLD","NETHERLANDS" -"3247283264","3247283271","DE","DEU","GERMANY" -"3247283272","3247283759","NL","NLD","NETHERLANDS" -"3247283760","3247283767","DE","DEU","GERMANY" -"3247283768","3247283927","NL","NLD","NETHERLANDS" -"3247283928","3247283935","DE","DEU","GERMANY" -"3247283936","3247283991","NL","NLD","NETHERLANDS" -"3247283992","3247283999","DE","DEU","GERMANY" -"3247284000","3247284015","NL","NLD","NETHERLANDS" -"3247284016","3247284023","DE","DEU","GERMANY" -"3247284024","3247284263","NL","NLD","NETHERLANDS" -"3247284264","3247284271","DE","DEU","GERMANY" -"3247284272","3247284319","NL","NLD","NETHERLANDS" -"3247284320","3247284327","DE","DEU","GERMANY" -"3247284328","3247285471","NL","NLD","NETHERLANDS" -"3247285472","3247285479","DE","DEU","GERMANY" -"3247285480","3247286087","NL","NLD","NETHERLANDS" -"3247286088","3247286095","DE","DEU","GERMANY" -"3247286096","3247286455","NL","NLD","NETHERLANDS" -"3247286456","3247286463","DE","DEU","GERMANY" -"3247286464","3247286983","NL","NLD","NETHERLANDS" -"3247286984","3247286991","DE","DEU","GERMANY" -"3247286992","3247287895","NL","NLD","NETHERLANDS" -"3247287896","3247287903","DE","DEU","GERMANY" -"3247287904","3247288319","NL","NLD","NETHERLANDS" -"3247288320","3247302655","DE","DEU","GERMANY" -"3247302656","3247302791","NL","NLD","NETHERLANDS" -"3247302792","3247302799","DE","DEU","GERMANY" -"3247302800","3247303343","NL","NLD","NETHERLANDS" -"3247303344","3247303351","DE","DEU","GERMANY" -"3247303352","3247303615","NL","NLD","NETHERLANDS" -"3247303616","3247303623","DE","DEU","GERMANY" -"3247303624","3247304007","NL","NLD","NETHERLANDS" -"3247304008","3247304015","DE","DEU","GERMANY" -"3247304016","3247304351","NL","NLD","NETHERLANDS" -"3247304352","3247304359","DE","DEU","GERMANY" -"3247304360","3247305583","NL","NLD","NETHERLANDS" -"3247305584","3247305591","DE","DEU","GERMANY" -"3247305592","3247305623","NL","NLD","NETHERLANDS" -"3247305624","3247305631","DE","DEU","GERMANY" -"3247305632","3247305959","NL","NLD","NETHERLANDS" -"3247305960","3247305975","DE","DEU","GERMANY" -"3247305976","3247305999","NL","NLD","NETHERLANDS" -"3247306000","3247306007","DE","DEU","GERMANY" -"3247306008","3247306199","NL","NLD","NETHERLANDS" -"3247306200","3247306207","DE","DEU","GERMANY" -"3247306208","3247306295","NL","NLD","NETHERLANDS" -"3247306296","3247306303","DE","DEU","GERMANY" -"3247306304","3247306311","NL","NLD","NETHERLANDS" -"3247306312","3247306327","DE","DEU","GERMANY" -"3247306328","3247306423","NL","NLD","NETHERLANDS" -"3247306424","3247306431","DE","DEU","GERMANY" -"3247306432","3247306447","NL","NLD","NETHERLANDS" -"3247306448","3247306455","DE","DEU","GERMANY" -"3247306456","3247306583","NL","NLD","NETHERLANDS" -"3247306584","3247306599","DE","DEU","GERMANY" -"3247306600","3247306671","NL","NLD","NETHERLANDS" -"3247306672","3247306679","DE","DEU","GERMANY" -"3247306680","3247306783","NL","NLD","NETHERLANDS" -"3247306784","3247306791","DE","DEU","GERMANY" -"3247306792","3247306799","NL","NLD","NETHERLANDS" -"3247306800","3247306807","DE","DEU","GERMANY" -"3247306808","3247306895","NL","NLD","NETHERLANDS" -"3247306896","3247306903","DE","DEU","GERMANY" -"3247306904","3247306919","NL","NLD","NETHERLANDS" -"3247306920","3247306943","DE","DEU","GERMANY" -"3247306944","3247306959","NL","NLD","NETHERLANDS" -"3247306960","3247306967","DE","DEU","GERMANY" -"3247306968","3247306999","NL","NLD","NETHERLANDS" -"3247307000","3247307007","DE","DEU","GERMANY" -"3247307008","3247307071","NL","NLD","NETHERLANDS" -"3247307072","3247307079","DE","DEU","GERMANY" -"3247307080","3247307303","NL","NLD","NETHERLANDS" -"3247307304","3247307311","DE","DEU","GERMANY" -"3247307312","3247307375","NL","NLD","NETHERLANDS" -"3247307376","3247307383","DE","DEU","GERMANY" -"3247307384","3247307415","NL","NLD","NETHERLANDS" -"3247307416","3247307423","DE","DEU","GERMANY" -"3247307424","3247307543","NL","NLD","NETHERLANDS" -"3247307544","3247307551","DE","DEU","GERMANY" -"3247307552","3247307575","NL","NLD","NETHERLANDS" -"3247307576","3247307583","DE","DEU","GERMANY" -"3247307584","3247307591","NL","NLD","NETHERLANDS" -"3247307592","3247307599","DE","DEU","GERMANY" -"3247307600","3247307871","NL","NLD","NETHERLANDS" -"3247307872","3247307879","DE","DEU","GERMANY" -"3247307880","3247307991","NL","NLD","NETHERLANDS" -"3247307992","3247307999","DE","DEU","GERMANY" -"3247308000","3247308111","NL","NLD","NETHERLANDS" -"3247308112","3247308119","DE","DEU","GERMANY" -"3247308120","3247308415","NL","NLD","NETHERLANDS" -"3247308416","3247308423","DE","DEU","GERMANY" -"3247308424","3247308479","NL","NLD","NETHERLANDS" -"3247308480","3247308487","DE","DEU","GERMANY" -"3247308488","3247308727","NL","NLD","NETHERLANDS" -"3247308728","3247308735","DE","DEU","GERMANY" -"3247308736","3247308799","NL","NLD","NETHERLANDS" -"3247308800","3247309055","BG","BGR","BULGARIA" -"3247309056","3247313663","FI","FIN","FINLAND" -"3247313920","3247316479","FI","FIN","FINLAND" -"3247316480","3247316735","NO","NOR","NORWAY" -"3247316992","3247322367","FI","FIN","FINLAND" -"3247322368","3247322623","DE","DEU","GERMANY" -"3247322624","3247323135","FI","FIN","FINLAND" -"3247323136","3247323647","RU","RUS","RUSSIAN FEDERATION" -"3247323648","3247324415","FI","FIN","FINLAND" -"3247324416","3247324671","AT","AUT","AUSTRIA" -"3247324672","3247324927","CH","CHE","SWITZERLAND" -"3247324928","3247333631","FI","FIN","FINLAND" -"3247333632","3247333887","DE","DEU","GERMANY" -"3247333888","3247334399","FI","FIN","FINLAND" -"3247334400","3247334655","NO","NOR","NORWAY" -"3247334656","3247335167","FI","FIN","FINLAND" -"3247335168","3247335423","DK","DNK","DENMARK" -"3247335424","3247336447","FI","FIN","FINLAND" -"3247336448","3247337215","NO","NOR","NORWAY" -"3247337216","3247337471","CH","CHE","SWITZERLAND" -"3247337472","3247337983","PL","POL","POLAND" -"3247338240","3247338495","PL","POL","POLAND" -"3247338496","3247338751","SI","SVN","SLOVENIA" -"3247338752","3247339519","GB","GBR","UNITED KINGDOM" -"3247339520","3247340543","FI","FIN","FINLAND" -"3247340544","3247340799","UA","UKR","UKRAINE" -"3247340800","3247341055","CH","CHE","SWITZERLAND" -"3247341056","3247341311","FI","FIN","FINLAND" -"3247341568","3247345919","FI","FIN","FINLAND" -"3247345920","3247346175","HU","HUN","HUNGARY" -"3247346176","3247346943","FI","FIN","FINLAND" -"3247346944","3247347199","SI","SVN","SLOVENIA" -"3247347200","3247347455","FI","FIN","FINLAND" -"3247347456","3247347711","IL","ISR","ISRAEL" -"3247347712","3247347967","FI","FIN","FINLAND" -"3247347968","3247348223","HU","HUN","HUNGARY" -"3247348224","3247348991","FI","FIN","FINLAND" -"3247348992","3247349247","DE","DEU","GERMANY" -"3247349248","3247349759","FI","FIN","FINLAND" -"3247349760","3247353855","SE","SWE","SWEDEN" -"3247353856","3247362047","FI","FIN","FINLAND" -"3247362048","3247362303","RO","ROM","ROMANIA" -"3247362304","3247362559","HU","HUN","HUNGARY" -"3247362560","3247362815","PL","POL","POLAND" -"3247362816","3247363071","DK","DNK","DENMARK" -"3247363072","3247363327","GB","GBR","UNITED KINGDOM" -"3247363328","3247363583","UA","UKR","UKRAINE" -"3247363584","3247363839","HU","HUN","HUNGARY" -"3247363840","3247364095","NL","NLD","NETHERLANDS" -"3247364096","3247364351","GB","GBR","UNITED KINGDOM" -"3247364352","3247364607","ES","ESP","SPAIN" -"3247364608","3247365119","UA","UKR","UKRAINE" -"3247365120","3247365375","GB","GBR","UNITED KINGDOM" -"3247365376","3247365631","UA","UKR","UKRAINE" -"3247365632","3247365887","SA","SAU","SAUDI ARABIA" -"3247365888","3247366143","DE","DEU","GERMANY" -"3247366144","3247371007","FI","FIN","FINLAND" -"3247371008","3247371263","PL","POL","POLAND" -"3247371264","3247371519","SE","SWE","SWEDEN" -"3247371520","3247371775","GB","GBR","UNITED KINGDOM" -"3247371776","3247374335","FI","FIN","FINLAND" -"3247374336","3247374591","RU","RUS","RUSSIAN FEDERATION" -"3247374592","3247394047","FI","FIN","FINLAND" -"3247394048","3247394303","PL","POL","POLAND" -"3247394304","3247397887","FI","FIN","FINLAND" -"3247398144","3247399423","FI","FIN","FINLAND" -"3247399424","3247399679","RU","RUS","RUSSIAN FEDERATION" -"3247399680","3247404799","FI","FIN","FINLAND" -"3247404800","3247405055","RU","RUS","RUSSIAN FEDERATION" -"3247405056","3247405311","RO","ROM","ROMANIA" -"3247405312","3247405567","PL","POL","POLAND" -"3247405568","3247405823","DE","DEU","GERMANY" -"3247405824","3247432191","FI","FIN","FINLAND" -"3247432192","3247432447","TR","TUR","TURKEY" -"3247432448","3247438079","FI","FIN","FINLAND" -"3247438080","3247438335","IT","ITA","ITALY" -"3247438336","3247439871","FI","FIN","FINLAND" -"3247439872","3247702015","ES","ESP","SPAIN" -"3247702016","3247702271","RO","ROM","ROMANIA" -"3247702272","3247703551","ES","ESP","SPAIN" -"3247704064","3247704831","ES","ESP","SPAIN" -"3247704832","3247705087","GB","GBR","UNITED KINGDOM" -"3247705088","3247705855","ES","ESP","SPAIN" -"3247705856","3247706111","RU","RUS","RUSSIAN FEDERATION" -"3247706112","3247711743","ES","ESP","SPAIN" -"3247711744","3247712255","IT","ITA","ITALY" -"3247712256","3247713279","ES","ESP","SPAIN" -"3247713280","3247713535","RU","RUS","RUSSIAN FEDERATION" -"3247713536","3247713791","BE","BEL","BELGIUM" -"3247713792","3247714047","SK","SVK","SLOVAKIA" -"3247714048","3247714303","RU","RUS","RUSSIAN FEDERATION" -"3247714304","3247716351","CH","CHE","SWITZERLAND" -"3247716352","3247717887","ES","ESP","SPAIN" -"3247717888","3247718399","CH","CHE","SWITZERLAND" -"3247718400","3247769599","ES","ESP","SPAIN" -"3247769600","3247771647","DE","DEU","GERMANY" -"3247771648","3247775743","ES","ESP","SPAIN" -"3247775744","3247779647","DE","DEU","GERMANY" -"3247779648","3247779839","IE","IRL","IRELAND" -"3247779840","3247783935","DE","DEU","GERMANY" -"3247783936","3247792127","GB","GBR","UNITED KINGDOM" -"3247792128","3247800319","FR","FRA","FRANCE" -"3247800320","3247816703","DK","DNK","DENMARK" -"3247816704","3247817471","BE","BEL","BELGIUM" -"3247817472","3247817727","CH","CHE","SWITZERLAND" -"3247817728","3247820799","BE","BEL","BELGIUM" -"3247820800","3247822335","CH","CHE","SWITZERLAND" -"3247822336","3247823103","DE","DEU","GERMANY" -"3247823104","3247823871","AT","AUT","AUSTRIA" -"3247823872","3247825151","BE","BEL","BELGIUM" -"3247825152","3247825919","CH","CHE","SWITZERLAND" -"3247825920","3247826943","BE","BEL","BELGIUM" -"3247826944","3247828991","CH","CHE","SWITZERLAND" -"3247828992","3247833087","BE","BEL","BELGIUM" -"3247833088","3247865855","RU","RUS","RUSSIAN FEDERATION" -"3247865856","3247871999","GB","GBR","UNITED KINGDOM" -"3247872000","3247875327","NL","NLD","NETHERLANDS" -"3247875584","3247876095","DE","DEU","GERMANY" -"3247876096","3247876351","PL","POL","POLAND" -"3247876352","3247876607","FR","FRA","FRANCE" -"3247876608","3247876863","ES","ESP","SPAIN" -"3247876864","3247877119","DE","DEU","GERMANY" -"3247877120","3247877631","GR","GRC","GREECE" -"3247877632","3247879167","AT","AUT","AUSTRIA" -"3247879168","3247882239","GB","GBR","UNITED KINGDOM" -"3247882240","3247898623","SE","SWE","SWEDEN" -"3247898624","3247899647","RU","RUS","RUSSIAN FEDERATION" -"3247899648","3247900671","DE","DEU","GERMANY" -"3247900672","3247901695","PL","POL","POLAND" -"3247901696","3247902719","UA","UKR","UKRAINE" -"3247902720","3247903743","GB","GBR","UNITED KINGDOM" -"3247903744","3247904767","BG","BGR","BULGARIA" -"3247904768","3247905791","GB","GBR","UNITED KINGDOM" -"3247905792","3247906815","RO","ROM","ROMANIA" -"3247906816","3247907839","DE","DEU","GERMANY" -"3247907840","3247908863","PL","POL","POLAND" -"3247908864","3247909887","BY","BLR","BELARUS" -"3247909888","3247910911","DE","DEU","GERMANY" -"3247910912","3247912959","PL","POL","POLAND" -"3247912960","3247913983","UA","UKR","UKRAINE" -"3247913984","3247915007","DE","DEU","GERMANY" -"3247915008","3247917055","PL","POL","POLAND" -"3247917056","3247918079","NL","NLD","NETHERLANDS" -"3247918080","3247919103","PL","POL","POLAND" -"3247919104","3247920127","BG","BGR","BULGARIA" -"3247920128","3247921151","FR","FRA","FRANCE" -"3247922176","3247923199","SE","SWE","SWEDEN" -"3247923200","3247925247","PL","POL","POLAND" -"3247925248","3247926271","UA","UKR","UKRAINE" -"3247926272","3247927295","RU","RUS","RUSSIAN FEDERATION" -"3247927296","3247928319","PL","POL","POLAND" -"3247928320","3247929343","HU","HUN","HUNGARY" -"3247929344","3247931391","GB","GBR","UNITED KINGDOM" -"3247931392","3247960063","FR","FRA","FRANCE" -"3247960064","3247962111","UA","UKR","UKRAINE" -"3247962112","3247963135","DE","DEU","GERMANY" -"3247963136","3247964159","UA","UKR","UKRAINE" -"3247964160","3248095231","ES","ESP","SPAIN" -"3248095232","3248095823","AT","AUT","AUSTRIA" -"3248095824","3248095831","HU","HUN","HUNGARY" -"3248095832","3248160767","AT","AUT","AUSTRIA" -"3248160768","3248226303","DE","DEU","GERMANY" -"3248226304","3248235007","NO","NOR","NORWAY" -"3248235008","3248235263","PK","PAK","PAKISTAN" -"3248235264","3248357375","NO","NOR","NORWAY" -"3248357376","3248370511","DE","DEU","GERMANY" -"3248370512","3248370519","AT","AUT","AUSTRIA" -"3248370520","3248371743","DE","DEU","GERMANY" -"3248371744","3248371751","PL","POL","POLAND" -"3248371752","3248372239","DE","DEU","GERMANY" -"3248372240","3248372247","AT","AUT","AUSTRIA" -"3248372248","3248372255","CH","CHE","SWITZERLAND" -"3248372256","3248372263","AT","AUT","AUSTRIA" -"3248372264","3248372271","NL","NLD","NETHERLANDS" -"3248372272","3248372319","DE","DEU","GERMANY" -"3248372320","3248372327","BE","BEL","BELGIUM" -"3248372328","3248488447","DE","DEU","GERMANY" -"3248488448","3248525311","NO","NOR","NORWAY" -"3248525312","3248525567","DE","DEU","GERMANY" -"3248525568","3248525823","DK","DNK","DENMARK" -"3248525824","3248619519","NO","NOR","NORWAY" -"3248619520","3248638463","DK","DNK","DENMARK" -"3248638464","3248638719","GB","GBR","UNITED KINGDOM" -"3248638720","3248750591","DK","DNK","DENMARK" -"3248750592","3248750847","PT","PRT","PORTUGAL" -"3248750848","3248752383","PL","POL","POLAND" -"3248752384","3248752639","NL","NLD","NETHERLANDS" -"3248752640","3248752895","DE","DEU","GERMANY" -"3248752896","3248753151","TR","TUR","TURKEY" -"3248753152","3248753663","GB","GBR","UNITED KINGDOM" -"3248753664","3248753919","FR","FRA","FRANCE" -"3248753920","3248754431","GB","GBR","UNITED KINGDOM" -"3248754432","3248754687","AT","AUT","AUSTRIA" -"3248754688","3248758783","PL","POL","POLAND" -"3248758784","3248774143","SE","SWE","SWEDEN" -"3248774144","3248775167","UA","UKR","UKRAINE" -"3248775168","3248783615","GB","GBR","UNITED KINGDOM" -"3248783616","3248783871","PL","POL","POLAND" -"3248783872","3248784127","UA","UKR","UKRAINE" -"3248784128","3248785407","DE","DEU","GERMANY" -"3248785408","3248785663","RO","ROM","ROMANIA" -"3248785664","3248786943","SI","SVN","SLOVENIA" -"3248786944","3248787199","PL","POL","POLAND" -"3248787200","3248787455","GB","GBR","UNITED KINGDOM" -"3248787456","3248787711","NL","NLD","NETHERLANDS" -"3248787712","3248787967","CH","CHE","SWITZERLAND" -"3248787968","3248788223","RU","RUS","RUSSIAN FEDERATION" -"3248788224","3248788479","ES","ESP","SPAIN" -"3248788480","3248788735","FR","FRA","FRANCE" -"3248788736","3248788991","UA","UKR","UKRAINE" -"3248788992","3248789503","FR","FRA","FRANCE" -"3248789504","3248789759","RO","ROM","ROMANIA" -"3248789760","3248790015","FR","FRA","FRANCE" -"3248790016","3248790271","DE","DEU","GERMANY" -"3248790272","3248790527","DK","DNK","DENMARK" -"3248790528","3248790783","FR","FRA","FRANCE" -"3248790784","3248791039","PL","POL","POLAND" -"3248791040","3248791295","BE","BEL","BELGIUM" -"3248791296","3248791551","DE","DEU","GERMANY" -"3248791552","3248792367","GB","GBR","UNITED KINGDOM" -"3248796608","3248796863","GB","GBR","UNITED KINGDOM" -"3248798648","3248798651","GB","GBR","UNITED KINGDOM" -"3248798976","3248799231","GB","GBR","UNITED KINGDOM" -"3248799736","3248799743","GB","GBR","UNITED KINGDOM" -"3248799744","3248800255","NL","NLD","NETHERLANDS" -"3248800256","3248800767","RU","RUS","RUSSIAN FEDERATION" -"3248800768","3248801279","FR","FRA","FRANCE" -"3248801280","3248801791","RO","ROM","ROMANIA" -"3248801792","3248802303","RU","RUS","RUSSIAN FEDERATION" -"3248802304","3248802815","FR","FRA","FRANCE" -"3248802816","3248803327","RU","RUS","RUSSIAN FEDERATION" -"3248803328","3248804351","GB","GBR","UNITED KINGDOM" -"3248804352","3248804863","LV","LVA","LATVIA" -"3248804864","3248805375","DE","DEU","GERMANY" -"3248805376","3248805887","RU","RUS","RUSSIAN FEDERATION" -"3248805888","3248806399","NL","NLD","NETHERLANDS" -"3248806400","3248806911","CZ","CZE","CZECH REPUBLIC" -"3248806912","3248807423","US","USA","UNITED STATES" -"3248807424","3248807935","BG","BGR","BULGARIA" -"3248807936","3248808447","AT","AUT","AUSTRIA" -"3248808448","3248808959","GR","GRC","GREECE" -"3248808960","3248810079","FR","FRA","FRANCE" -"3248810080","3248810111","UA","UKR","UKRAINE" -"3248810112","3248810143","RU","RUS","RUSSIAN FEDERATION" -"3248810144","3248810175","HR","HRV","CROATIA" -"3248810176","3248810207","FR","FRA","FRANCE" -"3248810208","3248810239","GB","GBR","UNITED KINGDOM" -"3248810240","3248810495","CH","CHE","SWITZERLAND" -"3248810496","3248812543","AT","AUT","AUSTRIA" -"3248812544","3248813055","GB","GBR","UNITED KINGDOM" -"3248813056","3248813567","CH","CHE","SWITZERLAND" -"3248813568","3248814079","DE","DEU","GERMANY" -"3248814080","3248815103","DK","DNK","DENMARK" -"3248815104","3248815615","GB","GBR","UNITED KINGDOM" -"3248815616","3248816127","PL","POL","POLAND" -"3248816128","3248881663","CZ","CZE","CZECH REPUBLIC" -"3248881664","3249012735","FI","FIN","FINLAND" -"3249012736","3249012991","DE","DEU","GERMANY" -"3249012992","3249014271","LU","LUX","LUXEMBOURG" -"3249014784","3249025535","LU","LUX","LUXEMBOURG" -"3249025536","3249025791","FR","FRA","FRANCE" -"3249025792","3249026559","LU","LUX","LUXEMBOURG" -"3249026816","3249045503","LU","LUX","LUXEMBOURG" -"3249045504","3249078271","DE","DEU","GERMANY" -"3249078272","3249078783","RU","RUS","RUSSIAN FEDERATION" -"3249078784","3249079295","CH","CHE","SWITZERLAND" -"3249079296","3249079807","RU","RUS","RUSSIAN FEDERATION" -"3249079808","3249080831","RO","ROM","ROMANIA" -"3249080832","3249081343","DE","DEU","GERMANY" -"3249081856","3249082367","GB","GBR","UNITED KINGDOM" -"3249082368","3249082879","HU","HUN","HUNGARY" -"3249082880","3249083391","PL","POL","POLAND" -"3249083392","3249083903","RO","ROM","ROMANIA" -"3249083904","3249085951","RU","RUS","RUSSIAN FEDERATION" -"3249085952","3249086463","GI","GIB","GIBRALTAR" -"3249086464","3249088511","RU","RUS","RUSSIAN FEDERATION" -"3249088512","3249089023","NL","NLD","NETHERLANDS" -"3249089024","3249089535","NO","NOR","NORWAY" -"3249089536","3249090047","RU","RUS","RUSSIAN FEDERATION" -"3249090048","3249090559","FR","FRA","FRANCE" -"3249090560","3249091071","SI","SVN","SLOVENIA" -"3249091072","3249091583","RO","ROM","ROMANIA" -"3249091584","3249092095","RU","RUS","RUSSIAN FEDERATION" -"3249092096","3249092607","DE","DEU","GERMANY" -"3249092608","3249093119","IT","ITA","ITALY" -"3249093120","3249093631","GB","GBR","UNITED KINGDOM" -"3249093632","3249094655","RU","RUS","RUSSIAN FEDERATION" -"3249094656","3249095679","FR","FRA","FRANCE" -"3249095680","3249096191","NL","NLD","NETHERLANDS" -"3249096192","3249096703","IL","ISR","ISRAEL" -"3249096704","3249097215","DE","DEU","GERMANY" -"3249097216","3249097727","DK","DNK","DENMARK" -"3249097728","3249098239","DE","DEU","GERMANY" -"3249098240","3249098751","PL","POL","POLAND" -"3249098752","3249099263","UA","UKR","UKRAINE" -"3249099264","3249099775","CH","CHE","SWITZERLAND" -"3249099776","3249100287","FI","FIN","FINLAND" -"3249100288","3249100799","UA","UKR","UKRAINE" -"3249100800","3249101311","IL","ISR","ISRAEL" -"3249101312","3249101823","GB","GBR","UNITED KINGDOM" -"3249101824","3249102335","RU","RUS","RUSSIAN FEDERATION" -"3249102336","3249102847","DE","DEU","GERMANY" -"3249102848","3249103359","RU","RUS","RUSSIAN FEDERATION" -"3249103360","3249103871","DE","DEU","GERMANY" -"3249103872","3249104383","FI","FIN","FINLAND" -"3249104384","3249104895","RU","RUS","RUSSIAN FEDERATION" -"3249104896","3249105407","IL","ISR","ISRAEL" -"3249105408","3249105919","RU","RUS","RUSSIAN FEDERATION" -"3249105920","3249106431","NL","NLD","NETHERLANDS" -"3249106432","3249106943","RU","RUS","RUSSIAN FEDERATION" -"3249106944","3249108479","PL","POL","POLAND" -"3249108480","3249108991","RU","RUS","RUSSIAN FEDERATION" -"3249108992","3249109503","GB","GBR","UNITED KINGDOM" -"3249109504","3249110015","RU","RUS","RUSSIAN FEDERATION" -"3249110016","3249111039","UA","UKR","UKRAINE" -"3249111040","3249111551","RU","RUS","RUSSIAN FEDERATION" -"3249111552","3249112063","KW","KWT","KUWAIT" -"3249112064","3249113087","UA","UKR","UKRAINE" -"3249113088","3249113599","RO","ROM","ROMANIA" -"3249113600","3249114111","NL","NLD","NETHERLANDS" -"3249114112","3249114623","GB","GBR","UNITED KINGDOM" -"3249114624","3249115647","RO","ROM","ROMANIA" -"3249115648","3249116159","UA","UKR","UKRAINE" -"3249116160","3249116671","PL","POL","POLAND" -"3249116672","3249117183","IT","ITA","ITALY" -"3249117184","3249117695","CH","CHE","SWITZERLAND" -"3249117696","3249118207","DK","DNK","DENMARK" -"3249118208","3249118719","RO","ROM","ROMANIA" -"3249118720","3249119231","LU","LUX","LUXEMBOURG" -"3249119232","3249119743","RU","RUS","RUSSIAN FEDERATION" -"3249119744","3249120255","IT","ITA","ITALY" -"3249120256","3249120767","SE","SWE","SWEDEN" -"3249120768","3249121279","LV","LVA","LATVIA" -"3249121280","3249121791","DE","DEU","GERMANY" -"3249121792","3249122303","RO","ROM","ROMANIA" -"3249122304","3249124351","RU","RUS","RUSSIAN FEDERATION" -"3249124352","3249124863","DE","DEU","GERMANY" -"3249124864","3249125375","CZ","CZE","CZECH REPUBLIC" -"3249125376","3249125887","DE","DEU","GERMANY" -"3249125888","3249126399","CH","CHE","SWITZERLAND" -"3249126400","3249126911","UA","UKR","UKRAINE" -"3249126912","3249127423","SA","SAU","SAUDI ARABIA" -"3249127424","3249127935","GB","GBR","UNITED KINGDOM" -"3249127936","3249128447","LV","LVA","LATVIA" -"3249128448","3249128959","DE","DEU","GERMANY" -"3249128960","3249129471","BG","BGR","BULGARIA" -"3249129472","3249130495","RU","RUS","RUSSIAN FEDERATION" -"3249130496","3249131007","DE","DEU","GERMANY" -"3249131008","3249131519","GB","GBR","UNITED KINGDOM" -"3249131520","3249132031","DK","DNK","DENMARK" -"3249132032","3249132543","RU","RUS","RUSSIAN FEDERATION" -"3249132544","3249133055","DE","DEU","GERMANY" -"3249133056","3249133567","UA","UKR","UKRAINE" -"3249134080","3249134591","UA","UKR","UKRAINE" -"3249134592","3249135615","RU","RUS","RUSSIAN FEDERATION" -"3249135616","3249136127","GB","GBR","UNITED KINGDOM" -"3249136128","3249137151","RU","RUS","RUSSIAN FEDERATION" -"3249137152","3249137663","FR","FRA","FRANCE" -"3249137664","3249138175","PL","POL","POLAND" -"3249138176","3249138687","JM","JAM","JAMAICA" -"3249138688","3249139711","RU","RUS","RUSSIAN FEDERATION" -"3249139712","3249140223","UA","UKR","UKRAINE" -"3249140224","3249140735","IT","ITA","ITALY" -"3249140736","3249141247","UA","UKR","UKRAINE" -"3249141248","3249141759","IL","ISR","ISRAEL" -"3249141760","3249142783","RU","RUS","RUSSIAN FEDERATION" -"3249142784","3249143295","UA","UKR","UKRAINE" -"3249143296","3249143807","GB","GBR","UNITED KINGDOM" -"3249143808","3249274879","AT","AUT","AUSTRIA" -"3249274880","3249277759","NL","NLD","NETHERLANDS" -"3249277760","3249277775","BG","BGR","BULGARIA" -"3249277776","3249290143","NL","NLD","NETHERLANDS" -"3249290144","3249290159","BG","BGR","BULGARIA" -"3249290160","3249330111","NL","NLD","NETHERLANDS" -"3249330112","3249330143","BG","BGR","BULGARIA" -"3249330144","3249350095","NL","NLD","NETHERLANDS" -"3249350096","3249350111","BG","BGR","BULGARIA" -"3249350112","3249405951","NL","NLD","NETHERLANDS" -"3249405952","3249406975","DE","DEU","GERMANY" -"3249406976","3249407231","IT","ITA","ITALY" -"3249407232","3249521279","DE","DEU","GERMANY" -"3249521280","3249521343","UA","UKR","UKRAINE" -"3249521344","3249537023","DE","DEU","GERMANY" -"3249537024","3249537279","PT","PRT","PORTUGAL" -"3249537280","3249537791","NL","NLD","NETHERLANDS" -"3249537792","3249538047","GB","GBR","UNITED KINGDOM" -"3249538048","3249551359","NL","NLD","NETHERLANDS" -"3249551360","3249552639","GB","GBR","UNITED KINGDOM" -"3249552640","3249574143","NL","NLD","NETHERLANDS" -"3249574144","3249574399","RU","RUS","RUSSIAN FEDERATION" -"3249574400","3249574655","SE","SWE","SWEDEN" -"3249574656","3249574911","UA","UKR","UKRAINE" -"3249574912","3249590527","NL","NLD","NETHERLANDS" -"3249590784","3249600255","NL","NLD","NETHERLANDS" -"3249601792","3249668095","NL","NLD","NETHERLANDS" -"3249668096","3249676799","IE","IRL","IRELAND" -"3249676800","3249677055","UA","UKR","UKRAINE" -"3249677056","3249677311","SE","SWE","SWEDEN" -"3249677312","3249679103","IE","IRL","IRELAND" -"3249679104","3249679359","CH","CHE","SWITZERLAND" -"3249679360","3249683455","IE","IRL","IRELAND" -"3249683456","3249684479","SE","SWE","SWEDEN" -"3249684480","3249698047","IE","IRL","IRELAND" -"3249698048","3249698303","PL","POL","POLAND" -"3249698304","3249698559","RU","RUS","RUSSIAN FEDERATION" -"3249698560","3249698815","HU","HUN","HUNGARY" -"3249698816","3249699839","GB","GBR","UNITED KINGDOM" -"3249699840","3249700863","UA","UKR","UKRAINE" -"3249700864","3249701631","SE","SWE","SWEDEN" -"3249701632","3249701887","GR","GRC","GREECE" -"3249701888","3249702143","PL","POL","POLAND" -"3249702144","3249702399","FI","FIN","FINLAND" -"3249702400","3249702655","FR","FRA","FRANCE" -"3249702656","3249702911","RU","RUS","RUSSIAN FEDERATION" -"3249702912","3249703679","FR","FRA","FRANCE" -"3249703680","3249703935","GB","GBR","UNITED KINGDOM" -"3249703936","3249704191","FR","FRA","FRANCE" -"3249704192","3249704447","RO","ROM","ROMANIA" -"3249704448","3249704703","DE","DEU","GERMANY" -"3249704704","3249704959","PL","POL","POLAND" -"3249704960","3249705983","UA","UKR","UKRAINE" -"3249705984","3249706495","AT","AUT","AUSTRIA" -"3249706496","3249707007","LV","LVA","LATVIA" -"3249707008","3249707519","BG","BGR","BULGARIA" -"3249707520","3249708031","FR","FRA","FRANCE" -"3249708032","3249708543","CH","CHE","SWITZERLAND" -"3249708544","3249709055","RU","RUS","RUSSIAN FEDERATION" -"3249709056","3249709311","AT","AUT","AUSTRIA" -"3249709312","3249709567","PL","POL","POLAND" -"3249709568","3249709823","UA","UKR","UKRAINE" -"3249709824","3249710079","DE","DEU","GERMANY" -"3249710080","3249710335","PL","POL","POLAND" -"3249710336","3249710591","RO","ROM","ROMANIA" -"3249710592","3249710847","BG","BGR","BULGARIA" -"3249710848","3249711103","PL","POL","POLAND" -"3249711104","3249711359","HU","HUN","HUNGARY" -"3249711360","3249711871","DE","DEU","GERMANY" -"3249711872","3249712127","AT","AUT","AUSTRIA" -"3249712128","3249712383","UA","UKR","UKRAINE" -"3249712384","3249712639","GB","GBR","UNITED KINGDOM" -"3249712640","3249712895","BE","BEL","BELGIUM" -"3249712896","3249713151","DK","DNK","DENMARK" -"3249713152","3249715199","LV","LVA","LATVIA" -"3249715200","3249715455","AT","AUT","AUSTRIA" -"3249715456","3249715711","DE","DEU","GERMANY" -"3249715712","3249715967","FR","FRA","FRANCE" -"3249715968","3249716223","UA","UKR","UKRAINE" -"3249716224","3249716479","SI","SVN","SLOVENIA" -"3249716480","3249716735","NL","NLD","NETHERLANDS" -"3249716736","3249717247","UA","UKR","UKRAINE" -"3249717248","3249718271","LV","LVA","LATVIA" -"3249718272","3249719295","DE","DEU","GERMANY" -"3249719296","3249720319","GB","GBR","UNITED KINGDOM" -"3249720320","3249721343","IT","ITA","ITALY" -"3249721344","3249721599","AT","AUT","AUSTRIA" -"3249721600","3249721855","BE","BEL","BELGIUM" -"3249721856","3249722623","FR","FRA","FRANCE" -"3249722624","3249723135","PL","POL","POLAND" -"3249723136","3249723391","GB","GBR","UNITED KINGDOM" -"3249723392","3249723647","IT","ITA","ITALY" -"3249723648","3249723903","GB","GBR","UNITED KINGDOM" -"3249723904","3249724159","TR","TUR","TURKEY" -"3249724160","3249724415","LU","LUX","LUXEMBOURG" -"3249724416","3249724671","IL","ISR","ISRAEL" -"3249724672","3249724927","SE","SWE","SWEDEN" -"3249724928","3249725183","BG","BGR","BULGARIA" -"3249725184","3249725439","GB","GBR","UNITED KINGDOM" -"3249725440","3249725951","RO","ROM","ROMANIA" -"3249725952","3249726463","DE","DEU","GERMANY" -"3249726464","3249726975","UA","UKR","UKRAINE" -"3249726976","3249727487","IT","ITA","ITALY" -"3249727488","3249727999","LV","LVA","LATVIA" -"3249728000","3249728511","IT","ITA","ITALY" -"3249728512","3249729023","UA","UKR","UKRAINE" -"3249729024","3249729535","GB","GBR","UNITED KINGDOM" -"3249729536","3249730559","PL","POL","POLAND" -"3249730560","3249731583","IT","ITA","ITALY" -"3249731584","3249732607","UA","UKR","UKRAINE" -"3249732608","3249733631","IT","ITA","ITALY" -"3249733632","3249799167","CZ","CZE","CZECH REPUBLIC" -"3249799168","3249932287","SE","SWE","SWEDEN" -"3249932288","3249934335","GB","GBR","UNITED KINGDOM" -"3249934336","3250061311","SE","SWE","SWEDEN" -"3250061312","3250183199","FI","FIN","FINLAND" -"3250183200","3250183215","SE","SWE","SWEDEN" -"3250183216","3250187583","FI","FIN","FINLAND" -"3250187584","3250187647","SE","SWE","SWEDEN" -"3250187648","3250192383","FI","FIN","FINLAND" -"3250192384","3250192639","AT","AUT","AUSTRIA" -"3250192640","3250192895","RU","RUS","RUSSIAN FEDERATION" -"3250192896","3250193151","IL","ISR","ISRAEL" -"3250193152","3250193407","DE","DEU","GERMANY" -"3250193408","3250193663","PL","POL","POLAND" -"3250193664","3250194175","AT","AUT","AUSTRIA" -"3250194176","3250194431","DE","DEU","GERMANY" -"3250194432","3250194687","FR","FRA","FRANCE" -"3250194688","3250194943","UA","UKR","UKRAINE" -"3250194944","3250195455","RO","ROM","ROMANIA" -"3250195456","3250195711","DE","DEU","GERMANY" -"3250195712","3250196223","GB","GBR","UNITED KINGDOM" -"3250196224","3250196479","UA","UKR","UKRAINE" -"3250196480","3250200575","AT","AUT","AUSTRIA" -"3250200576","3250200831","HU","HUN","HUNGARY" -"3250200832","3250201087","RO","ROM","ROMANIA" -"3250201088","3250201343","RU","RUS","RUSSIAN FEDERATION" -"3250201344","3250201599","DK","DNK","DENMARK" -"3250202624","3250233855","AT","AUT","AUSTRIA" -"3250233856","3250234111","GB","GBR","UNITED KINGDOM" -"3250234112","3250234367","GR","GRC","GREECE" -"3250234368","3250245631","AT","AUT","AUSTRIA" -"3250245632","3250245887","TR","TUR","TURKEY" -"3250245888","3250246143","AT","AUT","AUSTRIA" -"3250246144","3250246399","GB","GBR","UNITED KINGDOM" -"3250246400","3250257663","AT","AUT","AUSTRIA" -"3250257664","3250257919","PL","POL","POLAND" -"3250258176","3250323199","AT","AUT","AUSTRIA" -"3250323200","3250323455","RU","RUS","RUSSIAN FEDERATION" -"3250323456","3250323711","PL","POL","POLAND" -"3250323712","3250324479","SA","SAU","SAUDI ARABIA" -"3250324480","3250324991","GB","GBR","UNITED KINGDOM" -"3250324992","3250325247","AE","ARE","UNITED ARAB EMIRATES" -"3250325504","3250326527","OM","OMN","OMAN" -"3250326528","3250327039","BH","BHR","BAHRAIN" -"3250327040","3250331647","SA","SAU","SAUDI ARABIA" -"3250331648","3250335743","MT","MLT","MALTA" -"3250335744","3250339839","KW","KWT","KUWAIT" -"3250339840","3250348031","JO","JOR","JORDAN" -"3250348032","3250356223","BH","BHR","BAHRAIN" -"3250356224","3250357247","LB","LBN","LEBANON" -"3250357248","3250357823","GB","GBR","UNITED KINGDOM" -"3250357824","3250357855","FR","FRA","FRANCE" -"3250357856","3250357871","EE","EST","ESTONIA" -"3250357872","3250357879","CH","CHE","SWITZERLAND" -"3250357880","3250357887","SE","SWE","SWEDEN" -"3250357888","3250357895","DK","DNK","DENMARK" -"3250357920","3250357927","PL","POL","POLAND" -"3250357960","3250358015","GB","GBR","UNITED KINGDOM" -"3250358016","3250358527","LB","LBN","LEBANON" -"3250358528","3250358783","HU","HUN","HUNGARY" -"3250358784","3250359295","LB","LBN","LEBANON" -"3250359296","3250359807","HU","HUN","HUNGARY" -"3250359808","3250362879","KW","KWT","KUWAIT" -"3250362880","3250363391","DE","DEU","GERMANY" -"3250363904","3250364415","DE","DEU","GERMANY" -"3250364416","3250372607","KW","KWT","KUWAIT" -"3250372608","3250373375","HU","HUN","HUNGARY" -"3250373376","3250373631","GB","GBR","UNITED KINGDOM" -"3250373632","3250374143","DE","DEU","GERMANY" -"3250374656","3250374911","SA","SAU","SAUDI ARABIA" -"3250374912","3250375679","SE","SWE","SWEDEN" -"3250375680","3250376703","GB","GBR","UNITED KINGDOM" -"3250376704","3250380799","AT","AUT","AUSTRIA" -"3250380800","3250381055","DK","DNK","DENMARK" -"3250381056","3250386943","CH","CHE","SWITZERLAND" -"3250386944","3250387199","SE","SWE","SWEDEN" -"3250387200","3250387455","FR","FRA","FRANCE" -"3250387456","3250387711","DE","DEU","GERMANY" -"3250387712","3250387967","FR","FRA","FRANCE" -"3250387968","3250388223","JO","JOR","JORDAN" -"3250388224","3250388479","PL","POL","POLAND" -"3250388480","3250388735","UA","UKR","UKRAINE" -"3250388736","3250388991","FR","FRA","FRANCE" -"3250405888","3250406399","IE","IRL","IRELAND" -"3250406400","3250406911","RU","RUS","RUSSIAN FEDERATION" -"3250406912","3250407423","RO","ROM","ROMANIA" -"3250407424","3250407935","PL","POL","POLAND" -"3250407936","3250408447","GB","GBR","UNITED KINGDOM" -"3250408448","3250408959","PL","POL","POLAND" -"3250408960","3250409471","DE","DEU","GERMANY" -"3250409472","3250409983","GB","GBR","UNITED KINGDOM" -"3250409984","3250410495","DE","DEU","GERMANY" -"3250410496","3250411007","AT","AUT","AUSTRIA" -"3250411008","3250411519","LT","LTU","LITHUANIA" -"3250411520","3250412031","RU","RUS","RUSSIAN FEDERATION" -"3250412032","3250412543","FR","FRA","FRANCE" -"3250412544","3250413055","DK","DNK","DENMARK" -"3250413056","3250413567","DE","DEU","GERMANY" -"3250413568","3250414079","UA","UKR","UKRAINE" -"3250414080","3250414591","RO","ROM","ROMANIA" -"3250414592","3250415103","DE","DEU","GERMANY" -"3250415104","3250415615","NL","NLD","NETHERLANDS" -"3250415616","3250416127","FR","FRA","FRANCE" -"3250416128","3250417663","DE","DEU","GERMANY" -"3250417664","3250418175","IT","ITA","ITALY" -"3250418176","3250418687","DE","DEU","GERMANY" -"3250418688","3250419199","PL","POL","POLAND" -"3250419200","3250419711","NO","NOR","NORWAY" -"3250419712","3250420223","RU","RUS","RUSSIAN FEDERATION" -"3250420224","3250420735","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3250420736","3250421247","FR","FRA","FRANCE" -"3250421248","3250421759","UA","UKR","UKRAINE" -"3250422016","3250423295","GB","GBR","UNITED KINGDOM" -"3250423296","3250423551","NL","NLD","NETHERLANDS" -"3250423552","3250423807","BE","BEL","BELGIUM" -"3250423808","3250424063","AT","AUT","AUSTRIA" -"3250424064","3250424319","DE","DEU","GERMANY" -"3250424320","3250424831","NL","NLD","NETHERLANDS" -"3250424832","3250425343","GB","GBR","UNITED KINGDOM" -"3250425344","3250425599","TR","TUR","TURKEY" -"3250425600","3250425855","FR","FRA","FRANCE" -"3250425856","3250426111","LT","LTU","LITHUANIA" -"3250426112","3250426367","NO","NOR","NORWAY" -"3250426368","3250426623","AT","AUT","AUSTRIA" -"3250426624","3250426879","BE","BEL","BELGIUM" -"3250426880","3250427135","JO","JOR","JORDAN" -"3250427136","3250427391","NL","NLD","NETHERLANDS" -"3250427392","3250429951","DE","DEU","GERMANY" -"3250429952","3250438143","SI","SVN","SLOVENIA" -"3250438144","3250438207","FR","FRA","FRANCE" -"3250438208","3250438399","CH","CHE","SWITZERLAND" -"3250438400","3250438431","FR","FRA","FRANCE" -"3250438432","3250443519","CH","CHE","SWITZERLAND" -"3250443520","3250443527","DE","DEU","GERMANY" -"3250443528","3250443543","CH","CHE","SWITZERLAND" -"3250443544","3250443551","DE","DEU","GERMANY" -"3250443552","3250446335","CH","CHE","SWITZERLAND" -"3250446336","3250451583","DE","DEU","GERMANY" -"3250451584","3250451599","AT","AUT","AUSTRIA" -"3250451600","3250454527","DE","DEU","GERMANY" -"3250454528","3250585599","BE","BEL","BELGIUM" -"3250585600","3250585855","NL","NLD","NETHERLANDS" -"3250585856","3250588671","PT","PRT","PORTUGAL" -"3250588672","3250588799","IE","IRL","IRELAND" -"3250588800","3250588927","AT","AUT","AUSTRIA" -"3250588928","3250589183","GB","GBR","UNITED KINGDOM" -"3250589184","3250589439","DE","DEU","GERMANY" -"3250589440","3250589471","IE","IRL","IRELAND" -"3250589472","3250589503","NL","NLD","NETHERLANDS" -"3250589504","3250589567","HR","HRV","CROATIA" -"3250589632","3250589695","NO","NOR","NORWAY" -"3250589696","3250593791","CH","CHE","SWITZERLAND" -"3250593792","3250594815","GB","GBR","UNITED KINGDOM" -"3250594816","3250595327","UA","UKR","UKRAINE" -"3250595328","3250595839","GR","GRC","GREECE" -"3250595840","3250596351","DE","DEU","GERMANY" -"3250596352","3250597887","RO","ROM","ROMANIA" -"3250597888","3250598399","BG","BGR","BULGARIA" -"3250598400","3250598911","GB","GBR","UNITED KINGDOM" -"3250598912","3250599423","RO","ROM","ROMANIA" -"3250599424","3250599935","SE","SWE","SWEDEN" -"3250599936","3250600447","BG","BGR","BULGARIA" -"3250600448","3250601471","DE","DEU","GERMANY" -"3250601472","3250601983","PL","POL","POLAND" -"3250601984","3250610175","GB","GBR","UNITED KINGDOM" -"3250610176","3250618367","TR","TUR","TURKEY" -"3250618368","3250626559","RU","RUS","RUSSIAN FEDERATION" -"3250626560","3250634751","PL","POL","POLAND" -"3250634752","3250642943","GB","GBR","UNITED KINGDOM" -"3250642944","3250651135","CH","CHE","SWITZERLAND" -"3250651136","3250659327","IT","ITA","ITALY" -"3250667520","3250675711","PL","POL","POLAND" -"3250675712","3250683903","GB","GBR","UNITED KINGDOM" -"3250683904","3250692095","CH","CHE","SWITZERLAND" -"3250692096","3250692351","NO","NOR","NORWAY" -"3250692352","3250692607","NL","NLD","NETHERLANDS" -"3250692608","3250693375","BG","BGR","BULGARIA" -"3250693376","3250694399","IE","IRL","IRELAND" -"3250694400","3250694655","GB","GBR","UNITED KINGDOM" -"3250694656","3250694911","SK","SVK","SLOVAKIA" -"3250694912","3250695167","NL","NLD","NETHERLANDS" -"3250695168","3250695679","IT","ITA","ITALY" -"3250695680","3250697471","DE","DEU","GERMANY" -"3250697472","3250697727","PL","POL","POLAND" -"3250697728","3250697983","BG","BGR","BULGARIA" -"3250697984","3250698239","IT","ITA","ITALY" -"3250698240","3250698751","GR","GRC","GREECE" -"3250699264","3250699775","GB","GBR","UNITED KINGDOM" -"3250699776","3250700287","DE","DEU","GERMANY" -"3250700288","3250708479","UA","UKR","UKRAINE" -"3250708480","3250716671","KZ","KAZ","KAZAKHSTAN" -"3250716672","3250716927","RO","ROM","ROMANIA" -"3250718208","3250720767","DE","DEU","GERMANY" -"3250720768","3250722047","IT","ITA","ITALY" -"3250722048","3250722303","RO","ROM","ROMANIA" -"3250722304","3250724863","GB","GBR","UNITED KINGDOM" -"3250749696","3250749951","IT","ITA","ITALY" -"3250749952","3250750463","RO","ROM","ROMANIA" -"3250750464","3250751487","FR","FRA","FRANCE" -"3250751488","3250751999","DE","DEU","GERMANY" -"3250752000","3250752511","CH","CHE","SWITZERLAND" -"3250752512","3250753023","BG","BGR","BULGARIA" -"3250753024","3250754047","DE","DEU","GERMANY" -"3250754048","3250754303","AT","AUT","AUSTRIA" -"3250754304","3250754479","GB","GBR","UNITED KINGDOM" -"3250754480","3250754495","IE","IRL","IRELAND" -"3250754496","3250754559","GB","GBR","UNITED KINGDOM" -"3250754560","3250755071","DE","DEU","GERMANY" -"3250755072","3250755583","GB","GBR","UNITED KINGDOM" -"3250755584","3250755839","FR","FRA","FRANCE" -"3250755840","3250756351","RU","RUS","RUSSIAN FEDERATION" -"3250756352","3250756607","PT","PRT","PORTUGAL" -"3250756608","3250756863","BG","BGR","BULGARIA" -"3250756864","3250757119","DE","DEU","GERMANY" -"3250757120","3250757375","BE","BEL","BELGIUM" -"3250757376","3250757631","HU","HUN","HUNGARY" -"3250765824","3250782207","SE","SWE","SWEDEN" -"3250782208","3250847743","GB","GBR","UNITED KINGDOM" -"3250847744","3250978815","DE","DEU","GERMANY" -"3250978816","3250989311","HR","HRV","CROATIA" -"3250989312","3250989343","BA","BIH","BOSNIA AND HERZEGOVINA" -"3250989344","3251044351","HR","HRV","CROATIA" -"3251044352","3251109887","FI","FIN","FINLAND" -"3251109888","3251110143","SI","SVN","SLOVENIA" -"3251110144","3251110655","BG","BGR","BULGARIA" -"3251110656","3251110911","IT","ITA","ITALY" -"3251110912","3251111167","FR","FRA","FRANCE" -"3251111168","3251111423","CH","CHE","SWITZERLAND" -"3251111424","3251111679","AT","AUT","AUSTRIA" -"3251111680","3251111935","ES","ESP","SPAIN" -"3251111936","3251112191","BG","BGR","BULGARIA" -"3251112192","3251112447","SK","SVK","SLOVAKIA" -"3251112448","3251112703","RU","RUS","RUSSIAN FEDERATION" -"3251112704","3251112959","SE","SWE","SWEDEN" -"3251112960","3251113215","BG","BGR","BULGARIA" -"3251113216","3251113471","VG","VGB","VIRGIN ISLANDS, BRITISH" -"3251113472","3251114495","BG","BGR","BULGARIA" -"3251114496","3251114751","RU","RUS","RUSSIAN FEDERATION" -"3251114752","3251115007","RO","ROM","ROMANIA" -"3251115008","3251115263","PL","POL","POLAND" -"3251115264","3251115519","RU","RUS","RUSSIAN FEDERATION" -"3251115520","3251115775","UA","UKR","UKRAINE" -"3251115776","3251116031","BE","BEL","BELGIUM" -"3251116032","3251116287","BG","BGR","BULGARIA" -"3251116288","3251116543","GB","GBR","UNITED KINGDOM" -"3251116544","3251116799","DK","DNK","DENMARK" -"3251116800","3251117055","GB","GBR","UNITED KINGDOM" -"3251117056","3251117311","BG","BGR","BULGARIA" -"3251117312","3251117567","FR","FRA","FRANCE" -"3251117568","3251117823","IL","ISR","ISRAEL" -"3251117824","3251118079","SE","SWE","SWEDEN" -"3251118080","3251118591","UA","UKR","UKRAINE" -"3251118592","3251119103","RU","RUS","RUSSIAN FEDERATION" -"3251119104","3251120127","UA","UKR","UKRAINE" -"3251120128","3251120639","KW","KWT","KUWAIT" -"3251120640","3251121151","FR","FRA","FRANCE" -"3251121152","3251121663","DK","DNK","DENMARK" -"3251121664","3251122175","PL","POL","POLAND" -"3251122176","3251122687","CH","CHE","SWITZERLAND" -"3251122688","3251123199","PL","POL","POLAND" -"3251123200","3251123711","FR","FRA","FRANCE" -"3251123712","3251124223","RO","ROM","ROMANIA" -"3251124224","3251124735","NL","NLD","NETHERLANDS" -"3251124736","3251125247","FR","FRA","FRANCE" -"3251125248","3251125759","BE","BEL","BELGIUM" -"3251125760","3251126271","RU","RUS","RUSSIAN FEDERATION" -"3251126272","3251126783","UA","UKR","UKRAINE" -"3251126784","3251127295","PL","POL","POLAND" -"3251127296","3251127807","UA","UKR","UKRAINE" -"3251127808","3251128319","NL","NLD","NETHERLANDS" -"3251128320","3251128831","DE","DEU","GERMANY" -"3251128832","3251129343","SE","SWE","SWEDEN" -"3251129344","3251129855","UA","UKR","UKRAINE" -"3251129856","3251130367","CH","CHE","SWITZERLAND" -"3251130368","3251130879","GB","GBR","UNITED KINGDOM" -"3251130880","3251131391","PL","POL","POLAND" -"3251131392","3251131903","UA","UKR","UKRAINE" -"3251131904","3251132415","SE","SWE","SWEDEN" -"3251132416","3251132927","RU","RUS","RUSSIAN FEDERATION" -"3251132928","3251133439","DK","DNK","DENMARK" -"3251133440","3251133951","NO","NOR","NORWAY" -"3251133952","3251134463","RU","RUS","RUSSIAN FEDERATION" -"3251134464","3251134975","DE","DEU","GERMANY" -"3251134976","3251135999","GB","GBR","UNITED KINGDOM" -"3251136000","3251136511","RO","ROM","ROMANIA" -"3251136512","3251137023","DK","DNK","DENMARK" -"3251137024","3251137535","DE","DEU","GERMANY" -"3251137536","3251138047","PL","POL","POLAND" -"3251138048","3251138559","FR","FRA","FRANCE" -"3251138560","3251139071","AT","AUT","AUSTRIA" -"3251139072","3251139583","GB","GBR","UNITED KINGDOM" -"3251139584","3251140095","FR","FRA","FRANCE" -"3251140096","3251141631","PL","POL","POLAND" -"3251141632","3251142143","LT","LTU","LITHUANIA" -"3251142144","3251142655","RO","ROM","ROMANIA" -"3251142656","3251142911","DE","DEU","GERMANY" -"3251142912","3251143167","RU","RUS","RUSSIAN FEDERATION" -"3251143168","3251143423","AM","ARM","ARMENIA" -"3251143424","3251143679","LV","LVA","LATVIA" -"3251143680","3251143935","NL","NLD","NETHERLANDS" -"3251143936","3251144191","PL","POL","POLAND" -"3251144192","3251144447","TR","TUR","TURKEY" -"3251144448","3251144703","BE","BEL","BELGIUM" -"3251144704","3251144959","HU","HUN","HUNGARY" -"3251144960","3251145471","DE","DEU","GERMANY" -"3251145472","3251145727","FR","FRA","FRANCE" -"3251145728","3251145983","NL","NLD","NETHERLANDS" -"3251145984","3251146239","RO","ROM","ROMANIA" -"3251146240","3251146495","AT","AUT","AUSTRIA" -"3251146496","3251146751","SK","SVK","SLOVAKIA" -"3251146752","3251147007","CH","CHE","SWITZERLAND" -"3251147008","3251147263","GB","GBR","UNITED KINGDOM" -"3251147264","3251147519","PL","POL","POLAND" -"3251147520","3251147775","NL","NLD","NETHERLANDS" -"3251147776","3251148031","SE","SWE","SWEDEN" -"3251148032","3251148287","RU","RUS","RUSSIAN FEDERATION" -"3251148544","3251148799","UA","UKR","UKRAINE" -"3251148800","3251149055","HU","HUN","HUNGARY" -"3251149056","3251149311","NL","NLD","NETHERLANDS" -"3251149312","3251149567","DE","DEU","GERMANY" -"3251149568","3251149823","IE","IRL","IRELAND" -"3251149824","3251150079","DE","DEU","GERMANY" -"3251150080","3251150335","CH","CHE","SWITZERLAND" -"3251150336","3251150591","GB","GBR","UNITED KINGDOM" -"3251150592","3251150847","CH","CHE","SWITZERLAND" -"3251151104","3251151359","UA","UKR","UKRAINE" -"3251151360","3251151615","DE","DEU","GERMANY" -"3251151616","3251151871","PL","POL","POLAND" -"3251151872","3251152127","NL","NLD","NETHERLANDS" -"3251152128","3251152639","RO","ROM","ROMANIA" -"3251152640","3251152895","UA","UKR","UKRAINE" -"3251152896","3251153151","RU","RUS","RUSSIAN FEDERATION" -"3251153152","3251153407","UA","UKR","UKRAINE" -"3251153408","3251153663","TR","TUR","TURKEY" -"3251153664","3251153919","FR","FRA","FRANCE" -"3251153920","3251154175","DE","DEU","GERMANY" -"3251154176","3251154431","UA","UKR","UKRAINE" -"3251154432","3251154687","NL","NLD","NETHERLANDS" -"3251154688","3251154943","UA","UKR","UKRAINE" -"3251154944","3251155455","GB","GBR","UNITED KINGDOM" -"3251155456","3251155711","NL","NLD","NETHERLANDS" -"3251155712","3251155967","UA","UKR","UKRAINE" -"3251155968","3251156223","TR","TUR","TURKEY" -"3251156224","3251156735","FR","FRA","FRANCE" -"3251156736","3251156991","UA","UKR","UKRAINE" -"3251156992","3251157247","FR","FRA","FRANCE" -"3251157248","3251157503","BE","BEL","BELGIUM" -"3251157504","3251158015","PL","POL","POLAND" -"3251158016","3251158271","TR","TUR","TURKEY" -"3251158272","3251158527","RU","RUS","RUSSIAN FEDERATION" -"3251158528","3251158783","UA","UKR","UKRAINE" -"3251158784","3251159295","GB","GBR","UNITED KINGDOM" -"3251159296","3251159551","DE","DEU","GERMANY" -"3251159552","3251159807","ES","ESP","SPAIN" -"3251159808","3251160063","DE","DEU","GERMANY" -"3251160064","3251160319","JO","JOR","JORDAN" -"3251160320","3251160575","PL","POL","POLAND" -"3251160576","3251160831","NL","NLD","NETHERLANDS" -"3251160832","3251161087","RU","RUS","RUSSIAN FEDERATION" -"3251161088","3251161343","RO","ROM","ROMANIA" -"3251161344","3251161599","LV","LVA","LATVIA" -"3251161600","3251161855","SE","SWE","SWEDEN" -"3251161856","3251162111","HR","HRV","CROATIA" -"3251162112","3251162367","DK","DNK","DENMARK" -"3251162368","3251162623","UA","UKR","UKRAINE" -"3251162624","3251162879","DE","DEU","GERMANY" -"3251162880","3251163135","SI","SVN","SLOVENIA" -"3251163136","3251163391","SE","SWE","SWEDEN" -"3251163392","3251163647","UA","UKR","UKRAINE" -"3251163648","3251163903","DE","DEU","GERMANY" -"3251163904","3251164159","RU","RUS","RUSSIAN FEDERATION" -"3251164160","3251164415","UA","UKR","UKRAINE" -"3251164416","3251164671","IT","ITA","ITALY" -"3251164672","3251164927","NL","NLD","NETHERLANDS" -"3251164928","3251165439","PL","POL","POLAND" -"3251165440","3251165695","CH","CHE","SWITZERLAND" -"3251165696","3251165951","DE","DEU","GERMANY" -"3251165952","3251166207","UA","UKR","UKRAINE" -"3251166208","3251166463","CH","CHE","SWITZERLAND" -"3251166464","3251166719","RU","RUS","RUSSIAN FEDERATION" -"3251166720","3251166975","FR","FRA","FRANCE" -"3251166976","3251167231","CH","CHE","SWITZERLAND" -"3251167232","3251167487","LV","LVA","LATVIA" -"3251167488","3251167743","DK","DNK","DENMARK" -"3251168000","3251168255","PL","POL","POLAND" -"3251168256","3251168511","AT","AUT","AUSTRIA" -"3251168512","3251168767","UA","UKR","UKRAINE" -"3251168768","3251169023","DE","DEU","GERMANY" -"3251169024","3251169279","FR","FRA","FRANCE" -"3251169280","3251170047","PL","POL","POLAND" -"3251170048","3251170303","NO","NOR","NORWAY" -"3251170304","3251170559","CH","CHE","SWITZERLAND" -"3251170560","3251170815","DE","DEU","GERMANY" -"3251170816","3251171327","RU","RUS","RUSSIAN FEDERATION" -"3251171328","3251171839","DE","DEU","GERMANY" -"3251171840","3251172095","RO","ROM","ROMANIA" -"3251172096","3251172351","ES","ESP","SPAIN" -"3251172352","3251172607","RO","ROM","ROMANIA" -"3251172608","3251172863","GB","GBR","UNITED KINGDOM" -"3251172864","3251173119","UA","UKR","UKRAINE" -"3251173120","3251173375","SA","SAU","SAUDI ARABIA" -"3251173376","3251173631","UA","UKR","UKRAINE" -"3251173632","3251173887","DE","DEU","GERMANY" -"3251173888","3251174143","DK","DNK","DENMARK" -"3251174144","3251174399","RU","RUS","RUSSIAN FEDERATION" -"3251174400","3251174655","RO","ROM","ROMANIA" -"3251174656","3251174911","DE","DEU","GERMANY" -"3251174912","3251175167","AT","AUT","AUSTRIA" -"3251175168","3251175423","UA","UKR","UKRAINE" -"3251175424","3251176703","FR","FRA","FRANCE" -"3251176704","3251176959","IT","ITA","ITALY" -"3251176960","3251177471","FR","FRA","FRANCE" -"3251177472","3251179519","DE","DEU","GERMANY" -"3251179520","3251180031","SE","SWE","SWEDEN" -"3251180032","3251180543","PL","POL","POLAND" -"3251180544","3251181055","RO","ROM","ROMANIA" -"3251181056","3251181567","GR","GRC","GREECE" -"3251181568","3251182079","DE","DEU","GERMANY" -"3251182080","3251182591","FR","FRA","FRANCE" -"3251182592","3251183103","IT","ITA","ITALY" -"3251183104","3251183615","RU","RUS","RUSSIAN FEDERATION" -"3251183616","3251183871","NO","NOR","NORWAY" -"3251183872","3251184127","CH","CHE","SWITZERLAND" -"3251184128","3251184383","PL","POL","POLAND" -"3251184384","3251184639","DK","DNK","DENMARK" -"3251184640","3251184895","PL","POL","POLAND" -"3251184896","3251185407","DE","DEU","GERMANY" -"3251185408","3251185663","DK","DNK","DENMARK" -"3251185664","3251185919","IT","ITA","ITALY" -"3251185920","3251186175","AT","AUT","AUSTRIA" -"3251186176","3251186431","GB","GBR","UNITED KINGDOM" -"3251186432","3251186687","SE","SWE","SWEDEN" -"3251186688","3251186943","RO","ROM","ROMANIA" -"3251186944","3251187199","SI","SVN","SLOVENIA" -"3251187200","3251187455","GR","GRC","GREECE" -"3251187456","3251187711","GB","GBR","UNITED KINGDOM" -"3251187712","3251188735","NL","NLD","NETHERLANDS" -"3251188736","3251189759","DE","DEU","GERMANY" -"3251189760","3251190783","IT","ITA","ITALY" -"3251190784","3251191807","UA","UKR","UKRAINE" -"3251191808","3251192319","GB","GBR","UNITED KINGDOM" -"3251192320","3251192831","LV","LVA","LATVIA" -"3251192832","3251193343","BE","BEL","BELGIUM" -"3251193344","3251193855","GB","GBR","UNITED KINGDOM" -"3251193856","3251194367","DE","DEU","GERMANY" -"3251194368","3251194879","NO","NOR","NORWAY" -"3251194880","3251195391","FR","FRA","FRANCE" -"3251195392","3251195903","CZ","CZE","CZECH REPUBLIC" -"3251195904","3251196927","UA","UKR","UKRAINE" -"3251196928","3251197951","CH","CHE","SWITZERLAND" -"3251197952","3251198975","RU","RUS","RUSSIAN FEDERATION" -"3251198976","3251199999","DE","DEU","GERMANY" -"3251200000","3251200511","SE","SWE","SWEDEN" -"3251200512","3251201279","UA","UKR","UKRAINE" -"3251201280","3251201535","SI","SVN","SLOVENIA" -"3251201536","3251201791","AT","AUT","AUSTRIA" -"3251201792","3251202047","FR","FRA","FRANCE" -"3251202048","3251202303","NL","NLD","NETHERLANDS" -"3251202304","3251202559","PL","POL","POLAND" -"3251202560","3251202815","AT","AUT","AUSTRIA" -"3251202816","3251203327","ES","ESP","SPAIN" -"3251203328","3251203583","SI","SVN","SLOVENIA" -"3251203584","3251203839","CZ","CZE","CZECH REPUBLIC" -"3251203840","3251204095","SE","SWE","SWEDEN" -"3251204096","3251204607","DE","DEU","GERMANY" -"3251204608","3251205119","BG","BGR","BULGARIA" -"3251205120","3251205631","UA","UKR","UKRAINE" -"3251205632","3251206143","RU","RUS","RUSSIAN FEDERATION" -"3251206144","3251206655","GB","GBR","UNITED KINGDOM" -"3251206656","3251207167","CH","CHE","SWITZERLAND" -"3251207168","3251207679","GB","GBR","UNITED KINGDOM" -"3251207680","3251208191","RU","RUS","RUSSIAN FEDERATION" -"3251208192","3251209215","CY","CYP","CYPRUS" -"3251209216","3251210239","GB","GBR","UNITED KINGDOM" -"3251210240","3251211263","PL","POL","POLAND" -"3251211264","3251212287","UA","UKR","UKRAINE" -"3251212288","3251212415","DE","DEU","GERMANY" -"3251212416","3251212671","FI","FIN","FINLAND" -"3251212672","3251212799","SE","SWE","SWEDEN" -"3251212800","3251212927","FR","FRA","FRANCE" -"3251213056","3251213119","SE","SWE","SWEDEN" -"3251213120","3251213151","NL","NLD","NETHERLANDS" -"3251213184","3251213215","UA","UKR","UKRAINE" -"3251213216","3251213247","CH","CHE","SWITZERLAND" -"3251213248","3251213311","GB","GBR","UNITED KINGDOM" -"3251213312","3251213439","DE","DEU","GERMANY" -"3251213440","3251213503","GB","GBR","UNITED KINGDOM" -"3251213568","3251213631","FR","FRA","FRANCE" -"3251213696","3251213759","LV","LVA","LATVIA" -"3251213760","3251213823","TR","TUR","TURKEY" -"3251213824","3251213887","GB","GBR","UNITED KINGDOM" -"3251213888","3251214015","FI","FIN","FINLAND" -"3251214016","3251214079","UA","UKR","UKRAINE" -"3251214080","3251214143","FR","FRA","FRANCE" -"3251214144","3251214207","MC","MCO","MONACO" -"3251214208","3251214271","RU","RUS","RUSSIAN FEDERATION" -"3251214272","3251214335","DE","DEU","GERMANY" -"3251214336","3251214463","RU","RUS","RUSSIAN FEDERATION" -"3251214464","3251214591","UA","UKR","UKRAINE" -"3251214592","3251214975","GB","GBR","UNITED KINGDOM" -"3251214976","3251215103","RO","ROM","ROMANIA" -"3251215104","3251215231","SI","SVN","SLOVENIA" -"3251215232","3251215359","IL","ISR","ISRAEL" -"3251215360","3251215487","UA","UKR","UKRAINE" -"3251215488","3251215615","SE","SWE","SWEDEN" -"3251215616","3251215743","TR","TUR","TURKEY" -"3251215744","3251215871","GB","GBR","UNITED KINGDOM" -"3251216000","3251216127","LI","LIE","LIECHTENSTEIN" -"3251216128","3251216255","FI","FIN","FINLAND" -"3251216256","3251216383","RU","RUS","RUSSIAN FEDERATION" -"3251216384","3251216639","GB","GBR","UNITED KINGDOM" -"3251216640","3251216895","RO","ROM","ROMANIA" -"3251216896","3251217151","BE","BEL","BELGIUM" -"3251217152","3251217407","GB","GBR","UNITED KINGDOM" -"3251217408","3251217663","PL","POL","POLAND" -"3251217664","3251217919","SI","SVN","SLOVENIA" -"3251217920","3251218175","GR","GRC","GREECE" -"3251218176","3251218431","PL","POL","POLAND" -"3251218432","3251219199","DE","DEU","GERMANY" -"3251219200","3251219455","IT","ITA","ITALY" -"3251219456","3251219711","BG","BGR","BULGARIA" -"3251219712","3251220223","AT","AUT","AUSTRIA" -"3251220224","3251220479","UA","UKR","UKRAINE" -"3251220480","3251222527","DE","DEU","GERMANY" -"3251222528","3251224575","GB","GBR","UNITED KINGDOM" -"3251224576","3251225087","UA","UKR","UKRAINE" -"3251225088","3251225599","FR","FRA","FRANCE" -"3251225600","3251226111","GB","GBR","UNITED KINGDOM" -"3251226112","3251226623","UA","UKR","UKRAINE" -"3251226624","3251227135","GB","GBR","UNITED KINGDOM" -"3251227136","3251227647","DE","DEU","GERMANY" -"3251227648","3251228159","GB","GBR","UNITED KINGDOM" -"3251228160","3251229695","UA","UKR","UKRAINE" -"3251229696","3251230719","SI","SVN","SLOVENIA" -"3251230720","3251231743","UA","UKR","UKRAINE" -"3251231744","3251232767","NO","NOR","NORWAY" -"3251232768","3251233791","UA","UKR","UKRAINE" -"3251233792","3251234815","RU","RUS","RUSSIAN FEDERATION" -"3251234816","3251235839","RO","ROM","ROMANIA" -"3251235840","3251236863","DE","DEU","GERMANY" -"3251236864","3251237887","BG","BGR","BULGARIA" -"3251237888","3251238911","DK","DNK","DENMARK" -"3251238912","3251239935","FR","FRA","FRANCE" -"3251239936","3251240959","US","USA","UNITED STATES" -"3251241216","3251243007","GB","GBR","UNITED KINGDOM" -"3251243008","3251245055","BE","BEL","BELGIUM" -"3251245056","3251245311","DE","DEU","GERMANY" -"3251245312","3251245567","BE","BEL","BELGIUM" -"3251245568","3251245823","TR","TUR","TURKEY" -"3251245824","3251246079","UA","UKR","UKRAINE" -"3251246080","3251246335","DE","DEU","GERMANY" -"3251246336","3251246591","UA","UKR","UKRAINE" -"3251246592","3251246847","RO","ROM","ROMANIA" -"3251246848","3251247103","NL","NLD","NETHERLANDS" -"3251247104","3251247359","FR","FRA","FRANCE" -"3251247360","3251247871","DE","DEU","GERMANY" -"3251247872","3251248127","GB","GBR","UNITED KINGDOM" -"3251248128","3251248383","DE","DEU","GERMANY" -"3251248384","3251248639","SE","SWE","SWEDEN" -"3251248640","3251248895","DE","DEU","GERMANY" -"3251248896","3251249151","GB","GBR","UNITED KINGDOM" -"3251249152","3251251199","NL","NLD","NETHERLANDS" -"3251251200","3251251455","PT","PRT","PORTUGAL" -"3251251456","3251251711","GB","GBR","UNITED KINGDOM" -"3251251712","3251251967","CH","CHE","SWITZERLAND" -"3251251968","3251252223","BG","BGR","BULGARIA" -"3251252224","3251252479","AT","AUT","AUSTRIA" -"3251252480","3251252735","NL","NLD","NETHERLANDS" -"3251252736","3251256831","CH","CHE","SWITZERLAND" -"3251256832","3251257343","GB","GBR","UNITED KINGDOM" -"3251257344","3251259903","BE","BEL","BELGIUM" -"3251259904","3251260671","FR","FRA","FRANCE" -"3251260672","3251261183","BE","BEL","BELGIUM" -"3251261184","3251261439","PT","PRT","PORTUGAL" -"3251261440","3251264255","CH","CHE","SWITZERLAND" -"3251264256","3251264511","BG","BGR","BULGARIA" -"3251264512","3251264767","IT","ITA","ITALY" -"3251264768","3251265023","GB","GBR","UNITED KINGDOM" -"3251265024","3251265279","ES","ESP","SPAIN" -"3251265280","3251265535","DE","DEU","GERMANY" -"3251265536","3251267839","NL","NLD","NETHERLANDS" -"3251267840","3251268351","GB","GBR","UNITED KINGDOM" -"3251268352","3251268607","NL","NLD","NETHERLANDS" -"3251268864","3251269119","NL","NLD","NETHERLANDS" -"3251269120","3251269375","DK","DNK","DENMARK" -"3251269376","3251269631","FR","FRA","FRANCE" -"3251269632","3251269887","NL","NLD","NETHERLANDS" -"3251269888","3251270143","GB","GBR","UNITED KINGDOM" -"3251270144","3251270399","PL","POL","POLAND" -"3251270400","3251270655","NO","NOR","NORWAY" -"3251270656","3251270911","DE","DEU","GERMANY" -"3251270912","3251271167","PL","POL","POLAND" -"3251271168","3251271423","UA","UKR","UKRAINE" -"3251271424","3251271679","DE","DEU","GERMANY" -"3251271680","3251271935","TR","TUR","TURKEY" -"3251271936","3251272191","FR","FRA","FRANCE" -"3251272192","3251272447","NL","NLD","NETHERLANDS" -"3251272448","3251272703","AT","AUT","AUSTRIA" -"3251272704","3251272959","DE","DEU","GERMANY" -"3251272960","3251273471","FR","FRA","FRANCE" -"3251273472","3251290111","DE","DEU","GERMANY" -"3251290112","3251302399","GB","GBR","UNITED KINGDOM" -"3251302400","3251306239","LI","LIE","LIECHTENSTEIN" -"3251306240","3251306495","CH","CHE","SWITZERLAND" -"3251306496","3251306751","AT","AUT","AUSTRIA" -"3251306752","3251307007","MK","MKD","THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA" -"3251307008","3251307519","CS","SCG","SERBIA AND MONTENEGRO" -"3251307520","3251307775","MK","MKD","THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA" -"3251307776","3251308031","GB","GBR","UNITED KINGDOM" -"3251308032","3251308543","CS","SCG","SERBIA AND MONTENEGRO" -"3251308544","3251310591","US","USA","UNITED STATES" -"3251310592","3251311103","SI","SVN","SLOVENIA" -"3251311104","3251311615","CS","SCG","SERBIA AND MONTENEGRO" -"3251312128","3251312383","CS","SCG","SERBIA AND MONTENEGRO" -"3251312384","3251312639","CH","CHE","SWITZERLAND" -"3251312640","3251314175","CS","SCG","SERBIA AND MONTENEGRO" -"3251314176","3251314687","CH","CHE","SWITZERLAND" -"3251314688","3251315711","FR","FRA","FRANCE" -"3251315712","3251317759","RU","RUS","RUSSIAN FEDERATION" -"3251317760","3251318783","PL","POL","POLAND" -"3251318784","3251319807","UA","UKR","UKRAINE" -"3251319808","3251320831","HU","HUN","HUNGARY" -"3251321856","3251322879","RU","RUS","RUSSIAN FEDERATION" -"3251322880","3251329535","GB","GBR","UNITED KINGDOM" -"3251329536","3251329567","FR","FRA","FRANCE" -"3251329568","3251329727","GB","GBR","UNITED KINGDOM" -"3251329728","3251329791","FR","FRA","FRANCE" -"3251329792","3251330047","GB","GBR","UNITED KINGDOM" -"3251330048","3251330079","IT","ITA","ITALY" -"3251330080","3251330239","GB","GBR","UNITED KINGDOM" -"3251330240","3251330303","IT","ITA","ITALY" -"3251330304","3251331071","GB","GBR","UNITED KINGDOM" -"3251331072","3251331583","FR","FRA","FRANCE" -"3251331584","3251332095","PL","POL","POLAND" -"3251332096","3251333119","RU","RUS","RUSSIAN FEDERATION" -"3251333120","3251333631","CH","CHE","SWITZERLAND" -"3251333632","3251334143","PT","PRT","PORTUGAL" -"3251334144","3251334655","FR","FRA","FRANCE" -"3251334656","3251335167","UA","UKR","UKRAINE" -"3251335168","3251335679","RU","RUS","RUSSIAN FEDERATION" -"3251335680","3251336191","RO","ROM","ROMANIA" -"3251336192","3251336703","GB","GBR","UNITED KINGDOM" -"3251336704","3251337215","ES","ESP","SPAIN" -"3251337216","3251337727","CH","CHE","SWITZERLAND" -"3251337728","3251338239","DE","DEU","GERMANY" -"3251338240","3251339263","RU","RUS","RUSSIAN FEDERATION" -"3251339264","3251347455","IE","IRL","IRELAND" -"3251347456","3251355647","DE","DEU","GERMANY" -"3251355648","3251356159","GB","GBR","UNITED KINGDOM" -"3251356160","3251356671","AT","AUT","AUSTRIA" -"3251356672","3251357183","EE","EST","ESTONIA" -"3251357184","3251357695","IL","ISR","ISRAEL" -"3251357696","3251358207","ES","ESP","SPAIN" -"3251358208","3251358719","RU","RUS","RUSSIAN FEDERATION" -"3251358720","3251359231","RO","ROM","ROMANIA" -"3251359232","3251360255","PL","POL","POLAND" -"3251360256","3251360767","GB","GBR","UNITED KINGDOM" -"3251360768","3251361279","FR","FRA","FRANCE" -"3251361280","3251361791","RO","ROM","ROMANIA" -"3251361792","3251362303","AT","AUT","AUSTRIA" -"3251362304","3251362815","UA","UKR","UKRAINE" -"3251362816","3251363327","NL","NLD","NETHERLANDS" -"3251363328","3251363839","PL","POL","POLAND" -"3251363840","3251364095","MK","MKD","THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA" -"3251364096","3251364607","NL","NLD","NETHERLANDS" -"3251364608","3251364863","RO","ROM","ROMANIA" -"3251364864","3251366911","IT","ITA","ITALY" -"3251366912","3251367423","UA","UKR","UKRAINE" -"3251367424","3251367935","DE","DEU","GERMANY" -"3251367936","3251372031","GB","GBR","UNITED KINGDOM" -"3251372032","3251604447","IT","ITA","ITALY" -"3251604448","3251604455","CH","CHE","SWITZERLAND" -"3251604456","3251634175","IT","ITA","ITALY" -"3251634176","3251661311","FI","FIN","FINLAND" -"3251661312","3251661567","NO","NOR","NORWAY" -"3251661568","3251672575","FI","FIN","FINLAND" -"3251672576","3251672831","NL","NLD","NETHERLANDS" -"3251672832","3251674879","FI","FIN","FINLAND" -"3251674880","3251675135","BE","BEL","BELGIUM" -"3251675136","3251705343","FI","FIN","FINLAND" -"3251705344","3251705599","DK","DNK","DENMARK" -"3251705600","3251707391","FI","FIN","FINLAND" -"3251707392","3251707647","SE","SWE","SWEDEN" -"3251707648","3251710207","FI","FIN","FINLAND" -"3251710208","3251710215","NL","NLD","NETHERLANDS" -"3251710216","3251710223","FI","FIN","FINLAND" -"3251710224","3251710239","NL","NLD","NETHERLANDS" -"3251710240","3251734271","FI","FIN","FINLAND" -"3251734272","3251734527","CH","CHE","SWITZERLAND" -"3251734528","3251734783","NL","NLD","NETHERLANDS" -"3251734784","3251765247","FI","FIN","FINLAND" -"3251765248","3251765503","NL","NLD","NETHERLANDS" -"3251765504","3251774207","FI","FIN","FINLAND" -"3251774208","3251774463","DE","DEU","GERMANY" -"3251774464","3251783423","FI","FIN","FINLAND" -"3251783424","3251783679","GB","GBR","UNITED KINGDOM" -"3251783680","3251795455","FI","FIN","FINLAND" -"3251795456","3251795711","GB","GBR","UNITED KINGDOM" -"3251795712","3251802879","FI","FIN","FINLAND" -"3251802880","3251803135","BE","BEL","BELGIUM" -"3251803136","3251806207","FI","FIN","FINLAND" -"3251806208","3251815167","BE","BEL","BELGIUM" -"3251815168","3251815679","LU","LUX","LUXEMBOURG" -"3251815680","3251818495","BE","BEL","BELGIUM" -"3251818496","3251850495","FI","FIN","FINLAND" -"3251850496","3251850751","FR","FRA","FRANCE" -"3251850752","3251851007","CH","CHE","SWITZERLAND" -"3251851008","3251896319","FI","FIN","FINLAND" -"3251896320","3251927991","NO","NOR","NORWAY" -"3251927992","3251927999","NL","NLD","NETHERLANDS" -"3251928000","3252015687","NO","NOR","NORWAY" -"3252015688","3252015695","SE","SWE","SWEDEN" -"3252015696","3252289535","NO","NOR","NORWAY" -"3252289792","3252291327","GR","GRC","GREECE" -"3252291328","3252291583","SK","SVK","SLOVAKIA" -"3252291584","3252293631","FR","FRA","FRANCE" -"3252293632","3252297983","DE","DEU","GERMANY" -"3252297984","3252310527","GR","GRC","GREECE" -"3252311040","3252313599","GR","GRC","GREECE" -"3252313600","3252313855","SI","SVN","SLOVENIA" -"3252313856","3252314111","DE","DEU","GERMANY" -"3252314112","3252314623","GR","GRC","GREECE" -"3252314624","3252314879","HU","HUN","HUNGARY" -"3252314880","3252315135","GB","GBR","UNITED KINGDOM" -"3252315136","3252316415","CH","CHE","SWITZERLAND" -"3252316416","3252316671","FR","FRA","FRANCE" -"3252316672","3252318463","GR","GRC","GREECE" -"3252318464","3252318719","TR","TUR","TURKEY" -"3252318720","3252318975","GP","GLP","GUADELOUPE" -"3252318976","3252319231","PL","POL","POLAND" -"3252319232","3252319743","AT","AUT","AUSTRIA" -"3252320000","3252320255","GR","GRC","GREECE" -"3252320512","3252321791","GR","GRC","GREECE" -"3252321792","3252322303","DE","DEU","GERMANY" -"3252322304","3252323327","NO","NOR","NORWAY" -"3252323328","3252324351","PL","POL","POLAND" -"3252324352","3252326399","RU","RUS","RUSSIAN FEDERATION" -"3252326400","3252327423","UA","UKR","UKRAINE" -"3252327424","3252329471","PL","POL","POLAND" -"3252329472","3252330495","UA","UKR","UKRAINE" -"3252330496","3252334591","GB","GBR","UNITED KINGDOM" -"3252338688","3252340735","BE","BEL","BELGIUM" -"3252340736","3252340991","TR","TUR","TURKEY" -"3252341504","3252341759","GR","GRC","GREECE" -"3252342016","3252342079","GB","GBR","UNITED KINGDOM" -"3252342080","3252342143","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3252342144","3252342207","LU","LUX","LUXEMBOURG" -"3252342208","3252342239","GB","GBR","UNITED KINGDOM" -"3252342240","3252342271","CH","CHE","SWITZERLAND" -"3252342528","3252342543","NO","NOR","NORWAY" -"3252342784","3252346367","DE","DEU","GERMANY" -"3252346368","3252346623","GB","GBR","UNITED KINGDOM" -"3252346624","3252355071","GR","GRC","GREECE" -"3252355072","3252355327","GB","GBR","UNITED KINGDOM" -"3252355328","3252358911","LT","LTU","LITHUANIA" -"3252358912","3252358927","GB","GBR","UNITED KINGDOM" -"3252358928","3252359167","DE","DEU","GERMANY" -"3252359168","3252362239","DK","DNK","DENMARK" -"3252362240","3252362495","PL","POL","POLAND" -"3252362496","3252362751","IT","ITA","ITALY" -"3252362752","3252363263","DK","DNK","DENMARK" -"3252363264","3252379647","LT","LTU","LITHUANIA" -"3252379648","3252379903","ES","ESP","SPAIN" -"3252379904","3252380159","GB","GBR","UNITED KINGDOM" -"3252380160","3252380415","BE","BEL","BELGIUM" -"3252380416","3252380671","UA","UKR","UKRAINE" -"3252380672","3252380927","SI","SVN","SLOVENIA" -"3252380928","3252381183","RU","RUS","RUSSIAN FEDERATION" -"3252381184","3252381439","IT","ITA","ITALY" -"3252381440","3252381695","ES","ESP","SPAIN" -"3252381696","3252381951","RU","RUS","RUSSIAN FEDERATION" -"3252381952","3252382207","DE","DEU","GERMANY" -"3252382208","3252382463","SI","SVN","SLOVENIA" -"3252382464","3252382719","PL","POL","POLAND" -"3252382720","3252382975","GB","GBR","UNITED KINGDOM" -"3252382976","3252383231","IT","ITA","ITALY" -"3252383232","3252383743","GB","GBR","UNITED KINGDOM" -"3252383744","3252383999","SE","SWE","SWEDEN" -"3252384000","3252384511","PL","POL","POLAND" -"3252384512","3252384767","GB","GBR","UNITED KINGDOM" -"3252384768","3252385023","NL","NLD","NETHERLANDS" -"3252385024","3252385279","RO","ROM","ROMANIA" -"3252385280","3252385535","GB","GBR","UNITED KINGDOM" -"3252385536","3252385791","RO","ROM","ROMANIA" -"3252385792","3252386047","GB","GBR","UNITED KINGDOM" -"3252386048","3252386303","SI","SVN","SLOVENIA" -"3252386304","3252386559","GB","GBR","UNITED KINGDOM" -"3252386560","3252386815","BE","BEL","BELGIUM" -"3252386816","3252387071","UA","UKR","UKRAINE" -"3252387072","3252387327","RU","RUS","RUSSIAN FEDERATION" -"3252387328","3252387583","PL","POL","POLAND" -"3252387584","3252387839","RU","RUS","RUSSIAN FEDERATION" -"3252387840","3252404223","LT","LTU","LITHUANIA" -"3252404224","3252406527","NO","NOR","NORWAY" -"3252406528","3252407295","LT","LTU","LITHUANIA" -"3252407296","3252407583","NO","NOR","NORWAY" -"3252407584","3252407599","NG","NGA","NIGERIA" -"3252407600","3252407615","BJ","BEN","BENIN" -"3252407616","3252407711","NO","NOR","NORWAY" -"3252407712","3252407743","NG","NGA","NIGERIA" -"3252407744","3252407751","NO","NOR","NORWAY" -"3252407752","3252407759","AO","AGO","ANGOLA" -"3252407760","3252407767","NE","NER","NIGER" -"3252407768","3252407775","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"3252407776","3252407807","NO","NOR","NORWAY" -"3252407808","3252407999","GN","GIN","GUINEA" -"3252408000","3252408159","NO","NOR","NORWAY" -"3252408160","3252408191","GQ","GNQ","EQUATORIAL GUINEA" -"3252408192","3252408319","NO","NOR","NORWAY" -"3252408320","3252408335","TR","TUR","TURKEY" -"3252408336","3252408343","GN","GIN","GUINEA" -"3252408344","3252408359","LT","LTU","LITHUANIA" -"3252408360","3252408367","GN","GIN","GUINEA" -"3252408368","3252408383","NG","NGA","NIGERIA" -"3252408384","3252408391","BI","BDI","BURUNDI" -"3252408392","3252408415","LT","LTU","LITHUANIA" -"3252408416","3252408479","NO","NOR","NORWAY" -"3252408480","3252408495","FI","FIN","FINLAND" -"3252408496","3252408543","LT","LTU","LITHUANIA" -"3252408544","3252408551","AF","AFG","AFGHANISTAN" -"3252408552","3252408559","LT","LTU","LITHUANIA" -"3252408560","3252408575","IQ","IRQ","IRAQ" -"3252408576","3252408639","LT","LTU","LITHUANIA" -"3252408640","3252408671","CF","CAF","CENTRAL AFRICAN REPUBLIC" -"3252408672","3252408687","LT","LTU","LITHUANIA" -"3252408688","3252408703","SO","SOM","SOMALIA" -"3252408704","3252408735","NG","NGA","NIGERIA" -"3252408736","3252408767","LT","LTU","LITHUANIA" -"3252408768","3252408783","NG","NGA","NIGERIA" -"3252408784","3252408799","LT","LTU","LITHUANIA" -"3252408800","3252408831","SO","SOM","SOMALIA" -"3252408832","3252408839","NG","NGA","NIGERIA" -"3252408840","3252408847","KE","KEN","KENYA" -"3252408848","3252408855","LR","LBR","LIBERIA" -"3252408856","3252408863","CM","CMR","CAMEROON" -"3252408864","3252408871","LR","LBR","LIBERIA" -"3252408872","3252408879","CI","CIV","COTE D'IVOIRE" -"3252408880","3252409103","LT","LTU","LITHUANIA" -"3252409104","3252409111","SD","SDN","SUDAN" -"3252409112","3252409119","LT","LTU","LITHUANIA" -"3252409120","3252409127","NG","NGA","NIGERIA" -"3252409128","3252409167","LT","LTU","LITHUANIA" -"3252409168","3252409175","UG","UGA","UGANDA" -"3252409176","3252409183","LT","LTU","LITHUANIA" -"3252409184","3252409191","UG","UGA","UGANDA" -"3252409192","3252409199","LT","LTU","LITHUANIA" -"3252409200","3252409207","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"3252409208","3252409263","LT","LTU","LITHUANIA" -"3252409264","3252409343","SO","SOM","SOMALIA" -"3252409344","3252409375","TD","TCD","CHAD" -"3252409376","3252409407","LT","LTU","LITHUANIA" -"3252409408","3252409471","BI","BDI","BURUNDI" -"3252409472","3252409503","LT","LTU","LITHUANIA" -"3252409504","3252409519","IQ","IRQ","IRAQ" -"3252409520","3252409527","NG","NGA","NIGERIA" -"3252409528","3252409535","LT","LTU","LITHUANIA" -"3252409536","3252409543","BI","BDI","BURUNDI" -"3252409544","3252409567","LT","LTU","LITHUANIA" -"3252409568","3252409599","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"3252409600","3252409615","GA","GAB","GABON" -"3252409616","3252409855","LT","LTU","LITHUANIA" -"3252409856","3252410111","BW","BWA","BOTSWANA" -"3252410112","3252410367","LT","LTU","LITHUANIA" -"3252410368","3252410383","BW","BWA","BOTSWANA" -"3252410384","3252410431","LT","LTU","LITHUANIA" -"3252410432","3252410463","BI","BDI","BURUNDI" -"3252410464","3252410623","LT","LTU","LITHUANIA" -"3252410624","3252410751","ZW","ZWE","ZIMBABWE" -"3252410752","3252411135","LT","LTU","LITHUANIA" -"3252411136","3252411167","IQ","IRQ","IRAQ" -"3252411168","3252411375","LT","LTU","LITHUANIA" -"3252411376","3252411391","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"3252411392","3252411647","LT","LTU","LITHUANIA" -"3252411648","3252411679","BI","BDI","BURUNDI" -"3252411680","3252411695","LT","LTU","LITHUANIA" -"3252411696","3252411711","UG","UGA","UGANDA" -"3252411712","3252411743","NG","NGA","NIGERIA" -"3252411744","3252411775","LT","LTU","LITHUANIA" -"3252411776","3252411783","GH","GHA","GHANA" -"3252411784","3252411791","LT","LTU","LITHUANIA" -"3252411792","3252411823","NG","NGA","NIGERIA" -"3252411824","3252411839","LT","LTU","LITHUANIA" -"3252411840","3252411855","MR","MRT","MAURITANIA" -"3252411856","3252411879","LT","LTU","LITHUANIA" -"3252411880","3252411895","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"3252411896","3252413439","LT","LTU","LITHUANIA" -"3252413440","3252414223","ZM","ZMB","ZAMBIA" -"3252414224","3252414239","LT","LTU","LITHUANIA" -"3252414240","3252414271","ZM","ZMB","ZAMBIA" -"3252414272","3252414335","LT","LTU","LITHUANIA" -"3252414336","3252414367","ZM","ZMB","ZAMBIA" -"3252414368","3252414399","LT","LTU","LITHUANIA" -"3252414400","3252414415","ZM","ZMB","ZAMBIA" -"3252414416","3252414463","LT","LTU","LITHUANIA" -"3252414464","3252414479","GH","GHA","GHANA" -"3252414480","3252414495","ML","MLI","MALI" -"3252414496","3252414511","LT","LTU","LITHUANIA" -"3252414512","3252414527","MR","MRT","MAURITANIA" -"3252414528","3252414591","LT","LTU","LITHUANIA" -"3252414592","3252414607","GH","GHA","GHANA" -"3252414608","3252414623","LT","LTU","LITHUANIA" -"3252414624","3252414639","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"3252414640","3252414647","GH","GHA","GHANA" -"3252414648","3252414655","LT","LTU","LITHUANIA" -"3252414656","3252414719","ER","ERI","ERITREA" -"3252414720","3252414975","LT","LTU","LITHUANIA" -"3252414976","3252415031","IQ","IRQ","IRAQ" -"3252415032","3252415039","LT","LTU","LITHUANIA" -"3252415040","3252415055","IQ","IRQ","IRAQ" -"3252415056","3252415551","LT","LTU","LITHUANIA" -"3252415552","3252415567","NG","NGA","NIGERIA" -"3252415568","3252415743","LT","LTU","LITHUANIA" -"3252415744","3252415775","GB","GBR","UNITED KINGDOM" -"3252415776","3252415967","LT","LTU","LITHUANIA" -"3252415968","3252415999","CM","CMR","CAMEROON" -"3252416000","3252416831","LT","LTU","LITHUANIA" -"3252416832","3252416927","GN","GIN","GUINEA" -"3252416928","3252416959","LT","LTU","LITHUANIA" -"3252416960","3252417023","GN","GIN","GUINEA" -"3252417024","3252417279","LT","LTU","LITHUANIA" -"3252417280","3252417535","SO","SOM","SOMALIA" -"3252417536","3252417855","NG","NGA","NIGERIA" -"3252417856","3252417919","LT","LTU","LITHUANIA" -"3252417920","3252417935","MW","MWI","MALAWI" -"3252417936","3252417951","ZM","ZMB","ZAMBIA" -"3252417952","3252418239","LT","LTU","LITHUANIA" -"3252418240","3252418303","JO","JOR","JORDAN" -"3252418304","3252418559","LT","LTU","LITHUANIA" -"3252418560","3252418623","JO","JOR","JORDAN" -"3252418624","3252418687","LT","LTU","LITHUANIA" -"3252418688","3252418719","JO","JOR","JORDAN" -"3252418720","3252418815","LT","LTU","LITHUANIA" -"3252418816","3252418847","KE","KEN","KENYA" -"3252418848","3252419071","LT","LTU","LITHUANIA" -"3252419072","3252419087","ZM","ZMB","ZAMBIA" -"3252419088","3252419103","LT","LTU","LITHUANIA" -"3252419104","3252419119","SL","SLE","SIERRA LEONE" -"3252419120","3252419135","LT","LTU","LITHUANIA" -"3252419136","3252419167","SL","SLE","SIERRA LEONE" -"3252419168","3252419199","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"3252419200","3252419215","LT","LTU","LITHUANIA" -"3252419216","3252419247","GN","GIN","GUINEA" -"3252419248","3252419263","SN","SEN","SENEGAL" -"3252419264","3252419279","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"3252419280","3252419295","LT","LTU","LITHUANIA" -"3252419296","3252419311","SN","SEN","SENEGAL" -"3252419312","3252419327","ZM","ZMB","ZAMBIA" -"3252419328","3252419343","GH","GHA","GHANA" -"3252419344","3252419359","LT","LTU","LITHUANIA" -"3252419360","3252419423","GH","GHA","GHANA" -"3252419424","3252419583","LT","LTU","LITHUANIA" -"3252419584","3252419775","IQ","IRQ","IRAQ" -"3252419776","3252419839","LT","LTU","LITHUANIA" -"3252419840","3252419975","IQ","IRQ","IRAQ" -"3252419976","3252419983","LT","LTU","LITHUANIA" -"3252419984","3252420055","IQ","IRQ","IRAQ" -"3252420056","3252420063","LT","LTU","LITHUANIA" -"3252420064","3252420111","IQ","IRQ","IRAQ" -"3252420112","3252420119","GB","GBR","UNITED KINGDOM" -"3252420120","3252420143","IQ","IRQ","IRAQ" -"3252420144","3252420151","LT","LTU","LITHUANIA" -"3252420152","3252420159","IQ","IRQ","IRAQ" -"3252420160","3252420191","LT","LTU","LITHUANIA" -"3252420192","3252420287","IQ","IRQ","IRAQ" -"3252420288","3252420295","LT","LTU","LITHUANIA" -"3252420296","3252420415","IQ","IRQ","IRAQ" -"3252420416","3252420431","GB","GBR","UNITED KINGDOM" -"3252420432","3252420447","IQ","IRQ","IRAQ" -"3252420448","3252420455","LT","LTU","LITHUANIA" -"3252420456","3252420463","IQ","IRQ","IRAQ" -"3252420464","3252420471","AF","AFG","AFGHANISTAN" -"3252420472","3252420479","LT","LTU","LITHUANIA" -"3252420480","3252420583","IQ","IRQ","IRAQ" -"3252420584","3252420591","LT","LTU","LITHUANIA" -"3252420592","3252420607","IQ","IRQ","IRAQ" -"3252420608","3252421119","LT","LTU","LITHUANIA" -"3252421120","3252421631","NO","NOR","NORWAY" -"3252421632","3252424703","LT","LTU","LITHUANIA" -"3252424704","3252424719","GN","GIN","GUINEA" -"3252424720","3252424735","LT","LTU","LITHUANIA" -"3252424736","3252424767","MA","MAR","MOROCCO" -"3252424768","3252424799","LT","LTU","LITHUANIA" -"3252424800","3252424815","NE","NER","NIGER" -"3252424816","3252424959","LT","LTU","LITHUANIA" -"3252424960","3252424967","KE","KEN","KENYA" -"3252424968","3252425023","LT","LTU","LITHUANIA" -"3252425024","3252425215","SO","SOM","SOMALIA" -"3252425216","3252425343","TD","TCD","CHAD" -"3252425344","3252425471","LT","LTU","LITHUANIA" -"3252425472","3252425543","AO","AGO","ANGOLA" -"3252425544","3252425551","LT","LTU","LITHUANIA" -"3252425552","3252425575","AO","AGO","ANGOLA" -"3252425576","3252425599","LT","LTU","LITHUANIA" -"3252425600","3252425631","AF","AFG","AFGHANISTAN" -"3252425632","3252425727","LT","LTU","LITHUANIA" -"3252425728","3252425855","ZM","ZMB","ZAMBIA" -"3252425856","3252426751","LT","LTU","LITHUANIA" -"3252426752","3252427263","MZ","MOZ","MOZAMBIQUE" -"3252427264","3252427519","NG","NGA","NIGERIA" -"3252427520","3252427775","LT","LTU","LITHUANIA" -"3252427776","3252428287","MW","MWI","MALAWI" -"3252428288","3252428351","NG","NGA","NIGERIA" -"3252428352","3252428383","AO","AGO","ANGOLA" -"3252428384","3252428415","LT","LTU","LITHUANIA" -"3252428416","3252428447","KE","KEN","KENYA" -"3252428448","3252428543","LT","LTU","LITHUANIA" -"3252428544","3252428671","CG","COG","CONGO" -"3252428672","3252429823","LT","LTU","LITHUANIA" -"3252429824","3252429951","NE","NER","NIGER" -"3252429952","3252430079","LT","LTU","LITHUANIA" -"3252430080","3252430335","BJ","BEN","BENIN" -"3252430336","3252430463","NE","NER","NIGER" -"3252430464","3252430511","LT","LTU","LITHUANIA" -"3252430512","3252430543","BF","BFA","BURKINA FASO" -"3252430544","3252430559","BJ","BEN","BENIN" -"3252430560","3252430591","BF","BFA","BURKINA FASO" -"3252430592","3252430847","GN","GIN","GUINEA" -"3252430848","3252431359","MW","MWI","MALAWI" -"3252431360","3252431871","LT","LTU","LITHUANIA" -"3252431872","3252432127","SO","SOM","SOMALIA" -"3252432128","3252432383","LR","LBR","LIBERIA" -"3252432384","3252432399","MW","MWI","MALAWI" -"3252432400","3252432447","LT","LTU","LITHUANIA" -"3252432448","3252432463","MW","MWI","MALAWI" -"3252432464","3252432575","LT","LTU","LITHUANIA" -"3252432576","3252432591","MW","MWI","MALAWI" -"3252432592","3252432895","LT","LTU","LITHUANIA" -"3252432896","3252433407","SO","SOM","SOMALIA" -"3252433408","3252433663","LT","LTU","LITHUANIA" -"3252433664","3252433919","SO","SOM","SOMALIA" -"3252433920","3252434175","MZ","MOZ","MOZAMBIQUE" -"3252434176","3252434687","LT","LTU","LITHUANIA" -"3252434688","3252434703","GH","GHA","GHANA" -"3252434704","3252434711","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"3252434712","3252434719","LT","LTU","LITHUANIA" -"3252434720","3252434735","GH","GHA","GHANA" -"3252434736","3252435199","LT","LTU","LITHUANIA" -"3252435200","3252435247","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"3252435248","3252435295","LT","LTU","LITHUANIA" -"3252435296","3252435303","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"3252435304","3252435319","LT","LTU","LITHUANIA" -"3252435320","3252435327","MZ","MOZ","MOZAMBIQUE" -"3252435328","3252435343","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"3252435344","3252435359","BF","BFA","BURKINA FASO" -"3252435360","3252435375","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"3252435376","3252435415","GN","GIN","GUINEA" -"3252435416","3252435439","LT","LTU","LITHUANIA" -"3252435440","3252435455","GN","GIN","GUINEA" -"3252435456","3252435711","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"3252435712","3252435887","GH","GHA","GHANA" -"3252435888","3252435919","BW","BWA","BOTSWANA" -"3252435920","3252435935","BF","BFA","BURKINA FASO" -"3252435936","3252435967","CF","CAF","CENTRAL AFRICAN REPUBLIC" -"3252435968","3252436223","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"3252436224","3252436239","GN","GIN","GUINEA" -"3252436240","3252436255","NA","NAM","NAMIBIA" -"3252436256","3252436271","ML","MLI","MALI" -"3252436272","3252436287","BF","BFA","BURKINA FASO" -"3252436288","3252436303","LT","LTU","LITHUANIA" -"3252436304","3252436319","ZM","ZMB","ZAMBIA" -"3252436320","3252436335","GH","GHA","GHANA" -"3252436336","3252436351","ZM","ZMB","ZAMBIA" -"3252436352","3252436383","GN","GIN","GUINEA" -"3252436384","3252436399","SN","SEN","SENEGAL" -"3252436400","3252436415","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"3252436416","3252436447","LT","LTU","LITHUANIA" -"3252436448","3252436479","ER","ERI","ERITREA" -"3252436480","3252437759","LT","LTU","LITHUANIA" -"3252437760","3252438015","ZM","ZMB","ZAMBIA" -"3252438016","3252438271","TR","TUR","TURKEY" -"3252438272","3252438527","MD","MDA","REPUBLIC OF MOLDOVA" -"3252438528","3252438783","CM","CMR","CAMEROON" -"3252438784","3252439039","LT","LTU","LITHUANIA" -"3252439040","3252439055","BJ","BEN","BENIN" -"3252439056","3252439071","LT","LTU","LITHUANIA" -"3252439072","3252439079","BJ","BEN","BENIN" -"3252439080","3252439263","LT","LTU","LITHUANIA" -"3252439264","3252439271","SN","SEN","SENEGAL" -"3252439272","3252439287","LT","LTU","LITHUANIA" -"3252439288","3252439295","SN","SEN","SENEGAL" -"3252439296","3252439391","SO","SOM","SOMALIA" -"3252439392","3252439807","LT","LTU","LITHUANIA" -"3252439808","3252439871","SO","SOM","SOMALIA" -"3252439872","3252440063","LT","LTU","LITHUANIA" -"3252440064","3252440319","MW","MWI","MALAWI" -"3252440320","3252440383","NG","NGA","NIGERIA" -"3252440384","3252441343","LT","LTU","LITHUANIA" -"3252441344","3252441599","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"3252441600","3252442127","LT","LTU","LITHUANIA" -"3252442128","3252442143","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"3252442144","3252442175","LT","LTU","LITHUANIA" -"3252442176","3252442191","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"3252442192","3252442623","LT","LTU","LITHUANIA" -"3252442624","3252442751","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"3252442752","3252442783","LT","LTU","LITHUANIA" -"3252442784","3252442815","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"3252442816","3252442831","LT","LTU","LITHUANIA" -"3252442832","3252442863","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"3252442864","3252442879","LT","LTU","LITHUANIA" -"3252442880","3252443135","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"3252443136","3252443327","LT","LTU","LITHUANIA" -"3252443328","3252443375","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"3252443376","3252444191","LT","LTU","LITHUANIA" -"3252444192","3252444927","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"3252444928","3252445183","LT","LTU","LITHUANIA" -"3252445184","3252445263","GN","GIN","GUINEA" -"3252445264","3252445695","LT","LTU","LITHUANIA" -"3252445696","3252446207","NG","NGA","NIGERIA" -"3252446208","3252446703","LT","LTU","LITHUANIA" -"3252446704","3252446719","NO","NOR","NORWAY" -"3252446720","3252447231","LT","LTU","LITHUANIA" -"3252447232","3252448255","NO","NOR","NORWAY" -"3252448256","3252448511","SE","SWE","SWEDEN" -"3252448512","3252448767","NO","NOR","NORWAY" -"3252448768","3252449279","SE","SWE","SWEDEN" -"3252449280","3252449535","CN","CHN","CHINA" -"3252449536","3252449615","CH","CHE","SWITZERLAND" -"3252449616","3252449623","DK","DNK","DENMARK" -"3252449624","3252449791","LT","LTU","LITHUANIA" -"3252449792","3252450047","CH","CHE","SWITZERLAND" -"3252450048","3252450303","LT","LTU","LITHUANIA" -"3252450304","3252450815","NO","NOR","NORWAY" -"3252450816","3252450823","ET","ETH","ETHIOPIA" -"3252450824","3252450879","LT","LTU","LITHUANIA" -"3252450880","3252450911","NO","NOR","NORWAY" -"3252450912","3252451071","LT","LTU","LITHUANIA" -"3252451072","3252451327","CH","CHE","SWITZERLAND" -"3252451328","3252451839","LT","LTU","LITHUANIA" -"3252451840","3252451855","NO","NOR","NORWAY" -"3252451856","3252451967","LT","LTU","LITHUANIA" -"3252451968","3252451999","NO","NOR","NORWAY" -"3252452000","3252452095","LT","LTU","LITHUANIA" -"3252452096","3252452127","NO","NOR","NORWAY" -"3252452128","3252452135","LT","LTU","LITHUANIA" -"3252452136","3252452143","NO","NOR","NORWAY" -"3252452144","3252452159","LT","LTU","LITHUANIA" -"3252452160","3252452175","NL","NLD","NETHERLANDS" -"3252452176","3252452191","NO","NOR","NORWAY" -"3252452192","3252452215","NL","NLD","NETHERLANDS" -"3252452216","3252452223","NO","NOR","NORWAY" -"3252452224","3252452227","NL","NLD","NETHERLANDS" -"3252452228","3252452231","LT","LTU","LITHUANIA" -"3252452232","3252452239","NL","NLD","NETHERLANDS" -"3252452240","3252452271","LT","LTU","LITHUANIA" -"3252452272","3252452351","NO","NOR","NORWAY" -"3252452352","3252452487","LT","LTU","LITHUANIA" -"3252452488","3252452495","MW","MWI","MALAWI" -"3252452496","3252452503","ZM","ZMB","ZAMBIA" -"3252452504","3252452511","SD","SDN","SUDAN" -"3252452512","3252452607","LT","LTU","LITHUANIA" -"3252452608","3252452735","TD","TCD","CHAD" -"3252452736","3252452863","LT","LTU","LITHUANIA" -"3252452864","3252452879","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"3252452880","3252453119","LT","LTU","LITHUANIA" -"3252453120","3252453151","NG","NGA","NIGERIA" -"3252453152","3252453247","LT","LTU","LITHUANIA" -"3252453248","3252453271","NG","NGA","NIGERIA" -"3252453272","3252454527","LT","LTU","LITHUANIA" -"3252454528","3252454583","IQ","IRQ","IRAQ" -"3252454584","3252454655","LT","LTU","LITHUANIA" -"3252454656","3252454911","IQ","IRQ","IRAQ" -"3252454912","3252455167","GB","GBR","UNITED KINGDOM" -"3252455168","3252455295","NG","NGA","NIGERIA" -"3252455296","3252455679","LT","LTU","LITHUANIA" -"3252455680","3252455807","BI","BDI","BURUNDI" -"3252455808","3252455935","LT","LTU","LITHUANIA" -"3252455936","3252456191","MW","MWI","MALAWI" -"3252456192","3252456959","LT","LTU","LITHUANIA" -"3252456960","3252457471","NG","NGA","NIGERIA" -"3252457472","3252460799","LT","LTU","LITHUANIA" -"3252460800","3252460831","AF","AFG","AFGHANISTAN" -"3252460832","3252460847","KP","PRK","DEMOCRATIC PEOPLE'S REPUBLIC OF KOREA" -"3252460848","3252461055","LT","LTU","LITHUANIA" -"3252461056","3252461567","NO","NOR","NORWAY" -"3252461568","3252464383","LT","LTU","LITHUANIA" -"3252464384","3252465663","NO","NOR","NORWAY" -"3252465664","3252465919","GH","GHA","GHANA" -"3252465920","3252465951","LT","LTU","LITHUANIA" -"3252465952","3252465983","GH","GHA","GHANA" -"3252465984","3252466047","LT","LTU","LITHUANIA" -"3252466048","3252466175","GH","GHA","GHANA" -"3252466176","3252466687","LT","LTU","LITHUANIA" -"3252466688","3252467199","NE","NER","NIGER" -"3252467200","3252467455","LT","LTU","LITHUANIA" -"3252467456","3252467967","CG","COG","CONGO" -"3252467968","3252468223","LT","LTU","LITHUANIA" -"3252468224","3252468231","CM","CMR","CAMEROON" -"3252468232","3252468239","LT","LTU","LITHUANIA" -"3252468240","3252468479","CM","CMR","CAMEROON" -"3252468480","3252468735","CG","COG","CONGO" -"3252468736","3252469247","ZM","ZMB","ZAMBIA" -"3252469248","3252473343","LT","LTU","LITHUANIA" -"3252473344","3252473855","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"3252473856","3252474879","SO","SOM","SOMALIA" -"3252474880","3252475903","LT","LTU","LITHUANIA" -"3252475904","3252476415","NG","NGA","NIGERIA" -"3252476416","3252480511","LT","LTU","LITHUANIA" -"3252480512","3252480895","CG","COG","CONGO" -"3252480896","3252481023","LT","LTU","LITHUANIA" -"3252481024","3252481535","MZ","MOZ","MOZAMBIQUE" -"3252481536","3252483071","LT","LTU","LITHUANIA" -"3252483072","3252483583","KW","KWT","KUWAIT" -"3252483584","3252484095","LT","LTU","LITHUANIA" -"3252484096","3252486143","KW","KWT","KUWAIT" -"3252486144","3252490239","BE","BEL","BELGIUM" -"3252490240","3252495871","SE","SWE","SWEDEN" -"3252495872","3252496127","HU","HUN","HUNGARY" -"3252496128","3252500991","SE","SWE","SWEDEN" -"3252500992","3252501247","DE","DEU","GERMANY" -"3252501248","3252505343","SE","SWE","SWEDEN" -"3252505344","3252505855","US","USA","UNITED STATES" -"3252505856","3252507135","SE","SWE","SWEDEN" -"3252507648","3252509951","GB","GBR","UNITED KINGDOM" -"3252509952","3252510719","CH","CHE","SWITZERLAND" -"3252510720","3252514815","FR","FRA","FRANCE" -"3252514816","3252515071","SI","SVN","SLOVENIA" -"3252515072","3252515327","GB","GBR","UNITED KINGDOM" -"3252515328","3252515583","DE","DEU","GERMANY" -"3252515584","3252515839","SI","SVN","SLOVENIA" -"3252515840","3252516095","CH","CHE","SWITZERLAND" -"3252516096","3252516351","FR","FRA","FRANCE" -"3252516352","3252516607","GB","GBR","UNITED KINGDOM" -"3252516608","3252516863","SE","SWE","SWEDEN" -"3252516864","3252517119","FR","FRA","FRANCE" -"3252517376","3252517631","PL","POL","POLAND" -"3252517632","3252517887","BE","BEL","BELGIUM" -"3252517888","3252518143","DK","DNK","DENMARK" -"3252518144","3252518399","NL","NLD","NETHERLANDS" -"3252518400","3252518655","PL","POL","POLAND" -"3252518656","3252518911","DE","DEU","GERMANY" -"3252518912","3252527103","NL","NLD","NETHERLANDS" -"3252527104","3252535295","BE","BEL","BELGIUM" -"3252535296","3252539391","GB","GBR","UNITED KINGDOM" -"3252540416","3252541951","NL","NLD","NETHERLANDS" -"3252542208","3252551679","BE","BEL","BELGIUM" -"3252551680","3252563967","CH","CHE","SWITZERLAND" -"3252566784","3252567295","CH","CHE","SWITZERLAND" -"3252567296","3252567551","GB","GBR","UNITED KINGDOM" -"3252567808","3252568063","RO","ROM","ROMANIA" -"3252568064","3252579327","CH","CHE","SWITZERLAND" -"3252579328","3252579583","FR","FRA","FRANCE" -"3252579584","3252579839","RU","RUS","RUSSIAN FEDERATION" -"3252579840","3252580095","SE","SWE","SWEDEN" -"3252580096","3252580351","UA","UKR","UKRAINE" -"3252580352","3252584447","LI","LIE","LIECHTENSTEIN" -"3252584448","3252584703","FR","FRA","FRANCE" -"3252584704","3252584959","IL","ISR","ISRAEL" -"3252584960","3252585215","CZ","CZE","CZECH REPUBLIC" -"3252585216","3252585471","PL","POL","POLAND" -"3252585472","3252585727","NL","NLD","NETHERLANDS" -"3252585728","3252585983","FI","FIN","FINLAND" -"3252585984","3252586239","FR","FRA","FRANCE" -"3252586240","3252586495","PL","POL","POLAND" -"3252586496","3252586751","IT","ITA","ITALY" -"3252586752","3252587007","NL","NLD","NETHERLANDS" -"3252587008","3252587263","CH","CHE","SWITZERLAND" -"3252587264","3252587519","AT","AUT","AUSTRIA" -"3252587520","3252587775","UA","UKR","UKRAINE" -"3252587776","3252588031","SE","SWE","SWEDEN" -"3252588032","3252600319","CH","CHE","SWITZERLAND" -"3252600576","3252600831","RU","RUS","RUSSIAN FEDERATION" -"3252600832","3252616703","CH","CHE","SWITZERLAND" -"3252616704","3252616959","ES","ESP","SPAIN" -"3252616960","3252617215","CH","CHE","SWITZERLAND" -"3252617216","3252617471","PL","POL","POLAND" -"3252617472","3252636671","CH","CHE","SWITZERLAND" -"3252636672","3252636927","TR","TUR","TURKEY" -"3252636928","3252637183","DE","DEU","GERMANY" -"3252637184","3252637695","GB","GBR","UNITED KINGDOM" -"3252637696","3252642303","CH","CHE","SWITZERLAND" -"3252642304","3252642559","UA","UKR","UKRAINE" -"3252642560","3252642815","DK","DNK","DENMARK" -"3252642816","3252643071","NL","NLD","NETHERLANDS" -"3252643072","3252643327","RO","ROM","ROMANIA" -"3252643328","3252643583","CH","CHE","SWITZERLAND" -"3252643584","3252643839","AT","AUT","AUSTRIA" -"3252643840","3252645631","CH","CHE","SWITZERLAND" -"3252645888","3252682751","CH","CHE","SWITZERLAND" -"3252682752","3252813823","HU","HUN","HUNGARY" -"3252813824","3252830207","RO","ROM","ROMANIA" -"3252830208","3252832255","MD","MDA","REPUBLIC OF MOLDOVA" -"3252832256","3252832767","RO","ROM","ROMANIA" -"3252832768","3252834303","MD","MDA","REPUBLIC OF MOLDOVA" -"3252834304","3252862975","RO","ROM","ROMANIA" -"3252862976","3252879359","HU","HUN","HUNGARY" -"3252879360","3252895743","EG","EGY","EGYPT" -"3252895744","3252903935","IT","ITA","ITALY" -"3252903936","3252904447","UA","UKR","UKRAINE" -"3252904448","3252904703","RU","RUS","RUSSIAN FEDERATION" -"3252904704","3252904959","DE","DEU","GERMANY" -"3252904960","3252905215","PL","POL","POLAND" -"3252905216","3252905471","CH","CHE","SWITZERLAND" -"3252905472","3252905727","LT","LTU","LITHUANIA" -"3252905728","3252905983","BE","BEL","BELGIUM" -"3252905984","3252906239","IT","ITA","ITALY" -"3252906240","3252906495","PL","POL","POLAND" -"3252906496","3252906751","GB","GBR","UNITED KINGDOM" -"3252906752","3252907007","FR","FRA","FRANCE" -"3252907008","3252907263","AT","AUT","AUSTRIA" -"3252907264","3252907775","RO","ROM","ROMANIA" -"3252907776","3252908031","GB","GBR","UNITED KINGDOM" -"3252908032","3252908287","PL","POL","POLAND" -"3252908288","3252908543","AT","AUT","AUSTRIA" -"3252908544","3252908799","MT","MLT","MALTA" -"3252908800","3252909055","UA","UKR","UKRAINE" -"3252909056","3252909311","PL","POL","POLAND" -"3252909312","3252909567","DE","DEU","GERMANY" -"3252909568","3252909823","GB","GBR","UNITED KINGDOM" -"3252909824","3252910335","UA","UKR","UKRAINE" -"3252910336","3252910591","NL","NLD","NETHERLANDS" -"3252910592","3252910847","CH","CHE","SWITZERLAND" -"3252910848","3252911103","PL","POL","POLAND" -"3252911104","3252911359","DE","DEU","GERMANY" -"3252911360","3252911615","RU","RUS","RUSSIAN FEDERATION" -"3252911616","3252911871","SE","SWE","SWEDEN" -"3252911872","3252912127","SA","SAU","SAUDI ARABIA" -"3252912384","3252912639","HU","HUN","HUNGARY" -"3252912640","3252912895","FR","FRA","FRANCE" -"3252912896","3252913151","PL","POL","POLAND" -"3252913152","3252913407","ES","ESP","SPAIN" -"3252913408","3252913663","FR","FRA","FRANCE" -"3252913664","3252913919","CZ","CZE","CZECH REPUBLIC" -"3252913920","3252914175","NO","NOR","NORWAY" -"3252914176","3252916223","FR","FRA","FRANCE" -"3252916224","3252920319","DE","DEU","GERMANY" -"3252920320","3252928511","LB","LBN","LEBANON" -"3252928512","3252929535","DE","DEU","GERMANY" -"3252929536","3252930559","HU","HUN","HUNGARY" -"3252930560","3252931071","GB","GBR","UNITED KINGDOM" -"3252931072","3252931583","DE","DEU","GERMANY" -"3252931584","3252932095","NO","NOR","NORWAY" -"3252932096","3252933631","UA","UKR","UKRAINE" -"3252933632","3252934655","IT","ITA","ITALY" -"3252934656","3252936703","PL","POL","POLAND" -"3252936704","3252937215","CH","CHE","SWITZERLAND" -"3252937216","3252937727","RO","ROM","ROMANIA" -"3252937728","3252938239","FR","FRA","FRANCE" -"3252938240","3252938751","UA","UKR","UKRAINE" -"3252938752","3252939263","RU","RUS","RUSSIAN FEDERATION" -"3252939776","3252940287","RO","ROM","ROMANIA" -"3252940288","3252940799","PT","PRT","PORTUGAL" -"3252940800","3252941311","RU","RUS","RUSSIAN FEDERATION" -"3252941312","3252941823","RO","ROM","ROMANIA" -"3252941824","3252942847","GB","GBR","UNITED KINGDOM" -"3252942848","3252943359","FR","FRA","FRANCE" -"3252943360","3252943871","UA","UKR","UKRAINE" -"3252943872","3252944383","RU","RUS","RUSSIAN FEDERATION" -"3252944384","3252944895","DE","DEU","GERMANY" -"3252944896","3252945151","AT","AUT","AUSTRIA" -"3252945152","3252945407","GB","GBR","UNITED KINGDOM" -"3252945408","3252945663","UA","UKR","UKRAINE" -"3252945664","3252980735","AT","AUT","AUSTRIA" -"3252980736","3252980991","PL","POL","POLAND" -"3252980992","3252981247","GB","GBR","UNITED KINGDOM" -"3252981248","3252981503","RU","RUS","RUSSIAN FEDERATION" -"3252981504","3252981759","SE","SWE","SWEDEN" -"3252982016","3252982271","RO","ROM","ROMANIA" -"3252982272","3252982527","DE","DEU","GERMANY" -"3252982528","3252982783","FR","FRA","FRANCE" -"3252982784","3252983039","UA","UKR","UKRAINE" -"3252983040","3252983551","DE","DEU","GERMANY" -"3252983552","3252983807","SI","SVN","SLOVENIA" -"3252983808","3252984063","BG","BGR","BULGARIA" -"3252984064","3252984319","RO","ROM","ROMANIA" -"3252984320","3252984575","AT","AUT","AUSTRIA" -"3252984576","3252984831","GB","GBR","UNITED KINGDOM" -"3252984832","3252985087","FR","FRA","FRANCE" -"3252985088","3252985343","SE","SWE","SWEDEN" -"3252985344","3252985599","AT","AUT","AUSTRIA" -"3252985600","3252985855","RU","RUS","RUSSIAN FEDERATION" -"3252985856","3252989439","AT","AUT","AUSTRIA" -"3252989440","3252989695","PL","POL","POLAND" -"3252989696","3253004799","AT","AUT","AUSTRIA" -"3253004800","3253005055","CZ","CZE","CZECH REPUBLIC" -"3253005056","3253010431","AT","AUT","AUSTRIA" -"3253010432","3253075967","FI","FIN","FINLAND" -"3253075968","3253207039","RO","ROM","ROMANIA" -"3253207040","3253223679","RU","RUS","RUSSIAN FEDERATION" -"3253223680","3253223935","UA","UKR","UKRAINE" -"3253223936","3253230591","RU","RUS","RUSSIAN FEDERATION" -"3253230592","3253230847","BY","BLR","BELARUS" -"3253230848","3253247999","RU","RUS","RUSSIAN FEDERATION" -"3253248000","3253248255","DE","DEU","GERMANY" -"3253248256","3253248511","UZ","UZB","UZBEKISTAN" -"3253248512","3253264383","RU","RUS","RUSSIAN FEDERATION" -"3253264384","3253264895","KZ","KAZ","KAZAKHSTAN" -"3253264896","3253265407","RU","RUS","RUSSIAN FEDERATION" -"3253265408","3253265919","AM","ARM","ARMENIA" -"3253265920","3253270527","RU","RUS","RUSSIAN FEDERATION" -"3253270528","3253271551","BY","BLR","BELARUS" -"3253271552","3253338111","RU","RUS","RUSSIAN FEDERATION" -"3253338112","3253469183","SE","SWE","SWEDEN" -"3253469184","3253471231","AO","AGO","ANGOLA" -"3253471232","3253534719","PT","PRT","PORTUGAL" -"3253534720","3253600255","GB","GBR","UNITED KINGDOM" -"3253600256","3253601279","RO","ROM","ROMANIA" -"3253601280","3253602303","FI","FIN","FINLAND" -"3253602304","3253603327","DE","DEU","GERMANY" -"3253603328","3253605375","PL","POL","POLAND" -"3253605376","3253606399","UA","UKR","UKRAINE" -"3253606400","3253607423","NL","NLD","NETHERLANDS" -"3253607424","3253608447","NG","NGA","NIGERIA" -"3253608448","3253610495","UA","UKR","UKRAINE" -"3253610496","3253611519","PL","POL","POLAND" -"3253611520","3253612543","UA","UKR","UKRAINE" -"3253612544","3253613567","RU","RUS","RUSSIAN FEDERATION" -"3253613568","3253614591","ES","ESP","SPAIN" -"3253614592","3253615615","RO","ROM","ROMANIA" -"3253615616","3253616639","DE","DEU","GERMANY" -"3253616640","3253617663","PL","POL","POLAND" -"3253617664","3253618687","GB","GBR","UNITED KINGDOM" -"3253618688","3253619711","UA","UKR","UKRAINE" -"3253619712","3253620735","IT","ITA","ITALY" -"3253620736","3253622783","GB","GBR","UNITED KINGDOM" -"3253622784","3253623807","DE","DEU","GERMANY" -"3253623808","3253624831","PL","POL","POLAND" -"3253624832","3253625855","UA","UKR","UKRAINE" -"3253625856","3253626879","IT","ITA","ITALY" -"3253626880","3253627903","DE","DEU","GERMANY" -"3253627904","3253628927","UA","UKR","UKRAINE" -"3253628928","3253629951","GR","GRC","GREECE" -"3253629952","3253630975","UA","UKR","UKRAINE" -"3253630976","3253631999","RU","RUS","RUSSIAN FEDERATION" -"3253632000","3253633023","DE","DEU","GERMANY" -"3253633024","3253635071","RU","RUS","RUSSIAN FEDERATION" -"3253635072","3253636095","IT","ITA","ITALY" -"3253636096","3253637119","CH","CHE","SWITZERLAND" -"3253637120","3253638143","ES","ESP","SPAIN" -"3253638144","3253639167","FR","FRA","FRANCE" -"3253639168","3253640191","UA","UKR","UKRAINE" -"3253640192","3253641215","AT","AUT","AUSTRIA" -"3253641216","3253642239","NL","NLD","NETHERLANDS" -"3253642240","3253643263","GB","GBR","UNITED KINGDOM" -"3253643264","3253645311","PL","POL","POLAND" -"3253645312","3253646335","RU","RUS","RUSSIAN FEDERATION" -"3253646336","3253647359","PL","POL","POLAND" -"3253647360","3253648383","DK","DNK","DENMARK" -"3253648384","3253649407","IL","ISR","ISRAEL" -"3253649408","3253650431","UA","UKR","UKRAINE" -"3253650432","3253651455","DE","DEU","GERMANY" -"3253651456","3253652479","PL","POL","POLAND" -"3253652480","3253653503","LI","LIE","LIECHTENSTEIN" -"3253653504","3253654527","IL","ISR","ISRAEL" -"3253654528","3253657599","LV","LVA","LATVIA" -"3253657600","3253658623","UA","UKR","UKRAINE" -"3253658624","3253659647","FR","FRA","FRANCE" -"3253659648","3253660671","GB","GBR","UNITED KINGDOM" -"3253660672","3253661695","NO","NOR","NORWAY" -"3253661696","3253662719","NL","NLD","NETHERLANDS" -"3253662720","3253663743","RO","ROM","ROMANIA" -"3253663744","3253664767","NL","NLD","NETHERLANDS" -"3253664768","3253665791","DE","DEU","GERMANY" -"3253665792","3253666815","CZ","CZE","CZECH REPUBLIC" -"3253667840","3253668863","GB","GBR","UNITED KINGDOM" -"3253668864","3253669887","ES","ESP","SPAIN" -"3253669888","3253670911","DE","DEU","GERMANY" -"3253670912","3253671935","CH","CHE","SWITZERLAND" -"3253671936","3253672959","UA","UKR","UKRAINE" -"3253672960","3253673983","DE","DEU","GERMANY" -"3253673984","3253675007","GB","GBR","UNITED KINGDOM" -"3253675008","3253676031","PL","POL","POLAND" -"3253676032","3253677055","AT","AUT","AUSTRIA" -"3253677056","3253678079","PL","POL","POLAND" -"3253678080","3253679103","DK","DNK","DENMARK" -"3253679104","3253680127","IT","ITA","ITALY" -"3253680128","3253682175","PL","POL","POLAND" -"3253682176","3253683199","RO","ROM","ROMANIA" -"3253683200","3253685247","UA","UKR","UKRAINE" -"3253685248","3253686271","FR","FRA","FRANCE" -"3253686272","3253687295","PL","POL","POLAND" -"3253687296","3253688319","UA","UKR","UKRAINE" -"3253688320","3253690367","NL","NLD","NETHERLANDS" -"3253690368","3253691391","DK","DNK","DENMARK" -"3253691392","3253692415","PL","POL","POLAND" -"3253692416","3253693439","DE","DEU","GERMANY" -"3253693440","3253694463","IL","ISR","ISRAEL" -"3253694464","3253695487","GB","GBR","UNITED KINGDOM" -"3253695488","3253696511","NL","NLD","NETHERLANDS" -"3253696512","3253697535","FR","FRA","FRANCE" -"3253697536","3253698559","PL","POL","POLAND" -"3253698560","3253699071","UA","UKR","UKRAINE" -"3253699072","3253699583","RO","ROM","ROMANIA" -"3253699584","3253700095","UA","UKR","UKRAINE" -"3253700096","3253700607","RO","ROM","ROMANIA" -"3253700608","3253701119","PL","POL","POLAND" -"3253701120","3253702143","RO","ROM","ROMANIA" -"3253702144","3253702655","UA","UKR","UKRAINE" -"3253703168","3253703679","RO","ROM","ROMANIA" -"3253703680","3253704191","HU","HUN","HUNGARY" -"3253704192","3253704703","RU","RUS","RUSSIAN FEDERATION" -"3253704704","3253705215","UA","UKR","UKRAINE" -"3253705216","3253705727","NO","NOR","NORWAY" -"3253705728","3253706239","DE","DEU","GERMANY" -"3253706240","3253706751","RO","ROM","ROMANIA" -"3253706752","3253707263","GB","GBR","UNITED KINGDOM" -"3253707776","3253708287","DE","DEU","GERMANY" -"3253708288","3253708799","RO","ROM","ROMANIA" -"3253708800","3253709311","DK","DNK","DENMARK" -"3253709312","3253709823","UA","UKR","UKRAINE" -"3253709824","3253710335","RO","ROM","ROMANIA" -"3253710336","3253710847","GB","GBR","UNITED KINGDOM" -"3253710848","3253711359","DK","DNK","DENMARK" -"3253711360","3253712383","UA","UKR","UKRAINE" -"3253712384","3253712895","MD","MDA","REPUBLIC OF MOLDOVA" -"3253712896","3253713407","GR","GRC","GREECE" -"3253713408","3253713919","NL","NLD","NETHERLANDS" -"3253713920","3253714431","AT","AUT","AUSTRIA" -"3253714432","3253714943","RO","ROM","ROMANIA" -"3253714944","3253715455","FR","FRA","FRANCE" -"3253715456","3253715967","RO","ROM","ROMANIA" -"3253715968","3253716479","DE","DEU","GERMANY" -"3253716480","3253716991","FR","FRA","FRANCE" -"3253716992","3253717503","CH","CHE","SWITZERLAND" -"3253717504","3253718015","NL","NLD","NETHERLANDS" -"3253718016","3253719551","PL","POL","POLAND" -"3253719552","3253720063","BE","BEL","BELGIUM" -"3253720064","3253720575","RO","ROM","ROMANIA" -"3253720576","3253721087","GR","GRC","GREECE" -"3253721088","3253721599","UA","UKR","UKRAINE" -"3253721600","3253722111","RO","ROM","ROMANIA" -"3253722112","3253722623","CH","CHE","SWITZERLAND" -"3253722624","3253723135","NL","NLD","NETHERLANDS" -"3253723136","3253723647","PL","POL","POLAND" -"3253723648","3253724159","AT","AUT","AUSTRIA" -"3253724160","3253724671","UA","UKR","UKRAINE" -"3253724672","3253725695","RO","ROM","ROMANIA" -"3253725696","3253726207","UA","UKR","UKRAINE" -"3253726208","3253726719","RO","ROM","ROMANIA" -"3253726720","3253727231","UA","UKR","UKRAINE" -"3253727232","3253727743","FR","FRA","FRANCE" -"3253727744","3253728255","RU","RUS","RUSSIAN FEDERATION" -"3253728256","3253728767","PL","POL","POLAND" -"3253728768","3253729279","RO","ROM","ROMANIA" -"3253729280","3253729791","AT","AUT","AUSTRIA" -"3253729792","3253730303","UA","UKR","UKRAINE" -"3253730304","3253730815","RO","ROM","ROMANIA" -"3253730816","3253731327","UA","UKR","UKRAINE" -"3253731328","3253796863","GB","GBR","UNITED KINGDOM" -"3253796864","3253862399","SE","SWE","SWEDEN" -"3253862400","3253862655","GB","GBR","UNITED KINGDOM" -"3253862656","3253882879","FR","FRA","FRANCE" -"3253882880","3253886975","NL","NLD","NETHERLANDS" -"3253886976","3253887231","GB","GBR","UNITED KINGDOM" -"3253887232","3253887487","NL","NLD","NETHERLANDS" -"3253887488","3253887743","ES","ESP","SPAIN" -"3253887744","3253887999","GB","GBR","UNITED KINGDOM" -"3253888000","3253888255","PL","POL","POLAND" -"3253888256","3253888511","BE","BEL","BELGIUM" -"3253888512","3253888767","GB","GBR","UNITED KINGDOM" -"3253888768","3253889023","SE","SWE","SWEDEN" -"3253889024","3253889279","PL","POL","POLAND" -"3253889280","3253889535","CH","CHE","SWITZERLAND" -"3253889536","3253889791","DE","DEU","GERMANY" -"3253889792","3253890047","DK","DNK","DENMARK" -"3253890048","3253890303","NL","NLD","NETHERLANDS" -"3253890304","3253890559","SE","SWE","SWEDEN" -"3253890560","3253890815","GB","GBR","UNITED KINGDOM" -"3253890816","3253891071","IE","IRL","IRELAND" -"3253891072","3253891327","DE","DEU","GERMANY" -"3253891328","3253891583","GB","GBR","UNITED KINGDOM" -"3253891584","3253891839","UA","UKR","UKRAINE" -"3253891840","3253892351","GB","GBR","UNITED KINGDOM" -"3253892352","3253892607","NL","NLD","NETHERLANDS" -"3253892608","3253892863","AT","AUT","AUSTRIA" -"3253892864","3253893119","NL","NLD","NETHERLANDS" -"3253893120","3253893375","RO","ROM","ROMANIA" -"3253893376","3253893631","DE","DEU","GERMANY" -"3253893632","3253893887","SE","SWE","SWEDEN" -"3253893888","3253894143","RU","RUS","RUSSIAN FEDERATION" -"3253894144","3253894399","PT","PRT","PORTUGAL" -"3253894400","3253894655","NL","NLD","NETHERLANDS" -"3253894656","3253894911","FI","FIN","FINLAND" -"3253894912","3253895167","RU","RUS","RUSSIAN FEDERATION" -"3253895168","3253911551","BE","BEL","BELGIUM" -"3253911552","3253919743","FR","FRA","FRANCE" -"3253919744","3253923839","GB","GBR","UNITED KINGDOM" -"3253923840","3253927935","GR","GRC","GREECE" -"3253927936","3253961727","GB","GBR","UNITED KINGDOM" -"3253961728","3253962239","MD","MDA","REPUBLIC OF MOLDOVA" -"3253962240","3253962751","SE","SWE","SWEDEN" -"3253962752","3253963263","BE","BEL","BELGIUM" -"3253963264","3253963775","RU","RUS","RUSSIAN FEDERATION" -"3253963776","3253964287","SI","SVN","SLOVENIA" -"3253964288","3253964799","PL","POL","POLAND" -"3253964800","3253965311","SE","SWE","SWEDEN" -"3253965312","3253966335","PL","POL","POLAND" -"3253966336","3253966847","DE","DEU","GERMANY" -"3253966848","3253967359","UA","UKR","UKRAINE" -"3253967360","3253967871","GR","GRC","GREECE" -"3253967872","3253968895","UA","UKR","UKRAINE" -"3253968896","3253969407","DE","DEU","GERMANY" -"3253969408","3253969919","AT","AUT","AUSTRIA" -"3253969920","3253970431","NL","NLD","NETHERLANDS" -"3253970432","3253970687","DE","DEU","GERMANY" -"3253972992","3253974783","GB","GBR","UNITED KINGDOM" -"3253974784","3253974847","NO","NOR","NORWAY" -"3253974848","3253974911","SE","SWE","SWEDEN" -"3253974912","3253974975","IL","ISR","ISRAEL" -"3253974976","3253975039","SE","SWE","SWEDEN" -"3253975040","3253977087","DE","DEU","GERMANY" -"3253977088","3253985279","TR","TUR","TURKEY" -"3253985280","3253993471","GB","GBR","UNITED KINGDOM" -"3253993472","3254067199","BE","BEL","BELGIUM" -"3254067200","3254069247","CZ","CZE","CZECH REPUBLIC" -"3254069248","3254124543","BE","BEL","BELGIUM" -"3254124544","3254156799","CH","CHE","SWITZERLAND" -"3254156800","3254157055","LI","LIE","LIECHTENSTEIN" -"3254157056","3254177279","CH","CHE","SWITZERLAND" -"3254177280","3254177535","LI","LIE","LIECHTENSTEIN" -"3254177536","3254255615","CH","CHE","SWITZERLAND" -"3254255616","3254485503","FR","FRA","FRANCE" -"3254485504","3254485799","CI","CIV","COTE D'IVOIRE" -"3254485800","3254485807","FR","FRA","FRANCE" -"3254485808","3254485819","CI","CIV","COTE D'IVOIRE" -"3254485820","3254485820","FR","FRA","FRANCE" -"3254485821","3254485821","CI","CIV","COTE D'IVOIRE" -"3254485822","3254485822","FR","FRA","FRANCE" -"3254485823","3254485855","CI","CIV","COTE D'IVOIRE" -"3254485856","3254485859","FR","FRA","FRANCE" -"3254485860","3254485887","CI","CIV","COTE D'IVOIRE" -"3254485888","3254486527","FR","FRA","FRANCE" -"3254486528","3254486543","CH","CHE","SWITZERLAND" -"3254486544","3254486559","US","USA","UNITED STATES" -"3254486560","3254486591","GB","GBR","UNITED KINGDOM" -"3254486592","3254486655","FR","FRA","FRANCE" -"3254486656","3254486671","CH","CHE","SWITZERLAND" -"3254486672","3254486687","FR","FRA","FRANCE" -"3254486688","3254486719","CH","CHE","SWITZERLAND" -"3254486720","3254486735","FR","FRA","FRANCE" -"3254486736","3254486767","US","USA","UNITED STATES" -"3254486768","3254486783","HK","HKG","HONG KONG" -"3254486784","3254487039","FR","FRA","FRANCE" -"3254487040","3254487199","KM","COM","COMOROS" -"3254487200","3254487263","FR","FRA","FRANCE" -"3254487264","3254487295","KM","COM","COMOROS" -"3254487296","3254487419","CF","CAF","CENTRAL AFRICAN REPUBLIC" -"3254487420","3254487551","FR","FRA","FRANCE" -"3254487552","3254487803","CI","CIV","COTE D'IVOIRE" -"3254487804","3254487807","FR","FRA","FRANCE" -"3254487808","3254487855","LB","LBN","LEBANON" -"3254487856","3254487863","FR","FRA","FRANCE" -"3254487864","3254488063","LB","LBN","LEBANON" -"3254488064","3254488431","FR","FRA","FRANCE" -"3254488432","3254488447","MG","MDG","MADAGASCAR" -"3254488448","3254488831","FR","FRA","FRANCE" -"3254488832","3254489087","DJ","DJI","DJIBOUTI" -"3254489088","3254489343","DZ","DZA","ALGERIA" -"3254489344","3254489365","FR","FRA","FRANCE" -"3254489366","3254489367","MR","MRT","MAURITANIA" -"3254489368","3254489369","FR","FRA","FRANCE" -"3254489370","3254489370","MR","MRT","MAURITANIA" -"3254489371","3254489373","FR","FRA","FRANCE" -"3254489374","3254489375","MR","MRT","MAURITANIA" -"3254489376","3254489407","FR","FRA","FRANCE" -"3254489408","3254489439","MR","MRT","MAURITANIA" -"3254489440","3254489443","FR","FRA","FRANCE" -"3254489444","3254489455","MR","MRT","MAURITANIA" -"3254489456","3254489463","FR","FRA","FRANCE" -"3254489464","3254489519","MR","MRT","MAURITANIA" -"3254489520","3254489535","FR","FRA","FRANCE" -"3254489536","3254489567","MR","MRT","MAURITANIA" -"3254489568","3254489599","FR","FRA","FRANCE" -"3254489600","3254489855","MR","MRT","MAURITANIA" -"3254489856","3254490111","TD","TCD","CHAD" -"3254490112","3254490367","FR","FRA","FRANCE" -"3254490368","3254490623","CF","CAF","CENTRAL AFRICAN REPUBLIC" -"3254490624","3254491135","FR","FRA","FRANCE" -"3254491136","3254491391","DZ","DZA","ALGERIA" -"3254491392","3254491607","GQ","GNQ","EQUATORIAL GUINEA" -"3254491608","3254491615","FR","FRA","FRANCE" -"3254491616","3254491647","GQ","GNQ","EQUATORIAL GUINEA" -"3254491648","3254491903","FR","FRA","FRANCE" -"3254491904","3254492031","CM","CMR","CAMEROON" -"3254492032","3254492159","FR","FRA","FRANCE" -"3254492160","3254492671","LB","LBN","LEBANON" -"3254492672","3254492927","FR","FRA","FRANCE" -"3254492928","3254493183","CI","CIV","COTE D'IVOIRE" -"3254493184","3254493323","GP","GLP","GUADELOUPE" -"3254493324","3254493327","FR","FRA","FRANCE" -"3254493328","3254493335","GP","GLP","GUADELOUPE" -"3254493336","3254493343","FR","FRA","FRANCE" -"3254493344","3254493439","GP","GLP","GUADELOUPE" -"3254493440","3254493695","CI","CIV","COTE D'IVOIRE" -"3254493696","3254494527","GP","GLP","GUADELOUPE" -"3254494528","3254494719","FR","FRA","FRANCE" -"3254494720","3254494735","LB","LBN","LEBANON" -"3254494736","3254494743","FR","FRA","FRANCE" -"3254494744","3254494803","LB","LBN","LEBANON" -"3254494804","3254494807","FR","FRA","FRANCE" -"3254494808","3254494975","LB","LBN","LEBANON" -"3254494976","3254495087","DJ","DJI","DJIBOUTI" -"3254495088","3254495231","FR","FRA","FRANCE" -"3254495232","3254495487","CI","CIV","COTE D'IVOIRE" -"3254495488","3254495743","DZ","DZA","ALGERIA" -"3254495744","3254496255","LB","LBN","LEBANON" -"3254496256","3254496511","FR","FRA","FRANCE" -"3254496512","3254496527","CI","CIV","COTE D'IVOIRE" -"3254496528","3254496767","FR","FRA","FRANCE" -"3254496768","3254497247","DZ","DZA","ALGERIA" -"3254497248","3254508031","FR","FRA","FRANCE" -"3254508032","3254508543","GQ","GNQ","EQUATORIAL GUINEA" -"3254508544","3254508799","NE","NER","NIGER" -"3254508800","3254508831","MQ","MTQ","MARTINIQUE" -"3254508832","3254509055","FR","FRA","FRANCE" -"3254509056","3254509567","GQ","GNQ","EQUATORIAL GUINEA" -"3254509568","3254509783","DJ","DJI","DJIBOUTI" -"3254509784","3254510339","FR","FRA","FRANCE" -"3254510340","3254510359","NE","NER","NIGER" -"3254510360","3254510375","FR","FRA","FRANCE" -"3254510376","3254510407","NE","NER","NIGER" -"3254510408","3254510420","FR","FRA","FRANCE" -"3254510421","3254510421","NE","NER","NIGER" -"3254510422","3254510431","FR","FRA","FRANCE" -"3254510432","3254510432","NE","NER","NIGER" -"3254510433","3254510440","FR","FRA","FRANCE" -"3254510441","3254510441","NE","NER","NIGER" -"3254510442","3254510443","FR","FRA","FRANCE" -"3254510444","3254510451","NE","NER","NIGER" -"3254510452","3254510455","FR","FRA","FRANCE" -"3254510456","3254510519","NE","NER","NIGER" -"3254510520","3254510527","FR","FRA","FRANCE" -"3254510528","3254510559","NE","NER","NIGER" -"3254510560","3254510563","FR","FRA","FRANCE" -"3254510564","3254510847","NE","NER","NIGER" -"3254510848","3254521855","FR","FRA","FRANCE" -"3254521856","3254522367","GB","GBR","UNITED KINGDOM" -"3254522368","3254550527","FR","FRA","FRANCE" -"3254550528","3254550783","US","USA","UNITED STATES" -"3254550784","3254551039","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3254551040","3254551295","US","USA","UNITED STATES" -"3254551296","3254551551","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3254551552","3254551807","US","USA","UNITED STATES" -"3254551808","3254552063","FR","FRA","FRANCE" -"3254552064","3254552319","US","USA","UNITED STATES" -"3254552320","3254552831","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3254552832","3254553087","HK","HKG","HONG KONG" -"3254553088","3254553343","FR","FRA","FRANCE" -"3254553344","3254553599","HK","HKG","HONG KONG" -"3254553600","3254554879","FR","FRA","FRANCE" -"3254554880","3254555135","HK","HKG","HONG KONG" -"3254555136","3254555391","FR","FRA","FRANCE" -"3254555392","3254555647","HK","HKG","HONG KONG" -"3254555648","3254557439","FR","FRA","FRANCE" -"3254557440","3254557695","AT","AUT","AUSTRIA" -"3254557696","3254576383","FR","FRA","FRANCE" -"3254576384","3254576543","DO","DOM","DOMINICAN REPUBLIC" -"3254576544","3254583296","FR","FRA","FRANCE" -"3254583297","3254583300","SG","SGP","SINGAPORE" -"3254583301","3254583302","US","USA","UNITED STATES" -"3254583303","3254583551","FR","FRA","FRANCE" -"3254583552","3254583567","SG","SGP","SINGAPORE" -"3254583568","3254583583","US","USA","UNITED STATES" -"3254583584","3254623743","FR","FRA","FRANCE" -"3254623744","3254624255","US","USA","UNITED STATES" -"3254624256","3254648831","FR","FRA","FRANCE" -"3254648832","3254648895","DK","DNK","DENMARK" -"3254648896","3254649087","GB","GBR","UNITED KINGDOM" -"3254649088","3254649855","AL","ALB","ALBANIA" -"3254649856","3254650879","SE","SWE","SWEDEN" -"3254650880","3254653439","CH","CHE","SWITZERLAND" -"3254653440","3254654847","DE","DEU","GERMANY" -"3254654848","3254654975","DK","DNK","DENMARK" -"3254654976","3254655743","IT","ITA","ITALY" -"3254655744","3254656255","GB","GBR","UNITED KINGDOM" -"3254656256","3254656511","BG","BGR","BULGARIA" -"3254656512","3254656767","DE","DEU","GERMANY" -"3254656768","3254657023","GB","GBR","UNITED KINGDOM" -"3254657024","3254665215","RO","ROM","ROMANIA" -"3254676480","3254676735","DE","DEU","GERMANY" -"3254681600","3254697983","DE","DEU","GERMANY" -"3254697984","3254698495","SE","SWE","SWEDEN" -"3254698496","3254699007","GB","GBR","UNITED KINGDOM" -"3254699008","3254699519","UA","UKR","UKRAINE" -"3254699520","3254700031","US","USA","UNITED STATES" -"3254700032","3254700543","GR","GRC","GREECE" -"3254700544","3254701055","DE","DEU","GERMANY" -"3254701056","3254701567","RU","RUS","RUSSIAN FEDERATION" -"3254701568","3254702079","IL","ISR","ISRAEL" -"3254702080","3254702591","RU","RUS","RUSSIAN FEDERATION" -"3254702592","3254703103","GB","GBR","UNITED KINGDOM" -"3254703104","3254703615","DE","DEU","GERMANY" -"3254703616","3254704127","NL","NLD","NETHERLANDS" -"3254704128","3254705663","UA","UKR","UKRAINE" -"3254705664","3254706175","GR","GRC","GREECE" -"3254706688","3254707199","UA","UKR","UKRAINE" -"3254707200","3254707711","TR","TUR","TURKEY" -"3254707712","3254708223","RO","ROM","ROMANIA" -"3254708224","3254708735","UA","UKR","UKRAINE" -"3254709248","3254709759","DE","DEU","GERMANY" -"3254710272","3254710783","IT","ITA","ITALY" -"3254710784","3254711295","RO","ROM","ROMANIA" -"3254711296","3254711807","FR","FRA","FRANCE" -"3254711808","3254712319","PL","POL","POLAND" -"3254712320","3254712831","RU","RUS","RUSSIAN FEDERATION" -"3254712832","3254713343","KZ","KAZ","KAZAKHSTAN" -"3254713344","3254713855","TR","TUR","TURKEY" -"3254713856","3254714367","NL","NLD","NETHERLANDS" -"3254714368","3254779903","TR","TUR","TURKEY" -"3254779904","3254780159","DE","DEU","GERMANY" -"3254780160","3254780671","GB","GBR","UNITED KINGDOM" -"3254780672","3254780927","LT","LTU","LITHUANIA" -"3254780928","3254781183","GR","GRC","GREECE" -"3254781184","3254781439","NL","NLD","NETHERLANDS" -"3254781440","3254781951","BE","BEL","BELGIUM" -"3254781952","3254782207","LV","LVA","LATVIA" -"3254782208","3254782463","FR","FRA","FRANCE" -"3254782464","3254782719","AT","AUT","AUSTRIA" -"3254782720","3254782975","DE","DEU","GERMANY" -"3254782976","3254783743","CZ","CZE","CZECH REPUBLIC" -"3254783744","3254783999","SA","SAU","SAUDI ARABIA" -"3254784000","3254784255","IT","ITA","ITALY" -"3254796288","3254797311","SE","SWE","SWEDEN" -"3254797312","3254798335","RU","RUS","RUSSIAN FEDERATION" -"3254798336","3254799359","AT","AUT","AUSTRIA" -"3254799360","3254800383","IE","IRL","IRELAND" -"3254800384","3254801407","FI","FIN","FINLAND" -"3254801408","3254802431","HR","HRV","CROATIA" -"3254802432","3254803455","UA","UKR","UKRAINE" -"3254803456","3254804479","DE","DEU","GERMANY" -"3254804480","3254806527","PL","POL","POLAND" -"3254806528","3254807551","UA","UKR","UKRAINE" -"3254807552","3254808575","KZ","KAZ","KAZAKHSTAN" -"3254808576","3254809599","PL","POL","POLAND" -"3254809600","3254810623","UA","UKR","UKRAINE" -"3254810624","3254811647","RU","RUS","RUSSIAN FEDERATION" -"3254811648","3254812671","RO","ROM","ROMANIA" -"3254812672","3254812927","PL","POL","POLAND" -"3254812928","3254813183","RO","ROM","ROMANIA" -"3254813184","3254813439","TR","TUR","TURKEY" -"3254813440","3254813695","UA","UKR","UKRAINE" -"3254813696","3254813951","DK","DNK","DENMARK" -"3254813952","3254814207","IT","ITA","ITALY" -"3254814208","3254814463","SE","SWE","SWEDEN" -"3254814464","3254814719","DE","DEU","GERMANY" -"3254814720","3254814975","RU","RUS","RUSSIAN FEDERATION" -"3254814976","3254815231","CH","CHE","SWITZERLAND" -"3254815232","3254815487","UA","UKR","UKRAINE" -"3254815488","3254815743","GB","GBR","UNITED KINGDOM" -"3254815744","3254815999","IT","ITA","ITALY" -"3254816000","3254816255","RU","RUS","RUSSIAN FEDERATION" -"3254816256","3254816511","TR","TUR","TURKEY" -"3254816512","3254816767","DE","DEU","GERMANY" -"3254816768","3254817279","RU","RUS","RUSSIAN FEDERATION" -"3254817280","3254817535","CY","CYP","CYPRUS" -"3254817536","3254817791","GB","GBR","UNITED KINGDOM" -"3254817792","3254818047","UA","UKR","UKRAINE" -"3254818048","3254818303","DE","DEU","GERMANY" -"3254818304","3254818559","UA","UKR","UKRAINE" -"3254818560","3254818815","DE","DEU","GERMANY" -"3254818816","3254819327","FR","FRA","FRANCE" -"3254819328","3254819583","PL","POL","POLAND" -"3254819584","3254819839","DK","DNK","DENMARK" -"3254819840","3254820095","GB","GBR","UNITED KINGDOM" -"3254820096","3254820351","UA","UKR","UKRAINE" -"3254820352","3254820863","GB","GBR","UNITED KINGDOM" -"3254820864","3254821119","LT","LTU","LITHUANIA" -"3254821120","3254821375","DK","DNK","DENMARK" -"3254821376","3254821631","RU","RUS","RUSSIAN FEDERATION" -"3254821632","3254821887","DE","DEU","GERMANY" -"3254821888","3254822143","HU","HUN","HUNGARY" -"3254822144","3254822399","DE","DEU","GERMANY" -"3254822400","3254822655","FR","FRA","FRANCE" -"3254822656","3254822911","PL","POL","POLAND" -"3254822912","3254823167","CH","CHE","SWITZERLAND" -"3254823168","3254823423","NO","NOR","NORWAY" -"3254823424","3254823679","NL","NLD","NETHERLANDS" -"3254823680","3254823935","PL","POL","POLAND" -"3254823936","3254824191","CH","CHE","SWITZERLAND" -"3254824192","3254824959","BE","BEL","BELGIUM" -"3254824960","3254825215","FR","FRA","FRANCE" -"3254825216","3254825471","RO","ROM","ROMANIA" -"3254825472","3254825727","TR","TUR","TURKEY" -"3254825728","3254825983","FR","FRA","FRANCE" -"3254825984","3254826239","DE","DEU","GERMANY" -"3254826240","3254826495","PL","POL","POLAND" -"3254826496","3254827263","DE","DEU","GERMANY" -"3254827264","3254827519","GR","GRC","GREECE" -"3254827520","3254827775","PL","POL","POLAND" -"3254827776","3254828031","UA","UKR","UKRAINE" -"3254828032","3254828287","DE","DEU","GERMANY" -"3254828288","3254828799","RO","ROM","ROMANIA" -"3254828800","3254829055","BE","BEL","BELGIUM" -"3254829056","3254829311","NO","NOR","NORWAY" -"3254829312","3254829567","GB","GBR","UNITED KINGDOM" -"3254829568","3254829823","NL","NLD","NETHERLANDS" -"3254829824","3254830079","FR","FRA","FRANCE" -"3254830080","3254830335","IE","IRL","IRELAND" -"3254830336","3254830591","NL","NLD","NETHERLANDS" -"3254830592","3254830847","CH","CHE","SWITZERLAND" -"3254830848","3254831103","PL","POL","POLAND" -"3254831104","3254831359","UA","UKR","UKRAINE" -"3254831360","3254831615","DE","DEU","GERMANY" -"3254831616","3254831871","TR","TUR","TURKEY" -"3254831872","3254832127","LT","LTU","LITHUANIA" -"3254832128","3254832383","RO","ROM","ROMANIA" -"3254832384","3254832639","BE","BEL","BELGIUM" -"3254832640","3254832895","UA","UKR","UKRAINE" -"3254832896","3254833151","LV","LVA","LATVIA" -"3254833152","3254833407","DE","DEU","GERMANY" -"3254833408","3254833663","RU","RUS","RUSSIAN FEDERATION" -"3254833664","3254833919","GB","GBR","UNITED KINGDOM" -"3254833920","3254834175","PL","POL","POLAND" -"3254834176","3254834431","CH","CHE","SWITZERLAND" -"3254834432","3254834687","FR","FRA","FRANCE" -"3254834688","3254834943","GB","GBR","UNITED KINGDOM" -"3254834944","3254835199","NO","NOR","NORWAY" -"3254835200","3254835455","DE","DEU","GERMANY" -"3254835456","3254835711","SE","SWE","SWEDEN" -"3254835712","3254835967","UA","UKR","UKRAINE" -"3254835968","3254836223","GB","GBR","UNITED KINGDOM" -"3254836224","3254836479","PL","POL","POLAND" -"3254836480","3254836735","MD","MDA","REPUBLIC OF MOLDOVA" -"3254836736","3254836991","AT","AUT","AUSTRIA" -"3254836992","3254837247","GB","GBR","UNITED KINGDOM" -"3254837248","3254837503","HR","HRV","CROATIA" -"3254837504","3254837759","RU","RUS","RUSSIAN FEDERATION" -"3254837760","3254838015","IE","IRL","IRELAND" -"3254838016","3254838271","GE","GEO","GEORGIA" -"3254838272","3254838527","DE","DEU","GERMANY" -"3254838528","3254838783","CH","CHE","SWITZERLAND" -"3254838784","3254839039","AT","AUT","AUSTRIA" -"3254839040","3254839295","RU","RUS","RUSSIAN FEDERATION" -"3254839296","3254839551","DE","DEU","GERMANY" -"3254839552","3254839807","PL","POL","POLAND" -"3254839808","3254840063","BE","BEL","BELGIUM" -"3254840064","3254840319","BG","BGR","BULGARIA" -"3254840320","3254840575","DK","DNK","DENMARK" -"3254840576","3254840831","UA","UKR","UKRAINE" -"3254840832","3254841343","GB","GBR","UNITED KINGDOM" -"3254841600","3254841855","IE","IRL","IRELAND" -"3254841856","3254842111","LV","LVA","LATVIA" -"3254842112","3254842367","GB","GBR","UNITED KINGDOM" -"3254842368","3254842623","PL","POL","POLAND" -"3254842624","3254842879","RU","RUS","RUSSIAN FEDERATION" -"3254842880","3254843135","SE","SWE","SWEDEN" -"3254843136","3254843647","DE","DEU","GERMANY" -"3254843648","3254843903","FR","FRA","FRANCE" -"3254843904","3254844159","NL","NLD","NETHERLANDS" -"3254844160","3254844415","PL","POL","POLAND" -"3254844416","3254844671","GB","GBR","UNITED KINGDOM" -"3254844672","3254844927","RO","ROM","ROMANIA" -"3254844928","3254845183","DE","DEU","GERMANY" -"3254845184","3254845439","FR","FRA","FRANCE" -"3254845440","3254882303","SK","SVK","SLOVAKIA" -"3254882304","3254882559","PL","POL","POLAND" -"3254882560","3254882815","IL","ISR","ISRAEL" -"3254882816","3254883071","PL","POL","POLAND" -"3254883072","3254883583","GB","GBR","UNITED KINGDOM" -"3254883584","3254883839","AL","ALB","ALBANIA" -"3254883840","3254884351","GB","GBR","UNITED KINGDOM" -"3254884352","3254884607","RU","RUS","RUSSIAN FEDERATION" -"3254884608","3254884863","PL","POL","POLAND" -"3254884864","3254885119","SE","SWE","SWEDEN" -"3254885120","3254885375","DE","DEU","GERMANY" -"3254885632","3254885887","SK","SVK","SLOVAKIA" -"3254886400","3254886655","IT","ITA","ITALY" -"3254886656","3254886911","RU","RUS","RUSSIAN FEDERATION" -"3254886912","3254887423","CH","CHE","SWITZERLAND" -"3254887424","3254888191","GB","GBR","UNITED KINGDOM" -"3254888192","3254888447","RO","ROM","ROMANIA" -"3254889472","3254890495","SK","SVK","SLOVAKIA" -"3254890496","3254890751","DE","DEU","GERMANY" -"3254890752","3254891007","UA","UKR","UKRAINE" -"3254891008","3254891519","RO","ROM","ROMANIA" -"3254891520","3254891775","GB","GBR","UNITED KINGDOM" -"3254891776","3254892031","DE","DEU","GERMANY" -"3254892032","3254892287","GB","GBR","UNITED KINGDOM" -"3254892288","3254892543","BE","BEL","BELGIUM" -"3254892800","3254893567","SK","SVK","SLOVAKIA" -"3254894336","3254894591","SK","SVK","SLOVAKIA" -"3254894592","3254894847","DK","DNK","DENMARK" -"3254894848","3254895103","UA","UKR","UKRAINE" -"3254895104","3254895359","GB","GBR","UNITED KINGDOM" -"3254895360","3254895615","UA","UKR","UKRAINE" -"3254895872","3254896127","SE","SWE","SWEDEN" -"3254896128","3254896383","RU","RUS","RUSSIAN FEDERATION" -"3254896384","3254896639","PL","POL","POLAND" -"3254896640","3254896895","DK","DNK","DENMARK" -"3254896896","3254897151","PL","POL","POLAND" -"3254897152","3254897407","DE","DEU","GERMANY" -"3254897408","3254897663","FR","FRA","FRANCE" -"3254897664","3254897919","NL","NLD","NETHERLANDS" -"3254897920","3254898175","BE","BEL","BELGIUM" -"3254898176","3254898431","AT","AUT","AUSTRIA" -"3254898432","3254898687","DE","DEU","GERMANY" -"3254898688","3254898943","IT","ITA","ITALY" -"3254898944","3254899199","EE","EST","ESTONIA" -"3254899200","3254899455","GB","GBR","UNITED KINGDOM" -"3254899456","3254899711","SE","SWE","SWEDEN" -"3254900480","3254900991","SK","SVK","SLOVAKIA" -"3254901248","3254901503","SK","SVK","SLOVAKIA" -"3254902272","3254904831","SK","SVK","SLOVAKIA" -"3254907904","3254908159","SK","SVK","SLOVAKIA" -"3254910976","3254926279","FR","FRA","FRANCE" -"3254926280","3254926287","GB","GBR","UNITED KINGDOM" -"3254926288","3254937999","FR","FRA","FRANCE" -"3254938000","3254938007","GB","GBR","UNITED KINGDOM" -"3254938008","3254994734","FR","FRA","FRANCE" -"3254994735","3254994735","BE","BEL","BELGIUM" -"3254994736","3255017648","FR","FRA","FRANCE" -"3255017649","3255017649","LB","LBN","LEBANON" -"3255017650","3255120639","FR","FRA","FRANCE" -"3255120640","3255120895","DE","DEU","GERMANY" -"3255120896","3255123711","FR","FRA","FRANCE" -"3255123712","3255123967","DE","DEU","GERMANY" -"3255123968","3255125759","FR","FRA","FRANCE" -"3255126016","3255172351","FR","FRA","FRANCE" -"3255172352","3255172607","DE","DEU","GERMANY" -"3255172608","3255173119","FR","FRA","FRANCE" -"3255173120","3255173631","GB","GBR","UNITED KINGDOM" -"3255173648","3255173711","GB","GBR","UNITED KINGDOM" -"3255173760","3255173823","GB","GBR","UNITED KINGDOM" -"3255173840","3255174151","GB","GBR","UNITED KINGDOM" -"3255174160","3255174167","GB","GBR","UNITED KINGDOM" -"3255174200","3255174207","GB","GBR","UNITED KINGDOM" -"3255174216","3255174247","GB","GBR","UNITED KINGDOM" -"3255174272","3255174279","GB","GBR","UNITED KINGDOM" -"3255174312","3255174319","GB","GBR","UNITED KINGDOM" -"3255174328","3255174335","GB","GBR","UNITED KINGDOM" -"3255174376","3255174383","GB","GBR","UNITED KINGDOM" -"3255174400","3255175167","GB","GBR","UNITED KINGDOM" -"3255175200","3255175231","GB","GBR","UNITED KINGDOM" -"3255175248","3255175263","GB","GBR","UNITED KINGDOM" -"3255175280","3255175295","GB","GBR","UNITED KINGDOM" -"3255175312","3255175327","GB","GBR","UNITED KINGDOM" -"3255175432","3255175447","GB","GBR","UNITED KINGDOM" -"3255175456","3255175503","GB","GBR","UNITED KINGDOM" -"3255175512","3255175535","GB","GBR","UNITED KINGDOM" -"3255175552","3255175559","GB","GBR","UNITED KINGDOM" -"3255175592","3255175607","GB","GBR","UNITED KINGDOM" -"3255175680","3255175935","GB","GBR","UNITED KINGDOM" -"3255176192","3255177215","GB","GBR","UNITED KINGDOM" -"3255177472","3255177855","GB","GBR","UNITED KINGDOM" -"3255177984","3255187199","GB","GBR","UNITED KINGDOM" -"3255187200","3255187455","DE","DEU","GERMANY" -"3255187456","3255187711","GB","GBR","UNITED KINGDOM" -"3255188480","3255191807","GB","GBR","UNITED KINGDOM" -"3255192320","3255193863","GB","GBR","UNITED KINGDOM" -"3255193888","3255193959","GB","GBR","UNITED KINGDOM" -"3255193968","3255193975","GB","GBR","UNITED KINGDOM" -"3255193976","3255193983","GI","GIB","GIBRALTAR" -"3255193984","3255193999","GB","GBR","UNITED KINGDOM" -"3255194016","3255194039","GB","GBR","UNITED KINGDOM" -"3255194056","3255194063","GB","GBR","UNITED KINGDOM" -"3255194072","3255194431","GB","GBR","UNITED KINGDOM" -"3255194496","3255194559","GB","GBR","UNITED KINGDOM" -"3255194624","3255194703","GB","GBR","UNITED KINGDOM" -"3255194720","3255194815","GB","GBR","UNITED KINGDOM" -"3255194880","3255205887","GB","GBR","UNITED KINGDOM" -"3255205888","3255214079","FR","FRA","FRANCE" -"3255214080","3255222271","CH","CHE","SWITZERLAND" -"3255222272","3255223295","DE","DEU","GERMANY" -"3255224320","3255225343","RO","ROM","ROMANIA" -"3255225344","3255226367","PL","POL","POLAND" -"3255226368","3255227391","DE","DEU","GERMANY" -"3255227392","3255228415","RO","ROM","ROMANIA" -"3255228416","3255230463","RU","RUS","RUSSIAN FEDERATION" -"3255230720","3255230975","PS","PSE","PALESTINIAN TERRITORY, OCCUPIED" -"3255230976","3255231231","DE","DEU","GERMANY" -"3255231232","3255231487","BE","BEL","BELGIUM" -"3255231488","3255231743","DE","DEU","GERMANY" -"3255231744","3255231999","PT","PRT","PORTUGAL" -"3255232000","3255232255","RO","ROM","ROMANIA" -"3255232256","3255233023","UA","UKR","UKRAINE" -"3255233024","3255233279","DE","DEU","GERMANY" -"3255233280","3255233535","GB","GBR","UNITED KINGDOM" -"3255233536","3255233791","SE","SWE","SWEDEN" -"3255233792","3255234047","SI","SVN","SLOVENIA" -"3255234048","3255234303","NO","NOR","NORWAY" -"3255234304","3255234559","DE","DEU","GERMANY" -"3255234560","3255234815","FR","FRA","FRANCE" -"3255234816","3255235071","PL","POL","POLAND" -"3255235072","3255235327","SI","SVN","SLOVENIA" -"3255235328","3255235583","SE","SWE","SWEDEN" -"3255235584","3255235839","GB","GBR","UNITED KINGDOM" -"3255235840","3255236351","PL","POL","POLAND" -"3255236352","3255236607","IT","ITA","ITALY" -"3255236608","3255236863","GB","GBR","UNITED KINGDOM" -"3255236864","3255237119","DE","DEU","GERMANY" -"3255237120","3255237375","AT","AUT","AUSTRIA" -"3255237376","3255237887","SE","SWE","SWEDEN" -"3255237888","3255238143","ES","ESP","SPAIN" -"3255238144","3255238399","GB","GBR","UNITED KINGDOM" -"3255238400","3255238655","QA","QAT","QATAR" -"3255238656","3255243679","BE","BEL","BELGIUM" -"3255243680","3255243711","LU","LUX","LUXEMBOURG" -"3255243712","3255245599","BE","BEL","BELGIUM" -"3255245600","3255245631","LU","LUX","LUXEMBOURG" -"3255245632","3255245687","BE","BEL","BELGIUM" -"3255245688","3255245695","LU","LUX","LUXEMBOURG" -"3255245696","3255246591","BE","BEL","BELGIUM" -"3255246592","3255246623","LU","LUX","LUXEMBOURG" -"3255246624","3255247455","BE","BEL","BELGIUM" -"3255247456","3255247487","LU","LUX","LUXEMBOURG" -"3255247488","3255247615","BE","BEL","BELGIUM" -"3255247616","3255247631","LU","LUX","LUXEMBOURG" -"3255247632","3255247647","BE","BEL","BELGIUM" -"3255247648","3255247663","LU","LUX","LUXEMBOURG" -"3255247664","3255248127","BE","BEL","BELGIUM" -"3255248128","3255248383","LU","LUX","LUXEMBOURG" -"3255248384","3255248735","BE","BEL","BELGIUM" -"3255248736","3255248767","LU","LUX","LUXEMBOURG" -"3255248768","3255249295","BE","BEL","BELGIUM" -"3255249296","3255249311","LU","LUX","LUXEMBOURG" -"3255249312","3255249935","BE","BEL","BELGIUM" -"3255249936","3255249951","LU","LUX","LUXEMBOURG" -"3255249952","3255250079","BE","BEL","BELGIUM" -"3255250080","3255250111","LU","LUX","LUXEMBOURG" -"3255250112","3255252487","BE","BEL","BELGIUM" -"3255252488","3255252495","FR","FRA","FRANCE" -"3255252496","3255252527","BE","BEL","BELGIUM" -"3255252528","3255252543","LU","LUX","LUXEMBOURG" -"3255252544","3255252559","BE","BEL","BELGIUM" -"3255252560","3255252575","LU","LUX","LUXEMBOURG" -"3255252576","3255254847","BE","BEL","BELGIUM" -"3255254848","3255254879","LU","LUX","LUXEMBOURG" -"3255254880","3255255559","BE","BEL","BELGIUM" -"3255255560","3255255567","LU","LUX","LUXEMBOURG" -"3255255568","3255255599","BE","BEL","BELGIUM" -"3255255600","3255255607","LU","LUX","LUXEMBOURG" -"3255255608","3255255711","BE","BEL","BELGIUM" -"3255255712","3255255743","LU","LUX","LUXEMBOURG" -"3255255744","3255259199","BE","BEL","BELGIUM" -"3255259200","3255259215","LU","LUX","LUXEMBOURG" -"3255259216","3255259327","BE","BEL","BELGIUM" -"3255259328","3255259359","LU","LUX","LUXEMBOURG" -"3255259360","3255259919","BE","BEL","BELGIUM" -"3255259920","3255259927","LU","LUX","LUXEMBOURG" -"3255259928","3255260095","BE","BEL","BELGIUM" -"3255260096","3255260127","LU","LUX","LUXEMBOURG" -"3255260128","3255260319","BE","BEL","BELGIUM" -"3255260320","3255260335","LU","LUX","LUXEMBOURG" -"3255260336","3255260343","BE","BEL","BELGIUM" -"3255260344","3255260347","LU","LUX","LUXEMBOURG" -"3255260348","3255261519","BE","BEL","BELGIUM" -"3255261520","3255261535","LU","LUX","LUXEMBOURG" -"3255261536","3255262799","BE","BEL","BELGIUM" -"3255262800","3255262815","LU","LUX","LUXEMBOURG" -"3255262816","3255263295","BE","BEL","BELGIUM" -"3255263296","3255263327","US","USA","UNITED STATES" -"3255263328","3255270431","BE","BEL","BELGIUM" -"3255270432","3255270463","FR","FRA","FRANCE" -"3255270464","3255273855","BE","BEL","BELGIUM" -"3255273856","3255273887","LU","LUX","LUXEMBOURG" -"3255273888","3255274207","BE","BEL","BELGIUM" -"3255274208","3255274239","LU","LUX","LUXEMBOURG" -"3255274240","3255274335","BE","BEL","BELGIUM" -"3255274336","3255274367","LU","LUX","LUXEMBOURG" -"3255274368","3255274847","BE","BEL","BELGIUM" -"3255274848","3255274879","LU","LUX","LUXEMBOURG" -"3255274880","3255274911","BE","BEL","BELGIUM" -"3255274912","3255274943","LU","LUX","LUXEMBOURG" -"3255274944","3255276223","BE","BEL","BELGIUM" -"3255276224","3255276255","FR","FRA","FRANCE" -"3255276256","3255276575","BE","BEL","BELGIUM" -"3255276576","3255276607","LU","LUX","LUXEMBOURG" -"3255276608","3255276671","BE","BEL","BELGIUM" -"3255276672","3255276703","LU","LUX","LUXEMBOURG" -"3255276704","3255277955","BE","BEL","BELGIUM" -"3255277956","3255277959","LU","LUX","LUXEMBOURG" -"3255277960","3255278719","BE","BEL","BELGIUM" -"3255278720","3255278751","LU","LUX","LUXEMBOURG" -"3255278752","3255278855","BE","BEL","BELGIUM" -"3255278856","3255278863","DE","DEU","GERMANY" -"3255278864","3255279087","BE","BEL","BELGIUM" -"3255279088","3255279103","LU","LUX","LUXEMBOURG" -"3255279104","3255279639","BE","BEL","BELGIUM" -"3255279640","3255279647","LU","LUX","LUXEMBOURG" -"3255279648","3255280031","BE","BEL","BELGIUM" -"3255280032","3255280039","LU","LUX","LUXEMBOURG" -"3255280040","3255280047","BE","BEL","BELGIUM" -"3255280048","3255280055","LU","LUX","LUXEMBOURG" -"3255280056","3255283927","BE","BEL","BELGIUM" -"3255283928","3255283931","LU","LUX","LUXEMBOURG" -"3255283932","3255284239","BE","BEL","BELGIUM" -"3255284240","3255284255","LU","LUX","LUXEMBOURG" -"3255284256","3255285535","BE","BEL","BELGIUM" -"3255285536","3255285567","LU","LUX","LUXEMBOURG" -"3255285568","3255286095","BE","BEL","BELGIUM" -"3255286096","3255286103","DK","DNK","DENMARK" -"3255286104","3255286111","LU","LUX","LUXEMBOURG" -"3255286112","3255286279","BE","BEL","BELGIUM" -"3255286280","3255286287","LU","LUX","LUXEMBOURG" -"3255286288","3255288735","BE","BEL","BELGIUM" -"3255288736","3255288799","LU","LUX","LUXEMBOURG" -"3255288800","3255288831","BE","BEL","BELGIUM" -"3255288832","3255289087","LU","LUX","LUXEMBOURG" -"3255289088","3255290143","BE","BEL","BELGIUM" -"3255290144","3255290175","LU","LUX","LUXEMBOURG" -"3255290176","3255290271","BE","BEL","BELGIUM" -"3255290272","3255290287","LU","LUX","LUXEMBOURG" -"3255290288","3255290879","BE","BEL","BELGIUM" -"3255290880","3255291391","LU","LUX","LUXEMBOURG" -"3255291392","3255291399","BE","BEL","BELGIUM" -"3255291400","3255291423","LU","LUX","LUXEMBOURG" -"3255291424","3255291615","BE","BEL","BELGIUM" -"3255291616","3255291623","LU","LUX","LUXEMBOURG" -"3255291624","3255291871","BE","BEL","BELGIUM" -"3255291872","3255291887","LU","LUX","LUXEMBOURG" -"3255291888","3255291983","BE","BEL","BELGIUM" -"3255291984","3255291999","LU","LUX","LUXEMBOURG" -"3255292000","3255292311","BE","BEL","BELGIUM" -"3255292312","3255292319","LU","LUX","LUXEMBOURG" -"3255292320","3255297015","BE","BEL","BELGIUM" -"3255297016","3255297023","HU","HUN","HUNGARY" -"3255297024","3255300803","BE","BEL","BELGIUM" -"3255300804","3255300807","LU","LUX","LUXEMBOURG" -"3255300808","3255304191","BE","BEL","BELGIUM" -"3255304192","3255304447","DE","DEU","GERMANY" -"3255304448","3255305215","LV","LVA","LATVIA" -"3255305472","3255307775","LV","LVA","LATVIA" -"3255307776","3255308031","PL","POL","POLAND" -"3255308032","3255308287","CH","CHE","SWITZERLAND" -"3255308288","3255311359","LV","LVA","LATVIA" -"3255311360","3255311615","GB","GBR","UNITED KINGDOM" -"3255311616","3255311871","SE","SWE","SWEDEN" -"3255311872","3255312127","PT","PRT","PORTUGAL" -"3255312128","3255312383","SE","SWE","SWEDEN" -"3255312384","3255315455","LV","LVA","LATVIA" -"3255315712","3255316223","PL","POL","POLAND" -"3255316224","3255316479","RU","RUS","RUSSIAN FEDERATION" -"3255316480","3255316991","GB","GBR","UNITED KINGDOM" -"3255316992","3255317247","FR","FRA","FRANCE" -"3255317248","3255317503","UA","UKR","UKRAINE" -"3255317504","3255317759","BE","BEL","BELGIUM" -"3255317760","3255318015","BG","BGR","BULGARIA" -"3255318016","3255318271","GB","GBR","UNITED KINGDOM" -"3255318272","3255318527","RU","RUS","RUSSIAN FEDERATION" -"3255318528","3255318783","UA","UKR","UKRAINE" -"3255318784","3255319295","DE","DEU","GERMANY" -"3255319296","3255319551","UA","UKR","UKRAINE" -"3255319552","3255319807","BG","BGR","BULGARIA" -"3255319808","3255320063","AT","AUT","AUSTRIA" -"3255320064","3255320319","BE","BEL","BELGIUM" -"3255320320","3255320575","AT","AUT","AUSTRIA" -"3255320576","3255321087","UA","UKR","UKRAINE" -"3255321088","3255321599","PL","POL","POLAND" -"3255322112","3255323135","RU","RUS","RUSSIAN FEDERATION" -"3255323136","3255323647","GB","GBR","UNITED KINGDOM" -"3255323648","3255324159","IL","ISR","ISRAEL" -"3255324160","3255324671","CH","CHE","SWITZERLAND" -"3255324672","3255325695","RO","ROM","ROMANIA" -"3255325696","3255326207","RU","RUS","RUSSIAN FEDERATION" -"3255326208","3255326719","DE","DEU","GERMANY" -"3255326720","3255327231","IL","ISR","ISRAEL" -"3255327232","3255327743","DE","DEU","GERMANY" -"3255327744","3255328255","SE","SWE","SWEDEN" -"3255328256","3255328767","SI","SVN","SLOVENIA" -"3255328768","3255336959","DE","DEU","GERMANY" -"3255336960","3255341055","RU","RUS","RUSSIAN FEDERATION" -"3255341056","3255342079","UA","UKR","UKRAINE" -"3255343104","3255344127","RU","RUS","RUSSIAN FEDERATION" -"3255344128","3255345151","UA","UKR","UKRAINE" -"3255345152","3255353343","RU","RUS","RUSSIAN FEDERATION" -"3255353344","3255361535","DE","DEU","GERMANY" -"3255369728","3255370239","LU","LUX","LUXEMBOURG" -"3255370240","3255370751","RU","RUS","RUSSIAN FEDERATION" -"3255370752","3255371263","DE","DEU","GERMANY" -"3255371264","3255371775","BG","BGR","BULGARIA" -"3255371776","3255372287","SE","SWE","SWEDEN" -"3255372288","3255372799","DE","DEU","GERMANY" -"3255372800","3255373311","MC","MCO","MONACO" -"3255373312","3255373823","UA","UKR","UKRAINE" -"3255373824","3255374335","PL","POL","POLAND" -"3255374336","3255374847","RU","RUS","RUSSIAN FEDERATION" -"3255374848","3255375359","CY","CYP","CYPRUS" -"3255375360","3255375871","RO","ROM","ROMANIA" -"3255375872","3255376383","PL","POL","POLAND" -"3255376384","3255376895","UA","UKR","UKRAINE" -"3255376896","3255377407","GB","GBR","UNITED KINGDOM" -"3255377408","3255377919","KZ","KAZ","KAZAKHSTAN" -"3255377920","3255378431","GB","GBR","UNITED KINGDOM" -"3255378432","3255378943","CH","CHE","SWITZERLAND" -"3255378944","3255379455","UA","UKR","UKRAINE" -"3255379456","3255379967","RU","RUS","RUSSIAN FEDERATION" -"3255379968","3255380479","GB","GBR","UNITED KINGDOM" -"3255380480","3255380991","NL","NLD","NETHERLANDS" -"3255380992","3255381503","CH","CHE","SWITZERLAND" -"3255381504","3255382015","PL","POL","POLAND" -"3255382016","3255382527","NL","NLD","NETHERLANDS" -"3255382528","3255383039","UA","UKR","UKRAINE" -"3255383040","3255383551","PL","POL","POLAND" -"3255383552","3255384063","CH","CHE","SWITZERLAND" -"3255384064","3255384575","RO","ROM","ROMANIA" -"3255384576","3255385087","AT","AUT","AUSTRIA" -"3255385088","3255385599","RO","ROM","ROMANIA" -"3255385600","3255386111","FR","FRA","FRANCE" -"3255386624","3255387135","PL","POL","POLAND" -"3255387136","3255388159","UA","UKR","UKRAINE" -"3255388160","3255388671","DE","DEU","GERMANY" -"3255388672","3255389183","SE","SWE","SWEDEN" -"3255389184","3255389695","GB","GBR","UNITED KINGDOM" -"3255389696","3255390207","PL","POL","POLAND" -"3255390208","3255390719","GB","GBR","UNITED KINGDOM" -"3255391232","3255391743","NL","NLD","NETHERLANDS" -"3255391744","3255392767","DE","DEU","GERMANY" -"3255392768","3255393791","RO","ROM","ROMANIA" -"3255393792","3255394303","SE","SWE","SWEDEN" -"3255394304","3255399679","DK","DNK","DENMARK" -"3255399680","3255400447","DE","DEU","GERMANY" -"3255400448","3255401471","CH","CHE","SWITZERLAND" -"3255401472","3255412479","DE","DEU","GERMANY" -"3255412480","3255412735","RO","ROM","ROMANIA" -"3255412736","3255413247","DE","DEU","GERMANY" -"3255413248","3255413759","LV","LVA","LATVIA" -"3255413760","3255414271","GB","GBR","UNITED KINGDOM" -"3255414272","3255414527","TR","TUR","TURKEY" -"3255414528","3255414783","LV","LVA","LATVIA" -"3255414784","3255415807","BE","BEL","BELGIUM" -"3255415808","3255416319","AT","AUT","AUSTRIA" -"3255416320","3255416831","DE","DEU","GERMANY" -"3255416832","3255417855","FR","FRA","FRANCE" -"3255417856","3255418879","GB","GBR","UNITED KINGDOM" -"3255418880","3255422975","DE","DEU","GERMANY" -"3255422976","3255426047","GB","GBR","UNITED KINGDOM" -"3255426048","3255426559","IT","ITA","ITALY" -"3255426560","3255426815","FR","FRA","FRANCE" -"3255426816","3255427071","PL","POL","POLAND" -"3255427072","3255431167","RU","RUS","RUSSIAN FEDERATION" -"3255431168","3255436543","GB","GBR","UNITED KINGDOM" -"3255436544","3255436799","NL","NLD","NETHERLANDS" -"3255436800","3255437055","DE","DEU","GERMANY" -"3255437056","3255437311","GB","GBR","UNITED KINGDOM" -"3255446528","3255446783","GB","GBR","UNITED KINGDOM" -"3255449600","3255450111","BE","BEL","BELGIUM" -"3255450112","3255450367","GB","GBR","UNITED KINGDOM" -"3255450368","3255450623","FR","FRA","FRANCE" -"3255450624","3255451135","DE","DEU","GERMANY" -"3255451136","3255452671","FR","FRA","FRANCE" -"3255468032","3255468543","GB","GBR","UNITED KINGDOM" -"3255469056","3255469567","GB","GBR","UNITED KINGDOM" -"3255469568","3255469823","DE","DEU","GERMANY" -"3255469824","3255470079","DK","DNK","DENMARK" -"3255470080","3255470591","AT","AUT","AUSTRIA" -"3255470592","3255470847","DE","DEU","GERMANY" -"3255470848","3255471103","HU","HUN","HUNGARY" -"3255471104","3255471359","BE","BEL","BELGIUM" -"3255471616","3255471871","GB","GBR","UNITED KINGDOM" -"3255471872","3255472127","BE","BEL","BELGIUM" -"3255472128","3255472383","GB","GBR","UNITED KINGDOM" -"3255472384","3255472639","BE","BEL","BELGIUM" -"3255472640","3255472895","NL","NLD","NETHERLANDS" -"3255472896","3255473151","BE","BEL","BELGIUM" -"3255473152","3255473407","GB","GBR","UNITED KINGDOM" -"3255473408","3255473663","CH","CHE","SWITZERLAND" -"3255473664","3255473919","BE","BEL","BELGIUM" -"3255473920","3255474175","NO","NOR","NORWAY" -"3255474176","3255476735","GB","GBR","UNITED KINGDOM" -"3255476736","3255476991","IE","IRL","IRELAND" -"3255476992","3255477247","NL","NLD","NETHERLANDS" -"3255477248","3255477503","GB","GBR","UNITED KINGDOM" -"3255477504","3255477759","CH","CHE","SWITZERLAND" -"3255477760","3255478271","GB","GBR","UNITED KINGDOM" -"3255482368","3255482623","GB","GBR","UNITED KINGDOM" -"3255482624","3255482815","BE","BEL","BELGIUM" -"3255482816","3255482831","FR","FRA","FRANCE" -"3255482832","3255482839","BE","BEL","BELGIUM" -"3255482840","3255482847","FR","FRA","FRANCE" -"3255482848","3255482871","BE","BEL","BELGIUM" -"3255482880","3255483135","GB","GBR","UNITED KINGDOM" -"3255483136","3255484415","DE","DEU","GERMANY" -"3255484416","3255484671","PL","POL","POLAND" -"3255484672","3255484927","NL","NLD","NETHERLANDS" -"3255484928","3255485183","CH","CHE","SWITZERLAND" -"3255485184","3255485439","AT","AUT","AUSTRIA" -"3255485440","3255486463","FR","FRA","FRANCE" -"3255486464","3255486719","BE","BEL","BELGIUM" -"3255486976","3255487487","GB","GBR","UNITED KINGDOM" -"3255487488","3255487743","BE","BEL","BELGIUM" -"3255487744","3255487999","GB","GBR","UNITED KINGDOM" -"3255488000","3255488255","BE","BEL","BELGIUM" -"3255488256","3255488511","GB","GBR","UNITED KINGDOM" -"3255488512","3255489535","AT","AUT","AUSTRIA" -"3255489536","3255489887","DE","DEU","GERMANY" -"3255489888","3255490047","GB","GBR","UNITED KINGDOM" -"3255490048","3255490559","DE","DEU","GERMANY" -"3255492608","3255496703","GB","GBR","UNITED KINGDOM" -"3255497728","3255497983","BE","BEL","BELGIUM" -"3255497984","3255498239","DE","DEU","GERMANY" -"3255498240","3255498495","FR","FRA","FRANCE" -"3255498496","3255498751","GB","GBR","UNITED KINGDOM" -"3255498752","3255500799","FR","FRA","FRANCE" -"3255500800","3255504895","CH","CHE","SWITZERLAND" -"3255504896","3255505151","RU","RUS","RUSSIAN FEDERATION" -"3255505152","3255505919","GB","GBR","UNITED KINGDOM" -"3255505920","3255506431","RU","RUS","RUSSIAN FEDERATION" -"3255506432","3255506687","PL","POL","POLAND" -"3255506688","3255506943","PT","PRT","PORTUGAL" -"3255506944","3255507199","PL","POL","POLAND" -"3255507200","3255507455","PT","PRT","PORTUGAL" -"3255507456","3255507711","FR","FRA","FRANCE" -"3255507712","3255507967","AT","AUT","AUSTRIA" -"3255507968","3255508223","UA","UKR","UKRAINE" -"3255508224","3255508479","RU","RUS","RUSSIAN FEDERATION" -"3255508480","3255544319","CH","CHE","SWITZERLAND" -"3255544320","3255544575","DE","DEU","GERMANY" -"3255544576","3255544831","AT","AUT","AUSTRIA" -"3255544832","3255551999","CH","CHE","SWITZERLAND" -"3255552000","3255552511","DE","DEU","GERMANY" -"3255552512","3255558143","CH","CHE","SWITZERLAND" -"3255558144","3255558399","BE","BEL","BELGIUM" -"3255558400","3255564031","CH","CHE","SWITZERLAND" -"3255564032","3255564287","RU","RUS","RUSSIAN FEDERATION" -"3255564288","3255565823","CH","CHE","SWITZERLAND" -"3255565824","3255566079","DE","DEU","GERMANY" -"3255566080","3255566335","CH","CHE","SWITZERLAND" -"3255566336","3255574527","SE","SWE","SWEDEN" -"3255578624","3255582719","SE","SWE","SWEDEN" -"3255599104","3255615487","CH","CHE","SWITZERLAND" -"3255615488","3255623679","DE","DEU","GERMANY" -"3255623680","3255631871","BG","BGR","BULGARIA" -"3255631872","3255660287","NL","NLD","NETHERLANDS" -"3255660288","3255660543","GR","GRC","GREECE" -"3255660544","3255666431","NL","NLD","NETHERLANDS" -"3255666432","3255666687","DE","DEU","GERMANY" -"3255667200","3255667455","NL","NLD","NETHERLANDS" -"3255667712","3255697407","NL","NLD","NETHERLANDS" -"3255697408","3255745535","SE","SWE","SWEDEN" -"3255745536","3255746047","DK","DNK","DENMARK" -"3255746048","3255762943","SE","SWE","SWEDEN" -"3255762944","3255799039","DE","DEU","GERMANY" -"3255799040","3255799295","SE","SWE","SWEDEN" -"3255799296","3255800575","DE","DEU","GERMANY" -"3255800576","3255800831","UA","UKR","UKRAINE" -"3255800832","3255817215","DE","DEU","GERMANY" -"3255817216","3255817471","SE","SWE","SWEDEN" -"3255817472","3255817727","ES","ESP","SPAIN" -"3255817728","3255821311","DE","DEU","GERMANY" -"3255821312","3255821823","CH","CHE","SWITZERLAND" -"3255821824","3255822079","DE","DEU","GERMANY" -"3255822080","3255822335","CH","CHE","SWITZERLAND" -"3255822336","3255828479","DE","DEU","GERMANY" -"3255828480","3255851311","SE","SWE","SWEDEN" -"3255851312","3255851315","DK","DNK","DENMARK" -"3255851316","3255909183","SE","SWE","SWEDEN" -"3255909184","3255909191","DK","DNK","DENMARK" -"3255909192","3256025087","SE","SWE","SWEDEN" -"3256025088","3256057855","NO","NOR","NORWAY" -"3256057856","3256074751","DK","DNK","DENMARK" -"3256074752","3256075007","SE","SWE","SWEDEN" -"3256075008","3256076287","DK","DNK","DENMARK" -"3256076288","3256076799","SE","SWE","SWEDEN" -"3256076800","3256082431","DK","DNK","DENMARK" -"3256082432","3256090623","LV","LVA","LATVIA" -"3256090624","3256164863","IT","ITA","ITALY" -"3256164864","3256165375","SE","SWE","SWEDEN" -"3256165376","3256187391","IT","ITA","ITALY" -"3256187392","3256187647","SM","SMR","SAN MARINO" -"3256187648","3256221695","IT","ITA","ITALY" -"3256221696","3256222207","SE","SWE","SWEDEN" -"3256222208","3256222463","NL","NLD","NETHERLANDS" -"3256222464","3256223743","SE","SWE","SWEDEN" -"3256223744","3256226047","NL","NLD","NETHERLANDS" -"3256226048","3256229887","SE","SWE","SWEDEN" -"3256229888","3256233983","DE","DEU","GERMANY" -"3256233984","3256238079","SE","SWE","SWEDEN" -"3256238080","3256246271","NO","NOR","NORWAY" -"3256246272","3256345343","SE","SWE","SWEDEN" -"3256345344","3256345599","DE","DEU","GERMANY" -"3256345600","3256352767","SE","SWE","SWEDEN" -"3256352768","3256385535","CH","CHE","SWITZERLAND" -"3256385536","3256393727","AT","AUT","AUSTRIA" -"3256393728","3256394239","DE","DEU","GERMANY" -"3256394240","3256394751","UA","UKR","UKRAINE" -"3256394752","3256395263","PL","POL","POLAND" -"3256395264","3256395775","GB","GBR","UNITED KINGDOM" -"3256395776","3256396287","TR","TUR","TURKEY" -"3256396288","3256396799","GR","GRC","GREECE" -"3256396800","3256397311","DE","DEU","GERMANY" -"3256397312","3256397823","PL","POL","POLAND" -"3256397824","3256398847","RO","ROM","ROMANIA" -"3256398848","3256399359","PL","POL","POLAND" -"3256399360","3256400895","UA","UKR","UKRAINE" -"3256400896","3256401407","GB","GBR","UNITED KINGDOM" -"3256401408","3256401919","UA","UKR","UKRAINE" -"3256401920","3256410111","DE","DEU","GERMANY" -"3256410112","3256410623","TR","TUR","TURKEY" -"3256410624","3256411135","GR","GRC","GREECE" -"3256411136","3256411647","FR","FRA","FRANCE" -"3256411648","3256412159","DE","DEU","GERMANY" -"3256412160","3256412671","GB","GBR","UNITED KINGDOM" -"3256412672","3256413183","RO","ROM","ROMANIA" -"3256413184","3256413695","UA","UKR","UKRAINE" -"3256413696","3256414207","PL","POL","POLAND" -"3256414208","3256414719","RU","RUS","RUSSIAN FEDERATION" -"3256414720","3256415231","DE","DEU","GERMANY" -"3256415232","3256415743","PL","POL","POLAND" -"3256415744","3256416255","UA","UKR","UKRAINE" -"3256416256","3256416767","DE","DEU","GERMANY" -"3256416768","3256417279","GB","GBR","UNITED KINGDOM" -"3256417280","3256417791","NO","NOR","NORWAY" -"3256417792","3256418303","GB","GBR","UNITED KINGDOM" -"3256418304","3256427503","DE","DEU","GERMANY" -"3256427504","3256427511","GB","GBR","UNITED KINGDOM" -"3256427512","3256443727","DE","DEU","GERMANY" -"3256443728","3256443735","GB","GBR","UNITED KINGDOM" -"3256443736","3256446855","DE","DEU","GERMANY" -"3256446856","3256446863","US","USA","UNITED STATES" -"3256446864","3256448575","DE","DEU","GERMANY" -"3256448576","3256448591","ES","ESP","SPAIN" -"3256448592","3256448935","DE","DEU","GERMANY" -"3256448936","3256448943","IT","ITA","ITALY" -"3256448944","3256452063","DE","DEU","GERMANY" -"3256452064","3256452071","BE","BEL","BELGIUM" -"3256452072","3256483839","DE","DEU","GERMANY" -"3256483840","3256487151","NL","NLD","NETHERLANDS" -"3256487152","3256487159","FR","FRA","FRANCE" -"3256487160","3256489471","NL","NLD","NETHERLANDS" -"3256489472","3256489983","GR","GRC","GREECE" -"3256489984","3256490239","BE","BEL","BELGIUM" -"3256490240","3256490495","DE","DEU","GERMANY" -"3256490496","3256513023","NL","NLD","NETHERLANDS" -"3256513024","3256513279","GB","GBR","UNITED KINGDOM" -"3256513280","3256513791","NL","NLD","NETHERLANDS" -"3256513792","3256514047","GB","GBR","UNITED KINGDOM" -"3256514048","3256524287","NL","NLD","NETHERLANDS" -"3256524288","3256524799","DE","DEU","GERMANY" -"3256524800","3256528895","NL","NLD","NETHERLANDS" -"3256528896","3256530943","DE","DEU","GERMANY" -"3256530944","3256549375","NL","NLD","NETHERLANDS" -"3256549376","3256614911","TR","TUR","TURKEY" -"3256680448","3256688639","CH","CHE","SWITZERLAND" -"3256688640","3256692735","IL","ISR","ISRAEL" -"3256692736","3256693759","GR","GRC","GREECE" -"3256693760","3256694783","IT","ITA","ITALY" -"3256694784","3256695807","CH","CHE","SWITZERLAND" -"3256695808","3256696831","UA","UKR","UKRAINE" -"3256696832","3256697599","BE","BEL","BELGIUM" -"3256697600","3256697855","GB","GBR","UNITED KINGDOM" -"3256697856","3256698367","IT","ITA","ITALY" -"3256698368","3256698623","NL","NLD","NETHERLANDS" -"3256698624","3256698879","GB","GBR","UNITED KINGDOM" -"3256698880","3256699135","DE","DEU","GERMANY" -"3256699392","3256699903","GB","GBR","UNITED KINGDOM" -"3256701184","3256701439","BE","BEL","BELGIUM" -"3256701440","3256701695","GB","GBR","UNITED KINGDOM" -"3256705280","3256705791","BE","BEL","BELGIUM" -"3256705792","3256706047","AT","AUT","AUSTRIA" -"3256706048","3256706559","GR","GRC","GREECE" -"3256709632","3256709887","AT","AUT","AUSTRIA" -"3256710144","3256710655","AT","AUT","AUSTRIA" -"3256710656","3256711167","SE","SWE","SWEDEN" -"3256711168","3256711423","DE","DEU","GERMANY" -"3256713216","3256727551","PL","POL","POLAND" -"3256727552","3256728575","UA","UKR","UKRAINE" -"3256728576","3256729599","DE","DEU","GERMANY" -"3256729600","3256731647","FI","FIN","FINLAND" -"3256731648","3256732671","NO","NOR","NORWAY" -"3256732672","3256732927","IT","ITA","ITALY" -"3256732928","3256733183","UA","UKR","UKRAINE" -"3256733184","3256733439","FR","FRA","FRANCE" -"3256733440","3256733695","DK","DNK","DENMARK" -"3256733696","3256735743","TR","TUR","TURKEY" -"3256735744","3256737791","GB","GBR","UNITED KINGDOM" -"3256737792","3256745983","DE","DEU","GERMANY" -"3256745984","3256778751","ES","ESP","SPAIN" -"3256778752","3256786943","CY","CYP","CYPRUS" -"3256786944","3256787199","NL","NLD","NETHERLANDS" -"3256787200","3256787455","RO","ROM","ROMANIA" -"3256787456","3256787711","DE","DEU","GERMANY" -"3256787712","3256787967","UA","UKR","UKRAINE" -"3256787968","3256788223","PL","POL","POLAND" -"3256788224","3256788479","RU","RUS","RUSSIAN FEDERATION" -"3256788480","3256788735","GB","GBR","UNITED KINGDOM" -"3256788736","3256788991","DE","DEU","GERMANY" -"3256788992","3256789247","UA","UKR","UKRAINE" -"3256789248","3256789503","SE","SWE","SWEDEN" -"3256789504","3256789759","UA","UKR","UKRAINE" -"3256789760","3256790015","GB","GBR","UNITED KINGDOM" -"3256790016","3256790271","UA","UKR","UKRAINE" -"3256790272","3256790783","DE","DEU","GERMANY" -"3256790784","3256791039","NL","NLD","NETHERLANDS" -"3256791040","3256791295","CH","CHE","SWITZERLAND" -"3256791296","3256791551","RO","ROM","ROMANIA" -"3256791552","3256791807","DE","DEU","GERMANY" -"3256791808","3256792063","PL","POL","POLAND" -"3256792064","3256792319","DE","DEU","GERMANY" -"3256792320","3256792575","CH","CHE","SWITZERLAND" -"3256792576","3256792831","NL","NLD","NETHERLANDS" -"3256792832","3256793087","DE","DEU","GERMANY" -"3256793088","3256793343","GB","GBR","UNITED KINGDOM" -"3256793600","3256793855","GB","GBR","UNITED KINGDOM" -"3256793856","3256794111","SK","SVK","SLOVAKIA" -"3256794112","3256794367","NL","NLD","NETHERLANDS" -"3256794368","3256794623","DK","DNK","DENMARK" -"3256794624","3256794879","RU","RUS","RUSSIAN FEDERATION" -"3256794880","3256795135","AT","AUT","AUSTRIA" -"3256795136","3256811519","GR","GRC","GREECE" -"3256811520","3256819711","DE","DEU","GERMANY" -"3256827904","3256864511","DE","DEU","GERMANY" -"3256864512","3256864767","CH","CHE","SWITZERLAND" -"3256864768","3256869631","DE","DEU","GERMANY" -"3256869888","3256870911","DE","DEU","GERMANY" -"3256871168","3256871935","DE","DEU","GERMANY" -"3256872448","3256877055","DE","DEU","GERMANY" -"3256877056","3256898559","GB","GBR","UNITED KINGDOM" -"3256899584","3256915455","GB","GBR","UNITED KINGDOM" -"3256915456","3256915967","SE","SWE","SWEDEN" -"3256915968","3256945663","GB","GBR","UNITED KINGDOM" -"3256945664","3256945919","UA","UKR","UKRAINE" -"3256945920","3256946175","GB","GBR","UNITED KINGDOM" -"3256946176","3256946431","RO","ROM","ROMANIA" -"3256946432","3256946687","UA","UKR","UKRAINE" -"3256946688","3256946943","GB","GBR","UNITED KINGDOM" -"3256946944","3256947711","DE","DEU","GERMANY" -"3256947712","3256988671","GB","GBR","UNITED KINGDOM" -"3256988672","3256989183","UA","UKR","UKRAINE" -"3256989184","3256989439","FR","FRA","FRANCE" -"3256989440","3256989695","GB","GBR","UNITED KINGDOM" -"3256989696","3256989951","HU","HUN","HUNGARY" -"3256989952","3256990207","PL","POL","POLAND" -"3256990208","3256990463","CH","CHE","SWITZERLAND" -"3256990464","3256990719","PL","POL","POLAND" -"3256990720","3256991231","UA","UKR","UKRAINE" -"3256991232","3256991487","SE","SWE","SWEDEN" -"3256991488","3256991743","RU","RUS","RUSSIAN FEDERATION" -"3256991744","3257011199","GB","GBR","UNITED KINGDOM" -"3257011200","3257011455","BG","BGR","BULGARIA" -"3257011456","3257058815","GB","GBR","UNITED KINGDOM" -"3257058816","3257059071","PL","POL","POLAND" -"3257059072","3257077503","GB","GBR","UNITED KINGDOM" -"3257077760","3257087487","GB","GBR","UNITED KINGDOM" -"3257087744","3257139199","GB","GBR","UNITED KINGDOM" -"3257139200","3257139455","NL","NLD","NETHERLANDS" -"3257139456","3257143295","GB","GBR","UNITED KINGDOM" -"3257144576","3257144831","GB","GBR","UNITED KINGDOM" -"3257144832","3257145087","FR","FRA","FRANCE" -"3257145088","3257160703","GB","GBR","UNITED KINGDOM" -"3257161728","3257180159","GB","GBR","UNITED KINGDOM" -"3257180160","3257180415","TR","TUR","TURKEY" -"3257180416","3257180671","RU","RUS","RUSSIAN FEDERATION" -"3257180672","3257180927","EE","EST","ESTONIA" -"3257180928","3257181183","GB","GBR","UNITED KINGDOM" -"3257181184","3257181439","SA","SAU","SAUDI ARABIA" -"3257181440","3257181695","PL","POL","POLAND" -"3257181696","3257181951","FR","FRA","FRANCE" -"3257181952","3257182207","BG","BGR","BULGARIA" -"3257182208","3257182463","PL","POL","POLAND" -"3257182464","3257196543","GB","GBR","UNITED KINGDOM" -"3257196544","3257200639","LU","LUX","LUXEMBOURG" -"3257200640","3257204735","GB","GBR","UNITED KINGDOM" -"3257204736","3257268223","AT","AUT","AUSTRIA" -"3257268224","3257268479","UA","UKR","UKRAINE" -"3257268480","3257268735","SE","SWE","SWEDEN" -"3257268736","3257269247","AT","AUT","AUSTRIA" -"3257269248","3257269503","IT","ITA","ITALY" -"3257269504","3257270015","AT","AUT","AUSTRIA" -"3257270016","3257270271","DE","DEU","GERMANY" -"3257270272","3257286655","SE","SWE","SWEDEN" -"3257286656","3257294847","CH","CHE","SWITZERLAND" -"3257294848","3257303039","HU","HUN","HUNGARY" -"3257303040","3257311231","PT","PRT","PORTUGAL" -"3257311232","3257311903","CH","CHE","SWITZERLAND" -"3257311904","3257311911","ES","ESP","SPAIN" -"3257311912","3257335807","CH","CHE","SWITZERLAND" -"3257335808","3257357311","DE","DEU","GERMANY" -"3257357312","3257357567","PT","PRT","PORTUGAL" -"3257357568","3257357823","SI","SVN","SLOVENIA" -"3257357824","3257371903","DE","DEU","GERMANY" -"3257371904","3257372159","BE","BEL","BELGIUM" -"3257372160","3257372671","GB","GBR","UNITED KINGDOM" -"3257372672","3257383679","DE","DEU","GERMANY" -"3257383680","3257383935","CH","CHE","SWITZERLAND" -"3257383936","3257388799","DE","DEU","GERMANY" -"3257388800","3257389055","FR","FRA","FRANCE" -"3257389056","3257401343","DE","DEU","GERMANY" -"3257401344","3257466879","CH","CHE","SWITZERLAND" -"3257466880","3257467135","DE","DEU","GERMANY" -"3257467136","3257467391","GB","GBR","UNITED KINGDOM" -"3257467904","3257468927","IT","ITA","ITALY" -"3257469184","3257469439","IT","ITA","ITALY" -"3257469440","3257469951","GB","GBR","UNITED KINGDOM" -"3257469952","3257470975","BE","BEL","BELGIUM" -"3257470976","3257475071","FI","FIN","FINLAND" -"3257475072","3257475327","ES","ESP","SPAIN" -"3257475328","3257475583","FI","FIN","FINLAND" -"3257475584","3257476095","DE","DEU","GERMANY" -"3257476352","3257477119","DE","DEU","GERMANY" -"3257477120","3257477375","NL","NLD","NETHERLANDS" -"3257477376","3257477887","SE","SWE","SWEDEN" -"3257477888","3257480447","GB","GBR","UNITED KINGDOM" -"3257480448","3257480959","NL","NLD","NETHERLANDS" -"3257480960","3257481215","SE","SWE","SWEDEN" -"3257481216","3257481471","GB","GBR","UNITED KINGDOM" -"3257481472","3257481727","DE","DEU","GERMANY" -"3257481728","3257481983","FI","FIN","FINLAND" -"3257481984","3257482239","FR","FRA","FRANCE" -"3257482752","3257483007","NL","NLD","NETHERLANDS" -"3257483008","3257491455","CH","CHE","SWITZERLAND" -"3257491456","3257495551","BE","BEL","BELGIUM" -"3257495552","3257497855","CH","CHE","SWITZERLAND" -"3257497856","3257499647","NL","NLD","NETHERLANDS" -"3257499648","3257525495","CH","CHE","SWITZERLAND" -"3257525496","3257525503","DK","DNK","DENMARK" -"3257525504","3257532415","CH","CHE","SWITZERLAND" -"3257532416","3257542655","CY","CYP","CYPRUS" -"3257542656","3257542911","PL","POL","POLAND" -"3257542912","3257543423","IT","ITA","ITALY" -"3257543424","3257543679","PT","PRT","PORTUGAL" -"3257543680","3257544191","RO","ROM","ROMANIA" -"3257544192","3257544447","DE","DEU","GERMANY" -"3257544448","3257544575","DK","DNK","DENMARK" -"3257544576","3257544703","DE","DEU","GERMANY" -"3257544704","3257544959","CH","CHE","SWITZERLAND" -"3257544960","3257545215","DK","DNK","DENMARK" -"3257545216","3257546495","GR","GRC","GREECE" -"3257546496","3257546527","DE","DEU","GERMANY" -"3257546528","3257546623","CH","CHE","SWITZERLAND" -"3257546624","3257546655","ES","ESP","SPAIN" -"3257546656","3257546687","SE","SWE","SWEDEN" -"3257546688","3257546719","DE","DEU","GERMANY" -"3257546720","3257546751","DK","DNK","DENMARK" -"3257546752","3257548799","FI","FIN","FINLAND" -"3257548800","3257549055","DE","DEU","GERMANY" -"3257549056","3257549343","GB","GBR","UNITED KINGDOM" -"3257549344","3257549359","DE","DEU","GERMANY" -"3257549360","3257549375","GB","GBR","UNITED KINGDOM" -"3257549376","3257549423","DE","DEU","GERMANY" -"3257549424","3257549567","GB","GBR","UNITED KINGDOM" -"3257549568","3257549695","DE","DEU","GERMANY" -"3257549696","3257549823","GB","GBR","UNITED KINGDOM" -"3257549824","3257549871","DE","DEU","GERMANY" -"3257549872","3257549951","GB","GBR","UNITED KINGDOM" -"3257549952","3257550095","DE","DEU","GERMANY" -"3257550096","3257550847","GB","GBR","UNITED KINGDOM" -"3257550848","3257551103","DE","DEU","GERMANY" -"3257551104","3257551631","GB","GBR","UNITED KINGDOM" -"3257551632","3257551647","DE","DEU","GERMANY" -"3257551648","3257551711","GB","GBR","UNITED KINGDOM" -"3257551712","3257551807","DE","DEU","GERMANY" -"3257551808","3257551871","GB","GBR","UNITED KINGDOM" -"3257551872","3257552383","DE","DEU","GERMANY" -"3257552384","3257552607","GB","GBR","UNITED KINGDOM" -"3257552608","3257552655","DE","DEU","GERMANY" -"3257552656","3257552703","GB","GBR","UNITED KINGDOM" -"3257552704","3257552719","DE","DEU","GERMANY" -"3257552720","3257552895","GB","GBR","UNITED KINGDOM" -"3257552896","3257552959","DE","DEU","GERMANY" -"3257552960","3257553023","GB","GBR","UNITED KINGDOM" -"3257553024","3257553039","DE","DEU","GERMANY" -"3257553040","3257553407","GB","GBR","UNITED KINGDOM" -"3257553408","3257553727","DE","DEU","GERMANY" -"3257553728","3257553791","GB","GBR","UNITED KINGDOM" -"3257553792","3257553807","DE","DEU","GERMANY" -"3257553808","3257553823","GB","GBR","UNITED KINGDOM" -"3257553824","3257553839","DE","DEU","GERMANY" -"3257553840","3257553855","GB","GBR","UNITED KINGDOM" -"3257553856","3257553919","DE","DEU","GERMANY" -"3257553920","3257554175","GB","GBR","UNITED KINGDOM" -"3257554176","3257554207","DE","DEU","GERMANY" -"3257554208","3257554239","GB","GBR","UNITED KINGDOM" -"3257554240","3257554271","DE","DEU","GERMANY" -"3257554272","3257554335","GB","GBR","UNITED KINGDOM" -"3257554336","3257554351","DE","DEU","GERMANY" -"3257554352","3257554415","GB","GBR","UNITED KINGDOM" -"3257554416","3257554943","DE","DEU","GERMANY" -"3257554944","3257555007","GB","GBR","UNITED KINGDOM" -"3257555008","3257555039","DE","DEU","GERMANY" -"3257555040","3257555167","GB","GBR","UNITED KINGDOM" -"3257555168","3257555199","DE","DEU","GERMANY" -"3257555200","3257555247","GB","GBR","UNITED KINGDOM" -"3257555248","3257555263","DE","DEU","GERMANY" -"3257555264","3257555327","GB","GBR","UNITED KINGDOM" -"3257555328","3257555359","DE","DEU","GERMANY" -"3257555360","3257555391","GB","GBR","UNITED KINGDOM" -"3257555392","3257555471","DE","DEU","GERMANY" -"3257555472","3257555583","GB","GBR","UNITED KINGDOM" -"3257555584","3257555695","DE","DEU","GERMANY" -"3257555696","3257555711","GB","GBR","UNITED KINGDOM" -"3257555712","3257555775","DE","DEU","GERMANY" -"3257555776","3257555839","GB","GBR","UNITED KINGDOM" -"3257555840","3257555887","DE","DEU","GERMANY" -"3257555888","3257555903","GB","GBR","UNITED KINGDOM" -"3257555904","3257555935","DE","DEU","GERMANY" -"3257555936","3257556223","GB","GBR","UNITED KINGDOM" -"3257556224","3257556287","DE","DEU","GERMANY" -"3257556288","3257556479","GB","GBR","UNITED KINGDOM" -"3257556480","3257556991","DE","DEU","GERMANY" -"3257556992","3257557503","MW","MWI","MALAWI" -"3257557504","3257558015","LU","LUX","LUXEMBOURG" -"3257558016","3257559551","RO","ROM","ROMANIA" -"3257559552","3257560063","UA","UKR","UKRAINE" -"3257560064","3257560575","DE","DEU","GERMANY" -"3257560576","3257561087","PL","POL","POLAND" -"3257561600","3257562111","DE","DEU","GERMANY" -"3257562112","3257563647","PL","POL","POLAND" -"3257563648","3257564159","DE","DEU","GERMANY" -"3257564160","3257564671","GB","GBR","UNITED KINGDOM" -"3257564672","3257565183","RO","ROM","ROMANIA" -"3257565184","3257570303","CY","CYP","CYPRUS" -"3257570304","3257570307","GR","GRC","GREECE" -"3257570308","3257570311","CY","CYP","CYPRUS" -"3257570312","3257570327","GR","GRC","GREECE" -"3257570328","3257570367","CY","CYP","CYPRUS" -"3257570368","3257570431","GR","GRC","GREECE" -"3257570432","3257570495","CY","CYP","CYPRUS" -"3257570496","3257570527","GR","GRC","GREECE" -"3257570528","3257573375","CY","CYP","CYPRUS" -"3257573376","3257574015","CH","CHE","SWITZERLAND" -"3257574016","3257574143","BE","BEL","BELGIUM" -"3257574144","3257574399","GB","GBR","UNITED KINGDOM" -"3257574400","3257574655","IT","ITA","ITALY" -"3257574656","3257576191","BE","BEL","BELGIUM" -"3257576192","3257577471","AT","AUT","AUSTRIA" -"3257577472","3257581567","DE","DEU","GERMANY" -"3257581568","3257585663","UA","UKR","UKRAINE" -"3257585664","3257586175","BE","BEL","BELGIUM" -"3257586176","3257586687","NL","NLD","NETHERLANDS" -"3257586688","3257586943","LU","LUX","LUXEMBOURG" -"3257586944","3257587455","ES","ESP","SPAIN" -"3257587456","3257587711","GB","GBR","UNITED KINGDOM" -"3257587712","3257587967","US","USA","UNITED STATES" -"3257587968","3257588223","FR","FRA","FRANCE" -"3257588224","3257588735","BE","BEL","BELGIUM" -"3257588736","3257589759","NL","NLD","NETHERLANDS" -"3257589760","3257663487","GB","GBR","UNITED KINGDOM" -"3257663488","3257729023","UA","UKR","UKRAINE" -"3257729024","3257731071","DE","DEU","GERMANY" -"3257731072","3257731567","NL","NLD","NETHERLANDS" -"3257731568","3257731575","DE","DEU","GERMANY" -"3257731576","3257732095","NL","NLD","NETHERLANDS" -"3257732096","3257732607","DE","DEU","GERMANY" -"3257732608","3257732727","NL","NLD","NETHERLANDS" -"3257732728","3257732735","DE","DEU","GERMANY" -"3257732736","3257734143","NL","NLD","NETHERLANDS" -"3257734144","3257736191","DE","DEU","GERMANY" -"3257736192","3257737119","NL","NLD","NETHERLANDS" -"3257737120","3257737127","DE","DEU","GERMANY" -"3257737128","3257737471","NL","NLD","NETHERLANDS" -"3257737472","3257743615","DE","DEU","GERMANY" -"3257743616","3257743623","NL","NLD","NETHERLANDS" -"3257743624","3257743631","DE","DEU","GERMANY" -"3257743632","3257743951","NL","NLD","NETHERLANDS" -"3257743952","3257743959","DE","DEU","GERMANY" -"3257743960","3257744111","NL","NLD","NETHERLANDS" -"3257744112","3257744119","DE","DEU","GERMANY" -"3257744120","3257744671","NL","NLD","NETHERLANDS" -"3257744672","3257744679","DE","DEU","GERMANY" -"3257744680","3257744871","NL","NLD","NETHERLANDS" -"3257744872","3257744879","DE","DEU","GERMANY" -"3257744880","3257745119","NL","NLD","NETHERLANDS" -"3257745120","3257745127","DE","DEU","GERMANY" -"3257745128","3257746527","NL","NLD","NETHERLANDS" -"3257746528","3257746535","DE","DEU","GERMANY" -"3257746536","3257746647","NL","NLD","NETHERLANDS" -"3257746648","3257746655","DE","DEU","GERMANY" -"3257746656","3257746671","NL","NLD","NETHERLANDS" -"3257746672","3257746679","DE","DEU","GERMANY" -"3257746680","3257746919","NL","NLD","NETHERLANDS" -"3257746920","3257746927","DE","DEU","GERMANY" -"3257746928","3257746943","NL","NLD","NETHERLANDS" -"3257746944","3257747455","DE","DEU","GERMANY" -"3257747456","3257747471","NL","NLD","NETHERLANDS" -"3257747472","3257747479","DE","DEU","GERMANY" -"3257747480","3257747607","NL","NLD","NETHERLANDS" -"3257747608","3257747615","DE","DEU","GERMANY" -"3257747616","3257747655","NL","NLD","NETHERLANDS" -"3257747656","3257747663","DE","DEU","GERMANY" -"3257747664","3257747847","NL","NLD","NETHERLANDS" -"3257747848","3257747855","DE","DEU","GERMANY" -"3257747856","3257748015","NL","NLD","NETHERLANDS" -"3257748016","3257748023","DE","DEU","GERMANY" -"3257748024","3257748063","NL","NLD","NETHERLANDS" -"3257748064","3257748071","DE","DEU","GERMANY" -"3257748072","3257748455","NL","NLD","NETHERLANDS" -"3257748456","3257748463","DE","DEU","GERMANY" -"3257748464","3257748479","NL","NLD","NETHERLANDS" -"3257748480","3257749503","DE","DEU","GERMANY" -"3257749504","3257749663","NL","NLD","NETHERLANDS" -"3257749664","3257749671","DE","DEU","GERMANY" -"3257749672","3257749679","NL","NLD","NETHERLANDS" -"3257749680","3257749687","DE","DEU","GERMANY" -"3257749688","3257749743","NL","NLD","NETHERLANDS" -"3257749744","3257749751","DE","DEU","GERMANY" -"3257749752","3257749759","NL","NLD","NETHERLANDS" -"3257749760","3257749767","DE","DEU","GERMANY" -"3257749768","3257749783","NL","NLD","NETHERLANDS" -"3257749784","3257749791","DE","DEU","GERMANY" -"3257749792","3257749863","NL","NLD","NETHERLANDS" -"3257749864","3257749871","DE","DEU","GERMANY" -"3257749872","3257749943","NL","NLD","NETHERLANDS" -"3257749944","3257749951","DE","DEU","GERMANY" -"3257749952","3257750015","NL","NLD","NETHERLANDS" -"3257750016","3257750023","DE","DEU","GERMANY" -"3257750024","3257750071","NL","NLD","NETHERLANDS" -"3257750072","3257750079","DE","DEU","GERMANY" -"3257750080","3257750151","NL","NLD","NETHERLANDS" -"3257750152","3257750159","DE","DEU","GERMANY" -"3257750160","3257750231","NL","NLD","NETHERLANDS" -"3257750232","3257750239","DE","DEU","GERMANY" -"3257750240","3257750359","NL","NLD","NETHERLANDS" -"3257750360","3257750367","DE","DEU","GERMANY" -"3257750368","3257750471","NL","NLD","NETHERLANDS" -"3257750472","3257750479","DE","DEU","GERMANY" -"3257750480","3257750615","NL","NLD","NETHERLANDS" -"3257750616","3257750623","DE","DEU","GERMANY" -"3257750624","3257750631","NL","NLD","NETHERLANDS" -"3257750632","3257750639","DE","DEU","GERMANY" -"3257750640","3257750655","NL","NLD","NETHERLANDS" -"3257750656","3257750663","DE","DEU","GERMANY" -"3257750664","3257750671","NL","NLD","NETHERLANDS" -"3257750672","3257750679","DE","DEU","GERMANY" -"3257750680","3257750735","NL","NLD","NETHERLANDS" -"3257750736","3257750743","DE","DEU","GERMANY" -"3257750744","3257750759","NL","NLD","NETHERLANDS" -"3257750760","3257750767","DE","DEU","GERMANY" -"3257750768","3257750919","NL","NLD","NETHERLANDS" -"3257750920","3257750935","DE","DEU","GERMANY" -"3257750936","3257751031","NL","NLD","NETHERLANDS" -"3257751032","3257751039","DE","DEU","GERMANY" -"3257751040","3257751199","NL","NLD","NETHERLANDS" -"3257751200","3257751207","DE","DEU","GERMANY" -"3257751208","3257751215","NL","NLD","NETHERLANDS" -"3257751216","3257751223","DE","DEU","GERMANY" -"3257751224","3257751247","NL","NLD","NETHERLANDS" -"3257751248","3257751263","DE","DEU","GERMANY" -"3257751264","3257751279","NL","NLD","NETHERLANDS" -"3257751280","3257751287","DE","DEU","GERMANY" -"3257751288","3257751351","NL","NLD","NETHERLANDS" -"3257751352","3257751359","DE","DEU","GERMANY" -"3257751360","3257751623","NL","NLD","NETHERLANDS" -"3257751624","3257751631","DE","DEU","GERMANY" -"3257751632","3257751639","NL","NLD","NETHERLANDS" -"3257751640","3257751647","DE","DEU","GERMANY" -"3257751648","3257751711","NL","NLD","NETHERLANDS" -"3257751712","3257751719","DE","DEU","GERMANY" -"3257751720","3257751823","NL","NLD","NETHERLANDS" -"3257751824","3257751831","DE","DEU","GERMANY" -"3257751832","3257751871","NL","NLD","NETHERLANDS" -"3257751872","3257751887","DE","DEU","GERMANY" -"3257751888","3257751903","NL","NLD","NETHERLANDS" -"3257751904","3257751911","DE","DEU","GERMANY" -"3257751912","3257751975","NL","NLD","NETHERLANDS" -"3257751976","3257751983","DE","DEU","GERMANY" -"3257751984","3257752023","NL","NLD","NETHERLANDS" -"3257752024","3257752031","DE","DEU","GERMANY" -"3257752032","3257752071","NL","NLD","NETHERLANDS" -"3257752072","3257752079","DE","DEU","GERMANY" -"3257752080","3257752103","NL","NLD","NETHERLANDS" -"3257752104","3257752111","DE","DEU","GERMANY" -"3257752112","3257752135","NL","NLD","NETHERLANDS" -"3257752136","3257752143","DE","DEU","GERMANY" -"3257752144","3257752167","NL","NLD","NETHERLANDS" -"3257752168","3257752183","DE","DEU","GERMANY" -"3257752184","3257752399","NL","NLD","NETHERLANDS" -"3257752400","3257752407","DE","DEU","GERMANY" -"3257752408","3257752495","NL","NLD","NETHERLANDS" -"3257752496","3257752503","DE","DEU","GERMANY" -"3257752504","3257752527","NL","NLD","NETHERLANDS" -"3257752528","3257752543","DE","DEU","GERMANY" -"3257752544","3257752583","NL","NLD","NETHERLANDS" -"3257752584","3257752591","DE","DEU","GERMANY" -"3257752592","3257752607","NL","NLD","NETHERLANDS" -"3257752608","3257752615","DE","DEU","GERMANY" -"3257752616","3257752623","NL","NLD","NETHERLANDS" -"3257752624","3257752631","DE","DEU","GERMANY" -"3257752632","3257752727","NL","NLD","NETHERLANDS" -"3257752728","3257752735","DE","DEU","GERMANY" -"3257752736","3257752783","NL","NLD","NETHERLANDS" -"3257752784","3257752791","DE","DEU","GERMANY" -"3257752792","3257752799","NL","NLD","NETHERLANDS" -"3257752800","3257752807","DE","DEU","GERMANY" -"3257752808","3257752919","NL","NLD","NETHERLANDS" -"3257752920","3257752935","DE","DEU","GERMANY" -"3257752936","3257753087","NL","NLD","NETHERLANDS" -"3257753088","3257756671","DE","DEU","GERMANY" -"3257756672","3257756735","NL","NLD","NETHERLANDS" -"3257756736","3257756743","DE","DEU","GERMANY" -"3257756744","3257756807","NL","NLD","NETHERLANDS" -"3257756808","3257756823","DE","DEU","GERMANY" -"3257756824","3257756887","NL","NLD","NETHERLANDS" -"3257756888","3257756895","DE","DEU","GERMANY" -"3257756896","3257756919","NL","NLD","NETHERLANDS" -"3257756920","3257756927","DE","DEU","GERMANY" -"3257756928","3257757007","NL","NLD","NETHERLANDS" -"3257757008","3257757015","DE","DEU","GERMANY" -"3257757016","3257757343","NL","NLD","NETHERLANDS" -"3257757344","3257757351","DE","DEU","GERMANY" -"3257757352","3257757375","NL","NLD","NETHERLANDS" -"3257757376","3257757383","DE","DEU","GERMANY" -"3257757384","3257757407","NL","NLD","NETHERLANDS" -"3257757408","3257757423","DE","DEU","GERMANY" -"3257757424","3257757511","NL","NLD","NETHERLANDS" -"3257757512","3257757519","DE","DEU","GERMANY" -"3257757520","3257757639","NL","NLD","NETHERLANDS" -"3257757640","3257757647","DE","DEU","GERMANY" -"3257757648","3257757735","NL","NLD","NETHERLANDS" -"3257757736","3257757751","DE","DEU","GERMANY" -"3257757752","3257757799","NL","NLD","NETHERLANDS" -"3257757800","3257757807","DE","DEU","GERMANY" -"3257757808","3257757815","NL","NLD","NETHERLANDS" -"3257757816","3257757831","DE","DEU","GERMANY" -"3257757832","3257757919","NL","NLD","NETHERLANDS" -"3257757920","3257757935","DE","DEU","GERMANY" -"3257757936","3257758143","NL","NLD","NETHERLANDS" -"3257758144","3257758151","DE","DEU","GERMANY" -"3257758152","3257758239","NL","NLD","NETHERLANDS" -"3257758240","3257758247","DE","DEU","GERMANY" -"3257758248","3257758271","NL","NLD","NETHERLANDS" -"3257758272","3257758279","DE","DEU","GERMANY" -"3257758280","3257758335","NL","NLD","NETHERLANDS" -"3257758336","3257758343","DE","DEU","GERMANY" -"3257758344","3257758375","NL","NLD","NETHERLANDS" -"3257758376","3257758383","DE","DEU","GERMANY" -"3257758384","3257758423","NL","NLD","NETHERLANDS" -"3257758424","3257758431","DE","DEU","GERMANY" -"3257758432","3257758511","NL","NLD","NETHERLANDS" -"3257758512","3257758519","DE","DEU","GERMANY" -"3257758520","3257758567","NL","NLD","NETHERLANDS" -"3257758568","3257758575","DE","DEU","GERMANY" -"3257758576","3257758623","NL","NLD","NETHERLANDS" -"3257758624","3257758639","DE","DEU","GERMANY" -"3257758640","3257758647","NL","NLD","NETHERLANDS" -"3257758648","3257758655","DE","DEU","GERMANY" -"3257758656","3257758855","NL","NLD","NETHERLANDS" -"3257758856","3257758863","DE","DEU","GERMANY" -"3257758864","3257758879","NL","NLD","NETHERLANDS" -"3257758880","3257758887","DE","DEU","GERMANY" -"3257758888","3257758927","NL","NLD","NETHERLANDS" -"3257758928","3257758935","DE","DEU","GERMANY" -"3257758936","3257759087","NL","NLD","NETHERLANDS" -"3257759088","3257759095","DE","DEU","GERMANY" -"3257759096","3257759135","NL","NLD","NETHERLANDS" -"3257759136","3257759151","DE","DEU","GERMANY" -"3257759152","3257759159","NL","NLD","NETHERLANDS" -"3257759160","3257759167","DE","DEU","GERMANY" -"3257759168","3257759255","NL","NLD","NETHERLANDS" -"3257759256","3257759263","DE","DEU","GERMANY" -"3257759264","3257759271","NL","NLD","NETHERLANDS" -"3257759272","3257759279","DE","DEU","GERMANY" -"3257759280","3257759287","NL","NLD","NETHERLANDS" -"3257759288","3257759295","DE","DEU","GERMANY" -"3257759296","3257759415","NL","NLD","NETHERLANDS" -"3257759416","3257759423","DE","DEU","GERMANY" -"3257759424","3257759647","NL","NLD","NETHERLANDS" -"3257759648","3257759671","DE","DEU","GERMANY" -"3257759672","3257759735","NL","NLD","NETHERLANDS" -"3257759736","3257759743","DE","DEU","GERMANY" -"3257759744","3257759791","NL","NLD","NETHERLANDS" -"3257759792","3257759799","DE","DEU","GERMANY" -"3257759800","3257759847","NL","NLD","NETHERLANDS" -"3257759848","3257759863","DE","DEU","GERMANY" -"3257759864","3257759871","NL","NLD","NETHERLANDS" -"3257759872","3257759879","DE","DEU","GERMANY" -"3257759880","3257759887","NL","NLD","NETHERLANDS" -"3257759888","3257759903","DE","DEU","GERMANY" -"3257759904","3257759975","NL","NLD","NETHERLANDS" -"3257759976","3257759983","DE","DEU","GERMANY" -"3257759984","3257760015","NL","NLD","NETHERLANDS" -"3257760016","3257760023","DE","DEU","GERMANY" -"3257760024","3257760039","NL","NLD","NETHERLANDS" -"3257760040","3257760047","DE","DEU","GERMANY" -"3257760048","3257760095","NL","NLD","NETHERLANDS" -"3257760096","3257760103","DE","DEU","GERMANY" -"3257760104","3257760167","NL","NLD","NETHERLANDS" -"3257760168","3257760175","DE","DEU","GERMANY" -"3257760176","3257760231","NL","NLD","NETHERLANDS" -"3257760232","3257760239","DE","DEU","GERMANY" -"3257760240","3257760263","NL","NLD","NETHERLANDS" -"3257760264","3257760271","DE","DEU","GERMANY" -"3257760272","3257760303","NL","NLD","NETHERLANDS" -"3257760304","3257760311","DE","DEU","GERMANY" -"3257760312","3257760359","NL","NLD","NETHERLANDS" -"3257760360","3257760367","DE","DEU","GERMANY" -"3257760368","3257760431","NL","NLD","NETHERLANDS" -"3257760432","3257760439","DE","DEU","GERMANY" -"3257760440","3257760495","NL","NLD","NETHERLANDS" -"3257760496","3257760503","DE","DEU","GERMANY" -"3257760504","3257760559","NL","NLD","NETHERLANDS" -"3257760560","3257760567","DE","DEU","GERMANY" -"3257760568","3257760655","NL","NLD","NETHERLANDS" -"3257760656","3257760663","DE","DEU","GERMANY" -"3257760664","3257760791","NL","NLD","NETHERLANDS" -"3257760792","3257760799","DE","DEU","GERMANY" -"3257760800","3257760839","NL","NLD","NETHERLANDS" -"3257760840","3257760847","DE","DEU","GERMANY" -"3257760848","3257760863","NL","NLD","NETHERLANDS" -"3257760864","3257760871","DE","DEU","GERMANY" -"3257760872","3257760927","NL","NLD","NETHERLANDS" -"3257760928","3257760935","DE","DEU","GERMANY" -"3257760936","3257760959","NL","NLD","NETHERLANDS" -"3257760960","3257760967","DE","DEU","GERMANY" -"3257760968","3257761055","NL","NLD","NETHERLANDS" -"3257761056","3257761071","DE","DEU","GERMANY" -"3257761072","3257761151","NL","NLD","NETHERLANDS" -"3257761152","3257761159","DE","DEU","GERMANY" -"3257761160","3257761279","NL","NLD","NETHERLANDS" -"3257761280","3257761791","DE","DEU","GERMANY" -"3257761792","3257761839","NL","NLD","NETHERLANDS" -"3257761840","3257761847","DE","DEU","GERMANY" -"3257761848","3257761879","NL","NLD","NETHERLANDS" -"3257761880","3257761887","DE","DEU","GERMANY" -"3257761888","3257761903","NL","NLD","NETHERLANDS" -"3257761904","3257761919","DE","DEU","GERMANY" -"3257761920","3257761951","NL","NLD","NETHERLANDS" -"3257761952","3257761959","DE","DEU","GERMANY" -"3257761960","3257762023","NL","NLD","NETHERLANDS" -"3257762024","3257762031","DE","DEU","GERMANY" -"3257762032","3257762175","NL","NLD","NETHERLANDS" -"3257762176","3257762183","DE","DEU","GERMANY" -"3257762184","3257762215","NL","NLD","NETHERLANDS" -"3257762216","3257762223","DE","DEU","GERMANY" -"3257762224","3257762247","NL","NLD","NETHERLANDS" -"3257762248","3257762263","DE","DEU","GERMANY" -"3257762264","3257762359","NL","NLD","NETHERLANDS" -"3257762360","3257762367","DE","DEU","GERMANY" -"3257762368","3257762391","NL","NLD","NETHERLANDS" -"3257762392","3257762399","DE","DEU","GERMANY" -"3257762400","3257762407","NL","NLD","NETHERLANDS" -"3257762408","3257762415","DE","DEU","GERMANY" -"3257762416","3257762447","NL","NLD","NETHERLANDS" -"3257762448","3257762455","DE","DEU","GERMANY" -"3257762456","3257762591","NL","NLD","NETHERLANDS" -"3257762592","3257762599","DE","DEU","GERMANY" -"3257762600","3257762655","NL","NLD","NETHERLANDS" -"3257762656","3257762663","DE","DEU","GERMANY" -"3257762664","3257762679","NL","NLD","NETHERLANDS" -"3257762680","3257762695","DE","DEU","GERMANY" -"3257762696","3257762711","NL","NLD","NETHERLANDS" -"3257762712","3257762719","DE","DEU","GERMANY" -"3257762720","3257762807","NL","NLD","NETHERLANDS" -"3257762808","3257762815","DE","DEU","GERMANY" -"3257762816","3257762863","NL","NLD","NETHERLANDS" -"3257762864","3257762871","DE","DEU","GERMANY" -"3257762872","3257762951","NL","NLD","NETHERLANDS" -"3257762952","3257762959","DE","DEU","GERMANY" -"3257762960","3257763055","NL","NLD","NETHERLANDS" -"3257763056","3257763063","DE","DEU","GERMANY" -"3257763064","3257763151","NL","NLD","NETHERLANDS" -"3257763152","3257763159","DE","DEU","GERMANY" -"3257763160","3257763247","NL","NLD","NETHERLANDS" -"3257763248","3257763255","DE","DEU","GERMANY" -"3257763256","3257763327","NL","NLD","NETHERLANDS" -"3257763328","3257763839","DE","DEU","GERMANY" -"3257763840","3257763855","NL","NLD","NETHERLANDS" -"3257763856","3257763871","DE","DEU","GERMANY" -"3257763872","3257763927","NL","NLD","NETHERLANDS" -"3257763928","3257763935","DE","DEU","GERMANY" -"3257763936","3257763943","NL","NLD","NETHERLANDS" -"3257763944","3257763951","DE","DEU","GERMANY" -"3257763952","3257763999","NL","NLD","NETHERLANDS" -"3257764000","3257764007","DE","DEU","GERMANY" -"3257764008","3257764247","NL","NLD","NETHERLANDS" -"3257764248","3257764255","DE","DEU","GERMANY" -"3257764256","3257764287","NL","NLD","NETHERLANDS" -"3257764288","3257764295","DE","DEU","GERMANY" -"3257764296","3257764487","NL","NLD","NETHERLANDS" -"3257764488","3257764511","DE","DEU","GERMANY" -"3257764512","3257764543","NL","NLD","NETHERLANDS" -"3257764544","3257764551","DE","DEU","GERMANY" -"3257764552","3257764591","NL","NLD","NETHERLANDS" -"3257764592","3257764599","DE","DEU","GERMANY" -"3257764600","3257764647","NL","NLD","NETHERLANDS" -"3257764648","3257764655","DE","DEU","GERMANY" -"3257764656","3257764799","NL","NLD","NETHERLANDS" -"3257764800","3257764807","DE","DEU","GERMANY" -"3257764808","3257764879","NL","NLD","NETHERLANDS" -"3257764880","3257764887","DE","DEU","GERMANY" -"3257764888","3257764927","NL","NLD","NETHERLANDS" -"3257764928","3257764935","DE","DEU","GERMANY" -"3257764936","3257764983","NL","NLD","NETHERLANDS" -"3257764984","3257764991","DE","DEU","GERMANY" -"3257764992","3257765055","NL","NLD","NETHERLANDS" -"3257765056","3257765063","DE","DEU","GERMANY" -"3257765064","3257765263","NL","NLD","NETHERLANDS" -"3257765264","3257765279","DE","DEU","GERMANY" -"3257765280","3257765375","NL","NLD","NETHERLANDS" -"3257765376","3257768959","DE","DEU","GERMANY" -"3257768960","3257769071","NL","NLD","NETHERLANDS" -"3257769072","3257769079","DE","DEU","GERMANY" -"3257769080","3257769215","NL","NLD","NETHERLANDS" -"3257769216","3257769223","DE","DEU","GERMANY" -"3257769224","3257769543","NL","NLD","NETHERLANDS" -"3257769544","3257769551","DE","DEU","GERMANY" -"3257769552","3257769567","NL","NLD","NETHERLANDS" -"3257769568","3257769575","DE","DEU","GERMANY" -"3257769576","3257769703","NL","NLD","NETHERLANDS" -"3257769704","3257769711","DE","DEU","GERMANY" -"3257769712","3257769719","NL","NLD","NETHERLANDS" -"3257769720","3257769727","DE","DEU","GERMANY" -"3257769728","3257770023","NL","NLD","NETHERLANDS" -"3257770024","3257770031","DE","DEU","GERMANY" -"3257770032","3257770039","NL","NLD","NETHERLANDS" -"3257770040","3257770047","DE","DEU","GERMANY" -"3257770048","3257770071","NL","NLD","NETHERLANDS" -"3257770072","3257770079","DE","DEU","GERMANY" -"3257770080","3257770095","NL","NLD","NETHERLANDS" -"3257770096","3257770103","DE","DEU","GERMANY" -"3257770104","3257770151","NL","NLD","NETHERLANDS" -"3257770152","3257770159","DE","DEU","GERMANY" -"3257770160","3257770295","NL","NLD","NETHERLANDS" -"3257770296","3257770303","DE","DEU","GERMANY" -"3257770304","3257770359","NL","NLD","NETHERLANDS" -"3257770360","3257770367","DE","DEU","GERMANY" -"3257770368","3257770455","NL","NLD","NETHERLANDS" -"3257770456","3257770463","DE","DEU","GERMANY" -"3257770464","3257770511","NL","NLD","NETHERLANDS" -"3257770512","3257770519","DE","DEU","GERMANY" -"3257770520","3257770599","NL","NLD","NETHERLANDS" -"3257770600","3257770607","DE","DEU","GERMANY" -"3257770608","3257770623","NL","NLD","NETHERLANDS" -"3257770624","3257770631","DE","DEU","GERMANY" -"3257770632","3257770823","NL","NLD","NETHERLANDS" -"3257770824","3257770831","DE","DEU","GERMANY" -"3257770832","3257770911","NL","NLD","NETHERLANDS" -"3257770912","3257770919","DE","DEU","GERMANY" -"3257770920","3257771007","NL","NLD","NETHERLANDS" -"3257771008","3257772543","DE","DEU","GERMANY" -"3257772544","3257772631","NL","NLD","NETHERLANDS" -"3257772632","3257772639","DE","DEU","GERMANY" -"3257772640","3257772735","NL","NLD","NETHERLANDS" -"3257772736","3257772743","DE","DEU","GERMANY" -"3257772744","3257772783","NL","NLD","NETHERLANDS" -"3257772784","3257772791","DE","DEU","GERMANY" -"3257772792","3257772815","NL","NLD","NETHERLANDS" -"3257772816","3257772831","DE","DEU","GERMANY" -"3257772832","3257772847","NL","NLD","NETHERLANDS" -"3257772848","3257772855","DE","DEU","GERMANY" -"3257772856","3257772895","NL","NLD","NETHERLANDS" -"3257772896","3257772903","DE","DEU","GERMANY" -"3257772904","3257772991","NL","NLD","NETHERLANDS" -"3257772992","3257772999","DE","DEU","GERMANY" -"3257773000","3257773095","NL","NLD","NETHERLANDS" -"3257773096","3257773103","DE","DEU","GERMANY" -"3257773104","3257773199","NL","NLD","NETHERLANDS" -"3257773200","3257773223","DE","DEU","GERMANY" -"3257773224","3257773303","NL","NLD","NETHERLANDS" -"3257773304","3257773311","DE","DEU","GERMANY" -"3257773312","3257773391","NL","NLD","NETHERLANDS" -"3257773392","3257773399","DE","DEU","GERMANY" -"3257773400","3257773415","NL","NLD","NETHERLANDS" -"3257773416","3257773423","DE","DEU","GERMANY" -"3257773424","3257773439","NL","NLD","NETHERLANDS" -"3257773440","3257773447","DE","DEU","GERMANY" -"3257773448","3257773767","NL","NLD","NETHERLANDS" -"3257773768","3257773775","DE","DEU","GERMANY" -"3257773776","3257773799","NL","NLD","NETHERLANDS" -"3257773800","3257773807","DE","DEU","GERMANY" -"3257773808","3257773831","NL","NLD","NETHERLANDS" -"3257773832","3257773839","DE","DEU","GERMANY" -"3257773840","3257773847","NL","NLD","NETHERLANDS" -"3257773848","3257773855","DE","DEU","GERMANY" -"3257773856","3257773903","NL","NLD","NETHERLANDS" -"3257773904","3257773919","DE","DEU","GERMANY" -"3257773920","3257773951","NL","NLD","NETHERLANDS" -"3257773952","3257773959","DE","DEU","GERMANY" -"3257773960","3257774007","NL","NLD","NETHERLANDS" -"3257774008","3257774015","DE","DEU","GERMANY" -"3257774016","3257774055","NL","NLD","NETHERLANDS" -"3257774056","3257774063","DE","DEU","GERMANY" -"3257774064","3257774287","NL","NLD","NETHERLANDS" -"3257774288","3257774295","DE","DEU","GERMANY" -"3257774296","3257774335","NL","NLD","NETHERLANDS" -"3257774336","3257774343","DE","DEU","GERMANY" -"3257774344","3257774359","NL","NLD","NETHERLANDS" -"3257774360","3257774367","DE","DEU","GERMANY" -"3257774368","3257774375","NL","NLD","NETHERLANDS" -"3257774376","3257774383","DE","DEU","GERMANY" -"3257774384","3257774487","NL","NLD","NETHERLANDS" -"3257774488","3257774495","DE","DEU","GERMANY" -"3257774496","3257774775","NL","NLD","NETHERLANDS" -"3257774776","3257774791","DE","DEU","GERMANY" -"3257774792","3257774871","NL","NLD","NETHERLANDS" -"3257774872","3257774879","DE","DEU","GERMANY" -"3257774880","3257774951","NL","NLD","NETHERLANDS" -"3257774952","3257774959","DE","DEU","GERMANY" -"3257774960","3257774983","NL","NLD","NETHERLANDS" -"3257774984","3257774999","DE","DEU","GERMANY" -"3257775000","3257775047","NL","NLD","NETHERLANDS" -"3257775048","3257775055","DE","DEU","GERMANY" -"3257775056","3257775103","NL","NLD","NETHERLANDS" -"3257775104","3257776639","DE","DEU","GERMANY" -"3257776640","3257776663","NL","NLD","NETHERLANDS" -"3257776664","3257776671","DE","DEU","GERMANY" -"3257776672","3257776727","NL","NLD","NETHERLANDS" -"3257776728","3257776735","DE","DEU","GERMANY" -"3257776736","3257776767","NL","NLD","NETHERLANDS" -"3257776768","3257776775","DE","DEU","GERMANY" -"3257776776","3257776983","NL","NLD","NETHERLANDS" -"3257776984","3257776991","DE","DEU","GERMANY" -"3257776992","3257777047","NL","NLD","NETHERLANDS" -"3257777048","3257777055","DE","DEU","GERMANY" -"3257777056","3257777111","NL","NLD","NETHERLANDS" -"3257777112","3257777119","DE","DEU","GERMANY" -"3257777120","3257777151","NL","NLD","NETHERLANDS" -"3257777152","3257777159","DE","DEU","GERMANY" -"3257777160","3257777223","NL","NLD","NETHERLANDS" -"3257777224","3257777231","DE","DEU","GERMANY" -"3257777232","3257777335","NL","NLD","NETHERLANDS" -"3257777336","3257777343","DE","DEU","GERMANY" -"3257777344","3257777487","NL","NLD","NETHERLANDS" -"3257777488","3257777495","DE","DEU","GERMANY" -"3257777496","3257777551","NL","NLD","NETHERLANDS" -"3257777552","3257777559","DE","DEU","GERMANY" -"3257777560","3257777575","NL","NLD","NETHERLANDS" -"3257777576","3257777583","DE","DEU","GERMANY" -"3257777584","3257777751","NL","NLD","NETHERLANDS" -"3257777752","3257777767","DE","DEU","GERMANY" -"3257777768","3257777799","NL","NLD","NETHERLANDS" -"3257777800","3257777807","DE","DEU","GERMANY" -"3257777808","3257777935","NL","NLD","NETHERLANDS" -"3257777936","3257777943","DE","DEU","GERMANY" -"3257777944","3257777991","NL","NLD","NETHERLANDS" -"3257777992","3257777999","DE","DEU","GERMANY" -"3257778000","3257778023","NL","NLD","NETHERLANDS" -"3257778024","3257778031","DE","DEU","GERMANY" -"3257778032","3257778047","NL","NLD","NETHERLANDS" -"3257778048","3257778055","DE","DEU","GERMANY" -"3257778056","3257778071","NL","NLD","NETHERLANDS" -"3257778072","3257778079","DE","DEU","GERMANY" -"3257778080","3257778087","NL","NLD","NETHERLANDS" -"3257778088","3257778095","DE","DEU","GERMANY" -"3257778096","3257778159","NL","NLD","NETHERLANDS" -"3257778160","3257778167","DE","DEU","GERMANY" -"3257778168","3257778439","NL","NLD","NETHERLANDS" -"3257778440","3257778447","DE","DEU","GERMANY" -"3257778448","3257778479","NL","NLD","NETHERLANDS" -"3257778480","3257778487","DE","DEU","GERMANY" -"3257778488","3257778503","NL","NLD","NETHERLANDS" -"3257778504","3257778511","DE","DEU","GERMANY" -"3257778512","3257778583","NL","NLD","NETHERLANDS" -"3257778584","3257778591","DE","DEU","GERMANY" -"3257778592","3257778663","NL","NLD","NETHERLANDS" -"3257778664","3257778671","DE","DEU","GERMANY" -"3257778672","3257778815","NL","NLD","NETHERLANDS" -"3257778816","3257778823","DE","DEU","GERMANY" -"3257778824","3257778895","NL","NLD","NETHERLANDS" -"3257778896","3257778903","DE","DEU","GERMANY" -"3257778904","3257778943","NL","NLD","NETHERLANDS" -"3257778944","3257778951","DE","DEU","GERMANY" -"3257778952","3257778959","NL","NLD","NETHERLANDS" -"3257778960","3257778975","DE","DEU","GERMANY" -"3257778976","3257779055","NL","NLD","NETHERLANDS" -"3257779056","3257779063","DE","DEU","GERMANY" -"3257779064","3257779079","NL","NLD","NETHERLANDS" -"3257779080","3257779087","DE","DEU","GERMANY" -"3257779088","3257779111","NL","NLD","NETHERLANDS" -"3257779112","3257779127","DE","DEU","GERMANY" -"3257779128","3257779199","NL","NLD","NETHERLANDS" -"3257779200","3257780735","DE","DEU","GERMANY" -"3257780736","3257780743","NL","NLD","NETHERLANDS" -"3257780744","3257780751","DE","DEU","GERMANY" -"3257780752","3257780775","NL","NLD","NETHERLANDS" -"3257780776","3257780783","DE","DEU","GERMANY" -"3257780784","3257780967","NL","NLD","NETHERLANDS" -"3257780968","3257780983","DE","DEU","GERMANY" -"3257780984","3257781111","NL","NLD","NETHERLANDS" -"3257781112","3257781119","DE","DEU","GERMANY" -"3257781120","3257781135","NL","NLD","NETHERLANDS" -"3257781136","3257781143","DE","DEU","GERMANY" -"3257781144","3257781255","NL","NLD","NETHERLANDS" -"3257781256","3257781263","DE","DEU","GERMANY" -"3257781264","3257781279","NL","NLD","NETHERLANDS" -"3257781280","3257781287","DE","DEU","GERMANY" -"3257781288","3257781391","NL","NLD","NETHERLANDS" -"3257781392","3257781399","DE","DEU","GERMANY" -"3257781400","3257781479","NL","NLD","NETHERLANDS" -"3257781480","3257781487","DE","DEU","GERMANY" -"3257781488","3257781567","NL","NLD","NETHERLANDS" -"3257781568","3257781575","DE","DEU","GERMANY" -"3257781576","3257781615","NL","NLD","NETHERLANDS" -"3257781616","3257781623","DE","DEU","GERMANY" -"3257781624","3257781639","NL","NLD","NETHERLANDS" -"3257781640","3257781647","DE","DEU","GERMANY" -"3257781648","3257781711","NL","NLD","NETHERLANDS" -"3257781712","3257781719","DE","DEU","GERMANY" -"3257781720","3257781791","NL","NLD","NETHERLANDS" -"3257781792","3257781799","DE","DEU","GERMANY" -"3257781800","3257781839","NL","NLD","NETHERLANDS" -"3257781840","3257781847","DE","DEU","GERMANY" -"3257781848","3257781895","NL","NLD","NETHERLANDS" -"3257781896","3257781903","DE","DEU","GERMANY" -"3257781904","3257781919","NL","NLD","NETHERLANDS" -"3257781920","3257781927","DE","DEU","GERMANY" -"3257781928","3257781943","NL","NLD","NETHERLANDS" -"3257781944","3257781951","DE","DEU","GERMANY" -"3257781952","3257781975","NL","NLD","NETHERLANDS" -"3257781976","3257781999","DE","DEU","GERMANY" -"3257782000","3257782015","NL","NLD","NETHERLANDS" -"3257782016","3257782023","DE","DEU","GERMANY" -"3257782024","3257782031","NL","NLD","NETHERLANDS" -"3257782032","3257782039","DE","DEU","GERMANY" -"3257782040","3257782103","NL","NLD","NETHERLANDS" -"3257782104","3257782111","DE","DEU","GERMANY" -"3257782112","3257782191","NL","NLD","NETHERLANDS" -"3257782192","3257782207","DE","DEU","GERMANY" -"3257782208","3257782239","NL","NLD","NETHERLANDS" -"3257782240","3257782247","DE","DEU","GERMANY" -"3257782248","3257782271","NL","NLD","NETHERLANDS" -"3257782272","3257784831","DE","DEU","GERMANY" -"3257784832","3257785087","NL","NLD","NETHERLANDS" -"3257785088","3257785095","DE","DEU","GERMANY" -"3257785096","3257785151","NL","NLD","NETHERLANDS" -"3257785152","3257785159","DE","DEU","GERMANY" -"3257785160","3257785183","NL","NLD","NETHERLANDS" -"3257785184","3257785191","DE","DEU","GERMANY" -"3257785192","3257785343","NL","NLD","NETHERLANDS" -"3257785344","3257785359","DE","DEU","GERMANY" -"3257785360","3257785375","NL","NLD","NETHERLANDS" -"3257785376","3257785383","DE","DEU","GERMANY" -"3257785384","3257785415","NL","NLD","NETHERLANDS" -"3257785416","3257785431","DE","DEU","GERMANY" -"3257785432","3257785663","NL","NLD","NETHERLANDS" -"3257785664","3257785671","DE","DEU","GERMANY" -"3257785672","3257785679","NL","NLD","NETHERLANDS" -"3257785680","3257785695","DE","DEU","GERMANY" -"3257785696","3257785719","NL","NLD","NETHERLANDS" -"3257785720","3257785727","DE","DEU","GERMANY" -"3257785728","3257785735","NL","NLD","NETHERLANDS" -"3257785736","3257785743","DE","DEU","GERMANY" -"3257785744","3257785807","NL","NLD","NETHERLANDS" -"3257785808","3257785815","DE","DEU","GERMANY" -"3257785816","3257786079","NL","NLD","NETHERLANDS" -"3257786080","3257786087","DE","DEU","GERMANY" -"3257786088","3257786271","NL","NLD","NETHERLANDS" -"3257786272","3257786279","DE","DEU","GERMANY" -"3257786280","3257786335","NL","NLD","NETHERLANDS" -"3257786336","3257786343","DE","DEU","GERMANY" -"3257786344","3257786359","NL","NLD","NETHERLANDS" -"3257786360","3257786367","DE","DEU","GERMANY" -"3257786368","3257786383","NL","NLD","NETHERLANDS" -"3257786384","3257786391","DE","DEU","GERMANY" -"3257786392","3257786415","NL","NLD","NETHERLANDS" -"3257786416","3257786423","DE","DEU","GERMANY" -"3257786424","3257786431","NL","NLD","NETHERLANDS" -"3257786432","3257786439","DE","DEU","GERMANY" -"3257786440","3257786559","NL","NLD","NETHERLANDS" -"3257786560","3257786567","DE","DEU","GERMANY" -"3257786568","3257786623","NL","NLD","NETHERLANDS" -"3257786624","3257786631","DE","DEU","GERMANY" -"3257786632","3257786647","NL","NLD","NETHERLANDS" -"3257786648","3257786655","DE","DEU","GERMANY" -"3257786656","3257786703","NL","NLD","NETHERLANDS" -"3257786704","3257786711","DE","DEU","GERMANY" -"3257786712","3257786807","NL","NLD","NETHERLANDS" -"3257786808","3257786823","DE","DEU","GERMANY" -"3257786824","3257786839","NL","NLD","NETHERLANDS" -"3257786840","3257786847","DE","DEU","GERMANY" -"3257786848","3257786863","NL","NLD","NETHERLANDS" -"3257786864","3257786871","DE","DEU","GERMANY" -"3257786872","3257786879","NL","NLD","NETHERLANDS" -"3257786880","3257787391","DE","DEU","GERMANY" -"3257787392","3257787503","NL","NLD","NETHERLANDS" -"3257787504","3257787511","DE","DEU","GERMANY" -"3257787512","3257787695","NL","NLD","NETHERLANDS" -"3257787696","3257787703","DE","DEU","GERMANY" -"3257787704","3257787727","NL","NLD","NETHERLANDS" -"3257787728","3257787735","DE","DEU","GERMANY" -"3257787736","3257787751","NL","NLD","NETHERLANDS" -"3257787752","3257787759","DE","DEU","GERMANY" -"3257787760","3257787879","NL","NLD","NETHERLANDS" -"3257787880","3257787887","DE","DEU","GERMANY" -"3257787888","3257787911","NL","NLD","NETHERLANDS" -"3257787912","3257787919","DE","DEU","GERMANY" -"3257787920","3257787967","NL","NLD","NETHERLANDS" -"3257787968","3257787975","DE","DEU","GERMANY" -"3257787976","3257787999","NL","NLD","NETHERLANDS" -"3257788000","3257788015","DE","DEU","GERMANY" -"3257788016","3257788071","NL","NLD","NETHERLANDS" -"3257788072","3257788079","DE","DEU","GERMANY" -"3257788080","3257788095","NL","NLD","NETHERLANDS" -"3257788096","3257788103","DE","DEU","GERMANY" -"3257788104","3257788119","NL","NLD","NETHERLANDS" -"3257788120","3257788127","DE","DEU","GERMANY" -"3257788128","3257788175","NL","NLD","NETHERLANDS" -"3257788176","3257788183","DE","DEU","GERMANY" -"3257788184","3257788231","NL","NLD","NETHERLANDS" -"3257788232","3257788239","DE","DEU","GERMANY" -"3257788240","3257788247","NL","NLD","NETHERLANDS" -"3257788248","3257788255","DE","DEU","GERMANY" -"3257788256","3257788415","NL","NLD","NETHERLANDS" -"3257788416","3257789951","DE","DEU","GERMANY" -"3257789952","3257789975","NL","NLD","NETHERLANDS" -"3257789976","3257789983","DE","DEU","GERMANY" -"3257789984","3257789999","NL","NLD","NETHERLANDS" -"3257790000","3257790007","DE","DEU","GERMANY" -"3257790008","3257790039","NL","NLD","NETHERLANDS" -"3257790040","3257790047","DE","DEU","GERMANY" -"3257790048","3257790159","NL","NLD","NETHERLANDS" -"3257790160","3257790167","DE","DEU","GERMANY" -"3257790168","3257790191","NL","NLD","NETHERLANDS" -"3257790192","3257790199","DE","DEU","GERMANY" -"3257790200","3257790239","NL","NLD","NETHERLANDS" -"3257790240","3257790247","DE","DEU","GERMANY" -"3257790248","3257790255","NL","NLD","NETHERLANDS" -"3257790256","3257790263","DE","DEU","GERMANY" -"3257790264","3257790319","NL","NLD","NETHERLANDS" -"3257790320","3257790327","DE","DEU","GERMANY" -"3257790328","3257790391","NL","NLD","NETHERLANDS" -"3257790392","3257790407","DE","DEU","GERMANY" -"3257790408","3257790479","NL","NLD","NETHERLANDS" -"3257790480","3257790503","DE","DEU","GERMANY" -"3257790504","3257790623","NL","NLD","NETHERLANDS" -"3257790624","3257790639","DE","DEU","GERMANY" -"3257790640","3257790663","NL","NLD","NETHERLANDS" -"3257790664","3257790671","DE","DEU","GERMANY" -"3257790672","3257790711","NL","NLD","NETHERLANDS" -"3257790712","3257790719","DE","DEU","GERMANY" -"3257790720","3257790847","NL","NLD","NETHERLANDS" -"3257790848","3257790855","DE","DEU","GERMANY" -"3257790856","3257790903","NL","NLD","NETHERLANDS" -"3257790904","3257790919","DE","DEU","GERMANY" -"3257790920","3257790975","NL","NLD","NETHERLANDS" -"3257790976","3257790991","DE","DEU","GERMANY" -"3257790992","3257790999","NL","NLD","NETHERLANDS" -"3257791000","3257791007","DE","DEU","GERMANY" -"3257791008","3257791015","NL","NLD","NETHERLANDS" -"3257791016","3257791023","DE","DEU","GERMANY" -"3257791024","3257791151","NL","NLD","NETHERLANDS" -"3257791152","3257791159","DE","DEU","GERMANY" -"3257791160","3257791223","NL","NLD","NETHERLANDS" -"3257791224","3257791231","DE","DEU","GERMANY" -"3257791232","3257791255","NL","NLD","NETHERLANDS" -"3257791256","3257791263","DE","DEU","GERMANY" -"3257791264","3257791271","NL","NLD","NETHERLANDS" -"3257791272","3257791287","DE","DEU","GERMANY" -"3257791288","3257791327","NL","NLD","NETHERLANDS" -"3257791328","3257791335","DE","DEU","GERMANY" -"3257791336","3257791359","NL","NLD","NETHERLANDS" -"3257791360","3257791375","DE","DEU","GERMANY" -"3257791376","3257791503","NL","NLD","NETHERLANDS" -"3257791504","3257791511","DE","DEU","GERMANY" -"3257791512","3257791527","NL","NLD","NETHERLANDS" -"3257791528","3257791535","DE","DEU","GERMANY" -"3257791536","3257791623","NL","NLD","NETHERLANDS" -"3257791624","3257791631","DE","DEU","GERMANY" -"3257791632","3257791703","NL","NLD","NETHERLANDS" -"3257791704","3257791711","DE","DEU","GERMANY" -"3257791712","3257791727","NL","NLD","NETHERLANDS" -"3257791728","3257791743","DE","DEU","GERMANY" -"3257791744","3257791831","NL","NLD","NETHERLANDS" -"3257791832","3257791839","DE","DEU","GERMANY" -"3257791840","3257791863","NL","NLD","NETHERLANDS" -"3257791864","3257791871","DE","DEU","GERMANY" -"3257791872","3257791879","NL","NLD","NETHERLANDS" -"3257791880","3257791887","DE","DEU","GERMANY" -"3257791888","3257791895","NL","NLD","NETHERLANDS" -"3257791896","3257791903","DE","DEU","GERMANY" -"3257791904","3257791951","NL","NLD","NETHERLANDS" -"3257791952","3257791959","DE","DEU","GERMANY" -"3257791960","3257792095","NL","NLD","NETHERLANDS" -"3257792096","3257792103","DE","DEU","GERMANY" -"3257792104","3257792127","NL","NLD","NETHERLANDS" -"3257792128","3257792135","DE","DEU","GERMANY" -"3257792136","3257792143","NL","NLD","NETHERLANDS" -"3257792144","3257792159","DE","DEU","GERMANY" -"3257792160","3257792191","NL","NLD","NETHERLANDS" -"3257792192","3257792199","DE","DEU","GERMANY" -"3257792200","3257792207","NL","NLD","NETHERLANDS" -"3257792208","3257792215","DE","DEU","GERMANY" -"3257792216","3257792383","NL","NLD","NETHERLANDS" -"3257792384","3257792391","DE","DEU","GERMANY" -"3257792392","3257792399","NL","NLD","NETHERLANDS" -"3257792400","3257792407","DE","DEU","GERMANY" -"3257792408","3257792487","NL","NLD","NETHERLANDS" -"3257792488","3257792495","DE","DEU","GERMANY" -"3257792496","3257792503","NL","NLD","NETHERLANDS" -"3257792504","3257792511","DE","DEU","GERMANY" -"3257792512","3257792607","NL","NLD","NETHERLANDS" -"3257792608","3257792615","DE","DEU","GERMANY" -"3257792616","3257792719","NL","NLD","NETHERLANDS" -"3257792720","3257792727","DE","DEU","GERMANY" -"3257792728","3257792783","NL","NLD","NETHERLANDS" -"3257792784","3257792791","DE","DEU","GERMANY" -"3257792792","3257792927","NL","NLD","NETHERLANDS" -"3257792928","3257792935","DE","DEU","GERMANY" -"3257792936","3257793087","NL","NLD","NETHERLANDS" -"3257793088","3257793095","DE","DEU","GERMANY" -"3257793096","3257793167","NL","NLD","NETHERLANDS" -"3257793168","3257793175","DE","DEU","GERMANY" -"3257793176","3257793215","NL","NLD","NETHERLANDS" -"3257793216","3257793223","DE","DEU","GERMANY" -"3257793224","3257793391","NL","NLD","NETHERLANDS" -"3257793392","3257793399","DE","DEU","GERMANY" -"3257793400","3257793415","NL","NLD","NETHERLANDS" -"3257793416","3257793431","DE","DEU","GERMANY" -"3257793432","3257793439","NL","NLD","NETHERLANDS" -"3257793440","3257793447","DE","DEU","GERMANY" -"3257793448","3257793519","NL","NLD","NETHERLANDS" -"3257793520","3257793527","DE","DEU","GERMANY" -"3257793528","3257793551","NL","NLD","NETHERLANDS" -"3257793552","3257793559","DE","DEU","GERMANY" -"3257793560","3257793839","NL","NLD","NETHERLANDS" -"3257793840","3257793847","DE","DEU","GERMANY" -"3257793848","3257793919","NL","NLD","NETHERLANDS" -"3257793920","3257793927","DE","DEU","GERMANY" -"3257793928","3257793951","NL","NLD","NETHERLANDS" -"3257793952","3257793959","DE","DEU","GERMANY" -"3257793960","3257794095","NL","NLD","NETHERLANDS" -"3257794096","3257794103","DE","DEU","GERMANY" -"3257794104","3257794135","NL","NLD","NETHERLANDS" -"3257794136","3257794143","DE","DEU","GERMANY" -"3257794144","3257794351","NL","NLD","NETHERLANDS" -"3257794352","3257794359","DE","DEU","GERMANY" -"3257794360","3257794511","NL","NLD","NETHERLANDS" -"3257794512","3257794519","DE","DEU","GERMANY" -"3257794520","3257794559","NL","NLD","NETHERLANDS" -"3257794560","3257827327","GB","GBR","UNITED KINGDOM" -"3257827328","3257827839","IE","IRL","IRELAND" -"3257827840","3257829375","GB","GBR","UNITED KINGDOM" -"3257829376","3257830399","IE","IRL","IRELAND" -"3257830400","3257835519","GB","GBR","UNITED KINGDOM" -"3257835520","3257844223","IE","IRL","IRELAND" -"3257844224","3257851903","GB","GBR","UNITED KINGDOM" -"3257851904","3257860095","IE","IRL","IRELAND" -"3257860096","3257925631","SE","SWE","SWEDEN" -"3257925632","3257925887","AT","AUT","AUSTRIA" -"3257925888","3257926143","SE","SWE","SWEDEN" -"3257926144","3257970431","AT","AUT","AUSTRIA" -"3257970432","3257970687","UA","UKR","UKRAINE" -"3257970688","3257977855","AT","AUT","AUSTRIA" -"3257977856","3257978111","GB","GBR","UNITED KINGDOM" -"3257978112","3257978367","SE","SWE","SWEDEN" -"3257978368","3257978623","BG","BGR","BULGARIA" -"3257978624","3257978879","ES","ESP","SPAIN" -"3257978880","3257979135","FR","FRA","FRANCE" -"3257979392","3257979647","GB","GBR","UNITED KINGDOM" -"3257979648","3257979903","DE","DEU","GERMANY" -"3257979904","3257980159","UA","UKR","UKRAINE" -"3257980160","3257980415","SE","SWE","SWEDEN" -"3257980416","3257980671","NL","NLD","NETHERLANDS" -"3257980672","3257980927","CH","CHE","SWITZERLAND" -"3257980928","3257981183","PL","POL","POLAND" -"3257981184","3257981439","GB","GBR","UNITED KINGDOM" -"3257981440","3257981695","RU","RUS","RUSSIAN FEDERATION" -"3257981696","3257981951","PL","POL","POLAND" -"3257981952","3257987327","AT","AUT","AUSTRIA" -"3257987328","3257987583","CZ","CZE","CZECH REPUBLIC" -"3257987584","3257991167","AT","AUT","AUSTRIA" -"3257991168","3258003967","DE","DEU","GERMANY" -"3258003968","3258004479","RU","RUS","RUSSIAN FEDERATION" -"3258004480","3258005503","DE","DEU","GERMANY" -"3258005760","3258013183","DE","DEU","GERMANY" -"3258013696","3258018815","DE","DEU","GERMANY" -"3258019328","3258021887","DE","DEU","GERMANY" -"3258023168","3258023679","DE","DEU","GERMANY" -"3258023936","3258056703","DE","DEU","GERMANY" -"3258056704","3258056959","UA","UKR","UKRAINE" -"3258057216","3258057727","CZ","CZE","CZECH REPUBLIC" -"3258058240","3258058495","RU","RUS","RUSSIAN FEDERATION" -"3258058496","3258059007","RO","ROM","ROMANIA" -"3258059008","3258059263","UA","UKR","UKRAINE" -"3258059264","3258059519","RU","RUS","RUSSIAN FEDERATION" -"3258059520","3258059775","RO","ROM","ROMANIA" -"3258062848","3258063871","CZ","CZE","CZECH REPUBLIC" -"3258063872","3258064127","AT","AUT","AUSTRIA" -"3258064128","3258064383","FR","FRA","FRANCE" -"3258064384","3258065151","GB","GBR","UNITED KINGDOM" -"3258065152","3258065407","DE","DEU","GERMANY" -"3258065408","3258065663","LI","LIE","LIECHTENSTEIN" -"3258065664","3258065919","SA","SAU","SAUDI ARABIA" -"3258065920","3258066175","DE","DEU","GERMANY" -"3258066176","3258066431","PL","POL","POLAND" -"3258066432","3258066943","FR","FRA","FRANCE" -"3258066944","3258067199","DK","DNK","DENMARK" -"3258067200","3258067455","GB","GBR","UNITED KINGDOM" -"3258067456","3258067967","GR","GRC","GREECE" -"3258067968","3258068223","RO","ROM","ROMANIA" -"3258068224","3258068479","CH","CHE","SWITZERLAND" -"3258068480","3258068735","GB","GBR","UNITED KINGDOM" -"3258068736","3258068991","DE","DEU","GERMANY" -"3258068992","3258069247","NL","NLD","NETHERLANDS" -"3258069248","3258069503","PL","POL","POLAND" -"3258069504","3258069759","RO","ROM","ROMANIA" -"3258069760","3258070015","UA","UKR","UKRAINE" -"3258070016","3258070271","GB","GBR","UNITED KINGDOM" -"3258070272","3258070527","PL","POL","POLAND" -"3258070528","3258071295","GB","GBR","UNITED KINGDOM" -"3258071296","3258071551","DK","DNK","DENMARK" -"3258071552","3258071807","DE","DEU","GERMANY" -"3258071808","3258072063","GB","GBR","UNITED KINGDOM" -"3258072064","3258072319","FR","FRA","FRANCE" -"3258072320","3258072575","PL","POL","POLAND" -"3258072576","3258072831","BE","BEL","BELGIUM" -"3258072832","3258073087","RO","ROM","ROMANIA" -"3258073088","3258074111","CZ","CZE","CZECH REPUBLIC" -"3258074112","3258074879","DE","DEU","GERMANY" -"3258074880","3258075135","IL","ISR","ISRAEL" -"3258075136","3258075391","RO","ROM","ROMANIA" -"3258075392","3258075647","BG","BGR","BULGARIA" -"3258075648","3258075903","FR","FRA","FRANCE" -"3258075904","3258076159","PL","POL","POLAND" -"3258076160","3258076415","BG","BGR","BULGARIA" -"3258076416","3258076927","FR","FRA","FRANCE" -"3258076928","3258077183","UA","UKR","UKRAINE" -"3258077184","3258077439","GB","GBR","UNITED KINGDOM" -"3258077440","3258077695","UA","UKR","UKRAINE" -"3258077696","3258077951","NL","NLD","NETHERLANDS" -"3258077952","3258078207","PL","POL","POLAND" -"3258078208","3258078463","TR","TUR","TURKEY" -"3258078464","3258078719","UA","UKR","UKRAINE" -"3258078720","3258078975","GB","GBR","UNITED KINGDOM" -"3258078976","3258079231","RU","RUS","RUSSIAN FEDERATION" -"3258079232","3258079487","GB","GBR","UNITED KINGDOM" -"3258079488","3258079743","PL","POL","POLAND" -"3258079744","3258079999","GB","GBR","UNITED KINGDOM" -"3258080000","3258080255","BE","BEL","BELGIUM" -"3258080256","3258080511","FR","FRA","FRANCE" -"3258080512","3258080767","DE","DEU","GERMANY" -"3258080768","3258081023","GB","GBR","UNITED KINGDOM" -"3258081024","3258081279","FR","FRA","FRANCE" -"3258081280","3258081535","NL","NLD","NETHERLANDS" -"3258081536","3258081791","BE","BEL","BELGIUM" -"3258081792","3258082047","UA","UKR","UKRAINE" -"3258082048","3258082303","NL","NLD","NETHERLANDS" -"3258082304","3258082559","CZ","CZE","CZECH REPUBLIC" -"3258082560","3258082815","HU","HUN","HUNGARY" -"3258082816","3258083071","NL","NLD","NETHERLANDS" -"3258083072","3258083583","RU","RUS","RUSSIAN FEDERATION" -"3258083584","3258083839","LV","LVA","LATVIA" -"3258083840","3258084351","SE","SWE","SWEDEN" -"3258084352","3258084607","GB","GBR","UNITED KINGDOM" -"3258084608","3258084863","AT","AUT","AUSTRIA" -"3258084864","3258085119","PL","POL","POLAND" -"3258085120","3258085375","LT","LTU","LITHUANIA" -"3258085376","3258085631","NL","NLD","NETHERLANDS" -"3258085632","3258085887","DE","DEU","GERMANY" -"3258085888","3258086143","UA","UKR","UKRAINE" -"3258086144","3258086399","AT","AUT","AUSTRIA" -"3258086400","3258086655","UA","UKR","UKRAINE" -"3258086656","3258087167","GB","GBR","UNITED KINGDOM" -"3258087168","3258087423","UA","UKR","UKRAINE" -"3258087424","3258087679","RU","RUS","RUSSIAN FEDERATION" -"3258087680","3258087935","GB","GBR","UNITED KINGDOM" -"3258087936","3258088191","BG","BGR","BULGARIA" -"3258088192","3258088447","PL","POL","POLAND" -"3258088448","3258088703","BE","BEL","BELGIUM" -"3258088704","3258088959","UA","UKR","UKRAINE" -"3258088960","3258089215","RO","ROM","ROMANIA" -"3258089216","3258089471","FR","FRA","FRANCE" -"3258097664","3258097919","DE","DEU","GERMANY" -"3258097920","3258098175","UA","UKR","UKRAINE" -"3258098176","3258098431","DE","DEU","GERMANY" -"3258098432","3258098687","NL","NLD","NETHERLANDS" -"3258098688","3258098943","DE","DEU","GERMANY" -"3258098944","3258099199","GB","GBR","UNITED KINGDOM" -"3258099200","3258099455","SI","SVN","SLOVENIA" -"3258099456","3258099711","UA","UKR","UKRAINE" -"3258099712","3258099967","FI","FIN","FINLAND" -"3258099968","3258100223","UA","UKR","UKRAINE" -"3258100224","3258100479","RO","ROM","ROMANIA" -"3258100480","3258100735","DK","DNK","DENMARK" -"3258100736","3258100991","CH","CHE","SWITZERLAND" -"3258100992","3258101247","AT","AUT","AUSTRIA" -"3258101248","3258101503","RO","ROM","ROMANIA" -"3258101504","3258101759","IL","ISR","ISRAEL" -"3258101760","3258102015","CH","CHE","SWITZERLAND" -"3258102016","3258102271","BE","BEL","BELGIUM" -"3258102272","3258102527","CH","CHE","SWITZERLAND" -"3258102528","3258102783","TR","TUR","TURKEY" -"3258102784","3258103039","PL","POL","POLAND" -"3258103040","3258103295","SE","SWE","SWEDEN" -"3258103296","3258103551","DE","DEU","GERMANY" -"3258103808","3258104063","SE","SWE","SWEDEN" -"3258104064","3258104319","GB","GBR","UNITED KINGDOM" -"3258104320","3258104575","PL","POL","POLAND" -"3258104576","3258104831","DE","DEU","GERMANY" -"3258105088","3258105599","CZ","CZE","CZECH REPUBLIC" -"3258105600","3258105855","DE","DEU","GERMANY" -"3258105856","3258109951","CZ","CZE","CZECH REPUBLIC" -"3258109952","3258110207","DK","DNK","DENMARK" -"3258110208","3258111487","CZ","CZE","CZECH REPUBLIC" -"3258111488","3258111743","PL","POL","POLAND" -"3258111744","3258118399","CZ","CZE","CZECH REPUBLIC" -"3258118656","3258119679","CZ","CZE","CZECH REPUBLIC" -"3258120192","3258120703","CZ","CZE","CZECH REPUBLIC" -"3258120960","3258121215","CZ","CZE","CZECH REPUBLIC" -"3258121216","3258121471","PL","POL","POLAND" -"3258121472","3258121727","AT","AUT","AUSTRIA" -"3258121728","3258121983","UA","UKR","UKRAINE" -"3258121984","3258122239","RU","RUS","RUSSIAN FEDERATION" -"3258122240","3258128895","FR","FRA","FRANCE" -"3258128896","3258129151","MC","MCO","MONACO" -"3258129152","3258163967","FR","FRA","FRANCE" -"3258163968","3258164223","BJ","BEN","BENIN" -"3258164224","3258167551","FR","FRA","FRANCE" -"3258167552","3258167807","ES","ESP","SPAIN" -"3258167808","3258187775","FR","FRA","FRANCE" -"3258187776","3258231551","SE","SWE","SWEDEN" -"3258231552","3258232831","NO","NOR","NORWAY" -"3258232832","3258250495","SE","SWE","SWEDEN" -"3258250496","3258250751","NO","NOR","NORWAY" -"3258250752","3258251007","SE","SWE","SWEDEN" -"3258251008","3258251775","NO","NOR","NORWAY" -"3258251776","3258253311","SE","SWE","SWEDEN" -"3258253312","3258272767","NL","NLD","NETHERLANDS" -"3258272768","3258273791","FR","FRA","FRANCE" -"3258273792","3258297343","NL","NLD","NETHERLANDS" -"3258297344","3258297599","BE","BEL","BELGIUM" -"3258297600","3258298111","NL","NLD","NETHERLANDS" -"3258298112","3258298367","GB","GBR","UNITED KINGDOM" -"3258298368","3258318847","NL","NLD","NETHERLANDS" -"3258318848","3258320895","DE","DEU","GERMANY" -"3258320896","3258321919","GB","GBR","UNITED KINGDOM" -"3258321920","3258322943","RU","RUS","RUSSIAN FEDERATION" -"3258322944","3258326015","PL","POL","POLAND" -"3258326016","3258327039","SE","SWE","SWEDEN" -"3258327040","3258335231","TR","TUR","TURKEY" -"3258335232","3258336255","RU","RUS","RUSSIAN FEDERATION" -"3258336256","3258337279","NO","NOR","NORWAY" -"3258337280","3258338303","DE","DEU","GERMANY" -"3258338304","3258340351","UA","UKR","UKRAINE" -"3258340352","3258341375","PL","POL","POLAND" -"3258341376","3258342399","UA","UKR","UKRAINE" -"3258342400","3258343423","DE","DEU","GERMANY" -"3258343424","3258351615","NO","NOR","NORWAY" -"3258351616","3258352639","RO","ROM","ROMANIA" -"3258352640","3258353663","RU","RUS","RUSSIAN FEDERATION" -"3258353664","3258354687","NO","NOR","NORWAY" -"3258354688","3258355711","BG","BGR","BULGARIA" -"3258355712","3258356735","NL","NLD","NETHERLANDS" -"3258356736","3258357759","RU","RUS","RUSSIAN FEDERATION" -"3258357760","3258360831","UA","UKR","UKRAINE" -"3258360832","3258361855","SE","SWE","SWEDEN" -"3258361856","3258362879","IL","ISR","ISRAEL" -"3258362880","3258363903","IM","IMN","ISLE OF MAN" -"3258363904","3258364927","RU","RUS","RUSSIAN FEDERATION" -"3258364928","3258365951","CS","SCG","SERBIA AND MONTENEGRO" -"3258365952","3258366975","UA","UKR","UKRAINE" -"3258366976","3258367999","PL","POL","POLAND" -"3258368000","3258384383","KW","KWT","KUWAIT" -"3258384384","3258419199","DE","DEU","GERMANY" -"3258419456","3258427647","DE","DEU","GERMANY" -"3258427648","3258427903","RO","ROM","ROMANIA" -"3258427904","3258428159","DE","DEU","GERMANY" -"3258428416","3258431999","DE","DEU","GERMANY" -"3258432512","3258449919","DE","DEU","GERMANY" -"3258449920","3258502682","CH","CHE","SWITZERLAND" -"3258502683","3258502683","FR","FRA","FRANCE" -"3258502684","3258503935","CH","CHE","SWITZERLAND" -"3258503936","3258504191","PL","POL","POLAND" -"3258504192","3258504703","CH","CHE","SWITZERLAND" -"3258504704","3258504959","DE","DEU","GERMANY" -"3258504960","3258505215","IL","ISR","ISRAEL" -"3258505216","3258511871","CH","CHE","SWITZERLAND" -"3258512128","3258514687","CH","CHE","SWITZERLAND" -"3258514944","3258515455","CH","CHE","SWITZERLAND" -"3258515456","3258580991","FR","FRA","FRANCE" -"3258580992","3258601983","RU","RUS","RUSSIAN FEDERATION" -"3258601984","3258602495","UA","UKR","UKRAINE" -"3258602496","3258625791","RU","RUS","RUSSIAN FEDERATION" -"3258625792","3258626047","UA","UKR","UKRAINE" -"3258626048","3258646527","RU","RUS","RUSSIAN FEDERATION" -"3258646528","3258691583","DE","DEU","GERMANY" -"3258691584","3258691839","RU","RUS","RUSSIAN FEDERATION" -"3258691840","3258692351","AT","AUT","AUSTRIA" -"3258692352","3258692607","DE","DEU","GERMANY" -"3258692608","3258692863","FR","FRA","FRANCE" -"3258692864","3258693119","DE","DEU","GERMANY" -"3258693120","3258693375","SI","SVN","SLOVENIA" -"3258693376","3258693631","DE","DEU","GERMANY" -"3258693632","3258693887","RU","RUS","RUSSIAN FEDERATION" -"3258693888","3258694143","SI","SVN","SLOVENIA" -"3258694144","3258694399","RU","RUS","RUSSIAN FEDERATION" -"3258694400","3258694655","DE","DEU","GERMANY" -"3258694656","3258694911","GB","GBR","UNITED KINGDOM" -"3258694912","3258701567","DE","DEU","GERMANY" -"3258701824","3258710271","DE","DEU","GERMANY" -"3258710528","3258712063","DE","DEU","GERMANY" -"3258712064","3258728447","GB","GBR","UNITED KINGDOM" -"3258728448","3258729471","FR","FRA","FRANCE" -"3258729472","3258729727","DE","DEU","GERMANY" -"3258729728","3258729983","UA","UKR","UKRAINE" -"3258729984","3258730239","CH","CHE","SWITZERLAND" -"3258730240","3258730495","NL","NLD","NETHERLANDS" -"3258730496","3258730751","RO","ROM","ROMANIA" -"3258730752","3258731007","TR","TUR","TURKEY" -"3258731008","3258731263","SI","SVN","SLOVENIA" -"3258731264","3258731519","NO","NOR","NORWAY" -"3258731520","3258731775","ES","ESP","SPAIN" -"3258731776","3258732031","UA","UKR","UKRAINE" -"3258732032","3258732287","DE","DEU","GERMANY" -"3258732288","3258732543","PL","POL","POLAND" -"3258732544","3258732799","SE","SWE","SWEDEN" -"3258732800","3258733055","CH","CHE","SWITZERLAND" -"3258733056","3258733311","RO","ROM","ROMANIA" -"3258733312","3258746111","GB","GBR","UNITED KINGDOM" -"3258746368","3258746623","GB","GBR","UNITED KINGDOM" -"3258746880","3258748927","DE","DEU","GERMANY" -"3258748928","3258764287","GB","GBR","UNITED KINGDOM" -"3258764288","3258764543","DE","DEU","GERMANY" -"3258764544","3258764799","RU","RUS","RUSSIAN FEDERATION" -"3258764800","3258765055","BE","BEL","BELGIUM" -"3258765056","3258765311","NL","NLD","NETHERLANDS" -"3258765312","3258767615","GB","GBR","UNITED KINGDOM" -"3258767616","3258767871","CH","CHE","SWITZERLAND" -"3258767872","3258802175","GB","GBR","UNITED KINGDOM" -"3258802176","3258806271","LU","LUX","LUXEMBOURG" -"3258806272","3258818047","GB","GBR","UNITED KINGDOM" -"3258818048","3258818303","SE","SWE","SWEDEN" -"3258818304","3258843135","GB","GBR","UNITED KINGDOM" -"3258843136","3258843391","RU","RUS","RUSSIAN FEDERATION" -"3258843392","3258848767","GB","GBR","UNITED KINGDOM" -"3258848768","3258849023","RO","ROM","ROMANIA" -"3258849024","3258849279","DE","DEU","GERMANY" -"3258849280","3258859519","GB","GBR","UNITED KINGDOM" -"3258859776","3258883297","GB","GBR","UNITED KINGDOM" -"3258883328","3258902783","GB","GBR","UNITED KINGDOM" -"3258902784","3258903039","RU","RUS","RUSSIAN FEDERATION" -"3258903040","3258903295","FR","FRA","FRANCE" -"3258903296","3258903551","GB","GBR","UNITED KINGDOM" -"3258903552","3258903807","DE","DEU","GERMANY" -"3258903808","3258904063","RU","RUS","RUSSIAN FEDERATION" -"3258904064","3258941439","GB","GBR","UNITED KINGDOM" -"3258941440","3258943487","PL","POL","POLAND" -"3258943488","3258944511","BG","BGR","BULGARIA" -"3258944512","3258946559","RU","RUS","RUSSIAN FEDERATION" -"3258946560","3258947583","CH","CHE","SWITZERLAND" -"3258947584","3258948607","RO","ROM","ROMANIA" -"3258948608","3258949631","RU","RUS","RUSSIAN FEDERATION" -"3258949632","3258972159","GR","GRC","GREECE" -"3258972160","3258974207","NO","NOR","NORWAY" -"3258974208","3259023103","DE","DEU","GERMANY" -"3259023104","3259023119","IT","ITA","ITALY" -"3259023120","3259032551","DE","DEU","GERMANY" -"3259032552","3259032559","IT","ITA","ITALY" -"3259032560","3259032831","DE","DEU","GERMANY" -"3259032832","3259032879","GB","GBR","UNITED KINGDOM" -"3259032880","3259034319","DE","DEU","GERMANY" -"3259034320","3259034327","GB","GBR","UNITED KINGDOM" -"3259034328","3259035447","DE","DEU","GERMANY" -"3259035448","3259035455","IT","ITA","ITALY" -"3259035456","3259039743","DE","DEU","GERMANY" -"3259039744","3259062015","PT","PRT","PORTUGAL" -"3259062016","3259062271","GW","GNB","GUINEA-BISSAU" -"3259062272","3259105279","PT","PRT","PORTUGAL" -"3259105280","3259170815","GB","GBR","UNITED KINGDOM" -"3259170816","3259219967","RU","RUS","RUSSIAN FEDERATION" -"3259219968","3259220479","BY","BLR","BELARUS" -"3259220480","3259223295","RU","RUS","RUSSIAN FEDERATION" -"3259223296","3259223807","TM","TKM","TURKMENISTAN" -"3259223808","3259224831","KZ","KAZ","KAZAKHSTAN" -"3259224832","3259225343","TJ","TJK","TAJIKISTAN" -"3259225344","3259226111","AZ","AZE","AZERBAIJAN" -"3259226112","3259226623","UZ","UZB","UZBEKISTAN" -"3259226624","3259227135","AM","ARM","ARMENIA" -"3259227136","3259227391","RU","RUS","RUSSIAN FEDERATION" -"3259227392","3259227903","KZ","KAZ","KAZAKHSTAN" -"3259227904","3259228159","DE","DEU","GERMANY" -"3259228160","3259236351","RU","RUS","RUSSIAN FEDERATION" -"3259236352","3259236863","SE","SWE","SWEDEN" -"3259236864","3259237119","CH","CHE","SWITZERLAND" -"3259237120","3259269375","SE","SWE","SWEDEN" -"3259269376","3259269631","FR","FRA","FRANCE" -"3259269632","3259292415","SE","SWE","SWEDEN" -"3259292416","3259292671","IT","ITA","ITALY" -"3259292672","3259301887","SE","SWE","SWEDEN" -"3259301888","3259302143","DE","DEU","GERMANY" -"3259302144","3259302399","AE","ARE","UNITED ARAB EMIRATES" -"3259302400","3259303423","CH","CHE","SWITZERLAND" -"3259303424","3259305983","SE","SWE","SWEDEN" -"3259305984","3259310079","NL","NLD","NETHERLANDS" -"3259310080","3259310335","FR","FRA","FRANCE" -"3259310336","3259311103","DK","DNK","DENMARK" -"3259311104","3259311615","DE","DEU","GERMANY" -"3259312640","3259313151","GB","GBR","UNITED KINGDOM" -"3259317248","3259318271","CH","CHE","SWITZERLAND" -"3259318272","3259318311","GB","GBR","UNITED KINGDOM" -"3259318312","3259318319","BE","BEL","BELGIUM" -"3259318320","3259318343","GB","GBR","UNITED KINGDOM" -"3259318344","3259318351","FR","FRA","FRANCE" -"3259318352","3259318367","GB","GBR","UNITED KINGDOM" -"3259318368","3259318399","BE","BEL","BELGIUM" -"3259318400","3259318503","GB","GBR","UNITED KINGDOM" -"3259318504","3259318511","BE","BEL","BELGIUM" -"3259318512","3259318527","GB","GBR","UNITED KINGDOM" -"3259318528","3259318591","CH","CHE","SWITZERLAND" -"3259318592","3259318599","GB","GBR","UNITED KINGDOM" -"3259318600","3259318607","AT","AUT","AUSTRIA" -"3259318608","3259318663","GB","GBR","UNITED KINGDOM" -"3259318664","3259318671","DK","DNK","DENMARK" -"3259318672","3259318679","GB","GBR","UNITED KINGDOM" -"3259318680","3259318687","IT","ITA","ITALY" -"3259318688","3259318727","GB","GBR","UNITED KINGDOM" -"3259318728","3259318735","FR","FRA","FRANCE" -"3259318736","3259319055","GB","GBR","UNITED KINGDOM" -"3259319056","3259319071","IT","ITA","ITALY" -"3259319072","3259319087","GB","GBR","UNITED KINGDOM" -"3259319088","3259319095","SE","SWE","SWEDEN" -"3259319096","3259319103","DK","DNK","DENMARK" -"3259319104","3259319111","FR","FRA","FRANCE" -"3259319112","3259319199","GB","GBR","UNITED KINGDOM" -"3259319200","3259319215","DE","DEU","GERMANY" -"3259319216","3259319255","GB","GBR","UNITED KINGDOM" -"3259319256","3259319263","DK","DNK","DENMARK" -"3259319264","3259319287","GB","GBR","UNITED KINGDOM" -"3259319288","3259319295","BE","BEL","BELGIUM" -"3259319296","3259319303","GB","GBR","UNITED KINGDOM" -"3259319304","3259319311","BE","BEL","BELGIUM" -"3259319312","3259319319","DK","DNK","DENMARK" -"3259319320","3259319367","GB","GBR","UNITED KINGDOM" -"3259319368","3259319375","BE","BEL","BELGIUM" -"3259319376","3259319407","GB","GBR","UNITED KINGDOM" -"3259319408","3259319423","LU","LUX","LUXEMBOURG" -"3259319424","3259319439","GB","GBR","UNITED KINGDOM" -"3259319440","3259319447","CH","CHE","SWITZERLAND" -"3259319448","3259319463","GB","GBR","UNITED KINGDOM" -"3259319464","3259319471","DK","DNK","DENMARK" -"3259319472","3259319587","GB","GBR","UNITED KINGDOM" -"3259319588","3259319591","NL","NLD","NETHERLANDS" -"3259319592","3259319663","GB","GBR","UNITED KINGDOM" -"3259319664","3259319667","FR","FRA","FRANCE" -"3259319668","3259319823","GB","GBR","UNITED KINGDOM" -"3259319824","3259319831","FR","FRA","FRANCE" -"3259319832","3259319879","GB","GBR","UNITED KINGDOM" -"3259319880","3259319887","BY","BLR","BELARUS" -"3259319888","3259319987","GB","GBR","UNITED KINGDOM" -"3259319988","3259319991","NL","NLD","NETHERLANDS" -"3259319992","3259320011","GB","GBR","UNITED KINGDOM" -"3259320012","3259320015","BE","BEL","BELGIUM" -"3259320016","3259320055","GB","GBR","UNITED KINGDOM" -"3259320056","3259320063","AT","AUT","AUSTRIA" -"3259320064","3259320575","GB","GBR","UNITED KINGDOM" -"3259320576","3259320583","FR","FRA","FRANCE" -"3259320584","3259320743","GB","GBR","UNITED KINGDOM" -"3259320744","3259320751","NL","NLD","NETHERLANDS" -"3259320752","3259334655","GB","GBR","UNITED KINGDOM" -"3259334656","3259338751","DE","DEU","GERMANY" -"3259338752","3259339519","GB","GBR","UNITED KINGDOM" -"3259339520","3259339775","JP","JPN","JAPAN" -"3259339776","3259340031","US","USA","UNITED STATES" -"3259340032","3259342847","GB","GBR","UNITED KINGDOM" -"3259342848","3259344895","CH","CHE","SWITZERLAND" -"3259344896","3259345151","GB","GBR","UNITED KINGDOM" -"3259345152","3259345407","IE","IRL","IRELAND" -"3259345408","3259345663","CH","CHE","SWITZERLAND" -"3259346944","3259347199","SE","SWE","SWEDEN" -"3259347200","3259347455","DE","DEU","GERMANY" -"3259347456","3259347967","CH","CHE","SWITZERLAND" -"3259347968","3259348223","SE","SWE","SWEDEN" -"3259348224","3259348991","CH","CHE","SWITZERLAND" -"3259348992","3259351039","NL","NLD","NETHERLANDS" -"3259351040","3259351551","IT","ITA","ITALY" -"3259351552","3259352063","FR","FRA","FRANCE" -"3259352064","3259352575","CH","CHE","SWITZERLAND" -"3259352576","3259353087","IE","IRL","IRELAND" -"3259353088","3259353855","NO","NOR","NORWAY" -"3259353856","3259354111","GB","GBR","UNITED KINGDOM" -"3259354112","3259354367","NL","NLD","NETHERLANDS" -"3259354368","3259354623","DE","DEU","GERMANY" -"3259354624","3259354879","TR","TUR","TURKEY" -"3259354880","3259355135","PL","POL","POLAND" -"3259355136","3259359231","NO","NOR","NORWAY" -"3259359232","3259367423","ES","ESP","SPAIN" -"3259367424","3259432959","GB","GBR","UNITED KINGDOM" -"3259432960","3259435263","SE","SWE","SWEDEN" -"3259435264","3259435519","IT","ITA","ITALY" -"3259435520","3259457279","SE","SWE","SWEDEN" -"3259457280","3259457535","IT","ITA","ITALY" -"3259457536","3259460351","SE","SWE","SWEDEN" -"3259460352","3259460607","DE","DEU","GERMANY" -"3259460608","3259465215","SE","SWE","SWEDEN" -"3259465216","3259465471","KH","KHM","CAMBODIA" -"3259465472","3259492351","SE","SWE","SWEDEN" -"3259492352","3259493375","GB","GBR","UNITED KINGDOM" -"3259493376","3259498495","SE","SWE","SWEDEN" -"3259498496","3259506943","GB","GBR","UNITED KINGDOM" -"3259506944","3259507199","ES","ESP","SPAIN" -"3259507200","3259507711","GB","GBR","UNITED KINGDOM" -"3259507712","3259507967","CH","CHE","SWITZERLAND" -"3259507968","3259508223","GB","GBR","UNITED KINGDOM" -"3259508224","3259508479","ES","ESP","SPAIN" -"3259508480","3259515647","GB","GBR","UNITED KINGDOM" -"3259515648","3259515903","ES","ESP","SPAIN" -"3259515904","3259518207","GB","GBR","UNITED KINGDOM" -"3259518208","3259518463","ES","ESP","SPAIN" -"3259518464","3259518719","GB","GBR","UNITED KINGDOM" -"3259518720","3259518975","ES","ESP","SPAIN" -"3259518976","3259521023","GB","GBR","UNITED KINGDOM" -"3259521024","3259521535","NL","NLD","NETHERLANDS" -"3259521536","3259541503","GB","GBR","UNITED KINGDOM" -"3259541504","3259543551","NL","NLD","NETHERLANDS" -"3259543552","3259545599","GB","GBR","UNITED KINGDOM" -"3259545600","3259546111","LB","LBN","LEBANON" -"3259546112","3259555839","GB","GBR","UNITED KINGDOM" -"3259555840","3259556095","ES","ESP","SPAIN" -"3259556096","3259562495","GB","GBR","UNITED KINGDOM" -"3259562496","3259562751","ES","ESP","SPAIN" -"3259562752","3259576351","GB","GBR","UNITED KINGDOM" -"3259576352","3259576359","ES","ESP","SPAIN" -"3259576360","3259576799","GB","GBR","UNITED KINGDOM" -"3259576800","3259576831","ES","ESP","SPAIN" -"3259576832","3259577247","GB","GBR","UNITED KINGDOM" -"3259577248","3259577263","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3259577264","3259581439","GB","GBR","UNITED KINGDOM" -"3259581440","3259581951","ES","ESP","SPAIN" -"3259581952","3259587583","GB","GBR","UNITED KINGDOM" -"3259587584","3259588095","ES","ESP","SPAIN" -"3259588096","3259588607","IT","ITA","ITALY" -"3259588608","3259596799","GB","GBR","UNITED KINGDOM" -"3259596800","3259597055","ES","ESP","SPAIN" -"3259597056","3259599359","GB","GBR","UNITED KINGDOM" -"3259599360","3259599615","FR","FRA","FRANCE" -"3259599616","3259601151","GB","GBR","UNITED KINGDOM" -"3259601152","3259601407","IE","IRL","IRELAND" -"3259601408","3259614463","GB","GBR","UNITED KINGDOM" -"3259614464","3259614719","DE","DEU","GERMANY" -"3259614720","3259614975","GB","GBR","UNITED KINGDOM" -"3259614976","3259615231","DE","DEU","GERMANY" -"3259615232","3259615743","GB","GBR","UNITED KINGDOM" -"3259615744","3259615999","FR","FRA","FRANCE" -"3259616000","3259620095","GB","GBR","UNITED KINGDOM" -"3259620096","3259620351","DE","DEU","GERMANY" -"3259620352","3259628031","GB","GBR","UNITED KINGDOM" -"3259628032","3259628543","CH","CHE","SWITZERLAND" -"3259628544","3259630335","GB","GBR","UNITED KINGDOM" -"3259630336","3259630591","ES","ESP","SPAIN" -"3259630592","3259633407","GB","GBR","UNITED KINGDOM" -"3259633408","3259633663","DE","DEU","GERMANY" -"3259633664","3259635711","GB","GBR","UNITED KINGDOM" -"3259635712","3259635967","ES","ESP","SPAIN" -"3259635968","3259637759","GB","GBR","UNITED KINGDOM" -"3259637760","3259638015","ES","ESP","SPAIN" -"3259638016","3259638783","GB","GBR","UNITED KINGDOM" -"3259638784","3259639039","BE","BEL","BELGIUM" -"3259639040","3259639551","GB","GBR","UNITED KINGDOM" -"3259639552","3259639807","DE","DEU","GERMANY" -"3259639808","3259640319","GB","GBR","UNITED KINGDOM" -"3259640320","3259640575","ES","ESP","SPAIN" -"3259640576","3259640831","GB","GBR","UNITED KINGDOM" -"3259640832","3259641343","ES","ESP","SPAIN" -"3259641344","3259642367","GB","GBR","UNITED KINGDOM" -"3259642368","3259642623","BE","BEL","BELGIUM" -"3259642624","3259650047","GB","GBR","UNITED KINGDOM" -"3259650048","3259652095","NL","NLD","NETHERLANDS" -"3259652096","3259656959","GB","GBR","UNITED KINGDOM" -"3259656960","3259657215","BE","BEL","BELGIUM" -"3259657216","3259657727","GB","GBR","UNITED KINGDOM" -"3259657728","3259657887","BE","BEL","BELGIUM" -"3259657888","3259657919","GB","GBR","UNITED KINGDOM" -"3259657920","3259657983","BE","BEL","BELGIUM" -"3259657984","3259660287","GB","GBR","UNITED KINGDOM" -"3259660288","3259660295","CH","CHE","SWITZERLAND" -"3259660296","3259660327","GB","GBR","UNITED KINGDOM" -"3259660328","3259660335","CH","CHE","SWITZERLAND" -"3259660336","3259660543","GB","GBR","UNITED KINGDOM" -"3259660544","3259660799","CH","CHE","SWITZERLAND" -"3259660800","3259695871","GB","GBR","UNITED KINGDOM" -"3259695872","3259695903","ES","ESP","SPAIN" -"3259695904","3259696639","GB","GBR","UNITED KINGDOM" -"3259696640","3259696895","ES","ESP","SPAIN" -"3259696896","3259701759","GB","GBR","UNITED KINGDOM" -"3259701760","3259702303","DE","DEU","GERMANY" -"3259702304","3259751423","GB","GBR","UNITED KINGDOM" -"3259751424","3259751431","FR","FRA","FRANCE" -"3259751432","3259751551","GB","GBR","UNITED KINGDOM" -"3259751552","3259751615","FR","FRA","FRANCE" -"3259751616","3259752191","GB","GBR","UNITED KINGDOM" -"3259752192","3259752447","FR","FRA","FRANCE" -"3259752448","3259760639","GB","GBR","UNITED KINGDOM" -"3259760640","3259814399","DE","DEU","GERMANY" -"3259814400","3259814655","AT","AUT","AUSTRIA" -"3259814656","3259821823","DE","DEU","GERMANY" -"3259821824","3259822079","AT","AUT","AUSTRIA" -"3259822080","3259823103","DE","DEU","GERMANY" -"3259824128","3259851823","DE","DEU","GERMANY" -"3259851824","3259851831","GB","GBR","UNITED KINGDOM" -"3259851832","3259891711","DE","DEU","GERMANY" -"3259891712","3259957247","BE","BEL","BELGIUM" -"3259957248","3259958271","DE","DEU","GERMANY" -"3259958272","3259959295","RU","RUS","RUSSIAN FEDERATION" -"3259959296","3259960319","UA","UKR","UKRAINE" -"3259960320","3259961343","BG","BGR","BULGARIA" -"3259961344","3259962367","FI","FIN","FINLAND" -"3259962368","3259963391","UA","UKR","UKRAINE" -"3259963392","3259964415","PL","POL","POLAND" -"3259964416","3259965439","GB","GBR","UNITED KINGDOM" -"3259965440","3259966463","RU","RUS","RUSSIAN FEDERATION" -"3259966464","3259967487","DE","DEU","GERMANY" -"3259967488","3259968511","CS","SCG","SERBIA AND MONTENEGRO" -"3259968512","3259969535","RU","RUS","RUSSIAN FEDERATION" -"3259969536","3259970559","FR","FRA","FRANCE" -"3259970560","3259971583","CZ","CZE","CZECH REPUBLIC" -"3259971584","3259972607","IT","ITA","ITALY" -"3259972608","3259973631","UA","UKR","UKRAINE" -"3259973632","3259981823","PT","PRT","PORTUGAL" -"3259990016","3260006399","FR","FRA","FRANCE" -"3260006400","3260014591","IT","ITA","ITALY" -"3260014592","3260018687","NL","NLD","NETHERLANDS" -"3260018688","3260019711","GB","GBR","UNITED KINGDOM" -"3260019712","3260021247","DE","DEU","GERMANY" -"3260021248","3260021759","RU","RUS","RUSSIAN FEDERATION" -"3260021760","3260022271","GR","GRC","GREECE" -"3260022272","3260022783","NL","NLD","NETHERLANDS" -"3260022784","3260237775","GB","GBR","UNITED KINGDOM" -"3260237776","3260237791","GR","GRC","GREECE" -"3260237792","3260284927","GB","GBR","UNITED KINGDOM" -"3260284928","3260288767","RU","RUS","RUSSIAN FEDERATION" -"3260288768","3260289023","KZ","KAZ","KAZAKHSTAN" -"3260289024","3260303935","RU","RUS","RUSSIAN FEDERATION" -"3260303936","3260304127","BY","BLR","BELARUS" -"3260304128","3260322047","RU","RUS","RUSSIAN FEDERATION" -"3260322048","3260322303","BY","BLR","BELARUS" -"3260322304","3260353535","RU","RUS","RUSSIAN FEDERATION" -"3260353536","3260353791","AZ","AZE","AZERBAIJAN" -"3260353792","3260354559","RU","RUS","RUSSIAN FEDERATION" -"3260354560","3260355839","KZ","KAZ","KAZAKHSTAN" -"3260355840","3260415487","RU","RUS","RUSSIAN FEDERATION" -"3260415488","3260415999","BY","BLR","BELARUS" -"3260416000","3260481535","FI","FIN","FINLAND" -"3260481536","3260547071","RU","RUS","RUSSIAN FEDERATION" -"3260547072","3260547327","DE","DEU","GERMANY" -"3260547328","3260547583","UA","UKR","UKRAINE" -"3260547584","3260547839","NL","NLD","NETHERLANDS" -"3260547840","3260548095","PL","POL","POLAND" -"3260548096","3260548351","IE","IRL","IRELAND" -"3260548352","3260548607","DK","DNK","DENMARK" -"3260548608","3260548863","RO","ROM","ROMANIA" -"3260548864","3260549119","CH","CHE","SWITZERLAND" -"3260549120","3260549375","AT","AUT","AUSTRIA" -"3260549376","3260549631","CH","CHE","SWITZERLAND" -"3260549632","3260549887","DE","DEU","GERMANY" -"3260549888","3260550143","RU","RUS","RUSSIAN FEDERATION" -"3260550144","3260550399","PL","POL","POLAND" -"3260550400","3260550655","DE","DEU","GERMANY" -"3260550656","3260550911","RU","RUS","RUSSIAN FEDERATION" -"3260550912","3260551167","ES","ESP","SPAIN" -"3260551168","3260553983","DE","DEU","GERMANY" -"3260553984","3260554239","GB","GBR","UNITED KINGDOM" -"3260554240","3260555263","SE","SWE","SWEDEN" -"3260555264","3260559615","HU","HUN","HUNGARY" -"3260559616","3260559647","RO","ROM","ROMANIA" -"3260559648","3260559711","HU","HUN","HUNGARY" -"3260559712","3260559719","RO","ROM","ROMANIA" -"3260559720","3260563455","HU","HUN","HUNGARY" -"3260563456","3260571647","GB","GBR","UNITED KINGDOM" -"3260571648","3260579839","BE","BEL","BELGIUM" -"3260579840","3260580351","PL","POL","POLAND" -"3260580352","3260580863","HU","HUN","HUNGARY" -"3260580864","3260581375","GB","GBR","UNITED KINGDOM" -"3260581376","3260581887","RO","ROM","ROMANIA" -"3260581888","3260582399","IL","ISR","ISRAEL" -"3260582400","3260583423","RU","RUS","RUSSIAN FEDERATION" -"3260583424","3260583935","PT","PRT","PORTUGAL" -"3260583936","3260584447","NO","NOR","NORWAY" -"3260584448","3260585471","RO","ROM","ROMANIA" -"3260585472","3260586495","UA","UKR","UKRAINE" -"3260586496","3260587007","PL","POL","POLAND" -"3260587008","3260587519","FR","FRA","FRANCE" -"3260587520","3260588031","PL","POL","POLAND" -"3260588032","3260596223","DE","DEU","GERMANY" -"3260596224","3260596735","CH","CHE","SWITZERLAND" -"3260596736","3260597247","RO","ROM","ROMANIA" -"3260597248","3260597759","CH","CHE","SWITZERLAND" -"3260597760","3260598271","DE","DEU","GERMANY" -"3260598272","3260598783","RU","RUS","RUSSIAN FEDERATION" -"3260598784","3260599295","RO","ROM","ROMANIA" -"3260599296","3260599807","RU","RUS","RUSSIAN FEDERATION" -"3260599808","3260600319","UA","UKR","UKRAINE" -"3260600320","3260601343","RU","RUS","RUSSIAN FEDERATION" -"3260601344","3260601855","CH","CHE","SWITZERLAND" -"3260601856","3260602367","PL","POL","POLAND" -"3260602368","3260602879","AT","AUT","AUSTRIA" -"3260602880","3260603903","UA","UKR","UKRAINE" -"3260603904","3260604415","FR","FRA","FRANCE" -"3260604416","3260604927","PL","POL","POLAND" -"3260604928","3260605439","RO","ROM","ROMANIA" -"3260605440","3260605951","BG","BGR","BULGARIA" -"3260605952","3260606463","NL","NLD","NETHERLANDS" -"3260606464","3260607487","SE","SWE","SWEDEN" -"3260607488","3260607999","NL","NLD","NETHERLANDS" -"3260608000","3260608511","RO","ROM","ROMANIA" -"3260608512","3260609023","IE","IRL","IRELAND" -"3260609024","3260609535","GB","GBR","UNITED KINGDOM" -"3260609536","3260610047","PL","POL","POLAND" -"3260610048","3260610559","FR","FRA","FRANCE" -"3260610560","3260611071","RO","ROM","ROMANIA" -"3260611072","3260611583","BG","BGR","BULGARIA" -"3260611584","3260612095","RU","RUS","RUSSIAN FEDERATION" -"3260612096","3260612607","SE","SWE","SWEDEN" -"3260612608","3260613631","FI","FIN","FINLAND" -"3260613632","3260613887","DE","DEU","GERMANY" -"3260613888","3260614143","DK","DNK","DENMARK" -"3260614144","3260626175","FI","FIN","FINLAND" -"3260626176","3260626431","ES","ESP","SPAIN" -"3260626432","3260668415","FI","FIN","FINLAND" -"3260668416","3260668671","ES","ESP","SPAIN" -"3260668672","3260668927","GB","GBR","UNITED KINGDOM" -"3260668928","3260669183","FI","FIN","FINLAND" -"3260669184","3260669695","DE","DEU","GERMANY" -"3260669696","3260669951","IT","ITA","ITALY" -"3260669952","3260678143","FI","FIN","FINLAND" -"3260678144","3260743679","IL","ISR","ISRAEL" -"3260743680","3260800255","IT","ITA","ITALY" -"3260800256","3260800271","BE","BEL","BELGIUM" -"3260800272","3260809215","IT","ITA","ITALY" -"3260809216","3260874751","PL","POL","POLAND" -"3260874752","3260875775","DK","DNK","DENMARK" -"3260875776","3260876031","GB","GBR","UNITED KINGDOM" -"3260876032","3260891391","DK","DNK","DENMARK" -"3260891392","3260891647","IT","ITA","ITALY" -"3260891648","3260891903","NL","NLD","NETHERLANDS" -"3260891904","3260892159","ES","ESP","SPAIN" -"3260892160","3260892415","GB","GBR","UNITED KINGDOM" -"3260892416","3260892671","FI","FIN","FINLAND" -"3260892672","3260892927","PT","PRT","PORTUGAL" -"3260892928","3260893183","SE","SWE","SWEDEN" -"3260893184","3260893439","AT","AUT","AUSTRIA" -"3260893440","3260894207","SE","SWE","SWEDEN" -"3260894208","3260895231","AT","AUT","AUSTRIA" -"3260895232","3260898303","SE","SWE","SWEDEN" -"3260898304","3260899327","ES","ESP","SPAIN" -"3260899328","3260900095","CH","CHE","SWITZERLAND" -"3260900608","3260901119","NL","NLD","NETHERLANDS" -"3260901120","3260903423","DE","DEU","GERMANY" -"3260903424","3260906239","CH","CHE","SWITZERLAND" -"3260906240","3260906367","DE","DEU","GERMANY" -"3260906496","3260907519","FR","FRA","FRANCE" -"3260907520","3260915711","GB","GBR","UNITED KINGDOM" -"3260915712","3260923903","UA","UKR","UKRAINE" -"3260923904","3261071359","DE","DEU","GERMANY" -"3261071360","3261136895","AT","AUT","AUSTRIA" -"3261136896","3261150143","DE","DEU","GERMANY" -"3261150144","3261150207","US","USA","UNITED STATES" -"3261150208","3261173987","DE","DEU","GERMANY" -"3261173988","3261173991","AT","AUT","AUSTRIA" -"3261173992","3261174007","DE","DEU","GERMANY" -"3261174008","3261174015","AT","AUT","AUSTRIA" -"3261174016","3261202431","DE","DEU","GERMANY" -"3261202432","3261236863","FR","FRA","FRANCE" -"3261236864","3261236991","GB","GBR","UNITED KINGDOM" -"3261236992","3261267967","FR","FRA","FRANCE" -"3261267968","3261297663","DE","DEU","GERMANY" -"3261297664","3261297919","RU","RUS","RUSSIAN FEDERATION" -"3261297920","3261298175","PL","POL","POLAND" -"3261298176","3261333503","DE","DEU","GERMANY" -"3261333504","3261399039","FI","FIN","FINLAND" -"3261399040","3261472767","GB","GBR","UNITED KINGDOM" -"3261472768","3261503487","RO","ROM","ROMANIA" -"3261503488","3261503935","MD","MDA","REPUBLIC OF MOLDOVA" -"3261503936","3261530111","RO","ROM","ROMANIA" -"3261530112","3261570303","SE","SWE","SWEDEN" -"3261570304","3261570559","IT","ITA","ITALY" -"3261570560","3261595647","SE","SWE","SWEDEN" -"3261595648","3261599743","NL","NLD","NETHERLANDS" -"3261600768","3261661183","NL","NLD","NETHERLANDS" -"3261661184","3261669375","RO","ROM","ROMANIA" -"3261669376","3261673471","MT","MLT","MALTA" -"3261673472","3261675519","IT","ITA","ITALY" -"3261675520","3261675775","LV","LVA","LATVIA" -"3261675776","3261676031","IT","ITA","ITALY" -"3261676032","3261676287","GB","GBR","UNITED KINGDOM" -"3261676288","3261676543","IT","ITA","ITALY" -"3261676544","3261676799","DK","DNK","DENMARK" -"3261676800","3261677055","IT","ITA","ITALY" -"3261677056","3261685759","GB","GBR","UNITED KINGDOM" -"3261685760","3261687807","DE","DEU","GERMANY" -"3261687808","3261689855","RO","ROM","ROMANIA" -"3261689856","3261691903","GB","GBR","UNITED KINGDOM" -"3261693952","3261694463","NL","NLD","NETHERLANDS" -"3261694464","3261694975","RU","RUS","RUSSIAN FEDERATION" -"3261694976","3261695487","PL","POL","POLAND" -"3261695488","3261695999","GB","GBR","UNITED KINGDOM" -"3261696000","3261696511","UA","UKR","UKRAINE" -"3261696512","3261697023","NL","NLD","NETHERLANDS" -"3261697024","3261698047","RO","ROM","ROMANIA" -"3261698048","3261698559","UA","UKR","UKRAINE" -"3261698560","3261699071","DE","DEU","GERMANY" -"3261699072","3261699583","SA","SAU","SAUDI ARABIA" -"3261699584","3261700095","NL","NLD","NETHERLANDS" -"3261700096","3261700607","FR","FRA","FRANCE" -"3261700608","3261701119","GB","GBR","UNITED KINGDOM" -"3261701120","3261701631","RU","RUS","RUSSIAN FEDERATION" -"3261701632","3261702143","CH","CHE","SWITZERLAND" -"3261702144","3261710335","GB","GBR","UNITED KINGDOM" -"3261710336","3261718527","RU","RUS","RUSSIAN FEDERATION" -"3261718528","3261726719","IS","ISL","ICELAND" -"3261726720","3261734911","ES","ESP","SPAIN" -"3261734912","3261743103","GB","GBR","UNITED KINGDOM" -"3261743104","3261751295","MT","MLT","MALTA" -"3261751296","3261759487","EE","EST","ESTONIA" -"3261759488","3261767679","IE","IRL","IRELAND" -"3261767680","3261768703","RS","SRB","SERBIA" -"3261768704","3261768959","CS","SCG","SERBIA AND MONTENEGRO" -"3261768960","3261769471","RS","SRB","SERBIA" -"3261769472","3261770239","CS","SCG","SERBIA AND MONTENEGRO" -"3261770240","3261771263","RS","SRB","SERBIA" -"3261771264","3261771775","CS","SCG","SERBIA AND MONTENEGRO" -"3261771776","3261773055","RS","SRB","SERBIA" -"3261773056","3261773311","CS","SCG","SERBIA AND MONTENEGRO" -"3261773312","3261773375","RS","SRB","SERBIA" -"3261773376","3261773567","CS","SCG","SERBIA AND MONTENEGRO" -"3261773568","3261773831","RS","SRB","SERBIA" -"3261773832","3261773855","CS","SCG","SERBIA AND MONTENEGRO" -"3261773856","3261773856","RS","SRB","SERBIA" -"3261773857","3261773863","CS","SCG","SERBIA AND MONTENEGRO" -"3261773864","3261773888","RS","SRB","SERBIA" -"3261773889","3261773951","CS","SCG","SERBIA AND MONTENEGRO" -"3261773952","3261774015","RS","SRB","SERBIA" -"3261774016","3261774079","CS","SCG","SERBIA AND MONTENEGRO" -"3261774080","3261774143","CS","SCG","SERBIA AND MONTENEGRO" -"3261774144","3261774175","CS","SCG","SERBIA AND MONTENEGRO" -"3261774176","3261774191","CS","SCG","SERBIA AND MONTENEGRO" -"3261774192","3261774207","RS","SRB","SERBIA" -"3261774208","3261774223","CS","SCG","SERBIA AND MONTENEGRO" -"3261774224","3261774239","CS","SCG","SERBIA AND MONTENEGRO" -"3261774240","3261774271","CS","SCG","SERBIA AND MONTENEGRO" -"3261774272","3261774287","RS","SRB","SERBIA" -"3261774288","3261774351","CS","SCG","SERBIA AND MONTENEGRO" -"3261774352","3261774399","RS","SRB","SERBIA" -"3261774400","3261774847","CS","SCG","SERBIA AND MONTENEGRO" -"3261774848","3261775871","RS","SRB","SERBIA" -"3261775872","3261776383","PL","POL","POLAND" -"3261776384","3261777407","RU","RUS","RUSSIAN FEDERATION" -"3261777408","3261777919","KZ","KAZ","KAZAKHSTAN" -"3261777920","3261778431","PL","POL","POLAND" -"3261778432","3261778943","RU","RUS","RUSSIAN FEDERATION" -"3261778944","3261779455","RO","ROM","ROMANIA" -"3261779456","3261779967","DE","DEU","GERMANY" -"3261779968","3261780479","UA","UKR","UKRAINE" -"3261780480","3261780991","PL","POL","POLAND" -"3261780992","3261781503","RO","ROM","ROMANIA" -"3261781504","3261782015","PL","POL","POLAND" -"3261782016","3261783039","UA","UKR","UKRAINE" -"3261783040","3261784063","GB","GBR","UNITED KINGDOM" -"3261784064","3261796351","AT","AUT","AUSTRIA" -"3261796352","3261796607","GB","GBR","UNITED KINGDOM" -"3261796608","3261796863","RU","RUS","RUSSIAN FEDERATION" -"3261796864","3261797119","PL","POL","POLAND" -"3261797120","3261797375","KR","KOR","REPUBLIC OF KOREA" -"3261797376","3261797631","AT","AUT","AUSTRIA" -"3261797632","3261797887","RU","RUS","RUSSIAN FEDERATION" -"3261797888","3261798143","TR","TUR","TURKEY" -"3261798144","3261798399","RU","RUS","RUSSIAN FEDERATION" -"3261798400","3261812735","AT","AUT","AUSTRIA" -"3261812736","3261812991","RU","RUS","RUSSIAN FEDERATION" -"3261812992","3261816575","AT","AUT","AUSTRIA" -"3261816576","3261816831","DE","DEU","GERMANY" -"3261816832","3261820927","AT","AUT","AUSTRIA" -"3261820928","3261821183","RO","ROM","ROMANIA" -"3261821184","3261821439","AT","AUT","AUSTRIA" -"3261821440","3261821695","NL","NLD","NETHERLANDS" -"3261821696","3261821951","SI","SVN","SLOVENIA" -"3261821952","3261822207","RU","RUS","RUSSIAN FEDERATION" -"3261822208","3261822463","UA","UKR","UKRAINE" -"3261822464","3261822719","GB","GBR","UNITED KINGDOM" -"3261822720","3261822975","SE","SWE","SWEDEN" -"3261822976","3261823231","PL","POL","POLAND" -"3261823232","3261823743","NL","NLD","NETHERLANDS" -"3261823744","3261823999","BE","BEL","BELGIUM" -"3261824000","3261824255","PL","POL","POLAND" -"3261824256","3261824511","RU","RUS","RUSSIAN FEDERATION" -"3261824512","3261824767","FR","FRA","FRANCE" -"3261824768","3261825023","PT","PRT","PORTUGAL" -"3261825024","3261857791","AT","AUT","AUSTRIA" -"3261857792","3261867951","CZ","CZE","CZECH REPUBLIC" -"3261867952","3261867955","CR","CRI","COSTA RICA" -"3261867956","3261923327","CZ","CZE","CZECH REPUBLIC" -"3261923328","3261988863","NL","NLD","NETHERLANDS" -"3261988864","3261989119","SE","SWE","SWEDEN" -"3261989120","3261990399","FI","FIN","FINLAND" -"3261990656","3261993471","FI","FIN","FINLAND" -"3261993472","3261993727","RU","RUS","RUSSIAN FEDERATION" -"3261993728","3261995263","FI","FIN","FINLAND" -"3261995264","3261995519","DE","DEU","GERMANY" -"3261995520","3261995775","PL","POL","POLAND" -"3261995776","3261996031","FI","FIN","FINLAND" -"3261996032","3261996287","NL","NLD","NETHERLANDS" -"3261996288","3262005247","FI","FIN","FINLAND" -"3262005760","3262006015","RU","RUS","RUSSIAN FEDERATION" -"3262006016","3262006271","NL","NLD","NETHERLANDS" -"3262006272","3262006527","RO","ROM","ROMANIA" -"3262006528","3262006783","FR","FRA","FRANCE" -"3262006784","3262007039","SE","SWE","SWEDEN" -"3262007040","3262007295","IT","ITA","ITALY" -"3262007296","3262007551","SA","SAU","SAUDI ARABIA" -"3262007552","3262007807","GR","GRC","GREECE" -"3262007808","3262008063","RO","ROM","ROMANIA" -"3262008064","3262008319","GB","GBR","UNITED KINGDOM" -"3262008320","3262008575","PT","PRT","PORTUGAL" -"3262008576","3262008831","PL","POL","POLAND" -"3262008832","3262009087","AT","AUT","AUSTRIA" -"3262009088","3262009343","UA","UKR","UKRAINE" -"3262009344","3262013439","FI","FIN","FINLAND" -"3262013440","3262017535","SE","SWE","SWEDEN" -"3262017536","3262018559","FI","FIN","FINLAND" -"3262018560","3262018815","PL","POL","POLAND" -"3262018816","3262021119","FI","FIN","FINLAND" -"3262021120","3262021375","UA","UKR","UKRAINE" -"3262021376","3262021631","PL","POL","POLAND" -"3262021632","3262021887","CH","CHE","SWITZERLAND" -"3262021888","3262022143","UA","UKR","UKRAINE" -"3262022144","3262022911","FI","FIN","FINLAND" -"3262022912","3262023167","DE","DEU","GERMANY" -"3262023168","3262023679","FI","FIN","FINLAND" -"3262023680","3262023935","DK","DNK","DENMARK" -"3262023936","3262027263","FI","FIN","FINLAND" -"3262027264","3262027519","TR","TUR","TURKEY" -"3262027520","3262027775","BE","BEL","BELGIUM" -"3262029824","3262030847","US","USA","UNITED STATES" -"3262030848","3262031871","FR","FRA","FRANCE" -"3262031872","3262032383","FI","FIN","FINLAND" -"3262033920","3262034111","FI","FIN","FINLAND" -"3262034112","3262034119","AX","FIN","FINLAND" -"3262034120","3262034123","FI","FIN","FINLAND" -"3262034124","3262034127","AX","FIN","FINLAND" -"3262034128","3262034455","FI","FIN","FINLAND" -"3262034456","3262034463","AX","FIN","FINLAND" -"3262034464","3262034527","FI","FIN","FINLAND" -"3262034528","3262034559","AX","FIN","FINLAND" -"3262034560","3262034687","FI","FIN","FINLAND" -"3262034688","3262034719","AX","FIN","FINLAND" -"3262034720","3262034943","FI","FIN","FINLAND" -"3262034944","3262035455","AX","FIN","FINLAND" -"3262035456","3262035487","FI","FIN","FINLAND" -"3262035488","3262035519","AX","FIN","FINLAND" -"3262035520","3262036143","FI","FIN","FINLAND" -"3262036144","3262036151","AX","FIN","FINLAND" -"3262036152","3262036287","FI","FIN","FINLAND" -"3262036288","3262036303","AX","FIN","FINLAND" -"3262036304","3262036311","FI","FIN","FINLAND" -"3262036312","3262036335","AX","FIN","FINLAND" -"3262036336","3262036367","FI","FIN","FINLAND" -"3262036368","3262036383","AX","FIN","FINLAND" -"3262036384","3262036415","FI","FIN","FINLAND" -"3262036416","3262036431","AX","FIN","FINLAND" -"3262036432","3262036463","FI","FIN","FINLAND" -"3262036464","3262036479","AX","FIN","FINLAND" -"3262036480","3262036607","FI","FIN","FINLAND" -"3262036608","3262036615","AX","FIN","FINLAND" -"3262036616","3262036719","FI","FIN","FINLAND" -"3262036720","3262038015","AX","FIN","FINLAND" -"3262038016","3262038271","FR","FRA","FRANCE" -"3262038272","3262038527","RU","RUS","RUSSIAN FEDERATION" -"3262038528","3262038783","GB","GBR","UNITED KINGDOM" -"3262038784","3262039039","NO","NOR","NORWAY" -"3262039040","3262039295","DE","DEU","GERMANY" -"3262039296","3262039551","GB","GBR","UNITED KINGDOM" -"3262039552","3262039807","GR","GRC","GREECE" -"3262039808","3262040063","SI","SVN","SLOVENIA" -"3262040064","3262040319","PL","POL","POLAND" -"3262040320","3262040575","ES","ESP","SPAIN" -"3262040576","3262040831","RU","RUS","RUSSIAN FEDERATION" -"3262040832","3262041087","GB","GBR","UNITED KINGDOM" -"3262041088","3262041343","HU","HUN","HUNGARY" -"3262041344","3262041599","BG","BGR","BULGARIA" -"3262041600","3262041855","DK","DNK","DENMARK" -"3262041856","3262042367","FR","FRA","FRANCE" -"3262042368","3262042623","GB","GBR","UNITED KINGDOM" -"3262042624","3262042879","UA","UKR","UKRAINE" -"3262042880","3262043135","NL","NLD","NETHERLANDS" -"3262043136","3262043391","RO","ROM","ROMANIA" -"3262043392","3262043647","TR","TUR","TURKEY" -"3262043648","3262043903","NL","NLD","NETHERLANDS" -"3262043904","3262044159","GB","GBR","UNITED KINGDOM" -"3262044160","3262044415","CS","SCG","SERBIA AND MONTENEGRO" -"3262044416","3262044671","DE","DEU","GERMANY" -"3262044672","3262044927","GR","GRC","GREECE" -"3262044928","3262045183","UA","UKR","UKRAINE" -"3262045184","3262045439","LT","LTU","LITHUANIA" -"3262045440","3262045695","NL","NLD","NETHERLANDS" -"3262045696","3262045951","SI","SVN","SLOVENIA" -"3262045952","3262046207","RU","RUS","RUSSIAN FEDERATION" -"3262046208","3262049279","FI","FIN","FINLAND" -"3262049280","3262049535","JO","JOR","JORDAN" -"3262049536","3262049791","GB","GBR","UNITED KINGDOM" -"3262049792","3262050559","PL","POL","POLAND" -"3262050560","3262050815","GB","GBR","UNITED KINGDOM" -"3262050816","3262051071","CH","CHE","SWITZERLAND" -"3262051072","3262051583","GB","GBR","UNITED KINGDOM" -"3262051584","3262051839","FR","FRA","FRANCE" -"3262051840","3262052351","DE","DEU","GERMANY" -"3262052352","3262052607","UA","UKR","UKRAINE" -"3262052608","3262052863","IL","ISR","ISRAEL" -"3262052864","3262053119","GB","GBR","UNITED KINGDOM" -"3262053120","3262053375","RU","RUS","RUSSIAN FEDERATION" -"3262053376","3262053631","UA","UKR","UKRAINE" -"3262053632","3262053887","RU","RUS","RUSSIAN FEDERATION" -"3262053888","3262054143","UA","UKR","UKRAINE" -"3262054144","3262054399","RU","RUS","RUSSIAN FEDERATION" -"3262054400","3262099199","FI","FIN","FINLAND" -"3262099200","3262099455","NL","NLD","NETHERLANDS" -"3262099456","3262108671","FI","FIN","FINLAND" -"3262108672","3262108927","RU","RUS","RUSSIAN FEDERATION" -"3262108928","3262114047","FI","FIN","FINLAND" -"3262114048","3262114303","SE","SWE","SWEDEN" -"3262114304","3262115071","FI","FIN","FINLAND" -"3262115072","3262115327","RU","RUS","RUSSIAN FEDERATION" -"3262115328","3262119935","FI","FIN","FINLAND" -"3262119936","3262120447","AX","FIN","FINLAND" -"3262120448","3262120703","FI","FIN","FINLAND" -"3262120704","3262121599","AX","FIN","FINLAND" -"3262121600","3262121663","FI","FIN","FINLAND" -"3262121664","3262121727","AX","FIN","FINLAND" -"3262121728","3262121983","FI","FIN","FINLAND" -"3262121984","3262122007","AX","FIN","FINLAND" -"3262122008","3262122015","FI","FIN","FINLAND" -"3262122016","3262122031","AX","FIN","FINLAND" -"3262122032","3262122143","FI","FIN","FINLAND" -"3262122144","3262122159","AX","FIN","FINLAND" -"3262122160","3262122239","FI","FIN","FINLAND" -"3262122240","3262122367","AX","FIN","FINLAND" -"3262122368","3262122431","FI","FIN","FINLAND" -"3262122432","3262122455","AX","FIN","FINLAND" -"3262122456","3262122463","FI","FIN","FINLAND" -"3262122464","3262122591","AX","FIN","FINLAND" -"3262122592","3262122631","FI","FIN","FINLAND" -"3262122632","3262122639","AX","FIN","FINLAND" -"3262122640","3262122751","FI","FIN","FINLAND" -"3262122752","3262122815","AX","FIN","FINLAND" -"3262122816","3262124031","FI","FIN","FINLAND" -"3262124032","3262128127","DE","DEU","GERMANY" -"3262128128","3262136319","GB","GBR","UNITED KINGDOM" -"3262137600","3262137855","DE","DEU","GERMANY" -"3262139392","3262140415","GB","GBR","UNITED KINGDOM" -"3262140416","3262140671","DE","DEU","GERMANY" -"3262141184","3262141439","DE","DEU","GERMANY" -"3262141440","3262142463","ES","ESP","SPAIN" -"3262142464","3262142719","DE","DEU","GERMANY" -"3262143488","3262143743","GB","GBR","UNITED KINGDOM" -"3262144000","3262144047","DE","DEU","GERMANY" -"3262145024","3262145279","DE","DEU","GERMANY" -"3262145552","3262145567","DE","DEU","GERMANY" -"3262145616","3262145631","DE","DEU","GERMANY" -"3262145664","3262145791","DE","DEU","GERMANY" -"3262146048","3262146815","DE","DEU","GERMANY" -"3262147584","3262147839","DE","DEU","GERMANY" -"3262148608","3262148863","DE","DEU","GERMANY" -"3262148880","3262148919","DE","DEU","GERMANY" -"3262148928","3262149119","DE","DEU","GERMANY" -"3262149120","3262149151","FR","FRA","FRANCE" -"3262149152","3262149159","DE","DEU","GERMANY" -"3262149160","3262149375","FR","FRA","FRANCE" -"3262149632","3262149887","DE","DEU","GERMANY" -"3262150912","3262151047","DE","DEU","GERMANY" -"3262151072","3262151103","DE","DEU","GERMANY" -"3262151136","3262151151","DE","DEU","GERMANY" -"3262151168","3262151423","DE","DEU","GERMANY" -"3262151936","3262152191","DE","DEU","GERMANY" -"3262152664","3262152671","DE","DEU","GERMANY" -"3262152704","3262185471","AT","AUT","AUSTRIA" -"3262185472","3262191615","DE","DEU","GERMANY" -"3262192128","3262197503","DE","DEU","GERMANY" -"3262197760","3262209535","DE","DEU","GERMANY" -"3262210048","3262222847","DE","DEU","GERMANY" -"3262223360","3262224895","DE","DEU","GERMANY" -"3262224896","3262225151","AT","AUT","AUSTRIA" -"3262225152","3262227711","DE","DEU","GERMANY" -"3262227712","3262227967","RO","ROM","ROMANIA" -"3262227968","3262283775","DE","DEU","GERMANY" -"3262283776","3262284799","RU","RUS","RUSSIAN FEDERATION" -"3262284800","3262286847","UA","UKR","UKRAINE" -"3262286848","3262287871","SE","SWE","SWEDEN" -"3262287872","3262289919","PL","POL","POLAND" -"3262289920","3262316543","SE","SWE","SWEDEN" -"3262316544","3262348799","DE","DEU","GERMANY" -"3262348800","3262349055","NL","NLD","NETHERLANDS" -"3262349056","3262382079","DE","DEU","GERMANY" -"3262382080","3262414847","IT","ITA","ITALY" -"3262414848","3262415359","DE","DEU","GERMANY" -"3262415360","3262416895","PL","POL","POLAND" -"3262416896","3262417407","RO","ROM","ROMANIA" -"3262417408","3262417919","PL","POL","POLAND" -"3262417920","3262418431","RU","RUS","RUSSIAN FEDERATION" -"3262418432","3262419455","FR","FRA","FRANCE" -"3262419456","3262419967","NL","NLD","NETHERLANDS" -"3262419968","3262420479","FR","FRA","FRANCE" -"3262420480","3262420991","CH","CHE","SWITZERLAND" -"3262420992","3262421503","ES","ESP","SPAIN" -"3262421504","3262422015","DE","DEU","GERMANY" -"3262422016","3262422527","SE","SWE","SWEDEN" -"3262422528","3262423039","AT","AUT","AUSTRIA" -"3262423040","3262423551","GB","GBR","UNITED KINGDOM" -"3262423552","3262424063","UA","UKR","UKRAINE" -"3262424064","3262424575","IT","ITA","ITALY" -"3262424576","3262425087","FR","FRA","FRANCE" -"3262425088","3262425599","RO","ROM","ROMANIA" -"3262425600","3262426111","UA","UKR","UKRAINE" -"3262426112","3262426623","DE","DEU","GERMANY" -"3262426624","3262427135","GB","GBR","UNITED KINGDOM" -"3262427136","3262427647","FR","FRA","FRANCE" -"3262428160","3262428671","CH","CHE","SWITZERLAND" -"3262428672","3262429183","PL","POL","POLAND" -"3262429184","3262429695","ES","ESP","SPAIN" -"3262429696","3262430207","DE","DEU","GERMANY" -"3262430208","3262430719","EE","EST","ESTONIA" -"3262430720","3262431231","RO","ROM","ROMANIA" -"3262431232","3262431743","PL","POL","POLAND" -"3262431744","3262432255","UA","UKR","UKRAINE" -"3262432256","3262432767","CH","CHE","SWITZERLAND" -"3262432768","3262433279","GB","GBR","UNITED KINGDOM" -"3262433280","3262433791","RO","ROM","ROMANIA" -"3262433792","3262434303","FR","FRA","FRANCE" -"3262434304","3262434815","SI","SVN","SLOVENIA" -"3262434816","3262435839","DE","DEU","GERMANY" -"3262435840","3262436351","CH","CHE","SWITZERLAND" -"3262436352","3262436863","SE","SWE","SWEDEN" -"3262436864","3262437375","GB","GBR","UNITED KINGDOM" -"3262437376","3262437887","RO","ROM","ROMANIA" -"3262437888","3262438399","FR","FRA","FRANCE" -"3262438400","3262438911","NL","NLD","NETHERLANDS" -"3262438912","3262439423","DK","DNK","DENMARK" -"3262439424","3262439935","AT","AUT","AUSTRIA" -"3262439936","3262440447","IL","ISR","ISRAEL" -"3262440448","3262440959","UA","UKR","UKRAINE" -"3262440960","3262441471","IL","ISR","ISRAEL" -"3262441472","3262441983","UA","UKR","UKRAINE" -"3262441984","3262442495","DE","DEU","GERMANY" -"3262442496","3262443007","RO","ROM","ROMANIA" -"3262443008","3262443519","UA","UKR","UKRAINE" -"3262443520","3262444031","ES","ESP","SPAIN" -"3262444032","3262444543","AT","AUT","AUSTRIA" -"3262444544","3262445055","UA","UKR","UKRAINE" -"3262445056","3262445567","RO","ROM","ROMANIA" -"3262445568","3262446079","PL","POL","POLAND" -"3262446080","3262446591","RU","RUS","RUSSIAN FEDERATION" -"3262446592","3262447103","PL","POL","POLAND" -"3262447104","3262447615","GB","GBR","UNITED KINGDOM" -"3262447616","3262460415","PT","PRT","PORTUGAL" -"3262460416","3262460543","UA","UKR","UKRAINE" -"3262460544","3262460671","RU","RUS","RUSSIAN FEDERATION" -"3262460800","3262460927","GB","GBR","UNITED KINGDOM" -"3262460928","3262461055","HU","HUN","HUNGARY" -"3262461184","3262461311","SN","SEN","SENEGAL" -"3262461312","3262461439","NO","NOR","NORWAY" -"3262461440","3262461567","DE","DEU","GERMANY" -"3262461568","3262461695","GB","GBR","UNITED KINGDOM" -"3262461696","3262461823","UA","UKR","UKRAINE" -"3262461824","3262461951","RO","ROM","ROMANIA" -"3262461952","3262463999","IQ","IRQ","IRAQ" -"3262464000","3262472191","RU","RUS","RUSSIAN FEDERATION" -"3262472192","3262472207","DE","DEU","GERMANY" -"3262472208","3262472211","FR","FRA","FRANCE" -"3262472212","3262472215","DE","DEU","GERMANY" -"3262472216","3262472219","NL","NLD","NETHERLANDS" -"3262472220","3262472223","AT","AUT","AUSTRIA" -"3262472224","3262472231","DE","DEU","GERMANY" -"3262472232","3262472235","AT","AUT","AUSTRIA" -"3262472236","3262472247","DE","DEU","GERMANY" -"3262472248","3262472251","IT","ITA","ITALY" -"3262472252","3262472267","DE","DEU","GERMANY" -"3262472268","3262472271","AT","AUT","AUSTRIA" -"3262472272","3262472275","IT","ITA","ITALY" -"3262472276","3262472279","BE","BEL","BELGIUM" -"3262472280","3262472291","DE","DEU","GERMANY" -"3262472292","3262472295","FR","FRA","FRANCE" -"3262472296","3262472311","DE","DEU","GERMANY" -"3262472312","3262472315","NL","NLD","NETHERLANDS" -"3262472316","3262472331","DE","DEU","GERMANY" -"3262472332","3262472335","SE","SWE","SWEDEN" -"3262472336","3262472339","US","USA","UNITED STATES" -"3262472340","3262472351","DE","DEU","GERMANY" -"3262472352","3262472355","NL","NLD","NETHERLANDS" -"3262472356","3262472359","ES","ESP","SPAIN" -"3262472360","3262472363","NL","NLD","NETHERLANDS" -"3262472364","3262472367","GB","GBR","UNITED KINGDOM" -"3262472368","3262472371","NL","NLD","NETHERLANDS" -"3262472372","3262472375","FR","FRA","FRANCE" -"3262472376","3262472379","GB","GBR","UNITED KINGDOM" -"3262472380","3262472387","DE","DEU","GERMANY" -"3262472388","3262472391","FR","FRA","FRANCE" -"3262472392","3262472395","GB","GBR","UNITED KINGDOM" -"3262472396","3262472399","DE","DEU","GERMANY" -"3262472400","3262472403","NL","NLD","NETHERLANDS" -"3262472404","3262472407","DE","DEU","GERMANY" -"3262472408","3262472411","US","USA","UNITED STATES" -"3262472412","3262472415","DE","DEU","GERMANY" -"3262472416","3262472419","ES","ESP","SPAIN" -"3262472420","3262472423","DE","DEU","GERMANY" -"3262472424","3262472427","BE","BEL","BELGIUM" -"3262472428","3262472431","CH","CHE","SWITZERLAND" -"3262472432","3262472435","AE","ARE","UNITED ARAB EMIRATES" -"3262472436","3262472443","DE","DEU","GERMANY" -"3262472444","3262472447","LU","LUX","LUXEMBOURG" -"3262472448","3262472459","DE","DEU","GERMANY" -"3262472460","3262472463","CH","CHE","SWITZERLAND" -"3262472464","3262472467","DE","DEU","GERMANY" -"3262472468","3262472471","FR","FRA","FRANCE" -"3262472472","3262472479","DE","DEU","GERMANY" -"3262472480","3262472483","IT","ITA","ITALY" -"3262472484","3262472495","DE","DEU","GERMANY" -"3262472496","3262472499","CH","CHE","SWITZERLAND" -"3262472500","3262472511","DE","DEU","GERMANY" -"3262472512","3262472515","CA","CAN","CANADA" -"3262472516","3262472519","GB","GBR","UNITED KINGDOM" -"3262472520","3262472527","DE","DEU","GERMANY" -"3262472528","3262472531","CH","CHE","SWITZERLAND" -"3262472532","3262472539","DE","DEU","GERMANY" -"3262472540","3262472543","US","USA","UNITED STATES" -"3262472544","3262472547","DE","DEU","GERMANY" -"3262472548","3262472551","NL","NLD","NETHERLANDS" -"3262472552","3262472555","HU","HUN","HUNGARY" -"3262472556","3262472563","DE","DEU","GERMANY" -"3262472564","3262472567","DK","DNK","DENMARK" -"3262472568","3262472575","DE","DEU","GERMANY" -"3262472576","3262472579","CA","CAN","CANADA" -"3262472580","3262472583","AT","AUT","AUSTRIA" -"3262472584","3262472591","US","USA","UNITED STATES" -"3262472592","3262472595","DE","DEU","GERMANY" -"3262472596","3262472599","CH","CHE","SWITZERLAND" -"3262472600","3262472603","FR","FRA","FRANCE" -"3262472604","3262472607","CH","CHE","SWITZERLAND" -"3262472608","3262472615","US","USA","UNITED STATES" -"3262472616","3262472619","CA","CAN","CANADA" -"3262472620","3262472623","TR","TUR","TURKEY" -"3262472624","3262472631","DE","DEU","GERMANY" -"3262472632","3262472635","ES","ESP","SPAIN" -"3262472636","3262472651","DE","DEU","GERMANY" -"3262472652","3262472655","FR","FRA","FRANCE" -"3262472656","3262472659","GB","GBR","UNITED KINGDOM" -"3262472660","3262472663","IT","ITA","ITALY" -"3262472664","3262472667","ES","ESP","SPAIN" -"3262472668","3262472675","DE","DEU","GERMANY" -"3262472676","3262472679","FR","FRA","FRANCE" -"3262472680","3262472683","CL","CHL","CHILE" -"3262472684","3262472691","US","USA","UNITED STATES" -"3262472692","3262472695","DE","DEU","GERMANY" -"3262472696","3262472699","IT","ITA","ITALY" -"3262472700","3262472703","AT","AUT","AUSTRIA" -"3262472704","3262472707","US","USA","UNITED STATES" -"3262472708","3262472711","DE","DEU","GERMANY" -"3262472712","3262472715","US","USA","UNITED STATES" -"3262472716","3262472727","NL","NLD","NETHERLANDS" -"3262472728","3262472735","DE","DEU","GERMANY" -"3262472736","3262472739","IT","ITA","ITALY" -"3262472740","3262472743","PT","PRT","PORTUGAL" -"3262472744","3262472747","DE","DEU","GERMANY" -"3262472748","3262472751","GB","GBR","UNITED KINGDOM" -"3262472752","3262472763","DE","DEU","GERMANY" -"3262472764","3262472767","CA","CAN","CANADA" -"3262472768","3262472771","DE","DEU","GERMANY" -"3262472772","3262472775","US","USA","UNITED STATES" -"3262472776","3262472779","DE","DEU","GERMANY" -"3262472780","3262472783","US","USA","UNITED STATES" -"3262472784","3262472791","DE","DEU","GERMANY" -"3262472792","3262472795","GB","GBR","UNITED KINGDOM" -"3262472796","3262472799","AT","AUT","AUSTRIA" -"3262472800","3262472807","DE","DEU","GERMANY" -"3262472808","3262472811","CH","CHE","SWITZERLAND" -"3262472812","3262472819","DE","DEU","GERMANY" -"3262472820","3262472823","CH","CHE","SWITZERLAND" -"3262472824","3262472827","US","USA","UNITED STATES" -"3262472828","3262472835","DE","DEU","GERMANY" -"3262472836","3262472839","DK","DNK","DENMARK" -"3262472840","3262472843","DE","DEU","GERMANY" -"3262472844","3262472847","AT","AUT","AUSTRIA" -"3262472848","3262472851","DE","DEU","GERMANY" -"3262472852","3262472855","IT","ITA","ITALY" -"3262472856","3262472859","FR","FRA","FRANCE" -"3262472860","3262472863","US","USA","UNITED STATES" -"3262472864","3262472867","FR","FRA","FRANCE" -"3262472868","3262472871","GB","GBR","UNITED KINGDOM" -"3262472872","3262472875","DE","DEU","GERMANY" -"3262472876","3262472879","FR","FRA","FRANCE" -"3262472880","3262472883","DE","DEU","GERMANY" -"3262472884","3262472891","CA","CAN","CANADA" -"3262472892","3262472899","DE","DEU","GERMANY" -"3262472900","3262472903","AT","AUT","AUSTRIA" -"3262472904","3262472907","US","USA","UNITED STATES" -"3262472908","3262472911","DE","DEU","GERMANY" -"3262472912","3262472915","IT","ITA","ITALY" -"3262472916","3262472923","DE","DEU","GERMANY" -"3262472924","3262472927","IT","ITA","ITALY" -"3262472928","3262472931","NL","NLD","NETHERLANDS" -"3262472932","3262472935","LB","LBN","LEBANON" -"3262472936","3262472939","DE","DEU","GERMANY" -"3262472940","3262472943","CH","CHE","SWITZERLAND" -"3262472944","3262472947","PT","PRT","PORTUGAL" -"3262472948","3262472951","LU","LUX","LUXEMBOURG" -"3262472952","3262472955","DE","DEU","GERMANY" -"3262472956","3262472959","CA","CAN","CANADA" -"3262472960","3262472963","DE","DEU","GERMANY" -"3262472964","3262472967","AT","AUT","AUSTRIA" -"3262472968","3262472975","DE","DEU","GERMANY" -"3262472976","3262472979","LU","LUX","LUXEMBOURG" -"3262472980","3262472983","AT","AUT","AUSTRIA" -"3262472984","3262472987","PT","PRT","PORTUGAL" -"3262472988","3262472991","US","USA","UNITED STATES" -"3262472992","3262472995","DE","DEU","GERMANY" -"3262472996","3262472999","FR","FRA","FRANCE" -"3262473000","3262473003","HU","HUN","HUNGARY" -"3262473004","3262473007","NO","NOR","NORWAY" -"3262473008","3262473011","US","USA","UNITED STATES" -"3262473012","3262473015","DE","DEU","GERMANY" -"3262473016","3262473019","AR","ARG","ARGENTINA" -"3262473020","3262473023","US","USA","UNITED STATES" -"3262473024","3262473027","ES","ESP","SPAIN" -"3262473028","3262473031","BM","BMU","BERMUDA" -"3262473032","3262473035","DE","DEU","GERMANY" -"3262473036","3262473039","IT","ITA","ITALY" -"3262473040","3262473043","GB","GBR","UNITED KINGDOM" -"3262473044","3262473047","US","USA","UNITED STATES" -"3262473048","3262473051","DE","DEU","GERMANY" -"3262473052","3262473055","AT","AUT","AUSTRIA" -"3262473056","3262473075","DE","DEU","GERMANY" -"3262473076","3262473079","GB","GBR","UNITED KINGDOM" -"3262473080","3262473083","DE","DEU","GERMANY" -"3262473084","3262473087","US","USA","UNITED STATES" -"3262473088","3262473091","NL","NLD","NETHERLANDS" -"3262473092","3262473099","DE","DEU","GERMANY" -"3262473100","3262473103","BE","BEL","BELGIUM" -"3262473104","3262473107","DE","DEU","GERMANY" -"3262473108","3262473115","ES","ESP","SPAIN" -"3262473116","3262473119","DE","DEU","GERMANY" -"3262473120","3262473127","FR","FRA","FRANCE" -"3262473128","3262473135","DE","DEU","GERMANY" -"3262473136","3262473139","US","USA","UNITED STATES" -"3262473140","3262473143","ES","ESP","SPAIN" -"3262473144","3262473151","DE","DEU","GERMANY" -"3262473152","3262473155","FR","FRA","FRANCE" -"3262473156","3262473159","IT","ITA","ITALY" -"3262473160","3262473163","NL","NLD","NETHERLANDS" -"3262473164","3262473167","CH","CHE","SWITZERLAND" -"3262473168","3262473171","DE","DEU","GERMANY" -"3262473172","3262473175","US","USA","UNITED STATES" -"3262473176","3262473195","DE","DEU","GERMANY" -"3262473196","3262473199","AT","AUT","AUSTRIA" -"3262473200","3262473203","ES","ESP","SPAIN" -"3262473204","3262473207","US","USA","UNITED STATES" -"3262473208","3262473211","DE","DEU","GERMANY" -"3262473212","3262473215","FR","FRA","FRANCE" -"3262473216","3262473323","JP","JPN","JAPAN" -"3262473324","3262473327","KR","KOR","REPUBLIC OF KOREA" -"3262473328","3262473471","JP","JPN","JAPAN" -"3262473472","3262473473","DE","DEU","GERMANY" -"3262473474","3262473478","US","USA","UNITED STATES" -"3262473479","3262473480","CA","CAN","CANADA" -"3262473481","3262473483","US","USA","UNITED STATES" -"3262473484","3262473484","VE","VEN","VENEZUELA" -"3262473485","3262473485","US","USA","UNITED STATES" -"3262473486","3262473486","CA","CAN","CANADA" -"3262473487","3262473516","US","USA","UNITED STATES" -"3262473517","3262473517","CN","CHN","CHINA" -"3262473518","3262473526","US","USA","UNITED STATES" -"3262473527","3262473527","CN","CHN","CHINA" -"3262473528","3262473538","US","USA","UNITED STATES" -"3262473539","3262473539","DE","DEU","GERMANY" -"3262473540","3262473540","US","USA","UNITED STATES" -"3262473541","3262473541","DE","DEU","GERMANY" -"3262473542","3262473543","US","USA","UNITED STATES" -"3262473544","3262473544","CA","CAN","CANADA" -"3262473545","3262473548","US","USA","UNITED STATES" -"3262473549","3262473549","CA","CAN","CANADA" -"3262473550","3262473557","US","USA","UNITED STATES" -"3262473558","3262473558","DE","DEU","GERMANY" -"3262473559","3262473567","US","USA","UNITED STATES" -"3262473568","3262473568","CA","CAN","CANADA" -"3262473569","3262473570","US","USA","UNITED STATES" -"3262473571","3262473571","DE","DEU","GERMANY" -"3262473572","3262473582","US","USA","UNITED STATES" -"3262473583","3262473583","CA","CAN","CANADA" -"3262473584","3262473586","US","USA","UNITED STATES" -"3262473587","3262473587","CA","CAN","CANADA" -"3262473588","3262473658","US","USA","UNITED STATES" -"3262473659","3262473659","DE","DEU","GERMANY" -"3262473660","3262473663","US","USA","UNITED STATES" -"3262473664","3262473664","CA","CAN","CANADA" -"3262473665","3262473688","US","USA","UNITED STATES" -"3262473689","3262473689","CA","CAN","CANADA" -"3262473690","3262473691","AR","ARG","ARGENTINA" -"3262473692","3262473692","CA","CAN","CANADA" -"3262473693","3262473729","DE","DEU","GERMANY" -"3262473730","3262473735","US","USA","UNITED STATES" -"3262473736","3262473736","CA","CAN","CANADA" -"3262473737","3262473771","US","USA","UNITED STATES" -"3262473772","3262473772","DE","DEU","GERMANY" -"3262473773","3262473785","US","USA","UNITED STATES" -"3262473786","3262473855","DE","DEU","GERMANY" -"3262473856","3262473859","US","USA","UNITED STATES" -"3262473860","3262473903","DE","DEU","GERMANY" -"3262473904","3262473907","US","USA","UNITED STATES" -"3262473908","3262473931","DE","DEU","GERMANY" -"3262473932","3262473935","US","USA","UNITED STATES" -"3262473936","3262473963","DE","DEU","GERMANY" -"3262473964","3262473967","US","USA","UNITED STATES" -"3262473968","3262473971","DE","DEU","GERMANY" -"3262473972","3262473983","US","USA","UNITED STATES" -"3262473984","3262473985","DE","DEU","GERMANY" -"3262473986","3262473986","TW","TWN","TAIWAN" -"3262473987","3262473987","IN","IND","INDIA" -"3262473988","3262473988","SG","SGP","SINGAPORE" -"3262473989","3262473989","IN","IND","INDIA" -"3262473990","3262473990","SG","SGP","SINGAPORE" -"3262473991","3262473991","DE","DEU","GERMANY" -"3262473992","3262473992","SG","SGP","SINGAPORE" -"3262473993","3262473993","IN","IND","INDIA" -"3262473994","3262473995","TW","TWN","TAIWAN" -"3262473996","3262473996","MY","MYS","MALAYSIA" -"3262473997","3262473998","ID","IDN","INDONESIA" -"3262473999","3262473999","TW","TWN","TAIWAN" -"3262474000","3262474000","SG","SGP","SINGAPORE" -"3262474001","3262474001","TW","TWN","TAIWAN" -"3262474002","3262474002","MY","MYS","MALAYSIA" -"3262474003","3262474003","TW","TWN","TAIWAN" -"3262474004","3262474004","SG","SGP","SINGAPORE" -"3262474005","3262474005","TW","TWN","TAIWAN" -"3262474006","3262474007","SG","SGP","SINGAPORE" -"3262474008","3262474009","TW","TWN","TAIWAN" -"3262474010","3262474010","SG","SGP","SINGAPORE" -"3262474011","3262474011","ID","IDN","INDONESIA" -"3262474012","3262474013","SG","SGP","SINGAPORE" -"3262474014","3262474014","HK","HKG","HONG KONG" -"3262474015","3262474016","SG","SGP","SINGAPORE" -"3262474017","3262474018","MY","MYS","MALAYSIA" -"3262474019","3262474026","SG","SGP","SINGAPORE" -"3262474027","3262474027","CN","CHN","CHINA" -"3262474028","3262474030","SG","SGP","SINGAPORE" -"3262474031","3262474031","IN","IND","INDIA" -"3262474032","3262474032","MY","MYS","MALAYSIA" -"3262474033","3262474033","SG","SGP","SINGAPORE" -"3262474034","3262474034","MY","MYS","MALAYSIA" -"3262474035","3262474035","SG","SGP","SINGAPORE" -"3262474036","3262474036","MY","MYS","MALAYSIA" -"3262474037","3262474037","SG","SGP","SINGAPORE" -"3262474038","3262474038","MY","MYS","MALAYSIA" -"3262474039","3262474039","TW","TWN","TAIWAN" -"3262474040","3262474041","MY","MYS","MALAYSIA" -"3262474042","3262474042","CN","CHN","CHINA" -"3262474043","3262474043","SG","SGP","SINGAPORE" -"3262474044","3262474044","GB","GBR","UNITED KINGDOM" -"3262474045","3262474048","SG","SGP","SINGAPORE" -"3262474049","3262474049","IN","IND","INDIA" -"3262474050","3262474061","SG","SGP","SINGAPORE" -"3262474062","3262474063","CN","CHN","CHINA" -"3262474064","3262474064","TW","TWN","TAIWAN" -"3262474065","3262474065","IN","IND","INDIA" -"3262474066","3262474066","SG","SGP","SINGAPORE" -"3262474067","3262474067","MY","MYS","MALAYSIA" -"3262474068","3262474068","SG","SGP","SINGAPORE" -"3262474069","3262474069","MY","MYS","MALAYSIA" -"3262474070","3262474070","SG","SGP","SINGAPORE" -"3262474071","3262474071","TW","TWN","TAIWAN" -"3262474072","3262474072","IN","IND","INDIA" -"3262474073","3262474075","SG","SGP","SINGAPORE" -"3262474076","3262474076","MY","MYS","MALAYSIA" -"3262474077","3262474077","SG","SGP","SINGAPORE" -"3262474078","3262474078","IN","IND","INDIA" -"3262474079","3262474079","MY","MYS","MALAYSIA" -"3262474080","3262474083","SG","SGP","SINGAPORE" -"3262474084","3262474084","TW","TWN","TAIWAN" -"3262474085","3262474087","SG","SGP","SINGAPORE" -"3262474088","3262474088","MY","MYS","MALAYSIA" -"3262474089","3262474089","SG","SGP","SINGAPORE" -"3262474090","3262474091","MY","MYS","MALAYSIA" -"3262474092","3262474094","SG","SGP","SINGAPORE" -"3262474095","3262474095","HK","HKG","HONG KONG" -"3262474096","3262474097","SG","SGP","SINGAPORE" -"3262474098","3262474098","MY","MYS","MALAYSIA" -"3262474099","3262474102","SG","SGP","SINGAPORE" -"3262474103","3262474103","MY","MYS","MALAYSIA" -"3262474104","3262474104","CN","CHN","CHINA" -"3262474105","3262474105","IN","IND","INDIA" -"3262474106","3262474106","MY","MYS","MALAYSIA" -"3262474107","3262474107","CN","CHN","CHINA" -"3262474108","3262474108","HK","HKG","HONG KONG" -"3262474109","3262474110","MY","MYS","MALAYSIA" -"3262474111","3262474111","TH","THA","THAILAND" -"3262474112","3262474112","SG","SGP","SINGAPORE" -"3262474113","3262474113","PH","PHL","PHILIPPINES" -"3262474114","3262474114","IN","IND","INDIA" -"3262474115","3262474115","SG","SGP","SINGAPORE" -"3262474116","3262474116","TW","TWN","TAIWAN" -"3262474117","3262474117","IN","IND","INDIA" -"3262474118","3262474118","TH","THA","THAILAND" -"3262474119","3262474119","TW","TWN","TAIWAN" -"3262474120","3262474120","BN","BRN","BRUNEI DARUSSALAM" -"3262474121","3262474121","TW","TWN","TAIWAN" -"3262474122","3262474122","SG","SGP","SINGAPORE" -"3262474123","3262474125","MY","MYS","MALAYSIA" -"3262474126","3262474126","IN","IND","INDIA" -"3262474127","3262474128","SG","SGP","SINGAPORE" -"3262474129","3262474130","MY","MYS","MALAYSIA" -"3262474131","3262474131","IN","IND","INDIA" -"3262474132","3262474133","MY","MYS","MALAYSIA" -"3262474134","3262474134","CN","CHN","CHINA" -"3262474135","3262474136","SG","SGP","SINGAPORE" -"3262474137","3262474137","TW","TWN","TAIWAN" -"3262474138","3262474139","CN","CHN","CHINA" -"3262474140","3262474140","TW","TWN","TAIWAN" -"3262474141","3262474142","SG","SGP","SINGAPORE" -"3262474143","3262474143","PH","PHL","PHILIPPINES" -"3262474144","3262474150","SG","SGP","SINGAPORE" -"3262474151","3262474151","MY","MYS","MALAYSIA" -"3262474152","3262474152","SG","SGP","SINGAPORE" -"3262474153","3262474153","IN","IND","INDIA" -"3262474154","3262474154","SG","SGP","SINGAPORE" -"3262474155","3262474155","MY","MYS","MALAYSIA" -"3262474156","3262474156","IN","IND","INDIA" -"3262474157","3262474157","SG","SGP","SINGAPORE" -"3262474158","3262474159","MY","MYS","MALAYSIA" -"3262474160","3262474162","SG","SGP","SINGAPORE" -"3262474163","3262474163","MY","MYS","MALAYSIA" -"3262474164","3262474164","IN","IND","INDIA" -"3262474165","3262474165","CN","CHN","CHINA" -"3262474166","3262474166","SG","SGP","SINGAPORE" -"3262474167","3262474167","HK","HKG","HONG KONG" -"3262474168","3262474168","TW","TWN","TAIWAN" -"3262474169","3262474169","DE","DEU","GERMANY" -"3262474170","3262474170","SG","SGP","SINGAPORE" -"3262474171","3262474171","MY","MYS","MALAYSIA" -"3262474172","3262474172","SG","SGP","SINGAPORE" -"3262474173","3262474173","CN","CHN","CHINA" -"3262474174","3262474174","TW","TWN","TAIWAN" -"3262474175","3262474175","SG","SGP","SINGAPORE" -"3262474176","3262474176","MY","MYS","MALAYSIA" -"3262474177","3262474177","SG","SGP","SINGAPORE" -"3262474178","3262474178","TW","TWN","TAIWAN" -"3262474179","3262474179","CN","CHN","CHINA" -"3262474180","3262474180","MY","MYS","MALAYSIA" -"3262474181","3262474181","SG","SGP","SINGAPORE" -"3262474182","3262474182","MY","MYS","MALAYSIA" -"3262474183","3262474185","SG","SGP","SINGAPORE" -"3262474186","3262474186","MY","MYS","MALAYSIA" -"3262474187","3262474187","SG","SGP","SINGAPORE" -"3262474188","3262474188","MY","MYS","MALAYSIA" -"3262474189","3262474189","SG","SGP","SINGAPORE" -"3262474190","3262474190","CN","CHN","CHINA" -"3262474191","3262474192","SG","SGP","SINGAPORE" -"3262474193","3262474193","PH","PHL","PHILIPPINES" -"3262474194","3262474194","SG","SGP","SINGAPORE" -"3262474195","3262474195","MY","MYS","MALAYSIA" -"3262474196","3262474196","IN","IND","INDIA" -"3262474197","3262474198","SG","SGP","SINGAPORE" -"3262474199","3262474199","CN","CHN","CHINA" -"3262474200","3262474200","MY","MYS","MALAYSIA" -"3262474201","3262474201","SG","SGP","SINGAPORE" -"3262474202","3262474203","CN","CHN","CHINA" -"3262474204","3262474204","IN","IND","INDIA" -"3262474205","3262474205","SG","SGP","SINGAPORE" -"3262474206","3262474206","IN","IND","INDIA" -"3262474207","3262474207","MY","MYS","MALAYSIA" -"3262474208","3262474208","SG","SGP","SINGAPORE" -"3262474209","3262474209","MY","MYS","MALAYSIA" -"3262474210","3262474210","TW","TWN","TAIWAN" -"3262474211","3262474211","SG","SGP","SINGAPORE" -"3262474212","3262474212","MY","MYS","MALAYSIA" -"3262474213","3262474213","SG","SGP","SINGAPORE" -"3262474214","3262474214","CN","CHN","CHINA" -"3262474215","3262474215","IN","IND","INDIA" -"3262474216","3262474216","SG","SGP","SINGAPORE" -"3262474217","3262474217","MY","MYS","MALAYSIA" -"3262474218","3262474218","SG","SGP","SINGAPORE" -"3262474219","3262474219","MY","MYS","MALAYSIA" -"3262474220","3262474222","IN","IND","INDIA" -"3262474223","3262474223","SG","SGP","SINGAPORE" -"3262474224","3262474224","MY","MYS","MALAYSIA" -"3262474225","3262474225","SG","SGP","SINGAPORE" -"3262474226","3262474226","MY","MYS","MALAYSIA" -"3262474227","3262474227","IN","IND","INDIA" -"3262474228","3262474228","SG","SGP","SINGAPORE" -"3262474229","3262474230","IN","IND","INDIA" -"3262474231","3262474231","SG","SGP","SINGAPORE" -"3262474232","3262474234","IN","IND","INDIA" -"3262474235","3262474236","MY","MYS","MALAYSIA" -"3262474237","3262474238","SG","SGP","SINGAPORE" -"3262474239","3262474239","DE","DEU","GERMANY" -"3262474240","3262474255","AU","AUS","AUSTRALIA" -"3262474256","3262474259","NZ","NZL","NEW ZEALAND" -"3262474260","3262474263","AU","AUS","AUSTRALIA" -"3262474264","3262474267","NZ","NZL","NEW ZEALAND" -"3262474268","3262474271","AU","AUS","AUSTRALIA" -"3262474272","3262474275","NZ","NZL","NEW ZEALAND" -"3262474276","3262474367","AU","AUS","AUSTRALIA" -"3262474368","3262474371","NZ","NZL","NEW ZEALAND" -"3262474372","3262474395","AU","AUS","AUSTRALIA" -"3262474396","3262474399","NZ","NZL","NEW ZEALAND" -"3262474400","3262474463","AU","AUS","AUSTRALIA" -"3262474464","3262474467","NZ","NZL","NEW ZEALAND" -"3262474468","3262474495","AU","AUS","AUSTRALIA" -"3262474496","3262474631","DE","DEU","GERMANY" -"3262474632","3262474635","DK","DNK","DENMARK" -"3262474636","3262474791","DE","DEU","GERMANY" -"3262474792","3262474815","JP","JPN","JAPAN" -"3262474816","3262474895","DE","DEU","GERMANY" -"3262474896","3262475007","JP","JPN","JAPAN" -"3262475008","3262475009","DE","DEU","GERMANY" -"3262475010","3262475023","US","USA","UNITED STATES" -"3262475024","3262475024","CO","COL","COLOMBIA" -"3262475025","3262475025","US","USA","UNITED STATES" -"3262475026","3262475027","DE","DEU","GERMANY" -"3262475028","3262475029","US","USA","UNITED STATES" -"3262475030","3262475033","DE","DEU","GERMANY" -"3262475034","3262475036","US","USA","UNITED STATES" -"3262475037","3262475037","DE","DEU","GERMANY" -"3262475038","3262475042","US","USA","UNITED STATES" -"3262475043","3262475043","DE","DEU","GERMANY" -"3262475044","3262475044","US","USA","UNITED STATES" -"3262475045","3262475045","BR","BRA","BRAZIL" -"3262475046","3262475065","US","USA","UNITED STATES" -"3262475066","3262475068","MX","MEX","MEXICO" -"3262475069","3262475072","US","USA","UNITED STATES" -"3262475073","3262475075","BR","BRA","BRAZIL" -"3262475076","3262475076","US","USA","UNITED STATES" -"3262475077","3262475077","BR","BRA","BRAZIL" -"3262475078","3262475079","US","USA","UNITED STATES" -"3262475080","3262475080","CA","CAN","CANADA" -"3262475081","3262475081","US","USA","UNITED STATES" -"3262475082","3262475082","BR","BRA","BRAZIL" -"3262475083","3262475083","US","USA","UNITED STATES" -"3262475084","3262475084","MX","MEX","MEXICO" -"3262475085","3262475085","BR","BRA","BRAZIL" -"3262475086","3262475087","US","USA","UNITED STATES" -"3262475088","3262475088","BR","BRA","BRAZIL" -"3262475089","3262475090","US","USA","UNITED STATES" -"3262475091","3262475092","DE","DEU","GERMANY" -"3262475093","3262475094","BR","BRA","BRAZIL" -"3262475095","3262475095","MX","MEX","MEXICO" -"3262475096","3262475140","US","USA","UNITED STATES" -"3262475141","3262475141","BR","BRA","BRAZIL" -"3262475142","3262475167","US","USA","UNITED STATES" -"3262475168","3262475168","DE","DEU","GERMANY" -"3262475169","3262475174","US","USA","UNITED STATES" -"3262475175","3262475175","DE","DEU","GERMANY" -"3262475176","3262475185","US","USA","UNITED STATES" -"3262475186","3262475186","DE","DEU","GERMANY" -"3262475187","3262475189","US","USA","UNITED STATES" -"3262475190","3262475190","MX","MEX","MEXICO" -"3262475191","3262475191","BR","BRA","BRAZIL" -"3262475192","3262475192","MX","MEX","MEXICO" -"3262475193","3262475201","US","USA","UNITED STATES" -"3262475202","3262475205","BR","BRA","BRAZIL" -"3262475206","3262475209","US","USA","UNITED STATES" -"3262475210","3262475210","BR","BRA","BRAZIL" -"3262475211","3262475213","US","USA","UNITED STATES" -"3262475214","3262475214","DE","DEU","GERMANY" -"3262475215","3262475222","US","USA","UNITED STATES" -"3262475223","3262475263","DE","DEU","GERMANY" -"3262475264","3262475267","MU","MUS","MAURITIUS" -"3262475268","3262475271","US","USA","UNITED STATES" -"3262475272","3262475275","IT","ITA","ITALY" -"3262475276","3262475279","US","USA","UNITED STATES" -"3262475280","3262475283","DE","DEU","GERMANY" -"3262475284","3262475287","NL","NLD","NETHERLANDS" -"3262475288","3262475295","DE","DEU","GERMANY" -"3262475296","3262475303","NL","NLD","NETHERLANDS" -"3262475304","3262475307","FR","FRA","FRANCE" -"3262475308","3262475311","AR","ARG","ARGENTINA" -"3262475312","3262475315","FR","FRA","FRANCE" -"3262475316","3262475319","SE","SWE","SWEDEN" -"3262475320","3262475323","DE","DEU","GERMANY" -"3262475324","3262475327","MX","MEX","MEXICO" -"3262475328","3262475331","US","USA","UNITED STATES" -"3262475332","3262475335","BR","BRA","BRAZIL" -"3262475336","3262475339","DE","DEU","GERMANY" -"3262475340","3262475343","FR","FRA","FRANCE" -"3262475344","3262475347","CH","CHE","SWITZERLAND" -"3262475348","3262475351","DE","DEU","GERMANY" -"3262475352","3262475355","ES","ESP","SPAIN" -"3262475356","3262475359","DE","DEU","GERMANY" -"3262475360","3262475363","IT","ITA","ITALY" -"3262475364","3262475367","DE","DEU","GERMANY" -"3262475368","3262475371","FR","FRA","FRANCE" -"3262475372","3262475375","NL","NLD","NETHERLANDS" -"3262475376","3262475383","DE","DEU","GERMANY" -"3262475384","3262475387","US","USA","UNITED STATES" -"3262475388","3262475395","AT","AUT","AUSTRIA" -"3262475396","3262475399","NL","NLD","NETHERLANDS" -"3262475400","3262475403","US","USA","UNITED STATES" -"3262475404","3262475407","SE","SWE","SWEDEN" -"3262475408","3262475415","DE","DEU","GERMANY" -"3262475416","3262475419","CH","CHE","SWITZERLAND" -"3262475420","3262475423","DE","DEU","GERMANY" -"3262475424","3262475427","US","USA","UNITED STATES" -"3262475428","3262475431","ES","ESP","SPAIN" -"3262475432","3262475435","IT","ITA","ITALY" -"3262475436","3262475439","GB","GBR","UNITED KINGDOM" -"3262475440","3262475443","DE","DEU","GERMANY" -"3262475444","3262475447","US","USA","UNITED STATES" -"3262475448","3262475451","FR","FRA","FRANCE" -"3262475452","3262475459","DE","DEU","GERMANY" -"3262475460","3262475463","FR","FRA","FRANCE" -"3262475464","3262475467","DE","DEU","GERMANY" -"3262475468","3262475471","ES","ESP","SPAIN" -"3262475472","3262475475","DE","DEU","GERMANY" -"3262475476","3262475479","ES","ESP","SPAIN" -"3262475480","3262475483","US","USA","UNITED STATES" -"3262475484","3262475487","IT","ITA","ITALY" -"3262475488","3262475491","MX","MEX","MEXICO" -"3262475492","3262475495","CH","CHE","SWITZERLAND" -"3262475496","3262475499","NL","NLD","NETHERLANDS" -"3262475500","3262475503","DE","DEU","GERMANY" -"3262475504","3262475507","FR","FRA","FRANCE" -"3262475508","3262475511","DE","DEU","GERMANY" -"3262475512","3262475515","US","USA","UNITED STATES" -"3262475516","3262475519","DE","DEU","GERMANY" -"3262475520","3262475527","US","USA","UNITED STATES" -"3262475528","3262475531","DE","DEU","GERMANY" -"3262475532","3262475559","US","USA","UNITED STATES" -"3262475560","3262475575","DE","DEU","GERMANY" -"3262475576","3262475591","US","USA","UNITED STATES" -"3262475592","3262475595","BR","BRA","BRAZIL" -"3262475596","3262475607","US","USA","UNITED STATES" -"3262475608","3262475611","IE","IRL","IRELAND" -"3262475612","3262475631","DE","DEU","GERMANY" -"3262475632","3262475635","US","USA","UNITED STATES" -"3262475636","3262475639","DE","DEU","GERMANY" -"3262475640","3262475683","US","USA","UNITED STATES" -"3262475684","3262475687","BR","BRA","BRAZIL" -"3262475688","3262475691","DE","DEU","GERMANY" -"3262475692","3262475695","BR","BRA","BRAZIL" -"3262475696","3262475715","US","USA","UNITED STATES" -"3262475716","3262475719","DE","DEU","GERMANY" -"3262475720","3262475723","BR","BRA","BRAZIL" -"3262475724","3262475775","US","USA","UNITED STATES" -"3262475776","3262475783","DE","DEU","GERMANY" -"3262475784","3262475787","BE","BEL","BELGIUM" -"3262475788","3262475791","DE","DEU","GERMANY" -"3262475792","3262475807","AE","ARE","UNITED ARAB EMIRATES" -"3262475808","3262475811","US","USA","UNITED STATES" -"3262475812","3262475815","IE","IRL","IRELAND" -"3262475816","3262475819","FR","FRA","FRANCE" -"3262475820","3262475823","DE","DEU","GERMANY" -"3262475824","3262475839","RO","ROM","ROMANIA" -"3262475840","3262475855","DE","DEU","GERMANY" -"3262475856","3262475871","TR","TUR","TURKEY" -"3262475872","3262475875","BE","BEL","BELGIUM" -"3262475876","3262475879","NL","NLD","NETHERLANDS" -"3262475880","3262475883","PL","POL","POLAND" -"3262475884","3262475887","BE","BEL","BELGIUM" -"3262475888","3262475891","DE","DEU","GERMANY" -"3262475892","3262475895","SA","SAU","SAUDI ARABIA" -"3262475896","3262475903","CY","CYP","CYPRUS" -"3262475904","3262475919","GR","GRC","GREECE" -"3262475920","3262475935","DE","DEU","GERMANY" -"3262475936","3262475951","FR","FRA","FRANCE" -"3262475952","3262475963","US","USA","UNITED STATES" -"3262475964","3262475967","HU","HUN","HUNGARY" -"3262475968","3262475975","DE","DEU","GERMANY" -"3262475976","3262475983","BG","BGR","BULGARIA" -"3262475984","3262475991","SG","SGP","SINGAPORE" -"3262475992","3262476015","DE","DEU","GERMANY" -"3262476016","3262476019","ES","ESP","SPAIN" -"3262476020","3262476023","FR","FRA","FRANCE" -"3262476024","3262476027","DE","DEU","GERMANY" -"3262476028","3262476031","FR","FRA","FRANCE" -"3262476032","3262476039","DE","DEU","GERMANY" -"3262476040","3262476043","CH","CHE","SWITZERLAND" -"3262476044","3262476047","DE","DEU","GERMANY" -"3262476048","3262476055","IL","ISR","ISRAEL" -"3262476056","3262476059","PE","PER","PERU" -"3262476060","3262476063","US","USA","UNITED STATES" -"3262476064","3262476067","DE","DEU","GERMANY" -"3262476068","3262476071","PL","POL","POLAND" -"3262476072","3262476075","US","USA","UNITED STATES" -"3262476076","3262476079","DE","DEU","GERMANY" -"3262476080","3262476083","FR","FRA","FRANCE" -"3262476084","3262476087","DE","DEU","GERMANY" -"3262476088","3262476091","DK","DNK","DENMARK" -"3262476092","3262476095","NL","NLD","NETHERLANDS" -"3262476096","3262476103","US","USA","UNITED STATES" -"3262476104","3262476107","DE","DEU","GERMANY" -"3262476108","3262476111","BE","BEL","BELGIUM" -"3262476112","3262476115","NL","NLD","NETHERLANDS" -"3262476116","3262476119","DE","DEU","GERMANY" -"3262476120","3262476123","FR","FRA","FRANCE" -"3262476124","3262476127","DE","DEU","GERMANY" -"3262476128","3262476131","GB","GBR","UNITED KINGDOM" -"3262476132","3262476135","AR","ARG","ARGENTINA" -"3262476136","3262476139","US","USA","UNITED STATES" -"3262476140","3262476143","BE","BEL","BELGIUM" -"3262476144","3262476147","CH","CHE","SWITZERLAND" -"3262476148","3262476155","US","USA","UNITED STATES" -"3262476156","3262476159","BE","BEL","BELGIUM" -"3262476160","3262476163","GR","GRC","GREECE" -"3262476164","3262476171","DE","DEU","GERMANY" -"3262476172","3262476175","GB","GBR","UNITED KINGDOM" -"3262476176","3262476179","ES","ESP","SPAIN" -"3262476180","3262476183","DE","DEU","GERMANY" -"3262476184","3262476187","AT","AUT","AUSTRIA" -"3262476188","3262476191","PT","PRT","PORTUGAL" -"3262476192","3262476195","DE","DEU","GERMANY" -"3262476196","3262476199","US","USA","UNITED STATES" -"3262476200","3262476203","GB","GBR","UNITED KINGDOM" -"3262476204","3262476207","NA","NAM","NAMIBIA" -"3262476208","3262476211","US","USA","UNITED STATES" -"3262476212","3262476215","CL","CHL","CHILE" -"3262476216","3262476223","FR","FRA","FRANCE" -"3262476224","3262476227","GR","GRC","GREECE" -"3262476228","3262476231","SE","SWE","SWEDEN" -"3262476232","3262476235","FR","FRA","FRANCE" -"3262476236","3262476239","US","USA","UNITED STATES" -"3262476240","3262476243","IT","ITA","ITALY" -"3262476244","3262476247","ES","ESP","SPAIN" -"3262476248","3262476251","NL","NLD","NETHERLANDS" -"3262476252","3262476255","DE","DEU","GERMANY" -"3262476256","3262476259","US","USA","UNITED STATES" -"3262476260","3262476267","DE","DEU","GERMANY" -"3262476268","3262476271","US","USA","UNITED STATES" -"3262476272","3262476275","DE","DEU","GERMANY" -"3262476276","3262476279","CA","CAN","CANADA" -"3262476280","3262476283","BE","BEL","BELGIUM" -"3262476284","3262476291","DE","DEU","GERMANY" -"3262476292","3262476295","ZA","ZAF","SOUTH AFRICA" -"3262476296","3262476299","US","USA","UNITED STATES" -"3262476300","3262476303","DO","DOM","DOMINICAN REPUBLIC" -"3262476304","3262476307","US","USA","UNITED STATES" -"3262476308","3262476315","DE","DEU","GERMANY" -"3262476316","3262476319","BE","BEL","BELGIUM" -"3262476320","3262476323","DE","DEU","GERMANY" -"3262476324","3262476327","IT","ITA","ITALY" -"3262476328","3262476331","NL","NLD","NETHERLANDS" -"3262476332","3262476339","DE","DEU","GERMANY" -"3262476340","3262476343","ES","ESP","SPAIN" -"3262476344","3262476351","DE","DEU","GERMANY" -"3262476352","3262476355","AR","ARG","ARGENTINA" -"3262476356","3262476363","US","USA","UNITED STATES" -"3262476364","3262476367","PT","PRT","PORTUGAL" -"3262476368","3262476371","US","USA","UNITED STATES" -"3262476372","3262476375","DE","DEU","GERMANY" -"3262476376","3262476387","US","USA","UNITED STATES" -"3262476388","3262476391","SK","SVK","SLOVAKIA" -"3262476392","3262476395","DE","DEU","GERMANY" -"3262476396","3262476399","AT","AUT","AUSTRIA" -"3262476400","3262476403","ES","ESP","SPAIN" -"3262476404","3262476411","DE","DEU","GERMANY" -"3262476412","3262476415","US","USA","UNITED STATES" -"3262476416","3262476419","DE","DEU","GERMANY" -"3262476420","3262476423","CH","CHE","SWITZERLAND" -"3262476424","3262476427","ES","ESP","SPAIN" -"3262476428","3262476431","US","USA","UNITED STATES" -"3262476432","3262476435","IT","ITA","ITALY" -"3262476436","3262476439","AT","AUT","AUSTRIA" -"3262476440","3262476443","DE","DEU","GERMANY" -"3262476444","3262476447","AT","AUT","AUSTRIA" -"3262476448","3262476455","DE","DEU","GERMANY" -"3262476456","3262476459","CA","CAN","CANADA" -"3262476460","3262476463","DK","DNK","DENMARK" -"3262476464","3262476467","SK","SVK","SLOVAKIA" -"3262476468","3262476471","IT","ITA","ITALY" -"3262476472","3262476475","CA","CAN","CANADA" -"3262476476","3262476483","US","USA","UNITED STATES" -"3262476484","3262476487","DE","DEU","GERMANY" -"3262476488","3262476491","US","USA","UNITED STATES" -"3262476492","3262476495","BE","BEL","BELGIUM" -"3262476496","3262476499","US","USA","UNITED STATES" -"3262476500","3262476503","DE","DEU","GERMANY" -"3262476504","3262476507","CH","CHE","SWITZERLAND" -"3262476508","3262476511","DE","DEU","GERMANY" -"3262476512","3262476515","US","USA","UNITED STATES" -"3262476516","3262476519","DE","DEU","GERMANY" -"3262476520","3262476523","GB","GBR","UNITED KINGDOM" -"3262476524","3262476527","MX","MEX","MEXICO" -"3262476528","3262476531","DE","DEU","GERMANY" -"3262476532","3262476535","IL","ISR","ISRAEL" -"3262476536","3262476539","US","USA","UNITED STATES" -"3262476540","3262476543","DE","DEU","GERMANY" -"3262476544","3262476547","DK","DNK","DENMARK" -"3262476548","3262476551","AR","ARG","ARGENTINA" -"3262476552","3262476555","IT","ITA","ITALY" -"3262476556","3262476559","FR","FRA","FRANCE" -"3262476560","3262476567","DE","DEU","GERMANY" -"3262476568","3262476571","US","USA","UNITED STATES" -"3262476572","3262476575","DE","DEU","GERMANY" -"3262476576","3262476587","US","USA","UNITED STATES" -"3262476588","3262476591","ES","ESP","SPAIN" -"3262476592","3262476595","GB","GBR","UNITED KINGDOM" -"3262476596","3262476603","DE","DEU","GERMANY" -"3262476604","3262476607","NL","NLD","NETHERLANDS" -"3262476608","3262476611","SK","SVK","SLOVAKIA" -"3262476612","3262476615","GB","GBR","UNITED KINGDOM" -"3262476616","3262476619","TR","TUR","TURKEY" -"3262476620","3262476623","NL","NLD","NETHERLANDS" -"3262476624","3262476627","US","USA","UNITED STATES" -"3262476628","3262476635","DE","DEU","GERMANY" -"3262476636","3262476639","DK","DNK","DENMARK" -"3262476640","3262476643","DE","DEU","GERMANY" -"3262476644","3262476647","ZA","ZAF","SOUTH AFRICA" -"3262476648","3262476651","US","USA","UNITED STATES" -"3262476652","3262476655","FR","FRA","FRANCE" -"3262476656","3262476667","US","USA","UNITED STATES" -"3262476668","3262476671","GB","GBR","UNITED KINGDOM" -"3262476672","3262476675","SE","SWE","SWEDEN" -"3262476676","3262476679","AT","AUT","AUSTRIA" -"3262476680","3262476683","NL","NLD","NETHERLANDS" -"3262476684","3262476687","IT","ITA","ITALY" -"3262476688","3262476691","DE","DEU","GERMANY" -"3262476692","3262476695","FR","FRA","FRANCE" -"3262476696","3262476699","ES","ESP","SPAIN" -"3262476700","3262476707","DE","DEU","GERMANY" -"3262476708","3262476715","US","USA","UNITED STATES" -"3262476716","3262476719","FR","FRA","FRANCE" -"3262476720","3262476723","IT","ITA","ITALY" -"3262476724","3262476727","FR","FRA","FRANCE" -"3262476728","3262476731","US","USA","UNITED STATES" -"3262476732","3262476735","DE","DEU","GERMANY" -"3262476736","3262476739","CA","CAN","CANADA" -"3262476740","3262476743","DE","DEU","GERMANY" -"3262476744","3262476747","CH","CHE","SWITZERLAND" -"3262476748","3262476751","BE","BEL","BELGIUM" -"3262476752","3262476755","ES","ESP","SPAIN" -"3262476756","3262476759","DE","DEU","GERMANY" -"3262476760","3262476763","US","USA","UNITED STATES" -"3262476764","3262476767","ES","ESP","SPAIN" -"3262476768","3262476771","DK","DNK","DENMARK" -"3262476772","3262476779","US","USA","UNITED STATES" -"3262476780","3262476783","DE","DEU","GERMANY" -"3262476784","3262476787","IT","ITA","ITALY" -"3262476788","3262476791","US","USA","UNITED STATES" -"3262476792","3262476795","ES","ESP","SPAIN" -"3262476796","3262476799","DE","DEU","GERMANY" -"3262476800","3262476803","CA","CAN","CANADA" -"3262476804","3262476807","TR","TUR","TURKEY" -"3262476808","3262476827","DE","DEU","GERMANY" -"3262476828","3262476831","LU","LUX","LUXEMBOURG" -"3262476832","3262476839","DE","DEU","GERMANY" -"3262476840","3262476843","IT","ITA","ITALY" -"3262476844","3262476847","DE","DEU","GERMANY" -"3262476848","3262476851","CH","CHE","SWITZERLAND" -"3262476852","3262476855","US","USA","UNITED STATES" -"3262476856","3262476859","ES","ESP","SPAIN" -"3262476860","3262476863","DE","DEU","GERMANY" -"3262476864","3262476867","US","USA","UNITED STATES" -"3262476868","3262476883","DE","DEU","GERMANY" -"3262476884","3262476887","FR","FRA","FRANCE" -"3262476888","3262476891","DE","DEU","GERMANY" -"3262476892","3262476895","HU","HUN","HUNGARY" -"3262476896","3262476899","SK","SVK","SLOVAKIA" -"3262476900","3262476903","FR","FRA","FRANCE" -"3262476904","3262476907","DE","DEU","GERMANY" -"3262476908","3262476911","NL","NLD","NETHERLANDS" -"3262476912","3262476915","CH","CHE","SWITZERLAND" -"3262476916","3262476919","DE","DEU","GERMANY" -"3262476920","3262476923","US","USA","UNITED STATES" -"3262476924","3262476927","AT","AUT","AUSTRIA" -"3262476928","3262476935","DE","DEU","GERMANY" -"3262476936","3262476939","AT","AUT","AUSTRIA" -"3262476940","3262476951","DE","DEU","GERMANY" -"3262476952","3262476955","NL","NLD","NETHERLANDS" -"3262476956","3262476971","DE","DEU","GERMANY" -"3262476972","3262476975","US","USA","UNITED STATES" -"3262476976","3262476979","BE","BEL","BELGIUM" -"3262476980","3262476983","DE","DEU","GERMANY" -"3262476984","3262476987","FR","FRA","FRANCE" -"3262476988","3262476995","DE","DEU","GERMANY" -"3262476996","3262476999","IT","ITA","ITALY" -"3262477000","3262477003","GB","GBR","UNITED KINGDOM" -"3262477004","3262477007","DE","DEU","GERMANY" -"3262477008","3262477011","CA","CAN","CANADA" -"3262477012","3262477015","DE","DEU","GERMANY" -"3262477016","3262477019","CH","CHE","SWITZERLAND" -"3262477020","3262477023","DE","DEU","GERMANY" -"3262477024","3262477035","FR","FRA","FRANCE" -"3262477036","3262477039","DK","DNK","DENMARK" -"3262477040","3262477043","US","USA","UNITED STATES" -"3262477044","3262477047","GB","GBR","UNITED KINGDOM" -"3262477048","3262477059","DE","DEU","GERMANY" -"3262477060","3262477063","US","USA","UNITED STATES" -"3262477064","3262477067","DE","DEU","GERMANY" -"3262477068","3262477071","AT","AUT","AUSTRIA" -"3262477072","3262477075","PT","PRT","PORTUGAL" -"3262477076","3262477083","FR","FRA","FRANCE" -"3262477084","3262477087","NL","NLD","NETHERLANDS" -"3262477088","3262477091","DE","DEU","GERMANY" -"3262477092","3262477095","BE","BEL","BELGIUM" -"3262477096","3262477107","DE","DEU","GERMANY" -"3262477108","3262477111","ES","ESP","SPAIN" -"3262477112","3262477131","DE","DEU","GERMANY" -"3262477132","3262477135","SK","SVK","SLOVAKIA" -"3262477136","3262477147","DE","DEU","GERMANY" -"3262477148","3262477151","FR","FRA","FRANCE" -"3262477152","3262477155","CH","CHE","SWITZERLAND" -"3262477156","3262477159","ES","ESP","SPAIN" -"3262477160","3262477163","US","USA","UNITED STATES" -"3262477164","3262477167","FR","FRA","FRANCE" -"3262477168","3262477171","NL","NLD","NETHERLANDS" -"3262477172","3262477175","DE","DEU","GERMANY" -"3262477176","3262477187","US","USA","UNITED STATES" -"3262477188","3262477191","IT","ITA","ITALY" -"3262477192","3262477195","GB","GBR","UNITED KINGDOM" -"3262477196","3262477199","PL","POL","POLAND" -"3262477200","3262477203","GB","GBR","UNITED KINGDOM" -"3262477204","3262477207","US","USA","UNITED STATES" -"3262477208","3262477211","ES","ESP","SPAIN" -"3262477212","3262477215","AT","AUT","AUSTRIA" -"3262477216","3262477219","US","USA","UNITED STATES" -"3262477220","3262477223","KW","KWT","KUWAIT" -"3262477224","3262477227","BE","BEL","BELGIUM" -"3262477228","3262477231","GB","GBR","UNITED KINGDOM" -"3262477232","3262477239","DE","DEU","GERMANY" -"3262477240","3262477243","CA","CAN","CANADA" -"3262477244","3262477247","US","USA","UNITED STATES" -"3262477248","3262477251","AR","ARG","ARGENTINA" -"3262477252","3262477255","ES","ESP","SPAIN" -"3262477256","3262477259","DE","DEU","GERMANY" -"3262477260","3262477263","GB","GBR","UNITED KINGDOM" -"3262477264","3262477267","GR","GRC","GREECE" -"3262477268","3262477271","NL","NLD","NETHERLANDS" -"3262477272","3262477275","US","USA","UNITED STATES" -"3262477276","3262477279","NL","NLD","NETHERLANDS" -"3262477280","3262477283","DE","DEU","GERMANY" -"3262477284","3262477287","FR","FRA","FRANCE" -"3262477288","3262477291","BM","BMU","BERMUDA" -"3262477292","3262477295","US","USA","UNITED STATES" -"3262477296","3262477299","DK","DNK","DENMARK" -"3262477300","3262477303","IT","ITA","ITALY" -"3262477304","3262477307","FR","FRA","FRANCE" -"3262477308","3262477311","DE","DEU","GERMANY" -"3262477312","3262477315","ES","ESP","SPAIN" -"3262477316","3262477319","HU","HUN","HUNGARY" -"3262477320","3262477327","US","USA","UNITED STATES" -"3262477328","3262477331","HU","HUN","HUNGARY" -"3262477332","3262477335","DE","DEU","GERMANY" -"3262477336","3262477339","CA","CAN","CANADA" -"3262477340","3262477343","US","USA","UNITED STATES" -"3262477344","3262477347","CH","CHE","SWITZERLAND" -"3262477348","3262477355","DE","DEU","GERMANY" -"3262477356","3262477359","PL","POL","POLAND" -"3262477360","3262477363","LU","LUX","LUXEMBOURG" -"3262477364","3262477367","ES","ESP","SPAIN" -"3262477368","3262477371","US","USA","UNITED STATES" -"3262477372","3262477375","FR","FRA","FRANCE" -"3262477376","3262477379","AT","AUT","AUSTRIA" -"3262477380","3262477383","US","USA","UNITED STATES" -"3262477384","3262477387","FR","FRA","FRANCE" -"3262477388","3262477399","DE","DEU","GERMANY" -"3262477400","3262477403","CH","CHE","SWITZERLAND" -"3262477404","3262477407","DE","DEU","GERMANY" -"3262477408","3262477411","US","USA","UNITED STATES" -"3262477412","3262477415","SA","SAU","SAUDI ARABIA" -"3262477416","3262477419","DK","DNK","DENMARK" -"3262477420","3262477427","DE","DEU","GERMANY" -"3262477428","3262477431","US","USA","UNITED STATES" -"3262477432","3262477439","DE","DEU","GERMANY" -"3262477440","3262477443","CH","CHE","SWITZERLAND" -"3262477444","3262477447","BE","BEL","BELGIUM" -"3262477448","3262477451","AR","ARG","ARGENTINA" -"3262477452","3262477455","PT","PRT","PORTUGAL" -"3262477456","3262477467","DE","DEU","GERMANY" -"3262477468","3262477471","AT","AUT","AUSTRIA" -"3262477472","3262477475","HU","HUN","HUNGARY" -"3262477476","3262477479","FR","FRA","FRANCE" -"3262477480","3262477483","SE","SWE","SWEDEN" -"3262477484","3262477487","NL","NLD","NETHERLANDS" -"3262477488","3262477499","DE","DEU","GERMANY" -"3262477500","3262477503","ES","ESP","SPAIN" -"3262477504","3262477507","FR","FRA","FRANCE" -"3262477508","3262477511","CH","CHE","SWITZERLAND" -"3262477512","3262477519","US","USA","UNITED STATES" -"3262477520","3262477523","DE","DEU","GERMANY" -"3262477524","3262477527","IT","ITA","ITALY" -"3262477528","3262477543","DE","DEU","GERMANY" -"3262477544","3262477547","US","USA","UNITED STATES" -"3262477548","3262477551","DE","DEU","GERMANY" -"3262477552","3262477555","BR","BRA","BRAZIL" -"3262477556","3262477559","US","USA","UNITED STATES" -"3262477560","3262477563","CA","CAN","CANADA" -"3262477564","3262477571","BE","BEL","BELGIUM" -"3262477572","3262477575","NL","NLD","NETHERLANDS" -"3262477576","3262477579","DE","DEU","GERMANY" -"3262477580","3262477583","NO","NOR","NORWAY" -"3262477584","3262477587","CA","CAN","CANADA" -"3262477588","3262477591","FR","FRA","FRANCE" -"3262477592","3262477595","GB","GBR","UNITED KINGDOM" -"3262477596","3262477599","CH","CHE","SWITZERLAND" -"3262477600","3262477603","NL","NLD","NETHERLANDS" -"3262477604","3262477607","IT","ITA","ITALY" -"3262477608","3262477611","DE","DEU","GERMANY" -"3262477612","3262477615","US","USA","UNITED STATES" -"3262477616","3262477619","IT","ITA","ITALY" -"3262477620","3262477623","DE","DEU","GERMANY" -"3262477624","3262477627","FR","FRA","FRANCE" -"3262477628","3262477631","CH","CHE","SWITZERLAND" -"3262477632","3262477635","AT","AUT","AUSTRIA" -"3262477636","3262477639","VE","VEN","VENEZUELA" -"3262477640","3262477643","DE","DEU","GERMANY" -"3262477644","3262477647","GB","GBR","UNITED KINGDOM" -"3262477648","3262477655","DE","DEU","GERMANY" -"3262477656","3262477659","NL","NLD","NETHERLANDS" -"3262477660","3262477671","US","USA","UNITED STATES" -"3262477672","3262477675","NL","NLD","NETHERLANDS" -"3262477676","3262477687","DE","DEU","GERMANY" -"3262477688","3262477691","FR","FRA","FRANCE" -"3262477692","3262477695","DE","DEU","GERMANY" -"3262477696","3262477699","NL","NLD","NETHERLANDS" -"3262477700","3262477703","FR","FRA","FRANCE" -"3262477704","3262477707","IT","ITA","ITALY" -"3262477708","3262477711","GB","GBR","UNITED KINGDOM" -"3262477712","3262477727","DE","DEU","GERMANY" -"3262477728","3262477731","AT","AUT","AUSTRIA" -"3262477732","3262477735","NL","NLD","NETHERLANDS" -"3262477736","3262477739","BR","BRA","BRAZIL" -"3262477740","3262477743","NL","NLD","NETHERLANDS" -"3262477744","3262477751","CH","CHE","SWITZERLAND" -"3262477752","3262477759","DE","DEU","GERMANY" -"3262477760","3262477763","US","USA","UNITED STATES" -"3262477764","3262477767","VE","VEN","VENEZUELA" -"3262477768","3262477771","DE","DEU","GERMANY" -"3262477772","3262477775","CA","CAN","CANADA" -"3262477776","3262477779","CZ","CZE","CZECH REPUBLIC" -"3262477780","3262477783","GB","GBR","UNITED KINGDOM" -"3262477784","3262477787","DE","DEU","GERMANY" -"3262477788","3262477791","US","USA","UNITED STATES" -"3262477792","3262477795","GB","GBR","UNITED KINGDOM" -"3262477796","3262477799","FR","FRA","FRANCE" -"3262477800","3262477803","BE","BEL","BELGIUM" -"3262477804","3262477807","CH","CHE","SWITZERLAND" -"3262477808","3262477811","CA","CAN","CANADA" -"3262477812","3262477819","US","USA","UNITED STATES" -"3262477820","3262477823","DE","DEU","GERMANY" -"3262477824","3262477827","GB","GBR","UNITED KINGDOM" -"3262477828","3262477831","US","USA","UNITED STATES" -"3262477832","3262477835","CH","CHE","SWITZERLAND" -"3262477836","3262477839","ES","ESP","SPAIN" -"3262477840","3262477843","GB","GBR","UNITED KINGDOM" -"3262477844","3262477847","DE","DEU","GERMANY" -"3262477848","3262477851","GB","GBR","UNITED KINGDOM" -"3262477852","3262477855","DE","DEU","GERMANY" -"3262477856","3262477859","CA","CAN","CANADA" -"3262477860","3262477863","US","USA","UNITED STATES" -"3262477864","3262477867","TR","TUR","TURKEY" -"3262477868","3262477871","HU","HUN","HUNGARY" -"3262477872","3262477883","DE","DEU","GERMANY" -"3262477884","3262477891","US","USA","UNITED STATES" -"3262477892","3262477895","IT","ITA","ITALY" -"3262477896","3262477899","US","USA","UNITED STATES" -"3262477900","3262477903","DE","DEU","GERMANY" -"3262477904","3262477907","GB","GBR","UNITED KINGDOM" -"3262477908","3262477911","CH","CHE","SWITZERLAND" -"3262477912","3262477915","US","USA","UNITED STATES" -"3262477916","3262477919","DE","DEU","GERMANY" -"3262477920","3262477923","US","USA","UNITED STATES" -"3262477924","3262477927","HU","HUN","HUNGARY" -"3262477928","3262477931","DE","DEU","GERMANY" -"3262477932","3262477935","US","USA","UNITED STATES" -"3262477936","3262477939","DE","DEU","GERMANY" -"3262477940","3262477943","CA","CAN","CANADA" -"3262477944","3262477955","DE","DEU","GERMANY" -"3262477956","3262477959","US","USA","UNITED STATES" -"3262477960","3262477963","CA","CAN","CANADA" -"3262477964","3262477967","DE","DEU","GERMANY" -"3262477968","3262477971","IT","ITA","ITALY" -"3262477972","3262477987","DE","DEU","GERMANY" -"3262477988","3262477991","NL","NLD","NETHERLANDS" -"3262477992","3262477999","DE","DEU","GERMANY" -"3262478000","3262478003","US","USA","UNITED STATES" -"3262478004","3262478007","FR","FRA","FRANCE" -"3262478008","3262478011","IT","ITA","ITALY" -"3262478012","3262478015","PE","PER","PERU" -"3262478016","3262478019","CH","CHE","SWITZERLAND" -"3262478020","3262478027","DE","DEU","GERMANY" -"3262478028","3262478031","SE","SWE","SWEDEN" -"3262478032","3262478035","AT","AUT","AUSTRIA" -"3262478036","3262478039","DE","DEU","GERMANY" -"3262478040","3262478043","NL","NLD","NETHERLANDS" -"3262478044","3262478047","IS","ISL","ICELAND" -"3262478048","3262478055","DE","DEU","GERMANY" -"3262478056","3262478063","CH","CHE","SWITZERLAND" -"3262478064","3262478067","DE","DEU","GERMANY" -"3262478068","3262478071","KE","KEN","KENYA" -"3262478072","3262478081","DE","DEU","GERMANY" -"3262478082","3262478082","ES","ESP","SPAIN" -"3262478083","3262478083","SA","SAU","SAUDI ARABIA" -"3262478084","3262478084","TR","TUR","TURKEY" -"3262478085","3262478085","FR","FRA","FRANCE" -"3262478086","3262478088","DE","DEU","GERMANY" -"3262478089","3262478089","AT","AUT","AUSTRIA" -"3262478090","3262478090","DE","DEU","GERMANY" -"3262478091","3262478091","HU","HUN","HUNGARY" -"3262478092","3262478092","PT","PRT","PORTUGAL" -"3262478093","3262478093","SA","SAU","SAUDI ARABIA" -"3262478094","3262478094","PT","PRT","PORTUGAL" -"3262478095","3262478095","DE","DEU","GERMANY" -"3262478096","3262478096","PL","POL","POLAND" -"3262478097","3262478097","KE","KEN","KENYA" -"3262478098","3262478098","TR","TUR","TURKEY" -"3262478099","3262478099","DE","DEU","GERMANY" -"3262478100","3262478100","TR","TUR","TURKEY" -"3262478101","3262478101","ZW","ZWE","ZIMBABWE" -"3262478102","3262478102","TR","TUR","TURKEY" -"3262478103","3262478103","DE","DEU","GERMANY" -"3262478104","3262478104","TR","TUR","TURKEY" -"3262478105","3262478105","PL","POL","POLAND" -"3262478106","3262478106","IT","ITA","ITALY" -"3262478107","3262478107","TR","TUR","TURKEY" -"3262478108","3262478108","DE","DEU","GERMANY" -"3262478109","3262478109","AE","ARE","UNITED ARAB EMIRATES" -"3262478110","3262478113","DE","DEU","GERMANY" -"3262478114","3262478114","TR","TUR","TURKEY" -"3262478115","3262478115","DE","DEU","GERMANY" -"3262478116","3262478116","NO","NOR","NORWAY" -"3262478117","3262478117","NA","NAM","NAMIBIA" -"3262478118","3262478118","DE","DEU","GERMANY" -"3262478119","3262478119","SA","SAU","SAUDI ARABIA" -"3262478120","3262478120","NA","NAM","NAMIBIA" -"3262478121","3262478121","AO","AGO","ANGOLA" -"3262478122","3262478122","NA","NAM","NAMIBIA" -"3262478123","3262478123","CY","CYP","CYPRUS" -"3262478124","3262478124","DE","DEU","GERMANY" -"3262478125","3262478125","PT","PRT","PORTUGAL" -"3262478126","3262478126","CY","CYP","CYPRUS" -"3262478127","3262478127","GR","GRC","GREECE" -"3262478128","3262478128","CH","CHE","SWITZERLAND" -"3262478129","3262478129","HU","HUN","HUNGARY" -"3262478130","3262478130","FR","FRA","FRANCE" -"3262478131","3262478131","SK","SVK","SLOVAKIA" -"3262478132","3262478132","ES","ESP","SPAIN" -"3262478133","3262478133","TR","TUR","TURKEY" -"3262478134","3262478134","ES","ESP","SPAIN" -"3262478135","3262478135","TR","TUR","TURKEY" -"3262478136","3262478137","HU","HUN","HUNGARY" -"3262478138","3262478138","TR","TUR","TURKEY" -"3262478139","3262478139","MZ","MOZ","MOZAMBIQUE" -"3262478140","3262478140","FR","FRA","FRANCE" -"3262478141","3262478143","TR","TUR","TURKEY" -"3262478144","3262478145","DE","DEU","GERMANY" -"3262478146","3262478146","GR","GRC","GREECE" -"3262478147","3262478147","FR","FRA","FRANCE" -"3262478148","3262478148","KZ","KAZ","KAZAKHSTAN" -"3262478149","3262478149","UA","UKR","UKRAINE" -"3262478150","3262478150","SA","SAU","SAUDI ARABIA" -"3262478151","3262478151","DE","DEU","GERMANY" -"3262478152","3262478152","PL","POL","POLAND" -"3262478153","3262478153","TR","TUR","TURKEY" -"3262478154","3262478154","FR","FRA","FRANCE" -"3262478155","3262478155","CU","CUB","CUBA" -"3262478156","3262478156","TR","TUR","TURKEY" -"3262478157","3262478157","DE","DEU","GERMANY" -"3262478158","3262478158","IT","ITA","ITALY" -"3262478159","3262478159","IL","ISR","ISRAEL" -"3262478160","3262478160","TR","TUR","TURKEY" -"3262478161","3262478161","ZW","ZWE","ZIMBABWE" -"3262478162","3262478162","SA","SAU","SAUDI ARABIA" -"3262478163","3262478163","FR","FRA","FRANCE" -"3262478164","3262478164","ZW","ZWE","ZIMBABWE" -"3262478165","3262478165","SK","SVK","SLOVAKIA" -"3262478166","3262478166","TR","TUR","TURKEY" -"3262478167","3262478167","KZ","KAZ","KAZAKHSTAN" -"3262478168","3262478168","ES","ESP","SPAIN" -"3262478169","3262478169","PL","POL","POLAND" -"3262478170","3262478171","FR","FRA","FRANCE" -"3262478172","3262478172","GR","GRC","GREECE" -"3262478173","3262478174","TR","TUR","TURKEY" -"3262478175","3262478175","DE","DEU","GERMANY" -"3262478176","3262478176","TR","TUR","TURKEY" -"3262478177","3262478177","DE","DEU","GERMANY" -"3262478178","3262478178","MZ","MOZ","MOZAMBIQUE" -"3262478179","3262478180","TR","TUR","TURKEY" -"3262478181","3262478181","CN","CHN","CHINA" -"3262478182","3262478182","ES","ESP","SPAIN" -"3262478183","3262478183","PL","POL","POLAND" -"3262478184","3262478184","MZ","MOZ","MOZAMBIQUE" -"3262478185","3262478185","PL","POL","POLAND" -"3262478186","3262478186","ES","ESP","SPAIN" -"3262478187","3262478187","PT","PRT","PORTUGAL" -"3262478188","3262478188","TR","TUR","TURKEY" -"3262478189","3262478189","NA","NAM","NAMIBIA" -"3262478190","3262478190","DE","DEU","GERMANY" -"3262478191","3262478192","ZA","ZAF","SOUTH AFRICA" -"3262478193","3262478194","NA","NAM","NAMIBIA" -"3262478195","3262478207","DE","DEU","GERMANY" -"3262478208","3262478211","ES","ESP","SPAIN" -"3262478212","3262478215","NL","NLD","NETHERLANDS" -"3262478216","3262478219","FR","FRA","FRANCE" -"3262478220","3262478223","SE","SWE","SWEDEN" -"3262478224","3262478227","GB","GBR","UNITED KINGDOM" -"3262478228","3262478231","ES","ESP","SPAIN" -"3262478232","3262478235","FR","FRA","FRANCE" -"3262478236","3262478239","IT","ITA","ITALY" -"3262478240","3262478243","FR","FRA","FRANCE" -"3262478244","3262478247","DE","DEU","GERMANY" -"3262478248","3262478251","IT","ITA","ITALY" -"3262478252","3262478255","CH","CHE","SWITZERLAND" -"3262478256","3262478259","ES","ESP","SPAIN" -"3262478260","3262478263","DE","DEU","GERMANY" -"3262478264","3262478267","IT","ITA","ITALY" -"3262478268","3262478271","ES","ESP","SPAIN" -"3262478272","3262478275","CH","CHE","SWITZERLAND" -"3262478276","3262478299","DE","DEU","GERMANY" -"3262478300","3262478303","ES","ESP","SPAIN" -"3262478304","3262478307","PT","PRT","PORTUGAL" -"3262478308","3262478311","ES","ESP","SPAIN" -"3262478312","3262478319","DE","DEU","GERMANY" -"3262478320","3262478323","GB","GBR","UNITED KINGDOM" -"3262478324","3262478327","BE","BEL","BELGIUM" -"3262478328","3262478331","ES","ESP","SPAIN" -"3262478332","3262478335","GB","GBR","UNITED KINGDOM" -"3262478336","3262478337","DE","DEU","GERMANY" -"3262478338","3262478338","PL","POL","POLAND" -"3262478339","3262478343","DE","DEU","GERMANY" -"3262478344","3262478344","IT","ITA","ITALY" -"3262478345","3262478345","CH","CHE","SWITZERLAND" -"3262478346","3262478346","PT","PRT","PORTUGAL" -"3262478347","3262478347","AO","AGO","ANGOLA" -"3262478348","3262478348","DK","DNK","DENMARK" -"3262478349","3262478349","BE","BEL","BELGIUM" -"3262478350","3262478350","AT","AUT","AUSTRIA" -"3262478351","3262478351","TR","TUR","TURKEY" -"3262478352","3262478352","CH","CHE","SWITZERLAND" -"3262478353","3262478353","DK","DNK","DENMARK" -"3262478354","3262478354","FR","FRA","FRANCE" -"3262478355","3262478355","DE","DEU","GERMANY" -"3262478356","3262478356","FR","FRA","FRANCE" -"3262478357","3262478358","DE","DEU","GERMANY" -"3262478359","3262478360","FR","FRA","FRANCE" -"3262478361","3262478361","DE","DEU","GERMANY" -"3262478362","3262478362","FR","FRA","FRANCE" -"3262478363","3262478363","CH","CHE","SWITZERLAND" -"3262478364","3262478364","PT","PRT","PORTUGAL" -"3262478365","3262478366","DE","DEU","GERMANY" -"3262478367","3262478367","HU","HUN","HUNGARY" -"3262478368","3262478368","DE","DEU","GERMANY" -"3262478369","3262478369","NO","NOR","NORWAY" -"3262478370","3262478370","CH","CHE","SWITZERLAND" -"3262478371","3262478371","DE","DEU","GERMANY" -"3262478372","3262478373","CH","CHE","SWITZERLAND" -"3262478374","3262478374","PT","PRT","PORTUGAL" -"3262478375","3262478376","FR","FRA","FRANCE" -"3262478377","3262478377","DE","DEU","GERMANY" -"3262478378","3262478378","CH","CHE","SWITZERLAND" -"3262478379","3262478379","DE","DEU","GERMANY" -"3262478380","3262478381","FR","FRA","FRANCE" -"3262478382","3262478382","AE","ARE","UNITED ARAB EMIRATES" -"3262478383","3262478383","DE","DEU","GERMANY" -"3262478384","3262478384","AE","ARE","UNITED ARAB EMIRATES" -"3262478385","3262478385","ZA","ZAF","SOUTH AFRICA" -"3262478386","3262478386","DE","DEU","GERMANY" -"3262478387","3262478387","IT","ITA","ITALY" -"3262478388","3262478388","GR","GRC","GREECE" -"3262478389","3262478389","CH","CHE","SWITZERLAND" -"3262478390","3262478390","ES","ESP","SPAIN" -"3262478391","3262478391","HU","HUN","HUNGARY" -"3262478392","3262478393","DE","DEU","GERMANY" -"3262478394","3262478394","IT","ITA","ITALY" -"3262478395","3262478396","DE","DEU","GERMANY" -"3262478397","3262478397","PT","PRT","PORTUGAL" -"3262478398","3262478398","HU","HUN","HUNGARY" -"3262478399","3262478399","DE","DEU","GERMANY" -"3262478400","3262478400","GB","GBR","UNITED KINGDOM" -"3262478401","3262478401","DE","DEU","GERMANY" -"3262478402","3262478402","IT","ITA","ITALY" -"3262478403","3262478403","CZ","CZE","CZECH REPUBLIC" -"3262478404","3262478404","FI","FIN","FINLAND" -"3262478405","3262478406","GB","GBR","UNITED KINGDOM" -"3262478407","3262478412","DE","DEU","GERMANY" -"3262478413","3262478413","ES","ESP","SPAIN" -"3262478414","3262478414","PL","POL","POLAND" -"3262478415","3262478415","SE","SWE","SWEDEN" -"3262478416","3262478416","SA","SAU","SAUDI ARABIA" -"3262478417","3262478417","DE","DEU","GERMANY" -"3262478418","3262478418","AT","AUT","AUSTRIA" -"3262478419","3262478419","FR","FRA","FRANCE" -"3262478420","3262478421","DE","DEU","GERMANY" -"3262478422","3262478422","CH","CHE","SWITZERLAND" -"3262478423","3262478423","SA","SAU","SAUDI ARABIA" -"3262478424","3262478424","FR","FRA","FRANCE" -"3262478425","3262478425","IT","ITA","ITALY" -"3262478426","3262478426","NO","NOR","NORWAY" -"3262478427","3262478428","FR","FRA","FRANCE" -"3262478429","3262478429","PT","PRT","PORTUGAL" -"3262478430","3262478430","CH","CHE","SWITZERLAND" -"3262478431","3262478431","HU","HUN","HUNGARY" -"3262478432","3262478432","RE","REU","REUNION" -"3262478433","3262478433","AT","AUT","AUSTRIA" -"3262478434","3262478434","PT","PRT","PORTUGAL" -"3262478435","3262478435","IT","ITA","ITALY" -"3262478436","3262478437","DE","DEU","GERMANY" -"3262478438","3262478438","ZA","ZAF","SOUTH AFRICA" -"3262478439","3262478439","DE","DEU","GERMANY" -"3262478440","3262478440","SE","SWE","SWEDEN" -"3262478441","3262478441","FR","FRA","FRANCE" -"3262478442","3262478442","IT","ITA","ITALY" -"3262478443","3262478443","DE","DEU","GERMANY" -"3262478444","3262478444","AT","AUT","AUSTRIA" -"3262478445","3262478445","PT","PRT","PORTUGAL" -"3262478446","3262478447","DE","DEU","GERMANY" -"3262478448","3262478448","ZA","ZAF","SOUTH AFRICA" -"3262478449","3262478449","DE","DEU","GERMANY" -"3262478450","3262478450","TR","TUR","TURKEY" -"3262478451","3262478451","FR","FRA","FRANCE" -"3262478452","3262478452","IL","ISR","ISRAEL" -"3262478453","3262478453","DE","DEU","GERMANY" -"3262478454","3262478454","SE","SWE","SWEDEN" -"3262478455","3262478455","IT","ITA","ITALY" -"3262478456","3262478456","DE","DEU","GERMANY" -"3262478457","3262478457","GB","GBR","UNITED KINGDOM" -"3262478458","3262478458","HU","HUN","HUNGARY" -"3262478459","3262478459","ES","ESP","SPAIN" -"3262478460","3262478460","CY","CYP","CYPRUS" -"3262478461","3262478465","DE","DEU","GERMANY" -"3262478466","3262478466","FR","FRA","FRANCE" -"3262478467","3262478467","HU","HUN","HUNGARY" -"3262478468","3262478468","DE","DEU","GERMANY" -"3262478469","3262478469","FR","FRA","FRANCE" -"3262478470","3262478470","DE","DEU","GERMANY" -"3262478471","3262478471","ES","ESP","SPAIN" -"3262478472","3262478472","DE","DEU","GERMANY" -"3262478473","3262478473","FR","FRA","FRANCE" -"3262478474","3262478474","HU","HUN","HUNGARY" -"3262478475","3262478476","DE","DEU","GERMANY" -"3262478477","3262478478","CH","CHE","SWITZERLAND" -"3262478479","3262478479","DK","DNK","DENMARK" -"3262478480","3262478480","DE","DEU","GERMANY" -"3262478481","3262478481","DK","DNK","DENMARK" -"3262478482","3262478482","IT","ITA","ITALY" -"3262478483","3262478483","FR","FRA","FRANCE" -"3262478484","3262478484","DE","DEU","GERMANY" -"3262478485","3262478485","CH","CHE","SWITZERLAND" -"3262478486","3262478487","FR","FRA","FRANCE" -"3262478488","3262478488","HU","HUN","HUNGARY" -"3262478489","3262478489","HR","HRV","CROATIA" -"3262478490","3262478490","SE","SWE","SWEDEN" -"3262478491","3262478491","DE","DEU","GERMANY" -"3262478492","3262478492","CH","CHE","SWITZERLAND" -"3262478493","3262478493","DE","DEU","GERMANY" -"3262478494","3262478494","FR","FRA","FRANCE" -"3262478495","3262478495","DE","DEU","GERMANY" -"3262478496","3262478496","PT","PRT","PORTUGAL" -"3262478497","3262478500","DE","DEU","GERMANY" -"3262478501","3262478501","CH","CHE","SWITZERLAND" -"3262478502","3262478502","SE","SWE","SWEDEN" -"3262478503","3262478503","ZA","ZAF","SOUTH AFRICA" -"3262478504","3262478504","FR","FRA","FRANCE" -"3262478505","3262478505","IT","ITA","ITALY" -"3262478506","3262478506","PT","PRT","PORTUGAL" -"3262478507","3262478507","IT","ITA","ITALY" -"3262478508","3262478508","PT","PRT","PORTUGAL" -"3262478509","3262478509","NL","NLD","NETHERLANDS" -"3262478510","3262478513","DE","DEU","GERMANY" -"3262478514","3262478514","SE","SWE","SWEDEN" -"3262478515","3262478515","PT","PRT","PORTUGAL" -"3262478516","3262478516","ES","ESP","SPAIN" -"3262478517","3262478519","DE","DEU","GERMANY" -"3262478520","3262478520","CH","CHE","SWITZERLAND" -"3262478521","3262478521","NL","NLD","NETHERLANDS" -"3262478522","3262478522","QA","QAT","QATAR" -"3262478523","3262478523","FR","FRA","FRANCE" -"3262478524","3262478524","ES","ESP","SPAIN" -"3262478525","3262478526","DE","DEU","GERMANY" -"3262478527","3262478527","ES","ESP","SPAIN" -"3262478528","3262478528","NL","NLD","NETHERLANDS" -"3262478529","3262478529","ES","ESP","SPAIN" -"3262478530","3262478530","DE","DEU","GERMANY" -"3262478531","3262478531","FR","FRA","FRANCE" -"3262478532","3262478536","DE","DEU","GERMANY" -"3262478537","3262478537","HU","HUN","HUNGARY" -"3262478538","3262478538","DE","DEU","GERMANY" -"3262478539","3262478539","FI","FIN","FINLAND" -"3262478540","3262478540","HU","HUN","HUNGARY" -"3262478541","3262478542","DE","DEU","GERMANY" -"3262478543","3262478543","AT","AUT","AUSTRIA" -"3262478544","3262478544","NL","NLD","NETHERLANDS" -"3262478545","3262478546","DE","DEU","GERMANY" -"3262478547","3262478547","FR","FRA","FRANCE" -"3262478548","3262478548","ES","ESP","SPAIN" -"3262478549","3262478549","FR","FRA","FRANCE" -"3262478550","3262478550","DE","DEU","GERMANY" -"3262478551","3262478551","PL","POL","POLAND" -"3262478552","3262478552","HU","HUN","HUNGARY" -"3262478553","3262478553","PL","POL","POLAND" -"3262478554","3262478554","SE","SWE","SWEDEN" -"3262478555","3262478555","DE","DEU","GERMANY" -"3262478556","3262478556","GB","GBR","UNITED KINGDOM" -"3262478557","3262478557","DE","DEU","GERMANY" -"3262478558","3262478558","IT","ITA","ITALY" -"3262478559","3262478560","DE","DEU","GERMANY" -"3262478561","3262478562","FR","FRA","FRANCE" -"3262478563","3262478563","DK","DNK","DENMARK" -"3262478564","3262478564","RU","RUS","RUSSIAN FEDERATION" -"3262478565","3262478566","FR","FRA","FRANCE" -"3262478567","3262478567","HU","HUN","HUNGARY" -"3262478568","3262478568","DE","DEU","GERMANY" -"3262478569","3262478569","TR","TUR","TURKEY" -"3262478570","3262478570","FR","FRA","FRANCE" -"3262478571","3262478594","DE","DEU","GERMANY" -"3262478595","3262478595","CH","CHE","SWITZERLAND" -"3262478596","3262478596","PT","PRT","PORTUGAL" -"3262478597","3262478597","SE","SWE","SWEDEN" -"3262478598","3262478599","DE","DEU","GERMANY" -"3262478600","3262478600","IT","ITA","ITALY" -"3262478601","3262478601","KW","KWT","KUWAIT" -"3262478602","3262478602","FR","FRA","FRANCE" -"3262478603","3262478604","DE","DEU","GERMANY" -"3262478605","3262478605","ES","ESP","SPAIN" -"3262478606","3262478606","FI","FIN","FINLAND" -"3262478607","3262478607","GR","GRC","GREECE" -"3262478608","3262478608","DE","DEU","GERMANY" -"3262478609","3262478609","IT","ITA","ITALY" -"3262478610","3262478610","ES","ESP","SPAIN" -"3262478611","3262478611","HU","HUN","HUNGARY" -"3262478612","3262478620","DE","DEU","GERMANY" -"3262478621","3262478621","SE","SWE","SWEDEN" -"3262478622","3262478622","TR","TUR","TURKEY" -"3262478623","3262478623","ES","ESP","SPAIN" -"3262478624","3262478624","FR","FRA","FRANCE" -"3262478625","3262478625","DE","DEU","GERMANY" -"3262478626","3262478626","HU","HUN","HUNGARY" -"3262478627","3262478627","DE","DEU","GERMANY" -"3262478628","3262478628","HU","HUN","HUNGARY" -"3262478629","3262478629","DE","DEU","GERMANY" -"3262478630","3262478630","FR","FRA","FRANCE" -"3262478631","3262478631","PL","POL","POLAND" -"3262478632","3262478632","AN","ANT","NETHERLANDS ANTILLES" -"3262478633","3262478633","AT","AUT","AUSTRIA" -"3262478634","3262478634","ES","ESP","SPAIN" -"3262478635","3262478635","SA","SAU","SAUDI ARABIA" -"3262478636","3262478636","CH","CHE","SWITZERLAND" -"3262478637","3262478637","GB","GBR","UNITED KINGDOM" -"3262478638","3262478639","DE","DEU","GERMANY" -"3262478640","3262478640","PT","PRT","PORTUGAL" -"3262478641","3262478641","DE","DEU","GERMANY" -"3262478642","3262478642","CH","CHE","SWITZERLAND" -"3262478643","3262478643","DE","DEU","GERMANY" -"3262478644","3262478644","ES","ESP","SPAIN" -"3262478645","3262478645","DE","DEU","GERMANY" -"3262478646","3262478646","AT","AUT","AUSTRIA" -"3262478647","3262478647","FR","FRA","FRANCE" -"3262478648","3262478648","PT","PRT","PORTUGAL" -"3262478649","3262478649","CZ","CZE","CZECH REPUBLIC" -"3262478650","3262478650","ES","ESP","SPAIN" -"3262478651","3262478651","FR","FRA","FRANCE" -"3262478652","3262478653","ES","ESP","SPAIN" -"3262478654","3262478655","DE","DEU","GERMANY" -"3262478656","3262478656","PL","POL","POLAND" -"3262478657","3262478657","DE","DEU","GERMANY" -"3262478658","3262478658","ES","ESP","SPAIN" -"3262478659","3262478659","DE","DEU","GERMANY" -"3262478660","3262478660","SK","SVK","SLOVAKIA" -"3262478661","3262478661","BE","BEL","BELGIUM" -"3262478662","3262478662","TR","TUR","TURKEY" -"3262478663","3262478663","AT","AUT","AUSTRIA" -"3262478664","3262478664","ES","ESP","SPAIN" -"3262478665","3262478665","DK","DNK","DENMARK" -"3262478666","3262478666","AT","AUT","AUSTRIA" -"3262478667","3262478667","DE","DEU","GERMANY" -"3262478668","3262478668","IT","ITA","ITALY" -"3262478669","3262478670","DE","DEU","GERMANY" -"3262478671","3262478671","FR","FRA","FRANCE" -"3262478672","3262478673","DE","DEU","GERMANY" -"3262478674","3262478674","SK","SVK","SLOVAKIA" -"3262478675","3262478675","PL","POL","POLAND" -"3262478676","3262478676","CH","CHE","SWITZERLAND" -"3262478677","3262478677","HU","HUN","HUNGARY" -"3262478678","3262478678","IT","ITA","ITALY" -"3262478679","3262478679","FR","FRA","FRANCE" -"3262478680","3262478680","GB","GBR","UNITED KINGDOM" -"3262478681","3262478681","ES","ESP","SPAIN" -"3262478682","3262478682","CH","CHE","SWITZERLAND" -"3262478683","3262478683","IT","ITA","ITALY" -"3262478684","3262478684","BE","BEL","BELGIUM" -"3262478685","3262478685","DE","DEU","GERMANY" -"3262478686","3262478686","FR","FRA","FRANCE" -"3262478687","3262478687","ES","ESP","SPAIN" -"3262478688","3262478688","TR","TUR","TURKEY" -"3262478689","3262478689","GB","GBR","UNITED KINGDOM" -"3262478690","3262478690","AT","AUT","AUSTRIA" -"3262478691","3262478691","CH","CHE","SWITZERLAND" -"3262478692","3262478692","PL","POL","POLAND" -"3262478693","3262478693","TR","TUR","TURKEY" -"3262478694","3262478694","CH","CHE","SWITZERLAND" -"3262478695","3262478695","DE","DEU","GERMANY" -"3262478696","3262478696","LI","LIE","LIECHTENSTEIN" -"3262478697","3262478697","ES","ESP","SPAIN" -"3262478698","3262478698","IT","ITA","ITALY" -"3262478699","3262478699","ES","ESP","SPAIN" -"3262478700","3262478700","IT","ITA","ITALY" -"3262478701","3262478701","DE","DEU","GERMANY" -"3262478702","3262478702","CH","CHE","SWITZERLAND" -"3262478703","3262478703","FR","FRA","FRANCE" -"3262478704","3262478704","IT","ITA","ITALY" -"3262478705","3262478706","PT","PRT","PORTUGAL" -"3262478707","3262478707","ES","ESP","SPAIN" -"3262478708","3262478721","DE","DEU","GERMANY" -"3262478722","3262478722","FR","FRA","FRANCE" -"3262478723","3262478724","DE","DEU","GERMANY" -"3262478725","3262478725","IT","ITA","ITALY" -"3262478726","3262478726","FR","FRA","FRANCE" -"3262478727","3262478727","AT","AUT","AUSTRIA" -"3262478728","3262478728","NL","NLD","NETHERLANDS" -"3262478729","3262478729","SK","SVK","SLOVAKIA" -"3262478730","3262478730","IT","ITA","ITALY" -"3262478731","3262478731","PT","PRT","PORTUGAL" -"3262478732","3262478732","PL","POL","POLAND" -"3262478733","3262478733","SK","SVK","SLOVAKIA" -"3262478734","3262478735","DE","DEU","GERMANY" -"3262478736","3262478736","HU","HUN","HUNGARY" -"3262478737","3262478737","ES","ESP","SPAIN" -"3262478738","3262478738","SK","SVK","SLOVAKIA" -"3262478739","3262478739","SE","SWE","SWEDEN" -"3262478740","3262478740","FR","FRA","FRANCE" -"3262478741","3262478741","DK","DNK","DENMARK" -"3262478742","3262478742","CH","CHE","SWITZERLAND" -"3262478743","3262478743","FR","FRA","FRANCE" -"3262478744","3262478744","GR","GRC","GREECE" -"3262478745","3262478745","IT","ITA","ITALY" -"3262478746","3262478746","SE","SWE","SWEDEN" -"3262478747","3262478747","FR","FRA","FRANCE" -"3262478748","3262478748","DE","DEU","GERMANY" -"3262478749","3262478751","FR","FRA","FRANCE" -"3262478752","3262478752","PT","PRT","PORTUGAL" -"3262478753","3262478753","IE","IRL","IRELAND" -"3262478754","3262478754","ES","ESP","SPAIN" -"3262478755","3262478755","DK","DNK","DENMARK" -"3262478756","3262478756","FR","FRA","FRANCE" -"3262478757","3262478757","AT","AUT","AUSTRIA" -"3262478758","3262478758","FR","FRA","FRANCE" -"3262478759","3262478759","CH","CHE","SWITZERLAND" -"3262478760","3262478760","TR","TUR","TURKEY" -"3262478761","3262478761","HU","HUN","HUNGARY" -"3262478762","3262478762","CY","CYP","CYPRUS" -"3262478763","3262478763","ES","ESP","SPAIN" -"3262478764","3262478764","DE","DEU","GERMANY" -"3262478765","3262478766","ES","ESP","SPAIN" -"3262478767","3262478767","PT","PRT","PORTUGAL" -"3262478768","3262478768","PL","POL","POLAND" -"3262478769","3262478769","ES","ESP","SPAIN" -"3262478770","3262478770","IT","ITA","ITALY" -"3262478771","3262478771","SK","SVK","SLOVAKIA" -"3262478772","3262478772","FR","FRA","FRANCE" -"3262478773","3262478773","CZ","CZE","CZECH REPUBLIC" -"3262478774","3262478774","DE","DEU","GERMANY" -"3262478775","3262478775","CH","CHE","SWITZERLAND" -"3262478776","3262478776","ES","ESP","SPAIN" -"3262478777","3262478778","IT","ITA","ITALY" -"3262478779","3262478779","ES","ESP","SPAIN" -"3262478780","3262478780","PT","PRT","PORTUGAL" -"3262478781","3262478781","PL","POL","POLAND" -"3262478782","3262478782","MA","MAR","MOROCCO" -"3262478783","3262478783","ES","ESP","SPAIN" -"3262478784","3262478785","TR","TUR","TURKEY" -"3262478786","3262478786","DE","DEU","GERMANY" -"3262478787","3262478787","PT","PRT","PORTUGAL" -"3262478788","3262478788","NO","NOR","NORWAY" -"3262478789","3262478789","GR","GRC","GREECE" -"3262478790","3262478790","DE","DEU","GERMANY" -"3262478791","3262478791","GB","GBR","UNITED KINGDOM" -"3262478792","3262478792","PT","PRT","PORTUGAL" -"3262478793","3262478793","FR","FRA","FRANCE" -"3262478794","3262478794","PT","PRT","PORTUGAL" -"3262478795","3262478795","PL","POL","POLAND" -"3262478796","3262478796","HU","HUN","HUNGARY" -"3262478797","3262478797","CY","CYP","CYPRUS" -"3262478798","3262478798","IT","ITA","ITALY" -"3262478799","3262478799","HU","HUN","HUNGARY" -"3262478800","3262478800","PL","POL","POLAND" -"3262478801","3262478801","DE","DEU","GERMANY" -"3262478802","3262478802","IT","ITA","ITALY" -"3262478803","3262478803","ES","ESP","SPAIN" -"3262478804","3262478804","SK","SVK","SLOVAKIA" -"3262478805","3262478806","GR","GRC","GREECE" -"3262478807","3262478807","CH","CHE","SWITZERLAND" -"3262478808","3262478808","HU","HUN","HUNGARY" -"3262478809","3262478809","TR","TUR","TURKEY" -"3262478810","3262478810","CH","CHE","SWITZERLAND" -"3262478811","3262478811","FR","FRA","FRANCE" -"3262478812","3262478812","PL","POL","POLAND" -"3262478813","3262478813","LB","LBN","LEBANON" -"3262478814","3262478851","DE","DEU","GERMANY" -"3262478852","3262478853","CH","CHE","SWITZERLAND" -"3262478854","3262478855","DE","DEU","GERMANY" -"3262478856","3262478856","FR","FRA","FRANCE" -"3262478857","3262478857","LI","LIE","LIECHTENSTEIN" -"3262478858","3262478860","DE","DEU","GERMANY" -"3262478861","3262478861","FR","FRA","FRANCE" -"3262478862","3262478862","DE","DEU","GERMANY" -"3262478863","3262478863","AT","AUT","AUSTRIA" -"3262478864","3262478864","NL","NLD","NETHERLANDS" -"3262478865","3262478865","DE","DEU","GERMANY" -"3262478866","3262478866","CH","CHE","SWITZERLAND" -"3262478867","3262478867","GB","GBR","UNITED KINGDOM" -"3262478868","3262478868","IT","ITA","ITALY" -"3262478869","3262478870","FR","FRA","FRANCE" -"3262478871","3262478872","DE","DEU","GERMANY" -"3262478873","3262478873","NL","NLD","NETHERLANDS" -"3262478874","3262478874","AT","AUT","AUSTRIA" -"3262478875","3262478875","DE","DEU","GERMANY" -"3262478876","3262478876","GB","GBR","UNITED KINGDOM" -"3262478877","3262478877","DE","DEU","GERMANY" -"3262478878","3262478878","AT","AUT","AUSTRIA" -"3262478879","3262478881","DE","DEU","GERMANY" -"3262478882","3262478882","GR","GRC","GREECE" -"3262478883","3262478886","DE","DEU","GERMANY" -"3262478887","3262478887","NL","NLD","NETHERLANDS" -"3262478888","3262478888","DK","DNK","DENMARK" -"3262478889","3262478890","FR","FRA","FRANCE" -"3262478891","3262478893","DE","DEU","GERMANY" -"3262478894","3262478894","AT","AUT","AUSTRIA" -"3262478895","3262478895","DE","DEU","GERMANY" -"3262478896","3262478896","NL","NLD","NETHERLANDS" -"3262478897","3262478897","FR","FRA","FRANCE" -"3262478898","3262478898","GB","GBR","UNITED KINGDOM" -"3262478899","3262478899","SE","SWE","SWEDEN" -"3262478900","3262478900","GB","GBR","UNITED KINGDOM" -"3262478901","3262478901","DE","DEU","GERMANY" -"3262478902","3262478902","IT","ITA","ITALY" -"3262478903","3262478904","DE","DEU","GERMANY" -"3262478905","3262478905","SE","SWE","SWEDEN" -"3262478906","3262478909","DE","DEU","GERMANY" -"3262478910","3262478910","DK","DNK","DENMARK" -"3262478911","3262478911","BH","BHR","BAHRAIN" -"3262478912","3262478912","NL","NLD","NETHERLANDS" -"3262478913","3262478913","FR","FRA","FRANCE" -"3262478914","3262478914","DE","DEU","GERMANY" -"3262478915","3262478915","NL","NLD","NETHERLANDS" -"3262478916","3262478919","DE","DEU","GERMANY" -"3262478920","3262478920","ZA","ZAF","SOUTH AFRICA" -"3262478921","3262478921","AT","AUT","AUSTRIA" -"3262478922","3262478924","DE","DEU","GERMANY" -"3262478925","3262478925","NL","NLD","NETHERLANDS" -"3262478926","3262478926","AT","AUT","AUSTRIA" -"3262478927","3262478927","PT","PRT","PORTUGAL" -"3262478928","3262478928","DK","DNK","DENMARK" -"3262478929","3262478929","GB","GBR","UNITED KINGDOM" -"3262478930","3262478931","DE","DEU","GERMANY" -"3262478932","3262478932","CH","CHE","SWITZERLAND" -"3262478933","3262478935","DE","DEU","GERMANY" -"3262478936","3262478937","CH","CHE","SWITZERLAND" -"3262478938","3262478938","NL","NLD","NETHERLANDS" -"3262478939","3262478939","GB","GBR","UNITED KINGDOM" -"3262478940","3262478940","NL","NLD","NETHERLANDS" -"3262478941","3262478941","DE","DEU","GERMANY" -"3262478942","3262478942","BE","BEL","BELGIUM" -"3262478943","3262478943","SI","SVN","SLOVENIA" -"3262478944","3262478945","DE","DEU","GERMANY" -"3262478946","3262478946","IE","IRL","IRELAND" -"3262478947","3262478947","DE","DEU","GERMANY" -"3262478948","3262478948","IT","ITA","ITALY" -"3262478949","3262478949","SE","SWE","SWEDEN" -"3262478950","3262478952","DE","DEU","GERMANY" -"3262478953","3262478953","AT","AUT","AUSTRIA" -"3262478954","3262478954","DE","DEU","GERMANY" -"3262478955","3262478955","FR","FRA","FRANCE" -"3262478956","3262478956","DE","DEU","GERMANY" -"3262478957","3262478957","PT","PRT","PORTUGAL" -"3262478958","3262478958","SE","SWE","SWEDEN" -"3262478959","3262478961","NL","NLD","NETHERLANDS" -"3262478962","3262478963","DE","DEU","GERMANY" -"3262478964","3262478964","CH","CHE","SWITZERLAND" -"3262478965","3262478966","DE","DEU","GERMANY" -"3262478967","3262478967","NL","NLD","NETHERLANDS" -"3262478968","3262478968","ES","ESP","SPAIN" -"3262478969","3262478969","DE","DEU","GERMANY" -"3262478970","3262478970","BE","BEL","BELGIUM" -"3262478971","3262478971","DE","DEU","GERMANY" -"3262478972","3262478972","NO","NOR","NORWAY" -"3262478973","3262478973","CH","CHE","SWITZERLAND" -"3262478974","3262478974","GB","GBR","UNITED KINGDOM" -"3262478975","3262478980","DE","DEU","GERMANY" -"3262478981","3262478981","IT","ITA","ITALY" -"3262478982","3262478982","DE","DEU","GERMANY" -"3262478983","3262478983","NL","NLD","NETHERLANDS" -"3262478984","3262478984","CH","CHE","SWITZERLAND" -"3262478985","3262478985","PT","PRT","PORTUGAL" -"3262478986","3262478986","NL","NLD","NETHERLANDS" -"3262478987","3262478987","GB","GBR","UNITED KINGDOM" -"3262478988","3262478988","IE","IRL","IRELAND" -"3262478989","3262478989","NL","NLD","NETHERLANDS" -"3262478990","3262478990","DE","DEU","GERMANY" -"3262478991","3262478992","FR","FRA","FRANCE" -"3262478993","3262478993","NL","NLD","NETHERLANDS" -"3262478994","3262478997","DE","DEU","GERMANY" -"3262478998","3262478998","GB","GBR","UNITED KINGDOM" -"3262478999","3262478999","AT","AUT","AUSTRIA" -"3262479000","3262479000","CH","CHE","SWITZERLAND" -"3262479001","3262479001","AT","AUT","AUSTRIA" -"3262479002","3262479002","DE","DEU","GERMANY" -"3262479003","3262479003","FR","FRA","FRANCE" -"3262479004","3262479007","DE","DEU","GERMANY" -"3262479008","3262479008","NL","NLD","NETHERLANDS" -"3262479009","3262479009","NO","NOR","NORWAY" -"3262479010","3262479011","NL","NLD","NETHERLANDS" -"3262479012","3262479012","DE","DEU","GERMANY" -"3262479013","3262479013","NL","NLD","NETHERLANDS" -"3262479014","3262479014","ES","ESP","SPAIN" -"3262479015","3262479015","CH","CHE","SWITZERLAND" -"3262479016","3262479016","SE","SWE","SWEDEN" -"3262479017","3262479017","DK","DNK","DENMARK" -"3262479018","3262479018","IT","ITA","ITALY" -"3262479019","3262479019","DE","DEU","GERMANY" -"3262479020","3262479022","CH","CHE","SWITZERLAND" -"3262479023","3262479024","DE","DEU","GERMANY" -"3262479025","3262479025","NL","NLD","NETHERLANDS" -"3262479026","3262479027","DE","DEU","GERMANY" -"3262479028","3262479028","CH","CHE","SWITZERLAND" -"3262479029","3262479029","DE","DEU","GERMANY" -"3262479030","3262479030","ES","ESP","SPAIN" -"3262479031","3262479031","AT","AUT","AUSTRIA" -"3262479032","3262479036","DE","DEU","GERMANY" -"3262479037","3262479037","AT","AUT","AUSTRIA" -"3262479038","3262479038","DK","DNK","DENMARK" -"3262479039","3262479039","DE","DEU","GERMANY" -"3262479040","3262479040","NL","NLD","NETHERLANDS" -"3262479041","3262479041","CH","CHE","SWITZERLAND" -"3262479042","3262479042","DK","DNK","DENMARK" -"3262479043","3262479043","FR","FRA","FRANCE" -"3262479044","3262479044","DE","DEU","GERMANY" -"3262479045","3262479045","IT","ITA","ITALY" -"3262479046","3262479046","DE","DEU","GERMANY" -"3262479047","3262479047","AT","AUT","AUSTRIA" -"3262479048","3262479048","NL","NLD","NETHERLANDS" -"3262479049","3262479050","DE","DEU","GERMANY" -"3262479051","3262479051","GB","GBR","UNITED KINGDOM" -"3262479052","3262479052","DE","DEU","GERMANY" -"3262479053","3262479053","NL","NLD","NETHERLANDS" -"3262479054","3262479055","DE","DEU","GERMANY" -"3262479056","3262479056","AT","AUT","AUSTRIA" -"3262479057","3262479057","GB","GBR","UNITED KINGDOM" -"3262479058","3262479058","FR","FRA","FRANCE" -"3262479059","3262479059","IT","ITA","ITALY" -"3262479060","3262479062","DE","DEU","GERMANY" -"3262479063","3262479063","CH","CHE","SWITZERLAND" -"3262479064","3262479065","FR","FRA","FRANCE" -"3262479066","3262479066","IT","ITA","ITALY" -"3262479067","3262479067","DE","DEU","GERMANY" -"3262479068","3262479068","ES","ESP","SPAIN" -"3262479069","3262479069","FR","FRA","FRANCE" -"3262479070","3262479070","ES","ESP","SPAIN" -"3262479071","3262479074","DE","DEU","GERMANY" -"3262479075","3262479075","CH","CHE","SWITZERLAND" -"3262479076","3262479076","BE","BEL","BELGIUM" -"3262479077","3262479077","DE","DEU","GERMANY" -"3262479078","3262479078","IT","ITA","ITALY" -"3262479079","3262479079","ES","ESP","SPAIN" -"3262479080","3262479080","LU","LUX","LUXEMBOURG" -"3262479081","3262479081","CH","CHE","SWITZERLAND" -"3262479082","3262479082","IT","ITA","ITALY" -"3262479083","3262479083","NL","NLD","NETHERLANDS" -"3262479084","3262479084","CH","CHE","SWITZERLAND" -"3262479085","3262479085","IT","ITA","ITALY" -"3262479086","3262479086","FR","FRA","FRANCE" -"3262479087","3262479088","DE","DEU","GERMANY" -"3262479089","3262479089","CH","CHE","SWITZERLAND" -"3262479090","3262479090","FR","FRA","FRANCE" -"3262479091","3262479091","DE","DEU","GERMANY" -"3262479092","3262479092","IT","ITA","ITALY" -"3262479093","3262479093","FR","FRA","FRANCE" -"3262479094","3262479095","GB","GBR","UNITED KINGDOM" -"3262479096","3262479096","ES","ESP","SPAIN" -"3262479097","3262479097","FR","FRA","FRANCE" -"3262479098","3262479098","IT","ITA","ITALY" -"3262479099","3262479099","DE","DEU","GERMANY" -"3262479100","3262479100","DK","DNK","DENMARK" -"3262479101","3262479101","CH","CHE","SWITZERLAND" -"3262479102","3262479102","IT","ITA","ITALY" -"3262479103","3262479105","DE","DEU","GERMANY" -"3262479106","3262479106","ES","ESP","SPAIN" -"3262479107","3262479107","IT","ITA","ITALY" -"3262479108","3262479108","AT","AUT","AUSTRIA" -"3262479109","3262479109","FR","FRA","FRANCE" -"3262479110","3262479110","DE","DEU","GERMANY" -"3262479111","3262479111","LU","LUX","LUXEMBOURG" -"3262479112","3262479115","DE","DEU","GERMANY" -"3262479116","3262479116","IT","ITA","ITALY" -"3262479117","3262479117","CH","CHE","SWITZERLAND" -"3262479118","3262479118","GR","GRC","GREECE" -"3262479119","3262479120","DE","DEU","GERMANY" -"3262479121","3262479121","ES","ESP","SPAIN" -"3262479122","3262479122","FR","FRA","FRANCE" -"3262479123","3262479123","DE","DEU","GERMANY" -"3262479124","3262479124","FR","FRA","FRANCE" -"3262479125","3262479125","IL","ISR","ISRAEL" -"3262479126","3262479130","DE","DEU","GERMANY" -"3262479131","3262479131","NL","NLD","NETHERLANDS" -"3262479132","3262479132","AT","AUT","AUSTRIA" -"3262479133","3262479133","NL","NLD","NETHERLANDS" -"3262479134","3262479134","ES","ESP","SPAIN" -"3262479135","3262479139","DE","DEU","GERMANY" -"3262479140","3262479140","NL","NLD","NETHERLANDS" -"3262479141","3262479142","DE","DEU","GERMANY" -"3262479143","3262479143","GB","GBR","UNITED KINGDOM" -"3262479144","3262479144","CH","CHE","SWITZERLAND" -"3262479145","3262479145","NO","NOR","NORWAY" -"3262479146","3262479146","DE","DEU","GERMANY" -"3262479147","3262479147","IT","ITA","ITALY" -"3262479148","3262479149","ES","ESP","SPAIN" -"3262479150","3262479151","DE","DEU","GERMANY" -"3262479152","3262479152","NL","NLD","NETHERLANDS" -"3262479153","3262479153","DE","DEU","GERMANY" -"3262479154","3262479154","FR","FRA","FRANCE" -"3262479155","3262479155","NL","NLD","NETHERLANDS" -"3262479156","3262479156","DE","DEU","GERMANY" -"3262479157","3262479157","ES","ESP","SPAIN" -"3262479158","3262479158","DE","DEU","GERMANY" -"3262479159","3262479159","FR","FRA","FRANCE" -"3262479160","3262479160","DE","DEU","GERMANY" -"3262479161","3262479161","FR","FRA","FRANCE" -"3262479162","3262479162","DE","DEU","GERMANY" -"3262479163","3262479163","FR","FRA","FRANCE" -"3262479164","3262479164","DE","DEU","GERMANY" -"3262479165","3262479167","CH","CHE","SWITZERLAND" -"3262479168","3262479168","DE","DEU","GERMANY" -"3262479169","3262479169","IT","ITA","ITALY" -"3262479170","3262479170","CH","CHE","SWITZERLAND" -"3262479171","3262479171","ES","ESP","SPAIN" -"3262479172","3262479174","DE","DEU","GERMANY" -"3262479175","3262479175","FR","FRA","FRANCE" -"3262479176","3262479178","DE","DEU","GERMANY" -"3262479179","3262479179","AT","AUT","AUSTRIA" -"3262479180","3262479180","NL","NLD","NETHERLANDS" -"3262479181","3262479181","DE","DEU","GERMANY" -"3262479182","3262479182","LU","LUX","LUXEMBOURG" -"3262479183","3262479183","DK","DNK","DENMARK" -"3262479184","3262479184","CH","CHE","SWITZERLAND" -"3262479185","3262479185","IT","ITA","ITALY" -"3262479186","3262479186","ES","ESP","SPAIN" -"3262479187","3262479187","DE","DEU","GERMANY" -"3262479188","3262479188","CH","CHE","SWITZERLAND" -"3262479189","3262479189","ES","ESP","SPAIN" -"3262479190","3262479191","IT","ITA","ITALY" -"3262479192","3262479192","FR","FRA","FRANCE" -"3262479193","3262479193","GB","GBR","UNITED KINGDOM" -"3262479194","3262479194","DE","DEU","GERMANY" -"3262479195","3262479195","BE","BEL","BELGIUM" -"3262479196","3262479196","DE","DEU","GERMANY" -"3262479197","3262479197","GB","GBR","UNITED KINGDOM" -"3262479198","3262479199","DE","DEU","GERMANY" -"3262479200","3262479200","NL","NLD","NETHERLANDS" -"3262479201","3262479201","HU","HUN","HUNGARY" -"3262479202","3262479202","FR","FRA","FRANCE" -"3262479203","3262479208","DE","DEU","GERMANY" -"3262479209","3262479209","ES","ESP","SPAIN" -"3262479210","3262479212","DE","DEU","GERMANY" -"3262479213","3262479213","NO","NOR","NORWAY" -"3262479214","3262479214","DE","DEU","GERMANY" -"3262479215","3262479215","IT","ITA","ITALY" -"3262479216","3262479219","DE","DEU","GERMANY" -"3262479220","3262479220","NL","NLD","NETHERLANDS" -"3262479221","3262479223","DE","DEU","GERMANY" -"3262479224","3262479224","BE","BEL","BELGIUM" -"3262479225","3262479225","FR","FRA","FRANCE" -"3262479226","3262479226","DE","DEU","GERMANY" -"3262479227","3262479227","NL","NLD","NETHERLANDS" -"3262479228","3262479228","DK","DNK","DENMARK" -"3262479229","3262479233","DE","DEU","GERMANY" -"3262479234","3262479234","GB","GBR","UNITED KINGDOM" -"3262479235","3262479236","DE","DEU","GERMANY" -"3262479237","3262479238","NL","NLD","NETHERLANDS" -"3262479239","3262479239","FR","FRA","FRANCE" -"3262479240","3262479240","DE","DEU","GERMANY" -"3262479241","3262479242","FR","FRA","FRANCE" -"3262479243","3262479243","NL","NLD","NETHERLANDS" -"3262479244","3262479244","IT","ITA","ITALY" -"3262479245","3262479249","DE","DEU","GERMANY" -"3262479250","3262479250","AT","AUT","AUSTRIA" -"3262479251","3262479252","DE","DEU","GERMANY" -"3262479253","3262479253","NL","NLD","NETHERLANDS" -"3262479254","3262479254","FR","FRA","FRANCE" -"3262479255","3262479255","DE","DEU","GERMANY" -"3262479256","3262479256","IT","ITA","ITALY" -"3262479257","3262479257","US","USA","UNITED STATES" -"3262479258","3262479261","DE","DEU","GERMANY" -"3262479262","3262479262","CH","CHE","SWITZERLAND" -"3262479263","3262479264","DE","DEU","GERMANY" -"3262479265","3262479265","CH","CHE","SWITZERLAND" -"3262479266","3262479266","FR","FRA","FRANCE" -"3262479267","3262479267","DE","DEU","GERMANY" -"3262479268","3262479268","NL","NLD","NETHERLANDS" -"3262479269","3262479269","DE","DEU","GERMANY" -"3262479270","3262479271","DK","DNK","DENMARK" -"3262479272","3262479272","IT","ITA","ITALY" -"3262479273","3262479273","DE","DEU","GERMANY" -"3262479274","3262479274","ES","ESP","SPAIN" -"3262479275","3262479275","IT","ITA","ITALY" -"3262479276","3262479276","DE","DEU","GERMANY" -"3262479277","3262479277","NL","NLD","NETHERLANDS" -"3262479278","3262479278","DE","DEU","GERMANY" -"3262479279","3262479279","ES","ESP","SPAIN" -"3262479280","3262479280","DE","DEU","GERMANY" -"3262479281","3262479281","FR","FRA","FRANCE" -"3262479282","3262479282","AD","AND","ANDORRA" -"3262479283","3262479283","IT","ITA","ITALY" -"3262479284","3262479284","NO","NOR","NORWAY" -"3262479285","3262479289","DE","DEU","GERMANY" -"3262479290","3262479290","BE","BEL","BELGIUM" -"3262479291","3262479293","DE","DEU","GERMANY" -"3262479294","3262479294","FR","FRA","FRANCE" -"3262479295","3262479295","DE","DEU","GERMANY" -"3262479296","3262479296","IT","ITA","ITALY" -"3262479297","3262479298","DE","DEU","GERMANY" -"3262479299","3262479299","ES","ESP","SPAIN" -"3262479300","3262479300","DE","DEU","GERMANY" -"3262479301","3262479301","ES","ESP","SPAIN" -"3262479302","3262479303","DE","DEU","GERMANY" -"3262479304","3262479304","AT","AUT","AUSTRIA" -"3262479305","3262479307","DE","DEU","GERMANY" -"3262479308","3262479308","DK","DNK","DENMARK" -"3262479309","3262479309","SE","SWE","SWEDEN" -"3262479310","3262479311","DE","DEU","GERMANY" -"3262479312","3262479312","IT","ITA","ITALY" -"3262479313","3262479313","FR","FRA","FRANCE" -"3262479314","3262479318","DE","DEU","GERMANY" -"3262479319","3262479319","DK","DNK","DENMARK" -"3262479320","3262479320","DE","DEU","GERMANY" -"3262479321","3262479321","GR","GRC","GREECE" -"3262479322","3262479323","CH","CHE","SWITZERLAND" -"3262479324","3262479324","NL","NLD","NETHERLANDS" -"3262479325","3262479325","ES","ESP","SPAIN" -"3262479326","3262479327","DE","DEU","GERMANY" -"3262479328","3262479328","DK","DNK","DENMARK" -"3262479329","3262479329","ES","ESP","SPAIN" -"3262479330","3262479330","NL","NLD","NETHERLANDS" -"3262479331","3262479332","FR","FRA","FRANCE" -"3262479333","3262479333","HU","HUN","HUNGARY" -"3262479334","3262479334","NL","NLD","NETHERLANDS" -"3262479335","3262479335","DE","DEU","GERMANY" -"3262479336","3262479336","FR","FRA","FRANCE" -"3262479337","3262479337","ES","ESP","SPAIN" -"3262479338","3262479338","DE","DEU","GERMANY" -"3262479339","3262479339","NL","NLD","NETHERLANDS" -"3262479340","3262479340","CH","CHE","SWITZERLAND" -"3262479341","3262479341","DE","DEU","GERMANY" -"3262479342","3262479342","PT","PRT","PORTUGAL" -"3262479343","3262479343","NO","NOR","NORWAY" -"3262479344","3262479344","NL","NLD","NETHERLANDS" -"3262479345","3262479345","DE","DEU","GERMANY" -"3262479346","3262479346","DK","DNK","DENMARK" -"3262479347","3262479347","NO","NOR","NORWAY" -"3262479348","3262479350","IT","ITA","ITALY" -"3262479351","3262479351","DE","DEU","GERMANY" -"3262479352","3262479352","IT","ITA","ITALY" -"3262479353","3262479353","CH","CHE","SWITZERLAND" -"3262479354","3262479355","DE","DEU","GERMANY" -"3262479356","3262479356","CH","CHE","SWITZERLAND" -"3262479357","3262479357","FR","FRA","FRANCE" -"3262479358","3262479361","DE","DEU","GERMANY" -"3262479362","3262479362","PT","PRT","PORTUGAL" -"3262479363","3262479366","DE","DEU","GERMANY" -"3262479367","3262479367","CH","CHE","SWITZERLAND" -"3262479368","3262479368","DE","DEU","GERMANY" -"3262479369","3262479369","FR","FRA","FRANCE" -"3262479370","3262479370","CH","CHE","SWITZERLAND" -"3262479371","3262479371","GB","GBR","UNITED KINGDOM" -"3262479372","3262479372","DE","DEU","GERMANY" -"3262479373","3262479373","IT","ITA","ITALY" -"3262479374","3262479374","DE","DEU","GERMANY" -"3262479375","3262479375","NL","NLD","NETHERLANDS" -"3262479376","3262479377","FR","FRA","FRANCE" -"3262479378","3262479378","DE","DEU","GERMANY" -"3262479379","3262479379","CH","CHE","SWITZERLAND" -"3262479380","3262479380","AT","AUT","AUSTRIA" -"3262479381","3262479381","FR","FRA","FRANCE" -"3262479382","3262479385","DE","DEU","GERMANY" -"3262479386","3262479386","NL","NLD","NETHERLANDS" -"3262479387","3262479387","DK","DNK","DENMARK" -"3262479388","3262479389","DE","DEU","GERMANY" -"3262479390","3262479390","DK","DNK","DENMARK" -"3262479391","3262479391","NO","NOR","NORWAY" -"3262479392","3262479393","DE","DEU","GERMANY" -"3262479394","3262479394","FR","FRA","FRANCE" -"3262479395","3262479395","NL","NLD","NETHERLANDS" -"3262479396","3262479396","CH","CHE","SWITZERLAND" -"3262479397","3262479397","IT","ITA","ITALY" -"3262479398","3262479399","DE","DEU","GERMANY" -"3262479400","3262479400","NL","NLD","NETHERLANDS" -"3262479401","3262479402","DE","DEU","GERMANY" -"3262479403","3262479403","GB","GBR","UNITED KINGDOM" -"3262479404","3262479404","DE","DEU","GERMANY" -"3262479405","3262479405","IE","IRL","IRELAND" -"3262479406","3262479406","GB","GBR","UNITED KINGDOM" -"3262479407","3262479410","DE","DEU","GERMANY" -"3262479411","3262479411","ES","ESP","SPAIN" -"3262479412","3262479413","DE","DEU","GERMANY" -"3262479414","3262479414","CH","CHE","SWITZERLAND" -"3262479415","3262479415","DE","DEU","GERMANY" -"3262479416","3262479416","DK","DNK","DENMARK" -"3262479417","3262479419","DE","DEU","GERMANY" -"3262479420","3262479420","ES","ESP","SPAIN" -"3262479421","3262479421","DE","DEU","GERMANY" -"3262479422","3262479422","SE","SWE","SWEDEN" -"3262479423","3262479423","AT","AUT","AUSTRIA" -"3262479424","3262479426","DE","DEU","GERMANY" -"3262479427","3262479427","IT","ITA","ITALY" -"3262479428","3262479429","FR","FRA","FRANCE" -"3262479430","3262479430","GB","GBR","UNITED KINGDOM" -"3262479431","3262479432","DE","DEU","GERMANY" -"3262479433","3262479433","ZA","ZAF","SOUTH AFRICA" -"3262479434","3262479434","IT","ITA","ITALY" -"3262479435","3262479437","DE","DEU","GERMANY" -"3262479438","3262479438","IT","ITA","ITALY" -"3262479439","3262479439","DE","DEU","GERMANY" -"3262479440","3262479440","AT","AUT","AUSTRIA" -"3262479441","3262479441","DK","DNK","DENMARK" -"3262479442","3262479442","IT","ITA","ITALY" -"3262479443","3262479443","GR","GRC","GREECE" -"3262479444","3262479444","ES","ESP","SPAIN" -"3262479445","3262479445","DE","DEU","GERMANY" -"3262479446","3262479446","IT","ITA","ITALY" -"3262479447","3262479448","DE","DEU","GERMANY" -"3262479449","3262479449","GB","GBR","UNITED KINGDOM" -"3262479450","3262479452","DE","DEU","GERMANY" -"3262479453","3262479453","CH","CHE","SWITZERLAND" -"3262479454","3262479455","DE","DEU","GERMANY" -"3262479456","3262479456","IT","ITA","ITALY" -"3262479457","3262479462","DE","DEU","GERMANY" -"3262479463","3262479463","IT","ITA","ITALY" -"3262479464","3262479465","NL","NLD","NETHERLANDS" -"3262479466","3262479466","GB","GBR","UNITED KINGDOM" -"3262479467","3262479467","CH","CHE","SWITZERLAND" -"3262479468","3262479469","DE","DEU","GERMANY" -"3262479470","3262479471","GB","GBR","UNITED KINGDOM" -"3262479472","3262479472","DE","DEU","GERMANY" -"3262479473","3262479473","CH","CHE","SWITZERLAND" -"3262479474","3262479474","BE","BEL","BELGIUM" -"3262479475","3262479475","CH","CHE","SWITZERLAND" -"3262479476","3262479476","GB","GBR","UNITED KINGDOM" -"3262479477","3262479477","BE","BEL","BELGIUM" -"3262479478","3262479478","IT","ITA","ITALY" -"3262479479","3262479480","DE","DEU","GERMANY" -"3262479481","3262479481","LI","LIE","LIECHTENSTEIN" -"3262479482","3262479482","IT","ITA","ITALY" -"3262479483","3262479483","DE","DEU","GERMANY" -"3262479484","3262479484","AT","AUT","AUSTRIA" -"3262479485","3262479489","DE","DEU","GERMANY" -"3262479490","3262479490","IT","ITA","ITALY" -"3262479491","3262479492","DE","DEU","GERMANY" -"3262479493","3262479493","CH","CHE","SWITZERLAND" -"3262479494","3262479494","DE","DEU","GERMANY" -"3262479495","3262479495","BE","BEL","BELGIUM" -"3262479496","3262479498","DE","DEU","GERMANY" -"3262479499","3262479499","ES","ESP","SPAIN" -"3262479500","3262479502","IT","ITA","ITALY" -"3262479503","3262479503","DE","DEU","GERMANY" -"3262479504","3262479504","GB","GBR","UNITED KINGDOM" -"3262479505","3262479507","DE","DEU","GERMANY" -"3262479508","3262479508","HU","HUN","HUNGARY" -"3262479509","3262479509","FR","FRA","FRANCE" -"3262479510","3262479513","DE","DEU","GERMANY" -"3262479514","3262479514","FR","FRA","FRANCE" -"3262479515","3262479515","ES","ESP","SPAIN" -"3262479516","3262479517","DE","DEU","GERMANY" -"3262479518","3262479518","GB","GBR","UNITED KINGDOM" -"3262479519","3262479519","GR","GRC","GREECE" -"3262479520","3262479521","DE","DEU","GERMANY" -"3262479522","3262479522","CH","CHE","SWITZERLAND" -"3262479523","3262479526","DE","DEU","GERMANY" -"3262479527","3262479528","NL","NLD","NETHERLANDS" -"3262479529","3262479529","DE","DEU","GERMANY" -"3262479530","3262479530","BE","BEL","BELGIUM" -"3262479531","3262479535","DE","DEU","GERMANY" -"3262479536","3262479536","GB","GBR","UNITED KINGDOM" -"3262479537","3262479538","DE","DEU","GERMANY" -"3262479539","3262479539","IT","ITA","ITALY" -"3262479540","3262479540","DE","DEU","GERMANY" -"3262479541","3262479541","CH","CHE","SWITZERLAND" -"3262479542","3262479543","DE","DEU","GERMANY" -"3262479544","3262479544","IT","ITA","ITALY" -"3262479545","3262479545","BE","BEL","BELGIUM" -"3262479546","3262479546","GB","GBR","UNITED KINGDOM" -"3262479547","3262479547","AT","AUT","AUSTRIA" -"3262479548","3262479548","CH","CHE","SWITZERLAND" -"3262479549","3262479549","IT","ITA","ITALY" -"3262479550","3262479552","DE","DEU","GERMANY" -"3262479553","3262479553","IL","ISR","ISRAEL" -"3262479554","3262479554","DK","DNK","DENMARK" -"3262479555","3262479555","FR","FRA","FRANCE" -"3262479556","3262479556","IE","IRL","IRELAND" -"3262479557","3262479558","DE","DEU","GERMANY" -"3262479559","3262479559","SE","SWE","SWEDEN" -"3262479560","3262479560","DE","DEU","GERMANY" -"3262479561","3262479561","BE","BEL","BELGIUM" -"3262479562","3262479562","GB","GBR","UNITED KINGDOM" -"3262479563","3262479563","DE","DEU","GERMANY" -"3262479564","3262479564","GB","GBR","UNITED KINGDOM" -"3262479565","3262479565","SE","SWE","SWEDEN" -"3262479566","3262479566","NL","NLD","NETHERLANDS" -"3262479567","3262479567","CH","CHE","SWITZERLAND" -"3262479568","3262479568","NO","NOR","NORWAY" -"3262479569","3262479572","DE","DEU","GERMANY" -"3262479573","3262479573","IT","ITA","ITALY" -"3262479574","3262479574","CH","CHE","SWITZERLAND" -"3262479575","3262479575","DE","DEU","GERMANY" -"3262479576","3262479576","NL","NLD","NETHERLANDS" -"3262479577","3262479577","FR","FRA","FRANCE" -"3262479578","3262479578","DE","DEU","GERMANY" -"3262479579","3262479579","ZA","ZAF","SOUTH AFRICA" -"3262479580","3262479580","DE","DEU","GERMANY" -"3262479581","3262479581","IT","ITA","ITALY" -"3262479582","3262479583","DE","DEU","GERMANY" -"3262479584","3262479584","NL","NLD","NETHERLANDS" -"3262479585","3262479585","DE","DEU","GERMANY" -"3262479586","3262479586","GR","GRC","GREECE" -"3262479587","3262479588","DE","DEU","GERMANY" -"3262479589","3262479589","IT","ITA","ITALY" -"3262479590","3262479590","GB","GBR","UNITED KINGDOM" -"3262479591","3262479591","NL","NLD","NETHERLANDS" -"3262479592","3262479592","DE","DEU","GERMANY" -"3262479593","3262479593","FR","FRA","FRANCE" -"3262479594","3262479594","DE","DEU","GERMANY" -"3262479595","3262479596","FR","FRA","FRANCE" -"3262479597","3262479598","DE","DEU","GERMANY" -"3262479599","3262479600","IT","ITA","ITALY" -"3262479601","3262479601","DE","DEU","GERMANY" -"3262479602","3262479602","GB","GBR","UNITED KINGDOM" -"3262479603","3262479604","DE","DEU","GERMANY" -"3262479605","3262479605","SE","SWE","SWEDEN" -"3262479606","3262479606","FR","FRA","FRANCE" -"3262479607","3262479607","NL","NLD","NETHERLANDS" -"3262479608","3262479609","DE","DEU","GERMANY" -"3262479610","3262479610","SI","SVN","SLOVENIA" -"3262479611","3262479611","DE","DEU","GERMANY" -"3262479612","3262479612","ES","ESP","SPAIN" -"3262479613","3262479613","NL","NLD","NETHERLANDS" -"3262479614","3262479617","DE","DEU","GERMANY" -"3262479618","3262479618","NO","NOR","NORWAY" -"3262479619","3262479619","ES","ESP","SPAIN" -"3262479620","3262479620","GB","GBR","UNITED KINGDOM" -"3262479621","3262479622","DE","DEU","GERMANY" -"3262479623","3262479623","CH","CHE","SWITZERLAND" -"3262479624","3262479624","ES","ESP","SPAIN" -"3262479625","3262479625","NL","NLD","NETHERLANDS" -"3262479626","3262479626","AT","AUT","AUSTRIA" -"3262479627","3262479628","DE","DEU","GERMANY" -"3262479629","3262479629","SI","SVN","SLOVENIA" -"3262479630","3262479630","NL","NLD","NETHERLANDS" -"3262479631","3262479631","HU","HUN","HUNGARY" -"3262479632","3262479632","DE","DEU","GERMANY" -"3262479633","3262479633","LU","LUX","LUXEMBOURG" -"3262479634","3262479634","DE","DEU","GERMANY" -"3262479635","3262479636","GB","GBR","UNITED KINGDOM" -"3262479637","3262479637","ES","ESP","SPAIN" -"3262479638","3262479638","DE","DEU","GERMANY" -"3262479639","3262479639","AT","AUT","AUSTRIA" -"3262479640","3262479640","FR","FRA","FRANCE" -"3262479641","3262479641","IT","ITA","ITALY" -"3262479642","3262479642","GB","GBR","UNITED KINGDOM" -"3262479643","3262479643","DE","DEU","GERMANY" -"3262479644","3262479644","NL","NLD","NETHERLANDS" -"3262479645","3262479645","DE","DEU","GERMANY" -"3262479646","3262479646","GB","GBR","UNITED KINGDOM" -"3262479647","3262479647","DE","DEU","GERMANY" -"3262479648","3262479648","NO","NOR","NORWAY" -"3262479649","3262479653","DE","DEU","GERMANY" -"3262479654","3262479654","ES","ESP","SPAIN" -"3262479655","3262479655","NL","NLD","NETHERLANDS" -"3262479656","3262479656","CH","CHE","SWITZERLAND" -"3262479657","3262479657","NL","NLD","NETHERLANDS" -"3262479658","3262479658","DE","DEU","GERMANY" -"3262479659","3262479659","NL","NLD","NETHERLANDS" -"3262479660","3262479660","PT","PRT","PORTUGAL" -"3262479661","3262479662","FR","FRA","FRANCE" -"3262479663","3262479664","DE","DEU","GERMANY" -"3262479665","3262479665","DK","DNK","DENMARK" -"3262479666","3262479667","DE","DEU","GERMANY" -"3262479668","3262479668","NL","NLD","NETHERLANDS" -"3262479669","3262479669","IT","ITA","ITALY" -"3262479670","3262479670","DK","DNK","DENMARK" -"3262479671","3262479671","IT","ITA","ITALY" -"3262479672","3262479673","DE","DEU","GERMANY" -"3262479674","3262479674","BE","BEL","BELGIUM" -"3262479675","3262479676","DE","DEU","GERMANY" -"3262479677","3262479677","ES","ESP","SPAIN" -"3262479678","3262479678","IT","ITA","ITALY" -"3262479679","3262479679","AT","AUT","AUSTRIA" -"3262479680","3262479680","IT","ITA","ITALY" -"3262479681","3262479681","DE","DEU","GERMANY" -"3262479682","3262479682","IT","ITA","ITALY" -"3262479683","3262479683","HU","HUN","HUNGARY" -"3262479684","3262479685","DE","DEU","GERMANY" -"3262479686","3262479687","FR","FRA","FRANCE" -"3262479688","3262479688","DE","DEU","GERMANY" -"3262479689","3262479689","NL","NLD","NETHERLANDS" -"3262479690","3262479690","LU","LUX","LUXEMBOURG" -"3262479691","3262479691","DE","DEU","GERMANY" -"3262479692","3262479692","LU","LUX","LUXEMBOURG" -"3262479693","3262479693","DE","DEU","GERMANY" -"3262479694","3262479694","CH","CHE","SWITZERLAND" -"3262479695","3262479695","ES","ESP","SPAIN" -"3262479696","3262479696","CH","CHE","SWITZERLAND" -"3262479697","3262479697","GB","GBR","UNITED KINGDOM" -"3262479698","3262479698","FR","FRA","FRANCE" -"3262479699","3262479701","NL","NLD","NETHERLANDS" -"3262479702","3262479702","AT","AUT","AUSTRIA" -"3262479703","3262479703","FR","FRA","FRANCE" -"3262479704","3262479707","DE","DEU","GERMANY" -"3262479708","3262479708","CH","CHE","SWITZERLAND" -"3262479709","3262479709","NL","NLD","NETHERLANDS" -"3262479710","3262479711","DE","DEU","GERMANY" -"3262479712","3262479712","GB","GBR","UNITED KINGDOM" -"3262479713","3262479713","DE","DEU","GERMANY" -"3262479714","3262479714","AT","AUT","AUSTRIA" -"3262479715","3262479715","ES","ESP","SPAIN" -"3262479716","3262479716","DE","DEU","GERMANY" -"3262479717","3262479717","BE","BEL","BELGIUM" -"3262479718","3262479720","DE","DEU","GERMANY" -"3262479721","3262479721","AT","AUT","AUSTRIA" -"3262479722","3262479724","DE","DEU","GERMANY" -"3262479725","3262479725","AT","AUT","AUSTRIA" -"3262479726","3262479727","DE","DEU","GERMANY" -"3262479728","3262479728","BE","BEL","BELGIUM" -"3262479729","3262479730","ES","ESP","SPAIN" -"3262479731","3262479731","CH","CHE","SWITZERLAND" -"3262479732","3262479732","IT","ITA","ITALY" -"3262479733","3262479734","DE","DEU","GERMANY" -"3262479735","3262479736","CH","CHE","SWITZERLAND" -"3262479737","3262479737","DE","DEU","GERMANY" -"3262479738","3262479738","AT","AUT","AUSTRIA" -"3262479739","3262479739","DK","DNK","DENMARK" -"3262479740","3262479740","DE","DEU","GERMANY" -"3262479741","3262479741","NL","NLD","NETHERLANDS" -"3262479742","3262479742","FR","FRA","FRANCE" -"3262479743","3262479745","DE","DEU","GERMANY" -"3262479746","3262479746","GB","GBR","UNITED KINGDOM" -"3262479747","3262479747","CH","CHE","SWITZERLAND" -"3262479748","3262479748","DE","DEU","GERMANY" -"3262479749","3262479749","FR","FRA","FRANCE" -"3262479750","3262479750","AT","AUT","AUSTRIA" -"3262479751","3262479751","DE","DEU","GERMANY" -"3262479752","3262479752","CH","CHE","SWITZERLAND" -"3262479753","3262479753","DE","DEU","GERMANY" -"3262479754","3262479754","FR","FRA","FRANCE" -"3262479755","3262479755","NL","NLD","NETHERLANDS" -"3262479756","3262479756","FR","FRA","FRANCE" -"3262479757","3262479757","SE","SWE","SWEDEN" -"3262479758","3262479762","DE","DEU","GERMANY" -"3262479763","3262479763","NO","NOR","NORWAY" -"3262479764","3262479764","FR","FRA","FRANCE" -"3262479765","3262479765","DE","DEU","GERMANY" -"3262479766","3262479766","CH","CHE","SWITZERLAND" -"3262479767","3262479770","DE","DEU","GERMANY" -"3262479771","3262479771","IT","ITA","ITALY" -"3262479772","3262479775","DE","DEU","GERMANY" -"3262479776","3262479776","IT","ITA","ITALY" -"3262479777","3262479777","BE","BEL","BELGIUM" -"3262479778","3262479778","NL","NLD","NETHERLANDS" -"3262479779","3262479782","DE","DEU","GERMANY" -"3262479783","3262479783","GB","GBR","UNITED KINGDOM" -"3262479784","3262479784","AT","AUT","AUSTRIA" -"3262479785","3262479785","FR","FRA","FRANCE" -"3262479786","3262479786","CH","CHE","SWITZERLAND" -"3262479787","3262479788","DE","DEU","GERMANY" -"3262479789","3262479789","IT","ITA","ITALY" -"3262479790","3262479790","DE","DEU","GERMANY" -"3262479791","3262479792","IT","ITA","ITALY" -"3262479793","3262479793","DE","DEU","GERMANY" -"3262479794","3262479794","FR","FRA","FRANCE" -"3262479795","3262479795","CH","CHE","SWITZERLAND" -"3262479796","3262479797","AT","AUT","AUSTRIA" -"3262479798","3262479799","GB","GBR","UNITED KINGDOM" -"3262479800","3262479808","DE","DEU","GERMANY" -"3262479809","3262479809","FR","FRA","FRANCE" -"3262479810","3262479810","NL","NLD","NETHERLANDS" -"3262479811","3262479811","ES","ESP","SPAIN" -"3262479812","3262479812","GB","GBR","UNITED KINGDOM" -"3262479813","3262479816","DE","DEU","GERMANY" -"3262479817","3262479817","HU","HUN","HUNGARY" -"3262479818","3262479818","DE","DEU","GERMANY" -"3262479819","3262479819","NL","NLD","NETHERLANDS" -"3262479820","3262479820","DE","DEU","GERMANY" -"3262479821","3262479822","NL","NLD","NETHERLANDS" -"3262479823","3262479823","ES","ESP","SPAIN" -"3262479824","3262479824","GB","GBR","UNITED KINGDOM" -"3262479825","3262479825","DE","DEU","GERMANY" -"3262479826","3262479826","BE","BEL","BELGIUM" -"3262479827","3262479827","DE","DEU","GERMANY" -"3262479828","3262479829","CH","CHE","SWITZERLAND" -"3262479830","3262479830","GB","GBR","UNITED KINGDOM" -"3262479831","3262479832","DE","DEU","GERMANY" -"3262479833","3262479833","ES","ESP","SPAIN" -"3262479834","3262479834","DE","DEU","GERMANY" -"3262479835","3262479835","AT","AUT","AUSTRIA" -"3262479836","3262479836","NL","NLD","NETHERLANDS" -"3262479837","3262479837","HU","HUN","HUNGARY" -"3262479838","3262479838","CH","CHE","SWITZERLAND" -"3262479839","3262479839","NL","NLD","NETHERLANDS" -"3262479840","3262479840","DE","DEU","GERMANY" -"3262479841","3262479841","FR","FRA","FRANCE" -"3262479842","3262479842","DK","DNK","DENMARK" -"3262479843","3262479843","GB","GBR","UNITED KINGDOM" -"3262479844","3262479844","DE","DEU","GERMANY" -"3262479845","3262479845","CH","CHE","SWITZERLAND" -"3262479846","3262479846","DE","DEU","GERMANY" -"3262479847","3262479847","LU","LUX","LUXEMBOURG" -"3262479848","3262479852","DE","DEU","GERMANY" -"3262479853","3262479853","IS","ISL","ICELAND" -"3262479854","3262479855","DE","DEU","GERMANY" -"3262479856","3262479856","CH","CHE","SWITZERLAND" -"3262479857","3262479859","DE","DEU","GERMANY" -"3262479860","3262479860","NL","NLD","NETHERLANDS" -"3262479861","3262479861","NO","NOR","NORWAY" -"3262479862","3262479862","BE","BEL","BELGIUM" -"3262479863","3262479863","NL","NLD","NETHERLANDS" -"3262479864","3262479864","DE","DEU","GERMANY" -"3262479865","3262479865","FR","FRA","FRANCE" -"3262479866","3262479866","DE","DEU","GERMANY" -"3262479867","3262479867","SE","SWE","SWEDEN" -"3262479868","3262479868","DE","DEU","GERMANY" -"3262479869","3262479869","GB","GBR","UNITED KINGDOM" -"3262479870","3262479873","DE","DEU","GERMANY" -"3262479874","3262479875","FR","FRA","FRANCE" -"3262479876","3262479876","DE","DEU","GERMANY" -"3262479877","3262479877","CH","CHE","SWITZERLAND" -"3262479878","3262479879","DE","DEU","GERMANY" -"3262479880","3262479880","AT","AUT","AUSTRIA" -"3262479881","3262479881","HU","HUN","HUNGARY" -"3262479882","3262479883","DE","DEU","GERMANY" -"3262479884","3262479884","GB","GBR","UNITED KINGDOM" -"3262479885","3262479886","DE","DEU","GERMANY" -"3262479887","3262479887","GR","GRC","GREECE" -"3262479888","3262479888","FR","FRA","FRANCE" -"3262479889","3262479889","NL","NLD","NETHERLANDS" -"3262479890","3262479892","DE","DEU","GERMANY" -"3262479893","3262479893","LU","LUX","LUXEMBOURG" -"3262479894","3262479894","CH","CHE","SWITZERLAND" -"3262479895","3262479896","ES","ESP","SPAIN" -"3262479897","3262479899","DE","DEU","GERMANY" -"3262479900","3262479900","NL","NLD","NETHERLANDS" -"3262479901","3262479901","AT","AUT","AUSTRIA" -"3262479902","3262479902","DE","DEU","GERMANY" -"3262479903","3262479903","CH","CHE","SWITZERLAND" -"3262479904","3262479908","DE","DEU","GERMANY" -"3262479909","3262479909","SE","SWE","SWEDEN" -"3262479910","3262479912","DE","DEU","GERMANY" -"3262479913","3262479913","NO","NOR","NORWAY" -"3262479914","3262479914","DE","DEU","GERMANY" -"3262479915","3262479915","FR","FRA","FRANCE" -"3262479916","3262479917","DE","DEU","GERMANY" -"3262479918","3262479918","GB","GBR","UNITED KINGDOM" -"3262479919","3262479922","DE","DEU","GERMANY" -"3262479923","3262479923","AT","AUT","AUSTRIA" -"3262479924","3262479929","DE","DEU","GERMANY" -"3262479930","3262479930","IT","ITA","ITALY" -"3262479931","3262479931","DK","DNK","DENMARK" -"3262479932","3262479932","DE","DEU","GERMANY" -"3262479933","3262479933","NL","NLD","NETHERLANDS" -"3262479934","3262479935","DE","DEU","GERMANY" -"3262479936","3262479936","BE","BEL","BELGIUM" -"3262479937","3262479937","FR","FRA","FRANCE" -"3262479938","3262479939","DE","DEU","GERMANY" -"3262479940","3262479940","ES","ESP","SPAIN" -"3262479941","3262479941","IT","ITA","ITALY" -"3262479942","3262479944","DE","DEU","GERMANY" -"3262479945","3262479945","FR","FRA","FRANCE" -"3262479946","3262479946","DE","DEU","GERMANY" -"3262479947","3262479947","HU","HUN","HUNGARY" -"3262479948","3262479948","DE","DEU","GERMANY" -"3262479949","3262479949","NL","NLD","NETHERLANDS" -"3262479950","3262479950","CH","CHE","SWITZERLAND" -"3262479951","3262479953","DE","DEU","GERMANY" -"3262479954","3262479954","CH","CHE","SWITZERLAND" -"3262479955","3262479955","DE","DEU","GERMANY" -"3262479956","3262479956","IT","ITA","ITALY" -"3262479957","3262479957","BE","BEL","BELGIUM" -"3262479958","3262479959","DE","DEU","GERMANY" -"3262479960","3262479960","AT","AUT","AUSTRIA" -"3262479961","3262479961","DE","DEU","GERMANY" -"3262479962","3262479962","GB","GBR","UNITED KINGDOM" -"3262479963","3262479963","ES","ESP","SPAIN" -"3262479964","3262479964","DE","DEU","GERMANY" -"3262479965","3262479965","ES","ESP","SPAIN" -"3262479966","3262479974","DE","DEU","GERMANY" -"3262479975","3262479975","FR","FRA","FRANCE" -"3262479976","3262479976","NL","NLD","NETHERLANDS" -"3262479977","3262479978","DE","DEU","GERMANY" -"3262479979","3262479979","CH","CHE","SWITZERLAND" -"3262479980","3262479980","AT","AUT","AUSTRIA" -"3262479981","3262479984","DE","DEU","GERMANY" -"3262479985","3262479985","CH","CHE","SWITZERLAND" -"3262479986","3262479987","DE","DEU","GERMANY" -"3262479988","3262479988","FR","FRA","FRANCE" -"3262479989","3262479989","DE","DEU","GERMANY" -"3262479990","3262479990","NL","NLD","NETHERLANDS" -"3262479991","3262479993","DE","DEU","GERMANY" -"3262479994","3262479994","CH","CHE","SWITZERLAND" -"3262479995","3262479995","DE","DEU","GERMANY" -"3262479996","3262479996","NL","NLD","NETHERLANDS" -"3262479997","3262480001","DE","DEU","GERMANY" -"3262480002","3262480002","BE","BEL","BELGIUM" -"3262480003","3262480005","DE","DEU","GERMANY" -"3262480006","3262480006","FR","FRA","FRANCE" -"3262480007","3262480009","DE","DEU","GERMANY" -"3262480010","3262480010","FR","FRA","FRANCE" -"3262480011","3262480011","BE","BEL","BELGIUM" -"3262480012","3262480012","NL","NLD","NETHERLANDS" -"3262480013","3262480015","DE","DEU","GERMANY" -"3262480016","3262480016","ES","ESP","SPAIN" -"3262480017","3262480018","DE","DEU","GERMANY" -"3262480019","3262480019","BE","BEL","BELGIUM" -"3262480020","3262480020","DE","DEU","GERMANY" -"3262480021","3262480021","DK","DNK","DENMARK" -"3262480022","3262480022","CH","CHE","SWITZERLAND" -"3262480023","3262480029","DE","DEU","GERMANY" -"3262480030","3262480030","GB","GBR","UNITED KINGDOM" -"3262480031","3262480031","DE","DEU","GERMANY" -"3262480032","3262480032","CH","CHE","SWITZERLAND" -"3262480033","3262480033","GB","GBR","UNITED KINGDOM" -"3262480034","3262480034","DE","DEU","GERMANY" -"3262480035","3262480035","LU","LUX","LUXEMBOURG" -"3262480036","3262480037","DE","DEU","GERMANY" -"3262480038","3262480038","NL","NLD","NETHERLANDS" -"3262480039","3262480039","CH","CHE","SWITZERLAND" -"3262480040","3262480040","DE","DEU","GERMANY" -"3262480041","3262480041","AT","AUT","AUSTRIA" -"3262480042","3262480042","DE","DEU","GERMANY" -"3262480043","3262480043","GB","GBR","UNITED KINGDOM" -"3262480044","3262480044","CS","SCG","SERBIA AND MONTENEGRO" -"3262480045","3262480045","GB","GBR","UNITED KINGDOM" -"3262480046","3262480048","DE","DEU","GERMANY" -"3262480049","3262480049","LU","LUX","LUXEMBOURG" -"3262480050","3262480051","DE","DEU","GERMANY" -"3262480052","3262480052","NL","NLD","NETHERLANDS" -"3262480053","3262480057","DE","DEU","GERMANY" -"3262480058","3262480058","NL","NLD","NETHERLANDS" -"3262480059","3262480059","CH","CHE","SWITZERLAND" -"3262480060","3262480060","DE","DEU","GERMANY" -"3262480061","3262480062","GB","GBR","UNITED KINGDOM" -"3262480063","3262480063","SI","SVN","SLOVENIA" -"3262480064","3262480066","DE","DEU","GERMANY" -"3262480067","3262480067","NL","NLD","NETHERLANDS" -"3262480068","3262480071","DE","DEU","GERMANY" -"3262480072","3262480072","IT","ITA","ITALY" -"3262480073","3262480073","DE","DEU","GERMANY" -"3262480074","3262480074","AT","AUT","AUSTRIA" -"3262480075","3262480076","DE","DEU","GERMANY" -"3262480077","3262480078","FR","FRA","FRANCE" -"3262480079","3262480080","DE","DEU","GERMANY" -"3262480081","3262480081","CH","CHE","SWITZERLAND" -"3262480082","3262480082","DE","DEU","GERMANY" -"3262480083","3262480083","NO","NOR","NORWAY" -"3262480084","3262480084","IT","ITA","ITALY" -"3262480085","3262480085","FR","FRA","FRANCE" -"3262480086","3262480087","DE","DEU","GERMANY" -"3262480088","3262480088","FR","FRA","FRANCE" -"3262480089","3262480089","NL","NLD","NETHERLANDS" -"3262480090","3262480090","CH","CHE","SWITZERLAND" -"3262480091","3262480092","DE","DEU","GERMANY" -"3262480093","3262480093","BE","BEL","BELGIUM" -"3262480094","3262480094","DE","DEU","GERMANY" -"3262480095","3262480095","AT","AUT","AUSTRIA" -"3262480096","3262480097","DE","DEU","GERMANY" -"3262480098","3262480098","GB","GBR","UNITED KINGDOM" -"3262480099","3262480104","DE","DEU","GERMANY" -"3262480105","3262480105","IT","ITA","ITALY" -"3262480106","3262480106","DE","DEU","GERMANY" -"3262480107","3262480107","DK","DNK","DENMARK" -"3262480108","3262480109","DE","DEU","GERMANY" -"3262480110","3262480110","GB","GBR","UNITED KINGDOM" -"3262480111","3262480111","AT","AUT","AUSTRIA" -"3262480112","3262480112","BE","BEL","BELGIUM" -"3262480113","3262480113","DE","DEU","GERMANY" -"3262480114","3262480114","IT","ITA","ITALY" -"3262480115","3262480116","DE","DEU","GERMANY" -"3262480117","3262480117","BE","BEL","BELGIUM" -"3262480118","3262480125","DE","DEU","GERMANY" -"3262480126","3262480126","ES","ESP","SPAIN" -"3262480127","3262480133","DE","DEU","GERMANY" -"3262480134","3262480134","AT","AUT","AUSTRIA" -"3262480135","3262480135","NL","NLD","NETHERLANDS" -"3262480136","3262480136","FR","FRA","FRANCE" -"3262480137","3262480139","DE","DEU","GERMANY" -"3262480140","3262480140","FR","FRA","FRANCE" -"3262480141","3262480141","AT","AUT","AUSTRIA" -"3262480142","3262480146","DE","DEU","GERMANY" -"3262480147","3262480147","IT","ITA","ITALY" -"3262480148","3262480148","GB","GBR","UNITED KINGDOM" -"3262480149","3262480150","DE","DEU","GERMANY" -"3262480151","3262480151","GB","GBR","UNITED KINGDOM" -"3262480152","3262480154","DE","DEU","GERMANY" -"3262480155","3262480155","ES","ESP","SPAIN" -"3262480156","3262480158","DE","DEU","GERMANY" -"3262480159","3262480159","IT","ITA","ITALY" -"3262480160","3262480161","DE","DEU","GERMANY" -"3262480162","3262480162","NO","NOR","NORWAY" -"3262480163","3262480164","DE","DEU","GERMANY" -"3262480165","3262480165","FR","FRA","FRANCE" -"3262480166","3262480172","DE","DEU","GERMANY" -"3262480173","3262480173","NL","NLD","NETHERLANDS" -"3262480174","3262480174","DE","DEU","GERMANY" -"3262480175","3262480175","NL","NLD","NETHERLANDS" -"3262480176","3262480176","DE","DEU","GERMANY" -"3262480177","3262480177","CH","CHE","SWITZERLAND" -"3262480178","3262480178","IT","ITA","ITALY" -"3262480179","3262480179","DE","DEU","GERMANY" -"3262480180","3262480180","FR","FRA","FRANCE" -"3262480181","3262480181","ES","ESP","SPAIN" -"3262480182","3262480182","DE","DEU","GERMANY" -"3262480183","3262480183","SE","SWE","SWEDEN" -"3262480184","3262480184","DE","DEU","GERMANY" -"3262480185","3262480185","FR","FRA","FRANCE" -"3262480186","3262480186","PT","PRT","PORTUGAL" -"3262480187","3262480187","DE","DEU","GERMANY" -"3262480188","3262480188","FI","FIN","FINLAND" -"3262480189","3262480189","CH","CHE","SWITZERLAND" -"3262480190","3262480190","DE","DEU","GERMANY" -"3262480191","3262480191","NO","NOR","NORWAY" -"3262480192","3262480193","DE","DEU","GERMANY" -"3262480194","3262480194","NL","NLD","NETHERLANDS" -"3262480195","3262480195","GB","GBR","UNITED KINGDOM" -"3262480196","3262480197","DE","DEU","GERMANY" -"3262480198","3262480198","NL","NLD","NETHERLANDS" -"3262480199","3262480199","GB","GBR","UNITED KINGDOM" -"3262480200","3262480201","DE","DEU","GERMANY" -"3262480202","3262480202","GB","GBR","UNITED KINGDOM" -"3262480203","3262480205","DE","DEU","GERMANY" -"3262480206","3262480206","CH","CHE","SWITZERLAND" -"3262480207","3262480212","DE","DEU","GERMANY" -"3262480213","3262480213","FR","FRA","FRANCE" -"3262480214","3262480215","DE","DEU","GERMANY" -"3262480216","3262480216","HU","HUN","HUNGARY" -"3262480217","3262480218","DE","DEU","GERMANY" -"3262480219","3262480219","ES","ESP","SPAIN" -"3262480220","3262480220","NL","NLD","NETHERLANDS" -"3262480221","3262480221","BE","BEL","BELGIUM" -"3262480222","3262480226","DE","DEU","GERMANY" -"3262480227","3262480227","IE","IRL","IRELAND" -"3262480228","3262480229","DE","DEU","GERMANY" -"3262480230","3262480230","SE","SWE","SWEDEN" -"3262480231","3262480232","DE","DEU","GERMANY" -"3262480233","3262480233","SE","SWE","SWEDEN" -"3262480234","3262480234","DE","DEU","GERMANY" -"3262480235","3262480235","HU","HUN","HUNGARY" -"3262480236","3262480236","DE","DEU","GERMANY" -"3262480237","3262480237","PL","POL","POLAND" -"3262480238","3262480238","DE","DEU","GERMANY" -"3262480239","3262480239","NL","NLD","NETHERLANDS" -"3262480240","3262480243","DE","DEU","GERMANY" -"3262480244","3262480244","CH","CHE","SWITZERLAND" -"3262480245","3262480246","DE","DEU","GERMANY" -"3262480247","3262480247","NL","NLD","NETHERLANDS" -"3262480248","3262480248","DE","DEU","GERMANY" -"3262480249","3262480249","NL","NLD","NETHERLANDS" -"3262480250","3262480250","DE","DEU","GERMANY" -"3262480251","3262480251","NL","NLD","NETHERLANDS" -"3262480252","3262480253","DE","DEU","GERMANY" -"3262480254","3262480254","CH","CHE","SWITZERLAND" -"3262480255","3262480260","DE","DEU","GERMANY" -"3262480261","3262480261","BE","BEL","BELGIUM" -"3262480262","3262480264","DE","DEU","GERMANY" -"3262480265","3262480265","GB","GBR","UNITED KINGDOM" -"3262480266","3262480267","DE","DEU","GERMANY" -"3262480268","3262480268","FR","FRA","FRANCE" -"3262480269","3262480269","NL","NLD","NETHERLANDS" -"3262480270","3262480270","DE","DEU","GERMANY" -"3262480271","3262480271","CH","CHE","SWITZERLAND" -"3262480272","3262480272","DK","DNK","DENMARK" -"3262480273","3262480273","DE","DEU","GERMANY" -"3262480274","3262480274","IT","ITA","ITALY" -"3262480275","3262480275","BE","BEL","BELGIUM" -"3262480276","3262480276","ES","ESP","SPAIN" -"3262480277","3262480277","DE","DEU","GERMANY" -"3262480278","3262480278","CH","CHE","SWITZERLAND" -"3262480279","3262480282","DE","DEU","GERMANY" -"3262480283","3262480283","GB","GBR","UNITED KINGDOM" -"3262480284","3262480285","DE","DEU","GERMANY" -"3262480286","3262480286","CH","CHE","SWITZERLAND" -"3262480287","3262480293","DE","DEU","GERMANY" -"3262480294","3262480294","FR","FRA","FRANCE" -"3262480295","3262480295","CH","CHE","SWITZERLAND" -"3262480296","3262480296","NO","NOR","NORWAY" -"3262480297","3262480300","DE","DEU","GERMANY" -"3262480301","3262480301","LU","LUX","LUXEMBOURG" -"3262480302","3262480302","DE","DEU","GERMANY" -"3262480303","3262480304","IT","ITA","ITALY" -"3262480305","3262480305","DE","DEU","GERMANY" -"3262480306","3262480306","AT","AUT","AUSTRIA" -"3262480307","3262480311","DE","DEU","GERMANY" -"3262480312","3262480312","NL","NLD","NETHERLANDS" -"3262480313","3262480313","FR","FRA","FRANCE" -"3262480314","3262480314","NL","NLD","NETHERLANDS" -"3262480315","3262480315","DE","DEU","GERMANY" -"3262480316","3262480316","IT","ITA","ITALY" -"3262480317","3262480317","NL","NLD","NETHERLANDS" -"3262480318","3262480318","IT","ITA","ITALY" -"3262480319","3262480319","AT","AUT","AUSTRIA" -"3262480320","3262480320","DK","DNK","DENMARK" -"3262480321","3262480321","DE","DEU","GERMANY" -"3262480322","3262480322","GB","GBR","UNITED KINGDOM" -"3262480323","3262480324","DE","DEU","GERMANY" -"3262480325","3262480325","ES","ESP","SPAIN" -"3262480326","3262480329","DE","DEU","GERMANY" -"3262480330","3262480330","FR","FRA","FRANCE" -"3262480331","3262480331","IT","ITA","ITALY" -"3262480332","3262480332","DE","DEU","GERMANY" -"3262480333","3262480333","CH","CHE","SWITZERLAND" -"3262480334","3262480334","DE","DEU","GERMANY" -"3262480335","3262480335","GB","GBR","UNITED KINGDOM" -"3262480336","3262480336","DE","DEU","GERMANY" -"3262480337","3262480337","NL","NLD","NETHERLANDS" -"3262480338","3262480340","DE","DEU","GERMANY" -"3262480341","3262480341","CH","CHE","SWITZERLAND" -"3262480342","3262480342","DE","DEU","GERMANY" -"3262480343","3262480343","DK","DNK","DENMARK" -"3262480344","3262480344","DE","DEU","GERMANY" -"3262480345","3262480345","CH","CHE","SWITZERLAND" -"3262480346","3262480346","DE","DEU","GERMANY" -"3262480347","3262480347","NL","NLD","NETHERLANDS" -"3262480348","3262480348","IS","ISL","ICELAND" -"3262480349","3262480349","AT","AUT","AUSTRIA" -"3262480350","3262480352","DE","DEU","GERMANY" -"3262480353","3262480353","CH","CHE","SWITZERLAND" -"3262480354","3262480354","DE","DEU","GERMANY" -"3262480355","3262480355","GB","GBR","UNITED KINGDOM" -"3262480356","3262480356","DE","DEU","GERMANY" -"3262480357","3262480357","GB","GBR","UNITED KINGDOM" -"3262480358","3262480359","CH","CHE","SWITZERLAND" -"3262480360","3262480363","DE","DEU","GERMANY" -"3262480364","3262480364","ES","ESP","SPAIN" -"3262480365","3262480365","DE","DEU","GERMANY" -"3262480366","3262480366","AT","AUT","AUSTRIA" -"3262480367","3262480367","DE","DEU","GERMANY" -"3262480368","3262480368","GB","GBR","UNITED KINGDOM" -"3262480369","3262480369","FR","FRA","FRANCE" -"3262480370","3262480370","ES","ESP","SPAIN" -"3262480371","3262480371","GB","GBR","UNITED KINGDOM" -"3262480372","3262480372","DE","DEU","GERMANY" -"3262480373","3262480373","AT","AUT","AUSTRIA" -"3262480374","3262480374","ES","ESP","SPAIN" -"3262480375","3262480375","NL","NLD","NETHERLANDS" -"3262480376","3262480376","DE","DEU","GERMANY" -"3262480377","3262480377","IT","ITA","ITALY" -"3262480378","3262480378","DE","DEU","GERMANY" -"3262480379","3262480379","CH","CHE","SWITZERLAND" -"3262480380","3262480380","GB","GBR","UNITED KINGDOM" -"3262480381","3262480381","IT","ITA","ITALY" -"3262480382","3262480382","ES","ESP","SPAIN" -"3262480383","3262480383","DE","DEU","GERMANY" -"3262480384","3262488575","GB","GBR","UNITED KINGDOM" -"3262488576","3262496767","SE","SWE","SWEDEN" -"3262496768","3262504959","FR","FRA","FRANCE" -"3262504960","3262505471","DE","DEU","GERMANY" -"3262505472","3262505983","GB","GBR","UNITED KINGDOM" -"3262505984","3262506495","PL","POL","POLAND" -"3262506496","3262507007","RO","ROM","ROMANIA" -"3262507008","3262507519","DK","DNK","DENMARK" -"3262507520","3262509055","RO","ROM","ROMANIA" -"3262509056","3262509567","PL","POL","POLAND" -"3262509568","3262510079","RO","ROM","ROMANIA" -"3262510080","3262511103","FR","FRA","FRANCE" -"3262511104","3262511615","GB","GBR","UNITED KINGDOM" -"3262511616","3262512127","DE","DEU","GERMANY" -"3262512128","3262512639","GB","GBR","UNITED KINGDOM" -"3262512640","3262513151","DE","DEU","GERMANY" -"3262513152","3262578687","AT","AUT","AUSTRIA" -"3262578688","3262611455","FR","FRA","FRANCE" -"3262611456","3262627839","GB","GBR","UNITED KINGDOM" -"3262627840","3262636031","IT","ITA","ITALY" -"3262636032","3262644223","BE","BEL","BELGIUM" -"3262644224","3262644695","NL","NLD","NETHERLANDS" -"3262644696","3262644703","DE","DEU","GERMANY" -"3262644704","3262644735","NL","NLD","NETHERLANDS" -"3262644736","3262644743","DE","DEU","GERMANY" -"3262644744","3262645047","NL","NLD","NETHERLANDS" -"3262645048","3262645063","DE","DEU","GERMANY" -"3262645064","3262645119","NL","NLD","NETHERLANDS" -"3262645120","3262645127","DE","DEU","GERMANY" -"3262645128","3262645143","NL","NLD","NETHERLANDS" -"3262645144","3262645151","DE","DEU","GERMANY" -"3262645152","3262645167","NL","NLD","NETHERLANDS" -"3262645168","3262645175","DE","DEU","GERMANY" -"3262645176","3262645447","NL","NLD","NETHERLANDS" -"3262645448","3262645463","DE","DEU","GERMANY" -"3262645464","3262645591","NL","NLD","NETHERLANDS" -"3262645592","3262645599","DE","DEU","GERMANY" -"3262645600","3262645631","NL","NLD","NETHERLANDS" -"3262645632","3262645639","DE","DEU","GERMANY" -"3262645640","3262645983","NL","NLD","NETHERLANDS" -"3262645984","3262645991","DE","DEU","GERMANY" -"3262645992","3262646007","NL","NLD","NETHERLANDS" -"3262646008","3262646015","DE","DEU","GERMANY" -"3262646016","3262646055","NL","NLD","NETHERLANDS" -"3262646056","3262646063","DE","DEU","GERMANY" -"3262646064","3262646095","NL","NLD","NETHERLANDS" -"3262646096","3262646103","DE","DEU","GERMANY" -"3262646104","3262646127","NL","NLD","NETHERLANDS" -"3262646128","3262646143","DE","DEU","GERMANY" -"3262646144","3262646239","NL","NLD","NETHERLANDS" -"3262646240","3262646247","DE","DEU","GERMANY" -"3262646248","3262646303","NL","NLD","NETHERLANDS" -"3262646304","3262646311","DE","DEU","GERMANY" -"3262646312","3262646335","NL","NLD","NETHERLANDS" -"3262646336","3262646343","DE","DEU","GERMANY" -"3262646344","3262646359","NL","NLD","NETHERLANDS" -"3262646360","3262646375","DE","DEU","GERMANY" -"3262646376","3262646399","NL","NLD","NETHERLANDS" -"3262646400","3262646407","DE","DEU","GERMANY" -"3262646408","3262646559","NL","NLD","NETHERLANDS" -"3262646560","3262646567","DE","DEU","GERMANY" -"3262646568","3262646575","NL","NLD","NETHERLANDS" -"3262646576","3262646583","DE","DEU","GERMANY" -"3262646584","3262646591","NL","NLD","NETHERLANDS" -"3262646592","3262646599","DE","DEU","GERMANY" -"3262646600","3262646855","NL","NLD","NETHERLANDS" -"3262646856","3262646871","DE","DEU","GERMANY" -"3262646872","3262646895","NL","NLD","NETHERLANDS" -"3262646896","3262646903","DE","DEU","GERMANY" -"3262646904","3262646911","NL","NLD","NETHERLANDS" -"3262646912","3262646919","DE","DEU","GERMANY" -"3262646920","3262646943","NL","NLD","NETHERLANDS" -"3262646944","3262646951","DE","DEU","GERMANY" -"3262646952","3262647063","NL","NLD","NETHERLANDS" -"3262647064","3262647071","DE","DEU","GERMANY" -"3262647072","3262647287","NL","NLD","NETHERLANDS" -"3262647288","3262647295","DE","DEU","GERMANY" -"3262647296","3262647367","NL","NLD","NETHERLANDS" -"3262647368","3262647375","DE","DEU","GERMANY" -"3262647376","3262647519","NL","NLD","NETHERLANDS" -"3262647520","3262647527","DE","DEU","GERMANY" -"3262647528","3262647559","NL","NLD","NETHERLANDS" -"3262647560","3262647567","DE","DEU","GERMANY" -"3262647568","3262647599","NL","NLD","NETHERLANDS" -"3262647600","3262647607","DE","DEU","GERMANY" -"3262647608","3262647647","NL","NLD","NETHERLANDS" -"3262647648","3262647663","DE","DEU","GERMANY" -"3262647664","3262647679","NL","NLD","NETHERLANDS" -"3262647680","3262647687","DE","DEU","GERMANY" -"3262647688","3262647695","NL","NLD","NETHERLANDS" -"3262647696","3262647703","DE","DEU","GERMANY" -"3262647704","3262647767","NL","NLD","NETHERLANDS" -"3262647768","3262647775","DE","DEU","GERMANY" -"3262647776","3262647807","NL","NLD","NETHERLANDS" -"3262647808","3262647823","DE","DEU","GERMANY" -"3262647824","3262647863","NL","NLD","NETHERLANDS" -"3262647864","3262647871","DE","DEU","GERMANY" -"3262647872","3262647895","NL","NLD","NETHERLANDS" -"3262647896","3262647903","DE","DEU","GERMANY" -"3262647904","3262647959","NL","NLD","NETHERLANDS" -"3262647960","3262647967","DE","DEU","GERMANY" -"3262647968","3262647983","NL","NLD","NETHERLANDS" -"3262647984","3262647991","DE","DEU","GERMANY" -"3262647992","3262648255","NL","NLD","NETHERLANDS" -"3262648256","3262648271","DE","DEU","GERMANY" -"3262648272","3262648319","NL","NLD","NETHERLANDS" -"3262648320","3262650623","DE","DEU","GERMANY" -"3262650624","3262650663","NL","NLD","NETHERLANDS" -"3262650664","3262650671","DE","DEU","GERMANY" -"3262650672","3262650719","NL","NLD","NETHERLANDS" -"3262650720","3262650727","DE","DEU","GERMANY" -"3262650728","3262650807","NL","NLD","NETHERLANDS" -"3262650808","3262650815","DE","DEU","GERMANY" -"3262650816","3262650823","NL","NLD","NETHERLANDS" -"3262650824","3262650831","DE","DEU","GERMANY" -"3262650832","3262650871","NL","NLD","NETHERLANDS" -"3262650872","3262650879","DE","DEU","GERMANY" -"3262650880","3262650895","NL","NLD","NETHERLANDS" -"3262650896","3262650903","DE","DEU","GERMANY" -"3262650904","3262650943","NL","NLD","NETHERLANDS" -"3262650944","3262650951","DE","DEU","GERMANY" -"3262650952","3262650999","NL","NLD","NETHERLANDS" -"3262651000","3262651007","DE","DEU","GERMANY" -"3262651008","3262651039","NL","NLD","NETHERLANDS" -"3262651040","3262651047","DE","DEU","GERMANY" -"3262651048","3262651079","NL","NLD","NETHERLANDS" -"3262651080","3262651095","DE","DEU","GERMANY" -"3262651096","3262651103","NL","NLD","NETHERLANDS" -"3262651104","3262651119","DE","DEU","GERMANY" -"3262651120","3262651231","NL","NLD","NETHERLANDS" -"3262651232","3262651247","DE","DEU","GERMANY" -"3262651248","3262651279","NL","NLD","NETHERLANDS" -"3262651280","3262651287","DE","DEU","GERMANY" -"3262651288","3262651367","NL","NLD","NETHERLANDS" -"3262651368","3262651375","DE","DEU","GERMANY" -"3262651376","3262651431","NL","NLD","NETHERLANDS" -"3262651432","3262651439","DE","DEU","GERMANY" -"3262651440","3262651447","NL","NLD","NETHERLANDS" -"3262651448","3262651455","DE","DEU","GERMANY" -"3262651456","3262651463","NL","NLD","NETHERLANDS" -"3262651464","3262651471","DE","DEU","GERMANY" -"3262651472","3262651567","NL","NLD","NETHERLANDS" -"3262651568","3262651583","DE","DEU","GERMANY" -"3262651584","3262651759","NL","NLD","NETHERLANDS" -"3262651760","3262651775","DE","DEU","GERMANY" -"3262651776","3262651919","NL","NLD","NETHERLANDS" -"3262651920","3262651943","DE","DEU","GERMANY" -"3262651944","3262651959","NL","NLD","NETHERLANDS" -"3262651960","3262651967","DE","DEU","GERMANY" -"3262651968","3262651983","NL","NLD","NETHERLANDS" -"3262651984","3262651991","DE","DEU","GERMANY" -"3262651992","3262652015","NL","NLD","NETHERLANDS" -"3262652016","3262652031","DE","DEU","GERMANY" -"3262652032","3262652087","NL","NLD","NETHERLANDS" -"3262652088","3262652095","DE","DEU","GERMANY" -"3262652096","3262652159","NL","NLD","NETHERLANDS" -"3262652160","3262652167","DE","DEU","GERMANY" -"3262652168","3262652295","NL","NLD","NETHERLANDS" -"3262652296","3262652303","DE","DEU","GERMANY" -"3262652304","3262652343","NL","NLD","NETHERLANDS" -"3262652344","3262652351","DE","DEU","GERMANY" -"3262652352","3262652543","NL","NLD","NETHERLANDS" -"3262652544","3262652559","DE","DEU","GERMANY" -"3262652560","3262652631","NL","NLD","NETHERLANDS" -"3262652632","3262652639","DE","DEU","GERMANY" -"3262652640","3262652679","NL","NLD","NETHERLANDS" -"3262652680","3262652687","DE","DEU","GERMANY" -"3262652688","3262652799","NL","NLD","NETHERLANDS" -"3262652800","3262652807","DE","DEU","GERMANY" -"3262652808","3262652887","NL","NLD","NETHERLANDS" -"3262652888","3262652903","DE","DEU","GERMANY" -"3262652904","3262652983","NL","NLD","NETHERLANDS" -"3262652984","3262652991","DE","DEU","GERMANY" -"3262652992","3262653095","NL","NLD","NETHERLANDS" -"3262653096","3262653103","DE","DEU","GERMANY" -"3262653104","3262653111","NL","NLD","NETHERLANDS" -"3262653112","3262653119","DE","DEU","GERMANY" -"3262653120","3262653223","NL","NLD","NETHERLANDS" -"3262653224","3262653231","DE","DEU","GERMANY" -"3262653232","3262653311","NL","NLD","NETHERLANDS" -"3262653312","3262653319","DE","DEU","GERMANY" -"3262653320","3262653343","NL","NLD","NETHERLANDS" -"3262653344","3262653351","DE","DEU","GERMANY" -"3262653352","3262653391","NL","NLD","NETHERLANDS" -"3262653392","3262653399","DE","DEU","GERMANY" -"3262653400","3262653423","NL","NLD","NETHERLANDS" -"3262653424","3262653431","DE","DEU","GERMANY" -"3262653432","3262653439","NL","NLD","NETHERLANDS" -"3262653440","3262653447","DE","DEU","GERMANY" -"3262653448","3262653727","NL","NLD","NETHERLANDS" -"3262653728","3262653735","DE","DEU","GERMANY" -"3262653736","3262653807","NL","NLD","NETHERLANDS" -"3262653808","3262653815","DE","DEU","GERMANY" -"3262653816","3262653823","NL","NLD","NETHERLANDS" -"3262653824","3262653831","DE","DEU","GERMANY" -"3262653832","3262653863","NL","NLD","NETHERLANDS" -"3262653864","3262653871","DE","DEU","GERMANY" -"3262653872","3262653975","NL","NLD","NETHERLANDS" -"3262653976","3262653983","DE","DEU","GERMANY" -"3262653984","3262654111","NL","NLD","NETHERLANDS" -"3262654112","3262654119","DE","DEU","GERMANY" -"3262654120","3262654207","NL","NLD","NETHERLANDS" -"3262654208","3262654215","DE","DEU","GERMANY" -"3262654216","3262654407","NL","NLD","NETHERLANDS" -"3262654408","3262654415","DE","DEU","GERMANY" -"3262654416","3262654463","NL","NLD","NETHERLANDS" -"3262654464","3262655487","DE","DEU","GERMANY" -"3262655488","3262655607","NL","NLD","NETHERLANDS" -"3262655608","3262655623","DE","DEU","GERMANY" -"3262655624","3262655695","NL","NLD","NETHERLANDS" -"3262655696","3262655703","DE","DEU","GERMANY" -"3262655704","3262656135","NL","NLD","NETHERLANDS" -"3262656136","3262656143","DE","DEU","GERMANY" -"3262656144","3262656335","NL","NLD","NETHERLANDS" -"3262656336","3262656343","DE","DEU","GERMANY" -"3262656344","3262656391","NL","NLD","NETHERLANDS" -"3262656392","3262656399","DE","DEU","GERMANY" -"3262656400","3262656423","NL","NLD","NETHERLANDS" -"3262656424","3262656431","DE","DEU","GERMANY" -"3262656432","3262656511","NL","NLD","NETHERLANDS" -"3262656512","3262656527","DE","DEU","GERMANY" -"3262656528","3262656743","NL","NLD","NETHERLANDS" -"3262656744","3262656751","DE","DEU","GERMANY" -"3262656752","3262656767","NL","NLD","NETHERLANDS" -"3262656768","3262656775","DE","DEU","GERMANY" -"3262656776","3262656863","NL","NLD","NETHERLANDS" -"3262656864","3262656871","DE","DEU","GERMANY" -"3262656872","3262656879","NL","NLD","NETHERLANDS" -"3262656880","3262656887","DE","DEU","GERMANY" -"3262656888","3262657039","NL","NLD","NETHERLANDS" -"3262657040","3262657047","DE","DEU","GERMANY" -"3262657048","3262657495","NL","NLD","NETHERLANDS" -"3262657496","3262657503","DE","DEU","GERMANY" -"3262657504","3262657519","NL","NLD","NETHERLANDS" -"3262657520","3262657535","DE","DEU","GERMANY" -"3262657536","3262657543","NL","NLD","NETHERLANDS" -"3262657544","3262657551","DE","DEU","GERMANY" -"3262657552","3262657599","NL","NLD","NETHERLANDS" -"3262657600","3262657607","DE","DEU","GERMANY" -"3262657608","3262657719","NL","NLD","NETHERLANDS" -"3262657720","3262657727","DE","DEU","GERMANY" -"3262657728","3262657855","NL","NLD","NETHERLANDS" -"3262657856","3262657863","DE","DEU","GERMANY" -"3262657864","3262657871","NL","NLD","NETHERLANDS" -"3262657872","3262657879","DE","DEU","GERMANY" -"3262657880","3262657903","NL","NLD","NETHERLANDS" -"3262657904","3262657911","DE","DEU","GERMANY" -"3262657912","3262657919","NL","NLD","NETHERLANDS" -"3262657920","3262657927","DE","DEU","GERMANY" -"3262657928","3262658015","NL","NLD","NETHERLANDS" -"3262658016","3262658023","DE","DEU","GERMANY" -"3262658024","3262658031","NL","NLD","NETHERLANDS" -"3262658032","3262658039","DE","DEU","GERMANY" -"3262658040","3262658183","NL","NLD","NETHERLANDS" -"3262658184","3262658191","DE","DEU","GERMANY" -"3262658192","3262658303","NL","NLD","NETHERLANDS" -"3262658304","3262658559","DE","DEU","GERMANY" -"3262658560","3262658623","NL","NLD","NETHERLANDS" -"3262658624","3262658631","DE","DEU","GERMANY" -"3262658632","3262658975","NL","NLD","NETHERLANDS" -"3262658976","3262658991","DE","DEU","GERMANY" -"3262658992","3262658999","NL","NLD","NETHERLANDS" -"3262659000","3262659007","DE","DEU","GERMANY" -"3262659008","3262659039","NL","NLD","NETHERLANDS" -"3262659040","3262659047","DE","DEU","GERMANY" -"3262659048","3262659103","NL","NLD","NETHERLANDS" -"3262659104","3262659111","DE","DEU","GERMANY" -"3262659112","3262659175","NL","NLD","NETHERLANDS" -"3262659176","3262659183","DE","DEU","GERMANY" -"3262659184","3262659191","NL","NLD","NETHERLANDS" -"3262659192","3262659207","DE","DEU","GERMANY" -"3262659208","3262659303","NL","NLD","NETHERLANDS" -"3262659304","3262659311","DE","DEU","GERMANY" -"3262659312","3262659327","NL","NLD","NETHERLANDS" -"3262659328","3262659343","DE","DEU","GERMANY" -"3262659344","3262659375","NL","NLD","NETHERLANDS" -"3262659376","3262659383","DE","DEU","GERMANY" -"3262659384","3262659463","NL","NLD","NETHERLANDS" -"3262659464","3262659471","DE","DEU","GERMANY" -"3262659472","3262659503","NL","NLD","NETHERLANDS" -"3262659504","3262659511","DE","DEU","GERMANY" -"3262659512","3262659551","NL","NLD","NETHERLANDS" -"3262659552","3262659559","DE","DEU","GERMANY" -"3262659560","3262659615","NL","NLD","NETHERLANDS" -"3262659616","3262659623","DE","DEU","GERMANY" -"3262659624","3262659631","NL","NLD","NETHERLANDS" -"3262659632","3262659639","DE","DEU","GERMANY" -"3262659640","3262659647","NL","NLD","NETHERLANDS" -"3262659648","3262659655","DE","DEU","GERMANY" -"3262659656","3262659679","NL","NLD","NETHERLANDS" -"3262659680","3262659695","DE","DEU","GERMANY" -"3262659696","3262659711","NL","NLD","NETHERLANDS" -"3262659712","3262659735","DE","DEU","GERMANY" -"3262659736","3262659807","NL","NLD","NETHERLANDS" -"3262659808","3262659815","DE","DEU","GERMANY" -"3262659816","3262659911","NL","NLD","NETHERLANDS" -"3262659912","3262659919","DE","DEU","GERMANY" -"3262659920","3262659951","NL","NLD","NETHERLANDS" -"3262659952","3262659959","DE","DEU","GERMANY" -"3262659960","3262660215","NL","NLD","NETHERLANDS" -"3262660216","3262660223","DE","DEU","GERMANY" -"3262660224","3262660279","NL","NLD","NETHERLANDS" -"3262660280","3262660287","DE","DEU","GERMANY" -"3262660288","3262660311","NL","NLD","NETHERLANDS" -"3262660312","3262660319","DE","DEU","GERMANY" -"3262660320","3262660399","NL","NLD","NETHERLANDS" -"3262660400","3262660415","DE","DEU","GERMANY" -"3262660416","3262660471","NL","NLD","NETHERLANDS" -"3262660472","3262660487","DE","DEU","GERMANY" -"3262660488","3262660535","NL","NLD","NETHERLANDS" -"3262660536","3262660543","DE","DEU","GERMANY" -"3262660544","3262660719","NL","NLD","NETHERLANDS" -"3262660720","3262660727","DE","DEU","GERMANY" -"3262660728","3262660775","NL","NLD","NETHERLANDS" -"3262660776","3262660783","DE","DEU","GERMANY" -"3262660784","3262660791","NL","NLD","NETHERLANDS" -"3262660792","3262660799","DE","DEU","GERMANY" -"3262660800","3262660871","NL","NLD","NETHERLANDS" -"3262660872","3262660879","DE","DEU","GERMANY" -"3262660880","3262660903","NL","NLD","NETHERLANDS" -"3262660904","3262660911","DE","DEU","GERMANY" -"3262660912","3262661039","NL","NLD","NETHERLANDS" -"3262661040","3262661047","DE","DEU","GERMANY" -"3262661048","3262661063","NL","NLD","NETHERLANDS" -"3262661064","3262661087","DE","DEU","GERMANY" -"3262661088","3262661119","NL","NLD","NETHERLANDS" -"3262661120","3262661375","DE","DEU","GERMANY" -"3262661376","3262661447","NL","NLD","NETHERLANDS" -"3262661448","3262661455","DE","DEU","GERMANY" -"3262661456","3262661527","NL","NLD","NETHERLANDS" -"3262661528","3262661535","DE","DEU","GERMANY" -"3262661536","3262661543","NL","NLD","NETHERLANDS" -"3262661544","3262661551","DE","DEU","GERMANY" -"3262661552","3262661575","NL","NLD","NETHERLANDS" -"3262661576","3262661583","DE","DEU","GERMANY" -"3262661584","3262661607","NL","NLD","NETHERLANDS" -"3262661608","3262661615","DE","DEU","GERMANY" -"3262661616","3262661663","NL","NLD","NETHERLANDS" -"3262661664","3262661671","DE","DEU","GERMANY" -"3262661672","3262661719","NL","NLD","NETHERLANDS" -"3262661720","3262661727","DE","DEU","GERMANY" -"3262661728","3262661743","NL","NLD","NETHERLANDS" -"3262661744","3262661751","DE","DEU","GERMANY" -"3262661752","3262661775","NL","NLD","NETHERLANDS" -"3262661776","3262661783","DE","DEU","GERMANY" -"3262661784","3262661807","NL","NLD","NETHERLANDS" -"3262661808","3262661815","DE","DEU","GERMANY" -"3262661816","3262661831","NL","NLD","NETHERLANDS" -"3262661832","3262661839","DE","DEU","GERMANY" -"3262661840","3262661847","NL","NLD","NETHERLANDS" -"3262661848","3262661855","DE","DEU","GERMANY" -"3262661856","3262661895","NL","NLD","NETHERLANDS" -"3262661896","3262661903","DE","DEU","GERMANY" -"3262661904","3262661975","NL","NLD","NETHERLANDS" -"3262661976","3262661983","DE","DEU","GERMANY" -"3262661984","3262662023","NL","NLD","NETHERLANDS" -"3262662024","3262662031","DE","DEU","GERMANY" -"3262662032","3262662087","NL","NLD","NETHERLANDS" -"3262662088","3262662095","DE","DEU","GERMANY" -"3262662096","3262662167","NL","NLD","NETHERLANDS" -"3262662168","3262662175","DE","DEU","GERMANY" -"3262662176","3262662223","NL","NLD","NETHERLANDS" -"3262662224","3262662231","DE","DEU","GERMANY" -"3262662232","3262662335","NL","NLD","NETHERLANDS" -"3262662336","3262662343","DE","DEU","GERMANY" -"3262662344","3262662567","NL","NLD","NETHERLANDS" -"3262662568","3262662575","DE","DEU","GERMANY" -"3262662576","3262662607","NL","NLD","NETHERLANDS" -"3262662608","3262662615","DE","DEU","GERMANY" -"3262662616","3262662623","NL","NLD","NETHERLANDS" -"3262662624","3262662631","DE","DEU","GERMANY" -"3262662632","3262662655","NL","NLD","NETHERLANDS" -"3262662656","3262662663","DE","DEU","GERMANY" -"3262662664","3262662775","NL","NLD","NETHERLANDS" -"3262662776","3262662783","DE","DEU","GERMANY" -"3262662784","3262662935","NL","NLD","NETHERLANDS" -"3262662936","3262662943","DE","DEU","GERMANY" -"3262662944","3262663119","NL","NLD","NETHERLANDS" -"3262663120","3262663127","DE","DEU","GERMANY" -"3262663128","3262663191","NL","NLD","NETHERLANDS" -"3262663192","3262663199","DE","DEU","GERMANY" -"3262663200","3262663223","NL","NLD","NETHERLANDS" -"3262663224","3262663231","DE","DEU","GERMANY" -"3262663232","3262663295","NL","NLD","NETHERLANDS" -"3262663296","3262663303","DE","DEU","GERMANY" -"3262663304","3262663327","NL","NLD","NETHERLANDS" -"3262663328","3262663335","DE","DEU","GERMANY" -"3262663336","3262663503","NL","NLD","NETHERLANDS" -"3262663504","3262663511","DE","DEU","GERMANY" -"3262663512","3262663591","NL","NLD","NETHERLANDS" -"3262663592","3262663599","DE","DEU","GERMANY" -"3262663600","3262663831","NL","NLD","NETHERLANDS" -"3262663832","3262663839","DE","DEU","GERMANY" -"3262663840","3262663847","NL","NLD","NETHERLANDS" -"3262663848","3262663855","DE","DEU","GERMANY" -"3262663856","3262664015","NL","NLD","NETHERLANDS" -"3262664016","3262664023","DE","DEU","GERMANY" -"3262664024","3262664063","NL","NLD","NETHERLANDS" -"3262664064","3262664071","DE","DEU","GERMANY" -"3262664072","3262664311","NL","NLD","NETHERLANDS" -"3262664312","3262664319","DE","DEU","GERMANY" -"3262664320","3262664343","NL","NLD","NETHERLANDS" -"3262664344","3262664359","DE","DEU","GERMANY" -"3262664360","3262664399","NL","NLD","NETHERLANDS" -"3262664400","3262664407","DE","DEU","GERMANY" -"3262664408","3262664463","NL","NLD","NETHERLANDS" -"3262664464","3262664471","DE","DEU","GERMANY" -"3262664472","3262664559","NL","NLD","NETHERLANDS" -"3262664560","3262664567","DE","DEU","GERMANY" -"3262664568","3262664599","NL","NLD","NETHERLANDS" -"3262664600","3262664607","DE","DEU","GERMANY" -"3262664608","3262664615","NL","NLD","NETHERLANDS" -"3262664616","3262664631","DE","DEU","GERMANY" -"3262664632","3262664703","NL","NLD","NETHERLANDS" -"3262664704","3262678527","DE","DEU","GERMANY" -"3262678528","3262678559","NL","NLD","NETHERLANDS" -"3262678560","3262678567","DE","DEU","GERMANY" -"3262678568","3262678743","NL","NLD","NETHERLANDS" -"3262678744","3262678751","DE","DEU","GERMANY" -"3262678752","3262678791","NL","NLD","NETHERLANDS" -"3262678792","3262678799","DE","DEU","GERMANY" -"3262678800","3262678991","NL","NLD","NETHERLANDS" -"3262678992","3262678999","DE","DEU","GERMANY" -"3262679000","3262679151","NL","NLD","NETHERLANDS" -"3262679152","3262679167","DE","DEU","GERMANY" -"3262679168","3262679175","NL","NLD","NETHERLANDS" -"3262679176","3262679183","DE","DEU","GERMANY" -"3262679184","3262679215","NL","NLD","NETHERLANDS" -"3262679216","3262679223","DE","DEU","GERMANY" -"3262679224","3262679231","NL","NLD","NETHERLANDS" -"3262679232","3262679239","DE","DEU","GERMANY" -"3262679240","3262679263","NL","NLD","NETHERLANDS" -"3262679264","3262679287","DE","DEU","GERMANY" -"3262679288","3262679311","NL","NLD","NETHERLANDS" -"3262679312","3262679319","DE","DEU","GERMANY" -"3262679320","3262679327","NL","NLD","NETHERLANDS" -"3262679328","3262679335","DE","DEU","GERMANY" -"3262679336","3262679423","NL","NLD","NETHERLANDS" -"3262679424","3262679431","DE","DEU","GERMANY" -"3262679432","3262679471","NL","NLD","NETHERLANDS" -"3262679472","3262679479","DE","DEU","GERMANY" -"3262679480","3262679759","NL","NLD","NETHERLANDS" -"3262679760","3262679767","DE","DEU","GERMANY" -"3262679768","3262679839","NL","NLD","NETHERLANDS" -"3262679840","3262679847","DE","DEU","GERMANY" -"3262679848","3262680143","NL","NLD","NETHERLANDS" -"3262680144","3262680151","DE","DEU","GERMANY" -"3262680152","3262680199","NL","NLD","NETHERLANDS" -"3262680200","3262680215","DE","DEU","GERMANY" -"3262680216","3262680303","NL","NLD","NETHERLANDS" -"3262680304","3262680319","DE","DEU","GERMANY" -"3262680320","3262680335","NL","NLD","NETHERLANDS" -"3262680336","3262680343","DE","DEU","GERMANY" -"3262680344","3262680375","NL","NLD","NETHERLANDS" -"3262680376","3262680383","DE","DEU","GERMANY" -"3262680384","3262680399","NL","NLD","NETHERLANDS" -"3262680400","3262680407","DE","DEU","GERMANY" -"3262680408","3262680495","NL","NLD","NETHERLANDS" -"3262680496","3262680503","DE","DEU","GERMANY" -"3262680504","3262680607","NL","NLD","NETHERLANDS" -"3262680608","3262680615","DE","DEU","GERMANY" -"3262680616","3262680647","NL","NLD","NETHERLANDS" -"3262680648","3262680663","DE","DEU","GERMANY" -"3262680664","3262680695","NL","NLD","NETHERLANDS" -"3262680696","3262680703","DE","DEU","GERMANY" -"3262680704","3262680743","NL","NLD","NETHERLANDS" -"3262680744","3262680751","DE","DEU","GERMANY" -"3262680752","3262680807","NL","NLD","NETHERLANDS" -"3262680808","3262680815","DE","DEU","GERMANY" -"3262680816","3262680831","NL","NLD","NETHERLANDS" -"3262680832","3262680839","DE","DEU","GERMANY" -"3262680840","3262681087","NL","NLD","NETHERLANDS" -"3262681088","3262682879","DE","DEU","GERMANY" -"3262682880","3262682887","NL","NLD","NETHERLANDS" -"3262682888","3262682895","DE","DEU","GERMANY" -"3262682896","3262682903","NL","NLD","NETHERLANDS" -"3262682904","3262682911","DE","DEU","GERMANY" -"3262682912","3262683063","NL","NLD","NETHERLANDS" -"3262683064","3262683071","DE","DEU","GERMANY" -"3262683072","3262683255","NL","NLD","NETHERLANDS" -"3262683256","3262683263","DE","DEU","GERMANY" -"3262683264","3262683303","NL","NLD","NETHERLANDS" -"3262683304","3262683311","DE","DEU","GERMANY" -"3262683312","3262683447","NL","NLD","NETHERLANDS" -"3262683448","3262683455","DE","DEU","GERMANY" -"3262683456","3262683471","NL","NLD","NETHERLANDS" -"3262683472","3262683479","DE","DEU","GERMANY" -"3262683480","3262683687","NL","NLD","NETHERLANDS" -"3262683688","3262683695","DE","DEU","GERMANY" -"3262683696","3262683711","NL","NLD","NETHERLANDS" -"3262683712","3262683719","DE","DEU","GERMANY" -"3262683720","3262683743","NL","NLD","NETHERLANDS" -"3262683744","3262683751","DE","DEU","GERMANY" -"3262683752","3262683815","NL","NLD","NETHERLANDS" -"3262683816","3262683831","DE","DEU","GERMANY" -"3262683832","3262683871","NL","NLD","NETHERLANDS" -"3262683872","3262683879","DE","DEU","GERMANY" -"3262683880","3262683999","NL","NLD","NETHERLANDS" -"3262684000","3262684007","DE","DEU","GERMANY" -"3262684008","3262684015","NL","NLD","NETHERLANDS" -"3262684016","3262684023","DE","DEU","GERMANY" -"3262684024","3262684271","NL","NLD","NETHERLANDS" -"3262684272","3262684279","DE","DEU","GERMANY" -"3262684280","3262684367","NL","NLD","NETHERLANDS" -"3262684368","3262684375","DE","DEU","GERMANY" -"3262684376","3262684383","NL","NLD","NETHERLANDS" -"3262684384","3262684399","DE","DEU","GERMANY" -"3262684400","3262684487","NL","NLD","NETHERLANDS" -"3262684488","3262684495","DE","DEU","GERMANY" -"3262684496","3262684511","NL","NLD","NETHERLANDS" -"3262684512","3262684519","DE","DEU","GERMANY" -"3262684520","3262684591","NL","NLD","NETHERLANDS" -"3262684592","3262684607","DE","DEU","GERMANY" -"3262684608","3262684615","NL","NLD","NETHERLANDS" -"3262684616","3262684623","DE","DEU","GERMANY" -"3262684624","3262684679","NL","NLD","NETHERLANDS" -"3262684680","3262684687","DE","DEU","GERMANY" -"3262684688","3262684703","NL","NLD","NETHERLANDS" -"3262684704","3262684711","DE","DEU","GERMANY" -"3262684712","3262684751","NL","NLD","NETHERLANDS" -"3262684752","3262684759","DE","DEU","GERMANY" -"3262684760","3262684991","NL","NLD","NETHERLANDS" -"3262684992","3262684999","DE","DEU","GERMANY" -"3262685000","3262685287","NL","NLD","NETHERLANDS" -"3262685288","3262685295","DE","DEU","GERMANY" -"3262685296","3262685327","NL","NLD","NETHERLANDS" -"3262685328","3262685335","DE","DEU","GERMANY" -"3262685336","3262685359","NL","NLD","NETHERLANDS" -"3262685360","3262685367","DE","DEU","GERMANY" -"3262685368","3262685407","NL","NLD","NETHERLANDS" -"3262685408","3262685415","DE","DEU","GERMANY" -"3262685416","3262685423","NL","NLD","NETHERLANDS" -"3262685424","3262685447","DE","DEU","GERMANY" -"3262685448","3262685623","NL","NLD","NETHERLANDS" -"3262685624","3262685631","DE","DEU","GERMANY" -"3262685632","3262685655","NL","NLD","NETHERLANDS" -"3262685656","3262685663","DE","DEU","GERMANY" -"3262685664","3262685751","NL","NLD","NETHERLANDS" -"3262685752","3262685767","DE","DEU","GERMANY" -"3262685768","3262685815","NL","NLD","NETHERLANDS" -"3262685816","3262685823","DE","DEU","GERMANY" -"3262685824","3262685951","NL","NLD","NETHERLANDS" -"3262685952","3262688767","DE","DEU","GERMANY" -"3262688768","3262688791","NL","NLD","NETHERLANDS" -"3262688792","3262688799","DE","DEU","GERMANY" -"3262688800","3262688879","NL","NLD","NETHERLANDS" -"3262688880","3262688887","DE","DEU","GERMANY" -"3262688888","3262689055","NL","NLD","NETHERLANDS" -"3262689056","3262689063","DE","DEU","GERMANY" -"3262689064","3262689087","NL","NLD","NETHERLANDS" -"3262689088","3262689095","DE","DEU","GERMANY" -"3262689096","3262689127","NL","NLD","NETHERLANDS" -"3262689128","3262689135","DE","DEU","GERMANY" -"3262689136","3262689215","NL","NLD","NETHERLANDS" -"3262689216","3262689223","DE","DEU","GERMANY" -"3262689224","3262689343","NL","NLD","NETHERLANDS" -"3262689344","3262689351","DE","DEU","GERMANY" -"3262689352","3262689367","NL","NLD","NETHERLANDS" -"3262689368","3262689375","DE","DEU","GERMANY" -"3262689376","3262689559","NL","NLD","NETHERLANDS" -"3262689560","3262689567","DE","DEU","GERMANY" -"3262689568","3262689607","NL","NLD","NETHERLANDS" -"3262689608","3262689623","DE","DEU","GERMANY" -"3262689624","3262689751","NL","NLD","NETHERLANDS" -"3262689752","3262689759","DE","DEU","GERMANY" -"3262689760","3262689847","NL","NLD","NETHERLANDS" -"3262689848","3262689855","DE","DEU","GERMANY" -"3262689856","3262689871","NL","NLD","NETHERLANDS" -"3262689872","3262689879","DE","DEU","GERMANY" -"3262689880","3262689895","NL","NLD","NETHERLANDS" -"3262689896","3262689911","DE","DEU","GERMANY" -"3262689912","3262689927","NL","NLD","NETHERLANDS" -"3262689928","3262689935","DE","DEU","GERMANY" -"3262689936","3262689959","NL","NLD","NETHERLANDS" -"3262689960","3262689967","DE","DEU","GERMANY" -"3262689968","3262689983","NL","NLD","NETHERLANDS" -"3262689984","3262689991","DE","DEU","GERMANY" -"3262689992","3262690119","NL","NLD","NETHERLANDS" -"3262690120","3262690127","DE","DEU","GERMANY" -"3262690128","3262690151","NL","NLD","NETHERLANDS" -"3262690152","3262690159","DE","DEU","GERMANY" -"3262690160","3262690327","NL","NLD","NETHERLANDS" -"3262690328","3262690335","DE","DEU","GERMANY" -"3262690336","3262690359","NL","NLD","NETHERLANDS" -"3262690360","3262690367","DE","DEU","GERMANY" -"3262690368","3262690487","NL","NLD","NETHERLANDS" -"3262690488","3262690495","DE","DEU","GERMANY" -"3262690496","3262690511","NL","NLD","NETHERLANDS" -"3262690512","3262690519","DE","DEU","GERMANY" -"3262690520","3262690527","NL","NLD","NETHERLANDS" -"3262690528","3262690535","DE","DEU","GERMANY" -"3262690536","3262690671","NL","NLD","NETHERLANDS" -"3262690672","3262690687","DE","DEU","GERMANY" -"3262690688","3262690775","NL","NLD","NETHERLANDS" -"3262690776","3262690783","DE","DEU","GERMANY" -"3262690784","3262690815","NL","NLD","NETHERLANDS" -"3262690816","3262704383","DE","DEU","GERMANY" -"3262704384","3262704479","NL","NLD","NETHERLANDS" -"3262704480","3262704487","DE","DEU","GERMANY" -"3262704488","3262704543","NL","NLD","NETHERLANDS" -"3262704544","3262704551","DE","DEU","GERMANY" -"3262704552","3262704575","NL","NLD","NETHERLANDS" -"3262704576","3262704583","DE","DEU","GERMANY" -"3262704584","3262704663","NL","NLD","NETHERLANDS" -"3262704664","3262704671","DE","DEU","GERMANY" -"3262704672","3262704735","NL","NLD","NETHERLANDS" -"3262704736","3262704743","DE","DEU","GERMANY" -"3262704744","3262704759","NL","NLD","NETHERLANDS" -"3262704760","3262704767","DE","DEU","GERMANY" -"3262704768","3262704855","NL","NLD","NETHERLANDS" -"3262704856","3262704863","DE","DEU","GERMANY" -"3262704864","3262705031","NL","NLD","NETHERLANDS" -"3262705032","3262705039","DE","DEU","GERMANY" -"3262705040","3262705063","NL","NLD","NETHERLANDS" -"3262705064","3262705071","DE","DEU","GERMANY" -"3262705072","3262705111","NL","NLD","NETHERLANDS" -"3262705112","3262705119","DE","DEU","GERMANY" -"3262705120","3262705303","NL","NLD","NETHERLANDS" -"3262705304","3262705311","DE","DEU","GERMANY" -"3262705312","3262705319","NL","NLD","NETHERLANDS" -"3262705320","3262705327","DE","DEU","GERMANY" -"3262705328","3262705367","NL","NLD","NETHERLANDS" -"3262705368","3262705375","DE","DEU","GERMANY" -"3262705376","3262705639","NL","NLD","NETHERLANDS" -"3262705640","3262705647","DE","DEU","GERMANY" -"3262705648","3262705695","NL","NLD","NETHERLANDS" -"3262705696","3262705703","DE","DEU","GERMANY" -"3262705704","3262705759","NL","NLD","NETHERLANDS" -"3262705760","3262705767","DE","DEU","GERMANY" -"3262705768","3262705799","NL","NLD","NETHERLANDS" -"3262705800","3262705807","DE","DEU","GERMANY" -"3262705808","3262705831","NL","NLD","NETHERLANDS" -"3262705832","3262705839","DE","DEU","GERMANY" -"3262705840","3262706031","NL","NLD","NETHERLANDS" -"3262706032","3262706039","DE","DEU","GERMANY" -"3262706040","3262706127","NL","NLD","NETHERLANDS" -"3262706128","3262706143","DE","DEU","GERMANY" -"3262706144","3262706159","NL","NLD","NETHERLANDS" -"3262706160","3262706175","DE","DEU","GERMANY" -"3262706176","3262706271","NL","NLD","NETHERLANDS" -"3262706272","3262706279","DE","DEU","GERMANY" -"3262706280","3262706439","NL","NLD","NETHERLANDS" -"3262706440","3262706447","DE","DEU","GERMANY" -"3262706448","3262706487","NL","NLD","NETHERLANDS" -"3262706488","3262706495","DE","DEU","GERMANY" -"3262706496","3262706559","NL","NLD","NETHERLANDS" -"3262706560","3262706567","DE","DEU","GERMANY" -"3262706568","3262706655","NL","NLD","NETHERLANDS" -"3262706656","3262706663","DE","DEU","GERMANY" -"3262706664","3262706767","NL","NLD","NETHERLANDS" -"3262706768","3262706783","DE","DEU","GERMANY" -"3262706784","3262706839","NL","NLD","NETHERLANDS" -"3262706840","3262706847","DE","DEU","GERMANY" -"3262706848","3262706903","NL","NLD","NETHERLANDS" -"3262706904","3262706911","DE","DEU","GERMANY" -"3262706912","3262706951","NL","NLD","NETHERLANDS" -"3262706952","3262706959","DE","DEU","GERMANY" -"3262706960","3262706975","NL","NLD","NETHERLANDS" -"3262706976","3262706999","DE","DEU","GERMANY" -"3262707000","3262707159","NL","NLD","NETHERLANDS" -"3262707160","3262707167","DE","DEU","GERMANY" -"3262707168","3262707207","NL","NLD","NETHERLANDS" -"3262707208","3262707215","DE","DEU","GERMANY" -"3262707216","3262707223","NL","NLD","NETHERLANDS" -"3262707224","3262707231","DE","DEU","GERMANY" -"3262707232","3262707239","NL","NLD","NETHERLANDS" -"3262707240","3262707247","DE","DEU","GERMANY" -"3262707248","3262707271","NL","NLD","NETHERLANDS" -"3262707272","3262707295","DE","DEU","GERMANY" -"3262707296","3262707303","NL","NLD","NETHERLANDS" -"3262707304","3262707311","DE","DEU","GERMANY" -"3262707312","3262707391","NL","NLD","NETHERLANDS" -"3262707392","3262707399","DE","DEU","GERMANY" -"3262707400","3262707463","NL","NLD","NETHERLANDS" -"3262707464","3262707471","DE","DEU","GERMANY" -"3262707472","3262707487","NL","NLD","NETHERLANDS" -"3262707488","3262707495","DE","DEU","GERMANY" -"3262707496","3262707519","NL","NLD","NETHERLANDS" -"3262707520","3262707527","DE","DEU","GERMANY" -"3262707528","3262707559","NL","NLD","NETHERLANDS" -"3262707560","3262707567","DE","DEU","GERMANY" -"3262707568","3262707591","NL","NLD","NETHERLANDS" -"3262707592","3262707599","DE","DEU","GERMANY" -"3262707600","3262707711","NL","NLD","NETHERLANDS" -"3262707712","3262710527","DE","DEU","GERMANY" -"3262710528","3262710583","NL","NLD","NETHERLANDS" -"3262710584","3262710591","DE","DEU","GERMANY" -"3262710592","3262710727","NL","NLD","NETHERLANDS" -"3262710728","3262710735","DE","DEU","GERMANY" -"3262710736","3262710935","NL","NLD","NETHERLANDS" -"3262710936","3262710943","DE","DEU","GERMANY" -"3262710944","3262710991","NL","NLD","NETHERLANDS" -"3262710992","3262710999","DE","DEU","GERMANY" -"3262711000","3262711143","NL","NLD","NETHERLANDS" -"3262711144","3262711151","DE","DEU","GERMANY" -"3262711152","3262711223","NL","NLD","NETHERLANDS" -"3262711224","3262711231","DE","DEU","GERMANY" -"3262711232","3262711383","NL","NLD","NETHERLANDS" -"3262711384","3262711391","DE","DEU","GERMANY" -"3262711392","3262711471","NL","NLD","NETHERLANDS" -"3262711472","3262711487","DE","DEU","GERMANY" -"3262711488","3262711543","NL","NLD","NETHERLANDS" -"3262711544","3262711551","DE","DEU","GERMANY" -"3262711552","3262711823","NL","NLD","NETHERLANDS" -"3262711824","3262711831","DE","DEU","GERMANY" -"3262711832","3262711855","NL","NLD","NETHERLANDS" -"3262711856","3262711863","DE","DEU","GERMANY" -"3262711864","3262711887","NL","NLD","NETHERLANDS" -"3262711888","3262711895","DE","DEU","GERMANY" -"3262711896","3262711919","NL","NLD","NETHERLANDS" -"3262711920","3262711927","DE","DEU","GERMANY" -"3262711928","3262711943","NL","NLD","NETHERLANDS" -"3262711944","3262711951","DE","DEU","GERMANY" -"3262711952","3262712199","NL","NLD","NETHERLANDS" -"3262712200","3262712207","DE","DEU","GERMANY" -"3262712208","3262712375","NL","NLD","NETHERLANDS" -"3262712376","3262712383","DE","DEU","GERMANY" -"3262712384","3262712471","NL","NLD","NETHERLANDS" -"3262712472","3262712479","DE","DEU","GERMANY" -"3262712480","3262712575","NL","NLD","NETHERLANDS" -"3262712576","3262712831","DE","DEU","GERMANY" -"3262712832","3262713135","NL","NLD","NETHERLANDS" -"3262713136","3262713143","DE","DEU","GERMANY" -"3262713144","3262713399","NL","NLD","NETHERLANDS" -"3262713400","3262713407","DE","DEU","GERMANY" -"3262713408","3262713415","NL","NLD","NETHERLANDS" -"3262713416","3262713423","DE","DEU","GERMANY" -"3262713424","3262713455","NL","NLD","NETHERLANDS" -"3262713456","3262713463","DE","DEU","GERMANY" -"3262713464","3262713519","NL","NLD","NETHERLANDS" -"3262713520","3262713527","DE","DEU","GERMANY" -"3262713528","3262713583","NL","NLD","NETHERLANDS" -"3262713584","3262713591","DE","DEU","GERMANY" -"3262713592","3262713703","NL","NLD","NETHERLANDS" -"3262713704","3262713711","DE","DEU","GERMANY" -"3262713712","3262713807","NL","NLD","NETHERLANDS" -"3262713808","3262713815","DE","DEU","GERMANY" -"3262713816","3262713943","NL","NLD","NETHERLANDS" -"3262713944","3262713951","DE","DEU","GERMANY" -"3262713952","3262714023","NL","NLD","NETHERLANDS" -"3262714024","3262714031","DE","DEU","GERMANY" -"3262714032","3262714063","NL","NLD","NETHERLANDS" -"3262714064","3262714071","DE","DEU","GERMANY" -"3262714072","3262714183","NL","NLD","NETHERLANDS" -"3262714184","3262714191","DE","DEU","GERMANY" -"3262714192","3262714207","NL","NLD","NETHERLANDS" -"3262714208","3262714215","DE","DEU","GERMANY" -"3262714216","3262714311","NL","NLD","NETHERLANDS" -"3262714312","3262714327","DE","DEU","GERMANY" -"3262714328","3262714511","NL","NLD","NETHERLANDS" -"3262714512","3262714519","DE","DEU","GERMANY" -"3262714520","3262714527","NL","NLD","NETHERLANDS" -"3262714528","3262714535","DE","DEU","GERMANY" -"3262714536","3262714583","NL","NLD","NETHERLANDS" -"3262714584","3262714591","DE","DEU","GERMANY" -"3262714592","3262714599","NL","NLD","NETHERLANDS" -"3262714600","3262714615","DE","DEU","GERMANY" -"3262714616","3262714703","NL","NLD","NETHERLANDS" -"3262714704","3262714711","DE","DEU","GERMANY" -"3262714712","3262714719","NL","NLD","NETHERLANDS" -"3262714720","3262714727","DE","DEU","GERMANY" -"3262714728","3262714735","NL","NLD","NETHERLANDS" -"3262714736","3262714743","DE","DEU","GERMANY" -"3262714744","3262714775","NL","NLD","NETHERLANDS" -"3262714776","3262714791","DE","DEU","GERMANY" -"3262714792","3262714799","NL","NLD","NETHERLANDS" -"3262714800","3262714807","DE","DEU","GERMANY" -"3262714808","3262714815","NL","NLD","NETHERLANDS" -"3262714816","3262714823","DE","DEU","GERMANY" -"3262714824","3262714831","NL","NLD","NETHERLANDS" -"3262714832","3262714839","DE","DEU","GERMANY" -"3262714840","3262714895","NL","NLD","NETHERLANDS" -"3262714896","3262714903","DE","DEU","GERMANY" -"3262714904","3262714919","NL","NLD","NETHERLANDS" -"3262714920","3262714927","DE","DEU","GERMANY" -"3262714928","3262715135","NL","NLD","NETHERLANDS" -"3262715136","3262716671","DE","DEU","GERMANY" -"3262716672","3262716743","NL","NLD","NETHERLANDS" -"3262716744","3262716751","DE","DEU","GERMANY" -"3262716752","3262716791","NL","NLD","NETHERLANDS" -"3262716792","3262716799","DE","DEU","GERMANY" -"3262716800","3262716823","NL","NLD","NETHERLANDS" -"3262716824","3262716839","DE","DEU","GERMANY" -"3262716840","3262716911","NL","NLD","NETHERLANDS" -"3262716912","3262716919","DE","DEU","GERMANY" -"3262716920","3262716935","NL","NLD","NETHERLANDS" -"3262716936","3262716943","DE","DEU","GERMANY" -"3262716944","3262716959","NL","NLD","NETHERLANDS" -"3262716960","3262716967","DE","DEU","GERMANY" -"3262716968","3262717191","NL","NLD","NETHERLANDS" -"3262717192","3262717207","DE","DEU","GERMANY" -"3262717208","3262717263","NL","NLD","NETHERLANDS" -"3262717264","3262717271","DE","DEU","GERMANY" -"3262717272","3262717415","NL","NLD","NETHERLANDS" -"3262717416","3262717423","DE","DEU","GERMANY" -"3262717424","3262717487","NL","NLD","NETHERLANDS" -"3262717488","3262717495","DE","DEU","GERMANY" -"3262717496","3262717551","NL","NLD","NETHERLANDS" -"3262717552","3262717559","DE","DEU","GERMANY" -"3262717560","3262717607","NL","NLD","NETHERLANDS" -"3262717608","3262717615","DE","DEU","GERMANY" -"3262717616","3262717783","NL","NLD","NETHERLANDS" -"3262717784","3262717791","DE","DEU","GERMANY" -"3262717792","3262717903","NL","NLD","NETHERLANDS" -"3262717904","3262717911","DE","DEU","GERMANY" -"3262717912","3262718063","NL","NLD","NETHERLANDS" -"3262718064","3262718071","DE","DEU","GERMANY" -"3262718072","3262718079","NL","NLD","NETHERLANDS" -"3262718080","3262718087","DE","DEU","GERMANY" -"3262718088","3262718175","NL","NLD","NETHERLANDS" -"3262718176","3262718183","DE","DEU","GERMANY" -"3262718184","3262718223","NL","NLD","NETHERLANDS" -"3262718224","3262718231","DE","DEU","GERMANY" -"3262718232","3262718263","NL","NLD","NETHERLANDS" -"3262718264","3262718271","DE","DEU","GERMANY" -"3262718272","3262718279","NL","NLD","NETHERLANDS" -"3262718280","3262718287","DE","DEU","GERMANY" -"3262718288","3262718471","NL","NLD","NETHERLANDS" -"3262718472","3262718479","DE","DEU","GERMANY" -"3262718480","3262718487","NL","NLD","NETHERLANDS" -"3262718488","3262718495","DE","DEU","GERMANY" -"3262718496","3262718511","NL","NLD","NETHERLANDS" -"3262718512","3262718519","DE","DEU","GERMANY" -"3262718520","3262718559","NL","NLD","NETHERLANDS" -"3262718560","3262718567","DE","DEU","GERMANY" -"3262718568","3262718839","NL","NLD","NETHERLANDS" -"3262718840","3262718847","DE","DEU","GERMANY" -"3262718848","3262718919","NL","NLD","NETHERLANDS" -"3262718920","3262718935","DE","DEU","GERMANY" -"3262718936","3262719047","NL","NLD","NETHERLANDS" -"3262719048","3262719063","DE","DEU","GERMANY" -"3262719064","3262719095","NL","NLD","NETHERLANDS" -"3262719096","3262719103","DE","DEU","GERMANY" -"3262719104","3262719127","NL","NLD","NETHERLANDS" -"3262719128","3262719135","DE","DEU","GERMANY" -"3262719136","3262719159","NL","NLD","NETHERLANDS" -"3262719160","3262719167","DE","DEU","GERMANY" -"3262719168","3262719175","NL","NLD","NETHERLANDS" -"3262719176","3262719183","DE","DEU","GERMANY" -"3262719184","3262719255","NL","NLD","NETHERLANDS" -"3262719256","3262719263","DE","DEU","GERMANY" -"3262719264","3262719303","NL","NLD","NETHERLANDS" -"3262719304","3262719311","DE","DEU","GERMANY" -"3262719312","3262719383","NL","NLD","NETHERLANDS" -"3262719384","3262719391","DE","DEU","GERMANY" -"3262719392","3262719423","NL","NLD","NETHERLANDS" -"3262719424","3262719431","DE","DEU","GERMANY" -"3262719432","3262719519","NL","NLD","NETHERLANDS" -"3262719520","3262719527","DE","DEU","GERMANY" -"3262719528","3262719615","NL","NLD","NETHERLANDS" -"3262719616","3262719623","DE","DEU","GERMANY" -"3262719624","3262719743","NL","NLD","NETHERLANDS" -"3262719744","3262719751","DE","DEU","GERMANY" -"3262719752","3262719839","NL","NLD","NETHERLANDS" -"3262719840","3262719847","DE","DEU","GERMANY" -"3262719848","3262719855","NL","NLD","NETHERLANDS" -"3262719856","3262719863","DE","DEU","GERMANY" -"3262719864","3262719895","NL","NLD","NETHERLANDS" -"3262719896","3262719903","DE","DEU","GERMANY" -"3262719904","3262719911","NL","NLD","NETHERLANDS" -"3262719912","3262719919","DE","DEU","GERMANY" -"3262719920","3262719927","NL","NLD","NETHERLANDS" -"3262719928","3262719935","DE","DEU","GERMANY" -"3262719936","3262720055","NL","NLD","NETHERLANDS" -"3262720056","3262720063","DE","DEU","GERMANY" -"3262720064","3262720119","NL","NLD","NETHERLANDS" -"3262720120","3262720127","DE","DEU","GERMANY" -"3262720128","3262720199","NL","NLD","NETHERLANDS" -"3262720200","3262720207","DE","DEU","GERMANY" -"3262720208","3262720319","NL","NLD","NETHERLANDS" -"3262720320","3262720327","DE","DEU","GERMANY" -"3262720328","3262720447","NL","NLD","NETHERLANDS" -"3262720448","3262720455","DE","DEU","GERMANY" -"3262720456","3262720631","NL","NLD","NETHERLANDS" -"3262720632","3262720647","DE","DEU","GERMANY" -"3262720648","3262720687","NL","NLD","NETHERLANDS" -"3262720688","3262720695","DE","DEU","GERMANY" -"3262720696","3262720751","NL","NLD","NETHERLANDS" -"3262720752","3262720759","DE","DEU","GERMANY" -"3262720760","3262720855","NL","NLD","NETHERLANDS" -"3262720856","3262720863","DE","DEU","GERMANY" -"3262720864","3262720871","NL","NLD","NETHERLANDS" -"3262720872","3262720879","DE","DEU","GERMANY" -"3262720880","3262720951","NL","NLD","NETHERLANDS" -"3262720952","3262720959","DE","DEU","GERMANY" -"3262720960","3262720975","NL","NLD","NETHERLANDS" -"3262720976","3262720991","DE","DEU","GERMANY" -"3262720992","3262720999","NL","NLD","NETHERLANDS" -"3262721000","3262721007","DE","DEU","GERMANY" -"3262721008","3262721087","NL","NLD","NETHERLANDS" -"3262721088","3262721095","DE","DEU","GERMANY" -"3262721096","3262721111","NL","NLD","NETHERLANDS" -"3262721112","3262721119","DE","DEU","GERMANY" -"3262721120","3262721247","NL","NLD","NETHERLANDS" -"3262721248","3262721255","DE","DEU","GERMANY" -"3262721256","3262721327","NL","NLD","NETHERLANDS" -"3262721328","3262721335","DE","DEU","GERMANY" -"3262721336","3262721463","NL","NLD","NETHERLANDS" -"3262721464","3262721471","DE","DEU","GERMANY" -"3262721472","3262721527","NL","NLD","NETHERLANDS" -"3262721528","3262726911","DE","DEU","GERMANY" -"3262726912","3262727007","NL","NLD","NETHERLANDS" -"3262727008","3262727015","DE","DEU","GERMANY" -"3262727016","3262727023","NL","NLD","NETHERLANDS" -"3262727024","3262727031","DE","DEU","GERMANY" -"3262727032","3262727039","NL","NLD","NETHERLANDS" -"3262727040","3262727047","DE","DEU","GERMANY" -"3262727048","3262727159","NL","NLD","NETHERLANDS" -"3262727160","3262727167","DE","DEU","GERMANY" -"3262727168","3262727303","NL","NLD","NETHERLANDS" -"3262727304","3262727311","DE","DEU","GERMANY" -"3262727312","3262727583","NL","NLD","NETHERLANDS" -"3262727584","3262727591","DE","DEU","GERMANY" -"3262727592","3262727671","NL","NLD","NETHERLANDS" -"3262727672","3262727679","DE","DEU","GERMANY" -"3262727680","3262727711","NL","NLD","NETHERLANDS" -"3262727712","3262727719","DE","DEU","GERMANY" -"3262727720","3262727727","NL","NLD","NETHERLANDS" -"3262727728","3262727735","DE","DEU","GERMANY" -"3262727736","3262727999","NL","NLD","NETHERLANDS" -"3262728000","3262728007","DE","DEU","GERMANY" -"3262728008","3262728015","NL","NLD","NETHERLANDS" -"3262728016","3262728023","DE","DEU","GERMANY" -"3262728024","3262728095","NL","NLD","NETHERLANDS" -"3262728096","3262728103","DE","DEU","GERMANY" -"3262728104","3262728151","NL","NLD","NETHERLANDS" -"3262728152","3262728159","DE","DEU","GERMANY" -"3262728160","3262728199","NL","NLD","NETHERLANDS" -"3262728200","3262728207","DE","DEU","GERMANY" -"3262728208","3262728231","NL","NLD","NETHERLANDS" -"3262728232","3262728239","DE","DEU","GERMANY" -"3262728240","3262728279","NL","NLD","NETHERLANDS" -"3262728280","3262728287","DE","DEU","GERMANY" -"3262728288","3262728335","NL","NLD","NETHERLANDS" -"3262728336","3262728343","DE","DEU","GERMANY" -"3262728344","3262728423","NL","NLD","NETHERLANDS" -"3262728424","3262728431","DE","DEU","GERMANY" -"3262728432","3262728447","NL","NLD","NETHERLANDS" -"3262728448","3262728463","DE","DEU","GERMANY" -"3262728464","3262728519","NL","NLD","NETHERLANDS" -"3262728520","3262728527","DE","DEU","GERMANY" -"3262728528","3262728543","NL","NLD","NETHERLANDS" -"3262728544","3262728551","DE","DEU","GERMANY" -"3262728552","3262728671","NL","NLD","NETHERLANDS" -"3262728672","3262728679","DE","DEU","GERMANY" -"3262728680","3262728735","NL","NLD","NETHERLANDS" -"3262728736","3262728751","DE","DEU","GERMANY" -"3262728752","3262728799","NL","NLD","NETHERLANDS" -"3262728800","3262728807","DE","DEU","GERMANY" -"3262728808","3262728935","NL","NLD","NETHERLANDS" -"3262728936","3262728943","DE","DEU","GERMANY" -"3262728944","3262729023","NL","NLD","NETHERLANDS" -"3262729024","3262729031","DE","DEU","GERMANY" -"3262729032","3262729135","NL","NLD","NETHERLANDS" -"3262729136","3262729143","DE","DEU","GERMANY" -"3262729144","3262729199","NL","NLD","NETHERLANDS" -"3262729200","3262729207","DE","DEU","GERMANY" -"3262729208","3262729231","NL","NLD","NETHERLANDS" -"3262729232","3262729247","DE","DEU","GERMANY" -"3262729248","3262729423","NL","NLD","NETHERLANDS" -"3262729424","3262729431","DE","DEU","GERMANY" -"3262729432","3262729439","NL","NLD","NETHERLANDS" -"3262729440","3262729447","DE","DEU","GERMANY" -"3262729448","3262729479","NL","NLD","NETHERLANDS" -"3262729480","3262729487","DE","DEU","GERMANY" -"3262729488","3262729607","NL","NLD","NETHERLANDS" -"3262729608","3262729615","DE","DEU","GERMANY" -"3262729616","3262729727","NL","NLD","NETHERLANDS" -"3262729728","3262729735","DE","DEU","GERMANY" -"3262729736","3262729887","NL","NLD","NETHERLANDS" -"3262729888","3262729895","DE","DEU","GERMANY" -"3262729896","3262729903","NL","NLD","NETHERLANDS" -"3262729904","3262729911","DE","DEU","GERMANY" -"3262729912","3262729975","NL","NLD","NETHERLANDS" -"3262729976","3262729983","DE","DEU","GERMANY" -"3262729984","3262730071","NL","NLD","NETHERLANDS" -"3262730072","3262730079","DE","DEU","GERMANY" -"3262730080","3262730095","NL","NLD","NETHERLANDS" -"3262730096","3262730103","DE","DEU","GERMANY" -"3262730104","3262730183","NL","NLD","NETHERLANDS" -"3262730184","3262730191","DE","DEU","GERMANY" -"3262730192","3262730207","NL","NLD","NETHERLANDS" -"3262730208","3262730215","DE","DEU","GERMANY" -"3262730216","3262730231","NL","NLD","NETHERLANDS" -"3262730232","3262730239","DE","DEU","GERMANY" -"3262730240","3262730559","NL","NLD","NETHERLANDS" -"3262730560","3262730567","DE","DEU","GERMANY" -"3262730568","3262730591","NL","NLD","NETHERLANDS" -"3262730592","3262730599","DE","DEU","GERMANY" -"3262730600","3262730783","NL","NLD","NETHERLANDS" -"3262730784","3262730791","DE","DEU","GERMANY" -"3262730792","3262730799","NL","NLD","NETHERLANDS" -"3262730800","3262730807","DE","DEU","GERMANY" -"3262730808","3262730903","NL","NLD","NETHERLANDS" -"3262730904","3262730911","DE","DEU","GERMANY" -"3262730912","3262731023","NL","NLD","NETHERLANDS" -"3262731024","3262731031","DE","DEU","GERMANY" -"3262731032","3262731055","NL","NLD","NETHERLANDS" -"3262731056","3262731063","DE","DEU","GERMANY" -"3262731064","3262731095","NL","NLD","NETHERLANDS" -"3262731096","3262731103","DE","DEU","GERMANY" -"3262731104","3262731127","NL","NLD","NETHERLANDS" -"3262731128","3262731135","DE","DEU","GERMANY" -"3262731136","3262731175","NL","NLD","NETHERLANDS" -"3262731176","3262731183","DE","DEU","GERMANY" -"3262731184","3262731255","NL","NLD","NETHERLANDS" -"3262731256","3262731263","DE","DEU","GERMANY" -"3262731264","3262731391","NL","NLD","NETHERLANDS" -"3262731392","3262731399","DE","DEU","GERMANY" -"3262731400","3262731471","NL","NLD","NETHERLANDS" -"3262731472","3262731479","DE","DEU","GERMANY" -"3262731480","3262731495","NL","NLD","NETHERLANDS" -"3262731496","3262731503","DE","DEU","GERMANY" -"3262731504","3262731663","NL","NLD","NETHERLANDS" -"3262731664","3262731671","DE","DEU","GERMANY" -"3262731672","3262731695","NL","NLD","NETHERLANDS" -"3262731696","3262731703","DE","DEU","GERMANY" -"3262731704","3262731743","NL","NLD","NETHERLANDS" -"3262731744","3262731751","DE","DEU","GERMANY" -"3262731752","3262731767","NL","NLD","NETHERLANDS" -"3262731768","3262731775","DE","DEU","GERMANY" -"3262731776","3262731895","NL","NLD","NETHERLANDS" -"3262731896","3262731903","DE","DEU","GERMANY" -"3262731904","3262731911","NL","NLD","NETHERLANDS" -"3262731912","3262731919","DE","DEU","GERMANY" -"3262731920","3262731975","NL","NLD","NETHERLANDS" -"3262731976","3262731983","DE","DEU","GERMANY" -"3262731984","3262732047","NL","NLD","NETHERLANDS" -"3262732048","3262732055","DE","DEU","GERMANY" -"3262732056","3262732135","NL","NLD","NETHERLANDS" -"3262732136","3262732143","DE","DEU","GERMANY" -"3262732144","3262732199","NL","NLD","NETHERLANDS" -"3262732200","3262732207","DE","DEU","GERMANY" -"3262732208","3262732303","NL","NLD","NETHERLANDS" -"3262732304","3262732311","DE","DEU","GERMANY" -"3262732312","3262732495","NL","NLD","NETHERLANDS" -"3262732496","3262732511","DE","DEU","GERMANY" -"3262732512","3262732551","NL","NLD","NETHERLANDS" -"3262732552","3262732559","DE","DEU","GERMANY" -"3262732560","3262732639","NL","NLD","NETHERLANDS" -"3262732640","3262732647","DE","DEU","GERMANY" -"3262732648","3262732655","NL","NLD","NETHERLANDS" -"3262732656","3262732663","DE","DEU","GERMANY" -"3262732664","3262732671","NL","NLD","NETHERLANDS" -"3262732672","3262732679","DE","DEU","GERMANY" -"3262732680","3262732703","NL","NLD","NETHERLANDS" -"3262732704","3262732711","DE","DEU","GERMANY" -"3262732712","3262732799","NL","NLD","NETHERLANDS" -"3262732800","3262733063","DE","DEU","GERMANY" -"3262733064","3262733119","NL","NLD","NETHERLANDS" -"3262733120","3262733127","DE","DEU","GERMANY" -"3262733128","3262733151","NL","NLD","NETHERLANDS" -"3262733152","3262733159","DE","DEU","GERMANY" -"3262733160","3262733247","NL","NLD","NETHERLANDS" -"3262733248","3262733255","DE","DEU","GERMANY" -"3262733256","3262733311","NL","NLD","NETHERLANDS" -"3262733312","3262733319","DE","DEU","GERMANY" -"3262733320","3262733359","NL","NLD","NETHERLANDS" -"3262733360","3262733367","DE","DEU","GERMANY" -"3262733368","3262733391","NL","NLD","NETHERLANDS" -"3262733392","3262733399","DE","DEU","GERMANY" -"3262733400","3262733463","NL","NLD","NETHERLANDS" -"3262733464","3262733471","DE","DEU","GERMANY" -"3262733472","3262733503","NL","NLD","NETHERLANDS" -"3262733504","3262733511","DE","DEU","GERMANY" -"3262733512","3262733655","NL","NLD","NETHERLANDS" -"3262733656","3262733663","DE","DEU","GERMANY" -"3262733664","3262733671","NL","NLD","NETHERLANDS" -"3262733672","3262733679","DE","DEU","GERMANY" -"3262733680","3262733847","NL","NLD","NETHERLANDS" -"3262733848","3262733855","DE","DEU","GERMANY" -"3262733856","3262733967","NL","NLD","NETHERLANDS" -"3262733968","3262733975","DE","DEU","GERMANY" -"3262733976","3262734215","NL","NLD","NETHERLANDS" -"3262734216","3262734223","DE","DEU","GERMANY" -"3262734224","3262734263","NL","NLD","NETHERLANDS" -"3262734264","3262734271","DE","DEU","GERMANY" -"3262734272","3262734287","NL","NLD","NETHERLANDS" -"3262734288","3262734295","DE","DEU","GERMANY" -"3262734296","3262734359","NL","NLD","NETHERLANDS" -"3262734360","3262734375","DE","DEU","GERMANY" -"3262734376","3262734431","NL","NLD","NETHERLANDS" -"3262734432","3262734439","DE","DEU","GERMANY" -"3262734440","3262734447","NL","NLD","NETHERLANDS" -"3262734448","3262734455","DE","DEU","GERMANY" -"3262734456","3262734463","NL","NLD","NETHERLANDS" -"3262734464","3262734471","DE","DEU","GERMANY" -"3262734472","3262734503","NL","NLD","NETHERLANDS" -"3262734504","3262734511","DE","DEU","GERMANY" -"3262734512","3262734687","NL","NLD","NETHERLANDS" -"3262734688","3262734695","DE","DEU","GERMANY" -"3262734696","3262734799","NL","NLD","NETHERLANDS" -"3262734800","3262734815","DE","DEU","GERMANY" -"3262734816","3262734919","NL","NLD","NETHERLANDS" -"3262734920","3262734927","DE","DEU","GERMANY" -"3262734928","3262735087","NL","NLD","NETHERLANDS" -"3262735088","3262735095","DE","DEU","GERMANY" -"3262735096","3262735111","NL","NLD","NETHERLANDS" -"3262735112","3262735119","DE","DEU","GERMANY" -"3262735120","3262735407","NL","NLD","NETHERLANDS" -"3262735408","3262735415","DE","DEU","GERMANY" -"3262735416","3262735431","NL","NLD","NETHERLANDS" -"3262735432","3262735439","DE","DEU","GERMANY" -"3262735440","3262735511","NL","NLD","NETHERLANDS" -"3262735512","3262735519","DE","DEU","GERMANY" -"3262735520","3262735551","NL","NLD","NETHERLANDS" -"3262735552","3262735567","DE","DEU","GERMANY" -"3262735568","3262735679","NL","NLD","NETHERLANDS" -"3262735680","3262735687","DE","DEU","GERMANY" -"3262735688","3262735719","NL","NLD","NETHERLANDS" -"3262735720","3262735727","DE","DEU","GERMANY" -"3262735728","3262735735","NL","NLD","NETHERLANDS" -"3262735736","3262735743","DE","DEU","GERMANY" -"3262735744","3262735807","NL","NLD","NETHERLANDS" -"3262735808","3262735815","DE","DEU","GERMANY" -"3262735816","3262735831","NL","NLD","NETHERLANDS" -"3262735832","3262735839","DE","DEU","GERMANY" -"3262735840","3262735959","NL","NLD","NETHERLANDS" -"3262735960","3262735967","DE","DEU","GERMANY" -"3262735968","3262736183","NL","NLD","NETHERLANDS" -"3262736184","3262736191","DE","DEU","GERMANY" -"3262736192","3262736255","NL","NLD","NETHERLANDS" -"3262736256","3262736263","DE","DEU","GERMANY" -"3262736264","3262736303","NL","NLD","NETHERLANDS" -"3262736304","3262736311","DE","DEU","GERMANY" -"3262736312","3262736383","NL","NLD","NETHERLANDS" -"3262736384","3262736895","DE","DEU","GERMANY" -"3262736896","3262737063","NL","NLD","NETHERLANDS" -"3262737064","3262737071","DE","DEU","GERMANY" -"3262737072","3262737167","NL","NLD","NETHERLANDS" -"3262737168","3262737175","DE","DEU","GERMANY" -"3262737176","3262737191","NL","NLD","NETHERLANDS" -"3262737192","3262737215","DE","DEU","GERMANY" -"3262737216","3262737319","NL","NLD","NETHERLANDS" -"3262737320","3262737327","DE","DEU","GERMANY" -"3262737328","3262737471","NL","NLD","NETHERLANDS" -"3262737472","3262737487","DE","DEU","GERMANY" -"3262737488","3262737735","NL","NLD","NETHERLANDS" -"3262737736","3262737743","DE","DEU","GERMANY" -"3262737744","3262737799","NL","NLD","NETHERLANDS" -"3262737800","3262737815","DE","DEU","GERMANY" -"3262737816","3262737823","NL","NLD","NETHERLANDS" -"3262737824","3262737831","DE","DEU","GERMANY" -"3262737832","3262737935","NL","NLD","NETHERLANDS" -"3262737936","3262737943","DE","DEU","GERMANY" -"3262737944","3262737959","NL","NLD","NETHERLANDS" -"3262737960","3262737967","DE","DEU","GERMANY" -"3262737968","3262738039","NL","NLD","NETHERLANDS" -"3262738040","3262738047","DE","DEU","GERMANY" -"3262738048","3262738055","NL","NLD","NETHERLANDS" -"3262738056","3262738063","DE","DEU","GERMANY" -"3262738064","3262738087","NL","NLD","NETHERLANDS" -"3262738088","3262738095","DE","DEU","GERMANY" -"3262738096","3262738127","NL","NLD","NETHERLANDS" -"3262738128","3262738135","DE","DEU","GERMANY" -"3262738136","3262738151","NL","NLD","NETHERLANDS" -"3262738152","3262738159","DE","DEU","GERMANY" -"3262738160","3262738175","NL","NLD","NETHERLANDS" -"3262738176","3262738183","DE","DEU","GERMANY" -"3262738184","3262738255","NL","NLD","NETHERLANDS" -"3262738256","3262738263","DE","DEU","GERMANY" -"3262738264","3262738319","NL","NLD","NETHERLANDS" -"3262738320","3262738327","DE","DEU","GERMANY" -"3262738328","3262738407","NL","NLD","NETHERLANDS" -"3262738408","3262738423","DE","DEU","GERMANY" -"3262738424","3262738487","NL","NLD","NETHERLANDS" -"3262738488","3262738495","DE","DEU","GERMANY" -"3262738496","3262738511","NL","NLD","NETHERLANDS" -"3262738512","3262738519","DE","DEU","GERMANY" -"3262738520","3262738535","NL","NLD","NETHERLANDS" -"3262738536","3262738543","DE","DEU","GERMANY" -"3262738544","3262738655","NL","NLD","NETHERLANDS" -"3262738656","3262738663","DE","DEU","GERMANY" -"3262738664","3262738903","NL","NLD","NETHERLANDS" -"3262738904","3262738911","DE","DEU","GERMANY" -"3262738912","3262738975","NL","NLD","NETHERLANDS" -"3262738976","3262738991","DE","DEU","GERMANY" -"3262738992","3262739047","NL","NLD","NETHERLANDS" -"3262739048","3262739055","DE","DEU","GERMANY" -"3262739056","3262739119","NL","NLD","NETHERLANDS" -"3262739120","3262739135","DE","DEU","GERMANY" -"3262739136","3262739223","NL","NLD","NETHERLANDS" -"3262739224","3262739231","DE","DEU","GERMANY" -"3262739232","3262739255","NL","NLD","NETHERLANDS" -"3262739256","3262739263","DE","DEU","GERMANY" -"3262739264","3262739311","NL","NLD","NETHERLANDS" -"3262739312","3262739319","DE","DEU","GERMANY" -"3262739320","3262739407","NL","NLD","NETHERLANDS" -"3262739408","3262739415","DE","DEU","GERMANY" -"3262739416","3262739727","NL","NLD","NETHERLANDS" -"3262739728","3262739735","DE","DEU","GERMANY" -"3262739736","3262739799","NL","NLD","NETHERLANDS" -"3262739800","3262739807","DE","DEU","GERMANY" -"3262739808","3262739919","NL","NLD","NETHERLANDS" -"3262739920","3262739927","DE","DEU","GERMANY" -"3262739928","3262739935","NL","NLD","NETHERLANDS" -"3262739936","3262739943","DE","DEU","GERMANY" -"3262739944","3262740063","NL","NLD","NETHERLANDS" -"3262740064","3262740071","DE","DEU","GERMANY" -"3262740072","3262740111","NL","NLD","NETHERLANDS" -"3262740112","3262740119","DE","DEU","GERMANY" -"3262740120","3262740223","NL","NLD","NETHERLANDS" -"3262740224","3262740239","DE","DEU","GERMANY" -"3262740240","3262740247","NL","NLD","NETHERLANDS" -"3262740248","3262740255","DE","DEU","GERMANY" -"3262740256","3262740263","NL","NLD","NETHERLANDS" -"3262740264","3262740279","DE","DEU","GERMANY" -"3262740280","3262740295","NL","NLD","NETHERLANDS" -"3262740296","3262740303","DE","DEU","GERMANY" -"3262740304","3262740343","NL","NLD","NETHERLANDS" -"3262740344","3262740351","DE","DEU","GERMANY" -"3262740352","3262740399","NL","NLD","NETHERLANDS" -"3262740400","3262740407","DE","DEU","GERMANY" -"3262740408","3262740583","NL","NLD","NETHERLANDS" -"3262740584","3262740591","DE","DEU","GERMANY" -"3262740592","3262740775","NL","NLD","NETHERLANDS" -"3262740776","3262740783","DE","DEU","GERMANY" -"3262740784","3262740815","NL","NLD","NETHERLANDS" -"3262740816","3262740823","DE","DEU","GERMANY" -"3262740824","3262740911","NL","NLD","NETHERLANDS" -"3262740912","3262740919","DE","DEU","GERMANY" -"3262740920","3262740967","NL","NLD","NETHERLANDS" -"3262740968","3262740975","DE","DEU","GERMANY" -"3262740976","3262740991","NL","NLD","NETHERLANDS" -"3262740992","3262740999","DE","DEU","GERMANY" -"3262741000","3262741031","NL","NLD","NETHERLANDS" -"3262741032","3262741039","DE","DEU","GERMANY" -"3262741040","3262741103","NL","NLD","NETHERLANDS" -"3262741104","3262741111","DE","DEU","GERMANY" -"3262741112","3262741231","NL","NLD","NETHERLANDS" -"3262741232","3262741239","DE","DEU","GERMANY" -"3262741240","3262741247","NL","NLD","NETHERLANDS" -"3262741248","3262741503","DE","DEU","GERMANY" -"3262741504","3262741559","NL","NLD","NETHERLANDS" -"3262741560","3262741575","DE","DEU","GERMANY" -"3262741576","3262741655","NL","NLD","NETHERLANDS" -"3262741656","3262741663","DE","DEU","GERMANY" -"3262741664","3262741695","NL","NLD","NETHERLANDS" -"3262741696","3262741703","DE","DEU","GERMANY" -"3262741704","3262741823","NL","NLD","NETHERLANDS" -"3262741824","3262741831","DE","DEU","GERMANY" -"3262741832","3262741839","NL","NLD","NETHERLANDS" -"3262741840","3262741847","DE","DEU","GERMANY" -"3262741848","3262741935","NL","NLD","NETHERLANDS" -"3262741936","3262741943","DE","DEU","GERMANY" -"3262741944","3262741959","NL","NLD","NETHERLANDS" -"3262741960","3262741983","DE","DEU","GERMANY" -"3262741984","3262742095","NL","NLD","NETHERLANDS" -"3262742096","3262742103","DE","DEU","GERMANY" -"3262742104","3262742111","NL","NLD","NETHERLANDS" -"3262742112","3262742119","DE","DEU","GERMANY" -"3262742120","3262742143","NL","NLD","NETHERLANDS" -"3262742144","3262742151","DE","DEU","GERMANY" -"3262742152","3262742159","NL","NLD","NETHERLANDS" -"3262742160","3262742167","DE","DEU","GERMANY" -"3262742168","3262742183","NL","NLD","NETHERLANDS" -"3262742184","3262742191","DE","DEU","GERMANY" -"3262742192","3262742207","NL","NLD","NETHERLANDS" -"3262742208","3262742215","DE","DEU","GERMANY" -"3262742216","3262742287","NL","NLD","NETHERLANDS" -"3262742288","3262742295","DE","DEU","GERMANY" -"3262742296","3262742399","NL","NLD","NETHERLANDS" -"3262742400","3262742407","DE","DEU","GERMANY" -"3262742408","3262742431","NL","NLD","NETHERLANDS" -"3262742432","3262742439","DE","DEU","GERMANY" -"3262742440","3262742455","NL","NLD","NETHERLANDS" -"3262742456","3262742463","DE","DEU","GERMANY" -"3262742464","3262742511","NL","NLD","NETHERLANDS" -"3262742512","3262742519","DE","DEU","GERMANY" -"3262742520","3262742647","NL","NLD","NETHERLANDS" -"3262742648","3262742663","DE","DEU","GERMANY" -"3262742664","3262742695","NL","NLD","NETHERLANDS" -"3262742696","3262742703","DE","DEU","GERMANY" -"3262742704","3262742847","NL","NLD","NETHERLANDS" -"3262742848","3262742855","DE","DEU","GERMANY" -"3262742856","3262742863","NL","NLD","NETHERLANDS" -"3262742864","3262742871","DE","DEU","GERMANY" -"3262742872","3262742879","NL","NLD","NETHERLANDS" -"3262742880","3262742887","DE","DEU","GERMANY" -"3262742888","3262742895","NL","NLD","NETHERLANDS" -"3262742896","3262742911","DE","DEU","GERMANY" -"3262742912","3262743135","NL","NLD","NETHERLANDS" -"3262743136","3262743143","DE","DEU","GERMANY" -"3262743144","3262743167","NL","NLD","NETHERLANDS" -"3262743168","3262743175","DE","DEU","GERMANY" -"3262743176","3262743191","NL","NLD","NETHERLANDS" -"3262743192","3262743199","DE","DEU","GERMANY" -"3262743200","3262743247","NL","NLD","NETHERLANDS" -"3262743248","3262743255","DE","DEU","GERMANY" -"3262743256","3262743415","NL","NLD","NETHERLANDS" -"3262743416","3262743423","DE","DEU","GERMANY" -"3262743424","3262743455","NL","NLD","NETHERLANDS" -"3262743456","3262743463","DE","DEU","GERMANY" -"3262743464","3262743535","NL","NLD","NETHERLANDS" -"3262743536","3262743543","DE","DEU","GERMANY" -"3262743544","3262743583","NL","NLD","NETHERLANDS" -"3262743584","3262743591","DE","DEU","GERMANY" -"3262743592","3262743767","NL","NLD","NETHERLANDS" -"3262743768","3262743775","DE","DEU","GERMANY" -"3262743776","3262743831","NL","NLD","NETHERLANDS" -"3262743832","3262743839","DE","DEU","GERMANY" -"3262743840","3262743871","NL","NLD","NETHERLANDS" -"3262743872","3262743879","DE","DEU","GERMANY" -"3262743880","3262743935","NL","NLD","NETHERLANDS" -"3262743936","3262743943","DE","DEU","GERMANY" -"3262743944","3262744039","NL","NLD","NETHERLANDS" -"3262744040","3262744047","DE","DEU","GERMANY" -"3262744048","3262744095","NL","NLD","NETHERLANDS" -"3262744096","3262744103","DE","DEU","GERMANY" -"3262744104","3262744215","NL","NLD","NETHERLANDS" -"3262744216","3262744223","DE","DEU","GERMANY" -"3262744224","3262744351","NL","NLD","NETHERLANDS" -"3262744352","3262744359","DE","DEU","GERMANY" -"3262744360","3262744375","NL","NLD","NETHERLANDS" -"3262744376","3262744383","DE","DEU","GERMANY" -"3262744384","3262744439","NL","NLD","NETHERLANDS" -"3262744440","3262744447","DE","DEU","GERMANY" -"3262744448","3262744623","NL","NLD","NETHERLANDS" -"3262744624","3262744631","DE","DEU","GERMANY" -"3262744632","3262744647","NL","NLD","NETHERLANDS" -"3262744648","3262744663","DE","DEU","GERMANY" -"3262744664","3262744895","NL","NLD","NETHERLANDS" -"3262744896","3262744903","DE","DEU","GERMANY" -"3262744904","3262744943","NL","NLD","NETHERLANDS" -"3262744944","3262744951","DE","DEU","GERMANY" -"3262744952","3262745087","NL","NLD","NETHERLANDS" -"3262745088","3262745103","DE","DEU","GERMANY" -"3262745104","3262745151","NL","NLD","NETHERLANDS" -"3262745152","3262745159","DE","DEU","GERMANY" -"3262745160","3262745311","NL","NLD","NETHERLANDS" -"3262745312","3262745319","DE","DEU","GERMANY" -"3262745320","3262745327","NL","NLD","NETHERLANDS" -"3262745328","3262745335","DE","DEU","GERMANY" -"3262745336","3262745351","NL","NLD","NETHERLANDS" -"3262745352","3262745367","DE","DEU","GERMANY" -"3262745368","3262745575","NL","NLD","NETHERLANDS" -"3262745576","3262745583","DE","DEU","GERMANY" -"3262745584","3262745727","NL","NLD","NETHERLANDS" -"3262745728","3262745735","DE","DEU","GERMANY" -"3262745736","3262745743","NL","NLD","NETHERLANDS" -"3262745744","3262745751","DE","DEU","GERMANY" -"3262745752","3262745807","NL","NLD","NETHERLANDS" -"3262745808","3262745823","DE","DEU","GERMANY" -"3262745824","3262745831","NL","NLD","NETHERLANDS" -"3262745832","3262745847","DE","DEU","GERMANY" -"3262745848","3262745959","NL","NLD","NETHERLANDS" -"3262745960","3262745967","DE","DEU","GERMANY" -"3262745968","3262745983","NL","NLD","NETHERLANDS" -"3262745984","3262745991","DE","DEU","GERMANY" -"3262745992","3262746031","NL","NLD","NETHERLANDS" -"3262746032","3262746039","DE","DEU","GERMANY" -"3262746040","3262746055","NL","NLD","NETHERLANDS" -"3262746056","3262746063","DE","DEU","GERMANY" -"3262746064","3262746079","NL","NLD","NETHERLANDS" -"3262746080","3262746087","DE","DEU","GERMANY" -"3262746088","3262746111","NL","NLD","NETHERLANDS" -"3262746112","3262746119","DE","DEU","GERMANY" -"3262746120","3262746175","NL","NLD","NETHERLANDS" -"3262746176","3262746183","DE","DEU","GERMANY" -"3262746184","3262746255","NL","NLD","NETHERLANDS" -"3262746256","3262746263","DE","DEU","GERMANY" -"3262746264","3262746343","NL","NLD","NETHERLANDS" -"3262746344","3262746351","DE","DEU","GERMANY" -"3262746352","3262746479","NL","NLD","NETHERLANDS" -"3262746480","3262746487","DE","DEU","GERMANY" -"3262746488","3262746519","NL","NLD","NETHERLANDS" -"3262746520","3262746527","DE","DEU","GERMANY" -"3262746528","3262746535","NL","NLD","NETHERLANDS" -"3262746536","3262746543","DE","DEU","GERMANY" -"3262746544","3262746783","NL","NLD","NETHERLANDS" -"3262746784","3262746799","DE","DEU","GERMANY" -"3262746800","3262746855","NL","NLD","NETHERLANDS" -"3262746856","3262746863","DE","DEU","GERMANY" -"3262746864","3262746895","NL","NLD","NETHERLANDS" -"3262746896","3262746903","DE","DEU","GERMANY" -"3262746904","3262746951","NL","NLD","NETHERLANDS" -"3262746952","3262746959","DE","DEU","GERMANY" -"3262746960","3262747079","NL","NLD","NETHERLANDS" -"3262747080","3262747087","DE","DEU","GERMANY" -"3262747088","3262747095","NL","NLD","NETHERLANDS" -"3262747096","3262747103","DE","DEU","GERMANY" -"3262747104","3262747135","NL","NLD","NETHERLANDS" -"3262747136","3262747143","DE","DEU","GERMANY" -"3262747144","3262747183","NL","NLD","NETHERLANDS" -"3262747184","3262747191","DE","DEU","GERMANY" -"3262747192","3262747295","NL","NLD","NETHERLANDS" -"3262747296","3262747303","DE","DEU","GERMANY" -"3262747304","3262747423","NL","NLD","NETHERLANDS" -"3262747424","3262747431","DE","DEU","GERMANY" -"3262747432","3262747551","NL","NLD","NETHERLANDS" -"3262747552","3262747559","DE","DEU","GERMANY" -"3262747560","3262747591","NL","NLD","NETHERLANDS" -"3262747592","3262747599","DE","DEU","GERMANY" -"3262747600","3262747615","NL","NLD","NETHERLANDS" -"3262747616","3262747623","DE","DEU","GERMANY" -"3262747624","3262747631","NL","NLD","NETHERLANDS" -"3262747632","3262747639","DE","DEU","GERMANY" -"3262747640","3262747647","NL","NLD","NETHERLANDS" -"3262747648","3262747655","DE","DEU","GERMANY" -"3262747656","3262747719","NL","NLD","NETHERLANDS" -"3262747720","3262747727","DE","DEU","GERMANY" -"3262747728","3262748231","NL","NLD","NETHERLANDS" -"3262748232","3262748239","DE","DEU","GERMANY" -"3262748240","3262748431","NL","NLD","NETHERLANDS" -"3262748432","3262748463","DE","DEU","GERMANY" -"3262748464","3262748487","NL","NLD","NETHERLANDS" -"3262748488","3262748495","DE","DEU","GERMANY" -"3262748496","3262748511","NL","NLD","NETHERLANDS" -"3262748512","3262748519","DE","DEU","GERMANY" -"3262748520","3262748999","NL","NLD","NETHERLANDS" -"3262749000","3262749007","DE","DEU","GERMANY" -"3262749008","3262749231","NL","NLD","NETHERLANDS" -"3262749232","3262749239","DE","DEU","GERMANY" -"3262749240","3262749303","NL","NLD","NETHERLANDS" -"3262749304","3262749311","DE","DEU","GERMANY" -"3262749312","3262749431","NL","NLD","NETHERLANDS" -"3262749432","3262749439","DE","DEU","GERMANY" -"3262749440","3262749519","NL","NLD","NETHERLANDS" -"3262749520","3262749527","DE","DEU","GERMANY" -"3262749528","3262749567","NL","NLD","NETHERLANDS" -"3262749568","3262749575","DE","DEU","GERMANY" -"3262749576","3262749671","NL","NLD","NETHERLANDS" -"3262749672","3262749679","DE","DEU","GERMANY" -"3262749680","3262749719","NL","NLD","NETHERLANDS" -"3262749720","3262749727","DE","DEU","GERMANY" -"3262749728","3262749759","NL","NLD","NETHERLANDS" -"3262749760","3262749767","DE","DEU","GERMANY" -"3262749768","3262749807","NL","NLD","NETHERLANDS" -"3262749808","3262749815","DE","DEU","GERMANY" -"3262749816","3262749831","NL","NLD","NETHERLANDS" -"3262749832","3262749847","DE","DEU","GERMANY" -"3262749848","3262749887","NL","NLD","NETHERLANDS" -"3262749888","3262749895","DE","DEU","GERMANY" -"3262749896","3262749927","NL","NLD","NETHERLANDS" -"3262749928","3262749935","DE","DEU","GERMANY" -"3262749936","3262749999","NL","NLD","NETHERLANDS" -"3262750000","3262750007","DE","DEU","GERMANY" -"3262750008","3262750223","NL","NLD","NETHERLANDS" -"3262750224","3262750231","DE","DEU","GERMANY" -"3262750232","3262750303","NL","NLD","NETHERLANDS" -"3262750304","3262750311","DE","DEU","GERMANY" -"3262750312","3262750359","NL","NLD","NETHERLANDS" -"3262750360","3262750367","DE","DEU","GERMANY" -"3262750368","3262750511","NL","NLD","NETHERLANDS" -"3262750512","3262750519","DE","DEU","GERMANY" -"3262750520","3262750647","NL","NLD","NETHERLANDS" -"3262750648","3262750655","DE","DEU","GERMANY" -"3262750656","3262750727","NL","NLD","NETHERLANDS" -"3262750728","3262750735","DE","DEU","GERMANY" -"3262750736","3262750767","NL","NLD","NETHERLANDS" -"3262750768","3262750775","DE","DEU","GERMANY" -"3262750776","3262750791","NL","NLD","NETHERLANDS" -"3262750792","3262750799","DE","DEU","GERMANY" -"3262750800","3262751031","NL","NLD","NETHERLANDS" -"3262751032","3262751039","DE","DEU","GERMANY" -"3262751040","3262751207","NL","NLD","NETHERLANDS" -"3262751208","3262751215","DE","DEU","GERMANY" -"3262751216","3262751327","NL","NLD","NETHERLANDS" -"3262751328","3262751335","DE","DEU","GERMANY" -"3262751336","3262751391","NL","NLD","NETHERLANDS" -"3262751392","3262751399","DE","DEU","GERMANY" -"3262751400","3262751695","NL","NLD","NETHERLANDS" -"3262751696","3262751703","DE","DEU","GERMANY" -"3262751704","3262751863","NL","NLD","NETHERLANDS" -"3262751864","3262751871","DE","DEU","GERMANY" -"3262751872","3262751887","NL","NLD","NETHERLANDS" -"3262751888","3262751895","DE","DEU","GERMANY" -"3262751896","3262751927","NL","NLD","NETHERLANDS" -"3262751928","3262751935","DE","DEU","GERMANY" -"3262751936","3262752055","NL","NLD","NETHERLANDS" -"3262752056","3262752063","DE","DEU","GERMANY" -"3262752064","3262752279","NL","NLD","NETHERLANDS" -"3262752280","3262752287","DE","DEU","GERMANY" -"3262752288","3262752343","NL","NLD","NETHERLANDS" -"3262752344","3262752351","DE","DEU","GERMANY" -"3262752352","3262752399","NL","NLD","NETHERLANDS" -"3262752400","3262752407","DE","DEU","GERMANY" -"3262752408","3262752599","NL","NLD","NETHERLANDS" -"3262752600","3262752607","DE","DEU","GERMANY" -"3262752608","3262752663","NL","NLD","NETHERLANDS" -"3262752664","3262752671","DE","DEU","GERMANY" -"3262752672","3262752799","NL","NLD","NETHERLANDS" -"3262752800","3262752807","DE","DEU","GERMANY" -"3262752808","3262752847","NL","NLD","NETHERLANDS" -"3262752848","3262752855","DE","DEU","GERMANY" -"3262752856","3262752887","NL","NLD","NETHERLANDS" -"3262752888","3262752895","DE","DEU","GERMANY" -"3262752896","3262753015","NL","NLD","NETHERLANDS" -"3262753016","3262753023","DE","DEU","GERMANY" -"3262753024","3262753079","NL","NLD","NETHERLANDS" -"3262753080","3262753087","DE","DEU","GERMANY" -"3262753088","3262753175","NL","NLD","NETHERLANDS" -"3262753176","3262753183","DE","DEU","GERMANY" -"3262753184","3262753287","NL","NLD","NETHERLANDS" -"3262753288","3262753295","DE","DEU","GERMANY" -"3262753296","3262753319","NL","NLD","NETHERLANDS" -"3262753320","3262753327","DE","DEU","GERMANY" -"3262753328","3262753375","NL","NLD","NETHERLANDS" -"3262753376","3262753383","DE","DEU","GERMANY" -"3262753384","3262753487","NL","NLD","NETHERLANDS" -"3262753488","3262753495","DE","DEU","GERMANY" -"3262753496","3262753503","NL","NLD","NETHERLANDS" -"3262753504","3262753511","DE","DEU","GERMANY" -"3262753512","3262753519","NL","NLD","NETHERLANDS" -"3262753520","3262753527","DE","DEU","GERMANY" -"3262753528","3262753543","NL","NLD","NETHERLANDS" -"3262753544","3262753551","DE","DEU","GERMANY" -"3262753552","3262753743","NL","NLD","NETHERLANDS" -"3262753744","3262753751","DE","DEU","GERMANY" -"3262753752","3262753783","NL","NLD","NETHERLANDS" -"3262753784","3262754815","DE","DEU","GERMANY" -"3262754816","3262754983","NL","NLD","NETHERLANDS" -"3262754984","3262754991","DE","DEU","GERMANY" -"3262754992","3262755015","NL","NLD","NETHERLANDS" -"3262755016","3262755023","DE","DEU","GERMANY" -"3262755024","3262755055","NL","NLD","NETHERLANDS" -"3262755056","3262755063","DE","DEU","GERMANY" -"3262755064","3262755223","NL","NLD","NETHERLANDS" -"3262755224","3262755231","DE","DEU","GERMANY" -"3262755232","3262755303","NL","NLD","NETHERLANDS" -"3262755304","3262755311","DE","DEU","GERMANY" -"3262755312","3262755615","NL","NLD","NETHERLANDS" -"3262755616","3262755623","DE","DEU","GERMANY" -"3262755624","3262755663","NL","NLD","NETHERLANDS" -"3262755664","3262755671","DE","DEU","GERMANY" -"3262755672","3262755703","NL","NLD","NETHERLANDS" -"3262755704","3262755711","DE","DEU","GERMANY" -"3262755712","3262755815","NL","NLD","NETHERLANDS" -"3262755816","3262755823","DE","DEU","GERMANY" -"3262755824","3262755975","NL","NLD","NETHERLANDS" -"3262755976","3262755983","DE","DEU","GERMANY" -"3262755984","3262756031","NL","NLD","NETHERLANDS" -"3262756032","3262756039","DE","DEU","GERMANY" -"3262756040","3262756087","NL","NLD","NETHERLANDS" -"3262756088","3262756095","DE","DEU","GERMANY" -"3262756096","3262756215","NL","NLD","NETHERLANDS" -"3262756216","3262756223","DE","DEU","GERMANY" -"3262756224","3262756343","NL","NLD","NETHERLANDS" -"3262756344","3262756367","DE","DEU","GERMANY" -"3262756368","3262756479","NL","NLD","NETHERLANDS" -"3262756480","3262756487","DE","DEU","GERMANY" -"3262756488","3262756511","NL","NLD","NETHERLANDS" -"3262756512","3262756519","DE","DEU","GERMANY" -"3262756520","3262756535","NL","NLD","NETHERLANDS" -"3262756536","3262756543","DE","DEU","GERMANY" -"3262756544","3262756687","NL","NLD","NETHERLANDS" -"3262756688","3262756695","DE","DEU","GERMANY" -"3262756696","3262756711","NL","NLD","NETHERLANDS" -"3262756712","3262756719","DE","DEU","GERMANY" -"3262756720","3262756735","NL","NLD","NETHERLANDS" -"3262756736","3262756743","DE","DEU","GERMANY" -"3262756744","3262756751","NL","NLD","NETHERLANDS" -"3262756752","3262756759","DE","DEU","GERMANY" -"3262756760","3262756879","NL","NLD","NETHERLANDS" -"3262756880","3262756887","DE","DEU","GERMANY" -"3262756888","3262756903","NL","NLD","NETHERLANDS" -"3262756904","3262756911","DE","DEU","GERMANY" -"3262756912","3262756967","NL","NLD","NETHERLANDS" -"3262756968","3262756983","DE","DEU","GERMANY" -"3262756984","3262757007","NL","NLD","NETHERLANDS" -"3262757008","3262757015","DE","DEU","GERMANY" -"3262757016","3262757207","NL","NLD","NETHERLANDS" -"3262757208","3262757215","DE","DEU","GERMANY" -"3262757216","3262757327","NL","NLD","NETHERLANDS" -"3262757328","3262757335","DE","DEU","GERMANY" -"3262757336","3262757359","NL","NLD","NETHERLANDS" -"3262757360","3262757367","DE","DEU","GERMANY" -"3262757368","3262757487","NL","NLD","NETHERLANDS" -"3262757488","3262757495","DE","DEU","GERMANY" -"3262757496","3262757647","NL","NLD","NETHERLANDS" -"3262757648","3262757655","DE","DEU","GERMANY" -"3262757656","3262757671","NL","NLD","NETHERLANDS" -"3262757672","3262757679","DE","DEU","GERMANY" -"3262757680","3262757975","NL","NLD","NETHERLANDS" -"3262757976","3262758007","DE","DEU","GERMANY" -"3262758008","3262758127","NL","NLD","NETHERLANDS" -"3262758128","3262758135","DE","DEU","GERMANY" -"3262758136","3262758183","NL","NLD","NETHERLANDS" -"3262758184","3262758191","DE","DEU","GERMANY" -"3262758192","3262758223","NL","NLD","NETHERLANDS" -"3262758224","3262758231","DE","DEU","GERMANY" -"3262758232","3262758343","NL","NLD","NETHERLANDS" -"3262758344","3262758351","DE","DEU","GERMANY" -"3262758352","3262758535","NL","NLD","NETHERLANDS" -"3262758536","3262758543","DE","DEU","GERMANY" -"3262758544","3262758551","NL","NLD","NETHERLANDS" -"3262758552","3262758559","DE","DEU","GERMANY" -"3262758560","3262758567","NL","NLD","NETHERLANDS" -"3262758568","3262758575","DE","DEU","GERMANY" -"3262758576","3262758759","NL","NLD","NETHERLANDS" -"3262758760","3262758767","DE","DEU","GERMANY" -"3262758768","3262758775","NL","NLD","NETHERLANDS" -"3262758776","3262758783","DE","DEU","GERMANY" -"3262758784","3262758815","NL","NLD","NETHERLANDS" -"3262758816","3262758831","DE","DEU","GERMANY" -"3262758832","3262758855","NL","NLD","NETHERLANDS" -"3262758856","3262758887","DE","DEU","GERMANY" -"3262758888","3262758951","NL","NLD","NETHERLANDS" -"3262758952","3262758967","DE","DEU","GERMANY" -"3262758968","3262758991","NL","NLD","NETHERLANDS" -"3262758992","3262758999","DE","DEU","GERMANY" -"3262759000","3262759119","NL","NLD","NETHERLANDS" -"3262759120","3262759127","DE","DEU","GERMANY" -"3262759128","3262759263","NL","NLD","NETHERLANDS" -"3262759264","3262759271","DE","DEU","GERMANY" -"3262759272","3262759311","NL","NLD","NETHERLANDS" -"3262759312","3262759319","DE","DEU","GERMANY" -"3262759320","3262759335","NL","NLD","NETHERLANDS" -"3262759336","3262759343","DE","DEU","GERMANY" -"3262759344","3262759351","NL","NLD","NETHERLANDS" -"3262759352","3262759359","DE","DEU","GERMANY" -"3262759360","3262759415","NL","NLD","NETHERLANDS" -"3262759416","3262759423","DE","DEU","GERMANY" -"3262759424","3262759455","NL","NLD","NETHERLANDS" -"3262759456","3262759463","DE","DEU","GERMANY" -"3262759464","3262759503","NL","NLD","NETHERLANDS" -"3262759504","3262759511","DE","DEU","GERMANY" -"3262759512","3262759527","NL","NLD","NETHERLANDS" -"3262759528","3262759543","DE","DEU","GERMANY" -"3262759544","3262759575","NL","NLD","NETHERLANDS" -"3262759576","3262759583","DE","DEU","GERMANY" -"3262759584","3262759607","NL","NLD","NETHERLANDS" -"3262759608","3262759615","DE","DEU","GERMANY" -"3262759616","3262759639","NL","NLD","NETHERLANDS" -"3262759640","3262759647","DE","DEU","GERMANY" -"3262759648","3262759695","NL","NLD","NETHERLANDS" -"3262759696","3262759703","DE","DEU","GERMANY" -"3262759704","3262759735","NL","NLD","NETHERLANDS" -"3262759736","3262759743","DE","DEU","GERMANY" -"3262759744","3262759927","NL","NLD","NETHERLANDS" -"3262759928","3262759935","DE","DEU","GERMANY" -"3262759936","3262759943","NL","NLD","NETHERLANDS" -"3262759944","3262759951","DE","DEU","GERMANY" -"3262759952","3262759959","NL","NLD","NETHERLANDS" -"3262759960","3262759967","DE","DEU","GERMANY" -"3262759968","3262759991","NL","NLD","NETHERLANDS" -"3262759992","3262759999","DE","DEU","GERMANY" -"3262760000","3262760039","NL","NLD","NETHERLANDS" -"3262760040","3262760047","DE","DEU","GERMANY" -"3262760048","3262760055","NL","NLD","NETHERLANDS" -"3262760056","3262760063","DE","DEU","GERMANY" -"3262760064","3262760151","NL","NLD","NETHERLANDS" -"3262760152","3262760159","DE","DEU","GERMANY" -"3262760160","3262760343","NL","NLD","NETHERLANDS" -"3262760344","3262760351","DE","DEU","GERMANY" -"3262760352","3262760367","NL","NLD","NETHERLANDS" -"3262760368","3262760375","DE","DEU","GERMANY" -"3262760376","3262760471","NL","NLD","NETHERLANDS" -"3262760472","3262760479","DE","DEU","GERMANY" -"3262760480","3262760503","NL","NLD","NETHERLANDS" -"3262760504","3262760511","DE","DEU","GERMANY" -"3262760512","3262760575","NL","NLD","NETHERLANDS" -"3262760576","3262760583","DE","DEU","GERMANY" -"3262760584","3262760639","NL","NLD","NETHERLANDS" -"3262760640","3262760647","DE","DEU","GERMANY" -"3262760648","3262760663","NL","NLD","NETHERLANDS" -"3262760664","3262760671","DE","DEU","GERMANY" -"3262760672","3262760791","NL","NLD","NETHERLANDS" -"3262760792","3262760799","DE","DEU","GERMANY" -"3262760800","3262760951","NL","NLD","NETHERLANDS" -"3262760952","3262760959","DE","DEU","GERMANY" -"3262760960","3262760999","NL","NLD","NETHERLANDS" -"3262761000","3262761007","DE","DEU","GERMANY" -"3262761008","3262761119","NL","NLD","NETHERLANDS" -"3262761120","3262761127","DE","DEU","GERMANY" -"3262761128","3262761135","NL","NLD","NETHERLANDS" -"3262761136","3262761151","DE","DEU","GERMANY" -"3262761152","3262761167","NL","NLD","NETHERLANDS" -"3262761168","3262761175","DE","DEU","GERMANY" -"3262761176","3262761215","NL","NLD","NETHERLANDS" -"3262761216","3262761223","DE","DEU","GERMANY" -"3262761224","3262761279","NL","NLD","NETHERLANDS" -"3262761280","3262761287","DE","DEU","GERMANY" -"3262761288","3262761335","NL","NLD","NETHERLANDS" -"3262761336","3262761343","DE","DEU","GERMANY" -"3262761344","3262761711","NL","NLD","NETHERLANDS" -"3262761712","3262761719","DE","DEU","GERMANY" -"3262761720","3262761727","NL","NLD","NETHERLANDS" -"3262761728","3262761983","DE","DEU","GERMANY" -"3262761984","3262761991","NL","NLD","NETHERLANDS" -"3262761992","3262762007","DE","DEU","GERMANY" -"3262762008","3262762079","NL","NLD","NETHERLANDS" -"3262762080","3262762087","DE","DEU","GERMANY" -"3262762088","3262762175","NL","NLD","NETHERLANDS" -"3262762176","3262762183","DE","DEU","GERMANY" -"3262762184","3262762279","NL","NLD","NETHERLANDS" -"3262762280","3262762287","DE","DEU","GERMANY" -"3262762288","3262762359","NL","NLD","NETHERLANDS" -"3262762360","3262762367","DE","DEU","GERMANY" -"3262762368","3262762695","NL","NLD","NETHERLANDS" -"3262762696","3262762703","DE","DEU","GERMANY" -"3262762704","3262762791","NL","NLD","NETHERLANDS" -"3262762792","3262762799","DE","DEU","GERMANY" -"3262762800","3262762807","NL","NLD","NETHERLANDS" -"3262762808","3262762815","DE","DEU","GERMANY" -"3262762816","3262762839","NL","NLD","NETHERLANDS" -"3262762840","3262762847","DE","DEU","GERMANY" -"3262762848","3262762895","NL","NLD","NETHERLANDS" -"3262762896","3262762903","DE","DEU","GERMANY" -"3262762904","3262762935","NL","NLD","NETHERLANDS" -"3262762936","3262762943","DE","DEU","GERMANY" -"3262762944","3262763311","NL","NLD","NETHERLANDS" -"3262763312","3262763319","DE","DEU","GERMANY" -"3262763320","3262763463","NL","NLD","NETHERLANDS" -"3262763464","3262763471","DE","DEU","GERMANY" -"3262763472","3262763487","NL","NLD","NETHERLANDS" -"3262763488","3262763495","DE","DEU","GERMANY" -"3262763496","3262763519","NL","NLD","NETHERLANDS" -"3262763520","3262763527","DE","DEU","GERMANY" -"3262763528","3262763535","NL","NLD","NETHERLANDS" -"3262763536","3262763543","DE","DEU","GERMANY" -"3262763544","3262763551","NL","NLD","NETHERLANDS" -"3262763552","3262763559","DE","DEU","GERMANY" -"3262763560","3262763615","NL","NLD","NETHERLANDS" -"3262763616","3262763623","DE","DEU","GERMANY" -"3262763624","3262763743","NL","NLD","NETHERLANDS" -"3262763744","3262763751","DE","DEU","GERMANY" -"3262763752","3262763839","NL","NLD","NETHERLANDS" -"3262763840","3262763847","DE","DEU","GERMANY" -"3262763848","3262763879","NL","NLD","NETHERLANDS" -"3262763880","3262763895","DE","DEU","GERMANY" -"3262763896","3262763999","NL","NLD","NETHERLANDS" -"3262764000","3262764007","DE","DEU","GERMANY" -"3262764008","3262764015","NL","NLD","NETHERLANDS" -"3262764016","3262764023","DE","DEU","GERMANY" -"3262764024","3262764175","NL","NLD","NETHERLANDS" -"3262764176","3262764183","DE","DEU","GERMANY" -"3262764184","3262764407","NL","NLD","NETHERLANDS" -"3262764408","3262764415","DE","DEU","GERMANY" -"3262764416","3262764551","NL","NLD","NETHERLANDS" -"3262764552","3262764559","DE","DEU","GERMANY" -"3262764560","3262764615","NL","NLD","NETHERLANDS" -"3262764616","3262764623","DE","DEU","GERMANY" -"3262764624","3262764695","NL","NLD","NETHERLANDS" -"3262764696","3262764703","DE","DEU","GERMANY" -"3262764704","3262764719","NL","NLD","NETHERLANDS" -"3262764720","3262764727","DE","DEU","GERMANY" -"3262764728","3262764927","NL","NLD","NETHERLANDS" -"3262764928","3262764935","DE","DEU","GERMANY" -"3262764936","3262765191","NL","NLD","NETHERLANDS" -"3262765192","3262765199","DE","DEU","GERMANY" -"3262765200","3262765335","NL","NLD","NETHERLANDS" -"3262765336","3262765343","DE","DEU","GERMANY" -"3262765344","3262765375","NL","NLD","NETHERLANDS" -"3262765376","3262765383","DE","DEU","GERMANY" -"3262765384","3262765447","NL","NLD","NETHERLANDS" -"3262765448","3262765455","DE","DEU","GERMANY" -"3262765456","3262765535","NL","NLD","NETHERLANDS" -"3262765536","3262765543","DE","DEU","GERMANY" -"3262765544","3262765559","NL","NLD","NETHERLANDS" -"3262765560","3262765567","DE","DEU","GERMANY" -"3262765568","3262765599","NL","NLD","NETHERLANDS" -"3262765600","3262765615","DE","DEU","GERMANY" -"3262765616","3262765663","NL","NLD","NETHERLANDS" -"3262765664","3262765671","DE","DEU","GERMANY" -"3262765672","3262765735","NL","NLD","NETHERLANDS" -"3262765736","3262765743","DE","DEU","GERMANY" -"3262765744","3262765751","NL","NLD","NETHERLANDS" -"3262765752","3262765759","DE","DEU","GERMANY" -"3262765760","3262765815","NL","NLD","NETHERLANDS" -"3262765816","3262765823","DE","DEU","GERMANY" -"3262765824","3262766047","NL","NLD","NETHERLANDS" -"3262766048","3262766055","DE","DEU","GERMANY" -"3262766056","3262766079","NL","NLD","NETHERLANDS" -"3262766080","3262767103","DE","DEU","GERMANY" -"3262767104","3262767167","NL","NLD","NETHERLANDS" -"3262767168","3262767175","DE","DEU","GERMANY" -"3262767176","3262767231","NL","NLD","NETHERLANDS" -"3262767232","3262767239","DE","DEU","GERMANY" -"3262767240","3262767295","NL","NLD","NETHERLANDS" -"3262767296","3262767311","DE","DEU","GERMANY" -"3262767312","3262767319","NL","NLD","NETHERLANDS" -"3262767320","3262767327","DE","DEU","GERMANY" -"3262767328","3262767367","NL","NLD","NETHERLANDS" -"3262767368","3262767375","DE","DEU","GERMANY" -"3262767376","3262767407","NL","NLD","NETHERLANDS" -"3262767408","3262767415","DE","DEU","GERMANY" -"3262767416","3262767535","NL","NLD","NETHERLANDS" -"3262767536","3262767543","DE","DEU","GERMANY" -"3262767544","3262767599","NL","NLD","NETHERLANDS" -"3262767600","3262767607","DE","DEU","GERMANY" -"3262767608","3262767671","NL","NLD","NETHERLANDS" -"3262767672","3262767679","DE","DEU","GERMANY" -"3262767680","3262767735","NL","NLD","NETHERLANDS" -"3262767736","3262767743","DE","DEU","GERMANY" -"3262767744","3262767855","NL","NLD","NETHERLANDS" -"3262767856","3262767879","DE","DEU","GERMANY" -"3262767880","3262767967","NL","NLD","NETHERLANDS" -"3262767968","3262767975","DE","DEU","GERMANY" -"3262767976","3262768007","NL","NLD","NETHERLANDS" -"3262768008","3262768015","DE","DEU","GERMANY" -"3262768016","3262768511","NL","NLD","NETHERLANDS" -"3262768512","3262768519","DE","DEU","GERMANY" -"3262768520","3262768559","NL","NLD","NETHERLANDS" -"3262768560","3262768567","DE","DEU","GERMANY" -"3262768568","3262768599","NL","NLD","NETHERLANDS" -"3262768600","3262768607","DE","DEU","GERMANY" -"3262768608","3262768631","NL","NLD","NETHERLANDS" -"3262768632","3262768639","DE","DEU","GERMANY" -"3262768640","3262768743","NL","NLD","NETHERLANDS" -"3262768744","3262768751","DE","DEU","GERMANY" -"3262768752","3262768991","NL","NLD","NETHERLANDS" -"3262768992","3262768999","DE","DEU","GERMANY" -"3262769000","3262769111","NL","NLD","NETHERLANDS" -"3262769112","3262769119","DE","DEU","GERMANY" -"3262769120","3262769375","NL","NLD","NETHERLANDS" -"3262769376","3262769383","DE","DEU","GERMANY" -"3262769384","3262769503","NL","NLD","NETHERLANDS" -"3262769504","3262769511","DE","DEU","GERMANY" -"3262769512","3262769631","NL","NLD","NETHERLANDS" -"3262769632","3262769639","DE","DEU","GERMANY" -"3262769640","3262769671","NL","NLD","NETHERLANDS" -"3262769672","3262769679","DE","DEU","GERMANY" -"3262769680","3262769823","NL","NLD","NETHERLANDS" -"3262769824","3262769831","DE","DEU","GERMANY" -"3262769832","3262769839","NL","NLD","NETHERLANDS" -"3262769840","3262769847","DE","DEU","GERMANY" -"3262769848","3262769935","NL","NLD","NETHERLANDS" -"3262769936","3262769951","DE","DEU","GERMANY" -"3262769952","3262769999","NL","NLD","NETHERLANDS" -"3262770000","3262770007","DE","DEU","GERMANY" -"3262770008","3262770055","NL","NLD","NETHERLANDS" -"3262770056","3262770063","DE","DEU","GERMANY" -"3262770064","3262770119","NL","NLD","NETHERLANDS" -"3262770120","3262770135","DE","DEU","GERMANY" -"3262770136","3262770143","NL","NLD","NETHERLANDS" -"3262770144","3262770151","DE","DEU","GERMANY" -"3262770152","3262770167","NL","NLD","NETHERLANDS" -"3262770168","3262770175","DE","DEU","GERMANY" -"3262770176","3262770279","NL","NLD","NETHERLANDS" -"3262770280","3262770287","DE","DEU","GERMANY" -"3262770288","3262770391","NL","NLD","NETHERLANDS" -"3262770392","3262770399","DE","DEU","GERMANY" -"3262770400","3262770535","NL","NLD","NETHERLANDS" -"3262770536","3262770543","DE","DEU","GERMANY" -"3262770544","3262770551","NL","NLD","NETHERLANDS" -"3262770552","3262770559","DE","DEU","GERMANY" -"3262770560","3262770583","NL","NLD","NETHERLANDS" -"3262770584","3262770599","DE","DEU","GERMANY" -"3262770600","3262770615","NL","NLD","NETHERLANDS" -"3262770616","3262770623","DE","DEU","GERMANY" -"3262770624","3262770631","NL","NLD","NETHERLANDS" -"3262770632","3262770639","DE","DEU","GERMANY" -"3262770640","3262770647","NL","NLD","NETHERLANDS" -"3262770648","3262770655","DE","DEU","GERMANY" -"3262770656","3262770815","NL","NLD","NETHERLANDS" -"3262770816","3262770823","DE","DEU","GERMANY" -"3262770824","3262770871","NL","NLD","NETHERLANDS" -"3262770872","3262770879","DE","DEU","GERMANY" -"3262770880","3262770927","NL","NLD","NETHERLANDS" -"3262770928","3262770935","DE","DEU","GERMANY" -"3262770936","3262770999","NL","NLD","NETHERLANDS" -"3262771000","3262771007","DE","DEU","GERMANY" -"3262771008","3262771031","NL","NLD","NETHERLANDS" -"3262771032","3262771039","DE","DEU","GERMANY" -"3262771040","3262771079","NL","NLD","NETHERLANDS" -"3262771080","3262771087","DE","DEU","GERMANY" -"3262771088","3262771119","NL","NLD","NETHERLANDS" -"3262771120","3262771127","DE","DEU","GERMANY" -"3262771128","3262771135","NL","NLD","NETHERLANDS" -"3262771136","3262771143","DE","DEU","GERMANY" -"3262771144","3262771151","NL","NLD","NETHERLANDS" -"3262771152","3262771159","DE","DEU","GERMANY" -"3262771160","3262771183","NL","NLD","NETHERLANDS" -"3262771184","3262771199","DE","DEU","GERMANY" -"3262771200","3262771215","NL","NLD","NETHERLANDS" -"3262771216","3262771223","DE","DEU","GERMANY" -"3262771224","3262771255","NL","NLD","NETHERLANDS" -"3262771256","3262771263","DE","DEU","GERMANY" -"3262771264","3262771295","NL","NLD","NETHERLANDS" -"3262771296","3262771303","DE","DEU","GERMANY" -"3262771304","3262771375","NL","NLD","NETHERLANDS" -"3262771376","3262771391","DE","DEU","GERMANY" -"3262771392","3262771399","NL","NLD","NETHERLANDS" -"3262771400","3262771407","DE","DEU","GERMANY" -"3262771408","3262771463","NL","NLD","NETHERLANDS" -"3262771464","3262771471","DE","DEU","GERMANY" -"3262771472","3262771551","NL","NLD","NETHERLANDS" -"3262771552","3262771559","DE","DEU","GERMANY" -"3262771560","3262771895","NL","NLD","NETHERLANDS" -"3262771896","3262771903","DE","DEU","GERMANY" -"3262771904","3262772039","NL","NLD","NETHERLANDS" -"3262772040","3262772047","DE","DEU","GERMANY" -"3262772048","3262772191","NL","NLD","NETHERLANDS" -"3262772192","3262772199","DE","DEU","GERMANY" -"3262772200","3262772287","NL","NLD","NETHERLANDS" -"3262772288","3262772295","DE","DEU","GERMANY" -"3262772296","3262772447","NL","NLD","NETHERLANDS" -"3262772448","3262772455","DE","DEU","GERMANY" -"3262772456","3262772495","NL","NLD","NETHERLANDS" -"3262772496","3262772503","DE","DEU","GERMANY" -"3262772504","3262772511","NL","NLD","NETHERLANDS" -"3262772512","3262772519","DE","DEU","GERMANY" -"3262772520","3262772567","NL","NLD","NETHERLANDS" -"3262772568","3262772575","DE","DEU","GERMANY" -"3262772576","3262772679","NL","NLD","NETHERLANDS" -"3262772680","3262772687","DE","DEU","GERMANY" -"3262772688","3262772703","NL","NLD","NETHERLANDS" -"3262772704","3262772711","DE","DEU","GERMANY" -"3262772712","3262772727","NL","NLD","NETHERLANDS" -"3262772728","3262772735","DE","DEU","GERMANY" -"3262772736","3262772759","NL","NLD","NETHERLANDS" -"3262772760","3262772767","DE","DEU","GERMANY" -"3262772768","3262772783","NL","NLD","NETHERLANDS" -"3262772784","3262772791","DE","DEU","GERMANY" -"3262772792","3262772855","NL","NLD","NETHERLANDS" -"3262772856","3262772863","DE","DEU","GERMANY" -"3262772864","3262773007","NL","NLD","NETHERLANDS" -"3262773008","3262773015","DE","DEU","GERMANY" -"3262773016","3262773127","NL","NLD","NETHERLANDS" -"3262773128","3262773135","DE","DEU","GERMANY" -"3262773136","3262773439","NL","NLD","NETHERLANDS" -"3262773440","3262773447","DE","DEU","GERMANY" -"3262773448","3262773471","NL","NLD","NETHERLANDS" -"3262773472","3262773479","DE","DEU","GERMANY" -"3262773480","3262773503","NL","NLD","NETHERLANDS" -"3262773504","3262775295","DE","DEU","GERMANY" -"3262775296","3262775303","NL","NLD","NETHERLANDS" -"3262775304","3262775319","DE","DEU","GERMANY" -"3262775320","3262775407","NL","NLD","NETHERLANDS" -"3262775408","3262775415","DE","DEU","GERMANY" -"3262775416","3262775423","NL","NLD","NETHERLANDS" -"3262775424","3262775431","DE","DEU","GERMANY" -"3262775432","3262775503","NL","NLD","NETHERLANDS" -"3262775504","3262775511","DE","DEU","GERMANY" -"3262775512","3262775535","NL","NLD","NETHERLANDS" -"3262775536","3262775543","DE","DEU","GERMANY" -"3262775544","3262775559","NL","NLD","NETHERLANDS" -"3262775560","3262775567","DE","DEU","GERMANY" -"3262775568","3262775623","NL","NLD","NETHERLANDS" -"3262775624","3262775639","DE","DEU","GERMANY" -"3262775640","3262775647","NL","NLD","NETHERLANDS" -"3262775648","3262775655","DE","DEU","GERMANY" -"3262775656","3262775695","NL","NLD","NETHERLANDS" -"3262775696","3262775703","DE","DEU","GERMANY" -"3262775704","3262775735","NL","NLD","NETHERLANDS" -"3262775736","3262775743","DE","DEU","GERMANY" -"3262775744","3262775751","NL","NLD","NETHERLANDS" -"3262775752","3262775759","DE","DEU","GERMANY" -"3262775760","3262775831","NL","NLD","NETHERLANDS" -"3262775832","3262775839","DE","DEU","GERMANY" -"3262775840","3262775871","NL","NLD","NETHERLANDS" -"3262775872","3262775879","DE","DEU","GERMANY" -"3262775880","3262775935","NL","NLD","NETHERLANDS" -"3262775936","3262775943","DE","DEU","GERMANY" -"3262775944","3262776055","NL","NLD","NETHERLANDS" -"3262776056","3262776063","DE","DEU","GERMANY" -"3262776064","3262776199","NL","NLD","NETHERLANDS" -"3262776200","3262776207","DE","DEU","GERMANY" -"3262776208","3262776239","NL","NLD","NETHERLANDS" -"3262776240","3262776247","DE","DEU","GERMANY" -"3262776248","3262776287","NL","NLD","NETHERLANDS" -"3262776288","3262776295","DE","DEU","GERMANY" -"3262776296","3262776351","NL","NLD","NETHERLANDS" -"3262776352","3262776359","DE","DEU","GERMANY" -"3262776360","3262776543","NL","NLD","NETHERLANDS" -"3262776544","3262776551","DE","DEU","GERMANY" -"3262776552","3262776559","NL","NLD","NETHERLANDS" -"3262776560","3262776567","DE","DEU","GERMANY" -"3262776568","3262776663","NL","NLD","NETHERLANDS" -"3262776664","3262776671","DE","DEU","GERMANY" -"3262776672","3262776687","NL","NLD","NETHERLANDS" -"3262776688","3262776695","DE","DEU","GERMANY" -"3262776696","3262776719","NL","NLD","NETHERLANDS" -"3262776720","3262776727","DE","DEU","GERMANY" -"3262776728","3262776751","NL","NLD","NETHERLANDS" -"3262776752","3262776759","DE","DEU","GERMANY" -"3262776760","3262776823","NL","NLD","NETHERLANDS" -"3262776824","3262776831","DE","DEU","GERMANY" -"3262776832","3262776887","NL","NLD","NETHERLANDS" -"3262776888","3262776895","DE","DEU","GERMANY" -"3262776896","3262777015","NL","NLD","NETHERLANDS" -"3262777016","3262777031","DE","DEU","GERMANY" -"3262777032","3262777079","NL","NLD","NETHERLANDS" -"3262777080","3262777087","DE","DEU","GERMANY" -"3262777088","3262777127","NL","NLD","NETHERLANDS" -"3262777128","3262777135","DE","DEU","GERMANY" -"3262777136","3262777215","NL","NLD","NETHERLANDS" -"3262777216","3262777223","DE","DEU","GERMANY" -"3262777224","3262777279","NL","NLD","NETHERLANDS" -"3262777280","3262777287","DE","DEU","GERMANY" -"3262777288","3262777343","NL","NLD","NETHERLANDS" -"3262777344","3262777351","DE","DEU","GERMANY" -"3262777352","3262777359","NL","NLD","NETHERLANDS" -"3262777360","3262777375","DE","DEU","GERMANY" -"3262777376","3262777543","NL","NLD","NETHERLANDS" -"3262777544","3262777551","DE","DEU","GERMANY" -"3262777552","3262777919","NL","NLD","NETHERLANDS" -"3262777920","3262777927","DE","DEU","GERMANY" -"3262777928","3262777943","NL","NLD","NETHERLANDS" -"3262777944","3262777951","DE","DEU","GERMANY" -"3262777952","3262778015","NL","NLD","NETHERLANDS" -"3262778016","3262778023","DE","DEU","GERMANY" -"3262778024","3262778063","NL","NLD","NETHERLANDS" -"3262778064","3262778079","DE","DEU","GERMANY" -"3262778080","3262778095","NL","NLD","NETHERLANDS" -"3262778096","3262778103","DE","DEU","GERMANY" -"3262778104","3262778175","NL","NLD","NETHERLANDS" -"3262778176","3262778191","DE","DEU","GERMANY" -"3262778192","3262778239","NL","NLD","NETHERLANDS" -"3262778240","3262778247","DE","DEU","GERMANY" -"3262778248","3262778663","NL","NLD","NETHERLANDS" -"3262778664","3262778671","DE","DEU","GERMANY" -"3262778672","3262779055","NL","NLD","NETHERLANDS" -"3262779056","3262779063","DE","DEU","GERMANY" -"3262779064","3262779079","NL","NLD","NETHERLANDS" -"3262779080","3262779095","DE","DEU","GERMANY" -"3262779096","3262779119","NL","NLD","NETHERLANDS" -"3262779120","3262779127","DE","DEU","GERMANY" -"3262779128","3262779151","NL","NLD","NETHERLANDS" -"3262779152","3262779159","DE","DEU","GERMANY" -"3262779160","3262779175","NL","NLD","NETHERLANDS" -"3262779176","3262779191","DE","DEU","GERMANY" -"3262779192","3262779327","NL","NLD","NETHERLANDS" -"3262779328","3262779335","DE","DEU","GERMANY" -"3262779336","3262779519","NL","NLD","NETHERLANDS" -"3262779520","3262779527","DE","DEU","GERMANY" -"3262779528","3262779543","NL","NLD","NETHERLANDS" -"3262779544","3262779551","DE","DEU","GERMANY" -"3262779552","3262779687","NL","NLD","NETHERLANDS" -"3262779688","3262779695","DE","DEU","GERMANY" -"3262779696","3262779735","NL","NLD","NETHERLANDS" -"3262779736","3262779743","DE","DEU","GERMANY" -"3262779744","3262779911","NL","NLD","NETHERLANDS" -"3262779912","3262779951","DE","DEU","GERMANY" -"3262779952","3262779959","NL","NLD","NETHERLANDS" -"3262779960","3262779983","DE","DEU","GERMANY" -"3262779984","3262780055","NL","NLD","NETHERLANDS" -"3262780056","3262780071","DE","DEU","GERMANY" -"3262780072","3262780127","NL","NLD","NETHERLANDS" -"3262780128","3262780135","DE","DEU","GERMANY" -"3262780136","3262780399","NL","NLD","NETHERLANDS" -"3262780400","3262780407","DE","DEU","GERMANY" -"3262780408","3262780463","NL","NLD","NETHERLANDS" -"3262780464","3262780471","DE","DEU","GERMANY" -"3262780472","3262780503","NL","NLD","NETHERLANDS" -"3262780504","3262780511","DE","DEU","GERMANY" -"3262780512","3262780583","NL","NLD","NETHERLANDS" -"3262780584","3262780591","DE","DEU","GERMANY" -"3262780592","3262780671","NL","NLD","NETHERLANDS" -"3262780672","3262780679","DE","DEU","GERMANY" -"3262780680","3262780727","NL","NLD","NETHERLANDS" -"3262780728","3262780735","DE","DEU","GERMANY" -"3262780736","3262780791","NL","NLD","NETHERLANDS" -"3262780792","3262780799","DE","DEU","GERMANY" -"3262780800","3262780807","NL","NLD","NETHERLANDS" -"3262780808","3262780815","DE","DEU","GERMANY" -"3262780816","3262780823","NL","NLD","NETHERLANDS" -"3262780824","3262780831","DE","DEU","GERMANY" -"3262780832","3262780935","NL","NLD","NETHERLANDS" -"3262780936","3262780967","DE","DEU","GERMANY" -"3262780968","3262781287","NL","NLD","NETHERLANDS" -"3262781288","3262781295","DE","DEU","GERMANY" -"3262781296","3262781375","NL","NLD","NETHERLANDS" -"3262781376","3262781383","DE","DEU","GERMANY" -"3262781384","3262781487","NL","NLD","NETHERLANDS" -"3262781488","3262781495","DE","DEU","GERMANY" -"3262781496","3262781503","NL","NLD","NETHERLANDS" -"3262781504","3262781519","DE","DEU","GERMANY" -"3262781520","3262781575","NL","NLD","NETHERLANDS" -"3262781576","3262781583","DE","DEU","GERMANY" -"3262781584","3262781631","NL","NLD","NETHERLANDS" -"3262781632","3262781639","DE","DEU","GERMANY" -"3262781640","3262781663","NL","NLD","NETHERLANDS" -"3262781664","3262781671","DE","DEU","GERMANY" -"3262781672","3262781679","NL","NLD","NETHERLANDS" -"3262781680","3262781687","DE","DEU","GERMANY" -"3262781688","3262781719","NL","NLD","NETHERLANDS" -"3262781720","3262781727","DE","DEU","GERMANY" -"3262781728","3262781815","NL","NLD","NETHERLANDS" -"3262781816","3262781823","DE","DEU","GERMANY" -"3262781824","3262781831","NL","NLD","NETHERLANDS" -"3262781832","3262781839","DE","DEU","GERMANY" -"3262781840","3262781871","NL","NLD","NETHERLANDS" -"3262781872","3262781879","DE","DEU","GERMANY" -"3262781880","3262781959","NL","NLD","NETHERLANDS" -"3262781960","3262781967","DE","DEU","GERMANY" -"3262781968","3262782127","NL","NLD","NETHERLANDS" -"3262782128","3262782135","DE","DEU","GERMANY" -"3262782136","3262782159","NL","NLD","NETHERLANDS" -"3262782160","3262782167","DE","DEU","GERMANY" -"3262782168","3262782375","NL","NLD","NETHERLANDS" -"3262782376","3262782383","DE","DEU","GERMANY" -"3262782384","3262782399","NL","NLD","NETHERLANDS" -"3262782400","3262782407","DE","DEU","GERMANY" -"3262782408","3262782559","NL","NLD","NETHERLANDS" -"3262782560","3262782567","DE","DEU","GERMANY" -"3262782568","3262782791","NL","NLD","NETHERLANDS" -"3262782792","3262782799","DE","DEU","GERMANY" -"3262782800","3262782871","NL","NLD","NETHERLANDS" -"3262782872","3262782879","DE","DEU","GERMANY" -"3262782880","3262782935","NL","NLD","NETHERLANDS" -"3262782936","3262782943","DE","DEU","GERMANY" -"3262782944","3262783071","NL","NLD","NETHERLANDS" -"3262783072","3262783079","DE","DEU","GERMANY" -"3262783080","3262783159","NL","NLD","NETHERLANDS" -"3262783160","3262783167","DE","DEU","GERMANY" -"3262783168","3262783383","NL","NLD","NETHERLANDS" -"3262783384","3262783391","DE","DEU","GERMANY" -"3262783392","3262783415","NL","NLD","NETHERLANDS" -"3262783416","3262783423","DE","DEU","GERMANY" -"3262783424","3262783647","NL","NLD","NETHERLANDS" -"3262783648","3262783655","DE","DEU","GERMANY" -"3262783656","3262783679","NL","NLD","NETHERLANDS" -"3262783680","3262783687","DE","DEU","GERMANY" -"3262783688","3262783719","NL","NLD","NETHERLANDS" -"3262783720","3262783727","DE","DEU","GERMANY" -"3262783728","3262783879","NL","NLD","NETHERLANDS" -"3262783880","3262783887","DE","DEU","GERMANY" -"3262783888","3262784007","NL","NLD","NETHERLANDS" -"3262784008","3262784015","DE","DEU","GERMANY" -"3262784016","3262784143","NL","NLD","NETHERLANDS" -"3262784144","3262784151","DE","DEU","GERMANY" -"3262784152","3262784359","NL","NLD","NETHERLANDS" -"3262784360","3262784367","DE","DEU","GERMANY" -"3262784368","3262784439","NL","NLD","NETHERLANDS" -"3262784440","3262784447","DE","DEU","GERMANY" -"3262784448","3262784495","NL","NLD","NETHERLANDS" -"3262784496","3262784503","DE","DEU","GERMANY" -"3262784504","3262784767","NL","NLD","NETHERLANDS" -"3262784768","3262784775","DE","DEU","GERMANY" -"3262784776","3262785023","NL","NLD","NETHERLANDS" -"3262785024","3262785031","DE","DEU","GERMANY" -"3262785032","3262785167","NL","NLD","NETHERLANDS" -"3262785168","3262785175","DE","DEU","GERMANY" -"3262785176","3262785423","NL","NLD","NETHERLANDS" -"3262785424","3262785431","DE","DEU","GERMANY" -"3262785432","3262785455","NL","NLD","NETHERLANDS" -"3262785456","3262785463","DE","DEU","GERMANY" -"3262785464","3262785511","NL","NLD","NETHERLANDS" -"3262785512","3262785519","DE","DEU","GERMANY" -"3262785520","3262785527","NL","NLD","NETHERLANDS" -"3262785528","3262785535","DE","DEU","GERMANY" -"3262785536","3262785951","NL","NLD","NETHERLANDS" -"3262785952","3262785959","DE","DEU","GERMANY" -"3262785960","3262786023","NL","NLD","NETHERLANDS" -"3262786024","3262786031","DE","DEU","GERMANY" -"3262786032","3262786167","NL","NLD","NETHERLANDS" -"3262786168","3262786183","DE","DEU","GERMANY" -"3262786184","3262786207","NL","NLD","NETHERLANDS" -"3262786208","3262786223","DE","DEU","GERMANY" -"3262786224","3262786471","NL","NLD","NETHERLANDS" -"3262786472","3262786479","DE","DEU","GERMANY" -"3262786480","3262786679","NL","NLD","NETHERLANDS" -"3262786680","3262786687","DE","DEU","GERMANY" -"3262786688","3262786759","NL","NLD","NETHERLANDS" -"3262786760","3262786767","DE","DEU","GERMANY" -"3262786768","3262786959","NL","NLD","NETHERLANDS" -"3262786960","3262786975","DE","DEU","GERMANY" -"3262786976","3262786983","NL","NLD","NETHERLANDS" -"3262786984","3262786991","DE","DEU","GERMANY" -"3262786992","3262786999","NL","NLD","NETHERLANDS" -"3262787000","3262787015","DE","DEU","GERMANY" -"3262787016","3262787031","NL","NLD","NETHERLANDS" -"3262787032","3262787063","DE","DEU","GERMANY" -"3262787064","3262787087","NL","NLD","NETHERLANDS" -"3262787088","3262787103","DE","DEU","GERMANY" -"3262787104","3262787111","NL","NLD","NETHERLANDS" -"3262787112","3262787119","DE","DEU","GERMANY" -"3262787120","3262787143","NL","NLD","NETHERLANDS" -"3262787144","3262787151","DE","DEU","GERMANY" -"3262787152","3262787191","NL","NLD","NETHERLANDS" -"3262787192","3262787199","DE","DEU","GERMANY" -"3262787200","3262787239","NL","NLD","NETHERLANDS" -"3262787240","3262787247","DE","DEU","GERMANY" -"3262787248","3262787335","NL","NLD","NETHERLANDS" -"3262787336","3262787351","DE","DEU","GERMANY" -"3262787352","3262787359","NL","NLD","NETHERLANDS" -"3262787360","3262787367","DE","DEU","GERMANY" -"3262787368","3262787407","NL","NLD","NETHERLANDS" -"3262787408","3262787415","DE","DEU","GERMANY" -"3262787416","3262787543","NL","NLD","NETHERLANDS" -"3262787544","3262787551","DE","DEU","GERMANY" -"3262787552","3262787583","NL","NLD","NETHERLANDS" -"3262787584","3262787591","DE","DEU","GERMANY" -"3262787592","3262787623","NL","NLD","NETHERLANDS" -"3262787624","3262787631","DE","DEU","GERMANY" -"3262787632","3262787655","NL","NLD","NETHERLANDS" -"3262787656","3262787663","DE","DEU","GERMANY" -"3262787664","3262787823","NL","NLD","NETHERLANDS" -"3262787824","3262787831","DE","DEU","GERMANY" -"3262787832","3262788055","NL","NLD","NETHERLANDS" -"3262788056","3262788063","DE","DEU","GERMANY" -"3262788064","3262788167","NL","NLD","NETHERLANDS" -"3262788168","3262788175","DE","DEU","GERMANY" -"3262788176","3262788199","NL","NLD","NETHERLANDS" -"3262788200","3262788207","DE","DEU","GERMANY" -"3262788208","3262788279","NL","NLD","NETHERLANDS" -"3262788280","3262788287","DE","DEU","GERMANY" -"3262788288","3262788479","NL","NLD","NETHERLANDS" -"3262788480","3262788495","DE","DEU","GERMANY" -"3262788496","3262788559","NL","NLD","NETHERLANDS" -"3262788560","3262788567","DE","DEU","GERMANY" -"3262788568","3262788623","NL","NLD","NETHERLANDS" -"3262788624","3262788631","DE","DEU","GERMANY" -"3262788632","3262788743","NL","NLD","NETHERLANDS" -"3262788744","3262788751","DE","DEU","GERMANY" -"3262788752","3262788799","NL","NLD","NETHERLANDS" -"3262788800","3262788807","DE","DEU","GERMANY" -"3262788808","3262788919","NL","NLD","NETHERLANDS" -"3262788920","3262788927","DE","DEU","GERMANY" -"3262788928","3262788951","NL","NLD","NETHERLANDS" -"3262788952","3262788959","DE","DEU","GERMANY" -"3262788960","3262788983","NL","NLD","NETHERLANDS" -"3262788984","3262788991","DE","DEU","GERMANY" -"3262788992","3262789079","NL","NLD","NETHERLANDS" -"3262789080","3262789095","DE","DEU","GERMANY" -"3262789096","3262789119","NL","NLD","NETHERLANDS" -"3262789120","3262790143","DE","DEU","GERMANY" -"3262790144","3262790287","NL","NLD","NETHERLANDS" -"3262790288","3262790295","DE","DEU","GERMANY" -"3262790296","3262790543","NL","NLD","NETHERLANDS" -"3262790544","3262790551","DE","DEU","GERMANY" -"3262790552","3262790639","NL","NLD","NETHERLANDS" -"3262790640","3262790647","DE","DEU","GERMANY" -"3262790648","3262790695","NL","NLD","NETHERLANDS" -"3262790696","3262790703","DE","DEU","GERMANY" -"3262790704","3262790815","NL","NLD","NETHERLANDS" -"3262790816","3262790823","DE","DEU","GERMANY" -"3262790824","3262790911","NL","NLD","NETHERLANDS" -"3262790912","3262790919","DE","DEU","GERMANY" -"3262790920","3262791039","NL","NLD","NETHERLANDS" -"3262791040","3262791047","DE","DEU","GERMANY" -"3262791048","3262791095","NL","NLD","NETHERLANDS" -"3262791096","3262791103","DE","DEU","GERMANY" -"3262791104","3262791319","NL","NLD","NETHERLANDS" -"3262791320","3262791327","DE","DEU","GERMANY" -"3262791328","3262791335","NL","NLD","NETHERLANDS" -"3262791336","3262791343","DE","DEU","GERMANY" -"3262791344","3262791399","NL","NLD","NETHERLANDS" -"3262791400","3262791407","DE","DEU","GERMANY" -"3262791408","3262791543","NL","NLD","NETHERLANDS" -"3262791544","3262791551","DE","DEU","GERMANY" -"3262791552","3262791575","NL","NLD","NETHERLANDS" -"3262791576","3262791583","DE","DEU","GERMANY" -"3262791584","3262791751","NL","NLD","NETHERLANDS" -"3262791752","3262791759","DE","DEU","GERMANY" -"3262791760","3262791887","NL","NLD","NETHERLANDS" -"3262791888","3262791895","DE","DEU","GERMANY" -"3262791896","3262791903","NL","NLD","NETHERLANDS" -"3262791904","3262791911","DE","DEU","GERMANY" -"3262791912","3262791951","NL","NLD","NETHERLANDS" -"3262791952","3262791959","DE","DEU","GERMANY" -"3262791960","3262792079","NL","NLD","NETHERLANDS" -"3262792080","3262792087","DE","DEU","GERMANY" -"3262792088","3262792191","NL","NLD","NETHERLANDS" -"3262792192","3262792199","DE","DEU","GERMANY" -"3262792200","3262792367","NL","NLD","NETHERLANDS" -"3262792368","3262792375","DE","DEU","GERMANY" -"3262792376","3262792383","NL","NLD","NETHERLANDS" -"3262792384","3262792391","DE","DEU","GERMANY" -"3262792392","3262792463","NL","NLD","NETHERLANDS" -"3262792464","3262792471","DE","DEU","GERMANY" -"3262792472","3262792495","NL","NLD","NETHERLANDS" -"3262792496","3262792503","DE","DEU","GERMANY" -"3262792504","3262792607","NL","NLD","NETHERLANDS" -"3262792608","3262792615","DE","DEU","GERMANY" -"3262792616","3262792823","NL","NLD","NETHERLANDS" -"3262792824","3262792831","DE","DEU","GERMANY" -"3262792832","3262792871","NL","NLD","NETHERLANDS" -"3262792872","3262792879","DE","DEU","GERMANY" -"3262792880","3262793215","NL","NLD","NETHERLANDS" -"3262793216","3262793223","DE","DEU","GERMANY" -"3262793224","3262793287","NL","NLD","NETHERLANDS" -"3262793288","3262793295","DE","DEU","GERMANY" -"3262793296","3262793303","NL","NLD","NETHERLANDS" -"3262793304","3262793311","DE","DEU","GERMANY" -"3262793312","3262793407","NL","NLD","NETHERLANDS" -"3262793408","3262793415","DE","DEU","GERMANY" -"3262793416","3262793583","NL","NLD","NETHERLANDS" -"3262793584","3262793591","DE","DEU","GERMANY" -"3262793592","3262793607","NL","NLD","NETHERLANDS" -"3262793608","3262793623","DE","DEU","GERMANY" -"3262793624","3262793687","NL","NLD","NETHERLANDS" -"3262793688","3262793695","DE","DEU","GERMANY" -"3262793696","3262793775","NL","NLD","NETHERLANDS" -"3262793776","3262793783","DE","DEU","GERMANY" -"3262793784","3262793815","NL","NLD","NETHERLANDS" -"3262793816","3262793831","DE","DEU","GERMANY" -"3262793832","3262793847","NL","NLD","NETHERLANDS" -"3262793848","3262793855","DE","DEU","GERMANY" -"3262793856","3262793951","NL","NLD","NETHERLANDS" -"3262793952","3262793959","DE","DEU","GERMANY" -"3262793960","3262793991","NL","NLD","NETHERLANDS" -"3262793992","3262793999","DE","DEU","GERMANY" -"3262794000","3262794007","NL","NLD","NETHERLANDS" -"3262794008","3262794015","DE","DEU","GERMANY" -"3262794016","3262794063","NL","NLD","NETHERLANDS" -"3262794064","3262794071","DE","DEU","GERMANY" -"3262794072","3262794151","NL","NLD","NETHERLANDS" -"3262794152","3262794159","DE","DEU","GERMANY" -"3262794160","3262794279","NL","NLD","NETHERLANDS" -"3262794280","3262794287","DE","DEU","GERMANY" -"3262794288","3262794327","NL","NLD","NETHERLANDS" -"3262794328","3262794335","DE","DEU","GERMANY" -"3262794336","3262794447","NL","NLD","NETHERLANDS" -"3262794448","3262794455","DE","DEU","GERMANY" -"3262794456","3262794719","NL","NLD","NETHERLANDS" -"3262794720","3262794727","DE","DEU","GERMANY" -"3262794728","3262794751","NL","NLD","NETHERLANDS" -"3262794752","3262797823","DE","DEU","GERMANY" -"3262797824","3262797839","NL","NLD","NETHERLANDS" -"3262797840","3262797847","DE","DEU","GERMANY" -"3262797848","3262797967","NL","NLD","NETHERLANDS" -"3262797968","3262797975","DE","DEU","GERMANY" -"3262797976","3262797983","NL","NLD","NETHERLANDS" -"3262797984","3262797991","DE","DEU","GERMANY" -"3262797992","3262798039","NL","NLD","NETHERLANDS" -"3262798040","3262798047","DE","DEU","GERMANY" -"3262798048","3262798103","NL","NLD","NETHERLANDS" -"3262798104","3262798111","DE","DEU","GERMANY" -"3262798112","3262798135","NL","NLD","NETHERLANDS" -"3262798136","3262798151","DE","DEU","GERMANY" -"3262798152","3262798231","NL","NLD","NETHERLANDS" -"3262798232","3262798239","DE","DEU","GERMANY" -"3262798240","3262798279","NL","NLD","NETHERLANDS" -"3262798280","3262798287","DE","DEU","GERMANY" -"3262798288","3262798319","NL","NLD","NETHERLANDS" -"3262798320","3262798327","DE","DEU","GERMANY" -"3262798328","3262798343","NL","NLD","NETHERLANDS" -"3262798344","3262798351","DE","DEU","GERMANY" -"3262798352","3262798407","NL","NLD","NETHERLANDS" -"3262798408","3262798415","DE","DEU","GERMANY" -"3262798416","3262798431","NL","NLD","NETHERLANDS" -"3262798432","3262798439","DE","DEU","GERMANY" -"3262798440","3262798447","NL","NLD","NETHERLANDS" -"3262798448","3262798455","DE","DEU","GERMANY" -"3262798456","3262798463","NL","NLD","NETHERLANDS" -"3262798464","3262798471","DE","DEU","GERMANY" -"3262798472","3262798487","NL","NLD","NETHERLANDS" -"3262798488","3262798503","DE","DEU","GERMANY" -"3262798504","3262798511","NL","NLD","NETHERLANDS" -"3262798512","3262798519","DE","DEU","GERMANY" -"3262798520","3262798583","NL","NLD","NETHERLANDS" -"3262798584","3262798591","DE","DEU","GERMANY" -"3262798592","3262798975","NL","NLD","NETHERLANDS" -"3262798976","3262798983","DE","DEU","GERMANY" -"3262798984","3262799111","NL","NLD","NETHERLANDS" -"3262799112","3262799119","DE","DEU","GERMANY" -"3262799120","3262799143","NL","NLD","NETHERLANDS" -"3262799144","3262799151","DE","DEU","GERMANY" -"3262799152","3262799199","NL","NLD","NETHERLANDS" -"3262799200","3262799207","DE","DEU","GERMANY" -"3262799208","3262799303","NL","NLD","NETHERLANDS" -"3262799304","3262799311","DE","DEU","GERMANY" -"3262799312","3262799383","NL","NLD","NETHERLANDS" -"3262799384","3262799399","DE","DEU","GERMANY" -"3262799400","3262799479","NL","NLD","NETHERLANDS" -"3262799480","3262799487","DE","DEU","GERMANY" -"3262799488","3262799591","NL","NLD","NETHERLANDS" -"3262799592","3262799599","DE","DEU","GERMANY" -"3262799600","3262799735","NL","NLD","NETHERLANDS" -"3262799736","3262799743","DE","DEU","GERMANY" -"3262799744","3262799855","NL","NLD","NETHERLANDS" -"3262799856","3262799871","DE","DEU","GERMANY" -"3262799872","3262799991","NL","NLD","NETHERLANDS" -"3262799992","3262800007","DE","DEU","GERMANY" -"3262800008","3262800071","NL","NLD","NETHERLANDS" -"3262800072","3262800079","DE","DEU","GERMANY" -"3262800080","3262800127","NL","NLD","NETHERLANDS" -"3262800128","3262800135","DE","DEU","GERMANY" -"3262800136","3262800175","NL","NLD","NETHERLANDS" -"3262800176","3262800183","DE","DEU","GERMANY" -"3262800184","3262800215","NL","NLD","NETHERLANDS" -"3262800216","3262800223","DE","DEU","GERMANY" -"3262800224","3262800239","NL","NLD","NETHERLANDS" -"3262800240","3262800247","DE","DEU","GERMANY" -"3262800248","3262800383","NL","NLD","NETHERLANDS" -"3262800384","3262800391","DE","DEU","GERMANY" -"3262800392","3262800407","NL","NLD","NETHERLANDS" -"3262800408","3262800423","DE","DEU","GERMANY" -"3262800424","3262800431","NL","NLD","NETHERLANDS" -"3262800432","3262800439","DE","DEU","GERMANY" -"3262800440","3262800519","NL","NLD","NETHERLANDS" -"3262800520","3262800527","DE","DEU","GERMANY" -"3262800528","3262800567","NL","NLD","NETHERLANDS" -"3262800568","3262800575","DE","DEU","GERMANY" -"3262800576","3262800671","NL","NLD","NETHERLANDS" -"3262800672","3262800679","DE","DEU","GERMANY" -"3262800680","3262800727","NL","NLD","NETHERLANDS" -"3262800728","3262800735","DE","DEU","GERMANY" -"3262800736","3262800871","NL","NLD","NETHERLANDS" -"3262800872","3262800879","DE","DEU","GERMANY" -"3262800880","3262800999","NL","NLD","NETHERLANDS" -"3262801000","3262801007","DE","DEU","GERMANY" -"3262801008","3262801031","NL","NLD","NETHERLANDS" -"3262801032","3262801039","DE","DEU","GERMANY" -"3262801040","3262801071","NL","NLD","NETHERLANDS" -"3262801072","3262801079","DE","DEU","GERMANY" -"3262801080","3262801223","NL","NLD","NETHERLANDS" -"3262801224","3262801231","DE","DEU","GERMANY" -"3262801232","3262801271","NL","NLD","NETHERLANDS" -"3262801272","3262801279","DE","DEU","GERMANY" -"3262801280","3262801287","NL","NLD","NETHERLANDS" -"3262801288","3262801311","DE","DEU","GERMANY" -"3262801312","3262801679","NL","NLD","NETHERLANDS" -"3262801680","3262801687","DE","DEU","GERMANY" -"3262801688","3262801695","NL","NLD","NETHERLANDS" -"3262801696","3262801703","DE","DEU","GERMANY" -"3262801704","3262801791","NL","NLD","NETHERLANDS" -"3262801792","3262801799","DE","DEU","GERMANY" -"3262801800","3262801863","NL","NLD","NETHERLANDS" -"3262801864","3262801871","DE","DEU","GERMANY" -"3262801872","3262801975","NL","NLD","NETHERLANDS" -"3262801976","3262801991","DE","DEU","GERMANY" -"3262801992","3262802007","NL","NLD","NETHERLANDS" -"3262802008","3262802015","DE","DEU","GERMANY" -"3262802016","3262802039","NL","NLD","NETHERLANDS" -"3262802040","3262802047","DE","DEU","GERMANY" -"3262802048","3262802127","NL","NLD","NETHERLANDS" -"3262802128","3262802135","DE","DEU","GERMANY" -"3262802136","3262802183","NL","NLD","NETHERLANDS" -"3262802184","3262802191","DE","DEU","GERMANY" -"3262802192","3262802231","NL","NLD","NETHERLANDS" -"3262802232","3262802239","DE","DEU","GERMANY" -"3262802240","3262802271","NL","NLD","NETHERLANDS" -"3262802272","3262802287","DE","DEU","GERMANY" -"3262802288","3262802519","NL","NLD","NETHERLANDS" -"3262802520","3262802527","DE","DEU","GERMANY" -"3262802528","3262802639","NL","NLD","NETHERLANDS" -"3262802640","3262802647","DE","DEU","GERMANY" -"3262802648","3262802727","NL","NLD","NETHERLANDS" -"3262802728","3262802743","DE","DEU","GERMANY" -"3262802744","3262802815","NL","NLD","NETHERLANDS" -"3262802816","3262802823","DE","DEU","GERMANY" -"3262802824","3262803023","NL","NLD","NETHERLANDS" -"3262803024","3262803039","DE","DEU","GERMANY" -"3262803040","3262803127","NL","NLD","NETHERLANDS" -"3262803128","3262803135","DE","DEU","GERMANY" -"3262803136","3262803159","NL","NLD","NETHERLANDS" -"3262803160","3262803167","DE","DEU","GERMANY" -"3262803168","3262803183","NL","NLD","NETHERLANDS" -"3262803184","3262803199","DE","DEU","GERMANY" -"3262803200","3262803351","NL","NLD","NETHERLANDS" -"3262803352","3262803359","DE","DEU","GERMANY" -"3262803360","3262803367","NL","NLD","NETHERLANDS" -"3262803368","3262803391","DE","DEU","GERMANY" -"3262803392","3262803487","NL","NLD","NETHERLANDS" -"3262803488","3262803495","DE","DEU","GERMANY" -"3262803496","3262803535","NL","NLD","NETHERLANDS" -"3262803536","3262803543","DE","DEU","GERMANY" -"3262803544","3262803567","NL","NLD","NETHERLANDS" -"3262803568","3262803575","DE","DEU","GERMANY" -"3262803576","3262803623","NL","NLD","NETHERLANDS" -"3262803624","3262803631","DE","DEU","GERMANY" -"3262803632","3262803703","NL","NLD","NETHERLANDS" -"3262803704","3262803743","DE","DEU","GERMANY" -"3262803744","3262803847","NL","NLD","NETHERLANDS" -"3262803848","3262803855","DE","DEU","GERMANY" -"3262803856","3262803895","NL","NLD","NETHERLANDS" -"3262803896","3262803903","DE","DEU","GERMANY" -"3262803904","3262803991","NL","NLD","NETHERLANDS" -"3262803992","3262803999","DE","DEU","GERMANY" -"3262804000","3262804055","NL","NLD","NETHERLANDS" -"3262804056","3262804063","DE","DEU","GERMANY" -"3262804064","3262804095","NL","NLD","NETHERLANDS" -"3262804096","3262804103","DE","DEU","GERMANY" -"3262804104","3262804135","NL","NLD","NETHERLANDS" -"3262804136","3262804143","DE","DEU","GERMANY" -"3262804144","3262804183","NL","NLD","NETHERLANDS" -"3262804184","3262804191","DE","DEU","GERMANY" -"3262804192","3262804231","NL","NLD","NETHERLANDS" -"3262804232","3262804239","DE","DEU","GERMANY" -"3262804240","3262804359","NL","NLD","NETHERLANDS" -"3262804360","3262804367","DE","DEU","GERMANY" -"3262804368","3262804383","NL","NLD","NETHERLANDS" -"3262804384","3262804407","DE","DEU","GERMANY" -"3262804408","3262804447","NL","NLD","NETHERLANDS" -"3262804448","3262804455","DE","DEU","GERMANY" -"3262804456","3262804479","NL","NLD","NETHERLANDS" -"3262804480","3262804487","DE","DEU","GERMANY" -"3262804488","3262804519","NL","NLD","NETHERLANDS" -"3262804520","3262804527","DE","DEU","GERMANY" -"3262804528","3262804823","NL","NLD","NETHERLANDS" -"3262804824","3262804839","DE","DEU","GERMANY" -"3262804840","3262804871","NL","NLD","NETHERLANDS" -"3262804872","3262804879","DE","DEU","GERMANY" -"3262804880","3262804887","NL","NLD","NETHERLANDS" -"3262804888","3262804895","DE","DEU","GERMANY" -"3262804896","3262804991","NL","NLD","NETHERLANDS" -"3262804992","3262804999","DE","DEU","GERMANY" -"3262805000","3262805255","NL","NLD","NETHERLANDS" -"3262805256","3262805271","DE","DEU","GERMANY" -"3262805272","3262805287","NL","NLD","NETHERLANDS" -"3262805288","3262805295","DE","DEU","GERMANY" -"3262805296","3262805343","NL","NLD","NETHERLANDS" -"3262805344","3262805351","DE","DEU","GERMANY" -"3262805352","3262805551","NL","NLD","NETHERLANDS" -"3262805552","3262805559","DE","DEU","GERMANY" -"3262805560","3262805895","NL","NLD","NETHERLANDS" -"3262805896","3262805903","DE","DEU","GERMANY" -"3262805904","3262805927","NL","NLD","NETHERLANDS" -"3262805928","3262805943","DE","DEU","GERMANY" -"3262805944","3262805991","NL","NLD","NETHERLANDS" -"3262805992","3262805999","DE","DEU","GERMANY" -"3262806000","3262806015","NL","NLD","NETHERLANDS" -"3262806016","3262809087","DE","DEU","GERMANY" -"3262809088","3262809111","NL","NLD","NETHERLANDS" -"3262809112","3262809135","DE","DEU","GERMANY" -"3262809136","3262809183","NL","NLD","NETHERLANDS" -"3262809184","3262809191","DE","DEU","GERMANY" -"3262809192","3262809247","NL","NLD","NETHERLANDS" -"3262809248","3262809255","DE","DEU","GERMANY" -"3262809256","3262809423","NL","NLD","NETHERLANDS" -"3262809424","3262809431","DE","DEU","GERMANY" -"3262809432","3262809503","NL","NLD","NETHERLANDS" -"3262809504","3262809511","DE","DEU","GERMANY" -"3262809512","3262809687","NL","NLD","NETHERLANDS" -"3262809688","3262809695","DE","DEU","GERMANY" -"3262809696","3262809831","NL","NLD","NETHERLANDS" -"3262809832","3262809839","DE","DEU","GERMANY" -"3262809840","3262809935","NL","NLD","NETHERLANDS" -"3262809936","3262809943","DE","DEU","GERMANY" -"3262809944","3262810143","NL","NLD","NETHERLANDS" -"3262810144","3262810151","DE","DEU","GERMANY" -"3262810152","3262810167","NL","NLD","NETHERLANDS" -"3262810168","3262810183","DE","DEU","GERMANY" -"3262810184","3262810247","NL","NLD","NETHERLANDS" -"3262810248","3262810255","DE","DEU","GERMANY" -"3262810256","3262810271","NL","NLD","NETHERLANDS" -"3262810272","3262810279","DE","DEU","GERMANY" -"3262810280","3262810471","NL","NLD","NETHERLANDS" -"3262810472","3262810479","DE","DEU","GERMANY" -"3262810480","3262810623","NL","NLD","NETHERLANDS" -"3262810624","3262810631","DE","DEU","GERMANY" -"3262810632","3262810647","NL","NLD","NETHERLANDS" -"3262810648","3262810663","DE","DEU","GERMANY" -"3262810664","3262810727","NL","NLD","NETHERLANDS" -"3262810728","3262810735","DE","DEU","GERMANY" -"3262810736","3262810807","NL","NLD","NETHERLANDS" -"3262810808","3262810815","DE","DEU","GERMANY" -"3262810816","3262810879","NL","NLD","NETHERLANDS" -"3262810880","3262810887","DE","DEU","GERMANY" -"3262810888","3262810911","NL","NLD","NETHERLANDS" -"3262810912","3262810927","DE","DEU","GERMANY" -"3262810928","3262810951","NL","NLD","NETHERLANDS" -"3262810952","3262810967","DE","DEU","GERMANY" -"3262810968","3262811023","NL","NLD","NETHERLANDS" -"3262811024","3262811031","DE","DEU","GERMANY" -"3262811032","3262811039","NL","NLD","NETHERLANDS" -"3262811040","3262811047","DE","DEU","GERMANY" -"3262811048","3262811055","NL","NLD","NETHERLANDS" -"3262811056","3262811063","DE","DEU","GERMANY" -"3262811064","3262811095","NL","NLD","NETHERLANDS" -"3262811096","3262811103","DE","DEU","GERMANY" -"3262811104","3262811175","NL","NLD","NETHERLANDS" -"3262811176","3262811183","DE","DEU","GERMANY" -"3262811184","3262811199","NL","NLD","NETHERLANDS" -"3262811200","3262811207","DE","DEU","GERMANY" -"3262811208","3262811231","NL","NLD","NETHERLANDS" -"3262811232","3262811239","DE","DEU","GERMANY" -"3262811240","3262811279","NL","NLD","NETHERLANDS" -"3262811280","3262811287","DE","DEU","GERMANY" -"3262811288","3262811295","NL","NLD","NETHERLANDS" -"3262811296","3262811303","DE","DEU","GERMANY" -"3262811304","3262811319","NL","NLD","NETHERLANDS" -"3262811320","3262811327","DE","DEU","GERMANY" -"3262811328","3262811343","NL","NLD","NETHERLANDS" -"3262811344","3262811351","DE","DEU","GERMANY" -"3262811352","3262811399","NL","NLD","NETHERLANDS" -"3262811400","3262811407","DE","DEU","GERMANY" -"3262811408","3262811503","NL","NLD","NETHERLANDS" -"3262811504","3262811511","DE","DEU","GERMANY" -"3262811512","3262811535","NL","NLD","NETHERLANDS" -"3262811536","3262811543","DE","DEU","GERMANY" -"3262811544","3262811599","NL","NLD","NETHERLANDS" -"3262811600","3262811607","DE","DEU","GERMANY" -"3262811608","3262811759","NL","NLD","NETHERLANDS" -"3262811760","3262811767","DE","DEU","GERMANY" -"3262811768","3262811855","NL","NLD","NETHERLANDS" -"3262811856","3262811863","DE","DEU","GERMANY" -"3262811864","3262811935","NL","NLD","NETHERLANDS" -"3262811936","3262811943","DE","DEU","GERMANY" -"3262811944","3262812007","NL","NLD","NETHERLANDS" -"3262812008","3262812015","DE","DEU","GERMANY" -"3262812016","3262812063","NL","NLD","NETHERLANDS" -"3262812064","3262812071","DE","DEU","GERMANY" -"3262812072","3262812087","NL","NLD","NETHERLANDS" -"3262812088","3262812095","DE","DEU","GERMANY" -"3262812096","3262812127","NL","NLD","NETHERLANDS" -"3262812128","3262812135","DE","DEU","GERMANY" -"3262812136","3262812247","NL","NLD","NETHERLANDS" -"3262812248","3262812263","DE","DEU","GERMANY" -"3262812264","3262812287","NL","NLD","NETHERLANDS" -"3262812288","3262812295","DE","DEU","GERMANY" -"3262812296","3262812487","NL","NLD","NETHERLANDS" -"3262812488","3262812495","DE","DEU","GERMANY" -"3262812496","3262812551","NL","NLD","NETHERLANDS" -"3262812552","3262812559","DE","DEU","GERMANY" -"3262812560","3262812575","NL","NLD","NETHERLANDS" -"3262812576","3262812583","DE","DEU","GERMANY" -"3262812584","3262812751","NL","NLD","NETHERLANDS" -"3262812752","3262812759","DE","DEU","GERMANY" -"3262812760","3262812775","NL","NLD","NETHERLANDS" -"3262812776","3262812783","DE","DEU","GERMANY" -"3262812784","3262812839","NL","NLD","NETHERLANDS" -"3262812840","3262812847","DE","DEU","GERMANY" -"3262812848","3262812927","NL","NLD","NETHERLANDS" -"3262812928","3262812935","DE","DEU","GERMANY" -"3262812936","3262812991","NL","NLD","NETHERLANDS" -"3262812992","3262812999","DE","DEU","GERMANY" -"3262813000","3262813047","NL","NLD","NETHERLANDS" -"3262813048","3262813055","DE","DEU","GERMANY" -"3262813056","3262813327","NL","NLD","NETHERLANDS" -"3262813328","3262813335","DE","DEU","GERMANY" -"3262813336","3262813343","NL","NLD","NETHERLANDS" -"3262813344","3262813351","DE","DEU","GERMANY" -"3262813352","3262813391","NL","NLD","NETHERLANDS" -"3262813392","3262813399","DE","DEU","GERMANY" -"3262813400","3262813415","NL","NLD","NETHERLANDS" -"3262813416","3262813423","DE","DEU","GERMANY" -"3262813424","3262813455","NL","NLD","NETHERLANDS" -"3262813456","3262813463","DE","DEU","GERMANY" -"3262813464","3262813503","NL","NLD","NETHERLANDS" -"3262813504","3262813511","DE","DEU","GERMANY" -"3262813512","3262813623","NL","NLD","NETHERLANDS" -"3262813624","3262813639","DE","DEU","GERMANY" -"3262813640","3262813735","NL","NLD","NETHERLANDS" -"3262813736","3262813743","DE","DEU","GERMANY" -"3262813744","3262813807","NL","NLD","NETHERLANDS" -"3262813808","3262813815","DE","DEU","GERMANY" -"3262813816","3262813903","NL","NLD","NETHERLANDS" -"3262813904","3262813911","DE","DEU","GERMANY" -"3262813912","3262813951","NL","NLD","NETHERLANDS" -"3262813952","3262813959","DE","DEU","GERMANY" -"3262813960","3262813983","NL","NLD","NETHERLANDS" -"3262813984","3262813991","DE","DEU","GERMANY" -"3262813992","3262814023","NL","NLD","NETHERLANDS" -"3262814024","3262814031","DE","DEU","GERMANY" -"3262814032","3262814079","NL","NLD","NETHERLANDS" -"3262814080","3262814087","DE","DEU","GERMANY" -"3262814088","3262814095","NL","NLD","NETHERLANDS" -"3262814096","3262814103","DE","DEU","GERMANY" -"3262814104","3262814383","NL","NLD","NETHERLANDS" -"3262814384","3262814399","DE","DEU","GERMANY" -"3262814400","3262814519","NL","NLD","NETHERLANDS" -"3262814520","3262814527","DE","DEU","GERMANY" -"3262814528","3262814575","NL","NLD","NETHERLANDS" -"3262814576","3262814583","DE","DEU","GERMANY" -"3262814584","3262814791","NL","NLD","NETHERLANDS" -"3262814792","3262814799","DE","DEU","GERMANY" -"3262814800","3262814847","NL","NLD","NETHERLANDS" -"3262814848","3262814855","DE","DEU","GERMANY" -"3262814856","3262814887","NL","NLD","NETHERLANDS" -"3262814888","3262814895","DE","DEU","GERMANY" -"3262814896","3262815191","NL","NLD","NETHERLANDS" -"3262815192","3262815207","DE","DEU","GERMANY" -"3262815208","3262815263","NL","NLD","NETHERLANDS" -"3262815264","3262815271","DE","DEU","GERMANY" -"3262815272","3262815303","NL","NLD","NETHERLANDS" -"3262815304","3262815311","DE","DEU","GERMANY" -"3262815312","3262815423","NL","NLD","NETHERLANDS" -"3262815424","3262815431","DE","DEU","GERMANY" -"3262815432","3262815599","NL","NLD","NETHERLANDS" -"3262815600","3262815607","DE","DEU","GERMANY" -"3262815608","3262815671","NL","NLD","NETHERLANDS" -"3262815672","3262815687","DE","DEU","GERMANY" -"3262815688","3262815719","NL","NLD","NETHERLANDS" -"3262815720","3262815727","DE","DEU","GERMANY" -"3262815728","3262815791","NL","NLD","NETHERLANDS" -"3262815792","3262815799","DE","DEU","GERMANY" -"3262815800","3262824527","NL","NLD","NETHERLANDS" -"3262824528","3262824551","DE","DEU","GERMANY" -"3262824552","3262824599","NL","NLD","NETHERLANDS" -"3262824600","3262824607","DE","DEU","GERMANY" -"3262824608","3262824687","NL","NLD","NETHERLANDS" -"3262824688","3262824695","DE","DEU","GERMANY" -"3262824696","3262824759","NL","NLD","NETHERLANDS" -"3262824760","3262824767","DE","DEU","GERMANY" -"3262824768","3262824783","NL","NLD","NETHERLANDS" -"3262824784","3262824791","DE","DEU","GERMANY" -"3262824792","3262824903","NL","NLD","NETHERLANDS" -"3262824904","3262824911","DE","DEU","GERMANY" -"3262824912","3262824919","NL","NLD","NETHERLANDS" -"3262824920","3262824927","DE","DEU","GERMANY" -"3262824928","3262824959","NL","NLD","NETHERLANDS" -"3262824960","3262824975","DE","DEU","GERMANY" -"3262824976","3262825071","NL","NLD","NETHERLANDS" -"3262825072","3262825079","DE","DEU","GERMANY" -"3262825080","3262825119","NL","NLD","NETHERLANDS" -"3262825120","3262825127","DE","DEU","GERMANY" -"3262825128","3262825135","NL","NLD","NETHERLANDS" -"3262825136","3262825143","DE","DEU","GERMANY" -"3262825144","3262825151","NL","NLD","NETHERLANDS" -"3262825152","3262825159","DE","DEU","GERMANY" -"3262825160","3262825223","NL","NLD","NETHERLANDS" -"3262825224","3262825231","DE","DEU","GERMANY" -"3262825232","3262825239","NL","NLD","NETHERLANDS" -"3262825240","3262825247","DE","DEU","GERMANY" -"3262825248","3262825327","NL","NLD","NETHERLANDS" -"3262825328","3262825335","DE","DEU","GERMANY" -"3262825336","3262825431","NL","NLD","NETHERLANDS" -"3262825432","3262825439","DE","DEU","GERMANY" -"3262825440","3262825455","NL","NLD","NETHERLANDS" -"3262825456","3262825471","DE","DEU","GERMANY" -"3262825472","3262825503","NL","NLD","NETHERLANDS" -"3262825504","3262825511","DE","DEU","GERMANY" -"3262825512","3262825519","NL","NLD","NETHERLANDS" -"3262825520","3262825527","DE","DEU","GERMANY" -"3262825528","3262825535","NL","NLD","NETHERLANDS" -"3262825536","3262825543","DE","DEU","GERMANY" -"3262825544","3262825567","NL","NLD","NETHERLANDS" -"3262825568","3262825575","DE","DEU","GERMANY" -"3262825576","3262825591","NL","NLD","NETHERLANDS" -"3262825592","3262825599","DE","DEU","GERMANY" -"3262825600","3262825639","NL","NLD","NETHERLANDS" -"3262825640","3262825647","DE","DEU","GERMANY" -"3262825648","3262825671","NL","NLD","NETHERLANDS" -"3262825672","3262825687","DE","DEU","GERMANY" -"3262825688","3262825719","NL","NLD","NETHERLANDS" -"3262825720","3262825727","DE","DEU","GERMANY" -"3262825728","3262825751","NL","NLD","NETHERLANDS" -"3262825752","3262825759","DE","DEU","GERMANY" -"3262825760","3262825783","NL","NLD","NETHERLANDS" -"3262825784","3262825791","DE","DEU","GERMANY" -"3262825792","3262825879","NL","NLD","NETHERLANDS" -"3262825880","3262825887","DE","DEU","GERMANY" -"3262825888","3262825999","NL","NLD","NETHERLANDS" -"3262826000","3262826007","DE","DEU","GERMANY" -"3262826008","3262826103","NL","NLD","NETHERLANDS" -"3262826104","3262826111","DE","DEU","GERMANY" -"3262826112","3262826119","NL","NLD","NETHERLANDS" -"3262826120","3262826127","DE","DEU","GERMANY" -"3262826128","3262826263","NL","NLD","NETHERLANDS" -"3262826264","3262826271","DE","DEU","GERMANY" -"3262826272","3262826647","NL","NLD","NETHERLANDS" -"3262826648","3262826655","DE","DEU","GERMANY" -"3262826656","3262826671","NL","NLD","NETHERLANDS" -"3262826672","3262826679","DE","DEU","GERMANY" -"3262826680","3262826727","NL","NLD","NETHERLANDS" -"3262826728","3262826735","DE","DEU","GERMANY" -"3262826736","3262826815","NL","NLD","NETHERLANDS" -"3262826816","3262826831","DE","DEU","GERMANY" -"3262826832","3262826855","NL","NLD","NETHERLANDS" -"3262826856","3262826863","DE","DEU","GERMANY" -"3262826864","3262827039","NL","NLD","NETHERLANDS" -"3262827040","3262827047","DE","DEU","GERMANY" -"3262827048","3262827143","NL","NLD","NETHERLANDS" -"3262827144","3262827151","DE","DEU","GERMANY" -"3262827152","3262827215","NL","NLD","NETHERLANDS" -"3262827216","3262827223","DE","DEU","GERMANY" -"3262827224","3262827247","NL","NLD","NETHERLANDS" -"3262827248","3262827255","DE","DEU","GERMANY" -"3262827256","3262827263","NL","NLD","NETHERLANDS" -"3262827264","3262827271","DE","DEU","GERMANY" -"3262827272","3262827287","NL","NLD","NETHERLANDS" -"3262827288","3262827295","DE","DEU","GERMANY" -"3262827296","3262827303","NL","NLD","NETHERLANDS" -"3262827304","3262827319","DE","DEU","GERMANY" -"3262827320","3262827327","NL","NLD","NETHERLANDS" -"3262827328","3262827335","DE","DEU","GERMANY" -"3262827336","3262827487","NL","NLD","NETHERLANDS" -"3262827488","3262827495","DE","DEU","GERMANY" -"3262827496","3262827671","NL","NLD","NETHERLANDS" -"3262827672","3262827679","DE","DEU","GERMANY" -"3262827680","3262827687","NL","NLD","NETHERLANDS" -"3262827688","3262827695","DE","DEU","GERMANY" -"3262827696","3262827703","NL","NLD","NETHERLANDS" -"3262827704","3262827711","DE","DEU","GERMANY" -"3262827712","3262827719","NL","NLD","NETHERLANDS" -"3262827720","3262827727","DE","DEU","GERMANY" -"3262827728","3262827799","NL","NLD","NETHERLANDS" -"3262827800","3262827807","DE","DEU","GERMANY" -"3262827808","3262827815","NL","NLD","NETHERLANDS" -"3262827816","3262827823","DE","DEU","GERMANY" -"3262827824","3262828023","NL","NLD","NETHERLANDS" -"3262828024","3262828031","DE","DEU","GERMANY" -"3262828032","3262828159","NL","NLD","NETHERLANDS" -"3262828160","3262828167","DE","DEU","GERMANY" -"3262828168","3262828247","NL","NLD","NETHERLANDS" -"3262828248","3262828255","DE","DEU","GERMANY" -"3262828256","3262828391","NL","NLD","NETHERLANDS" -"3262828392","3262828399","DE","DEU","GERMANY" -"3262828400","3262828463","NL","NLD","NETHERLANDS" -"3262828464","3262828471","DE","DEU","GERMANY" -"3262828472","3262828551","NL","NLD","NETHERLANDS" -"3262828552","3262828559","DE","DEU","GERMANY" -"3262828560","3262828591","NL","NLD","NETHERLANDS" -"3262828592","3262828599","DE","DEU","GERMANY" -"3262828600","3262828663","NL","NLD","NETHERLANDS" -"3262828664","3262828671","DE","DEU","GERMANY" -"3262828672","3262828751","NL","NLD","NETHERLANDS" -"3262828752","3262828759","DE","DEU","GERMANY" -"3262828760","3262828879","NL","NLD","NETHERLANDS" -"3262828880","3262828887","DE","DEU","GERMANY" -"3262828888","3262828951","NL","NLD","NETHERLANDS" -"3262828952","3262828959","DE","DEU","GERMANY" -"3262828960","3262829015","NL","NLD","NETHERLANDS" -"3262829016","3262829023","DE","DEU","GERMANY" -"3262829024","3262829055","NL","NLD","NETHERLANDS" -"3262829056","3262829063","DE","DEU","GERMANY" -"3262829064","3262829087","NL","NLD","NETHERLANDS" -"3262829088","3262829095","DE","DEU","GERMANY" -"3262829096","3262829167","NL","NLD","NETHERLANDS" -"3262829168","3262829183","DE","DEU","GERMANY" -"3262829184","3262829303","NL","NLD","NETHERLANDS" -"3262829304","3262829311","DE","DEU","GERMANY" -"3262829312","3262829391","NL","NLD","NETHERLANDS" -"3262829392","3262829407","DE","DEU","GERMANY" -"3262829408","3262829431","NL","NLD","NETHERLANDS" -"3262829432","3262829439","DE","DEU","GERMANY" -"3262829440","3262829495","NL","NLD","NETHERLANDS" -"3262829496","3262829503","DE","DEU","GERMANY" -"3262829504","3262829527","NL","NLD","NETHERLANDS" -"3262829528","3262829551","DE","DEU","GERMANY" -"3262829552","3262829567","NL","NLD","NETHERLANDS" -"3262829568","3262830599","DE","DEU","GERMANY" -"3262830600","3262830815","NL","NLD","NETHERLANDS" -"3262830816","3262830823","DE","DEU","GERMANY" -"3262830824","3262830839","NL","NLD","NETHERLANDS" -"3262830840","3262830847","DE","DEU","GERMANY" -"3262830848","3262830951","NL","NLD","NETHERLANDS" -"3262830952","3262830959","DE","DEU","GERMANY" -"3262830960","3262830999","NL","NLD","NETHERLANDS" -"3262831000","3262831015","DE","DEU","GERMANY" -"3262831016","3262831127","NL","NLD","NETHERLANDS" -"3262831128","3262831135","DE","DEU","GERMANY" -"3262831136","3262831295","NL","NLD","NETHERLANDS" -"3262831296","3262831303","DE","DEU","GERMANY" -"3262831304","3262831415","NL","NLD","NETHERLANDS" -"3262831416","3262831423","DE","DEU","GERMANY" -"3262831424","3262831495","NL","NLD","NETHERLANDS" -"3262831496","3262831503","DE","DEU","GERMANY" -"3262831504","3262831743","NL","NLD","NETHERLANDS" -"3262831744","3262831751","DE","DEU","GERMANY" -"3262831752","3262831791","NL","NLD","NETHERLANDS" -"3262831792","3262831799","DE","DEU","GERMANY" -"3262831800","3262831983","NL","NLD","NETHERLANDS" -"3262831984","3262831991","DE","DEU","GERMANY" -"3262831992","3262831999","NL","NLD","NETHERLANDS" -"3262832000","3262832007","DE","DEU","GERMANY" -"3262832008","3262832055","NL","NLD","NETHERLANDS" -"3262832056","3262832063","DE","DEU","GERMANY" -"3262832064","3262832087","NL","NLD","NETHERLANDS" -"3262832088","3262832095","DE","DEU","GERMANY" -"3262832096","3262832159","NL","NLD","NETHERLANDS" -"3262832160","3262832167","DE","DEU","GERMANY" -"3262832168","3262832191","NL","NLD","NETHERLANDS" -"3262832192","3262832199","DE","DEU","GERMANY" -"3262832200","3262832239","NL","NLD","NETHERLANDS" -"3262832240","3262832247","DE","DEU","GERMANY" -"3262832248","3262832271","NL","NLD","NETHERLANDS" -"3262832272","3262832279","DE","DEU","GERMANY" -"3262832280","3262832463","NL","NLD","NETHERLANDS" -"3262832464","3262832471","DE","DEU","GERMANY" -"3262832472","3262832479","NL","NLD","NETHERLANDS" -"3262832480","3262832495","DE","DEU","GERMANY" -"3262832496","3262832567","NL","NLD","NETHERLANDS" -"3262832568","3262832575","DE","DEU","GERMANY" -"3262832576","3262832639","NL","NLD","NETHERLANDS" -"3262832640","3262840319","DE","DEU","GERMANY" -"3262840320","3262840471","NL","NLD","NETHERLANDS" -"3262840472","3262840479","DE","DEU","GERMANY" -"3262840480","3262840583","NL","NLD","NETHERLANDS" -"3262840584","3262840591","DE","DEU","GERMANY" -"3262840592","3262840751","NL","NLD","NETHERLANDS" -"3262840752","3262840759","DE","DEU","GERMANY" -"3262840760","3262840791","NL","NLD","NETHERLANDS" -"3262840792","3262840807","DE","DEU","GERMANY" -"3262840808","3262840903","NL","NLD","NETHERLANDS" -"3262840904","3262840911","DE","DEU","GERMANY" -"3262840912","3262841055","NL","NLD","NETHERLANDS" -"3262841056","3262841063","DE","DEU","GERMANY" -"3262841064","3262841199","NL","NLD","NETHERLANDS" -"3262841200","3262841207","DE","DEU","GERMANY" -"3262841208","3262841255","NL","NLD","NETHERLANDS" -"3262841256","3262841263","DE","DEU","GERMANY" -"3262841264","3262841287","NL","NLD","NETHERLANDS" -"3262841288","3262841295","DE","DEU","GERMANY" -"3262841296","3262841519","NL","NLD","NETHERLANDS" -"3262841520","3262841527","DE","DEU","GERMANY" -"3262841528","3262841551","NL","NLD","NETHERLANDS" -"3262841552","3262841567","DE","DEU","GERMANY" -"3262841568","3262841743","NL","NLD","NETHERLANDS" -"3262841744","3262841751","DE","DEU","GERMANY" -"3262841752","3262841775","NL","NLD","NETHERLANDS" -"3262841776","3262841783","DE","DEU","GERMANY" -"3262841784","3262841807","NL","NLD","NETHERLANDS" -"3262841808","3262841815","DE","DEU","GERMANY" -"3262841816","3262841831","NL","NLD","NETHERLANDS" -"3262841832","3262841847","DE","DEU","GERMANY" -"3262841848","3262841863","NL","NLD","NETHERLANDS" -"3262841864","3262841871","DE","DEU","GERMANY" -"3262841872","3262841887","NL","NLD","NETHERLANDS" -"3262841888","3262841895","DE","DEU","GERMANY" -"3262841896","3262842007","NL","NLD","NETHERLANDS" -"3262842008","3262842015","DE","DEU","GERMANY" -"3262842016","3262842071","NL","NLD","NETHERLANDS" -"3262842072","3262842079","DE","DEU","GERMANY" -"3262842080","3262842183","NL","NLD","NETHERLANDS" -"3262842184","3262842207","DE","DEU","GERMANY" -"3262842208","3262842287","NL","NLD","NETHERLANDS" -"3262842288","3262842295","DE","DEU","GERMANY" -"3262842296","3262842327","NL","NLD","NETHERLANDS" -"3262842328","3262842343","DE","DEU","GERMANY" -"3262842344","3262842375","NL","NLD","NETHERLANDS" -"3262842376","3262842383","DE","DEU","GERMANY" -"3262842384","3262842423","NL","NLD","NETHERLANDS" -"3262842424","3262842431","DE","DEU","GERMANY" -"3262842432","3262842487","NL","NLD","NETHERLANDS" -"3262842488","3262842495","DE","DEU","GERMANY" -"3262842496","3262842607","NL","NLD","NETHERLANDS" -"3262842608","3262842615","DE","DEU","GERMANY" -"3262842616","3262842623","NL","NLD","NETHERLANDS" -"3262842624","3262842887","DE","DEU","GERMANY" -"3262842888","3262843055","NL","NLD","NETHERLANDS" -"3262843056","3262843063","DE","DEU","GERMANY" -"3262843064","3262843311","NL","NLD","NETHERLANDS" -"3262843312","3262843327","DE","DEU","GERMANY" -"3262843328","3262843415","NL","NLD","NETHERLANDS" -"3262843416","3262843423","DE","DEU","GERMANY" -"3262843424","3262843463","NL","NLD","NETHERLANDS" -"3262843464","3262843471","DE","DEU","GERMANY" -"3262843472","3262843583","NL","NLD","NETHERLANDS" -"3262843584","3262843591","DE","DEU","GERMANY" -"3262843592","3262843799","NL","NLD","NETHERLANDS" -"3262843800","3262843807","DE","DEU","GERMANY" -"3262843808","3262843815","NL","NLD","NETHERLANDS" -"3262843816","3262843823","DE","DEU","GERMANY" -"3262843824","3262843967","NL","NLD","NETHERLANDS" -"3262843968","3262843975","DE","DEU","GERMANY" -"3262843976","3262844055","NL","NLD","NETHERLANDS" -"3262844056","3262844071","DE","DEU","GERMANY" -"3262844072","3262844143","NL","NLD","NETHERLANDS" -"3262844144","3262844151","DE","DEU","GERMANY" -"3262844152","3262844159","NL","NLD","NETHERLANDS" -"3262844160","3262844167","DE","DEU","GERMANY" -"3262844168","3262844231","NL","NLD","NETHERLANDS" -"3262844232","3262844239","DE","DEU","GERMANY" -"3262844240","3262844247","NL","NLD","NETHERLANDS" -"3262844248","3262844255","DE","DEU","GERMANY" -"3262844256","3262844303","NL","NLD","NETHERLANDS" -"3262844304","3262844319","DE","DEU","GERMANY" -"3262844320","3262844375","NL","NLD","NETHERLANDS" -"3262844376","3262844383","DE","DEU","GERMANY" -"3262844384","3262844399","NL","NLD","NETHERLANDS" -"3262844400","3262844407","DE","DEU","GERMANY" -"3262844408","3262844511","NL","NLD","NETHERLANDS" -"3262844512","3262844519","DE","DEU","GERMANY" -"3262844520","3262844663","NL","NLD","NETHERLANDS" -"3262844664","3262844671","DE","DEU","GERMANY" -"3262844672","3262844735","NL","NLD","NETHERLANDS" -"3262844736","3262844743","DE","DEU","GERMANY" -"3262844744","3262844767","NL","NLD","NETHERLANDS" -"3262844768","3262844775","DE","DEU","GERMANY" -"3262844776","3262844855","NL","NLD","NETHERLANDS" -"3262844856","3262844871","DE","DEU","GERMANY" -"3262844872","3262844895","NL","NLD","NETHERLANDS" -"3262844896","3262844903","DE","DEU","GERMANY" -"3262844904","3262844967","NL","NLD","NETHERLANDS" -"3262844968","3262844983","DE","DEU","GERMANY" -"3262844984","3262845231","NL","NLD","NETHERLANDS" -"3262845232","3262845239","DE","DEU","GERMANY" -"3262845240","3262845247","NL","NLD","NETHERLANDS" -"3262845248","3262845255","DE","DEU","GERMANY" -"3262845256","3262845335","NL","NLD","NETHERLANDS" -"3262845336","3262845343","DE","DEU","GERMANY" -"3262845344","3262845383","NL","NLD","NETHERLANDS" -"3262845384","3262845391","DE","DEU","GERMANY" -"3262845392","3262845399","NL","NLD","NETHERLANDS" -"3262845400","3262845415","DE","DEU","GERMANY" -"3262845416","3262845655","NL","NLD","NETHERLANDS" -"3262845656","3262845671","DE","DEU","GERMANY" -"3262845672","3262845679","NL","NLD","NETHERLANDS" -"3262845680","3262845695","DE","DEU","GERMANY" -"3262845696","3262845767","NL","NLD","NETHERLANDS" -"3262845768","3262845775","DE","DEU","GERMANY" -"3262845776","3262845815","NL","NLD","NETHERLANDS" -"3262845816","3262845823","DE","DEU","GERMANY" -"3262845824","3262845919","NL","NLD","NETHERLANDS" -"3262845920","3262845927","DE","DEU","GERMANY" -"3262845928","3262845959","NL","NLD","NETHERLANDS" -"3262845960","3262845967","DE","DEU","GERMANY" -"3262845968","3262846151","NL","NLD","NETHERLANDS" -"3262846152","3262846159","DE","DEU","GERMANY" -"3262846160","3262846231","NL","NLD","NETHERLANDS" -"3262846232","3262846239","DE","DEU","GERMANY" -"3262846240","3262846255","NL","NLD","NETHERLANDS" -"3262846256","3262846263","DE","DEU","GERMANY" -"3262846264","3262846543","NL","NLD","NETHERLANDS" -"3262846544","3262846551","DE","DEU","GERMANY" -"3262846552","3262846567","NL","NLD","NETHERLANDS" -"3262846568","3262846575","DE","DEU","GERMANY" -"3262846576","3262846687","NL","NLD","NETHERLANDS" -"3262846688","3262846695","DE","DEU","GERMANY" -"3262846696","3262846759","NL","NLD","NETHERLANDS" -"3262846760","3262846767","DE","DEU","GERMANY" -"3262846768","3262846783","NL","NLD","NETHERLANDS" -"3262846784","3262846791","DE","DEU","GERMANY" -"3262846792","3262846887","NL","NLD","NETHERLANDS" -"3262846888","3262846895","DE","DEU","GERMANY" -"3262846896","3262846911","NL","NLD","NETHERLANDS" -"3262846912","3262846919","DE","DEU","GERMANY" -"3262846920","3262847039","NL","NLD","NETHERLANDS" -"3262847040","3262847047","DE","DEU","GERMANY" -"3262847048","3262847079","NL","NLD","NETHERLANDS" -"3262847080","3262847087","DE","DEU","GERMANY" -"3262847088","3262847111","NL","NLD","NETHERLANDS" -"3262847112","3262847119","DE","DEU","GERMANY" -"3262847120","3262847135","NL","NLD","NETHERLANDS" -"3262847136","3262847143","DE","DEU","GERMANY" -"3262847144","3262847151","NL","NLD","NETHERLANDS" -"3262847152","3262847159","DE","DEU","GERMANY" -"3262847160","3262847263","NL","NLD","NETHERLANDS" -"3262847264","3262847271","DE","DEU","GERMANY" -"3262847272","3262847295","NL","NLD","NETHERLANDS" -"3262847296","3262847303","DE","DEU","GERMANY" -"3262847304","3262847407","NL","NLD","NETHERLANDS" -"3262847408","3262847415","DE","DEU","GERMANY" -"3262847416","3262847647","NL","NLD","NETHERLANDS" -"3262847648","3262847663","DE","DEU","GERMANY" -"3262847664","3262847711","NL","NLD","NETHERLANDS" -"3262847712","3262847719","DE","DEU","GERMANY" -"3262847720","3262847815","NL","NLD","NETHERLANDS" -"3262847816","3262847823","DE","DEU","GERMANY" -"3262847824","3262847887","NL","NLD","NETHERLANDS" -"3262847888","3262847895","DE","DEU","GERMANY" -"3262847896","3262847935","NL","NLD","NETHERLANDS" -"3262847936","3262847943","DE","DEU","GERMANY" -"3262847944","3262848511","NL","NLD","NETHERLANDS" -"3262848512","3262848519","DE","DEU","GERMANY" -"3262848520","3262848543","NL","NLD","NETHERLANDS" -"3262848544","3262848551","DE","DEU","GERMANY" -"3262848552","3262848663","NL","NLD","NETHERLANDS" -"3262848664","3262848679","DE","DEU","GERMANY" -"3262848680","3262848695","NL","NLD","NETHERLANDS" -"3262848696","3262848703","DE","DEU","GERMANY" -"3262848704","3262848711","NL","NLD","NETHERLANDS" -"3262848712","3262848719","DE","DEU","GERMANY" -"3262848720","3262848815","NL","NLD","NETHERLANDS" -"3262848816","3262848831","DE","DEU","GERMANY" -"3262848832","3262848871","NL","NLD","NETHERLANDS" -"3262848872","3262848887","DE","DEU","GERMANY" -"3262848888","3262848911","NL","NLD","NETHERLANDS" -"3262848912","3262848919","DE","DEU","GERMANY" -"3262848920","3262848927","NL","NLD","NETHERLANDS" -"3262848928","3262848935","DE","DEU","GERMANY" -"3262848936","3262848943","NL","NLD","NETHERLANDS" -"3262848944","3262848983","DE","DEU","GERMANY" -"3262848984","3262849055","NL","NLD","NETHERLANDS" -"3262849056","3262849071","DE","DEU","GERMANY" -"3262849072","3262849103","NL","NLD","NETHERLANDS" -"3262849104","3262849111","DE","DEU","GERMANY" -"3262849112","3262849175","NL","NLD","NETHERLANDS" -"3262849176","3262849183","DE","DEU","GERMANY" -"3262849184","3262849199","NL","NLD","NETHERLANDS" -"3262849200","3262849207","DE","DEU","GERMANY" -"3262849208","3262849215","NL","NLD","NETHERLANDS" -"3262849216","3262849223","DE","DEU","GERMANY" -"3262849224","3262849303","NL","NLD","NETHERLANDS" -"3262849304","3262849311","DE","DEU","GERMANY" -"3262849312","3262849359","NL","NLD","NETHERLANDS" -"3262849360","3262849367","DE","DEU","GERMANY" -"3262849368","3262849495","NL","NLD","NETHERLANDS" -"3262849496","3262849503","DE","DEU","GERMANY" -"3262849504","3262849631","NL","NLD","NETHERLANDS" -"3262849632","3262849639","DE","DEU","GERMANY" -"3262849640","3262849767","NL","NLD","NETHERLANDS" -"3262849768","3262849775","DE","DEU","GERMANY" -"3262849776","3262849831","NL","NLD","NETHERLANDS" -"3262849832","3262849839","DE","DEU","GERMANY" -"3262849840","3262850071","NL","NLD","NETHERLANDS" -"3262850072","3262850079","DE","DEU","GERMANY" -"3262850080","3262850111","NL","NLD","NETHERLANDS" -"3262850112","3262850119","DE","DEU","GERMANY" -"3262850120","3262850191","NL","NLD","NETHERLANDS" -"3262850192","3262850199","DE","DEU","GERMANY" -"3262850200","3262850263","NL","NLD","NETHERLANDS" -"3262850264","3262850279","DE","DEU","GERMANY" -"3262850280","3262850303","NL","NLD","NETHERLANDS" -"3262850304","3262850311","DE","DEU","GERMANY" -"3262850312","3262850375","NL","NLD","NETHERLANDS" -"3262850376","3262850383","DE","DEU","GERMANY" -"3262850384","3262850399","NL","NLD","NETHERLANDS" -"3262850400","3262850407","DE","DEU","GERMANY" -"3262850408","3262850447","NL","NLD","NETHERLANDS" -"3262850448","3262850455","DE","DEU","GERMANY" -"3262850456","3262850599","NL","NLD","NETHERLANDS" -"3262850600","3262850607","DE","DEU","GERMANY" -"3262850608","3262850623","NL","NLD","NETHERLANDS" -"3262850624","3262850631","DE","DEU","GERMANY" -"3262850632","3262850647","NL","NLD","NETHERLANDS" -"3262850648","3262850663","DE","DEU","GERMANY" -"3262850664","3262850679","NL","NLD","NETHERLANDS" -"3262850680","3262850695","DE","DEU","GERMANY" -"3262850696","3262850759","NL","NLD","NETHERLANDS" -"3262850760","3262850767","DE","DEU","GERMANY" -"3262850768","3262850783","NL","NLD","NETHERLANDS" -"3262850784","3262850791","DE","DEU","GERMANY" -"3262850792","3262850823","NL","NLD","NETHERLANDS" -"3262850824","3262850831","DE","DEU","GERMANY" -"3262850832","3262850935","NL","NLD","NETHERLANDS" -"3262850936","3262850943","DE","DEU","GERMANY" -"3262850944","3262850967","NL","NLD","NETHERLANDS" -"3262850968","3262850975","DE","DEU","GERMANY" -"3262850976","3262851103","NL","NLD","NETHERLANDS" -"3262851104","3262851119","DE","DEU","GERMANY" -"3262851120","3262851135","NL","NLD","NETHERLANDS" -"3262851136","3262851143","DE","DEU","GERMANY" -"3262851144","3262851175","NL","NLD","NETHERLANDS" -"3262851176","3262851183","DE","DEU","GERMANY" -"3262851184","3262851247","NL","NLD","NETHERLANDS" -"3262851248","3262851255","DE","DEU","GERMANY" -"3262851256","3262851407","NL","NLD","NETHERLANDS" -"3262851408","3262851415","DE","DEU","GERMANY" -"3262851416","3262851455","NL","NLD","NETHERLANDS" -"3262851456","3262851471","DE","DEU","GERMANY" -"3262851472","3262851487","NL","NLD","NETHERLANDS" -"3262851488","3262851495","DE","DEU","GERMANY" -"3262851496","3262851735","NL","NLD","NETHERLANDS" -"3262851736","3262851743","DE","DEU","GERMANY" -"3262851744","3262851887","NL","NLD","NETHERLANDS" -"3262851888","3262851895","DE","DEU","GERMANY" -"3262851896","3262851935","NL","NLD","NETHERLANDS" -"3262851936","3262851943","DE","DEU","GERMANY" -"3262851944","3262852199","NL","NLD","NETHERLANDS" -"3262852200","3262852207","DE","DEU","GERMANY" -"3262852208","3262852247","NL","NLD","NETHERLANDS" -"3262852248","3262852255","DE","DEU","GERMANY" -"3262852256","3262852295","NL","NLD","NETHERLANDS" -"3262852296","3262852311","DE","DEU","GERMANY" -"3262852312","3262852351","NL","NLD","NETHERLANDS" -"3262852352","3262852615","DE","DEU","GERMANY" -"3262852616","3262852887","NL","NLD","NETHERLANDS" -"3262852888","3262852895","DE","DEU","GERMANY" -"3262852896","3262852911","NL","NLD","NETHERLANDS" -"3262852912","3262852919","DE","DEU","GERMANY" -"3262852920","3262852951","NL","NLD","NETHERLANDS" -"3262852952","3262852959","DE","DEU","GERMANY" -"3262852960","3262852975","NL","NLD","NETHERLANDS" -"3262852976","3262852983","DE","DEU","GERMANY" -"3262852984","3262853063","NL","NLD","NETHERLANDS" -"3262853064","3262853079","DE","DEU","GERMANY" -"3262853080","3262853103","NL","NLD","NETHERLANDS" -"3262853104","3262853111","DE","DEU","GERMANY" -"3262853112","3262853127","NL","NLD","NETHERLANDS" -"3262853128","3262853143","DE","DEU","GERMANY" -"3262853144","3262853343","NL","NLD","NETHERLANDS" -"3262853344","3262853351","DE","DEU","GERMANY" -"3262853352","3262853367","NL","NLD","NETHERLANDS" -"3262853368","3262853375","DE","DEU","GERMANY" -"3262853376","3262853399","NL","NLD","NETHERLANDS" -"3262853400","3262853407","DE","DEU","GERMANY" -"3262853408","3262853431","NL","NLD","NETHERLANDS" -"3262853432","3262853439","DE","DEU","GERMANY" -"3262853440","3262853447","NL","NLD","NETHERLANDS" -"3262853448","3262853455","DE","DEU","GERMANY" -"3262853456","3262853463","NL","NLD","NETHERLANDS" -"3262853464","3262853471","DE","DEU","GERMANY" -"3262853472","3262853695","NL","NLD","NETHERLANDS" -"3262853696","3262853703","DE","DEU","GERMANY" -"3262853704","3262853831","NL","NLD","NETHERLANDS" -"3262853832","3262853839","DE","DEU","GERMANY" -"3262853840","3262854119","NL","NLD","NETHERLANDS" -"3262854120","3262854127","DE","DEU","GERMANY" -"3262854128","3262854175","NL","NLD","NETHERLANDS" -"3262854176","3262854183","DE","DEU","GERMANY" -"3262854184","3262854223","NL","NLD","NETHERLANDS" -"3262854224","3262854231","DE","DEU","GERMANY" -"3262854232","3262854399","NL","NLD","NETHERLANDS" -"3262854400","3262854407","DE","DEU","GERMANY" -"3262854408","3262854463","NL","NLD","NETHERLANDS" -"3262854464","3262854471","DE","DEU","GERMANY" -"3262854472","3262854495","NL","NLD","NETHERLANDS" -"3262854496","3262854503","DE","DEU","GERMANY" -"3262854504","3262854599","NL","NLD","NETHERLANDS" -"3262854600","3262854607","DE","DEU","GERMANY" -"3262854608","3262854663","NL","NLD","NETHERLANDS" -"3262854664","3262854671","DE","DEU","GERMANY" -"3262854672","3262854735","NL","NLD","NETHERLANDS" -"3262854736","3262854743","DE","DEU","GERMANY" -"3262854744","3262854775","NL","NLD","NETHERLANDS" -"3262854776","3262854783","DE","DEU","GERMANY" -"3262854784","3262854823","NL","NLD","NETHERLANDS" -"3262854824","3262854831","DE","DEU","GERMANY" -"3262854832","3262854863","NL","NLD","NETHERLANDS" -"3262854864","3262854871","DE","DEU","GERMANY" -"3262854872","3262854943","NL","NLD","NETHERLANDS" -"3262854944","3262854967","DE","DEU","GERMANY" -"3262854968","3262855031","NL","NLD","NETHERLANDS" -"3262855032","3262855047","DE","DEU","GERMANY" -"3262855048","3262855119","NL","NLD","NETHERLANDS" -"3262855120","3262855127","DE","DEU","GERMANY" -"3262855128","3262855359","NL","NLD","NETHERLANDS" -"3262855360","3262855367","DE","DEU","GERMANY" -"3262855368","3262855439","NL","NLD","NETHERLANDS" -"3262855440","3262855447","DE","DEU","GERMANY" -"3262855448","3262855559","NL","NLD","NETHERLANDS" -"3262855560","3262855567","DE","DEU","GERMANY" -"3262855568","3262855767","NL","NLD","NETHERLANDS" -"3262855768","3262855775","DE","DEU","GERMANY" -"3262855776","3262855911","NL","NLD","NETHERLANDS" -"3262855912","3262855919","DE","DEU","GERMANY" -"3262855920","3262855935","NL","NLD","NETHERLANDS" -"3262855936","3262857215","DE","DEU","GERMANY" -"3262857216","3262857367","NL","NLD","NETHERLANDS" -"3262857368","3262857375","DE","DEU","GERMANY" -"3262857376","3262857439","NL","NLD","NETHERLANDS" -"3262857440","3262857447","DE","DEU","GERMANY" -"3262857448","3262857463","NL","NLD","NETHERLANDS" -"3262857464","3262857471","DE","DEU","GERMANY" -"3262857472","3262857703","NL","NLD","NETHERLANDS" -"3262857704","3262857711","DE","DEU","GERMANY" -"3262857712","3262857791","NL","NLD","NETHERLANDS" -"3262857792","3262857799","DE","DEU","GERMANY" -"3262857800","3262857887","NL","NLD","NETHERLANDS" -"3262857888","3262857895","DE","DEU","GERMANY" -"3262857896","3262857919","NL","NLD","NETHERLANDS" -"3262857920","3262857935","DE","DEU","GERMANY" -"3262857936","3262857975","NL","NLD","NETHERLANDS" -"3262857976","3262857983","DE","DEU","GERMANY" -"3262857984","3262858039","NL","NLD","NETHERLANDS" -"3262858040","3262858047","DE","DEU","GERMANY" -"3262858048","3262858063","NL","NLD","NETHERLANDS" -"3262858064","3262858071","DE","DEU","GERMANY" -"3262858072","3262858175","NL","NLD","NETHERLANDS" -"3262858176","3262858183","DE","DEU","GERMANY" -"3262858184","3262858335","NL","NLD","NETHERLANDS" -"3262858336","3262858343","DE","DEU","GERMANY" -"3262858344","3262858431","NL","NLD","NETHERLANDS" -"3262858432","3262858439","DE","DEU","GERMANY" -"3262858440","3262858447","NL","NLD","NETHERLANDS" -"3262858448","3262858455","DE","DEU","GERMANY" -"3262858456","3262858647","NL","NLD","NETHERLANDS" -"3262858648","3262858655","DE","DEU","GERMANY" -"3262858656","3262858751","NL","NLD","NETHERLANDS" -"3262858752","3262858759","DE","DEU","GERMANY" -"3262858760","3262858791","NL","NLD","NETHERLANDS" -"3262858792","3262858799","DE","DEU","GERMANY" -"3262858800","3262858823","NL","NLD","NETHERLANDS" -"3262858824","3262858839","DE","DEU","GERMANY" -"3262858840","3262858847","NL","NLD","NETHERLANDS" -"3262858848","3262858863","DE","DEU","GERMANY" -"3262858864","3262858975","NL","NLD","NETHERLANDS" -"3262858976","3262858983","DE","DEU","GERMANY" -"3262858984","3262859071","NL","NLD","NETHERLANDS" -"3262859072","3262859079","DE","DEU","GERMANY" -"3262859080","3262859263","NL","NLD","NETHERLANDS" -"3262859264","3262859271","DE","DEU","GERMANY" -"3262859272","3262859367","NL","NLD","NETHERLANDS" -"3262859368","3262859375","DE","DEU","GERMANY" -"3262859376","3262859399","NL","NLD","NETHERLANDS" -"3262859400","3262859407","DE","DEU","GERMANY" -"3262859408","3262859431","NL","NLD","NETHERLANDS" -"3262859432","3262859439","DE","DEU","GERMANY" -"3262859440","3262859487","NL","NLD","NETHERLANDS" -"3262859488","3262859495","DE","DEU","GERMANY" -"3262859496","3262859583","NL","NLD","NETHERLANDS" -"3262859584","3262859591","DE","DEU","GERMANY" -"3262859592","3262859663","NL","NLD","NETHERLANDS" -"3262859664","3262859679","DE","DEU","GERMANY" -"3262859680","3262859703","NL","NLD","NETHERLANDS" -"3262859704","3262859711","DE","DEU","GERMANY" -"3262859712","3262859727","NL","NLD","NETHERLANDS" -"3262859728","3262859735","DE","DEU","GERMANY" -"3262859736","3262859743","NL","NLD","NETHERLANDS" -"3262859744","3262859751","DE","DEU","GERMANY" -"3262859752","3262859759","NL","NLD","NETHERLANDS" -"3262859760","3262859775","DE","DEU","GERMANY" -"3262859776","3262859823","NL","NLD","NETHERLANDS" -"3262859824","3262859831","DE","DEU","GERMANY" -"3262859832","3262859863","NL","NLD","NETHERLANDS" -"3262859864","3262859871","DE","DEU","GERMANY" -"3262859872","3262859983","NL","NLD","NETHERLANDS" -"3262859984","3262859991","DE","DEU","GERMANY" -"3262859992","3262860127","NL","NLD","NETHERLANDS" -"3262860128","3262860135","DE","DEU","GERMANY" -"3262860136","3262860175","NL","NLD","NETHERLANDS" -"3262860176","3262860183","DE","DEU","GERMANY" -"3262860184","3262860191","NL","NLD","NETHERLANDS" -"3262860192","3262860207","DE","DEU","GERMANY" -"3262860208","3262860263","NL","NLD","NETHERLANDS" -"3262860264","3262860271","DE","DEU","GERMANY" -"3262860272","3262860319","NL","NLD","NETHERLANDS" -"3262860320","3262860327","DE","DEU","GERMANY" -"3262860328","3262860367","NL","NLD","NETHERLANDS" -"3262860368","3262860375","DE","DEU","GERMANY" -"3262860376","3262860399","NL","NLD","NETHERLANDS" -"3262860400","3262860407","DE","DEU","GERMANY" -"3262860408","3262860431","NL","NLD","NETHERLANDS" -"3262860432","3262860439","DE","DEU","GERMANY" -"3262860440","3262860455","NL","NLD","NETHERLANDS" -"3262860456","3262860463","DE","DEU","GERMANY" -"3262860464","3262860583","NL","NLD","NETHERLANDS" -"3262860584","3262860591","DE","DEU","GERMANY" -"3262860592","3262860647","NL","NLD","NETHERLANDS" -"3262860648","3262860663","DE","DEU","GERMANY" -"3262860664","3262860751","NL","NLD","NETHERLANDS" -"3262860752","3262860759","DE","DEU","GERMANY" -"3262860760","3262860807","NL","NLD","NETHERLANDS" -"3262860808","3262860815","DE","DEU","GERMANY" -"3262860816","3262860863","NL","NLD","NETHERLANDS" -"3262860864","3262860871","DE","DEU","GERMANY" -"3262860872","3262860927","NL","NLD","NETHERLANDS" -"3262860928","3262860935","DE","DEU","GERMANY" -"3262860936","3262861063","NL","NLD","NETHERLANDS" -"3262861064","3262861071","DE","DEU","GERMANY" -"3262861072","3262861095","NL","NLD","NETHERLANDS" -"3262861096","3262861103","DE","DEU","GERMANY" -"3262861104","3262861135","NL","NLD","NETHERLANDS" -"3262861136","3262861143","DE","DEU","GERMANY" -"3262861144","3262861231","NL","NLD","NETHERLANDS" -"3262861232","3262861239","DE","DEU","GERMANY" -"3262861240","3262861279","NL","NLD","NETHERLANDS" -"3262861280","3262861287","DE","DEU","GERMANY" -"3262861288","3262861399","NL","NLD","NETHERLANDS" -"3262861400","3262861407","DE","DEU","GERMANY" -"3262861408","3262861487","NL","NLD","NETHERLANDS" -"3262861488","3262861503","DE","DEU","GERMANY" -"3262861504","3262861543","NL","NLD","NETHERLANDS" -"3262861544","3262861551","DE","DEU","GERMANY" -"3262861552","3262861607","NL","NLD","NETHERLANDS" -"3262861608","3262861615","DE","DEU","GERMANY" -"3262861616","3262861623","NL","NLD","NETHERLANDS" -"3262861624","3262861631","DE","DEU","GERMANY" -"3262861632","3262861735","NL","NLD","NETHERLANDS" -"3262861736","3262861743","DE","DEU","GERMANY" -"3262861744","3262861759","NL","NLD","NETHERLANDS" -"3262861760","3262861767","DE","DEU","GERMANY" -"3262861768","3262861999","NL","NLD","NETHERLANDS" -"3262862000","3262862007","DE","DEU","GERMANY" -"3262862008","3262862015","NL","NLD","NETHERLANDS" -"3262862016","3262862023","DE","DEU","GERMANY" -"3262862024","3262862103","NL","NLD","NETHERLANDS" -"3262862104","3262862111","DE","DEU","GERMANY" -"3262862112","3262862191","NL","NLD","NETHERLANDS" -"3262862192","3262862207","DE","DEU","GERMANY" -"3262862208","3262862247","NL","NLD","NETHERLANDS" -"3262862248","3262862255","DE","DEU","GERMANY" -"3262862256","3262862615","NL","NLD","NETHERLANDS" -"3262862616","3262862623","DE","DEU","GERMANY" -"3262862624","3262862767","NL","NLD","NETHERLANDS" -"3262862768","3262862775","DE","DEU","GERMANY" -"3262862776","3262862823","NL","NLD","NETHERLANDS" -"3262862824","3262862831","DE","DEU","GERMANY" -"3262862832","3262862855","NL","NLD","NETHERLANDS" -"3262862856","3262862863","DE","DEU","GERMANY" -"3262862864","3262862927","NL","NLD","NETHERLANDS" -"3262862928","3262862935","DE","DEU","GERMANY" -"3262862936","3262862967","NL","NLD","NETHERLANDS" -"3262862968","3262862975","DE","DEU","GERMANY" -"3262862976","3262863079","NL","NLD","NETHERLANDS" -"3262863080","3262863087","DE","DEU","GERMANY" -"3262863088","3262863143","NL","NLD","NETHERLANDS" -"3262863144","3262863151","DE","DEU","GERMANY" -"3262863152","3262863191","NL","NLD","NETHERLANDS" -"3262863192","3262863199","DE","DEU","GERMANY" -"3262863200","3262863271","NL","NLD","NETHERLANDS" -"3262863272","3262863279","DE","DEU","GERMANY" -"3262863280","3262863383","NL","NLD","NETHERLANDS" -"3262863384","3262863391","DE","DEU","GERMANY" -"3262863392","3262863463","NL","NLD","NETHERLANDS" -"3262863464","3262863479","DE","DEU","GERMANY" -"3262863480","3262863527","NL","NLD","NETHERLANDS" -"3262863528","3262863535","DE","DEU","GERMANY" -"3262863536","3262863631","NL","NLD","NETHERLANDS" -"3262863632","3262863639","DE","DEU","GERMANY" -"3262863640","3262863751","NL","NLD","NETHERLANDS" -"3262863752","3262863775","DE","DEU","GERMANY" -"3262863776","3262863807","NL","NLD","NETHERLANDS" -"3262863808","3262863815","DE","DEU","GERMANY" -"3262863816","3262863871","NL","NLD","NETHERLANDS" -"3262863872","3262863879","DE","DEU","GERMANY" -"3262863880","3262864063","NL","NLD","NETHERLANDS" -"3262864064","3262864071","DE","DEU","GERMANY" -"3262864072","3262864239","NL","NLD","NETHERLANDS" -"3262864240","3262864247","DE","DEU","GERMANY" -"3262864248","3262864279","NL","NLD","NETHERLANDS" -"3262864280","3262864287","DE","DEU","GERMANY" -"3262864288","3262864423","NL","NLD","NETHERLANDS" -"3262864424","3262864431","DE","DEU","GERMANY" -"3262864432","3262864439","NL","NLD","NETHERLANDS" -"3262864440","3262864447","DE","DEU","GERMANY" -"3262864448","3262864495","NL","NLD","NETHERLANDS" -"3262864496","3262864503","DE","DEU","GERMANY" -"3262864504","3262864519","NL","NLD","NETHERLANDS" -"3262864520","3262864527","DE","DEU","GERMANY" -"3262864528","3262864583","NL","NLD","NETHERLANDS" -"3262864584","3262864591","DE","DEU","GERMANY" -"3262864592","3262864743","NL","NLD","NETHERLANDS" -"3262864744","3262864751","DE","DEU","GERMANY" -"3262864752","3262864759","NL","NLD","NETHERLANDS" -"3262864760","3262864767","DE","DEU","GERMANY" -"3262864768","3262864863","NL","NLD","NETHERLANDS" -"3262864864","3262864871","DE","DEU","GERMANY" -"3262864872","3262864943","NL","NLD","NETHERLANDS" -"3262864944","3262864951","DE","DEU","GERMANY" -"3262864952","3262865223","NL","NLD","NETHERLANDS" -"3262865224","3262865231","DE","DEU","GERMANY" -"3262865232","3262865303","NL","NLD","NETHERLANDS" -"3262865304","3262865311","DE","DEU","GERMANY" -"3262865312","3262865479","NL","NLD","NETHERLANDS" -"3262865480","3262865487","DE","DEU","GERMANY" -"3262865488","3262865511","NL","NLD","NETHERLANDS" -"3262865512","3262865519","DE","DEU","GERMANY" -"3262865520","3262865527","NL","NLD","NETHERLANDS" -"3262865528","3262865535","DE","DEU","GERMANY" -"3262865536","3262865543","NL","NLD","NETHERLANDS" -"3262865544","3262865551","DE","DEU","GERMANY" -"3262865552","3262865575","NL","NLD","NETHERLANDS" -"3262865576","3262865583","DE","DEU","GERMANY" -"3262865584","3262865615","NL","NLD","NETHERLANDS" -"3262865616","3262865623","DE","DEU","GERMANY" -"3262865624","3262865631","NL","NLD","NETHERLANDS" -"3262865632","3262865639","DE","DEU","GERMANY" -"3262865640","3262865655","NL","NLD","NETHERLANDS" -"3262865656","3262865663","DE","DEU","GERMANY" -"3262865664","3262865783","NL","NLD","NETHERLANDS" -"3262865784","3262865791","DE","DEU","GERMANY" -"3262865792","3262865823","NL","NLD","NETHERLANDS" -"3262865824","3262865831","DE","DEU","GERMANY" -"3262865832","3262865975","NL","NLD","NETHERLANDS" -"3262865976","3262865983","DE","DEU","GERMANY" -"3262865984","3262866151","NL","NLD","NETHERLANDS" -"3262866152","3262866159","DE","DEU","GERMANY" -"3262866160","3262866183","NL","NLD","NETHERLANDS" -"3262866184","3262866199","DE","DEU","GERMANY" -"3262866200","3262866271","NL","NLD","NETHERLANDS" -"3262866272","3262866279","DE","DEU","GERMANY" -"3262866280","3262866295","NL","NLD","NETHERLANDS" -"3262866296","3262866303","DE","DEU","GERMANY" -"3262866304","3262866375","NL","NLD","NETHERLANDS" -"3262866376","3262866383","DE","DEU","GERMANY" -"3262866384","3262866447","NL","NLD","NETHERLANDS" -"3262866448","3262866471","DE","DEU","GERMANY" -"3262866472","3262866495","NL","NLD","NETHERLANDS" -"3262866496","3262866503","DE","DEU","GERMANY" -"3262866504","3262866543","NL","NLD","NETHERLANDS" -"3262866544","3262866551","DE","DEU","GERMANY" -"3262866552","3262866599","NL","NLD","NETHERLANDS" -"3262866600","3262866607","DE","DEU","GERMANY" -"3262866608","3262866655","NL","NLD","NETHERLANDS" -"3262866656","3262866671","DE","DEU","GERMANY" -"3262866672","3262866823","NL","NLD","NETHERLANDS" -"3262866824","3262866831","DE","DEU","GERMANY" -"3262866832","3262866935","NL","NLD","NETHERLANDS" -"3262866936","3262866943","DE","DEU","GERMANY" -"3262866944","3262867191","NL","NLD","NETHERLANDS" -"3262867192","3262867199","DE","DEU","GERMANY" -"3262867200","3262867271","NL","NLD","NETHERLANDS" -"3262867272","3262867279","DE","DEU","GERMANY" -"3262867280","3262867383","NL","NLD","NETHERLANDS" -"3262867384","3262867391","DE","DEU","GERMANY" -"3262867392","3262867407","NL","NLD","NETHERLANDS" -"3262867408","3262867415","DE","DEU","GERMANY" -"3262867416","3262867479","NL","NLD","NETHERLANDS" -"3262867480","3262867487","DE","DEU","GERMANY" -"3262867488","3262867703","NL","NLD","NETHERLANDS" -"3262867704","3262867711","DE","DEU","GERMANY" -"3262867712","3262867815","NL","NLD","NETHERLANDS" -"3262867816","3262867823","DE","DEU","GERMANY" -"3262867824","3262867863","NL","NLD","NETHERLANDS" -"3262867864","3262867871","DE","DEU","GERMANY" -"3262867872","3262867895","NL","NLD","NETHERLANDS" -"3262867896","3262867903","DE","DEU","GERMANY" -"3262867904","3262868063","NL","NLD","NETHERLANDS" -"3262868064","3262868071","DE","DEU","GERMANY" -"3262868072","3262868095","NL","NLD","NETHERLANDS" -"3262868096","3262868111","DE","DEU","GERMANY" -"3262868112","3262868119","NL","NLD","NETHERLANDS" -"3262868120","3262868127","DE","DEU","GERMANY" -"3262868128","3262868327","NL","NLD","NETHERLANDS" -"3262868328","3262868335","DE","DEU","GERMANY" -"3262868336","3262868343","NL","NLD","NETHERLANDS" -"3262868344","3262868359","DE","DEU","GERMANY" -"3262868360","3262868383","NL","NLD","NETHERLANDS" -"3262868384","3262868399","DE","DEU","GERMANY" -"3262868400","3262868407","NL","NLD","NETHERLANDS" -"3262868408","3262868415","DE","DEU","GERMANY" -"3262868416","3262868423","NL","NLD","NETHERLANDS" -"3262868424","3262868431","DE","DEU","GERMANY" -"3262868432","3262868487","NL","NLD","NETHERLANDS" -"3262868488","3262868495","DE","DEU","GERMANY" -"3262868496","3262868559","NL","NLD","NETHERLANDS" -"3262868560","3262868567","DE","DEU","GERMANY" -"3262868568","3262868607","NL","NLD","NETHERLANDS" -"3262868608","3262868615","DE","DEU","GERMANY" -"3262868616","3262868695","NL","NLD","NETHERLANDS" -"3262868696","3262868703","DE","DEU","GERMANY" -"3262868704","3262868743","NL","NLD","NETHERLANDS" -"3262868744","3262868751","DE","DEU","GERMANY" -"3262868752","3262868903","NL","NLD","NETHERLANDS" -"3262868904","3262868911","DE","DEU","GERMANY" -"3262868912","3262868927","NL","NLD","NETHERLANDS" -"3262868928","3262868935","DE","DEU","GERMANY" -"3262868936","3262868943","NL","NLD","NETHERLANDS" -"3262868944","3262868951","DE","DEU","GERMANY" -"3262868952","3262869023","NL","NLD","NETHERLANDS" -"3262869024","3262869031","DE","DEU","GERMANY" -"3262869032","3262869047","NL","NLD","NETHERLANDS" -"3262869048","3262869055","DE","DEU","GERMANY" -"3262869056","3262869143","NL","NLD","NETHERLANDS" -"3262869144","3262869151","DE","DEU","GERMANY" -"3262869152","3262869199","NL","NLD","NETHERLANDS" -"3262869200","3262869207","DE","DEU","GERMANY" -"3262869208","3262869367","NL","NLD","NETHERLANDS" -"3262869368","3262869375","DE","DEU","GERMANY" -"3262869376","3262869439","NL","NLD","NETHERLANDS" -"3262869440","3262869447","DE","DEU","GERMANY" -"3262869448","3262869575","NL","NLD","NETHERLANDS" -"3262869576","3262869583","DE","DEU","GERMANY" -"3262869584","3262869599","NL","NLD","NETHERLANDS" -"3262869600","3262869607","DE","DEU","GERMANY" -"3262869608","3262869639","NL","NLD","NETHERLANDS" -"3262869640","3262869647","DE","DEU","GERMANY" -"3262869648","3262869663","NL","NLD","NETHERLANDS" -"3262869664","3262869671","DE","DEU","GERMANY" -"3262869672","3262869687","NL","NLD","NETHERLANDS" -"3262869688","3262869695","DE","DEU","GERMANY" -"3262869696","3262869751","NL","NLD","NETHERLANDS" -"3262869752","3262869759","DE","DEU","GERMANY" -"3262869760","3262869831","NL","NLD","NETHERLANDS" -"3262869832","3262869839","DE","DEU","GERMANY" -"3262869840","3262870063","NL","NLD","NETHERLANDS" -"3262870064","3262870071","DE","DEU","GERMANY" -"3262870072","3262870095","NL","NLD","NETHERLANDS" -"3262870096","3262870103","DE","DEU","GERMANY" -"3262870104","3262870119","NL","NLD","NETHERLANDS" -"3262870120","3262870127","DE","DEU","GERMANY" -"3262870128","3262870287","NL","NLD","NETHERLANDS" -"3262870288","3262870295","DE","DEU","GERMANY" -"3262870296","3262870343","NL","NLD","NETHERLANDS" -"3262870344","3262870351","DE","DEU","GERMANY" -"3262870352","3262870479","NL","NLD","NETHERLANDS" -"3262870480","3262870487","DE","DEU","GERMANY" -"3262870488","3262870527","NL","NLD","NETHERLANDS" -"3262870528","3262870535","DE","DEU","GERMANY" -"3262870536","3262870567","NL","NLD","NETHERLANDS" -"3262870568","3262870575","DE","DEU","GERMANY" -"3262870576","3262870751","NL","NLD","NETHERLANDS" -"3262870752","3262870759","DE","DEU","GERMANY" -"3262870760","3262870863","NL","NLD","NETHERLANDS" -"3262870864","3262870879","DE","DEU","GERMANY" -"3262870880","3262870999","NL","NLD","NETHERLANDS" -"3262871000","3262871007","DE","DEU","GERMANY" -"3262871008","3262871119","NL","NLD","NETHERLANDS" -"3262871120","3262871127","DE","DEU","GERMANY" -"3262871128","3262871223","NL","NLD","NETHERLANDS" -"3262871224","3262871231","DE","DEU","GERMANY" -"3262871232","3262871255","NL","NLD","NETHERLANDS" -"3262871256","3262871263","DE","DEU","GERMANY" -"3262871264","3262871335","NL","NLD","NETHERLANDS" -"3262871336","3262871343","DE","DEU","GERMANY" -"3262871344","3262871359","NL","NLD","NETHERLANDS" -"3262871360","3262871367","DE","DEU","GERMANY" -"3262871368","3262871551","NL","NLD","NETHERLANDS" -"3262871552","3262872319","DE","DEU","GERMANY" -"3262872320","3262872399","NL","NLD","NETHERLANDS" -"3262872400","3262872407","DE","DEU","GERMANY" -"3262872408","3262872423","NL","NLD","NETHERLANDS" -"3262872424","3262872431","DE","DEU","GERMANY" -"3262872432","3262872503","NL","NLD","NETHERLANDS" -"3262872504","3262872511","DE","DEU","GERMANY" -"3262872512","3262872519","NL","NLD","NETHERLANDS" -"3262872520","3262872527","DE","DEU","GERMANY" -"3262872528","3262872663","NL","NLD","NETHERLANDS" -"3262872664","3262872671","DE","DEU","GERMANY" -"3262872672","3262872751","NL","NLD","NETHERLANDS" -"3262872752","3262872759","DE","DEU","GERMANY" -"3262872760","3262872903","NL","NLD","NETHERLANDS" -"3262872904","3262872911","DE","DEU","GERMANY" -"3262872912","3262872951","NL","NLD","NETHERLANDS" -"3262872952","3262872959","DE","DEU","GERMANY" -"3262872960","3262872975","NL","NLD","NETHERLANDS" -"3262872976","3262872983","DE","DEU","GERMANY" -"3262872984","3262873023","NL","NLD","NETHERLANDS" -"3262873024","3262873031","DE","DEU","GERMANY" -"3262873032","3262873287","NL","NLD","NETHERLANDS" -"3262873288","3262873295","DE","DEU","GERMANY" -"3262873296","3262873303","NL","NLD","NETHERLANDS" -"3262873304","3262873311","DE","DEU","GERMANY" -"3262873312","3262873351","NL","NLD","NETHERLANDS" -"3262873352","3262873359","DE","DEU","GERMANY" -"3262873360","3262873407","NL","NLD","NETHERLANDS" -"3262873408","3262873423","DE","DEU","GERMANY" -"3262873424","3262873703","NL","NLD","NETHERLANDS" -"3262873704","3262873711","DE","DEU","GERMANY" -"3262873712","3262873759","NL","NLD","NETHERLANDS" -"3262873760","3262873775","DE","DEU","GERMANY" -"3262873776","3262873823","NL","NLD","NETHERLANDS" -"3262873824","3262873831","DE","DEU","GERMANY" -"3262873832","3262873871","NL","NLD","NETHERLANDS" -"3262873872","3262873879","DE","DEU","GERMANY" -"3262873880","3262874087","NL","NLD","NETHERLANDS" -"3262874088","3262874095","DE","DEU","GERMANY" -"3262874096","3262874103","NL","NLD","NETHERLANDS" -"3262874104","3262874111","DE","DEU","GERMANY" -"3262874112","3262874399","NL","NLD","NETHERLANDS" -"3262874400","3262874407","DE","DEU","GERMANY" -"3262874408","3262874575","NL","NLD","NETHERLANDS" -"3262874576","3262874583","DE","DEU","GERMANY" -"3262874584","3262874591","NL","NLD","NETHERLANDS" -"3262874592","3262874599","DE","DEU","GERMANY" -"3262874600","3262874639","NL","NLD","NETHERLANDS" -"3262874640","3262874647","DE","DEU","GERMANY" -"3262874648","3262874719","NL","NLD","NETHERLANDS" -"3262874720","3262874727","DE","DEU","GERMANY" -"3262874728","3262874783","NL","NLD","NETHERLANDS" -"3262874784","3262874791","DE","DEU","GERMANY" -"3262874792","3262874871","NL","NLD","NETHERLANDS" -"3262874872","3262874879","DE","DEU","GERMANY" -"3262874880","3262874903","NL","NLD","NETHERLANDS" -"3262874904","3262874911","DE","DEU","GERMANY" -"3262874912","3262874999","NL","NLD","NETHERLANDS" -"3262875000","3262875015","DE","DEU","GERMANY" -"3262875016","3262875031","NL","NLD","NETHERLANDS" -"3262875032","3262875039","DE","DEU","GERMANY" -"3262875040","3262875079","NL","NLD","NETHERLANDS" -"3262875080","3262875087","DE","DEU","GERMANY" -"3262875088","3262875199","NL","NLD","NETHERLANDS" -"3262875200","3262875207","DE","DEU","GERMANY" -"3262875208","3262875335","NL","NLD","NETHERLANDS" -"3262875336","3262875343","DE","DEU","GERMANY" -"3262875344","3262875415","NL","NLD","NETHERLANDS" -"3262875416","3262875423","DE","DEU","GERMANY" -"3262875424","3262875431","NL","NLD","NETHERLANDS" -"3262875432","3262875439","DE","DEU","GERMANY" -"3262875440","3262875511","NL","NLD","NETHERLANDS" -"3262875512","3262875519","DE","DEU","GERMANY" -"3262875520","3262875623","NL","NLD","NETHERLANDS" -"3262875624","3262875631","DE","DEU","GERMANY" -"3262875632","3262875791","NL","NLD","NETHERLANDS" -"3262875792","3262875807","DE","DEU","GERMANY" -"3262875808","3262875967","NL","NLD","NETHERLANDS" -"3262875968","3262875975","DE","DEU","GERMANY" -"3262875976","3262876079","NL","NLD","NETHERLANDS" -"3262876080","3262876087","DE","DEU","GERMANY" -"3262876088","3262876095","NL","NLD","NETHERLANDS" -"3262876096","3262876103","DE","DEU","GERMANY" -"3262876104","3262876271","NL","NLD","NETHERLANDS" -"3262876272","3262876279","DE","DEU","GERMANY" -"3262876280","3262876375","NL","NLD","NETHERLANDS" -"3262876376","3262876383","DE","DEU","GERMANY" -"3262876384","3262876423","NL","NLD","NETHERLANDS" -"3262876424","3262876431","DE","DEU","GERMANY" -"3262876432","3262876655","NL","NLD","NETHERLANDS" -"3262876656","3262876663","DE","DEU","GERMANY" -"3262876664","3262876807","NL","NLD","NETHERLANDS" -"3262876808","3262876815","DE","DEU","GERMANY" -"3262876816","3262876847","NL","NLD","NETHERLANDS" -"3262876848","3262876855","DE","DEU","GERMANY" -"3262876856","3262876911","NL","NLD","NETHERLANDS" -"3262876912","3262876919","DE","DEU","GERMANY" -"3262876920","3262876927","NL","NLD","NETHERLANDS" -"3262876928","3262877951","DE","DEU","GERMANY" -"3262877952","3262878015","NL","NLD","NETHERLANDS" -"3262878016","3262878023","DE","DEU","GERMANY" -"3262878024","3262878087","NL","NLD","NETHERLANDS" -"3262878088","3262878095","DE","DEU","GERMANY" -"3262878096","3262878255","NL","NLD","NETHERLANDS" -"3262878256","3262878263","DE","DEU","GERMANY" -"3262878264","3262878271","NL","NLD","NETHERLANDS" -"3262878272","3262878279","DE","DEU","GERMANY" -"3262878280","3262878295","NL","NLD","NETHERLANDS" -"3262878296","3262878303","DE","DEU","GERMANY" -"3262878304","3262878375","NL","NLD","NETHERLANDS" -"3262878376","3262878383","DE","DEU","GERMANY" -"3262878384","3262878415","NL","NLD","NETHERLANDS" -"3262878416","3262878423","DE","DEU","GERMANY" -"3262878424","3262878455","NL","NLD","NETHERLANDS" -"3262878456","3262878463","DE","DEU","GERMANY" -"3262878464","3262878767","NL","NLD","NETHERLANDS" -"3262878768","3262878775","DE","DEU","GERMANY" -"3262878776","3262879143","NL","NLD","NETHERLANDS" -"3262879144","3262879151","DE","DEU","GERMANY" -"3262879152","3262879167","NL","NLD","NETHERLANDS" -"3262879168","3262879175","DE","DEU","GERMANY" -"3262879176","3262879231","NL","NLD","NETHERLANDS" -"3262879232","3262879239","DE","DEU","GERMANY" -"3262879240","3262879271","NL","NLD","NETHERLANDS" -"3262879272","3262879279","DE","DEU","GERMANY" -"3262879280","3262879535","NL","NLD","NETHERLANDS" -"3262879536","3262879543","DE","DEU","GERMANY" -"3262879544","3262879567","NL","NLD","NETHERLANDS" -"3262879568","3262879575","DE","DEU","GERMANY" -"3262879576","3262879631","NL","NLD","NETHERLANDS" -"3262879632","3262879639","DE","DEU","GERMANY" -"3262879640","3262879807","NL","NLD","NETHERLANDS" -"3262879808","3262879815","DE","DEU","GERMANY" -"3262879816","3262879855","NL","NLD","NETHERLANDS" -"3262879856","3262879863","DE","DEU","GERMANY" -"3262879864","3262879927","NL","NLD","NETHERLANDS" -"3262879928","3262879935","DE","DEU","GERMANY" -"3262879936","3262879967","NL","NLD","NETHERLANDS" -"3262879968","3262879983","DE","DEU","GERMANY" -"3262879984","3262880055","NL","NLD","NETHERLANDS" -"3262880056","3262880063","DE","DEU","GERMANY" -"3262880064","3262880239","NL","NLD","NETHERLANDS" -"3262880240","3262880247","DE","DEU","GERMANY" -"3262880248","3262880255","NL","NLD","NETHERLANDS" -"3262880256","3262880263","DE","DEU","GERMANY" -"3262880264","3262880399","NL","NLD","NETHERLANDS" -"3262880400","3262880407","DE","DEU","GERMANY" -"3262880408","3262880431","NL","NLD","NETHERLANDS" -"3262880432","3262880439","DE","DEU","GERMANY" -"3262880440","3262880655","NL","NLD","NETHERLANDS" -"3262880656","3262880663","DE","DEU","GERMANY" -"3262880664","3262880679","NL","NLD","NETHERLANDS" -"3262880680","3262880687","DE","DEU","GERMANY" -"3262880688","3262880743","NL","NLD","NETHERLANDS" -"3262880744","3262880751","DE","DEU","GERMANY" -"3262880752","3262880759","NL","NLD","NETHERLANDS" -"3262880760","3262880767","DE","DEU","GERMANY" -"3262880768","3262880815","NL","NLD","NETHERLANDS" -"3262880816","3262880823","DE","DEU","GERMANY" -"3262880824","3262880863","NL","NLD","NETHERLANDS" -"3262880864","3262880871","DE","DEU","GERMANY" -"3262880872","3262880895","NL","NLD","NETHERLANDS" -"3262880896","3262880903","DE","DEU","GERMANY" -"3262880904","3262880911","NL","NLD","NETHERLANDS" -"3262880912","3262880919","DE","DEU","GERMANY" -"3262880920","3262880967","NL","NLD","NETHERLANDS" -"3262880968","3262880975","DE","DEU","GERMANY" -"3262880976","3262881103","NL","NLD","NETHERLANDS" -"3262881104","3262881111","DE","DEU","GERMANY" -"3262881112","3262881127","NL","NLD","NETHERLANDS" -"3262881128","3262881143","DE","DEU","GERMANY" -"3262881144","3262881423","NL","NLD","NETHERLANDS" -"3262881424","3262881431","DE","DEU","GERMANY" -"3262881432","3262881527","NL","NLD","NETHERLANDS" -"3262881528","3262881535","DE","DEU","GERMANY" -"3262881536","3262881567","NL","NLD","NETHERLANDS" -"3262881568","3262881575","DE","DEU","GERMANY" -"3262881576","3262881599","NL","NLD","NETHERLANDS" -"3262881600","3262881607","DE","DEU","GERMANY" -"3262881608","3262881839","NL","NLD","NETHERLANDS" -"3262881840","3262881847","DE","DEU","GERMANY" -"3262881848","3262881855","NL","NLD","NETHERLANDS" -"3262881856","3262881871","DE","DEU","GERMANY" -"3262881872","3262881927","NL","NLD","NETHERLANDS" -"3262881928","3262881935","DE","DEU","GERMANY" -"3262881936","3262881975","NL","NLD","NETHERLANDS" -"3262881976","3262881983","DE","DEU","GERMANY" -"3262881984","3262881999","NL","NLD","NETHERLANDS" -"3262882000","3262882015","DE","DEU","GERMANY" -"3262882016","3262882039","NL","NLD","NETHERLANDS" -"3262882040","3262882047","DE","DEU","GERMANY" -"3262882048","3262882119","NL","NLD","NETHERLANDS" -"3262882120","3262882127","DE","DEU","GERMANY" -"3262882128","3262882215","NL","NLD","NETHERLANDS" -"3262882216","3262882223","DE","DEU","GERMANY" -"3262882224","3262882527","NL","NLD","NETHERLANDS" -"3262882528","3262882535","DE","DEU","GERMANY" -"3262882536","3262882543","NL","NLD","NETHERLANDS" -"3262882544","3262883079","DE","DEU","GERMANY" -"3262883080","3262883127","NL","NLD","NETHERLANDS" -"3262883128","3262883135","DE","DEU","GERMANY" -"3262883136","3262883167","NL","NLD","NETHERLANDS" -"3262883168","3262883183","DE","DEU","GERMANY" -"3262883184","3262883335","NL","NLD","NETHERLANDS" -"3262883336","3262883343","DE","DEU","GERMANY" -"3262883344","3262883399","NL","NLD","NETHERLANDS" -"3262883400","3262883407","DE","DEU","GERMANY" -"3262883408","3262883423","NL","NLD","NETHERLANDS" -"3262883424","3262883431","DE","DEU","GERMANY" -"3262883432","3262883439","NL","NLD","NETHERLANDS" -"3262883440","3262883447","DE","DEU","GERMANY" -"3262883448","3262883647","NL","NLD","NETHERLANDS" -"3262883648","3262883655","DE","DEU","GERMANY" -"3262883656","3262883743","NL","NLD","NETHERLANDS" -"3262883744","3262883751","DE","DEU","GERMANY" -"3262883752","3262883895","NL","NLD","NETHERLANDS" -"3262883896","3262883903","DE","DEU","GERMANY" -"3262883904","3262884055","NL","NLD","NETHERLANDS" -"3262884056","3262884063","DE","DEU","GERMANY" -"3262884064","3262884087","NL","NLD","NETHERLANDS" -"3262884088","3262884095","DE","DEU","GERMANY" -"3262884096","3262884103","NL","NLD","NETHERLANDS" -"3262884104","3262884111","DE","DEU","GERMANY" -"3262884112","3262884127","NL","NLD","NETHERLANDS" -"3262884128","3262884135","DE","DEU","GERMANY" -"3262884136","3262884159","NL","NLD","NETHERLANDS" -"3262884160","3262884167","DE","DEU","GERMANY" -"3262884168","3262884183","NL","NLD","NETHERLANDS" -"3262884184","3262884191","DE","DEU","GERMANY" -"3262884192","3262884199","NL","NLD","NETHERLANDS" -"3262884200","3262884207","DE","DEU","GERMANY" -"3262884208","3262884247","NL","NLD","NETHERLANDS" -"3262884248","3262884255","DE","DEU","GERMANY" -"3262884256","3262884319","NL","NLD","NETHERLANDS" -"3262884320","3262884327","DE","DEU","GERMANY" -"3262884328","3262884335","NL","NLD","NETHERLANDS" -"3262884336","3262884343","DE","DEU","GERMANY" -"3262884344","3262884455","NL","NLD","NETHERLANDS" -"3262884456","3262884479","DE","DEU","GERMANY" -"3262884480","3262884495","NL","NLD","NETHERLANDS" -"3262884496","3262884503","DE","DEU","GERMANY" -"3262884504","3262884511","NL","NLD","NETHERLANDS" -"3262884512","3262884519","DE","DEU","GERMANY" -"3262884520","3262884615","NL","NLD","NETHERLANDS" -"3262884616","3262884639","DE","DEU","GERMANY" -"3262884640","3262884807","NL","NLD","NETHERLANDS" -"3262884808","3262884815","DE","DEU","GERMANY" -"3262884816","3262884951","NL","NLD","NETHERLANDS" -"3262884952","3262884959","DE","DEU","GERMANY" -"3262884960","3262884967","NL","NLD","NETHERLANDS" -"3262884968","3262884975","DE","DEU","GERMANY" -"3262884976","3262885023","NL","NLD","NETHERLANDS" -"3262885024","3262885031","DE","DEU","GERMANY" -"3262885032","3262885047","NL","NLD","NETHERLANDS" -"3262885048","3262885055","DE","DEU","GERMANY" -"3262885056","3262885135","NL","NLD","NETHERLANDS" -"3262885136","3262885143","DE","DEU","GERMANY" -"3262885144","3262885199","NL","NLD","NETHERLANDS" -"3262885200","3262885207","DE","DEU","GERMANY" -"3262885208","3262885295","NL","NLD","NETHERLANDS" -"3262885296","3262885303","DE","DEU","GERMANY" -"3262885304","3262885431","NL","NLD","NETHERLANDS" -"3262885432","3262885439","DE","DEU","GERMANY" -"3262885440","3262885447","NL","NLD","NETHERLANDS" -"3262885448","3262885463","DE","DEU","GERMANY" -"3262885464","3262885703","NL","NLD","NETHERLANDS" -"3262885704","3262885727","DE","DEU","GERMANY" -"3262885728","3262885743","NL","NLD","NETHERLANDS" -"3262885744","3262885751","DE","DEU","GERMANY" -"3262885752","3262885759","NL","NLD","NETHERLANDS" -"3262885760","3262885767","DE","DEU","GERMANY" -"3262885768","3262885855","NL","NLD","NETHERLANDS" -"3262885856","3262885863","DE","DEU","GERMANY" -"3262885864","3262885895","NL","NLD","NETHERLANDS" -"3262885896","3262885903","DE","DEU","GERMANY" -"3262885904","3262885927","NL","NLD","NETHERLANDS" -"3262885928","3262885935","DE","DEU","GERMANY" -"3262885936","3262886015","NL","NLD","NETHERLANDS" -"3262886016","3262886023","DE","DEU","GERMANY" -"3262886024","3262886167","NL","NLD","NETHERLANDS" -"3262886168","3262886175","DE","DEU","GERMANY" -"3262886176","3262886191","NL","NLD","NETHERLANDS" -"3262886192","3262886199","DE","DEU","GERMANY" -"3262886200","3262886247","NL","NLD","NETHERLANDS" -"3262886248","3262886255","DE","DEU","GERMANY" -"3262886256","3262886407","NL","NLD","NETHERLANDS" -"3262886408","3262886415","DE","DEU","GERMANY" -"3262886416","3262886455","NL","NLD","NETHERLANDS" -"3262886456","3262886463","DE","DEU","GERMANY" -"3262886464","3262886551","NL","NLD","NETHERLANDS" -"3262886552","3262886559","DE","DEU","GERMANY" -"3262886560","3262886583","NL","NLD","NETHERLANDS" -"3262886584","3262886591","DE","DEU","GERMANY" -"3262886592","3262886655","NL","NLD","NETHERLANDS" -"3262886656","3262886663","DE","DEU","GERMANY" -"3262886664","3262886679","NL","NLD","NETHERLANDS" -"3262886680","3262886687","DE","DEU","GERMANY" -"3262886688","3262886735","NL","NLD","NETHERLANDS" -"3262886736","3262886751","DE","DEU","GERMANY" -"3262886752","3262886767","NL","NLD","NETHERLANDS" -"3262886768","3262886783","DE","DEU","GERMANY" -"3262886784","3262886791","NL","NLD","NETHERLANDS" -"3262886792","3262886807","DE","DEU","GERMANY" -"3262886808","3262886887","NL","NLD","NETHERLANDS" -"3262886888","3262886903","DE","DEU","GERMANY" -"3262886904","3262886991","NL","NLD","NETHERLANDS" -"3262886992","3262887007","DE","DEU","GERMANY" -"3262887008","3262887031","NL","NLD","NETHERLANDS" -"3262887032","3262887039","DE","DEU","GERMANY" -"3262887040","3262887167","NL","NLD","NETHERLANDS" -"3262887168","3262887175","DE","DEU","GERMANY" -"3262887176","3262887191","NL","NLD","NETHERLANDS" -"3262887192","3262887199","DE","DEU","GERMANY" -"3262887200","3262887247","NL","NLD","NETHERLANDS" -"3262887248","3262887255","DE","DEU","GERMANY" -"3262887256","3262887367","NL","NLD","NETHERLANDS" -"3262887368","3262887375","DE","DEU","GERMANY" -"3262887376","3262887479","NL","NLD","NETHERLANDS" -"3262887480","3262887495","DE","DEU","GERMANY" -"3262887496","3262887519","NL","NLD","NETHERLANDS" -"3262887520","3262887527","DE","DEU","GERMANY" -"3262887528","3262887559","NL","NLD","NETHERLANDS" -"3262887560","3262887567","DE","DEU","GERMANY" -"3262887568","3262887647","NL","NLD","NETHERLANDS" -"3262887648","3262887663","DE","DEU","GERMANY" -"3262887664","3262887783","NL","NLD","NETHERLANDS" -"3262887784","3262887799","DE","DEU","GERMANY" -"3262887800","3262888023","NL","NLD","NETHERLANDS" -"3262888024","3262888031","DE","DEU","GERMANY" -"3262888032","3262888167","NL","NLD","NETHERLANDS" -"3262888168","3262888175","DE","DEU","GERMANY" -"3262888176","3262888191","NL","NLD","NETHERLANDS" -"3262888192","3262888199","DE","DEU","GERMANY" -"3262888200","3262888207","NL","NLD","NETHERLANDS" -"3262888208","3262888215","DE","DEU","GERMANY" -"3262888216","3262888255","NL","NLD","NETHERLANDS" -"3262888256","3262888263","DE","DEU","GERMANY" -"3262888264","3262888391","NL","NLD","NETHERLANDS" -"3262888392","3262888399","DE","DEU","GERMANY" -"3262888400","3262888447","NL","NLD","NETHERLANDS" -"3262888448","3262888455","DE","DEU","GERMANY" -"3262888456","3262888511","NL","NLD","NETHERLANDS" -"3262888512","3262888527","DE","DEU","GERMANY" -"3262888528","3262888535","NL","NLD","NETHERLANDS" -"3262888536","3262888543","DE","DEU","GERMANY" -"3262888544","3262888575","NL","NLD","NETHERLANDS" -"3262888576","3262888583","DE","DEU","GERMANY" -"3262888584","3262888735","NL","NLD","NETHERLANDS" -"3262888736","3262888743","DE","DEU","GERMANY" -"3262888744","3262888783","NL","NLD","NETHERLANDS" -"3262888784","3262888791","DE","DEU","GERMANY" -"3262888792","3262888807","NL","NLD","NETHERLANDS" -"3262888808","3262888815","DE","DEU","GERMANY" -"3262888816","3262888839","NL","NLD","NETHERLANDS" -"3262888840","3262888847","DE","DEU","GERMANY" -"3262888848","3262888943","NL","NLD","NETHERLANDS" -"3262888944","3262888951","DE","DEU","GERMANY" -"3262888952","3262888983","NL","NLD","NETHERLANDS" -"3262888984","3262888991","DE","DEU","GERMANY" -"3262888992","3262889031","NL","NLD","NETHERLANDS" -"3262889032","3262889039","DE","DEU","GERMANY" -"3262889040","3262889095","NL","NLD","NETHERLANDS" -"3262889096","3262889103","DE","DEU","GERMANY" -"3262889104","3262889111","NL","NLD","NETHERLANDS" -"3262889112","3262889119","DE","DEU","GERMANY" -"3262889120","3262889167","NL","NLD","NETHERLANDS" -"3262889168","3262889175","DE","DEU","GERMANY" -"3262889176","3262889207","NL","NLD","NETHERLANDS" -"3262889208","3262889215","DE","DEU","GERMANY" -"3262889216","3262889343","NL","NLD","NETHERLANDS" -"3262889344","3262889359","DE","DEU","GERMANY" -"3262889360","3262889399","NL","NLD","NETHERLANDS" -"3262889400","3262889407","DE","DEU","GERMANY" -"3262889408","3262889415","NL","NLD","NETHERLANDS" -"3262889416","3262889423","DE","DEU","GERMANY" -"3262889424","3262889439","NL","NLD","NETHERLANDS" -"3262889440","3262889471","DE","DEU","GERMANY" -"3262889472","3262889519","NL","NLD","NETHERLANDS" -"3262889520","3262889527","DE","DEU","GERMANY" -"3262889528","3262889543","NL","NLD","NETHERLANDS" -"3262889544","3262889567","DE","DEU","GERMANY" -"3262889568","3262889583","NL","NLD","NETHERLANDS" -"3262889584","3262889599","DE","DEU","GERMANY" -"3262889600","3262889671","NL","NLD","NETHERLANDS" -"3262889672","3262889679","DE","DEU","GERMANY" -"3262889680","3262889703","NL","NLD","NETHERLANDS" -"3262889704","3262889711","DE","DEU","GERMANY" -"3262889712","3262889775","NL","NLD","NETHERLANDS" -"3262889776","3262889783","DE","DEU","GERMANY" -"3262889784","3262889983","NL","NLD","NETHERLANDS" -"3262889984","3262889999","DE","DEU","GERMANY" -"3262890000","3262890007","NL","NLD","NETHERLANDS" -"3262890008","3262890015","DE","DEU","GERMANY" -"3262890016","3262890047","NL","NLD","NETHERLANDS" -"3262890048","3262890055","DE","DEU","GERMANY" -"3262890056","3262890087","NL","NLD","NETHERLANDS" -"3262890088","3262890095","DE","DEU","GERMANY" -"3262890096","3262890135","NL","NLD","NETHERLANDS" -"3262890136","3262890143","DE","DEU","GERMANY" -"3262890144","3262890295","NL","NLD","NETHERLANDS" -"3262890296","3262890303","DE","DEU","GERMANY" -"3262890304","3262890319","NL","NLD","NETHERLANDS" -"3262890320","3262890327","DE","DEU","GERMANY" -"3262890328","3262890583","NL","NLD","NETHERLANDS" -"3262890584","3262890591","DE","DEU","GERMANY" -"3262890592","3262890623","NL","NLD","NETHERLANDS" -"3262890624","3262890631","DE","DEU","GERMANY" -"3262890632","3262890639","NL","NLD","NETHERLANDS" -"3262890640","3262890647","DE","DEU","GERMANY" -"3262890648","3262890703","NL","NLD","NETHERLANDS" -"3262890704","3262890711","DE","DEU","GERMANY" -"3262890712","3262890839","NL","NLD","NETHERLANDS" -"3262890840","3262890855","DE","DEU","GERMANY" -"3262890856","3262890879","NL","NLD","NETHERLANDS" -"3262890880","3262890887","DE","DEU","GERMANY" -"3262890888","3262890991","NL","NLD","NETHERLANDS" -"3262890992","3262890999","DE","DEU","GERMANY" -"3262891000","3262891015","NL","NLD","NETHERLANDS" -"3262891016","3262891023","DE","DEU","GERMANY" -"3262891024","3262891047","NL","NLD","NETHERLANDS" -"3262891048","3262891055","DE","DEU","GERMANY" -"3262891056","3262891191","NL","NLD","NETHERLANDS" -"3262891192","3262891215","DE","DEU","GERMANY" -"3262891216","3262891359","NL","NLD","NETHERLANDS" -"3262891360","3262891367","DE","DEU","GERMANY" -"3262891368","3262891455","NL","NLD","NETHERLANDS" -"3262891456","3262891471","DE","DEU","GERMANY" -"3262891472","3262891479","NL","NLD","NETHERLANDS" -"3262891480","3262891487","DE","DEU","GERMANY" -"3262891488","3262891519","NL","NLD","NETHERLANDS" -"3262891520","3262891527","DE","DEU","GERMANY" -"3262891528","3262891607","NL","NLD","NETHERLANDS" -"3262891608","3262891615","DE","DEU","GERMANY" -"3262891616","3262891647","NL","NLD","NETHERLANDS" -"3262891648","3262891663","DE","DEU","GERMANY" -"3262891664","3262891759","NL","NLD","NETHERLANDS" -"3262891760","3262891767","DE","DEU","GERMANY" -"3262891768","3262891871","NL","NLD","NETHERLANDS" -"3262891872","3262891879","DE","DEU","GERMANY" -"3262891880","3262892095","NL","NLD","NETHERLANDS" -"3262892096","3262892103","DE","DEU","GERMANY" -"3262892104","3262892119","NL","NLD","NETHERLANDS" -"3262892120","3262892127","DE","DEU","GERMANY" -"3262892128","3262892223","NL","NLD","NETHERLANDS" -"3262892224","3262892231","DE","DEU","GERMANY" -"3262892232","3262892311","NL","NLD","NETHERLANDS" -"3262892312","3262892319","DE","DEU","GERMANY" -"3262892320","3262892391","NL","NLD","NETHERLANDS" -"3262892392","3262892407","DE","DEU","GERMANY" -"3262892408","3262892671","NL","NLD","NETHERLANDS" -"3262892672","3262892679","DE","DEU","GERMANY" -"3262892680","3262892703","NL","NLD","NETHERLANDS" -"3262892704","3262892711","DE","DEU","GERMANY" -"3262892712","3262892879","NL","NLD","NETHERLANDS" -"3262892880","3262892895","DE","DEU","GERMANY" -"3262892896","3262892903","NL","NLD","NETHERLANDS" -"3262892904","3262892911","DE","DEU","GERMANY" -"3262892912","3262892991","NL","NLD","NETHERLANDS" -"3262892992","3262892999","DE","DEU","GERMANY" -"3262893000","3262893127","NL","NLD","NETHERLANDS" -"3262893128","3262893135","DE","DEU","GERMANY" -"3262893136","3262893151","NL","NLD","NETHERLANDS" -"3262893152","3262893159","DE","DEU","GERMANY" -"3262893160","3262893255","NL","NLD","NETHERLANDS" -"3262893256","3262893263","DE","DEU","GERMANY" -"3262893264","3262893327","NL","NLD","NETHERLANDS" -"3262893328","3262893335","DE","DEU","GERMANY" -"3262893336","3262893343","NL","NLD","NETHERLANDS" -"3262893344","3262893351","DE","DEU","GERMANY" -"3262893352","3262893479","NL","NLD","NETHERLANDS" -"3262893480","3262893487","DE","DEU","GERMANY" -"3262893488","3262893535","NL","NLD","NETHERLANDS" -"3262893536","3262893543","DE","DEU","GERMANY" -"3262893544","3262893679","NL","NLD","NETHERLANDS" -"3262893680","3262893687","DE","DEU","GERMANY" -"3262893688","3262893775","NL","NLD","NETHERLANDS" -"3262893776","3262893783","DE","DEU","GERMANY" -"3262893784","3262893879","NL","NLD","NETHERLANDS" -"3262893880","3262893887","DE","DEU","GERMANY" -"3262893888","3262893975","NL","NLD","NETHERLANDS" -"3262893976","3262893983","DE","DEU","GERMANY" -"3262893984","3262894039","NL","NLD","NETHERLANDS" -"3262894040","3262894047","DE","DEU","GERMANY" -"3262894048","3262894119","NL","NLD","NETHERLANDS" -"3262894120","3262894127","DE","DEU","GERMANY" -"3262894128","3262894239","NL","NLD","NETHERLANDS" -"3262894240","3262894247","DE","DEU","GERMANY" -"3262894248","3262894359","NL","NLD","NETHERLANDS" -"3262894360","3262894367","DE","DEU","GERMANY" -"3262894368","3262894455","NL","NLD","NETHERLANDS" -"3262894456","3262894471","DE","DEU","GERMANY" -"3262894472","3262894511","NL","NLD","NETHERLANDS" -"3262894512","3262894519","DE","DEU","GERMANY" -"3262894520","3262894575","NL","NLD","NETHERLANDS" -"3262894576","3262894591","DE","DEU","GERMANY" -"3262894592","3262894623","NL","NLD","NETHERLANDS" -"3262894624","3262894631","DE","DEU","GERMANY" -"3262894632","3262894791","NL","NLD","NETHERLANDS" -"3262894792","3262894799","DE","DEU","GERMANY" -"3262894800","3262894831","NL","NLD","NETHERLANDS" -"3262894832","3262894839","DE","DEU","GERMANY" -"3262894840","3262894855","NL","NLD","NETHERLANDS" -"3262894856","3262894863","DE","DEU","GERMANY" -"3262894864","3262895055","NL","NLD","NETHERLANDS" -"3262895056","3262895063","DE","DEU","GERMANY" -"3262895064","3262895103","NL","NLD","NETHERLANDS" -"3262895104","3262895111","DE","DEU","GERMANY" -"3262895112","3262895119","NL","NLD","NETHERLANDS" -"3262895120","3262895127","DE","DEU","GERMANY" -"3262895128","3262895159","NL","NLD","NETHERLANDS" -"3262895160","3262895183","DE","DEU","GERMANY" -"3262895184","3262895223","NL","NLD","NETHERLANDS" -"3262895224","3262895231","DE","DEU","GERMANY" -"3262895232","3262895335","NL","NLD","NETHERLANDS" -"3262895336","3262895343","DE","DEU","GERMANY" -"3262895344","3262895367","NL","NLD","NETHERLANDS" -"3262895368","3262895375","DE","DEU","GERMANY" -"3262895376","3262895415","NL","NLD","NETHERLANDS" -"3262895416","3262895423","DE","DEU","GERMANY" -"3262895424","3262895487","NL","NLD","NETHERLANDS" -"3262895488","3262895511","DE","DEU","GERMANY" -"3262895512","3262895551","NL","NLD","NETHERLANDS" -"3262895552","3262895559","DE","DEU","GERMANY" -"3262895560","3262895679","NL","NLD","NETHERLANDS" -"3262895680","3262895687","DE","DEU","GERMANY" -"3262895688","3262895727","NL","NLD","NETHERLANDS" -"3262895728","3262895735","DE","DEU","GERMANY" -"3262895736","3262895775","NL","NLD","NETHERLANDS" -"3262895776","3262895783","DE","DEU","GERMANY" -"3262895784","3262895911","NL","NLD","NETHERLANDS" -"3262895912","3262895919","DE","DEU","GERMANY" -"3262895920","3262895991","NL","NLD","NETHERLANDS" -"3262895992","3262895999","DE","DEU","GERMANY" -"3262896000","3262896183","NL","NLD","NETHERLANDS" -"3262896184","3262896191","DE","DEU","GERMANY" -"3262896192","3262896207","NL","NLD","NETHERLANDS" -"3262896208","3262896215","DE","DEU","GERMANY" -"3262896216","3262896223","NL","NLD","NETHERLANDS" -"3262896224","3262896231","DE","DEU","GERMANY" -"3262896232","3262896271","NL","NLD","NETHERLANDS" -"3262896272","3262896279","DE","DEU","GERMANY" -"3262896280","3262896327","NL","NLD","NETHERLANDS" -"3262896328","3262896335","DE","DEU","GERMANY" -"3262896336","3262896471","NL","NLD","NETHERLANDS" -"3262896472","3262896479","DE","DEU","GERMANY" -"3262896480","3262896727","NL","NLD","NETHERLANDS" -"3262896728","3262896735","DE","DEU","GERMANY" -"3262896736","3262896943","NL","NLD","NETHERLANDS" -"3262896944","3262896951","DE","DEU","GERMANY" -"3262896952","3262896959","NL","NLD","NETHERLANDS" -"3262896960","3262896967","DE","DEU","GERMANY" -"3262896968","3262896983","NL","NLD","NETHERLANDS" -"3262896984","3262896991","DE","DEU","GERMANY" -"3262896992","3262897167","NL","NLD","NETHERLANDS" -"3262897168","3262897175","DE","DEU","GERMANY" -"3262897176","3262897295","NL","NLD","NETHERLANDS" -"3262897296","3262897303","DE","DEU","GERMANY" -"3262897304","3262897343","NL","NLD","NETHERLANDS" -"3262897344","3262897351","DE","DEU","GERMANY" -"3262897352","3262897447","NL","NLD","NETHERLANDS" -"3262897448","3262897455","DE","DEU","GERMANY" -"3262897456","3262897503","NL","NLD","NETHERLANDS" -"3262897504","3262897511","DE","DEU","GERMANY" -"3262897512","3262897655","NL","NLD","NETHERLANDS" -"3262897656","3262897663","DE","DEU","GERMANY" -"3262897664","3262897791","NL","NLD","NETHERLANDS" -"3262897792","3262897799","DE","DEU","GERMANY" -"3262897800","3262897815","NL","NLD","NETHERLANDS" -"3262897816","3262897823","DE","DEU","GERMANY" -"3262897824","3262897983","NL","NLD","NETHERLANDS" -"3262897984","3262897991","DE","DEU","GERMANY" -"3262897992","3262898103","NL","NLD","NETHERLANDS" -"3262898104","3262898111","DE","DEU","GERMANY" -"3262898112","3262898119","NL","NLD","NETHERLANDS" -"3262898120","3262898127","DE","DEU","GERMANY" -"3262898128","3262898199","NL","NLD","NETHERLANDS" -"3262898200","3262898207","DE","DEU","GERMANY" -"3262898208","3262898231","NL","NLD","NETHERLANDS" -"3262898232","3262898239","DE","DEU","GERMANY" -"3262898240","3262898351","NL","NLD","NETHERLANDS" -"3262898352","3262898367","DE","DEU","GERMANY" -"3262898368","3262898431","NL","NLD","NETHERLANDS" -"3262898432","3262898439","DE","DEU","GERMANY" -"3262898440","3262898471","NL","NLD","NETHERLANDS" -"3262898472","3262898479","DE","DEU","GERMANY" -"3262898480","3262898551","NL","NLD","NETHERLANDS" -"3262898552","3262898559","DE","DEU","GERMANY" -"3262898560","3262898599","NL","NLD","NETHERLANDS" -"3262898600","3262898607","DE","DEU","GERMANY" -"3262898608","3262898639","NL","NLD","NETHERLANDS" -"3262898640","3262898647","DE","DEU","GERMANY" -"3262898648","3262898703","NL","NLD","NETHERLANDS" -"3262898704","3262898711","DE","DEU","GERMANY" -"3262898712","3262898727","NL","NLD","NETHERLANDS" -"3262898728","3262898735","DE","DEU","GERMANY" -"3262898736","3262898807","NL","NLD","NETHERLANDS" -"3262898808","3262898815","DE","DEU","GERMANY" -"3262898816","3262898863","NL","NLD","NETHERLANDS" -"3262898864","3262898871","DE","DEU","GERMANY" -"3262898872","3262898879","NL","NLD","NETHERLANDS" -"3262898880","3262898887","DE","DEU","GERMANY" -"3262898888","3262898951","NL","NLD","NETHERLANDS" -"3262898952","3262898959","DE","DEU","GERMANY" -"3262898960","3262899007","NL","NLD","NETHERLANDS" -"3262899008","3262899015","DE","DEU","GERMANY" -"3262899016","3262899031","NL","NLD","NETHERLANDS" -"3262899032","3262899047","DE","DEU","GERMANY" -"3262899048","3262899103","NL","NLD","NETHERLANDS" -"3262899104","3262899111","DE","DEU","GERMANY" -"3262899112","3262899159","NL","NLD","NETHERLANDS" -"3262899160","3262899175","DE","DEU","GERMANY" -"3262899176","3262899255","NL","NLD","NETHERLANDS" -"3262899256","3262899263","DE","DEU","GERMANY" -"3262899264","3262899271","NL","NLD","NETHERLANDS" -"3262899272","3262899279","DE","DEU","GERMANY" -"3262899280","3262899423","NL","NLD","NETHERLANDS" -"3262899424","3262899431","DE","DEU","GERMANY" -"3262899432","3262899655","NL","NLD","NETHERLANDS" -"3262899656","3262899663","DE","DEU","GERMANY" -"3262899664","3262899743","NL","NLD","NETHERLANDS" -"3262899744","3262899751","DE","DEU","GERMANY" -"3262899752","3262899935","NL","NLD","NETHERLANDS" -"3262899936","3262899943","DE","DEU","GERMANY" -"3262899944","3262899959","NL","NLD","NETHERLANDS" -"3262899960","3262899967","DE","DEU","GERMANY" -"3262899968","3262900055","NL","NLD","NETHERLANDS" -"3262900056","3262900063","DE","DEU","GERMANY" -"3262900064","3262900183","NL","NLD","NETHERLANDS" -"3262900184","3262900191","DE","DEU","GERMANY" -"3262900192","3262900223","NL","NLD","NETHERLANDS" -"3262900224","3262900479","DE","DEU","GERMANY" -"3262900480","3262900487","NL","NLD","NETHERLANDS" -"3262900488","3262900503","DE","DEU","GERMANY" -"3262900504","3262900583","NL","NLD","NETHERLANDS" -"3262900584","3262900591","DE","DEU","GERMANY" -"3262900592","3262900663","NL","NLD","NETHERLANDS" -"3262900664","3262900671","DE","DEU","GERMANY" -"3262900672","3262900799","NL","NLD","NETHERLANDS" -"3262900800","3262900807","DE","DEU","GERMANY" -"3262900808","3262900919","NL","NLD","NETHERLANDS" -"3262900920","3262900927","DE","DEU","GERMANY" -"3262900928","3262901015","NL","NLD","NETHERLANDS" -"3262901016","3262901023","DE","DEU","GERMANY" -"3262901024","3262901079","NL","NLD","NETHERLANDS" -"3262901080","3262901087","DE","DEU","GERMANY" -"3262901088","3262901111","NL","NLD","NETHERLANDS" -"3262901112","3262901119","DE","DEU","GERMANY" -"3262901120","3262901207","NL","NLD","NETHERLANDS" -"3262901208","3262901215","DE","DEU","GERMANY" -"3262901216","3262901511","NL","NLD","NETHERLANDS" -"3262901512","3262901519","DE","DEU","GERMANY" -"3262901520","3262901615","NL","NLD","NETHERLANDS" -"3262901616","3262901623","DE","DEU","GERMANY" -"3262901624","3262901663","NL","NLD","NETHERLANDS" -"3262901664","3262901671","DE","DEU","GERMANY" -"3262901672","3262901743","NL","NLD","NETHERLANDS" -"3262901744","3262901759","DE","DEU","GERMANY" -"3262901760","3262901887","NL","NLD","NETHERLANDS" -"3262901888","3262901895","DE","DEU","GERMANY" -"3262901896","3262901975","NL","NLD","NETHERLANDS" -"3262901976","3262901983","DE","DEU","GERMANY" -"3262901984","3262902175","NL","NLD","NETHERLANDS" -"3262902176","3262902183","DE","DEU","GERMANY" -"3262902184","3262902295","NL","NLD","NETHERLANDS" -"3262902296","3262902303","DE","DEU","GERMANY" -"3262902304","3262902327","NL","NLD","NETHERLANDS" -"3262902328","3262902335","DE","DEU","GERMANY" -"3262902336","3262902631","NL","NLD","NETHERLANDS" -"3262902632","3262902639","DE","DEU","GERMANY" -"3262902640","3262902727","NL","NLD","NETHERLANDS" -"3262902728","3262902735","DE","DEU","GERMANY" -"3262902736","3262902831","NL","NLD","NETHERLANDS" -"3262902832","3262902839","DE","DEU","GERMANY" -"3262902840","3262902871","NL","NLD","NETHERLANDS" -"3262902872","3262902879","DE","DEU","GERMANY" -"3262902880","3262902991","NL","NLD","NETHERLANDS" -"3262902992","3262902999","DE","DEU","GERMANY" -"3262903000","3262903047","NL","NLD","NETHERLANDS" -"3262903048","3262903055","DE","DEU","GERMANY" -"3262903056","3262903143","NL","NLD","NETHERLANDS" -"3262903144","3262903151","DE","DEU","GERMANY" -"3262903152","3262903327","NL","NLD","NETHERLANDS" -"3262903328","3262903343","DE","DEU","GERMANY" -"3262903344","3262903399","NL","NLD","NETHERLANDS" -"3262903400","3262903407","DE","DEU","GERMANY" -"3262903408","3262903575","NL","NLD","NETHERLANDS" -"3262903576","3262903583","DE","DEU","GERMANY" -"3262903584","3262903623","NL","NLD","NETHERLANDS" -"3262903624","3262903631","DE","DEU","GERMANY" -"3262903632","3262903671","NL","NLD","NETHERLANDS" -"3262903672","3262903679","DE","DEU","GERMANY" -"3262903680","3262903751","NL","NLD","NETHERLANDS" -"3262903752","3262903759","DE","DEU","GERMANY" -"3262903760","3262903807","NL","NLD","NETHERLANDS" -"3262903808","3262903815","DE","DEU","GERMANY" -"3262903816","3262903831","NL","NLD","NETHERLANDS" -"3262903832","3262903839","DE","DEU","GERMANY" -"3262903840","3262904095","NL","NLD","NETHERLANDS" -"3262904096","3262904103","DE","DEU","GERMANY" -"3262904104","3262904127","NL","NLD","NETHERLANDS" -"3262904128","3262904135","DE","DEU","GERMANY" -"3262904136","3262904167","NL","NLD","NETHERLANDS" -"3262904168","3262904175","DE","DEU","GERMANY" -"3262904176","3262904215","NL","NLD","NETHERLANDS" -"3262904216","3262904223","DE","DEU","GERMANY" -"3262904224","3262904255","NL","NLD","NETHERLANDS" -"3262904256","3262904263","DE","DEU","GERMANY" -"3262904264","3262904319","NL","NLD","NETHERLANDS" -"3262904320","3262904327","DE","DEU","GERMANY" -"3262904328","3262904383","NL","NLD","NETHERLANDS" -"3262904384","3262904391","DE","DEU","GERMANY" -"3262904392","3262904463","NL","NLD","NETHERLANDS" -"3262904464","3262904471","DE","DEU","GERMANY" -"3262904472","3262904583","NL","NLD","NETHERLANDS" -"3262904584","3262904591","DE","DEU","GERMANY" -"3262904592","3262904631","NL","NLD","NETHERLANDS" -"3262904632","3262904639","DE","DEU","GERMANY" -"3262904640","3262904655","NL","NLD","NETHERLANDS" -"3262904656","3262904663","DE","DEU","GERMANY" -"3262904664","3262904703","NL","NLD","NETHERLANDS" -"3262904704","3262904711","DE","DEU","GERMANY" -"3262904712","3262904791","NL","NLD","NETHERLANDS" -"3262904792","3262904799","DE","DEU","GERMANY" -"3262904800","3262904959","NL","NLD","NETHERLANDS" -"3262904960","3262904967","DE","DEU","GERMANY" -"3262904968","3262904975","NL","NLD","NETHERLANDS" -"3262904976","3262904983","DE","DEU","GERMANY" -"3262904984","3262905007","NL","NLD","NETHERLANDS" -"3262905008","3262905015","DE","DEU","GERMANY" -"3262905016","3262905111","NL","NLD","NETHERLANDS" -"3262905112","3262905119","DE","DEU","GERMANY" -"3262905120","3262905199","NL","NLD","NETHERLANDS" -"3262905200","3262905207","DE","DEU","GERMANY" -"3262905208","3262905223","NL","NLD","NETHERLANDS" -"3262905224","3262905231","DE","DEU","GERMANY" -"3262905232","3262905239","NL","NLD","NETHERLANDS" -"3262905240","3262905247","DE","DEU","GERMANY" -"3262905248","3262905287","NL","NLD","NETHERLANDS" -"3262905288","3262905295","DE","DEU","GERMANY" -"3262905296","3262905327","NL","NLD","NETHERLANDS" -"3262905328","3262905335","DE","DEU","GERMANY" -"3262905336","3262905375","NL","NLD","NETHERLANDS" -"3262905376","3262905383","DE","DEU","GERMANY" -"3262905384","3262905399","NL","NLD","NETHERLANDS" -"3262905400","3262905407","DE","DEU","GERMANY" -"3262905408","3262905495","NL","NLD","NETHERLANDS" -"3262905496","3262905503","DE","DEU","GERMANY" -"3262905504","3262905511","NL","NLD","NETHERLANDS" -"3262905512","3262905519","DE","DEU","GERMANY" -"3262905520","3262905559","NL","NLD","NETHERLANDS" -"3262905560","3262905567","DE","DEU","GERMANY" -"3262905568","3262905647","NL","NLD","NETHERLANDS" -"3262905648","3262905655","DE","DEU","GERMANY" -"3262905656","3262905751","NL","NLD","NETHERLANDS" -"3262905752","3262905759","DE","DEU","GERMANY" -"3262905760","3262905991","NL","NLD","NETHERLANDS" -"3262905992","3262906015","DE","DEU","GERMANY" -"3262906016","3262906039","NL","NLD","NETHERLANDS" -"3262906040","3262906047","DE","DEU","GERMANY" -"3262906048","3262906103","NL","NLD","NETHERLANDS" -"3262906104","3262906111","DE","DEU","GERMANY" -"3262906112","3262906223","NL","NLD","NETHERLANDS" -"3262906224","3262906231","DE","DEU","GERMANY" -"3262906232","3262906295","NL","NLD","NETHERLANDS" -"3262906296","3262906303","DE","DEU","GERMANY" -"3262906304","3262906327","NL","NLD","NETHERLANDS" -"3262906328","3262906343","DE","DEU","GERMANY" -"3262906344","3262906367","NL","NLD","NETHERLANDS" -"3262906368","3262964991","CH","CHE","SWITZERLAND" -"3262964992","3262965247","DE","DEU","GERMANY" -"3262965248","3262969599","CH","CHE","SWITZERLAND" -"3262969856","3262971903","CH","CHE","SWITZERLAND" -"3262971904","3263029247","IE","IRL","IRELAND" -"3263029248","3263030271","UA","UKR","UKRAINE" -"3263030272","3263031295","GB","GBR","UNITED KINGDOM" -"3263031296","3263032319","TR","TUR","TURKEY" -"3263032320","3263033343","RU","RUS","RUSSIAN FEDERATION" -"3263033344","3263033855","LV","LVA","LATVIA" -"3263033856","3263034367","IT","ITA","ITALY" -"3263034368","3263034879","UA","UKR","UKRAINE" -"3263034880","3263035391","GB","GBR","UNITED KINGDOM" -"3263035392","3263035903","UA","UKR","UKRAINE" -"3263035904","3263036415","CH","CHE","SWITZERLAND" -"3263036416","3263036927","GR","GRC","GREECE" -"3263036928","3263037439","RU","RUS","RUSSIAN FEDERATION" -"3263037440","3263045631","LB","LBN","LEBANON" -"3263045632","3263046847","KW","KWT","KUWAIT" -"3263046848","3263046911","IQ","IRQ","IRAQ" -"3263046912","3263047935","KW","KWT","KUWAIT" -"3263047936","3263048191","LB","LBN","LEBANON" -"3263048192","3263053823","KW","KWT","KUWAIT" -"3263053824","3263062015","GB","GBR","UNITED KINGDOM" -"3263062016","3263070207","EE","EST","ESTONIA" -"3263070208","3263070719","FR","FRA","FRANCE" -"3263070720","3263070975","NL","NLD","NETHERLANDS" -"3263070976","3263071487","DE","DEU","GERMANY" -"3263071488","3263072255","NL","NLD","NETHERLANDS" -"3263072256","3263074303","LB","LBN","LEBANON" -"3263074304","3263074815","CH","CHE","SWITZERLAND" -"3263074816","3263075327","RO","ROM","ROMANIA" -"3263075840","3263076351","SE","SWE","SWEDEN" -"3263076352","3263076863","RO","ROM","ROMANIA" -"3263076864","3263077375","IT","ITA","ITALY" -"3263077376","3263077887","FR","FRA","FRANCE" -"3263077888","3263078399","DE","DEU","GERMANY" -"3263078400","3263079423","RO","ROM","ROMANIA" -"3263079424","3263080447","PL","POL","POLAND" -"3263080448","3263081471","RU","RUS","RUSSIAN FEDERATION" -"3263081472","3263082495","NL","NLD","NETHERLANDS" -"3263082496","3263083519","RO","ROM","ROMANIA" -"3263083520","3263084543","UA","UKR","UKRAINE" -"3263084544","3263085567","RO","ROM","ROMANIA" -"3263085568","3263086591","CH","CHE","SWITZERLAND" -"3263086848","3263087103","NL","NLD","NETHERLANDS" -"3263087104","3263087871","DE","DEU","GERMANY" -"3263087872","3263088127","SI","SVN","SLOVENIA" -"3263088128","3263088639","DE","DEU","GERMANY" -"3263088640","3263089151","CH","CHE","SWITZERLAND" -"3263089152","3263089407","RO","ROM","ROMANIA" -"3263089408","3263089663","RU","RUS","RUSSIAN FEDERATION" -"3263089664","3263089919","UA","UKR","UKRAINE" -"3263089920","3263090175","RO","ROM","ROMANIA" -"3263090176","3263090431","DE","DEU","GERMANY" -"3263090432","3263090687","PL","POL","POLAND" -"3263090688","3263090943","DE","DEU","GERMANY" -"3263090944","3263091199","GB","GBR","UNITED KINGDOM" -"3263091200","3263091455","PL","POL","POLAND" -"3263091456","3263091711","NO","NOR","NORWAY" -"3263091712","3263091967","FI","FIN","FINLAND" -"3263091968","3263092479","HR","HRV","CROATIA" -"3263092480","3263092735","ES","ESP","SPAIN" -"3263092736","3263092991","PL","POL","POLAND" -"3263092992","3263093247","FR","FRA","FRANCE" -"3263093248","3263093503","CH","CHE","SWITZERLAND" -"3263093504","3263093759","RU","RUS","RUSSIAN FEDERATION" -"3263093760","3263094015","RO","ROM","ROMANIA" -"3263094016","3263094527","PL","POL","POLAND" -"3263094528","3263094783","DK","DNK","DENMARK" -"3263094784","3263095039","UA","UKR","UKRAINE" -"3263095040","3263095295","ES","ESP","SPAIN" -"3263095296","3263095551","FR","FRA","FRANCE" -"3263095552","3263095807","RO","ROM","ROMANIA" -"3263095808","3263096063","DE","DEU","GERMANY" -"3263096064","3263096319","PL","POL","POLAND" -"3263096320","3263096575","TR","TUR","TURKEY" -"3263096576","3263096831","SA","SAU","SAUDI ARABIA" -"3263097088","3263097343","FR","FRA","FRANCE" -"3263097344","3263097599","DK","DNK","DENMARK" -"3263097600","3263097855","NL","NLD","NETHERLANDS" -"3263097856","3263098111","FR","FRA","FRANCE" -"3263098112","3263098367","DE","DEU","GERMANY" -"3263098368","3263098623","PL","POL","POLAND" -"3263098624","3263098879","DE","DEU","GERMANY" -"3263098880","3263099135","GB","GBR","UNITED KINGDOM" -"3263099136","3263099391","NL","NLD","NETHERLANDS" -"3263099392","3263099903","DE","DEU","GERMANY" -"3263099904","3263100159","RO","ROM","ROMANIA" -"3263100160","3263100415","FR","FRA","FRANCE" -"3263100416","3263100671","DE","DEU","GERMANY" -"3263100672","3263100927","GB","GBR","UNITED KINGDOM" -"3263100928","3263101183","AT","AUT","AUSTRIA" -"3263101184","3263101439","SE","SWE","SWEDEN" -"3263101440","3263101695","DK","DNK","DENMARK" -"3263101952","3263102207","LT","LTU","LITHUANIA" -"3263102208","3263102463","RO","ROM","ROMANIA" -"3263102464","3263102719","PL","POL","POLAND" -"3263102720","3263102975","GR","GRC","GREECE" -"3263102976","3263128575","DE","DEU","GERMANY" -"3263128832","3263137791","DE","DEU","GERMANY" -"3263137792","3263138303","PL","POL","POLAND" -"3263138304","3263138559","DE","DEU","GERMANY" -"3263138560","3263138815","AT","AUT","AUSTRIA" -"3263138816","3263148543","DE","DEU","GERMANY" -"3263149056","3263155711","DE","DEU","GERMANY" -"3263155968","3263168511","DE","DEU","GERMANY" -"3263168512","3263430655","GB","GBR","UNITED KINGDOM" -"3263430656","3263436799","SE","SWE","SWEDEN" -"3263436800","3263437311","GB","GBR","UNITED KINGDOM" -"3263437312","3263477759","SE","SWE","SWEDEN" -"3263477760","3263478015","JP","JPN","JAPAN" -"3263478016","3263478271","AU","AUS","AUSTRALIA" -"3263478272","3263496191","SE","SWE","SWEDEN" -"3263497984","3263498239","GB","GBR","UNITED KINGDOM" -"3263498752","3263498879","US","USA","UNITED STATES" -"3263498880","3263498943","GB","GBR","UNITED KINGDOM" -"3263498960","3263499007","GB","GBR","UNITED KINGDOM" -"3263499776","3263500031","FR","FRA","FRANCE" -"3263500032","3263500287","GB","GBR","UNITED KINGDOM" -"3263500800","3263501341","GB","GBR","UNITED KINGDOM" -"3263501344","3263501439","GB","GBR","UNITED KINGDOM" -"3263501440","3263501503","US","USA","UNITED STATES" -"3263501504","3263501519","GB","GBR","UNITED KINGDOM" -"3263501520","3263501527","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3263501528","3263501535","GB","GBR","UNITED KINGDOM" -"3263501536","3263501551","DE","DEU","GERMANY" -"3263501552","3263501823","GB","GBR","UNITED KINGDOM" -"3263501824","3263502079","EG","EGY","EGYPT" -"3263503104","3263503167","DE","DEU","GERMANY" -"3263503200","3263503267","DE","DEU","GERMANY" -"3263503272","3263503279","DE","DEU","GERMANY" -"3263503296","3263503359","DE","DEU","GERMANY" -"3263503872","3263504127","GB","GBR","UNITED KINGDOM" -"3263504128","3263504255","EG","EGY","EGYPT" -"3263506688","3263506815","DE","DEU","GERMANY" -"3263506816","3263506943","US","USA","UNITED STATES" -"3263507200","3263507455","US","USA","UNITED STATES" -"3263508224","3263508479","GB","GBR","UNITED KINGDOM" -"3263509504","3263509759","SE","SWE","SWEDEN" -"3263509760","3263509791","GB","GBR","UNITED KINGDOM" -"3263509792","3263509807","IE","IRL","IRELAND" -"3263509808","3263509831","GB","GBR","UNITED KINGDOM" -"3263509832","3263509839","FR","FRA","FRANCE" -"3263509840","3263509847","GB","GBR","UNITED KINGDOM" -"3263509848","3263509887","US","USA","UNITED STATES" -"3263509888","3263510023","GB","GBR","UNITED KINGDOM" -"3263510024","3263510031","BE","BEL","BELGIUM" -"3263510032","3263510063","GB","GBR","UNITED KINGDOM" -"3263510064","3263510079","US","USA","UNITED STATES" -"3263510080","3263510271","GB","GBR","UNITED KINGDOM" -"3263511296","3263511551","GB","GBR","UNITED KINGDOM" -"3263512064","3263512311","GB","GBR","UNITED KINGDOM" -"3263513344","3263513599","US","USA","UNITED STATES" -"3263513856","3263514111","RU","RUS","RUSSIAN FEDERATION" -"3263516672","3263516927","US","USA","UNITED STATES" -"3263516928","3263517183","GB","GBR","UNITED KINGDOM" -"3263517696","3263517951","US","USA","UNITED STATES" -"3263517952","3263518463","GB","GBR","UNITED KINGDOM" -"3263518464","3263518719","FR","FRA","FRANCE" -"3263518720","3263518751","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3263518976","3263519231","GB","GBR","UNITED KINGDOM" -"3263519744","3263519759","GB","GBR","UNITED KINGDOM" -"3263520256","3263520511","FR","FRA","FRANCE" -"3263520512","3263520767","US","USA","UNITED STATES" -"3263521792","3263522047","GB","GBR","UNITED KINGDOM" -"3263523072","3263523583","DE","DEU","GERMANY" -"3263525760","3263525887","DE","DEU","GERMANY" -"3263527424","3263527679","ZW","ZWE","ZIMBABWE" -"3263527680","3263527935","DE","DEU","GERMANY" -"3263528192","3263528447","FR","FRA","FRANCE" -"3263528704","3263528959","GB","GBR","UNITED KINGDOM" -"3263530496","3263530751","GB","GBR","UNITED KINGDOM" -"3263531520","3263531535","DE","DEU","GERMANY" -"3263531552","3263531775","DE","DEU","GERMANY" -"3263532544","3263532799","GB","GBR","UNITED KINGDOM" -"3263537664","3263538431","TR","TUR","TURKEY" -"3263540224","3263540479","TR","TUR","TURKEY" -"3263540480","3263540735","GB","GBR","UNITED KINGDOM" -"3263541504","3263541535","GB","GBR","UNITED KINGDOM" -"3263557632","3263557887","TR","TUR","TURKEY" -"3263558656","3263558911","TR","TUR","TURKEY" -"3263558912","3263559679","GB","GBR","UNITED KINGDOM" -"3263559680","3263560191","TR","TUR","TURKEY" -"3263560448","3263560703","TR","TUR","TURKEY" -"3263560960","3263561231","TR","TUR","TURKEY" -"3263561472","3263561727","TR","TUR","TURKEY" -"3263561728","3263627263","NL","NLD","NETHERLANDS" -"3263627264","3263657471","RU","RUS","RUSSIAN FEDERATION" -"3263657472","3263657727","KZ","KAZ","KAZAKHSTAN" -"3263657728","3263684351","RU","RUS","RUSSIAN FEDERATION" -"3263684352","3263684607","UA","UKR","UKRAINE" -"3263684608","3263688959","RU","RUS","RUSSIAN FEDERATION" -"3263688960","3263689215","UA","UKR","UKRAINE" -"3263689216","3263689471","RU","RUS","RUSSIAN FEDERATION" -"3263689472","3263689727","UA","UKR","UKRAINE" -"3263689728","3263689983","RU","RUS","RUSSIAN FEDERATION" -"3263689984","3263690239","UA","UKR","UKRAINE" -"3263690240","3263691007","RU","RUS","RUSSIAN FEDERATION" -"3263691008","3263691263","UA","UKR","UKRAINE" -"3263691264","3263691775","RU","RUS","RUSSIAN FEDERATION" -"3263691776","3263692031","UA","UKR","UKRAINE" -"3263692032","3263692287","RU","RUS","RUSSIAN FEDERATION" -"3263692288","3263692799","UA","UKR","UKRAINE" -"3263692800","3263760127","FI","FIN","FINLAND" -"3263760128","3263760383","SE","SWE","SWEDEN" -"3263760384","3263764991","FI","FIN","FINLAND" -"3263764992","3263765503","BE","BEL","BELGIUM" -"3263765504","3263766975","FI","FIN","FINLAND" -"3263766976","3263767039","RU","RUS","RUSSIAN FEDERATION" -"3263767040","3263773951","FI","FIN","FINLAND" -"3263773952","3263774207","BE","BEL","BELGIUM" -"3263774208","3263774463","FI","FIN","FINLAND" -"3263774464","3263774719","BE","BEL","BELGIUM" -"3263774720","3263792351","FI","FIN","FINLAND" -"3263792352","3263792367","SE","SWE","SWEDEN" -"3263792368","3263793151","FI","FIN","FINLAND" -"3263793152","3263793407","BE","BEL","BELGIUM" -"3263793408","3263816703","FI","FIN","FINLAND" -"3263816704","3263816959","ES","ESP","SPAIN" -"3263816960","3263817215","NL","NLD","NETHERLANDS" -"3263817216","3263823871","FI","FIN","FINLAND" -"3263823872","3263954943","DE","DEU","GERMANY" -"3263954944","3263979519","ES","ESP","SPAIN" -"3263979520","3263987711","DE","DEU","GERMANY" -"3263987712","3264004095","ES","ESP","SPAIN" -"3264004096","3264012287","HU","HUN","HUNGARY" -"3264012288","3264012543","AT","AUT","AUSTRIA" -"3264012544","3264012799","FR","FRA","FRANCE" -"3264012800","3264013055","GB","GBR","UNITED KINGDOM" -"3264013056","3264013311","TR","TUR","TURKEY" -"3264013312","3264013567","UA","UKR","UKRAINE" -"3264013568","3264013823","RU","RUS","RUSSIAN FEDERATION" -"3264013824","3264014079","NL","NLD","NETHERLANDS" -"3264014080","3264014335","DE","DEU","GERMANY" -"3264014336","3264014591","PT","PRT","PORTUGAL" -"3264014592","3264014847","PL","POL","POLAND" -"3264014848","3264015103","IE","IRL","IRELAND" -"3264015104","3264015359","RO","ROM","ROMANIA" -"3264015360","3264015615","DK","DNK","DENMARK" -"3264015616","3264015871","UA","UKR","UKRAINE" -"3264015872","3264016127","PT","PRT","PORTUGAL" -"3264016384","3264016639","SE","SWE","SWEDEN" -"3264016640","3264016895","PL","POL","POLAND" -"3264016896","3264017151","GB","GBR","UNITED KINGDOM" -"3264017152","3264017663","SE","SWE","SWEDEN" -"3264017664","3264017919","RO","ROM","ROMANIA" -"3264017920","3264018175","NL","NLD","NETHERLANDS" -"3264018176","3264018431","FR","FRA","FRANCE" -"3264018432","3264018687","HU","HUN","HUNGARY" -"3264018688","3264018943","GB","GBR","UNITED KINGDOM" -"3264018944","3264019199","PL","POL","POLAND" -"3264019200","3264019967","GB","GBR","UNITED KINGDOM" -"3264019968","3264020223","AT","AUT","AUSTRIA" -"3264020224","3264020479","PL","POL","POLAND" -"3264020480","3264086015","BG","BGR","BULGARIA" -"3264086016","3264099839","FI","FIN","FINLAND" -"3264099840","3264100095","GB","GBR","UNITED KINGDOM" -"3264100096","3264124927","FI","FIN","FINLAND" -"3264124928","3264125183","DE","DEU","GERMANY" -"3264125184","3264125439","NL","NLD","NETHERLANDS" -"3264125440","3264125695","FI","FIN","FINLAND" -"3264125696","3264125951","BE","BEL","BELGIUM" -"3264125952","3264133375","FI","FIN","FINLAND" -"3264133376","3264133631","SE","SWE","SWEDEN" -"3264133632","3264151551","FI","FIN","FINLAND" -"3264151552","3264184319","NO","NOR","NORWAY" -"3264184320","3264184831","MD","MDA","REPUBLIC OF MOLDOVA" -"3264184832","3264185343","NL","NLD","NETHERLANDS" -"3264185344","3264185855","FR","FRA","FRANCE" -"3264185856","3264186367","DE","DEU","GERMANY" -"3264186368","3264186879","UA","UKR","UKRAINE" -"3264186880","3264187391","RU","RUS","RUSSIAN FEDERATION" -"3264187392","3264187903","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3264187904","3264188415","IT","ITA","ITALY" -"3264188416","3264189439","UA","UKR","UKRAINE" -"3264189440","3264190463","RU","RUS","RUSSIAN FEDERATION" -"3264190464","3264190975","LV","LVA","LATVIA" -"3264190976","3264191487","GB","GBR","UNITED KINGDOM" -"3264191488","3264191999","DE","DEU","GERMANY" -"3264192000","3264200703","GB","GBR","UNITED KINGDOM" -"3264200704","3264208895","ES","ESP","SPAIN" -"3264208896","3264217087","HU","HUN","HUNGARY" -"3264217088","3264282623","IS","ISL","ICELAND" -"3264282624","3264290815","GB","GBR","UNITED KINGDOM" -"3264290816","3264296191","FI","FIN","FINLAND" -"3264296192","3264297727","FR","FRA","FRANCE" -"3264297728","3264298751","PT","PRT","PORTUGAL" -"3264298752","3264299007","BG","BGR","BULGARIA" -"3264299008","3264307199","DE","DEU","GERMANY" -"3264307200","3264311295","PL","POL","POLAND" -"3264311296","3264311551","FR","FRA","FRANCE" -"3264311552","3264311807","IT","ITA","ITALY" -"3264311808","3264312063","DE","DEU","GERMANY" -"3264312064","3264312319","CH","CHE","SWITZERLAND" -"3264312320","3264312575","PL","POL","POLAND" -"3264312576","3264312831","UA","UKR","UKRAINE" -"3264312832","3264313087","DE","DEU","GERMANY" -"3264313344","3264313599","RO","ROM","ROMANIA" -"3264313600","3264313855","PT","PRT","PORTUGAL" -"3264313856","3264314623","DE","DEU","GERMANY" -"3264314624","3264314879","SE","SWE","SWEDEN" -"3264314880","3264315135","GB","GBR","UNITED KINGDOM" -"3264315136","3264315391","GR","GRC","GREECE" -"3264315392","3264317439","IE","IRL","IRELAND" -"3264317440","3264318463","SK","SVK","SLOVAKIA" -"3264318464","3264318975","ES","ESP","SPAIN" -"3264318976","3264319487","DE","DEU","GERMANY" -"3264319488","3264319743","FR","FRA","FRANCE" -"3264319744","3264319999","SE","SWE","SWEDEN" -"3264320000","3264320255","DE","DEU","GERMANY" -"3264320256","3264321023","GB","GBR","UNITED KINGDOM" -"3264321024","3264321535","DE","DEU","GERMANY" -"3264321536","3264321791","SE","SWE","SWEDEN" -"3264321792","3264322047","RS","SRB","SERBIA" -"3264322048","3264322303","FR","FRA","FRANCE" -"3264322304","3264322559","RO","ROM","ROMANIA" -"3264322560","3264322815","HU","HUN","HUNGARY" -"3264322816","3264323071","CH","CHE","SWITZERLAND" -"3264323072","3264323327","RU","RUS","RUSSIAN FEDERATION" -"3264323328","3264323583","RO","ROM","ROMANIA" -"3264323584","3264324607","BG","BGR","BULGARIA" -"3264324608","3264325631","SE","SWE","SWEDEN" -"3264325632","3264326655","RU","RUS","RUSSIAN FEDERATION" -"3264326656","3264327679","SE","SWE","SWEDEN" -"3264327680","3264328703","AT","AUT","AUSTRIA" -"3264328704","3264329727","CZ","CZE","CZECH REPUBLIC" -"3264329728","3264330751","PL","POL","POLAND" -"3264330752","3264331775","GB","GBR","UNITED KINGDOM" -"3264331776","3264332287","DE","DEU","GERMANY" -"3264332288","3264332799","NL","NLD","NETHERLANDS" -"3264332800","3264333311","GB","GBR","UNITED KINGDOM" -"3264333312","3264333823","UA","UKR","UKRAINE" -"3264333824","3264334335","NL","NLD","NETHERLANDS" -"3264334848","3264335359","PL","POL","POLAND" -"3264335360","3264335871","SK","SVK","SLOVAKIA" -"3264335872","3264336383","CY","CYP","CYPRUS" -"3264336384","3264336895","GB","GBR","UNITED KINGDOM" -"3264336896","3264337407","RU","RUS","RUSSIAN FEDERATION" -"3264337408","3264338431","UA","UKR","UKRAINE" -"3264338432","3264338943","DE","DEU","GERMANY" -"3264338944","3264339455","UA","UKR","UKRAINE" -"3264339456","3264339967","GB","GBR","UNITED KINGDOM" -"3264339968","3264340223","DE","DEU","GERMANY" -"3264340224","3264340479","PL","POL","POLAND" -"3264340480","3264340735","DE","DEU","GERMANY" -"3264340736","3264340991","UA","UKR","UKRAINE" -"3264340992","3264341503","PL","POL","POLAND" -"3264341504","3264341759","DE","DEU","GERMANY" -"3264341760","3264342015","IT","ITA","ITALY" -"3264342016","3264342783","DE","DEU","GERMANY" -"3264342784","3264343039","ES","ESP","SPAIN" -"3264343040","3264343295","DE","DEU","GERMANY" -"3264343296","3264343551","GB","GBR","UNITED KINGDOM" -"3264343552","3264343807","RO","ROM","ROMANIA" -"3264343808","3264344063","DE","DEU","GERMANY" -"3264344064","3264345087","GB","GBR","UNITED KINGDOM" -"3264345088","3264346111","NL","NLD","NETHERLANDS" -"3264346112","3264347135","SE","SWE","SWEDEN" -"3264347136","3264348159","DE","DEU","GERMANY" -"3264348160","3264350463","FR","FRA","FRANCE" -"3264350720","3264372223","FR","FRA","FRANCE" -"3264372736","3264375039","FR","FRA","FRANCE" -"3264375040","3264376063","SE","SWE","SWEDEN" -"3264376064","3264376319","HR","HRV","CROATIA" -"3264376320","3264376575","UA","UKR","UKRAINE" -"3264376576","3264376831","CH","CHE","SWITZERLAND" -"3264376832","3264377087","UA","UKR","UKRAINE" -"3264377088","3264377343","RU","RUS","RUSSIAN FEDERATION" -"3264377344","3264377599","IT","ITA","ITALY" -"3264377600","3264378111","RU","RUS","RUSSIAN FEDERATION" -"3264378112","3264378367","SE","SWE","SWEDEN" -"3264378368","3264378623","DE","DEU","GERMANY" -"3264378624","3264378879","RU","RUS","RUSSIAN FEDERATION" -"3264378880","3264379135","PL","POL","POLAND" -"3264379136","3264379391","BE","BEL","BELGIUM" -"3264379392","3264379647","RU","RUS","RUSSIAN FEDERATION" -"3264379648","3264380159","DE","DEU","GERMANY" -"3264380160","3264380415","RO","ROM","ROMANIA" -"3264380416","3264380671","CH","CHE","SWITZERLAND" -"3264380672","3264380927","NL","NLD","NETHERLANDS" -"3264380928","3264381951","PL","POL","POLAND" -"3264381952","3264385023","UA","UKR","UKRAINE" -"3264385024","3264386047","DE","DEU","GERMANY" -"3264386048","3264387071","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3264387072","3264388095","LB","LBN","LEBANON" -"3264388096","3264389119","UA","UKR","UKRAINE" -"3264390144","3264391167","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3264391168","3264392191","SE","SWE","SWEDEN" -"3264392192","3264393215","FR","FRA","FRANCE" -"3264393216","3264394239","DE","DEU","GERMANY" -"3264394240","3264395263","UA","UKR","UKRAINE" -"3264395264","3264396287","AT","AUT","AUSTRIA" -"3264397312","3264398335","GB","GBR","UNITED KINGDOM" -"3264398336","3264399359","UA","UKR","UKRAINE" -"3264399360","3264400383","RU","RUS","RUSSIAN FEDERATION" -"3264400384","3264401407","PA","PAN","PANAMA" -"3264401408","3264402431","DE","DEU","GERMANY" -"3264402432","3264403455","CH","CHE","SWITZERLAND" -"3264403456","3264404479","PL","POL","POLAND" -"3264404480","3264405503","UA","UKR","UKRAINE" -"3264405504","3264406527","FR","FRA","FRANCE" -"3264406528","3264407551","UA","UKR","UKRAINE" -"3264407552","3264408575","BG","BGR","BULGARIA" -"3264408576","3264409599","AE","ARE","UNITED ARAB EMIRATES" -"3264409600","3264410623","RU","RUS","RUSSIAN FEDERATION" -"3264410624","3264411647","NO","NOR","NORWAY" -"3264411648","3264413695","PL","POL","POLAND" -"3264417536","3264431103","CH","CHE","SWITZERLAND" -"3264431104","3264431615","LI","LIE","LIECHTENSTEIN" -"3264431616","3264439039","CH","CHE","SWITZERLAND" -"3264439296","3264439807","CH","CHE","SWITZERLAND" -"3264440320","3264441599","CH","CHE","SWITZERLAND" -"3264442112","3264445439","CH","CHE","SWITZERLAND" -"3264446208","3264446463","FR","FRA","FRANCE" -"3264446464","3264456191","CH","CHE","SWITZERLAND" -"3264456704","3264476671","CH","CHE","SWITZERLAND" -"3264477696","3264483071","CH","CHE","SWITZERLAND" -"3264483072","3264483327","LI","LIE","LIECHTENSTEIN" -"3264483328","3264486527","CH","CHE","SWITZERLAND" -"3264486528","3264486559","LI","LIE","LIECHTENSTEIN" -"3264486560","3264494079","CH","CHE","SWITZERLAND" -"3264494080","3264494335","US","USA","UNITED STATES" -"3264494336","3264544767","CH","CHE","SWITZERLAND" -"3264544768","3264561151","HU","HUN","HUNGARY" -"3264561152","3264562687","RU","RUS","RUSSIAN FEDERATION" -"3264562944","3264563183","RU","RUS","RUSSIAN FEDERATION" -"3264563200","3264564223","ES","ESP","SPAIN" -"3264564224","3264565247","IE","IRL","IRELAND" -"3264565248","3264567295","NL","NLD","NETHERLANDS" -"3264567296","3264567551","PL","POL","POLAND" -"3264567552","3264567807","GB","GBR","UNITED KINGDOM" -"3264567808","3264568319","RU","RUS","RUSSIAN FEDERATION" -"3264568576","3264568831","RU","RUS","RUSSIAN FEDERATION" -"3264569088","3264569343","RU","RUS","RUSSIAN FEDERATION" -"3264569344","3264577535","CZ","CZE","CZECH REPUBLIC" -"3264577536","3264585727","MK","MKD","THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA" -"3264585728","3264593919","FR","FRA","FRANCE" -"3264593920","3264602111","ES","ESP","SPAIN" -"3264602112","3264603135","RU","RUS","RUSSIAN FEDERATION" -"3264603136","3264604159","PL","POL","POLAND" -"3264604160","3264604671","IT","ITA","ITALY" -"3264604672","3264605183","RU","RUS","RUSSIAN FEDERATION" -"3264605184","3264605695","GR","GRC","GREECE" -"3264605696","3264606207","DK","DNK","DENMARK" -"3264606208","3264606463","PL","POL","POLAND" -"3264606464","3264606719","DE","DEU","GERMANY" -"3264606720","3264606975","FR","FRA","FRANCE" -"3264606976","3264607231","BE","BEL","BELGIUM" -"3264607232","3264607487","IT","ITA","ITALY" -"3264607488","3264610303","DE","DEU","GERMANY" -"3264610304","3264611583","GB","GBR","UNITED KINGDOM" -"3264611584","3264612095","FR","FRA","FRANCE" -"3264612096","3264612351","GB","GBR","UNITED KINGDOM" -"3264612352","3264612479","FR","FRA","FRANCE" -"3264612480","3264612511","GB","GBR","UNITED KINGDOM" -"3264612512","3264612591","FR","FRA","FRANCE" -"3264612592","3264613119","GB","GBR","UNITED KINGDOM" -"3264613120","3264614399","FR","FRA","FRANCE" -"3264614400","3264614431","GB","GBR","UNITED KINGDOM" -"3264614432","3264614447","FR","FRA","FRANCE" -"3264614448","3264614463","GB","GBR","UNITED KINGDOM" -"3264614464","3264614527","FR","FRA","FRANCE" -"3264614528","3264614559","GB","GBR","UNITED KINGDOM" -"3264614560","3264614591","FR","FRA","FRANCE" -"3264614592","3264614623","GB","GBR","UNITED KINGDOM" -"3264614624","3264614655","FR","FRA","FRANCE" -"3264614656","3264615935","GB","GBR","UNITED KINGDOM" -"3264615936","3264615999","FR","FRA","FRANCE" -"3264616000","3264616095","GB","GBR","UNITED KINGDOM" -"3264616096","3264616159","FR","FRA","FRANCE" -"3264616160","3264616191","GB","GBR","UNITED KINGDOM" -"3264616192","3264616511","FR","FRA","FRANCE" -"3264616512","3264616575","GB","GBR","UNITED KINGDOM" -"3264616576","3264616591","FR","FRA","FRANCE" -"3264616592","3264616639","GB","GBR","UNITED KINGDOM" -"3264616640","3264616655","FR","FRA","FRANCE" -"3264616656","3264616671","GB","GBR","UNITED KINGDOM" -"3264616672","3264616687","FR","FRA","FRANCE" -"3264616688","3264616959","GB","GBR","UNITED KINGDOM" -"3264616960","3264617215","FR","FRA","FRANCE" -"3264617216","3264617311","GB","GBR","UNITED KINGDOM" -"3264617312","3264617983","FR","FRA","FRANCE" -"3264617984","3264618751","GB","GBR","UNITED KINGDOM" -"3264618752","3264619007","FR","FRA","FRANCE" -"3264619008","3264619519","GB","GBR","UNITED KINGDOM" -"3264619520","3264619551","FR","FRA","FRANCE" -"3264619552","3264619583","GB","GBR","UNITED KINGDOM" -"3264619584","3264619615","FR","FRA","FRANCE" -"3264619616","3264619775","GB","GBR","UNITED KINGDOM" -"3264619776","3264620031","FR","FRA","FRANCE" -"3264620032","3264620159","GB","GBR","UNITED KINGDOM" -"3264620160","3264620191","FR","FRA","FRANCE" -"3264620192","3264620543","GB","GBR","UNITED KINGDOM" -"3264620544","3264620927","FR","FRA","FRANCE" -"3264620928","3264621567","GB","GBR","UNITED KINGDOM" -"3264621568","3264621823","FR","FRA","FRANCE" -"3264621824","3264626687","GB","GBR","UNITED KINGDOM" -"3264626688","3264627711","EE","EST","ESTONIA" -"3264627712","3264628735","GR","GRC","GREECE" -"3264628736","3264630783","UA","UKR","UKRAINE" -"3264630784","3264631807","DE","DEU","GERMANY" -"3264631808","3264632831","RO","ROM","ROMANIA" -"3264632832","3264633855","RU","RUS","RUSSIAN FEDERATION" -"3264633856","3264634879","UA","UKR","UKRAINE" -"3264634880","3264636927","PL","POL","POLAND" -"3264637952","3264639999","DK","DNK","DENMARK" -"3264640000","3264641023","BG","BGR","BULGARIA" -"3264641024","3264642047","GB","GBR","UNITED KINGDOM" -"3264642048","3264651263","RU","RUS","RUSSIAN FEDERATION" -"3264651264","3264651775","CH","CHE","SWITZERLAND" -"3264651776","3264652287","IT","ITA","ITALY" -"3264652288","3264652799","RU","RUS","RUSSIAN FEDERATION" -"3264652800","3264653311","PL","POL","POLAND" -"3264653312","3264653823","DE","DEU","GERMANY" -"3264654336","3264654847","DE","DEU","GERMANY" -"3264654848","3264655359","UA","UKR","UKRAINE" -"3264655360","3264655871","GB","GBR","UNITED KINGDOM" -"3264655872","3264656383","RU","RUS","RUSSIAN FEDERATION" -"3264656384","3264656895","BG","BGR","BULGARIA" -"3264656896","3264657407","GB","GBR","UNITED KINGDOM" -"3264657408","3264657919","PL","POL","POLAND" -"3264657920","3264658431","RO","ROM","ROMANIA" -"3264658432","3264659455","DE","DEU","GERMANY" -"3264659456","3264659967","UA","UKR","UKRAINE" -"3264659968","3264660479","GB","GBR","UNITED KINGDOM" -"3264660480","3264660991","PL","POL","POLAND" -"3264660992","3264661503","CH","CHE","SWITZERLAND" -"3264661504","3264662015","GB","GBR","UNITED KINGDOM" -"3264662016","3264662527","RU","RUS","RUSSIAN FEDERATION" -"3264662528","3264663039","UA","UKR","UKRAINE" -"3264663040","3264663551","PL","POL","POLAND" -"3264663552","3264664063","NL","NLD","NETHERLANDS" -"3264664064","3264664575","DE","DEU","GERMANY" -"3264664576","3264665087","NO","NOR","NORWAY" -"3264665088","3264665599","SE","SWE","SWEDEN" -"3264665600","3264666111","RO","ROM","ROMANIA" -"3264666112","3264666623","IL","ISR","ISRAEL" -"3264666624","3264667135","UA","UKR","UKRAINE" -"3264667136","3264667647","SE","SWE","SWEDEN" -"3264667648","3264668159","BE","BEL","BELGIUM" -"3264668160","3264669183","DE","DEU","GERMANY" -"3264669184","3264669695","PL","POL","POLAND" -"3264669696","3264670207","UA","UKR","UKRAINE" -"3264670208","3264670719","RU","RUS","RUSSIAN FEDERATION" -"3264670720","3264671231","FR","FRA","FRANCE" -"3264671232","3264671743","PL","POL","POLAND" -"3264671744","3264672255","DE","DEU","GERMANY" -"3264672256","3264672767","RO","ROM","ROMANIA" -"3264672768","3264673279","CH","CHE","SWITZERLAND" -"3264673280","3264673791","PL","POL","POLAND" -"3264673792","3264674303","CH","CHE","SWITZERLAND" -"3264674304","3264674815","PL","POL","POLAND" -"3264674816","3264675327","GB","GBR","UNITED KINGDOM" -"3264675328","3264675839","RU","RUS","RUSSIAN FEDERATION" -"3264675840","3264741375","NL","NLD","NETHERLANDS" -"3264741376","3264749567","SI","SVN","SLOVENIA" -"3264749568","3264750079","LV","LVA","LATVIA" -"3264750080","3264750591","RU","RUS","RUSSIAN FEDERATION" -"3264750592","3264751103","KG","KGZ","KYRGYZSTAN" -"3264751104","3264751615","DK","DNK","DENMARK" -"3264751616","3264752127","GB","GBR","UNITED KINGDOM" -"3264752128","3264752639","RO","ROM","ROMANIA" -"3264752640","3264753151","NL","NLD","NETHERLANDS" -"3264753152","3264753663","PL","POL","POLAND" -"3264753664","3264754175","IT","ITA","ITALY" -"3264754176","3264754687","PL","POL","POLAND" -"3264754688","3264755199","RU","RUS","RUSSIAN FEDERATION" -"3264755200","3264755711","DE","DEU","GERMANY" -"3264755712","3264756223","PL","POL","POLAND" -"3264756224","3264756735","FI","FIN","FINLAND" -"3264756736","3264757247","PL","POL","POLAND" -"3264757248","3264757759","RU","RUS","RUSSIAN FEDERATION" -"3264757760","3264765951","GB","GBR","UNITED KINGDOM" -"3264765952","3264774143","AT","AUT","AUSTRIA" -"3264774144","3264782335","HU","HUN","HUNGARY" -"3264782336","3264790527","AT","AUT","AUSTRIA" -"3264790528","3264806911","HR","HRV","CROATIA" -"3264806912","3264815103","GB","GBR","UNITED KINGDOM" -"3264815104","3264825343","SE","SWE","SWEDEN" -"3264825344","3264825599","NO","NOR","NORWAY" -"3264825600","3264825855","IT","ITA","ITALY" -"3264825856","3264826111","NL","NLD","NETHERLANDS" -"3264826112","3264826879","GB","GBR","UNITED KINGDOM" -"3264826880","3264827135","NL","NLD","NETHERLANDS" -"3264827136","3264827391","LV","LVA","LATVIA" -"3264827392","3264827647","FR","FRA","FRANCE" -"3264827648","3264828159","GR","GRC","GREECE" -"3264828160","3264828415","CH","CHE","SWITZERLAND" -"3264828416","3264828671","SE","SWE","SWEDEN" -"3264828672","3264828927","MT","MLT","MALTA" -"3264828928","3264829439","DE","DEU","GERMANY" -"3264829440","3264830207","FR","FRA","FRANCE" -"3264830208","3264830463","SE","SWE","SWEDEN" -"3264830464","3264830719","FR","FRA","FRANCE" -"3264830720","3264830975","AT","AUT","AUSTRIA" -"3264830976","3264831231","CH","CHE","SWITZERLAND" -"3264831232","3264831487","PL","POL","POLAND" -"3264831488","3264831743","CH","CHE","SWITZERLAND" -"3264831744","3264831999","FR","FRA","FRANCE" -"3264832000","3264832255","AT","AUT","AUSTRIA" -"3264832256","3264832511","IT","ITA","ITALY" -"3264832512","3264832767","DE","DEU","GERMANY" -"3264832768","3264833023","IL","ISR","ISRAEL" -"3264833024","3264833535","IT","ITA","ITALY" -"3264833536","3264834047","DE","DEU","GERMANY" -"3264834048","3264834559","GB","GBR","UNITED KINGDOM" -"3264834560","3264835327","FR","FRA","FRANCE" -"3264835328","3264835583","AT","AUT","AUSTRIA" -"3264835584","3264835839","RU","RUS","RUSSIAN FEDERATION" -"3264835840","3264836351","DE","DEU","GERMANY" -"3264836352","3264836607","PL","POL","POLAND" -"3264836608","3264836863","DE","DEU","GERMANY" -"3264836864","3264837119","NL","NLD","NETHERLANDS" -"3264837120","3264837375","BG","BGR","BULGARIA" -"3264837376","3264837631","PL","POL","POLAND" -"3264837632","3264839679","AT","AUT","AUSTRIA" -"3264839680","3264840191","UA","UKR","UKRAINE" -"3264840192","3264840447","DE","DEU","GERMANY" -"3264840448","3264840703","IT","ITA","ITALY" -"3264840704","3264840959","PT","PRT","PORTUGAL" -"3264840960","3264841471","PL","POL","POLAND" -"3264841472","3264841727","LV","LVA","LATVIA" -"3264841728","3264844031","GB","GBR","UNITED KINGDOM" -"3264844032","3264844287","BG","BGR","BULGARIA" -"3264844288","3264844799","DE","DEU","GERMANY" -"3264844800","3264845311","UA","UKR","UKRAINE" -"3264845312","3264845951","DE","DEU","GERMANY" -"3264845952","3264846079","GB","GBR","UNITED KINGDOM" -"3264846080","3264846207","UG","UGA","UGANDA" -"3264846208","3264846335","PL","POL","POLAND" -"3264846464","3264846591","NO","NOR","NORWAY" -"3264846592","3264846719","US","USA","UNITED STATES" -"3264846720","3264846847","RU","RUS","RUSSIAN FEDERATION" -"3264846848","3264846911","DK","DNK","DENMARK" -"3264847040","3264847103","GB","GBR","UNITED KINGDOM" -"3264847104","3264847135","FR","FRA","FRANCE" -"3264847136","3264847167","ES","ESP","SPAIN" -"3264847168","3264847199","IE","IRL","IRELAND" -"3264847200","3264847231","NO","NOR","NORWAY" -"3264847264","3264847295","LI","LIE","LIECHTENSTEIN" -"3264847328","3264847359","NL","NLD","NETHERLANDS" -"3264847360","3264847487","FR","FRA","FRANCE" -"3264847488","3264847615","RU","RUS","RUSSIAN FEDERATION" -"3264847616","3264847679","PL","POL","POLAND" -"3264847744","3264847807","BE","BEL","BELGIUM" -"3264847808","3264847871","SE","SWE","SWEDEN" -"3264847872","3264849919","DE","DEU","GERMANY" -"3264849920","3264850431","GB","GBR","UNITED KINGDOM" -"3264850432","3264850687","PL","POL","POLAND" -"3264850688","3264850943","LV","LVA","LATVIA" -"3264850944","3264851967","IT","ITA","ITALY" -"3264851968","3264854015","CH","CHE","SWITZERLAND" -"3264854016","3264854527","DE","DEU","GERMANY" -"3264854784","3264855039","IT","ITA","ITALY" -"3264855040","3264855551","CH","CHE","SWITZERLAND" -"3264855552","3264856063","DE","DEU","GERMANY" -"3264856064","3264861695","IT","ITA","ITALY" -"3264861696","3264862207","FR","FRA","FRANCE" -"3264862208","3264862463","PL","POL","POLAND" -"3264862464","3264862719","AT","AUT","AUSTRIA" -"3264862720","3264862975","GB","GBR","UNITED KINGDOM" -"3264862976","3264863231","DE","DEU","GERMANY" -"3264863232","3264864255","AT","AUT","AUSTRIA" -"3264864256","3264872447","RO","ROM","ROMANIA" -"3264872448","3264888831","GB","GBR","UNITED KINGDOM" -"3264888832","3264897023","RU","RUS","RUSSIAN FEDERATION" -"3264897024","3264905215","GB","GBR","UNITED KINGDOM" -"3264905216","3264906287","CY","CYP","CYPRUS" -"3264906288","3264906291","GR","GRC","GREECE" -"3264906292","3264906295","CY","CYP","CYPRUS" -"3264906296","3264906303","GR","GRC","GREECE" -"3264906304","3264906323","CY","CYP","CYPRUS" -"3264906324","3264906327","GR","GRC","GREECE" -"3264906328","3264906332","CY","CYP","CYPRUS" -"3264906333","3264906335","GR","GRC","GREECE" -"3264906336","3264906339","CY","CYP","CYPRUS" -"3264906340","3264906351","GR","GRC","GREECE" -"3264906352","3264906367","CY","CYP","CYPRUS" -"3264906368","3264906411","GR","GRC","GREECE" -"3264906412","3264906495","CY","CYP","CYPRUS" -"3264906496","3264906623","GR","GRC","GREECE" -"3264906624","3264906751","CY","CYP","CYPRUS" -"3264906752","3264906761","GR","GRC","GREECE" -"3264906762","3264906879","CY","CYP","CYPRUS" -"3264906880","3264906895","GR","GRC","GREECE" -"3264906896","3264906911","CY","CYP","CYPRUS" -"3264906912","3264906919","GR","GRC","GREECE" -"3264906920","3264906983","CY","CYP","CYPRUS" -"3264906984","3264906995","GR","GRC","GREECE" -"3264906996","3264907135","CY","CYP","CYPRUS" -"3264907136","3264907143","GR","GRC","GREECE" -"3264907144","3264907151","CY","CYP","CYPRUS" -"3264907152","3264907155","GR","GRC","GREECE" -"3264907156","3264907639","CY","CYP","CYPRUS" -"3264907640","3264907647","GR","GRC","GREECE" -"3264907648","3264907663","CY","CYP","CYPRUS" -"3264907664","3264907671","GR","GRC","GREECE" -"3264907672","3264907679","CY","CYP","CYPRUS" -"3264907680","3264907683","GR","GRC","GREECE" -"3264907684","3264907687","CY","CYP","CYPRUS" -"3264907688","3264907691","GR","GRC","GREECE" -"3264907692","3264907695","CY","CYP","CYPRUS" -"3264907696","3264907703","GR","GRC","GREECE" -"3264907704","3264907715","CY","CYP","CYPRUS" -"3264907716","3264907727","GR","GRC","GREECE" -"3264907728","3264907735","CY","CYP","CYPRUS" -"3264907736","3264907743","GR","GRC","GREECE" -"3264907744","3264907755","CY","CYP","CYPRUS" -"3264907756","3264907759","GR","GRC","GREECE" -"3264907760","3264907772","CY","CYP","CYPRUS" -"3264907773","3264907775","GR","GRC","GREECE" -"3264907776","3264907919","CY","CYP","CYPRUS" -"3264907920","3264907927","GR","GRC","GREECE" -"3264907928","3264907935","CY","CYP","CYPRUS" -"3264907936","3264907939","GR","GRC","GREECE" -"3264907940","3264907963","CY","CYP","CYPRUS" -"3264907964","3264907971","GR","GRC","GREECE" -"3264907972","3264907987","CY","CYP","CYPRUS" -"3264907988","3264907991","GR","GRC","GREECE" -"3264907992","3264908011","CY","CYP","CYPRUS" -"3264908012","3264908019","GR","GRC","GREECE" -"3264908020","3264908023","CY","CYP","CYPRUS" -"3264908024","3264908031","GR","GRC","GREECE" -"3264908032","3264908063","CY","CYP","CYPRUS" -"3264908064","3264908071","GR","GRC","GREECE" -"3264908072","3264908095","CY","CYP","CYPRUS" -"3264908096","3264908103","GR","GRC","GREECE" -"3264908104","3264908111","CY","CYP","CYPRUS" -"3264908112","3264908119","GR","GRC","GREECE" -"3264908120","3264908167","CY","CYP","CYPRUS" -"3264908168","3264908175","GR","GRC","GREECE" -"3264908176","3264908183","CY","CYP","CYPRUS" -"3264908184","3264908191","GR","GRC","GREECE" -"3264908192","3264908223","CY","CYP","CYPRUS" -"3264908224","3264908255","GR","GRC","GREECE" -"3264908256","3264908286","CY","CYP","CYPRUS" -"3264908287","3264908799","GR","GRC","GREECE" -"3264908800","3264909055","GB","GBR","UNITED KINGDOM" -"3264909056","3264909311","GR","GRC","GREECE" -"3264909312","3264909639","CY","CYP","CYPRUS" -"3264909640","3264909647","GR","GRC","GREECE" -"3264909648","3264909655","CY","CYP","CYPRUS" -"3264909656","3264909663","GR","GRC","GREECE" -"3264909664","3264910590","CY","CYP","CYPRUS" -"3264910591","3264910591","GR","GRC","GREECE" -"3264910592","3264910607","CY","CYP","CYPRUS" -"3264910608","3264910623","GR","GRC","GREECE" -"3264910624","3264910655","CY","CYP","CYPRUS" -"3264910656","3264910671","GR","GRC","GREECE" -"3264910672","3264910696","CY","CYP","CYPRUS" -"3264910697","3264910699","GR","GRC","GREECE" -"3264910700","3264910707","CY","CYP","CYPRUS" -"3264910708","3264910719","GR","GRC","GREECE" -"3264910720","3264910815","CY","CYP","CYPRUS" -"3264910816","3264911103","GR","GRC","GREECE" -"3264911104","3264911651","CY","CYP","CYPRUS" -"3264911652","3264911655","GR","GRC","GREECE" -"3264911656","3264911679","CY","CYP","CYPRUS" -"3264911680","3264911703","GR","GRC","GREECE" -"3264911704","3264911743","CY","CYP","CYPRUS" -"3264911744","3264911807","GR","GRC","GREECE" -"3264911808","3264912131","CY","CYP","CYPRUS" -"3264912132","3264912135","GR","GRC","GREECE" -"3264912136","3264912139","CY","CYP","CYPRUS" -"3264912140","3264912143","GR","GRC","GREECE" -"3264912144","3264912147","CY","CYP","CYPRUS" -"3264912148","3264912151","GR","GRC","GREECE" -"3264912152","3264912167","CY","CYP","CYPRUS" -"3264912168","3264912183","GR","GRC","GREECE" -"3264912184","3264912191","CY","CYP","CYPRUS" -"3264912192","3264912219","GR","GRC","GREECE" -"3264912220","3264912223","CY","CYP","CYPRUS" -"3264912224","3264912231","GR","GRC","GREECE" -"3264912232","3264912235","CY","CYP","CYPRUS" -"3264912236","3264912239","GR","GRC","GREECE" -"3264912240","3264912243","CY","CYP","CYPRUS" -"3264912244","3264912251","GR","GRC","GREECE" -"3264912252","3264912263","CY","CYP","CYPRUS" -"3264912264","3264912279","GR","GRC","GREECE" -"3264912280","3264912283","CY","CYP","CYPRUS" -"3264912284","3264912287","GR","GRC","GREECE" -"3264912288","3264912295","CY","CYP","CYPRUS" -"3264912296","3264912319","GR","GRC","GREECE" -"3264912320","3264912655","CY","CYP","CYPRUS" -"3264912656","3264912663","GR","GRC","GREECE" -"3264912664","3264912815","CY","CYP","CYPRUS" -"3264912816","3264912839","GR","GRC","GREECE" -"3264912840","3264912843","CY","CYP","CYPRUS" -"3264912844","3264912863","GR","GRC","GREECE" -"3264912864","3264912879","CY","CYP","CYPRUS" -"3264912880","3264912895","GR","GRC","GREECE" -"3264912896","3264913151","CY","CYP","CYPRUS" -"3264913152","3264913183","GR","GRC","GREECE" -"3264913184","3264913191","CY","CYP","CYPRUS" -"3264913192","3264913199","GR","GRC","GREECE" -"3264913200","3264913223","CY","CYP","CYPRUS" -"3264913224","3264913231","GR","GRC","GREECE" -"3264913232","3264913243","CY","CYP","CYPRUS" -"3264913244","3264913263","GR","GRC","GREECE" -"3264913264","3264913279","CY","CYP","CYPRUS" -"3264913280","3264913295","GR","GRC","GREECE" -"3264913296","3264913299","CY","CYP","CYPRUS" -"3264913300","3264913303","GR","GRC","GREECE" -"3264913304","3264913311","CY","CYP","CYPRUS" -"3264913312","3264913327","GR","GRC","GREECE" -"3264913328","3264913375","CY","CYP","CYPRUS" -"3264913376","3264913383","GR","GRC","GREECE" -"3264913384","3264913399","CY","CYP","CYPRUS" -"3264913400","3264913407","GR","GRC","GREECE" -"3264913408","3264917247","GB","GBR","UNITED KINGDOM" -"3264917248","3264917375","NL","NLD","NETHERLANDS" -"3264917376","3264921599","GB","GBR","UNITED KINGDOM" -"3264921600","3264922303","LU","LUX","LUXEMBOURG" -"3264922304","3264922319","SA","SAU","SAUDI ARABIA" -"3264922320","3264929791","LU","LUX","LUXEMBOURG" -"3264929792","3264937983","SK","SVK","SLOVAKIA" -"3264937984","3265003519","GB","GBR","UNITED KINGDOM" -"3265003520","3265006335","DE","DEU","GERMANY" -"3265006592","3265010943","DE","DEU","GERMANY" -"3265011200","3265043199","DE","DEU","GERMANY" -"3265043456","3265052671","DE","DEU","GERMANY" -"3265053440","3265055231","DE","DEU","GERMANY" -"3265055232","3265055743","FR","FRA","FRANCE" -"3265055744","3265069055","DE","DEU","GERMANY" -"3265069056","3265134591","FI","FIN","FINLAND" -"3265134592","3265142783","CH","CHE","SWITZERLAND" -"3265142784","3265150975","MT","MLT","MALTA" -"3265150976","3265159167","AD","AND","ANDORRA" -"3265159168","3265167359","FR","FRA","FRANCE" -"3265167360","3265175551","AT","AUT","AUSTRIA" -"3265175552","3265183743","NL","NLD","NETHERLANDS" -"3265183744","3265191935","BY","BLR","BELARUS" -"3265191936","3265200127","CH","CHE","SWITZERLAND" -"3265200128","3265216767","GB","GBR","UNITED KINGDOM" -"3265216768","3265217023","FR","FRA","FRANCE" -"3265217024","3265218559","GB","GBR","UNITED KINGDOM" -"3265218560","3265219071","NL","NLD","NETHERLANDS" -"3265219072","3265257471","GB","GBR","UNITED KINGDOM" -"3265257472","3265259519","NL","NLD","NETHERLANDS" -"3265259520","3265265663","GB","GBR","UNITED KINGDOM" -"3265265664","3265286463","SK","SVK","SLOVAKIA" -"3265286464","3265286527","SR","SUR","SURINAME" -"3265286528","3265331199","SK","SVK","SLOVAKIA" -"3265331200","3265340415","GB","GBR","UNITED KINGDOM" -"3265340416","3265340671","DE","DEU","GERMANY" -"3265340672","3265340927","GB","GBR","UNITED KINGDOM" -"3265340928","3265341183","CH","CHE","SWITZERLAND" -"3265341184","3265341279","AT","AUT","AUSTRIA" -"3265341312","3265341439","FR","FRA","FRANCE" -"3265341440","3265341695","GB","GBR","UNITED KINGDOM" -"3265341696","3265341951","DE","DEU","GERMANY" -"3265341952","3265343487","GB","GBR","UNITED KINGDOM" -"3265343488","3265347583","DE","DEU","GERMANY" -"3265347584","3265352703","FR","FRA","FRANCE" -"3265352704","3265352959","BE","BEL","BELGIUM" -"3265352960","3265353215","FR","FRA","FRANCE" -"3265353216","3265355263","DE","DEU","GERMANY" -"3265355264","3265355775","FR","FRA","FRANCE" -"3265355776","3265357055","BE","BEL","BELGIUM" -"3265357056","3265357311","FR","FRA","FRANCE" -"3265357312","3265357567","DE","DEU","GERMANY" -"3265357568","3265357823","BE","BEL","BELGIUM" -"3265357824","3265358847","NL","NLD","NETHERLANDS" -"3265358848","3265359103","BE","BEL","BELGIUM" -"3265359104","3265359871","NL","NLD","NETHERLANDS" -"3265359872","3265360127","CH","CHE","SWITZERLAND" -"3265360128","3265360383","GB","GBR","UNITED KINGDOM" -"3265360384","3265360895","CH","CHE","SWITZERLAND" -"3265360896","3265361919","GB","GBR","UNITED KINGDOM" -"3265361920","3265363967","IT","ITA","ITALY" -"3265363968","3265366015","ES","ESP","SPAIN" -"3265366080","3265366271","BE","BEL","BELGIUM" -"3265366272","3265366527","HU","HUN","HUNGARY" -"3265366528","3265367039","DK","DNK","DENMARK" -"3265367040","3265367295","AT","AUT","AUSTRIA" -"3265367296","3265367551","ES","ESP","SPAIN" -"3265367552","3265367807","SE","SWE","SWEDEN" -"3265367808","3265369343","DK","DNK","DENMARK" -"3265369344","3265369599","IL","ISR","ISRAEL" -"3265369600","3265369855","SE","SWE","SWEDEN" -"3265369856","3265370111","DE","DEU","GERMANY" -"3265370112","3265370623","DK","DNK","DENMARK" -"3265370624","3265370879","GB","GBR","UNITED KINGDOM" -"3265370880","3265376255","DE","DEU","GERMANY" -"3265376256","3265376511","IT","ITA","ITALY" -"3265376512","3265378303","GB","GBR","UNITED KINGDOM" -"3265378304","3265380095","NL","NLD","NETHERLANDS" -"3265380096","3265382399","GB","GBR","UNITED KINGDOM" -"3265382400","3265382911","CH","CHE","SWITZERLAND" -"3265382912","3265384447","GB","GBR","UNITED KINGDOM" -"3265384448","3265386495","DE","DEU","GERMANY" -"3265386496","3265387519","NL","NLD","NETHERLANDS" -"3265388544","3265396735","GB","GBR","UNITED KINGDOM" -"3265396736","3265464847","DE","DEU","GERMANY" -"3265464848","3265464863","AT","AUT","AUSTRIA" -"3265464864","3265465343","DE","DEU","GERMANY" -"3265465344","3265465599","AT","AUT","AUSTRIA" -"3265465600","3265527807","DE","DEU","GERMANY" -"3265527808","3265569279","GB","GBR","UNITED KINGDOM" -"3265569280","3265569791","AE","ARE","UNITED ARAB EMIRATES" -"3265569792","3265593343","GB","GBR","UNITED KINGDOM" -"3265593344","3265594367","RU","RUS","RUSSIAN FEDERATION" -"3265594368","3265595391","UA","UKR","UKRAINE" -"3265595392","3265595903","PL","POL","POLAND" -"3265595904","3265596415","RU","RUS","RUSSIAN FEDERATION" -"3265596416","3265596927","GB","GBR","UNITED KINGDOM" -"3265596928","3265597439","FR","FRA","FRANCE" -"3265597440","3265599999","RU","RUS","RUSSIAN FEDERATION" -"3265600000","3265600511","HU","HUN","HUNGARY" -"3265600512","3265601023","GB","GBR","UNITED KINGDOM" -"3265601024","3265601535","RU","RUS","RUSSIAN FEDERATION" -"3265601536","3265601791","SE","SWE","SWEDEN" -"3265601792","3265602047","CH","CHE","SWITZERLAND" -"3265602048","3265602559","NL","NLD","NETHERLANDS" -"3265602560","3265602815","IT","ITA","ITALY" -"3265602816","3265603071","IE","IRL","IRELAND" -"3265603072","3265603327","DK","DNK","DENMARK" -"3265603328","3265603583","MD","MDA","REPUBLIC OF MOLDOVA" -"3265603584","3265603839","DE","DEU","GERMANY" -"3265603840","3265604095","PL","POL","POLAND" -"3265604096","3265604351","SA","SAU","SAUDI ARABIA" -"3265604352","3265604607","FR","FRA","FRANCE" -"3265604608","3265604863","CH","CHE","SWITZERLAND" -"3265604864","3265605119","FR","FRA","FRANCE" -"3265605120","3265605375","UA","UKR","UKRAINE" -"3265605376","3265605631","CZ","CZE","CZECH REPUBLIC" -"3265605632","3265605887","PL","POL","POLAND" -"3265605888","3265606143","FR","FRA","FRANCE" -"3265606400","3265606655","DE","DEU","GERMANY" -"3265606656","3265606911","AT","AUT","AUSTRIA" -"3265606912","3265607167","FR","FRA","FRANCE" -"3265607168","3265607423","PL","POL","POLAND" -"3265607424","3265607935","DK","DNK","DENMARK" -"3265607936","3265608191","CZ","CZE","CZECH REPUBLIC" -"3265608192","3265608447","RU","RUS","RUSSIAN FEDERATION" -"3265608448","3265608703","SE","SWE","SWEDEN" -"3265608704","3265608959","GB","GBR","UNITED KINGDOM" -"3265608960","3265609215","RU","RUS","RUSSIAN FEDERATION" -"3265609216","3265609727","UA","UKR","UKRAINE" -"3265609728","3265617919","NL","NLD","NETHERLANDS" -"3265617920","3265626111","SI","SVN","SLOVENIA" -"3265626112","3265634303","JO","JOR","JORDAN" -"3265634304","3265642287","IE","IRL","IRELAND" -"3265642288","3265642303","US","USA","UNITED STATES" -"3265642304","3265642495","IE","IRL","IRELAND" -"3265642496","3265650687","GB","GBR","UNITED KINGDOM" -"3265650688","3265658879","SE","SWE","SWEDEN" -"3265658880","3265724415","AT","AUT","AUSTRIA" -"3265724416","3265789951","FR","FRA","FRANCE" -"3265789952","3265824767","GB","GBR","UNITED KINGDOM" -"3265824768","3265825023","US","USA","UNITED STATES" -"3265825024","3265887487","GB","GBR","UNITED KINGDOM" -"3265887488","3265887743","PT","PRT","PORTUGAL" -"3265887744","3265888255","PL","POL","POLAND" -"3265888256","3265902335","GB","GBR","UNITED KINGDOM" -"3265902336","3265902591","FR","FRA","FRANCE" -"3265902592","3265904383","GB","GBR","UNITED KINGDOM" -"3265904384","3265904639","RO","ROM","ROMANIA" -"3265904640","3265904895","DE","DEU","GERMANY" -"3265904896","3265905151","UA","UKR","UKRAINE" -"3265905152","3265905663","GB","GBR","UNITED KINGDOM" -"3265905664","3265905919","IE","IRL","IRELAND" -"3265905920","3265906175","GB","GBR","UNITED KINGDOM" -"3265906176","3265906431","DE","DEU","GERMANY" -"3265906432","3265906687","CH","CHE","SWITZERLAND" -"3265906688","3265906943","AT","AUT","AUSTRIA" -"3265906944","3265907199","ES","ESP","SPAIN" -"3265907200","3265907455","DE","DEU","GERMANY" -"3265907456","3265907711","FR","FRA","FRANCE" -"3265907712","3265907967","MD","MDA","REPUBLIC OF MOLDOVA" -"3265907968","3265908735","UA","UKR","UKRAINE" -"3265908736","3265908991","NL","NLD","NETHERLANDS" -"3265908992","3265909247","RO","ROM","ROMANIA" -"3265909248","3265909503","UA","UKR","UKRAINE" -"3265909504","3265909759","DE","DEU","GERMANY" -"3265909760","3265910015","RO","ROM","ROMANIA" -"3265910016","3265910271","PL","POL","POLAND" -"3265910272","3265910527","FR","FRA","FRANCE" -"3265910528","3265910783","PT","PRT","PORTUGAL" -"3265911040","3265911551","GB","GBR","UNITED KINGDOM" -"3265911552","3265911807","CH","CHE","SWITZERLAND" -"3265911808","3265912063","PL","POL","POLAND" -"3265912064","3265912319","GB","GBR","UNITED KINGDOM" -"3265912320","3265912575","DE","DEU","GERMANY" -"3265912576","3265912831","RO","ROM","ROMANIA" -"3265912832","3265913087","CZ","CZE","CZECH REPUBLIC" -"3265913088","3265913343","SE","SWE","SWEDEN" -"3265913344","3265914367","PL","POL","POLAND" -"3265914368","3265914623","RU","RUS","RUSSIAN FEDERATION" -"3265914624","3265914879","BG","BGR","BULGARIA" -"3265914880","3265915135","GR","GRC","GREECE" -"3265915136","3265915391","RO","ROM","ROMANIA" -"3265915392","3265915647","GB","GBR","UNITED KINGDOM" -"3265915648","3265915903","RO","ROM","ROMANIA" -"3265915904","3265916415","PL","POL","POLAND" -"3265916416","3265916671","UA","UKR","UKRAINE" -"3265916672","3265916927","DE","DEU","GERMANY" -"3265916928","3265917183","FR","FRA","FRANCE" -"3265917184","3265917439","PL","POL","POLAND" -"3265917440","3265917695","RU","RUS","RUSSIAN FEDERATION" -"3265917696","3265917951","SE","SWE","SWEDEN" -"3265917952","3265918207","GB","GBR","UNITED KINGDOM" -"3265918464","3265918719","AT","AUT","AUSTRIA" -"3265918720","3265918975","RU","RUS","RUSSIAN FEDERATION" -"3265918976","3265919231","NL","NLD","NETHERLANDS" -"3265919232","3265919487","FR","FRA","FRANCE" -"3265919488","3265919743","RU","RUS","RUSSIAN FEDERATION" -"3265919744","3265919999","DK","DNK","DENMARK" -"3265920000","3265920255","CZ","CZE","CZECH REPUBLIC" -"3265920256","3265920511","TR","TUR","TURKEY" -"3265920512","3265921023","GB","GBR","UNITED KINGDOM" -"3265921024","3265986559","AE","ARE","UNITED ARAB EMIRATES" -"3265986560","3266052095","NL","NLD","NETHERLANDS" -"3266052096","3266322431","DE","DEU","GERMANY" -"3266322432","3266330623","LT","LTU","LITHUANIA" -"3266330624","3266338815","GB","GBR","UNITED KINGDOM" -"3266338816","3266339071","RU","RUS","RUSSIAN FEDERATION" -"3266339072","3266339327","UA","UKR","UKRAINE" -"3266339328","3266339583","ES","ESP","SPAIN" -"3266339584","3266339839","GB","GBR","UNITED KINGDOM" -"3266339840","3266340095","RU","RUS","RUSSIAN FEDERATION" -"3266340096","3266340607","PL","POL","POLAND" -"3266340608","3266340863","FI","FIN","FINLAND" -"3266340864","3266341119","CH","CHE","SWITZERLAND" -"3266341120","3266341375","GB","GBR","UNITED KINGDOM" -"3266341376","3266341631","DE","DEU","GERMANY" -"3266341632","3266341887","GB","GBR","UNITED KINGDOM" -"3266341888","3266342143","KW","KWT","KUWAIT" -"3266342144","3266342399","CH","CHE","SWITZERLAND" -"3266342400","3266342655","BE","BEL","BELGIUM" -"3266342656","3266342911","KG","KGZ","KYRGYZSTAN" -"3266342912","3266343167","SI","SVN","SLOVENIA" -"3266343168","3266343423","GR","GRC","GREECE" -"3266343424","3266343679","RU","RUS","RUSSIAN FEDERATION" -"3266343680","3266343935","RO","ROM","ROMANIA" -"3266343936","3266344191","CH","CHE","SWITZERLAND" -"3266344192","3266344447","UA","UKR","UKRAINE" -"3266344448","3266344703","RU","RUS","RUSSIAN FEDERATION" -"3266344704","3266344959","ES","ESP","SPAIN" -"3266345216","3266345727","DE","DEU","GERMANY" -"3266345728","3266345983","DK","DNK","DENMARK" -"3266345984","3266346495","GB","GBR","UNITED KINGDOM" -"3266346496","3266346751","IT","ITA","ITALY" -"3266346752","3266347007","FR","FRA","FRANCE" -"3266347008","3266347263","GB","GBR","UNITED KINGDOM" -"3266351360","3266352623","GB","GBR","UNITED KINGDOM" -"3266352896","3266353567","GB","GBR","UNITED KINGDOM" -"3266353584","3266353591","GB","GBR","UNITED KINGDOM" -"3266353664","3266353671","GB","GBR","UNITED KINGDOM" -"3266353680","3266353687","GB","GBR","UNITED KINGDOM" -"3266353776","3266353783","US","USA","UNITED STATES" -"3266353856","3266353863","GB","GBR","UNITED KINGDOM" -"3266353880","3266353887","GB","GBR","UNITED KINGDOM" -"3266353896","3266353903","GB","GBR","UNITED KINGDOM" -"3266353920","3266355199","GB","GBR","UNITED KINGDOM" -"3266355200","3266363391","RO","ROM","ROMANIA" -"3266363392","3266371583","GB","GBR","UNITED KINGDOM" -"3266371584","3266379775","HU","HUN","HUNGARY" -"3266379776","3266380799","UA","UKR","UKRAINE" -"3266380800","3266381823","PL","POL","POLAND" -"3266381824","3266382847","FR","FRA","FRANCE" -"3266382848","3266383871","RU","RUS","RUSSIAN FEDERATION" -"3266383872","3266384895","IL","ISR","ISRAEL" -"3266384896","3266385919","RU","RUS","RUSSIAN FEDERATION" -"3266385920","3266386943","UA","UKR","UKRAINE" -"3266386944","3266387967","PL","POL","POLAND" -"3266387968","3266388375","FR","FRA","FRANCE" -"3266388376","3266388378","NL","NLD","NETHERLANDS" -"3266388379","3266389247","FR","FRA","FRANCE" -"3266389248","3266389327","LU","LUX","LUXEMBOURG" -"3266389328","3266395135","FR","FRA","FRANCE" -"3266395136","3266395903","NL","NLD","NETHERLANDS" -"3266395904","3266396159","FR","FRA","FRANCE" -"3266396160","3266412543","IT","ITA","ITALY" -"3266412544","3266420735","AT","AUT","AUSTRIA" -"3266420736","3266428927","GB","GBR","UNITED KINGDOM" -"3266428928","3266437119","GR","GRC","GREECE" -"3266437120","3266445311","GL","GRL","GREENLAND" -"3266445312","3266510847","NL","NLD","NETHERLANDS" -"3266510848","3266543615","ES","ESP","SPAIN" -"3266543616","3266576383","IT","ITA","ITALY" -"3266576384","3266603519","DE","DEU","GERMANY" -"3266604032","3266617327","DE","DEU","GERMANY" -"3266617344","3266634383","DE","DEU","GERMANY" -"3266634392","3266634399","EE","EST","ESTONIA" -"3266634400","3266641919","DE","DEU","GERMANY" -"3266641920","3266707455","PL","POL","POLAND" -"3266707456","3266772991","DK","DNK","DENMARK" -"3266772992","3266781183","IT","ITA","ITALY" -"3266781184","3266789375","PL","POL","POLAND" -"3266789376","3266796543","SM","SMR","SAN MARINO" -"3266796544","3266796799","IT","ITA","ITALY" -"3266796800","3266797567","SM","SMR","SAN MARINO" -"3266797568","3266797823","GB","GBR","UNITED KINGDOM" -"3266797824","3266798079","NL","NLD","NETHERLANDS" -"3266798080","3266799103","GB","GBR","UNITED KINGDOM" -"3266799104","3266799615","NL","NLD","NETHERLANDS" -"3266799616","3266800127","GB","GBR","UNITED KINGDOM" -"3266800128","3266800319","NL","NLD","NETHERLANDS" -"3266800320","3266800639","GB","GBR","UNITED KINGDOM" -"3266800640","3266800703","NL","NLD","NETHERLANDS" -"3266800704","3266800727","GB","GBR","UNITED KINGDOM" -"3266800728","3266800735","NL","NLD","NETHERLANDS" -"3266800736","3266800895","GB","GBR","UNITED KINGDOM" -"3266800896","3266801215","NL","NLD","NETHERLANDS" -"3266801216","3266801407","GB","GBR","UNITED KINGDOM" -"3266801408","3266801471","NL","NLD","NETHERLANDS" -"3266801472","3266801487","GB","GBR","UNITED KINGDOM" -"3266801488","3266801519","NL","NLD","NETHERLANDS" -"3266801520","3266801535","GB","GBR","UNITED KINGDOM" -"3266801536","3266801599","NL","NLD","NETHERLANDS" -"3266801600","3266801615","GB","GBR","UNITED KINGDOM" -"3266801616","3266801647","NL","NLD","NETHERLANDS" -"3266801648","3266801663","GB","GBR","UNITED KINGDOM" -"3266801664","3266801919","NL","NLD","NETHERLANDS" -"3266801920","3266802943","GB","GBR","UNITED KINGDOM" -"3266802944","3266803199","NL","NLD","NETHERLANDS" -"3266803200","3266803727","GB","GBR","UNITED KINGDOM" -"3266803728","3266803831","NL","NLD","NETHERLANDS" -"3266803832","3266804223","GB","GBR","UNITED KINGDOM" -"3266804224","3266804479","NL","NLD","NETHERLANDS" -"3266804480","3266804735","GB","GBR","UNITED KINGDOM" -"3266804736","3266804991","NL","NLD","NETHERLANDS" -"3266804992","3266805503","GB","GBR","UNITED KINGDOM" -"3266805504","3266805759","NL","NLD","NETHERLANDS" -"3266805760","3266809343","AT","AUT","AUSTRIA" -"3266809344","3266809599","LI","LIE","LIECHTENSTEIN" -"3266809600","3266813951","AT","AUT","AUSTRIA" -"3266813952","3266822143","UA","UKR","UKRAINE" -"3266822144","3266830335","FR","FRA","FRANCE" -"3266830336","3266836479","BE","BEL","BELGIUM" -"3266836480","3266837503","LU","LUX","LUXEMBOURG" -"3266837504","3266838527","BE","BEL","BELGIUM" -"3266838528","3266969599","IT","ITA","ITALY" -"3266969600","3267008767","RU","RUS","RUSSIAN FEDERATION" -"3267008768","3267009023","UA","UKR","UKRAINE" -"3267009024","3267030095","RU","RUS","RUSSIAN FEDERATION" -"3267030096","3267030103","KZ","KAZ","KAZAKHSTAN" -"3267030104","3267032575","RU","RUS","RUSSIAN FEDERATION" -"3267032576","3267032831","KZ","KAZ","KAZAKHSTAN" -"3267032832","3267035135","RU","RUS","RUSSIAN FEDERATION" -"3267035136","3267039231","NO","NOR","NORWAY" -"3267039232","3267040255","DE","DEU","GERMANY" -"3267040256","3267041279","RO","ROM","ROMANIA" -"3267041280","3267043327","UA","UKR","UKRAINE" -"3267043328","3267044351","GB","GBR","UNITED KINGDOM" -"3267044352","3267045375","RU","RUS","RUSSIAN FEDERATION" -"3267045376","3267046399","PL","POL","POLAND" -"3267046400","3267047423","NL","NLD","NETHERLANDS" -"3267047424","3267048447","UA","UKR","UKRAINE" -"3267048448","3267049471","PL","POL","POLAND" -"3267050496","3267051519","SE","SWE","SWEDEN" -"3267051520","3267052543","DE","DEU","GERMANY" -"3267052544","3267053567","LV","LVA","LATVIA" -"3267053568","3267054591","PL","POL","POLAND" -"3267054592","3267055615","NL","NLD","NETHERLANDS" -"3267055616","3267056639","PS","PSE","PALESTINIAN TERRITORY, OCCUPIED" -"3267056640","3267057663","IL","ISR","ISRAEL" -"3267057664","3267058687","CH","CHE","SWITZERLAND" -"3267058688","3267059711","AT","AUT","AUSTRIA" -"3267059712","3267060735","NL","NLD","NETHERLANDS" -"3267060736","3267061759","LV","LVA","LATVIA" -"3267061760","3267063807","UA","UKR","UKRAINE" -"3267063808","3267064831","DE","DEU","GERMANY" -"3267064832","3267065855","PL","POL","POLAND" -"3267065856","3267066879","RO","ROM","ROMANIA" -"3267066880","3267067903","IT","ITA","ITALY" -"3267067904","3267068927","UA","UKR","UKRAINE" -"3267068928","3267069951","BG","BGR","BULGARIA" -"3267069952","3267070975","RO","ROM","ROMANIA" -"3267070976","3267071999","DE","DEU","GERMANY" -"3267072000","3267073023","PL","POL","POLAND" -"3267073024","3267075071","UA","UKR","UKRAINE" -"3267075072","3267076095","CH","CHE","SWITZERLAND" -"3267076096","3267078143","DE","DEU","GERMANY" -"3267078144","3267079167","PL","POL","POLAND" -"3267079168","3267080191","IT","ITA","ITALY" -"3267080192","3267081215","AT","AUT","AUSTRIA" -"3267081216","3267082239","PL","POL","POLAND" -"3267082240","3267083263","DE","DEU","GERMANY" -"3267083264","3267084287","RO","ROM","ROMANIA" -"3267084288","3267085311","FR","FRA","FRANCE" -"3267085312","3267086335","RU","RUS","RUSSIAN FEDERATION" -"3267086336","3267087359","PL","POL","POLAND" -"3267087360","3267088383","RU","RUS","RUSSIAN FEDERATION" -"3267088384","3267089407","UA","UKR","UKRAINE" -"3267089408","3267090431","FI","FIN","FINLAND" -"3267090432","3267091455","UA","UKR","UKRAINE" -"3267091456","3267092479","DE","DEU","GERMANY" -"3267092480","3267093503","FR","FRA","FRANCE" -"3267093504","3267094527","UA","UKR","UKRAINE" -"3267094528","3267095551","GB","GBR","UNITED KINGDOM" -"3267095552","3267096575","PL","POL","POLAND" -"3267096576","3267097599","DE","DEU","GERMANY" -"3267097600","3267098623","KZ","KAZ","KAZAKHSTAN" -"3267098624","3267099647","GB","GBR","UNITED KINGDOM" -"3267099648","3267100671","IT","ITA","ITALY" -"3267100672","3267166207","FI","FIN","FINLAND" -"3267166208","3267231743","GB","GBR","UNITED KINGDOM" -"3267231744","3267297279","RU","RUS","RUSSIAN FEDERATION" -"3267297280","3267362815","CH","CHE","SWITZERLAND" -"3267362816","3267426879","DK","DNK","DENMARK" -"3267426880","3267426943","CH","CHE","SWITZERLAND" -"3267426944","3267428351","DK","DNK","DENMARK" -"3267428352","3267493887","GB","GBR","UNITED KINGDOM" -"3267493888","3267494143","DE","DEU","GERMANY" -"3267494144","3267498239","GB","GBR","UNITED KINGDOM" -"3267498240","3267498495","IE","IRL","IRELAND" -"3267498496","3267498751","DE","DEU","GERMANY" -"3267498752","3267504383","GB","GBR","UNITED KINGDOM" -"3267504384","3267504639","AT","AUT","AUSTRIA" -"3267504640","3267505151","FR","FRA","FRANCE" -"3267505152","3267507711","DE","DEU","GERMANY" -"3267507712","3267507743","GB","GBR","UNITED KINGDOM" -"3267507744","3267507775","DE","DEU","GERMANY" -"3267507776","3267507807","GB","GBR","UNITED KINGDOM" -"3267507808","3267507839","ZA","ZAF","SOUTH AFRICA" -"3267507840","3267508223","GB","GBR","UNITED KINGDOM" -"3267508224","3267508735","DE","DEU","GERMANY" -"3267508736","3267508991","IL","ISR","ISRAEL" -"3267508992","3267509247","GB","GBR","UNITED KINGDOM" -"3267509248","3267509503","AT","AUT","AUSTRIA" -"3267509504","3267509695","CH","CHE","SWITZERLAND" -"3267509728","3267509759","CH","CHE","SWITZERLAND" -"3267509760","3267510271","GB","GBR","UNITED KINGDOM" -"3267510272","3267512831","FR","FRA","FRANCE" -"3267512832","3267513343","GB","GBR","UNITED KINGDOM" -"3267513344","3267514367","FR","FRA","FRANCE" -"3267514368","3267517951","DE","DEU","GERMANY" -"3267517952","3267518463","GB","GBR","UNITED KINGDOM" -"3267518464","3267524607","DE","DEU","GERMANY" -"3267526656","3267527679","DE","DEU","GERMANY" -"3267527680","3267529215","FR","FRA","FRANCE" -"3267529216","3267529471","GB","GBR","UNITED KINGDOM" -"3267529472","3267529727","FR","FRA","FRANCE" -"3267529728","3267530751","AT","AUT","AUSTRIA" -"3267530752","3267534335","FR","FRA","FRANCE" -"3267534336","3267534527","CS","SCG","SERBIA AND MONTENEGRO" -"3267534560","3267534575","FR","FRA","FRANCE" -"3267534576","3267534591","AT","AUT","AUSTRIA" -"3267534592","3267538943","FR","FRA","FRANCE" -"3267538944","3267540223","NL","NLD","NETHERLANDS" -"3267540224","3267540479","GB","GBR","UNITED KINGDOM" -"3267540480","3267541759","NL","NLD","NETHERLANDS" -"3267541760","3267542527","GB","GBR","UNITED KINGDOM" -"3267542528","3267542783","CH","CHE","SWITZERLAND" -"3267542784","3267543039","DE","DEU","GERMANY" -"3267543040","3267543295","IT","ITA","ITALY" -"3267543296","3267543551","AT","AUT","AUSTRIA" -"3267543552","3267544319","GB","GBR","UNITED KINGDOM" -"3267544320","3267544575","DE","DEU","GERMANY" -"3267544576","3267544703","IT","ITA","ITALY" -"3267544704","3267544831","DE","DEU","GERMANY" -"3267544832","3267545087","FR","FRA","FRANCE" -"3267545088","3267545855","ES","ESP","SPAIN" -"3267545856","3267546111","DE","DEU","GERMANY" -"3267546112","3267546623","ES","ESP","SPAIN" -"3267546624","3267547135","FR","FRA","FRANCE" -"3267547136","3267547391","BE","BEL","BELGIUM" -"3267547392","3267547647","DE","DEU","GERMANY" -"3267547648","3267549183","GB","GBR","UNITED KINGDOM" -"3267549184","3267550463","DK","DNK","DENMARK" -"3267550464","3267550719","NL","NLD","NETHERLANDS" -"3267550720","3267551231","DK","DNK","DENMARK" -"3267551232","3267551743","AT","AUT","AUSTRIA" -"3267551744","3267551999","SE","SWE","SWEDEN" -"3267552000","3267552255","NO","NOR","NORWAY" -"3267552256","3267553023","AT","AUT","AUSTRIA" -"3267553024","3267553279","NL","NLD","NETHERLANDS" -"3267553280","3267554303","DK","DNK","DENMARK" -"3267554304","3267554815","DE","DEU","GERMANY" -"3267554816","3267555071","FR","FRA","FRANCE" -"3267555200","3267555327","ZA","ZAF","SOUTH AFRICA" -"3267555328","3267555583","FI","FIN","FINLAND" -"3267555584","3267556095","GB","GBR","UNITED KINGDOM" -"3267556096","3267556351","NO","NOR","NORWAY" -"3267556352","3267556607","GB","GBR","UNITED KINGDOM" -"3267556608","3267556863","NO","NOR","NORWAY" -"3267556864","3267557375","IL","ISR","ISRAEL" -"3267557376","3267557631","NO","NOR","NORWAY" -"3267557632","3267557887","AT","AUT","AUSTRIA" -"3267557888","3267558399","IL","ISR","ISRAEL" -"3267558400","3267558911","CH","CHE","SWITZERLAND" -"3267558912","3267559423","AT","AUT","AUSTRIA" -"3267559424","3267622527","DE","DEU","GERMANY" -"3267622528","3267622559","GB","GBR","UNITED KINGDOM" -"3267622560","3267624959","DE","DEU","GERMANY" -"3267624960","3267625471","GB","GBR","UNITED KINGDOM" -"3267625472","3267625727","FR","FRA","FRANCE" -"3267625728","3267625983","BE","BEL","BELGIUM" -"3267625984","3267626239","NL","NLD","NETHERLANDS" -"3267626240","3267626495","BE","BEL","BELGIUM" -"3267626496","3267626751","ES","ESP","SPAIN" -"3267626752","3267627007","RU","RUS","RUSSIAN FEDERATION" -"3267627008","3267627167","DE","DEU","GERMANY" -"3267627200","3267627343","DE","DEU","GERMANY" -"3267627360","3267627423","DE","DEU","GERMANY" -"3267627432","3267627519","DE","DEU","GERMANY" -"3267627776","3267627807","DE","DEU","GERMANY" -"3267627872","3267628031","DE","DEU","GERMANY" -"3267628032","3267628287","IT","ITA","ITALY" -"3267628544","3267628799","IT","ITA","ITALY" -"3267628800","3267629055","HU","HUN","HUNGARY" -"3267629056","3267629311","CZ","CZE","CZECH REPUBLIC" -"3267629312","3267629567","DK","DNK","DENMARK" -"3267629568","3267629759","BE","BEL","BELGIUM" -"3267629808","3267629823","BE","BEL","BELGIUM" -"3267629824","3267630079","GR","GRC","GREECE" -"3267630080","3267630591","GB","GBR","UNITED KINGDOM" -"3267630592","3267630847","SK","SVK","SLOVAKIA" -"3267630848","3267630863","IT","ITA","ITALY" -"3267630880","3267630943","FR","FRA","FRANCE" -"3267630960","3267631055","IT","ITA","ITALY" -"3267631088","3267631103","IT","ITA","ITALY" -"3267631104","3267631615","GB","GBR","UNITED KINGDOM" -"3267631616","3267631935","DE","DEU","GERMANY" -"3267632000","3267632127","DE","DEU","GERMANY" -"3267632384","3267632511","BE","BEL","BELGIUM" -"3267632640","3267632895","IT","ITA","ITALY" -"3267632896","3267633151","BE","BEL","BELGIUM" -"3267633152","3267633679","NO","NOR","NORWAY" -"3267633728","3267633855","NO","NOR","NORWAY" -"3267634176","3267634431","GB","GBR","UNITED KINGDOM" -"3267634944","3267635711","GB","GBR","UNITED KINGDOM" -"3267635968","3267636223","BE","BEL","BELGIUM" -"3267636736","3267636783","ZA","ZAF","SOUTH AFRICA" -"3267636800","3267636815","ZA","ZAF","SOUTH AFRICA" -"3267636832","3267636991","ZA","ZAF","SOUTH AFRICA" -"3267636992","3267637247","AT","AUT","AUSTRIA" -"3267637504","3267637591","IT","ITA","ITALY" -"3267637600","3267637695","IT","ITA","ITALY" -"3267637760","3267637823","ES","ESP","SPAIN" -"3267637856","3267637887","ES","ESP","SPAIN" -"3267638016","3267638271","ES","ESP","SPAIN" -"3267638272","3267638527","BE","BEL","BELGIUM" -"3267638528","3267638783","DK","DNK","DENMARK" -"3267638784","3267639295","CZ","CZE","CZECH REPUBLIC" -"3267639296","3267639551","NL","NLD","NETHERLANDS" -"3267639552","3267639807","GB","GBR","UNITED KINGDOM" -"3267639808","3267640063","CH","CHE","SWITZERLAND" -"3267640064","3267640319","GB","GBR","UNITED KINGDOM" -"3267640320","3267640575","CH","CHE","SWITZERLAND" -"3267640576","3267640831","IT","ITA","ITALY" -"3267640832","3267641087","GR","GRC","GREECE" -"3267641344","3267641599","IE","IRL","IRELAND" -"3267641856","3267642111","GB","GBR","UNITED KINGDOM" -"3267642112","3267642367","SE","SWE","SWEDEN" -"3267642368","3267642623","GB","GBR","UNITED KINGDOM" -"3267642624","3267642879","NO","NOR","NORWAY" -"3267642880","3267643135","SI","SVN","SLOVENIA" -"3267643136","3267643391","BE","BEL","BELGIUM" -"3267643392","3267643439","RU","RUS","RUSSIAN FEDERATION" -"3267643456","3267643487","RU","RUS","RUSSIAN FEDERATION" -"3267643520","3267643647","RU","RUS","RUSSIAN FEDERATION" -"3267643648","3267643903","GB","GBR","UNITED KINGDOM" -"3267644160","3267644415","BE","BEL","BELGIUM" -"3267644416","3267644671","DE","DEU","GERMANY" -"3267644672","3267644927","SI","SVN","SLOVENIA" -"3267644936","3267644959","BE","BEL","BELGIUM" -"3267644960","3267644975","FR","FRA","FRANCE" -"3267644976","3267644983","GB","GBR","UNITED KINGDOM" -"3267644984","3267645055","BE","BEL","BELGIUM" -"3267645056","3267645183","GB","GBR","UNITED KINGDOM" -"3267645440","3267645695","GB","GBR","UNITED KINGDOM" -"3267645696","3267645951","DE","DEU","GERMANY" -"3267645952","3267646207","DK","DNK","DENMARK" -"3267647488","3267647743","GB","GBR","UNITED KINGDOM" -"3267647744","3267647999","SI","SVN","SLOVENIA" -"3267648000","3267648255","DE","DEU","GERMANY" -"3267648432","3267648447","BE","BEL","BELGIUM" -"3267648448","3267648479","FR","FRA","FRANCE" -"3267648480","3267648511","GB","GBR","UNITED KINGDOM" -"3267648512","3267648767","DE","DEU","GERMANY" -"3267648768","3267649023","NL","NLD","NETHERLANDS" -"3267649024","3267649279","RU","RUS","RUSSIAN FEDERATION" -"3267649280","3267649295","DE","DEU","GERMANY" -"3267649312","3267649471","DE","DEU","GERMANY" -"3267649792","3267650303","NL","NLD","NETHERLANDS" -"3267650320","3267650367","AT","AUT","AUSTRIA" -"3267650464","3267650495","AT","AUT","AUSTRIA" -"3267650528","3267650559","AT","AUT","AUSTRIA" -"3267650560","3267651071","GB","GBR","UNITED KINGDOM" -"3267651072","3267651327","DE","DEU","GERMANY" -"3267651584","3267651839","FR","FRA","FRANCE" -"3267652096","3267652351","GB","GBR","UNITED KINGDOM" -"3267652608","3267652863","DE","DEU","GERMANY" -"3267652864","3267653119","PT","PRT","PORTUGAL" -"3267653120","3267653375","GB","GBR","UNITED KINGDOM" -"3267653888","3267654143","GB","GBR","UNITED KINGDOM" -"3267654912","3267655167","SK","SVK","SLOVAKIA" -"3267655168","3267655679","GB","GBR","UNITED KINGDOM" -"3267655680","3267656191","IT","ITA","ITALY" -"3267656192","3267656447","DK","DNK","DENMARK" -"3267657216","3267657471","HU","HUN","HUNGARY" -"3267657472","3267657487","RO","ROM","ROMANIA" -"3267657504","3267657567","RO","ROM","ROMANIA" -"3267657664","3267657679","RO","ROM","ROMANIA" -"3267657984","3267658239","GB","GBR","UNITED KINGDOM" -"3267658240","3267658495","IT","ITA","ITALY" -"3267658752","3267659263","CH","CHE","SWITZERLAND" -"3267659520","3267659775","IT","ITA","ITALY" -"3267660288","3267660543","CH","CHE","SWITZERLAND" -"3267660544","3267660671","ES","ESP","SPAIN" -"3267661312","3267661567","SK","SVK","SLOVAKIA" -"3267661568","3267661679","GB","GBR","UNITED KINGDOM" -"3267661696","3267661823","GB","GBR","UNITED KINGDOM" -"3267661824","3267661847","ES","ESP","SPAIN" -"3267661856","3267661887","ES","ESP","SPAIN" -"3267662024","3267662031","ES","ESP","SPAIN" -"3267662048","3267662079","ES","ESP","SPAIN" -"3267662848","3267662879","IE","IRL","IRELAND" -"3267662888","3267662895","GB","GBR","UNITED KINGDOM" -"3267662896","3267662951","IE","IRL","IRELAND" -"3267662952","3267662959","GB","GBR","UNITED KINGDOM" -"3267662960","3267662991","IE","IRL","IRELAND" -"3267663008","3267663071","IE","IRL","IRELAND" -"3267663088","3267663103","IE","IRL","IRELAND" -"3267663104","3267663327","IT","ITA","ITALY" -"3267663360","3267663871","GB","GBR","UNITED KINGDOM" -"3267663872","3267664127","DE","DEU","GERMANY" -"3267664384","3267664639","GB","GBR","UNITED KINGDOM" -"3267664640","3267664671","SK","SVK","SLOVAKIA" -"3267664800","3267664815","SK","SVK","SLOVAKIA" -"3267664832","3267664879","SK","SVK","SLOVAKIA" -"3267664888","3267664895","SK","SVK","SLOVAKIA" -"3267665920","3267666175","GB","GBR","UNITED KINGDOM" -"3267666192","3267666207","GR","GRC","GREECE" -"3267666256","3267666263","GR","GRC","GREECE" -"3267666272","3267666431","GR","GRC","GREECE" -"3267666432","3267666447","GB","GBR","UNITED KINGDOM" -"3267666496","3267666543","GB","GBR","UNITED KINGDOM" -"3267666576","3267667199","GB","GBR","UNITED KINGDOM" -"3267667200","3267667455","NL","NLD","NETHERLANDS" -"3267667456","3267667967","GB","GBR","UNITED KINGDOM" -"3267670016","3267671551","ZA","ZAF","SOUTH AFRICA" -"3267671552","3267671807","DE","DEU","GERMANY" -"3267671808","3267672063","NO","NOR","NORWAY" -"3267672064","3267672223","DE","DEU","GERMANY" -"3267672256","3267672319","DE","DEU","GERMANY" -"3267672576","3267672831","AT","AUT","AUSTRIA" -"3267672832","3267672927","FR","FRA","FRANCE" -"3267672936","3267672999","FR","FRA","FRANCE" -"3267673008","3267673015","FR","FRA","FRANCE" -"3267673024","3267673087","FR","FRA","FRANCE" -"3267673088","3267673439","DE","DEU","GERMANY" -"3267673472","3267673503","DE","DEU","GERMANY" -"3267673600","3267673759","DE","DEU","GERMANY" -"3267673808","3267673855","DE","DEU","GERMANY" -"3267674112","3267674127","NL","NLD","NETHERLANDS" -"3267674128","3267674159","GB","GBR","UNITED KINGDOM" -"3267674160","3267674207","BE","BEL","BELGIUM" -"3267674208","3267674239","GB","GBR","UNITED KINGDOM" -"3267674240","3267674303","BE","BEL","BELGIUM" -"3267674336","3267674367","GB","GBR","UNITED KINGDOM" -"3267674368","3267674879","BE","BEL","BELGIUM" -"3267675136","3267675391","AT","AUT","AUSTRIA" -"3267675392","3267675615","CH","CHE","SWITZERLAND" -"3267675624","3267675631","CH","CHE","SWITZERLAND" -"3267675648","3267675775","CY","CYP","CYPRUS" -"3267675776","3267675903","CH","CHE","SWITZERLAND" -"3267676160","3267676415","GB","GBR","UNITED KINGDOM" -"3267676672","3267676679","HU","HUN","HUNGARY" -"3267676688","3267676711","HU","HUN","HUNGARY" -"3267676736","3267676767","HU","HUN","HUNGARY" -"3267676784","3267676799","HU","HUN","HUNGARY" -"3267676864","3267676879","HU","HUN","HUNGARY" -"3267676928","3267677367","GB","GBR","UNITED KINGDOM" -"3267677376","3267677695","GB","GBR","UNITED KINGDOM" -"3267678208","3267678719","FR","FRA","FRANCE" -"3267678976","3267679231","NL","NLD","NETHERLANDS" -"3267679488","3267679743","BE","BEL","BELGIUM" -"3267680000","3267680255","CZ","CZE","CZECH REPUBLIC" -"3267680256","3267680767","SK","SVK","SLOVAKIA" -"3267681280","3267681319","FR","FRA","FRANCE" -"3267681328","3267681503","FR","FRA","FRANCE" -"3267681512","3267681535","FR","FRA","FRANCE" -"3267681792","3267681887","FR","FRA","FRANCE" -"3267681904","3267681975","FR","FRA","FRANCE" -"3267682016","3267682047","FR","FRA","FRANCE" -"3267682304","3267682559","BE","BEL","BELGIUM" -"3267683336","3267683359","PL","POL","POLAND" -"3267683392","3267683471","PL","POL","POLAND" -"3267683520","3267683527","PL","POL","POLAND" -"3267683536","3267683551","PL","POL","POLAND" -"3267683568","3267683575","PL","POL","POLAND" -"3267684384","3267684399","GB","GBR","UNITED KINGDOM" -"3267684416","3267684783","GB","GBR","UNITED KINGDOM" -"3267684792","3267685119","GB","GBR","UNITED KINGDOM" -"3267685120","3267685375","DE","DEU","GERMANY" -"3267685376","3267685887","NL","NLD","NETHERLANDS" -"3267685888","3267686399","GB","GBR","UNITED KINGDOM" -"3267687936","3267688191","IE","IRL","IRELAND" -"3267688192","3267688703","DE","DEU","GERMANY" -"3267688704","3267688959","SE","SWE","SWEDEN" -"3267689216","3267689247","CZ","CZE","CZECH REPUBLIC" -"3267689328","3267689471","CZ","CZE","CZECH REPUBLIC" -"3267689728","3267689983","GB","GBR","UNITED KINGDOM" -"3267689984","3267690239","FR","FRA","FRANCE" -"3267690272","3267690495","FR","FRA","FRANCE" -"3267690496","3267691519","FI","FIN","FINLAND" -"3267691520","3267692543","SE","SWE","SWEDEN" -"3267692544","3267711999","FI","FIN","FINLAND" -"3267712000","3267712255","SE","SWE","SWEDEN" -"3267712256","3267741439","FI","FIN","FINLAND" -"3267741440","3267741695","BE","BEL","BELGIUM" -"3267741696","3267741759","FI","FIN","FINLAND" -"3267741760","3267741791","SE","SWE","SWEDEN" -"3267741792","3267741855","FI","FIN","FINLAND" -"3267741856","3267741919","SE","SWE","SWEDEN" -"3267741920","3267743999","FI","FIN","FINLAND" -"3267744000","3267744255","DE","DEU","GERMANY" -"3267744256","3267744511","BE","BEL","BELGIUM" -"3267744512","3267746303","FI","FIN","FINLAND" -"3267746304","3267746559","NL","NLD","NETHERLANDS" -"3267746560","3267756031","FI","FIN","FINLAND" -"3267756032","3267760639","SE","SWE","SWEDEN" -"3267760640","3267761151","NO","NOR","NORWAY" -"3267761152","3267761919","SE","SWE","SWEDEN" -"3267761920","3267762175","NO","NOR","NORWAY" -"3267762176","3267763711","SE","SWE","SWEDEN" -"3267763712","3267763967","NO","NOR","NORWAY" -"3267763968","3267764223","SE","SWE","SWEDEN" -"3267764224","3267764479","NO","NOR","NORWAY" -"3267764480","3267765775","SE","SWE","SWEDEN" -"3267765776","3267765791","NO","NOR","NORWAY" -"3267765792","3267765823","SE","SWE","SWEDEN" -"3267765824","3267765855","NO","NOR","NORWAY" -"3267765856","3267766031","SE","SWE","SWEDEN" -"3267766032","3267766047","NO","NOR","NORWAY" -"3267766048","3267766303","SE","SWE","SWEDEN" -"3267766304","3267766319","NO","NOR","NORWAY" -"3267766320","3267766351","SE","SWE","SWEDEN" -"3267766352","3267766367","NO","NOR","NORWAY" -"3267766368","3267766383","SE","SWE","SWEDEN" -"3267766384","3267766415","NO","NOR","NORWAY" -"3267766416","3267787007","SE","SWE","SWEDEN" -"3267787008","3267787263","NO","NOR","NORWAY" -"3267787264","3267787519","SE","SWE","SWEDEN" -"3267787520","3267787775","NO","NOR","NORWAY" -"3267787776","3267793919","SE","SWE","SWEDEN" -"3267793920","3267794175","DK","DNK","DENMARK" -"3267794176","3267821567","SE","SWE","SWEDEN" -"3267821568","3267887103","FR","FRA","FRANCE" -"3267887104","3268017407","GB","GBR","UNITED KINGDOM" -"3268017408","3268017663","KE","KEN","KENYA" -"3268017664","3268149247","GB","GBR","UNITED KINGDOM" -"3268149248","3268165631","EE","EST","ESTONIA" -"3268165632","3268173823","CH","CHE","SWITZERLAND" -"3268173824","3268182015","MT","MLT","MALTA" -"3268182016","3268198399","PL","POL","POLAND" -"3268215584","3268215615","GB","GBR","UNITED KINGDOM" -"3268215648","3268215679","GB","GBR","UNITED KINGDOM" -"3268215712","3268215743","GB","GBR","UNITED KINGDOM" -"3268215808","3268216063","GB","GBR","UNITED KINGDOM" -"3268218112","3268218367","GB","GBR","UNITED KINGDOM" -"3268219808","3268219823","GB","GBR","UNITED KINGDOM" -"3268219856","3268219871","GB","GBR","UNITED KINGDOM" -"3268221440","3268221471","GB","GBR","UNITED KINGDOM" -"3268221504","3268221599","GB","GBR","UNITED KINGDOM" -"3268221696","3268221951","GB","GBR","UNITED KINGDOM" -"3268222976","3268223167","GB","GBR","UNITED KINGDOM" -"3268223200","3268223231","GB","GBR","UNITED KINGDOM" -"3268224768","3268225023","US","USA","UNITED STATES" -"3268226368","3268226815","GB","GBR","UNITED KINGDOM" -"3268227328","3268227391","GB","GBR","UNITED KINGDOM" -"3268227520","3268227615","GB","GBR","UNITED KINGDOM" -"3268229632","3268229887","GB","GBR","UNITED KINGDOM" -"3268230656","3268230911","GB","GBR","UNITED KINGDOM" -"3268231168","3268231199","GB","GBR","UNITED KINGDOM" -"3268231320","3268231359","GB","GBR","UNITED KINGDOM" -"3268231392","3268231423","GB","GBR","UNITED KINGDOM" -"3268231648","3268231679","GB","GBR","UNITED KINGDOM" -"3268231744","3268231807","GB","GBR","UNITED KINGDOM" -"3268232224","3268232243","GB","GBR","UNITED KINGDOM" -"3268232352","3268232367","GB","GBR","UNITED KINGDOM" -"3268232384","3268232415","GB","GBR","UNITED KINGDOM" -"3268232480","3268232575","GB","GBR","UNITED KINGDOM" -"3268232960","3268233087","GB","GBR","UNITED KINGDOM" -"3268233920","3268234047","GB","GBR","UNITED KINGDOM" -"3268234176","3268234239","GB","GBR","UNITED KINGDOM" -"3268234560","3268234623","GB","GBR","UNITED KINGDOM" -"3268235008","3268235263","GB","GBR","UNITED KINGDOM" -"3268235264","3268235519","DE","DEU","GERMANY" -"3268235520","3268235775","GB","GBR","UNITED KINGDOM" -"3268235936","3268236031","GB","GBR","UNITED KINGDOM" -"3268236192","3268236207","GB","GBR","UNITED KINGDOM" -"3268236544","3268236607","GB","GBR","UNITED KINGDOM" -"3268236672","3268236799","GB","GBR","UNITED KINGDOM" -"3268237312","3268237567","GB","GBR","UNITED KINGDOM" -"3268237824","3268237847","GB","GBR","UNITED KINGDOM" -"3268237856","3268237887","GB","GBR","UNITED KINGDOM" -"3268238336","3268238359","GB","GBR","UNITED KINGDOM" -"3268238360","3268238367","DE","DEU","GERMANY" -"3268238368","3268238463","GB","GBR","UNITED KINGDOM" -"3268238464","3268238471","DE","DEU","GERMANY" -"3268238480","3268238527","GB","GBR","UNITED KINGDOM" -"3268239104","3268239359","GB","GBR","UNITED KINGDOM" -"3268239584","3268240127","GB","GBR","UNITED KINGDOM" -"3268240160","3268240191","GB","GBR","UNITED KINGDOM" -"3268240256","3268240399","GB","GBR","UNITED KINGDOM" -"3268240688","3268240695","GB","GBR","UNITED KINGDOM" -"3268240712","3268240735","GB","GBR","UNITED KINGDOM" -"3268240744","3268240751","GB","GBR","UNITED KINGDOM" -"3268240776","3268240783","GB","GBR","UNITED KINGDOM" -"3268240976","3268240991","GB","GBR","UNITED KINGDOM" -"3268241008","3268241023","GB","GBR","UNITED KINGDOM" -"3268241544","3268241551","GB","GBR","UNITED KINGDOM" -"3268241640","3268241663","GB","GBR","UNITED KINGDOM" -"3268242496","3268242523","GB","GBR","UNITED KINGDOM" -"3268242880","3268243103","GB","GBR","UNITED KINGDOM" -"3268243328","3268243391","GB","GBR","UNITED KINGDOM" -"3268243744","3268243775","GB","GBR","UNITED KINGDOM" -"3268243968","3268244031","GB","GBR","UNITED KINGDOM" -"3268244776","3268244783","GB","GBR","UNITED KINGDOM" -"3268244792","3268244799","GB","GBR","UNITED KINGDOM" -"3268245112","3268245115","GB","GBR","UNITED KINGDOM" -"3268245504","3268245759","GB","GBR","UNITED KINGDOM" -"3268246272","3268246783","GB","GBR","UNITED KINGDOM" -"3268246792","3268246807","GB","GBR","UNITED KINGDOM" -"3268246912","3268246927","GB","GBR","UNITED KINGDOM" -"3268246960","3268246991","GB","GBR","UNITED KINGDOM" -"3268248320","3268248447","GB","GBR","UNITED KINGDOM" -"3268248512","3268248543","GB","GBR","UNITED KINGDOM" -"3268248832","3268248959","GB","GBR","UNITED KINGDOM" -"3268249600","3268251311","GB","GBR","UNITED KINGDOM" -"3268251312","3268251327","IE","IRL","IRELAND" -"3268251328","3268251583","GB","GBR","UNITED KINGDOM" -"3268251584","3268251615","DE","DEU","GERMANY" -"3268251616","3268251631","CH","CHE","SWITZERLAND" -"3268251632","3268251647","GB","GBR","UNITED KINGDOM" -"3268254464","3268254543","GB","GBR","UNITED KINGDOM" -"3268254592","3268254607","GB","GBR","UNITED KINGDOM" -"3268254624","3268254639","GB","GBR","UNITED KINGDOM" -"3268254896","3268254903","GB","GBR","UNITED KINGDOM" -"3268255824","3268255863","GB","GBR","UNITED KINGDOM" -"3268255872","3268255887","GB","GBR","UNITED KINGDOM" -"3268255896","3268255919","GB","GBR","UNITED KINGDOM" -"3268255952","3268255983","GB","GBR","UNITED KINGDOM" -"3268256896","3268256959","GB","GBR","UNITED KINGDOM" -"3268257024","3268257055","GB","GBR","UNITED KINGDOM" -"3268257088","3268257119","GB","GBR","UNITED KINGDOM" -"3268257264","3268257271","GB","GBR","UNITED KINGDOM" -"3268257416","3268257419","GB","GBR","UNITED KINGDOM" -"3268257424","3268257431","GB","GBR","UNITED KINGDOM" -"3268257432","3268257439","IT","ITA","ITALY" -"3268257456","3268257471","GB","GBR","UNITED KINGDOM" -"3268257488","3268257527","GB","GBR","UNITED KINGDOM" -"3268258560","3268258623","GB","GBR","UNITED KINGDOM" -"3268258688","3268258751","GB","GBR","UNITED KINGDOM" -"3268259264","3268259327","GB","GBR","UNITED KINGDOM" -"3268259520","3268259527","GB","GBR","UNITED KINGDOM" -"3268259544","3268259551","GB","GBR","UNITED KINGDOM" -"3268259560","3268259575","GB","GBR","UNITED KINGDOM" -"3268259808","3268259823","GB","GBR","UNITED KINGDOM" -"3268259832","3268260095","GB","GBR","UNITED KINGDOM" -"3268260352","3268260383","GB","GBR","UNITED KINGDOM" -"3268260416","3268260447","GB","GBR","UNITED KINGDOM" -"3268260512","3268260607","GB","GBR","UNITED KINGDOM" -"3268260640","3268260647","GB","GBR","UNITED KINGDOM" -"3268260656","3268260671","GB","GBR","UNITED KINGDOM" -"3268261936","3268261951","GB","GBR","UNITED KINGDOM" -"3268262768","3268262783","GB","GBR","UNITED KINGDOM" -"3268262880","3268262887","GB","GBR","UNITED KINGDOM" -"3268263232","3268263263","GB","GBR","UNITED KINGDOM" -"3268263392","3268263423","GB","GBR","UNITED KINGDOM" -"3268263776","3268263783","GB","GBR","UNITED KINGDOM" -"3268264736","3268264767","GB","GBR","UNITED KINGDOM" -"3268265416","3268265431","GB","GBR","UNITED KINGDOM" -"3268265984","3268266495","GB","GBR","UNITED KINGDOM" -"3268266984","3268266991","GB","GBR","UNITED KINGDOM" -"3268267536","3268267551","GB","GBR","UNITED KINGDOM" -"3268267584","3268267599","GB","GBR","UNITED KINGDOM" -"3268267616","3268267647","GB","GBR","UNITED KINGDOM" -"3268267744","3268267775","GB","GBR","UNITED KINGDOM" -"3268267952","3268267959","GB","GBR","UNITED KINGDOM" -"3268268544","3268268799","GB","GBR","UNITED KINGDOM" -"3268270352","3268270367","GB","GBR","UNITED KINGDOM" -"3268270496","3268270511","GB","GBR","UNITED KINGDOM" -"3268270848","3268271359","GB","GBR","UNITED KINGDOM" -"3268271912","3268271919","GB","GBR","UNITED KINGDOM" -"3268271928","3268271935","GB","GBR","UNITED KINGDOM" -"3268272704","3268272719","GB","GBR","UNITED KINGDOM" -"3268272728","3268272743","GB","GBR","UNITED KINGDOM" -"3268272752","3268272759","GB","GBR","UNITED KINGDOM" -"3268273024","3268273151","GB","GBR","UNITED KINGDOM" -"3268273920","3268273983","GB","GBR","UNITED KINGDOM" -"3268274112","3268274175","GB","GBR","UNITED KINGDOM" -"3268274456","3268274459","GB","GBR","UNITED KINGDOM" -"3268274528","3268274543","GB","GBR","UNITED KINGDOM" -"3268274560","3268274591","GB","GBR","UNITED KINGDOM" -"3268275984","3268275999","GB","GBR","UNITED KINGDOM" -"3268276640","3268276655","GB","GBR","UNITED KINGDOM" -"3268276672","3268276687","GB","GBR","UNITED KINGDOM" -"3268276768","3268276799","GB","GBR","UNITED KINGDOM" -"3268276864","3268276895","GB","GBR","UNITED KINGDOM" -"3268277056","3268277119","GB","GBR","UNITED KINGDOM" -"3268277760","3268278015","GB","GBR","UNITED KINGDOM" -"3268278464","3268278495","GB","GBR","UNITED KINGDOM" -"3268280064","3268280319","GB","GBR","UNITED KINGDOM" -"3268280320","3268335615","FR","FRA","FRANCE" -"3268335616","3268335871","CH","CHE","SWITZERLAND" -"3268335872","3268345855","FR","FRA","FRANCE" -"3268345856","3268411391","GB","GBR","UNITED KINGDOM" -"3268411392","3268424959","AT","AUT","AUSTRIA" -"3268424960","3268425727","CH","CHE","SWITZERLAND" -"3268425728","3268425983","LI","LIE","LIECHTENSTEIN" -"3268425984","3268426495","AT","AUT","AUSTRIA" -"3268426496","3268428031","CH","CHE","SWITZERLAND" -"3268428032","3268428287","AT","AUT","AUSTRIA" -"3268428288","3268428543","CH","CHE","SWITZERLAND" -"3268428544","3268429055","AT","AUT","AUSTRIA" -"3268429056","3268429311","CH","CHE","SWITZERLAND" -"3268429312","3268429567","AT","AUT","AUSTRIA" -"3268429568","3268430079","CH","CHE","SWITZERLAND" -"3268430080","3268430847","AT","AUT","AUSTRIA" -"3268430848","3268431103","LI","LIE","LIECHTENSTEIN" -"3268431104","3268476927","AT","AUT","AUSTRIA" -"3268476928","3268542463","CH","CHE","SWITZERLAND" -"3268542464","3268607999","PT","PRT","PORTUGAL" -"3268608000","3268673535","FI","FIN","FINLAND" -"3268673536","3268703799","CZ","CZE","CZECH REPUBLIC" -"3268703800","3268703807","CR","CRI","COSTA RICA" -"3268703808","3268728287","CZ","CZE","CZECH REPUBLIC" -"3268728288","3268728299","CR","CRI","COSTA RICA" -"3268728300","3268739071","CZ","CZE","CZECH REPUBLIC" -"3268739072","3268739327","DE","DEU","GERMANY" -"3268739328","3268739583","PL","POL","POLAND" -"3268739584","3268739839","DE","DEU","GERMANY" -"3268739840","3268740095","CH","CHE","SWITZERLAND" -"3268740096","3268740351","IL","ISR","ISRAEL" -"3268740352","3268740607","DE","DEU","GERMANY" -"3268740608","3268740863","UA","UKR","UKRAINE" -"3268740864","3268741119","CH","CHE","SWITZERLAND" -"3268741120","3268741375","FR","FRA","FRANCE" -"3268741376","3268741887","LV","LVA","LATVIA" -"3268741888","3268742143","AT","AUT","AUSTRIA" -"3268742144","3268742399","RU","RUS","RUSSIAN FEDERATION" -"3268742400","3268742655","CZ","CZE","CZECH REPUBLIC" -"3268742656","3268742911","BE","BEL","BELGIUM" -"3268742912","3268743167","NL","NLD","NETHERLANDS" -"3268743168","3268743423","RO","ROM","ROMANIA" -"3268743424","3268743679","PL","POL","POLAND" -"3268743680","3268743935","GR","GRC","GREECE" -"3268743936","3268744191","ES","ESP","SPAIN" -"3268744192","3268744447","DE","DEU","GERMANY" -"3268744448","3268744703","RU","RUS","RUSSIAN FEDERATION" -"3268744704","3268744959","PL","POL","POLAND" -"3268744960","3268745215","UA","UKR","UKRAINE" -"3268745216","3268745471","KZ","KAZ","KAZAKHSTAN" -"3268745472","3268745727","RU","RUS","RUSSIAN FEDERATION" -"3268745984","3268746239","DE","DEU","GERMANY" -"3268746240","3268746495","GB","GBR","UNITED KINGDOM" -"3268746496","3268746751","IE","IRL","IRELAND" -"3268746752","3268747007","FR","FRA","FRANCE" -"3268747008","3268747263","DE","DEU","GERMANY" -"3268747264","3268755455","CZ","CZE","CZECH REPUBLIC" -"3268755456","3268763647","SE","SWE","SWEDEN" -"3268771840","3268788223","NO","NOR","NORWAY" -"3268788224","3268804607","CZ","CZE","CZECH REPUBLIC" -"3268804608","3268869375","FR","FRA","FRANCE" -"3268869376","3268870143","PF","PYF","FRENCH POLYNESIA" -"3268870144","3268876063","FI","FIN","FINLAND" -"3268876064","3268876127","SE","SWE","SWEDEN" -"3268876128","3268876191","FI","FIN","FINLAND" -"3268876192","3268876223","SE","SWE","SWEDEN" -"3268876224","3268881151","FI","FIN","FINLAND" -"3268881152","3268881407","SE","SWE","SWEDEN" -"3268881408","3268881919","FI","FIN","FINLAND" -"3268881920","3268882175","SE","SWE","SWEDEN" -"3268882176","3268916223","FI","FIN","FINLAND" -"3268916224","3268916479","GB","GBR","UNITED KINGDOM" -"3268916480","3268920575","FI","FIN","FINLAND" -"3268920576","3268920831","SE","SWE","SWEDEN" -"3268920832","3268932351","FI","FIN","FINLAND" -"3268932352","3268932607","RU","RUS","RUSSIAN FEDERATION" -"3268932608","3268935679","FI","FIN","FINLAND" -"3268935680","3269057535","GB","GBR","UNITED KINGDOM" -"3269057536","3269058047","NL","NLD","NETHERLANDS" -"3269058048","3269066751","GB","GBR","UNITED KINGDOM" -"3269066752","3269131555","SE","SWE","SWEDEN" -"3269131556","3269131559","NO","NOR","NORWAY" -"3269131560","3269132287","SE","SWE","SWEDEN" -"3269132288","3269197823","GR","GRC","GREECE" -"3269197824","3269200639","RU","RUS","RUSSIAN FEDERATION" -"3269200640","3269200895","UA","UKR","UKRAINE" -"3269200896","3269212671","RU","RUS","RUSSIAN FEDERATION" -"3269212672","3269213183","UA","UKR","UKRAINE" -"3269213184","3269231871","RU","RUS","RUSSIAN FEDERATION" -"3269231872","3269232127","UA","UKR","UKRAINE" -"3269232128","3269233407","RU","RUS","RUSSIAN FEDERATION" -"3269233408","3269233663","UA","UKR","UKRAINE" -"3269233664","3269239039","RU","RUS","RUSSIAN FEDERATION" -"3269239040","3269239295","UA","UKR","UKRAINE" -"3269239296","3269263359","RU","RUS","RUSSIAN FEDERATION" -"3269264640","3269264895","DE","DEU","GERMANY" -"3269265856","3269265919","DE","DEU","GERMANY" -"3269265920","3269266175","GB","GBR","UNITED KINGDOM" -"3269266688","3269266943","DE","DEU","GERMANY" -"3269266944","3269267455","GB","GBR","UNITED KINGDOM" -"3269272576","3269272583","DE","DEU","GERMANY" -"3269272704","3269272831","DE","DEU","GERMANY" -"3269272832","3269272847","GB","GBR","UNITED KINGDOM" -"3269272848","3269272863","NL","NLD","NETHERLANDS" -"3269272864","3269272879","GB","GBR","UNITED KINGDOM" -"3269272896","3269273087","NL","NLD","NETHERLANDS" -"3269273088","3269273343","DE","DEU","GERMANY" -"3269273600","3269273855","GB","GBR","UNITED KINGDOM" -"3269273856","3269275647","DE","DEU","GERMANY" -"3269275904","3269276159","DE","DEU","GERMANY" -"3269276160","3269276415","GB","GBR","UNITED KINGDOM" -"3269277184","3269277695","FR","FRA","FRANCE" -"3269277696","3269277759","GB","GBR","UNITED KINGDOM" -"3269277760","3269278719","NL","NLD","NETHERLANDS" -"3269279232","3269279487","NL","NLD","NETHERLANDS" -"3269279672","3269279679","CH","CHE","SWITZERLAND" -"3269279744","3269279999","GB","GBR","UNITED KINGDOM" -"3269280000","3269280767","NL","NLD","NETHERLANDS" -"3269280768","3269281023","GB","GBR","UNITED KINGDOM" -"3269281024","3269281279","DE","DEU","GERMANY" -"3269282048","3269282303","DE","DEU","GERMANY" -"3269282304","3269282559","GB","GBR","UNITED KINGDOM" -"3269282560","3269282815","FR","FRA","FRANCE" -"3269283328","3269283583","DE","DEU","GERMANY" -"3269283872","3269283903","DE","DEU","GERMANY" -"3269284096","3269284351","GB","GBR","UNITED KINGDOM" -"3269284864","3269285055","FR","FRA","FRANCE" -"3269285088","3269285135","DE","DEU","GERMANY" -"3269285152","3269285215","DE","DEU","GERMANY" -"3269285312","3269285327","DE","DEU","GERMANY" -"3269285632","3269285887","DE","DEU","GERMANY" -"3269286400","3269286463","DE","DEU","GERMANY" -"3269288688","3269288959","DE","DEU","GERMANY" -"3269290560","3269290575","DE","DEU","GERMANY" -"3269290592","3269290687","DE","DEU","GERMANY" -"3269290736","3269290743","DE","DEU","GERMANY" -"3269291264","3269291519","DE","DEU","GERMANY" -"3269291520","3269291559","GB","GBR","UNITED KINGDOM" -"3269291584","3269291647","GB","GBR","UNITED KINGDOM" -"3269291776","3269292287","ES","ESP","SPAIN" -"3269293120","3269293151","DE","DEU","GERMANY" -"3269293208","3269293215","DE","DEU","GERMANY" -"3269293248","3269293279","DE","DEU","GERMANY" -"3269293376","3269293391","DE","DEU","GERMANY" -"3269293856","3269293887","DE","DEU","GERMANY" -"3269293920","3269293951","DE","DEU","GERMANY" -"3269296232","3269296235","DE","DEU","GERMANY" -"3269296368","3269296375","DE","DEU","GERMANY" -"3269297152","3269297663","GB","GBR","UNITED KINGDOM" -"3269298664","3269298671","DE","DEU","GERMANY" -"3269303040","3269303295","DE","DEU","GERMANY" -"3269303296","3269303423","GB","GBR","UNITED KINGDOM" -"3269303552","3269303679","DE","DEU","GERMANY" -"3269305344","3269305351","DE","DEU","GERMANY" -"3269305856","3269306879","DE","DEU","GERMANY" -"3269307648","3269307903","DE","DEU","GERMANY" -"3269310656","3269310671","DE","DEU","GERMANY" -"3269310976","3269311231","DE","DEU","GERMANY" -"3269311872","3269311999","DE","DEU","GERMANY" -"3269313792","3269314175","DE","DEU","GERMANY" -"3269314192","3269314199","DE","DEU","GERMANY" -"3269315584","3269315591","DE","DEU","GERMANY" -"3269317632","3269317663","GB","GBR","UNITED KINGDOM" -"3269317664","3269317671","IE","IRL","IRELAND" -"3269317672","3269317887","GB","GBR","UNITED KINGDOM" -"3269317888","3269318399","DE","DEU","GERMANY" -"3269318400","3269318655","GB","GBR","UNITED KINGDOM" -"3269318656","3269318983","DE","DEU","GERMANY" -"3269319008","3269319047","DE","DEU","GERMANY" -"3269319056","3269319071","DE","DEU","GERMANY" -"3269319136","3269320447","DE","DEU","GERMANY" -"3269320704","3269321727","GB","GBR","UNITED KINGDOM" -"3269322240","3269322495","DE","DEU","GERMANY" -"3269322680","3269322683","DE","DEU","GERMANY" -"3269322752","3269323263","DE","DEU","GERMANY" -"3269326848","3269326855","DE","DEU","GERMANY" -"3269326960","3269326971","DE","DEU","GERMANY" -"3269326992","3269326999","DE","DEU","GERMANY" -"3269327024","3269327039","DE","DEU","GERMANY" -"3269327056","3269327103","DE","DEU","GERMANY" -"3269327760","3269327767","DE","DEU","GERMANY" -"3269327864","3269328383","DE","DEU","GERMANY" -"3269328896","3269459967","GB","GBR","UNITED KINGDOM" -"3269459968","3269525503","ES","ESP","SPAIN" -"3269525504","3269556223","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3269556224","3269556479","AE","ARE","UNITED ARAB EMIRATES" -"3269556480","3269591039","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3269591040","3269621759","RU","RUS","RUSSIAN FEDERATION" -"3269621760","3269623551","BY","BLR","BELARUS" -"3269623552","3269656575","RU","RUS","RUSSIAN FEDERATION" -"3269656576","3269722111","GB","GBR","UNITED KINGDOM" -"3269722112","3269750799","CZ","CZE","CZECH REPUBLIC" -"3269750800","3269750815","CR","CRI","COSTA RICA" -"3269750816","3269787647","CZ","CZE","CZECH REPUBLIC" -"3269787648","3269853183","NL","NLD","NETHERLANDS" -"3269853184","3269918719","CH","CHE","SWITZERLAND" -"3269918720","3269936063","DE","DEU","GERMANY" -"3269936064","3269936079","NL","NLD","NETHERLANDS" -"3269936080","3269984255","DE","DEU","GERMANY" -"3269984256","3270049791","AT","AUT","AUSTRIA" -"3270049792","3270115327","DE","DEU","GERMANY" -"3270117504","3270117631","DK","DNK","DENMARK" -"3270122240","3270122495","DK","DNK","DENMARK" -"3270123716","3270123719","DK","DNK","DENMARK" -"3270123776","3270124031","DK","DNK","DENMARK" -"3270124544","3270124799","DK","DNK","DENMARK" -"3270125056","3270125567","DK","DNK","DENMARK" -"3270126080","3270126335","DK","DNK","DENMARK" -"3270126624","3270126655","DK","DNK","DENMARK" -"3270131968","3270132223","NO","NOR","NORWAY" -"3270132992","3270133023","NO","NOR","NORWAY" -"3270136928","3270136959","NO","NOR","NORWAY" -"3270136992","3270137055","NO","NOR","NORWAY" -"3270140928","3270141439","NO","NOR","NORWAY" -"3270142208","3270142463","NO","NOR","NORWAY" -"3270144000","3270144767","NO","NOR","NORWAY" -"3270146816","3270147327","NO","NOR","NORWAY" -"3270147584","3270148095","NO","NOR","NORWAY" -"3270148096","3270151423","FI","FIN","FINLAND" -"3270151936","3270154527","FI","FIN","FINLAND" -"3270155008","3270155775","FI","FIN","FINLAND" -"3270156288","3270156799","DK","DNK","DENMARK" -"3270159616","3270159871","DK","DNK","DENMARK" -"3270164992","3270165247","NO","NOR","NORWAY" -"3270166528","3270167807","NO","NOR","NORWAY" -"3270169088","3270169343","NO","NOR","NORWAY" -"3270170112","3270170623","NO","NOR","NORWAY" -"3270174720","3270174975","NO","NOR","NORWAY" -"3270175744","3270175999","NO","NOR","NORWAY" -"3270181120","3270181375","CH","CHE","SWITZERLAND" -"3270181632","3270181887","CH","CHE","SWITZERLAND" -"3270182144","3270182399","CH","CHE","SWITZERLAND" -"3270182656","3270183679","CH","CHE","SWITZERLAND" -"3270189056","3270189311","BE","BEL","BELGIUM" -"3270190080","3270190591","IT","ITA","ITALY" -"3270190592","3270191103","CH","CHE","SWITZERLAND" -"3270191872","3270192047","CH","CHE","SWITZERLAND" -"3270196992","3270197247","CH","CHE","SWITZERLAND" -"3270200064","3270200319","NL","NLD","NETHERLANDS" -"3270201344","3270201599","NL","NLD","NETHERLANDS" -"3270202880","3270203135","NL","NLD","NETHERLANDS" -"3270205440","3270205695","NL","NLD","NETHERLANDS" -"3270205984","3270205999","ES","ESP","SPAIN" -"3270206064","3270206079","ES","ESP","SPAIN" -"3270206976","3270207231","ES","ESP","SPAIN" -"3270207232","3270207487","CH","CHE","SWITZERLAND" -"3270207744","3270207903","IT","ITA","ITALY" -"3270208000","3270208255","CH","CHE","SWITZERLAND" -"3270208256","3270208511","LU","LUX","LUXEMBOURG" -"3270208768","3270209023","RO","ROM","ROMANIA" -"3270209024","3270209279","NL","NLD","NETHERLANDS" -"3270212352","3270212863","NL","NLD","NETHERLANDS" -"3270213120","3270213631","NL","NLD","NETHERLANDS" -"3270213888","3270214279","PT","PRT","PORTUGAL" -"3270214280","3270214287","US","USA","UNITED STATES" -"3270214288","3270214303","PT","PRT","PORTUGAL" -"3270214320","3270215439","PT","PRT","PORTUGAL" -"3270215520","3270215935","PT","PRT","PORTUGAL" -"3270216192","3270216351","PT","PRT","PORTUGAL" -"3270216384","3270216703","PT","PRT","PORTUGAL" -"3270216736","3270216751","IT","ITA","ITALY" -"3270216800","3270216815","IT","ITA","ITALY" -"3270216832","3270216879","IT","ITA","ITALY" -"3270217472","3270217727","CH","CHE","SWITZERLAND" -"3270218496","3270218751","CH","CHE","SWITZERLAND" -"3270224640","3270224895","CH","CHE","SWITZERLAND" -"3270230272","3270230783","LU","LUX","LUXEMBOURG" -"3270231296","3270231647","LU","LUX","LUXEMBOURG" -"3270232576","3270232831","LU","LUX","LUXEMBOURG" -"3270234112","3270234367","LU","LUX","LUXEMBOURG" -"3270234368","3270234623","NL","NLD","NETHERLANDS" -"3270235136","3270236159","NL","NLD","NETHERLANDS" -"3270238208","3270238719","NL","NLD","NETHERLANDS" -"3270238976","3270239487","CH","CHE","SWITZERLAND" -"3270241792","3270242559","RO","ROM","ROMANIA" -"3270243328","3270243839","RO","ROM","ROMANIA" -"3270244096","3270244351","NL","NLD","NETHERLANDS" -"3270244352","3270244863","CH","CHE","SWITZERLAND" -"3270245888","3270246143","RO","ROM","ROMANIA" -"3270246144","3270246399","CH","CHE","SWITZERLAND" -"3270246400","3270247951","SE","SWE","SWEDEN" -"3270247952","3270247955","NO","NOR","NORWAY" -"3270247956","3270369919","SE","SWE","SWEDEN" -"3270369920","3270369927","NO","NOR","NORWAY" -"3270369928","3270377471","SE","SWE","SWEDEN" -"3270377472","3270443007","GB","GBR","UNITED KINGDOM" -"3270443008","3270508543","DK","DNK","DENMARK" -"3270508544","3270639615","FI","FIN","FINLAND" -"3270639616","3270640127","PL","POL","POLAND" -"3270640128","3270642175","RU","RUS","RUSSIAN FEDERATION" -"3270642176","3270642687","NO","NOR","NORWAY" -"3270643200","3270643711","RU","RUS","RUSSIAN FEDERATION" -"3270643712","3270644223","AT","AUT","AUSTRIA" -"3270644224","3270644735","NL","NLD","NETHERLANDS" -"3270644736","3270645247","DE","DEU","GERMANY" -"3270645248","3270645759","PL","POL","POLAND" -"3270645760","3270646271","IL","ISR","ISRAEL" -"3270646272","3270647807","RU","RUS","RUSSIAN FEDERATION" -"3270647808","3270648063","TR","TUR","TURKEY" -"3270648064","3270648319","RU","RUS","RUSSIAN FEDERATION" -"3270648320","3270648575","CH","CHE","SWITZERLAND" -"3270648576","3270648831","AT","AUT","AUSTRIA" -"3270648832","3270649087","SI","SVN","SLOVENIA" -"3270649088","3270649343","AT","AUT","AUSTRIA" -"3270649344","3270649599","DK","DNK","DENMARK" -"3270649600","3270649855","PL","POL","POLAND" -"3270649856","3270650111","DK","DNK","DENMARK" -"3270650112","3270650367","AT","AUT","AUSTRIA" -"3270650368","3270650623","DK","DNK","DENMARK" -"3270650624","3270651391","FR","FRA","FRANCE" -"3270651392","3270651647","DE","DEU","GERMANY" -"3270651648","3270651903","FR","FRA","FRANCE" -"3270651904","3270652415","IT","ITA","ITALY" -"3270652416","3270652671","DK","DNK","DENMARK" -"3270652672","3270652927","CH","CHE","SWITZERLAND" -"3270652928","3270653183","PL","POL","POLAND" -"3270653184","3270653439","UA","UKR","UKRAINE" -"3270653440","3270653695","NL","NLD","NETHERLANDS" -"3270653696","3270653951","GB","GBR","UNITED KINGDOM" -"3270653952","3270654207","ES","ESP","SPAIN" -"3270654464","3270654719","BE","BEL","BELGIUM" -"3270654720","3270655231","UA","UKR","UKRAINE" -"3270655232","3270655487","IT","ITA","ITALY" -"3270655488","3270655743","PL","POL","POLAND" -"3270655744","3270655999","CH","CHE","SWITZERLAND" -"3270656000","3270664191","NL","NLD","NETHERLANDS" -"3270664192","3270666239","UA","UKR","UKRAINE" -"3270666240","3270667263","PL","POL","POLAND" -"3270667264","3270668287","SE","SWE","SWEDEN" -"3270668288","3270669311","FR","FRA","FRANCE" -"3270669312","3270670335","UA","UKR","UKRAINE" -"3270670336","3270671359","RU","RUS","RUSSIAN FEDERATION" -"3270672384","3270680575","GB","GBR","UNITED KINGDOM" -"3270680576","3270688767","FR","FRA","FRANCE" -"3270688768","3270772079","IT","ITA","ITALY" -"3270772080","3270772087","NL","NLD","NETHERLANDS" -"3270772088","3270781343","IT","ITA","ITALY" -"3270781344","3270781359","RO","ROM","ROMANIA" -"3270781360","3270808127","IT","ITA","ITALY" -"3270808128","3270808159","LU","LUX","LUXEMBOURG" -"3270808160","3270836223","IT","ITA","ITALY" -"3270836224","3270911807","DE","DEU","GERMANY" -"3270911872","3270911935","DE","DEU","GERMANY" -"3270911936","3270911967","PL","POL","POLAND" -"3270911968","3270911999","NL","NLD","NETHERLANDS" -"3270912000","3270920191","DE","DEU","GERMANY" -"3270922240","3270926335","DE","DEU","GERMANY" -"3270926336","3270926591","AT","AUT","AUSTRIA" -"3270926592","3270926847","CH","CHE","SWITZERLAND" -"3270926848","3270927103","PL","POL","POLAND" -"3270927104","3270927359","UA","UKR","UKRAINE" -"3270927360","3270927615","CH","CHE","SWITZERLAND" -"3270927616","3270927871","FR","FRA","FRANCE" -"3270927872","3270928127","HU","HUN","HUNGARY" -"3270928128","3270928383","RO","ROM","ROMANIA" -"3270928384","3270928895","UA","UKR","UKRAINE" -"3270928896","3270929407","PL","POL","POLAND" -"3270929408","3270929919","GB","GBR","UNITED KINGDOM" -"3270929920","3270930431","BG","BGR","BULGARIA" -"3270930432","3270931455","RU","RUS","RUSSIAN FEDERATION" -"3270931456","3270931967","UA","UKR","UKRAINE" -"3270931968","3270932479","CH","CHE","SWITZERLAND" -"3270932480","3270932991","UA","UKR","UKRAINE" -"3270932992","3270933503","DE","DEU","GERMANY" -"3270933504","3270934015","PL","POL","POLAND" -"3270934016","3270934527","IT","ITA","ITALY" -"3270934528","3270967295","DE","DEU","GERMANY" -"3270975488","3270991871","GB","GBR","UNITED KINGDOM" -"3270991872","3271000063","NL","NLD","NETHERLANDS" -"3271000064","3271008255","RU","RUS","RUSSIAN FEDERATION" -"3271008256","3271008767","BE","BEL","BELGIUM" -"3271008768","3271009279","SI","SVN","SLOVENIA" -"3271009280","3271009791","MD","MDA","REPUBLIC OF MOLDOVA" -"3271009792","3271010303","IL","ISR","ISRAEL" -"3271010304","3271010815","RU","RUS","RUSSIAN FEDERATION" -"3271010816","3271011327","GB","GBR","UNITED KINGDOM" -"3271011328","3271013375","UA","UKR","UKRAINE" -"3271013376","3271013887","FR","FRA","FRANCE" -"3271013888","3271014399","UA","UKR","UKRAINE" -"3271014400","3271014911","RU","RUS","RUSSIAN FEDERATION" -"3271014912","3271015423","RO","ROM","ROMANIA" -"3271015424","3271015935","DK","DNK","DENMARK" -"3271015936","3271016447","RU","RUS","RUSSIAN FEDERATION" -"3271016448","3271018655","CS","SCG","SERBIA AND MONTENEGRO" -"3271018656","3271018671","CS","SCG","SERBIA AND MONTENEGRO" -"3271018672","3271019183","CS","SCG","SERBIA AND MONTENEGRO" -"3271019184","3271019200","RS","SRB","SERBIA" -"3271019201","3271019271","CS","SCG","SERBIA AND MONTENEGRO" -"3271019272","3271019279","RS","SRB","SERBIA" -"3271019280","3271019903","CS","SCG","SERBIA AND MONTENEGRO" -"3271019904","3271019919","RS","SRB","SERBIA" -"3271019920","3271020199","CS","SCG","SERBIA AND MONTENEGRO" -"3271020200","3271020207","RS","SRB","SERBIA" -"3271020208","3271020215","CS","SCG","SERBIA AND MONTENEGRO" -"3271020216","3271020223","RS","SRB","SERBIA" -"3271020224","3271020247","CS","SCG","SERBIA AND MONTENEGRO" -"3271020248","3271020255","RS","SRB","SERBIA" -"3271020256","3271020271","CS","SCG","SERBIA AND MONTENEGRO" -"3271020272","3271020279","RS","SRB","SERBIA" -"3271020280","3271020511","CS","SCG","SERBIA AND MONTENEGRO" -"3271020512","3271020543","CS","SCG","SERBIA AND MONTENEGRO" -"3271020544","3271020671","CS","SCG","SERBIA AND MONTENEGRO" -"3271020672","3271020687","RS","SRB","SERBIA" -"3271020688","3271020695","CS","SCG","SERBIA AND MONTENEGRO" -"3271020696","3271020703","CS","SCG","SERBIA AND MONTENEGRO" -"3271020704","3271020751","CS","SCG","SERBIA AND MONTENEGRO" -"3271020752","3271020767","RS","SRB","SERBIA" -"3271020768","3271021311","CS","SCG","SERBIA AND MONTENEGRO" -"3271021312","3271021327","RS","SRB","SERBIA" -"3271021328","3271022335","CS","SCG","SERBIA AND MONTENEGRO" -"3271022336","3271022463","CY","CYP","CYPRUS" -"3271022464","3271022583","CS","SCG","SERBIA AND MONTENEGRO" -"3271022584","3271022591","RS","SRB","SERBIA" -"3271022592","3271023631","CS","SCG","SERBIA AND MONTENEGRO" -"3271023632","3271023647","RS","SRB","SERBIA" -"3271023648","3271024395","CS","SCG","SERBIA AND MONTENEGRO" -"3271024396","3271024447","CS","SCG","SERBIA AND MONTENEGRO" -"3271024448","3271024451","BA","BIH","BOSNIA AND HERZEGOVINA" -"3271024452","3271024455","CS","SCG","SERBIA AND MONTENEGRO" -"3271024456","3271024495","CS","SCG","SERBIA AND MONTENEGRO" -"3271024496","3271024639","CS","SCG","SERBIA AND MONTENEGRO" -"3271024640","3271032831","GB","GBR","UNITED KINGDOM" -"3271032832","3271098367","NO","NOR","NORWAY" -"3271098368","3271163903","SI","SVN","SLOVENIA" -"3271163904","3271200767","FR","FRA","FRANCE" -"3271200768","3271200775","GB","GBR","UNITED KINGDOM" -"3271200776","3271200783","ES","ESP","SPAIN" -"3271200784","3271229439","FR","FRA","FRANCE" -"3271229440","3271249919","FI","FIN","FINLAND" -"3271249920","3271250175","SE","SWE","SWEDEN" -"3271250176","3271280351","FI","FIN","FINLAND" -"3271280352","3271280383","RU","RUS","RUSSIAN FEDERATION" -"3271280384","3271280687","FI","FIN","FINLAND" -"3271280688","3271280703","SE","SWE","SWEDEN" -"3271280704","3271280719","FI","FIN","FINLAND" -"3271280720","3271280735","SE","SWE","SWEDEN" -"3271280736","3271290623","FI","FIN","FINLAND" -"3271290624","3271290879","BE","BEL","BELGIUM" -"3271290880","3271310079","FI","FIN","FINLAND" -"3271310080","3271310335","DE","DEU","GERMANY" -"3271310336","3271360511","FI","FIN","FINLAND" -"3271360512","3271363407","GB","GBR","UNITED KINGDOM" -"3271363408","3271363415","AT","AUT","AUSTRIA" -"3271363416","3271363423","GB","GBR","UNITED KINGDOM" -"3271363424","3271363455","IT","ITA","ITALY" -"3271363456","3271363471","GB","GBR","UNITED KINGDOM" -"3271363472","3271363487","ZA","ZAF","SOUTH AFRICA" -"3271363488","3271363519","IT","ITA","ITALY" -"3271363552","3271363583","FR","FRA","FRANCE" -"3271363584","3271365887","GB","GBR","UNITED KINGDOM" -"3271365888","3271366143","DE","DEU","GERMANY" -"3271366144","3271366399","GB","GBR","UNITED KINGDOM" -"3271366400","3271366655","NL","NLD","NETHERLANDS" -"3271366656","3271371263","GB","GBR","UNITED KINGDOM" -"3271371264","3271371519","IE","IRL","IRELAND" -"3271371520","3271371679","ZA","ZAF","SOUTH AFRICA" -"3271371680","3271371711","DE","DEU","GERMANY" -"3271371712","3271371775","CH","CHE","SWITZERLAND" -"3271371776","3271372031","GB","GBR","UNITED KINGDOM" -"3271372032","3271372287","BE","BEL","BELGIUM" -"3271372288","3271372799","FR","FRA","FRANCE" -"3271372800","3271373055","SE","SWE","SWEDEN" -"3271373056","3271373311","BE","BEL","BELGIUM" -"3271373312","3271373567","GB","GBR","UNITED KINGDOM" -"3271373568","3271373823","FR","FRA","FRANCE" -"3271373824","3271374079","DE","DEU","GERMANY" -"3271374080","3271374335","BE","BEL","BELGIUM" -"3271374336","3271374847","DE","DEU","GERMANY" -"3271374848","3271375359","GB","GBR","UNITED KINGDOM" -"3271375360","3271375871","CH","CHE","SWITZERLAND" -"3271375872","3271376383","BE","BEL","BELGIUM" -"3271376384","3271376447","GB","GBR","UNITED KINGDOM" -"3271376448","3271376463","FR","FRA","FRANCE" -"3271376464","3271376479","IT","ITA","ITALY" -"3271376480","3271376511","FR","FRA","FRANCE" -"3271376512","3271376639","DE","DEU","GERMANY" -"3271376640","3271376895","AT","AUT","AUSTRIA" -"3271376896","3271377407","ES","ESP","SPAIN" -"3271377408","3271377919","NL","NLD","NETHERLANDS" -"3271377920","3271378687","BE","BEL","BELGIUM" -"3271378688","3271378943","SE","SWE","SWEDEN" -"3271378944","3271380991","GB","GBR","UNITED KINGDOM" -"3271380992","3271381247","BE","BEL","BELGIUM" -"3271381248","3271381503","NO","NOR","NORWAY" -"3271381504","3271381759","SE","SWE","SWEDEN" -"3271381760","3271382527","IT","ITA","ITALY" -"3271382528","3271383039","IL","ISR","ISRAEL" -"3271383040","3271383295","CH","CHE","SWITZERLAND" -"3271383296","3271383551","BE","BEL","BELGIUM" -"3271383552","3271384063","GB","GBR","UNITED KINGDOM" -"3271384064","3271384319","CH","CHE","SWITZERLAND" -"3271384320","3271384575","BE","BEL","BELGIUM" -"3271384576","3271384831","GB","GBR","UNITED KINGDOM" -"3271384832","3271385087","BE","BEL","BELGIUM" -"3271385088","3271385159","DE","DEU","GERMANY" -"3271385160","3271385183","GB","GBR","UNITED KINGDOM" -"3271385184","3271385215","ES","ESP","SPAIN" -"3271385216","3271385343","NL","NLD","NETHERLANDS" -"3271385344","3271391231","DE","DEU","GERMANY" -"3271391232","3271391743","NL","NLD","NETHERLANDS" -"3271391744","3271391999","NO","NOR","NORWAY" -"3271392000","3271392255","DE","DEU","GERMANY" -"3271392256","3271392511","FR","FRA","FRANCE" -"3271392512","3271392767","BE","BEL","BELGIUM" -"3271392768","3271393279","FR","FRA","FRANCE" -"3271393280","3271393791","AT","AUT","AUSTRIA" -"3271393792","3271394047","DK","DNK","DENMARK" -"3271394048","3271394303","DE","DEU","GERMANY" -"3271394304","3271394559","BE","BEL","BELGIUM" -"3271394560","3271394815","GB","GBR","UNITED KINGDOM" -"3271394816","3271395071","DE","DEU","GERMANY" -"3271395072","3271395327","GB","GBR","UNITED KINGDOM" -"3271395328","3271396863","IT","ITA","ITALY" -"3271396864","3271397119","GB","GBR","UNITED KINGDOM" -"3271397120","3271397375","NL","NLD","NETHERLANDS" -"3271397376","3271397887","CH","CHE","SWITZERLAND" -"3271397888","3271397951","FR","FRA","FRANCE" -"3271397952","3271397983","IT","ITA","ITALY" -"3271397984","3271397999","NL","NLD","NETHERLANDS" -"3271398000","3271398015","FR","FRA","FRANCE" -"3271398016","3271398047","NL","NLD","NETHERLANDS" -"3271398048","3271398079","ZA","ZAF","SOUTH AFRICA" -"3271398080","3271398143","GB","GBR","UNITED KINGDOM" -"3271398144","3271398303","NL","NLD","NETHERLANDS" -"3271398304","3271398335","DE","DEU","GERMANY" -"3271398336","3271398399","IT","ITA","ITALY" -"3271398400","3271398911","DE","DEU","GERMANY" -"3271398912","3271399167","GB","GBR","UNITED KINGDOM" -"3271399168","3271400959","BE","BEL","BELGIUM" -"3271400960","3271401215","CH","CHE","SWITZERLAND" -"3271401216","3271401471","DE","DEU","GERMANY" -"3271401472","3271403263","DK","DNK","DENMARK" -"3271403264","3271403519","DE","DEU","GERMANY" -"3271403520","3271403775","NL","NLD","NETHERLANDS" -"3271403776","3271403903","ZA","ZAF","SOUTH AFRICA" -"3271403904","3271403919","GB","GBR","UNITED KINGDOM" -"3271403920","3271403935","IE","IRL","IRELAND" -"3271403936","3271403967","GB","GBR","UNITED KINGDOM" -"3271403968","3271403983","ZA","ZAF","SOUTH AFRICA" -"3271403984","3271403991","GB","GBR","UNITED KINGDOM" -"3271403992","3271403999","ZA","ZAF","SOUTH AFRICA" -"3271404000","3271404031","DE","DEU","GERMANY" -"3271404032","3271405311","NL","NLD","NETHERLANDS" -"3271405312","3271405567","FR","FRA","FRANCE" -"3271405568","3271405823","ES","ESP","SPAIN" -"3271405824","3271406079","AT","AUT","AUSTRIA" -"3271406080","3271406335","ZA","ZAF","SOUTH AFRICA" -"3271406336","3271406591","RO","ROM","ROMANIA" -"3271406592","3271406847","GB","GBR","UNITED KINGDOM" -"3271406848","3271407615","AT","AUT","AUSTRIA" -"3271407616","3271407871","DE","DEU","GERMANY" -"3271407872","3271408127","AT","AUT","AUSTRIA" -"3271408128","3271408383","DE","DEU","GERMANY" -"3271408384","3271408639","FR","FRA","FRANCE" -"3271408640","3271408895","BE","BEL","BELGIUM" -"3271408896","3271409151","ES","ESP","SPAIN" -"3271409152","3271409407","IT","ITA","ITALY" -"3271409408","3271409663","GB","GBR","UNITED KINGDOM" -"3271409664","3271417855","BE","BEL","BELGIUM" -"3271417856","3271424071","FR","FRA","FRANCE" -"3271424072","3271424079","IT","ITA","ITALY" -"3271424080","3271424095","IE","IRL","IRELAND" -"3271424096","3271424111","GB","GBR","UNITED KINGDOM" -"3271424112","3271424127","BE","BEL","BELGIUM" -"3271424128","3271424191","GB","GBR","UNITED KINGDOM" -"3271424192","3271424511","FR","FRA","FRANCE" -"3271424512","3271425023","GB","GBR","UNITED KINGDOM" -"3271425024","3271425279","DE","DEU","GERMANY" -"3271425280","3271425535","DK","DNK","DENMARK" -"3271425536","3271426047","DE","DEU","GERMANY" -"3271426048","3271426303","PF","PYF","FRENCH POLYNESIA" -"3271426304","3271491583","FR","FRA","FRANCE" -"3271491584","3271495679","DK","DNK","DENMARK" -"3271495680","3271495807","SE","SWE","SWEDEN" -"3271495808","3271557119","DK","DNK","DENMARK" -"3271557120","3271589887","BE","BEL","BELGIUM" -"3271589888","3271688191","NO","NOR","NORWAY" -"3271691776","3271692031","US","USA","UNITED STATES" -"3271692032","3271692287","GB","GBR","UNITED KINGDOM" -"3271694848","3271695103","GB","GBR","UNITED KINGDOM" -"3271696384","3271698431","DE","DEU","GERMANY" -"3271704576","3271712767","RU","RUS","RUSSIAN FEDERATION" -"3271712768","3271716863","LV","LVA","LATVIA" -"3271716864","3271717119","RU","RUS","RUSSIAN FEDERATION" -"3271717120","3271720959","LV","LVA","LATVIA" -"3271720960","3271729151","GB","GBR","UNITED KINGDOM" -"3271729152","3271737343","DE","DEU","GERMANY" -"3271737344","3271738367","RU","RUS","RUSSIAN FEDERATION" -"3271738368","3271738879","RO","ROM","ROMANIA" -"3271738880","3271739391","RU","RUS","RUSSIAN FEDERATION" -"3271739392","3271739903","AT","AUT","AUSTRIA" -"3271739904","3271740415","IE","IRL","IRELAND" -"3271740416","3271740927","UA","UKR","UKRAINE" -"3271740928","3271741439","RU","RUS","RUSSIAN FEDERATION" -"3271741440","3271741951","PL","POL","POLAND" -"3271741952","3271743999","RU","RUS","RUSSIAN FEDERATION" -"3271744000","3271744511","RO","ROM","ROMANIA" -"3271744512","3271745023","AT","AUT","AUSTRIA" -"3271745024","3271745535","PL","POL","POLAND" -"3271745536","3271746047","GB","GBR","UNITED KINGDOM" -"3271746048","3271746559","IE","IRL","IRELAND" -"3271746560","3271747071","CH","CHE","SWITZERLAND" -"3271747072","3271747583","KZ","KAZ","KAZAKHSTAN" -"3271747584","3271748095","RU","RUS","RUSSIAN FEDERATION" -"3271748096","3271748607","GR","GRC","GREECE" -"3271748608","3271749119","UA","UKR","UKRAINE" -"3271749120","3271750143","RU","RUS","RUSSIAN FEDERATION" -"3271750144","3271750655","UA","UKR","UKRAINE" -"3271750656","3271750783","NL","NLD","NETHERLANDS" -"3271750784","3271751167","GB","GBR","UNITED KINGDOM" -"3271751168","3271751679","RO","ROM","ROMANIA" -"3271751680","3271752191","NL","NLD","NETHERLANDS" -"3271752192","3271752703","GB","GBR","UNITED KINGDOM" -"3271752704","3271753215","RU","RUS","RUSSIAN FEDERATION" -"3271753216","3271753727","PL","POL","POLAND" -"3271753728","3271770111","FR","FRA","FRANCE" -"3271770112","3271786495","AT","AUT","AUSTRIA" -"3271786496","3271788543","UA","UKR","UKRAINE" -"3271788544","3271789567","GB","GBR","UNITED KINGDOM" -"3271789568","3271790591","RU","RUS","RUSSIAN FEDERATION" -"3271790592","3271791615","LV","LVA","LATVIA" -"3271791616","3271792639","UA","UKR","UKRAINE" -"3271792640","3271793663","PL","POL","POLAND" -"3271793664","3271794687","UA","UKR","UKRAINE" -"3271794688","3271795711","IT","ITA","ITALY" -"3271795712","3271796735","NL","NLD","NETHERLANDS" -"3271796736","3271797759","SK","SVK","SLOVAKIA" -"3271797760","3271798783","GB","GBR","UNITED KINGDOM" -"3271798784","3271799807","NL","NLD","NETHERLANDS" -"3271800832","3271801855","GB","GBR","UNITED KINGDOM" -"3271801856","3271802879","PS","PSE","PALESTINIAN TERRITORY, OCCUPIED" -"3271802880","3271803903","DE","DEU","GERMANY" -"3271803904","3271804927","UA","UKR","UKRAINE" -"3271804928","3271805951","PL","POL","POLAND" -"3271805952","3271806975","UA","UKR","UKRAINE" -"3271806976","3271807999","GB","GBR","UNITED KINGDOM" -"3271808000","3271810047","DE","DEU","GERMANY" -"3271810048","3271811071","PL","POL","POLAND" -"3271811072","3271812095","UA","UKR","UKRAINE" -"3271812096","3271813119","ES","ESP","SPAIN" -"3271813120","3271814143","PL","POL","POLAND" -"3271814144","3271815167","UA","UKR","UKRAINE" -"3271815168","3271816191","RU","RUS","RUSSIAN FEDERATION" -"3271816192","3271817215","UA","UKR","UKRAINE" -"3271817216","3271818239","DE","DEU","GERMANY" -"3271818240","3271819263","RU","RUS","RUSSIAN FEDERATION" -"3271819264","3271821246","DE","DEU","GERMANY" -"3271821247","3271821247","AT","AUT","AUSTRIA" -"3271821248","3271847487","DE","DEU","GERMANY" -"3271847488","3271847495","US","USA","UNITED STATES" -"3271847496","3271851879","DE","DEU","GERMANY" -"3271851880","3271851887","NL","NLD","NETHERLANDS" -"3271851888","3271884799","DE","DEU","GERMANY" -"3271884800","3271901183","UA","UKR","UKRAINE" -"3271901184","3271909375","ES","ESP","SPAIN" -"3271909376","3271909887","RO","ROM","ROMANIA" -"3271909888","3271910399","DE","DEU","GERMANY" -"3271910400","3271910911","DK","DNK","DENMARK" -"3271910912","3271911423","LV","LVA","LATVIA" -"3271911424","3271911935","LI","LIE","LIECHTENSTEIN" -"3271911936","3271912959","UA","UKR","UKRAINE" -"3271912960","3271913471","NL","NLD","NETHERLANDS" -"3271913472","3271913983","NO","NOR","NORWAY" -"3271913984","3271914495","RO","ROM","ROMANIA" -"3271915008","3271915519","SE","SWE","SWEDEN" -"3271915520","3271916031","NL","NLD","NETHERLANDS" -"3271916032","3271916543","GB","GBR","UNITED KINGDOM" -"3271916544","3271917055","UA","UKR","UKRAINE" -"3271917056","3271917567","RO","ROM","ROMANIA" -"3271917568","3271925759","RU","RUS","RUSSIAN FEDERATION" -"3271925760","3271926015","DE","DEU","GERMANY" -"3271926016","3271926271","MD","MDA","REPUBLIC OF MOLDOVA" -"3271926272","3271926527","RU","RUS","RUSSIAN FEDERATION" -"3271926528","3271926783","NL","NLD","NETHERLANDS" -"3271926784","3271927295","SI","SVN","SLOVENIA" -"3271927296","3271927551","NO","NOR","NORWAY" -"3271927552","3271927807","GB","GBR","UNITED KINGDOM" -"3271927808","3271928063","TR","TUR","TURKEY" -"3271928064","3271928319","GB","GBR","UNITED KINGDOM" -"3271928320","3271928575","RU","RUS","RUSSIAN FEDERATION" -"3271928576","3271928831","CH","CHE","SWITZERLAND" -"3271928832","3271929087","IE","IRL","IRELAND" -"3271929088","3271929343","LB","LBN","LEBANON" -"3271929344","3271929599","NO","NOR","NORWAY" -"3271929600","3271929855","GB","GBR","UNITED KINGDOM" -"3271929856","3271930111","PL","POL","POLAND" -"3271930112","3271930367","HU","HUN","HUNGARY" -"3271930368","3271930623","RU","RUS","RUSSIAN FEDERATION" -"3271930624","3271930879","GB","GBR","UNITED KINGDOM" -"3271930880","3271931135","CH","CHE","SWITZERLAND" -"3271931136","3271931647","PL","POL","POLAND" -"3271931648","3271931903","NO","NOR","NORWAY" -"3271931904","3271932159","UA","UKR","UKRAINE" -"3271932160","3271932415","SE","SWE","SWEDEN" -"3271932416","3271932671","CZ","CZE","CZECH REPUBLIC" -"3271932672","3271932927","DE","DEU","GERMANY" -"3271932928","3271933183","PL","POL","POLAND" -"3271933184","3271933439","GB","GBR","UNITED KINGDOM" -"3271933440","3271933695","SE","SWE","SWEDEN" -"3271933696","3271933951","DE","DEU","GERMANY" -"3271933952","3271977533","FR","FRA","FRANCE" -"3271977534","3271977534","US","USA","UNITED STATES" -"3271977535","3272015871","FR","FRA","FRANCE" -"3272015872","3272019967","RO","ROM","ROMANIA" -"3272019968","3272020991","IT","ITA","ITALY" -"3272020992","3272024063","DK","DNK","DENMARK" -"3272024064","3272032255","IE","IRL","IRELAND" -"3272032256","3272040447","SE","SWE","SWEDEN" -"3272040448","3272048639","FR","FRA","FRANCE" -"3272048640","3272056831","NL","NLD","NETHERLANDS" -"3272056832","3272065023","RU","RUS","RUSSIAN FEDERATION" -"3272065024","3272065087","NL","NLD","NETHERLANDS" -"3272065088","3272065151","GB","GBR","UNITED KINGDOM" -"3272065152","3272065183","NL","NLD","NETHERLANDS" -"3272065184","3272065215","GB","GBR","UNITED KINGDOM" -"3272065216","3272065279","NL","NLD","NETHERLANDS" -"3272065280","3272065343","GB","GBR","UNITED KINGDOM" -"3272065344","3272065503","NL","NLD","NETHERLANDS" -"3272065504","3272065535","GB","GBR","UNITED KINGDOM" -"3272065536","3272065551","NL","NLD","NETHERLANDS" -"3272065552","3272065559","GB","GBR","UNITED KINGDOM" -"3272065560","3272065575","NL","NLD","NETHERLANDS" -"3272065576","3272065583","GB","GBR","UNITED KINGDOM" -"3272065584","3272065599","NL","NLD","NETHERLANDS" -"3272065600","3272065615","GB","GBR","UNITED KINGDOM" -"3272065616","3272065663","NL","NLD","NETHERLANDS" -"3272065664","3272065791","GB","GBR","UNITED KINGDOM" -"3272065792","3272065823","NL","NLD","NETHERLANDS" -"3272065824","3272066335","GB","GBR","UNITED KINGDOM" -"3272066336","3272066431","NL","NLD","NETHERLANDS" -"3272066432","3272066815","GB","GBR","UNITED KINGDOM" -"3272066816","3272066879","NL","NLD","NETHERLANDS" -"3272066880","3272066911","GB","GBR","UNITED KINGDOM" -"3272066912","3272066943","NL","NLD","NETHERLANDS" -"3272066944","3272067063","GB","GBR","UNITED KINGDOM" -"3272067064","3272067071","NL","NLD","NETHERLANDS" -"3272067072","3272067327","GB","GBR","UNITED KINGDOM" -"3272067328","3272067583","NL","NLD","NETHERLANDS" -"3272067584","3272067615","GB","GBR","UNITED KINGDOM" -"3272067616","3272067647","NL","NLD","NETHERLANDS" -"3272067648","3272067711","GB","GBR","UNITED KINGDOM" -"3272067712","3272067775","NL","NLD","NETHERLANDS" -"3272067776","3272067807","GB","GBR","UNITED KINGDOM" -"3272067808","3272067839","NL","NLD","NETHERLANDS" -"3272067840","3272067871","GB","GBR","UNITED KINGDOM" -"3272067872","3272067887","NL","NLD","NETHERLANDS" -"3272067888","3272067927","GB","GBR","UNITED KINGDOM" -"3272067928","3272067967","NL","NLD","NETHERLANDS" -"3272067968","3272068095","GB","GBR","UNITED KINGDOM" -"3272068096","3272068351","NL","NLD","NETHERLANDS" -"3272068352","3272068607","GB","GBR","UNITED KINGDOM" -"3272068608","3272068863","NL","NLD","NETHERLANDS" -"3272068864","3272069119","GB","GBR","UNITED KINGDOM" -"3272069120","3272069247","NL","NLD","NETHERLANDS" -"3272069248","3272069343","GB","GBR","UNITED KINGDOM" -"3272069344","3272069375","IT","ITA","ITALY" -"3272069376","3272069439","NL","NLD","NETHERLANDS" -"3272069440","3272069503","GB","GBR","UNITED KINGDOM" -"3272069504","3272069567","NL","NLD","NETHERLANDS" -"3272069568","3272069599","GB","GBR","UNITED KINGDOM" -"3272069600","3272069603","NL","NLD","NETHERLANDS" -"3272069604","3272069607","GB","GBR","UNITED KINGDOM" -"3272069608","3272069611","NL","NLD","NETHERLANDS" -"3272069612","3272069615","GB","GBR","UNITED KINGDOM" -"3272069616","3272069631","NL","NLD","NETHERLANDS" -"3272069632","3272070143","GB","GBR","UNITED KINGDOM" -"3272070144","3272070255","NL","NLD","NETHERLANDS" -"3272070256","3272070263","GB","GBR","UNITED KINGDOM" -"3272070264","3272070271","NL","NLD","NETHERLANDS" -"3272070272","3272070399","GB","GBR","UNITED KINGDOM" -"3272070400","3272070463","NL","NLD","NETHERLANDS" -"3272070464","3272070559","GB","GBR","UNITED KINGDOM" -"3272070560","3272070591","NL","NLD","NETHERLANDS" -"3272070592","3272070623","GB","GBR","UNITED KINGDOM" -"3272070624","3272070639","NL","NLD","NETHERLANDS" -"3272070640","3272070647","GB","GBR","UNITED KINGDOM" -"3272070648","3272070655","NL","NLD","NETHERLANDS" -"3272070656","3272070911","GB","GBR","UNITED KINGDOM" -"3272070912","3272071167","NL","NLD","NETHERLANDS" -"3272071168","3272071247","GB","GBR","UNITED KINGDOM" -"3272071248","3272071283","NL","NLD","NETHERLANDS" -"3272071284","3272071287","GB","GBR","UNITED KINGDOM" -"3272071288","3272071295","NL","NLD","NETHERLANDS" -"3272071296","3272071327","GB","GBR","UNITED KINGDOM" -"3272071328","3272071551","NL","NLD","NETHERLANDS" -"3272071552","3272071615","GB","GBR","UNITED KINGDOM" -"3272071616","3272071647","NL","NLD","NETHERLANDS" -"3272071648","3272071935","GB","GBR","UNITED KINGDOM" -"3272071936","3272072063","NL","NLD","NETHERLANDS" -"3272072064","3272072191","GB","GBR","UNITED KINGDOM" -"3272072192","3272073215","NL","NLD","NETHERLANDS" -"3272073216","3272081407","GB","GBR","UNITED KINGDOM" -"3272081408","3272081919","PT","PRT","PORTUGAL" -"3272081920","3272082687","CV","CPV","CAPE VERDE" -"3272082688","3272083455","PT","PRT","PORTUGAL" -"3272083456","3272083711","ST","STP","SAO TOME AND PRINCIPE" -"3272083712","3272084735","PT","PRT","PORTUGAL" -"3272084736","3272084991","CV","CPV","CAPE VERDE" -"3272084992","3272085503","GW","GNB","GUINEA-BISSAU" -"3272085504","3272086015","AO","AGO","ANGOLA" -"3272086016","3272086527","ST","STP","SAO TOME AND PRINCIPE" -"3272086528","3272086655","AO","AGO","ANGOLA" -"3272086656","3272086783","PT","PRT","PORTUGAL" -"3272086784","3272086807","GH","GHA","GHANA" -"3272086808","3272086815","RO","ROM","ROMANIA" -"3272086816","3272086831","NI","NIC","NICARAGUA" -"3272086832","3272086879","AO","AGO","ANGOLA" -"3272086880","3272086975","PT","PRT","PORTUGAL" -"3272086976","3272087039","AN","ANT","NETHERLANDS ANTILLES" -"3272087040","3272087295","PT","PRT","PORTUGAL" -"3272087296","3272087551","AO","AGO","ANGOLA" -"3272087552","3272088063","PT","PRT","PORTUGAL" -"3272088064","3272088319","GH","GHA","GHANA" -"3272088320","3272089343","PT","PRT","PORTUGAL" -"3272089344","3272089479","ST","STP","SAO TOME AND PRINCIPE" -"3272089480","3272089535","PT","PRT","PORTUGAL" -"3272089536","3272089551","ST","STP","SAO TOME AND PRINCIPE" -"3272089552","3272089599","PT","PRT","PORTUGAL" -"3272089600","3272090111","NO","NOR","NORWAY" -"3272090112","3272091647","RU","RUS","RUSSIAN FEDERATION" -"3272091648","3272092671","UA","UKR","UKRAINE" -"3272092672","3272093183","RU","RUS","RUSSIAN FEDERATION" -"3272093184","3272094207","RO","ROM","ROMANIA" -"3272094208","3272094719","AM","ARM","ARMENIA" -"3272094720","3272095231","PL","POL","POLAND" -"3272095232","3272095743","FI","FIN","FINLAND" -"3272095744","3272096255","UA","UKR","UKRAINE" -"3272096256","3272096767","PT","PRT","PORTUGAL" -"3272096768","3272097279","FI","FIN","FINLAND" -"3272097280","3272097791","RU","RUS","RUSSIAN FEDERATION" -"3272097792","3272098519","GB","GBR","UNITED KINGDOM" -"3272098520","3272098528","FR","FRA","FRANCE" -"3272098529","3272106239","GB","GBR","UNITED KINGDOM" -"3272106240","3272106495","PL","POL","POLAND" -"3272106496","3272106751","SE","SWE","SWEDEN" -"3272106752","3272107007","PL","POL","POLAND" -"3272107008","3272107263","GB","GBR","UNITED KINGDOM" -"3272107264","3272107519","PL","POL","POLAND" -"3272107520","3272107775","RU","RUS","RUSSIAN FEDERATION" -"3272107776","3272108031","GB","GBR","UNITED KINGDOM" -"3272108032","3272108287","DE","DEU","GERMANY" -"3272108288","3272108543","RO","ROM","ROMANIA" -"3272108544","3272109055","PL","POL","POLAND" -"3272109056","3272109311","CH","CHE","SWITZERLAND" -"3272109312","3272109567","TR","TUR","TURKEY" -"3272109568","3272109823","GB","GBR","UNITED KINGDOM" -"3272109824","3272110079","FR","FRA","FRANCE" -"3272110080","3272110335","SE","SWE","SWEDEN" -"3272110336","3272110591","CH","CHE","SWITZERLAND" -"3272110592","3272110847","AT","AUT","AUSTRIA" -"3272110848","3272111103","LV","LVA","LATVIA" -"3272111104","3272111871","GB","GBR","UNITED KINGDOM" -"3272111872","3272112383","RO","ROM","ROMANIA" -"3272112384","3272113151","DE","DEU","GERMANY" -"3272113152","3272113407","FR","FRA","FRANCE" -"3272113408","3272113663","PL","POL","POLAND" -"3272113664","3272113919","GB","GBR","UNITED KINGDOM" -"3272113920","3272114175","AT","AUT","AUSTRIA" -"3272114176","3272122367","PL","POL","POLAND" -"3272122368","3272131071","GB","GBR","UNITED KINGDOM" -"3272131072","3272131583","RO","ROM","ROMANIA" -"3272131584","3272132095","GB","GBR","UNITED KINGDOM" -"3272132096","3272132607","CH","CHE","SWITZERLAND" -"3272132608","3272133119","UA","UKR","UKRAINE" -"3272133120","3272133631","GB","GBR","UNITED KINGDOM" -"3272133632","3272134143","EE","EST","ESTONIA" -"3272134144","3272134655","RO","ROM","ROMANIA" -"3272134656","3272135167","NL","NLD","NETHERLANDS" -"3272135168","3272135679","CH","CHE","SWITZERLAND" -"3272135680","3272136191","AT","AUT","AUSTRIA" -"3272136192","3272136703","FR","FRA","FRANCE" -"3272136704","3272137215","PL","POL","POLAND" -"3272137216","3272137727","LT","LTU","LITHUANIA" -"3272137728","3272138239","PL","POL","POLAND" -"3272138240","3272138751","BG","BGR","BULGARIA" -"3272138752","3272146943","DE","DEU","GERMANY" -"3272146944","3272161023","RU","RUS","RUSSIAN FEDERATION" -"3272161024","3272161279","KZ","KAZ","KAZAKHSTAN" -"3272161280","3272169215","RU","RUS","RUSSIAN FEDERATION" -"3272169216","3272169471","UA","UKR","UKRAINE" -"3272169472","3272178559","RU","RUS","RUSSIAN FEDERATION" -"3272178560","3272178623","UA","UKR","UKRAINE" -"3272178624","3272210175","RU","RUS","RUSSIAN FEDERATION" -"3272210176","3272210431","UA","UKR","UKRAINE" -"3272210432","3272212479","RU","RUS","RUSSIAN FEDERATION" -"3272212480","3272212991","GB","GBR","UNITED KINGDOM" -"3272213376","3272213391","IT","ITA","ITALY" -"3272213392","3272213399","GB","GBR","UNITED KINGDOM" -"3272213408","3272213415","NL","NLD","NETHERLANDS" -"3272213424","3272213431","NL","NLD","NETHERLANDS" -"3272213432","3272213455","GB","GBR","UNITED KINGDOM" -"3272213472","3272213487","CY","CYP","CYPRUS" -"3272213488","3272213495","GB","GBR","UNITED KINGDOM" -"3272213504","3272213567","IT","ITA","ITALY" -"3272213568","3272213575","GB","GBR","UNITED KINGDOM" -"3272213576","3272213583","IE","IRL","IRELAND" -"3272213584","3272213599","DE","DEU","GERMANY" -"3272213632","3272213639","NL","NLD","NETHERLANDS" -"3272213656","3272213663","IT","ITA","ITALY" -"3272213672","3272213679","IT","ITA","ITALY" -"3272213696","3272213735","IT","ITA","ITALY" -"3272213752","3272213759","IT","ITA","ITALY" -"3272213760","3272213823","NL","NLD","NETHERLANDS" -"3272213824","3272213831","DE","DEU","GERMANY" -"3272213832","3272213839","NL","NLD","NETHERLANDS" -"3272213840","3272213855","RU","RUS","RUSSIAN FEDERATION" -"3272213888","3272214015","GB","GBR","UNITED KINGDOM" -"3272214016","3272214271","ES","ESP","SPAIN" -"3272214272","3272214351","GB","GBR","UNITED KINGDOM" -"3272214352","3272214407","FR","FRA","FRANCE" -"3272214432","3272214463","SE","SWE","SWEDEN" -"3272214656","3272214671","NL","NLD","NETHERLANDS" -"3272214672","3272214679","GB","GBR","UNITED KINGDOM" -"3272214680","3272214687","FR","FRA","FRANCE" -"3272214816","3272214823","CH","CHE","SWITZERLAND" -"3272214832","3272214847","BE","BEL","BELGIUM" -"3272214848","3272214879","NL","NLD","NETHERLANDS" -"3272214884","3272214887","NL","NLD","NETHERLANDS" -"3272214896","3272214903","ES","ESP","SPAIN" -"3272214904","3272214911","SE","SWE","SWEDEN" -"3272214944","3272214951","DE","DEU","GERMANY" -"3272214952","3272214959","BE","BEL","BELGIUM" -"3272214960","3272215007","NL","NLD","NETHERLANDS" -"3272215008","3272215015","FR","FRA","FRANCE" -"3272215016","3272215023","IT","ITA","ITALY" -"3272215040","3272215295","ES","ESP","SPAIN" -"3272215296","3272215551","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3272215552","3272215807","CH","CHE","SWITZERLAND" -"3272215808","3272215823","NL","NLD","NETHERLANDS" -"3272215872","3272215879","BE","BEL","BELGIUM" -"3272215884","3272215919","CH","CHE","SWITZERLAND" -"3272215920","3272215935","NL","NLD","NETHERLANDS" -"3272215936","3272215999","GB","GBR","UNITED KINGDOM" -"3272216016","3272216031","DE","DEU","GERMANY" -"3272216040","3272216047","GB","GBR","UNITED KINGDOM" -"3272216192","3272216207","BE","BEL","BELGIUM" -"3272216216","3272216223","FR","FRA","FRANCE" -"3272216224","3272216231","DE","DEU","GERMANY" -"3272216240","3272216255","NL","NLD","NETHERLANDS" -"3272216256","3272216287","CH","CHE","SWITZERLAND" -"3272216304","3272216311","ES","ESP","SPAIN" -"3272216320","3272216351","NL","NLD","NETHERLANDS" -"3272216352","3272216383","DE","DEU","GERMANY" -"3272216384","3272216447","CH","CHE","SWITZERLAND" -"3272216452","3272216455","NL","NLD","NETHERLANDS" -"3272216464","3272216479","FR","FRA","FRANCE" -"3272216480","3272216495","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3272216512","3272216575","IT","ITA","ITALY" -"3272216576","3272216895","GB","GBR","UNITED KINGDOM" -"3272216896","3272216911","FR","FRA","FRANCE" -"3272216912","3272216927","DE","DEU","GERMANY" -"3272216960","3272217007","GB","GBR","UNITED KINGDOM" -"3272217216","3272217279","BE","BEL","BELGIUM" -"3272217280","3272217303","DE","DEU","GERMANY" -"3272217304","3272217311","BE","BEL","BELGIUM" -"3272217600","3272217631","CH","CHE","SWITZERLAND" -"3272217856","3272217875","ES","ESP","SPAIN" -"3272217880","3272217895","IT","ITA","ITALY" -"3272217896","3272217903","ES","ESP","SPAIN" -"3272217920","3272217983","DE","DEU","GERMANY" -"3272217984","3272218079","ES","ESP","SPAIN" -"3272218112","3272218623","GB","GBR","UNITED KINGDOM" -"3272218624","3272218639","RU","RUS","RUSSIAN FEDERATION" -"3272218640","3272218671","DE","DEU","GERMANY" -"3272218688","3272218719","DE","DEU","GERMANY" -"3272218880","3272219135","BE","BEL","BELGIUM" -"3272219136","3272219391","NL","NLD","NETHERLANDS" -"3272219648","3272219903","FR","FRA","FRANCE" -"3272219904","3272220159","DE","DEU","GERMANY" -"3272220160","3272220415","FR","FRA","FRANCE" -"3272220416","3272221183","GB","GBR","UNITED KINGDOM" -"3272221184","3272221311","NL","NLD","NETHERLANDS" -"3272221440","3272221447","SE","SWE","SWEDEN" -"3272221448","3272221455","NO","NOR","NORWAY" -"3272221456","3272221463","SE","SWE","SWEDEN" -"3272221696","3272221951","NL","NLD","NETHERLANDS" -"3272221952","3272222207","GB","GBR","UNITED KINGDOM" -"3272222208","3272222463","ES","ESP","SPAIN" -"3272222464","3272222719","NL","NLD","NETHERLANDS" -"3272222720","3272222975","DE","DEU","GERMANY" -"3272222976","3272223015","GB","GBR","UNITED KINGDOM" -"3272223024","3272223039","GB","GBR","UNITED KINGDOM" -"3272223232","3272223487","NL","NLD","NETHERLANDS" -"3272223488","3272223743","GB","GBR","UNITED KINGDOM" -"3272223744","3272223775","GI","GIB","GIBRALTAR" -"3272223808","3272223815","CY","CYP","CYPRUS" -"3272223824","3272223839","GB","GBR","UNITED KINGDOM" -"3272224000","3272224255","GB","GBR","UNITED KINGDOM" -"3272224256","3272224383","GI","GIB","GIBRALTAR" -"3272224512","3272225279","GB","GBR","UNITED KINGDOM" -"3272225280","3272225791","IT","ITA","ITALY" -"3272226048","3272226815","FR","FRA","FRANCE" -"3272226816","3272227071","GB","GBR","UNITED KINGDOM" -"3272227072","3272227327","NL","NLD","NETHERLANDS" -"3272227328","3272227359","US","USA","UNITED STATES" -"3272227360","3272227511","GB","GBR","UNITED KINGDOM" -"3272227520","3272227583","GB","GBR","UNITED KINGDOM" -"3272227584","3272227839","FR","FRA","FRANCE" -"3272227840","3272228095","ES","ESP","SPAIN" -"3272228096","3272228223","GB","GBR","UNITED KINGDOM" -"3272228224","3272228351","ES","ESP","SPAIN" -"3272228352","3272228607","FR","FRA","FRANCE" -"3272228608","3272228623","NL","NLD","NETHERLANDS" -"3272228624","3272228631","CY","CYP","CYPRUS" -"3272228632","3272228639","NL","NLD","NETHERLANDS" -"3272228640","3272228671","IT","ITA","ITALY" -"3272228672","3272228703","DE","DEU","GERMANY" -"3272228704","3272228735","FR","FRA","FRANCE" -"3272228736","3272228799","NL","NLD","NETHERLANDS" -"3272228800","3272228863","CH","CHE","SWITZERLAND" -"3272228864","3272237055","LU","LUX","LUXEMBOURG" -"3272237056","3272240575","GB","GBR","UNITED KINGDOM" -"3272240576","3272240639","GH","GHA","GHANA" -"3272240640","3272245247","GB","GBR","UNITED KINGDOM" -"3272245248","3272261631","FI","FIN","FINLAND" -"3272261632","3272261887","MT","MLT","MALTA" -"3272261888","3272262143","BG","BGR","BULGARIA" -"3272262144","3272262399","IL","ISR","ISRAEL" -"3272262400","3272262655","DE","DEU","GERMANY" -"3272262656","3272262911","NO","NOR","NORWAY" -"3272262912","3272263167","SA","SAU","SAUDI ARABIA" -"3272263168","3272263423","RU","RUS","RUSSIAN FEDERATION" -"3272263424","3272263935","GB","GBR","UNITED KINGDOM" -"3272263936","3272264191","ES","ESP","SPAIN" -"3272264192","3272264447","NL","NLD","NETHERLANDS" -"3272264448","3272264703","DE","DEU","GERMANY" -"3272264704","3272264959","LV","LVA","LATVIA" -"3272264960","3272265215","RU","RUS","RUSSIAN FEDERATION" -"3272265216","3272265471","AT","AUT","AUSTRIA" -"3272265472","3272265727","DK","DNK","DENMARK" -"3272265728","3272265983","DE","DEU","GERMANY" -"3272265984","3272266239","GB","GBR","UNITED KINGDOM" -"3272266240","3272266495","UA","UKR","UKRAINE" -"3272266496","3272266751","SE","SWE","SWEDEN" -"3272267008","3272267263","GB","GBR","UNITED KINGDOM" -"3272267264","3272267519","SE","SWE","SWEDEN" -"3272267520","3272267775","GB","GBR","UNITED KINGDOM" -"3272267776","3272268031","LV","LVA","LATVIA" -"3272268288","3272268543","UA","UKR","UKRAINE" -"3272268544","3272268799","RO","ROM","ROMANIA" -"3272268800","3272269055","IL","ISR","ISRAEL" -"3272269056","3272269311","GB","GBR","UNITED KINGDOM" -"3272269312","3272269567","IL","ISR","ISRAEL" -"3272269568","3272335359","GB","GBR","UNITED KINGDOM" -"3272335360","3272343551","NL","NLD","NETHERLANDS" -"3272343552","3272351743","GB","GBR","UNITED KINGDOM" -"3272351744","3272352767","PL","POL","POLAND" -"3272352768","3272353791","UA","UKR","UKRAINE" -"3272353792","3272355839","CH","CHE","SWITZERLAND" -"3272355840","3272356863","GB","GBR","UNITED KINGDOM" -"3272356864","3272357887","RO","ROM","ROMANIA" -"3272358912","3272359935","NL","NLD","NETHERLANDS" -"3272359936","3272368127","RU","RUS","RUSSIAN FEDERATION" -"3272368128","3272376319","KZ","KAZ","KAZAKHSTAN" -"3272376320","3272384511","SK","SVK","SLOVAKIA" -"3272384512","3272392703","LT","LTU","LITHUANIA" -"3272392704","3272400895","AT","AUT","AUSTRIA" -"3272400904","3272400927","GB","GBR","UNITED KINGDOM" -"3272401024","3272401087","GB","GBR","UNITED KINGDOM" -"3272401184","3272401199","GB","GBR","UNITED KINGDOM" -"3272401408","3272401919","ES","ESP","SPAIN" -"3272401920","3272401951","GB","GBR","UNITED KINGDOM" -"3272401984","3272402015","DE","DEU","GERMANY" -"3272402032","3272402039","GB","GBR","UNITED KINGDOM" -"3272402040","3272402047","US","USA","UNITED STATES" -"3272402080","3272402111","SE","SWE","SWEDEN" -"3272402176","3272402191","GB","GBR","UNITED KINGDOM" -"3272402240","3272402303","GB","GBR","UNITED KINGDOM" -"3272402304","3272402431","FR","FRA","FRANCE" -"3272402560","3272402623","GB","GBR","UNITED KINGDOM" -"3272402688","3272402815","SE","SWE","SWEDEN" -"3272402816","3272402879","GB","GBR","UNITED KINGDOM" -"3272403072","3272403199","FR","FRA","FRANCE" -"3272409088","3272417279","BE","BEL","BELGIUM" -"3272417280","3272418687","FR","FRA","FRANCE" -"3272418688","3272419327","PL","POL","POLAND" -"3272419328","3272420863","DE","DEU","GERMANY" -"3272420864","3272420991","PL","POL","POLAND" -"3272420992","3272421119","DK","DNK","DENMARK" -"3272421120","3272421375","UA","UKR","UKRAINE" -"3272421376","3272421887","RO","ROM","ROMANIA" -"3272421888","3272422399","GB","GBR","UNITED KINGDOM" -"3272422400","3272422911","CH","CHE","SWITZERLAND" -"3272422912","3272423423","SE","SWE","SWEDEN" -"3272423424","3272423935","BE","BEL","BELGIUM" -"3272423936","3272424447","FR","FRA","FRANCE" -"3272424448","3272425471","DE","DEU","GERMANY" -"3272425472","3272426655","GB","GBR","UNITED KINGDOM" -"3272426656","3272426671","IL","ISR","ISRAEL" -"3272426672","3272441855","GB","GBR","UNITED KINGDOM" -"3272441856","3272474623","LV","LVA","LATVIA" -"3272474624","3272474879","FR","FRA","FRANCE" -"3272474880","3272475135","NL","NLD","NETHERLANDS" -"3272475136","3272475391","RU","RUS","RUSSIAN FEDERATION" -"3272475392","3272475903","PL","POL","POLAND" -"3272475904","3272476159","FR","FRA","FRANCE" -"3272476160","3272476671","RO","ROM","ROMANIA" -"3272476672","3272476927","DE","DEU","GERMANY" -"3272476928","3272477183","GR","GRC","GREECE" -"3272477184","3272477439","GB","GBR","UNITED KINGDOM" -"3272477440","3272477695","PL","POL","POLAND" -"3272477696","3272477951","RU","RUS","RUSSIAN FEDERATION" -"3272477952","3272478207","RO","ROM","ROMANIA" -"3272478208","3272478463","DK","DNK","DENMARK" -"3272478464","3272478719","FI","FIN","FINLAND" -"3272478720","3272478975","GB","GBR","UNITED KINGDOM" -"3272478976","3272479231","UA","UKR","UKRAINE" -"3272479232","3272479487","GB","GBR","UNITED KINGDOM" -"3272479488","3272479743","SA","SAU","SAUDI ARABIA" -"3272479744","3272480255","SE","SWE","SWEDEN" -"3272480256","3272480511","FR","FRA","FRANCE" -"3272480512","3272480767","CH","CHE","SWITZERLAND" -"3272480768","3272481023","DE","DEU","GERMANY" -"3272481024","3272481279","SE","SWE","SWEDEN" -"3272481280","3272481535","CH","CHE","SWITZERLAND" -"3272481536","3272481791","FR","FRA","FRANCE" -"3272481792","3272482047","IT","ITA","ITALY" -"3272482048","3272482303","NL","NLD","NETHERLANDS" -"3272482304","3272482559","FR","FRA","FRANCE" -"3272482560","3272482815","BE","BEL","BELGIUM" -"3272482816","3272491007","RU","RUS","RUSSIAN FEDERATION" -"3272491008","3272499199","GB","GBR","UNITED KINGDOM" -"3272507392","3272515583","CY","CYP","CYPRUS" -"3272515584","3272523775","LT","LTU","LITHUANIA" -"3272523776","3272540159","DE","DEU","GERMANY" -"3272540160","3272546559","CH","CHE","SWITZERLAND" -"3272546560","3272546815","FR","FRA","FRANCE" -"3272546816","3272547387","CH","CHE","SWITZERLAND" -"3272547388","3272547391","FR","FRA","FRANCE" -"3272547392","3272552735","CH","CHE","SWITZERLAND" -"3272552736","3272552743","FR","FRA","FRANCE" -"3272552744","3272552879","CH","CHE","SWITZERLAND" -"3272552880","3272552887","FR","FRA","FRANCE" -"3272552888","3272553471","CH","CHE","SWITZERLAND" -"3272553472","3272553487","FR","FRA","FRANCE" -"3272553488","3272554779","CH","CHE","SWITZERLAND" -"3272554780","3272554783","FR","FRA","FRANCE" -"3272554784","3272555247","CH","CHE","SWITZERLAND" -"3272555248","3272555255","FR","FRA","FRANCE" -"3272555256","3272555407","CH","CHE","SWITZERLAND" -"3272555408","3272555423","FR","FRA","FRANCE" -"3272555424","3272556599","CH","CHE","SWITZERLAND" -"3272556600","3272556607","FR","FRA","FRANCE" -"3272556608","3272568079","CH","CHE","SWITZERLAND" -"3272568080","3272568095","FR","FRA","FRANCE" -"3272568096","3272572879","CH","CHE","SWITZERLAND" -"3272572880","3272572895","FR","FRA","FRANCE" -"3272572896","3272605695","CH","CHE","SWITZERLAND" -"3272605696","3272613887","BE","BEL","BELGIUM" -"3272613888","3272622079","RU","RUS","RUSSIAN FEDERATION" -"3272622080","3272623103","RO","ROM","ROMANIA" -"3272623104","3272624127","DE","DEU","GERMANY" -"3272624128","3272625151","RU","RUS","RUSSIAN FEDERATION" -"3272625152","3272626175","UA","UKR","UKRAINE" -"3272626176","3272627199","DE","DEU","GERMANY" -"3272627200","3272628223","NL","NLD","NETHERLANDS" -"3272628224","3272629247","UA","UKR","UKRAINE" -"3272629248","3272633983","RU","RUS","RUSSIAN FEDERATION" -"3272633984","3272634047","KZ","KAZ","KAZAKHSTAN" -"3272634048","3272638463","RU","RUS","RUSSIAN FEDERATION" -"3272638464","3272646655","ES","ESP","SPAIN" -"3272646656","3272646784","DE","DEU","GERMANY" -"3272646785","3272646911","GB","GBR","UNITED KINGDOM" -"3272646912","3272647423","DE","DEU","GERMANY" -"3272647424","3272649215","GB","GBR","UNITED KINGDOM" -"3272649216","3272649727","IE","IRL","IRELAND" -"3272649728","3272650623","GB","GBR","UNITED KINGDOM" -"3272650624","3272650639","FR","FRA","FRANCE" -"3272650640","3272650655","GB","GBR","UNITED KINGDOM" -"3272650656","3272650751","NL","NLD","NETHERLANDS" -"3272650752","3272651135","GB","GBR","UNITED KINGDOM" -"3272651136","3272651151","CH","CHE","SWITZERLAND" -"3272651152","3272651183","GB","GBR","UNITED KINGDOM" -"3272651184","3272651191","NL","NLD","NETHERLANDS" -"3272651192","3272651231","GB","GBR","UNITED KINGDOM" -"3272651232","3272651239","UZ","UZB","UZBEKISTAN" -"3272651240","3272652287","GB","GBR","UNITED KINGDOM" -"3272652288","3272652799","FR","FRA","FRANCE" -"3272652800","3272653055","GB","GBR","UNITED KINGDOM" -"3272653056","3272653087","CH","CHE","SWITZERLAND" -"3272653088","3272653247","GB","GBR","UNITED KINGDOM" -"3272653248","3272653279","FR","FRA","FRANCE" -"3272653280","3272653311","GB","GBR","UNITED KINGDOM" -"3272653312","3272653439","SE","SWE","SWEDEN" -"3272653440","3272653447","GB","GBR","UNITED KINGDOM" -"3272653448","3272653455","IE","IRL","IRELAND" -"3272653456","3272653463","DE","DEU","GERMANY" -"3272653464","3272653543","GB","GBR","UNITED KINGDOM" -"3272653544","3272653551","NL","NLD","NETHERLANDS" -"3272653552","3272653567","GB","GBR","UNITED KINGDOM" -"3272653568","3272653631","SE","SWE","SWEDEN" -"3272653632","3272653663","FR","FRA","FRANCE" -"3272653664","3272653695","DE","DEU","GERMANY" -"3272653696","3272653727","IT","ITA","ITALY" -"3272653728","3272653759","NL","NLD","NETHERLANDS" -"3272653760","3272653791","DK","DNK","DENMARK" -"3272653792","3272653823","GB","GBR","UNITED KINGDOM" -"3272653824","3272653951","FR","FRA","FRANCE" -"3272653952","3272654207","DE","DEU","GERMANY" -"3272654208","3272654335","FR","FRA","FRANCE" -"3272654336","3272654463","ES","ESP","SPAIN" -"3272654464","3272654591","GB","GBR","UNITED KINGDOM" -"3272654592","3272654719","NO","NOR","NORWAY" -"3272654720","3272654783","IT","ITA","ITALY" -"3272654784","3272654847","NL","NLD","NETHERLANDS" -"3272654848","3272663039","FI","FIN","FINLAND" -"3272663040","3272671231","AT","AUT","AUSTRIA" -"3272671232","3272704255","SE","SWE","SWEDEN" -"3272704256","3272705279","IE","IRL","IRELAND" -"3272705280","3272705535","SE","SWE","SWEDEN" -"3272705536","3272707071","IE","IRL","IRELAND" -"3272707072","3272707327","SE","SWE","SWEDEN" -"3272707328","3272707583","IE","IRL","IRELAND" -"3272707584","3272712191","SE","SWE","SWEDEN" -"3272712192","3272712447","GB","GBR","UNITED KINGDOM" -"3272712448","3272712703","SE","SWE","SWEDEN" -"3272712704","3272712959","GB","GBR","UNITED KINGDOM" -"3272712960","3272713215","SE","SWE","SWEDEN" -"3272713216","3272713983","GB","GBR","UNITED KINGDOM" -"3272713984","3272714495","SE","SWE","SWEDEN" -"3272714496","3272714751","GB","GBR","UNITED KINGDOM" -"3272714752","3272715015","SE","SWE","SWEDEN" -"3272715016","3272715023","GB","GBR","UNITED KINGDOM" -"3272715024","3272715135","SE","SWE","SWEDEN" -"3272715136","3272715263","GB","GBR","UNITED KINGDOM" -"3272715264","3272733119","SE","SWE","SWEDEN" -"3272733120","3272733135","DE","DEU","GERMANY" -"3272733136","3272733983","SE","SWE","SWEDEN" -"3272733984","3272733991","RU","RUS","RUSSIAN FEDERATION" -"3272733992","3272736767","SE","SWE","SWEDEN" -"3272736768","3272738815","IT","ITA","ITALY" -"3272744960","3272753151","RU","RUS","RUSSIAN FEDERATION" -"3272753152","3272769535","NL","NLD","NETHERLANDS" -"3272769536","3272802303","NO","NOR","NORWAY" -"3272802304","3272867839","RU","RUS","RUSSIAN FEDERATION" -"3272867840","3272868863","PL","POL","POLAND" -"3272868864","3272869887","UA","UKR","UKRAINE" -"3272869888","3272870911","NL","NLD","NETHERLANDS" -"3272870912","3272871935","FR","FRA","FRANCE" -"3272871936","3272872959","FI","FIN","FINLAND" -"3272872960","3272875007","BG","BGR","BULGARIA" -"3272875008","3272876031","UA","UKR","UKRAINE" -"3272876032","3272884223","NL","NLD","NETHERLANDS" -"3272884224","3272892415","DE","DEU","GERMANY" -"3272892416","3272892927","UA","UKR","UKRAINE" -"3272892928","3272893439","DE","DEU","GERMANY" -"3272893440","3272893951","SE","SWE","SWEDEN" -"3272893952","3272894463","UA","UKR","UKRAINE" -"3272894464","3272894975","FR","FRA","FRANCE" -"3272894976","3272895487","RO","ROM","ROMANIA" -"3272895488","3272895999","GB","GBR","UNITED KINGDOM" -"3272896000","3272896511","PL","POL","POLAND" -"3272896512","3272897535","DE","DEU","GERMANY" -"3272897536","3272898047","FI","FIN","FINLAND" -"3272898048","3272898559","UA","UKR","UKRAINE" -"3272898560","3272899071","DE","DEU","GERMANY" -"3272899072","3272899583","GB","GBR","UNITED KINGDOM" -"3272899584","3272900095","UA","UKR","UKRAINE" -"3272900096","3272900607","LV","LVA","LATVIA" -"3272900608","3272908799","UA","UKR","UKRAINE" -"3272908800","3272910847","SK","SVK","SLOVAKIA" -"3272910848","3272911359","NL","NLD","NETHERLANDS" -"3272911360","3272911871","SK","SVK","SLOVAKIA" -"3272911872","3272912383","CZ","CZE","CZECH REPUBLIC" -"3272912384","3272916991","SK","SVK","SLOVAKIA" -"3272916992","3272917503","MC","MCO","MONACO" -"3272917504","3272918527","RU","RUS","RUSSIAN FEDERATION" -"3272918528","3272919039","FR","FRA","FRANCE" -"3272919040","3272919551","GB","GBR","UNITED KINGDOM" -"3272919552","3272920063","RO","ROM","ROMANIA" -"3272920064","3272920575","NL","NLD","NETHERLANDS" -"3272920576","3272921087","SE","SWE","SWEDEN" -"3272921088","3272921599","CH","CHE","SWITZERLAND" -"3272921600","3272922111","DE","DEU","GERMANY" -"3272922112","3272922623","PL","POL","POLAND" -"3272923136","3272923647","ES","ESP","SPAIN" -"3272923648","3272924159","PL","POL","POLAND" -"3272924160","3272924671","DE","DEU","GERMANY" -"3272924672","3272925183","GB","GBR","UNITED KINGDOM" -"3272925184","3272933375","DE","DEU","GERMANY" -"3272933376","3272933759","GB","GBR","UNITED KINGDOM" -"3272933760","3272933775","DK","DNK","DENMARK" -"3272933776","3272934687","GB","GBR","UNITED KINGDOM" -"3272934688","3272934703","DE","DEU","GERMANY" -"3272934704","3272934847","GB","GBR","UNITED KINGDOM" -"3272934848","3272934911","DE","DEU","GERMANY" -"3272934912","3272935167","GB","GBR","UNITED KINGDOM" -"3272935168","3272935679","DE","DEU","GERMANY" -"3272935680","3272936447","GB","GBR","UNITED KINGDOM" -"3272936448","3272936479","DE","DEU","GERMANY" -"3272936480","3272936703","GB","GBR","UNITED KINGDOM" -"3272936704","3272936719","DE","DEU","GERMANY" -"3272936720","3272936735","GB","GBR","UNITED KINGDOM" -"3272936736","3272936895","DE","DEU","GERMANY" -"3272936896","3272936959","GB","GBR","UNITED KINGDOM" -"3272936960","3272937087","DE","DEU","GERMANY" -"3272937088","3272937471","GB","GBR","UNITED KINGDOM" -"3272937472","3272937535","DE","DEU","GERMANY" -"3272937536","3272937599","GB","GBR","UNITED KINGDOM" -"3272937600","3272937631","DE","DEU","GERMANY" -"3272937632","3272937791","GB","GBR","UNITED KINGDOM" -"3272937792","3272937903","DE","DEU","GERMANY" -"3272937904","3272937919","GB","GBR","UNITED KINGDOM" -"3272937920","3272937983","DE","DEU","GERMANY" -"3272937984","3272938015","GB","GBR","UNITED KINGDOM" -"3272938016","3272938063","DE","DEU","GERMANY" -"3272938064","3272938239","GB","GBR","UNITED KINGDOM" -"3272938240","3272938271","DE","DEU","GERMANY" -"3272938272","3272938479","GB","GBR","UNITED KINGDOM" -"3272938480","3272938495","DE","DEU","GERMANY" -"3272938496","3272939775","GB","GBR","UNITED KINGDOM" -"3272939776","3272940223","DE","DEU","GERMANY" -"3272940224","3272940287","GB","GBR","UNITED KINGDOM" -"3272940288","3272940543","DE","DEU","GERMANY" -"3272940544","3272940799","GB","GBR","UNITED KINGDOM" -"3272940800","3272940831","DE","DEU","GERMANY" -"3272940832","3272941055","GB","GBR","UNITED KINGDOM" -"3272941056","3272941311","DE","DEU","GERMANY" -"3272941312","3272943103","GB","GBR","UNITED KINGDOM" -"3272943104","3272943167","DE","DEU","GERMANY" -"3272943168","3272943359","GB","GBR","UNITED KINGDOM" -"3272943360","3272943391","DE","DEU","GERMANY" -"3272943392","3272943439","GB","GBR","UNITED KINGDOM" -"3272943440","3272943455","DE","DEU","GERMANY" -"3272943456","3272943471","GB","GBR","UNITED KINGDOM" -"3272943472","3272943487","DE","DEU","GERMANY" -"3272943488","3272943503","GB","GBR","UNITED KINGDOM" -"3272943504","3272943535","DE","DEU","GERMANY" -"3272943536","3272943551","GB","GBR","UNITED KINGDOM" -"3272943552","3272943583","DE","DEU","GERMANY" -"3272943584","3272944127","GB","GBR","UNITED KINGDOM" -"3272944128","3272944191","DE","DEU","GERMANY" -"3272944192","3272944383","GB","GBR","UNITED KINGDOM" -"3272944384","3272944415","DE","DEU","GERMANY" -"3272944416","3272944447","GB","GBR","UNITED KINGDOM" -"3272944448","3272944463","DE","DEU","GERMANY" -"3272944464","3272944575","GB","GBR","UNITED KINGDOM" -"3272944576","3272944607","DE","DEU","GERMANY" -"3272944608","3272944639","GB","GBR","UNITED KINGDOM" -"3272944640","3272944959","DE","DEU","GERMANY" -"3272944960","3272945151","GB","GBR","UNITED KINGDOM" -"3272945152","3272945423","DE","DEU","GERMANY" -"3272945424","3272945471","GB","GBR","UNITED KINGDOM" -"3272945472","3272945487","DE","DEU","GERMANY" -"3272945488","3272945503","GB","GBR","UNITED KINGDOM" -"3272945504","3272945519","DE","DEU","GERMANY" -"3272945520","3272945535","GB","GBR","UNITED KINGDOM" -"3272945536","3272945551","DE","DEU","GERMANY" -"3272945552","3272945567","GB","GBR","UNITED KINGDOM" -"3272945568","3272945599","DE","DEU","GERMANY" -"3272945600","3272945919","GB","GBR","UNITED KINGDOM" -"3272945920","3272946229","DE","DEU","GERMANY" -"3272946230","3272946271","GB","GBR","UNITED KINGDOM" -"3272946272","3272946287","DE","DEU","GERMANY" -"3272946288","3272946335","GB","GBR","UNITED KINGDOM" -"3272946336","3272946351","DE","DEU","GERMANY" -"3272946352","3272946367","GB","GBR","UNITED KINGDOM" -"3272946368","3272946383","DE","DEU","GERMANY" -"3272946384","3272946399","GB","GBR","UNITED KINGDOM" -"3272946400","3272946415","DE","DEU","GERMANY" -"3272946416","3272946687","GB","GBR","UNITED KINGDOM" -"3272946688","3272946751","DE","DEU","GERMANY" -"3272946752","3272946783","GB","GBR","UNITED KINGDOM" -"3272946784","3272946831","DE","DEU","GERMANY" -"3272946832","3272946847","GB","GBR","UNITED KINGDOM" -"3272946848","3272946863","DE","DEU","GERMANY" -"3272946864","3272947199","GB","GBR","UNITED KINGDOM" -"3272947200","3272947215","DE","DEU","GERMANY" -"3272947216","3272947231","GB","GBR","UNITED KINGDOM" -"3272947232","3272947247","DE","DEU","GERMANY" -"3272947248","3272947263","GB","GBR","UNITED KINGDOM" -"3272947264","3272947279","DE","DEU","GERMANY" -"3272947280","3272947327","GB","GBR","UNITED KINGDOM" -"3272947328","3272947343","DE","DEU","GERMANY" -"3272947344","3272962303","GB","GBR","UNITED KINGDOM" -"3272962304","3272962319","DE","DEU","GERMANY" -"3272962320","3272962559","GB","GBR","UNITED KINGDOM" -"3272962560","3272962688","DE","DEU","GERMANY" -"3272962689","3272964351","GB","GBR","UNITED KINGDOM" -"3272964352","3272964607","DE","DEU","GERMANY" -"3272964608","3272966399","GB","GBR","UNITED KINGDOM" -"3272966400","3272966975","DE","DEU","GERMANY" -"3272966976","3272967103","GB","GBR","UNITED KINGDOM" -"3272967104","3272967167","DE","DEU","GERMANY" -"3272967168","3272967423","GB","GBR","UNITED KINGDOM" -"3272967424","3272968703","DE","DEU","GERMANY" -"3272968704","3272968735","GB","GBR","UNITED KINGDOM" -"3272968736","3272968879","DE","DEU","GERMANY" -"3272968880","3272968927","GB","GBR","UNITED KINGDOM" -"3272968928","3272968959","DE","DEU","GERMANY" -"3272968960","3272969215","GB","GBR","UNITED KINGDOM" -"3272969216","3272969279","DE","DEU","GERMANY" -"3272969280","3272969727","GB","GBR","UNITED KINGDOM" -"3272969728","3272969791","DE","DEU","GERMANY" -"3272969792","3272970015","GB","GBR","UNITED KINGDOM" -"3272970016","3272970079","DE","DEU","GERMANY" -"3272970080","3272970095","GB","GBR","UNITED KINGDOM" -"3272970096","3272970175","DE","DEU","GERMANY" -"3272970176","3272971263","GB","GBR","UNITED KINGDOM" -"3272971264","3272971519","DE","DEU","GERMANY" -"3272971520","3272972031","GB","GBR","UNITED KINGDOM" -"3272972032","3272972287","DE","DEU","GERMANY" -"3272972288","3272974335","GB","GBR","UNITED KINGDOM" -"3272974336","3272974367","DE","DEU","GERMANY" -"3272974368","3272975871","GB","GBR","UNITED KINGDOM" -"3272975872","3272976383","DE","DEU","GERMANY" -"3272976384","3272976895","GB","GBR","UNITED KINGDOM" -"3272976896","3272976927","DE","DEU","GERMANY" -"3272976928","3272976959","GB","GBR","UNITED KINGDOM" -"3272976960","3272976991","DE","DEU","GERMANY" -"3272976992","3272977151","GB","GBR","UNITED KINGDOM" -"3272977152","3272977407","DE","DEU","GERMANY" -"3272977408","3272978415","GB","GBR","UNITED KINGDOM" -"3272978416","3272978687","DE","DEU","GERMANY" -"3272978688","3272979023","GB","GBR","UNITED KINGDOM" -"3272979024","3272979103","DE","DEU","GERMANY" -"3272979104","3272979119","GB","GBR","UNITED KINGDOM" -"3272979120","3272979167","DE","DEU","GERMANY" -"3272979168","3272979519","GB","GBR","UNITED KINGDOM" -"3272979520","3272979535","DE","DEU","GERMANY" -"3272979536","3272979967","GB","GBR","UNITED KINGDOM" -"3272979968","3272979999","DE","DEU","GERMANY" -"3272980000","3272980095","GB","GBR","UNITED KINGDOM" -"3272980096","3272980127","DE","DEU","GERMANY" -"3272980128","3272980479","GB","GBR","UNITED KINGDOM" -"3272980480","3272980607","DE","DEU","GERMANY" -"3272980608","3272980639","GB","GBR","UNITED KINGDOM" -"3272980640","3272980767","DE","DEU","GERMANY" -"3272980768","3272980799","GB","GBR","UNITED KINGDOM" -"3272980800","3272980863","DE","DEU","GERMANY" -"3272980864","3272980927","GB","GBR","UNITED KINGDOM" -"3272980928","3272980943","DE","DEU","GERMANY" -"3272980944","3272981119","GB","GBR","UNITED KINGDOM" -"3272981120","3272981215","DE","DEU","GERMANY" -"3272981216","3272981503","GB","GBR","UNITED KINGDOM" -"3272981504","3272981759","DE","DEU","GERMANY" -"3272981760","3272982015","GB","GBR","UNITED KINGDOM" -"3272982016","3272982527","DE","DEU","GERMANY" -"3272982528","3272982783","GB","GBR","UNITED KINGDOM" -"3272982784","3272983039","DE","DEU","GERMANY" -"3272983040","3272983295","GB","GBR","UNITED KINGDOM" -"3272983296","3272983343","DE","DEU","GERMANY" -"3272983344","3272983391","GB","GBR","UNITED KINGDOM" -"3272983392","3272983423","DE","DEU","GERMANY" -"3272983424","3272983551","GB","GBR","UNITED KINGDOM" -"3272983552","3272983823","DE","DEU","GERMANY" -"3272983824","3272984079","GB","GBR","UNITED KINGDOM" -"3272984080","3272984095","DE","DEU","GERMANY" -"3272984096","3272984191","GB","GBR","UNITED KINGDOM" -"3272984192","3272984255","DE","DEU","GERMANY" -"3272984256","3272985599","GB","GBR","UNITED KINGDOM" -"3272985600","3272985615","DE","DEU","GERMANY" -"3272985616","3272985631","GB","GBR","UNITED KINGDOM" -"3272985632","3272985647","DE","DEU","GERMANY" -"3272985648","3272985695","GB","GBR","UNITED KINGDOM" -"3272985696","3272985871","DE","DEU","GERMANY" -"3272985872","3272985887","GB","GBR","UNITED KINGDOM" -"3272985888","3272985935","DE","DEU","GERMANY" -"3272985936","3272985951","GB","GBR","UNITED KINGDOM" -"3272985952","3272986047","DE","DEU","GERMANY" -"3272986048","3272986063","GB","GBR","UNITED KINGDOM" -"3272986064","3272986079","DE","DEU","GERMANY" -"3272986080","3272986095","GB","GBR","UNITED KINGDOM" -"3272986096","3272986111","DE","DEU","GERMANY" -"3272986112","3272988415","GB","GBR","UNITED KINGDOM" -"3272988416","3272988927","DE","DEU","GERMANY" -"3272988928","3272989183","GB","GBR","UNITED KINGDOM" -"3272989184","3272989199","DE","DEU","GERMANY" -"3272989200","3272990975","GB","GBR","UNITED KINGDOM" -"3272990976","3272991007","DE","DEU","GERMANY" -"3272991008","3272994815","GB","GBR","UNITED KINGDOM" -"3272994816","3272994847","DE","DEU","GERMANY" -"3272994848","3272994927","GB","GBR","UNITED KINGDOM" -"3272994928","3272995008","DE","DEU","GERMANY" -"3272995009","3272995023","GB","GBR","UNITED KINGDOM" -"3272995024","3272995055","DE","DEU","GERMANY" -"3272995056","3272996863","GB","GBR","UNITED KINGDOM" -"3272996864","3272997119","DE","DEU","GERMANY" -"3272997120","3272998911","GB","GBR","UNITED KINGDOM" -"3272998912","3273007103","PT","PRT","PORTUGAL" -"3273007104","3273015295","CZ","CZE","CZECH REPUBLIC" -"3273015296","3273023487","SE","SWE","SWEDEN" -"3273023488","3273024511","PL","POL","POLAND" -"3273024512","3273025535","NL","NLD","NETHERLANDS" -"3273025536","3273027583","RU","RUS","RUSSIAN FEDERATION" -"3273027584","3273028607","UA","UKR","UKRAINE" -"3273028608","3273029631","PL","POL","POLAND" -"3273029632","3273030655","DK","DNK","DENMARK" -"3273030656","3273031679","PL","POL","POLAND" -"3273031680","3273032191","GB","GBR","UNITED KINGDOM" -"3273032192","3273033215","UA","UKR","UKRAINE" -"3273033216","3273033727","GB","GBR","UNITED KINGDOM" -"3273033728","3273034239","DE","DEU","GERMANY" -"3273034240","3273034751","BE","BEL","BELGIUM" -"3273034752","3273035263","UA","UKR","UKRAINE" -"3273035264","3273035775","DE","DEU","GERMANY" -"3273035776","3273036287","FR","FRA","FRANCE" -"3273036288","3273036799","BG","BGR","BULGARIA" -"3273036800","3273037311","IL","ISR","ISRAEL" -"3273037312","3273037823","GB","GBR","UNITED KINGDOM" -"3273037824","3273038335","UA","UKR","UKRAINE" -"3273038336","3273038847","GR","GRC","GREECE" -"3273038848","3273039871","GB","GBR","UNITED KINGDOM" -"3273039872","3273048063","LT","LTU","LITHUANIA" -"3273048064","3273048319","IT","ITA","ITALY" -"3273048320","3273048575","GR","GRC","GREECE" -"3273048576","3273048831","IT","ITA","ITALY" -"3273048832","3273049087","US","USA","UNITED STATES" -"3273049088","3273049855","IT","ITA","ITALY" -"3273049856","3273050111","US","USA","UNITED STATES" -"3273050112","3273051647","IT","ITA","ITALY" -"3273051648","3273051903","US","USA","UNITED STATES" -"3273051904","3273052039","IT","ITA","ITALY" -"3273052040","3273052047","NL","NLD","NETHERLANDS" -"3273052048","3273052063","GR","GRC","GREECE" -"3273052064","3273052087","IT","ITA","ITALY" -"3273052088","3273052111","GR","GRC","GREECE" -"3273052112","3273052415","IT","ITA","ITALY" -"3273052416","3273052671","GB","GBR","UNITED KINGDOM" -"3273052672","3273052927","FR","FRA","FRANCE" -"3273052928","3273053183","DE","DEU","GERMANY" -"3273053184","3273053439","CH","CHE","SWITZERLAND" -"3273053440","3273053695","NL","NLD","NETHERLANDS" -"3273053696","3273053951","BE","BEL","BELGIUM" -"3273053952","3273054207","AT","AUT","AUSTRIA" -"3273054208","3273054463","US","USA","UNITED STATES" -"3273054464","3273054719","ES","ESP","SPAIN" -"3273054720","3273054975","IT","ITA","ITALY" -"3273054976","3273055231","BR","BRA","BRAZIL" -"3273055232","3273055487","AR","ARG","ARGENTINA" -"3273055488","3273055743","CL","CHL","CHILE" -"3273055744","3273055999","PE","PER","PERU" -"3273056000","3273056255","IT","ITA","ITALY" -"3273056256","3273064447","MD","MDA","REPUBLIC OF MOLDOVA" -"3273064448","3273129983","PT","PRT","PORTUGAL" -"3273129984","3273131999","DK","DNK","DENMARK" -"3273132000","3273132015","NO","NOR","NORWAY" -"3273132016","3273138175","DK","DNK","DENMARK" -"3273138176","3273146367","BG","BGR","BULGARIA" -"3273146368","3273148415","RU","RUS","RUSSIAN FEDERATION" -"3273148416","3273150463","LU","LUX","LUXEMBOURG" -"3273152512","3273154559","BG","BGR","BULGARIA" -"3273154560","3273162751","DE","DEU","GERMANY" -"3273162752","3273170943","UA","UKR","UKRAINE" -"3273170944","3273179135","SE","SWE","SWEDEN" -"3273187328","3273187839","SE","SWE","SWEDEN" -"3273187840","3273188351","DK","DNK","DENMARK" -"3273188352","3273188863","RU","RUS","RUSSIAN FEDERATION" -"3273188864","3273189887","GB","GBR","UNITED KINGDOM" -"3273189888","3273190399","UA","UKR","UKRAINE" -"3273190400","3273191935","RO","ROM","ROMANIA" -"3273191936","3273192447","UA","UKR","UKRAINE" -"3273192448","3273192959","DK","DNK","DENMARK" -"3273192960","3273193471","FR","FRA","FRANCE" -"3273193472","3273193983","PL","POL","POLAND" -"3273193984","3273194495","GB","GBR","UNITED KINGDOM" -"3273194496","3273195007","UA","UKR","UKRAINE" -"3273195008","3273195519","RU","RUS","RUSSIAN FEDERATION" -"3273195520","3273230983","FR","FRA","FRANCE" -"3273230984","3273230991","DE","DEU","GERMANY" -"3273230992","3273240119","FR","FRA","FRANCE" -"3273240120","3273240127","DE","DEU","GERMANY" -"3273240128","3273240223","FR","FRA","FRANCE" -"3273240224","3273240231","MC","MCO","MONACO" -"3273240232","3273261055","FR","FRA","FRANCE" -"3273261056","3273261567","NO","NOR","NORWAY" -"3273261568","3273262079","BE","BEL","BELGIUM" -"3273262080","3273262591","LU","LUX","LUXEMBOURG" -"3273262592","3273263103","RU","RUS","RUSSIAN FEDERATION" -"3273263104","3273263615","FR","FRA","FRANCE" -"3273263616","3273264127","SE","SWE","SWEDEN" -"3273264128","3273264639","PL","POL","POLAND" -"3273264640","3273265151","AT","AUT","AUSTRIA" -"3273265152","3273265663","UA","UKR","UKRAINE" -"3273266176","3273266687","LV","LVA","LATVIA" -"3273266688","3273267711","PL","POL","POLAND" -"3273267712","3273268223","GB","GBR","UNITED KINGDOM" -"3273268224","3273268735","SE","SWE","SWEDEN" -"3273268736","3273269247","RU","RUS","RUSSIAN FEDERATION" -"3273269248","3273276119","GB","GBR","UNITED KINGDOM" -"3273276120","3273276127","US","USA","UNITED STATES" -"3273276128","3273277439","GB","GBR","UNITED KINGDOM" -"3273277440","3273278463","UA","UKR","UKRAINE" -"3273278464","3273279487","RU","RUS","RUSSIAN FEDERATION" -"3273279488","3273281535","PL","POL","POLAND" -"3273281536","3273283583","UA","UKR","UKRAINE" -"3273283584","3273284607","GB","GBR","UNITED KINGDOM" -"3273284608","3273285631","UA","UKR","UKRAINE" -"3273285632","3273293823","GB","GBR","UNITED KINGDOM" -"3273293824","3273302015","MK","MKD","THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA" -"3273302016","3273310207","RU","RUS","RUSSIAN FEDERATION" -"3273310208","3273318399","AT","AUT","AUSTRIA" -"3273318400","3273326591","GB","GBR","UNITED KINGDOM" -"3273326592","3273326847","IE","IRL","IRELAND" -"3273326984","3273326987","DE","DEU","GERMANY" -"3273326992","3273327047","DE","DEU","GERMANY" -"3273327280","3273327287","DE","DEU","GERMANY" -"3273327360","3273327423","IE","IRL","IRELAND" -"3273327424","3273327487","GB","GBR","UNITED KINGDOM" -"3273328512","3273328639","DE","DEU","GERMANY" -"3273328640","3273329199","GB","GBR","UNITED KINGDOM" -"3273329200","3273329215","DE","DEU","GERMANY" -"3273329216","3273329311","GB","GBR","UNITED KINGDOM" -"3273329408","3273329423","GB","GBR","UNITED KINGDOM" -"3273329424","3273329439","DE","DEU","GERMANY" -"3273329440","3273330175","GB","GBR","UNITED KINGDOM" -"3273330176","3273330183","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3273330184","3273330191","IE","IRL","IRELAND" -"3273330192","3273330199","GB","GBR","UNITED KINGDOM" -"3273330200","3273330223","IE","IRL","IRELAND" -"3273330224","3273330271","GB","GBR","UNITED KINGDOM" -"3273330272","3273330295","IE","IRL","IRELAND" -"3273330296","3273330303","GB","GBR","UNITED KINGDOM" -"3273330304","3273330431","IE","IRL","IRELAND" -"3273330432","3273331199","GB","GBR","UNITED KINGDOM" -"3273331712","3273331967","GB","GBR","UNITED KINGDOM" -"3273331968","3273332031","DE","DEU","GERMANY" -"3273332096","3273332223","DE","DEU","GERMANY" -"3273332544","3273332575","DE","DEU","GERMANY" -"3273332608","3273332671","DE","DEU","GERMANY" -"3273333056","3273333119","DE","DEU","GERMANY" -"3273334272","3273334783","DE","DEU","GERMANY" -"3273335040","3273335295","DE","DEU","GERMANY" -"3273335296","3273335807","GB","GBR","UNITED KINGDOM" -"3273335936","3273335999","DE","DEU","GERMANY" -"3273336848","3273336863","DE","DEU","GERMANY" -"3273336864","3273336871","GB","GBR","UNITED KINGDOM" -"3273336872","3273336879","DE","DEU","GERMANY" -"3273336960","3273337087","DE","DEU","GERMANY" -"3273337856","3273338111","DE","DEU","GERMANY" -"3273338624","3273338879","DE","DEU","GERMANY" -"3273339136","3273339391","DE","DEU","GERMANY" -"3273339392","3273339919","GB","GBR","UNITED KINGDOM" -"3273339920","3273339943","DE","DEU","GERMANY" -"3273339944","3273339955","GB","GBR","UNITED KINGDOM" -"3273339956","3273339959","DE","DEU","GERMANY" -"3273339960","3273340095","GB","GBR","UNITED KINGDOM" -"3273340096","3273340111","GI","GIB","GIBRALTAR" -"3273340112","3273340415","GB","GBR","UNITED KINGDOM" -"3273340928","3273341695","FR","FRA","FRANCE" -"3273341696","3273341951","DE","DEU","GERMANY" -"3273342464","3273342975","DE","DEU","GERMANY" -"3273342976","3273343999","GB","GBR","UNITED KINGDOM" -"3273344000","3273344767","DE","DEU","GERMANY" -"3273345024","3273345279","DE","DEU","GERMANY" -"3273346816","3273347071","DE","DEU","GERMANY" -"3273347840","3273348351","DE","DEU","GERMANY" -"3273349120","3273349631","DE","DEU","GERMANY" -"3273350272","3273350287","DE","DEU","GERMANY" -"3273350336","3273350351","DE","DEU","GERMANY" -"3273351424","3273351455","DE","DEU","GERMANY" -"3273351504","3273351519","DE","DEU","GERMANY" -"3273351872","3273351903","DE","DEU","GERMANY" -"3273351936","3273352191","DE","DEU","GERMANY" -"3273352928","3273352959","DE","DEU","GERMANY" -"3273352992","3273353023","DE","DEU","GERMANY" -"3273355520","3273356287","DE","DEU","GERMANY" -"3273359888","3273359903","DE","DEU","GERMANY" -"3273360016","3273360079","DE","DEU","GERMANY" -"3273361472","3273361535","DE","DEU","GERMANY" -"3273361632","3273361663","DE","DEU","GERMANY" -"3273361792","3273361823","DE","DEU","GERMANY" -"3273361856","3273361919","DE","DEU","GERMANY" -"3273362048","3273362175","DE","DEU","GERMANY" -"3273362240","3273362255","DE","DEU","GERMANY" -"3273363208","3273363211","DE","DEU","GERMANY" -"3273363328","3273363391","DE","DEU","GERMANY" -"3273364608","3273364735","DE","DEU","GERMANY" -"3273364992","3273365247","DE","DEU","GERMANY" -"3273365504","3273365519","NL","NLD","NETHERLANDS" -"3273365520","3273365527","GB","GBR","UNITED KINGDOM" -"3273365528","3273365759","NL","NLD","NETHERLANDS" -"3273365760","3273365767","GB","GBR","UNITED KINGDOM" -"3273365888","3273366015","FR","FRA","FRANCE" -"3273366016","3273366527","DE","DEU","GERMANY" -"3273367296","3273367423","DE","DEU","GERMANY" -"3273367552","3273367567","DE","DEU","GERMANY" -"3273368064","3273368575","DE","DEU","GERMANY" -"3273369344","3273369855","DE","DEU","GERMANY" -"3273370624","3273371135","DE","DEU","GERMANY" -"3273371712","3273371743","DE","DEU","GERMANY" -"3273371760","3273371775","DE","DEU","GERMANY" -"3273371808","3273371823","DE","DEU","GERMANY" -"3273371872","3273371875","DE","DEU","GERMANY" -"3273372000","3273372055","DE","DEU","GERMANY" -"3273372144","3273372151","DE","DEU","GERMANY" -"3273372672","3273372927","GB","GBR","UNITED KINGDOM" -"3273372928","3273373183","NL","NLD","NETHERLANDS" -"3273373184","3273373455","GB","GBR","UNITED KINGDOM" -"3273373456","3273373695","DE","DEU","GERMANY" -"3273375232","3273375551","DE","DEU","GERMANY" -"3273375744","3273375871","DE","DEU","GERMANY" -"3273376000","3273376255","DE","DEU","GERMANY" -"3273376536","3273376543","DE","DEU","GERMANY" -"3273377792","3273378095","DE","DEU","GERMANY" -"3273378560","3273378815","DE","DEU","GERMANY" -"3273381888","3273382143","DE","DEU","GERMANY" -"3273382144","3273382399","GB","GBR","UNITED KINGDOM" -"3273382400","3273382463","DE","DEU","GERMANY" -"3273382480","3273382591","DE","DEU","GERMANY" -"3273382640","3273382687","DE","DEU","GERMANY" -"3273384192","3273384703","DE","DEU","GERMANY" -"3273384960","3273385215","DE","DEU","GERMANY" -"3273385280","3273385343","DE","DEU","GERMANY" -"3273385472","3273385727","DE","DEU","GERMANY" -"3273385760","3273385791","DE","DEU","GERMANY" -"3273385856","3273385919","DE","DEU","GERMANY" -"3273387056","3273387071","DE","DEU","GERMANY" -"3273387216","3273387231","DE","DEU","GERMANY" -"3273387264","3273387519","DE","DEU","GERMANY" -"3273387552","3273387583","DE","DEU","GERMANY" -"3273388160","3273388223","DE","DEU","GERMANY" -"3273388800","3273388807","DE","DEU","GERMANY" -"3273388816","3273388863","DE","DEU","GERMANY" -"3273388872","3273388879","DE","DEU","GERMANY" -"3273388904","3273388911","DE","DEU","GERMANY" -"3273388928","3273389055","DE","DEU","GERMANY" -"3273390080","3273390111","DE","DEU","GERMANY" -"3273390112","3273390143","US","USA","UNITED STATES" -"3273390144","3273390207","DE","DEU","GERMANY" -"3273390368","3273390463","DE","DEU","GERMANY" -"3273391296","3273391327","DE","DEU","GERMANY" -"3273391344","3273391359","DE","DEU","GERMANY" -"3273392128","3273392639","UA","UKR","UKRAINE" -"3273392640","3273393663","RO","ROM","ROMANIA" -"3273393664","3273394175","BG","BGR","BULGARIA" -"3273394176","3273394687","RO","ROM","ROMANIA" -"3273394688","3273395199","RU","RUS","RUSSIAN FEDERATION" -"3273395200","3273395711","DE","DEU","GERMANY" -"3273395712","3273396223","RU","RUS","RUSSIAN FEDERATION" -"3273396224","3273396735","PL","POL","POLAND" -"3273396736","3273397247","RO","ROM","ROMANIA" -"3273397248","3273397759","RU","RUS","RUSSIAN FEDERATION" -"3273397760","3273398271","NL","NLD","NETHERLANDS" -"3273398272","3273398783","RO","ROM","ROMANIA" -"3273398784","3273399295","LV","LVA","LATVIA" -"3273399296","3273399807","SE","SWE","SWEDEN" -"3273399808","3273400319","UA","UKR","UKRAINE" -"3273400320","3273408511","RU","RUS","RUSSIAN FEDERATION" -"3273408512","3273433087","SK","SVK","SLOVAKIA" -"3273433088","3273433599","LU","LUX","LUXEMBOURG" -"3273433600","3273434111","RO","ROM","ROMANIA" -"3273434112","3273434623","BE","BEL","BELGIUM" -"3273434624","3273435135","IL","ISR","ISRAEL" -"3273435136","3273435647","GB","GBR","UNITED KINGDOM" -"3273435648","3273436159","PL","POL","POLAND" -"3273436160","3273436671","NO","NOR","NORWAY" -"3273436672","3273437183","DE","DEU","GERMANY" -"3273437184","3273437695","RO","ROM","ROMANIA" -"3273437696","3273438207","PL","POL","POLAND" -"3273438208","3273438719","IL","ISR","ISRAEL" -"3273438720","3273439231","PL","POL","POLAND" -"3273439232","3273439743","RO","ROM","ROMANIA" -"3273439744","3273440255","UA","UKR","UKRAINE" -"3273440256","3273440767","RO","ROM","ROMANIA" -"3273440768","3273441279","AT","AUT","AUSTRIA" -"3273441280","3273441463","FR","FRA","FRANCE" -"3273441464","3273441535","GB","GBR","UNITED KINGDOM" -"3273441536","3273441607","FR","FRA","FRANCE" -"3273441608","3273441615","GB","GBR","UNITED KINGDOM" -"3273441616","3273441631","FR","FRA","FRANCE" -"3273441632","3273441647","GB","GBR","UNITED KINGDOM" -"3273441648","3273441759","FR","FRA","FRANCE" -"3273441760","3273441791","GB","GBR","UNITED KINGDOM" -"3273441792","3273442127","FR","FRA","FRANCE" -"3273442128","3273442143","GB","GBR","UNITED KINGDOM" -"3273442144","3273442151","FR","FRA","FRANCE" -"3273442152","3273442303","GB","GBR","UNITED KINGDOM" -"3273442304","3273442331","FR","FRA","FRANCE" -"3273442332","3273442335","GB","GBR","UNITED KINGDOM" -"3273442336","3273442367","FR","FRA","FRANCE" -"3273442368","3273442431","GB","GBR","UNITED KINGDOM" -"3273442432","3273442815","FR","FRA","FRANCE" -"3273442816","3273443071","GB","GBR","UNITED KINGDOM" -"3273443072","3273443080","FR","FRA","FRANCE" -"3273443081","3273443327","GB","GBR","UNITED KINGDOM" -"3273443328","3273443839","FR","FRA","FRANCE" -"3273443840","3273444095","GB","GBR","UNITED KINGDOM" -"3273444096","3273444351","FR","FRA","FRANCE" -"3273444352","3273449471","GB","GBR","UNITED KINGDOM" -"3273449472","3273457663","CH","CHE","SWITZERLAND" -"3273457664","3273523199","HR","HRV","CROATIA" -"3273523200","3273532463","DE","DEU","GERMANY" -"3273532464","3273532471","US","USA","UNITED STATES" -"3273532472","3273588735","DE","DEU","GERMANY" -"3273588736","3273687039","IT","ITA","ITALY" -"3273687040","3273719807","DE","DEU","GERMANY" -"3273719808","3273720831","GB","GBR","UNITED KINGDOM" -"3273720832","3273720839","IE","IRL","IRELAND" -"3273720840","3273727071","GB","GBR","UNITED KINGDOM" -"3273727072","3273727079","DK","DNK","DENMARK" -"3273727080","3273727087","FR","FRA","FRANCE" -"3273727088","3273727095","ES","ESP","SPAIN" -"3273727096","3273727103","DE","DEU","GERMANY" -"3273727104","3273727119","GB","GBR","UNITED KINGDOM" -"3273727120","3273727127","PT","PRT","PORTUGAL" -"3273727128","3273727135","FI","FIN","FINLAND" -"3273727136","3273727143","NO","NOR","NORWAY" -"3273727144","3273727151","CZ","CZE","CZECH REPUBLIC" -"3273727152","3273727999","GB","GBR","UNITED KINGDOM" -"3273728000","3273728255","NL","NLD","NETHERLANDS" -"3273728256","3273728511","GB","GBR","UNITED KINGDOM" -"3273728512","3273732095","NL","NLD","NETHERLANDS" -"3273732096","3273736191","GB","GBR","UNITED KINGDOM" -"3273736192","3273743359","FR","FRA","FRANCE" -"3273743360","3273743615","JO","JOR","JORDAN" -"3273743616","3273744383","FR","FRA","FRANCE" -"3273744384","3273752575","GB","GBR","UNITED KINGDOM" -"3273752576","3273760767","NL","NLD","NETHERLANDS" -"3273760768","3273768959","DE","DEU","GERMANY" -"3273768960","3273785343","TR","TUR","TURKEY" -"3273785344","3273801727","RU","RUS","RUSSIAN FEDERATION" -"3273801728","3273802239","DE","DEU","GERMANY" -"3273802240","3273802751","RO","ROM","ROMANIA" -"3273802752","3273803263","SA","SAU","SAUDI ARABIA" -"3273803264","3273803775","ES","ESP","SPAIN" -"3273803776","3273804287","CH","CHE","SWITZERLAND" -"3273804288","3273804799","UA","UKR","UKRAINE" -"3273804800","3273805311","RO","ROM","ROMANIA" -"3273805312","3273805823","GB","GBR","UNITED KINGDOM" -"3273805824","3273806335","PL","POL","POLAND" -"3273806336","3273806847","DE","DEU","GERMANY" -"3273806848","3273807359","SE","SWE","SWEDEN" -"3273807360","3273807871","LB","LBN","LEBANON" -"3273807872","3273808383","CH","CHE","SWITZERLAND" -"3273808384","3273808895","UA","UKR","UKRAINE" -"3273808896","3273809407","GB","GBR","UNITED KINGDOM" -"3273809408","3273809919","UA","UKR","UKRAINE" -"3273809920","3273818111","BG","BGR","BULGARIA" -"3273818112","3273826303","AT","AUT","AUSTRIA" -"3273826304","3273834495","DE","DEU","GERMANY" -"3273834496","3273835519","RU","RUS","RUSSIAN FEDERATION" -"3273835520","3273838591","UA","UKR","UKRAINE" -"3273838592","3273839615","PL","POL","POLAND" -"3273839616","3273840639","LT","LTU","LITHUANIA" -"3273840640","3273841663","PL","POL","POLAND" -"3273841664","3273842687","AT","AUT","AUSTRIA" -"3273842688","3273850879","RU","RUS","RUSSIAN FEDERATION" -"3273850880","3273867263","DE","DEU","GERMANY" -"3273867264","3273867519","BE","BEL","BELGIUM" -"3273867520","3273867775","UA","UKR","UKRAINE" -"3273867776","3273868031","PT","PRT","PORTUGAL" -"3273868032","3273868287","GB","GBR","UNITED KINGDOM" -"3273868288","3273869311","RU","RUS","RUSSIAN FEDERATION" -"3273869312","3273871359","DE","DEU","GERMANY" -"3273871360","3273871615","PL","POL","POLAND" -"3273871616","3273871871","LU","LUX","LUXEMBOURG" -"3273871872","3273872383","SE","SWE","SWEDEN" -"3273872384","3273872639","BG","BGR","BULGARIA" -"3273872640","3273872895","PS","PSE","PALESTINIAN TERRITORY, OCCUPIED" -"3273872896","3273873151","SE","SWE","SWEDEN" -"3273873152","3273873919","DE","DEU","GERMANY" -"3273873920","3273874431","GB","GBR","UNITED KINGDOM" -"3273874432","3273875455","GR","GRC","GREECE" -"3273875456","3273875711","PT","PRT","PORTUGAL" -"3273875712","3273875967","SE","SWE","SWEDEN" -"3273875968","3273876223","DE","DEU","GERMANY" -"3273876224","3273876479","IT","ITA","ITALY" -"3273876480","3273876991","SE","SWE","SWEDEN" -"3273876992","3273877247","CH","CHE","SWITZERLAND" -"3273877248","3273877503","DE","DEU","GERMANY" -"3273877504","3273877535","GB","GBR","UNITED KINGDOM" -"3273877536","3273877567","AT","AUT","AUSTRIA" -"3273877568","3273877759","IT","ITA","ITALY" -"3273877760","3273878015","GR","GRC","GREECE" -"3273878016","3273878271","FR","FRA","FRANCE" -"3273878272","3273878527","LV","LVA","LATVIA" -"3273878528","3273879039","DE","DEU","GERMANY" -"3273879040","3273879551","BE","BEL","BELGIUM" -"3273879552","3273880063","GB","GBR","UNITED KINGDOM" -"3273880064","3273880575","LV","LVA","LATVIA" -"3273880576","3273881087","RU","RUS","RUSSIAN FEDERATION" -"3273881088","3273881343","RO","ROM","ROMANIA" -"3273881344","3273881599","CH","CHE","SWITZERLAND" -"3273881600","3273881855","GB","GBR","UNITED KINGDOM" -"3273881856","3273882111","CH","CHE","SWITZERLAND" -"3273882112","3273882367","SI","SVN","SLOVENIA" -"3273882368","3273883135","GB","GBR","UNITED KINGDOM" -"3273883136","3273883391","GR","GRC","GREECE" -"3273883392","3273883647","DE","DEU","GERMANY" -"3273883648","3273916415","NL","NLD","NETHERLANDS" -"3273916416","3273932799","IT","ITA","ITALY" -"3273932800","3273949183","DE","DEU","GERMANY" -"3273949184","3273981951","FR","FRA","FRANCE" -"3273981952","3274047487","DE","DEU","GERMANY" -"3274047488","3274049535","SE","SWE","SWEDEN" -"3274049536","3274050559","DE","DEU","GERMANY" -"3274050560","3274051583","PL","POL","POLAND" -"3274051584","3274052351","UA","UKR","UKRAINE" -"3274052352","3274052607","GB","GBR","UNITED KINGDOM" -"3274052608","3274052863","DE","DEU","GERMANY" -"3274052864","3274053119","GB","GBR","UNITED KINGDOM" -"3274053120","3274053375","KZ","KAZ","KAZAKHSTAN" -"3274053376","3274053631","RU","RUS","RUSSIAN FEDERATION" -"3274053632","3274054655","DE","DEU","GERMANY" -"3274054656","3274055167","GB","GBR","UNITED KINGDOM" -"3274055168","3274055423","MT","MLT","MALTA" -"3274055424","3274055679","PL","POL","POLAND" -"3274055680","3274063871","RU","RUS","RUSSIAN FEDERATION" -"3274063872","3274072063","GB","GBR","UNITED KINGDOM" -"3274072064","3274080255","HU","HUN","HUNGARY" -"3274080256","3274088447","DE","DEU","GERMANY" -"3274088448","3274096639","KG","KGZ","KYRGYZSTAN" -"3274096640","3274113023","NL","NLD","NETHERLANDS" -"3274113024","3274145791","CZ","CZE","CZECH REPUBLIC" -"3274145792","3274162175","KW","KWT","KUWAIT" -"3274162176","3274162687","GB","GBR","UNITED KINGDOM" -"3274162688","3274163199","DE","DEU","GERMANY" -"3274163200","3274163711","UA","UKR","UKRAINE" -"3274163712","3274164223","BG","BGR","BULGARIA" -"3274164224","3274164735","AT","AUT","AUSTRIA" -"3274164736","3274165759","GB","GBR","UNITED KINGDOM" -"3274165760","3274166271","RU","RUS","RUSSIAN FEDERATION" -"3274166272","3274166783","AT","AUT","AUSTRIA" -"3274166784","3274167295","UA","UKR","UKRAINE" -"3274167296","3274167807","BG","BGR","BULGARIA" -"3274167808","3274168319","UA","UKR","UKRAINE" -"3274168320","3274168831","PL","POL","POLAND" -"3274169344","3274170367","DE","DEU","GERMANY" -"3274170368","3274170879","TR","TUR","TURKEY" -"3274170880","3274171391","DE","DEU","GERMANY" -"3274171392","3274171903","RU","RUS","RUSSIAN FEDERATION" -"3274171904","3274172415","DE","DEU","GERMANY" -"3274172416","3274172927","UA","UKR","UKRAINE" -"3274172928","3274173439","DE","DEU","GERMANY" -"3274173440","3274173951","GR","GRC","GREECE" -"3274173952","3274174463","DE","DEU","GERMANY" -"3274174464","3274175487","UA","UKR","UKRAINE" -"3274175488","3274175999","BE","BEL","BELGIUM" -"3274176000","3274176511","DE","DEU","GERMANY" -"3274176512","3274177023","UA","UKR","UKRAINE" -"3274177024","3274177535","FR","FRA","FRANCE" -"3274177536","3274178047","UA","UKR","UKRAINE" -"3274178048","3274178559","NL","NLD","NETHERLANDS" -"3274178560","3274204063","GB","GBR","UNITED KINGDOM" -"3274204064","3274204095","FR","FRA","FRANCE" -"3274204096","3274244095","GB","GBR","UNITED KINGDOM" -"3274244096","3274309631","DK","DNK","DENMARK" -"3274309632","3274318031","FR","FRA","FRANCE" -"3274318032","3274318047","RU","RUS","RUSSIAN FEDERATION" -"3274318048","3274326015","FR","FRA","FRANCE" -"3274326016","3274334719","RU","RUS","RUSSIAN FEDERATION" -"3274334720","3274335231","PL","POL","POLAND" -"3274335232","3274335743","DE","DEU","GERMANY" -"3274335744","3274336255","NL","NLD","NETHERLANDS" -"3274336256","3274336767","SE","SWE","SWEDEN" -"3274336768","3274337279","AT","AUT","AUSTRIA" -"3274337280","3274337791","DE","DEU","GERMANY" -"3274337792","3274338303","SE","SWE","SWEDEN" -"3274338304","3274338815","PL","POL","POLAND" -"3274338816","3274339327","DE","DEU","GERMANY" -"3274339328","3274339839","RO","ROM","ROMANIA" -"3274340352","3274340863","IE","IRL","IRELAND" -"3274340864","3274341375","RU","RUS","RUSSIAN FEDERATION" -"3274341376","3274341887","FR","FRA","FRANCE" -"3274341888","3274342399","UA","UKR","UKRAINE" -"3274342400","3274342911","RO","ROM","ROMANIA" -"3274342912","3274343423","UA","UKR","UKRAINE" -"3274343424","3274343935","US","USA","UNITED STATES" -"3274343936","3274344447","NL","NLD","NETHERLANDS" -"3274344448","3274344959","UA","UKR","UKRAINE" -"3274344960","3274345471","RO","ROM","ROMANIA" -"3274345472","3274345983","PL","POL","POLAND" -"3274345984","3274346495","BG","BGR","BULGARIA" -"3274346496","3274347007","FR","FRA","FRANCE" -"3274347008","3274347519","RU","RUS","RUSSIAN FEDERATION" -"3274348032","3274348543","DK","DNK","DENMARK" -"3274348544","3274349055","PL","POL","POLAND" -"3274349056","3274358783","RU","RUS","RUSSIAN FEDERATION" -"3274358784","3274366975","SE","SWE","SWEDEN" -"3274366976","3274368511","NL","NLD","NETHERLANDS" -"3274368512","3274368767","AT","AUT","AUSTRIA" -"3274368768","3274369023","FR","FRA","FRANCE" -"3274369024","3274370047","DE","DEU","GERMANY" -"3274370048","3274371071","GB","GBR","UNITED KINGDOM" -"3274371072","3274373375","NL","NLD","NETHERLANDS" -"3274373376","3274373631","PL","POL","POLAND" -"3274373632","3274374143","FR","FRA","FRANCE" -"3274374144","3274375167","DE","DEU","GERMANY" -"3274375168","3274383359","EG","EGY","EGYPT" -"3274383360","3274384383","RU","RUS","RUSSIAN FEDERATION" -"3274384384","3274385407","SE","SWE","SWEDEN" -"3274385408","3274386431","UA","UKR","UKRAINE" -"3274386432","3274388479","GB","GBR","UNITED KINGDOM" -"3274388480","3274389503","DE","DEU","GERMANY" -"3274389504","3274390527","CH","CHE","SWITZERLAND" -"3274390528","3274391551","NO","NOR","NORWAY" -"3274399744","3274407935","LU","LUX","LUXEMBOURG" -"3274407936","3274408191","ES","ESP","SPAIN" -"3274408192","3274408447","IT","ITA","ITALY" -"3274408448","3274408703","NL","NLD","NETHERLANDS" -"3274408704","3274408959","SI","SVN","SLOVENIA" -"3274408960","3274409215","GR","GRC","GREECE" -"3274409216","3274409471","SI","SVN","SLOVENIA" -"3274409472","3274409727","CH","CHE","SWITZERLAND" -"3274409728","3274409983","RU","RUS","RUSSIAN FEDERATION" -"3274409984","3274410239","LT","LTU","LITHUANIA" -"3274410240","3274410495","SA","SAU","SAUDI ARABIA" -"3274410496","3274410751","NL","NLD","NETHERLANDS" -"3274410752","3274411007","AT","AUT","AUSTRIA" -"3274411008","3274411263","CH","CHE","SWITZERLAND" -"3274411264","3274411519","LI","LIE","LIECHTENSTEIN" -"3274411520","3274412031","PL","POL","POLAND" -"3274412032","3274412287","RU","RUS","RUSSIAN FEDERATION" -"3274412288","3274412543","NO","NOR","NORWAY" -"3274412544","3274412799","UA","UKR","UKRAINE" -"3274412800","3274413055","RU","RUS","RUSSIAN FEDERATION" -"3274413056","3274413311","UA","UKR","UKRAINE" -"3274413312","3274413567","AT","AUT","AUSTRIA" -"3274413568","3274413823","FR","FRA","FRANCE" -"3274413824","3274414079","SE","SWE","SWEDEN" -"3274414080","3274414335","AT","AUT","AUSTRIA" -"3274414336","3274414591","CH","CHE","SWITZERLAND" -"3274414592","3274414847","NL","NLD","NETHERLANDS" -"3274414848","3274415103","IE","IRL","IRELAND" -"3274415104","3274415359","GR","GRC","GREECE" -"3274415360","3274415615","GB","GBR","UNITED KINGDOM" -"3274415616","3274415871","NL","NLD","NETHERLANDS" -"3274415872","3274416127","SI","SVN","SLOVENIA" -"3274416128","3274424319","IT","ITA","ITALY" -"3274424320","3274435711","SE","SWE","SWEDEN" -"3274435712","3274435839","US","USA","UNITED STATES" -"3274435840","3274440703","SE","SWE","SWEDEN" -"3274442752","3274443263","GB","GBR","UNITED KINGDOM" -"3274443520","3274443647","GB","GBR","UNITED KINGDOM" -"3274443712","3274443775","GB","GBR","UNITED KINGDOM" -"3274443808","3274444031","GB","GBR","UNITED KINGDOM" -"3274446336","3274447871","GB","GBR","UNITED KINGDOM" -"3274448384","3274448639","GB","GBR","UNITED KINGDOM" -"3274448896","3274449663","GB","GBR","UNITED KINGDOM" -"3274449920","3274450231","GB","GBR","UNITED KINGDOM" -"3274450248","3274450367","GB","GBR","UNITED KINGDOM" -"3274450376","3274450391","GB","GBR","UNITED KINGDOM" -"3274450408","3274450415","GB","GBR","UNITED KINGDOM" -"3274450432","3274450591","GB","GBR","UNITED KINGDOM" -"3274450656","3274450687","GB","GBR","UNITED KINGDOM" -"3274451200","3274452255","GB","GBR","UNITED KINGDOM" -"3274452264","3274452311","GB","GBR","UNITED KINGDOM" -"3274452320","3274452335","GB","GBR","UNITED KINGDOM" -"3274452344","3274452367","GB","GBR","UNITED KINGDOM" -"3274452384","3274452391","GB","GBR","UNITED KINGDOM" -"3274452400","3274452423","GB","GBR","UNITED KINGDOM" -"3274452432","3274452439","GB","GBR","UNITED KINGDOM" -"3274452448","3274452455","GB","GBR","UNITED KINGDOM" -"3274452464","3274452471","GB","GBR","UNITED KINGDOM" -"3274452496","3274452543","GB","GBR","UNITED KINGDOM" -"3274452560","3274452575","GB","GBR","UNITED KINGDOM" -"3274452656","3274452703","GB","GBR","UNITED KINGDOM" -"3274452736","3274452927","GB","GBR","UNITED KINGDOM" -"3274452992","3274453767","GB","GBR","UNITED KINGDOM" -"3274453784","3274453791","GB","GBR","UNITED KINGDOM" -"3274453800","3274453847","GB","GBR","UNITED KINGDOM" -"3274453864","3274453871","GB","GBR","UNITED KINGDOM" -"3274453888","3274453903","GB","GBR","UNITED KINGDOM" -"3274453920","3274453935","GB","GBR","UNITED KINGDOM" -"3274453944","3274453951","GB","GBR","UNITED KINGDOM" -"3274453960","3274453975","GB","GBR","UNITED KINGDOM" -"3274453984","3274453991","GB","GBR","UNITED KINGDOM" -"3274454000","3274454271","GB","GBR","UNITED KINGDOM" -"3274454656","3274455311","GB","GBR","UNITED KINGDOM" -"3274455328","3274455335","GB","GBR","UNITED KINGDOM" -"3274455344","3274455351","GB","GBR","UNITED KINGDOM" -"3274455360","3274455375","GB","GBR","UNITED KINGDOM" -"3274455384","3274455391","GB","GBR","UNITED KINGDOM" -"3274455400","3274455423","GB","GBR","UNITED KINGDOM" -"3274455432","3274455439","GB","GBR","UNITED KINGDOM" -"3274455448","3274455503","GB","GBR","UNITED KINGDOM" -"3274455520","3274455535","GB","GBR","UNITED KINGDOM" -"3274455744","3274455807","GB","GBR","UNITED KINGDOM" -"3274455872","3274455935","GB","GBR","UNITED KINGDOM" -"3274455968","3274456359","GB","GBR","UNITED KINGDOM" -"3274456368","3274456375","GB","GBR","UNITED KINGDOM" -"3274456384","3274456391","GB","GBR","UNITED KINGDOM" -"3274456400","3274456407","GB","GBR","UNITED KINGDOM" -"3274456416","3274456447","GB","GBR","UNITED KINGDOM" -"3274456456","3274456511","GB","GBR","UNITED KINGDOM" -"3274456528","3274456535","GB","GBR","UNITED KINGDOM" -"3274456544","3274456559","GB","GBR","UNITED KINGDOM" -"3274456568","3274460223","GB","GBR","UNITED KINGDOM" -"3274460416","3274462207","GB","GBR","UNITED KINGDOM" -"3274462464","3274465023","GB","GBR","UNITED KINGDOM" -"3274465152","3274466351","GB","GBR","UNITED KINGDOM" -"3274466368","3274466399","GB","GBR","UNITED KINGDOM" -"3274466416","3274466463","GB","GBR","UNITED KINGDOM" -"3274466560","3274466735","GB","GBR","UNITED KINGDOM" -"3274466744","3274466763","GB","GBR","UNITED KINGDOM" -"3274466768","3274466783","GB","GBR","UNITED KINGDOM" -"3274466816","3274467099","GB","GBR","UNITED KINGDOM" -"3274467104","3274467307","GB","GBR","UNITED KINGDOM" -"3274467328","3274470383","GB","GBR","UNITED KINGDOM" -"3274470400","3274470535","GB","GBR","UNITED KINGDOM" -"3274470656","3274471423","GB","GBR","UNITED KINGDOM" -"3274471536","3274471615","GB","GBR","UNITED KINGDOM" -"3274471680","3274471935","GB","GBR","UNITED KINGDOM" -"3274472960","3274483711","GB","GBR","UNITED KINGDOM" -"3274489600","3274489855","GB","GBR","UNITED KINGDOM" -"3274490176","3274490895","GB","GBR","UNITED KINGDOM" -"3274490912","3274491247","GB","GBR","UNITED KINGDOM" -"3274491256","3274491295","GB","GBR","UNITED KINGDOM" -"3274491304","3274491319","GB","GBR","UNITED KINGDOM" -"3274491328","3274491383","GB","GBR","UNITED KINGDOM" -"3274491392","3274504447","GB","GBR","UNITED KINGDOM" -"3274505728","3274505791","GB","GBR","UNITED KINGDOM" -"3274505793","3274505855","GB","GBR","UNITED KINGDOM" -"3274506240","3274571775","IT","ITA","ITALY" -"3274571776","3274579967","GR","GRC","GREECE" -"3274580992","3274582015","NL","NLD","NETHERLANDS" -"3274582016","3274583039","PL","POL","POLAND" -"3274583040","3274584063","DE","DEU","GERMANY" -"3274584064","3274585087","GB","GBR","UNITED KINGDOM" -"3274585088","3274586111","RS","SRB","SERBIA" -"3274586112","3274587135","UA","UKR","UKRAINE" -"3274587136","3274588159","GB","GBR","UNITED KINGDOM" -"3274588160","3274596351","SK","SVK","SLOVAKIA" -"3274596352","3274604543","RU","RUS","RUSSIAN FEDERATION" -"3274604544","3274612735","TR","TUR","TURKEY" -"3274612736","3274620927","RU","RUS","RUSSIAN FEDERATION" -"3274620928","3274629119","FR","FRA","FRANCE" -"3274629120","3274637311","LU","LUX","LUXEMBOURG" -"3274637312","3274670079","CZ","CZE","CZECH REPUBLIC" -"3274670080","3274686463","DK","DNK","DENMARK" -"3274686464","3274686719","RU","RUS","RUSSIAN FEDERATION" -"3274686720","3274686975","BG","BGR","BULGARIA" -"3274686976","3274687231","RO","ROM","ROMANIA" -"3274687232","3274687487","DE","DEU","GERMANY" -"3274687488","3274687743","RU","RUS","RUSSIAN FEDERATION" -"3274687744","3274687999","SI","SVN","SLOVENIA" -"3274688000","3274688255","GB","GBR","UNITED KINGDOM" -"3274688256","3274688511","IT","ITA","ITALY" -"3274688512","3274688767","PT","PRT","PORTUGAL" -"3274688768","3274689023","PL","POL","POLAND" -"3274689024","3274689279","UA","UKR","UKRAINE" -"3274689280","3274689535","PL","POL","POLAND" -"3274689792","3274690047","SE","SWE","SWEDEN" -"3274690048","3274690303","ES","ESP","SPAIN" -"3274690304","3274690559","GB","GBR","UNITED KINGDOM" -"3274690560","3274690815","GR","GRC","GREECE" -"3274690816","3274691071","ES","ESP","SPAIN" -"3274691072","3274691327","DK","DNK","DENMARK" -"3274691328","3274691583","SI","SVN","SLOVENIA" -"3274691584","3274691839","UA","UKR","UKRAINE" -"3274691840","3274692095","SI","SVN","SLOVENIA" -"3274692096","3274692351","RO","ROM","ROMANIA" -"3274692352","3274692607","BE","BEL","BELGIUM" -"3274692608","3274692863","DK","DNK","DENMARK" -"3274692864","3274693119","AT","AUT","AUSTRIA" -"3274693120","3274693375","LT","LTU","LITHUANIA" -"3274693376","3274693631","UA","UKR","UKRAINE" -"3274693632","3274693887","NL","NLD","NETHERLANDS" -"3274693888","3274694143","IT","ITA","ITALY" -"3274694144","3274694399","DK","DNK","DENMARK" -"3274694400","3274694655","GB","GBR","UNITED KINGDOM" -"3274694656","3274694911","SI","SVN","SLOVENIA" -"3274694912","3274695167","GB","GBR","UNITED KINGDOM" -"3274695168","3274695423","SI","SVN","SLOVENIA" -"3274695424","3274695679","PL","POL","POLAND" -"3274695680","3274695935","SI","SVN","SLOVENIA" -"3274695936","3274696191","DE","DEU","GERMANY" -"3274696192","3274696447","DK","DNK","DENMARK" -"3274696448","3274696703","CH","CHE","SWITZERLAND" -"3274696704","3274696959","IT","ITA","ITALY" -"3274696960","3274697215","GR","GRC","GREECE" -"3274697216","3274697471","SA","SAU","SAUDI ARABIA" -"3274697472","3274697727","CZ","CZE","CZECH REPUBLIC" -"3274697728","3274697983","ES","ESP","SPAIN" -"3274697984","3274698239","GB","GBR","UNITED KINGDOM" -"3274698240","3274698495","SE","SWE","SWEDEN" -"3274698496","3274698751","PL","POL","POLAND" -"3274698752","3274699007","GB","GBR","UNITED KINGDOM" -"3274699008","3274699263","FR","FRA","FRANCE" -"3274699264","3274699519","RO","ROM","ROMANIA" -"3274699520","3274700031","GB","GBR","UNITED KINGDOM" -"3274700032","3274700287","CH","CHE","SWITZERLAND" -"3274700288","3274700543","PL","POL","POLAND" -"3274700544","3274700799","DK","DNK","DENMARK" -"3274700800","3274701055","UA","UKR","UKRAINE" -"3274701056","3274701311","DE","DEU","GERMANY" -"3274701312","3274701567","TJ","TJK","TAJIKISTAN" -"3274701568","3274702079","IT","ITA","ITALY" -"3274702080","3274702335","UA","UKR","UKRAINE" -"3274702336","3274702591","SE","SWE","SWEDEN" -"3274702592","3274702847","KZ","KAZ","KAZAKHSTAN" -"3274702848","3274801151","CH","CHE","SWITZERLAND" -"3274801152","3274802175","UA","UKR","UKRAINE" -"3274802176","3274803199","FR","FRA","FRANCE" -"3274803200","3274804223","DE","DEU","GERMANY" -"3274804224","3274805247","FR","FRA","FRANCE" -"3274805248","3274806271","GB","GBR","UNITED KINGDOM" -"3274806272","3274807295","UA","UKR","UKRAINE" -"3274807296","3274809343","DE","DEU","GERMANY" -"3274809344","3274810367","SE","SWE","SWEDEN" -"3274810368","3274811391","UA","UKR","UKRAINE" -"3274811392","3274812415","RU","RUS","RUSSIAN FEDERATION" -"3274812416","3274813439","SE","SWE","SWEDEN" -"3274813440","3274814463","ES","ESP","SPAIN" -"3274814464","3274815487","GB","GBR","UNITED KINGDOM" -"3274815488","3274816511","RU","RUS","RUSSIAN FEDERATION" -"3274816512","3274817535","SK","SVK","SLOVAKIA" -"3274817536","3274819583","RU","RUS","RUSSIAN FEDERATION" -"3274819584","3274821631","UA","UKR","UKRAINE" -"3274821632","3274823679","KZ","KAZ","KAZAKHSTAN" -"3274823680","3274825727","TR","TUR","TURKEY" -"3274825728","3274827775","DE","DEU","GERMANY" -"3274827776","3274829823","RU","RUS","RUSSIAN FEDERATION" -"3274829824","3274831871","SE","SWE","SWEDEN" -"3274831872","3274833919","RO","ROM","ROMANIA" -"3274833920","3274842111","BY","BLR","BELARUS" -"3274842112","3274850303","DK","DNK","DENMARK" -"3274850304","3274866687","GB","GBR","UNITED KINGDOM" -"3274866688","3274883071","DE","DEU","GERMANY" -"3274883072","3274891263","EE","EST","ESTONIA" -"3274891264","3274899455","CH","CHE","SWITZERLAND" -"3274899456","3274902399","DE","DEU","GERMANY" -"3274902400","3274902423","AT","AUT","AUSTRIA" -"3274902528","3274909695","DE","DEU","GERMANY" -"3274910208","3274910975","DE","DEU","GERMANY" -"3274911232","3274911743","DE","DEU","GERMANY" -"3274911744","3274911999","FR","FRA","FRANCE" -"3274912000","3274912031","GB","GBR","UNITED KINGDOM" -"3274912032","3274912063","DE","DEU","GERMANY" -"3274912064","3274912191","FR","FRA","FRANCE" -"3274912192","3274912287","DE","DEU","GERMANY" -"3274912288","3274912295","LU","LUX","LUXEMBOURG" -"3274912296","3274912303","GB","GBR","UNITED KINGDOM" -"3274912304","3274912447","FR","FRA","FRANCE" -"3274912448","3274912511","NL","NLD","NETHERLANDS" -"3274912512","3274912767","FR","FRA","FRANCE" -"3274912768","3274912799","DE","DEU","GERMANY" -"3274912800","3274912831","IT","ITA","ITALY" -"3274912832","3274912895","FR","FRA","FRANCE" -"3274912896","3274913023","RO","ROM","ROMANIA" -"3274913024","3274913279","FR","FRA","FRANCE" -"3274913280","3274914815","DE","DEU","GERMANY" -"3274915072","3274915839","DE","DEU","GERMANY" -"3274915840","3274916735","NL","NLD","NETHERLANDS" -"3274916736","3274916863","DE","DEU","GERMANY" -"3274916864","3274917215","NL","NLD","NETHERLANDS" -"3274917216","3274917311","GB","GBR","UNITED KINGDOM" -"3274917312","3274917327","ZA","ZAF","SOUTH AFRICA" -"3274917328","3274917335","CH","CHE","SWITZERLAND" -"3274917336","3274917343","GB","GBR","UNITED KINGDOM" -"3274917344","3274917375","SE","SWE","SWEDEN" -"3274917376","3274917887","NL","NLD","NETHERLANDS" -"3274917888","3274918911","BE","BEL","BELGIUM" -"3274918912","3274919359","CH","CHE","SWITZERLAND" -"3274919392","3274919423","CH","CHE","SWITZERLAND" -"3274919424","3274919935","GB","GBR","UNITED KINGDOM" -"3274919936","3274921983","BE","BEL","BELGIUM" -"3274921984","3274922847","ZA","ZAF","SOUTH AFRICA" -"3274922848","3274922863","BE","BEL","BELGIUM" -"3274922864","3274922871","GB","GBR","UNITED KINGDOM" -"3274922872","3274922879","IT","ITA","ITALY" -"3274922880","3274922943","ZA","ZAF","SOUTH AFRICA" -"3274922944","3274923007","NL","NLD","NETHERLANDS" -"3274923264","3274924031","NL","NLD","NETHERLANDS" -"3274924032","3274928127","FR","FRA","FRANCE" -"3274928128","3274928511","ES","ESP","SPAIN" -"3274928512","3274928575","RU","RUS","RUSSIAN FEDERATION" -"3274928576","3274928639","GB","GBR","UNITED KINGDOM" -"3274928640","3274929151","ES","ESP","SPAIN" -"3274929408","3274929663","FR","FRA","FRANCE" -"3274929664","3274930175","BE","BEL","BELGIUM" -"3274930176","3274932223","IT","ITA","ITALY" -"3274932224","3274932991","GB","GBR","UNITED KINGDOM" -"3274932992","3274933151","DE","DEU","GERMANY" -"3274933152","3274933183","CH","CHE","SWITZERLAND" -"3274933184","3274933215","ZA","ZAF","SOUTH AFRICA" -"3274933216","3274933247","BE","BEL","BELGIUM" -"3274933248","3274936063","GB","GBR","UNITED KINGDOM" -"3274936064","3274936159","SE","SWE","SWEDEN" -"3274936160","3274936175","GB","GBR","UNITED KINGDOM" -"3274936192","3274936863","GB","GBR","UNITED KINGDOM" -"3274936864","3274936871","BE","BEL","BELGIUM" -"3274936872","3274936879","CH","CHE","SWITZERLAND" -"3274936880","3274936895","SE","SWE","SWEDEN" -"3274936896","3274938367","GB","GBR","UNITED KINGDOM" -"3274938496","3274938535","GB","GBR","UNITED KINGDOM" -"3274938536","3274938543","FR","FRA","FRANCE" -"3274938544","3274938559","GB","GBR","UNITED KINGDOM" -"3274938624","3274938879","GB","GBR","UNITED KINGDOM" -"3274938880","3274939135","DE","DEU","GERMANY" -"3274939136","3274939391","IT","ITA","ITALY" -"3274939392","3274940415","ZA","ZAF","SOUTH AFRICA" -"3274940416","3274941055","DE","DEU","GERMANY" -"3274941056","3274941087","NL","NLD","NETHERLANDS" -"3274941088","3274941095","DE","DEU","GERMANY" -"3274941096","3274941103","IT","ITA","ITALY" -"3274941104","3274942463","DE","DEU","GERMANY" -"3274942464","3274944511","FR","FRA","FRANCE" -"3274944512","3274948607","NL","NLD","NETHERLANDS" -"3274948608","3274952447","DK","DNK","DENMARK" -"3274952448","3274952479","SE","SWE","SWEDEN" -"3274952480","3274952511","FR","FRA","FRANCE" -"3274952512","3274952527","GB","GBR","UNITED KINGDOM" -"3274952528","3274952543","BE","BEL","BELGIUM" -"3274952544","3274952575","GB","GBR","UNITED KINGDOM" -"3274952576","3274952703","IT","ITA","ITALY" -"3274952704","3274954239","AT","AUT","AUSTRIA" -"3274954240","3274954399","NL","NLD","NETHERLANDS" -"3274954400","3274954415","BE","BEL","BELGIUM" -"3274954416","3274954431","GB","GBR","UNITED KINGDOM" -"3274954432","3274954495","PT","PRT","PORTUGAL" -"3274954496","3274954623","AT","AUT","AUSTRIA" -"3274954624","3274954751","NL","NLD","NETHERLANDS" -"3274954752","3274955007","SE","SWE","SWEDEN" -"3274955264","3274956287","SE","SWE","SWEDEN" -"3274956288","3274956543","GB","GBR","UNITED KINGDOM" -"3274956544","3274956615","BE","BEL","BELGIUM" -"3274956616","3274956623","AT","AUT","AUSTRIA" -"3274956624","3274956639","DE","DEU","GERMANY" -"3274956640","3274956655","GB","GBR","UNITED KINGDOM" -"3274956656","3274956671","FR","FRA","FRANCE" -"3274956672","3274956735","DE","DEU","GERMANY" -"3274956736","3274956767","DK","DNK","DENMARK" -"3274956768","3274956799","SE","SWE","SWEDEN" -"3274956800","3274957055","CH","CHE","SWITZERLAND" -"3274957056","3274957567","AT","AUT","AUSTRIA" -"3274957568","3274957823","CH","CHE","SWITZERLAND" -"3274957824","3274957831","GR","GRC","GREECE" -"3274957952","3274957959","BE","BEL","BELGIUM" -"3274957968","3274957983","FR","FRA","FRANCE" -"3274957984","3274957999","BE","BEL","BELGIUM" -"3274958000","3274958007","GB","GBR","UNITED KINGDOM" -"3274958008","3274958015","BE","BEL","BELGIUM" -"3274958080","3274958279","IE","IRL","IRELAND" -"3274958288","3274958335","IE","IRL","IRELAND" -"3274958336","3274959231","AT","AUT","AUSTRIA" -"3274959232","3274959247","IT","ITA","ITALY" -"3274959248","3274959255","GB","GBR","UNITED KINGDOM" -"3274959256","3274959263","ZA","ZAF","SOUTH AFRICA" -"3274959272","3274959279","GB","GBR","UNITED KINGDOM" -"3274959280","3274959287","DE","DEU","GERMANY" -"3274959288","3274959295","GB","GBR","UNITED KINGDOM" -"3274959296","3274959327","ES","ESP","SPAIN" -"3274959328","3274959615","DE","DEU","GERMANY" -"3274960384","3274960447","BE","BEL","BELGIUM" -"3274960448","3274960511","ES","ESP","SPAIN" -"3274960512","3274960575","GB","GBR","UNITED KINGDOM" -"3274960576","3274960639","IT","ITA","ITALY" -"3274960640","3274961407","AT","AUT","AUSTRIA" -"3274961408","3274961503","CH","CHE","SWITZERLAND" -"3274961504","3274961535","DK","DNK","DENMARK" -"3274961536","3274961559","CH","CHE","SWITZERLAND" -"3274961568","3274961663","CH","CHE","SWITZERLAND" -"3274961664","3274961727","BY","BLR","BELARUS" -"3274961920","3274962111","AT","AUT","AUSTRIA" -"3274962112","3274962175","GB","GBR","UNITED KINGDOM" -"3274962176","3274962431","ZA","ZAF","SOUTH AFRICA" -"3274962432","3274962687","BE","BEL","BELGIUM" -"3274962688","3274962879","GR","GRC","GREECE" -"3274962880","3274963167","GB","GBR","UNITED KINGDOM" -"3274963168","3274963183","IE","IRL","IRELAND" -"3274963184","3274963191","GB","GBR","UNITED KINGDOM" -"3274963192","3274963199","NL","NLD","NETHERLANDS" -"3274963200","3274963455","DE","DEU","GERMANY" -"3274963456","3274963711","CH","CHE","SWITZERLAND" -"3274963712","3274963743","DE","DEU","GERMANY" -"3274963744","3274963775","FR","FRA","FRANCE" -"3274963776","3274963783","GB","GBR","UNITED KINGDOM" -"3274963784","3274963791","BE","BEL","BELGIUM" -"3274963792","3274963807","NL","NLD","NETHERLANDS" -"3274963808","3274963839","IT","ITA","ITALY" -"3274963840","3274963967","DE","DEU","GERMANY" -"3274963968","3274964223","FR","FRA","FRANCE" -"3274964224","3274964735","BE","BEL","BELGIUM" -"3274964736","3274964863","GB","GBR","UNITED KINGDOM" -"3274964864","3274964879","HU","HUN","HUNGARY" -"3274964880","3274964895","FR","FRA","FRANCE" -"3274964896","3274964927","NL","NLD","NETHERLANDS" -"3274964928","3274964991","GB","GBR","UNITED KINGDOM" -"3274964992","3275030527","DE","DEU","GERMANY" -"3275030528","3275096063","ES","ESP","SPAIN" -"3275096064","3275104255","RU","RUS","RUSSIAN FEDERATION" -"3275112448","3275120639","DK","DNK","DENMARK" -"3275120640","3275136639","SE","SWE","SWEDEN" -"3275136640","3275136767","DK","DNK","DENMARK" -"3275136768","3275137023","SE","SWE","SWEDEN" -"3275145216","3275153407","RU","RUS","RUSSIAN FEDERATION" -"3275153408","3275161599","GB","GBR","UNITED KINGDOM" -"3275161600","3275227135","ES","ESP","SPAIN" -"3275227136","3275292671","HU","HUN","HUNGARY" -"3275292672","3275358207","ES","ESP","SPAIN" -"3275358208","3275371775","RU","RUS","RUSSIAN FEDERATION" -"3275371776","3275372031","TJ","TJK","TAJIKISTAN" -"3275372032","3275374591","RU","RUS","RUSSIAN FEDERATION" -"3275374592","3275382783","GB","GBR","UNITED KINGDOM" -"3275382784","3275390975","SE","SWE","SWEDEN" -"3275390976","3275399167","GB","GBR","UNITED KINGDOM" -"3275399168","3275407359","AT","AUT","AUSTRIA" -"3275407360","3275415551","GB","GBR","UNITED KINGDOM" -"3275415552","3275423743","UA","UKR","UKRAINE" -"3275423744","3275423751","GB","GBR","UNITED KINGDOM" -"3275423776","3275423807","GB","GBR","UNITED KINGDOM" -"3275424000","3275424255","GB","GBR","UNITED KINGDOM" -"3275425792","3275426575","GB","GBR","UNITED KINGDOM" -"3275427840","3275428367","GB","GBR","UNITED KINGDOM" -"3275429888","3275430143","GB","GBR","UNITED KINGDOM" -"3275430272","3275430399","GB","GBR","UNITED KINGDOM" -"3275430592","3275430623","GB","GBR","UNITED KINGDOM" -"3275431936","3275432447","GB","GBR","UNITED KINGDOM" -"3275433984","3275437567","GB","GBR","UNITED KINGDOM" -"3275438080","3275438607","GB","GBR","UNITED KINGDOM" -"3275440128","3275440639","GB","GBR","UNITED KINGDOM" -"3275442176","3275442719","GB","GBR","UNITED KINGDOM" -"3275444224","3275444735","GB","GBR","UNITED KINGDOM" -"3275446272","3275446815","GB","GBR","UNITED KINGDOM" -"3275446848","3275446911","GB","GBR","UNITED KINGDOM" -"3275448320","3275449519","GB","GBR","UNITED KINGDOM" -"3275449520","3275449527","FR","FRA","FRANCE" -"3275449528","3275450879","GB","GBR","UNITED KINGDOM" -"3275451232","3275451263","GB","GBR","UNITED KINGDOM" -"3275452416","3275453695","GB","GBR","UNITED KINGDOM" -"3275454464","3275455255","GB","GBR","UNITED KINGDOM" -"3275455264","3275455279","GB","GBR","UNITED KINGDOM" -"3275455296","3275455327","GB","GBR","UNITED KINGDOM" -"3275455360","3275455743","GB","GBR","UNITED KINGDOM" -"3275456512","3275457023","GB","GBR","UNITED KINGDOM" -"3275457024","3275457791","FK","FLK","FALKLAND ISLANDS (MALVINAS)" -"3275457792","3275458559","GB","GBR","UNITED KINGDOM" -"3275458560","3275459839","IE","IRL","IRELAND" -"3275460608","3275460863","HK","HKG","HONG KONG" -"3275460864","3275463247","GB","GBR","UNITED KINGDOM" -"3275463264","3275463295","GB","GBR","UNITED KINGDOM" -"3275463680","3275464031","GB","GBR","UNITED KINGDOM" -"3275464032","3275464047","IE","IRL","IRELAND" -"3275464048","3275468655","GB","GBR","UNITED KINGDOM" -"3275468656","3275468671","IE","IRL","IRELAND" -"3275468672","3275468735","GB","GBR","UNITED KINGDOM" -"3275468736","3275468751","IE","IRL","IRELAND" -"3275468752","3275468767","GB","GBR","UNITED KINGDOM" -"3275468768","3275468799","IE","IRL","IRELAND" -"3275468800","3275469071","GB","GBR","UNITED KINGDOM" -"3275469072","3275469087","IE","IRL","IRELAND" -"3275469088","3275469303","GB","GBR","UNITED KINGDOM" -"3275469312","3275469567","GB","GBR","UNITED KINGDOM" -"3275469952","3275469983","GB","GBR","UNITED KINGDOM" -"3275489280","3275497471","GB","GBR","UNITED KINGDOM" -"3275497472","3275505663","DE","DEU","GERMANY" -"3275505664","3275506175","PL","POL","POLAND" -"3275506176","3275506687","UA","UKR","UKRAINE" -"3275506688","3275507199","SE","SWE","SWEDEN" -"3275507200","3275507711","UA","UKR","UKRAINE" -"3275507712","3275509759","RO","ROM","ROMANIA" -"3275509760","3275509855","IT","ITA","ITALY" -"3275509856","3275509887","PL","POL","POLAND" -"3275509888","3275509919","AM","ARM","ARMENIA" -"3275509920","3275509951","PL","POL","POLAND" -"3275509952","3275509983","GB","GBR","UNITED KINGDOM" -"3275509984","3275510015","PT","PRT","PORTUGAL" -"3275510016","3275510079","SE","SWE","SWEDEN" -"3275510080","3275510143","ES","ESP","SPAIN" -"3275510208","3275510271","FR","FRA","FRANCE" -"3275510272","3275510335","LV","LVA","LATVIA" -"3275510336","3275510399","IE","IRL","IRELAND" -"3275510400","3275510463","NL","NLD","NETHERLANDS" -"3275510464","3275510527","GB","GBR","UNITED KINGDOM" -"3275510528","3275510559","PL","POL","POLAND" -"3275510560","3275510591","DE","DEU","GERMANY" -"3275510784","3275510911","RU","RUS","RUSSIAN FEDERATION" -"3275510912","3275511167","GB","GBR","UNITED KINGDOM" -"3275511168","3275511295","LV","LVA","LATVIA" -"3275511296","3275511551","GB","GBR","UNITED KINGDOM" -"3275511552","3275511679","NL","NLD","NETHERLANDS" -"3275511680","3275511807","GB","GBR","UNITED KINGDOM" -"3275511808","3275511935","CH","CHE","SWITZERLAND" -"3275511936","3275512063","IT","ITA","ITALY" -"3275512064","3275512191","CZ","CZE","CZECH REPUBLIC" -"3275512192","3275512319","IT","ITA","ITALY" -"3275512320","3275512447","FI","FIN","FINLAND" -"3275512448","3275512575","DK","DNK","DENMARK" -"3275512576","3275512703","BE","BEL","BELGIUM" -"3275512704","3275512831","PL","POL","POLAND" -"3275512832","3275512895","SE","SWE","SWEDEN" -"3275512896","3275512959","AT","AUT","AUSTRIA" -"3275512960","3275513023","PL","POL","POLAND" -"3275513024","3275513151","UA","UKR","UKRAINE" -"3275513152","3275513215","ES","ESP","SPAIN" -"3275513216","3275513279","CH","CHE","SWITZERLAND" -"3275513280","3275513343","DK","DNK","DENMARK" -"3275513344","3275513471","PL","POL","POLAND" -"3275513472","3275513599","FR","FRA","FRANCE" -"3275513600","3275513727","PL","POL","POLAND" -"3275513728","3275513855","GB","GBR","UNITED KINGDOM" -"3275513856","3275514615","DE","DEU","GERMANY" -"3275514616","3275514623","CH","CHE","SWITZERLAND" -"3275514624","3275522047","DE","DEU","GERMANY" -"3275522048","3275530239","IT","ITA","ITALY" -"3275530240","3275530751","DK","DNK","DENMARK" -"3275530752","3275531263","AT","AUT","AUSTRIA" -"3275531264","3275531775","GB","GBR","UNITED KINGDOM" -"3275531776","3275532287","IE","IRL","IRELAND" -"3275532288","3275532799","FR","FRA","FRANCE" -"3275532800","3275533823","GB","GBR","UNITED KINGDOM" -"3275533824","3275534335","UA","UKR","UKRAINE" -"3275534336","3275534847","IL","ISR","ISRAEL" -"3275534848","3275535359","RO","ROM","ROMANIA" -"3275535360","3275535871","DE","DEU","GERMANY" -"3275535872","3275536383","SE","SWE","SWEDEN" -"3275536384","3275536895","UA","UKR","UKRAINE" -"3275536896","3275537407","DE","DEU","GERMANY" -"3275537408","3275537919","FR","FRA","FRANCE" -"3275537920","3275538431","IT","ITA","ITALY" -"3275538432","3275539455","CH","CHE","SWITZERLAND" -"3275539456","3275540479","GB","GBR","UNITED KINGDOM" -"3275540480","3275542527","UA","UKR","UKRAINE" -"3275542528","3275543551","DE","DEU","GERMANY" -"3275543552","3275544575","NL","NLD","NETHERLANDS" -"3275544576","3275545599","PL","POL","POLAND" -"3275546624","3275547647","UA","UKR","UKRAINE" -"3275547648","3275548671","RU","RUS","RUSSIAN FEDERATION" -"3275548672","3275549695","IL","ISR","ISRAEL" -"3275549696","3275550719","SY","SYR","SYRIAN ARAB REPUBLIC" -"3275550720","3275551743","PL","POL","POLAND" -"3275551744","3275552767","RU","RUS","RUSSIAN FEDERATION" -"3275552768","3275553791","LV","LVA","LATVIA" -"3275553792","3275554815","FI","FIN","FINLAND" -"3275555392","3275555455","ES","ESP","SPAIN" -"3275555592","3275555647","ES","ESP","SPAIN" -"3275555744","3275555759","ES","ESP","SPAIN" -"3275555768","3275555776","ES","ESP","SPAIN" -"3275556608","3275556863","ES","ESP","SPAIN" -"3275560960","3275561215","ES","ESP","SPAIN" -"3275561472","3275561727","ES","ESP","SPAIN" -"3275562496","3275562751","ES","ESP","SPAIN" -"3275563008","3275563519","CH","CHE","SWITZERLAND" -"3275563584","3275563647","CH","CHE","SWITZERLAND" -"3275563648","3275563775","DE","DEU","GERMANY" -"3275563776","3275564287","CH","CHE","SWITZERLAND" -"3275564416","3275564495","CH","CHE","SWITZERLAND" -"3275564800","3275565055","CH","CHE","SWITZERLAND" -"3275565312","3275565567","CH","CHE","SWITZERLAND" -"3275565824","3275567487","CH","CHE","SWITZERLAND" -"3275567616","3275568127","CH","CHE","SWITZERLAND" -"3275568384","3275569407","CH","CHE","SWITZERLAND" -"3275569920","3275570687","CH","CHE","SWITZERLAND" -"3275571200","3275571455","PT","PRT","PORTUGAL" -"3275571968","3275572095","PT","PRT","PORTUGAL" -"3275572768","3275572863","PT","PRT","PORTUGAL" -"3275572992","3275573055","PT","PRT","PORTUGAL" -"3275573120","3275574015","PT","PRT","PORTUGAL" -"3275574032","3275574047","PT","PRT","PORTUGAL" -"3275574144","3275574147","PT","PRT","PORTUGAL" -"3275574152","3275574159","PT","PRT","PORTUGAL" -"3275574176","3275574191","PT","PRT","PORTUGAL" -"3275574784","3275575231","PT","PRT","PORTUGAL" -"3275575424","3275575727","PT","PRT","PORTUGAL" -"3275575808","3275575935","PT","PRT","PORTUGAL" -"3275576064","3275577407","PT","PRT","PORTUGAL" -"3275577472","3275577495","PT","PRT","PORTUGAL" -"3275577520","3275577567","PT","PRT","PORTUGAL" -"3275577600","3275577727","PT","PRT","PORTUGAL" -"3275577792","3275577807","PT","PRT","PORTUGAL" -"3275577840","3275578623","PT","PRT","PORTUGAL" -"3275578880","3275579007","PT","PRT","PORTUGAL" -"3275579136","3275579391","PT","PRT","PORTUGAL" -"3275579392","3275579519","FR","FRA","FRANCE" -"3275579520","3275579583","NL","NLD","NETHERLANDS" -"3275579600","3275579615","NL","NLD","NETHERLANDS" -"3275579648","3275579703","NL","NLD","NETHERLANDS" -"3275579904","3275580159","NL","NLD","NETHERLANDS" -"3275580928","3275581311","NL","NLD","NETHERLANDS" -"3275581536","3275581671","NL","NLD","NETHERLANDS" -"3275581680","3275581695","NL","NLD","NETHERLANDS" -"3275582224","3275582247","NL","NLD","NETHERLANDS" -"3275582256","3275582287","NL","NLD","NETHERLANDS" -"3275582656","3275582719","NL","NLD","NETHERLANDS" -"3275582976","3275583231","NL","NLD","NETHERLANDS" -"3275584256","3275584287","NL","NLD","NETHERLANDS" -"3275584512","3275584527","NL","NLD","NETHERLANDS" -"3275585024","3275585279","NL","NLD","NETHERLANDS" -"3275587072","3275587136","NL","NLD","NETHERLANDS" -"3275587584","3275587855","BE","BEL","BELGIUM" -"3275588096","3275588287","BE","BEL","BELGIUM" -"3275588288","3275588319","NL","NLD","NETHERLANDS" -"3275588352","3275588607","BE","BEL","BELGIUM" -"3275588640","3275588655","BE","BEL","BELGIUM" -"3275588712","3275588719","CH","CHE","SWITZERLAND" -"3275588736","3275588799","BE","BEL","BELGIUM" -"3275588848","3275588855","BE","BEL","BELGIUM" -"3275588864","3275589119","IT","ITA","ITALY" -"3275589272","3275589279","BE","BEL","BELGIUM" -"3275589376","3275589471","BE","BEL","BELGIUM" -"3275589888","3275591167","BE","BEL","BELGIUM" -"3275591424","3275591679","BE","BEL","BELGIUM" -"3275591680","3275592063","RO","ROM","ROMANIA" -"3275592192","3275592959","RO","ROM","ROMANIA" -"3275592960","3275593215","MD","MDA","REPUBLIC OF MOLDOVA" -"3275593344","3275593855","RO","ROM","ROMANIA" -"3275593984","3275595007","RO","ROM","ROMANIA" -"3275595008","3275595039","BE","BEL","BELGIUM" -"3275595264","3275595519","US","USA","UNITED STATES" -"3275596168","3275596175","AT","AUT","AUSTRIA" -"3275599104","3275599231","AT","AUT","AUSTRIA" -"3275599872","3275600127","AT","AUT","AUSTRIA" -"3275603968","3275604735","IT","ITA","ITALY" -"3275604736","3275604767","IL","ISR","ISRAEL" -"3275604992","3275606271","IT","ITA","ITALY" -"3275606528","3275606783","IT","ITA","ITALY" -"3275608832","3275610063","IT","ITA","ITALY" -"3275610112","3275610623","IT","ITA","ITALY" -"3275612160","3275612287","LU","LUX","LUXEMBOURG" -"3275612416","3275612671","LU","LUX","LUXEMBOURG" -"3275612672","3275612927","BE","BEL","BELGIUM" -"3275612928","3275613951","LU","LUX","LUXEMBOURG" -"3275620352","3275622399","RU","RUS","RUSSIAN FEDERATION" -"3275622400","3275623423","GB","GBR","UNITED KINGDOM" -"3275623424","3275623935","PL","POL","POLAND" -"3275623936","3275624447","UA","UKR","UKRAINE" -"3275624448","3275624959","SK","SVK","SLOVAKIA" -"3275624960","3275625471","IL","ISR","ISRAEL" -"3275625472","3275625983","DE","DEU","GERMANY" -"3275625984","3275626495","BG","BGR","BULGARIA" -"3275626496","3275627007","UA","UKR","UKRAINE" -"3275627008","3275627519","AT","AUT","AUSTRIA" -"3275627520","3275628031","GB","GBR","UNITED KINGDOM" -"3275628032","3275628543","IL","ISR","ISRAEL" -"3275628544","3275629567","RU","RUS","RUSSIAN FEDERATION" -"3275629568","3275630079","UA","UKR","UKRAINE" -"3275630592","3275631103","PL","POL","POLAND" -"3275631104","3275631615","FR","FRA","FRANCE" -"3275631616","3275632127","DE","DEU","GERMANY" -"3275632128","3275633151","RU","RUS","RUSSIAN FEDERATION" -"3275633152","3275633663","FR","FRA","FRANCE" -"3275633664","3275634687","RU","RUS","RUSSIAN FEDERATION" -"3275634688","3275635199","RO","ROM","ROMANIA" -"3275635200","3275636735","RU","RUS","RUSSIAN FEDERATION" -"3275636736","3275637247","PL","POL","POLAND" -"3275637248","3275637759","SE","SWE","SWEDEN" -"3275637760","3275638271","BE","BEL","BELGIUM" -"3275638272","3275638783","RU","RUS","RUSSIAN FEDERATION" -"3275638784","3275639807","FR","FRA","FRANCE" -"3275639808","3275640319","SE","SWE","SWEDEN" -"3275640320","3275640831","RU","RUS","RUSSIAN FEDERATION" -"3275641344","3275641855","NL","NLD","NETHERLANDS" -"3275641856","3275642367","AT","AUT","AUSTRIA" -"3275642368","3275642879","RU","RUS","RUSSIAN FEDERATION" -"3275642880","3275643391","RO","ROM","ROMANIA" -"3275643392","3275643903","BE","BEL","BELGIUM" -"3275643904","3275644415","RU","RUS","RUSSIAN FEDERATION" -"3275644416","3275644927","RO","ROM","ROMANIA" -"3275644928","3275653119","DE","DEU","GERMANY" -"3275653120","3275661311","LV","LVA","LATVIA" -"3275661312","3275669503","IT","ITA","ITALY" -"3275669504","3275677695","GB","GBR","UNITED KINGDOM" -"3275677696","3275685887","IT","ITA","ITALY" -"3275685888","3275751423","DE","DEU","GERMANY" -"3275751424","3275759615","AT","AUT","AUSTRIA" -"3275759616","3275775999","NL","NLD","NETHERLANDS" -"3275776000","3275784191","DE","DEU","GERMANY" -"3275784192","3275784703","RO","ROM","ROMANIA" -"3275784704","3275785215","PL","POL","POLAND" -"3275785216","3275785727","RO","ROM","ROMANIA" -"3275785728","3275786239","CH","CHE","SWITZERLAND" -"3275786240","3275786751","UA","UKR","UKRAINE" -"3275786752","3275787263","CH","CHE","SWITZERLAND" -"3275787264","3275787775","RU","RUS","RUSSIAN FEDERATION" -"3275787776","3275788287","UA","UKR","UKRAINE" -"3275788288","3275788799","SE","SWE","SWEDEN" -"3275788800","3275789311","AT","AUT","AUSTRIA" -"3275789312","3275789823","UA","UKR","UKRAINE" -"3275789824","3275790335","PL","POL","POLAND" -"3275790336","3275790847","MD","MDA","REPUBLIC OF MOLDOVA" -"3275790848","3275791359","DK","DNK","DENMARK" -"3275791360","3275791871","RU","RUS","RUSSIAN FEDERATION" -"3275791872","3275792383","PL","POL","POLAND" -"3275792384","3275792895","BG","BGR","BULGARIA" -"3275792896","3275793407","UA","UKR","UKRAINE" -"3275793408","3275793919","FR","FRA","FRANCE" -"3275793920","3275794431","UA","UKR","UKRAINE" -"3275794432","3275794943","IT","ITA","ITALY" -"3275794944","3275795455","RS","SRB","SERBIA" -"3275795456","3275795967","GR","GRC","GREECE" -"3275795968","3275796479","PL","POL","POLAND" -"3275796480","3275796991","DE","DEU","GERMANY" -"3275796992","3275797503","RO","ROM","ROMANIA" -"3275797504","3275798015","DE","DEU","GERMANY" -"3275798528","3275799039","UA","UKR","UKRAINE" -"3275799040","3275799551","ES","ESP","SPAIN" -"3275799552","3275800063","IT","ITA","ITALY" -"3275800064","3275800575","UA","UKR","UKRAINE" -"3275800576","3275808767","RU","RUS","RUSSIAN FEDERATION" -"3275808768","3275816959","UA","UKR","UKRAINE" -"3275816960","3275818207","CH","CHE","SWITZERLAND" -"3275818208","3275818215","DE","DEU","GERMANY" -"3275818216","3275881335","CH","CHE","SWITZERLAND" -"3275881336","3275881343","DE","DEU","GERMANY" -"3275881344","3275882495","CH","CHE","SWITZERLAND" -"3275882496","3275884543","DE","DEU","GERMANY" -"3275884544","3275886591","IT","ITA","ITALY" -"3275886592","3275888639","PL","POL","POLAND" -"3275888640","3275890687","GB","GBR","UNITED KINGDOM" -"3275890688","3275898879","SE","SWE","SWEDEN" -"3275898880","3275899135","LV","LVA","LATVIA" -"3275899136","3275899647","UA","UKR","UKRAINE" -"3275899648","3275900159","PL","POL","POLAND" -"3275900160","3275900415","SI","SVN","SLOVENIA" -"3275900416","3275900671","DE","DEU","GERMANY" -"3275900672","3275901183","RU","RUS","RUSSIAN FEDERATION" -"3275901184","3275901439","PL","POL","POLAND" -"3275901440","3275901695","DE","DEU","GERMANY" -"3275901696","3275901951","IE","IRL","IRELAND" -"3275901952","3275902207","DE","DEU","GERMANY" -"3275902208","3275902719","RU","RUS","RUSSIAN FEDERATION" -"3275902720","3275902975","UA","UKR","UKRAINE" -"3275902976","3275903231","FR","FRA","FRANCE" -"3275903232","3275903487","GB","GBR","UNITED KINGDOM" -"3275903488","3275903999","DE","DEU","GERMANY" -"3275904000","3275904255","RU","RUS","RUSSIAN FEDERATION" -"3275904256","3275904511","CH","CHE","SWITZERLAND" -"3275904512","3275904767","PL","POL","POLAND" -"3275904768","3275905023","RU","RUS","RUSSIAN FEDERATION" -"3275905024","3275905279","PL","POL","POLAND" -"3275905280","3275905535","RU","RUS","RUSSIAN FEDERATION" -"3275905536","3275905791","NL","NLD","NETHERLANDS" -"3275905792","3275906303","AT","AUT","AUSTRIA" -"3275906304","3275906559","UA","UKR","UKRAINE" -"3275906560","3275907071","SE","SWE","SWEDEN" -"3275907072","3275907327","RU","RUS","RUSSIAN FEDERATION" -"3275907328","3275907583","CH","CHE","SWITZERLAND" -"3275907584","3275907839","PL","POL","POLAND" -"3275907840","3275908095","DE","DEU","GERMANY" -"3275908096","3275908351","SA","SAU","SAUDI ARABIA" -"3275908352","3275908607","SE","SWE","SWEDEN" -"3275908608","3275908863","US","USA","UNITED STATES" -"3275908864","3275909119","PL","POL","POLAND" -"3275909120","3275909375","RU","RUS","RUSSIAN FEDERATION" -"3275909376","3275909631","UA","UKR","UKRAINE" -"3275909632","3275909887","EE","EST","ESTONIA" -"3275909888","3275910143","SI","SVN","SLOVENIA" -"3275910144","3275910399","RU","RUS","RUSSIAN FEDERATION" -"3275910400","3275910655","DK","DNK","DENMARK" -"3275910656","3275910911","CH","CHE","SWITZERLAND" -"3275910912","3275911167","DE","DEU","GERMANY" -"3275911168","3275911423","FR","FRA","FRANCE" -"3275911424","3275911679","RO","ROM","ROMANIA" -"3275911680","3275911935","UA","UKR","UKRAINE" -"3275911936","3275912191","BE","BEL","BELGIUM" -"3275912192","3275912447","PL","POL","POLAND" -"3275912448","3275912703","RU","RUS","RUSSIAN FEDERATION" -"3275912704","3275912959","IL","ISR","ISRAEL" -"3275912960","3275913215","FR","FRA","FRANCE" -"3275913216","3275913471","UA","UKR","UKRAINE" -"3275913472","3275913983","DE","DEU","GERMANY" -"3275913984","3275914239","CH","CHE","SWITZERLAND" -"3275914240","3275914495","RO","ROM","ROMANIA" -"3275914496","3275914751","BG","BGR","BULGARIA" -"3275914752","3275915007","RU","RUS","RUSSIAN FEDERATION" -"3275915008","3275915263","PT","PRT","PORTUGAL" -"3275915264","3275915775","FR","FRA","FRANCE" -"3275915776","3275916287","SE","SWE","SWEDEN" -"3275916288","3275917311","NL","NLD","NETHERLANDS" -"3275917312","3275918847","UA","UKR","UKRAINE" -"3275918848","3275919359","RO","ROM","ROMANIA" -"3275919360","3275919871","PL","POL","POLAND" -"3275920384","3275920895","GB","GBR","UNITED KINGDOM" -"3275920896","3275921407","ES","ESP","SPAIN" -"3275921408","3275921919","UA","UKR","UKRAINE" -"3275921920","3275922431","DE","DEU","GERMANY" -"3275922432","3275922943","UA","UKR","UKRAINE" -"3275922944","3275923455","GR","GRC","GREECE" -"3275923456","3275924479","ME","MNE","MONTENEGRO" -"3275924480","3275925759","CS","SCG","SERBIA AND MONTENEGRO" -"3275925760","3275926287","ME","MNE","MONTENEGRO" -"3275926288","3275926303","CS","SCG","SERBIA AND MONTENEGRO" -"3275926304","3275926527","ME","MNE","MONTENEGRO" -"3275926528","3275926783","CS","SCG","SERBIA AND MONTENEGRO" -"3275926784","3275928927","ME","MNE","MONTENEGRO" -"3275928928","3275928943","CS","SCG","SERBIA AND MONTENEGRO" -"3275928944","3275929151","ME","MNE","MONTENEGRO" -"3275929152","3275929159","CS","SCG","SERBIA AND MONTENEGRO" -"3275929160","3275929167","ME","MNE","MONTENEGRO" -"3275929168","3275929183","CS","SCG","SERBIA AND MONTENEGRO" -"3275929184","3275929295","ME","MNE","MONTENEGRO" -"3275929296","3275929311","CS","SCG","SERBIA AND MONTENEGRO" -"3275929312","3275929471","ME","MNE","MONTENEGRO" -"3275929472","3275929487","CS","SCG","SERBIA AND MONTENEGRO" -"3275929488","3275929503","ME","MNE","MONTENEGRO" -"3275929504","3275929535","CS","SCG","SERBIA AND MONTENEGRO" -"3275929536","3275929615","ME","MNE","MONTENEGRO" -"3275929616","3275929663","CS","SCG","SERBIA AND MONTENEGRO" -"3275929664","3275929695","ME","MNE","MONTENEGRO" -"3275929696","3275929711","CS","SCG","SERBIA AND MONTENEGRO" -"3275929712","3275929719","ME","MNE","MONTENEGRO" -"3275929720","3275929727","CS","SCG","SERBIA AND MONTENEGRO" -"3275929728","3275929855","ME","MNE","MONTENEGRO" -"3275929856","3275929919","CS","SCG","SERBIA AND MONTENEGRO" -"3275929920","3275929935","ME","MNE","MONTENEGRO" -"3275929936","3275929951","CS","SCG","SERBIA AND MONTENEGRO" -"3275929952","3275930015","ME","MNE","MONTENEGRO" -"3275930016","3275930023","CS","SCG","SERBIA AND MONTENEGRO" -"3275930024","3275930079","ME","MNE","MONTENEGRO" -"3275930080","3275930095","CS","SCG","SERBIA AND MONTENEGRO" -"3275930096","3275930239","ME","MNE","MONTENEGRO" -"3275930240","3275930271","CS","SCG","SERBIA AND MONTENEGRO" -"3275930272","3275930287","ME","MNE","MONTENEGRO" -"3275930288","3275930295","CS","SCG","SERBIA AND MONTENEGRO" -"3275930296","3275931647","ME","MNE","MONTENEGRO" -"3275931648","3275939839","UA","UKR","UKRAINE" -"3275939840","3275948031","GB","GBR","UNITED KINGDOM" -"3275948032","3275965267","SE","SWE","SWEDEN" -"3275965268","3275965271","FI","FIN","FINLAND" -"3275965272","3276013567","SE","SWE","SWEDEN" -"3276013568","3276014087","FR","FRA","FRANCE" -"3276014088","3276014095","GB","GBR","UNITED KINGDOM" -"3276014096","3276014151","FR","FRA","FRANCE" -"3276014152","3276014159","GB","GBR","UNITED KINGDOM" -"3276014160","3276014191","FR","FRA","FRANCE" -"3276014192","3276014207","GB","GBR","UNITED KINGDOM" -"3276014208","3276014255","FR","FRA","FRANCE" -"3276014256","3276014263","GB","GBR","UNITED KINGDOM" -"3276014264","3276014471","FR","FRA","FRANCE" -"3276014472","3276014495","GB","GBR","UNITED KINGDOM" -"3276014496","3276014671","FR","FRA","FRANCE" -"3276014672","3276014679","GB","GBR","UNITED KINGDOM" -"3276014680","3276014703","FR","FRA","FRANCE" -"3276014704","3276014711","GB","GBR","UNITED KINGDOM" -"3276014712","3276014887","FR","FRA","FRANCE" -"3276014888","3276014895","IE","IRL","IRELAND" -"3276014896","3276015007","FR","FRA","FRANCE" -"3276015008","3276015015","GB","GBR","UNITED KINGDOM" -"3276015016","3276015199","FR","FRA","FRANCE" -"3276015200","3276015231","GB","GBR","UNITED KINGDOM" -"3276015232","3276015247","FR","FRA","FRANCE" -"3276015248","3276015263","GB","GBR","UNITED KINGDOM" -"3276015264","3276015295","FR","FRA","FRANCE" -"3276015296","3276015327","GB","GBR","UNITED KINGDOM" -"3276015328","3276015559","FR","FRA","FRANCE" -"3276015560","3276015583","GB","GBR","UNITED KINGDOM" -"3276015584","3276016391","FR","FRA","FRANCE" -"3276016392","3276016399","GB","GBR","UNITED KINGDOM" -"3276016400","3276016415","FR","FRA","FRANCE" -"3276016416","3276016463","GB","GBR","UNITED KINGDOM" -"3276016464","3276016527","FR","FRA","FRANCE" -"3276016528","3276016591","GB","GBR","UNITED KINGDOM" -"3276016592","3276016703","FR","FRA","FRANCE" -"3276016704","3276016735","GB","GBR","UNITED KINGDOM" -"3276016736","3276016767","FR","FRA","FRANCE" -"3276016768","3276016783","GB","GBR","UNITED KINGDOM" -"3276016784","3276016799","FR","FRA","FRANCE" -"3276016800","3276016815","GB","GBR","UNITED KINGDOM" -"3276016816","3276016831","FR","FRA","FRANCE" -"3276016832","3276016847","GB","GBR","UNITED KINGDOM" -"3276016848","3276016863","FR","FRA","FRANCE" -"3276016864","3276016879","GB","GBR","UNITED KINGDOM" -"3276016880","3276016943","FR","FRA","FRANCE" -"3276016944","3276016959","GB","GBR","UNITED KINGDOM" -"3276016960","3276016975","FR","FRA","FRANCE" -"3276016976","3276016991","GB","GBR","UNITED KINGDOM" -"3276016992","3276017039","FR","FRA","FRANCE" -"3276017040","3276017043","GB","GBR","UNITED KINGDOM" -"3276017044","3276017047","FR","FRA","FRANCE" -"3276017048","3276017055","GB","GBR","UNITED KINGDOM" -"3276017056","3276017119","FR","FRA","FRANCE" -"3276017120","3276017151","GB","GBR","UNITED KINGDOM" -"3276017152","3276017327","FR","FRA","FRANCE" -"3276017328","3276017343","GB","GBR","UNITED KINGDOM" -"3276017344","3276017551","FR","FRA","FRANCE" -"3276017552","3276017567","GB","GBR","UNITED KINGDOM" -"3276017568","3276017607","FR","FRA","FRANCE" -"3276017608","3276017663","GB","GBR","UNITED KINGDOM" -"3276017664","3276018015","FR","FRA","FRANCE" -"3276018016","3276018031","GB","GBR","UNITED KINGDOM" -"3276018032","3276018047","FR","FRA","FRANCE" -"3276018048","3276018063","GB","GBR","UNITED KINGDOM" -"3276018064","3276018095","FR","FRA","FRANCE" -"3276018096","3276018127","GB","GBR","UNITED KINGDOM" -"3276018128","3276018143","FR","FRA","FRANCE" -"3276018144","3276018159","GB","GBR","UNITED KINGDOM" -"3276018160","3276018175","FR","FRA","FRANCE" -"3276018176","3276018207","GB","GBR","UNITED KINGDOM" -"3276018208","3276018375","FR","FRA","FRANCE" -"3276018376","3276018383","GB","GBR","UNITED KINGDOM" -"3276018384","3276018415","FR","FRA","FRANCE" -"3276018416","3276018423","GB","GBR","UNITED KINGDOM" -"3276018424","3276018495","FR","FRA","FRANCE" -"3276018496","3276018527","GB","GBR","UNITED KINGDOM" -"3276018528","3276018543","FR","FRA","FRANCE" -"3276018544","3276018623","GB","GBR","UNITED KINGDOM" -"3276018624","3276018943","FR","FRA","FRANCE" -"3276018944","3276018975","GB","GBR","UNITED KINGDOM" -"3276018976","3276018985","FR","FRA","FRANCE" -"3276018986","3276019007","GB","GBR","UNITED KINGDOM" -"3276019008","3276019023","FR","FRA","FRANCE" -"3276019024","3276019071","GB","GBR","UNITED KINGDOM" -"3276019072","3276019135","FR","FRA","FRANCE" -"3276019136","3276019151","GB","GBR","UNITED KINGDOM" -"3276019152","3276019463","FR","FRA","FRANCE" -"3276019464","3276019471","GB","GBR","UNITED KINGDOM" -"3276019472","3276019503","FR","FRA","FRANCE" -"3276019504","3276019511","GB","GBR","UNITED KINGDOM" -"3276019512","3276019535","FR","FRA","FRANCE" -"3276019536","3276019543","GB","GBR","UNITED KINGDOM" -"3276019544","3276019559","FR","FRA","FRANCE" -"3276019560","3276019599","GB","GBR","UNITED KINGDOM" -"3276019600","3276019639","FR","FRA","FRANCE" -"3276019640","3276019647","GB","GBR","UNITED KINGDOM" -"3276019648","3276019679","FR","FRA","FRANCE" -"3276019680","3276019687","GB","GBR","UNITED KINGDOM" -"3276019688","3276019695","FR","FRA","FRANCE" -"3276019696","3276019703","GB","GBR","UNITED KINGDOM" -"3276019704","3276019823","FR","FRA","FRANCE" -"3276019824","3276019831","GB","GBR","UNITED KINGDOM" -"3276019832","3276019839","FR","FRA","FRANCE" -"3276019840","3276019855","GB","GBR","UNITED KINGDOM" -"3276019856","3276019863","FR","FRA","FRANCE" -"3276019864","3276019871","GB","GBR","UNITED KINGDOM" -"3276019872","3276019919","FR","FRA","FRANCE" -"3276019920","3276019927","GB","GBR","UNITED KINGDOM" -"3276019928","3276020399","FR","FRA","FRANCE" -"3276020400","3276020415","GB","GBR","UNITED KINGDOM" -"3276020416","3276020503","FR","FRA","FRANCE" -"3276020504","3276020511","GB","GBR","UNITED KINGDOM" -"3276020512","3276020527","FR","FRA","FRANCE" -"3276020528","3276020543","GB","GBR","UNITED KINGDOM" -"3276020544","3276020623","FR","FRA","FRANCE" -"3276020624","3276020631","GB","GBR","UNITED KINGDOM" -"3276020632","3276020679","FR","FRA","FRANCE" -"3276020680","3276020687","GB","GBR","UNITED KINGDOM" -"3276020688","3276020703","FR","FRA","FRANCE" -"3276020704","3276020735","GB","GBR","UNITED KINGDOM" -"3276020736","3276020879","FR","FRA","FRANCE" -"3276020880","3276020887","GB","GBR","UNITED KINGDOM" -"3276020888","3276020943","FR","FRA","FRANCE" -"3276020944","3276020991","GB","GBR","UNITED KINGDOM" -"3276020992","3276021151","FR","FRA","FRANCE" -"3276021152","3276021167","GB","GBR","UNITED KINGDOM" -"3276021168","3276021215","FR","FRA","FRANCE" -"3276021216","3276021247","GB","GBR","UNITED KINGDOM" -"3276021248","3276021511","FR","FRA","FRANCE" -"3276021512","3276021519","GB","GBR","UNITED KINGDOM" -"3276021520","3276021535","FR","FRA","FRANCE" -"3276021536","3276021551","GB","GBR","UNITED KINGDOM" -"3276021552","3276021575","FR","FRA","FRANCE" -"3276021576","3276021615","GB","GBR","UNITED KINGDOM" -"3276021616","3276021727","FR","FRA","FRANCE" -"3276021728","3276021767","GB","GBR","UNITED KINGDOM" -"3276021768","3276021791","FR","FRA","FRANCE" -"3276021792","3276021823","GB","GBR","UNITED KINGDOM" -"3276021824","3276021855","FR","FRA","FRANCE" -"3276021856","3276021887","GB","GBR","UNITED KINGDOM" -"3276021888","3276021983","FR","FRA","FRANCE" -"3276021984","3276021999","GB","GBR","UNITED KINGDOM" -"3276022000","3276022031","FR","FRA","FRANCE" -"3276022032","3276022047","GB","GBR","UNITED KINGDOM" -"3276022048","3276022087","FR","FRA","FRANCE" -"3276022088","3276022095","GB","GBR","UNITED KINGDOM" -"3276022096","3276022127","FR","FRA","FRANCE" -"3276022128","3276022143","GB","GBR","UNITED KINGDOM" -"3276022144","3276022255","FR","FRA","FRANCE" -"3276022256","3276022271","GB","GBR","UNITED KINGDOM" -"3276022272","3276022455","FR","FRA","FRANCE" -"3276022456","3276022463","GB","GBR","UNITED KINGDOM" -"3276022464","3276022479","FR","FRA","FRANCE" -"3276022480","3276022495","GB","GBR","UNITED KINGDOM" -"3276022496","3276022519","FR","FRA","FRANCE" -"3276022520","3276022527","GB","GBR","UNITED KINGDOM" -"3276022528","3276022567","FR","FRA","FRANCE" -"3276022568","3276022639","GB","GBR","UNITED KINGDOM" -"3276022640","3276022655","FR","FRA","FRANCE" -"3276022656","3276022687","GB","GBR","UNITED KINGDOM" -"3276022688","3276022751","FR","FRA","FRANCE" -"3276022752","3276022783","GB","GBR","UNITED KINGDOM" -"3276022784","3276022983","FR","FRA","FRANCE" -"3276022984","3276022991","GB","GBR","UNITED KINGDOM" -"3276022992","3276023031","FR","FRA","FRANCE" -"3276023032","3276023039","GB","GBR","UNITED KINGDOM" -"3276023040","3276023071","FR","FRA","FRANCE" -"3276023072","3276023079","GB","GBR","UNITED KINGDOM" -"3276023080","3276023103","FR","FRA","FRANCE" -"3276023104","3276023231","GB","GBR","UNITED KINGDOM" -"3276023232","3276023247","FR","FRA","FRANCE" -"3276023248","3276023279","GB","GBR","UNITED KINGDOM" -"3276023280","3276023679","FR","FRA","FRANCE" -"3276023680","3276023695","GB","GBR","UNITED KINGDOM" -"3276023696","3276023759","FR","FRA","FRANCE" -"3276023760","3276023767","GB","GBR","UNITED KINGDOM" -"3276023768","3276023871","FR","FRA","FRANCE" -"3276023872","3276023887","GB","GBR","UNITED KINGDOM" -"3276023888","3276023903","FR","FRA","FRANCE" -"3276023904","3276023919","GB","GBR","UNITED KINGDOM" -"3276023920","3276023943","FR","FRA","FRANCE" -"3276023944","3276023951","GB","GBR","UNITED KINGDOM" -"3276023952","3276023959","FR","FRA","FRANCE" -"3276023960","3276023967","GB","GBR","UNITED KINGDOM" -"3276023968","3276025111","FR","FRA","FRANCE" -"3276025112","3276025135","GB","GBR","UNITED KINGDOM" -"3276025136","3276025151","FR","FRA","FRANCE" -"3276025152","3276025159","GB","GBR","UNITED KINGDOM" -"3276025160","3276025167","FR","FRA","FRANCE" -"3276025168","3276025175","GB","GBR","UNITED KINGDOM" -"3276025176","3276025183","FR","FRA","FRANCE" -"3276025184","3276025191","GB","GBR","UNITED KINGDOM" -"3276025192","3276025207","FR","FRA","FRANCE" -"3276025208","3276025215","GB","GBR","UNITED KINGDOM" -"3276025216","3276025247","FR","FRA","FRANCE" -"3276025248","3276025279","GB","GBR","UNITED KINGDOM" -"3276025280","3276025295","FR","FRA","FRANCE" -"3276025296","3276025327","GB","GBR","UNITED KINGDOM" -"3276025328","3276026143","FR","FRA","FRANCE" -"3276026144","3276026159","GB","GBR","UNITED KINGDOM" -"3276026160","3276026167","FR","FRA","FRANCE" -"3276026168","3276026175","GB","GBR","UNITED KINGDOM" -"3276026176","3276026191","FR","FRA","FRANCE" -"3276026192","3276026199","GB","GBR","UNITED KINGDOM" -"3276026200","3276026215","FR","FRA","FRANCE" -"3276026216","3276026223","GB","GBR","UNITED KINGDOM" -"3276026224","3276026319","FR","FRA","FRANCE" -"3276026320","3276026351","GB","GBR","UNITED KINGDOM" -"3276026352","3276026423","FR","FRA","FRANCE" -"3276026424","3276026431","GB","GBR","UNITED KINGDOM" -"3276026432","3276026527","FR","FRA","FRANCE" -"3276026528","3276026535","GB","GBR","UNITED KINGDOM" -"3276026536","3276026543","FR","FRA","FRANCE" -"3276026544","3276026575","GB","GBR","UNITED KINGDOM" -"3276026576","3276026591","FR","FRA","FRANCE" -"3276026592","3276026607","GB","GBR","UNITED KINGDOM" -"3276026608","3276026703","FR","FRA","FRANCE" -"3276026704","3276026719","GB","GBR","UNITED KINGDOM" -"3276026720","3276026727","FR","FRA","FRANCE" -"3276026728","3276026743","GB","GBR","UNITED KINGDOM" -"3276026744","3276026751","FR","FRA","FRANCE" -"3276026752","3276026783","GB","GBR","UNITED KINGDOM" -"3276026784","3276026815","FR","FRA","FRANCE" -"3276026816","3276026823","GB","GBR","UNITED KINGDOM" -"3276026824","3276026847","FR","FRA","FRANCE" -"3276026848","3276026927","GB","GBR","UNITED KINGDOM" -"3276026928","3276026943","FR","FRA","FRANCE" -"3276026944","3276026991","GB","GBR","UNITED KINGDOM" -"3276026992","3276027311","FR","FRA","FRANCE" -"3276027312","3276027327","GB","GBR","UNITED KINGDOM" -"3276027328","3276027503","FR","FRA","FRANCE" -"3276027504","3276027519","GB","GBR","UNITED KINGDOM" -"3276027520","3276027551","FR","FRA","FRANCE" -"3276027552","3276027583","GB","GBR","UNITED KINGDOM" -"3276027584","3276027695","FR","FRA","FRANCE" -"3276027696","3276027743","GB","GBR","UNITED KINGDOM" -"3276027744","3276027791","FR","FRA","FRANCE" -"3276027792","3276027807","GB","GBR","UNITED KINGDOM" -"3276027808","3276027855","FR","FRA","FRANCE" -"3276027856","3276027871","GB","GBR","UNITED KINGDOM" -"3276027872","3276027951","FR","FRA","FRANCE" -"3276027952","3276027967","GB","GBR","UNITED KINGDOM" -"3276027968","3276028047","FR","FRA","FRANCE" -"3276028048","3276028063","GB","GBR","UNITED KINGDOM" -"3276028064","3276028079","FR","FRA","FRANCE" -"3276028080","3276028111","GB","GBR","UNITED KINGDOM" -"3276028112","3276028127","FR","FRA","FRANCE" -"3276028128","3276028143","GB","GBR","UNITED KINGDOM" -"3276028144","3276028159","FR","FRA","FRANCE" -"3276028160","3276028231","GB","GBR","UNITED KINGDOM" -"3276028232","3276028247","FR","FRA","FRANCE" -"3276028248","3276028255","GB","GBR","UNITED KINGDOM" -"3276028256","3276028263","FR","FRA","FRANCE" -"3276028264","3276028287","GB","GBR","UNITED KINGDOM" -"3276028288","3276028479","FR","FRA","FRANCE" -"3276028480","3276028511","GB","GBR","UNITED KINGDOM" -"3276028512","3276028743","FR","FRA","FRANCE" -"3276028744","3276028751","GB","GBR","UNITED KINGDOM" -"3276028752","3276028759","FR","FRA","FRANCE" -"3276028760","3276028767","GB","GBR","UNITED KINGDOM" -"3276028768","3276028791","FR","FRA","FRANCE" -"3276028792","3276028799","GB","GBR","UNITED KINGDOM" -"3276028800","3276028807","FR","FRA","FRANCE" -"3276028808","3276028815","GB","GBR","UNITED KINGDOM" -"3276028816","3276028863","FR","FRA","FRANCE" -"3276028864","3276028871","GB","GBR","UNITED KINGDOM" -"3276028872","3276028879","FR","FRA","FRANCE" -"3276028880","3276028887","GB","GBR","UNITED KINGDOM" -"3276028888","3276028895","FR","FRA","FRANCE" -"3276028896","3276028927","GB","GBR","UNITED KINGDOM" -"3276028928","3276029183","FR","FRA","FRANCE" -"3276029184","3276029199","GB","GBR","UNITED KINGDOM" -"3276029200","3276029343","FR","FRA","FRANCE" -"3276029344","3276029359","GB","GBR","UNITED KINGDOM" -"3276029360","3276029375","FR","FRA","FRANCE" -"3276029376","3276029407","GB","GBR","UNITED KINGDOM" -"3276029408","3276029423","FR","FRA","FRANCE" -"3276029424","3276029439","GB","GBR","UNITED KINGDOM" -"3276029440","3276029583","FR","FRA","FRANCE" -"3276029584","3276029599","GB","GBR","UNITED KINGDOM" -"3276029600","3276029727","FR","FRA","FRANCE" -"3276029728","3276029791","GB","GBR","UNITED KINGDOM" -"3276029792","3276029855","FR","FRA","FRANCE" -"3276029856","3276029887","GB","GBR","UNITED KINGDOM" -"3276029888","3276029919","FR","FRA","FRANCE" -"3276029920","3276029967","GB","GBR","UNITED KINGDOM" -"3276029968","3276030079","FR","FRA","FRANCE" -"3276030080","3276030095","GB","GBR","UNITED KINGDOM" -"3276030096","3276030191","FR","FRA","FRANCE" -"3276030192","3276030207","GB","GBR","UNITED KINGDOM" -"3276030208","3276030215","FR","FRA","FRANCE" -"3276030216","3276030239","GB","GBR","UNITED KINGDOM" -"3276030240","3276030255","FR","FRA","FRANCE" -"3276030256","3276030263","GB","GBR","UNITED KINGDOM" -"3276030264","3276030271","FR","FRA","FRANCE" -"3276030272","3276030303","GB","GBR","UNITED KINGDOM" -"3276030304","3276030407","FR","FRA","FRANCE" -"3276030408","3276030415","GB","GBR","UNITED KINGDOM" -"3276030416","3276030543","FR","FRA","FRANCE" -"3276030544","3276030559","GB","GBR","UNITED KINGDOM" -"3276030560","3276031255","FR","FRA","FRANCE" -"3276031256","3276031263","GB","GBR","UNITED KINGDOM" -"3276031264","3276031375","FR","FRA","FRANCE" -"3276031376","3276031383","GB","GBR","UNITED KINGDOM" -"3276031384","3276031423","FR","FRA","FRANCE" -"3276031424","3276031439","GB","GBR","UNITED KINGDOM" -"3276031440","3276031519","FR","FRA","FRANCE" -"3276031520","3276031535","GB","GBR","UNITED KINGDOM" -"3276031536","3276031559","FR","FRA","FRANCE" -"3276031560","3276031567","GB","GBR","UNITED KINGDOM" -"3276031568","3276031583","FR","FRA","FRANCE" -"3276031584","3276031591","GB","GBR","UNITED KINGDOM" -"3276031592","3276031615","FR","FRA","FRANCE" -"3276031616","3276031679","GB","GBR","UNITED KINGDOM" -"3276031680","3276031719","FR","FRA","FRANCE" -"3276031720","3276031743","GB","GBR","UNITED KINGDOM" -"3276031744","3276032007","FR","FRA","FRANCE" -"3276032008","3276032015","GB","GBR","UNITED KINGDOM" -"3276032016","3276032023","FR","FRA","FRANCE" -"3276032024","3276032031","GB","GBR","UNITED KINGDOM" -"3276032032","3276032103","FR","FRA","FRANCE" -"3276032104","3276032111","GB","GBR","UNITED KINGDOM" -"3276032112","3276032271","FR","FRA","FRANCE" -"3276032272","3276032303","GB","GBR","UNITED KINGDOM" -"3276032304","3276032319","FR","FRA","FRANCE" -"3276032320","3276032343","GB","GBR","UNITED KINGDOM" -"3276032344","3276032367","FR","FRA","FRANCE" -"3276032368","3276032383","GB","GBR","UNITED KINGDOM" -"3276032384","3276032447","FR","FRA","FRANCE" -"3276032448","3276032479","GB","GBR","UNITED KINGDOM" -"3276032480","3276032543","FR","FRA","FRANCE" -"3276032544","3276032559","GB","GBR","UNITED KINGDOM" -"3276032560","3276032591","FR","FRA","FRANCE" -"3276032592","3276032607","GB","GBR","UNITED KINGDOM" -"3276032608","3276032719","FR","FRA","FRANCE" -"3276032720","3276032735","GB","GBR","UNITED KINGDOM" -"3276032736","3276033039","FR","FRA","FRANCE" -"3276033040","3276033119","GB","GBR","UNITED KINGDOM" -"3276033120","3276033151","FR","FRA","FRANCE" -"3276033152","3276033167","GB","GBR","UNITED KINGDOM" -"3276033168","3276033215","FR","FRA","FRANCE" -"3276033216","3276033231","GB","GBR","UNITED KINGDOM" -"3276033232","3276033247","FR","FRA","FRANCE" -"3276033248","3276033279","GB","GBR","UNITED KINGDOM" -"3276033280","3276033535","FR","FRA","FRANCE" -"3276033536","3276033647","GB","GBR","UNITED KINGDOM" -"3276033648","3276033663","FR","FRA","FRANCE" -"3276033664","3276033695","GB","GBR","UNITED KINGDOM" -"3276033696","3276033791","FR","FRA","FRANCE" -"3276033792","3276033823","GB","GBR","UNITED KINGDOM" -"3276033824","3276033839","FR","FRA","FRANCE" -"3276033840","3276033855","GB","GBR","UNITED KINGDOM" -"3276033856","3276033863","FR","FRA","FRANCE" -"3276033864","3276033871","GB","GBR","UNITED KINGDOM" -"3276033872","3276033879","FR","FRA","FRANCE" -"3276033880","3276033887","GB","GBR","UNITED KINGDOM" -"3276033888","3276033927","FR","FRA","FRANCE" -"3276033928","3276033951","GB","GBR","UNITED KINGDOM" -"3276033952","3276036095","FR","FRA","FRANCE" -"3276036096","3276036103","GB","GBR","UNITED KINGDOM" -"3276036104","3276036111","FR","FRA","FRANCE" -"3276036112","3276036119","GB","GBR","UNITED KINGDOM" -"3276036120","3276036191","FR","FRA","FRANCE" -"3276036192","3276036207","GB","GBR","UNITED KINGDOM" -"3276036208","3276036223","FR","FRA","FRANCE" -"3276036224","3276036255","GB","GBR","UNITED KINGDOM" -"3276036256","3276036271","FR","FRA","FRANCE" -"3276036272","3276036287","GB","GBR","UNITED KINGDOM" -"3276036288","3276036303","FR","FRA","FRANCE" -"3276036304","3276036335","GB","GBR","UNITED KINGDOM" -"3276036336","3276036383","FR","FRA","FRANCE" -"3276036384","3276036415","GB","GBR","UNITED KINGDOM" -"3276036416","3276036591","FR","FRA","FRANCE" -"3276036592","3276036607","GB","GBR","UNITED KINGDOM" -"3276036608","3276037199","FR","FRA","FRANCE" -"3276037200","3276037215","GB","GBR","UNITED KINGDOM" -"3276037216","3276037359","FR","FRA","FRANCE" -"3276037360","3276037375","GB","GBR","UNITED KINGDOM" -"3276037376","3276037695","FR","FRA","FRANCE" -"3276037696","3276037743","GB","GBR","UNITED KINGDOM" -"3276037744","3276037887","FR","FRA","FRANCE" -"3276037888","3276037903","GB","GBR","UNITED KINGDOM" -"3276037904","3276037959","FR","FRA","FRANCE" -"3276037960","3276037983","GB","GBR","UNITED KINGDOM" -"3276037984","3276038047","FR","FRA","FRANCE" -"3276038048","3276038111","GB","GBR","UNITED KINGDOM" -"3276038112","3276038143","FR","FRA","FRANCE" -"3276038144","3276038399","GB","GBR","UNITED KINGDOM" -"3276038400","3276038703","FR","FRA","FRANCE" -"3276038704","3276038719","GB","GBR","UNITED KINGDOM" -"3276038720","3276038735","FR","FRA","FRANCE" -"3276038736","3276038767","GB","GBR","UNITED KINGDOM" -"3276038768","3276038799","FR","FRA","FRANCE" -"3276038800","3276038815","GB","GBR","UNITED KINGDOM" -"3276038816","3276038847","FR","FRA","FRANCE" -"3276038848","3276038911","GB","GBR","UNITED KINGDOM" -"3276038912","3276039199","FR","FRA","FRANCE" -"3276039200","3276039247","GB","GBR","UNITED KINGDOM" -"3276039248","3276039279","FR","FRA","FRANCE" -"3276039280","3276039295","GB","GBR","UNITED KINGDOM" -"3276039296","3276039327","FR","FRA","FRANCE" -"3276039328","3276039343","GB","GBR","UNITED KINGDOM" -"3276039344","3276039391","FR","FRA","FRANCE" -"3276039392","3276039423","GB","GBR","UNITED KINGDOM" -"3276039424","3276039551","FR","FRA","FRANCE" -"3276039552","3276039567","GB","GBR","UNITED KINGDOM" -"3276039568","3276039647","FR","FRA","FRANCE" -"3276039648","3276039663","GB","GBR","UNITED KINGDOM" -"3276039664","3276039943","FR","FRA","FRANCE" -"3276039944","3276039951","GB","GBR","UNITED KINGDOM" -"3276039952","3276039967","FR","FRA","FRANCE" -"3276039968","3276040031","GB","GBR","UNITED KINGDOM" -"3276040032","3276040063","FR","FRA","FRANCE" -"3276040064","3276040095","GB","GBR","UNITED KINGDOM" -"3276040096","3276040159","FR","FRA","FRANCE" -"3276040160","3276040175","GB","GBR","UNITED KINGDOM" -"3276040176","3276040207","FR","FRA","FRANCE" -"3276040208","3276040215","GB","GBR","UNITED KINGDOM" -"3276040216","3276040231","FR","FRA","FRANCE" -"3276040232","3276040239","GB","GBR","UNITED KINGDOM" -"3276040240","3276040319","FR","FRA","FRANCE" -"3276040320","3276040327","GB","GBR","UNITED KINGDOM" -"3276040328","3276040335","FR","FRA","FRANCE" -"3276040336","3276040343","GB","GBR","UNITED KINGDOM" -"3276040344","3276040351","FR","FRA","FRANCE" -"3276040352","3276040367","GB","GBR","UNITED KINGDOM" -"3276040368","3276040439","FR","FRA","FRANCE" -"3276040440","3276040463","GB","GBR","UNITED KINGDOM" -"3276040464","3276040479","FR","FRA","FRANCE" -"3276040480","3276040495","GB","GBR","UNITED KINGDOM" -"3276040496","3276040543","FR","FRA","FRANCE" -"3276040544","3276040575","GB","GBR","UNITED KINGDOM" -"3276040576","3276040591","FR","FRA","FRANCE" -"3276040592","3276040607","GB","GBR","UNITED KINGDOM" -"3276040608","3276040639","FR","FRA","FRANCE" -"3276040640","3276040671","GB","GBR","UNITED KINGDOM" -"3276040672","3276040879","FR","FRA","FRANCE" -"3276040880","3276040895","GB","GBR","UNITED KINGDOM" -"3276040896","3276040991","FR","FRA","FRANCE" -"3276040992","3276041007","GB","GBR","UNITED KINGDOM" -"3276041008","3276041071","FR","FRA","FRANCE" -"3276041072","3276041087","GB","GBR","UNITED KINGDOM" -"3276041088","3276041199","FR","FRA","FRANCE" -"3276041200","3276041215","GB","GBR","UNITED KINGDOM" -"3276041216","3276041279","FR","FRA","FRANCE" -"3276041280","3276041311","GB","GBR","UNITED KINGDOM" -"3276041312","3276041391","FR","FRA","FRANCE" -"3276041392","3276041407","GB","GBR","UNITED KINGDOM" -"3276041408","3276041487","FR","FRA","FRANCE" -"3276041488","3276041503","GB","GBR","UNITED KINGDOM" -"3276041504","3276041519","FR","FRA","FRANCE" -"3276041520","3276041535","GB","GBR","UNITED KINGDOM" -"3276041536","3276041551","FR","FRA","FRANCE" -"3276041552","3276041599","GB","GBR","UNITED KINGDOM" -"3276041600","3276041759","FR","FRA","FRANCE" -"3276041760","3276041775","GB","GBR","UNITED KINGDOM" -"3276041776","3276041839","FR","FRA","FRANCE" -"3276041840","3276041887","GB","GBR","UNITED KINGDOM" -"3276041888","3276041919","FR","FRA","FRANCE" -"3276041920","3276041951","GB","GBR","UNITED KINGDOM" -"3276041952","3276041967","FR","FRA","FRANCE" -"3276041968","3276041983","GB","GBR","UNITED KINGDOM" -"3276041984","3276041999","FR","FRA","FRANCE" -"3276042000","3276042007","GB","GBR","UNITED KINGDOM" -"3276042008","3276042015","FR","FRA","FRANCE" -"3276042016","3276042047","GB","GBR","UNITED KINGDOM" -"3276042048","3276042111","FR","FRA","FRANCE" -"3276042112","3276042143","GB","GBR","UNITED KINGDOM" -"3276042144","3276042175","FR","FRA","FRANCE" -"3276042176","3276042191","GB","GBR","UNITED KINGDOM" -"3276042192","3276042207","FR","FRA","FRANCE" -"3276042208","3276042239","GB","GBR","UNITED KINGDOM" -"3276042240","3276042767","FR","FRA","FRANCE" -"3276042768","3276042799","GB","GBR","UNITED KINGDOM" -"3276042800","3276042831","FR","FRA","FRANCE" -"3276042832","3276042847","GB","GBR","UNITED KINGDOM" -"3276042848","3276044303","FR","FRA","FRANCE" -"3276044304","3276044319","GB","GBR","UNITED KINGDOM" -"3276044320","3276044351","FR","FRA","FRANCE" -"3276044352","3276044359","GB","GBR","UNITED KINGDOM" -"3276044360","3276044367","FR","FRA","FRANCE" -"3276044368","3276044375","GB","GBR","UNITED KINGDOM" -"3276044376","3276044447","FR","FRA","FRANCE" -"3276044448","3276044463","GB","GBR","UNITED KINGDOM" -"3276044464","3276044479","FR","FRA","FRANCE" -"3276044480","3276044495","GB","GBR","UNITED KINGDOM" -"3276044496","3276044511","FR","FRA","FRANCE" -"3276044512","3276044543","GB","GBR","UNITED KINGDOM" -"3276044544","3276044607","FR","FRA","FRANCE" -"3276044608","3276044639","GB","GBR","UNITED KINGDOM" -"3276044640","3276044671","FR","FRA","FRANCE" -"3276044672","3276044703","GB","GBR","UNITED KINGDOM" -"3276044704","3276044735","FR","FRA","FRANCE" -"3276044736","3276044799","GB","GBR","UNITED KINGDOM" -"3276044800","3276044815","FR","FRA","FRANCE" -"3276044816","3276044831","GB","GBR","UNITED KINGDOM" -"3276044832","3276044863","FR","FRA","FRANCE" -"3276044864","3276044879","GB","GBR","UNITED KINGDOM" -"3276044880","3276044927","FR","FRA","FRANCE" -"3276044928","3276044943","GB","GBR","UNITED KINGDOM" -"3276044944","3276044959","FR","FRA","FRANCE" -"3276044960","3276044967","GB","GBR","UNITED KINGDOM" -"3276044968","3276044991","FR","FRA","FRANCE" -"3276044992","3276044999","GB","GBR","UNITED KINGDOM" -"3276045000","3276045023","FR","FRA","FRANCE" -"3276045024","3276045039","GB","GBR","UNITED KINGDOM" -"3276045040","3276045055","FR","FRA","FRANCE" -"3276045056","3276045071","GB","GBR","UNITED KINGDOM" -"3276045072","3276045119","FR","FRA","FRANCE" -"3276045120","3276045127","GB","GBR","UNITED KINGDOM" -"3276045128","3276045135","FR","FRA","FRANCE" -"3276045136","3276045151","GB","GBR","UNITED KINGDOM" -"3276045152","3276045183","FR","FRA","FRANCE" -"3276045184","3276045199","GB","GBR","UNITED KINGDOM" -"3276045200","3276045223","FR","FRA","FRANCE" -"3276045224","3276045239","GB","GBR","UNITED KINGDOM" -"3276045240","3276045255","FR","FRA","FRANCE" -"3276045256","3276045271","GB","GBR","UNITED KINGDOM" -"3276045272","3276045287","FR","FRA","FRANCE" -"3276045288","3276045311","GB","GBR","UNITED KINGDOM" -"3276045312","3276045351","FR","FRA","FRANCE" -"3276045352","3276045359","GB","GBR","UNITED KINGDOM" -"3276045360","3276045455","FR","FRA","FRANCE" -"3276045456","3276045463","GB","GBR","UNITED KINGDOM" -"3276045464","3276045479","FR","FRA","FRANCE" -"3276045480","3276045487","GB","GBR","UNITED KINGDOM" -"3276045488","3276045543","FR","FRA","FRANCE" -"3276045544","3276045551","GB","GBR","UNITED KINGDOM" -"3276045552","3276045567","FR","FRA","FRANCE" -"3276045568","3276045599","GB","GBR","UNITED KINGDOM" -"3276045600","3276045631","FR","FRA","FRANCE" -"3276045632","3276045647","GB","GBR","UNITED KINGDOM" -"3276045648","3276045767","FR","FRA","FRANCE" -"3276045768","3276045783","GB","GBR","UNITED KINGDOM" -"3276045784","3276045815","FR","FRA","FRANCE" -"3276045816","3276045823","GB","GBR","UNITED KINGDOM" -"3276045824","3276045919","FR","FRA","FRANCE" -"3276045920","3276045951","GB","GBR","UNITED KINGDOM" -"3276045952","3276046335","FR","FRA","FRANCE" -"3276046336","3276062719","RU","RUS","RUSSIAN FEDERATION" -"3276062720","3276063231","PL","POL","POLAND" -"3276063232","3276063743","FR","FRA","FRANCE" -"3276063744","3276064255","UA","UKR","UKRAINE" -"3276064256","3276064767","DE","DEU","GERMANY" -"3276064768","3276065279","BG","BGR","BULGARIA" -"3276065280","3276065791","UA","UKR","UKRAINE" -"3276065792","3276066303","DE","DEU","GERMANY" -"3276066304","3276066815","GB","GBR","UNITED KINGDOM" -"3276066816","3276067327","PS","PSE","PALESTINIAN TERRITORY, OCCUPIED" -"3276067328","3276067839","UA","UKR","UKRAINE" -"3276067840","3276068351","AT","AUT","AUSTRIA" -"3276068352","3276068863","BG","BGR","BULGARIA" -"3276068864","3276069887","UA","UKR","UKRAINE" -"3276069888","3276070399","GB","GBR","UNITED KINGDOM" -"3276070400","3276070911","UA","UKR","UKRAINE" -"3276070912","3276071423","GB","GBR","UNITED KINGDOM" -"3276071424","3276071935","PL","POL","POLAND" -"3276071936","3276072447","GB","GBR","UNITED KINGDOM" -"3276072448","3276072959","SK","SVK","SLOVAKIA" -"3276072960","3276073471","PL","POL","POLAND" -"3276073472","3276073983","SK","SVK","SLOVAKIA" -"3276073984","3276074495","DE","DEU","GERMANY" -"3276074496","3276075007","GB","GBR","UNITED KINGDOM" -"3276075008","3276075519","RU","RUS","RUSSIAN FEDERATION" -"3276075520","3276076031","DE","DEU","GERMANY" -"3276076032","3276076543","GB","GBR","UNITED KINGDOM" -"3276076544","3276077055","DE","DEU","GERMANY" -"3276077056","3276077567","UA","UKR","UKRAINE" -"3276077568","3276078079","FR","FRA","FRANCE" -"3276078080","3276078591","RU","RUS","RUSSIAN FEDERATION" -"3276078592","3276079103","GB","GBR","UNITED KINGDOM" -"3276079104","3276095487","NO","NOR","NORWAY" -"3276095488","3276096511","RU","RUS","RUSSIAN FEDERATION" -"3276096512","3276097535","IT","ITA","ITALY" -"3276097536","3276098559","NL","NLD","NETHERLANDS" -"3276098560","3276099583","UA","UKR","UKRAINE" -"3276099584","3276100607","PL","POL","POLAND" -"3276100608","3276101631","UA","UKR","UKRAINE" -"3276101632","3276102655","LV","LVA","LATVIA" -"3276102656","3276103679","GB","GBR","UNITED KINGDOM" -"3276103680","3276104703","SI","SVN","SLOVENIA" -"3276104704","3276105727","RU","RUS","RUSSIAN FEDERATION" -"3276105728","3276106751","AT","AUT","AUSTRIA" -"3276106752","3276107775","BG","BGR","BULGARIA" -"3276107776","3276108799","DE","DEU","GERMANY" -"3276108800","3276109823","SE","SWE","SWEDEN" -"3276109824","3276110847","BG","BGR","BULGARIA" -"3276110848","3276111871","PL","POL","POLAND" -"3276111872","3276112895","DK","DNK","DENMARK" -"3276112896","3276114943","UA","UKR","UKRAINE" -"3276114944","3276115967","KW","KWT","KUWAIT" -"3276115968","3276116991","NL","NLD","NETHERLANDS" -"3276116992","3276118015","RU","RUS","RUSSIAN FEDERATION" -"3276118016","3276119039","GB","GBR","UNITED KINGDOM" -"3276119040","3276120063","RU","RUS","RUSSIAN FEDERATION" -"3276120064","3276121087","GB","GBR","UNITED KINGDOM" -"3276121088","3276122111","BG","BGR","BULGARIA" -"3276122112","3276123135","RU","RUS","RUSSIAN FEDERATION" -"3276123136","3276124159","AT","AUT","AUSTRIA" -"3276124160","3276125183","UA","UKR","UKRAINE" -"3276125184","3276126207","AT","AUT","AUSTRIA" -"3276126208","3276127231","UA","UKR","UKRAINE" -"3276127232","3276128255","UZ","UZB","UZBEKISTAN" -"3276128256","3276129279","AT","AUT","AUSTRIA" -"3276129280","3276131327","UA","UKR","UKRAINE" -"3276131328","3276132351","DK","DNK","DENMARK" -"3276132352","3276133375","LB","LBN","LEBANON" -"3276133376","3276134399","GB","GBR","UNITED KINGDOM" -"3276134400","3276135423","RU","RUS","RUSSIAN FEDERATION" -"3276135424","3276136447","UA","UKR","UKRAINE" -"3276136448","3276138495","PL","POL","POLAND" -"3276138496","3276139519","NL","NLD","NETHERLANDS" -"3276140544","3276141567","DE","DEU","GERMANY" -"3276141568","3276143615","UA","UKR","UKRAINE" -"3276143616","3276144639","GB","GBR","UNITED KINGDOM" -"3276144640","3276152831","CH","CHE","SWITZERLAND" -"3276152832","3276161023","HU","HUN","HUNGARY" -"3276161024","3276169215","GB","GBR","UNITED KINGDOM" -"3276169216","3276177407","AT","AUT","AUSTRIA" -"3276177408","3276185599","CZ","CZE","CZECH REPUBLIC" -"3276185600","3276193791","NO","NOR","NORWAY" -"3276193792","3276201983","RU","RUS","RUSSIAN FEDERATION" -"3276201984","3276210175","AT","AUT","AUSTRIA" -"3276210176","3276227607","DE","DEU","GERMANY" -"3276227608","3276227615","MT","MLT","MALTA" -"3276227616","3276227727","DE","DEU","GERMANY" -"3276227728","3276227743","MT","MLT","MALTA" -"3276227744","3276234303","DE","DEU","GERMANY" -"3276234304","3276234367","GB","GBR","UNITED KINGDOM" -"3276234368","3276235519","DE","DEU","GERMANY" -"3276235520","3276235583","NL","NLD","NETHERLANDS" -"3276235584","3276241759","DE","DEU","GERMANY" -"3276241760","3276241767","FR","FRA","FRANCE" -"3276241768","3276242871","DE","DEU","GERMANY" -"3276242872","3276242879","NL","NLD","NETHERLANDS" -"3276242880","3276244351","DE","DEU","GERMANY" -"3276244352","3276244367","NL","NLD","NETHERLANDS" -"3276244368","3276244447","DE","DEU","GERMANY" -"3276244448","3276244479","RO","ROM","ROMANIA" -"3276244480","3276249279","DE","DEU","GERMANY" -"3276249280","3276249287","FR","FRA","FRANCE" -"3276249288","3276249855","DE","DEU","GERMANY" -"3276249856","3276249983","GB","GBR","UNITED KINGDOM" -"3276249984","3276250079","DE","DEU","GERMANY" -"3276250080","3276250095","FR","FRA","FRANCE" -"3276250096","3276275711","DE","DEU","GERMANY" -"3276275712","3276283903","SK","SVK","SLOVAKIA" -"3276283904","3276292095","GB","GBR","UNITED KINGDOM" -"3276292096","3276292479","BE","BEL","BELGIUM" -"3276292480","3276292511","LU","LUX","LUXEMBOURG" -"3276292512","3276299295","BE","BEL","BELGIUM" -"3276299296","3276299327","CH","CHE","SWITZERLAND" -"3276299328","3276300287","BE","BEL","BELGIUM" -"3276300288","3276304383","DE","DEU","GERMANY" -"3276304384","3276304639","BG","BGR","BULGARIA" -"3276304640","3276305407","GB","GBR","UNITED KINGDOM" -"3276305408","3276308479","IL","ISR","ISRAEL" -"3276308480","3276309503","GB","GBR","UNITED KINGDOM" -"3276309504","3276310527","AT","AUT","AUSTRIA" -"3276310528","3276311551","PT","PRT","PORTUGAL" -"3276311552","3276312575","RU","RUS","RUSSIAN FEDERATION" -"3276312576","3276313599","UA","UKR","UKRAINE" -"3276313600","3276314623","PL","POL","POLAND" -"3276314624","3276315647","FR","FRA","FRANCE" -"3276315648","3276316671","UA","UKR","UKRAINE" -"3276316672","3276324863","GB","GBR","UNITED KINGDOM" -"3276324864","3276333055","IT","ITA","ITALY" -"3276333056","3276341247","RU","RUS","RUSSIAN FEDERATION" -"3276341248","3276341263","NL","NLD","NETHERLANDS" -"3276341264","3276341279","DE","DEU","GERMANY" -"3276341280","3276341535","NL","NLD","NETHERLANDS" -"3276341536","3276341543","DE","DEU","GERMANY" -"3276341544","3276341655","NL","NLD","NETHERLANDS" -"3276341656","3276341663","DE","DEU","GERMANY" -"3276341664","3276341679","NL","NLD","NETHERLANDS" -"3276341680","3276341695","DE","DEU","GERMANY" -"3276341696","3276341735","NL","NLD","NETHERLANDS" -"3276341736","3276341743","DE","DEU","GERMANY" -"3276341744","3276341767","NL","NLD","NETHERLANDS" -"3276341768","3276341775","DE","DEU","GERMANY" -"3276341776","3276341823","NL","NLD","NETHERLANDS" -"3276341824","3276341831","DE","DEU","GERMANY" -"3276341832","3276341879","NL","NLD","NETHERLANDS" -"3276341880","3276341887","DE","DEU","GERMANY" -"3276341888","3276341975","NL","NLD","NETHERLANDS" -"3276341976","3276341983","DE","DEU","GERMANY" -"3276341984","3276342119","NL","NLD","NETHERLANDS" -"3276342120","3276342127","DE","DEU","GERMANY" -"3276342128","3276342191","NL","NLD","NETHERLANDS" -"3276342192","3276342199","DE","DEU","GERMANY" -"3276342200","3276342247","NL","NLD","NETHERLANDS" -"3276342248","3276342255","DE","DEU","GERMANY" -"3276342256","3276342383","NL","NLD","NETHERLANDS" -"3276342384","3276342391","DE","DEU","GERMANY" -"3276342392","3276342495","NL","NLD","NETHERLANDS" -"3276342496","3276342503","DE","DEU","GERMANY" -"3276342504","3276342535","NL","NLD","NETHERLANDS" -"3276342536","3276342551","DE","DEU","GERMANY" -"3276342552","3276342583","NL","NLD","NETHERLANDS" -"3276342584","3276342591","DE","DEU","GERMANY" -"3276342592","3276342671","NL","NLD","NETHERLANDS" -"3276342672","3276342679","DE","DEU","GERMANY" -"3276342680","3276342703","NL","NLD","NETHERLANDS" -"3276342704","3276342719","DE","DEU","GERMANY" -"3276342720","3276342767","NL","NLD","NETHERLANDS" -"3276342768","3276342783","DE","DEU","GERMANY" -"3276342784","3276342831","NL","NLD","NETHERLANDS" -"3276342832","3276342839","DE","DEU","GERMANY" -"3276342840","3276342847","NL","NLD","NETHERLANDS" -"3276342848","3276342863","DE","DEU","GERMANY" -"3276342864","3276342991","NL","NLD","NETHERLANDS" -"3276342992","3276342999","DE","DEU","GERMANY" -"3276343000","3276343039","NL","NLD","NETHERLANDS" -"3276343040","3276343047","DE","DEU","GERMANY" -"3276343048","3276343055","NL","NLD","NETHERLANDS" -"3276343056","3276343063","DE","DEU","GERMANY" -"3276343064","3276343071","NL","NLD","NETHERLANDS" -"3276343072","3276343079","DE","DEU","GERMANY" -"3276343080","3276343087","NL","NLD","NETHERLANDS" -"3276343088","3276343095","DE","DEU","GERMANY" -"3276343096","3276343231","NL","NLD","NETHERLANDS" -"3276343232","3276343239","DE","DEU","GERMANY" -"3276343240","3276343247","NL","NLD","NETHERLANDS" -"3276343248","3276343255","DE","DEU","GERMANY" -"3276343256","3276343287","NL","NLD","NETHERLANDS" -"3276343288","3276343295","DE","DEU","GERMANY" -"3276343296","3276343359","NL","NLD","NETHERLANDS" -"3276343360","3276343367","DE","DEU","GERMANY" -"3276343368","3276343391","NL","NLD","NETHERLANDS" -"3276343392","3276343399","DE","DEU","GERMANY" -"3276343400","3276343423","NL","NLD","NETHERLANDS" -"3276343424","3276343447","DE","DEU","GERMANY" -"3276343448","3276343463","NL","NLD","NETHERLANDS" -"3276343464","3276343479","DE","DEU","GERMANY" -"3276343480","3276343487","NL","NLD","NETHERLANDS" -"3276343488","3276343495","DE","DEU","GERMANY" -"3276343496","3276343511","NL","NLD","NETHERLANDS" -"3276343512","3276343519","DE","DEU","GERMANY" -"3276343520","3276343551","NL","NLD","NETHERLANDS" -"3276343552","3276343815","DE","DEU","GERMANY" -"3276343816","3276343831","NL","NLD","NETHERLANDS" -"3276343832","3276343839","DE","DEU","GERMANY" -"3276343840","3276343871","NL","NLD","NETHERLANDS" -"3276343872","3276343879","DE","DEU","GERMANY" -"3276343880","3276343903","NL","NLD","NETHERLANDS" -"3276343904","3276343911","DE","DEU","GERMANY" -"3276343912","3276344047","NL","NLD","NETHERLANDS" -"3276344048","3276344055","DE","DEU","GERMANY" -"3276344056","3276344063","NL","NLD","NETHERLANDS" -"3276344064","3276344071","DE","DEU","GERMANY" -"3276344072","3276344111","NL","NLD","NETHERLANDS" -"3276344112","3276344119","DE","DEU","GERMANY" -"3276344120","3276344215","NL","NLD","NETHERLANDS" -"3276344216","3276344223","DE","DEU","GERMANY" -"3276344224","3276344303","NL","NLD","NETHERLANDS" -"3276344304","3276344319","DE","DEU","GERMANY" -"3276344320","3276344391","NL","NLD","NETHERLANDS" -"3276344392","3276344399","DE","DEU","GERMANY" -"3276344400","3276344415","NL","NLD","NETHERLANDS" -"3276344416","3276344423","DE","DEU","GERMANY" -"3276344424","3276344471","NL","NLD","NETHERLANDS" -"3276344472","3276344479","DE","DEU","GERMANY" -"3276344480","3276344551","NL","NLD","NETHERLANDS" -"3276344552","3276344559","DE","DEU","GERMANY" -"3276344560","3276344575","NL","NLD","NETHERLANDS" -"3276344576","3276344583","DE","DEU","GERMANY" -"3276344584","3276344623","NL","NLD","NETHERLANDS" -"3276344624","3276344631","DE","DEU","GERMANY" -"3276344632","3276344663","NL","NLD","NETHERLANDS" -"3276344664","3276344671","DE","DEU","GERMANY" -"3276344672","3276344711","NL","NLD","NETHERLANDS" -"3276344712","3276344719","DE","DEU","GERMANY" -"3276344720","3276344727","NL","NLD","NETHERLANDS" -"3276344728","3276344759","DE","DEU","GERMANY" -"3276344760","3276344799","NL","NLD","NETHERLANDS" -"3276344800","3276344807","DE","DEU","GERMANY" -"3276344808","3276344895","NL","NLD","NETHERLANDS" -"3276344896","3276344903","DE","DEU","GERMANY" -"3276344904","3276344983","NL","NLD","NETHERLANDS" -"3276344984","3276344991","DE","DEU","GERMANY" -"3276344992","3276345007","NL","NLD","NETHERLANDS" -"3276345008","3276345015","DE","DEU","GERMANY" -"3276345016","3276345063","NL","NLD","NETHERLANDS" -"3276345064","3276345071","DE","DEU","GERMANY" -"3276345072","3276345223","NL","NLD","NETHERLANDS" -"3276345224","3276345231","DE","DEU","GERMANY" -"3276345232","3276345295","NL","NLD","NETHERLANDS" -"3276345296","3276345303","DE","DEU","GERMANY" -"3276345304","3276345327","NL","NLD","NETHERLANDS" -"3276345328","3276345335","DE","DEU","GERMANY" -"3276345336","3276345343","NL","NLD","NETHERLANDS" -"3276345344","3276345359","DE","DEU","GERMANY" -"3276345360","3276345415","NL","NLD","NETHERLANDS" -"3276345416","3276345423","DE","DEU","GERMANY" -"3276345424","3276345647","NL","NLD","NETHERLANDS" -"3276345648","3276345655","DE","DEU","GERMANY" -"3276345656","3276345727","NL","NLD","NETHERLANDS" -"3276345728","3276345735","DE","DEU","GERMANY" -"3276345736","3276345767","NL","NLD","NETHERLANDS" -"3276345768","3276345783","DE","DEU","GERMANY" -"3276345784","3276345823","NL","NLD","NETHERLANDS" -"3276345824","3276345831","DE","DEU","GERMANY" -"3276345832","3276345839","NL","NLD","NETHERLANDS" -"3276345840","3276345847","DE","DEU","GERMANY" -"3276345848","3276345863","NL","NLD","NETHERLANDS" -"3276345864","3276345871","DE","DEU","GERMANY" -"3276345872","3276345927","NL","NLD","NETHERLANDS" -"3276345928","3276345935","DE","DEU","GERMANY" -"3276345936","3276346167","NL","NLD","NETHERLANDS" -"3276346168","3276346175","DE","DEU","GERMANY" -"3276346176","3276346207","NL","NLD","NETHERLANDS" -"3276346208","3276346215","DE","DEU","GERMANY" -"3276346216","3276346223","NL","NLD","NETHERLANDS" -"3276346224","3276346231","DE","DEU","GERMANY" -"3276346232","3276346295","NL","NLD","NETHERLANDS" -"3276346296","3276346303","DE","DEU","GERMANY" -"3276346304","3276346359","NL","NLD","NETHERLANDS" -"3276346360","3276346375","DE","DEU","GERMANY" -"3276346376","3276346655","NL","NLD","NETHERLANDS" -"3276346656","3276346663","DE","DEU","GERMANY" -"3276346664","3276346703","NL","NLD","NETHERLANDS" -"3276346704","3276346711","DE","DEU","GERMANY" -"3276346712","3276346727","NL","NLD","NETHERLANDS" -"3276346728","3276346735","DE","DEU","GERMANY" -"3276346736","3276346839","NL","NLD","NETHERLANDS" -"3276346840","3276346847","DE","DEU","GERMANY" -"3276346848","3276346879","NL","NLD","NETHERLANDS" -"3276346880","3276346887","DE","DEU","GERMANY" -"3276346888","3276346951","NL","NLD","NETHERLANDS" -"3276346952","3276346959","DE","DEU","GERMANY" -"3276346960","3276347039","NL","NLD","NETHERLANDS" -"3276347040","3276347047","DE","DEU","GERMANY" -"3276347048","3276347111","NL","NLD","NETHERLANDS" -"3276347112","3276347127","DE","DEU","GERMANY" -"3276347128","3276347135","NL","NLD","NETHERLANDS" -"3276347136","3276347143","DE","DEU","GERMANY" -"3276347144","3276347159","NL","NLD","NETHERLANDS" -"3276347160","3276347167","DE","DEU","GERMANY" -"3276347168","3276347207","NL","NLD","NETHERLANDS" -"3276347208","3276347215","DE","DEU","GERMANY" -"3276347216","3276347327","NL","NLD","NETHERLANDS" -"3276347328","3276347335","DE","DEU","GERMANY" -"3276347336","3276347391","NL","NLD","NETHERLANDS" -"3276347392","3276347399","DE","DEU","GERMANY" -"3276347400","3276347543","NL","NLD","NETHERLANDS" -"3276347544","3276347551","DE","DEU","GERMANY" -"3276347552","3276347655","NL","NLD","NETHERLANDS" -"3276347656","3276347663","DE","DEU","GERMANY" -"3276347664","3276347759","NL","NLD","NETHERLANDS" -"3276347760","3276347767","DE","DEU","GERMANY" -"3276347768","3276347847","NL","NLD","NETHERLANDS" -"3276347848","3276347855","DE","DEU","GERMANY" -"3276347856","3276347903","NL","NLD","NETHERLANDS" -"3276347904","3276347911","DE","DEU","GERMANY" -"3276347912","3276347959","NL","NLD","NETHERLANDS" -"3276347960","3276347967","DE","DEU","GERMANY" -"3276347968","3276347991","NL","NLD","NETHERLANDS" -"3276347992","3276347999","DE","DEU","GERMANY" -"3276348000","3276348015","NL","NLD","NETHERLANDS" -"3276348016","3276348023","DE","DEU","GERMANY" -"3276348024","3276348063","NL","NLD","NETHERLANDS" -"3276348064","3276348071","DE","DEU","GERMANY" -"3276348072","3276348111","NL","NLD","NETHERLANDS" -"3276348112","3276348119","DE","DEU","GERMANY" -"3276348120","3276348127","NL","NLD","NETHERLANDS" -"3276348128","3276348135","DE","DEU","GERMANY" -"3276348136","3276348151","NL","NLD","NETHERLANDS" -"3276348152","3276348167","DE","DEU","GERMANY" -"3276348168","3276348183","NL","NLD","NETHERLANDS" -"3276348184","3276348191","DE","DEU","GERMANY" -"3276348192","3276348199","NL","NLD","NETHERLANDS" -"3276348200","3276348223","DE","DEU","GERMANY" -"3276348224","3276348231","NL","NLD","NETHERLANDS" -"3276348232","3276348239","DE","DEU","GERMANY" -"3276348240","3276348295","NL","NLD","NETHERLANDS" -"3276348296","3276348303","DE","DEU","GERMANY" -"3276348304","3276348319","NL","NLD","NETHERLANDS" -"3276348320","3276348327","DE","DEU","GERMANY" -"3276348328","3276348343","NL","NLD","NETHERLANDS" -"3276348344","3276348351","DE","DEU","GERMANY" -"3276348352","3276348431","NL","NLD","NETHERLANDS" -"3276348432","3276348439","DE","DEU","GERMANY" -"3276348440","3276348455","NL","NLD","NETHERLANDS" -"3276348456","3276348463","DE","DEU","GERMANY" -"3276348464","3276348511","NL","NLD","NETHERLANDS" -"3276348512","3276348519","DE","DEU","GERMANY" -"3276348520","3276348623","NL","NLD","NETHERLANDS" -"3276348624","3276348631","DE","DEU","GERMANY" -"3276348632","3276348679","NL","NLD","NETHERLANDS" -"3276348680","3276348687","DE","DEU","GERMANY" -"3276348688","3276348719","NL","NLD","NETHERLANDS" -"3276348720","3276348751","DE","DEU","GERMANY" -"3276348752","3276348767","NL","NLD","NETHERLANDS" -"3276348768","3276348775","DE","DEU","GERMANY" -"3276348776","3276348839","NL","NLD","NETHERLANDS" -"3276348840","3276348847","DE","DEU","GERMANY" -"3276348848","3276349063","NL","NLD","NETHERLANDS" -"3276349064","3276349071","DE","DEU","GERMANY" -"3276349072","3276349135","NL","NLD","NETHERLANDS" -"3276349136","3276349143","DE","DEU","GERMANY" -"3276349144","3276349167","NL","NLD","NETHERLANDS" -"3276349168","3276349175","DE","DEU","GERMANY" -"3276349176","3276349199","NL","NLD","NETHERLANDS" -"3276349200","3276349207","DE","DEU","GERMANY" -"3276349208","3276349215","NL","NLD","NETHERLANDS" -"3276349216","3276349223","DE","DEU","GERMANY" -"3276349224","3276349679","NL","NLD","NETHERLANDS" -"3276349680","3276349687","DE","DEU","GERMANY" -"3276349688","3276349831","NL","NLD","NETHERLANDS" -"3276349832","3276349839","DE","DEU","GERMANY" -"3276349840","3276349871","NL","NLD","NETHERLANDS" -"3276349872","3276349879","DE","DEU","GERMANY" -"3276349880","3276349903","NL","NLD","NETHERLANDS" -"3276349904","3276349911","DE","DEU","GERMANY" -"3276349912","3276349991","NL","NLD","NETHERLANDS" -"3276349992","3276349999","DE","DEU","GERMANY" -"3276350000","3276350031","NL","NLD","NETHERLANDS" -"3276350032","3276350047","DE","DEU","GERMANY" -"3276350048","3276350191","NL","NLD","NETHERLANDS" -"3276350192","3276350199","DE","DEU","GERMANY" -"3276350200","3276350207","NL","NLD","NETHERLANDS" -"3276350208","3276350215","DE","DEU","GERMANY" -"3276350216","3276350239","NL","NLD","NETHERLANDS" -"3276350240","3276350247","DE","DEU","GERMANY" -"3276350248","3276350287","NL","NLD","NETHERLANDS" -"3276350288","3276350295","DE","DEU","GERMANY" -"3276350296","3276350455","NL","NLD","NETHERLANDS" -"3276350456","3276350463","DE","DEU","GERMANY" -"3276350464","3276350519","NL","NLD","NETHERLANDS" -"3276350520","3276350527","DE","DEU","GERMANY" -"3276350528","3276350639","NL","NLD","NETHERLANDS" -"3276350640","3276350647","DE","DEU","GERMANY" -"3276350648","3276350671","NL","NLD","NETHERLANDS" -"3276350672","3276350679","DE","DEU","GERMANY" -"3276350680","3276350687","NL","NLD","NETHERLANDS" -"3276350688","3276350695","DE","DEU","GERMANY" -"3276350696","3276350959","NL","NLD","NETHERLANDS" -"3276350960","3276350967","DE","DEU","GERMANY" -"3276350968","3276350975","NL","NLD","NETHERLANDS" -"3276350976","3276350983","DE","DEU","GERMANY" -"3276350984","3276351007","NL","NLD","NETHERLANDS" -"3276351008","3276351015","DE","DEU","GERMANY" -"3276351016","3276351095","NL","NLD","NETHERLANDS" -"3276351096","3276351103","DE","DEU","GERMANY" -"3276351104","3276351119","NL","NLD","NETHERLANDS" -"3276351120","3276351135","DE","DEU","GERMANY" -"3276351136","3276351191","NL","NLD","NETHERLANDS" -"3276351192","3276351199","DE","DEU","GERMANY" -"3276351200","3276351215","NL","NLD","NETHERLANDS" -"3276351216","3276351223","DE","DEU","GERMANY" -"3276351224","3276351255","NL","NLD","NETHERLANDS" -"3276351256","3276351263","DE","DEU","GERMANY" -"3276351264","3276351311","NL","NLD","NETHERLANDS" -"3276351312","3276351319","DE","DEU","GERMANY" -"3276351320","3276351383","NL","NLD","NETHERLANDS" -"3276351384","3276351391","DE","DEU","GERMANY" -"3276351392","3276351535","NL","NLD","NETHERLANDS" -"3276351536","3276351543","DE","DEU","GERMANY" -"3276351544","3276351559","NL","NLD","NETHERLANDS" -"3276351560","3276351567","DE","DEU","GERMANY" -"3276351568","3276351575","NL","NLD","NETHERLANDS" -"3276351576","3276351583","DE","DEU","GERMANY" -"3276351584","3276351591","NL","NLD","NETHERLANDS" -"3276351592","3276351599","DE","DEU","GERMANY" -"3276351600","3276351607","NL","NLD","NETHERLANDS" -"3276351608","3276351623","DE","DEU","GERMANY" -"3276351624","3276351647","NL","NLD","NETHERLANDS" -"3276351648","3276351655","DE","DEU","GERMANY" -"3276351656","3276351703","NL","NLD","NETHERLANDS" -"3276351704","3276351711","DE","DEU","GERMANY" -"3276351712","3276351727","NL","NLD","NETHERLANDS" -"3276351728","3276351735","DE","DEU","GERMANY" -"3276351736","3276351775","NL","NLD","NETHERLANDS" -"3276351776","3276351783","DE","DEU","GERMANY" -"3276351784","3276351791","NL","NLD","NETHERLANDS" -"3276351792","3276351799","DE","DEU","GERMANY" -"3276351800","3276351807","NL","NLD","NETHERLANDS" -"3276351808","3276351815","DE","DEU","GERMANY" -"3276351816","3276351879","NL","NLD","NETHERLANDS" -"3276351880","3276351887","DE","DEU","GERMANY" -"3276351888","3276351967","NL","NLD","NETHERLANDS" -"3276351968","3276351975","DE","DEU","GERMANY" -"3276351976","3276352167","NL","NLD","NETHERLANDS" -"3276352168","3276352175","DE","DEU","GERMANY" -"3276352176","3276352279","NL","NLD","NETHERLANDS" -"3276352280","3276352287","DE","DEU","GERMANY" -"3276352288","3276352335","NL","NLD","NETHERLANDS" -"3276352336","3276352343","DE","DEU","GERMANY" -"3276352344","3276352399","NL","NLD","NETHERLANDS" -"3276352400","3276352407","DE","DEU","GERMANY" -"3276352408","3276352511","NL","NLD","NETHERLANDS" -"3276352512","3276352519","DE","DEU","GERMANY" -"3276352520","3276352655","NL","NLD","NETHERLANDS" -"3276352656","3276352663","DE","DEU","GERMANY" -"3276352664","3276352695","NL","NLD","NETHERLANDS" -"3276352696","3276352703","DE","DEU","GERMANY" -"3276352704","3276352767","NL","NLD","NETHERLANDS" -"3276352768","3276352775","DE","DEU","GERMANY" -"3276352776","3276352783","NL","NLD","NETHERLANDS" -"3276352784","3276352791","DE","DEU","GERMANY" -"3276352792","3276352831","NL","NLD","NETHERLANDS" -"3276352832","3276352839","DE","DEU","GERMANY" -"3276352840","3276352911","NL","NLD","NETHERLANDS" -"3276352912","3276352935","DE","DEU","GERMANY" -"3276352936","3276352943","NL","NLD","NETHERLANDS" -"3276352944","3276352951","DE","DEU","GERMANY" -"3276352952","3276352959","NL","NLD","NETHERLANDS" -"3276352960","3276352967","DE","DEU","GERMANY" -"3276352968","3276353039","NL","NLD","NETHERLANDS" -"3276353040","3276353047","DE","DEU","GERMANY" -"3276353048","3276353079","NL","NLD","NETHERLANDS" -"3276353080","3276353087","DE","DEU","GERMANY" -"3276353088","3276353143","NL","NLD","NETHERLANDS" -"3276353144","3276353151","DE","DEU","GERMANY" -"3276353152","3276353207","NL","NLD","NETHERLANDS" -"3276353208","3276353215","DE","DEU","GERMANY" -"3276353216","3276353295","NL","NLD","NETHERLANDS" -"3276353296","3276353303","DE","DEU","GERMANY" -"3276353304","3276353343","NL","NLD","NETHERLANDS" -"3276353344","3276353351","DE","DEU","GERMANY" -"3276353352","3276353359","NL","NLD","NETHERLANDS" -"3276353360","3276353367","DE","DEU","GERMANY" -"3276353368","3276353655","NL","NLD","NETHERLANDS" -"3276353656","3276353663","DE","DEU","GERMANY" -"3276353664","3276353687","NL","NLD","NETHERLANDS" -"3276353688","3276353695","DE","DEU","GERMANY" -"3276353696","3276353711","NL","NLD","NETHERLANDS" -"3276353712","3276353719","DE","DEU","GERMANY" -"3276353720","3276353799","NL","NLD","NETHERLANDS" -"3276353800","3276353807","DE","DEU","GERMANY" -"3276353808","3276353927","NL","NLD","NETHERLANDS" -"3276353928","3276353935","DE","DEU","GERMANY" -"3276353936","3276354095","NL","NLD","NETHERLANDS" -"3276354096","3276354103","DE","DEU","GERMANY" -"3276354104","3276354183","NL","NLD","NETHERLANDS" -"3276354184","3276354191","DE","DEU","GERMANY" -"3276354192","3276354207","NL","NLD","NETHERLANDS" -"3276354208","3276354223","DE","DEU","GERMANY" -"3276354224","3276354255","NL","NLD","NETHERLANDS" -"3276354256","3276354263","DE","DEU","GERMANY" -"3276354264","3276354327","NL","NLD","NETHERLANDS" -"3276354328","3276354335","DE","DEU","GERMANY" -"3276354336","3276354343","NL","NLD","NETHERLANDS" -"3276354344","3276354351","DE","DEU","GERMANY" -"3276354352","3276354415","NL","NLD","NETHERLANDS" -"3276354416","3276354423","DE","DEU","GERMANY" -"3276354424","3276354623","NL","NLD","NETHERLANDS" -"3276354624","3276354639","DE","DEU","GERMANY" -"3276354640","3276354647","NL","NLD","NETHERLANDS" -"3276354648","3276354655","DE","DEU","GERMANY" -"3276354656","3276354735","NL","NLD","NETHERLANDS" -"3276354736","3276354743","DE","DEU","GERMANY" -"3276354744","3276354831","NL","NLD","NETHERLANDS" -"3276354832","3276354847","DE","DEU","GERMANY" -"3276354848","3276354855","NL","NLD","NETHERLANDS" -"3276354856","3276354879","DE","DEU","GERMANY" -"3276354880","3276354887","NL","NLD","NETHERLANDS" -"3276354888","3276354895","DE","DEU","GERMANY" -"3276354896","3276354903","NL","NLD","NETHERLANDS" -"3276354904","3276354911","DE","DEU","GERMANY" -"3276354912","3276354967","NL","NLD","NETHERLANDS" -"3276354968","3276354975","DE","DEU","GERMANY" -"3276354976","3276354999","NL","NLD","NETHERLANDS" -"3276355000","3276355007","DE","DEU","GERMANY" -"3276355008","3276355063","NL","NLD","NETHERLANDS" -"3276355064","3276355071","DE","DEU","GERMANY" -"3276355072","3276355183","NL","NLD","NETHERLANDS" -"3276355184","3276355191","DE","DEU","GERMANY" -"3276355192","3276355263","NL","NLD","NETHERLANDS" -"3276355264","3276355271","DE","DEU","GERMANY" -"3276355272","3276355367","NL","NLD","NETHERLANDS" -"3276355368","3276355383","DE","DEU","GERMANY" -"3276355384","3276355399","NL","NLD","NETHERLANDS" -"3276355400","3276355407","DE","DEU","GERMANY" -"3276355408","3276355439","NL","NLD","NETHERLANDS" -"3276355440","3276355447","DE","DEU","GERMANY" -"3276355448","3276355543","NL","NLD","NETHERLANDS" -"3276355544","3276355559","DE","DEU","GERMANY" -"3276355560","3276355647","NL","NLD","NETHERLANDS" -"3276355648","3276355655","DE","DEU","GERMANY" -"3276355656","3276355663","NL","NLD","NETHERLANDS" -"3276355664","3276355671","DE","DEU","GERMANY" -"3276355672","3276355783","NL","NLD","NETHERLANDS" -"3276355784","3276355791","DE","DEU","GERMANY" -"3276355792","3276355847","NL","NLD","NETHERLANDS" -"3276355848","3276355855","DE","DEU","GERMANY" -"3276355856","3276356063","NL","NLD","NETHERLANDS" -"3276356064","3276356071","DE","DEU","GERMANY" -"3276356072","3276356135","NL","NLD","NETHERLANDS" -"3276356136","3276356143","DE","DEU","GERMANY" -"3276356144","3276356207","NL","NLD","NETHERLANDS" -"3276356208","3276356215","DE","DEU","GERMANY" -"3276356216","3276356279","NL","NLD","NETHERLANDS" -"3276356280","3276356295","DE","DEU","GERMANY" -"3276356296","3276356311","NL","NLD","NETHERLANDS" -"3276356312","3276356319","DE","DEU","GERMANY" -"3276356320","3276356351","NL","NLD","NETHERLANDS" -"3276356352","3276356607","DE","DEU","GERMANY" -"3276356608","3276356623","NL","NLD","NETHERLANDS" -"3276356624","3276356631","DE","DEU","GERMANY" -"3276356632","3276356647","NL","NLD","NETHERLANDS" -"3276356648","3276356655","DE","DEU","GERMANY" -"3276356656","3276356775","NL","NLD","NETHERLANDS" -"3276356776","3276356783","DE","DEU","GERMANY" -"3276356784","3276356799","NL","NLD","NETHERLANDS" -"3276356800","3276356807","DE","DEU","GERMANY" -"3276356808","3276356911","NL","NLD","NETHERLANDS" -"3276356912","3276356927","DE","DEU","GERMANY" -"3276356928","3276356935","NL","NLD","NETHERLANDS" -"3276356936","3276356943","DE","DEU","GERMANY" -"3276356944","3276357015","NL","NLD","NETHERLANDS" -"3276357016","3276357023","DE","DEU","GERMANY" -"3276357024","3276357175","NL","NLD","NETHERLANDS" -"3276357176","3276357183","DE","DEU","GERMANY" -"3276357184","3276357279","NL","NLD","NETHERLANDS" -"3276357280","3276357287","DE","DEU","GERMANY" -"3276357288","3276357295","NL","NLD","NETHERLANDS" -"3276357296","3276357303","DE","DEU","GERMANY" -"3276357304","3276357319","NL","NLD","NETHERLANDS" -"3276357320","3276357327","DE","DEU","GERMANY" -"3276357328","3276357343","NL","NLD","NETHERLANDS" -"3276357344","3276357351","DE","DEU","GERMANY" -"3276357352","3276357383","NL","NLD","NETHERLANDS" -"3276357384","3276357391","DE","DEU","GERMANY" -"3276357392","3276357415","NL","NLD","NETHERLANDS" -"3276357416","3276357423","DE","DEU","GERMANY" -"3276357424","3276357447","NL","NLD","NETHERLANDS" -"3276357448","3276357455","DE","DEU","GERMANY" -"3276357456","3276357503","NL","NLD","NETHERLANDS" -"3276357504","3276357519","DE","DEU","GERMANY" -"3276357520","3276357543","NL","NLD","NETHERLANDS" -"3276357544","3276357551","DE","DEU","GERMANY" -"3276357552","3276357655","NL","NLD","NETHERLANDS" -"3276357656","3276357663","DE","DEU","GERMANY" -"3276357664","3276357783","NL","NLD","NETHERLANDS" -"3276357784","3276357791","DE","DEU","GERMANY" -"3276357792","3276357831","NL","NLD","NETHERLANDS" -"3276357832","3276357847","DE","DEU","GERMANY" -"3276357848","3276357903","NL","NLD","NETHERLANDS" -"3276357904","3276357911","DE","DEU","GERMANY" -"3276357912","3276357927","NL","NLD","NETHERLANDS" -"3276357928","3276357935","DE","DEU","GERMANY" -"3276357936","3276358111","NL","NLD","NETHERLANDS" -"3276358112","3276358127","DE","DEU","GERMANY" -"3276358128","3276358199","NL","NLD","NETHERLANDS" -"3276358200","3276358207","DE","DEU","GERMANY" -"3276358208","3276358215","NL","NLD","NETHERLANDS" -"3276358216","3276358223","DE","DEU","GERMANY" -"3276358224","3276358239","NL","NLD","NETHERLANDS" -"3276358240","3276358247","DE","DEU","GERMANY" -"3276358248","3276358279","NL","NLD","NETHERLANDS" -"3276358280","3276358295","DE","DEU","GERMANY" -"3276358296","3276358335","NL","NLD","NETHERLANDS" -"3276358336","3276358343","DE","DEU","GERMANY" -"3276358344","3276358471","NL","NLD","NETHERLANDS" -"3276358472","3276358479","DE","DEU","GERMANY" -"3276358480","3276358495","NL","NLD","NETHERLANDS" -"3276358496","3276358503","DE","DEU","GERMANY" -"3276358504","3276358591","NL","NLD","NETHERLANDS" -"3276358592","3276358599","DE","DEU","GERMANY" -"3276358600","3276358607","NL","NLD","NETHERLANDS" -"3276358608","3276358615","DE","DEU","GERMANY" -"3276358616","3276358631","NL","NLD","NETHERLANDS" -"3276358632","3276358647","DE","DEU","GERMANY" -"3276358648","3276358743","NL","NLD","NETHERLANDS" -"3276358744","3276358759","DE","DEU","GERMANY" -"3276358760","3276358775","NL","NLD","NETHERLANDS" -"3276358776","3276358783","DE","DEU","GERMANY" -"3276358784","3276358791","NL","NLD","NETHERLANDS" -"3276358792","3276358807","DE","DEU","GERMANY" -"3276358808","3276358903","NL","NLD","NETHERLANDS" -"3276358904","3276358911","DE","DEU","GERMANY" -"3276358912","3276358927","NL","NLD","NETHERLANDS" -"3276358928","3276358935","DE","DEU","GERMANY" -"3276358936","3276358951","NL","NLD","NETHERLANDS" -"3276358952","3276358959","DE","DEU","GERMANY" -"3276358960","3276359047","NL","NLD","NETHERLANDS" -"3276359048","3276359055","DE","DEU","GERMANY" -"3276359056","3276359135","NL","NLD","NETHERLANDS" -"3276359136","3276359143","DE","DEU","GERMANY" -"3276359144","3276359167","NL","NLD","NETHERLANDS" -"3276359168","3276359175","DE","DEU","GERMANY" -"3276359176","3276359383","NL","NLD","NETHERLANDS" -"3276359384","3276359391","DE","DEU","GERMANY" -"3276359392","3276359439","NL","NLD","NETHERLANDS" -"3276359440","3276359447","DE","DEU","GERMANY" -"3276359448","3276359511","NL","NLD","NETHERLANDS" -"3276359512","3276359519","DE","DEU","GERMANY" -"3276359520","3276359607","NL","NLD","NETHERLANDS" -"3276359608","3276359615","DE","DEU","GERMANY" -"3276359616","3276359703","NL","NLD","NETHERLANDS" -"3276359704","3276359711","DE","DEU","GERMANY" -"3276359712","3276359727","NL","NLD","NETHERLANDS" -"3276359728","3276359735","DE","DEU","GERMANY" -"3276359736","3276359751","NL","NLD","NETHERLANDS" -"3276359752","3276359759","DE","DEU","GERMANY" -"3276359760","3276359783","NL","NLD","NETHERLANDS" -"3276359784","3276359791","DE","DEU","GERMANY" -"3276359792","3276359807","NL","NLD","NETHERLANDS" -"3276359808","3276359815","DE","DEU","GERMANY" -"3276359816","3276359839","NL","NLD","NETHERLANDS" -"3276359840","3276359847","DE","DEU","GERMANY" -"3276359848","3276359919","NL","NLD","NETHERLANDS" -"3276359920","3276359927","DE","DEU","GERMANY" -"3276359928","3276360007","NL","NLD","NETHERLANDS" -"3276360008","3276360015","DE","DEU","GERMANY" -"3276360016","3276360055","NL","NLD","NETHERLANDS" -"3276360056","3276360063","DE","DEU","GERMANY" -"3276360064","3276360087","NL","NLD","NETHERLANDS" -"3276360088","3276360095","DE","DEU","GERMANY" -"3276360096","3276360111","NL","NLD","NETHERLANDS" -"3276360112","3276360119","DE","DEU","GERMANY" -"3276360120","3276360175","NL","NLD","NETHERLANDS" -"3276360176","3276360183","DE","DEU","GERMANY" -"3276360184","3276360199","NL","NLD","NETHERLANDS" -"3276360200","3276360207","DE","DEU","GERMANY" -"3276360208","3276360223","NL","NLD","NETHERLANDS" -"3276360224","3276360239","DE","DEU","GERMANY" -"3276360240","3276360271","NL","NLD","NETHERLANDS" -"3276360272","3276360279","DE","DEU","GERMANY" -"3276360280","3276360327","NL","NLD","NETHERLANDS" -"3276360328","3276360335","DE","DEU","GERMANY" -"3276360336","3276360351","NL","NLD","NETHERLANDS" -"3276360352","3276360359","DE","DEU","GERMANY" -"3276360360","3276360375","NL","NLD","NETHERLANDS" -"3276360376","3276360383","DE","DEU","GERMANY" -"3276360384","3276360399","NL","NLD","NETHERLANDS" -"3276360400","3276360407","DE","DEU","GERMANY" -"3276360408","3276360495","NL","NLD","NETHERLANDS" -"3276360496","3276360503","DE","DEU","GERMANY" -"3276360504","3276360519","NL","NLD","NETHERLANDS" -"3276360520","3276360527","DE","DEU","GERMANY" -"3276360528","3276360559","NL","NLD","NETHERLANDS" -"3276360560","3276360567","DE","DEU","GERMANY" -"3276360568","3276360583","NL","NLD","NETHERLANDS" -"3276360584","3276360591","DE","DEU","GERMANY" -"3276360592","3276360615","NL","NLD","NETHERLANDS" -"3276360616","3276360623","DE","DEU","GERMANY" -"3276360624","3276360687","NL","NLD","NETHERLANDS" -"3276360688","3276360703","DE","DEU","GERMANY" -"3276360704","3276360743","NL","NLD","NETHERLANDS" -"3276360744","3276360751","DE","DEU","GERMANY" -"3276360752","3276360847","NL","NLD","NETHERLANDS" -"3276360848","3276360863","DE","DEU","GERMANY" -"3276360864","3276360999","NL","NLD","NETHERLANDS" -"3276361000","3276361007","DE","DEU","GERMANY" -"3276361008","3276361015","NL","NLD","NETHERLANDS" -"3276361016","3276361023","DE","DEU","GERMANY" -"3276361024","3276361063","NL","NLD","NETHERLANDS" -"3276361064","3276361071","DE","DEU","GERMANY" -"3276361072","3276361239","NL","NLD","NETHERLANDS" -"3276361240","3276361247","DE","DEU","GERMANY" -"3276361248","3276361255","NL","NLD","NETHERLANDS" -"3276361256","3276361271","DE","DEU","GERMANY" -"3276361272","3276361303","NL","NLD","NETHERLANDS" -"3276361304","3276361311","DE","DEU","GERMANY" -"3276361312","3276361343","NL","NLD","NETHERLANDS" -"3276361344","3276361351","DE","DEU","GERMANY" -"3276361352","3276361383","NL","NLD","NETHERLANDS" -"3276361384","3276361391","DE","DEU","GERMANY" -"3276361392","3276361399","NL","NLD","NETHERLANDS" -"3276361400","3276361407","DE","DEU","GERMANY" -"3276361408","3276361519","NL","NLD","NETHERLANDS" -"3276361520","3276361527","DE","DEU","GERMANY" -"3276361528","3276361599","NL","NLD","NETHERLANDS" -"3276361600","3276361607","DE","DEU","GERMANY" -"3276361608","3276361655","NL","NLD","NETHERLANDS" -"3276361656","3276361663","DE","DEU","GERMANY" -"3276361664","3276361679","NL","NLD","NETHERLANDS" -"3276361680","3276361687","DE","DEU","GERMANY" -"3276361688","3276361751","NL","NLD","NETHERLANDS" -"3276361752","3276361767","DE","DEU","GERMANY" -"3276361768","3276361999","NL","NLD","NETHERLANDS" -"3276362000","3276362007","DE","DEU","GERMANY" -"3276362008","3276362047","NL","NLD","NETHERLANDS" -"3276362048","3276362055","DE","DEU","GERMANY" -"3276362056","3276362071","NL","NLD","NETHERLANDS" -"3276362072","3276362079","DE","DEU","GERMANY" -"3276362080","3276362143","NL","NLD","NETHERLANDS" -"3276362144","3276362151","DE","DEU","GERMANY" -"3276362152","3276362311","NL","NLD","NETHERLANDS" -"3276362312","3276362319","DE","DEU","GERMANY" -"3276362320","3276362599","NL","NLD","NETHERLANDS" -"3276362600","3276362607","DE","DEU","GERMANY" -"3276362608","3276362695","NL","NLD","NETHERLANDS" -"3276362696","3276362703","DE","DEU","GERMANY" -"3276362704","3276362759","NL","NLD","NETHERLANDS" -"3276362760","3276362767","DE","DEU","GERMANY" -"3276362768","3276362775","NL","NLD","NETHERLANDS" -"3276362776","3276362783","DE","DEU","GERMANY" -"3276362784","3276362791","NL","NLD","NETHERLANDS" -"3276362792","3276362799","DE","DEU","GERMANY" -"3276362800","3276362967","NL","NLD","NETHERLANDS" -"3276362968","3276362975","DE","DEU","GERMANY" -"3276362976","3276362983","NL","NLD","NETHERLANDS" -"3276362984","3276362991","DE","DEU","GERMANY" -"3276362992","3276363047","NL","NLD","NETHERLANDS" -"3276363048","3276363055","DE","DEU","GERMANY" -"3276363056","3276363071","NL","NLD","NETHERLANDS" -"3276363072","3276363079","DE","DEU","GERMANY" -"3276363080","3276363223","NL","NLD","NETHERLANDS" -"3276363224","3276363231","DE","DEU","GERMANY" -"3276363232","3276363295","NL","NLD","NETHERLANDS" -"3276363296","3276363303","DE","DEU","GERMANY" -"3276363304","3276363335","NL","NLD","NETHERLANDS" -"3276363336","3276363343","DE","DEU","GERMANY" -"3276363344","3276363375","NL","NLD","NETHERLANDS" -"3276363376","3276363383","DE","DEU","GERMANY" -"3276363384","3276363503","NL","NLD","NETHERLANDS" -"3276363504","3276363511","DE","DEU","GERMANY" -"3276363512","3276363583","NL","NLD","NETHERLANDS" -"3276363584","3276363591","DE","DEU","GERMANY" -"3276363592","3276363607","NL","NLD","NETHERLANDS" -"3276363608","3276363615","DE","DEU","GERMANY" -"3276363616","3276363623","NL","NLD","NETHERLANDS" -"3276363624","3276363631","DE","DEU","GERMANY" -"3276363632","3276363655","NL","NLD","NETHERLANDS" -"3276363656","3276363679","DE","DEU","GERMANY" -"3276363680","3276363703","NL","NLD","NETHERLANDS" -"3276363704","3276363711","DE","DEU","GERMANY" -"3276363712","3276363823","NL","NLD","NETHERLANDS" -"3276363824","3276363831","DE","DEU","GERMANY" -"3276363832","3276363855","NL","NLD","NETHERLANDS" -"3276363856","3276363863","DE","DEU","GERMANY" -"3276363864","3276363951","NL","NLD","NETHERLANDS" -"3276363952","3276363967","DE","DEU","GERMANY" -"3276363968","3276363975","NL","NLD","NETHERLANDS" -"3276363976","3276363991","DE","DEU","GERMANY" -"3276363992","3276364183","NL","NLD","NETHERLANDS" -"3276364184","3276364191","DE","DEU","GERMANY" -"3276364192","3276364295","NL","NLD","NETHERLANDS" -"3276364296","3276364303","DE","DEU","GERMANY" -"3276364304","3276364311","NL","NLD","NETHERLANDS" -"3276364312","3276364319","DE","DEU","GERMANY" -"3276364320","3276364383","NL","NLD","NETHERLANDS" -"3276364384","3276364391","DE","DEU","GERMANY" -"3276364392","3276364431","NL","NLD","NETHERLANDS" -"3276364432","3276364439","DE","DEU","GERMANY" -"3276364440","3276364543","NL","NLD","NETHERLANDS" -"3276364544","3276364551","DE","DEU","GERMANY" -"3276364552","3276364639","NL","NLD","NETHERLANDS" -"3276364640","3276364655","DE","DEU","GERMANY" -"3276364656","3276364807","NL","NLD","NETHERLANDS" -"3276364808","3276364815","DE","DEU","GERMANY" -"3276364816","3276364855","NL","NLD","NETHERLANDS" -"3276364856","3276364863","DE","DEU","GERMANY" -"3276364864","3276364935","NL","NLD","NETHERLANDS" -"3276364936","3276364943","DE","DEU","GERMANY" -"3276364944","3276364959","NL","NLD","NETHERLANDS" -"3276364960","3276364967","DE","DEU","GERMANY" -"3276364968","3276364991","NL","NLD","NETHERLANDS" -"3276364992","3276365007","DE","DEU","GERMANY" -"3276365008","3276365215","NL","NLD","NETHERLANDS" -"3276365216","3276365223","DE","DEU","GERMANY" -"3276365224","3276365247","NL","NLD","NETHERLANDS" -"3276365248","3276365255","DE","DEU","GERMANY" -"3276365256","3276365303","NL","NLD","NETHERLANDS" -"3276365304","3276365311","DE","DEU","GERMANY" -"3276365312","3276365327","NL","NLD","NETHERLANDS" -"3276365328","3276365335","DE","DEU","GERMANY" -"3276365336","3276365375","NL","NLD","NETHERLANDS" -"3276365376","3276365391","DE","DEU","GERMANY" -"3276365392","3276365415","NL","NLD","NETHERLANDS" -"3276365416","3276365423","DE","DEU","GERMANY" -"3276365424","3276365495","NL","NLD","NETHERLANDS" -"3276365496","3276365519","DE","DEU","GERMANY" -"3276365520","3276365543","NL","NLD","NETHERLANDS" -"3276365544","3276365551","DE","DEU","GERMANY" -"3276365552","3276365623","NL","NLD","NETHERLANDS" -"3276365624","3276365631","DE","DEU","GERMANY" -"3276365632","3276365647","NL","NLD","NETHERLANDS" -"3276365648","3276365655","DE","DEU","GERMANY" -"3276365656","3276365743","NL","NLD","NETHERLANDS" -"3276365744","3276365751","DE","DEU","GERMANY" -"3276365752","3276365999","NL","NLD","NETHERLANDS" -"3276366000","3276366007","DE","DEU","GERMANY" -"3276366008","3276366039","NL","NLD","NETHERLANDS" -"3276366040","3276366047","DE","DEU","GERMANY" -"3276366048","3276366055","NL","NLD","NETHERLANDS" -"3276366056","3276366063","DE","DEU","GERMANY" -"3276366064","3276366119","NL","NLD","NETHERLANDS" -"3276366120","3276366127","DE","DEU","GERMANY" -"3276366128","3276366143","NL","NLD","NETHERLANDS" -"3276366144","3276366151","DE","DEU","GERMANY" -"3276366152","3276366255","NL","NLD","NETHERLANDS" -"3276366256","3276366263","DE","DEU","GERMANY" -"3276366264","3276366319","NL","NLD","NETHERLANDS" -"3276366320","3276366335","DE","DEU","GERMANY" -"3276366336","3276366455","NL","NLD","NETHERLANDS" -"3276366456","3276366471","DE","DEU","GERMANY" -"3276366472","3276366591","NL","NLD","NETHERLANDS" -"3276366592","3276366599","DE","DEU","GERMANY" -"3276366600","3276366639","NL","NLD","NETHERLANDS" -"3276366640","3276366647","DE","DEU","GERMANY" -"3276366648","3276366679","NL","NLD","NETHERLANDS" -"3276366680","3276366695","DE","DEU","GERMANY" -"3276366696","3276366727","NL","NLD","NETHERLANDS" -"3276366728","3276366735","DE","DEU","GERMANY" -"3276366736","3276366751","NL","NLD","NETHERLANDS" -"3276366752","3276366767","DE","DEU","GERMANY" -"3276366768","3276366775","NL","NLD","NETHERLANDS" -"3276366776","3276366783","DE","DEU","GERMANY" -"3276366784","3276366855","NL","NLD","NETHERLANDS" -"3276366856","3276366863","DE","DEU","GERMANY" -"3276366864","3276366887","NL","NLD","NETHERLANDS" -"3276366888","3276366895","DE","DEU","GERMANY" -"3276366896","3276366919","NL","NLD","NETHERLANDS" -"3276366920","3276366927","DE","DEU","GERMANY" -"3276366928","3276367063","NL","NLD","NETHERLANDS" -"3276367064","3276367071","DE","DEU","GERMANY" -"3276367072","3276367079","NL","NLD","NETHERLANDS" -"3276367080","3276367087","DE","DEU","GERMANY" -"3276367088","3276367119","NL","NLD","NETHERLANDS" -"3276367120","3276367127","DE","DEU","GERMANY" -"3276367128","3276367159","NL","NLD","NETHERLANDS" -"3276367160","3276367175","DE","DEU","GERMANY" -"3276367176","3276367271","NL","NLD","NETHERLANDS" -"3276367272","3276367279","DE","DEU","GERMANY" -"3276367280","3276367455","NL","NLD","NETHERLANDS" -"3276367456","3276367463","DE","DEU","GERMANY" -"3276367464","3276367607","NL","NLD","NETHERLANDS" -"3276367608","3276367615","DE","DEU","GERMANY" -"3276367616","3276367623","NL","NLD","NETHERLANDS" -"3276367624","3276367631","DE","DEU","GERMANY" -"3276367632","3276367679","NL","NLD","NETHERLANDS" -"3276367680","3276367687","DE","DEU","GERMANY" -"3276367688","3276367711","NL","NLD","NETHERLANDS" -"3276367712","3276367719","DE","DEU","GERMANY" -"3276367720","3276367743","NL","NLD","NETHERLANDS" -"3276367744","3276367751","DE","DEU","GERMANY" -"3276367752","3276367783","NL","NLD","NETHERLANDS" -"3276367784","3276367791","DE","DEU","GERMANY" -"3276367792","3276367855","NL","NLD","NETHERLANDS" -"3276367856","3276367863","DE","DEU","GERMANY" -"3276367864","3276368079","NL","NLD","NETHERLANDS" -"3276368080","3276368087","DE","DEU","GERMANY" -"3276368088","3276368103","NL","NLD","NETHERLANDS" -"3276368104","3276368111","DE","DEU","GERMANY" -"3276368112","3276368191","NL","NLD","NETHERLANDS" -"3276368192","3276368199","DE","DEU","GERMANY" -"3276368200","3276368271","NL","NLD","NETHERLANDS" -"3276368272","3276368279","DE","DEU","GERMANY" -"3276368280","3276368343","NL","NLD","NETHERLANDS" -"3276368344","3276368351","DE","DEU","GERMANY" -"3276368352","3276368431","NL","NLD","NETHERLANDS" -"3276368432","3276368439","DE","DEU","GERMANY" -"3276368440","3276368527","NL","NLD","NETHERLANDS" -"3276368528","3276368535","DE","DEU","GERMANY" -"3276368536","3276368615","NL","NLD","NETHERLANDS" -"3276368616","3276368623","DE","DEU","GERMANY" -"3276368624","3276368631","NL","NLD","NETHERLANDS" -"3276368632","3276368639","DE","DEU","GERMANY" -"3276368640","3276368655","NL","NLD","NETHERLANDS" -"3276368656","3276368663","DE","DEU","GERMANY" -"3276368664","3276368703","NL","NLD","NETHERLANDS" -"3276368704","3276368711","DE","DEU","GERMANY" -"3276368712","3276368727","NL","NLD","NETHERLANDS" -"3276368728","3276368735","DE","DEU","GERMANY" -"3276368736","3276368751","NL","NLD","NETHERLANDS" -"3276368752","3276368759","DE","DEU","GERMANY" -"3276368760","3276368815","NL","NLD","NETHERLANDS" -"3276368816","3276368823","DE","DEU","GERMANY" -"3276368824","3276368871","NL","NLD","NETHERLANDS" -"3276368872","3276368879","DE","DEU","GERMANY" -"3276368880","3276369031","NL","NLD","NETHERLANDS" -"3276369032","3276369047","DE","DEU","GERMANY" -"3276369048","3276369079","NL","NLD","NETHERLANDS" -"3276369080","3276369087","DE","DEU","GERMANY" -"3276369088","3276369167","NL","NLD","NETHERLANDS" -"3276369168","3276369183","DE","DEU","GERMANY" -"3276369184","3276369263","NL","NLD","NETHERLANDS" -"3276369264","3276369271","DE","DEU","GERMANY" -"3276369272","3276369431","NL","NLD","NETHERLANDS" -"3276369432","3276369439","DE","DEU","GERMANY" -"3276369440","3276369527","NL","NLD","NETHERLANDS" -"3276369528","3276369543","DE","DEU","GERMANY" -"3276369544","3276369551","NL","NLD","NETHERLANDS" -"3276369552","3276369559","DE","DEU","GERMANY" -"3276369560","3276369599","NL","NLD","NETHERLANDS" -"3276369600","3276369607","DE","DEU","GERMANY" -"3276369608","3276369623","NL","NLD","NETHERLANDS" -"3276369624","3276369631","DE","DEU","GERMANY" -"3276369632","3276369639","NL","NLD","NETHERLANDS" -"3276369640","3276369647","DE","DEU","GERMANY" -"3276369648","3276369703","NL","NLD","NETHERLANDS" -"3276369704","3276369711","DE","DEU","GERMANY" -"3276369712","3276369735","NL","NLD","NETHERLANDS" -"3276369736","3276369743","DE","DEU","GERMANY" -"3276369744","3276369751","NL","NLD","NETHERLANDS" -"3276369752","3276369759","DE","DEU","GERMANY" -"3276369760","3276369855","NL","NLD","NETHERLANDS" -"3276369856","3276369863","DE","DEU","GERMANY" -"3276369864","3276369871","NL","NLD","NETHERLANDS" -"3276369872","3276369879","DE","DEU","GERMANY" -"3276369880","3276369919","NL","NLD","NETHERLANDS" -"3276369920","3276369927","DE","DEU","GERMANY" -"3276369928","3276369999","NL","NLD","NETHERLANDS" -"3276370000","3276370015","DE","DEU","GERMANY" -"3276370016","3276370063","NL","NLD","NETHERLANDS" -"3276370064","3276370071","DE","DEU","GERMANY" -"3276370072","3276370119","NL","NLD","NETHERLANDS" -"3276370120","3276370143","DE","DEU","GERMANY" -"3276370144","3276370183","NL","NLD","NETHERLANDS" -"3276370184","3276370191","DE","DEU","GERMANY" -"3276370192","3276370335","NL","NLD","NETHERLANDS" -"3276370336","3276370343","DE","DEU","GERMANY" -"3276370344","3276370375","NL","NLD","NETHERLANDS" -"3276370376","3276370383","DE","DEU","GERMANY" -"3276370384","3276370551","NL","NLD","NETHERLANDS" -"3276370552","3276370567","DE","DEU","GERMANY" -"3276370568","3276370599","NL","NLD","NETHERLANDS" -"3276370600","3276370607","DE","DEU","GERMANY" -"3276370608","3276370831","NL","NLD","NETHERLANDS" -"3276370832","3276370839","DE","DEU","GERMANY" -"3276370840","3276370919","NL","NLD","NETHERLANDS" -"3276370920","3276370927","DE","DEU","GERMANY" -"3276370928","3276370959","NL","NLD","NETHERLANDS" -"3276370960","3276370967","DE","DEU","GERMANY" -"3276370968","3276370999","NL","NLD","NETHERLANDS" -"3276371000","3276371007","DE","DEU","GERMANY" -"3276371008","3276371039","NL","NLD","NETHERLANDS" -"3276371040","3276371055","DE","DEU","GERMANY" -"3276371056","3276371167","NL","NLD","NETHERLANDS" -"3276371168","3276371175","DE","DEU","GERMANY" -"3276371176","3276371239","NL","NLD","NETHERLANDS" -"3276371240","3276371247","DE","DEU","GERMANY" -"3276371248","3276371255","NL","NLD","NETHERLANDS" -"3276371256","3276371271","DE","DEU","GERMANY" -"3276371272","3276371327","NL","NLD","NETHERLANDS" -"3276371328","3276371335","DE","DEU","GERMANY" -"3276371336","3276371343","NL","NLD","NETHERLANDS" -"3276371344","3276371351","DE","DEU","GERMANY" -"3276371352","3276371367","NL","NLD","NETHERLANDS" -"3276371368","3276371375","DE","DEU","GERMANY" -"3276371376","3276371407","NL","NLD","NETHERLANDS" -"3276371408","3276371415","DE","DEU","GERMANY" -"3276371416","3276371431","NL","NLD","NETHERLANDS" -"3276371432","3276371439","DE","DEU","GERMANY" -"3276371440","3276371455","NL","NLD","NETHERLANDS" -"3276371456","3276371463","DE","DEU","GERMANY" -"3276371464","3276371511","NL","NLD","NETHERLANDS" -"3276371512","3276371527","DE","DEU","GERMANY" -"3276371528","3276371727","NL","NLD","NETHERLANDS" -"3276371728","3276371735","DE","DEU","GERMANY" -"3276371736","3276371815","NL","NLD","NETHERLANDS" -"3276371816","3276371823","DE","DEU","GERMANY" -"3276371824","3276371831","NL","NLD","NETHERLANDS" -"3276371832","3276371839","DE","DEU","GERMANY" -"3276371840","3276371863","NL","NLD","NETHERLANDS" -"3276371864","3276371871","DE","DEU","GERMANY" -"3276371872","3276371879","NL","NLD","NETHERLANDS" -"3276371880","3276371887","DE","DEU","GERMANY" -"3276371888","3276371903","NL","NLD","NETHERLANDS" -"3276371904","3276371911","DE","DEU","GERMANY" -"3276371912","3276371951","NL","NLD","NETHERLANDS" -"3276371952","3276371959","DE","DEU","GERMANY" -"3276371960","3276372023","NL","NLD","NETHERLANDS" -"3276372024","3276372031","DE","DEU","GERMANY" -"3276372032","3276372095","NL","NLD","NETHERLANDS" -"3276372096","3276372111","DE","DEU","GERMANY" -"3276372112","3276372303","NL","NLD","NETHERLANDS" -"3276372304","3276372311","DE","DEU","GERMANY" -"3276372312","3276372343","NL","NLD","NETHERLANDS" -"3276372344","3276372351","DE","DEU","GERMANY" -"3276372352","3276372679","NL","NLD","NETHERLANDS" -"3276372680","3276372687","DE","DEU","GERMANY" -"3276372688","3276372807","NL","NLD","NETHERLANDS" -"3276372808","3276372815","DE","DEU","GERMANY" -"3276372816","3276372911","NL","NLD","NETHERLANDS" -"3276372912","3276372919","DE","DEU","GERMANY" -"3276372920","3276372943","NL","NLD","NETHERLANDS" -"3276372944","3276372951","DE","DEU","GERMANY" -"3276372952","3276373015","NL","NLD","NETHERLANDS" -"3276373016","3276373023","DE","DEU","GERMANY" -"3276373024","3276373039","NL","NLD","NETHERLANDS" -"3276373040","3276373047","DE","DEU","GERMANY" -"3276373048","3276373063","NL","NLD","NETHERLANDS" -"3276373064","3276373071","DE","DEU","GERMANY" -"3276373072","3276373119","NL","NLD","NETHERLANDS" -"3276373120","3276373127","DE","DEU","GERMANY" -"3276373128","3276373167","NL","NLD","NETHERLANDS" -"3276373168","3276373175","DE","DEU","GERMANY" -"3276373176","3276373207","NL","NLD","NETHERLANDS" -"3276373208","3276373215","DE","DEU","GERMANY" -"3276373216","3276373223","NL","NLD","NETHERLANDS" -"3276373224","3276373231","DE","DEU","GERMANY" -"3276373232","3276373343","NL","NLD","NETHERLANDS" -"3276373344","3276373351","DE","DEU","GERMANY" -"3276373352","3276373431","NL","NLD","NETHERLANDS" -"3276373432","3276373439","DE","DEU","GERMANY" -"3276373440","3276373447","NL","NLD","NETHERLANDS" -"3276373448","3276373455","DE","DEU","GERMANY" -"3276373456","3276373519","NL","NLD","NETHERLANDS" -"3276373520","3276373527","DE","DEU","GERMANY" -"3276373528","3276373551","NL","NLD","NETHERLANDS" -"3276373552","3276373559","DE","DEU","GERMANY" -"3276373560","3276373727","NL","NLD","NETHERLANDS" -"3276373728","3276373735","DE","DEU","GERMANY" -"3276373736","3276373751","NL","NLD","NETHERLANDS" -"3276373752","3276373759","DE","DEU","GERMANY" -"3276373760","3276373863","NL","NLD","NETHERLANDS" -"3276373864","3276373871","DE","DEU","GERMANY" -"3276373872","3276373911","NL","NLD","NETHERLANDS" -"3276373912","3276373919","DE","DEU","GERMANY" -"3276373920","3276373927","NL","NLD","NETHERLANDS" -"3276373928","3276373943","DE","DEU","GERMANY" -"3276373944","3276374063","NL","NLD","NETHERLANDS" -"3276374064","3276374071","DE","DEU","GERMANY" -"3276374072","3276374143","NL","NLD","NETHERLANDS" -"3276374144","3276374151","DE","DEU","GERMANY" -"3276374152","3276374159","NL","NLD","NETHERLANDS" -"3276374160","3276374167","DE","DEU","GERMANY" -"3276374168","3276374327","NL","NLD","NETHERLANDS" -"3276374328","3276374335","DE","DEU","GERMANY" -"3276374336","3276374399","NL","NLD","NETHERLANDS" -"3276374400","3276374407","DE","DEU","GERMANY" -"3276374408","3276374439","NL","NLD","NETHERLANDS" -"3276374440","3276374447","DE","DEU","GERMANY" -"3276374448","3276374479","NL","NLD","NETHERLANDS" -"3276374480","3276374487","DE","DEU","GERMANY" -"3276374488","3276374527","NL","NLD","NETHERLANDS" -"3276374528","3276374535","DE","DEU","GERMANY" -"3276374536","3276374575","NL","NLD","NETHERLANDS" -"3276374576","3276374583","DE","DEU","GERMANY" -"3276374584","3276374679","NL","NLD","NETHERLANDS" -"3276374680","3276374687","DE","DEU","GERMANY" -"3276374688","3276374703","NL","NLD","NETHERLANDS" -"3276374704","3276374711","DE","DEU","GERMANY" -"3276374712","3276374727","NL","NLD","NETHERLANDS" -"3276374728","3276374735","DE","DEU","GERMANY" -"3276374736","3276374751","NL","NLD","NETHERLANDS" -"3276374752","3276374767","DE","DEU","GERMANY" -"3276374768","3276374775","NL","NLD","NETHERLANDS" -"3276374776","3276374783","DE","DEU","GERMANY" -"3276374784","3276374807","NL","NLD","NETHERLANDS" -"3276374808","3276374815","DE","DEU","GERMANY" -"3276374816","3276374823","NL","NLD","NETHERLANDS" -"3276374824","3276374831","DE","DEU","GERMANY" -"3276374832","3276374999","NL","NLD","NETHERLANDS" -"3276375000","3276375007","DE","DEU","GERMANY" -"3276375008","3276375103","NL","NLD","NETHERLANDS" -"3276375104","3276375119","DE","DEU","GERMANY" -"3276375120","3276375183","NL","NLD","NETHERLANDS" -"3276375184","3276375191","DE","DEU","GERMANY" -"3276375192","3276375223","NL","NLD","NETHERLANDS" -"3276375224","3276375231","DE","DEU","GERMANY" -"3276375232","3276375335","NL","NLD","NETHERLANDS" -"3276375336","3276375359","DE","DEU","GERMANY" -"3276375360","3276375423","NL","NLD","NETHERLANDS" -"3276375424","3276375439","DE","DEU","GERMANY" -"3276375440","3276375607","NL","NLD","NETHERLANDS" -"3276375608","3276375615","DE","DEU","GERMANY" -"3276375616","3276375679","NL","NLD","NETHERLANDS" -"3276375680","3276375687","DE","DEU","GERMANY" -"3276375688","3276375727","NL","NLD","NETHERLANDS" -"3276375728","3276375735","DE","DEU","GERMANY" -"3276375736","3276375783","NL","NLD","NETHERLANDS" -"3276375784","3276375791","DE","DEU","GERMANY" -"3276375792","3276375911","NL","NLD","NETHERLANDS" -"3276375912","3276375919","DE","DEU","GERMANY" -"3276375920","3276376015","NL","NLD","NETHERLANDS" -"3276376016","3276376023","DE","DEU","GERMANY" -"3276376024","3276376055","NL","NLD","NETHERLANDS" -"3276376056","3276376063","DE","DEU","GERMANY" -"3276376064","3276376095","NL","NLD","NETHERLANDS" -"3276376096","3276376103","DE","DEU","GERMANY" -"3276376104","3276376143","NL","NLD","NETHERLANDS" -"3276376144","3276376151","DE","DEU","GERMANY" -"3276376152","3276376191","NL","NLD","NETHERLANDS" -"3276376192","3276376199","DE","DEU","GERMANY" -"3276376200","3276376311","NL","NLD","NETHERLANDS" -"3276376312","3276376319","DE","DEU","GERMANY" -"3276376320","3276376359","NL","NLD","NETHERLANDS" -"3276376360","3276376367","DE","DEU","GERMANY" -"3276376368","3276376375","NL","NLD","NETHERLANDS" -"3276376376","3276376383","DE","DEU","GERMANY" -"3276376384","3276376471","NL","NLD","NETHERLANDS" -"3276376472","3276376479","DE","DEU","GERMANY" -"3276376480","3276376503","NL","NLD","NETHERLANDS" -"3276376504","3276376511","DE","DEU","GERMANY" -"3276376512","3276376599","NL","NLD","NETHERLANDS" -"3276376600","3276376607","DE","DEU","GERMANY" -"3276376608","3276376679","NL","NLD","NETHERLANDS" -"3276376680","3276376687","DE","DEU","GERMANY" -"3276376688","3276376767","NL","NLD","NETHERLANDS" -"3276376768","3276376775","DE","DEU","GERMANY" -"3276376776","3276376871","NL","NLD","NETHERLANDS" -"3276376872","3276376879","DE","DEU","GERMANY" -"3276376880","3276376927","NL","NLD","NETHERLANDS" -"3276376928","3276376935","DE","DEU","GERMANY" -"3276376936","3276377031","NL","NLD","NETHERLANDS" -"3276377032","3276377039","DE","DEU","GERMANY" -"3276377040","3276377087","NL","NLD","NETHERLANDS" -"3276377088","3276377095","DE","DEU","GERMANY" -"3276377096","3276377335","NL","NLD","NETHERLANDS" -"3276377336","3276377351","DE","DEU","GERMANY" -"3276377352","3276377359","NL","NLD","NETHERLANDS" -"3276377360","3276377367","DE","DEU","GERMANY" -"3276377368","3276377407","NL","NLD","NETHERLANDS" -"3276377408","3276377415","DE","DEU","GERMANY" -"3276377416","3276377447","NL","NLD","NETHERLANDS" -"3276377448","3276377455","DE","DEU","GERMANY" -"3276377456","3276377631","NL","NLD","NETHERLANDS" -"3276377632","3276377639","DE","DEU","GERMANY" -"3276377640","3276377687","NL","NLD","NETHERLANDS" -"3276377688","3276377695","DE","DEU","GERMANY" -"3276377696","3276377807","NL","NLD","NETHERLANDS" -"3276377808","3276377815","DE","DEU","GERMANY" -"3276377816","3276377831","NL","NLD","NETHERLANDS" -"3276377832","3276377847","DE","DEU","GERMANY" -"3276377848","3276377887","NL","NLD","NETHERLANDS" -"3276377888","3276377895","DE","DEU","GERMANY" -"3276377896","3276377983","NL","NLD","NETHERLANDS" -"3276377984","3276377991","DE","DEU","GERMANY" -"3276377992","3276378063","NL","NLD","NETHERLANDS" -"3276378064","3276378071","DE","DEU","GERMANY" -"3276378072","3276378103","NL","NLD","NETHERLANDS" -"3276378104","3276378111","DE","DEU","GERMANY" -"3276378112","3276378143","NL","NLD","NETHERLANDS" -"3276378144","3276378151","DE","DEU","GERMANY" -"3276378152","3276378231","NL","NLD","NETHERLANDS" -"3276378232","3276378239","DE","DEU","GERMANY" -"3276378240","3276378311","NL","NLD","NETHERLANDS" -"3276378312","3276378319","DE","DEU","GERMANY" -"3276378320","3276378351","NL","NLD","NETHERLANDS" -"3276378352","3276378359","DE","DEU","GERMANY" -"3276378360","3276378567","NL","NLD","NETHERLANDS" -"3276378568","3276378591","DE","DEU","GERMANY" -"3276378592","3276378607","NL","NLD","NETHERLANDS" -"3276378608","3276378615","DE","DEU","GERMANY" -"3276378616","3276378631","NL","NLD","NETHERLANDS" -"3276378632","3276378639","DE","DEU","GERMANY" -"3276378640","3276378735","NL","NLD","NETHERLANDS" -"3276378736","3276378743","DE","DEU","GERMANY" -"3276378744","3276378839","NL","NLD","NETHERLANDS" -"3276378840","3276378847","DE","DEU","GERMANY" -"3276378848","3276378871","NL","NLD","NETHERLANDS" -"3276378872","3276378879","DE","DEU","GERMANY" -"3276378880","3276378911","NL","NLD","NETHERLANDS" -"3276378912","3276378919","DE","DEU","GERMANY" -"3276378920","3276378935","NL","NLD","NETHERLANDS" -"3276378936","3276378943","DE","DEU","GERMANY" -"3276378944","3276378951","NL","NLD","NETHERLANDS" -"3276378952","3276378959","DE","DEU","GERMANY" -"3276378960","3276378983","NL","NLD","NETHERLANDS" -"3276378984","3276378991","DE","DEU","GERMANY" -"3276378992","3276379047","NL","NLD","NETHERLANDS" -"3276379048","3276379055","DE","DEU","GERMANY" -"3276379056","3276379071","NL","NLD","NETHERLANDS" -"3276379072","3276379079","DE","DEU","GERMANY" -"3276379080","3276379167","NL","NLD","NETHERLANDS" -"3276379168","3276379175","DE","DEU","GERMANY" -"3276379176","3276379215","NL","NLD","NETHERLANDS" -"3276379216","3276379223","DE","DEU","GERMANY" -"3276379224","3276379279","NL","NLD","NETHERLANDS" -"3276379280","3276379287","DE","DEU","GERMANY" -"3276379288","3276379295","NL","NLD","NETHERLANDS" -"3276379296","3276379303","DE","DEU","GERMANY" -"3276379304","3276379463","NL","NLD","NETHERLANDS" -"3276379464","3276379471","DE","DEU","GERMANY" -"3276379472","3276379503","NL","NLD","NETHERLANDS" -"3276379504","3276379511","DE","DEU","GERMANY" -"3276379512","3276379583","NL","NLD","NETHERLANDS" -"3276379584","3276379591","DE","DEU","GERMANY" -"3276379592","3276379607","NL","NLD","NETHERLANDS" -"3276379608","3276379615","DE","DEU","GERMANY" -"3276379616","3276379703","NL","NLD","NETHERLANDS" -"3276379704","3276379711","DE","DEU","GERMANY" -"3276379712","3276379727","NL","NLD","NETHERLANDS" -"3276379728","3276379735","DE","DEU","GERMANY" -"3276379736","3276379767","NL","NLD","NETHERLANDS" -"3276379768","3276379775","DE","DEU","GERMANY" -"3276379776","3276379815","NL","NLD","NETHERLANDS" -"3276379816","3276379823","DE","DEU","GERMANY" -"3276379824","3276379943","NL","NLD","NETHERLANDS" -"3276379944","3276379951","DE","DEU","GERMANY" -"3276379952","3276379959","NL","NLD","NETHERLANDS" -"3276379960","3276379967","DE","DEU","GERMANY" -"3276379968","3276380023","NL","NLD","NETHERLANDS" -"3276380024","3276380031","DE","DEU","GERMANY" -"3276380032","3276380199","NL","NLD","NETHERLANDS" -"3276380200","3276380215","DE","DEU","GERMANY" -"3276380216","3276380295","NL","NLD","NETHERLANDS" -"3276380296","3276380303","DE","DEU","GERMANY" -"3276380304","3276380351","NL","NLD","NETHERLANDS" -"3276380352","3276380359","DE","DEU","GERMANY" -"3276380360","3276380471","NL","NLD","NETHERLANDS" -"3276380472","3276380479","DE","DEU","GERMANY" -"3276380480","3276380687","NL","NLD","NETHERLANDS" -"3276380688","3276380695","DE","DEU","GERMANY" -"3276380696","3276380879","NL","NLD","NETHERLANDS" -"3276380880","3276380887","DE","DEU","GERMANY" -"3276380888","3276380919","NL","NLD","NETHERLANDS" -"3276380920","3276380927","DE","DEU","GERMANY" -"3276380928","3276381103","NL","NLD","NETHERLANDS" -"3276381104","3276381111","DE","DEU","GERMANY" -"3276381112","3276381127","NL","NLD","NETHERLANDS" -"3276381128","3276381135","DE","DEU","GERMANY" -"3276381136","3276381167","NL","NLD","NETHERLANDS" -"3276381168","3276381175","DE","DEU","GERMANY" -"3276381176","3276381247","NL","NLD","NETHERLANDS" -"3276381248","3276381263","DE","DEU","GERMANY" -"3276381264","3276381279","NL","NLD","NETHERLANDS" -"3276381280","3276381287","DE","DEU","GERMANY" -"3276381288","3276381295","NL","NLD","NETHERLANDS" -"3276381296","3276381303","DE","DEU","GERMANY" -"3276381304","3276381311","NL","NLD","NETHERLANDS" -"3276381312","3276381319","DE","DEU","GERMANY" -"3276381320","3276381327","NL","NLD","NETHERLANDS" -"3276381328","3276381335","DE","DEU","GERMANY" -"3276381336","3276381359","NL","NLD","NETHERLANDS" -"3276381360","3276381367","DE","DEU","GERMANY" -"3276381368","3276381415","NL","NLD","NETHERLANDS" -"3276381416","3276381431","DE","DEU","GERMANY" -"3276381432","3276381583","NL","NLD","NETHERLANDS" -"3276381584","3276381599","DE","DEU","GERMANY" -"3276381600","3276381607","NL","NLD","NETHERLANDS" -"3276381608","3276381615","DE","DEU","GERMANY" -"3276381616","3276381671","NL","NLD","NETHERLANDS" -"3276381672","3276381679","DE","DEU","GERMANY" -"3276381680","3276381775","NL","NLD","NETHERLANDS" -"3276381776","3276381783","DE","DEU","GERMANY" -"3276381784","3276381967","NL","NLD","NETHERLANDS" -"3276381968","3276381975","DE","DEU","GERMANY" -"3276381976","3276382055","NL","NLD","NETHERLANDS" -"3276382056","3276382063","DE","DEU","GERMANY" -"3276382064","3276382103","NL","NLD","NETHERLANDS" -"3276382104","3276382111","DE","DEU","GERMANY" -"3276382112","3276382119","NL","NLD","NETHERLANDS" -"3276382120","3276382135","DE","DEU","GERMANY" -"3276382136","3276382175","NL","NLD","NETHERLANDS" -"3276382176","3276382183","DE","DEU","GERMANY" -"3276382184","3276382287","NL","NLD","NETHERLANDS" -"3276382288","3276382295","DE","DEU","GERMANY" -"3276382296","3276382383","NL","NLD","NETHERLANDS" -"3276382384","3276382399","DE","DEU","GERMANY" -"3276382400","3276382495","NL","NLD","NETHERLANDS" -"3276382496","3276382511","DE","DEU","GERMANY" -"3276382512","3276382575","NL","NLD","NETHERLANDS" -"3276382576","3276382583","DE","DEU","GERMANY" -"3276382584","3276382663","NL","NLD","NETHERLANDS" -"3276382664","3276382671","DE","DEU","GERMANY" -"3276382672","3276382711","NL","NLD","NETHERLANDS" -"3276382712","3276382719","DE","DEU","GERMANY" -"3276382720","3276382863","NL","NLD","NETHERLANDS" -"3276382864","3276382871","DE","DEU","GERMANY" -"3276382872","3276382887","NL","NLD","NETHERLANDS" -"3276382888","3276382895","DE","DEU","GERMANY" -"3276382896","3276383039","NL","NLD","NETHERLANDS" -"3276383040","3276383047","DE","DEU","GERMANY" -"3276383048","3276383063","NL","NLD","NETHERLANDS" -"3276383064","3276383071","DE","DEU","GERMANY" -"3276383072","3276383079","NL","NLD","NETHERLANDS" -"3276383080","3276383087","DE","DEU","GERMANY" -"3276383088","3276383095","NL","NLD","NETHERLANDS" -"3276383096","3276383111","DE","DEU","GERMANY" -"3276383112","3276383119","NL","NLD","NETHERLANDS" -"3276383120","3276383127","DE","DEU","GERMANY" -"3276383128","3276383207","NL","NLD","NETHERLANDS" -"3276383208","3276383215","DE","DEU","GERMANY" -"3276383216","3276383247","NL","NLD","NETHERLANDS" -"3276383248","3276383255","DE","DEU","GERMANY" -"3276383256","3276383311","NL","NLD","NETHERLANDS" -"3276383312","3276383327","DE","DEU","GERMANY" -"3276383328","3276383359","NL","NLD","NETHERLANDS" -"3276383360","3276383367","DE","DEU","GERMANY" -"3276383368","3276383479","NL","NLD","NETHERLANDS" -"3276383480","3276383487","DE","DEU","GERMANY" -"3276383488","3276383527","NL","NLD","NETHERLANDS" -"3276383528","3276383559","DE","DEU","GERMANY" -"3276383560","3276383615","NL","NLD","NETHERLANDS" -"3276383616","3276383623","DE","DEU","GERMANY" -"3276383624","3276383671","NL","NLD","NETHERLANDS" -"3276383672","3276383687","DE","DEU","GERMANY" -"3276383688","3276383703","NL","NLD","NETHERLANDS" -"3276383704","3276383711","DE","DEU","GERMANY" -"3276383712","3276383783","NL","NLD","NETHERLANDS" -"3276383784","3276383791","DE","DEU","GERMANY" -"3276383792","3276383887","NL","NLD","NETHERLANDS" -"3276383888","3276383895","DE","DEU","GERMANY" -"3276383896","3276384063","NL","NLD","NETHERLANDS" -"3276384064","3276384071","DE","DEU","GERMANY" -"3276384072","3276384111","NL","NLD","NETHERLANDS" -"3276384112","3276384119","DE","DEU","GERMANY" -"3276384120","3276384199","NL","NLD","NETHERLANDS" -"3276384200","3276384207","DE","DEU","GERMANY" -"3276384208","3276384263","NL","NLD","NETHERLANDS" -"3276384264","3276384271","DE","DEU","GERMANY" -"3276384272","3276384279","NL","NLD","NETHERLANDS" -"3276384280","3276384287","DE","DEU","GERMANY" -"3276384288","3276384335","NL","NLD","NETHERLANDS" -"3276384336","3276384343","DE","DEU","GERMANY" -"3276384344","3276384367","NL","NLD","NETHERLANDS" -"3276384368","3276384375","DE","DEU","GERMANY" -"3276384376","3276384383","NL","NLD","NETHERLANDS" -"3276384384","3276384391","DE","DEU","GERMANY" -"3276384392","3276384399","NL","NLD","NETHERLANDS" -"3276384400","3276384407","DE","DEU","GERMANY" -"3276384408","3276384415","NL","NLD","NETHERLANDS" -"3276384416","3276384423","DE","DEU","GERMANY" -"3276384424","3276384439","NL","NLD","NETHERLANDS" -"3276384440","3276384447","DE","DEU","GERMANY" -"3276384448","3276384551","NL","NLD","NETHERLANDS" -"3276384552","3276384559","DE","DEU","GERMANY" -"3276384560","3276384567","NL","NLD","NETHERLANDS" -"3276384568","3276384575","DE","DEU","GERMANY" -"3276384576","3276384647","NL","NLD","NETHERLANDS" -"3276384648","3276384655","DE","DEU","GERMANY" -"3276384656","3276384727","NL","NLD","NETHERLANDS" -"3276384728","3276384735","DE","DEU","GERMANY" -"3276384736","3276384823","NL","NLD","NETHERLANDS" -"3276384824","3276384839","DE","DEU","GERMANY" -"3276384840","3276384879","NL","NLD","NETHERLANDS" -"3276384880","3276384887","DE","DEU","GERMANY" -"3276384888","3276384895","NL","NLD","NETHERLANDS" -"3276384896","3276384903","DE","DEU","GERMANY" -"3276384904","3276385031","NL","NLD","NETHERLANDS" -"3276385032","3276385039","DE","DEU","GERMANY" -"3276385040","3276385047","NL","NLD","NETHERLANDS" -"3276385048","3276385055","DE","DEU","GERMANY" -"3276385056","3276385079","NL","NLD","NETHERLANDS" -"3276385080","3276385087","DE","DEU","GERMANY" -"3276385088","3276385111","NL","NLD","NETHERLANDS" -"3276385112","3276385119","DE","DEU","GERMANY" -"3276385120","3276385135","NL","NLD","NETHERLANDS" -"3276385136","3276385143","DE","DEU","GERMANY" -"3276385144","3276385175","NL","NLD","NETHERLANDS" -"3276385176","3276385183","DE","DEU","GERMANY" -"3276385184","3276385191","NL","NLD","NETHERLANDS" -"3276385192","3276385199","DE","DEU","GERMANY" -"3276385200","3276385215","NL","NLD","NETHERLANDS" -"3276385216","3276385223","DE","DEU","GERMANY" -"3276385224","3276385247","NL","NLD","NETHERLANDS" -"3276385248","3276385255","DE","DEU","GERMANY" -"3276385256","3276385295","NL","NLD","NETHERLANDS" -"3276385296","3276385303","DE","DEU","GERMANY" -"3276385304","3276385383","NL","NLD","NETHERLANDS" -"3276385384","3276385399","DE","DEU","GERMANY" -"3276385400","3276385575","NL","NLD","NETHERLANDS" -"3276385576","3276385583","DE","DEU","GERMANY" -"3276385584","3276385679","NL","NLD","NETHERLANDS" -"3276385680","3276385687","DE","DEU","GERMANY" -"3276385688","3276385695","NL","NLD","NETHERLANDS" -"3276385696","3276385703","DE","DEU","GERMANY" -"3276385704","3276385751","NL","NLD","NETHERLANDS" -"3276385752","3276385759","DE","DEU","GERMANY" -"3276385760","3276385799","NL","NLD","NETHERLANDS" -"3276385800","3276385807","DE","DEU","GERMANY" -"3276385808","3276385903","NL","NLD","NETHERLANDS" -"3276385904","3276385911","DE","DEU","GERMANY" -"3276385912","3276385919","NL","NLD","NETHERLANDS" -"3276385920","3276385927","DE","DEU","GERMANY" -"3276385928","3276385935","NL","NLD","NETHERLANDS" -"3276385936","3276385943","DE","DEU","GERMANY" -"3276385944","3276385959","NL","NLD","NETHERLANDS" -"3276385960","3276385967","DE","DEU","GERMANY" -"3276385968","3276386047","NL","NLD","NETHERLANDS" -"3276386048","3276386055","DE","DEU","GERMANY" -"3276386056","3276386087","NL","NLD","NETHERLANDS" -"3276386088","3276386095","DE","DEU","GERMANY" -"3276386096","3276386199","NL","NLD","NETHERLANDS" -"3276386200","3276386207","DE","DEU","GERMANY" -"3276386208","3276386231","NL","NLD","NETHERLANDS" -"3276386232","3276386239","DE","DEU","GERMANY" -"3276386240","3276386359","NL","NLD","NETHERLANDS" -"3276386360","3276386367","DE","DEU","GERMANY" -"3276386368","3276386375","NL","NLD","NETHERLANDS" -"3276386376","3276386383","DE","DEU","GERMANY" -"3276386384","3276386399","NL","NLD","NETHERLANDS" -"3276386400","3276386407","DE","DEU","GERMANY" -"3276386408","3276386415","NL","NLD","NETHERLANDS" -"3276386416","3276386423","DE","DEU","GERMANY" -"3276386424","3276386431","NL","NLD","NETHERLANDS" -"3276386432","3276386439","DE","DEU","GERMANY" -"3276386440","3276386503","NL","NLD","NETHERLANDS" -"3276386504","3276386511","DE","DEU","GERMANY" -"3276386512","3276386559","NL","NLD","NETHERLANDS" -"3276386560","3276386567","DE","DEU","GERMANY" -"3276386568","3276386575","NL","NLD","NETHERLANDS" -"3276386576","3276386583","DE","DEU","GERMANY" -"3276386584","3276386599","NL","NLD","NETHERLANDS" -"3276386600","3276386607","DE","DEU","GERMANY" -"3276386608","3276386615","NL","NLD","NETHERLANDS" -"3276386616","3276386623","DE","DEU","GERMANY" -"3276386624","3276386655","NL","NLD","NETHERLANDS" -"3276386656","3276386663","DE","DEU","GERMANY" -"3276386664","3276386727","NL","NLD","NETHERLANDS" -"3276386728","3276386735","DE","DEU","GERMANY" -"3276386736","3276386743","NL","NLD","NETHERLANDS" -"3276386744","3276386751","DE","DEU","GERMANY" -"3276386752","3276386759","NL","NLD","NETHERLANDS" -"3276386760","3276386767","DE","DEU","GERMANY" -"3276386768","3276386831","NL","NLD","NETHERLANDS" -"3276386832","3276386839","DE","DEU","GERMANY" -"3276386840","3276386847","NL","NLD","NETHERLANDS" -"3276386848","3276386855","DE","DEU","GERMANY" -"3276386856","3276386863","NL","NLD","NETHERLANDS" -"3276386864","3276386871","DE","DEU","GERMANY" -"3276386872","3276386879","NL","NLD","NETHERLANDS" -"3276386880","3276386887","DE","DEU","GERMANY" -"3276386888","3276386895","NL","NLD","NETHERLANDS" -"3276386896","3276386903","DE","DEU","GERMANY" -"3276386904","3276386927","NL","NLD","NETHERLANDS" -"3276386928","3276386935","DE","DEU","GERMANY" -"3276386936","3276386951","NL","NLD","NETHERLANDS" -"3276386952","3276386959","DE","DEU","GERMANY" -"3276386960","3276386975","NL","NLD","NETHERLANDS" -"3276386976","3276386983","DE","DEU","GERMANY" -"3276386984","3276387007","NL","NLD","NETHERLANDS" -"3276387008","3276387015","DE","DEU","GERMANY" -"3276387016","3276387071","NL","NLD","NETHERLANDS" -"3276387072","3276387079","DE","DEU","GERMANY" -"3276387080","3276387199","NL","NLD","NETHERLANDS" -"3276387200","3276387207","DE","DEU","GERMANY" -"3276387208","3276387231","NL","NLD","NETHERLANDS" -"3276387232","3276387239","DE","DEU","GERMANY" -"3276387240","3276387247","NL","NLD","NETHERLANDS" -"3276387248","3276387255","DE","DEU","GERMANY" -"3276387256","3276387263","NL","NLD","NETHERLANDS" -"3276387264","3276387271","DE","DEU","GERMANY" -"3276387272","3276387311","NL","NLD","NETHERLANDS" -"3276387312","3276387319","DE","DEU","GERMANY" -"3276387320","3276387383","NL","NLD","NETHERLANDS" -"3276387384","3276387391","DE","DEU","GERMANY" -"3276387392","3276387399","NL","NLD","NETHERLANDS" -"3276387400","3276387415","DE","DEU","GERMANY" -"3276387416","3276387423","NL","NLD","NETHERLANDS" -"3276387424","3276387431","DE","DEU","GERMANY" -"3276387432","3276387439","NL","NLD","NETHERLANDS" -"3276387440","3276387455","DE","DEU","GERMANY" -"3276387456","3276387471","NL","NLD","NETHERLANDS" -"3276387472","3276387487","DE","DEU","GERMANY" -"3276387488","3276387511","NL","NLD","NETHERLANDS" -"3276387512","3276387519","DE","DEU","GERMANY" -"3276387520","3276387559","NL","NLD","NETHERLANDS" -"3276387560","3276387567","DE","DEU","GERMANY" -"3276387568","3276387575","NL","NLD","NETHERLANDS" -"3276387576","3276387591","DE","DEU","GERMANY" -"3276387592","3276387599","NL","NLD","NETHERLANDS" -"3276387600","3276387615","DE","DEU","GERMANY" -"3276387616","3276387639","NL","NLD","NETHERLANDS" -"3276387640","3276387647","DE","DEU","GERMANY" -"3276387648","3276387671","NL","NLD","NETHERLANDS" -"3276387672","3276387679","DE","DEU","GERMANY" -"3276387680","3276387887","NL","NLD","NETHERLANDS" -"3276387888","3276387895","DE","DEU","GERMANY" -"3276387896","3276387911","NL","NLD","NETHERLANDS" -"3276387912","3276387927","DE","DEU","GERMANY" -"3276387928","3276387983","NL","NLD","NETHERLANDS" -"3276387984","3276387991","DE","DEU","GERMANY" -"3276387992","3276388015","NL","NLD","NETHERLANDS" -"3276388016","3276388023","DE","DEU","GERMANY" -"3276388024","3276388191","NL","NLD","NETHERLANDS" -"3276388192","3276388199","DE","DEU","GERMANY" -"3276388200","3276388207","NL","NLD","NETHERLANDS" -"3276388208","3276388215","DE","DEU","GERMANY" -"3276388216","3276388223","NL","NLD","NETHERLANDS" -"3276388224","3276388231","DE","DEU","GERMANY" -"3276388232","3276388239","NL","NLD","NETHERLANDS" -"3276388240","3276388255","DE","DEU","GERMANY" -"3276388256","3276388279","NL","NLD","NETHERLANDS" -"3276388280","3276388287","DE","DEU","GERMANY" -"3276388288","3276388303","NL","NLD","NETHERLANDS" -"3276388304","3276388311","DE","DEU","GERMANY" -"3276388312","3276388319","NL","NLD","NETHERLANDS" -"3276388320","3276388327","DE","DEU","GERMANY" -"3276388328","3276388375","NL","NLD","NETHERLANDS" -"3276388376","3276388383","DE","DEU","GERMANY" -"3276388384","3276388519","NL","NLD","NETHERLANDS" -"3276388520","3276388527","DE","DEU","GERMANY" -"3276388528","3276388783","NL","NLD","NETHERLANDS" -"3276388784","3276388791","DE","DEU","GERMANY" -"3276388792","3276388815","NL","NLD","NETHERLANDS" -"3276388816","3276388831","DE","DEU","GERMANY" -"3276388832","3276388879","NL","NLD","NETHERLANDS" -"3276388880","3276388887","DE","DEU","GERMANY" -"3276388888","3276388975","NL","NLD","NETHERLANDS" -"3276388976","3276388983","DE","DEU","GERMANY" -"3276388984","3276389055","NL","NLD","NETHERLANDS" -"3276389056","3276389063","DE","DEU","GERMANY" -"3276389064","3276389159","NL","NLD","NETHERLANDS" -"3276389160","3276389167","DE","DEU","GERMANY" -"3276389168","3276389199","NL","NLD","NETHERLANDS" -"3276389200","3276389207","DE","DEU","GERMANY" -"3276389208","3276389231","NL","NLD","NETHERLANDS" -"3276389232","3276389239","DE","DEU","GERMANY" -"3276389240","3276389303","NL","NLD","NETHERLANDS" -"3276389304","3276389311","DE","DEU","GERMANY" -"3276389312","3276389335","NL","NLD","NETHERLANDS" -"3276389336","3276389343","DE","DEU","GERMANY" -"3276389344","3276389351","NL","NLD","NETHERLANDS" -"3276389352","3276389359","DE","DEU","GERMANY" -"3276389360","3276389391","NL","NLD","NETHERLANDS" -"3276389392","3276389399","DE","DEU","GERMANY" -"3276389400","3276389407","NL","NLD","NETHERLANDS" -"3276389408","3276389415","DE","DEU","GERMANY" -"3276389416","3276389431","NL","NLD","NETHERLANDS" -"3276389432","3276389439","DE","DEU","GERMANY" -"3276389440","3276389447","NL","NLD","NETHERLANDS" -"3276389448","3276389455","DE","DEU","GERMANY" -"3276389456","3276389575","NL","NLD","NETHERLANDS" -"3276389576","3276389607","DE","DEU","GERMANY" -"3276389608","3276389615","NL","NLD","NETHERLANDS" -"3276389616","3276389623","DE","DEU","GERMANY" -"3276389624","3276389695","NL","NLD","NETHERLANDS" -"3276389696","3276389703","DE","DEU","GERMANY" -"3276389704","3276389711","NL","NLD","NETHERLANDS" -"3276389712","3276389727","DE","DEU","GERMANY" -"3276389728","3276389791","NL","NLD","NETHERLANDS" -"3276389792","3276389815","DE","DEU","GERMANY" -"3276389816","3276389887","NL","NLD","NETHERLANDS" -"3276389888","3276389903","DE","DEU","GERMANY" -"3276389904","3276389951","NL","NLD","NETHERLANDS" -"3276389952","3276389967","DE","DEU","GERMANY" -"3276389968","3276390231","NL","NLD","NETHERLANDS" -"3276390232","3276390239","DE","DEU","GERMANY" -"3276390240","3276390295","NL","NLD","NETHERLANDS" -"3276390296","3276390303","DE","DEU","GERMANY" -"3276390304","3276390351","NL","NLD","NETHERLANDS" -"3276390352","3276390359","DE","DEU","GERMANY" -"3276390360","3276390383","NL","NLD","NETHERLANDS" -"3276390384","3276390391","DE","DEU","GERMANY" -"3276390392","3276390407","NL","NLD","NETHERLANDS" -"3276390408","3276390423","DE","DEU","GERMANY" -"3276390424","3276390431","NL","NLD","NETHERLANDS" -"3276390432","3276390439","DE","DEU","GERMANY" -"3276390440","3276390463","NL","NLD","NETHERLANDS" -"3276390464","3276390471","DE","DEU","GERMANY" -"3276390472","3276390527","NL","NLD","NETHERLANDS" -"3276390528","3276390535","DE","DEU","GERMANY" -"3276390536","3276390591","NL","NLD","NETHERLANDS" -"3276390592","3276390599","DE","DEU","GERMANY" -"3276390600","3276390687","NL","NLD","NETHERLANDS" -"3276390688","3276390695","DE","DEU","GERMANY" -"3276390696","3276390711","NL","NLD","NETHERLANDS" -"3276390712","3276390719","DE","DEU","GERMANY" -"3276390720","3276390727","NL","NLD","NETHERLANDS" -"3276390728","3276390735","DE","DEU","GERMANY" -"3276390736","3276390807","NL","NLD","NETHERLANDS" -"3276390808","3276390815","DE","DEU","GERMANY" -"3276390816","3276390911","NL","NLD","NETHERLANDS" -"3276390912","3276390919","DE","DEU","GERMANY" -"3276390920","3276390927","NL","NLD","NETHERLANDS" -"3276390928","3276390943","DE","DEU","GERMANY" -"3276390944","3276390959","NL","NLD","NETHERLANDS" -"3276390960","3276390967","DE","DEU","GERMANY" -"3276390968","3276390983","NL","NLD","NETHERLANDS" -"3276390984","3276390991","DE","DEU","GERMANY" -"3276390992","3276391023","NL","NLD","NETHERLANDS" -"3276391024","3276391047","DE","DEU","GERMANY" -"3276391048","3276391111","NL","NLD","NETHERLANDS" -"3276391112","3276391119","DE","DEU","GERMANY" -"3276391120","3276391191","NL","NLD","NETHERLANDS" -"3276391192","3276391207","DE","DEU","GERMANY" -"3276391208","3276391215","NL","NLD","NETHERLANDS" -"3276391216","3276391223","DE","DEU","GERMANY" -"3276391224","3276391343","NL","NLD","NETHERLANDS" -"3276391344","3276391351","DE","DEU","GERMANY" -"3276391352","3276391407","NL","NLD","NETHERLANDS" -"3276391408","3276391415","DE","DEU","GERMANY" -"3276391416","3276391439","NL","NLD","NETHERLANDS" -"3276391440","3276391447","DE","DEU","GERMANY" -"3276391448","3276391495","NL","NLD","NETHERLANDS" -"3276391496","3276391503","DE","DEU","GERMANY" -"3276391504","3276391535","NL","NLD","NETHERLANDS" -"3276391536","3276391543","DE","DEU","GERMANY" -"3276391544","3276391591","NL","NLD","NETHERLANDS" -"3276391592","3276391599","DE","DEU","GERMANY" -"3276391600","3276391719","NL","NLD","NETHERLANDS" -"3276391720","3276391727","DE","DEU","GERMANY" -"3276391728","3276391791","NL","NLD","NETHERLANDS" -"3276391792","3276391799","DE","DEU","GERMANY" -"3276391800","3276391815","NL","NLD","NETHERLANDS" -"3276391816","3276391823","DE","DEU","GERMANY" -"3276391824","3276391895","NL","NLD","NETHERLANDS" -"3276391896","3276391903","DE","DEU","GERMANY" -"3276391904","3276391935","NL","NLD","NETHERLANDS" -"3276391936","3276391943","DE","DEU","GERMANY" -"3276391944","3276392079","NL","NLD","NETHERLANDS" -"3276392080","3276392087","DE","DEU","GERMANY" -"3276392088","3276392119","NL","NLD","NETHERLANDS" -"3276392120","3276392127","DE","DEU","GERMANY" -"3276392128","3276392143","NL","NLD","NETHERLANDS" -"3276392144","3276392151","DE","DEU","GERMANY" -"3276392152","3276392239","NL","NLD","NETHERLANDS" -"3276392240","3276392247","DE","DEU","GERMANY" -"3276392248","3276392255","NL","NLD","NETHERLANDS" -"3276392256","3276392263","DE","DEU","GERMANY" -"3276392264","3276392279","NL","NLD","NETHERLANDS" -"3276392280","3276392287","DE","DEU","GERMANY" -"3276392288","3276392319","NL","NLD","NETHERLANDS" -"3276392320","3276392327","DE","DEU","GERMANY" -"3276392328","3276392351","NL","NLD","NETHERLANDS" -"3276392352","3276392359","DE","DEU","GERMANY" -"3276392360","3276392423","NL","NLD","NETHERLANDS" -"3276392424","3276392431","DE","DEU","GERMANY" -"3276392432","3276392519","NL","NLD","NETHERLANDS" -"3276392520","3276392527","DE","DEU","GERMANY" -"3276392528","3276392615","NL","NLD","NETHERLANDS" -"3276392616","3276392631","DE","DEU","GERMANY" -"3276392632","3276392679","NL","NLD","NETHERLANDS" -"3276392680","3276392687","DE","DEU","GERMANY" -"3276392688","3276392751","NL","NLD","NETHERLANDS" -"3276392752","3276392759","DE","DEU","GERMANY" -"3276392760","3276392903","NL","NLD","NETHERLANDS" -"3276392904","3276392911","DE","DEU","GERMANY" -"3276392912","3276392935","NL","NLD","NETHERLANDS" -"3276392936","3276392943","DE","DEU","GERMANY" -"3276392944","3276392959","NL","NLD","NETHERLANDS" -"3276392960","3276392967","DE","DEU","GERMANY" -"3276392968","3276392991","NL","NLD","NETHERLANDS" -"3276392992","3276392999","DE","DEU","GERMANY" -"3276393000","3276393007","NL","NLD","NETHERLANDS" -"3276393008","3276393023","DE","DEU","GERMANY" -"3276393024","3276393159","NL","NLD","NETHERLANDS" -"3276393160","3276393167","DE","DEU","GERMANY" -"3276393168","3276393399","NL","NLD","NETHERLANDS" -"3276393400","3276393407","DE","DEU","GERMANY" -"3276393408","3276393423","NL","NLD","NETHERLANDS" -"3276393424","3276393431","DE","DEU","GERMANY" -"3276393432","3276393447","NL","NLD","NETHERLANDS" -"3276393448","3276393455","DE","DEU","GERMANY" -"3276393456","3276393463","NL","NLD","NETHERLANDS" -"3276393464","3276393479","DE","DEU","GERMANY" -"3276393480","3276393511","NL","NLD","NETHERLANDS" -"3276393512","3276393519","DE","DEU","GERMANY" -"3276393520","3276393599","NL","NLD","NETHERLANDS" -"3276393600","3276393615","DE","DEU","GERMANY" -"3276393616","3276393695","NL","NLD","NETHERLANDS" -"3276393696","3276393703","DE","DEU","GERMANY" -"3276393704","3276393783","NL","NLD","NETHERLANDS" -"3276393784","3276393791","DE","DEU","GERMANY" -"3276393792","3276393799","NL","NLD","NETHERLANDS" -"3276393800","3276393815","DE","DEU","GERMANY" -"3276393816","3276393823","NL","NLD","NETHERLANDS" -"3276393824","3276393831","DE","DEU","GERMANY" -"3276393832","3276393871","NL","NLD","NETHERLANDS" -"3276393872","3276393879","DE","DEU","GERMANY" -"3276393880","3276393903","NL","NLD","NETHERLANDS" -"3276393904","3276393911","DE","DEU","GERMANY" -"3276393912","3276393983","NL","NLD","NETHERLANDS" -"3276393984","3276393999","DE","DEU","GERMANY" -"3276394000","3276394015","NL","NLD","NETHERLANDS" -"3276394016","3276394023","DE","DEU","GERMANY" -"3276394024","3276394063","NL","NLD","NETHERLANDS" -"3276394064","3276394071","DE","DEU","GERMANY" -"3276394072","3276394191","NL","NLD","NETHERLANDS" -"3276394192","3276394199","DE","DEU","GERMANY" -"3276394200","3276394215","NL","NLD","NETHERLANDS" -"3276394216","3276394223","DE","DEU","GERMANY" -"3276394224","3276394279","NL","NLD","NETHERLANDS" -"3276394280","3276394287","DE","DEU","GERMANY" -"3276394288","3276394327","NL","NLD","NETHERLANDS" -"3276394328","3276394335","DE","DEU","GERMANY" -"3276394336","3276394351","NL","NLD","NETHERLANDS" -"3276394352","3276394359","DE","DEU","GERMANY" -"3276394360","3276394471","NL","NLD","NETHERLANDS" -"3276394472","3276394487","DE","DEU","GERMANY" -"3276394488","3276394495","NL","NLD","NETHERLANDS" -"3276394496","3276394511","DE","DEU","GERMANY" -"3276394512","3276394575","NL","NLD","NETHERLANDS" -"3276394576","3276394591","DE","DEU","GERMANY" -"3276394592","3276394671","NL","NLD","NETHERLANDS" -"3276394672","3276394687","DE","DEU","GERMANY" -"3276394688","3276394695","NL","NLD","NETHERLANDS" -"3276394696","3276394703","DE","DEU","GERMANY" -"3276394704","3276394775","NL","NLD","NETHERLANDS" -"3276394776","3276394783","DE","DEU","GERMANY" -"3276394784","3276394815","NL","NLD","NETHERLANDS" -"3276394816","3276394823","DE","DEU","GERMANY" -"3276394824","3276394871","NL","NLD","NETHERLANDS" -"3276394872","3276394879","DE","DEU","GERMANY" -"3276394880","3276394919","NL","NLD","NETHERLANDS" -"3276394920","3276394927","DE","DEU","GERMANY" -"3276394928","3276394951","NL","NLD","NETHERLANDS" -"3276394952","3276394959","DE","DEU","GERMANY" -"3276394960","3276395047","NL","NLD","NETHERLANDS" -"3276395048","3276395055","DE","DEU","GERMANY" -"3276395056","3276395063","NL","NLD","NETHERLANDS" -"3276395064","3276395071","DE","DEU","GERMANY" -"3276395072","3276395095","NL","NLD","NETHERLANDS" -"3276395096","3276395103","DE","DEU","GERMANY" -"3276395104","3276395175","NL","NLD","NETHERLANDS" -"3276395176","3276395183","DE","DEU","GERMANY" -"3276395184","3276395191","NL","NLD","NETHERLANDS" -"3276395192","3276395199","DE","DEU","GERMANY" -"3276395200","3276395295","NL","NLD","NETHERLANDS" -"3276395296","3276395303","DE","DEU","GERMANY" -"3276395304","3276395319","NL","NLD","NETHERLANDS" -"3276395320","3276395327","DE","DEU","GERMANY" -"3276395328","3276395423","NL","NLD","NETHERLANDS" -"3276395424","3276395439","DE","DEU","GERMANY" -"3276395440","3276395487","NL","NLD","NETHERLANDS" -"3276395488","3276395495","DE","DEU","GERMANY" -"3276395496","3276395543","NL","NLD","NETHERLANDS" -"3276395544","3276395551","DE","DEU","GERMANY" -"3276395552","3276395567","NL","NLD","NETHERLANDS" -"3276395568","3276395575","DE","DEU","GERMANY" -"3276395576","3276395599","NL","NLD","NETHERLANDS" -"3276395600","3276395607","DE","DEU","GERMANY" -"3276395608","3276395647","NL","NLD","NETHERLANDS" -"3276395648","3276395655","DE","DEU","GERMANY" -"3276395656","3276395687","NL","NLD","NETHERLANDS" -"3276395688","3276395695","DE","DEU","GERMANY" -"3276395696","3276395743","NL","NLD","NETHERLANDS" -"3276395744","3276395751","DE","DEU","GERMANY" -"3276395752","3276395759","NL","NLD","NETHERLANDS" -"3276395760","3276395767","DE","DEU","GERMANY" -"3276395768","3276395807","NL","NLD","NETHERLANDS" -"3276395808","3276395815","DE","DEU","GERMANY" -"3276395816","3276395831","NL","NLD","NETHERLANDS" -"3276395832","3276395839","DE","DEU","GERMANY" -"3276395840","3276395871","NL","NLD","NETHERLANDS" -"3276395872","3276395879","DE","DEU","GERMANY" -"3276395880","3276395959","NL","NLD","NETHERLANDS" -"3276395960","3276395975","DE","DEU","GERMANY" -"3276395976","3276396007","NL","NLD","NETHERLANDS" -"3276396008","3276396023","DE","DEU","GERMANY" -"3276396024","3276396047","NL","NLD","NETHERLANDS" -"3276396048","3276396055","DE","DEU","GERMANY" -"3276396056","3276396095","NL","NLD","NETHERLANDS" -"3276396096","3276396103","DE","DEU","GERMANY" -"3276396104","3276396111","NL","NLD","NETHERLANDS" -"3276396112","3276396119","DE","DEU","GERMANY" -"3276396120","3276396207","NL","NLD","NETHERLANDS" -"3276396208","3276396223","DE","DEU","GERMANY" -"3276396224","3276396287","NL","NLD","NETHERLANDS" -"3276396288","3276396295","DE","DEU","GERMANY" -"3276396296","3276396319","NL","NLD","NETHERLANDS" -"3276396320","3276396327","DE","DEU","GERMANY" -"3276396328","3276396351","NL","NLD","NETHERLANDS" -"3276396352","3276396359","DE","DEU","GERMANY" -"3276396360","3276396399","NL","NLD","NETHERLANDS" -"3276396400","3276396415","DE","DEU","GERMANY" -"3276396416","3276396431","NL","NLD","NETHERLANDS" -"3276396432","3276396439","DE","DEU","GERMANY" -"3276396440","3276396471","NL","NLD","NETHERLANDS" -"3276396472","3276396495","DE","DEU","GERMANY" -"3276396496","3276396527","NL","NLD","NETHERLANDS" -"3276396528","3276396535","DE","DEU","GERMANY" -"3276396536","3276396583","NL","NLD","NETHERLANDS" -"3276396584","3276396591","DE","DEU","GERMANY" -"3276396592","3276396599","NL","NLD","NETHERLANDS" -"3276396600","3276396607","DE","DEU","GERMANY" -"3276396608","3276396615","NL","NLD","NETHERLANDS" -"3276396616","3276396623","DE","DEU","GERMANY" -"3276396624","3276396655","NL","NLD","NETHERLANDS" -"3276396656","3276396663","DE","DEU","GERMANY" -"3276396664","3276396719","NL","NLD","NETHERLANDS" -"3276396720","3276396735","DE","DEU","GERMANY" -"3276396736","3276396759","NL","NLD","NETHERLANDS" -"3276396760","3276396767","DE","DEU","GERMANY" -"3276396768","3276396783","NL","NLD","NETHERLANDS" -"3276396784","3276396791","DE","DEU","GERMANY" -"3276396792","3276396991","NL","NLD","NETHERLANDS" -"3276396992","3276397007","DE","DEU","GERMANY" -"3276397008","3276397031","NL","NLD","NETHERLANDS" -"3276397032","3276397039","DE","DEU","GERMANY" -"3276397040","3276397055","NL","NLD","NETHERLANDS" -"3276397056","3276397063","DE","DEU","GERMANY" -"3276397064","3276397215","NL","NLD","NETHERLANDS" -"3276397216","3276397223","DE","DEU","GERMANY" -"3276397224","3276397327","NL","NLD","NETHERLANDS" -"3276397328","3276397335","DE","DEU","GERMANY" -"3276397336","3276397343","NL","NLD","NETHERLANDS" -"3276397344","3276397351","DE","DEU","GERMANY" -"3276397352","3276397479","NL","NLD","NETHERLANDS" -"3276397480","3276397487","DE","DEU","GERMANY" -"3276397488","3276397535","NL","NLD","NETHERLANDS" -"3276397536","3276397543","DE","DEU","GERMANY" -"3276397544","3276397559","NL","NLD","NETHERLANDS" -"3276397560","3276397567","DE","DEU","GERMANY" -"3276397568","3276397743","NL","NLD","NETHERLANDS" -"3276397744","3276397751","DE","DEU","GERMANY" -"3276397752","3276397791","NL","NLD","NETHERLANDS" -"3276397792","3276397815","DE","DEU","GERMANY" -"3276397816","3276397871","NL","NLD","NETHERLANDS" -"3276397872","3276397879","DE","DEU","GERMANY" -"3276397880","3276397895","NL","NLD","NETHERLANDS" -"3276397896","3276397911","DE","DEU","GERMANY" -"3276397912","3276397935","NL","NLD","NETHERLANDS" -"3276397936","3276397943","DE","DEU","GERMANY" -"3276397944","3276397967","NL","NLD","NETHERLANDS" -"3276397968","3276397975","DE","DEU","GERMANY" -"3276397976","3276397983","NL","NLD","NETHERLANDS" -"3276397984","3276397991","DE","DEU","GERMANY" -"3276397992","3276398047","NL","NLD","NETHERLANDS" -"3276398048","3276398055","DE","DEU","GERMANY" -"3276398056","3276398071","NL","NLD","NETHERLANDS" -"3276398072","3276398079","DE","DEU","GERMANY" -"3276398080","3276398255","NL","NLD","NETHERLANDS" -"3276398256","3276398271","DE","DEU","GERMANY" -"3276398272","3276398287","NL","NLD","NETHERLANDS" -"3276398288","3276398295","DE","DEU","GERMANY" -"3276398296","3276398311","NL","NLD","NETHERLANDS" -"3276398312","3276398319","DE","DEU","GERMANY" -"3276398320","3276398351","NL","NLD","NETHERLANDS" -"3276398352","3276398359","DE","DEU","GERMANY" -"3276398360","3276398367","NL","NLD","NETHERLANDS" -"3276398368","3276398375","DE","DEU","GERMANY" -"3276398376","3276398423","NL","NLD","NETHERLANDS" -"3276398424","3276398447","DE","DEU","GERMANY" -"3276398448","3276398455","NL","NLD","NETHERLANDS" -"3276398456","3276398463","DE","DEU","GERMANY" -"3276398464","3276398511","NL","NLD","NETHERLANDS" -"3276398512","3276398519","DE","DEU","GERMANY" -"3276398520","3276398559","NL","NLD","NETHERLANDS" -"3276398560","3276398567","DE","DEU","GERMANY" -"3276398568","3276398575","NL","NLD","NETHERLANDS" -"3276398576","3276398583","DE","DEU","GERMANY" -"3276398584","3276398591","NL","NLD","NETHERLANDS" -"3276398592","3276398607","DE","DEU","GERMANY" -"3276398608","3276398623","NL","NLD","NETHERLANDS" -"3276398624","3276398631","DE","DEU","GERMANY" -"3276398632","3276398679","NL","NLD","NETHERLANDS" -"3276398680","3276398687","DE","DEU","GERMANY" -"3276398688","3276398783","NL","NLD","NETHERLANDS" -"3276398784","3276398807","DE","DEU","GERMANY" -"3276398808","3276398839","NL","NLD","NETHERLANDS" -"3276398840","3276398855","DE","DEU","GERMANY" -"3276398856","3276398927","NL","NLD","NETHERLANDS" -"3276398928","3276398935","DE","DEU","GERMANY" -"3276398936","3276398959","NL","NLD","NETHERLANDS" -"3276398960","3276398967","DE","DEU","GERMANY" -"3276398968","3276398983","NL","NLD","NETHERLANDS" -"3276398984","3276398991","DE","DEU","GERMANY" -"3276398992","3276399015","NL","NLD","NETHERLANDS" -"3276399016","3276399023","DE","DEU","GERMANY" -"3276399024","3276399031","NL","NLD","NETHERLANDS" -"3276399032","3276399039","DE","DEU","GERMANY" -"3276399040","3276399079","NL","NLD","NETHERLANDS" -"3276399080","3276399087","DE","DEU","GERMANY" -"3276399088","3276399191","NL","NLD","NETHERLANDS" -"3276399192","3276399199","DE","DEU","GERMANY" -"3276399200","3276399279","NL","NLD","NETHERLANDS" -"3276399280","3276399287","DE","DEU","GERMANY" -"3276399288","3276399319","NL","NLD","NETHERLANDS" -"3276399320","3276399327","DE","DEU","GERMANY" -"3276399328","3276399495","NL","NLD","NETHERLANDS" -"3276399496","3276399503","DE","DEU","GERMANY" -"3276399504","3276399511","NL","NLD","NETHERLANDS" -"3276399512","3276399519","DE","DEU","GERMANY" -"3276399520","3276399527","NL","NLD","NETHERLANDS" -"3276399528","3276399535","DE","DEU","GERMANY" -"3276399536","3276399583","NL","NLD","NETHERLANDS" -"3276399584","3276399615","DE","DEU","GERMANY" -"3276399616","3276399679","NL","NLD","NETHERLANDS" -"3276399680","3276399687","DE","DEU","GERMANY" -"3276399688","3276399807","NL","NLD","NETHERLANDS" -"3276399808","3276399823","DE","DEU","GERMANY" -"3276399824","3276399895","NL","NLD","NETHERLANDS" -"3276399896","3276399903","DE","DEU","GERMANY" -"3276399904","3276399935","NL","NLD","NETHERLANDS" -"3276399936","3276399951","DE","DEU","GERMANY" -"3276399952","3276399983","NL","NLD","NETHERLANDS" -"3276399984","3276399991","DE","DEU","GERMANY" -"3276399992","3276400007","NL","NLD","NETHERLANDS" -"3276400008","3276400015","DE","DEU","GERMANY" -"3276400016","3276400023","NL","NLD","NETHERLANDS" -"3276400024","3276400031","DE","DEU","GERMANY" -"3276400032","3276400087","NL","NLD","NETHERLANDS" -"3276400088","3276400095","DE","DEU","GERMANY" -"3276400096","3276400151","NL","NLD","NETHERLANDS" -"3276400152","3276400159","DE","DEU","GERMANY" -"3276400160","3276400223","NL","NLD","NETHERLANDS" -"3276400224","3276400231","DE","DEU","GERMANY" -"3276400232","3276400239","NL","NLD","NETHERLANDS" -"3276400240","3276400247","DE","DEU","GERMANY" -"3276400248","3276400295","NL","NLD","NETHERLANDS" -"3276400296","3276400303","DE","DEU","GERMANY" -"3276400304","3276400343","NL","NLD","NETHERLANDS" -"3276400344","3276400351","DE","DEU","GERMANY" -"3276400352","3276400487","NL","NLD","NETHERLANDS" -"3276400488","3276400495","DE","DEU","GERMANY" -"3276400496","3276400503","NL","NLD","NETHERLANDS" -"3276400504","3276400519","DE","DEU","GERMANY" -"3276400520","3276400527","NL","NLD","NETHERLANDS" -"3276400528","3276400535","DE","DEU","GERMANY" -"3276400536","3276400543","NL","NLD","NETHERLANDS" -"3276400544","3276400551","DE","DEU","GERMANY" -"3276400552","3276400639","NL","NLD","NETHERLANDS" -"3276400640","3276400647","DE","DEU","GERMANY" -"3276400648","3276400839","NL","NLD","NETHERLANDS" -"3276400840","3276400847","DE","DEU","GERMANY" -"3276400848","3276400855","NL","NLD","NETHERLANDS" -"3276400856","3276400863","DE","DEU","GERMANY" -"3276400864","3276400895","NL","NLD","NETHERLANDS" -"3276400896","3276400911","DE","DEU","GERMANY" -"3276400912","3276401023","NL","NLD","NETHERLANDS" -"3276401024","3276401031","DE","DEU","GERMANY" -"3276401032","3276401063","NL","NLD","NETHERLANDS" -"3276401064","3276401071","DE","DEU","GERMANY" -"3276401072","3276401087","NL","NLD","NETHERLANDS" -"3276401088","3276401095","DE","DEU","GERMANY" -"3276401096","3276401111","NL","NLD","NETHERLANDS" -"3276401112","3276401119","DE","DEU","GERMANY" -"3276401120","3276401167","NL","NLD","NETHERLANDS" -"3276401168","3276401175","DE","DEU","GERMANY" -"3276401176","3276401215","NL","NLD","NETHERLANDS" -"3276401216","3276401223","DE","DEU","GERMANY" -"3276401224","3276401239","NL","NLD","NETHERLANDS" -"3276401240","3276401247","DE","DEU","GERMANY" -"3276401248","3276401279","NL","NLD","NETHERLANDS" -"3276401280","3276401287","DE","DEU","GERMANY" -"3276401288","3276401327","NL","NLD","NETHERLANDS" -"3276401328","3276401335","DE","DEU","GERMANY" -"3276401336","3276401391","NL","NLD","NETHERLANDS" -"3276401392","3276401399","DE","DEU","GERMANY" -"3276401400","3276401455","NL","NLD","NETHERLANDS" -"3276401456","3276401463","DE","DEU","GERMANY" -"3276401464","3276401535","NL","NLD","NETHERLANDS" -"3276401536","3276401543","DE","DEU","GERMANY" -"3276401544","3276401583","NL","NLD","NETHERLANDS" -"3276401584","3276401591","DE","DEU","GERMANY" -"3276401592","3276401615","NL","NLD","NETHERLANDS" -"3276401616","3276401623","DE","DEU","GERMANY" -"3276401624","3276401703","NL","NLD","NETHERLANDS" -"3276401704","3276401711","DE","DEU","GERMANY" -"3276401712","3276401727","NL","NLD","NETHERLANDS" -"3276401728","3276401735","DE","DEU","GERMANY" -"3276401736","3276401743","NL","NLD","NETHERLANDS" -"3276401744","3276401759","DE","DEU","GERMANY" -"3276401760","3276401775","NL","NLD","NETHERLANDS" -"3276401776","3276401783","DE","DEU","GERMANY" -"3276401784","3276401855","NL","NLD","NETHERLANDS" -"3276401856","3276401863","DE","DEU","GERMANY" -"3276401864","3276401919","NL","NLD","NETHERLANDS" -"3276401920","3276401927","DE","DEU","GERMANY" -"3276401928","3276401943","NL","NLD","NETHERLANDS" -"3276401944","3276401959","DE","DEU","GERMANY" -"3276401960","3276401975","NL","NLD","NETHERLANDS" -"3276401976","3276401983","DE","DEU","GERMANY" -"3276401984","3276401991","NL","NLD","NETHERLANDS" -"3276401992","3276402007","DE","DEU","GERMANY" -"3276402008","3276402055","NL","NLD","NETHERLANDS" -"3276402056","3276402063","DE","DEU","GERMANY" -"3276402064","3276402271","NL","NLD","NETHERLANDS" -"3276402272","3276402279","DE","DEU","GERMANY" -"3276402280","3276402303","NL","NLD","NETHERLANDS" -"3276402304","3276402311","DE","DEU","GERMANY" -"3276402312","3276402327","NL","NLD","NETHERLANDS" -"3276402328","3276402351","DE","DEU","GERMANY" -"3276402352","3276402383","NL","NLD","NETHERLANDS" -"3276402384","3276402391","DE","DEU","GERMANY" -"3276402392","3276402415","NL","NLD","NETHERLANDS" -"3276402416","3276402423","DE","DEU","GERMANY" -"3276402424","3276402439","NL","NLD","NETHERLANDS" -"3276402440","3276402447","DE","DEU","GERMANY" -"3276402448","3276402503","NL","NLD","NETHERLANDS" -"3276402504","3276402511","DE","DEU","GERMANY" -"3276402512","3276402519","NL","NLD","NETHERLANDS" -"3276402520","3276402527","DE","DEU","GERMANY" -"3276402528","3276402591","NL","NLD","NETHERLANDS" -"3276402592","3276402599","DE","DEU","GERMANY" -"3276402600","3276402607","NL","NLD","NETHERLANDS" -"3276402608","3276402615","DE","DEU","GERMANY" -"3276402616","3276402639","NL","NLD","NETHERLANDS" -"3276402640","3276402647","DE","DEU","GERMANY" -"3276402648","3276402655","NL","NLD","NETHERLANDS" -"3276402656","3276402671","DE","DEU","GERMANY" -"3276402672","3276402711","NL","NLD","NETHERLANDS" -"3276402712","3276402719","DE","DEU","GERMANY" -"3276402720","3276402735","NL","NLD","NETHERLANDS" -"3276402736","3276402743","DE","DEU","GERMANY" -"3276402744","3276402759","NL","NLD","NETHERLANDS" -"3276402760","3276402767","DE","DEU","GERMANY" -"3276402768","3276402783","NL","NLD","NETHERLANDS" -"3276402784","3276402791","DE","DEU","GERMANY" -"3276402792","3276402847","NL","NLD","NETHERLANDS" -"3276402848","3276402855","DE","DEU","GERMANY" -"3276402856","3276402959","NL","NLD","NETHERLANDS" -"3276402960","3276402967","DE","DEU","GERMANY" -"3276402968","3276402975","NL","NLD","NETHERLANDS" -"3276402976","3276402983","DE","DEU","GERMANY" -"3276402984","3276403007","NL","NLD","NETHERLANDS" -"3276403008","3276403015","DE","DEU","GERMANY" -"3276403016","3276403023","NL","NLD","NETHERLANDS" -"3276403024","3276403031","DE","DEU","GERMANY" -"3276403032","3276403047","NL","NLD","NETHERLANDS" -"3276403048","3276403055","DE","DEU","GERMANY" -"3276403056","3276403135","NL","NLD","NETHERLANDS" -"3276403136","3276403143","DE","DEU","GERMANY" -"3276403144","3276403151","NL","NLD","NETHERLANDS" -"3276403152","3276403159","DE","DEU","GERMANY" -"3276403160","3276403167","NL","NLD","NETHERLANDS" -"3276403168","3276403191","DE","DEU","GERMANY" -"3276403192","3276403239","NL","NLD","NETHERLANDS" -"3276403240","3276403247","DE","DEU","GERMANY" -"3276403248","3276403271","NL","NLD","NETHERLANDS" -"3276403272","3276403279","DE","DEU","GERMANY" -"3276403280","3276403287","NL","NLD","NETHERLANDS" -"3276403288","3276403295","DE","DEU","GERMANY" -"3276403296","3276403343","NL","NLD","NETHERLANDS" -"3276403344","3276403351","DE","DEU","GERMANY" -"3276403352","3276403367","NL","NLD","NETHERLANDS" -"3276403368","3276403375","DE","DEU","GERMANY" -"3276403376","3276403399","NL","NLD","NETHERLANDS" -"3276403400","3276403407","DE","DEU","GERMANY" -"3276403408","3276403479","NL","NLD","NETHERLANDS" -"3276403480","3276403487","DE","DEU","GERMANY" -"3276403488","3276403495","NL","NLD","NETHERLANDS" -"3276403496","3276403503","DE","DEU","GERMANY" -"3276403504","3276403511","NL","NLD","NETHERLANDS" -"3276403512","3276403519","DE","DEU","GERMANY" -"3276403520","3276403527","NL","NLD","NETHERLANDS" -"3276403528","3276403535","DE","DEU","GERMANY" -"3276403536","3276403567","NL","NLD","NETHERLANDS" -"3276403568","3276403583","DE","DEU","GERMANY" -"3276403584","3276403679","NL","NLD","NETHERLANDS" -"3276403680","3276403687","DE","DEU","GERMANY" -"3276403688","3276403799","NL","NLD","NETHERLANDS" -"3276403800","3276403807","DE","DEU","GERMANY" -"3276403808","3276403839","NL","NLD","NETHERLANDS" -"3276403840","3276403847","DE","DEU","GERMANY" -"3276403848","3276403967","NL","NLD","NETHERLANDS" -"3276403968","3276403975","DE","DEU","GERMANY" -"3276403976","3276403983","NL","NLD","NETHERLANDS" -"3276403984","3276403991","DE","DEU","GERMANY" -"3276403992","3276404023","NL","NLD","NETHERLANDS" -"3276404024","3276404031","DE","DEU","GERMANY" -"3276404032","3276404047","NL","NLD","NETHERLANDS" -"3276404048","3276404055","DE","DEU","GERMANY" -"3276404056","3276404079","NL","NLD","NETHERLANDS" -"3276404080","3276404087","DE","DEU","GERMANY" -"3276404088","3276404119","NL","NLD","NETHERLANDS" -"3276404120","3276404127","DE","DEU","GERMANY" -"3276404128","3276404399","NL","NLD","NETHERLANDS" -"3276404400","3276404407","DE","DEU","GERMANY" -"3276404408","3276404447","NL","NLD","NETHERLANDS" -"3276404448","3276404455","DE","DEU","GERMANY" -"3276404456","3276404479","NL","NLD","NETHERLANDS" -"3276404480","3276404487","DE","DEU","GERMANY" -"3276404488","3276404639","NL","NLD","NETHERLANDS" -"3276404640","3276404647","DE","DEU","GERMANY" -"3276404648","3276404719","NL","NLD","NETHERLANDS" -"3276404720","3276404743","DE","DEU","GERMANY" -"3276404744","3276404903","NL","NLD","NETHERLANDS" -"3276404904","3276404911","DE","DEU","GERMANY" -"3276404912","3276404935","NL","NLD","NETHERLANDS" -"3276404936","3276404943","DE","DEU","GERMANY" -"3276404944","3276405023","NL","NLD","NETHERLANDS" -"3276405024","3276405031","DE","DEU","GERMANY" -"3276405032","3276405063","NL","NLD","NETHERLANDS" -"3276405064","3276405079","DE","DEU","GERMANY" -"3276405080","3276405263","NL","NLD","NETHERLANDS" -"3276405264","3276405271","DE","DEU","GERMANY" -"3276405272","3276405327","NL","NLD","NETHERLANDS" -"3276405328","3276405335","DE","DEU","GERMANY" -"3276405336","3276405391","NL","NLD","NETHERLANDS" -"3276405392","3276405399","DE","DEU","GERMANY" -"3276405400","3276405679","NL","NLD","NETHERLANDS" -"3276405680","3276405687","DE","DEU","GERMANY" -"3276405688","3276405719","NL","NLD","NETHERLANDS" -"3276405720","3276405735","DE","DEU","GERMANY" -"3276405736","3276405759","NL","NLD","NETHERLANDS" -"3276405760","3276405767","DE","DEU","GERMANY" -"3276405768","3276405775","NL","NLD","NETHERLANDS" -"3276405776","3276405783","DE","DEU","GERMANY" -"3276405784","3276405943","NL","NLD","NETHERLANDS" -"3276405944","3276405951","DE","DEU","GERMANY" -"3276405952","3276406159","NL","NLD","NETHERLANDS" -"3276406160","3276406167","DE","DEU","GERMANY" -"3276406168","3276406175","NL","NLD","NETHERLANDS" -"3276406176","3276406183","DE","DEU","GERMANY" -"3276406184","3276406207","NL","NLD","NETHERLANDS" -"3276406208","3276406215","DE","DEU","GERMANY" -"3276406216","3276406287","NL","NLD","NETHERLANDS" -"3276406288","3276406295","DE","DEU","GERMANY" -"3276406296","3276406375","NL","NLD","NETHERLANDS" -"3276406376","3276406383","DE","DEU","GERMANY" -"3276406384","3276406407","NL","NLD","NETHERLANDS" -"3276406408","3276406415","DE","DEU","GERMANY" -"3276406416","3276406511","NL","NLD","NETHERLANDS" -"3276406512","3276406519","DE","DEU","GERMANY" -"3276406520","3276406559","NL","NLD","NETHERLANDS" -"3276406560","3276406567","DE","DEU","GERMANY" -"3276406568","3276406639","NL","NLD","NETHERLANDS" -"3276406640","3276406647","DE","DEU","GERMANY" -"3276406648","3276406759","NL","NLD","NETHERLANDS" -"3276406760","3276406767","DE","DEU","GERMANY" -"3276406768","3276406783","NL","NLD","NETHERLANDS" -"3276406784","3276414975","FI","FIN","FINLAND" -"3276414976","3276415999","DK","DNK","DENMARK" -"3276416000","3276417023","SE","SWE","SWEDEN" -"3276417024","3276419071","DE","DEU","GERMANY" -"3276419072","3276420095","PL","POL","POLAND" -"3276420096","3276421119","GB","GBR","UNITED KINGDOM" -"3276421120","3276422143","PL","POL","POLAND" -"3276422144","3276422655","GB","GBR","UNITED KINGDOM" -"3276422656","3276423167","RU","RUS","RUSSIAN FEDERATION" -"3276423168","3276423423","PL","POL","POLAND" -"3276423424","3276423679","NL","NLD","NETHERLANDS" -"3276423680","3276423935","SE","SWE","SWEDEN" -"3276423936","3276424191","UA","UKR","UKRAINE" -"3276424192","3276424447","GB","GBR","UNITED KINGDOM" -"3276424448","3276424703","PL","POL","POLAND" -"3276424704","3276424959","DE","DEU","GERMANY" -"3276424960","3276425215","RO","ROM","ROMANIA" -"3276425216","3276425471","UA","UKR","UKRAINE" -"3276425472","3276425727","DE","DEU","GERMANY" -"3276425728","3276425983","RU","RUS","RUSSIAN FEDERATION" -"3276425984","3276426239","IT","ITA","ITALY" -"3276426240","3276426751","DK","DNK","DENMARK" -"3276426752","3276427007","RO","ROM","ROMANIA" -"3276427008","3276427263","PL","POL","POLAND" -"3276427264","3276427519","FR","FRA","FRANCE" -"3276427520","3276427775","IT","ITA","ITALY" -"3276427776","3276428031","RU","RUS","RUSSIAN FEDERATION" -"3276428032","3276428287","GB","GBR","UNITED KINGDOM" -"3276428288","3276428543","RU","RUS","RUSSIAN FEDERATION" -"3276428544","3276428799","BG","BGR","BULGARIA" -"3276428800","3276429055","DE","DEU","GERMANY" -"3276429056","3276429311","NL","NLD","NETHERLANDS" -"3276429312","3276430079","RU","RUS","RUSSIAN FEDERATION" -"3276430080","3276430591","PL","POL","POLAND" -"3276430592","3276430847","GB","GBR","UNITED KINGDOM" -"3276430848","3276431103","DE","DEU","GERMANY" -"3276431104","3276431359","RU","RUS","RUSSIAN FEDERATION" -"3276431360","3276447743","GB","GBR","UNITED KINGDOM" -"3276447744","3276451583","DE","DEU","GERMANY" -"3276455936","3276464127","BE","BEL","BELGIUM" -"3276464128","3276472319","GR","GRC","GREECE" -"3276472576","3276472831","AT","AUT","AUSTRIA" -"3276472864","3276472895","AT","AUT","AUSTRIA" -"3276473104","3276473111","AT","AUT","AUSTRIA" -"3276473120","3276473135","AT","AUT","AUSTRIA" -"3276473144","3276473199","AT","AUT","AUSTRIA" -"3276473216","3276473279","AT","AUT","AUSTRIA" -"3276473296","3276473311","AT","AUT","AUSTRIA" -"3276473344","3276473855","AT","AUT","AUSTRIA" -"3276474272","3276474295","AT","AUT","AUSTRIA" -"3276474320","3276474367","AT","AUT","AUSTRIA" -"3276475016","3276475023","IT","ITA","ITALY" -"3276475040","3276475063","IT","ITA","ITALY" -"3276475072","3276475135","IT","ITA","ITALY" -"3276475904","3276475951","IT","ITA","ITALY" -"3276475984","3276476055","IT","ITA","ITALY" -"3276476064","3276476071","IT","ITA","ITALY" -"3276476080","3276476095","IT","ITA","ITALY" -"3276476120","3276476159","IT","ITA","ITALY" -"3276476160","3276476287","GB","GBR","UNITED KINGDOM" -"3276476416","3276476671","CH","CHE","SWITZERLAND" -"3276477440","3276477967","CH","CHE","SWITZERLAND" -"3276477976","3276477983","CH","CHE","SWITZERLAND" -"3276478304","3276478311","CH","CHE","SWITZERLAND" -"3276478320","3276478335","CH","CHE","SWITZERLAND" -"3276478464","3276478855","FR","FRA","FRANCE" -"3276478864","3276479127","FR","FRA","FRANCE" -"3276479136","3276479167","FR","FRA","FRANCE" -"3276479200","3276479215","FR","FRA","FRANCE" -"3276479224","3276479343","FR","FRA","FRANCE" -"3276479344","3276479351","GB","GBR","UNITED KINGDOM" -"3276479352","3276479615","FR","FRA","FRANCE" -"3276479648","3276479743","FR","FRA","FRANCE" -"3276480016","3276480031","FR","FRA","FRANCE" -"3276480064","3276480095","FR","FRA","FRANCE" -"3276480112","3276480159","FR","FRA","FRANCE" -"3276480192","3276480271","FR","FRA","FRANCE" -"3276480288","3276480295","FR","FRA","FRANCE" -"3276480304","3276480319","FR","FRA","FRANCE" -"3276480352","3276480375","FR","FRA","FRANCE" -"3276480400","3276480439","FR","FRA","FRANCE" -"3276480456","3276480479","FR","FRA","FRANCE" -"3276480512","3276480767","RU","RUS","RUSSIAN FEDERATION" -"3276481024","3276481535","RU","RUS","RUSSIAN FEDERATION" -"3276482560","3276482815","GR","GRC","GREECE" -"3276483072","3276483359","GR","GRC","GREECE" -"3276483392","3276483519","GR","GRC","GREECE" -"3276483584","3276483711","GR","GRC","GREECE" -"3276483840","3276484351","GR","GRC","GREECE" -"3276484384","3276484479","GR","GRC","GREECE" -"3276484608","3276484863","SK","SVK","SLOVAKIA" -"3276485632","3276486655","GB","GBR","UNITED KINGDOM" -"3276486912","3276487167","GR","GRC","GREECE" -"3276488960","3276489215","CZ","CZE","CZECH REPUBLIC" -"3276490752","3276491263","NL","NLD","NETHERLANDS" -"3276491264","3276491327","CZ","CZE","CZECH REPUBLIC" -"3276491392","3276491775","CZ","CZE","CZECH REPUBLIC" -"3276491776","3276491847","GB","GBR","UNITED KINGDOM" -"3276491856","3276492055","GB","GBR","UNITED KINGDOM" -"3276492064","3276492127","GB","GBR","UNITED KINGDOM" -"3276492144","3276492151","GB","GBR","UNITED KINGDOM" -"3276492288","3276492487","GB","GBR","UNITED KINGDOM" -"3276492496","3276493215","GB","GBR","UNITED KINGDOM" -"3276493248","3276494335","GB","GBR","UNITED KINGDOM" -"3276494368","3276494383","GB","GBR","UNITED KINGDOM" -"3276494416","3276494431","GB","GBR","UNITED KINGDOM" -"3276494448","3276495503","GB","GBR","UNITED KINGDOM" -"3276495520","3276495679","GB","GBR","UNITED KINGDOM" -"3276495776","3276495791","GB","GBR","UNITED KINGDOM" -"3276495808","3276496639","GB","GBR","UNITED KINGDOM" -"3276496896","3276497151","DE","DEU","GERMANY" -"3276497216","3276497279","DE","DEU","GERMANY" -"3276497296","3276497311","DE","DEU","GERMANY" -"3276497344","3276497375","DE","DEU","GERMANY" -"3276497408","3276497599","DE","DEU","GERMANY" -"3276497616","3276497647","DE","DEU","GERMANY" -"3276497664","3276497919","DE","DEU","GERMANY" -"3276497920","3276498047","GB","GBR","UNITED KINGDOM" -"3276498304","3276498311","GB","GBR","UNITED KINGDOM" -"3276498320","3276498431","GB","GBR","UNITED KINGDOM" -"3276498432","3276499199","DE","DEU","GERMANY" -"3276499456","3276499503","DE","DEU","GERMANY" -"3276499520","3276499615","DE","DEU","GERMANY" -"3276499680","3276499695","DE","DEU","GERMANY" -"3276499712","3276499759","DE","DEU","GERMANY" -"3276499776","3276499791","DE","DEU","GERMANY" -"3276499800","3276499815","DE","DEU","GERMANY" -"3276499936","3276499999","DE","DEU","GERMANY" -"3276500000","3276500031","CH","CHE","SWITZERLAND" -"3276500032","3276500095","DE","DEU","GERMANY" -"3276500128","3276500159","DE","DEU","GERMANY" -"3276500480","3276500735","DE","DEU","GERMANY" -"3276500992","3276501023","DE","DEU","GERMANY" -"3276501024","3276501055","FR","FRA","FRANCE" -"3276501120","3276501167","DE","DEU","GERMANY" -"3276501248","3276501503","DE","DEU","GERMANY" -"3276502272","3276505087","DE","DEU","GERMANY" -"3276505088","3276505599","ZA","ZAF","SOUTH AFRICA" -"3276505856","3276505887","ZA","ZAF","SOUTH AFRICA" -"3276505904","3276505919","ZA","ZAF","SOUTH AFRICA" -"3276505984","3276506063","ZA","ZAF","SOUTH AFRICA" -"3276506072","3276506079","ZA","ZAF","SOUTH AFRICA" -"3276506096","3276506159","ZA","ZAF","SOUTH AFRICA" -"3276506176","3276506191","ZA","ZAF","SOUTH AFRICA" -"3276506208","3276506367","ZA","ZAF","SOUTH AFRICA" -"3276506624","3276507135","ZA","ZAF","SOUTH AFRICA" -"3276507136","3276507231","CH","CHE","SWITZERLAND" -"3276507392","3276507647","CH","CHE","SWITZERLAND" -"3276508160","3276508327","GB","GBR","UNITED KINGDOM" -"3276508352","3276508415","FR","FRA","FRANCE" -"3276508416","3276508671","GB","GBR","UNITED KINGDOM" -"3276508680","3276509183","GB","GBR","UNITED KINGDOM" -"3276509184","3276510207","IT","ITA","ITALY" -"3276510720","3276510735","IT","ITA","ITALY" -"3276510784","3276510815","IT","ITA","ITALY" -"3276510848","3276510911","GB","GBR","UNITED KINGDOM" -"3276511488","3276511775","ZA","ZAF","SOUTH AFRICA" -"3276511824","3276511839","ZA","ZAF","SOUTH AFRICA" -"3276511872","3276511919","ZA","ZAF","SOUTH AFRICA" -"3276511936","3276511951","ZA","ZAF","SOUTH AFRICA" -"3276511968","3276512191","ZA","ZAF","SOUTH AFRICA" -"3276512200","3276512207","ZA","ZAF","SOUTH AFRICA" -"3276512256","3276513023","ZA","ZAF","SOUTH AFRICA" -"3276513536","3276513551","CH","CHE","SWITZERLAND" -"3276513560","3276513567","CH","CHE","SWITZERLAND" -"3276514336","3276514367","CH","CHE","SWITZERLAND" -"3276514560","3276514815","CH","CHE","SWITZERLAND" -"3276515328","3276515583","ES","ESP","SPAIN" -"3276517376","3276517503","NL","NLD","NETHERLANDS" -"3276517632","3276517647","NL","NLD","NETHERLANDS" -"3276517656","3276517759","NL","NLD","NETHERLANDS" -"3276517792","3276517887","NL","NLD","NETHERLANDS" -"3276517904","3276517951","NL","NLD","NETHERLANDS" -"3276518016","3276518023","NL","NLD","NETHERLANDS" -"3276518056","3276518063","NL","NLD","NETHERLANDS" -"3276518096","3276518111","NL","NLD","NETHERLANDS" -"3276518128","3276518175","NL","NLD","NETHERLANDS" -"3276518184","3276518191","NL","NLD","NETHERLANDS" -"3276518208","3276518271","NL","NLD","NETHERLANDS" -"3276518304","3276518335","NL","NLD","NETHERLANDS" -"3276518400","3276518527","BE","BEL","BELGIUM" -"3276518592","3276518655","BE","BEL","BELGIUM" -"3276518912","3276519423","BE","BEL","BELGIUM" -"3276519424","3276520191","DK","DNK","DENMARK" -"3276520192","3276520223","BE","BEL","BELGIUM" -"3276520224","3276520255","GB","GBR","UNITED KINGDOM" -"3276520256","3276520415","BE","BEL","BELGIUM" -"3276520432","3276520447","BE","BEL","BELGIUM" -"3276520464","3276520591","SE","SWE","SWEDEN" -"3276520608","3276520623","SE","SWE","SWEDEN" -"3276520640","3276520703","SE","SWE","SWEDEN" -"3276520768","3276520815","SE","SWE","SWEDEN" -"3276520832","3276520927","SE","SWE","SWEDEN" -"3276520944","3276521215","SE","SWE","SWEDEN" -"3276521984","3276523519","NL","NLD","NETHERLANDS" -"3276523792","3276523911","NO","NOR","NORWAY" -"3276523928","3276523951","NO","NOR","NORWAY" -"3276523968","3276524031","NO","NOR","NORWAY" -"3276524064","3276524095","TR","TUR","TURKEY" -"3276524192","3276524279","TR","TUR","TURKEY" -"3276524544","3276524799","GB","GBR","UNITED KINGDOM" -"3276524800","3276524855","PT","PRT","PORTUGAL" -"3276525040","3276525055","PT","PRT","PORTUGAL" -"3276525056","3276525311","FI","FIN","FINLAND" -"3276525504","3276525527","HR","HRV","CROATIA" -"3276525528","3276525535","PL","POL","POLAND" -"3276525536","3276525567","HR","HRV","CROATIA" -"3276526080","3276526111","CH","CHE","SWITZERLAND" -"3276526144","3276526159","CH","CHE","SWITZERLAND" -"3276526336","3276526591","CH","CHE","SWITZERLAND" -"3276527104","3276527135","SI","SVN","SLOVENIA" -"3276527168","3276527199","SI","SVN","SLOVENIA" -"3276527216","3276527231","SI","SVN","SLOVENIA" -"3276527360","3276527615","SI","SVN","SLOVENIA" -"3276527616","3276527743","PK","PAK","PAKISTAN" -"3276527872","3276527999","PK","PAK","PAKISTAN" -"3276528128","3276528223","BE","BEL","BELGIUM" -"3276528224","3276528239","GB","GBR","UNITED KINGDOM" -"3276528240","3276528247","BE","BEL","BELGIUM" -"3276528248","3276528255","GB","GBR","UNITED KINGDOM" -"3276528256","3276528351","BE","BEL","BELGIUM" -"3276528352","3276528359","GB","GBR","UNITED KINGDOM" -"3276528360","3276528367","FR","FRA","FRANCE" -"3276528368","3276528399","BE","BEL","BELGIUM" -"3276528448","3276528503","BE","BEL","BELGIUM" -"3276528560","3276528567","BE","BEL","BELGIUM" -"3276528576","3276528719","BE","BEL","BELGIUM" -"3276528728","3276528799","BE","BEL","BELGIUM" -"3276528800","3276528815","GB","GBR","UNITED KINGDOM" -"3276528832","3276528895","BE","BEL","BELGIUM" -"3276528896","3276528903","IE","IRL","IRELAND" -"3276528912","3276528927","IE","IRL","IRELAND" -"3276528936","3276528943","IE","IRL","IRELAND" -"3276528960","3276529151","IE","IRL","IRELAND" -"3276529152","3276529167","TR","TUR","TURKEY" -"3276529184","3276529279","TR","TUR","TURKEY" -"3276529328","3276529351","TR","TUR","TURKEY" -"3276529360","3276529375","TR","TUR","TURKEY" -"3276529392","3276529407","TR","TUR","TURKEY" -"3276529664","3276530455","NL","NLD","NETHERLANDS" -"3276530464","3276530495","NL","NLD","NETHERLANDS" -"3276530560","3276532735","NL","NLD","NETHERLANDS" -"3276532736","3276532775","TR","TUR","TURKEY" -"3276532784","3276532791","TR","TUR","TURKEY" -"3276532856","3276532991","TR","TUR","TURKEY" -"3276532992","3276533023","HU","HUN","HUNGARY" -"3276533072","3276533087","HU","HUN","HUNGARY" -"3276533120","3276533183","HU","HUN","HUNGARY" -"3276533248","3276533375","TR","TUR","TURKEY" -"3276533776","3276533791","GB","GBR","UNITED KINGDOM" -"3276533824","3276533887","IE","IRL","IRELAND" -"3276533920","3276534015","IE","IRL","IRELAND" -"3276534016","3276534271","NL","NLD","NETHERLANDS" -"3276534400","3276534415","GB","GBR","UNITED KINGDOM" -"3276534416","3276534431","NL","NLD","NETHERLANDS" -"3276534432","3276534463","GB","GBR","UNITED KINGDOM" -"3276534464","3276534495","FR","FRA","FRANCE" -"3276534512","3276534527","NL","NLD","NETHERLANDS" -"3276534544","3276534591","NL","NLD","NETHERLANDS" -"3276534624","3276534671","NL","NLD","NETHERLANDS" -"3276534688","3276534719","NL","NLD","NETHERLANDS" -"3276534784","3276534879","NL","NLD","NETHERLANDS" -"3276534888","3276534895","NL","NLD","NETHERLANDS" -"3276534912","3276534919","NL","NLD","NETHERLANDS" -"3276534944","3276534975","NL","NLD","NETHERLANDS" -"3276535016","3276535039","GB","GBR","UNITED KINGDOM" -"3276535040","3276535063","RU","RUS","RUSSIAN FEDERATION" -"3276535064","3276535071","LV","LVA","LATVIA" -"3276535072","3276535103","RU","RUS","RUSSIAN FEDERATION" -"3276535296","3276535319","FI","FIN","FINLAND" -"3276535336","3276535359","FI","FIN","FINLAND" -"3276535376","3276535423","FI","FIN","FINLAND" -"3276535552","3276535807","PK","PAK","PAKISTAN" -"3276535808","3276536063","FI","FIN","FINLAND" -"3276536320","3276536415","ES","ESP","SPAIN" -"3276536448","3276536511","ES","ESP","SPAIN" -"3276536584","3276536591","HR","HRV","CROATIA" -"3276536640","3276536671","HU","HUN","HUNGARY" -"3276536688","3276536711","HU","HUN","HUNGARY" -"3276536736","3276536743","HU","HUN","HUNGARY" -"3276536864","3276536895","ES","ESP","SPAIN" -"3276536968","3276536991","ES","ESP","SPAIN" -"3276537152","3276537215","AT","AUT","AUSTRIA" -"3276537344","3276537599","AT","AUT","AUSTRIA" -"3276537600","3276537663","GR","GRC","GREECE" -"3276537856","3276668927","ES","ESP","SPAIN" -"3276668928","3276677119","MC","MCO","MONACO" -"3276677120","3276678143","HR","HRV","CROATIA" -"3276678144","3276678655","SE","SWE","SWEDEN" -"3276678656","3276679167","UA","UKR","UKRAINE" -"3276679168","3276679679","DE","DEU","GERMANY" -"3276679680","3276680191","RO","ROM","ROMANIA" -"3276680192","3276680703","SK","SVK","SLOVAKIA" -"3276680704","3276681215","AT","AUT","AUSTRIA" -"3276681216","3276681727","PL","POL","POLAND" -"3276681728","3276682239","BE","BEL","BELGIUM" -"3276682240","3276682751","AT","AUT","AUSTRIA" -"3276682752","3276683263","GB","GBR","UNITED KINGDOM" -"3276683264","3276684287","UA","UKR","UKRAINE" -"3276684288","3276684799","RU","RUS","RUSSIAN FEDERATION" -"3276684800","3276685311","DE","DEU","GERMANY" -"3276685312","3276685823","RO","ROM","ROMANIA" -"3276685824","3276686335","PL","POL","POLAND" -"3276686336","3276686847","UA","UKR","UKRAINE" -"3276686848","3276687359","FI","FIN","FINLAND" -"3276687360","3276687871","RU","RUS","RUSSIAN FEDERATION" -"3276687872","3276688383","KW","KWT","KUWAIT" -"3276688384","3276688895","DE","DEU","GERMANY" -"3276688896","3276689407","ES","ESP","SPAIN" -"3276689408","3276690431","GB","GBR","UNITED KINGDOM" -"3276690432","3276690943","NL","NLD","NETHERLANDS" -"3276690944","3276691455","GR","GRC","GREECE" -"3276691456","3276691967","RO","ROM","ROMANIA" -"3276691968","3276692479","RU","RUS","RUSSIAN FEDERATION" -"3276692480","3276692991","UA","UKR","UKRAINE" -"3276692992","3276693503","GB","GBR","UNITED KINGDOM" -"3276693504","3276694015","UA","UKR","UKRAINE" -"3276694016","3276694527","AT","AUT","AUSTRIA" -"3276694528","3276695039","UA","UKR","UKRAINE" -"3276695040","3276695551","RU","RUS","RUSSIAN FEDERATION" -"3276695552","3276696063","UA","UKR","UKRAINE" -"3276696064","3276696575","RO","ROM","ROMANIA" -"3276697088","3276697599","GB","GBR","UNITED KINGDOM" -"3276697600","3276698111","UA","UKR","UKRAINE" -"3276698112","3276699647","RU","RUS","RUSSIAN FEDERATION" -"3276699648","3276700159","FR","FRA","FRANCE" -"3276700160","3276700671","KZ","KAZ","KAZAKHSTAN" -"3276700672","3276701183","RO","ROM","ROMANIA" -"3276701184","3276701695","RU","RUS","RUSSIAN FEDERATION" -"3276701696","3276709887","SE","SWE","SWEDEN" -"3276709888","3276718079","DE","DEU","GERMANY" -"3276718080","3276726271","IT","ITA","ITALY" -"3276726272","3276727295","DE","DEU","GERMANY" -"3276727296","3276728319","ES","ESP","SPAIN" -"3276728320","3276729343","UA","UKR","UKRAINE" -"3276729344","3276730367","PL","POL","POLAND" -"3276730368","3276731391","DE","DEU","GERMANY" -"3276731392","3276732415","UA","UKR","UKRAINE" -"3276732416","3276733439","DE","DEU","GERMANY" -"3276733440","3276734463","UA","UKR","UKRAINE" -"3276734464","3276734735","AT","AUT","AUSTRIA" -"3276734736","3276734751","DK","DNK","DENMARK" -"3276734752","3276734815","AT","AUT","AUSTRIA" -"3276734816","3276734847","DE","DEU","GERMANY" -"3276734880","3276734895","GB","GBR","UNITED KINGDOM" -"3276734896","3276734911","NL","NLD","NETHERLANDS" -"3276734912","3276734943","FR","FRA","FRANCE" -"3276734944","3276735455","AT","AUT","AUSTRIA" -"3276735456","3276735487","NL","NLD","NETHERLANDS" -"3276735488","3276735871","AT","AUT","AUSTRIA" -"3276735936","3276735999","ES","ESP","SPAIN" -"3276736000","3276736511","AT","AUT","AUSTRIA" -"3276736512","3276736575","IT","ITA","ITALY" -"3276736576","3276736735","GB","GBR","UNITED KINGDOM" -"3276736768","3276736799","IT","ITA","ITALY" -"3276736800","3276736815","DE","DEU","GERMANY" -"3276736816","3276736831","CZ","CZE","CZECH REPUBLIC" -"3276736832","3276736863","NL","NLD","NETHERLANDS" -"3276736864","3276736871","DE","DEU","GERMANY" -"3276736872","3276736879","NL","NLD","NETHERLANDS" -"3276736880","3276736959","DK","DNK","DENMARK" -"3276736960","3276736991","CH","CHE","SWITZERLAND" -"3276736992","3276737015","GB","GBR","UNITED KINGDOM" -"3276737016","3276737023","BE","BEL","BELGIUM" -"3276737024","3276737343","IT","ITA","ITALY" -"3276737344","3276737407","DE","DEU","GERMANY" -"3276737408","3276737535","ES","ESP","SPAIN" -"3276737536","3276737615","IT","ITA","ITALY" -"3276737616","3276737631","DE","DEU","GERMANY" -"3276737632","3276737791","RU","RUS","RUSSIAN FEDERATION" -"3276737792","3276737935","NL","NLD","NETHERLANDS" -"3276737936","3276737943","DE","DEU","GERMANY" -"3276737944","3276737991","GB","GBR","UNITED KINGDOM" -"3276737992","3276737999","IT","ITA","ITALY" -"3276738000","3276738015","GB","GBR","UNITED KINGDOM" -"3276738016","3276738047","BE","BEL","BELGIUM" -"3276738048","3276738079","GB","GBR","UNITED KINGDOM" -"3276738080","3276738111","ES","ESP","SPAIN" -"3276738112","3276738143","GB","GBR","UNITED KINGDOM" -"3276738144","3276738175","IT","ITA","ITALY" -"3276738176","3276738559","GB","GBR","UNITED KINGDOM" -"3276738560","3276738847","CH","CHE","SWITZERLAND" -"3276739072","3276739151","CH","CHE","SWITZERLAND" -"3276739168","3276740127","CH","CHE","SWITZERLAND" -"3276740128","3276740167","GB","GBR","UNITED KINGDOM" -"3276740168","3276740175","DE","DEU","GERMANY" -"3276740176","3276740191","NL","NLD","NETHERLANDS" -"3276740224","3276740351","CH","CHE","SWITZERLAND" -"3276740352","3276740703","FR","FRA","FRANCE" -"3276740704","3276740719","IT","ITA","ITALY" -"3276740720","3276740735","CZ","CZE","CZECH REPUBLIC" -"3276740736","3276740799","PT","PRT","PORTUGAL" -"3276740800","3276740815","SI","SVN","SLOVENIA" -"3276740816","3276740831","SK","SVK","SLOVAKIA" -"3276740832","3276740863","DE","DEU","GERMANY" -"3276740864","3276741375","FR","FRA","FRANCE" -"3276741632","3276742655","FR","FRA","FRANCE" -"3276742656","3276742735","RU","RUS","RUSSIAN FEDERATION" -"3276742736","3276742751","NL","NLD","NETHERLANDS" -"3276742752","3276742783","GR","GRC","GREECE" -"3276742784","3276742911","HU","HUN","HUNGARY" -"3276742912","3276743071","AT","AUT","AUSTRIA" -"3276743072","3276743103","DE","DEU","GERMANY" -"3276743104","3276743135","HU","HUN","HUNGARY" -"3276743136","3276743167","NL","NLD","NETHERLANDS" -"3276743424","3276743903","AT","AUT","AUSTRIA" -"3276743904","3276743935","BE","BEL","BELGIUM" -"3276743936","3276744191","AT","AUT","AUSTRIA" -"3276744192","3276744703","BE","BEL","BELGIUM" -"3276744704","3276744959","IT","ITA","ITALY" -"3276744960","3276745215","GR","GRC","GREECE" -"3276745216","3276745295","DK","DNK","DENMARK" -"3276745296","3276745311","NL","NLD","NETHERLANDS" -"3276745312","3276745343","DK","DNK","DENMARK" -"3276745344","3276745407","DE","DEU","GERMANY" -"3276745408","3276745655","DK","DNK","DENMARK" -"3276745664","3276745727","DK","DNK","DENMARK" -"3276745728","3276746047","GB","GBR","UNITED KINGDOM" -"3276746048","3276746111","DE","DEU","GERMANY" -"3276746112","3276746239","IT","ITA","ITALY" -"3276746240","3276746335","GB","GBR","UNITED KINGDOM" -"3276746336","3276746351","BE","BEL","BELGIUM" -"3276746352","3276746367","NL","NLD","NETHERLANDS" -"3276746368","3276746751","GB","GBR","UNITED KINGDOM" -"3276746752","3276748287","CH","CHE","SWITZERLAND" -"3276748288","3276748799","GB","GBR","UNITED KINGDOM" -"3276748800","3276748951","AT","AUT","AUSTRIA" -"3276748952","3276748959","GB","GBR","UNITED KINGDOM" -"3276748960","3276749023","AT","AUT","AUSTRIA" -"3276749024","3276749055","IT","ITA","ITALY" -"3276749056","3276749087","AT","AUT","AUSTRIA" -"3276749088","3276749103","FR","FRA","FRANCE" -"3276749120","3276749183","NL","NLD","NETHERLANDS" -"3276749184","3276749311","DE","DEU","GERMANY" -"3276749312","3276749343","BE","BEL","BELGIUM" -"3276749344","3276749375","DE","DEU","GERMANY" -"3276749376","3276749823","BE","BEL","BELGIUM" -"3276749824","3276750151","NL","NLD","NETHERLANDS" -"3276750152","3276750159","GB","GBR","UNITED KINGDOM" -"3276750160","3276750175","FR","FRA","FRANCE" -"3276750176","3276750207","BE","BEL","BELGIUM" -"3276750208","3276750335","FR","FRA","FRANCE" -"3276750336","3276750431","GB","GBR","UNITED KINGDOM" -"3276750464","3276751039","GB","GBR","UNITED KINGDOM" -"3276751040","3276751071","FR","FRA","FRANCE" -"3276751072","3276751087","GB","GBR","UNITED KINGDOM" -"3276751088","3276751103","NL","NLD","NETHERLANDS" -"3276751104","3276751175","GB","GBR","UNITED KINGDOM" -"3276751176","3276751199","SE","SWE","SWEDEN" -"3276751232","3276751295","IL","ISR","ISRAEL" -"3276751296","3276751359","AT","AUT","AUSTRIA" -"3276751360","3276753055","GB","GBR","UNITED KINGDOM" -"3276753056","3276753071","NO","NOR","NORWAY" -"3276753072","3276753119","GB","GBR","UNITED KINGDOM" -"3276753120","3276753151","IT","ITA","ITALY" -"3276753152","3276753375","GB","GBR","UNITED KINGDOM" -"3276753376","3276753407","FI","FIN","FINLAND" -"3276753408","3276753951","GB","GBR","UNITED KINGDOM" -"3276753952","3276753983","HU","HUN","HUNGARY" -"3276753984","3276754991","GB","GBR","UNITED KINGDOM" -"3276754992","3276755007","DE","DEU","GERMANY" -"3276755008","3276755071","HU","HUN","HUNGARY" -"3276755072","3276755199","DE","DEU","GERMANY" -"3276755200","3276755775","GB","GBR","UNITED KINGDOM" -"3276755776","3276755791","NO","NOR","NORWAY" -"3276755792","3276755807","RU","RUS","RUSSIAN FEDERATION" -"3276755808","3276755839","GB","GBR","UNITED KINGDOM" -"3276755840","3276755967","ES","ESP","SPAIN" -"3276755968","3276756031","GB","GBR","UNITED KINGDOM" -"3276756032","3276756063","NL","NLD","NETHERLANDS" -"3276756064","3276756095","BE","BEL","BELGIUM" -"3276756096","3276756287","GB","GBR","UNITED KINGDOM" -"3276756288","3276756319","SE","SWE","SWEDEN" -"3276756320","3276756351","FR","FRA","FRANCE" -"3276756352","3276756671","GB","GBR","UNITED KINGDOM" -"3276756672","3276756735","DE","DEU","GERMANY" -"3276756736","3276757119","GB","GBR","UNITED KINGDOM" -"3276757120","3276757135","NO","NOR","NORWAY" -"3276757136","3276757151","NL","NLD","NETHERLANDS" -"3276757152","3276757183","GB","GBR","UNITED KINGDOM" -"3276757248","3276757503","GB","GBR","UNITED KINGDOM" -"3276757760","3276757823","GB","GBR","UNITED KINGDOM" -"3276757824","3276757839","DE","DEU","GERMANY" -"3276757840","3276757855","ES","ESP","SPAIN" -"3276757856","3276757887","CH","CHE","SWITZERLAND" -"3276757888","3276759039","GB","GBR","UNITED KINGDOM" -"3276759040","3276759695","DE","DEU","GERMANY" -"3276759696","3276759711","NL","NLD","NETHERLANDS" -"3276759712","3276759743","DE","DEU","GERMANY" -"3276759744","3276759775","CH","CHE","SWITZERLAND" -"3276759808","3276761215","DE","DEU","GERMANY" -"3276761216","3276761279","ES","ESP","SPAIN" -"3276761280","3276761919","DE","DEU","GERMANY" -"3276761920","3276761983","GB","GBR","UNITED KINGDOM" -"3276761984","3276762015","DK","DNK","DENMARK" -"3276762016","3276762111","FR","FRA","FRANCE" -"3276762112","3276762623","DE","DEU","GERMANY" -"3276762880","3276762943","DE","DEU","GERMANY" -"3276762944","3276762959","GB","GBR","UNITED KINGDOM" -"3276762960","3276762975","IT","ITA","ITALY" -"3276762976","3276763007","NO","NOR","NORWAY" -"3276763008","3276763327","DE","DEU","GERMANY" -"3276763328","3276763391","SE","SWE","SWEDEN" -"3276763392","3276763519","DE","DEU","GERMANY" -"3276763520","3276763551","IT","ITA","ITALY" -"3276763552","3276763567","CH","CHE","SWITZERLAND" -"3276763568","3276763583","GR","GRC","GREECE" -"3276763584","3276763647","GB","GBR","UNITED KINGDOM" -"3276763648","3276763967","DE","DEU","GERMANY" -"3276763968","3276763983","DK","DNK","DENMARK" -"3276763984","3276763991","GB","GBR","UNITED KINGDOM" -"3276763992","3276763999","BE","BEL","BELGIUM" -"3276764000","3276764031","IT","ITA","ITALY" -"3276764160","3276765183","DE","DEU","GERMANY" -"3276765184","3276766975","GB","GBR","UNITED KINGDOM" -"3276766976","3276766983","FR","FRA","FRANCE" -"3276766992","3276767015","FR","FRA","FRANCE" -"3276767016","3276767023","DK","DNK","DENMARK" -"3276767024","3276767039","BE","BEL","BELGIUM" -"3276767040","3276767079","FR","FRA","FRANCE" -"3276767080","3276767087","GB","GBR","UNITED KINGDOM" -"3276767088","3276767103","NL","NLD","NETHERLANDS" -"3276767104","3276767231","FR","FRA","FRANCE" -"3276767232","3276767743","ZA","ZAF","SOUTH AFRICA" -"3276767744","3276767807","NL","NLD","NETHERLANDS" -"3276767808","3276767871","DK","DNK","DENMARK" -"3276767872","3276767935","NL","NLD","NETHERLANDS" -"3276767936","3276767967","FR","FRA","FRANCE" -"3276767968","3276767999","AT","AUT","AUSTRIA" -"3276768000","3276768511","NL","NLD","NETHERLANDS" -"3276768512","3276768767","DE","DEU","GERMANY" -"3276768768","3276768863","ES","ESP","SPAIN" -"3276768864","3276768895","AT","AUT","AUSTRIA" -"3276768896","3276769023","HU","HUN","HUNGARY" -"3276769024","3276769279","DE","DEU","GERMANY" -"3276769280","3276769295","ES","ESP","SPAIN" -"3276769296","3276769311","DE","DEU","GERMANY" -"3276769312","3276769343","CH","CHE","SWITZERLAND" -"3276769344","3276769407","NL","NLD","NETHERLANDS" -"3276769408","3276769919","ES","ESP","SPAIN" -"3276769984","3276770015","AT","AUT","AUSTRIA" -"3276770016","3276770031","IT","ITA","ITALY" -"3276770032","3276770047","CH","CHE","SWITZERLAND" -"3276770048","3276770143","ES","ESP","SPAIN" -"3276770144","3276770175","FI","FIN","FINLAND" -"3276770176","3276770239","ES","ESP","SPAIN" -"3276770240","3276770303","DK","DNK","DENMARK" -"3276770304","3276770815","ES","ESP","SPAIN" -"3276770944","3276771135","ES","ESP","SPAIN" -"3276771200","3276771327","ES","ESP","SPAIN" -"3276771328","3276771455","NL","NLD","NETHERLANDS" -"3276771456","3276771583","GB","GBR","UNITED KINGDOM" -"3276771584","3276772287","NL","NLD","NETHERLANDS" -"3276772288","3276772351","AT","AUT","AUSTRIA" -"3276772352","3276772567","BE","BEL","BELGIUM" -"3276772576","3276773375","BE","BEL","BELGIUM" -"3276773376","3276774047","DK","DNK","DENMARK" -"3276774048","3276774079","FI","FIN","FINLAND" -"3276774080","3276774095","DK","DNK","DENMARK" -"3276774112","3276774143","IE","IRL","IRELAND" -"3276774144","3276774271","DK","DNK","DENMARK" -"3276774272","3276774303","DE","DEU","GERMANY" -"3276774304","3276774335","FR","FRA","FRANCE" -"3276774336","3276774399","GB","GBR","UNITED KINGDOM" -"3276774400","3276774543","SE","SWE","SWEDEN" -"3276774544","3276774559","GB","GBR","UNITED KINGDOM" -"3276774560","3276774591","DE","DEU","GERMANY" -"3276774592","3276774655","CH","CHE","SWITZERLAND" -"3276774656","3276775103","SE","SWE","SWEDEN" -"3276775104","3276775167","NL","NLD","NETHERLANDS" -"3276775168","3276775295","SE","SWE","SWEDEN" -"3276775296","3276775359","FR","FRA","FRANCE" -"3276775360","3276775391","DK","DNK","DENMARK" -"3276775392","3276775423","DE","DEU","GERMANY" -"3276775424","3276781151","NL","NLD","NETHERLANDS" -"3276781152","3276781247","FR","FRA","FRANCE" -"3276781248","3276781311","BE","BEL","BELGIUM" -"3276781312","3276781503","NL","NLD","NETHERLANDS" -"3276781504","3276781567","FR","FRA","FRANCE" -"3276781568","3276782719","BE","BEL","BELGIUM" -"3276782784","3276782799","FR","FRA","FRANCE" -"3276782800","3276782815","CZ","CZE","CZECH REPUBLIC" -"3276782816","3276782847","ES","ESP","SPAIN" -"3276782848","3276782975","BE","BEL","BELGIUM" -"3276782976","3276783039","GR","GRC","GREECE" -"3276783040","3276783055","DK","DNK","DENMARK" -"3276783056","3276783071","GB","GBR","UNITED KINGDOM" -"3276783072","3276783087","PT","PRT","PORTUGAL" -"3276783088","3276783103","CH","CHE","SWITZERLAND" -"3276783104","3276783615","IT","ITA","ITALY" -"3276783616","3276784383","FR","FRA","FRANCE" -"3276784640","3276784895","FR","FRA","FRANCE" -"3276784896","3276785151","NO","NOR","NORWAY" -"3276785152","3276785407","IE","IRL","IRELAND" -"3276785408","3276785439","PT","PRT","PORTUGAL" -"3276785440","3276785455","GR","GRC","GREECE" -"3276785456","3276785463","GB","GBR","UNITED KINGDOM" -"3276785464","3276785471","IE","IRL","IRELAND" -"3276785472","3276785535","PT","PRT","PORTUGAL" -"3276785536","3276785567","BE","BEL","BELGIUM" -"3276785568","3276785599","PT","PRT","PORTUGAL" -"3276785600","3276785607","TR","TUR","TURKEY" -"3276785608","3276785615","PL","POL","POLAND" -"3276785616","3276785631","CZ","CZE","CZECH REPUBLIC" -"3276785632","3276785663","IT","ITA","ITALY" -"3276785664","3276785791","IL","ISR","ISRAEL" -"3276785792","3276785823","NL","NLD","NETHERLANDS" -"3276785856","3276785919","GB","GBR","UNITED KINGDOM" -"3276785920","3276786175","AT","AUT","AUSTRIA" -"3276786176","3276786431","NO","NOR","NORWAY" -"3276786688","3276786815","HU","HUN","HUNGARY" -"3276786816","3276786879","SE","SWE","SWEDEN" -"3276786880","3276786911","TR","TUR","TURKEY" -"3276786912","3276786943","BE","BEL","BELGIUM" -"3276786944","3276787359","AT","AUT","AUSTRIA" -"3276787360","3276787391","DE","DEU","GERMANY" -"3276787392","3276787455","BE","BEL","BELGIUM" -"3276787456","3276787775","FR","FRA","FRANCE" -"3276787968","3276788735","FR","FRA","FRANCE" -"3276788736","3276788863","IE","IRL","IRELAND" -"3276788864","3276788895","DE","DEU","GERMANY" -"3276788928","3276788991","NL","NLD","NETHERLANDS" -"3276788992","3276789247","NO","NOR","NORWAY" -"3276789248","3276789439","FI","FIN","FINLAND" -"3276789504","3276789567","FR","FRA","FRANCE" -"3276789568","3276789583","ES","ESP","SPAIN" -"3276789584","3276789599","FR","FRA","FRANCE" -"3276789600","3276789615","ES","ESP","SPAIN" -"3276789616","3276789631","NL","NLD","NETHERLANDS" -"3276789632","3276789759","FR","FRA","FRANCE" -"3276789760","3276790015","IT","ITA","ITALY" -"3276790016","3276790111","ES","ESP","SPAIN" -"3276790112","3276790127","FR","FRA","FRANCE" -"3276790128","3276790143","NL","NLD","NETHERLANDS" -"3276790144","3276790175","IT","ITA","ITALY" -"3276790176","3276790199","NL","NLD","NETHERLANDS" -"3276790200","3276790207","DE","DEU","GERMANY" -"3276790208","3276790223","NL","NLD","NETHERLANDS" -"3276790224","3276790271","GB","GBR","UNITED KINGDOM" -"3276790272","3276790527","IE","IRL","IRELAND" -"3276790528","3276790783","HU","HUN","HUNGARY" -"3276790784","3276790943","PK","PAK","PAKISTAN" -"3276790944","3276791007","IT","ITA","ITALY" -"3276791008","3276791039","NL","NLD","NETHERLANDS" -"3276791040","3276791295","GB","GBR","UNITED KINGDOM" -"3276791296","3276791327","PT","PRT","PORTUGAL" -"3276791552","3276792831","GB","GBR","UNITED KINGDOM" -"3276792832","3276793087","FR","FRA","FRANCE" -"3276793088","3276793279","GB","GBR","UNITED KINGDOM" -"3276793280","3276793343","IE","IRL","IRELAND" -"3276793344","3276793735","FR","FRA","FRANCE" -"3276793736","3276793743","NL","NLD","NETHERLANDS" -"3276793744","3276793751","BE","BEL","BELGIUM" -"3276793752","3276793759","FR","FRA","FRANCE" -"3276793760","3276793791","PL","POL","POLAND" -"3276793792","3276793855","FR","FRA","FRANCE" -"3276794112","3276794255","NL","NLD","NETHERLANDS" -"3276794256","3276794271","DE","DEU","GERMANY" -"3276794304","3276794335","DK","DNK","DENMARK" -"3276794336","3276794367","NL","NLD","NETHERLANDS" -"3276794368","3276795903","BE","BEL","BELGIUM" -"3276795904","3276797951","AT","AUT","AUSTRIA" -"3276799104","3276799231","GB","GBR","UNITED KINGDOM" -"3276799296","3276799359","GB","GBR","UNITED KINGDOM" -"3276799360","3276799391","NL","NLD","NETHERLANDS" -"3276799392","3276799455","AT","AUT","AUSTRIA" -"3276799456","3276799471","PL","POL","POLAND" -"3276799472","3276799487","NL","NLD","NETHERLANDS" -"3276799488","3276799743","DE","DEU","GERMANY" -"3276799744","3276799775","NL","NLD","NETHERLANDS" -"3276799776","3276799807","GB","GBR","UNITED KINGDOM" -"3276799808","3276799839","FR","FRA","FRANCE" -"3276799840","3276799871","ES","ESP","SPAIN" -"3276799872","3276799999","NL","NLD","NETHERLANDS" -"3276800000","3276824575","GB","GBR","UNITED KINGDOM" -"3276824576","3276832767","EE","EST","ESTONIA" -"3276832768","3276834495","GB","GBR","UNITED KINGDOM" -"3276834496","3276834503","FR","FRA","FRANCE" -"3276834504","3276834815","GB","GBR","UNITED KINGDOM" -"3276838912","3276840959","FR","FRA","FRANCE" -"3276840960","3276849151","SK","SVK","SLOVAKIA" -"3276849152","3276857343","DE","DEU","GERMANY" -"3276857344","3276857599","RU","RUS","RUSSIAN FEDERATION" -"3276857600","3276857855","SI","SVN","SLOVENIA" -"3276857856","3276858111","NL","NLD","NETHERLANDS" -"3276858112","3276858367","KW","KWT","KUWAIT" -"3276858368","3276858623","RU","RUS","RUSSIAN FEDERATION" -"3276858624","3276858879","PL","POL","POLAND" -"3276858880","3276859135","DE","DEU","GERMANY" -"3276859136","3276859647","UA","UKR","UKRAINE" -"3276859648","3276859903","CH","CHE","SWITZERLAND" -"3276859904","3276860159","AT","AUT","AUSTRIA" -"3276860160","3276860415","CH","CHE","SWITZERLAND" -"3276860416","3276860927","PL","POL","POLAND" -"3276860928","3276861183","BE","BEL","BELGIUM" -"3276861184","3276861439","DE","DEU","GERMANY" -"3276861440","3276865535","DK","DNK","DENMARK" -"3276865536","3276866559","NL","NLD","NETHERLANDS" -"3276866560","3276866815","IT","ITA","ITALY" -"3276866816","3276866839","DE","DEU","GERMANY" -"3276866840","3276867071","GB","GBR","UNITED KINGDOM" -"3276867072","3276868606","IT","ITA","ITALY" -"3276868607","3276868607","GB","GBR","UNITED KINGDOM" -"3276868608","3276868863","NL","NLD","NETHERLANDS" -"3276868864","3276869855","IT","ITA","ITALY" -"3276869856","3276869887","GB","GBR","UNITED KINGDOM" -"3276869888","3276870143","NL","NLD","NETHERLANDS" -"3276870144","3276870399","IT","ITA","ITALY" -"3276870400","3276870655","GB","GBR","UNITED KINGDOM" -"3276870656","3276871679","IT","ITA","ITALY" -"3276871680","3276872479","DE","DEU","GERMANY" -"3276872480","3276872511","GB","GBR","UNITED KINGDOM" -"3276872512","3276872703","DE","DEU","GERMANY" -"3276872704","3276873727","GB","GBR","UNITED KINGDOM" -"3276873728","3276873735","ES","ESP","SPAIN" -"3276873736","3276873743","GB","GBR","UNITED KINGDOM" -"3276873744","3276873759","ES","ESP","SPAIN" -"3276873760","3276873791","GB","GBR","UNITED KINGDOM" -"3276873792","3276874303","ES","ESP","SPAIN" -"3276874304","3276874367","GB","GBR","UNITED KINGDOM" -"3276874368","3276874751","ES","ESP","SPAIN" -"3276874752","3276875263","GB","GBR","UNITED KINGDOM" -"3276875264","3276875775","NL","NLD","NETHERLANDS" -"3276875776","3276876799","GB","GBR","UNITED KINGDOM" -"3276876800","3276876823","AT","AUT","AUSTRIA" -"3276876824","3276877303","GB","GBR","UNITED KINGDOM" -"3276877304","3276877311","AT","AUT","AUSTRIA" -"3276877312","3276877535","GB","GBR","UNITED KINGDOM" -"3276877536","3276877551","AT","AUT","AUSTRIA" -"3276877552","3276877559","GB","GBR","UNITED KINGDOM" -"3276877560","3276877567","AT","AUT","AUSTRIA" -"3276877568","3276877815","GB","GBR","UNITED KINGDOM" -"3276877816","3276877823","AT","AUT","AUSTRIA" -"3276877824","3276877831","BG","BGR","BULGARIA" -"3276877832","3276878079","GB","GBR","UNITED KINGDOM" -"3276878080","3276878335","BG","BGR","BULGARIA" -"3276878336","3276879871","GB","GBR","UNITED KINGDOM" -"3276879872","3276880127","DK","DNK","DENMARK" -"3276880128","3276880383","GB","GBR","UNITED KINGDOM" -"3276880384","3276880639","DK","DNK","DENMARK" -"3276880640","3276881919","GB","GBR","UNITED KINGDOM" -"3276881920","3276883199","IT","ITA","ITALY" -"3276883200","3276883967","GB","GBR","UNITED KINGDOM" -"3276883968","3276884479","PL","POL","POLAND" -"3276884480","3276886015","GB","GBR","UNITED KINGDOM" -"3276886016","3276886271","RO","ROM","ROMANIA" -"3276886272","3276888575","GB","GBR","UNITED KINGDOM" -"3276888576","3276888831","AT","AUT","AUSTRIA" -"3276888832","3276889087","GB","GBR","UNITED KINGDOM" -"3276889088","3276890111","AT","AUT","AUSTRIA" -"3276890112","3276890135","US","USA","UNITED STATES" -"3276890136","3276890143","GB","GBR","UNITED KINGDOM" -"3276890144","3276890175","US","USA","UNITED STATES" -"3276890176","3276890367","GB","GBR","UNITED KINGDOM" -"3276890368","3276890623","US","USA","UNITED STATES" -"3276890624","3276891135","IT","ITA","ITALY" -"3276891136","3276891903","GB","GBR","UNITED KINGDOM" -"3276891904","3276892159","US","USA","UNITED STATES" -"3276892160","3276893183","IT","ITA","ITALY" -"3276893184","3276895231","GB","GBR","UNITED KINGDOM" -"3276895232","3276895999","IT","ITA","ITALY" -"3276896000","3276896255","CZ","CZE","CZECH REPUBLIC" -"3276896256","3276896831","BE","BEL","BELGIUM" -"3276896832","3276896847","SE","SWE","SWEDEN" -"3276896848","3276896895","GB","GBR","UNITED KINGDOM" -"3276896896","3276896911","BE","BEL","BELGIUM" -"3276896912","3276897023","GB","GBR","UNITED KINGDOM" -"3276897024","3276897279","BE","BEL","BELGIUM" -"3276897280","3276898303","GB","GBR","UNITED KINGDOM" -"3276898304","3276898375","CH","CHE","SWITZERLAND" -"3276898376","3276898383","GB","GBR","UNITED KINGDOM" -"3276898384","3276898775","CH","CHE","SWITZERLAND" -"3276898776","3276898783","GB","GBR","UNITED KINGDOM" -"3276898784","3276899847","CH","CHE","SWITZERLAND" -"3276899848","3276899903","GB","GBR","UNITED KINGDOM" -"3276899904","3276899967","CH","CHE","SWITZERLAND" -"3276899968","3276900095","GB","GBR","UNITED KINGDOM" -"3276900096","3276900351","CH","CHE","SWITZERLAND" -"3276900352","3276902143","GB","GBR","UNITED KINGDOM" -"3276902144","3276902151","CH","CHE","SWITZERLAND" -"3276902152","3276902159","GB","GBR","UNITED KINGDOM" -"3276902160","3276902175","CH","CHE","SWITZERLAND" -"3276902176","3276902399","GB","GBR","UNITED KINGDOM" -"3276902400","3276902575","SE","SWE","SWEDEN" -"3276902576","3276902655","GB","GBR","UNITED KINGDOM" -"3276902656","3276903422","SE","SWE","SWEDEN" -"3276903423","3276903423","GB","GBR","UNITED KINGDOM" -"3276903424","3276903487","SE","SWE","SWEDEN" -"3276903488","3276903551","GB","GBR","UNITED KINGDOM" -"3276903552","3276903679","SE","SWE","SWEDEN" -"3276903680","3276905471","GB","GBR","UNITED KINGDOM" -"3276905472","3276905727","SE","SWE","SWEDEN" -"3276905728","3276906239","BE","BEL","BELGIUM" -"3276906240","3276906279","SE","SWE","SWEDEN" -"3276906280","3276906495","GB","GBR","UNITED KINGDOM" -"3276906496","3276906839","NL","NLD","NETHERLANDS" -"3276906840","3276906847","GB","GBR","UNITED KINGDOM" -"3276906848","3276906863","NL","NLD","NETHERLANDS" -"3276906864","3276907007","GB","GBR","UNITED KINGDOM" -"3276907008","3276907263","NL","NLD","NETHERLANDS" -"3276907264","3276910079","GB","GBR","UNITED KINGDOM" -"3276910080","3276910591","NL","NLD","NETHERLANDS" -"3276910592","3276910863","IT","ITA","ITALY" -"3276910864","3276910879","GB","GBR","UNITED KINGDOM" -"3276910880","3276912615","IT","ITA","ITALY" -"3276912616","3276912623","GB","GBR","UNITED KINGDOM" -"3276912624","3276913919","IT","ITA","ITALY" -"3276913920","3276913983","US","USA","UNITED STATES" -"3276913984","3276914079","IT","ITA","ITALY" -"3276914080","3276914111","GB","GBR","UNITED KINGDOM" -"3276914112","3276914687","IT","ITA","ITALY" -"3276914688","3276915455","ES","ESP","SPAIN" -"3276915456","3276915487","GB","GBR","UNITED KINGDOM" -"3276915488","3276915503","ES","ESP","SPAIN" -"3276915504","3276915519","GB","GBR","UNITED KINGDOM" -"3276915520","3276915711","ES","ESP","SPAIN" -"3276915712","3276915967","GB","GBR","UNITED KINGDOM" -"3276915968","3276916175","ES","ESP","SPAIN" -"3276916176","3276916183","GB","GBR","UNITED KINGDOM" -"3276916184","3276917231","ES","ESP","SPAIN" -"3276917232","3276917247","GB","GBR","UNITED KINGDOM" -"3276917248","3276917279","ES","ESP","SPAIN" -"3276917280","3276917287","GB","GBR","UNITED KINGDOM" -"3276917288","3276917343","ES","ESP","SPAIN" -"3276917344","3276917375","GB","GBR","UNITED KINGDOM" -"3276917376","3276917759","ES","ESP","SPAIN" -"3276917760","3276918783","GB","GBR","UNITED KINGDOM" -"3276918784","3276920551","DE","DEU","GERMANY" -"3276920552","3276920559","GB","GBR","UNITED KINGDOM" -"3276920560","3276921183","DE","DEU","GERMANY" -"3276921184","3276921191","GB","GBR","UNITED KINGDOM" -"3276921192","3276921231","DE","DEU","GERMANY" -"3276921232","3276921599","GB","GBR","UNITED KINGDOM" -"3276921600","3276921607","DE","DEU","GERMANY" -"3276921608","3276921855","GB","GBR","UNITED KINGDOM" -"3276921856","3276922623","DE","DEU","GERMANY" -"3276922624","3276923431","FR","FRA","FRANCE" -"3276923432","3276923455","GB","GBR","UNITED KINGDOM" -"3276923456","3276923583","FR","FRA","FRANCE" -"3276923584","3276923647","GB","GBR","UNITED KINGDOM" -"3276923648","3276924039","FR","FRA","FRANCE" -"3276924040","3276924159","GB","GBR","UNITED KINGDOM" -"3276924160","3276924287","FR","FRA","FRANCE" -"3276924288","3276924415","GB","GBR","UNITED KINGDOM" -"3276924416","3276925183","FR","FRA","FRANCE" -"3276925184","3276926719","GB","GBR","UNITED KINGDOM" -"3276926720","3276926735","FR","FRA","FRANCE" -"3276926736","3276931071","GB","GBR","UNITED KINGDOM" -"3276931072","3276939263","KZ","KAZ","KAZAKHSTAN" -"3276939264","3276955647","DE","DEU","GERMANY" -"3276955648","3276963839","GB","GBR","UNITED KINGDOM" -"3276963840","3276964351","IL","ISR","ISRAEL" -"3276964352","3276965375","RO","ROM","ROMANIA" -"3276965376","3276966399","RU","RUS","RUSSIAN FEDERATION" -"3276966400","3276966911","BH","BHR","BAHRAIN" -"3276966912","3276968959","RU","RUS","RUSSIAN FEDERATION" -"3276968960","3276969471","RO","ROM","ROMANIA" -"3276969472","3276969983","UA","UKR","UKRAINE" -"3276969984","3276970495","NL","NLD","NETHERLANDS" -"3276970496","3276971519","RU","RUS","RUSSIAN FEDERATION" -"3276971520","3276972031","DE","DEU","GERMANY" -"3276972032","3276980223","PL","POL","POLAND" -"3276980224","3276988415","DK","DNK","DENMARK" -"3276988416","3276996607","AT","AUT","AUSTRIA" -"3276996608","3277062143","FR","FRA","FRANCE" -"3277062144","3277127679","SE","SWE","SWEDEN" -"3277127680","3277160447","DK","DNK","DENMARK" -"3277160448","3277176831","NL","NLD","NETHERLANDS" -"3277176832","3277177087","SI","SVN","SLOVENIA" -"3277177088","3277177343","GB","GBR","UNITED KINGDOM" -"3277177344","3277177599","RO","ROM","ROMANIA" -"3277177600","3277178111","PL","POL","POLAND" -"3277178112","3277178623","UA","UKR","UKRAINE" -"3277178624","3277178879","PL","POL","POLAND" -"3277178880","3277179135","ES","ESP","SPAIN" -"3277179136","3277179391","RO","ROM","ROMANIA" -"3277179392","3277179647","DE","DEU","GERMANY" -"3277179648","3277180159","BE","BEL","BELGIUM" -"3277180160","3277180415","NL","NLD","NETHERLANDS" -"3277180416","3277180671","GB","GBR","UNITED KINGDOM" -"3277180672","3277180927","FR","FRA","FRANCE" -"3277180928","3277181183","DE","DEU","GERMANY" -"3277181184","3277181439","PL","POL","POLAND" -"3277181440","3277181695","DE","DEU","GERMANY" -"3277181696","3277181951","RO","ROM","ROMANIA" -"3277181952","3277182207","IT","ITA","ITALY" -"3277182208","3277182463","RU","RUS","RUSSIAN FEDERATION" -"3277182464","3277182719","UA","UKR","UKRAINE" -"3277182720","3277182975","BG","BGR","BULGARIA" -"3277182976","3277183231","UA","UKR","UKRAINE" -"3277183232","3277183487","DE","DEU","GERMANY" -"3277183488","3277183743","DK","DNK","DENMARK" -"3277183744","3277183999","UA","UKR","UKRAINE" -"3277184000","3277184255","DE","DEU","GERMANY" -"3277184256","3277184511","PT","PRT","PORTUGAL" -"3277184512","3277184767","DE","DEU","GERMANY" -"3277184768","3277185023","UA","UKR","UKRAINE" -"3277185024","3277185279","SA","SAU","SAUDI ARABIA" -"3277185280","3277185535","RU","RUS","RUSSIAN FEDERATION" -"3277185536","3277185791","DE","DEU","GERMANY" -"3277185792","3277186047","PL","POL","POLAND" -"3277186048","3277186303","IT","ITA","ITALY" -"3277186304","3277186559","DE","DEU","GERMANY" -"3277186560","3277186815","PL","POL","POLAND" -"3277186816","3277187071","RU","RUS","RUSSIAN FEDERATION" -"3277187072","3277187327","GB","GBR","UNITED KINGDOM" -"3277187328","3277187583","UA","UKR","UKRAINE" -"3277187584","3277188351","RU","RUS","RUSSIAN FEDERATION" -"3277188352","3277188607","GB","GBR","UNITED KINGDOM" -"3277188608","3277188863","RU","RUS","RUSSIAN FEDERATION" -"3277188864","3277189119","RO","ROM","ROMANIA" -"3277189120","3277189375","DE","DEU","GERMANY" -"3277189376","3277189631","PL","POL","POLAND" -"3277189632","3277189887","TR","TUR","TURKEY" -"3277189888","3277190143","PL","POL","POLAND" -"3277190144","3277190399","SE","SWE","SWEDEN" -"3277190400","3277190655","GB","GBR","UNITED KINGDOM" -"3277190656","3277190911","BE","BEL","BELGIUM" -"3277190912","3277191167","FR","FRA","FRANCE" -"3277191168","3277191423","DK","DNK","DENMARK" -"3277191424","3277191679","PL","POL","POLAND" -"3277191680","3277191935","UA","UKR","UKRAINE" -"3277191936","3277192191","DK","DNK","DENMARK" -"3277192192","3277192447","PL","POL","POLAND" -"3277192448","3277192703","DK","DNK","DENMARK" -"3277192704","3277192959","IL","ISR","ISRAEL" -"3277192960","3277193215","TR","TUR","TURKEY" -"3277193216","3277254727","NL","NLD","NETHERLANDS" -"3277254728","3277254735","DE","DEU","GERMANY" -"3277254736","3277258751","NL","NLD","NETHERLANDS" -"3277258752","3277324287","TR","TUR","TURKEY" -"3277324288","3277325311","RU","RUS","RUSSIAN FEDERATION" -"3277325312","3277326335","IT","ITA","ITALY" -"3277326336","3277326847","GB","GBR","UNITED KINGDOM" -"3277326848","3277327359","AT","AUT","AUSTRIA" -"3277327360","3277327871","RS","SRB","SERBIA" -"3277327872","3277328383","UA","UKR","UKRAINE" -"3277328384","3277328895","RU","RUS","RUSSIAN FEDERATION" -"3277328896","3277329407","NL","NLD","NETHERLANDS" -"3277329408","3277329919","GB","GBR","UNITED KINGDOM" -"3277329920","3277330431","RU","RUS","RUSSIAN FEDERATION" -"3277330432","3277330943","RO","ROM","ROMANIA" -"3277330944","3277331455","UA","UKR","UKRAINE" -"3277331456","3277332479","PL","POL","POLAND" -"3277332992","3277333503","AT","AUT","AUSTRIA" -"3277333504","3277334015","EE","EST","ESTONIA" -"3277334016","3277334527","RO","ROM","ROMANIA" -"3277334528","3277335039","RU","RUS","RUSSIAN FEDERATION" -"3277335040","3277335551","UA","UKR","UKRAINE" -"3277335552","3277336063","DE","DEU","GERMANY" -"3277336064","3277336575","HR","HRV","CROATIA" -"3277336576","3277337087","AT","AUT","AUSTRIA" -"3277337088","3277337599","PL","POL","POLAND" -"3277337600","3277338111","UA","UKR","UKRAINE" -"3277338112","3277338623","NO","NOR","NORWAY" -"3277338624","3277339647","RU","RUS","RUSSIAN FEDERATION" -"3277339648","3277340159","RO","ROM","ROMANIA" -"3277340160","3277340671","RU","RUS","RUSSIAN FEDERATION" -"3277340672","3277341183","RO","ROM","ROMANIA" -"3277341184","3277341695","AM","ARM","ARMENIA" -"3277341696","3277342207","RU","RUS","RUSSIAN FEDERATION" -"3277342208","3277342719","GB","GBR","UNITED KINGDOM" -"3277342720","3277343231","UA","UKR","UKRAINE" -"3277343232","3277343743","BG","BGR","BULGARIA" -"3277343744","3277344767","UA","UKR","UKRAINE" -"3277345280","3277345791","SI","SVN","SLOVENIA" -"3277345792","3277346303","FR","FRA","FRANCE" -"3277346304","3277346815","GB","GBR","UNITED KINGDOM" -"3277346816","3277347327","DE","DEU","GERMANY" -"3277347328","3277347839","PL","POL","POLAND" -"3277347840","3277348351","RU","RUS","RUSSIAN FEDERATION" -"3277348352","3277348863","FR","FRA","FRANCE" -"3277348864","3277349887","RO","ROM","ROMANIA" -"3277349888","3277350399","GB","GBR","UNITED KINGDOM" -"3277350400","3277351423","RU","RUS","RUSSIAN FEDERATION" -"3277351424","3277351935","NO","NOR","NORWAY" -"3277351936","3277352447","DE","DEU","GERMANY" -"3277352448","3277352959","SE","SWE","SWEDEN" -"3277352960","3277353471","UA","UKR","UKRAINE" -"3277353472","3277353983","PL","POL","POLAND" -"3277353984","3277354495","DE","DEU","GERMANY" -"3277354496","3277355007","GB","GBR","UNITED KINGDOM" -"3277355008","3277355519","RU","RUS","RUSSIAN FEDERATION" -"3277355520","3277356031","MK","MKD","THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA" -"3277356032","3277356543","UA","UKR","UKRAINE" -"3277356544","3277357055","RU","RUS","RUSSIAN FEDERATION" -"3277357056","3277357567","PL","POL","POLAND" -"3277357568","3277358079","SE","SWE","SWEDEN" -"3277358080","3277359103","RU","RUS","RUSSIAN FEDERATION" -"3277359104","3277359615","NL","NLD","NETHERLANDS" -"3277359616","3277360127","UA","UKR","UKRAINE" -"3277360128","3277360639","BG","BGR","BULGARIA" -"3277360640","3277361151","CZ","CZE","CZECH REPUBLIC" -"3277361152","3277361663","UA","UKR","UKRAINE" -"3277361664","3277362175","RU","RUS","RUSSIAN FEDERATION" -"3277362176","3277362687","ES","ESP","SPAIN" -"3277362688","3277363199","IE","IRL","IRELAND" -"3277363200","3277363711","ES","ESP","SPAIN" -"3277363712","3277364223","RU","RUS","RUSSIAN FEDERATION" -"3277364224","3277364735","GB","GBR","UNITED KINGDOM" -"3277364736","3277365247","UA","UKR","UKRAINE" -"3277365248","3277365759","NL","NLD","NETHERLANDS" -"3277365760","3277366271","GR","GRC","GREECE" -"3277366272","3277366783","CZ","CZE","CZECH REPUBLIC" -"3277366784","3277367295","AT","AUT","AUSTRIA" -"3277367296","3277367807","PL","POL","POLAND" -"3277367808","3277368319","RU","RUS","RUSSIAN FEDERATION" -"3277368320","3277369343","RO","ROM","ROMANIA" -"3277369344","3277369855","CY","CYP","CYPRUS" -"3277369856","3277370367","RU","RUS","RUSSIAN FEDERATION" -"3277370368","3277370879","SE","SWE","SWEDEN" -"3277370880","3277371391","RO","ROM","ROMANIA" -"3277371392","3277371903","RU","RUS","RUSSIAN FEDERATION" -"3277371904","3277372415","PL","POL","POLAND" -"3277372416","3277373951","RU","RUS","RUSSIAN FEDERATION" -"3277373952","3277374463","FR","FRA","FRANCE" -"3277374464","3277375999","RU","RUS","RUSSIAN FEDERATION" -"3277376000","3277376511","NL","NLD","NETHERLANDS" -"3277376512","3277377023","RO","ROM","ROMANIA" -"3277377024","3277378559","RU","RUS","RUSSIAN FEDERATION" -"3277378560","3277379071","HR","HRV","CROATIA" -"3277379072","3277379583","UZ","UZB","UZBEKISTAN" -"3277379584","3277380095","RS","SRB","SERBIA" -"3277380096","3277380607","RO","ROM","ROMANIA" -"3277380608","3277381119","RU","RUS","RUSSIAN FEDERATION" -"3277381120","3277381631","KW","KWT","KUWAIT" -"3277381632","3277382143","RU","RUS","RUSSIAN FEDERATION" -"3277382144","3277382655","MD","MDA","REPUBLIC OF MOLDOVA" -"3277382656","3277383167","GB","GBR","UNITED KINGDOM" -"3277383168","3277383679","UA","UKR","UKRAINE" -"3277383680","3277384191","PL","POL","POLAND" -"3277384192","3277384703","IL","ISR","ISRAEL" -"3277384704","3277385215","GB","GBR","UNITED KINGDOM" -"3277385216","3277385727","AT","AUT","AUSTRIA" -"3277385728","3277386239","RU","RUS","RUSSIAN FEDERATION" -"3277386240","3277386751","UA","UKR","UKRAINE" -"3277386752","3277387263","SA","SAU","SAUDI ARABIA" -"3277387264","3277388287","RU","RUS","RUSSIAN FEDERATION" -"3277388288","3277388799","SE","SWE","SWEDEN" -"3277388800","3277389311","RU","RUS","RUSSIAN FEDERATION" -"3277389312","3277389823","AM","ARM","ARMENIA" -"3277389824","3277394943","GB","GBR","UNITED KINGDOM" -"3277394944","3277395455","US","USA","UNITED STATES" -"3277395456","3277395951","GB","GBR","UNITED KINGDOM" -"3277395952","3277395967","IE","IRL","IRELAND" -"3277395968","3277452647","GB","GBR","UNITED KINGDOM" -"3277452648","3277452655","DK","DNK","DENMARK" -"3277452656","3277455359","GB","GBR","UNITED KINGDOM" -"3277455360","3277463551","DE","DEU","GERMANY" -"3277463552","3277463807","GB","GBR","UNITED KINGDOM" -"3277463808","3277464063","US","USA","UNITED STATES" -"3277464064","3277464575","FR","FRA","FRANCE" -"3277464576","3277464831","BE","BEL","BELGIUM" -"3277466624","3277466879","US","USA","UNITED STATES" -"3277467472","3277467551","CA","CAN","CANADA" -"3277467648","3277467663","US","USA","UNITED STATES" -"3277467904","3277467919","US","USA","UNITED STATES" -"3277468096","3277468607","US","USA","UNITED STATES" -"3277468672","3277468735","US","USA","UNITED STATES" -"3277469184","3277469439","US","USA","UNITED STATES" -"3277471744","3277472607","NL","NLD","NETHERLANDS" -"3277472608","3277472623","IL","ISR","ISRAEL" -"3277472624","3277474815","NL","NLD","NETHERLANDS" -"3277474816","3277475711","BE","BEL","BELGIUM" -"3277475712","3277476607","NL","NLD","NETHERLANDS" -"3277476608","3277477631","BE","BEL","BELGIUM" -"3277477632","3277479935","NL","NLD","NETHERLANDS" -"3277479936","3277480959","GB","GBR","UNITED KINGDOM" -"3277480960","3277481471","DK","DNK","DENMARK" -"3277481472","3277481983","PL","POL","POLAND" -"3277481984","3277482495","SE","SWE","SWEDEN" -"3277482496","3277483007","PL","POL","POLAND" -"3277483008","3277483519","IT","ITA","ITALY" -"3277483520","3277484031","RO","ROM","ROMANIA" -"3277484032","3277484543","CH","CHE","SWITZERLAND" -"3277484544","3277485055","RO","ROM","ROMANIA" -"3277485056","3277485567","CH","CHE","SWITZERLAND" -"3277485568","3277486591","GB","GBR","UNITED KINGDOM" -"3277486592","3277487103","UA","UKR","UKRAINE" -"3277487104","3277487615","RO","ROM","ROMANIA" -"3277487616","3277488127","PL","POL","POLAND" -"3277488128","3277504511","RU","RUS","RUSSIAN FEDERATION" -"3277504512","3277520895","DE","DEU","GERMANY" -"3277520896","3277553663","SK","SVK","SLOVAKIA" -"3277553664","3277586431","RU","RUS","RUSSIAN FEDERATION" -"3277586432","3277651967","GB","GBR","UNITED KINGDOM" -"3277651968","3277684735","US","USA","UNITED STATES" -"3277684736","3277685247","RU","RUS","RUSSIAN FEDERATION" -"3277685248","3277685759","DE","DEU","GERMANY" -"3277685760","3277686271","IE","IRL","IRELAND" -"3277686272","3277686783","PL","POL","POLAND" -"3277686784","3277687295","RO","ROM","ROMANIA" -"3277687296","3277687807","UA","UKR","UKRAINE" -"3277687808","3277688319","RO","ROM","ROMANIA" -"3277688320","3277688831","PL","POL","POLAND" -"3277688832","3277689343","RU","RUS","RUSSIAN FEDERATION" -"3277689344","3277689855","AT","AUT","AUSTRIA" -"3277689856","3277690879","RU","RUS","RUSSIAN FEDERATION" -"3277690880","3277691391","KZ","KAZ","KAZAKHSTAN" -"3277691392","3277691903","UA","UKR","UKRAINE" -"3277691904","3277692415","GB","GBR","UNITED KINGDOM" -"3277692416","3277692927","DE","DEU","GERMANY" -"3277692928","3277693439","UA","UKR","UKRAINE" -"3277693440","3277693951","PL","POL","POLAND" -"3277693952","3277694463","RU","RUS","RUSSIAN FEDERATION" -"3277694464","3277694975","DE","DEU","GERMANY" -"3277694976","3277695487","IT","ITA","ITALY" -"3277695488","3277695999","ES","ESP","SPAIN" -"3277696000","3277696511","UA","UKR","UKRAINE" -"3277696512","3277697023","AT","AUT","AUSTRIA" -"3277697024","3277697535","RO","ROM","ROMANIA" -"3277697536","3277698047","PL","POL","POLAND" -"3277698048","3277698559","RU","RUS","RUSSIAN FEDERATION" -"3277698560","3277699071","DE","DEU","GERMANY" -"3277699072","3277699583","UA","UKR","UKRAINE" -"3277699584","3277700607","RU","RUS","RUSSIAN FEDERATION" -"3277700608","3277701119","UA","UKR","UKRAINE" -"3277701120","3277701631","DK","DNK","DENMARK" -"3277701632","3277702143","AT","AUT","AUSTRIA" -"3277702144","3277702655","GB","GBR","UNITED KINGDOM" -"3277702656","3277703167","RO","ROM","ROMANIA" -"3277703168","3277703679","DE","DEU","GERMANY" -"3277703680","3277704191","PL","POL","POLAND" -"3277704192","3277704703","UA","UKR","UKRAINE" -"3277704704","3277705215","RU","RUS","RUSSIAN FEDERATION" -"3277705216","3277705727","KZ","KAZ","KAZAKHSTAN" -"3277705728","3277706239","ES","ESP","SPAIN" -"3277706240","3277707263","UA","UKR","UKRAINE" -"3277707264","3277707775","CZ","CZE","CZECH REPUBLIC" -"3277707776","3277708287","MD","MDA","REPUBLIC OF MOLDOVA" -"3277708288","3277708799","AT","AUT","AUSTRIA" -"3277708800","3277709311","PL","POL","POLAND" -"3277709312","3277709823","NL","NLD","NETHERLANDS" -"3277709824","3277710335","GB","GBR","UNITED KINGDOM" -"3277710336","3277710847","RU","RUS","RUSSIAN FEDERATION" -"3277710848","3277711359","PL","POL","POLAND" -"3277711360","3277711871","NO","NOR","NORWAY" -"3277711872","3277712383","IL","ISR","ISRAEL" -"3277712384","3277712895","FR","FRA","FRANCE" -"3277712896","3277713407","NL","NLD","NETHERLANDS" -"3277713408","3277713919","RU","RUS","RUSSIAN FEDERATION" -"3277713920","3277714943","DE","DEU","GERMANY" -"3277714944","3277715967","RU","RUS","RUSSIAN FEDERATION" -"3277715968","3277716479","PL","POL","POLAND" -"3277716480","3277716991","SE","SWE","SWEDEN" -"3277716992","3277717503","IT","ITA","ITALY" -"3277717504","3277725695","YE","YEM","YEMEN" -"3277725696","3277728367","CH","CHE","SWITZERLAND" -"3277728368","3277728383","NL","NLD","NETHERLANDS" -"3277728384","3277733887","CH","CHE","SWITZERLAND" -"3277733888","3277742079","DE","DEU","GERMANY" -"3277742080","3277750271","FI","FIN","FINLAND" -"3277750272","3277766655","IT","ITA","ITALY" -"3277766656","3277774847","PL","POL","POLAND" -"3277774848","3277783039","RU","RUS","RUSSIAN FEDERATION" -"3277783040","3277815807","BE","BEL","BELGIUM" -"3277815808","3277816063","RO","ROM","ROMANIA" -"3277816064","3277816319","PL","POL","POLAND" -"3277816320","3277816575","CM","CMR","CAMEROON" -"3277816576","3277816831","GB","GBR","UNITED KINGDOM" -"3277816832","3277817087","CH","CHE","SWITZERLAND" -"3277817088","3277817343","GB","GBR","UNITED KINGDOM" -"3277817344","3277817855","FR","FRA","FRANCE" -"3277817856","3277818111","BE","BEL","BELGIUM" -"3277818112","3277818367","DE","DEU","GERMANY" -"3277818368","3277818623","CY","CYP","CYPRUS" -"3277818624","3277818879","UA","UKR","UKRAINE" -"3277818880","3277819135","SE","SWE","SWEDEN" -"3277819136","3277819391","CH","CHE","SWITZERLAND" -"3277819392","3277819647","IT","ITA","ITALY" -"3277819648","3277819903","GB","GBR","UNITED KINGDOM" -"3277819904","3277820159","PL","POL","POLAND" -"3277820160","3277820415","RO","ROM","ROMANIA" -"3277820416","3277820671","DE","DEU","GERMANY" -"3277820672","3277820927","UA","UKR","UKRAINE" -"3277820928","3277821183","CH","CHE","SWITZERLAND" -"3277821184","3277821439","TR","TUR","TURKEY" -"3277821440","3277821695","NL","NLD","NETHERLANDS" -"3277821696","3277821951","UA","UKR","UKRAINE" -"3277821952","3277822207","RO","ROM","ROMANIA" -"3277822208","3277822463","ES","ESP","SPAIN" -"3277822464","3277822719","PL","POL","POLAND" -"3277822720","3277822975","RU","RUS","RUSSIAN FEDERATION" -"3277822976","3277823231","FR","FRA","FRANCE" -"3277823232","3277823487","UA","UKR","UKRAINE" -"3277823488","3277823743","SI","SVN","SLOVENIA" -"3277823744","3277823999","UA","UKR","UKRAINE" -"3277824000","3277824255","TR","TUR","TURKEY" -"3277824256","3277824511","SI","SVN","SLOVENIA" -"3277824512","3277824767","UA","UKR","UKRAINE" -"3277824768","3277825023","AT","AUT","AUSTRIA" -"3277825024","3277825279","PL","POL","POLAND" -"3277825280","3277825535","UA","UKR","UKRAINE" -"3277825536","3277826047","RO","ROM","ROMANIA" -"3277826048","3277826303","FR","FRA","FRANCE" -"3277826304","3277826815","PL","POL","POLAND" -"3277826816","3277827071","UA","UKR","UKRAINE" -"3277827072","3277827327","DK","DNK","DENMARK" -"3277827328","3277827583","SI","SVN","SLOVENIA" -"3277827584","3277828095","NL","NLD","NETHERLANDS" -"3277828096","3277828351","AT","AUT","AUSTRIA" -"3277828352","3277828607","NL","NLD","NETHERLANDS" -"3277828608","3277828863","RO","ROM","ROMANIA" -"3277828864","3277829119","TR","TUR","TURKEY" -"3277829120","3277829375","RO","ROM","ROMANIA" -"3277829376","3277829631","DK","DNK","DENMARK" -"3277829632","3277829887","PL","POL","POLAND" -"3277829888","3277830143","IL","ISR","ISRAEL" -"3277830144","3277830399","SE","SWE","SWEDEN" -"3277830400","3277830655","UA","UKR","UKRAINE" -"3277830656","3277830911","PL","POL","POLAND" -"3277830912","3277831167","GB","GBR","UNITED KINGDOM" -"3277831168","3277831423","PL","POL","POLAND" -"3277831424","3277831679","UA","UKR","UKRAINE" -"3277831680","3277832191","IE","IRL","IRELAND" -"3277833216","3277833727","BE","BEL","BELGIUM" -"3277833728","3277834239","NL","NLD","NETHERLANDS" -"3277834240","3277834751","RU","RUS","RUSSIAN FEDERATION" -"3277834752","3277835263","UA","UKR","UKRAINE" -"3277835264","3277835775","SK","SVK","SLOVAKIA" -"3277835776","3277836287","UA","UKR","UKRAINE" -"3277836288","3277836799","FI","FIN","FINLAND" -"3277836800","3277837311","UA","UKR","UKRAINE" -"3277837312","3277838847","RU","RUS","RUSSIAN FEDERATION" -"3277839360","3277839871","DE","DEU","GERMANY" -"3277839872","3277840383","UA","UKR","UKRAINE" -"3277840384","3277840895","FR","FRA","FRANCE" -"3277840896","3277841407","GR","GRC","GREECE" -"3277841408","3277841919","RO","ROM","ROMANIA" -"3277841920","3277842431","IL","ISR","ISRAEL" -"3277842432","3277842943","UA","UKR","UKRAINE" -"3277842944","3277843455","PL","POL","POLAND" -"3277843456","3277843967","PT","PRT","PORTUGAL" -"3277843968","3277845503","DK","DNK","DENMARK" -"3277845504","3277847039","NL","NLD","NETHERLANDS" -"3277847040","3277847551","DK","DNK","DENMARK" -"3277847552","3277848063","RU","RUS","RUSSIAN FEDERATION" -"3277848064","3277848575","RO","ROM","ROMANIA" -"3277848576","3277856767","AT","AUT","AUSTRIA" -"3277856768","3277864959","DE","DEU","GERMANY" -"3277864960","3277873151","RU","RUS","RUSSIAN FEDERATION" -"3277873152","3277881343","NL","NLD","NETHERLANDS" -"3277881344","3277884175","IT","ITA","ITALY" -"3277884176","3277884191","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3277884192","3277886207","IT","ITA","ITALY" -"3277886208","3277886975","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3277886976","3277889535","IT","ITA","ITALY" -"3277889536","3277897727","RU","RUS","RUSSIAN FEDERATION" -"3277897728","3277905919","IT","ITA","ITALY" -"3277905920","3277914111","BG","BGR","BULGARIA" -"3277914112","3277946879","GR","GRC","GREECE" -"3277946880","3277963263","DK","DNK","DENMARK" -"3277963264","3277979647","GB","GBR","UNITED KINGDOM" -"3277979648","3277987839","SK","SVK","SLOVAKIA" -"3277987840","3278004223","RU","RUS","RUSSIAN FEDERATION" -"3278004224","3278012415","FR","FRA","FRANCE" -"3278012416","3278020607","SK","SVK","SLOVAKIA" -"3278020608","3278028799","RU","RUS","RUSSIAN FEDERATION" -"3278028800","3278036991","DE","DEU","GERMANY" -"3278036992","3278045183","FR","FRA","FRANCE" -"3278045184","3278054911","GB","GBR","UNITED KINGDOM" -"3278054912","3278055423","NL","NLD","NETHERLANDS" -"3278055424","3278061567","GB","GBR","UNITED KINGDOM" -"3278061568","3278065663","NL","NLD","NETHERLANDS" -"3278065664","3278067967","GB","GBR","UNITED KINGDOM" -"3278067968","3278068223","BE","BEL","BELGIUM" -"3278068224","3278103039","GB","GBR","UNITED KINGDOM" -"3278103040","3278103295","FR","FRA","FRANCE" -"3278103296","3278110719","GB","GBR","UNITED KINGDOM" -"3278110720","3278110751","SE","SWE","SWEDEN" -"3278110752","3278110767","ES","ESP","SPAIN" -"3278110768","3278111239","SE","SWE","SWEDEN" -"3278111240","3278111247","ES","ESP","SPAIN" -"3278111248","3278114815","SE","SWE","SWEDEN" -"3278114816","3278115071","ES","ESP","SPAIN" -"3278115072","3278115327","SE","SWE","SWEDEN" -"3278115328","3278116607","ES","ESP","SPAIN" -"3278116608","3278116735","SE","SWE","SWEDEN" -"3278116736","3278118175","ES","ESP","SPAIN" -"3278118176","3278119935","SE","SWE","SWEDEN" -"3278119936","3278119943","DE","DEU","GERMANY" -"3278119944","3278119967","SE","SWE","SWEDEN" -"3278119968","3278119975","NO","NOR","NORWAY" -"3278119976","3278120151","SE","SWE","SWEDEN" -"3278120152","3278120159","DE","DEU","GERMANY" -"3278120160","3278161631","SE","SWE","SWEDEN" -"3278161632","3278161647","DE","DEU","GERMANY" -"3278161648","3278168111","SE","SWE","SWEDEN" -"3278168112","3278168119","DK","DNK","DENMARK" -"3278168120","3278168175","SE","SWE","SWEDEN" -"3278168176","3278168191","DK","DNK","DENMARK" -"3278168192","3278176255","SE","SWE","SWEDEN" -"3278176256","3278232511","FR","FRA","FRANCE" -"3278232512","3278232575","MC","MCO","MONACO" -"3278232576","3278241791","FR","FRA","FRANCE" -"3278241792","3278307327","GB","GBR","UNITED KINGDOM" -"3278307328","3278372863","IT","ITA","ITALY" -"3278372864","3278635007","GB","GBR","UNITED KINGDOM" -"3278635008","3278766079","NL","NLD","NETHERLANDS" -"3278766080","3278766591","RO","ROM","ROMANIA" -"3278766592","3278767103","RU","RUS","RUSSIAN FEDERATION" -"3278767104","3278767615","RO","ROM","ROMANIA" -"3278767616","3278768127","UA","UKR","UKRAINE" -"3278768128","3278769151","GB","GBR","UNITED KINGDOM" -"3278769152","3278769663","FR","FRA","FRANCE" -"3278769664","3278770175","DE","DEU","GERMANY" -"3278770176","3278770687","DK","DNK","DENMARK" -"3278770688","3278771199","DE","DEU","GERMANY" -"3278771200","3278771711","GB","GBR","UNITED KINGDOM" -"3278771712","3278772223","NL","NLD","NETHERLANDS" -"3278772224","3278772735","BG","BGR","BULGARIA" -"3278772736","3278773247","DE","DEU","GERMANY" -"3278773248","3278773759","NO","NOR","NORWAY" -"3278773760","3278774271","GB","GBR","UNITED KINGDOM" -"3278774272","3278774783","RU","RUS","RUSSIAN FEDERATION" -"3278775296","3278775807","GB","GBR","UNITED KINGDOM" -"3278775808","3278776319","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3278776320","3278776831","IL","ISR","ISRAEL" -"3278776832","3278777343","ES","ESP","SPAIN" -"3278777344","3278777855","SE","SWE","SWEDEN" -"3278777856","3278778367","RU","RUS","RUSSIAN FEDERATION" -"3278778368","3278779391","PL","POL","POLAND" -"3278779392","3278779903","RU","RUS","RUSSIAN FEDERATION" -"3278779904","3278780415","BE","BEL","BELGIUM" -"3278780416","3278780927","UA","UKR","UKRAINE" -"3278780928","3278781439","LT","LTU","LITHUANIA" -"3278781440","3278781951","DE","DEU","GERMANY" -"3278781952","3278782463","RU","RUS","RUSSIAN FEDERATION" -"3278782464","3278782975","GB","GBR","UNITED KINGDOM" -"3278782976","3278783231","DE","DEU","GERMANY" -"3278783232","3278790655","GB","GBR","UNITED KINGDOM" -"3278790656","3278807039","IT","ITA","ITALY" -"3278807040","3278815231","GB","GBR","UNITED KINGDOM" -"3278815232","3278823423","AT","AUT","AUSTRIA" -"3278823424","3278831615","FR","FRA","FRANCE" -"3278831616","3278865663","HU","HUN","HUNGARY" -"3278865664","3278865919","SK","SVK","SLOVAKIA" -"3278865920","3278897151","HU","HUN","HUNGARY" -"3278897152","3278913535","GB","GBR","UNITED KINGDOM" -"3278913536","3278921727","CH","CHE","SWITZERLAND" -"3278921728","3278929919","RU","RUS","RUSSIAN FEDERATION" -"3278929920","3278938111","TR","TUR","TURKEY" -"3278938112","3278938119","DE","DEU","GERMANY" -"3278938120","3278938123","DK","DNK","DENMARK" -"3278938124","3278938127","DE","DEU","GERMANY" -"3278938128","3278938131","TR","TUR","TURKEY" -"3278938132","3278938151","DE","DEU","GERMANY" -"3278938152","3278938155","GB","GBR","UNITED KINGDOM" -"3278938156","3278938159","DE","DEU","GERMANY" -"3278938160","3278938163","ES","ESP","SPAIN" -"3278938164","3278938167","CH","CHE","SWITZERLAND" -"3278938168","3278938171","DE","DEU","GERMANY" -"3278938172","3278938175","NL","NLD","NETHERLANDS" -"3278938176","3278938179","FR","FRA","FRANCE" -"3278938180","3278938183","NL","NLD","NETHERLANDS" -"3278938184","3278938187","DE","DEU","GERMANY" -"3278938188","3278938191","PT","PRT","PORTUGAL" -"3278938192","3278938195","ES","ESP","SPAIN" -"3278938196","3278938199","NL","NLD","NETHERLANDS" -"3278938200","3278938203","CH","CHE","SWITZERLAND" -"3278938204","3278938207","DE","DEU","GERMANY" -"3278938208","3278938219","IT","ITA","ITALY" -"3278938220","3278938223","FR","FRA","FRANCE" -"3278938224","3278938227","DE","DEU","GERMANY" -"3278938228","3278938231","FR","FRA","FRANCE" -"3278938232","3278938235","DE","DEU","GERMANY" -"3278938236","3278938239","FR","FRA","FRANCE" -"3278938240","3278938243","LI","LIE","LIECHTENSTEIN" -"3278938244","3278938247","IT","ITA","ITALY" -"3278938248","3278938251","AT","AUT","AUSTRIA" -"3278938252","3278938255","GR","GRC","GREECE" -"3278938256","3278938263","CH","CHE","SWITZERLAND" -"3278938264","3278938267","PL","POL","POLAND" -"3278938268","3278938275","FR","FRA","FRANCE" -"3278938276","3278938279","NL","NLD","NETHERLANDS" -"3278938280","3278938283","AT","AUT","AUSTRIA" -"3278938284","3278938287","FR","FRA","FRANCE" -"3278938288","3278938291","ES","ESP","SPAIN" -"3278938292","3278938299","DE","DEU","GERMANY" -"3278938300","3278938303","ES","ESP","SPAIN" -"3278938304","3278938307","DE","DEU","GERMANY" -"3278938308","3278938311","GB","GBR","UNITED KINGDOM" -"3278938312","3278938315","DE","DEU","GERMANY" -"3278938316","3278938323","FR","FRA","FRANCE" -"3278938324","3278938335","DE","DEU","GERMANY" -"3278938336","3278938339","CH","CHE","SWITZERLAND" -"3278938340","3278938343","DE","DEU","GERMANY" -"3278938344","3278938347","NL","NLD","NETHERLANDS" -"3278938348","3278938351","FR","FRA","FRANCE" -"3278938352","3278938355","DE","DEU","GERMANY" -"3278938356","3278938359","ES","ESP","SPAIN" -"3278938360","3278938363","DK","DNK","DENMARK" -"3278938364","3278938367","BH","BHR","BAHRAIN" -"3278938368","3278938375","FR","FRA","FRANCE" -"3278938376","3278938379","DE","DEU","GERMANY" -"3278938380","3278938383","FR","FRA","FRANCE" -"3278938384","3278938387","ZA","ZAF","SOUTH AFRICA" -"3278938388","3278938399","DE","DEU","GERMANY" -"3278938400","3278938403","AT","AUT","AUSTRIA" -"3278938404","3278938407","GB","GBR","UNITED KINGDOM" -"3278938408","3278938411","CH","CHE","SWITZERLAND" -"3278938412","3278938415","DE","DEU","GERMANY" -"3278938416","3278938419","CH","CHE","SWITZERLAND" -"3278938420","3278938423","GB","GBR","UNITED KINGDOM" -"3278938424","3278938427","DE","DEU","GERMANY" -"3278938428","3278938431","FR","FRA","FRANCE" -"3278938432","3278938435","SI","SVN","SLOVENIA" -"3278938436","3278938439","DE","DEU","GERMANY" -"3278938440","3278938443","IT","ITA","ITALY" -"3278938444","3278938447","DE","DEU","GERMANY" -"3278938448","3278938451","IT","ITA","ITALY" -"3278938452","3278938455","GB","GBR","UNITED KINGDOM" -"3278938456","3278938459","ES","ESP","SPAIN" -"3278938460","3278938463","FR","FRA","FRANCE" -"3278938464","3278938467","DE","DEU","GERMANY" -"3278938468","3278938471","NL","NLD","NETHERLANDS" -"3278938472","3278938479","DE","DEU","GERMANY" -"3278938480","3278938483","CH","CHE","SWITZERLAND" -"3278938484","3278938487","DE","DEU","GERMANY" -"3278938488","3278938491","NL","NLD","NETHERLANDS" -"3278938492","3278938495","ES","ESP","SPAIN" -"3278938496","3278938499","NL","NLD","NETHERLANDS" -"3278938500","3278938503","DE","DEU","GERMANY" -"3278938504","3278938507","SE","SWE","SWEDEN" -"3278938508","3278938511","IT","ITA","ITALY" -"3278938512","3278938515","DE","DEU","GERMANY" -"3278938516","3278938523","NL","NLD","NETHERLANDS" -"3278938524","3278938527","FR","FRA","FRANCE" -"3278938528","3278938531","NO","NOR","NORWAY" -"3278938532","3278938535","DK","DNK","DENMARK" -"3278938536","3278938555","DE","DEU","GERMANY" -"3278938556","3278938559","HU","HUN","HUNGARY" -"3278938560","3278938563","CY","CYP","CYPRUS" -"3278938564","3278938567","FR","FRA","FRANCE" -"3278938568","3278938575","DE","DEU","GERMANY" -"3278938576","3278938579","CZ","CZE","CZECH REPUBLIC" -"3278938580","3278938583","DE","DEU","GERMANY" -"3278938584","3278938587","GB","GBR","UNITED KINGDOM" -"3278938588","3278938591","CH","CHE","SWITZERLAND" -"3278938592","3278938595","DE","DEU","GERMANY" -"3278938596","3278938599","DK","DNK","DENMARK" -"3278938600","3278938603","DE","DEU","GERMANY" -"3278938604","3278938607","IT","ITA","ITALY" -"3278938608","3278938611","AT","AUT","AUSTRIA" -"3278938612","3278938615","NL","NLD","NETHERLANDS" -"3278938616","3278938619","DK","DNK","DENMARK" -"3278938620","3278938627","FR","FRA","FRANCE" -"3278938628","3278938631","DE","DEU","GERMANY" -"3278938632","3278938635","NL","NLD","NETHERLANDS" -"3278938636","3278938639","GB","GBR","UNITED KINGDOM" -"3278938640","3278938643","DE","DEU","GERMANY" -"3278938644","3278938647","GB","GBR","UNITED KINGDOM" -"3278938648","3278938659","DE","DEU","GERMANY" -"3278938660","3278938663","CH","CHE","SWITZERLAND" -"3278938664","3278938667","GB","GBR","UNITED KINGDOM" -"3278938668","3278938671","AT","AUT","AUSTRIA" -"3278938672","3278938675","IT","ITA","ITALY" -"3278938676","3278938679","FR","FRA","FRANCE" -"3278938680","3278938683","NO","NOR","NORWAY" -"3278938684","3278938687","DE","DEU","GERMANY" -"3278938688","3278938691","CH","CHE","SWITZERLAND" -"3278938692","3278938695","DE","DEU","GERMANY" -"3278938696","3278938699","IT","ITA","ITALY" -"3278938700","3278938703","ES","ESP","SPAIN" -"3278938704","3278938707","FR","FRA","FRANCE" -"3278938708","3278938715","DE","DEU","GERMANY" -"3278938716","3278938719","CH","CHE","SWITZERLAND" -"3278938720","3278938723","NL","NLD","NETHERLANDS" -"3278938724","3278938727","BE","BEL","BELGIUM" -"3278938728","3278938731","ES","ESP","SPAIN" -"3278938732","3278938735","CH","CHE","SWITZERLAND" -"3278938736","3278938739","IT","ITA","ITALY" -"3278938740","3278938743","FR","FRA","FRANCE" -"3278938744","3278938751","DE","DEU","GERMANY" -"3278938752","3278938755","CH","CHE","SWITZERLAND" -"3278938756","3278938759","DE","DEU","GERMANY" -"3278938760","3278938763","GB","GBR","UNITED KINGDOM" -"3278938764","3278938767","FR","FRA","FRANCE" -"3278938768","3278938771","GB","GBR","UNITED KINGDOM" -"3278938772","3278938775","SE","SWE","SWEDEN" -"3278938776","3278938779","GB","GBR","UNITED KINGDOM" -"3278938780","3278938783","IT","ITA","ITALY" -"3278938784","3278938787","BE","BEL","BELGIUM" -"3278938788","3278938791","ES","ESP","SPAIN" -"3278938792","3278938795","DE","DEU","GERMANY" -"3278938796","3278938799","GR","GRC","GREECE" -"3278938800","3278938803","DE","DEU","GERMANY" -"3278938804","3278938807","IT","ITA","ITALY" -"3278938808","3278938815","GB","GBR","UNITED KINGDOM" -"3278938816","3278938819","ES","ESP","SPAIN" -"3278938820","3278938827","DE","DEU","GERMANY" -"3278938828","3278938831","GB","GBR","UNITED KINGDOM" -"3278938832","3278938835","IT","ITA","ITALY" -"3278938836","3278938839","FR","FRA","FRANCE" -"3278938840","3278938843","DE","DEU","GERMANY" -"3278938844","3278938847","HU","HUN","HUNGARY" -"3278938848","3278938851","CH","CHE","SWITZERLAND" -"3278938852","3278938855","DE","DEU","GERMANY" -"3278938856","3278938859","PT","PRT","PORTUGAL" -"3278938860","3278938863","DE","DEU","GERMANY" -"3278938864","3278938871","IT","ITA","ITALY" -"3278938872","3278938875","DE","DEU","GERMANY" -"3278938876","3278938879","NL","NLD","NETHERLANDS" -"3278938880","3278938887","FR","FRA","FRANCE" -"3278938888","3278938891","ES","ESP","SPAIN" -"3278938892","3278938895","DE","DEU","GERMANY" -"3278938896","3278938903","FR","FRA","FRANCE" -"3278938904","3278938911","GB","GBR","UNITED KINGDOM" -"3278938912","3278938919","DE","DEU","GERMANY" -"3278938920","3278938923","SK","SVK","SLOVAKIA" -"3278938924","3278938927","DE","DEU","GERMANY" -"3278938928","3278938935","GB","GBR","UNITED KINGDOM" -"3278938936","3278938939","CH","CHE","SWITZERLAND" -"3278938940","3278938943","GR","GRC","GREECE" -"3278938944","3278938947","IT","ITA","ITALY" -"3278938948","3278938951","DE","DEU","GERMANY" -"3278938952","3278938955","FR","FRA","FRANCE" -"3278938956","3278938959","GB","GBR","UNITED KINGDOM" -"3278938960","3278938967","DE","DEU","GERMANY" -"3278938968","3278938971","BE","BEL","BELGIUM" -"3278938972","3278938975","DE","DEU","GERMANY" -"3278938976","3278938979","NL","NLD","NETHERLANDS" -"3278938980","3278938987","FR","FRA","FRANCE" -"3278938988","3278938991","AT","AUT","AUSTRIA" -"3278938992","3278938995","FR","FRA","FRANCE" -"3278938996","3278938999","DE","DEU","GERMANY" -"3278939000","3278939003","ES","ESP","SPAIN" -"3278939004","3278939007","NL","NLD","NETHERLANDS" -"3278939008","3278939011","IE","IRL","IRELAND" -"3278939012","3278939015","RU","RUS","RUSSIAN FEDERATION" -"3278939016","3278939019","ES","ESP","SPAIN" -"3278939020","3278939023","NL","NLD","NETHERLANDS" -"3278939024","3278939027","IT","ITA","ITALY" -"3278939028","3278939031","CY","CYP","CYPRUS" -"3278939032","3278939035","DE","DEU","GERMANY" -"3278939036","3278939039","HU","HUN","HUNGARY" -"3278939040","3278939047","DE","DEU","GERMANY" -"3278939048","3278939055","FR","FRA","FRANCE" -"3278939056","3278939063","DE","DEU","GERMANY" -"3278939064","3278939067","ES","ESP","SPAIN" -"3278939068","3278939071","IT","ITA","ITALY" -"3278939072","3278939075","DE","DEU","GERMANY" -"3278939076","3278939079","CH","CHE","SWITZERLAND" -"3278939080","3278939083","DE","DEU","GERMANY" -"3278939084","3278939087","IT","ITA","ITALY" -"3278939088","3278939091","IS","ISL","ICELAND" -"3278939092","3278939095","DE","DEU","GERMANY" -"3278939096","3278939099","IT","ITA","ITALY" -"3278939100","3278939103","DE","DEU","GERMANY" -"3278939104","3278939107","CH","CHE","SWITZERLAND" -"3278939108","3278939111","FR","FRA","FRANCE" -"3278939112","3278939115","DE","DEU","GERMANY" -"3278939116","3278939119","NL","NLD","NETHERLANDS" -"3278939120","3278939131","DE","DEU","GERMANY" -"3278939132","3278939135","NL","NLD","NETHERLANDS" -"3278939136","3278939147","US","USA","UNITED STATES" -"3278939148","3278939151","AR","ARG","ARGENTINA" -"3278939152","3278939155","ES","ESP","SPAIN" -"3278939156","3278939195","US","USA","UNITED STATES" -"3278939196","3278939199","CL","CHL","CHILE" -"3278939200","3278939259","US","USA","UNITED STATES" -"3278939260","3278939263","BR","BRA","BRAZIL" -"3278939264","3278939271","AR","ARG","ARGENTINA" -"3278939272","3278939279","US","USA","UNITED STATES" -"3278939280","3278939283","CO","COL","COLOMBIA" -"3278939284","3278939291","US","USA","UNITED STATES" -"3278939292","3278939295","AR","ARG","ARGENTINA" -"3278939296","3278939307","US","USA","UNITED STATES" -"3278939308","3278939311","MX","MEX","MEXICO" -"3278939312","3278939315","US","USA","UNITED STATES" -"3278939316","3278939319","AR","ARG","ARGENTINA" -"3278939320","3278939323","US","USA","UNITED STATES" -"3278939324","3278939327","CA","CAN","CANADA" -"3278939328","3278939331","US","USA","UNITED STATES" -"3278939332","3278939335","BR","BRA","BRAZIL" -"3278939336","3278939339","CA","CAN","CANADA" -"3278939340","3278939351","US","USA","UNITED STATES" -"3278939352","3278939355","BR","BRA","BRAZIL" -"3278939356","3278939379","US","USA","UNITED STATES" -"3278939380","3278939383","BR","BRA","BRAZIL" -"3278939384","3278939391","US","USA","UNITED STATES" -"3278939392","3278939395","DE","DEU","GERMANY" -"3278939396","3278939399","GB","GBR","UNITED KINGDOM" -"3278939400","3278939403","DE","DEU","GERMANY" -"3278939404","3278939407","CH","CHE","SWITZERLAND" -"3278939408","3278939415","DE","DEU","GERMANY" -"3278939416","3278939419","ZW","ZWE","ZIMBABWE" -"3278939420","3278939423","IE","IRL","IRELAND" -"3278939424","3278939427","GB","GBR","UNITED KINGDOM" -"3278939428","3278939439","DE","DEU","GERMANY" -"3278939440","3278939443","IT","ITA","ITALY" -"3278939444","3278939447","DE","DEU","GERMANY" -"3278939448","3278939451","PL","POL","POLAND" -"3278939452","3278939459","DE","DEU","GERMANY" -"3278939460","3278939463","DK","DNK","DENMARK" -"3278939464","3278939467","CY","CYP","CYPRUS" -"3278939468","3278939471","DE","DEU","GERMANY" -"3278939472","3278939475","PL","POL","POLAND" -"3278939476","3278939479","BE","BEL","BELGIUM" -"3278939480","3278939483","IT","ITA","ITALY" -"3278939484","3278939491","NL","NLD","NETHERLANDS" -"3278939492","3278939495","DE","DEU","GERMANY" -"3278939496","3278939499","CH","CHE","SWITZERLAND" -"3278939500","3278939503","ES","ESP","SPAIN" -"3278939504","3278939511","DE","DEU","GERMANY" -"3278939512","3278939515","LU","LUX","LUXEMBOURG" -"3278939516","3278939523","NL","NLD","NETHERLANDS" -"3278939524","3278939527","LU","LUX","LUXEMBOURG" -"3278939528","3278939531","FR","FRA","FRANCE" -"3278939532","3278939535","DE","DEU","GERMANY" -"3278939536","3278939539","BE","BEL","BELGIUM" -"3278939540","3278939555","DE","DEU","GERMANY" -"3278939556","3278939559","IT","ITA","ITALY" -"3278939560","3278939563","DE","DEU","GERMANY" -"3278939564","3278939567","FR","FRA","FRANCE" -"3278939568","3278939571","PT","PRT","PORTUGAL" -"3278939572","3278939575","ES","ESP","SPAIN" -"3278939576","3278939579","DE","DEU","GERMANY" -"3278939580","3278939583","NL","NLD","NETHERLANDS" -"3278939584","3278939587","IT","ITA","ITALY" -"3278939588","3278939591","LU","LUX","LUXEMBOURG" -"3278939592","3278939595","AO","AGO","ANGOLA" -"3278939596","3278939599","NL","NLD","NETHERLANDS" -"3278939600","3278939603","GB","GBR","UNITED KINGDOM" -"3278939604","3278939607","DE","DEU","GERMANY" -"3278939608","3278939611","DK","DNK","DENMARK" -"3278939612","3278939615","FR","FRA","FRANCE" -"3278939616","3278939631","DE","DEU","GERMANY" -"3278939632","3278939635","GB","GBR","UNITED KINGDOM" -"3278939636","3278939639","DK","DNK","DENMARK" -"3278939640","3278939643","DE","DEU","GERMANY" -"3278939644","3278939647","UA","UKR","UKRAINE" -"3278939648","3278939651","FR","FRA","FRANCE" -"3278939652","3278939655","DE","DEU","GERMANY" -"3278939656","3278939659","FR","FRA","FRANCE" -"3278939660","3278939663","TR","TUR","TURKEY" -"3278939664","3278939667","IT","ITA","ITALY" -"3278939668","3278939671","GB","GBR","UNITED KINGDOM" -"3278939672","3278939679","FR","FRA","FRANCE" -"3278939680","3278939683","GR","GRC","GREECE" -"3278939684","3278939687","FR","FRA","FRANCE" -"3278939688","3278939691","DE","DEU","GERMANY" -"3278939692","3278939695","FR","FRA","FRANCE" -"3278939696","3278939699","GR","GRC","GREECE" -"3278939700","3278939703","TR","TUR","TURKEY" -"3278939704","3278939707","KE","KEN","KENYA" -"3278939708","3278939711","TR","TUR","TURKEY" -"3278939712","3278939715","CY","CYP","CYPRUS" -"3278939716","3278939723","TR","TUR","TURKEY" -"3278939724","3278939727","MC","MCO","MONACO" -"3278939728","3278939731","TR","TUR","TURKEY" -"3278939732","3278939735","AT","AUT","AUSTRIA" -"3278939736","3278939739","RU","RUS","RUSSIAN FEDERATION" -"3278939740","3278939743","HU","HUN","HUNGARY" -"3278939744","3278939747","GB","GBR","UNITED KINGDOM" -"3278939748","3278939751","ES","ESP","SPAIN" -"3278939752","3278939755","GR","GRC","GREECE" -"3278939756","3278939759","AO","AGO","ANGOLA" -"3278939760","3278939763","FR","FRA","FRANCE" -"3278939764","3278939767","GR","GRC","GREECE" -"3278939768","3278939771","ES","ESP","SPAIN" -"3278939772","3278939775","IT","ITA","ITALY" -"3278939776","3278939779","GR","GRC","GREECE" -"3278939780","3278939783","FR","FRA","FRANCE" -"3278939784","3278939787","BE","BEL","BELGIUM" -"3278939788","3278939791","DE","DEU","GERMANY" -"3278939792","3278939803","ES","ESP","SPAIN" -"3278939804","3278939807","GB","GBR","UNITED KINGDOM" -"3278939808","3278939815","DE","DEU","GERMANY" -"3278939816","3278939819","NL","NLD","NETHERLANDS" -"3278939820","3278939823","DE","DEU","GERMANY" -"3278939824","3278939827","HU","HUN","HUNGARY" -"3278939828","3278939835","DE","DEU","GERMANY" -"3278939836","3278939839","FR","FRA","FRANCE" -"3278939840","3278939843","IT","ITA","ITALY" -"3278939844","3278939847","BE","BEL","BELGIUM" -"3278939848","3278939851","CH","CHE","SWITZERLAND" -"3278939852","3278939855","DE","DEU","GERMANY" -"3278939856","3278939859","FR","FRA","FRANCE" -"3278939860","3278939863","GB","GBR","UNITED KINGDOM" -"3278939864","3278939867","IT","ITA","ITALY" -"3278939868","3278939871","CH","CHE","SWITZERLAND" -"3278939872","3278939875","ES","ESP","SPAIN" -"3278939876","3278939879","IT","ITA","ITALY" -"3278939880","3278939883","ES","ESP","SPAIN" -"3278939884","3278939887","DE","DEU","GERMANY" -"3278939888","3278939891","PL","POL","POLAND" -"3278939892","3278939899","ES","ESP","SPAIN" -"3278939900","3278939903","IT","ITA","ITALY" -"3278939904","3278939907","HK","HKG","HONG KONG" -"3278939908","3278939911","MY","MYS","MALAYSIA" -"3278939912","3278939915","TH","THA","THAILAND" -"3278939916","3278939923","SG","SGP","SINGAPORE" -"3278939924","3278939927","CN","CHN","CHINA" -"3278939928","3278939931","SG","SGP","SINGAPORE" -"3278939932","3278939935","IN","IND","INDIA" -"3278939936","3278939939","MY","MYS","MALAYSIA" -"3278939940","3278939943","SG","SGP","SINGAPORE" -"3278939944","3278939947","TW","TWN","TAIWAN" -"3278939948","3278939951","SG","SGP","SINGAPORE" -"3278939952","3278939955","MY","MYS","MALAYSIA" -"3278939956","3278939959","SG","SGP","SINGAPORE" -"3278939960","3278939963","CN","CHN","CHINA" -"3278939964","3278939967","MY","MYS","MALAYSIA" -"3278939968","3278939971","TW","TWN","TAIWAN" -"3278939972","3278939979","MY","MYS","MALAYSIA" -"3278939980","3278939983","TH","THA","THAILAND" -"3278939984","3278939987","DE","DEU","GERMANY" -"3278939988","3278939991","CN","CHN","CHINA" -"3278939992","3278939995","SG","SGP","SINGAPORE" -"3278939996","3278939999","MY","MYS","MALAYSIA" -"3278940000","3278940011","SG","SGP","SINGAPORE" -"3278940012","3278940015","ID","IDN","INDONESIA" -"3278940016","3278940059","SG","SGP","SINGAPORE" -"3278940060","3278940067","CN","CHN","CHINA" -"3278940068","3278940071","TW","TWN","TAIWAN" -"3278940072","3278940083","SG","SGP","SINGAPORE" -"3278940084","3278940091","MY","MYS","MALAYSIA" -"3278940092","3278940095","SG","SGP","SINGAPORE" -"3278940096","3278940099","IN","IND","INDIA" -"3278940100","3278940103","SG","SGP","SINGAPORE" -"3278940104","3278940107","MY","MYS","MALAYSIA" -"3278940108","3278940127","SG","SGP","SINGAPORE" -"3278940128","3278940131","TW","TWN","TAIWAN" -"3278940132","3278940135","BD","BGD","BANGLADESH" -"3278940136","3278940139","SG","SGP","SINGAPORE" -"3278940140","3278940143","IN","IND","INDIA" -"3278940144","3278940151","MY","MYS","MALAYSIA" -"3278940152","3278940155","IN","IND","INDIA" -"3278940156","3278940159","PH","PHL","PHILIPPINES" -"3278940160","3278940163","GR","GRC","GREECE" -"3278940164","3278940167","CH","CHE","SWITZERLAND" -"3278940168","3278940171","DK","DNK","DENMARK" -"3278940172","3278940175","FR","FRA","FRANCE" -"3278940176","3278940179","GB","GBR","UNITED KINGDOM" -"3278940180","3278940183","CH","CHE","SWITZERLAND" -"3278940184","3278940187","DE","DEU","GERMANY" -"3278940188","3278940195","GB","GBR","UNITED KINGDOM" -"3278940196","3278940211","DE","DEU","GERMANY" -"3278940212","3278940215","PT","PRT","PORTUGAL" -"3278940216","3278940219","NL","NLD","NETHERLANDS" -"3278940220","3278940223","GB","GBR","UNITED KINGDOM" -"3278940224","3278940227","CH","CHE","SWITZERLAND" -"3278940228","3278940231","DE","DEU","GERMANY" -"3278940232","3278940235","CH","CHE","SWITZERLAND" -"3278940236","3278940239","ES","ESP","SPAIN" -"3278940240","3278940243","CY","CYP","CYPRUS" -"3278940244","3278940247","DE","DEU","GERMANY" -"3278940248","3278940251","FR","FRA","FRANCE" -"3278940252","3278940255","IT","ITA","ITALY" -"3278940256","3278940259","BE","BEL","BELGIUM" -"3278940260","3278940263","DE","DEU","GERMANY" -"3278940264","3278940267","ES","ESP","SPAIN" -"3278940268","3278940275","DE","DEU","GERMANY" -"3278940276","3278940279","GB","GBR","UNITED KINGDOM" -"3278940280","3278940283","CH","CHE","SWITZERLAND" -"3278940284","3278940291","NL","NLD","NETHERLANDS" -"3278940292","3278940295","DE","DEU","GERMANY" -"3278940296","3278940299","IT","ITA","ITALY" -"3278940300","3278940303","FR","FRA","FRANCE" -"3278940304","3278940307","DE","DEU","GERMANY" -"3278940308","3278940311","CH","CHE","SWITZERLAND" -"3278940312","3278940315","IT","ITA","ITALY" -"3278940316","3278940319","DE","DEU","GERMANY" -"3278940320","3278940323","NL","NLD","NETHERLANDS" -"3278940324","3278940327","ES","ESP","SPAIN" -"3278940328","3278940335","DE","DEU","GERMANY" -"3278940336","3278940339","NL","NLD","NETHERLANDS" -"3278940340","3278940347","DE","DEU","GERMANY" -"3278940348","3278940355","GB","GBR","UNITED KINGDOM" -"3278940356","3278940359","NL","NLD","NETHERLANDS" -"3278940360","3278940363","GR","GRC","GREECE" -"3278940364","3278940367","IT","ITA","ITALY" -"3278940368","3278940371","FR","FRA","FRANCE" -"3278940372","3278940375","GB","GBR","UNITED KINGDOM" -"3278940376","3278940379","PT","PRT","PORTUGAL" -"3278940380","3278940383","FR","FRA","FRANCE" -"3278940384","3278940387","NL","NLD","NETHERLANDS" -"3278940388","3278940391","IE","IRL","IRELAND" -"3278940392","3278940395","FR","FRA","FRANCE" -"3278940396","3278940399","NL","NLD","NETHERLANDS" -"3278940400","3278940403","DE","DEU","GERMANY" -"3278940404","3278940407","FR","FRA","FRANCE" -"3278940408","3278940411","IT","ITA","ITALY" -"3278940412","3278940412","CH","CHE","SWITZERLAND" -"3278940413","3278940415","DE","DEU","GERMANY" -"3278940416","3278940419","BE","BEL","BELGIUM" -"3278940420","3278940423","DE","DEU","GERMANY" -"3278940424","3278940427","CH","CHE","SWITZERLAND" -"3278940428","3278940431","DE","DEU","GERMANY" -"3278940432","3278940443","CH","CHE","SWITZERLAND" -"3278940444","3278940447","DE","DEU","GERMANY" -"3278940448","3278940451","GB","GBR","UNITED KINGDOM" -"3278940452","3278940455","DE","DEU","GERMANY" -"3278940456","3278940459","GB","GBR","UNITED KINGDOM" -"3278940460","3278940463","DE","DEU","GERMANY" -"3278940464","3278940467","FR","FRA","FRANCE" -"3278940468","3278940471","DE","DEU","GERMANY" -"3278940472","3278940475","ES","ESP","SPAIN" -"3278940476","3278940479","FR","FRA","FRANCE" -"3278940480","3278940483","CH","CHE","SWITZERLAND" -"3278940484","3278940487","FR","FRA","FRANCE" -"3278940488","3278940491","ES","ESP","SPAIN" -"3278940492","3278940495","IT","ITA","ITALY" -"3278940496","3278940499","NL","NLD","NETHERLANDS" -"3278940500","3278940503","FR","FRA","FRANCE" -"3278940504","3278940507","DK","DNK","DENMARK" -"3278940508","3278940511","FR","FRA","FRANCE" -"3278940512","3278940515","DE","DEU","GERMANY" -"3278940516","3278940523","CH","CHE","SWITZERLAND" -"3278940524","3278940531","ES","ESP","SPAIN" -"3278940532","3278940535","DE","DEU","GERMANY" -"3278940536","3278940539","CH","CHE","SWITZERLAND" -"3278940540","3278940543","ES","ESP","SPAIN" -"3278940544","3278940551","DE","DEU","GERMANY" -"3278940552","3278940555","GB","GBR","UNITED KINGDOM" -"3278940556","3278940559","DE","DEU","GERMANY" -"3278940560","3278940563","AT","AUT","AUSTRIA" -"3278940564","3278940571","FR","FRA","FRANCE" -"3278940572","3278940579","CH","CHE","SWITZERLAND" -"3278940580","3278940587","DE","DEU","GERMANY" -"3278940588","3278940591","IT","ITA","ITALY" -"3278940592","3278940595","FR","FRA","FRANCE" -"3278940596","3278940599","BE","BEL","BELGIUM" -"3278940600","3278940603","DE","DEU","GERMANY" -"3278940604","3278940607","FR","FRA","FRANCE" -"3278940608","3278940611","ES","ESP","SPAIN" -"3278940612","3278940615","PT","PRT","PORTUGAL" -"3278940616","3278940619","IT","ITA","ITALY" -"3278940620","3278940623","DE","DEU","GERMANY" -"3278940624","3278940631","IT","ITA","ITALY" -"3278940632","3278940635","GB","GBR","UNITED KINGDOM" -"3278940636","3278940639","BE","BEL","BELGIUM" -"3278940640","3278940643","CH","CHE","SWITZERLAND" -"3278940644","3278940647","IT","ITA","ITALY" -"3278940648","3278940651","DE","DEU","GERMANY" -"3278940652","3278940655","FR","FRA","FRANCE" -"3278940656","3278940663","IT","ITA","ITALY" -"3278940664","3278940671","FR","FRA","FRANCE" -"3278940672","3278940679","DE","DEU","GERMANY" -"3278940680","3278940683","CH","CHE","SWITZERLAND" -"3278940684","3278940691","NL","NLD","NETHERLANDS" -"3278940692","3278940695","SE","SWE","SWEDEN" -"3278940696","3278940707","DE","DEU","GERMANY" -"3278940708","3278940711","ES","ESP","SPAIN" -"3278940712","3278940715","BE","BEL","BELGIUM" -"3278940716","3278940723","ES","ESP","SPAIN" -"3278940724","3278940727","FR","FRA","FRANCE" -"3278940728","3278940731","DE","DEU","GERMANY" -"3278940732","3278940739","FR","FRA","FRANCE" -"3278940740","3278940743","GB","GBR","UNITED KINGDOM" -"3278940744","3278940747","ES","ESP","SPAIN" -"3278940748","3278940751","DE","DEU","GERMANY" -"3278940752","3278940759","FR","FRA","FRANCE" -"3278940760","3278940763","NL","NLD","NETHERLANDS" -"3278940764","3278940767","DE","DEU","GERMANY" -"3278940768","3278940771","GB","GBR","UNITED KINGDOM" -"3278940772","3278940783","DE","DEU","GERMANY" -"3278940784","3278940787","CH","CHE","SWITZERLAND" -"3278940788","3278940791","GB","GBR","UNITED KINGDOM" -"3278940792","3278940795","NL","NLD","NETHERLANDS" -"3278940796","3278940803","DE","DEU","GERMANY" -"3278940804","3278940807","DK","DNK","DENMARK" -"3278940808","3278940815","DE","DEU","GERMANY" -"3278940816","3278940819","IT","ITA","ITALY" -"3278940820","3278940823","GB","GBR","UNITED KINGDOM" -"3278940824","3278940827","IT","ITA","ITALY" -"3278940828","3278940831","DE","DEU","GERMANY" -"3278940832","3278940835","CH","CHE","SWITZERLAND" -"3278940836","3278940839","IT","ITA","ITALY" -"3278940840","3278940847","DE","DEU","GERMANY" -"3278940848","3278940851","CH","CHE","SWITZERLAND" -"3278940852","3278940855","DE","DEU","GERMANY" -"3278940856","3278940859","PT","PRT","PORTUGAL" -"3278940860","3278940863","NL","NLD","NETHERLANDS" -"3278940864","3278940867","CH","CHE","SWITZERLAND" -"3278940868","3278940871","GB","GBR","UNITED KINGDOM" -"3278940872","3278940875","DE","DEU","GERMANY" -"3278940876","3278940879","IT","ITA","ITALY" -"3278940880","3278940883","CH","CHE","SWITZERLAND" -"3278940884","3278940887","ES","ESP","SPAIN" -"3278940888","3278940891","BE","BEL","BELGIUM" -"3278940892","3278940895","DE","DEU","GERMANY" -"3278940896","3278940899","IT","ITA","ITALY" -"3278940900","3278940903","FR","FRA","FRANCE" -"3278940904","3278940911","ES","ESP","SPAIN" -"3278940912","3278940915","IT","ITA","ITALY" -"3278940916","3278940919","DE","DEU","GERMANY" -"3278940920","3278940923","PT","PRT","PORTUGAL" -"3278940924","3278940931","DE","DEU","GERMANY" -"3278940932","3278940935","NL","NLD","NETHERLANDS" -"3278940936","3278940939","ES","ESP","SPAIN" -"3278940940","3278940943","FR","FRA","FRANCE" -"3278940944","3278940947","NL","NLD","NETHERLANDS" -"3278940948","3278940951","FR","FRA","FRANCE" -"3278940952","3278940955","IT","ITA","ITALY" -"3278940956","3278940959","DK","DNK","DENMARK" -"3278940960","3278940963","FR","FRA","FRANCE" -"3278940964","3278940967","IT","ITA","ITALY" -"3278940968","3278940971","FR","FRA","FRANCE" -"3278940972","3278940983","DE","DEU","GERMANY" -"3278940984","3278940987","IT","ITA","ITALY" -"3278940988","3278940991","NL","NLD","NETHERLANDS" -"3278940992","3278940995","PT","PRT","PORTUGAL" -"3278940996","3278940999","DE","DEU","GERMANY" -"3278941000","3278941003","NL","NLD","NETHERLANDS" -"3278941004","3278941007","CH","CHE","SWITZERLAND" -"3278941008","3278941011","ES","ESP","SPAIN" -"3278941012","3278941015","GB","GBR","UNITED KINGDOM" -"3278941016","3278941023","DE","DEU","GERMANY" -"3278941024","3278941027","IT","ITA","ITALY" -"3278941028","3278941031","FR","FRA","FRANCE" -"3278941032","3278941035","DE","DEU","GERMANY" -"3278941036","3278941039","IT","ITA","ITALY" -"3278941040","3278941043","DE","DEU","GERMANY" -"3278941044","3278941047","FR","FRA","FRANCE" -"3278941048","3278941051","ES","ESP","SPAIN" -"3278941052","3278941059","DE","DEU","GERMANY" -"3278941060","3278941063","GB","GBR","UNITED KINGDOM" -"3278941064","3278941067","IT","ITA","ITALY" -"3278941068","3278941071","ES","ESP","SPAIN" -"3278941072","3278941075","IT","ITA","ITALY" -"3278941076","3278941083","DE","DEU","GERMANY" -"3278941084","3278941087","GB","GBR","UNITED KINGDOM" -"3278941088","3278941091","BE","BEL","BELGIUM" -"3278941092","3278941095","DK","DNK","DENMARK" -"3278941096","3278941099","FR","FRA","FRANCE" -"3278941100","3278941107","DE","DEU","GERMANY" -"3278941108","3278941111","DK","DNK","DENMARK" -"3278941112","3278941119","FR","FRA","FRANCE" -"3278941120","3278941127","DE","DEU","GERMANY" -"3278941128","3278941131","BE","BEL","BELGIUM" -"3278941132","3278941135","NL","NLD","NETHERLANDS" -"3278941136","3278941139","GB","GBR","UNITED KINGDOM" -"3278941140","3278941143","DE","DEU","GERMANY" -"3278941144","3278941151","IT","ITA","ITALY" -"3278941152","3278941155","PT","PRT","PORTUGAL" -"3278941156","3278941159","SE","SWE","SWEDEN" -"3278941160","3278941167","DE","DEU","GERMANY" -"3278941168","3278941171","GB","GBR","UNITED KINGDOM" -"3278941172","3278941175","AT","AUT","AUSTRIA" -"3278941176","3278941179","IT","ITA","ITALY" -"3278941180","3278941183","FR","FRA","FRANCE" -"3278941184","3278941191","US","USA","UNITED STATES" -"3278941192","3278941195","BR","BRA","BRAZIL" -"3278941196","3278941215","US","USA","UNITED STATES" -"3278941216","3278941219","BR","BRA","BRAZIL" -"3278941220","3278941243","US","USA","UNITED STATES" -"3278941244","3278941247","CO","COL","COLOMBIA" -"3278941248","3278941255","US","USA","UNITED STATES" -"3278941256","3278941259","MX","MEX","MEXICO" -"3278941260","3278941279","US","USA","UNITED STATES" -"3278941280","3278941283","BR","BRA","BRAZIL" -"3278941284","3278941287","AR","ARG","ARGENTINA" -"3278941288","3278941303","US","USA","UNITED STATES" -"3278941304","3278941307","CO","COL","COLOMBIA" -"3278941308","3278941319","US","USA","UNITED STATES" -"3278941320","3278941323","CA","CAN","CANADA" -"3278941324","3278941331","US","USA","UNITED STATES" -"3278941332","3278941335","BR","BRA","BRAZIL" -"3278941336","3278941343","US","USA","UNITED STATES" -"3278941344","3278941347","AR","ARG","ARGENTINA" -"3278941348","3278941371","US","USA","UNITED STATES" -"3278941372","3278941375","CA","CAN","CANADA" -"3278941376","3278941399","US","USA","UNITED STATES" -"3278941400","3278941403","VE","VEN","VENEZUELA" -"3278941404","3278941407","BR","BRA","BRAZIL" -"3278941408","3278941419","US","USA","UNITED STATES" -"3278941420","3278941423","DE","DEU","GERMANY" -"3278941424","3278941427","CL","CHL","CHILE" -"3278941428","3278941431","PE","PER","PERU" -"3278941432","3278941439","US","USA","UNITED STATES" -"3278941440","3278941443","AR","ARG","ARGENTINA" -"3278941444","3278941455","US","USA","UNITED STATES" -"3278941456","3278941459","JM","JAM","JAMAICA" -"3278941460","3278941475","US","USA","UNITED STATES" -"3278941476","3278941479","BR","BRA","BRAZIL" -"3278941480","3278941491","US","USA","UNITED STATES" -"3278941492","3278941495","MX","MEX","MEXICO" -"3278941496","3278941499","US","USA","UNITED STATES" -"3278941500","3278941503","CA","CAN","CANADA" -"3278941504","3278941587","US","USA","UNITED STATES" -"3278941588","3278941591","DE","DEU","GERMANY" -"3278941592","3278941595","US","USA","UNITED STATES" -"3278941596","3278941599","PE","PER","PERU" -"3278941600","3278941615","US","USA","UNITED STATES" -"3278941616","3278941619","CA","CAN","CANADA" -"3278941620","3278941639","US","USA","UNITED STATES" -"3278941640","3278941643","BR","BRA","BRAZIL" -"3278941644","3278941651","US","USA","UNITED STATES" -"3278941652","3278941655","VE","VEN","VENEZUELA" -"3278941656","3278941659","US","USA","UNITED STATES" -"3278941660","3278941663","BR","BRA","BRAZIL" -"3278941664","3278941667","CA","CAN","CANADA" -"3278941668","3278941671","US","USA","UNITED STATES" -"3278941672","3278941675","VE","VEN","VENEZUELA" -"3278941676","3278941691","US","USA","UNITED STATES" -"3278941692","3278941695","MX","MEX","MEXICO" -"3278941696","3278941735","US","USA","UNITED STATES" -"3278941736","3278941739","CA","CAN","CANADA" -"3278941740","3278941743","US","USA","UNITED STATES" -"3278941744","3278941747","CA","CAN","CANADA" -"3278941748","3278941819","US","USA","UNITED STATES" -"3278941820","3278941823","CL","CHL","CHILE" -"3278941824","3278941847","US","USA","UNITED STATES" -"3278941848","3278941855","AR","ARG","ARGENTINA" -"3278941856","3278941891","US","USA","UNITED STATES" -"3278941892","3278941895","CA","CAN","CANADA" -"3278941896","3278941911","US","USA","UNITED STATES" -"3278941912","3278941915","MX","MEX","MEXICO" -"3278941916","3278941943","US","USA","UNITED STATES" -"3278941944","3278941947","CO","COL","COLOMBIA" -"3278941948","3278941951","US","USA","UNITED STATES" -"3278941952","3278941955","GB","GBR","UNITED KINGDOM" -"3278941956","3278941959","FR","FRA","FRANCE" -"3278941960","3278941963","DE","DEU","GERMANY" -"3278941964","3278941971","GB","GBR","UNITED KINGDOM" -"3278941972","3278941979","DE","DEU","GERMANY" -"3278941980","3278941987","ES","ESP","SPAIN" -"3278941988","3278941995","FR","FRA","FRANCE" -"3278941996","3278941999","ES","ESP","SPAIN" -"3278942000","3278942003","DE","DEU","GERMANY" -"3278942004","3278942011","IT","ITA","ITALY" -"3278942012","3278942015","DE","DEU","GERMANY" -"3278942016","3278942019","FR","FRA","FRANCE" -"3278942020","3278942023","DE","DEU","GERMANY" -"3278942024","3278942027","FR","FRA","FRANCE" -"3278942028","3278942031","CH","CHE","SWITZERLAND" -"3278942032","3278942035","GR","GRC","GREECE" -"3278942036","3278942039","CH","CHE","SWITZERLAND" -"3278942040","3278942043","ES","ESP","SPAIN" -"3278942044","3278942047","FR","FRA","FRANCE" -"3278942048","3278942051","DE","DEU","GERMANY" -"3278942052","3278942055","CH","CHE","SWITZERLAND" -"3278942056","3278942059","ES","ESP","SPAIN" -"3278942060","3278942063","DE","DEU","GERMANY" -"3278942064","3278942071","ES","ESP","SPAIN" -"3278942072","3278942075","FR","FRA","FRANCE" -"3278942076","3278942079","DE","DEU","GERMANY" -"3278942080","3278942083","ES","ESP","SPAIN" -"3278942084","3278942087","BE","BEL","BELGIUM" -"3278942088","3278942091","ES","ESP","SPAIN" -"3278942092","3278942095","BE","BEL","BELGIUM" -"3278942096","3278942099","PL","POL","POLAND" -"3278942100","3278942103","GB","GBR","UNITED KINGDOM" -"3278942104","3278942107","CH","CHE","SWITZERLAND" -"3278942108","3278942111","DE","DEU","GERMANY" -"3278942112","3278942115","FR","FRA","FRANCE" -"3278942116","3278942119","DE","DEU","GERMANY" -"3278942120","3278942123","GB","GBR","UNITED KINGDOM" -"3278942124","3278942127","AT","AUT","AUSTRIA" -"3278942128","3278942131","DE","DEU","GERMANY" -"3278942132","3278942135","GB","GBR","UNITED KINGDOM" -"3278942136","3278942139","UA","UKR","UKRAINE" -"3278942140","3278942143","NL","NLD","NETHERLANDS" -"3278942144","3278942147","GB","GBR","UNITED KINGDOM" -"3278942148","3278942155","DE","DEU","GERMANY" -"3278942156","3278942159","FR","FRA","FRANCE" -"3278942160","3278942163","DE","DEU","GERMANY" -"3278942164","3278942167","IT","ITA","ITALY" -"3278942168","3278942171","CH","CHE","SWITZERLAND" -"3278942172","3278942175","GB","GBR","UNITED KINGDOM" -"3278942176","3278942179","DE","DEU","GERMANY" -"3278942180","3278942183","FR","FRA","FRANCE" -"3278942184","3278942187","DK","DNK","DENMARK" -"3278942188","3278942191","IT","ITA","ITALY" -"3278942192","3278942199","DE","DEU","GERMANY" -"3278942200","3278942203","GB","GBR","UNITED KINGDOM" -"3278942204","3278942207","CH","CHE","SWITZERLAND" -"3278942208","3278942211","TW","TWN","TAIWAN" -"3278942212","3278942227","AU","AUS","AUSTRALIA" -"3278942228","3278942231","NZ","NZL","NEW ZEALAND" -"3278942232","3278942243","AU","AUS","AUSTRALIA" -"3278942244","3278942247","NZ","NZL","NEW ZEALAND" -"3278942248","3278942255","AU","AUS","AUSTRALIA" -"3278942256","3278942259","NZ","NZL","NEW ZEALAND" -"3278942260","3278942271","AU","AUS","AUSTRALIA" -"3278942272","3278942275","NZ","NZL","NEW ZEALAND" -"3278942276","3278942291","AU","AUS","AUSTRALIA" -"3278942292","3278942295","NZ","NZL","NEW ZEALAND" -"3278942296","3278942299","PG","PNG","PAPUA NEW GUINEA" -"3278942300","3278942355","AU","AUS","AUSTRALIA" -"3278942356","3278942359","NZ","NZL","NEW ZEALAND" -"3278942360","3278942383","AU","AUS","AUSTRALIA" -"3278942384","3278942387","NZ","NZL","NEW ZEALAND" -"3278942388","3278942399","AU","AUS","AUSTRALIA" -"3278942400","3278942403","NZ","NZL","NEW ZEALAND" -"3278942404","3278942435","AU","AUS","AUSTRALIA" -"3278942436","3278942439","DE","DEU","GERMANY" -"3278942440","3278942443","AU","AUS","AUSTRALIA" -"3278942444","3278942447","NZ","NZL","NEW ZEALAND" -"3278942448","3278942455","AU","AUS","AUSTRALIA" -"3278942456","3278942463","DE","DEU","GERMANY" -"3278942464","3278942467","SG","SGP","SINGAPORE" -"3278942468","3278942471","MY","MYS","MALAYSIA" -"3278942472","3278942475","IN","IND","INDIA" -"3278942476","3278942483","SG","SGP","SINGAPORE" -"3278942484","3278942487","CN","CHN","CHINA" -"3278942488","3278942491","IN","IND","INDIA" -"3278942492","3278942495","MY","MYS","MALAYSIA" -"3278942496","3278942499","CN","CHN","CHINA" -"3278942500","3278942507","MY","MYS","MALAYSIA" -"3278942508","3278942511","TH","THA","THAILAND" -"3278942512","3278942515","SG","SGP","SINGAPORE" -"3278942516","3278942519","PH","PHL","PHILIPPINES" -"3278942520","3278942539","IN","IND","INDIA" -"3278942540","3278942543","TW","TWN","TAIWAN" -"3278942544","3278942547","PK","PAK","PAKISTAN" -"3278942548","3278942551","MY","MYS","MALAYSIA" -"3278942552","3278942555","TW","TWN","TAIWAN" -"3278942556","3278942559","IN","IND","INDIA" -"3278942560","3278942571","MY","MYS","MALAYSIA" -"3278942572","3278942575","IN","IND","INDIA" -"3278942576","3278942579","MY","MYS","MALAYSIA" -"3278942580","3278942583","TW","TWN","TAIWAN" -"3278942584","3278942587","SG","SGP","SINGAPORE" -"3278942588","3278942591","CN","CHN","CHINA" -"3278942592","3278942595","TW","TWN","TAIWAN" -"3278942596","3278942599","IN","IND","INDIA" -"3278942600","3278942603","SG","SGP","SINGAPORE" -"3278942604","3278942607","TW","TWN","TAIWAN" -"3278942608","3278942611","TH","THA","THAILAND" -"3278942612","3278942615","PH","PHL","PHILIPPINES" -"3278942616","3278942627","SG","SGP","SINGAPORE" -"3278942628","3278942635","MY","MYS","MALAYSIA" -"3278942636","3278942643","SG","SGP","SINGAPORE" -"3278942644","3278942647","MY","MYS","MALAYSIA" -"3278942648","3278942651","IN","IND","INDIA" -"3278942652","3278942655","MY","MYS","MALAYSIA" -"3278942656","3278942667","SG","SGP","SINGAPORE" -"3278942668","3278942671","MY","MYS","MALAYSIA" -"3278942672","3278942675","SG","SGP","SINGAPORE" -"3278942676","3278942679","HK","HKG","HONG KONG" -"3278942680","3278942683","TW","TWN","TAIWAN" -"3278942684","3278942687","DE","DEU","GERMANY" -"3278942688","3278942691","SG","SGP","SINGAPORE" -"3278942692","3278942695","IN","IND","INDIA" -"3278942696","3278942699","SG","SGP","SINGAPORE" -"3278942700","3278942703","TW","TWN","TAIWAN" -"3278942704","3278942707","MY","MYS","MALAYSIA" -"3278942708","3278942719","SG","SGP","SINGAPORE" -"3278942720","3278942721","DE","DEU","GERMANY" -"3278942722","3278942722","GB","GBR","UNITED KINGDOM" -"3278942723","3278942724","DE","DEU","GERMANY" -"3278942725","3278942725","GB","GBR","UNITED KINGDOM" -"3278942726","3278942726","IT","ITA","ITALY" -"3278942727","3278942727","DE","DEU","GERMANY" -"3278942728","3278942728","CH","CHE","SWITZERLAND" -"3278942729","3278942730","BE","BEL","BELGIUM" -"3278942731","3278942731","DE","DEU","GERMANY" -"3278942732","3278942732","ES","ESP","SPAIN" -"3278942733","3278942733","LU","LUX","LUXEMBOURG" -"3278942734","3278942734","GB","GBR","UNITED KINGDOM" -"3278942735","3278942735","DE","DEU","GERMANY" -"3278942736","3278942736","IT","ITA","ITALY" -"3278942737","3278942737","GB","GBR","UNITED KINGDOM" -"3278942738","3278942739","DE","DEU","GERMANY" -"3278942740","3278942740","NL","NLD","NETHERLANDS" -"3278942741","3278942741","GB","GBR","UNITED KINGDOM" -"3278942742","3278942742","DE","DEU","GERMANY" -"3278942743","3278942743","ES","ESP","SPAIN" -"3278942744","3278942748","DE","DEU","GERMANY" -"3278942749","3278942749","GB","GBR","UNITED KINGDOM" -"3278942750","3278942750","IT","ITA","ITALY" -"3278942751","3278942751","FR","FRA","FRANCE" -"3278942752","3278942753","CH","CHE","SWITZERLAND" -"3278942754","3278942754","DE","DEU","GERMANY" -"3278942755","3278942755","GB","GBR","UNITED KINGDOM" -"3278942756","3278942756","DE","DEU","GERMANY" -"3278942757","3278942757","GB","GBR","UNITED KINGDOM" -"3278942758","3278942759","IT","ITA","ITALY" -"3278942760","3278942761","DE","DEU","GERMANY" -"3278942762","3278942762","GB","GBR","UNITED KINGDOM" -"3278942763","3278942763","NL","NLD","NETHERLANDS" -"3278942764","3278942764","FR","FRA","FRANCE" -"3278942765","3278942765","CH","CHE","SWITZERLAND" -"3278942766","3278942766","PL","POL","POLAND" -"3278942767","3278942767","FR","FRA","FRANCE" -"3278942768","3278942768","NO","NOR","NORWAY" -"3278942769","3278942769","GB","GBR","UNITED KINGDOM" -"3278942770","3278942771","DE","DEU","GERMANY" -"3278942772","3278942772","BE","BEL","BELGIUM" -"3278942773","3278942773","DE","DEU","GERMANY" -"3278942774","3278942774","CH","CHE","SWITZERLAND" -"3278942775","3278942775","FR","FRA","FRANCE" -"3278942776","3278942776","DE","DEU","GERMANY" -"3278942777","3278942778","GB","GBR","UNITED KINGDOM" -"3278942779","3278942779","SE","SWE","SWEDEN" -"3278942780","3278942781","DE","DEU","GERMANY" -"3278942782","3278942782","ES","ESP","SPAIN" -"3278942783","3278942784","DE","DEU","GERMANY" -"3278942785","3278942785","GR","GRC","GREECE" -"3278942786","3278942786","SI","SVN","SLOVENIA" -"3278942787","3278942787","IT","ITA","ITALY" -"3278942788","3278942789","DE","DEU","GERMANY" -"3278942790","3278942790","ES","ESP","SPAIN" -"3278942791","3278942791","IT","ITA","ITALY" -"3278942792","3278942792","US","USA","UNITED STATES" -"3278942793","3278942793","CH","CHE","SWITZERLAND" -"3278942794","3278942794","DE","DEU","GERMANY" -"3278942795","3278942795","GB","GBR","UNITED KINGDOM" -"3278942796","3278942796","IT","ITA","ITALY" -"3278942797","3278942797","GB","GBR","UNITED KINGDOM" -"3278942798","3278942798","DE","DEU","GERMANY" -"3278942799","3278942799","IT","ITA","ITALY" -"3278942800","3278942800","FR","FRA","FRANCE" -"3278942801","3278942801","GB","GBR","UNITED KINGDOM" -"3278942802","3278942803","DE","DEU","GERMANY" -"3278942804","3278942804","IT","ITA","ITALY" -"3278942805","3278942805","DE","DEU","GERMANY" -"3278942806","3278942806","BE","BEL","BELGIUM" -"3278942807","3278942807","AT","AUT","AUSTRIA" -"3278942808","3278942809","DE","DEU","GERMANY" -"3278942810","3278942810","ES","ESP","SPAIN" -"3278942811","3278942811","NL","NLD","NETHERLANDS" -"3278942812","3278942813","DE","DEU","GERMANY" -"3278942814","3278942814","CH","CHE","SWITZERLAND" -"3278942815","3278942815","DE","DEU","GERMANY" -"3278942816","3278942816","AT","AUT","AUSTRIA" -"3278942817","3278942817","FR","FRA","FRANCE" -"3278942818","3278942818","DK","DNK","DENMARK" -"3278942819","3278942819","DE","DEU","GERMANY" -"3278942820","3278942820","IT","ITA","ITALY" -"3278942821","3278942821","NL","NLD","NETHERLANDS" -"3278942822","3278942824","DE","DEU","GERMANY" -"3278942825","3278942825","NL","NLD","NETHERLANDS" -"3278942826","3278942826","RU","RUS","RUSSIAN FEDERATION" -"3278942827","3278942827","FR","FRA","FRANCE" -"3278942828","3278942828","ES","ESP","SPAIN" -"3278942829","3278942829","NL","NLD","NETHERLANDS" -"3278942830","3278942830","IT","ITA","ITALY" -"3278942831","3278942831","CH","CHE","SWITZERLAND" -"3278942832","3278942832","IT","ITA","ITALY" -"3278942833","3278942833","DE","DEU","GERMANY" -"3278942834","3278942834","NL","NLD","NETHERLANDS" -"3278942835","3278942835","AT","AUT","AUSTRIA" -"3278942836","3278942837","DE","DEU","GERMANY" -"3278942838","3278942838","ES","ESP","SPAIN" -"3278942839","3278942839","FR","FRA","FRANCE" -"3278942840","3278942841","DE","DEU","GERMANY" -"3278942842","3278942843","IT","ITA","ITALY" -"3278942844","3278942844","ES","ESP","SPAIN" -"3278942845","3278942850","DE","DEU","GERMANY" -"3278942851","3278942851","HU","HUN","HUNGARY" -"3278942852","3278942852","DE","DEU","GERMANY" -"3278942853","3278942853","ES","ESP","SPAIN" -"3278942854","3278942854","GB","GBR","UNITED KINGDOM" -"3278942855","3278942855","ES","ESP","SPAIN" -"3278942856","3278942856","NO","NOR","NORWAY" -"3278942857","3278942857","DE","DEU","GERMANY" -"3278942858","3278942858","IT","ITA","ITALY" -"3278942859","3278942859","DE","DEU","GERMANY" -"3278942860","3278942860","IT","ITA","ITALY" -"3278942861","3278942861","FR","FRA","FRANCE" -"3278942862","3278942863","DE","DEU","GERMANY" -"3278942864","3278942864","ES","ESP","SPAIN" -"3278942865","3278942865","GB","GBR","UNITED KINGDOM" -"3278942866","3278942867","NL","NLD","NETHERLANDS" -"3278942868","3278942868","DE","DEU","GERMANY" -"3278942869","3278942869","IT","ITA","ITALY" -"3278942870","3278942870","CH","CHE","SWITZERLAND" -"3278942871","3278942871","IS","ISL","ICELAND" -"3278942872","3278942872","ES","ESP","SPAIN" -"3278942873","3278942873","IT","ITA","ITALY" -"3278942874","3278942875","DE","DEU","GERMANY" -"3278942876","3278942876","PL","POL","POLAND" -"3278942877","3278942877","DE","DEU","GERMANY" -"3278942878","3278942878","NL","NLD","NETHERLANDS" -"3278942879","3278942879","DK","DNK","DENMARK" -"3278942880","3278942881","DE","DEU","GERMANY" -"3278942882","3278942882","CH","CHE","SWITZERLAND" -"3278942883","3278942883","GB","GBR","UNITED KINGDOM" -"3278942884","3278942884","DE","DEU","GERMANY" -"3278942885","3278942885","NL","NLD","NETHERLANDS" -"3278942886","3278942886","DE","DEU","GERMANY" -"3278942887","3278942887","IT","ITA","ITALY" -"3278942888","3278942889","DE","DEU","GERMANY" -"3278942890","3278942890","ES","ESP","SPAIN" -"3278942891","3278942894","DE","DEU","GERMANY" -"3278942895","3278942895","NL","NLD","NETHERLANDS" -"3278942896","3278942896","GB","GBR","UNITED KINGDOM" -"3278942897","3278942897","CH","CHE","SWITZERLAND" -"3278942898","3278942899","NL","NLD","NETHERLANDS" -"3278942900","3278942903","DE","DEU","GERMANY" -"3278942904","3278942904","BE","BEL","BELGIUM" -"3278942905","3278942905","IE","IRL","IRELAND" -"3278942906","3278942907","DE","DEU","GERMANY" -"3278942908","3278942908","GB","GBR","UNITED KINGDOM" -"3278942909","3278942910","DE","DEU","GERMANY" -"3278942911","3278942911","IT","ITA","ITALY" -"3278942912","3278942913","DE","DEU","GERMANY" -"3278942914","3278942914","CH","CHE","SWITZERLAND" -"3278942915","3278942915","DE","DEU","GERMANY" -"3278942916","3278942916","CH","CHE","SWITZERLAND" -"3278942917","3278942922","DE","DEU","GERMANY" -"3278942923","3278942923","NL","NLD","NETHERLANDS" -"3278942924","3278942924","DE","DEU","GERMANY" -"3278942925","3278942925","GB","GBR","UNITED KINGDOM" -"3278942926","3278942930","DE","DEU","GERMANY" -"3278942931","3278942931","CH","CHE","SWITZERLAND" -"3278942932","3278942932","NL","NLD","NETHERLANDS" -"3278942933","3278942933","BE","BEL","BELGIUM" -"3278942934","3278942934","IT","ITA","ITALY" -"3278942935","3278942936","NL","NLD","NETHERLANDS" -"3278942937","3278942937","DE","DEU","GERMANY" -"3278942938","3278942938","CH","CHE","SWITZERLAND" -"3278942939","3278942939","ES","ESP","SPAIN" -"3278942940","3278942940","DE","DEU","GERMANY" -"3278942941","3278942941","IT","ITA","ITALY" -"3278942942","3278942942","DE","DEU","GERMANY" -"3278942943","3278942944","NL","NLD","NETHERLANDS" -"3278942945","3278942946","DE","DEU","GERMANY" -"3278942947","3278942947","BE","BEL","BELGIUM" -"3278942948","3278942948","AT","AUT","AUSTRIA" -"3278942949","3278942949","CH","CHE","SWITZERLAND" -"3278942950","3278942950","DE","DEU","GERMANY" -"3278942951","3278942951","IT","ITA","ITALY" -"3278942952","3278942953","DE","DEU","GERMANY" -"3278942954","3278942954","AT","AUT","AUSTRIA" -"3278942955","3278942955","DE","DEU","GERMANY" -"3278942956","3278942956","IT","ITA","ITALY" -"3278942957","3278942957","DE","DEU","GERMANY" -"3278942958","3278942958","CH","CHE","SWITZERLAND" -"3278942959","3278942959","DE","DEU","GERMANY" -"3278942960","3278942960","FR","FRA","FRANCE" -"3278942961","3278942961","PT","PRT","PORTUGAL" -"3278942962","3278942963","NL","NLD","NETHERLANDS" -"3278942964","3278942966","DE","DEU","GERMANY" -"3278942967","3278942967","NO","NOR","NORWAY" -"3278942968","3278942968","NL","NLD","NETHERLANDS" -"3278942969","3278942969","AT","AUT","AUSTRIA" -"3278942970","3278942970","ES","ESP","SPAIN" -"3278942971","3278942972","IT","ITA","ITALY" -"3278942973","3278942977","DE","DEU","GERMANY" -"3278942978","3278942978","BE","BEL","BELGIUM" -"3278942979","3278942979","FR","FRA","FRANCE" -"3278942980","3278942980","IT","ITA","ITALY" -"3278942981","3278942983","DE","DEU","GERMANY" -"3278942984","3278942984","IT","ITA","ITALY" -"3278942985","3278942985","ES","ESP","SPAIN" -"3278942986","3278942986","CH","CHE","SWITZERLAND" -"3278942987","3278942987","BE","BEL","BELGIUM" -"3278942988","3278942990","CH","CHE","SWITZERLAND" -"3278942991","3278942991","GB","GBR","UNITED KINGDOM" -"3278942992","3278942992","DE","DEU","GERMANY" -"3278942993","3278942993","GB","GBR","UNITED KINGDOM" -"3278942994","3278942994","CH","CHE","SWITZERLAND" -"3278942995","3278942997","DE","DEU","GERMANY" -"3278942998","3278942998","CH","CHE","SWITZERLAND" -"3278942999","3278942999","GB","GBR","UNITED KINGDOM" -"3278943000","3278943002","DE","DEU","GERMANY" -"3278943003","3278943003","CH","CHE","SWITZERLAND" -"3278943004","3278943005","DE","DEU","GERMANY" -"3278943006","3278943006","FR","FRA","FRANCE" -"3278943007","3278943007","DE","DEU","GERMANY" -"3278943008","3278943008","IT","ITA","ITALY" -"3278943009","3278943009","DE","DEU","GERMANY" -"3278943010","3278943010","NL","NLD","NETHERLANDS" -"3278943011","3278943011","DE","DEU","GERMANY" -"3278943012","3278943012","CZ","CZE","CZECH REPUBLIC" -"3278943013","3278943013","IT","ITA","ITALY" -"3278943014","3278943014","AT","AUT","AUSTRIA" -"3278943015","3278943016","ES","ESP","SPAIN" -"3278943017","3278943017","FR","FRA","FRANCE" -"3278943018","3278943018","CH","CHE","SWITZERLAND" -"3278943019","3278943019","DE","DEU","GERMANY" -"3278943020","3278943020","CH","CHE","SWITZERLAND" -"3278943021","3278943021","BE","BEL","BELGIUM" -"3278943022","3278943022","ES","ESP","SPAIN" -"3278943023","3278943023","BE","BEL","BELGIUM" -"3278943024","3278943024","FR","FRA","FRANCE" -"3278943025","3278943025","DE","DEU","GERMANY" -"3278943026","3278943026","DK","DNK","DENMARK" -"3278943027","3278943027","DE","DEU","GERMANY" -"3278943028","3278943029","GB","GBR","UNITED KINGDOM" -"3278943030","3278943030","ES","ESP","SPAIN" -"3278943031","3278943031","NL","NLD","NETHERLANDS" -"3278943032","3278943032","FR","FRA","FRANCE" -"3278943033","3278943033","IT","ITA","ITALY" -"3278943034","3278943034","DE","DEU","GERMANY" -"3278943035","3278943035","ES","ESP","SPAIN" -"3278943036","3278943036","DE","DEU","GERMANY" -"3278943037","3278943037","FR","FRA","FRANCE" -"3278943038","3278943038","DE","DEU","GERMANY" -"3278943039","3278943039","CH","CHE","SWITZERLAND" -"3278943040","3278943040","IT","ITA","ITALY" -"3278943041","3278943041","DE","DEU","GERMANY" -"3278943042","3278943042","BE","BEL","BELGIUM" -"3278943043","3278943043","SI","SVN","SLOVENIA" -"3278943044","3278943044","FR","FRA","FRANCE" -"3278943045","3278943048","DE","DEU","GERMANY" -"3278943049","3278943049","GB","GBR","UNITED KINGDOM" -"3278943050","3278943050","IT","ITA","ITALY" -"3278943051","3278943051","AT","AUT","AUSTRIA" -"3278943052","3278943053","IT","ITA","ITALY" -"3278943054","3278943056","DE","DEU","GERMANY" -"3278943057","3278943057","CH","CHE","SWITZERLAND" -"3278943058","3278943058","FR","FRA","FRANCE" -"3278943059","3278943059","CH","CHE","SWITZERLAND" -"3278943060","3278943065","DE","DEU","GERMANY" -"3278943066","3278943066","GB","GBR","UNITED KINGDOM" -"3278943067","3278943069","DE","DEU","GERMANY" -"3278943070","3278943070","PL","POL","POLAND" -"3278943071","3278943072","DE","DEU","GERMANY" -"3278943073","3278943073","AT","AUT","AUSTRIA" -"3278943074","3278943074","ES","ESP","SPAIN" -"3278943075","3278943076","FR","FRA","FRANCE" -"3278943077","3278943077","DE","DEU","GERMANY" -"3278943078","3278943079","CH","CHE","SWITZERLAND" -"3278943080","3278943080","BE","BEL","BELGIUM" -"3278943081","3278943081","FR","FRA","FRANCE" -"3278943082","3278943082","CH","CHE","SWITZERLAND" -"3278943083","3278943084","DE","DEU","GERMANY" -"3278943085","3278943085","NL","NLD","NETHERLANDS" -"3278943086","3278943087","DE","DEU","GERMANY" -"3278943088","3278943088","NL","NLD","NETHERLANDS" -"3278943089","3278943090","DE","DEU","GERMANY" -"3278943091","3278943091","IT","ITA","ITALY" -"3278943092","3278943092","ES","ESP","SPAIN" -"3278943093","3278943096","DE","DEU","GERMANY" -"3278943097","3278943097","BE","BEL","BELGIUM" -"3278943098","3278943098","DE","DEU","GERMANY" -"3278943099","3278943099","AT","AUT","AUSTRIA" -"3278943100","3278943100","SE","SWE","SWEDEN" -"3278943101","3278943101","AT","AUT","AUSTRIA" -"3278943102","3278943102","ZA","ZAF","SOUTH AFRICA" -"3278943103","3278943105","DE","DEU","GERMANY" -"3278943106","3278943106","FR","FRA","FRANCE" -"3278943107","3278943107","DE","DEU","GERMANY" -"3278943108","3278943108","FR","FRA","FRANCE" -"3278943109","3278943109","IT","ITA","ITALY" -"3278943110","3278943110","DK","DNK","DENMARK" -"3278943111","3278943111","GB","GBR","UNITED KINGDOM" -"3278943112","3278943112","PT","PRT","PORTUGAL" -"3278943113","3278943113","ES","ESP","SPAIN" -"3278943114","3278943114","CH","CHE","SWITZERLAND" -"3278943115","3278943115","PT","PRT","PORTUGAL" -"3278943116","3278943116","CH","CHE","SWITZERLAND" -"3278943117","3278943117","DE","DEU","GERMANY" -"3278943118","3278943119","IT","ITA","ITALY" -"3278943120","3278943120","FR","FRA","FRANCE" -"3278943121","3278943121","AT","AUT","AUSTRIA" -"3278943122","3278943122","GB","GBR","UNITED KINGDOM" -"3278943123","3278943123","FR","FRA","FRANCE" -"3278943124","3278943124","BE","BEL","BELGIUM" -"3278943125","3278943125","CH","CHE","SWITZERLAND" -"3278943126","3278943126","IT","ITA","ITALY" -"3278943127","3278943127","DE","DEU","GERMANY" -"3278943128","3278943128","GB","GBR","UNITED KINGDOM" -"3278943129","3278943130","DE","DEU","GERMANY" -"3278943131","3278943131","BE","BEL","BELGIUM" -"3278943132","3278943132","FR","FRA","FRANCE" -"3278943133","3278943133","IT","ITA","ITALY" -"3278943134","3278943135","NL","NLD","NETHERLANDS" -"3278943136","3278943136","FR","FRA","FRANCE" -"3278943137","3278943137","CH","CHE","SWITZERLAND" -"3278943138","3278943138","BE","BEL","BELGIUM" -"3278943139","3278943139","IT","ITA","ITALY" -"3278943140","3278943140","ES","ESP","SPAIN" -"3278943141","3278943141","NL","NLD","NETHERLANDS" -"3278943142","3278943142","FR","FRA","FRANCE" -"3278943143","3278943143","ES","ESP","SPAIN" -"3278943144","3278943145","DE","DEU","GERMANY" -"3278943146","3278943146","CH","CHE","SWITZERLAND" -"3278943147","3278943147","NL","NLD","NETHERLANDS" -"3278943148","3278943148","FR","FRA","FRANCE" -"3278943149","3278943149","BE","BEL","BELGIUM" -"3278943150","3278943150","DE","DEU","GERMANY" -"3278943151","3278943151","NL","NLD","NETHERLANDS" -"3278943152","3278943153","DE","DEU","GERMANY" -"3278943154","3278943154","SE","SWE","SWEDEN" -"3278943155","3278943159","DE","DEU","GERMANY" -"3278943160","3278943160","ES","ESP","SPAIN" -"3278943161","3278943161","BE","BEL","BELGIUM" -"3278943162","3278943162","ES","ESP","SPAIN" -"3278943163","3278943163","DE","DEU","GERMANY" -"3278943164","3278943164","NL","NLD","NETHERLANDS" -"3278943165","3278943165","SE","SWE","SWEDEN" -"3278943166","3278943168","DE","DEU","GERMANY" -"3278943169","3278943169","BE","BEL","BELGIUM" -"3278943170","3278943172","FR","FRA","FRANCE" -"3278943173","3278943173","NL","NLD","NETHERLANDS" -"3278943174","3278943174","DE","DEU","GERMANY" -"3278943175","3278943177","ES","ESP","SPAIN" -"3278943178","3278943178","DE","DEU","GERMANY" -"3278943179","3278943179","CH","CHE","SWITZERLAND" -"3278943180","3278943181","DE","DEU","GERMANY" -"3278943182","3278943182","SE","SWE","SWEDEN" -"3278943183","3278943183","FR","FRA","FRANCE" -"3278943184","3278943184","DE","DEU","GERMANY" -"3278943185","3278943185","BE","BEL","BELGIUM" -"3278943186","3278943186","NL","NLD","NETHERLANDS" -"3278943187","3278943187","DE","DEU","GERMANY" -"3278943188","3278943188","GB","GBR","UNITED KINGDOM" -"3278943189","3278943191","DE","DEU","GERMANY" -"3278943192","3278943192","LU","LUX","LUXEMBOURG" -"3278943193","3278943193","DE","DEU","GERMANY" -"3278943194","3278943194","IT","ITA","ITALY" -"3278943195","3278943195","DE","DEU","GERMANY" -"3278943196","3278943196","CH","CHE","SWITZERLAND" -"3278943197","3278943197","NL","NLD","NETHERLANDS" -"3278943198","3278943198","GR","GRC","GREECE" -"3278943199","3278943199","GB","GBR","UNITED KINGDOM" -"3278943200","3278943200","DE","DEU","GERMANY" -"3278943201","3278943202","CH","CHE","SWITZERLAND" -"3278943203","3278943203","SE","SWE","SWEDEN" -"3278943204","3278943206","DE","DEU","GERMANY" -"3278943207","3278943207","IT","ITA","ITALY" -"3278943208","3278943208","GB","GBR","UNITED KINGDOM" -"3278943209","3278943209","ES","ESP","SPAIN" -"3278943210","3278943212","IT","ITA","ITALY" -"3278943213","3278943213","DE","DEU","GERMANY" -"3278943214","3278943214","IT","ITA","ITALY" -"3278943215","3278943215","GB","GBR","UNITED KINGDOM" -"3278943216","3278943216","CH","CHE","SWITZERLAND" -"3278943217","3278943217","GB","GBR","UNITED KINGDOM" -"3278943218","3278943218","IT","ITA","ITALY" -"3278943219","3278943220","DE","DEU","GERMANY" -"3278943221","3278943221","CH","CHE","SWITZERLAND" -"3278943222","3278943222","DE","DEU","GERMANY" -"3278943223","3278943223","NL","NLD","NETHERLANDS" -"3278943224","3278943225","DE","DEU","GERMANY" -"3278943226","3278943226","FR","FRA","FRANCE" -"3278943227","3278943227","GB","GBR","UNITED KINGDOM" -"3278943228","3278943228","ES","ESP","SPAIN" -"3278943229","3278943235","DE","DEU","GERMANY" -"3278943236","3278943236","ES","ESP","SPAIN" -"3278943237","3278943237","FR","FRA","FRANCE" -"3278943238","3278943239","DE","DEU","GERMANY" -"3278943240","3278943240","NL","NLD","NETHERLANDS" -"3278943241","3278943242","DE","DEU","GERMANY" -"3278943243","3278943243","ES","ESP","SPAIN" -"3278943244","3278943244","FR","FRA","FRANCE" -"3278943245","3278943245","DE","DEU","GERMANY" -"3278943246","3278943246","NL","NLD","NETHERLANDS" -"3278943247","3278943247","CH","CHE","SWITZERLAND" -"3278943248","3278943248","DE","DEU","GERMANY" -"3278943249","3278943249","ES","ESP","SPAIN" -"3278943250","3278943251","FR","FRA","FRANCE" -"3278943252","3278943252","IT","ITA","ITALY" -"3278943253","3278943253","DE","DEU","GERMANY" -"3278943254","3278943254","DK","DNK","DENMARK" -"3278943255","3278943255","DE","DEU","GERMANY" -"3278943256","3278943256","FR","FRA","FRANCE" -"3278943257","3278943257","IT","ITA","ITALY" -"3278943258","3278943260","DE","DEU","GERMANY" -"3278943261","3278943261","ES","ESP","SPAIN" -"3278943262","3278943262","NL","NLD","NETHERLANDS" -"3278943263","3278943263","FR","FRA","FRANCE" -"3278943264","3278943265","DE","DEU","GERMANY" -"3278943266","3278943266","FR","FRA","FRANCE" -"3278943267","3278943267","NL","NLD","NETHERLANDS" -"3278943268","3278943268","DE","DEU","GERMANY" -"3278943269","3278943270","CH","CHE","SWITZERLAND" -"3278943271","3278943271","ES","ESP","SPAIN" -"3278943272","3278943274","DE","DEU","GERMANY" -"3278943275","3278943275","IT","ITA","ITALY" -"3278943276","3278943277","DE","DEU","GERMANY" -"3278943278","3278943278","GB","GBR","UNITED KINGDOM" -"3278943279","3278943279","DE","DEU","GERMANY" -"3278943280","3278943280","FR","FRA","FRANCE" -"3278943281","3278943281","IT","ITA","ITALY" -"3278943282","3278943283","DE","DEU","GERMANY" -"3278943284","3278943284","IT","ITA","ITALY" -"3278943285","3278943287","DE","DEU","GERMANY" -"3278943288","3278943288","FR","FRA","FRANCE" -"3278943289","3278943289","DE","DEU","GERMANY" -"3278943290","3278943290","IT","ITA","ITALY" -"3278943291","3278943292","DE","DEU","GERMANY" -"3278943293","3278943293","GB","GBR","UNITED KINGDOM" -"3278943294","3278943294","IT","ITA","ITALY" -"3278943295","3278943296","ES","ESP","SPAIN" -"3278943297","3278943297","IT","ITA","ITALY" -"3278943298","3278943298","PT","PRT","PORTUGAL" -"3278943299","3278943299","DK","DNK","DENMARK" -"3278943300","3278943300","GB","GBR","UNITED KINGDOM" -"3278943301","3278943301","CH","CHE","SWITZERLAND" -"3278943302","3278943302","BE","BEL","BELGIUM" -"3278943303","3278943303","DK","DNK","DENMARK" -"3278943304","3278943304","FR","FRA","FRANCE" -"3278943305","3278943305","LU","LUX","LUXEMBOURG" -"3278943306","3278943306","AT","AUT","AUSTRIA" -"3278943307","3278943308","DE","DEU","GERMANY" -"3278943309","3278943309","PT","PRT","PORTUGAL" -"3278943310","3278943310","ES","ESP","SPAIN" -"3278943311","3278943311","BE","BEL","BELGIUM" -"3278943312","3278943314","DE","DEU","GERMANY" -"3278943315","3278943316","FR","FRA","FRANCE" -"3278943317","3278943318","DE","DEU","GERMANY" -"3278943319","3278943319","NL","NLD","NETHERLANDS" -"3278943320","3278943320","BE","BEL","BELGIUM" -"3278943321","3278943321","DE","DEU","GERMANY" -"3278943322","3278943322","NL","NLD","NETHERLANDS" -"3278943323","3278943323","FR","FRA","FRANCE" -"3278943324","3278943324","GB","GBR","UNITED KINGDOM" -"3278943325","3278943326","DE","DEU","GERMANY" -"3278943327","3278943328","IT","ITA","ITALY" -"3278943329","3278943329","PT","PRT","PORTUGAL" -"3278943330","3278943330","ES","ESP","SPAIN" -"3278943331","3278943331","PL","POL","POLAND" -"3278943332","3278943333","DE","DEU","GERMANY" -"3278943334","3278943334","FR","FRA","FRANCE" -"3278943335","3278943335","AT","AUT","AUSTRIA" -"3278943336","3278943337","IT","ITA","ITALY" -"3278943338","3278943338","DE","DEU","GERMANY" -"3278943339","3278943339","PT","PRT","PORTUGAL" -"3278943340","3278943340","ES","ESP","SPAIN" -"3278943341","3278943341","CH","CHE","SWITZERLAND" -"3278943342","3278943343","DE","DEU","GERMANY" -"3278943344","3278943344","GB","GBR","UNITED KINGDOM" -"3278943345","3278943345","DE","DEU","GERMANY" -"3278943346","3278943346","FR","FRA","FRANCE" -"3278943347","3278943347","DE","DEU","GERMANY" -"3278943348","3278943349","GB","GBR","UNITED KINGDOM" -"3278943350","3278943351","DE","DEU","GERMANY" -"3278943352","3278943352","NL","NLD","NETHERLANDS" -"3278943353","3278943353","DE","DEU","GERMANY" -"3278943354","3278943355","ES","ESP","SPAIN" -"3278943356","3278943356","FR","FRA","FRANCE" -"3278943357","3278943357","ES","ESP","SPAIN" -"3278943358","3278943358","FR","FRA","FRANCE" -"3278943359","3278943359","ES","ESP","SPAIN" -"3278943360","3278943360","CH","CHE","SWITZERLAND" -"3278943361","3278943361","DE","DEU","GERMANY" -"3278943362","3278943362","IT","ITA","ITALY" -"3278943363","3278943363","DE","DEU","GERMANY" -"3278943364","3278943364","IT","ITA","ITALY" -"3278943365","3278943366","DE","DEU","GERMANY" -"3278943367","3278943367","FR","FRA","FRANCE" -"3278943368","3278943369","DE","DEU","GERMANY" -"3278943370","3278943370","FR","FRA","FRANCE" -"3278943371","3278943371","DE","DEU","GERMANY" -"3278943372","3278943372","CH","CHE","SWITZERLAND" -"3278943373","3278943374","GR","GRC","GREECE" -"3278943375","3278943375","ES","ESP","SPAIN" -"3278943376","3278943376","NO","NOR","NORWAY" -"3278943377","3278943377","IT","ITA","ITALY" -"3278943378","3278943378","DE","DEU","GERMANY" -"3278943379","3278943379","CH","CHE","SWITZERLAND" -"3278943380","3278943380","ES","ESP","SPAIN" -"3278943381","3278943381","GB","GBR","UNITED KINGDOM" -"3278943382","3278943382","ES","ESP","SPAIN" -"3278943383","3278943383","PL","POL","POLAND" -"3278943384","3278943384","IT","ITA","ITALY" -"3278943385","3278943385","DE","DEU","GERMANY" -"3278943386","3278943387","FR","FRA","FRANCE" -"3278943388","3278943388","ES","ESP","SPAIN" -"3278943389","3278943389","BE","BEL","BELGIUM" -"3278943390","3278943390","ES","ESP","SPAIN" -"3278943391","3278943391","DE","DEU","GERMANY" -"3278943392","3278943392","PL","POL","POLAND" -"3278943393","3278943393","CH","CHE","SWITZERLAND" -"3278943394","3278943394","FR","FRA","FRANCE" -"3278943395","3278943395","IT","ITA","ITALY" -"3278943396","3278943396","NL","NLD","NETHERLANDS" -"3278943397","3278943399","DE","DEU","GERMANY" -"3278943400","3278943400","FR","FRA","FRANCE" -"3278943401","3278943401","DE","DEU","GERMANY" -"3278943402","3278943402","FR","FRA","FRANCE" -"3278943403","3278943403","GB","GBR","UNITED KINGDOM" -"3278943404","3278943404","DE","DEU","GERMANY" -"3278943405","3278943405","GB","GBR","UNITED KINGDOM" -"3278943406","3278943406","AT","AUT","AUSTRIA" -"3278943407","3278943407","DE","DEU","GERMANY" -"3278943408","3278943408","FR","FRA","FRANCE" -"3278943409","3278943409","IT","ITA","ITALY" -"3278943410","3278943410","NL","NLD","NETHERLANDS" -"3278943411","3278943411","ES","ESP","SPAIN" -"3278943412","3278943412","GB","GBR","UNITED KINGDOM" -"3278943413","3278943413","NL","NLD","NETHERLANDS" -"3278943414","3278943414","ES","ESP","SPAIN" -"3278943415","3278943415","UA","UKR","UKRAINE" -"3278943416","3278943416","NL","NLD","NETHERLANDS" -"3278943417","3278943417","DE","DEU","GERMANY" -"3278943418","3278943418","GB","GBR","UNITED KINGDOM" -"3278943419","3278943419","ES","ESP","SPAIN" -"3278943420","3278943420","BE","BEL","BELGIUM" -"3278943421","3278943422","DE","DEU","GERMANY" -"3278943423","3278943423","IT","ITA","ITALY" -"3278943424","3278943424","DE","DEU","GERMANY" -"3278943425","3278943425","GB","GBR","UNITED KINGDOM" -"3278943426","3278943426","DE","DEU","GERMANY" -"3278943427","3278943427","AT","AUT","AUSTRIA" -"3278943428","3278943428","DE","DEU","GERMANY" -"3278943429","3278943430","IT","ITA","ITALY" -"3278943431","3278943431","CH","CHE","SWITZERLAND" -"3278943432","3278943432","DE","DEU","GERMANY" -"3278943433","3278943433","GB","GBR","UNITED KINGDOM" -"3278943434","3278943435","DE","DEU","GERMANY" -"3278943436","3278943436","ES","ESP","SPAIN" -"3278943437","3278943437","FR","FRA","FRANCE" -"3278943438","3278943438","DE","DEU","GERMANY" -"3278943439","3278943439","SE","SWE","SWEDEN" -"3278943440","3278943440","DK","DNK","DENMARK" -"3278943441","3278943441","IT","ITA","ITALY" -"3278943442","3278943442","FR","FRA","FRANCE" -"3278943443","3278943443","DE","DEU","GERMANY" -"3278943444","3278943444","GB","GBR","UNITED KINGDOM" -"3278943445","3278943445","DE","DEU","GERMANY" -"3278943446","3278943446","CH","CHE","SWITZERLAND" -"3278943447","3278943447","DE","DEU","GERMANY" -"3278943448","3278943448","FR","FRA","FRANCE" -"3278943449","3278943449","DE","DEU","GERMANY" -"3278943450","3278943450","CH","CHE","SWITZERLAND" -"3278943451","3278943451","AT","AUT","AUSTRIA" -"3278943452","3278943452","DE","DEU","GERMANY" -"3278943453","3278943453","PT","PRT","PORTUGAL" -"3278943454","3278943455","DE","DEU","GERMANY" -"3278943456","3278943456","IT","ITA","ITALY" -"3278943457","3278943457","GB","GBR","UNITED KINGDOM" -"3278943458","3278943459","DE","DEU","GERMANY" -"3278943460","3278943460","FR","FRA","FRANCE" -"3278943461","3278943464","DE","DEU","GERMANY" -"3278943465","3278943465","ES","ESP","SPAIN" -"3278943466","3278943466","DE","DEU","GERMANY" -"3278943467","3278943467","ES","ESP","SPAIN" -"3278943468","3278943468","DE","DEU","GERMANY" -"3278943469","3278943469","NL","NLD","NETHERLANDS" -"3278943470","3278943471","ES","ESP","SPAIN" -"3278943472","3278943472","BE","BEL","BELGIUM" -"3278943473","3278943473","DE","DEU","GERMANY" -"3278943474","3278943474","BE","BEL","BELGIUM" -"3278943475","3278943477","DE","DEU","GERMANY" -"3278943478","3278943478","NL","NLD","NETHERLANDS" -"3278943479","3278943481","DE","DEU","GERMANY" -"3278943482","3278943482","IT","ITA","ITALY" -"3278943483","3278943489","DE","DEU","GERMANY" -"3278943490","3278943490","BE","BEL","BELGIUM" -"3278943491","3278943491","DE","DEU","GERMANY" -"3278943492","3278943492","CH","CHE","SWITZERLAND" -"3278943493","3278943494","DE","DEU","GERMANY" -"3278943495","3278943495","FR","FRA","FRANCE" -"3278943496","3278943496","GB","GBR","UNITED KINGDOM" -"3278943497","3278943497","AT","AUT","AUSTRIA" -"3278943498","3278943499","DE","DEU","GERMANY" -"3278943500","3278943500","IT","ITA","ITALY" -"3278943501","3278943501","FR","FRA","FRANCE" -"3278943502","3278943504","DE","DEU","GERMANY" -"3278943505","3278943505","LI","LIE","LIECHTENSTEIN" -"3278943506","3278943506","AT","AUT","AUSTRIA" -"3278943507","3278943507","FR","FRA","FRANCE" -"3278943508","3278943509","IT","ITA","ITALY" -"3278943510","3278943510","DE","DEU","GERMANY" -"3278943511","3278943512","IT","ITA","ITALY" -"3278943513","3278943513","ES","ESP","SPAIN" -"3278943514","3278943514","BE","BEL","BELGIUM" -"3278943515","3278943515","DE","DEU","GERMANY" -"3278943516","3278943517","ES","ESP","SPAIN" -"3278943518","3278943518","FR","FRA","FRANCE" -"3278943519","3278943519","HU","HUN","HUNGARY" -"3278943520","3278943520","AT","AUT","AUSTRIA" -"3278943521","3278943521","ES","ESP","SPAIN" -"3278943522","3278943523","DE","DEU","GERMANY" -"3278943524","3278943524","AT","AUT","AUSTRIA" -"3278943525","3278943525","BE","BEL","BELGIUM" -"3278943526","3278943526","FR","FRA","FRANCE" -"3278943527","3278943527","DE","DEU","GERMANY" -"3278943528","3278943528","CH","CHE","SWITZERLAND" -"3278943529","3278943530","AT","AUT","AUSTRIA" -"3278943531","3278943531","DE","DEU","GERMANY" -"3278943532","3278943532","NL","NLD","NETHERLANDS" -"3278943533","3278943533","ES","ESP","SPAIN" -"3278943534","3278943534","GB","GBR","UNITED KINGDOM" -"3278943535","3278943535","BR","BRA","BRAZIL" -"3278943536","3278943537","ES","ESP","SPAIN" -"3278943538","3278943538","RE","REU","REUNION" -"3278943539","3278943539","IT","ITA","ITALY" -"3278943540","3278943540","ES","ESP","SPAIN" -"3278943541","3278943542","DE","DEU","GERMANY" -"3278943543","3278943543","IT","ITA","ITALY" -"3278943544","3278943545","DE","DEU","GERMANY" -"3278943546","3278943546","NL","NLD","NETHERLANDS" -"3278943547","3278943547","CH","CHE","SWITZERLAND" -"3278943548","3278943548","GB","GBR","UNITED KINGDOM" -"3278943549","3278943549","IL","ISR","ISRAEL" -"3278943550","3278943550","IT","ITA","ITALY" -"3278943551","3278943551","DE","DEU","GERMANY" -"3278943552","3278943552","IT","ITA","ITALY" -"3278943553","3278943553","DE","DEU","GERMANY" -"3278943554","3278943554","FR","FRA","FRANCE" -"3278943555","3278943555","DE","DEU","GERMANY" -"3278943556","3278943556","FR","FRA","FRANCE" -"3278943557","3278943557","DE","DEU","GERMANY" -"3278943558","3278943558","AT","AUT","AUSTRIA" -"3278943559","3278943559","DE","DEU","GERMANY" -"3278943560","3278943560","CH","CHE","SWITZERLAND" -"3278943561","3278943561","FR","FRA","FRANCE" -"3278943562","3278943564","DE","DEU","GERMANY" -"3278943565","3278943565","GB","GBR","UNITED KINGDOM" -"3278943566","3278943566","BE","BEL","BELGIUM" -"3278943567","3278943567","AE","ARE","UNITED ARAB EMIRATES" -"3278943568","3278943568","NL","NLD","NETHERLANDS" -"3278943569","3278943569","ES","ESP","SPAIN" -"3278943570","3278943570","DE","DEU","GERMANY" -"3278943571","3278943571","BE","BEL","BELGIUM" -"3278943572","3278943572","GB","GBR","UNITED KINGDOM" -"3278943573","3278943573","DE","DEU","GERMANY" -"3278943574","3278943574","DK","DNK","DENMARK" -"3278943575","3278943575","BE","BEL","BELGIUM" -"3278943576","3278943576","NL","NLD","NETHERLANDS" -"3278943577","3278943577","FR","FRA","FRANCE" -"3278943578","3278943578","DE","DEU","GERMANY" -"3278943579","3278943579","BE","BEL","BELGIUM" -"3278943580","3278943580","IT","ITA","ITALY" -"3278943581","3278943581","CH","CHE","SWITZERLAND" -"3278943582","3278943582","DE","DEU","GERMANY" -"3278943583","3278943583","NL","NLD","NETHERLANDS" -"3278943584","3278943585","DE","DEU","GERMANY" -"3278943586","3278943586","NL","NLD","NETHERLANDS" -"3278943587","3278943587","ES","ESP","SPAIN" -"3278943588","3278943588","DE","DEU","GERMANY" -"3278943589","3278943589","IT","ITA","ITALY" -"3278943590","3278943590","DE","DEU","GERMANY" -"3278943591","3278943591","NL","NLD","NETHERLANDS" -"3278943592","3278943592","DE","DEU","GERMANY" -"3278943593","3278943593","PL","POL","POLAND" -"3278943594","3278943594","ES","ESP","SPAIN" -"3278943595","3278943595","GB","GBR","UNITED KINGDOM" -"3278943596","3278943596","GR","GRC","GREECE" -"3278943597","3278943598","DE","DEU","GERMANY" -"3278943599","3278943599","ES","ESP","SPAIN" -"3278943600","3278943601","DE","DEU","GERMANY" -"3278943602","3278943602","PL","POL","POLAND" -"3278943603","3278943603","FR","FRA","FRANCE" -"3278943604","3278943604","ES","ESP","SPAIN" -"3278943605","3278943605","DE","DEU","GERMANY" -"3278943606","3278943606","AT","AUT","AUSTRIA" -"3278943607","3278943607","DE","DEU","GERMANY" -"3278943608","3278943608","ES","ESP","SPAIN" -"3278943609","3278943609","DE","DEU","GERMANY" -"3278943610","3278943610","BE","BEL","BELGIUM" -"3278943611","3278943611","NL","NLD","NETHERLANDS" -"3278943612","3278943613","DE","DEU","GERMANY" -"3278943614","3278943614","IT","ITA","ITALY" -"3278943615","3278943615","CH","CHE","SWITZERLAND" -"3278943616","3278943616","DE","DEU","GERMANY" -"3278943617","3278943617","ES","ESP","SPAIN" -"3278943618","3278943619","DE","DEU","GERMANY" -"3278943620","3278943620","IT","ITA","ITALY" -"3278943621","3278943621","CH","CHE","SWITZERLAND" -"3278943622","3278943622","IT","ITA","ITALY" -"3278943623","3278943623","DK","DNK","DENMARK" -"3278943624","3278943624","PL","POL","POLAND" -"3278943625","3278943625","FR","FRA","FRANCE" -"3278943626","3278943628","DE","DEU","GERMANY" -"3278943629","3278943630","FR","FRA","FRANCE" -"3278943631","3278943631","CH","CHE","SWITZERLAND" -"3278943632","3278943632","DE","DEU","GERMANY" -"3278943633","3278943633","GB","GBR","UNITED KINGDOM" -"3278943634","3278943634","DE","DEU","GERMANY" -"3278943635","3278943635","IT","ITA","ITALY" -"3278943636","3278943636","CH","CHE","SWITZERLAND" -"3278943637","3278943638","IT","ITA","ITALY" -"3278943639","3278943639","HU","HUN","HUNGARY" -"3278943640","3278943641","DE","DEU","GERMANY" -"3278943642","3278943642","FR","FRA","FRANCE" -"3278943643","3278943643","NL","NLD","NETHERLANDS" -"3278943644","3278943645","FR","FRA","FRANCE" -"3278943646","3278943646","IT","ITA","ITALY" -"3278943647","3278943647","DE","DEU","GERMANY" -"3278943648","3278943648","DK","DNK","DENMARK" -"3278943649","3278943649","DE","DEU","GERMANY" -"3278943650","3278943650","ES","ESP","SPAIN" -"3278943651","3278943651","FR","FRA","FRANCE" -"3278943652","3278943653","IT","ITA","ITALY" -"3278943654","3278943654","BE","BEL","BELGIUM" -"3278943655","3278943655","FR","FRA","FRANCE" -"3278943656","3278943656","AT","AUT","AUSTRIA" -"3278943657","3278943658","DE","DEU","GERMANY" -"3278943659","3278943659","NL","NLD","NETHERLANDS" -"3278943660","3278943660","CY","CYP","CYPRUS" -"3278943661","3278943661","DE","DEU","GERMANY" -"3278943662","3278943662","ES","ESP","SPAIN" -"3278943663","3278943663","CH","CHE","SWITZERLAND" -"3278943664","3278943666","ES","ESP","SPAIN" -"3278943667","3278943667","IT","ITA","ITALY" -"3278943668","3278943669","DE","DEU","GERMANY" -"3278943670","3278943670","IT","ITA","ITALY" -"3278943671","3278943672","DE","DEU","GERMANY" -"3278943673","3278943673","ES","ESP","SPAIN" -"3278943674","3278943675","DE","DEU","GERMANY" -"3278943676","3278943676","LU","LUX","LUXEMBOURG" -"3278943677","3278943677","IT","ITA","ITALY" -"3278943678","3278943678","BE","BEL","BELGIUM" -"3278943679","3278943679","FR","FRA","FRANCE" -"3278943680","3278943680","GB","GBR","UNITED KINGDOM" -"3278943681","3278943681","CH","CHE","SWITZERLAND" -"3278943682","3278943682","DE","DEU","GERMANY" -"3278943683","3278943683","PT","PRT","PORTUGAL" -"3278943684","3278943684","AD","AND","ANDORRA" -"3278943685","3278943686","DE","DEU","GERMANY" -"3278943687","3278943687","CH","CHE","SWITZERLAND" -"3278943688","3278943689","IT","ITA","ITALY" -"3278943690","3278943690","ES","ESP","SPAIN" -"3278943691","3278943692","DE","DEU","GERMANY" -"3278943693","3278943693","PL","POL","POLAND" -"3278943694","3278943694","GB","GBR","UNITED KINGDOM" -"3278943695","3278943695","DE","DEU","GERMANY" -"3278943696","3278943696","GB","GBR","UNITED KINGDOM" -"3278943697","3278943697","AT","AUT","AUSTRIA" -"3278943698","3278943698","IT","ITA","ITALY" -"3278943699","3278943699","FR","FRA","FRANCE" -"3278943700","3278943700","CH","CHE","SWITZERLAND" -"3278943701","3278943701","AT","AUT","AUSTRIA" -"3278943702","3278943702","FR","FRA","FRANCE" -"3278943703","3278943703","PL","POL","POLAND" -"3278943704","3278943705","DE","DEU","GERMANY" -"3278943706","3278943706","ES","ESP","SPAIN" -"3278943707","3278943707","CH","CHE","SWITZERLAND" -"3278943708","3278943710","DE","DEU","GERMANY" -"3278943711","3278943711","IT","ITA","ITALY" -"3278943712","3278943713","DE","DEU","GERMANY" -"3278943714","3278943714","ES","ESP","SPAIN" -"3278943715","3278943715","DE","DEU","GERMANY" -"3278943716","3278943716","ES","ESP","SPAIN" -"3278943717","3278943719","DE","DEU","GERMANY" -"3278943720","3278943720","CH","CHE","SWITZERLAND" -"3278943721","3278943726","DE","DEU","GERMANY" -"3278943727","3278943727","PL","POL","POLAND" -"3278943728","3278943729","DE","DEU","GERMANY" -"3278943730","3278943730","FR","FRA","FRANCE" -"3278943731","3278943731","DK","DNK","DENMARK" -"3278943732","3278943733","CH","CHE","SWITZERLAND" -"3278943734","3278943734","DE","DEU","GERMANY" -"3278943735","3278943735","AD","AND","ANDORRA" -"3278943736","3278943736","DE","DEU","GERMANY" -"3278943737","3278943737","ES","ESP","SPAIN" -"3278943738","3278943740","DE","DEU","GERMANY" -"3278943741","3278943741","PT","PRT","PORTUGAL" -"3278943742","3278943742","IL","ISR","ISRAEL" -"3278943743","3278943745","DE","DEU","GERMANY" -"3278943746","3278943746","CH","CHE","SWITZERLAND" -"3278943747","3278943747","DE","DEU","GERMANY" -"3278943748","3278943749","ES","ESP","SPAIN" -"3278943750","3278943751","DE","DEU","GERMANY" -"3278943752","3278943752","GR","GRC","GREECE" -"3278943753","3278943753","DE","DEU","GERMANY" -"3278943754","3278943754","FR","FRA","FRANCE" -"3278943755","3278943755","SL","SLE","SIERRA LEONE" -"3278943756","3278943756","DE","DEU","GERMANY" -"3278943757","3278943757","FR","FRA","FRANCE" -"3278943758","3278943758","DE","DEU","GERMANY" -"3278943759","3278943759","NL","NLD","NETHERLANDS" -"3278943760","3278943761","DE","DEU","GERMANY" -"3278943762","3278943762","CY","CYP","CYPRUS" -"3278943763","3278943763","DE","DEU","GERMANY" -"3278943764","3278943764","FR","FRA","FRANCE" -"3278943765","3278943765","CH","CHE","SWITZERLAND" -"3278943766","3278943766","BE","BEL","BELGIUM" -"3278943767","3278943767","ES","ESP","SPAIN" -"3278943768","3278943768","DE","DEU","GERMANY" -"3278943769","3278943769","CZ","CZE","CZECH REPUBLIC" -"3278943770","3278943770","FR","FRA","FRANCE" -"3278943771","3278943771","CH","CHE","SWITZERLAND" -"3278943772","3278943772","ES","ESP","SPAIN" -"3278943773","3278943773","IT","ITA","ITALY" -"3278943774","3278943774","DE","DEU","GERMANY" -"3278943775","3278943776","PT","PRT","PORTUGAL" -"3278943777","3278943777","FR","FRA","FRANCE" -"3278943778","3278943778","CH","CHE","SWITZERLAND" -"3278943779","3278943780","DE","DEU","GERMANY" -"3278943781","3278943781","GB","GBR","UNITED KINGDOM" -"3278943782","3278943782","IT","ITA","ITALY" -"3278943783","3278943786","DE","DEU","GERMANY" -"3278943787","3278943787","IT","ITA","ITALY" -"3278943788","3278943788","DE","DEU","GERMANY" -"3278943789","3278943789","ES","ESP","SPAIN" -"3278943790","3278943790","DE","DEU","GERMANY" -"3278943791","3278943791","IT","ITA","ITALY" -"3278943792","3278943792","FR","FRA","FRANCE" -"3278943793","3278943793","IT","ITA","ITALY" -"3278943794","3278943794","HU","HUN","HUNGARY" -"3278943795","3278943796","DE","DEU","GERMANY" -"3278943797","3278943797","ES","ESP","SPAIN" -"3278943798","3278943798","DE","DEU","GERMANY" -"3278943799","3278943799","IE","IRL","IRELAND" -"3278943800","3278943800","DE","DEU","GERMANY" -"3278943801","3278943801","LU","LUX","LUXEMBOURG" -"3278943802","3278943802","DE","DEU","GERMANY" -"3278943803","3278943803","GB","GBR","UNITED KINGDOM" -"3278943804","3278943804","DE","DEU","GERMANY" -"3278943805","3278943805","DK","DNK","DENMARK" -"3278943806","3278943806","ES","ESP","SPAIN" -"3278943807","3278943807","DE","DEU","GERMANY" -"3278943808","3278943808","IT","ITA","ITALY" -"3278943809","3278943809","FR","FRA","FRANCE" -"3278943810","3278943810","DE","DEU","GERMANY" -"3278943811","3278943811","GR","GRC","GREECE" -"3278943812","3278943812","IT","ITA","ITALY" -"3278943813","3278943813","IN","IND","INDIA" -"3278943814","3278943814","ES","ESP","SPAIN" -"3278943815","3278943815","MA","MAR","MOROCCO" -"3278943816","3278943816","GB","GBR","UNITED KINGDOM" -"3278943817","3278943817","FR","FRA","FRANCE" -"3278943818","3278943818","DE","DEU","GERMANY" -"3278943819","3278943819","AT","AUT","AUSTRIA" -"3278943820","3278943820","DE","DEU","GERMANY" -"3278943821","3278943821","SM","SMR","SAN MARINO" -"3278943822","3278943822","PL","POL","POLAND" -"3278943823","3278943823","DE","DEU","GERMANY" -"3278943824","3278943824","CH","CHE","SWITZERLAND" -"3278943825","3278943826","DE","DEU","GERMANY" -"3278943827","3278943827","AT","AUT","AUSTRIA" -"3278943828","3278943828","ES","ESP","SPAIN" -"3278943829","3278943829","CH","CHE","SWITZERLAND" -"3278943830","3278943830","ES","ESP","SPAIN" -"3278943831","3278943831","US","USA","UNITED STATES" -"3278943832","3278943832","BE","BEL","BELGIUM" -"3278943833","3278943833","IT","ITA","ITALY" -"3278943834","3278943835","GB","GBR","UNITED KINGDOM" -"3278943836","3278943836","DE","DEU","GERMANY" -"3278943837","3278943837","ES","ESP","SPAIN" -"3278943838","3278943838","DE","DEU","GERMANY" -"3278943839","3278943839","IT","ITA","ITALY" -"3278943840","3278943845","DE","DEU","GERMANY" -"3278943846","3278943846","GB","GBR","UNITED KINGDOM" -"3278943847","3278943847","FR","FRA","FRANCE" -"3278943848","3278943848","IT","ITA","ITALY" -"3278943849","3278943849","DE","DEU","GERMANY" -"3278943850","3278943851","FR","FRA","FRANCE" -"3278943852","3278943852","BE","BEL","BELGIUM" -"3278943853","3278943853","GB","GBR","UNITED KINGDOM" -"3278943854","3278943854","ES","ESP","SPAIN" -"3278943855","3278943855","BE","BEL","BELGIUM" -"3278943856","3278943856","DE","DEU","GERMANY" -"3278943857","3278943857","PL","POL","POLAND" -"3278943858","3278943858","NL","NLD","NETHERLANDS" -"3278943859","3278943859","DE","DEU","GERMANY" -"3278943860","3278943860","FR","FRA","FRANCE" -"3278943861","3278943862","DE","DEU","GERMANY" -"3278943863","3278943863","IT","ITA","ITALY" -"3278943864","3278943864","DK","DNK","DENMARK" -"3278943865","3278943865","GB","GBR","UNITED KINGDOM" -"3278943866","3278943866","IT","ITA","ITALY" -"3278943867","3278943867","ES","ESP","SPAIN" -"3278943868","3278943868","IT","ITA","ITALY" -"3278943869","3278943869","IE","IRL","IRELAND" -"3278943870","3278943870","NL","NLD","NETHERLANDS" -"3278943871","3278943871","FR","FRA","FRANCE" -"3278943872","3278943872","DE","DEU","GERMANY" -"3278943873","3278943873","IT","ITA","ITALY" -"3278943874","3278943874","CH","CHE","SWITZERLAND" -"3278943875","3278943875","IL","ISR","ISRAEL" -"3278943876","3278943881","DE","DEU","GERMANY" -"3278943882","3278943882","PL","POL","POLAND" -"3278943883","3278943883","CH","CHE","SWITZERLAND" -"3278943884","3278943884","DE","DEU","GERMANY" -"3278943885","3278943885","IT","ITA","ITALY" -"3278943886","3278943888","DE","DEU","GERMANY" -"3278943889","3278943889","BE","BEL","BELGIUM" -"3278943890","3278943890","NL","NLD","NETHERLANDS" -"3278943891","3278943891","ES","ESP","SPAIN" -"3278943892","3278943892","BE","BEL","BELGIUM" -"3278943893","3278943893","DE","DEU","GERMANY" -"3278943894","3278943894","IT","ITA","ITALY" -"3278943895","3278943895","DE","DEU","GERMANY" -"3278943896","3278943896","PL","POL","POLAND" -"3278943897","3278943897","ES","ESP","SPAIN" -"3278943898","3278943898","IT","ITA","ITALY" -"3278943899","3278943899","GB","GBR","UNITED KINGDOM" -"3278943900","3278943900","ES","ESP","SPAIN" -"3278943901","3278943901","DE","DEU","GERMANY" -"3278943902","3278943902","GB","GBR","UNITED KINGDOM" -"3278943903","3278943903","IT","ITA","ITALY" -"3278943904","3278943904","DE","DEU","GERMANY" -"3278943905","3278943905","FR","FRA","FRANCE" -"3278943906","3278943907","IT","ITA","ITALY" -"3278943908","3278943908","GB","GBR","UNITED KINGDOM" -"3278943909","3278943909","HU","HUN","HUNGARY" -"3278943910","3278943910","FR","FRA","FRANCE" -"3278943911","3278943911","DE","DEU","GERMANY" -"3278943912","3278943913","IT","ITA","ITALY" -"3278943914","3278943914","DE","DEU","GERMANY" -"3278943915","3278943915","PL","POL","POLAND" -"3278943916","3278943916","IT","ITA","ITALY" -"3278943917","3278943917","FR","FRA","FRANCE" -"3278943918","3278943918","ES","ESP","SPAIN" -"3278943919","3278943920","FR","FRA","FRANCE" -"3278943921","3278943921","DE","DEU","GERMANY" -"3278943922","3278943922","ES","ESP","SPAIN" -"3278943923","3278943923","DE","DEU","GERMANY" -"3278943924","3278943924","IT","ITA","ITALY" -"3278943925","3278943926","ES","ESP","SPAIN" -"3278943927","3278943927","GB","GBR","UNITED KINGDOM" -"3278943928","3278943928","DE","DEU","GERMANY" -"3278943929","3278943929","PT","PRT","PORTUGAL" -"3278943930","3278943930","IT","ITA","ITALY" -"3278943931","3278943932","DE","DEU","GERMANY" -"3278943933","3278943933","ES","ESP","SPAIN" -"3278943934","3278943934","DE","DEU","GERMANY" -"3278943935","3278943935","GR","GRC","GREECE" -"3278943936","3278943939","DE","DEU","GERMANY" -"3278943940","3278943940","DK","DNK","DENMARK" -"3278943941","3278943941","GB","GBR","UNITED KINGDOM" -"3278943942","3278943942","NL","NLD","NETHERLANDS" -"3278943943","3278943943","AT","AUT","AUSTRIA" -"3278943944","3278943944","IT","ITA","ITALY" -"3278943945","3278943945","NL","NLD","NETHERLANDS" -"3278943946","3278943946","LU","LUX","LUXEMBOURG" -"3278943947","3278943947","DE","DEU","GERMANY" -"3278943948","3278943948","ES","ESP","SPAIN" -"3278943949","3278943949","DE","DEU","GERMANY" -"3278943950","3278943950","BE","BEL","BELGIUM" -"3278943951","3278943951","LU","LUX","LUXEMBOURG" -"3278943952","3278943953","DE","DEU","GERMANY" -"3278943954","3278943954","FR","FRA","FRANCE" -"3278943955","3278943956","DE","DEU","GERMANY" -"3278943957","3278943957","GB","GBR","UNITED KINGDOM" -"3278943958","3278943958","DK","DNK","DENMARK" -"3278943959","3278943959","DE","DEU","GERMANY" -"3278943960","3278943960","FR","FRA","FRANCE" -"3278943961","3278943964","DE","DEU","GERMANY" -"3278943965","3278943965","CH","CHE","SWITZERLAND" -"3278943966","3278943967","DE","DEU","GERMANY" -"3278943968","3278943968","ES","ESP","SPAIN" -"3278943969","3278943969","PL","POL","POLAND" -"3278943970","3278943970","ES","ESP","SPAIN" -"3278943971","3278943971","BE","BEL","BELGIUM" -"3278943972","3278943972","IT","ITA","ITALY" -"3278943973","3278943973","DE","DEU","GERMANY" -"3278943974","3278943974","GR","GRC","GREECE" -"3278943975","3278943976","CH","CHE","SWITZERLAND" -"3278943977","3278943977","DK","DNK","DENMARK" -"3278943978","3278943978","DE","DEU","GERMANY" -"3278943979","3278943979","ES","ESP","SPAIN" -"3278943980","3278943980","GB","GBR","UNITED KINGDOM" -"3278943981","3278943981","DE","DEU","GERMANY" -"3278943982","3278943982","ES","ESP","SPAIN" -"3278943983","3278943983","DE","DEU","GERMANY" -"3278943984","3278943984","AT","AUT","AUSTRIA" -"3278943985","3278943985","NL","NLD","NETHERLANDS" -"3278943986","3278943987","IT","ITA","ITALY" -"3278943988","3278943988","ES","ESP","SPAIN" -"3278943989","3278943990","DE","DEU","GERMANY" -"3278943991","3278943991","NL","NLD","NETHERLANDS" -"3278943992","3278943992","IT","ITA","ITALY" -"3278943993","3278943993","AT","AUT","AUSTRIA" -"3278943994","3278943995","DE","DEU","GERMANY" -"3278943996","3278943997","CH","CHE","SWITZERLAND" -"3278943998","3278943998","FR","FRA","FRANCE" -"3278943999","3278944001","DE","DEU","GERMANY" -"3278944002","3278944002","GB","GBR","UNITED KINGDOM" -"3278944003","3278944003","LU","LUX","LUXEMBOURG" -"3278944004","3278944004","PT","PRT","PORTUGAL" -"3278944005","3278944006","DE","DEU","GERMANY" -"3278944007","3278944007","NL","NLD","NETHERLANDS" -"3278944008","3278944008","IT","ITA","ITALY" -"3278944009","3278944009","CH","CHE","SWITZERLAND" -"3278944010","3278944010","NL","NLD","NETHERLANDS" -"3278944011","3278944012","DE","DEU","GERMANY" -"3278944013","3278944013","DK","DNK","DENMARK" -"3278944014","3278944014","IT","ITA","ITALY" -"3278944015","3278944015","IS","ISL","ICELAND" -"3278944016","3278944016","PL","POL","POLAND" -"3278944017","3278944017","DE","DEU","GERMANY" -"3278944018","3278944018","BE","BEL","BELGIUM" -"3278944019","3278944019","FR","FRA","FRANCE" -"3278944020","3278944020","DE","DEU","GERMANY" -"3278944021","3278944021","IT","ITA","ITALY" -"3278944022","3278944022","FR","FRA","FRANCE" -"3278944023","3278944023","AT","AUT","AUSTRIA" -"3278944024","3278944025","CH","CHE","SWITZERLAND" -"3278944026","3278944027","FR","FRA","FRANCE" -"3278944028","3278944028","DE","DEU","GERMANY" -"3278944029","3278944029","IT","ITA","ITALY" -"3278944030","3278944030","DE","DEU","GERMANY" -"3278944031","3278944031","FR","FRA","FRANCE" -"3278944032","3278944033","DE","DEU","GERMANY" -"3278944034","3278944034","GR","GRC","GREECE" -"3278944035","3278944035","FR","FRA","FRANCE" -"3278944036","3278944036","US","USA","UNITED STATES" -"3278944037","3278944037","FR","FRA","FRANCE" -"3278944038","3278944038","GB","GBR","UNITED KINGDOM" -"3278944039","3278944039","ES","ESP","SPAIN" -"3278944040","3278944040","FR","FRA","FRANCE" -"3278944041","3278944041","DE","DEU","GERMANY" -"3278944042","3278944042","FR","FRA","FRANCE" -"3278944043","3278944043","DE","DEU","GERMANY" -"3278944044","3278944045","FR","FRA","FRANCE" -"3278944046","3278944046","NL","NLD","NETHERLANDS" -"3278944047","3278944047","GB","GBR","UNITED KINGDOM" -"3278944048","3278944048","BE","BEL","BELGIUM" -"3278944049","3278944049","IT","ITA","ITALY" -"3278944050","3278944050","DE","DEU","GERMANY" -"3278944051","3278944051","BE","BEL","BELGIUM" -"3278944052","3278944052","AT","AUT","AUSTRIA" -"3278944053","3278944053","IT","ITA","ITALY" -"3278944054","3278944054","DE","DEU","GERMANY" -"3278944055","3278944055","IT","ITA","ITALY" -"3278944056","3278944058","DE","DEU","GERMANY" -"3278944059","3278944059","ES","ESP","SPAIN" -"3278944060","3278944060","BE","BEL","BELGIUM" -"3278944061","3278944061","FR","FRA","FRANCE" -"3278944062","3278944063","DE","DEU","GERMANY" -"3278944064","3278944064","FR","FRA","FRANCE" -"3278944065","3278944065","IT","ITA","ITALY" -"3278944066","3278944066","GB","GBR","UNITED KINGDOM" -"3278944067","3278944067","DE","DEU","GERMANY" -"3278944068","3278944068","ES","ESP","SPAIN" -"3278944069","3278944069","PL","POL","POLAND" -"3278944070","3278944070","DE","DEU","GERMANY" -"3278944071","3278944071","DK","DNK","DENMARK" -"3278944072","3278944072","AT","AUT","AUSTRIA" -"3278944073","3278944073","FR","FRA","FRANCE" -"3278944074","3278944075","ES","ESP","SPAIN" -"3278944076","3278944076","DE","DEU","GERMANY" -"3278944077","3278944077","GB","GBR","UNITED KINGDOM" -"3278944078","3278944078","DE","DEU","GERMANY" -"3278944079","3278944079","GB","GBR","UNITED KINGDOM" -"3278944080","3278944080","DE","DEU","GERMANY" -"3278944081","3278944081","GB","GBR","UNITED KINGDOM" -"3278944082","3278944082","IT","ITA","ITALY" -"3278944083","3278944084","ES","ESP","SPAIN" -"3278944085","3278944085","PT","PRT","PORTUGAL" -"3278944086","3278944086","NL","NLD","NETHERLANDS" -"3278944087","3278944087","CH","CHE","SWITZERLAND" -"3278944088","3278944088","IT","ITA","ITALY" -"3278944089","3278944089","DE","DEU","GERMANY" -"3278944090","3278944090","IT","ITA","ITALY" -"3278944091","3278944091","MA","MAR","MOROCCO" -"3278944092","3278944092","GR","GRC","GREECE" -"3278944093","3278944094","DE","DEU","GERMANY" -"3278944095","3278944095","AT","AUT","AUSTRIA" -"3278944096","3278944096","GB","GBR","UNITED KINGDOM" -"3278944097","3278944097","DE","DEU","GERMANY" -"3278944098","3278944098","SE","SWE","SWEDEN" -"3278944099","3278944099","GB","GBR","UNITED KINGDOM" -"3278944100","3278944102","DE","DEU","GERMANY" -"3278944103","3278944104","IT","ITA","ITALY" -"3278944105","3278944105","FR","FRA","FRANCE" -"3278944106","3278944106","AT","AUT","AUSTRIA" -"3278944107","3278944108","DE","DEU","GERMANY" -"3278944109","3278944109","ES","ESP","SPAIN" -"3278944110","3278944111","DE","DEU","GERMANY" -"3278944112","3278944112","NL","NLD","NETHERLANDS" -"3278944113","3278944113","DE","DEU","GERMANY" -"3278944114","3278944114","IT","ITA","ITALY" -"3278944115","3278944116","ES","ESP","SPAIN" -"3278944117","3278944118","IT","ITA","ITALY" -"3278944119","3278944119","ES","ESP","SPAIN" -"3278944120","3278944121","DE","DEU","GERMANY" -"3278944122","3278944122","FR","FRA","FRANCE" -"3278944123","3278944123","IT","ITA","ITALY" -"3278944124","3278944124","DE","DEU","GERMANY" -"3278944125","3278944125","SE","SWE","SWEDEN" -"3278944126","3278944126","ES","ESP","SPAIN" -"3278944127","3278944127","IT","ITA","ITALY" -"3278944128","3278944128","PT","PRT","PORTUGAL" -"3278944129","3278944129","BE","BEL","BELGIUM" -"3278944130","3278944130","DE","DEU","GERMANY" -"3278944131","3278944131","FR","FRA","FRANCE" -"3278944132","3278944132","IE","IRL","IRELAND" -"3278944133","3278944133","IT","ITA","ITALY" -"3278944134","3278944134","ES","ESP","SPAIN" -"3278944135","3278944135","NL","NLD","NETHERLANDS" -"3278944136","3278944137","DE","DEU","GERMANY" -"3278944138","3278944138","GB","GBR","UNITED KINGDOM" -"3278944139","3278944139","FR","FRA","FRANCE" -"3278944140","3278944140","PT","PRT","PORTUGAL" -"3278944141","3278944141","FR","FRA","FRANCE" -"3278944142","3278944142","GB","GBR","UNITED KINGDOM" -"3278944143","3278944143","AT","AUT","AUSTRIA" -"3278944144","3278944144","DE","DEU","GERMANY" -"3278944145","3278944145","SE","SWE","SWEDEN" -"3278944146","3278944147","DE","DEU","GERMANY" -"3278944148","3278944148","ES","ESP","SPAIN" -"3278944149","3278944149","DE","DEU","GERMANY" -"3278944150","3278944150","IE","IRL","IRELAND" -"3278944151","3278944151","IT","ITA","ITALY" -"3278944152","3278944152","IS","ISL","ICELAND" -"3278944153","3278944156","DE","DEU","GERMANY" -"3278944157","3278944157","FR","FRA","FRANCE" -"3278944158","3278944158","DE","DEU","GERMANY" -"3278944159","3278944159","CH","CHE","SWITZERLAND" -"3278944160","3278944160","FR","FRA","FRANCE" -"3278944161","3278944161","DE","DEU","GERMANY" -"3278944162","3278944162","GB","GBR","UNITED KINGDOM" -"3278944163","3278944163","HU","HUN","HUNGARY" -"3278944164","3278944164","IT","ITA","ITALY" -"3278944165","3278944166","DE","DEU","GERMANY" -"3278944167","3278944167","IT","ITA","ITALY" -"3278944168","3278944168","CH","CHE","SWITZERLAND" -"3278944169","3278944169","DE","DEU","GERMANY" -"3278944170","3278944171","CH","CHE","SWITZERLAND" -"3278944172","3278944172","DE","DEU","GERMANY" -"3278944173","3278944173","FR","FRA","FRANCE" -"3278944174","3278944174","GB","GBR","UNITED KINGDOM" -"3278944175","3278944175","DE","DEU","GERMANY" -"3278944176","3278944176","ES","ESP","SPAIN" -"3278944177","3278944177","LU","LUX","LUXEMBOURG" -"3278944178","3278944179","DE","DEU","GERMANY" -"3278944180","3278944180","GB","GBR","UNITED KINGDOM" -"3278944181","3278944181","IT","ITA","ITALY" -"3278944182","3278944182","FR","FRA","FRANCE" -"3278944183","3278944184","ES","ESP","SPAIN" -"3278944185","3278944185","NL","NLD","NETHERLANDS" -"3278944186","3278944192","DE","DEU","GERMANY" -"3278944193","3278944193","FR","FRA","FRANCE" -"3278944194","3278944194","GB","GBR","UNITED KINGDOM" -"3278944195","3278944195","IT","ITA","ITALY" -"3278944196","3278944197","DE","DEU","GERMANY" -"3278944198","3278944198","IT","ITA","ITALY" -"3278944199","3278944199","AT","AUT","AUSTRIA" -"3278944200","3278944200","DE","DEU","GERMANY" -"3278944201","3278944201","SE","SWE","SWEDEN" -"3278944202","3278944202","NO","NOR","NORWAY" -"3278944203","3278944203","NL","NLD","NETHERLANDS" -"3278944204","3278944207","DE","DEU","GERMANY" -"3278944208","3278944208","NL","NLD","NETHERLANDS" -"3278944209","3278944209","PL","POL","POLAND" -"3278944210","3278944210","AT","AUT","AUSTRIA" -"3278944211","3278944211","DE","DEU","GERMANY" -"3278944212","3278944212","FR","FRA","FRANCE" -"3278944213","3278944213","DK","DNK","DENMARK" -"3278944214","3278944214","GB","GBR","UNITED KINGDOM" -"3278944215","3278944215","IT","ITA","ITALY" -"3278944216","3278944216","DE","DEU","GERMANY" -"3278944217","3278944217","IT","ITA","ITALY" -"3278944218","3278944219","DE","DEU","GERMANY" -"3278944220","3278944220","GB","GBR","UNITED KINGDOM" -"3278944221","3278944221","GR","GRC","GREECE" -"3278944222","3278944222","IT","ITA","ITALY" -"3278944223","3278944224","DE","DEU","GERMANY" -"3278944225","3278944225","NL","NLD","NETHERLANDS" -"3278944226","3278944226","RU","RUS","RUSSIAN FEDERATION" -"3278944227","3278944227","IT","ITA","ITALY" -"3278944228","3278944230","DE","DEU","GERMANY" -"3278944231","3278944231","CH","CHE","SWITZERLAND" -"3278944232","3278944232","NL","NLD","NETHERLANDS" -"3278944233","3278944233","GB","GBR","UNITED KINGDOM" -"3278944234","3278944234","AT","AUT","AUSTRIA" -"3278944235","3278944235","DE","DEU","GERMANY" -"3278944236","3278944236","IT","ITA","ITALY" -"3278944237","3278944238","DE","DEU","GERMANY" -"3278944239","3278944239","SE","SWE","SWEDEN" -"3278944240","3278944240","FR","FRA","FRANCE" -"3278944241","3278944241","IT","ITA","ITALY" -"3278944242","3278944242","ES","ESP","SPAIN" -"3278944243","3278944243","DE","DEU","GERMANY" -"3278944244","3278944244","ES","ESP","SPAIN" -"3278944245","3278944245","BE","BEL","BELGIUM" -"3278944246","3278944246","NL","NLD","NETHERLANDS" -"3278944247","3278944247","ES","ESP","SPAIN" -"3278944248","3278944248","NL","NLD","NETHERLANDS" -"3278944249","3278944249","ES","ESP","SPAIN" -"3278944250","3278944250","IT","ITA","ITALY" -"3278944251","3278944251","AT","AUT","AUSTRIA" -"3278944252","3278944252","IT","ITA","ITALY" -"3278944253","3278944254","GB","GBR","UNITED KINGDOM" -"3278944255","3278944256","DE","DEU","GERMANY" -"3278944257","3278944272","US","USA","UNITED STATES" -"3278944273","3278944273","CA","CAN","CANADA" -"3278944274","3278944274","US","USA","UNITED STATES" -"3278944275","3278944275","CA","CAN","CANADA" -"3278944276","3278944277","US","USA","UNITED STATES" -"3278944278","3278944278","VE","VEN","VENEZUELA" -"3278944279","3278944279","DE","DEU","GERMANY" -"3278944280","3278944284","US","USA","UNITED STATES" -"3278944285","3278944285","DE","DEU","GERMANY" -"3278944286","3278944286","US","USA","UNITED STATES" -"3278944287","3278944288","CA","CAN","CANADA" -"3278944289","3278944293","US","USA","UNITED STATES" -"3278944294","3278944294","CA","CAN","CANADA" -"3278944295","3278944346","US","USA","UNITED STATES" -"3278944347","3278944347","AR","ARG","ARGENTINA" -"3278944348","3278944360","US","USA","UNITED STATES" -"3278944361","3278944361","AR","ARG","ARGENTINA" -"3278944362","3278944365","US","USA","UNITED STATES" -"3278944366","3278944366","MX","MEX","MEXICO" -"3278944367","3278944367","US","USA","UNITED STATES" -"3278944368","3278944368","CA","CAN","CANADA" -"3278944369","3278944379","US","USA","UNITED STATES" -"3278944380","3278944380","DE","DEU","GERMANY" -"3278944381","3278944385","US","USA","UNITED STATES" -"3278944386","3278944386","DE","DEU","GERMANY" -"3278944387","3278944388","US","USA","UNITED STATES" -"3278944389","3278944389","CA","CAN","CANADA" -"3278944390","3278944390","AR","ARG","ARGENTINA" -"3278944391","3278944391","CA","CAN","CANADA" -"3278944392","3278944395","US","USA","UNITED STATES" -"3278944396","3278944396","CA","CAN","CANADA" -"3278944397","3278944399","US","USA","UNITED STATES" -"3278944400","3278944400","BR","BRA","BRAZIL" -"3278944401","3278944401","US","USA","UNITED STATES" -"3278944402","3278944402","CA","CAN","CANADA" -"3278944403","3278944412","US","USA","UNITED STATES" -"3278944413","3278944413","CA","CAN","CANADA" -"3278944414","3278944418","US","USA","UNITED STATES" -"3278944419","3278944419","DE","DEU","GERMANY" -"3278944420","3278944420","CA","CAN","CANADA" -"3278944421","3278944421","DE","DEU","GERMANY" -"3278944422","3278944432","US","USA","UNITED STATES" -"3278944433","3278944433","DE","DEU","GERMANY" -"3278944434","3278944444","US","USA","UNITED STATES" -"3278944445","3278944449","DE","DEU","GERMANY" -"3278944450","3278944451","CA","CAN","CANADA" -"3278944452","3278944460","DE","DEU","GERMANY" -"3278944461","3278944461","US","USA","UNITED STATES" -"3278944462","3278944470","DE","DEU","GERMANY" -"3278944471","3278944471","US","USA","UNITED STATES" -"3278944472","3278944513","DE","DEU","GERMANY" -"3278944514","3278944517","US","USA","UNITED STATES" -"3278944518","3278944518","DE","DEU","GERMANY" -"3278944519","3278944520","US","USA","UNITED STATES" -"3278944521","3278944521","CA","CAN","CANADA" -"3278944522","3278944522","US","USA","UNITED STATES" -"3278944523","3278944523","CA","CAN","CANADA" -"3278944524","3278944524","US","USA","UNITED STATES" -"3278944525","3278944525","CL","CHL","CHILE" -"3278944526","3278944526","US","USA","UNITED STATES" -"3278944527","3278944527","CA","CAN","CANADA" -"3278944528","3278944528","US","USA","UNITED STATES" -"3278944529","3278944529","CA","CAN","CANADA" -"3278944530","3278944537","US","USA","UNITED STATES" -"3278944538","3278944538","AR","ARG","ARGENTINA" -"3278944539","3278944544","US","USA","UNITED STATES" -"3278944545","3278944545","CA","CAN","CANADA" -"3278944546","3278944555","US","USA","UNITED STATES" -"3278944556","3278944556","CL","CHL","CHILE" -"3278944557","3278944559","US","USA","UNITED STATES" -"3278944560","3278944560","AR","ARG","ARGENTINA" -"3278944561","3278944561","US","USA","UNITED STATES" -"3278944562","3278944562","CA","CAN","CANADA" -"3278944563","3278944563","US","USA","UNITED STATES" -"3278944564","3278944564","CA","CAN","CANADA" -"3278944565","3278944569","US","USA","UNITED STATES" -"3278944570","3278944570","DE","DEU","GERMANY" -"3278944571","3278944572","US","USA","UNITED STATES" -"3278944573","3278944573","DE","DEU","GERMANY" -"3278944574","3278944574","US","USA","UNITED STATES" -"3278944575","3278944575","DE","DEU","GERMANY" -"3278944576","3278944578","US","USA","UNITED STATES" -"3278944579","3278944579","DE","DEU","GERMANY" -"3278944580","3278944580","AR","ARG","ARGENTINA" -"3278944581","3278944581","US","USA","UNITED STATES" -"3278944582","3278944583","DE","DEU","GERMANY" -"3278944584","3278944588","US","USA","UNITED STATES" -"3278944589","3278944589","DE","DEU","GERMANY" -"3278944590","3278944599","US","USA","UNITED STATES" -"3278944600","3278944600","SA","SAU","SAUDI ARABIA" -"3278944601","3278944606","US","USA","UNITED STATES" -"3278944607","3278944608","DE","DEU","GERMANY" -"3278944609","3278944611","US","USA","UNITED STATES" -"3278944612","3278944612","DE","DEU","GERMANY" -"3278944613","3278944633","US","USA","UNITED STATES" -"3278944634","3278944634","DE","DEU","GERMANY" -"3278944635","3278944638","US","USA","UNITED STATES" -"3278944639","3278944640","DE","DEU","GERMANY" -"3278944641","3278944642","US","USA","UNITED STATES" -"3278944643","3278944643","CL","CHL","CHILE" -"3278944644","3278944650","US","USA","UNITED STATES" -"3278944651","3278944651","DE","DEU","GERMANY" -"3278944652","3278944654","US","USA","UNITED STATES" -"3278944655","3278944657","AR","ARG","ARGENTINA" -"3278944658","3278944659","US","USA","UNITED STATES" -"3278944660","3278944660","AR","ARG","ARGENTINA" -"3278944661","3278944661","US","USA","UNITED STATES" -"3278944662","3278944663","DE","DEU","GERMANY" -"3278944664","3278944665","AR","ARG","ARGENTINA" -"3278944666","3278944667","US","USA","UNITED STATES" -"3278944668","3278944668","AR","ARG","ARGENTINA" -"3278944669","3278944670","US","USA","UNITED STATES" -"3278944671","3278944671","CL","CHL","CHILE" -"3278944672","3278944672","DE","DEU","GERMANY" -"3278944673","3278944673","PE","PER","PERU" -"3278944674","3278944674","DE","DEU","GERMANY" -"3278944675","3278944677","US","USA","UNITED STATES" -"3278944678","3278944678","CA","CAN","CANADA" -"3278944679","3278944679","US","USA","UNITED STATES" -"3278944680","3278944680","CA","CAN","CANADA" -"3278944681","3278944683","US","USA","UNITED STATES" -"3278944684","3278944686","DE","DEU","GERMANY" -"3278944687","3278944687","US","USA","UNITED STATES" -"3278944688","3278944688","AR","ARG","ARGENTINA" -"3278944689","3278944693","US","USA","UNITED STATES" -"3278944694","3278944695","DE","DEU","GERMANY" -"3278944696","3278944696","US","USA","UNITED STATES" -"3278944697","3278944697","CA","CAN","CANADA" -"3278944698","3278944706","US","USA","UNITED STATES" -"3278944707","3278944707","DE","DEU","GERMANY" -"3278944708","3278944708","PE","PER","PERU" -"3278944709","3278944709","US","USA","UNITED STATES" -"3278944710","3278944710","DE","DEU","GERMANY" -"3278944711","3278944712","CL","CHL","CHILE" -"3278944713","3278944713","DE","DEU","GERMANY" -"3278944714","3278944714","JM","JAM","JAMAICA" -"3278944715","3278944715","CA","CAN","CANADA" -"3278944716","3278944716","DE","DEU","GERMANY" -"3278944717","3278944718","US","USA","UNITED STATES" -"3278944719","3278944719","CA","CAN","CANADA" -"3278944720","3278944720","US","USA","UNITED STATES" -"3278944721","3278944721","CA","CAN","CANADA" -"3278944722","3278944727","US","USA","UNITED STATES" -"3278944728","3278944728","DE","DEU","GERMANY" -"3278944729","3278944730","US","USA","UNITED STATES" -"3278944731","3278944731","DE","DEU","GERMANY" -"3278944732","3278944734","US","USA","UNITED STATES" -"3278944735","3278944735","DE","DEU","GERMANY" -"3278944736","3278944736","AR","ARG","ARGENTINA" -"3278944737","3278944739","US","USA","UNITED STATES" -"3278944740","3278944740","CA","CAN","CANADA" -"3278944741","3278944741","DE","DEU","GERMANY" -"3278944742","3278944743","US","USA","UNITED STATES" -"3278944744","3278944745","DE","DEU","GERMANY" -"3278944746","3278944749","US","USA","UNITED STATES" -"3278944750","3278944750","DE","DEU","GERMANY" -"3278944751","3278944751","US","USA","UNITED STATES" -"3278944752","3278944752","DE","DEU","GERMANY" -"3278944753","3278944753","US","USA","UNITED STATES" -"3278944754","3278944754","BR","BRA","BRAZIL" -"3278944755","3278944755","AR","ARG","ARGENTINA" -"3278944756","3278944758","US","USA","UNITED STATES" -"3278944759","3278944760","DE","DEU","GERMANY" -"3278944761","3278944761","UY","URY","URUGUAY" -"3278944762","3278944763","DE","DEU","GERMANY" -"3278944764","3278944764","AR","ARG","ARGENTINA" -"3278944765","3278944765","US","USA","UNITED STATES" -"3278944766","3278944767","DE","DEU","GERMANY" -"3278944768","3278944771","DO","DOM","DOMINICAN REPUBLIC" -"3278944772","3278944819","US","USA","UNITED STATES" -"3278944820","3278944823","AR","ARG","ARGENTINA" -"3278944824","3278944827","BR","BRA","BRAZIL" -"3278944828","3278944851","US","USA","UNITED STATES" -"3278944852","3278944855","CA","CAN","CANADA" -"3278944856","3278944863","US","USA","UNITED STATES" -"3278944864","3278944867","MX","MEX","MEXICO" -"3278944868","3278944871","US","USA","UNITED STATES" -"3278944872","3278944875","DE","DEU","GERMANY" -"3278944876","3278944887","US","USA","UNITED STATES" -"3278944888","3278944891","CO","COL","COLOMBIA" -"3278944892","3278944903","US","USA","UNITED STATES" -"3278944904","3278944907","BR","BRA","BRAZIL" -"3278944908","3278944919","US","USA","UNITED STATES" -"3278944920","3278944923","CO","COL","COLOMBIA" -"3278944924","3278944935","US","USA","UNITED STATES" -"3278944936","3278944939","BR","BRA","BRAZIL" -"3278944940","3278944947","US","USA","UNITED STATES" -"3278944948","3278944951","CO","COL","COLOMBIA" -"3278944952","3278944963","US","USA","UNITED STATES" -"3278944964","3278944971","CA","CAN","CANADA" -"3278944972","3278944975","US","USA","UNITED STATES" -"3278944976","3278944995","CA","CAN","CANADA" -"3278944996","3278944999","CO","COL","COLOMBIA" -"3278945000","3278945007","US","USA","UNITED STATES" -"3278945008","3278945011","CO","COL","COLOMBIA" -"3278945012","3278945015","PE","PER","PERU" -"3278945016","3278945023","US","USA","UNITED STATES" -"3278945024","3278945027","BR","BRA","BRAZIL" -"3278945028","3278945031","AN","ANT","NETHERLANDS ANTILLES" -"3278945032","3278945087","US","USA","UNITED STATES" -"3278945088","3278945091","BR","BRA","BRAZIL" -"3278945092","3278945099","US","USA","UNITED STATES" -"3278945100","3278945107","BR","BRA","BRAZIL" -"3278945108","3278945111","DO","DOM","DOMINICAN REPUBLIC" -"3278945112","3278945127","US","USA","UNITED STATES" -"3278945128","3278945131","AR","ARG","ARGENTINA" -"3278945132","3278945135","BR","BRA","BRAZIL" -"3278945136","3278945151","US","USA","UNITED STATES" -"3278945152","3278945155","CA","CAN","CANADA" -"3278945156","3278945159","BR","BRA","BRAZIL" -"3278945160","3278945171","US","USA","UNITED STATES" -"3278945172","3278945175","AR","ARG","ARGENTINA" -"3278945176","3278945191","US","USA","UNITED STATES" -"3278945192","3278945199","CA","CAN","CANADA" -"3278945200","3278945203","US","USA","UNITED STATES" -"3278945204","3278945207","AR","ARG","ARGENTINA" -"3278945208","3278945227","US","USA","UNITED STATES" -"3278945228","3278945235","CA","CAN","CANADA" -"3278945236","3278945247","US","USA","UNITED STATES" -"3278945248","3278945255","CA","CAN","CANADA" -"3278945256","3278945267","US","USA","UNITED STATES" -"3278945268","3278945271","AR","ARG","ARGENTINA" -"3278945272","3278945275","US","USA","UNITED STATES" -"3278945276","3278945279","CL","CHL","CHILE" -"3278945280","3278945283","CA","CAN","CANADA" -"3278945284","3278945299","US","USA","UNITED STATES" -"3278945300","3278945303","DE","DEU","GERMANY" -"3278945304","3278945307","CO","COL","COLOMBIA" -"3278945308","3278945311","CA","CAN","CANADA" -"3278945312","3278945319","US","USA","UNITED STATES" -"3278945320","3278945323","MX","MEX","MEXICO" -"3278945324","3278945327","AR","ARG","ARGENTINA" -"3278945328","3278945331","CA","CAN","CANADA" -"3278945332","3278945335","US","USA","UNITED STATES" -"3278945336","3278945339","CA","CAN","CANADA" -"3278945340","3278945343","US","USA","UNITED STATES" -"3278945344","3278945347","BR","BRA","BRAZIL" -"3278945348","3278945363","US","USA","UNITED STATES" -"3278945364","3278945367","PR","PRI","PUERTO RICO" -"3278945368","3278945395","US","USA","UNITED STATES" -"3278945396","3278945399","AR","ARG","ARGENTINA" -"3278945400","3278945403","MX","MEX","MEXICO" -"3278945404","3278945427","US","USA","UNITED STATES" -"3278945428","3278945431","CA","CAN","CANADA" -"3278945432","3278945435","AR","ARG","ARGENTINA" -"3278945436","3278945439","MX","MEX","MEXICO" -"3278945440","3278945451","US","USA","UNITED STATES" -"3278945452","3278945455","BR","BRA","BRAZIL" -"3278945456","3278945459","US","USA","UNITED STATES" -"3278945460","3278945463","MX","MEX","MEXICO" -"3278945464","3278945479","US","USA","UNITED STATES" -"3278945480","3278945483","CL","CHL","CHILE" -"3278945484","3278945491","BR","BRA","BRAZIL" -"3278945492","3278945503","US","USA","UNITED STATES" -"3278945504","3278945507","MX","MEX","MEXICO" -"3278945508","3278945515","AR","ARG","ARGENTINA" -"3278945516","3278945519","BR","BRA","BRAZIL" -"3278945520","3278945523","US","USA","UNITED STATES" -"3278945524","3278945527","CA","CAN","CANADA" -"3278945528","3278945531","US","USA","UNITED STATES" -"3278945532","3278945535","AN","ANT","NETHERLANDS ANTILLES" -"3278945536","3278945539","AR","ARG","ARGENTINA" -"3278945540","3278945579","US","USA","UNITED STATES" -"3278945580","3278945583","AR","ARG","ARGENTINA" -"3278945584","3278945587","US","USA","UNITED STATES" -"3278945588","3278945591","DO","DOM","DOMINICAN REPUBLIC" -"3278945592","3278945659","US","USA","UNITED STATES" -"3278945660","3278945663","AR","ARG","ARGENTINA" -"3278945664","3278945667","US","USA","UNITED STATES" -"3278945668","3278945671","UY","URY","URUGUAY" -"3278945672","3278945675","DE","DEU","GERMANY" -"3278945676","3278945687","US","USA","UNITED STATES" -"3278945688","3278945691","BR","BRA","BRAZIL" -"3278945692","3278945699","US","USA","UNITED STATES" -"3278945700","3278945703","AR","ARG","ARGENTINA" -"3278945704","3278945715","US","USA","UNITED STATES" -"3278945716","3278945719","CO","COL","COLOMBIA" -"3278945720","3278945723","US","USA","UNITED STATES" -"3278945724","3278945727","AR","ARG","ARGENTINA" -"3278945728","3278945743","US","USA","UNITED STATES" -"3278945744","3278945747","MX","MEX","MEXICO" -"3278945748","3278945763","US","USA","UNITED STATES" -"3278945764","3278945767","MX","MEX","MEXICO" -"3278945768","3278945771","CO","COL","COLOMBIA" -"3278945772","3278945779","US","USA","UNITED STATES" -"3278945780","3278945783","PE","PER","PERU" -"3278945784","3278945791","US","USA","UNITED STATES" -"3278945792","3278945794","DE","DEU","GERMANY" -"3278945795","3278945795","CH","CHE","SWITZERLAND" -"3278945796","3278945796","DE","DEU","GERMANY" -"3278945797","3278945797","BE","BEL","BELGIUM" -"3278945798","3278945798","NL","NLD","NETHERLANDS" -"3278945799","3278945799","LU","LUX","LUXEMBOURG" -"3278945800","3278945800","SE","SWE","SWEDEN" -"3278945801","3278945801","NL","NLD","NETHERLANDS" -"3278945802","3278945802","PT","PRT","PORTUGAL" -"3278945803","3278945803","GB","GBR","UNITED KINGDOM" -"3278945804","3278945804","NL","NLD","NETHERLANDS" -"3278945805","3278945805","DK","DNK","DENMARK" -"3278945806","3278945806","FR","FRA","FRANCE" -"3278945807","3278945807","DE","DEU","GERMANY" -"3278945808","3278945808","RU","RUS","RUSSIAN FEDERATION" -"3278945809","3278945809","DE","DEU","GERMANY" -"3278945810","3278945810","CH","CHE","SWITZERLAND" -"3278945811","3278945815","DE","DEU","GERMANY" -"3278945816","3278945816","GB","GBR","UNITED KINGDOM" -"3278945817","3278945821","DE","DEU","GERMANY" -"3278945822","3278945822","GR","GRC","GREECE" -"3278945823","3278945823","CH","CHE","SWITZERLAND" -"3278945824","3278945826","DE","DEU","GERMANY" -"3278945827","3278945827","DK","DNK","DENMARK" -"3278945828","3278945828","FR","FRA","FRANCE" -"3278945829","3278945829","DE","DEU","GERMANY" -"3278945830","3278945831","NL","NLD","NETHERLANDS" -"3278945832","3278945832","DE","DEU","GERMANY" -"3278945833","3278945833","GB","GBR","UNITED KINGDOM" -"3278945834","3278945834","NL","NLD","NETHERLANDS" -"3278945835","3278945835","CH","CHE","SWITZERLAND" -"3278945836","3278945838","DE","DEU","GERMANY" -"3278945839","3278945839","CZ","CZE","CZECH REPUBLIC" -"3278945840","3278945840","DE","DEU","GERMANY" -"3278945841","3278945841","CH","CHE","SWITZERLAND" -"3278945842","3278945844","DE","DEU","GERMANY" -"3278945845","3278945845","ES","ESP","SPAIN" -"3278945846","3278945846","CH","CHE","SWITZERLAND" -"3278945847","3278945847","DE","DEU","GERMANY" -"3278945848","3278945848","GB","GBR","UNITED KINGDOM" -"3278945849","3278945849","DE","DEU","GERMANY" -"3278945850","3278945850","NL","NLD","NETHERLANDS" -"3278945851","3278945852","DE","DEU","GERMANY" -"3278945853","3278945853","CH","CHE","SWITZERLAND" -"3278945854","3278945854","FR","FRA","FRANCE" -"3278945855","3278945855","DE","DEU","GERMANY" -"3278945856","3278945856","DK","DNK","DENMARK" -"3278945857","3278945858","DE","DEU","GERMANY" -"3278945859","3278945859","GB","GBR","UNITED KINGDOM" -"3278945860","3278945860","FR","FRA","FRANCE" -"3278945861","3278945861","IT","ITA","ITALY" -"3278945862","3278945862","BE","BEL","BELGIUM" -"3278945863","3278945863","ES","ESP","SPAIN" -"3278945864","3278945864","IE","IRL","IRELAND" -"3278945865","3278945866","DE","DEU","GERMANY" -"3278945867","3278945867","FR","FRA","FRANCE" -"3278945868","3278945868","NO","NOR","NORWAY" -"3278945869","3278945870","DE","DEU","GERMANY" -"3278945871","3278945871","IT","ITA","ITALY" -"3278945872","3278945872","FR","FRA","FRANCE" -"3278945873","3278945873","DE","DEU","GERMANY" -"3278945874","3278945874","IT","ITA","ITALY" -"3278945875","3278945875","ES","ESP","SPAIN" -"3278945876","3278945876","NL","NLD","NETHERLANDS" -"3278945877","3278945877","SE","SWE","SWEDEN" -"3278945878","3278945879","FR","FRA","FRANCE" -"3278945880","3278945880","DE","DEU","GERMANY" -"3278945881","3278945881","BE","BEL","BELGIUM" -"3278945882","3278945886","DE","DEU","GERMANY" -"3278945887","3278945888","IT","ITA","ITALY" -"3278945889","3278945890","DE","DEU","GERMANY" -"3278945891","3278945891","CH","CHE","SWITZERLAND" -"3278945892","3278945892","BE","BEL","BELGIUM" -"3278945893","3278945893","DE","DEU","GERMANY" -"3278945894","3278945894","AT","AUT","AUSTRIA" -"3278945895","3278945895","ES","ESP","SPAIN" -"3278945896","3278945896","GB","GBR","UNITED KINGDOM" -"3278945897","3278945897","IT","ITA","ITALY" -"3278945898","3278945898","ES","ESP","SPAIN" -"3278945899","3278945899","DE","DEU","GERMANY" -"3278945900","3278945900","FR","FRA","FRANCE" -"3278945901","3278945904","DE","DEU","GERMANY" -"3278945905","3278945905","PT","PRT","PORTUGAL" -"3278945906","3278945906","FR","FRA","FRANCE" -"3278945907","3278945907","GB","GBR","UNITED KINGDOM" -"3278945908","3278945908","DE","DEU","GERMANY" -"3278945909","3278945909","FR","FRA","FRANCE" -"3278945910","3278945910","DE","DEU","GERMANY" -"3278945911","3278945911","NL","NLD","NETHERLANDS" -"3278945912","3278945917","DE","DEU","GERMANY" -"3278945918","3278945918","IT","ITA","ITALY" -"3278945919","3278946049","DE","DEU","GERMANY" -"3278946050","3278946054","US","USA","UNITED STATES" -"3278946055","3278946055","CA","CAN","CANADA" -"3278946056","3278946059","US","USA","UNITED STATES" -"3278946060","3278946060","CN","CHN","CHINA" -"3278946061","3278946061","US","USA","UNITED STATES" -"3278946062","3278946062","DE","DEU","GERMANY" -"3278946063","3278946067","US","USA","UNITED STATES" -"3278946068","3278946068","DE","DEU","GERMANY" -"3278946069","3278946084","US","USA","UNITED STATES" -"3278946085","3278946085","DE","DEU","GERMANY" -"3278946086","3278946091","US","USA","UNITED STATES" -"3278946092","3278946092","DE","DEU","GERMANY" -"3278946093","3278946108","US","USA","UNITED STATES" -"3278946109","3278946109","GB","GBR","UNITED KINGDOM" -"3278946110","3278946166","US","USA","UNITED STATES" -"3278946167","3278946167","DE","DEU","GERMANY" -"3278946168","3278946208","US","USA","UNITED STATES" -"3278946209","3278946213","DE","DEU","GERMANY" -"3278946214","3278946214","US","USA","UNITED STATES" -"3278946215","3278946221","DE","DEU","GERMANY" -"3278946222","3278946222","US","USA","UNITED STATES" -"3278946223","3278946224","DE","DEU","GERMANY" -"3278946225","3278946225","US","USA","UNITED STATES" -"3278946226","3278946229","DE","DEU","GERMANY" -"3278946230","3278946231","US","USA","UNITED STATES" -"3278946232","3278946239","DE","DEU","GERMANY" -"3278946240","3278946263","US","USA","UNITED STATES" -"3278946264","3278946267","DE","DEU","GERMANY" -"3278946268","3278946271","US","USA","UNITED STATES" -"3278946272","3278946275","SV","SLV","EL SALVADOR" -"3278946276","3278946279","DO","DOM","DOMINICAN REPUBLIC" -"3278946280","3278946283","DE","DEU","GERMANY" -"3278946284","3278946287","US","USA","UNITED STATES" -"3278946288","3278946291","DE","DEU","GERMANY" -"3278946292","3278946299","US","USA","UNITED STATES" -"3278946300","3278946303","DE","DEU","GERMANY" -"3278946304","3278954495","LB","LBN","LEBANON" -"3278954496","3278962687","RU","RUS","RUSSIAN FEDERATION" -"3278962688","3279028223","CZ","CZE","CZECH REPUBLIC" -"3279028224","3279028735","PL","POL","POLAND" -"3279028736","3279029247","RU","RUS","RUSSIAN FEDERATION" -"3279029248","3279030271","UA","UKR","UKRAINE" -"3279030272","3279030783","RU","RUS","RUSSIAN FEDERATION" -"3279030784","3279031295","DE","DEU","GERMANY" -"3279031296","3279031807","NL","NLD","NETHERLANDS" -"3279031808","3279032319","RO","ROM","ROMANIA" -"3279032320","3279032831","HU","HUN","HUNGARY" -"3279032832","3279033343","FR","FRA","FRANCE" -"3279033344","3279033855","RU","RUS","RUSSIAN FEDERATION" -"3279033856","3279034367","DE","DEU","GERMANY" -"3279034368","3279035391","FR","FRA","FRANCE" -"3279035392","3279035903","PS","PSE","PALESTINIAN TERRITORY, OCCUPIED" -"3279035904","3279036415","UA","UKR","UKRAINE" -"3279036416","3279044607","LV","LVA","LATVIA" -"3279044608","3279052799","FR","FRA","FRANCE" -"3279052800","3279053311","UA","UKR","UKRAINE" -"3279053312","3279053823","DE","DEU","GERMANY" -"3279053824","3279054335","NL","NLD","NETHERLANDS" -"3279054336","3279054847","GB","GBR","UNITED KINGDOM" -"3279055360","3279055871","SA","SAU","SAUDI ARABIA" -"3279055872","3279056383","TR","TUR","TURKEY" -"3279056384","3279056895","GB","GBR","UNITED KINGDOM" -"3279056896","3279057407","BG","BGR","BULGARIA" -"3279057408","3279057919","FR","FRA","FRANCE" -"3279057920","3279058431","RO","ROM","ROMANIA" -"3279058432","3279058943","RU","RUS","RUSSIAN FEDERATION" -"3279058944","3279059455","UA","UKR","UKRAINE" -"3279059968","3279060479","RU","RUS","RUSSIAN FEDERATION" -"3279060480","3279060991","PL","POL","POLAND" -"3279060992","3279069183","UA","UKR","UKRAINE" -"3279069184","3279077375","PL","POL","POLAND" -"3279077376","3279078399","ES","ESP","SPAIN" -"3279078400","3279078655","IT","ITA","ITALY" -"3279078656","3279078911","FR","FRA","FRANCE" -"3279078912","3279081215","ES","ESP","SPAIN" -"3279081216","3279081231","DE","DEU","GERMANY" -"3279081232","3279083583","ES","ESP","SPAIN" -"3279083584","3279083599","NL","NLD","NETHERLANDS" -"3279083600","3279083807","ES","ESP","SPAIN" -"3279083808","3279083839","NL","NLD","NETHERLANDS" -"3279083840","3279084543","ES","ESP","SPAIN" -"3279084544","3279085567","IT","ITA","ITALY" -"3279085568","3279093759","NL","NLD","NETHERLANDS" -"3279093760","3279103103","FR","FRA","FRANCE" -"3279103104","3279103135","GB","GBR","UNITED KINGDOM" -"3279103136","3279119295","FR","FRA","FRANCE" -"3279119296","3279119327","GB","GBR","UNITED KINGDOM" -"3279119328","3279159295","FR","FRA","FRANCE" -"3279159296","3279169279","PL","POL","POLAND" -"3279169280","3279169535","GB","GBR","UNITED KINGDOM" -"3279169536","3279290367","PL","POL","POLAND" -"3279290368","3279291391","NL","NLD","NETHERLANDS" -"3279291392","3279291647","GB","GBR","UNITED KINGDOM" -"3279291648","3279294463","NL","NLD","NETHERLANDS" -"3279294720","3279294975","IE","IRL","IRELAND" -"3279294976","3279295231","SE","SWE","SWEDEN" -"3279295232","3279295487","ES","ESP","SPAIN" -"3279295488","3279295743","PT","PRT","PORTUGAL" -"3279295744","3279295999","IL","ISR","ISRAEL" -"3279296000","3279296511","ZA","ZAF","SOUTH AFRICA" -"3279296512","3279297279","ES","ESP","SPAIN" -"3279297280","3279297535","ZA","ZAF","SOUTH AFRICA" -"3279297536","3279298047","SE","SWE","SWEDEN" -"3279298048","3279298559","ZA","ZAF","SOUTH AFRICA" -"3279298560","3279305471","DE","DEU","GERMANY" -"3279305488","3279305503","DE","DEU","GERMANY" -"3279305504","3279305535","GB","GBR","UNITED KINGDOM" -"3279305536","3279305631","DE","DEU","GERMANY" -"3279305632","3279305663","GB","GBR","UNITED KINGDOM" -"3279305664","3279305727","ES","ESP","SPAIN" -"3279305728","3279306751","DE","DEU","GERMANY" -"3279306752","3279310847","FR","FRA","FRANCE" -"3279310848","3279311871","DE","DEU","GERMANY" -"3279312896","3279313415","DE","DEU","GERMANY" -"3279313424","3279313919","DE","DEU","GERMANY" -"3279313920","3279314943","GB","GBR","UNITED KINGDOM" -"3279314944","3279315711","CH","CHE","SWITZERLAND" -"3279315712","3279315967","BE","BEL","BELGIUM" -"3279315968","3279316223","DE","DEU","GERMANY" -"3279316224","3279316479","BE","BEL","BELGIUM" -"3279316480","3279317759","IT","ITA","ITALY" -"3279317760","3279317887","DE","DEU","GERMANY" -"3279317888","3279317951","IT","ITA","ITALY" -"3279317952","3279317967","DE","DEU","GERMANY" -"3279317968","3279317983","IT","ITA","ITALY" -"3279317984","3279318015","NL","NLD","NETHERLANDS" -"3279318016","3279318271","DE","DEU","GERMANY" -"3279318272","3279318527","GB","GBR","UNITED KINGDOM" -"3279318528","3279318559","CZ","CZE","CZECH REPUBLIC" -"3279318560","3279318655","FR","FRA","FRANCE" -"3279318656","3279318687","CZ","CZE","CZECH REPUBLIC" -"3279318688","3279318719","FR","FRA","FRANCE" -"3279318720","3279318751","ZA","ZAF","SOUTH AFRICA" -"3279318752","3279318783","GB","GBR","UNITED KINGDOM" -"3279318784","3279319039","NL","NLD","NETHERLANDS" -"3279319040","3279320063","AT","AUT","AUSTRIA" -"3279320064","3279321087","FR","FRA","FRANCE" -"3279321088","3279322623","DK","DNK","DENMARK" -"3279322624","3279322663","NL","NLD","NETHERLANDS" -"3279322664","3279322671","AT","AUT","AUSTRIA" -"3279322672","3279322687","GB","GBR","UNITED KINGDOM" -"3279322688","3279322879","DE","DEU","GERMANY" -"3279322880","3279322975","NL","NLD","NETHERLANDS" -"3279322976","3279323071","DE","DEU","GERMANY" -"3279323072","3279330079","GB","GBR","UNITED KINGDOM" -"3279330080","3279330111","DK","DNK","DENMARK" -"3279330112","3279330815","GB","GBR","UNITED KINGDOM" -"3279331072","3279335295","GB","GBR","UNITED KINGDOM" -"3279335296","3279335423","BE","BEL","BELGIUM" -"3279335424","3279339519","GB","GBR","UNITED KINGDOM" -"3279339520","3279340031","ES","ESP","SPAIN" -"3279340032","3279340543","IT","ITA","ITALY" -"3279340544","3279340671","FR","FRA","FRANCE" -"3279340800","3279341055","FR","FRA","FRANCE" -"3279341056","3279341567","IT","ITA","ITALY" -"3279341568","3279341823","SE","SWE","SWEDEN" -"3279341824","3279342079","ZA","ZAF","SOUTH AFRICA" -"3279342080","3279342335","IT","ITA","ITALY" -"3279342336","3279342591","ZA","ZAF","SOUTH AFRICA" -"3279342592","3279342847","SE","SWE","SWEDEN" -"3279342848","3279343103","HR","HRV","CROATIA" -"3279343104","3279343359","SI","SVN","SLOVENIA" -"3279343360","3279343615","ZA","ZAF","SOUTH AFRICA" -"3279343616","3279345151","BE","BEL","BELGIUM" -"3279345152","3279345663","SE","SWE","SWEDEN" -"3279345664","3279346943","GB","GBR","UNITED KINGDOM" -"3279346944","3279347711","FR","FRA","FRANCE" -"3279347712","3279348223","SE","SWE","SWEDEN" -"3279348224","3279348735","IT","ITA","ITALY" -"3279348736","3279348991","GB","GBR","UNITED KINGDOM" -"3279348992","3279349247","ES","ESP","SPAIN" -"3279349248","3279349503","IT","ITA","ITALY" -"3279349504","3279349759","FR","FRA","FRANCE" -"3279349760","3279351039","DE","DEU","GERMANY" -"3279351040","3279351295","FR","FRA","FRANCE" -"3279351296","3279351807","GB","GBR","UNITED KINGDOM" -"3279351808","3279352319","DK","DNK","DENMARK" -"3279352320","3279352575","GB","GBR","UNITED KINGDOM" -"3279352576","3279352831","BE","BEL","BELGIUM" -"3279352832","3279352855","SE","SWE","SWEDEN" -"3279353088","3279353343","GB","GBR","UNITED KINGDOM" -"3279353344","3279354879","DK","DNK","DENMARK" -"3279354880","3279355647","AT","AUT","AUSTRIA" -"3279355648","3279355903","BE","BEL","BELGIUM" -"3279356040","3279356047","NO","NOR","NORWAY" -"3279356064","3279356127","NO","NOR","NORWAY" -"3279356160","3279356415","NO","NOR","NORWAY" -"3279356928","3279357439","NO","NOR","NORWAY" -"3279372288","3279372799","FI","FIN","FINLAND" -"3279373056","3279375359","FI","FIN","FINLAND" -"3279380480","3279380991","CH","CHE","SWITZERLAND" -"3279382784","3279383807","CH","CHE","SWITZERLAND" -"3279384064","3279385343","CH","CHE","SWITZERLAND" -"3279386368","3279386495","CH","CHE","SWITZERLAND" -"3279387136","3279387391","CH","CHE","SWITZERLAND" -"3279388672","3279388927","GR","GRC","GREECE" -"3279389184","3279389243","GR","GRC","GREECE" -"3279389248","3279389255","GR","GRC","GREECE" -"3279389260","3279389275","GR","GRC","GREECE" -"3279389280","3279389359","GR","GRC","GREECE" -"3279389364","3279389379","GR","GRC","GREECE" -"3279389384","3279389439","GR","GRC","GREECE" -"3279389712","3279389727","GR","GRC","GREECE" -"3279390016","3279390143","GR","GRC","GREECE" -"3279393792","3279394047","GR","GRC","GREECE" -"3279394304","3279394559","GR","GRC","GREECE" -"3279402752","3279403007","CZ","CZE","CZECH REPUBLIC" -"3279403264","3279403903","CZ","CZE","CZECH REPUBLIC" -"3279404288","3279404415","CZ","CZE","CZECH REPUBLIC" -"3279404800","3279405055","CZ","CZE","CZECH REPUBLIC" -"3279421440","3279486975","IT","ITA","ITALY" -"3279486976","3279552511","NL","NLD","NETHERLANDS" -"3279552512","3279560703","LV","LVA","LATVIA" -"3279560704","3279568895","GB","GBR","UNITED KINGDOM" -"3279568896","3279577087","IT","ITA","ITALY" -"3279577088","3279585279","BE","BEL","BELGIUM" -"3279585280","3279585919","DE","DEU","GERMANY" -"3279585920","3279585951","GB","GBR","UNITED KINGDOM" -"3279585952","3279585991","DE","DEU","GERMANY" -"3279585992","3279585999","GB","GBR","UNITED KINGDOM" -"3279586000","3279586303","DE","DEU","GERMANY" -"3279586304","3279586559","GB","GBR","UNITED KINGDOM" -"3279586560","3279588095","DE","DEU","GERMANY" -"3279588096","3279588607","GB","GBR","UNITED KINGDOM" -"3279588608","3279588863","DE","DEU","GERMANY" -"3279588864","3279590655","GB","GBR","UNITED KINGDOM" -"3279590656","3279590935","DE","DEU","GERMANY" -"3279590936","3279591167","GB","GBR","UNITED KINGDOM" -"3279591168","3279591935","DE","DEU","GERMANY" -"3279591936","3279592959","GB","GBR","UNITED KINGDOM" -"3279592960","3279593215","DE","DEU","GERMANY" -"3279593216","3279593247","GB","GBR","UNITED KINGDOM" -"3279593248","3279593267","DE","DEU","GERMANY" -"3279593268","3279593271","GB","GBR","UNITED KINGDOM" -"3279593272","3279593275","DE","DEU","GERMANY" -"3279593276","3279593407","GB","GBR","UNITED KINGDOM" -"3279593408","3279593440","DE","DEU","GERMANY" -"3279593441","3279593471","GB","GBR","UNITED KINGDOM" -"3279593472","3279593487","DE","DEU","GERMANY" -"3279593488","3279593535","GB","GBR","UNITED KINGDOM" -"3279593536","3279593567","DE","DEU","GERMANY" -"3279593568","3279593599","GB","GBR","UNITED KINGDOM" -"3279593600","3279593727","DE","DEU","GERMANY" -"3279593728","3279595903","GB","GBR","UNITED KINGDOM" -"3279595904","3279595999","DE","DEU","GERMANY" -"3279596000","3279596023","GB","GBR","UNITED KINGDOM" -"3279596024","3279596031","DE","DEU","GERMANY" -"3279596032","3279596543","GB","GBR","UNITED KINGDOM" -"3279596544","3279597311","DE","DEU","GERMANY" -"3279597312","3279600383","GB","GBR","UNITED KINGDOM" -"3279600384","3279600479","DE","DEU","GERMANY" -"3279600480","3279600487","GB","GBR","UNITED KINGDOM" -"3279600488","3279600639","DE","DEU","GERMANY" -"3279600640","3279601663","GB","GBR","UNITED KINGDOM" -"3279601664","3279609855","CZ","CZE","CZECH REPUBLIC" -"3279609856","3279618047","RU","RUS","RUSSIAN FEDERATION" -"3279618048","3279683583","UA","UKR","UKRAINE" -"3279683584","3279752959","DE","DEU","GERMANY" -"3279752960","3279753215","CH","CHE","SWITZERLAND" -"3279753216","3279946751","DE","DEU","GERMANY" -"3279946752","3279947775","SE","SWE","SWEDEN" -"3279947776","3279948799","NL","NLD","NETHERLANDS" -"3279948800","3279949823","GB","GBR","UNITED KINGDOM" -"3279949824","3279950847","UA","UKR","UKRAINE" -"3279950848","3279951871","DE","DEU","GERMANY" -"3279951872","3279952895","IQ","IRQ","IRAQ" -"3279952896","3279953919","PL","POL","POLAND" -"3279953920","3279955967","TR","TUR","TURKEY" -"3279955968","3279958015","DE","DEU","GERMANY" -"3279958016","3279972351","RU","RUS","RUSSIAN FEDERATION" -"3279972352","3279974399","AT","AUT","AUSTRIA" -"3279974400","3279976447","PL","POL","POLAND" -"3279976448","3279986687","RU","RUS","RUSSIAN FEDERATION" -"3279986688","3279987199","NL","NLD","NETHERLANDS" -"3279987200","3279987711","RU","RUS","RUSSIAN FEDERATION" -"3279987712","3279988223","RO","ROM","ROMANIA" -"3279988224","3279988735","RU","RUS","RUSSIAN FEDERATION" -"3279988736","3279989247","RO","ROM","ROMANIA" -"3279989248","3279989759","AT","AUT","AUSTRIA" -"3279989760","3279990271","PL","POL","POLAND" -"3279990272","3279990783","DK","DNK","DENMARK" -"3279990784","3279991295","IL","ISR","ISRAEL" -"3279991296","3279991807","UA","UKR","UKRAINE" -"3279991808","3279992319","PL","POL","POLAND" -"3279992320","3279992831","UA","UKR","UKRAINE" -"3279992832","3279993855","NL","NLD","NETHERLANDS" -"3279993856","3279994367","RO","ROM","ROMANIA" -"3279994368","3279994879","GB","GBR","UNITED KINGDOM" -"3279994880","3280003071","CZ","CZE","CZECH REPUBLIC" -"3280003072","3280003583","BG","BGR","BULGARIA" -"3280003584","3280004095","UA","UKR","UKRAINE" -"3280004096","3280004607","PL","POL","POLAND" -"3280004608","3280005119","UA","UKR","UKRAINE" -"3280005120","3280005631","HU","HUN","HUNGARY" -"3280005632","3280006143","IT","ITA","ITALY" -"3280006144","3280006655","DK","DNK","DENMARK" -"3280006656","3280007167","GB","GBR","UNITED KINGDOM" -"3280007168","3280007679","SE","SWE","SWEDEN" -"3280007680","3280008191","PL","POL","POLAND" -"3280008192","3280009215","RU","RUS","RUSSIAN FEDERATION" -"3280009216","3280009727","UA","UKR","UKRAINE" -"3280009728","3280010239","GB","GBR","UNITED KINGDOM" -"3280010240","3280010751","UA","UKR","UKRAINE" -"3280010752","3280011263","TR","TUR","TURKEY" -"3280011264","3280011327","DE","DEU","GERMANY" -"3280011328","3280011391","NL","NLD","NETHERLANDS" -"3280011408","3280011415","GB","GBR","UNITED KINGDOM" -"3280011552","3280011567","GB","GBR","UNITED KINGDOM" -"3280011648","3280011775","IT","ITA","ITALY" -"3280011776","3280011783","NL","NLD","NETHERLANDS" -"3280011784","3280011791","BE","BEL","BELGIUM" -"3280011904","3280011951","BE","BEL","BELGIUM" -"3280014592","3280015103","FR","FRA","FRANCE" -"3280015104","3280015359","GB","GBR","UNITED KINGDOM" -"3280015872","3280016383","GB","GBR","UNITED KINGDOM" -"3280016448","3280016463","BE","BEL","BELGIUM" -"3280016544","3280016559","BE","BEL","BELGIUM" -"3280016560","3280016575","GR","GRC","GREECE" -"3280016576","3280016607","NO","NOR","NORWAY" -"3280016608","3280016623","CH","CHE","SWITZERLAND" -"3280016960","3280016991","BE","BEL","BELGIUM" -"3280016992","3280017023","FR","FRA","FRANCE" -"3280017024","3280017055","IT","ITA","ITALY" -"3280017088","3280017151","IE","IRL","IRELAND" -"3280017920","3280018431","IT","ITA","ITALY" -"3280018432","3280019455","GB","GBR","UNITED KINGDOM" -"3280019712","3280020479","CH","CHE","SWITZERLAND" -"3280020480","3280020735","IE","IRL","IRELAND" -"3280020736","3280020991","BE","BEL","BELGIUM" -"3280020992","3280021087","GB","GBR","UNITED KINGDOM" -"3280021120","3280021183","NL","NLD","NETHERLANDS" -"3280021248","3280021503","CH","CHE","SWITZERLAND" -"3280021760","3280021823","BE","BEL","BELGIUM" -"3280022784","3280023039","IT","ITA","ITALY" -"3280023552","3280024575","IT","ITA","ITALY" -"3280024576","3280024831","SE","SWE","SWEDEN" -"3280027136","3280027391","IE","IRL","IRELAND" -"3280027648","3280027903","CH","CHE","SWITZERLAND" -"3280028160","3280028415","IT","ITA","ITALY" -"3280028416","3280028671","BE","BEL","BELGIUM" -"3280030208","3280030463","CH","CHE","SWITZERLAND" -"3280031744","3280031999","IE","IRL","IRELAND" -"3280032128","3280032255","CH","CHE","SWITZERLAND" -"3280035328","3280035583","CH","CHE","SWITZERLAND" -"3280036608","3280036863","CH","CHE","SWITZERLAND" -"3280037888","3280038399","CH","CHE","SWITZERLAND" -"3280041472","3280041727","CH","CHE","SWITZERLAND" -"3280076800","3280084991","GB","GBR","UNITED KINGDOM" -"3280084992","3280093183","BA","BIH","BOSNIA AND HERZEGOVINA" -"3280093184","3280109567","GR","GRC","GREECE" -"3280109568","3280117759","BE","BEL","BELGIUM" -"3280117760","3280125951","CH","CHE","SWITZERLAND" -"3280125952","3280126207","DE","DEU","GERMANY" -"3280126208","3280126463","IS","ISL","ICELAND" -"3280126464","3280126719","SI","SVN","SLOVENIA" -"3280126720","3280126975","IT","ITA","ITALY" -"3280126976","3280127231","CH","CHE","SWITZERLAND" -"3280127232","3280127487","PL","POL","POLAND" -"3280127488","3280127743","AT","AUT","AUSTRIA" -"3280128000","3280128255","SE","SWE","SWEDEN" -"3280128256","3280128511","GB","GBR","UNITED KINGDOM" -"3280128512","3280129023","HU","HUN","HUNGARY" -"3280129024","3280129279","RU","RUS","RUSSIAN FEDERATION" -"3280129280","3280129535","LV","LVA","LATVIA" -"3280129536","3280129791","SA","SAU","SAUDI ARABIA" -"3280129792","3280130047","FR","FRA","FRANCE" -"3280130048","3280130559","RU","RUS","RUSSIAN FEDERATION" -"3280130560","3280130815","GB","GBR","UNITED KINGDOM" -"3280130816","3280131071","IS","ISL","ICELAND" -"3280131072","3280131327","PL","POL","POLAND" -"3280131328","3280131583","IT","ITA","ITALY" -"3280131584","3280131839","RU","RUS","RUSSIAN FEDERATION" -"3280131840","3280132095","RO","ROM","ROMANIA" -"3280132096","3280132351","RU","RUS","RUSSIAN FEDERATION" -"3280132352","3280132607","GB","GBR","UNITED KINGDOM" -"3280132608","3280132863","CH","CHE","SWITZERLAND" -"3280132864","3280133119","UA","UKR","UKRAINE" -"3280133120","3280133375","IT","ITA","ITALY" -"3280133376","3280133631","DE","DEU","GERMANY" -"3280133632","3280133887","FR","FRA","FRANCE" -"3280133888","3280134143","NL","NLD","NETHERLANDS" -"3280134144","3280142335","IT","ITA","ITALY" -"3280142336","3280144815","RU","RUS","RUSSIAN FEDERATION" -"3280144816","3280144823","RO","ROM","ROMANIA" -"3280144824","3280207871","RU","RUS","RUSSIAN FEDERATION" -"3280207872","3280273407","FR","FRA","FRANCE" -"3280273408","3280338943","RU","RUS","RUSSIAN FEDERATION" -"3280338944","3280347135","GB","GBR","UNITED KINGDOM" -"3280347136","3280355327","NO","NOR","NORWAY" -"3280355328","3280371711","GR","GRC","GREECE" -"3280371712","3280379903","CH","CHE","SWITZERLAND" -"3280379904","3280388095","FR","FRA","FRANCE" -"3280388096","3280388159","GB","GBR","UNITED KINGDOM" -"3280388160","3280388191","FR","FRA","FRANCE" -"3280388192","3280388223","GB","GBR","UNITED KINGDOM" -"3280388224","3280388759","FR","FRA","FRANCE" -"3280388760","3280388767","GB","GBR","UNITED KINGDOM" -"3280388768","3280388799","FR","FRA","FRANCE" -"3280388800","3280388831","GB","GBR","UNITED KINGDOM" -"3280388832","3280390655","FR","FRA","FRANCE" -"3280390656","3280390719","GB","GBR","UNITED KINGDOM" -"3280390720","3280390751","FR","FRA","FRANCE" -"3280390752","3280390783","GB","GBR","UNITED KINGDOM" -"3280390784","3280390815","FR","FRA","FRANCE" -"3280390816","3280390879","GB","GBR","UNITED KINGDOM" -"3280390880","3280390911","FR","FRA","FRANCE" -"3280390912","3280391039","GB","GBR","UNITED KINGDOM" -"3280391040","3280391551","FR","FRA","FRANCE" -"3280391552","3280391583","GB","GBR","UNITED KINGDOM" -"3280391584","3280391743","FR","FRA","FRANCE" -"3280391744","3280391775","GB","GBR","UNITED KINGDOM" -"3280391776","3280391807","FR","FRA","FRANCE" -"3280391808","3280391967","GB","GBR","UNITED KINGDOM" -"3280391968","3280392007","FR","FRA","FRANCE" -"3280392008","3280392031","GB","GBR","UNITED KINGDOM" -"3280392032","3280392063","FR","FRA","FRANCE" -"3280392064","3280392095","GB","GBR","UNITED KINGDOM" -"3280392096","3280392127","FR","FRA","FRANCE" -"3280392128","3280392191","CH","CHE","SWITZERLAND" -"3280392192","3280392319","FR","FRA","FRANCE" -"3280392320","3280392383","GB","GBR","UNITED KINGDOM" -"3280392384","3280392415","FR","FRA","FRANCE" -"3280392416","3280392447","GB","GBR","UNITED KINGDOM" -"3280392448","3280392463","FR","FRA","FRANCE" -"3280392464","3280392639","GB","GBR","UNITED KINGDOM" -"3280392640","3280392671","FR","FRA","FRANCE" -"3280392672","3280392703","GB","GBR","UNITED KINGDOM" -"3280392704","3280392831","FR","FRA","FRANCE" -"3280392832","3280393023","GB","GBR","UNITED KINGDOM" -"3280393024","3280393055","FR","FRA","FRANCE" -"3280393056","3280393087","GB","GBR","UNITED KINGDOM" -"3280393088","3280393151","FR","FRA","FRANCE" -"3280393152","3280393343","GB","GBR","UNITED KINGDOM" -"3280393344","3280393375","FR","FRA","FRANCE" -"3280393376","3280393407","GB","GBR","UNITED KINGDOM" -"3280393408","3280393535","FR","FRA","FRANCE" -"3280393536","3280393599","GB","GBR","UNITED KINGDOM" -"3280393600","3280393631","FR","FRA","FRANCE" -"3280393632","3280393695","GB","GBR","UNITED KINGDOM" -"3280393696","3280393727","FR","FRA","FRANCE" -"3280393728","3280394367","GB","GBR","UNITED KINGDOM" -"3280394368","3280394431","FR","FRA","FRANCE" -"3280394432","3280394463","GB","GBR","UNITED KINGDOM" -"3280394464","3280394495","FR","FRA","FRANCE" -"3280394496","3280394527","GB","GBR","UNITED KINGDOM" -"3280394528","3280394559","FR","FRA","FRANCE" -"3280394560","3280394623","GB","GBR","UNITED KINGDOM" -"3280394624","3280395519","FR","FRA","FRANCE" -"3280395520","3280395647","GB","GBR","UNITED KINGDOM" -"3280395648","3280395839","FR","FRA","FRANCE" -"3280395840","3280396031","GB","GBR","UNITED KINGDOM" -"3280396032","3280396055","FR","FRA","FRANCE" -"3280396056","3280396071","GB","GBR","UNITED KINGDOM" -"3280396072","3280396095","FR","FRA","FRANCE" -"3280396096","3280396191","GB","GBR","UNITED KINGDOM" -"3280396192","3280396223","FR","FRA","FRANCE" -"3280396224","3280396255","GB","GBR","UNITED KINGDOM" -"3280396256","3280396263","FR","FRA","FRANCE" -"3280396264","3280396287","GB","GBR","UNITED KINGDOM" -"3280396288","3280404479","FI","FIN","FINLAND" -"3280404480","3280437247","IT","ITA","ITALY" -"3280437248","3280453631","DE","DEU","GERMANY" -"3280453632","3280454655","RO","ROM","ROMANIA" -"3280454656","3280455679","UA","UKR","UKRAINE" -"3280455680","3280456703","IT","ITA","ITALY" -"3280456704","3280457727","RU","RUS","RUSSIAN FEDERATION" -"3280457728","3280458751","GB","GBR","UNITED KINGDOM" -"3280458752","3280459775","RU","RUS","RUSSIAN FEDERATION" -"3280459776","3280460799","DK","DNK","DENMARK" -"3280460800","3280462847","DE","DEU","GERMANY" -"3280463872","3280465919","RU","RUS","RUSSIAN FEDERATION" -"3280466944","3280467967","UA","UKR","UKRAINE" -"3280468992","3280470015","CY","CYP","CYPRUS" -"3280470016","3280535551","PL","POL","POLAND" -"3280535552","3280568319","GB","GBR","UNITED KINGDOM" -"3280568320","3280576511","IT","ITA","ITALY" -"3280576512","3280576767","BY","BLR","BELARUS" -"3280576768","3280577279","PL","POL","POLAND" -"3280577280","3280577535","DE","DEU","GERMANY" -"3280577536","3280577791","IL","ISR","ISRAEL" -"3280577792","3280578047","NL","NLD","NETHERLANDS" -"3280578048","3280578303","RO","ROM","ROMANIA" -"3280578304","3280578559","UA","UKR","UKRAINE" -"3280578560","3280578815","PL","POL","POLAND" -"3280578816","3280579071","NL","NLD","NETHERLANDS" -"3280579072","3280579327","DE","DEU","GERMANY" -"3280579328","3280579583","RU","RUS","RUSSIAN FEDERATION" -"3280579584","3280579839","CH","CHE","SWITZERLAND" -"3280579840","3280580095","HR","HRV","CROATIA" -"3280580096","3280580351","KW","KWT","KUWAIT" -"3280580352","3280580607","CH","CHE","SWITZERLAND" -"3280580608","3280580863","GB","GBR","UNITED KINGDOM" -"3280580864","3280581119","DE","DEU","GERMANY" -"3280581120","3280581375","DK","DNK","DENMARK" -"3280581376","3280581631","EE","EST","ESTONIA" -"3280581632","3280581887","BY","BLR","BELARUS" -"3280581888","3280582143","FR","FRA","FRANCE" -"3280582144","3280582399","CZ","CZE","CZECH REPUBLIC" -"3280582400","3280582655","DK","DNK","DENMARK" -"3280582656","3280582911","FR","FRA","FRANCE" -"3280582912","3280583167","UA","UKR","UKRAINE" -"3280583168","3280583423","RO","ROM","ROMANIA" -"3280583424","3280583679","RU","RUS","RUSSIAN FEDERATION" -"3280583680","3280583935","PS","PSE","PALESTINIAN TERRITORY, OCCUPIED" -"3280583936","3280584191","PL","POL","POLAND" -"3280584192","3280584447","RO","ROM","ROMANIA" -"3280584448","3280584703","DE","DEU","GERMANY" -"3280584704","3280585215","UA","UKR","UKRAINE" -"3280585216","3280585727","DK","DNK","DENMARK" -"3280585728","3280586239","UA","UKR","UKRAINE" -"3280586240","3280586751","DE","DEU","GERMANY" -"3280586752","3280587263","RU","RUS","RUSSIAN FEDERATION" -"3280587264","3280587775","UA","UKR","UKRAINE" -"3280587776","3280588287","RO","ROM","ROMANIA" -"3280588288","3280588799","UA","UKR","UKRAINE" -"3280588800","3280589311","PL","POL","POLAND" -"3280589312","3280590335","DE","DEU","GERMANY" -"3280590336","3280590847","NL","NLD","NETHERLANDS" -"3280590848","3280591359","DE","DEU","GERMANY" -"3280591872","3280592383","GB","GBR","UNITED KINGDOM" -"3280592384","3280592895","TR","TUR","TURKEY" -"3280592896","3280593407","DE","DEU","GERMANY" -"3280593408","3280593919","UA","UKR","UKRAINE" -"3280593920","3280594431","LU","LUX","LUXEMBOURG" -"3280594432","3280594943","NL","NLD","NETHERLANDS" -"3280594944","3280595455","UA","UKR","UKRAINE" -"3280595456","3280595967","DE","DEU","GERMANY" -"3280595968","3280596479","DK","DNK","DENMARK" -"3280596480","3280596991","AT","AUT","AUSTRIA" -"3280596992","3280597503","UA","UKR","UKRAINE" -"3280597504","3280598015","FR","FRA","FRANCE" -"3280598016","3280598527","UA","UKR","UKRAINE" -"3280598528","3280599039","PL","POL","POLAND" -"3280599040","3280599551","FR","FRA","FRANCE" -"3280599552","3280600063","UA","UKR","UKRAINE" -"3280600064","3280600575","BG","BGR","BULGARIA" -"3280600576","3280601087","UA","UKR","UKRAINE" -"3280601088","3280609279","PT","PRT","PORTUGAL" -"3280609280","3280617471","DE","DEU","GERMANY" -"3280617472","3280625663","UA","UKR","UKRAINE" -"3280625664","3280633855","MD","MDA","REPUBLIC OF MOLDOVA" -"3280633856","3280635807","BG","BGR","BULGARIA" -"3280635808","3280635815","DE","DEU","GERMANY" -"3280635816","3280642047","BG","BGR","BULGARIA" -"3280642048","3280650239","UA","UKR","UKRAINE" -"3280650240","3280650495","RO","ROM","ROMANIA" -"3280650496","3280650751","UA","UKR","UKRAINE" -"3280650752","3280651263","GB","GBR","UNITED KINGDOM" -"3280651264","3280651519","SI","SVN","SLOVENIA" -"3280651520","3280651775","FR","FRA","FRANCE" -"3280651776","3280652031","UA","UKR","UKRAINE" -"3280652032","3280652287","NO","NOR","NORWAY" -"3280652288","3280652543","PL","POL","POLAND" -"3280652544","3280652799","SI","SVN","SLOVENIA" -"3280652800","3280653055","FR","FRA","FRANCE" -"3280653056","3280653311","CH","CHE","SWITZERLAND" -"3280653312","3280653823","GB","GBR","UNITED KINGDOM" -"3280653824","3280654079","RU","RUS","RUSSIAN FEDERATION" -"3280654080","3280654335","CH","CHE","SWITZERLAND" -"3280654336","3280654591","PL","POL","POLAND" -"3280654592","3280654847","ES","ESP","SPAIN" -"3280654848","3280655103","RU","RUS","RUSSIAN FEDERATION" -"3280655104","3280655359","PL","POL","POLAND" -"3280655360","3280655615","SE","SWE","SWEDEN" -"3280655616","3280655871","FI","FIN","FINLAND" -"3280655872","3280656127","RO","ROM","ROMANIA" -"3280656128","3280656639","CH","CHE","SWITZERLAND" -"3280656640","3280657407","UA","UKR","UKRAINE" -"3280657408","3280657663","RU","RUS","RUSSIAN FEDERATION" -"3280657664","3280657919","SE","SWE","SWEDEN" -"3280657920","3280658175","RO","ROM","ROMANIA" -"3280658176","3280658431","DE","DEU","GERMANY" -"3280658432","3280666623","GB","GBR","UNITED KINGDOM" -"3280666624","3280732159","NO","NOR","NORWAY" -"3280732160","3280764927","DE","DEU","GERMANY" -"3280764928","3280765951","RU","RUS","RUSSIAN FEDERATION" -"3280765952","3280766975","DK","DNK","DENMARK" -"3280766976","3280767999","AT","AUT","AUSTRIA" -"3280768000","3280769023","FR","FRA","FRANCE" -"3280769024","3280770047","NL","NLD","NETHERLANDS" -"3280770048","3280771071","FR","FRA","FRANCE" -"3280771072","3280772095","PL","POL","POLAND" -"3280772096","3280773119","ES","ESP","SPAIN" -"3280773120","3280774143","UA","UKR","UKRAINE" -"3280774144","3280775167","ME","MNE","MONTENEGRO" -"3280775168","3280776191","UA","UKR","UKRAINE" -"3280776192","3280777215","SE","SWE","SWEDEN" -"3280777216","3280778239","UA","UKR","UKRAINE" -"3280778240","3280779263","RU","RUS","RUSSIAN FEDERATION" -"3280779264","3280780287","DE","DEU","GERMANY" -"3280780288","3280781311","PL","POL","POLAND" -"3280781312","3280782335","FI","FIN","FINLAND" -"3280782336","3280783359","TR","TUR","TURKEY" -"3280783360","3280784383","SE","SWE","SWEDEN" -"3280784384","3280785407","RU","RUS","RUSSIAN FEDERATION" -"3280785408","3280787455","DE","DEU","GERMANY" -"3280787456","3280788479","GB","GBR","UNITED KINGDOM" -"3280788480","3280789503","PL","POL","POLAND" -"3280789504","3280790527","UA","UKR","UKRAINE" -"3280791552","3280792575","DE","DEU","GERMANY" -"3280792576","3280793599","PL","POL","POLAND" -"3280793600","3280794623","NL","NLD","NETHERLANDS" -"3280794624","3280795647","UA","UKR","UKRAINE" -"3280795648","3280796671","MZ","MOZ","MOZAMBIQUE" -"3280796672","3280797695","CZ","CZE","CZECH REPUBLIC" -"3280797696","3280810783","CH","CHE","SWITZERLAND" -"3280810784","3280810799","DE","DEU","GERMANY" -"3280810800","3280844292","CH","CHE","SWITZERLAND" -"3280844293","3280844295","GB","GBR","UNITED KINGDOM" -"3280844296","3280863231","CH","CHE","SWITZERLAND" -"3280863232","3280928767","TR","TUR","TURKEY" -"3280928768","3280928768","GB","GBR","UNITED KINGDOM" -"3280928769","3280928769","DE","DEU","GERMANY" -"3280928770","3280928771","GB","GBR","UNITED KINGDOM" -"3280928772","3280928791","DE","DEU","GERMANY" -"3280928792","3280928799","GB","GBR","UNITED KINGDOM" -"3280928800","3280928815","DE","DEU","GERMANY" -"3280928816","3280928831","GB","GBR","UNITED KINGDOM" -"3280928832","3280928843","DE","DEU","GERMANY" -"3280928844","3280928847","GB","GBR","UNITED KINGDOM" -"3280928848","3280928849","DE","DEU","GERMANY" -"3280928850","3280928854","GB","GBR","UNITED KINGDOM" -"3280928855","3280928859","DE","DEU","GERMANY" -"3280928860","3280928895","GB","GBR","UNITED KINGDOM" -"3280928896","3280928906","DE","DEU","GERMANY" -"3280928907","3280928907","GB","GBR","UNITED KINGDOM" -"3280928908","3280928927","DE","DEU","GERMANY" -"3280928928","3280928960","GB","GBR","UNITED KINGDOM" -"3280928961","3280928961","DE","DEU","GERMANY" -"3280928962","3280928962","GB","GBR","UNITED KINGDOM" -"3280928963","3280928963","DE","DEU","GERMANY" -"3280928964","3280928964","GB","GBR","UNITED KINGDOM" -"3280928965","3280928965","DE","DEU","GERMANY" -"3280928966","3280928991","GB","GBR","UNITED KINGDOM" -"3280928992","3280928998","DE","DEU","GERMANY" -"3280928999","3280929007","GB","GBR","UNITED KINGDOM" -"3280929008","3280929015","DE","DEU","GERMANY" -"3280929016","3280929055","GB","GBR","UNITED KINGDOM" -"3280929056","3280929096","DE","DEU","GERMANY" -"3280929097","3280929098","GB","GBR","UNITED KINGDOM" -"3280929099","3280929099","DE","DEU","GERMANY" -"3280929100","3280929100","GB","GBR","UNITED KINGDOM" -"3280929101","3280929101","DE","DEU","GERMANY" -"3280929102","3280929119","GB","GBR","UNITED KINGDOM" -"3280929120","3280929151","DE","DEU","GERMANY" -"3280929152","3280929183","GB","GBR","UNITED KINGDOM" -"3280929184","3280929247","DE","DEU","GERMANY" -"3280929248","3280929255","GB","GBR","UNITED KINGDOM" -"3280929256","3280929259","DE","DEU","GERMANY" -"3280929260","3280929263","GB","GBR","UNITED KINGDOM" -"3280929264","3280929271","DE","DEU","GERMANY" -"3280929272","3280929272","GB","GBR","UNITED KINGDOM" -"3280929273","3280929273","DE","DEU","GERMANY" -"3280929274","3280929274","GB","GBR","UNITED KINGDOM" -"3280929275","3280929276","DE","DEU","GERMANY" -"3280929277","3280929277","GB","GBR","UNITED KINGDOM" -"3280929278","3280929278","DE","DEU","GERMANY" -"3280929279","3280929343","GB","GBR","UNITED KINGDOM" -"3280929344","3280929367","DE","DEU","GERMANY" -"3280929368","3280929375","GB","GBR","UNITED KINGDOM" -"3280929376","3280929395","DE","DEU","GERMANY" -"3280929396","3280929399","GB","GBR","UNITED KINGDOM" -"3280929400","3280929403","DE","DEU","GERMANY" -"3280929404","3280929404","GB","GBR","UNITED KINGDOM" -"3280929405","3280929406","DE","DEU","GERMANY" -"3280929407","3280929455","GB","GBR","UNITED KINGDOM" -"3280929456","3280929487","DE","DEU","GERMANY" -"3280929488","3280929503","GB","GBR","UNITED KINGDOM" -"3280929504","3280929527","DE","DEU","GERMANY" -"3280929528","3280929531","GB","GBR","UNITED KINGDOM" -"3280929532","3280929534","DE","DEU","GERMANY" -"3280929535","3280929551","GB","GBR","UNITED KINGDOM" -"3280929552","3280929583","DE","DEU","GERMANY" -"3280929584","3280929599","GB","GBR","UNITED KINGDOM" -"3280929600","3280929615","DE","DEU","GERMANY" -"3280929616","3280929631","GB","GBR","UNITED KINGDOM" -"3280929632","3280929641","DE","DEU","GERMANY" -"3280929642","3280929642","GB","GBR","UNITED KINGDOM" -"3280929643","3280929645","DE","DEU","GERMANY" -"3280929646","3280929647","GB","GBR","UNITED KINGDOM" -"3280929648","3280929655","DE","DEU","GERMANY" -"3280929656","3280929663","GB","GBR","UNITED KINGDOM" -"3280929664","3280929695","DE","DEU","GERMANY" -"3280929696","3280929696","GB","GBR","UNITED KINGDOM" -"3280929697","3280929697","DE","DEU","GERMANY" -"3280929698","3280929698","GB","GBR","UNITED KINGDOM" -"3280929699","3280929699","DE","DEU","GERMANY" -"3280929700","3280929700","GB","GBR","UNITED KINGDOM" -"3280929701","3280929703","DE","DEU","GERMANY" -"3280929704","3280929711","GB","GBR","UNITED KINGDOM" -"3280929712","3280929727","DE","DEU","GERMANY" -"3280929728","3280929792","GB","GBR","UNITED KINGDOM" -"3280929793","3280929799","DE","DEU","GERMANY" -"3280929800","3280929827","GB","GBR","UNITED KINGDOM" -"3280929828","3280929839","DE","DEU","GERMANY" -"3280929840","3280929855","GB","GBR","UNITED KINGDOM" -"3280929856","3280929887","DE","DEU","GERMANY" -"3280929888","3280929888","GB","GBR","UNITED KINGDOM" -"3280929889","3280929889","DE","DEU","GERMANY" -"3280929890","3280930047","GB","GBR","UNITED KINGDOM" -"3280930048","3280930079","DE","DEU","GERMANY" -"3280930080","3280930087","GB","GBR","UNITED KINGDOM" -"3280930088","3280930091","DE","DEU","GERMANY" -"3280930092","3280930095","GB","GBR","UNITED KINGDOM" -"3280930096","3280930111","DE","DEU","GERMANY" -"3280930112","3280930127","GB","GBR","UNITED KINGDOM" -"3280930128","3280930155","DE","DEU","GERMANY" -"3280930156","3280930175","GB","GBR","UNITED KINGDOM" -"3280930176","3280930177","DE","DEU","GERMANY" -"3280930178","3280930180","GB","GBR","UNITED KINGDOM" -"3280930181","3280930182","DE","DEU","GERMANY" -"3280930183","3280930190","GB","GBR","UNITED KINGDOM" -"3280930191","3280930191","DE","DEU","GERMANY" -"3280930192","3280930197","GB","GBR","UNITED KINGDOM" -"3280930198","3280930198","DE","DEU","GERMANY" -"3280930199","3280930199","GB","GBR","UNITED KINGDOM" -"3280930200","3280930239","DE","DEU","GERMANY" -"3280930240","3280930351","GB","GBR","UNITED KINGDOM" -"3280930352","3280930367","DE","DEU","GERMANY" -"3280930368","3280930383","GB","GBR","UNITED KINGDOM" -"3280930384","3280930391","DE","DEU","GERMANY" -"3280930392","3280930407","GB","GBR","UNITED KINGDOM" -"3280930408","3280930420","DE","DEU","GERMANY" -"3280930421","3280930421","GB","GBR","UNITED KINGDOM" -"3280930422","3280930431","DE","DEU","GERMANY" -"3280930432","3280930464","GB","GBR","UNITED KINGDOM" -"3280930465","3280930465","DE","DEU","GERMANY" -"3280930466","3280930466","GB","GBR","UNITED KINGDOM" -"3280930467","3280930495","DE","DEU","GERMANY" -"3280930496","3280930511","GB","GBR","UNITED KINGDOM" -"3280930512","3280930515","DE","DEU","GERMANY" -"3280930516","3280930524","GB","GBR","UNITED KINGDOM" -"3280930525","3280930535","DE","DEU","GERMANY" -"3280930536","3280930537","GB","GBR","UNITED KINGDOM" -"3280930538","3280930541","DE","DEU","GERMANY" -"3280930542","3280930561","GB","GBR","UNITED KINGDOM" -"3280930562","3280930562","DE","DEU","GERMANY" -"3280930563","3280930563","GB","GBR","UNITED KINGDOM" -"3280930564","3280930575","DE","DEU","GERMANY" -"3280930576","3280930579","GB","GBR","UNITED KINGDOM" -"3280930580","3280930591","DE","DEU","GERMANY" -"3280930592","3280930639","GB","GBR","UNITED KINGDOM" -"3280930640","3280930655","DE","DEU","GERMANY" -"3280930656","3280930671","GB","GBR","UNITED KINGDOM" -"3280930672","3280930687","DE","DEU","GERMANY" -"3280930688","3280930719","GB","GBR","UNITED KINGDOM" -"3280930720","3280930731","DE","DEU","GERMANY" -"3280930732","3280930735","GB","GBR","UNITED KINGDOM" -"3280930736","3280930743","DE","DEU","GERMANY" -"3280930744","3280930747","GB","GBR","UNITED KINGDOM" -"3280930748","3280930759","DE","DEU","GERMANY" -"3280930760","3280930767","GB","GBR","UNITED KINGDOM" -"3280930768","3280930771","DE","DEU","GERMANY" -"3280930772","3280930779","GB","GBR","UNITED KINGDOM" -"3280930780","3280930783","DE","DEU","GERMANY" -"3280930784","3280930807","GB","GBR","UNITED KINGDOM" -"3280930808","3280930812","DE","DEU","GERMANY" -"3280930813","3280930818","GB","GBR","UNITED KINGDOM" -"3280930819","3280930819","DE","DEU","GERMANY" -"3280930820","3280930822","GB","GBR","UNITED KINGDOM" -"3280930823","3280930823","DE","DEU","GERMANY" -"3280930824","3280930863","GB","GBR","UNITED KINGDOM" -"3280930864","3280930868","DE","DEU","GERMANY" -"3280930869","3280930869","GB","GBR","UNITED KINGDOM" -"3280930870","3280930870","DE","DEU","GERMANY" -"3280930871","3280930879","GB","GBR","UNITED KINGDOM" -"3280930880","3280930911","DE","DEU","GERMANY" -"3280930912","3280930919","GB","GBR","UNITED KINGDOM" -"3280930920","3280930927","DE","DEU","GERMANY" -"3280930928","3280930975","GB","GBR","UNITED KINGDOM" -"3280930976","3280930983","DE","DEU","GERMANY" -"3280930984","3280931103","GB","GBR","UNITED KINGDOM" -"3280931104","3280931119","DE","DEU","GERMANY" -"3280931120","3280931135","GB","GBR","UNITED KINGDOM" -"3280931136","3280931143","DE","DEU","GERMANY" -"3280931144","3280931154","GB","GBR","UNITED KINGDOM" -"3280931155","3280931155","DE","DEU","GERMANY" -"3280931156","3280931157","GB","GBR","UNITED KINGDOM" -"3280931158","3280931158","DE","DEU","GERMANY" -"3280931159","3280931159","GB","GBR","UNITED KINGDOM" -"3280931160","3280931167","DE","DEU","GERMANY" -"3280931168","3280931175","GB","GBR","UNITED KINGDOM" -"3280931176","3280931180","DE","DEU","GERMANY" -"3280931181","3280931191","GB","GBR","UNITED KINGDOM" -"3280931192","3280931193","DE","DEU","GERMANY" -"3280931194","3280931194","GB","GBR","UNITED KINGDOM" -"3280931195","3280931199","DE","DEU","GERMANY" -"3280931200","3280931327","GB","GBR","UNITED KINGDOM" -"3280931328","3280931631","DE","DEU","GERMANY" -"3280931632","3280931633","GB","GBR","UNITED KINGDOM" -"3280931634","3280931634","DE","DEU","GERMANY" -"3280931635","3280931635","GB","GBR","UNITED KINGDOM" -"3280931636","3280931639","DE","DEU","GERMANY" -"3280931640","3280931649","GB","GBR","UNITED KINGDOM" -"3280931650","3280931650","DE","DEU","GERMANY" -"3280931651","3280931655","GB","GBR","UNITED KINGDOM" -"3280931656","3280931663","DE","DEU","GERMANY" -"3280931664","3280931815","GB","GBR","UNITED KINGDOM" -"3280931816","3280931819","DE","DEU","GERMANY" -"3280931820","3280931825","GB","GBR","UNITED KINGDOM" -"3280931826","3280931826","DE","DEU","GERMANY" -"3280931827","3280931935","GB","GBR","UNITED KINGDOM" -"3280931936","3280931943","DE","DEU","GERMANY" -"3280931944","3280931951","GB","GBR","UNITED KINGDOM" -"3280931952","3280931983","DE","DEU","GERMANY" -"3280931984","3280932015","GB","GBR","UNITED KINGDOM" -"3280932016","3280932031","DE","DEU","GERMANY" -"3280932032","3280932351","GB","GBR","UNITED KINGDOM" -"3280932352","3280932367","DE","DEU","GERMANY" -"3280932368","3280932383","GB","GBR","UNITED KINGDOM" -"3280932384","3280932399","DE","DEU","GERMANY" -"3280932400","3280932431","GB","GBR","UNITED KINGDOM" -"3280932432","3280932455","DE","DEU","GERMANY" -"3280932456","3280932463","GB","GBR","UNITED KINGDOM" -"3280932464","3280932472","DE","DEU","GERMANY" -"3280932473","3280932474","GB","GBR","UNITED KINGDOM" -"3280932475","3280932477","DE","DEU","GERMANY" -"3280932478","3280932479","GB","GBR","UNITED KINGDOM" -"3280932480","3280932495","DE","DEU","GERMANY" -"3280932496","3280932543","GB","GBR","UNITED KINGDOM" -"3280932544","3280932559","DE","DEU","GERMANY" -"3280932560","3280932567","GB","GBR","UNITED KINGDOM" -"3280932568","3280932575","DE","DEU","GERMANY" -"3280932576","3280932591","GB","GBR","UNITED KINGDOM" -"3280932592","3280932607","DE","DEU","GERMANY" -"3280932608","3280932655","GB","GBR","UNITED KINGDOM" -"3280932656","3280932663","DE","DEU","GERMANY" -"3280932664","3280932671","GB","GBR","UNITED KINGDOM" -"3280932672","3280932687","DE","DEU","GERMANY" -"3280932688","3280932711","GB","GBR","UNITED KINGDOM" -"3280932712","3280932735","DE","DEU","GERMANY" -"3280932736","3280932831","GB","GBR","UNITED KINGDOM" -"3280932832","3280932847","DE","DEU","GERMANY" -"3280932848","3280932976","GB","GBR","UNITED KINGDOM" -"3280932977","3280932983","DE","DEU","GERMANY" -"3280932984","3280932984","GB","GBR","UNITED KINGDOM" -"3280932985","3280932985","DE","DEU","GERMANY" -"3280932986","3280932988","GB","GBR","UNITED KINGDOM" -"3280932989","3280932989","DE","DEU","GERMANY" -"3280932990","3280932990","GB","GBR","UNITED KINGDOM" -"3280932991","3280932991","DE","DEU","GERMANY" -"3280932992","3280933023","GB","GBR","UNITED KINGDOM" -"3280933024","3280933039","DE","DEU","GERMANY" -"3280933040","3280933071","GB","GBR","UNITED KINGDOM" -"3280933072","3280933087","DE","DEU","GERMANY" -"3280933088","3280933103","GB","GBR","UNITED KINGDOM" -"3280933104","3280933119","DE","DEU","GERMANY" -"3280933120","3280933175","GB","GBR","UNITED KINGDOM" -"3280933176","3280933215","DE","DEU","GERMANY" -"3280933216","3280933311","GB","GBR","UNITED KINGDOM" -"3280933312","3280933375","DE","DEU","GERMANY" -"3280933376","3280933439","GB","GBR","UNITED KINGDOM" -"3280933440","3280933451","DE","DEU","GERMANY" -"3280933452","3280933487","GB","GBR","UNITED KINGDOM" -"3280933488","3280933519","DE","DEU","GERMANY" -"3280933520","3280933539","GB","GBR","UNITED KINGDOM" -"3280933540","3280933551","DE","DEU","GERMANY" -"3280933552","3280933567","GB","GBR","UNITED KINGDOM" -"3280933568","3280933599","DE","DEU","GERMANY" -"3280933600","3280933615","GB","GBR","UNITED KINGDOM" -"3280933616","3280933616","DE","DEU","GERMANY" -"3280933617","3280933618","GB","GBR","UNITED KINGDOM" -"3280933619","3280933620","DE","DEU","GERMANY" -"3280933621","3280933631","GB","GBR","UNITED KINGDOM" -"3280933632","3280934399","DE","DEU","GERMANY" -"3280934400","3280934655","GB","GBR","UNITED KINGDOM" -"3280934656","3280934863","DE","DEU","GERMANY" -"3280934864","3280934911","GB","GBR","UNITED KINGDOM" -"3280934912","3280934943","DE","DEU","GERMANY" -"3280934944","3280935007","GB","GBR","UNITED KINGDOM" -"3280935008","3280935015","DE","DEU","GERMANY" -"3280935016","3280935053","GB","GBR","UNITED KINGDOM" -"3280935054","3280935055","DE","DEU","GERMANY" -"3280935056","3280935059","GB","GBR","UNITED KINGDOM" -"3280935060","3280935063","DE","DEU","GERMANY" -"3280935064","3280935119","GB","GBR","UNITED KINGDOM" -"3280935120","3280935127","DE","DEU","GERMANY" -"3280935128","3280935135","GB","GBR","UNITED KINGDOM" -"3280935136","3280935167","DE","DEU","GERMANY" -"3280935168","3280935247","GB","GBR","UNITED KINGDOM" -"3280935248","3280935263","DE","DEU","GERMANY" -"3280935264","3280935344","GB","GBR","UNITED KINGDOM" -"3280935345","3280935345","DE","DEU","GERMANY" -"3280935346","3280935347","GB","GBR","UNITED KINGDOM" -"3280935348","3280935351","DE","DEU","GERMANY" -"3280935352","3280935807","GB","GBR","UNITED KINGDOM" -"3280935808","3280935823","DE","DEU","GERMANY" -"3280935824","3280935856","GB","GBR","UNITED KINGDOM" -"3280935857","3280935858","DE","DEU","GERMANY" -"3280935859","3280935859","GB","GBR","UNITED KINGDOM" -"3280935860","3280935863","DE","DEU","GERMANY" -"3280935864","3280935887","GB","GBR","UNITED KINGDOM" -"3280935888","3280935903","DE","DEU","GERMANY" -"3280935904","3280936039","GB","GBR","UNITED KINGDOM" -"3280936040","3280936048","DE","DEU","GERMANY" -"3280936049","3280936052","GB","GBR","UNITED KINGDOM" -"3280936053","3280936053","DE","DEU","GERMANY" -"3280936054","3280936054","GB","GBR","UNITED KINGDOM" -"3280936055","3280936063","DE","DEU","GERMANY" -"3280936064","3280936143","GB","GBR","UNITED KINGDOM" -"3280936144","3280936159","DE","DEU","GERMANY" -"3280936160","3280936191","GB","GBR","UNITED KINGDOM" -"3280936192","3280936319","DE","DEU","GERMANY" -"3280936320","3280936463","GB","GBR","UNITED KINGDOM" -"3280936464","3280936479","DE","DEU","GERMANY" -"3280936480","3280936495","GB","GBR","UNITED KINGDOM" -"3280936496","3280936498","DE","DEU","GERMANY" -"3280936499","3280936500","GB","GBR","UNITED KINGDOM" -"3280936501","3280936501","DE","DEU","GERMANY" -"3280936502","3280936504","GB","GBR","UNITED KINGDOM" -"3280936505","3280936505","DE","DEU","GERMANY" -"3280936506","3280936506","GB","GBR","UNITED KINGDOM" -"3280936507","3280936510","DE","DEU","GERMANY" -"3280936511","3280936511","GB","GBR","UNITED KINGDOM" -"3280936512","3280936512","DE","DEU","GERMANY" -"3280936513","3280936519","GB","GBR","UNITED KINGDOM" -"3280936520","3280936523","DE","DEU","GERMANY" -"3280936524","3280936559","GB","GBR","UNITED KINGDOM" -"3280936560","3280936567","DE","DEU","GERMANY" -"3280936568","3280936575","GB","GBR","UNITED KINGDOM" -"3280936576","3280936583","DE","DEU","GERMANY" -"3280936584","3280936591","GB","GBR","UNITED KINGDOM" -"3280936592","3280936655","DE","DEU","GERMANY" -"3280936656","3280936999","GB","GBR","UNITED KINGDOM" -"3280937000","3280937003","DE","DEU","GERMANY" -"3280937004","3280937007","GB","GBR","UNITED KINGDOM" -"3280937008","3280937023","DE","DEU","GERMANY" -"3280937024","3280937639","GB","GBR","UNITED KINGDOM" -"3280937640","3280937643","DE","DEU","GERMANY" -"3280937644","3280937919","GB","GBR","UNITED KINGDOM" -"3280937920","3280937935","DE","DEU","GERMANY" -"3280937936","3280937999","GB","GBR","UNITED KINGDOM" -"3280938000","3280938003","DE","DEU","GERMANY" -"3280938004","3280938167","GB","GBR","UNITED KINGDOM" -"3280938168","3280938175","DE","DEU","GERMANY" -"3280938176","3280938207","GB","GBR","UNITED KINGDOM" -"3280938208","3280938223","DE","DEU","GERMANY" -"3280938224","3280938236","GB","GBR","UNITED KINGDOM" -"3280938237","3280938237","DE","DEU","GERMANY" -"3280938238","3280938271","GB","GBR","UNITED KINGDOM" -"3280938272","3280938279","DE","DEU","GERMANY" -"3280938280","3280938283","GB","GBR","UNITED KINGDOM" -"3280938284","3280938284","DE","DEU","GERMANY" -"3280938285","3280938285","GB","GBR","UNITED KINGDOM" -"3280938286","3280938286","DE","DEU","GERMANY" -"3280938287","3280938303","GB","GBR","UNITED KINGDOM" -"3280938304","3280938367","DE","DEU","GERMANY" -"3280938368","3280938400","GB","GBR","UNITED KINGDOM" -"3280938401","3280938401","DE","DEU","GERMANY" -"3280938402","3280938402","GB","GBR","UNITED KINGDOM" -"3280938403","3280938407","DE","DEU","GERMANY" -"3280938408","3280938543","GB","GBR","UNITED KINGDOM" -"3280938544","3280938591","DE","DEU","GERMANY" -"3280938592","3280938619","GB","GBR","UNITED KINGDOM" -"3280938620","3280938623","DE","DEU","GERMANY" -"3280938624","3280938668","GB","GBR","UNITED KINGDOM" -"3280938669","3280938669","DE","DEU","GERMANY" -"3280938670","3280938723","GB","GBR","UNITED KINGDOM" -"3280938724","3280938751","DE","DEU","GERMANY" -"3280938752","3280938767","GB","GBR","UNITED KINGDOM" -"3280938768","3280938815","DE","DEU","GERMANY" -"3280938816","3280938919","GB","GBR","UNITED KINGDOM" -"3280938920","3280938931","DE","DEU","GERMANY" -"3280938932","3280939167","GB","GBR","UNITED KINGDOM" -"3280939168","3280939175","DE","DEU","GERMANY" -"3280939176","3280939179","GB","GBR","UNITED KINGDOM" -"3280939180","3280939183","DE","DEU","GERMANY" -"3280939184","3280939839","GB","GBR","UNITED KINGDOM" -"3280939840","3280939871","DE","DEU","GERMANY" -"3280939872","3280939887","GB","GBR","UNITED KINGDOM" -"3280939888","3280939895","DE","DEU","GERMANY" -"3280939896","3280939896","GB","GBR","UNITED KINGDOM" -"3280939897","3280939900","DE","DEU","GERMANY" -"3280939901","3280939901","GB","GBR","UNITED KINGDOM" -"3280939902","3280939902","DE","DEU","GERMANY" -"3280939903","3280939923","GB","GBR","UNITED KINGDOM" -"3280939924","3280939924","DE","DEU","GERMANY" -"3280939925","3280939925","GB","GBR","UNITED KINGDOM" -"3280939926","3280939926","DE","DEU","GERMANY" -"3280939927","3280939975","GB","GBR","UNITED KINGDOM" -"3280939976","3280939977","DE","DEU","GERMANY" -"3280939978","3280939978","GB","GBR","UNITED KINGDOM" -"3280939979","3280939979","DE","DEU","GERMANY" -"3280939980","3280939983","GB","GBR","UNITED KINGDOM" -"3280939984","3280939999","DE","DEU","GERMANY" -"3280940000","3280940015","GB","GBR","UNITED KINGDOM" -"3280940016","3280940023","DE","DEU","GERMANY" -"3280940024","3280940095","GB","GBR","UNITED KINGDOM" -"3280940096","3280940103","DE","DEU","GERMANY" -"3280940104","3280940132","GB","GBR","UNITED KINGDOM" -"3280940133","3280940135","DE","DEU","GERMANY" -"3280940136","3280940143","GB","GBR","UNITED KINGDOM" -"3280940144","3280940151","DE","DEU","GERMANY" -"3280940152","3280940487","GB","GBR","UNITED KINGDOM" -"3280940488","3280940495","DE","DEU","GERMANY" -"3280940496","3280940503","GB","GBR","UNITED KINGDOM" -"3280940504","3280940511","DE","DEU","GERMANY" -"3280940512","3280940575","GB","GBR","UNITED KINGDOM" -"3280940576","3280940599","DE","DEU","GERMANY" -"3280940600","3280940703","GB","GBR","UNITED KINGDOM" -"3280940704","3280940719","DE","DEU","GERMANY" -"3280940720","3280940735","GB","GBR","UNITED KINGDOM" -"3280940736","3280940767","DE","DEU","GERMANY" -"3280940768","3280940832","GB","GBR","UNITED KINGDOM" -"3280940833","3280940833","DE","DEU","GERMANY" -"3280940834","3280940834","GB","GBR","UNITED KINGDOM" -"3280940835","3280940835","DE","DEU","GERMANY" -"3280940836","3280940836","GB","GBR","UNITED KINGDOM" -"3280940837","3280940837","DE","DEU","GERMANY" -"3280940838","3280940959","GB","GBR","UNITED KINGDOM" -"3280940960","3280940967","DE","DEU","GERMANY" -"3280940968","3280941124","GB","GBR","UNITED KINGDOM" -"3280941125","3280941127","DE","DEU","GERMANY" -"3280941128","3280941183","GB","GBR","UNITED KINGDOM" -"3280941184","3280941199","DE","DEU","GERMANY" -"3280941200","3280941312","GB","GBR","UNITED KINGDOM" -"3280941313","3280941314","DE","DEU","GERMANY" -"3280941315","3280941335","GB","GBR","UNITED KINGDOM" -"3280941336","3280941343","DE","DEU","GERMANY" -"3280941344","3280941359","GB","GBR","UNITED KINGDOM" -"3280941360","3280941367","DE","DEU","GERMANY" -"3280941368","3280941369","GB","GBR","UNITED KINGDOM" -"3280941370","3280941370","DE","DEU","GERMANY" -"3280941371","3280941371","GB","GBR","UNITED KINGDOM" -"3280941372","3280941373","DE","DEU","GERMANY" -"3280941374","3280941423","GB","GBR","UNITED KINGDOM" -"3280941424","3280941439","DE","DEU","GERMANY" -"3280941440","3280941479","GB","GBR","UNITED KINGDOM" -"3280941480","3280941484","DE","DEU","GERMANY" -"3280941485","3280941485","GB","GBR","UNITED KINGDOM" -"3280941486","3280941523","DE","DEU","GERMANY" -"3280941524","3280941527","GB","GBR","UNITED KINGDOM" -"3280941528","3280941551","DE","DEU","GERMANY" -"3280941552","3280941655","GB","GBR","UNITED KINGDOM" -"3280941656","3280941663","DE","DEU","GERMANY" -"3280941664","3280941672","GB","GBR","UNITED KINGDOM" -"3280941673","3280941675","DE","DEU","GERMANY" -"3280941676","3280941887","GB","GBR","UNITED KINGDOM" -"3280941888","3280941888","DE","DEU","GERMANY" -"3280941889","3280941894","GB","GBR","UNITED KINGDOM" -"3280941895","3280941895","DE","DEU","GERMANY" -"3280941896","3280941901","GB","GBR","UNITED KINGDOM" -"3280941902","3280941902","DE","DEU","GERMANY" -"3280941903","3280941912","GB","GBR","UNITED KINGDOM" -"3280941913","3280941919","DE","DEU","GERMANY" -"3280941920","3280941952","GB","GBR","UNITED KINGDOM" -"3280941953","3280941953","DE","DEU","GERMANY" -"3280941954","3280941957","GB","GBR","UNITED KINGDOM" -"3280941958","3280941958","DE","DEU","GERMANY" -"3280941959","3280941964","GB","GBR","UNITED KINGDOM" -"3280941965","3280941967","DE","DEU","GERMANY" -"3280941968","3280941994","GB","GBR","UNITED KINGDOM" -"3280941995","3280941996","DE","DEU","GERMANY" -"3280941997","3280941998","GB","GBR","UNITED KINGDOM" -"3280941999","3280942000","DE","DEU","GERMANY" -"3280942001","3280942008","GB","GBR","UNITED KINGDOM" -"3280942009","3280942009","DE","DEU","GERMANY" -"3280942010","3280942010","GB","GBR","UNITED KINGDOM" -"3280942011","3280942011","DE","DEU","GERMANY" -"3280942012","3280942031","GB","GBR","UNITED KINGDOM" -"3280942032","3280942047","DE","DEU","GERMANY" -"3280942048","3280942335","GB","GBR","UNITED KINGDOM" -"3280942336","3280942351","DE","DEU","GERMANY" -"3280942352","3280942383","GB","GBR","UNITED KINGDOM" -"3280942384","3280942399","DE","DEU","GERMANY" -"3280942400","3280942431","GB","GBR","UNITED KINGDOM" -"3280942432","3280942471","DE","DEU","GERMANY" -"3280942472","3280943103","GB","GBR","UNITED KINGDOM" -"3280943104","3280943359","DE","DEU","GERMANY" -"3280943360","3280943615","GB","GBR","UNITED KINGDOM" -"3280943616","3280943679","DE","DEU","GERMANY" -"3280943680","3280943711","GB","GBR","UNITED KINGDOM" -"3280943712","3280943743","DE","DEU","GERMANY" -"3280943744","3280943935","GB","GBR","UNITED KINGDOM" -"3280943936","3280943943","DE","DEU","GERMANY" -"3280943944","3280943967","GB","GBR","UNITED KINGDOM" -"3280943968","3280943983","DE","DEU","GERMANY" -"3280943984","3280944191","GB","GBR","UNITED KINGDOM" -"3280944192","3280944199","DE","DEU","GERMANY" -"3280944200","3280944215","GB","GBR","UNITED KINGDOM" -"3280944216","3280944219","DE","DEU","GERMANY" -"3280944220","3280944223","GB","GBR","UNITED KINGDOM" -"3280944224","3280944225","DE","DEU","GERMANY" -"3280944226","3280944243","GB","GBR","UNITED KINGDOM" -"3280944244","3280944247","DE","DEU","GERMANY" -"3280944248","3280944447","GB","GBR","UNITED KINGDOM" -"3280944448","3280944527","DE","DEU","GERMANY" -"3280944528","3280944543","GB","GBR","UNITED KINGDOM" -"3280944544","3280944575","DE","DEU","GERMANY" -"3280944576","3280944591","GB","GBR","UNITED KINGDOM" -"3280944592","3280944607","DE","DEU","GERMANY" -"3280944608","3280944623","GB","GBR","UNITED KINGDOM" -"3280944624","3280944639","DE","DEU","GERMANY" -"3280944640","3280945186","GB","GBR","UNITED KINGDOM" -"3280945187","3280945189","DE","DEU","GERMANY" -"3280945190","3280945312","GB","GBR","UNITED KINGDOM" -"3280945313","3280945313","DE","DEU","GERMANY" -"3280945314","3280945315","GB","GBR","UNITED KINGDOM" -"3280945316","3280945317","DE","DEU","GERMANY" -"3280945318","3280945319","GB","GBR","UNITED KINGDOM" -"3280945320","3280945323","DE","DEU","GERMANY" -"3280945324","3280945327","GB","GBR","UNITED KINGDOM" -"3280945328","3280945335","DE","DEU","GERMANY" -"3280945336","3280945439","GB","GBR","UNITED KINGDOM" -"3280945440","3280945503","DE","DEU","GERMANY" -"3280945504","3280945535","GB","GBR","UNITED KINGDOM" -"3280945536","3280945551","DE","DEU","GERMANY" -"3280945552","3280945679","GB","GBR","UNITED KINGDOM" -"3280945680","3280945695","DE","DEU","GERMANY" -"3280945696","3280945715","GB","GBR","UNITED KINGDOM" -"3280945716","3280945719","DE","DEU","GERMANY" -"3280945720","3280945743","GB","GBR","UNITED KINGDOM" -"3280945744","3280945751","DE","DEU","GERMANY" -"3280945752","3280945759","GB","GBR","UNITED KINGDOM" -"3280945760","3280945767","DE","DEU","GERMANY" -"3280945768","3280945776","GB","GBR","UNITED KINGDOM" -"3280945777","3280945777","DE","DEU","GERMANY" -"3280945778","3280945812","GB","GBR","UNITED KINGDOM" -"3280945813","3280945814","DE","DEU","GERMANY" -"3280945815","3280945817","GB","GBR","UNITED KINGDOM" -"3280945818","3280945818","DE","DEU","GERMANY" -"3280945819","3280945819","GB","GBR","UNITED KINGDOM" -"3280945820","3280945820","DE","DEU","GERMANY" -"3280945821","3280945821","GB","GBR","UNITED KINGDOM" -"3280945822","3280945823","DE","DEU","GERMANY" -"3280945824","3280945835","GB","GBR","UNITED KINGDOM" -"3280945836","3280945840","DE","DEU","GERMANY" -"3280945841","3280945842","GB","GBR","UNITED KINGDOM" -"3280945843","3280945843","DE","DEU","GERMANY" -"3280945844","3280945847","GB","GBR","UNITED KINGDOM" -"3280945848","3280945853","DE","DEU","GERMANY" -"3280945854","3280945855","GB","GBR","UNITED KINGDOM" -"3280945856","3280945919","DE","DEU","GERMANY" -"3280945920","3280946721","GB","GBR","UNITED KINGDOM" -"3280946722","3280946722","DE","DEU","GERMANY" -"3280946723","3280946723","GB","GBR","UNITED KINGDOM" -"3280946724","3280946724","DE","DEU","GERMANY" -"3280946725","3280948623","GB","GBR","UNITED KINGDOM" -"3280948624","3280948639","DE","DEU","GERMANY" -"3280948640","3280948719","GB","GBR","UNITED KINGDOM" -"3280948720","3280948735","DE","DEU","GERMANY" -"3280948736","3280949503","GB","GBR","UNITED KINGDOM" -"3280949504","3280950015","DE","DEU","GERMANY" -"3280950016","3280951039","GB","GBR","UNITED KINGDOM" -"3280951040","3280951807","DE","DEU","GERMANY" -"3280951808","3280952327","GB","GBR","UNITED KINGDOM" -"3280952328","3280952335","DE","DEU","GERMANY" -"3280952336","3280953104","GB","GBR","UNITED KINGDOM" -"3280953105","3280953135","DE","DEU","GERMANY" -"3280953136","3280953343","GB","GBR","UNITED KINGDOM" -"3280953344","3280953371","DE","DEU","GERMANY" -"3280953372","3280953375","GB","GBR","UNITED KINGDOM" -"3280953376","3280953383","DE","DEU","GERMANY" -"3280953384","3280953423","GB","GBR","UNITED KINGDOM" -"3280953424","3280953431","DE","DEU","GERMANY" -"3280953432","3280953443","GB","GBR","UNITED KINGDOM" -"3280953444","3280953444","DE","DEU","GERMANY" -"3280953445","3280953451","GB","GBR","UNITED KINGDOM" -"3280953452","3280953454","DE","DEU","GERMANY" -"3280953455","3280953455","GB","GBR","UNITED KINGDOM" -"3280953456","3280953463","DE","DEU","GERMANY" -"3280953464","3280953471","GB","GBR","UNITED KINGDOM" -"3280953472","3280953475","DE","DEU","GERMANY" -"3280953476","3280953479","GB","GBR","UNITED KINGDOM" -"3280953480","3280953487","DE","DEU","GERMANY" -"3280953488","3280953491","GB","GBR","UNITED KINGDOM" -"3280953492","3280953492","DE","DEU","GERMANY" -"3280953493","3280953493","GB","GBR","UNITED KINGDOM" -"3280953494","3280953494","DE","DEU","GERMANY" -"3280953495","3280953495","GB","GBR","UNITED KINGDOM" -"3280953496","3280953503","DE","DEU","GERMANY" -"3280953504","3280953519","GB","GBR","UNITED KINGDOM" -"3280953520","3280953527","DE","DEU","GERMANY" -"3280953528","3280953599","GB","GBR","UNITED KINGDOM" -"3280953600","3280953663","DE","DEU","GERMANY" -"3280953664","3280953807","GB","GBR","UNITED KINGDOM" -"3280953808","3280953823","DE","DEU","GERMANY" -"3280953824","3280954063","GB","GBR","UNITED KINGDOM" -"3280954064","3280954079","DE","DEU","GERMANY" -"3280954080","3280954119","GB","GBR","UNITED KINGDOM" -"3280954120","3280954127","DE","DEU","GERMANY" -"3280954128","3280954367","GB","GBR","UNITED KINGDOM" -"3280954368","3280954495","DE","DEU","GERMANY" -"3280954496","3280955391","GB","GBR","UNITED KINGDOM" -"3280955392","3280956927","DE","DEU","GERMANY" -"3280956928","3280956991","GB","GBR","UNITED KINGDOM" -"3280956992","3280957007","DE","DEU","GERMANY" -"3280957008","3280957015","GB","GBR","UNITED KINGDOM" -"3280957016","3280957019","DE","DEU","GERMANY" -"3280957020","3280957151","GB","GBR","UNITED KINGDOM" -"3280957152","3280957167","DE","DEU","GERMANY" -"3280957168","3280957183","GB","GBR","UNITED KINGDOM" -"3280957184","3280957199","DE","DEU","GERMANY" -"3280957200","3280957215","GB","GBR","UNITED KINGDOM" -"3280957216","3280957231","DE","DEU","GERMANY" -"3280957232","3280957247","GB","GBR","UNITED KINGDOM" -"3280957248","3280957249","DE","DEU","GERMANY" -"3280957250","3280957255","GB","GBR","UNITED KINGDOM" -"3280957256","3280957263","DE","DEU","GERMANY" -"3280957264","3280957311","GB","GBR","UNITED KINGDOM" -"3280957312","3280957695","DE","DEU","GERMANY" -"3280957696","3280957743","GB","GBR","UNITED KINGDOM" -"3280957744","3280957791","DE","DEU","GERMANY" -"3280957792","3280957823","GB","GBR","UNITED KINGDOM" -"3280957824","3280957839","DE","DEU","GERMANY" -"3280957840","3280957871","GB","GBR","UNITED KINGDOM" -"3280957872","3280957887","DE","DEU","GERMANY" -"3280957888","3280957935","GB","GBR","UNITED KINGDOM" -"3280957936","3280957943","DE","DEU","GERMANY" -"3280957944","3280958207","GB","GBR","UNITED KINGDOM" -"3280958208","3280958223","DE","DEU","GERMANY" -"3280958224","3280958287","GB","GBR","UNITED KINGDOM" -"3280958288","3280958335","DE","DEU","GERMANY" -"3280958336","3280958343","GB","GBR","UNITED KINGDOM" -"3280958344","3280958350","DE","DEU","GERMANY" -"3280958351","3280958591","GB","GBR","UNITED KINGDOM" -"3280958592","3280958599","DE","DEU","GERMANY" -"3280958600","3280958607","GB","GBR","UNITED KINGDOM" -"3280958608","3280958615","DE","DEU","GERMANY" -"3280958616","3280958655","GB","GBR","UNITED KINGDOM" -"3280958656","3280958663","DE","DEU","GERMANY" -"3280958664","3280958975","GB","GBR","UNITED KINGDOM" -"3280958976","3280959231","DE","DEU","GERMANY" -"3280959232","3280959487","GB","GBR","UNITED KINGDOM" -"3280959488","3280959711","DE","DEU","GERMANY" -"3280959712","3280959743","GB","GBR","UNITED KINGDOM" -"3280959744","3280959935","DE","DEU","GERMANY" -"3280959936","3280959999","GB","GBR","UNITED KINGDOM" -"3280960000","3280960039","DE","DEU","GERMANY" -"3280960040","3280960255","GB","GBR","UNITED KINGDOM" -"3280960256","3280960287","DE","DEU","GERMANY" -"3280960288","3280960511","GB","GBR","UNITED KINGDOM" -"3280960512","3280961279","DE","DEU","GERMANY" -"3280961280","3280961791","GB","GBR","UNITED KINGDOM" -"3280961792","3280961807","DE","DEU","GERMANY" -"3280961808","3280961855","GB","GBR","UNITED KINGDOM" -"3280961856","3280961863","DE","DEU","GERMANY" -"3280961864","3280961869","GB","GBR","UNITED KINGDOM" -"3280961870","3280961871","DE","DEU","GERMANY" -"3280961872","3280961887","GB","GBR","UNITED KINGDOM" -"3280961888","3280961919","DE","DEU","GERMANY" -"3280961920","3280962111","GB","GBR","UNITED KINGDOM" -"3280962112","3280962175","DE","DEU","GERMANY" -"3280962176","3280963199","GB","GBR","UNITED KINGDOM" -"3280963200","3280963263","DE","DEU","GERMANY" -"3280963264","3280963303","GB","GBR","UNITED KINGDOM" -"3280963304","3280963311","DE","DEU","GERMANY" -"3280963312","3280963327","GB","GBR","UNITED KINGDOM" -"3280963328","3280963583","DE","DEU","GERMANY" -"3280963584","3280963590","GB","GBR","UNITED KINGDOM" -"3280963591","3280963591","DE","DEU","GERMANY" -"3280963592","3280963593","GB","GBR","UNITED KINGDOM" -"3280963594","3280963595","DE","DEU","GERMANY" -"3280963596","3280963603","GB","GBR","UNITED KINGDOM" -"3280963604","3280963604","DE","DEU","GERMANY" -"3280963605","3280963615","GB","GBR","UNITED KINGDOM" -"3280963616","3280963616","DE","DEU","GERMANY" -"3280963617","3280963623","GB","GBR","UNITED KINGDOM" -"3280963624","3280963631","DE","DEU","GERMANY" -"3280963632","3280963711","GB","GBR","UNITED KINGDOM" -"3280963712","3280963719","DE","DEU","GERMANY" -"3280963720","3280963727","GB","GBR","UNITED KINGDOM" -"3280963728","3280963735","DE","DEU","GERMANY" -"3280963736","3280963751","GB","GBR","UNITED KINGDOM" -"3280963752","3280963767","DE","DEU","GERMANY" -"3280963768","3280963775","GB","GBR","UNITED KINGDOM" -"3280963776","3280963791","DE","DEU","GERMANY" -"3280963792","3280963823","GB","GBR","UNITED KINGDOM" -"3280963824","3280963839","DE","DEU","GERMANY" -"3280963840","3280964095","GB","GBR","UNITED KINGDOM" -"3280964096","3280964351","DE","DEU","GERMANY" -"3280964352","3280965631","GB","GBR","UNITED KINGDOM" -"3280965632","3280965887","DE","DEU","GERMANY" -"3280965888","3280965951","GB","GBR","UNITED KINGDOM" -"3280965952","3280965967","DE","DEU","GERMANY" -"3280965968","3280966015","GB","GBR","UNITED KINGDOM" -"3280966016","3280966079","DE","DEU","GERMANY" -"3280966080","3280966127","GB","GBR","UNITED KINGDOM" -"3280966128","3280966143","DE","DEU","GERMANY" -"3280966144","3280967167","GB","GBR","UNITED KINGDOM" -"3280967168","3280967455","DE","DEU","GERMANY" -"3280967456","3280967535","GB","GBR","UNITED KINGDOM" -"3280967536","3280967551","DE","DEU","GERMANY" -"3280967552","3280968447","GB","GBR","UNITED KINGDOM" -"3280968448","3280968703","DE","DEU","GERMANY" -"3280968704","3280969039","GB","GBR","UNITED KINGDOM" -"3280969040","3280969087","DE","DEU","GERMANY" -"3280969088","3280969599","GB","GBR","UNITED KINGDOM" -"3280969600","3280969603","DE","DEU","GERMANY" -"3280969604","3280969631","GB","GBR","UNITED KINGDOM" -"3280969632","3280969647","DE","DEU","GERMANY" -"3280969648","3280970239","GB","GBR","UNITED KINGDOM" -"3280970240","3280970367","NL","NLD","NETHERLANDS" -"3280970368","3280970399","DE","DEU","GERMANY" -"3280970400","3280970431","GB","GBR","UNITED KINGDOM" -"3280970432","3280970463","DE","DEU","GERMANY" -"3280970464","3280970507","GB","GBR","UNITED KINGDOM" -"3280970508","3280970511","DE","DEU","GERMANY" -"3280970512","3280970575","GB","GBR","UNITED KINGDOM" -"3280970576","3280970579","DE","DEU","GERMANY" -"3280970580","3280970671","GB","GBR","UNITED KINGDOM" -"3280970672","3280970687","DE","DEU","GERMANY" -"3280970688","3280970775","GB","GBR","UNITED KINGDOM" -"3280970776","3280970783","DE","DEU","GERMANY" -"3280970784","3280970799","GB","GBR","UNITED KINGDOM" -"3280970800","3280970815","DE","DEU","GERMANY" -"3280970816","3280970847","GB","GBR","UNITED KINGDOM" -"3280970848","3280970863","DE","DEU","GERMANY" -"3280970864","3280970975","GB","GBR","UNITED KINGDOM" -"3280970976","3280970991","DE","DEU","GERMANY" -"3280970992","3280971039","GB","GBR","UNITED KINGDOM" -"3280971040","3280971055","DE","DEU","GERMANY" -"3280971056","3280971295","GB","GBR","UNITED KINGDOM" -"3280971296","3280971327","DE","DEU","GERMANY" -"3280971328","3280971343","GB","GBR","UNITED KINGDOM" -"3280971344","3280971351","DE","DEU","GERMANY" -"3280971352","3280971359","GB","GBR","UNITED KINGDOM" -"3280971360","3280971391","DE","DEU","GERMANY" -"3280971392","3280971599","GB","GBR","UNITED KINGDOM" -"3280971600","3280971615","DE","DEU","GERMANY" -"3280971616","3280971647","GB","GBR","UNITED KINGDOM" -"3280971648","3280971743","DE","DEU","GERMANY" -"3280971744","3280971799","GB","GBR","UNITED KINGDOM" -"3280971800","3280971807","DE","DEU","GERMANY" -"3280971808","3280971815","GB","GBR","UNITED KINGDOM" -"3280971816","3280971819","DE","DEU","GERMANY" -"3280971820","3280971823","GB","GBR","UNITED KINGDOM" -"3280971824","3280971839","DE","DEU","GERMANY" -"3280971840","3280972031","GB","GBR","UNITED KINGDOM" -"3280972032","3280972063","DE","DEU","GERMANY" -"3280972064","3280972071","GB","GBR","UNITED KINGDOM" -"3280972072","3280972079","DE","DEU","GERMANY" -"3280972080","3280972319","GB","GBR","UNITED KINGDOM" -"3280972320","3280972335","DE","DEU","GERMANY" -"3280972336","3280972351","GB","GBR","UNITED KINGDOM" -"3280972352","3280972415","DE","DEU","GERMANY" -"3280972416","3280974079","GB","GBR","UNITED KINGDOM" -"3280974080","3280974335","DE","DEU","GERMANY" -"3280974336","3280974591","GB","GBR","UNITED KINGDOM" -"3280974592","3280974847","DE","DEU","GERMANY" -"3280974848","3280976695","GB","GBR","UNITED KINGDOM" -"3280976696","3280976719","DE","DEU","GERMANY" -"3280976720","3280976831","GB","GBR","UNITED KINGDOM" -"3280976832","3280976847","DE","DEU","GERMANY" -"3280976848","3280976895","GB","GBR","UNITED KINGDOM" -"3280976896","3280977152","DE","DEU","GERMANY" -"3280977153","3280977439","GB","GBR","UNITED KINGDOM" -"3280977440","3280977479","DE","DEU","GERMANY" -"3280977480","3280977487","GB","GBR","UNITED KINGDOM" -"3280977488","3280977495","DE","DEU","GERMANY" -"3280977496","3280977935","GB","GBR","UNITED KINGDOM" -"3280977936","3280977936","DE","DEU","GERMANY" -"3280977937","3280977937","GB","GBR","UNITED KINGDOM" -"3280977938","3280977938","DE","DEU","GERMANY" -"3280977939","3280977941","GB","GBR","UNITED KINGDOM" -"3280977942","3280977942","DE","DEU","GERMANY" -"3280977943","3280977947","GB","GBR","UNITED KINGDOM" -"3280977948","3280977959","DE","DEU","GERMANY" -"3280977960","3280977967","GB","GBR","UNITED KINGDOM" -"3280977968","3280977969","DE","DEU","GERMANY" -"3280977970","3280977974","GB","GBR","UNITED KINGDOM" -"3280977975","3280977975","DE","DEU","GERMANY" -"3280977976","3280977983","GB","GBR","UNITED KINGDOM" -"3280977984","3280978007","DE","DEU","GERMANY" -"3280978008","3280978063","GB","GBR","UNITED KINGDOM" -"3280978064","3280978079","DE","DEU","GERMANY" -"3280978080","3280978127","GB","GBR","UNITED KINGDOM" -"3280978128","3280978143","DE","DEU","GERMANY" -"3280978144","3280978175","GB","GBR","UNITED KINGDOM" -"3280978176","3280978191","DE","DEU","GERMANY" -"3280978192","3280978225","GB","GBR","UNITED KINGDOM" -"3280978226","3280978226","DE","DEU","GERMANY" -"3280978227","3280978231","GB","GBR","UNITED KINGDOM" -"3280978232","3280978239","DE","DEU","GERMANY" -"3280978240","3280978271","GB","GBR","UNITED KINGDOM" -"3280978272","3280978279","DE","DEU","GERMANY" -"3280978280","3280978335","GB","GBR","UNITED KINGDOM" -"3280978336","3280978367","DE","DEU","GERMANY" -"3280978368","3280978383","GB","GBR","UNITED KINGDOM" -"3280978384","3280978415","DE","DEU","GERMANY" -"3280978416","3280978433","GB","GBR","UNITED KINGDOM" -"3280978434","3280978441","DE","DEU","GERMANY" -"3280978442","3280978442","GB","GBR","UNITED KINGDOM" -"3280978443","3280978443","DE","DEU","GERMANY" -"3280978444","3280978445","GB","GBR","UNITED KINGDOM" -"3280978446","3280978479","DE","DEU","GERMANY" -"3280978480","3280978503","GB","GBR","UNITED KINGDOM" -"3280978504","3280978507","DE","DEU","GERMANY" -"3280978508","3280978543","GB","GBR","UNITED KINGDOM" -"3280978544","3280978552","DE","DEU","GERMANY" -"3280978553","3280978575","GB","GBR","UNITED KINGDOM" -"3280978576","3280978591","DE","DEU","GERMANY" -"3280978592","3280978783","GB","GBR","UNITED KINGDOM" -"3280978784","3280978799","DE","DEU","GERMANY" -"3280978800","3280978847","GB","GBR","UNITED KINGDOM" -"3280978848","3280978863","DE","DEU","GERMANY" -"3280978864","3280978887","GB","GBR","UNITED KINGDOM" -"3280978888","3280978891","DE","DEU","GERMANY" -"3280978892","3280979003","GB","GBR","UNITED KINGDOM" -"3280979004","3280979007","DE","DEU","GERMANY" -"3280979008","3280979023","GB","GBR","UNITED KINGDOM" -"3280979024","3280979044","DE","DEU","GERMANY" -"3280979045","3280979049","GB","GBR","UNITED KINGDOM" -"3280979050","3280979051","DE","DEU","GERMANY" -"3280979052","3280979052","GB","GBR","UNITED KINGDOM" -"3280979053","3280979053","DE","DEU","GERMANY" -"3280979054","3280979103","GB","GBR","UNITED KINGDOM" -"3280979104","3280979111","DE","DEU","GERMANY" -"3280979112","3280979141","GB","GBR","UNITED KINGDOM" -"3280979142","3280979142","DE","DEU","GERMANY" -"3280979143","3280979143","GB","GBR","UNITED KINGDOM" -"3280979144","3280979147","DE","DEU","GERMANY" -"3280979148","3280979151","GB","GBR","UNITED KINGDOM" -"3280979152","3280979159","DE","DEU","GERMANY" -"3280979160","3280979167","GB","GBR","UNITED KINGDOM" -"3280979168","3280979183","DE","DEU","GERMANY" -"3280979184","3280979199","GB","GBR","UNITED KINGDOM" -"3280979200","3280979215","DE","DEU","GERMANY" -"3280979216","3280979231","GB","GBR","UNITED KINGDOM" -"3280979232","3280979247","DE","DEU","GERMANY" -"3280979248","3280979311","GB","GBR","UNITED KINGDOM" -"3280979312","3280979327","DE","DEU","GERMANY" -"3280979328","3280979344","GB","GBR","UNITED KINGDOM" -"3280979345","3280979345","DE","DEU","GERMANY" -"3280979346","3280979348","GB","GBR","UNITED KINGDOM" -"3280979349","3280979350","DE","DEU","GERMANY" -"3280979351","3280979363","GB","GBR","UNITED KINGDOM" -"3280979364","3280979364","DE","DEU","GERMANY" -"3280979365","3280979419","GB","GBR","UNITED KINGDOM" -"3280979420","3280979420","DE","DEU","GERMANY" -"3280979421","3280979431","GB","GBR","UNITED KINGDOM" -"3280979432","3280979435","DE","DEU","GERMANY" -"3280979436","3280979471","GB","GBR","UNITED KINGDOM" -"3280979472","3280979479","DE","DEU","GERMANY" -"3280979480","3280979503","GB","GBR","UNITED KINGDOM" -"3280979504","3280979519","DE","DEU","GERMANY" -"3280979520","3280979527","GB","GBR","UNITED KINGDOM" -"3280979528","3280979535","DE","DEU","GERMANY" -"3280979536","3280979555","GB","GBR","UNITED KINGDOM" -"3280979556","3280979559","DE","DEU","GERMANY" -"3280979560","3280979567","GB","GBR","UNITED KINGDOM" -"3280979568","3280979568","DE","DEU","GERMANY" -"3280979569","3280979569","GB","GBR","UNITED KINGDOM" -"3280979570","3280979571","DE","DEU","GERMANY" -"3280979572","3280979573","GB","GBR","UNITED KINGDOM" -"3280979574","3280979574","DE","DEU","GERMANY" -"3280979575","3280979576","GB","GBR","UNITED KINGDOM" -"3280979577","3280979577","DE","DEU","GERMANY" -"3280979578","3280979631","GB","GBR","UNITED KINGDOM" -"3280979632","3280979647","DE","DEU","GERMANY" -"3280979648","3280979679","GB","GBR","UNITED KINGDOM" -"3280979680","3280979695","DE","DEU","GERMANY" -"3280979696","3280979711","GB","GBR","UNITED KINGDOM" -"3280979712","3280979743","DE","DEU","GERMANY" -"3280979744","3280979839","GB","GBR","UNITED KINGDOM" -"3280979840","3280979975","DE","DEU","GERMANY" -"3280979976","3280980031","GB","GBR","UNITED KINGDOM" -"3280980032","3280980039","DE","DEU","GERMANY" -"3280980040","3280980047","GB","GBR","UNITED KINGDOM" -"3280980048","3280980071","DE","DEU","GERMANY" -"3280980072","3280980079","GB","GBR","UNITED KINGDOM" -"3280980080","3280980081","DE","DEU","GERMANY" -"3280980082","3280980085","GB","GBR","UNITED KINGDOM" -"3280980086","3280980086","DE","DEU","GERMANY" -"3280980087","3280980089","GB","GBR","UNITED KINGDOM" -"3280980090","3280980090","DE","DEU","GERMANY" -"3280980091","3280980092","GB","GBR","UNITED KINGDOM" -"3280980093","3280980093","DE","DEU","GERMANY" -"3280980094","3280980094","GB","GBR","UNITED KINGDOM" -"3280980095","3280980095","DE","DEU","GERMANY" -"3280980096","3280980103","GB","GBR","UNITED KINGDOM" -"3280980104","3280980111","DE","DEU","GERMANY" -"3280980112","3280980135","GB","GBR","UNITED KINGDOM" -"3280980136","3280980143","DE","DEU","GERMANY" -"3280980144","3280980147","GB","GBR","UNITED KINGDOM" -"3280980148","3280980151","DE","DEU","GERMANY" -"3280980152","3280980168","GB","GBR","UNITED KINGDOM" -"3280980169","3280980170","DE","DEU","GERMANY" -"3280980171","3280980175","GB","GBR","UNITED KINGDOM" -"3280980176","3280980183","DE","DEU","GERMANY" -"3280980184","3280980191","GB","GBR","UNITED KINGDOM" -"3280980192","3280980199","DE","DEU","GERMANY" -"3280980200","3280980298","GB","GBR","UNITED KINGDOM" -"3280980299","3280980299","DE","DEU","GERMANY" -"3280980300","3280980300","GB","GBR","UNITED KINGDOM" -"3280980301","3280980304","DE","DEU","GERMANY" -"3280980305","3280980305","GB","GBR","UNITED KINGDOM" -"3280980306","3280980307","DE","DEU","GERMANY" -"3280980308","3280980310","GB","GBR","UNITED KINGDOM" -"3280980311","3280980311","DE","DEU","GERMANY" -"3280980312","3280980312","GB","GBR","UNITED KINGDOM" -"3280980313","3280980313","DE","DEU","GERMANY" -"3280980314","3280980351","GB","GBR","UNITED KINGDOM" -"3280980352","3280980367","DE","DEU","GERMANY" -"3280980368","3280980383","GB","GBR","UNITED KINGDOM" -"3280980384","3280980399","DE","DEU","GERMANY" -"3280980400","3280980471","GB","GBR","UNITED KINGDOM" -"3280980472","3280980479","DE","DEU","GERMANY" -"3280980480","3280980503","GB","GBR","UNITED KINGDOM" -"3280980504","3280980508","DE","DEU","GERMANY" -"3280980509","3280980592","GB","GBR","UNITED KINGDOM" -"3280980593","3280980594","DE","DEU","GERMANY" -"3280980595","3280980597","GB","GBR","UNITED KINGDOM" -"3280980598","3280980598","DE","DEU","GERMANY" -"3280980599","3280980601","GB","GBR","UNITED KINGDOM" -"3280980602","3280980602","DE","DEU","GERMANY" -"3280980603","3280980603","GB","GBR","UNITED KINGDOM" -"3280980604","3280980606","DE","DEU","GERMANY" -"3280980607","3280980639","GB","GBR","UNITED KINGDOM" -"3280980640","3280980647","DE","DEU","GERMANY" -"3280980648","3280980683","GB","GBR","UNITED KINGDOM" -"3280980684","3280980703","DE","DEU","GERMANY" -"3280980704","3280980759","GB","GBR","UNITED KINGDOM" -"3280980760","3280980767","DE","DEU","GERMANY" -"3280980768","3280980823","GB","GBR","UNITED KINGDOM" -"3280980824","3280980827","DE","DEU","GERMANY" -"3280980828","3280980831","GB","GBR","UNITED KINGDOM" -"3280980832","3280980847","DE","DEU","GERMANY" -"3280980848","3280980927","GB","GBR","UNITED KINGDOM" -"3280980928","3280980991","DE","DEU","GERMANY" -"3280980992","3280980993","GB","GBR","UNITED KINGDOM" -"3280980994","3280980996","DE","DEU","GERMANY" -"3280980997","3280981000","GB","GBR","UNITED KINGDOM" -"3280981001","3280981001","DE","DEU","GERMANY" -"3280981002","3280981039","GB","GBR","UNITED KINGDOM" -"3280981040","3280981055","DE","DEU","GERMANY" -"3280981056","3280981087","GB","GBR","UNITED KINGDOM" -"3280981088","3280981111","DE","DEU","GERMANY" -"3280981112","3280981135","GB","GBR","UNITED KINGDOM" -"3280981136","3280981151","DE","DEU","GERMANY" -"3280981152","3280981179","GB","GBR","UNITED KINGDOM" -"3280981180","3280981183","DE","DEU","GERMANY" -"3280981184","3280981199","GB","GBR","UNITED KINGDOM" -"3280981200","3280981207","DE","DEU","GERMANY" -"3280981208","3280981215","GB","GBR","UNITED KINGDOM" -"3280981216","3280981231","DE","DEU","GERMANY" -"3280981232","3280981247","GB","GBR","UNITED KINGDOM" -"3280981248","3280981375","DE","DEU","GERMANY" -"3280981376","3280981407","GB","GBR","UNITED KINGDOM" -"3280981408","3280981415","DE","DEU","GERMANY" -"3280981416","3280981487","GB","GBR","UNITED KINGDOM" -"3280981488","3280981503","DE","DEU","GERMANY" -"3280981504","3280981555","GB","GBR","UNITED KINGDOM" -"3280981556","3280981556","DE","DEU","GERMANY" -"3280981557","3280981557","GB","GBR","UNITED KINGDOM" -"3280981558","3280981558","DE","DEU","GERMANY" -"3280981559","3280981559","GB","GBR","UNITED KINGDOM" -"3280981560","3280981561","DE","DEU","GERMANY" -"3280981562","3280981599","GB","GBR","UNITED KINGDOM" -"3280981600","3280981615","DE","DEU","GERMANY" -"3280981616","3280981623","GB","GBR","UNITED KINGDOM" -"3280981624","3280981647","DE","DEU","GERMANY" -"3280981648","3280981983","GB","GBR","UNITED KINGDOM" -"3280981984","3280981999","DE","DEU","GERMANY" -"3280982000","3280982015","GB","GBR","UNITED KINGDOM" -"3280982016","3280982023","DE","DEU","GERMANY" -"3280982024","3280982047","GB","GBR","UNITED KINGDOM" -"3280982048","3280982051","DE","DEU","GERMANY" -"3280982052","3280982052","GB","GBR","UNITED KINGDOM" -"3280982053","3280982053","DE","DEU","GERMANY" -"3280982054","3280982079","GB","GBR","UNITED KINGDOM" -"3280982080","3280982095","DE","DEU","GERMANY" -"3280982096","3280982167","GB","GBR","UNITED KINGDOM" -"3280982168","3280982175","DE","DEU","GERMANY" -"3280982176","3280982239","GB","GBR","UNITED KINGDOM" -"3280982240","3280982263","DE","DEU","GERMANY" -"3280982264","3280982269","GB","GBR","UNITED KINGDOM" -"3280982270","3280982270","DE","DEU","GERMANY" -"3280982271","3280982271","GB","GBR","UNITED KINGDOM" -"3280982272","3280982287","DE","DEU","GERMANY" -"3280982288","3280982399","GB","GBR","UNITED KINGDOM" -"3280982400","3280982431","DE","DEU","GERMANY" -"3280982432","3280982528","GB","GBR","UNITED KINGDOM" -"3280982529","3280982529","DE","DEU","GERMANY" -"3280982530","3280982530","GB","GBR","UNITED KINGDOM" -"3280982531","3280982531","DE","DEU","GERMANY" -"3280982532","3280982536","GB","GBR","UNITED KINGDOM" -"3280982537","3280982537","DE","DEU","GERMANY" -"3280982538","3280982580","GB","GBR","UNITED KINGDOM" -"3280982581","3280982582","DE","DEU","GERMANY" -"3280982583","3280982607","GB","GBR","UNITED KINGDOM" -"3280982608","3280982671","DE","DEU","GERMANY" -"3280982672","3280982676","GB","GBR","UNITED KINGDOM" -"3280982677","3280982677","DE","DEU","GERMANY" -"3280982678","3280982678","GB","GBR","UNITED KINGDOM" -"3280982679","3280982679","DE","DEU","GERMANY" -"3280982680","3280982680","GB","GBR","UNITED KINGDOM" -"3280982681","3280982686","DE","DEU","GERMANY" -"3280982687","3280982767","GB","GBR","UNITED KINGDOM" -"3280982768","3280982783","DE","DEU","GERMANY" -"3280982784","3280982799","GB","GBR","UNITED KINGDOM" -"3280982800","3280982815","DE","DEU","GERMANY" -"3280982816","3280982863","GB","GBR","UNITED KINGDOM" -"3280982864","3280982864","DE","DEU","GERMANY" -"3280982865","3280982866","GB","GBR","UNITED KINGDOM" -"3280982867","3280982867","DE","DEU","GERMANY" -"3280982868","3280982879","GB","GBR","UNITED KINGDOM" -"3280982880","3280982895","DE","DEU","GERMANY" -"3280982896","3280982911","GB","GBR","UNITED KINGDOM" -"3280982912","3280982931","DE","DEU","GERMANY" -"3280982932","3280982943","GB","GBR","UNITED KINGDOM" -"3280982944","3280982975","DE","DEU","GERMANY" -"3280982976","3280983072","GB","GBR","UNITED KINGDOM" -"3280983073","3280983073","DE","DEU","GERMANY" -"3280983074","3280983103","GB","GBR","UNITED KINGDOM" -"3280983104","3280983104","DE","DEU","GERMANY" -"3280983105","3280983112","GB","GBR","UNITED KINGDOM" -"3280983113","3280983113","DE","DEU","GERMANY" -"3280983114","3280983114","GB","GBR","UNITED KINGDOM" -"3280983115","3280983183","DE","DEU","GERMANY" -"3280983184","3280983199","GB","GBR","UNITED KINGDOM" -"3280983200","3280983215","DE","DEU","GERMANY" -"3280983216","3280983343","GB","GBR","UNITED KINGDOM" -"3280983344","3280983375","DE","DEU","GERMANY" -"3280983376","3280983391","GB","GBR","UNITED KINGDOM" -"3280983392","3280983407","DE","DEU","GERMANY" -"3280983408","3280983423","GB","GBR","UNITED KINGDOM" -"3280983424","3280983431","DE","DEU","GERMANY" -"3280983432","3280983455","GB","GBR","UNITED KINGDOM" -"3280983456","3280983471","DE","DEU","GERMANY" -"3280983472","3280983487","GB","GBR","UNITED KINGDOM" -"3280983488","3280983515","DE","DEU","GERMANY" -"3280983516","3280983516","GB","GBR","UNITED KINGDOM" -"3280983517","3280983517","DE","DEU","GERMANY" -"3280983518","3280983518","GB","GBR","UNITED KINGDOM" -"3280983519","3280983527","DE","DEU","GERMANY" -"3280983528","3280983695","GB","GBR","UNITED KINGDOM" -"3280983696","3280983711","DE","DEU","GERMANY" -"3280983712","3280983783","GB","GBR","UNITED KINGDOM" -"3280983784","3280983791","DE","DEU","GERMANY" -"3280983792","3280983807","GB","GBR","UNITED KINGDOM" -"3280983808","3280983815","DE","DEU","GERMANY" -"3280983816","3280983887","GB","GBR","UNITED KINGDOM" -"3280983888","3280983919","DE","DEU","GERMANY" -"3280983920","3280983927","GB","GBR","UNITED KINGDOM" -"3280983928","3280983939","DE","DEU","GERMANY" -"3280983940","3280983951","GB","GBR","UNITED KINGDOM" -"3280983952","3280983975","DE","DEU","GERMANY" -"3280983976","3280983999","GB","GBR","UNITED KINGDOM" -"3280984000","3280984007","DE","DEU","GERMANY" -"3280984008","3280984013","GB","GBR","UNITED KINGDOM" -"3280984014","3280984014","DE","DEU","GERMANY" -"3280984015","3280984015","GB","GBR","UNITED KINGDOM" -"3280984016","3280984031","DE","DEU","GERMANY" -"3280984032","3280984319","GB","GBR","UNITED KINGDOM" -"3280984320","3280984335","DE","DEU","GERMANY" -"3280984336","3280984367","GB","GBR","UNITED KINGDOM" -"3280984368","3280984399","DE","DEU","GERMANY" -"3280984400","3280984431","GB","GBR","UNITED KINGDOM" -"3280984432","3280984443","DE","DEU","GERMANY" -"3280984444","3280984445","GB","GBR","UNITED KINGDOM" -"3280984446","3280984495","DE","DEU","GERMANY" -"3280984496","3280984503","GB","GBR","UNITED KINGDOM" -"3280984504","3280984511","DE","DEU","GERMANY" -"3280984512","3280984527","GB","GBR","UNITED KINGDOM" -"3280984528","3280984535","DE","DEU","GERMANY" -"3280984536","3280984559","GB","GBR","UNITED KINGDOM" -"3280984560","3280984567","DE","DEU","GERMANY" -"3280984568","3280984639","GB","GBR","UNITED KINGDOM" -"3280984640","3280984640","DE","DEU","GERMANY" -"3280984641","3280984642","GB","GBR","UNITED KINGDOM" -"3280984643","3280984643","DE","DEU","GERMANY" -"3280984644","3280984646","GB","GBR","UNITED KINGDOM" -"3280984647","3280984647","DE","DEU","GERMANY" -"3280984648","3280984661","GB","GBR","UNITED KINGDOM" -"3280984662","3280984662","DE","DEU","GERMANY" -"3280984663","3280984663","GB","GBR","UNITED KINGDOM" -"3280984664","3280984671","DE","DEU","GERMANY" -"3280984672","3280984984","GB","GBR","UNITED KINGDOM" -"3280984985","3280984985","DE","DEU","GERMANY" -"3280984986","3280984987","GB","GBR","UNITED KINGDOM" -"3280984988","3280984988","DE","DEU","GERMANY" -"3280984989","3280984991","GB","GBR","UNITED KINGDOM" -"3280984992","3280985007","DE","DEU","GERMANY" -"3280985008","3280985047","GB","GBR","UNITED KINGDOM" -"3280985048","3280985055","DE","DEU","GERMANY" -"3280985056","3280985079","GB","GBR","UNITED KINGDOM" -"3280985080","3280985087","DE","DEU","GERMANY" -"3280985088","3280985343","GB","GBR","UNITED KINGDOM" -"3280985344","3280985415","DE","DEU","GERMANY" -"3280985416","3280985431","GB","GBR","UNITED KINGDOM" -"3280985432","3280985435","DE","DEU","GERMANY" -"3280985436","3280985471","GB","GBR","UNITED KINGDOM" -"3280985472","3280985631","DE","DEU","GERMANY" -"3280985632","3280985635","GB","GBR","UNITED KINGDOM" -"3280985636","3280985647","DE","DEU","GERMANY" -"3280985648","3280985663","GB","GBR","UNITED KINGDOM" -"3280985664","3280985679","DE","DEU","GERMANY" -"3280985680","3280985695","GB","GBR","UNITED KINGDOM" -"3280985696","3280985703","DE","DEU","GERMANY" -"3280985704","3280985727","GB","GBR","UNITED KINGDOM" -"3280985728","3280985735","DE","DEU","GERMANY" -"3280985736","3280985791","GB","GBR","UNITED KINGDOM" -"3280985792","3280985823","DE","DEU","GERMANY" -"3280985824","3280985831","GB","GBR","UNITED KINGDOM" -"3280985832","3280985832","DE","DEU","GERMANY" -"3280985833","3280985833","GB","GBR","UNITED KINGDOM" -"3280985834","3280985834","DE","DEU","GERMANY" -"3280985835","3280986263","GB","GBR","UNITED KINGDOM" -"3280986264","3280986267","DE","DEU","GERMANY" -"3280986268","3280986271","GB","GBR","UNITED KINGDOM" -"3280986272","3280986303","DE","DEU","GERMANY" -"3280986304","3280986336","GB","GBR","UNITED KINGDOM" -"3280986337","3280986337","DE","DEU","GERMANY" -"3280986338","3280986338","GB","GBR","UNITED KINGDOM" -"3280986339","3280986339","DE","DEU","GERMANY" -"3280986340","3280986342","GB","GBR","UNITED KINGDOM" -"3280986343","3280986343","DE","DEU","GERMANY" -"3280986344","3280986356","GB","GBR","UNITED KINGDOM" -"3280986357","3280986357","DE","DEU","GERMANY" -"3280986358","3280986364","GB","GBR","UNITED KINGDOM" -"3280986365","3280986365","DE","DEU","GERMANY" -"3280986366","3280986527","GB","GBR","UNITED KINGDOM" -"3280986528","3280986541","DE","DEU","GERMANY" -"3280986542","3280986583","GB","GBR","UNITED KINGDOM" -"3280986584","3280986599","DE","DEU","GERMANY" -"3280986600","3280986615","GB","GBR","UNITED KINGDOM" -"3280986616","3280986619","DE","DEU","GERMANY" -"3280986620","3280986767","GB","GBR","UNITED KINGDOM" -"3280986768","3280986775","DE","DEU","GERMANY" -"3280986776","3280986783","GB","GBR","UNITED KINGDOM" -"3280986784","3280986799","DE","DEU","GERMANY" -"3280986800","3280986867","GB","GBR","UNITED KINGDOM" -"3280986868","3280986871","DE","DEU","GERMANY" -"3280986872","3280987343","GB","GBR","UNITED KINGDOM" -"3280987344","3280987359","DE","DEU","GERMANY" -"3280987360","3280987385","GB","GBR","UNITED KINGDOM" -"3280987386","3280987387","DE","DEU","GERMANY" -"3280987388","3280987647","GB","GBR","UNITED KINGDOM" -"3280987648","3280987679","DE","DEU","GERMANY" -"3280987680","3280987696","GB","GBR","UNITED KINGDOM" -"3280987697","3280987697","DE","DEU","GERMANY" -"3280987698","3280987698","GB","GBR","UNITED KINGDOM" -"3280987699","3280987699","DE","DEU","GERMANY" -"3280987700","3280987711","GB","GBR","UNITED KINGDOM" -"3280987712","3280987727","DE","DEU","GERMANY" -"3280987728","3280987775","GB","GBR","UNITED KINGDOM" -"3280987776","3280987855","DE","DEU","GERMANY" -"3280987856","3280987919","GB","GBR","UNITED KINGDOM" -"3280987920","3280987935","DE","DEU","GERMANY" -"3280987936","3280987936","GB","GBR","UNITED KINGDOM" -"3280987937","3280987939","DE","DEU","GERMANY" -"3280987940","3280987940","GB","GBR","UNITED KINGDOM" -"3280987941","3280987942","DE","DEU","GERMANY" -"3280987943","3280988111","GB","GBR","UNITED KINGDOM" -"3280988112","3280988127","DE","DEU","GERMANY" -"3280988128","3280988171","GB","GBR","UNITED KINGDOM" -"3280988172","3280988175","DE","DEU","GERMANY" -"3280988176","3280988207","GB","GBR","UNITED KINGDOM" -"3280988208","3280988215","DE","DEU","GERMANY" -"3280988216","3280988303","GB","GBR","UNITED KINGDOM" -"3280988304","3280988311","DE","DEU","GERMANY" -"3280988312","3280988383","GB","GBR","UNITED KINGDOM" -"3280988384","3280988391","DE","DEU","GERMANY" -"3280988392","3280988399","GB","GBR","UNITED KINGDOM" -"3280988400","3280988431","DE","DEU","GERMANY" -"3280988432","3280988671","GB","GBR","UNITED KINGDOM" -"3280988672","3280988679","DE","DEU","GERMANY" -"3280988680","3280988703","GB","GBR","UNITED KINGDOM" -"3280988704","3280988719","DE","DEU","GERMANY" -"3280988720","3280988740","GB","GBR","UNITED KINGDOM" -"3280988741","3280988741","DE","DEU","GERMANY" -"3280988742","3280988747","GB","GBR","UNITED KINGDOM" -"3280988748","3280988751","DE","DEU","GERMANY" -"3280988752","3280988815","GB","GBR","UNITED KINGDOM" -"3280988816","3280988831","DE","DEU","GERMANY" -"3280988832","3280988855","GB","GBR","UNITED KINGDOM" -"3280988856","3280988879","DE","DEU","GERMANY" -"3280988880","3280988895","GB","GBR","UNITED KINGDOM" -"3280988896","3280988903","DE","DEU","GERMANY" -"3280988904","3280988915","GB","GBR","UNITED KINGDOM" -"3280988916","3280988916","DE","DEU","GERMANY" -"3280988917","3280988917","GB","GBR","UNITED KINGDOM" -"3280988918","3280988918","DE","DEU","GERMANY" -"3280988919","3280988923","GB","GBR","UNITED KINGDOM" -"3280988924","3280988943","DE","DEU","GERMANY" -"3280988944","3280989007","GB","GBR","UNITED KINGDOM" -"3280989008","3280989010","DE","DEU","GERMANY" -"3280989011","3280989011","GB","GBR","UNITED KINGDOM" -"3280989012","3280989012","DE","DEU","GERMANY" -"3280989013","3280989023","GB","GBR","UNITED KINGDOM" -"3280989024","3280989039","DE","DEU","GERMANY" -"3280989040","3280989055","GB","GBR","UNITED KINGDOM" -"3280989056","3280989063","DE","DEU","GERMANY" -"3280989064","3280989067","GB","GBR","UNITED KINGDOM" -"3280989068","3280989071","DE","DEU","GERMANY" -"3280989072","3280989135","GB","GBR","UNITED KINGDOM" -"3280989136","3280989151","DE","DEU","GERMANY" -"3280989152","3280989183","GB","GBR","UNITED KINGDOM" -"3280989184","3280989187","DE","DEU","GERMANY" -"3280989188","3280989195","GB","GBR","UNITED KINGDOM" -"3280989196","3280989199","DE","DEU","GERMANY" -"3280989200","3280989239","GB","GBR","UNITED KINGDOM" -"3280989240","3280989243","DE","DEU","GERMANY" -"3280989244","3280989255","GB","GBR","UNITED KINGDOM" -"3280989256","3280989263","DE","DEU","GERMANY" -"3280989264","3280989270","GB","GBR","UNITED KINGDOM" -"3280989271","3280989279","DE","DEU","GERMANY" -"3280989280","3280989303","GB","GBR","UNITED KINGDOM" -"3280989304","3280989311","DE","DEU","GERMANY" -"3280989312","3280989351","GB","GBR","UNITED KINGDOM" -"3280989352","3280989359","DE","DEU","GERMANY" -"3280989360","3280989367","GB","GBR","UNITED KINGDOM" -"3280989368","3280989371","DE","DEU","GERMANY" -"3280989372","3280989373","GB","GBR","UNITED KINGDOM" -"3280989374","3280989391","DE","DEU","GERMANY" -"3280989392","3280989406","GB","GBR","UNITED KINGDOM" -"3280989407","3280989407","DE","DEU","GERMANY" -"3280989408","3280989427","GB","GBR","UNITED KINGDOM" -"3280989428","3280989439","DE","DEU","GERMANY" -"3280989440","3280989446","GB","GBR","UNITED KINGDOM" -"3280989447","3280989447","DE","DEU","GERMANY" -"3280989448","3280989535","GB","GBR","UNITED KINGDOM" -"3280989536","3280989551","DE","DEU","GERMANY" -"3280989552","3280989575","GB","GBR","UNITED KINGDOM" -"3280989576","3280989583","DE","DEU","GERMANY" -"3280989584","3280989607","GB","GBR","UNITED KINGDOM" -"3280989608","3280989615","DE","DEU","GERMANY" -"3280989616","3280989623","GB","GBR","UNITED KINGDOM" -"3280989624","3280989631","DE","DEU","GERMANY" -"3280989632","3280989807","GB","GBR","UNITED KINGDOM" -"3280989808","3280989811","DE","DEU","GERMANY" -"3280989812","3280989814","GB","GBR","UNITED KINGDOM" -"3280989815","3280989815","DE","DEU","GERMANY" -"3280989816","3280989820","GB","GBR","UNITED KINGDOM" -"3280989821","3280989821","DE","DEU","GERMANY" -"3280989822","3280989839","GB","GBR","UNITED KINGDOM" -"3280989840","3280989847","DE","DEU","GERMANY" -"3280989848","3280990047","GB","GBR","UNITED KINGDOM" -"3280990048","3280990079","DE","DEU","GERMANY" -"3280990080","3280990119","GB","GBR","UNITED KINGDOM" -"3280990120","3280990143","DE","DEU","GERMANY" -"3280990144","3280990191","GB","GBR","UNITED KINGDOM" -"3280990192","3280990223","DE","DEU","GERMANY" -"3280990224","3280990231","GB","GBR","UNITED KINGDOM" -"3280990232","3280990239","DE","DEU","GERMANY" -"3280990240","3280990271","GB","GBR","UNITED KINGDOM" -"3280990272","3280990287","DE","DEU","GERMANY" -"3280990288","3280990335","GB","GBR","UNITED KINGDOM" -"3280990336","3280990367","DE","DEU","GERMANY" -"3280990368","3280990377","GB","GBR","UNITED KINGDOM" -"3280990378","3280990379","DE","DEU","GERMANY" -"3280990380","3280990491","GB","GBR","UNITED KINGDOM" -"3280990492","3280990495","DE","DEU","GERMANY" -"3280990496","3280990511","GB","GBR","UNITED KINGDOM" -"3280990512","3280990527","DE","DEU","GERMANY" -"3280990528","3280990575","GB","GBR","UNITED KINGDOM" -"3280990576","3280990599","DE","DEU","GERMANY" -"3280990600","3280990607","GB","GBR","UNITED KINGDOM" -"3280990608","3280990623","DE","DEU","GERMANY" -"3280990624","3280990647","GB","GBR","UNITED KINGDOM" -"3280990648","3280990687","DE","DEU","GERMANY" -"3280990688","3280990703","GB","GBR","UNITED KINGDOM" -"3280990704","3280990719","DE","DEU","GERMANY" -"3280990720","3280990751","GB","GBR","UNITED KINGDOM" -"3280990752","3280990767","DE","DEU","GERMANY" -"3280990768","3280990847","GB","GBR","UNITED KINGDOM" -"3280990848","3280990871","DE","DEU","GERMANY" -"3280990872","3280990872","GB","GBR","UNITED KINGDOM" -"3280990873","3280990873","DE","DEU","GERMANY" -"3280990874","3280990875","GB","GBR","UNITED KINGDOM" -"3280990876","3280990879","DE","DEU","GERMANY" -"3280990880","3280990901","GB","GBR","UNITED KINGDOM" -"3280990902","3280990902","DE","DEU","GERMANY" -"3280990903","3280990903","GB","GBR","UNITED KINGDOM" -"3280990904","3280990905","DE","DEU","GERMANY" -"3280990906","3280990908","GB","GBR","UNITED KINGDOM" -"3280990909","3280990910","DE","DEU","GERMANY" -"3280990911","3280990911","GB","GBR","UNITED KINGDOM" -"3280990912","3280990927","DE","DEU","GERMANY" -"3280990928","3280990963","GB","GBR","UNITED KINGDOM" -"3280990964","3280990964","DE","DEU","GERMANY" -"3280990965","3280990968","GB","GBR","UNITED KINGDOM" -"3280990969","3280990969","DE","DEU","GERMANY" -"3280990970","3280990975","GB","GBR","UNITED KINGDOM" -"3280990976","3280990983","DE","DEU","GERMANY" -"3280990984","3280991027","GB","GBR","UNITED KINGDOM" -"3280991028","3280991028","DE","DEU","GERMANY" -"3280991029","3280991031","GB","GBR","UNITED KINGDOM" -"3280991032","3280991055","DE","DEU","GERMANY" -"3280991056","3280991199","GB","GBR","UNITED KINGDOM" -"3280991200","3280991211","DE","DEU","GERMANY" -"3280991212","3280991359","GB","GBR","UNITED KINGDOM" -"3280991360","3280991375","DE","DEU","GERMANY" -"3280991376","3280991391","GB","GBR","UNITED KINGDOM" -"3280991392","3280991407","DE","DEU","GERMANY" -"3280991408","3280991422","GB","GBR","UNITED KINGDOM" -"3280991423","3280991423","DE","DEU","GERMANY" -"3280991424","3280991743","GB","GBR","UNITED KINGDOM" -"3280991744","3280992007","DE","DEU","GERMANY" -"3280992008","3280992095","GB","GBR","UNITED KINGDOM" -"3280992096","3280992111","DE","DEU","GERMANY" -"3280992112","3280992131","GB","GBR","UNITED KINGDOM" -"3280992132","3280992135","DE","DEU","GERMANY" -"3280992136","3280992159","GB","GBR","UNITED KINGDOM" -"3280992160","3280992207","DE","DEU","GERMANY" -"3280992208","3280992219","GB","GBR","UNITED KINGDOM" -"3280992220","3280992223","DE","DEU","GERMANY" -"3280992224","3280992231","GB","GBR","UNITED KINGDOM" -"3280992232","3280992239","DE","DEU","GERMANY" -"3280992240","3280992319","GB","GBR","UNITED KINGDOM" -"3280992320","3280992335","DE","DEU","GERMANY" -"3280992336","3280992367","GB","GBR","UNITED KINGDOM" -"3280992368","3280992383","DE","DEU","GERMANY" -"3280992384","3280992391","GB","GBR","UNITED KINGDOM" -"3280992392","3280992415","DE","DEU","GERMANY" -"3280992416","3280992495","GB","GBR","UNITED KINGDOM" -"3280992496","3280992503","DE","DEU","GERMANY" -"3280992504","3280992508","GB","GBR","UNITED KINGDOM" -"3280992509","3280992509","DE","DEU","GERMANY" -"3280992510","3280992543","GB","GBR","UNITED KINGDOM" -"3280992544","3280992551","DE","DEU","GERMANY" -"3280992552","3280992575","GB","GBR","UNITED KINGDOM" -"3280992576","3280992591","DE","DEU","GERMANY" -"3280992592","3280992767","GB","GBR","UNITED KINGDOM" -"3280992768","3280992775","DE","DEU","GERMANY" -"3280992776","3280992783","GB","GBR","UNITED KINGDOM" -"3280992784","3280992799","DE","DEU","GERMANY" -"3280992800","3280992847","GB","GBR","UNITED KINGDOM" -"3280992848","3280992863","DE","DEU","GERMANY" -"3280992864","3280992871","GB","GBR","UNITED KINGDOM" -"3280992872","3280992879","DE","DEU","GERMANY" -"3280992880","3280993119","GB","GBR","UNITED KINGDOM" -"3280993120","3280993135","DE","DEU","GERMANY" -"3280993136","3280993159","GB","GBR","UNITED KINGDOM" -"3280993160","3280993175","DE","DEU","GERMANY" -"3280993176","3280993199","GB","GBR","UNITED KINGDOM" -"3280993200","3280993215","DE","DEU","GERMANY" -"3280993216","3280993247","GB","GBR","UNITED KINGDOM" -"3280993248","3280993263","DE","DEU","GERMANY" -"3280993264","3280993791","GB","GBR","UNITED KINGDOM" -"3280993792","3280994303","DE","DEU","GERMANY" -"3280994304","3280994559","GB","GBR","UNITED KINGDOM" -"3280994560","3280994815","RU","RUS","RUSSIAN FEDERATION" -"3280994816","3280995071","NL","NLD","NETHERLANDS" -"3280995072","3280995327","DE","DEU","GERMANY" -"3280995328","3280995583","SE","SWE","SWEDEN" -"3280995584","3280995839","GB","GBR","UNITED KINGDOM" -"3280995840","3280996095","RU","RUS","RUSSIAN FEDERATION" -"3280996096","3280996351","CH","CHE","SWITZERLAND" -"3280996352","3280996607","GB","GBR","UNITED KINGDOM" -"3280996608","3280996863","PL","POL","POLAND" -"3280996864","3280997119","NL","NLD","NETHERLANDS" -"3280997120","3280997375","FR","FRA","FRANCE" -"3280997376","3280997631","BE","BEL","BELGIUM" -"3280997632","3280997887","SE","SWE","SWEDEN" -"3280997888","3280998143","UA","UKR","UKRAINE" -"3280998144","3280998399","DE","DEU","GERMANY" -"3280998400","3280998655","GR","GRC","GREECE" -"3280998656","3280999423","GB","GBR","UNITED KINGDOM" -"3280999424","3280999679","HU","HUN","HUNGARY" -"3280999680","3280999935","UA","UKR","UKRAINE" -"3280999936","3281000447","DE","DEU","GERMANY" -"3281000448","3281000703","FR","FRA","FRANCE" -"3281000704","3281000959","UA","UKR","UKRAINE" -"3281000960","3281001215","SI","SVN","SLOVENIA" -"3281001216","3281001471","RO","ROM","ROMANIA" -"3281001472","3281001727","UA","UKR","UKRAINE" -"3281001728","3281001983","RU","RUS","RUSSIAN FEDERATION" -"3281001984","3281002239","CH","CHE","SWITZERLAND" -"3281002240","3281002495","DE","DEU","GERMANY" -"3281002496","3281010687","CH","CHE","SWITZERLAND" -"3281010688","3281018879","BE","BEL","BELGIUM" -"3281018880","3281027071","CZ","CZE","CZECH REPUBLIC" -"3281027080","3281027087","GB","GBR","UNITED KINGDOM" -"3281027136","3281027151","GB","GBR","UNITED KINGDOM" -"3281027200","3281027215","GB","GBR","UNITED KINGDOM" -"3281027280","3281027287","GB","GBR","UNITED KINGDOM" -"3281027304","3281027311","GB","GBR","UNITED KINGDOM" -"3281027320","3281027327","GB","GBR","UNITED KINGDOM" -"3281027584","3281027615","GB","GBR","UNITED KINGDOM" -"3281027632","3281027679","GB","GBR","UNITED KINGDOM" -"3281027696","3281027743","GB","GBR","UNITED KINGDOM" -"3281027776","3281027807","GB","GBR","UNITED KINGDOM" -"3281027840","3281027903","GB","GBR","UNITED KINGDOM" -"3281028064","3281028223","GB","GBR","UNITED KINGDOM" -"3281028992","3281029055","GB","GBR","UNITED KINGDOM" -"3281030400","3281035263","GB","GBR","UNITED KINGDOM" -"3281035264","3281043455","CH","CHE","SWITZERLAND" -"3281043456","3281059839","RU","RUS","RUSSIAN FEDERATION" -"3281059840","3281074671","DE","DEU","GERMANY" -"3281074672","3281074679","ES","ESP","SPAIN" -"3281074680","3281093951","DE","DEU","GERMANY" -"3281093952","3281093983","US","USA","UNITED STATES" -"3281093984","3281103935","DE","DEU","GERMANY" -"3281103936","3281103943","AT","AUT","AUSTRIA" -"3281103944","3281104127","DE","DEU","GERMANY" -"3281104128","3281104383","FR","FRA","FRANCE" -"3281104384","3281113703","DE","DEU","GERMANY" -"3281113704","3281113711","BE","BEL","BELGIUM" -"3281113712","3281125375","DE","DEU","GERMANY" -"3281125376","3281133567","SK","SVK","SLOVAKIA" -"3281133568","3281141759","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3281141760","3281149951","RU","RUS","RUSSIAN FEDERATION" -"3281149952","3281158143","CZ","CZE","CZECH REPUBLIC" -"3281158144","3281166335","SK","SVK","SLOVAKIA" -"3281166336","3281174527","GB","GBR","UNITED KINGDOM" -"3281174528","3281190911","FR","FRA","FRANCE" -"3281190912","3281256447","GB","GBR","UNITED KINGDOM" -"3281256448","3281321983","FI","FIN","FINLAND" -"3281321984","3281338367","GB","GBR","UNITED KINGDOM" -"3281338368","3281338623","PL","POL","POLAND" -"3281338624","3281338879","SA","SAU","SAUDI ARABIA" -"3281338880","3281339135","FR","FRA","FRANCE" -"3281339136","3281339391","RO","ROM","ROMANIA" -"3281339392","3281339647","PL","POL","POLAND" -"3281339648","3281339903","GB","GBR","UNITED KINGDOM" -"3281339904","3281340159","UA","UKR","UKRAINE" -"3281340416","3281340927","RO","ROM","ROMANIA" -"3281340928","3281341183","DE","DEU","GERMANY" -"3281341184","3281341439","AT","AUT","AUSTRIA" -"3281341440","3281341695","DE","DEU","GERMANY" -"3281341696","3281341951","PL","POL","POLAND" -"3281341952","3281342207","DK","DNK","DENMARK" -"3281342464","3281343231","DE","DEU","GERMANY" -"3281343232","3281343487","FI","FIN","FINLAND" -"3281343488","3281343743","GB","GBR","UNITED KINGDOM" -"3281343744","3281343999","TR","TUR","TURKEY" -"3281344000","3281344255","PL","POL","POLAND" -"3281344256","3281344511","RU","RUS","RUSSIAN FEDERATION" -"3281344512","3281344767","UA","UKR","UKRAINE" -"3281344768","3281345023","RU","RUS","RUSSIAN FEDERATION" -"3281345024","3281345279","UA","UKR","UKRAINE" -"3281345280","3281345535","SA","SAU","SAUDI ARABIA" -"3281345536","3281345791","CH","CHE","SWITZERLAND" -"3281345792","3281346047","RU","RUS","RUSSIAN FEDERATION" -"3281346048","3281346303","SI","SVN","SLOVENIA" -"3281346304","3281346559","PL","POL","POLAND" -"3281346560","3281346815","UA","UKR","UKRAINE" -"3281346816","3281347071","DE","DEU","GERMANY" -"3281347072","3281347327","PL","POL","POLAND" -"3281347328","3281347583","DE","DEU","GERMANY" -"3281347584","3281347839","PL","POL","POLAND" -"3281347840","3281348095","SE","SWE","SWEDEN" -"3281348096","3281348351","DE","DEU","GERMANY" -"3281348352","3281348607","GB","GBR","UNITED KINGDOM" -"3281348608","3281349119","RU","RUS","RUSSIAN FEDERATION" -"3281349120","3281349375","UA","UKR","UKRAINE" -"3281349376","3281349631","NL","NLD","NETHERLANDS" -"3281349632","3281350143","UA","UKR","UKRAINE" -"3281350144","3281350655","RU","RUS","RUSSIAN FEDERATION" -"3281350656","3281350911","UA","UKR","UKRAINE" -"3281350912","3281351167","ES","ESP","SPAIN" -"3281351168","3281351423","UA","UKR","UKRAINE" -"3281351424","3281351679","AT","AUT","AUSTRIA" -"3281351680","3281351935","TR","TUR","TURKEY" -"3281351936","3281352191","DE","DEU","GERMANY" -"3281352192","3281352447","PL","POL","POLAND" -"3281352448","3281352703","RO","ROM","ROMANIA" -"3281352704","3281352959","DE","DEU","GERMANY" -"3281352960","3281353215","GB","GBR","UNITED KINGDOM" -"3281353216","3281353471","DE","DEU","GERMANY" -"3281353472","3281353727","SE","SWE","SWEDEN" -"3281353728","3281353983","PL","POL","POLAND" -"3281353984","3281354239","UA","UKR","UKRAINE" -"3281354240","3281354751","GB","GBR","UNITED KINGDOM" -"3281354752","3281359071","SE","SWE","SWEDEN" -"3281359072","3281359103","AN","ANT","NETHERLANDS ANTILLES" -"3281359104","3281371135","SE","SWE","SWEDEN" -"3281373184","3281375231","RU","RUS","RUSSIAN FEDERATION" -"3281375232","3281377279","ES","ESP","SPAIN" -"3281377280","3281379327","AT","AUT","AUSTRIA" -"3281379328","3281383423","PL","POL","POLAND" -"3281383424","3281385471","AT","AUT","AUSTRIA" -"3281385472","3281387519","BG","BGR","BULGARIA" -"3281387520","3281453055","PL","POL","POLAND" -"3281453056","3281470975","RU","RUS","RUSSIAN FEDERATION" -"3281470976","3281471231","UZ","UZB","UZBEKISTAN" -"3281471232","3281518591","RU","RUS","RUSSIAN FEDERATION" -"3281518592","3281578431","GB","GBR","UNITED KINGDOM" -"3281578432","3281578447","IE","IRL","IRELAND" -"3281578448","3281640959","GB","GBR","UNITED KINGDOM" -"3281640960","3281640983","SE","SWE","SWEDEN" -"3281640984","3281641023","GB","GBR","UNITED KINGDOM" -"3281641024","3281641039","SE","SWE","SWEDEN" -"3281641040","3281641087","GB","GBR","UNITED KINGDOM" -"3281641088","3281641119","SE","SWE","SWEDEN" -"3281641120","3281649663","GB","GBR","UNITED KINGDOM" -"3281649664","3281699999","FR","FRA","FRANCE" -"3281700000","3281700031","US","USA","UNITED STATES" -"3281700032","3281703551","FR","FRA","FRANCE" -"3281703552","3281703615","US","USA","UNITED STATES" -"3281703616","3281706687","FR","FRA","FRANCE" -"3281706688","3281706719","US","USA","UNITED STATES" -"3281706720","3281710799","FR","FRA","FRANCE" -"3281710800","3281710815","US","USA","UNITED STATES" -"3281710816","3281711487","FR","FRA","FRANCE" -"3281711488","3281711519","BE","BEL","BELGIUM" -"3281711520","3281712127","FR","FRA","FRANCE" -"3281712128","3281712159","US","USA","UNITED STATES" -"3281712160","3281712191","FR","FRA","FRANCE" -"3281712192","3281712255","US","USA","UNITED STATES" -"3281712256","3281712831","FR","FRA","FRANCE" -"3281712832","3281712895","US","USA","UNITED STATES" -"3281712896","3281715199","FR","FRA","FRANCE" -"3281715200","3281780735","TR","TUR","TURKEY" -"3281780736","3281846271","FI","FIN","FINLAND" -"3281846272","3281911807","GB","GBR","UNITED KINGDOM" -"3281911808","3281919999","UZ","UZB","UZBEKISTAN" -"3281920000","3281928191","DE","DEU","GERMANY" -"3281928192","3281944575","MT","MLT","MALTA" -"3281944576","3281960959","DE","DEU","GERMANY" -"3281960960","3281969151","JO","JOR","JORDAN" -"3281969152","3281969663","RU","RUS","RUSSIAN FEDERATION" -"3281969664","3281970175","PL","POL","POLAND" -"3281970176","3281970687","RU","RUS","RUSSIAN FEDERATION" -"3281970688","3281971199","CH","CHE","SWITZERLAND" -"3281971200","3281971711","RU","RUS","RUSSIAN FEDERATION" -"3281971712","3281972223","RO","ROM","ROMANIA" -"3281972224","3281972735","DE","DEU","GERMANY" -"3281972736","3281973247","RU","RUS","RUSSIAN FEDERATION" -"3281973248","3281973759","FR","FRA","FRANCE" -"3281973760","3281974271","DK","DNK","DENMARK" -"3281974272","3281974783","RU","RUS","RUSSIAN FEDERATION" -"3281974784","3281975295","PL","POL","POLAND" -"3281975296","3281976319","RU","RUS","RUSSIAN FEDERATION" -"3281976320","3281976831","DE","DEU","GERMANY" -"3281976832","3281977343","RU","RUS","RUSSIAN FEDERATION" -"3281977344","3281999095","NO","NOR","NORWAY" -"3281999096","3281999103","US","USA","UNITED STATES" -"3281999104","3282042879","NO","NOR","NORWAY" -"3282042880","3282083839","CH","CHE","SWITZERLAND" -"3282083840","3282084351","DE","DEU","GERMANY" -"3282084352","3282084863","RO","ROM","ROMANIA" -"3282084864","3282085375","RU","RUS","RUSSIAN FEDERATION" -"3282085376","3282085887","BE","BEL","BELGIUM" -"3282085888","3282086399","DE","DEU","GERMANY" -"3282086400","3282086911","LV","LVA","LATVIA" -"3282086912","3282087423","DE","DEU","GERMANY" -"3282087424","3282087935","PL","POL","POLAND" -"3282087936","3282088447","SE","SWE","SWEDEN" -"3282088448","3282089471","PL","POL","POLAND" -"3282089472","3282089983","SK","SVK","SLOVAKIA" -"3282089984","3282090495","PL","POL","POLAND" -"3282090496","3282091007","GB","GBR","UNITED KINGDOM" -"3282091008","3282091519","FR","FRA","FRANCE" -"3282091520","3282092031","CH","CHE","SWITZERLAND" -"3282092032","3282093055","UA","UKR","UKRAINE" -"3282093056","3282095103","DE","DEU","GERMANY" -"3282095104","3282096127","UA","UKR","UKRAINE" -"3282096128","3282097151","IT","ITA","ITALY" -"3282097152","3282098175","GB","GBR","UNITED KINGDOM" -"3282098176","3282099199","NL","NLD","NETHERLANDS" -"3282099200","3282100223","UA","UKR","UKRAINE" -"3282100224","3282101247","ES","ESP","SPAIN" -"3282101248","3282102271","DE","DEU","GERMANY" -"3282102272","3282103295","UA","UKR","UKRAINE" -"3282103296","3282104319","GB","GBR","UNITED KINGDOM" -"3282104320","3282105343","IL","ISR","ISRAEL" -"3282105344","3282106367","RU","RUS","RUSSIAN FEDERATION" -"3282106368","3282107391","DE","DEU","GERMANY" -"3282107392","3282108415","NL","NLD","NETHERLANDS" -"3282108416","3282119423","RU","RUS","RUSSIAN FEDERATION" -"3282119424","3282119679","KZ","KAZ","KAZAKHSTAN" -"3282119680","3282149455","RU","RUS","RUSSIAN FEDERATION" -"3282149456","3282149471","KG","KGZ","KYRGYZSTAN" -"3282149472","3282149599","RU","RUS","RUSSIAN FEDERATION" -"3282149600","3282149631","GB","GBR","UNITED KINGDOM" -"3282149632","3282173951","RU","RUS","RUSSIAN FEDERATION" -"3282173952","3282174463","UA","UKR","UKRAINE" -"3282174464","3282174975","GB","GBR","UNITED KINGDOM" -"3282174976","3282177023","RU","RUS","RUSSIAN FEDERATION" -"3282177024","3282177535","GB","GBR","UNITED KINGDOM" -"3282177536","3282178047","KZ","KAZ","KAZAKHSTAN" -"3282178048","3282178559","PL","POL","POLAND" -"3282178560","3282179071","ES","ESP","SPAIN" -"3282179072","3282179583","GB","GBR","UNITED KINGDOM" -"3282179584","3282180095","RU","RUS","RUSSIAN FEDERATION" -"3282180096","3282180607","PL","POL","POLAND" -"3282180608","3282181119","KZ","KAZ","KAZAKHSTAN" -"3282181120","3282181631","GB","GBR","UNITED KINGDOM" -"3282181632","3282182143","DE","DEU","GERMANY" -"3282182144","3282190335","RU","RUS","RUSSIAN FEDERATION" -"3282190336","3282194431","SE","SWE","SWEDEN" -"3282198528","3282206719","GB","GBR","UNITED KINGDOM" -"3282206720","3282223103","CH","CHE","SWITZERLAND" -"3282223104","3282231295","BE","BEL","BELGIUM" -"3282231296","3282239487","DE","DEU","GERMANY" -"3282239488","3282242223","SE","SWE","SWEDEN" -"3282242224","3282242227","NO","NOR","NORWAY" -"3282242228","3282284543","SE","SWE","SWEDEN" -"3282284544","3282284559","FI","FIN","FINLAND" -"3282284560","3282284567","SE","SWE","SWEDEN" -"3282284568","3282284575","FR","FRA","FRANCE" -"3282284576","3282284579","SE","SWE","SWEDEN" -"3282284580","3282284583","FI","FIN","FINLAND" -"3282284584","3282284591","SE","SWE","SWEDEN" -"3282284592","3282284595","FR","FRA","FRANCE" -"3282284596","3282284599","SE","SWE","SWEDEN" -"3282284600","3282284603","FR","FRA","FRANCE" -"3282284604","3282284735","SE","SWE","SWEDEN" -"3282284736","3282284783","FI","FIN","FINLAND" -"3282284784","3282286975","SE","SWE","SWEDEN" -"3282286976","3282287007","FI","FIN","FINLAND" -"3282287008","3282287615","SE","SWE","SWEDEN" -"3282287616","3282287759","FI","FIN","FINLAND" -"3282287760","3282305023","SE","SWE","SWEDEN" -"3282305024","3282370559","PL","POL","POLAND" -"3282370560","3282388175","FI","FIN","FINLAND" -"3282388176","3282388191","SE","SWE","SWEDEN" -"3282388192","3282390015","FI","FIN","FINLAND" -"3282390016","3282390271","NL","NLD","NETHERLANDS" -"3282390272","3282416383","FI","FIN","FINLAND" -"3282416384","3282416511","RU","RUS","RUSSIAN FEDERATION" -"3282416512","3282429279","FI","FIN","FINLAND" -"3282429280","3282429311","SE","SWE","SWEDEN" -"3282429312","3282429343","NO","NOR","NORWAY" -"3282429344","3282436095","FI","FIN","FINLAND" -"3282436096","3282444159","GB","GBR","UNITED KINGDOM" -"3282444160","3282444223","US","USA","UNITED STATES" -"3282444224","3282449023","GB","GBR","UNITED KINGDOM" -"3282449024","3282449151","NL","NLD","NETHERLANDS" -"3282449152","3282452479","GB","GBR","UNITED KINGDOM" -"3282452480","3282452735","DE","DEU","GERMANY" -"3282452736","3282456023","GB","GBR","UNITED KINGDOM" -"3282456024","3282456031","IT","ITA","ITALY" -"3282456032","3282461439","GB","GBR","UNITED KINGDOM" -"3282461440","3282461695","CH","CHE","SWITZERLAND" -"3282461696","3282464767","GB","GBR","UNITED KINGDOM" -"3282464768","3282465023","SE","SWE","SWEDEN" -"3282465024","3282465279","DE","DEU","GERMANY" -"3282465280","3282465535","IT","ITA","ITALY" -"3282465536","3282466047","GB","GBR","UNITED KINGDOM" -"3282466048","3282466111","US","USA","UNITED STATES" -"3282466112","3282466643","GB","GBR","UNITED KINGDOM" -"3282466644","3282466655","IT","ITA","ITALY" -"3282466656","3282466687","GB","GBR","UNITED KINGDOM" -"3282466688","3282466727","IT","ITA","ITALY" -"3282466728","3282466815","GB","GBR","UNITED KINGDOM" -"3282466816","3282467071","US","USA","UNITED STATES" -"3282467072","3282467327","GB","GBR","UNITED KINGDOM" -"3282467328","3282467359","DE","DEU","GERMANY" -"3282467360","3282477055","GB","GBR","UNITED KINGDOM" -"3282477056","3282485247","RU","RUS","RUSSIAN FEDERATION" -"3282485248","3282493439","GI","GIB","GIBRALTAR" -"3282501632","3282534399","GR","GRC","GREECE" -"3282534400","3282550783","GB","GBR","UNITED KINGDOM" -"3282550784","3282554879","FR","FRA","FRANCE" -"3282554880","3282558975","DE","DEU","GERMANY" -"3282558976","3282563071","FR","FRA","FRANCE" -"3282563072","3282567167","GB","GBR","UNITED KINGDOM" -"3282567168","3282632703","SK","SVK","SLOVAKIA" -"3282632704","3282698239","NL","NLD","NETHERLANDS" -"3282698240","3282706431","GR","GRC","GREECE" -"3282706432","3282714623","RU","RUS","RUSSIAN FEDERATION" -"3282714624","3282722815","AT","AUT","AUSTRIA" -"3282722816","3282731007","DE","DEU","GERMANY" -"3282731008","3282739199","FI","FIN","FINLAND" -"3282739200","3282739455","CH","CHE","SWITZERLAND" -"3282739456","3282739711","RO","ROM","ROMANIA" -"3282739712","3282739967","FR","FRA","FRANCE" -"3282739968","3282740223","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3282740224","3282740479","FR","FRA","FRANCE" -"3282740480","3282740735","AT","AUT","AUSTRIA" -"3282740736","3282740991","BG","BGR","BULGARIA" -"3282740992","3282741247","DE","DEU","GERMANY" -"3282741248","3282741503","PT","PRT","PORTUGAL" -"3282741504","3282741759","GB","GBR","UNITED KINGDOM" -"3282741760","3282742015","ES","ESP","SPAIN" -"3282742016","3282742527","RO","ROM","ROMANIA" -"3282742528","3282742783","GB","GBR","UNITED KINGDOM" -"3282742784","3282743039","RU","RUS","RUSSIAN FEDERATION" -"3282743040","3282743295","CH","CHE","SWITZERLAND" -"3282743296","3282743551","CY","CYP","CYPRUS" -"3282743552","3282743807","SI","SVN","SLOVENIA" -"3282743808","3282744063","MD","MDA","REPUBLIC OF MOLDOVA" -"3282744064","3282744319","UA","UKR","UKRAINE" -"3282744320","3282744575","SA","SAU","SAUDI ARABIA" -"3282744576","3282744831","LT","LTU","LITHUANIA" -"3282744832","3282745087","PL","POL","POLAND" -"3282745088","3282745343","CS","SCG","SERBIA AND MONTENEGRO" -"3282745344","3282745599","HU","HUN","HUNGARY" -"3282745600","3282746111","DE","DEU","GERMANY" -"3282746112","3282746367","SE","SWE","SWEDEN" -"3282746368","3282746623","PL","POL","POLAND" -"3282746624","3282746879","SE","SWE","SWEDEN" -"3282746880","3282747135","RO","ROM","ROMANIA" -"3282747136","3282747391","PL","POL","POLAND" -"3282747392","3282763775","RU","RUS","RUSSIAN FEDERATION" -"3282763776","3282772991","GB","GBR","UNITED KINGDOM" -"3282772992","3282773119","BE","BEL","BELGIUM" -"3282773120","3282805727","GB","GBR","UNITED KINGDOM" -"3282805728","3282805759","IE","IRL","IRELAND" -"3282805760","3282952191","GB","GBR","UNITED KINGDOM" -"3282952192","3282960383","NL","NLD","NETHERLANDS" -"3282960384","3283091455","TR","TUR","TURKEY" -"3283091456","3283156991","CH","CHE","SWITZERLAND" -"3283156992","3283158215","DE","DEU","GERMANY" -"3283158216","3283158219","EE","EST","ESTONIA" -"3283158220","3283160171","DE","DEU","GERMANY" -"3283160172","3283160175","BE","BEL","BELGIUM" -"3283160176","3283173375","DE","DEU","GERMANY" -"3283173376","3283174399","PL","POL","POLAND" -"3283174400","3283176447","UA","UKR","UKRAINE" -"3283176448","3283177471","GB","GBR","UNITED KINGDOM" -"3283177472","3283178495","BE","BEL","BELGIUM" -"3283178496","3283179519","PL","POL","POLAND" -"3283179520","3283180543","LU","LUX","LUXEMBOURG" -"3283180544","3283181567","UA","UKR","UKRAINE" -"3283181568","3283182591","NO","NOR","NORWAY" -"3283182592","3283183615","PL","POL","POLAND" -"3283183616","3283184639","RU","RUS","RUSSIAN FEDERATION" -"3283184640","3283185663","IL","ISR","ISRAEL" -"3283185664","3283187711","UA","UKR","UKRAINE" -"3283187712","3283188735","RU","RUS","RUSSIAN FEDERATION" -"3283188736","3283189759","UA","UKR","UKRAINE" -"3283189760","3283206143","DE","DEU","GERMANY" -"3283206144","3283206655","GB","GBR","UNITED KINGDOM" -"3283206656","3283207167","SA","SAU","SAUDI ARABIA" -"3283207168","3283207679","PL","POL","POLAND" -"3283207680","3283208191","AT","AUT","AUSTRIA" -"3283208192","3283208703","DE","DEU","GERMANY" -"3283208704","3283209215","NO","NOR","NORWAY" -"3283209216","3283209727","RU","RUS","RUSSIAN FEDERATION" -"3283209728","3283210239","TR","TUR","TURKEY" -"3283210240","3283210751","UA","UKR","UKRAINE" -"3283210752","3283211263","PL","POL","POLAND" -"3283211264","3283211775","GB","GBR","UNITED KINGDOM" -"3283211776","3283212287","NL","NLD","NETHERLANDS" -"3283212288","3283212799","RU","RUS","RUSSIAN FEDERATION" -"3283212800","3283213311","BG","BGR","BULGARIA" -"3283213312","3283213823","ES","ESP","SPAIN" -"3283213824","3283214335","UA","UKR","UKRAINE" -"3283214336","3283214847","RO","ROM","ROMANIA" -"3283214848","3283215359","RU","RUS","RUSSIAN FEDERATION" -"3283215360","3283215871","AT","AUT","AUSTRIA" -"3283215872","3283216383","TR","TUR","TURKEY" -"3283216384","3283216895","DE","DEU","GERMANY" -"3283216896","3283217407","CH","CHE","SWITZERLAND" -"3283217408","3283218943","UA","UKR","UKRAINE" -"3283218944","3283219455","NL","NLD","NETHERLANDS" -"3283219456","3283219967","GB","GBR","UNITED KINGDOM" -"3283219968","3283220479","BE","BEL","BELGIUM" -"3283220480","3283220991","BG","BGR","BULGARIA" -"3283220992","3283221503","AT","AUT","AUSTRIA" -"3283221504","3283222015","GB","GBR","UNITED KINGDOM" -"3283222016","3283223039","DE","DEU","GERMANY" -"3283223040","3283223551","RU","RUS","RUSSIAN FEDERATION" -"3283223552","3283224063","NL","NLD","NETHERLANDS" -"3283224576","3283225087","BG","BGR","BULGARIA" -"3283225088","3283225599","UA","UKR","UKRAINE" -"3283225600","3283226111","RU","RUS","RUSSIAN FEDERATION" -"3283226112","3283226623","DK","DNK","DENMARK" -"3283226624","3283227135","RU","RUS","RUSSIAN FEDERATION" -"3283227136","3283227647","UA","UKR","UKRAINE" -"3283227648","3283228159","RU","RUS","RUSSIAN FEDERATION" -"3283228160","3283228671","RO","ROM","ROMANIA" -"3283228672","3283229183","RU","RUS","RUSSIAN FEDERATION" -"3283229696","3283230207","IT","ITA","ITALY" -"3283230208","3283230719","UA","UKR","UKRAINE" -"3283230720","3283232767","CS","SCG","SERBIA AND MONTENEGRO" -"3283232768","3283232895","RS","SRB","SERBIA" -"3283232896","3283233023","CS","SCG","SERBIA AND MONTENEGRO" -"3283233024","3283233343","RS","SRB","SERBIA" -"3283233344","3283233479","CS","SCG","SERBIA AND MONTENEGRO" -"3283233480","3283233483","RS","SRB","SERBIA" -"3283233484","3283234815","CS","SCG","SERBIA AND MONTENEGRO" -"3283234816","3283235199","RS","SRB","SERBIA" -"3283235200","3283235223","CS","SCG","SERBIA AND MONTENEGRO" -"3283235224","3283235227","RS","SRB","SERBIA" -"3283235228","3283235275","CS","SCG","SERBIA AND MONTENEGRO" -"3283235276","3283235279","RS","SRB","SERBIA" -"3283235280","3283235303","CS","SCG","SERBIA AND MONTENEGRO" -"3283235304","3283235311","RS","SRB","SERBIA" -"3283235312","3283235319","CS","SCG","SERBIA AND MONTENEGRO" -"3283235320","3283235327","RS","SRB","SERBIA" -"3283235328","3283235519","CS","SCG","SERBIA AND MONTENEGRO" -"3283235520","3283235535","RS","SRB","SERBIA" -"3283235536","3283235551","CS","SCG","SERBIA AND MONTENEGRO" -"3283235552","3283235559","RS","SRB","SERBIA" -"3283235560","3283235647","CS","SCG","SERBIA AND MONTENEGRO" -"3283235648","3283235655","RS","SRB","SERBIA" -"3283235656","3283235871","CS","SCG","SERBIA AND MONTENEGRO" -"3283235872","3283235875","RS","SRB","SERBIA" -"3283235876","3283235879","CS","SCG","SERBIA AND MONTENEGRO" -"3283235880","3283235883","RS","SRB","SERBIA" -"3283235884","3283235891","CS","SCG","SERBIA AND MONTENEGRO" -"3283235892","3283235895","RS","SRB","SERBIA" -"3283235896","3283235991","CS","SCG","SERBIA AND MONTENEGRO" -"3283235992","3283236007","RS","SRB","SERBIA" -"3283236008","3283236063","CS","SCG","SERBIA AND MONTENEGRO" -"3283236064","3283236071","RS","SRB","SERBIA" -"3283236072","3283236095","CS","SCG","SERBIA AND MONTENEGRO" -"3283236096","3283236119","RS","SRB","SERBIA" -"3283236120","3283236159","CS","SCG","SERBIA AND MONTENEGRO" -"3283236160","3283236183","RS","SRB","SERBIA" -"3283236184","3283236351","CS","SCG","SERBIA AND MONTENEGRO" -"3283236352","3283236511","RS","SRB","SERBIA" -"3283236512","3283236895","CS","SCG","SERBIA AND MONTENEGRO" -"3283236896","3283236903","RS","SRB","SERBIA" -"3283236904","3283236911","CS","SCG","SERBIA AND MONTENEGRO" -"3283236912","3283236919","RS","SRB","SERBIA" -"3283236920","3283237103","CS","SCG","SERBIA AND MONTENEGRO" -"3283237104","3283237119","RS","SRB","SERBIA" -"3283237120","3283237279","CS","SCG","SERBIA AND MONTENEGRO" -"3283237280","3283237287","RS","SRB","SERBIA" -"3283237288","3283237349","CS","SCG","SERBIA AND MONTENEGRO" -"3283237350","3283237351","RS","SRB","SERBIA" -"3283237352","3283237359","CS","SCG","SERBIA AND MONTENEGRO" -"3283237360","3283237367","RS","SRB","SERBIA" -"3283237368","3283237383","CS","SCG","SERBIA AND MONTENEGRO" -"3283237384","3283237391","RS","SRB","SERBIA" -"3283237392","3283237631","CS","SCG","SERBIA AND MONTENEGRO" -"3283237632","3283238143","RS","SRB","SERBIA" -"3283238144","3283238335","CS","SCG","SERBIA AND MONTENEGRO" -"3283238336","3283238399","CS","SCG","SERBIA AND MONTENEGRO" -"3283238400","3283238463","RS","SRB","SERBIA" -"3283238464","3283238479","CS","SCG","SERBIA AND MONTENEGRO" -"3283238480","3283238495","CS","SCG","SERBIA AND MONTENEGRO" -"3283238496","3283238511","RS","SRB","SERBIA" -"3283238512","3283238527","CS","SCG","SERBIA AND MONTENEGRO" -"3283238528","3283238623","CS","SCG","SERBIA AND MONTENEGRO" -"3283238624","3283238655","CS","SCG","SERBIA AND MONTENEGRO" -"3283238656","3283238671","CS","SCG","SERBIA AND MONTENEGRO" -"3283238672","3283238687","CS","SCG","SERBIA AND MONTENEGRO" -"3283238688","3283238719","CS","SCG","SERBIA AND MONTENEGRO" -"3283238720","3283238783","CS","SCG","SERBIA AND MONTENEGRO" -"3283238784","3283238911","CS","SCG","SERBIA AND MONTENEGRO" -"3283238912","3283247103","CZ","CZE","CZECH REPUBLIC" -"3283247104","3283247615","LV","LVA","LATVIA" -"3283247616","3283248127","BG","BGR","BULGARIA" -"3283248128","3283248639","DE","DEU","GERMANY" -"3283248640","3283249151","RO","ROM","ROMANIA" -"3283249152","3283249663","UA","UKR","UKRAINE" -"3283249664","3283250175","GB","GBR","UNITED KINGDOM" -"3283250176","3283250687","RU","RUS","RUSSIAN FEDERATION" -"3283250688","3283251199","RO","ROM","ROMANIA" -"3283251200","3283251711","FR","FRA","FRANCE" -"3283251712","3283252223","PL","POL","POLAND" -"3283252224","3283252735","BG","BGR","BULGARIA" -"3283252736","3283253247","SI","SVN","SLOVENIA" -"3283253248","3283253759","RO","ROM","ROMANIA" -"3283253760","3283254271","PL","POL","POLAND" -"3283254272","3283255295","RO","ROM","ROMANIA" -"3283255296","3283263487","UA","UKR","UKRAINE" -"3283263488","3283271679","SE","SWE","SWEDEN" -"3283271680","3283279871","RU","RUS","RUSSIAN FEDERATION" -"3283279872","3283288063","SE","SWE","SWEDEN" -"3283288064","3283288575","DE","DEU","GERMANY" -"3283288576","3283288579","BE","BEL","BELGIUM" -"3283288580","3283291999","DE","DEU","GERMANY" -"3283292000","3283292015","CH","CHE","SWITZERLAND" -"3283292016","3283304919","DE","DEU","GERMANY" -"3283304920","3283304923","ES","ESP","SPAIN" -"3283304924","3283305087","DE","DEU","GERMANY" -"3283305088","3283305127","FR","FRA","FRANCE" -"3283305128","3283305711","DE","DEU","GERMANY" -"3283305712","3283305715","ES","ESP","SPAIN" -"3283305716","3283318975","DE","DEU","GERMANY" -"3283318976","3283318991","NL","NLD","NETHERLANDS" -"3283318992","3283318999","ES","ESP","SPAIN" -"3283319000","3283321087","DE","DEU","GERMANY" -"3283321088","3283321119","GB","GBR","UNITED KINGDOM" -"3283321120","3283321151","DE","DEU","GERMANY" -"3283321152","3283321155","ES","ESP","SPAIN" -"3283321156","3283329923","DE","DEU","GERMANY" -"3283329924","3283329927","ES","ESP","SPAIN" -"3283329928","3283419135","DE","DEU","GERMANY" -"3283419136","3283484671","DK","DNK","DENMARK" -"3283484672","3283484927","UA","UKR","UKRAINE" -"3283484928","3283485183","NL","NLD","NETHERLANDS" -"3283485184","3283485439","DE","DEU","GERMANY" -"3283485440","3283485695","UA","UKR","UKRAINE" -"3283485696","3283485951","GB","GBR","UNITED KINGDOM" -"3283485952","3283486207","SE","SWE","SWEDEN" -"3283486208","3283486463","AT","AUT","AUSTRIA" -"3283486464","3283486719","UA","UKR","UKRAINE" -"3283486720","3283486975","RU","RUS","RUSSIAN FEDERATION" -"3283486976","3283487231","PL","POL","POLAND" -"3283487232","3283487487","FR","FRA","FRANCE" -"3283487488","3283487743","DE","DEU","GERMANY" -"3283487744","3283487999","CH","CHE","SWITZERLAND" -"3283488000","3283488255","NL","NLD","NETHERLANDS" -"3283488256","3283488511","PL","POL","POLAND" -"3283488512","3283488767","RU","RUS","RUSSIAN FEDERATION" -"3283488768","3283489279","FR","FRA","FRANCE" -"3283489280","3283489535","DE","DEU","GERMANY" -"3283489536","3283490047","PL","POL","POLAND" -"3283490048","3283490559","UA","UKR","UKRAINE" -"3283490560","3283490815","PL","POL","POLAND" -"3283490816","3283491071","CH","CHE","SWITZERLAND" -"3283491072","3283491327","TR","TUR","TURKEY" -"3283491328","3283491583","AT","AUT","AUSTRIA" -"3283491584","3283491839","RO","ROM","ROMANIA" -"3283491840","3283492095","RU","RUS","RUSSIAN FEDERATION" -"3283492096","3283492351","AT","AUT","AUSTRIA" -"3283492352","3283492607","ES","ESP","SPAIN" -"3283492608","3283492863","SA","SAU","SAUDI ARABIA" -"3283492864","3283493119","DK","DNK","DENMARK" -"3283493120","3283493375","IL","ISR","ISRAEL" -"3283493376","3283493887","PL","POL","POLAND" -"3283493888","3283494143","DK","DNK","DENMARK" -"3283494144","3283494399","GB","GBR","UNITED KINGDOM" -"3283494400","3283494655","PL","POL","POLAND" -"3283494656","3283494911","DK","DNK","DENMARK" -"3283494912","3283495167","PL","POL","POLAND" -"3283495168","3283495423","BG","BGR","BULGARIA" -"3283495424","3283495679","TR","TUR","TURKEY" -"3283495680","3283495935","NL","NLD","NETHERLANDS" -"3283495936","3283496191","BG","BGR","BULGARIA" -"3283496192","3283496447","DE","DEU","GERMANY" -"3283496448","3283496703","FR","FRA","FRANCE" -"3283496704","3283496959","LV","LVA","LATVIA" -"3283496960","3283497215","DE","DEU","GERMANY" -"3283497216","3283497471","GB","GBR","UNITED KINGDOM" -"3283497472","3283497727","DE","DEU","GERMANY" -"3283497728","3283498239","PL","POL","POLAND" -"3283498240","3283498495","CH","CHE","SWITZERLAND" -"3283498496","3283498751","PL","POL","POLAND" -"3283498752","3283499007","AT","AUT","AUSTRIA" -"3283499008","3283499263","DE","DEU","GERMANY" -"3283499264","3283499519","GB","GBR","UNITED KINGDOM" -"3283499520","3283499775","DE","DEU","GERMANY" -"3283499776","3283500031","GB","GBR","UNITED KINGDOM" -"3283500032","3283500287","DE","DEU","GERMANY" -"3283500288","3283500543","SI","SVN","SLOVENIA" -"3283500544","3283500799","GB","GBR","UNITED KINGDOM" -"3283500800","3283501055","UA","UKR","UKRAINE" -"3283501056","3283509247","LT","LTU","LITHUANIA" -"3283509248","3283513375","DE","DEU","GERMANY" -"3283513408","3283513415","DE","DEU","GERMANY" -"3283513432","3283513435","DE","DEU","GERMANY" -"3283513448","3283513519","DE","DEU","GERMANY" -"3283513536","3283513855","DE","DEU","GERMANY" -"3283513984","3283514095","DE","DEU","GERMANY" -"3283514112","3283514463","DE","DEU","GERMANY" -"3283514528","3283514547","DE","DEU","GERMANY" -"3283514552","3283516415","DE","DEU","GERMANY" -"3283516800","3283516863","DE","DEU","GERMANY" -"3283516992","3283517055","DE","DEU","GERMANY" -"3283517184","3283517439","DE","DEU","GERMANY" -"3283517440","3283525631","RU","RUS","RUSSIAN FEDERATION" -"3283525632","3283533823","GB","GBR","UNITED KINGDOM" -"3283533824","3283534847","UA","UKR","UKRAINE" -"3283534848","3283535359","DE","DEU","GERMANY" -"3283535360","3283535871","RO","ROM","ROMANIA" -"3283535872","3283536383","GI","GIB","GIBRALTAR" -"3283536384","3283536895","UA","UKR","UKRAINE" -"3283536896","3283537407","DK","DNK","DENMARK" -"3283537408","3283537919","PL","POL","POLAND" -"3283537920","3283538431","RO","ROM","ROMANIA" -"3283538432","3283538943","IT","ITA","ITALY" -"3283538944","3283539455","RO","ROM","ROMANIA" -"3283539456","3283539967","RS","SRB","SERBIA" -"3283539968","3283540479","DK","DNK","DENMARK" -"3283540480","3283540991","PL","POL","POLAND" -"3283540992","3283541503","RO","ROM","ROMANIA" -"3283541504","3283542015","CH","CHE","SWITZERLAND" -"3283542016","3283550207","IT","ITA","ITALY" -"3283550208","3283550239","AT","AUT","AUSTRIA" -"3283550288","3283550319","AT","AUT","AUSTRIA" -"3283550464","3283550623","AT","AUT","AUSTRIA" -"3283550624","3283550655","FR","FRA","FRANCE" -"3283550656","3283550719","GB","GBR","UNITED KINGDOM" -"3283550720","3283552255","AT","AUT","AUSTRIA" -"3283552256","3283552279","IT","ITA","ITALY" -"3283552288","3283552319","IT","ITA","ITALY" -"3283552352","3283552415","IT","ITA","ITALY" -"3283552448","3283552495","IT","ITA","ITALY" -"3283552512","3283552575","IT","ITA","ITALY" -"3283552576","3283552639","DE","DEU","GERMANY" -"3283552640","3283552671","IT","ITA","ITALY" -"3283552672","3283552703","CH","CHE","SWITZERLAND" -"3283552704","3283552735","DE","DEU","GERMANY" -"3283552736","3283552751","FR","FRA","FRANCE" -"3283552752","3283553047","IT","ITA","ITALY" -"3283553048","3283553055","GB","GBR","UNITED KINGDOM" -"3283553056","3283553071","ZA","ZAF","SOUTH AFRICA" -"3283553072","3283553079","SE","SWE","SWEDEN" -"3283553080","3283553119","DE","DEU","GERMANY" -"3283553120","3283553151","GR","GRC","GREECE" -"3283553152","3283553279","GB","GBR","UNITED KINGDOM" -"3283553280","3283553535","IT","ITA","ITALY" -"3283553792","3283554047","GB","GBR","UNITED KINGDOM" -"3283554048","3283554079","IT","ITA","ITALY" -"3283554080","3283554095","ES","ESP","SPAIN" -"3283554096","3283554111","NL","NLD","NETHERLANDS" -"3283554112","3283554175","IT","ITA","ITALY" -"3283554176","3283554239","FR","FRA","FRANCE" -"3283554240","3283554255","ZA","ZAF","SOUTH AFRICA" -"3283554256","3283554271","RU","RUS","RUSSIAN FEDERATION" -"3283554272","3283554303","GB","GBR","UNITED KINGDOM" -"3283554304","3283554327","CH","CHE","SWITZERLAND" -"3283554336","3283554367","CH","CHE","SWITZERLAND" -"3283554432","3283555743","CH","CHE","SWITZERLAND" -"3283555744","3283555759","SE","SWE","SWEDEN" -"3283555760","3283555775","DE","DEU","GERMANY" -"3283555776","3283555807","NL","NLD","NETHERLANDS" -"3283555808","3283555839","DE","DEU","GERMANY" -"3283555840","3283556351","CH","CHE","SWITZERLAND" -"3283556352","3283556391","FR","FRA","FRANCE" -"3283556400","3283556623","FR","FRA","FRANCE" -"3283556672","3283556735","FR","FRA","FRANCE" -"3283556864","3283558303","FR","FRA","FRANCE" -"3283558304","3283558335","DE","DEU","GERMANY" -"3283558336","3283558367","IT","ITA","ITALY" -"3283558368","3283558383","ZA","ZAF","SOUTH AFRICA" -"3283558384","3283558399","GB","GBR","UNITED KINGDOM" -"3283558400","3283558431","RU","RUS","RUSSIAN FEDERATION" -"3283558432","3283558463","DE","DEU","GERMANY" -"3283558464","3283558535","RU","RUS","RUSSIAN FEDERATION" -"3283558656","3283558751","FR","FRA","FRANCE" -"3283558752","3283558783","BE","BEL","BELGIUM" -"3283558784","3283558799","GB","GBR","UNITED KINGDOM" -"3283558800","3283558815","BE","BEL","BELGIUM" -"3283558816","3283558847","NL","NLD","NETHERLANDS" -"3283558848","3283558863","ZA","ZAF","SOUTH AFRICA" -"3283558864","3283558871","GB","GBR","UNITED KINGDOM" -"3283558872","3283558879","ZA","ZAF","SOUTH AFRICA" -"3283558880","3283558895","GB","GBR","UNITED KINGDOM" -"3283558896","3283558911","BE","BEL","BELGIUM" -"3283558912","3283559039","DE","DEU","GERMANY" -"3283559040","3283559167","IE","IRL","IRELAND" -"3283559168","3283559231","DE","DEU","GERMANY" -"3283559232","3283559263","GB","GBR","UNITED KINGDOM" -"3283559264","3283559295","ZA","ZAF","SOUTH AFRICA" -"3283559296","3283559423","DE","DEU","GERMANY" -"3283559424","3283559679","NL","NLD","NETHERLANDS" -"3283559680","3283559935","IT","ITA","ITALY" -"3283559936","3283560191","GB","GBR","UNITED KINGDOM" -"3283560192","3283560447","NO","NOR","NORWAY" -"3283560704","3283560847","ZA","ZAF","SOUTH AFRICA" -"3283560864","3283560895","SE","SWE","SWEDEN" -"3283560896","3283560959","GB","GBR","UNITED KINGDOM" -"3283560960","3283561215","BE","BEL","BELGIUM" -"3283561376","3283561407","GB","GBR","UNITED KINGDOM" -"3283561408","3283561471","ES","ESP","SPAIN" -"3283561472","3283562495","GB","GBR","UNITED KINGDOM" -"3283562496","3283562751","DE","DEU","GERMANY" -"3283562752","3283562895","GB","GBR","UNITED KINGDOM" -"3283562896","3283562903","NL","NLD","NETHERLANDS" -"3283562904","3283562911","CH","CHE","SWITZERLAND" -"3283562912","3283562943","DE","DEU","GERMANY" -"3283562944","3283563007","IT","ITA","ITALY" -"3283563008","3283566015","GB","GBR","UNITED KINGDOM" -"3283566016","3283566079","ZA","ZAF","SOUTH AFRICA" -"3283566080","3283566591","GB","GBR","UNITED KINGDOM" -"3283566592","3283566719","PL","POL","POLAND" -"3283566848","3283567103","NO","NOR","NORWAY" -"3283567104","3283567423","GB","GBR","UNITED KINGDOM" -"3283567424","3283567455","DE","DEU","GERMANY" -"3283567456","3283567471","GB","GBR","UNITED KINGDOM" -"3283567472","3283567487","ES","ESP","SPAIN" -"3283567488","3283567615","ZA","ZAF","SOUTH AFRICA" -"3283567616","3283567967","GB","GBR","UNITED KINGDOM" -"3283567968","3283567999","IT","ITA","ITALY" -"3283568000","3283568031","GB","GBR","UNITED KINGDOM" -"3283568032","3283568063","DE","DEU","GERMANY" -"3283568064","3283568079","NL","NLD","NETHERLANDS" -"3283568080","3283568095","ZA","ZAF","SOUTH AFRICA" -"3283568096","3283568127","DK","DNK","DENMARK" -"3283568128","3283569991","GB","GBR","UNITED KINGDOM" -"3283569992","3283570015","SE","SWE","SWEDEN" -"3283570016","3283570047","DK","DNK","DENMARK" -"3283570048","3283570175","DE","DEU","GERMANY" -"3283570176","3283570439","GB","GBR","UNITED KINGDOM" -"3283570440","3283570447","SE","SWE","SWEDEN" -"3283570448","3283570463","IT","ITA","ITALY" -"3283570464","3283570495","GB","GBR","UNITED KINGDOM" -"3283570496","3283570559","DE","DEU","GERMANY" -"3283570560","3283570623","FR","FRA","FRANCE" -"3283570624","3283571167","GB","GBR","UNITED KINGDOM" -"3283571168","3283571199","DE","DEU","GERMANY" -"3283571200","3283571711","GB","GBR","UNITED KINGDOM" -"3283571712","3283571719","HU","HUN","HUNGARY" -"3283571744","3283571775","DE","DEU","GERMANY" -"3283571776","3283571839","GB","GBR","UNITED KINGDOM" -"3283571840","3283571903","SE","SWE","SWEDEN" -"3283571904","3283571967","DE","DEU","GERMANY" -"3283571968","3283572111","GB","GBR","UNITED KINGDOM" -"3283572112","3283572127","BE","BEL","BELGIUM" -"3283572128","3283572159","SE","SWE","SWEDEN" -"3283572160","3283572175","GB","GBR","UNITED KINGDOM" -"3283572176","3283572191","ZA","ZAF","SOUTH AFRICA" -"3283572192","3283572223","CH","CHE","SWITZERLAND" -"3283572224","3283572615","GB","GBR","UNITED KINGDOM" -"3283572616","3283572623","FR","FRA","FRANCE" -"3283572624","3283572631","GB","GBR","UNITED KINGDOM" -"3283572632","3283572639","CH","CHE","SWITZERLAND" -"3283572640","3283572671","GB","GBR","UNITED KINGDOM" -"3283572672","3283572735","DE","DEU","GERMANY" -"3283573248","3283574527","GB","GBR","UNITED KINGDOM" -"3283574592","3283574607","GB","GBR","UNITED KINGDOM" -"3283574608","3283574615","NL","NLD","NETHERLANDS" -"3283574616","3283574623","GB","GBR","UNITED KINGDOM" -"3283574624","3283574639","ZA","ZAF","SOUTH AFRICA" -"3283574640","3283574655","GB","GBR","UNITED KINGDOM" -"3283574656","3283575071","DE","DEU","GERMANY" -"3283575072","3283575087","NL","NLD","NETHERLANDS" -"3283575088","3283575679","DE","DEU","GERMANY" -"3283575808","3283576415","DE","DEU","GERMANY" -"3283576416","3283576447","ZA","ZAF","SOUTH AFRICA" -"3283576448","3283580159","DE","DEU","GERMANY" -"3283580416","3283580455","DE","DEU","GERMANY" -"3283580464","3283582975","DE","DEU","GERMANY" -"3283583008","3283583359","ZA","ZAF","SOUTH AFRICA" -"3283583488","3283583503","ZA","ZAF","SOUTH AFRICA" -"3283583520","3283583615","ZA","ZAF","SOUTH AFRICA" -"3283583744","3283583839","ZA","ZAF","SOUTH AFRICA" -"3283583840","3283583847","IT","ITA","ITALY" -"3283583848","3283583871","GB","GBR","UNITED KINGDOM" -"3283583872","3283583999","BE","BEL","BELGIUM" -"3283584000","3283584031","ZA","ZAF","SOUTH AFRICA" -"3283584032","3283584063","DE","DEU","GERMANY" -"3283584064","3283584127","IE","IRL","IRELAND" -"3283584128","3283585023","ZA","ZAF","SOUTH AFRICA" -"3283585032","3283585039","ES","ESP","SPAIN" -"3283585056","3283585279","ES","ESP","SPAIN" -"3283585280","3283585535","ZA","ZAF","SOUTH AFRICA" -"3283585536","3283585679","ES","ESP","SPAIN" -"3283585680","3283585695","IE","IRL","IRELAND" -"3283585696","3283585727","FR","FRA","FRANCE" -"3283585728","3283585791","ES","ESP","SPAIN" -"3283585792","3283586047","IE","IRL","IRELAND" -"3283586048","3283586335","ES","ESP","SPAIN" -"3283586344","3283586351","ES","ESP","SPAIN" -"3283586368","3283586407","ES","ESP","SPAIN" -"3283586416","3283586503","ES","ESP","SPAIN" -"3283586560","3283586815","FR","FRA","FRANCE" -"3283586816","3283587071","DE","DEU","GERMANY" -"3283587072","3283587231","NL","NLD","NETHERLANDS" -"3283587328","3283587335","NL","NLD","NETHERLANDS" -"3283587336","3283587343","GB","GBR","UNITED KINGDOM" -"3283587344","3283587359","NL","NLD","NETHERLANDS" -"3283587360","3283587391","SE","SWE","SWEDEN" -"3283587392","3283587423","NL","NLD","NETHERLANDS" -"3283587424","3283587431","SE","SWE","SWEDEN" -"3283587440","3283587447","GB","GBR","UNITED KINGDOM" -"3283587448","3283587455","DE","DEU","GERMANY" -"3283587456","3283587487","CH","CHE","SWITZERLAND" -"3283587520","3283587551","CH","CHE","SWITZERLAND" -"3283587584","3283587647","NL","NLD","NETHERLANDS" -"3283587648","3283587679","DE","DEU","GERMANY" -"3283587680","3283587711","CH","CHE","SWITZERLAND" -"3283587712","3283587839","DE","DEU","GERMANY" -"3283587840","3283587871","NL","NLD","NETHERLANDS" -"3283587872","3283587887","ZA","ZAF","SOUTH AFRICA" -"3283587888","3283587895","SE","SWE","SWEDEN" -"3283587896","3283587903","CH","CHE","SWITZERLAND" -"3283587904","3283587967","IE","IRL","IRELAND" -"3283587968","3283588095","DE","DEU","GERMANY" -"3283588096","3283588191","BE","BEL","BELGIUM" -"3283588224","3283588479","BE","BEL","BELGIUM" -"3283588480","3283588543","AT","AUT","AUSTRIA" -"3283588544","3283588607","GB","GBR","UNITED KINGDOM" -"3283588608","3283589119","BE","BEL","BELGIUM" -"3283589152","3283589791","DK","DNK","DENMARK" -"3283589792","3283589823","DE","DEU","GERMANY" -"3283589840","3283589887","DE","DEU","GERMANY" -"3283589888","3283590143","DK","DNK","DENMARK" -"3283590160","3283590167","SE","SWE","SWEDEN" -"3283590176","3283590207","SE","SWE","SWEDEN" -"3283590272","3283590319","SE","SWE","SWEDEN" -"3283590336","3283590359","SE","SWE","SWEDEN" -"3283590368","3283590527","SE","SWE","SWEDEN" -"3283590528","3283590543","ZA","ZAF","SOUTH AFRICA" -"3283590544","3283590591","DE","DEU","GERMANY" -"3283590592","3283590623","CH","CHE","SWITZERLAND" -"3283590624","3283590655","GB","GBR","UNITED KINGDOM" -"3283590656","3283590847","SE","SWE","SWEDEN" -"3283590848","3283590879","ZA","ZAF","SOUTH AFRICA" -"3283590880","3283590911","DE","DEU","GERMANY" -"3283590912","3283591167","SE","SWE","SWEDEN" -"3283591168","3283591359","DE","DEU","GERMANY" -"3283591360","3283591367","GB","GBR","UNITED KINGDOM" -"3283591368","3283591375","ZA","ZAF","SOUTH AFRICA" -"3283591376","3283591423","CH","CHE","SWITZERLAND" -"3283591424","3283592191","DE","DEU","GERMANY" -"3283592192","3283592847","CH","CHE","SWITZERLAND" -"3283592848","3283592863","GB","GBR","UNITED KINGDOM" -"3283592864","3283592895","DE","DEU","GERMANY" -"3283592896","3283592903","SE","SWE","SWEDEN" -"3283592904","3283592911","GB","GBR","UNITED KINGDOM" -"3283592912","3283592927","ZA","ZAF","SOUTH AFRICA" -"3283592928","3283593023","CH","CHE","SWITZERLAND" -"3283593024","3283593055","BE","BEL","BELGIUM" -"3283593056","3283593087","IT","ITA","ITALY" -"3283593088","3283593215","CH","CHE","SWITZERLAND" -"3283593216","3283595263","IT","ITA","ITALY" -"3283595264","3283595775","DE","DEU","GERMANY" -"3283596288","3283598127","GB","GBR","UNITED KINGDOM" -"3283598144","3283598175","DE","DEU","GERMANY" -"3283598208","3283598335","DE","DEU","GERMANY" -"3283598336","3283598639","GB","GBR","UNITED KINGDOM" -"3283598640","3283598655","CH","CHE","SWITZERLAND" -"3283598656","3283598687","IE","IRL","IRELAND" -"3283598688","3283598719","SE","SWE","SWEDEN" -"3283598720","3283598735","DE","DEU","GERMANY" -"3283598736","3283598743","DK","DNK","DENMARK" -"3283598744","3283598847","DE","DEU","GERMANY" -"3283598848","3283598879","GB","GBR","UNITED KINGDOM" -"3283598880","3283598911","CH","CHE","SWITZERLAND" -"3283598912","3283598975","GB","GBR","UNITED KINGDOM" -"3283598976","3283599103","DK","DNK","DENMARK" -"3283599104","3283599295","GB","GBR","UNITED KINGDOM" -"3283599296","3283599311","DE","DEU","GERMANY" -"3283599312","3283599327","NL","NLD","NETHERLANDS" -"3283599328","3283599359","GB","GBR","UNITED KINGDOM" -"3283599360","3283599615","SE","SWE","SWEDEN" -"3283599616","3283599871","IE","IRL","IRELAND" -"3283599872","3283600527","ZA","ZAF","SOUTH AFRICA" -"3283600528","3283600543","FR","FRA","FRANCE" -"3283600544","3283600575","DE","DEU","GERMANY" -"3283600576","3283600607","IT","ITA","ITALY" -"3283600640","3283600671","ZA","ZAF","SOUTH AFRICA" -"3283600672","3283600703","DE","DEU","GERMANY" -"3283600704","3283600767","IT","ITA","ITALY" -"3283600768","3283600895","ZA","ZAF","SOUTH AFRICA" -"3283600896","3283601343","AT","AUT","AUSTRIA" -"3283601344","3283601375","IT","ITA","ITALY" -"3283601376","3283601391","IE","IRL","IRELAND" -"3283601392","3283601399","NL","NLD","NETHERLANDS" -"3283601400","3283601919","AT","AUT","AUSTRIA" -"3283601920","3283602239","ZA","ZAF","SOUTH AFRICA" -"3283602240","3283602271","GB","GBR","UNITED KINGDOM" -"3283602272","3283602287","IT","ITA","ITALY" -"3283602288","3283602303","ZA","ZAF","SOUTH AFRICA" -"3283602304","3283602367","GB","GBR","UNITED KINGDOM" -"3283602368","3283602431","BE","BEL","BELGIUM" -"3283602432","3283602943","ZA","ZAF","SOUTH AFRICA" -"3283602944","3283603007","CH","CHE","SWITZERLAND" -"3283603008","3283603071","IT","ITA","ITALY" -"3283603072","3283603199","CH","CHE","SWITZERLAND" -"3283603456","3283604479","GB","GBR","UNITED KINGDOM" -"3283604736","3283605503","GB","GBR","UNITED KINGDOM" -"3283605504","3283606783","DE","DEU","GERMANY" -"3283606784","3283607359","BE","BEL","BELGIUM" -"3283607360","3283607423","NO","NOR","NORWAY" -"3283607424","3283607551","AT","AUT","AUSTRIA" -"3283607552","3283608575","BE","BEL","BELGIUM" -"3283608576","3283608831","DE","DEU","GERMANY" -"3283608896","3283608959","DE","DEU","GERMANY" -"3283608960","3283609087","IT","ITA","ITALY" -"3283609088","3283610783","DE","DEU","GERMANY" -"3283610784","3283610815","CH","CHE","SWITZERLAND" -"3283610816","3283610879","TR","TUR","TURKEY" -"3283610880","3283611903","DE","DEU","GERMANY" -"3283611904","3283613247","IT","ITA","ITALY" -"3283613248","3283613311","DE","DEU","GERMANY" -"3283613312","3283613695","IT","ITA","ITALY" -"3283613696","3283614079","CH","CHE","SWITZERLAND" -"3283614080","3283614207","FR","FRA","FRANCE" -"3283614208","3283614975","CH","CHE","SWITZERLAND" -"3283615232","3283615743","CH","CHE","SWITZERLAND" -"3283615744","3283623935","HU","HUN","HUNGARY" -"3283623936","3283632127","DK","DNK","DENMARK" -"3283632128","3283632639","NL","NLD","NETHERLANDS" -"3283632640","3283633151","GB","GBR","UNITED KINGDOM" -"3283633152","3283633663","SE","SWE","SWEDEN" -"3283633664","3283634175","UA","UKR","UKRAINE" -"3283634176","3283635199","RU","RUS","RUSSIAN FEDERATION" -"3283635200","3283635711","GB","GBR","UNITED KINGDOM" -"3283635712","3283636223","RU","RUS","RUSSIAN FEDERATION" -"3283636224","3283636735","UA","UKR","UKRAINE" -"3283636736","3283637247","PL","POL","POLAND" -"3283637248","3283637759","FR","FRA","FRANCE" -"3283637760","3283638271","UA","UKR","UKRAINE" -"3283638272","3283638783","PL","POL","POLAND" -"3283638784","3283639295","RU","RUS","RUSSIAN FEDERATION" -"3283639296","3283639807","CH","CHE","SWITZERLAND" -"3283639808","3283640319","DE","DEU","GERMANY" -"3283640320","3283648511","DK","DNK","DENMARK" -"3283648512","3283649023","BE","BEL","BELGIUM" -"3283649024","3283649535","GB","GBR","UNITED KINGDOM" -"3283649536","3283649791","DE","DEU","GERMANY" -"3283649792","3283650047","FR","FRA","FRANCE" -"3283650048","3283650559","DE","DEU","GERMANY" -"3283650560","3283650687","SE","SWE","SWEDEN" -"3283650688","3283650815","CH","CHE","SWITZERLAND" -"3283650816","3283650879","SE","SWE","SWEDEN" -"3283650880","3283650911","GB","GBR","UNITED KINGDOM" -"3283650912","3283650927","SE","SWE","SWEDEN" -"3283650928","3283650943","GB","GBR","UNITED KINGDOM" -"3283650944","3283650959","RU","RUS","RUSSIAN FEDERATION" -"3283650960","3283650975","CH","CHE","SWITZERLAND" -"3283650976","3283651071","GB","GBR","UNITED KINGDOM" -"3283651072","3283651135","IT","ITA","ITALY" -"3283651136","3283651167","BE","BEL","BELGIUM" -"3283651168","3283651183","ES","ESP","SPAIN" -"3283651184","3283651199","BE","BEL","BELGIUM" -"3283651200","3283651263","HU","HUN","HUNGARY" -"3283651264","3283651327","ZA","ZAF","SOUTH AFRICA" -"3283651328","3283651423","BE","BEL","BELGIUM" -"3283651424","3283651439","DE","DEU","GERMANY" -"3283651440","3283651463","BE","BEL","BELGIUM" -"3283651464","3283651471","DE","DEU","GERMANY" -"3283651472","3283651487","BE","BEL","BELGIUM" -"3283651488","3283651519","FR","FRA","FRANCE" -"3283651520","3283651583","IL","ISR","ISRAEL" -"3283651584","3283651591","GB","GBR","UNITED KINGDOM" -"3283651592","3283651599","BE","BEL","BELGIUM" -"3283651600","3283651615","DE","DEU","GERMANY" -"3283651616","3283651647","BE","BEL","BELGIUM" -"3283651648","3283651663","SE","SWE","SWEDEN" -"3283651664","3283651671","RO","ROM","ROMANIA" -"3283651672","3283651687","BE","BEL","BELGIUM" -"3283651688","3283651695","IT","ITA","ITALY" -"3283651696","3283651711","GB","GBR","UNITED KINGDOM" -"3283651712","3283651727","CH","CHE","SWITZERLAND" -"3283651728","3283651735","FR","FRA","FRANCE" -"3283651736","3283651743","CH","CHE","SWITZERLAND" -"3283651744","3283651775","FR","FRA","FRANCE" -"3283651776","3283651839","SE","SWE","SWEDEN" -"3283651840","3283651967","NL","NLD","NETHERLANDS" -"3283651968","3283652031","DK","DNK","DENMARK" -"3283652032","3283652063","DE","DEU","GERMANY" -"3283652064","3283652071","BE","BEL","BELGIUM" -"3283652072","3283652079","GB","GBR","UNITED KINGDOM" -"3283652080","3283652095","BE","BEL","BELGIUM" -"3283652096","3283652351","GB","GBR","UNITED KINGDOM" -"3283652352","3283652479","IT","ITA","ITALY" -"3283652480","3283652519","BE","BEL","BELGIUM" -"3283652520","3283652527","SE","SWE","SWEDEN" -"3283652528","3283652543","BE","BEL","BELGIUM" -"3283652544","3283652575","FR","FRA","FRANCE" -"3283652576","3283652607","DE","DEU","GERMANY" -"3283652608","3283652863","NO","NOR","NORWAY" -"3283652864","3283653055","BE","BEL","BELGIUM" -"3283653056","3283653087","DE","DEU","GERMANY" -"3283653088","3283653103","GR","GRC","GREECE" -"3283653104","3283653119","DE","DEU","GERMANY" -"3283653120","3283653247","BE","BEL","BELGIUM" -"3283653248","3283653311","NO","NOR","NORWAY" -"3283653312","3283653503","BE","BEL","BELGIUM" -"3283653504","3283653631","GB","GBR","UNITED KINGDOM" -"3283653632","3283653887","FR","FRA","FRANCE" -"3283653888","3283654015","SE","SWE","SWEDEN" -"3283654016","3283654143","FR","FRA","FRANCE" -"3283654144","3283654399","DE","DEU","GERMANY" -"3283654400","3283654655","CH","CHE","SWITZERLAND" -"3283654656","3283654911","DK","DNK","DENMARK" -"3283654912","3283655039","BE","BEL","BELGIUM" -"3283655040","3283655167","DK","DNK","DENMARK" -"3283655168","3283655295","DE","DEU","GERMANY" -"3283655296","3283655423","BE","BEL","BELGIUM" -"3283655424","3283655679","FR","FRA","FRANCE" -"3283655680","3283655935","ES","ESP","SPAIN" -"3283655936","3283656191","ZA","ZAF","SOUTH AFRICA" -"3283656192","3283656223","GB","GBR","UNITED KINGDOM" -"3283656224","3283656255","BE","BEL","BELGIUM" -"3283656256","3283656271","GB","GBR","UNITED KINGDOM" -"3283656272","3283656303","BE","BEL","BELGIUM" -"3283656304","3283656311","GB","GBR","UNITED KINGDOM" -"3283656312","3283656447","BE","BEL","BELGIUM" -"3283656448","3283656559","ES","ESP","SPAIN" -"3283656560","3283656575","FR","FRA","FRANCE" -"3283656576","3283656591","BE","BEL","BELGIUM" -"3283656592","3283656599","FR","FRA","FRANCE" -"3283656600","3283656703","BE","BEL","BELGIUM" -"3283656704","3283664895","HU","HUN","HUNGARY" -"3283664896","3283673087","UA","UKR","UKRAINE" -"3283673088","3283681279","GB","GBR","UNITED KINGDOM" -"3283681280","3283729023","DE","DEU","GERMANY" -"3283729024","3283729151","US","USA","UNITED STATES" -"3283729152","3283746815","DE","DEU","GERMANY" -"3283746816","3283812351","CH","CHE","SWITZERLAND" -"3283812352","3283877887","PL","POL","POLAND" -"3283877888","3283943423","GB","GBR","UNITED KINGDOM" -"3283943424","3283944447","CZ","CZE","CZECH REPUBLIC" -"3283944448","3283945471","AT","AUT","AUSTRIA" -"3283945472","3283946495","UA","UKR","UKRAINE" -"3283946496","3283947519","GB","GBR","UNITED KINGDOM" -"3283947520","3283948543","UA","UKR","UKRAINE" -"3283948544","3283949567","NL","NLD","NETHERLANDS" -"3283949568","3283950591","SE","SWE","SWEDEN" -"3283950592","3283951615","KZ","KAZ","KAZAKHSTAN" -"3283951616","3283952639","PL","POL","POLAND" -"3283952640","3283953663","UA","UKR","UKRAINE" -"3283953664","3283954687","PL","POL","POLAND" -"3283954688","3283956735","UA","UKR","UKRAINE" -"3283956736","3283957759","PL","POL","POLAND" -"3283957760","3283958783","GR","GRC","GREECE" -"3283958784","3283959807","UA","UKR","UKRAINE" -"3283959808","3283960831","FR","FRA","FRANCE" -"3283960832","3283961855","KZ","KAZ","KAZAKHSTAN" -"3283961856","3283962879","RU","RUS","RUSSIAN FEDERATION" -"3283962880","3283963903","PL","POL","POLAND" -"3283963904","3283964927","RU","RUS","RUSSIAN FEDERATION" -"3283965952","3283966975","PL","POL","POLAND" -"3283966976","3283967999","DE","DEU","GERMANY" -"3283968000","3283969023","UA","UKR","UKRAINE" -"3283969024","3283970047","RU","RUS","RUSSIAN FEDERATION" -"3283970048","3283971071","UA","UKR","UKRAINE" -"3283971072","3283972095","RU","RUS","RUSSIAN FEDERATION" -"3283972096","3283973119","SE","SWE","SWEDEN" -"3283973120","3283974143","NL","NLD","NETHERLANDS" -"3283974144","3283975167","RU","RUS","RUSSIAN FEDERATION" -"3283975168","3283976191","NL","NLD","NETHERLANDS" -"3283976192","3283976703","IE","IRL","IRELAND" -"3283976704","3283977215","DK","DNK","DENMARK" -"3283977216","3283977727","UA","UKR","UKRAINE" -"3283977728","3283978751","RU","RUS","RUSSIAN FEDERATION" -"3283978752","3283979263","RO","ROM","ROMANIA" -"3283979264","3283979775","IL","ISR","ISRAEL" -"3283979776","3283980287","NO","NOR","NORWAY" -"3283980288","3283980799","RO","ROM","ROMANIA" -"3283980800","3283981823","CH","CHE","SWITZERLAND" -"3283981824","3283983359","RO","ROM","ROMANIA" -"3283983360","3283983871","CY","CYP","CYPRUS" -"3283983872","3283984383","GB","GBR","UNITED KINGDOM" -"3283984384","3283984895","SE","SWE","SWEDEN" -"3283984896","3283985407","GR","GRC","GREECE" -"3283985408","3283985919","RO","ROM","ROMANIA" -"3283985920","3283986431","AT","AUT","AUSTRIA" -"3283986432","3283986943","RU","RUS","RUSSIAN FEDERATION" -"3283986944","3283987455","AT","AUT","AUSTRIA" -"3283987456","3283987967","GB","GBR","UNITED KINGDOM" -"3283987968","3283988991","RO","ROM","ROMANIA" -"3283988992","3283989503","FR","FRA","FRANCE" -"3283989504","3283990015","RU","RUS","RUSSIAN FEDERATION" -"3283990016","3283990527","SE","SWE","SWEDEN" -"3283990528","3283991551","RO","ROM","ROMANIA" -"3283991552","3283992063","SE","SWE","SWEDEN" -"3283992064","3283992575","RO","ROM","ROMANIA" -"3283992576","3283993087","IL","ISR","ISRAEL" -"3283993088","3283993599","RO","ROM","ROMANIA" -"3283993600","3283994111","UA","UKR","UKRAINE" -"3283994112","3283994623","AT","AUT","AUSTRIA" -"3283994624","3283995135","UA","UKR","UKRAINE" -"3283995136","3283995647","BE","BEL","BELGIUM" -"3283995648","3283996159","CH","CHE","SWITZERLAND" -"3283996160","3283996671","MK","MKD","THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA" -"3283996672","3283997183","RO","ROM","ROMANIA" -"3283997184","3283997695","PS","PSE","PALESTINIAN TERRITORY, OCCUPIED" -"3283997696","3283998207","SA","SAU","SAUDI ARABIA" -"3283998208","3283998719","UA","UKR","UKRAINE" -"3283998720","3283999231","NL","NLD","NETHERLANDS" -"3283999232","3283999743","RU","RUS","RUSSIAN FEDERATION" -"3283999744","3284000255","GB","GBR","UNITED KINGDOM" -"3284000256","3284000767","RU","RUS","RUSSIAN FEDERATION" -"3284000768","3284001279","BG","BGR","BULGARIA" -"3284001280","3284002303","UA","UKR","UKRAINE" -"3284002304","3284002815","PL","POL","POLAND" -"3284002816","3284003327","DK","DNK","DENMARK" -"3284003328","3284003839","UA","UKR","UKRAINE" -"3284003840","3284004351","DE","DEU","GERMANY" -"3284004352","3284004863","RU","RUS","RUSSIAN FEDERATION" -"3284004864","3284005375","UA","UKR","UKRAINE" -"3284005888","3284006399","DE","DEU","GERMANY" -"3284006400","3284007423","UA","UKR","UKRAINE" -"3284007424","3284007935","RO","ROM","ROMANIA" -"3284007936","3284008447","CH","CHE","SWITZERLAND" -"3284008448","3284008959","NO","NOR","NORWAY" -"3284008960","3284009215","NL","NLD","NETHERLANDS" -"3284009216","3284009471","PL","POL","POLAND" -"3284009472","3284009727","DE","DEU","GERMANY" -"3284009728","3284009983","FR","FRA","FRANCE" -"3284009984","3284010239","CH","CHE","SWITZERLAND" -"3284010240","3284010751","FR","FRA","FRANCE" -"3284010752","3284011519","DE","DEU","GERMANY" -"3284011520","3284011775","HR","HRV","CROATIA" -"3284011776","3284012031","DE","DEU","GERMANY" -"3284012032","3284012287","RU","RUS","RUSSIAN FEDERATION" -"3284012288","3284012543","UA","UKR","UKRAINE" -"3284012544","3284012799","RU","RUS","RUSSIAN FEDERATION" -"3284012800","3284013311","AT","AUT","AUSTRIA" -"3284013312","3284013567","PL","POL","POLAND" -"3284013568","3284013823","DK","DNK","DENMARK" -"3284013824","3284014079","IL","ISR","ISRAEL" -"3284014080","3284014335","TR","TUR","TURKEY" -"3284014336","3284014591","IT","ITA","ITALY" -"3284014592","3284014847","GB","GBR","UNITED KINGDOM" -"3284014848","3284015103","IL","ISR","ISRAEL" -"3284015104","3284015359","US","USA","UNITED STATES" -"3284015360","3284015615","DK","DNK","DENMARK" -"3284015616","3284015871","AT","AUT","AUSTRIA" -"3284015872","3284016127","FR","FRA","FRANCE" -"3284016128","3284016383","NL","NLD","NETHERLANDS" -"3284016384","3284016639","CH","CHE","SWITZERLAND" -"3284016640","3284017151","DK","DNK","DENMARK" -"3284017152","3284025343","GR","GRC","GREECE" -"3284025344","3284025359","DE","DEU","GERMANY" -"3284025360","3284025439","GB","GBR","UNITED KINGDOM" -"3284025440","3284025471","DE","DEU","GERMANY" -"3284025472","3284025535","GB","GBR","UNITED KINGDOM" -"3284025536","3284025567","DE","DEU","GERMANY" -"3284025568","3284026111","GB","GBR","UNITED KINGDOM" -"3284026112","3284026479","DE","DEU","GERMANY" -"3284026480","3284026495","GB","GBR","UNITED KINGDOM" -"3284026496","3284026623","DE","DEU","GERMANY" -"3284026624","3284026751","GB","GBR","UNITED KINGDOM" -"3284026752","3284026879","DE","DEU","GERMANY" -"3284026880","3284027231","GB","GBR","UNITED KINGDOM" -"3284027232","3284027359","DE","DEU","GERMANY" -"3284027360","3284027743","GB","GBR","UNITED KINGDOM" -"3284027744","3284027775","DE","DEU","GERMANY" -"3284027776","3284027807","GB","GBR","UNITED KINGDOM" -"3284027808","3284027903","DE","DEU","GERMANY" -"3284027904","3284028415","GB","GBR","UNITED KINGDOM" -"3284028416","3284028671","DE","DEU","GERMANY" -"3284028672","3284028879","GB","GBR","UNITED KINGDOM" -"3284028880","3284028895","DE","DEU","GERMANY" -"3284028896","3284028911","GB","GBR","UNITED KINGDOM" -"3284028912","3284028927","DE","DEU","GERMANY" -"3284028928","3284029215","GB","GBR","UNITED KINGDOM" -"3284029216","3284029311","DE","DEU","GERMANY" -"3284029312","3284029695","GB","GBR","UNITED KINGDOM" -"3284029696","3284029791","DE","DEU","GERMANY" -"3284029792","3284029951","GB","GBR","UNITED KINGDOM" -"3284029952","3284030463","DE","DEU","GERMANY" -"3284030464","3284030655","GB","GBR","UNITED KINGDOM" -"3284030656","3284030687","DE","DEU","GERMANY" -"3284030688","3284030975","GB","GBR","UNITED KINGDOM" -"3284030976","3284031167","DE","DEU","GERMANY" -"3284031168","3284031551","GB","GBR","UNITED KINGDOM" -"3284031552","3284031615","DE","DEU","GERMANY" -"3284031616","3284031743","GB","GBR","UNITED KINGDOM" -"3284031744","3284032031","DE","DEU","GERMANY" -"3284032032","3284032063","GB","GBR","UNITED KINGDOM" -"3284032064","3284032095","DE","DEU","GERMANY" -"3284032096","3284032127","GB","GBR","UNITED KINGDOM" -"3284032128","3284032255","DE","DEU","GERMANY" -"3284032256","3284032639","GB","GBR","UNITED KINGDOM" -"3284032640","3284032703","DE","DEU","GERMANY" -"3284032704","3284032767","GB","GBR","UNITED KINGDOM" -"3284032768","3284032895","DE","DEU","GERMANY" -"3284032896","3284033535","GB","GBR","UNITED KINGDOM" -"3284033536","3284041727","RU","RUS","RUSSIAN FEDERATION" -"3284041728","3284041983","DK","DNK","DENMARK" -"3284041984","3284042239","SI","SVN","SLOVENIA" -"3284042240","3284042495","GB","GBR","UNITED KINGDOM" -"3284042496","3284042751","AT","AUT","AUSTRIA" -"3284042752","3284043007","GB","GBR","UNITED KINGDOM" -"3284043008","3284043263","DE","DEU","GERMANY" -"3284043264","3284043519","EE","EST","ESTONIA" -"3284043520","3284043775","DE","DEU","GERMANY" -"3284043776","3284044031","HR","HRV","CROATIA" -"3284044032","3284044287","FR","FRA","FRANCE" -"3284044288","3284044799","DE","DEU","GERMANY" -"3284044800","3284045055","CH","CHE","SWITZERLAND" -"3284045056","3284045311","LT","LTU","LITHUANIA" -"3284045312","3284045567","DE","DEU","GERMANY" -"3284045568","3284045823","AT","AUT","AUSTRIA" -"3284045824","3284046079","UA","UKR","UKRAINE" -"3284046080","3284046335","DE","DEU","GERMANY" -"3284046336","3284046591","NL","NLD","NETHERLANDS" -"3284046592","3284046847","SE","SWE","SWEDEN" -"3284046848","3284047103","DE","DEU","GERMANY" -"3284047104","3284047359","DK","DNK","DENMARK" -"3284047360","3284047615","DE","DEU","GERMANY" -"3284047616","3284047871","NL","NLD","NETHERLANDS" -"3284048128","3284048383","DK","DNK","DENMARK" -"3284048384","3284048639","GB","GBR","UNITED KINGDOM" -"3284048640","3284049151","FR","FRA","FRANCE" -"3284049152","3284049407","UA","UKR","UKRAINE" -"3284049408","3284049663","SI","SVN","SLOVENIA" -"3284049664","3284049919","RO","ROM","ROMANIA" -"3284049920","3284058111","CH","CHE","SWITZERLAND" -"3284058112","3284066303","SE","SWE","SWEDEN" -"3284066304","3284075007","NL","NLD","NETHERLANDS" -"3284075008","3284075519","DE","DEU","GERMANY" -"3284075520","3284076031","RU","RUS","RUSSIAN FEDERATION" -"3284076032","3284076543","SA","SAU","SAUDI ARABIA" -"3284076544","3284077055","PL","POL","POLAND" -"3284077056","3284077567","RU","RUS","RUSSIAN FEDERATION" -"3284077568","3284078079","UA","UKR","UKRAINE" -"3284078080","3284078591","DE","DEU","GERMANY" -"3284078592","3284079103","NL","NLD","NETHERLANDS" -"3284079104","3284079615","RU","RUS","RUSSIAN FEDERATION" -"3284079616","3284080127","DE","DEU","GERMANY" -"3284080128","3284080639","BE","BEL","BELGIUM" -"3284080640","3284081151","UA","UKR","UKRAINE" -"3284081152","3284081663","CH","CHE","SWITZERLAND" -"3284081664","3284082175","IE","IRL","IRELAND" -"3284082176","3284082687","NO","NOR","NORWAY" -"3284082688","3284083199","RU","RUS","RUSSIAN FEDERATION" -"3284083200","3284083711","BG","BGR","BULGARIA" -"3284083712","3284084223","RU","RUS","RUSSIAN FEDERATION" -"3284084224","3284084735","UA","UKR","UKRAINE" -"3284084736","3284085247","RU","RUS","RUSSIAN FEDERATION" -"3284085248","3284085759","DE","DEU","GERMANY" -"3284085760","3284086783","RO","ROM","ROMANIA" -"3284086784","3284087295","CZ","CZE","CZECH REPUBLIC" -"3284087296","3284087807","RU","RUS","RUSSIAN FEDERATION" -"3284087808","3284088319","IL","ISR","ISRAEL" -"3284088320","3284088831","LV","LVA","LATVIA" -"3284088832","3284089855","UA","UKR","UKRAINE" -"3284089856","3284090367","BG","BGR","BULGARIA" -"3284090368","3284090879","PL","POL","POLAND" -"3284090880","3284091391","RU","RUS","RUSSIAN FEDERATION" -"3284091392","3284091903","GB","GBR","UNITED KINGDOM" -"3284091904","3284092415","DE","DEU","GERMANY" -"3284092416","3284092927","GB","GBR","UNITED KINGDOM" -"3284092928","3284093439","RU","RUS","RUSSIAN FEDERATION" -"3284093440","3284093951","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3284093952","3284094463","RU","RUS","RUSSIAN FEDERATION" -"3284094464","3284094975","DK","DNK","DENMARK" -"3284094976","3284095487","UA","UKR","UKRAINE" -"3284095488","3284095999","RU","RUS","RUSSIAN FEDERATION" -"3284096000","3284096511","IT","ITA","ITALY" -"3284096512","3284097023","GB","GBR","UNITED KINGDOM" -"3284097024","3284097535","RU","RUS","RUSSIAN FEDERATION" -"3284097536","3284098047","UA","UKR","UKRAINE" -"3284098048","3284098559","DE","DEU","GERMANY" -"3284098560","3284099071","BG","BGR","BULGARIA" -"3284099072","3284099583","RO","ROM","ROMANIA" -"3284099584","3284100095","GR","GRC","GREECE" -"3284100096","3284100607","AM","ARM","ARMENIA" -"3284100608","3284101119","NL","NLD","NETHERLANDS" -"3284101120","3284101631","UA","UKR","UKRAINE" -"3284101632","3284102143","GB","GBR","UNITED KINGDOM" -"3284102144","3284102655","DK","DNK","DENMARK" -"3284103168","3284103679","NL","NLD","NETHERLANDS" -"3284103680","3284104191","DE","DEU","GERMANY" -"3284104192","3284104703","NO","NOR","NORWAY" -"3284104704","3284105215","TR","TUR","TURKEY" -"3284105216","3284105727","NL","NLD","NETHERLANDS" -"3284105728","3284106239","FI","FIN","FINLAND" -"3284106240","3284106751","RO","ROM","ROMANIA" -"3284106752","3284107263","UA","UKR","UKRAINE" -"3284107264","3284108287","RU","RUS","RUSSIAN FEDERATION" -"3284108288","3284108799","CH","CHE","SWITZERLAND" -"3284108800","3284109311","FR","FRA","FRANCE" -"3284109312","3284109823","RU","RUS","RUSSIAN FEDERATION" -"3284109824","3284110335","UA","UKR","UKRAINE" -"3284110336","3284110847","RU","RUS","RUSSIAN FEDERATION" -"3284110848","3284111359","DK","DNK","DENMARK" -"3284111360","3284111871","SE","SWE","SWEDEN" -"3284111872","3284112383","RU","RUS","RUSSIAN FEDERATION" -"3284112384","3284112895","BG","BGR","BULGARIA" -"3284112896","3284113919","NL","NLD","NETHERLANDS" -"3284113920","3284114431","AM","ARM","ARMENIA" -"3284114432","3284114943","GB","GBR","UNITED KINGDOM" -"3284114944","3284115455","RU","RUS","RUSSIAN FEDERATION" -"3284115456","3284115967","RO","ROM","ROMANIA" -"3284115968","3284116479","PL","POL","POLAND" -"3284116480","3284116991","NL","NLD","NETHERLANDS" -"3284116992","3284117503","RU","RUS","RUSSIAN FEDERATION" -"3284117504","3284118015","UA","UKR","UKRAINE" -"3284118016","3284118527","PL","POL","POLAND" -"3284118528","3284119039","FR","FRA","FRANCE" -"3284119040","3284120063","RU","RUS","RUSSIAN FEDERATION" -"3284120064","3284120575","UA","UKR","UKRAINE" -"3284120576","3284121087","PL","POL","POLAND" -"3284121088","3284121599","RU","RUS","RUSSIAN FEDERATION" -"3284121600","3284122111","PL","POL","POLAND" -"3284122112","3284122623","AM","ARM","ARMENIA" -"3284122624","3284123135","CH","CHE","SWITZERLAND" -"3284123136","3284124159","RU","RUS","RUSSIAN FEDERATION" -"3284124160","3284124671","UA","UKR","UKRAINE" -"3284124672","3284125183","DE","DEU","GERMANY" -"3284125184","3284125695","RO","ROM","ROMANIA" -"3284125696","3284126207","UA","UKR","UKRAINE" -"3284126208","3284127231","CZ","CZE","CZECH REPUBLIC" -"3284127232","3284127743","NL","NLD","NETHERLANDS" -"3284127744","3284128255","RU","RUS","RUSSIAN FEDERATION" -"3284128256","3284128767","GB","GBR","UNITED KINGDOM" -"3284128768","3284129279","CZ","CZE","CZECH REPUBLIC" -"3284140032","3284205567","DK","DNK","DENMARK" -"3284205568","3284271103","NL","NLD","NETHERLANDS" -"3284271104","3284402175","GB","GBR","UNITED KINGDOM" -"3284402176","3284467711","SE","SWE","SWEDEN" -"3284467712","3284531775","FI","FIN","FINLAND" -"3284531776","3284531779","NL","NLD","NETHERLANDS" -"3284531780","3284533247","FI","FIN","FINLAND" -"3284533248","3284598783","SE","SWE","SWEDEN" -"3284598784","3284664319","HU","HUN","HUNGARY" -"3284664320","3284672511","GB","GBR","UNITED KINGDOM" -"3284672512","3284680703","DE","DEU","GERMANY" -"3284680704","3284681215","UA","UKR","UKRAINE" -"3284681216","3284681727","RO","ROM","ROMANIA" -"3284681728","3284682239","FI","FIN","FINLAND" -"3284682240","3284682751","DE","DEU","GERMANY" -"3284682752","3284683263","SE","SWE","SWEDEN" -"3284683264","3284683775","KZ","KAZ","KAZAKHSTAN" -"3284683776","3284684287","GB","GBR","UNITED KINGDOM" -"3284684288","3284684799","FR","FRA","FRANCE" -"3284684800","3284685311","DE","DEU","GERMANY" -"3284685312","3284685823","NL","NLD","NETHERLANDS" -"3284685824","3284686335","US","USA","UNITED STATES" -"3284686336","3284686847","RO","ROM","ROMANIA" -"3284686848","3284687359","PL","POL","POLAND" -"3284687360","3284687871","UA","UKR","UKRAINE" -"3284687872","3284688383","NG","NGA","NIGERIA" -"3284688384","3284688895","RU","RUS","RUSSIAN FEDERATION" -"3284688896","3284697087","FR","FRA","FRANCE" -"3284697088","3284705279","GB","GBR","UNITED KINGDOM" -"3284705280","3284713471","FR","FRA","FRANCE" -"3284713728","3284713983","GR","GRC","GREECE" -"3284713984","3284714239","DE","DEU","GERMANY" -"3284714240","3284714495","FR","FRA","FRANCE" -"3284714496","3284714751","UA","UKR","UKRAINE" -"3284714752","3284715007","AT","AUT","AUSTRIA" -"3284715008","3284715263","GB","GBR","UNITED KINGDOM" -"3284715264","3284715519","PL","POL","POLAND" -"3284715520","3284715775","RO","ROM","ROMANIA" -"3284715776","3284716031","BE","BEL","BELGIUM" -"3284716032","3284716287","IT","ITA","ITALY" -"3284716288","3284716543","RU","RUS","RUSSIAN FEDERATION" -"3284716544","3284716799","GR","GRC","GREECE" -"3284716800","3284717055","IL","ISR","ISRAEL" -"3284717056","3284717311","PL","POL","POLAND" -"3284717312","3284717567","DE","DEU","GERMANY" -"3284717568","3284717823","FR","FRA","FRANCE" -"3284717824","3284718079","RU","RUS","RUSSIAN FEDERATION" -"3284718080","3284718591","GB","GBR","UNITED KINGDOM" -"3284718592","3284718847","PL","POL","POLAND" -"3284718848","3284719103","RU","RUS","RUSSIAN FEDERATION" -"3284719104","3284719359","PL","POL","POLAND" -"3284719360","3284719615","DE","DEU","GERMANY" -"3284719616","3284719871","RU","RUS","RUSSIAN FEDERATION" -"3284719872","3284720127","FR","FRA","FRANCE" -"3284720128","3284720383","CH","CHE","SWITZERLAND" -"3284720384","3284720895","SE","SWE","SWEDEN" -"3284720896","3284721151","UA","UKR","UKRAINE" -"3284721152","3284721407","TR","TUR","TURKEY" -"3284721408","3284721663","NL","NLD","NETHERLANDS" -"3284721664","3284722175","BE","BEL","BELGIUM" -"3284722176","3284722687","RU","RUS","RUSSIAN FEDERATION" -"3284722688","3284723199","FR","FRA","FRANCE" -"3284723200","3284723711","GB","GBR","UNITED KINGDOM" -"3284723712","3284724223","RU","RUS","RUSSIAN FEDERATION" -"3284724224","3284724735","PL","POL","POLAND" -"3284724736","3284725247","RU","RUS","RUSSIAN FEDERATION" -"3284725760","3284726271","LU","LUX","LUXEMBOURG" -"3284726272","3284726783","DE","DEU","GERMANY" -"3284726784","3284727295","UA","UKR","UKRAINE" -"3284727296","3284727807","MK","MKD","THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA" -"3284728320","3284728831","UA","UKR","UKRAINE" -"3284728832","3284729343","PT","PRT","PORTUGAL" -"3284729344","3284729855","FR","FRA","FRANCE" -"3284729856","3284795391","RU","RUS","RUSSIAN FEDERATION" -"3284795392","3284803583","FR","FRA","FRANCE" -"3284803584","3284811775","DE","DEU","GERMANY" -"3284819968","3284820479","GB","GBR","UNITED KINGDOM" -"3284820480","3284820495","DE","DEU","GERMANY" -"3284820496","3284822527","GB","GBR","UNITED KINGDOM" -"3284822528","3284822783","DE","DEU","GERMANY" -"3284822784","3284823519","GB","GBR","UNITED KINGDOM" -"3284823520","3284823527","DE","DEU","GERMANY" -"3284823528","3284825343","GB","GBR","UNITED KINGDOM" -"3284825344","3284825359","DE","DEU","GERMANY" -"3284825360","3284825423","GB","GBR","UNITED KINGDOM" -"3284825424","3284825439","DE","DEU","GERMANY" -"3284825440","3284828159","GB","GBR","UNITED KINGDOM" -"3284828160","3284844543","AT","AUT","AUSTRIA" -"3284844544","3284860927","CH","CHE","SWITZERLAND" -"3284860928","3284863743","DE","DEU","GERMANY" -"3284863744","3284863999","FR","FRA","FRANCE" -"3284864000","3284868863","DE","DEU","GERMANY" -"3284868864","3284869375","FR","FRA","FRANCE" -"3284869376","3284869631","DE","DEU","GERMANY" -"3284869632","3284869887","IT","ITA","ITALY" -"3284869888","3284872959","DE","DEU","GERMANY" -"3284872960","3284873471","IT","ITA","ITALY" -"3284873472","3284926463","DE","DEU","GERMANY" -"3284926464","3284991999","NO","NOR","NORWAY" -"3284992000","3285057535","PL","POL","POLAND" -"3285057536","3285065727","IT","ITA","ITALY" -"3285065728","3285073919","RU","RUS","RUSSIAN FEDERATION" -"3285073920","3285074687","GB","GBR","UNITED KINGDOM" -"3285074688","3285076607","NL","NLD","NETHERLANDS" -"3285076608","3285076767","BE","BEL","BELGIUM" -"3285076768","3285078111","NL","NLD","NETHERLANDS" -"3285078112","3285078143","GB","GBR","UNITED KINGDOM" -"3285078144","3285078175","NL","NLD","NETHERLANDS" -"3285078176","3285078191","GB","GBR","UNITED KINGDOM" -"3285078192","3285079423","NL","NLD","NETHERLANDS" -"3285079424","3285079551","DE","DEU","GERMANY" -"3285079552","3285079967","NL","NLD","NETHERLANDS" -"3285079968","3285079999","DE","DEU","GERMANY" -"3285080000","3285082111","NL","NLD","NETHERLANDS" -"3285082112","3285084159","AT","AUT","AUSTRIA" -"3285084160","3285085183","LU","LUX","LUXEMBOURG" -"3285085184","3285086207","GB","GBR","UNITED KINGDOM" -"3285086208","3285088255","PL","POL","POLAND" -"3285088256","3285089279","RU","RUS","RUSSIAN FEDERATION" -"3285089280","3285090303","PL","POL","POLAND" -"3285090304","3285098495","DE","DEU","GERMANY" -"3285098496","3285114879","GB","GBR","UNITED KINGDOM" -"3285123072","3285158639","BE","BEL","BELGIUM" -"3285158640","3285158647","FR","FRA","FRANCE" -"3285158648","3285164367","BE","BEL","BELGIUM" -"3285164368","3285164375","NL","NLD","NETHERLANDS" -"3285164376","3285188607","BE","BEL","BELGIUM" -"3285188608","3285265999","RU","RUS","RUSSIAN FEDERATION" -"3285266000","3285266007","CH","CHE","SWITZERLAND" -"3285266008","3285319679","RU","RUS","RUSSIAN FEDERATION" -"3285327872","3285328383","RU","RUS","RUSSIAN FEDERATION" -"3285328384","3285328895","PL","POL","POLAND" -"3285328896","3285329407","SE","SWE","SWEDEN" -"3285329408","3285329919","GB","GBR","UNITED KINGDOM" -"3285329920","3285330431","RO","ROM","ROMANIA" -"3285330432","3285330943","FR","FRA","FRANCE" -"3285330944","3285331455","RO","ROM","ROMANIA" -"3285331456","3285331967","KZ","KAZ","KAZAKHSTAN" -"3285331968","3285332991","DE","DEU","GERMANY" -"3285332992","3285333503","SE","SWE","SWEDEN" -"3285333504","3285334015","GB","GBR","UNITED KINGDOM" -"3285334016","3285334527","NL","NLD","NETHERLANDS" -"3285334528","3285335551","DE","DEU","GERMANY" -"3285335552","3285336063","SE","SWE","SWEDEN" -"3285336064","3285352447","IT","ITA","ITALY" -"3285352448","3285368831","RU","RUS","RUSSIAN FEDERATION" -"3285368832","3285385215","SI","SVN","SLOVENIA" -"3285385216","3285386239","PL","POL","POLAND" -"3285386240","3285387263","RU","RUS","RUSSIAN FEDERATION" -"3285387264","3285388287","PL","POL","POLAND" -"3285388288","3285389311","CH","CHE","SWITZERLAND" -"3285389312","3285390335","FI","FIN","FINLAND" -"3285390336","3285391359","RU","RUS","RUSSIAN FEDERATION" -"3285391360","3285392383","AM","ARM","ARMENIA" -"3285392384","3285393407","RU","RUS","RUSSIAN FEDERATION" -"3285393408","3285394431","AT","AUT","AUSTRIA" -"3285394432","3285396479","RU","RUS","RUSSIAN FEDERATION" -"3285396480","3285397503","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3285397504","3285398527","NL","NLD","NETHERLANDS" -"3285399552","3285400575","NL","NLD","NETHERLANDS" -"3285400576","3285401599","UA","UKR","UKRAINE" -"3285401600","3285402623","RU","RUS","RUSSIAN FEDERATION" -"3285402624","3285403647","IL","ISR","ISRAEL" -"3285403648","3285404671","NL","NLD","NETHERLANDS" -"3285404672","3285406719","RU","RUS","RUSSIAN FEDERATION" -"3285406720","3285407743","UA","UKR","UKRAINE" -"3285407744","3285408767","RU","RUS","RUSSIAN FEDERATION" -"3285408768","3285409791","GB","GBR","UNITED KINGDOM" -"3285409792","3285410815","UA","UKR","UKRAINE" -"3285410816","3285412863","RU","RUS","RUSSIAN FEDERATION" -"3285412864","3285413887","UA","UKR","UKRAINE" -"3285413888","3285414911","RU","RUS","RUSSIAN FEDERATION" -"3285414912","3285415935","UA","UKR","UKRAINE" -"3285415936","3285419007","RU","RUS","RUSSIAN FEDERATION" -"3285419008","3285420031","SE","SWE","SWEDEN" -"3285420032","3285424127","UA","UKR","UKRAINE" -"3285424128","3285425151","RO","ROM","ROMANIA" -"3285425152","3285427199","UA","UKR","UKRAINE" -"3285427200","3285428223","GB","GBR","UNITED KINGDOM" -"3285428224","3285429247","RU","RUS","RUSSIAN FEDERATION" -"3285429248","3285430271","UA","UKR","UKRAINE" -"3285430272","3285431295","DK","DNK","DENMARK" -"3285431296","3285432319","UZ","UZB","UZBEKISTAN" -"3285432320","3285434367","UA","UKR","UKRAINE" -"3285434368","3285436415","RU","RUS","RUSSIAN FEDERATION" -"3285436416","3285437439","GR","GRC","GREECE" -"3285437440","3285438463","RU","RUS","RUSSIAN FEDERATION" -"3285438464","3285440511","UA","UKR","UKRAINE" -"3285440512","3285442559","RU","RUS","RUSSIAN FEDERATION" -"3285442560","3285443583","IE","IRL","IRELAND" -"3285443584","3285444607","UA","UKR","UKRAINE" -"3285444608","3285446655","RU","RUS","RUSSIAN FEDERATION" -"3285446656","3285447679","UA","UKR","UKRAINE" -"3285447680","3285449727","RU","RUS","RUSSIAN FEDERATION" -"3285449728","3285450751","UA","UKR","UKRAINE" -"3285450752","3285453055","GB","GBR","UNITED KINGDOM" -"3285453120","3285453415","GB","GBR","UNITED KINGDOM" -"3285453424","3285453439","GB","GBR","UNITED KINGDOM" -"3285453568","3285453623","GB","GBR","UNITED KINGDOM" -"3285453632","3285454047","GB","GBR","UNITED KINGDOM" -"3285454080","3285454175","GB","GBR","UNITED KINGDOM" -"3285454208","3285454847","GB","GBR","UNITED KINGDOM" -"3285454848","3285455695","DE","DEU","GERMANY" -"3285455712","3285455743","DE","DEU","GERMANY" -"3285455872","3285455887","DE","DEU","GERMANY" -"3285455896","3285455903","GB","GBR","UNITED KINGDOM" -"3285455936","3285456015","DE","DEU","GERMANY" -"3285456032","3285456255","DE","DEU","GERMANY" -"3285456288","3285456351","DE","DEU","GERMANY" -"3285456384","3285456639","DE","DEU","GERMANY" -"3285456640","3285456703","DK","DNK","DENMARK" -"3285456720","3285456743","DK","DNK","DENMARK" -"3285456760","3285456871","DK","DNK","DENMARK" -"3285456880","3285456895","DK","DNK","DENMARK" -"3285456896","3285456959","GB","GBR","UNITED KINGDOM" -"3285456976","3285457023","GB","GBR","UNITED KINGDOM" -"3285457056","3285457151","GB","GBR","UNITED KINGDOM" -"3285457152","3285457183","SE","SWE","SWEDEN" -"3285457232","3285457247","SE","SWE","SWEDEN" -"3285457280","3285457407","SE","SWE","SWEDEN" -"3285457408","3285457663","GB","GBR","UNITED KINGDOM" -"3285457664","3285457759","IT","ITA","ITALY" -"3285457792","3285457919","IT","ITA","ITALY" -"3285457920","3285457951","GB","GBR","UNITED KINGDOM" -"3285457984","3285458031","GB","GBR","UNITED KINGDOM" -"3285458040","3285458111","GB","GBR","UNITED KINGDOM" -"3285458176","3285458943","GB","GBR","UNITED KINGDOM" -"3285458944","3285459071","DK","DNK","DENMARK" -"3285459104","3285459327","DK","DNK","DENMARK" -"3285459392","3285459535","DK","DNK","DENMARK" -"3285459544","3285459711","DK","DNK","DENMARK" -"3285459712","3285459967","NO","NOR","NORWAY" -"3285459968","3285460479","FI","FIN","FINLAND" -"3285460480","3285460991","DK","DNK","DENMARK" -"3285460992","3285461007","NL","NLD","NETHERLANDS" -"3285461056","3285461111","NL","NLD","NETHERLANDS" -"3285461120","3285461263","NL","NLD","NETHERLANDS" -"3285461264","3285461279","BE","BEL","BELGIUM" -"3285461312","3285461375","CH","CHE","SWITZERLAND" -"3285461376","3285461447","NL","NLD","NETHERLANDS" -"3285461448","3285461455","DE","DEU","GERMANY" -"3285461456","3285461503","NL","NLD","NETHERLANDS" -"3285461528","3285461535","NL","NLD","NETHERLANDS" -"3285461568","3285461807","NL","NLD","NETHERLANDS" -"3285461856","3285461877","NL","NLD","NETHERLANDS" -"3285461880","3285461991","NL","NLD","NETHERLANDS" -"3285461992","3285461999","GB","GBR","UNITED KINGDOM" -"3285462000","3285462007","NL","NLD","NETHERLANDS" -"3285462016","3285462175","DE","DEU","GERMANY" -"3285462192","3285462207","DE","DEU","GERMANY" -"3285462208","3285462223","GB","GBR","UNITED KINGDOM" -"3285462224","3285462367","DE","DEU","GERMANY" -"3285462400","3285462527","DE","DEU","GERMANY" -"3285462544","3285462655","DE","DEU","GERMANY" -"3285462784","3285462831","AT","AUT","AUSTRIA" -"3285462840","3285462847","AT","AUT","AUSTRIA" -"3285462880","3285462911","AT","AUT","AUSTRIA" -"3285462952","3285462959","AT","AUT","AUSTRIA" -"3285463008","3285463039","AT","AUT","AUSTRIA" -"3285463040","3285463079","LU","LUX","LUXEMBOURG" -"3285463104","3285463135","LU","LUX","LUXEMBOURG" -"3285463296","3285463311","FR","FRA","FRANCE" -"3285463312","3285463319","BE","BEL","BELGIUM" -"3285463320","3285463327","FR","FRA","FRANCE" -"3285463360","3285463455","BE","BEL","BELGIUM" -"3285463520","3285463615","BE","BEL","BELGIUM" -"3285463616","3285463647","FR","FRA","FRANCE" -"3285463664","3285463759","BE","BEL","BELGIUM" -"3285463776","3285463839","BE","BEL","BELGIUM" -"3285463856","3285463991","BE","BEL","BELGIUM" -"3285464016","3285464063","BE","BEL","BELGIUM" -"3285464072","3285464095","BE","BEL","BELGIUM" -"3285464096","3285464127","GB","GBR","UNITED KINGDOM" -"3285464320","3285464351","BE","BEL","BELGIUM" -"3285464360","3285464383","BE","BEL","BELGIUM" -"3285464384","3285464415","GB","GBR","UNITED KINGDOM" -"3285464416","3285464431","BE","BEL","BELGIUM" -"3285464432","3285464447","DE","DEU","GERMANY" -"3285464448","3285465087","BE","BEL","BELGIUM" -"3285465088","3285465103","DK","DNK","DENMARK" -"3285465152","3285465231","DK","DNK","DENMARK" -"3285465248","3285465343","DK","DNK","DENMARK" -"3285465664","3285465727","DE","DEU","GERMANY" -"3285465856","3285466367","DE","DEU","GERMANY" -"3285466368","3285466447","CH","CHE","SWITZERLAND" -"3285466456","3285466463","CH","CHE","SWITZERLAND" -"3285466528","3285466559","CH","CHE","SWITZERLAND" -"3285466624","3285466879","AT","AUT","AUSTRIA" -"3285466880","3285466895","BG","BGR","BULGARIA" -"3285466912","3285466943","BG","BGR","BULGARIA" -"3285466952","3285466959","BG","BGR","BULGARIA" -"3285466984","3285467007","BG","BGR","BULGARIA" -"3285467016","3285467023","BG","BGR","BULGARIA" -"3285467136","3285467391","DE","DEU","GERMANY" -"3285467664","3285467679","DE","DEU","GERMANY" -"3285467832","3285467839","DE","DEU","GERMANY" -"3285467936","3285467951","DE","DEU","GERMANY" -"3285467952","3285467959","GB","GBR","UNITED KINGDOM" -"3285467968","3285468511","DE","DEU","GERMANY" -"3285468576","3285468591","DE","DEU","GERMANY" -"3285468600","3285468615","DE","DEU","GERMANY" -"3285468616","3285468623","GB","GBR","UNITED KINGDOM" -"3285468656","3285471007","DE","DEU","GERMANY" -"3285471040","3285471055","DE","DEU","GERMANY" -"3285471104","3285471743","DE","DEU","GERMANY" -"3285471808","3285471871","DE","DEU","GERMANY" -"3285471936","3285471967","DE","DEU","GERMANY" -"3285472000","3285472127","DE","DEU","GERMANY" -"3285472160","3285472175","DE","DEU","GERMANY" -"3285472192","3285472223","DE","DEU","GERMANY" -"3285472256","3285472287","DE","DEU","GERMANY" -"3285472368","3285472511","DE","DEU","GERMANY" -"3285473328","3285473343","DE","DEU","GERMANY" -"3285473440","3285473527","DE","DEU","GERMANY" -"3285473536","3285473567","DE","DEU","GERMANY" -"3285473584","3285473591","GB","GBR","UNITED KINGDOM" -"3285473592","3285473599","DE","DEU","GERMANY" -"3285473632","3285473663","DE","DEU","GERMANY" -"3285473792","3285474047","DE","DEU","GERMANY" -"3285474080","3285474095","DE","DEU","GERMANY" -"3285474176","3285474231","DE","DEU","GERMANY" -"3285474240","3285474271","DE","DEU","GERMANY" -"3285474304","3285474319","DE","DEU","GERMANY" -"3285474336","3285474559","DE","DEU","GERMANY" -"3285475072","3285475127","DE","DEU","GERMANY" -"3285475144","3285475167","DE","DEU","GERMANY" -"3285475200","3285475207","DE","DEU","GERMANY" -"3285475232","3285475327","DE","DEU","GERMANY" -"3285475624","3285475647","AT","AUT","AUSTRIA" -"3285475680","3285475711","AT","AUT","AUSTRIA" -"3285475776","3285475783","AT","AUT","AUSTRIA" -"3285475808","3285475823","AT","AUT","AUSTRIA" -"3285475904","3285475951","AT","AUT","AUSTRIA" -"3285475968","3285476095","AT","AUT","AUSTRIA" -"3285476352","3285476607","DE","DEU","GERMANY" -"3285476736","3285476863","GB","GBR","UNITED KINGDOM" -"3285476864","3285476895","AT","AUT","AUSTRIA" -"3285477024","3285477087","AT","AUT","AUSTRIA" -"3285477152","3285477247","IT","ITA","ITALY" -"3285477256","3285477263","IT","ITA","ITALY" -"3285477280","3285477319","IT","ITA","ITALY" -"3285477336","3285477343","IT","ITA","ITALY" -"3285477360","3285477375","IT","ITA","ITALY" -"3285477376","3285477631","FR","FRA","FRANCE" -"3285477888","3285477919","FR","FRA","FRANCE" -"3285477952","3285477983","FR","FRA","FRANCE" -"3285478000","3285478655","FR","FRA","FRANCE" -"3285478912","3285479391","FR","FRA","FRANCE" -"3285479400","3285479407","GB","GBR","UNITED KINGDOM" -"3285479424","3285479807","CH","CHE","SWITZERLAND" -"3285480448","3285480575","CH","CHE","SWITZERLAND" -"3285480704","3285480719","CH","CHE","SWITZERLAND" -"3285480736","3285480767","CH","CHE","SWITZERLAND" -"3285480776","3285480895","CH","CHE","SWITZERLAND" -"3285480960","3285481215","CH","CHE","SWITZERLAND" -"3285481472","3285481727","IT","ITA","ITALY" -"3285481728","3285481791","CH","CHE","SWITZERLAND" -"3285481984","3285481999","FR","FRA","FRANCE" -"3285482000","3285482007","CY","CYP","CYPRUS" -"3285482016","3285482087","FR","FRA","FRANCE" -"3285482096","3285482239","FR","FRA","FRANCE" -"3285482496","3285482527","CH","CHE","SWITZERLAND" -"3285482752","3285482783","CH","CHE","SWITZERLAND" -"3285483008","3285483519","CH","CHE","SWITZERLAND" -"3285484544","3285485055","IE","IRL","IRELAND" -"3285485104","3285485119","SK","SVK","SLOVAKIA" -"3285485640","3285485647","SK","SVK","SLOVAKIA" -"3285485728","3285485743","SK","SVK","SLOVAKIA" -"3285485800","3285485815","SK","SVK","SLOVAKIA" -"3285486592","3285487103","IT","ITA","ITALY" -"3285487104","3285487359","HU","HUN","HUNGARY" -"3285487360","3285487423","NL","NLD","NETHERLANDS" -"3285487440","3285487487","GB","GBR","UNITED KINGDOM" -"3285487488","3285487679","NL","NLD","NETHERLANDS" -"3285487744","3285488127","NL","NLD","NETHERLANDS" -"3285488896","3285489663","GB","GBR","UNITED KINGDOM" -"3285490176","3285490319","RU","RUS","RUSSIAN FEDERATION" -"3285490336","3285490463","RU","RUS","RUSSIAN FEDERATION" -"3285490496","3285490511","RU","RUS","RUSSIAN FEDERATION" -"3285490520","3285490527","LT","LTU","LITHUANIA" -"3285490528","3285490535","LV","LVA","LATVIA" -"3285490536","3285490543","RU","RUS","RUSSIAN FEDERATION" -"3285490560","3285490687","RU","RUS","RUSSIAN FEDERATION" -"3285490944","3285491007","RU","RUS","RUSSIAN FEDERATION" -"3285491456","3285491711","RU","RUS","RUSSIAN FEDERATION" -"3285492224","3285492479","FR","FRA","FRANCE" -"3285492480","3285492687","GB","GBR","UNITED KINGDOM" -"3285492696","3285492735","GB","GBR","UNITED KINGDOM" -"3285493760","3285493775","ES","ESP","SPAIN" -"3285493784","3285493791","ES","ESP","SPAIN" -"3285493808","3285493887","ES","ESP","SPAIN" -"3285493968","3285493983","ES","ESP","SPAIN" -"3285493984","3285493991","GB","GBR","UNITED KINGDOM" -"3285494000","3285494015","ES","ESP","SPAIN" -"3285494016","3285494079","IT","ITA","ITALY" -"3285494112","3285494783","IT","ITA","ITALY" -"3285495808","3285496319","DE","DEU","GERMANY" -"3285496320","3285496335","ES","ESP","SPAIN" -"3285496352","3285496383","ES","ESP","SPAIN" -"3285496464","3285496471","ES","ESP","SPAIN" -"3285496480","3285496495","ES","ESP","SPAIN" -"3285496496","3285496527","FR","FRA","FRANCE" -"3285496544","3285496575","FR","FRA","FRANCE" -"3285496576","3285496607","GB","GBR","UNITED KINGDOM" -"3285496608","3285496815","DE","DEU","GERMANY" -"3285496832","3285497855","DE","DEU","GERMANY" -"3285497888","3285498031","DE","DEU","GERMANY" -"3285498096","3285498111","DE","DEU","GERMANY" -"3285498112","3285498367","IT","ITA","ITALY" -"3285498368","3285498623","DE","DEU","GERMANY" -"3285498624","3285498655","CH","CHE","SWITZERLAND" -"3285498656","3285498663","CY","CYP","CYPRUS" -"3285498672","3285498687","CH","CHE","SWITZERLAND" -"3285499392","3285499455","FR","FRA","FRANCE" -"3285499488","3285499647","FR","FRA","FRANCE" -"3285499648","3285499903","DE","DEU","GERMANY" -"3285499904","3285500159","CZ","CZE","CZECH REPUBLIC" -"3285500288","3285500415","CZ","CZE","CZECH REPUBLIC" -"3285500416","3285500927","GB","GBR","UNITED KINGDOM" -"3285500928","3285501183","DK","DNK","DENMARK" -"3285501184","3285501311","CZ","CZE","CZECH REPUBLIC" -"3285501320","3285501327","CZ","CZE","CZECH REPUBLIC" -"3285501336","3285501343","CZ","CZE","CZECH REPUBLIC" -"3285501344","3285501375","GB","GBR","UNITED KINGDOM" -"3285501376","3285501407","CZ","CZE","CZECH REPUBLIC" -"3285501440","3285501567","CZ","CZE","CZECH REPUBLIC" -"3285501728","3285501759","GB","GBR","UNITED KINGDOM" -"3285501760","3285501767","CZ","CZE","CZECH REPUBLIC" -"3285502208","3285502463","CZ","CZE","CZECH REPUBLIC" -"3285502464","3285502495","IL","ISR","ISRAEL" -"3285502496","3285502503","CY","CYP","CYPRUS" -"3285502504","3285502511","IL","ISR","ISRAEL" -"3285502512","3285502527","CY","CYP","CYPRUS" -"3285502528","3285502591","BY","BLR","BELARUS" -"3285502592","3285502655","GB","GBR","UNITED KINGDOM" -"3285502656","3285502719","IL","ISR","ISRAEL" -"3285503392","3285503423","CZ","CZE","CZECH REPUBLIC" -"3285503488","3285503551","ES","ESP","SPAIN" -"3285503744","3285503999","FI","FIN","FINLAND" -"3285504512","3285504607","CZ","CZE","CZECH REPUBLIC" -"3285505216","3285505279","CZ","CZE","CZECH REPUBLIC" -"3285505440","3285505471","CZ","CZE","CZECH REPUBLIC" -"3285506048","3285506079","CZ","CZE","CZECH REPUBLIC" -"3285507328","3285507391","GR","GRC","GREECE" -"3285507664","3285507711","CZ","CZE","CZECH REPUBLIC" -"3285507840","3285508095","CZ","CZE","CZECH REPUBLIC" -"3285508096","3285508607","DE","DEU","GERMANY" -"3285508608","3285508623","RU","RUS","RUSSIAN FEDERATION" -"3285508640","3285508671","RU","RUS","RUSSIAN FEDERATION" -"3285508736","3285508863","RU","RUS","RUSSIAN FEDERATION" -"3285508872","3285508927","PT","PRT","PORTUGAL" -"3285509120","3285509247","SE","SWE","SWEDEN" -"3285509280","3285509311","SE","SWE","SWEDEN" -"3285509632","3285509887","TR","TUR","TURKEY" -"3285510016","3285510047","HU","HUN","HUNGARY" -"3285510080","3285510143","HU","HUN","HUNGARY" -"3285510144","3285512191","GB","GBR","UNITED KINGDOM" -"3285512192","3285512511","GR","GRC","GREECE" -"3285512576","3285512719","GR","GRC","GREECE" -"3285512768","3285512831","GR","GRC","GREECE" -"3285513216","3285513223","GB","GBR","UNITED KINGDOM" -"3285513232","3285513247","GR","GRC","GREECE" -"3285513280","3285513343","GR","GRC","GREECE" -"3285513728","3285514239","GR","GRC","GREECE" -"3285515264","3285515519","AT","AUT","AUSTRIA" -"3285515792","3285515799","GR","GRC","GREECE" -"3285516160","3285516191","GR","GRC","GREECE" -"3285516224","3285516287","GR","GRC","GREECE" -"3285516288","3285516543","DK","DNK","DENMARK" -"3285516544","3285516671","NO","NOR","NORWAY" -"3285516672","3285516687","BE","BEL","BELGIUM" -"3285516688","3285516691","NL","NLD","NETHERLANDS" -"3285516692","3285516695","IT","ITA","ITALY" -"3285516696","3285516703","NL","NLD","NETHERLANDS" -"3285516704","3285516719","GB","GBR","UNITED KINGDOM" -"3285516720","3285516735","IL","ISR","ISRAEL" -"3285516736","3285516799","DE","DEU","GERMANY" -"3285516800","3285516927","GB","GBR","UNITED KINGDOM" -"3285516928","3285516991","PL","POL","POLAND" -"3285516992","3285517023","BE","BEL","BELGIUM" -"3285517024","3285517055","SE","SWE","SWEDEN" -"3285517056","3285517215","GB","GBR","UNITED KINGDOM" -"3285517216","3285517247","AT","AUT","AUSTRIA" -"3285517248","3285518335","GB","GBR","UNITED KINGDOM" -"3285518336","3285518351","NL","NLD","NETHERLANDS" -"3285518352","3285518367","ES","ESP","SPAIN" -"3285518368","3285518463","BE","BEL","BELGIUM" -"3285518464","3285518591","ES","ESP","SPAIN" -"3285518592","3285518847","CH","CHE","SWITZERLAND" -"3285518848","3285519103","BE","BEL","BELGIUM" -"3285519104","3285519359","FR","FRA","FRANCE" -"3285519360","3285519615","DE","DEU","GERMANY" -"3285519616","3285520127","GB","GBR","UNITED KINGDOM" -"3285520128","3285520383","NL","NLD","NETHERLANDS" -"3285520384","3285520527","GB","GBR","UNITED KINGDOM" -"3285520528","3285520543","CH","CHE","SWITZERLAND" -"3285520544","3285520575","GB","GBR","UNITED KINGDOM" -"3285520576","3285520639","DE","DEU","GERMANY" -"3285520640","3285520767","NL","NLD","NETHERLANDS" -"3285520768","3285520895","GB","GBR","UNITED KINGDOM" -"3285520896","3285521167","BE","BEL","BELGIUM" -"3285521168","3285521407","GB","GBR","UNITED KINGDOM" -"3285521408","3285521695","BE","BEL","BELGIUM" -"3285521696","3285521791","GB","GBR","UNITED KINGDOM" -"3285521792","3285522175","BE","BEL","BELGIUM" -"3285522176","3285523071","GB","GBR","UNITED KINGDOM" -"3285523072","3285523079","BE","BEL","BELGIUM" -"3285523080","3285523087","ES","ESP","SPAIN" -"3285523088","3285523199","CH","CHE","SWITZERLAND" -"3285523200","3285523231","ZA","ZAF","SOUTH AFRICA" -"3285523232","3285523327","BE","BEL","BELGIUM" -"3285523328","3285523335","FI","FIN","FINLAND" -"3285523336","3285523359","BE","BEL","BELGIUM" -"3285523360","3285523391","GB","GBR","UNITED KINGDOM" -"3285523392","3285523455","BE","BEL","BELGIUM" -"3285523456","3285523711","FR","FRA","FRANCE" -"3285523712","3285523967","CH","CHE","SWITZERLAND" -"3285523968","3285524063","GB","GBR","UNITED KINGDOM" -"3285524064","3285524095","LU","LUX","LUXEMBOURG" -"3285524096","3285524159","ZA","ZAF","SOUTH AFRICA" -"3285524160","3285524175","GB","GBR","UNITED KINGDOM" -"3285524176","3285524191","CH","CHE","SWITZERLAND" -"3285524192","3285524223","BE","BEL","BELGIUM" -"3285524224","3285524351","GB","GBR","UNITED KINGDOM" -"3285524352","3285524479","BE","BEL","BELGIUM" -"3285524480","3285524735","DK","DNK","DENMARK" -"3285524736","3285524863","GB","GBR","UNITED KINGDOM" -"3285524864","3285524895","BE","BEL","BELGIUM" -"3285524896","3285524927","ES","ESP","SPAIN" -"3285524928","3285524991","GB","GBR","UNITED KINGDOM" -"3285524992","3285525247","BE","BEL","BELGIUM" -"3285525248","3285525503","CH","CHE","SWITZERLAND" -"3285525504","3285526015","BE","BEL","BELGIUM" -"3285526016","3285526023","IL","ISR","ISRAEL" -"3285526024","3285526035","BE","BEL","BELGIUM" -"3285526036","3285526039","FR","FRA","FRANCE" -"3285526040","3285526047","BE","BEL","BELGIUM" -"3285526048","3285526079","CZ","CZE","CZECH REPUBLIC" -"3285526080","3285526143","BE","BEL","BELGIUM" -"3285526144","3285526175","HU","HUN","HUNGARY" -"3285526176","3285526383","BE","BEL","BELGIUM" -"3285526384","3285526399","PT","PRT","PORTUGAL" -"3285526400","3285526527","CH","CHE","SWITZERLAND" -"3285526528","3285526783","ES","ESP","SPAIN" -"3285526784","3285526815","CH","CHE","SWITZERLAND" -"3285526816","3285526847","BE","BEL","BELGIUM" -"3285526848","3285526911","CH","CHE","SWITZERLAND" -"3285526912","3285527295","GB","GBR","UNITED KINGDOM" -"3285527296","3285527423","BE","BEL","BELGIUM" -"3285527424","3285527427","GB","GBR","UNITED KINGDOM" -"3285527428","3285527431","BE","BEL","BELGIUM" -"3285527432","3285527439","FR","FRA","FRANCE" -"3285527440","3285527455","LU","LUX","LUXEMBOURG" -"3285527456","3285527487","IL","ISR","ISRAEL" -"3285527488","3285527495","BE","BEL","BELGIUM" -"3285527496","3285527503","DE","DEU","GERMANY" -"3285527504","3285527519","JP","JPN","JAPAN" -"3285527520","3285527551","BE","BEL","BELGIUM" -"3285527552","3285527615","IL","ISR","ISRAEL" -"3285527616","3285527679","GB","GBR","UNITED KINGDOM" -"3285527680","3285527807","BE","BEL","BELGIUM" -"3285527808","3285527811","GB","GBR","UNITED KINGDOM" -"3285527812","3285527815","PL","POL","POLAND" -"3285527816","3285527855","BE","BEL","BELGIUM" -"3285527856","3285527871","FR","FRA","FRANCE" -"3285527872","3285527967","BE","BEL","BELGIUM" -"3285527968","3285527999","DE","DEU","GERMANY" -"3285528000","3285528319","BE","BEL","BELGIUM" -"3285528320","3285528447","DE","DEU","GERMANY" -"3285528448","3285528575","FR","FRA","FRANCE" -"3285528576","3285528799","BE","BEL","BELGIUM" -"3285528800","3285528831","GB","GBR","UNITED KINGDOM" -"3285528832","3285528847","BE","BEL","BELGIUM" -"3285528848","3285528863","ZA","ZAF","SOUTH AFRICA" -"3285528864","3285528883","BE","BEL","BELGIUM" -"3285528884","3285528887","FR","FRA","FRANCE" -"3285528888","3285528895","BE","BEL","BELGIUM" -"3285528896","3285528911","GB","GBR","UNITED KINGDOM" -"3285528912","3285528931","BE","BEL","BELGIUM" -"3285528932","3285528935","FR","FRA","FRANCE" -"3285528936","3285528943","BE","BEL","BELGIUM" -"3285528944","3285529071","GB","GBR","UNITED KINGDOM" -"3285529072","3285529151","BE","BEL","BELGIUM" -"3285529152","3285529183","DE","DEU","GERMANY" -"3285529184","3285529199","NL","NLD","NETHERLANDS" -"3285529200","3285529215","IL","ISR","ISRAEL" -"3285529216","3285529247","CH","CHE","SWITZERLAND" -"3285529248","3285529263","GB","GBR","UNITED KINGDOM" -"3285529264","3285529343","BE","BEL","BELGIUM" -"3285529344","3285529599","IT","ITA","ITALY" -"3285529600","3285529631","NO","NOR","NORWAY" -"3285529632","3285529663","IE","IRL","IRELAND" -"3285529664","3285529679","LI","LIE","LIECHTENSTEIN" -"3285529680","3285529687","FI","FIN","FINLAND" -"3285529688","3285529695","IT","ITA","ITALY" -"3285529696","3285529727","BE","BEL","BELGIUM" -"3285529728","3285529855","GB","GBR","UNITED KINGDOM" -"3285529856","3285529951","LU","LUX","LUXEMBOURG" -"3285529952","3285529983","GR","GRC","GREECE" -"3285529984","3285529999","CZ","CZE","CZECH REPUBLIC" -"3285530000","3285530143","BE","BEL","BELGIUM" -"3285530144","3285530175","GB","GBR","UNITED KINGDOM" -"3285530176","3285530183","NL","NLD","NETHERLANDS" -"3285530184","3285530215","BE","BEL","BELGIUM" -"3285530216","3285530223","GB","GBR","UNITED KINGDOM" -"3285530224","3285530271","FR","FRA","FRANCE" -"3285530272","3285530399","BE","BEL","BELGIUM" -"3285530400","3285530431","NL","NLD","NETHERLANDS" -"3285530432","3285530463","IT","ITA","ITALY" -"3285530464","3285530495","DE","DEU","GERMANY" -"3285530496","3285530559","AT","AUT","AUSTRIA" -"3285530560","3285530575","BE","BEL","BELGIUM" -"3285530576","3285530583","GB","GBR","UNITED KINGDOM" -"3285530584","3285530591","BE","BEL","BELGIUM" -"3285530592","3285530607","GB","GBR","UNITED KINGDOM" -"3285530608","3285530655","BE","BEL","BELGIUM" -"3285530656","3285530687","ZA","ZAF","SOUTH AFRICA" -"3285530688","3285530719","GB","GBR","UNITED KINGDOM" -"3285530720","3285530723","BE","BEL","BELGIUM" -"3285530724","3285530727","GB","GBR","UNITED KINGDOM" -"3285530728","3285530735","DE","DEU","GERMANY" -"3285530736","3285530739","GB","GBR","UNITED KINGDOM" -"3285530740","3285530743","BE","BEL","BELGIUM" -"3285530744","3285530751","GB","GBR","UNITED KINGDOM" -"3285530752","3285530767","IT","ITA","ITALY" -"3285530768","3285530783","DE","DEU","GERMANY" -"3285530784","3285530815","BE","BEL","BELGIUM" -"3285530816","3285530831","GB","GBR","UNITED KINGDOM" -"3285530832","3285530879","BE","BEL","BELGIUM" -"3285530880","3285530911","CH","CHE","SWITZERLAND" -"3285530912","3285530975","GB","GBR","UNITED KINGDOM" -"3285530976","3285530983","BE","BEL","BELGIUM" -"3285530984","3285530991","IE","IRL","IRELAND" -"3285530992","3285531007","GB","GBR","UNITED KINGDOM" -"3285531008","3285531023","FR","FRA","FRANCE" -"3285531024","3285531039","LU","LUX","LUXEMBOURG" -"3285531040","3285531071","ES","ESP","SPAIN" -"3285531072","3285531103","NL","NLD","NETHERLANDS" -"3285531104","3285531119","FR","FRA","FRANCE" -"3285531120","3285531263","BE","BEL","BELGIUM" -"3285531264","3285531295","GB","GBR","UNITED KINGDOM" -"3285531296","3285531303","BE","BEL","BELGIUM" -"3285531304","3285531311","GB","GBR","UNITED KINGDOM" -"3285531312","3285531327","DK","DNK","DENMARK" -"3285531328","3285531391","GB","GBR","UNITED KINGDOM" -"3285531392","3285531423","BE","BEL","BELGIUM" -"3285531424","3285531455","DE","DEU","GERMANY" -"3285531456","3285531495","BE","BEL","BELGIUM" -"3285531496","3285531503","NL","NLD","NETHERLANDS" -"3285531504","3285531519","FR","FRA","FRANCE" -"3285531520","3285531535","BE","BEL","BELGIUM" -"3285531536","3285531551","DE","DEU","GERMANY" -"3285531552","3285531567","IL","ISR","ISRAEL" -"3285531568","3285531615","BE","BEL","BELGIUM" -"3285531616","3285531647","NL","NLD","NETHERLANDS" -"3285531648","3285531903","BE","BEL","BELGIUM" -"3285531904","3285532159","GB","GBR","UNITED KINGDOM" -"3285532160","3285532223","BE","BEL","BELGIUM" -"3285532224","3285532231","ES","ESP","SPAIN" -"3285532232","3285532415","BE","BEL","BELGIUM" -"3285532416","3285532687","IT","ITA","ITALY" -"3285532688","3285532703","DE","DEU","GERMANY" -"3285532704","3285532711","BE","BEL","BELGIUM" -"3285532712","3285532719","RU","RUS","RUSSIAN FEDERATION" -"3285532720","3285532735","IT","ITA","ITALY" -"3285532736","3285532799","CH","CHE","SWITZERLAND" -"3285532800","3285532831","DE","DEU","GERMANY" -"3285532832","3285532847","FI","FIN","FINLAND" -"3285532848","3285532863","IT","ITA","ITALY" -"3285532864","3285532895","GB","GBR","UNITED KINGDOM" -"3285532896","3285532959","IT","ITA","ITALY" -"3285532960","3285533055","BE","BEL","BELGIUM" -"3285533056","3285533059","NL","NLD","NETHERLANDS" -"3285533060","3285533087","BE","BEL","BELGIUM" -"3285533088","3285533103","IT","ITA","ITALY" -"3285533104","3285533119","LU","LUX","LUXEMBOURG" -"3285533120","3285533127","BE","BEL","BELGIUM" -"3285533128","3285533135","SE","SWE","SWEDEN" -"3285533136","3285533151","GB","GBR","UNITED KINGDOM" -"3285533152","3285533183","BE","BEL","BELGIUM" -"3285533184","3285533311","IT","ITA","ITALY" -"3285533312","3285533343","SE","SWE","SWEDEN" -"3285533344","3285533367","BE","BEL","BELGIUM" -"3285533368","3285533375","CH","CHE","SWITZERLAND" -"3285533376","3285533471","GB","GBR","UNITED KINGDOM" -"3285533472","3285533503","BE","BEL","BELGIUM" -"3285533504","3285533519","GB","GBR","UNITED KINGDOM" -"3285533520","3285533535","SE","SWE","SWEDEN" -"3285533536","3285533543","BE","BEL","BELGIUM" -"3285533544","3285533551","DE","DEU","GERMANY" -"3285533552","3285533567","GB","GBR","UNITED KINGDOM" -"3285533568","3285533951","IT","ITA","ITALY" -"3285533952","3285534079","IL","ISR","ISRAEL" -"3285534080","3285534095","IT","ITA","ITALY" -"3285534096","3285534111","TR","TUR","TURKEY" -"3285534112","3285534143","BE","BEL","BELGIUM" -"3285534144","3285534207","IT","ITA","ITALY" -"3285534208","3285534463","PT","PRT","PORTUGAL" -"3285534464","3285534479","NL","NLD","NETHERLANDS" -"3285534480","3285534527","BE","BEL","BELGIUM" -"3285534528","3285534559","FR","FRA","FRANCE" -"3285534560","3285534591","IT","ITA","ITALY" -"3285534592","3285534627","GB","GBR","UNITED KINGDOM" -"3285534628","3285534639","BE","BEL","BELGIUM" -"3285534640","3285534655","GB","GBR","UNITED KINGDOM" -"3285534656","3285534719","IT","ITA","ITALY" -"3285534720","3285534751","GB","GBR","UNITED KINGDOM" -"3285534752","3285534767","BE","BEL","BELGIUM" -"3285534768","3285534783","GB","GBR","UNITED KINGDOM" -"3285534784","3285534799","DK","DNK","DENMARK" -"3285534800","3285534815","ES","ESP","SPAIN" -"3285534816","3285534831","HU","HUN","HUNGARY" -"3285534832","3285534927","IE","IRL","IRELAND" -"3285534928","3285534943","GB","GBR","UNITED KINGDOM" -"3285534944","3285534975","BE","BEL","BELGIUM" -"3285534976","3285535103","IT","ITA","ITALY" -"3285535104","3285535123","BE","BEL","BELGIUM" -"3285535124","3285535127","ES","ESP","SPAIN" -"3285535128","3285535131","BE","BEL","BELGIUM" -"3285535132","3285535135","NL","NLD","NETHERLANDS" -"3285535136","3285535139","FR","FRA","FRANCE" -"3285535140","3285535143","BE","BEL","BELGIUM" -"3285535144","3285535147","GR","GRC","GREECE" -"3285535148","3285535151","CZ","CZE","CZECH REPUBLIC" -"3285535152","3285535155","SE","SWE","SWEDEN" -"3285535156","3285535231","BE","BEL","BELGIUM" -"3285535232","3285535743","NO","NOR","NORWAY" -"3285535744","3285535871","IT","ITA","ITALY" -"3285535872","3285535903","FR","FRA","FRANCE" -"3285535904","3285535907","DK","DNK","DENMARK" -"3285535908","3285535911","NO","NOR","NORWAY" -"3285535912","3285535919","BE","BEL","BELGIUM" -"3285535920","3285535927","NL","NLD","NETHERLANDS" -"3285535928","3285535951","BE","BEL","BELGIUM" -"3285535952","3285535967","GB","GBR","UNITED KINGDOM" -"3285535968","3285535999","BE","BEL","BELGIUM" -"3285536000","3285536063","GB","GBR","UNITED KINGDOM" -"3285536064","3285536079","BE","BEL","BELGIUM" -"3285536080","3285536095","IT","ITA","ITALY" -"3285536096","3285536111","GB","GBR","UNITED KINGDOM" -"3285536112","3285536255","BE","BEL","BELGIUM" -"3285536256","3285536511","GB","GBR","UNITED KINGDOM" -"3285536512","3285536543","LU","LUX","LUXEMBOURG" -"3285536544","3285536575","DE","DEU","GERMANY" -"3285536576","3285536607","IL","ISR","ISRAEL" -"3285536608","3285536703","BE","BEL","BELGIUM" -"3285536704","3285536735","GB","GBR","UNITED KINGDOM" -"3285536736","3285536739","IT","ITA","ITALY" -"3285536740","3285536743","GB","GBR","UNITED KINGDOM" -"3285536744","3285536747","DE","DEU","GERMANY" -"3285536748","3285536751","AT","AUT","AUSTRIA" -"3285536752","3285536755","BE","BEL","BELGIUM" -"3285536756","3285536759","IL","ISR","ISRAEL" -"3285536760","3285536767","BE","BEL","BELGIUM" -"3285536768","3285536959","DK","DNK","DENMARK" -"3285536960","3285536991","ES","ESP","SPAIN" -"3285536992","3285537023","GB","GBR","UNITED KINGDOM" -"3285537024","3285537087","IL","ISR","ISRAEL" -"3285537088","3285537127","GB","GBR","UNITED KINGDOM" -"3285537128","3285537135","BE","BEL","BELGIUM" -"3285537136","3285537143","DK","DNK","DENMARK" -"3285537144","3285537151","GB","GBR","UNITED KINGDOM" -"3285537152","3285537167","DK","DNK","DENMARK" -"3285537168","3285537175","CH","CHE","SWITZERLAND" -"3285537176","3285537183","BE","BEL","BELGIUM" -"3285537184","3285537215","DE","DEU","GERMANY" -"3285537216","3285537231","GB","GBR","UNITED KINGDOM" -"3285537232","3285537535","BE","BEL","BELGIUM" -"3285537536","3285537599","RU","RUS","RUSSIAN FEDERATION" -"3285537600","3285537615","FR","FRA","FRANCE" -"3285537616","3285537631","BE","BEL","BELGIUM" -"3285537632","3285537663","SE","SWE","SWEDEN" -"3285537664","3285537727","DE","DEU","GERMANY" -"3285537728","3285537759","IT","ITA","ITALY" -"3285537760","3285537791","LU","LUX","LUXEMBOURG" -"3285537792","3285537919","NL","NLD","NETHERLANDS" -"3285537920","3285538047","LU","LUX","LUXEMBOURG" -"3285538048","3285538175","NL","NLD","NETHERLANDS" -"3285538176","3285538183","DE","DEU","GERMANY" -"3285538184","3285538187","LU","LUX","LUXEMBOURG" -"3285538188","3285538207","BE","BEL","BELGIUM" -"3285538208","3285538239","LU","LUX","LUXEMBOURG" -"3285538240","3285538271","NO","NOR","NORWAY" -"3285538272","3285538287","FI","FIN","FINLAND" -"3285538288","3285538295","CH","CHE","SWITZERLAND" -"3285538296","3285538299","BE","BEL","BELGIUM" -"3285538300","3285538319","GB","GBR","UNITED KINGDOM" -"3285538320","3285538327","LU","LUX","LUXEMBOURG" -"3285538328","3285538335","BE","BEL","BELGIUM" -"3285538336","3285538351","GB","GBR","UNITED KINGDOM" -"3285538352","3285538367","LU","LUX","LUXEMBOURG" -"3285538368","3285538375","BE","BEL","BELGIUM" -"3285538376","3285538383","AT","AUT","AUSTRIA" -"3285538384","3285538399","BE","BEL","BELGIUM" -"3285538400","3285538431","DK","DNK","DENMARK" -"3285538432","3285538623","BE","BEL","BELGIUM" -"3285538624","3285538687","LU","LUX","LUXEMBOURG" -"3285538688","3285538719","BE","BEL","BELGIUM" -"3285538720","3285538751","DE","DEU","GERMANY" -"3285538752","3285538755","IT","ITA","ITALY" -"3285538756","3285538759","FR","FRA","FRANCE" -"3285538760","3285538763","IE","IRL","IRELAND" -"3285538764","3285538767","BE","BEL","BELGIUM" -"3285538768","3285538783","CZ","CZE","CZECH REPUBLIC" -"3285538784","3285538815","BE","BEL","BELGIUM" -"3285538816","3285538847","CH","CHE","SWITZERLAND" -"3285538848","3285538879","BE","BEL","BELGIUM" -"3285538880","3285539071","ES","ESP","SPAIN" -"3285539072","3285539327","NL","NLD","NETHERLANDS" -"3285539328","3285539583","BE","BEL","BELGIUM" -"3285539584","3285539711","IE","IRL","IRELAND" -"3285539712","3285539839","GB","GBR","UNITED KINGDOM" -"3285539840","3285539967","IT","ITA","ITALY" -"3285539968","3285540031","GB","GBR","UNITED KINGDOM" -"3285540032","3285540095","ZA","ZAF","SOUTH AFRICA" -"3285540096","3285540103","GB","GBR","UNITED KINGDOM" -"3285540104","3285540107","IT","ITA","ITALY" -"3285540108","3285540111","BE","BEL","BELGIUM" -"3285540112","3285540127","IL","ISR","ISRAEL" -"3285540128","3285540159","ZA","ZAF","SOUTH AFRICA" -"3285540160","3285540191","FI","FIN","FINLAND" -"3285540192","3285540207","CH","CHE","SWITZERLAND" -"3285540208","3285540215","IE","IRL","IRELAND" -"3285540216","3285540219","BE","BEL","BELGIUM" -"3285540220","3285540223","ZA","ZAF","SOUTH AFRICA" -"3285540224","3285540351","CZ","CZE","CZECH REPUBLIC" -"3285540352","3285540415","PT","PRT","PORTUGAL" -"3285540416","3285540423","ZA","ZAF","SOUTH AFRICA" -"3285540424","3285540447","BE","BEL","BELGIUM" -"3285540448","3285540479","DE","DEU","GERMANY" -"3285540480","3285540607","NL","NLD","NETHERLANDS" -"3285540608","3285540623","FI","FIN","FINLAND" -"3285540624","3285540671","BE","BEL","BELGIUM" -"3285540672","3285540735","DE","DEU","GERMANY" -"3285540736","3285540863","BE","BEL","BELGIUM" -"3285540864","3285540871","FR","FRA","FRANCE" -"3285540872","3285540879","BE","BEL","BELGIUM" -"3285540880","3285541375","FR","FRA","FRANCE" -"3285541376","3285541391","GB","GBR","UNITED KINGDOM" -"3285541392","3285541439","FR","FRA","FRANCE" -"3285541440","3285541519","GB","GBR","UNITED KINGDOM" -"3285541520","3285541527","BG","BGR","BULGARIA" -"3285541528","3285541535","BE","BEL","BELGIUM" -"3285541536","3285541551","FR","FRA","FRANCE" -"3285541552","3285541567","BE","BEL","BELGIUM" -"3285541568","3285541599","GB","GBR","UNITED KINGDOM" -"3285541600","3285541631","BE","BEL","BELGIUM" -"3285541632","3285541663","ES","ESP","SPAIN" -"3285541664","3285541695","FR","FRA","FRANCE" -"3285541696","3285541759","BE","BEL","BELGIUM" -"3285541760","3285541887","FR","FRA","FRANCE" -"3285541888","3285541919","GB","GBR","UNITED KINGDOM" -"3285541920","3285541951","FR","FRA","FRANCE" -"3285541952","3285542079","DE","DEU","GERMANY" -"3285542080","3285542143","FR","FRA","FRANCE" -"3285542144","3285542399","BE","BEL","BELGIUM" -"3285542400","3285542655","GB","GBR","UNITED KINGDOM" -"3285542656","3285542911","ZA","ZAF","SOUTH AFRICA" -"3285542912","3285543167","IT","ITA","ITALY" -"3285543168","3285543423","NL","NLD","NETHERLANDS" -"3285543424","3285543679","SE","SWE","SWEDEN" -"3285543680","3285543743","AT","AUT","AUSTRIA" -"3285543744","3285543759","FR","FRA","FRANCE" -"3285543760","3285543775","BE","BEL","BELGIUM" -"3285543776","3285543791","IT","ITA","ITALY" -"3285543792","3285543795","ES","ESP","SPAIN" -"3285543796","3285543799","BE","BEL","BELGIUM" -"3285543800","3285543807","FR","FRA","FRANCE" -"3285543808","3285543871","NL","NLD","NETHERLANDS" -"3285543872","3285543935","FR","FRA","FRANCE" -"3285543936","3285544191","BE","BEL","BELGIUM" -"3285544192","3285544255","IL","ISR","ISRAEL" -"3285544256","3285544319","DE","DEU","GERMANY" -"3285544320","3285544335","ES","ESP","SPAIN" -"3285544336","3285544351","NL","NLD","NETHERLANDS" -"3285544352","3285544383","BE","BEL","BELGIUM" -"3285544384","3285544479","FR","FRA","FRANCE" -"3285544480","3285544511","ES","ESP","SPAIN" -"3285544512","3285544639","FR","FRA","FRANCE" -"3285544640","3285544703","BE","BEL","BELGIUM" -"3285544704","3285544959","FR","FRA","FRANCE" -"3285544960","3285545215","GB","GBR","UNITED KINGDOM" -"3285545216","3285545343","BE","BEL","BELGIUM" -"3285545344","3285545379","GB","GBR","UNITED KINGDOM" -"3285545380","3285545471","BE","BEL","BELGIUM" -"3285545472","3285545727","SE","SWE","SWEDEN" -"3285545728","3285545983","FI","FIN","FINLAND" -"3285545984","3285545999","IT","ITA","ITALY" -"3285546000","3285546007","BE","BEL","BELGIUM" -"3285546008","3285546015","IT","ITA","ITALY" -"3285546016","3285546063","ES","ESP","SPAIN" -"3285546064","3285546071","IT","ITA","ITALY" -"3285546072","3285546111","ES","ESP","SPAIN" -"3285546112","3285546239","AT","AUT","AUSTRIA" -"3285546240","3285546367","ZA","ZAF","SOUTH AFRICA" -"3285546368","3285546495","FR","FRA","FRANCE" -"3285546496","3285546559","NL","NLD","NETHERLANDS" -"3285546560","3285546623","BE","BEL","BELGIUM" -"3285546624","3285546671","FR","FRA","FRANCE" -"3285546672","3285546687","SE","SWE","SWEDEN" -"3285546688","3285546751","GB","GBR","UNITED KINGDOM" -"3285546752","3285547007","DK","DNK","DENMARK" -"3285547008","3285547023","AT","AUT","AUSTRIA" -"3285547024","3285547039","FR","FRA","FRANCE" -"3285547040","3285547071","AT","AUT","AUSTRIA" -"3285547072","3285547135","AU","AUS","AUSTRALIA" -"3285547136","3285547167","RU","RUS","RUSSIAN FEDERATION" -"3285547168","3285547199","LU","LUX","LUXEMBOURG" -"3285547200","3285547263","SE","SWE","SWEDEN" -"3285547264","3285547519","LU","LUX","LUXEMBOURG" -"3285547520","3285547775","NL","NLD","NETHERLANDS" -"3285547776","3285547903","ES","ESP","SPAIN" -"3285547904","3285548031","BE","BEL","BELGIUM" -"3285548032","3285548287","FR","FRA","FRANCE" -"3285548288","3285548543","DE","DEU","GERMANY" -"3285548544","3285548607","FR","FRA","FRANCE" -"3285548608","3285548639","LI","LIE","LIECHTENSTEIN" -"3285548640","3285548647","BE","BEL","BELGIUM" -"3285548648","3285548655","LI","LIE","LIECHTENSTEIN" -"3285548656","3285548735","GB","GBR","UNITED KINGDOM" -"3285548736","3285548767","BE","BEL","BELGIUM" -"3285548768","3285548799","LU","LUX","LUXEMBOURG" -"3285548800","3285548831","IT","ITA","ITALY" -"3285548832","3285548839","GB","GBR","UNITED KINGDOM" -"3285548840","3285548847","IL","ISR","ISRAEL" -"3285548848","3285548959","IT","ITA","ITALY" -"3285548960","3285549023","FR","FRA","FRANCE" -"3285549024","3285549039","PT","PRT","PORTUGAL" -"3285549040","3285549055","FR","FRA","FRANCE" -"3285549056","3285549183","DE","DEU","GERMANY" -"3285549184","3285549215","BE","BEL","BELGIUM" -"3285549216","3285549247","CH","CHE","SWITZERLAND" -"3285549248","3285549279","DE","DEU","GERMANY" -"3285549280","3285549311","GB","GBR","UNITED KINGDOM" -"3285549312","3285549695","DE","DEU","GERMANY" -"3285549696","3285549719","BE","BEL","BELGIUM" -"3285549720","3285549727","GB","GBR","UNITED KINGDOM" -"3285549728","3285549735","SE","SWE","SWEDEN" -"3285549736","3285549767","BE","BEL","BELGIUM" -"3285549768","3285549775","FI","FIN","FINLAND" -"3285549776","3285549791","DE","DEU","GERMANY" -"3285549792","3285549823","LU","LUX","LUXEMBOURG" -"3285549824","3285549871","DE","DEU","GERMANY" -"3285549872","3285549887","DK","DNK","DENMARK" -"3285549888","3285549951","DE","DEU","GERMANY" -"3285549952","3285550335","BE","BEL","BELGIUM" -"3285550336","3285550463","GB","GBR","UNITED KINGDOM" -"3285550464","3285550527","DE","DEU","GERMANY" -"3285550528","3285550591","IT","ITA","ITALY" -"3285550592","3285550847","FR","FRA","FRANCE" -"3285550848","3285550943","IT","ITA","ITALY" -"3285550944","3285550975","NL","NLD","NETHERLANDS" -"3285550976","3285551007","BE","BEL","BELGIUM" -"3285551008","3285551039","CH","CHE","SWITZERLAND" -"3285551040","3285551071","DE","DEU","GERMANY" -"3285551072","3285551103","BE","BEL","BELGIUM" -"3285551104","3285551359","DE","DEU","GERMANY" -"3285551360","3285551391","BE","BEL","BELGIUM" -"3285551392","3285551423","DE","DEU","GERMANY" -"3285551424","3285551487","DK","DNK","DENMARK" -"3285551488","3285551551","BE","BEL","BELGIUM" -"3285551552","3285551615","DE","DEU","GERMANY" -"3285551616","3285551647","GB","GBR","UNITED KINGDOM" -"3285551648","3285551679","FR","FRA","FRANCE" -"3285551680","3285551807","GB","GBR","UNITED KINGDOM" -"3285551808","3285551839","RU","RUS","RUSSIAN FEDERATION" -"3285551840","3285552127","BE","BEL","BELGIUM" -"3285552128","3285552191","DE","DEU","GERMANY" -"3285552192","3285552255","ZA","ZAF","SOUTH AFRICA" -"3285552256","3285552287","CZ","CZE","CZECH REPUBLIC" -"3285552288","3285552319","HU","HUN","HUNGARY" -"3285552320","3285552383","GB","GBR","UNITED KINGDOM" -"3285552384","3285552511","DE","DEU","GERMANY" -"3285552512","3285552639","GB","GBR","UNITED KINGDOM" -"3285552640","3285552927","DE","DEU","GERMANY" -"3285552928","3285552959","BE","BEL","BELGIUM" -"3285552960","3285553023","FR","FRA","FRANCE" -"3285553024","3285553039","BE","BEL","BELGIUM" -"3285553040","3285553055","EG","EGY","EGYPT" -"3285553056","3285553087","BE","BEL","BELGIUM" -"3285553088","3285553151","IT","ITA","ITALY" -"3285553152","3285553215","DE","DEU","GERMANY" -"3285553216","3285553247","BE","BEL","BELGIUM" -"3285553248","3285553263","PL","POL","POLAND" -"3285553264","3285553727","DE","DEU","GERMANY" -"3285553728","3285553759","CH","CHE","SWITZERLAND" -"3285553760","3285553767","GB","GBR","UNITED KINGDOM" -"3285553768","3285553775","ZA","ZAF","SOUTH AFRICA" -"3285553776","3285553791","FR","FRA","FRANCE" -"3285553792","3285553855","BE","BEL","BELGIUM" -"3285553856","3285553887","ZA","ZAF","SOUTH AFRICA" -"3285553888","3285553919","DE","DEU","GERMANY" -"3285553920","3285554047","CH","CHE","SWITZERLAND" -"3285554048","3285554127","DE","DEU","GERMANY" -"3285554128","3285554143","BE","BEL","BELGIUM" -"3285554144","3285554175","GB","GBR","UNITED KINGDOM" -"3285554176","3285554431","AT","AUT","AUSTRIA" -"3285554432","3285554687","BE","BEL","BELGIUM" -"3285554688","3285554703","DE","DEU","GERMANY" -"3285554704","3285554719","BE","BEL","BELGIUM" -"3285554720","3285554751","FR","FRA","FRANCE" -"3285554752","3285554815","BE","BEL","BELGIUM" -"3285554816","3285554943","CH","CHE","SWITZERLAND" -"3285554944","3285555199","LU","LUX","LUXEMBOURG" -"3285555200","3285555231","AT","AUT","AUSTRIA" -"3285555232","3285555263","NL","NLD","NETHERLANDS" -"3285555264","3285555327","FR","FRA","FRANCE" -"3285555328","3285555455","IL","ISR","ISRAEL" -"3285555456","3285555711","BE","BEL","BELGIUM" -"3285555712","3285555967","LU","LUX","LUXEMBOURG" -"3285555968","3285556223","IT","ITA","ITALY" -"3285556224","3285556479","BE","BEL","BELGIUM" -"3285556480","3285556735","DE","DEU","GERMANY" -"3285556736","3285556767","CH","CHE","SWITZERLAND" -"3285556768","3285556775","BE","BEL","BELGIUM" -"3285556776","3285556779","NL","NLD","NETHERLANDS" -"3285556780","3285556799","BE","BEL","BELGIUM" -"3285556800","3285556863","DE","DEU","GERMANY" -"3285556864","3285556991","BE","BEL","BELGIUM" -"3285556992","3285557055","GB","GBR","UNITED KINGDOM" -"3285557056","3285557119","NL","NLD","NETHERLANDS" -"3285557120","3285557247","DE","DEU","GERMANY" -"3285557248","3285557363","NL","NLD","NETHERLANDS" -"3285557364","3285557375","BE","BEL","BELGIUM" -"3285557376","3285557519","NL","NLD","NETHERLANDS" -"3285557520","3285557535","FI","FIN","FINLAND" -"3285557536","3285557575","NL","NLD","NETHERLANDS" -"3285557576","3285557579","SE","SWE","SWEDEN" -"3285557580","3285557583","BE","BEL","BELGIUM" -"3285557584","3285557599","NL","NLD","NETHERLANDS" -"3285557600","3285557631","BE","BEL","BELGIUM" -"3285557632","3285557791","NL","NLD","NETHERLANDS" -"3285557792","3285557823","NO","NOR","NORWAY" -"3285557824","3285557887","SE","SWE","SWEDEN" -"3285557888","3285557911","CH","CHE","SWITZERLAND" -"3285557912","3285557919","CZ","CZE","CZECH REPUBLIC" -"3285557920","3285557951","FR","FRA","FRANCE" -"3285557952","3285558015","DE","DEU","GERMANY" -"3285558016","3285558271","NL","NLD","NETHERLANDS" -"3285558272","3285558463","BE","BEL","BELGIUM" -"3285558464","3285558591","NL","NLD","NETHERLANDS" -"3285558592","3285558655","BE","BEL","BELGIUM" -"3285558656","3285558783","IT","ITA","ITALY" -"3285558784","3285559039","GB","GBR","UNITED KINGDOM" -"3285559040","3285559167","BE","BEL","BELGIUM" -"3285559168","3285559231","NL","NLD","NETHERLANDS" -"3285559232","3285559295","BE","BEL","BELGIUM" -"3285559296","3285559807","SE","SWE","SWEDEN" -"3285559808","3285559839","IE","IRL","IRELAND" -"3285559840","3285559871","CH","CHE","SWITZERLAND" -"3285559872","3285559887","BE","BEL","BELGIUM" -"3285559888","3285559903","SE","SWE","SWEDEN" -"3285559904","3285559919","NL","NLD","NETHERLANDS" -"3285559920","3285559935","SE","SWE","SWEDEN" -"3285559936","3285560063","NO","NOR","NORWAY" -"3285560064","3285560351","SE","SWE","SWEDEN" -"3285560352","3285560383","ES","ESP","SPAIN" -"3285560384","3285560447","SE","SWE","SWEDEN" -"3285560448","3285560479","LI","LIE","LIECHTENSTEIN" -"3285560480","3285560511","CH","CHE","SWITZERLAND" -"3285560512","3285560575","BE","BEL","BELGIUM" -"3285560576","3285560831","DE","DEU","GERMANY" -"3285560832","3285561215","SE","SWE","SWEDEN" -"3285561216","3285561343","NO","NOR","NORWAY" -"3285561344","3285561407","GB","GBR","UNITED KINGDOM" -"3285561408","3285561471","PL","POL","POLAND" -"3285561472","3285561599","DK","DNK","DENMARK" -"3285561600","3285561619","NO","NOR","NORWAY" -"3285561620","3285561623","DE","DEU","GERMANY" -"3285561624","3285561647","BE","BEL","BELGIUM" -"3285561648","3285561663","NO","NOR","NORWAY" -"3285561664","3285561727","BE","BEL","BELGIUM" -"3285561728","3285561791","NO","NOR","NORWAY" -"3285561792","3285561919","BE","BEL","BELGIUM" -"3285561920","3285561951","CH","CHE","SWITZERLAND" -"3285561952","3285561967","NO","NOR","NORWAY" -"3285561968","3285561983","BE","BEL","BELGIUM" -"3285561984","3285562111","FI","FIN","FINLAND" -"3285562112","3285562367","NO","NOR","NORWAY" -"3285562368","3285562751","FI","FIN","FINLAND" -"3285562752","3285562783","NL","NLD","NETHERLANDS" -"3285562784","3285562815","BE","BEL","BELGIUM" -"3285562816","3285562879","IT","ITA","ITALY" -"3285562880","3285562911","FI","FIN","FINLAND" -"3285562912","3285562943","BE","BEL","BELGIUM" -"3285562944","3285562975","DE","DEU","GERMANY" -"3285562976","3285562991","FI","FIN","FINLAND" -"3285562992","3285562999","BE","BEL","BELGIUM" -"3285563000","3285563007","GB","GBR","UNITED KINGDOM" -"3285563008","3285563135","SE","SWE","SWEDEN" -"3285563136","3285563391","FI","FIN","FINLAND" -"3285563392","3285563455","BE","BEL","BELGIUM" -"3285563456","3285563471","NL","NLD","NETHERLANDS" -"3285563472","3285563487","BE","BEL","BELGIUM" -"3285563488","3285563519","SE","SWE","SWEDEN" -"3285563520","3285563647","PL","POL","POLAND" -"3285563648","3285563903","CH","CHE","SWITZERLAND" -"3285563904","3285564031","SE","SWE","SWEDEN" -"3285564032","3285564159","FI","FIN","FINLAND" -"3285564160","3285564415","GB","GBR","UNITED KINGDOM" -"3285564416","3285564511","CH","CHE","SWITZERLAND" -"3285564512","3285564543","NO","NOR","NORWAY" -"3285564544","3285564671","BE","BEL","BELGIUM" -"3285564672","3285564735","CH","CHE","SWITZERLAND" -"3285564736","3285564751","FR","FRA","FRANCE" -"3285564752","3285564767","BE","BEL","BELGIUM" -"3285564768","3285564799","SE","SWE","SWEDEN" -"3285564800","3285564927","BE","BEL","BELGIUM" -"3285564928","3285565183","FR","FRA","FRANCE" -"3285565184","3285565439","NL","NLD","NETHERLANDS" -"3285565440","3285565951","GB","GBR","UNITED KINGDOM" -"3285565952","3285566015","FR","FRA","FRANCE" -"3285566016","3285566031","IT","ITA","ITALY" -"3285566032","3285566047","BE","BEL","BELGIUM" -"3285566048","3285566079","CH","CHE","SWITZERLAND" -"3285566080","3285566143","FR","FRA","FRANCE" -"3285566144","3285566207","BE","BEL","BELGIUM" -"3285566208","3285566495","RU","RUS","RUSSIAN FEDERATION" -"3285566496","3285566511","SE","SWE","SWEDEN" -"3285566512","3285566527","FI","FIN","FINLAND" -"3285566528","3285566559","CH","CHE","SWITZERLAND" -"3285566560","3285566575","BE","BEL","BELGIUM" -"3285566576","3285566591","CH","CHE","SWITZERLAND" -"3285566592","3285566655","NL","NLD","NETHERLANDS" -"3285566656","3285566847","BE","BEL","BELGIUM" -"3285566848","3285566975","FR","FRA","FRANCE" -"3285566976","3285567231","GB","GBR","UNITED KINGDOM" -"3285567232","3285567487","PT","PRT","PORTUGAL" -"3285567488","3285568511","NL","NLD","NETHERLANDS" -"3285568512","3285568671","DE","DEU","GERMANY" -"3285568672","3285568703","CH","CHE","SWITZERLAND" -"3285568704","3285568751","BE","BEL","BELGIUM" -"3285568752","3285569023","DE","DEU","GERMANY" -"3285569024","3285569407","BE","BEL","BELGIUM" -"3285569408","3285569535","GB","GBR","UNITED KINGDOM" -"3285569536","3285569791","DE","DEU","GERMANY" -"3285569792","3285570047","FI","FIN","FINLAND" -"3285570048","3285570175","FR","FRA","FRANCE" -"3285570176","3285570207","BE","BEL","BELGIUM" -"3285570208","3285570223","PL","POL","POLAND" -"3285570224","3285570239","NL","NLD","NETHERLANDS" -"3285570240","3285570559","BE","BEL","BELGIUM" -"3285570560","3285570815","SE","SWE","SWEDEN" -"3285570816","3285571071","IT","ITA","ITALY" -"3285571072","3285571327","DE","DEU","GERMANY" -"3285571328","3285571583","FI","FIN","FINLAND" -"3285571584","3285571711","FR","FRA","FRANCE" -"3285571712","3285571775","SE","SWE","SWEDEN" -"3285571776","3285571807","BE","BEL","BELGIUM" -"3285571808","3285571839","DE","DEU","GERMANY" -"3285571840","3285571903","BE","BEL","BELGIUM" -"3285571904","3285571967","SE","SWE","SWEDEN" -"3285571968","3285572095","BE","BEL","BELGIUM" -"3285572096","3285572223","DE","DEU","GERMANY" -"3285572224","3285572351","FI","FIN","FINLAND" -"3285572352","3285572367","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3285572368","3285572383","ES","ESP","SPAIN" -"3285572384","3285572447","BE","BEL","BELGIUM" -"3285572448","3285572479","CH","CHE","SWITZERLAND" -"3285572480","3285572607","FR","FRA","FRANCE" -"3285572608","3285572863","DK","DNK","DENMARK" -"3285572864","3285573119","IT","ITA","ITALY" -"3285573120","3285573375","SE","SWE","SWEDEN" -"3285573376","3285573535","BE","BEL","BELGIUM" -"3285573536","3285573567","CH","CHE","SWITZERLAND" -"3285573568","3285573631","FR","FRA","FRANCE" -"3285573632","3285573887","NL","NLD","NETHERLANDS" -"3285573888","3285573951","IL","ISR","ISRAEL" -"3285573952","3285574143","BE","BEL","BELGIUM" -"3285574144","3285574399","RU","RUS","RUSSIAN FEDERATION" -"3285574400","3285574655","IL","ISR","ISRAEL" -"3285574656","3285574911","GB","GBR","UNITED KINGDOM" -"3285574912","3285575167","IL","ISR","ISRAEL" -"3285575168","3285575423","ES","ESP","SPAIN" -"3285575424","3285575679","IL","ISR","ISRAEL" -"3285575680","3285575935","BE","BEL","BELGIUM" -"3285575936","3285575999","DK","DNK","DENMARK" -"3285576000","3285576063","BE","BEL","BELGIUM" -"3285576064","3285576127","FR","FRA","FRANCE" -"3285576128","3285576159","BE","BEL","BELGIUM" -"3285576160","3285576191","DK","DNK","DENMARK" -"3285576192","3285576447","BE","BEL","BELGIUM" -"3285576448","3285576703","CZ","CZE","CZECH REPUBLIC" -"3285576704","3285576959","HU","HUN","HUNGARY" -"3285576960","3285577215","BE","BEL","BELGIUM" -"3285577216","3285577471","ZA","ZAF","SOUTH AFRICA" -"3285577472","3285577599","IT","ITA","ITALY" -"3285577600","3285577983","BE","BEL","BELGIUM" -"3285577984","3285578111","IT","ITA","ITALY" -"3285578112","3285578239","DE","DEU","GERMANY" -"3285578240","3285578367","BE","BEL","BELGIUM" -"3285578368","3285578431","FR","FRA","FRANCE" -"3285578432","3285578495","BE","BEL","BELGIUM" -"3285578496","3285578751","DE","DEU","GERMANY" -"3285578752","3285579007","BE","BEL","BELGIUM" -"3285579008","3285579519","ES","ESP","SPAIN" -"3285579520","3285579775","FR","FRA","FRANCE" -"3285579776","3285580031","US","USA","UNITED STATES" -"3285580032","3285580287","HU","HUN","HUNGARY" -"3285580288","3285580415","DE","DEU","GERMANY" -"3285580416","3285580543","BE","BEL","BELGIUM" -"3285580544","3285580547","NL","NLD","NETHERLANDS" -"3285580548","3285580651","BE","BEL","BELGIUM" -"3285580652","3285580655","SE","SWE","SWEDEN" -"3285580656","3285580799","BE","BEL","BELGIUM" -"3285580800","3285580831","SE","SWE","SWEDEN" -"3285580832","3285580847","PL","POL","POLAND" -"3285580848","3285580927","BE","BEL","BELGIUM" -"3285580928","3285581055","ZA","ZAF","SOUTH AFRICA" -"3285581056","3285581503","BE","BEL","BELGIUM" -"3285581504","3285581567","AT","AUT","AUSTRIA" -"3285581568","3285581599","FR","FRA","FRANCE" -"3285581600","3285581615","GB","GBR","UNITED KINGDOM" -"3285581616","3285581695","FR","FRA","FRANCE" -"3285581696","3285581759","LV","LVA","LATVIA" -"3285581760","3285581823","FR","FRA","FRANCE" -"3285581824","3285595135","DE","DEU","GERMANY" -"3285595136","3285595167","CZ","CZE","CZECH REPUBLIC" -"3285595168","3285595175","US","USA","UNITED STATES" -"3285595176","3285595263","DE","DEU","GERMANY" -"3285595264","3285595423","US","USA","UNITED STATES" -"3285595424","3285596159","DE","DEU","GERMANY" -"3285596160","3285596191","US","USA","UNITED STATES" -"3285596192","3285596223","DE","DEU","GERMANY" -"3285596224","3285596255","US","USA","UNITED STATES" -"3285596256","3285596287","DE","DEU","GERMANY" -"3285596288","3285596319","US","USA","UNITED STATES" -"3285596320","3285596351","DE","DEU","GERMANY" -"3285596352","3285596383","FR","FRA","FRANCE" -"3285596384","3285597183","DE","DEU","GERMANY" -"3285597184","3285597215","US","USA","UNITED STATES" -"3285597216","3285606399","DE","DEU","GERMANY" -"3285606400","3285614591","GB","GBR","UNITED KINGDOM" -"3285614592","3285630975","TR","TUR","TURKEY" -"3285630976","3285633023","UA","UKR","UKRAINE" -"3285633024","3285635071","NO","NOR","NORWAY" -"3285635072","3285637119","UA","UKR","UKRAINE" -"3285637120","3285638143","DE","DEU","GERMANY" -"3285638144","3285639167","UA","UKR","UKRAINE" -"3285639168","3285641215","FR","FRA","FRANCE" -"3285641216","3285642239","RU","RUS","RUSSIAN FEDERATION" -"3285642240","3285643263","UA","UKR","UKRAINE" -"3285643264","3285645311","FR","FRA","FRANCE" -"3285645312","3285647359","BG","BGR","BULGARIA" -"3285647360","3285712895","DK","DNK","DENMARK" -"3285712896","3285721087","GB","GBR","UNITED KINGDOM" -"3285721088","3285729279","SE","SWE","SWEDEN" -"3285729280","3285734143","CH","CHE","SWITZERLAND" -"3285734144","3285734159","GB","GBR","UNITED KINGDOM" -"3285734160","3285734335","CH","CHE","SWITZERLAND" -"3285734336","3285734351","LI","LIE","LIECHTENSTEIN" -"3285734352","3285737471","CH","CHE","SWITZERLAND" -"3285737472","3285745663","PL","POL","POLAND" -"3285745664","3285753855","IT","ITA","ITALY" -"3285753856","3285762047","LV","LVA","LATVIA" -"3285762048","3285762559","FR","FRA","FRANCE" -"3285762560","3285763071","RU","RUS","RUSSIAN FEDERATION" -"3285763072","3285763583","GB","GBR","UNITED KINGDOM" -"3285763584","3285764095","DE","DEU","GERMANY" -"3285764608","3285765119","RU","RUS","RUSSIAN FEDERATION" -"3285765120","3285766143","UA","UKR","UKRAINE" -"3285766144","3285766655","DE","DEU","GERMANY" -"3285766656","3285767679","UA","UKR","UKRAINE" -"3285767680","3285768191","FR","FRA","FRANCE" -"3285768192","3285768703","RU","RUS","RUSSIAN FEDERATION" -"3285768704","3285769215","CH","CHE","SWITZERLAND" -"3285769216","3285769727","DE","DEU","GERMANY" -"3285769728","3285770239","RO","ROM","ROMANIA" -"3285770240","3285770495","NL","NLD","NETHERLANDS" -"3285770496","3285770751","US","USA","UNITED STATES" -"3285770752","3285771007","UA","UKR","UKRAINE" -"3285771008","3285771263","CH","CHE","SWITZERLAND" -"3285771264","3285771519","BG","BGR","BULGARIA" -"3285771520","3285771775","AT","AUT","AUSTRIA" -"3285771776","3285772031","RO","ROM","ROMANIA" -"3285772032","3285772287","SE","SWE","SWEDEN" -"3285772288","3285772543","TR","TUR","TURKEY" -"3285772544","3285772799","LT","LTU","LITHUANIA" -"3285772800","3285773055","MT","MLT","MALTA" -"3285773056","3285773311","DE","DEU","GERMANY" -"3285773312","3285773567","LV","LVA","LATVIA" -"3285773568","3285773823","KG","KGZ","KYRGYZSTAN" -"3285773824","3285774079","RU","RUS","RUSSIAN FEDERATION" -"3285774080","3285774335","RO","ROM","ROMANIA" -"3285774336","3285774591","CZ","CZE","CZECH REPUBLIC" -"3285774592","3285774847","RU","RUS","RUSSIAN FEDERATION" -"3285774848","3285775103","FR","FRA","FRANCE" -"3285775104","3285775359","GB","GBR","UNITED KINGDOM" -"3285775360","3285775615","RU","RUS","RUSSIAN FEDERATION" -"3285775616","3285775871","NG","NGA","NIGERIA" -"3285775872","3285776127","NL","NLD","NETHERLANDS" -"3285776128","3285776383","RO","ROM","ROMANIA" -"3285776384","3285776639","UA","UKR","UKRAINE" -"3285776640","3285776895","FR","FRA","FRANCE" -"3285776896","3285777151","PL","POL","POLAND" -"3285777152","3285777407","HU","HUN","HUNGARY" -"3285777408","3285777663","IL","ISR","ISRAEL" -"3285777920","3285778175","PL","POL","POLAND" -"3285778176","3285778431","DE","DEU","GERMANY" -"3285778432","3285843967","GB","GBR","UNITED KINGDOM" -"3285843968","3285852159","LU","LUX","LUXEMBOURG" -"3285852160","3285860351","GB","GBR","UNITED KINGDOM" -"3285860352","3285868543","FI","FIN","FINLAND" -"3285868544","3285876735","IE","IRL","IRELAND" -"3285876736","3285909503","RU","RUS","RUSSIAN FEDERATION" -"3285909504","3285910015","GB","GBR","UNITED KINGDOM" -"3285910272","3285910303","ES","ESP","SPAIN" -"3285910400","3285910407","IT","ITA","ITALY" -"3285910408","3285910463","GB","GBR","UNITED KINGDOM" -"3285910464","3285910527","ES","ESP","SPAIN" -"3285910528","3285911551","GB","GBR","UNITED KINGDOM" -"3285912576","3285913087","GB","GBR","UNITED KINGDOM" -"3285913088","3285913215","ES","ESP","SPAIN" -"3285913344","3285913599","GB","GBR","UNITED KINGDOM" -"3285915648","3285915903","GB","GBR","UNITED KINGDOM" -"3285915904","3285916159","AT","AUT","AUSTRIA" -"3285916160","3285916415","FR","FRA","FRANCE" -"3285916416","3285916671","YE","YEM","YEMEN" -"3285916672","3285916703","BH","BHR","BAHRAIN" -"3285916704","3285916711","DE","DEU","GERMANY" -"3285916712","3285916719","CY","CYP","CYPRUS" -"3285916720","3285916735","ES","ESP","SPAIN" -"3285916736","3285916799","GB","GBR","UNITED KINGDOM" -"3285916928","3285917183","YE","YEM","YEMEN" -"3285917184","3285917439","ES","ESP","SPAIN" -"3285917440","3285917695","YE","YEM","YEMEN" -"3285918976","3285919231","YE","YEM","YEMEN" -"3285919232","3285919487","GB","GBR","UNITED KINGDOM" -"3285919488","3285919743","UA","UKR","UKRAINE" -"3285919744","3285921791","QA","QAT","QATAR" -"3285921792","3285921823","CZ","CZE","CZECH REPUBLIC" -"3285921824","3285921855","GB","GBR","UNITED KINGDOM" -"3285921920","3285921983","GB","GBR","UNITED KINGDOM" -"3285922112","3285922175","FR","FRA","FRANCE" -"3285922176","3285922183","GB","GBR","UNITED KINGDOM" -"3285922184","3285922191","RU","RUS","RUSSIAN FEDERATION" -"3285922192","3285922207","DE","DEU","GERMANY" -"3285922208","3285922239","ES","ESP","SPAIN" -"3285922240","3285922303","RU","RUS","RUSSIAN FEDERATION" -"3285922560","3285922815","GB","GBR","UNITED KINGDOM" -"3285922816","3285923327","KW","KWT","KUWAIT" -"3285923328","3285924415","ES","ESP","SPAIN" -"3285924416","3285924431","DE","DEU","GERMANY" -"3285924432","3285924479","GB","GBR","UNITED KINGDOM" -"3285924480","3285924863","ES","ESP","SPAIN" -"3285925888","3285926143","NL","NLD","NETHERLANDS" -"3285926144","3285926399","YE","YEM","YEMEN" -"3285926400","3285926407","GB","GBR","UNITED KINGDOM" -"3285926408","3285926415","ES","ESP","SPAIN" -"3285926416","3285926431","GB","GBR","UNITED KINGDOM" -"3285926432","3285926463","CH","CHE","SWITZERLAND" -"3285926848","3285926911","GB","GBR","UNITED KINGDOM" -"3285926912","3285927423","DE","DEU","GERMANY" -"3285927424","3285927679","GB","GBR","UNITED KINGDOM" -"3285927680","3285927935","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3285928064","3285928191","ES","ESP","SPAIN" -"3285928192","3285928207","PL","POL","POLAND" -"3285928208","3285928223","GB","GBR","UNITED KINGDOM" -"3285928224","3285928255","DE","DEU","GERMANY" -"3285928256","3285928271","GB","GBR","UNITED KINGDOM" -"3285928280","3285928287","DE","DEU","GERMANY" -"3285928448","3285928959","ES","ESP","SPAIN" -"3285929984","3285930495","GB","GBR","UNITED KINGDOM" -"3285930560","3285930575","ES","ESP","SPAIN" -"3285930576","3285930623","GB","GBR","UNITED KINGDOM" -"3285930632","3285930639","GB","GBR","UNITED KINGDOM" -"3285930640","3285930655","ES","ESP","SPAIN" -"3285930680","3285930687","DE","DEU","GERMANY" -"3285930752","3285931007","GB","GBR","UNITED KINGDOM" -"3285932032","3285932287","NL","NLD","NETHERLANDS" -"3285932288","3285932799","GB","GBR","UNITED KINGDOM" -"3285932800","3285933055","ES","ESP","SPAIN" -"3285933056","3285933311","DE","DEU","GERMANY" -"3285933312","3285933567","ES","ESP","SPAIN" -"3285933568","3285934079","DE","DEU","GERMANY" -"3285934080","3285934591","GB","GBR","UNITED KINGDOM" -"3285935104","3285935615","GB","GBR","UNITED KINGDOM" -"3285938176","3285938431","ES","ESP","SPAIN" -"3285938560","3285938607","GB","GBR","UNITED KINGDOM" -"3285938632","3285938639","ES","ESP","SPAIN" -"3285938640","3285938655","GB","GBR","UNITED KINGDOM" -"3285938688","3285938943","ES","ESP","SPAIN" -"3285938952","3285938959","NL","NLD","NETHERLANDS" -"3285938976","3285939039","ES","ESP","SPAIN" -"3285939200","3285939711","ES","ESP","SPAIN" -"3285940224","3285940735","ES","ESP","SPAIN" -"3285940736","3285941247","GB","GBR","UNITED KINGDOM" -"3285942656","3285942783","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3285942784","3285943039","ES","ESP","SPAIN" -"3285943040","3285943295","SE","SWE","SWEDEN" -"3285943296","3285943551","ES","ESP","SPAIN" -"3285943552","3285943559","DK","DNK","DENMARK" -"3285943568","3285943575","ES","ESP","SPAIN" -"3285943576","3285943583","DE","DEU","GERMANY" -"3285943584","3285943615","ES","ESP","SPAIN" -"3285943680","3285943807","GB","GBR","UNITED KINGDOM" -"3285944320","3285944831","US","USA","UNITED STATES" -"3285944832","3285945343","DK","DNK","DENMARK" -"3285945344","3285945599","ES","ESP","SPAIN" -"3285945664","3285945695","FR","FRA","FRANCE" -"3285945696","3285945727","GB","GBR","UNITED KINGDOM" -"3285945856","3285946111","GB","GBR","UNITED KINGDOM" -"3285946112","3285946367","ES","ESP","SPAIN" -"3285946368","3285946879","GB","GBR","UNITED KINGDOM" -"3285947392","3285947647","DE","DEU","GERMANY" -"3285947648","3285947903","ES","ESP","SPAIN" -"3285947904","3285948159","NL","NLD","NETHERLANDS" -"3285948160","3285948671","GB","GBR","UNITED KINGDOM" -"3285948672","3285948927","SA","SAU","SAUDI ARABIA" -"3285949184","3285949439","ES","ESP","SPAIN" -"3285949696","3285949823","ES","ESP","SPAIN" -"3285949856","3285949887","ES","ESP","SPAIN" -"3285949952","3285950463","ES","ESP","SPAIN" -"3285950464","3285950719","GB","GBR","UNITED KINGDOM" -"3285950720","3285950783","US","USA","UNITED STATES" -"3285950976","3285951231","NL","NLD","NETHERLANDS" -"3285951232","3285951487","IT","ITA","ITALY" -"3285951648","3285951679","ES","ESP","SPAIN" -"3285951744","3285951999","GB","GBR","UNITED KINGDOM" -"3285952000","3285952255","IT","ITA","ITALY" -"3285952256","3285952511","SA","SAU","SAUDI ARABIA" -"3285955584","3285955839","DE","DEU","GERMANY" -"3285955840","3285956095","ES","ESP","SPAIN" -"3285956096","3285956351","FR","FRA","FRANCE" -"3285956352","3285956607","DE","DEU","GERMANY" -"3285956608","3285956863","GB","GBR","UNITED KINGDOM" -"3285956864","3285957631","PT","PRT","PORTUGAL" -"3285957632","3285957887","PL","POL","POLAND" -"3285957888","3285958143","GB","GBR","UNITED KINGDOM" -"3285958848","3285958895","NL","NLD","NETHERLANDS" -"3285958912","3285959039","GB","GBR","UNITED KINGDOM" -"3285959040","3285959167","DE","DEU","GERMANY" -"3285959168","3285959423","ES","ESP","SPAIN" -"3285959424","3285959935","GB","GBR","UNITED KINGDOM" -"3285959936","3285960191","ES","ESP","SPAIN" -"3285960192","3285960447","FR","FRA","FRANCE" -"3285960448","3285960703","GB","GBR","UNITED KINGDOM" -"3285962752","3285963775","DE","DEU","GERMANY" -"3285963776","3285964287","GB","GBR","UNITED KINGDOM" -"3285964288","3285964799","FR","FRA","FRANCE" -"3285966848","3285967103","FR","FRA","FRANCE" -"3285967104","3285967359","PL","POL","POLAND" -"3285967360","3285967615","ES","ESP","SPAIN" -"3285967616","3285968383","BE","BEL","BELGIUM" -"3285968384","3285968639","ES","ESP","SPAIN" -"3285968640","3285968895","PL","POL","POLAND" -"3285971200","3285971455","FR","FRA","FRANCE" -"3285971456","3285971711","DE","DEU","GERMANY" -"3285971712","3285971967","GB","GBR","UNITED KINGDOM" -"3285971968","3285972223","ES","ESP","SPAIN" -"3285972480","3285972735","PL","POL","POLAND" -"3285972736","3285972991","FR","FRA","FRANCE" -"3285972992","3285975039","GB","GBR","UNITED KINGDOM" -"3285975040","3286106111","FR","FRA","FRANCE" -"3286106112","3286106687","EE","EST","ESTONIA" -"3286106688","3286106691","FI","FIN","FINLAND" -"3286106692","3286114303","EE","EST","ESTONIA" -"3286114304","3286122495","BA","BIH","BOSNIA AND HERZEGOVINA" -"3286122496","3286130687","BY","BLR","BELARUS" -"3286130688","3286131711","RS","SRB","SERBIA" -"3286131712","3286132735","PL","POL","POLAND" -"3286132736","3286133759","RO","ROM","ROMANIA" -"3286133760","3286134783","IE","IRL","IRELAND" -"3286134784","3286135807","PL","POL","POLAND" -"3286135808","3286136831","NL","NLD","NETHERLANDS" -"3286136832","3286137855","AT","AUT","AUSTRIA" -"3286137856","3286138879","UA","UKR","UKRAINE" -"3286138880","3286155263","RU","RUS","RUSSIAN FEDERATION" -"3286155264","3286171647","DE","DEU","GERMANY" -"3286171648","3286237183","IT","ITA","ITALY" -"3286237184","3286243583","GB","GBR","UNITED KINGDOM" -"3286243584","3286243839","US","USA","UNITED STATES" -"3286243840","3286245887","GB","GBR","UNITED KINGDOM" -"3286245888","3286246143","US","USA","UNITED STATES" -"3286246144","3286254167","GB","GBR","UNITED KINGDOM" -"3286254168","3286254175","NL","NLD","NETHERLANDS" -"3286254176","3286264879","GB","GBR","UNITED KINGDOM" -"3286264880","3286264895","NL","NLD","NETHERLANDS" -"3286264896","3286279423","GB","GBR","UNITED KINGDOM" -"3286279424","3286279679","US","USA","UNITED STATES" -"3286279680","3286289919","GB","GBR","UNITED KINGDOM" -"3286289920","3286290175","US","USA","UNITED STATES" -"3286290176","3286291807","GB","GBR","UNITED KINGDOM" -"3286291808","3286291823","US","USA","UNITED STATES" -"3286291824","3286302719","GB","GBR","UNITED KINGDOM" -"3286302720","3286310911","NO","NOR","NORWAY" -"3286310912","3286311423","CH","CHE","SWITZERLAND" -"3286311424","3286311935","NL","NLD","NETHERLANDS" -"3286311936","3286312447","PL","POL","POLAND" -"3286312448","3286312959","RU","RUS","RUSSIAN FEDERATION" -"3286312960","3286313983","RO","ROM","ROMANIA" -"3286313984","3286314495","CH","CHE","SWITZERLAND" -"3286314496","3286315007","IL","ISR","ISRAEL" -"3286315008","3286315519","PL","POL","POLAND" -"3286315520","3286316031","DE","DEU","GERMANY" -"3286316032","3286316543","UA","UKR","UKRAINE" -"3286316544","3286317055","NL","NLD","NETHERLANDS" -"3286317056","3286317567","RU","RUS","RUSSIAN FEDERATION" -"3286317568","3286318079","RO","ROM","ROMANIA" -"3286318080","3286318591","CH","CHE","SWITZERLAND" -"3286319104","3286320127","RO","ROM","ROMANIA" -"3286320128","3286321151","PL","POL","POLAND" -"3286321152","3286322175","CZ","CZE","CZECH REPUBLIC" -"3286322176","3286323199","PL","POL","POLAND" -"3286323200","3286324223","GB","GBR","UNITED KINGDOM" -"3286324224","3286325247","RO","ROM","ROMANIA" -"3286325248","3286326271","DK","DNK","DENMARK" -"3286326272","3286327295","PL","POL","POLAND" -"3286328320","3286329343","NL","NLD","NETHERLANDS" -"3286329344","3286330367","DE","DEU","GERMANY" -"3286330368","3286331391","RO","ROM","ROMANIA" -"3286331392","3286332415","UA","UKR","UKRAINE" -"3286332416","3286333439","CH","CHE","SWITZERLAND" -"3286333440","3286334463","PL","POL","POLAND" -"3286334464","3286335487","BG","BGR","BULGARIA" -"3286335488","3286336511","RU","RUS","RUSSIAN FEDERATION" -"3286336512","3286337535","DE","DEU","GERMANY" -"3286338560","3286339583","RO","ROM","ROMANIA" -"3286339584","3286340607","UA","UKR","UKRAINE" -"3286340608","3286342655","DE","DEU","GERMANY" -"3286342656","3286343679","UA","UKR","UKRAINE" -"3286343680","3286344703","RU","RUS","RUSSIAN FEDERATION" -"3286344704","3286345727","BE","BEL","BELGIUM" -"3286345728","3286346751","IT","ITA","ITALY" -"3286346752","3286347775","UA","UKR","UKRAINE" -"3286347776","3286348799","PA","PAN","PANAMA" -"3286348800","3286349823","PL","POL","POLAND" -"3286349824","3286350847","SE","SWE","SWEDEN" -"3286350848","3286351871","GB","GBR","UNITED KINGDOM" -"3286351872","3286352895","CH","CHE","SWITZERLAND" -"3286352896","3286353919","DE","DEU","GERMANY" -"3286353920","3286354943","LI","LIE","LIECHTENSTEIN" -"3286354944","3286355967","FR","FRA","FRANCE" -"3286355968","3286356991","DE","DEU","GERMANY" -"3286356992","3286358015","PL","POL","POLAND" -"3286358016","3286359039","GB","GBR","UNITED KINGDOM" -"3286359040","3286360063","PT","PRT","PORTUGAL" -"3286360064","3286361087","IT","ITA","ITALY" -"3286361088","3286362111","UA","UKR","UKRAINE" -"3286362112","3286363135","RU","RUS","RUSSIAN FEDERATION" -"3286363136","3286364159","AT","AUT","AUSTRIA" -"3286364160","3286365183","DE","DEU","GERMANY" -"3286365184","3286367231","PL","POL","POLAND" -"3286367232","3286368255","BG","BGR","BULGARIA" -"3286368256","3286376447","CH","CHE","SWITZERLAND" -"3286376448","3286384639","GB","GBR","UNITED KINGDOM" -"3286384640","3286401023","DE","DEU","GERMANY" -"3286401024","3286409215","GB","GBR","UNITED KINGDOM" -"3286409216","3286417407","DE","DEU","GERMANY" -"3286417664","3286417919","IT","ITA","ITALY" -"3286425600","3286433791","KW","KWT","KUWAIT" -"3286433792","3286499327","DE","DEU","GERMANY" -"3286499328","3286564863","HU","HUN","HUNGARY" -"3286564864","3286566143","AE","ARE","UNITED ARAB EMIRATES" -"3286566144","3286566271","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"3286566272","3286566655","AE","ARE","UNITED ARAB EMIRATES" -"3286566656","3286567423","KW","KWT","KUWAIT" -"3286567424","3286568191","AE","ARE","UNITED ARAB EMIRATES" -"3286568192","3286568703","KW","KWT","KUWAIT" -"3286568704","3286571007","AE","ARE","UNITED ARAB EMIRATES" -"3286571008","3286571775","KW","KWT","KUWAIT" -"3286571776","3286630399","AE","ARE","UNITED ARAB EMIRATES" -"3286630400","3286638591","BG","BGR","BULGARIA" -"3286638592","3286646783","AT","AUT","AUSTRIA" -"3286646784","3286654975","RU","RUS","RUSSIAN FEDERATION" -"3286654976","3286655231","UA","UKR","UKRAINE" -"3286655232","3286655487","KZ","KAZ","KAZAKHSTAN" -"3286655488","3286655743","LT","LTU","LITHUANIA" -"3286655744","3286655999","UA","UKR","UKRAINE" -"3286656000","3286656255","CH","CHE","SWITZERLAND" -"3286656256","3286656511","RU","RUS","RUSSIAN FEDERATION" -"3286656512","3286656767","GR","GRC","GREECE" -"3286656768","3286657023","UA","UKR","UKRAINE" -"3286657024","3286657279","BE","BEL","BELGIUM" -"3286657280","3286657535","ES","ESP","SPAIN" -"3286657536","3286657791","HU","HUN","HUNGARY" -"3286657792","3286658047","RU","RUS","RUSSIAN FEDERATION" -"3286658048","3286658303","US","USA","UNITED STATES" -"3286658304","3286658559","RU","RUS","RUSSIAN FEDERATION" -"3286658560","3286658815","NL","NLD","NETHERLANDS" -"3286658816","3286659071","RU","RUS","RUSSIAN FEDERATION" -"3286659072","3286659327","UA","UKR","UKRAINE" -"3286659328","3286659583","PL","POL","POLAND" -"3286659584","3286659839","DE","DEU","GERMANY" -"3286659840","3286660095","UA","UKR","UKRAINE" -"3286660096","3286660351","DE","DEU","GERMANY" -"3286660352","3286660607","CH","CHE","SWITZERLAND" -"3286660608","3286660863","GB","GBR","UNITED KINGDOM" -"3286660864","3286661119","UA","UKR","UKRAINE" -"3286661120","3286661375","PL","POL","POLAND" -"3286661376","3286661631","SI","SVN","SLOVENIA" -"3286661632","3286661887","GB","GBR","UNITED KINGDOM" -"3286661888","3286662143","RU","RUS","RUSSIAN FEDERATION" -"3286662144","3286662399","DE","DEU","GERMANY" -"3286662400","3286662655","UA","UKR","UKRAINE" -"3286662656","3286662911","DE","DEU","GERMANY" -"3286662912","3286671359","UA","UKR","UKRAINE" -"3286671360","3286679551","AT","AUT","AUSTRIA" -"3286679552","3286681631","IT","ITA","ITALY" -"3286681632","3286681647","DE","DEU","GERMANY" -"3286681648","3286681655","GB","GBR","UNITED KINGDOM" -"3286681656","3286681659","BE","BEL","BELGIUM" -"3286681660","3286681663","ES","ESP","SPAIN" -"3286681664","3286681695","FR","FRA","FRANCE" -"3286681696","3286681699","ES","ESP","SPAIN" -"3286681700","3286681711","IT","ITA","ITALY" -"3286681712","3286681727","CH","CHE","SWITZERLAND" -"3286681728","3286681743","HK","HKG","HONG KONG" -"3286681744","3286681751","ES","ESP","SPAIN" -"3286681752","3286681767","IT","ITA","ITALY" -"3286681768","3286681775","DE","DEU","GERMANY" -"3286681776","3286681815","IT","ITA","ITALY" -"3286681816","3286681823","FR","FRA","FRANCE" -"3286681824","3286682431","IT","ITA","ITALY" -"3286682432","3286682463","FR","FRA","FRANCE" -"3286682464","3286682495","RO","ROM","ROMANIA" -"3286682496","3286682623","IT","ITA","ITALY" -"3286682624","3286682879","SM","SMR","SAN MARINO" -"3286682880","3286695935","IT","ITA","ITALY" -"3286695936","3286761471","DK","DNK","DENMARK" -"3286761472","3286761727","DE","DEU","GERMANY" -"3286761728","3286769663","GB","GBR","UNITED KINGDOM" -"3286769664","3286769919","DE","DEU","GERMANY" -"3286769920","3286773759","GB","GBR","UNITED KINGDOM" -"3286773760","3286777855","DE","DEU","GERMANY" -"3286777856","3286781951","FR","FRA","FRANCE" -"3286781952","3286782207","GB","GBR","UNITED KINGDOM" -"3286782208","3286782463","DE","DEU","GERMANY" -"3286782464","3286782535","GB","GBR","UNITED KINGDOM" -"3286782536","3286782543","FR","FRA","FRANCE" -"3286782544","3286782575","GB","GBR","UNITED KINGDOM" -"3286782576","3286782583","DE","DEU","GERMANY" -"3286782584","3286783599","GB","GBR","UNITED KINGDOM" -"3286783600","3286783615","CH","CHE","SWITZERLAND" -"3286783616","3286783679","DE","DEU","GERMANY" -"3286783680","3286784511","GB","GBR","UNITED KINGDOM" -"3286784512","3286784767","CH","CHE","SWITZERLAND" -"3286784768","3286785023","DE","DEU","GERMANY" -"3286785024","3286787071","GB","GBR","UNITED KINGDOM" -"3286787072","3286787327","FR","FRA","FRANCE" -"3286787328","3286787583","DE","DEU","GERMANY" -"3286787584","3286788095","GB","GBR","UNITED KINGDOM" -"3286788096","3286788351","DE","DEU","GERMANY" -"3286788352","3286788607","FR","FRA","FRANCE" -"3286788608","3286789119","GB","GBR","UNITED KINGDOM" -"3286789120","3286789631","DE","DEU","GERMANY" -"3286789632","3286790143","FR","FRA","FRANCE" -"3286790144","3286790655","GB","GBR","UNITED KINGDOM" -"3286790656","3286790911","DE","DEU","GERMANY" -"3286790912","3286791679","GB","GBR","UNITED KINGDOM" -"3286791680","3286791935","AT","AUT","AUSTRIA" -"3286791936","3286794239","GB","GBR","UNITED KINGDOM" -"3286794240","3286892543","DE","DEU","GERMANY" -"3286892544","3286893055","LI","LIE","LIECHTENSTEIN" -"3286893056","3286893567","RU","RUS","RUSSIAN FEDERATION" -"3286893568","3286894591","UA","UKR","UKRAINE" -"3286894592","3286895103","RO","ROM","ROMANIA" -"3286895104","3286895615","GB","GBR","UNITED KINGDOM" -"3286895616","3286896127","DE","DEU","GERMANY" -"3286896128","3286896639","SE","SWE","SWEDEN" -"3286896640","3286897151","PL","POL","POLAND" -"3286897152","3286897663","AT","AUT","AUSTRIA" -"3286897664","3286898175","PL","POL","POLAND" -"3286898176","3286898687","HR","HRV","CROATIA" -"3286899200","3286899711","IL","ISR","ISRAEL" -"3286899712","3286900223","HU","HUN","HUNGARY" -"3286900224","3286900735","RO","ROM","ROMANIA" -"3286900736","3286900991","BE","BEL","BELGIUM" -"3286900992","3286901503","DE","DEU","GERMANY" -"3286901504","3286902015","FR","FRA","FRANCE" -"3286902016","3286902527","CH","CHE","SWITZERLAND" -"3286902528","3286902783","GB","GBR","UNITED KINGDOM" -"3286902784","3286903039","PL","POL","POLAND" -"3286903296","3286903551","FR","FRA","FRANCE" -"3286903552","3286903807","CH","CHE","SWITZERLAND" -"3286903808","3286904063","AT","AUT","AUSTRIA" -"3286904064","3286904319","BE","BEL","BELGIUM" -"3286904320","3286904575","FR","FRA","FRANCE" -"3286904576","3286904831","PT","PRT","PORTUGAL" -"3286904832","3286905087","GB","GBR","UNITED KINGDOM" -"3286905088","3286905343","GR","GRC","GREECE" -"3286905344","3286905599","DE","DEU","GERMANY" -"3286905600","3286905855","MT","MLT","MALTA" -"3286905856","3286906111","TR","TUR","TURKEY" -"3286906112","3286906367","BE","BEL","BELGIUM" -"3286906368","3286906879","RO","ROM","ROMANIA" -"3286906880","3286907135","RU","RUS","RUSSIAN FEDERATION" -"3286907136","3286907391","SE","SWE","SWEDEN" -"3286907392","3286907647","AT","AUT","AUSTRIA" -"3286907648","3286907903","ES","ESP","SPAIN" -"3286907904","3286908159","CH","CHE","SWITZERLAND" -"3286908160","3286908415","UA","UKR","UKRAINE" -"3286908416","3286908671","FR","FRA","FRANCE" -"3286908672","3286908927","PL","POL","POLAND" -"3286908928","3286909951","CH","CHE","SWITZERLAND" -"3286909952","3286913023","UA","UKR","UKRAINE" -"3286913024","3286914047","DE","DEU","GERMANY" -"3286914048","3286915071","BG","BGR","BULGARIA" -"3286915072","3286916095","FR","FRA","FRANCE" -"3286916096","3286917119","DE","DEU","GERMANY" -"3286917120","3286917631","RU","RUS","RUSSIAN FEDERATION" -"3286918144","3286919167","AT","AUT","AUSTRIA" -"3286919168","3286920191","DE","DEU","GERMANY" -"3286920192","3286921215","RU","RUS","RUSSIAN FEDERATION" -"3286921216","3286922239","UA","UKR","UKRAINE" -"3286922240","3286923263","GB","GBR","UNITED KINGDOM" -"3286924288","3286925311","UA","UKR","UKRAINE" -"3286925312","3286925567","DE","DEU","GERMANY" -"3286925568","3286925823","CH","CHE","SWITZERLAND" -"3286925824","3286926079","RO","ROM","ROMANIA" -"3286926080","3286926335","LV","LVA","LATVIA" -"3286926336","3286926591","UA","UKR","UKRAINE" -"3286926592","3286926847","DE","DEU","GERMANY" -"3286926848","3286927103","PT","PRT","PORTUGAL" -"3286927104","3286927359","FI","FIN","FINLAND" -"3286927360","3286927615","DE","DEU","GERMANY" -"3286927616","3286927871","SI","SVN","SLOVENIA" -"3286927872","3286928383","DE","DEU","GERMANY" -"3286928384","3286928639","ES","ESP","SPAIN" -"3286928640","3286928895","PL","POL","POLAND" -"3286928896","3286929151","FI","FIN","FINLAND" -"3286929152","3286929407","DE","DEU","GERMANY" -"3286929408","3286929663","LV","LVA","LATVIA" -"3286929664","3286929919","BE","BEL","BELGIUM" -"3286929920","3286930175","SE","SWE","SWEDEN" -"3286930176","3286930431","RU","RUS","RUSSIAN FEDERATION" -"3286930432","3286930687","UA","UKR","UKRAINE" -"3286930688","3286930943","DE","DEU","GERMANY" -"3286930944","3286931199","SE","SWE","SWEDEN" -"3286931200","3286931455","AT","AUT","AUSTRIA" -"3286931456","3286931711","DE","DEU","GERMANY" -"3286931712","3286931967","GB","GBR","UNITED KINGDOM" -"3286931968","3286932223","FR","FRA","FRANCE" -"3286932224","3286932479","DK","DNK","DENMARK" -"3286932480","3286932735","GB","GBR","UNITED KINGDOM" -"3286932736","3286932991","AT","AUT","AUSTRIA" -"3286932992","3286933503","IL","ISR","ISRAEL" -"3286933504","3286933759","DK","DNK","DENMARK" -"3286933760","3286934015","RO","ROM","ROMANIA" -"3286934016","3286934271","BE","BEL","BELGIUM" -"3286934272","3286934527","CH","CHE","SWITZERLAND" -"3286934528","3286934783","PL","POL","POLAND" -"3286934784","3286935039","TR","TUR","TURKEY" -"3286935040","3286935551","ES","ESP","SPAIN" -"3286935808","3286936063","RO","ROM","ROMANIA" -"3286936064","3286936319","RU","RUS","RUSSIAN FEDERATION" -"3286936320","3286936575","IT","ITA","ITALY" -"3286936576","3286936831","RO","ROM","ROMANIA" -"3286936832","3286937087","NL","NLD","NETHERLANDS" -"3286937088","3286937343","UA","UKR","UKRAINE" -"3286937344","3286937599","GB","GBR","UNITED KINGDOM" -"3286937600","3286937855","CH","CHE","SWITZERLAND" -"3286937856","3286938111","RO","ROM","ROMANIA" -"3286938112","3286938367","DE","DEU","GERMANY" -"3286938368","3286938623","ES","ESP","SPAIN" -"3286938624","3286938879","CH","CHE","SWITZERLAND" -"3286938880","3286939391","RO","ROM","ROMANIA" -"3286939392","3286939647","DE","DEU","GERMANY" -"3286939648","3286939903","BE","BEL","BELGIUM" -"3286940160","3286940415","BE","BEL","BELGIUM" -"3286940416","3286940671","CH","CHE","SWITZERLAND" -"3286940672","3286940927","RO","ROM","ROMANIA" -"3286940928","3286941183","PL","POL","POLAND" -"3286941184","3286941439","RU","RUS","RUSSIAN FEDERATION" -"3286941440","3286941695","RO","ROM","ROMANIA" -"3286941696","3286942719","DE","DEU","GERMANY" -"3286942720","3286943743","FI","FIN","FINLAND" -"3286943744","3286944767","UA","UKR","UKRAINE" -"3286944768","3286945791","CZ","CZE","CZECH REPUBLIC" -"3286945792","3286946815","RU","RUS","RUSSIAN FEDERATION" -"3286946816","3286947839","UA","UKR","UKRAINE" -"3286947840","3286948863","DE","DEU","GERMANY" -"3286948864","3286949887","UA","UKR","UKRAINE" -"3286949888","3286950911","CH","CHE","SWITZERLAND" -"3286950912","3286951935","DE","DEU","GERMANY" -"3286951936","3286952959","IT","ITA","ITALY" -"3286952960","3286953983","BG","BGR","BULGARIA" -"3286953984","3286955007","GB","GBR","UNITED KINGDOM" -"3286955008","3286956031","DE","DEU","GERMANY" -"3286956032","3286957055","FR","FRA","FRANCE" -"3286958080","3287023615","ES","ESP","SPAIN" -"3287023616","3287154687","FI","FIN","FINLAND" -"3287154688","3287162879","BE","BEL","BELGIUM" -"3287162880","3287171071","DE","DEU","GERMANY" -"3287171072","3287171583","LT","LTU","LITHUANIA" -"3287171584","3287172095","PL","POL","POLAND" -"3287172096","3287172607","DE","DEU","GERMANY" -"3287172608","3287173119","PL","POL","POLAND" -"3287173120","3287173631","RU","RUS","RUSSIAN FEDERATION" -"3287173632","3287174143","NL","NLD","NETHERLANDS" -"3287174144","3287174655","SE","SWE","SWEDEN" -"3287174656","3287175167","GB","GBR","UNITED KINGDOM" -"3287175168","3287176191","RO","ROM","ROMANIA" -"3287176192","3287176703","BG","BGR","BULGARIA" -"3287176704","3287177215","NL","NLD","NETHERLANDS" -"3287177216","3287178239","RO","ROM","ROMANIA" -"3287178240","3287178751","UA","UKR","UKRAINE" -"3287178752","3287179263","RO","ROM","ROMANIA" -"3287179264","3287180287","FR","FRA","FRANCE" -"3287180288","3287181311","RU","RUS","RUSSIAN FEDERATION" -"3287181312","3287182335","UZ","UZB","UZBEKISTAN" -"3287182336","3287185407","UA","UKR","UKRAINE" -"3287185408","3287186431","SE","SWE","SWEDEN" -"3287186432","3287187455","FI","FIN","FINLAND" -"3287187456","3287196671","DE","DEU","GERMANY" -"3287196672","3287198719","PL","POL","POLAND" -"3287198720","3287199743","GB","GBR","UNITED KINGDOM" -"3287199744","3287201791","UA","UKR","UKRAINE" -"3287201792","3287202815","PL","POL","POLAND" -"3287202816","3287203839","UA","UKR","UKRAINE" -"3287203840","3287204895","FI","FIN","FINLAND" -"3287204896","3287204951","EE","EST","ESTONIA" -"3287204952","3287204959","FI","FIN","FINLAND" -"3287204960","3287205055","EE","EST","ESTONIA" -"3287205056","3287212031","FI","FIN","FINLAND" -"3287212032","3287212543","DE","DEU","GERMANY" -"3287212544","3287212799","FR","FRA","FRANCE" -"3287212800","3287213311","PL","POL","POLAND" -"3287213312","3287213567","FR","FRA","FRANCE" -"3287213568","3287214079","RU","RUS","RUSSIAN FEDERATION" -"3287214080","3287214335","GB","GBR","UNITED KINGDOM" -"3287214336","3287214847","DE","DEU","GERMANY" -"3287214848","3287215103","IT","ITA","ITALY" -"3287215104","3287215359","PL","POL","POLAND" -"3287215360","3287215615","GB","GBR","UNITED KINGDOM" -"3287215616","3287215871","DE","DEU","GERMANY" -"3287215872","3287216127","RU","RUS","RUSSIAN FEDERATION" -"3287216128","3287216639","GB","GBR","UNITED KINGDOM" -"3287216640","3287216895","MD","MDA","REPUBLIC OF MOLDOVA" -"3287216896","3287217151","GB","GBR","UNITED KINGDOM" -"3287217152","3287217407","NL","NLD","NETHERLANDS" -"3287217408","3287217663","PL","POL","POLAND" -"3287217664","3287217919","RU","RUS","RUSSIAN FEDERATION" -"3287217920","3287218175","PL","POL","POLAND" -"3287218176","3287218431","DE","DEU","GERMANY" -"3287218432","3287218687","GB","GBR","UNITED KINGDOM" -"3287218688","3287218943","RU","RUS","RUSSIAN FEDERATION" -"3287218944","3287219199","AT","AUT","AUSTRIA" -"3287219200","3287219455","DE","DEU","GERMANY" -"3287219456","3287219711","CH","CHE","SWITZERLAND" -"3287219712","3287220223","SE","SWE","SWEDEN" -"3287220224","3287223807","RU","RUS","RUSSIAN FEDERATION" -"3287223808","3287224063","UZ","UZB","UZBEKISTAN" -"3287224064","3287259375","RU","RUS","RUSSIAN FEDERATION" -"3287259376","3287259383","DK","DNK","DENMARK" -"3287259384","3287267191","RU","RUS","RUSSIAN FEDERATION" -"3287267192","3287267201","KZ","KAZ","KAZAKHSTAN" -"3287267202","3287271119","RU","RUS","RUSSIAN FEDERATION" -"3287271120","3287271127","UZ","UZB","UZBEKISTAN" -"3287271128","3287285759","RU","RUS","RUSSIAN FEDERATION" -"3287285760","3287416831","NL","NLD","NETHERLANDS" -"3287416832","3287425023","RU","RUS","RUSSIAN FEDERATION" -"3287425024","3287427759","SE","SWE","SWEDEN" -"3287427760","3287427775","GB","GBR","UNITED KINGDOM" -"3287427776","3287433215","SE","SWE","SWEDEN" -"3287433216","3287433727","NL","NLD","NETHERLANDS" -"3287433728","3287434239","DE","DEU","GERMANY" -"3287434240","3287434751","PL","POL","POLAND" -"3287434752","3287435263","GB","GBR","UNITED KINGDOM" -"3287435264","3287435775","NL","NLD","NETHERLANDS" -"3287435776","3287436287","GB","GBR","UNITED KINGDOM" -"3287436288","3287436799","RS","SRB","SERBIA" -"3287436800","3287437311","RO","ROM","ROMANIA" -"3287437312","3287437823","UA","UKR","UKRAINE" -"3287437824","3287438335","RU","RUS","RUSSIAN FEDERATION" -"3287438336","3287438847","CH","CHE","SWITZERLAND" -"3287438848","3287439359","GB","GBR","UNITED KINGDOM" -"3287439360","3287439871","RO","ROM","ROMANIA" -"3287439872","3287440895","PL","POL","POLAND" -"3287440896","3287441407","UA","UKR","UKRAINE" -"3287441408","3287442431","NL","NLD","NETHERLANDS" -"3287442432","3287442943","PL","POL","POLAND" -"3287442944","3287443967","DE","DEU","GERMANY" -"3287443968","3287444479","BG","BGR","BULGARIA" -"3287444480","3287444991","PL","POL","POLAND" -"3287444992","3287445503","DE","DEU","GERMANY" -"3287445504","3287446527","UA","UKR","UKRAINE" -"3287446528","3287447039","PL","POL","POLAND" -"3287447040","3287447551","IL","ISR","ISRAEL" -"3287447552","3287448063","DK","DNK","DENMARK" -"3287448064","3287448575","GB","GBR","UNITED KINGDOM" -"3287448576","3287449087","PL","POL","POLAND" -"3287449088","3287449599","BG","BGR","BULGARIA" -"3287449600","3287450111","MD","MDA","REPUBLIC OF MOLDOVA" -"3287450112","3287450623","DK","DNK","DENMARK" -"3287450624","3287451135","SE","SWE","SWEDEN" -"3287451136","3287451647","PL","POL","POLAND" -"3287451648","3287452159","ES","ESP","SPAIN" -"3287452672","3287453183","CH","CHE","SWITZERLAND" -"3287453184","3287454207","RU","RUS","RUSSIAN FEDERATION" -"3287454208","3287454719","SE","SWE","SWEDEN" -"3287454720","3287455743","UA","UKR","UKRAINE" -"3287455744","3287456255","NL","NLD","NETHERLANDS" -"3287456256","3287457279","GB","GBR","UNITED KINGDOM" -"3287457280","3287457791","RO","ROM","ROMANIA" -"3287457792","3287458047","NL","NLD","NETHERLANDS" -"3287458048","3287458303","UA","UKR","UKRAINE" -"3287458304","3287458559","DE","DEU","GERMANY" -"3287458560","3287459327","CH","CHE","SWITZERLAND" -"3287459328","3287459583","AT","AUT","AUSTRIA" -"3287459584","3287459839","DE","DEU","GERMANY" -"3287459840","3287460095","AT","AUT","AUSTRIA" -"3287460096","3287460351","ME","MNE","MONTENEGRO" -"3287460352","3287460607","CY","CYP","CYPRUS" -"3287460608","3287460863","NL","NLD","NETHERLANDS" -"3287460864","3287461119","BE","BEL","BELGIUM" -"3287461120","3287461375","DE","DEU","GERMANY" -"3287461376","3287461631","CH","CHE","SWITZERLAND" -"3287461632","3287461887","AT","AUT","AUSTRIA" -"3287461888","3287462143","PL","POL","POLAND" -"3287462144","3287462399","SA","SAU","SAUDI ARABIA" -"3287462400","3287462655","BE","BEL","BELGIUM" -"3287462656","3287462911","UA","UKR","UKRAINE" -"3287462912","3287463167","FR","FRA","FRANCE" -"3287463168","3287463423","IT","ITA","ITALY" -"3287463424","3287463679","RO","ROM","ROMANIA" -"3287463680","3287463935","PL","POL","POLAND" -"3287463936","3287464191","AT","AUT","AUSTRIA" -"3287464192","3287464447","SK","SVK","SLOVAKIA" -"3287464448","3287464703","PL","POL","POLAND" -"3287464704","3287464959","NL","NLD","NETHERLANDS" -"3287464960","3287465215","SA","SAU","SAUDI ARABIA" -"3287465216","3287465471","NO","NOR","NORWAY" -"3287465472","3287465727","DE","DEU","GERMANY" -"3287465728","3287465983","FR","FRA","FRANCE" -"3287465984","3287467007","DK","DNK","DENMARK" -"3287467008","3287468031","SA","SAU","SAUDI ARABIA" -"3287469056","3287471103","DE","DEU","GERMANY" -"3287471104","3287472127","GB","GBR","UNITED KINGDOM" -"3287472128","3287473151","FI","FIN","FINLAND" -"3287473152","3287474175","GB","GBR","UNITED KINGDOM" -"3287474176","3287476223","DE","DEU","GERMANY" -"3287476224","3287477247","PL","POL","POLAND" -"3287477248","3287478271","GB","GBR","UNITED KINGDOM" -"3287478272","3287479295","BG","BGR","BULGARIA" -"3287479296","3287480319","RO","ROM","ROMANIA" -"3287480320","3287481343","AT","AUT","AUSTRIA" -"3287481344","3287482367","PL","POL","POLAND" -"3287482368","3287499279","DE","DEU","GERMANY" -"3287499280","3287499287","FR","FRA","FRANCE" -"3287499288","3287499295","US","USA","UNITED STATES" -"3287499296","3287499439","DE","DEU","GERMANY" -"3287499440","3287499471","GB","GBR","UNITED KINGDOM" -"3287499472","3287499487","DE","DEU","GERMANY" -"3287499488","3287499503","GB","GBR","UNITED KINGDOM" -"3287499504","3287501359","DE","DEU","GERMANY" -"3287501360","3287501367","NL","NLD","NETHERLANDS" -"3287501368","3287507983","DE","DEU","GERMANY" -"3287507984","3287507991","FR","FRA","FRANCE" -"3287507992","3287515375","DE","DEU","GERMANY" -"3287515376","3287515383","CZ","CZE","CZECH REPUBLIC" -"3287515384","3287523303","DE","DEU","GERMANY" -"3287523304","3287523311","US","USA","UNITED STATES" -"3287523312","3287526303","DE","DEU","GERMANY" -"3287526304","3287526311","LU","LUX","LUXEMBOURG" -"3287526312","3287534807","DE","DEU","GERMANY" -"3287534808","3287534815","IT","ITA","ITALY" -"3287534816","3287541087","DE","DEU","GERMANY" -"3287541088","3287541095","CZ","CZE","CZECH REPUBLIC" -"3287541096","3287542815","DE","DEU","GERMANY" -"3287542816","3287542831","US","USA","UNITED STATES" -"3287542832","3287544647","DE","DEU","GERMANY" -"3287544648","3287544655","CH","CHE","SWITZERLAND" -"3287544656","3287548927","DE","DEU","GERMANY" -"3287548928","3287549439","UA","UKR","UKRAINE" -"3287549440","3287549951","SE","SWE","SWEDEN" -"3287549952","3287550463","UA","UKR","UKRAINE" -"3287550464","3287550975","DE","DEU","GERMANY" -"3287550976","3287551487","LT","LTU","LITHUANIA" -"3287551488","3287551999","RO","ROM","ROMANIA" -"3287552000","3287552511","GB","GBR","UNITED KINGDOM" -"3287552512","3287553023","RO","ROM","ROMANIA" -"3287553024","3287553535","FR","FRA","FRANCE" -"3287553536","3287554047","IL","ISR","ISRAEL" -"3287554048","3287554559","RU","RUS","RUSSIAN FEDERATION" -"3287554560","3287555071","PL","POL","POLAND" -"3287555072","3287555583","GB","GBR","UNITED KINGDOM" -"3287555584","3287556095","FR","FRA","FRANCE" -"3287556096","3287564287","TR","TUR","TURKEY" -"3287564288","3287572479","FI","FIN","FINLAND" -"3287572480","3287578863","DE","DEU","GERMANY" -"3287578864","3287578879","LI","LIE","LIECHTENSTEIN" -"3287578880","3287580671","DE","DEU","GERMANY" -"3287580672","3287588863","LV","LVA","LATVIA" -"3287588864","3287597055","BE","BEL","BELGIUM" -"3287597056","3287605247","GI","GIB","GIBRALTAR" -"3287605248","3287630335","DE","DEU","GERMANY" -"3287630336","3287631359","PL","POL","POLAND" -"3287631360","3287631871","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3287631872","3287632383","RU","RUS","RUSSIAN FEDERATION" -"3287632384","3287632895","SE","SWE","SWEDEN" -"3287632896","3287633407","RU","RUS","RUSSIAN FEDERATION" -"3287633408","3287633919","SK","SVK","SLOVAKIA" -"3287633920","3287634431","UA","UKR","UKRAINE" -"3287634432","3287634943","RO","ROM","ROMANIA" -"3287634944","3287635455","PL","POL","POLAND" -"3287635456","3287635967","DE","DEU","GERMANY" -"3287635968","3287636479","RO","ROM","ROMANIA" -"3287636480","3287636991","IE","IRL","IRELAND" -"3287636992","3287637503","AT","AUT","AUSTRIA" -"3287637504","3287638015","PL","POL","POLAND" -"3287638528","3287639039","DE","DEU","GERMANY" -"3287639040","3287639551","GB","GBR","UNITED KINGDOM" -"3287639552","3287640063","RU","RUS","RUSSIAN FEDERATION" -"3287640064","3287640575","DE","DEU","GERMANY" -"3287640576","3287641087","SI","SVN","SLOVENIA" -"3287641600","3287642111","FI","FIN","FINLAND" -"3287642112","3287642623","UA","UKR","UKRAINE" -"3287642624","3287643135","BE","BEL","BELGIUM" -"3287643136","3287643647","IT","ITA","ITALY" -"3287643648","3287644671","UA","UKR","UKRAINE" -"3287644672","3287645183","NL","NLD","NETHERLANDS" -"3287646208","3287662591","PT","PRT","PORTUGAL" -"3287662592","3287662847","DE","DEU","GERMANY" -"3287662848","3287663103","DK","DNK","DENMARK" -"3287663104","3287663359","LV","LVA","LATVIA" -"3287663360","3287663615","GB","GBR","UNITED KINGDOM" -"3287663616","3287663871","ES","ESP","SPAIN" -"3287663872","3287664127","PT","PRT","PORTUGAL" -"3287664128","3287664383","PL","POL","POLAND" -"3287664384","3287664639","NL","NLD","NETHERLANDS" -"3287664640","3287664895","UA","UKR","UKRAINE" -"3287664896","3287665151","GB","GBR","UNITED KINGDOM" -"3287665152","3287665407","NO","NOR","NORWAY" -"3287665408","3287665919","PL","POL","POLAND" -"3287665920","3287666175","AT","AUT","AUSTRIA" -"3287666176","3287666431","RU","RUS","RUSSIAN FEDERATION" -"3287666432","3287666687","DK","DNK","DENMARK" -"3287666688","3287666943","SI","SVN","SLOVENIA" -"3287666944","3287667199","CZ","CZE","CZECH REPUBLIC" -"3287667200","3287667455","DK","DNK","DENMARK" -"3287667456","3287667711","RU","RUS","RUSSIAN FEDERATION" -"3287667712","3287667967","ES","ESP","SPAIN" -"3287667968","3287668223","PL","POL","POLAND" -"3287668224","3287668479","RO","ROM","ROMANIA" -"3287668480","3287668735","UA","UKR","UKRAINE" -"3287668736","3287668991","SI","SVN","SLOVENIA" -"3287668992","3287669247","PL","POL","POLAND" -"3287669248","3287669503","LI","LIE","LIECHTENSTEIN" -"3287669504","3287669759","IE","IRL","IRELAND" -"3287669760","3287670015","RO","ROM","ROMANIA" -"3287670016","3287670271","UA","UKR","UKRAINE" -"3287670272","3287670527","PL","POL","POLAND" -"3287670528","3287670783","GB","GBR","UNITED KINGDOM" -"3287670784","3287671039","PL","POL","POLAND" -"3287671040","3287671295","AT","AUT","AUSTRIA" -"3287671296","3287671551","PL","POL","POLAND" -"3287671552","3287671807","TR","TUR","TURKEY" -"3287671808","3287672063","CH","CHE","SWITZERLAND" -"3287672064","3287672319","LT","LTU","LITHUANIA" -"3287672320","3287672575","DE","DEU","GERMANY" -"3287672576","3287672831","NL","NLD","NETHERLANDS" -"3287672832","3287673087","RU","RUS","RUSSIAN FEDERATION" -"3287673088","3287673343","SK","SVK","SLOVAKIA" -"3287673344","3287673599","PT","PRT","PORTUGAL" -"3287673600","3287673855","GB","GBR","UNITED KINGDOM" -"3287673856","3287674111","NL","NLD","NETHERLANDS" -"3287674112","3287674367","CH","CHE","SWITZERLAND" -"3287674368","3287674623","DE","DEU","GERMANY" -"3287674624","3287674879","RO","ROM","ROMANIA" -"3287674880","3287675135","SE","SWE","SWEDEN" -"3287675136","3287675391","GB","GBR","UNITED KINGDOM" -"3287675392","3287675647","SE","SWE","SWEDEN" -"3287675648","3287675903","DE","DEU","GERMANY" -"3287675904","3287676159","BE","BEL","BELGIUM" -"3287676160","3287676415","DE","DEU","GERMANY" -"3287676416","3287676671","RU","RUS","RUSSIAN FEDERATION" -"3287676672","3287676927","GB","GBR","UNITED KINGDOM" -"3287676928","3287677183","ES","ESP","SPAIN" -"3287677184","3287677439","RU","RUS","RUSSIAN FEDERATION" -"3287677440","3287677695","SI","SVN","SLOVENIA" -"3287677696","3287677951","RO","ROM","ROMANIA" -"3287677952","3287678207","GB","GBR","UNITED KINGDOM" -"3287678208","3287678463","UA","UKR","UKRAINE" -"3287678464","3287678719","DE","DEU","GERMANY" -"3287678720","3287678975","HR","HRV","CROATIA" -"3287678976","3287687167","SI","SVN","SLOVENIA" -"3287687168","3287695104","EG","EGY","EGYPT" -"3287695360","3287703551","CH","CHE","SWITZERLAND" -"3287703552","3287704063","CZ","CZE","CZECH REPUBLIC" -"3287704064","3287704575","NL","NLD","NETHERLANDS" -"3287704576","3287705087","LU","LUX","LUXEMBOURG" -"3287705088","3287705599","RU","RUS","RUSSIAN FEDERATION" -"3287706112","3287706623","RU","RUS","RUSSIAN FEDERATION" -"3287706624","3287707135","GB","GBR","UNITED KINGDOM" -"3287707136","3287707647","FR","FRA","FRANCE" -"3287707648","3287708159","BE","BEL","BELGIUM" -"3287708160","3287708671","NL","NLD","NETHERLANDS" -"3287709184","3287709695","RU","RUS","RUSSIAN FEDERATION" -"3287709696","3287710207","SE","SWE","SWEDEN" -"3287710208","3287710719","RU","RUS","RUSSIAN FEDERATION" -"3287711232","3287711743","PL","POL","POLAND" -"3287711744","3287711983","GB","GBR","UNITED KINGDOM" -"3287711984","3287711999","FR","FRA","FRANCE" -"3287712000","3287712512","GB","GBR","UNITED KINGDOM" -"3287712513","3287713023","FR","FRA","FRANCE" -"3287713024","3287713439","GB","GBR","UNITED KINGDOM" -"3287713440","3287713471","FR","FRA","FRANCE" -"3287713472","3287713535","GB","GBR","UNITED KINGDOM" -"3287713536","3287713567","FR","FRA","FRANCE" -"3287713568","3287713591","GB","GBR","UNITED KINGDOM" -"3287713592","3287713598","FR","FRA","FRANCE" -"3287713599","3287713599","GB","GBR","UNITED KINGDOM" -"3287713600","3287713603","FR","FRA","FRANCE" -"3287713604","3287713611","GB","GBR","UNITED KINGDOM" -"3287713612","3287713615","FR","FRA","FRANCE" -"3287713616","3287713623","GB","GBR","UNITED KINGDOM" -"3287713624","3287713667","FR","FRA","FRANCE" -"3287713668","3287713711","GB","GBR","UNITED KINGDOM" -"3287713712","3287713727","FR","FRA","FRANCE" -"3287713728","3287713775","GB","GBR","UNITED KINGDOM" -"3287713776","3287713791","FR","FRA","FRANCE" -"3287713792","3287714047","GB","GBR","UNITED KINGDOM" -"3287714048","3287715071","FR","FRA","FRANCE" -"3287715072","3287715327","GB","GBR","UNITED KINGDOM" -"3287715328","3287715839","FR","FRA","FRANCE" -"3287715840","3287716127","GB","GBR","UNITED KINGDOM" -"3287716128","3287716143","FR","FRA","FRANCE" -"3287716144","3287717631","GB","GBR","UNITED KINGDOM" -"3287717632","3287717887","FR","FRA","FRANCE" -"3287717888","3287718719","GB","GBR","UNITED KINGDOM" -"3287718720","3287718731","FR","FRA","FRANCE" -"3287718732","3287718735","GB","GBR","UNITED KINGDOM" -"3287718736","3287719935","FR","FRA","FRANCE" -"3287719936","3287728127","DE","DEU","GERMANY" -"3287728128","3287729407","IT","ITA","ITALY" -"3287729408","3287729663","SE","SWE","SWEDEN" -"3287729664","3287729919","DK","DNK","DENMARK" -"3287729920","3287730175","HU","HUN","HUNGARY" -"3287730176","3287730431","PL","POL","POLAND" -"3287730432","3287730687","GB","GBR","UNITED KINGDOM" -"3287730688","3287732223","DE","DEU","GERMANY" -"3287732224","3287734271","IT","ITA","ITALY" -"3287734272","3287734527","PL","POL","POLAND" -"3287734528","3287734783","UA","UKR","UKRAINE" -"3287735040","3287735295","SE","SWE","SWEDEN" -"3287735296","3287736319","IT","ITA","ITALY" -"3287736320","3287736831","PL","POL","POLAND" -"3287736832","3287737343","LV","LVA","LATVIA" -"3287737344","3287737855","GB","GBR","UNITED KINGDOM" -"3287737856","3287738367","FR","FRA","FRANCE" -"3287738368","3287738879","GB","GBR","UNITED KINGDOM" -"3287738880","3287739391","DE","DEU","GERMANY" -"3287739392","3287739903","NL","NLD","NETHERLANDS" -"3287739904","3287740415","PT","PRT","PORTUGAL" -"3287740416","3287740927","BG","BGR","BULGARIA" -"3287740928","3287741439","RO","ROM","ROMANIA" -"3287741440","3287741951","CH","CHE","SWITZERLAND" -"3287741952","3287742463","RO","ROM","ROMANIA" -"3287742464","3287742975","RU","RUS","RUSSIAN FEDERATION" -"3287742976","3287743487","RO","ROM","ROMANIA" -"3287743488","3287743999","DE","DEU","GERMANY" -"3287744000","3287744511","FR","FRA","FRANCE" -"3287744512","3287810047","DE","DEU","GERMANY" -"3287810048","3287818239","FR","FRA","FRANCE" -"3287818240","3287826431","AT","AUT","AUSTRIA" -"3287826432","3287826687","LV","LVA","LATVIA" -"3287826688","3287826943","RO","ROM","ROMANIA" -"3287826944","3287827199","RU","RUS","RUSSIAN FEDERATION" -"3287827200","3287827455","DE","DEU","GERMANY" -"3287827456","3287827711","SI","SVN","SLOVENIA" -"3287827712","3287827967","RU","RUS","RUSSIAN FEDERATION" -"3287827968","3287828223","GB","GBR","UNITED KINGDOM" -"3287828224","3287828479","DE","DEU","GERMANY" -"3287828480","3287828735","PL","POL","POLAND" -"3287828736","3287828991","AT","AUT","AUSTRIA" -"3287828992","3287829247","DE","DEU","GERMANY" -"3287829248","3287829503","GB","GBR","UNITED KINGDOM" -"3287829504","3287829759","RO","ROM","ROMANIA" -"3287829760","3287830015","NL","NLD","NETHERLANDS" -"3287830016","3287830271","NO","NOR","NORWAY" -"3287830272","3287830527","RO","ROM","ROMANIA" -"3287830528","3287830783","IE","IRL","IRELAND" -"3287830784","3287831039","GB","GBR","UNITED KINGDOM" -"3287831040","3287831295","RU","RUS","RUSSIAN FEDERATION" -"3287831296","3287831551","CH","CHE","SWITZERLAND" -"3287831552","3287831807","RO","ROM","ROMANIA" -"3287831808","3287832063","AT","AUT","AUSTRIA" -"3287832064","3287832319","FI","FIN","FINLAND" -"3287832320","3287832575","NL","NLD","NETHERLANDS" -"3287832576","3287832831","PL","POL","POLAND" -"3287832832","3287833087","DE","DEU","GERMANY" -"3287833088","3287833343","GB","GBR","UNITED KINGDOM" -"3287833344","3287833855","CH","CHE","SWITZERLAND" -"3287833856","3287834111","UA","UKR","UKRAINE" -"3287834112","3287834367","RU","RUS","RUSSIAN FEDERATION" -"3287834368","3287834623","HU","HUN","HUNGARY" -"3287834624","3287842815","GB","GBR","UNITED KINGDOM" -"3287842816","3287851007","DE","DEU","GERMANY" -"3287851008","3287859199","UA","UKR","UKRAINE" -"3287859200","3287859455","GB","GBR","UNITED KINGDOM" -"3287859456","3287859711","FK","FLK","FALKLAND ISLANDS (MALVINAS)" -"3287859968","3287860479","GB","GBR","UNITED KINGDOM" -"3287861248","3287862015","GB","GBR","UNITED KINGDOM" -"3287863808","3287864063","GB","GBR","UNITED KINGDOM" -"3287866384","3287866439","GB","GBR","UNITED KINGDOM" -"3287866496","3287866591","GB","GBR","UNITED KINGDOM" -"3287866608","3287866623","GB","GBR","UNITED KINGDOM" -"3287867392","3287867903","UA","UKR","UKRAINE" -"3287867904","3287868415","PL","POL","POLAND" -"3287868416","3287868927","RO","ROM","ROMANIA" -"3287868928","3287869439","ES","ESP","SPAIN" -"3287869440","3287869951","RU","RUS","RUSSIAN FEDERATION" -"3287869952","3287870463","UA","UKR","UKRAINE" -"3287870464","3287870975","RU","RUS","RUSSIAN FEDERATION" -"3287870976","3287871487","NL","NLD","NETHERLANDS" -"3287871488","3287871999","PL","POL","POLAND" -"3287872000","3287872511","RU","RUS","RUSSIAN FEDERATION" -"3287872512","3287873023","GB","GBR","UNITED KINGDOM" -"3287873024","3287873535","PL","POL","POLAND" -"3287873536","3287874047","RU","RUS","RUSSIAN FEDERATION" -"3287874048","3287874559","FR","FRA","FRANCE" -"3287874560","3287875071","DE","DEU","GERMANY" -"3287875072","3287875583","PL","POL","POLAND" -"3287875584","3287941119","DK","DNK","DENMARK" -"3287941120","3287949311","IT","ITA","ITALY" -"3287949312","3287949567","AT","AUT","AUSTRIA" -"3287949568","3287949823","IL","ISR","ISRAEL" -"3287949824","3287950079","IT","ITA","ITALY" -"3287950080","3287950335","DE","DEU","GERMANY" -"3287950336","3287950591","UA","UKR","UKRAINE" -"3287950592","3287950847","PL","POL","POLAND" -"3287950848","3287951103","DE","DEU","GERMANY" -"3287951104","3287951359","HU","HUN","HUNGARY" -"3287951360","3287951615","FR","FRA","FRANCE" -"3287951616","3287951871","CH","CHE","SWITZERLAND" -"3287951872","3287952127","RU","RUS","RUSSIAN FEDERATION" -"3287952128","3287952383","UA","UKR","UKRAINE" -"3287952384","3287953151","CH","CHE","SWITZERLAND" -"3287953152","3287953407","IL","ISR","ISRAEL" -"3287953408","3287953663","DE","DEU","GERMANY" -"3287953664","3287953919","GB","GBR","UNITED KINGDOM" -"3287953920","3287954175","DE","DEU","GERMANY" -"3287954176","3287954431","RU","RUS","RUSSIAN FEDERATION" -"3287954432","3287954687","CH","CHE","SWITZERLAND" -"3287954688","3287954943","RO","ROM","ROMANIA" -"3287954944","3287955199","PL","POL","POLAND" -"3287955200","3287955711","RU","RUS","RUSSIAN FEDERATION" -"3287955712","3287955967","DE","DEU","GERMANY" -"3287955968","3287956223","SI","SVN","SLOVENIA" -"3287956224","3287956479","RO","ROM","ROMANIA" -"3287956480","3287956735","FR","FRA","FRANCE" -"3287956736","3287956991","SE","SWE","SWEDEN" -"3287956992","3287957247","UA","UKR","UKRAINE" -"3287957248","3287957503","GB","GBR","UNITED KINGDOM" -"3287957504","3287965695","AM","ARM","ARMENIA" -"3287965696","3287967743","RS","SRB","SERBIA" -"3287967744","3287967871","CS","SCG","SERBIA AND MONTENEGRO" -"3287967872","3287967878","RS","SRB","SERBIA" -"3287967879","3287967879","CS","SCG","SERBIA AND MONTENEGRO" -"3287967880","3287967883","CS","SCG","SERBIA AND MONTENEGRO" -"3287967884","3287967884","CS","SCG","SERBIA AND MONTENEGRO" -"3287967885","3287967885","CS","SCG","SERBIA AND MONTENEGRO" -"3287967886","3287967886","RS","SRB","SERBIA" -"3287967887","3287967888","CS","SCG","SERBIA AND MONTENEGRO" -"3287967889","3287967889","CS","SCG","SERBIA AND MONTENEGRO" -"3287967890","3287967905","RS","SRB","SERBIA" -"3287967906","3287967906","CS","SCG","SERBIA AND MONTENEGRO" -"3287967907","3287967935","RS","SRB","SERBIA" -"3287967936","3287967967","CS","SCG","SERBIA AND MONTENEGRO" -"3287967968","3287967999","CS","SCG","SERBIA AND MONTENEGRO" -"3287968000","3287968335","CS","SCG","SERBIA AND MONTENEGRO" -"3287968336","3287968463","RS","SRB","SERBIA" -"3287968464","3287968479","CS","SCG","SERBIA AND MONTENEGRO" -"3287968480","3287968495","RS","SRB","SERBIA" -"3287968496","3287968543","CS","SCG","SERBIA AND MONTENEGRO" -"3287968544","3287968575","RS","SRB","SERBIA" -"3287968576","3287968607","CS","SCG","SERBIA AND MONTENEGRO" -"3287968608","3287968639","RS","SRB","SERBIA" -"3287968640","3287969023","CS","SCG","SERBIA AND MONTENEGRO" -"3287969024","3287969791","RS","SRB","SERBIA" -"3287969792","3287969951","CS","SCG","SERBIA AND MONTENEGRO" -"3287969952","3287969999","RS","SRB","SERBIA" -"3287970000","3287970191","CS","SCG","SERBIA AND MONTENEGRO" -"3287970192","3287970207","CS","SCG","SERBIA AND MONTENEGRO" -"3287970208","3287970239","CS","SCG","SERBIA AND MONTENEGRO" -"3287970240","3287970271","CS","SCG","SERBIA AND MONTENEGRO" -"3287970272","3287970527","CS","SCG","SERBIA AND MONTENEGRO" -"3287970528","3287970559","CS","SCG","SERBIA AND MONTENEGRO" -"3287970560","3287970815","RS","SRB","SERBIA" -"3287970816","3287970943","CS","SCG","SERBIA AND MONTENEGRO" -"3287970944","3287971071","CS","SCG","SERBIA AND MONTENEGRO" -"3287971072","3287971327","RS","SRB","SERBIA" -"3287971328","3287971391","CS","SCG","SERBIA AND MONTENEGRO" -"3287971392","3287971583","RS","SRB","SERBIA" -"3287971584","3287971711","CS","SCG","SERBIA AND MONTENEGRO" -"3287971712","3287971839","RS","SRB","SERBIA" -"3287971840","3287972351","CS","SCG","SERBIA AND MONTENEGRO" -"3287972352","3287973887","RS","SRB","SERBIA" -"3287973888","3287982079","CZ","CZE","CZECH REPUBLIC" -"3287982080","3287990271","EE","EST","ESTONIA" -"3287990272","3287998463","SI","SVN","SLOVENIA" -"3287998464","3288006655","IT","ITA","ITALY" -"3288006656","3288072191","GR","GRC","GREECE" -"3288072192","3288088575","SE","SWE","SWEDEN" -"3288088576","3288090111","RS","SRB","SERBIA" -"3288090112","3288090367","CS","SCG","SERBIA AND MONTENEGRO" -"3288090368","3288090623","RS","SRB","SERBIA" -"3288090624","3288091647","CS","SCG","SERBIA AND MONTENEGRO" -"3288091648","3288092159","RS","SRB","SERBIA" -"3288092160","3288093183","CS","SCG","SERBIA AND MONTENEGRO" -"3288093184","3288093439","CS","SCG","SERBIA AND MONTENEGRO" -"3288093440","3288094719","CS","SCG","SERBIA AND MONTENEGRO" -"3288094720","3288097279","RS","SRB","SERBIA" -"3288097280","3288097663","CS","SCG","SERBIA AND MONTENEGRO" -"3288097664","3288097791","RS","SRB","SERBIA" -"3288097792","3288098815","CS","SCG","SERBIA AND MONTENEGRO" -"3288098816","3288099455","RS","SRB","SERBIA" -"3288099456","3288099583","CS","SCG","SERBIA AND MONTENEGRO" -"3288099584","3288099719","CS","SCG","SERBIA AND MONTENEGRO" -"3288099720","3288099727","CS","SCG","SERBIA AND MONTENEGRO" -"3288099728","3288099735","CS","SCG","SERBIA AND MONTENEGRO" -"3288099736","3288099775","CS","SCG","SERBIA AND MONTENEGRO" -"3288099776","3288099783","RS","SRB","SERBIA" -"3288099784","3288099799","CS","SCG","SERBIA AND MONTENEGRO" -"3288099800","3288099839","RS","SRB","SERBIA" -"3288099840","3288100095","CS","SCG","SERBIA AND MONTENEGRO" -"3288100096","3288100543","RS","SRB","SERBIA" -"3288100544","3288100607","CS","SCG","SERBIA AND MONTENEGRO" -"3288100608","3288100735","RS","SRB","SERBIA" -"3288100736","3288100863","CS","SCG","SERBIA AND MONTENEGRO" -"3288100864","3288101247","RS","SRB","SERBIA" -"3288101248","3288101375","CS","SCG","SERBIA AND MONTENEGRO" -"3288101376","3288101631","RS","SRB","SERBIA" -"3288101632","3288101887","CS","SCG","SERBIA AND MONTENEGRO" -"3288101888","3288102143","CS","SCG","SERBIA AND MONTENEGRO" -"3288102144","3288102399","RS","SRB","SERBIA" -"3288102400","3288102527","CS","SCG","SERBIA AND MONTENEGRO" -"3288102528","3288102543","RS","SRB","SERBIA" -"3288102544","3288102551","DK","DNK","DENMARK" -"3288102552","3288102911","RS","SRB","SERBIA" -"3288102912","3288103167","CS","SCG","SERBIA AND MONTENEGRO" -"3288103168","3288103423","RS","SRB","SERBIA" -"3288103424","3288103935","CS","SCG","SERBIA AND MONTENEGRO" -"3288103936","3288104447","RS","SRB","SERBIA" -"3288104448","3288104703","CS","SCG","SERBIA AND MONTENEGRO" -"3288104704","3288104959","RS","SRB","SERBIA" -"3288104960","3288143615","DE","DEU","GERMANY" -"3288143616","3288143871","CH","CHE","SWITZERLAND" -"3288143872","3288145663","DE","DEU","GERMANY" -"3288145664","3288146175","CH","CHE","SWITZERLAND" -"3288146176","3288150015","DE","DEU","GERMANY" -"3288150016","3288151551","NL","NLD","NETHERLANDS" -"3288151552","3288236031","DE","DEU","GERMANY" -"3288236032","3288236543","LI","LIE","LIECHTENSTEIN" -"3288236544","3288237055","FR","FRA","FRANCE" -"3288237056","3288238591","RO","ROM","ROMANIA" -"3288238592","3288239103","PL","POL","POLAND" -"3288239104","3288239615","RO","ROM","ROMANIA" -"3288239616","3288240127","UA","UKR","UKRAINE" -"3288240128","3288240639","CH","CHE","SWITZERLAND" -"3288240640","3288241151","FR","FRA","FRANCE" -"3288241152","3288241663","ES","ESP","SPAIN" -"3288241664","3288242175","UA","UKR","UKRAINE" -"3288242176","3288242687","RO","ROM","ROMANIA" -"3288242688","3288243199","FR","FRA","FRANCE" -"3288243200","3288243711","PL","POL","POLAND" -"3288243712","3288244223","FR","FRA","FRANCE" -"3288252416","3288260607","NO","NOR","NORWAY" -"3288260608","3288268799","IT","ITA","ITALY" -"3288268800","3288334335","FI","FIN","FINLAND" -"3288400128","3288400383","IN","IND","INDIA" -"3288400384","3288400639","PR","PRI","PUERTO RICO" -"3288400640","3288400895","SA","SAU","SAUDI ARABIA" -"3288401152","3288401407","RU","RUS","RUSSIAN FEDERATION" -"3288401408","3288401663","SA","SAU","SAUDI ARABIA" -"3288416256","3288417279","SA","SAU","SAUDI ARABIA" -"3288417280","3288417535","IN","IND","INDIA" -"3288417536","3288418047","KW","KWT","KUWAIT" -"3288418304","3288418815","US","USA","UNITED STATES" -"3288426496","3288427263","IN","IND","INDIA" -"3288427264","3288427519","BM","BMU","BERMUDA" -"3288427520","3288428543","IN","IND","INDIA" -"3288428544","3288428799","CU","CUB","CUBA" -"3288428800","3288429311","IN","IND","INDIA" -"3288434176","3288434431","IN","IND","INDIA" -"3288434432","3288434687","CU","CUB","CUBA" -"3288434688","3288434943","JM","JAM","JAMAICA" -"3288435200","3288435711","JM","JAM","JAMAICA" -"3288435712","3288435967","US","USA","UNITED STATES" -"3288435968","3288436223","PR","PRI","PUERTO RICO" -"3288436224","3288436479","US","USA","UNITED STATES" -"3288440832","3288441103","VC","VCT","SAINT VINCENT AND THE GRENADINES" -"3288441104","3288442879","BB","BRB","BARBADOS" -"3288442880","3288443135","KN","KNA","SAINT KITTS AND NEVIS" -"3288443136","3288443391","BB","BRB","BARBADOS" -"3288443392","3288443647","VC","VCT","SAINT VINCENT AND THE GRENADINES" -"3288443648","3288444927","BB","BRB","BARBADOS" -"3288465408","3288465919","JM","JAM","JAMAICA" -"3288466432","3288467455","SY","SYR","SYRIAN ARAB REPUBLIC" -"3288530944","3288532991","JM","JAM","JAMAICA" -"3288532992","3288534527","PR","PRI","PUERTO RICO" -"3288535040","3288539135","AN","ANT","NETHERLANDS ANTILLES" -"3288539136","3288545535","US","USA","UNITED STATES" -"3288547584","3288547839","IN","IND","INDIA" -"3288547840","3288548095","SA","SAU","SAUDI ARABIA" -"3288548096","3288549375","AE","ARE","UNITED ARAB EMIRATES" -"3288549376","3288549631","PK","PAK","PAKISTAN" -"3288549632","3288549887","GD","GRD","GRENADA" -"3288549888","3288553983","DO","DOM","DOMINICAN REPUBLIC" -"3288554240","3288554495","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3288555264","3288555519","JM","JAM","JAMAICA" -"3288557568","3288557823","JM","JAM","JAMAICA" -"3288558080","3288558335","DO","DOM","DOMINICAN REPUBLIC" -"3288564736","3288568831","TT","TTO","TRINIDAD AND TOBAGO" -"3288569856","3288570111","CU","CUB","CUBA" -"3288570112","3288570367","JM","JAM","JAMAICA" -"3288578048","3288580095","JM","JAM","JAMAICA" -"3288580096","3288588287","BB","BRB","BARBADOS" -"3288608256","3288614655","US","USA","UNITED STATES" -"3289120768","3289123327","PR","PRI","PUERTO RICO" -"3289128960","3289137151","IN","IND","INDIA" -"3289137152","3289153535","BM","BMU","BERMUDA" -"3289161728","3289163263","PR","PRI","PUERTO RICO" -"3289163264","3289163519","US","USA","UNITED STATES" -"3289163520","3289169919","PR","PRI","PUERTO RICO" -"3289321472","3289325567","IN","IND","INDIA" -"3289325568","3289333759","SA","SAU","SAUDI ARABIA" -"3290103808","3290104831","US","USA","UNITED STATES" -"3290104832","3290105855","VE","VEN","VENEZUELA" -"3290105856","3290107351","US","USA","UNITED STATES" -"3290107352","3290107359","CA","CAN","CANADA" -"3290107360","3290107375","US","USA","UNITED STATES" -"3290107376","3290107383","CA","CAN","CANADA" -"3290107384","3290111999","US","USA","UNITED STATES" -"3290112000","3290112127","CA","CAN","CANADA" -"3290112128","3290120191","US","USA","UNITED STATES" -"3290181632","3290181887","US","USA","UNITED STATES" -"3290181888","3290181951","PR","PRI","PUERTO RICO" -"3290181952","3290181959","US","USA","UNITED STATES" -"3290181960","3290181967","PR","PRI","PUERTO RICO" -"3290181968","3290182031","US","USA","UNITED STATES" -"3290182032","3290182399","PR","PRI","PUERTO RICO" -"3290182400","3290182655","US","USA","UNITED STATES" -"3290182656","3290183230","PR","PRI","PUERTO RICO" -"3290183231","3290183262","US","USA","UNITED STATES" -"3290183263","3290183326","PR","PRI","PUERTO RICO" -"3290183327","3290183679","US","USA","UNITED STATES" -"3290183680","3290185727","PR","PRI","PUERTO RICO" -"3290251264","3290259455","TT","TTO","TRINIDAD AND TOBAGO" -"3290431488","3290433535","JM","JAM","JAMAICA" -"3290439680","3290447871","TT","TTO","TRINIDAD AND TOBAGO" -"3290447872","3290456063","AR","ARG","ARGENTINA" -"3290464256","3290472447","PR","PRI","PUERTO RICO" -"3290955776","3290980351","CR","CRI","COSTA RICA" -"3291086848","3291103231","PR","PRI","PUERTO RICO" -"3302449152","3302449279","DK","DNK","DENMARK" -"3302490368","3302490623","US","USA","UNITED STATES" -"3321956352","3321960959","US","USA","UNITED STATES" -"3321962496","3321967615","US","USA","UNITED STATES" -"3322019840","3322023935","US","USA","UNITED STATES" -"3322023936","3322028031","CL","CHL","CHILE" -"3322085376","3322167295","US","USA","UNITED STATES" -"3322167296","3322167807","GB","GBR","UNITED KINGDOM" -"3322167808","3322351615","US","USA","UNITED STATES" -"3322355712","3322361855","US","USA","UNITED STATES" -"3322363904","3322372095","US","USA","UNITED STATES" -"3322380288","3322396671","US","USA","UNITED STATES" -"3322404864","3322427647","US","USA","UNITED STATES" -"3322429440","3322430975","US","USA","UNITED STATES" -"3322445824","3322609663","US","USA","UNITED STATES" -"3322609664","3322610687","SA","SAU","SAUDI ARABIA" -"3322610688","3322611711","US","USA","UNITED STATES" -"3322613760","3322638847","US","USA","UNITED STATES" -"3322675200","3322677759","US","USA","UNITED STATES" -"3322679296","3322683391","US","USA","UNITED STATES" -"3322683392","3322691583","BR","BRA","BRAZIL" -"3322740736","3322759679","US","USA","UNITED STATES" -"3322806272","3322855423","US","USA","UNITED STATES" -"3322872832","3322875903","US","USA","UNITED STATES" -"3322875904","3322888191","AU","AUS","AUSTRALIA" -"3322937344","3322938367","US","USA","UNITED STATES" -"3322939392","3322943743","US","USA","UNITED STATES" -"3323003136","3323003391","JP","JPN","JAPAN" -"3323003392","3323003647","US","USA","UNITED STATES" -"3323004160","3323004671","US","USA","UNITED STATES" -"3323004672","3323004927","CN","CHN","CHINA" -"3323004928","3323007743","US","USA","UNITED STATES" -"3323009024","3323011071","US","USA","UNITED STATES" -"3323011328","3323013631","US","USA","UNITED STATES" -"3323013888","3323014143","CA","CAN","CANADA" -"3323014400","3323015679","US","USA","UNITED STATES" -"3323016192","3323017727","US","USA","UNITED STATES" -"3323017728","3323017983","CA","CAN","CANADA" -"3323017984","3323018239","US","USA","UNITED STATES" -"3323018752","3323020799","US","USA","UNITED STATES" -"3323020800","3323021055","SG","SGP","SINGAPORE" -"3323021056","3323022591","US","USA","UNITED STATES" -"3323022592","3323022847","GB","GBR","UNITED KINGDOM" -"3323022848","3323024383","US","USA","UNITED STATES" -"3323024640","3323025663","US","USA","UNITED STATES" -"3323025920","3323027199","US","USA","UNITED STATES" -"3323027712","3323030015","US","USA","UNITED STATES" -"3323030016","3323030271","AU","AUS","AUSTRALIA" -"3323030272","3323031039","US","USA","UNITED STATES" -"3323031808","3323032575","AU","AUS","AUSTRALIA" -"3323032576","3323032831","US","USA","UNITED STATES" -"3323032832","3323033087","IT","ITA","ITALY" -"3323033600","3323034111","BR","BRA","BRAZIL" -"3323034112","3323035135","US","USA","UNITED STATES" -"3323035392","3323038463","US","USA","UNITED STATES" -"3323038720","3323038975","CA","CAN","CANADA" -"3323038976","3323043839","US","USA","UNITED STATES" -"3323044096","3323046399","US","USA","UNITED STATES" -"3323046912","3323048447","US","USA","UNITED STATES" -"3323048704","3323048959","US","USA","UNITED STATES" -"3323048960","3323049727","NL","NLD","NETHERLANDS" -"3323049728","3323056895","US","USA","UNITED STATES" -"3323057408","3323058175","US","USA","UNITED STATES" -"3323058432","3323058943","US","USA","UNITED STATES" -"3323059200","3323061247","US","USA","UNITED STATES" -"3323061248","3323061503","SG","SGP","SINGAPORE" -"3323061504","3323062015","US","USA","UNITED STATES" -"3323062016","3323062527","BR","BRA","BRAZIL" -"3323062784","3323064319","US","USA","UNITED STATES" -"3323064320","3323064831","AU","AUS","AUSTRALIA" -"3323064832","3323066367","US","USA","UNITED STATES" -"3323066624","3323067135","US","USA","UNITED STATES" -"3323067392","3323068159","US","USA","UNITED STATES" -"3323068416","3323199487","US","USA","UNITED STATES" -"3323201536","3323203583","CA","CAN","CANADA" -"3323203584","3323207679","US","USA","UNITED STATES" -"3323207680","3323215871","CA","CAN","CANADA" -"3323267072","3323286015","US","USA","UNITED STATES" -"3323330816","3323331071","US","USA","UNITED STATES" -"3323331840","3323333119","US","USA","UNITED STATES" -"3323333376","3323339263","US","USA","UNITED STATES" -"3323339264","3323339519","AU","AUS","AUSTRALIA" -"3323339520","3323339775","TH","THA","THAILAND" -"3323340032","3323340287","NZ","NZL","NEW ZEALAND" -"3323340288","3323340799","US","USA","UNITED STATES" -"3323341056","3323342335","US","USA","UNITED STATES" -"3323342592","3323343615","AU","AUS","AUSTRALIA" -"3323343616","3323343871","DE","DEU","GERMANY" -"3323343872","3323345919","US","USA","UNITED STATES" -"3323346176","3323346431","AU","AUS","AUSTRALIA" -"3323346432","3323354367","US","USA","UNITED STATES" -"3323354368","3323355647","DE","DEU","GERMANY" -"3323355904","3323356671","US","USA","UNITED STATES" -"3323356672","3323356927","CA","CAN","CANADA" -"3323356928","3323357695","US","USA","UNITED STATES" -"3323358208","3323365119","US","USA","UNITED STATES" -"3323365632","3323365887","US","USA","UNITED STATES" -"3323366144","3323367423","US","USA","UNITED STATES" -"3323367680","3323374079","US","USA","UNITED STATES" -"3323374336","3323376127","US","USA","UNITED STATES" -"3323376384","3323376639","US","USA","UNITED STATES" -"3323376896","3323378687","US","USA","UNITED STATES" -"3323378688","3323378943","CA","CAN","CANADA" -"3323378944","3323380479","US","USA","UNITED STATES" -"3323380736","3323382271","US","USA","UNITED STATES" -"3323383552","3323383807","US","USA","UNITED STATES" -"3323386112","3323388927","US","USA","UNITED STATES" -"3323389184","3323391231","US","USA","UNITED STATES" -"3323391232","3323391487","CA","CAN","CANADA" -"3323391488","3323394559","US","USA","UNITED STATES" -"3323394560","3323395071","CL","CHL","CHILE" -"3323395072","3323395327","US","USA","UNITED STATES" -"3323395584","3323395839","US","USA","UNITED STATES" -"3323396096","3323402751","US","USA","UNITED STATES" -"3323404288","3323408383","US","USA","UNITED STATES" -"3323461632","3323464191","US","USA","UNITED STATES" -"3323465728","3323469823","US","USA","UNITED STATES" -"3323527168","3323658239","US","USA","UNITED STATES" -"3323658496","3323659263","US","USA","UNITED STATES" -"3323659264","3323660543","NZ","NZL","NEW ZEALAND" -"3323662336","3323665407","US","USA","UNITED STATES" -"3323666432","3323672831","US","USA","UNITED STATES" -"3323723776","3323727103","US","USA","UNITED STATES" -"3323727872","3323730943","US","USA","UNITED STATES" -"3323731968","3323791103","US","USA","UNITED STATES" -"3323791360","3323797503","US","USA","UNITED STATES" -"3323805696","3323806207","CA","CAN","CANADA" -"3323806208","3323854335","US","USA","UNITED STATES" -"3323854848","3324051455","US","USA","UNITED STATES" -"3324051456","3324182527","CA","CAN","CANADA" -"3324182528","3324189183","US","USA","UNITED STATES" -"3324190720","3324193279","US","USA","UNITED STATES" -"3324198912","3324211711","US","USA","UNITED STATES" -"3324215296","3324251135","US","USA","UNITED STATES" -"3324252160","3324255231","US","USA","UNITED STATES" -"3324256256","3324259327","SA","SAU","SAUDI ARABIA" -"3324259328","3324259583","US","USA","UNITED STATES" -"3324259584","3324259839","SA","SAU","SAUDI ARABIA" -"3324259840","3324260095","US","USA","UNITED STATES" -"3324264448","3324277247","US","USA","UNITED STATES" -"3324280832","3324315391","US","USA","UNITED STATES" -"3324315648","3324320767","US","USA","UNITED STATES" -"3324321792","3324325631","US","USA","UNITED STATES" -"3324329984","3324337663","US","USA","UNITED STATES" -"3324346368","3324347647","US","USA","UNITED STATES" -"3324379136","3324380159","CA","CAN","CANADA" -"3324380160","3324380927","US","USA","UNITED STATES" -"3324381184","3324382463","US","USA","UNITED STATES" -"3324383232","3324391423","US","USA","UNITED STATES" -"3324395520","3324398079","US","USA","UNITED STATES" -"3324411904","3324521471","US","USA","UNITED STATES" -"3324526592","3324567551","US","USA","UNITED STATES" -"3324575744","3324579327","US","USA","UNITED STATES" -"3324579840","3324582911","NZ","NZL","NEW ZEALAND" -"3324583936","3324587775","CL","CHL","CHILE" -"3324592128","3324596223","US","USA","UNITED STATES" -"3324641280","3324772351","US","USA","UNITED STATES" -"3324837888","3324840959","US","USA","UNITED STATES" -"3324841984","3324850175","US","USA","UNITED STATES" -"3324854272","3324867071","US","USA","UNITED STATES" -"3324903424","3324905983","US","USA","UNITED STATES" -"3324911616","3324915711","US","USA","UNITED STATES" -"3324919808","3324923903","US","USA","UNITED STATES" -"3324968960","3324972287","US","USA","UNITED STATES" -"3324973056","3324976895","US","USA","UNITED STATES" -"3324977152","3324979967","US","USA","UNITED STATES" -"3324985344","3324991743","US","USA","UNITED STATES" -"3325034496","3325035519","NZ","NZL","NEW ZEALAND" -"3325035520","3325045759","US","USA","UNITED STATES" -"3325050880","3325059071","US","USA","UNITED STATES" -"3325100288","3325100543","US","USA","UNITED STATES" -"3325100544","3325100799","HK","HKG","HONG KONG" -"3325100800","3325101055","NZ","NZL","NEW ZEALAND" -"3325101312","3325102335","US","USA","UNITED STATES" -"3325102592","3325105919","US","USA","UNITED STATES" -"3325106176","3325108223","US","USA","UNITED STATES" -"3325108224","3325110271","AU","AUS","AUSTRALIA" -"3325110272","3325111807","US","USA","UNITED STATES" -"3325120768","3325122047","US","USA","UNITED STATES" -"3325122304","3325122559","AU","AUS","AUSTRALIA" -"3325123328","3325124351","US","USA","UNITED STATES" -"3325124608","3325125375","US","USA","UNITED STATES" -"3325125888","3325126143","US","USA","UNITED STATES" -"3325126400","3325128703","US","USA","UNITED STATES" -"3325128704","3325129215","TH","THA","THAILAND" -"3325129216","3325131775","US","USA","UNITED STATES" -"3325131776","3325132031","AU","AUS","AUSTRALIA" -"3325132032","3325132799","US","USA","UNITED STATES" -"3325132800","3325134335","BR","BRA","BRAZIL" -"3325134336","3325134591","US","USA","UNITED STATES" -"3325134848","3325135359","US","USA","UNITED STATES" -"3325136128","3325136383","CA","CAN","CANADA" -"3325136384","3325136639","US","USA","UNITED STATES" -"3325136896","3325137919","US","USA","UNITED STATES" -"3325138176","3325141503","US","USA","UNITED STATES" -"3325141760","3325142015","US","USA","UNITED STATES" -"3325142016","3325142271","AR","ARG","ARGENTINA" -"3325142272","3325144831","US","USA","UNITED STATES" -"3325144832","3325145087","CA","CAN","CANADA" -"3325145088","3325145599","US","USA","UNITED STATES" -"3325145856","3325151231","US","USA","UNITED STATES" -"3325151488","3325162239","US","USA","UNITED STATES" -"3325162496","3325165311","US","USA","UNITED STATES" -"3325165568","3325169663","US","USA","UNITED STATES" -"3325169664","3325171711","BR","BRA","BRAZIL" -"3325173760","3325190143","US","USA","UNITED STATES" -"3325231360","3325232127","US","USA","UNITED STATES" -"3325232128","3325233151","AU","AUS","AUSTRALIA" -"3325233408","3325234175","US","USA","UNITED STATES" -"3325234176","3325234431","SA","SAU","SAUDI ARABIA" -"3325234432","3325242367","US","USA","UNITED STATES" -"3325242880","3325247231","US","USA","UNITED STATES" -"3325247488","3325249279","US","USA","UNITED STATES" -"3325249280","3325249535","CO","COL","COLOMBIA" -"3325249536","3325250303","US","USA","UNITED STATES" -"3325250816","3325253631","US","USA","UNITED STATES" -"3325253888","3325256447","US","USA","UNITED STATES" -"3325256448","3325256703","HK","HKG","HONG KONG" -"3325256704","3325256959","US","USA","UNITED STATES" -"3325256960","3325257215","ID","IDN","INDONESIA" -"3325257216","3325257727","US","USA","UNITED STATES" -"3325258752","3325259775","US","USA","UNITED STATES" -"3325259776","3325261311","CA","CAN","CANADA" -"3325261312","3325264639","US","USA","UNITED STATES" -"3325267200","3325267711","US","USA","UNITED STATES" -"3325267712","3325268735","SY","SYR","SYRIAN ARAB REPUBLIC" -"3325268736","3325269759","US","USA","UNITED STATES" -"3325269760","3325270015","CA","CAN","CANADA" -"3325270272","3325271039","US","USA","UNITED STATES" -"3325271040","3325271295","CA","CAN","CANADA" -"3325271296","3325271551","US","USA","UNITED STATES" -"3325271808","3325272575","US","USA","UNITED STATES" -"3325272832","3325274111","US","USA","UNITED STATES" -"3325274624","3325278719","US","USA","UNITED STATES" -"3325278720","3325278975","AU","AUS","AUSTRALIA" -"3325278976","3325281023","US","USA","UNITED STATES" -"3325281024","3325281279","NZ","NZL","NEW ZEALAND" -"3325281280","3325281535","AU","AUS","AUSTRALIA" -"3325281536","3325284863","US","USA","UNITED STATES" -"3325284864","3325285375","AU","AUS","AUSTRALIA" -"3325285632","3325292543","US","USA","UNITED STATES" -"3325292800","3325296383","US","USA","UNITED STATES" -"3325296640","3325298687","US","USA","UNITED STATES" -"3325300736","3325303295","US","USA","UNITED STATES" -"3325304832","3325307647","CA","CAN","CANADA" -"3325307648","3325307903","BB","BRB","BARBADOS" -"3325307904","3325308927","CA","CAN","CANADA" -"3325313024","3325319423","US","USA","UNITED STATES" -"3325362176","3325427711","CA","CAN","CANADA" -"3325493248","3325497343","US","USA","UNITED STATES" -"3325497344","3325499903","PR","PRI","PUERTO RICO" -"3325501440","3325503999","US","USA","UNITED STATES" -"3325509632","3325517311","US","USA","UNITED STATES" -"3325526016","3325551615","US","USA","UNITED STATES" -"3325558784","3325562879","US","USA","UNITED STATES" -"3325562880","3325565439","PH","PHL","PHILIPPINES" -"3325566976","3325572095","US","USA","UNITED STATES" -"3325575168","3325591551","US","USA","UNITED STATES" -"3325626368","3325630975","US","USA","UNITED STATES" -"3325632512","3325635583","US","USA","UNITED STATES" -"3325640704","3325644799","CA","CAN","CANADA" -"3325689856","3325690367","JM","JAM","JAMAICA" -"3325690368","3325691647","US","USA","UNITED STATES" -"3325691904","3325693183","BR","BRA","BRAZIL" -"3325693952","3325697023","US","USA","UNITED STATES" -"3325698048","3325699839","US","USA","UNITED STATES" -"3325706240","3325708287","US","USA","UNITED STATES" -"3325755392","3325886463","US","USA","UNITED STATES" -"3325886720","3325887487","NZ","NZL","NEW ZEALAND" -"3325887488","3325888255","US","USA","UNITED STATES" -"3325888512","3325890559","AU","AUS","AUSTRALIA" -"3325890560","3325901055","US","USA","UNITED STATES" -"3325902848","3325911039","US","USA","UNITED STATES" -"3325952000","3325956095","US","USA","UNITED STATES" -"3325956096","3325960191","CA","CAN","CANADA" -"3325960192","3325967871","US","USA","UNITED STATES" -"3325968384","3325976063","US","USA","UNITED STATES" -"3325976064","3325976319","CA","CAN","CANADA" -"3325976320","3325979903","US","USA","UNITED STATES" -"3325980160","3325980671","US","USA","UNITED STATES" -"3325980672","3325980927","CA","CAN","CANADA" -"3325980928","3325982719","US","USA","UNITED STATES" -"3325983488","3325986815","US","USA","UNITED STATES" -"3325987072","3325992447","US","USA","UNITED STATES" -"3325992448","3325992959","CA","CAN","CANADA" -"3325992960","3325993215","US","USA","UNITED STATES" -"3325993472","3325993727","US","USA","UNITED STATES" -"3325994240","3325996799","US","USA","UNITED STATES" -"3325996800","3325997055","CA","CAN","CANADA" -"3325997056","3326003455","US","USA","UNITED STATES" -"3326004224","3326004991","US","USA","UNITED STATES" -"3326005248","3326010623","US","USA","UNITED STATES" -"3326010880","3326017279","US","USA","UNITED STATES" -"3326017536","3326349823","US","USA","UNITED STATES" -"3326349824","3326350335","EC","ECU","ECUADOR" -"3326350336","3326390527","US","USA","UNITED STATES" -"3326390528","3326390535","CA","CAN","CANADA" -"3326390536","3326492239","US","USA","UNITED STATES" -"3326492240","3326492255","CA","CAN","CANADA" -"3326492256","3326543359","US","USA","UNITED STATES" -"3326543872","3326548991","US","USA","UNITED STATES" -"3326550016","3326553087","US","USA","UNITED STATES" -"3326558208","3326561279","US","USA","UNITED STATES" -"3326607360","3326608895","US","USA","UNITED STATES" -"3326609408","3326610687","US","USA","UNITED STATES" -"3326611456","3326613503","US","USA","UNITED STATES" -"3326615552","3326618111","US","USA","UNITED STATES" -"3326623744","3326627327","US","USA","UNITED STATES" -"3326680832","3326681087","CA","CAN","CANADA" -"3326681344","3326682623","CA","CAN","CANADA" -"3326682624","3326682879","US","USA","UNITED STATES" -"3326682880","3326697215","CA","CAN","CANADA" -"3326699776","3326713343","CA","CAN","CANADA" -"3326713344","3326714111","US","USA","UNITED STATES" -"3326714112","3326716927","CA","CAN","CANADA" -"3326716928","3326717951","US","USA","UNITED STATES" -"3326717952","3326726399","CA","CAN","CANADA" -"3326726912","3326728703","CA","CAN","CANADA" -"3326728960","3326729215","CA","CAN","CANADA" -"3326729216","3326729471","JP","JPN","JAPAN" -"3326729472","3326729727","CA","CAN","CANADA" -"3326729728","3326730495","US","USA","UNITED STATES" -"3326731264","3326734335","US","USA","UNITED STATES" -"3326734336","3326737663","CA","CAN","CANADA" -"3326737664","3326737919","US","USA","UNITED STATES" -"3326737920","3326738175","CA","CAN","CANADA" -"3326738432","3326739455","US","USA","UNITED STATES" -"3326740480","3326745599","US","USA","UNITED STATES" -"3326754816","3326757375","US","USA","UNITED STATES" -"3326771200","3326796799","US","USA","UNITED STATES" -"3326803968","3327397119","US","USA","UNITED STATES" -"3327397888","3327408127","US","USA","UNITED STATES" -"3327459328","3327723263","US","USA","UNITED STATES" -"3327723520","3327725311","CA","CAN","CANADA" -"3327725568","3327728127","US","USA","UNITED STATES" -"3327729664","3327732735","US","USA","UNITED STATES" -"3327737856","3327743231","US","USA","UNITED STATES" -"3327754240","3327769087","US","USA","UNITED STATES" -"3327770368","3327779839","US","USA","UNITED STATES" -"3327787008","3327788287","US","USA","UNITED STATES" -"3327789056","3327790591","US","USA","UNITED STATES" -"3327791104","3327792127","US","USA","UNITED STATES" -"3327795200","3327805695","US","USA","UNITED STATES" -"3327819776","3327856127","US","USA","UNITED STATES" -"3327856640","3327857919","US","USA","UNITED STATES" -"3327860736","3327863295","US","USA","UNITED STATES" -"3327868928","3327871487","US","USA","UNITED STATES" -"3327918080","3328028671","US","USA","UNITED STATES" -"3328028672","3328030719","AN","ANT","NETHERLANDS ANTILLES" -"3328030720","3328180223","US","USA","UNITED STATES" -"3328180480","3328181247","CA","CAN","CANADA" -"3328181760","3328185855","CA","CAN","CANADA" -"3328186112","3328187647","CA","CAN","CANADA" -"3328187904","3328196351","CA","CAN","CANADA" -"3328196608","3328202751","CA","CAN","CANADA" -"3328204800","3328210175","CA","CAN","CANADA" -"3328210176","3328210943","AE","ARE","UNITED ARAB EMIRATES" -"3328210944","3328214783","CA","CAN","CANADA" -"3328214784","3328215295","GB","GBR","UNITED KINGDOM" -"3328215296","3328233983","CA","CAN","CANADA" -"3328233984","3328234239","AE","ARE","UNITED ARAB EMIRATES" -"3328234240","3328235007","CA","CAN","CANADA" -"3328235008","3328235263","US","USA","UNITED STATES" -"3328235520","3328236799","CA","CAN","CANADA" -"3328237312","3328241663","CA","CAN","CANADA" -"3328241664","3328243199","US","USA","UNITED STATES" -"3328243200","3328245759","CA","CAN","CANADA" -"3328245760","3328249087","US","USA","UNITED STATES" -"3328249856","3328253439","US","USA","UNITED STATES" -"3328253952","3328259071","US","USA","UNITED STATES" -"3328259584","3328265471","US","USA","UNITED STATES" -"3328265728","3328271871","US","USA","UNITED STATES" -"3328272128","3328297215","US","USA","UNITED STATES" -"3328298240","3328298495","US","USA","UNITED STATES" -"3328298752","3328299775","US","USA","UNITED STATES" -"3328303872","3328304127","US","USA","UNITED STATES" -"3328305664","3328306431","US","USA","UNITED STATES" -"3328307200","3328307455","US","USA","UNITED STATES" -"3328307968","3328309247","US","USA","UNITED STATES" -"3328309504","3328311039","US","USA","UNITED STATES" -"3328311296","3328313087","US","USA","UNITED STATES" -"3328313344","3328314623","US","USA","UNITED STATES" -"3328315392","3328316927","US","USA","UNITED STATES" -"3328319488","3328323583","US","USA","UNITED STATES" -"3328327680","3328332799","US","USA","UNITED STATES" -"3328344064","3328356863","US","USA","UNITED STATES" -"3328376832","3328383487","US","USA","UNITED STATES" -"3328385024","3328412159","US","USA","UNITED STATES" -"3328412416","3328412927","US","USA","UNITED STATES" -"3328413184","3328414719","US","USA","UNITED STATES" -"3328414720","3328414975","CH","CHE","SWITZERLAND" -"3328414976","3328417279","US","USA","UNITED STATES" -"3328417792","3328420351","US","USA","UNITED STATES" -"3328420352","3328420607","CA","CAN","CANADA" -"3328420608","3328421119","US","USA","UNITED STATES" -"3328421120","3328421375","HK","HKG","HONG KONG" -"3328421376","3328427007","US","USA","UNITED STATES" -"3328427264","3328432639","US","USA","UNITED STATES" -"3328432640","3328433663","CA","CAN","CANADA" -"3328433664","3328433919","CH","CHE","SWITZERLAND" -"3328433920","3328442111","US","USA","UNITED STATES" -"3328442368","3328447999","US","USA","UNITED STATES" -"3328450560","3328453119","US","USA","UNITED STATES" -"3328458752","3328466431","US","USA","UNITED STATES" -"3328475136","3328477183","CA","CAN","CANADA" -"3328507904","3328509695","US","USA","UNITED STATES" -"3328509952","3328511231","US","USA","UNITED STATES" -"3328512000","3328514559","US","USA","UNITED STATES" -"3328516096","3328520191","US","USA","UNITED STATES" -"3328573440","3328574463","US","USA","UNITED STATES" -"3328574720","3328575487","US","USA","UNITED STATES" -"3328577536","3328580607","US","USA","UNITED STATES" -"3328581632","3328591359","US","USA","UNITED STATES" -"3328591872","3328592895","US","USA","UNITED STATES" -"3328594688","3328617983","US","USA","UNITED STATES" -"3328617984","3328618239","CA","CAN","CANADA" -"3328618240","3328630015","US","USA","UNITED STATES" -"3328630272","3328630783","US","USA","UNITED STATES" -"3328630784","3328631807","CA","CAN","CANADA" -"3328631808","3328636671","US","USA","UNITED STATES" -"3328636928","3328638719","US","USA","UNITED STATES" -"3328638976","3328704511","CA","CAN","CANADA" -"3328704512","3328771839","US","USA","UNITED STATES" -"3328772096","3328773375","US","USA","UNITED STATES" -"3328774144","3328776703","US","USA","UNITED STATES" -"3328778240","3328782335","US","USA","UNITED STATES" -"3328786432","3328790527","US","USA","UNITED STATES" -"3328802816","3328810495","US","USA","UNITED STATES" -"3328819200","3328821247","US","USA","UNITED STATES" -"3328829440","3328830463","US","USA","UNITED STATES" -"3328835584","3330607103","US","USA","UNITED STATES" -"3330609152","3330614271","US","USA","UNITED STATES" -"3330614272","3330614527","CA","CAN","CANADA" -"3330614528","3330621439","US","USA","UNITED STATES" -"3330621440","3330623743","CA","CAN","CANADA" -"3330623744","3330624255","US","USA","UNITED STATES" -"3330624512","3330625535","US","USA","UNITED STATES" -"3330625536","3330627071","GB","GBR","UNITED KINGDOM" -"3330627072","3330637823","US","USA","UNITED STATES" -"3330638080","3330640895","US","USA","UNITED STATES" -"3330640896","3330641151","CH","CHE","SWITZERLAND" -"3330641152","3330641663","US","USA","UNITED STATES" -"3330641920","3330645247","US","USA","UNITED STATES" -"3330645504","3330646527","US","USA","UNITED STATES" -"3330646528","3330647295","CA","CAN","CANADA" -"3330647296","3330647807","US","USA","UNITED STATES" -"3330648064","3330648831","US","USA","UNITED STATES" -"3330649088","3330649343","US","USA","UNITED STATES" -"3330649600","3330649855","CA","CAN","CANADA" -"3330649856","3330657791","US","USA","UNITED STATES" -"3330657792","3330658047","JP","JPN","JAPAN" -"3330658048","3330662911","US","USA","UNITED STATES" -"3330662912","3330663167","GB","GBR","UNITED KINGDOM" -"3330663168","3330664191","US","USA","UNITED STATES" -"3330664192","3330664447","CA","CAN","CANADA" -"3330664448","3330665983","US","USA","UNITED STATES" -"3330666240","3330668543","US","USA","UNITED STATES" -"3330668800","3330670335","US","USA","UNITED STATES" -"3330670592","3330671871","US","USA","UNITED STATES" -"3330672640","3330674175","US","USA","UNITED STATES" -"3330674688","3330677759","US","USA","UNITED STATES" -"3330678784","3330697215","US","USA","UNITED STATES" -"3330703360","3330714367","US","USA","UNITED STATES" -"3330714368","3330714623","CA","CAN","CANADA" -"3330714624","3330723839","US","USA","UNITED STATES" -"3330724096","3330726655","US","USA","UNITED STATES" -"3330726656","3330726911","CA","CAN","CANADA" -"3330726912","3330735871","US","USA","UNITED STATES" -"3330736128","3330743295","US","USA","UNITED STATES" -"3330744320","3330748159","US","USA","UNITED STATES" -"3330752512","3330754559","US","USA","UNITED STATES" -"3330754560","3330754815","CA","CAN","CANADA" -"3330754816","3330755071","US","USA","UNITED STATES" -"3330755328","3330756607","US","USA","UNITED STATES" -"3330756864","3330763519","US","USA","UNITED STATES" -"3330763520","3330763775","CA","CAN","CANADA" -"3330763776","3330765823","US","USA","UNITED STATES" -"3330765824","3330766335","CA","CAN","CANADA" -"3330766336","3330767871","US","USA","UNITED STATES" -"3330768640","3330769151","US","USA","UNITED STATES" -"3330769408","3330771199","US","USA","UNITED STATES" -"3330771200","3330771711","CH","CHE","SWITZERLAND" -"3330771712","3330778879","US","USA","UNITED STATES" -"3330778880","3330779135","GB","GBR","UNITED KINGDOM" -"3330779136","3330784255","US","USA","UNITED STATES" -"3330785792","3330791423","US","USA","UNITED STATES" -"3330791424","3330791679","CA","CAN","CANADA" -"3330791680","3330795775","US","USA","UNITED STATES" -"3330796032","3330796543","US","USA","UNITED STATES" -"3330796800","3330798847","US","USA","UNITED STATES" -"3330799104","3330799871","US","USA","UNITED STATES" -"3330800128","3330801407","US","USA","UNITED STATES" -"3330801664","3330807807","US","USA","UNITED STATES" -"3330809856","3330812415","US","USA","UNITED STATES" -"3330818048","3330841599","US","USA","UNITED STATES" -"3330841856","3330844159","US","USA","UNITED STATES" -"3330844416","3330848767","US","USA","UNITED STATES" -"3330849024","3330862591","US","USA","UNITED STATES" -"3330862848","3330866943","US","USA","UNITED STATES" -"3330867200","3330904575","US","USA","UNITED STATES" -"3330904832","3330906623","US","USA","UNITED STATES" -"3330906880","3330908415","US","USA","UNITED STATES" -"3330908672","3330918655","US","USA","UNITED STATES" -"3330918912","3330923263","US","USA","UNITED STATES" -"3330923520","3330928127","US","USA","UNITED STATES" -"3330928384","3330930175","US","USA","UNITED STATES" -"3330930944","3330932479","US","USA","UNITED STATES" -"3330932736","3331065343","US","USA","UNITED STATES" -"3331065856","3331070463","US","USA","UNITED STATES" -"3331072000","3331092991","US","USA","UNITED STATES" -"3331096576","3331098111","US","USA","UNITED STATES" -"3331098368","3331102463","US","USA","UNITED STATES" -"3331102464","3331102719","CA","CAN","CANADA" -"3331102720","3331103231","US","USA","UNITED STATES" -"3331104000","3331110143","US","USA","UNITED STATES" -"3331110656","3331117567","US","USA","UNITED STATES" -"3331117824","3331125759","US","USA","UNITED STATES" -"3331126016","3331129087","US","USA","UNITED STATES" -"3331129344","3331194879","US","USA","UNITED STATES" -"3331194880","3331260415","AU","AUS","AUSTRALIA" -"3331260416","3331268607","US","USA","UNITED STATES" -"3331276800","3331284991","US","USA","UNITED STATES" -"3331293184","3331301375","US","USA","UNITED STATES" -"3331309568","3331330047","US","USA","UNITED STATES" -"3331334144","3331338239","US","USA","UNITED STATES" -"3331342336","3331350527","US","USA","UNITED STATES" -"3331358720","3331362815","US","USA","UNITED STATES" -"3331366912","3331371007","US","USA","UNITED STATES" -"3331375104","3331387391","US","USA","UNITED STATES" -"3331391488","3331527679","US","USA","UNITED STATES" -"3331530752","3331557375","US","USA","UNITED STATES" -"3331557632","3331562495","US","USA","UNITED STATES" -"3331562752","3331563519","US","USA","UNITED STATES" -"3331563520","3331563775","CH","CHE","SWITZERLAND" -"3331563776","3331565567","US","USA","UNITED STATES" -"3331566080","3331567615","US","USA","UNITED STATES" -"3331567872","3331574271","US","USA","UNITED STATES" -"3331574528","3331575295","US","USA","UNITED STATES" -"3331577344","3331578623","US","USA","UNITED STATES" -"3331578880","3331585791","US","USA","UNITED STATES" -"3331586048","3331587839","US","USA","UNITED STATES" -"3331588096","3331589631","US","USA","UNITED STATES" -"3331590144","3331591935","US","USA","UNITED STATES" -"3331592192","3331594751","US","USA","UNITED STATES" -"3331596288","3331607807","US","USA","UNITED STATES" -"3331620864","3331627007","US","USA","UNITED STATES" -"3331627520","3331631359","US","USA","UNITED STATES" -"3331632128","3331632383","US","USA","UNITED STATES" -"3331632896","3331633407","US","USA","UNITED STATES" -"3331633408","3331633919","CH","CHE","SWITZERLAND" -"3331633920","3331647231","US","USA","UNITED STATES" -"3331647232","3331647487","CA","CAN","CANADA" -"3331647488","3331649279","US","USA","UNITED STATES" -"3331649280","3331649535","CA","CAN","CANADA" -"3331649536","3331653375","US","USA","UNITED STATES" -"3331653632","3331818495","US","USA","UNITED STATES" -"3331818496","3331818751","MX","MEX","MEXICO" -"3331818752","3331819775","US","USA","UNITED STATES" -"3331820032","3331821567","US","USA","UNITED STATES" -"3331821824","3331825151","US","USA","UNITED STATES" -"3331825408","3331837183","US","USA","UNITED STATES" -"3331837696","3331839999","US","USA","UNITED STATES" -"3331840256","3331849215","US","USA","UNITED STATES" -"3331849472","3331849983","US","USA","UNITED STATES" -"3331850240","3331930623","US","USA","UNITED STATES" -"3331932160","3331934719","US","USA","UNITED STATES" -"3331948544","3331962879","US","USA","UNITED STATES" -"3331964416","3331968767","US","USA","UNITED STATES" -"3331969024","3331971839","US","USA","UNITED STATES" -"3331972096","3331972863","US","USA","UNITED STATES" -"3331973120","3331981055","US","USA","UNITED STATES" -"3331981312","3331983103","US","USA","UNITED STATES" -"3331983360","3331987967","US","USA","UNITED STATES" -"3331989504","3331996671","US","USA","UNITED STATES" -"3331997696","3332001535","US","USA","UNITED STATES" -"3332014080","3332026879","US","USA","UNITED STATES" -"3332046848","3332375807","US","USA","UNITED STATES" -"3332376576","3332381183","US","USA","UNITED STATES" -"3332382720","3332389375","US","USA","UNITED STATES" -"3332390912","3332418303","US","USA","UNITED STATES" -"3332418560","3332418815","US","USA","UNITED STATES" -"3332419072","3332423423","US","USA","UNITED STATES" -"3332423680","3332430079","US","USA","UNITED STATES" -"3332430336","3332435199","US","USA","UNITED STATES" -"3332435456","3332438015","US","USA","UNITED STATES" -"3332438272","3332439807","US","USA","UNITED STATES" -"3332440320","3332460543","CA","CAN","CANADA" -"3332460544","3332460799","US","USA","UNITED STATES" -"3332460800","3332461311","CA","CAN","CANADA" -"3332461568","3332462335","CA","CAN","CANADA" -"3332462592","3332463615","CA","CAN","CANADA" -"3332463872","3332473855","CA","CAN","CANADA" -"3332477952","3332482303","CA","CAN","CANADA" -"3332484096","3332491263","CA","CAN","CANADA" -"3332492032","3332500735","CA","CAN","CANADA" -"3332500992","3332505343","CA","CAN","CANADA" -"3332505856","3332508671","CA","CAN","CANADA" -"3332508928","3332528127","CA","CAN","CANADA" -"3332529664","3332554751","CA","CAN","CANADA" -"3332558848","3332562943","CA","CAN","CANADA" -"3332562944","3332563455","US","USA","UNITED STATES" -"3332563456","3332564479","CA","CAN","CANADA" -"3332564736","3332570879","CA","CAN","CANADA" -"3332571392","3332579327","CA","CAN","CANADA" -"3332581376","3332590079","CA","CAN","CANADA" -"3332590080","3332590591","US","USA","UNITED STATES" -"3332590592","3332594687","CA","CAN","CANADA" -"3332594944","3332595455","CA","CAN","CANADA" -"3332595712","3332610559","CA","CAN","CANADA" -"3332611072","3332611327","CA","CAN","CANADA" -"3332611584","3332617471","CA","CAN","CANADA" -"3332618240","3332624383","US","USA","UNITED STATES" -"3332624384","3332625919","CA","CAN","CANADA" -"3332626688","3332636415","CA","CAN","CANADA" -"3332636672","3332833279","CA","CAN","CANADA" -"3332833536","3332841471","CA","CAN","CANADA" -"3332841728","3332866303","CA","CAN","CANADA" -"3332874240","3332875007","CA","CAN","CANADA" -"3332897280","3332898559","CA","CAN","CANADA" -"3332899072","3332899327","CA","CAN","CANADA" -"3332899328","3332899583","US","USA","UNITED STATES" -"3332899584","3332899839","CA","CAN","CANADA" -"3332899840","3332900095","US","USA","UNITED STATES" -"3332900096","3332909823","CA","CAN","CANADA" -"3332910080","3332922879","CA","CAN","CANADA" -"3332923392","3332925695","CA","CAN","CANADA" -"3332929024","3332930559","CA","CAN","CANADA" -"3332931328","3332947967","CA","CAN","CANADA" -"3332947968","3332948223","US","USA","UNITED STATES" -"3332948224","3332964095","CA","CAN","CANADA" -"3332964352","3332966143","CA","CAN","CANADA" -"3332966144","3332966399","US","USA","UNITED STATES" -"3332966400","3332966911","CA","CAN","CANADA" -"3332967424","3332979967","CA","CAN","CANADA" -"3332980736","3332988927","CA","CAN","CANADA" -"3332989952","3332997119","CA","CAN","CANADA" -"3332997376","3333008383","CA","CAN","CANADA" -"3333008896","3333012479","CA","CAN","CANADA" -"3333012480","3333012991","US","USA","UNITED STATES" -"3333012992","3333014015","CA","CAN","CANADA" -"3333014528","3333017599","CA","CAN","CANADA" -"3333018112","3333023231","CA","CAN","CANADA" -"3333025280","3333029631","CA","CAN","CANADA" -"3333029888","3333389311","US","USA","UNITED STATES" -"3333390336","3333406463","US","USA","UNITED STATES" -"3333406720","3333422847","US","USA","UNITED STATES" -"3333423104","3333429759","US","USA","UNITED STATES" -"3333431296","3333434111","US","USA","UNITED STATES" -"3333439488","3333461247","US","USA","UNITED STATES" -"3333461504","3333462527","US","USA","UNITED STATES" -"3333462784","3333480191","US","USA","UNITED STATES" -"3333480192","3333481471","DE","DEU","GERMANY" -"3333481472","3333482495","US","USA","UNITED STATES" -"3333482752","3333488383","US","USA","UNITED STATES" -"3333488640","3333490175","US","USA","UNITED STATES" -"3333490688","3333495807","US","USA","UNITED STATES" -"3333496832","3333501951","US","USA","UNITED STATES" -"3333505024","3333517823","US","USA","UNITED STATES" -"3333521408","3333534975","US","USA","UNITED STATES" -"3333535232","3333535743","US","USA","UNITED STATES" -"3333536256","3333541631","US","USA","UNITED STATES" -"3333541888","3333550335","US","USA","UNITED STATES" -"3333550592","3333553919","US","USA","UNITED STATES" -"3333554176","3333561343","US","USA","UNITED STATES" -"3333562368","3333568511","US","USA","UNITED STATES" -"3333570560","3333583359","US","USA","UNITED STATES" -"3333586944","3333591295","US","USA","UNITED STATES" -"3333591552","3333593855","US","USA","UNITED STATES" -"3333594112","3333595647","US","USA","UNITED STATES" -"3333595904","3333619455","US","USA","UNITED STATES" -"3333619712","3333620991","US","USA","UNITED STATES" -"3333621760","3333624319","US","USA","UNITED STATES" -"3333624576","3333627391","US","USA","UNITED STATES" -"3333627904","3333633023","US","USA","UNITED STATES" -"3333652480","3333654015","US","USA","UNITED STATES" -"3333654272","3333665023","US","USA","UNITED STATES" -"3333665280","3333669887","US","USA","UNITED STATES" -"3333670144","3333675775","US","USA","UNITED STATES" -"3333676288","3333684991","US","USA","UNITED STATES" -"3333685248","3333723647","US","USA","UNITED STATES" -"3333723648","3333724671","JP","JPN","JAPAN" -"3333724672","3333725951","US","USA","UNITED STATES" -"3333726208","3333732863","US","USA","UNITED STATES" -"3333733376","3333734143","US","USA","UNITED STATES" -"3333734400","3333735935","US","USA","UNITED STATES" -"3333736192","3333737215","US","USA","UNITED STATES" -"3333737472","3333750527","US","USA","UNITED STATES" -"3333750784","3333766655","US","USA","UNITED STATES" -"3333767168","3333779967","US","USA","UNITED STATES" -"3333783552","3333791487","US","USA","UNITED STATES" -"3333791744","3333793279","US","USA","UNITED STATES" -"3333794048","3333796351","US","USA","UNITED STATES" -"3333796608","3333801727","US","USA","UNITED STATES" -"3333802496","3333816063","US","USA","UNITED STATES" -"3333816320","3333859839","US","USA","UNITED STATES" -"3333859840","3333860095","BM","BMU","BERMUDA" -"3333860096","3333870847","US","USA","UNITED STATES" -"3333871104","3333876479","US","USA","UNITED STATES" -"3333876736","3333881343","US","USA","UNITED STATES" -"3333881856","3333927423","US","USA","UNITED STATES" -"3333927936","3333933823","US","USA","UNITED STATES" -"3333934080","3333937919","US","USA","UNITED STATES" -"3333939200","3333939455","US","USA","UNITED STATES" -"3333939968","3333947135","US","USA","UNITED STATES" -"3333947392","3333950719","US","USA","UNITED STATES" -"3333951488","3333954047","US","USA","UNITED STATES" -"3333955584","3333963263","US","USA","UNITED STATES" -"3333963776","3333988607","US","USA","UNITED STATES" -"3333988608","3333988863","BR","BRA","BRAZIL" -"3333988864","3333997823","US","USA","UNITED STATES" -"3333997824","3333998079","CA","CAN","CANADA" -"3333998080","3334012671","US","USA","UNITED STATES" -"3334012928","3334019583","US","USA","UNITED STATES" -"3334021120","3334028799","US","USA","UNITED STATES" -"3334029312","3334053631","US","USA","UNITED STATES" -"3334053888","3334055167","US","USA","UNITED STATES" -"3334055680","3334079999","US","USA","UNITED STATES" -"3334082560","3334116607","US","USA","UNITED STATES" -"3334116864","3334119935","US","USA","UNITED STATES" -"3334120448","3334138623","US","USA","UNITED STATES" -"3334138624","3334138879","BM","BMU","BERMUDA" -"3334139136","3334143743","US","USA","UNITED STATES" -"3334144000","3334151167","US","USA","UNITED STATES" -"3334152192","3334179071","US","USA","UNITED STATES" -"3334180096","3334181631","US","USA","UNITED STATES" -"3334182400","3334187775","US","USA","UNITED STATES" -"3334187776","3334188031","BM","BMU","BERMUDA" -"3334188032","3334196735","US","USA","UNITED STATES" -"3334196992","3334201087","US","USA","UNITED STATES" -"3334201344","3334205183","US","USA","UNITED STATES" -"3334205440","3334209279","US","USA","UNITED STATES" -"3334209536","3334343935","US","USA","UNITED STATES" -"3334344704","3334348543","US","USA","UNITED STATES" -"3334348800","3334355967","US","USA","UNITED STATES" -"3334373376","3334374143","US","USA","UNITED STATES" -"3334374656","3334391039","US","USA","UNITED STATES" -"3334391552","3334392063","US","USA","UNITED STATES" -"3334392320","3334400255","US","USA","UNITED STATES" -"3334400768","3334405887","US","USA","UNITED STATES" -"3334406144","3334932223","US","USA","UNITED STATES" -"3334932480","3334934015","US","USA","UNITED STATES" -"3334934528","3334943743","US","USA","UNITED STATES" -"3334963200","3334974207","US","USA","UNITED STATES" -"3334974464","3334977791","US","USA","UNITED STATES" -"3334978048","3334979071","US","USA","UNITED STATES" -"3334979328","3334983167","US","USA","UNITED STATES" -"3334983424","3334987263","US","USA","UNITED STATES" -"3334987520","3334988031","US","USA","UNITED STATES" -"3334988288","3334993663","US","USA","UNITED STATES" -"3334993920","3334995711","US","USA","UNITED STATES" -"3334995968","3334998527","PH","PHL","PHILIPPINES" -"3335000064","3335003135","US","USA","UNITED STATES" -"3335028736","3335032063","US","USA","UNITED STATES" -"3335032320","3335033343","US","USA","UNITED STATES" -"3335033600","3335033855","US","USA","UNITED STATES" -"3335034112","3335043327","US","USA","UNITED STATES" -"3335043584","3335048191","US","USA","UNITED STATES" -"3335048448","3335057407","US","USA","UNITED STATES" -"3335058176","3335163135","US","USA","UNITED STATES" -"3335163904","3335180287","US","USA","UNITED STATES" -"3335180544","3335181567","US","USA","UNITED STATES" -"3335181824","3335192319","US","USA","UNITED STATES" -"3335192576","3335199231","US","USA","UNITED STATES" -"3335200768","3335235839","US","USA","UNITED STATES" -"3335236096","3335247103","US","USA","UNITED STATES" -"3335247360","3335249407","US","USA","UNITED STATES" -"3335249664","3335251967","US","USA","UNITED STATES" -"3335252224","3335252735","US","USA","UNITED STATES" -"3335252736","3335252991","CA","CAN","CANADA" -"3335252992","3335257855","US","USA","UNITED STATES" -"3335258112","3335265535","US","USA","UNITED STATES" -"3335266304","3335273983","US","USA","UNITED STATES" -"3335274496","3335276287","US","USA","UNITED STATES" -"3335276288","3335276799","PR","PRI","PUERTO RICO" -"3335276800","3335310079","US","USA","UNITED STATES" -"3335323648","3335324927","US","USA","UNITED STATES" -"3335325696","3335327487","US","USA","UNITED STATES" -"3335327744","3335349247","US","USA","UNITED STATES" -"3335356416","3335422463","US","USA","UNITED STATES" -"3335424000","3335439615","US","USA","UNITED STATES" -"3335439616","3335439871","CH","CHE","SWITZERLAND" -"3335439872","3335440383","US","USA","UNITED STATES" -"3335440384","3335441151","CH","CHE","SWITZERLAND" -"3335441152","3335447039","US","USA","UNITED STATES" -"3335447296","3335451903","US","USA","UNITED STATES" -"3335452160","3335452671","US","USA","UNITED STATES" -"3335453696","3335454463","US","USA","UNITED STATES" -"3335454720","3335458815","US","USA","UNITED STATES" -"3335458816","3335460863","BM","BMU","BERMUDA" -"3335462912","3335487743","US","USA","UNITED STATES" -"3335488000","3335501311","US","USA","UNITED STATES" -"3335501568","3335502591","US","USA","UNITED STATES" -"3335502848","3335511295","US","USA","UNITED STATES" -"3335511552","3335519999","US","USA","UNITED STATES" -"3335520256","3335654911","US","USA","UNITED STATES" -"3335659520","3335667711","US","USA","UNITED STATES" -"3335684096","3335716863","US","USA","UNITED STATES" -"3335733248","3335741439","US","USA","UNITED STATES" -"3335753728","3335784191","US","USA","UNITED STATES" -"3335784448","3335789567","US","USA","UNITED STATES" -"3335790592","3335795199","US","USA","UNITED STATES" -"3335798784","3336111359","US","USA","UNITED STATES" -"3336112128","3336116223","US","USA","UNITED STATES" -"3336118272","3336139263","US","USA","UNITED STATES" -"3336142848","3337029119","US","USA","UNITED STATES" -"3337029632","3337031167","US","USA","UNITED STATES" -"3337031680","3337034239","US","USA","UNITED STATES" -"3337035776","3337055231","US","USA","UNITED STATES" -"3337055232","3337060351","CA","CAN","CANADA" -"3337060352","3337119743","US","USA","UNITED STATES" -"3337125888","3337127167","US","USA","UNITED STATES" -"3337127424","3337134079","US","USA","UNITED STATES" -"3337134336","3337139967","US","USA","UNITED STATES" -"3337140224","3337148927","US","USA","UNITED STATES" -"3337149696","3337149951","US","USA","UNITED STATES" -"3337150464","3337155071","US","USA","UNITED STATES" -"3337155328","3337157887","US","USA","UNITED STATES" -"3337158656","3337289727","US","USA","UNITED STATES" -"3337289984","3337297919","CA","CAN","CANADA" -"3337297920","3337302015","US","USA","UNITED STATES" -"3337302016","3337303551","CA","CAN","CANADA" -"3337304064","3337322495","CA","CAN","CANADA" -"3337322752","3337323007","CA","CAN","CANADA" -"3337324544","3337335295","CA","CAN","CANADA" -"3337335296","3337335807","US","USA","UNITED STATES" -"3337335808","3337341951","CA","CAN","CANADA" -"3337342464","3337355007","CA","CAN","CANADA" -"3337355264","3337650175","US","USA","UNITED STATES" -"3337650176","3337650687","GB","GBR","UNITED KINGDOM" -"3337650688","3337650943","US","USA","UNITED STATES" -"3337650944","3337651199","HK","HKG","HONG KONG" -"3337651200","3337651455","CH","CHE","SWITZERLAND" -"3337651456","3337651711","SG","SGP","SINGAPORE" -"3337651712","3337653503","CH","CHE","SWITZERLAND" -"3337653504","3337653759","JP","JPN","JAPAN" -"3337653760","3337654783","CH","CHE","SWITZERLAND" -"3337654784","3337655039","AU","AUS","AUSTRALIA" -"3337655040","3337682943","CH","CHE","SWITZERLAND" -"3337682944","3337685503","US","USA","UNITED STATES" -"3337687040","3337694207","US","USA","UNITED STATES" -"3337699328","3337882111","US","USA","UNITED STATES" -"3337883648","3337891583","US","USA","UNITED STATES" -"3337912320","3337948415","US","USA","UNITED STATES" -"3337949184","3337955839","US","USA","UNITED STATES" -"3337977856","3337980671","US","USA","UNITED STATES" -"3337980672","3337980927","PR","PRI","PUERTO RICO" -"3337980928","3337986047","US","USA","UNITED STATES" -"3337986048","3337986303","BB","BRB","BARBADOS" -"3337986304","3337989375","US","USA","UNITED STATES" -"3337990912","3338010367","US","USA","UNITED STATES" -"3338010624","3338017279","US","USA","UNITED STATES" -"3338018816","3338021887","US","USA","UNITED STATES" -"3338027008","3338051583","US","USA","UNITED STATES" -"3338051840","3338058239","US","USA","UNITED STATES" -"3338059776","3338063871","US","USA","UNITED STATES" -"3338064128","3338069247","US","USA","UNITED STATES" -"3338069248","3338069759","BB","BRB","BARBADOS" -"3338069760","3338075903","US","USA","UNITED STATES" -"3338076160","3338342143","US","USA","UNITED STATES" -"3338342400","3338346239","US","USA","UNITED STATES" -"3338346496","3338348543","US","USA","UNITED STATES" -"3338403840","3338439167","US","USA","UNITED STATES" -"3338439424","3338444799","US","USA","UNITED STATES" -"3338445056","3338445311","US","USA","UNITED STATES" -"3338445824","3338455551","US","USA","UNITED STATES" -"3338456576","3338460671","US","USA","UNITED STATES" -"3338460928","3338462719","US","USA","UNITED STATES" -"3338462976","3338469119","US","USA","UNITED STATES" -"3338469376","3338541567","US","USA","UNITED STATES" -"3338543104","3338551295","US","USA","UNITED STATES" -"3338665984","3338686463","US","USA","UNITED STATES" -"3338686464","3338688511","AW","ABW","ARUBA" -"3338688512","3338689535","US","USA","UNITED STATES" -"3338689536","3338689791","SL","SLE","SIERRA LEONE" -"3338689792","3338825727","US","USA","UNITED STATES" -"3338825728","3338827775","AW","ABW","ARUBA" -"3338827776","3338912767","US","USA","UNITED STATES" -"3338912768","3338913023","EC","ECU","ECUADOR" -"3338913024","3338916351","US","USA","UNITED STATES" -"3338916352","3338916479","CN","CHN","CHINA" -"3338916480","3338963455","US","USA","UNITED STATES" -"3338963712","3338964991","US","USA","UNITED STATES" -"3338965248","3338969343","US","USA","UNITED STATES" -"3338970112","3338976767","US","USA","UNITED STATES" -"3338977024","3338993407","US","USA","UNITED STATES" -"3338993664","3339000319","US","USA","UNITED STATES" -"3339000832","3339028735","US","USA","UNITED STATES" -"3339028992","3339031295","US","USA","UNITED STATES" -"3339031552","3339042047","US","USA","UNITED STATES" -"3339042304","3339043327","US","USA","UNITED STATES" -"3339043584","3339045119","US","USA","UNITED STATES" -"3339045376","3339050751","US","USA","UNITED STATES" -"3339051008","3339058943","US","USA","UNITED STATES" -"3339059200","3339063039","US","USA","UNITED STATES" -"3339063296","3339076863","US","USA","UNITED STATES" -"3339076864","3339077631","JP","JPN","JAPAN" -"3339077632","3339079167","US","USA","UNITED STATES" -"3339079168","3339079679","DE","DEU","GERMANY" -"3339079680","3339091967","US","USA","UNITED STATES" -"3339091968","3339094015","NL","NLD","NETHERLANDS" -"3339094016","3339136767","US","USA","UNITED STATES" -"3339137024","3339142655","US","USA","UNITED STATES" -"3339142656","3339142911","NL","NLD","NETHERLANDS" -"3339142912","3339145727","US","USA","UNITED STATES" -"3339145728","3339145983","NL","NLD","NETHERLANDS" -"3339145984","3339146239","US","USA","UNITED STATES" -"3339146496","3339147007","US","USA","UNITED STATES" -"3339147008","3339147775","CA","CAN","CANADA" -"3339147776","3339148031","MS","MSR","MONTSERRAT" -"3339148032","3339148543","US","USA","UNITED STATES" -"3339148800","3339149311","US","USA","UNITED STATES" -"3339190272","3339256575","US","USA","UNITED STATES" -"3339256832","3339259135","US","USA","UNITED STATES" -"3339259904","3339270399","US","USA","UNITED STATES" -"3339271168","3339322367","US","USA","UNITED STATES" -"3339323392","3339324927","US","USA","UNITED STATES" -"3339325440","3339327999","US","USA","UNITED STATES" -"3339329536","3339337727","US","USA","UNITED STATES" -"3339337984","3339338239","US","USA","UNITED STATES" -"3339338496","3339342847","US","USA","UNITED STATES" -"3339343104","3339343615","US","USA","UNITED STATES" -"3339343872","3339348223","US","USA","UNITED STATES" -"3339348480","3339352831","US","USA","UNITED STATES" -"3339353088","3339367423","US","USA","UNITED STATES" -"3339367680","3339373055","US","USA","UNITED STATES" -"3339373568","3339386111","US","USA","UNITED STATES" -"3339386880","3339655679","US","USA","UNITED STATES" -"3339656192","3339667967","US","USA","UNITED STATES" -"3339668480","3339669503","US","USA","UNITED STATES" -"3339669504","3339671807","CA","CAN","CANADA" -"3339672576","3339673599","US","USA","UNITED STATES" -"3339714560","3339722495","US","USA","UNITED STATES" -"3339730944","3339739135","US","USA","UNITED STATES" -"3339780096","3339911167","US","USA","UNITED STATES" -"3339913216","3339923455","US","USA","UNITED STATES" -"3339923456","3339926015","CA","CAN","CANADA" -"3339926528","3339927551","CA","CAN","CANADA" -"3339976704","3340046079","US","USA","UNITED STATES" -"3340046336","3340058623","US","USA","UNITED STATES" -"3340107776","3340369919","CA","CAN","CANADA" -"3340369920","3340383487","US","USA","UNITED STATES" -"3340384256","3340386559","US","USA","UNITED STATES" -"3340387328","3340388351","CA","CAN","CANADA" -"3340388352","3340390399","US","USA","UNITED STATES" -"3340394496","3340404735","US","USA","UNITED STATES" -"3340404992","3340411903","US","USA","UNITED STATES" -"3340412160","3340414975","US","USA","UNITED STATES" -"3340415232","3340416767","US","USA","UNITED STATES" -"3340417280","3340419071","US","USA","UNITED STATES" -"3340419328","3340425983","US","USA","UNITED STATES" -"3340426752","3340429823","US","USA","UNITED STATES" -"3340429824","3340430079","PA","PAN","PANAMA" -"3340430080","3340431871","US","USA","UNITED STATES" -"3340432384","3340435199","US","USA","UNITED STATES" -"3340435456","3340436991","US","USA","UNITED STATES" -"3340437504","3340443135","US","USA","UNITED STATES" -"3340443648","3340451839","US","USA","UNITED STATES" -"3340500992","3340643839","US","USA","UNITED STATES" -"3340697600","3340835327","US","USA","UNITED STATES" -"3340835840","3340865279","US","USA","UNITED STATES" -"3340865536","3340882431","US","USA","UNITED STATES" -"3340882688","3340884479","US","USA","UNITED STATES" -"3340884992","3340886527","US","USA","UNITED STATES" -"3340886784","3340887551","US","USA","UNITED STATES" -"3340888576","3340893951","US","USA","UNITED STATES" -"3340894208","3340923391","US","USA","UNITED STATES" -"3340923904","3340955647","US","USA","UNITED STATES" -"3340959744","3341027839","US","USA","UNITED STATES" -"3341028352","3341031935","US","USA","UNITED STATES" -"3341032448","3341041663","US","USA","UNITED STATES" -"3341090816","3341162751","US","USA","UNITED STATES" -"3341163520","3341172735","US","USA","UNITED STATES" -"3341189120","3341192959","US","USA","UNITED STATES" -"3341193216","3341194239","US","USA","UNITED STATES" -"3341194496","3341196799","US","USA","UNITED STATES" -"3341221888","3341484287","US","USA","UNITED STATES" -"3341484288","3341485055","CA","CAN","CANADA" -"3341485056","3341511679","US","USA","UNITED STATES" -"3341511680","3341513215","CA","CAN","CANADA" -"3341513728","3341517823","CA","CAN","CANADA" -"3341518848","3341520895","CA","CAN","CANADA" -"3341520896","3341521663","US","USA","UNITED STATES" -"3341521664","3341531135","CA","CAN","CANADA" -"3341531392","3341533951","US","USA","UNITED STATES" -"3341534976","3341536767","CA","CAN","CANADA" -"3341537280","3341541375","US","USA","UNITED STATES" -"3341541888","3341546239","US","USA","UNITED STATES" -"3341546240","3341547007","CA","CAN","CANADA" -"3341547008","3341547519","CH","CHE","SWITZERLAND" -"3341547520","3341549311","CA","CAN","CANADA" -"3341549568","3341705215","US","USA","UNITED STATES" -"3341713408","3341750015","US","USA","UNITED STATES" -"3341750272","3341755647","US","USA","UNITED STATES" -"3341756416","3341758463","US","USA","UNITED STATES" -"3341811712","3341815039","US","USA","UNITED STATES" -"3341815808","3341823999","US","USA","UNITED STATES" -"3341877248","3342139391","US","USA","UNITED STATES" -"3342139392","3342204927","CH","CHE","SWITZERLAND" -"3342204928","3342470399","US","USA","UNITED STATES" -"3342471168","3342483455","US","USA","UNITED STATES" -"3342532608","3342534143","US","USA","UNITED STATES" -"3342534656","3342540543","US","USA","UNITED STATES" -"3342540800","3342543359","US","USA","UNITED STATES" -"3342543872","3342544895","US","USA","UNITED STATES" -"3342598144","3342603263","CA","CAN","CANADA" -"3342603264","3342604799","US","USA","UNITED STATES" -"3342604800","3342605311","CA","CAN","CANADA" -"3342605312","3342605567","US","USA","UNITED STATES" -"3342605568","3342614271","CA","CAN","CANADA" -"3342614528","3342623743","CA","CAN","CANADA" -"3342624256","3342627839","CA","CAN","CANADA" -"3342628096","3342657535","CA","CAN","CANADA" -"3342657792","3342663423","CA","CAN","CANADA" -"3342663680","3342999039","US","USA","UNITED STATES" -"3342999552","3343007743","US","USA","UNITED STATES" -"3343056896","3343123967","US","USA","UNITED STATES" -"3343124480","3343126015","US","USA","UNITED STATES" -"3343126528","3343129087","US","USA","UNITED STATES" -"3343129600","3343135999","US","USA","UNITED STATES" -"3343136768","3343148543","US","USA","UNITED STATES" -"3343149056","3343151103","US","USA","UNITED STATES" -"3343187968","3343319295","US","USA","UNITED STATES" -"3343319296","3343342847","CA","CAN","CANADA" -"3343343104","3343346175","CA","CAN","CANADA" -"3343346688","3343355391","CA","CAN","CANADA" -"3343355904","3343359743","CA","CAN","CANADA" -"3343360000","3343364095","CA","CAN","CANADA" -"3343364096","3343365119","US","USA","UNITED STATES" -"3343365632","3343366655","CA","CAN","CANADA" -"3343366912","3343372543","CA","CAN","CANADA" -"3343373312","3343376383","US","USA","UNITED STATES" -"3343380480","3343384319","CA","CAN","CANADA" -"3343384576","3343452671","US","USA","UNITED STATES" -"3343453184","3343456511","US","USA","UNITED STATES" -"3343457280","3343460863","US","USA","UNITED STATES" -"3343461376","3343462399","US","USA","UNITED STATES" -"3343466496","3343470847","US","USA","UNITED STATES" -"3343471616","3343474687","US","USA","UNITED STATES" -"3343482880","3343568127","US","USA","UNITED STATES" -"3343568384","3343575807","US","USA","UNITED STATES" -"3343576064","3343580927","US","USA","UNITED STATES" -"3343581184","3343855615","US","USA","UNITED STATES" -"3343859712","3343887359","US","USA","UNITED STATES" -"3343887616","3343890687","US","USA","UNITED STATES" -"3343890944","3343902463","US","USA","UNITED STATES" -"3343902720","3343905023","US","USA","UNITED STATES" -"3343905280","3343908607","US","USA","UNITED STATES" -"3343908864","3344109055","US","USA","UNITED STATES" -"3344109568","3344111871","US","USA","UNITED STATES" -"3344112640","3344116223","US","USA","UNITED STATES" -"3344116736","3344117759","US","USA","UNITED STATES" -"3344121856","3344125951","US","USA","UNITED STATES" -"3344171264","3344236287","CA","CAN","CANADA" -"3344237056","3344242175","CA","CAN","CANADA" -"3344242688","3344252671","CA","CAN","CANADA" -"3344252928","3344255999","CA","CAN","CANADA" -"3344256000","3344257023","US","USA","UNITED STATES" -"3344261888","3344266239","CA","CAN","CANADA" -"3344266752","3344268543","CA","CAN","CANADA" -"3344268544","3344269311","US","USA","UNITED STATES" -"3344269312","3344287743","CA","CAN","CANADA" -"3344288000","3344288767","CA","CAN","CANADA" -"3344288768","3344289791","PR","PRI","PUERTO RICO" -"3344289792","3344292863","US","USA","UNITED STATES" -"3344292864","3344296447","CA","CAN","CANADA" -"3344296960","3344297983","GD","GRD","GRENADA" -"3344297984","3344299007","US","USA","UNITED STATES" -"3344299264","3344299519","CA","CAN","CANADA" -"3344299520","3344299775","US","USA","UNITED STATES" -"3344299776","3344300543","CA","CAN","CANADA" -"3344300544","3344300799","US","USA","UNITED STATES" -"3344300800","3344301823","CA","CAN","CANADA" -"3344302080","3344374271","US","USA","UNITED STATES" -"3344374784","3344379903","US","USA","UNITED STATES" -"3344384000","3344388095","US","USA","UNITED STATES" -"3344433152","3344466431","US","USA","UNITED STATES" -"3344466688","3344467455","US","USA","UNITED STATES" -"3344468480","3344469247","US","USA","UNITED STATES" -"3344469504","3344482047","US","USA","UNITED STATES" -"3344482304","3344486399","US","USA","UNITED STATES" -"3344486400","3344488447","NL","NLD","NETHERLANDS" -"3344488448","3344495871","US","USA","UNITED STATES" -"3344496640","3344497919","US","USA","UNITED STATES" -"3344498176","3344498431","US","USA","UNITED STATES" -"3344498688","3344511231","US","USA","UNITED STATES" -"3344512000","3344531711","US","USA","UNITED STATES" -"3344531968","3344534271","US","USA","UNITED STATES" -"3344534528","3344536831","US","USA","UNITED STATES" -"3344537088","3344548351","US","USA","UNITED STATES" -"3344548608","3344555007","US","USA","UNITED STATES" -"3344555264","3344556031","US","USA","UNITED STATES" -"3344556288","3344563967","US","USA","UNITED STATES" -"3344564224","3344633855","US","USA","UNITED STATES" -"3344633856","3344637951","CH","CHE","SWITZERLAND" -"3344637952","3344640511","US","USA","UNITED STATES" -"3344641024","3344642047","US","USA","UNITED STATES" -"3344695296","3344959999","US","USA","UNITED STATES" -"3344960512","3344964607","US","USA","UNITED STATES" -"3344964608","3344965631","CA","CAN","CANADA" -"3344965632","3344969727","US","USA","UNITED STATES" -"3345022976","3345291775","US","USA","UNITED STATES" -"3345292288","3345295871","US","USA","UNITED STATES" -"3345296384","3345297407","US","USA","UNITED STATES" -"3345350656","3345362943","US","USA","UNITED STATES" -"3345416192","3345418239","US","USA","UNITED STATES" -"3345418240","3345419519","NL","NLD","NETHERLANDS" -"3345419520","3345422847","US","USA","UNITED STATES" -"3345423360","3345424383","TC","TCA","TURKS AND CAICOS ISLANDS" -"3345424384","3345430527","US","USA","UNITED STATES" -"3345430528","3345432575","CA","CAN","CANADA" -"3345432576","3345433599","GB","GBR","UNITED KINGDOM" -"3345433600","3345433855","SG","SGP","SINGAPORE" -"3345433856","3345434879","US","USA","UNITED STATES" -"3345434880","3345435135","ES","ESP","SPAIN" -"3345435136","3345435391","LU","LUX","LUXEMBOURG" -"3345435392","3345436671","DE","DEU","GERMANY" -"3345436672","3345436927","US","USA","UNITED STATES" -"3345436928","3345437183","ES","ESP","SPAIN" -"3345437184","3345437695","GB","GBR","UNITED KINGDOM" -"3345437696","3345437951","NL","NLD","NETHERLANDS" -"3345438208","3345438463","GB","GBR","UNITED KINGDOM" -"3345438464","3345438975","FR","FRA","FRANCE" -"3345439232","3345439743","US","USA","UNITED STATES" -"3345439744","3345439999","FR","FRA","FRANCE" -"3345440000","3345440255","DE","DEU","GERMANY" -"3345440256","3345440767","US","USA","UNITED STATES" -"3345441024","3345441791","DE","DEU","GERMANY" -"3345442304","3345442559","CL","CHL","CHILE" -"3345442560","3345442815","JP","JPN","JAPAN" -"3345442816","3345443327","AT","AUT","AUSTRIA" -"3345443328","3345443583","CH","CHE","SWITZERLAND" -"3345443584","3345443839","DE","DEU","GERMANY" -"3345444096","3345444607","US","USA","UNITED STATES" -"3345444608","3345445119","CH","CHE","SWITZERLAND" -"3345445120","3345445375","US","USA","UNITED STATES" -"3345445376","3345446399","GB","GBR","UNITED KINGDOM" -"3345446656","3345446911","IT","ITA","ITALY" -"3345446912","3345447679","US","USA","UNITED STATES" -"3345447680","3345448959","BE","BEL","BELGIUM" -"3345448960","3346138879","US","USA","UNITED STATES" -"3346139136","3346140415","US","USA","UNITED STATES" -"3346141184","3346188543","US","USA","UNITED STATES" -"3346189312","3346190335","US","USA","UNITED STATES" -"3346202624","3346209279","US","USA","UNITED STATES" -"3346209792","3346216447","US","USA","UNITED STATES" -"3346216960","3346219007","US","USA","UNITED STATES" -"3346268160","3346269695","US","USA","UNITED STATES" -"3346270208","3346282495","US","USA","UNITED STATES" -"3346282496","3346284543","PR","PRI","PUERTO RICO" -"3346333696","3346471423","US","USA","UNITED STATES" -"3346471936","3346481151","US","USA","UNITED STATES" -"3346530304","3346545151","US","USA","UNITED STATES" -"3346545664","3346578431","US","USA","UNITED STATES" -"3346578688","3346583807","US","USA","UNITED STATES" -"3346584064","3346595583","US","USA","UNITED STATES" -"3346596864","3346660863","US","USA","UNITED STATES" -"3346661376","3346662143","US","USA","UNITED STATES" -"3346662400","3346663167","US","USA","UNITED STATES" -"3346663424","3346690047","US","USA","UNITED STATES" -"3346694144","3346726911","US","USA","UNITED STATES" -"3346727936","3346730239","US","USA","UNITED STATES" -"3346731008","3346734591","US","USA","UNITED STATES" -"3346735104","3346748159","US","USA","UNITED STATES" -"3346748416","3346750207","US","USA","UNITED STATES" -"3346750464","3346750719","US","USA","UNITED STATES" -"3346751488","3346793215","US","USA","UNITED STATES" -"3346793472","3346793983","US","USA","UNITED STATES" -"3346794496","3346798847","US","USA","UNITED STATES" -"3346799616","3346807039","US","USA","UNITED STATES" -"3346807808","3346861823","US","USA","UNITED STATES" -"3346862080","3346923519","US","USA","UNITED STATES" -"3346923520","3346989055","CA","CAN","CANADA" -"3346989056","3346996991","US","USA","UNITED STATES" -"3346997248","3346999807","US","USA","UNITED STATES" -"3347000320","3347001343","US","USA","UNITED STATES" -"3347054592","3349446911","US","USA","UNITED STATES" -"3349446912","3349447167","CA","CAN","CANADA" -"3349447168","3349450495","US","USA","UNITED STATES" -"3349450752","3349461503","US","USA","UNITED STATES" -"3349461760","3349462783","US","USA","UNITED STATES" -"3349463296","3349479167","US","USA","UNITED STATES" -"3349479424","3349533695","US","USA","UNITED STATES" -"3349533952","3349544703","US","USA","UNITED STATES" -"3349545216","3349545727","CA","CAN","CANADA" -"3349545984","3349549567","CA","CAN","CANADA" -"3349550080","3349551103","CA","CAN","CANADA" -"3349551104","3349553663","US","USA","UNITED STATES" -"3349553664","3349607423","CA","CAN","CANADA" -"3349607936","3349608447","CA","CAN","CANADA" -"3349608448","3349609215","US","USA","UNITED STATES" -"3349609216","3349610239","CA","CAN","CANADA" -"3349610496","3349614591","US","USA","UNITED STATES" -"3349676032","3349678591","US","USA","UNITED STATES" -"3349679104","3349682431","US","USA","UNITED STATES" -"3349683200","3349686527","US","USA","UNITED STATES" -"3349687296","3349688319","US","USA","UNITED STATES" -"3349741568","3349987327","US","USA","UNITED STATES" -"3349987328","3349996543","BM","BMU","BERMUDA" -"3349996544","3349997055","KY","CYM","CAYMAN ISLANDS" -"3349997056","3350003711","BM","BMU","BERMUDA" -"3350003712","3350134783","US","USA","UNITED STATES" -"3350135040","3350145791","CA","CAN","CANADA" -"3350146048","3350147071","US","USA","UNITED STATES" -"3350151168","3350160639","CA","CAN","CANADA" -"3350160896","3350175743","CA","CAN","CANADA" -"3350176512","3350181887","CA","CAN","CANADA" -"3350181888","3350182911","US","USA","UNITED STATES" -"3350183168","3350200063","CA","CAN","CANADA" -"3350200320","3350466303","US","USA","UNITED STATES" -"3350466560","3350469119","US","USA","UNITED STATES" -"3350469632","3350470655","CA","CAN","CANADA" -"3350470656","3350475775","US","USA","UNITED STATES" -"3350475776","3350476799","CA","CAN","CANADA" -"3350476800","3350478847","US","USA","UNITED STATES" -"3350528000","3350545151","US","USA","UNITED STATES" -"3350545408","3350548735","US","USA","UNITED STATES" -"3350549248","3350552575","US","USA","UNITED STATES" -"3350552832","3350565887","US","USA","UNITED STATES" -"3350566144","3350574591","US","USA","UNITED STATES" -"3350575104","3350577151","US","USA","UNITED STATES" -"3350577664","3350588927","US","USA","UNITED STATES" -"3350589696","3350591231","US","USA","UNITED STATES" -"3350591488","3350593279","US","USA","UNITED STATES" -"3350614016","3350618111","US","USA","UNITED STATES" -"3350630400","3350634495","US","USA","UNITED STATES" -"3350654976","3350728191","US","USA","UNITED STATES" -"3350728704","3350746367","US","USA","UNITED STATES" -"3350746624","3350756607","US","USA","UNITED STATES" -"3350757376","3350760959","US","USA","UNITED STATES" -"3350766080","3350771967","US","USA","UNITED STATES" -"3350772224","3350774271","US","USA","UNITED STATES" -"3350774528","3350778623","US","USA","UNITED STATES" -"3350778880","3350789887","US","USA","UNITED STATES" -"3350790400","3350814975","CA","CAN","CANADA" -"3350815232","3350823423","CA","CAN","CANADA" -"3350823936","3350825727","CA","CAN","CANADA" -"3350825728","3350825983","GB","GBR","UNITED KINGDOM" -"3350825984","3350834687","CA","CAN","CANADA" -"3350835200","3350836223","CA","CAN","CANADA" -"3350836992","3350837247","CA","CAN","CANADA" -"3350837760","3350843391","CA","CAN","CANADA" -"3350843648","3350855679","CA","CAN","CANADA" -"3350855680","3350862079","US","USA","UNITED STATES" -"3350862080","3350864639","CL","CHL","CHILE" -"3350864640","3350925055","US","USA","UNITED STATES" -"3350925312","3350950399","US","USA","UNITED STATES" -"3350950912","3350953983","US","USA","UNITED STATES" -"3350986752","3350988031","US","USA","UNITED STATES" -"3350988800","3350990335","US","USA","UNITED STATES" -"3350990848","3350999039","US","USA","UNITED STATES" -"3351052288","3351053823","US","USA","UNITED STATES" -"3351054336","3351058943","US","USA","UNITED STATES" -"3351060480","3351068159","US","USA","UNITED STATES" -"3351117824","3351129087","US","USA","UNITED STATES" -"3351134208","3351151359","US","USA","UNITED STATES" -"3351151616","3351151871","US","USA","UNITED STATES" -"3351152128","3351158527","US","USA","UNITED STATES" -"3351158784","3351159295","US","USA","UNITED STATES" -"3351159552","3351160063","US","USA","UNITED STATES" -"3351160320","3351160575","US","USA","UNITED STATES" -"3351161088","3351167487","US","USA","UNITED STATES" -"3351168512","3351183103","US","USA","UNITED STATES" -"3351183360","3351212031","US","USA","UNITED STATES" -"3351216128","3351251967","US","USA","UNITED STATES" -"3351252992","3351265279","US","USA","UNITED STATES" -"3351314432","3351315967","US","USA","UNITED STATES" -"3351316480","3351318015","US","USA","UNITED STATES" -"3351318528","3351322367","US","USA","UNITED STATES" -"3351322624","3351326719","US","USA","UNITED STATES" -"3351379968","3351446783","US","USA","UNITED STATES" -"3351447552","3351448831","US","USA","UNITED STATES" -"3351449600","3351458815","US","USA","UNITED STATES" -"3351459840","3351474687","US","USA","UNITED STATES" -"3351476224","3351478271","US","USA","UNITED STATES" -"3351511040","3351512319","US","USA","UNITED STATES" -"3351513088","3351579135","US","USA","UNITED STATES" -"3351580672","3351642111","US","USA","UNITED STATES" -"3351642112","3351695871","CA","CAN","CANADA" -"3351696384","3351696639","CA","CAN","CANADA" -"3351697408","3351698431","CA","CAN","CANADA" -"3351698432","3351707391","US","USA","UNITED STATES" -"3351707648","3351774463","US","USA","UNITED STATES" -"3351775232","3351776767","US","USA","UNITED STATES" -"3351777280","3351780351","US","USA","UNITED STATES" -"3351781376","3351785471","US","USA","UNITED STATES" -"3351789568","3351797759","US","USA","UNITED STATES" -"3351805952","3351855103","US","USA","UNITED STATES" -"3351871488","3351894015","US","USA","UNITED STATES" -"3351894272","3351895295","US","USA","UNITED STATES" -"3351895808","3351896319","US","USA","UNITED STATES" -"3351896576","3351900671","US","USA","UNITED STATES" -"3351900928","3351903999","US","USA","UNITED STATES" -"3351912448","3351927551","CA","CAN","CANADA" -"3351927552","3351927807","US","USA","UNITED STATES" -"3351927808","3351959551","CA","CAN","CANADA" -"3351961600","3351963647","CA","CAN","CANADA" -"3351964160","3351969791","CA","CAN","CANADA" -"3351969792","3351971839","US","USA","UNITED STATES" -"3351971840","3351972095","IL","ISR","ISRAEL" -"3351972096","3351972863","US","USA","UNITED STATES" -"3351972864","3351973119","IL","ISR","ISRAEL" -"3351973120","3351975935","US","USA","UNITED STATES" -"3351975936","3351976447","IL","ISR","ISRAEL" -"3351976448","3351976703","US","USA","UNITED STATES" -"3351976704","3351976959","IL","ISR","ISRAEL" -"3351976960","3351979519","US","USA","UNITED STATES" -"3351979520","3351979583","IL","ISR","ISRAEL" -"3351979584","3351986943","US","USA","UNITED STATES" -"3351986944","3351987199","IL","ISR","ISRAEL" -"3351987200","3351995647","US","USA","UNITED STATES" -"3351995648","3351995903","IL","ISR","ISRAEL" -"3351995904","3351996927","US","USA","UNITED STATES" -"3351996928","3351997439","IL","ISR","ISRAEL" -"3351997440","3352004351","US","USA","UNITED STATES" -"3352004352","3352004607","IL","ISR","ISRAEL" -"3352004608","3352005887","US","USA","UNITED STATES" -"3352005888","3352006143","IL","ISR","ISRAEL" -"3352006144","3352006399","US","USA","UNITED STATES" -"3352006400","3352006527","IL","ISR","ISRAEL" -"3352006528","3352006591","US","USA","UNITED STATES" -"3352006592","3352006655","IL","ISR","ISRAEL" -"3352006656","3352007391","US","USA","UNITED STATES" -"3352007392","3352007423","IL","ISR","ISRAEL" -"3352007424","3352007583","US","USA","UNITED STATES" -"3352007584","3352007679","IL","ISR","ISRAEL" -"3352007680","3352007967","US","USA","UNITED STATES" -"3352007968","3352008063","IL","ISR","ISRAEL" -"3352008064","3352009311","US","USA","UNITED STATES" -"3352009312","3352009343","IL","ISR","ISRAEL" -"3352009344","3352010815","US","USA","UNITED STATES" -"3352010816","3352010879","IL","ISR","ISRAEL" -"3352010880","3352011199","US","USA","UNITED STATES" -"3352011200","3352011263","IL","ISR","ISRAEL" -"3352011264","3352014719","US","USA","UNITED STATES" -"3352014720","3352014847","IL","ISR","ISRAEL" -"3352014848","3352014927","US","USA","UNITED STATES" -"3352014928","3352014943","IL","ISR","ISRAEL" -"3352014944","3352015999","US","USA","UNITED STATES" -"3352016000","3352016127","IL","ISR","ISRAEL" -"3352016128","3352020671","US","USA","UNITED STATES" -"3352020672","3352020703","IL","ISR","ISRAEL" -"3352020704","3352023039","US","USA","UNITED STATES" -"3352023040","3352023167","IL","ISR","ISRAEL" -"3352023168","3352023343","US","USA","UNITED STATES" -"3352023344","3352023359","IL","ISR","ISRAEL" -"3352023360","3352023679","US","USA","UNITED STATES" -"3352023680","3352023807","IL","ISR","ISRAEL" -"3352023808","3352024319","US","USA","UNITED STATES" -"3352024320","3352024447","IL","ISR","ISRAEL" -"3352024448","3352025087","US","USA","UNITED STATES" -"3352025088","3352025215","IL","ISR","ISRAEL" -"3352025216","3352026623","US","USA","UNITED STATES" -"3352026624","3352026751","IL","ISR","ISRAEL" -"3352026752","3352027295","US","USA","UNITED STATES" -"3352027296","3352027327","IL","ISR","ISRAEL" -"3352027328","3352028799","US","USA","UNITED STATES" -"3352028800","3352028927","IL","ISR","ISRAEL" -"3352028928","3352030047","US","USA","UNITED STATES" -"3352030048","3352030079","IL","ISR","ISRAEL" -"3352030080","3352030143","US","USA","UNITED STATES" -"3352030144","3352030175","IL","ISR","ISRAEL" -"3352030176","3352030383","US","USA","UNITED STATES" -"3352030384","3352030399","IL","ISR","ISRAEL" -"3352030400","3352032719","US","USA","UNITED STATES" -"3352032720","3352032735","IL","ISR","ISRAEL" -"3352032736","3352034303","US","USA","UNITED STATES" -"3352034304","3352034815","IL","ISR","ISRAEL" -"3352034816","3352035327","US","USA","UNITED STATES" -"3352100864","3352559871","US","USA","UNITED STATES" -"3352559872","3352563199","CA","CAN","CANADA" -"3352563456","3352570111","CA","CAN","CANADA" -"3352570368","3352573951","CA","CAN","CANADA" -"3352574208","3352581631","CA","CAN","CANADA" -"3352582144","3352583935","CA","CAN","CANADA" -"3352584192","3352591359","CA","CAN","CANADA" -"3352591616","3352615423","CA","CAN","CANADA" -"3352615424","3352616959","US","USA","UNITED STATES" -"3352616960","3352624895","CA","CAN","CANADA" -"3352625152","3352887295","CA","CAN","CANADA" -"3352887296","3352911871","US","USA","UNITED STATES" -"3352920064","3353309695","US","USA","UNITED STATES" -"3353311232","3353333759","US","USA","UNITED STATES" -"3353346048","3353729023","US","USA","UNITED STATES" -"3353729024","3353729279","HK","HKG","HONG KONG" -"3353729280","3353730047","US","USA","UNITED STATES" -"3353739264","3353741823","US","USA","UNITED STATES" -"3353743360","3353746943","US","USA","UNITED STATES" -"3353747456","3353752575","US","USA","UNITED STATES" -"3353753600","3353767935","US","USA","UNITED STATES" -"3353772032","3353806335","US","USA","UNITED STATES" -"3353806848","3353818111","US","USA","UNITED STATES" -"3353819136","3353821183","US","USA","UNITED STATES" -"3353837568","3353843455","US","USA","UNITED STATES" -"3353843712","3353845759","US","USA","UNITED STATES" -"3353870336","3353939455","US","USA","UNITED STATES" -"3353939968","3353942527","US","USA","UNITED STATES" -"3353944064","3353948159","US","USA","UNITED STATES" -"3353952256","3353953279","US","USA","UNITED STATES" -"3353953536","3353959423","US","USA","UNITED STATES" -"3353959680","3353960191","US","USA","UNITED STATES" -"3353960448","3353966079","US","USA","UNITED STATES" -"3353966336","3353967871","US","USA","UNITED STATES" -"3353968128","3353969663","US","USA","UNITED STATES" -"3353969920","3353977343","US","USA","UNITED STATES" -"3353977600","3353979647","US","USA","UNITED STATES" -"3353979648","3353979903","CA","CAN","CANADA" -"3353979904","3353982719","US","USA","UNITED STATES" -"3353982720","3353983231","CA","CAN","CANADA" -"3353983232","3353985023","US","USA","UNITED STATES" -"3353985280","3353987583","US","USA","UNITED STATES" -"3353988352","3353991679","US","USA","UNITED STATES" -"3354001408","3354066943","US","USA","UNITED STATES" -"3354066944","3354132479","CA","CAN","CANADA" -"3354132480","3354463743","US","USA","UNITED STATES" -"3354464256","3354466815","US","USA","UNITED STATES" -"3354468352","3354476031","US","USA","UNITED STATES" -"3354476544","3354484735","US","USA","UNITED STATES" -"3354525696","3354532351","US","USA","UNITED STATES" -"3354533888","3354560255","US","USA","UNITED STATES" -"3354560512","3354562559","US","USA","UNITED STATES" -"3354562816","3354568703","US","USA","UNITED STATES" -"3354568960","3354570239","US","USA","UNITED STATES" -"3354570496","3354582527","US","USA","UNITED STATES" -"3354582784","3354588415","US","USA","UNITED STATES" -"3354588672","3354590975","US","USA","UNITED STATES" -"3354591232","3354656767","CA","CAN","CANADA" -"3354656768","3354660351","US","USA","UNITED STATES" -"3354660864","3354663423","US","USA","UNITED STATES" -"3354664960","3354670079","US","USA","UNITED STATES" -"3354671104","3354673151","US","USA","UNITED STATES" -"3354689536","3354707455","US","USA","UNITED STATES" -"3354709248","3354720511","US","USA","UNITED STATES" -"3354722304","3354735615","US","USA","UNITED STATES" -"3354738688","3354747391","US","USA","UNITED STATES" -"3354748416","3354751999","US","USA","UNITED STATES" -"3354752256","3354758399","US","USA","UNITED STATES" -"3354759424","3354767359","US","USA","UNITED STATES" -"3354767616","3354770687","US","USA","UNITED STATES" -"3354770944","3354775551","US","USA","UNITED STATES" -"3354776064","3354782719","US","USA","UNITED STATES" -"3354782720","3354782975","CA","CAN","CANADA" -"3354782976","3354787071","US","USA","UNITED STATES" -"3354787328","3354787583","US","USA","UNITED STATES" -"3354788096","3354807551","CA","CAN","CANADA" -"3354807552","3354810367","US","USA","UNITED STATES" -"3354810368","3354814975","CA","CAN","CANADA" -"3354814976","3354815231","US","USA","UNITED STATES" -"3354815232","3354817535","CA","CAN","CANADA" -"3354817792","3354823423","CA","CAN","CANADA" -"3354823680","3354830847","CA","CAN","CANADA" -"3354831360","3354853119","CA","CAN","CANADA" -"3354853376","3354918911","CA","CAN","CANADA" -"3354918912","3354920447","US","USA","UNITED STATES" -"3354920960","3354926847","US","USA","UNITED STATES" -"3354927104","3354934783","US","USA","UNITED STATES" -"3354935296","3354955775","US","USA","UNITED STATES" -"3354955776","3354956031","AR","ARG","ARGENTINA" -"3354956032","3354967295","US","USA","UNITED STATES" -"3354967552","3354969855","US","USA","UNITED STATES" -"3354970112","3354972159","US","USA","UNITED STATES" -"3354972416","3354978303","US","USA","UNITED STATES" -"3354978560","3354988031","US","USA","UNITED STATES" -"3354988544","3355012351","US","USA","UNITED STATES" -"3355013120","3355017215","CA","CAN","CANADA" -"3355017216","3355025919","US","USA","UNITED STATES" -"3355026176","3355032063","US","USA","UNITED STATES" -"3355032320","3355043583","US","USA","UNITED STATES" -"3355045120","3355049727","US","USA","UNITED STATES" -"3355049984","3355052287","US","USA","UNITED STATES" -"3355052288","3355053311","CA","CAN","CANADA" -"3355053312","3355053567","US","USA","UNITED STATES" -"3355054080","3355065343","US","USA","UNITED STATES" -"3355066368","3355249151","US","USA","UNITED STATES" -"3355250688","3355253247","US","USA","UNITED STATES" -"3355254784","3355260927","US","USA","UNITED STATES" -"3355260928","3355262719","CA","CAN","CANADA" -"3355262976","3355292927","US","USA","UNITED STATES" -"3355293184","3355310335","US","USA","UNITED STATES" -"3355310592","3355311103","CA","CAN","CANADA" -"3355312128","3355319295","US","USA","UNITED STATES" -"3355319296","3355320319","CA","CAN","CANADA" -"3355320320","3355324415","US","USA","UNITED STATES" -"3355324416","3355328511","CA","CAN","CANADA" -"3355328512","3355336703","US","USA","UNITED STATES" -"3355344896","3355350271","US","USA","UNITED STATES" -"3355350528","3355351039","US","USA","UNITED STATES" -"3355351040","3355351295","CA","CAN","CANADA" -"3355351296","3355372287","US","USA","UNITED STATES" -"3355372288","3355372543","CA","CAN","CANADA" -"3355372544","3355377663","US","USA","UNITED STATES" -"3355443200","3355445247","CO","COL","COLOMBIA" -"3355445248","3355447295","BR","BRA","BRAZIL" -"3355447296","3355447551","CU","CUB","CUBA" -"3355447552","3355447807","AR","ARG","ARGENTINA" -"3355447808","3355448063","HT","HTI","HAITI" -"3355448320","3355449343","AN","ANT","NETHERLANDS ANTILLES" -"3355449344","3355450367","CU","CUB","CUBA" -"3355450368","3355451391","EC","ECU","ECUADOR" -"3355451392","3355459071","BR","BRA","BRAZIL" -"3355459328","3355459583","EC","ECU","ECUADOR" -"3355459584","3355459839","PA","PAN","PANAMA" -"3355459840","3355460095","VE","VEN","VENEZUELA" -"3355460096","3355460351","CL","CHL","CHILE" -"3355460352","3355461887","BR","BRA","BRAZIL" -"3355461888","3355463423","EC","ECU","ECUADOR" -"3355463424","3355463935","AR","ARG","ARGENTINA" -"3355463936","3355464191","BR","BRA","BRAZIL" -"3355464192","3355464447","CL","CHL","CHILE" -"3355464448","3355464959","MX","MEX","MEXICO" -"3355464960","3355465727","BR","BRA","BRAZIL" -"3355465728","3355465983","UY","URY","URUGUAY" -"3355465984","3355467263","BR","BRA","BRAZIL" -"3355467264","3355467519","US","USA","UNITED STATES" -"3355467520","3355467775","MX","MEX","MEXICO" -"3355467776","3355468799","AR","ARG","ARGENTINA" -"3355468800","3355469567","BR","BRA","BRAZIL" -"3355469568","3355470591","MX","MEX","MEXICO" -"3355470592","3355470847","PE","PER","PERU" -"3355470848","3355471103","CL","CHL","CHILE" -"3355471104","3355471359","MX","MEX","MEXICO" -"3355471360","3355471615","PE","PER","PERU" -"3355471616","3355472383","MX","MEX","MEXICO" -"3355472384","3355472639","BR","BRA","BRAZIL" -"3355472640","3355473407","CL","CHL","CHILE" -"3355473408","3355473919","PE","PER","PERU" -"3355473920","3355475199","CL","CHL","CHILE" -"3355475200","3355477503","MX","MEX","MEXICO" -"3355478016","3355478271","PE","PER","PERU" -"3355478272","3355478783","US","USA","UNITED STATES" -"3355478784","3355479039","VE","VEN","VENEZUELA" -"3355479040","3355479551","CL","CHL","CHILE" -"3355479552","3355479807","PE","PER","PERU" -"3355479808","3355480063","MX","MEX","MEXICO" -"3355480064","3355485183","CL","CHL","CHILE" -"3355485184","3355487743","PE","PER","PERU" -"3355487744","3355487999","CL","CHL","CHILE" -"3355488000","3355488255","AR","ARG","ARGENTINA" -"3355488256","3355488767","GT","GTM","GUATEMALA" -"3355488768","3355489023","PA","PAN","PANAMA" -"3355489024","3355489279","CR","CRI","COSTA RICA" -"3355489280","3355489535","SV","SLV","EL SALVADOR" -"3355489536","3355491071","AR","ARG","ARGENTINA" -"3355491072","3355491327","CO","COL","COLOMBIA" -"3355491328","3355494655","AR","ARG","ARGENTINA" -"3355494656","3355494911","CO","COL","COLOMBIA" -"3355494912","3355495423","PA","PAN","PANAMA" -"3355495424","3355496447","UY","URY","URUGUAY" -"3355496448","3355498495","AR","ARG","ARGENTINA" -"3355498496","3355500543","US","USA","UNITED STATES" -"3355500544","3355508735","AR","ARG","ARGENTINA" -"3355508736","3355510271","VE","VEN","VENEZUELA" -"3355510272","3355510527","EC","ECU","ECUADOR" -"3355510528","3355510783","AR","ARG","ARGENTINA" -"3355510784","3355512831","VE","VEN","VENEZUELA" -"3355512832","3355516927","CL","CHL","CHILE" -"3355516928","3355525119","AR","ARG","ARGENTINA" -"3355525120","3355535359","CO","COL","COLOMBIA" -"3355535360","3355537407","TT","TTO","TRINIDAD AND TOBAGO" -"3355537664","3355537919","AR","ARG","ARGENTINA" -"3355537920","3355538175","NI","NIC","NICARAGUA" -"3355538176","3355538431","CL","CHL","CHILE" -"3355538432","3355539199","AR","ARG","ARGENTINA" -"3355539200","3355539455","VE","VEN","VENEZUELA" -"3355539456","3355540479","CL","CHL","CHILE" -"3355540480","3355540735","CO","COL","COLOMBIA" -"3355540736","3355540991","BZ","BLZ","BELIZE" -"3355540992","3355541503","CO","COL","COLOMBIA" -"3355541504","3355545599","CL","CHL","CHILE" -"3355545600","3355547647","VE","VEN","VENEZUELA" -"3355547648","3355547903","NI","NIC","NICARAGUA" -"3355547904","3355548159","GT","GTM","GUATEMALA" -"3355548160","3355548671","DO","DOM","DOMINICAN REPUBLIC" -"3355548672","3355549695","SR","SUR","SURINAME" -"3355549696","3355549951","US","USA","UNITED STATES" -"3355549952","3355550207","EC","ECU","ECUADOR" -"3355550208","3355552767","VE","VEN","VENEZUELA" -"3355552768","3355553023","EC","ECU","ECUADOR" -"3355553024","3355553279","CO","COL","COLOMBIA" -"3355553280","3355553535","CL","CHL","CHILE" -"3355553536","3355553791","CO","COL","COLOMBIA" -"3355553792","3355555839","PE","PER","PERU" -"3355555840","3355557887","VE","VEN","VENEZUELA" -"3355557888","3355559935","CO","COL","COLOMBIA" -"3355559936","3355561983","PY","PRY","PARAGUAY" -"3355561984","3355564031","SR","SUR","SURINAME" -"3355566080","3355574271","AR","ARG","ARGENTINA" -"3355574272","3355576319","CL","CHL","CHILE" -"3355576320","3355578367","VE","VEN","VENEZUELA" -"3355578368","3355582463","CL","CHL","CHILE" -"3355582464","3355590655","UY","URY","URUGUAY" -"3355590656","3355592703","CO","COL","COLOMBIA" -"3355592704","3355599871","CL","CHL","CHILE" -"3355600896","3355604991","CL","CHL","CHILE" -"3355604992","3355607039","AR","ARG","ARGENTINA" -"3355607040","3355615231","HT","HTI","HAITI" -"3355615232","3355623423","SR","SUR","SURINAME" -"3355623424","3355639807","CL","CHL","CHILE" -"3355639808","3355642367","VE","VEN","VENEZUELA" -"3355642368","3355642879","PA","PAN","PANAMA" -"3355642880","3355643903","UY","URY","URUGUAY" -"3355643904","3355647999","BR","BRA","BRAZIL" -"3355648000","3355668991","AR","ARG","ARGENTINA" -"3355668992","3355669247","PE","PER","PERU" -"3355669248","3355672575","AR","ARG","ARGENTINA" -"3355672576","3355677183","CO","COL","COLOMBIA" -"3355677184","3355677439","GT","GTM","GUATEMALA" -"3355677440","3355682815","CO","COL","COLOMBIA" -"3355682816","3355684863","AR","ARG","ARGENTINA" -"3355684864","3355686911","TT","TTO","TRINIDAD AND TOBAGO" -"3355686912","3355688959","AR","ARG","ARGENTINA" -"3355688960","3355689471","CO","COL","COLOMBIA" -"3355689472","3355689727","HN","HND","HONDURAS" -"3355689728","3355689983","AR","ARG","ARGENTINA" -"3355689984","3355693055","PA","PAN","PANAMA" -"3355693056","3355695103","CL","CHL","CHILE" -"3355695104","3355697151","AR","ARG","ARGENTINA" -"3355697152","3355701503","HN","HND","HONDURAS" -"3355701504","3355702015","PE","PER","PERU" -"3355702016","3355702271","AR","ARG","ARGENTINA" -"3355702272","3355703295","CO","COL","COLOMBIA" -"3355703296","3355705343","PY","PRY","PARAGUAY" -"3355705344","3355709439","MX","MEX","MEXICO" -"3355709440","3355713535","CO","COL","COLOMBIA" -"3355713536","3355720447","MX","MEX","MEXICO" -"3355720448","3355720703","AR","ARG","ARGENTINA" -"3355720704","3355722751","MX","MEX","MEXICO" -"3355722752","3355723263","AR","ARG","ARGENTINA" -"3355723264","3355746303","MX","MEX","MEXICO" -"3355746304","3355754495","HT","HTI","HAITI" -"3355754496","3355770879","PE","PER","PERU" -"3355770880","3355773183","US","USA","UNITED STATES" -"3355773184","3355773439","BR","BRA","BRAZIL" -"3355773696","3355773951","US","USA","UNITED STATES" -"3355773952","3355774975","CU","CUB","CUBA" -"3355774976","3355779071","VE","VEN","VENEZUELA" -"3355781120","3355783167","VE","VEN","VENEZUELA" -"3355783168","3355785215","AR","ARG","ARGENTINA" -"3355785216","3355787263","CO","COL","COLOMBIA" -"3355787264","3355803647","AR","ARG","ARGENTINA" -"3355803648","3355820031","VE","VEN","VENEZUELA" -"3355820032","3355836415","AR","ARG","ARGENTINA" -"3355836416","3355841023","EC","ECU","ECUADOR" -"3355841024","3355841279","CL","CHL","CHILE" -"3355841280","3355843327","EC","ECU","ECUADOR" -"3355843328","3355843583","VE","VEN","VENEZUELA" -"3355843584","3355844863","EC","ECU","ECUADOR" -"3355844864","3355845119","CL","CHL","CHILE" -"3355845120","3355845375","EC","ECU","ECUADOR" -"3355845376","3355848959","BR","BRA","BRAZIL" -"3355848960","3355849215","CL","CHL","CHILE" -"3355849728","3355849983","PA","PAN","PANAMA" -"3355849984","3355850495","CL","CHL","CHILE" -"3355850496","3355850751","NI","NIC","NICARAGUA" -"3355850752","3355852799","AN","ANT","NETHERLANDS ANTILLES" -"3355852800","3355856639","CL","CHL","CHILE" -"3355856640","3355856895","PA","PAN","PANAMA" -"3355856896","3355858943","EC","ECU","ECUADOR" -"3355858944","3355860991","DO","DOM","DOMINICAN REPUBLIC" -"3355860992","3355869183","CL","CHL","CHILE" -"3355869184","3355870719","BR","BRA","BRAZIL" -"3355873280","3355875327","AN","ANT","NETHERLANDS ANTILLES" -"3355875328","3355877375","VE","VEN","VENEZUELA" -"3355877376","3355885567","CO","COL","COLOMBIA" -"3355885568","3355901951","GT","GTM","GUATEMALA" -"3355901952","3355902975","BR","BRA","BRAZIL" -"3355902976","3355903999","CL","CHL","CHILE" -"3355904000","3355905535","BR","BRA","BRAZIL" -"3355905536","3355905791","PY","PRY","PARAGUAY" -"3355905792","3355906047","AR","ARG","ARGENTINA" -"3355906048","3355910143","CL","CHL","CHILE" -"3355910144","3355911503","AN","ANT","NETHERLANDS ANTILLES" -"3355911504","3355911519","TF","ATF","FRENCH SOUTHERN TERRITORIES" -"3355911520","3355918335","AN","ANT","NETHERLANDS ANTILLES" -"3355918336","3355923455","EC","ECU","ECUADOR" -"3355923456","3355924479","UY","URY","URUGUAY" -"3355924480","3355926527","TT","TTO","TRINIDAD AND TOBAGO" -"3355934720","3355938815","AR","ARG","ARGENTINA" -"3355942912","3355947007","BO","BOL","BOLIVIA" -"3355947008","3355949055","AR","ARG","ARGENTINA" -"3355949056","3355951103","AN","ANT","NETHERLANDS ANTILLES" -"3355951104","3355967487","EC","ECU","ECUADOR" -"3355967488","3356033023","VE","VEN","VENEZUELA" -"3356033024","3356033791","BR","BRA","BRAZIL" -"3356033792","3356034047","CL","CHL","CHILE" -"3356034048","3356035071","PY","PRY","PARAGUAY" -"3356035072","3356037119","MX","MEX","MEXICO" -"3356037120","3356041215","CO","COL","COLOMBIA" -"3356041216","3356049407","CR","CRI","COSTA RICA" -"3356049408","3356049663","CL","CHL","CHILE" -"3356049664","3356051455","BR","BRA","BRAZIL" -"3356051456","3356051711","CO","COL","COLOMBIA" -"3356051712","3356051967","CL","CHL","CHILE" -"3356051968","3356052223","GT","GTM","GUATEMALA" -"3356052224","3356052479","AR","ARG","ARGENTINA" -"3356052480","3356052991","BR","BRA","BRAZIL" -"3356053248","3356054015","CL","CHL","CHILE" -"3356054016","3356054527","US","USA","UNITED STATES" -"3356054528","3356057599","BR","BRA","BRAZIL" -"3356057600","3356057855","EC","ECU","ECUADOR" -"3356057856","3356059135","CL","CHL","CHILE" -"3356059136","3356060671","BR","BRA","BRAZIL" -"3356060672","3356061695","CL","CHL","CHILE" -"3356061696","3356062463","BR","BRA","BRAZIL" -"3356062464","3356062719","US","USA","UNITED STATES" -"3356062720","3356064255","BR","BRA","BRAZIL" -"3356064256","3356064511","CL","CHL","CHILE" -"3356064512","3356065791","BR","BRA","BRAZIL" -"3356065792","3356066047","CL","CHL","CHILE" -"3356066048","3356069119","BR","BRA","BRAZIL" -"3356069120","3356069631","CL","CHL","CHILE" -"3356069632","3356070143","BR","BRA","BRAZIL" -"3356070144","3356070655","CL","CHL","CHILE" -"3356070656","3356070911","AR","ARG","ARGENTINA" -"3356070912","3356071423","BR","BRA","BRAZIL" -"3356071424","3356072447","CL","CHL","CHILE" -"3356072448","3356073215","CR","CRI","COSTA RICA" -"3356073216","3356073471","UY","URY","URUGUAY" -"3356073472","3356075263","BR","BRA","BRAZIL" -"3356075264","3356076287","BO","BOL","BOLIVIA" -"3356076288","3356078079","BR","BRA","BRAZIL" -"3356078080","3356078335","EC","ECU","ECUADOR" -"3356078336","3356079359","CL","CHL","CHILE" -"3356079360","3356080895","BR","BRA","BRAZIL" -"3356080896","3356082431","NI","NIC","NICARAGUA" -"3356082432","3356082687","CL","CHL","CHILE" -"3356082688","3356082943","AR","ARG","ARGENTINA" -"3356082944","3356083967","CL","CHL","CHILE" -"3356083968","3356084479","BR","BRA","BRAZIL" -"3356084480","3356084735","CL","CHL","CHILE" -"3356084736","3356085247","BR","BRA","BRAZIL" -"3356085248","3356085759","CL","CHL","CHILE" -"3356085760","3356086271","BR","BRA","BRAZIL" -"3356086272","3356086527","AR","ARG","ARGENTINA" -"3356086528","3356086783","CR","CRI","COSTA RICA" -"3356086784","3356087039","VE","VEN","VENEZUELA" -"3356087040","3356087295","CO","COL","COLOMBIA" -"3356087296","3356087807","AR","ARG","ARGENTINA" -"3356087808","3356088063","BR","BRA","BRAZIL" -"3356088064","3356088319","CL","CHL","CHILE" -"3356088320","3356089087","TT","TTO","TRINIDAD AND TOBAGO" -"3356089088","3356089343","AR","ARG","ARGENTINA" -"3356089344","3356090623","BR","BRA","BRAZIL" -"3356090624","3356090879","CL","CHL","CHILE" -"3356090880","3356091135","BR","BRA","BRAZIL" -"3356091136","3356091391","AR","ARG","ARGENTINA" -"3356091392","3356091647","CL","CHL","CHILE" -"3356091648","3356091903","BR","BRA","BRAZIL" -"3356091904","3356092927","CL","CHL","CHILE" -"3356092928","3356093183","BR","BRA","BRAZIL" -"3356093184","3356093951","AR","ARG","ARGENTINA" -"3356093952","3356094975","CL","CHL","CHILE" -"3356094976","3356096255","AR","ARG","ARGENTINA" -"3356096256","3356096511","CL","CHL","CHILE" -"3356096512","3356096767","EC","ECU","ECUADOR" -"3356096768","3356097791","BR","BRA","BRAZIL" -"3356097792","3356098303","AR","ARG","ARGENTINA" -"3356098304","3356098559","GT","GTM","GUATEMALA" -"3356098560","3356099583","CL","CHL","CHILE" -"3356099584","3356100607","BR","BRA","BRAZIL" -"3356100608","3356102399","CL","CHL","CHILE" -"3356102400","3356102655","PA","PAN","PANAMA" -"3356102656","3356105727","CL","CHL","CHILE" -"3356105728","3356106751","SV","SLV","EL SALVADOR" -"3356106752","3356113919","BR","BRA","BRAZIL" -"3356113920","3356114431","UY","URY","URUGUAY" -"3356114944","3356123135","PE","PER","PERU" -"3356123136","3356131839","AR","ARG","ARGENTINA" -"3356131840","3356132351","PE","PER","PERU" -"3356132352","3356134143","BR","BRA","BRAZIL" -"3356134144","3356134655","AR","ARG","ARGENTINA" -"3356134656","3356134911","BR","BRA","BRAZIL" -"3356134912","3356135167","DO","DOM","DOMINICAN REPUBLIC" -"3356135168","3356135423","MX","MEX","MEXICO" -"3356135424","3356135679","BR","BRA","BRAZIL" -"3356135680","3356135935","CL","CHL","CHILE" -"3356135936","3356136191","BR","BRA","BRAZIL" -"3356136192","3356137471","EC","ECU","ECUADOR" -"3356137472","3356137727","US","USA","UNITED STATES" -"3356137728","3356138239","BR","BRA","BRAZIL" -"3356138240","3356138495","US","USA","UNITED STATES" -"3356138496","3356139519","BR","BRA","BRAZIL" -"3356139520","3356139775","US","USA","UNITED STATES" -"3356139776","3356140031","AR","ARG","ARGENTINA" -"3356140032","3356140287","DO","DOM","DOMINICAN REPUBLIC" -"3356140288","3356140799","BR","BRA","BRAZIL" -"3356140800","3356141311","US","USA","UNITED STATES" -"3356141312","3356142847","CL","CHL","CHILE" -"3356142848","3356145151","BR","BRA","BRAZIL" -"3356145152","3356145407","CL","CHL","CHILE" -"3356145408","3356145663","BR","BRA","BRAZIL" -"3356145664","3356145919","CL","CHL","CHILE" -"3356145920","3356146175","BR","BRA","BRAZIL" -"3356146176","3356146431","AR","ARG","ARGENTINA" -"3356146432","3356146687","BR","BRA","BRAZIL" -"3356146688","3356146943","PE","PER","PERU" -"3356146944","3356147199","BR","BRA","BRAZIL" -"3356147200","3356147455","CL","CHL","CHILE" -"3356147456","3356148223","BR","BRA","BRAZIL" -"3356148224","3356148479","BZ","BLZ","BELIZE" -"3356148480","3356148735","CL","CHL","CHILE" -"3356148736","3356148991","AR","ARG","ARGENTINA" -"3356148992","3356149503","MX","MEX","MEXICO" -"3356149504","3356149759","AR","ARG","ARGENTINA" -"3356149760","3356150015","MX","MEX","MEXICO" -"3356150016","3356150527","AR","ARG","ARGENTINA" -"3356150528","3356150783","PA","PAN","PANAMA" -"3356150784","3356151039","AR","ARG","ARGENTINA" -"3356151040","3356151295","NI","NIC","NICARAGUA" -"3356151296","3356151807","AR","ARG","ARGENTINA" -"3356151808","3356152063","CL","CHL","CHILE" -"3356152064","3356152575","BR","BRA","BRAZIL" -"3356152576","3356152831","CL","CHL","CHILE" -"3356152832","3356154623","MX","MEX","MEXICO" -"3356154624","3356154879","AR","ARG","ARGENTINA" -"3356154880","3356156671","CL","CHL","CHILE" -"3356156672","3356156927","BR","BRA","BRAZIL" -"3356156928","3356157951","PY","PRY","PARAGUAY" -"3356157952","3356158207","CL","CHL","CHILE" -"3356158208","3356158463","MX","MEX","MEXICO" -"3356158464","3356158719","CL","CHL","CHILE" -"3356158720","3356158975","AR","ARG","ARGENTINA" -"3356158976","3356159743","CL","CHL","CHILE" -"3356160000","3356160255","MX","MEX","MEXICO" -"3356160256","3356160511","GT","GTM","GUATEMALA" -"3356160512","3356160767","CL","CHL","CHILE" -"3356160768","3356161279","MX","MEX","MEXICO" -"3356161280","3356161535","BR","BRA","BRAZIL" -"3356161536","3356162559","MX","MEX","MEXICO" -"3356162560","3356162815","PE","PER","PERU" -"3356162816","3356163583","CL","CHL","CHILE" -"3356163584","3356163839","VE","VEN","VENEZUELA" -"3356163840","3356164095","CL","CHL","CHILE" -"3356164096","3356171519","BR","BRA","BRAZIL" -"3356171520","3356171775","AR","ARG","ARGENTINA" -"3356171776","3356172031","NI","NIC","NICARAGUA" -"3356172032","3356172287","SV","SLV","EL SALVADOR" -"3356172288","3356172543","PE","PER","PERU" -"3356172544","3356172799","AR","ARG","ARGENTINA" -"3356172800","3356174335","PE","PER","PERU" -"3356174336","3356176383","CO","COL","COLOMBIA" -"3356176384","3356180479","PE","PER","PERU" -"3356180480","3356190719","CL","CHL","CHILE" -"3356190720","3356192767","DO","DOM","DOMINICAN REPUBLIC" -"3356192768","3356194815","AR","ARG","ARGENTINA" -"3356196864","3356229631","VE","VEN","VENEZUELA" -"3356229632","3356233727","BR","BRA","BRAZIL" -"3356233728","3356237823","CL","CHL","CHILE" -"3356237824","3356246015","GT","GTM","GUATEMALA" -"3356246016","3356262655","MX","MEX","MEXICO" -"3356262656","3356263167","CL","CHL","CHILE" -"3356263168","3356263423","BR","BRA","BRAZIL" -"3356263424","3356263679","CL","CHL","CHILE" -"3356263680","3356265215","AR","ARG","ARGENTINA" -"3356265216","3356265471","BR","BRA","BRAZIL" -"3356265472","3356267007","CL","CHL","CHILE" -"3356267008","3356267263","PY","PRY","PARAGUAY" -"3356267264","3356268799","CL","CHL","CHILE" -"3356269056","3356269311","AR","ARG","ARGENTINA" -"3356269312","3356269823","UY","URY","URUGUAY" -"3356269824","3356270079","BR","BRA","BRAZIL" -"3356270080","3356272383","MX","MEX","MEXICO" -"3356272384","3356272639","CR","CRI","COSTA RICA" -"3356272640","3356272895","US","USA","UNITED STATES" -"3356272896","3356273151","EC","ECU","ECUADOR" -"3356273152","3356273407","CO","COL","COLOMBIA" -"3356273664","3356274431","SV","SLV","EL SALVADOR" -"3356274432","3356278783","CO","COL","COLOMBIA" -"3356279040","3356279295","VE","VEN","VENEZUELA" -"3356280832","3356282879","AR","ARG","ARGENTINA" -"3356282880","3356284927","PA","PAN","PANAMA" -"3356284928","3356286975","AR","ARG","ARGENTINA" -"3356286976","3356286991","US","USA","UNITED STATES" -"3356286992","3356287007","GT","GTM","GUATEMALA" -"3356287008","3356287023","HN","HND","HONDURAS" -"3356287024","3356287039","GT","GTM","GUATEMALA" -"3356287040","3356287047","US","USA","UNITED STATES" -"3356287048","3356287071","GT","GTM","GUATEMALA" -"3356287072","3356287135","US","USA","UNITED STATES" -"3356287136","3356287151","GT","GTM","GUATEMALA" -"3356287152","3356287359","US","USA","UNITED STATES" -"3356287360","3356287367","GT","GTM","GUATEMALA" -"3356287368","3356287487","US","USA","UNITED STATES" -"3356287488","3356287743","SV","SLV","EL SALVADOR" -"3356287744","3356288255","HN","HND","HONDURAS" -"3356288256","3356288767","SV","SLV","EL SALVADOR" -"3356288768","3356289023","GT","GTM","GUATEMALA" -"3356289024","3356289791","SV","SLV","EL SALVADOR" -"3356289792","3356289799","US","USA","UNITED STATES" -"3356289800","3356289807","GT","GTM","GUATEMALA" -"3356289808","3356289823","SV","SLV","EL SALVADOR" -"3356289824","3356289887","US","USA","UNITED STATES" -"3356289888","3356289919","SV","SLV","EL SALVADOR" -"3356289920","3356289951","US","USA","UNITED STATES" -"3356289952","3356289983","GT","GTM","GUATEMALA" -"3356289984","3356290303","US","USA","UNITED STATES" -"3356290304","3356290559","SV","SLV","EL SALVADOR" -"3356290560","3356291071","CR","CRI","COSTA RICA" -"3356291072","3356293119","TT","TTO","TRINIDAD AND TOBAGO" -"3356293120","3356295167","AW","ABW","ARUBA" -"3356295168","3356297215","CL","CHL","CHILE" -"3356297216","3356299263","BR","BRA","BRAZIL" -"3356299264","3356305663","MX","MEX","MEXICO" -"3356305664","3356305919","AR","ARG","ARGENTINA" -"3356307456","3356316415","MX","MEX","MEXICO" -"3356317696","3356328959","MX","MEX","MEXICO" -"3356329984","3356332031","GF","GUF","FRENCH GUIANA" -"3356332032","3356334079","CU","CUB","CUBA" -"3356334080","3356336127","BO","BOL","BOLIVIA" -"3356336128","3356336639","SV","SLV","EL SALVADOR" -"3356336640","3356338175","HN","HND","HONDURAS" -"3356338176","3356339967","SV","SLV","EL SALVADOR" -"3356339968","3356341247","HN","HND","HONDURAS" -"3356341248","3356341503","SV","SLV","EL SALVADOR" -"3356341504","3356342271","HN","HND","HONDURAS" -"3356342272","3356343039","SV","SLV","EL SALVADOR" -"3356343040","3356343551","HN","HND","HONDURAS" -"3356343552","3356344319","SV","SLV","EL SALVADOR" -"3356344320","3356360703","CO","COL","COLOMBIA" -"3356360704","3356362751","CL","CHL","CHILE" -"3356362752","3356364799","VE","VEN","VENEZUELA" -"3356364800","3356368895","MX","MEX","MEXICO" -"3356368896","3356369407","BR","BRA","BRAZIL" -"3356369408","3356369663","EC","ECU","ECUADOR" -"3356369664","3356370175","BR","BRA","BRAZIL" -"3356370944","3356372991","CO","COL","COLOMBIA" -"3356372992","3356375039","CU","CUB","CUBA" -"3356375040","3356377087","HN","HND","HONDURAS" -"3356377088","3356379647","CL","CHL","CHILE" -"3356380160","3356380927","CL","CHL","CHILE" -"3356381184","3356381439","CL","CHL","CHILE" -"3356382208","3356389119","CL","CHL","CHILE" -"3356389376","3356389887","CO","COL","COLOMBIA" -"3356389888","3356390399","CL","CHL","CHILE" -"3356390656","3356391167","CL","CHL","CHILE" -"3356393472","3356426239","CL","CHL","CHILE" -"3356426240","3356491775","US","USA","UNITED STATES" -"3356491776","3356493823","PE","PER","PERU" -"3356493824","3356495871","MU","MUS","MAURITIUS" -"3356495872","3356499967","AR","ARG","ARGENTINA" -"3356499968","3356508159","MX","MEX","MEXICO" -"3356508160","3356508671","AR","ARG","ARGENTINA" -"3356510208","3356511999","AR","ARG","ARGENTINA" -"3356512256","3356514303","AR","ARG","ARGENTINA" -"3356514304","3356514559","US","USA","UNITED STATES" -"3356516352","3356520447","AR","ARG","ARGENTINA" -"3356521472","3356521727","AR","ARG","ARGENTINA" -"3356522496","3356557311","AR","ARG","ARGENTINA" -"3356557312","3356819455","BR","BRA","BRAZIL" -"3356819456","3356884991","CO","COL","COLOMBIA" -"3356884992","3356950527","CL","CHL","CHILE" -"3356950528","3357016063","MX","MEX","MEXICO" -"3357016064","3357018623","CO","COL","COLOMBIA" -"3357020160","3357048831","CO","COL","COLOMBIA" -"3357057024","3357065215","PE","PER","PERU" -"3357065216","3357073407","EC","ECU","ECUADOR" -"3357073408","3357077503","CL","CHL","CHILE" -"3357077504","3357081599","AR","ARG","ARGENTINA" -"3357081600","3357114367","CO","COL","COLOMBIA" -"3357114368","3357138943","EC","ECU","ECUADOR" -"3357138944","3357147135","CO","COL","COLOMBIA" -"3357147136","3357179903","AR","ARG","ARGENTINA" -"3357179904","3357188095","CO","COL","COLOMBIA" -"3357188096","3357190143","VE","VEN","VENEZUELA" -"3357190144","3357192191","DO","DOM","DOMINICAN REPUBLIC" -"3357192192","3357194239","PY","PRY","PARAGUAY" -"3357194240","3357196287","AR","ARG","ARGENTINA" -"3357196288","3357204479","AN","ANT","NETHERLANDS ANTILLES" -"3357204480","3357204991","US","USA","UNITED STATES" -"3357204992","3357205759","AN","ANT","NETHERLANDS ANTILLES" -"3357205760","3357206271","VG","VGB","VIRGIN ISLANDS, BRITISH" -"3357206272","3357206527","AW","ABW","ARUBA" -"3357206528","3357212671","AN","ANT","NETHERLANDS ANTILLES" -"3357212672","3357368319","CL","CHL","CHILE" -"3357368320","3357376511","CO","COL","COLOMBIA" -"3357376512","3357403135","CL","CHL","CHILE" -"3357403136","3357405183","CO","COL","COLOMBIA" -"3357405184","3357407231","EC","ECU","ECUADOR" -"3357407232","3357409279","AR","ARG","ARGENTINA" -"3357409280","3357413119","US","USA","UNITED STATES" -"3357413120","3357413375","FR","FRA","FRANCE" -"3357413376","3357421311","US","USA","UNITED STATES" -"3357421312","3357421567","CO","COL","COLOMBIA" -"3357421568","3357422847","US","USA","UNITED STATES" -"3357422848","3357423103","PR","PRI","PUERTO RICO" -"3357423104","3357423615","US","USA","UNITED STATES" -"3357423616","3357424639","VE","VEN","VENEZUELA" -"3357424640","3357425663","US","USA","UNITED STATES" -"3357425664","3357442047","CO","COL","COLOMBIA" -"3357442048","3357442303","NI","NIC","NICARAGUA" -"3357442304","3357442447","HN","HND","HONDURAS" -"3357442448","3357442455","SV","SLV","EL SALVADOR" -"3357442456","3357442559","HN","HND","HONDURAS" -"3357442560","3357442815","NI","NIC","NICARAGUA" -"3357442816","3357443071","SV","SLV","EL SALVADOR" -"3357443072","3357443327","NI","NIC","NICARAGUA" -"3357443328","3357443583","GT","GTM","GUATEMALA" -"3357443584","3357444607","HN","HND","HONDURAS" -"3357444608","3357444863","SV","SLV","EL SALVADOR" -"3357444864","3357448191","GT","GTM","GUATEMALA" -"3357448192","3357448703","SV","SLV","EL SALVADOR" -"3357448704","3357448959","GT","GTM","GUATEMALA" -"3357448960","3357449727","HN","HND","HONDURAS" -"3357449728","3357450751","GT","GTM","GUATEMALA" -"3357450752","3357451007","SV","SLV","EL SALVADOR" -"3357451008","3357451519","HN","HND","HONDURAS" -"3357451520","3357451775","NI","NIC","NICARAGUA" -"3357451776","3357452287","GT","GTM","GUATEMALA" -"3357452288","3357452799","HN","HND","HONDURAS" -"3357452800","3357453055","NI","NIC","NICARAGUA" -"3357453056","3357453311","SV","SLV","EL SALVADOR" -"3357453312","3357454591","GT","GTM","GUATEMALA" -"3357454592","3357454847","NI","NIC","NICARAGUA" -"3357454848","3357455103","HN","HND","HONDURAS" -"3357455104","3357455359","SV","SLV","EL SALVADOR" -"3357455360","3357455871","GT","GTM","GUATEMALA" -"3357455872","3357456127","NI","NIC","NICARAGUA" -"3357456128","3357456639","GT","GTM","GUATEMALA" -"3357456640","3357456895","HN","HND","HONDURAS" -"3357456896","3357457663","GT","GTM","GUATEMALA" -"3357457664","3357457919","CR","CRI","COSTA RICA" -"3357457920","3357458431","HN","HND","HONDURAS" -"3357458432","3357474815","CL","CHL","CHILE" -"3357474816","3357474843","US","USA","UNITED STATES" -"3357474844","3357474847","PE","PER","PERU" -"3357474848","3357474851","VE","VEN","VENEZUELA" -"3357474852","3357474855","EC","ECU","ECUADOR" -"3357474856","3357474863","US","USA","UNITED STATES" -"3357474864","3357474867","EC","ECU","ECUADOR" -"3357474868","3357474875","CO","COL","COLOMBIA" -"3357474876","3357474879","EC","ECU","ECUADOR" -"3357474880","3357474883","VE","VEN","VENEZUELA" -"3357474884","3357474887","US","USA","UNITED STATES" -"3357474888","3357474891","CO","COL","COLOMBIA" -"3357474892","3357474895","US","USA","UNITED STATES" -"3357474896","3357474899","CO","COL","COLOMBIA" -"3357474900","3357474903","US","USA","UNITED STATES" -"3357474904","3357474907","VE","VEN","VENEZUELA" -"3357474908","3357474923","US","USA","UNITED STATES" -"3357474924","3357474927","VE","VEN","VENEZUELA" -"3357474928","3357474931","CO","COL","COLOMBIA" -"3357474932","3357474935","US","USA","UNITED STATES" -"3357474936","3357474939","PE","PER","PERU" -"3357474940","3357474951","US","USA","UNITED STATES" -"3357474952","3357474955","VE","VEN","VENEZUELA" -"3357474956","3357474959","US","USA","UNITED STATES" -"3357474960","3357474963","CO","COL","COLOMBIA" -"3357474964","3357474967","US","USA","UNITED STATES" -"3357474968","3357474975","EC","ECU","ECUADOR" -"3357474976","3357474983","US","USA","UNITED STATES" -"3357474984","3357474987","EC","ECU","ECUADOR" -"3357474988","3357474991","CO","COL","COLOMBIA" -"3357474992","3357474995","CL","CHL","CHILE" -"3357474996","3357475023","US","USA","UNITED STATES" -"3357475024","3357475027","CO","COL","COLOMBIA" -"3357475028","3357475051","US","USA","UNITED STATES" -"3357475052","3357475055","CO","COL","COLOMBIA" -"3357475056","3357475059","US","USA","UNITED STATES" -"3357475060","3357475071","EC","ECU","ECUADOR" -"3357475072","3357475839","AR","ARG","ARGENTINA" -"3357475840","3357476351","VE","VEN","VENEZUELA" -"3357476352","3357476607","EC","ECU","ECUADOR" -"3357476608","3357476863","US","USA","UNITED STATES" -"3357476864","3357477631","EC","ECU","ECUADOR" -"3357477632","3357477887","AR","ARG","ARGENTINA" -"3357477888","3357478199","CO","COL","COLOMBIA" -"3357478200","3357478207","EC","ECU","ECUADOR" -"3357478208","3357480871","CO","COL","COLOMBIA" -"3357480872","3357480879","EC","ECU","ECUADOR" -"3357480880","3357480959","CO","COL","COLOMBIA" -"3357480960","3357483007","EC","ECU","ECUADOR" -"3357483008","3357491199","CL","CHL","CHILE" -"3357491200","3357491843","CO","COL","COLOMBIA" -"3357491844","3357491847","CR","CRI","COSTA RICA" -"3357491848","3357495375","CO","COL","COLOMBIA" -"3357495376","3357495383","US","USA","UNITED STATES" -"3357495384","3357496599","CO","COL","COLOMBIA" -"3357496600","3357496607","LA","LAO","LAO PEOPLE'S DEMOCRATIC REPUBLIC" -"3357496608","3357496643","CO","COL","COLOMBIA" -"3357496644","3357496647","CR","CRI","COSTA RICA" -"3357496648","3357499391","CO","COL","COLOMBIA" -"3357499392","3357507583","PE","PER","PERU" -"3357507584","3357515775","VE","VEN","VENEZUELA" -"3357515776","3357523967","SV","SLV","EL SALVADOR" -"3357523968","3357532159","CO","COL","COLOMBIA" -"3357532160","3357536255","AR","ARG","ARGENTINA" -"3357540352","3357556735","AR","ARG","ARGENTINA" -"3357556736","3357556991","VE","VEN","VENEZUELA" -"3357556992","3357557759","MX","MEX","MEXICO" -"3357557760","3357559295","EC","ECU","ECUADOR" -"3357559296","3357559551","CA","CAN","CANADA" -"3357559552","3357559807","US","USA","UNITED STATES" -"3357559808","3357560319","VE","VEN","VENEZUELA" -"3357560320","3357560575","MX","MEX","MEXICO" -"3357560576","3357560831","US","USA","UNITED STATES" -"3357560832","3357561855","CO","COL","COLOMBIA" -"3357561856","3357562351","AR","ARG","ARGENTINA" -"3357562352","3357562367","US","USA","UNITED STATES" -"3357562368","3357563047","AR","ARG","ARGENTINA" -"3357563048","3357563055","CL","CHL","CHILE" -"3357563056","3357573003","AR","ARG","ARGENTINA" -"3357573004","3357573007","CL","CHL","CHILE" -"3357573008","3357581311","AR","ARG","ARGENTINA" -"3357581312","3357589503","CL","CHL","CHILE" -"3357589504","3357605887","BZ","BLZ","BELIZE" -"3357605888","3357736959","MX","MEX","MEXICO" -"3357736960","3357745151","VE","VEN","VENEZUELA" -"3357745152","3357753343","CO","COL","COLOMBIA" -"3357753344","3357757487","VE","VEN","VENEZUELA" -"3357757488","3357757495","BO","BOL","BOLIVIA" -"3357757496","3357773823","VE","VEN","VENEZUELA" -"3357773824","3357775871","PA","PAN","PANAMA" -"3357775872","3357775895","UY","URY","URUGUAY" -"3357775896","3357775903","AR","ARG","ARGENTINA" -"3357775904","3357777919","UY","URY","URUGUAY" -"3357777920","3357777923","SV","SLV","EL SALVADOR" -"3357777924","3357778059","GT","GTM","GUATEMALA" -"3357778060","3357778063","SV","SLV","EL SALVADOR" -"3357778064","3357778071","GT","GTM","GUATEMALA" -"3357778072","3357778075","SV","SLV","EL SALVADOR" -"3357778076","3357778339","GT","GTM","GUATEMALA" -"3357778340","3357778343","SV","SLV","EL SALVADOR" -"3357778344","3357778415","GT","GTM","GUATEMALA" -"3357778416","3357778423","SV","SLV","EL SALVADOR" -"3357778424","3357778687","GT","GTM","GUATEMALA" -"3357778688","3357778695","SV","SLV","EL SALVADOR" -"3357778696","3357779047","GT","GTM","GUATEMALA" -"3357779048","3357779055","SV","SLV","EL SALVADOR" -"3357779056","3357779071","GT","GTM","GUATEMALA" -"3357779072","3357779079","SV","SLV","EL SALVADOR" -"3357779080","3357779143","GT","GTM","GUATEMALA" -"3357779144","3357779151","SV","SLV","EL SALVADOR" -"3357779152","3357779183","GT","GTM","GUATEMALA" -"3357779184","3357779199","SV","SLV","EL SALVADOR" -"3357779200","3357779839","GT","GTM","GUATEMALA" -"3357779840","3357779855","SV","SLV","EL SALVADOR" -"3357779856","3357780559","GT","GTM","GUATEMALA" -"3357780560","3357780575","SV","SLV","EL SALVADOR" -"3357780576","3357782535","GT","GTM","GUATEMALA" -"3357782536","3357782543","SV","SLV","EL SALVADOR" -"3357782544","3357784319","GT","GTM","GUATEMALA" -"3357784320","3357784479","SV","SLV","EL SALVADOR" -"3357784480","3357784487","GT","GTM","GUATEMALA" -"3357784488","3357784511","SV","SLV","EL SALVADOR" -"3357784512","3357784543","GT","GTM","GUATEMALA" -"3357784544","3357784551","SV","SLV","EL SALVADOR" -"3357784552","3357785087","GT","GTM","GUATEMALA" -"3357785088","3357785163","SV","SLV","EL SALVADOR" -"3357785164","3357785167","GT","GTM","GUATEMALA" -"3357785168","3357785215","SV","SLV","EL SALVADOR" -"3357785216","3357785219","GT","GTM","GUATEMALA" -"3357785220","3357785223","SV","SLV","EL SALVADOR" -"3357785224","3357785227","GT","GTM","GUATEMALA" -"3357785228","3357785247","SV","SLV","EL SALVADOR" -"3357785248","3357785255","GT","GTM","GUATEMALA" -"3357785256","3357785599","SV","SLV","EL SALVADOR" -"3357785600","3357785603","GT","GTM","GUATEMALA" -"3357785604","3357785855","SV","SLV","EL SALVADOR" -"3357785856","3357786111","GT","GTM","GUATEMALA" -"3357786112","3357802495","VE","VEN","VENEZUELA" -"3357802496","3357868031","MX","MEX","MEXICO" -"3357868032","3357933567","PE","PER","PERU" -"3357933568","3358064639","MX","MEX","MEXICO" -"3358064640","3358130175","UY","URY","URUGUAY" -"3358130176","3358131199","EC","ECU","ECUADOR" -"3358131200","3358132223","CO","COL","COLOMBIA" -"3358132224","3358132479","AR","ARG","ARGENTINA" -"3358132480","3358132735","CO","COL","COLOMBIA" -"3358132736","3358133247","EC","ECU","ECUADOR" -"3358133248","3358133759","VE","VEN","VENEZUELA" -"3358133760","3358140471","AR","ARG","ARGENTINA" -"3358140472","3358140475","US","USA","UNITED STATES" -"3358140476","3358140547","AR","ARG","ARGENTINA" -"3358140548","3358140551","CL","CHL","CHILE" -"3358140552","3358140623","AR","ARG","ARGENTINA" -"3358140624","3358140627","US","USA","UNITED STATES" -"3358140628","3358142719","AR","ARG","ARGENTINA" -"3358142720","3358142975","US","USA","UNITED STATES" -"3358142976","3358143231","CO","COL","COLOMBIA" -"3358143232","3358143487","VE","VEN","VENEZUELA" -"3358143488","3358143999","US","USA","UNITED STATES" -"3358144000","3358144511","CL","CHL","CHILE" -"3358144512","3358145023","VE","VEN","VENEZUELA" -"3358145024","3358147135","AR","ARG","ARGENTINA" -"3358147136","3358147167","US","USA","UNITED STATES" -"3358147168","3358149631","AR","ARG","ARGENTINA" -"3358149632","3358150655","CO","COL","COLOMBIA" -"3358150656","3358151679","EC","ECU","ECUADOR" -"3358151680","3358152703","PE","PER","PERU" -"3358152704","3358152959","US","USA","UNITED STATES" -"3358152960","3358153215","EC","ECU","ECUADOR" -"3358153216","3358153247","HT","HTI","HAITI" -"3358153248","3358153327","US","USA","UNITED STATES" -"3358153328","3358153343","AR","ARG","ARGENTINA" -"3358153344","3358153559","US","USA","UNITED STATES" -"3358153560","3358153567","CL","CHL","CHILE" -"3358153568","3358153583","BR","BRA","BRAZIL" -"3358153584","3358153727","US","USA","UNITED STATES" -"3358153728","3358153983","EC","ECU","ECUADOR" -"3358153984","3358154239","US","USA","UNITED STATES" -"3358154240","3358154751","CL","CHL","CHILE" -"3358154752","3358158847","PE","PER","PERU" -"3358158848","3358159103","AR","ARG","ARGENTINA" -"3358159104","3358159151","US","USA","UNITED STATES" -"3358159152","3358159159","AR","ARG","ARGENTINA" -"3358159160","3358159167","US","USA","UNITED STATES" -"3358159168","3358159359","AR","ARG","ARGENTINA" -"3358159360","3358159615","EC","ECU","ECUADOR" -"3358159616","3358159871","US","USA","UNITED STATES" -"3358159872","3358160895","VE","VEN","VENEZUELA" -"3358160896","3358191615","AR","ARG","ARGENTINA" -"3358191616","3358192639","CL","CHL","CHILE" -"3358192640","3358236671","AR","ARG","ARGENTINA" -"3358236672","3358244863","CL","CHL","CHILE" -"3358244864","3358261247","DO","DOM","DOMINICAN REPUBLIC" -"3358261248","3358264063","AR","ARG","ARGENTINA" -"3358264064","3358264319","PY","PRY","PARAGUAY" -"3358264320","3358326783","AR","ARG","ARGENTINA" -"3358326784","3358392319","VE","VEN","VENEZUELA" -"3358392320","3358411263","AR","ARG","ARGENTINA" -"3358411264","3358411279","UY","URY","URUGUAY" -"3358411280","3358457855","AR","ARG","ARGENTINA" -"3358457856","3358523391","PA","PAN","PANAMA" -"3358523392","3358543615","AR","ARG","ARGENTINA" -"3358543616","3358543871","VE","VEN","VENEZUELA" -"3358543872","3358544127","MX","MEX","MEXICO" -"3358544128","3358558463","AR","ARG","ARGENTINA" -"3358558464","3358558975","PY","PRY","PARAGUAY" -"3358558976","3358559231","AR","ARG","ARGENTINA" -"3358559232","3358560255","VE","VEN","VENEZUELA" -"3358560256","3358561791","AR","ARG","ARGENTINA" -"3358561792","3358562303","VE","VEN","VENEZUELA" -"3358562304","3358563327","PE","PER","PERU" -"3358563328","3358564095","CO","COL","COLOMBIA" -"3358564096","3358564351","MX","MEX","MEXICO" -"3358564352","3358564479","AR","ARG","ARGENTINA" -"3358564480","3358564511","US","USA","UNITED STATES" -"3358564512","3358567423","AR","ARG","ARGENTINA" -"3358567424","3358568959","CO","COL","COLOMBIA" -"3358568960","3358569471","MX","MEX","MEXICO" -"3358569472","3358570495","VE","VEN","VENEZUELA" -"3358570496","3358570751","MX","MEX","MEXICO" -"3358570752","3358571263","PE","PER","PERU" -"3358571264","3358572543","MX","MEX","MEXICO" -"3358572544","3358577151","AR","ARG","ARGENTINA" -"3358577152","3358577407","PE","PER","PERU" -"3358577408","3358578431","AR","ARG","ARGENTINA" -"3358578432","3358578687","VE","VEN","VENEZUELA" -"3358578688","3358579967","CO","COL","COLOMBIA" -"3358579968","3358580223","AR","ARG","ARGENTINA" -"3358580224","3358580735","MX","MEX","MEXICO" -"3358580736","3358588927","AR","ARG","ARGENTINA" -"3358588928","3358654463","PE","PER","PERU" -"3358654464","3358658559","AR","ARG","ARGENTINA" -"3358658560","3358660607","CL","CHL","CHILE" -"3358660608","3358662655","AR","ARG","ARGENTINA" -"3358666752","3358695423","AR","ARG","ARGENTINA" -"3358695424","3358703615","GT","GTM","GUATEMALA" -"3358703616","3358715903","AR","ARG","ARGENTINA" -"3358715904","3358717951","EC","ECU","ECUADOR" -"3358717952","3358719999","AR","ARG","ARGENTINA" -"3358720000","3358728191","US","USA","UNITED STATES" -"3358728192","3358736383","CL","CHL","CHILE" -"3358736384","3358737111","US","USA","UNITED STATES" -"3358737112","3358737119","CA","CAN","CANADA" -"3358737120","3358744575","US","USA","UNITED STATES" -"3358744576","3358752767","CL","CHL","CHILE" -"3358752768","3358756863","US","USA","UNITED STATES" -"3358756864","3358760959","CL","CHL","CHILE" -"3358760960","3358769151","AR","ARG","ARGENTINA" -"3358769152","3358777343","HT","HTI","HAITI" -"3358777344","3358779391","CR","CRI","COSTA RICA" -"3358779392","3358781439","EC","ECU","ECUADOR" -"3358781440","3358851071","AR","ARG","ARGENTINA" -"3358851072","3358982143","MX","MEX","MEXICO" -"3358982144","3359047679","CL","CHL","CHILE" -"3359047680","3359057007","AR","ARG","ARGENTINA" -"3359057008","3359057023","CL","CHL","CHILE" -"3359057024","3359080447","AR","ARG","ARGENTINA" -"3359080448","3359093295","CU","CUB","CUBA" -"3359093296","3359093303","EC","ECU","ECUADOR" -"3359093304","3359093335","CU","CUB","CUBA" -"3359093336","3359093343","DO","DOM","DOMINICAN REPUBLIC" -"3359093344","3359095719","CU","CUB","CUBA" -"3359095720","3359095727","EC","ECU","ECUADOR" -"3359095728","3359096831","CU","CUB","CUBA" -"3359096832","3359105023","CL","CHL","CHILE" -"3359105024","3359109119","EC","ECU","ECUADOR" -"3359109120","3359111167","AR","ARG","ARGENTINA" -"3359111168","3359113215","EC","ECU","ECUADOR" -"3359113216","3359244287","MX","MEX","MEXICO" -"3359244288","3359249695","US","USA","UNITED STATES" -"3359249696","3359249727","BR","BRA","BRAZIL" -"3359249728","3359260671","US","USA","UNITED STATES" -"3359260672","3359268863","BO","BOL","BOLIVIA" -"3359268864","3359275519","AR","ARG","ARGENTINA" -"3359275520","3359275551","VE","VEN","VENEZUELA" -"3359275552","3359277055","AR","ARG","ARGENTINA" -"3359277056","3359285247","UY","URY","URUGUAY" -"3359285248","3359293439","BO","BOL","BOLIVIA" -"3359293440","3359305727","CO","COL","COLOMBIA" -"3359305728","3359307775","DO","DOM","DOMINICAN REPUBLIC" -"3359307776","3359309823","CL","CHL","CHILE" -"3359309824","3359313919","AR","ARG","ARGENTINA" -"3359313920","3359315967","CR","CRI","COSTA RICA" -"3359315968","3359318015","HN","HND","HONDURAS" -"3359318016","3359356927","AR","ARG","ARGENTINA" -"3359356928","3359358975","VE","VEN","VENEZUELA" -"3359358976","3359363071","AR","ARG","ARGENTINA" -"3359367168","3359375359","AR","ARG","ARGENTINA" -"3359375360","3359440895","PE","PER","PERU" -"3359440896","3359457487","AR","ARG","ARGENTINA" -"3359457488","3359457503","EC","ECU","ECUADOR" -"3359457504","3359457663","AR","ARG","ARGENTINA" -"3359457664","3359457679","EC","ECU","ECUADOR" -"3359457680","3359457695","AR","ARG","ARGENTINA" -"3359457696","3359457727","BO","BOL","BOLIVIA" -"3359457728","3359461951","AR","ARG","ARGENTINA" -"3359461952","3359462015","HN","HND","HONDURAS" -"3359462016","3359462271","AR","ARG","ARGENTINA" -"3359462272","3359462335","UY","URY","URUGUAY" -"3359462336","3359463399","AR","ARG","ARGENTINA" -"3359463400","3359463407","CO","COL","COLOMBIA" -"3359463408","3359463423","BO","BOL","BOLIVIA" -"3359463424","3359463679","AR","ARG","ARGENTINA" -"3359463680","3359463743","HN","HND","HONDURAS" -"3359463744","3359464447","AR","ARG","ARGENTINA" -"3359464448","3359465471","UY","URY","URUGUAY" -"3359465472","3359466495","AR","ARG","ARGENTINA" -"3359466496","3359466751","BO","BOL","BOLIVIA" -"3359466752","3359472639","AR","ARG","ARGENTINA" -"3359472640","3359473663","PY","PRY","PARAGUAY" -"3359473664","3359498239","AR","ARG","ARGENTINA" -"3359498240","3359502335","PY","PRY","PARAGUAY" -"3359506432","3359508479","US","USA","UNITED STATES" -"3359508480","3359514623","VE","VEN","VENEZUELA" -"3359514624","3359516671","US","USA","UNITED STATES" -"3359516672","3359516927","VG","VGB","VIRGIN ISLANDS, BRITISH" -"3359516928","3359517183","US","USA","UNITED STATES" -"3359517184","3359517439","VG","VGB","VIRGIN ISLANDS, BRITISH" -"3359517440","3359517695","US","USA","UNITED STATES" -"3359517696","3359517951","VG","VGB","VIRGIN ISLANDS, BRITISH" -"3359517952","3359520255","US","USA","UNITED STATES" -"3359520256","3359520767","AR","ARG","ARGENTINA" -"3359520768","3359522815","US","USA","UNITED STATES" -"3359522816","3359539199","NI","NIC","NICARAGUA" -"3359539200","3359550319","PE","PER","PERU" -"3359550320","3359550335","NI","NIC","NICARAGUA" -"3359550336","3359571967","PE","PER","PERU" -"3359571968","3359582207","AR","ARG","ARGENTINA" -"3359582208","3359583871","PA","PAN","PANAMA" -"3359583872","3359583879","VE","VEN","VENEZUELA" -"3359583880","3359584255","PA","PAN","PANAMA" -"3359584256","3359586303","AR","ARG","ARGENTINA" -"3359586304","3359588351","CL","CHL","CHILE" -"3359588352","3359596543","AR","ARG","ARGENTINA" -"3359596544","3359598591","CL","CHL","CHILE" -"3359598592","3359598655","AN","ANT","NETHERLANDS ANTILLES" -"3359598656","3359599039","PA","PAN","PANAMA" -"3359599040","3359599231","AN","ANT","NETHERLANDS ANTILLES" -"3359599232","3359599615","PA","PAN","PANAMA" -"3359599616","3359600511","AN","ANT","NETHERLANDS ANTILLES" -"3359600512","3359600639","PA","PAN","PANAMA" -"3359600640","3359621119","AR","ARG","ARGENTINA" -"3359621120","3359637503","EC","ECU","ECUADOR" -"3359637504","3359789583","MX","MEX","MEXICO" -"3359789584","3359789599","US","USA","UNITED STATES" -"3359789600","3359789823","MX","MEX","MEXICO" -"3359789824","3359789887","US","USA","UNITED STATES" -"3359789888","3359899647","MX","MEX","MEXICO" -"3359899648","3359916031","CL","CHL","CHILE" -"3359916032","3359918143","AR","ARG","ARGENTINA" -"3359918144","3359918175","US","USA","UNITED STATES" -"3359918176","3359932415","AR","ARG","ARGENTINA" -"3359932416","3359948799","CO","COL","COLOMBIA" -"3359948800","3359966719","AR","ARG","ARGENTINA" -"3359966720","3359966735","AW","ABW","ARUBA" -"3359966736","3359989759","AR","ARG","ARGENTINA" -"3359989760","3359997951","CO","COL","COLOMBIA" -"3359997952","3360006143","AR","ARG","ARGENTINA" -"3360006144","3360014335","EC","ECU","ECUADOR" -"3360014336","3360096255","AR","ARG","ARGENTINA" -"3360096256","3360104447","UY","URY","URUGUAY" -"3360104448","3360116735","CO","COL","COLOMBIA" -"3360116736","3360118783","BO","BOL","BOLIVIA" -"3360118784","3360120831","AR","ARG","ARGENTINA" -"3360120832","3360124927","CO","COL","COLOMBIA" -"3360129024","3360145407","VE","VEN","VENEZUELA" -"3360145408","3360153599","CL","CHL","CHILE" -"3360153600","3360157695","AR","ARG","ARGENTINA" -"3360157696","3360159743","VE","VEN","VENEZUELA" -"3360159744","3360161791","AN","ANT","NETHERLANDS ANTILLES" -"3360161792","3360227327","CL","CHL","CHILE" -"3360227328","3360227839","CO","COL","COLOMBIA" -"3360227840","3360228863","CL","CHL","CHILE" -"3360228864","3360230143","CO","COL","COLOMBIA" -"3360230144","3360230399","CL","CHL","CHILE" -"3360230400","3360231423","CO","COL","COLOMBIA" -"3360231424","3360231935","CL","CHL","CHILE" -"3360231936","3360232447","CO","COL","COLOMBIA" -"3360232448","3360233471","CL","CHL","CHILE" -"3360233472","3360235263","CO","COL","COLOMBIA" -"3360235264","3360235271","CL","CHL","CHILE" -"3360235272","3360235487","CO","COL","COLOMBIA" -"3360235488","3360235495","CL","CHL","CHILE" -"3360235496","3360235519","CO","COL","COLOMBIA" -"3360235520","3360235775","CL","CHL","CHILE" -"3360235776","3360236375","CO","COL","COLOMBIA" -"3360236376","3360236383","CL","CHL","CHILE" -"3360236384","3360236511","CO","COL","COLOMBIA" -"3360236512","3360236519","CL","CHL","CHILE" -"3360236520","3360236799","CO","COL","COLOMBIA" -"3360236800","3360237055","CL","CHL","CHILE" -"3360237056","3360238847","CO","COL","COLOMBIA" -"3360238848","3360239103","CL","CHL","CHILE" -"3360239104","3360240639","CO","COL","COLOMBIA" -"3360240640","3360241151","CL","CHL","CHILE" -"3360241152","3360242175","CO","COL","COLOMBIA" -"3360242176","3360242431","CL","CHL","CHILE" -"3360242432","3360243199","CO","COL","COLOMBIA" -"3360243200","3360243455","CL","CHL","CHILE" -"3360243456","3360243711","CO","COL","COLOMBIA" -"3360243712","3360243967","CL","CHL","CHILE" -"3360243968","3360244095","CO","COL","COLOMBIA" -"3360244096","3360244127","CL","CHL","CHILE" -"3360244128","3360244479","CO","COL","COLOMBIA" -"3360244480","3360244735","CL","CHL","CHILE" -"3360244736","3360245119","CO","COL","COLOMBIA" -"3360245120","3360245123","CL","CHL","CHILE" -"3360245124","3360245199","CO","COL","COLOMBIA" -"3360245200","3360245203","CL","CHL","CHILE" -"3360245204","3360245759","CO","COL","COLOMBIA" -"3360245760","3360248831","CL","CHL","CHILE" -"3360248832","3360251135","CO","COL","COLOMBIA" -"3360251136","3360251391","CL","CHL","CHILE" -"3360251392","3360251903","CO","COL","COLOMBIA" -"3360251904","3360253951","BO","BOL","BOLIVIA" -"3360253952","3360255999","SV","SLV","EL SALVADOR" -"3360258048","3360260095","CL","CHL","CHILE" -"3360260096","3360276479","AR","ARG","ARGENTINA" -"3360276480","3360278527","VE","VEN","VENEZUELA" -"3360278528","3360280575","EC","ECU","ECUADOR" -"3360280576","3360282623","CL","CHL","CHILE" -"3360282624","3360284671","CO","COL","COLOMBIA" -"3360284672","3360325631","CL","CHL","CHILE" -"3360325632","3360333823","CO","COL","COLOMBIA" -"3360333824","3360342015","CL","CHL","CHILE" -"3360342016","3360354303","VE","VEN","VENEZUELA" -"3360354304","3360356351","PA","PAN","PANAMA" -"3360356352","3360358399","CR","CRI","COSTA RICA" -"3360358400","3360358911","CL","CHL","CHILE" -"3360358912","3360358919","CO","COL","COLOMBIA" -"3360358920","3360366591","CL","CHL","CHILE" -"3360366592","3360382975","CO","COL","COLOMBIA" -"3360382976","3360399359","VE","VEN","VENEZUELA" -"3360399360","3360403455","BO","BOL","BOLIVIA" -"3360403456","3360405503","AR","ARG","ARGENTINA" -"3360405504","3360407551","HN","HND","HONDURAS" -"3360407552","3360423935","PA","PAN","PANAMA" -"3360423936","3360455935","MX","MEX","MEXICO" -"3360455936","3360456703","US","USA","UNITED STATES" -"3360456704","3360547983","MX","MEX","MEXICO" -"3360547984","3360547999","NI","NIC","NICARAGUA" -"3360548000","3360686079","MX","MEX","MEXICO" -"3360686080","3360687871","CO","COL","COLOMBIA" -"3360687872","3360687975","AR","ARG","ARGENTINA" -"3360687976","3360687983","CO","COL","COLOMBIA" -"3360687984","3360688079","AR","ARG","ARGENTINA" -"3360688080","3360688119","CO","COL","COLOMBIA" -"3360688120","3360688127","AR","ARG","ARGENTINA" -"3360688128","3360688639","CO","COL","COLOMBIA" -"3360688640","3360688895","AR","ARG","ARGENTINA" -"3360688896","3360689151","CO","COL","COLOMBIA" -"3360689152","3360690175","AR","ARG","ARGENTINA" -"3360690176","3360690199","CO","COL","COLOMBIA" -"3360690200","3360690215","AR","ARG","ARGENTINA" -"3360690216","3360690223","CO","COL","COLOMBIA" -"3360690224","3360690231","AR","ARG","ARGENTINA" -"3360690232","3360690303","CO","COL","COLOMBIA" -"3360690304","3360690327","AR","ARG","ARGENTINA" -"3360690328","3360690351","CO","COL","COLOMBIA" -"3360690352","3360690415","AR","ARG","ARGENTINA" -"3360690416","3360690623","CO","COL","COLOMBIA" -"3360690624","3360690687","AR","ARG","ARGENTINA" -"3360690688","3360690703","CO","COL","COLOMBIA" -"3360690704","3360690719","AR","ARG","ARGENTINA" -"3360690720","3360690735","CO","COL","COLOMBIA" -"3360690736","3360690879","AR","ARG","ARGENTINA" -"3360690880","3360691199","CO","COL","COLOMBIA" -"3360691200","3360691327","AR","ARG","ARGENTINA" -"3360691328","3360691455","CO","COL","COLOMBIA" -"3360691456","3360691967","AR","ARG","ARGENTINA" -"3360691968","3360692319","CO","COL","COLOMBIA" -"3360692320","3360692367","AR","ARG","ARGENTINA" -"3360692368","3360692431","CO","COL","COLOMBIA" -"3360692432","3360692439","AR","ARG","ARGENTINA" -"3360692440","3360692479","CO","COL","COLOMBIA" -"3360692480","3360692671","AR","ARG","ARGENTINA" -"3360692672","3360692735","CO","COL","COLOMBIA" -"3360692736","3360692799","AR","ARG","ARGENTINA" -"3360692800","3360692863","CO","COL","COLOMBIA" -"3360692864","3360693263","AR","ARG","ARGENTINA" -"3360693264","3360693279","CO","COL","COLOMBIA" -"3360693280","3360693351","AR","ARG","ARGENTINA" -"3360693352","3360693407","CO","COL","COLOMBIA" -"3360693408","3360693423","AR","ARG","ARGENTINA" -"3360693424","3360693503","CO","COL","COLOMBIA" -"3360693504","3360693799","AR","ARG","ARGENTINA" -"3360693800","3360693855","CO","COL","COLOMBIA" -"3360693856","3360694015","AR","ARG","ARGENTINA" -"3360694016","3360694071","CO","COL","COLOMBIA" -"3360694072","3360694079","AR","ARG","ARGENTINA" -"3360694080","3360694239","CO","COL","COLOMBIA" -"3360694240","3360694247","AR","ARG","ARGENTINA" -"3360694248","3360694391","CO","COL","COLOMBIA" -"3360694392","3360694415","AR","ARG","ARGENTINA" -"3360694416","3360694431","CO","COL","COLOMBIA" -"3360694432","3360694447","AR","ARG","ARGENTINA" -"3360694448","3360694463","CO","COL","COLOMBIA" -"3360694464","3360694783","AR","ARG","ARGENTINA" -"3360694784","3360695039","CO","COL","COLOMBIA" -"3360695040","3360695263","AR","ARG","ARGENTINA" -"3360695264","3360695295","CO","COL","COLOMBIA" -"3360695296","3360696447","AR","ARG","ARGENTINA" -"3360696448","3360696487","CO","COL","COLOMBIA" -"3360696488","3360696495","AR","ARG","ARGENTINA" -"3360696496","3360696511","CO","COL","COLOMBIA" -"3360696512","3360696543","AR","ARG","ARGENTINA" -"3360696544","3360696575","CO","COL","COLOMBIA" -"3360696576","3360696703","AR","ARG","ARGENTINA" -"3360696704","3360696719","CO","COL","COLOMBIA" -"3360696720","3360696735","AR","ARG","ARGENTINA" -"3360696736","3360696767","CO","COL","COLOMBIA" -"3360696768","3360696783","AR","ARG","ARGENTINA" -"3360696784","3360697343","CO","COL","COLOMBIA" -"3360697344","3360697599","AR","ARG","ARGENTINA" -"3360697600","3360697855","CO","COL","COLOMBIA" -"3360697856","3360698111","AR","ARG","ARGENTINA" -"3360698112","3360698879","CO","COL","COLOMBIA" -"3360698880","3360698911","AR","ARG","ARGENTINA" -"3360698912","3360698991","CO","COL","COLOMBIA" -"3360698992","3360699007","AR","ARG","ARGENTINA" -"3360699008","3360699647","CO","COL","COLOMBIA" -"3360699648","3360699903","AR","ARG","ARGENTINA" -"3360699904","3360700415","CO","COL","COLOMBIA" -"3360700416","3360701311","AR","ARG","ARGENTINA" -"3360701312","3360701695","CO","COL","COLOMBIA" -"3360701696","3360701951","AR","ARG","ARGENTINA" -"3360701952","3360702207","CO","COL","COLOMBIA" -"3360702208","3360705023","AR","ARG","ARGENTINA" -"3360705024","3360705279","US","USA","UNITED STATES" -"3360705280","3360705535","AR","ARG","ARGENTINA" -"3360705536","3360705791","US","USA","UNITED STATES" -"3360705792","3360706303","AR","ARG","ARGENTINA" -"3360706304","3360706559","US","USA","UNITED STATES" -"3360706560","3360708863","AR","ARG","ARGENTINA" -"3360708864","3360710655","US","USA","UNITED STATES" -"3360710656","3360718847","HT","HTI","HAITI" -"3360718848","3360763903","AR","ARG","ARGENTINA" -"3360763904","3360765951","GT","GTM","GUATEMALA" -"3360765952","3360767999","CO","COL","COLOMBIA" -"3360768000","3360772351","AR","ARG","ARGENTINA" -"3360772352","3360772479","BO","BOL","BOLIVIA" -"3360772480","3360788479","AR","ARG","ARGENTINA" -"3360788480","3360790527","CL","CHL","CHILE" -"3360790528","3360849919","AR","ARG","ARGENTINA" -"3360849920","3360882687","VE","VEN","VENEZUELA" -"3360882688","3360948223","CL","CHL","CHILE" -"3360948224","3361013759","VE","VEN","VENEZUELA" -"3361013760","3361021951","SV","SLV","EL SALVADOR" -"3361021952","3361030143","PY","PRY","PARAGUAY" -"3361030144","3361034239","VE","VEN","VENEZUELA" -"3361034240","3361036287","EC","ECU","ECUADOR" -"3361036288","3361046527","AR","ARG","ARGENTINA" -"3361046528","3361052671","BO","BOL","BOLIVIA" -"3361052672","3361054719","AR","ARG","ARGENTINA" -"3361054720","3361058815","NI","NIC","NICARAGUA" -"3361058816","3361062911","AR","ARG","ARGENTINA" -"3361062912","3361071103","CL","CHL","CHILE" -"3361071104","3361079295","CO","COL","COLOMBIA" -"3361079296","3361144831","CL","CHL","CHILE" -"3361144832","3361210367","BO","BOL","BOLIVIA" -"3361210368","3361275903","DO","DOM","DOMINICAN REPUBLIC" -"3361275904","3361276639","PE","PER","PERU" -"3361276640","3361276647","US","USA","UNITED STATES" -"3361276648","3361284095","PE","PER","PERU" -"3361284096","3361296383","CL","CHL","CHILE" -"3361296384","3361298431","SV","SLV","EL SALVADOR" -"3361298432","3361300479","DO","DOM","DOMINICAN REPUBLIC" -"3361300480","3361308671","CO","COL","COLOMBIA" -"3361308672","3361325055","AR","ARG","ARGENTINA" -"3361325056","3361341439","CO","COL","COLOMBIA" -"3361341440","3361374207","VE","VEN","VENEZUELA" -"3361374208","3361378303","PA","PAN","PANAMA" -"3361378304","3361380351","BO","BOL","BOLIVIA" -"3361380352","3361382399","EC","ECU","ECUADOR" -"3361382400","3361415167","CL","CHL","CHILE" -"3361415168","3361417215","AR","ARG","ARGENTINA" -"3361417216","3361419263","CL","CHL","CHILE" -"3361419264","3361423359","AR","ARG","ARGENTINA" -"3361423360","3361456127","CR","CRI","COSTA RICA" -"3361456128","3361471131","CO","COL","COLOMBIA" -"3361471132","3361471135","CL","CHL","CHILE" -"3361471136","3361472511","CO","COL","COLOMBIA" -"3361472512","3361538047","MX","MEX","MEXICO" -"3361538048","3361570815","VE","VEN","VENEZUELA" -"3361570816","3361587199","CO","COL","COLOMBIA" -"3361587200","3361599487","EC","ECU","ECUADOR" -"3361599488","3361600767","UY","URY","URUGUAY" -"3361601536","3361603583","EC","ECU","ECUADOR" -"3361603584","3361734655","MX","MEX","MEXICO" -"3361734656","3362258943","BR","BRA","BRAZIL" -"3362258944","3362324479","CL","CHL","CHILE" -"3362324480","3362324735","AR","ARG","ARGENTINA" -"3362324736","3362325247","US","USA","UNITED STATES" -"3362325248","3362325759","AR","ARG","ARGENTINA" -"3362325760","3362326271","US","USA","UNITED STATES" -"3362326272","3362327039","AR","ARG","ARGENTINA" -"3362327040","3362327295","US","USA","UNITED STATES" -"3362327296","3362328063","AR","ARG","ARGENTINA" -"3362328064","3362328575","US","USA","UNITED STATES" -"3362328576","3362330623","CO","COL","COLOMBIA" -"3362330624","3362332671","MX","MEX","MEXICO" -"3362332672","3362336767","PA","PAN","PANAMA" -"3362336768","3362337279","AR","ARG","ARGENTINA" -"3362337280","3362338047","US","USA","UNITED STATES" -"3362338048","3362338559","AR","ARG","ARGENTINA" -"3362338560","3362339071","US","USA","UNITED STATES" -"3362339072","3362339327","AR","ARG","ARGENTINA" -"3362339328","3362339839","US","USA","UNITED STATES" -"3362339840","3362342143","AR","ARG","ARGENTINA" -"3362342144","3362342399","PA","PAN","PANAMA" -"3362342400","3362342911","US","USA","UNITED STATES" -"3362342912","3362343679","AR","ARG","ARGENTINA" -"3362343680","3362344447","CO","COL","COLOMBIA" -"3362344448","3362344959","US","USA","UNITED STATES" -"3362344960","3362347007","PA","PAN","PANAMA" -"3362347008","3362347519","AR","ARG","ARGENTINA" -"3362347520","3362347775","CO","COL","COLOMBIA" -"3362347776","3362348799","AR","ARG","ARGENTINA" -"3362348800","3362349055","US","USA","UNITED STATES" -"3362349056","3362351103","CR","CRI","COSTA RICA" -"3362351104","3362353151","AR","ARG","ARGENTINA" -"3362353152","3362355199","EC","ECU","ECUADOR" -"3362355200","3362357247","AR","ARG","ARGENTINA" -"3362357248","3362381823","BO","BOL","BOLIVIA" -"3362381824","3362390015","EC","ECU","ECUADOR" -"3362390016","3362422783","PE","PER","PERU" -"3362422784","3362426879","CO","COL","COLOMBIA" -"3362426880","3362428927","PA","PAN","PANAMA" -"3362428928","3362430975","CL","CHL","CHILE" -"3362430976","3362447359","CO","COL","COLOMBIA" -"3362447360","3362449407","HN","HND","HONDURAS" -"3362449408","3362450175","SV","SLV","EL SALVADOR" -"3362450176","3362451455","HN","HND","HONDURAS" -"3362455552","3362471935","EC","ECU","ECUADOR" -"3362471936","3362476031","CL","CHL","CHILE" -"3362476032","3362476287","HN","HND","HONDURAS" -"3362476288","3362476543","AR","ARG","ARGENTINA" -"3362476544","3362477055","CR","CRI","COSTA RICA" -"3362484224","3362486271","AR","ARG","ARGENTINA" -"3362486272","3362488319","HN","HND","HONDURAS" -"3362488320","3362504703","PE","PER","PERU" -"3362504704","3362506751","VE","VEN","VENEZUELA" -"3362506752","3362508799","AR","ARG","ARGENTINA" -"3362508800","3362510847","HN","HND","HONDURAS" -"3362510848","3362512895","GT","GTM","GUATEMALA" -"3362512896","3362514943","AR","ARG","ARGENTINA" -"3362514944","3362516991","HN","HND","HONDURAS" -"3362516992","3362519039","BO","BOL","BOLIVIA" -"3362519040","3362521087","EC","ECU","ECUADOR" -"3362521088","3362529279","TT","TTO","TRINIDAD AND TOBAGO" -"3362529280","3362533375","PA","PAN","PANAMA" -"3362537472","3362545663","AR","ARG","ARGENTINA" -"3362545664","3362549759","PE","PER","PERU" -"3362553856","3362557951","PY","PRY","PARAGUAY" -"3362570240","3362586623","UY","URY","URUGUAY" -"3362586624","3362652159","VE","VEN","VENEZUELA" -"3362652160","3362664447","PE","PER","PERU" -"3362668544","3362676735","EC","ECU","ECUADOR" -"3362680832","3362684927","EC","ECU","ECUADOR" -"3362684928","3362688767","AR","ARG","ARGENTINA" -"3362688768","3362689279","CO","COL","COLOMBIA" -"3362689280","3362689311","AR","ARG","ARGENTINA" -"3362689312","3362689535","CO","COL","COLOMBIA" -"3362689536","3362689567","AR","ARG","ARGENTINA" -"3362689568","3362689599","CO","COL","COLOMBIA" -"3362689600","3362689615","AR","ARG","ARGENTINA" -"3362689616","3362690015","CO","COL","COLOMBIA" -"3362690016","3362690047","AR","ARG","ARGENTINA" -"3362690048","3362690367","CO","COL","COLOMBIA" -"3362690368","3362690431","AR","ARG","ARGENTINA" -"3362690432","3362691071","CO","COL","COLOMBIA" -"3362691072","3362692095","PA","PAN","PANAMA" -"3362692096","3362692223","AR","ARG","ARGENTINA" -"3362692224","3362692231","CO","COL","COLOMBIA" -"3362692232","3362692239","AR","ARG","ARGENTINA" -"3362692240","3362692351","CO","COL","COLOMBIA" -"3362692352","3362692607","MX","MEX","MEXICO" -"3362692608","3362692863","CO","COL","COLOMBIA" -"3362692864","3362695167","AR","ARG","ARGENTINA" -"3362695168","3362697215","CO","COL","COLOMBIA" -"3362697216","3362703359","AR","ARG","ARGENTINA" -"3362705408","3362711551","AR","ARG","ARGENTINA" -"3362711552","3362713599","EC","ECU","ECUADOR" -"3362713600","3362717695","GT","GTM","GUATEMALA" -"3362717696","3362815999","CL","CHL","CHILE" -"3362816000","3362832383","AR","ARG","ARGENTINA" -"3362832384","3362836479","BO","BOL","BOLIVIA" -"3362840576","3362893999","CL","CHL","CHILE" -"3362894000","3362894007","AW","ABW","ARUBA" -"3362894008","3362897919","CL","CHL","CHILE" -"3362897920","3362906111","HT","HTI","HAITI" -"3362914304","3362930687","CO","COL","COLOMBIA" -"3362934784","3362936831","AR","ARG","ARGENTINA" -"3362936832","3362938879","CL","CHL","CHILE" -"3362938880","3362942975","AR","ARG","ARGENTINA" -"3362942976","3362945023","GT","GTM","GUATEMALA" -"3362945024","3362983935","AR","ARG","ARGENTINA" -"3362988032","3362992127","EC","ECU","ECUADOR" -"3362996224","3363000319","UY","URY","URUGUAY" -"3363004416","3363008511","CO","COL","COLOMBIA" -"3363008512","3363012607","US","USA","UNITED STATES" -"3363012608","3363013967","PA","PAN","PANAMA" -"3363013968","3363013975","NI","NIC","NICARAGUA" -"3363013976","3363024895","PA","PAN","PANAMA" -"3363028992","3363045375","AR","ARG","ARGENTINA" -"3363045376","3363110911","CO","COL","COLOMBIA" -"3363110912","3363112063","AR","ARG","ARGENTINA" -"3363112064","3363112079","PY","PRY","PARAGUAY" -"3363112080","3363112127","AR","ARG","ARGENTINA" -"3363112128","3363112143","PY","PRY","PARAGUAY" -"3363112144","3363176447","AR","ARG","ARGENTINA" -"3363176448","3363274751","CO","COL","COLOMBIA" -"3363274752","3363291135","GT","GTM","GUATEMALA" -"3363291136","3363299327","BO","BOL","BOLIVIA" -"3363299328","3363373055","CL","CHL","CHILE" -"3363373056","3363438591","PE","PER","PERU" -"3363438592","3363471359","AR","ARG","ARGENTINA" -"3363471360","3363487743","CR","CRI","COSTA RICA" -"3363487744","3363504127","CO","COL","COLOMBIA" -"3363504128","3363512319","PE","PER","PERU" -"3363520512","3363553599","AR","ARG","ARGENTINA" -"3363553600","3363553663","US","USA","UNITED STATES" -"3363553664","3363553791","AR","ARG","ARGENTINA" -"3363553792","3363553919","US","USA","UNITED STATES" -"3363553920","3363554047","AR","ARG","ARGENTINA" -"3363554048","3363554175","US","USA","UNITED STATES" -"3363554176","3363554303","AR","ARG","ARGENTINA" -"3363554304","3363554431","BR","BRA","BRAZIL" -"3363554432","3363554687","AR","ARG","ARGENTINA" -"3363554688","3363554815","US","USA","UNITED STATES" -"3363554816","3363557375","AR","ARG","ARGENTINA" -"3363561472","3363565567","CO","COL","COLOMBIA" -"3363569664","3363577855","PA","PAN","PANAMA" -"3363577856","3363586047","CL","CHL","CHILE" -"3363602432","3363610623","AN","ANT","NETHERLANDS ANTILLES" -"3363610624","3363614719","CO","COL","COLOMBIA" -"3363618816","3363622911","UY","URY","URUGUAY" -"3363627008","3363635199","EC","ECU","ECUADOR" -"3363635200","3363651583","UY","URY","URUGUAY" -"3363651584","3363667967","AR","ARG","ARGENTINA" -"3363667968","3363676159","EC","ECU","ECUADOR" -"3363676160","3363678207","TT","TTO","TRINIDAD AND TOBAGO" -"3363680256","3363682303","GT","GTM","GUATEMALA" -"3363682304","3363684351","VE","VEN","VENEZUELA" -"3363684352","3363708927","EC","ECU","ECUADOR" -"3363717120","3363733503","CL","CHL","CHILE" -"3363733504","3363831807","AR","ARG","ARGENTINA" -"3363831808","3378511871","BR","BRA","BRAZIL" -"3378511872","3383754751","MX","MEX","MEXICO" -"3384737792","3385851903","CR","CRI","COSTA RICA" -"3385851904","3386114047","VE","VEN","VENEZUELA" -"3386114048","3386245119","AR","ARG","ARGENTINA" -"3386245120","3386376191","CL","CHL","CHILE" -"3386376192","3386392575","CO","COL","COLOMBIA" -"3386392576","3386396671","AN","ANT","NETHERLANDS ANTILLES" -"3386396672","3386400767","VG","VGB","VIRGIN ISLANDS, BRITISH" -"3386400768","3386402815","AN","ANT","NETHERLANDS ANTILLES" -"3386402816","3386404863","VG","VGB","VIRGIN ISLANDS, BRITISH" -"3386404864","3386408959","US","USA","UNITED STATES" -"3386408960","3386425343","GT","GTM","GUATEMALA" -"3386425344","3386429855","AR","ARG","ARGENTINA" -"3386429856","3386429863","US","USA","UNITED STATES" -"3386429864","3386441727","AR","ARG","ARGENTINA" -"3386441728","3386458111","PY","PRY","PARAGUAY" -"3386458112","3386474495","EC","ECU","ECUADOR" -"3386474496","3386490879","UY","URY","URUGUAY" -"3386490880","3386499071","CO","COL","COLOMBIA" -"3386507264","3386523647","EC","ECU","ECUADOR" -"3386523648","3386540031","PA","PAN","PANAMA" -"3386540032","3386548223","CL","CHL","CHILE" -"3386556416","3386572799","PA","PAN","PANAMA" -"3386572800","3386589183","EC","ECU","ECUADOR" -"3386589184","3386597375","AR","ARG","ARGENTINA" -"3386605568","3386613759","CL","CHL","CHILE" -"3386621952","3386630143","CO","COL","COLOMBIA" -"3386638336","3386642431","AN","ANT","NETHERLANDS ANTILLES" -"3386646528","3386662911","CO","COL","COLOMBIA" -"3386662912","3386671103","CL","CHL","CHILE" -"3386671104","3386675199","HN","HND","HONDURAS" -"3386679296","3386687487","AR","ARG","ARGENTINA" -"3386687488","3386695679","CU","CUB","CUBA" -"3386695680","3386703871","CL","CHL","CHILE" -"3386703872","3386720255","UY","URY","URUGUAY" -"3386720256","3386728447","TT","TTO","TRINIDAD AND TOBAGO" -"3386728448","3386732543","AR","ARG","ARGENTINA" -"3386732544","3386734591","CL","CHL","CHILE" -"3386736640","3386753023","CO","COL","COLOMBIA" -"3386753024","3386761215","CL","CHL","CHILE" -"3386761216","3386769407","PA","PAN","PANAMA" -"3386769408","3386773503","VE","VEN","VENEZUELA" -"3386777600","3386781695","AN","ANT","NETHERLANDS ANTILLES" -"3386785792","3386802175","BO","BOL","BOLIVIA" -"3386802176","3386900479","CL","CHL","CHILE" -"3386900480","3387162623","PA","PAN","PANAMA" -"3387162624","3387228159","CO","COL","COLOMBIA" -"3387228160","3387244543","AW","ABW","ARUBA" -"3387260928","3387293695","DO","DOM","DOMINICAN REPUBLIC" -"3387293696","3387359231","PE","PER","PERU" -"3387359232","3387424767","AR","ARG","ARGENTINA" -"3387424768","3387555839","CO","COL","COLOMBIA" -"3387555840","3387559999","AR","ARG","ARGENTINA" -"3387560000","3387560063","BR","BRA","BRAZIL" -"3387560064","3387568127","AR","ARG","ARGENTINA" -"3387568128","3387572223","PE","PER","PERU" -"3387572224","3387576319","CO","COL","COLOMBIA" -"3387576320","3387578367","EC","ECU","ECUADOR" -"3387578368","3387584511","AR","ARG","ARGENTINA" -"3387584512","3387588607","PE","PER","PERU" -"3387588608","3387600895","AR","ARG","ARGENTINA" -"3387600896","3387604991","CO","COL","COLOMBIA" -"3387604992","3387613183","EC","ECU","ECUADOR" -"3387613184","3387617279","VE","VEN","VENEZUELA" -"3387617280","3387617327","CO","COL","COLOMBIA" -"3387617328","3387617335","CL","CHL","CHILE" -"3387617336","3387619327","CO","COL","COLOMBIA" -"3387619328","3387686911","AR","ARG","ARGENTINA" -"3387686912","3387736063","CL","CHL","CHILE" -"3387736064","3387752447","CO","COL","COLOMBIA" -"3387752448","3387817983","CR","CRI","COSTA RICA" -"3387817984","3387834367","VE","VEN","VENEZUELA" -"3387834368","3387850751","TT","TTO","TRINIDAD AND TOBAGO" -"3387850752","3387867135","EC","ECU","ECUADOR" -"3387867136","3387949055","CL","CHL","CHILE" -"3387949056","3388014591","PE","PER","PERU" -"3388014592","3388080127","CL","CHL","CHILE" -"3388080128","3388211199","VE","VEN","VENEZUELA" -"3388211200","3388323671","CO","COL","COLOMBIA" -"3388323672","3388323679","GS","SGS","SOUTH GEORGIA AND THE SOUTH SANDWICH ISLANDS" -"3388323680","3388342271","CO","COL","COLOMBIA" -"3388342272","3388407807","CL","CHL","CHILE" -"3388407808","3388473343","SV","SLV","EL SALVADOR" -"3388473344","3388604415","VE","VEN","VENEZUELA" -"3388604416","3388827407","AR","ARG","ARGENTINA" -"3388827408","3388827415","AW","ABW","ARUBA" -"3388827416","3388997631","AR","ARG","ARGENTINA" -"3388997632","3389001727","AU","AUS","AUSTRALIA" -"3389001728","3389005823","PH","PHL","PHILIPPINES" -"3389005824","3389014015","NZ","NZL","NEW ZEALAND" -"3389014016","3389014271","AU","AUS","AUSTRALIA" -"3389014272","3389014783","JP","JPN","JAPAN" -"3389014784","3389015807","AU","AUS","AUSTRALIA" -"3389015808","3389016063","SG","SGP","SINGAPORE" -"3389016064","3389016575","JP","JPN","JAPAN" -"3389016576","3389017087","AU","AUS","AUSTRALIA" -"3389017088","3389017343","JP","JPN","JAPAN" -"3389017344","3389017855","HK","HKG","HONG KONG" -"3389017856","3389018111","AU","AUS","AUSTRALIA" -"3389018112","3389018367","PG","PNG","PAPUA NEW GUINEA" -"3389018368","3389018623","ID","IDN","INDONESIA" -"3389018624","3389019135","AU","AUS","AUSTRALIA" -"3389019136","3389019391","NZ","NZL","NEW ZEALAND" -"3389019392","3389020159","AU","AUS","AUSTRALIA" -"3389020160","3389020671","SG","SGP","SINGAPORE" -"3389020672","3389020927","AU","AUS","AUSTRALIA" -"3389020928","3389021183","PH","PHL","PHILIPPINES" -"3389021184","3389021439","AU","AUS","AUSTRALIA" -"3389021440","3389021695","JP","JPN","JAPAN" -"3389021696","3389021951","MY","MYS","MALAYSIA" -"3389021952","3389022463","AU","AUS","AUSTRALIA" -"3389022464","3389022719","NZ","NZL","NEW ZEALAND" -"3389022720","3389023231","AU","AUS","AUSTRALIA" -"3389023232","3389023487","HK","HKG","HONG KONG" -"3389023488","3389023999","AU","AUS","AUSTRALIA" -"3389024000","3389024255","ID","IDN","INDONESIA" -"3389024256","3389024511","HK","HKG","HONG KONG" -"3389024512","3389025791","AU","AUS","AUSTRALIA" -"3389025792","3389026047","CN","CHN","CHINA" -"3389026048","3389026303","TH","THA","THAILAND" -"3389026304","3389026559","HK","HKG","HONG KONG" -"3389026560","3389027327","AU","AUS","AUSTRALIA" -"3389027328","3389027583","ID","IDN","INDONESIA" -"3389027584","3389028607","TH","THA","THAILAND" -"3389028608","3389028863","NZ","NZL","NEW ZEALAND" -"3389028864","3389029375","HK","HKG","HONG KONG" -"3389029376","3389029887","NZ","NZL","NEW ZEALAND" -"3389029888","3389030399","SG","SGP","SINGAPORE" -"3389030400","3389035519","HK","HKG","HONG KONG" -"3389035520","3389035775","AU","AUS","AUSTRALIA" -"3389035776","3389036287","SG","SGP","SINGAPORE" -"3389036288","3389036543","NZ","NZL","NEW ZEALAND" -"3389036544","3389036799","SG","SGP","SINGAPORE" -"3389036800","3389037055","NZ","NZL","NEW ZEALAND" -"3389037056","3389037567","AU","AUS","AUSTRALIA" -"3389037568","3389038591","NC","NCL","NEW CALEDONIA" -"3389038592","3389044735","HK","HKG","HONG KONG" -"3389044736","3389045759","AU","AUS","AUSTRALIA" -"3389045760","3389046783","FR","FRA","FRANCE" -"3389046784","3389063167","US","USA","UNITED STATES" -"3389063168","3389064447","AU","AUS","AUSTRALIA" -"3389064448","3389064703","SG","SGP","SINGAPORE" -"3389064704","3389065215","HK","HKG","HONG KONG" -"3389065216","3389067263","NZ","NZL","NEW ZEALAND" -"3389067264","3389071359","AU","AUS","AUSTRALIA" -"3389071360","3389079551","PG","PNG","PAPUA NEW GUINEA" -"3389079552","3389092351","SG","SGP","SINGAPORE" -"3389092352","3389092863","PH","PHL","PHILIPPINES" -"3389092864","3389093887","AU","AUS","AUSTRALIA" -"3389093888","3389095935","IN","IND","INDIA" -"3389095936","3389104127","SG","SGP","SINGAPORE" -"3389104128","3389112319","SB","SLB","SOLOMON ISLANDS" -"3389112320","3389116415","MV","MDV","MALDIVES" -"3389116416","3389120511","JP","JPN","JAPAN" -"3389120512","3389122559","AU","AUS","AUSTRALIA" -"3389122560","3389122815","HK","HKG","HONG KONG" -"3389122816","3389123583","AU","AUS","AUSTRALIA" -"3389123584","3389123839","ID","IDN","INDONESIA" -"3389123840","3389124351","AU","AUS","AUSTRALIA" -"3389124352","3389124607","SG","SGP","SINGAPORE" -"3389124608","3389128703","PG","PNG","PAPUA NEW GUINEA" -"3389128704","3389129727","AU","AUS","AUSTRALIA" -"3389129728","3389132799","NZ","NZL","NEW ZEALAND" -"3389132800","3389136895","AU","AUS","AUSTRALIA" -"3389136896","3389142015","HK","HKG","HONG KONG" -"3389142016","3389143039","TW","TWN","TAIWAN" -"3389143040","3389145087","AU","AUS","AUSTRALIA" -"3389145088","3389151231","HK","HKG","HONG KONG" -"3389151232","3389152255","JP","JPN","JAPAN" -"3389152256","3389153279","AU","AUS","AUSTRALIA" -"3389153280","3389161471","TV","TUV","TUVALU" -"3389161472","3389165286","JP","JPN","JAPAN" -"3389165287","3389165287","SG","SGP","SINGAPORE" -"3389165288","3389165631","JP","JPN","JAPAN" -"3389165632","3389165695","CN","CHN","CHINA" -"3389165696","3389194239","JP","JPN","JAPAN" -"3389194240","3389195775","AU","AUS","AUSTRALIA" -"3389195776","3389196287","HK","HKG","HONG KONG" -"3389196288","3389197567","AU","AUS","AUSTRALIA" -"3389197568","3389197823","IN","IND","INDIA" -"3389197824","3389198079","AU","AUS","AUSTRALIA" -"3389198080","3389198335","IN","IND","INDIA" -"3389198336","3389202431","NZ","NZL","NEW ZEALAND" -"3389202432","3389210623","AU","AUS","AUSTRALIA" -"3389210624","3389210879","IN","IND","INDIA" -"3389210880","3389211135","AU","AUS","AUSTRALIA" -"3389211136","3389211391","IN","IND","INDIA" -"3389211392","3389211647","AU","AUS","AUSTRALIA" -"3389211648","3389212671","TH","THA","THAILAND" -"3389212672","3389213439","AU","AUS","AUSTRALIA" -"3389213440","3389214207","IN","IND","INDIA" -"3389214208","3389222911","AU","AUS","AUSTRALIA" -"3389222912","3389225983","IN","IND","INDIA" -"3389225984","3389226239","HK","HKG","HONG KONG" -"3389226240","3389226495","IN","IND","INDIA" -"3389226496","3389226751","SG","SGP","SINGAPORE" -"3389226752","3389227007","JP","JPN","JAPAN" -"3389227008","3389227263","PF","PYF","FRENCH POLYNESIA" -"3389227264","3389227519","AU","AUS","AUSTRALIA" -"3389227520","3389228031","PK","PAK","PAKISTAN" -"3389228032","3389228799","AU","AUS","AUSTRALIA" -"3389228800","3389229055","SG","SGP","SINGAPORE" -"3389229056","3389229311","JP","JPN","JAPAN" -"3389229312","3389229567","AU","AUS","AUSTRALIA" -"3389229568","3389230079","SG","SGP","SINGAPORE" -"3389230080","3389235199","JP","JPN","JAPAN" -"3389235200","3389243391","TW","TWN","TAIWAN" -"3389243392","3389247487","AU","AUS","AUSTRALIA" -"3389247488","3389251583","ID","IDN","INDONESIA" -"3389251584","3389259775","PF","PYF","FRENCH POLYNESIA" -"3389259776","3389263871","PH","PHL","PHILIPPINES" -"3389263872","3389266175","NZ","NZL","NEW ZEALAND" -"3389266176","3389266431","IN","IND","INDIA" -"3389266432","3389266943","HK","HKG","HONG KONG" -"3389266944","3389267967","AU","AUS","AUSTRALIA" -"3389267968","3389276159","WS","WSM","SAMOA" -"3389276160","3389284351","AU","AUS","AUSTRALIA" -"3389284352","3389292543","BD","BGD","BANGLADESH" -"3389292544","3389300735","CN","CHN","CHINA" -"3389300736","3389301247","ID","IDN","INDONESIA" -"3389301248","3389301759","AU","AUS","AUSTRALIA" -"3389301760","3389302015","IN","IND","INDIA" -"3389302016","3389302527","AU","AUS","AUSTRALIA" -"3389302528","3389302783","PK","PAK","PAKISTAN" -"3389302784","3389303039","VN","VNM","VIET NAM" -"3389303040","3389303295","TW","TWN","TAIWAN" -"3389303296","3389303807","ID","IDN","INDONESIA" -"3389303808","3389304063","IN","IND","INDIA" -"3389304064","3389304319","BD","BGD","BANGLADESH" -"3389304320","3389304575","PH","PHL","PHILIPPINES" -"3389304576","3389304831","AU","AUS","AUSTRALIA" -"3389304832","3389305087","VN","VNM","VIET NAM" -"3389305088","3389305599","IN","IND","INDIA" -"3389305600","3389305855","ID","IDN","INDONESIA" -"3389305856","3389306111","IN","IND","INDIA" -"3389306112","3389306367","AU","AUS","AUSTRALIA" -"3389306368","3389306623","IN","IND","INDIA" -"3389306624","3389306879","AU","AUS","AUSTRALIA" -"3389306880","3389307135","FJ","FJI","FIJI" -"3389307136","3389307647","ID","IDN","INDONESIA" -"3389307648","3389307903","JP","JPN","JAPAN" -"3389307904","3389308159","AU","AUS","AUSTRALIA" -"3389308160","3389308415","KH","KHM","CAMBODIA" -"3389308416","3389308671","AU","AUS","AUSTRALIA" -"3389308672","3389308927","PH","PHL","PHILIPPINES" -"3389308928","3389317119","HK","HKG","HONG KONG" -"3389317120","3389322239","AU","AUS","AUSTRALIA" -"3389322240","3389324031","JP","JPN","JAPAN" -"3389324032","3389324287","VU","VUT","VANUATU" -"3389324288","3389325311","CN","CHN","CHINA" -"3389325312","3389326335","AU","AUS","AUSTRALIA" -"3389326336","3389326847","TW","TWN","TAIWAN" -"3389326848","3389327359","AU","AUS","AUSTRALIA" -"3389327360","3389329407","TW","TWN","TAIWAN" -"3389329408","3389333503","AU","AUS","AUSTRALIA" -"3389333504","3389341695","BD","BGD","BANGLADESH" -"3389341696","3389345791","JP","JPN","JAPAN" -"3389345792","3389349887","TH","THA","THAILAND" -"3389349888","3389358079","AU","AUS","AUSTRALIA" -"3389358080","3389366271","PK","PAK","PAKISTAN" -"3389366272","3389374463","AU","AUS","AUSTRALIA" -"3389374464","3389382655","MN","MNG","MONGOLIA" -"3389382656","3389390847","TW","TWN","TAIWAN" -"3389390848","3389391359","HK","HKG","HONG KONG" -"3389391360","3389391615","VN","VNM","VIET NAM" -"3389391616","3389392127","AU","AUS","AUSTRALIA" -"3389392128","3389392895","NZ","NZL","NEW ZEALAND" -"3389392896","3389411327","AU","AUS","AUSTRALIA" -"3389411328","3389411583","IN","IND","INDIA" -"3389411584","3389412351","AU","AUS","AUSTRALIA" -"3389412352","3389412863","NZ","NZL","NEW ZEALAND" -"3389412864","3389413119","AU","AUS","AUSTRALIA" -"3389413120","3389413375","NZ","NZL","NEW ZEALAND" -"3389413376","3389413887","AU","AUS","AUSTRALIA" -"3389413888","3389414143","TH","THA","THAILAND" -"3389414144","3389414911","AU","AUS","AUSTRALIA" -"3389414912","3389415167","HK","HKG","HONG KONG" -"3389415168","3389415423","KR","KOR","REPUBLIC OF KOREA" -"3389415424","3389415935","VN","VNM","VIET NAM" -"3389415936","3389416191","JP","JPN","JAPAN" -"3389416192","3389416447","IN","IND","INDIA" -"3389416448","3389416959","TH","THA","THAILAND" -"3389416960","3389417215","SG","SGP","SINGAPORE" -"3389417216","3389417471","JP","JPN","JAPAN" -"3389417472","3389417983","TW","TWN","TAIWAN" -"3389417984","3389418239","AU","AUS","AUSTRALIA" -"3389418240","3389418495","TH","THA","THAILAND" -"3389418496","3389418751","AU","AUS","AUSTRALIA" -"3389418752","3389419263","NZ","NZL","NEW ZEALAND" -"3389419264","3389419519","TH","THA","THAILAND" -"3389419520","3389420543","AU","AUS","AUSTRALIA" -"3389420544","3389421055","NZ","NZL","NEW ZEALAND" -"3389421056","3389421311","AU","AUS","AUSTRALIA" -"3389421312","3389421567","JP","JPN","JAPAN" -"3389421568","3389422591","KI","KIR","KIRIBATI" -"3389422592","3389431807","AU","AUS","AUSTRALIA" -"3389431808","3389435903","SG","SGP","SINGAPORE" -"3389435904","3389439999","AU","AUS","AUSTRALIA" -"3389440000","3389444095","HK","HKG","HONG KONG" -"3389444096","3389452287","ID","IDN","INDONESIA" -"3389452288","3389453311","SG","SGP","SINGAPORE" -"3389453312","3389454335","JP","JPN","JAPAN" -"3389454336","3389455359","AU","AUS","AUSTRALIA" -"3389455360","3389456383","JP","JPN","JAPAN" -"3389456384","3389456895","NZ","NZL","NEW ZEALAND" -"3389456896","3389457407","AU","AUS","AUSTRALIA" -"3389457408","3389458431","NZ","NZL","NEW ZEALAND" -"3389458432","3389460479","AU","AUS","AUSTRALIA" -"3389460480","3389464575","JP","JPN","JAPAN" -"3389464576","3389469695","NZ","NZL","NEW ZEALAND" -"3389469696","3389471743","IN","IND","INDIA" -"3389471744","3389472767","NZ","NZL","NEW ZEALAND" -"3389472768","3389480959","AU","AUS","AUSTRALIA" -"3389480960","3389489151","JP","JPN","JAPAN" -"3389489152","3389493247","HK","HKG","HONG KONG" -"3389493248","3389521919","AU","AUS","AUSTRALIA" -"3389521920","3389523455","SG","SGP","SINGAPORE" -"3389523456","3389523967","JP","JPN","JAPAN" -"3389523968","3389525503","NZ","NZL","NEW ZEALAND" -"3389525504","3389526015","TW","TWN","TAIWAN" -"3389526016","3389528319","AU","AUS","AUSTRALIA" -"3389528320","3389528575","TH","THA","THAILAND" -"3389528576","3389529087","JP","JPN","JAPAN" -"3389529088","3389529599","ID","IDN","INDONESIA" -"3389529600","3389529855","PH","PHL","PHILIPPINES" -"3389529856","3389532159","AU","AUS","AUSTRALIA" -"3389532160","3389533183","SG","SGP","SINGAPORE" -"3389533184","3389534207","NZ","NZL","NEW ZEALAND" -"3389534208","3389538303","JP","JPN","JAPAN" -"3389538304","3389538559","AU","AUS","AUSTRALIA" -"3389538560","3389540351","TH","THA","THAILAND" -"3389540352","3389541887","AU","AUS","AUSTRALIA" -"3389541888","3389542399","TH","THA","THAILAND" -"3389542400","3389543423","JP","JPN","JAPAN" -"3389543424","3389544447","TH","THA","THAILAND" -"3389544448","3389545471","HK","HKG","HONG KONG" -"3389545472","3389545727","AU","AUS","AUSTRALIA" -"3389545728","3389545983","HK","HKG","HONG KONG" -"3389545984","3389546495","SG","SGP","SINGAPORE" -"3389546496","3389554687","AU","AUS","AUSTRALIA" -"3389554688","3389562879","CN","CHN","CHINA" -"3389562880","3389575167","AU","AUS","AUSTRALIA" -"3389575168","3389579233","JP","JPN","JAPAN" -"3389579234","3389579263","AU","AUS","AUSTRALIA" -"3389579264","3389587455","PH","PHL","PHILIPPINES" -"3389587456","3389612031","AU","AUS","AUSTRALIA" -"3389612032","3389616127","MY","MYS","MALAYSIA" -"3389616128","3389640703","IN","IND","INDIA" -"3389640704","3389644799","JP","JPN","JAPAN" -"3389644800","3389652991","NZ","NZL","NEW ZEALAND" -"3389652992","3389661183","AU","AUS","AUSTRALIA" -"3389661184","3389669375","ID","IDN","INDONESIA" -"3389669376","3389673471","CN","CHN","CHINA" -"3389673472","3389677567","AU","AUS","AUSTRALIA" -"3389677568","3389685759","JP","JPN","JAPAN" -"3389685760","3389718527","AU","AUS","AUSTRALIA" -"3389718528","3389784063","JP","JPN","JAPAN" -"3389784064","3389784319","NZ","NZL","NEW ZEALAND" -"3389784320","3389784575","AU","AUS","AUSTRALIA" -"3389784576","3389784831","SG","SGP","SINGAPORE" -"3389784832","3389785087","NZ","NZL","NEW ZEALAND" -"3389785088","3389786111","HK","HKG","HONG KONG" -"3389786112","3389788159","JP","JPN","JAPAN" -"3389788160","3389788415","IN","IND","INDIA" -"3389788416","3389788927","PH","PHL","PHILIPPINES" -"3389788928","3389789695","US","USA","UNITED STATES" -"3389789696","3389790719","AU","AUS","AUSTRALIA" -"3389790720","3389790975","BN","BRN","BRUNEI DARUSSALAM" -"3389790976","3389791231","JP","JPN","JAPAN" -"3389791232","3389791743","AU","AUS","AUSTRALIA" -"3389791744","3389791999","JP","JPN","JAPAN" -"3389792000","3389801983","AU","AUS","AUSTRALIA" -"3389801984","3389802239","NZ","NZL","NEW ZEALAND" -"3389802240","3389802751","AU","AUS","AUSTRALIA" -"3389802752","3389803263","TH","THA","THAILAND" -"3389803264","3389803519","AU","AUS","AUSTRALIA" -"3389803520","3389806079","NZ","NZL","NEW ZEALAND" -"3389806080","3389807359","AU","AUS","AUSTRALIA" -"3389807360","3389807615","NZ","NZL","NEW ZEALAND" -"3389807616","3389808127","AU","AUS","AUSTRALIA" -"3389808128","3389808639","SG","SGP","SINGAPORE" -"3389808640","3389808895","NZ","NZL","NEW ZEALAND" -"3389808896","3389809151","TH","THA","THAILAND" -"3389809152","3389809919","AU","AUS","AUSTRALIA" -"3389809920","3389810175","IN","IND","INDIA" -"3389810176","3389810687","AU","AUS","AUSTRALIA" -"3389810688","3389811199","NZ","NZL","NEW ZEALAND" -"3389811200","3389811711","AU","AUS","AUSTRALIA" -"3389811712","3389811967","NZ","NZL","NEW ZEALAND" -"3389811968","3389813759","AU","AUS","AUSTRALIA" -"3389813760","3389814527","TH","THA","THAILAND" -"3389814528","3389815295","AU","AUS","AUSTRALIA" -"3389815296","3389816063","NZ","NZL","NEW ZEALAND" -"3389816064","3389816575","AU","AUS","AUSTRALIA" -"3389816576","3389816831","US","USA","UNITED STATES" -"3389816832","3389846271","AU","AUS","AUSTRALIA" -"3389846272","3389847551","JP","JPN","JAPAN" -"3389847552","3389849599","NZ","NZL","NEW ZEALAND" -"3389849600","3389915135","JP","JPN","JAPAN" -"3389915136","3389917183","AU","AUS","AUSTRALIA" -"3389917184","3389919231","TW","TWN","TAIWAN" -"3389919232","3389931519","NZ","NZL","NEW ZEALAND" -"3389931520","3389932287","AU","AUS","AUSTRALIA" -"3389932288","3389932799","HK","HKG","HONG KONG" -"3389932800","3389933055","AU","AUS","AUSTRALIA" -"3389933056","3389933567","PK","PAK","PAKISTAN" -"3389933568","3389933823","IN","IND","INDIA" -"3389933824","3389934591","NZ","NZL","NEW ZEALAND" -"3389934592","3389935615","AU","AUS","AUSTRALIA" -"3389935616","3389935871","HK","HKG","HONG KONG" -"3389935872","3389936127","AU","AUS","AUSTRALIA" -"3389936128","3389936895","NZ","NZL","NEW ZEALAND" -"3389936896","3389937663","PH","PHL","PHILIPPINES" -"3389937664","3389937919","CN","CHN","CHINA" -"3389937920","3389939711","AU","AUS","AUSTRALIA" -"3389939712","3389940223","NZ","NZL","NEW ZEALAND" -"3389940224","3389940479","AU","AUS","AUSTRALIA" -"3389940480","3389940991","NZ","NZL","NEW ZEALAND" -"3389940992","3389941247","AU","AUS","AUSTRALIA" -"3389941248","3389941503","NZ","NZL","NEW ZEALAND" -"3389941504","3389941759","KR","KOR","REPUBLIC OF KOREA" -"3389941760","3389942271","AU","AUS","AUSTRALIA" -"3389942272","3389943295","NZ","NZL","NEW ZEALAND" -"3389943296","3389944319","AU","AUS","AUSTRALIA" -"3389944320","3389944831","NZ","NZL","NEW ZEALAND" -"3389944832","3389945087","HK","HKG","HONG KONG" -"3389945088","3389945343","TH","THA","THAILAND" -"3389945344","3389947647","AU","AUS","AUSTRALIA" -"3389947648","3389947903","NZ","NZL","NEW ZEALAND" -"3389947904","3389949695","AU","AUS","AUSTRALIA" -"3389949696","3389950207","NZ","NZL","NEW ZEALAND" -"3389950208","3389950975","AU","AUS","AUSTRALIA" -"3389950976","3389951743","NZ","NZL","NEW ZEALAND" -"3389951744","3389953279","AU","AUS","AUSTRALIA" -"3389953280","3389953535","NZ","NZL","NEW ZEALAND" -"3389953536","3389954303","AU","AUS","AUSTRALIA" -"3389954304","3389954815","SG","SGP","SINGAPORE" -"3389954816","3389956607","AU","AUS","AUSTRALIA" -"3389956608","3389957375","TH","THA","THAILAND" -"3389957376","3389957631","KR","KOR","REPUBLIC OF KOREA" -"3389957632","3389957887","AU","AUS","AUSTRALIA" -"3389957888","3389958399","NZ","NZL","NEW ZEALAND" -"3389958400","3389970431","AU","AUS","AUSTRALIA" -"3389970432","3389971199","NZ","NZL","NEW ZEALAND" -"3389971200","3389971967","AU","AUS","AUSTRALIA" -"3389971968","3389972223","HK","HKG","HONG KONG" -"3389972224","3389972735","AU","AUS","AUSTRALIA" -"3389972736","3389973759","NZ","NZL","NEW ZEALAND" -"3389973760","3389975295","AU","AUS","AUSTRALIA" -"3389975296","3389976319","CN","CHN","CHINA" -"3389976320","3389979647","AU","AUS","AUSTRALIA" -"3389979648","3389980415","NZ","NZL","NEW ZEALAND" -"3389980416","3389980671","ID","IDN","INDONESIA" -"3389980672","3390308351","JP","JPN","JAPAN" -"3390308352","3390310399","NZ","NZL","NEW ZEALAND" -"3390310400","3390316543","AU","AUS","AUSTRALIA" -"3390316544","3390325247","NZ","NZL","NEW ZEALAND" -"3390325248","3390325503","HK","HKG","HONG KONG" -"3390325504","3390327807","AU","AUS","AUSTRALIA" -"3390327808","3390329087","NZ","NZL","NEW ZEALAND" -"3390329088","3390329343","AU","AUS","AUSTRALIA" -"3390329344","3390330623","KR","KOR","REPUBLIC OF KOREA" -"3390330624","3390330879","TH","THA","THAILAND" -"3390330880","3390331391","HK","HKG","HONG KONG" -"3390331392","3390331647","JP","JPN","JAPAN" -"3390331648","3390332415","NZ","NZL","NEW ZEALAND" -"3390332416","3390332927","HK","HKG","HONG KONG" -"3390332928","3390333439","NZ","NZL","NEW ZEALAND" -"3390333440","3390333695","AU","AUS","AUSTRALIA" -"3390333696","3390333951","KR","KOR","REPUBLIC OF KOREA" -"3390333952","3390334463","HK","HKG","HONG KONG" -"3390334464","3390335231","NZ","NZL","NEW ZEALAND" -"3390335232","3390335487","TH","THA","THAILAND" -"3390335488","3390336511","ID","IDN","INDONESIA" -"3390336512","3390337023","AU","AUS","AUSTRALIA" -"3390337024","3390337279","GU","GUM","GUAM" -"3390337280","3390337535","NZ","NZL","NEW ZEALAND" -"3390337536","3390338303","SG","SGP","SINGAPORE" -"3390338304","3390338815","HK","HKG","HONG KONG" -"3390338816","3390339071","KR","KOR","REPUBLIC OF KOREA" -"3390339072","3390339327","CN","CHN","CHINA" -"3390339328","3390339839","NZ","NZL","NEW ZEALAND" -"3390339840","3390340351","JP","JPN","JAPAN" -"3390340352","3390341119","HK","HKG","HONG KONG" -"3390341120","3390375935","KR","KOR","REPUBLIC OF KOREA" -"3390375936","3390377983","AU","AUS","AUSTRALIA" -"3390377984","3390382079","NZ","NZL","NEW ZEALAND" -"3390382080","3390390271","LK","LKA","SRI LANKA" -"3390390272","3390402559","NZ","NZL","NEW ZEALAND" -"3390402560","3390406655","JP","JPN","JAPAN" -"3390406656","3390406911","NZ","NZL","NEW ZEALAND" -"3390406912","3390407167","AU","AUS","AUSTRALIA" -"3390407168","3390408191","NZ","NZL","NEW ZEALAND" -"3390408192","3390408703","IN","IND","INDIA" -"3390408704","3390409727","NZ","NZL","NEW ZEALAND" -"3390409728","3390409983","TH","THA","THAILAND" -"3390409984","3390410751","NZ","NZL","NEW ZEALAND" -"3390410752","3390411007","TH","THA","THAILAND" -"3390411008","3390411519","SG","SGP","SINGAPORE" -"3390411520","3390411775","IN","IND","INDIA" -"3390411776","3390412031","MY","MYS","MALAYSIA" -"3390412032","3390412287","TH","THA","THAILAND" -"3390412288","3390413311","JP","JPN","JAPAN" -"3390413312","3390413567","SG","SGP","SINGAPORE" -"3390413568","3390414335","NZ","NZL","NEW ZEALAND" -"3390414336","3390414847","SG","SGP","SINGAPORE" -"3390414848","3390418943","JP","JPN","JAPAN" -"3390418944","3390423039","MV","MDV","MALDIVES" -"3390423040","3390429439","SG","SGP","SINGAPORE" -"3390429440","3390429951","HK","HKG","HONG KONG" -"3390429952","3390439423","SG","SGP","SINGAPORE" -"3390439424","3390441471","NZ","NZL","NEW ZEALAND" -"3390441472","3390443519","TH","THA","THAILAND" -"3390443520","3390447359","NZ","NZL","NEW ZEALAND" -"3390447360","3390447615","ID","IDN","INDONESIA" -"3390447616","3390455807","KR","KOR","REPUBLIC OF KOREA" -"3390455808","3390472191","JP","JPN","JAPAN" -"3390472192","3390480383","NC","NCL","NEW CALEDONIA" -"3390480384","3390484479","AU","AUS","AUSTRALIA" -"3390484480","3390488575","GU","GUM","GUAM" -"3390488576","3390492671","BD","BGD","BANGLADESH" -"3390492672","3390496767","JP","JPN","JAPAN" -"3390496768","3390500863","NC","NCL","NEW CALEDONIA" -"3390500864","3390502911","HK","HKG","HONG KONG" -"3390502912","3390504959","CN","CHN","CHINA" -"3390504960","3390767103","JP","JPN","JAPAN" -"3390767104","3390769407","NZ","NZL","NEW ZEALAND" -"3390769408","3390769663","IN","IND","INDIA" -"3390769664","3390770175","TH","THA","THAILAND" -"3390770176","3390770687","AU","AUS","AUSTRALIA" -"3390770688","3390770943","JP","JPN","JAPAN" -"3390770944","3390771199","AU","AUS","AUSTRALIA" -"3390771200","3390775295","SG","SGP","SINGAPORE" -"3390775296","3390790399","NZ","NZL","NEW ZEALAND" -"3390790400","3390790655","AU","AUS","AUSTRALIA" -"3390790656","3390796287","NZ","NZL","NEW ZEALAND" -"3390796288","3390796543","AU","AUS","AUSTRALIA" -"3390796544","3390800383","NZ","NZL","NEW ZEALAND" -"3390800384","3390800895","AU","AUS","AUSTRALIA" -"3390800896","3390801151","NZ","NZL","NEW ZEALAND" -"3390801152","3390801407","AU","AUS","AUSTRALIA" -"3390801408","3390815231","NZ","NZL","NEW ZEALAND" -"3390815232","3390815359","AU","AUS","AUSTRALIA" -"3390815360","3390819583","NZ","NZL","NEW ZEALAND" -"3390819584","3390820351","AU","AUS","AUSTRALIA" -"3390820352","3390832639","NZ","NZL","NEW ZEALAND" -"3390832640","3390963711","TH","THA","THAILAND" -"3390963712","3391094783","KR","KOR","REPUBLIC OF KOREA" -"3391094784","3391356927","JP","JPN","JAPAN" -"3391356928","3391364095","NZ","NZL","NEW ZEALAND" -"3391364096","3391364351","AU","AUS","AUSTRALIA" -"3391364352","3391375871","NZ","NZL","NEW ZEALAND" -"3391375872","3391376127","AU","AUS","AUSTRALIA" -"3391376128","3391379199","NZ","NZL","NEW ZEALAND" -"3391379200","3391379455","AU","AUS","AUSTRALIA" -"3391379456","3391386623","NZ","NZL","NEW ZEALAND" -"3391386624","3391387135","AU","AUS","AUSTRALIA" -"3391387136","3391414783","NZ","NZL","NEW ZEALAND" -"3391414784","3391415039","AU","AUS","AUSTRALIA" -"3391415040","3391432703","NZ","NZL","NEW ZEALAND" -"3391432704","3391433215","AU","AUS","AUSTRALIA" -"3391433216","3391434239","NZ","NZL","NEW ZEALAND" -"3391434240","3391434751","AU","AUS","AUSTRALIA" -"3391434752","3391440255","NZ","NZL","NEW ZEALAND" -"3391440256","3391440383","AU","AUS","AUSTRALIA" -"3391440384","3391440639","NZ","NZL","NEW ZEALAND" -"3391440640","3391440895","AU","AUS","AUSTRALIA" -"3391440896","3391441407","NZ","NZL","NEW ZEALAND" -"3391441408","3391441663","AU","AUS","AUSTRALIA" -"3391441664","3391444479","NZ","NZL","NEW ZEALAND" -"3391444480","3391444991","AU","AUS","AUSTRALIA" -"3391444992","3391453183","NZ","NZL","NEW ZEALAND" -"3391453184","3391453439","AU","AUS","AUSTRALIA" -"3391453440","3391456511","NZ","NZL","NEW ZEALAND" -"3391456512","3391456767","AU","AUS","AUSTRALIA" -"3391456768","3391461375","NZ","NZL","NEW ZEALAND" -"3391461376","3391461631","AU","AUS","AUSTRALIA" -"3391461632","3391464959","NZ","NZL","NEW ZEALAND" -"3391464960","3391465215","AU","AUS","AUSTRALIA" -"3391465216","3391469055","NZ","NZL","NEW ZEALAND" -"3391469056","3391469311","AU","AUS","AUSTRALIA" -"3391469312","3391473407","NZ","NZL","NEW ZEALAND" -"3391473408","3391473663","AU","AUS","AUSTRALIA" -"3391473664","3391482623","NZ","NZL","NEW ZEALAND" -"3391482624","3391482879","AU","AUS","AUSTRALIA" -"3391482880","3391487999","NZ","NZL","NEW ZEALAND" -"3391488000","3391492095","CN","CHN","CHINA" -"3391492096","3391496191","HK","HKG","HONG KONG" -"3391496192","3391500287","SG","SGP","SINGAPORE" -"3391500288","3391504383","AU","AUS","AUSTRALIA" -"3391504384","3391523583","CN","CHN","CHINA" -"3391523584","3391523839","AU","AUS","AUSTRALIA" -"3391523840","3391524863","CN","CHN","CHINA" -"3391524864","3391525375","AU","AUS","AUSTRALIA" -"3391525376","3391525887","CN","CHN","CHINA" -"3391525888","3391526143","AU","AUS","AUSTRALIA" -"3391526144","3391526655","CN","CHN","CHINA" -"3391526656","3391526911","SG","SGP","SINGAPORE" -"3391526912","3391528191","CN","CHN","CHINA" -"3391528192","3391528959","AU","AUS","AUSTRALIA" -"3391528960","3391529471","CN","CHN","CHINA" -"3391529472","3391529983","AU","AUS","AUSTRALIA" -"3391529984","3391533567","CN","CHN","CHINA" -"3391533568","3391534079","HK","HKG","HONG KONG" -"3391534080","3391535103","AU","AUS","AUSTRALIA" -"3391535104","3391553535","CN","CHN","CHINA" -"3391553536","3391619071","TW","TWN","TAIWAN" -"3391619072","3391620607","HK","HKG","HONG KONG" -"3391620608","3391620863","IN","IND","INDIA" -"3391620864","3391660799","HK","HKG","HONG KONG" -"3391660800","3391661055","AU","AUS","AUSTRALIA" -"3391661056","3391663103","HK","HKG","HONG KONG" -"3391663104","3391664127","PH","PHL","PHILIPPINES" -"3391664128","3391668223","BD","BGD","BANGLADESH" -"3391668224","3391676415","HK","HKG","HONG KONG" -"3391676416","3391684607","SG","SGP","SINGAPORE" -"3391684608","3391688191","IN","IND","INDIA" -"3391688192","3391688703","AU","AUS","AUSTRALIA" -"3391688704","3391717887","IN","IND","INDIA" -"3391717888","3391718143","US","USA","UNITED STATES" -"3391718144","3391718911","IN","IND","INDIA" -"3391718912","3391719167","JP","JPN","JAPAN" -"3391719168","3391719423","AU","AUS","AUSTRALIA" -"3391719424","3391720703","NZ","NZL","NEW ZEALAND" -"3391720704","3391720959","SG","SGP","SINGAPORE" -"3391720960","3391721215","CN","CHN","CHINA" -"3391721216","3391721471","HK","HKG","HONG KONG" -"3391721472","3391721727","AU","AUS","AUSTRALIA" -"3391721728","3391721983","KR","KOR","REPUBLIC OF KOREA" -"3391721984","3391722239","TW","TWN","TAIWAN" -"3391722240","3391722495","PH","PHL","PHILIPPINES" -"3391722496","3391723519","IN","IND","INDIA" -"3391723520","3391725567","CN","CHN","CHINA" -"3391725568","3391733759","TH","THA","THAILAND" -"3391733760","3391734015","IN","IND","INDIA" -"3391734016","3391734783","AU","AUS","AUSTRALIA" -"3391734784","3391736831","JP","JPN","JAPAN" -"3391736832","3391737855","IN","IND","INDIA" -"3391737856","3391741951","JP","JPN","JAPAN" -"3391741952","3391744959","IN","IND","INDIA" -"3391744960","3391744991","SG","SGP","SINGAPORE" -"3391744992","3391746047","IN","IND","INDIA" -"3391746048","3391750143","CN","CHN","CHINA" -"3391750144","3391815679","SG","SGP","SINGAPORE" -"3391815680","3391817727","AU","AUS","AUSTRALIA" -"3391817728","3391819775","TO","TON","TONGA" -"3391819776","3391823871","JP","JPN","JAPAN" -"3391823872","3391827967","TH","THA","THAILAND" -"3391827968","3391832063","KR","KOR","REPUBLIC OF KOREA" -"3391832064","3391832575","ID","IDN","INDONESIA" -"3391832576","3391832831","AU","AUS","AUSTRALIA" -"3391832832","3391833087","IN","IND","INDIA" -"3391833088","3391834111","JP","JPN","JAPAN" -"3391834112","3391835135","ID","IDN","INDONESIA" -"3391835136","3391836159","CN","CHN","CHINA" -"3391836160","3391836671","AU","AUS","AUSTRALIA" -"3391836672","3391837183","HK","HKG","HONG KONG" -"3391837184","3391838207","AU","AUS","AUSTRALIA" -"3391838208","3391838719","ID","IDN","INDONESIA" -"3391838720","3391838975","PH","PHL","PHILIPPINES" -"3391838976","3391839231","AU","AUS","AUSTRALIA" -"3391839232","3391840255","ID","IDN","INDONESIA" -"3391840256","3391841279","JP","JPN","JAPAN" -"3391841280","3391842303","MY","MYS","MALAYSIA" -"3391842304","3391843327","JP","JPN","JAPAN" -"3391843328","3391844351","VN","VNM","VIET NAM" -"3391844352","3391845887","ID","IDN","INDONESIA" -"3391845888","3391846399","PK","PAK","PAKISTAN" -"3391846400","3391847423","TW","TWN","TAIWAN" -"3391847424","3391848447","PK","PAK","PAKISTAN" -"3391848448","3391852543","AU","AUS","AUSTRALIA" -"3391852544","3391856639","CN","CHN","CHINA" -"3391856640","3391864831","ID","IDN","INDONESIA" -"3391864832","3391868927","US","USA","UNITED STATES" -"3391868928","3391870975","SG","SGP","SINGAPORE" -"3391870976","3391873023","US","USA","UNITED STATES" -"3391873024","3391877119","AU","AUS","AUSTRALIA" -"3391877120","3391879167","JP","JPN","JAPAN" -"3391879168","3391881215","ID","IDN","INDONESIA" -"3391881216","3391895551","TH","THA","THAILAND" -"3391895552","3391896575","IN","IND","INDIA" -"3391896576","3391900415","TH","THA","THAILAND" -"3391900416","3391901695","AU","AUS","AUSTRALIA" -"3391901696","3391905791","PK","PAK","PAKISTAN" -"3391905792","3391906047","TH","THA","THAILAND" -"3391906048","3391906303","JP","JPN","JAPAN" -"3391906304","3391906815","AU","AUS","AUSTRALIA" -"3391906816","3391907839","PH","PHL","PHILIPPINES" -"3391907840","3391909887","BD","BGD","BANGLADESH" -"3391909888","3391910911","IO","IOT","BRITISH INDIAN OCEAN TERRITORY" -"3391910912","3391911935","AU","AUS","AUSTRALIA" -"3391911936","3391913983","HK","HKG","HONG KONG" -"3391913984","3391915519","TH","THA","THAILAND" -"3391915520","3391915775","AU","AUS","AUSTRALIA" -"3391915776","3391916287","TH","THA","THAILAND" -"3391916288","3391916543","AU","AUS","AUSTRALIA" -"3391916544","3391920127","TH","THA","THAILAND" -"3391920128","3391930367","AU","AUS","AUSTRALIA" -"3391930368","3391946751","TH","THA","THAILAND" -"3391946752","3391947007","DE","DEU","GERMANY" -"3391947008","3391947519","HK","HKG","HONG KONG" -"3391947520","3391947775","AU","AUS","AUSTRALIA" -"3391947776","3391948287","HK","HKG","HONG KONG" -"3391948288","3391948799","IN","IND","INDIA" -"3391948800","3391949311","HK","HKG","HONG KONG" -"3391949312","3391949823","IN","IND","INDIA" -"3391949824","3391950079","JP","JPN","JAPAN" -"3391950080","3391950335","AU","AUS","AUSTRALIA" -"3391950336","3391971327","HK","HKG","HONG KONG" -"3391971328","3391979519","AU","AUS","AUSTRALIA" -"3391979520","3391979775","HK","HKG","HONG KONG" -"3391979776","3391980031","JP","JPN","JAPAN" -"3391980032","3391980543","HK","HKG","HONG KONG" -"3391980544","3391983615","MY","MYS","MALAYSIA" -"3391983616","3391984639","NP","NPL","NEPAL" -"3391984640","3391984895","HK","HKG","HONG KONG" -"3391984896","3391985151","ID","IDN","INDONESIA" -"3391985152","3391986687","AU","AUS","AUSTRALIA" -"3391986688","3391987199","PK","PAK","PAKISTAN" -"3391987200","3391987455","AU","AUS","AUSTRALIA" -"3391987456","3391987711","BD","BGD","BANGLADESH" -"3391987712","3391988527","JP","JPN","JAPAN" -"3391988528","3391988543","US","USA","UNITED STATES" -"3391988544","3391991807","JP","JPN","JAPAN" -"3391991808","3392012287","HK","HKG","HONG KONG" -"3392012288","3392017151","ID","IDN","INDONESIA" -"3392017152","3392017407","IN","IND","INDIA" -"3392017408","3392017919","ID","IDN","INDONESIA" -"3392017920","3392018431","IN","IND","INDIA" -"3392018432","3392020479","ID","IDN","INDONESIA" -"3392020480","3392028671","CN","CHN","CHINA" -"3392028672","3392040959","ID","IDN","INDONESIA" -"3392040960","3392045055","MY","MYS","MALAYSIA" -"3392045056","3392046079","ID","IDN","INDONESIA" -"3392046080","3392049151","AU","AUS","AUSTRALIA" -"3392049152","3392053247","ID","IDN","INDONESIA" -"3392053248","3392061439","NZ","NZL","NEW ZEALAND" -"3392061440","3392069631","IN","IND","INDIA" -"3392069632","3392073727","CN","CHN","CHINA" -"3392073728","3392077823","ID","IDN","INDONESIA" -"3392077824","3392081919","AU","AUS","AUSTRALIA" -"3392081920","3392086015","JP","JPN","JAPAN" -"3392086016","3392094207","AU","AUS","AUSTRALIA" -"3392094208","3392098559","ID","IDN","INDONESIA" -"3392098560","3392098815","AU","AUS","AUSTRALIA" -"3392098816","3392099327","PH","PHL","PHILIPPINES" -"3392099328","3392100095","AU","AUS","AUSTRALIA" -"3392100096","3392100351","VN","VNM","VIET NAM" -"3392100352","3392100607","ID","IDN","INDONESIA" -"3392100608","3392100863","SG","SGP","SINGAPORE" -"3392100864","3392101887","ID","IDN","INDONESIA" -"3392101888","3392102143","PK","PAK","PAKISTAN" -"3392102144","3392102399","AU","AUS","AUSTRALIA" -"3392102400","3392106495","KH","KHM","CAMBODIA" -"3392106496","3392109567","AU","AUS","AUSTRALIA" -"3392109568","3392109823","IN","IND","INDIA" -"3392109824","3392110335","PH","PHL","PHILIPPINES" -"3392110336","3392110591","IN","IND","INDIA" -"3392110592","3392111103","PH","PHL","PHILIPPINES" -"3392111104","3392111359","DE","DEU","GERMANY" -"3392111360","3392112127","PH","PHL","PHILIPPINES" -"3392112128","3392112639","AU","AUS","AUSTRALIA" -"3392112640","3392114175","PH","PHL","PHILIPPINES" -"3392114176","3392114431","VN","VNM","VIET NAM" -"3392114432","3392114687","KR","KOR","REPUBLIC OF KOREA" -"3392114688","3392118783","GU","GUM","GUAM" -"3392118784","3392126975","MY","MYS","MALAYSIA" -"3392126976","3392135167","ID","IDN","INDONESIA" -"3392135168","3392143359","TH","THA","THAILAND" -"3392143360","3392208895","JP","JPN","JAPAN" -"3392208896","3392229375","NZ","NZL","NEW ZEALAND" -"3392229376","3392229887","AU","AUS","AUSTRALIA" -"3392229888","3392230335","NZ","NZL","NEW ZEALAND" -"3392230336","3392230399","AU","AUS","AUSTRALIA" -"3392230400","3392233471","NZ","NZL","NEW ZEALAND" -"3392233472","3392235519","AU","AUS","AUSTRALIA" -"3392235520","3392238079","NZ","NZL","NEW ZEALAND" -"3392238080","3392238335","AU","AUS","AUSTRALIA" -"3392238336","3392272383","NZ","NZL","NEW ZEALAND" -"3392272384","3392272639","AU","AUS","AUSTRALIA" -"3392272640","3392286719","NZ","NZL","NEW ZEALAND" -"3392286720","3392286975","AU","AUS","AUSTRALIA" -"3392286976","3392287231","US","USA","UNITED STATES" -"3392287232","3392287743","NZ","NZL","NEW ZEALAND" -"3392287744","3392288767","AU","AUS","AUSTRALIA" -"3392288768","3392293887","NZ","NZL","NEW ZEALAND" -"3392293888","3392294399","AU","AUS","AUSTRALIA" -"3392294400","3392295935","NZ","NZL","NEW ZEALAND" -"3392295936","3392296191","AU","AUS","AUSTRALIA" -"3392296192","3392307199","NZ","NZL","NEW ZEALAND" -"3392307200","3392307455","AU","AUS","AUSTRALIA" -"3392307456","3392307711","NZ","NZL","NEW ZEALAND" -"3392307712","3392309503","AU","AUS","AUSTRALIA" -"3392309504","3392324607","NZ","NZL","NEW ZEALAND" -"3392324608","3392325119","AU","AUS","AUSTRALIA" -"3392325120","3392325631","NZ","NZL","NEW ZEALAND" -"3392325632","3392326655","AU","AUS","AUSTRALIA" -"3392326656","3392336159","NZ","NZL","NEW ZEALAND" -"3392336160","3392336639","AU","AUS","AUSTRALIA" -"3392336640","3392339727","NZ","NZL","NEW ZEALAND" -"3392339728","3392339743","AU","AUS","AUSTRALIA" -"3392339744","3392339967","NZ","NZL","NEW ZEALAND" -"3392339968","3392340991","NP","NPL","NEPAL" -"3392340992","3392344063","JP","JPN","JAPAN" -"3392344064","3392348159","ID","IDN","INDONESIA" -"3392348160","3392354303","JP","JPN","JAPAN" -"3392354304","3392356351","ID","IDN","INDONESIA" -"3392356352","3392364543","NP","NPL","NEPAL" -"3392364544","3392372735","ID","IDN","INDONESIA" -"3392372736","3392385023","AU","AUS","AUSTRALIA" -"3392385024","3392389119","BD","BGD","BANGLADESH" -"3392389120","3392401407","ID","IDN","INDONESIA" -"3392401408","3392403455","SG","SGP","SINGAPORE" -"3392403456","3392404479","AU","AUS","AUSTRALIA" -"3392404480","3392405503","ID","IDN","INDONESIA" -"3392405504","3392406015","NP","NPL","NEPAL" -"3392406016","3392406527","IN","IND","INDIA" -"3392406528","3392407551","TH","THA","THAILAND" -"3392407552","3392409599","ID","IDN","INDONESIA" -"3392409600","3392413695","JP","JPN","JAPAN" -"3392413696","3392421887","AU","AUS","AUSTRALIA" -"3392421888","3392430271","SG","SGP","SINGAPORE" -"3392430272","3392430303","TW","TWN","TAIWAN" -"3392430304","3392432511","SG","SGP","SINGAPORE" -"3392432512","3392432543","TW","TWN","TAIWAN" -"3392432544","3392438271","SG","SGP","SINGAPORE" -"3392438272","3392446463","AU","AUS","AUSTRALIA" -"3392446464","3392450559","PH","PHL","PHILIPPINES" -"3392450560","3392454655","JP","JPN","JAPAN" -"3392454656","3392462847","HK","HKG","HONG KONG" -"3392462848","3392472063","NP","NPL","NEPAL" -"3392472064","3392473087","AU","AUS","AUSTRALIA" -"3392473088","3392475135","IN","IND","INDIA" -"3392475136","3392479231","JP","JPN","JAPAN" -"3392479232","3392487423","AU","AUS","AUSTRALIA" -"3392487424","3392499711","IN","IND","INDIA" -"3392499712","3392503807","JP","JPN","JAPAN" -"3392503808","3392511999","HK","HKG","HONG KONG" -"3392512000","3392516095","BD","BGD","BANGLADESH" -"3392516096","3392520191","NZ","NZL","NEW ZEALAND" -"3392520192","3392524287","AU","AUS","AUSTRALIA" -"3392524288","3392528383","JP","JPN","JAPAN" -"3392528384","3392536575","ID","IDN","INDONESIA" -"3392536576","3392610303","IN","IND","INDIA" -"3392610304","3392618495","HK","HKG","HONG KONG" -"3392618496","3392626687","SG","SGP","SINGAPORE" -"3392626688","3392630783","NZ","NZL","NEW ZEALAND" -"3392630784","3392634879","JP","JPN","JAPAN" -"3392634880","3392635903","PK","PAK","PAKISTAN" -"3392635904","3392636927","VN","VNM","VIET NAM" -"3392636928","3392637951","JP","JPN","JAPAN" -"3392637952","3392638975","TH","THA","THAILAND" -"3392638976","3392643071","AU","AUS","AUSTRALIA" -"3392643072","3392647167","ID","IDN","INDONESIA" -"3392647168","3392651263","MN","MNG","MONGOLIA" -"3392651264","3392659455","JP","JPN","JAPAN" -"3392659456","3392660831","TW","TWN","TAIWAN" -"3392660832","3392660847","SG","SGP","SINGAPORE" -"3392660848","3392660911","TW","TWN","TAIWAN" -"3392660912","3392660927","SG","SGP","SINGAPORE" -"3392660928","3392667647","TW","TWN","TAIWAN" -"3392667648","3392668671","IN","IND","INDIA" -"3392668672","3392669695","BD","BGD","BANGLADESH" -"3392669696","3392670815","HK","HKG","HONG KONG" -"3392670816","3392670847","US","USA","UNITED STATES" -"3392670848","3392671743","HK","HKG","HONG KONG" -"3392671744","3392675839","JP","JPN","JAPAN" -"3392675840","3392681983","NZ","NZL","NEW ZEALAND" -"3392681984","3392682239","SG","SGP","SINGAPORE" -"3392682240","3392682495","VN","VNM","VIET NAM" -"3392682496","3392683007","IN","IND","INDIA" -"3392683008","3392684031","AU","AUS","AUSTRALIA" -"3392684032","3392688127","JP","JPN","JAPAN" -"3392688128","3392692223","MY","MYS","MALAYSIA" -"3392692224","3392700415","IN","IND","INDIA" -"3392700416","3392708607","SG","SGP","SINGAPORE" -"3392708608","3392712703","ID","IDN","INDONESIA" -"3392712704","3392716799","AF","AFG","AFGHANISTAN" -"3392716800","3392733183","IN","IND","INDIA" -"3392733184","3392741375","ID","IDN","INDONESIA" -"3392741376","3392765951","PH","PHL","PHILIPPINES" -"3392765952","3392782335","TH","THA","THAILAND" -"3392782336","3392790527","HK","HKG","HONG KONG" -"3392790528","3392794623","JP","JPN","JAPAN" -"3392794624","3392798719","AU","AUS","AUSTRALIA" -"3392798720","3392798975","LA","LAO","LAO PEOPLE'S DEMOCRATIC REPUBLIC" -"3392798976","3392799231","JP","JPN","JAPAN" -"3392799232","3392799487","PH","PHL","PHILIPPINES" -"3392799488","3392799743","AU","AUS","AUSTRALIA" -"3392799744","3392800767","JP","JPN","JAPAN" -"3392800768","3392801375","SG","SGP","SINGAPORE" -"3392801376","3392801391","HK","HKG","HONG KONG" -"3392801392","3392802815","SG","SGP","SINGAPORE" -"3392802816","3392806911","JP","JPN","JAPAN" -"3392806912","3392815103","AU","AUS","AUSTRALIA" -"3392815104","3392819199","ID","IDN","INDONESIA" -"3392819200","3392823295","MY","MYS","MALAYSIA" -"3392823296","3392824319","KH","KHM","CAMBODIA" -"3392824320","3392824831","AU","AUS","AUSTRALIA" -"3392824832","3392825343","IN","IND","INDIA" -"3392825344","3392826367","JP","JPN","JAPAN" -"3392826368","3392827391","PH","PHL","PHILIPPINES" -"3392827392","3392828415","AU","AUS","AUSTRALIA" -"3392828416","3392829439","JP","JPN","JAPAN" -"3392829440","3392830463","IN","IND","INDIA" -"3392830464","3392830719","ID","IDN","INDONESIA" -"3392830720","3392830975","IN","IND","INDIA" -"3392830976","3392831231","TH","THA","THAILAND" -"3392831232","3392831487","IN","IND","INDIA" -"3392831488","3392832511","PG","PNG","PAPUA NEW GUINEA" -"3392832512","3392833535","IN","IND","INDIA" -"3392833536","3392835583","AU","AUS","AUSTRALIA" -"3392835584","3392839679","JP","JPN","JAPAN" -"3392839680","3392845823","ID","IDN","INDONESIA" -"3392845824","3392847871","HK","HKG","HONG KONG" -"3392847872","3392856063","ID","IDN","INDONESIA" -"3392856064","3392857087","AU","AUS","AUSTRALIA" -"3392857088","3392857343","IN","IND","INDIA" -"3392857344","3392858111","AU","AUS","AUSTRALIA" -"3392858112","3392858623","IN","IND","INDIA" -"3392858624","3392858879","JP","JPN","JAPAN" -"3392858880","3392859135","AU","AUS","AUSTRALIA" -"3392859136","3392859647","PH","PHL","PHILIPPINES" -"3392859648","3392860159","ID","IDN","INDONESIA" -"3392860160","3392860671","AU","AUS","AUSTRALIA" -"3392860672","3392861183","ID","IDN","INDONESIA" -"3392861184","3392861439","TH","THA","THAILAND" -"3392861440","3392861695","VN","VNM","VIET NAM" -"3392861696","3392864255","AU","AUS","AUSTRALIA" -"3392864256","3392864511","TO","TON","TONGA" -"3392864512","3392864767","AU","AUS","AUSTRALIA" -"3392864768","3392865279","IN","IND","INDIA" -"3392865280","3392866303","NU","NIU","NIUE" -"3392866304","3392880639","AU","AUS","AUSTRALIA" -"3392880640","3392888831","PK","PAK","PAKISTAN" -"3392888832","3392892927","AU","AUS","AUSTRALIA" -"3392892928","3392897023","JP","JPN","JAPAN" -"3392897024","3392901119","BD","BGD","BANGLADESH" -"3392901120","3392903167","JP","JPN","JAPAN" -"3392903168","3392905215","HK","HKG","HONG KONG" -"3392905216","3392909311","ID","IDN","INDONESIA" -"3392909312","3392913407","JP","JPN","JAPAN" -"3392913408","3392917503","ID","IDN","INDONESIA" -"3392917504","3392918527","BD","BGD","BANGLADESH" -"3392918528","3392929791","AU","AUS","AUSTRALIA" -"3392929792","3392931839","MU","MUS","MAURITIUS" -"3392931840","3392933887","PH","PHL","PHILIPPINES" -"3392933888","3392942079","JP","JPN","JAPAN" -"3392942080","3392944127","AU","AUS","AUSTRALIA" -"3392944128","3392945151","MY","MYS","MALAYSIA" -"3392945152","3392946175","IN","IND","INDIA" -"3392946176","3392956415","AU","AUS","AUSTRALIA" -"3392956416","3392958463","VN","VNM","VIET NAM" -"3392958464","3392962559","CN","CHN","CHINA" -"3392962560","3392963583","IN","IND","INDIA" -"3392963584","3392970751","AU","AUS","AUSTRALIA" -"3392970752","3392978943","JP","JPN","JAPAN" -"3392978944","3392983039","TH","THA","THAILAND" -"3392983040","3392987135","IN","IND","INDIA" -"3392987136","3392995327","HK","HKG","HONG KONG" -"3392995328","3392995583","PG","PNG","PAPUA NEW GUINEA" -"3392995584","3392995839","JP","JPN","JAPAN" -"3392995840","3392996351","NZ","NZL","NEW ZEALAND" -"3392996352","3392997375","AU","AUS","AUSTRALIA" -"3392997376","3392998399","IN","IND","INDIA" -"3392998400","3392999423","AU","AUS","AUSTRALIA" -"3392999424","3393003519","JP","JPN","JAPAN" -"3393003520","3393011711","PK","PAK","PAKISTAN" -"3393011712","3393060863","AU","AUS","AUSTRALIA" -"3393060864","3393062911","FJ","FJI","FIJI" -"3393062912","3393069055","ID","IDN","INDONESIA" -"3393069056","3393077247","AU","AUS","AUSTRALIA" -"3393077248","3393085439","IN","IND","INDIA" -"3393085440","3393089535","LA","LAO","LAO PEOPLE'S DEMOCRATIC REPUBLIC" -"3393089536","3393090559","AU","AUS","AUSTRALIA" -"3393090560","3393091071","IN","IND","INDIA" -"3393091072","3393093631","FJ","FJI","FIJI" -"3393093632","3393101823","AU","AUS","AUSTRALIA" -"3393101824","3393110015","JP","JPN","JAPAN" -"3393110016","3393118207","HK","HKG","HONG KONG" -"3393118208","3393122303","IN","IND","INDIA" -"3393122304","3393123327","AU","AUS","AUSTRALIA" -"3393123328","3393123583","IN","IND","INDIA" -"3393123584","3393123839","NZ","NZL","NEW ZEALAND" -"3393123840","3393124351","IN","IND","INDIA" -"3393124352","3393125631","AU","AUS","AUSTRALIA" -"3393125632","3393125887","JP","JPN","JAPAN" -"3393125888","3393126399","AU","AUS","AUSTRALIA" -"3393126400","3393134591","HK","HKG","HONG KONG" -"3393134592","3393146879","AU","AUS","AUSTRALIA" -"3393146880","3393150975","PK","PAK","PAKISTAN" -"3393150976","3393159167","IN","IND","INDIA" -"3393159168","3393167359","SG","SGP","SINGAPORE" -"3393167360","3393175551","IN","IND","INDIA" -"3393175552","3393183743","PK","PAK","PAKISTAN" -"3393183744","3393187839","SG","SGP","SINGAPORE" -"3393187840","3393189887","NP","NPL","NEPAL" -"3393189888","3393190911","CN","CHN","CHINA" -"3393190912","3393191423","IN","IND","INDIA" -"3393191424","3393191935","SB","SLB","SOLOMON ISLANDS" -"3393191936","3393257471","HK","HKG","HONG KONG" -"3393257472","3393260031","AU","AUS","AUSTRALIA" -"3393260032","3393260543","BD","BGD","BANGLADESH" -"3393260544","3393265663","AU","AUS","AUSTRALIA" -"3393265664","3393273855","CK","COK","COOK ISLANDS" -"3393273856","3393282047","AU","AUS","AUSTRALIA" -"3393282048","3393286143","HK","HKG","HONG KONG" -"3393286144","3393290239","ID","IDN","INDONESIA" -"3393290240","3393298431","IN","IND","INDIA" -"3393298432","3393300479","NZ","NZL","NEW ZEALAND" -"3393300480","3393302527","BD","BGD","BANGLADESH" -"3393302528","3393306623","PH","PHL","PHILIPPINES" -"3393306624","3393314815","HK","HKG","HONG KONG" -"3393314816","3393318911","ID","IDN","INDONESIA" -"3393318912","3393320959","SG","SGP","SINGAPORE" -"3393320960","3393355775","HK","HKG","HONG KONG" -"3393355776","3393372159","AU","AUS","AUSTRALIA" -"3393372160","3393389567","HK","HKG","HONG KONG" -"3393389568","3393390591","IN","IND","INDIA" -"3393390592","3393392639","ID","IDN","INDONESIA" -"3393392640","3393396735","JP","JPN","JAPAN" -"3393396736","3393400831","ID","IDN","INDONESIA" -"3393400832","3393404927","JP","JPN","JAPAN" -"3393404928","3393421311","AU","AUS","AUSTRALIA" -"3393421312","3393470463","HK","HKG","HONG KONG" -"3393470464","3393474559","AU","AUS","AUSTRALIA" -"3393474560","3393478655","NZ","NZL","NEW ZEALAND" -"3393478656","3393486847","AU","AUS","AUSTRALIA" -"3393486848","3393495039","IN","IND","INDIA" -"3393495040","3393499135","AU","AUS","AUSTRALIA" -"3393499136","3393503231","SG","SGP","SINGAPORE" -"3393503232","3393507327","HK","HKG","HONG KONG" -"3393507328","3393511423","SG","SGP","SINGAPORE" -"3393511424","3393519615","KR","KOR","REPUBLIC OF KOREA" -"3393519616","3393520639","HK","HKG","HONG KONG" -"3393520640","3393521663","CN","CHN","CHINA" -"3393521664","3393523711","PK","PAK","PAKISTAN" -"3393523712","3393527807","CN","CHN","CHINA" -"3393527808","3393535999","PK","PAK","PAKISTAN" -"3393536000","3393544191","HK","HKG","HONG KONG" -"3393544192","3393548287","ID","IDN","INDONESIA" -"3393548288","3393552383","JP","JPN","JAPAN" -"3393552384","3393553407","HK","HKG","HONG KONG" -"3393553408","3393554431","AU","AUS","AUSTRALIA" -"3393554432","3393556479","TH","THA","THAILAND" -"3393556480","3393560575","SG","SGP","SINGAPORE" -"3393560576","3393568767","PH","PHL","PHILIPPINES" -"3393568768","3393572863","LK","LKA","SRI LANKA" -"3393572864","3393576959","AU","AUS","AUSTRALIA" -"3393576960","3393581055","JP","JPN","JAPAN" -"3393581056","3393585151","HK","HKG","HONG KONG" -"3393585152","3393593343","CN","CHN","CHINA" -"3393593344","3393597439","MN","MNG","MONGOLIA" -"3393597440","3393601535","ID","IDN","INDONESIA" -"3393601536","3393609727","NP","NPL","NEPAL" -"3393609728","3393613823","AU","AUS","AUSTRALIA" -"3393613824","3393617919","AS","ASM","AMERICAN SAMOA" -"3393617920","3393618431","AU","AUS","AUSTRALIA" -"3393618432","3393618687","NZ","NZL","NEW ZEALAND" -"3393618688","3393618943","IN","IND","INDIA" -"3393618944","3393620223","ID","IDN","INDONESIA" -"3393620224","3393620479","AU","AUS","AUSTRALIA" -"3393620480","3393620735","ID","IDN","INDONESIA" -"3393620736","3393620991","AU","AUS","AUSTRALIA" -"3393620992","3393621247","JP","JPN","JAPAN" -"3393621248","3393622015","AU","AUS","AUSTRALIA" -"3393622016","3393626111","PK","PAK","PAKISTAN" -"3393626112","3393626367","HK","HKG","HONG KONG" -"3393626368","3393630207","CN","CHN","CHINA" -"3393630208","3393634303","JP","JPN","JAPAN" -"3393634304","3393638399","IN","IND","INDIA" -"3393638400","3393650687","JP","JPN","JAPAN" -"3393650688","3393658879","AU","AUS","AUSTRALIA" -"3393658880","3393662975","KH","KHM","CAMBODIA" -"3393662976","3393675263","JP","JPN","JAPAN" -"3393675264","3393679359","MY","MYS","MALAYSIA" -"3393679360","3393683455","TH","THA","THAILAND" -"3393683456","3393691647","IN","IND","INDIA" -"3393691648","3393695743","AU","AUS","AUSTRALIA" -"3393695744","3393699839","PH","PHL","PHILIPPINES" -"3393699840","3393724415","HK","HKG","HONG KONG" -"3393724416","3393728511","AU","AUS","AUSTRALIA" -"3393728512","3393736703","JP","JPN","JAPAN" -"3393736704","3393740799","AU","AUS","AUSTRALIA" -"3393740800","3393741055","KH","KHM","CAMBODIA" -"3393741056","3393741311","BD","BGD","BANGLADESH" -"3393741312","3393741567","NP","NPL","NEPAL" -"3393741568","3393741575","BD","BGD","BANGLADESH" -"3393741576","3393741791","US","USA","UNITED STATES" -"3393741792","3393741823","MG","MDG","MADAGASCAR" -"3393741824","3393742847","SC","SYC","SEYCHELLES" -"3393742848","3393743871","TL","TLS","TIMOR-LESTE" -"3393743872","3393744127","US","USA","UNITED STATES" -"3393744128","3393744143","TK","TKL","TOKELAU" -"3393744144","3393744159","US","USA","UNITED STATES" -"3393744160","3393744175","TK","TKL","TOKELAU" -"3393744176","3393744383","US","USA","UNITED STATES" -"3393744384","3393744415","SC","SYC","SEYCHELLES" -"3393744416","3393744447","US","USA","UNITED STATES" -"3393744448","3393744479","MG","MDG","MADAGASCAR" -"3393744480","3393744511","BD","BGD","BANGLADESH" -"3393744512","3393744639","US","USA","UNITED STATES" -"3393744640","3393744895","KH","KHM","CAMBODIA" -"3393744896","3393748991","PH","PHL","PHILIPPINES" -"3393748992","3393765375","AU","AUS","AUSTRALIA" -"3393765376","3393773567","ID","IDN","INDONESIA" -"3393773568","3393775615","AU","AUS","AUSTRALIA" -"3393775616","3393777663","BD","BGD","BANGLADESH" -"3393777664","3393779711","MN","MNG","MONGOLIA" -"3393779712","3393780735","IN","IND","INDIA" -"3393780736","3393782783","HK","HKG","HONG KONG" -"3393782784","3393783807","BD","BGD","BANGLADESH" -"3393783808","3393785855","MY","MYS","MALAYSIA" -"3393785856","3393789951","ID","IDN","INDONESIA" -"3393789952","3393798143","SG","SGP","SINGAPORE" -"3393798144","3393806335","JP","JPN","JAPAN" -"3393806336","3393814527","ID","IDN","INDONESIA" -"3393814528","3393815551","AU","AUS","AUSTRALIA" -"3393815552","3393816575","KR","KOR","REPUBLIC OF KOREA" -"3393816576","3393818623","JP","JPN","JAPAN" -"3393818624","3393822719","AU","AUS","AUSTRALIA" -"3393822720","3393830911","PH","PHL","PHILIPPINES" -"3393830912","3393835007","NZ","NZL","NEW ZEALAND" -"3393835008","3393839103","JP","JPN","JAPAN" -"3393839104","3393843199","ID","IDN","INDONESIA" -"3393843200","3393848319","HK","HKG","HONG KONG" -"3393848320","3393849343","JP","JPN","JAPAN" -"3393849344","3393851391","CN","CHN","CHINA" -"3393851392","3393855487","JP","JPN","JAPAN" -"3393855488","3393865727","AU","AUS","AUSTRALIA" -"3393865728","3393867775","ID","IDN","INDONESIA" -"3393867776","3393871871","AU","AUS","AUSTRALIA" -"3393871872","3393880063","HK","HKG","HONG KONG" -"3393880064","3393896447","AU","AUS","AUSTRALIA" -"3393896448","3393906687","NZ","NZL","NEW ZEALAND" -"3393906688","3393908735","AU","AUS","AUSTRALIA" -"3393908736","3393910783","BD","BGD","BANGLADESH" -"3393910784","3393911807","PH","PHL","PHILIPPINES" -"3393911808","3393912063","AU","AUS","AUSTRALIA" -"3393912064","3393912319","JP","JPN","JAPAN" -"3393912320","3393913855","HK","HKG","HONG KONG" -"3393913856","3393914879","MY","MYS","MALAYSIA" -"3393914880","3393916927","JP","JPN","JAPAN" -"3393916928","3393921023","ID","IDN","INDONESIA" -"3393921024","3393929215","MY","MYS","MALAYSIA" -"3393929216","3393937407","HK","HKG","HONG KONG" -"3393937408","3393941503","ID","IDN","INDONESIA" -"3393941504","3393945599","JP","JPN","JAPAN" -"3393945600","3393961983","MY","MYS","MALAYSIA" -"3393961984","3393966079","IN","IND","INDIA" -"3393966080","3393970175","CN","CHN","CHINA" -"3393970176","3393974271","JP","JPN","JAPAN" -"3393974272","3393976319","SG","SGP","SINGAPORE" -"3393976320","3393977343","MO","MAC","MACAO" -"3393977344","3394011135","HK","HKG","HONG KONG" -"3394011136","3394027519","AU","AUS","AUSTRALIA" -"3394027520","3394035711","JP","JPN","JAPAN" -"3394035712","3394039807","MY","MYS","MALAYSIA" -"3394039808","3394041855","US","USA","UNITED STATES" -"3394041856","3394042879","AU","AUS","AUSTRALIA" -"3394042880","3394060287","HK","HKG","HONG KONG" -"3394060288","3394064383","ID","IDN","INDONESIA" -"3394064384","3394068479","AU","AUS","AUSTRALIA" -"3394068480","3394076671","ID","IDN","INDONESIA" -"3394076672","3394078719","HK","HKG","HONG KONG" -"3394078720","3394078975","AU","AUS","AUSTRALIA" -"3394078976","3394079231","IN","IND","INDIA" -"3394079232","3394079743","AU","AUS","AUSTRALIA" -"3394079744","3394087471","HK","HKG","HONG KONG" -"3394087472","3394087487","CN","CHN","CHINA" -"3394087488","3394111487","HK","HKG","HONG KONG" -"3394111488","3394113535","AU","AUS","AUSTRALIA" -"3394113536","3394117631","SG","SGP","SINGAPORE" -"3394117632","3394121727","AU","AUS","AUSTRALIA" -"3394121728","3394125823","SG","SGP","SINGAPORE" -"3394125824","3394142207","PH","PHL","PHILIPPINES" -"3394142208","3394150399","NZ","NZL","NEW ZEALAND" -"3394150400","3394154495","IN","IND","INDIA" -"3394154496","3394158591","JP","JPN","JAPAN" -"3394158592","3394162687","ID","IDN","INDONESIA" -"3394162688","3394166783","JP","JPN","JAPAN" -"3394166784","3394168831","VN","VNM","VIET NAM" -"3394168832","3394170879","IN","IND","INDIA" -"3394170880","3394172927","NZ","NZL","NEW ZEALAND" -"3394172928","3394173695","JP","JPN","JAPAN" -"3394173696","3394173951","IN","IND","INDIA" -"3394173952","3394174975","HK","HKG","HONG KONG" -"3394174976","3394179071","JP","JPN","JAPAN" -"3394179072","3394181119","BD","BGD","BANGLADESH" -"3394181120","3394183167","KH","KHM","CAMBODIA" -"3394183168","3394191359","NP","NPL","NEPAL" -"3394191360","3394207743","SG","SGP","SINGAPORE" -"3394207744","3394215935","JP","JPN","JAPAN" -"3394215936","3394220031","AU","AUS","AUSTRALIA" -"3394220032","3394232319","SG","SGP","SINGAPORE" -"3394232320","3394234367","AU","AUS","AUSTRALIA" -"3394234368","3394236415","VN","VNM","VIET NAM" -"3394236416","3394238463","JP","JPN","JAPAN" -"3394238464","3394239487","AU","AUS","AUSTRALIA" -"3394239488","3394248703","HK","HKG","HONG KONG" -"3394248704","3394252799","VU","VUT","VANUATU" -"3394252800","3394256895","IN","IND","INDIA" -"3394256896","3394265087","AU","AUS","AUSTRALIA" -"3394265088","3394267135","JP","JPN","JAPAN" -"3394267136","3394269183","TW","TWN","TAIWAN" -"3394269184","3394273279","ID","IDN","INDONESIA" -"3394273280","3394277375","HK","HKG","HONG KONG" -"3394277376","3394279423","AU","AUS","AUSTRALIA" -"3394279424","3394281471","PH","PHL","PHILIPPINES" -"3394281472","3394285567","SG","SGP","SINGAPORE" -"3394285568","3394289663","AU","AUS","AUSTRALIA" -"3394289664","3394290687","HK","HKG","HONG KONG" -"3394290688","3394293759","AU","AUS","AUSTRALIA" -"3394293760","3394297855","ID","IDN","INDONESIA" -"3394297856","3394306047","TH","THA","THAILAND" -"3394306048","3394307071","HK","HKG","HONG KONG" -"3394307072","3394308095","SG","SGP","SINGAPORE" -"3394308096","3394310143","JP","JPN","JAPAN" -"3394310144","3394314239","AU","AUS","AUSTRALIA" -"3394314240","3394322431","ID","IDN","INDONESIA" -"3394322432","3394326527","AU","AUS","AUSTRALIA" -"3394326528","3394330623","JP","JPN","JAPAN" -"3394330624","3394338815","AU","AUS","AUSTRALIA" -"3394338816","3394347007","IN","IND","INDIA" -"3394347008","3394355199","PH","PHL","PHILIPPINES" -"3394355200","3394359295","IN","IND","INDIA" -"3394359296","3394363391","AU","AUS","AUSTRALIA" -"3394363392","3394437119","HK","HKG","HONG KONG" -"3394437120","3394438143","AU","AUS","AUSTRALIA" -"3394438144","3394441215","HK","HKG","HONG KONG" -"3394441216","3394453503","IN","IND","INDIA" -"3394453504","3394461695","AU","AUS","AUSTRALIA" -"3394461696","3394465791","SG","SGP","SINGAPORE" -"3394465792","3394467839","AU","AUS","AUSTRALIA" -"3394467840","3394469887","MY","MYS","MALAYSIA" -"3394469888","3394478079","JP","JPN","JAPAN" -"3394478080","3394482175","PK","PAK","PAKISTAN" -"3394482176","3394484223","AU","AUS","AUSTRALIA" -"3394484224","3394486271","JP","JPN","JAPAN" -"3394486272","3394494463","HK","HKG","HONG KONG" -"3394494464","3394498559","JP","JPN","JAPAN" -"3394498560","3394500607","HK","HKG","HONG KONG" -"3394500608","3394501631","SG","SGP","SINGAPORE" -"3394501632","3394503679","HK","HKG","HONG KONG" -"3394503680","3394506751","AU","AUS","AUSTRALIA" -"3394506752","3394507263","HK","HKG","HONG KONG" -"3394507264","3394507775","JP","JPN","JAPAN" -"3394507776","3394508799","PH","PHL","PHILIPPINES" -"3394508800","3394510847","AU","AUS","AUSTRALIA" -"3394510848","3394514943","BD","BGD","BANGLADESH" -"3394514944","3394519039","JP","JPN","JAPAN" -"3394519040","3394521087","BD","BGD","BANGLADESH" -"3394521088","3394523135","KH","KHM","CAMBODIA" -"3394523136","3394527231","JP","JPN","JAPAN" -"3394527232","3394535423","PH","PHL","PHILIPPINES" -"3394535424","3394565631","HK","HKG","HONG KONG" -"3394565632","3394565887","PK","PAK","PAKISTAN" -"3394565888","3394621439","HK","HKG","HONG KONG" -"3394621440","3394625535","CN","CHN","CHINA" -"3394625536","3394629631","HK","HKG","HONG KONG" -"3394629632","3394631679","AU","AUS","AUSTRALIA" -"3394631680","3394634751","HK","HKG","HONG KONG" -"3394634752","3394635775","IN","IND","INDIA" -"3394635776","3394637823","KR","KOR","REPUBLIC OF KOREA" -"3394637824","3394641919","AF","AFG","AFGHANISTAN" -"3394641920","3394648063","AU","AUS","AUSTRALIA" -"3394648064","3394650111","JP","JPN","JAPAN" -"3394650112","3394658303","HK","HKG","HONG KONG" -"3394658304","3394662399","NZ","NZL","NEW ZEALAND" -"3394662400","3394664447","AU","AUS","AUSTRALIA" -"3394664448","3394666495","JP","JPN","JAPAN" -"3394666496","3394682367","MO","MAC","MACAO" -"3394682368","3394682879","HK","HKG","HONG KONG" -"3394682880","3394686975","PH","PHL","PHILIPPINES" -"3394686976","3394689023","AU","AUS","AUSTRALIA" -"3394689024","3394691071","BD","BGD","BANGLADESH" -"3394691072","3394697215","JP","JPN","JAPAN" -"3394697216","3394697471","SG","SGP","SINGAPORE" -"3394697472","3394697983","AU","AUS","AUSTRALIA" -"3394697984","3394698239","IN","IND","INDIA" -"3394698240","3394699263","AU","AUS","AUSTRALIA" -"3394699264","3394700287","HK","HKG","HONG KONG" -"3394700288","3394707455","AU","AUS","AUSTRALIA" -"3394707456","3394715647","IN","IND","INDIA" -"3394715648","3394719743","JP","JPN","JAPAN" -"3394719744","3394732031","AU","AUS","AUSTRALIA" -"3394732032","3394740223","NC","NCL","NEW CALEDONIA" -"3394740224","3394744319","AU","AUS","AUSTRALIA" -"3394744320","3394752511","ID","IDN","INDONESIA" -"3394752512","3394753535","WS","WSM","SAMOA" -"3394753536","3394754559","VN","VNM","VIET NAM" -"3394754560","3394756607","MY","MYS","MALAYSIA" -"3394756608","3394760703","JP","JPN","JAPAN" -"3394760704","3394764799","ID","IDN","INDONESIA" -"3394764800","3394772991","HK","HKG","HONG KONG" -"3394772992","3394777087","PK","PAK","PAKISTAN" -"3394777088","3394781183","JP","JPN","JAPAN" -"3394781184","3394789375","MP","MNP","NORTHERN MARIANA ISLANDS" -"3394789376","3394797567","HK","HKG","HONG KONG" -"3394797568","3394813951","IN","IND","INDIA" -"3394813952","3394815999","JP","JPN","JAPAN" -"3394816000","3394818047","HK","HKG","HONG KONG" -"3394818048","3394830335","IN","IND","INDIA" -"3394830336","3394831359","HK","HKG","HONG KONG" -"3394831360","3394832383","NZ","NZL","NEW ZEALAND" -"3394832384","3394834431","AU","AUS","AUSTRALIA" -"3394834432","3394834687","HK","HKG","HONG KONG" -"3394834688","3394834943","JP","JPN","JAPAN" -"3394834944","3394834959","HK","HKG","HONG KONG" -"3394834960","3394834975","JP","JPN","JAPAN" -"3394834976","3394835199","HK","HKG","HONG KONG" -"3394835200","3394835455","JP","JPN","JAPAN" -"3394835456","3394835583","SG","SGP","SINGAPORE" -"3394835584","3394835711","JP","JPN","JAPAN" -"3394835712","3394835967","CN","CHN","CHINA" -"3394835968","3394836239","JP","JPN","JAPAN" -"3394836240","3394836247","AS","ASM","AMERICAN SAMOA" -"3394836248","3394836479","JP","JPN","JAPAN" -"3394836480","3394838527","BT","BTN","BHUTAN" -"3394838528","3394846719","NZ","NZL","NEW ZEALAND" -"3394846720","3394850815","IN","IND","INDIA" -"3394850816","3394854911","JP","JPN","JAPAN" -"3394854912","3394855935","PH","PHL","PHILIPPINES" -"3394855936","3394856959","AU","AUS","AUSTRALIA" -"3394856960","3394859007","IN","IND","INDIA" -"3394859008","3394860031","JP","JPN","JAPAN" -"3394860032","3394860543","ID","IDN","INDONESIA" -"3394860544","3394861055","IN","IND","INDIA" -"3394861056","3394861311","KR","KOR","REPUBLIC OF KOREA" -"3394861312","3394862079","TW","TWN","TAIWAN" -"3394862080","3394863103","KR","KOR","REPUBLIC OF KOREA" -"3394863104","3394871295","NZ","NZL","NEW ZEALAND" -"3394871296","3394879487","AU","AUS","AUSTRALIA" -"3394879488","3394883583","PH","PHL","PHILIPPINES" -"3394883584","3394887679","ID","IDN","INDONESIA" -"3394887680","3394893823","JP","JPN","JAPAN" -"3394893824","3394894847","KR","KOR","REPUBLIC OF KOREA" -"3394894848","3394895871","HK","HKG","HONG KONG" -"3394895872","3394896895","CN","CHN","CHINA" -"3394896896","3394897919","TH","THA","THAILAND" -"3394897920","3394899967","JP","JPN","JAPAN" -"3394899968","3394904063","SG","SGP","SINGAPORE" -"3394904064","3394905087","AU","AUS","AUSTRALIA" -"3394905088","3394905343","BN","BRN","BRUNEI DARUSSALAM" -"3394905344","3394912255","AU","AUS","AUSTRALIA" -"3394912256","3394920447","PF","PYF","FRENCH POLYNESIA" -"3394920448","3394924543","IN","IND","INDIA" -"3394924544","3394928639","TH","THA","THAILAND" -"3394928640","3394936831","PH","PHL","PHILIPPINES" -"3394936832","3394940927","AU","AUS","AUSTRALIA" -"3394940928","3394945023","JP","JPN","JAPAN" -"3394945024","3394945279","IN","IND","INDIA" -"3394945280","3394945535","AU","AUS","AUSTRALIA" -"3394945536","3394946047","ID","IDN","INDONESIA" -"3394946048","3394946559","AU","AUS","AUSTRALIA" -"3394946560","3394947071","ID","IDN","INDONESIA" -"3394947072","3394948095","BD","BGD","BANGLADESH" -"3394948096","3394948351","IN","IND","INDIA" -"3394948352","3394948607","PH","PHL","PHILIPPINES" -"3394948608","3394949119","AU","AUS","AUSTRALIA" -"3394949120","3394953215","JP","JPN","JAPAN" -"3394953216","3394957311","CN","CHN","CHINA" -"3394957312","3394959359","AU","AUS","AUSTRALIA" -"3394959360","3394960383","HK","HKG","HONG KONG" -"3394960384","3394962431","CN","CHN","CHINA" -"3394962432","3394963455","AU","AUS","AUSTRALIA" -"3394963456","3394965503","ID","IDN","INDONESIA" -"3394965504","3394967551","TH","THA","THAILAND" -"3394967552","3394969599","ID","IDN","INDONESIA" -"3394969600","3394973695","SG","SGP","SINGAPORE" -"3394973696","3394977791","JP","JPN","JAPAN" -"3394977792","3394985983","IN","IND","INDIA" -"3394985984","3394990079","AU","AUS","AUSTRALIA" -"3394990080","3394994175","JP","JPN","JAPAN" -"3394994176","3394995199","CN","CHN","CHINA" -"3394995200","3394998271","IN","IND","INDIA" -"3394998272","3395002367","JP","JPN","JAPAN" -"3395002368","3395006463","PH","PHL","PHILIPPINES" -"3395006464","3395010559","CN","CHN","CHINA" -"3395010560","3395014655","AU","AUS","AUSTRALIA" -"3395014656","3395018751","JP","JPN","JAPAN" -"3395018752","3395027967","CN","CHN","CHINA" -"3395027968","3395028991","VN","VNM","VIET NAM" -"3395028992","3395031039","AU","AUS","AUSTRALIA" -"3395031040","3395035135","PK","PAK","PAKISTAN" -"3395035136","3395059711","AU","AUS","AUSTRALIA" -"3395059712","3395067903","PH","PHL","PHILIPPINES" -"3395067904","3395076095","HK","HKG","HONG KONG" -"3395076096","3395080191","ID","IDN","INDONESIA" -"3395080192","3395084287","AU","AUS","AUSTRALIA" -"3395084288","3395088383","IN","IND","INDIA" -"3395088384","3395091455","AU","AUS","AUSTRALIA" -"3395091456","3395093503","CN","CHN","CHINA" -"3395093504","3395094015","AU","AUS","AUSTRALIA" -"3395094016","3395094527","KR","KOR","REPUBLIC OF KOREA" -"3395094528","3395096575","KH","KHM","CAMBODIA" -"3395096576","3395104767","ID","IDN","INDONESIA" -"3395104768","3395108863","TH","THA","THAILAND" -"3395108864","3395117055","JP","JPN","JAPAN" -"3395117056","3395121151","AU","AUS","AUSTRALIA" -"3395121152","3395129343","ID","IDN","INDONESIA" -"3395129344","3395131391","JP","JPN","JAPAN" -"3395131392","3395131647","AU","AUS","AUSTRALIA" -"3395131648","3395131903","KH","KHM","CAMBODIA" -"3395131904","3395132159","IN","IND","INDIA" -"3395132160","3395132415","AU","AUS","AUSTRALIA" -"3395132416","3395133439","VN","VNM","VIET NAM" -"3395133440","3395141631","AU","AUS","AUSTRALIA" -"3395141632","3395145727","HK","HKG","HONG KONG" -"3395145728","3395149823","BN","BRN","BRUNEI DARUSSALAM" -"3395149824","3395155967","ID","IDN","INDONESIA" -"3395155968","3395156991","AU","AUS","AUSTRALIA" -"3395156992","3395158015","CN","CHN","CHINA" -"3395158016","3395170303","AU","AUS","AUSTRALIA" -"3395170304","3395174399","JP","JPN","JAPAN" -"3395174400","3395182591","AU","AUS","AUSTRALIA" -"3395182592","3395190783","SG","SGP","SINGAPORE" -"3395190784","3395198975","JP","JPN","JAPAN" -"3395198976","3395203071","MY","MYS","MALAYSIA" -"3395203072","3395215359","JP","JPN","JAPAN" -"3395215360","3395219455","HK","HKG","HONG KONG" -"3395219456","3395223551","TH","THA","THAILAND" -"3395223552","3395231743","CN","CHN","CHINA" -"3395231744","3395239935","JP","JPN","JAPAN" -"3395239936","3395254751","SG","SGP","SINGAPORE" -"3395254752","3395254767","JP","JPN","JAPAN" -"3395254768","3395256319","SG","SGP","SINGAPORE" -"3395256320","3395264511","ID","IDN","INDONESIA" -"3395264512","3395272703","JP","JPN","JAPAN" -"3395272704","3395276799","PG","PNG","PAPUA NEW GUINEA" -"3395276800","3395280895","JP","JPN","JAPAN" -"3395280896","3395284991","PH","PHL","PHILIPPINES" -"3395284992","3395287039","AU","AUS","AUSTRALIA" -"3395287040","3395287551","JP","JPN","JAPAN" -"3395287552","3395287807","NZ","NZL","NEW ZEALAND" -"3395287808","3395288063","IN","IND","INDIA" -"3395288064","3396868319","CN","CHN","CHINA" -"3396868320","3396868351","SG","SGP","SINGAPORE" -"3396868352","3396995071","CN","CHN","CHINA" -"3396995072","3396997119","ID","IDN","INDONESIA" -"3396997120","3396999167","IN","IND","INDIA" -"3396999168","3397001215","JP","JPN","JAPAN" -"3397001216","3397003263","CN","CHN","CHINA" -"3397003264","3397005311","TH","THA","THAILAND" -"3397005312","3397009407","JP","JPN","JAPAN" -"3397009408","3397017599","CN","CHN","CHINA" -"3397017600","3397021695","HK","HKG","HONG KONG" -"3397021696","3397023743","CN","CHN","CHINA" -"3397023744","3397025791","AU","AUS","AUSTRALIA" -"3397025792","3397026047","CN","CHN","CHINA" -"3397026048","3397026303","AU","AUS","AUSTRALIA" -"3397026304","3397026815","TH","THA","THAILAND" -"3397026816","3397027071","AU","AUS","AUSTRALIA" -"3397027072","3397027327","PH","PHL","PHILIPPINES" -"3397027328","3397027839","IN","IND","INDIA" -"3397027840","3397029887","JP","JPN","JAPAN" -"3397029888","3397033983","MY","MYS","MALAYSIA" -"3397033984","3397038079","ID","IDN","INDONESIA" -"3397038080","3397058559","JP","JPN","JAPAN" -"3397058560","3397066751","AU","AUS","AUSTRALIA" -"3397066752","3397070847","IN","IND","INDIA" -"3397070848","3397074943","PH","PHL","PHILIPPINES" -"3397074944","3397083135","HK","HKG","HONG KONG" -"3397083136","3397087231","CN","CHN","CHINA" -"3397087232","3397091327","JP","JPN","JAPAN" -"3397091328","3397099519","GU","GUM","GUAM" -"3397099520","3397103615","HK","HKG","HONG KONG" -"3397103616","3397105663","LA","LAO","LAO PEOPLE'S DEMOCRATIC REPUBLIC" -"3397105664","3397107711","JP","JPN","JAPAN" -"3397107712","3397115903","HK","HKG","HONG KONG" -"3397115904","3397119999","ID","IDN","INDONESIA" -"3397120000","3397124095","PK","PAK","PAKISTAN" -"3397124096","3397128191","JP","JPN","JAPAN" -"3397128192","3397131263","AU","AUS","AUSTRALIA" -"3397131264","3397132287","HK","HKG","HONG KONG" -"3397132288","3397136383","AU","AUS","AUSTRALIA" -"3397136384","3397140479","JP","JPN","JAPAN" -"3397140480","3397148671","AU","AUS","AUSTRALIA" -"3397148672","3397156863","NZ","NZL","NEW ZEALAND" -"3397156864","3397165055","PH","PHL","PHILIPPINES" -"3397165056","3397173247","LK","LKA","SRI LANKA" -"3397173248","3397173503","AU","AUS","AUSTRALIA" -"3397173504","3397173759","PH","PHL","PHILIPPINES" -"3397173760","3397174015","IN","IND","INDIA" -"3397174016","3397177343","AU","AUS","AUSTRALIA" -"3397177344","3397181439","JP","JPN","JAPAN" -"3397181440","3397185535","PW","PLW","PALAU" -"3397185536","3397201919","AU","AUS","AUSTRALIA" -"3397201920","3397206015","JP","JPN","JAPAN" -"3397206016","3397210111","BD","BGD","BANGLADESH" -"3397210112","3397222399","AU","AUS","AUSTRALIA" -"3397222400","3397230591","PK","PAK","PAKISTAN" -"3397230592","3397234687","AU","AUS","AUSTRALIA" -"3397234688","3397238783","CN","CHN","CHINA" -"3397238784","3397255167","HK","HKG","HONG KONG" -"3397255168","3397255607","JP","JPN","JAPAN" -"3397255608","3397255615","SG","SGP","SINGAPORE" -"3397255616","3397255711","JP","JPN","JAPAN" -"3397255712","3397255727","SG","SGP","SINGAPORE" -"3397255728","3397255807","JP","JPN","JAPAN" -"3397255808","3397255823","HK","HKG","HONG KONG" -"3397255824","3397256655","JP","JPN","JAPAN" -"3397256656","3397256671","HK","HKG","HONG KONG" -"3397256672","3397256975","JP","JPN","JAPAN" -"3397256976","3397256983","SG","SGP","SINGAPORE" -"3397256984","3397257327","JP","JPN","JAPAN" -"3397257328","3397257343","SG","SGP","SINGAPORE" -"3397257344","3397257983","JP","JPN","JAPAN" -"3397257984","3397258007","SG","SGP","SINGAPORE" -"3397258008","3397258015","JP","JPN","JAPAN" -"3397258016","3397258063","SG","SGP","SINGAPORE" -"3397258064","3397263359","JP","JPN","JAPAN" -"3397263360","3397267455","PH","PHL","PHILIPPINES" -"3397267456","3397271551","HK","HKG","HONG KONG" -"3397271552","3397275647","TW","TWN","TAIWAN" -"3397275648","3397277695","NZ","NZL","NEW ZEALAND" -"3397277696","3397279743","MN","MNG","MONGOLIA" -"3397279744","3397283839","AU","AUS","AUSTRALIA" -"3397283840","3397285887","KR","KOR","REPUBLIC OF KOREA" -"3397285888","3397287935","BD","BGD","BANGLADESH" -"3397287936","3397304319","SG","SGP","SINGAPORE" -"3397304320","3397308415","NZ","NZL","NEW ZEALAND" -"3397308416","3397312511","HK","HKG","HONG KONG" -"3397312512","3397320703","JP","JPN","JAPAN" -"3397320704","3397322751","CN","CHN","CHINA" -"3397322752","3397323775","NZ","NZL","NEW ZEALAND" -"3397323776","3397328895","CN","CHN","CHINA" -"3397328896","3397330943","ID","IDN","INDONESIA" -"3397330944","3397337087","CN","CHN","CHINA" -"3397337088","3397341183","HK","HKG","HONG KONG" -"3397341184","3397345279","JP","JPN","JAPAN" -"3397345280","3397349375","ID","IDN","INDONESIA" -"3397349376","3397363711","CN","CHN","CHINA" -"3397363712","3397365759","HK","HKG","HONG KONG" -"3397365760","3397369855","JP","JPN","JAPAN" -"3397369856","3397374463","CN","CHN","CHINA" -"3397374464","3397374975","AU","AUS","AUSTRALIA" -"3397374976","3397386239","CN","CHN","CHINA" -"3397386240","3397394431","GU","GUM","GUAM" -"3397394432","3397402623","PH","PHL","PHILIPPINES" -"3397402624","3397410815","GU","GUM","GUAM" -"3397410816","3397419007","AU","AUS","AUSTRALIA" -"3397419008","3397419535","HK","HKG","HONG KONG" -"3397419536","3397419551","KR","KOR","REPUBLIC OF KOREA" -"3397419552","3397419743","HK","HKG","HONG KONG" -"3397419744","3397419759","KR","KOR","REPUBLIC OF KOREA" -"3397419760","3397419871","HK","HKG","HONG KONG" -"3397419872","3397419904","KR","KOR","REPUBLIC OF KOREA" -"3397419905","3397427199","HK","HKG","HONG KONG" -"3397427200","3397443583","SG","SGP","SINGAPORE" -"3397443584","3397451775","HK","HKG","HONG KONG" -"3397451776","3397468159","TH","THA","THAILAND" -"3397468160","3397492735","AU","AUS","AUSTRALIA" -"3397492736","3397496831","MY","MYS","MALAYSIA" -"3397496832","3397498879","JP","JPN","JAPAN" -"3397498880","3397500927","ID","IDN","INDONESIA" -"3397500928","3397501951","BD","BGD","BANGLADESH" -"3397501952","3397503999","IN","IND","INDIA" -"3397504000","3397505023","TH","THA","THAILAND" -"3397505024","3397505279","NZ","NZL","NEW ZEALAND" -"3397505280","3397506559","IN","IND","INDIA" -"3397506560","3397506815","AU","AUS","AUSTRALIA" -"3397506816","3397507071","IN","IND","INDIA" -"3397507072","3397507583","ID","IDN","INDONESIA" -"3397507584","3397507839","AU","AUS","AUSTRALIA" -"3397507840","3397508095","IN","IND","INDIA" -"3397508096","3397509119","PH","PHL","PHILIPPINES" -"3397509120","3397510143","ID","IDN","INDONESIA" -"3397510144","3397511167","FJ","FJI","FIJI" -"3397511168","3397512191","LK","LKA","SRI LANKA" -"3397512192","3397512447","KH","KHM","CAMBODIA" -"3397512448","3397512703","AU","AUS","AUSTRALIA" -"3397512704","3397512959","PH","PHL","PHILIPPINES" -"3397512960","3397513727","IN","IND","INDIA" -"3397513728","3397514239","SG","SGP","SINGAPORE" -"3397514240","3397515263","AU","AUS","AUSTRALIA" -"3397515264","3397516287","NP","NPL","NEPAL" -"3397516288","3397516543","AU","AUS","AUSTRALIA" -"3397516544","3397516799","NZ","NZL","NEW ZEALAND" -"3397516800","3397517055","JP","JPN","JAPAN" -"3397517056","3397517311","AU","AUS","AUSTRALIA" -"3397517312","3397525503","CN","CHN","CHINA" -"3397525504","3397526527","AU","AUS","AUSTRALIA" -"3397526528","3397527039","VN","VNM","VIET NAM" -"3397527040","3397527295","AU","AUS","AUSTRALIA" -"3397527296","3397527551","JP","JPN","JAPAN" -"3397527552","3397528575","IN","IND","INDIA" -"3397528576","3397530623","AU","AUS","AUSTRALIA" -"3397530624","3397531647","ID","IDN","INDONESIA" -"3397531648","3397532671","SG","SGP","SINGAPORE" -"3397532672","3397533695","JP","JPN","JAPAN" -"3397533696","3397555903","HK","HKG","HONG KONG" -"3397555904","3397555935","JP","JPN","JAPAN" -"3397555936","3397566263","HK","HKG","HONG KONG" -"3397566264","3397566271","TW","TWN","TAIWAN" -"3397566272","3397566463","HK","HKG","HONG KONG" -"3397566464","3397574655","AU","AUS","AUSTRALIA" -"3397574656","3397582847","CN","CHN","CHINA" -"3397582848","3397584895","MN","MNG","MONGOLIA" -"3397584896","3397586943","JP","JPN","JAPAN" -"3397586944","3397588991","CN","CHN","CHINA" -"3397588992","3397591039","KR","KOR","REPUBLIC OF KOREA" -"3397591040","3397595135","HK","HKG","HONG KONG" -"3397595136","3397599231","CN","CHN","CHINA" -"3397599232","3397603327","HK","HKG","HONG KONG" -"3397603328","3397605375","KH","KHM","CAMBODIA" -"3397605376","3397607423","AU","AUS","AUSTRALIA" -"3397607424","3397623807","IN","IND","INDIA" -"3397623808","3397631999","GU","GUM","GUAM" -"3397632000","3397636095","JP","JPN","JAPAN" -"3397636096","3397640191","CN","CHN","CHINA" -"3397640192","3397648383","MN","MNG","MONGOLIA" -"3397648384","3397713919","TW","TWN","TAIWAN" -"3397713920","3397715967","ID","IDN","INDONESIA" -"3397715968","3397716431","HK","HKG","HONG KONG" -"3397716432","3397716447","ID","IDN","INDONESIA" -"3397716448","3397716471","HK","HKG","HONG KONG" -"3397716472","3397716479","AF","AFG","AFGHANISTAN" -"3397716480","3397717255","HK","HKG","HONG KONG" -"3397717256","3397717279","AF","AFG","AFGHANISTAN" -"3397717280","3397717287","ID","IDN","INDONESIA" -"3397717288","3397717295","AF","AFG","AFGHANISTAN" -"3397717296","3397717303","HK","HKG","HONG KONG" -"3397717304","3397717311","AF","AFG","AFGHANISTAN" -"3397717312","3397717711","HK","HKG","HONG KONG" -"3397717712","3397717727","BD","BGD","BANGLADESH" -"3397717728","3397718015","HK","HKG","HONG KONG" -"3397718016","3397722111","KR","KOR","REPUBLIC OF KOREA" -"3397722112","3397726207","AU","AUS","AUSTRALIA" -"3397726208","3397730303","IN","IND","INDIA" -"3397730304","3397734399","AU","AUS","AUSTRALIA" -"3397734400","3397738495","ID","IDN","INDONESIA" -"3397738496","3397742591","MY","MYS","MALAYSIA" -"3397742592","3397746687","JP","JPN","JAPAN" -"3397746688","3397763071","TH","THA","THAILAND" -"3397763072","3397771263","PH","PHL","PHILIPPINES" -"3397771264","3397775887","TW","TWN","TAIWAN" -"3397775888","3397775919","HK","HKG","HONG KONG" -"3397775920","3397777535","TW","TWN","TAIWAN" -"3397777536","3397777551","CR","CRI","COSTA RICA" -"3397777552","3397777583","TW","TWN","TAIWAN" -"3397777584","3397777599","CR","CRI","COSTA RICA" -"3397777600","3397777791","TW","TWN","TAIWAN" -"3397777792","3397777807","CR","CRI","COSTA RICA" -"3397777808","3397777839","TW","TWN","TAIWAN" -"3397777840","3397777855","CR","CRI","COSTA RICA" -"3397777856","3397778175","TW","TWN","TAIWAN" -"3397778176","3397778191","US","USA","UNITED STATES" -"3397778192","3397779455","TW","TWN","TAIWAN" -"3397779456","3397781503","ID","IDN","INDONESIA" -"3397781504","3397783551","BD","BGD","BANGLADESH" -"3397783552","3397785599","VN","VNM","VIET NAM" -"3397785600","3397787647","TO","TON","TONGA" -"3397787648","3397791743","AU","AUS","AUSTRALIA" -"3397791744","3397791999","NZ","NZL","NEW ZEALAND" -"3397792000","3397792767","AU","AUS","AUSTRALIA" -"3397792768","3397793023","IN","IND","INDIA" -"3397793024","3397793279","NZ","NZL","NEW ZEALAND" -"3397793280","3397793535","VN","VNM","VIET NAM" -"3397793536","3397793791","HK","HKG","HONG KONG" -"3397793792","3397794303","PH","PHL","PHILIPPINES" -"3397794304","3397794559","AU","AUS","AUSTRALIA" -"3397794560","3397794815","IN","IND","INDIA" -"3397794816","3397812223","HK","HKG","HONG KONG" -"3397812224","3397816319","AU","AUS","AUSTRALIA" -"3397816320","3397832703","IN","IND","INDIA" -"3397832704","3397836799","JP","JPN","JAPAN" -"3397836800","3397844991","AU","AUS","AUSTRALIA" -"3397844992","3397853695","JP","JPN","JAPAN" -"3397853696","3397853951","NZ","NZL","NEW ZEALAND" -"3397853952","3397854207","HK","HKG","HONG KONG" -"3397854208","3397855231","JP","JPN","JAPAN" -"3397855232","3397855239","HK","HKG","HONG KONG" -"3397855240","3397857535","JP","JPN","JAPAN" -"3397857536","3397857791","NZ","NZL","NEW ZEALAND" -"3397857792","3397873407","JP","JPN","JAPAN" -"3397873408","3397873663","NZ","NZL","NEW ZEALAND" -"3397873664","3397881503","JP","JPN","JAPAN" -"3397881504","3397881535","NZ","NZL","NEW ZEALAND" -"3397881536","3397903103","JP","JPN","JAPAN" -"3397903104","3397903359","HK","HKG","HONG KONG" -"3397903360","3397910015","JP","JPN","JAPAN" -"3397910016","3397910271","SG","SGP","SINGAPORE" -"3397910272","3397910527","JP","JPN","JAPAN" -"3397910528","3397918719","SG","SGP","SINGAPORE" -"3397918720","3397922815","AU","AUS","AUSTRALIA" -"3397922816","3397926911","CN","CHN","CHINA" -"3397926912","3397935103","ID","IDN","INDONESIA" -"3397935104","3397939199","AU","AUS","AUSTRALIA" -"3397939200","3397951487","KR","KOR","REPUBLIC OF KOREA" -"3397951488","3397959679","SG","SGP","SINGAPORE" -"3397959680","3397963775","JP","JPN","JAPAN" -"3397963776","3397971967","CN","CHN","CHINA" -"3397971968","3397974015","LA","LAO","LAO PEOPLE'S DEMOCRATIC REPUBLIC" -"3397974016","3397975039","IN","IND","INDIA" -"3397975040","3397976063","AU","AUS","AUSTRALIA" -"3397976064","3397984255","ID","IDN","INDONESIA" -"3397984256","3397992447","JP","JPN","JAPAN" -"3397992448","3398004735","AU","AUS","AUSTRALIA" -"3398004736","3398008831","PH","PHL","PHILIPPINES" -"3398008832","3398017023","LA","LAO","LAO PEOPLE'S DEMOCRATIC REPUBLIC" -"3398017024","3398021119","AU","AUS","AUSTRALIA" -"3398021120","3398023167","FJ","FJI","FIJI" -"3398023168","3398025215","JP","JPN","JAPAN" -"3398025216","3398029311","AU","AUS","AUSTRALIA" -"3398029312","3398033407","IN","IND","INDIA" -"3398033408","3398033663","NZ","NZL","NEW ZEALAND" -"3398033664","3398033919","ID","IDN","INDONESIA" -"3398033920","3398034943","IN","IND","INDIA" -"3398034944","3398035199","ID","IDN","INDONESIA" -"3398035200","3398035455","AU","AUS","AUSTRALIA" -"3398035456","3398037503","IN","IND","INDIA" -"3398037504","3398039551","NZ","NZL","NEW ZEALAND" -"3398039552","3398040575","IN","IND","INDIA" -"3398040576","3398041599","MY","MYS","MALAYSIA" -"3398041600","3398062079","AU","AUS","AUSTRALIA" -"3398062080","3398066175","JP","JPN","JAPAN" -"3398066176","3398074367","IN","IND","INDIA" -"3398074368","3398090751","PH","PHL","PHILIPPINES" -"3398090752","3398098943","AU","AUS","AUSTRALIA" -"3398098944","3398107135","ID","IDN","INDONESIA" -"3398107136","3398156287","AU","AUS","AUSTRALIA" -"3398156288","3398164479","TH","THA","THAILAND" -"3398164480","3398172671","AU","AUS","AUSTRALIA" -"3398172672","3398180863","JP","JPN","JAPAN" -"3398180864","3398189055","IN","IND","INDIA" -"3398189056","3398205439","HK","HKG","HONG KONG" -"3398205440","3398213631","IN","IND","INDIA" -"3398213632","3398221823","AU","AUS","AUSTRALIA" -"3398221824","3398230015","JP","JPN","JAPAN" -"3398230016","3398238207","HK","HKG","HONG KONG" -"3398238208","3398279167","IN","IND","INDIA" -"3398279168","3398287359","CN","CHN","CHINA" -"3398287360","3398291455","JP","JPN","JAPAN" -"3398291456","3398295551","AU","AUS","AUSTRALIA" -"3398295552","3398303743","PK","PAK","PAKISTAN" -"3398303744","3398305791","IN","IND","INDIA" -"3398305792","3398307839","JP","JPN","JAPAN" -"3398307840","3398311935","CN","CHN","CHINA" -"3398311936","3398320127","AU","AUS","AUSTRALIA" -"3398320128","3398336511","IN","IND","INDIA" -"3398336512","3398340607","AU","AUS","AUSTRALIA" -"3398340608","3398352895","PK","PAK","PAKISTAN" -"3398352896","3398361087","TH","THA","THAILAND" -"3398361088","3398369279","JP","JPN","JAPAN" -"3398369280","3398369791","IN","IND","INDIA" -"3398369792","3398370303","JP","JPN","JAPAN" -"3398370304","3398371327","AU","AUS","AUSTRALIA" -"3398371328","3398373375","JP","JPN","JAPAN" -"3398373376","3398377471","CN","CHN","CHINA" -"3398377472","3398385663","AU","AUS","AUSTRALIA" -"3398385664","3398393855","JP","JPN","JAPAN" -"3398393856","3398397951","ID","IDN","INDONESIA" -"3398397952","3398402047","PK","PAK","PAKISTAN" -"3398402048","3398418431","TH","THA","THAILAND" -"3398418432","3398434815","JP","JPN","JAPAN" -"3398434816","3398467583","IN","IND","INDIA" -"3398467584","3398475775","BT","BTN","BHUTAN" -"3398475776","3398481919","AU","AUS","AUSTRALIA" -"3398481920","3398483967","LA","LAO","LAO PEOPLE'S DEMOCRATIC REPUBLIC" -"3398483968","3398488063","MY","MYS","MALAYSIA" -"3398488064","3398492159","TW","TWN","TAIWAN" -"3398492160","3398500351","AU","AUS","AUSTRALIA" -"3398500352","3398504447","ID","IDN","INDONESIA" -"3398504448","3398508543","JP","JPN","JAPAN" -"3398508544","3398565887","TW","TWN","TAIWAN" -"3398565888","3398567423","ID","IDN","INDONESIA" -"3398567424","3398569983","AU","AUS","AUSTRALIA" -"3398569984","3398572031","JP","JPN","JAPAN" -"3398572032","3398574079","AU","AUS","AUSTRALIA" -"3398574080","3398582271","ID","IDN","INDONESIA" -"3398582272","3398590463","MY","MYS","MALAYSIA" -"3398590464","3398598655","HK","HKG","HONG KONG" -"3398598656","3398606847","ID","IDN","INDONESIA" -"3398606848","3398610943","AU","AUS","AUSTRALIA" -"3398610944","3398612991","ID","IDN","INDONESIA" -"3398612992","3398613503","AU","AUS","AUSTRALIA" -"3398613504","3398613759","NZ","NZL","NEW ZEALAND" -"3398613760","3398615039","AU","AUS","AUSTRALIA" -"3398615040","3398616063","IN","IND","INDIA" -"3398616064","3398621183","AU","AUS","AUSTRALIA" -"3398621184","3398623231","HK","HKG","HONG KONG" -"3398623232","3398631423","ID","IDN","INDONESIA" -"3398631424","3398631935","AU","AUS","AUSTRALIA" -"3398631936","3398631951","JP","JPN","JAPAN" -"3398631952","3398631967","AU","AUS","AUSTRALIA" -"3398631968","3398632015","JP","JPN","JAPAN" -"3398632016","3398632023","AU","AUS","AUSTRALIA" -"3398632024","3398632047","JP","JPN","JAPAN" -"3398632048","3398632063","AU","AUS","AUSTRALIA" -"3398632064","3398632143","JP","JPN","JAPAN" -"3398632144","3398632175","AU","AUS","AUSTRALIA" -"3398632176","3398632191","JP","JPN","JAPAN" -"3398632192","3398632255","AU","AUS","AUSTRALIA" -"3398632256","3398632383","JP","JPN","JAPAN" -"3398632384","3398632399","AU","AUS","AUSTRALIA" -"3398632400","3398632575","JP","JPN","JAPAN" -"3398632576","3398632639","AU","AUS","AUSTRALIA" -"3398632640","3398632655","JP","JPN","JAPAN" -"3398632656","3398632671","AU","AUS","AUSTRALIA" -"3398632672","3398632679","JP","JPN","JAPAN" -"3398632680","3398632687","AU","AUS","AUSTRALIA" -"3398632688","3398632703","JP","JPN","JAPAN" -"3398632704","3398632767","AU","AUS","AUSTRALIA" -"3398632768","3398632959","JP","JPN","JAPAN" -"3398632960","3398633983","AU","AUS","AUSTRALIA" -"3398633984","3398634111","KR","KOR","REPUBLIC OF KOREA" -"3398634112","3398634303","AU","AUS","AUSTRALIA" -"3398634304","3398634319","KR","KOR","REPUBLIC OF KOREA" -"3398634320","3398634343","AU","AUS","AUSTRALIA" -"3398634344","3398634367","KR","KOR","REPUBLIC OF KOREA" -"3398634368","3398634399","AU","AUS","AUSTRALIA" -"3398634400","3398634415","KR","KOR","REPUBLIC OF KOREA" -"3398634416","3398634431","AU","AUS","AUSTRALIA" -"3398634432","3398634447","KR","KOR","REPUBLIC OF KOREA" -"3398634448","3398634463","AU","AUS","AUSTRALIA" -"3398634464","3398634479","KR","KOR","REPUBLIC OF KOREA" -"3398634480","3398634495","AU","AUS","AUSTRALIA" -"3398634496","3398634527","KR","KOR","REPUBLIC OF KOREA" -"3398634528","3398634559","AU","AUS","AUSTRALIA" -"3398634560","3398634591","KR","KOR","REPUBLIC OF KOREA" -"3398634592","3398634751","AU","AUS","AUSTRALIA" -"3398634752","3398634783","KR","KOR","REPUBLIC OF KOREA" -"3398634784","3398635263","AU","AUS","AUSTRALIA" -"3398635264","3398635391","KR","KOR","REPUBLIC OF KOREA" -"3398635392","3398636047","AU","AUS","AUSTRALIA" -"3398636048","3398636063","HK","HKG","HONG KONG" -"3398636064","3398636079","AU","AUS","AUSTRALIA" -"3398636080","3398636087","HK","HKG","HONG KONG" -"3398636088","3398636095","AU","AUS","AUSTRALIA" -"3398636096","3398636127","HK","HKG","HONG KONG" -"3398636128","3398636351","AU","AUS","AUSTRALIA" -"3398636352","3398636367","HK","HKG","HONG KONG" -"3398636368","3398636375","AU","AUS","AUSTRALIA" -"3398636376","3398636383","HK","HKG","HONG KONG" -"3398636384","3398636447","AU","AUS","AUSTRALIA" -"3398636448","3398636511","HK","HKG","HONG KONG" -"3398636512","3398636543","AU","AUS","AUSTRALIA" -"3398636544","3398636583","HK","HKG","HONG KONG" -"3398636584","3398636607","AU","AUS","AUSTRALIA" -"3398636608","3398636719","HK","HKG","HONG KONG" -"3398636720","3398636767","AU","AUS","AUSTRALIA" -"3398636768","3398636775","HK","HKG","HONG KONG" -"3398636776","3398636783","AU","AUS","AUSTRALIA" -"3398636784","3398636799","HK","HKG","HONG KONG" -"3398636800","3398637183","AU","AUS","AUSTRALIA" -"3398637184","3398637215","HK","HKG","HONG KONG" -"3398637216","3398637247","AU","AUS","AUSTRALIA" -"3398637248","3398637311","HK","HKG","HONG KONG" -"3398637312","3398637375","AU","AUS","AUSTRALIA" -"3398637376","3398637439","HK","HKG","HONG KONG" -"3398637440","3398637455","AU","AUS","AUSTRALIA" -"3398637456","3398637503","HK","HKG","HONG KONG" -"3398637504","3398637511","AU","AUS","AUSTRALIA" -"3398637512","3398637519","HK","HKG","HONG KONG" -"3398637520","3398637551","AU","AUS","AUSTRALIA" -"3398637552","3398637567","HK","HKG","HONG KONG" -"3398637568","3398638095","AU","AUS","AUSTRALIA" -"3398638096","3398638111","PH","PHL","PHILIPPINES" -"3398638112","3398638159","AU","AUS","AUSTRALIA" -"3398638160","3398638167","PH","PHL","PHILIPPINES" -"3398638168","3398638175","AU","AUS","AUSTRALIA" -"3398638176","3398638191","TW","TWN","TAIWAN" -"3398638192","3398638207","PH","PHL","PHILIPPINES" -"3398638208","3398638367","AU","AUS","AUSTRALIA" -"3398638368","3398638383","TW","TWN","TAIWAN" -"3398638384","3398638399","AU","AUS","AUSTRALIA" -"3398638400","3398638415","TW","TWN","TAIWAN" -"3398638416","3398638431","AU","AUS","AUSTRALIA" -"3398638432","3398638447","PH","PHL","PHILIPPINES" -"3398638448","3398638479","AU","AUS","AUSTRALIA" -"3398638480","3398638495","TW","TWN","TAIWAN" -"3398638496","3398638719","AU","AUS","AUSTRALIA" -"3398638720","3398638847","PH","PHL","PHILIPPINES" -"3398638848","3398638879","AU","AUS","AUSTRALIA" -"3398638880","3398638911","PH","PHL","PHILIPPINES" -"3398638912","3398639007","AU","AUS","AUSTRALIA" -"3398639008","3398639231","PH","PHL","PHILIPPINES" -"3398639232","3398639247","AU","AUS","AUSTRALIA" -"3398639248","3398639263","PH","PHL","PHILIPPINES" -"3398639264","3398639271","TW","TWN","TAIWAN" -"3398639272","3398639423","AU","AUS","AUSTRALIA" -"3398639424","3398639455","PH","PHL","PHILIPPINES" -"3398639456","3398640127","AU","AUS","AUSTRALIA" -"3398640128","3398640159","SG","SGP","SINGAPORE" -"3398640160","3398640303","AU","AUS","AUSTRALIA" -"3398640304","3398640311","SG","SGP","SINGAPORE" -"3398640312","3398640639","AU","AUS","AUSTRALIA" -"3398640640","3398640695","SG","SGP","SINGAPORE" -"3398640696","3398640783","AU","AUS","AUSTRALIA" -"3398640784","3398640799","SG","SGP","SINGAPORE" -"3398640800","3398640911","AU","AUS","AUSTRALIA" -"3398640912","3398640959","SG","SGP","SINGAPORE" -"3398640960","3398641007","AU","AUS","AUSTRALIA" -"3398641008","3398641039","SG","SGP","SINGAPORE" -"3398641040","3398641055","AU","AUS","AUSTRALIA" -"3398641056","3398641087","SG","SGP","SINGAPORE" -"3398641088","3398641095","AU","AUS","AUSTRALIA" -"3398641096","3398641103","SG","SGP","SINGAPORE" -"3398641104","3398641119","AU","AUS","AUSTRALIA" -"3398641120","3398641311","SG","SGP","SINGAPORE" -"3398641312","3398641423","AU","AUS","AUSTRALIA" -"3398641424","3398641431","SG","SGP","SINGAPORE" -"3398641432","3398641447","MY","MYS","MALAYSIA" -"3398641448","3398641455","AU","AUS","AUSTRALIA" -"3398641456","3398641503","SG","SGP","SINGAPORE" -"3398641504","3398641535","AU","AUS","AUSTRALIA" -"3398641536","3398641543","SG","SGP","SINGAPORE" -"3398641544","3398641567","AU","AUS","AUSTRALIA" -"3398641568","3398641631","MY","MYS","MALAYSIA" -"3398641632","3398642591","AU","AUS","AUSTRALIA" -"3398642592","3398642599","NZ","NZL","NEW ZEALAND" -"3398642600","3398643015","AU","AUS","AUSTRALIA" -"3398643016","3398643023","NZ","NZL","NEW ZEALAND" -"3398643024","3398643223","AU","AUS","AUSTRALIA" -"3398643224","3398643247","NZ","NZL","NEW ZEALAND" -"3398643248","3398643375","AU","AUS","AUSTRALIA" -"3398643376","3398643383","NZ","NZL","NEW ZEALAND" -"3398643384","3398643711","AU","AUS","AUSTRALIA" -"3398643712","3398643967","SG","SGP","SINGAPORE" -"3398643968","3398647295","AU","AUS","AUSTRALIA" -"3398647296","3398647551","TW","TWN","TAIWAN" -"3398647552","3398672383","AU","AUS","AUSTRALIA" -"3398672384","3398680575","PK","PAK","PAKISTAN" -"3398680576","3398684671","ID","IDN","INDONESIA" -"3398684672","3398688767","JP","JPN","JAPAN" -"3398688768","3398705151","ID","IDN","INDONESIA" -"3398705152","3398711295","AU","AUS","AUSTRALIA" -"3398711296","3398713343","BD","BGD","BANGLADESH" -"3398713344","3398721535","AU","AUS","AUSTRALIA" -"3398721536","3398729727","CN","CHN","CHINA" -"3398729728","3398737919","AU","AUS","AUSTRALIA" -"3398737920","3398742015","SG","SGP","SINGAPORE" -"3398742016","3398746111","TH","THA","THAILAND" -"3398746112","3398750207","IN","IND","INDIA" -"3398750208","3398754303","TW","TWN","TAIWAN" -"3398754304","3398758399","AU","AUS","AUSTRALIA" -"3398758400","3398768639","JP","JPN","JAPAN" -"3398768640","3398770687","TH","THA","THAILAND" -"3398770688","3398778879","IN","IND","INDIA" -"3398778880","3398787071","ID","IDN","INDONESIA" -"3398787072","3398795263","TH","THA","THAILAND" -"3398795264","3398803455","ID","IDN","INDONESIA" -"3398803456","3398811647","CN","CHN","CHINA" -"3398811648","3398819839","IN","IND","INDIA" -"3398819840","3398828031","CN","CHN","CHINA" -"3398828032","3398829055","KH","KHM","CAMBODIA" -"3398829056","3398830079","IN","IND","INDIA" -"3398830080","3398831103","KH","KHM","CAMBODIA" -"3398831104","3398832127","AU","AUS","AUSTRALIA" -"3398832128","3398836223","CN","CHN","CHINA" -"3398836224","3398840319","AU","AUS","AUSTRALIA" -"3398840320","3398842367","JP","JPN","JAPAN" -"3398842368","3398844415","AU","AUS","AUSTRALIA" -"3398844416","3398852607","ID","IDN","INDONESIA" -"3398852608","3398860799","NZ","NZL","NEW ZEALAND" -"3398860800","3398873087","ID","IDN","INDONESIA" -"3398873088","3398877183","KR","KOR","REPUBLIC OF KOREA" -"3398877184","3398881279","AU","AUS","AUSTRALIA" -"3398881280","3398885375","SG","SGP","SINGAPORE" -"3398885376","3398893567","AU","AUS","AUSTRALIA" -"3398893568","3398894591","ID","IDN","INDONESIA" -"3398894592","3398895615","TH","THA","THAILAND" -"3398895616","3398897663","ID","IDN","INDONESIA" -"3398897664","3398901759","FJ","FJI","FIJI" -"3398901760","3398902015","AU","AUS","AUSTRALIA" -"3398902016","3398902271","HK","HKG","HONG KONG" -"3398902272","3398902783","PH","PHL","PHILIPPINES" -"3398902784","3398903807","AU","AUS","AUSTRALIA" -"3398903808","3398905855","TH","THA","THAILAND" -"3398905856","3398909951","TW","TWN","TAIWAN" -"3398909952","3398918143","GU","GUM","GUAM" -"3398918144","3398926335","JP","JPN","JAPAN" -"3398926336","3398934527","IN","IND","INDIA" -"3398934528","3398938623","VN","VNM","VIET NAM" -"3398938624","3398942719","TH","THA","THAILAND" -"3398942720","3398959103","MY","MYS","MALAYSIA" -"3398959104","3398975487","ID","IDN","INDONESIA" -"3398975488","3398983679","BN","BRN","BRUNEI DARUSSALAM" -"3398983680","3398991871","JP","JPN","JAPAN" -"3398991872","3399004159","ID","IDN","INDONESIA" -"3399004160","3399008255","CN","CHN","CHINA" -"3399008256","3399012351","ID","IDN","INDONESIA" -"3399012352","3399016447","JP","JPN","JAPAN" -"3399016448","3399024639","ID","IDN","INDONESIA" -"3399024640","3399025663","TH","THA","THAILAND" -"3399025664","3399026175","JP","JPN","JAPAN" -"3399026176","3399026431","SG","SGP","SINGAPORE" -"3399026432","3399026687","AU","AUS","AUSTRALIA" -"3399026688","3399028735","HK","HKG","HONG KONG" -"3399028736","3399032831","ID","IDN","INDONESIA" -"3399032832","3399036927","IN","IND","INDIA" -"3399036928","3399041023","CN","CHN","CHINA" -"3399041024","3399045119","AU","AUS","AUSTRALIA" -"3399045120","3399047167","MV","MDV","MALDIVES" -"3399047168","3399057407","HK","HKG","HONG KONG" -"3399057408","3399065599","ID","IDN","INDONESIA" -"3399065600","3399074495","TW","TWN","TAIWAN" -"3399074496","3399074527","CN","CHN","CHINA" -"3399074528","3399075487","TW","TWN","TAIWAN" -"3399075488","3399075503","CR","CRI","COSTA RICA" -"3399075504","3399076431","TW","TWN","TAIWAN" -"3399076432","3399076447","CR","CRI","COSTA RICA" -"3399076448","3399076607","TW","TWN","TAIWAN" -"3399076608","3399076639","HK","HKG","HONG KONG" -"3399076640","3399076687","TW","TWN","TAIWAN" -"3399076688","3399076703","HK","HKG","HONG KONG" -"3399076704","3399077079","TW","TWN","TAIWAN" -"3399077080","3399077087","HK","HKG","HONG KONG" -"3399077088","3399077359","TW","TWN","TAIWAN" -"3399077360","3399077375","CR","CRI","COSTA RICA" -"3399077376","3399077887","TW","TWN","TAIWAN" -"3399077888","3399081983","AU","AUS","AUSTRALIA" -"3399081984","3399106559","ID","IDN","INDONESIA" -"3399106560","3399122943","AU","AUS","AUSTRALIA" -"3399122944","3399131135","NZ","NZL","NEW ZEALAND" -"3399131136","3399135231","IN","IND","INDIA" -"3399135232","3399139327","ID","IDN","INDONESIA" -"3399139328","3399147519","TW","TWN","TAIWAN" -"3399147520","3399155711","PK","PAK","PAKISTAN" -"3399155712","3399196671","ID","IDN","INDONESIA" -"3399196672","3399204863","AU","AUS","AUSTRALIA" -"3399204864","3399221247","HK","HKG","HONG KONG" -"3399221248","3399286783","SG","SGP","SINGAPORE" -"3399286784","3399303167","JP","JPN","JAPAN" -"3399303168","3399311359","IN","IND","INDIA" -"3399311360","3399319551","JP","JPN","JAPAN" -"3399319552","3399331839","SG","SGP","SINGAPORE" -"3399331840","3399332351","MY","MYS","MALAYSIA" -"3399332352","3399332863","SG","SGP","SINGAPORE" -"3399332864","3399333375","HK","HKG","HONG KONG" -"3399333376","3399335423","MY","MYS","MALAYSIA" -"3399335424","3399335935","IN","IND","INDIA" -"3399335936","3399344127","AU","AUS","AUSTRALIA" -"3399344128","3399352319","JP","JPN","JAPAN" -"3399352320","3399389183","ID","IDN","INDONESIA" -"3399389184","3399393279","KR","KOR","REPUBLIC OF KOREA" -"3399393280","3399401471","CN","CHN","CHINA" -"3399401472","3399409663","AU","AUS","AUSTRALIA" -"3399409664","3399413759","JP","JPN","JAPAN" -"3399413760","3399414271","AU","AUS","AUSTRALIA" -"3399414272","3399414527","JP","JPN","JAPAN" -"3399414528","3399414783","AU","AUS","AUSTRALIA" -"3399414784","3399415807","VN","VNM","VIET NAM" -"3399415808","3399416831","SG","SGP","SINGAPORE" -"3399416832","3399417087","ID","IDN","INDONESIA" -"3399417088","3399417855","AU","AUS","AUSTRALIA" -"3399417856","3399450623","ID","IDN","INDONESIA" -"3399450624","3399467007","AU","AUS","AUSTRALIA" -"3399467008","3399483391","IN","IND","INDIA" -"3399483392","3399495679","BN","BRN","BRUNEI DARUSSALAM" -"3399495680","3399499775","NZ","NZL","NEW ZEALAND" -"3399499776","3399507967","TW","TWN","TAIWAN" -"3399507968","3399512063","AU","AUS","AUSTRALIA" -"3399512064","3399514111","NZ","NZL","NEW ZEALAND" -"3399514112","3399515135","SG","SGP","SINGAPORE" -"3399515136","3399515647","VN","VNM","VIET NAM" -"3399515648","3399524351","AU","AUS","AUSTRALIA" -"3399524352","3399528447","IN","IND","INDIA" -"3399528448","3399532543","CN","CHN","CHINA" -"3399532544","3399544575","SG","SGP","SINGAPORE" -"3399544576","3399544831","IN","IND","INDIA" -"3399544832","3399546879","SG","SGP","SINGAPORE" -"3399546880","3399547135","US","USA","UNITED STATES" -"3399547136","3399547903","SG","SGP","SINGAPORE" -"3399547904","3399548159","PK","PAK","PAKISTAN" -"3399548160","3399548415","SG","SGP","SINGAPORE" -"3399548416","3399548671","ID","IDN","INDONESIA" -"3399548672","3399548927","SG","SGP","SINGAPORE" -"3399548928","3399557119","AU","AUS","AUSTRALIA" -"3399557120","3399565311","SG","SGP","SINGAPORE" -"3399565312","3399581695","AU","AUS","AUSTRALIA" -"3399581696","3399583487","US","USA","UNITED STATES" -"3399583488","3399583743","NP","NPL","NEPAL" -"3399583744","3399584255","US","USA","UNITED STATES" -"3399584256","3399584511","BD","BGD","BANGLADESH" -"3399584512","3399587839","US","USA","UNITED STATES" -"3399587840","3399588095","BD","BGD","BANGLADESH" -"3399588096","3399589631","US","USA","UNITED STATES" -"3399589632","3399589887","NP","NPL","NEPAL" -"3399589888","3399593983","HK","HKG","HONG KONG" -"3399593984","3399598079","BD","BGD","BANGLADESH" -"3399598080","3399614463","JP","JPN","JAPAN" -"3399614464","3399622655","MY","MYS","MALAYSIA" -"3399622656","3399626751","ID","IDN","INDONESIA" -"3399626752","3399630847","IN","IND","INDIA" -"3399630848","3399631871","AU","AUS","AUSTRALIA" -"3399631872","3399632895","SG","SGP","SINGAPORE" -"3399632896","3399633407","NZ","NZL","NEW ZEALAND" -"3399633408","3399633919","AU","AUS","AUSTRALIA" -"3399633920","3399634943","TH","THA","THAILAND" -"3399634944","3399639039","JP","JPN","JAPAN" -"3399639040","3399643135","AU","AUS","AUSTRALIA" -"3399643136","3399655423","JP","JPN","JAPAN" -"3399655424","3399659519","PH","PHL","PHILIPPINES" -"3399659520","3399661567","NZ","NZL","NEW ZEALAND" -"3399661568","3399662591","HK","HKG","HONG KONG" -"3399662592","3399663615","IN","IND","INDIA" -"3399663616","3399671807","ID","IDN","INDONESIA" -"3399671808","3399679999","IN","IND","INDIA" -"3399680000","3399688191","HK","HKG","HONG KONG" -"3399688192","3399696383","SG","SGP","SINGAPORE" -"3399696384","3399712767","PK","PAK","PAKISTAN" -"3399712768","3399720959","KR","KOR","REPUBLIC OF KOREA" -"3399720960","3399729151","JP","JPN","JAPAN" -"3399729152","3399745535","PH","PHL","PHILIPPINES" -"3399745536","3399749631","CN","CHN","CHINA" -"3399749632","3399751679","AU","AUS","AUSTRALIA" -"3399751680","3399752191","IN","IND","INDIA" -"3399752192","3399752447","AU","AUS","AUSTRALIA" -"3399752448","3399752703","HK","HKG","HONG KONG" -"3399752704","3399753727","NZ","NZL","NEW ZEALAND" -"3399753728","3399761919","IN","IND","INDIA" -"3399761920","3399770111","JP","JPN","JAPAN" -"3399770112","3399778303","AU","AUS","AUSTRALIA" -"3399778304","3399786495","IN","IND","INDIA" -"3399786496","3399794687","PH","PHL","PHILIPPINES" -"3399794688","3399798783","AU","AUS","AUSTRALIA" -"3399798784","3399800831","BD","BGD","BANGLADESH" -"3399800832","3399802879","ID","IDN","INDONESIA" -"3399802880","3399811071","JP","JPN","JAPAN" -"3399811072","3399819263","MY","MYS","MALAYSIA" -"3399819264","3399823359","ID","IDN","INDONESIA" -"3399823360","3399825407","JP","JPN","JAPAN" -"3399825408","3399826431","KR","KOR","REPUBLIC OF KOREA" -"3399826432","3399826943","PH","PHL","PHILIPPINES" -"3399826944","3399827455","IN","IND","INDIA" -"3399827456","3399839743","AU","AUS","AUSTRALIA" -"3399839744","3399841791","JP","JPN","JAPAN" -"3399841792","3399846399","TW","TWN","TAIWAN" -"3399846400","3399846407","US","USA","UNITED STATES" -"3399846408","3399846919","TW","TWN","TAIWAN" -"3399846920","3399846935","US","USA","UNITED STATES" -"3399846936","3399847247","TW","TWN","TAIWAN" -"3399847248","3399847263","US","USA","UNITED STATES" -"3399847264","3399852031","TW","TWN","TAIWAN" -"3399852032","3399856127","JP","JPN","JAPAN" -"3399856128","3399860223","CN","CHN","CHINA" -"3399860224","3399864319","PG","PNG","PAPUA NEW GUINEA" -"3399864320","3399868415","CN","CHN","CHINA" -"3399868416","3399876607","PK","PAK","PAKISTAN" -"3399876608","3399917567","SG","SGP","SINGAPORE" -"3399917568","3399921663","AU","AUS","AUSTRALIA" -"3399921664","3399923711","NC","NCL","NEW CALEDONIA" -"3399923712","3399923967","IN","IND","INDIA" -"3399923968","3399924223","JP","JPN","JAPAN" -"3399924224","3399924735","AU","AUS","AUSTRALIA" -"3399924736","3399925759","PH","PHL","PHILIPPINES" -"3399925760","3399933951","NP","NPL","NEPAL" -"3399933952","3399950335","AU","AUS","AUSTRALIA" -"3399950336","3399967871","US","USA","UNITED STATES" -"3399967872","3399967999","HK","HKG","HONG KONG" -"3399968000","3399974911","US","USA","UNITED STATES" -"3399974912","3399979007","AU","AUS","AUSTRALIA" -"3399979008","3399982959","US","USA","UNITED STATES" -"3399982960","3399982975","SG","SGP","SINGAPORE" -"3399982976","3399995391","US","USA","UNITED STATES" -"3399995392","3399999487","KR","KOR","REPUBLIC OF KOREA" -"3399999488","3400002047","SG","SGP","SINGAPORE" -"3400002048","3400002559","HK","HKG","HONG KONG" -"3400002560","3400003583","JP","JPN","JAPAN" -"3400003584","3400004799","SG","SGP","SINGAPORE" -"3400004800","3400004807","MY","MYS","MALAYSIA" -"3400004808","3400004831","SG","SGP","SINGAPORE" -"3400004832","3400004863","US","USA","UNITED STATES" -"3400004864","3400005823","SG","SGP","SINGAPORE" -"3400005824","3400005863","HK","HKG","HONG KONG" -"3400005864","3400006143","SG","SGP","SINGAPORE" -"3400006144","3400006399","HK","HKG","HONG KONG" -"3400006400","3400007295","SG","SGP","SINGAPORE" -"3400007296","3400007303","JP","JPN","JAPAN" -"3400007304","3400007679","SG","SGP","SINGAPORE" -"3400007680","3400024063","AU","AUS","AUSTRALIA" -"3400024064","3400028159","MY","MYS","MALAYSIA" -"3400028160","3400030207","AU","AUS","AUSTRALIA" -"3400030208","3400031231","IN","IND","INDIA" -"3400031232","3400031743","SG","SGP","SINGAPORE" -"3400031744","3400031999","IN","IND","INDIA" -"3400032000","3400032255","HK","HKG","HONG KONG" -"3400032256","3400048639","AU","AUS","AUSTRALIA" -"3400048640","3400056831","CN","CHN","CHINA" -"3400056832","3400060927","TW","TWN","TAIWAN" -"3400060928","3400062975","HK","HKG","HONG KONG" -"3400062976","3400065023","JP","JPN","JAPAN" -"3400065024","3400073215","BD","BGD","BANGLADESH" -"3400073216","3400077311","HK","HKG","HONG KONG" -"3400077312","3400079359","AU","AUS","AUSTRALIA" -"3400079360","3400081407","MY","MYS","MALAYSIA" -"3400081408","3400089599","ID","IDN","INDONESIA" -"3400089600","3400097791","JP","JPN","JAPAN" -"3400097792","3400105983","AU","AUS","AUSTRALIA" -"3400105984","3400114175","JP","JPN","JAPAN" -"3400114176","3400118271","TW","TWN","TAIWAN" -"3400118272","3400120319","AU","AUS","AUSTRALIA" -"3400120320","3400122367","JP","JPN","JAPAN" -"3400122368","3400130559","NZ","NZL","NEW ZEALAND" -"3400130560","3400138751","ID","IDN","INDONESIA" -"3400138752","3400146943","HK","HKG","HONG KONG" -"3400146944","3400151039","FJ","FJI","FIJI" -"3400151040","3400155135","MY","MYS","MALAYSIA" -"3400155136","3400163327","MN","MNG","MONGOLIA" -"3400163328","3400167423","JP","JPN","JAPAN" -"3400167424","3400171519","TH","THA","THAILAND" -"3400171520","3400179711","CN","CHN","CHINA" -"3400179712","3400183807","NZ","NZL","NEW ZEALAND" -"3400183808","3400187903","JP","JPN","JAPAN" -"3400187904","3400191999","AU","AUS","AUSTRALIA" -"3400192000","3400194047","JP","JPN","JAPAN" -"3400194048","3400196095","CN","CHN","CHINA" -"3400196096","3400204287","AU","AUS","AUSTRALIA" -"3400204288","3400212479","ID","IDN","INDONESIA" -"3400212480","3400220671","MY","MYS","MALAYSIA" -"3400220672","3400221055","NC","NCL","NEW CALEDONIA" -"3400221056","3400221119","NZ","NZL","NEW ZEALAND" -"3400221120","3400224767","NC","NCL","NEW CALEDONIA" -"3400224768","3400228863","JP","JPN","JAPAN" -"3400228864","3400232959","AU","AUS","AUSTRALIA" -"3400232960","3400245247","JP","JPN","JAPAN" -"3400245248","3400253439","AU","AUS","AUSTRALIA" -"3400253440","3400257535","MY","MYS","MALAYSIA" -"3400257536","3400259583","HK","HKG","HONG KONG" -"3400259584","3400261631","AU","AUS","AUSTRALIA" -"3400261632","3400263679","JP","JPN","JAPAN" -"3400263680","3400263935","AU","AUS","AUSTRALIA" -"3400263936","3400264191","ID","IDN","INDONESIA" -"3400264192","3400264447","IN","IND","INDIA" -"3400264448","3400264703","AU","AUS","AUSTRALIA" -"3400264704","3400265215","ID","IDN","INDONESIA" -"3400265216","3400265471","AU","AUS","AUSTRALIA" -"3400265472","3400265727","IN","IND","INDIA" -"3400265728","3400267775","PG","PNG","PAPUA NEW GUINEA" -"3400267776","3400268799","KR","KOR","REPUBLIC OF KOREA" -"3400268800","3400270847","MO","MAC","MACAO" -"3400270848","3400271359","VN","VNM","VIET NAM" -"3400271360","3400271615","AU","AUS","AUSTRALIA" -"3400271616","3400271871","IN","IND","INDIA" -"3400271872","3400273919","AU","AUS","AUSTRALIA" -"3400273920","3400275967","TH","THA","THAILAND" -"3400275968","3400278015","JP","JPN","JAPAN" -"3400278016","3400286207","SG","SGP","SINGAPORE" -"3400286208","3400294399","JP","JPN","JAPAN" -"3400294400","3400310783","AU","AUS","AUSTRALIA" -"3400310784","3400335359","SG","SGP","SINGAPORE" -"3400335360","3400336383","MO","MAC","MACAO" -"3400336384","3400336639","PH","PHL","PHILIPPINES" -"3400336640","3400336895","JP","JPN","JAPAN" -"3400336896","3400337151","AU","AUS","AUSTRALIA" -"3400337152","3400337407","PH","PHL","PHILIPPINES" -"3400337408","3400339455","CN","CHN","CHINA" -"3400339456","3400341503","ID","IDN","INDONESIA" -"3400341504","3400343551","AU","AUS","AUSTRALIA" -"3400343552","3400351743","TW","TWN","TAIWAN" -"3400351744","3400359935","ID","IDN","INDONESIA" -"3400359936","3400368127","JP","JPN","JAPAN" -"3400368128","3400388607","AU","AUS","AUSTRALIA" -"3400388608","3400392703","TH","THA","THAILAND" -"3400392704","3400400895","CN","CHN","CHINA" -"3400400896","3400401919","MO","MAC","MACAO" -"3400401920","3400402175","TW","TWN","TAIWAN" -"3400402176","3400402431","IN","IND","INDIA" -"3400402432","3400402943","NZ","NZL","NEW ZEALAND" -"3400402944","3400404991","AU","AUS","AUSTRALIA" -"3400404992","3400409087","TW","TWN","TAIWAN" -"3400409088","3400413183","AU","AUS","AUSTRALIA" -"3400413184","3400417279","JP","JPN","JAPAN" -"3400417280","3400423423","AU","AUS","AUSTRALIA" -"3400423424","3400424447","KR","KOR","REPUBLIC OF KOREA" -"3400424448","3400425471","IN","IND","INDIA" -"3400425472","3400429567","AU","AUS","AUSTRALIA" -"3400429568","3400431615","NZ","NZL","NEW ZEALAND" -"3400431616","3400431871","IN","IND","INDIA" -"3400431872","3400432127","HK","HKG","HONG KONG" -"3400432128","3400432639","IN","IND","INDIA" -"3400432640","3400433663","AU","AUS","AUSTRALIA" -"3400433664","3400434431","HK","HKG","HONG KONG" -"3400434432","3400434463","MY","MYS","MALAYSIA" -"3400434464","3400434471","HK","HKG","HONG KONG" -"3400434472","3400434479","MY","MYS","MALAYSIA" -"3400434480","3400434487","HK","HKG","HONG KONG" -"3400434488","3400434519","MY","MYS","MALAYSIA" -"3400434520","3400434527","MV","MDV","MALDIVES" -"3400434528","3400434535","HK","HKG","HONG KONG" -"3400434536","3400434543","KZ","KAZ","KAZAKHSTAN" -"3400434544","3400434551","MY","MYS","MALAYSIA" -"3400434552","3400434559","KZ","KAZ","KAZAKHSTAN" -"3400434560","3400434567","MV","MDV","MALDIVES" -"3400434568","3400434575","MY","MYS","MALAYSIA" -"3400434576","3400434583","MV","MDV","MALDIVES" -"3400434584","3400434599","MY","MYS","MALAYSIA" -"3400434600","3400434607","HK","HKG","HONG KONG" -"3400434608","3400434647","MV","MDV","MALDIVES" -"3400434648","3400434655","KZ","KAZ","KAZAKHSTAN" -"3400434656","3400434663","MV","MDV","MALDIVES" -"3400434664","3400434679","MY","MYS","MALAYSIA" -"3400434680","3400434687","HK","HKG","HONG KONG" -"3400434688","3400434895","MY","MYS","MALAYSIA" -"3400434896","3400434911","MV","MDV","MALDIVES" -"3400434912","3400434927","KZ","KAZ","KAZAKHSTAN" -"3400434928","3400434935","MV","MDV","MALDIVES" -"3400434936","3400434951","HK","HKG","HONG KONG" -"3400434952","3400434959","AF","AFG","AFGHANISTAN" -"3400434960","3400434975","HK","HKG","HONG KONG" -"3400434976","3400434991","AF","AFG","AFGHANISTAN" -"3400434992","3400435007","MA","MAR","MOROCCO" -"3400435008","3400435071","MY","MYS","MALAYSIA" -"3400435072","3400435087","MA","MAR","MOROCCO" -"3400435088","3400435095","AF","AFG","AFGHANISTAN" -"3400435096","3400435119","MA","MAR","MOROCCO" -"3400435120","3400435143","HK","HKG","HONG KONG" -"3400435144","3400435151","MA","MAR","MOROCCO" -"3400435152","3400435159","HK","HKG","HONG KONG" -"3400435160","3400435175","MA","MAR","MOROCCO" -"3400435176","3400435183","MY","MYS","MALAYSIA" -"3400435184","3400435199","MV","MDV","MALDIVES" -"3400435200","3400435207","AF","AFG","AFGHANISTAN" -"3400435208","3400435239","HK","HKG","HONG KONG" -"3400435240","3400435263","ID","IDN","INDONESIA" -"3400435264","3400435391","MY","MYS","MALAYSIA" -"3400435392","3400435423","HK","HKG","HONG KONG" -"3400435424","3400435439","ID","IDN","INDONESIA" -"3400435440","3400435455","KZ","KAZ","KAZAKHSTAN" -"3400435456","3400435575","MY","MYS","MALAYSIA" -"3400435576","3400435639","HK","HKG","HONG KONG" -"3400435640","3400435647","MY","MYS","MALAYSIA" -"3400435648","3400435663","HK","HKG","HONG KONG" -"3400435664","3400435711","MY","MYS","MALAYSIA" -"3400435712","3400436479","HK","HKG","HONG KONG" -"3400436480","3400436735","NP","NPL","NEPAL" -"3400436736","3400437247","BD","BGD","BANGLADESH" -"3400437248","3400437375","PK","PAK","PAKISTAN" -"3400437376","3400437439","BD","BGD","BANGLADESH" -"3400437440","3400437527","HK","HKG","HONG KONG" -"3400437528","3400437543","MY","MYS","MALAYSIA" -"3400437544","3400437551","HK","HKG","HONG KONG" -"3400437552","3400437591","MY","MYS","MALAYSIA" -"3400437592","3400437599","BD","BGD","BANGLADESH" -"3400437600","3400437607","MN","MNG","MONGOLIA" -"3400437608","3400437615","MY","MYS","MALAYSIA" -"3400437616","3400437631","HK","HKG","HONG KONG" -"3400437632","3400437647","MY","MYS","MALAYSIA" -"3400437648","3400437655","HK","HKG","HONG KONG" -"3400437656","3400437663","MY","MYS","MALAYSIA" -"3400437664","3400437679","HK","HKG","HONG KONG" -"3400437680","3400437687","MN","MNG","MONGOLIA" -"3400437688","3400437703","ID","IDN","INDONESIA" -"3400437704","3400437711","HK","HKG","HONG KONG" -"3400437712","3400437719","MY","MYS","MALAYSIA" -"3400437720","3400437735","HK","HKG","HONG KONG" -"3400437736","3400437759","ID","IDN","INDONESIA" -"3400437760","3400437767","AF","AFG","AFGHANISTAN" -"3400437768","3400437775","MY","MYS","MALAYSIA" -"3400437776","3400437783","HK","HKG","HONG KONG" -"3400437784","3400437791","ID","IDN","INDONESIA" -"3400437792","3400437807","NP","NPL","NEPAL" -"3400437808","3400437815","MN","MNG","MONGOLIA" -"3400437816","3400437823","ID","IDN","INDONESIA" -"3400437824","3400437831","MY","MYS","MALAYSIA" -"3400437832","3400437847","ID","IDN","INDONESIA" -"3400437848","3400437887","MY","MYS","MALAYSIA" -"3400437888","3400437895","HK","HKG","HONG KONG" -"3400437896","3400437903","MY","MYS","MALAYSIA" -"3400437904","3400437911","ID","IDN","INDONESIA" -"3400437912","3400437927","MY","MYS","MALAYSIA" -"3400437928","3400437935","ID","IDN","INDONESIA" -"3400437936","3400437951","BD","BGD","BANGLADESH" -"3400437952","3400437959","MN","MNG","MONGOLIA" -"3400437960","3400437967","ID","IDN","INDONESIA" -"3400437968","3400437975","MY","MYS","MALAYSIA" -"3400437976","3400437983","AF","AFG","AFGHANISTAN" -"3400437984","3400438191","HK","HKG","HONG KONG" -"3400438192","3400438207","US","USA","UNITED STATES" -"3400438208","3400438399","HK","HKG","HONG KONG" -"3400438400","3400438591","BD","BGD","BANGLADESH" -"3400438592","3400438783","HK","HKG","HONG KONG" -"3400438784","3400438815","KZ","KAZ","KAZAKHSTAN" -"3400438816","3400438831","PK","PAK","PAKISTAN" -"3400438832","3400438839","AF","AFG","AFGHANISTAN" -"3400438840","3400438847","ID","IDN","INDONESIA" -"3400438848","3400438863","BD","BGD","BANGLADESH" -"3400438864","3400438871","HK","HKG","HONG KONG" -"3400438872","3400438879","ID","IDN","INDONESIA" -"3400438880","3400438911","NP","NPL","NEPAL" -"3400438912","3400438919","AF","AFG","AFGHANISTAN" -"3400438920","3400438927","IN","IND","INDIA" -"3400438928","3400438943","BD","BGD","BANGLADESH" -"3400438944","3400438959","HK","HKG","HONG KONG" -"3400438960","3400438991","ID","IDN","INDONESIA" -"3400438992","3400438999","HK","HKG","HONG KONG" -"3400439000","3400439007","PK","PAK","PAKISTAN" -"3400439008","3400439023","BD","BGD","BANGLADESH" -"3400439024","3400439039","ID","IDN","INDONESIA" -"3400439040","3400439295","HK","HKG","HONG KONG" -"3400439296","3400439551","PK","PAK","PAKISTAN" -"3400439552","3400439615","BD","BGD","BANGLADESH" -"3400439616","3400439679","HK","HKG","HONG KONG" -"3400439680","3400439711","BD","BGD","BANGLADESH" -"3400439712","3400439743","KZ","KAZ","KAZAKHSTAN" -"3400439744","3400439807","BD","BGD","BANGLADESH" -"3400439808","3400439871","HK","HKG","HONG KONG" -"3400439872","3400439935","NP","NPL","NEPAL" -"3400439936","3400440063","HK","HKG","HONG KONG" -"3400440064","3400440079","NP","NPL","NEPAL" -"3400440080","3400440087","MN","MNG","MONGOLIA" -"3400440088","3400440095","MY","MYS","MALAYSIA" -"3400440096","3400440111","MN","MNG","MONGOLIA" -"3400440112","3400440127","MY","MYS","MALAYSIA" -"3400440128","3400440135","MN","MNG","MONGOLIA" -"3400440136","3400440143","HK","HKG","HONG KONG" -"3400440144","3400440159","MY","MYS","MALAYSIA" -"3400440160","3400440167","BD","BGD","BANGLADESH" -"3400440168","3400440175","MY","MYS","MALAYSIA" -"3400440176","3400440191","BD","BGD","BANGLADESH" -"3400440192","3400440199","KZ","KAZ","KAZAKHSTAN" -"3400440200","3400440207","MN","MNG","MONGOLIA" -"3400440208","3400440223","MY","MYS","MALAYSIA" -"3400440224","3400440239","BD","BGD","BANGLADESH" -"3400440240","3400440247","ID","IDN","INDONESIA" -"3400440248","3400440255","AF","AFG","AFGHANISTAN" -"3400440256","3400440263","ID","IDN","INDONESIA" -"3400440264","3400440271","MN","MNG","MONGOLIA" -"3400440272","3400440295","ID","IDN","INDONESIA" -"3400440296","3400440303","BD","BGD","BANGLADESH" -"3400440304","3400440319","MY","MYS","MALAYSIA" -"3400440320","3400440327","AF","AFG","AFGHANISTAN" -"3400440328","3400440335","ID","IDN","INDONESIA" -"3400440336","3400440343","NP","NPL","NEPAL" -"3400440344","3400440351","AF","AFG","AFGHANISTAN" -"3400440352","3400440359","HK","HKG","HONG KONG" -"3400440360","3400440367","ID","IDN","INDONESIA" -"3400440368","3400440375","HK","HKG","HONG KONG" -"3400440376","3400440383","ID","IDN","INDONESIA" -"3400440384","3400440391","MN","MNG","MONGOLIA" -"3400440392","3400440415","ID","IDN","INDONESIA" -"3400440416","3400440431","AF","AFG","AFGHANISTAN" -"3400440432","3400440439","MY","MYS","MALAYSIA" -"3400440440","3400440447","HK","HKG","HONG KONG" -"3400440448","3400440455","AF","AFG","AFGHANISTAN" -"3400440456","3400440463","BD","BGD","BANGLADESH" -"3400440464","3400440467","ID","IDN","INDONESIA" -"3400440468","3400440475","HK","HKG","HONG KONG" -"3400440476","3400440479","NP","NPL","NEPAL" -"3400440480","3400440487","AF","AFG","AFGHANISTAN" -"3400440488","3400440495","MY","MYS","MALAYSIA" -"3400440496","3400440499","LK","LKA","SRI LANKA" -"3400440500","3400440507","AF","AFG","AFGHANISTAN" -"3400440508","3400440519","HK","HKG","HONG KONG" -"3400440520","3400440531","ID","IDN","INDONESIA" -"3400440532","3400440535","AF","AFG","AFGHANISTAN" -"3400440536","3400440539","ID","IDN","INDONESIA" -"3400440540","3400440543","HK","HKG","HONG KONG" -"3400440544","3400440551","MN","MNG","MONGOLIA" -"3400440552","3400440575","NP","NPL","NEPAL" -"3400440576","3400440583","ID","IDN","INDONESIA" -"3400440584","3400440591","HK","HKG","HONG KONG" -"3400440592","3400440607","PK","PAK","PAKISTAN" -"3400440608","3400440623","HK","HKG","HONG KONG" -"3400440624","3400440639","ID","IDN","INDONESIA" -"3400440640","3400440703","HK","HKG","HONG KONG" -"3400440704","3400440711","AF","AFG","AFGHANISTAN" -"3400440712","3400440719","ID","IDN","INDONESIA" -"3400440720","3400440727","AF","AFG","AFGHANISTAN" -"3400440728","3400440735","KZ","KAZ","KAZAKHSTAN" -"3400440736","3400440743","BD","BGD","BANGLADESH" -"3400440744","3400440750","ID","IDN","INDONESIA" -"3400440751","3400440751","HK","HKG","HONG KONG" -"3400440752","3400440759","ID","IDN","INDONESIA" -"3400440760","3400440767","MY","MYS","MALAYSIA" -"3400440768","3400440775","ID","IDN","INDONESIA" -"3400440776","3400440783","HK","HKG","HONG KONG" -"3400440784","3400440791","MN","MNG","MONGOLIA" -"3400440792","3400440799","AF","AFG","AFGHANISTAN" -"3400440800","3400440807","BD","BGD","BANGLADESH" -"3400440808","3400440815","MY","MYS","MALAYSIA" -"3400440816","3400440823","AF","AFG","AFGHANISTAN" -"3400440824","3400440831","MY","MYS","MALAYSIA" -"3400440832","3400440895","BD","BGD","BANGLADESH" -"3400440896","3400441023","HK","HKG","HONG KONG" -"3400441024","3400441047","AF","AFG","AFGHANISTAN" -"3400441048","3400441055","BD","BGD","BANGLADESH" -"3400441056","3400441063","PK","PAK","PAKISTAN" -"3400441064","3400441071","HK","HKG","HONG KONG" -"3400441072","3400441079","ID","IDN","INDONESIA" -"3400441080","3400441087","AF","AFG","AFGHANISTAN" -"3400441088","3400441151","PK","PAK","PAKISTAN" -"3400441152","3400441215","BD","BGD","BANGLADESH" -"3400441216","3400441279","HK","HKG","HONG KONG" -"3400441280","3400441311","AF","AFG","AFGHANISTAN" -"3400441312","3400441319","LK","LKA","SRI LANKA" -"3400441320","3400441327","AF","AFG","AFGHANISTAN" -"3400441328","3400441335","LK","LKA","SRI LANKA" -"3400441336","3400441855","HK","HKG","HONG KONG" -"3400441856","3400450047","NZ","NZL","NEW ZEALAND" -"3400450048","3400458239","JP","JPN","JAPAN" -"3400458240","3400466431","AU","AUS","AUSTRALIA" -"3400466432","3400499199","MO","MAC","MACAO" -"3400499200","3400503295","NZ","NZL","NEW ZEALAND" -"3400503296","3400507391","JP","JPN","JAPAN" -"3400507392","3400515583","MO","MAC","MACAO" -"3400515584","3400531967","PH","PHL","PHILIPPINES" -"3400531968","3400534015","AU","AUS","AUSTRALIA" -"3400534016","3400535039","JP","JPN","JAPAN" -"3400535040","3400535551","MY","MYS","MALAYSIA" -"3400535552","3400536063","AU","AUS","AUSTRALIA" -"3400536064","3400548351","JP","JPN","JAPAN" -"3400548352","3400581119","TH","THA","THAILAND" -"3400581120","3400589311","SG","SGP","SINGAPORE" -"3400589312","3400597503","AU","AUS","AUSTRALIA" -"3400597504","3400605695","HK","HKG","HONG KONG" -"3400605696","3400607743","JP","JPN","JAPAN" -"3400607744","3400608767","AU","AUS","AUSTRALIA" -"3400608768","3400609791","IN","IND","INDIA" -"3400609792","3400630271","JP","JPN","JAPAN" -"3400630272","3400646655","IN","IND","INDIA" -"3400646656","3400647043","SG","SGP","SINGAPORE" -"3400647044","3400647047","JP","JPN","JAPAN" -"3400647048","3400647623","SG","SGP","SINGAPORE" -"3400647624","3400647631","JP","JPN","JAPAN" -"3400647632","3400648735","SG","SGP","SINGAPORE" -"3400648736","3400648743","DE","DEU","GERMANY" -"3400648744","3400648767","SG","SGP","SINGAPORE" -"3400648768","3400648807","US","USA","UNITED STATES" -"3400648808","3400649191","SG","SGP","SINGAPORE" -"3400649192","3400649199","HK","HKG","HONG KONG" -"3400649200","3400649519","SG","SGP","SINGAPORE" -"3400649520","3400649527","JP","JPN","JAPAN" -"3400649528","3400649983","SG","SGP","SINGAPORE" -"3400649984","3400650047","HK","HKG","HONG KONG" -"3400650048","3400650215","SG","SGP","SINGAPORE" -"3400650216","3400650223","US","USA","UNITED STATES" -"3400650224","3400650751","SG","SGP","SINGAPORE" -"3400650752","3400651007","JP","JPN","JAPAN" -"3400651008","3400654847","SG","SGP","SINGAPORE" -"3400654848","3400663039","IN","IND","INDIA" -"3400663040","3400683519","MY","MYS","MALAYSIA" -"3400683520","3400691711","JP","JPN","JAPAN" -"3400691712","3400695807","KH","KHM","CAMBODIA" -"3400695808","3400728575","TW","TWN","TAIWAN" -"3400728576","3400736767","MN","MNG","MONGOLIA" -"3400736768","3400744959","JP","JPN","JAPAN" -"3400744960","3400753151","IN","IND","INDIA" -"3400753152","3400761343","MY","MYS","MALAYSIA" -"3400761344","3400769535","PK","PAK","PAKISTAN" -"3400769536","3400773631","JP","JPN","JAPAN" -"3400773632","3400775679","KR","KOR","REPUBLIC OF KOREA" -"3400775680","3400777727","ID","IDN","INDONESIA" -"3400777728","3400790015","JP","JPN","JAPAN" -"3400790016","3400794111","CN","CHN","CHINA" -"3400794112","3400802303","ID","IDN","INDONESIA" -"3400802304","3400806399","JP","JPN","JAPAN" -"3400806400","3400808447","ID","IDN","INDONESIA" -"3400808448","3400810495","JP","JPN","JAPAN" -"3400810496","3400826879","NZ","NZL","NEW ZEALAND" -"3400826880","3400835071","CN","CHN","CHINA" -"3400835072","3400839167","HK","HKG","HONG KONG" -"3400839168","3400847359","JP","JPN","JAPAN" -"3400847360","3400849407","AU","AUS","AUSTRALIA" -"3400849408","3400851455","MN","MNG","MONGOLIA" -"3400851456","3400884223","AU","AUS","AUSTRALIA" -"3400884224","3400888319","JP","JPN","JAPAN" -"3400888320","3400892415","CN","CHN","CHINA" -"3400892416","3400925183","HK","HKG","HONG KONG" -"3400925184","3400933375","TH","THA","THAILAND" -"3400933376","3400937471","AU","AUS","AUSTRALIA" -"3400937472","3400941567","ID","IDN","INDONESIA" -"3400941568","3400966143","AU","AUS","AUSTRALIA" -"3400966144","3400974335","ID","IDN","INDONESIA" -"3400974336","3400982527","AU","AUS","AUSTRALIA" -"3400982528","3400990719","HK","HKG","HONG KONG" -"3400990720","3400998911","ID","IDN","INDONESIA" -"3400998912","3401003007","PH","PHL","PHILIPPINES" -"3401003008","3401007103","JP","JPN","JAPAN" -"3401007104","3401011199","IN","IND","INDIA" -"3401011200","3401015295","JP","JPN","JAPAN" -"3401015296","3401023487","AU","AUS","AUSTRALIA" -"3401023488","3401056255","TH","THA","THAILAND" -"3401056256","3401383935","MY","MYS","MALAYSIA" -"3401383936","3401404415","AU","AUS","AUSTRALIA" -"3401404416","3401408511","CN","CHN","CHINA" -"3401408512","3401416703","HK","HKG","HONG KONG" -"3401416704","3401420799","KR","KOR","REPUBLIC OF KOREA" -"3401420800","3401424895","JP","JPN","JAPAN" -"3401424896","3401428991","NZ","NZL","NEW ZEALAND" -"3401428992","3401431039","JP","JPN","JAPAN" -"3401431040","3401433087","AU","AUS","AUSTRALIA" -"3401433088","3401441279","JP","JPN","JAPAN" -"3401441280","3401449471","IN","IND","INDIA" -"3401449472","3401515007","MY","MYS","MALAYSIA" -"3401515008","3401515263","DE","DEU","GERMANY" -"3401515264","3401515519","AU","AUS","AUSTRALIA" -"3401515520","3401516031","ID","IDN","INDONESIA" -"3401516032","3401519103","AU","AUS","AUSTRALIA" -"3401519104","3401523199","JP","JPN","JAPAN" -"3401523200","3401527295","NZ","NZL","NEW ZEALAND" -"3401527296","3401529343","AU","AUS","AUSTRALIA" -"3401529344","3401530367","VN","VNM","VIET NAM" -"3401530368","3401531391","AU","AUS","AUSTRALIA" -"3401531392","3401532415","IN","IND","INDIA" -"3401532416","3401543679","AU","AUS","AUSTRALIA" -"3401543680","3401545727","JP","JPN","JAPAN" -"3401545728","3401547775","BD","BGD","BANGLADESH" -"3401547776","3401580543","MY","MYS","MALAYSIA" -"3401580544","3401642495","CN","CHN","CHINA" -"3401642496","3401642751","TW","TWN","TAIWAN" -"3401642752","3402629119","CN","CHN","CHINA" -"3402629120","3404857954","JP","JPN","JAPAN" -"3404857955","3404857955","ID","IDN","INDONESIA" -"3404857956","3404857966","JP","JPN","JAPAN" -"3404857967","3404857967","IN","IND","INDIA" -"3404857968","3405774847","JP","JPN","JAPAN" -"3405774848","3406071807","AU","AUS","AUSTRALIA" -"3406071808","3406073855","US","USA","UNITED STATES" -"3406073856","3406077951","AU","AUS","AUSTRALIA" -"3406077952","3406078207","TH","THA","THAILAND" -"3406078208","3406327039","AU","AUS","AUSTRALIA" -"3406327040","3406327295","IN","IND","INDIA" -"3406327296","3406384639","AU","AUS","AUSTRALIA" -"3406384640","3406385151","SG","SGP","SINGAPORE" -"3406385152","3406409727","AU","AUS","AUSTRALIA" -"3406409728","3406411775","NZ","NZL","NEW ZEALAND" -"3406411776","3406434303","AU","AUS","AUSTRALIA" -"3406434304","3406436351","MY","MYS","MALAYSIA" -"3406436352","3406542847","AU","AUS","AUSTRALIA" -"3406542848","3406543103","SG","SGP","SINGAPORE" -"3406543104","3406565887","AU","AUS","AUSTRALIA" -"3406565888","3406566143","PH","PHL","PHILIPPINES" -"3406566144","3406591487","AU","AUS","AUSTRALIA" -"3406591488","3406591743","NP","NPL","NEPAL" -"3406591744","3406617599","AU","AUS","AUSTRALIA" -"3406617600","3406617855","MY","MYS","MALAYSIA" -"3406617856","3406618111","AU","AUS","AUSTRALIA" -"3406618112","3406618623","IN","IND","INDIA" -"3406618624","3406625023","AU","AUS","AUSTRALIA" -"3406625024","3406625279","NF","NFK","NORFOLK ISLAND" -"3406625280","3406663935","AU","AUS","AUSTRALIA" -"3406663936","3406664191","CN","CHN","CHINA" -"3406664192","3406664447","IN","IND","INDIA" -"3406664448","3406669823","AU","AUS","AUSTRALIA" -"3406669824","3406670847","IN","IND","INDIA" -"3406670848","3406696959","AU","AUS","AUSTRALIA" -"3406696960","3406697215","IN","IND","INDIA" -"3406697216","3406737407","AU","AUS","AUSTRALIA" -"3406737408","3406737663","ID","IDN","INDONESIA" -"3406737664","3406739199","AU","AUS","AUSTRALIA" -"3406739200","3406739455","ID","IDN","INDONESIA" -"3406739456","3406746623","AU","AUS","AUSTRALIA" -"3406746624","3406746879","HK","HKG","HONG KONG" -"3406746880","3406865663","AU","AUS","AUSTRALIA" -"3406865664","3406865919","IN","IND","INDIA" -"3406865920","3406946815","AU","AUS","AUSTRALIA" -"3406946816","3406947071","KR","KOR","REPUBLIC OF KOREA" -"3406947072","3406950399","AU","AUS","AUSTRALIA" -"3406950400","3406951423","NF","NFK","NORFOLK ISLAND" -"3406951424","3406961151","AU","AUS","AUSTRALIA" -"3406961152","3406961407","IN","IND","INDIA" -"3406961408","3406967295","AU","AUS","AUSTRALIA" -"3406967296","3406967551","CN","CHN","CHINA" -"3406967552","3406989567","AU","AUS","AUSTRALIA" -"3406989568","3406989823","IN","IND","INDIA" -"3406989824","3407020287","AU","AUS","AUSTRALIA" -"3407020288","3407020543","SG","SGP","SINGAPORE" -"3407020544","3407020799","AU","AUS","AUSTRALIA" -"3407020800","3407021055","IN","IND","INDIA" -"3407021056","3407021311","ID","IDN","INDONESIA" -"3407021312","3407045887","AU","AUS","AUSTRALIA" -"3407045888","3407046143","HK","HKG","HONG KONG" -"3407046144","3407057663","AU","AUS","AUSTRALIA" -"3407057664","3407057919","JP","JPN","JAPAN" -"3407057920","3407096831","AU","AUS","AUSTRALIA" -"3407096832","3407097087","JP","JPN","JAPAN" -"3407097088","3407112447","AU","AUS","AUSTRALIA" -"3407112448","3407112703","SG","SGP","SINGAPORE" -"3407112704","3407152895","AU","AUS","AUSTRALIA" -"3407152896","3407153151","IN","IND","INDIA" -"3407153152","3407157559","AU","AUS","AUSTRALIA" -"3407157560","3407157563","NZ","NZL","NEW ZEALAND" -"3407157564","3407157579","AU","AUS","AUSTRALIA" -"3407157580","3407157583","NZ","NZL","NEW ZEALAND" -"3407157584","3407157611","AU","AUS","AUSTRALIA" -"3407157612","3407157615","NZ","NZL","NEW ZEALAND" -"3407157616","3407157643","AU","AUS","AUSTRALIA" -"3407157644","3407157647","NZ","NZL","NEW ZEALAND" -"3407157648","3407157703","AU","AUS","AUSTRALIA" -"3407157704","3407157711","NZ","NZL","NEW ZEALAND" -"3407157712","3407158015","AU","AUS","AUSTRALIA" -"3407158016","3407158047","NZ","NZL","NEW ZEALAND" -"3407158048","3407158051","AU","AUS","AUSTRALIA" -"3407158052","3407158055","NZ","NZL","NEW ZEALAND" -"3407158056","3407158167","AU","AUS","AUSTRALIA" -"3407158168","3407158175","NZ","NZL","NEW ZEALAND" -"3407158176","3407158207","AU","AUS","AUSTRALIA" -"3407158208","3407158223","NZ","NZL","NEW ZEALAND" -"3407158224","3407158239","AU","AUS","AUSTRALIA" -"3407158240","3407158271","NZ","NZL","NEW ZEALAND" -"3407158272","3407159115","AU","AUS","AUSTRALIA" -"3407159116","3407159135","NZ","NZL","NEW ZEALAND" -"3407159136","3407159191","AU","AUS","AUSTRALIA" -"3407159192","3407159195","NZ","NZL","NEW ZEALAND" -"3407159196","3407159207","AU","AUS","AUSTRALIA" -"3407159208","3407159215","NZ","NZL","NEW ZEALAND" -"3407159216","3407159231","AU","AUS","AUSTRALIA" -"3407159232","3407159239","NZ","NZL","NEW ZEALAND" -"3407159240","3407159263","AU","AUS","AUSTRALIA" -"3407159264","3407159295","NZ","NZL","NEW ZEALAND" -"3407159296","3407243263","AU","AUS","AUSTRALIA" -"3407243264","3407243775","HK","HKG","HONG KONG" -"3407243776","3407268863","AU","AUS","AUSTRALIA" -"3407268864","3407269119","US","USA","UNITED STATES" -"3407269120","3407329791","AU","AUS","AUSTRALIA" -"3407329792","3407330047","IN","IND","INDIA" -"3407330048","3407367167","AU","AUS","AUSTRALIA" -"3407367168","3407367679","ID","IDN","INDONESIA" -"3407367680","3407369983","AU","AUS","AUSTRALIA" -"3407369984","3407370239","IN","IND","INDIA" -"3407370240","3407498495","AU","AUS","AUSTRALIA" -"3407498496","3407498751","PK","PAK","PAKISTAN" -"3407498752","3407524607","AU","AUS","AUSTRALIA" -"3407524608","3407524863","NZ","NZL","NEW ZEALAND" -"3407524864","3407602943","AU","AUS","AUSTRALIA" -"3407602944","3407603199","JP","JPN","JAPAN" -"3407603200","3407604479","AU","AUS","AUSTRALIA" -"3407604480","3407604735","IN","IND","INDIA" -"3407604736","3407608715","AU","AUS","AUSTRALIA" -"3407608716","3407608736","JP","JPN","JAPAN" -"3407608737","3407682047","AU","AUS","AUSTRALIA" -"3407682048","3407682559","ID","IDN","INDONESIA" -"3407682560","3407732223","AU","AUS","AUSTRALIA" -"3407732224","3407732479","HK","HKG","HONG KONG" -"3407732480","3407750655","AU","AUS","AUSTRALIA" -"3407750656","3407751167","SG","SGP","SINGAPORE" -"3407751168","3407753215","AU","AUS","AUSTRALIA" -"3407753216","3407753727","HK","HKG","HONG KONG" -"3407753728","3407785471","AU","AUS","AUSTRALIA" -"3407785472","3407785727","NZ","NZL","NEW ZEALAND" -"3407785728","3407801343","AU","AUS","AUSTRALIA" -"3407801344","3407801855","ID","IDN","INDONESIA" -"3407801856","3407805951","AU","AUS","AUSTRALIA" -"3407805952","3407806463","ID","IDN","INDONESIA" -"3407806464","3407814655","AU","AUS","AUSTRALIA" -"3407814656","3407815167","HK","HKG","HONG KONG" -"3407815168","3407828991","AU","AUS","AUSTRALIA" -"3407828992","3407829503","US","USA","UNITED STATES" -"3407829504","3407837183","AU","AUS","AUSTRALIA" -"3407837184","3407837439","US","USA","UNITED STATES" -"3407837440","3407848447","AU","AUS","AUSTRALIA" -"3407848448","3407848959","ID","IDN","INDONESIA" -"3407848960","3407866367","AU","AUS","AUSTRALIA" -"3407866368","3407866623","GB","GBR","UNITED KINGDOM" -"3407866624","3407873023","AU","AUS","AUSTRALIA" -"3407873024","3407873535","IN","IND","INDIA" -"3407873536","3407928575","AU","AUS","AUSTRALIA" -"3407928576","3407928831","IN","IND","INDIA" -"3407928832","3407985919","AU","AUS","AUSTRALIA" -"3407985920","3407986175","KH","KHM","CAMBODIA" -"3407986176","3407987711","AU","AUS","AUSTRALIA" -"3407987712","3407987967","PH","PHL","PHILIPPINES" -"3407987968","3407988223","AU","AUS","AUSTRALIA" -"3407988224","3407988735","IN","IND","INDIA" -"3407988736","3407998975","AU","AUS","AUSTRALIA" -"3407998976","3407999231","TH","THA","THAILAND" -"3407999232","3408012543","AU","AUS","AUSTRALIA" -"3408012544","3408012799","MN","MNG","MONGOLIA" -"3408012800","3408023807","AU","AUS","AUSTRALIA" -"3408023808","3408024063","JP","JPN","JAPAN" -"3408024064","3408032767","AU","AUS","AUSTRALIA" -"3408032768","3408033279","IN","IND","INDIA" -"3408033280","3408033791","ID","IDN","INDONESIA" -"3408033792","3408039935","AU","AUS","AUSTRALIA" -"3408039936","3408040191","VN","VNM","VIET NAM" -"3408040192","3408042495","AU","AUS","AUSTRALIA" -"3408042496","3408042751","HK","HKG","HONG KONG" -"3408042752","3408066047","AU","AUS","AUSTRALIA" -"3408066048","3408066303","PH","PHL","PHILIPPINES" -"3408066304","3409396479","AU","AUS","AUSTRALIA" -"3409396480","3409396735","PH","PHL","PHILIPPINES" -"3409396736","3409418495","AU","AUS","AUSTRALIA" -"3409418496","3409418751","PL","POL","POLAND" -"3409418752","3409420287","AU","AUS","AUSTRALIA" -"3409420288","3409420543","IN","IND","INDIA" -"3409420544","3409423615","AU","AUS","AUSTRALIA" -"3409423616","3409423871","IN","IND","INDIA" -"3409423872","3409491711","AU","AUS","AUSTRALIA" -"3409491712","3409491967","SG","SGP","SINGAPORE" -"3409491968","3409503999","AU","AUS","AUSTRALIA" -"3409504000","3409504255","HK","HKG","HONG KONG" -"3409504256","3409505023","AU","AUS","AUSTRALIA" -"3409505024","3409505279","US","USA","UNITED STATES" -"3409505280","3409506559","AU","AUS","AUSTRALIA" -"3409506560","3409506815","IN","IND","INDIA" -"3409506816","3409509631","AU","AUS","AUSTRALIA" -"3409509632","3409509887","HK","HKG","HONG KONG" -"3409509888","3409510367","AU","AUS","AUSTRALIA" -"3409510368","3409510383","IN","IND","INDIA" -"3409510384","3409516543","AU","AUS","AUSTRALIA" -"3409516544","3409517055","ID","IDN","INDONESIA" -"3409517056","3409547519","AU","AUS","AUSTRALIA" -"3409547520","3409547775","NZ","NZL","NEW ZEALAND" -"3409547776","3409802831","AU","AUS","AUSTRALIA" -"3409802832","3409802847","MT","MLT","MALTA" -"3409802848","3409838335","AU","AUS","AUSTRALIA" -"3409838336","3409838591","MY","MYS","MALAYSIA" -"3409838592","3409876991","AU","AUS","AUSTRALIA" -"3409876992","3409878015","TH","THA","THAILAND" -"3409878016","3409882111","AU","AUS","AUSTRALIA" -"3409882112","3409883135","IN","IND","INDIA" -"3409883136","3409887999","AU","AUS","AUSTRALIA" -"3409888000","3409888255","SG","SGP","SINGAPORE" -"3409888256","3409969151","AU","AUS","AUSTRALIA" -"3409969152","3410755583","TW","TWN","TAIWAN" -"3410755584","3410771967","AU","AUS","AUSTRALIA" -"3410771968","3410780159","JP","JPN","JAPAN" -"3410780160","3410788351","BD","BGD","BANGLADESH" -"3410788352","3410792447","IN","IND","INDIA" -"3410792448","3410796543","BD","BGD","BANGLADESH" -"3410796544","3410797567","KH","KHM","CAMBODIA" -"3410797568","3410798591","JP","JPN","JAPAN" -"3410798592","3410799615","IN","IND","INDIA" -"3410799616","3410800639","SG","SGP","SINGAPORE" -"3410800640","3410804735","IN","IND","INDIA" -"3410804736","3410821119","PH","PHL","PHILIPPINES" -"3410821120","3410853887","TW","TWN","TAIWAN" -"3410853888","3410862079","HK","HKG","HONG KONG" -"3410862080","3410866175","AU","AUS","AUSTRALIA" -"3410866176","3410866431","KR","KOR","REPUBLIC OF KOREA" -"3410866432","3410866687","IN","IND","INDIA" -"3410866688","3410866943","VN","VNM","VIET NAM" -"3410866944","3410867199","AU","AUS","AUSTRALIA" -"3410867200","3410868223","HK","HKG","HONG KONG" -"3410868224","3410870271","US","USA","UNITED STATES" -"3410870272","3410874367","IN","IND","INDIA" -"3410874368","3410886655","ID","IDN","INDONESIA" -"3410886656","3410887679","TW","TWN","TAIWAN" -"3410887680","3410887935","IN","IND","INDIA" -"3410887936","3410888703","HK","HKG","HONG KONG" -"3410888704","3410890751","SG","SGP","SINGAPORE" -"3410890752","3410894847","AU","AUS","AUSTRALIA" -"3410894848","3410898943","HK","HKG","HONG KONG" -"3410898944","3410903039","AU","AUS","AUSTRALIA" -"3410903040","3410911231","HK","HKG","HONG KONG" -"3410911232","3410915327","TH","THA","THAILAND" -"3410915328","3410919423","ID","IDN","INDONESIA" -"3410919424","3410927615","IN","IND","INDIA" -"3410927616","3410931711","NP","NPL","NEPAL" -"3410931712","3410935807","TW","TWN","TAIWAN" -"3410935808","3410939903","MY","MYS","MALAYSIA" -"3410939904","3410943999","IN","IND","INDIA" -"3410944000","3410952191","JP","JPN","JAPAN" -"3410952192","3410956287","CN","CHN","CHINA" -"3410956288","3410958335","AU","AUS","AUSTRALIA" -"3410958336","3410958847","IN","IND","INDIA" -"3410958848","3410959359","ID","IDN","INDONESIA" -"3410959360","3410959615","VN","VNM","VIET NAM" -"3410959616","3410959871","ID","IDN","INDONESIA" -"3410959872","3410960383","AU","AUS","AUSTRALIA" -"3410960384","3410964479","GB","GBR","UNITED KINGDOM" -"3410964480","3410968575","JP","JPN","JAPAN" -"3410968576","3410984959","NZ","NZL","NEW ZEALAND" -"3410984960","3411017727","TW","TWN","TAIWAN" -"3411017728","3411018751","HK","HKG","HONG KONG" -"3411018752","3411019263","AU","AUS","AUSTRALIA" -"3411019264","3411019775","JP","JPN","JAPAN" -"3411019776","3411021823","ID","IDN","INDONESIA" -"3411021824","3411023871","MY","MYS","MALAYSIA" -"3411023872","3411025919","JP","JPN","JAPAN" -"3411025920","3411030015","AU","AUS","AUSTRALIA" -"3411030016","3411032063","NC","NCL","NEW CALEDONIA" -"3411032064","3411032319","TH","THA","THAILAND" -"3411032320","3411033087","AU","AUS","AUSTRALIA" -"3411033088","3411034111","NZ","NZL","NEW ZEALAND" -"3411034112","3411050495","HK","HKG","HONG KONG" -"3411050496","3411051519","PK","PAK","PAKISTAN" -"3411051520","3411054591","AU","AUS","AUSTRALIA" -"3411054592","3411058687","CN","CHN","CHINA" -"3411058688","3411062783","AU","AUS","AUSTRALIA" -"3411062784","3411063231","HK","HKG","HONG KONG" -"3411063232","3411063295","PK","PAK","PAKISTAN" -"3411063296","3411083263","HK","HKG","HONG KONG" -"3411083264","3411085311","AU","AUS","AUSTRALIA" -"3411085312","3411086335","KR","KOR","REPUBLIC OF KOREA" -"3411086336","3411087359","JP","JPN","JAPAN" -"3411087360","3411091455","CN","CHN","CHINA" -"3411091456","3411099647","SG","SGP","SINGAPORE" -"3411099648","3411107839","MM","MMR","MYANMAR" -"3411107840","3411111935","LK","LKA","SRI LANKA" -"3411111936","3411116031","JP","JPN","JAPAN" -"3411116032","3411124223","KR","KOR","REPUBLIC OF KOREA" -"3411124224","3411128319","MM","MMR","MYANMAR" -"3411128320","3411130367","HK","HKG","HONG KONG" -"3411130368","3411132415","ID","IDN","INDONESIA" -"3411132416","3411144703","PK","PAK","PAKISTAN" -"3411144704","3411146751","JP","JPN","JAPAN" -"3411146752","3411147775","ID","IDN","INDONESIA" -"3411147776","3411149311","HK","HKG","HONG KONG" -"3411149312","3411149823","MV","MDV","MALDIVES" -"3411149824","3411150847","IN","IND","INDIA" -"3411150848","3411152895","HK","HKG","HONG KONG" -"3411152896","3411154943","AU","AUS","AUSTRALIA" -"3411154944","3411156991","JP","JPN","JAPAN" -"3411156992","3411161087","PH","PHL","PHILIPPINES" -"3411161088","3411165183","PK","PAK","PAKISTAN" -"3411165184","3411173375","MY","MYS","MALAYSIA" -"3411173376","3411177471","AU","AUS","AUSTRALIA" -"3411177472","3411189759","JP","JPN","JAPAN" -"3411189760","3411197951","AU","AUS","AUSTRALIA" -"3411197952","3411202047","BD","BGD","BANGLADESH" -"3411202048","3411204607","AU","AUS","AUSTRALIA" -"3411204608","3411204863","IN","IND","INDIA" -"3411204864","3411205631","KR","KOR","REPUBLIC OF KOREA" -"3411205632","3411206143","HK","HKG","HONG KONG" -"3411206144","3411210239","KH","KHM","CAMBODIA" -"3411210240","3411212287","KR","KOR","REPUBLIC OF KOREA" -"3411212288","3411212799","PH","PHL","PHILIPPINES" -"3411212800","3411213311","IN","IND","INDIA" -"3411213312","3411215359","HK","HKG","HONG KONG" -"3411215360","3411216383","AU","AUS","AUSTRALIA" -"3411216384","3411218431","JP","JPN","JAPAN" -"3411218432","3411220479","PG","PNG","PAPUA NEW GUINEA" -"3411220480","3411226623","ID","IDN","INDONESIA" -"3411226624","3411228671","IO","IOT","BRITISH INDIAN OCEAN TERRITORY" -"3411228672","3411230719","CN","CHN","CHINA" -"3411230720","3411247103","HK","HKG","HONG KONG" -"3411247104","3411255295","KR","KOR","REPUBLIC OF KOREA" -"3411255296","3411263487","BD","BGD","BANGLADESH" -"3411263488","3411269631","AU","AUS","AUSTRALIA" -"3411269632","3411270143","TW","TWN","TAIWAN" -"3411270144","3411270399","NZ","NZL","NEW ZEALAND" -"3411270400","3411270655","AU","AUS","AUSTRALIA" -"3411270656","3411271679","JP","JPN","JAPAN" -"3411271680","3411275775","AU","AUS","AUSTRALIA" -"3411275776","3411277823","JP","JPN","JAPAN" -"3411277824","3411278335","IN","IND","INDIA" -"3411278336","3411278591","SG","SGP","SINGAPORE" -"3411278592","3411278847","FJ","FJI","FIJI" -"3411278848","3411296255","HK","HKG","HONG KONG" -"3411296256","3411312639","AU","AUS","AUSTRALIA" -"3411312640","3411313151","HK","HKG","HONG KONG" -"3411313152","3411313663","TW","TWN","TAIWAN" -"3411313664","3411313919","AU","AUS","AUSTRALIA" -"3411313920","3411314175","HK","HKG","HONG KONG" -"3411314176","3411314687","NZ","NZL","NEW ZEALAND" -"3411314688","3411316735","ID","IDN","INDONESIA" -"3411316736","3411318783","TW","TWN","TAIWAN" -"3411318784","3411320831","ID","IDN","INDONESIA" -"3411320832","3411329023","PH","PHL","PHILIPPINES" -"3411329024","3411341311","AU","AUS","AUSTRALIA" -"3411341312","3411345407","KR","KOR","REPUBLIC OF KOREA" -"3411345408","3411410943","HK","HKG","HONG KONG" -"3411410944","3411435519","CN","CHN","CHINA" -"3411435520","3411443711","AU","AUS","AUSTRALIA" -"3411443712","3411460095","HK","HKG","HONG KONG" -"3411460096","3411464191","NZ","NZL","NEW ZEALAND" -"3411464192","3411468287","AU","AUS","AUSTRALIA" -"3411468288","3411470335","JP","JPN","JAPAN" -"3411470336","3411472383","HK","HKG","HONG KONG" -"3411472384","3411475199","JP","JPN","JAPAN" -"3411475200","3411475455","AU","AUS","AUSTRALIA" -"3411475456","3411475967","HK","HKG","HONG KONG" -"3411475968","3411509247","AU","AUS","AUSTRALIA" -"3411509248","3411542015","PH","PHL","PHILIPPINES" -"3411542016","3411550207","IN","IND","INDIA" -"3411550208","3411558399","CN","CHN","CHINA" -"3411558400","3411558911","HK","HKG","HONG KONG" -"3411558912","3411558927","ID","IDN","INDONESIA" -"3411558928","3411558943","HK","HKG","HONG KONG" -"3411558944","3411558959","ID","IDN","INDONESIA" -"3411558960","3411558975","HK","HKG","HONG KONG" -"3411558976","3411558983","AF","AFG","AFGHANISTAN" -"3411558984","3411559007","HK","HKG","HONG KONG" -"3411559008","3411559015","MY","MYS","MALAYSIA" -"3411559016","3411559023","HK","HKG","HONG KONG" -"3411559024","3411559031","ID","IDN","INDONESIA" -"3411559032","3411559035","NP","NPL","NEPAL" -"3411559036","3411559039","PK","PAK","PAKISTAN" -"3411559040","3411559063","ID","IDN","INDONESIA" -"3411559064","3411559071","MY","MYS","MALAYSIA" -"3411559072","3411559079","AF","AFG","AFGHANISTAN" -"3411559080","3411559087","MY","MYS","MALAYSIA" -"3411559088","3411559095","ID","IDN","INDONESIA" -"3411559096","3411559103","PK","PAK","PAKISTAN" -"3411559104","3411559111","MY","MYS","MALAYSIA" -"3411559112","3411559135","PK","PAK","PAKISTAN" -"3411559136","3411559143","HK","HKG","HONG KONG" -"3411559144","3411559167","MY","MYS","MALAYSIA" -"3411559168","3411559199","BD","BGD","BANGLADESH" -"3411559200","3411559231","HK","HKG","HONG KONG" -"3411559232","3411559295","BD","BGD","BANGLADESH" -"3411559296","3411559303","ID","IDN","INDONESIA" -"3411559304","3411559311","HK","HKG","HONG KONG" -"3411559312","3411559327","NP","NPL","NEPAL" -"3411559328","3411559343","HK","HKG","HONG KONG" -"3411559344","3411559359","ID","IDN","INDONESIA" -"3411559360","3411559423","BD","BGD","BANGLADESH" -"3411559424","3411559455","HK","HKG","HONG KONG" -"3411559456","3411559487","BD","BGD","BANGLADESH" -"3411559488","3411559551","HK","HKG","HONG KONG" -"3411559552","3411559559","BD","BGD","BANGLADESH" -"3411559560","3411559567","HK","HKG","HONG KONG" -"3411559568","3411559679","BD","BGD","BANGLADESH" -"3411559680","3411559935","ID","IDN","INDONESIA" -"3411559936","3411560031","BD","BGD","BANGLADESH" -"3411560032","3411560063","HK","HKG","HONG KONG" -"3411560064","3411560319","BD","BGD","BANGLADESH" -"3411560320","3411560447","HK","HKG","HONG KONG" -"3411560448","3411560703","NP","NPL","NEPAL" -"3411560704","3411561983","BD","BGD","BANGLADESH" -"3411561984","3411562047","HK","HKG","HONG KONG" -"3411562048","3411562111","PK","PAK","PAKISTAN" -"3411562112","3411562495","HK","HKG","HONG KONG" -"3411562496","3411563015","MY","MYS","MALAYSIA" -"3411563016","3411563023","TH","THA","THAILAND" -"3411563024","3411563047","ID","IDN","INDONESIA" -"3411563048","3411563055","LK","LKA","SRI LANKA" -"3411563056","3411563135","ID","IDN","INDONESIA" -"3411563136","3411563143","TH","THA","THAILAND" -"3411563144","3411563183","ID","IDN","INDONESIA" -"3411563184","3411563191","HK","HKG","HONG KONG" -"3411563192","3411563247","ID","IDN","INDONESIA" -"3411563248","3411563255","AF","AFG","AFGHANISTAN" -"3411563256","3411563263","ID","IDN","INDONESIA" -"3411563264","3411563519","MY","MYS","MALAYSIA" -"3411563520","3411563775","BD","BGD","BANGLADESH" -"3411563776","3411564031","HK","HKG","HONG KONG" -"3411564032","3411564039","ID","IDN","INDONESIA" -"3411564040","3411564047","HK","HKG","HONG KONG" -"3411564048","3411564063","ID","IDN","INDONESIA" -"3411564064","3411564175","HK","HKG","HONG KONG" -"3411564176","3411564183","ID","IDN","INDONESIA" -"3411564184","3411564199","HK","HKG","HONG KONG" -"3411564200","3411564207","ID","IDN","INDONESIA" -"3411564208","3411564223","HK","HKG","HONG KONG" -"3411564224","3411564231","ID","IDN","INDONESIA" -"3411564232","3411564247","HK","HKG","HONG KONG" -"3411564248","3411564255","ID","IDN","INDONESIA" -"3411564256","3411564287","HK","HKG","HONG KONG" -"3411564288","3411564543","BD","BGD","BANGLADESH" -"3411564544","3411564551","ID","IDN","INDONESIA" -"3411564552","3411564559","HK","HKG","HONG KONG" -"3411564560","3411564567","ID","IDN","INDONESIA" -"3411564568","3411564571","HK","HKG","HONG KONG" -"3411564572","3411564611","AF","AFG","AFGHANISTAN" -"3411564612","3411564615","HK","HKG","HONG KONG" -"3411564616","3411564623","PG","PNG","PAPUA NEW GUINEA" -"3411564624","3411564631","HK","HKG","HONG KONG" -"3411564632","3411564663","MY","MYS","MALAYSIA" -"3411564664","3411564679","ID","IDN","INDONESIA" -"3411564680","3411564687","AF","AFG","AFGHANISTAN" -"3411564688","3411564743","HK","HKG","HONG KONG" -"3411564744","3411564751","MY","MYS","MALAYSIA" -"3411564752","3411565055","HK","HKG","HONG KONG" -"3411565056","3411565119","BD","BGD","BANGLADESH" -"3411565120","3411565151","HK","HKG","HONG KONG" -"3411565152","3411565183","BD","BGD","BANGLADESH" -"3411565184","3411565311","IQ","IRQ","IRAQ" -"3411565312","3411565567","HK","HKG","HONG KONG" -"3411565568","3411565823","AF","AFG","AFGHANISTAN" -"3411565824","3411566591","HK","HKG","HONG KONG" -"3411566592","3411570687","BD","BGD","BANGLADESH" -"3411570688","3411574783","AU","AUS","AUSTRALIA" -"3411574784","3411582975","IN","IND","INDIA" -"3411582976","3411587071","HK","HKG","HONG KONG" -"3411587072","3411591167","JP","JPN","JAPAN" -"3411591168","3411599359","CN","CHN","CHINA" -"3411599360","3411607551","AU","AUS","AUSTRALIA" -"3411607552","3411608575","CN","CHN","CHINA" -"3411608576","3411608831","IN","IND","INDIA" -"3411608832","3411609087","AU","AUS","AUSTRALIA" -"3411609088","3411609599","HK","HKG","HONG KONG" -"3411609600","3411611647","AU","AUS","AUSTRALIA" -"3411611648","3411615743","ID","IDN","INDONESIA" -"3411615744","3411623935","JP","JPN","JAPAN" -"3411623936","3411640319","AU","AUS","AUSTRALIA" -"3411640320","3411641343","JP","JPN","JAPAN" -"3411641344","3411641599","IN","IND","INDIA" -"3411641600","3411641855","HK","HKG","HONG KONG" -"3411641856","3411642367","IN","IND","INDIA" -"3411642368","3411643391","AU","AUS","AUSTRALIA" -"3411643392","3411644415","VN","VNM","VIET NAM" -"3411644416","3411644927","AU","AUS","AUSTRALIA" -"3411644928","3411645951","ID","IDN","INDONESIA" -"3411645952","3411646207","SG","SGP","SINGAPORE" -"3411646208","3411647487","IN","IND","INDIA" -"3411647488","3411648511","HK","HKG","HONG KONG" -"3411648512","3411656703","NZ","NZL","NEW ZEALAND" -"3411656704","3411673087","AU","AUS","AUSTRALIA" -"3411673088","3411674111","CN","CHN","CHINA" -"3411674112","3411674623","IN","IND","INDIA" -"3411674624","3411675135","HK","HKG","HONG KONG" -"3411675136","3411676159","AU","AUS","AUSTRALIA" -"3411676160","3411677183","PK","PAK","PAKISTAN" -"3411677184","3411679231","JP","JPN","JAPAN" -"3411679232","3411681279","AU","AUS","AUSTRALIA" -"3411681280","3411689471","KR","KOR","REPUBLIC OF KOREA" -"3411689472","3411705855","IN","IND","INDIA" -"3411705856","3411730431","CN","CHN","CHINA" -"3411730432","3411738623","HK","HKG","HONG KONG" -"3411738624","3411746815","TW","TWN","TAIWAN" -"3411746816","3411755007","CN","CHN","CHINA" -"3411755008","3411763199","AU","AUS","AUSTRALIA" -"3411763200","3411767295","CN","CHN","CHINA" -"3411767296","3411769343","MN","MNG","MONGOLIA" -"3411769344","3411771391","CN","CHN","CHINA" -"3411771392","3411773439","HK","HKG","HONG KONG" -"3411773440","3411773695","SC","SYC","SEYCHELLES" -"3411773696","3411773951","HK","HKG","HONG KONG" -"3411773952","3411774463","BD","BGD","BANGLADESH" -"3411774464","3411776511","HK","HKG","HONG KONG" -"3411776512","3411776767","SC","SYC","SEYCHELLES" -"3411776768","3411777663","HK","HKG","HONG KONG" -"3411777664","3411777791","BD","BGD","BANGLADESH" -"3411777792","3411779519","HK","HKG","HONG KONG" -"3411779520","3411779535","ID","IDN","INDONESIA" -"3411779536","3411779583","HK","HKG","HONG KONG" -"3411779584","3411787775","JP","JPN","JAPAN" -"3411787776","3411795967","IN","IND","INDIA" -"3411795968","3411804159","AU","AUS","AUSTRALIA" -"3411804160","3411805183","CN","CHN","CHINA" -"3411805184","3411805695","PK","PAK","PAKISTAN" -"3411805696","3411805951","JP","JPN","JAPAN" -"3411805952","3411806207","AU","AUS","AUSTRALIA" -"3411806208","3411808255","PH","PHL","PHILIPPINES" -"3411808256","3411810303","JP","JPN","JAPAN" -"3411810304","3411810559","MN","MNG","MONGOLIA" -"3411810560","3411810815","NZ","NZL","NEW ZEALAND" -"3411810816","3411812351","AU","AUS","AUSTRALIA" -"3411812352","3411820543","IN","IND","INDIA" -"3411820544","3411836927","SG","SGP","SINGAPORE" -"3411836928","3411845119","MY","MYS","MALAYSIA" -"3411845120","3411853311","CN","CHN","CHINA" -"3411853312","3411857407","IN","IND","INDIA" -"3411857408","3411857663","TW","TWN","TAIWAN" -"3411857664","3411857919","JP","JPN","JAPAN" -"3411857920","3411858175","SG","SGP","SINGAPORE" -"3411858176","3411858431","HK","HKG","HONG KONG" -"3411858432","3411858687","JP","JPN","JAPAN" -"3411858688","3411858943","NZ","NZL","NEW ZEALAND" -"3411858944","3411859199","JP","JPN","JAPAN" -"3411859200","3411859455","SG","SGP","SINGAPORE" -"3411859456","3411860991","HK","HKG","HONG KONG" -"3411860992","3411861375","JP","JPN","JAPAN" -"3411861376","3411861487","HK","HKG","HONG KONG" -"3411861488","3411861503","JP","JPN","JAPAN" -"3411861504","3411869695","AU","AUS","AUSTRALIA" -"3411869696","3411943423","CN","CHN","CHINA" -"3411943424","3411951615","AU","AUS","AUSTRALIA" -"3411951616","3411967999","LK","LKA","SRI LANKA" -"3411968000","3411984383","AU","AUS","AUSTRALIA" -"3411984384","3412000767","IN","IND","INDIA" -"3412000768","3412002815","CN","CHN","CHINA" -"3412002816","3412004863","GU","GUM","GUAM" -"3412004864","3412017151","JP","JPN","JAPAN" -"3412017152","3412025343","SG","SGP","SINGAPORE" -"3412025344","3412033535","CN","CHN","CHINA" -"3412033536","3412066303","TW","TWN","TAIWAN" -"3412066304","3412107263","NZ","NZL","NEW ZEALAND" -"3412107264","3412115455","AU","AUS","AUSTRALIA" -"3412115456","3412123647","NZ","NZL","NEW ZEALAND" -"3412123648","3412131839","AU","AUS","AUSTRALIA" -"3412131840","3412213759","NZ","NZL","NEW ZEALAND" -"3412213760","3412221951","AU","AUS","AUSTRALIA" -"3412221952","3412230143","IN","IND","INDIA" -"3412230144","3412246527","HK","HKG","HONG KONG" -"3412246528","3412246783","AU","AUS","AUSTRALIA" -"3412246784","3412246799","HK","HKG","HONG KONG" -"3412246800","3412246847","AU","AUS","AUSTRALIA" -"3412246848","3412246911","IN","IND","INDIA" -"3412246912","3412246927","SG","SGP","SINGAPORE" -"3412246928","3412246951","AU","AUS","AUSTRALIA" -"3412246952","3412246959","CN","CHN","CHINA" -"3412246960","3412246967","JP","JPN","JAPAN" -"3412246968","3412246975","AU","AUS","AUSTRALIA" -"3412246976","3412247007","JP","JPN","JAPAN" -"3412247008","3412247023","IN","IND","INDIA" -"3412247024","3412247031","CN","CHN","CHINA" -"3412247032","3412247039","NZ","NZL","NEW ZEALAND" -"3412247040","3412247055","HK","HKG","HONG KONG" -"3412247056","3412247071","CN","CHN","CHINA" -"3412247072","3412247103","JP","JPN","JAPAN" -"3412247104","3412247167","AU","AUS","AUSTRALIA" -"3412247168","3412247319","IN","IND","INDIA" -"3412247320","3412247327","AU","AUS","AUSTRALIA" -"3412247328","3412247335","IN","IND","INDIA" -"3412247336","3412247343","SG","SGP","SINGAPORE" -"3412247344","3412247359","CN","CHN","CHINA" -"3412247360","3412247375","AU","AUS","AUSTRALIA" -"3412247376","3412247391","MY","MYS","MALAYSIA" -"3412247392","3412247399","SG","SGP","SINGAPORE" -"3412247400","3412247423","AU","AUS","AUSTRALIA" -"3412247424","3412247439","HK","HKG","HONG KONG" -"3412247440","3412247455","IN","IND","INDIA" -"3412247456","3412247487","AU","AUS","AUSTRALIA" -"3412247488","3412247551","CN","CHN","CHINA" -"3412247552","3412248831","AU","AUS","AUSTRALIA" -"3412248832","3412249087","CN","CHN","CHINA" -"3412249088","3412249103","HK","HKG","HONG KONG" -"3412249104","3412249119","IN","IND","INDIA" -"3412249120","3412249151","AU","AUS","AUSTRALIA" -"3412249152","3412249215","CN","CHN","CHINA" -"3412249216","3412249231","AU","AUS","AUSTRALIA" -"3412249232","3412249239","HK","HKG","HONG KONG" -"3412249240","3412249243","SG","SGP","SINGAPORE" -"3412249244","3412249247","AU","AUS","AUSTRALIA" -"3412249248","3412249271","CN","CHN","CHINA" -"3412249272","3412249279","MY","MYS","MALAYSIA" -"3412249280","3412249471","IN","IND","INDIA" -"3412249472","3412249599","TW","TWN","TAIWAN" -"3412249600","3412249855","AU","AUS","AUSTRALIA" -"3412249856","3412249863","SG","SGP","SINGAPORE" -"3412249864","3412249871","AU","AUS","AUSTRALIA" -"3412249872","3412249879","HK","HKG","HONG KONG" -"3412249880","3412249887","JP","JPN","JAPAN" -"3412249888","3412249903","CN","CHN","CHINA" -"3412249904","3412249983","SG","SGP","SINGAPORE" -"3412249984","3412250015","IN","IND","INDIA" -"3412250016","3412250023","HK","HKG","HONG KONG" -"3412250024","3412250031","CN","CHN","CHINA" -"3412250032","3412250063","IN","IND","INDIA" -"3412250064","3412250079","AU","AUS","AUSTRALIA" -"3412250080","3412250087","KR","KOR","REPUBLIC OF KOREA" -"3412250088","3412250367","HK","HKG","HONG KONG" -"3412250368","3412250375","CN","CHN","CHINA" -"3412250376","3412250383","TW","TWN","TAIWAN" -"3412250384","3412250399","SG","SGP","SINGAPORE" -"3412250400","3412250431","KR","KOR","REPUBLIC OF KOREA" -"3412250432","3412250447","IN","IND","INDIA" -"3412250448","3412250479","CN","CHN","CHINA" -"3412250480","3412250495","HK","HKG","HONG KONG" -"3412250496","3412250503","JP","JPN","JAPAN" -"3412250504","3412250511","HK","HKG","HONG KONG" -"3412250512","3412250527","TW","TWN","TAIWAN" -"3412250528","3412250559","IN","IND","INDIA" -"3412250560","3412250575","SG","SGP","SINGAPORE" -"3412250576","3412250599","HK","HKG","HONG KONG" -"3412250600","3412250607","AU","AUS","AUSTRALIA" -"3412250608","3412250615","KR","KOR","REPUBLIC OF KOREA" -"3412250616","3412250623","AU","AUS","AUSTRALIA" -"3412250624","3412250879","JP","JPN","JAPAN" -"3412250880","3412250927","AU","AUS","AUSTRALIA" -"3412250928","3412250959","SG","SGP","SINGAPORE" -"3412250960","3412250991","JP","JPN","JAPAN" -"3412250992","3412251007","HK","HKG","HONG KONG" -"3412251008","3412251071","CN","CHN","CHINA" -"3412251072","3412251103","AU","AUS","AUSTRALIA" -"3412251104","3412251119","PH","PHL","PHILIPPINES" -"3412251120","3412251135","AU","AUS","AUSTRALIA" -"3412251136","3412251151","CN","CHN","CHINA" -"3412251152","3412251167","AU","AUS","AUSTRALIA" -"3412251168","3412251231","HK","HKG","HONG KONG" -"3412251232","3412251239","CN","CHN","CHINA" -"3412251240","3412251247","AU","AUS","AUSTRALIA" -"3412251248","3412251263","IN","IND","INDIA" -"3412251264","3412251391","AU","AUS","AUSTRALIA" -"3412251392","3412251647","TW","TWN","TAIWAN" -"3412251648","3412251903","AU","AUS","AUSTRALIA" -"3412251904","3412251919","HK","HKG","HONG KONG" -"3412251920","3412251927","AU","AUS","AUSTRALIA" -"3412251928","3412251935","CN","CHN","CHINA" -"3412251936","3412251967","HK","HKG","HONG KONG" -"3412251968","3412252031","SG","SGP","SINGAPORE" -"3412252032","3412252079","HK","HKG","HONG KONG" -"3412252080","3412252087","CN","CHN","CHINA" -"3412252088","3412252095","HK","HKG","HONG KONG" -"3412252096","3412252103","JP","JPN","JAPAN" -"3412252104","3412252111","HK","HKG","HONG KONG" -"3412252112","3412252159","IN","IND","INDIA" -"3412252160","3412252415","KR","KOR","REPUBLIC OF KOREA" -"3412252416","3412252671","JP","JPN","JAPAN" -"3412252672","3412252927","HK","HKG","HONG KONG" -"3412252928","3412253087","AU","AUS","AUSTRALIA" -"3412253088","3412253091","JP","JPN","JAPAN" -"3412253092","3412253099","AU","AUS","AUSTRALIA" -"3412253100","3412253103","HK","HKG","HONG KONG" -"3412253104","3412253183","AU","AUS","AUSTRALIA" -"3412253184","3412253439","SG","SGP","SINGAPORE" -"3412253440","3412253695","KR","KOR","REPUBLIC OF KOREA" -"3412253696","3412254719","JP","JPN","JAPAN" -"3412254720","3412262911","NR","NRU","NAURU" -"3412262912","3412264959","JP","JPN","JAPAN" -"3412264960","3412267007","AU","AUS","AUSTRALIA" -"3412267008","3412271103","CN","CHN","CHINA" -"3412271104","3412273151","NZ","NZL","NEW ZEALAND" -"3412273152","3412275199","IN","IND","INDIA" -"3412275200","3412279295","PK","PAK","PAKISTAN" -"3412279296","3412281343","NZ","NZL","NEW ZEALAND" -"3412281344","3412283391","JP","JPN","JAPAN" -"3412283392","3412287487","CN","CHN","CHINA" -"3412287488","3412295679","ID","IDN","INDONESIA" -"3412295680","3412296191","NZ","NZL","NEW ZEALAND" -"3412296192","3412296703","ID","IDN","INDONESIA" -"3412296704","3412297727","NZ","NZL","NEW ZEALAND" -"3412297728","3412298495","SC","SYC","SEYCHELLES" -"3412298496","3412298751","MY","MYS","MALAYSIA" -"3412298752","3412299263","CN","CHN","CHINA" -"3412299264","3412299519","AU","AUS","AUSTRALIA" -"3412299520","3412299775","HK","HKG","HONG KONG" -"3412299776","3412302847","AU","AUS","AUSTRALIA" -"3412302848","3412303871","WS","WSM","SAMOA" -"3412303872","3412312063","PK","PAK","PAKISTAN" -"3412312064","3412320255","IN","IND","INDIA" -"3412320256","3412322303","JP","JPN","JAPAN" -"3412322304","3412324351","PH","PHL","PHILIPPINES" -"3412324352","3412326399","JP","JPN","JAPAN" -"3412326400","3412327423","VN","VNM","VIET NAM" -"3412327424","3412327935","TH","THA","THAILAND" -"3412327936","3412328191","HK","HKG","HONG KONG" -"3412328192","3412328447","WS","WSM","SAMOA" -"3412328448","3412336639","AU","AUS","AUSTRALIA" -"3412336640","3412340735","CN","CHN","CHINA" -"3412340736","3412343039","AU","AUS","AUSTRALIA" -"3412343040","3412343295","IN","IND","INDIA" -"3412343296","3412344319","AU","AUS","AUSTRALIA" -"3412344320","3412344575","SG","SGP","SINGAPORE" -"3412344576","3412344831","AU","AUS","AUSTRALIA" -"3412344832","3412348927","IN","IND","INDIA" -"3412348928","3412361215","CN","CHN","CHINA" -"3412361216","3412369407","AU","AUS","AUSTRALIA" -"3412369408","3412377599","KR","KOR","REPUBLIC OF KOREA" -"3412377600","3412381695","CN","CHN","CHINA" -"3412381696","3412385791","NZ","NZL","NEW ZEALAND" -"3412385792","3412393983","AU","AUS","AUSTRALIA" -"3412393984","3412426751","IN","IND","INDIA" -"3412426752","3412434943","TH","THA","THAILAND" -"3412434944","3412443135","PK","PAK","PAKISTAN" -"3412443136","3412451327","SG","SGP","SINGAPORE" -"3412451328","3412594687","AU","AUS","AUSTRALIA" -"3412594688","3412596735","IN","IND","INDIA" -"3412596736","3412598783","MV","MDV","MALDIVES" -"3412598784","3412602879","AU","AUS","AUSTRALIA" -"3412602880","3412606975","NC","NCL","NEW CALEDONIA" -"3412606976","3412615167","PH","PHL","PHILIPPINES" -"3412615168","3412656127","JP","JPN","JAPAN" -"3412656128","3412672511","HK","HKG","HONG KONG" -"3412672512","3412680703","JP","JPN","JAPAN" -"3412680704","3412697087","AU","AUS","AUSTRALIA" -"3412697088","3412705279","IN","IND","INDIA" -"3412705280","3412713471","AU","AUS","AUSTRALIA" -"3412713472","3412721663","TW","TWN","TAIWAN" -"3412721664","3412787199","MY","MYS","MALAYSIA" -"3412787200","3412803583","TW","TWN","TAIWAN" -"3412803584","3412819967","AU","AUS","AUSTRALIA" -"3412819968","3412852735","TH","THA","THAILAND" -"3412852736","3412918271","AU","AUS","AUSTRALIA" -"3412918272","3412926463","KR","KOR","REPUBLIC OF KOREA" -"3412926464","3412934655","MY","MYS","MALAYSIA" -"3412934656","3412951039","IN","IND","INDIA" -"3412951040","3413000191","NZ","NZL","NEW ZEALAND" -"3413000192","3413004287","LA","LAO","LAO PEOPLE'S DEMOCRATIC REPUBLIC" -"3413004288","3413008383","IN","IND","INDIA" -"3413008384","3413016575","JP","JPN","JAPAN" -"3413016576","3413024767","AU","AUS","AUSTRALIA" -"3413024768","3413032959","CN","CHN","CHINA" -"3413032960","3413037055","AU","AUS","AUSTRALIA" -"3413037056","3413041151","IN","IND","INDIA" -"3413041152","3413043199","JP","JPN","JAPAN" -"3413043200","3413044479","AU","AUS","AUSTRALIA" -"3413044480","3413044735","SG","SGP","SINGAPORE" -"3413044736","3413045247","AU","AUS","AUSTRALIA" -"3413045248","3413047295","IN","IND","INDIA" -"3413047296","3413102591","AU","AUS","AUSTRALIA" -"3413102592","3413106687","TW","TWN","TAIWAN" -"3413106688","3413110783","PH","PHL","PHILIPPINES" -"3413110784","3413112831","JP","JPN","JAPAN" -"3413112832","3413113855","IN","IND","INDIA" -"3413113856","3413133311","JP","JPN","JAPAN" -"3413133312","3413135359","BD","BGD","BANGLADESH" -"3413135360","3413139455","HK","HKG","HONG KONG" -"3413139456","3413147647","AU","AUS","AUSTRALIA" -"3413147648","3413155839","IN","IND","INDIA" -"3413155840","3413164031","SG","SGP","SINGAPORE" -"3413164032","3413172223","BD","BGD","BANGLADESH" -"3413172224","3413180415","MY","MYS","MALAYSIA" -"3413180416","3413213183","TH","THA","THAILAND" -"3413213184","3413229567","VN","VNM","VIET NAM" -"3413229568","3413245951","AU","AUS","AUSTRALIA" -"3413245952","3413262335","MY","MYS","MALAYSIA" -"3413262336","3413270527","PH","PHL","PHILIPPINES" -"3413270528","3413278719","TH","THA","THAILAND" -"3413278720","3413295103","NZ","NZL","NEW ZEALAND" -"3413295104","3413303295","JP","JPN","JAPAN" -"3413303296","3413304319","ID","IDN","INDONESIA" -"3413304320","3413305343","JP","JPN","JAPAN" -"3413305344","3413306367","IN","IND","INDIA" -"3413306368","3413307391","PH","PHL","PHILIPPINES" -"3413307392","3413308415","IN","IND","INDIA" -"3413308416","3413309439","CN","CHN","CHINA" -"3413309440","3413310463","JP","JPN","JAPAN" -"3413310464","3413311487","HK","HKG","HONG KONG" -"3413311488","3413327871","LK","LKA","SRI LANKA" -"3413327872","3413344255","IN","IND","INDIA" -"3413344256","3413360639","PH","PHL","PHILIPPINES" -"3413360640","3413377023","MY","MYS","MALAYSIA" -"3413377024","3413524479","SG","SGP","SINGAPORE" -"3413524480","3413540863","TH","THA","THAILAND" -"3413540864","3413557247","NZ","NZL","NEW ZEALAND" -"3413557248","3413565439","CN","CHN","CHINA" -"3413565440","3413569535","TW","TWN","TAIWAN" -"3413569536","3413569791","SG","SGP","SINGAPORE" -"3413569792","3413570047","NZ","NZL","NEW ZEALAND" -"3413570048","3413570303","KH","KHM","CAMBODIA" -"3413570304","3413570559","AU","AUS","AUSTRALIA" -"3413570560","3413571583","PH","PHL","PHILIPPINES" -"3413571584","3413572607","CN","CHN","CHINA" -"3413572608","3413573631","JP","JPN","JAPAN" -"3413573632","3413573887","AU","AUS","AUSTRALIA" -"3413573888","3413574143","JP","JPN","JAPAN" -"3413574144","3413574399","HK","HKG","HONG KONG" -"3413574400","3413574655","TW","TWN","TAIWAN" -"3413574656","3413575679","PH","PHL","PHILIPPINES" -"3413575680","3413576703","VN","VNM","VIET NAM" -"3413576704","3413576959","AU","AUS","AUSTRALIA" -"3413576960","3413577215","ID","IDN","INDONESIA" -"3413577216","3413579007","AU","AUS","AUSTRALIA" -"3413579008","3413579775","NL","NLD","NETHERLANDS" -"3413579776","3413582847","CN","CHN","CHINA" -"3413582848","3413583871","VN","VNM","VIET NAM" -"3413583872","3413584127","JP","JPN","JAPAN" -"3413584128","3413584383","ID","IDN","INDONESIA" -"3413584384","3413584895","AU","AUS","AUSTRALIA" -"3413584896","3413585919","VN","VNM","VIET NAM" -"3413585920","3413586175","ID","IDN","INDONESIA" -"3413586176","3413586687","IN","IND","INDIA" -"3413586688","3413586943","AU","AUS","AUSTRALIA" -"3413586944","3413587967","ID","IDN","INDONESIA" -"3413587968","3413588223","NZ","NZL","NEW ZEALAND" -"3413588224","3413588479","MY","MYS","MALAYSIA" -"3413588480","3413593087","VN","VNM","VIET NAM" -"3413593088","3413593599","AU","AUS","AUSTRALIA" -"3413593600","3413593855","SG","SGP","SINGAPORE" -"3413593856","3413594111","KH","KHM","CAMBODIA" -"3413594112","3413595135","CN","CHN","CHINA" -"3413595136","3413595391","NZ","NZL","NEW ZEALAND" -"3413595392","3413595647","JP","JPN","JAPAN" -"3413595648","3413639167","AU","AUS","AUSTRALIA" -"3413639168","3413704703","SG","SGP","SINGAPORE" -"3413704704","3413737471","MY","MYS","MALAYSIA" -"3413737472","3413753855","TH","THA","THAILAND" -"3413753856","3413762047","AU","AUS","AUSTRALIA" -"3413762048","3413770239","TW","TWN","TAIWAN" -"3413770240","3413786623","IN","IND","INDIA" -"3413786624","3413835775","AU","AUS","AUSTRALIA" -"3413835776","3413843967","SG","SGP","SINGAPORE" -"3413843968","3413848063","IN","IND","INDIA" -"3413848064","3413850111","SG","SGP","SINGAPORE" -"3413850112","3413850879","JP","JPN","JAPAN" -"3413850880","3413851135","AU","AUS","AUSTRALIA" -"3413851136","3413852159","ID","IDN","INDONESIA" -"3413852160","3413868543","AU","AUS","AUSTRALIA" -"3413868544","3413884927","IN","IND","INDIA" -"3413884928","3413893119","KR","KOR","REPUBLIC OF KOREA" -"3413893120","3413899199","ID","IDN","INDONESIA" -"3413899200","3413899203","IN","IND","INDIA" -"3413899204","3413901311","ID","IDN","INDONESIA" -"3413901312","3413902847","SG","SGP","SINGAPORE" -"3413902848","3413903359","JP","JPN","JAPAN" -"3413903360","3413905407","HK","HKG","HONG KONG" -"3413905408","3413907455","IN","IND","INDIA" -"3413907456","3413917695","PK","PAK","PAKISTAN" -"3413917696","3413925887","JP","JPN","JAPAN" -"3413925888","3413934079","AU","AUS","AUSTRALIA" -"3413934080","3413946367","IN","IND","INDIA" -"3413946368","3413950463","AU","AUS","AUSTRALIA" -"3413950464","3413966847","IN","IND","INDIA" -"3413966848","3414050303","SG","SGP","SINGAPORE" -"3414050304","3414050815","US","USA","UNITED STATES" -"3414050816","3414098175","SG","SGP","SINGAPORE" -"3414098176","3414098191","ID","IDN","INDONESIA" -"3414098192","3414155519","SG","SGP","SINGAPORE" -"3414155520","3414155775","PH","PHL","PHILIPPINES" -"3414155776","3414163455","SG","SGP","SINGAPORE" -"3414163456","3414171647","PK","PAK","PAKISTAN" -"3414171648","3414179839","CN","CHN","CHINA" -"3414179840","3414188031","ID","IDN","INDONESIA" -"3414188032","3414196223","CN","CHN","CHINA" -"3414196224","3414204415","AU","AUS","AUSTRALIA" -"3414204416","3414220799","KR","KOR","REPUBLIC OF KOREA" -"3414220800","3414223871","AU","AUS","AUSTRALIA" -"3414223872","3414224895","KR","KOR","REPUBLIC OF KOREA" -"3414224896","3414226943","VN","VNM","VIET NAM" -"3414226944","3414227967","ID","IDN","INDONESIA" -"3414227968","3414230015","PK","PAK","PAKISTAN" -"3414230016","3414230527","PH","PHL","PHILIPPINES" -"3414230528","3414231039","KR","KOR","REPUBLIC OF KOREA" -"3414231040","3414245375","AU","AUS","AUSTRALIA" -"3414245376","3414253567","HK","HKG","HONG KONG" -"3414253568","3414261759","JP","JPN","JAPAN" -"3414261760","3414269951","AU","AUS","AUSTRALIA" -"3414269952","3414278143","JP","JPN","JAPAN" -"3414278144","3414294527","IN","IND","INDIA" -"3414294528","3414302719","PK","PAK","PAKISTAN" -"3414302720","3414310911","CN","CHN","CHINA" -"3414310912","3414327295","KR","KOR","REPUBLIC OF KOREA" -"3414327296","3414335487","TH","THA","THAILAND" -"3414335488","3414339583","AU","AUS","AUSTRALIA" -"3414339584","3414343679","KR","KOR","REPUBLIC OF KOREA" -"3414343680","3414360063","ID","IDN","INDONESIA" -"3414360064","3414376447","AU","AUS","AUSTRALIA" -"3414376448","3414409215","PH","PHL","PHILIPPINES" -"3414409216","3414413311","JP","JPN","JAPAN" -"3414413312","3414417407","TH","THA","THAILAND" -"3414417408","3414425599","HK","HKG","HONG KONG" -"3414425600","3414433791","AU","AUS","AUSTRALIA" -"3414433792","3414441983","CN","CHN","CHINA" -"3414441984","3414450175","AU","AUS","AUSTRALIA" -"3414450176","3414458367","JP","JPN","JAPAN" -"3414458368","3414466559","IN","IND","INDIA" -"3414466560","3414474751","KR","KOR","REPUBLIC OF KOREA" -"3414474752","3414478847","HK","HKG","HONG KONG" -"3414478848","3414482943","IN","IND","INDIA" -"3414482944","3414491135","AU","AUS","AUSTRALIA" -"3414491136","3414523903","TW","TWN","TAIWAN" -"3414523904","3414532095","JP","JPN","JAPAN" -"3414532096","3414540287","KR","KOR","REPUBLIC OF KOREA" -"3414540288","3414555647","JP","JPN","JAPAN" -"3414555648","3414556671","PK","PAK","PAKISTAN" -"3414556672","3414605823","AU","AUS","AUSTRALIA" -"3414605824","3414616063","IN","IND","INDIA" -"3414616064","3414618111","ID","IDN","INDONESIA" -"3414618112","3414620159","CN","CHN","CHINA" -"3414620160","3414621183","IN","IND","INDIA" -"3414621184","3414638591","PK","PAK","PAKISTAN" -"3414638592","3414646783","TW","TWN","TAIWAN" -"3414646784","3414654975","CN","CHN","CHINA" -"3414654976","3414663167","HK","HKG","HONG KONG" -"3414663168","3414667263","CN","CHN","CHINA" -"3414667264","3414669311","ID","IDN","INDONESIA" -"3414669312","3414670335","AU","AUS","AUSTRALIA" -"3414670336","3414670591","IN","IND","INDIA" -"3414670592","3414670847","SG","SGP","SINGAPORE" -"3414670848","3414671359","MY","MYS","MALAYSIA" -"3414671360","3415080959","JP","JPN","JAPAN" -"3415080960","3415083007","MY","MYS","MALAYSIA" -"3415083008","3415083519","SG","SGP","SINGAPORE" -"3415083520","3415084031","HK","HKG","HONG KONG" -"3415084032","3415084543","CN","CHN","CHINA" -"3415084544","3415085055","US","USA","UNITED STATES" -"3415085056","3415087615","SG","SGP","SINGAPORE" -"3415087616","3415087871","US","USA","UNITED STATES" -"3415087872","3415088127","SG","SGP","SINGAPORE" -"3415088128","3415089151","HK","HKG","HONG KONG" -"3415089152","3415097343","MY","MYS","MALAYSIA" -"3415097344","3415103487","ID","IDN","INDONESIA" -"3415103488","3415113727","HK","HKG","HONG KONG" -"3415113728","3415121919","AU","AUS","AUSTRALIA" -"3415121920","3415130111","KR","KOR","REPUBLIC OF KOREA" -"3415130112","3415136255","JP","JPN","JAPAN" -"3415136256","3415136767","KR","KOR","REPUBLIC OF KOREA" -"3415136768","3415137279","AU","AUS","AUSTRALIA" -"3415137280","3415137535","IN","IND","INDIA" -"3415137536","3415137791","NF","NFK","NORFOLK ISLAND" -"3415137792","3415146495","AU","AUS","AUSTRALIA" -"3415146496","3415162879","LK","LKA","SRI LANKA" -"3415162880","3415171071","AU","AUS","AUSTRALIA" -"3415171072","3415179263","JP","JPN","JAPAN" -"3415179264","3415187455","SG","SGP","SINGAPORE" -"3415187456","3415191551","AU","AUS","AUSTRALIA" -"3415191552","3415195647","IN","IND","INDIA" -"3415195648","3415220223","AU","AUS","AUSTRALIA" -"3415220224","3415224319","NZ","NZL","NEW ZEALAND" -"3415224320","3415228415","US","USA","UNITED STATES" -"3415228416","3415236607","KH","KHM","CAMBODIA" -"3415236608","3415244799","AU","AUS","AUSTRALIA" -"3415244800","3415277567","TH","THA","THAILAND" -"3415277568","3415293951","AU","AUS","AUSTRALIA" -"3415293952","3415302143","HK","HKG","HONG KONG" -"3415302144","3415306239","AU","AUS","AUSTRALIA" -"3415306240","3415308287","TH","THA","THAILAND" -"3415308288","3415310335","JP","JPN","JAPAN" -"3415310336","3415326719","IN","IND","INDIA" -"3415326720","3415334911","TW","TWN","TAIWAN" -"3415334912","3415343103","JP","JPN","JAPAN" -"3415343104","3415425023","TH","THA","THAILAND" -"3415425024","3415431167","NC","NCL","NEW CALEDONIA" -"3415431168","3415432191","IN","IND","INDIA" -"3415432192","3415435263","AU","AUS","AUSTRALIA" -"3415435264","3415436287","PH","PHL","PHILIPPINES" -"3415436288","3415436799","AU","AUS","AUSTRALIA" -"3415436800","3415437311","HK","HKG","HONG KONG" -"3415437312","3415474175","AU","AUS","AUSTRALIA" -"3415474176","3415490559","CN","CHN","CHINA" -"3415490560","3415494655","AU","AUS","AUSTRALIA" -"3415494656","3415495679","PH","PHL","PHILIPPINES" -"3415495680","3415496191","ID","IDN","INDONESIA" -"3415496192","3415496703","AU","AUS","AUSTRALIA" -"3415496704","3415497727","MY","MYS","MALAYSIA" -"3415497728","3415497983","TW","TWN","TAIWAN" -"3415497984","3415498751","AU","AUS","AUSTRALIA" -"3415498752","3415506943","JP","JPN","JAPAN" -"3415506944","3415556095","TH","THA","THAILAND" -"3415556096","3415564287","AU","AUS","AUSTRALIA" -"3415564288","3415568383","JP","JPN","JAPAN" -"3415568384","3415572479","KR","KOR","REPUBLIC OF KOREA" -"3415572480","3415605247","SG","SGP","SINGAPORE" -"3415605248","3415752703","TH","THA","THAILAND" -"3415752704","3415760895","CN","CHN","CHINA" -"3415760896","3415769087","NZ","NZL","NEW ZEALAND" -"3415769088","3415777279","AU","AUS","AUSTRALIA" -"3415777280","3415785471","KR","KOR","REPUBLIC OF KOREA" -"3415785472","3415793663","JP","JPN","JAPAN" -"3415793664","3415801855","AU","AUS","AUSTRALIA" -"3415801856","3415802879","ID","IDN","INDONESIA" -"3415802880","3415803391","HK","HKG","HONG KONG" -"3415803392","3415805951","PH","PHL","PHILIPPINES" -"3415805952","3415807999","MY","MYS","MALAYSIA" -"3415808000","3415810047","ID","IDN","INDONESIA" -"3415810048","3415814399","IN","IND","INDIA" -"3415814400","3415814655","ID","IDN","INDONESIA" -"3415814656","3415815167","TH","THA","THAILAND" -"3415815168","3415816191","IN","IND","INDIA" -"3415816192","3415817215","JP","JPN","JAPAN" -"3415817216","3415818239","ID","IDN","INDONESIA" -"3415818240","3415822335","AU","AUS","AUSTRALIA" -"3415822336","3415826431","MY","MYS","MALAYSIA" -"3415826432","3415834623","ID","IDN","INDONESIA" -"3415834624","3415838719","TH","THA","THAILAND" -"3415838720","3415842815","KR","KOR","REPUBLIC OF KOREA" -"3415842816","3415851007","TH","THA","THAILAND" -"3415851008","3415855103","AU","AUS","AUSTRALIA" -"3415855104","3415855615","HK","HKG","HONG KONG" -"3415855616","3415856127","IN","IND","INDIA" -"3415856128","3415858175","ID","IDN","INDONESIA" -"3415858176","3415859199","LK","LKA","SRI LANKA" -"3415859200","3415867391","AU","AUS","AUSTRALIA" -"3415867392","3416047615","TH","THA","THAILAND" -"3416047616","3416063999","CN","CHN","CHINA" -"3416064000","3416131583","TH","THA","THAILAND" -"3416131584","3416133631","PH","PHL","PHILIPPINES" -"3416133632","3416135679","CN","CHN","CHINA" -"3416135680","3416137727","MY","MYS","MALAYSIA" -"3416137728","3416145919","AU","AUS","AUSTRALIA" -"3416145920","3416154111","IN","IND","INDIA" -"3416154112","3416260607","TH","THA","THAILAND" -"3416260608","3416261119","VN","VNM","VIET NAM" -"3416261120","3416261631","AU","AUS","AUSTRALIA" -"3416261632","3416262655","TH","THA","THAILAND" -"3416262656","3416264703","AU","AUS","AUSTRALIA" -"3416264704","3416268799","JP","JPN","JAPAN" -"3416268800","3416272895","HK","HKG","HONG KONG" -"3416272896","3416274943","MN","MNG","MONGOLIA" -"3416274944","3416276991","ID","IDN","INDONESIA" -"3416276992","3416285183","HK","HKG","HONG KONG" -"3416285184","3416287231","VN","VNM","VIET NAM" -"3416287232","3416289279","AU","AUS","AUSTRALIA" -"3416289280","3416293375","NZ","NZL","NEW ZEALAND" -"3416293376","3416293631","ID","IDN","INDONESIA" -"3416293632","3416295423","AU","AUS","AUSTRALIA" -"3416295424","3416295679","IN","IND","INDIA" -"3416295680","3416295935","TH","THA","THAILAND" -"3416295936","3416296447","IN","IND","INDIA" -"3416296448","3416297471","AU","AUS","AUSTRALIA" -"3416297472","3416301567","TW","TWN","TAIWAN" -"3416301568","3416309759","PH","PHL","PHILIPPINES" -"3416309760","3416317951","AU","AUS","AUSTRALIA" -"3416317952","3416326143","TW","TWN","TAIWAN" -"3416326144","3416327167","VN","VNM","VIET NAM" -"3416327168","3416328191","HK","HKG","HONG KONG" -"3416328192","3416330239","AU","AUS","AUSTRALIA" -"3416330240","3416334335","ID","IDN","INDONESIA" -"3416334336","3416338431","SG","SGP","SINGAPORE" -"3416338432","3416338687","MY","MYS","MALAYSIA" -"3416338688","3416338943","SG","SGP","SINGAPORE" -"3416338944","3416339199","IN","IND","INDIA" -"3416339200","3416339455","SG","SGP","SINGAPORE" -"3416339456","3416339711","IN","IND","INDIA" -"3416339712","3416339967","SG","SGP","SINGAPORE" -"3416339968","3416340223","IN","IND","INDIA" -"3416340224","3416340735","SG","SGP","SINGAPORE" -"3416340736","3416340991","IN","IND","INDIA" -"3416340992","3416341247","SG","SGP","SINGAPORE" -"3416341248","3416341503","IN","IND","INDIA" -"3416341504","3416341759","SG","SGP","SINGAPORE" -"3416341760","3416342015","IN","IND","INDIA" -"3416342016","3416342271","SG","SGP","SINGAPORE" -"3416342272","3416342527","IN","IND","INDIA" -"3416342528","3416371199","AU","AUS","AUSTRALIA" -"3416371200","3416371711","PH","PHL","PHILIPPINES" -"3416371712","3416371967","VN","VNM","VIET NAM" -"3416371968","3416372223","IN","IND","INDIA" -"3416372224","3416372479","CN","CHN","CHINA" -"3416372480","3416372735","SG","SGP","SINGAPORE" -"3416372736","3416372991","AU","AUS","AUSTRALIA" -"3416372992","3416373247","SG","SGP","SINGAPORE" -"3416373248","3416373503","AU","AUS","AUSTRALIA" -"3416373504","3416373759","SG","SGP","SINGAPORE" -"3416373760","3416374271","AU","AUS","AUSTRALIA" -"3416374272","3416374527","PH","PHL","PHILIPPINES" -"3416374528","3416374783","IN","IND","INDIA" -"3416374784","3416375295","ID","IDN","INDONESIA" -"3416375296","3416383487","CN","CHN","CHINA" -"3416383488","3416391679","HK","HKG","HONG KONG" -"3416391680","3416457215","VN","VNM","VIET NAM" -"3416457216","3416460799","JP","JPN","JAPAN" -"3416460800","3416461055","SG","SGP","SINGAPORE" -"3416461056","3416465663","JP","JPN","JAPAN" -"3416465664","3416465919","HK","HKG","HONG KONG" -"3416465920","3416471039","JP","JPN","JAPAN" -"3416471040","3416471295","NZ","NZL","NEW ZEALAND" -"3416471296","3416473727","JP","JPN","JAPAN" -"3416473728","3416473855","PH","PHL","PHILIPPINES" -"3416473856","3416474111","JP","JPN","JAPAN" -"3416474112","3416474239","ID","IDN","INDONESIA" -"3416474240","3416474615","JP","JPN","JAPAN" -"3416474616","3416474623","LK","LKA","SRI LANKA" -"3416474624","3416474639","JP","JPN","JAPAN" -"3416474640","3416474671","NZ","NZL","NEW ZEALAND" -"3416474672","3416474687","JP","JPN","JAPAN" -"3416474688","3416474740","NZ","NZL","NEW ZEALAND" -"3416474741","3416474743","JP","JPN","JAPAN" -"3416474744","3416474759","NZ","NZL","NEW ZEALAND" -"3416474760","3416474775","JP","JPN","JAPAN" -"3416474776","3416474783","NZ","NZL","NEW ZEALAND" -"3416474784","3416474847","JP","JPN","JAPAN" -"3416474848","3416474855","NZ","NZL","NEW ZEALAND" -"3416474856","3416475199","JP","JPN","JAPAN" -"3416475200","3416475263","NZ","NZL","NEW ZEALAND" -"3416475264","3416475455","JP","JPN","JAPAN" -"3416475456","3416475487","NZ","NZL","NEW ZEALAND" -"3416475488","3416475615","JP","JPN","JAPAN" -"3416475616","3416475647","NZ","NZL","NEW ZEALAND" -"3416475648","3416475903","TW","TWN","TAIWAN" -"3416475904","3416475919","SG","SGP","SINGAPORE" -"3416475920","3416475951","JP","JPN","JAPAN" -"3416475952","3416475959","SG","SGP","SINGAPORE" -"3416475960","3416476047","JP","JPN","JAPAN" -"3416476048","3416476063","SG","SGP","SINGAPORE" -"3416476064","3416476071","JP","JPN","JAPAN" -"3416476072","3416476079","SG","SGP","SINGAPORE" -"3416476080","3416476111","JP","JPN","JAPAN" -"3416476112","3416476127","SG","SGP","SINGAPORE" -"3416476128","3416477199","JP","JPN","JAPAN" -"3416477200","3416477207","MY","MYS","MALAYSIA" -"3416477208","3416477215","JP","JPN","JAPAN" -"3416477216","3416477239","MY","MYS","MALAYSIA" -"3416477240","3416477247","SG","SGP","SINGAPORE" -"3416477248","3416477263","MY","MYS","MALAYSIA" -"3416477264","3416477759","JP","JPN","JAPAN" -"3416477760","3416477823","SG","SGP","SINGAPORE" -"3416477824","3416477887","JP","JPN","JAPAN" -"3416477888","3416477951","SG","SGP","SINGAPORE" -"3416477952","3416477983","ID","IDN","INDONESIA" -"3416477984","3416478143","JP","JPN","JAPAN" -"3416478144","3416478175","ID","IDN","INDONESIA" -"3416478176","3416478239","JP","JPN","JAPAN" -"3416478240","3416478271","HK","HKG","HONG KONG" -"3416478272","3416478303","JP","JPN","JAPAN" -"3416478304","3416478335","HK","HKG","HONG KONG" -"3416478336","3416478463","JP","JPN","JAPAN" -"3416478464","3416478479","TW","TWN","TAIWAN" -"3416478480","3416478527","JP","JPN","JAPAN" -"3416478528","3416478543","TW","TWN","TAIWAN" -"3416478544","3416478655","JP","JPN","JAPAN" -"3416478656","3416478671","HK","HKG","HONG KONG" -"3416478672","3416478687","TW","TWN","TAIWAN" -"3416478688","3416478783","JP","JPN","JAPAN" -"3416478784","3416478799","KR","KOR","REPUBLIC OF KOREA" -"3416478800","3416478847","JP","JPN","JAPAN" -"3416478848","3416478911","TW","TWN","TAIWAN" -"3416478912","3416478927","KR","KOR","REPUBLIC OF KOREA" -"3416478928","3416480255","JP","JPN","JAPAN" -"3416480256","3416480383","TW","TWN","TAIWAN" -"3416480384","3416481559","JP","JPN","JAPAN" -"3416481560","3416481567","IN","IND","INDIA" -"3416481568","3416481807","JP","JPN","JAPAN" -"3416481808","3416481815","HK","HKG","HONG KONG" -"3416481816","3416481855","JP","JPN","JAPAN" -"3416481856","3416481871","HK","HKG","HONG KONG" -"3416481872","3416481887","JP","JPN","JAPAN" -"3416481888","3416481919","HK","HKG","HONG KONG" -"3416481920","3416482047","JP","JPN","JAPAN" -"3416482048","3416482079","SG","SGP","SINGAPORE" -"3416482080","3416482159","JP","JPN","JAPAN" -"3416482160","3416482191","SG","SGP","SINGAPORE" -"3416482192","3416482255","JP","JPN","JAPAN" -"3416482256","3416482287","SG","SGP","SINGAPORE" -"3416482288","3416482719","JP","JPN","JAPAN" -"3416482720","3416482783","SG","SGP","SINGAPORE" -"3416482784","3416482815","HK","HKG","HONG KONG" -"3416482816","3416482879","KR","KOR","REPUBLIC OF KOREA" -"3416482880","3416483167","JP","JPN","JAPAN" -"3416483168","3416483199","SG","SGP","SINGAPORE" -"3416483200","3416483231","JP","JPN","JAPAN" -"3416483232","3416483295","SG","SGP","SINGAPORE" -"3416483296","3416483319","JP","JPN","JAPAN" -"3416483320","3416483327","SG","SGP","SINGAPORE" -"3416483328","3416483343","JP","JPN","JAPAN" -"3416483344","3416483391","HK","HKG","HONG KONG" -"3416483392","3416483407","JP","JPN","JAPAN" -"3416483408","3416483423","HK","HKG","HONG KONG" -"3416483424","3416483567","JP","JPN","JAPAN" -"3416483568","3416483583","HK","HKG","HONG KONG" -"3416483584","3416483663","SG","SGP","SINGAPORE" -"3416483664","3416483671","JP","JPN","JAPAN" -"3416483672","3416483703","SG","SGP","SINGAPORE" -"3416483704","3416483863","JP","JPN","JAPAN" -"3416483864","3416483871","KR","KOR","REPUBLIC OF KOREA" -"3416483872","3416483903","JP","JPN","JAPAN" -"3416483904","3416483911","KR","KOR","REPUBLIC OF KOREA" -"3416483912","3416483919","HK","HKG","HONG KONG" -"3416483920","3416483943","JP","JPN","JAPAN" -"3416483944","3416483951","KR","KOR","REPUBLIC OF KOREA" -"3416483952","3416483975","JP","JPN","JAPAN" -"3416483976","3416483983","HK","HKG","HONG KONG" -"3416483984","3416483991","JP","JPN","JAPAN" -"3416483992","3416484023","HK","HKG","HONG KONG" -"3416484024","3416484039","JP","JPN","JAPAN" -"3416484040","3416484055","KR","KOR","REPUBLIC OF KOREA" -"3416484056","3416484143","JP","JPN","JAPAN" -"3416484144","3416484159","MY","MYS","MALAYSIA" -"3416484160","3416484175","JP","JPN","JAPAN" -"3416484176","3416484183","MY","MYS","MALAYSIA" -"3416484184","3416484191","JP","JPN","JAPAN" -"3416484192","3416484223","MY","MYS","MALAYSIA" -"3416484224","3416484319","JP","JPN","JAPAN" -"3416484320","3416484335","HK","HKG","HONG KONG" -"3416484336","3416484351","JP","JPN","JAPAN" -"3416484352","3416484407","SG","SGP","SINGAPORE" -"3416484408","3416484447","JP","JPN","JAPAN" -"3416484448","3416484607","SG","SGP","SINGAPORE" -"3416484608","3416484671","JP","JPN","JAPAN" -"3416484672","3416484735","HK","HKG","HONG KONG" -"3416484736","3416485823","JP","JPN","JAPAN" -"3416485824","3416485903","SG","SGP","SINGAPORE" -"3416485904","3416485911","JP","JPN","JAPAN" -"3416485912","3416485927","SG","SGP","SINGAPORE" -"3416485928","3416485935","JP","JPN","JAPAN" -"3416485936","3416485943","SG","SGP","SINGAPORE" -"3416485944","3416485967","JP","JPN","JAPAN" -"3416485968","3416485975","SG","SGP","SINGAPORE" -"3416485976","3416486039","JP","JPN","JAPAN" -"3416486040","3416486047","SG","SGP","SINGAPORE" -"3416486048","3416486063","JP","JPN","JAPAN" -"3416486064","3416486103","SG","SGP","SINGAPORE" -"3416486104","3416486111","JP","JPN","JAPAN" -"3416486112","3416486119","SG","SGP","SINGAPORE" -"3416486120","3416486127","HK","HKG","HONG KONG" -"3416486128","3416486143","SG","SGP","SINGAPORE" -"3416486144","3416487167","JP","JPN","JAPAN" -"3416487168","3416487175","HK","HKG","HONG KONG" -"3416487176","3416487183","JP","JPN","JAPAN" -"3416487184","3416487191","HK","HKG","HONG KONG" -"3416487192","3416487255","JP","JPN","JAPAN" -"3416487256","3416487263","HK","HKG","HONG KONG" -"3416487264","3416487303","JP","JPN","JAPAN" -"3416487304","3416487343","HK","HKG","HONG KONG" -"3416487344","3416487359","JP","JPN","JAPAN" -"3416487360","3416487383","HK","HKG","HONG KONG" -"3416487384","3416487391","JP","JPN","JAPAN" -"3416487392","3416487407","HK","HKG","HONG KONG" -"3416487408","3416487423","JP","JPN","JAPAN" -"3416487424","3416487487","PH","PHL","PHILIPPINES" -"3416487488","3416488578","JP","JPN","JAPAN" -"3416488579","3416488579","TW","TWN","TAIWAN" -"3416488580","3416488580","SG","SGP","SINGAPORE" -"3416488581","3416488581","JP","JPN","JAPAN" -"3416488582","3416488582","HK","HKG","HONG KONG" -"3416488583","3416489983","JP","JPN","JAPAN" -"3416489984","3416506367","AU","AUS","AUSTRALIA" -"3416506368","3416514559","TW","TWN","TAIWAN" -"3416514560","3416522751","IN","IND","INDIA" -"3416522752","3416588287","AU","AUS","AUSTRALIA" -"3416588288","3416653823","JP","JPN","JAPAN" -"3416653824","3416656583","AU","AUS","AUSTRALIA" -"3416656584","3416656591","IN","IND","INDIA" -"3416656592","3416666111","AU","AUS","AUSTRALIA" -"3416666112","3416666239","HK","HKG","HONG KONG" -"3416666240","3416667135","AU","AUS","AUSTRALIA" -"3416667136","3416668159","US","USA","UNITED STATES" -"3416668160","3416684175","AU","AUS","AUSTRALIA" -"3416684176","3416684183","NZ","NZL","NEW ZEALAND" -"3416684184","3416686591","AU","AUS","AUSTRALIA" -"3416686592","3416694783","SG","SGP","SINGAPORE" -"3416694784","3416702975","CN","CHN","CHINA" -"3416702976","3416707071","ID","IDN","INDONESIA" -"3416707072","3416709119","KR","KOR","REPUBLIC OF KOREA" -"3416709120","3416709375","AU","AUS","AUSTRALIA" -"3416709376","3416709631","ID","IDN","INDONESIA" -"3416709632","3416710143","AU","AUS","AUSTRALIA" -"3416710144","3416711167","HK","HKG","HONG KONG" -"3416711168","3416719359","AU","AUS","AUSTRALIA" -"3416719360","3416727551","PH","PHL","PHILIPPINES" -"3416727552","3416735743","JP","JPN","JAPAN" -"3416735744","3416752127","PH","PHL","PHILIPPINES" -"3416752128","3416784895","NZ","NZL","NEW ZEALAND" -"3416784896","3416801279","AU","AUS","AUSTRALIA" -"3416801280","3416817663","JP","JPN","JAPAN" -"3416817664","3416850431","HK","HKG","HONG KONG" -"3416850432","3416851455","PH","PHL","PHILIPPINES" -"3416851456","3416851967","KR","KOR","REPUBLIC OF KOREA" -"3416851968","3416852479","SG","SGP","SINGAPORE" -"3416852480","3416854527","JP","JPN","JAPAN" -"3416854528","3416856575","AU","AUS","AUSTRALIA" -"3416856576","3416858623","BD","BGD","BANGLADESH" -"3416858624","3416862719","HK","HKG","HONG KONG" -"3416862720","3416864767","MN","MNG","MONGOLIA" -"3416864768","3416864895","JP","JPN","JAPAN" -"3416864896","3416865023","SG","SGP","SINGAPORE" -"3416865024","3416865151","HK","HKG","HONG KONG" -"3416865152","3416865279","SG","SGP","SINGAPORE" -"3416865280","3416865287","JP","JPN","JAPAN" -"3416865288","3416865407","AU","AUS","AUSTRALIA" -"3416865408","3416865599","JP","JPN","JAPAN" -"3416865600","3416865607","HK","HKG","HONG KONG" -"3416865608","3416865655","AU","AUS","AUSTRALIA" -"3416865656","3416865791","JP","JPN","JAPAN" -"3416865792","3416866055","HK","HKG","HONG KONG" -"3416866056","3416866071","SG","SGP","SINGAPORE" -"3416866072","3416866303","AU","AUS","AUSTRALIA" -"3416866304","3416866559","HK","HKG","HONG KONG" -"3416866560","3416883199","SG","SGP","SINGAPORE" -"3416883200","3416915967","HK","HKG","HONG KONG" -"3416915968","3416920063","AU","AUS","AUSTRALIA" -"3416920064","3416921087","TH","THA","THAILAND" -"3416921088","3416922111","PH","PHL","PHILIPPINES" -"3416922112","3416922367","AU","AUS","AUSTRALIA" -"3416922368","3416922623","IN","IND","INDIA" -"3416922624","3416923135","VN","VNM","VIET NAM" -"3416923136","3416924159","AU","AUS","AUSTRALIA" -"3416924160","3416928255","JP","JPN","JAPAN" -"3416928256","3416928511","IN","IND","INDIA" -"3416928512","3416928767","HK","HKG","HONG KONG" -"3416928768","3416929279","TH","THA","THAILAND" -"3416929280","3416930303","JP","JPN","JAPAN" -"3416930304","3416930559","NZ","NZL","NEW ZEALAND" -"3416930560","3416931327","AU","AUS","AUSTRALIA" -"3416931328","3416932351","IN","IND","INDIA" -"3416932352","3416936447","PK","PAK","PAKISTAN" -"3416936448","3416938495","AU","AUS","AUSTRALIA" -"3416938496","3416938751","NZ","NZL","NEW ZEALAND" -"3416938752","3416939007","AU","AUS","AUSTRALIA" -"3416939008","3416939519","HK","HKG","HONG KONG" -"3416939520","3416940543","AU","AUS","AUSTRALIA" -"3416940544","3416948735","KR","KOR","REPUBLIC OF KOREA" -"3416948736","3416981503","TH","THA","THAILAND" -"3416981504","3416982527","PH","PHL","PHILIPPINES" -"3416982528","3416982783","NZ","NZL","NEW ZEALAND" -"3416982784","3416983039","AU","AUS","AUSTRALIA" -"3416983040","3416983551","PH","PHL","PHILIPPINES" -"3416983552","3416985599","JP","JPN","JAPAN" -"3416985600","3416989695","VN","VNM","VIET NAM" -"3416989696","3416997887","NZ","NZL","NEW ZEALAND" -"3416997888","3417014271","AU","AUS","AUSTRALIA" -"3417014272","3417022463","JP","JPN","JAPAN" -"3417022464","3417030655","KR","KOR","REPUBLIC OF KOREA" -"3417030656","3417034751","AU","AUS","AUSTRALIA" -"3417034752","3417035007","NZ","NZL","NEW ZEALAND" -"3417035008","3417035775","IN","IND","INDIA" -"3417035776","3417036799","JP","JPN","JAPAN" -"3417036800","3417037823","ID","IDN","INDONESIA" -"3417037824","3417038079","AU","AUS","AUSTRALIA" -"3417038080","3417038335","ID","IDN","INDONESIA" -"3417038336","3417038591","IN","IND","INDIA" -"3417038592","3417038847","NZ","NZL","NEW ZEALAND" -"3417038848","3417042943","CN","CHN","CHINA" -"3417042944","3417044991","IN","IND","INDIA" -"3417044992","3417047039","AU","AUS","AUSTRALIA" -"3417047040","3417055231","PH","PHL","PHILIPPINES" -"3417055232","3417112575","TH","THA","THAILAND" -"3417112576","3417128959","AU","AUS","AUSTRALIA" -"3417128960","3417135103","JP","JPN","JAPAN" -"3417135104","3417137151","ID","IDN","INDONESIA" -"3417137152","3417145343","KR","KOR","REPUBLIC OF KOREA" -"3417145344","3417178111","NZ","NZL","NEW ZEALAND" -"3417178112","3417179135","PH","PHL","PHILIPPINES" -"3417179136","3417179391","AU","AUS","AUSTRALIA" -"3417179392","3417179647","ID","IDN","INDONESIA" -"3417179648","3417179903","IN","IND","INDIA" -"3417179904","3417180159","CN","CHN","CHINA" -"3417180160","3417182207","ID","IDN","INDONESIA" -"3417182208","3417184767","AU","AUS","AUSTRALIA" -"3417184768","3417185023","NZ","NZL","NEW ZEALAND" -"3417185024","3417185279","AF","AFG","AFGHANISTAN" -"3417185280","3417185791","SG","SGP","SINGAPORE" -"3417185792","3417186303","NZ","NZL","NEW ZEALAND" -"3417186304","3417194495","HK","HKG","HONG KONG" -"3417194496","3417198591","JP","JPN","JAPAN" -"3417198592","3417200639","SG","SGP","SINGAPORE" -"3417200640","3417202687","JP","JPN","JAPAN" -"3417202688","3417210879","CN","CHN","CHINA" -"3417210880","3417227263","AU","AUS","AUSTRALIA" -"3417227264","3417243647","JP","JPN","JAPAN" -"3417243648","3417244671","PH","PHL","PHILIPPINES" -"3417244672","3417245695","IN","IND","INDIA" -"3417245696","3417247743","BT","BTN","BHUTAN" -"3417247744","3417251839","JP","JPN","JAPAN" -"3417251840","3417260031","KR","KOR","REPUBLIC OF KOREA" -"3417260032","3417264127","PK","PAK","PAKISTAN" -"3417264128","3417268223","JP","JPN","JAPAN" -"3417268224","3417272319","PK","PAK","PAKISTAN" -"3417272320","3417274367","NZ","NZL","NEW ZEALAND" -"3417274368","3417275391","AU","AUS","AUSTRALIA" -"3417275392","3417276415","PH","PHL","PHILIPPINES" -"3417276416","3417284607","CN","CHN","CHINA" -"3417284608","3417288703","SG","SGP","SINGAPORE" -"3417288704","3417289215","IN","IND","INDIA" -"3417289216","3417289727","AU","AUS","AUSTRALIA" -"3417289728","3417291263","IN","IND","INDIA" -"3417291264","3417291775","AU","AUS","AUSTRALIA" -"3417291776","3417292799","KR","KOR","REPUBLIC OF KOREA" -"3417292800","3417309183","CN","CHN","CHINA" -"3417309184","3417337855","AU","AUS","AUSTRALIA" -"3417337856","3417338367","IN","IND","INDIA" -"3417338368","3417338879","HK","HKG","HONG KONG" -"3417338880","3417339903","PH","PHL","PHILIPPINES" -"3417339904","3417340415","AU","AUS","AUSTRALIA" -"3417340416","3417341951","NZ","NZL","NEW ZEALAND" -"3417341952","3417346047","CA","CAN","CANADA" -"3417346048","3417348095","MY","MYS","MALAYSIA" -"3417348096","3417348351","AU","AUS","AUSTRALIA" -"3417348352","3417348607","IN","IND","INDIA" -"3417348608","3417349119","NZ","NZL","NEW ZEALAND" -"3417349120","3417349631","IN","IND","INDIA" -"3417349632","3417350143","AU","AUS","AUSTRALIA" -"3417350144","3417352191","VN","VNM","VIET NAM" -"3417352192","3417354239","CN","CHN","CHINA" -"3417354240","3417356287","ID","IDN","INDONESIA" -"3417356288","3417357311","AU","AUS","AUSTRALIA" -"3417357312","3417357567","NZ","NZL","NEW ZEALAND" -"3417357568","3417357823","AU","AUS","AUSTRALIA" -"3417357824","3417358335","PK","PAK","PAKISTAN" -"3417358336","3417374719","HK","HKG","HONG KONG" -"3417374720","3417440255","PH","PHL","PHILIPPINES" -"3417440256","3417706095","JP","JPN","JAPAN" -"3417706096","3417706099","HK","HKG","HONG KONG" -"3417706100","3417716655","JP","JPN","JAPAN" -"3417716656","3417716659","HK","HKG","HONG KONG" -"3417716660","3417833471","JP","JPN","JAPAN" -"3417833472","3417849855","NZ","NZL","NEW ZEALAND" -"3417849856","3417853951","AU","AUS","AUSTRALIA" -"3417853952","3417858047","CN","CHN","CHINA" -"3417858048","3417866239","JP","JPN","JAPAN" -"3417866240","3417915391","HK","HKG","HONG KONG" -"3417915392","3417939967","TH","THA","THAILAND" -"3417939968","3417946111","PF","PYF","FRENCH POLYNESIA" -"3417946112","3417947135","AU","AUS","AUSTRALIA" -"3417947136","3417947391","IN","IND","INDIA" -"3417947392","3417947647","HK","HKG","HONG KONG" -"3417947648","3417947903","AU","AUS","AUSTRALIA" -"3417947904","3417948159","IN","IND","INDIA" -"3417948160","3417964543","AU","AUS","AUSTRALIA" -"3417964544","3418030079","HK","HKG","HONG KONG" -"3418030080","3418062847","TW","TWN","TAIWAN" -"3418062848","3418063615","US","USA","UNITED STATES" -"3418063616","3418063679","IN","IND","INDIA" -"3418063680","3418063711","US","USA","UNITED STATES" -"3418063712","3418063775","IN","IND","INDIA" -"3418063776","3418063807","US","USA","UNITED STATES" -"3418063808","3418063839","IN","IND","INDIA" -"3418063840","3418063871","US","USA","UNITED STATES" -"3418063872","3418064127","IN","IND","INDIA" -"3418064128","3418064447","US","USA","UNITED STATES" -"3418064448","3418064513","IN","IND","INDIA" -"3418064514","3418065023","US","USA","UNITED STATES" -"3418065024","3418065039","IN","IND","INDIA" -"3418065040","3418066527","US","USA","UNITED STATES" -"3418066528","3418066591","IN","IND","INDIA" -"3418066592","3418066703","US","USA","UNITED STATES" -"3418066704","3418066719","IN","IND","INDIA" -"3418066720","3418067071","US","USA","UNITED STATES" -"3418067072","3418067135","SG","SGP","SINGAPORE" -"3418067136","3418067967","US","USA","UNITED STATES" -"3418067968","3418068223","IN","IND","INDIA" -"3418068224","3418068479","US","USA","UNITED STATES" -"3418068480","3418068607","IN","IND","INDIA" -"3418068608","3418069119","US","USA","UNITED STATES" -"3418069120","3418069135","IN","IND","INDIA" -"3418069136","3418071039","US","USA","UNITED STATES" -"3418071040","3418079231","CN","CHN","CHINA" -"3418079232","3418095615","IN","IND","INDIA" -"3418095616","3418111999","TH","THA","THAILAND" -"3418112000","3418128383","HK","HKG","HONG KONG" -"3418128384","3418136575","AU","AUS","AUSTRALIA" -"3418136576","3418144767","BD","BGD","BANGLADESH" -"3418144768","3418148863","TW","TWN","TAIWAN" -"3418148864","3418150911","JP","JPN","JAPAN" -"3418150912","3418152959","AU","AUS","AUSTRALIA" -"3418152960","3418155007","IN","IND","INDIA" -"3418155008","3418157055","MY","MYS","MALAYSIA" -"3418157056","3418161663","BD","BGD","BANGLADESH" -"3418161664","3418162431","AU","AUS","AUSTRALIA" -"3418162432","3418162687","IN","IND","INDIA" -"3418162688","3418163199","AU","AUS","AUSTRALIA" -"3418163200","3418165247","PH","PHL","PHILIPPINES" -"3418165248","3418167295","MY","MYS","MALAYSIA" -"3418167296","3418167551","IN","IND","INDIA" -"3418167552","3418167807","AU","AUS","AUSTRALIA" -"3418167808","3418168319","HK","HKG","HONG KONG" -"3418168320","3418169343","VN","VNM","VIET NAM" -"3418169344","3418177535","JP","JPN","JAPAN" -"3418177536","3418181631","LK","LKA","SRI LANKA" -"3418181632","3418183679","AU","AUS","AUSTRALIA" -"3418183680","3418184191","ID","IDN","INDONESIA" -"3418184192","3418184959","IN","IND","INDIA" -"3418184960","3418190847","AU","AUS","AUSTRALIA" -"3418190848","3418191871","TH","THA","THAILAND" -"3418191872","3418192895","ID","IDN","INDONESIA" -"3418192896","3418193919","AU","AUS","AUSTRALIA" -"3418193920","3418202111","KH","KHM","CAMBODIA" -"3418202112","3418206207","HK","HKG","HONG KONG" -"3418206208","3418208255","IN","IND","INDIA" -"3418208256","3418210303","LK","LKA","SRI LANKA" -"3418210304","3418218495","AU","AUS","AUSTRALIA" -"3418218496","3418227711","BD","BGD","BANGLADESH" -"3418227712","3418228735","AU","AUS","AUSTRALIA" -"3418228736","3418230783","BD","BGD","BANGLADESH" -"3418230784","3418232831","TW","TWN","TAIWAN" -"3418232832","3418233343","AU","AUS","AUSTRALIA" -"3418233344","3418233855","KR","KOR","REPUBLIC OF KOREA" -"3418233856","3418234879","JP","JPN","JAPAN" -"3418234880","3418235903","BD","BGD","BANGLADESH" -"3418235904","3418236415","ID","IDN","INDONESIA" -"3418236416","3418236927","AU","AUS","AUSTRALIA" -"3418236928","3418241023","ID","IDN","INDONESIA" -"3418241024","3418243071","JP","JPN","JAPAN" -"3418243072","3418246015","PH","PHL","PHILIPPINES" -"3418246016","3418246023","SG","SGP","SINGAPORE" -"3418246024","3418251263","PH","PHL","PHILIPPINES" -"3418251264","3418255359","CN","CHN","CHINA" -"3418255360","3418257407","ID","IDN","INDONESIA" -"3418257408","3418259367","HK","HKG","HONG KONG" -"3418259368","3418259373","SG","SGP","SINGAPORE" -"3418259374","3418259455","HK","HKG","HONG KONG" -"3418259456","3418267647","IN","IND","INDIA" -"3418267648","3418271743","VN","VNM","VIET NAM" -"3418271744","3418273791","SG","SGP","SINGAPORE" -"3418273792","3418275839","ID","IDN","INDONESIA" -"3418275840","3418279935","AU","AUS","AUSTRALIA" -"3418279936","3418281983","NZ","NZL","NEW ZEALAND" -"3418281984","3418282239","IN","IND","INDIA" -"3418282240","3418282495","AU","AUS","AUSTRALIA" -"3418282496","3418283519","PH","PHL","PHILIPPINES" -"3418283520","3418284031","AU","AUS","AUSTRALIA" -"3418284032","3418285055","SG","SGP","SINGAPORE" -"3418285056","3418285823","JP","JPN","JAPAN" -"3418285824","3418287691","SG","SGP","SINGAPORE" -"3418287692","3418287695","JP","JPN","JAPAN" -"3418287696","3418287699","SG","SGP","SINGAPORE" -"3418287700","3418287703","JP","JPN","JAPAN" -"3418287704","3418287719","SG","SGP","SINGAPORE" -"3418287720","3418287730","JP","JPN","JAPAN" -"3418287731","3418287732","SG","SGP","SINGAPORE" -"3418287733","3418287734","JP","JPN","JAPAN" -"3418287735","3418287735","SG","SGP","SINGAPORE" -"3418287736","3418287743","JP","JPN","JAPAN" -"3418287744","3418288127","SG","SGP","SINGAPORE" -"3418288128","3418290175","ID","IDN","INDONESIA" -"3418290176","3418290431","IN","IND","INDIA" -"3418290432","3418290687","AU","AUS","AUSTRALIA" -"3418290688","3418291199","TH","THA","THAILAND" -"3418291200","3418291711","AU","AUS","AUSTRALIA" -"3418291712","3418292735","BD","BGD","BANGLADESH" -"3418292736","3418292991","JP","JPN","JAPAN" -"3418292992","3418293247","HK","HKG","HONG KONG" -"3418293248","3418293503","JP","JPN","JAPAN" -"3418293504","3418293759","IN","IND","INDIA" -"3418293760","3418294015","AU","AUS","AUSTRALIA" -"3418294016","3418294271","NZ","NZL","NEW ZEALAND" -"3418294272","3418296319","VN","VNM","VIET NAM" -"3418296320","3418300415","CN","CHN","CHINA" -"3418300416","3418300927","BD","BGD","BANGLADESH" -"3418300928","3418301439","IN","IND","INDIA" -"3418301440","3418302463","AU","AUS","AUSTRALIA" -"3418302464","3418304511","ID","IDN","INDONESIA" -"3418304512","3418306559","VN","VNM","VIET NAM" -"3418306560","3418308607","MN","MNG","MONGOLIA" -"3418308608","3418324991","CN","CHN","CHINA" -"3418324992","3418326015","BD","BGD","BANGLADESH" -"3418326016","3418326527","AU","AUS","AUSTRALIA" -"3418326528","3418327039","PH","PHL","PHILIPPINES" -"3418327040","3418329087","JP","JPN","JAPAN" -"3418329088","3418333183","CN","CHN","CHINA" -"3418333184","3418345471","AU","AUS","AUSTRALIA" -"3418345472","3418357759","JP","JPN","JAPAN" -"3418357760","3418365951","CN","CHN","CHINA" -"3418365952","3418374143","TH","THA","THAILAND" -"3418374144","3418382335","AU","AUS","AUSTRALIA" -"3418382336","3418390527","JP","JPN","JAPAN" -"3418390528","3418392319","AU","AUS","AUSTRALIA" -"3418392320","3418392335","HK","HKG","HONG KONG" -"3418392336","3418392343","AU","AUS","AUSTRALIA" -"3418392344","3418392383","HK","HKG","HONG KONG" -"3418392384","3418392447","AU","AUS","AUSTRALIA" -"3418392448","3418392463","HK","HKG","HONG KONG" -"3418392464","3418392479","AU","AUS","AUSTRALIA" -"3418392480","3418392575","HK","HKG","HONG KONG" -"3418392576","3418392831","AU","AUS","AUSTRALIA" -"3418392832","3418393087","HK","HKG","HONG KONG" -"3418393088","3418393135","SG","SGP","SINGAPORE" -"3418393136","3418393143","MY","MYS","MALAYSIA" -"3418393144","3418393167","SG","SGP","SINGAPORE" -"3418393168","3418393183","MY","MYS","MALAYSIA" -"3418393184","3418393295","SG","SGP","SINGAPORE" -"3418393296","3418393311","MY","MYS","MALAYSIA" -"3418393312","3418393343","SG","SGP","SINGAPORE" -"3418393344","3418393599","AU","AUS","AUSTRALIA" -"3418393600","3418393607","JP","JPN","JAPAN" -"3418393608","3418393679","AU","AUS","AUSTRALIA" -"3418393680","3418393855","JP","JPN","JAPAN" -"3418393856","3418393911","AU","AUS","AUSTRALIA" -"3418393912","3418393919","NZ","NZL","NEW ZEALAND" -"3418393920","3418394047","AU","AUS","AUSTRALIA" -"3418394048","3418394063","MY","MYS","MALAYSIA" -"3418394064","3418394079","NZ","NZL","NEW ZEALAND" -"3418394080","3418394111","AU","AUS","AUSTRALIA" -"3418394112","3418394367","KR","KOR","REPUBLIC OF KOREA" -"3418394368","3418394623","TW","TWN","TAIWAN" -"3418394624","3418394879","AU","AUS","AUSTRALIA" -"3418394880","3418395135","JP","JPN","JAPAN" -"3418395136","3418395391","AU","AUS","AUSTRALIA" -"3418395392","3418395647","JP","JPN","JAPAN" -"3418395648","3418395695","KR","KOR","REPUBLIC OF KOREA" -"3418395696","3418395711","AU","AUS","AUSTRALIA" -"3418395712","3418395767","KR","KOR","REPUBLIC OF KOREA" -"3418395768","3418395775","AU","AUS","AUSTRALIA" -"3418395776","3418395903","KR","KOR","REPUBLIC OF KOREA" -"3418395904","3418396415","JP","JPN","JAPAN" -"3418396416","3418396423","PH","PHL","PHILIPPINES" -"3418396424","3418396479","TW","TWN","TAIWAN" -"3418396480","3418396543","PH","PHL","PHILIPPINES" -"3418396544","3418396575","TW","TWN","TAIWAN" -"3418396576","3418396671","PH","PHL","PHILIPPINES" -"3418396672","3418396703","TW","TWN","TAIWAN" -"3418396704","3418396719","PH","PHL","PHILIPPINES" -"3418396720","3418396735","TW","TWN","TAIWAN" -"3418396736","3418396751","AU","AUS","AUSTRALIA" -"3418396752","3418396775","TW","TWN","TAIWAN" -"3418396776","3418396783","PH","PHL","PHILIPPINES" -"3418396784","3418396799","TW","TWN","TAIWAN" -"3418396800","3418396815","PH","PHL","PHILIPPINES" -"3418396816","3418396831","TW","TWN","TAIWAN" -"3418396832","3418396839","PH","PHL","PHILIPPINES" -"3418396840","3418396863","TW","TWN","TAIWAN" -"3418396864","3418396895","PH","PHL","PHILIPPINES" -"3418396896","3418396927","TW","TWN","TAIWAN" -"3418396928","3418397695","AU","AUS","AUSTRALIA" -"3418397696","3418397703","HK","HKG","HONG KONG" -"3418397704","3418397711","AU","AUS","AUSTRALIA" -"3418397712","3418397759","HK","HKG","HONG KONG" -"3418397760","3418397775","AU","AUS","AUSTRALIA" -"3418397776","3418397951","HK","HKG","HONG KONG" -"3418397952","3418398063","KR","KOR","REPUBLIC OF KOREA" -"3418398064","3418398079","AU","AUS","AUSTRALIA" -"3418398080","3418398207","KR","KOR","REPUBLIC OF KOREA" -"3418398208","3418399103","AU","AUS","AUSTRALIA" -"3418399104","3418399135","JP","JPN","JAPAN" -"3418399136","3418399439","AU","AUS","AUSTRALIA" -"3418399440","3418399455","PH","PHL","PHILIPPINES" -"3418399456","3418399471","AU","AUS","AUSTRALIA" -"3418399472","3418399487","TW","TWN","TAIWAN" -"3418399488","3418401535","AU","AUS","AUSTRALIA" -"3418401536","3418401599","PH","PHL","PHILIPPINES" -"3418401600","3418401615","AU","AUS","AUSTRALIA" -"3418401616","3418401647","PH","PHL","PHILIPPINES" -"3418401648","3418401719","TW","TWN","TAIWAN" -"3418401720","3418401727","PH","PHL","PHILIPPINES" -"3418401728","3418401799","TW","TWN","TAIWAN" -"3418401800","3418401807","AU","AUS","AUSTRALIA" -"3418401808","3418401823","TW","TWN","TAIWAN" -"3418401824","3418401855","PH","PHL","PHILIPPINES" -"3418401856","3418401871","AU","AUS","AUSTRALIA" -"3418401872","3418401903","PH","PHL","PHILIPPINES" -"3418401904","3418401919","TW","TWN","TAIWAN" -"3418401920","3418401935","PH","PHL","PHILIPPINES" -"3418401936","3418401983","TW","TWN","TAIWAN" -"3418401984","3418402007","PH","PHL","PHILIPPINES" -"3418402008","3418402015","AU","AUS","AUSTRALIA" -"3418402016","3418402031","TW","TWN","TAIWAN" -"3418402032","3418402047","AU","AUS","AUSTRALIA" -"3418402048","3418402223","JP","JPN","JAPAN" -"3418402224","3418402239","AU","AUS","AUSTRALIA" -"3418402240","3418402255","JP","JPN","JAPAN" -"3418402256","3418402263","AU","AUS","AUSTRALIA" -"3418402264","3418402271","JP","JPN","JAPAN" -"3418402272","3418402279","AU","AUS","AUSTRALIA" -"3418402280","3418402303","JP","JPN","JAPAN" -"3418402304","3418403071","AU","AUS","AUSTRALIA" -"3418403072","3418403103","MY","MYS","MALAYSIA" -"3418403104","3418403151","SG","SGP","SINGAPORE" -"3418403152","3418403167","AU","AUS","AUSTRALIA" -"3418403168","3418403183","MY","MYS","MALAYSIA" -"3418403184","3418403199","SG","SGP","SINGAPORE" -"3418403200","3418403207","MY","MYS","MALAYSIA" -"3418403208","3418403215","AU","AUS","AUSTRALIA" -"3418403216","3418403327","SG","SGP","SINGAPORE" -"3418403328","3418403775","AU","AUS","AUSTRALIA" -"3418403776","3418403783","NZ","NZL","NEW ZEALAND" -"3418403784","3418403839","AU","AUS","AUSTRALIA" -"3418403840","3418403991","HK","HKG","HONG KONG" -"3418403992","3418403999","AU","AUS","AUSTRALIA" -"3418404000","3418404063","HK","HKG","HONG KONG" -"3418404064","3418404159","AU","AUS","AUSTRALIA" -"3418404160","3418404175","TW","TWN","TAIWAN" -"3418404176","3418404351","AU","AUS","AUSTRALIA" -"3418404352","3418404479","KR","KOR","REPUBLIC OF KOREA" -"3418404480","3418405631","AU","AUS","AUSTRALIA" -"3418405632","3418405647","HK","HKG","HONG KONG" -"3418405648","3418405855","AU","AUS","AUSTRALIA" -"3418405856","3418405887","SG","SGP","SINGAPORE" -"3418405888","3418406655","AU","AUS","AUSTRALIA" -"3418406656","3418406687","PH","PHL","PHILIPPINES" -"3418406688","3418406711","AU","AUS","AUSTRALIA" -"3418406712","3418406719","TW","TWN","TAIWAN" -"3418406720","3418406783","PH","PHL","PHILIPPINES" -"3418406784","3418406799","TW","TWN","TAIWAN" -"3418406800","3418406815","AU","AUS","AUSTRALIA" -"3418406816","3418406831","PH","PHL","PHILIPPINES" -"3418406832","3418406847","TW","TWN","TAIWAN" -"3418406848","3418406911","AU","AUS","AUSTRALIA" -"3418406912","3418423295","IN","IND","INDIA" -"3418423296","3418435711","HK","HKG","HONG KONG" -"3418435712","3418435743","JP","JPN","JAPAN" -"3418435744","3418448639","HK","HKG","HONG KONG" -"3418448640","3418448895","SG","SGP","SINGAPORE" -"3418448896","3418453064","HK","HKG","HONG KONG" -"3418453065","3418453065","AS","ASM","AMERICAN SAMOA" -"3418453066","3418453071","US","USA","UNITED STATES" -"3418453072","3418453087","HK","HKG","HONG KONG" -"3418453088","3418453091","US","USA","UNITED STATES" -"3418453092","3418453247","HK","HKG","HONG KONG" -"3418453248","3418453375","AS","ASM","AMERICAN SAMOA" -"3418453376","3418453407","US","USA","UNITED STATES" -"3418453408","3418453411","HK","HKG","HONG KONG" -"3418453412","3418453412","KR","KOR","REPUBLIC OF KOREA" -"3418453413","3418453415","HK","HKG","HONG KONG" -"3418453416","3418453423","KR","KOR","REPUBLIC OF KOREA" -"3418453424","3418453631","HK","HKG","HONG KONG" -"3418453632","3418453759","US","USA","UNITED STATES" -"3418453760","3418456063","HK","HKG","HONG KONG" -"3418456064","3418472447","IN","IND","INDIA" -"3418472448","3418505215","AU","AUS","AUSTRALIA" -"3418505216","3418506831","JP","JPN","JAPAN" -"3418506832","3418506863","ID","IDN","INDONESIA" -"3418506864","3418506895","JP","JPN","JAPAN" -"3418506896","3418506911","NZ","NZL","NEW ZEALAND" -"3418506912","3418507043","JP","JPN","JAPAN" -"3418507044","3418507047","ID","IDN","INDONESIA" -"3418507048","3418507071","JP","JPN","JAPAN" -"3418507072","3418507075","ID","IDN","INDONESIA" -"3418507076","3418507295","JP","JPN","JAPAN" -"3418507296","3418507335","HK","HKG","HONG KONG" -"3418507336","3418507903","JP","JPN","JAPAN" -"3418507904","3418507919","MY","MYS","MALAYSIA" -"3418507920","3418507927","JP","JPN","JAPAN" -"3418507928","3418507935","MY","MYS","MALAYSIA" -"3418507936","3418507967","JP","JPN","JAPAN" -"3418507968","3418507971","MY","MYS","MALAYSIA" -"3418507972","3418507975","JP","JPN","JAPAN" -"3418507976","3418507983","MY","MYS","MALAYSIA" -"3418507984","3418508543","JP","JPN","JAPAN" -"3418508544","3418508607","HK","HKG","HONG KONG" -"3418508608","3418508959","JP","JPN","JAPAN" -"3418508960","3418509024","SG","SGP","SINGAPORE" -"3418509025","3418509055","JP","JPN","JAPAN" -"3418509056","3418509119","TW","TWN","TAIWAN" -"3418509120","3418509327","JP","JPN","JAPAN" -"3418509328","3418509455","HK","HKG","HONG KONG" -"3418509456","3418510271","JP","JPN","JAPAN" -"3418510272","3418510279","TW","TWN","TAIWAN" -"3418510280","3418510287","JP","JPN","JAPAN" -"3418510288","3418510303","HK","HKG","HONG KONG" -"3418510304","3418510328","JP","JPN","JAPAN" -"3418510329","3418510329","TW","TWN","TAIWAN" -"3418510330","3418510591","JP","JPN","JAPAN" -"3418510592","3418510847","TW","TWN","TAIWAN" -"3418510848","3418510927","JP","JPN","JAPAN" -"3418510928","3418510943","HK","HKG","HONG KONG" -"3418510944","3418510991","JP","JPN","JAPAN" -"3418510992","3418511007","HK","HKG","HONG KONG" -"3418511008","3418511031","JP","JPN","JAPAN" -"3418511032","3418511055","HK","HKG","HONG KONG" -"3418511056","3418511087","JP","JPN","JAPAN" -"3418511088","3418511103","HK","HKG","HONG KONG" -"3418511104","3418511107","JP","JPN","JAPAN" -"3418511108","3418511115","SG","SGP","SINGAPORE" -"3418511116","3418511116","JP","JPN","JAPAN" -"3418511117","3418511117","SG","SGP","SINGAPORE" -"3418511118","3418511135","JP","JPN","JAPAN" -"3418511136","3418511359","SG","SGP","SINGAPORE" -"3418511360","3418511391","JP","JPN","JAPAN" -"3418511392","3418511399","TW","TWN","TAIWAN" -"3418511400","3418511407","JP","JPN","JAPAN" -"3418511408","3418511415","TW","TWN","TAIWAN" -"3418511416","3418511423","SG","SGP","SINGAPORE" -"3418511424","3418511439","TW","TWN","TAIWAN" -"3418511440","3418513031","JP","JPN","JAPAN" -"3418513032","3418513039","HK","HKG","HONG KONG" -"3418513040","3418513215","JP","JPN","JAPAN" -"3418513216","3418513231","TW","TWN","TAIWAN" -"3418513232","3418513247","JP","JPN","JAPAN" -"3418513248","3418513279","TW","TWN","TAIWAN" -"3418513280","3418513407","JP","JPN","JAPAN" -"3418513408","3418517503","IN","IND","INDIA" -"3418517504","3418519551","MN","MNG","MONGOLIA" -"3418519552","3418521599","AU","AUS","AUSTRALIA" -"3418521600","3418554367","HK","HKG","HONG KONG" -"3418554368","3418578943","AU","AUS","AUSTRALIA" -"3418578944","3418583039","TH","THA","THAILAND" -"3418583040","3418585087","AU","AUS","AUSTRALIA" -"3418585088","3418586111","TH","THA","THAILAND" -"3418586112","3418586367","AU","AUS","AUSTRALIA" -"3418586368","3418586623","SG","SGP","SINGAPORE" -"3418586624","3418619903","AU","AUS","AUSTRALIA" -"3418619904","3418621951","CN","CHN","CHINA" -"3418621952","3418623999","AU","AUS","AUSTRALIA" -"3418624000","3418626047","JP","JPN","JAPAN" -"3418626048","3418628095","KI","KIR","KIRIBATI" -"3418628096","3418636287","AU","AUS","AUSTRALIA" -"3418636288","3418642943","JP","JPN","JAPAN" -"3418642944","3418643199","ID","IDN","INDONESIA" -"3418643200","3418643455","JP","JPN","JAPAN" -"3418643456","3418644479","AU","AUS","AUSTRALIA" -"3418644480","3418644991","JP","JPN","JAPAN" -"3418644992","3418645247","TW","TWN","TAIWAN" -"3418645248","3418645503","SG","SGP","SINGAPORE" -"3418645504","3418645759","JP","JPN","JAPAN" -"3418645760","3418646271","NZ","NZL","NEW ZEALAND" -"3418646272","3418646527","HK","HKG","HONG KONG" -"3418646528","3418646783","JP","JPN","JAPAN" -"3418646784","3418647039","TW","TWN","TAIWAN" -"3418647040","3418648063","JP","JPN","JAPAN" -"3418648064","3418648575","SG","SGP","SINGAPORE" -"3418648576","3418648783","JP","JPN","JAPAN" -"3418648784","3418648799","SG","SGP","SINGAPORE" -"3418648800","3418648815","NZ","NZL","NEW ZEALAND" -"3418648816","3418648831","HK","HKG","HONG KONG" -"3418648832","3418649439","JP","JPN","JAPAN" -"3418649440","3418649503","SG","SGP","SINGAPORE" -"3418649504","3418649519","JP","JPN","JAPAN" -"3418649520","3418649551","SG","SGP","SINGAPORE" -"3418649552","3418649583","JP","JPN","JAPAN" -"3418649584","3418649599","SG","SGP","SINGAPORE" -"3418649600","3418649887","JP","JPN","JAPAN" -"3418649888","3418649951","PH","PHL","PHILIPPINES" -"3418649952","3418650751","JP","JPN","JAPAN" -"3418650752","3418650808","HK","HKG","HONG KONG" -"3418650809","3418650823","JP","JPN","JAPAN" -"3418650824","3418650839","HK","HKG","HONG KONG" -"3418650840","3418650846","JP","JPN","JAPAN" -"3418650847","3418650879","HK","HKG","HONG KONG" -"3418650880","3418651039","NZ","NZL","NEW ZEALAND" -"3418651040","3418651135","JP","JPN","JAPAN" -"3418651136","3418651391","SG","SGP","SINGAPORE" -"3418651392","3418651903","JP","JPN","JAPAN" -"3418651904","3418652159","HK","HKG","HONG KONG" -"3418652160","3418652163","PH","PHL","PHILIPPINES" -"3418652164","3418652167","JP","JPN","JAPAN" -"3418652168","3418652171","PH","PHL","PHILIPPINES" -"3418652172","3418652191","JP","JPN","JAPAN" -"3418652192","3418652215","PH","PHL","PHILIPPINES" -"3418652216","3418652415","JP","JPN","JAPAN" -"3418652416","3418652671","HK","HKG","HONG KONG" -"3418652672","3418750975","IN","IND","INDIA" -"3418750976","3418816511","HK","HKG","HONG KONG" -"3418816512","3418947583","IN","IND","INDIA" -"3418947584","3418955775","AU","AUS","AUSTRALIA" -"3418955776","3418959871","TW","TWN","TAIWAN" -"3418959872","3418960383","BD","BGD","BANGLADESH" -"3418960384","3418960895","ID","IDN","INDONESIA" -"3418960896","3418961919","SG","SGP","SINGAPORE" -"3418961920","3418962943","VN","VNM","VIET NAM" -"3418962944","3418963967","IN","IND","INDIA" -"3418963968","3418988543","AU","AUS","AUSTRALIA" -"3418988544","3418992639","ID","IDN","INDONESIA" -"3418992640","3418993919","SG","SGP","SINGAPORE" -"3418993920","3418994175","MN","MNG","MONGOLIA" -"3418994176","3418994431","MY","MYS","MALAYSIA" -"3418994432","3418994687","AU","AUS","AUSTRALIA" -"3418994688","3418995711","MY","MYS","MALAYSIA" -"3418995712","3418996735","JP","JPN","JAPAN" -"3418996736","3419013119","IN","IND","INDIA" -"3419013120","3419062271","AU","AUS","AUSTRALIA" -"3419062272","3419070463","JP","JPN","JAPAN" -"3419070464","3419071999","HK","HKG","HONG KONG" -"3419072000","3419072255","ID","IDN","INDONESIA" -"3419072256","3419072511","HK","HKG","HONG KONG" -"3419072512","3419073023","JP","JPN","JAPAN" -"3419073024","3419073279","SG","SGP","SINGAPORE" -"3419073280","3419073535","FJ","FJI","FIJI" -"3419073536","3419074047","AU","AUS","AUSTRALIA" -"3419074048","3419074559","CN","CHN","CHINA" -"3419074560","3419078655","BD","BGD","BANGLADESH" -"3419078656","3419209727","TW","TWN","TAIWAN" -"3419209728","3419238399","AU","AUS","AUSTRALIA" -"3419238400","3419242495","JP","JPN","JAPAN" -"3419242496","3419340799","AU","AUS","AUSTRALIA" -"3419340800","3419344895","TW","TWN","TAIWAN" -"3419344896","3419348991","KR","KOR","REPUBLIC OF KOREA" -"3419348992","3419353087","TW","TWN","TAIWAN" -"3419353088","3419354111","JP","JPN","JAPAN" -"3419354112","3419356159","ID","IDN","INDONESIA" -"3419356160","3419356671","NZ","NZL","NEW ZEALAND" -"3419356672","3419357183","IN","IND","INDIA" -"3419357184","3419411455","CN","CHN","CHINA" -"3419411456","3419411711","HK","HKG","HONG KONG" -"3419411712","3419411967","NZ","NZL","NEW ZEALAND" -"3419411968","3419412223","AU","AUS","AUSTRALIA" -"3419412224","3419412479","JP","JPN","JAPAN" -"3419412480","3419414527","PH","PHL","PHILIPPINES" -"3419414528","3419422719","CN","CHN","CHINA" -"3419422720","3419439103","AU","AUS","AUSTRALIA" -"3419439104","3419448703","SG","SGP","SINGAPORE" -"3419448704","3419448735","NP","NPL","NEPAL" -"3419448736","3419449023","SG","SGP","SINGAPORE" -"3419449024","3419449055","BD","BGD","BANGLADESH" -"3419449056","3419456911","SG","SGP","SINGAPORE" -"3419456912","3419456927","JP","JPN","JAPAN" -"3419456928","3419458927","SG","SGP","SINGAPORE" -"3419458928","3419458943","HK","HKG","HONG KONG" -"3419458944","3419459007","SG","SGP","SINGAPORE" -"3419459008","3419459071","AF","AFG","AFGHANISTAN" -"3419459072","3419459327","CN","CHN","CHINA" -"3419459328","3419471871","SG","SGP","SINGAPORE" -"3419471872","3419504639","TH","THA","THAILAND" -"3419504640","3419508735","HK","HKG","HONG KONG" -"3419508736","3419512831","JP","JPN","JAPAN" -"3419512832","3419516927","AU","AUS","AUSTRALIA" -"3419516928","3419517951","JP","JPN","JAPAN" -"3419517952","3419518975","VN","VNM","VIET NAM" -"3419518976","3419519999","TW","TWN","TAIWAN" -"3419520000","3419520767","ID","IDN","INDONESIA" -"3419520768","3419521023","TH","THA","THAILAND" -"3419521024","3419529215","AU","AUS","AUSTRALIA" -"3419529216","3419537407","CN","CHN","CHINA" -"3419537408","3419541503","HK","HKG","HONG KONG" -"3419541504","3419553791","KR","KOR","REPUBLIC OF KOREA" -"3419553792","3419557887","AU","AUS","AUSTRALIA" -"3419557888","3419558399","ID","IDN","INDONESIA" -"3419558400","3419558655","AU","AUS","AUSTRALIA" -"3419558656","3419559935","ID","IDN","INDONESIA" -"3419559936","3419560959","JP","JPN","JAPAN" -"3419560960","3419561983","IN","IND","INDIA" -"3419561984","3419570175","AU","AUS","AUSTRALIA" -"3419570176","3419602943","VN","VNM","VIET NAM" -"3419602944","3419611135","TW","TWN","TAIWAN" -"3419611136","3419617279","JP","JPN","JAPAN" -"3419617280","3419618303","AU","AUS","AUSTRALIA" -"3419618304","3419619327","SG","SGP","SINGAPORE" -"3419619328","3419635711","NZ","NZL","NEW ZEALAND" -"3419635712","3419643903","SG","SGP","SINGAPORE" -"3419643904","3419668479","JP","JPN","JAPAN" -"3419668480","3419672575","CN","CHN","CHINA" -"3419672576","3419674623","AU","AUS","AUSTRALIA" -"3419674624","3419675647","IN","IND","INDIA" -"3419675648","3419676671","MN","MNG","MONGOLIA" -"3419676672","3419684863","JP","JPN","JAPAN" -"3419684864","3419688959","IN","IND","INDIA" -"3419688960","3419693055","CN","CHN","CHINA" -"3419693056","3419701247","KR","KOR","REPUBLIC OF KOREA" -"3419701248","3419709439","AU","AUS","AUSTRALIA" -"3419709440","3419717631","KR","KOR","REPUBLIC OF KOREA" -"3419717632","3419734015","IN","IND","INDIA" -"3419734016","3419774975","AU","AUS","AUSTRALIA" -"3419774976","3419783167","JP","JPN","JAPAN" -"3419783168","3419791359","PH","PHL","PHILIPPINES" -"3419791360","3419873279","AU","AUS","AUSTRALIA" -"3419873280","3419877375","AF","AFG","AFGHANISTAN" -"3419877376","3419877631","ID","IDN","INDONESIA" -"3419877632","3419877887","KH","KHM","CAMBODIA" -"3419877888","3419878143","ID","IDN","INDONESIA" -"3419878144","3419879423","IN","IND","INDIA" -"3419879424","3419880447","JP","JPN","JAPAN" -"3419880448","3419881471","MY","MYS","MALAYSIA" -"3419881472","3419897855","PH","PHL","PHILIPPINES" -"3419897856","3419899903","JP","JPN","JAPAN" -"3419899904","3419900159","FR","FRA","FRANCE" -"3419900160","3419900415","BE","BEL","BELGIUM" -"3419900416","3419901439","AU","AUS","AUSTRALIA" -"3419901440","3419901951","NZ","NZL","NEW ZEALAND" -"3419901952","3419902207","AU","AUS","AUSTRALIA" -"3419902208","3419902463","HK","HKG","HONG KONG" -"3419902464","3419902719","CN","CHN","CHINA" -"3419902720","3419902975","HK","HKG","HONG KONG" -"3419902976","3419903231","AU","AUS","AUSTRALIA" -"3419903232","3419903487","JP","JPN","JAPAN" -"3419903488","3419906047","AU","AUS","AUSTRALIA" -"3419906048","3419914239","PK","PAK","PAKISTAN" -"3419914240","3419922431","KR","KOR","REPUBLIC OF KOREA" -"3419922432","3419924479","JP","JPN","JAPAN" -"3419924480","3419926527","AU","AUS","AUSTRALIA" -"3419926528","3419930623","HK","HKG","HONG KONG" -"3419930624","3419971583","JP","JPN","JAPAN" -"3419971584","3419979775","KR","KOR","REPUBLIC OF KOREA" -"3419979776","3419996159","JP","JPN","JAPAN" -"3419996160","3420020735","AU","AUS","AUSTRALIA" -"3420020736","3420028927","TW","TWN","TAIWAN" -"3420028928","3420029951","MY","MYS","MALAYSIA" -"3420029952","3420030975","ID","IDN","INDONESIA" -"3420030976","3420031999","IN","IND","INDIA" -"3420032000","3420032255","ID","IDN","INDONESIA" -"3420032256","3420032511","AU","AUS","AUSTRALIA" -"3420032512","3420033023","NZ","NZL","NEW ZEALAND" -"3420033024","3420034047","IN","IND","INDIA" -"3420034048","3420036095","AU","AUS","AUSTRALIA" -"3420036096","3420037119","JP","JPN","JAPAN" -"3420037120","3420039167","AU","AUS","AUSTRALIA" -"3420039168","3420040191","KH","KHM","CAMBODIA" -"3420040192","3420040703","ID","IDN","INDONESIA" -"3420040704","3420040959","IN","IND","INDIA" -"3420040960","3420041215","HK","HKG","HONG KONG" -"3420041216","3420042239","MY","MYS","MALAYSIA" -"3420042240","3420043263","JP","JPN","JAPAN" -"3420043264","3420044287","SG","SGP","SINGAPORE" -"3420044288","3420045311","ID","IDN","INDONESIA" -"3420045312","3420061695","KR","KOR","REPUBLIC OF KOREA" -"3420061696","3420127231","HK","HKG","HONG KONG" -"3420127232","3420323839","AU","AUS","AUSTRALIA" -"3420323840","3420332031","TW","TWN","TAIWAN" -"3420332032","3420334591","AU","AUS","AUSTRALIA" -"3420334592","3420334623","HK","HKG","HONG KONG" -"3420334624","3420334639","AU","AUS","AUSTRALIA" -"3420334640","3420334643","SG","SGP","SINGAPORE" -"3420334644","3420334647","AU","AUS","AUSTRALIA" -"3420334648","3420334687","HK","HKG","HONG KONG" -"3420334688","3420334695","SG","SGP","SINGAPORE" -"3420334696","3420334703","JP","JPN","JAPAN" -"3420334704","3420334719","HK","HKG","HONG KONG" -"3420334720","3420334847","SG","SGP","SINGAPORE" -"3420334848","3420335271","HK","HKG","HONG KONG" -"3420335272","3420335279","CN","CHN","CHINA" -"3420335280","3420335615","HK","HKG","HONG KONG" -"3420335616","3420335623","KR","KOR","REPUBLIC OF KOREA" -"3420335624","3420335631","SG","SGP","SINGAPORE" -"3420335632","3420335640","JP","JPN","JAPAN" -"3420335641","3420335647","AU","AUS","AUSTRALIA" -"3420335648","3420335871","JP","JPN","JAPAN" -"3420335872","3420336127","SG","SGP","SINGAPORE" -"3420336128","3420336183","JP","JPN","JAPAN" -"3420336184","3420336199","SG","SGP","SINGAPORE" -"3420336200","3420336207","JP","JPN","JAPAN" -"3420336208","3420336223","HK","HKG","HONG KONG" -"3420336224","3420336255","SG","SGP","SINGAPORE" -"3420336256","3420336287","JP","JPN","JAPAN" -"3420336288","3420336319","SG","SGP","SINGAPORE" -"3420336320","3420336351","JP","JPN","JAPAN" -"3420336352","3420336367","KR","KOR","REPUBLIC OF KOREA" -"3420336368","3420336383","SG","SGP","SINGAPORE" -"3420336384","3420336655","JP","JPN","JAPAN" -"3420336656","3420336671","AU","AUS","AUSTRALIA" -"3420336672","3420336895","JP","JPN","JAPAN" -"3420336896","3420337151","HK","HKG","HONG KONG" -"3420337152","3420337167","SG","SGP","SINGAPORE" -"3420337168","3420337171","AU","AUS","AUSTRALIA" -"3420337172","3420337175","SG","SGP","SINGAPORE" -"3420337176","3420337183","AU","AUS","AUSTRALIA" -"3420337184","3420337599","SG","SGP","SINGAPORE" -"3420337600","3420337631","HK","HKG","HONG KONG" -"3420337632","3420337635","AU","AUS","AUSTRALIA" -"3420337636","3420337643","SG","SGP","SINGAPORE" -"3420337644","3420337647","AU","AUS","AUSTRALIA" -"3420337648","3420337663","SG","SGP","SINGAPORE" -"3420337664","3420337727","AU","AUS","AUSTRALIA" -"3420337728","3420337743","NZ","NZL","NEW ZEALAND" -"3420337744","3420337835","AU","AUS","AUSTRALIA" -"3420337836","3420337839","NZ","NZL","NEW ZEALAND" -"3420337840","3420340019","AU","AUS","AUSTRALIA" -"3420340020","3420340023","NZ","NZL","NEW ZEALAND" -"3420340024","3420340143","AU","AUS","AUSTRALIA" -"3420340144","3420340159","NZ","NZL","NEW ZEALAND" -"3420340160","3420365847","AU","AUS","AUSTRALIA" -"3420365848","3420365855","TW","TWN","TAIWAN" -"3420365856","3420365887","AU","AUS","AUSTRALIA" -"3420365888","3420366047","HK","HKG","HONG KONG" -"3420366048","3420366055","TW","TWN","TAIWAN" -"3420366056","3420366059","HK","HKG","HONG KONG" -"3420366060","3420366063","AU","AUS","AUSTRALIA" -"3420366064","3420366079","TW","TWN","TAIWAN" -"3420366080","3420366335","HK","HKG","HONG KONG" -"3420366336","3420366431","SG","SGP","SINGAPORE" -"3420366432","3420366439","CN","CHN","CHINA" -"3420366440","3420366447","SG","SGP","SINGAPORE" -"3420366448","3420366463","US","USA","UNITED STATES" -"3420366464","3420366471","SG","SGP","SINGAPORE" -"3420366472","3420366479","IN","IND","INDIA" -"3420366480","3420366495","SG","SGP","SINGAPORE" -"3420366496","3420366511","HK","HKG","HONG KONG" -"3420366512","3420366527","SG","SGP","SINGAPORE" -"3420366528","3420366591","CN","CHN","CHINA" -"3420366592","3420366639","HK","HKG","HONG KONG" -"3420366640","3420366647","TW","TWN","TAIWAN" -"3420366648","3420366655","CN","CHN","CHINA" -"3420366656","3420366719","HK","HKG","HONG KONG" -"3420366720","3420366735","CN","CHN","CHINA" -"3420366736","3420366751","KR","KOR","REPUBLIC OF KOREA" -"3420366752","3420366847","HK","HKG","HONG KONG" -"3420366848","3420366871","JP","JPN","JAPAN" -"3420366872","3420366879","KR","KOR","REPUBLIC OF KOREA" -"3420366880","3420366911","AU","AUS","AUSTRALIA" -"3420366912","3420366959","JP","JPN","JAPAN" -"3420366960","3420366975","KR","KOR","REPUBLIC OF KOREA" -"3420366976","3420367039","JP","JPN","JAPAN" -"3420367040","3420367055","KR","KOR","REPUBLIC OF KOREA" -"3420367056","3420367103","JP","JPN","JAPAN" -"3420367104","3420367359","HK","HKG","HONG KONG" -"3420367360","3420367383","JP","JPN","JAPAN" -"3420367384","3420367423","KR","KOR","REPUBLIC OF KOREA" -"3420367424","3420367495","JP","JPN","JAPAN" -"3420367496","3420367503","KR","KOR","REPUBLIC OF KOREA" -"3420367504","3420367519","AU","AUS","AUSTRALIA" -"3420367520","3420367631","JP","JPN","JAPAN" -"3420367632","3420367647","AU","AUS","AUSTRALIA" -"3420367648","3420367663","JP","JPN","JAPAN" -"3420367664","3420367679","KR","KOR","REPUBLIC OF KOREA" -"3420367680","3420367743","JP","JPN","JAPAN" -"3420367744","3420367775","AU","AUS","AUSTRALIA" -"3420367776","3420367791","TW","TWN","TAIWAN" -"3420367792","3420367807","IN","IND","INDIA" -"3420367808","3420367871","JP","JPN","JAPAN" -"3420367872","3420368015","AU","AUS","AUSTRALIA" -"3420368016","3420368031","NZ","NZL","NEW ZEALAND" -"3420368032","3420368063","AU","AUS","AUSTRALIA" -"3420368064","3420368067","NZ","NZL","NEW ZEALAND" -"3420368068","3420368583","AU","AUS","AUSTRALIA" -"3420368584","3420368591","CN","CHN","CHINA" -"3420368592","3420368639","AU","AUS","AUSTRALIA" -"3420368640","3420368895","NZ","NZL","NEW ZEALAND" -"3420368896","3420368935","HK","HKG","HONG KONG" -"3420368936","3420368943","TW","TWN","TAIWAN" -"3420368944","3420368991","HK","HKG","HONG KONG" -"3420368992","3420369023","AU","AUS","AUSTRALIA" -"3420369024","3420369055","HK","HKG","HONG KONG" -"3420369056","3420369087","AU","AUS","AUSTRALIA" -"3420369088","3420369139","HK","HKG","HONG KONG" -"3420369140","3420369223","CN","CHN","CHINA" -"3420369224","3420369239","HK","HKG","HONG KONG" -"3420369240","3420369255","TW","TWN","TAIWAN" -"3420369256","3420369263","CN","CHN","CHINA" -"3420369264","3420369279","AU","AUS","AUSTRALIA" -"3420369280","3420369343","HK","HKG","HONG KONG" -"3420369344","3420369407","CN","CHN","CHINA" -"3420369408","3420370431","AU","AUS","AUSTRALIA" -"3420370432","3420370527","HK","HKG","HONG KONG" -"3420370528","3420370543","CN","CHN","CHINA" -"3420370544","3420370559","HK","HKG","HONG KONG" -"3420370560","3420370575","JP","JPN","JAPAN" -"3420370576","3420370591","CN","CHN","CHINA" -"3420370592","3420370623","AU","AUS","AUSTRALIA" -"3420370624","3420370943","HK","HKG","HONG KONG" -"3420370944","3420371199","JP","JPN","JAPAN" -"3420371200","3420371711","AU","AUS","AUSTRALIA" -"3420371712","3420371775","JP","JPN","JAPAN" -"3420371776","3420371807","KR","KOR","REPUBLIC OF KOREA" -"3420371808","3420371823","HK","HKG","HONG KONG" -"3420371824","3420371839","KR","KOR","REPUBLIC OF KOREA" -"3420371840","3420371879","IN","IND","INDIA" -"3420371880","3420371887","SG","SGP","SINGAPORE" -"3420371888","3420371895","CN","CHN","CHINA" -"3420371896","3420371903","AU","AUS","AUSTRALIA" -"3420371904","3420371967","IN","IND","INDIA" -"3420371968","3420372223","AU","AUS","AUSTRALIA" -"3420372224","3420372735","HK","HKG","HONG KONG" -"3420372736","3420372767","TW","TWN","TAIWAN" -"3420372768","3420372799","SG","SGP","SINGAPORE" -"3420372800","3420372831","JP","JPN","JAPAN" -"3420372832","3420372863","KR","KOR","REPUBLIC OF KOREA" -"3420372864","3420372895","PH","PHL","PHILIPPINES" -"3420372896","3420372927","SG","SGP","SINGAPORE" -"3420372928","3420372943","HK","HKG","HONG KONG" -"3420372944","3420372967","SG","SGP","SINGAPORE" -"3420372968","3420372975","AU","AUS","AUSTRALIA" -"3420372976","3420372991","IN","IND","INDIA" -"3420372992","3420377087","HK","HKG","HONG KONG" -"3420377088","3420389375","JP","JPN","JAPAN" -"3420389376","3420393471","US","USA","UNITED STATES" -"3420393472","3420395519","AU","AUS","AUSTRALIA" -"3420395520","3420397567","JP","JPN","JAPAN" -"3420397568","3420401663","KH","KHM","CAMBODIA" -"3420401664","3420411903","JP","JPN","JAPAN" -"3420411904","3420412415","TH","THA","THAILAND" -"3420412416","3420412927","ID","IDN","INDONESIA" -"3420412928","3420413951","BD","BGD","BANGLADESH" -"3420413952","3420422143","KR","KOR","REPUBLIC OF KOREA" -"3420422144","3420430335","MY","MYS","MALAYSIA" -"3420430336","3420434431","PK","PAK","PAKISTAN" -"3420434432","3420434687","IN","IND","INDIA" -"3420434688","3420434943","KR","KOR","REPUBLIC OF KOREA" -"3420434944","3420435199","HK","HKG","HONG KONG" -"3420435200","3420435455","AU","AUS","AUSTRALIA" -"3420435456","3420436479","JP","JPN","JAPAN" -"3420436480","3420437503","AU","AUS","AUSTRALIA" -"3420437504","3420438527","IN","IND","INDIA" -"3420438528","3420454911","HK","HKG","HONG KONG" -"3420454912","3422552063","KR","KOR","REPUBLIC OF KOREA" -"3422552064","3422848511","US","USA","UNITED STATES" -"3422848512","3422848767","GB","GBR","UNITED KINGDOM" -"3422848768","3423092735","US","USA","UNITED STATES" -"3423092736","3423093759","VI","VIR","VIRGIN ISLANDS, U.S." -"3423093760","3423094783","US","USA","UNITED STATES" -"3423094784","3423095807","CA","CAN","CANADA" -"3423095808","3423111167","US","USA","UNITED STATES" -"3423113216","3423119359","US","USA","UNITED STATES" -"3423120384","3423143935","US","USA","UNITED STATES" -"3423143936","3423145983","CA","CAN","CANADA" -"3423145984","3423182847","US","USA","UNITED STATES" -"3423182848","3423183743","CA","CAN","CANADA" -"3423183744","3423183871","EE","EST","ESTONIA" -"3423183872","3423184207","CA","CAN","CANADA" -"3423184208","3423184215","EE","EST","ESTONIA" -"3423184216","3423184895","CA","CAN","CANADA" -"3423184896","3423197183","US","USA","UNITED STATES" -"3423198208","3423221759","US","USA","UNITED STATES" -"3423221760","3423222783","CA","CAN","CANADA" -"3423222784","3423235871","US","USA","UNITED STATES" -"3423235872","3423235903","CA","CAN","CANADA" -"3423235904","3423236095","US","USA","UNITED STATES" -"3423236096","3423238143","JM","JAM","JAMAICA" -"3423238144","3423258623","US","USA","UNITED STATES" -"3423258624","3423260671","CA","CAN","CANADA" -"3423262720","3423264831","US","USA","UNITED STATES" -"3423264832","3423264863","NG","NGA","NIGERIA" -"3423264864","3423265247","US","USA","UNITED STATES" -"3423265248","3423265263","EC","ECU","ECUADOR" -"3423265264","3423268863","US","USA","UNITED STATES" -"3423268864","3423269887","CA","CAN","CANADA" -"3423269888","3423285247","US","USA","UNITED STATES" -"3423285248","3423287295","CA","CAN","CANADA" -"3423287296","3423290367","US","USA","UNITED STATES" -"3423291392","3423303679","US","USA","UNITED STATES" -"3423303680","3423304703","CA","CAN","CANADA" -"3423304704","3423311871","US","USA","UNITED STATES" -"3423311872","3423313919","VI","VIR","VIRGIN ISLANDS, U.S." -"3423313920","3423371263","US","USA","UNITED STATES" -"3423375360","3423379455","CA","CAN","CANADA" -"3423379456","3423412223","US","USA","UNITED STATES" -"3423412224","3423412239","CA","CAN","CANADA" -"3423412240","3423412255","GR","GRC","GREECE" -"3423412256","3423412287","TK","TKL","TOKELAU" -"3423412288","3423412319","RU","RUS","RUSSIAN FEDERATION" -"3423412320","3423412415","CA","CAN","CANADA" -"3423412416","3423412479","SA","SAU","SAUDI ARABIA" -"3423412480","3423412495","CA","CAN","CANADA" -"3423412496","3423412511","US","USA","UNITED STATES" -"3423412512","3423412543","CA","CAN","CANADA" -"3423412544","3423412623","FR","FRA","FRANCE" -"3423412624","3423412639","NO","NOR","NORWAY" -"3423412640","3423412655","CA","CAN","CANADA" -"3423412656","3423412671","RU","RUS","RUSSIAN FEDERATION" -"3423412672","3423412703","CA","CAN","CANADA" -"3423412704","3423412719","RU","RUS","RUSSIAN FEDERATION" -"3423412720","3423412727","US","USA","UNITED STATES" -"3423412728","3423412751","CA","CAN","CANADA" -"3423412752","3423412767","US","USA","UNITED STATES" -"3423412768","3423412783","FI","FIN","FINLAND" -"3423412784","3423412799","CA","CAN","CANADA" -"3423412800","3423412815","US","USA","UNITED STATES" -"3423412816","3423412831","GR","GRC","GREECE" -"3423412832","3423412847","CA","CAN","CANADA" -"3423412848","3423412863","US","USA","UNITED STATES" -"3423412864","3423412927","CA","CAN","CANADA" -"3423412928","3423412991","NL","NLD","NETHERLANDS" -"3423412992","3423413055","CA","CAN","CANADA" -"3423413056","3423413071","US","USA","UNITED STATES" -"3423413072","3423413151","CA","CAN","CANADA" -"3423413152","3423413167","US","USA","UNITED STATES" -"3423413168","3423413183","CA","CAN","CANADA" -"3423413184","3423413247","RS","SRB","SERBIA" -"3423413248","3423413279","US","USA","UNITED STATES" -"3423413280","3423413295","SE","SWE","SWEDEN" -"3423413296","3423413311","CA","CAN","CANADA" -"3423413312","3423413327","PT","PRT","PORTUGAL" -"3423413328","3423413343","US","USA","UNITED STATES" -"3423413344","3423413375","CA","CAN","CANADA" -"3423413376","3423413759","US","USA","UNITED STATES" -"3423413760","3423414143","CA","CAN","CANADA" -"3423414144","3423414159","FR","FRA","FRANCE" -"3423414160","3423414271","CA","CAN","CANADA" -"3423414272","3423416319","US","USA","UNITED STATES" -"3423417344","3423453183","US","USA","UNITED STATES" -"3423455232","3423473663","US","USA","UNITED STATES" -"3423473664","3423474687","CA","CAN","CANADA" -"3423474688","3423493631","US","USA","UNITED STATES" -"3423493632","3423493887","CA","CAN","CANADA" -"3423493888","3423533055","US","USA","UNITED STATES" -"3423533056","3423535103","AI","AIA","ANGUILLA" -"3423535104","3423543295","US","USA","UNITED STATES" -"3423543296","3423545343","CA","CAN","CANADA" -"3423545344","3423549439","US","USA","UNITED STATES" -"3423551488","3423571967","US","USA","UNITED STATES" -"3423571968","3423574015","PR","PRI","PUERTO RICO" -"3423574016","3423578111","US","USA","UNITED STATES" -"3423580160","3423582207","US","USA","UNITED STATES" -"3423582208","3423586303","CA","CAN","CANADA" -"3423586304","3423602687","US","USA","UNITED STATES" -"3423602688","3423603711","KN","KNA","SAINT KITTS AND NEVIS" -"3423603712","3423609855","US","USA","UNITED STATES" -"3423610880","3423626239","US","USA","UNITED STATES" -"3423626240","3423627263","CA","CAN","CANADA" -"3423627264","3423629311","US","USA","UNITED STATES" -"3423632384","3423637503","US","USA","UNITED STATES" -"3423637504","3423639551","CA","CAN","CANADA" -"3423639552","3423651839","US","USA","UNITED STATES" -"3423651840","3423653887","CA","CAN","CANADA" -"3423653888","3423705599","US","USA","UNITED STATES" -"3423705856","3423718399","US","USA","UNITED STATES" -"3423718656","3423722239","US","USA","UNITED STATES" -"3423722496","3423731455","US","USA","UNITED STATES" -"3423731712","3423797247","US","USA","UNITED STATES" -"3423797504","3423801087","CA","CAN","CANADA" -"3423801344","3423823359","CA","CAN","CANADA" -"3423823360","3423823871","US","USA","UNITED STATES" -"3423823872","3423827711","CA","CAN","CANADA" -"3423827712","3423827967","US","USA","UNITED STATES" -"3423827968","3423830271","CA","CAN","CANADA" -"3423830528","3423838719","CA","CAN","CANADA" -"3423838976","3423848447","CA","CAN","CANADA" -"3423848448","3423849471","KN","KNA","SAINT KITTS AND NEVIS" -"3423849984","3423850495","CA","CAN","CANADA" -"3423850752","3423854335","CA","CAN","CANADA" -"3423854592","3423858175","CA","CAN","CANADA" -"3423858176","3423858687","US","USA","UNITED STATES" -"3423858688","3423858943","CA","CAN","CANADA" -"3423859456","3423859711","CA","CAN","CANADA" -"3423859968","3423862527","CA","CAN","CANADA" -"3423862784","3424270847","US","USA","UNITED STATES" -"3424271360","3424321279","US","USA","UNITED STATES" -"3424321536","3424334847","US","USA","UNITED STATES" -"3424334848","3424335871","CA","CAN","CANADA" -"3424335872","3424371967","US","USA","UNITED STATES" -"3424372224","3424375295","US","USA","UNITED STATES" -"3424375552","3424378879","US","USA","UNITED STATES" -"3424378880","3424379135","PR","PRI","PUERTO RICO" -"3424379136","3424389631","US","USA","UNITED STATES" -"3424390144","3424412415","US","USA","UNITED STATES" -"3424412672","3424444159","US","USA","UNITED STATES" -"3424444416","3424448511","US","USA","UNITED STATES" -"3424452608","3424455423","US","USA","UNITED STATES" -"3424455680","3424493823","US","USA","UNITED STATES" -"3424493824","3424494079","CA","CAN","CANADA" -"3424494080","3424494335","US","USA","UNITED STATES" -"3424494592","3424496383","US","USA","UNITED STATES" -"3424496640","3424499967","US","USA","UNITED STATES" -"3424500224","3424500991","US","USA","UNITED STATES" -"3424501248","3424502015","US","USA","UNITED STATES" -"3424502272","3424502783","US","USA","UNITED STATES" -"3424503296","3424505599","US","USA","UNITED STATES" -"3424505856","3424507135","US","USA","UNITED STATES" -"3424507392","3425173503","US","USA","UNITED STATES" -"3425173504","3425304575","CA","CAN","CANADA" -"3425304576","3425450239","US","USA","UNITED STATES" -"3425451008","3425470975","US","USA","UNITED STATES" -"3425471488","3425475839","US","USA","UNITED STATES" -"3425476608","3425697791","US","USA","UNITED STATES" -"3425697792","3425699839","CA","CAN","CANADA" -"3425699840","3425705983","US","USA","UNITED STATES" -"3425706752","3425708287","US","USA","UNITED STATES" -"3425709824","3425711359","US","USA","UNITED STATES" -"3425713408","3425728255","US","USA","UNITED STATES" -"3425728512","3425828863","US","USA","UNITED STATES" -"3425828864","3425855231","CA","CAN","CANADA" -"3425855232","3425855487","US","USA","UNITED STATES" -"3425855488","3425894399","CA","CAN","CANADA" -"3425894400","3425962495","US","USA","UNITED STATES" -"3425963008","3426010111","US","USA","UNITED STATES" -"3426010368","3426012671","US","USA","UNITED STATES" -"3426012928","3426013183","US","USA","UNITED STATES" -"3426013184","3426013439","IL","ISR","ISRAEL" -"3426013440","3426019327","US","USA","UNITED STATES" -"3426019584","3426369023","US","USA","UNITED STATES" -"3426369536","3426386687","US","USA","UNITED STATES" -"3426386944","3426387711","US","USA","UNITED STATES" -"3426387968","3426388991","MX","MEX","MEXICO" -"3426388992","3426390783","US","USA","UNITED STATES" -"3426391040","3426415615","US","USA","UNITED STATES" -"3426415872","3426416895","US","USA","UNITED STATES" -"3426417152","3426418175","US","USA","UNITED STATES" -"3426418688","3426553343","US","USA","UNITED STATES" -"3426553856","3426557439","US","USA","UNITED STATES" -"3426557952","3426602751","US","USA","UNITED STATES" -"3426603008","3426605567","US","USA","UNITED STATES" -"3426606080","3426617855","US","USA","UNITED STATES" -"3426618368","3426644479","US","USA","UNITED STATES" -"3426644992","3426646015","US","USA","UNITED STATES" -"3426646016","3426647039","CA","CAN","CANADA" -"3426647040","3426653695","US","USA","UNITED STATES" -"3426654208","3426714879","US","USA","UNITED STATES" -"3426715648","3426725375","US","USA","UNITED STATES" -"3426725888","3426729471","US","USA","UNITED STATES" -"3426729984","3426735359","US","USA","UNITED STATES" -"3426736128","3426744319","US","USA","UNITED STATES" -"3426744320","3426746367","CA","CAN","CANADA" -"3426746368","3427055615","US","USA","UNITED STATES" -"3427055872","3427061503","US","USA","UNITED STATES" -"3427061760","3427073535","US","USA","UNITED STATES" -"3427074048","3427110911","US","USA","UNITED STATES" -"3427111168","3427112959","US","USA","UNITED STATES" -"3427113216","3427113471","US","USA","UNITED STATES" -"3427113984","3427116543","US","USA","UNITED STATES" -"3427117312","3427127295","US","USA","UNITED STATES" -"3427127296","3427127551","CA","CAN","CANADA" -"3427127552","3427127807","US","USA","UNITED STATES" -"3427128064","3427128831","US","USA","UNITED STATES" -"3427129344","3427130623","US","USA","UNITED STATES" -"3427130880","3427134207","US","USA","UNITED STATES" -"3427134464","3427136511","US","USA","UNITED STATES" -"3427137024","3427139327","US","USA","UNITED STATES" -"3427139584","3427404287","US","USA","UNITED STATES" -"3427404800","3427454719","US","USA","UNITED STATES" -"3427454976","3427470079","US","USA","UNITED STATES" -"3427470336","3427503103","US","USA","UNITED STATES" -"3427503360","3427503871","US","USA","UNITED STATES" -"3427504640","3427507455","US","USA","UNITED STATES" -"3427507968","3427511295","US","USA","UNITED STATES" -"3427511808","3427540223","US","USA","UNITED STATES" -"3427540992","3427567103","US","USA","UNITED STATES" -"3427567616","3427572991","US","USA","UNITED STATES" -"3427573248","3427582975","US","USA","UNITED STATES" -"3427583488","3427584767","US","USA","UNITED STATES" -"3427585536","3427586815","US","USA","UNITED STATES" -"3427587584","3427589119","US","USA","UNITED STATES" -"3427589632","3427597823","US","USA","UNITED STATES" -"3427598336","3427605247","US","USA","UNITED STATES" -"3427605504","3427632639","US","USA","UNITED STATES" -"3427633152","3427635455","US","USA","UNITED STATES" -"3427635712","3427636223","US","USA","UNITED STATES" -"3427636736","3427636991","US","USA","UNITED STATES" -"3427637248","3427637503","US","USA","UNITED STATES" -"3427637760","3427639551","US","USA","UNITED STATES" -"3427640320","3427641343","US","USA","UNITED STATES" -"3427641856","3427642111","US","USA","UNITED STATES" -"3427642368","3427646719","US","USA","UNITED STATES" -"3427646976","3427647743","US","USA","UNITED STATES" -"3427648768","3427649279","US","USA","UNITED STATES" -"3427649536","3427651071","US","USA","UNITED STATES" -"3427651328","3427652607","US","USA","UNITED STATES" -"3427653376","3427653631","US","USA","UNITED STATES" -"3427654144","3427655167","US","USA","UNITED STATES" -"3427655680","3427742975","US","USA","UNITED STATES" -"3427742976","3427743231","GB","GBR","UNITED KINGDOM" -"3427743232","3427762175","US","USA","UNITED STATES" -"3427762176","3427762431","DE","DEU","GERMANY" -"3427762432","3427762687","CA","CAN","CANADA" -"3427762688","3427763455","IT","ITA","ITALY" -"3427763456","3427763711","AU","AUS","AUSTRALIA" -"3427763712","3427763967","GB","GBR","UNITED KINGDOM" -"3427763968","3427764223","US","USA","UNITED STATES" -"3427764224","3427764479","FR","FRA","FRANCE" -"3427764480","3427765503","US","USA","UNITED STATES" -"3427765504","3427765759","GB","GBR","UNITED KINGDOM" -"3427765760","3427766271","US","USA","UNITED STATES" -"3427766272","3427766783","GB","GBR","UNITED KINGDOM" -"3427766784","3427767039","SE","SWE","SWEDEN" -"3427767040","3427767807","DE","DEU","GERMANY" -"3427767808","3427769599","US","USA","UNITED STATES" -"3427769600","3427770111","JP","JPN","JAPAN" -"3427770112","3427770367","NO","NOR","NORWAY" -"3427770368","3427770623","GB","GBR","UNITED KINGDOM" -"3427770624","3427771391","CH","CHE","SWITZERLAND" -"3427771392","3427771647","US","USA","UNITED STATES" -"3427771648","3427771903","CA","CAN","CANADA" -"3427771904","3427772415","CH","CHE","SWITZERLAND" -"3427772416","3427772671","DE","DEU","GERMANY" -"3427772672","3427772927","HK","HKG","HONG KONG" -"3427772928","3427773183","BE","BEL","BELGIUM" -"3427773184","3427773439","DE","DEU","GERMANY" -"3427773440","3427773695","US","USA","UNITED STATES" -"3427773696","3427773951","FR","FRA","FRANCE" -"3427773952","3427774719","US","USA","UNITED STATES" -"3427774720","3427775231","DE","DEU","GERMANY" -"3427775232","3427775999","US","USA","UNITED STATES" -"3427776000","3427776511","HK","HKG","HONG KONG" -"3427776512","3427776767","CZ","CZE","CZECH REPUBLIC" -"3427776768","3427777023","US","USA","UNITED STATES" -"3427777024","3427777279","NL","NLD","NETHERLANDS" -"3427777280","3427777535","DE","DEU","GERMANY" -"3427777536","3427777791","US","USA","UNITED STATES" -"3427777792","3427778047","HK","HKG","HONG KONG" -"3427778048","3427778303","US","USA","UNITED STATES" -"3427778304","3427778559","SE","SWE","SWEDEN" -"3427778560","3427779071","NO","NOR","NORWAY" -"3427779072","3427779327","GB","GBR","UNITED KINGDOM" -"3427779328","3427780095","US","USA","UNITED STATES" -"3427780096","3427780351","GB","GBR","UNITED KINGDOM" -"3427780352","3427780607","DE","DEU","GERMANY" -"3427780608","3427781375","US","USA","UNITED STATES" -"3427781376","3427781631","GB","GBR","UNITED KINGDOM" -"3427781632","3427781887","BE","BEL","BELGIUM" -"3427781888","3427782399","US","USA","UNITED STATES" -"3427782400","3427782655","GB","GBR","UNITED KINGDOM" -"3427782656","3427783423","FR","FRA","FRANCE" -"3427783424","3427783679","GB","GBR","UNITED KINGDOM" -"3427783680","3427783935","US","USA","UNITED STATES" -"3427783936","3427784703","GB","GBR","UNITED KINGDOM" -"3427784704","3427785215","US","USA","UNITED STATES" -"3427785216","3427785471","JP","JPN","JAPAN" -"3427785472","3427785727","NO","NOR","NORWAY" -"3427785728","3427786751","US","USA","UNITED STATES" -"3427786752","3427787263","LU","LUX","LUXEMBOURG" -"3427787264","3427787775","US","USA","UNITED STATES" -"3427787776","3427788031","FR","FRA","FRANCE" -"3427788032","3427788287","CH","CHE","SWITZERLAND" -"3427788288","3427788799","GB","GBR","UNITED KINGDOM" -"3427788800","3427789567","NO","NOR","NORWAY" -"3427789568","3427790079","DE","DEU","GERMANY" -"3427790080","3427790847","US","USA","UNITED STATES" -"3427790848","3427791103","IT","ITA","ITALY" -"3427791104","3427791615","DE","DEU","GERMANY" -"3427791616","3427791871","GB","GBR","UNITED KINGDOM" -"3427791872","3427792383","CA","CAN","CANADA" -"3427792384","3427793919","NL","NLD","NETHERLANDS" -"3427793920","3427794175","US","USA","UNITED STATES" -"3427794176","3427794943","NL","NLD","NETHERLANDS" -"3427794944","3427796991","CA","CAN","CANADA" -"3427796992","3427811327","US","USA","UNITED STATES" -"3427811584","3427816959","US","USA","UNITED STATES" -"3427817472","3427831551","US","USA","UNITED STATES" -"3427831552","3427831807","MX","MEX","MEXICO" -"3427831808","3427835647","US","USA","UNITED STATES" -"3427835904","3427848959","US","USA","UNITED STATES" -"3427849216","3427860479","US","USA","UNITED STATES" -"3427860480","3428057087","CA","CAN","CANADA" -"3428057088","3428191487","US","USA","UNITED STATES" -"3428192256","3428217855","US","USA","UNITED STATES" -"3428218880","3428221439","US","USA","UNITED STATES" -"3428221952","3428237823","US","USA","UNITED STATES" -"3428238336","3428251903","US","USA","UNITED STATES" -"3428252672","3428286719","US","USA","UNITED STATES" -"3428286720","3428286975","CA","CAN","CANADA" -"3428286976","3428290047","US","USA","UNITED STATES" -"3428290304","3428296959","US","USA","UNITED STATES" -"3428296960","3428297215","CL","CHL","CHILE" -"3428297472","3428297983","US","USA","UNITED STATES" -"3428298240","3428299519","US","USA","UNITED STATES" -"3428299776","3428302079","US","USA","UNITED STATES" -"3428302336","3428305663","US","USA","UNITED STATES" -"3428305920","3428306175","US","USA","UNITED STATES" -"3428306432","3428310527","US","USA","UNITED STATES" -"3428310784","3428311039","US","USA","UNITED STATES" -"3428311296","3428318975","US","USA","UNITED STATES" -"3428319232","3428367871","US","USA","UNITED STATES" -"3428368384","3428388863","US","USA","UNITED STATES" -"3428391936","3428399359","US","USA","UNITED STATES" -"3428400128","3428421375","US","USA","UNITED STATES" -"3428421632","3428423679","US","USA","UNITED STATES" -"3428423936","3428433919","US","USA","UNITED STATES" -"3428434176","3428434943","US","USA","UNITED STATES" -"3428435200","3428437503","US","USA","UNITED STATES" -"3428437504","3428437759","MX","MEX","MEXICO" -"3428437760","3428439551","US","USA","UNITED STATES" -"3428439808","3428440575","US","USA","UNITED STATES" -"3428440832","3428442367","US","USA","UNITED STATES" -"3428442624","3428445695","US","USA","UNITED STATES" -"3428445952","3428452863","US","USA","UNITED STATES" -"3428453376","3428471807","US","USA","UNITED STATES" -"3428472064","3428472831","US","USA","UNITED STATES" -"3428473088","3428475391","US","USA","UNITED STATES" -"3428475648","3428477439","US","USA","UNITED STATES" -"3428477696","3428496639","US","USA","UNITED STATES" -"3428496640","3428497151","NL","NLD","NETHERLANDS" -"3428497152","3428582655","US","USA","UNITED STATES" -"3428582656","3428582911","CA","CAN","CANADA" -"3428582912","3428585023","US","USA","UNITED STATES" -"3428585024","3428585055","CA","CAN","CANADA" -"3428585056","3428585151","US","USA","UNITED STATES" -"3428585152","3428585215","CA","CAN","CANADA" -"3428585216","3428586239","US","USA","UNITED STATES" -"3428586240","3428586495","CA","CAN","CANADA" -"3428586496","3428586751","US","USA","UNITED STATES" -"3428586752","3428586879","CA","CAN","CANADA" -"3428586880","3428587007","US","USA","UNITED STATES" -"3428587008","3428587263","CA","CAN","CANADA" -"3428587264","3428587775","US","USA","UNITED STATES" -"3428587776","3428588287","CA","CAN","CANADA" -"3428588288","3428591631","US","USA","UNITED STATES" -"3428591632","3428591647","CA","CAN","CANADA" -"3428591648","3428591655","US","USA","UNITED STATES" -"3428591656","3428591663","CA","CAN","CANADA" -"3428591664","3428594687","US","USA","UNITED STATES" -"3428594688","3428594943","CA","CAN","CANADA" -"3428594944","3428595551","US","USA","UNITED STATES" -"3428595552","3428595583","CA","CAN","CANADA" -"3428595584","3428598527","US","USA","UNITED STATES" -"3428598528","3428598559","CA","CAN","CANADA" -"3428598560","3428599551","US","USA","UNITED STATES" -"3428599552","3428599807","CA","CAN","CANADA" -"3428599808","3428600063","US","USA","UNITED STATES" -"3428600064","3428600319","CA","CAN","CANADA" -"3428600320","3428601343","US","USA","UNITED STATES" -"3428601344","3428601599","CA","CAN","CANADA" -"3428601600","3428607999","US","USA","UNITED STATES" -"3428608000","3428609023","CA","CAN","CANADA" -"3428609024","3428610815","US","USA","UNITED STATES" -"3428610816","3428611071","CA","CAN","CANADA" -"3428611072","3428612607","US","USA","UNITED STATES" -"3428612608","3428612863","CA","CAN","CANADA" -"3428612864","3428613119","US","USA","UNITED STATES" -"3428613120","3428613631","CA","CAN","CANADA" -"3428613632","3428614143","US","USA","UNITED STATES" -"3428614144","3428620095","CA","CAN","CANADA" -"3428620096","3428620287","US","USA","UNITED STATES" -"3428620288","3428621887","CA","CAN","CANADA" -"3428621888","3428622047","US","USA","UNITED STATES" -"3428622048","3428622095","CA","CAN","CANADA" -"3428622096","3428622335","US","USA","UNITED STATES" -"3428622336","3428623615","CA","CAN","CANADA" -"3428623616","3428623871","US","USA","UNITED STATES" -"3428623872","3428624639","CA","CAN","CANADA" -"3428624640","3428625407","US","USA","UNITED STATES" -"3428625408","3428627199","CA","CAN","CANADA" -"3428627200","3428634879","US","USA","UNITED STATES" -"3428634880","3428635135","CA","CAN","CANADA" -"3428635136","3428635903","US","USA","UNITED STATES" -"3428635904","3428636927","CA","CAN","CANADA" -"3428636928","3428637439","US","USA","UNITED STATES" -"3428637440","3428637951","CA","CAN","CANADA" -"3428637952","3428638975","US","USA","UNITED STATES" -"3428638976","3428639231","CA","CAN","CANADA" -"3428639232","3428642047","US","USA","UNITED STATES" -"3428642048","3428642303","CA","CAN","CANADA" -"3428642304","3428696063","US","USA","UNITED STATES" -"3428712448","3428739327","US","USA","UNITED STATES" -"3428739328","3428739343","GB","GBR","UNITED KINGDOM" -"3428739344","3428752383","US","USA","UNITED STATES" -"3428752384","3428753407","GH","GHA","GHANA" -"3428753408","3428756479","US","USA","UNITED STATES" -"3428756480","3428756487","SE","SWE","SWEDEN" -"3428756488","3428818727","US","USA","UNITED STATES" -"3428818728","3428818735","GB","GBR","UNITED KINGDOM" -"3428818736","3428894039","US","USA","UNITED STATES" -"3428894040","3428894047","CA","CAN","CANADA" -"3428894048","3428958207","US","USA","UNITED STATES" -"3428958208","3428962303","CO","COL","COLOMBIA" -"3428962304","3429171199","US","USA","UNITED STATES" -"3429171200","3429236735","CA","CAN","CANADA" -"3429236736","3429396223","US","USA","UNITED STATES" -"3429396224","3429396479","DE","DEU","GERMANY" -"3429396480","3429408511","US","USA","UNITED STATES" -"3429408512","3429408767","DE","DEU","GERMANY" -"3429408768","3429411583","US","USA","UNITED STATES" -"3429411584","3429411839","DE","DEU","GERMANY" -"3429411840","3429500927","US","USA","UNITED STATES" -"3429500928","3429502975","CA","CAN","CANADA" -"3429502976","3429566975","US","USA","UNITED STATES" -"3429567488","3429571071","US","USA","UNITED STATES" -"3429571584","3429580799","US","USA","UNITED STATES" -"3429581056","3429583103","US","USA","UNITED STATES" -"3429583360","3429583615","US","USA","UNITED STATES" -"3429583872","3429586431","US","USA","UNITED STATES" -"3429586688","3429587199","US","USA","UNITED STATES" -"3429587456","3429588223","US","USA","UNITED STATES" -"3429588480","3429593855","US","USA","UNITED STATES" -"3429594112","3429595647","US","USA","UNITED STATES" -"3429595904","3429600511","US","USA","UNITED STATES" -"3429600768","3429601535","US","USA","UNITED STATES" -"3429601792","3429603071","US","USA","UNITED STATES" -"3429603328","3429616639","US","USA","UNITED STATES" -"3429616896","3429619711","US","USA","UNITED STATES" -"3429619968","3429632767","US","USA","UNITED STATES" -"3429633024","3429636607","US","USA","UNITED STATES" -"3429637120","3429698815","US","USA","UNITED STATES" -"3429699584","3429775359","US","USA","UNITED STATES" -"3429775360","3429777407","TC","TCA","TURKS AND CAICOS ISLANDS" -"3429777408","3429808639","US","USA","UNITED STATES" -"3429809152","3429816831","US","USA","UNITED STATES" -"3429817344","3429892095","US","USA","UNITED STATES" -"3429892096","3429957631","CA","CAN","CANADA" -"3429957632","3430025471","US","USA","UNITED STATES" -"3430026240","3430090239","US","USA","UNITED STATES" -"3430090752","3430092287","US","USA","UNITED STATES" -"3430092800","3430094335","US","USA","UNITED STATES" -"3430094848","3430104575","US","USA","UNITED STATES" -"3430105088","3430110975","US","USA","UNITED STATES" -"3430111232","3430114559","US","USA","UNITED STATES" -"3430115328","3430116863","US","USA","UNITED STATES" -"3430117376","3430118655","US","USA","UNITED STATES" -"3430119424","3430120959","US","USA","UNITED STATES" -"3430121472","3430127103","US","USA","UNITED STATES" -"3430127616","3430137343","US","USA","UNITED STATES" -"3430137856","3430141439","US","USA","UNITED STATES" -"3430141952","3430146047","US","USA","UNITED STATES" -"3430148096","3430153727","US","USA","UNITED STATES" -"3430154240","3430291295","US","USA","UNITED STATES" -"3430291296","3430291327","IS","ISL","ICELAND" -"3430291328","3430313967","US","USA","UNITED STATES" -"3430313968","3430313983","CA","CAN","CANADA" -"3430313984","3430319135","US","USA","UNITED STATES" -"3430319136","3430319143","SE","SWE","SWEDEN" -"3430319144","3430328831","US","USA","UNITED STATES" -"3430328832","3430329087","GH","GHA","GHANA" -"3430329088","3430354943","US","USA","UNITED STATES" -"3430354944","3430356991","PR","PRI","PUERTO RICO" -"3430356992","3430681343","US","USA","UNITED STATES" -"3430681600","3430682367","US","USA","UNITED STATES" -"3430682624","3430683391","US","USA","UNITED STATES" -"3430683648","3430699775","US","USA","UNITED STATES" -"3430700032","3430700799","US","USA","UNITED STATES" -"3430701056","3430702079","CA","CAN","CANADA" -"3430702080","3430702847","US","USA","UNITED STATES" -"3430703104","3430703871","US","USA","UNITED STATES" -"3430704128","3430705151","US","USA","UNITED STATES" -"3430705152","3430706175","MX","MEX","MEXICO" -"3430706176","3430707967","US","USA","UNITED STATES" -"3430708224","3430714367","US","USA","UNITED STATES" -"3430715392","3430719231","US","USA","UNITED STATES" -"3430719488","3430721279","US","USA","UNITED STATES" -"3430721536","3430722303","US","USA","UNITED STATES" -"3430722560","3430727423","US","USA","UNITED STATES" -"3430727680","3430730495","US","USA","UNITED STATES" -"3430730752","3430734591","US","USA","UNITED STATES" -"3430734848","3430738687","US","USA","UNITED STATES" -"3430738944","3430739711","US","USA","UNITED STATES" -"3430739968","3430742783","US","USA","UNITED STATES" -"3430743040","3430812159","US","USA","UNITED STATES" -"3430812672","3430813183","MX","MEX","MEXICO" -"3430813184","3430814207","US","USA","UNITED STATES" -"3430814720","3430828287","US","USA","UNITED STATES" -"3430828544","3430836735","US","USA","UNITED STATES" -"3430837248","3430842367","US","USA","UNITED STATES" -"3430842368","3430842879","DO","DOM","DOMINICAN REPUBLIC" -"3430842880","3430845439","US","USA","UNITED STATES" -"3430845440","3430845951","MX","MEX","MEXICO" -"3430845952","3430849535","US","USA","UNITED STATES" -"3430850048","3430861823","US","USA","UNITED STATES" -"3430862336","3430874367","US","USA","UNITED STATES" -"3430874624","3430976767","US","USA","UNITED STATES" -"3430977024","3430977791","US","USA","UNITED STATES" -"3430978304","3430993151","US","USA","UNITED STATES" -"3430993408","3430994431","US","USA","UNITED STATES" -"3430994688","3431005183","US","USA","UNITED STATES" -"3431005440","3431107583","US","USA","UNITED STATES" -"3431107840","3431114495","US","USA","UNITED STATES" -"3431114496","3431114751","CA","CAN","CANADA" -"3431114752","3431133183","US","USA","UNITED STATES" -"3431133440","3431467519","US","USA","UNITED STATES" -"3431468032","3431469055","CA","CAN","CANADA" -"3431469056","3431537151","US","USA","UNITED STATES" -"3431537664","3431596031","US","USA","UNITED STATES" -"3431596288","3431602687","CA","CAN","CANADA" -"3431602944","3431613439","CA","CAN","CANADA" -"3431613440","3431613695","US","USA","UNITED STATES" -"3431613696","3431620095","CA","CAN","CANADA" -"3431620352","3431621375","CA","CAN","CANADA" -"3431622400","3431622655","CA","CAN","CANADA" -"3431622912","3431624703","CA","CAN","CANADA" -"3431624960","3431625215","CA","CAN","CANADA" -"3431625472","3431638783","CA","CAN","CANADA" -"3431639040","3431641855","CA","CAN","CANADA" -"3431642624","3431657471","CA","CAN","CANADA" -"3431657472","3431658495","US","USA","UNITED STATES" -"3431658496","3431661311","CA","CAN","CANADA" -"3431661568","3431675903","US","USA","UNITED STATES" -"3431677952","3431731199","US","USA","UNITED STATES" -"3431734272","3431753727","US","USA","UNITED STATES" -"3431753728","3431759615","CA","CAN","CANADA" -"3431759616","3432003839","US","USA","UNITED STATES" -"3432004608","3432005631","CA","CAN","CANADA" -"3432005632","3432009215","US","USA","UNITED STATES" -"3432009216","3432009471","PR","PRI","PUERTO RICO" -"3432009472","3432019455","US","USA","UNITED STATES" -"3432019968","3432075263","US","USA","UNITED STATES" -"3432079360","3432084479","US","USA","UNITED STATES" -"3432085248","3432095231","US","USA","UNITED STATES" -"3432095488","3432099839","US","USA","UNITED STATES" -"3432100096","3432106239","US","USA","UNITED STATES" -"3432106240","3432106495","MX","MEX","MEXICO" -"3432106496","3432108543","US","USA","UNITED STATES" -"3432108800","3432110847","US","USA","UNITED STATES" -"3432111104","3432112639","US","USA","UNITED STATES" -"3432112896","3432113407","US","USA","UNITED STATES" -"3432113408","3432113663","CA","CAN","CANADA" -"3432113664","3432116479","US","USA","UNITED STATES" -"3432116736","3432205311","US","USA","UNITED STATES" -"3432205312","3432206335","CA","CAN","CANADA" -"3432206336","3432237567","US","USA","UNITED STATES" -"3432238080","3432513535","US","USA","UNITED STATES" -"3432514048","3432515071","US","USA","UNITED STATES" -"3432515584","3432517119","US","USA","UNITED STATES" -"3432517632","3432518143","US","USA","UNITED STATES" -"3432518656","3432519167","US","USA","UNITED STATES" -"3432519680","3432520703","US","USA","UNITED STATES" -"3432520704","3432520959","GB","GBR","UNITED KINGDOM" -"3432520960","3432523263","US","USA","UNITED STATES" -"3432523776","3432526335","US","USA","UNITED STATES" -"3432526848","3432536575","US","USA","UNITED STATES" -"3432537088","3432538879","US","USA","UNITED STATES" -"3432539136","3432540415","US","USA","UNITED STATES" -"3432540672","3432550911","US","USA","UNITED STATES" -"3432551424","3432551935","US","USA","UNITED STATES" -"3432552448","3432579071","US","USA","UNITED STATES" -"3432580096","3432580863","US","USA","UNITED STATES" -"3432581120","3432585215","US","USA","UNITED STATES" -"3432585216","3432585727","MX","MEX","MEXICO" -"3432586240","3432588031","US","USA","UNITED STATES" -"3432588288","3432589055","US","USA","UNITED STATES" -"3432589312","3432593151","US","USA","UNITED STATES" -"3432593408","3432596223","US","USA","UNITED STATES" -"3432596480","3432605695","US","USA","UNITED STATES" -"3432605952","3432610559","US","USA","UNITED STATES" -"3432610816","3432611839","US","USA","UNITED STATES" -"3432612864","3432613631","US","USA","UNITED STATES" -"3432613888","3432614655","US","USA","UNITED STATES" -"3432614912","3432615679","US","USA","UNITED STATES" -"3432615936","3432634111","US","USA","UNITED STATES" -"3432634368","3432635135","US","USA","UNITED STATES" -"3432635392","3432660991","US","USA","UNITED STATES" -"3432660992","3432662527","DE","DEU","GERMANY" -"3432662528","3432662531","PT","PRT","PORTUGAL" -"3432662532","3432663039","DE","DEU","GERMANY" -"3432663040","3432668671","US","USA","UNITED STATES" -"3432669184","3432670719","US","USA","UNITED STATES" -"3432671232","3432672511","US","USA","UNITED STATES" -"3432673280","3432675583","US","USA","UNITED STATES" -"3432677376","3432680703","US","USA","UNITED STATES" -"3432681472","3432683263","US","USA","UNITED STATES" -"3432683520","3432688895","US","USA","UNITED STATES" -"3432689664","3432695807","US","USA","UNITED STATES" -"3432697856","3432703231","US","USA","UNITED STATES" -"3432704000","3432716799","US","USA","UNITED STATES" -"3432717312","3432734463","US","USA","UNITED STATES" -"3432734720","3432806655","US","USA","UNITED STATES" -"3432807424","3432808447","CA","CAN","CANADA" -"3432808448","3433955327","US","USA","UNITED STATES" -"3433955584","3433964799","CA","CAN","CANADA" -"3433965056","3433967359","CA","CAN","CANADA" -"3433967616","3433981951","CA","CAN","CANADA" -"3433981952","3433983999","US","USA","UNITED STATES" -"3433984000","3434012671","CA","CAN","CANADA" -"3434012928","3434014719","CA","CAN","CANADA" -"3434015232","3434020607","CA","CAN","CANADA" -"3434020864","3434299391","US","USA","UNITED STATES" -"3434299392","3434303487","VE","VEN","VENEZUELA" -"3434303488","3434423295","US","USA","UNITED STATES" -"3434423296","3434423303","CA","CAN","CANADA" -"3434423304","3434427391","US","USA","UNITED STATES" -"3434427392","3434428415","HN","HND","HONDURAS" -"3434428416","3434433279","US","USA","UNITED STATES" -"3434433280","3434433535","PR","PRI","PUERTO RICO" -"3434433536","3434571775","US","USA","UNITED STATES" -"3434571776","3434573823","CO","COL","COLOMBIA" -"3434573824","3434583039","US","USA","UNITED STATES" -"3434583040","3434584063","NL","NLD","NETHERLANDS" -"3434584064","3434807295","US","USA","UNITED STATES" -"3434807552","3434810111","CA","CAN","CANADA" -"3434810368","3434824191","CA","CAN","CANADA" -"3434824448","3434831359","CA","CAN","CANADA" -"3434831360","3434831615","US","USA","UNITED STATES" -"3434831616","3434872575","CA","CAN","CANADA" -"3434872832","3434907647","US","USA","UNITED STATES" -"3434907648","3434909695","PA","PAN","PANAMA" -"3434909696","3434913791","US","USA","UNITED STATES" -"3434913792","3434914047","AG","ATG","ANTIGUA AND BARBUDA" -"3434914048","3434914303","DM","DMA","DOMINICA" -"3434914304","3434914815","AG","ATG","ANTIGUA AND BARBUDA" -"3434914816","3434915071","VG","VGB","VIRGIN ISLANDS, BRITISH" -"3434915072","3434915327","AG","ATG","ANTIGUA AND BARBUDA" -"3434915328","3434915583","DM","DMA","DOMINICA" -"3434915584","3434915839","KN","KNA","SAINT KITTS AND NEVIS" -"3434915840","3434916095","LC","LCA","SAINT LUCIA" -"3434916096","3434916351","AG","ATG","ANTIGUA AND BARBUDA" -"3434916352","3434916607","DM","DMA","DOMINICA" -"3434916608","3434917119","AG","ATG","ANTIGUA AND BARBUDA" -"3434917120","3434917375","LC","LCA","SAINT LUCIA" -"3434917376","3434917887","AG","ATG","ANTIGUA AND BARBUDA" -"3434917888","3435069439","US","USA","UNITED STATES" -"3435069440","3435134975","CA","CAN","CANADA" -"3435134976","3435267839","US","USA","UNITED STATES" -"3435268096","3435271423","US","USA","UNITED STATES" -"3435272192","3435294463","US","USA","UNITED STATES" -"3435294720","3435319039","US","USA","UNITED STATES" -"3435319296","3435320831","US","USA","UNITED STATES" -"3435321344","3435322879","US","USA","UNITED STATES" -"3435323392","3435364351","US","USA","UNITED STATES" -"3435397120","3435495423","US","USA","UNITED STATES" -"3435528192","3436249087","US","USA","UNITED STATES" -"3436249344","3436255743","CA","CAN","CANADA" -"3436256256","3436278271","CA","CAN","CANADA" -"3436278528","3436282367","CA","CAN","CANADA" -"3436282368","3436282623","US","USA","UNITED STATES" -"3436282624","3436289791","CA","CAN","CANADA" -"3436289792","3436290047","US","USA","UNITED STATES" -"3436290048","3436314367","CA","CAN","CANADA" -"3436314624","3436476415","US","USA","UNITED STATES" -"3436476416","3436478463","AW","ABW","ARUBA" -"3436478464","3436697087","US","USA","UNITED STATES" -"3436697088","3436697343","VE","VEN","VENEZUELA" -"3436697344","3437297663","US","USA","UNITED STATES" -"3437297920","3437307391","CA","CAN","CANADA" -"3437307904","3437310975","CA","CAN","CANADA" -"3437310976","3437311487","US","USA","UNITED STATES" -"3437311488","3437331711","CA","CAN","CANADA" -"3437331712","3437331967","US","USA","UNITED STATES" -"3437331968","3437332479","CA","CAN","CANADA" -"3437332736","3437334015","CA","CAN","CANADA" -"3437334016","3437334271","US","USA","UNITED STATES" -"3437334272","3437334783","CA","CAN","CANADA" -"3437335552","3437336063","CA","CAN","CANADA" -"3437336320","3437341695","CA","CAN","CANADA" -"3437341696","3437341951","US","USA","UNITED STATES" -"3437341952","3437343231","CA","CAN","CANADA" -"3437343488","3437346303","CA","CAN","CANADA" -"3437346560","3437350911","CA","CAN","CANADA" -"3437351424","3437354751","CA","CAN","CANADA" -"3437355008","3437358847","CA","CAN","CANADA" -"3437358848","3437359103","US","USA","UNITED STATES" -"3437359104","3437362943","CA","CAN","CANADA" -"3437363200","3437428735","CA","CAN","CANADA" -"3437428736","3437715711","US","USA","UNITED STATES" -"3437715712","3437715967","IT","ITA","ITALY" -"3437715968","3437736447","US","USA","UNITED STATES" -"3437736448","3437737471","CL","CHL","CHILE" -"3437737472","3437748223","US","USA","UNITED STATES" -"3437748224","3437748479","GB","GBR","UNITED KINGDOM" -"3437748480","3437748991","NL","NLD","NETHERLANDS" -"3437748992","3437749247","US","USA","UNITED STATES" -"3437749248","3437749503","DE","DEU","GERMANY" -"3437749504","3437749759","US","USA","UNITED STATES" -"3437749760","3437750015","JP","JPN","JAPAN" -"3437750016","3437750271","BE","BEL","BELGIUM" -"3437750272","3437750527","GB","GBR","UNITED KINGDOM" -"3437750528","3437751551","US","USA","UNITED STATES" -"3437751552","3437751807","IT","ITA","ITALY" -"3437751808","3437752063","GB","GBR","UNITED KINGDOM" -"3437752064","3437752319","ES","ESP","SPAIN" -"3437752320","3437752575","IE","IRL","IRELAND" -"3437752832","3437755135","US","USA","UNITED STATES" -"3437755136","3437755647","JP","JPN","JAPAN" -"3437755648","3437755903","GB","GBR","UNITED KINGDOM" -"3437755904","3437756159","US","USA","UNITED STATES" -"3437756160","3437756415","IE","IRL","IRELAND" -"3437756416","3437772799","US","USA","UNITED STATES" -"3437772800","3437776895","CA","CAN","CANADA" -"3437789184","3437961215","US","USA","UNITED STATES" -"3437964288","3437979903","US","USA","UNITED STATES" -"3437980672","3437984255","US","USA","UNITED STATES" -"3437984768","3437989375","US","USA","UNITED STATES" -"3437989888","3438006271","US","USA","UNITED STATES" -"3438006272","3438010367","CA","CAN","CANADA" -"3438010368","3438034943","US","USA","UNITED STATES" -"3438034944","3438051327","BS","BHS","BAHAMAS" -"3438051328","3438084095","US","USA","UNITED STATES" -"3438084096","3438116863","CA","CAN","CANADA" -"3438116864","3438160895","US","USA","UNITED STATES" -"3438161152","3438200063","US","USA","UNITED STATES" -"3438200576","3438214655","US","USA","UNITED STATES" -"3438214912","3438215167","US","USA","UNITED STATES" -"3438215424","3438215935","CA","CAN","CANADA" -"3438216192","3438217983","CA","CAN","CANADA" -"3438218240","3438218751","CA","CAN","CANADA" -"3438219264","3438219519","CA","CAN","CANADA" -"3438219776","3438246911","CA","CAN","CANADA" -"3438247168","3438252543","CA","CAN","CANADA" -"3438252800","3438261759","CA","CAN","CANADA" -"3438262016","3438280447","CA","CAN","CANADA" -"3438280704","3438542847","US","USA","UNITED STATES" -"3438542848","3438545423","CA","CAN","CANADA" -"3438545424","3438545431","US","USA","UNITED STATES" -"3438545432","3438545471","CA","CAN","CANADA" -"3438545472","3438545479","US","USA","UNITED STATES" -"3438545480","3438550071","CA","CAN","CANADA" -"3438550072","3438550079","US","USA","UNITED STATES" -"3438550080","3438550447","CA","CAN","CANADA" -"3438550448","3438550463","US","USA","UNITED STATES" -"3438550464","3438552271","CA","CAN","CANADA" -"3438552272","3438552287","US","USA","UNITED STATES" -"3438552288","3438570031","CA","CAN","CANADA" -"3438570032","3438570047","MY","MYS","MALAYSIA" -"3438570048","3438600319","CA","CAN","CANADA" -"3438600320","3438600351","US","USA","UNITED STATES" -"3438600352","3438608383","CA","CAN","CANADA" -"3438608384","3438813183","US","USA","UNITED STATES" -"3438813184","3438814207","GH","GHA","GHANA" -"3438814208","3438895103","US","USA","UNITED STATES" -"3438895104","3438896639","HN","HND","HONDURAS" -"3438896640","3439059711","US","USA","UNITED STATES" -"3439059712","3439059967","PR","PRI","PUERTO RICO" -"3439059968","3439183359","US","USA","UNITED STATES" -"3439183360","3439183871","HT","HTI","HAITI" -"3439183872","3447991551","US","USA","UNITED STATES" -"3447991808","3448004095","US","USA","UNITED STATES" -"3448004608","3448263423","US","USA","UNITED STATES" -"3448263424","3448263935","AG","ATG","ANTIGUA AND BARBUDA" -"3448263936","3448338687","US","USA","UNITED STATES" -"3448338688","3448339455","GB","GBR","UNITED KINGDOM" -"3448339456","3448377343","US","USA","UNITED STATES" -"3448377344","3448377855","AG","ATG","ANTIGUA AND BARBUDA" -"3448377856","3448379415","US","USA","UNITED STATES" -"3448379416","3448379423","IL","ISR","ISRAEL" -"3448379424","3448379519","US","USA","UNITED STATES" -"3448379520","3448379647","IN","IND","INDIA" -"3448379648","3448379903","SG","SGP","SINGAPORE" -"3448379904","3448380063","US","USA","UNITED STATES" -"3448380064","3448380079","SG","SGP","SINGAPORE" -"3448380080","3448380095","US","USA","UNITED STATES" -"3448380096","3448380223","SG","SGP","SINGAPORE" -"3448380224","3448380415","US","USA","UNITED STATES" -"3448380416","3448380719","SG","SGP","SINGAPORE" -"3448380720","3448380735","US","USA","UNITED STATES" -"3448380736","3448380775","SG","SGP","SINGAPORE" -"3448380776","3448380783","AE","ARE","UNITED ARAB EMIRATES" -"3448380784","3448380799","SG","SGP","SINGAPORE" -"3448380800","3448380839","US","USA","UNITED STATES" -"3448380840","3448380847","SG","SGP","SINGAPORE" -"3448380848","3448381183","US","USA","UNITED STATES" -"3448381184","3448381439","SG","SGP","SINGAPORE" -"3448381440","3448381695","GB","GBR","UNITED KINGDOM" -"3448381696","3448382343","US","USA","UNITED STATES" -"3448382344","3448382351","IE","IRL","IRELAND" -"3448382352","3448397887","US","USA","UNITED STATES" -"3448397888","3448397967","CA","CAN","CANADA" -"3448397968","3448398335","US","USA","UNITED STATES" -"3448398336","3448399103","CA","CAN","CANADA" -"3448399104","3448399359","US","USA","UNITED STATES" -"3448399360","3448399871","CA","CAN","CANADA" -"3448399872","3448411391","US","USA","UNITED STATES" -"3448411392","3448411455","CA","CAN","CANADA" -"3448411456","3448461311","US","USA","UNITED STATES" -"3448461312","3448461391","GB","GBR","UNITED KINGDOM" -"3448461392","3448461415","US","USA","UNITED STATES" -"3448461416","3448461423","SG","SGP","SINGAPORE" -"3448461424","3448461431","US","USA","UNITED STATES" -"3448461432","3448461439","GB","GBR","UNITED KINGDOM" -"3448461440","3448461543","US","USA","UNITED STATES" -"3448461544","3448461551","GB","GBR","UNITED KINGDOM" -"3448461552","3448461559","US","USA","UNITED STATES" -"3448461560","3448461567","GB","GBR","UNITED KINGDOM" -"3448461568","3448461599","SG","SGP","SINGAPORE" -"3448461600","3448461631","US","USA","UNITED STATES" -"3448461632","3448461695","SG","SGP","SINGAPORE" -"3448461696","3448461735","US","USA","UNITED STATES" -"3448461736","3448461743","GB","GBR","UNITED KINGDOM" -"3448461744","3448462111","US","USA","UNITED STATES" -"3448462112","3448462127","SG","SGP","SINGAPORE" -"3448462128","3448462143","US","USA","UNITED STATES" -"3448462144","3448462223","SG","SGP","SINGAPORE" -"3448462224","3448462239","GB","GBR","UNITED KINGDOM" -"3448462240","3448462255","US","USA","UNITED STATES" -"3448462256","3448462271","GB","GBR","UNITED KINGDOM" -"3448462272","3448500479","US","USA","UNITED STATES" -"3448500480","3448500735","SG","SGP","SINGAPORE" -"3448500736","3448556671","US","USA","UNITED STATES" -"3448556672","3448556735","GB","GBR","UNITED KINGDOM" -"3448556736","3448556799","US","USA","UNITED STATES" -"3448556800","3448556815","GB","GBR","UNITED KINGDOM" -"3448556816","3448558911","US","USA","UNITED STATES" -"3448558912","3448558919","GB","GBR","UNITED KINGDOM" -"3448558920","3448559103","US","USA","UNITED STATES" -"3448559104","3448559359","GB","GBR","UNITED KINGDOM" -"3448559360","3448637183","US","USA","UNITED STATES" -"3448637440","3448638975","US","USA","UNITED STATES" -"3448639488","3448647423","US","USA","UNITED STATES" -"3448647680","3448651775","US","USA","UNITED STATES" -"3448652800","3448871935","US","USA","UNITED STATES" -"3448872448","3448872703","US","USA","UNITED STATES" -"3448872960","3449001245","US","USA","UNITED STATES" -"3449001246","3449001246","MC","MCO","MONACO" -"3449001247","3449096191","US","USA","UNITED STATES" -"3449098240","3449159679","US","USA","UNITED STATES" -"3449159680","3449159935","CA","CAN","CANADA" -"3449159936","3449160191","US","USA","UNITED STATES" -"3449160192","3449160447","CA","CAN","CANADA" -"3449160448","3449163775","US","USA","UNITED STATES" -"3449163776","3449164031","CA","CAN","CANADA" -"3449164032","3449164799","US","USA","UNITED STATES" -"3449164800","3449165055","CA","CAN","CANADA" -"3449165056","3449166847","US","USA","UNITED STATES" -"3449166848","3449167103","CA","CAN","CANADA" -"3449167104","3449167359","US","USA","UNITED STATES" -"3449167360","3449167615","CA","CAN","CANADA" -"3449167616","3449168383","US","USA","UNITED STATES" -"3449168384","3449168639","CA","CAN","CANADA" -"3449168640","3449171711","US","USA","UNITED STATES" -"3449171712","3449172223","CA","CAN","CANADA" -"3449172224","3449174015","US","USA","UNITED STATES" -"3449174016","3449174783","CA","CAN","CANADA" -"3449174784","3449176063","US","USA","UNITED STATES" -"3449176064","3449176319","CA","CAN","CANADA" -"3449176320","3449176831","US","USA","UNITED STATES" -"3449176832","3449177599","CA","CAN","CANADA" -"3449177600","3449178111","US","USA","UNITED STATES" -"3449178112","3449178367","CA","CAN","CANADA" -"3449178368","3449178623","US","USA","UNITED STATES" -"3449178624","3449179647","CA","CAN","CANADA" -"3449179648","3449180671","US","USA","UNITED STATES" -"3449180672","3449180927","CA","CAN","CANADA" -"3449180928","3449181439","US","USA","UNITED STATES" -"3449181440","3449181695","CA","CAN","CANADA" -"3449181696","3449182719","US","USA","UNITED STATES" -"3449182720","3449182975","CA","CAN","CANADA" -"3449182976","3449184255","US","USA","UNITED STATES" -"3449184256","3449184511","CA","CAN","CANADA" -"3449184512","3449185535","US","USA","UNITED STATES" -"3449185536","3449185791","CA","CAN","CANADA" -"3449185792","3449186559","US","USA","UNITED STATES" -"3449186560","3449186815","CA","CAN","CANADA" -"3449186816","3449187839","US","USA","UNITED STATES" -"3449187840","3449188095","CA","CAN","CANADA" -"3449188096","3449188607","US","USA","UNITED STATES" -"3449188608","3449188671","CA","CAN","CANADA" -"3449188672","3449188703","US","USA","UNITED STATES" -"3449188704","3449188767","CA","CAN","CANADA" -"3449188768","3449188863","US","USA","UNITED STATES" -"3449188864","3449189119","CA","CAN","CANADA" -"3449189120","3449191223","US","USA","UNITED STATES" -"3449191224","3449191231","CA","CAN","CANADA" -"3449191232","3449191295","US","USA","UNITED STATES" -"3449191296","3449191303","CA","CAN","CANADA" -"3449191304","3449191351","US","USA","UNITED STATES" -"3449191352","3449191359","CA","CAN","CANADA" -"3449191360","3449191423","US","USA","UNITED STATES" -"3449191424","3449191679","CA","CAN","CANADA" -"3449191680","3449194495","US","USA","UNITED STATES" -"3449194496","3449194751","CA","CAN","CANADA" -"3449194752","3449196031","US","USA","UNITED STATES" -"3449196032","3449196287","CA","CAN","CANADA" -"3449196288","3449198879","US","USA","UNITED STATES" -"3449198880","3449199103","CA","CAN","CANADA" -"3449199104","3449202983","US","USA","UNITED STATES" -"3449202984","3449202991","CA","CAN","CANADA" -"3449202992","3449203175","US","USA","UNITED STATES" -"3449203176","3449203183","CA","CAN","CANADA" -"3449203184","3449203543","US","USA","UNITED STATES" -"3449203544","3449203551","CA","CAN","CANADA" -"3449203552","3449203695","US","USA","UNITED STATES" -"3449203696","3449203703","CA","CAN","CANADA" -"3449203704","3449204735","US","USA","UNITED STATES" -"3449204736","3449205759","CA","CAN","CANADA" -"3449205760","3449210623","US","USA","UNITED STATES" -"3449210624","3449211391","CA","CAN","CANADA" -"3449211392","3449211647","US","USA","UNITED STATES" -"3449211648","3449211903","CA","CAN","CANADA" -"3449211904","3449213183","US","USA","UNITED STATES" -"3449213184","3449213695","CA","CAN","CANADA" -"3449213696","3449214551","US","USA","UNITED STATES" -"3449214552","3449214559","CA","CAN","CANADA" -"3449214560","3449214975","US","USA","UNITED STATES" -"3449214976","3449215231","CA","CAN","CANADA" -"3449215232","3449215487","US","USA","UNITED STATES" -"3449215488","3449215743","CA","CAN","CANADA" -"3449215744","3449220863","US","USA","UNITED STATES" -"3449220864","3449221119","CA","CAN","CANADA" -"3449221120","3449222655","US","USA","UNITED STATES" -"3449222656","3449223423","CA","CAN","CANADA" -"3449223424","3449224191","US","USA","UNITED STATES" -"3449224192","3449224447","CA","CAN","CANADA" -"3449224448","3449224703","US","USA","UNITED STATES" -"3449224704","3449224959","CA","CAN","CANADA" -"3449224960","3449225215","US","USA","UNITED STATES" -"3449225472","3449254143","CA","CAN","CANADA" -"3449254912","3449273599","CA","CAN","CANADA" -"3449273856","3449278975","CA","CAN","CANADA" -"3449280000","3449290495","CA","CAN","CANADA" -"3449290752","3449409535","US","USA","UNITED STATES" -"3449410560","3449598207","US","USA","UNITED STATES" -"3449598208","3449598463","GB","GBR","UNITED KINGDOM" -"3449598464","3449755391","US","USA","UNITED STATES" -"3449755648","3449758207","US","USA","UNITED STATES" -"3449758464","3449760767","US","USA","UNITED STATES" -"3449761024","3449767935","US","USA","UNITED STATES" -"3449768192","3449769727","US","USA","UNITED STATES" -"3449769984","3449782271","US","USA","UNITED STATES" -"3449782528","3449783551","US","USA","UNITED STATES" -"3449783808","3449813503","US","USA","UNITED STATES" -"3449813760","3449814783","US","USA","UNITED STATES" -"3449815040","3449843199","US","USA","UNITED STATES" -"3449843200","3449843711","YE","YEM","YEMEN" -"3449843712","3449874687","US","USA","UNITED STATES" -"3449874688","3449874943","AG","ATG","ANTIGUA AND BARBUDA" -"3449874944","3449910719","US","USA","UNITED STATES" -"3449910720","3449910783","CA","CAN","CANADA" -"3449910784","3449960127","US","USA","UNITED STATES" -"3449960128","3449960159","CA","CAN","CANADA" -"3449960160","3450213887","US","USA","UNITED STATES" -"3450214144","3450217215","US","USA","UNITED STATES" -"3450217216","3450217471","LC","LCA","SAINT LUCIA" -"3450217472","3450228735","US","USA","UNITED STATES" -"3450228992","3450235903","US","USA","UNITED STATES" -"3450236160","3450239743","US","USA","UNITED STATES" -"3450240000","3450245375","US","USA","UNITED STATES" -"3450245632","3450248703","US","USA","UNITED STATES" -"3450248960","3450252031","US","USA","UNITED STATES" -"3450252288","3450254079","US","USA","UNITED STATES" -"3450254336","3450254591","US","USA","UNITED STATES" -"3450254848","3450271487","US","USA","UNITED STATES" -"3450271744","3450272511","US","USA","UNITED STATES" -"3450272512","3450272767","MX","MEX","MEXICO" -"3450272768","3450273535","US","USA","UNITED STATES" -"3450273792","3450293759","US","USA","UNITED STATES" -"3450294272","3450328831","US","USA","UNITED STATES" -"3450329088","3450334719","US","USA","UNITED STATES" -"3450335232","3450345231","US","USA","UNITED STATES" -"3450345232","3450345247","FR","FRA","FRANCE" -"3450345248","3450345263","IT","ITA","ITALY" -"3450345264","3450612479","US","USA","UNITED STATES" -"3450612736","3450685183","US","USA","UNITED STATES" -"3450685440","3450686719","US","USA","UNITED STATES" -"3450687488","3450699007","US","USA","UNITED STATES" -"3450699776","3450731519","US","USA","UNITED STATES" -"3450731520","3450732543","CA","CAN","CANADA" -"3450732544","3450773503","US","USA","UNITED STATES" -"3450773504","3450777599","CA","CAN","CANADA" -"3450777600","3451482111","US","USA","UNITED STATES" -"3451486208","3451543551","US","USA","UNITED STATES" -"3451551744","3451715583","US","USA","UNITED STATES" -"3451715840","3451724543","CA","CAN","CANADA" -"3451725568","3451726847","CA","CAN","CANADA" -"3451727360","3451737343","CA","CAN","CANADA" -"3451737344","3451737599","US","USA","UNITED STATES" -"3451737600","3451740927","CA","CAN","CANADA" -"3451741184","3451741695","CA","CAN","CANADA" -"3451742208","3451744255","CA","CAN","CANADA" -"3451744256","3451745535","US","USA","UNITED STATES" -"3451745536","3451749887","CA","CAN","CANADA" -"3451750144","3451766783","CA","CAN","CANADA" -"3451767296","3451767551","CA","CAN","CANADA" -"3451767808","3451780863","CA","CAN","CANADA" -"3451781120","3451912191","US","USA","UNITED STATES" -"3451912192","3452174335","CA","CAN","CANADA" -"3452174592","3452174847","US","USA","UNITED STATES" -"3452176128","3452177407","US","USA","UNITED STATES" -"3452177920","3452178175","US","USA","UNITED STATES" -"3452178432","3452187135","US","USA","UNITED STATES" -"3452187392","3452190463","US","USA","UNITED STATES" -"3452191488","3452192255","US","USA","UNITED STATES" -"3452192512","3452194047","US","USA","UNITED STATES" -"3452194816","3452199423","US","USA","UNITED STATES" -"3452199680","3452204287","US","USA","UNITED STATES" -"3452205056","3452216831","US","USA","UNITED STATES" -"3452217344","3452225791","US","USA","UNITED STATES" -"3452226560","3452436479","US","USA","UNITED STATES" -"3452436480","3452502015","CA","CAN","CANADA" -"3452502016","3452534783","US","USA","UNITED STATES" -"3452538880","3452678143","US","USA","UNITED STATES" -"3452678144","3452682239","BE","BEL","BELGIUM" -"3452682240","3452702719","US","USA","UNITED STATES" -"3452731392","3452764159","US","USA","UNITED STATES" -"3452764160","3452895231","CA","CAN","CANADA" -"3452895488","3452902399","CA","CAN","CANADA" -"3452902656","3452914175","CA","CAN","CANADA" -"3452914176","3452914431","US","USA","UNITED STATES" -"3452914432","3452919551","CA","CAN","CANADA" -"3452919808","3452920831","CA","CAN","CANADA" -"3452920832","3452922879","US","USA","UNITED STATES" -"3452923392","3452931327","CA","CAN","CANADA" -"3452931584","3452934911","CA","CAN","CANADA" -"3452934912","3452936191","US","USA","UNITED STATES" -"3452936192","3452940799","CA","CAN","CANADA" -"3452941056","3452942847","CA","CAN","CANADA" -"3452943104","3452953087","CA","CAN","CANADA" -"3452953344","3452960511","CA","CAN","CANADA" -"3452960768","3453026303","US","USA","UNITED STATES" -"3453026560","3453028095","CA","CAN","CANADA" -"3453028352","3453028607","CA","CAN","CANADA" -"3453029376","3453091839","US","USA","UNITED STATES" -"3453092096","3453101055","CA","CAN","CANADA" -"3453101056","3453101311","US","USA","UNITED STATES" -"3453101312","3453123839","CA","CAN","CANADA" -"3453124096","3453128959","CA","CAN","CANADA" -"3453129216","3453129983","CA","CAN","CANADA" -"3453130240","3453133823","CA","CAN","CANADA" -"3453134848","3453139455","CA","CAN","CANADA" -"3453139968","3453140991","US","USA","UNITED STATES" -"3453140992","3453149183","CA","CAN","CANADA" -"3453149184","3453149439","US","USA","UNITED STATES" -"3453149440","3453151743","CA","CAN","CANADA" -"3453152000","3453155327","CA","CAN","CANADA" -"3453155584","3453157119","CA","CAN","CANADA" -"3453157632","3453159423","CA","CAN","CANADA" -"3453159424","3453159935","BM","BMU","BERMUDA" -"3453159936","3453163519","CA","CAN","CANADA" -"3453164032","3453180671","CA","CAN","CANADA" -"3453180928","3453195263","CA","CAN","CANADA" -"3453195520","3453199871","CA","CAN","CANADA" -"3453200384","3453206527","CA","CAN","CANADA" -"3453206528","3453207551","HN","HND","HONDURAS" -"3453207552","3453207807","NI","NIC","NICARAGUA" -"3453207808","3453208575","HN","HND","HONDURAS" -"3453208576","3453208831","NI","NIC","NICARAGUA" -"3453208832","3453209599","HN","HND","HONDURAS" -"3453209600","3453209855","US","USA","UNITED STATES" -"3453209856","3453210367","HN","HND","HONDURAS" -"3453210368","3453210623","SV","SLV","EL SALVADOR" -"3453210624","3453213183","CR","CRI","COSTA RICA" -"3453213184","3453214719","HN","HND","HONDURAS" -"3453214720","3453215231","GT","GTM","GUATEMALA" -"3453215232","3453215999","SV","SLV","EL SALVADOR" -"3453216000","3453217023","CR","CRI","COSTA RICA" -"3453217024","3453217791","SV","SLV","EL SALVADOR" -"3453217792","3453219327","CR","CRI","COSTA RICA" -"3453219328","3453219583","US","USA","UNITED STATES" -"3453219584","3453219839","SV","SLV","EL SALVADOR" -"3453219840","3453220607","US","USA","UNITED STATES" -"3453220608","3453222911","HN","HND","HONDURAS" -"3453222912","3453375999","US","USA","UNITED STATES" -"3453376000","3453376255","CA","CAN","CANADA" -"3453376256","3453403135","US","USA","UNITED STATES" -"3453403136","3453405951","BB","BRB","BARBADOS" -"3453405952","3453406207","KN","KNA","SAINT KITTS AND NEVIS" -"3453406208","3453406463","BB","BRB","BARBADOS" -"3453406464","3453406975","VC","VCT","SAINT VINCENT AND THE GRENADINES" -"3453406976","3453407231","GD","GRD","GRENADA" -"3453407232","3453407743","BB","BRB","BARBADOS" -"3453407744","3453408255","GD","GRD","GRENADA" -"3453408256","3453409023","BB","BRB","BARBADOS" -"3453409024","3453409535","KN","KNA","SAINT KITTS AND NEVIS" -"3453409536","3453411327","BB","BRB","BARBADOS" -"3453411328","3453551839","US","USA","UNITED STATES" -"3453551840","3453551879","GB","GBR","UNITED KINGDOM" -"3453551880","3453551895","US","USA","UNITED STATES" -"3453551896","3453551903","GB","GBR","UNITED KINGDOM" -"3453551904","3453551935","US","USA","UNITED STATES" -"3453551936","3453551967","GB","GBR","UNITED KINGDOM" -"3453551968","3453552039","US","USA","UNITED STATES" -"3453552040","3453552047","GB","GBR","UNITED KINGDOM" -"3453552048","3453552399","US","USA","UNITED STATES" -"3453552400","3453552407","GB","GBR","UNITED KINGDOM" -"3453552408","3453552455","US","USA","UNITED STATES" -"3453552456","3453552463","IE","IRL","IRELAND" -"3453552464","3453552471","GB","GBR","UNITED KINGDOM" -"3453552472","3453552511","US","USA","UNITED STATES" -"3453552512","3453552639","IE","IRL","IRELAND" -"3453552640","3453552895","GB","GBR","UNITED KINGDOM" -"3453552896","3453553151","US","USA","UNITED STATES" -"3453553152","3453553407","GB","GBR","UNITED KINGDOM" -"3453553408","3453553631","US","USA","UNITED STATES" -"3453553632","3453553639","GB","GBR","UNITED KINGDOM" -"3453553640","3453553919","US","USA","UNITED STATES" -"3453553920","3453553983","GB","GBR","UNITED KINGDOM" -"3453553984","3453554063","US","USA","UNITED STATES" -"3453554064","3453554095","GB","GBR","UNITED KINGDOM" -"3453554096","3453554159","US","USA","UNITED STATES" -"3453554160","3453554175","GB","GBR","UNITED KINGDOM" -"3453554176","3453554207","US","USA","UNITED STATES" -"3453554208","3453554215","GB","GBR","UNITED KINGDOM" -"3453554216","3453554431","US","USA","UNITED STATES" -"3453554432","3453554687","GB","GBR","UNITED KINGDOM" -"3453554688","3453555711","US","USA","UNITED STATES" -"3453555712","3453555767","GB","GBR","UNITED KINGDOM" -"3453555768","3453607935","US","USA","UNITED STATES" -"3453607936","3453608959","KN","KNA","SAINT KITTS AND NEVIS" -"3453608960","3453609983","LC","LCA","SAINT LUCIA" -"3453609984","3453612543","AG","ATG","ANTIGUA AND BARBUDA" -"3453612544","3453613055","KN","KNA","SAINT KITTS AND NEVIS" -"3453613056","3453615359","AG","ATG","ANTIGUA AND BARBUDA" -"3453615360","3453615615","KN","KNA","SAINT KITTS AND NEVIS" -"3453615616","3453616127","AG","ATG","ANTIGUA AND BARBUDA" -"3453616128","3454436351","US","USA","UNITED STATES" -"3454436352","3454436607","GU","GUM","GUAM" -"3454436608","3454599167","US","USA","UNITED STATES" -"3454599424","3454601215","CA","CAN","CANADA" -"3454601216","3454602239","US","USA","UNITED STATES" -"3454603008","3454603519","CA","CAN","CANADA" -"3454604032","3454604799","CA","CAN","CANADA" -"3454604800","3454607359","US","USA","UNITED STATES" -"3454607360","3454608127","CA","CAN","CANADA" -"3454608128","3454608383","US","USA","UNITED STATES" -"3454608384","3454609151","CA","CAN","CANADA" -"3454609408","3454611455","US","USA","UNITED STATES" -"3454611456","3454617343","CA","CAN","CANADA" -"3454617600","3454617855","CA","CAN","CANADA" -"3454618112","3454618367","CA","CAN","CANADA" -"3454618624","3454619647","US","USA","UNITED STATES" -"3454619648","3454631423","CA","CAN","CANADA" -"3454631936","3454634751","CA","CAN","CANADA" -"3454635008","3454636031","US","USA","UNITED STATES" -"3454636032","3454636799","CA","CAN","CANADA" -"3454636800","3454637055","US","USA","UNITED STATES" -"3454637056","3454652159","CA","CAN","CANADA" -"3454652416","3454661631","CA","CAN","CANADA" -"3454661632","3454662655","US","USA","UNITED STATES" -"3454662656","3454664447","CA","CAN","CANADA" -"3454664704","3454672895","US","USA","UNITED STATES" -"3454672896","3454681087","CA","CAN","CANADA" -"3454681088","3454705151","US","USA","UNITED STATES" -"3454705152","3454705215","GB","GBR","UNITED KINGDOM" -"3454705216","3454730239","US","USA","UNITED STATES" -"3454730240","3454732287","EC","ECU","ECUADOR" -"3454732288","3454795775","US","USA","UNITED STATES" -"3454796032","3454808831","CA","CAN","CANADA" -"3454808832","3454809087","US","USA","UNITED STATES" -"3454809088","3454810111","CA","CAN","CANADA" -"3454810368","3454814975","CA","CAN","CANADA" -"3454814976","3454815231","US","USA","UNITED STATES" -"3454815232","3454815743","CA","CAN","CANADA" -"3454816256","3454816511","CA","CAN","CANADA" -"3454816768","3454828287","CA","CAN","CANADA" -"3454828544","3454861055","CA","CAN","CANADA" -"3454861568","3454867711","CA","CAN","CANADA" -"3454867968","3454881535","CA","CAN","CANADA" -"3454881792","3454883839","CA","CAN","CANADA" -"3454883840","3454914559","US","USA","UNITED STATES" -"3454915072","3454926591","CA","CAN","CANADA" -"3454926848","3455109119","US","USA","UNITED STATES" -"3455109120","3455111167","HN","HND","HONDURAS" -"3455111168","3455122879","US","USA","UNITED STATES" -"3455122880","3455122887","PR","PRI","PUERTO RICO" -"3455122888","3455132159","US","USA","UNITED STATES" -"3455132160","3455133695","BO","BOL","BOLIVIA" -"3455133696","3455242407","US","USA","UNITED STATES" -"3455242408","3455242415","CA","CAN","CANADA" -"3455242416","3455244847","US","USA","UNITED STATES" -"3455244848","3455244855","CA","CAN","CANADA" -"3455244856","3455320063","US","USA","UNITED STATES" -"3455320064","3455322111","FR","FRA","FRANCE" -"3455322112","3455551999","US","USA","UNITED STATES" -"3455552000","3455552255","EC","ECU","ECUADOR" -"3455552256","3455566079","US","USA","UNITED STATES" -"3455566080","3455566335","EC","ECU","ECUADOR" -"3455566336","3455713279","US","USA","UNITED STATES" -"3455713280","3455778815","CA","CAN","CANADA" -"3455778816","3455819775","US","USA","UNITED STATES" -"3455844352","3456303103","US","USA","UNITED STATES" -"3456303104","3456311295","JP","JPN","JAPAN" -"3456311296","3456892927","US","USA","UNITED STATES" -"3456892928","3456958463","CA","CAN","CANADA" -"3456958464","3457683967","US","USA","UNITED STATES" -"3457683968","3457684735","CA","CAN","CANADA" -"3457684736","3457723535","US","USA","UNITED STATES" -"3457723536","3457723551","GB","GBR","UNITED KINGDOM" -"3457723552","3457859839","US","USA","UNITED STATES" -"3457859840","3457860095","CA","CAN","CANADA" -"3457860096","3457862847","US","USA","UNITED STATES" -"3457862848","3457862911","CA","CAN","CANADA" -"3457862912","3458141631","US","USA","UNITED STATES" -"3458141632","3458141655","GB","GBR","UNITED KINGDOM" -"3458141656","3458195455","US","USA","UNITED STATES" -"3458195456","3458196479","SG","SGP","SINGAPORE" -"3458196480","3458811903","US","USA","UNITED STATES" -"3458813952","3458818047","CA","CAN","CANADA" -"3458818048","3458820095","US","USA","UNITED STATES" -"3458822144","3459055615","US","USA","UNITED STATES" -"3459055616","3459121151","CA","CAN","CANADA" -"3459121152","3459186687","US","USA","UNITED STATES" -"3459186688","3459252223","CA","CAN","CANADA" -"3459252224","3459266559","US","USA","UNITED STATES" -"3459266560","3459267583","AG","ATG","ANTIGUA AND BARBUDA" -"3459267584","3459267839","LC","LCA","SAINT LUCIA" -"3459267840","3459268607","AG","ATG","ANTIGUA AND BARBUDA" -"3459268608","3459295231","US","USA","UNITED STATES" -"3459295232","3459296255","KR","KOR","REPUBLIC OF KOREA" -"3459296256","3459326463","US","USA","UNITED STATES" -"3459326464","3459327487","CA","CAN","CANADA" -"3459327488","3459327999","CO","COL","COLOMBIA" -"3459328000","3459329023","CL","CHL","CHILE" -"3459329024","3459330047","US","USA","UNITED STATES" -"3459330048","3459330303","CL","CHL","CHILE" -"3459330304","3459331071","US","USA","UNITED STATES" -"3459331072","3459331583","MX","MEX","MEXICO" -"3459331584","3459332607","PA","PAN","PANAMA" -"3459332608","3459334399","US","USA","UNITED STATES" -"3459334400","3459334655","CA","CAN","CANADA" -"3459334656","3459340031","US","USA","UNITED STATES" -"3459340032","3459340287","VE","VEN","VENEZUELA" -"3459340288","3459340543","MX","MEX","MEXICO" -"3459340544","3459341823","US","USA","UNITED STATES" -"3459341824","3459342079","IL","ISR","ISRAEL" -"3459342080","3459342335","US","USA","UNITED STATES" -"3459342336","3459342591","VE","VEN","VENEZUELA" -"3459342592","3459342847","US","USA","UNITED STATES" -"3459342848","3459343103","VE","VEN","VENEZUELA" -"3459343104","3459343615","US","USA","UNITED STATES" -"3459343616","3459344127","OM","OMN","OMAN" -"3459344128","3459345663","US","USA","UNITED STATES" -"3459345664","3459346175","OM","OMN","OMAN" -"3459346176","3459347967","US","USA","UNITED STATES" -"3459347968","3459348223","PR","PRI","PUERTO RICO" -"3459348224","3459348479","AG","ATG","ANTIGUA AND BARBUDA" -"3459348480","3459348991","US","USA","UNITED STATES" -"3459348992","3459349503","IT","ITA","ITALY" -"3459349504","3459350527","US","USA","UNITED STATES" -"3459350528","3459352575","VE","VEN","VENEZUELA" -"3459352576","3459352831","US","USA","UNITED STATES" -"3459352832","3459353087","FM","FSM","FEDERATED STATES OF MICRONESIA" -"3459353088","3459353599","US","USA","UNITED STATES" -"3459353600","3459354623","CO","COL","COLOMBIA" -"3459354624","3459357183","NI","NIC","NICARAGUA" -"3459357184","3459357439","VE","VEN","VENEZUELA" -"3459357440","3459362815","US","USA","UNITED STATES" -"3459362816","3459364863","CO","COL","COLOMBIA" -"3459364864","3459366911","AR","ARG","ARGENTINA" -"3459366912","3459368959","VE","VEN","VENEZUELA" -"3459368960","3459371007","MX","MEX","MEXICO" -"3459371008","3459373055","PE","PER","PERU" -"3459373056","3459373311","US","USA","UNITED STATES" -"3459373312","3459375103","CL","CHL","CHILE" -"3459375104","3459448831","US","USA","UNITED STATES" -"3459449088","3459450623","CA","CAN","CANADA" -"3459450624","3459450879","US","USA","UNITED STATES" -"3459450880","3459456511","CA","CAN","CANADA" -"3459456512","3459456767","US","USA","UNITED STATES" -"3459456768","3459457279","CA","CAN","CANADA" -"3459457280","3459457535","US","USA","UNITED STATES" -"3459457536","3459457791","CA","CAN","CANADA" -"3459457792","3459458047","PR","PRI","PUERTO RICO" -"3459458048","3459510271","US","USA","UNITED STATES" -"3459512320","3459513855","CA","CAN","CANADA" -"3459513856","3459592191","US","USA","UNITED STATES" -"3459592192","3459596287","CA","CAN","CANADA" -"3459596288","3459614719","US","USA","UNITED STATES" -"3459616768","3459620863","CA","CAN","CANADA" -"3459620864","3459622911","US","USA","UNITED STATES" -"3459624960","3459629055","BM","BMU","BERMUDA" -"3459629056","3459631103","US","USA","UNITED STATES" -"3459633152","3459731455","US","USA","UNITED STATES" -"3459731456","3459735551","CA","CAN","CANADA" -"3459735552","3460108895","US","USA","UNITED STATES" -"3460108896","3460108903","FI","FIN","FINLAND" -"3460108904","3460111871","US","USA","UNITED STATES" -"3460111872","3460111887","CA","CAN","CANADA" -"3460111888","3460161535","US","USA","UNITED STATES" -"3460161536","3460163583","PR","PRI","PUERTO RICO" -"3460163584","3460453631","US","USA","UNITED STATES" -"3460453632","3460453887","BS","BHS","BAHAMAS" -"3460453888","3460761599","US","USA","UNITED STATES" -"3460763648","3460794367","US","USA","UNITED STATES" -"3460796416","3460894847","US","USA","UNITED STATES" -"3460894848","3460894975","NL","NLD","NETHERLANDS" -"3460894976","3460933887","US","USA","UNITED STATES" -"3460933888","3460934143","DE","DEU","GERMANY" -"3460934144","3461021695","US","USA","UNITED STATES" -"3461021696","3461031935","CA","CAN","CANADA" -"3461031936","3461032191","US","USA","UNITED STATES" -"3461032192","3461087231","CA","CAN","CANADA" -"3461087232","3461285887","US","USA","UNITED STATES" -"3461285888","3461285959","GB","GBR","UNITED KINGDOM" -"3461285960","3461285967","US","USA","UNITED STATES" -"3461285968","3461285975","GB","GBR","UNITED KINGDOM" -"3461285976","3461286143","US","USA","UNITED STATES" -"3461286144","3461286335","FR","FRA","FRANCE" -"3461286336","3461286399","US","USA","UNITED STATES" -"3461286400","3461286463","FR","FRA","FRANCE" -"3461286464","3461286471","GB","GBR","UNITED KINGDOM" -"3461286472","3461330943","US","USA","UNITED STATES" -"3461330944","3461331199","SG","SGP","SINGAPORE" -"3461331200","3461331295","US","USA","UNITED STATES" -"3461331296","3461331311","SG","SGP","SINGAPORE" -"3461331312","3461331327","US","USA","UNITED STATES" -"3461331328","3461331551","SG","SGP","SINGAPORE" -"3461331552","3461331711","US","USA","UNITED STATES" -"3461331712","3461331967","SG","SGP","SINGAPORE" -"3461331968","3461332223","US","USA","UNITED STATES" -"3461332224","3461332479","SG","SGP","SINGAPORE" -"3461332480","3461332735","US","USA","UNITED STATES" -"3461332736","3461332991","SG","SGP","SINGAPORE" -"3461332992","3461408767","US","USA","UNITED STATES" -"3461410816","3461414911","CA","CAN","CANADA" -"3461414912","3461435647","US","USA","UNITED STATES" -"3461435904","3461436159","US","USA","UNITED STATES" -"3461436416","3461441535","US","USA","UNITED STATES" -"3461443584","3461507071","US","USA","UNITED STATES" -"3461509120","3461513215","US","USA","UNITED STATES" -"3461513216","3461517311","CA","CAN","CANADA" -"3461517312","3461548031","US","USA","UNITED STATES" -"3461550080","3461554175","US","USA","UNITED STATES" -"3461554176","3461556223","CA","CAN","CANADA" -"3461558272","3461580799","US","USA","UNITED STATES" -"3461582848","3461808127","US","USA","UNITED STATES" -"3461808128","3461873663","CA","CAN","CANADA" -"3461873664","3462478559","US","USA","UNITED STATES" -"3462478560","3462478591","IL","ISR","ISRAEL" -"3462478592","3462478623","US","USA","UNITED STATES" -"3462478624","3462478655","IL","ISR","ISRAEL" -"3462478656","3462478943","US","USA","UNITED STATES" -"3462478944","3462478975","IL","ISR","ISRAEL" -"3462478976","3462571095","US","USA","UNITED STATES" -"3462571096","3462571103","CA","CAN","CANADA" -"3462571104","3462571663","US","USA","UNITED STATES" -"3462571664","3462571671","CA","CAN","CANADA" -"3462571672","3462593791","US","USA","UNITED STATES" -"3462593792","3462594559","GN","GIN","GUINEA" -"3462594560","3462605823","US","USA","UNITED STATES" -"3462605824","3462608895","UY","URY","URUGUAY" -"3462608896","3462633471","US","USA","UNITED STATES" -"3462633472","3462633727","SG","SGP","SINGAPORE" -"3462633728","3462633799","BV","BVT","BOUVET ISLAND" -"3462633800","3462633823","US","USA","UNITED STATES" -"3462633824","3462633855","SG","SGP","SINGAPORE" -"3462633856","3462633983","US","USA","UNITED STATES" -"3462633984","3462634239","SG","SGP","SINGAPORE" -"3462634240","3462634247","US","USA","UNITED STATES" -"3462634248","3462634255","SG","SGP","SINGAPORE" -"3462634256","3462634271","US","USA","UNITED STATES" -"3462634272","3462634367","AE","ARE","UNITED ARAB EMIRATES" -"3462634368","3462634495","SG","SGP","SINGAPORE" -"3462634496","3462634751","US","USA","UNITED STATES" -"3462634752","3462635007","SG","SGP","SINGAPORE" -"3462635008","3462635263","US","USA","UNITED STATES" -"3462635264","3462635519","SG","SGP","SINGAPORE" -"3462635520","3462889479","US","USA","UNITED STATES" -"3462889480","3462889487","GB","GBR","UNITED KINGDOM" -"3462889488","3462991183","US","USA","UNITED STATES" -"3462991184","3462991191","CA","CAN","CANADA" -"3462991192","3463089151","US","USA","UNITED STATES" -"3463089152","3463090175","CA","CAN","CANADA" -"3463090176","3463156735","US","USA","UNITED STATES" -"3463156736","3463157759","BO","BOL","BOLIVIA" -"3463157760","3463184383","US","USA","UNITED STATES" -"3463184640","3463193087","CA","CAN","CANADA" -"3463193600","3463194623","CA","CAN","CANADA" -"3463194624","3463198719","US","USA","UNITED STATES" -"3463198720","3463213311","CA","CAN","CANADA" -"3463213312","3463213567","US","USA","UNITED STATES" -"3463214080","3463215103","US","USA","UNITED STATES" -"3463215104","3463229327","CA","CAN","CANADA" -"3463229328","3463229335","US","USA","UNITED STATES" -"3463229336","3463243775","CA","CAN","CANADA" -"3463243776","3463244799","US","USA","UNITED STATES" -"3463245056","3463249663","CA","CAN","CANADA" -"3463249920","3463480063","US","USA","UNITED STATES" -"3463480064","3463480319","CA","CAN","CANADA" -"3463480320","3463518207","US","USA","UNITED STATES" -"3463518208","3463520255","NL","NLD","NETHERLANDS" -"3463520256","3463602687","US","USA","UNITED STATES" -"3463602688","3463602943","PH","PHL","PHILIPPINES" -"3463602944","3463632383","US","USA","UNITED STATES" -"3463632384","3463632391","CA","CAN","CANADA" -"3463632392","3463632399","US","USA","UNITED STATES" -"3463632400","3463632415","CA","CAN","CANADA" -"3463632416","3463708671","US","USA","UNITED STATES" -"3463708672","3463774207","CA","CAN","CANADA" -"3463774208","3464167423","US","USA","UNITED STATES" -"3464167680","3464169215","CA","CAN","CANADA" -"3464169472","3464171775","CA","CAN","CANADA" -"3464171776","3464172031","US","USA","UNITED STATES" -"3464172032","3464173567","CA","CAN","CANADA" -"3464173824","3464174591","CA","CAN","CANADA" -"3464175360","3464180735","CA","CAN","CANADA" -"3464180736","3464190463","US","USA","UNITED STATES" -"3464190464","3464190719","CA","CAN","CANADA" -"3464190720","3464195543","US","USA","UNITED STATES" -"3464195544","3464195551","IT","ITA","ITALY" -"3464195552","3464195951","US","USA","UNITED STATES" -"3464195952","3464195959","IT","ITA","ITALY" -"3464195960","3464196183","US","USA","UNITED STATES" -"3464196184","3464196191","IT","ITA","ITALY" -"3464196192","3464208383","US","USA","UNITED STATES" -"3464208384","3464216575","CA","CAN","CANADA" -"3464216576","3464243199","US","USA","UNITED STATES" -"3464245248","3464259583","US","USA","UNITED STATES" -"3464261632","3464340479","US","USA","UNITED STATES" -"3464340480","3464341503","CA","CAN","CANADA" -"3464341504","3464349695","US","USA","UNITED STATES" -"3464351744","3464382463","US","USA","UNITED STATES" -"3464384512","3464388607","CA","CAN","CANADA" -"3464388608","3464389631","US","USA","UNITED STATES" -"3464389888","3464391935","US","USA","UNITED STATES" -"3464392192","3464392703","US","USA","UNITED STATES" -"3464392960","3464393727","US","USA","UNITED STATES" -"3464393984","3464394751","US","USA","UNITED STATES" -"3464394752","3464396799","VC","VCT","SAINT VINCENT AND THE GRENADINES" -"3464396800","3464415231","US","USA","UNITED STATES" -"3464417280","3464464383","US","USA","UNITED STATES" -"3464466432","3464472575","US","USA","UNITED STATES" -"3464474624","3464519679","US","USA","UNITED STATES" -"3464523776","3464548607","US","USA","UNITED STATES" -"3464548608","3464548863","LC","LCA","SAINT LUCIA" -"3464548864","3464549119","US","USA","UNITED STATES" -"3464549120","3464549375","VG","VGB","VIRGIN ISLANDS, BRITISH" -"3464549376","3464550143","US","USA","UNITED STATES" -"3464550144","3464550399","LC","LCA","SAINT LUCIA" -"3464550400","3464626175","US","USA","UNITED STATES" -"3464626432","3464626687","CA","CAN","CANADA" -"3464627968","3464628735","CA","CAN","CANADA" -"3464628992","3464630015","CA","CAN","CANADA" -"3464630272","3464631295","US","USA","UNITED STATES" -"3464631296","3464631807","CA","CAN","CANADA" -"3464632064","3464641791","CA","CAN","CANADA" -"3464642560","3464642815","CA","CAN","CANADA" -"3464643072","3464647935","CA","CAN","CANADA" -"3464648192","3464648703","CA","CAN","CANADA" -"3464649216","3464650239","CA","CAN","CANADA" -"3464650752","3464664063","US","USA","UNITED STATES" -"3464664320","3464684543","CA","CAN","CANADA" -"3464684800","3464688383","CA","CAN","CANADA" -"3464688640","3464691455","CA","CAN","CANADA" -"3464691712","3464768607","US","USA","UNITED STATES" -"3464768608","3464768623","IT","ITA","ITALY" -"3464768624","3464768767","US","USA","UNITED STATES" -"3464768768","3464768895","CA","CAN","CANADA" -"3464768896","3464769535","US","USA","UNITED STATES" -"3464769536","3464773631","CA","CAN","CANADA" -"3464773632","3464802303","US","USA","UNITED STATES" -"3464802304","3464806399","CA","CAN","CANADA" -"3464806400","3465154559","US","USA","UNITED STATES" -"3465154560","3465158655","BS","BHS","BAHAMAS" -"3465158656","3465177087","US","USA","UNITED STATES" -"3465177088","3465179135","PE","PER","PERU" -"3465179136","3465510911","US","USA","UNITED STATES" -"3465510912","3465543679","JP","JPN","JAPAN" -"3465543680","3465982991","US","USA","UNITED STATES" -"3465982992","3465983007","GB","GBR","UNITED KINGDOM" -"3465983008","3465983023","US","USA","UNITED STATES" -"3465983024","3465983127","GB","GBR","UNITED KINGDOM" -"3465983128","3465983167","US","USA","UNITED STATES" -"3465983168","3465983199","GB","GBR","UNITED KINGDOM" -"3465983200","3465983207","ZA","ZAF","SOUTH AFRICA" -"3465983208","3465983263","GB","GBR","UNITED KINGDOM" -"3465983264","3465983271","US","USA","UNITED STATES" -"3465983272","3465983311","GB","GBR","UNITED KINGDOM" -"3465983312","3465983463","US","USA","UNITED STATES" -"3465983464","3465983487","GB","GBR","UNITED KINGDOM" -"3465983488","3466044903","US","USA","UNITED STATES" -"3466044904","3466044911","PH","PHL","PHILIPPINES" -"3466044912","3466158079","US","USA","UNITED STATES" -"3466158080","3466166271","PA","PAN","PANAMA" -"3466166272","3466282111","US","USA","UNITED STATES" -"3466282112","3466282119","GB","GBR","UNITED KINGDOM" -"3466282120","3466282727","US","USA","UNITED STATES" -"3466282728","3466282743","CA","CAN","CANADA" -"3466282744","3466283327","US","USA","UNITED STATES" -"3466283328","3466283391","CA","CAN","CANADA" -"3466283392","3466313727","US","USA","UNITED STATES" -"3466313728","3466317823","CA","CAN","CANADA" -"3466317824","3466489855","US","USA","UNITED STATES" -"3466489856","3466490111","CA","CAN","CANADA" -"3466490112","3466555199","US","USA","UNITED STATES" -"3466555200","3466555215","CA","CAN","CANADA" -"3466555216","3466558207","US","USA","UNITED STATES" -"3466558208","3466558463","EC","ECU","ECUADOR" -"3466558464","3466560255","US","USA","UNITED STATES" -"3466560256","3466560511","GH","GHA","GHANA" -"3466560512","3466627007","US","USA","UNITED STATES" -"3466627008","3466627039","PR","PRI","PUERTO RICO" -"3466627040","3466756095","US","USA","UNITED STATES" -"3466756096","3466772479","CA","CAN","CANADA" -"3466772480","3466784767","US","USA","UNITED STATES" -"3466788864","3466846207","US","USA","UNITED STATES" -"3466846208","3466854399","CA","CAN","CANADA" -"3466854400","3467051007","US","USA","UNITED STATES" -"3467051008","3467068927","CA","CAN","CANADA" -"3467069440","3467116543","CA","CAN","CANADA" -"3467116544","3467378687","US","USA","UNITED STATES" -"3467378688","3467444223","CA","CAN","CANADA" -"3467444224","3467554815","US","USA","UNITED STATES" -"3467554816","3467567103","CA","CAN","CANADA" -"3467567104","3467706367","US","USA","UNITED STATES" -"3467706368","3467902975","CA","CAN","CANADA" -"3467902976","3467964415","US","USA","UNITED STATES" -"3467968512","3468084991","US","USA","UNITED STATES" -"3468084992","3468085055","CA","CAN","CANADA" -"3468085056","3468085119","US","USA","UNITED STATES" -"3468085120","3468085183","CA","CAN","CANADA" -"3468085184","3468127999","US","USA","UNITED STATES" -"3468128000","3468128255","IN","IND","INDIA" -"3468128256","3468142591","US","USA","UNITED STATES" -"3468144640","3468296191","US","USA","UNITED STATES" -"3468296192","3468361727","CA","CAN","CANADA" -"3468361728","3468443647","US","USA","UNITED STATES" -"3468443648","3468460031","CA","CAN","CANADA" -"3468460032","3468468223","BM","BMU","BERMUDA" -"3468468224","3468623871","US","USA","UNITED STATES" -"3468623872","3468656639","CA","CAN","CANADA" -"3468656640","3469050623","US","USA","UNITED STATES" -"3469050880","3469055743","US","USA","UNITED STATES" -"3469055744","3469055999","CA","CAN","CANADA" -"3469056000","3469068287","US","USA","UNITED STATES" -"3469068800","3469070335","US","USA","UNITED STATES" -"3469070592","3469893631","US","USA","UNITED STATES" -"3469893632","3469901823","CA","CAN","CANADA" -"3469901824","3469989887","US","USA","UNITED STATES" -"3469990400","3470131199","US","USA","UNITED STATES" -"3470131200","3470139391","AG","ATG","ANTIGUA AND BARBUDA" -"3470147584","3470148095","US","USA","UNITED STATES" -"3470148096","3470148351","CA","CAN","CANADA" -"3470148352","3470148607","US","USA","UNITED STATES" -"3470148608","3470148863","CA","CAN","CANADA" -"3470148864","3470151935","US","USA","UNITED STATES" -"3470151936","3470152703","CA","CAN","CANADA" -"3470152704","3470184544","US","USA","UNITED STATES" -"3470184545","3470184545","MY","MYS","MALAYSIA" -"3470184546","3470184722","US","USA","UNITED STATES" -"3470184723","3470184723","MY","MYS","MALAYSIA" -"3470184724","3470184975","US","USA","UNITED STATES" -"3470184976","3470184976","MY","MYS","MALAYSIA" -"3470184977","3470185294","US","USA","UNITED STATES" -"3470185295","3470185295","MY","MYS","MALAYSIA" -"3470185296","3470192639","US","USA","UNITED STATES" -"3470196736","3470331903","US","USA","UNITED STATES" -"3470336000","3470348287","US","USA","UNITED STATES" -"3470360576","3470364671","US","USA","UNITED STATES" -"3470368768","3470458879","US","USA","UNITED STATES" -"3470458880","3470475263","KR","KOR","REPUBLIC OF KOREA" -"3470475264","3470558207","US","USA","UNITED STATES" -"3470558208","3470559231","HK","HKG","HONG KONG" -"3470559232","3470573567","US","USA","UNITED STATES" -"3470573568","3470575615","CA","CAN","CANADA" -"3470575616","3470610431","US","USA","UNITED STATES" -"3470610432","3470614527","BR","BRA","BRAZIL" -"3470614528","3470651391","US","USA","UNITED STATES" -"3470651392","3470655487","CA","CAN","CANADA" -"3470655488","3470671871","US","USA","UNITED STATES" -"3470671872","3470680063","CA","CAN","CANADA" -"3470680064","3470744063","US","USA","UNITED STATES" -"3470744064","3470744575","CA","CAN","CANADA" -"3470744576","3470745855","US","USA","UNITED STATES" -"3470745856","3470746111","CA","CAN","CANADA" -"3470746112","3470749951","US","USA","UNITED STATES" -"3470749952","3470750207","CA","CAN","CANADA" -"3470750208","3470751999","US","USA","UNITED STATES" -"3470752256","3470752767","US","USA","UNITED STATES" -"3470752768","3470753023","CO","COL","COLOMBIA" -"3470753024","3470754303","US","USA","UNITED STATES" -"3470754304","3470754559","PE","PER","PERU" -"3470754560","3470755839","US","USA","UNITED STATES" -"3470756096","3470761983","US","USA","UNITED STATES" -"3470761984","3470762751","CA","CAN","CANADA" -"3470762752","3470762759","NL","NLD","NETHERLANDS" -"3470762760","3470767871","CA","CAN","CANADA" -"3470767872","3470768127","IE","IRL","IRELAND" -"3470768128","3470770175","CA","CAN","CANADA" -"3470770176","3470778367","US","USA","UNITED STATES" -"3470778368","3470786559","CA","CAN","CANADA" -"3470786560","3470794751","US","USA","UNITED STATES" -"3470794752","3470802943","PA","PAN","PANAMA" -"3470802944","3470884863","US","USA","UNITED STATES" -"3470884864","3470885887","HK","HKG","HONG KONG" -"3470885888","3471057919","US","USA","UNITED STATES" -"3471057920","3471058943","VE","VEN","VENEZUELA" -"3471058944","3471059455","US","USA","UNITED STATES" -"3471059456","3471060223","ES","ESP","SPAIN" -"3471060224","3471060991","US","USA","UNITED STATES" -"3471060992","3471061247","NL","NLD","NETHERLANDS" -"3471061248","3471061503","US","USA","UNITED STATES" -"3471061504","3471061759","NL","NLD","NETHERLANDS" -"3471061760","3471529215","US","USA","UNITED STATES" -"3471529216","3471529983","CA","CAN","CANADA" -"3471529984","3471558655","US","USA","UNITED STATES" -"3471558656","3471560703","CA","CAN","CANADA" -"3471560704","3471570943","US","USA","UNITED STATES" -"3471570944","3471572991","CA","CAN","CANADA" -"3471572992","3472375807","US","USA","UNITED STATES" -"3472375808","3472392191","PR","PRI","PUERTO RICO" -"3472392192","3472408575","CA","CAN","CANADA" -"3472408576","3472721919","US","USA","UNITED STATES" -"3472723968","3473039359","US","USA","UNITED STATES" -"3473039360","3473041407","BM","BMU","BERMUDA" -"3473041408","3473108991","US","USA","UNITED STATES" -"3473108992","3473113087","UY","URY","URUGUAY" -"3473113088","3473276927","US","USA","UNITED STATES" -"3473276928","3473342463","CA","CAN","CANADA" -"3473342464","3473755391","US","USA","UNITED STATES" -"3473755392","3473755647","HN","HND","HONDURAS" -"3473755648","3473765887","US","USA","UNITED STATES" -"3473765888","3473766399","EC","ECU","ECUADOR" -"3473766400","3473813567","US","USA","UNITED STATES" -"3473813568","3473813599","CA","CAN","CANADA" -"3473813600","3473901055","US","USA","UNITED STATES" -"3473901056","3473901311","EC","ECU","ECUADOR" -"3473901312","3474046463","US","USA","UNITED STATES" -"3474046464","3474046975","MX","MEX","MEXICO" -"3474046976","3474053119","US","USA","UNITED STATES" -"3474053120","3474055167","PE","PER","PERU" -"3474055168","3474391039","US","USA","UNITED STATES" -"3474391040","3474456575","CA","CAN","CANADA" -"3474456576","3475111935","US","USA","UNITED STATES" -"3475112192","3475113215","CA","CAN","CANADA" -"3475113216","3475115007","US","USA","UNITED STATES" -"3475115008","3475120127","CA","CAN","CANADA" -"3475120128","3475124223","US","USA","UNITED STATES" -"3475124224","3475243007","CA","CAN","CANADA" -"3475243008","3475589887","US","USA","UNITED STATES" -"3475589888","3475590143","EC","ECU","ECUADOR" -"3475590144","3475670015","US","USA","UNITED STATES" -"3475670016","3475671039","AG","ATG","ANTIGUA AND BARBUDA" -"3475671040","3475719231","US","USA","UNITED STATES" -"3475719232","3475719295","PR","PRI","PUERTO RICO" -"3475719296","3475745503","US","USA","UNITED STATES" -"3475745504","3475745535","CA","CAN","CANADA" -"3475745536","3475851263","US","USA","UNITED STATES" -"3475853312","3475881983","US","USA","UNITED STATES" -"3475881984","3475884319","CA","CAN","CANADA" -"3475884320","3475884327","US","USA","UNITED STATES" -"3475884328","3475890175","CA","CAN","CANADA" -"3475890176","3475996671","US","USA","UNITED STATES" -"3475996672","3476029439","CA","CAN","CANADA" -"3476029440","3476111359","US","USA","UNITED STATES" -"3476111360","3476111871","CA","CAN","CANADA" -"3476111872","3476221951","US","USA","UNITED STATES" -"3476221952","3476223999","UY","URY","URUGUAY" -"3476224000","3476418559","US","USA","UNITED STATES" -"3476418560","3476422655","CA","CAN","CANADA" -"3476422656","3476447231","US","USA","UNITED STATES" -"3476447232","3476455423","CA","CAN","CANADA" -"3476455424","3476881407","US","USA","UNITED STATES" -"3476881408","3476946943","CA","CAN","CANADA" -"3476946944","3477577727","US","USA","UNITED STATES" -"3477581824","3478114303","US","USA","UNITED STATES" -"3478114304","3478118399","PE","PER","PERU" -"3478118400","3478192127","US","USA","UNITED STATES" -"3478192128","3478257663","CA","CAN","CANADA" -"3478257664","3478294527","US","USA","UNITED STATES" -"3478294528","3478294543","GB","GBR","UNITED KINGDOM" -"3478294544","3478352111","US","USA","UNITED STATES" -"3478352112","3478352119","GB","GBR","UNITED KINGDOM" -"3478352120","3478364159","US","USA","UNITED STATES" -"3478364160","3478364167","BR","BRA","BRAZIL" -"3478364168","3479207935","US","USA","UNITED STATES" -"3479207936","3479214079","CA","CAN","CANADA" -"3479214080","3479214335","US","USA","UNITED STATES" -"3479214336","3479240703","CA","CAN","CANADA" -"3479240704","3479568383","US","USA","UNITED STATES" -"3479568384","3479633919","CA","CAN","CANADA" -"3479633920","3479896063","US","USA","UNITED STATES" -"3479896064","3479961599","CA","CAN","CANADA" -"3479961600","3480223743","US","USA","UNITED STATES" -"3480223744","3480256511","CA","CAN","CANADA" -"3480256512","3480284159","US","USA","UNITED STATES" -"3480284160","3480284671","CA","CAN","CANADA" -"3480284672","3480444927","US","USA","UNITED STATES" -"3480444928","3480449023","CA","CAN","CANADA" -"3480449024","3481169151","US","USA","UNITED STATES" -"3481169152","3481169407","NZ","NZL","NEW ZEALAND" -"3481169408","3481176063","US","USA","UNITED STATES" -"3481178112","3481665535","US","USA","UNITED STATES" -"3481665536","3481731071","CA","CAN","CANADA" -"3481731072","3481812991","US","USA","UNITED STATES" -"3481812992","3481829375","CA","CAN","CANADA" -"3481829376","3481993215","US","USA","UNITED STATES" -"3481993216","3481993887","CA","CAN","CANADA" -"3481993888","3481993895","US","USA","UNITED STATES" -"3481993896","3482058751","CA","CAN","CANADA" -"3482058752","3482583039","US","USA","UNITED STATES" -"3482583040","3482632191","CA","CAN","CANADA" -"3482632192","3482775551","US","USA","UNITED STATES" -"3482775552","3482779647","PR","PRI","PUERTO RICO" -"3482779648","3482910719","US","USA","UNITED STATES" -"3482910720","3482927103","CA","CAN","CANADA" -"3482927104","3483296004","US","USA","UNITED STATES" -"3483296005","3483296005","BE","BEL","BELGIUM" -"3483296006","3483435007","US","USA","UNITED STATES" -"3483435008","3483533311","CA","CAN","CANADA" -"3483533312","3483631615","US","USA","UNITED STATES" -"3483631616","3483697151","CA","CAN","CANADA" -"3483697152","3483791359","US","USA","UNITED STATES" -"3483791360","3483795455","PR","PRI","PUERTO RICO" -"3483795456","3483828223","US","USA","UNITED STATES" -"3483828224","3483836415","CA","CAN","CANADA" -"3483836416","3483877375","US","USA","UNITED STATES" -"3483877376","3483893759","CA","CAN","CANADA" -"3483893760","3484319743","US","USA","UNITED STATES" -"3484320256","3484320511","US","USA","UNITED STATES" -"3484322048","3484323839","US","USA","UNITED STATES" -"3484327168","3484327423","US","USA","UNITED STATES" -"3484331264","3484331519","US","USA","UNITED STATES" -"3484331776","3484332031","US","USA","UNITED STATES" -"3484338432","3484338943","US","USA","UNITED STATES" -"3484340736","3484341247","US","USA","UNITED STATES" -"3484352512","3484450815","US","USA","UNITED STATES" -"3484450816","3484451327","CA","CAN","CANADA" -"3484451328","3484451871","US","USA","UNITED STATES" -"3484451872","3484451903","CA","CAN","CANADA" -"3484451904","3484451967","US","USA","UNITED STATES" -"3484451968","3484451999","CA","CAN","CANADA" -"3484452000","3484452031","US","USA","UNITED STATES" -"3484452032","3484452063","CA","CAN","CANADA" -"3484452064","3484452095","US","USA","UNITED STATES" -"3484452096","3484452351","CA","CAN","CANADA" -"3484452352","3484453887","US","USA","UNITED STATES" -"3484453888","3484455167","CA","CAN","CANADA" -"3484455168","3484455199","US","USA","UNITED STATES" -"3484455200","3484455231","CA","CAN","CANADA" -"3484455232","3484455359","US","USA","UNITED STATES" -"3484455360","3484455423","CA","CAN","CANADA" -"3484455424","3484457215","US","USA","UNITED STATES" -"3484457216","3484457471","CA","CAN","CANADA" -"3484457472","3484459007","US","USA","UNITED STATES" -"3484459008","3484459775","CA","CAN","CANADA" -"3484459776","3484460735","US","USA","UNITED STATES" -"3484460736","3484460751","CA","CAN","CANADA" -"3484460752","3484462335","US","USA","UNITED STATES" -"3484462336","3484462591","CA","CAN","CANADA" -"3484462592","3484463615","US","USA","UNITED STATES" -"3484463616","3484464143","CA","CAN","CANADA" -"3484464144","3484464831","US","USA","UNITED STATES" -"3484464832","3484464895","CA","CAN","CANADA" -"3484464896","3484465663","US","USA","UNITED STATES" -"3484465664","3484465919","CA","CAN","CANADA" -"3484465920","3484466687","US","USA","UNITED STATES" -"3484466688","3484467199","CA","CAN","CANADA" -"3484467200","3484467967","US","USA","UNITED STATES" -"3484467968","3484468223","CA","CAN","CANADA" -"3484468224","3484468479","US","USA","UNITED STATES" -"3484468480","3484468991","CA","CAN","CANADA" -"3484468992","3484469247","US","USA","UNITED STATES" -"3484469248","3484469759","CA","CAN","CANADA" -"3484469760","3484470271","US","USA","UNITED STATES" -"3484470272","3484470527","CA","CAN","CANADA" -"3484470528","3484471807","US","USA","UNITED STATES" -"3484471808","3484472063","CA","CAN","CANADA" -"3484472064","3484473343","US","USA","UNITED STATES" -"3484473344","3484473599","CA","CAN","CANADA" -"3484473600","3484473855","US","USA","UNITED STATES" -"3484473856","3484474623","CA","CAN","CANADA" -"3484474624","3484475135","US","USA","UNITED STATES" -"3484475136","3484475647","CA","CAN","CANADA" -"3484475648","3484475903","US","USA","UNITED STATES" -"3484475904","3484476159","CA","CAN","CANADA" -"3484476160","3484476415","US","USA","UNITED STATES" -"3484476416","3484476927","CA","CAN","CANADA" -"3484476928","3484480255","US","USA","UNITED STATES" -"3484480256","3484481279","CA","CAN","CANADA" -"3484481280","3484481791","US","USA","UNITED STATES" -"3484481792","3484482047","CA","CAN","CANADA" -"3484482048","3484482559","US","USA","UNITED STATES" -"3484482560","3484482815","CA","CAN","CANADA" -"3484482816","3484483071","US","USA","UNITED STATES" -"3484483072","3484483327","CA","CAN","CANADA" -"3484483328","3484647423","US","USA","UNITED STATES" -"3484647424","3484663807","CA","CAN","CANADA" -"3484663808","3484746815","US","USA","UNITED STATES" -"3484746816","3484746943","GB","GBR","UNITED KINGDOM" -"3484746944","3484762111","US","USA","UNITED STATES" -"3484762112","3484778495","CA","CAN","CANADA" -"3484778496","3484884991","US","USA","UNITED STATES" -"3484884992","3484893183","CA","CAN","CANADA" -"3484893184","3485220863","US","USA","UNITED STATES" -"3485220864","3485229055","CA","CAN","CANADA" -"3485229056","3485278207","US","USA","UNITED STATES" -"3485286400","3485290463","US","USA","UNITED STATES" -"3485290464","3485290479","GB","GBR","UNITED KINGDOM" -"3485290480","3485327359","US","USA","UNITED STATES" -"3485327360","3485335551","CA","CAN","CANADA" -"3485335552","3485442047","US","USA","UNITED STATES" -"3485446144","3485462527","US","USA","UNITED STATES" -"3485462528","3485466623","VC","VCT","SAINT VINCENT AND THE GRENADINES" -"3485466624","3485597695","US","USA","UNITED STATES" -"3485597696","3485671583","CA","CAN","CANADA" -"3485671584","3485671615","US","USA","UNITED STATES" -"3485671616","3485672543","CA","CAN","CANADA" -"3485672544","3485672551","US","USA","UNITED STATES" -"3485672552","3485695999","CA","CAN","CANADA" -"3485696000","3485700095","US","USA","UNITED STATES" -"3485704192","3486023679","US","USA","UNITED STATES" -"3486023680","3486031871","CA","CAN","CANADA" -"3486031872","3486269439","US","USA","UNITED STATES" -"3486269440","3486285823","JM","JAM","JAMAICA" -"3486285824","3486302207","PR","PRI","PUERTO RICO" -"3486302208","3486310399","CA","CAN","CANADA" -"3486318592","3486646271","US","USA","UNITED STATES" -"3486646272","3486662655","CA","CAN","CANADA" -"3486662656","3486699519","US","USA","UNITED STATES" -"3486699520","3486699775","CA","CAN","CANADA" -"3486699776","3486700399","US","USA","UNITED STATES" -"3486700400","3486700407","CA","CAN","CANADA" -"3486700408","3486701311","US","USA","UNITED STATES" -"3486701312","3486701567","CA","CAN","CANADA" -"3486701568","3486711551","US","USA","UNITED STATES" -"3486711552","3486711807","CA","CAN","CANADA" -"3486711808","3487039487","US","USA","UNITED STATES" -"3487039488","3487105023","CA","CAN","CANADA" -"3487105024","3487187199","US","USA","UNITED STATES" -"3487187200","3487187215","GB","GBR","UNITED KINGDOM" -"3487187216","3487189247","US","USA","UNITED STATES" -"3487189248","3487189503","DK","DNK","DENMARK" -"3487189504","3487193599","US","USA","UNITED STATES" -"3487193600","3487193855","DK","DNK","DENMARK" -"3487193856","3487197183","US","USA","UNITED STATES" -"3487197184","3487197439","DK","DNK","DENMARK" -"3487197440","3487203071","US","USA","UNITED STATES" -"3487203072","3487203327","DK","DNK","DENMARK" -"3487203328","3487236095","US","USA","UNITED STATES" -"3487236096","3487301631","CA","CAN","CANADA" -"3487301632","3487502335","US","USA","UNITED STATES" -"3487514624","3487526911","US","USA","UNITED STATES" -"3487531008","3487543295","US","USA","UNITED STATES" -"3487547392","3487766527","US","USA","UNITED STATES" -"3487766528","3487768575","CA","CAN","CANADA" -"3487768576","3487842303","US","USA","UNITED STATES" -"3487842304","3487858687","CA","CAN","CANADA" -"3487858688","3487859199","KY","CYM","CAYMAN ISLANDS" -"3487859200","3487861759","BM","BMU","BERMUDA" -"3487861760","3487862015","KY","CYM","CAYMAN ISLANDS" -"3487862016","3487875071","BM","BMU","BERMUDA" -"3487875072","3487891455","US","USA","UNITED STATES" -"3487891456","3487907839","CA","CAN","CANADA" -"3487907840","3488014335","US","USA","UNITED STATES" -"3488014336","3488022527","CA","CAN","CANADA" -"3488022528","3488049151","US","USA","UNITED STATES" -"3488051200","3488065535","US","USA","UNITED STATES" -"3488067584","3488071679","US","USA","UNITED STATES" -"3488071680","3488072703","CA","CAN","CANADA" -"3488072704","3488079871","US","USA","UNITED STATES" -"3488079872","3488083967","CA","CAN","CANADA" -"3488083968","3488089119","US","USA","UNITED STATES" -"3488089120","3488089151","IL","ISR","ISRAEL" -"3488089152","3488089215","US","USA","UNITED STATES" -"3488089216","3488089343","IL","ISR","ISRAEL" -"3488089344","3488089887","US","USA","UNITED STATES" -"3488089888","3488089983","IL","ISR","ISRAEL" -"3488089984","3488090527","US","USA","UNITED STATES" -"3488090528","3488090559","IL","ISR","ISRAEL" -"3488090560","3488090623","US","USA","UNITED STATES" -"3488090624","3488090687","IL","ISR","ISRAEL" -"3488090688","3488090719","US","USA","UNITED STATES" -"3488090720","3488090879","IL","ISR","ISRAEL" -"3488090880","3488090943","US","USA","UNITED STATES" -"3488090944","3488090975","IL","ISR","ISRAEL" -"3488090976","3488091647","US","USA","UNITED STATES" -"3488091648","3488091775","IL","ISR","ISRAEL" -"3488091776","3488092943","US","USA","UNITED STATES" -"3488092944","3488092959","IL","ISR","ISRAEL" -"3488092960","3488092991","US","USA","UNITED STATES" -"3488092992","3488093055","IL","ISR","ISRAEL" -"3488093056","3488093951","US","USA","UNITED STATES" -"3488093952","3488094015","IL","ISR","ISRAEL" -"3488094016","3488094719","US","USA","UNITED STATES" -"3488094720","3488094735","IL","ISR","ISRAEL" -"3488094736","3488094751","US","USA","UNITED STATES" -"3488094752","3488094783","IL","ISR","ISRAEL" -"3488094784","3488094831","US","USA","UNITED STATES" -"3488094832","3488094847","IL","ISR","ISRAEL" -"3488094848","3488095103","US","USA","UNITED STATES" -"3488095104","3488095119","IL","ISR","ISRAEL" -"3488095120","3488112639","US","USA","UNITED STATES" -"3488112640","3488120831","CA","CAN","CANADA" -"3488120832","3488350207","US","USA","UNITED STATES" -"3488350208","3488415743","CA","CAN","CANADA" -"3488415744","3488722687","US","USA","UNITED STATES" -"3488722688","3488723199","JM","JAM","JAMAICA" -"3488723200","3488909311","US","USA","UNITED STATES" -"3488911360","3488940031","US","USA","UNITED STATES" -"3488940032","3488956415","CA","CAN","CANADA" -"3488956416","3488989183","US","USA","UNITED STATES" -"3488989184","3489005567","CA","CAN","CANADA" -"3489005568","3489136639","US","USA","UNITED STATES" -"3489136640","3489267711","MX","MEX","MEXICO" -"3489267712","3489341439","US","USA","UNITED STATES" -"3489341440","3489345535","CA","CAN","CANADA" -"3489345536","3489398783","US","USA","UNITED STATES" -"3489398784","3489399039","IT","ITA","ITALY" -"3489399040","3489464319","US","USA","UNITED STATES" -"3489464320","3489529855","CA","CAN","CANADA" -"3489529856","3489562623","US","USA","UNITED STATES" -"3489562624","3489566719","JM","JAM","JAMAICA" -"3489566720","3489583103","US","USA","UNITED STATES" -"3489587200","3489717759","US","USA","UNITED STATES" -"3489717760","3489718015","PR","PRI","PUERTO RICO" -"3489718016","3489718271","US","USA","UNITED STATES" -"3489718272","3489718527","AG","ATG","ANTIGUA AND BARBUDA" -"3489718528","3489719039","LC","LCA","SAINT LUCIA" -"3489719040","3489720063","AG","ATG","ANTIGUA AND BARBUDA" -"3489720064","3489720319","LC","LCA","SAINT LUCIA" -"3489720320","3489738751","US","USA","UNITED STATES" -"3489738752","3489740799","PH","PHL","PHILIPPINES" -"3489740800","3489741783","US","USA","UNITED STATES" -"3489741784","3489741791","CA","CAN","CANADA" -"3489741792","3489749503","US","USA","UNITED STATES" -"3489749504","3489749519","CA","CAN","CANADA" -"3489749520","3489756119","US","USA","UNITED STATES" -"3489756120","3489756127","DE","DEU","GERMANY" -"3489756128","3489761743","US","USA","UNITED STATES" -"3489761744","3489761759","CA","CAN","CANADA" -"3489761760","3489774831","US","USA","UNITED STATES" -"3489774832","3489774839","GB","GBR","UNITED KINGDOM" -"3489774840","3489775103","US","USA","UNITED STATES" -"3489775104","3489775359","BO","BOL","BOLIVIA" -"3489775360","3490041503","US","USA","UNITED STATES" -"3490041504","3490041535","CA","CAN","CANADA" -"3490041536","3490263039","US","USA","UNITED STATES" -"3490263040","3490267135","CO","COL","COLOMBIA" -"3490267136","3490653871","US","USA","UNITED STATES" -"3490653872","3490653887","CA","CAN","CANADA" -"3490653888","3490703615","US","USA","UNITED STATES" -"3490703616","3490703871","PR","PRI","PUERTO RICO" -"3490703872","3490732431","US","USA","UNITED STATES" -"3490732432","3490732447","CA","CAN","CANADA" -"3490732448","3490786047","US","USA","UNITED STATES" -"3490786048","3490786303","PR","PRI","PUERTO RICO" -"3490786304","3490863615","US","USA","UNITED STATES" -"3490863616","3490863871","CA","CAN","CANADA" -"3490863872","3490879231","US","USA","UNITED STATES" -"3490879232","3490879487","PR","PRI","PUERTO RICO" -"3490879488","3491219183","US","USA","UNITED STATES" -"3491219184","3491219191","PR","PRI","PUERTO RICO" -"3491219192","3491226687","US","USA","UNITED STATES" -"3491226688","3491226719","CA","CAN","CANADA" -"3491226720","3491231807","US","USA","UNITED STATES" -"3491231808","3491231823","PR","PRI","PUERTO RICO" -"3491231824","3491358183","US","USA","UNITED STATES" -"3491358184","3491358191","PR","PRI","PUERTO RICO" -"3491358192","3491381247","US","USA","UNITED STATES" -"3491381248","3491389439","BM","BMU","BERMUDA" -"3491389440","3491476991","US","USA","UNITED STATES" -"3491476992","3491478527","VI","VIR","VIRGIN ISLANDS, U.S." -"3491478528","3491506631","US","USA","UNITED STATES" -"3491506632","3491506639","DK","DNK","DENMARK" -"3491506640","3491637247","US","USA","UNITED STATES" -"3491637248","3491637759","CO","COL","COLOMBIA" -"3491637760","3491651583","US","USA","UNITED STATES" -"3491651584","3491659775","VI","VIR","VIRGIN ISLANDS, U.S." -"3491659776","3491743743","US","USA","UNITED STATES" -"3491743744","3491745791","CO","COL","COLOMBIA" -"3491745792","3491764783","US","USA","UNITED STATES" -"3491764784","3491764791","PR","PRI","PUERTO RICO" -"3491764792","3491780607","US","USA","UNITED STATES" -"3491780608","3491781631","EC","ECU","ECUADOR" -"3491781632","3491968423","US","USA","UNITED STATES" -"3491968424","3491968431","PR","PRI","PUERTO RICO" -"3491968432","3491968447","AF","AFG","AFGHANISTAN" -"3491968448","3491971607","US","USA","UNITED STATES" -"3491971608","3491971615","IT","ITA","ITALY" -"3491971616","3491971751","US","USA","UNITED STATES" -"3491971752","3491971759","AU","AUS","AUSTRALIA" -"3491971760","3491971951","US","USA","UNITED STATES" -"3491971952","3491971967","HK","HKG","HONG KONG" -"3491971968","3491973151","US","USA","UNITED STATES" -"3491973152","3491973159","VE","VEN","VENEZUELA" -"3491973160","3492005375","US","USA","UNITED STATES" -"3492005376","3492005391","DK","DNK","DENMARK" -"3492005392","3492005439","US","USA","UNITED STATES" -"3492005440","3492005447","DK","DNK","DENMARK" -"3492005448","3492005463","US","USA","UNITED STATES" -"3492005464","3492005487","AU","AUS","AUSTRALIA" -"3492005488","3492151295","US","USA","UNITED STATES" -"3492151296","3492167679","CA","CAN","CANADA" -"3492167680","3492188799","US","USA","UNITED STATES" -"3492188800","3492188831","CH","CHE","SWITZERLAND" -"3492188832","3492208639","US","USA","UNITED STATES" -"3492216832","3492669951","US","USA","UNITED STATES" -"3492669952","3492671487","PA","PAN","PANAMA" -"3492671488","3492827391","US","USA","UNITED STATES" -"3492827392","3492827423","CA","CAN","CANADA" -"3492827424","3492827431","US","USA","UNITED STATES" -"3492827432","3492827439","DE","DEU","GERMANY" -"3492827440","3492827455","AU","AUS","AUSTRALIA" -"3492827456","3492827519","US","USA","UNITED STATES" -"3492827520","3492827647","AU","AUS","AUSTRALIA" -"3492827648","3492827903","US","USA","UNITED STATES" -"3492827904","3492827967","AU","AUS","AUSTRALIA" -"3492827968","3493070847","US","USA","UNITED STATES" -"3493070848","3493071871","HT","HTI","HAITI" -"3493071872","3493073151","US","USA","UNITED STATES" -"3493073152","3493073407","BO","BOL","BOLIVIA" -"3493073408","3493073663","US","USA","UNITED STATES" -"3493073664","3493073919","BO","BOL","BOLIVIA" -"3493073920","3493074175","US","USA","UNITED STATES" -"3493074176","3493074431","BO","BOL","BOLIVIA" -"3493074432","3493078527","HT","HTI","HAITI" -"3493078528","3493079039","US","USA","UNITED STATES" -"3493079040","3493081087","HT","HTI","HAITI" -"3493081088","3493081599","US","USA","UNITED STATES" -"3493081600","3493082623","PY","PRY","PARAGUAY" -"3493082624","3493091327","US","USA","UNITED STATES" -"3493091328","3493092351","BO","BOL","BOLIVIA" -"3493092352","3493092607","NA","NAM","NAMIBIA" -"3493092608","3493139711","US","USA","UNITED STATES" -"3493139712","3493139967","CA","CAN","CANADA" -"3493139968","3493141279","US","USA","UNITED STATES" -"3493141280","3493141311","CY","CYP","CYPRUS" -"3493141312","3493244927","US","USA","UNITED STATES" -"3493244928","3493249023","PR","PRI","PUERTO RICO" -"3493249024","3493866495","US","USA","UNITED STATES" -"3493866496","3493867519","VG","VGB","VIRGIN ISLANDS, BRITISH" -"3493867520","3493874687","US","USA","UNITED STATES" -"3493874688","3493875711","BM","BMU","BERMUDA" -"3493875712","3493881855","US","USA","UNITED STATES" -"3493881856","3493882879","CA","CAN","CANADA" -"3493882880","3493903551","US","USA","UNITED STATES" -"3493903552","3493903567","KW","KWT","KUWAIT" -"3493903568","3493936127","US","USA","UNITED STATES" -"3493936128","3493937151","CA","CAN","CANADA" -"3493937152","3493939199","US","USA","UNITED STATES" -"3493939200","3493941247","CA","CAN","CANADA" -"3493941248","3493980159","US","USA","UNITED STATES" -"3493981184","3493982207","US","USA","UNITED STATES" -"3493982208","3493984255","CA","CAN","CANADA" -"3493984256","3493986303","US","USA","UNITED STATES" -"3493986304","3493987327","CA","CAN","CANADA" -"3493987328","3493990399","US","USA","UNITED STATES" -"3493990400","3493991423","CA","CAN","CANADA" -"3493991424","3493998591","US","USA","UNITED STATES" -"3493998592","3494000639","AI","AIA","ANGUILLA" -"3494000640","3494003711","US","USA","UNITED STATES" -"3494003712","3494004735","CA","CAN","CANADA" -"3494004736","3494009855","US","USA","UNITED STATES" -"3494009856","3494010879","CA","CAN","CANADA" -"3494010880","3494014975","US","USA","UNITED STATES" -"3494014976","3494017023","CA","CAN","CANADA" -"3494017024","3494025215","US","USA","UNITED STATES" -"3494027264","3494035455","US","USA","UNITED STATES" -"3494036480","3494044671","US","USA","UNITED STATES" -"3494044672","3494045695","CA","CAN","CANADA" -"3494045696","3494049791","US","USA","UNITED STATES" -"3494049792","3494051839","CA","CAN","CANADA" -"3494053888","3494055935","US","USA","UNITED STATES" -"3494057984","3494064127","US","USA","UNITED STATES" -"3494066176","3494067199","US","USA","UNITED STATES" -"3494068224","3494072319","US","USA","UNITED STATES" -"3494074368","3494075391","US","USA","UNITED STATES" -"3494075392","3494076415","CA","CAN","CANADA" -"3494076416","3494088703","US","USA","UNITED STATES" -"3494088704","3494090751","CA","CAN","CANADA" -"3494090752","3494094847","US","USA","UNITED STATES" -"3494094848","3494095871","CA","CAN","CANADA" -"3494095872","3494114303","US","USA","UNITED STATES" -"3494115328","3494121471","US","USA","UNITED STATES" -"3494121472","3494122495","CA","CAN","CANADA" -"3494122496","3494134783","US","USA","UNITED STATES" -"3494135808","3494136831","CA","CAN","CANADA" -"3494136832","3494139903","US","USA","UNITED STATES" -"3494139904","3494141735","CA","CAN","CANADA" -"3494141736","3494141743","US","USA","UNITED STATES" -"3494141744","3494141951","CA","CAN","CANADA" -"3494141952","3494143999","US","USA","UNITED STATES" -"3494144000","3494145023","CA","CAN","CANADA" -"3494145024","3494168575","US","USA","UNITED STATES" -"3494168576","3494170623","CA","CAN","CANADA" -"3494170624","3494184959","US","USA","UNITED STATES" -"3494184960","3494187007","CA","CAN","CANADA" -"3494187008","3494197247","US","USA","UNITED STATES" -"3494197248","3494198271","CA","CAN","CANADA" -"3494198272","3494244351","US","USA","UNITED STATES" -"3494244352","3494246399","CA","CAN","CANADA" -"3494246400","3494247423","US","USA","UNITED STATES" -"3494247424","3494250495","CA","CAN","CANADA" -"3494250496","3494262783","US","USA","UNITED STATES" -"3494262784","3494264831","CA","CAN","CANADA" -"3494264832","3494271999","US","USA","UNITED STATES" -"3494272000","3494273023","KN","KNA","SAINT KITTS AND NEVIS" -"3494273024","3494275071","US","USA","UNITED STATES" -"3494275072","3494277119","CA","CAN","CANADA" -"3494277120","3494290943","US","USA","UNITED STATES" -"3494290944","3494291455","GB","GBR","UNITED KINGDOM" -"3494291456","3494294527","US","USA","UNITED STATES" -"3494295040","3494302719","US","USA","UNITED STATES" -"3494302720","3494303743","CA","CAN","CANADA" -"3494303744","3494310911","US","USA","UNITED STATES" -"3494310912","3494311935","CA","CAN","CANADA" -"3494311936","3494316031","US","USA","UNITED STATES" -"3494316032","3494317055","CA","CAN","CANADA" -"3494317056","3494336511","US","USA","UNITED STATES" -"3494336512","3494337535","CA","CAN","CANADA" -"3494337536","3494342655","US","USA","UNITED STATES" -"3494342656","3494344703","CA","CAN","CANADA" -"3494344704","3494355967","US","USA","UNITED STATES" -"3494356992","3494359039","US","USA","UNITED STATES" -"3494359040","3494360063","CA","CAN","CANADA" -"3494360064","3494361087","US","USA","UNITED STATES" -"3494361088","3494362111","CA","CAN","CANADA" -"3494362112","3494380543","US","USA","UNITED STATES" -"3494380544","3494381567","CA","CAN","CANADA" -"3494381568","3494409215","US","USA","UNITED STATES" -"3494410240","3494412287","CA","CAN","CANADA" -"3494412288","3494422527","US","USA","UNITED STATES" -"3494424576","3494425599","CA","CAN","CANADA" -"3494425600","3494432767","US","USA","UNITED STATES" -"3494432768","3494433791","CA","CAN","CANADA" -"3494433792","3494437887","US","USA","UNITED STATES" -"3494437888","3494438143","GP","GLP","GUADELOUPE" -"3494438144","3494438399","VC","VCT","SAINT VINCENT AND THE GRENADINES" -"3494438400","3494438911","GP","GLP","GUADELOUPE" -"3494439936","3494446079","US","USA","UNITED STATES" -"3494447104","3494449151","US","USA","UNITED STATES" -"3494449152","3494451199","CA","CAN","CANADA" -"3494451200","3494454128","US","USA","UNITED STATES" -"3494454129","3494454158","PH","PHL","PHILIPPINES" -"3494454159","3494455295","US","USA","UNITED STATES" -"3494455296","3494456319","CA","CAN","CANADA" -"3494456320","3494459391","US","USA","UNITED STATES" -"3494459392","3494460415","CA","CAN","CANADA" -"3494460416","3494464511","US","USA","UNITED STATES" -"3494464512","3494465535","CA","CAN","CANADA" -"3494465536","3494467583","US","USA","UNITED STATES" -"3494469632","3494510591","US","USA","UNITED STATES" -"3494510592","3494512639","CA","CAN","CANADA" -"3494512640","3494516735","US","USA","UNITED STATES" -"3494516736","3494517759","CA","CAN","CANADA" -"3494517760","3494545407","US","USA","UNITED STATES" -"3494546432","3494563839","US","USA","UNITED STATES" -"3494563840","3494565887","CA","CAN","CANADA" -"3494565888","3494576127","US","USA","UNITED STATES" -"3494577152","3494582271","US","USA","UNITED STATES" -"3494584320","3494594559","US","USA","UNITED STATES" -"3494594560","3494595583","CA","CAN","CANADA" -"3494595584","3494605823","US","USA","UNITED STATES" -"3494605824","3494606847","CA","CAN","CANADA" -"3494606848","3494610943","US","USA","UNITED STATES" -"3494610944","3494611967","CA","CAN","CANADA" -"3494611968","3494624255","US","USA","UNITED STATES" -"3494624256","3494625279","CA","CAN","CANADA" -"3494625280","3494627327","US","USA","UNITED STATES" -"3494627328","3494628351","BM","BMU","BERMUDA" -"3494628352","3494648831","US","USA","UNITED STATES" -"3494649856","3494651903","US","USA","UNITED STATES" -"3494651904","3494652927","CA","CAN","CANADA" -"3494652928","3494653951","US","USA","UNITED STATES" -"3494656000","3494660095","US","USA","UNITED STATES" -"3494660096","3494661119","CA","CAN","CANADA" -"3494661120","3494668287","US","USA","UNITED STATES" -"3494668288","3494669375","CA","CAN","CANADA" -"3494669376","3494669439","US","USA","UNITED STATES" -"3494669440","3494670335","CA","CAN","CANADA" -"3494670336","3494682623","US","USA","UNITED STATES" -"3494684672","3494700031","US","USA","UNITED STATES" -"3494700032","3494701055","CA","CAN","CANADA" -"3494701056","3494727679","US","USA","UNITED STATES" -"3494727680","3494729727","CA","CAN","CANADA" -"3494729728","3494730751","US","USA","UNITED STATES" -"3494730752","3494731775","CA","CAN","CANADA" -"3494731776","3494743039","US","USA","UNITED STATES" -"3494743040","3494744063","CA","CAN","CANADA" -"3494744064","3494747135","US","USA","UNITED STATES" -"3494748160","3494757375","US","USA","UNITED STATES" -"3494757376","3494758399","CA","CAN","CANADA" -"3494758400","3494764543","US","USA","UNITED STATES" -"3494766592","3494776831","US","USA","UNITED STATES" -"3494776832","3494777855","CA","CAN","CANADA" -"3494777856","3494785023","US","USA","UNITED STATES" -"3494785024","3494787071","MF","MAF","SAINT MARTIN" -"3494787072","3494789119","CA","CAN","CANADA" -"3494789120","3494814719","US","USA","UNITED STATES" -"3494815744","3494820863","US","USA","UNITED STATES" -"3494821888","3494850559","US","USA","UNITED STATES" -"3494851584","3494852607","US","USA","UNITED STATES" -"3494852608","3494854655","CA","CAN","CANADA" -"3494854656","3494862847","US","USA","UNITED STATES" -"3494862848","3494863615","VC","VCT","SAINT VINCENT AND THE GRENADINES" -"3494863616","3494863871","GP","GLP","GUADELOUPE" -"3494863872","3494866943","US","USA","UNITED STATES" -"3494866944","3494867967","CA","CAN","CANADA" -"3494867968","3494893567","US","USA","UNITED STATES" -"3494893568","3494894591","CA","CAN","CANADA" -"3494894592","3494895615","US","USA","UNITED STATES" -"3494896640","3494904831","US","USA","UNITED STATES" -"3494905856","3494917119","US","USA","UNITED STATES" -"3494917120","3494918143","CA","CAN","CANADA" -"3494918144","3494928383","US","USA","UNITED STATES" -"3494928384","3494930431","CA","CAN","CANADA" -"3494930432","3494938623","US","USA","UNITED STATES" -"3494938624","3494939647","CA","CAN","CANADA" -"3494939648","3494946815","US","USA","UNITED STATES" -"3494948864","3494964223","US","USA","UNITED STATES" -"3494964224","3494965247","PR","PRI","PUERTO RICO" -"3494965248","3494968319","US","USA","UNITED STATES" -"3494968320","3494972415","CA","CAN","CANADA" -"3494972416","3494978559","US","USA","UNITED STATES" -"3494979584","3494981631","CA","CAN","CANADA" -"3494981632","3495000063","US","USA","UNITED STATES" -"3495000064","3495001087","CA","CAN","CANADA" -"3495001088","3495006207","US","USA","UNITED STATES" -"3495006208","3495007231","CA","CAN","CANADA" -"3495007232","3495010303","US","USA","UNITED STATES" -"3495010304","3495011327","KN","KNA","SAINT KITTS AND NEVIS" -"3495012352","3495014399","PR","PRI","PUERTO RICO" -"3495014400","3495023615","US","USA","UNITED STATES" -"3495023616","3495024639","CA","CAN","CANADA" -"3495024640","3495057407","US","USA","UNITED STATES" -"3495059456","3495065599","US","USA","UNITED STATES" -"3495065600","3495066623","CA","CAN","CANADA" -"3495066624","3495068223","US","USA","UNITED STATES" -"3495068224","3495068239","PL","POL","POLAND" -"3495068240","3495068655","US","USA","UNITED STATES" -"3495068656","3495068671","PL","POL","POLAND" -"3495068672","3495076863","US","USA","UNITED STATES" -"3495076864","3495077887","BM","BMU","BERMUDA" -"3495077888","3495090175","US","USA","UNITED STATES" -"3495090176","3495091199","KY","CYM","CAYMAN ISLANDS" -"3495091200","3495098367","US","USA","UNITED STATES" -"3495098368","3495100415","CA","CAN","CANADA" -"3495100416","3495104511","US","USA","UNITED STATES" -"3495105536","3495120895","US","USA","UNITED STATES" -"3495120896","3495122943","AG","ATG","ANTIGUA AND BARBUDA" -"3495122944","3495147519","US","USA","UNITED STATES" -"3495149568","3495153663","US","USA","UNITED STATES" -"3495153664","3495155711","CA","CAN","CANADA" -"3495155712","3495192575","US","USA","UNITED STATES" -"3495192576","3495193599","CA","CAN","CANADA" -"3495193600","3495199743","US","USA","UNITED STATES" -"3495200768","3495215103","US","USA","UNITED STATES" -"3495215104","3495217151","VI","VIR","VIRGIN ISLANDS, U.S." -"3495217152","3495219199","VC","VCT","SAINT VINCENT AND THE GRENADINES" -"3495219200","3495251967","US","USA","UNITED STATES" -"3495251968","3495254015","CA","CAN","CANADA" -"3495254016","3495260159","US","USA","UNITED STATES" -"3495260160","3495261183","CA","CAN","CANADA" -"3495261184","3495276287","US","USA","UNITED STATES" -"3495276288","3495276351","IN","IND","INDIA" -"3495276352","3495276543","US","USA","UNITED STATES" -"3495278592","3495286783","US","USA","UNITED STATES" -"3495286784","3495288831","CA","CAN","CANADA" -"3495288832","3495332863","US","USA","UNITED STATES" -"3495332864","3495333887","CA","CAN","CANADA" -"3495333888","3495349247","US","USA","UNITED STATES" -"3495349248","3495350271","CA","CAN","CANADA" -"3495350272","3495358463","US","USA","UNITED STATES" -"3495358464","3495359487","CA","CAN","CANADA" -"3495359488","3495367679","US","USA","UNITED STATES" -"3495367680","3495368703","CA","CAN","CANADA" -"3495368704","3495370751","US","USA","UNITED STATES" -"3495370752","3495372799","BS","BHS","BAHAMAS" -"3495372800","3495375871","US","USA","UNITED STATES" -"3495375872","3495376895","CA","CAN","CANADA" -"3495376896","3495399423","US","USA","UNITED STATES" -"3495399424","3495400447","KN","KNA","SAINT KITTS AND NEVIS" -"3495400448","3495401471","US","USA","UNITED STATES" -"3495403520","3495411711","US","USA","UNITED STATES" -"3495412736","3495413759","CA","CAN","CANADA" -"3495413760","3495424033","US","USA","UNITED STATES" -"3495424034","3495424042","IN","IND","INDIA" -"3495424043","3495424286","US","USA","UNITED STATES" -"3495424287","3495424308","IN","IND","INDIA" -"3495424309","3495424321","US","USA","UNITED STATES" -"3495424322","3495424346","IN","IND","INDIA" -"3495424347","3495424355","US","USA","UNITED STATES" -"3495424356","3495424381","IN","IND","INDIA" -"3495424382","3495424629","US","USA","UNITED STATES" -"3495424630","3495424637","IN","IND","INDIA" -"3495424638","3495424789","US","USA","UNITED STATES" -"3495424790","3495424797","IN","IND","INDIA" -"3495424798","3495424865","US","USA","UNITED STATES" -"3495424866","3495424878","IN","IND","INDIA" -"3495424879","3495424913","US","USA","UNITED STATES" -"3495424914","3495424919","IN","IND","INDIA" -"3495424920","3495429119","US","USA","UNITED STATES" -"3495429120","3495430143","CA","CAN","CANADA" -"3495430144","3495440799","US","USA","UNITED STATES" -"3495440800","3495440815","PL","POL","POLAND" -"3495440816","3495440895","US","USA","UNITED STATES" -"3495440896","3495440911","PL","POL","POLAND" -"3495440912","3495441151","US","USA","UNITED STATES" -"3495441152","3495441167","PL","POL","POLAND" -"3495441168","3495441407","US","USA","UNITED STATES" -"3495441408","3495441423","PL","POL","POLAND" -"3495441424","3495441663","US","USA","UNITED STATES" -"3495441664","3495441679","PL","POL","POLAND" -"3495441680","3495441919","US","USA","UNITED STATES" -"3495441920","3495441935","PL","POL","POLAND" -"3495441936","3495454719","US","USA","UNITED STATES" -"3495455744","3495456767","CA","CAN","CANADA" -"3495456768","3495463935","US","USA","UNITED STATES" -"3495463936","3495464959","CA","CAN","CANADA" -"3495464960","3495475199","US","USA","UNITED STATES" -"3495475200","3495477247","CA","CAN","CANADA" -"3495477248","3495478271","US","USA","UNITED STATES" -"3495478272","3495479295","CA","CAN","CANADA" -"3495479296","3495505919","US","USA","UNITED STATES" -"3495505920","3495507967","CA","CAN","CANADA" -"3495507968","3495515135","US","USA","UNITED STATES" -"3495515136","3495516159","CA","CAN","CANADA" -"3495516160","3495520375","US","USA","UNITED STATES" -"3495520376","3495520379","SG","SGP","SINGAPORE" -"3495520380","3495526399","US","USA","UNITED STATES" -"3495526400","3495527423","CA","CAN","CANADA" -"3495527424","3495549238","US","USA","UNITED STATES" -"3495549239","3495549302","CA","CAN","CANADA" -"3495549303","3495549366","US","USA","UNITED STATES" -"3495549367","3495549430","CA","CAN","CANADA" -"3495549431","3495549917","US","USA","UNITED STATES" -"3495549918","3495549923","CA","CAN","CANADA" -"3495549924","3495551999","US","USA","UNITED STATES" -"3495552000","3495553023","BM","BMU","BERMUDA" -"3495553024","3495579647","US","USA","UNITED STATES" -"3495579648","3495581695","CA","CAN","CANADA" -"3495581696","3495583743","US","USA","UNITED STATES" -"3495583744","3495585791","CA","CAN","CANADA" -"3495585792","3495587839","US","USA","UNITED STATES" -"3495587840","3495588863","MS","MSR","MONTSERRAT" -"3495588864","3495618559","US","USA","UNITED STATES" -"3495618560","3495619583","CA","CAN","CANADA" -"3495619584","3495620607","US","USA","UNITED STATES" -"3495620608","3495622655","CA","CAN","CANADA" -"3495622656","3495653375","US","USA","UNITED STATES" -"3495653376","3495654399","CA","CAN","CANADA" -"3495655424","3495673855","US","USA","UNITED STATES" -"3495673856","3495674879","MF","MAF","SAINT MARTIN" -"3495674880","3495686143","US","USA","UNITED STATES" -"3495687168","3495688191","US","USA","UNITED STATES" -"3495688192","3495689215","CA","CAN","CANADA" -"3495689216","3495694335","US","USA","UNITED STATES" -"3495694336","3495696383","CA","CAN","CANADA" -"3495698432","3495703551","US","USA","UNITED STATES" -"3495703552","3495704575","CA","CAN","CANADA" -"3495704576","3495718911","US","USA","UNITED STATES" -"3495718912","3495720959","CA","CAN","CANADA" -"3495720960","3495724031","US","USA","UNITED STATES" -"3495724032","3495727103","CA","CAN","CANADA" -"3495727104","3495740415","US","USA","UNITED STATES" -"3495740416","3495741439","CA","CAN","CANADA" -"3495741440","3495749631","US","USA","UNITED STATES" -"3495749632","3495750655","CA","CAN","CANADA" -"3495750656","3495774207","US","USA","UNITED STATES" -"3495774208","3495776255","CA","CAN","CANADA" -"3495776256","3495794687","US","USA","UNITED STATES" -"3495795712","3495814143","US","USA","UNITED STATES" -"3495815168","3495817215","CA","CAN","CANADA" -"3495817216","3495828479","US","USA","UNITED STATES" -"3495828480","3495829503","CA","CAN","CANADA" -"3495829504","3495847935","US","USA","UNITED STATES" -"3495847936","3495849983","CA","CAN","CANADA" -"3495849984","3495862271","US","USA","UNITED STATES" -"3495862272","3495864319","CA","CAN","CANADA" -"3495864320","3495865343","GP","GLP","GUADELOUPE" -"3495865344","3495865599","CA","CAN","CANADA" -"3495865600","3495865631","BD","BGD","BANGLADESH" -"3495865632","3495866207","CA","CAN","CANADA" -"3495866208","3495866239","BD","BGD","BANGLADESH" -"3495866240","3495866359","CA","CAN","CANADA" -"3495866360","3495866363","US","USA","UNITED STATES" -"3495866364","3495866367","CA","CAN","CANADA" -"3495866368","3495868415","VC","VCT","SAINT VINCENT AND THE GRENADINES" -"3495868416","3495871487","US","USA","UNITED STATES" -"3495871488","3495872511","CA","CAN","CANADA" -"3495872512","3495896063","US","USA","UNITED STATES" -"3495896064","3495897087","PR","PRI","PUERTO RICO" -"3495897088","3495930879","US","USA","UNITED STATES" -"3495930880","3495931903","CA","CAN","CANADA" -"3495931904","3495934975","US","USA","UNITED STATES" -"3495936000","3495968767","US","USA","UNITED STATES" -"3495968768","3495985151","CA","CAN","CANADA" -"3495985152","3495988223","NI","NIC","NICARAGUA" -"3495988224","3495989247","GT","GTM","GUATEMALA" -"3495989248","3496034303","US","USA","UNITED STATES" -"3496034304","3496050687","CA","CAN","CANADA" -"3496050688","3496132607","US","USA","UNITED STATES" -"3496132608","3496145951","CA","CAN","CANADA" -"3496145952","3496145983","US","USA","UNITED STATES" -"3496145984","3496148991","CA","CAN","CANADA" -"3496148992","3496181759","US","USA","UNITED STATES" -"3496181760","3496189951","CA","CAN","CANADA" -"3496189952","3496292319","US","USA","UNITED STATES" -"3496292320","3496292335","PH","PHL","PHILIPPINES" -"3496292336","3496295839","US","USA","UNITED STATES" -"3496295840","3496295871","AR","ARG","ARGENTINA" -"3496295872","3496296447","US","USA","UNITED STATES" -"3496296448","3496312831","CA","CAN","CANADA" -"3496312832","3496341503","US","USA","UNITED STATES" -"3496345600","3496468479","US","USA","UNITED STATES" -"3496468480","3496476671","CA","CAN","CANADA" -"3496476672","3496878079","US","USA","UNITED STATES" -"3496878080","3496882175","CA","CAN","CANADA" -"3496882176","3496894463","US","USA","UNITED STATES" -"3496894464","3496902655","CA","CAN","CANADA" -"3496902656","3496951807","US","USA","UNITED STATES" -"3496951808","3496959999","CA","CAN","CANADA" -"3496960000","3497066495","US","USA","UNITED STATES" -"3497066496","3497082879","CA","CAN","CANADA" -"3497082880","3497164799","US","USA","UNITED STATES" -"3497164800","3497181183","CA","CAN","CANADA" -"3497181184","3497222407","US","USA","UNITED STATES" -"3497222408","3497222415","IN","IND","INDIA" -"3497222416","3497222463","US","USA","UNITED STATES" -"3497222464","3497222479","IN","IND","INDIA" -"3497222480","3497223295","US","USA","UNITED STATES" -"3497223296","3497223359","CH","CHE","SWITZERLAND" -"3497223360","3497223791","US","USA","UNITED STATES" -"3497223792","3497223807","CH","CHE","SWITZERLAND" -"3497223808","3497223839","US","USA","UNITED STATES" -"3497223840","3497223871","CH","CHE","SWITZERLAND" -"3497223872","3497223879","US","USA","UNITED STATES" -"3497223880","3497223887","ID","IDN","INDONESIA" -"3497223888","3497224255","US","USA","UNITED STATES" -"3497224256","3497224319","IN","IND","INDIA" -"3497224320","3497224831","US","USA","UNITED STATES" -"3497224832","3497224863","CH","CHE","SWITZERLAND" -"3497224864","3497225375","US","USA","UNITED STATES" -"3497225376","3497225383","CN","CHN","CHINA" -"3497225384","3497225471","US","USA","UNITED STATES" -"3497225472","3497225535","IN","IND","INDIA" -"3497225536","3497226783","US","USA","UNITED STATES" -"3497226784","3497226815","CH","CHE","SWITZERLAND" -"3497226816","3497226831","US","USA","UNITED STATES" -"3497226832","3497226855","CH","CHE","SWITZERLAND" -"3497226856","3497226879","US","USA","UNITED STATES" -"3497226880","3497226959","CH","CHE","SWITZERLAND" -"3497226960","3497227023","US","USA","UNITED STATES" -"3497227024","3497227039","GB","GBR","UNITED KINGDOM" -"3497227040","3497227247","US","USA","UNITED STATES" -"3497227248","3497227255","CN","CHN","CHINA" -"3497227256","3497227391","US","USA","UNITED STATES" -"3497227392","3497227407","CN","CHN","CHINA" -"3497227408","3497227527","US","USA","UNITED STATES" -"3497227528","3497227535","CN","CHN","CHINA" -"3497227536","3497228079","US","USA","UNITED STATES" -"3497228080","3497228087","CN","CHN","CHINA" -"3497228088","3497264127","US","USA","UNITED STATES" -"3497264128","3497264159","CA","CAN","CANADA" -"3497264160","3497264913","US","USA","UNITED STATES" -"3497264914","3497264950","GB","GBR","UNITED KINGDOM" -"3497264951","3497266527","US","USA","UNITED STATES" -"3497266528","3497266535","GB","GBR","UNITED KINGDOM" -"3497266536","3497268223","US","USA","UNITED STATES" -"3497268224","3497268287","GB","GBR","UNITED KINGDOM" -"3497268288","3497268703","US","USA","UNITED STATES" -"3497268704","3497268719","CA","CAN","CANADA" -"3497268720","3497268815","US","USA","UNITED STATES" -"3497268816","3497268831","CA","CAN","CANADA" -"3497268832","3497273919","US","USA","UNITED STATES" -"3497273920","3497273927","CA","CAN","CANADA" -"3497273928","3497274175","US","USA","UNITED STATES" -"3497274176","3497274207","CA","CAN","CANADA" -"3497274208","3497328639","US","USA","UNITED STATES" -"3497353216","3497410559","US","USA","UNITED STATES" -"3497410560","3497431039","CA","CAN","CANADA" -"3497431040","3497447423","US","USA","UNITED STATES" -"3497447424","3497451519","CA","CAN","CANADA" -"3497451520","3497717759","US","USA","UNITED STATES" -"3497717760","3497718783","CA","CAN","CANADA" -"3497718784","3497719295","US","USA","UNITED STATES" -"3497719296","3497721855","CA","CAN","CANADA" -"3497721856","3497739327","US","USA","UNITED STATES" -"3497739328","3497739351","IN","IND","INDIA" -"3497739352","3497739679","US","USA","UNITED STATES" -"3497739680","3497739687","CA","CAN","CANADA" -"3497739688","3497820159","US","USA","UNITED STATES" -"3497820160","3497852927","CA","CAN","CANADA" -"3497852928","3498254591","US","USA","UNITED STATES" -"3498254592","3498254847","JM","JAM","JAMAICA" -"3498254848","3498287103","US","USA","UNITED STATES" -"3498287104","3498292543","JM","JAM","JAMAICA" -"3498292544","3498292551","US","USA","UNITED STATES" -"3498292552","3498295295","JM","JAM","JAMAICA" -"3498295296","3498405887","US","USA","UNITED STATES" -"3498405888","3498409983","CA","CAN","CANADA" -"3498409984","3498428415","US","USA","UNITED STATES" -"3498428416","3498429439","CR","CRI","COSTA RICA" -"3498429440","3498429951","US","USA","UNITED STATES" -"3498429952","3498430207","CR","CRI","COSTA RICA" -"3498430208","3498505343","US","USA","UNITED STATES" -"3498505344","3498505375","SG","SGP","SINGAPORE" -"3498505376","3498509055","US","USA","UNITED STATES" -"3498509056","3498510335","PR","PRI","PUERTO RICO" -"3498510336","3498513151","US","USA","UNITED STATES" -"3498513152","3498513407","CL","CHL","CHILE" -"3498513408","3498513919","US","USA","UNITED STATES" -"3498513920","3498514431","CL","CHL","CHILE" -"3498514432","3498587135","US","USA","UNITED STATES" -"3498587136","3498588159","NL","NLD","NETHERLANDS" -"3498588160","3498708991","US","USA","UNITED STATES" -"3498708992","3498713639","JM","JAM","JAMAICA" -"3498713640","3498713647","CA","CAN","CANADA" -"3498713648","3498717183","JM","JAM","JAMAICA" -"3498717184","3498760191","US","USA","UNITED STATES" -"3498760192","3498762239","PR","PRI","PUERTO RICO" -"3498762240","3499403263","US","USA","UNITED STATES" -"3499403264","3499403775","MW","MWI","MALAWI" -"3499403776","3499436031","US","USA","UNITED STATES" -"3499436032","3499436287","DE","DEU","GERMANY" -"3499436288","3499437055","US","USA","UNITED STATES" -"3499437056","3499437151","DE","DEU","GERMANY" -"3499437152","3499437423","US","USA","UNITED STATES" -"3499437424","3499437431","IT","ITA","ITALY" -"3499437432","3499450367","US","USA","UNITED STATES" -"3499450368","3499451391","IN","IND","INDIA" -"3499451392","3499705343","US","USA","UNITED STATES" -"3499705344","3499705855","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"3499705856","3499706367","MG","MDG","MADAGASCAR" -"3499706368","3499986943","US","USA","UNITED STATES" -"3499986944","3499988991","KY","CYM","CAYMAN ISLANDS" -"3499988992","3500015615","US","USA","UNITED STATES" -"3500015616","3500016383","AG","ATG","ANTIGUA AND BARBUDA" -"3500016384","3500016639","KN","KNA","SAINT KITTS AND NEVIS" -"3500016640","3500019711","AG","ATG","ANTIGUA AND BARBUDA" -"3500019712","3500076415","US","USA","UNITED STATES" -"3500076416","3500076543","SG","SGP","SINGAPORE" -"3500076544","3500144639","US","USA","UNITED STATES" -"3500144640","3500144895","IT","ITA","ITALY" -"3500144896","3500274175","US","USA","UNITED STATES" -"3500274176","3500274239","IE","IRL","IRELAND" -"3500274240","3500351487","US","USA","UNITED STATES" -"3500351488","3500359679","JM","JAM","JAMAICA" -"3500359680","3500371583","US","USA","UNITED STATES" -"3500371584","3500371599","GB","GBR","UNITED KINGDOM" -"3500371600","3500396831","US","USA","UNITED STATES" -"3500396832","3500396863","GB","GBR","UNITED KINGDOM" -"3500396864","3500486655","US","USA","UNITED STATES" -"3500486656","3500490751","CR","CRI","COSTA RICA" -"3500490752","3500689407","US","USA","UNITED STATES" -"3500689408","3500689919","CL","CHL","CHILE" -"3500689920","3500724991","US","USA","UNITED STATES" -"3500724992","3500725503","EC","ECU","ECUADOR" -"3500725504","3500725759","US","USA","UNITED STATES" -"3500725760","3500726015","EC","ECU","ECUADOR" -"3500726016","3500728319","US","USA","UNITED STATES" -"3500728320","3500736511","KY","CYM","CAYMAN ISLANDS" -"3500736512","3500752895","US","USA","UNITED STATES" -"3500752896","3500761087","KY","CYM","CAYMAN ISLANDS" -"3500761088","3501181703","US","USA","UNITED STATES" -"3501181704","3501181711","AU","AUS","AUSTRALIA" -"3501181712","3501181727","KR","KOR","REPUBLIC OF KOREA" -"3501181728","3501182975","US","USA","UNITED STATES" -"3501182976","3501183007","SG","SGP","SINGAPORE" -"3501183008","3501183039","US","USA","UNITED STATES" -"3501183040","3501183047","SG","SGP","SINGAPORE" -"3501183048","3501183167","US","USA","UNITED STATES" -"3501183168","3501183231","SG","SGP","SINGAPORE" -"3501183232","3501183487","US","USA","UNITED STATES" -"3501183488","3501183743","GB","GBR","UNITED KINGDOM" -"3501183744","3501183959","US","USA","UNITED STATES" -"3501183960","3501183967","IL","ISR","ISRAEL" -"3501183968","3501183999","SG","SGP","SINGAPORE" -"3501184000","3501522943","US","USA","UNITED STATES" -"3501522944","3501588479","CA","CAN","CANADA" -"3501588480","3502418175","US","USA","UNITED STATES" -"3502418176","3502418431","GU","GUM","GUAM" -"3502418432","3502929663","US","USA","UNITED STATES" -"3502929664","3502929919","GU","GUM","GUAM" -"3502929920","3502993407","US","USA","UNITED STATES" -"3502993408","3502993919","NL","NLD","NETHERLANDS" -"3502993920","3503215623","US","USA","UNITED STATES" -"3503215624","3503215639","NL","NLD","NETHERLANDS" -"3503215640","3503473151","US","USA","UNITED STATES" -"3503473152","3503473663","NA","NAM","NAMIBIA" -"3503473664","3503757823","US","USA","UNITED STATES" -"3503757824","3503758335","GU","GUM","GUAM" -"3503758336","3503890431","US","USA","UNITED STATES" -"3503890432","3503894527","CO","COL","COLOMBIA" -"3503894528","3504193535","US","USA","UNITED STATES" -"3504193536","3504194559","EC","ECU","ECUADOR" -"3504194560","3504521215","US","USA","UNITED STATES" -"3504521216","3504521727","GU","GUM","GUAM" -"3504521728","3505004543","US","USA","UNITED STATES" -"3505004544","3505012735","PR","PRI","PUERTO RICO" -"3505012736","3505661951","US","USA","UNITED STATES" -"3505661952","3505662463","JM","JAM","JAMAICA" -"3505662464","3505818623","US","USA","UNITED STATES" -"3505818624","3505819647","BS","BHS","BAHAMAS" -"3505819648","3506043135","US","USA","UNITED STATES" -"3506043136","3506044927","PA","PAN","PANAMA" -"3506044928","3506765823","US","USA","UNITED STATES" -"3506765824","3506831359","CA","CAN","CANADA" -"3506831360","3507290111","US","USA","UNITED STATES" -"3507290112","3507355647","AR","ARG","ARGENTINA" -"3507355648","3507540015","US","USA","UNITED STATES" -"3507540016","3507540031","IN","IND","INDIA" -"3507540032","3507585023","US","USA","UNITED STATES" -"3507585024","3507601407","CA","CAN","CANADA" -"3507601408","3507748863","US","USA","UNITED STATES" -"3507748864","3507765247","CA","CAN","CANADA" -"3507765248","3508118527","US","USA","UNITED STATES" -"3508118528","3508118559","AU","AUS","AUSTRALIA" -"3508118560","3508219903","US","USA","UNITED STATES" -"3508219904","3508220927","CA","CAN","CANADA" -"3508220928","3508221951","KY","CYM","CAYMAN ISLANDS" -"3508221952","3508222975","US","USA","UNITED STATES" -"3508222976","3508223999","KY","CYM","CAYMAN ISLANDS" -"3508224000","3508224255","BM","BMU","BERMUDA" -"3508224256","3508243967","US","USA","UNITED STATES" -"3508243968","3508244223","BM","BMU","BERMUDA" -"3508244224","3508338687","US","USA","UNITED STATES" -"3508338688","3508404223","CA","CAN","CANADA" -"3508404224","3508690943","US","USA","UNITED STATES" -"3508690944","3508695039","CA","CAN","CANADA" -"3508695040","3509157887","US","USA","UNITED STATES" -"3509157888","3509166079","CA","CAN","CANADA" -"3509166080","3509215231","US","USA","UNITED STATES" -"3509215232","3509223423","CA","CAN","CANADA" -"3509223424","3509326079","US","USA","UNITED STATES" -"3509326080","3509326087","CA","CAN","CANADA" -"3509326088","3509327695","US","USA","UNITED STATES" -"3509327696","3509327711","CA","CAN","CANADA" -"3509327712","3509327807","US","USA","UNITED STATES" -"3509327808","3509327871","CA","CAN","CANADA" -"3509327872","3509346303","US","USA","UNITED STATES" -"3509346304","3509347103","CA","CAN","CANADA" -"3509347104","3509347119","US","USA","UNITED STATES" -"3509347120","3509354495","CA","CAN","CANADA" -"3509354496","3509387263","US","USA","UNITED STATES" -"3509387264","3509420031","PE","PER","PERU" -"3509420032","3509519871","US","USA","UNITED STATES" -"3509519872","3509520255","CA","CAN","CANADA" -"3509520256","3509521407","US","USA","UNITED STATES" -"3509521408","3509521663","CA","CAN","CANADA" -"3509521664","3509522175","US","USA","UNITED STATES" -"3509522176","3509522431","CA","CAN","CANADA" -"3509522432","3509522687","KW","KWT","KUWAIT" -"3509522688","3509522943","CA","CAN","CANADA" -"3509522944","3509523839","US","USA","UNITED STATES" -"3509523840","3509523903","CA","CAN","CANADA" -"3509523904","3509524223","US","USA","UNITED STATES" -"3509524224","3509524479","CA","CAN","CANADA" -"3509524480","3509524991","US","USA","UNITED STATES" -"3509524992","3509525247","CA","CAN","CANADA" -"3509525248","3509526015","US","USA","UNITED STATES" -"3509526016","3509526271","CA","CAN","CANADA" -"3509526272","3509527215","US","USA","UNITED STATES" -"3509527216","3509527231","CA","CAN","CANADA" -"3509527232","3509529855","US","USA","UNITED STATES" -"3509529856","3509529887","CA","CAN","CANADA" -"3509529888","3509529951","US","USA","UNITED STATES" -"3509529952","3509530111","CA","CAN","CANADA" -"3509530112","3509530367","US","USA","UNITED STATES" -"3509530368","3509530431","CA","CAN","CANADA" -"3509530432","3509530623","US","USA","UNITED STATES" -"3509530624","3509532671","CA","CAN","CANADA" -"3509532672","3509534719","US","USA","UNITED STATES" -"3509534720","3509535231","CA","CAN","CANADA" -"3509535232","3509535487","US","USA","UNITED STATES" -"3509535488","3509535503","CA","CAN","CANADA" -"3509535504","3509536255","US","USA","UNITED STATES" -"3509536256","3509536511","CA","CAN","CANADA" -"3509536512","3509537279","US","USA","UNITED STATES" -"3509537280","3509538303","CA","CAN","CANADA" -"3509538304","3509538463","US","USA","UNITED STATES" -"3509538464","3509538479","CA","CAN","CANADA" -"3509538480","3509539071","US","USA","UNITED STATES" -"3509539072","3509539327","CA","CAN","CANADA" -"3509539328","3509542783","US","USA","UNITED STATES" -"3509542784","3509542815","CA","CAN","CANADA" -"3509542816","3509543359","US","USA","UNITED STATES" -"3509543360","3509543423","CA","CAN","CANADA" -"3509543424","3509543999","US","USA","UNITED STATES" -"3509544000","3509544063","CA","CAN","CANADA" -"3509544064","3509544191","US","USA","UNITED STATES" -"3509544192","3509544447","CA","CAN","CANADA" -"3509544448","3509544703","US","USA","UNITED STATES" -"3509544704","3509544959","CA","CAN","CANADA" -"3509544960","3509554175","US","USA","UNITED STATES" -"3509554176","3509554431","CA","CAN","CANADA" -"3509554432","3509555455","US","USA","UNITED STATES" -"3509555456","3509555711","CA","CAN","CANADA" -"3509555712","3509555967","US","USA","UNITED STATES" -"3509555968","3509556479","CA","CAN","CANADA" -"3509556480","3509558015","US","USA","UNITED STATES" -"3509558016","3509558079","CA","CAN","CANADA" -"3509558080","3509559039","US","USA","UNITED STATES" -"3509559040","3509559295","KW","KWT","KUWAIT" -"3509559296","3509559551","US","USA","UNITED STATES" -"3509559552","3509559807","CA","CAN","CANADA" -"3509559808","3509559999","US","USA","UNITED STATES" -"3509560000","3509560015","CA","CAN","CANADA" -"3509560016","3509560063","US","USA","UNITED STATES" -"3509560064","3509560319","CA","CAN","CANADA" -"3509560320","3509560831","US","USA","UNITED STATES" -"3509560832","3509561087","CA","CAN","CANADA" -"3509561088","3509561599","US","USA","UNITED STATES" -"3509561600","3509562111","CA","CAN","CANADA" -"3509562112","3509562367","US","USA","UNITED STATES" -"3509562368","3509562623","CA","CAN","CANADA" -"3509562624","3509563903","US","USA","UNITED STATES" -"3509563904","3509564223","CA","CAN","CANADA" -"3509564224","3509564415","US","USA","UNITED STATES" -"3509564416","3509564927","CA","CAN","CANADA" -"3509564928","3509565183","US","USA","UNITED STATES" -"3509565184","3509565951","CA","CAN","CANADA" -"3509565952","3509566767","US","USA","UNITED STATES" -"3509566768","3509566783","CA","CAN","CANADA" -"3509566784","3509567487","US","USA","UNITED STATES" -"3509567488","3509567743","CA","CAN","CANADA" -"3509567744","3509568511","US","USA","UNITED STATES" -"3509568512","3509569023","CA","CAN","CANADA" -"3509569024","3509570079","US","USA","UNITED STATES" -"3509570080","3509570111","CA","CAN","CANADA" -"3509570112","3509571071","US","USA","UNITED STATES" -"3509571072","3509571327","CA","CAN","CANADA" -"3509571328","3509572351","US","USA","UNITED STATES" -"3509572352","3509572863","CA","CAN","CANADA" -"3509572864","3509574143","US","USA","UNITED STATES" -"3509574144","3509574655","CA","CAN","CANADA" -"3509574656","3509575935","US","USA","UNITED STATES" -"3509575936","3509576191","CA","CAN","CANADA" -"3509576192","3509580031","US","USA","UNITED STATES" -"3509580032","3509580287","CA","CAN","CANADA" -"3509580288","3509580799","US","USA","UNITED STATES" -"3509580800","3509581055","CA","CAN","CANADA" -"3509581056","3509581823","US","USA","UNITED STATES" -"3509581824","3509582335","CA","CAN","CANADA" -"3509582336","3509582591","US","USA","UNITED STATES" -"3509582592","3509582847","CA","CAN","CANADA" -"3509582848","3509583615","US","USA","UNITED STATES" -"3509583616","3509583871","CA","CAN","CANADA" -"3509583872","3509731327","US","USA","UNITED STATES" -"3509731328","3509739519","CA","CAN","CANADA" -"3509739520","3509846015","US","USA","UNITED STATES" -"3509846016","3509977087","CA","CAN","CANADA" -"3510042624","3510239231","US","USA","UNITED STATES" -"3510239232","3510241063","CA","CAN","CANADA" -"3510241064","3510241071","US","USA","UNITED STATES" -"3510241072","3510255439","CA","CAN","CANADA" -"3510255440","3510255447","US","USA","UNITED STATES" -"3510255448","3510271999","CA","CAN","CANADA" -"3510272000","3510321151","US","USA","UNITED STATES" -"3510321152","3510321663","VG","VGB","VIRGIN ISLANDS, BRITISH" -"3510321664","3510321919","AG","ATG","ANTIGUA AND BARBUDA" -"3510321920","3510322175","KN","KNA","SAINT KITTS AND NEVIS" -"3510322176","3510323199","AG","ATG","ANTIGUA AND BARBUDA" -"3510323200","3510324223","KN","KNA","SAINT KITTS AND NEVIS" -"3510324224","3510324735","AG","ATG","ANTIGUA AND BARBUDA" -"3510324736","3510324991","AI","AIA","ANGUILLA" -"3510324992","3510326271","AG","ATG","ANTIGUA AND BARBUDA" -"3510326272","3510327295","VG","VGB","VIRGIN ISLANDS, BRITISH" -"3510327296","3510328319","AG","ATG","ANTIGUA AND BARBUDA" -"3510328320","3510328575","KN","KNA","SAINT KITTS AND NEVIS" -"3510328576","3510331391","AG","ATG","ANTIGUA AND BARBUDA" -"3510331392","3510332415","DM","DMA","DOMINICA" -"3510332416","3510332927","KN","KNA","SAINT KITTS AND NEVIS" -"3510332928","3510333183","LC","LCA","SAINT LUCIA" -"3510333184","3510333439","MS","MSR","MONTSERRAT" -"3510333440","3510333951","KN","KNA","SAINT KITTS AND NEVIS" -"3510333952","3510334975","AG","ATG","ANTIGUA AND BARBUDA" -"3510334976","3510335231","KN","KNA","SAINT KITTS AND NEVIS" -"3510335232","3510335487","AI","AIA","ANGUILLA" -"3510335488","3510335743","AG","ATG","ANTIGUA AND BARBUDA" -"3510335744","3510335999","VG","VGB","VIRGIN ISLANDS, BRITISH" -"3510336000","3510337279","AG","ATG","ANTIGUA AND BARBUDA" -"3510337280","3510337535","LC","LCA","SAINT LUCIA" -"3510337536","3510362111","US","USA","UNITED STATES" -"3510370304","3510831527","US","USA","UNITED STATES" -"3510831528","3510831535","GB","GBR","UNITED KINGDOM" -"3510831536","3510833423","US","USA","UNITED STATES" -"3510833424","3510833439","CA","CAN","CANADA" -"3510833440","3510836671","US","USA","UNITED STATES" -"3510836672","3510836687","CA","CAN","CANADA" -"3510836688","3510839135","US","USA","UNITED STATES" -"3510839136","3510839151","GB","GBR","UNITED KINGDOM" -"3510839152","3510839215","US","USA","UNITED STATES" -"3510839216","3510839231","GB","GBR","UNITED KINGDOM" -"3510839232","3510839311","US","USA","UNITED STATES" -"3510839312","3510839327","IN","IND","INDIA" -"3510839328","3510843087","US","USA","UNITED STATES" -"3510843088","3510843095","CA","CAN","CANADA" -"3510843096","3510843103","GB","GBR","UNITED KINGDOM" -"3510843104","3510844415","US","USA","UNITED STATES" -"3510844416","3510844927","CA","CAN","CANADA" -"3510844928","3510846527","US","USA","UNITED STATES" -"3510846528","3510846559","CA","CAN","CANADA" -"3510846560","3510897442","US","USA","UNITED STATES" -"3510897443","3510897443","IE","IRL","IRELAND" -"3510897444","3510935551","US","USA","UNITED STATES" -"3510935552","3510943743","CA","CAN","CANADA" -"3510943744","3511140351","US","USA","UNITED STATES" -"3511140352","3511156735","CA","CAN","CANADA" -"3511156736","3511314431","US","USA","UNITED STATES" -"3511320576","3511331199","US","USA","UNITED STATES" -"3511331200","3511331231","CA","CAN","CANADA" -"3511331232","3511812095","US","USA","UNITED STATES" -"3511812096","3511844863","CA","CAN","CANADA" -"3511844864","3512011311","US","USA","UNITED STATES" -"3512011312","3512011327","UM","UMI","UNITED STATES MINOR OUTLYING ISLANDS" -"3512011328","3512011359","US","USA","UNITED STATES" -"3512011360","3512011375","TR","TUR","TURKEY" -"3512011376","3512011807","US","USA","UNITED STATES" -"3512011808","3512011823","TW","TWN","TAIWAN" -"3512011824","3512011855","US","USA","UNITED STATES" -"3512011856","3512011871","SE","SWE","SWEDEN" -"3512011872","3512011903","IN","IND","INDIA" -"3512011904","3512012095","US","USA","UNITED STATES" -"3512012096","3512012159","GB","GBR","UNITED KINGDOM" -"3512012160","3512012175","MX","MEX","MEXICO" -"3512012176","3512012191","US","USA","UNITED STATES" -"3512012192","3512012223","BR","BRA","BRAZIL" -"3512012224","3512012255","US","USA","UNITED STATES" -"3512012256","3512012287","GB","GBR","UNITED KINGDOM" -"3512012288","3512013583","US","USA","UNITED STATES" -"3512013584","3512013599","CA","CAN","CANADA" -"3512013600","3512013647","US","USA","UNITED STATES" -"3512013648","3512013663","CA","CAN","CANADA" -"3512013664","3512013679","US","USA","UNITED STATES" -"3512013680","3512013695","GR","GRC","GREECE" -"3512013696","3512013791","US","USA","UNITED STATES" -"3512013792","3512013823","IN","IND","INDIA" -"3512013824","3512016543","US","USA","UNITED STATES" -"3512016544","3512016559","IT","ITA","ITALY" -"3512016560","3512016575","US","USA","UNITED STATES" -"3512016576","3512016591","TW","TWN","TAIWAN" -"3512016592","3512016607","US","USA","UNITED STATES" -"3512016608","3512016623","CA","CAN","CANADA" -"3512016624","3512016767","GB","GBR","UNITED KINGDOM" -"3512016768","3512016831","US","USA","UNITED STATES" -"3512016832","3512016895","JO","JOR","JORDAN" -"3512016896","3512017183","US","USA","UNITED STATES" -"3512017184","3512017199","AR","ARG","ARGENTINA" -"3512017200","3512017231","US","USA","UNITED STATES" -"3512017232","3512017247","ES","ESP","SPAIN" -"3512017248","3512017263","MX","MEX","MEXICO" -"3512017264","3512017279","GB","GBR","UNITED KINGDOM" -"3512017280","3512017359","US","USA","UNITED STATES" -"3512017360","3512017375","RU","RUS","RUSSIAN FEDERATION" -"3512017376","3512017407","GB","GBR","UNITED KINGDOM" -"3512017408","3512017663","BR","BRA","BRAZIL" -"3512017664","3512017695","CA","CAN","CANADA" -"3512017696","3512017727","RU","RUS","RUSSIAN FEDERATION" -"3512017728","3512017743","US","USA","UNITED STATES" -"3512017744","3512017759","IT","ITA","ITALY" -"3512017760","3512017791","US","USA","UNITED STATES" -"3512017792","3512017807","LT","LTU","LITHUANIA" -"3512017808","3512017823","US","USA","UNITED STATES" -"3512017824","3512017855","JO","JOR","JORDAN" -"3512017856","3512019071","US","USA","UNITED STATES" -"3512019072","3512019135","GB","GBR","UNITED KINGDOM" -"3512019136","3512019151","MX","MEX","MEXICO" -"3512019152","3512019199","US","USA","UNITED STATES" -"3512019200","3512019263","ES","ESP","SPAIN" -"3512019264","3512019295","US","USA","UNITED STATES" -"3512019296","3512019311","CA","CAN","CANADA" -"3512019312","3512019327","US","USA","UNITED STATES" -"3512019328","3512019359","CA","CAN","CANADA" -"3512019360","3512020095","US","USA","UNITED STATES" -"3512020096","3512020223","ES","ESP","SPAIN" -"3512020224","3512020479","US","USA","UNITED STATES" -"3512020480","3512020511","GB","GBR","UNITED KINGDOM" -"3512020512","3512020543","US","USA","UNITED STATES" -"3512020544","3512020607","CA","CAN","CANADA" -"3512020608","3512021503","US","USA","UNITED STATES" -"3512021504","3512021759","GB","GBR","UNITED KINGDOM" -"3512021760","3512022335","US","USA","UNITED STATES" -"3512022336","3512022399","ES","ESP","SPAIN" -"3512022400","3512022431","US","USA","UNITED STATES" -"3512022432","3512022447","IN","IND","INDIA" -"3512022448","3512022463","GB","GBR","UNITED KINGDOM" -"3512022464","3512023807","US","USA","UNITED STATES" -"3512023808","3512023839","CA","CAN","CANADA" -"3512023840","3512023855","GB","GBR","UNITED KINGDOM" -"3512023856","3512023887","US","USA","UNITED STATES" -"3512023888","3512023903","MX","MEX","MEXICO" -"3512023904","3512023999","US","USA","UNITED STATES" -"3512024000","3512024063","BR","BRA","BRAZIL" -"3512024064","3512024319","US","USA","UNITED STATES" -"3512024320","3512024575","AU","AUS","AUSTRALIA" -"3512024576","3512024591","CA","CAN","CANADA" -"3512024592","3512025087","US","USA","UNITED STATES" -"3512025088","3512025103","CA","CAN","CANADA" -"3512025104","3512025183","US","USA","UNITED STATES" -"3512025184","3512025215","CA","CAN","CANADA" -"3512025216","3512025343","US","USA","UNITED STATES" -"3512025344","3512025359","CA","CAN","CANADA" -"3512025360","3512027391","US","USA","UNITED STATES" -"3512027392","3512027519","AU","AUS","AUSTRALIA" -"3512027520","3512028271","US","USA","UNITED STATES" -"3512028272","3512028287","GB","GBR","UNITED KINGDOM" -"3512028288","3512029119","US","USA","UNITED STATES" -"3512029120","3512029135","CA","CAN","CANADA" -"3512029136","3512029263","US","USA","UNITED STATES" -"3512029264","3512029279","CA","CAN","CANADA" -"3512029280","3512031295","US","USA","UNITED STATES" -"3512031296","3512031359","JO","JOR","JORDAN" -"3512031360","3512031375","CA","CAN","CANADA" -"3512031376","3512031535","US","USA","UNITED STATES" -"3512031536","3512031551","CA","CAN","CANADA" -"3512031552","3512031759","US","USA","UNITED STATES" -"3512031760","3512031775","CA","CAN","CANADA" -"3512031776","3512037247","US","USA","UNITED STATES" -"3512037248","3512037311","AU","AUS","AUSTRALIA" -"3512037312","3512038863","US","USA","UNITED STATES" -"3512038864","3512038879","CA","CAN","CANADA" -"3512038880","3512040143","US","USA","UNITED STATES" -"3512040144","3512040159","CA","CAN","CANADA" -"3512040160","3512139775","US","USA","UNITED STATES" -"3512139776","3512156159","CA","CAN","CANADA" -"3512156160","3512172543","US","USA","UNITED STATES" -"3512172544","3512176639","CA","CAN","CANADA" -"3512176640","3512193023","US","USA","UNITED STATES" -"3512197120","3512205311","CA","CAN","CANADA" -"3512205312","3512207359","US","USA","UNITED STATES" -"3512207360","3512209407","CO","COL","COLOMBIA" -"3512209408","3512221695","US","USA","UNITED STATES" -"3512221696","3512223231","AG","ATG","ANTIGUA AND BARBUDA" -"3512223232","3512223487","LC","LCA","SAINT LUCIA" -"3512223488","3512223743","AG","ATG","ANTIGUA AND BARBUDA" -"3512223744","3512228351","US","USA","UNITED STATES" -"3512228352","3512229887","ZW","ZWE","ZIMBABWE" -"3512229888","3512230143","VE","VEN","VENEZUELA" -"3512230144","3512233215","US","USA","UNITED STATES" -"3512233216","3512233471","CL","CHL","CHILE" -"3512233472","3512233727","US","USA","UNITED STATES" -"3512233728","3512233983","HN","HND","HONDURAS" -"3512233984","3512244991","US","USA","UNITED STATES" -"3512244992","3512246015","IL","ISR","ISRAEL" -"3512246016","3512249343","US","USA","UNITED STATES" -"3512249344","3512256511","IL","ISR","ISRAEL" -"3512256512","3512258559","CL","CHL","CHILE" -"3512258560","3512263679","US","USA","UNITED STATES" -"3512263680","3512264703","VE","VEN","VENEZUELA" -"3512264704","3512269055","US","USA","UNITED STATES" -"3512269056","3512269311","PR","PRI","PUERTO RICO" -"3512269312","3512270847","US","USA","UNITED STATES" -"3512270848","3512336383","CA","CAN","CANADA" -"3512336384","3512369151","US","USA","UNITED STATES" -"3512369152","3512385535","CA","CAN","CANADA" -"3512385536","3512397823","US","USA","UNITED STATES" -"3512397824","3512401919","CA","CAN","CANADA" -"3512401920","3512418303","US","USA","UNITED STATES" -"3512418304","3512451071","CA","CAN","CANADA" -"3512451072","3512467455","PR","PRI","PUERTO RICO" -"3512467456","3512647679","US","USA","UNITED STATES" -"3512647680","3512655871","TT","TTO","TRINIDAD AND TOBAGO" -"3512655872","3512696831","US","USA","UNITED STATES" -"3512696832","3512699775","SE","SWE","SWEDEN" -"3512699776","3512699903","US","USA","UNITED STATES" -"3512699904","3512705023","SE","SWE","SWEDEN" -"3512705024","3512844287","US","USA","UNITED STATES" -"3512844288","3512852479","CA","CAN","CANADA" -"3512852480","3512983551","US","USA","UNITED STATES" -"3512983552","3512987647","AR","ARG","ARGENTINA" -"3512987648","3513171967","US","USA","UNITED STATES" -"3513180160","3513188351","US","USA","UNITED STATES" -"3513188352","3513204735","CA","CAN","CANADA" -"3513204736","3513270271","US","USA","UNITED STATES" -"3513270272","3513286655","CA","CAN","CANADA" -"3513286656","3513294847","US","USA","UNITED STATES" -"3513294848","3513303039","CA","CAN","CANADA" -"3513303040","3513368575","US","USA","UNITED STATES" -"3513368576","3513376767","CA","CAN","CANADA" -"3513384960","3513475071","US","USA","UNITED STATES" -"3513475072","3513483263","CA","CAN","CANADA" -"3513483264","3513778175","US","USA","UNITED STATES" -"3513778176","3513794559","CA","CAN","CANADA" -"3513794560","3513917439","US","USA","UNITED STATES" -"3513925632","3514007551","US","USA","UNITED STATES" -"3514007552","3514040319","CA","CAN","CANADA" -"3514040320","3514367999","US","USA","UNITED STATES" -"3514368000","3514433535","CA","CAN","CANADA" -"3514433536","3514589439","US","USA","UNITED STATES" -"3514589440","3514589695","GT","GTM","GUATEMALA" -"3514589696","3514590207","SV","SLV","EL SALVADOR" -"3514590208","3514590719","US","USA","UNITED STATES" -"3514590720","3514591103","SV","SLV","EL SALVADOR" -"3514591104","3514591487","US","USA","UNITED STATES" -"3514591488","3514592255","NI","NIC","NICARAGUA" -"3514592256","3514592767","SV","SLV","EL SALVADOR" -"3514592768","3514596863","US","USA","UNITED STATES" -"3514596864","3514597375","SV","SLV","EL SALVADOR" -"3514597376","3514826751","US","USA","UNITED STATES" -"3514826752","3514843135","CA","CAN","CANADA" -"3514843136","3515185151","US","USA","UNITED STATES" -"3515185152","3515185407","CA","CAN","CANADA" -"3515185408","3515301887","US","USA","UNITED STATES" -"3515301888","3515318271","CA","CAN","CANADA" -"3515318272","3515596799","US","USA","UNITED STATES" -"3515596800","3515613183","CA","CAN","CANADA" -"3515744256","3515867151","US","USA","UNITED STATES" -"3515867152","3515867167","AU","AUS","AUSTRALIA" -"3515867168","3515867391","US","USA","UNITED STATES" -"3515867392","3515867519","AU","AUS","AUSTRALIA" -"3515867520","3515868463","US","USA","UNITED STATES" -"3515868464","3515868479","IT","ITA","ITALY" -"3515868480","3515913631","US","USA","UNITED STATES" -"3515913632","3515913663","CA","CAN","CANADA" -"3515913664","3515916519","US","USA","UNITED STATES" -"3515916520","3515916527","AU","AUS","AUSTRALIA" -"3515916528","3515965439","US","USA","UNITED STATES" -"3515965440","3515973631","CA","CAN","CANADA" -"3515973632","3515990015","US","USA","UNITED STATES" -"3516006400","3516039167","US","USA","UNITED STATES" -"3516039168","3516071935","CA","CAN","CANADA" -"3516071936","3516153855","US","USA","UNITED STATES" -"3516153856","3516162047","CA","CAN","CANADA" -"3516162048","3516170239","US","USA","UNITED STATES" -"3516170240","3516203007","CA","CAN","CANADA" -"3516203008","3516334079","US","USA","UNITED STATES" -"3516334080","3516342271","CA","CAN","CANADA" -"3516342272","3516355663","US","USA","UNITED STATES" -"3516355664","3516355679","CA","CAN","CANADA" -"3516355680","3516366847","US","USA","UNITED STATES" -"3516366848","3516370943","CA","CAN","CANADA" -"3516370944","3516379135","US","USA","UNITED STATES" -"3516383232","3516514303","US","USA","UNITED STATES" -"3516514304","3516530687","CA","CAN","CANADA" -"3516530688","3516899327","US","USA","UNITED STATES" -"3516899328","3516899839","ZA","ZAF","SOUTH AFRICA" -"3516899840","3516899847","US","USA","UNITED STATES" -"3516899848","3516899855","NG","NGA","NIGERIA" -"3516899856","3516899887","US","USA","UNITED STATES" -"3516899888","3516899903","NG","NGA","NIGERIA" -"3516899904","3516899935","EC","ECU","ECUADOR" -"3516899936","3516900015","NG","NGA","NIGERIA" -"3516900016","3516900095","US","USA","UNITED STATES" -"3516900096","3516900351","ZA","ZAF","SOUTH AFRICA" -"3516900352","3516900607","NG","NGA","NIGERIA" -"3516900608","3516900863","ZA","ZAF","SOUTH AFRICA" -"3516900864","3516901119","NG","NGA","NIGERIA" -"3516901120","3516901887","ZA","ZAF","SOUTH AFRICA" -"3516901888","3516902399","NG","NGA","NIGERIA" -"3516902400","3516902655","ZA","ZAF","SOUTH AFRICA" -"3516902656","3516902911","NG","NGA","NIGERIA" -"3516902912","3516903167","ZA","ZAF","SOUTH AFRICA" -"3516903168","3516903423","NG","NGA","NIGERIA" -"3516903424","3516907519","CA","CAN","CANADA" -"3516907520","3517038591","US","USA","UNITED STATES" -"3517038592","3517054975","CA","CAN","CANADA" -"3517054976","3517095935","US","USA","UNITED STATES" -"3517095936","3517100031","CA","CAN","CANADA" -"3517100032","3517112319","US","USA","UNITED STATES" -"3517112320","3517116159","CA","CAN","CANADA" -"3517116160","3517116415","US","USA","UNITED STATES" -"3517116416","3517120511","CA","CAN","CANADA" -"3517120512","3517233151","US","USA","UNITED STATES" -"3517233152","3517235199","GU","GUM","GUAM" -"3517235200","3517309951","US","USA","UNITED STATES" -"3517309952","3517313023","CA","CAN","CANADA" -"3517313024","3517382911","US","USA","UNITED STATES" -"3517382912","3517383167","CA","CAN","CANADA" -"3517383168","3517385983","US","USA","UNITED STATES" -"3517385984","3517386239","CA","CAN","CANADA" -"3517386240","3517388287","US","USA","UNITED STATES" -"3517388288","3517388543","CA","CAN","CANADA" -"3517388544","3517391103","US","USA","UNITED STATES" -"3517391104","3517391359","CA","CAN","CANADA" -"3517391360","3517391439","US","USA","UNITED STATES" -"3517391440","3517391455","CA","CAN","CANADA" -"3517391456","3517391871","US","USA","UNITED STATES" -"3517391872","3517392127","CA","CAN","CANADA" -"3517392128","3517392383","US","USA","UNITED STATES" -"3517392384","3517392639","CA","CAN","CANADA" -"3517392640","3517394687","US","USA","UNITED STATES" -"3517394688","3517394943","CA","CAN","CANADA" -"3517394944","3517396063","US","USA","UNITED STATES" -"3517396064","3517396079","CA","CAN","CANADA" -"3517396080","3517396175","US","USA","UNITED STATES" -"3517396176","3517396183","CA","CAN","CANADA" -"3517396184","3517396479","US","USA","UNITED STATES" -"3517396480","3517396543","CA","CAN","CANADA" -"3517396544","3517396815","US","USA","UNITED STATES" -"3517396816","3517396831","CA","CAN","CANADA" -"3517396832","3517400063","US","USA","UNITED STATES" -"3517400064","3517400319","CA","CAN","CANADA" -"3517400320","3517400511","US","USA","UNITED STATES" -"3517400512","3517400543","CA","CAN","CANADA" -"3517400544","3517401343","US","USA","UNITED STATES" -"3517401344","3517401375","CA","CAN","CANADA" -"3517401376","3517401439","US","USA","UNITED STATES" -"3517401440","3517401471","CA","CAN","CANADA" -"3517401472","3517401855","US","USA","UNITED STATES" -"3517401856","3517402111","CA","CAN","CANADA" -"3517402112","3517403903","US","USA","UNITED STATES" -"3517403904","3517404159","CA","CAN","CANADA" -"3517404160","3517404671","US","USA","UNITED STATES" -"3517404672","3517404927","CA","CAN","CANADA" -"3517404928","3517405183","US","USA","UNITED STATES" -"3517405184","3517405439","CA","CAN","CANADA" -"3517405440","3517405631","US","USA","UNITED STATES" -"3517405632","3517405647","CA","CAN","CANADA" -"3517405648","3517405695","US","USA","UNITED STATES" -"3517405696","3517406463","CA","CAN","CANADA" -"3517406464","3517407231","US","USA","UNITED STATES" -"3517407232","3517407359","CA","CAN","CANADA" -"3517407360","3517407743","US","USA","UNITED STATES" -"3517407744","3517408255","CA","CAN","CANADA" -"3517408256","3517408959","US","USA","UNITED STATES" -"3517408960","3517408975","CA","CAN","CANADA" -"3517408976","3517409007","US","USA","UNITED STATES" -"3517409008","3517409279","CA","CAN","CANADA" -"3517409280","3517409791","US","USA","UNITED STATES" -"3517409792","3517410815","CA","CAN","CANADA" -"3517410816","3517411327","US","USA","UNITED STATES" -"3517411328","3517411583","CA","CAN","CANADA" -"3517411584","3517413119","US","USA","UNITED STATES" -"3517413120","3517414399","CA","CAN","CANADA" -"3517414400","3517414751","US","USA","UNITED STATES" -"3517414752","3517414767","CA","CAN","CANADA" -"3517414768","3517415167","US","USA","UNITED STATES" -"3517415168","3517415423","CA","CAN","CANADA" -"3517415424","3517416527","US","USA","UNITED STATES" -"3517416528","3517416543","CA","CAN","CANADA" -"3517416544","3517416655","US","USA","UNITED STATES" -"3517416656","3517416687","CA","CAN","CANADA" -"3517416688","3517416903","US","USA","UNITED STATES" -"3517416904","3517416911","CA","CAN","CANADA" -"3517416912","3517416959","US","USA","UNITED STATES" -"3517416960","3517417471","CA","CAN","CANADA" -"3517417472","3517417599","US","USA","UNITED STATES" -"3517417600","3517417631","CA","CAN","CANADA" -"3517417632","3517418303","US","USA","UNITED STATES" -"3517418304","3517418335","CA","CAN","CANADA" -"3517418336","3517419295","US","USA","UNITED STATES" -"3517419296","3517419391","CA","CAN","CANADA" -"3517419392","3517419423","US","USA","UNITED STATES" -"3517419424","3517419775","CA","CAN","CANADA" -"3517419776","3517420031","US","USA","UNITED STATES" -"3517420032","3517420159","CA","CAN","CANADA" -"3517420160","3517423871","US","USA","UNITED STATES" -"3517423872","3517424127","CA","CAN","CANADA" -"3517424128","3517424607","US","USA","UNITED STATES" -"3517424608","3517424623","CA","CAN","CANADA" -"3517424624","3517428991","US","USA","UNITED STATES" -"3517428992","3517429247","CA","CAN","CANADA" -"3517429248","3517429887","US","USA","UNITED STATES" -"3517429888","3517429919","CA","CAN","CANADA" -"3517429920","3517430223","US","USA","UNITED STATES" -"3517430224","3517430239","CA","CAN","CANADA" -"3517430240","3517432319","US","USA","UNITED STATES" -"3517432320","3517432575","CA","CAN","CANADA" -"3517432576","3517434111","US","USA","UNITED STATES" -"3517434112","3517434367","CA","CAN","CANADA" -"3517434368","3517434447","US","USA","UNITED STATES" -"3517434448","3517434455","CA","CAN","CANADA" -"3517434456","3517435583","US","USA","UNITED STATES" -"3517435584","3517435647","CA","CAN","CANADA" -"3517435648","3517438879","US","USA","UNITED STATES" -"3517438880","3517438911","KW","KWT","KUWAIT" -"3517438912","3517439423","US","USA","UNITED STATES" -"3517439424","3517439487","CA","CAN","CANADA" -"3517439488","3517439999","US","USA","UNITED STATES" -"3517440000","3517440255","CA","CAN","CANADA" -"3517440256","3517440511","US","USA","UNITED STATES" -"3517440512","3517441535","CA","CAN","CANADA" -"3517441536","3517441791","US","USA","UNITED STATES" -"3517441792","3517442047","CA","CAN","CANADA" -"3517442048","3517442527","US","USA","UNITED STATES" -"3517442528","3517442543","CA","CAN","CANADA" -"3517442544","3517442751","US","USA","UNITED STATES" -"3517442752","3517443071","CA","CAN","CANADA" -"3517443072","3517443327","US","USA","UNITED STATES" -"3517443328","3517443583","CA","CAN","CANADA" -"3517443584","3517443839","US","USA","UNITED STATES" -"3517443840","3517443903","CA","CAN","CANADA" -"3517443904","3517444031","US","USA","UNITED STATES" -"3517444032","3517444095","CA","CAN","CANADA" -"3517444096","3517445631","US","USA","UNITED STATES" -"3517445632","3517445887","CA","CAN","CANADA" -"3517445888","3517446015","US","USA","UNITED STATES" -"3517446016","3517446143","CA","CAN","CANADA" -"3517446144","3517447423","US","USA","UNITED STATES" -"3517447424","3517447679","CA","CAN","CANADA" -"3517447680","3517447743","US","USA","UNITED STATES" -"3517447744","3517447759","CA","CAN","CANADA" -"3517447760","3517447927","US","USA","UNITED STATES" -"3517447928","3517448191","CA","CAN","CANADA" -"3517448192","3517546495","US","USA","UNITED STATES" -"3517546496","3517562879","CA","CAN","CANADA" -"3517562880","3517596671","US","USA","UNITED STATES" -"3517596672","3517597183","SE","SWE","SWEDEN" -"3517597184","3517597695","US","USA","UNITED STATES" -"3517597696","3517598719","SE","SWE","SWEDEN" -"3517598720","3517599231","US","USA","UNITED STATES" -"3517599232","3517600767","SE","SWE","SWEDEN" -"3517600768","3517601279","US","USA","UNITED STATES" -"3517601280","3517602047","SE","SWE","SWEDEN" -"3517602048","3517602303","DE","DEU","GERMANY" -"3517602304","3517605119","SE","SWE","SWEDEN" -"3517605120","3517605375","US","USA","UNITED STATES" -"3517605376","3517605775","SE","SWE","SWEDEN" -"3517605776","3517605791","US","USA","UNITED STATES" -"3517605792","3517605887","SE","SWE","SWEDEN" -"3517605888","3517606143","US","USA","UNITED STATES" -"3517606144","3517606911","SE","SWE","SWEDEN" -"3517606912","3517607935","US","USA","UNITED STATES" -"3517607936","3517608191","DE","DEU","GERMANY" -"3517608192","3517608447","US","USA","UNITED STATES" -"3517608448","3517608703","GB","GBR","UNITED KINGDOM" -"3517608704","3517610495","SE","SWE","SWEDEN" -"3517610496","3517611263","IE","IRL","IRELAND" -"3517611264","3517612031","SE","SWE","SWEDEN" -"3517612032","3517644799","US","USA","UNITED STATES" -"3517644800","3517710335","CA","CAN","CANADA" -"3517710336","3517718527","US","USA","UNITED STATES" -"3517718528","3517726719","CA","CAN","CANADA" -"3517726720","3517979103","US","USA","UNITED STATES" -"3517979104","3517979111","CA","CAN","CANADA" -"3517979112","3517989487","US","USA","UNITED STATES" -"3517989488","3517989503","CA","CAN","CANADA" -"3517989504","3517989695","US","USA","UNITED STATES" -"3517989696","3517989727","CA","CAN","CANADA" -"3517989728","3517990023","US","USA","UNITED STATES" -"3517990024","3517990031","CA","CAN","CANADA" -"3517990032","3517990911","US","USA","UNITED STATES" -"3517990912","3517991423","CA","CAN","CANADA" -"3517991424","3518056447","US","USA","UNITED STATES" -"3518062592","3518066687","CA","CAN","CANADA" -"3518066688","3518078975","US","USA","UNITED STATES" -"3518083072","3518431231","US","USA","UNITED STATES" -"3518431232","3518439423","CA","CAN","CANADA" -"3518439424","3518463999","US","USA","UNITED STATES" -"3518464000","3518472191","CA","CAN","CANADA" -"3518472192","3518758911","US","USA","UNITED STATES" -"3518758912","3518758975","CY","CYP","CYPRUS" -"3518758976","3518759407","US","USA","UNITED STATES" -"3518759408","3518759423","CY","CYP","CYPRUS" -"3518759424","3518760511","US","USA","UNITED STATES" -"3518760512","3518760575","AU","AUS","AUSTRALIA" -"3518760576","3518760703","HU","HUN","HUNGARY" -"3518760704","3518762495","US","USA","UNITED STATES" -"3518762496","3518762751","GB","GBR","UNITED KINGDOM" -"3518762752","3518764031","US","USA","UNITED STATES" -"3518764032","3518764287","GB","GBR","UNITED KINGDOM" -"3518764288","3518764671","US","USA","UNITED STATES" -"3518764672","3518764703","NL","NLD","NETHERLANDS" -"3518764704","3518765311","US","USA","UNITED STATES" -"3518765312","3518765567","CA","CAN","CANADA" -"3518765568","3518766879","US","USA","UNITED STATES" -"3518766880","3518766911","TH","THA","THAILAND" -"3518766912","3518894439","US","USA","UNITED STATES" -"3518894440","3518894447","TR","TUR","TURKEY" -"3518894448","3518911743","US","USA","UNITED STATES" -"3518911744","3518911999","GB","GBR","UNITED KINGDOM" -"3518912000","3518912511","US","USA","UNITED STATES" -"3518912512","3518912767","IN","IND","INDIA" -"3518912768","3518929535","US","USA","UNITED STATES" -"3518929536","3518929599","CA","CAN","CANADA" -"3518929600","3519234047","US","USA","UNITED STATES" -"3519234048","3519250431","CA","CAN","CANADA" -"3519250432","3519340543","US","USA","UNITED STATES" -"3519340544","3519344639","CA","CAN","CANADA" -"3519344640","3519350079","US","USA","UNITED STATES" -"3519350080","3519350087","NL","NLD","NETHERLANDS" -"3519350088","3519352895","US","USA","UNITED STATES" -"3519352896","3519352903","NL","NLD","NETHERLANDS" -"3519352904","3519381503","US","USA","UNITED STATES" -"3519381504","3519397887","CA","CAN","CANADA" -"3519397888","3519406503","US","USA","UNITED STATES" -"3519406504","3519406511","CA","CAN","CANADA" -"3519406512","3519409295","US","USA","UNITED STATES" -"3519409296","3519409303","CA","CAN","CANADA" -"3519409304","3519428095","US","USA","UNITED STATES" -"3519428096","3519428351","RO","ROM","ROMANIA" -"3519428352","3519463423","US","USA","UNITED STATES" -"3519469568","3519676415","US","USA","UNITED STATES" -"3519676416","3519702319","CA","CAN","CANADA" -"3519702320","3519702327","US","USA","UNITED STATES" -"3519702328","3519709183","CA","CAN","CANADA" -"3519709184","3519709311","US","USA","UNITED STATES" -"3519709312","3519709343","CA","CAN","CANADA" -"3519709344","3519712447","US","USA","UNITED STATES" -"3519712448","3519712511","CA","CAN","CANADA" -"3519712512","3519715295","US","USA","UNITED STATES" -"3519715296","3519715327","GB","GBR","UNITED KINGDOM" -"3519715328","3519716863","US","USA","UNITED STATES" -"3519716864","3519716991","CA","CAN","CANADA" -"3519716992","3519741951","US","USA","UNITED STATES" -"3519758336","3519791103","US","USA","UNITED STATES" -"3519799296","3519873023","US","USA","UNITED STATES" -"3519873024","3519901695","CA","CAN","CANADA" -"3519901696","3519934463","US","USA","UNITED STATES" -"3519934464","3519938559","CA","CAN","CANADA" -"3519938560","3520020479","US","USA","UNITED STATES" -"3520020480","3520036863","CA","CAN","CANADA" -"3520036864","3520356351","US","USA","UNITED STATES" -"3520364544","3520397311","US","USA","UNITED STATES" -"3520401408","3520454655","US","USA","UNITED STATES" -"3520454656","3520462847","CA","CAN","CANADA" -"3520462848","3520626687","US","USA","UNITED STATES" -"3520626688","3520634879","CA","CAN","CANADA" -"3520634880","3520675839","US","USA","UNITED STATES" -"3520675840","3520692223","CA","CAN","CANADA" -"3520692224","3520716799","US","USA","UNITED STATES" -"3520724992","3520749871","US","USA","UNITED STATES" -"3520749872","3520749879","CA","CAN","CANADA" -"3520749880","3520937983","US","USA","UNITED STATES" -"3520937984","3520954367","CA","CAN","CANADA" -"3520954368","3520999423","US","USA","UNITED STATES" -"3520999424","3521003519","CA","CAN","CANADA" -"3521003520","3521028095","US","USA","UNITED STATES" -"3521028096","3521032191","CA","CAN","CANADA" -"3521032192","3521044479","US","USA","UNITED STATES" -"3521044480","3521048575","CA","CAN","CANADA" -"3521048576","3521049599","US","USA","UNITED STATES" -"3521052672","3521074687","US","USA","UNITED STATES" -"3521074688","3521074695","CA","CAN","CANADA" -"3521074696","3521074735","US","USA","UNITED STATES" -"3521074736","3521074751","AU","AUS","AUSTRALIA" -"3521074752","3521086207","US","USA","UNITED STATES" -"3521086208","3521086463","AU","AUS","AUSTRALIA" -"3521086464","3521098551","US","USA","UNITED STATES" -"3521098552","3521098559","MX","MEX","MEXICO" -"3521098560","3521103231","US","USA","UNITED STATES" -"3521103232","3521103263","CA","CAN","CANADA" -"3521103264","3521106527","US","USA","UNITED STATES" -"3521106528","3521106543","CA","CAN","CANADA" -"3521106544","3521186623","US","USA","UNITED STATES" -"3521186624","3521186687","AR","ARG","ARGENTINA" -"3521186688","3521192703","US","USA","UNITED STATES" -"3521192704","3521192735","FR","FRA","FRANCE" -"3521192736","3521249279","US","USA","UNITED STATES" -"3521249280","3521314815","CA","CAN","CANADA" -"3521314816","3521904639","US","USA","UNITED STATES" -"3521904640","3521921023","JM","JAM","JAMAICA" -"3521921024","3522101247","US","USA","UNITED STATES" -"3522101248","3522109439","CA","CAN","CANADA" -"3522109440","3522121983","US","USA","UNITED STATES" -"3522121984","3522122239","AW","ABW","ARUBA" -"3522122240","3522142207","US","USA","UNITED STATES" -"3522150400","3522174975","US","USA","UNITED STATES" -"3522174976","3522179071","BM","BMU","BERMUDA" -"3522179072","3522195455","US","USA","UNITED STATES" -"3522195456","3522199551","CA","CAN","CANADA" -"3522199552","3522854911","US","USA","UNITED STATES" -"3522854912","3522871295","CA","CAN","CANADA" -"3522871296","3522893823","US","USA","UNITED STATES" -"3522895872","3522937855","US","USA","UNITED STATES" -"3522937856","3522938367","GB","GBR","UNITED KINGDOM" -"3522938368","3523215359","US","USA","UNITED STATES" -"3523215360","3523223551","AU","AUS","AUSTRALIA" -"3523223552","3523231743","KR","KOR","REPUBLIC OF KOREA" -"3523231744","3523248127","AU","AUS","AUSTRALIA" -"3523248128","3523280895","HK","HKG","HONG KONG" -"3523280896","3523297279","TH","THA","THAILAND" -"3523297280","3523317759","PH","PHL","PHILIPPINES" -"3523317760","3523330047","JP","JPN","JAPAN" -"3523330048","3523342335","AU","AUS","AUSTRALIA" -"3523342336","3523346431","BD","BGD","BANGLADESH" -"3523346432","3523354623","CN","CHN","CHINA" -"3523354624","3523362815","KR","KOR","REPUBLIC OF KOREA" -"3523362816","3523379199","AU","AUS","AUSTRALIA" -"3523379200","3523395583","PK","PAK","PAKISTAN" -"3523395584","3523411967","JP","JPN","JAPAN" -"3523411968","3523477503","HK","HKG","HONG KONG" -"3523477504","3523493887","PH","PHL","PHILIPPINES" -"3523493888","3523497983","BD","BGD","BANGLADESH" -"3523497984","3523500031","AU","AUS","AUSTRALIA" -"3523500032","3523502079","KR","KOR","REPUBLIC OF KOREA" -"3523502080","3523510271","PH","PHL","PHILIPPINES" -"3523510272","3523518463","TH","THA","THAILAND" -"3523518464","3523526655","JP","JPN","JAPAN" -"3523526656","3523530751","US","USA","UNITED STATES" -"3523530752","3523532799","NZ","NZL","NEW ZEALAND" -"3523532800","3523534847","KR","KOR","REPUBLIC OF KOREA" -"3523534848","3523538943","AU","AUS","AUSTRALIA" -"3523538944","3523543039","JP","JPN","JAPAN" -"3523543040","3523551231","CN","CHN","CHINA" -"3523551232","3523553279","AU","AUS","AUSTRALIA" -"3523553280","3523555327","MY","MYS","MALAYSIA" -"3523555328","3523557375","NZ","NZL","NEW ZEALAND" -"3523557376","3523559423","AU","AUS","AUSTRALIA" -"3523559424","3523575807","PH","PHL","PHILIPPINES" -"3523575808","3523579903","AU","AUS","AUSTRALIA" -"3523579904","3523583999","CN","CHN","CHINA" -"3523584000","3523592479","HK","HKG","HONG KONG" -"3523592480","3523592495","YE","YEM","YEMEN" -"3523592496","3523592511","HK","HKG","HONG KONG" -"3523592512","3523592575","PK","PAK","PAKISTAN" -"3523592576","3523592703","LB","LBN","LEBANON" -"3523592704","3523592735","HK","HKG","HONG KONG" -"3523592736","3523592751","AF","AFG","AFGHANISTAN" -"3523592752","3523593215","HK","HKG","HONG KONG" -"3523593216","3523593231","KW","KWT","KUWAIT" -"3523593232","3523593239","AE","ARE","UNITED ARAB EMIRATES" -"3523593240","3523593279","HK","HKG","HONG KONG" -"3523593280","3523593343","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3523593344","3523593535","HK","HKG","HONG KONG" -"3523593536","3523593599","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3523593600","3523593743","HK","HKG","HONG KONG" -"3523593744","3523593751","IQ","IRQ","IRAQ" -"3523593752","3523593759","HK","HKG","HONG KONG" -"3523593760","3523593767","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3523593768","3523593775","HK","HKG","HONG KONG" -"3523593776","3523593791","IQ","IRQ","IRAQ" -"3523593792","3523593807","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3523593808","3523593823","HK","HKG","HONG KONG" -"3523593824","3523593951","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3523593952","3523593959","HK","HKG","HONG KONG" -"3523593960","3523593983","IQ","IRQ","IRAQ" -"3523593984","3523594239","PK","PAK","PAKISTAN" -"3523594240","3523595263","IN","IND","INDIA" -"3523595264","3523595391","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3523595392","3523595519","PK","PAK","PAKISTAN" -"3523595520","3523595583","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3523595584","3523595591","HK","HKG","HONG KONG" -"3523595592","3523595599","KE","KEN","KENYA" -"3523595600","3523595631","IQ","IRQ","IRAQ" -"3523595632","3523595647","LB","LBN","LEBANON" -"3523595648","3523596287","PK","PAK","PAKISTAN" -"3523596288","3523596351","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3523596352","3523596359","HK","HKG","HONG KONG" -"3523596360","3523596375","PK","PAK","PAKISTAN" -"3523596376","3523596415","HK","HKG","HONG KONG" -"3523596416","3523596671","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3523596672","3523596735","PK","PAK","PAKISTAN" -"3523596736","3523596751","IN","IND","INDIA" -"3523596752","3523596759","US","USA","UNITED STATES" -"3523596760","3523596767","HK","HKG","HONG KONG" -"3523596768","3523596775","IN","IND","INDIA" -"3523596776","3523596783","HK","HKG","HONG KONG" -"3523596784","3523596791","PK","PAK","PAKISTAN" -"3523596792","3523596815","HK","HKG","HONG KONG" -"3523596816","3523596831","IQ","IRQ","IRAQ" -"3523596832","3523596863","HK","HKG","HONG KONG" -"3523596864","3523596927","IQ","IRQ","IRAQ" -"3523596928","3523597127","PK","PAK","PAKISTAN" -"3523597128","3523597311","HK","HKG","HONG KONG" -"3523597312","3523597567","AE","ARE","UNITED ARAB EMIRATES" -"3523597568","3523597823","PK","PAK","PAKISTAN" -"3523597824","3523597887","AF","AFG","AFGHANISTAN" -"3523597888","3523597951","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"3523597952","3523597959","HK","HKG","HONG KONG" -"3523597960","3523597983","IQ","IRQ","IRAQ" -"3523597984","3523597991","KZ","KAZ","KAZAKHSTAN" -"3523597992","3523597999","US","USA","UNITED STATES" -"3523598000","3523598015","HK","HKG","HONG KONG" -"3523598016","3523598079","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3523598080","3523598207","LB","LBN","LEBANON" -"3523598208","3523598335","HK","HKG","HONG KONG" -"3523598336","3523598591","AE","ARE","UNITED ARAB EMIRATES" -"3523598592","3523598847","PK","PAK","PAKISTAN" -"3523598848","3523598911","HK","HKG","HONG KONG" -"3523598912","3523599103","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3523599104","3523599359","AE","ARE","UNITED ARAB EMIRATES" -"3523599360","3523599615","HK","HKG","HONG KONG" -"3523599616","3523599623","PK","PAK","PAKISTAN" -"3523599624","3523599631","HK","HKG","HONG KONG" -"3523599632","3523599647","PK","PAK","PAKISTAN" -"3523599648","3523599871","HK","HKG","HONG KONG" -"3523599872","3523600383","AE","ARE","UNITED ARAB EMIRATES" -"3523600384","3523600895","HK","HKG","HONG KONG" -"3523600896","3523601151","AF","AFG","AFGHANISTAN" -"3523601152","3523602431","HK","HKG","HONG KONG" -"3523602432","3523602559","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3523602560","3523602687","TR","TUR","TURKEY" -"3523602688","3523602879","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3523602880","3523602895","IQ","IRQ","IRAQ" -"3523602896","3523602903","HK","HKG","HONG KONG" -"3523602904","3523602943","IQ","IRQ","IRAQ" -"3523602944","3523603207","HK","HKG","HONG KONG" -"3523603208","3523603247","IQ","IRQ","IRAQ" -"3523603248","3523603255","HK","HKG","HONG KONG" -"3523603256","3523603263","IQ","IRQ","IRAQ" -"3523603264","3523603279","HK","HKG","HONG KONG" -"3523603280","3523603311","IQ","IRQ","IRAQ" -"3523603312","3523603319","HK","HKG","HONG KONG" -"3523603320","3523603343","IQ","IRQ","IRAQ" -"3523603344","3523603383","HK","HKG","HONG KONG" -"3523603384","3523603415","IQ","IRQ","IRAQ" -"3523603416","3523603455","HK","HKG","HONG KONG" -"3523603456","3523603503","IQ","IRQ","IRAQ" -"3523603504","3523603535","HK","HKG","HONG KONG" -"3523603536","3523603559","IQ","IRQ","IRAQ" -"3523603560","3523603575","HK","HKG","HONG KONG" -"3523603576","3523603583","IQ","IRQ","IRAQ" -"3523603584","3523603607","HK","HKG","HONG KONG" -"3523603608","3523603615","IQ","IRQ","IRAQ" -"3523603616","3523603647","HK","HKG","HONG KONG" -"3523603648","3523603663","IQ","IRQ","IRAQ" -"3523603664","3523603679","HK","HKG","HONG KONG" -"3523603680","3523603695","IQ","IRQ","IRAQ" -"3523603696","3523603703","HK","HKG","HONG KONG" -"3523603704","3523603711","IQ","IRQ","IRAQ" -"3523603712","3523604223","HK","HKG","HONG KONG" -"3523604224","3523604479","AE","ARE","UNITED ARAB EMIRATES" -"3523604480","3523604991","HK","HKG","HONG KONG" -"3523604992","3523605503","AE","ARE","UNITED ARAB EMIRATES" -"3523605504","3523606015","HK","HKG","HONG KONG" -"3523606016","3523606527","AE","ARE","UNITED ARAB EMIRATES" -"3523606528","3523608319","HK","HKG","HONG KONG" -"3523608320","3523608575","QA","QAT","QATAR" -"3523608576","3523674111","HK","HKG","HONG KONG" -"3523674112","3523682303","FJ","FJI","FIJI" -"3523682304","3523686399","NZ","NZL","NEW ZEALAND" -"3523686400","3523690495","AU","AUS","AUSTRALIA" -"3523690496","3523698687","IN","IND","INDIA" -"3523698688","3523698863","HK","HKG","HONG KONG" -"3523698864","3523698879","AU","AUS","AUSTRALIA" -"3523698880","3523698943","HK","HKG","HONG KONG" -"3523698944","3523698975","AU","AUS","AUSTRALIA" -"3523698976","3523699007","HK","HKG","HONG KONG" -"3523699008","3523699071","AU","AUS","AUSTRALIA" -"3523699072","3523699199","HK","HKG","HONG KONG" -"3523699200","3523699711","US","USA","UNITED STATES" -"3523699712","3523700223","AU","AUS","AUSTRALIA" -"3523700224","3523700287","US","USA","UNITED STATES" -"3523700288","3523700351","AU","AUS","AUSTRALIA" -"3523700352","3523700415","US","USA","UNITED STATES" -"3523700416","3523700671","AU","AUS","AUSTRALIA" -"3523700672","3523700679","HK","HKG","HONG KONG" -"3523700680","3523700735","AU","AUS","AUSTRALIA" -"3523700736","3523701759","HK","HKG","HONG KONG" -"3523701760","3523702783","AU","AUS","AUSTRALIA" -"3523702784","3523702799","SG","SGP","SINGAPORE" -"3523702800","3523702807","SN","SEN","SENEGAL" -"3523702808","3523702847","SG","SGP","SINGAPORE" -"3523702848","3523702871","AU","AUS","AUSTRALIA" -"3523702872","3523702911","SG","SGP","SINGAPORE" -"3523702912","3523703039","AU","AUS","AUSTRALIA" -"3523703040","3523703103","SG","SGP","SINGAPORE" -"3523703104","3523704703","AU","AUS","AUSTRALIA" -"3523704704","3523704719","SG","SGP","SINGAPORE" -"3523704720","3523704751","AU","AUS","AUSTRALIA" -"3523704752","3523704783","SG","SGP","SINGAPORE" -"3523704784","3523704791","AU","AUS","AUSTRALIA" -"3523704792","3523704831","SG","SGP","SINGAPORE" -"3523704832","3523704839","HK","HKG","HONG KONG" -"3523704840","3523707135","AU","AUS","AUSTRALIA" -"3523707136","3523707903","GB","GBR","UNITED KINGDOM" -"3523707904","3523713279","AU","AUS","AUSTRALIA" -"3523713280","3523713535","NL","NLD","NETHERLANDS" -"3523713536","3523714943","AU","AUS","AUSTRALIA" -"3523714944","3523715007","GB","GBR","UNITED KINGDOM" -"3523715008","3523723263","AU","AUS","AUSTRALIA" -"3523723264","3523725311","US","USA","UNITED STATES" -"3523725312","3523731455","AU","AUS","AUSTRALIA" -"3523731456","3523731503","JP","JPN","JAPAN" -"3523731504","3523731519","AU","AUS","AUSTRALIA" -"3523731520","3523731567","JP","JPN","JAPAN" -"3523731568","3523731583","AU","AUS","AUSTRALIA" -"3523731584","3523731615","JP","JPN","JAPAN" -"3523731616","3523737599","AU","AUS","AUSTRALIA" -"3523737600","3523738111","US","USA","UNITED STATES" -"3523738112","3523739135","AU","AUS","AUSTRALIA" -"3523739136","3523739455","JP","JPN","JAPAN" -"3523739456","3523739519","AU","AUS","AUSTRALIA" -"3523739520","3523739551","JP","JPN","JAPAN" -"3523739552","3523739575","AU","AUS","AUSTRALIA" -"3523739576","3523739647","JP","JPN","JAPAN" -"3523739648","3524001791","AU","AUS","AUSTRALIA" -"3524001792","3524132863","CN","CHN","CHINA" -"3524132864","3524145151","PH","PHL","PHILIPPINES" -"3524145152","3524149247","JP","JPN","JAPAN" -"3524149248","3524157439","CN","CHN","CHINA" -"3524157440","3524161535","AU","AUS","AUSTRALIA" -"3524161536","3524247551","CN","CHN","CHINA" -"3524247552","3524263935","AU","AUS","AUSTRALIA" -"3524263936","3524266495","PH","PHL","PHILIPPINES" -"3524266496","3524266751","SG","SGP","SINGAPORE" -"3524266752","3524274175","PH","PHL","PHILIPPINES" -"3524274176","3524274431","SG","SGP","SINGAPORE" -"3524274432","3524296703","PH","PHL","PHILIPPINES" -"3524296704","3524313087","CN","CHN","CHINA" -"3524313088","3524329471","KR","KOR","REPUBLIC OF KOREA" -"3524329472","3524362239","TW","TWN","TAIWAN" -"3524362240","3524395007","HK","HKG","HONG KONG" -"3524395008","3524444159","IN","IND","INDIA" -"3524444160","3524460543","AU","AUS","AUSTRALIA" -"3524460544","3524526079","MY","MYS","MALAYSIA" -"3524526080","3524591615","JP","JPN","JAPAN" -"3524591616","3524722687","CN","CHN","CHINA" -"3524722688","3524730879","SG","SGP","SINGAPORE" -"3524730880","3524739071","CN","CHN","CHINA" -"3524739072","3524743167","ID","IDN","INDONESIA" -"3524743168","3524747263","MP","MNP","NORTHERN MARIANA ISLANDS" -"3524747264","3524755455","PH","PHL","PHILIPPINES" -"3524755456","3524763647","AU","AUS","AUSTRALIA" -"3524763648","3524781791","PH","PHL","PHILIPPINES" -"3524781792","3524781823","SG","SGP","SINGAPORE" -"3524781824","3524788223","PH","PHL","PHILIPPINES" -"3524788224","3524853759","SG","SGP","SINGAPORE" -"3524853760","3525300739","CN","CHN","CHINA" -"3525300740","3525300743","US","USA","UNITED STATES" -"3525300744","3526361087","CN","CHN","CHINA" -"3526361088","3526393855","NZ","NZL","NEW ZEALAND" -"3526393856","3526395903","JP","JPN","JAPAN" -"3526395904","3526397951","AU","AUS","AUSTRALIA" -"3526397952","3526402047","MY","MYS","MALAYSIA" -"3526402048","3526410239","NZ","NZL","NEW ZEALAND" -"3526410240","3526414335","MY","MYS","MALAYSIA" -"3526414336","3526416383","AU","AUS","AUSTRALIA" -"3526416384","3526418431","MY","MYS","MALAYSIA" -"3526418432","3526426623","JP","JPN","JAPAN" -"3526426624","3526557695","AU","AUS","AUSTRALIA" -"3526557696","3526754303","CN","CHN","CHINA" -"3526754304","3526885375","NZ","NZL","NEW ZEALAND" -"3526885376","3526893567","PK","PAK","PAKISTAN" -"3526893568","3526897663","NZ","NZL","NEW ZEALAND" -"3526897664","3526901759","HK","HKG","HONG KONG" -"3526901760","3526909951","AU","AUS","AUSTRALIA" -"3526909952","3526918143","IN","IND","INDIA" -"3526918144","3526922239","SG","SGP","SINGAPORE" -"3526922240","3526926335","AU","AUS","AUSTRALIA" -"3526926336","3526934527","JP","JPN","JAPAN" -"3526934528","3526942719","CN","CHN","CHINA" -"3526942720","3526950911","AU","AUS","AUSTRALIA" -"3526950912","3527004159","JP","JPN","JAPAN" -"3527004160","3527008255","ID","IDN","INDONESIA" -"3527008256","3527016447","KR","KOR","REPUBLIC OF KOREA" -"3527016448","3527933951","TW","TWN","TAIWAN" -"3527933952","3528392703","CN","CHN","CHINA" -"3528392704","3528396799","JP","JPN","JAPAN" -"3528396800","3528400895","AU","AUS","AUSTRALIA" -"3528400896","3528404991","JP","JPN","JAPAN" -"3528404992","3528407039","NZ","NZL","NEW ZEALAND" -"3528407040","3528409087","AU","AUS","AUSTRALIA" -"3528409088","3528425471","CN","CHN","CHINA" -"3528425472","3528445951","JP","JPN","JAPAN" -"3528445952","3528450047","ID","IDN","INDONESIA" -"3528450048","3528458239","CN","CHN","CHINA" -"3528458240","3528464895","AU","AUS","AUSTRALIA" -"3528464896","3528465151","HK","HKG","HONG KONG" -"3528465152","3528474623","AU","AUS","AUSTRALIA" -"3528474624","3528482815","TW","TWN","TAIWAN" -"3528482816","3528491007","KR","KOR","REPUBLIC OF KOREA" -"3528491008","3528505007","AU","AUS","AUSTRALIA" -"3528505008","3528505023","HK","HKG","HONG KONG" -"3528505024","3528506543","AU","AUS","AUSTRALIA" -"3528506544","3528506559","NZ","NZL","NEW ZEALAND" -"3528506560","3528507391","AU","AUS","AUSTRALIA" -"3528507392","3528589311","JP","JPN","JAPAN" -"3528589312","3528720383","CN","CHN","CHINA" -"3528720384","3528785919","AU","AUS","AUSTRALIA" -"3528785920","3528851455","TW","TWN","TAIWAN" -"3528851456","3528884223","NZ","NZL","NEW ZEALAND" -"3528884224","3528908799","TH","THA","THAILAND" -"3528908800","3528912895","VN","VNM","VIET NAM" -"3528912896","3528933375","AU","AUS","AUSTRALIA" -"3528933376","3528949759","JP","JPN","JAPAN" -"3528949760","3528966143","CN","CHN","CHINA" -"3528966144","3528974335","KR","KOR","REPUBLIC OF KOREA" -"3528974336","3528978431","JP","JPN","JAPAN" -"3528978432","3528982527","HK","HKG","HONG KONG" -"3528982528","3529011135","JP","JPN","JAPAN" -"3529011136","3529011151","NZ","NZL","NEW ZEALAND" -"3529011152","3529056255","JP","JPN","JAPAN" -"3529056256","3529064447","IN","IND","INDIA" -"3529064448","3529065247","HK","HKG","HONG KONG" -"3529065248","3529065255","ID","IDN","INDONESIA" -"3529065256","3529065343","HK","HKG","HONG KONG" -"3529065344","3529065347","PG","PNG","PAPUA NEW GUINEA" -"3529065348","3529065359","HK","HKG","HONG KONG" -"3529065360","3529065367","PG","PNG","PAPUA NEW GUINEA" -"3529065368","3529065743","HK","HKG","HONG KONG" -"3529065744","3529065759","PK","PAK","PAKISTAN" -"3529065760","3529065791","AF","AFG","AFGHANISTAN" -"3529065792","3529065823","PH","PHL","PHILIPPINES" -"3529065824","3529065839","MY","MYS","MALAYSIA" -"3529065840","3529065863","AF","AFG","AFGHANISTAN" -"3529065864","3529065871","HK","HKG","HONG KONG" -"3529065872","3529065879","AF","AFG","AFGHANISTAN" -"3529065880","3529065887","HK","HKG","HONG KONG" -"3529065888","3529065903","AF","AFG","AFGHANISTAN" -"3529065904","3529066239","HK","HKG","HONG KONG" -"3529066240","3529066287","AF","AFG","AFGHANISTAN" -"3529066288","3529066487","HK","HKG","HONG KONG" -"3529066488","3529066503","AF","AFG","AFGHANISTAN" -"3529066504","3529066527","HK","HKG","HONG KONG" -"3529066528","3529066543","AF","AFG","AFGHANISTAN" -"3529066544","3529066551","HK","HKG","HONG KONG" -"3529066552","3529066567","AF","AFG","AFGHANISTAN" -"3529066568","3529066575","HK","HKG","HONG KONG" -"3529066576","3529066583","AF","AFG","AFGHANISTAN" -"3529066584","3529066631","HK","HKG","HONG KONG" -"3529066632","3529066639","AF","AFG","AFGHANISTAN" -"3529066640","3529066647","HK","HKG","HONG KONG" -"3529066648","3529066655","AF","AFG","AFGHANISTAN" -"3529066656","3529066663","HK","HKG","HONG KONG" -"3529066664","3529066679","PK","PAK","PAKISTAN" -"3529066680","3529066703","HK","HKG","HONG KONG" -"3529066704","3529066711","AF","AFG","AFGHANISTAN" -"3529066712","3529066735","HK","HKG","HONG KONG" -"3529066736","3529066743","AF","AFG","AFGHANISTAN" -"3529066744","3529067007","HK","HKG","HONG KONG" -"3529067008","3529067255","AF","AFG","AFGHANISTAN" -"3529067256","3529067263","HK","HKG","HONG KONG" -"3529067264","3529067303","PK","PAK","PAKISTAN" -"3529067304","3529067311","AF","AFG","AFGHANISTAN" -"3529067312","3529067319","PK","PAK","PAKISTAN" -"3529067320","3529067431","AF","AFG","AFGHANISTAN" -"3529067432","3529067439","HK","HKG","HONG KONG" -"3529067440","3529067463","AF","AFG","AFGHANISTAN" -"3529067464","3529067471","PK","PAK","PAKISTAN" -"3529067472","3529067487","HK","HKG","HONG KONG" -"3529067488","3529067503","AF","AFG","AFGHANISTAN" -"3529067504","3529067519","HK","HKG","HONG KONG" -"3529067520","3529067535","AF","AFG","AFGHANISTAN" -"3529067536","3529067543","HK","HKG","HONG KONG" -"3529067544","3529067551","AF","AFG","AFGHANISTAN" -"3529067552","3529067559","HK","HKG","HONG KONG" -"3529067560","3529067575","AF","AFG","AFGHANISTAN" -"3529067576","3529067583","HK","HKG","HONG KONG" -"3529067584","3529067599","AF","AFG","AFGHANISTAN" -"3529067600","3529067607","HK","HKG","HONG KONG" -"3529067608","3529067631","AF","AFG","AFGHANISTAN" -"3529067632","3529067639","HK","HKG","HONG KONG" -"3529067640","3529067655","AF","AFG","AFGHANISTAN" -"3529067656","3529067663","HK","HKG","HONG KONG" -"3529067664","3529067703","AF","AFG","AFGHANISTAN" -"3529067704","3529067711","PK","PAK","PAKISTAN" -"3529067712","3529067727","HK","HKG","HONG KONG" -"3529067728","3529067751","AF","AFG","AFGHANISTAN" -"3529067752","3529067759","HK","HKG","HONG KONG" -"3529067760","3529067775","AF","AFG","AFGHANISTAN" -"3529067776","3529067799","HK","HKG","HONG KONG" -"3529067800","3529067807","AF","AFG","AFGHANISTAN" -"3529067808","3529068031","HK","HKG","HONG KONG" -"3529068032","3529068047","AF","AFG","AFGHANISTAN" -"3529068048","3529068063","HK","HKG","HONG KONG" -"3529068064","3529068087","AF","AFG","AFGHANISTAN" -"3529068088","3529068103","HK","HKG","HONG KONG" -"3529068104","3529068111","AF","AFG","AFGHANISTAN" -"3529068112","3529068127","PK","PAK","PAKISTAN" -"3529068128","3529068159","AF","AFG","AFGHANISTAN" -"3529068160","3529068175","HK","HKG","HONG KONG" -"3529068176","3529068207","AF","AFG","AFGHANISTAN" -"3529068208","3529068239","HK","HKG","HONG KONG" -"3529068240","3529068255","AF","AFG","AFGHANISTAN" -"3529068256","3529068271","HK","HKG","HONG KONG" -"3529068272","3529068279","MM","MMR","MYANMAR" -"3529068280","3529068303","AF","AFG","AFGHANISTAN" -"3529068304","3529068319","HK","HKG","HONG KONG" -"3529068320","3529068335","AF","AFG","AFGHANISTAN" -"3529068336","3529068351","HK","HKG","HONG KONG" -"3529068352","3529068415","AF","AFG","AFGHANISTAN" -"3529068416","3529068431","HK","HKG","HONG KONG" -"3529068432","3529068471","AF","AFG","AFGHANISTAN" -"3529068472","3529068487","HK","HKG","HONG KONG" -"3529068488","3529068543","AF","AFG","AFGHANISTAN" -"3529068544","3529068551","PK","PAK","PAKISTAN" -"3529068552","3529068559","AF","AFG","AFGHANISTAN" -"3529068560","3529068575","HK","HKG","HONG KONG" -"3529068576","3529068599","AF","AFG","AFGHANISTAN" -"3529068600","3529068607","HK","HKG","HONG KONG" -"3529068608","3529068615","AF","AFG","AFGHANISTAN" -"3529068616","3529068623","HK","HKG","HONG KONG" -"3529068624","3529068647","AF","AFG","AFGHANISTAN" -"3529068648","3529068655","HK","HKG","HONG KONG" -"3529068656","3529068663","AF","AFG","AFGHANISTAN" -"3529068664","3529068671","HK","HKG","HONG KONG" -"3529068672","3529068727","AF","AFG","AFGHANISTAN" -"3529068728","3529068735","HK","HKG","HONG KONG" -"3529068736","3529068743","AF","AFG","AFGHANISTAN" -"3529068744","3529068799","HK","HKG","HONG KONG" -"3529068800","3529068815","AF","AFG","AFGHANISTAN" -"3529068816","3529068823","HK","HKG","HONG KONG" -"3529068824","3529068831","PK","PAK","PAKISTAN" -"3529068832","3529068895","HK","HKG","HONG KONG" -"3529068896","3529068911","AF","AFG","AFGHANISTAN" -"3529068912","3529068919","HK","HKG","HONG KONG" -"3529068920","3529068943","AF","AFG","AFGHANISTAN" -"3529068944","3529068959","HK","HKG","HONG KONG" -"3529068960","3529068967","AF","AFG","AFGHANISTAN" -"3529068968","3529068975","HK","HKG","HONG KONG" -"3529068976","3529069007","AF","AFG","AFGHANISTAN" -"3529069008","3529069023","HK","HKG","HONG KONG" -"3529069024","3529069039","AF","AFG","AFGHANISTAN" -"3529069040","3529069311","HK","HKG","HONG KONG" -"3529069312","3529069567","BD","BGD","BANGLADESH" -"3529069568","3529070335","HK","HKG","HONG KONG" -"3529070336","3529070591","AF","AFG","AFGHANISTAN" -"3529070592","3529071887","HK","HKG","HONG KONG" -"3529071888","3529071903","AF","AFG","AFGHANISTAN" -"3529071904","3529071935","HK","HKG","HONG KONG" -"3529071936","3529071999","US","USA","UNITED STATES" -"3529072000","3529072063","HK","HKG","HONG KONG" -"3529072064","3529072095","BD","BGD","BANGLADESH" -"3529072096","3529072127","AF","AFG","AFGHANISTAN" -"3529072128","3529072639","HK","HKG","HONG KONG" -"3529072640","3529080831","JP","JPN","JAPAN" -"3529080832","3529089023","AU","AUS","AUSTRALIA" -"3529089024","3529097215","KR","KOR","REPUBLIC OF KOREA" -"3529097216","3529113599","JP","JPN","JAPAN" -"3529113600","3531603967","KR","KOR","REPUBLIC OF KOREA" -"3531603968","3534749695","JP","JPN","JAPAN" -"3534749696","3534757887","HK","HKG","HONG KONG" -"3534757888","3534757951","IN","IND","INDIA" -"3534757952","3534757983","HK","HKG","HONG KONG" -"3534757984","3534761023","IN","IND","INDIA" -"3534761024","3534761119","HK","HKG","HONG KONG" -"3534761120","3534761983","IN","IND","INDIA" -"3534761984","3534880767","HK","HKG","HONG KONG" -"3534880768","3535273983","KR","KOR","REPUBLIC OF KOREA" -"3535273984","3535339519","HK","HKG","HONG KONG" -"3535339520","3535355903","NZ","NZL","NEW ZEALAND" -"3535355904","3535372287","AU","AUS","AUSTRALIA" -"3535372288","3535380479","JP","JPN","JAPAN" -"3535380480","3535388671","PH","PHL","PHILIPPINES" -"3535388672","3535405055","CN","CHN","CHINA" -"3535405056","3535480703","MY","MYS","MALAYSIA" -"3535480704","3535480831","TH","THA","THAILAND" -"3535480832","3535536127","MY","MYS","MALAYSIA" -"3535536128","3535798271","JP","JPN","JAPAN" -"3535798272","3535814655","TW","TWN","TAIWAN" -"3535814656","3535822847","KR","KOR","REPUBLIC OF KOREA" -"3535822848","3535831039","CN","CHN","CHINA" -"3535831040","3535863807","TW","TWN","TAIWAN" -"3535863808","3535880191","SG","SGP","SINGAPORE" -"3535880192","3535896575","JP","JPN","JAPAN" -"3535896576","3535929343","AU","AUS","AUSTRALIA" -"3535929344","3535994879","JP","JPN","JAPAN" -"3535994880","3536060415","MY","MYS","MALAYSIA" -"3536060416","3536322559","JP","JPN","JAPAN" -"3536322560","3536551935","TW","TWN","TAIWAN" -"3536551936","3536568319","TH","THA","THAILAND" -"3536568320","3536584703","JP","JPN","JAPAN" -"3536584704","3536846847","KR","KOR","REPUBLIC OF KOREA" -"3536846848","3536928767","TW","TWN","TAIWAN" -"3536928768","3536945151","HK","HKG","HONG KONG" -"3536945152","3536977919","TW","TWN","TAIWAN" -"3536977920","3537010687","IN","IND","INDIA" -"3537010688","3537027071","ID","IDN","INDONESIA" -"3537027072","3537043455","KR","KOR","REPUBLIC OF KOREA" -"3537043456","3537047551","AU","AUS","AUSTRALIA" -"3537047552","3537049599","ID","IDN","INDONESIA" -"3537049600","3537051647","HK","HKG","HONG KONG" -"3537051648","3537057791","JP","JPN","JAPAN" -"3537057792","3537059839","AU","AUS","AUSTRALIA" -"3537059840","3537068031","KR","KOR","REPUBLIC OF KOREA" -"3537068032","3537076223","VN","VNM","VIET NAM" -"3537076224","3537174527","IN","IND","INDIA" -"3537174528","3537190911","TH","THA","THAILAND" -"3537190912","3537240063","PH","PHL","PHILIPPINES" -"3537240064","3537305599","IN","IND","INDIA" -"3537305600","3537371135","AU","AUS","AUSTRALIA" -"3537371136","3537895423","KR","KOR","REPUBLIC OF KOREA" -"3537895424","3538943999","JP","JPN","JAPAN" -"3538944000","3539271679","TW","TWN","TAIWAN" -"3539271680","3539304447","VN","VNM","VIET NAM" -"3539304448","3539337215","HK","HKG","HONG KONG" -"3539337216","3539353599","NZ","NZL","NEW ZEALAND" -"3539353600","3539402751","TH","THA","THAILAND" -"3539402752","3539435519","JP","JPN","JAPAN" -"3539435520","3539468287","AU","AUS","AUSTRALIA" -"3539468288","3541303295","JP","JPN","JAPAN" -"3541303296","3541565439","TW","TWN","TAIWAN" -"3541565440","3541696511","MY","MYS","MALAYSIA" -"3541696512","3542089727","AU","AUS","AUSTRALIA" -"3542089728","3544186879","KR","KOR","REPUBLIC OF KOREA" -"3544186880","3544711167","CN","CHN","CHINA" -"3544711168","3545235455","TW","TWN","TAIWAN" -"3545235456","3546808319","CN","CHN","CHINA" -"3546808320","3547856895","KR","KOR","REPUBLIC OF KOREA" -"3547856896","3548905471","JP","JPN","JAPAN" -"3548905472","3551002623","CN","CHN","CHINA" -"3551002624","3554544607","KR","KOR","REPUBLIC OF KOREA" -"3554544608","3554544639","DE","DEU","GERMANY" -"3554544640","3556769791","KR","KOR","REPUBLIC OF KOREA" -"3556769792","3556774399","DE","DEU","GERMANY" -"3556786176","3556794367","RU","RUS","RUSSIAN FEDERATION" -"3556794368","3556795647","ES","ESP","SPAIN" -"3556795648","3556795679","IT","ITA","ITALY" -"3556795680","3556797767","ES","ESP","SPAIN" -"3556797768","3556797775","GB","GBR","UNITED KINGDOM" -"3556797776","3556797839","ES","ESP","SPAIN" -"3556797840","3556797847","PT","PRT","PORTUGAL" -"3556797848","3556800799","ES","ESP","SPAIN" -"3556800800","3556800807","FR","FRA","FRANCE" -"3556800808","3556802559","ES","ESP","SPAIN" -"3556810752","3556818943","PT","PRT","PORTUGAL" -"3556818944","3556827135","MD","MDA","REPUBLIC OF MOLDOVA" -"3556827136","3556843519","NL","NLD","NETHERLANDS" -"3556843520","3556847935","DE","DEU","GERMANY" -"3556847936","3556847967","US","USA","UNITED STATES" -"3556847968","3556851711","DE","DEU","GERMANY" -"3556851712","3556868095","UA","UKR","UKRAINE" -"3556868096","3556876287","GB","GBR","UNITED KINGDOM" -"3556876288","3556884479","NL","NLD","NETHERLANDS" -"3556884480","3556900863","RU","RUS","RUSSIAN FEDERATION" -"3556900864","3556909055","GB","GBR","UNITED KINGDOM" -"3556909056","3556925439","DE","DEU","GERMANY" -"3556925440","3556933631","PL","POL","POLAND" -"3556933632","3556941823","UA","UKR","UKRAINE" -"3556941824","3556950015","IE","IRL","IRELAND" -"3556950016","3556958207","TR","TUR","TURKEY" -"3556958208","3556966399","KG","KGZ","KYRGYZSTAN" -"3556966400","3556974591","SE","SWE","SWEDEN" -"3556974592","3556982783","ES","ESP","SPAIN" -"3556982784","3556984623","DE","DEU","GERMANY" -"3556984624","3556984631","FR","FRA","FRANCE" -"3556984632","3556990975","DE","DEU","GERMANY" -"3556990976","3556999167","UA","UKR","UKRAINE" -"3556999168","3557007359","RU","RUS","RUSSIAN FEDERATION" -"3557007360","3557015551","GB","GBR","UNITED KINGDOM" -"3557015552","3557023743","DE","DEU","GERMANY" -"3557023744","3557023879","BE","BEL","BELGIUM" -"3557023880","3557023903","GB","GBR","UNITED KINGDOM" -"3557023904","3557023999","BE","BEL","BELGIUM" -"3557024000","3557024255","GB","GBR","UNITED KINGDOM" -"3557024256","3557025279","BE","BEL","BELGIUM" -"3557025280","3557025791","GB","GBR","UNITED KINGDOM" -"3557025792","3557026047","BE","BEL","BELGIUM" -"3557026048","3557026303","GB","GBR","UNITED KINGDOM" -"3557026304","3557026815","BE","BEL","BELGIUM" -"3557026816","3557027071","GB","GBR","UNITED KINGDOM" -"3557027072","3557027839","BE","BEL","BELGIUM" -"3557027840","3557027863","GB","GBR","UNITED KINGDOM" -"3557027864","3557027871","BE","BEL","BELGIUM" -"3557027872","3557027887","GB","GBR","UNITED KINGDOM" -"3557027888","3557028031","BE","BEL","BELGIUM" -"3557028032","3557028063","GB","GBR","UNITED KINGDOM" -"3557028064","3557028095","BE","BEL","BELGIUM" -"3557028096","3557028351","GB","GBR","UNITED KINGDOM" -"3557028352","3557028735","BE","BEL","BELGIUM" -"3557028736","3557028799","GB","GBR","UNITED KINGDOM" -"3557028800","3557028911","BE","BEL","BELGIUM" -"3557028912","3557028927","GB","GBR","UNITED KINGDOM" -"3557028928","3557029059","BE","BEL","BELGIUM" -"3557029060","3557029071","GB","GBR","UNITED KINGDOM" -"3557029072","3557029567","BE","BEL","BELGIUM" -"3557029568","3557029631","GB","GBR","UNITED KINGDOM" -"3557029632","3557029887","BE","BEL","BELGIUM" -"3557029888","3557029951","GB","GBR","UNITED KINGDOM" -"3557029952","3557030079","BE","BEL","BELGIUM" -"3557030080","3557030143","GB","GBR","UNITED KINGDOM" -"3557030144","3557030719","BE","BEL","BELGIUM" -"3557030720","3557030751","GB","GBR","UNITED KINGDOM" -"3557030752","3557030767","BE","BEL","BELGIUM" -"3557030768","3557030783","GB","GBR","UNITED KINGDOM" -"3557030784","3557030975","BE","BEL","BELGIUM" -"3557030976","3557031039","GB","GBR","UNITED KINGDOM" -"3557031040","3557031423","BE","BEL","BELGIUM" -"3557031424","3557031679","GB","GBR","UNITED KINGDOM" -"3557031680","3557031807","BE","BEL","BELGIUM" -"3557031808","3557031935","GB","GBR","UNITED KINGDOM" -"3557031936","3557033575","IT","ITA","ITALY" -"3557033576","3557033583","GB","GBR","UNITED KINGDOM" -"3557033584","3557040127","IT","ITA","ITALY" -"3557040128","3557048319","NO","NOR","NORWAY" -"3557048320","3557056511","CH","CHE","SWITZERLAND" -"3557056512","3557064703","ES","ESP","SPAIN" -"3557064704","3557072895","CZ","CZE","CZECH REPUBLIC" -"3557072896","3557081087","DE","DEU","GERMANY" -"3557081088","3557086015","NL","NLD","NETHERLANDS" -"3557086016","3557086047","DE","DEU","GERMANY" -"3557086048","3557086079","GB","GBR","UNITED KINGDOM" -"3557086080","3557086719","NL","NLD","NETHERLANDS" -"3557086720","3557086783","CH","CHE","SWITZERLAND" -"3557086784","3557086847","IT","ITA","ITALY" -"3557086848","3557089279","NL","NLD","NETHERLANDS" -"3557089280","3557105663","DE","DEU","GERMANY" -"3557105664","3557113855","BG","BGR","BULGARIA" -"3557113856","3557130239","RU","RUS","RUSSIAN FEDERATION" -"3557130240","3557138431","BG","BGR","BULGARIA" -"3557138432","3557146623","RU","RUS","RUSSIAN FEDERATION" -"3557146624","3557154815","SK","SVK","SLOVAKIA" -"3557154816","3557171199","RU","RUS","RUSSIAN FEDERATION" -"3557171200","3557172991","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3557172992","3557173503","IQ","IRQ","IRAQ" -"3557173504","3557173631","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3557173632","3557173695","IQ","IRQ","IRAQ" -"3557173696","3557173703","AE","ARE","UNITED ARAB EMIRATES" -"3557173704","3557173759","IT","ITA","ITALY" -"3557173760","3557174015","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3557174016","3557174527","IT","ITA","ITALY" -"3557174528","3557174783","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3557174784","3557175039","AE","ARE","UNITED ARAB EMIRATES" -"3557175040","3557176063","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3557176064","3557176319","IT","ITA","ITALY" -"3557176320","3557176619","NE","NER","NIGER" -"3557176620","3557176831","IT","ITA","ITALY" -"3557176832","3557177023","IQ","IRQ","IRAQ" -"3557177024","3557177199","IT","ITA","ITALY" -"3557177200","3557177215","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3557177216","3557178367","IT","ITA","ITALY" -"3557178368","3557179391","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3557179392","3557213351","DE","DEU","GERMANY" -"3557213352","3557213359","US","USA","UNITED STATES" -"3557213360","3557228543","DE","DEU","GERMANY" -"3557228544","3557236735","EE","EST","ESTONIA" -"3557236736","3557244927","ES","ESP","SPAIN" -"3557244928","3557253119","IT","ITA","ITALY" -"3557253120","3557261311","RU","RUS","RUSSIAN FEDERATION" -"3557261312","3557277695","DE","DEU","GERMANY" -"3557285888","3557294079","RU","RUS","RUSSIAN FEDERATION" -"3557294080","3557302271","DE","DEU","GERMANY" -"3557302272","3557310463","UA","UKR","UKRAINE" -"3557310464","3557326847","ES","ESP","SPAIN" -"3557326848","3557335039","DE","DEU","GERMANY" -"3557335040","3557335391","BE","BEL","BELGIUM" -"3557335456","3557335535","BE","BEL","BELGIUM" -"3557335552","3557335951","BE","BEL","BELGIUM" -"3557335952","3557335967","LU","LUX","LUXEMBOURG" -"3557335968","3557336191","BE","BEL","BELGIUM" -"3557336256","3557336639","BE","BEL","BELGIUM" -"3557336648","3557336655","BE","BEL","BELGIUM" -"3557338112","3557338367","BE","BEL","BELGIUM" -"3557338496","3557339175","BE","BEL","BELGIUM" -"3557339184","3557339199","BE","BEL","BELGIUM" -"3557339216","3557339223","BE","BEL","BELGIUM" -"3557339232","3557339267","BE","BEL","BELGIUM" -"3557339272","3557340159","BE","BEL","BELGIUM" -"3557340192","3557340927","BE","BEL","BELGIUM" -"3557341184","3557341455","BE","BEL","BELGIUM" -"3557341472","3557341527","BE","BEL","BELGIUM" -"3557341536","3557341551","BE","BEL","BELGIUM" -"3557341560","3557341567","BE","BEL","BELGIUM" -"3557341664","3557341679","BE","BEL","BELGIUM" -"3557341952","3557342479","BE","BEL","BELGIUM" -"3557342496","3557342511","BE","BEL","BELGIUM" -"3557342528","3557342543","BE","BEL","BELGIUM" -"3557342560","3557342623","BE","BEL","BELGIUM" -"3557342720","3557343231","BE","BEL","BELGIUM" -"3557343232","3557351423","DE","DEU","GERMANY" -"3557351424","3557359615","RU","RUS","RUSSIAN FEDERATION" -"3557359616","3557365439","GB","GBR","UNITED KINGDOM" -"3557365440","3557365503","JE","JEY","JERSEY" -"3557365504","3557367807","GB","GBR","UNITED KINGDOM" -"3557367808","3557375999","DE","DEU","GERMANY" -"3557376000","3557384191","ES","ESP","SPAIN" -"3557384192","3557392383","GB","GBR","UNITED KINGDOM" -"3557392384","3557400575","AT","AUT","AUSTRIA" -"3557400576","3557404703","DE","DEU","GERMANY" -"3557404704","3557404719","CH","CHE","SWITZERLAND" -"3557404720","3557404735","DE","DEU","GERMANY" -"3557404736","3557404799","CH","CHE","SWITZERLAND" -"3557404800","3557408767","DE","DEU","GERMANY" -"3557408768","3557416959","GB","GBR","UNITED KINGDOM" -"3557416960","3557425151","UA","UKR","UKRAINE" -"3557425152","3557490687","DK","DNK","DENMARK" -"3557490688","3557507071","FR","FRA","FRANCE" -"3557507072","3557515263","GB","GBR","UNITED KINGDOM" -"3557515264","3557523455","CZ","CZE","CZECH REPUBLIC" -"3557523456","3557531647","RU","RUS","RUSSIAN FEDERATION" -"3557531648","3557539839","SA","SAU","SAUDI ARABIA" -"3557539840","3557548031","SY","SYR","SYRIAN ARAB REPUBLIC" -"3557548032","3557556223","DE","DEU","GERMANY" -"3557556224","3557564415","RU","RUS","RUSSIAN FEDERATION" -"3557564416","3557570319","DE","DEU","GERMANY" -"3557570320","3557570335","ES","ESP","SPAIN" -"3557570336","3557571295","DE","DEU","GERMANY" -"3557571296","3557571315","GB","GBR","UNITED KINGDOM" -"3557571316","3557572607","DE","DEU","GERMANY" -"3557572608","3557580799","RU","RUS","RUSSIAN FEDERATION" -"3557580800","3557584287","DE","DEU","GERMANY" -"3557584288","3557584319","GB","GBR","UNITED KINGDOM" -"3557584320","3557585151","DE","DEU","GERMANY" -"3557585152","3557585279","CH","CHE","SWITZERLAND" -"3557585280","3557585695","DE","DEU","GERMANY" -"3557585696","3557585711","CH","CHE","SWITZERLAND" -"3557585712","3557585887","DE","DEU","GERMANY" -"3557585888","3557585903","CH","CHE","SWITZERLAND" -"3557585904","3557588991","DE","DEU","GERMANY" -"3557588992","3557597183","TR","TUR","TURKEY" -"3557597184","3557597711","SA","SAU","SAUDI ARABIA" -"3557597712","3557597719","AS","ASM","AMERICAN SAMOA" -"3557597720","3557605375","SA","SAU","SAUDI ARABIA" -"3557605376","3557613567","LT","LTU","LITHUANIA" -"3557621760","3557629951","RU","RUS","RUSSIAN FEDERATION" -"3557629952","3557638143","PT","PRT","PORTUGAL" -"3557638144","3557646335","MK","MKD","THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA" -"3557646336","3557654527","RU","RUS","RUSSIAN FEDERATION" -"3557654528","3557670911","KZ","KAZ","KAZAKHSTAN" -"3557670912","3557679103","GB","GBR","UNITED KINGDOM" -"3557679104","3557687295","SI","SVN","SLOVENIA" -"3557687296","3557703679","PL","POL","POLAND" -"3557703680","3557711871","DE","DEU","GERMANY" -"3557711872","3557720063","ES","ESP","SPAIN" -"3557720064","3557728255","IT","ITA","ITALY" -"3557728256","3557744639","RU","RUS","RUSSIAN FEDERATION" -"3557744640","3557752831","PS","PSE","PALESTINIAN TERRITORY, OCCUPIED" -"3557752832","3557761023","TR","TUR","TURKEY" -"3557761024","3557769215","RU","RUS","RUSSIAN FEDERATION" -"3557769216","3557777407","GB","GBR","UNITED KINGDOM" -"3557777408","3557785599","RU","RUS","RUSSIAN FEDERATION" -"3557785600","3557793791","UA","UKR","UKRAINE" -"3557793792","3557801983","HR","HRV","CROATIA" -"3557801984","3557810175","DE","DEU","GERMANY" -"3557810176","3557818367","ES","ESP","SPAIN" -"3557818368","3557826559","RU","RUS","RUSSIAN FEDERATION" -"3557826560","3557834751","AT","AUT","AUSTRIA" -"3557834752","3557842943","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3557842944","3557851135","FI","FIN","FINLAND" -"3557851136","3557859327","HU","HUN","HUNGARY" -"3557859328","3557867519","SE","SWE","SWEDEN" -"3557867520","3557875711","RU","RUS","RUSSIAN FEDERATION" -"3557875712","3557883903","DE","DEU","GERMANY" -"3557883904","3557892095","RU","RUS","RUSSIAN FEDERATION" -"3557892096","3557900287","IE","IRL","IRELAND" -"3557900288","3557916671","AT","AUT","AUSTRIA" -"3557916672","3557924863","NO","NOR","NORWAY" -"3557924864","3557933055","FI","FIN","FINLAND" -"3557933056","3557941247","IT","ITA","ITALY" -"3557941248","3557945183","DE","DEU","GERMANY" -"3557945184","3557945199","GB","GBR","UNITED KINGDOM" -"3557945200","3557957631","DE","DEU","GERMANY" -"3557957632","3557960975","SI","SVN","SLOVENIA" -"3557960976","3557960983","AE","ARE","UNITED ARAB EMIRATES" -"3557960984","3557961375","SI","SVN","SLOVENIA" -"3557961376","3557961407","AE","ARE","UNITED ARAB EMIRATES" -"3557961408","3557965823","SI","SVN","SLOVENIA" -"3557965824","3557974015","DE","DEU","GERMANY" -"3557974016","3557982207","CH","CHE","SWITZERLAND" -"3557982208","3557990399","NO","NOR","NORWAY" -"3557990400","3557998591","PT","PRT","PORTUGAL" -"3557998592","3558006783","DE","DEU","GERMANY" -"3558006784","3558014975","GB","GBR","UNITED KINGDOM" -"3558014976","3558023167","RU","RUS","RUSSIAN FEDERATION" -"3558023168","3558023199","GB","GBR","UNITED KINGDOM" -"3558023200","3558030655","DE","DEU","GERMANY" -"3558030656","3558030659","CH","CHE","SWITZERLAND" -"3558030660","3558031359","DE","DEU","GERMANY" -"3558031360","3558039551","GB","GBR","UNITED KINGDOM" -"3558039552","3558047743","IT","ITA","ITALY" -"3558047744","3558055935","KZ","KAZ","KAZAKHSTAN" -"3558055936","3558064127","FR","FRA","FRANCE" -"3558064128","3558067839","NL","NLD","NETHERLANDS" -"3558067840","3558067855","US","USA","UNITED STATES" -"3558067856","3558080511","NL","NLD","NETHERLANDS" -"3558080512","3558096895","RU","RUS","RUSSIAN FEDERATION" -"3558096896","3558113279","CZ","CZE","CZECH REPUBLIC" -"3558113280","3558122767","DE","DEU","GERMANY" -"3558122768","3558122783","CH","CHE","SWITZERLAND" -"3558122784","3558129663","DE","DEU","GERMANY" -"3558129664","3558137855","NO","NOR","NORWAY" -"3558137856","3558146047","GB","GBR","UNITED KINGDOM" -"3558146048","3558154239","RU","RUS","RUSSIAN FEDERATION" -"3558154240","3558154367","NG","NGA","NIGERIA" -"3558154368","3558154495","SD","SDN","SUDAN" -"3558154496","3558154623","MZ","MOZ","MOZAMBIQUE" -"3558154624","3558154751","CI","CIV","COTE D'IVOIRE" -"3558154752","3558154879","CM","CMR","CAMEROON" -"3558154880","3558155007","SD","SDN","SUDAN" -"3558155008","3558155135","DE","DEU","GERMANY" -"3558155136","3558155263","SD","SDN","SUDAN" -"3558155264","3558155391","ET","ETH","ETHIOPIA" -"3558155392","3558155519","DE","DEU","GERMANY" -"3558155520","3558156031","SD","SDN","SUDAN" -"3558156032","3558156032","DE","DEU","GERMANY" -"3558156033","3558156287","KG","KGZ","KYRGYZSTAN" -"3558156288","3558170623","DE","DEU","GERMANY" -"3558170624","3558178815","GB","GBR","UNITED KINGDOM" -"3558178816","3558187007","BG","BGR","BULGARIA" -"3558187008","3558195199","DE","DEU","GERMANY" -"3558195200","3558195455","BE","BEL","BELGIUM" -"3558195456","3558196039","ES","ESP","SPAIN" -"3558196040","3558196047","IT","ITA","ITALY" -"3558196048","3558196119","ES","ESP","SPAIN" -"3558196120","3558196127","IT","ITA","ITALY" -"3558196128","3558196159","ES","ESP","SPAIN" -"3558196160","3558196167","IT","ITA","ITALY" -"3558196168","3558196175","ES","ESP","SPAIN" -"3558196176","3558196191","IT","ITA","ITALY" -"3558196192","3558196199","ES","ESP","SPAIN" -"3558196200","3558196271","IT","ITA","ITALY" -"3558196272","3558196351","ES","ESP","SPAIN" -"3558196352","3558196415","IT","ITA","ITALY" -"3558196416","3558196543","ES","ESP","SPAIN" -"3558196544","3558196607","IT","ITA","ITALY" -"3558196608","3558196719","ES","ESP","SPAIN" -"3558196720","3558196727","IT","ITA","ITALY" -"3558196728","3558196735","ES","ESP","SPAIN" -"3558196736","3558203391","US","USA","UNITED STATES" -"3558203392","3558211583","ES","ESP","SPAIN" -"3558211584","3558219775","GB","GBR","UNITED KINGDOM" -"3558219776","3558227967","ES","ESP","SPAIN" -"3558227968","3558236159","RU","RUS","RUSSIAN FEDERATION" -"3558236160","3558244351","GB","GBR","UNITED KINGDOM" -"3558244352","3558252543","IT","ITA","ITALY" -"3558260736","3558268927","UA","UKR","UKRAINE" -"3558268928","3558269439","GB","GBR","UNITED KINGDOM" -"3558269440","3558269951","GI","GIB","GIBRALTAR" -"3558269952","3558270463","GB","GBR","UNITED KINGDOM" -"3558270464","3558271231","GI","GIB","GIBRALTAR" -"3558271232","3558271487","GB","GBR","UNITED KINGDOM" -"3558271488","3558276095","GI","GIB","GIBRALTAR" -"3558276096","3558276863","GB","GBR","UNITED KINGDOM" -"3558276864","3558277119","GI","GIB","GIBRALTAR" -"3558277120","3558285567","GB","GBR","UNITED KINGDOM" -"3558285568","3558285823","DE","DEU","GERMANY" -"3558285824","3558285951","GB","GBR","UNITED KINGDOM" -"3558285952","3558286079","DE","DEU","GERMANY" -"3558286080","3558286591","GB","GBR","UNITED KINGDOM" -"3558286592","3558286655","FR","FRA","FRANCE" -"3558286656","3558286719","GB","GBR","UNITED KINGDOM" -"3558286720","3558286847","FR","FRA","FRANCE" -"3558286848","3558287679","GB","GBR","UNITED KINGDOM" -"3558287680","3558287743","BE","BEL","BELGIUM" -"3558287744","3558287871","NL","NLD","NETHERLANDS" -"3558287872","3558287935","FR","FRA","FRANCE" -"3558287936","3558287999","IT","ITA","ITALY" -"3558288000","3558288063","DE","DEU","GERMANY" -"3558288064","3558288127","ES","ESP","SPAIN" -"3558288128","3558288191","AT","AUT","AUSTRIA" -"3558288192","3558288255","SE","SWE","SWEDEN" -"3558288256","3558288319","US","USA","UNITED STATES" -"3558288320","3558288383","CH","CHE","SWITZERLAND" -"3558288384","3558288423","US","USA","UNITED STATES" -"3558288424","3558288447","GB","GBR","UNITED KINGDOM" -"3558288448","3558288483","US","USA","UNITED STATES" -"3558288484","3558288487","GB","GBR","UNITED KINGDOM" -"3558288488","3558288639","US","USA","UNITED STATES" -"3558288640","3558288671","BE","BEL","BELGIUM" -"3558288672","3558288687","DE","DEU","GERMANY" -"3558288688","3558288703","BE","BEL","BELGIUM" -"3558288704","3558288719","GB","GBR","UNITED KINGDOM" -"3558288720","3558288895","BE","BEL","BELGIUM" -"3558288896","3558289103","FR","FRA","FRANCE" -"3558289104","3558289119","GB","GBR","UNITED KINGDOM" -"3558289120","3558289151","FR","FRA","FRANCE" -"3558289152","3558289407","GB","GBR","UNITED KINGDOM" -"3558289408","3558289663","NL","NLD","NETHERLANDS" -"3558289664","3558289747","IT","ITA","ITALY" -"3558289748","3558289751","GB","GBR","UNITED KINGDOM" -"3558289752","3558289775","IT","ITA","ITALY" -"3558289776","3558289783","GB","GBR","UNITED KINGDOM" -"3558289784","3558289919","IT","ITA","ITALY" -"3558289920","3558290175","CZ","CZE","CZECH REPUBLIC" -"3558290176","3558290431","GB","GBR","UNITED KINGDOM" -"3558290432","3558290575","BE","BEL","BELGIUM" -"3558290576","3558290591","GB","GBR","UNITED KINGDOM" -"3558290592","3558290599","BE","BEL","BELGIUM" -"3558290600","3558290655","GB","GBR","UNITED KINGDOM" -"3558290656","3558290663","BE","BEL","BELGIUM" -"3558290664","3558290671","GB","GBR","UNITED KINGDOM" -"3558290672","3558290687","BE","BEL","BELGIUM" -"3558290688","3558290871","ES","ESP","SPAIN" -"3558290872","3558290879","GB","GBR","UNITED KINGDOM" -"3558290880","3558290943","ES","ESP","SPAIN" -"3558290944","3558290959","DE","DEU","GERMANY" -"3558290960","3558290967","NL","NLD","NETHERLANDS" -"3558290968","3558290975","GB","GBR","UNITED KINGDOM" -"3558290976","3558290991","NL","NLD","NETHERLANDS" -"3558290992","3558291023","DE","DEU","GERMANY" -"3558291024","3558291031","SE","SWE","SWEDEN" -"3558291032","3558291135","DE","DEU","GERMANY" -"3558291136","3558291199","GB","GBR","UNITED KINGDOM" -"3558291200","3558291215","CH","CHE","SWITZERLAND" -"3558291216","3558291231","AT","AUT","AUSTRIA" -"3558291232","3558291239","CH","CHE","SWITZERLAND" -"3558291240","3558291247","GB","GBR","UNITED KINGDOM" -"3558291248","3558291263","CH","CHE","SWITZERLAND" -"3558291264","3558291279","AT","AUT","AUSTRIA" -"3558291280","3558291295","GB","GBR","UNITED KINGDOM" -"3558291296","3558291455","CH","CHE","SWITZERLAND" -"3558291456","3558292223","GB","GBR","UNITED KINGDOM" -"3558292224","3558292287","SE","SWE","SWEDEN" -"3558292288","3558292543","NL","NLD","NETHERLANDS" -"3558292544","3558292607","GB","GBR","UNITED KINGDOM" -"3558292608","3558292735","NL","NLD","NETHERLANDS" -"3558292736","3558292863","GB","GBR","UNITED KINGDOM" -"3558292864","3558292871","DE","DEU","GERMANY" -"3558292872","3558293503","NL","NLD","NETHERLANDS" -"3558293504","3558301695","RU","RUS","RUSSIAN FEDERATION" -"3558301696","3558310319","DE","DEU","GERMANY" -"3558310320","3558310327","CH","CHE","SWITZERLAND" -"3558310328","3558310511","DE","DEU","GERMANY" -"3558310512","3558310519","CH","CHE","SWITZERLAND" -"3558310520","3558312791","DE","DEU","GERMANY" -"3558312792","3558312799","CH","CHE","SWITZERLAND" -"3558312800","3558318079","DE","DEU","GERMANY" -"3558318080","3558319889","FR","FRA","FRANCE" -"3558319890","3558319891","ES","ESP","SPAIN" -"3558319892","3558334463","FR","FRA","FRANCE" -"3558334464","3558334935","CH","CHE","SWITZERLAND" -"3558334936","3558334943","FR","FRA","FRANCE" -"3558334944","3558335499","CH","CHE","SWITZERLAND" -"3558335500","3558335503","DE","DEU","GERMANY" -"3558335504","3558335511","CH","CHE","SWITZERLAND" -"3558335512","3558335519","DE","DEU","GERMANY" -"3558335520","3558337515","CH","CHE","SWITZERLAND" -"3558337516","3558337519","ES","ESP","SPAIN" -"3558337520","3558337783","CH","CHE","SWITZERLAND" -"3558337784","3558337787","DE","DEU","GERMANY" -"3558337788","3558339359","CH","CHE","SWITZERLAND" -"3558339360","3558339367","ES","ESP","SPAIN" -"3558339368","3558339699","CH","CHE","SWITZERLAND" -"3558339700","3558339703","DE","DEU","GERMANY" -"3558339704","3558340039","CH","CHE","SWITZERLAND" -"3558340040","3558340043","DE","DEU","GERMANY" -"3558340044","3558342655","CH","CHE","SWITZERLAND" -"3558342656","3558350847","IT","ITA","ITALY" -"3558350848","3558359039","RU","RUS","RUSSIAN FEDERATION" -"3558359040","3558367231","GB","GBR","UNITED KINGDOM" -"3558367232","3558367271","AT","AUT","AUSTRIA" -"3558367272","3558367279","GI","GIB","GIBRALTAR" -"3558367280","3558368015","AT","AUT","AUSTRIA" -"3558368016","3558368031","AR","ARG","ARGENTINA" -"3558368032","3558368063","CL","CHL","CHILE" -"3558368064","3558368079","ES","ESP","SPAIN" -"3558368080","3558368095","DE","DEU","GERMANY" -"3558368096","3558368111","US","USA","UNITED STATES" -"3558368112","3558368127","GB","GBR","UNITED KINGDOM" -"3558368128","3558368159","AT","AUT","AUSTRIA" -"3558368160","3558368191","DE","DEU","GERMANY" -"3558368192","3558368207","US","USA","UNITED STATES" -"3558368208","3558368223","GB","GBR","UNITED KINGDOM" -"3558368224","3558368239","ES","ESP","SPAIN" -"3558368240","3558368255","AR","ARG","ARGENTINA" -"3558368256","3558368271","AT","AUT","AUSTRIA" -"3558368272","3558368287","GB","GBR","UNITED KINGDOM" -"3558368288","3558368319","CL","CHL","CHILE" -"3558368320","3558368383","AR","ARG","ARGENTINA" -"3558368384","3558368447","AT","AUT","AUSTRIA" -"3558368448","3558368479","DE","DEU","GERMANY" -"3558368480","3558368495","ES","ESP","SPAIN" -"3558368496","3558368511","US","USA","UNITED STATES" -"3558368512","3558369503","AT","AUT","AUSTRIA" -"3558369504","3558369519","FR","FRA","FRANCE" -"3558369520","3558372351","AT","AUT","AUSTRIA" -"3558372352","3558372607","BG","BGR","BULGARIA" -"3558372608","3558372735","AT","AUT","AUSTRIA" -"3558372736","3558372863","ES","ESP","SPAIN" -"3558372864","3558375423","AT","AUT","AUSTRIA" -"3558375424","3558383615","CZ","CZE","CZECH REPUBLIC" -"3558383616","3558391807","HU","HUN","HUNGARY" -"3558391808","3558399999","LU","LUX","LUXEMBOURG" -"3558400000","3558408191","SA","SAU","SAUDI ARABIA" -"3558408192","3558412095","CH","CHE","SWITZERLAND" -"3558412096","3558412103","GB","GBR","UNITED KINGDOM" -"3558412104","3558416383","CH","CHE","SWITZERLAND" -"3558416384","3558424575","BG","BGR","BULGARIA" -"3558424576","3558440959","IL","ISR","ISRAEL" -"3558449152","3558457343","IT","ITA","ITALY" -"3558457344","3558457407","BE","BEL","BELGIUM" -"3558457408","3558457599","GB","GBR","UNITED KINGDOM" -"3558457600","3558457727","FR","FRA","FRANCE" -"3558457728","3558465535","NL","NLD","NETHERLANDS" -"3558465536","3558473727","GB","GBR","UNITED KINGDOM" -"3558473728","3558506495","SA","SAU","SAUDI ARABIA" -"3558506496","3558514687","UA","UKR","UKRAINE" -"3558514688","3558522879","SK","SVK","SLOVAKIA" -"3558522880","3558531071","NL","NLD","NETHERLANDS" -"3558531072","3558539263","RU","RUS","RUSSIAN FEDERATION" -"3558539264","3558543359","SE","SWE","SWEDEN" -"3558543360","3558547455","DK","DNK","DENMARK" -"3558547456","3558555647","FR","FRA","FRANCE" -"3558555648","3558572031","AT","AUT","AUSTRIA" -"3558572032","3558580223","DE","DEU","GERMANY" -"3558580224","3558581119","CH","CHE","SWITZERLAND" -"3558581120","3558581151","DE","DEU","GERMANY" -"3558581152","3558581423","CH","CHE","SWITZERLAND" -"3558581424","3558581439","DE","DEU","GERMANY" -"3558581440","3558586303","CH","CHE","SWITZERLAND" -"3558586304","3558586335","NL","NLD","NETHERLANDS" -"3558586336","3558588415","CH","CHE","SWITZERLAND" -"3558588416","3558596607","CZ","CZE","CZECH REPUBLIC" -"3558596608","3558604799","EE","EST","ESTONIA" -"3558604800","3558612991","GB","GBR","UNITED KINGDOM" -"3558612992","3558621183","DE","DEU","GERMANY" -"3558621184","3558629375","MD","MDA","REPUBLIC OF MOLDOVA" -"3558629376","3558637567","DE","DEU","GERMANY" -"3558637568","3558645759","CH","CHE","SWITZERLAND" -"3558645760","3558653951","IT","ITA","ITALY" -"3558653952","3558662143","SE","SWE","SWEDEN" -"3558662144","3558670335","LB","LBN","LEBANON" -"3558670336","3558686719","DE","DEU","GERMANY" -"3558686720","3558703103","TR","TUR","TURKEY" -"3558703104","3558711295","IT","ITA","ITALY" -"3558711296","3558719487","NL","NLD","NETHERLANDS" -"3558719488","3558735871","IL","ISR","ISRAEL" -"3558735872","3558744063","GB","GBR","UNITED KINGDOM" -"3558744064","3558752255","LB","LBN","LEBANON" -"3558752256","3558760447","SI","SVN","SLOVENIA" -"3558760448","3558768639","FR","FRA","FRANCE" -"3558768640","3558785023","RU","RUS","RUSSIAN FEDERATION" -"3558785024","3558801407","IS","ISL","ICELAND" -"3558801408","3558809599","TR","TUR","TURKEY" -"3558809600","3558817791","ES","ESP","SPAIN" -"3558817792","3558821655","AT","AUT","AUSTRIA" -"3558821656","3558821663","DE","DEU","GERMANY" -"3558821664","3558821795","AT","AUT","AUSTRIA" -"3558821796","3558821799","DE","DEU","GERMANY" -"3558821800","3558821823","AT","AUT","AUSTRIA" -"3558821824","3558821831","DE","DEU","GERMANY" -"3558821832","3558825983","AT","AUT","AUSTRIA" -"3558825984","3558832383","CY","CYP","CYPRUS" -"3558832384","3558832639","LB","LBN","LEBANON" -"3558832640","3558834175","CY","CYP","CYPRUS" -"3558834176","3558842367","FR","FRA","FRANCE" -"3558842368","3558850559","SE","SWE","SWEDEN" -"3558850560","3558850815","ES","ESP","SPAIN" -"3558850816","3558851327","US","USA","UNITED STATES" -"3558851328","3558851359","ES","ESP","SPAIN" -"3558851360","3558851391","GB","GBR","UNITED KINGDOM" -"3558851392","3558851471","ES","ESP","SPAIN" -"3558851472","3558851479","NO","NOR","NORWAY" -"3558851480","3558853119","ES","ESP","SPAIN" -"3558853120","3558853375","BE","BEL","BELGIUM" -"3558853376","3558853399","ES","ESP","SPAIN" -"3558853400","3558853407","DE","DEU","GERMANY" -"3558853408","3558853439","ES","ESP","SPAIN" -"3558853440","3558853455","DE","DEU","GERMANY" -"3558853456","3558853463","ES","ESP","SPAIN" -"3558853464","3558853467","DE","DEU","GERMANY" -"3558853468","3558853503","ES","ESP","SPAIN" -"3558853504","3558853511","DE","DEU","GERMANY" -"3558853512","3558853535","ES","ESP","SPAIN" -"3558853536","3558853547","DE","DEU","GERMANY" -"3558853548","3558854655","ES","ESP","SPAIN" -"3558854656","3558854911","US","USA","UNITED STATES" -"3558854912","3558854975","ES","ESP","SPAIN" -"3558854976","3558855039","US","USA","UNITED STATES" -"3558855040","3558855167","GB","GBR","UNITED KINGDOM" -"3558855168","3558855183","US","USA","UNITED STATES" -"3558855184","3558855423","ES","ESP","SPAIN" -"3558855424","3558855431","NL","NLD","NETHERLANDS" -"3558855432","3558855935","ES","ESP","SPAIN" -"3558855936","3558856191","US","USA","UNITED STATES" -"3558856192","3558856575","GB","GBR","UNITED KINGDOM" -"3558856576","3558856639","ES","ESP","SPAIN" -"3558856640","3558856703","NL","NLD","NETHERLANDS" -"3558856704","3558858751","US","USA","UNITED STATES" -"3558858752","3558860967","IT","ITA","ITALY" -"3558860968","3558860975","IE","IRL","IRELAND" -"3558860976","3558864695","IT","ITA","ITALY" -"3558864696","3558864703","GB","GBR","UNITED KINGDOM" -"3558864704","3558866943","IT","ITA","ITALY" -"3558866944","3558899711","GB","GBR","UNITED KINGDOM" -"3558899712","3558916095","SE","SWE","SWEDEN" -"3558916096","3558924287","RU","RUS","RUSSIAN FEDERATION" -"3558924288","3558932479","NL","NLD","NETHERLANDS" -"3558932480","3558940671","RU","RUS","RUSSIAN FEDERATION" -"3558940672","3558948863","AT","AUT","AUSTRIA" -"3558948864","3558957055","PL","POL","POLAND" -"3558957056","3558965247","PS","PSE","PALESTINIAN TERRITORY, OCCUPIED" -"3558965248","3558973439","NO","NOR","NORWAY" -"3558973440","3558981631","SA","SAU","SAUDI ARABIA" -"3558981632","3558989823","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3558989824","3558998015","RU","RUS","RUSSIAN FEDERATION" -"3558998016","3559006207","JO","JOR","JORDAN" -"3559006208","3559014399","RU","RUS","RUSSIAN FEDERATION" -"3559014400","3559016191","DE","DEU","GERMANY" -"3559016192","3559016207","GB","GBR","UNITED KINGDOM" -"3559016208","3559022591","DE","DEU","GERMANY" -"3559022592","3559030783","RU","RUS","RUSSIAN FEDERATION" -"3559030784","3559038720","ES","ESP","SPAIN" -"3559038721","3559038975","US","USA","UNITED STATES" -"3559038976","3559047167","DE","DEU","GERMANY" -"3559047168","3559055359","IT","ITA","ITALY" -"3559055360","3559063551","AM","ARM","ARMENIA" -"3559063552","3559079935","CH","CHE","SWITZERLAND" -"3559079936","3559088127","JO","JOR","JORDAN" -"3559088128","3559088255","BE","BEL","BELGIUM" -"3559088256","3559088259","GB","GBR","UNITED KINGDOM" -"3559088260","3559088367","BE","BEL","BELGIUM" -"3559088368","3559088371","GB","GBR","UNITED KINGDOM" -"3559088372","3559089055","BE","BEL","BELGIUM" -"3559089056","3559089063","DE","DEU","GERMANY" -"3559089064","3559089607","BE","BEL","BELGIUM" -"3559089608","3559089611","GB","GBR","UNITED KINGDOM" -"3559089612","3559089623","BE","BEL","BELGIUM" -"3559089624","3559089627","GB","GBR","UNITED KINGDOM" -"3559089628","3559089639","BE","BEL","BELGIUM" -"3559089640","3559089643","GB","GBR","UNITED KINGDOM" -"3559089644","3559090071","BE","BEL","BELGIUM" -"3559090072","3559090079","NL","NLD","NETHERLANDS" -"3559090080","3559090519","BE","BEL","BELGIUM" -"3559090520","3559090527","GB","GBR","UNITED KINGDOM" -"3559090528","3559090815","BE","BEL","BELGIUM" -"3559090816","3559090823","GB","GBR","UNITED KINGDOM" -"3559090824","3559090895","BE","BEL","BELGIUM" -"3559090896","3559090899","GB","GBR","UNITED KINGDOM" -"3559090900","3559090923","BE","BEL","BELGIUM" -"3559090924","3559090927","GB","GBR","UNITED KINGDOM" -"3559090928","3559091111","BE","BEL","BELGIUM" -"3559091112","3559091115","GB","GBR","UNITED KINGDOM" -"3559091116","3559091223","BE","BEL","BELGIUM" -"3559091224","3559091231","GB","GBR","UNITED KINGDOM" -"3559091232","3559091239","BE","BEL","BELGIUM" -"3559091240","3559091247","GB","GBR","UNITED KINGDOM" -"3559091248","3559091327","BE","BEL","BELGIUM" -"3559091328","3559091391","GB","GBR","UNITED KINGDOM" -"3559091392","3559091399","BE","BEL","BELGIUM" -"3559091400","3559091407","GB","GBR","UNITED KINGDOM" -"3559091408","3559091423","BE","BEL","BELGIUM" -"3559091424","3559091427","GB","GBR","UNITED KINGDOM" -"3559091428","3559091507","BE","BEL","BELGIUM" -"3559091508","3559091511","GB","GBR","UNITED KINGDOM" -"3559091512","3559091519","BE","BEL","BELGIUM" -"3559091520","3559091535","GB","GBR","UNITED KINGDOM" -"3559091536","3559091583","BE","BEL","BELGIUM" -"3559091584","3559091615","GB","GBR","UNITED KINGDOM" -"3559091616","3559091631","BE","BEL","BELGIUM" -"3559091632","3559091635","GB","GBR","UNITED KINGDOM" -"3559091636","3559092159","BE","BEL","BELGIUM" -"3559092160","3559092160","GB","GBR","UNITED KINGDOM" -"3559092161","3559092222","BE","BEL","BELGIUM" -"3559092223","3559092223","GB","GBR","UNITED KINGDOM" -"3559092224","3559092231","BE","BEL","BELGIUM" -"3559092232","3559092239","GB","GBR","UNITED KINGDOM" -"3559092240","3559092479","BE","BEL","BELGIUM" -"3559092480","3559092739","GB","GBR","UNITED KINGDOM" -"3559092740","3559092831","BE","BEL","BELGIUM" -"3559092832","3559092839","GB","GBR","UNITED KINGDOM" -"3559092840","3559092855","BE","BEL","BELGIUM" -"3559092856","3559092863","GB","GBR","UNITED KINGDOM" -"3559092864","3559092871","BE","BEL","BELGIUM" -"3559092872","3559092895","GB","GBR","UNITED KINGDOM" -"3559092896","3559092959","BE","BEL","BELGIUM" -"3559092960","3559092975","GB","GBR","UNITED KINGDOM" -"3559092976","3559093007","BE","BEL","BELGIUM" -"3559093008","3559093015","GB","GBR","UNITED KINGDOM" -"3559093016","3559093019","BE","BEL","BELGIUM" -"3559093020","3559093023","GB","GBR","UNITED KINGDOM" -"3559093024","3559093083","BE","BEL","BELGIUM" -"3559093084","3559093087","GB","GBR","UNITED KINGDOM" -"3559093088","3559093135","BE","BEL","BELGIUM" -"3559093136","3559093159","GB","GBR","UNITED KINGDOM" -"3559093160","3559093311","BE","BEL","BELGIUM" -"3559093312","3559093319","GB","GBR","UNITED KINGDOM" -"3559093320","3559093351","BE","BEL","BELGIUM" -"3559093352","3559093355","GB","GBR","UNITED KINGDOM" -"3559093356","3559093567","BE","BEL","BELGIUM" -"3559093568","3559093599","IT","ITA","ITALY" -"3559093600","3559093679","BE","BEL","BELGIUM" -"3559093680","3559093699","GB","GBR","UNITED KINGDOM" -"3559093700","3559093967","BE","BEL","BELGIUM" -"3559093968","3559093975","GB","GBR","UNITED KINGDOM" -"3559093976","3559094087","BE","BEL","BELGIUM" -"3559094088","3559094095","GB","GBR","UNITED KINGDOM" -"3559094096","3559094103","BE","BEL","BELGIUM" -"3559094104","3559094111","GB","GBR","UNITED KINGDOM" -"3559094112","3559094151","BE","BEL","BELGIUM" -"3559094152","3559094159","GB","GBR","UNITED KINGDOM" -"3559094160","3559094183","BE","BEL","BELGIUM" -"3559094184","3559094191","GB","GBR","UNITED KINGDOM" -"3559094192","3559094303","BE","BEL","BELGIUM" -"3559094304","3559094335","GB","GBR","UNITED KINGDOM" -"3559094336","3559094415","BE","BEL","BELGIUM" -"3559094416","3559094431","GB","GBR","UNITED KINGDOM" -"3559094432","3559094527","BE","BEL","BELGIUM" -"3559094528","3559095039","GB","GBR","UNITED KINGDOM" -"3559095040","3559095063","BE","BEL","BELGIUM" -"3559095064","3559095071","GB","GBR","UNITED KINGDOM" -"3559095072","3559095119","BE","BEL","BELGIUM" -"3559095120","3559095135","GB","GBR","UNITED KINGDOM" -"3559095136","3559095263","BE","BEL","BELGIUM" -"3559095264","3559095303","GB","GBR","UNITED KINGDOM" -"3559095304","3559095351","BE","BEL","BELGIUM" -"3559095352","3559095359","GB","GBR","UNITED KINGDOM" -"3559095360","3559095423","BE","BEL","BELGIUM" -"3559095424","3559095455","GB","GBR","UNITED KINGDOM" -"3559095456","3559095487","BE","BEL","BELGIUM" -"3559095488","3559095551","GB","GBR","UNITED KINGDOM" -"3559095552","3559095575","BE","BEL","BELGIUM" -"3559095576","3559095583","GB","GBR","UNITED KINGDOM" -"3559095584","3559095591","BE","BEL","BELGIUM" -"3559095592","3559095623","GB","GBR","UNITED KINGDOM" -"3559095624","3559095631","BE","BEL","BELGIUM" -"3559095632","3559095647","GB","GBR","UNITED KINGDOM" -"3559095648","3559096087","BE","BEL","BELGIUM" -"3559096088","3559096095","GB","GBR","UNITED KINGDOM" -"3559096096","3559096123","BE","BEL","BELGIUM" -"3559096124","3559096127","GB","GBR","UNITED KINGDOM" -"3559096128","3559096215","BE","BEL","BELGIUM" -"3559096216","3559096223","NL","NLD","NETHERLANDS" -"3559096224","3559096247","BE","BEL","BELGIUM" -"3559096248","3559096251","GB","GBR","UNITED KINGDOM" -"3559096252","3559096319","BE","BEL","BELGIUM" -"3559096320","3559103231","RO","ROM","ROMANIA" -"3559103232","3559103487","GB","GBR","UNITED KINGDOM" -"3559103488","3559104511","RO","ROM","ROMANIA" -"3559104512","3559112703","UA","UKR","UKRAINE" -"3559112704","3559120895","IT","ITA","ITALY" -"3559120896","3559129087","GB","GBR","UNITED KINGDOM" -"3559129088","3559137279","BG","BGR","BULGARIA" -"3559137280","3559145471","GB","GBR","UNITED KINGDOM" -"3559145472","3559153663","ES","ESP","SPAIN" -"3559153664","3559177215","GB","GBR","UNITED KINGDOM" -"3559177216","3559177471","DE","DEU","GERMANY" -"3559177472","3559177727","GB","GBR","UNITED KINGDOM" -"3559177728","3559178239","DE","DEU","GERMANY" -"3559178240","3559186431","LB","LBN","LEBANON" -"3559186432","3559194623","RU","RUS","RUSSIAN FEDERATION" -"3559194624","3559202815","SE","SWE","SWEDEN" -"3559202816","3559211007","DE","DEU","GERMANY" -"3559211008","3559219199","GR","GRC","GREECE" -"3559219200","3559227391","SE","SWE","SWEDEN" -"3559227392","3559235583","DK","DNK","DENMARK" -"3559235584","3559243775","DE","DEU","GERMANY" -"3559243776","3559251967","FR","FRA","FRANCE" -"3559251968","3559260159","NO","NOR","NORWAY" -"3559260160","3559268351","DE","DEU","GERMANY" -"3559268352","3559276543","IT","ITA","ITALY" -"3559276544","3559284735","GB","GBR","UNITED KINGDOM" -"3559284736","3559284895","RU","RUS","RUSSIAN FEDERATION" -"3559284896","3559284911","UA","UKR","UKRAINE" -"3559284912","3559288175","RU","RUS","RUSSIAN FEDERATION" -"3559288176","3559288191","UA","UKR","UKRAINE" -"3559288192","3559288207","AZ","AZE","AZERBAIJAN" -"3559288208","3559288831","RU","RUS","RUSSIAN FEDERATION" -"3559288832","3559289855","AZ","AZE","AZERBAIJAN" -"3559289856","3559291391","RU","RUS","RUSSIAN FEDERATION" -"3559291392","3559291647","AZ","AZE","AZERBAIJAN" -"3559291648","3559292927","RU","RUS","RUSSIAN FEDERATION" -"3559292928","3559301119","JO","JOR","JORDAN" -"3559301120","3559309311","GB","GBR","UNITED KINGDOM" -"3559309312","3559317503","PL","POL","POLAND" -"3559317504","3559325695","FI","FIN","FINLAND" -"3559325696","3559333887","IT","ITA","ITALY" -"3559333888","3559336447","SE","SWE","SWEDEN" -"3559336448","3559336703","US","USA","UNITED STATES" -"3559336704","3559342079","SE","SWE","SWEDEN" -"3559342080","3559350271","BG","BGR","BULGARIA" -"3559350272","3559358463","BA","BIH","BOSNIA AND HERZEGOVINA" -"3559358464","3559366655","FR","FRA","FRANCE" -"3559366656","3559374847","GB","GBR","UNITED KINGDOM" -"3559374848","3559383039","AT","AUT","AUSTRIA" -"3559383040","3559391231","GB","GBR","UNITED KINGDOM" -"3559391232","3559399423","CH","CHE","SWITZERLAND" -"3559399424","3559407615","UA","UKR","UKRAINE" -"3559407616","3559423999","HU","HUN","HUNGARY" -"3559424000","3559432191","LB","LBN","LEBANON" -"3559432192","3559440383","DE","DEU","GERMANY" -"3559440384","3559448575","RU","RUS","RUSSIAN FEDERATION" -"3559448576","3559456767","ES","ESP","SPAIN" -"3559456768","3559473151","RU","RUS","RUSSIAN FEDERATION" -"3559473152","3559489535","CH","CHE","SWITZERLAND" -"3559489536","3559490591","NL","NLD","NETHERLANDS" -"3559490592","3559490623","DE","DEU","GERMANY" -"3559490624","3559490687","NL","NLD","NETHERLANDS" -"3559490688","3559490719","ES","ESP","SPAIN" -"3559490720","3559490751","NL","NLD","NETHERLANDS" -"3559490752","3559490783","ES","ESP","SPAIN" -"3559490784","3559490791","CH","CHE","SWITZERLAND" -"3559490792","3559490799","BE","BEL","BELGIUM" -"3559490800","3559490815","ES","ESP","SPAIN" -"3559490816","3559491135","NL","NLD","NETHERLANDS" -"3559491136","3559491167","ES","ESP","SPAIN" -"3559491168","3559491247","NL","NLD","NETHERLANDS" -"3559491248","3559491263","ES","ESP","SPAIN" -"3559491264","3559491327","NL","NLD","NETHERLANDS" -"3559491328","3559491359","ES","ESP","SPAIN" -"3559491360","3559491447","NL","NLD","NETHERLANDS" -"3559491448","3559491455","ES","ESP","SPAIN" -"3559491456","3559491839","NL","NLD","NETHERLANDS" -"3559491840","3559491871","ES","ESP","SPAIN" -"3559491872","3559491903","GB","GBR","UNITED KINGDOM" -"3559491904","3559491967","ES","ESP","SPAIN" -"3559491968","3559491999","NL","NLD","NETHERLANDS" -"3559492000","3559492007","ES","ESP","SPAIN" -"3559492008","3559492013","NL","NLD","NETHERLANDS" -"3559492014","3559492015","ES","ESP","SPAIN" -"3559492016","3559492023","NL","NLD","NETHERLANDS" -"3559492024","3559492031","ES","ESP","SPAIN" -"3559492032","3559493151","NL","NLD","NETHERLANDS" -"3559493152","3559493167","IT","ITA","ITALY" -"3559493168","3559493247","NL","NLD","NETHERLANDS" -"3559493248","3559493279","ES","ESP","SPAIN" -"3559493280","3559493311","GB","GBR","UNITED KINGDOM" -"3559493312","3559493349","NL","NLD","NETHERLANDS" -"3559493350","3559493359","ES","ESP","SPAIN" -"3559493360","3559497727","NL","NLD","NETHERLANDS" -"3559497728","3559505919","GB","GBR","UNITED KINGDOM" -"3559505920","3559514111","CH","CHE","SWITZERLAND" -"3559514112","3559522303","AT","AUT","AUSTRIA" -"3559522304","3559530495","GB","GBR","UNITED KINGDOM" -"3559530496","3559538687","RU","RUS","RUSSIAN FEDERATION" -"3559538688","3559546879","UA","UKR","UKRAINE" -"3559546880","3559555071","KG","KGZ","KYRGYZSTAN" -"3559555072","3559563263","CH","CHE","SWITZERLAND" -"3559563264","3559571455","GB","GBR","UNITED KINGDOM" -"3559571456","3559579647","AM","ARM","ARMENIA" -"3559579648","3559586271","DE","DEU","GERMANY" -"3559586272","3559586303","US","USA","UNITED STATES" -"3559586304","3559587839","DE","DEU","GERMANY" -"3559587840","3559596031","KW","KWT","KUWAIT" -"3559596032","3559604223","BG","BGR","BULGARIA" -"3559604224","3559612415","DE","DEU","GERMANY" -"3559612416","3559620607","IT","ITA","ITALY" -"3559620608","3559628799","CH","CHE","SWITZERLAND" -"3559628800","3559636991","GB","GBR","UNITED KINGDOM" -"3559636992","3559653375","FR","FRA","FRANCE" -"3559653376","3559669759","GB","GBR","UNITED KINGDOM" -"3559669760","3559677951","RU","RUS","RUSSIAN FEDERATION" -"3559677952","3559686143","SI","SVN","SLOVENIA" -"3559686144","3559694335","RU","RUS","RUSSIAN FEDERATION" -"3559694336","3559702655","DE","DEU","GERMANY" -"3559702656","3559702719","RU","RUS","RUSSIAN FEDERATION" -"3559702720","3559703039","DE","DEU","GERMANY" -"3559703040","3559703551","UA","UKR","UKRAINE" -"3559703552","3559703679","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3559703680","3559703807","DE","DEU","GERMANY" -"3559703808","3559704063","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3559704064","3559710463","DE","DEU","GERMANY" -"3559710464","3559710719","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3559710720","3559718911","FR","FRA","FRANCE" -"3559718912","3559727103","RU","RUS","RUSSIAN FEDERATION" -"3559727104","3559735295","NL","NLD","NETHERLANDS" -"3559735296","3559743487","BG","BGR","BULGARIA" -"3559743488","3559745535","IT","ITA","ITALY" -"3559745536","3559747583","DE","DEU","GERMANY" -"3559747584","3559751679","DK","DNK","DENMARK" -"3559751680","3559759871","IT","ITA","ITALY" -"3559759872","3559768063","NO","NOR","NORWAY" -"3559768064","3559776255","CH","CHE","SWITZERLAND" -"3559776256","3559792639","RU","RUS","RUSSIAN FEDERATION" -"3559792640","3559800831","SA","SAU","SAUDI ARABIA" -"3559800832","3559809023","IT","ITA","ITALY" -"3559809024","3559817215","DE","DEU","GERMANY" -"3559817216","3559825407","GB","GBR","UNITED KINGDOM" -"3559825408","3559833599","IT","ITA","ITALY" -"3559833600","3559849983","RU","RUS","RUSSIAN FEDERATION" -"3559849984","3559858175","CZ","CZE","CZECH REPUBLIC" -"3559858176","3559866367","IT","ITA","ITALY" -"3559866368","3559874559","GB","GBR","UNITED KINGDOM" -"3559874560","3559877951","LT","LTU","LITHUANIA" -"3559877952","3559877967","CH","CHE","SWITZERLAND" -"3559877968","3559882751","LT","LTU","LITHUANIA" -"3559882752","3559890943","AZ","AZE","AZERBAIJAN" -"3559890944","3559899135","CH","CHE","SWITZERLAND" -"3559899136","3559899391","DE","DEU","GERMANY" -"3559899392","3559899395","EE","EST","ESTONIA" -"3559899396","3559899487","DE","DEU","GERMANY" -"3559899488","3559899519","EE","EST","ESTONIA" -"3559899520","3559899791","DE","DEU","GERMANY" -"3559899792","3559899807","EE","EST","ESTONIA" -"3559899808","3559899855","DE","DEU","GERMANY" -"3559899856","3559899871","EE","EST","ESTONIA" -"3559899872","3559899903","DE","DEU","GERMANY" -"3559899904","3559899911","EE","EST","ESTONIA" -"3559899912","3559899935","RU","RUS","RUSSIAN FEDERATION" -"3559899936","3559899951","DE","DEU","GERMANY" -"3559899952","3559899955","EE","EST","ESTONIA" -"3559899956","3559899959","DE","DEU","GERMANY" -"3559899960","3559899991","RU","RUS","RUSSIAN FEDERATION" -"3559899992","3559900275","DE","DEU","GERMANY" -"3559900276","3559900279","EE","EST","ESTONIA" -"3559900280","3559900423","DE","DEU","GERMANY" -"3559900424","3559900432","EE","EST","ESTONIA" -"3559900433","3559900439","DE","DEU","GERMANY" -"3559900440","3559900447","EE","EST","ESTONIA" -"3559900448","3559900471","DE","DEU","GERMANY" -"3559900472","3559900479","EE","EST","ESTONIA" -"3559900480","3559900483","DE","DEU","GERMANY" -"3559900484","3559900487","EE","EST","ESTONIA" -"3559900488","3559900492","DE","DEU","GERMANY" -"3559900493","3559900493","EE","EST","ESTONIA" -"3559900494","3559900494","DE","DEU","GERMANY" -"3559900495","3559900495","EE","EST","ESTONIA" -"3559900496","3559900503","DE","DEU","GERMANY" -"3559900504","3559900511","EE","EST","ESTONIA" -"3559900512","3559900519","DE","DEU","GERMANY" -"3559900520","3559900523","EE","EST","ESTONIA" -"3559900524","3559900611","DE","DEU","GERMANY" -"3559900612","3559900624","EE","EST","ESTONIA" -"3559900625","3559900927","DE","DEU","GERMANY" -"3559900928","3559900951","EE","EST","ESTONIA" -"3559900952","3559900959","DE","DEU","GERMANY" -"3559900960","3559900975","SE","SWE","SWEDEN" -"3559900976","3559900983","PL","POL","POLAND" -"3559900984","3559900991","GB","GBR","UNITED KINGDOM" -"3559900992","3559901007","RU","RUS","RUSSIAN FEDERATION" -"3559901008","3559901183","DE","DEU","GERMANY" -"3559901184","3559902011","EE","EST","ESTONIA" -"3559902012","3559902015","DE","DEU","GERMANY" -"3559902016","3559902031","EE","EST","ESTONIA" -"3559902032","3559902047","DE","DEU","GERMANY" -"3559902048","3559902055","EE","EST","ESTONIA" -"3559902056","3559902063","DE","DEU","GERMANY" -"3559902064","3559902071","UA","UKR","UKRAINE" -"3559902072","3559902079","EE","EST","ESTONIA" -"3559902080","3559902175","DE","DEU","GERMANY" -"3559902176","3559902187","EE","EST","ESTONIA" -"3559902188","3559902623","DE","DEU","GERMANY" -"3559902624","3559902631","EE","EST","ESTONIA" -"3559902632","3559902975","DE","DEU","GERMANY" -"3559902976","3559903231","EE","EST","ESTONIA" -"3559903232","3559903999","DE","DEU","GERMANY" -"3559904000","3559904023","EE","EST","ESTONIA" -"3559904024","3559904607","DE","DEU","GERMANY" -"3559904608","3559904639","EE","EST","ESTONIA" -"3559904640","3559905019","DE","DEU","GERMANY" -"3559905020","3559905039","EE","EST","ESTONIA" -"3559905040","3559905055","DE","DEU","GERMANY" -"3559905056","3559905139","EE","EST","ESTONIA" -"3559905140","3559905151","DE","DEU","GERMANY" -"3559905152","3559905155","EE","EST","ESTONIA" -"3559905156","3559905159","DE","DEU","GERMANY" -"3559905160","3559905283","EE","EST","ESTONIA" -"3559905284","3559905535","DE","DEU","GERMANY" -"3559905536","3559905623","EE","EST","ESTONIA" -"3559905624","3559905631","DE","DEU","GERMANY" -"3559905632","3559906223","EE","EST","ESTONIA" -"3559906224","3559906239","DE","DEU","GERMANY" -"3559906240","3559906735","EE","EST","ESTONIA" -"3559906736","3559906799","DE","DEU","GERMANY" -"3559906800","3559906975","EE","EST","ESTONIA" -"3559906976","3559907071","DE","DEU","GERMANY" -"3559907072","3559907327","EE","EST","ESTONIA" -"3559907328","3559915519","FR","FRA","FRANCE" -"3559915520","3559923711","IT","ITA","ITALY" -"3559923712","3559931903","RU","RUS","RUSSIAN FEDERATION" -"3559931904","3559940095","IL","ISR","ISRAEL" -"3559940096","3559945471","DE","DEU","GERMANY" -"3559945472","3559945727","US","USA","UNITED STATES" -"3559945728","3559948287","DE","DEU","GERMANY" -"3559948288","3559956479","RU","RUS","RUSSIAN FEDERATION" -"3559956480","3559956543","IT","ITA","ITALY" -"3559956544","3559956551","NL","NLD","NETHERLANDS" -"3559956552","3559957567","IT","ITA","ITALY" -"3559957568","3559957599","NL","NLD","NETHERLANDS" -"3559957600","3559964159","IT","ITA","ITALY" -"3559964160","3559964415","HU","HUN","HUNGARY" -"3559964416","3559964671","IT","ITA","ITALY" -"3559964672","3559972863","RU","RUS","RUSSIAN FEDERATION" -"3559981056","3559989247","EE","EST","ESTONIA" -"3559989248","3559997439","PL","POL","POLAND" -"3560005632","3560013823","RU","RUS","RUSSIAN FEDERATION" -"3560013824","3560030207","ES","ESP","SPAIN" -"3560030208","3560046591","GB","GBR","UNITED KINGDOM" -"3560046592","3560054783","BG","BGR","BULGARIA" -"3560054784","3560062975","TR","TUR","TURKEY" -"3560062976","3560071167","BG","BGR","BULGARIA" -"3560071168","3560079359","CY","CYP","CYPRUS" -"3560079360","3560087551","FI","FIN","FINLAND" -"3560087552","3560095743","GB","GBR","UNITED KINGDOM" -"3560095744","3560103935","FI","FIN","FINLAND" -"3560103936","3560112127","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3560112128","3560120319","DE","DEU","GERMANY" -"3560120320","3560128511","ES","ESP","SPAIN" -"3560128512","3560144895","HU","HUN","HUNGARY" -"3560144896","3560153087","CH","CHE","SWITZERLAND" -"3560153088","3560161279","FR","FRA","FRANCE" -"3560161280","3560169471","PL","POL","POLAND" -"3560169472","3560177663","AT","AUT","AUSTRIA" -"3560177664","3560185855","NL","NLD","NETHERLANDS" -"3560185856","3560194047","LT","LTU","LITHUANIA" -"3560194048","3560210431","IT","ITA","ITALY" -"3560218624","3560226815","HU","HUN","HUNGARY" -"3560226816","3560235007","AT","AUT","AUSTRIA" -"3560235008","3560243199","DE","DEU","GERMANY" -"3560243200","3560247295","BE","BEL","BELGIUM" -"3560247296","3560247999","NL","NLD","NETHERLANDS" -"3560248000","3560248319","BE","BEL","BELGIUM" -"3560248320","3560249087","NL","NLD","NETHERLANDS" -"3560249088","3560251391","BE","BEL","BELGIUM" -"3560251392","3560253439","RU","RUS","RUSSIAN FEDERATION" -"3560253440","3560253695","CZ","CZE","CZECH REPUBLIC" -"3560253696","3560259583","RU","RUS","RUSSIAN FEDERATION" -"3560259584","3560267775","GB","GBR","UNITED KINGDOM" -"3560267776","3560275967","CH","CHE","SWITZERLAND" -"3560275968","3560308735","DE","DEU","GERMANY" -"3560308736","3560316927","FI","FIN","FINLAND" -"3560316928","3560325119","NL","NLD","NETHERLANDS" -"3560325120","3560333311","DK","DNK","DENMARK" -"3560333312","3560341503","RO","ROM","ROMANIA" -"3560341504","3560349695","PT","PRT","PORTUGAL" -"3560349696","3560357887","GB","GBR","UNITED KINGDOM" -"3560357888","3560366079","GR","GRC","GREECE" -"3560366080","3560366687","CH","CHE","SWITZERLAND" -"3560366688","3560366695","IT","ITA","ITALY" -"3560366696","3560366703","CH","CHE","SWITZERLAND" -"3560366704","3560366711","IT","ITA","ITALY" -"3560366712","3560374271","CH","CHE","SWITZERLAND" -"3560374272","3560382463","ES","ESP","SPAIN" -"3560382464","3560387103","FO","FRO","FAROE ISLANDS" -"3560387104","3560387111","DK","DNK","DENMARK" -"3560387112","3560390655","FO","FRO","FAROE ISLANDS" -"3560390656","3560407039","RU","RUS","RUSSIAN FEDERATION" -"3560407040","3560423423","PT","PRT","PORTUGAL" -"3560423424","3560431615","CH","CHE","SWITZERLAND" -"3560431616","3560439807","SK","SVK","SLOVAKIA" -"3560439808","3560447999","BG","BGR","BULGARIA" -"3560448000","3560449791","GB","GBR","UNITED KINGDOM" -"3560449792","3560450047","US","USA","UNITED STATES" -"3560450048","3560472575","GB","GBR","UNITED KINGDOM" -"3560472576","3560480767","MT","MLT","MALTA" -"3560480768","3560488959","IT","ITA","ITALY" -"3560488960","3560497151","MD","MDA","REPUBLIC OF MOLDOVA" -"3560497152","3560505343","LU","LUX","LUXEMBOURG" -"3560505344","3560513535","TR","TUR","TURKEY" -"3560515584","3560517631","RS","SRB","SERBIA" -"3560517632","3560521727","NL","NLD","NETHERLANDS" -"3560521728","3560529919","PT","PRT","PORTUGAL" -"3560529920","3560554495","RU","RUS","RUSSIAN FEDERATION" -"3560554496","3560562687","SA","SAU","SAUDI ARABIA" -"3560562688","3560570879","GB","GBR","UNITED KINGDOM" -"3560570880","3560579071","TR","TUR","TURKEY" -"3560579072","3560587263","GB","GBR","UNITED KINGDOM" -"3560587264","3560595455","DE","DEU","GERMANY" -"3560595456","3560603647","GE","GEO","GEORGIA" -"3560603648","3560611839","GB","GBR","UNITED KINGDOM" -"3560611840","3560620031","UA","UKR","UKRAINE" -"3560620032","3560628223","RU","RUS","RUSSIAN FEDERATION" -"3560628224","3560632207","GB","GBR","UNITED KINGDOM" -"3560632208","3560632215","NL","NLD","NETHERLANDS" -"3560632216","3560636415","GB","GBR","UNITED KINGDOM" -"3560636416","3560644607","LT","LTU","LITHUANIA" -"3560644608","3560652799","DE","DEU","GERMANY" -"3560652800","3560660991","GB","GBR","UNITED KINGDOM" -"3560660992","3560669183","RU","RUS","RUSSIAN FEDERATION" -"3560669184","3560685567","CH","CHE","SWITZERLAND" -"3560685568","3560693759","ES","ESP","SPAIN" -"3560693760","3560701951","PL","POL","POLAND" -"3560701952","3560710143","DE","DEU","GERMANY" -"3560710144","3560718335","CH","CHE","SWITZERLAND" -"3560726528","3560734719","DK","DNK","DENMARK" -"3560734720","3560742623","DE","DEU","GERMANY" -"3560742624","3560742631","GB","GBR","UNITED KINGDOM" -"3560742632","3560742911","DE","DEU","GERMANY" -"3560742912","3560751103","AT","AUT","AUSTRIA" -"3560751104","3560767487","DE","DEU","GERMANY" -"3560767488","3560832255","NL","NLD","NETHERLANDS" -"3560832256","3560832511","GB","GBR","UNITED KINGDOM" -"3560832512","3560832791","NL","NLD","NETHERLANDS" -"3560832792","3560832799","BE","BEL","BELGIUM" -"3560832800","3560833023","NL","NLD","NETHERLANDS" -"3560833024","3560841215","GB","GBR","UNITED KINGDOM" -"3560841216","3560842415","RS","SRB","SERBIA" -"3560842416","3560842423","CS","SCG","SERBIA AND MONTENEGRO" -"3560842424","3560844607","RS","SRB","SERBIA" -"3560844608","3560844623","CS","SCG","SERBIA AND MONTENEGRO" -"3560844624","3560845631","RS","SRB","SERBIA" -"3560845632","3560845663","CS","SCG","SERBIA AND MONTENEGRO" -"3560845664","3560849407","RS","SRB","SERBIA" -"3560849408","3560849663","DE","DEU","GERMANY" -"3560849664","3560849727","NL","NLD","NETHERLANDS" -"3560849728","3560852911","DE","DEU","GERMANY" -"3560852912","3560852919","TH","THA","THAILAND" -"3560852920","3560852959","DE","DEU","GERMANY" -"3560852960","3560852967","GB","GBR","UNITED KINGDOM" -"3560852968","3560857599","DE","DEU","GERMANY" -"3560857600","3560865791","SA","SAU","SAUDI ARABIA" -"3560865792","3560882175","FR","FRA","FRANCE" -"3560882176","3560890367","DE","DEU","GERMANY" -"3560890368","3560898559","NO","NOR","NORWAY" -"3560898560","3560906751","FI","FIN","FINLAND" -"3560906752","3560916383","DE","DEU","GERMANY" -"3560916384","3560916391","CH","CHE","SWITZERLAND" -"3560916392","3560919047","DE","DEU","GERMANY" -"3560919048","3560919055","CH","CHE","SWITZERLAND" -"3560919056","3560923135","DE","DEU","GERMANY" -"3560923136","3560931327","ES","ESP","SPAIN" -"3560931328","3560939523","DE","DEU","GERMANY" -"3560939524","3560939527","AT","AUT","AUSTRIA" -"3560939528","3560939535","DE","DEU","GERMANY" -"3560939536","3560939539","PT","PRT","PORTUGAL" -"3560939540","3560939543","IT","ITA","ITALY" -"3560939544","3560939555","DE","DEU","GERMANY" -"3560939556","3560939559","ES","ESP","SPAIN" -"3560939560","3560939567","DE","DEU","GERMANY" -"3560939568","3560939571","NL","NLD","NETHERLANDS" -"3560939572","3560939579","ES","ESP","SPAIN" -"3560939580","3560939583","BE","BEL","BELGIUM" -"3560939584","3560939587","DE","DEU","GERMANY" -"3560939588","3560939591","BE","BEL","BELGIUM" -"3560939592","3560939607","DE","DEU","GERMANY" -"3560939608","3560939611","IT","ITA","ITALY" -"3560939612","3560939623","DE","DEU","GERMANY" -"3560939624","3560939627","NL","NLD","NETHERLANDS" -"3560939628","3560939631","CH","CHE","SWITZERLAND" -"3560939632","3560939643","DE","DEU","GERMANY" -"3560939644","3560939647","BE","BEL","BELGIUM" -"3560939648","3560939655","DE","DEU","GERMANY" -"3560939656","3560939659","CH","CHE","SWITZERLAND" -"3560939660","3560939663","DE","DEU","GERMANY" -"3560939664","3560939667","DK","DNK","DENMARK" -"3560939668","3560939675","DE","DEU","GERMANY" -"3560939676","3560939679","PL","POL","POLAND" -"3560939680","3560939683","IT","ITA","ITALY" -"3560939684","3560939687","AT","AUT","AUSTRIA" -"3560939688","3560939691","ES","ESP","SPAIN" -"3560939692","3560939695","FR","FRA","FRANCE" -"3560939696","3560939703","DE","DEU","GERMANY" -"3560939704","3560939707","ES","ESP","SPAIN" -"3560939708","3560939719","DE","DEU","GERMANY" -"3560939720","3560939727","GR","GRC","GREECE" -"3560939728","3560939735","NL","NLD","NETHERLANDS" -"3560939736","3560939751","FR","FRA","FRANCE" -"3560939752","3560939755","IT","ITA","ITALY" -"3560939756","3560939759","DE","DEU","GERMANY" -"3560939760","3560939763","IT","ITA","ITALY" -"3560939764","3560939767","DE","DEU","GERMANY" -"3560939768","3560939771","IE","IRL","IRELAND" -"3560939772","3560939775","CZ","CZE","CZECH REPUBLIC" -"3560939776","3560939779","BE","BEL","BELGIUM" -"3560939780","3560939791","DE","DEU","GERMANY" -"3560939792","3560939795","FR","FRA","FRANCE" -"3560939796","3560939799","GB","GBR","UNITED KINGDOM" -"3560939800","3560939803","DE","DEU","GERMANY" -"3560939804","3560939807","IT","ITA","ITALY" -"3560939808","3560939811","FR","FRA","FRANCE" -"3560939812","3560939815","DE","DEU","GERMANY" -"3560939816","3560939819","CH","CHE","SWITZERLAND" -"3560939820","3560939823","DE","DEU","GERMANY" -"3560939824","3560939827","LI","LIE","LIECHTENSTEIN" -"3560939828","3560939831","FR","FRA","FRANCE" -"3560939832","3560939839","DE","DEU","GERMANY" -"3560939840","3560939843","GB","GBR","UNITED KINGDOM" -"3560939844","3560939847","ES","ESP","SPAIN" -"3560939848","3560939851","BE","BEL","BELGIUM" -"3560939852","3560939855","ES","ESP","SPAIN" -"3560939856","3560939859","FR","FRA","FRANCE" -"3560939860","3560939863","HU","HUN","HUNGARY" -"3560939864","3560939867","ES","ESP","SPAIN" -"3560939868","3560939875","DE","DEU","GERMANY" -"3560939876","3560939879","CH","CHE","SWITZERLAND" -"3560939880","3560939887","DE","DEU","GERMANY" -"3560939888","3560939891","CH","CHE","SWITZERLAND" -"3560939892","3560939895","DE","DEU","GERMANY" -"3560939896","3560939899","ES","ESP","SPAIN" -"3560939900","3560939903","GB","GBR","UNITED KINGDOM" -"3560939904","3560939907","BR","BRA","BRAZIL" -"3560939908","3560939911","NL","NLD","NETHERLANDS" -"3560939912","3560939915","RE","REU","REUNION" -"3560939916","3560939919","ES","ESP","SPAIN" -"3560939920","3560939927","DE","DEU","GERMANY" -"3560939928","3560939931","NL","NLD","NETHERLANDS" -"3560939932","3560939935","IT","ITA","ITALY" -"3560939936","3560939939","DE","DEU","GERMANY" -"3560939940","3560939943","AT","AUT","AUSTRIA" -"3560939944","3560939951","FR","FRA","FRANCE" -"3560939952","3560939955","DE","DEU","GERMANY" -"3560939956","3560939959","AT","AUT","AUSTRIA" -"3560939960","3560939963","CH","CHE","SWITZERLAND" -"3560939964","3560939967","DE","DEU","GERMANY" -"3560939968","3560939971","ES","ESP","SPAIN" -"3560939972","3560939975","DE","DEU","GERMANY" -"3560939976","3560939983","BE","BEL","BELGIUM" -"3560939984","3560939987","FR","FRA","FRANCE" -"3560939988","3560939991","ES","ESP","SPAIN" -"3560939992","3560939995","IT","ITA","ITALY" -"3560939996","3560939999","DE","DEU","GERMANY" -"3560940000","3560940007","ES","ESP","SPAIN" -"3560940008","3560940015","DE","DEU","GERMANY" -"3560940016","3560940019","BE","BEL","BELGIUM" -"3560940020","3560940023","GB","GBR","UNITED KINGDOM" -"3560940024","3560940027","GR","GRC","GREECE" -"3560940028","3560940043","DE","DEU","GERMANY" -"3560940044","3560940047","GB","GBR","UNITED KINGDOM" -"3560940048","3560940051","ES","ESP","SPAIN" -"3560940052","3560940055","BE","BEL","BELGIUM" -"3560940056","3560940059","NL","NLD","NETHERLANDS" -"3560940060","3560940063","LU","LUX","LUXEMBOURG" -"3560940064","3560940067","CH","CHE","SWITZERLAND" -"3560940068","3560940071","FR","FRA","FRANCE" -"3560940072","3560940075","DE","DEU","GERMANY" -"3560940076","3560940079","ES","ESP","SPAIN" -"3560940080","3560940087","DE","DEU","GERMANY" -"3560940088","3560940091","IT","ITA","ITALY" -"3560940092","3560940095","CH","CHE","SWITZERLAND" -"3560940096","3560940099","IT","ITA","ITALY" -"3560940100","3560940103","FR","FRA","FRANCE" -"3560940104","3560940115","DE","DEU","GERMANY" -"3560940116","3560940119","FR","FRA","FRANCE" -"3560940120","3560940123","GB","GBR","UNITED KINGDOM" -"3560940124","3560940127","DE","DEU","GERMANY" -"3560940128","3560940135","IT","ITA","ITALY" -"3560940136","3560940139","AT","AUT","AUSTRIA" -"3560940140","3560940143","HU","HUN","HUNGARY" -"3560940144","3560940147","DE","DEU","GERMANY" -"3560940148","3560940151","IT","ITA","ITALY" -"3560940152","3560940155","FR","FRA","FRANCE" -"3560940156","3560940159","ES","ESP","SPAIN" -"3560940160","3560940163","IT","ITA","ITALY" -"3560940164","3560940171","FR","FRA","FRANCE" -"3560940172","3560940175","DE","DEU","GERMANY" -"3560940176","3560940179","FR","FRA","FRANCE" -"3560940180","3560940183","BE","BEL","BELGIUM" -"3560940184","3560940187","FR","FRA","FRANCE" -"3560940188","3560940191","IT","ITA","ITALY" -"3560940192","3560940195","AT","AUT","AUSTRIA" -"3560940196","3560940199","DE","DEU","GERMANY" -"3560940200","3560940203","CY","CYP","CYPRUS" -"3560940204","3560940207","DE","DEU","GERMANY" -"3560940208","3560940211","ES","ESP","SPAIN" -"3560940212","3560940215","FR","FRA","FRANCE" -"3560940216","3560940219","IE","IRL","IRELAND" -"3560940220","3560940227","DE","DEU","GERMANY" -"3560940228","3560940231","CH","CHE","SWITZERLAND" -"3560940232","3560940235","IT","ITA","ITALY" -"3560940236","3560940239","DE","DEU","GERMANY" -"3560940240","3560940243","PT","PRT","PORTUGAL" -"3560940244","3560940247","GB","GBR","UNITED KINGDOM" -"3560940248","3560940251","DE","DEU","GERMANY" -"3560940252","3560940255","CH","CHE","SWITZERLAND" -"3560940256","3560940263","DE","DEU","GERMANY" -"3560940264","3560940267","AT","AUT","AUSTRIA" -"3560940268","3560940275","GB","GBR","UNITED KINGDOM" -"3560940276","3560940279","FR","FRA","FRANCE" -"3560940280","3560940283","AT","AUT","AUSTRIA" -"3560940284","3560940287","DE","DEU","GERMANY" -"3560940288","3560940291","FR","FRA","FRANCE" -"3560940292","3560940307","DE","DEU","GERMANY" -"3560940308","3560940311","BE","BEL","BELGIUM" -"3560940312","3560940327","DE","DEU","GERMANY" -"3560940328","3560940331","ES","ESP","SPAIN" -"3560940332","3560940339","DE","DEU","GERMANY" -"3560940340","3560940343","CH","CHE","SWITZERLAND" -"3560940344","3560940347","NL","NLD","NETHERLANDS" -"3560940348","3560940367","DE","DEU","GERMANY" -"3560940368","3560940371","FR","FRA","FRANCE" -"3560940372","3560940379","CH","CHE","SWITZERLAND" -"3560940380","3560940387","DE","DEU","GERMANY" -"3560940388","3560940391","ES","ESP","SPAIN" -"3560940392","3560940395","DE","DEU","GERMANY" -"3560940396","3560940399","IL","ISR","ISRAEL" -"3560940400","3560940403","CH","CHE","SWITZERLAND" -"3560940404","3560940407","DE","DEU","GERMANY" -"3560940408","3560940411","IT","ITA","ITALY" -"3560940412","3560940419","DE","DEU","GERMANY" -"3560940420","3560940423","GR","GRC","GREECE" -"3560940424","3560940431","DE","DEU","GERMANY" -"3560940432","3560940435","FR","FRA","FRANCE" -"3560940436","3560940439","DE","DEU","GERMANY" -"3560940440","3560940443","BE","BEL","BELGIUM" -"3560940444","3560940447","SL","SLE","SIERRA LEONE" -"3560940448","3560940451","DE","DEU","GERMANY" -"3560940452","3560940455","NL","NLD","NETHERLANDS" -"3560940456","3560940459","DE","DEU","GERMANY" -"3560940460","3560940463","HU","HUN","HUNGARY" -"3560940464","3560940467","CY","CYP","CYPRUS" -"3560940468","3560940471","DE","DEU","GERMANY" -"3560940472","3560940475","FR","FRA","FRANCE" -"3560940476","3560940479","CH","CHE","SWITZERLAND" -"3560940480","3560940487","ES","ESP","SPAIN" -"3560940488","3560940491","CZ","CZE","CZECH REPUBLIC" -"3560940492","3560940495","ES","ESP","SPAIN" -"3560940496","3560940499","IT","ITA","ITALY" -"3560940500","3560940503","DE","DEU","GERMANY" -"3560940504","3560940507","GB","GBR","UNITED KINGDOM" -"3560940508","3560940511","IT","ITA","ITALY" -"3560940512","3560940523","DE","DEU","GERMANY" -"3560940524","3560940527","FR","FRA","FRANCE" -"3560940528","3560940531","DE","DEU","GERMANY" -"3560940532","3560940535","FR","FRA","FRANCE" -"3560940536","3560940539","HU","HUN","HUNGARY" -"3560940540","3560940543","IT","ITA","ITALY" -"3560940544","3560940547","DE","DEU","GERMANY" -"3560940548","3560940551","IE","IRL","IRELAND" -"3560940552","3560940563","DE","DEU","GERMANY" -"3560940564","3560940567","GB","GBR","UNITED KINGDOM" -"3560940568","3560940571","DE","DEU","GERMANY" -"3560940572","3560940575","DK","DNK","DENMARK" -"3560940576","3560940579","ES","ESP","SPAIN" -"3560940580","3560940583","IT","ITA","ITALY" -"3560940584","3560940587","FR","FRA","FRANCE" -"3560940588","3560940591","IT","ITA","ITALY" -"3560940592","3560940595","GR","GRC","GREECE" -"3560940596","3560940599","CH","CHE","SWITZERLAND" -"3560940600","3560940603","MA","MAR","MOROCCO" -"3560940604","3560940607","GB","GBR","UNITED KINGDOM" -"3560940608","3560940611","FR","FRA","FRANCE" -"3560940612","3560940615","CH","CHE","SWITZERLAND" -"3560940616","3560940619","DE","DEU","GERMANY" -"3560940620","3560940623","AT","AUT","AUSTRIA" -"3560940624","3560940627","SM","SMR","SAN MARINO" -"3560940628","3560940631","PL","POL","POLAND" -"3560940632","3560940635","AT","AUT","AUSTRIA" -"3560940636","3560940639","DE","DEU","GERMANY" -"3560940640","3560940647","GB","GBR","UNITED KINGDOM" -"3560940648","3560940655","DE","DEU","GERMANY" -"3560940656","3560940663","IT","ITA","ITALY" -"3560940664","3560940683","DE","DEU","GERMANY" -"3560940684","3560940687","DK","DNK","DENMARK" -"3560940688","3560940691","IT","ITA","ITALY" -"3560940692","3560940695","NO","NOR","NORWAY" -"3560940696","3560940699","FR","FRA","FRANCE" -"3560940700","3560940703","GB","GBR","UNITED KINGDOM" -"3560940704","3560940707","ES","ESP","SPAIN" -"3560940708","3560940711","BE","BEL","BELGIUM" -"3560940712","3560940715","DE","DEU","GERMANY" -"3560940716","3560940719","ES","ESP","SPAIN" -"3560940720","3560940723","PL","POL","POLAND" -"3560940724","3560940727","DE","DEU","GERMANY" -"3560940728","3560940731","FR","FRA","FRANCE" -"3560940732","3560940735","DE","DEU","GERMANY" -"3560940736","3560940739","DK","DNK","DENMARK" -"3560940740","3560940743","IT","ITA","ITALY" -"3560940744","3560940751","DE","DEU","GERMANY" -"3560940752","3560940755","IE","IRL","IRELAND" -"3560940756","3560940763","FR","FRA","FRANCE" -"3560940764","3560940767","CH","CHE","SWITZERLAND" -"3560940768","3560940779","DE","DEU","GERMANY" -"3560940780","3560940783","IT","ITA","ITALY" -"3560940784","3560940787","NL","NLD","NETHERLANDS" -"3560940788","3560940791","GB","GBR","UNITED KINGDOM" -"3560940792","3560940799","ES","ESP","SPAIN" -"3560940800","3560940803","DE","DEU","GERMANY" -"3560940804","3560940807","GB","GBR","UNITED KINGDOM" -"3560940808","3560940811","IT","ITA","ITALY" -"3560940812","3560940815","DE","DEU","GERMANY" -"3560940816","3560940819","FR","FRA","FRANCE" -"3560940820","3560940823","NL","NLD","NETHERLANDS" -"3560940824","3560940827","IT","ITA","ITALY" -"3560940828","3560940831","ES","ESP","SPAIN" -"3560940832","3560940839","DE","DEU","GERMANY" -"3560940840","3560940843","IT","ITA","ITALY" -"3560940844","3560940851","ES","ESP","SPAIN" -"3560940852","3560940859","DE","DEU","GERMANY" -"3560940860","3560940863","PT","PRT","PORTUGAL" -"3560940864","3560940867","IT","ITA","ITALY" -"3560940868","3560940875","DE","DEU","GERMANY" -"3560940876","3560940879","FR","FRA","FRANCE" -"3560940880","3560940883","IT","ITA","ITALY" -"3560940884","3560940887","NL","NLD","NETHERLANDS" -"3560940888","3560940891","LU","LUX","LUXEMBOURG" -"3560940892","3560940895","ES","ESP","SPAIN" -"3560940896","3560940899","DE","DEU","GERMANY" -"3560940900","3560940903","NL","NLD","NETHERLANDS" -"3560940904","3560940907","DE","DEU","GERMANY" -"3560940908","3560940915","GB","GBR","UNITED KINGDOM" -"3560940916","3560940923","DE","DEU","GERMANY" -"3560940924","3560940927","ES","ESP","SPAIN" -"3560940928","3560940931","GR","GRC","GREECE" -"3560940932","3560940935","CH","CHE","SWITZERLAND" -"3560940936","3560940939","IT","ITA","ITALY" -"3560940940","3560940951","DE","DEU","GERMANY" -"3560940952","3560940955","AT","AUT","AUSTRIA" -"3560940956","3560940963","NL","NLD","NETHERLANDS" -"3560940964","3560940967","DE","DEU","GERMANY" -"3560940968","3560940971","NL","NLD","NETHERLANDS" -"3560940972","3560940975","DE","DEU","GERMANY" -"3560940976","3560940979","FR","FRA","FRANCE" -"3560940980","3560940983","LU","LUX","LUXEMBOURG" -"3560940984","3560940987","IT","ITA","ITALY" -"3560940988","3560940995","DE","DEU","GERMANY" -"3560940996","3560940999","DK","DNK","DENMARK" -"3560941000","3560941003","ES","ESP","SPAIN" -"3560941004","3560941007","PL","POL","POLAND" -"3560941008","3560941011","DE","DEU","GERMANY" -"3560941012","3560941015","FR","FRA","FRANCE" -"3560941016","3560941019","DE","DEU","GERMANY" -"3560941020","3560941023","IT","ITA","ITALY" -"3560941024","3560941027","FR","FRA","FRANCE" -"3560941028","3560941031","CH","CHE","SWITZERLAND" -"3560941032","3560941035","FR","FRA","FRANCE" -"3560941036","3560941039","DE","DEU","GERMANY" -"3560941040","3560941043","FR","FRA","FRANCE" -"3560941044","3560941047","DE","DEU","GERMANY" -"3560941048","3560941051","GR","GRC","GREECE" -"3560941052","3560941059","FR","FRA","FRANCE" -"3560941060","3560941063","GB","GBR","UNITED KINGDOM" -"3560941064","3560941071","FR","FRA","FRANCE" -"3560941072","3560941075","NL","NLD","NETHERLANDS" -"3560941076","3560941079","GB","GBR","UNITED KINGDOM" -"3560941080","3560941083","BE","BEL","BELGIUM" -"3560941084","3560941087","IT","ITA","ITALY" -"3560941088","3560941091","DE","DEU","GERMANY" -"3560941092","3560941095","BE","BEL","BELGIUM" -"3560941096","3560941099","AT","AUT","AUSTRIA" -"3560941100","3560941103","IT","ITA","ITALY" -"3560941104","3560941107","FR","FRA","FRANCE" -"3560941108","3560941119","DE","DEU","GERMANY" -"3560941120","3560941123","BE","BEL","BELGIUM" -"3560941124","3560941127","FR","FRA","FRANCE" -"3560941128","3560941131","DE","DEU","GERMANY" -"3560941132","3560941135","GB","GBR","UNITED KINGDOM" -"3560941136","3560941139","ES","ESP","SPAIN" -"3560941140","3560941147","DE","DEU","GERMANY" -"3560941148","3560941151","IT","ITA","ITALY" -"3560941152","3560941155","DK","DNK","DENMARK" -"3560941156","3560941159","ES","ESP","SPAIN" -"3560941160","3560941163","IT","ITA","ITALY" -"3560941164","3560941167","DE","DEU","GERMANY" -"3560941168","3560941171","NL","NLD","NETHERLANDS" -"3560941172","3560941175","DE","DEU","GERMANY" -"3560941176","3560941179","ES","ESP","SPAIN" -"3560941180","3560941183","GB","GBR","UNITED KINGDOM" -"3560941184","3560941187","IT","ITA","ITALY" -"3560941188","3560941191","ES","ESP","SPAIN" -"3560941192","3560941195","CH","CHE","SWITZERLAND" -"3560941196","3560941199","FR","FRA","FRANCE" -"3560941200","3560941203","DE","DEU","GERMANY" -"3560941204","3560941207","IT","ITA","ITALY" -"3560941208","3560941211","MA","MAR","MOROCCO" -"3560941212","3560941215","DE","DEU","GERMANY" -"3560941216","3560941219","NL","NLD","NETHERLANDS" -"3560941220","3560941223","GB","GBR","UNITED KINGDOM" -"3560941224","3560941227","DE","DEU","GERMANY" -"3560941228","3560941231","SE","SWE","SWEDEN" -"3560941232","3560941235","FR","FRA","FRANCE" -"3560941236","3560941243","DE","DEU","GERMANY" -"3560941244","3560941251","IT","ITA","ITALY" -"3560941252","3560941255","FR","FRA","FRANCE" -"3560941256","3560941259","AT","AUT","AUSTRIA" -"3560941260","3560941263","GB","GBR","UNITED KINGDOM" -"3560941264","3560941271","ES","ESP","SPAIN" -"3560941272","3560941275","DK","DNK","DENMARK" -"3560941276","3560941279","GR","GRC","GREECE" -"3560941280","3560941283","NL","NLD","NETHERLANDS" -"3560941284","3560941287","DE","DEU","GERMANY" -"3560941288","3560941291","ES","ESP","SPAIN" -"3560941292","3560941295","DE","DEU","GERMANY" -"3560941296","3560941303","IT","ITA","ITALY" -"3560941304","3560941307","FR","FRA","FRANCE" -"3560941308","3560941315","DE","DEU","GERMANY" -"3560941316","3560941319","SE","SWE","SWEDEN" -"3560941320","3560941323","ES","ESP","SPAIN" -"3560941324","3560941331","IT","ITA","ITALY" -"3560941332","3560941335","PT","PRT","PORTUGAL" -"3560941336","3560941339","BE","BEL","BELGIUM" -"3560941340","3560941343","GB","GBR","UNITED KINGDOM" -"3560941344","3560941347","FR","FRA","FRANCE" -"3560941348","3560941351","IE","IRL","IRELAND" -"3560941352","3560941355","NL","NLD","NETHERLANDS" -"3560941356","3560941359","ES","ESP","SPAIN" -"3560941360","3560941367","DE","DEU","GERMANY" -"3560941368","3560941371","DK","DNK","DENMARK" -"3560941372","3560941379","DE","DEU","GERMANY" -"3560941380","3560941383","CH","CHE","SWITZERLAND" -"3560941384","3560941387","IE","IRL","IRELAND" -"3560941388","3560941391","SE","SWE","SWEDEN" -"3560941392","3560941395","DK","DNK","DENMARK" -"3560941396","3560941399","IS","ISL","ICELAND" -"3560941400","3560941407","DE","DEU","GERMANY" -"3560941408","3560941411","CH","CHE","SWITZERLAND" -"3560941412","3560941415","IT","ITA","ITALY" -"3560941416","3560941419","DE","DEU","GERMANY" -"3560941420","3560941423","FR","FRA","FRANCE" -"3560941424","3560941427","DE","DEU","GERMANY" -"3560941428","3560941431","FR","FRA","FRANCE" -"3560941432","3560941435","DE","DEU","GERMANY" -"3560941436","3560941439","IN","IND","INDIA" -"3560941440","3560941443","DE","DEU","GERMANY" -"3560941444","3560941447","ES","ESP","SPAIN" -"3560941448","3560941459","GB","GBR","UNITED KINGDOM" -"3560941460","3560941467","DE","DEU","GERMANY" -"3560941468","3560941471","CH","CHE","SWITZERLAND" -"3560941472","3560941475","BE","BEL","BELGIUM" -"3560941476","3560941479","ES","ESP","SPAIN" -"3560941480","3560941483","DE","DEU","GERMANY" -"3560941484","3560941487","ES","ESP","SPAIN" -"3560941488","3560941491","DE","DEU","GERMANY" -"3560941492","3560941495","GB","GBR","UNITED KINGDOM" -"3560941496","3560941499","FR","FRA","FRANCE" -"3560941500","3560941503","ES","ESP","SPAIN" -"3560941504","3560941507","DE","DEU","GERMANY" -"3560941508","3560941511","IT","ITA","ITALY" -"3560941512","3560941515","AT","AUT","AUSTRIA" -"3560941516","3560941519","SE","SWE","SWEDEN" -"3560941520","3560941523","NO","NOR","NORWAY" -"3560941524","3560941535","DE","DEU","GERMANY" -"3560941536","3560941539","DK","DNK","DENMARK" -"3560941540","3560941543","FR","FRA","FRANCE" -"3560941544","3560941547","GB","GBR","UNITED KINGDOM" -"3560941548","3560941551","DE","DEU","GERMANY" -"3560941552","3560941555","IT","ITA","ITALY" -"3560941556","3560941559","DE","DEU","GERMANY" -"3560941560","3560941563","GB","GBR","UNITED KINGDOM" -"3560941564","3560941567","GR","GRC","GREECE" -"3560941568","3560941587","DE","DEU","GERMANY" -"3560941588","3560941591","ES","ESP","SPAIN" -"3560941592","3560941599","DE","DEU","GERMANY" -"3560941600","3560941603","FR","FRA","FRANCE" -"3560941604","3560941607","CH","CHE","SWITZERLAND" -"3560941608","3560941611","GB","GBR","UNITED KINGDOM" -"3560941612","3560941623","DE","DEU","GERMANY" -"3560941624","3560941627","GB","GBR","UNITED KINGDOM" -"3560941628","3560941631","ES","ESP","SPAIN" -"3560941632","3560941635","NL","NLD","NETHERLANDS" -"3560941636","3560941639","BE","BEL","BELGIUM" -"3560941640","3560941643","GB","GBR","UNITED KINGDOM" -"3560941644","3560941647","BE","BEL","BELGIUM" -"3560941648","3560941651","NO","NOR","NORWAY" -"3560941652","3560941655","DE","DEU","GERMANY" -"3560941656","3560941659","GB","GBR","UNITED KINGDOM" -"3560941660","3560941663","NL","NLD","NETHERLANDS" -"3560941664","3560941671","DE","DEU","GERMANY" -"3560941672","3560941679","FR","FRA","FRANCE" -"3560941680","3560941683","GB","GBR","UNITED KINGDOM" -"3560941684","3560941687","IT","ITA","ITALY" -"3560941688","3560941691","DE","DEU","GERMANY" -"3560941692","3560941695","IT","ITA","ITALY" -"3560941696","3560941699","FR","FRA","FRANCE" -"3560941700","3560941703","GB","GBR","UNITED KINGDOM" -"3560941704","3560941707","DE","DEU","GERMANY" -"3560941708","3560941711","CH","CHE","SWITZERLAND" -"3560941712","3560941715","FR","FRA","FRANCE" -"3560941716","3560941723","DE","DEU","GERMANY" -"3560941724","3560941727","FR","FRA","FRANCE" -"3560941728","3560941735","DE","DEU","GERMANY" -"3560941736","3560941739","NL","NLD","NETHERLANDS" -"3560941740","3560941743","NO","NOR","NORWAY" -"3560941744","3560941747","FR","FRA","FRANCE" -"3560941748","3560941751","ES","ESP","SPAIN" -"3560941752","3560941755","BE","BEL","BELGIUM" -"3560941756","3560941771","DE","DEU","GERMANY" -"3560941772","3560941787","GB","GBR","UNITED KINGDOM" -"3560941788","3560941791","DE","DEU","GERMANY" -"3560941792","3560941795","ES","ESP","SPAIN" -"3560941796","3560941799","FR","FRA","FRANCE" -"3560941800","3560941803","NL","NLD","NETHERLANDS" -"3560941804","3560941807","ES","ESP","SPAIN" -"3560941808","3560941811","FR","FRA","FRANCE" -"3560941812","3560941815","NO","NOR","NORWAY" -"3560941816","3560941819","FR","FRA","FRANCE" -"3560941820","3560941823","NL","NLD","NETHERLANDS" -"3560941824","3560941827","DE","DEU","GERMANY" -"3560941828","3560941831","ES","ESP","SPAIN" -"3560941832","3560941835","GB","GBR","UNITED KINGDOM" -"3560941836","3560941839","DE","DEU","GERMANY" -"3560941840","3560941843","GB","GBR","UNITED KINGDOM" -"3560941844","3560941847","IT","ITA","ITALY" -"3560941848","3560941851","BE","BEL","BELGIUM" -"3560941852","3560941855","CH","CHE","SWITZERLAND" -"3560941856","3560941859","BE","BEL","BELGIUM" -"3560941860","3560941867","DE","DEU","GERMANY" -"3560941868","3560941871","AT","AUT","AUSTRIA" -"3560941872","3560941875","GB","GBR","UNITED KINGDOM" -"3560941876","3560941879","NL","NLD","NETHERLANDS" -"3560941880","3560941883","BG","BGR","BULGARIA" -"3560941884","3560941887","DE","DEU","GERMANY" -"3560941888","3560941891","ES","ESP","SPAIN" -"3560941892","3560941895","IT","ITA","ITALY" -"3560941896","3560941899","ES","ESP","SPAIN" -"3560941900","3560941903","DE","DEU","GERMANY" -"3560941904","3560941907","GB","GBR","UNITED KINGDOM" -"3560941908","3560941911","DE","DEU","GERMANY" -"3560941912","3560941919","FR","FRA","FRANCE" -"3560941920","3560941931","DE","DEU","GERMANY" -"3560941932","3560941935","CH","CHE","SWITZERLAND" -"3560941936","3560941947","DE","DEU","GERMANY" -"3560941948","3560941951","DK","DNK","DENMARK" -"3560941952","3560941955","IT","ITA","ITALY" -"3560941956","3560941959","DE","DEU","GERMANY" -"3560941960","3560941963","LU","LUX","LUXEMBOURG" -"3560941964","3560941967","FR","FRA","FRANCE" -"3560941968","3560941971","DE","DEU","GERMANY" -"3560941972","3560941975","DK","DNK","DENMARK" -"3560941976","3560941979","IT","ITA","ITALY" -"3560941980","3560941983","DE","DEU","GERMANY" -"3560941984","3560941987","NL","NLD","NETHERLANDS" -"3560941988","3560941991","DE","DEU","GERMANY" -"3560941992","3560941995","GB","GBR","UNITED KINGDOM" -"3560941996","3560941999","BE","BEL","BELGIUM" -"3560942000","3560942003","FR","FRA","FRANCE" -"3560942004","3560942007","GB","GBR","UNITED KINGDOM" -"3560942008","3560942011","IT","ITA","ITALY" -"3560942012","3560942015","DE","DEU","GERMANY" -"3560942016","3560942019","NL","NLD","NETHERLANDS" -"3560942020","3560942023","ES","ESP","SPAIN" -"3560942024","3560942027","CH","CHE","SWITZERLAND" -"3560942028","3560942035","DE","DEU","GERMANY" -"3560942036","3560942039","GB","GBR","UNITED KINGDOM" -"3560942040","3560942047","DE","DEU","GERMANY" -"3560942048","3560942051","IT","ITA","ITALY" -"3560942052","3560942055","DE","DEU","GERMANY" -"3560942056","3560942059","IS","ISL","ICELAND" -"3560942060","3560942063","GB","GBR","UNITED KINGDOM" -"3560942064","3560942067","ES","ESP","SPAIN" -"3560942068","3560942071","BE","BEL","BELGIUM" -"3560942072","3560942083","DE","DEU","GERMANY" -"3560942084","3560942087","FR","FRA","FRANCE" -"3560942088","3560942095","DE","DEU","GERMANY" -"3560942096","3560942099","FR","FRA","FRANCE" -"3560942100","3560942103","DE","DEU","GERMANY" -"3560942104","3560942107","NL","NLD","NETHERLANDS" -"3560942108","3560942115","DE","DEU","GERMANY" -"3560942116","3560942119","HU","HUN","HUNGARY" -"3560942120","3560942123","AT","AUT","AUSTRIA" -"3560942124","3560942127","BE","BEL","BELGIUM" -"3560942128","3560942131","DE","DEU","GERMANY" -"3560942132","3560942135","ES","ESP","SPAIN" -"3560942136","3560942143","DE","DEU","GERMANY" -"3560942144","3560942147","GB","GBR","UNITED KINGDOM" -"3560942148","3560942151","DE","DEU","GERMANY" -"3560942152","3560942155","IT","ITA","ITALY" -"3560942156","3560942159","ES","ESP","SPAIN" -"3560942160","3560942163","DE","DEU","GERMANY" -"3560942164","3560942171","ES","ESP","SPAIN" -"3560942172","3560942175","SE","SWE","SWEDEN" -"3560942176","3560942179","BE","BEL","BELGIUM" -"3560942180","3560942183","ES","ESP","SPAIN" -"3560942184","3560942191","DE","DEU","GERMANY" -"3560942192","3560942195","HU","HUN","HUNGARY" -"3560942196","3560942199","ES","ESP","SPAIN" -"3560942200","3560942203","FR","FRA","FRANCE" -"3560942204","3560942207","AT","AUT","AUSTRIA" -"3560942208","3560942211","DE","DEU","GERMANY" -"3560942212","3560942219","IT","ITA","ITALY" -"3560942220","3560942227","FR","FRA","FRANCE" -"3560942228","3560942231","IT","ITA","ITALY" -"3560942232","3560942243","DE","DEU","GERMANY" -"3560942244","3560942247","IT","ITA","ITALY" -"3560942248","3560942251","TR","TUR","TURKEY" -"3560942252","3560942255","GB","GBR","UNITED KINGDOM" -"3560942256","3560942259","DE","DEU","GERMANY" -"3560942260","3560942263","ES","ESP","SPAIN" -"3560942264","3560942267","NL","NLD","NETHERLANDS" -"3560942268","3560942271","DE","DEU","GERMANY" -"3560942272","3560942275","PL","POL","POLAND" -"3560942276","3560942279","IT","ITA","ITALY" -"3560942280","3560942283","NL","NLD","NETHERLANDS" -"3560942284","3560942287","DK","DNK","DENMARK" -"3560942288","3560942291","FR","FRA","FRANCE" -"3560942292","3560942295","BH","BHR","BAHRAIN" -"3560942296","3560942299","MA","MAR","MOROCCO" -"3560942300","3560942307","DE","DEU","GERMANY" -"3560942308","3560942319","ES","ESP","SPAIN" -"3560942320","3560942323","DE","DEU","GERMANY" -"3560942324","3560942327","IT","ITA","ITALY" -"3560942328","3560942339","PT","PRT","PORTUGAL" -"3560942340","3560942343","DE","DEU","GERMANY" -"3560942344","3560942347","FR","FRA","FRANCE" -"3560942348","3560942351","GR","GRC","GREECE" -"3560942352","3560942355","ES","ESP","SPAIN" -"3560942356","3560942359","IT","ITA","ITALY" -"3560942360","3560942363","AT","AUT","AUSTRIA" -"3560942364","3560942367","DE","DEU","GERMANY" -"3560942368","3560942375","FR","FRA","FRANCE" -"3560942376","3560942379","DE","DEU","GERMANY" -"3560942380","3560942383","GB","GBR","UNITED KINGDOM" -"3560942384","3560942387","DE","DEU","GERMANY" -"3560942388","3560942391","IT","ITA","ITALY" -"3560942392","3560942407","DE","DEU","GERMANY" -"3560942408","3560942411","GB","GBR","UNITED KINGDOM" -"3560942412","3560942415","DE","DEU","GERMANY" -"3560942416","3560942419","IT","ITA","ITALY" -"3560942420","3560942423","FR","FRA","FRANCE" -"3560942424","3560942427","NO","NOR","NORWAY" -"3560942428","3560942447","DE","DEU","GERMANY" -"3560942448","3560942455","CH","CHE","SWITZERLAND" -"3560942456","3560942459","ES","ESP","SPAIN" -"3560942460","3560942463","RU","RUS","RUSSIAN FEDERATION" -"3560942464","3560942467","BE","BEL","BELGIUM" -"3560942468","3560942471","ES","ESP","SPAIN" -"3560942472","3560942475","DE","DEU","GERMANY" -"3560942476","3560942479","CH","CHE","SWITZERLAND" -"3560942480","3560942483","ES","ESP","SPAIN" -"3560942484","3560942487","HU","HUN","HUNGARY" -"3560942488","3560942495","FR","FRA","FRANCE" -"3560942496","3560942499","ES","ESP","SPAIN" -"3560942500","3560942503","DE","DEU","GERMANY" -"3560942504","3560942511","ES","ESP","SPAIN" -"3560942512","3560942515","IT","ITA","ITALY" -"3560942516","3560942523","DE","DEU","GERMANY" -"3560942524","3560942527","NL","NLD","NETHERLANDS" -"3560942528","3560942535","DE","DEU","GERMANY" -"3560942536","3560942539","FR","FRA","FRANCE" -"3560942540","3560942543","DE","DEU","GERMANY" -"3560942544","3560942547","CH","CHE","SWITZERLAND" -"3560942548","3560942551","DK","DNK","DENMARK" -"3560942552","3560942555","DE","DEU","GERMANY" -"3560942556","3560942559","FR","FRA","FRANCE" -"3560942560","3560942563","IT","ITA","ITALY" -"3560942564","3560942567","ES","ESP","SPAIN" -"3560942568","3560942571","DE","DEU","GERMANY" -"3560942572","3560942579","FR","FRA","FRANCE" -"3560942580","3560942583","DE","DEU","GERMANY" -"3560942584","3560942587","GB","GBR","UNITED KINGDOM" -"3560942588","3560942590","ES","ESP","SPAIN" -"3560942591","3560942599","DE","DEU","GERMANY" -"3560942600","3560942603","DK","DNK","DENMARK" -"3560942604","3560942607","LU","LUX","LUXEMBOURG" -"3560942608","3560942619","DE","DEU","GERMANY" -"3560942620","3560942623","BE","BEL","BELGIUM" -"3560942624","3560942627","IT","ITA","ITALY" -"3560942628","3560942631","GB","GBR","UNITED KINGDOM" -"3560942632","3560942635","FR","FRA","FRANCE" -"3560942636","3560942643","DE","DEU","GERMANY" -"3560942644","3560942647","FR","FRA","FRANCE" -"3560942648","3560942651","DE","DEU","GERMANY" -"3560942652","3560942655","GR","GRC","GREECE" -"3560942656","3560942663","ES","ESP","SPAIN" -"3560942664","3560942667","NL","NLD","NETHERLANDS" -"3560942668","3560942675","IT","ITA","ITALY" -"3560942676","3560942679","BE","BEL","BELGIUM" -"3560942680","3560942683","DE","DEU","GERMANY" -"3560942684","3560942687","BE","BEL","BELGIUM" -"3560942688","3560942691","NL","NLD","NETHERLANDS" -"3560942692","3560942695","LU","LUX","LUXEMBOURG" -"3560942696","3560942699","DE","DEU","GERMANY" -"3560942700","3560942703","ES","ESP","SPAIN" -"3560942704","3560942707","DE","DEU","GERMANY" -"3560942708","3560942711","IT","ITA","ITALY" -"3560942712","3560942715","LU","LUX","LUXEMBOURG" -"3560942716","3560942719","BE","BEL","BELGIUM" -"3560942720","3560942727","IT","ITA","ITALY" -"3560942728","3560942731","GB","GBR","UNITED KINGDOM" -"3560942732","3560942735","DE","DEU","GERMANY" -"3560942736","3560942739","CH","CHE","SWITZERLAND" -"3560942740","3560942743","ES","ESP","SPAIN" -"3560942744","3560942751","GB","GBR","UNITED KINGDOM" -"3560942752","3560942763","DE","DEU","GERMANY" -"3560942764","3560942767","FR","FRA","FRANCE" -"3560942768","3560942771","DE","DEU","GERMANY" -"3560942772","3560942775","ES","ESP","SPAIN" -"3560942776","3560942779","DE","DEU","GERMANY" -"3560942780","3560942783","CH","CHE","SWITZERLAND" -"3560942784","3560942787","DE","DEU","GERMANY" -"3560942788","3560942791","HU","HUN","HUNGARY" -"3560942792","3560942795","DE","DEU","GERMANY" -"3560942796","3560942799","FR","FRA","FRANCE" -"3560942800","3560942803","AT","AUT","AUSTRIA" -"3560942804","3560942807","TR","TUR","TURKEY" -"3560942808","3560942811","AT","AUT","AUSTRIA" -"3560942812","3560942815","FR","FRA","FRANCE" -"3560942816","3560942819","TR","TUR","TURKEY" -"3560942820","3560942823","ES","ESP","SPAIN" -"3560942824","3560942827","GB","GBR","UNITED KINGDOM" -"3560942828","3560942831","AT","AUT","AUSTRIA" -"3560942832","3560942835","IT","ITA","ITALY" -"3560942836","3560942839","CH","CHE","SWITZERLAND" -"3560942840","3560942843","BE","BEL","BELGIUM" -"3560942844","3560942847","ES","ESP","SPAIN" -"3560942848","3560942851","IT","ITA","ITALY" -"3560942852","3560942855","ES","ESP","SPAIN" -"3560942856","3560942859","DE","DEU","GERMANY" -"3560942860","3560942863","IT","ITA","ITALY" -"3560942864","3560942871","DE","DEU","GERMANY" -"3560942872","3560942875","IT","ITA","ITALY" -"3560942876","3560942879","PL","POL","POLAND" -"3560942880","3560942883","GB","GBR","UNITED KINGDOM" -"3560942884","3560942887","DE","DEU","GERMANY" -"3560942888","3560942891","FR","FRA","FRANCE" -"3560942892","3560942895","DE","DEU","GERMANY" -"3560942896","3560942899","ES","ESP","SPAIN" -"3560942900","3560942903","DE","DEU","GERMANY" -"3560942904","3560942907","CH","CHE","SWITZERLAND" -"3560942908","3560942911","DE","DEU","GERMANY" -"3560942912","3560942915","ES","ESP","SPAIN" -"3560942916","3560942919","BE","BEL","BELGIUM" -"3560942920","3560942923","DE","DEU","GERMANY" -"3560942924","3560942927","IT","ITA","ITALY" -"3560942928","3560942931","SE","SWE","SWEDEN" -"3560942932","3560942935","AT","AUT","AUSTRIA" -"3560942936","3560942939","DE","DEU","GERMANY" -"3560942940","3560942943","AE","ARE","UNITED ARAB EMIRATES" -"3560942944","3560942951","DE","DEU","GERMANY" -"3560942952","3560942955","ES","ESP","SPAIN" -"3560942956","3560942959","DE","DEU","GERMANY" -"3560942960","3560942963","GB","GBR","UNITED KINGDOM" -"3560942964","3560942975","DE","DEU","GERMANY" -"3560942976","3560942979","IT","ITA","ITALY" -"3560942980","3560942987","DE","DEU","GERMANY" -"3560942988","3560942999","IT","ITA","ITALY" -"3560943000","3560943003","PL","POL","POLAND" -"3560943004","3560943007","DK","DNK","DENMARK" -"3560943008","3560943011","CH","CHE","SWITZERLAND" -"3560943012","3560943015","IT","ITA","ITALY" -"3560943016","3560943019","ES","ESP","SPAIN" -"3560943020","3560943023","DE","DEU","GERMANY" -"3560943024","3560943027","GR","GRC","GREECE" -"3560943028","3560943031","DE","DEU","GERMANY" -"3560943032","3560943035","FR","FRA","FRANCE" -"3560943036","3560943039","PL","POL","POLAND" -"3560943040","3560943043","NO","NOR","NORWAY" -"3560943044","3560943047","ES","ESP","SPAIN" -"3560943048","3560943051","HR","HRV","CROATIA" -"3560943052","3560943055","CY","CYP","CYPRUS" -"3560943056","3560943059","BE","BEL","BELGIUM" -"3560943060","3560943075","DE","DEU","GERMANY" -"3560943076","3560943079","ES","ESP","SPAIN" -"3560943080","3560943095","DE","DEU","GERMANY" -"3560943096","3560943099","PL","POL","POLAND" -"3560943100","3560943109","DE","DEU","GERMANY" -"3560943110","3560943111","ES","ESP","SPAIN" -"3560943112","3560943113","DE","DEU","GERMANY" -"3560943114","3560943115","ES","ESP","SPAIN" -"3560943116","3560943116","DK","DNK","DENMARK" -"3560943117","3560943117","IL","ISR","ISRAEL" -"3560943118","3560943118","DE","DEU","GERMANY" -"3560943119","3560943119","IT","ITA","ITALY" -"3560943120","3560943120","DE","DEU","GERMANY" -"3560943121","3560943121","CH","CHE","SWITZERLAND" -"3560943122","3560943122","ES","ESP","SPAIN" -"3560943123","3560943125","DE","DEU","GERMANY" -"3560943126","3560943126","FR","FRA","FRANCE" -"3560943127","3560943127","HU","HUN","HUNGARY" -"3560943128","3560943129","DE","DEU","GERMANY" -"3560943130","3560943130","BE","BEL","BELGIUM" -"3560943131","3560943131","RU","RUS","RUSSIAN FEDERATION" -"3560943132","3560943132","BE","BEL","BELGIUM" -"3560943133","3560943133","ES","ESP","SPAIN" -"3560943134","3560943136","DE","DEU","GERMANY" -"3560943137","3560943137","ES","ESP","SPAIN" -"3560943138","3560943138","CH","CHE","SWITZERLAND" -"3560943139","3560943139","DE","DEU","GERMANY" -"3560943140","3560943140","ES","ESP","SPAIN" -"3560943141","3560943141","CH","CHE","SWITZERLAND" -"3560943142","3560943142","DE","DEU","GERMANY" -"3560943143","3560943145","HU","HUN","HUNGARY" -"3560943146","3560943146","IE","IRL","IRELAND" -"3560943147","3560943147","CH","CHE","SWITZERLAND" -"3560943148","3560943149","DE","DEU","GERMANY" -"3560943150","3560943150","ES","ESP","SPAIN" -"3560943151","3560943151","IT","ITA","ITALY" -"3560943152","3560943152","HU","HUN","HUNGARY" -"3560943153","3560943154","DE","DEU","GERMANY" -"3560943155","3560943155","FR","FRA","FRANCE" -"3560943156","3560943157","DE","DEU","GERMANY" -"3560943158","3560943158","FR","FRA","FRANCE" -"3560943159","3560943159","IT","ITA","ITALY" -"3560943160","3560943160","NO","NOR","NORWAY" -"3560943161","3560943161","BE","BEL","BELGIUM" -"3560943162","3560943162","GR","GRC","GREECE" -"3560943163","3560943163","CH","CHE","SWITZERLAND" -"3560943164","3560943164","PL","POL","POLAND" -"3560943165","3560943165","FR","FRA","FRANCE" -"3560943166","3560943166","GB","GBR","UNITED KINGDOM" -"3560943167","3560943167","FR","FRA","FRANCE" -"3560943168","3560943168","ES","ESP","SPAIN" -"3560943169","3560943169","DE","DEU","GERMANY" -"3560943170","3560943170","ES","ESP","SPAIN" -"3560943171","3560943171","IT","ITA","ITALY" -"3560943172","3560943172","ES","ESP","SPAIN" -"3560943173","3560943173","BE","BEL","BELGIUM" -"3560943174","3560943175","DE","DEU","GERMANY" -"3560943176","3560943177","CH","CHE","SWITZERLAND" -"3560943178","3560943178","IT","ITA","ITALY" -"3560943179","3560943179","PL","POL","POLAND" -"3560943180","3560943180","GB","GBR","UNITED KINGDOM" -"3560943181","3560943181","DE","DEU","GERMANY" -"3560943182","3560943183","ES","ESP","SPAIN" -"3560943184","3560943184","IT","ITA","ITALY" -"3560943185","3560943185","DK","DNK","DENMARK" -"3560943186","3560943186","ES","ESP","SPAIN" -"3560943187","3560943187","PT","PRT","PORTUGAL" -"3560943188","3560943188","IT","ITA","ITALY" -"3560943189","3560943192","DE","DEU","GERMANY" -"3560943193","3560943193","ES","ESP","SPAIN" -"3560943194","3560943194","AT","AUT","AUSTRIA" -"3560943195","3560943195","PL","POL","POLAND" -"3560943196","3560943197","IT","ITA","ITALY" -"3560943198","3560943198","DE","DEU","GERMANY" -"3560943199","3560943199","PT","PRT","PORTUGAL" -"3560943200","3560943200","AT","AUT","AUSTRIA" -"3560943201","3560943201","IT","ITA","ITALY" -"3560943202","3560943202","IL","ISR","ISRAEL" -"3560943203","3560943203","DE","DEU","GERMANY" -"3560943204","3560943204","CH","CHE","SWITZERLAND" -"3560943205","3560943205","IT","ITA","ITALY" -"3560943206","3560943207","DE","DEU","GERMANY" -"3560943208","3560943208","AT","AUT","AUSTRIA" -"3560943209","3560943210","ES","ESP","SPAIN" -"3560943211","3560943211","FR","FRA","FRANCE" -"3560943212","3560943212","DE","DEU","GERMANY" -"3560943213","3560943213","FR","FRA","FRANCE" -"3560943214","3560943214","PL","POL","POLAND" -"3560943215","3560943218","DE","DEU","GERMANY" -"3560943219","3560943219","ES","ESP","SPAIN" -"3560943220","3560943221","DE","DEU","GERMANY" -"3560943222","3560943222","ES","ESP","SPAIN" -"3560943223","3560943223","FR","FRA","FRANCE" -"3560943224","3560943224","DE","DEU","GERMANY" -"3560943225","3560943226","GR","GRC","GREECE" -"3560943227","3560943227","DE","DEU","GERMANY" -"3560943228","3560943230","NL","NLD","NETHERLANDS" -"3560943231","3560943232","FR","FRA","FRANCE" -"3560943233","3560943233","PL","POL","POLAND" -"3560943234","3560943234","EE","EST","ESTONIA" -"3560943235","3560943235","CH","CHE","SWITZERLAND" -"3560943236","3560943237","NL","NLD","NETHERLANDS" -"3560943238","3560943238","ES","ESP","SPAIN" -"3560943239","3560943239","FR","FRA","FRANCE" -"3560943240","3560943240","GB","GBR","UNITED KINGDOM" -"3560943241","3560943241","FR","FRA","FRANCE" -"3560943242","3560943242","DE","DEU","GERMANY" -"3560943243","3560943243","FR","FRA","FRANCE" -"3560943244","3560943244","PL","POL","POLAND" -"3560943245","3560943245","CH","CHE","SWITZERLAND" -"3560943246","3560943247","DE","DEU","GERMANY" -"3560943248","3560943248","GR","GRC","GREECE" -"3560943249","3560943249","CH","CHE","SWITZERLAND" -"3560943250","3560943250","AT","AUT","AUSTRIA" -"3560943251","3560943251","GB","GBR","UNITED KINGDOM" -"3560943252","3560943252","BE","BEL","BELGIUM" -"3560943253","3560943253","DE","DEU","GERMANY" -"3560943254","3560943254","ES","ESP","SPAIN" -"3560943255","3560943255","GB","GBR","UNITED KINGDOM" -"3560943256","3560943256","DE","DEU","GERMANY" -"3560943257","3560943257","ES","ESP","SPAIN" -"3560943258","3560943258","FR","FRA","FRANCE" -"3560943259","3560943259","DE","DEU","GERMANY" -"3560943260","3560943260","ES","ESP","SPAIN" -"3560943261","3560943261","IE","IRL","IRELAND" -"3560943262","3560943262","DE","DEU","GERMANY" -"3560943263","3560943263","IT","ITA","ITALY" -"3560943264","3560943264","CZ","CZE","CZECH REPUBLIC" -"3560943265","3560943265","DE","DEU","GERMANY" -"3560943266","3560943266","GB","GBR","UNITED KINGDOM" -"3560943267","3560943267","DE","DEU","GERMANY" -"3560943268","3560943269","IT","ITA","ITALY" -"3560943270","3560943270","GB","GBR","UNITED KINGDOM" -"3560943271","3560943271","IT","ITA","ITALY" -"3560943272","3560943272","ES","ESP","SPAIN" -"3560943273","3560943273","FR","FRA","FRANCE" -"3560943274","3560943274","GB","GBR","UNITED KINGDOM" -"3560943275","3560943275","DE","DEU","GERMANY" -"3560943276","3560943276","FR","FRA","FRANCE" -"3560943277","3560943277","IT","ITA","ITALY" -"3560943278","3560943278","DE","DEU","GERMANY" -"3560943279","3560943279","FR","FRA","FRANCE" -"3560943280","3560943280","GR","GRC","GREECE" -"3560943281","3560943281","ES","ESP","SPAIN" -"3560943282","3560943282","FR","FRA","FRANCE" -"3560943283","3560943283","ES","ESP","SPAIN" -"3560943284","3560943286","DE","DEU","GERMANY" -"3560943287","3560943287","NL","NLD","NETHERLANDS" -"3560943288","3560943290","FR","FRA","FRANCE" -"3560943291","3560943292","IT","ITA","ITALY" -"3560943293","3560943293","ES","ESP","SPAIN" -"3560943294","3560943294","IT","ITA","ITALY" -"3560943295","3560943295","DE","DEU","GERMANY" -"3560943296","3560943296","RU","RUS","RUSSIAN FEDERATION" -"3560943297","3560943297","ES","ESP","SPAIN" -"3560943298","3560943298","FR","FRA","FRANCE" -"3560943299","3560943299","GB","GBR","UNITED KINGDOM" -"3560943300","3560943300","DE","DEU","GERMANY" -"3560943301","3560943301","FR","FRA","FRANCE" -"3560943302","3560943302","ES","ESP","SPAIN" -"3560943303","3560943303","IT","ITA","ITALY" -"3560943304","3560943304","FR","FRA","FRANCE" -"3560943305","3560943306","DE","DEU","GERMANY" -"3560943307","3560943307","ES","ESP","SPAIN" -"3560943308","3560943309","DE","DEU","GERMANY" -"3560943310","3560943311","IT","ITA","ITALY" -"3560943312","3560943312","PL","POL","POLAND" -"3560943313","3560943313","DE","DEU","GERMANY" -"3560943314","3560943314","ES","ESP","SPAIN" -"3560943315","3560943315","IT","ITA","ITALY" -"3560943316","3560943316","GB","GBR","UNITED KINGDOM" -"3560943317","3560943317","IT","ITA","ITALY" -"3560943318","3560943318","CH","CHE","SWITZERLAND" -"3560943319","3560943319","ES","ESP","SPAIN" -"3560943320","3560943320","IT","ITA","ITALY" -"3560943321","3560943321","GB","GBR","UNITED KINGDOM" -"3560943322","3560943322","DE","DEU","GERMANY" -"3560943323","3560943323","NL","NLD","NETHERLANDS" -"3560943324","3560943324","DE","DEU","GERMANY" -"3560943325","3560943325","CH","CHE","SWITZERLAND" -"3560943326","3560943326","RU","RUS","RUSSIAN FEDERATION" -"3560943327","3560943329","DE","DEU","GERMANY" -"3560943330","3560943331","IT","ITA","ITALY" -"3560943332","3560943335","DE","DEU","GERMANY" -"3560943336","3560943336","ES","ESP","SPAIN" -"3560943337","3560943337","IT","ITA","ITALY" -"3560943338","3560943338","BE","BEL","BELGIUM" -"3560943339","3560943339","NL","NLD","NETHERLANDS" -"3560943340","3560943341","DE","DEU","GERMANY" -"3560943342","3560943342","ES","ESP","SPAIN" -"3560943343","3560943343","FR","FRA","FRANCE" -"3560943344","3560943344","NL","NLD","NETHERLANDS" -"3560943345","3560943345","CH","CHE","SWITZERLAND" -"3560943346","3560943346","IT","ITA","ITALY" -"3560943347","3560943347","ES","ESP","SPAIN" -"3560943348","3560943348","FR","FRA","FRANCE" -"3560943349","3560943349","DE","DEU","GERMANY" -"3560943350","3560943350","BE","BEL","BELGIUM" -"3560943351","3560943351","SE","SWE","SWEDEN" -"3560943352","3560943352","IT","ITA","ITALY" -"3560943353","3560943354","DE","DEU","GERMANY" -"3560943355","3560943355","IT","ITA","ITALY" -"3560943356","3560943356","DE","DEU","GERMANY" -"3560943357","3560943357","ES","ESP","SPAIN" -"3560943358","3560943358","BE","BEL","BELGIUM" -"3560943359","3560943361","DE","DEU","GERMANY" -"3560943362","3560943362","GB","GBR","UNITED KINGDOM" -"3560943363","3560943365","DE","DEU","GERMANY" -"3560943366","3560943367","IT","ITA","ITALY" -"3560943368","3560943368","DE","DEU","GERMANY" -"3560943369","3560943369","GR","GRC","GREECE" -"3560943370","3560943370","DE","DEU","GERMANY" -"3560943371","3560943371","AT","AUT","AUSTRIA" -"3560943372","3560943372","FR","FRA","FRANCE" -"3560943373","3560943375","DE","DEU","GERMANY" -"3560943376","3560943376","ES","ESP","SPAIN" -"3560943377","3560943377","GB","GBR","UNITED KINGDOM" -"3560943378","3560943378","DE","DEU","GERMANY" -"3560943379","3560943380","ES","ESP","SPAIN" -"3560943381","3560943383","DE","DEU","GERMANY" -"3560943384","3560943384","FR","FRA","FRANCE" -"3560943385","3560943385","ES","ESP","SPAIN" -"3560943386","3560943386","CH","CHE","SWITZERLAND" -"3560943387","3560943387","GB","GBR","UNITED KINGDOM" -"3560943388","3560943391","DE","DEU","GERMANY" -"3560943392","3560943392","GB","GBR","UNITED KINGDOM" -"3560943393","3560943393","DE","DEU","GERMANY" -"3560943394","3560943394","ES","ESP","SPAIN" -"3560943395","3560943395","NL","NLD","NETHERLANDS" -"3560943396","3560943396","BE","BEL","BELGIUM" -"3560943397","3560943397","DE","DEU","GERMANY" -"3560943398","3560943398","BE","BEL","BELGIUM" -"3560943399","3560943399","CH","CHE","SWITZERLAND" -"3560943400","3560943400","IT","ITA","ITALY" -"3560943401","3560943401","DE","DEU","GERMANY" -"3560943402","3560943402","NL","NLD","NETHERLANDS" -"3560943403","3560943403","DE","DEU","GERMANY" -"3560943404","3560943404","BE","BEL","BELGIUM" -"3560943405","3560943405","DE","DEU","GERMANY" -"3560943406","3560943407","ES","ESP","SPAIN" -"3560943408","3560943408","IT","ITA","ITALY" -"3560943409","3560943409","ES","ESP","SPAIN" -"3560943410","3560943410","NL","NLD","NETHERLANDS" -"3560943411","3560943411","DE","DEU","GERMANY" -"3560943412","3560943412","IT","ITA","ITALY" -"3560943413","3560943413","ES","ESP","SPAIN" -"3560943414","3560943415","DE","DEU","GERMANY" -"3560943416","3560943416","FR","FRA","FRANCE" -"3560943417","3560943417","DE","DEU","GERMANY" -"3560943418","3560943418","GB","GBR","UNITED KINGDOM" -"3560943419","3560943419","FR","FRA","FRANCE" -"3560943420","3560943420","DE","DEU","GERMANY" -"3560943421","3560943421","HU","HUN","HUNGARY" -"3560943422","3560943422","CH","CHE","SWITZERLAND" -"3560943423","3560943423","FR","FRA","FRANCE" -"3560943424","3560943424","DE","DEU","GERMANY" -"3560943425","3560943425","ES","ESP","SPAIN" -"3560943426","3560943426","IT","ITA","ITALY" -"3560943427","3560943427","FR","FRA","FRANCE" -"3560943428","3560943428","NO","NOR","NORWAY" -"3560943429","3560943430","NL","NLD","NETHERLANDS" -"3560943431","3560943432","DE","DEU","GERMANY" -"3560943433","3560943433","GB","GBR","UNITED KINGDOM" -"3560943434","3560943434","SE","SWE","SWEDEN" -"3560943435","3560943435","NL","NLD","NETHERLANDS" -"3560943436","3560943436","FR","FRA","FRANCE" -"3560943437","3560943437","ES","ESP","SPAIN" -"3560943438","3560943438","FR","FRA","FRANCE" -"3560943439","3560943439","NO","NOR","NORWAY" -"3560943440","3560943440","FR","FRA","FRANCE" -"3560943441","3560943441","DE","DEU","GERMANY" -"3560943442","3560943442","ES","ESP","SPAIN" -"3560943443","3560943443","BE","BEL","BELGIUM" -"3560943444","3560943444","CH","CHE","SWITZERLAND" -"3560943445","3560943445","PT","PRT","PORTUGAL" -"3560943446","3560943446","DE","DEU","GERMANY" -"3560943447","3560943447","GB","GBR","UNITED KINGDOM" -"3560943448","3560943450","DE","DEU","GERMANY" -"3560943451","3560943451","PL","POL","POLAND" -"3560943452","3560943452","GB","GBR","UNITED KINGDOM" -"3560943453","3560943454","DE","DEU","GERMANY" -"3560943455","3560943456","GB","GBR","UNITED KINGDOM" -"3560943457","3560943457","ES","ESP","SPAIN" -"3560943458","3560943459","IT","ITA","ITALY" -"3560943460","3560943460","ES","ESP","SPAIN" -"3560943461","3560943461","CH","CHE","SWITZERLAND" -"3560943462","3560943462","FR","FRA","FRANCE" -"3560943463","3560943463","NL","NLD","NETHERLANDS" -"3560943464","3560943464","ES","ESP","SPAIN" -"3560943465","3560943465","FR","FRA","FRANCE" -"3560943466","3560943466","NO","NOR","NORWAY" -"3560943467","3560943467","IT","ITA","ITALY" -"3560943468","3560943468","CH","CHE","SWITZERLAND" -"3560943469","3560943469","IT","ITA","ITALY" -"3560943470","3560943470","DE","DEU","GERMANY" -"3560943471","3560943471","GB","GBR","UNITED KINGDOM" -"3560943472","3560943472","BE","BEL","BELGIUM" -"3560943473","3560943473","AT","AUT","AUSTRIA" -"3560943474","3560943474","CH","CHE","SWITZERLAND" -"3560943475","3560943475","ES","ESP","SPAIN" -"3560943476","3560943476","BE","BEL","BELGIUM" -"3560943477","3560943477","DE","DEU","GERMANY" -"3560943478","3560943478","IT","ITA","ITALY" -"3560943479","3560943479","GB","GBR","UNITED KINGDOM" -"3560943480","3560943480","NL","NLD","NETHERLANDS" -"3560943481","3560943481","BG","BGR","BULGARIA" -"3560943482","3560943482","DE","DEU","GERMANY" -"3560943483","3560943486","ES","ESP","SPAIN" -"3560943487","3560943487","DE","DEU","GERMANY" -"3560943488","3560943488","ES","ESP","SPAIN" -"3560943489","3560943489","DE","DEU","GERMANY" -"3560943490","3560943490","GB","GBR","UNITED KINGDOM" -"3560943491","3560943491","DE","DEU","GERMANY" -"3560943492","3560943493","FR","FRA","FRANCE" -"3560943494","3560943494","GB","GBR","UNITED KINGDOM" -"3560943495","3560943495","IT","ITA","ITALY" -"3560943496","3560943499","DE","DEU","GERMANY" -"3560943500","3560943500","CH","CHE","SWITZERLAND" -"3560943501","3560943501","ES","ESP","SPAIN" -"3560943502","3560943507","DE","DEU","GERMANY" -"3560943508","3560943508","DK","DNK","DENMARK" -"3560943509","3560943510","DE","DEU","GERMANY" -"3560943511","3560943511","IT","ITA","ITALY" -"3560943512","3560943512","DE","DEU","GERMANY" -"3560943513","3560943513","LU","LUX","LUXEMBOURG" -"3560943514","3560943515","ES","ESP","SPAIN" -"3560943516","3560943517","DE","DEU","GERMANY" -"3560943518","3560943518","LU","LUX","LUXEMBOURG" -"3560943519","3560943519","DE","DEU","GERMANY" -"3560943520","3560943520","DK","DNK","DENMARK" -"3560943521","3560943521","DE","DEU","GERMANY" -"3560943522","3560943522","GB","GBR","UNITED KINGDOM" -"3560943523","3560943523","IT","ITA","ITALY" -"3560943524","3560943524","DE","DEU","GERMANY" -"3560943525","3560943525","NL","NLD","NETHERLANDS" -"3560943526","3560943526","IT","ITA","ITALY" -"3560943527","3560943527","DE","DEU","GERMANY" -"3560943528","3560943528","FR","FRA","FRANCE" -"3560943529","3560943529","DE","DEU","GERMANY" -"3560943530","3560943530","CH","CHE","SWITZERLAND" -"3560943531","3560943532","DE","DEU","GERMANY" -"3560943533","3560943533","HU","HUN","HUNGARY" -"3560943534","3560943534","BY","BLR","BELARUS" -"3560943535","3560943535","FR","FRA","FRANCE" -"3560943536","3560943536","BE","BEL","BELGIUM" -"3560943537","3560943537","DE","DEU","GERMANY" -"3560943538","3560943538","GB","GBR","UNITED KINGDOM" -"3560943539","3560943539","DE","DEU","GERMANY" -"3560943540","3560943540","BE","BEL","BELGIUM" -"3560943541","3560943541","NL","NLD","NETHERLANDS" -"3560943542","3560943542","DE","DEU","GERMANY" -"3560943543","3560943543","NL","NLD","NETHERLANDS" -"3560943544","3560943544","ES","ESP","SPAIN" -"3560943545","3560943546","DE","DEU","GERMANY" -"3560943547","3560943547","SI","SVN","SLOVENIA" -"3560943548","3560943548","GB","GBR","UNITED KINGDOM" -"3560943549","3560943549","DE","DEU","GERMANY" -"3560943550","3560943550","HU","HUN","HUNGARY" -"3560943551","3560943551","FR","FRA","FRANCE" -"3560943552","3560943552","IT","ITA","ITALY" -"3560943553","3560943553","DE","DEU","GERMANY" -"3560943554","3560943554","IS","ISL","ICELAND" -"3560943555","3560943555","FR","FRA","FRANCE" -"3560943556","3560943556","DE","DEU","GERMANY" -"3560943557","3560943557","ES","ESP","SPAIN" -"3560943558","3560943558","DE","DEU","GERMANY" -"3560943559","3560943559","GB","GBR","UNITED KINGDOM" -"3560943560","3560943562","IT","ITA","ITALY" -"3560943563","3560943563","HU","HUN","HUNGARY" -"3560943564","3560943564","DE","DEU","GERMANY" -"3560943565","3560943565","GB","GBR","UNITED KINGDOM" -"3560943566","3560943566","DE","DEU","GERMANY" -"3560943567","3560943567","FR","FRA","FRANCE" -"3560943568","3560943568","GB","GBR","UNITED KINGDOM" -"3560943569","3560943570","FR","FRA","FRANCE" -"3560943571","3560943572","DE","DEU","GERMANY" -"3560943573","3560943573","FR","FRA","FRANCE" -"3560943574","3560943574","NO","NOR","NORWAY" -"3560943575","3560943575","BE","BEL","BELGIUM" -"3560943576","3560943576","IT","ITA","ITALY" -"3560943577","3560943577","DK","DNK","DENMARK" -"3560943578","3560943578","ES","ESP","SPAIN" -"3560943579","3560943580","DE","DEU","GERMANY" -"3560943581","3560943581","NL","NLD","NETHERLANDS" -"3560943582","3560943582","DE","DEU","GERMANY" -"3560943583","3560943583","ES","ESP","SPAIN" -"3560943584","3560943584","IT","ITA","ITALY" -"3560943585","3560943585","FR","FRA","FRANCE" -"3560943586","3560943586","ES","ESP","SPAIN" -"3560943587","3560943587","DE","DEU","GERMANY" -"3560943588","3560943588","IT","ITA","ITALY" -"3560943589","3560943589","NL","NLD","NETHERLANDS" -"3560943590","3560943590","HU","HUN","HUNGARY" -"3560943591","3560943591","AT","AUT","AUSTRIA" -"3560943592","3560943592","SK","SVK","SLOVAKIA" -"3560943593","3560943593","PL","POL","POLAND" -"3560943594","3560943594","FR","FRA","FRANCE" -"3560943595","3560943596","ES","ESP","SPAIN" -"3560943597","3560943599","DE","DEU","GERMANY" -"3560943600","3560943600","AT","AUT","AUSTRIA" -"3560943601","3560943602","IT","ITA","ITALY" -"3560943603","3560943603","CH","CHE","SWITZERLAND" -"3560943604","3560943604","ES","ESP","SPAIN" -"3560943605","3560943605","GB","GBR","UNITED KINGDOM" -"3560943606","3560943607","DE","DEU","GERMANY" -"3560943608","3560943608","IT","ITA","ITALY" -"3560943609","3560943610","DE","DEU","GERMANY" -"3560943611","3560943611","FR","FRA","FRANCE" -"3560943612","3560943612","DE","DEU","GERMANY" -"3560943613","3560943613","ES","ESP","SPAIN" -"3560943614","3560943617","DE","DEU","GERMANY" -"3560943618","3560943618","FR","FRA","FRANCE" -"3560943619","3560943620","ES","ESP","SPAIN" -"3560943621","3560943621","SE","SWE","SWEDEN" -"3560943622","3560943622","BE","BEL","BELGIUM" -"3560943623","3560943623","DE","DEU","GERMANY" -"3560943624","3560943624","ES","ESP","SPAIN" -"3560943625","3560943625","AT","AUT","AUSTRIA" -"3560943626","3560943626","ES","ESP","SPAIN" -"3560943627","3560943627","DK","DNK","DENMARK" -"3560943628","3560943628","DE","DEU","GERMANY" -"3560943629","3560943629","IT","ITA","ITALY" -"3560943630","3560943630","DE","DEU","GERMANY" -"3560943631","3560943631","HU","HUN","HUNGARY" -"3560943632","3560943632","CH","CHE","SWITZERLAND" -"3560943633","3560943633","ES","ESP","SPAIN" -"3560943634","3560943634","FR","FRA","FRANCE" -"3560943635","3560943635","ES","ESP","SPAIN" -"3560943636","3560943636","DE","DEU","GERMANY" -"3560943637","3560943637","PL","POL","POLAND" -"3560943638","3560943638","IT","ITA","ITALY" -"3560943639","3560943639","ES","ESP","SPAIN" -"3560943640","3560943640","FR","FRA","FRANCE" -"3560943641","3560943643","IT","ITA","ITALY" -"3560943644","3560943644","DE","DEU","GERMANY" -"3560943645","3560943645","GB","GBR","UNITED KINGDOM" -"3560943646","3560943646","DE","DEU","GERMANY" -"3560943647","3560943647","ES","ESP","SPAIN" -"3560943648","3560943648","DE","DEU","GERMANY" -"3560943649","3560943649","NL","NLD","NETHERLANDS" -"3560943650","3560943651","DE","DEU","GERMANY" -"3560943652","3560943652","AT","AUT","AUSTRIA" -"3560943653","3560943653","DE","DEU","GERMANY" -"3560943654","3560943654","IT","ITA","ITALY" -"3560943655","3560943655","DE","DEU","GERMANY" -"3560943656","3560943656","IT","ITA","ITALY" -"3560943657","3560943657","DE","DEU","GERMANY" -"3560943658","3560943658","GB","GBR","UNITED KINGDOM" -"3560943659","3560943659","DE","DEU","GERMANY" -"3560943660","3560943660","PT","PRT","PORTUGAL" -"3560943661","3560943661","DK","DNK","DENMARK" -"3560943662","3560943662","DE","DEU","GERMANY" -"3560943663","3560943664","NL","NLD","NETHERLANDS" -"3560943665","3560943666","DE","DEU","GERMANY" -"3560943667","3560943667","PL","POL","POLAND" -"3560943668","3560943668","DK","DNK","DENMARK" -"3560943669","3560943669","FR","FRA","FRANCE" -"3560943670","3560943671","DE","DEU","GERMANY" -"3560943672","3560943672","BH","BHR","BAHRAIN" -"3560943673","3560943673","SE","SWE","SWEDEN" -"3560943674","3560943674","MA","MAR","MOROCCO" -"3560943675","3560943675","FR","FRA","FRANCE" -"3560943676","3560943677","DE","DEU","GERMANY" -"3560943678","3560943680","ES","ESP","SPAIN" -"3560943681","3560943682","DE","DEU","GERMANY" -"3560943683","3560943683","GR","GRC","GREECE" -"3560943684","3560943684","NL","NLD","NETHERLANDS" -"3560943685","3560943685","IT","ITA","ITALY" -"3560943686","3560943686","FR","FRA","FRANCE" -"3560943687","3560943687","PT","PRT","PORTUGAL" -"3560943688","3560943688","DE","DEU","GERMANY" -"3560943689","3560943689","PT","PRT","PORTUGAL" -"3560943690","3560943690","IT","ITA","ITALY" -"3560943691","3560943691","DE","DEU","GERMANY" -"3560943692","3560943692","SE","SWE","SWEDEN" -"3560943693","3560943693","DE","DEU","GERMANY" -"3560943694","3560943694","FR","FRA","FRANCE" -"3560943695","3560943695","GR","GRC","GREECE" -"3560943696","3560943697","CH","CHE","SWITZERLAND" -"3560943698","3560943698","DE","DEU","GERMANY" -"3560943699","3560943699","IT","ITA","ITALY" -"3560943700","3560943700","DE","DEU","GERMANY" -"3560943701","3560943701","AT","AUT","AUSTRIA" -"3560943702","3560943702","DE","DEU","GERMANY" -"3560943703","3560943703","FR","FRA","FRANCE" -"3560943704","3560943704","DE","DEU","GERMANY" -"3560943705","3560943705","CH","CHE","SWITZERLAND" -"3560943706","3560943706","LI","LIE","LIECHTENSTEIN" -"3560943707","3560943709","DE","DEU","GERMANY" -"3560943710","3560943710","NL","NLD","NETHERLANDS" -"3560943711","3560943711","DE","DEU","GERMANY" -"3560943712","3560943712","IT","ITA","ITALY" -"3560943713","3560943713","PL","POL","POLAND" -"3560943714","3560943714","NL","NLD","NETHERLANDS" -"3560943715","3560943715","DE","DEU","GERMANY" -"3560943716","3560943716","GB","GBR","UNITED KINGDOM" -"3560943717","3560943717","FR","FRA","FRANCE" -"3560943718","3560943719","DE","DEU","GERMANY" -"3560943720","3560943721","IT","ITA","ITALY" -"3560943722","3560943726","DE","DEU","GERMANY" -"3560943727","3560943727","ES","ESP","SPAIN" -"3560943728","3560943728","GB","GBR","UNITED KINGDOM" -"3560943729","3560943729","DE","DEU","GERMANY" -"3560943730","3560943730","NL","NLD","NETHERLANDS" -"3560943731","3560943731","IT","ITA","ITALY" -"3560943732","3560943732","FR","FRA","FRANCE" -"3560943733","3560943733","NO","NOR","NORWAY" -"3560943734","3560943736","DE","DEU","GERMANY" -"3560943737","3560943737","GR","GRC","GREECE" -"3560943738","3560943738","PT","PRT","PORTUGAL" -"3560943739","3560943740","DE","DEU","GERMANY" -"3560943741","3560943741","FR","FRA","FRANCE" -"3560943742","3560943742","DE","DEU","GERMANY" -"3560943743","3560943743","PL","POL","POLAND" -"3560943744","3560943744","DE","DEU","GERMANY" -"3560943745","3560943745","PL","POL","POLAND" -"3560943746","3560943748","DE","DEU","GERMANY" -"3560943749","3560943749","GB","GBR","UNITED KINGDOM" -"3560943750","3560943750","DE","DEU","GERMANY" -"3560943751","3560943751","IT","ITA","ITALY" -"3560943752","3560943752","DE","DEU","GERMANY" -"3560943753","3560943753","ES","ESP","SPAIN" -"3560943754","3560943754","HU","HUN","HUNGARY" -"3560943755","3560943755","BE","BEL","BELGIUM" -"3560943756","3560943756","IT","ITA","ITALY" -"3560943757","3560943757","DE","DEU","GERMANY" -"3560943758","3560943758","CZ","CZE","CZECH REPUBLIC" -"3560943759","3560943759","IE","IRL","IRELAND" -"3560943760","3560943760","NO","NOR","NORWAY" -"3560943761","3560943761","GB","GBR","UNITED KINGDOM" -"3560943762","3560943762","IT","ITA","ITALY" -"3560943763","3560943763","FR","FRA","FRANCE" -"3560943764","3560943764","PL","POL","POLAND" -"3560943765","3560943765","SE","SWE","SWEDEN" -"3560943766","3560943766","CY","CYP","CYPRUS" -"3560943767","3560943768","DE","DEU","GERMANY" -"3560943769","3560943769","FR","FRA","FRANCE" -"3560943770","3560943770","NL","NLD","NETHERLANDS" -"3560943771","3560943771","IT","ITA","ITALY" -"3560943772","3560943774","DE","DEU","GERMANY" -"3560943775","3560943775","FR","FRA","FRANCE" -"3560943776","3560943780","DE","DEU","GERMANY" -"3560943781","3560943781","ES","ESP","SPAIN" -"3560943782","3560943782","DE","DEU","GERMANY" -"3560943783","3560943783","BE","BEL","BELGIUM" -"3560943784","3560943786","DE","DEU","GERMANY" -"3560943787","3560943787","ES","ESP","SPAIN" -"3560943788","3560943788","DK","DNK","DENMARK" -"3560943789","3560943789","IT","ITA","ITALY" -"3560943790","3560943790","DE","DEU","GERMANY" -"3560943791","3560943791","IT","ITA","ITALY" -"3560943792","3560943793","DE","DEU","GERMANY" -"3560943794","3560943794","FR","FRA","FRANCE" -"3560943795","3560943795","DE","DEU","GERMANY" -"3560943796","3560943796","IT","ITA","ITALY" -"3560943797","3560943797","DE","DEU","GERMANY" -"3560943798","3560943798","DK","DNK","DENMARK" -"3560943799","3560943799","DE","DEU","GERMANY" -"3560943800","3560943800","CH","CHE","SWITZERLAND" -"3560943801","3560943801","FR","FRA","FRANCE" -"3560943802","3560943802","IT","ITA","ITALY" -"3560943803","3560943803","HU","HUN","HUNGARY" -"3560943804","3560943804","ES","ESP","SPAIN" -"3560943805","3560943805","DE","DEU","GERMANY" -"3560943806","3560943806","ES","ESP","SPAIN" -"3560943807","3560943807","DK","DNK","DENMARK" -"3560943808","3560943810","DE","DEU","GERMANY" -"3560943811","3560943811","ES","ESP","SPAIN" -"3560943812","3560943812","IT","ITA","ITALY" -"3560943813","3560943813","CH","CHE","SWITZERLAND" -"3560943814","3560943814","DE","DEU","GERMANY" -"3560943815","3560943815","IT","ITA","ITALY" -"3560943816","3560943817","FR","FRA","FRANCE" -"3560943818","3560943818","PT","PRT","PORTUGAL" -"3560943819","3560943819","DE","DEU","GERMANY" -"3560943820","3560943820","FR","FRA","FRANCE" -"3560943821","3560943821","IT","ITA","ITALY" -"3560943822","3560943822","DE","DEU","GERMANY" -"3560943823","3560943823","GR","GRC","GREECE" -"3560943824","3560943827","DE","DEU","GERMANY" -"3560943828","3560943828","ES","ESP","SPAIN" -"3560943829","3560943829","NL","NLD","NETHERLANDS" -"3560943830","3560943830","DK","DNK","DENMARK" -"3560943831","3560943833","FR","FRA","FRANCE" -"3560943834","3560943836","DE","DEU","GERMANY" -"3560943837","3560943837","CH","CHE","SWITZERLAND" -"3560943838","3560943838","DE","DEU","GERMANY" -"3560943839","3560943839","NO","NOR","NORWAY" -"3560943840","3560943840","LU","LUX","LUXEMBOURG" -"3560943841","3560943841","GB","GBR","UNITED KINGDOM" -"3560943842","3560943842","DE","DEU","GERMANY" -"3560943843","3560943843","GB","GBR","UNITED KINGDOM" -"3560943844","3560943844","BE","BEL","BELGIUM" -"3560943845","3560943845","CZ","CZE","CZECH REPUBLIC" -"3560943846","3560943846","LU","LUX","LUXEMBOURG" -"3560943847","3560943847","CZ","CZE","CZECH REPUBLIC" -"3560943848","3560943848","FR","FRA","FRANCE" -"3560943849","3560943849","DE","DEU","GERMANY" -"3560943850","3560943850","NL","NLD","NETHERLANDS" -"3560943851","3560943857","DE","DEU","GERMANY" -"3560943858","3560943858","GB","GBR","UNITED KINGDOM" -"3560943859","3560943859","DE","DEU","GERMANY" -"3560943860","3560943860","GB","GBR","UNITED KINGDOM" -"3560943861","3560943865","DE","DEU","GERMANY" -"3560943866","3560943866","BE","BEL","BELGIUM" -"3560943867","3560943867","ES","ESP","SPAIN" -"3560943868","3560943868","FR","FRA","FRANCE" -"3560943869","3560943869","LU","LUX","LUXEMBOURG" -"3560943870","3560943871","DE","DEU","GERMANY" -"3560943872","3560943875","BR","BRA","BRAZIL" -"3560943876","3560943879","DE","DEU","GERMANY" -"3560943880","3560943887","US","USA","UNITED STATES" -"3560943888","3560943891","CA","CAN","CANADA" -"3560943892","3560943895","DE","DEU","GERMANY" -"3560943896","3560943899","CL","CHL","CHILE" -"3560943900","3560943903","MX","MEX","MEXICO" -"3560943904","3560943915","US","USA","UNITED STATES" -"3560943916","3560943919","CA","CAN","CANADA" -"3560943920","3560943923","US","USA","UNITED STATES" -"3560943924","3560943927","MX","MEX","MEXICO" -"3560943928","3560943935","US","USA","UNITED STATES" -"3560943936","3560943939","PE","PER","PERU" -"3560943940","3560943943","DE","DEU","GERMANY" -"3560943944","3560943947","US","USA","UNITED STATES" -"3560943948","3560943975","DE","DEU","GERMANY" -"3560943976","3560943979","US","USA","UNITED STATES" -"3560943980","3560943983","DE","DEU","GERMANY" -"3560943984","3560943987","US","USA","UNITED STATES" -"3560943988","3560943991","DE","DEU","GERMANY" -"3560943992","3560943999","US","USA","UNITED STATES" -"3560944000","3560944023","DE","DEU","GERMANY" -"3560944024","3560944031","US","USA","UNITED STATES" -"3560944032","3560944035","MX","MEX","MEXICO" -"3560944036","3560944039","US","USA","UNITED STATES" -"3560944040","3560944043","MX","MEX","MEXICO" -"3560944044","3560944059","DE","DEU","GERMANY" -"3560944060","3560944063","US","USA","UNITED STATES" -"3560944064","3560944067","DE","DEU","GERMANY" -"3560944068","3560944071","US","USA","UNITED STATES" -"3560944072","3560944079","DE","DEU","GERMANY" -"3560944080","3560944083","US","USA","UNITED STATES" -"3560944084","3560944087","CL","CHL","CHILE" -"3560944088","3560944103","DE","DEU","GERMANY" -"3560944104","3560944107","US","USA","UNITED STATES" -"3560944108","3560944119","DE","DEU","GERMANY" -"3560944120","3560944135","US","USA","UNITED STATES" -"3560944136","3560944139","DE","DEU","GERMANY" -"3560944140","3560944159","US","USA","UNITED STATES" -"3560944160","3560944163","MX","MEX","MEXICO" -"3560944164","3560944167","AR","ARG","ARGENTINA" -"3560944168","3560944175","US","USA","UNITED STATES" -"3560944176","3560944179","BR","BRA","BRAZIL" -"3560944180","3560944183","PA","PAN","PANAMA" -"3560944184","3560944187","US","USA","UNITED STATES" -"3560944188","3560944191","CA","CAN","CANADA" -"3560944192","3560944195","US","USA","UNITED STATES" -"3560944196","3560944199","DE","DEU","GERMANY" -"3560944200","3560944203","BO","BOL","BOLIVIA" -"3560944204","3560944207","DE","DEU","GERMANY" -"3560944208","3560944211","CA","CAN","CANADA" -"3560944212","3560944215","DE","DEU","GERMANY" -"3560944216","3560944219","BR","BRA","BRAZIL" -"3560944220","3560944227","US","USA","UNITED STATES" -"3560944228","3560944231","IT","ITA","ITALY" -"3560944232","3560944235","US","USA","UNITED STATES" -"3560944236","3560944239","CA","CAN","CANADA" -"3560944240","3560944243","US","USA","UNITED STATES" -"3560944244","3560944247","MX","MEX","MEXICO" -"3560944248","3560944267","US","USA","UNITED STATES" -"3560944268","3560944271","CO","COL","COLOMBIA" -"3560944272","3560944275","BR","BRA","BRAZIL" -"3560944276","3560944279","PE","PER","PERU" -"3560944280","3560944283","DE","DEU","GERMANY" -"3560944284","3560944295","US","USA","UNITED STATES" -"3560944296","3560944299","CO","COL","COLOMBIA" -"3560944300","3560944307","US","USA","UNITED STATES" -"3560944308","3560944311","MX","MEX","MEXICO" -"3560944312","3560944315","US","USA","UNITED STATES" -"3560944316","3560944323","AR","ARG","ARGENTINA" -"3560944324","3560944339","US","USA","UNITED STATES" -"3560944340","3560944343","CO","COL","COLOMBIA" -"3560944344","3560944351","US","USA","UNITED STATES" -"3560944352","3560944355","GT","GTM","GUATEMALA" -"3560944356","3560944359","CA","CAN","CANADA" -"3560944360","3560944363","DO","DOM","DOMINICAN REPUBLIC" -"3560944364","3560944367","AR","ARG","ARGENTINA" -"3560944368","3560944371","BR","BRA","BRAZIL" -"3560944372","3560944375","DE","DEU","GERMANY" -"3560944376","3560944379","AR","ARG","ARGENTINA" -"3560944380","3560944383","DE","DEU","GERMANY" -"3560944384","3560944395","US","USA","UNITED STATES" -"3560944396","3560944399","PR","PRI","PUERTO RICO" -"3560944400","3560944403","CA","CAN","CANADA" -"3560944404","3560944411","DE","DEU","GERMANY" -"3560944412","3560944415","US","USA","UNITED STATES" -"3560944416","3560944419","SG","SGP","SINGAPORE" -"3560944420","3560944431","US","USA","UNITED STATES" -"3560944432","3560944435","DE","DEU","GERMANY" -"3560944436","3560944447","US","USA","UNITED STATES" -"3560944448","3560944451","DE","DEU","GERMANY" -"3560944452","3560944459","US","USA","UNITED STATES" -"3560944460","3560944460","AR","ARG","ARGENTINA" -"3560944461","3560944463","DE","DEU","GERMANY" -"3560944464","3560944467","CA","CAN","CANADA" -"3560944468","3560944471","BR","BRA","BRAZIL" -"3560944472","3560944475","US","USA","UNITED STATES" -"3560944476","3560944479","AR","ARG","ARGENTINA" -"3560944480","3560944487","US","USA","UNITED STATES" -"3560944488","3560944491","CA","CAN","CANADA" -"3560944492","3560944519","US","USA","UNITED STATES" -"3560944520","3560944523","DE","DEU","GERMANY" -"3560944524","3560944531","US","USA","UNITED STATES" -"3560944532","3560944535","MX","MEX","MEXICO" -"3560944536","3560944551","US","USA","UNITED STATES" -"3560944552","3560944555","BR","BRA","BRAZIL" -"3560944556","3560944559","MX","MEX","MEXICO" -"3560944560","3560944563","US","USA","UNITED STATES" -"3560944564","3560944567","ES","ESP","SPAIN" -"3560944568","3560944575","US","USA","UNITED STATES" -"3560944576","3560944579","BR","BRA","BRAZIL" -"3560944580","3560944603","US","USA","UNITED STATES" -"3560944604","3560944607","CA","CAN","CANADA" -"3560944608","3560944615","US","USA","UNITED STATES" -"3560944616","3560944619","EC","ECU","ECUADOR" -"3560944620","3560944623","US","USA","UNITED STATES" -"3560944624","3560944627","CL","CHL","CHILE" -"3560944628","3560944631","DE","DEU","GERMANY" -"3560944632","3560944635","CA","CAN","CANADA" -"3560944636","3560944639","DE","DEU","GERMANY" -"3560944640","3560944643","TR","TUR","TURKEY" -"3560944644","3560944647","ES","ESP","SPAIN" -"3560944648","3560944651","TR","TUR","TURKEY" -"3560944652","3560944655","HU","HUN","HUNGARY" -"3560944656","3560944659","TR","TUR","TURKEY" -"3560944660","3560944663","MZ","MOZ","MOZAMBIQUE" -"3560944664","3560944667","FR","FRA","FRANCE" -"3560944668","3560944671","TR","TUR","TURKEY" -"3560944672","3560944675","KZ","KAZ","KAZAKHSTAN" -"3560944676","3560944679","GR","GRC","GREECE" -"3560944680","3560944687","TR","TUR","TURKEY" -"3560944688","3560944691","FR","FRA","FRANCE" -"3560944692","3560944695","SA","SAU","SAUDI ARABIA" -"3560944696","3560944699","TR","TUR","TURKEY" -"3560944700","3560944703","CU","CUB","CUBA" -"3560944704","3560944707","ZW","ZWE","ZIMBABWE" -"3560944708","3560944711","TR","TUR","TURKEY" -"3560944712","3560944715","IL","ISR","ISRAEL" -"3560944716","3560944719","ZW","ZWE","ZIMBABWE" -"3560944720","3560944723","SK","SVK","SLOVAKIA" -"3560944724","3560944727","TR","TUR","TURKEY" -"3560944728","3560944731","KZ","KAZ","KAZAKHSTAN" -"3560944732","3560944735","TR","TUR","TURKEY" -"3560944736","3560944743","FR","FRA","FRANCE" -"3560944744","3560944747","GR","GRC","GREECE" -"3560944748","3560944755","TR","TUR","TURKEY" -"3560944756","3560944759","MZ","MOZ","MOZAMBIQUE" -"3560944760","3560944767","TR","TUR","TURKEY" -"3560944768","3560944771","MZ","MOZ","MOZAMBIQUE" -"3560944772","3560944779","DE","DEU","GERMANY" -"3560944780","3560944783","ES","ESP","SPAIN" -"3560944784","3560944787","FR","FRA","FRANCE" -"3560944788","3560944791","NL","NLD","NETHERLANDS" -"3560944792","3560944795","ES","ESP","SPAIN" -"3560944796","3560944799","GB","GBR","UNITED KINGDOM" -"3560944800","3560944803","ES","ESP","SPAIN" -"3560944804","3560944807","FR","FRA","FRANCE" -"3560944808","3560944811","DE","DEU","GERMANY" -"3560944812","3560944815","ES","ESP","SPAIN" -"3560944816","3560944823","IT","ITA","ITALY" -"3560944824","3560944827","DE","DEU","GERMANY" -"3560944828","3560944831","IE","IRL","IRELAND" -"3560944832","3560944835","DE","DEU","GERMANY" -"3560944836","3560944839","IT","ITA","ITALY" -"3560944840","3560944843","TR","TUR","TURKEY" -"3560944844","3560944847","DE","DEU","GERMANY" -"3560944848","3560944855","FR","FRA","FRANCE" -"3560944856","3560944859","NL","NLD","NETHERLANDS" -"3560944860","3560944863","DK","DNK","DENMARK" -"3560944864","3560944871","FR","FRA","FRANCE" -"3560944872","3560944875","DE","DEU","GERMANY" -"3560944876","3560944879","ES","ESP","SPAIN" -"3560944880","3560944883","SA","SAU","SAUDI ARABIA" -"3560944884","3560944887","ES","ESP","SPAIN" -"3560944888","3560944891","CH","CHE","SWITZERLAND" -"3560944892","3560944895","DE","DEU","GERMANY" -"3560944896","3560944899","TW","TWN","TAIWAN" -"3560944900","3560944903","SG","SGP","SINGAPORE" -"3560944904","3560944907","MY","MYS","MALAYSIA" -"3560944908","3560944919","SG","SGP","SINGAPORE" -"3560944920","3560944923","MY","MYS","MALAYSIA" -"3560944924","3560944927","CN","CHN","CHINA" -"3560944928","3560944931","MY","MYS","MALAYSIA" -"3560944932","3560944935","SG","SGP","SINGAPORE" -"3560944936","3560944943","CN","CHN","CHINA" -"3560944944","3560944947","MY","MYS","MALAYSIA" -"3560944948","3560944951","SG","SGP","SINGAPORE" -"3560944952","3560944955","TW","TWN","TAIWAN" -"3560944956","3560944959","SG","SGP","SINGAPORE" -"3560944960","3560944963","IN","IND","INDIA" -"3560944964","3560944967","MY","MYS","MALAYSIA" -"3560944968","3560944971","SG","SGP","SINGAPORE" -"3560944972","3560944975","CN","CHN","CHINA" -"3560944976","3560944987","IN","IND","INDIA" -"3560944988","3560944991","SG","SGP","SINGAPORE" -"3560944992","3560944995","MY","MYS","MALAYSIA" -"3560944996","3560944999","SG","SGP","SINGAPORE" -"3560945000","3560945003","MY","MYS","MALAYSIA" -"3560945004","3560945007","IN","IND","INDIA" -"3560945008","3560945011","SG","SGP","SINGAPORE" -"3560945012","3560945015","DE","DEU","GERMANY" -"3560945016","3560945027","IN","IND","INDIA" -"3560945028","3560945031","MY","MYS","MALAYSIA" -"3560945032","3560945035","IN","IND","INDIA" -"3560945036","3560945039","CN","CHN","CHINA" -"3560945040","3560945043","SG","SGP","SINGAPORE" -"3560945044","3560945047","TW","TWN","TAIWAN" -"3560945048","3560945059","IN","IND","INDIA" -"3560945060","3560945063","SG","SGP","SINGAPORE" -"3560945064","3560945067","MY","MYS","MALAYSIA" -"3560945068","3560945075","IN","IND","INDIA" -"3560945076","3560945083","CN","CHN","CHINA" -"3560945084","3560945091","IN","IND","INDIA" -"3560945092","3560945095","SG","SGP","SINGAPORE" -"3560945096","3560945099","CN","CHN","CHINA" -"3560945100","3560945103","SG","SGP","SINGAPORE" -"3560945104","3560945107","MY","MYS","MALAYSIA" -"3560945108","3560945111","TW","TWN","TAIWAN" -"3560945112","3560945115","SG","SGP","SINGAPORE" -"3560945116","3560945119","IN","IND","INDIA" -"3560945120","3560945123","CN","CHN","CHINA" -"3560945124","3560945131","SG","SGP","SINGAPORE" -"3560945132","3560945135","TW","TWN","TAIWAN" -"3560945136","3560945139","MY","MYS","MALAYSIA" -"3560945140","3560945143","SG","SGP","SINGAPORE" -"3560945144","3560945147","IN","IND","INDIA" -"3560945148","3560945151","SG","SGP","SINGAPORE" -"3560945152","3560945153","DE","DEU","GERMANY" -"3560945154","3560945156","AU","AUS","AUSTRALIA" -"3560945157","3560945157","NZ","NZL","NEW ZEALAND" -"3560945158","3560945167","AU","AUS","AUSTRALIA" -"3560945168","3560945168","DE","DEU","GERMANY" -"3560945169","3560945169","AU","AUS","AUSTRALIA" -"3560945170","3560945191","DE","DEU","GERMANY" -"3560945192","3560945192","AU","AUS","AUSTRALIA" -"3560945193","3560945194","DE","DEU","GERMANY" -"3560945195","3560945195","AU","AUS","AUSTRALIA" -"3560945196","3560945204","DE","DEU","GERMANY" -"3560945205","3560945205","AU","AUS","AUSTRALIA" -"3560945206","3560945206","IN","IND","INDIA" -"3560945207","3560945209","AU","AUS","AUSTRALIA" -"3560945210","3560945227","DE","DEU","GERMANY" -"3560945228","3560945231","IN","IND","INDIA" -"3560945232","3560945267","DE","DEU","GERMANY" -"3560945268","3560945271","AU","AUS","AUSTRALIA" -"3560945272","3560945275","DE","DEU","GERMANY" -"3560945276","3560945279","AU","AUS","AUSTRALIA" -"3560945280","3560945355","JP","JPN","JAPAN" -"3560945356","3560945359","TH","THA","THAILAND" -"3560945360","3560945403","JP","JPN","JAPAN" -"3560945404","3560945407","TH","THA","THAILAND" -"3560945408","3560945409","DE","DEU","GERMANY" -"3560945410","3560945410","MY","MYS","MALAYSIA" -"3560945411","3560945411","TW","TWN","TAIWAN" -"3560945412","3560945412","CN","CHN","CHINA" -"3560945413","3560945413","SG","SGP","SINGAPORE" -"3560945414","3560945414","IN","IND","INDIA" -"3560945415","3560945416","SG","SGP","SINGAPORE" -"3560945417","3560945418","CN","CHN","CHINA" -"3560945419","3560945419","MY","MYS","MALAYSIA" -"3560945420","3560945420","IN","IND","INDIA" -"3560945421","3560945422","SG","SGP","SINGAPORE" -"3560945423","3560945423","CN","CHN","CHINA" -"3560945424","3560945424","MY","MYS","MALAYSIA" -"3560945425","3560945425","IN","IND","INDIA" -"3560945426","3560945426","MY","MYS","MALAYSIA" -"3560945427","3560945427","CN","CHN","CHINA" -"3560945428","3560945428","SG","SGP","SINGAPORE" -"3560945429","3560945429","TW","TWN","TAIWAN" -"3560945430","3560945430","MY","MYS","MALAYSIA" -"3560945431","3560945431","CN","CHN","CHINA" -"3560945432","3560945433","IN","IND","INDIA" -"3560945434","3560945434","TW","TWN","TAIWAN" -"3560945435","3560945435","MY","MYS","MALAYSIA" -"3560945436","3560945436","CN","CHN","CHINA" -"3560945437","3560945437","SG","SGP","SINGAPORE" -"3560945438","3560945438","TW","TWN","TAIWAN" -"3560945439","3560945439","SG","SGP","SINGAPORE" -"3560945440","3560945440","ID","IDN","INDONESIA" -"3560945441","3560945441","SG","SGP","SINGAPORE" -"3560945442","3560945443","IN","IND","INDIA" -"3560945444","3560945448","SG","SGP","SINGAPORE" -"3560945449","3560945449","IN","IND","INDIA" -"3560945450","3560945450","SG","SGP","SINGAPORE" -"3560945451","3560945451","IN","IND","INDIA" -"3560945452","3560945452","SG","SGP","SINGAPORE" -"3560945453","3560945453","IN","IND","INDIA" -"3560945454","3560945458","SG","SGP","SINGAPORE" -"3560945459","3560945459","TW","TWN","TAIWAN" -"3560945460","3560945461","SG","SGP","SINGAPORE" -"3560945462","3560945462","IN","IND","INDIA" -"3560945463","3560945465","SG","SGP","SINGAPORE" -"3560945466","3560945466","CN","CHN","CHINA" -"3560945467","3560945467","MY","MYS","MALAYSIA" -"3560945468","3560945469","SG","SGP","SINGAPORE" -"3560945470","3560945470","CN","CHN","CHINA" -"3560945471","3560945471","SG","SGP","SINGAPORE" -"3560945472","3560945472","CN","CHN","CHINA" -"3560945473","3560945473","TW","TWN","TAIWAN" -"3560945474","3560945475","SG","SGP","SINGAPORE" -"3560945476","3560945476","CN","CHN","CHINA" -"3560945477","3560945477","TW","TWN","TAIWAN" -"3560945478","3560945478","IN","IND","INDIA" -"3560945479","3560945479","SG","SGP","SINGAPORE" -"3560945480","3560945481","IN","IND","INDIA" -"3560945482","3560945482","DE","DEU","GERMANY" -"3560945483","3560945485","MY","MYS","MALAYSIA" -"3560945486","3560945487","IN","IND","INDIA" -"3560945488","3560945488","DE","DEU","GERMANY" -"3560945489","3560945489","MY","MYS","MALAYSIA" -"3560945490","3560945490","TH","THA","THAILAND" -"3560945491","3560945492","IN","IND","INDIA" -"3560945493","3560945495","DE","DEU","GERMANY" -"3560945496","3560945496","IN","IND","INDIA" -"3560945497","3560945497","DE","DEU","GERMANY" -"3560945498","3560945499","IN","IND","INDIA" -"3560945500","3560945500","SG","SGP","SINGAPORE" -"3560945501","3560945501","US","USA","UNITED STATES" -"3560945502","3560945502","IN","IND","INDIA" -"3560945503","3560945535","DE","DEU","GERMANY" -"3560945536","3560945539","IN","IND","INDIA" -"3560945540","3560945543","SG","SGP","SINGAPORE" -"3560945544","3560945559","IN","IND","INDIA" -"3560945560","3560945563","DE","DEU","GERMANY" -"3560945564","3560945567","SG","SGP","SINGAPORE" -"3560945568","3560945575","IN","IND","INDIA" -"3560945576","3560945579","SG","SGP","SINGAPORE" -"3560945580","3560945583","MY","MYS","MALAYSIA" -"3560945584","3560945587","SG","SGP","SINGAPORE" -"3560945588","3560945591","TW","TWN","TAIWAN" -"3560945592","3560945603","SG","SGP","SINGAPORE" -"3560945604","3560945607","US","USA","UNITED STATES" -"3560945608","3560945611","IN","IND","INDIA" -"3560945612","3560945619","SG","SGP","SINGAPORE" -"3560945620","3560945627","CN","CHN","CHINA" -"3560945628","3560945635","SG","SGP","SINGAPORE" -"3560945636","3560945639","CN","CHN","CHINA" -"3560945640","3560945643","IN","IND","INDIA" -"3560945644","3560945647","MY","MYS","MALAYSIA" -"3560945648","3560945651","IN","IND","INDIA" -"3560945652","3560945659","DE","DEU","GERMANY" -"3560945660","3560945663","IN","IND","INDIA" -"3560945664","3560945667","US","USA","UNITED STATES" -"3560945668","3560945671","BR","BRA","BRAZIL" -"3560945672","3560945675","US","USA","UNITED STATES" -"3560945676","3560945679","PE","PER","PERU" -"3560945680","3560945683","BR","BRA","BRAZIL" -"3560945684","3560945691","CO","COL","COLOMBIA" -"3560945692","3560945699","US","USA","UNITED STATES" -"3560945700","3560945703","CO","COL","COLOMBIA" -"3560945704","3560945707","US","USA","UNITED STATES" -"3560945708","3560945711","CO","COL","COLOMBIA" -"3560945712","3560945727","US","USA","UNITED STATES" -"3560945728","3560945731","AR","ARG","ARGENTINA" -"3560945732","3560945739","US","USA","UNITED STATES" -"3560945740","3560945743","BR","BRA","BRAZIL" -"3560945744","3560945747","US","USA","UNITED STATES" -"3560945748","3560945751","AR","ARG","ARGENTINA" -"3560945752","3560945763","US","USA","UNITED STATES" -"3560945764","3560945767","AR","ARG","ARGENTINA" -"3560945768","3560945771","BR","BRA","BRAZIL" -"3560945772","3560945775","CA","CAN","CANADA" -"3560945776","3560945787","US","USA","UNITED STATES" -"3560945788","3560945791","CO","COL","COLOMBIA" -"3560945792","3560945795","AR","ARG","ARGENTINA" -"3560945796","3560945799","US","USA","UNITED STATES" -"3560945800","3560945803","BR","BRA","BRAZIL" -"3560945804","3560945807","US","USA","UNITED STATES" -"3560945808","3560945811","CO","COL","COLOMBIA" -"3560945812","3560945815","US","USA","UNITED STATES" -"3560945816","3560945819","AR","ARG","ARGENTINA" -"3560945820","3560945823","US","USA","UNITED STATES" -"3560945824","3560945827","BR","BRA","BRAZIL" -"3560945828","3560945835","US","USA","UNITED STATES" -"3560945836","3560945839","CL","CHL","CHILE" -"3560945840","3560945843","BR","BRA","BRAZIL" -"3560945844","3560945851","US","USA","UNITED STATES" -"3560945852","3560945855","DE","DEU","GERMANY" -"3560945856","3560945859","US","USA","UNITED STATES" -"3560945860","3560945863","DE","DEU","GERMANY" -"3560945864","3560945867","US","USA","UNITED STATES" -"3560945868","3560945871","DE","DEU","GERMANY" -"3560945872","3560945875","CA","CAN","CANADA" -"3560945876","3560945911","US","USA","UNITED STATES" -"3560945912","3560945915","CA","CAN","CANADA" -"3560945916","3560945919","US","USA","UNITED STATES" -"3560945920","3560946017","DE","DEU","GERMANY" -"3560946018","3560946018","FI","FIN","FINLAND" -"3560946019","3560946019","CZ","CZE","CZECH REPUBLIC" -"3560946020","3560946176","DE","DEU","GERMANY" -"3560946177","3560946189","US","USA","UNITED STATES" -"3560946190","3560946190","AR","ARG","ARGENTINA" -"3560946191","3560946194","US","USA","UNITED STATES" -"3560946195","3560946195","PE","PER","PERU" -"3560946196","3560946196","CA","CAN","CANADA" -"3560946197","3560946197","US","USA","UNITED STATES" -"3560946198","3560946198","CA","CAN","CANADA" -"3560946199","3560946199","AR","ARG","ARGENTINA" -"3560946200","3560946200","US","USA","UNITED STATES" -"3560946201","3560946201","CA","CAN","CANADA" -"3560946202","3560946202","DE","DEU","GERMANY" -"3560946203","3560946203","CA","CAN","CANADA" -"3560946204","3560946204","US","USA","UNITED STATES" -"3560946205","3560946205","PE","PER","PERU" -"3560946206","3560946208","US","USA","UNITED STATES" -"3560946209","3560946209","CA","CAN","CANADA" -"3560946210","3560946212","US","USA","UNITED STATES" -"3560946213","3560946213","CO","COL","COLOMBIA" -"3560946214","3560946214","CA","CAN","CANADA" -"3560946215","3560946215","PE","PER","PERU" -"3560946216","3560946229","US","USA","UNITED STATES" -"3560946230","3560946230","AR","ARG","ARGENTINA" -"3560946231","3560946231","US","USA","UNITED STATES" -"3560946232","3560946232","CA","CAN","CANADA" -"3560946233","3560946234","US","USA","UNITED STATES" -"3560946235","3560946235","CL","CHL","CHILE" -"3560946236","3560946237","US","USA","UNITED STATES" -"3560946238","3560946238","AR","ARG","ARGENTINA" -"3560946239","3560946253","US","USA","UNITED STATES" -"3560946254","3560946254","SG","SGP","SINGAPORE" -"3560946255","3560946256","US","USA","UNITED STATES" -"3560946257","3560946257","MX","MEX","MEXICO" -"3560946258","3560946259","US","USA","UNITED STATES" -"3560946260","3560946260","AR","ARG","ARGENTINA" -"3560946261","3560946262","US","USA","UNITED STATES" -"3560946263","3560946263","AR","ARG","ARGENTINA" -"3560946264","3560946266","US","USA","UNITED STATES" -"3560946267","3560946267","CA","CAN","CANADA" -"3560946268","3560946271","US","USA","UNITED STATES" -"3560946272","3560946272","DE","DEU","GERMANY" -"3560946273","3560946273","CA","CAN","CANADA" -"3560946274","3560946279","US","USA","UNITED STATES" -"3560946280","3560946280","ES","ESP","SPAIN" -"3560946281","3560946282","US","USA","UNITED STATES" -"3560946283","3560946283","CL","CHL","CHILE" -"3560946284","3560946284","US","USA","UNITED STATES" -"3560946285","3560946285","CO","COL","COLOMBIA" -"3560946286","3560946290","US","USA","UNITED STATES" -"3560946291","3560946291","CA","CAN","CANADA" -"3560946292","3560946295","US","USA","UNITED STATES" -"3560946296","3560946296","CL","CHL","CHILE" -"3560946297","3560946297","DE","DEU","GERMANY" -"3560946298","3560946298","US","USA","UNITED STATES" -"3560946299","3560946299","DE","DEU","GERMANY" -"3560946300","3560946300","CL","CHL","CHILE" -"3560946301","3560946311","DE","DEU","GERMANY" -"3560946312","3560946312","US","USA","UNITED STATES" -"3560946313","3560946317","DE","DEU","GERMANY" -"3560946318","3560946319","US","USA","UNITED STATES" -"3560946320","3560946320","DE","DEU","GERMANY" -"3560946321","3560946326","US","USA","UNITED STATES" -"3560946327","3560946327","CA","CAN","CANADA" -"3560946328","3560946328","US","USA","UNITED STATES" -"3560946329","3560946329","DO","DOM","DOMINICAN REPUBLIC" -"3560946330","3560946330","US","USA","UNITED STATES" -"3560946331","3560946331","DO","DOM","DOMINICAN REPUBLIC" -"3560946332","3560946333","CA","CAN","CANADA" -"3560946334","3560946335","US","USA","UNITED STATES" -"3560946336","3560946336","CA","CAN","CANADA" -"3560946337","3560946337","DE","DEU","GERMANY" -"3560946338","3560946338","CA","CAN","CANADA" -"3560946339","3560946339","US","USA","UNITED STATES" -"3560946340","3560946340","CL","CHL","CHILE" -"3560946341","3560946342","CA","CAN","CANADA" -"3560946343","3560946343","DO","DOM","DOMINICAN REPUBLIC" -"3560946344","3560946344","AR","ARG","ARGENTINA" -"3560946345","3560946345","US","USA","UNITED STATES" -"3560946346","3560946346","PE","PER","PERU" -"3560946347","3560946347","US","USA","UNITED STATES" -"3560946348","3560946361","DE","DEU","GERMANY" -"3560946362","3560946363","US","USA","UNITED STATES" -"3560946364","3560946367","DE","DEU","GERMANY" -"3560946368","3560946368","US","USA","UNITED STATES" -"3560946369","3560946372","DE","DEU","GERMANY" -"3560946373","3560946373","US","USA","UNITED STATES" -"3560946374","3560946374","DE","DEU","GERMANY" -"3560946375","3560946375","US","USA","UNITED STATES" -"3560946376","3560946398","DE","DEU","GERMANY" -"3560946399","3560946399","US","USA","UNITED STATES" -"3560946400","3560946408","DE","DEU","GERMANY" -"3560946409","3560946409","US","USA","UNITED STATES" -"3560946410","3560946419","DE","DEU","GERMANY" -"3560946420","3560946420","US","USA","UNITED STATES" -"3560946421","3560946431","DE","DEU","GERMANY" -"3560946432","3560946443","US","USA","UNITED STATES" -"3560946444","3560946447","BR","BRA","BRAZIL" -"3560946448","3560946451","DE","DEU","GERMANY" -"3560946452","3560946455","BO","BOL","BOLIVIA" -"3560946456","3560946467","US","USA","UNITED STATES" -"3560946468","3560946471","BR","BRA","BRAZIL" -"3560946472","3560946483","US","USA","UNITED STATES" -"3560946484","3560946487","MX","MEX","MEXICO" -"3560946488","3560946491","US","USA","UNITED STATES" -"3560946492","3560946495","BR","BRA","BRAZIL" -"3560946496","3560946499","VE","VEN","VENEZUELA" -"3560946500","3560946503","AR","ARG","ARGENTINA" -"3560946504","3560946507","US","USA","UNITED STATES" -"3560946508","3560946511","MX","MEX","MEXICO" -"3560946512","3560946523","US","USA","UNITED STATES" -"3560946524","3560946527","MX","MEX","MEXICO" -"3560946528","3560946531","US","USA","UNITED STATES" -"3560946532","3560946535","CA","CAN","CANADA" -"3560946536","3560946539","PE","PER","PERU" -"3560946540","3560946543","US","USA","UNITED STATES" -"3560946544","3560946547","CA","CAN","CANADA" -"3560946548","3560946551","US","USA","UNITED STATES" -"3560946552","3560946555","PE","PER","PERU" -"3560946556","3560946559","US","USA","UNITED STATES" -"3560946560","3560946563","BR","BRA","BRAZIL" -"3560946564","3560946567","US","USA","UNITED STATES" -"3560946568","3560946571","BR","BRA","BRAZIL" -"3560946572","3560946579","US","USA","UNITED STATES" -"3560946580","3560946583","CA","CAN","CANADA" -"3560946584","3560946587","US","USA","UNITED STATES" -"3560946588","3560946591","AR","ARG","ARGENTINA" -"3560946592","3560946603","US","USA","UNITED STATES" -"3560946604","3560946607","AR","ARG","ARGENTINA" -"3560946608","3560946611","BR","BRA","BRAZIL" -"3560946612","3560946623","US","USA","UNITED STATES" -"3560946624","3560946635","MX","MEX","MEXICO" -"3560946636","3560946643","US","USA","UNITED STATES" -"3560946644","3560946647","AR","ARG","ARGENTINA" -"3560946648","3560946651","MX","MEX","MEXICO" -"3560946652","3560946655","CL","CHL","CHILE" -"3560946656","3560946659","BR","BRA","BRAZIL" -"3560946660","3560946663","MX","MEX","MEXICO" -"3560946664","3560946667","US","USA","UNITED STATES" -"3560946668","3560946671","MX","MEX","MEXICO" -"3560946672","3560946679","BR","BRA","BRAZIL" -"3560946680","3560946687","US","USA","UNITED STATES" -"3560946688","3560946689","DE","DEU","GERMANY" -"3560946690","3560946695","US","USA","UNITED STATES" -"3560946696","3560946696","BR","BRA","BRAZIL" -"3560946697","3560946698","US","USA","UNITED STATES" -"3560946699","3560946700","DE","DEU","GERMANY" -"3560946701","3560946701","CO","COL","COLOMBIA" -"3560946702","3560946706","US","USA","UNITED STATES" -"3560946707","3560946707","VE","VEN","VENEZUELA" -"3560946708","3560946708","BR","BRA","BRAZIL" -"3560946709","3560946710","VE","VEN","VENEZUELA" -"3560946711","3560946711","US","USA","UNITED STATES" -"3560946712","3560946712","VE","VEN","VENEZUELA" -"3560946713","3560946714","US","USA","UNITED STATES" -"3560946715","3560946715","CO","COL","COLOMBIA" -"3560946716","3560946716","US","USA","UNITED STATES" -"3560946717","3560946717","AR","ARG","ARGENTINA" -"3560946718","3560946718","US","USA","UNITED STATES" -"3560946719","3560946720","BR","BRA","BRAZIL" -"3560946721","3560946723","CO","COL","COLOMBIA" -"3560946724","3560946724","MX","MEX","MEXICO" -"3560946725","3560946729","US","USA","UNITED STATES" -"3560946730","3560946730","MX","MEX","MEXICO" -"3560946731","3560946733","US","USA","UNITED STATES" -"3560946734","3560946734","PR","PRI","PUERTO RICO" -"3560946735","3560946747","US","USA","UNITED STATES" -"3560946748","3560946748","DE","DEU","GERMANY" -"3560946749","3560946760","US","USA","UNITED STATES" -"3560946761","3560946761","DE","DEU","GERMANY" -"3560946762","3560946767","US","USA","UNITED STATES" -"3560946768","3560946768","CA","CAN","CANADA" -"3560946769","3560946769","US","USA","UNITED STATES" -"3560946770","3560946825","DE","DEU","GERMANY" -"3560946826","3560946826","US","USA","UNITED STATES" -"3560946827","3560946835","DE","DEU","GERMANY" -"3560946836","3560946836","US","USA","UNITED STATES" -"3560946837","3560946839","DE","DEU","GERMANY" -"3560946840","3560946840","US","USA","UNITED STATES" -"3560946841","3560946943","DE","DEU","GERMANY" -"3560946944","3560946947","US","USA","UNITED STATES" -"3560946948","3560946951","BR","BRA","BRAZIL" -"3560946952","3560946955","MX","MEX","MEXICO" -"3560946956","3560946959","CO","COL","COLOMBIA" -"3560946960","3560946963","MX","MEX","MEXICO" -"3560946964","3560946967","AR","ARG","ARGENTINA" -"3560946968","3560946979","US","USA","UNITED STATES" -"3560946980","3560946987","DE","DEU","GERMANY" -"3560946988","3560946991","US","USA","UNITED STATES" -"3560946992","3560946995","DE","DEU","GERMANY" -"3560946996","3560946999","UY","URY","URUGUAY" -"3560947000","3560947015","US","USA","UNITED STATES" -"3560947016","3560947019","AR","ARG","ARGENTINA" -"3560947020","3560947027","US","USA","UNITED STATES" -"3560947028","3560947031","CO","COL","COLOMBIA" -"3560947032","3560947039","US","USA","UNITED STATES" -"3560947040","3560947043","BR","BRA","BRAZIL" -"3560947044","3560947067","US","USA","UNITED STATES" -"3560947068","3560947071","AR","ARG","ARGENTINA" -"3560947072","3560947075","BR","BRA","BRAZIL" -"3560947076","3560947095","US","USA","UNITED STATES" -"3560947096","3560947099","MX","MEX","MEXICO" -"3560947100","3560947107","US","USA","UNITED STATES" -"3560947108","3560947111","DE","DEU","GERMANY" -"3560947112","3560947123","US","USA","UNITED STATES" -"3560947124","3560947127","CO","COL","COLOMBIA" -"3560947128","3560947143","US","USA","UNITED STATES" -"3560947144","3560947147","DE","DEU","GERMANY" -"3560947148","3560947191","US","USA","UNITED STATES" -"3560947192","3560947195","VE","VEN","VENEZUELA" -"3560947196","3560947199","DE","DEU","GERMANY" -"3560947200","3560947203","CA","CAN","CANADA" -"3560947204","3560947207","US","USA","UNITED STATES" -"3560947208","3560947211","DE","DEU","GERMANY" -"3560947212","3560947231","US","USA","UNITED STATES" -"3560947232","3560947235","CA","CAN","CANADA" -"3560947236","3560947239","CO","COL","COLOMBIA" -"3560947240","3560947247","US","USA","UNITED STATES" -"3560947248","3560947251","CA","CAN","CANADA" -"3560947252","3560947267","US","USA","UNITED STATES" -"3560947268","3560947271","CO","COL","COLOMBIA" -"3560947272","3560947275","US","USA","UNITED STATES" -"3560947276","3560947279","AR","ARG","ARGENTINA" -"3560947280","3560947283","MX","MEX","MEXICO" -"3560947284","3560947287","US","USA","UNITED STATES" -"3560947288","3560947291","BR","BRA","BRAZIL" -"3560947292","3560947331","US","USA","UNITED STATES" -"3560947332","3560947335","MX","MEX","MEXICO" -"3560947336","3560947343","US","USA","UNITED STATES" -"3560947344","3560947347","MX","MEX","MEXICO" -"3560947348","3560947351","CO","COL","COLOMBIA" -"3560947352","3560947355","US","USA","UNITED STATES" -"3560947356","3560947359","AN","ANT","NETHERLANDS ANTILLES" -"3560947360","3560947363","US","USA","UNITED STATES" -"3560947364","3560947367","HN","HND","HONDURAS" -"3560947368","3560947371","BR","BRA","BRAZIL" -"3560947372","3560947375","CA","CAN","CANADA" -"3560947376","3560947383","US","USA","UNITED STATES" -"3560947384","3560947391","CO","COL","COLOMBIA" -"3560947392","3560947395","MX","MEX","MEXICO" -"3560947396","3560947399","US","USA","UNITED STATES" -"3560947400","3560947407","AR","ARG","ARGENTINA" -"3560947408","3560947411","US","USA","UNITED STATES" -"3560947412","3560947415","AR","ARG","ARGENTINA" -"3560947416","3560947431","US","USA","UNITED STATES" -"3560947432","3560947435","MX","MEX","MEXICO" -"3560947436","3560947439","DE","DEU","GERMANY" -"3560947440","3560947443","BR","BRA","BRAZIL" -"3560947444","3560947455","US","USA","UNITED STATES" -"3560947456","3560947495","JP","JPN","JAPAN" -"3560947496","3560947499","KR","KOR","REPUBLIC OF KOREA" -"3560947500","3560947686","JP","JPN","JAPAN" -"3560947687","3560947687","DE","DEU","GERMANY" -"3560947688","3560947711","JP","JPN","JAPAN" -"3560947712","3560950863","SE","SWE","SWEDEN" -"3560950864","3560950867","DK","DNK","DENMARK" -"3560950868","3560950871","ES","ESP","SPAIN" -"3560950872","3560951027","SE","SWE","SWEDEN" -"3560951028","3560951031","DK","DNK","DENMARK" -"3560951032","3560951039","SE","SWE","SWEDEN" -"3560951040","3560951043","NO","NOR","NORWAY" -"3560951044","3560951103","SE","SWE","SWEDEN" -"3560951104","3560951107","DE","DEU","GERMANY" -"3560951108","3560951111","DK","DNK","DENMARK" -"3560951112","3560951115","FR","FRA","FRANCE" -"3560951116","3560951195","SE","SWE","SWEDEN" -"3560951196","3560951199","DK","DNK","DENMARK" -"3560951200","3560951207","SE","SWE","SWEDEN" -"3560951208","3560951211","DK","DNK","DENMARK" -"3560951212","3560951307","SE","SWE","SWEDEN" -"3560951308","3560951311","IT","ITA","ITALY" -"3560951312","3560951383","SE","SWE","SWEDEN" -"3560951384","3560951387","NO","NOR","NORWAY" -"3560951388","3560951391","SE","SWE","SWEDEN" -"3560951392","3560951395","IT","ITA","ITALY" -"3560951396","3560951399","DE","DEU","GERMANY" -"3560951400","3560951403","SE","SWE","SWEDEN" -"3560951404","3560951407","NO","NOR","NORWAY" -"3560951408","3560951423","SE","SWE","SWEDEN" -"3560951424","3560951427","NL","NLD","NETHERLANDS" -"3560951428","3560951447","SE","SWE","SWEDEN" -"3560951448","3560951451","FR","FRA","FRANCE" -"3560951452","3560951551","SE","SWE","SWEDEN" -"3560951552","3560951555","ES","ESP","SPAIN" -"3560951556","3560951559","NO","NOR","NORWAY" -"3560951560","3560951583","SE","SWE","SWEDEN" -"3560951584","3560951587","FI","FIN","FINLAND" -"3560951588","3560951679","SE","SWE","SWEDEN" -"3560951680","3560951683","DE","DEU","GERMANY" -"3560951684","3560951915","SE","SWE","SWEDEN" -"3560951916","3560951919","PL","POL","POLAND" -"3560951920","3560951935","SE","SWE","SWEDEN" -"3560951936","3560951940","NL","NLD","NETHERLANDS" -"3560951941","3560953103","SE","SWE","SWEDEN" -"3560953104","3560953119","JP","JPN","JAPAN" -"3560953120","3560954111","SE","SWE","SWEDEN" -"3560954112","3560954367","AX","FIN","FINLAND" -"3560954368","3560955903","SE","SWE","SWEDEN" -"3560955904","3560964095","BE","BEL","BELGIUM" -"3560964096","3560996863","NL","NLD","NETHERLANDS" -"3561005056","3561013247","ES","ESP","SPAIN" -"3561013248","3561021439","TR","TUR","TURKEY" -"3561021440","3561022719","DE","DEU","GERMANY" -"3561022720","3561022975","AT","AUT","AUSTRIA" -"3561022976","3561037823","DE","DEU","GERMANY" -"3561037824","3561039231","BE","BEL","BELGIUM" -"3561039232","3561039263","NL","NLD","NETHERLANDS" -"3561039264","3561039327","BE","BEL","BELGIUM" -"3561039328","3561039330","NL","NLD","NETHERLANDS" -"3561039331","3561046015","BE","BEL","BELGIUM" -"3561046016","3561054207","RU","RUS","RUSSIAN FEDERATION" -"3561054208","3561062399","MT","MLT","MALTA" -"3561062400","3561070591","TR","TUR","TURKEY" -"3561070592","3561070847","DE","DEU","GERMANY" -"3561070848","3561078783","CH","CHE","SWITZERLAND" -"3561078784","3561095167","CZ","CZE","CZECH REPUBLIC" -"3561095168","3561103359","DE","DEU","GERMANY" -"3561103360","3561111551","UA","UKR","UKRAINE" -"3561111552","3561119743","LU","LUX","LUXEMBOURG" -"3561119744","3561127935","IT","ITA","ITALY" -"3561127936","3561136127","DE","DEU","GERMANY" -"3561136128","3561144319","ES","ESP","SPAIN" -"3561144320","3561152511","FI","FIN","FINLAND" -"3561152512","3561160703","IT","ITA","ITALY" -"3561160704","3561168895","RU","RUS","RUSSIAN FEDERATION" -"3561168896","3561177087","FR","FRA","FRANCE" -"3561177088","3561185279","CZ","CZE","CZECH REPUBLIC" -"3561185280","3561193471","GB","GBR","UNITED KINGDOM" -"3561193472","3561201663","PL","POL","POLAND" -"3561201664","3561206655","NL","NLD","NETHERLANDS" -"3561206656","3561206663","BE","BEL","BELGIUM" -"3561206664","3561209855","NL","NLD","NETHERLANDS" -"3561209856","3561218047","GB","GBR","UNITED KINGDOM" -"3561218048","3561226239","AT","AUT","AUSTRIA" -"3561226240","3561234431","FI","FIN","FINLAND" -"3561234432","3561242623","TR","TUR","TURKEY" -"3561242624","3561259007","DE","DEU","GERMANY" -"3561259008","3561267199","IL","ISR","ISRAEL" -"3561267200","3561275391","UA","UKR","UKRAINE" -"3561275392","3561291775","BE","BEL","BELGIUM" -"3561291776","3561299967","CS","SCG","SERBIA AND MONTENEGRO" -"3561299968","3561308159","GB","GBR","UNITED KINGDOM" -"3561308160","3561316351","PL","POL","POLAND" -"3561316352","3561324543","RU","RUS","RUSSIAN FEDERATION" -"3561324544","3561332735","IT","ITA","ITALY" -"3561332736","3561340927","AT","AUT","AUSTRIA" -"3561340928","3561357311","GB","GBR","UNITED KINGDOM" -"3561357312","3561365503","DK","DNK","DENMARK" -"3561365504","3561373695","SA","SAU","SAUDI ARABIA" -"3561373696","3561381887","GB","GBR","UNITED KINGDOM" -"3561381888","3561382479","AT","AUT","AUSTRIA" -"3561382480","3561382495","DE","DEU","GERMANY" -"3561382496","3561390079","AT","AUT","AUSTRIA" -"3561390080","3561398271","BG","BGR","BULGARIA" -"3561398272","3561406463","LV","LVA","LATVIA" -"3561406464","3561414655","GR","GRC","GREECE" -"3561414656","3561422847","IT","ITA","ITALY" -"3561422848","3561427207","BE","BEL","BELGIUM" -"3561427208","3561427211","NL","NLD","NETHERLANDS" -"3561427212","3561428135","BE","BEL","BELGIUM" -"3561428136","3561428143","NL","NLD","NETHERLANDS" -"3561428144","3561429279","BE","BEL","BELGIUM" -"3561429280","3561429287","NL","NLD","NETHERLANDS" -"3561429288","3561431039","BE","BEL","BELGIUM" -"3561431040","3561439231","SA","SAU","SAUDI ARABIA" -"3561439232","3561447423","NO","NOR","NORWAY" -"3561447424","3561455615","CH","CHE","SWITZERLAND" -"3561455616","3561471999","CZ","CZE","CZECH REPUBLIC" -"3561472000","3561480191","DE","DEU","GERMANY" -"3561480192","3561488383","GB","GBR","UNITED KINGDOM" -"3561488384","3561496575","OM","OMN","OMAN" -"3561496576","3561496831","NL","NLD","NETHERLANDS" -"3561496832","3561496887","GB","GBR","UNITED KINGDOM" -"3561496888","3561496891","NL","NLD","NETHERLANDS" -"3561496892","3561497215","GB","GBR","UNITED KINGDOM" -"3561497216","3561497423","NL","NLD","NETHERLANDS" -"3561497424","3561497471","GB","GBR","UNITED KINGDOM" -"3561497472","3561497535","NL","NLD","NETHERLANDS" -"3561497536","3561497599","GB","GBR","UNITED KINGDOM" -"3561497600","3561498111","NL","NLD","NETHERLANDS" -"3561498112","3561498399","GB","GBR","UNITED KINGDOM" -"3561498400","3561498431","NL","NLD","NETHERLANDS" -"3561498432","3561498487","GB","GBR","UNITED KINGDOM" -"3561498488","3561498491","NL","NLD","NETHERLANDS" -"3561498492","3561498495","GB","GBR","UNITED KINGDOM" -"3561498496","3561498559","NL","NLD","NETHERLANDS" -"3561498560","3561498607","GB","GBR","UNITED KINGDOM" -"3561498608","3561498615","NL","NLD","NETHERLANDS" -"3561498616","3561498623","GB","GBR","UNITED KINGDOM" -"3561498624","3561500415","NL","NLD","NETHERLANDS" -"3561500416","3561500671","GB","GBR","UNITED KINGDOM" -"3561500672","3561500703","NL","NLD","NETHERLANDS" -"3561500704","3561500719","GB","GBR","UNITED KINGDOM" -"3561500720","3561500751","NL","NLD","NETHERLANDS" -"3561500752","3561500763","GB","GBR","UNITED KINGDOM" -"3561500764","3561500767","NL","NLD","NETHERLANDS" -"3561500768","3561500775","GB","GBR","UNITED KINGDOM" -"3561500776","3561500807","NL","NLD","NETHERLANDS" -"3561500808","3561500815","GB","GBR","UNITED KINGDOM" -"3561500816","3561501311","NL","NLD","NETHERLANDS" -"3561501312","3561501343","GB","GBR","UNITED KINGDOM" -"3561501344","3561501375","NL","NLD","NETHERLANDS" -"3561501376","3561501407","GB","GBR","UNITED KINGDOM" -"3561501408","3561501443","NL","NLD","NETHERLANDS" -"3561501444","3561501487","GB","GBR","UNITED KINGDOM" -"3561501488","3561501503","NL","NLD","NETHERLANDS" -"3561501504","3561501535","GB","GBR","UNITED KINGDOM" -"3561501536","3561501631","NL","NLD","NETHERLANDS" -"3561501632","3561501695","GB","GBR","UNITED KINGDOM" -"3561501696","3561502047","NL","NLD","NETHERLANDS" -"3561502048","3561502079","GB","GBR","UNITED KINGDOM" -"3561502080","3561502143","NL","NLD","NETHERLANDS" -"3561502144","3561502207","GB","GBR","UNITED KINGDOM" -"3561502208","3561502631","NL","NLD","NETHERLANDS" -"3561502632","3561502655","GB","GBR","UNITED KINGDOM" -"3561502656","3561504255","NL","NLD","NETHERLANDS" -"3561504256","3561504383","GB","GBR","UNITED KINGDOM" -"3561504384","3561504767","NL","NLD","NETHERLANDS" -"3561504768","3561512959","DE","DEU","GERMANY" -"3561512960","3561521151","SI","SVN","SLOVENIA" -"3561521152","3561529343","GE","GEO","GEORGIA" -"3561529344","3561534559","DE","DEU","GERMANY" -"3561534560","3561534575","US","USA","UNITED STATES" -"3561534576","3561537535","DE","DEU","GERMANY" -"3561537536","3561545727","BG","BGR","BULGARIA" -"3561545728","3561553919","NL","NLD","NETHERLANDS" -"3561553920","3561562111","SE","SWE","SWEDEN" -"3561562112","3561570303","ES","ESP","SPAIN" -"3561570304","3561578495","AM","ARM","ARMENIA" -"3561578496","3561586687","RU","RUS","RUSSIAN FEDERATION" -"3561586688","3561594879","BG","BGR","BULGARIA" -"3561594880","3561594935","SE","SWE","SWEDEN" -"3561594936","3561594939","DK","DNK","DENMARK" -"3561594940","3561594975","SE","SWE","SWEDEN" -"3561594976","3561595007","DK","DNK","DENMARK" -"3561595008","3561603071","SE","SWE","SWEDEN" -"3561603072","3561603263","FR","FRA","FRANCE" -"3561603264","3561603295","GB","GBR","UNITED KINGDOM" -"3561603296","3561603455","FR","FRA","FRANCE" -"3561603456","3561603487","GB","GBR","UNITED KINGDOM" -"3561603488","3561604351","FR","FRA","FRANCE" -"3561604352","3561604895","GB","GBR","UNITED KINGDOM" -"3561604896","3561604911","FR","FRA","FRANCE" -"3561604912","3561605119","GB","GBR","UNITED KINGDOM" -"3561605120","3561605375","FR","FRA","FRANCE" -"3561605376","3561605631","AU","AUS","AUSTRALIA" -"3561605632","3561607231","FR","FRA","FRANCE" -"3561607232","3561607235","GB","GBR","UNITED KINGDOM" -"3561607236","3561607239","FR","FRA","FRANCE" -"3561607240","3561607247","GB","GBR","UNITED KINGDOM" -"3561607248","3561607343","FR","FRA","FRANCE" -"3561607344","3561607359","GB","GBR","UNITED KINGDOM" -"3561607360","3561607679","FR","FRA","FRANCE" -"3561607680","3561607711","GB","GBR","UNITED KINGDOM" -"3561607712","3561607727","FR","FRA","FRANCE" -"3561607728","3561607743","GB","GBR","UNITED KINGDOM" -"3561607744","3561610239","FR","FRA","FRANCE" -"3561610240","3561610495","US","USA","UNITED STATES" -"3561610496","3561610527","FR","FRA","FRANCE" -"3561610528","3561610719","GB","GBR","UNITED KINGDOM" -"3561610720","3561611295","FR","FRA","FRANCE" -"3561611296","3561611559","GB","GBR","UNITED KINGDOM" -"3561611560","3561611567","FR","FRA","FRANCE" -"3561611568","3561614175","GB","GBR","UNITED KINGDOM" -"3561614176","3561614199","FR","FRA","FRANCE" -"3561614200","3561614335","GB","GBR","UNITED KINGDOM" -"3561614336","3561614591","FR","FRA","FRANCE" -"3561614592","3561615359","GB","GBR","UNITED KINGDOM" -"3561615360","3561615615","FR","FRA","FRANCE" -"3561615616","3561615871","IT","ITA","ITALY" -"3561615872","3561616383","FR","FRA","FRANCE" -"3561616384","3561616495","GB","GBR","UNITED KINGDOM" -"3561616496","3561616543","FR","FRA","FRANCE" -"3561616544","3561616559","GB","GBR","UNITED KINGDOM" -"3561616560","3561616575","FR","FRA","FRANCE" -"3561616576","3561616895","GB","GBR","UNITED KINGDOM" -"3561616896","3561616959","FR","FRA","FRANCE" -"3561616960","3561617151","GB","GBR","UNITED KINGDOM" -"3561617152","3561617407","FR","FRA","FRANCE" -"3561617408","3561617919","CH","CHE","SWITZERLAND" -"3561617920","3561618175","SE","SWE","SWEDEN" -"3561618176","3561618431","IE","IRL","IRELAND" -"3561618432","3561618687","DK","DNK","DENMARK" -"3561618688","3561618815","FR","FRA","FRANCE" -"3561618816","3561618943","PL","POL","POLAND" -"3561618944","3561636863","GB","GBR","UNITED KINGDOM" -"3561636864","3561637119","BE","BEL","BELGIUM" -"3561637120","3561637375","ES","ESP","SPAIN" -"3561637376","3561637631","CH","CHE","SWITZERLAND" -"3561637632","3561637887","IT","ITA","ITALY" -"3561637888","3561638143","AT","AUT","AUSTRIA" -"3561638144","3561638399","SE","SWE","SWEDEN" -"3561638400","3561638655","US","USA","UNITED STATES" -"3561638656","3561638911","DK","DNK","DENMARK" -"3561638912","3561639167","DE","DEU","GERMANY" -"3561639168","3561639423","GB","GBR","UNITED KINGDOM" -"3561639424","3561639679","DE","DEU","GERMANY" -"3561639680","3561640575","GB","GBR","UNITED KINGDOM" -"3561640576","3561640831","FR","FRA","FRANCE" -"3561640832","3561641983","GB","GBR","UNITED KINGDOM" -"3561641984","3561642239","DE","DEU","GERMANY" -"3561642240","3561652223","GB","GBR","UNITED KINGDOM" -"3561652224","3561668607","CH","CHE","SWITZERLAND" -"3561668608","3561679359","RU","RUS","RUSSIAN FEDERATION" -"3561679360","3561679615","UA","UKR","UKRAINE" -"3561679616","3561684991","RU","RUS","RUSSIAN FEDERATION" -"3561684992","3561693183","BG","BGR","BULGARIA" -"3561693184","3561694487","DE","DEU","GERMANY" -"3561694488","3561694495","CH","CHE","SWITZERLAND" -"3561694496","3561701375","DE","DEU","GERMANY" -"3561701376","3561706031","SE","SWE","SWEDEN" -"3561706032","3561706047","DK","DNK","DENMARK" -"3561706048","3561709567","SE","SWE","SWEDEN" -"3561709568","3561717759","PL","POL","POLAND" -"3561717760","3561725951","RU","RUS","RUSSIAN FEDERATION" -"3561725952","3561734143","ES","ESP","SPAIN" -"3561734144","3561742335","RU","RUS","RUSSIAN FEDERATION" -"3561750528","3561758719","KZ","KAZ","KAZAKHSTAN" -"3561758720","3561766911","PL","POL","POLAND" -"3561766912","3561775103","SA","SAU","SAUDI ARABIA" -"3561775104","3561783295","IL","ISR","ISRAEL" -"3561783296","3561799679","RU","RUS","RUSSIAN FEDERATION" -"3561799680","3561807871","DE","DEU","GERMANY" -"3561807872","3561816063","BE","BEL","BELGIUM" -"3561816064","3561824255","VA","VAT","HOLY SEE (VATICAN CITY STATE)" -"3561824256","3561832447","LI","LIE","LIECHTENSTEIN" -"3561832448","3561840639","IT","ITA","ITALY" -"3561840640","3561848831","PL","POL","POLAND" -"3561848832","3561857023","RU","RUS","RUSSIAN FEDERATION" -"3561857024","3561865215","DE","DEU","GERMANY" -"3561865216","3561873407","QA","QAT","QATAR" -"3561873408","3561881599","DE","DEU","GERMANY" -"3561881600","3561889791","IT","ITA","ITALY" -"3561889792","3561897983","FR","FRA","FRANCE" -"3561897984","3561906175","GB","GBR","UNITED KINGDOM" -"3561906176","3561907759","DE","DEU","GERMANY" -"3561907760","3561907763","GB","GBR","UNITED KINGDOM" -"3561907764","3561910207","DE","DEU","GERMANY" -"3561910208","3561910223","GB","GBR","UNITED KINGDOM" -"3561910224","3561914367","DE","DEU","GERMANY" -"3561914368","3561922559","ES","ESP","SPAIN" -"3561922560","3561922855","NL","NLD","NETHERLANDS" -"3561922856","3561922911","GB","GBR","UNITED KINGDOM" -"3561922912","3561922975","NL","NLD","NETHERLANDS" -"3561922976","3561922991","GB","GBR","UNITED KINGDOM" -"3561922992","3561923015","NL","NLD","NETHERLANDS" -"3561923016","3561923063","GB","GBR","UNITED KINGDOM" -"3561923064","3561923067","NL","NLD","NETHERLANDS" -"3561923068","3561923071","GB","GBR","UNITED KINGDOM" -"3561923072","3561923327","NL","NLD","NETHERLANDS" -"3561923328","3561923403","GB","GBR","UNITED KINGDOM" -"3561923404","3561923407","NL","NLD","NETHERLANDS" -"3561923408","3561923455","GB","GBR","UNITED KINGDOM" -"3561923456","3561923551","NL","NLD","NETHERLANDS" -"3561923552","3561923583","GB","GBR","UNITED KINGDOM" -"3561923584","3561923679","NL","NLD","NETHERLANDS" -"3561923680","3561923871","GB","GBR","UNITED KINGDOM" -"3561923872","3561924191","NL","NLD","NETHERLANDS" -"3561924192","3561924199","GB","GBR","UNITED KINGDOM" -"3561924200","3561924351","NL","NLD","NETHERLANDS" -"3561924352","3561924631","GB","GBR","UNITED KINGDOM" -"3561924632","3561924647","NL","NLD","NETHERLANDS" -"3561924648","3561924655","GB","GBR","UNITED KINGDOM" -"3561924656","3561924671","NL","NLD","NETHERLANDS" -"3561924672","3561924679","GB","GBR","UNITED KINGDOM" -"3561924680","3561924687","NL","NLD","NETHERLANDS" -"3561924688","3561924703","GB","GBR","UNITED KINGDOM" -"3561924704","3561924719","NL","NLD","NETHERLANDS" -"3561924720","3561924863","GB","GBR","UNITED KINGDOM" -"3561924864","3561924871","NL","NLD","NETHERLANDS" -"3561924872","3561924911","GB","GBR","UNITED KINGDOM" -"3561924912","3561924959","NL","NLD","NETHERLANDS" -"3561924960","3561925007","GB","GBR","UNITED KINGDOM" -"3561925008","3561925039","NL","NLD","NETHERLANDS" -"3561925040","3561925087","GB","GBR","UNITED KINGDOM" -"3561925088","3561925119","NL","NLD","NETHERLANDS" -"3561925120","3561926943","GB","GBR","UNITED KINGDOM" -"3561926944","3561926975","NL","NLD","NETHERLANDS" -"3561926976","3561927167","GB","GBR","UNITED KINGDOM" -"3561927168","3561927423","NL","NLD","NETHERLANDS" -"3561927424","3561927551","GB","GBR","UNITED KINGDOM" -"3561927552","3561927647","NL","NLD","NETHERLANDS" -"3561927648","3561927663","GB","GBR","UNITED KINGDOM" -"3561927664","3561927679","NL","NLD","NETHERLANDS" -"3561927680","3561927823","GB","GBR","UNITED KINGDOM" -"3561927824","3561927839","NL","NLD","NETHERLANDS" -"3561927840","3561928191","GB","GBR","UNITED KINGDOM" -"3561928192","3561929727","NL","NLD","NETHERLANDS" -"3561929728","3561929743","GB","GBR","UNITED KINGDOM" -"3561929744","3561929791","NL","NLD","NETHERLANDS" -"3561929792","3561929879","GB","GBR","UNITED KINGDOM" -"3561929880","3561929919","NL","NLD","NETHERLANDS" -"3561929920","3561929967","GB","GBR","UNITED KINGDOM" -"3561929968","3561930335","NL","NLD","NETHERLANDS" -"3561930336","3561930503","GB","GBR","UNITED KINGDOM" -"3561930504","3561930511","NL","NLD","NETHERLANDS" -"3561930512","3561930751","GB","GBR","UNITED KINGDOM" -"3561938944","3561940991","IE","IRL","IRELAND" -"3561940992","3561942015","GB","GBR","UNITED KINGDOM" -"3561942016","3561947135","IE","IRL","IRELAND" -"3561947136","3561963143","DE","DEU","GERMANY" -"3561963144","3561963151","AU","AUS","AUSTRALIA" -"3561963152","3561963519","DE","DEU","GERMANY" -"3561963520","3561971711","BE","BEL","BELGIUM" -"3561971712","3561975807","TR","TUR","TURKEY" -"3561979904","3561988095","ES","ESP","SPAIN" -"3561988096","3562004479","DE","DEU","GERMANY" -"3562004480","3562012479","NL","NLD","NETHERLANDS" -"3562012480","3562012483","KN","KNA","SAINT KITTS AND NEVIS" -"3562012484","3562012671","NL","NLD","NETHERLANDS" -"3562012672","3562020863","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3562020864","3562029055","UA","UKR","UKRAINE" -"3562029056","3562037247","CZ","CZE","CZECH REPUBLIC" -"3562037248","3562045439","CH","CHE","SWITZERLAND" -"3562045440","3562056711","ES","ESP","SPAIN" -"3562056712","3562056719","NL","NLD","NETHERLANDS" -"3562056720","3562056911","ES","ESP","SPAIN" -"3562056912","3562056927","FR","FRA","FRANCE" -"3562056928","3562057215","ES","ESP","SPAIN" -"3562057216","3562057247","NL","NLD","NETHERLANDS" -"3562057248","3562057263","BE","BEL","BELGIUM" -"3562057264","3562057471","ES","ESP","SPAIN" -"3562057472","3562057727","DE","DEU","GERMANY" -"3562057728","3562057975","ES","ESP","SPAIN" -"3562057976","3562057983","FR","FRA","FRANCE" -"3562057984","3562058303","ES","ESP","SPAIN" -"3562058304","3562058367","IT","ITA","ITALY" -"3562058368","3562059327","ES","ESP","SPAIN" -"3562059328","3562059335","CH","CHE","SWITZERLAND" -"3562059336","3562059391","ES","ESP","SPAIN" -"3562059392","3562059775","CH","CHE","SWITZERLAND" -"3562059776","3562061823","ES","ESP","SPAIN" -"3562061824","3562070015","IT","ITA","ITALY" -"3562070016","3562078207","DE","DEU","GERMANY" -"3562078208","3562086399","SK","SVK","SLOVAKIA" -"3562086400","3562087423","SE","SWE","SWEDEN" -"3562087424","3562088447","GB","GBR","UNITED KINGDOM" -"3562088448","3562094591","SE","SWE","SWEDEN" -"3562094592","3562094975","GB","GBR","UNITED KINGDOM" -"3562094976","3562095775","FR","FRA","FRANCE" -"3562095776","3562095807","GB","GBR","UNITED KINGDOM" -"3562095808","3562095887","FR","FRA","FRANCE" -"3562095888","3562095903","GB","GBR","UNITED KINGDOM" -"3562095904","3562096383","FR","FRA","FRANCE" -"3562096384","3562096639","GB","GBR","UNITED KINGDOM" -"3562096640","3562096767","FR","FRA","FRANCE" -"3562096768","3562096927","GB","GBR","UNITED KINGDOM" -"3562096928","3562097055","FR","FRA","FRANCE" -"3562097056","3562097151","GB","GBR","UNITED KINGDOM" -"3562097152","3562097687","FR","FRA","FRANCE" -"3562097688","3562097695","GB","GBR","UNITED KINGDOM" -"3562097696","3562097727","FR","FRA","FRANCE" -"3562097728","3562097791","GB","GBR","UNITED KINGDOM" -"3562097792","3562097919","FR","FRA","FRANCE" -"3562097920","3562098175","GB","GBR","UNITED KINGDOM" -"3562098176","3562098207","FR","FRA","FRANCE" -"3562098208","3562098223","GB","GBR","UNITED KINGDOM" -"3562098224","3562098271","FR","FRA","FRANCE" -"3562098272","3562098367","GB","GBR","UNITED KINGDOM" -"3562098368","3562098375","FR","FRA","FRANCE" -"3562098376","3562098383","GB","GBR","UNITED KINGDOM" -"3562098384","3562098431","FR","FRA","FRANCE" -"3562098432","3562098687","GB","GBR","UNITED KINGDOM" -"3562098688","3562098879","FR","FRA","FRANCE" -"3562098880","3562098895","BE","BEL","BELGIUM" -"3562098896","3562098911","FR","FRA","FRANCE" -"3562098912","3562099199","GB","GBR","UNITED KINGDOM" -"3562099200","3562099359","FR","FRA","FRANCE" -"3562099360","3562099391","GB","GBR","UNITED KINGDOM" -"3562099392","3562099423","FR","FRA","FRANCE" -"3562099424","3562099519","GB","GBR","UNITED KINGDOM" -"3562099520","3562099583","FR","FRA","FRANCE" -"3562099584","3562099615","GB","GBR","UNITED KINGDOM" -"3562099616","3562099647","FR","FRA","FRANCE" -"3562099648","3562099903","GB","GBR","UNITED KINGDOM" -"3562099904","3562099935","FR","FRA","FRANCE" -"3562099936","3562100223","GB","GBR","UNITED KINGDOM" -"3562100224","3562100351","FR","FRA","FRANCE" -"3562100352","3562100415","GB","GBR","UNITED KINGDOM" -"3562100416","3562100479","FR","FRA","FRANCE" -"3562100480","3562100543","GB","GBR","UNITED KINGDOM" -"3562100544","3562100575","FR","FRA","FRANCE" -"3562100576","3562100703","GB","GBR","UNITED KINGDOM" -"3562100704","3562100735","FR","FRA","FRANCE" -"3562100736","3562100863","GB","GBR","UNITED KINGDOM" -"3562100864","3562101215","FR","FRA","FRANCE" -"3562101216","3562101375","GB","GBR","UNITED KINGDOM" -"3562101376","3562101439","FR","FRA","FRANCE" -"3562101440","3562101471","GB","GBR","UNITED KINGDOM" -"3562101472","3562101535","FR","FRA","FRANCE" -"3562101536","3562101631","GB","GBR","UNITED KINGDOM" -"3562101632","3562101647","FR","FRA","FRANCE" -"3562101648","3562101663","GB","GBR","UNITED KINGDOM" -"3562101664","3562101695","FR","FRA","FRANCE" -"3562101696","3562101759","GB","GBR","UNITED KINGDOM" -"3562101760","3562101887","FR","FRA","FRANCE" -"3562101888","3562101951","GB","GBR","UNITED KINGDOM" -"3562101952","3562101983","FR","FRA","FRANCE" -"3562101984","3562102015","GB","GBR","UNITED KINGDOM" -"3562102016","3562102111","FR","FRA","FRANCE" -"3562102112","3562102143","GB","GBR","UNITED KINGDOM" -"3562102144","3562102335","FR","FRA","FRANCE" -"3562102336","3562102367","GB","GBR","UNITED KINGDOM" -"3562102368","3562102415","FR","FRA","FRANCE" -"3562102416","3562102431","NL","NLD","NETHERLANDS" -"3562102432","3562102463","DE","DEU","GERMANY" -"3562102464","3562102655","FR","FRA","FRANCE" -"3562102656","3562102719","GB","GBR","UNITED KINGDOM" -"3562102720","3562102735","FR","FRA","FRANCE" -"3562102736","3562102751","GB","GBR","UNITED KINGDOM" -"3562102752","3562102783","FR","FRA","FRANCE" -"3562102784","3562103039","GB","GBR","UNITED KINGDOM" -"3562103040","3562103295","FR","FRA","FRANCE" -"3562103296","3562103423","GB","GBR","UNITED KINGDOM" -"3562103424","3562103647","FR","FRA","FRANCE" -"3562103648","3562103711","GB","GBR","UNITED KINGDOM" -"3562103712","3562103743","FR","FRA","FRANCE" -"3562103744","3562103807","GB","GBR","UNITED KINGDOM" -"3562103808","3562103903","FR","FRA","FRANCE" -"3562103904","3562103967","GB","GBR","UNITED KINGDOM" -"3562103968","3562103999","FR","FRA","FRANCE" -"3562104000","3562104351","GB","GBR","UNITED KINGDOM" -"3562104352","3562104383","FR","FRA","FRANCE" -"3562104384","3562104447","GB","GBR","UNITED KINGDOM" -"3562104448","3562104511","FR","FRA","FRANCE" -"3562104512","3562104831","GB","GBR","UNITED KINGDOM" -"3562104832","3562104927","FR","FRA","FRANCE" -"3562104928","3562104959","GB","GBR","UNITED KINGDOM" -"3562104960","3562105007","FR","FRA","FRANCE" -"3562105008","3562105119","GB","GBR","UNITED KINGDOM" -"3562105120","3562105151","FR","FRA","FRANCE" -"3562105152","3562105167","GB","GBR","UNITED KINGDOM" -"3562105168","3562105199","FR","FRA","FRANCE" -"3562105200","3562105247","GB","GBR","UNITED KINGDOM" -"3562105248","3562105343","FR","FRA","FRANCE" -"3562105344","3562105471","GB","GBR","UNITED KINGDOM" -"3562105472","3562105487","FR","FRA","FRANCE" -"3562105488","3562105503","GB","GBR","UNITED KINGDOM" -"3562105504","3562105535","DE","DEU","GERMANY" -"3562105536","3562105567","FR","FRA","FRANCE" -"3562105568","3562105599","GB","GBR","UNITED KINGDOM" -"3562105600","3562105855","FR","FRA","FRANCE" -"3562105856","3562106143","GB","GBR","UNITED KINGDOM" -"3562106144","3562106159","FR","FRA","FRANCE" -"3562106160","3562106191","GB","GBR","UNITED KINGDOM" -"3562106192","3562106271","FR","FRA","FRANCE" -"3562106272","3562106367","GB","GBR","UNITED KINGDOM" -"3562106368","3562106495","FR","FRA","FRANCE" -"3562106496","3562106527","GB","GBR","UNITED KINGDOM" -"3562106528","3562106559","FR","FRA","FRANCE" -"3562106560","3562106623","GB","GBR","UNITED KINGDOM" -"3562106624","3562106911","FR","FRA","FRANCE" -"3562106912","3562106927","GB","GBR","UNITED KINGDOM" -"3562106928","3562106959","FR","FRA","FRANCE" -"3562106960","3562107007","GB","GBR","UNITED KINGDOM" -"3562107008","3562107103","FR","FRA","FRANCE" -"3562107104","3562107119","GB","GBR","UNITED KINGDOM" -"3562107120","3562107135","FR","FRA","FRANCE" -"3562107136","3562107231","GB","GBR","UNITED KINGDOM" -"3562107232","3562107263","FR","FRA","FRANCE" -"3562107264","3562107327","GB","GBR","UNITED KINGDOM" -"3562107328","3562107391","FR","FRA","FRANCE" -"3562107392","3562107503","GB","GBR","UNITED KINGDOM" -"3562107504","3562107583","FR","FRA","FRANCE" -"3562107584","3562107647","GB","GBR","UNITED KINGDOM" -"3562107648","3562107711","FR","FRA","FRANCE" -"3562107712","3562107775","GB","GBR","UNITED KINGDOM" -"3562107776","3562107807","FR","FRA","FRANCE" -"3562107808","3562107887","GB","GBR","UNITED KINGDOM" -"3562107888","3562108063","FR","FRA","FRANCE" -"3562108064","3562108159","GB","GBR","UNITED KINGDOM" -"3562108160","3562108415","FR","FRA","FRANCE" -"3562108416","3562108959","GB","GBR","UNITED KINGDOM" -"3562108960","3562108991","FR","FRA","FRANCE" -"3562108992","3562109119","GB","GBR","UNITED KINGDOM" -"3562109120","3562109183","FR","FRA","FRANCE" -"3562109184","3562109567","GB","GBR","UNITED KINGDOM" -"3562109568","3562109583","FR","FRA","FRANCE" -"3562109584","3562109759","GB","GBR","UNITED KINGDOM" -"3562109760","3562109791","FR","FRA","FRANCE" -"3562109792","3562109823","GB","GBR","UNITED KINGDOM" -"3562109824","3562110207","FR","FRA","FRANCE" -"3562110208","3562110399","GB","GBR","UNITED KINGDOM" -"3562110400","3562110719","FR","FRA","FRANCE" -"3562110720","3562110943","GB","GBR","UNITED KINGDOM" -"3562110944","3562110959","FR","FRA","FRANCE" -"3562110960","3562110967","GB","GBR","UNITED KINGDOM" -"3562110968","3562110975","FR","FRA","FRANCE" -"3562110976","3562143743","ES","ESP","SPAIN" -"3562143744","3562151935","GB","GBR","UNITED KINGDOM" -"3562151936","3562160127","DE","DEU","GERMANY" -"3562160128","3562161151","GB","GBR","UNITED KINGDOM" -"3562161152","3562161183","NL","NLD","NETHERLANDS" -"3562161184","3562169343","GB","GBR","UNITED KINGDOM" -"3562169344","3562170367","CH","CHE","SWITZERLAND" -"3562170368","3562172415","IE","IRL","IRELAND" -"3562172416","3562173951","CH","CHE","SWITZERLAND" -"3562173952","3562174463","GB","GBR","UNITED KINGDOM" -"3562174464","3562176511","CH","CHE","SWITZERLAND" -"3562176512","3562184703","FR","FRA","FRANCE" -"3562184704","3562192895","DE","DEU","GERMANY" -"3562192896","3562201087","UA","UKR","UKRAINE" -"3562201088","3562209279","DE","DEU","GERMANY" -"3562209280","3562217471","RU","RUS","RUSSIAN FEDERATION" -"3562217472","3562220287","DE","DEU","GERMANY" -"3562220288","3562220799","CH","CHE","SWITZERLAND" -"3562220800","3562225663","DE","DEU","GERMANY" -"3562225664","3562233855","NL","NLD","NETHERLANDS" -"3562233856","3562242047","FI","FIN","FINLAND" -"3562242048","3562258431","FR","FRA","FRANCE" -"3562258432","3562263975","NL","NLD","NETHERLANDS" -"3562263976","3562263983","BE","BEL","BELGIUM" -"3562263984","3562283007","NL","NLD","NETHERLANDS" -"3562283008","3562291199","IT","ITA","ITALY" -"3562291200","3562307583","GB","GBR","UNITED KINGDOM" -"3562307584","3562315775","NL","NLD","NETHERLANDS" -"3562315776","3562323967","GB","GBR","UNITED KINGDOM" -"3562323968","3562340351","DE","DEU","GERMANY" -"3562340352","3562348543","GB","GBR","UNITED KINGDOM" -"3562348544","3562356735","ES","ESP","SPAIN" -"3562356736","3562364927","SE","SWE","SWEDEN" -"3562364928","3562373119","PL","POL","POLAND" -"3562373120","3562381311","FR","FRA","FRANCE" -"3562381312","3562389503","IT","ITA","ITALY" -"3562397696","3562405887","GB","GBR","UNITED KINGDOM" -"3562405888","3562414079","FI","FIN","FINLAND" -"3562414080","3562422271","DE","DEU","GERMANY" -"3562430464","3562438655","UA","UKR","UKRAINE" -"3562438656","3562463231","DE","DEU","GERMANY" -"3562463232","3562471423","UA","UKR","UKRAINE" -"3562471424","3562479615","PL","POL","POLAND" -"3562479616","3562487807","DE","DEU","GERMANY" -"3562487808","3562495999","GB","GBR","UNITED KINGDOM" -"3562496000","3562504191","BE","BEL","BELGIUM" -"3562504192","3562512383","DE","DEU","GERMANY" -"3562512384","3562520575","UA","UKR","UKRAINE" -"3562520576","3562528767","ES","ESP","SPAIN" -"3562528768","3562536959","PL","POL","POLAND" -"3562536960","3562545151","AT","AUT","AUSTRIA" -"3562545152","3562553343","GB","GBR","UNITED KINGDOM" -"3562553344","3562561535","DK","DNK","DENMARK" -"3562569728","3562572143","DE","DEU","GERMANY" -"3562572144","3562572159","LU","LUX","LUXEMBOURG" -"3562572160","3562572223","DE","DEU","GERMANY" -"3562572224","3562572239","US","USA","UNITED STATES" -"3562572240","3562572543","DE","DEU","GERMANY" -"3562572544","3562572799","LU","LUX","LUXEMBOURG" -"3562572800","3562577919","DE","DEU","GERMANY" -"3562577920","3562586111","AT","AUT","AUSTRIA" -"3562586112","3562594303","DE","DEU","GERMANY" -"3562594304","3562595423","BE","BEL","BELGIUM" -"3562595424","3562595455","LU","LUX","LUXEMBOURG" -"3562595456","3562598207","BE","BEL","BELGIUM" -"3562598208","3562598223","LU","LUX","LUXEMBOURG" -"3562598224","3562602495","BE","BEL","BELGIUM" -"3562602496","3562610687","ES","ESP","SPAIN" -"3562610688","3562618879","NO","NOR","NORWAY" -"3562618880","3562627071","GB","GBR","UNITED KINGDOM" -"3562627072","3562643455","DE","DEU","GERMANY" -"3562643456","3562651647","AT","AUT","AUSTRIA" -"3562651648","3562659839","DE","DEU","GERMANY" -"3562659840","3562668031","SK","SVK","SLOVAKIA" -"3562668032","3562676223","IT","ITA","ITALY" -"3562676224","3562684415","GB","GBR","UNITED KINGDOM" -"3562684416","3562692607","FI","FIN","FINLAND" -"3562692608","3562695375","UA","UKR","UKRAINE" -"3562695376","3562695379","CZ","CZE","CZECH REPUBLIC" -"3562695380","3562700799","UA","UKR","UKRAINE" -"3562700800","3562708991","DE","DEU","GERMANY" -"3562708992","3562717183","UA","UKR","UKRAINE" -"3562717184","3562725375","CH","CHE","SWITZERLAND" -"3562725376","3562733567","CZ","CZE","CZECH REPUBLIC" -"3562733568","3562741759","PL","POL","POLAND" -"3562741760","3562758143","IT","ITA","ITALY" -"3562758144","3562766335","HR","HRV","CROATIA" -"3562766336","3562774527","SE","SWE","SWEDEN" -"3562774528","3562782719","BG","BGR","BULGARIA" -"3562782720","3562790911","RU","RUS","RUSSIAN FEDERATION" -"3562790912","3562799103","DE","DEU","GERMANY" -"3562799104","3562803471","HU","HUN","HUNGARY" -"3562803472","3562803479","UA","UKR","UKRAINE" -"3562803480","3562807295","HU","HUN","HUNGARY" -"3562807296","3562815487","ES","ESP","SPAIN" -"3562815488","3562823679","NL","NLD","NETHERLANDS" -"3562823680","3562848255","RU","RUS","RUSSIAN FEDERATION" -"3562848256","3562856447","HR","HRV","CROATIA" -"3562856448","3562864639","UA","UKR","UKRAINE" -"3562864640","3562872831","DE","DEU","GERMANY" -"3562872832","3562881023","DK","DNK","DENMARK" -"3562881024","3562889215","GB","GBR","UNITED KINGDOM" -"3562889216","3562897407","LV","LVA","LATVIA" -"3562897408","3562905599","RO","ROM","ROMANIA" -"3562905600","3562921983","SA","SAU","SAUDI ARABIA" -"3562921984","3562930175","SI","SVN","SLOVENIA" -"3562930176","3562938367","RU","RUS","RUSSIAN FEDERATION" -"3562938368","3562946559","CH","CHE","SWITZERLAND" -"3562946560","3562954751","FI","FIN","FINLAND" -"3562954752","3562962943","RU","RUS","RUSSIAN FEDERATION" -"3562962944","3562971135","IT","ITA","ITALY" -"3562971136","3562987519","FR","FRA","FRANCE" -"3562987520","3562995711","DE","DEU","GERMANY" -"3562995712","3563003903","AT","AUT","AUSTRIA" -"3563003904","3563005183","DE","DEU","GERMANY" -"3563005184","3563005311","KZ","KAZ","KAZAKHSTAN" -"3563005312","3563005439","DE","DEU","GERMANY" -"3563005440","3563005695","TR","TUR","TURKEY" -"3563005696","3563005951","DE","DEU","GERMANY" -"3563005952","3563006463","TR","TUR","TURKEY" -"3563006464","3563006591","DE","DEU","GERMANY" -"3563006592","3563006719","CA","CAN","CANADA" -"3563006720","3563006729","DE","DEU","GERMANY" -"3563006730","3563006847","CN","CHN","CHINA" -"3563006848","3563006975","CA","CAN","CANADA" -"3563006976","3563007487","DE","DEU","GERMANY" -"3563007488","3563007999","TR","TUR","TURKEY" -"3563008000","3563008255","DE","DEU","GERMANY" -"3563008256","3563008511","PL","POL","POLAND" -"3563008512","3563009279","DE","DEU","GERMANY" -"3563009280","3563009535","LT","LTU","LITHUANIA" -"3563009536","3563009791","BY","BLR","BELARUS" -"3563009792","3563010047","HK","HKG","HONG KONG" -"3563010048","3563010063","DE","DEU","GERMANY" -"3563010064","3563010079","KZ","KAZ","KAZAKHSTAN" -"3563010080","3563010303","DE","DEU","GERMANY" -"3563010304","3563010559","NL","NLD","NETHERLANDS" -"3563010560","3563010815","BY","BLR","BELARUS" -"3563010816","3563011071","PL","POL","POLAND" -"3563011072","3563011583","DE","DEU","GERMANY" -"3563011584","3563011839","ES","ESP","SPAIN" -"3563011840","3563012095","BY","BLR","BELARUS" -"3563012096","3563020287","FR","FRA","FRANCE" -"3563020288","3563028479","DE","DEU","GERMANY" -"3563028480","3563036671","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3563036672","3563044863","BG","BGR","BULGARIA" -"3563044864","3563053055","ES","ESP","SPAIN" -"3563053056","3563053503","GB","GBR","UNITED KINGDOM" -"3563053504","3563053527","US","USA","UNITED STATES" -"3563053528","3563061247","GB","GBR","UNITED KINGDOM" -"3563069440","3563077631","HU","HUN","HUNGARY" -"3563077632","3563085823","FR","FRA","FRANCE" -"3563085824","3563094015","RU","RUS","RUSSIAN FEDERATION" -"3563094016","3563096255","DE","DEU","GERMANY" -"3563096256","3563096287","GB","GBR","UNITED KINGDOM" -"3563096288","3563097087","DE","DEU","GERMANY" -"3563097088","3563097119","GB","GBR","UNITED KINGDOM" -"3563097120","3563097151","DE","DEU","GERMANY" -"3563097152","3563097183","GB","GBR","UNITED KINGDOM" -"3563097184","3563097215","DE","DEU","GERMANY" -"3563097216","3563097247","GB","GBR","UNITED KINGDOM" -"3563097248","3563097311","DE","DEU","GERMANY" -"3563097312","3563097343","GB","GBR","UNITED KINGDOM" -"3563097344","3563102207","DE","DEU","GERMANY" -"3563102208","3563110399","CZ","CZE","CZECH REPUBLIC" -"3563110400","3563118591","RU","RUS","RUSSIAN FEDERATION" -"3563118592","3563126783","DE","DEU","GERMANY" -"3563126784","3563134975","KG","KGZ","KYRGYZSTAN" -"3563134976","3563143167","IT","ITA","ITALY" -"3563143168","3563151359","GB","GBR","UNITED KINGDOM" -"3563151360","3563159551","DE","DEU","GERMANY" -"3563159552","3563163647","DK","DNK","DENMARK" -"3563163648","3563164159","SE","SWE","SWEDEN" -"3563164160","3563167743","DK","DNK","DENMARK" -"3563167744","3563175935","ES","ESP","SPAIN" -"3563175936","3563192319","DK","DNK","DENMARK" -"3563192320","3563200511","TR","TUR","TURKEY" -"3563200512","3563208703","CH","CHE","SWITZERLAND" -"3563208704","3563225087","DK","DNK","DENMARK" -"3563225088","3563233279","LB","LBN","LEBANON" -"3563233280","3563241471","BY","BLR","BELARUS" -"3563241472","3563257855","TR","TUR","TURKEY" -"3563257856","3563290623","FR","FRA","FRANCE" -"3563290624","3563315199","DE","DEU","GERMANY" -"3563315200","3563323391","DK","DNK","DENMARK" -"3563323392","3563329791","GB","GBR","UNITED KINGDOM" -"3563331584","3563339775","DE","DEU","GERMANY" -"3563347968","3563356159","GB","GBR","UNITED KINGDOM" -"3563356160","3563364351","RU","RUS","RUSSIAN FEDERATION" -"3563364352","3563372543","BE","BEL","BELGIUM" -"3563372544","3563380735","SA","SAU","SAUDI ARABIA" -"3563380736","3563381951","GB","GBR","UNITED KINGDOM" -"3563381952","3563381959","IT","ITA","ITALY" -"3563381960","3563382383","GB","GBR","UNITED KINGDOM" -"3563382384","3563382391","AU","AUS","AUSTRALIA" -"3563382392","3563382495","GB","GBR","UNITED KINGDOM" -"3563382496","3563382503","AT","AUT","AUSTRIA" -"3563382504","3563382583","GB","GBR","UNITED KINGDOM" -"3563382584","3563382587","AT","AUT","AUSTRIA" -"3563382588","3563382589","DE","DEU","GERMANY" -"3563382590","3563382767","GB","GBR","UNITED KINGDOM" -"3563382768","3563382775","IE","IRL","IRELAND" -"3563382776","3563388927","GB","GBR","UNITED KINGDOM" -"3563388928","3563397119","CH","CHE","SWITZERLAND" -"3563405312","3563407871","ES","ESP","SPAIN" -"3563407872","3563407903","US","USA","UNITED STATES" -"3563407904","3563413503","ES","ESP","SPAIN" -"3563413504","3563421695","TR","TUR","TURKEY" -"3563421696","3563438079","SI","SVN","SLOVENIA" -"3563438080","3563446271","DE","DEU","GERMANY" -"3563446272","3563454463","LB","LBN","LEBANON" -"3563454464","3563462655","SA","SAU","SAUDI ARABIA" -"3563462656","3563479039","IT","ITA","ITALY" -"3563479040","3563487231","GB","GBR","UNITED KINGDOM" -"3563487232","3563491327","RS","SRB","SERBIA" -"3563491328","3563491583","CS","SCG","SERBIA AND MONTENEGRO" -"3563491584","3563491835","RS","SRB","SERBIA" -"3563491836","3563492095","CS","SCG","SERBIA AND MONTENEGRO" -"3563492096","3563495423","RS","SRB","SERBIA" -"3563495424","3563503615","DE","DEU","GERMANY" -"3563503616","3563511807","GB","GBR","UNITED KINGDOM" -"3563511808","3563519999","DE","DEU","GERMANY" -"3563520000","3563528191","FR","FRA","FRANCE" -"3563528192","3563536383","DE","DEU","GERMANY" -"3563536384","3563539087","CH","CHE","SWITZERLAND" -"3563539088","3563539095","US","USA","UNITED STATES" -"3563539096","3563539119","CH","CHE","SWITZERLAND" -"3563539120","3563539135","DE","DEU","GERMANY" -"3563539136","3563544575","CH","CHE","SWITZERLAND" -"3563544576","3563552767","RU","RUS","RUSSIAN FEDERATION" -"3563552768","3563560959","SI","SVN","SLOVENIA" -"3563569152","3563577343","IT","ITA","ITALY" -"3563577344","3563585535","GB","GBR","UNITED KINGDOM" -"3563585536","3563601919","IT","ITA","ITALY" -"3563610112","3563618303","BG","BGR","BULGARIA" -"3563618304","3563626495","GB","GBR","UNITED KINGDOM" -"3563626496","3563634687","ES","ESP","SPAIN" -"3563634688","3563651071","NL","NLD","NETHERLANDS" -"3563651072","3563683839","SE","SWE","SWEDEN" -"3563683840","3563692031","BE","BEL","BELGIUM" -"3563700224","3563708415","DE","DEU","GERMANY" -"3563708416","3563716607","HU","HUN","HUNGARY" -"3563716608","3563724799","PL","POL","POLAND" -"3563724800","3563732991","RU","RUS","RUSSIAN FEDERATION" -"3563732992","3563741183","PS","PSE","PALESTINIAN TERRITORY, OCCUPIED" -"3563741184","3563749375","GB","GBR","UNITED KINGDOM" -"3563749376","3563765759","PL","POL","POLAND" -"3563765760","3563782143","ES","ESP","SPAIN" -"3563782144","3563790335","GR","GRC","GREECE" -"3563790336","3563798527","EE","EST","ESTONIA" -"3563798528","3563800447","FR","FRA","FRANCE" -"3563800448","3563800463","GB","GBR","UNITED KINGDOM" -"3563800464","3563800495","FR","FRA","FRANCE" -"3563800496","3563800511","GB","GBR","UNITED KINGDOM" -"3563800512","3563800607","FR","FRA","FRANCE" -"3563800608","3563800623","GB","GBR","UNITED KINGDOM" -"3563800624","3563800767","FR","FRA","FRANCE" -"3563800768","3563800783","GB","GBR","UNITED KINGDOM" -"3563800784","3563800911","FR","FRA","FRANCE" -"3563800912","3563800927","GB","GBR","UNITED KINGDOM" -"3563800928","3563800943","FR","FRA","FRANCE" -"3563800944","3563800991","GB","GBR","UNITED KINGDOM" -"3563800992","3563801135","FR","FRA","FRANCE" -"3563801136","3563801151","DE","DEU","GERMANY" -"3563801152","3563801183","FR","FRA","FRANCE" -"3563801184","3563801199","DE","DEU","GERMANY" -"3563801200","3563801279","FR","FRA","FRANCE" -"3563801280","3563801295","NL","NLD","NETHERLANDS" -"3563801296","3563801375","FR","FRA","FRANCE" -"3563801376","3563801391","GB","GBR","UNITED KINGDOM" -"3563801392","3563801407","IT","ITA","ITALY" -"3563801408","3563801423","DE","DEU","GERMANY" -"3563801424","3563801455","FR","FRA","FRANCE" -"3563801456","3563801519","GB","GBR","UNITED KINGDOM" -"3563801520","3563801551","FR","FRA","FRANCE" -"3563801552","3563801567","GB","GBR","UNITED KINGDOM" -"3563801568","3563801599","FR","FRA","FRANCE" -"3563801600","3563801631","GB","GBR","UNITED KINGDOM" -"3563801632","3563801647","FR","FRA","FRANCE" -"3563801648","3563801743","GB","GBR","UNITED KINGDOM" -"3563801744","3563801775","FR","FRA","FRANCE" -"3563801776","3563801791","BE","BEL","BELGIUM" -"3563801792","3563801839","FR","FRA","FRANCE" -"3563801840","3563801855","GB","GBR","UNITED KINGDOM" -"3563801856","3563801871","FR","FRA","FRANCE" -"3563801872","3563801887","GB","GBR","UNITED KINGDOM" -"3563801888","3563801922","FR","FRA","FRANCE" -"3563801923","3563801935","GB","GBR","UNITED KINGDOM" -"3563801936","3563802015","FR","FRA","FRANCE" -"3563802016","3563802031","BE","BEL","BELGIUM" -"3563802032","3563802047","FR","FRA","FRANCE" -"3563802048","3563802063","IT","ITA","ITALY" -"3563802064","3563802207","FR","FRA","FRANCE" -"3563802208","3563802223","GB","GBR","UNITED KINGDOM" -"3563802224","3563802255","FR","FRA","FRANCE" -"3563802256","3563802271","GB","GBR","UNITED KINGDOM" -"3563802272","3563802303","FR","FRA","FRANCE" -"3563802304","3563802319","IT","ITA","ITALY" -"3563802320","3563802447","FR","FRA","FRANCE" -"3563802448","3563802463","GB","GBR","UNITED KINGDOM" -"3563802464","3563802623","FR","FRA","FRANCE" -"3563802624","3563802655","GB","GBR","UNITED KINGDOM" -"3563802656","3563802735","FR","FRA","FRANCE" -"3563802736","3563802751","US","USA","UNITED STATES" -"3563802752","3563802783","GB","GBR","UNITED KINGDOM" -"3563802784","3563803007","FR","FRA","FRANCE" -"3563803008","3563803023","GB","GBR","UNITED KINGDOM" -"3563803024","3563803039","FR","FRA","FRANCE" -"3563803040","3563803055","GB","GBR","UNITED KINGDOM" -"3563803056","3563803119","FR","FRA","FRANCE" -"3563803120","3563803135","NL","NLD","NETHERLANDS" -"3563803136","3563803151","FR","FRA","FRANCE" -"3563803152","3563803167","GB","GBR","UNITED KINGDOM" -"3563803168","3563803183","FR","FRA","FRANCE" -"3563803184","3563803215","GB","GBR","UNITED KINGDOM" -"3563803216","3563803247","FR","FRA","FRANCE" -"3563803248","3563803263","GB","GBR","UNITED KINGDOM" -"3563803264","3563803279","FR","FRA","FRANCE" -"3563803280","3563803295","GB","GBR","UNITED KINGDOM" -"3563803296","3563803311","FR","FRA","FRANCE" -"3563803312","3563803327","GB","GBR","UNITED KINGDOM" -"3563803328","3563803359","FR","FRA","FRANCE" -"3563803360","3563803423","GB","GBR","UNITED KINGDOM" -"3563803424","3563803439","FR","FRA","FRANCE" -"3563803440","3563803455","DE","DEU","GERMANY" -"3563803456","3563803487","GB","GBR","UNITED KINGDOM" -"3563803488","3563803503","US","USA","UNITED STATES" -"3563803504","3563803519","GB","GBR","UNITED KINGDOM" -"3563803520","3563803631","FR","FRA","FRANCE" -"3563803632","3563803647","GB","GBR","UNITED KINGDOM" -"3563803648","3563803967","FR","FRA","FRANCE" -"3563803968","3563803983","BE","BEL","BELGIUM" -"3563803984","3563804695","FR","FRA","FRANCE" -"3563804696","3563804703","GB","GBR","UNITED KINGDOM" -"3563804704","3563804719","FR","FRA","FRANCE" -"3563804720","3563804727","GB","GBR","UNITED KINGDOM" -"3563804728","3563806543","FR","FRA","FRANCE" -"3563806544","3563806559","DE","DEU","GERMANY" -"3563806560","3563806687","FR","FRA","FRANCE" -"3563806688","3563806703","DE","DEU","GERMANY" -"3563806704","3563806719","FR","FRA","FRANCE" -"3563806720","3563814911","SA","SAU","SAUDI ARABIA" -"3563814912","3563823103","SE","SWE","SWEDEN" -"3563823104","3563831295","DE","DEU","GERMANY" -"3563831296","3563847679","RU","RUS","RUSSIAN FEDERATION" -"3563847680","3563848231","NL","NLD","NETHERLANDS" -"3563848232","3563848239","GB","GBR","UNITED KINGDOM" -"3563848240","3563848319","NL","NLD","NETHERLANDS" -"3563848320","3563848327","ES","ESP","SPAIN" -"3563848328","3563848383","NL","NLD","NETHERLANDS" -"3563848384","3563848447","ES","ESP","SPAIN" -"3563848448","3563848575","NL","NLD","NETHERLANDS" -"3563848576","3563848583","ES","ESP","SPAIN" -"3563848584","3563848639","NL","NLD","NETHERLANDS" -"3563848640","3563848959","ES","ESP","SPAIN" -"3563848960","3563848967","NL","NLD","NETHERLANDS" -"3563848968","3563848975","ES","ESP","SPAIN" -"3563848976","3563848979","NL","NLD","NETHERLANDS" -"3563848980","3563848983","ES","ESP","SPAIN" -"3563848984","3563848991","NL","NLD","NETHERLANDS" -"3563848992","3563848999","ES","ESP","SPAIN" -"3563849000","3563849015","NL","NLD","NETHERLANDS" -"3563849016","3563849023","ES","ESP","SPAIN" -"3563849024","3563849151","NL","NLD","NETHERLANDS" -"3563849152","3563849183","ES","ESP","SPAIN" -"3563849184","3563849197","NL","NLD","NETHERLANDS" -"3563849198","3563849199","ES","ESP","SPAIN" -"3563849200","3563849207","NL","NLD","NETHERLANDS" -"3563849208","3563849215","ES","ESP","SPAIN" -"3563849216","3563849727","GB","GBR","UNITED KINGDOM" -"3563849728","3563849991","NL","NLD","NETHERLANDS" -"3563849992","3563849999","SA","SAU","SAUDI ARABIA" -"3563850000","3563850007","FI","FIN","FINLAND" -"3563850008","3563850239","NL","NLD","NETHERLANDS" -"3563850240","3563850751","GB","GBR","UNITED KINGDOM" -"3563850752","3563850767","NL","NLD","NETHERLANDS" -"3563850768","3563850783","ES","ESP","SPAIN" -"3563850784","3563850815","NL","NLD","NETHERLANDS" -"3563850816","3563850831","ES","ESP","SPAIN" -"3563850832","3563850847","NL","NLD","NETHERLANDS" -"3563850848","3563850879","ES","ESP","SPAIN" -"3563850880","3563851007","NL","NLD","NETHERLANDS" -"3563851008","3563851199","ES","ESP","SPAIN" -"3563851200","3563851839","NL","NLD","NETHERLANDS" -"3563851840","3563852095","ES","ESP","SPAIN" -"3563852096","3563852191","NL","NLD","NETHERLANDS" -"3563852192","3563852207","GB","GBR","UNITED KINGDOM" -"3563852208","3563852216","NL","NLD","NETHERLANDS" -"3563852217","3563852223","ES","ESP","SPAIN" -"3563852224","3563852543","NL","NLD","NETHERLANDS" -"3563852544","3563852799","ES","ESP","SPAIN" -"3563852800","3563853319","NL","NLD","NETHERLANDS" -"3563853320","3563853327","ES","ESP","SPAIN" -"3563853328","3563853375","NL","NLD","NETHERLANDS" -"3563853376","3563853439","ES","ESP","SPAIN" -"3563853440","3563853567","NL","NLD","NETHERLANDS" -"3563853568","3563854079","ES","ESP","SPAIN" -"3563854080","3563854095","NL","NLD","NETHERLANDS" -"3563854096","3563854103","ES","ESP","SPAIN" -"3563854104","3563854175","NL","NLD","NETHERLANDS" -"3563854176","3563854239","ES","ESP","SPAIN" -"3563854240","3563854259","NL","NLD","NETHERLANDS" -"3563854260","3563854591","ES","ESP","SPAIN" -"3563854592","3563854847","NL","NLD","NETHERLANDS" -"3563854848","3563855359","ES","ESP","SPAIN" -"3563855360","3563855487","NL","NLD","NETHERLANDS" -"3563855488","3563855551","ES","ESP","SPAIN" -"3563855552","3563855583","NL","NLD","NETHERLANDS" -"3563855584","3563855615","ES","ESP","SPAIN" -"3563855616","3563855871","US","USA","UNITED STATES" -"3563855872","3563864063","AT","AUT","AUSTRIA" -"3563864064","3563872255","GB","GBR","UNITED KINGDOM" -"3563872256","3563880447","RU","RUS","RUSSIAN FEDERATION" -"3563880448","3563888639","TR","TUR","TURKEY" -"3563888640","3563896831","DE","DEU","GERMANY" -"3563896832","3563899391","HU","HUN","HUNGARY" -"3563899392","3563899647","SK","SVK","SLOVAKIA" -"3563899648","3563899903","HU","HUN","HUNGARY" -"3563899904","3563900159","SK","SVK","SLOVAKIA" -"3563900160","3563900415","HU","HUN","HUNGARY" -"3563900416","3563900671","SK","SVK","SLOVAKIA" -"3563900672","3563902975","HU","HUN","HUNGARY" -"3563902976","3563903231","SK","SVK","SLOVAKIA" -"3563903232","3563913215","HU","HUN","HUNGARY" -"3563921408","3563929599","UA","UKR","UKRAINE" -"3563929600","3563937791","CH","CHE","SWITZERLAND" -"3563937792","3563945983","TR","TUR","TURKEY" -"3563945984","3563954175","PL","POL","POLAND" -"3563954176","3563962367","IT","ITA","ITALY" -"3563962368","3563970559","RU","RUS","RUSSIAN FEDERATION" -"3563970560","3563978751","TR","TUR","TURKEY" -"3563978752","3563995135","IT","ITA","ITALY" -"3563995136","3564003327","MK","MKD","THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA" -"3564003328","3564008191","DE","DEU","GERMANY" -"3564008192","3564008223","CH","CHE","SWITZERLAND" -"3564008224","3564011519","DE","DEU","GERMANY" -"3564011520","3564019711","UA","UKR","UKRAINE" -"3564019712","3564027903","GB","GBR","UNITED KINGDOM" -"3564027904","3564041215","DE","DEU","GERMANY" -"3564041216","3564041727","RU","RUS","RUSSIAN FEDERATION" -"3564041728","3564044287","DE","DEU","GERMANY" -"3564044288","3564052479","CZ","CZE","CZECH REPUBLIC" -"3564052480","3564060671","GB","GBR","UNITED KINGDOM" -"3564060672","3564068863","RU","RUS","RUSSIAN FEDERATION" -"3564068864","3564077055","ES","ESP","SPAIN" -"3564077056","3564093439","GB","GBR","UNITED KINGDOM" -"3564093440","3564101631","UA","UKR","UKRAINE" -"3564101632","3564109823","DE","DEU","GERMANY" -"3564109824","3564126207","SE","SWE","SWEDEN" -"3564126208","3564134399","IT","ITA","ITALY" -"3564134400","3564142591","KG","KGZ","KYRGYZSTAN" -"3564142592","3564146175","DE","DEU","GERMANY" -"3564146176","3564150783","DK","DNK","DENMARK" -"3564150784","3564152607","SE","SWE","SWEDEN" -"3564152608","3564152639","NO","NOR","NORWAY" -"3564152640","3564153087","SE","SWE","SWEDEN" -"3564153088","3564153151","NO","NOR","NORWAY" -"3564153152","3564157207","SE","SWE","SWEDEN" -"3564157208","3564157215","NO","NOR","NORWAY" -"3564157216","3564158975","SE","SWE","SWEDEN" -"3564158976","3564161855","DE","DEU","GERMANY" -"3564161856","3564161891","NL","NLD","NETHERLANDS" -"3564161892","3564165119","DE","DEU","GERMANY" -"3564165120","3564165439","NL","NLD","NETHERLANDS" -"3564165440","3564175359","DE","DEU","GERMANY" -"3564175360","3564183551","GB","GBR","UNITED KINGDOM" -"3564183552","3564185087","UA","UKR","UKRAINE" -"3564185088","3564185343","DE","DEU","GERMANY" -"3564185344","3564191743","UA","UKR","UKRAINE" -"3564191744","3564199935","BE","BEL","BELGIUM" -"3564199936","3564208127","RU","RUS","RUSSIAN FEDERATION" -"3564208128","3564216319","GB","GBR","UNITED KINGDOM" -"3564216320","3564224511","PT","PRT","PORTUGAL" -"3564224512","3564232703","GB","GBR","UNITED KINGDOM" -"3564232704","3564240895","RU","RUS","RUSSIAN FEDERATION" -"3564240896","3564241407","TJ","TJK","TAJIKISTAN" -"3564241408","3564249087","RU","RUS","RUSSIAN FEDERATION" -"3564249088","3564260735","DE","DEU","GERMANY" -"3564260736","3564260863","NL","NLD","NETHERLANDS" -"3564260864","3564265471","DE","DEU","GERMANY" -"3564273664","3564292151","DE","DEU","GERMANY" -"3564292152","3564292159","AT","AUT","AUSTRIA" -"3564292160","3564302655","DE","DEU","GERMANY" -"3564302656","3564302687","BE","BEL","BELGIUM" -"3564302688","3564306431","DE","DEU","GERMANY" -"3564306432","3564314623","TR","TUR","TURKEY" -"3564314624","3564322815","GB","GBR","UNITED KINGDOM" -"3564322816","3564331007","IT","ITA","ITALY" -"3564331008","3564339199","ES","ESP","SPAIN" -"3564339200","3564339967","GB","GBR","UNITED KINGDOM" -"3564339968","3564339999","NL","NLD","NETHERLANDS" -"3564340000","3564340351","GB","GBR","UNITED KINGDOM" -"3564340352","3564340415","NL","NLD","NETHERLANDS" -"3564340416","3564340479","GB","GBR","UNITED KINGDOM" -"3564340480","3564340735","NL","NLD","NETHERLANDS" -"3564340736","3564340991","GB","GBR","UNITED KINGDOM" -"3564340992","3564341119","NL","NLD","NETHERLANDS" -"3564341120","3564341183","GB","GBR","UNITED KINGDOM" -"3564341184","3564341247","NL","NLD","NETHERLANDS" -"3564341248","3564341759","GB","GBR","UNITED KINGDOM" -"3564341760","3564342063","NL","NLD","NETHERLANDS" -"3564342064","3564342207","GB","GBR","UNITED KINGDOM" -"3564342208","3564342271","NL","NLD","NETHERLANDS" -"3564342272","3564342335","GB","GBR","UNITED KINGDOM" -"3564342336","3564342431","NL","NLD","NETHERLANDS" -"3564342432","3564342527","GB","GBR","UNITED KINGDOM" -"3564342528","3564342783","NL","NLD","NETHERLANDS" -"3564342784","3564343583","GB","GBR","UNITED KINGDOM" -"3564343584","3564343615","NL","NLD","NETHERLANDS" -"3564343616","3564343679","GB","GBR","UNITED KINGDOM" -"3564343680","3564343743","NL","NLD","NETHERLANDS" -"3564343744","3564343775","GB","GBR","UNITED KINGDOM" -"3564343776","3564343807","NL","NLD","NETHERLANDS" -"3564343808","3564343839","GB","GBR","UNITED KINGDOM" -"3564343840","3564343871","NL","NLD","NETHERLANDS" -"3564343872","3564343967","GB","GBR","UNITED KINGDOM" -"3564343968","3564343999","NL","NLD","NETHERLANDS" -"3564344000","3564344031","GB","GBR","UNITED KINGDOM" -"3564344032","3564344231","NL","NLD","NETHERLANDS" -"3564344232","3564344239","GB","GBR","UNITED KINGDOM" -"3564344240","3564344247","NL","NLD","NETHERLANDS" -"3564344248","3564344575","GB","GBR","UNITED KINGDOM" -"3564344576","3564344831","NL","NLD","NETHERLANDS" -"3564344832","3564344895","GB","GBR","UNITED KINGDOM" -"3564344896","3564344959","NL","NLD","NETHERLANDS" -"3564344960","3564345023","GB","GBR","UNITED KINGDOM" -"3564345024","3564345087","NL","NLD","NETHERLANDS" -"3564345088","3564345127","GB","GBR","UNITED KINGDOM" -"3564345128","3564345151","NL","NLD","NETHERLANDS" -"3564345152","3564345215","GB","GBR","UNITED KINGDOM" -"3564345216","3564345343","NL","NLD","NETHERLANDS" -"3564345344","3564346143","GB","GBR","UNITED KINGDOM" -"3564346144","3564346175","NL","NLD","NETHERLANDS" -"3564346176","3564346207","GB","GBR","UNITED KINGDOM" -"3564346208","3564346239","NL","NLD","NETHERLANDS" -"3564346240","3564346271","GB","GBR","UNITED KINGDOM" -"3564346272","3564346303","NL","NLD","NETHERLANDS" -"3564346304","3564347391","GB","GBR","UNITED KINGDOM" -"3564347392","3564347583","NL","NLD","NETHERLANDS" -"3564347584","3564347647","GB","GBR","UNITED KINGDOM" -"3564347648","3564348159","NL","NLD","NETHERLANDS" -"3564348160","3564348191","GB","GBR","UNITED KINGDOM" -"3564348192","3564348239","NL","NLD","NETHERLANDS" -"3564348240","3564348255","GB","GBR","UNITED KINGDOM" -"3564348256","3564348287","NL","NLD","NETHERLANDS" -"3564348288","3564348399","GB","GBR","UNITED KINGDOM" -"3564348400","3564348415","NL","NLD","NETHERLANDS" -"3564348416","3564348479","GB","GBR","UNITED KINGDOM" -"3564348480","3564348495","NL","NLD","NETHERLANDS" -"3564348496","3564348527","GB","GBR","UNITED KINGDOM" -"3564348528","3564348543","NL","NLD","NETHERLANDS" -"3564348544","3564348559","GB","GBR","UNITED KINGDOM" -"3564348560","3564348639","NL","NLD","NETHERLANDS" -"3564348640","3564348671","GB","GBR","UNITED KINGDOM" -"3564348672","3564348991","NL","NLD","NETHERLANDS" -"3564348992","3564349183","GB","GBR","UNITED KINGDOM" -"3564349184","3564349311","NL","NLD","NETHERLANDS" -"3564349312","3564349375","GB","GBR","UNITED KINGDOM" -"3564349376","3564349407","NL","NLD","NETHERLANDS" -"3564349408","3564349503","GB","GBR","UNITED KINGDOM" -"3564349504","3564349583","NL","NLD","NETHERLANDS" -"3564349584","3564349615","GB","GBR","UNITED KINGDOM" -"3564349616","3564349695","NL","NLD","NETHERLANDS" -"3564349696","3564350335","GB","GBR","UNITED KINGDOM" -"3564350336","3564350351","NL","NLD","NETHERLANDS" -"3564350352","3564350367","GB","GBR","UNITED KINGDOM" -"3564350368","3564350719","NL","NLD","NETHERLANDS" -"3564350720","3564351231","GB","GBR","UNITED KINGDOM" -"3564351232","3564351295","NL","NLD","NETHERLANDS" -"3564351296","3564351375","GB","GBR","UNITED KINGDOM" -"3564351376","3564351391","NL","NLD","NETHERLANDS" -"3564351392","3564351439","GB","GBR","UNITED KINGDOM" -"3564351440","3564351455","NL","NLD","NETHERLANDS" -"3564351456","3564351471","GB","GBR","UNITED KINGDOM" -"3564351472","3564351487","NL","NLD","NETHERLANDS" -"3564351488","3564351503","GB","GBR","UNITED KINGDOM" -"3564351504","3564351679","NL","NLD","NETHERLANDS" -"3564351680","3564351999","GB","GBR","UNITED KINGDOM" -"3564352000","3564352063","NL","NLD","NETHERLANDS" -"3564352064","3564352095","GB","GBR","UNITED KINGDOM" -"3564352096","3564352127","NL","NLD","NETHERLANDS" -"3564352128","3564352191","GB","GBR","UNITED KINGDOM" -"3564352192","3564352511","NL","NLD","NETHERLANDS" -"3564352512","3564352543","GB","GBR","UNITED KINGDOM" -"3564352544","3564352575","NL","NLD","NETHERLANDS" -"3564352576","3564352735","GB","GBR","UNITED KINGDOM" -"3564352736","3564352767","NL","NLD","NETHERLANDS" -"3564352768","3564353023","GB","GBR","UNITED KINGDOM" -"3564353024","3564353087","NL","NLD","NETHERLANDS" -"3564353088","3564353111","GB","GBR","UNITED KINGDOM" -"3564353112","3564353151","NL","NLD","NETHERLANDS" -"3564353152","3564353199","GB","GBR","UNITED KINGDOM" -"3564353200","3564353215","NL","NLD","NETHERLANDS" -"3564353216","3564353223","GB","GBR","UNITED KINGDOM" -"3564353224","3564353263","NL","NLD","NETHERLANDS" -"3564353264","3564353295","GB","GBR","UNITED KINGDOM" -"3564353296","3564353311","NL","NLD","NETHERLANDS" -"3564353312","3564353343","GB","GBR","UNITED KINGDOM" -"3564353344","3564353359","NL","NLD","NETHERLANDS" -"3564353360","3564353407","GB","GBR","UNITED KINGDOM" -"3564353408","3564353487","NL","NLD","NETHERLANDS" -"3564353488","3564353503","GB","GBR","UNITED KINGDOM" -"3564353504","3564353535","NL","NLD","NETHERLANDS" -"3564353536","3564353791","GB","GBR","UNITED KINGDOM" -"3564353792","3564353919","NL","NLD","NETHERLANDS" -"3564353920","3564354063","GB","GBR","UNITED KINGDOM" -"3564354064","3564354079","NL","NLD","NETHERLANDS" -"3564354080","3564354303","GB","GBR","UNITED KINGDOM" -"3564354304","3564354335","NL","NLD","NETHERLANDS" -"3564354336","3564354367","GB","GBR","UNITED KINGDOM" -"3564354368","3564354559","NL","NLD","NETHERLANDS" -"3564354560","3564354943","GB","GBR","UNITED KINGDOM" -"3564354944","3564355039","NL","NLD","NETHERLANDS" -"3564355040","3564355135","GB","GBR","UNITED KINGDOM" -"3564355136","3564355199","NL","NLD","NETHERLANDS" -"3564355200","3564355295","GB","GBR","UNITED KINGDOM" -"3564355296","3564355311","NL","NLD","NETHERLANDS" -"3564355312","3564355583","GB","GBR","UNITED KINGDOM" -"3564355584","3564363775","NL","NLD","NETHERLANDS" -"3564363776","3564371967","UA","UKR","UKRAINE" -"3564371968","3564380159","DE","DEU","GERMANY" -"3564380160","3564388351","FI","FIN","FINLAND" -"3564388352","3564392959","SE","SWE","SWEDEN" -"3564392960","3564393087","NO","NOR","NORWAY" -"3564393088","3564396543","SE","SWE","SWEDEN" -"3564396544","3564404735","RU","RUS","RUSSIAN FEDERATION" -"3564404736","3564412927","BG","BGR","BULGARIA" -"3564412928","3564421119","IL","ISR","ISRAEL" -"3564421120","3564429311","SA","SAU","SAUDI ARABIA" -"3564429312","3564431567","KZ","KAZ","KAZAKHSTAN" -"3564431568","3564431583","AF","AFG","AFGHANISTAN" -"3564431584","3564437503","KZ","KAZ","KAZAKHSTAN" -"3564437504","3564445695","LT","LTU","LITHUANIA" -"3564445696","3564453887","BG","BGR","BULGARIA" -"3564453888","3564462079","DE","DEU","GERMANY" -"3564462080","3564470271","CH","CHE","SWITZERLAND" -"3564470272","3564478463","IL","ISR","ISRAEL" -"3564478464","3564486655","LU","LUX","LUXEMBOURG" -"3564486656","3564494847","CH","CHE","SWITZERLAND" -"3564494848","3564494907","GB","GBR","UNITED KINGDOM" -"3564494908","3564494911","FR","FRA","FRANCE" -"3564494912","3564494975","GB","GBR","UNITED KINGDOM" -"3564494976","3564494983","CH","CHE","SWITZERLAND" -"3564494984","3564495103","GB","GBR","UNITED KINGDOM" -"3564495104","3564495167","DE","DEU","GERMANY" -"3564495168","3564495203","GB","GBR","UNITED KINGDOM" -"3564495616","3564495743","GB","GBR","UNITED KINGDOM" -"3564495872","3564495927","GB","GBR","UNITED KINGDOM" -"3564495936","3564496111","GB","GBR","UNITED KINGDOM" -"3564496128","3564496175","GB","GBR","UNITED KINGDOM" -"3564496184","3564496199","GB","GBR","UNITED KINGDOM" -"3564496208","3564496215","GB","GBR","UNITED KINGDOM" -"3564496224","3564496263","GB","GBR","UNITED KINGDOM" -"3564496272","3564496319","GB","GBR","UNITED KINGDOM" -"3564496320","3564496327","FR","FRA","FRANCE" -"3564496336","3564496607","GB","GBR","UNITED KINGDOM" -"3564496640","3564496655","GB","GBR","UNITED KINGDOM" -"3564496672","3564496847","GB","GBR","UNITED KINGDOM" -"3564496848","3564496863","FR","FRA","FRANCE" -"3564496864","3564496895","GB","GBR","UNITED KINGDOM" -"3564498944","3564499007","NL","NLD","NETHERLANDS" -"3564499008","3564499055","GB","GBR","UNITED KINGDOM" -"3564499200","3564499215","NL","NLD","NETHERLANDS" -"3564499216","3564499231","DK","DNK","DENMARK" -"3564499232","3564499239","NL","NLD","NETHERLANDS" -"3564499248","3564499335","GB","GBR","UNITED KINGDOM" -"3564499456","3564499551","NL","NLD","NETHERLANDS" -"3564499552","3564499711","GB","GBR","UNITED KINGDOM" -"3564500992","3564500999","SE","SWE","SWEDEN" -"3564501248","3564501263","DE","DEU","GERMANY" -"3564501264","3564501279","SE","SWE","SWEDEN" -"3564501280","3564501311","GB","GBR","UNITED KINGDOM" -"3564501504","3564501507","SE","SWE","SWEDEN" -"3564501508","3564501511","DE","DEU","GERMANY" -"3564501760","3564501887","DE","DEU","GERMANY" -"3564502528","3564502559","DE","DEU","GERMANY" -"3564502560","3564502591","GB","GBR","UNITED KINGDOM" -"3564503040","3564511231","JO","JOR","JORDAN" -"3564511232","3564519423","RU","RUS","RUSSIAN FEDERATION" -"3564519424","3564527615","SI","SVN","SLOVENIA" -"3564527616","3564543999","SA","SAU","SAUDI ARABIA" -"3564544000","3564560383","DE","DEU","GERMANY" -"3564560384","3564560391","US","USA","UNITED STATES" -"3564560392","3564560399","CA","CAN","CANADA" -"3564560400","3564560415","US","USA","UNITED STATES" -"3564560416","3564560543","GB","GBR","UNITED KINGDOM" -"3564560544","3564560575","US","USA","UNITED STATES" -"3564560576","3564560927","GB","GBR","UNITED KINGDOM" -"3564560928","3564560959","US","USA","UNITED STATES" -"3564560960","3564561039","GB","GBR","UNITED KINGDOM" -"3564561040","3564561055","US","USA","UNITED STATES" -"3564561056","3564561071","GB","GBR","UNITED KINGDOM" -"3564561072","3564561087","US","USA","UNITED STATES" -"3564561088","3564561151","GB","GBR","UNITED KINGDOM" -"3564561152","3564561407","US","USA","UNITED STATES" -"3564561408","3564561663","GB","GBR","UNITED KINGDOM" -"3564561664","3564561791","US","USA","UNITED STATES" -"3564561792","3564561919","GB","GBR","UNITED KINGDOM" -"3564561920","3564562431","CH","CHE","SWITZERLAND" -"3564562432","3564562687","GB","GBR","UNITED KINGDOM" -"3564562688","3564562815","US","USA","UNITED STATES" -"3564562816","3564562879","GB","GBR","UNITED KINGDOM" -"3564562880","3564562943","US","USA","UNITED STATES" -"3564562944","3564563711","GB","GBR","UNITED KINGDOM" -"3564563712","3564563967","US","USA","UNITED STATES" -"3564563968","3564564223","GB","GBR","UNITED KINGDOM" -"3564564224","3564564239","US","USA","UNITED STATES" -"3564564240","3564565231","GB","GBR","UNITED KINGDOM" -"3564565232","3564565239","US","USA","UNITED STATES" -"3564565240","3564565247","GB","GBR","UNITED KINGDOM" -"3564565248","3564565279","US","USA","UNITED STATES" -"3564565280","3564565327","GB","GBR","UNITED KINGDOM" -"3564565328","3564565407","US","USA","UNITED STATES" -"3564565408","3564566143","GB","GBR","UNITED KINGDOM" -"3564566144","3564566175","US","USA","UNITED STATES" -"3564566176","3564566271","GB","GBR","UNITED KINGDOM" -"3564566272","3564566527","US","USA","UNITED STATES" -"3564566528","3564567143","GB","GBR","UNITED KINGDOM" -"3564567144","3564567151","US","USA","UNITED STATES" -"3564567152","3564567247","GB","GBR","UNITED KINGDOM" -"3564567248","3564567255","US","USA","UNITED STATES" -"3564567256","3564567295","GB","GBR","UNITED KINGDOM" -"3564567296","3564567423","US","USA","UNITED STATES" -"3564567424","3564567807","GB","GBR","UNITED KINGDOM" -"3564567808","3564567935","US","USA","UNITED STATES" -"3564567936","3564568039","GB","GBR","UNITED KINGDOM" -"3564568040","3564568183","US","USA","UNITED STATES" -"3564568184","3564568223","GB","GBR","UNITED KINGDOM" -"3564568224","3564568231","US","USA","UNITED STATES" -"3564568232","3564568255","GB","GBR","UNITED KINGDOM" -"3564568256","3564568319","US","USA","UNITED STATES" -"3564568320","3564571055","GB","GBR","UNITED KINGDOM" -"3564571056","3564571071","DE","DEU","GERMANY" -"3564571072","3564571135","GB","GBR","UNITED KINGDOM" -"3564571136","3564571455","FR","FRA","FRANCE" -"3564571456","3564571479","GB","GBR","UNITED KINGDOM" -"3564571480","3564571487","FR","FRA","FRANCE" -"3564571488","3564571511","GB","GBR","UNITED KINGDOM" -"3564571512","3564571519","FR","FRA","FRANCE" -"3564571520","3564571567","GB","GBR","UNITED KINGDOM" -"3564571568","3564571583","FR","FRA","FRANCE" -"3564571584","3564571591","GB","GBR","UNITED KINGDOM" -"3564571592","3564571599","FR","FRA","FRANCE" -"3564571600","3564572271","GB","GBR","UNITED KINGDOM" -"3564572272","3564572287","DE","DEU","GERMANY" -"3564572288","3564576767","GB","GBR","UNITED KINGDOM" -"3564576768","3564584959","RU","RUS","RUSSIAN FEDERATION" -"3564584960","3564593151","SA","SAU","SAUDI ARABIA" -"3564593152","3564601343","RU","RUS","RUSSIAN FEDERATION" -"3564601344","3564609535","AT","AUT","AUSTRIA" -"3564609536","3564634111","RU","RUS","RUSSIAN FEDERATION" -"3564634112","3564642303","MK","MKD","THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA" -"3564642304","3564650495","CH","CHE","SWITZERLAND" -"3564650496","3564666879","NL","NLD","NETHERLANDS" -"3564666880","3564668943","IE","IRL","IRELAND" -"3564668944","3564668991","GB","GBR","UNITED KINGDOM" -"3564668992","3564669103","IE","IRL","IRELAND" -"3564669104","3564669119","GB","GBR","UNITED KINGDOM" -"3564669120","3564669407","IE","IRL","IRELAND" -"3564669408","3564669439","GB","GBR","UNITED KINGDOM" -"3564669440","3564670207","IE","IRL","IRELAND" -"3564670208","3564670239","GB","GBR","UNITED KINGDOM" -"3564670240","3564673023","IE","IRL","IRELAND" -"3564673024","3564673055","GB","GBR","UNITED KINGDOM" -"3564673056","3564673135","IE","IRL","IRELAND" -"3564673136","3564673215","GB","GBR","UNITED KINGDOM" -"3564673216","3564673407","IE","IRL","IRELAND" -"3564673408","3564673663","GB","GBR","UNITED KINGDOM" -"3564673664","3564673791","IE","IRL","IRELAND" -"3564673792","3564673807","GB","GBR","UNITED KINGDOM" -"3564673808","3564673823","IE","IRL","IRELAND" -"3564673824","3564673839","GB","GBR","UNITED KINGDOM" -"3564673840","3564674047","IE","IRL","IRELAND" -"3564674048","3564674431","GB","GBR","UNITED KINGDOM" -"3564674432","3564675071","IE","IRL","IRELAND" -"3564675072","3564683263","RU","RUS","RUSSIAN FEDERATION" -"3564683264","3564691455","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3564691456","3564699647","GI","GIB","GIBRALTAR" -"3564699648","3564716031","GB","GBR","UNITED KINGDOM" -"3564716032","3564724223","IT","ITA","ITALY" -"3564724224","3564732415","NL","NLD","NETHERLANDS" -"3564732416","3564734239","DE","DEU","GERMANY" -"3564734240","3564734271","GB","GBR","UNITED KINGDOM" -"3564734272","3564734287","DE","DEU","GERMANY" -"3564734288","3564734303","GB","GBR","UNITED KINGDOM" -"3564734304","3564734335","DE","DEU","GERMANY" -"3564734336","3564734431","GB","GBR","UNITED KINGDOM" -"3564734432","3564734719","DE","DEU","GERMANY" -"3564734720","3564734807","GB","GBR","UNITED KINGDOM" -"3564734808","3564734815","DE","DEU","GERMANY" -"3564734816","3564734819","GB","GBR","UNITED KINGDOM" -"3564734820","3564735231","DE","DEU","GERMANY" -"3564735232","3564735487","GB","GBR","UNITED KINGDOM" -"3564735488","3564736511","DE","DEU","GERMANY" -"3564736512","3564736527","GB","GBR","UNITED KINGDOM" -"3564736528","3564736583","DE","DEU","GERMANY" -"3564736584","3564736603","GB","GBR","UNITED KINGDOM" -"3564736604","3564736607","DE","DEU","GERMANY" -"3564736608","3564736611","GB","GBR","UNITED KINGDOM" -"3564736612","3564736767","DE","DEU","GERMANY" -"3564736768","3564736887","GB","GBR","UNITED KINGDOM" -"3564736888","3564736895","DE","DEU","GERMANY" -"3564736896","3564736903","GB","GBR","UNITED KINGDOM" -"3564736904","3564736911","DE","DEU","GERMANY" -"3564736912","3564736959","GB","GBR","UNITED KINGDOM" -"3564736960","3564736967","DE","DEU","GERMANY" -"3564736968","3564736975","GB","GBR","UNITED KINGDOM" -"3564736976","3564736991","DE","DEU","GERMANY" -"3564736992","3564737023","GB","GBR","UNITED KINGDOM" -"3564737024","3564737535","DE","DEU","GERMANY" -"3564737536","3564737791","GB","GBR","UNITED KINGDOM" -"3564737792","3564738047","DE","DEU","GERMANY" -"3564738048","3564738303","GB","GBR","UNITED KINGDOM" -"3564738304","3564739327","DE","DEU","GERMANY" -"3564739328","3564739335","GB","GBR","UNITED KINGDOM" -"3564739336","3564739351","DE","DEU","GERMANY" -"3564739352","3564739391","GB","GBR","UNITED KINGDOM" -"3564739392","3564739455","DE","DEU","GERMANY" -"3564739456","3564739503","GB","GBR","UNITED KINGDOM" -"3564739504","3564739519","DE","DEU","GERMANY" -"3564739520","3564739807","GB","GBR","UNITED KINGDOM" -"3564739808","3564739815","DE","DEU","GERMANY" -"3564739816","3564739823","GB","GBR","UNITED KINGDOM" -"3564739824","3564740351","DE","DEU","GERMANY" -"3564740352","3564740383","GB","GBR","UNITED KINGDOM" -"3564740384","3564740415","DE","DEU","GERMANY" -"3564740416","3564740447","GB","GBR","UNITED KINGDOM" -"3564740448","3564740455","DE","DEU","GERMANY" -"3564740456","3564740459","GB","GBR","UNITED KINGDOM" -"3564740460","3564740463","DE","DEU","GERMANY" -"3564740464","3564740471","GB","GBR","UNITED KINGDOM" -"3564740472","3564740479","DE","DEU","GERMANY" -"3564740480","3564740495","GB","GBR","UNITED KINGDOM" -"3564740496","3564740503","DE","DEU","GERMANY" -"3564740504","3564740527","GB","GBR","UNITED KINGDOM" -"3564740528","3564740543","DE","DEU","GERMANY" -"3564740544","3564740575","GB","GBR","UNITED KINGDOM" -"3564740576","3564740591","DE","DEU","GERMANY" -"3564740592","3564740595","GB","GBR","UNITED KINGDOM" -"3564740596","3564740599","DE","DEU","GERMANY" -"3564740600","3564740603","GB","GBR","UNITED KINGDOM" -"3564740604","3564740607","DE","DEU","GERMANY" -"3564740608","3564748799","FR","FRA","FRANCE" -"3564748800","3564756991","GB","GBR","UNITED KINGDOM" -"3564756992","3564765183","ES","ESP","SPAIN" -"3564765184","3564773375","RU","RUS","RUSSIAN FEDERATION" -"3564773376","3564781567","DE","DEU","GERMANY" -"3564781568","3564789759","LT","LTU","LITHUANIA" -"3564789760","3564797951","ES","ESP","SPAIN" -"3564797952","3564806143","DE","DEU","GERMANY" -"3564806144","3564814335","BG","BGR","BULGARIA" -"3564814336","3564822527","PL","POL","POLAND" -"3564830720","3564838911","BE","BEL","BELGIUM" -"3564838912","3564847103","DE","DEU","GERMANY" -"3564847104","3564855295","IT","ITA","ITALY" -"3564855296","3564862863","DE","DEU","GERMANY" -"3564862864","3564862871","AE","ARE","UNITED ARAB EMIRATES" -"3564862872","3564863487","DE","DEU","GERMANY" -"3564863488","3564880919","NL","NLD","NETHERLANDS" -"3564880920","3564880927","GB","GBR","UNITED KINGDOM" -"3564880928","3564880935","NL","NLD","NETHERLANDS" -"3564880936","3564880943","GB","GBR","UNITED KINGDOM" -"3564880944","3564880951","NL","NLD","NETHERLANDS" -"3564880952","3564880991","GB","GBR","UNITED KINGDOM" -"3564880992","3564881007","NL","NLD","NETHERLANDS" -"3564881008","3564881103","GB","GBR","UNITED KINGDOM" -"3564881104","3564881151","NL","NLD","NETHERLANDS" -"3564881152","3564881183","GB","GBR","UNITED KINGDOM" -"3564881184","3564881199","NL","NLD","NETHERLANDS" -"3564881200","3564881231","GB","GBR","UNITED KINGDOM" -"3564881232","3564881263","NL","NLD","NETHERLANDS" -"3564881264","3564881343","GB","GBR","UNITED KINGDOM" -"3564881344","3564881359","NL","NLD","NETHERLANDS" -"3564881360","3564881375","GB","GBR","UNITED KINGDOM" -"3564881376","3564881407","NL","NLD","NETHERLANDS" -"3564881408","3564881455","GB","GBR","UNITED KINGDOM" -"3564881456","3564881471","NL","NLD","NETHERLANDS" -"3564881472","3564881519","GB","GBR","UNITED KINGDOM" -"3564881520","3564881551","NL","NLD","NETHERLANDS" -"3564881552","3564881599","GB","GBR","UNITED KINGDOM" -"3564881600","3564881631","NL","NLD","NETHERLANDS" -"3564881632","3564881663","GB","GBR","UNITED KINGDOM" -"3564881664","3564881727","NL","NLD","NETHERLANDS" -"3564881728","3564881935","GB","GBR","UNITED KINGDOM" -"3564881936","3564881939","NL","NLD","NETHERLANDS" -"3564881940","3564881983","GB","GBR","UNITED KINGDOM" -"3564881984","3564881991","NL","NLD","NETHERLANDS" -"3564881992","3564881999","GB","GBR","UNITED KINGDOM" -"3564882000","3564882079","NL","NLD","NETHERLANDS" -"3564882080","3564882095","GB","GBR","UNITED KINGDOM" -"3564882096","3564882119","NL","NLD","NETHERLANDS" -"3564882120","3564882127","GB","GBR","UNITED KINGDOM" -"3564882128","3564882135","NL","NLD","NETHERLANDS" -"3564882136","3564882143","GB","GBR","UNITED KINGDOM" -"3564882144","3564882239","NL","NLD","NETHERLANDS" -"3564882240","3564882255","GB","GBR","UNITED KINGDOM" -"3564882256","3564882271","NL","NLD","NETHERLANDS" -"3564882272","3564882335","GB","GBR","UNITED KINGDOM" -"3564882336","3564882367","NL","NLD","NETHERLANDS" -"3564882368","3564882399","GB","GBR","UNITED KINGDOM" -"3564882400","3564882943","NL","NLD","NETHERLANDS" -"3564882944","3564883007","GB","GBR","UNITED KINGDOM" -"3564883008","3564883039","NL","NLD","NETHERLANDS" -"3564883040","3564883071","GB","GBR","UNITED KINGDOM" -"3564883072","3564883095","NL","NLD","NETHERLANDS" -"3564883096","3564883199","GB","GBR","UNITED KINGDOM" -"3564883200","3564883967","NL","NLD","NETHERLANDS" -"3564883968","3564884223","GB","GBR","UNITED KINGDOM" -"3564884224","3564884235","NL","NLD","NETHERLANDS" -"3564884236","3564884239","GB","GBR","UNITED KINGDOM" -"3564884240","3564884255","NL","NLD","NETHERLANDS" -"3564884256","3564884303","GB","GBR","UNITED KINGDOM" -"3564884304","3564884319","NL","NLD","NETHERLANDS" -"3564884320","3564884335","GB","GBR","UNITED KINGDOM" -"3564884336","3564884343","NL","NLD","NETHERLANDS" -"3564884344","3564884359","GB","GBR","UNITED KINGDOM" -"3564884360","3564884367","NL","NLD","NETHERLANDS" -"3564884368","3564884375","GB","GBR","UNITED KINGDOM" -"3564884376","3564884399","NL","NLD","NETHERLANDS" -"3564884400","3564884407","GB","GBR","UNITED KINGDOM" -"3564884408","3564884415","NL","NLD","NETHERLANDS" -"3564884416","3564884431","GB","GBR","UNITED KINGDOM" -"3564884432","3564884439","NL","NLD","NETHERLANDS" -"3564884440","3564884455","GB","GBR","UNITED KINGDOM" -"3564884456","3564884463","NL","NLD","NETHERLANDS" -"3564884464","3564885007","GB","GBR","UNITED KINGDOM" -"3564885008","3564885031","NL","NLD","NETHERLANDS" -"3564885032","3564885087","GB","GBR","UNITED KINGDOM" -"3564885088","3564885119","NL","NLD","NETHERLANDS" -"3564885120","3564885215","GB","GBR","UNITED KINGDOM" -"3564885216","3564885311","NL","NLD","NETHERLANDS" -"3564885312","3564885487","GB","GBR","UNITED KINGDOM" -"3564885488","3564885495","NL","NLD","NETHERLANDS" -"3564885496","3564885519","GB","GBR","UNITED KINGDOM" -"3564885520","3564885535","NL","NLD","NETHERLANDS" -"3564885536","3564885567","GB","GBR","UNITED KINGDOM" -"3564885568","3564885599","NL","NLD","NETHERLANDS" -"3564885600","3564885615","GB","GBR","UNITED KINGDOM" -"3564885616","3564885631","NL","NLD","NETHERLANDS" -"3564885632","3564885647","GB","GBR","UNITED KINGDOM" -"3564885648","3564885695","NL","NLD","NETHERLANDS" -"3564885696","3564885711","GB","GBR","UNITED KINGDOM" -"3564885712","3564885743","NL","NLD","NETHERLANDS" -"3564885744","3564885759","GB","GBR","UNITED KINGDOM" -"3564885760","3564885775","NL","NLD","NETHERLANDS" -"3564885776","3564885791","GB","GBR","UNITED KINGDOM" -"3564885792","3564885799","NL","NLD","NETHERLANDS" -"3564885800","3564885839","GB","GBR","UNITED KINGDOM" -"3564885840","3564885887","NL","NLD","NETHERLANDS" -"3564885888","3564885919","GB","GBR","UNITED KINGDOM" -"3564885920","3564885935","NL","NLD","NETHERLANDS" -"3564885936","3564885951","GB","GBR","UNITED KINGDOM" -"3564885952","3564885967","NL","NLD","NETHERLANDS" -"3564885968","3564885999","GB","GBR","UNITED KINGDOM" -"3564886000","3564886031","NL","NLD","NETHERLANDS" -"3564886032","3564886063","GB","GBR","UNITED KINGDOM" -"3564886064","3564886079","NL","NLD","NETHERLANDS" -"3564886080","3564886127","GB","GBR","UNITED KINGDOM" -"3564886128","3564886143","NL","NLD","NETHERLANDS" -"3564886144","3564886159","GB","GBR","UNITED KINGDOM" -"3564886160","3564886207","NL","NLD","NETHERLANDS" -"3564886208","3564886271","GB","GBR","UNITED KINGDOM" -"3564886272","3564886279","NL","NLD","NETHERLANDS" -"3564886280","3564886287","GB","GBR","UNITED KINGDOM" -"3564886288","3564886295","NL","NLD","NETHERLANDS" -"3564886296","3564886303","GB","GBR","UNITED KINGDOM" -"3564886304","3564886367","NL","NLD","NETHERLANDS" -"3564886368","3564886383","GB","GBR","UNITED KINGDOM" -"3564886384","3564886415","NL","NLD","NETHERLANDS" -"3564886416","3564886431","GB","GBR","UNITED KINGDOM" -"3564886432","3564886527","NL","NLD","NETHERLANDS" -"3564886528","3564886655","GB","GBR","UNITED KINGDOM" -"3564886656","3564886751","NL","NLD","NETHERLANDS" -"3564886752","3564886943","GB","GBR","UNITED KINGDOM" -"3564886944","3564886951","NL","NLD","NETHERLANDS" -"3564886952","3564887039","GB","GBR","UNITED KINGDOM" -"3564887040","3564888207","NL","NLD","NETHERLANDS" -"3564888208","3564888223","GB","GBR","UNITED KINGDOM" -"3564888224","3564888327","NL","NLD","NETHERLANDS" -"3564888328","3564888335","GB","GBR","UNITED KINGDOM" -"3564888336","3564888367","NL","NLD","NETHERLANDS" -"3564888368","3564888383","GB","GBR","UNITED KINGDOM" -"3564888384","3564888463","NL","NLD","NETHERLANDS" -"3564888464","3564888479","DE","DEU","GERMANY" -"3564888480","3564888503","NL","NLD","NETHERLANDS" -"3564888504","3564888511","GB","GBR","UNITED KINGDOM" -"3564888512","3564888527","DE","DEU","GERMANY" -"3564888528","3564888591","NL","NLD","NETHERLANDS" -"3564888592","3564888607","GB","GBR","UNITED KINGDOM" -"3564888608","3564888655","NL","NLD","NETHERLANDS" -"3564888656","3564888663","BE","BEL","BELGIUM" -"3564888664","3564888671","NL","NLD","NETHERLANDS" -"3564888672","3564888735","BE","BEL","BELGIUM" -"3564888736","3564888815","NL","NLD","NETHERLANDS" -"3564888816","3564888823","GB","GBR","UNITED KINGDOM" -"3564888824","3564888991","NL","NLD","NETHERLANDS" -"3564888992","3564889023","FR","FRA","FRANCE" -"3564889024","3564889087","NL","NLD","NETHERLANDS" -"3564889088","3564889119","GB","GBR","UNITED KINGDOM" -"3564889120","3564889135","NL","NLD","NETHERLANDS" -"3564889136","3564889151","GB","GBR","UNITED KINGDOM" -"3564889152","3564889167","NL","NLD","NETHERLANDS" -"3564889168","3564889199","GB","GBR","UNITED KINGDOM" -"3564889200","3564889215","NL","NLD","NETHERLANDS" -"3564889216","3564889295","GB","GBR","UNITED KINGDOM" -"3564889296","3564889311","NL","NLD","NETHERLANDS" -"3564889312","3564889327","GB","GBR","UNITED KINGDOM" -"3564889328","3564889343","NL","NLD","NETHERLANDS" -"3564889344","3564889375","GB","GBR","UNITED KINGDOM" -"3564889376","3564889631","NL","NLD","NETHERLANDS" -"3564889632","3564889647","GB","GBR","UNITED KINGDOM" -"3564889648","3564889695","NL","NLD","NETHERLANDS" -"3564889696","3564889727","DE","DEU","GERMANY" -"3564889728","3564889791","NL","NLD","NETHERLANDS" -"3564889792","3564889807","GB","GBR","UNITED KINGDOM" -"3564889808","3564889839","BE","BEL","BELGIUM" -"3564889840","3564889847","NL","NLD","NETHERLANDS" -"3564889848","3564889855","GB","GBR","UNITED KINGDOM" -"3564889856","3564889887","NL","NLD","NETHERLANDS" -"3564889888","3564889983","GB","GBR","UNITED KINGDOM" -"3564889984","3564890111","NL","NLD","NETHERLANDS" -"3564890112","3564890143","GB","GBR","UNITED KINGDOM" -"3564890144","3564890151","NL","NLD","NETHERLANDS" -"3564890152","3564890159","GB","GBR","UNITED KINGDOM" -"3564890160","3564890183","BE","BEL","BELGIUM" -"3564890184","3564890191","GB","GBR","UNITED KINGDOM" -"3564890192","3564890207","NL","NLD","NETHERLANDS" -"3564890208","3564890231","GB","GBR","UNITED KINGDOM" -"3564890232","3564890271","NL","NLD","NETHERLANDS" -"3564890272","3564890303","GB","GBR","UNITED KINGDOM" -"3564890304","3564890367","NL","NLD","NETHERLANDS" -"3564890368","3564890399","FR","FRA","FRANCE" -"3564890400","3564890527","NL","NLD","NETHERLANDS" -"3564890528","3564890535","BE","BEL","BELGIUM" -"3564890536","3564890579","NL","NLD","NETHERLANDS" -"3564890580","3564890591","GB","GBR","UNITED KINGDOM" -"3564890592","3564890623","NL","NLD","NETHERLANDS" -"3564890624","3564890631","GB","GBR","UNITED KINGDOM" -"3564890632","3564890639","BE","BEL","BELGIUM" -"3564890640","3564890655","NL","NLD","NETHERLANDS" -"3564890656","3564890671","GB","GBR","UNITED KINGDOM" -"3564890672","3564890679","NL","NLD","NETHERLANDS" -"3564890680","3564890687","GB","GBR","UNITED KINGDOM" -"3564890688","3564890719","NL","NLD","NETHERLANDS" -"3564890720","3564890751","GB","GBR","UNITED KINGDOM" -"3564890752","3564890783","NL","NLD","NETHERLANDS" -"3564890784","3564890799","GB","GBR","UNITED KINGDOM" -"3564890800","3564890831","NL","NLD","NETHERLANDS" -"3564890832","3564890847","BE","BEL","BELGIUM" -"3564890848","3564890863","GB","GBR","UNITED KINGDOM" -"3564890864","3564890879","BE","BEL","BELGIUM" -"3564890880","3564890943","NL","NLD","NETHERLANDS" -"3564890944","3564890991","BE","BEL","BELGIUM" -"3564890992","3564891023","NL","NLD","NETHERLANDS" -"3564891024","3564892415","GB","GBR","UNITED KINGDOM" -"3564892416","3564892495","NL","NLD","NETHERLANDS" -"3564892496","3564892511","GB","GBR","UNITED KINGDOM" -"3564892512","3564892543","NL","NLD","NETHERLANDS" -"3564892544","3564892575","GB","GBR","UNITED KINGDOM" -"3564892576","3564892687","NL","NLD","NETHERLANDS" -"3564892688","3564892735","GB","GBR","UNITED KINGDOM" -"3564892736","3564892751","NL","NLD","NETHERLANDS" -"3564892752","3564892767","GB","GBR","UNITED KINGDOM" -"3564892768","3564892799","NL","NLD","NETHERLANDS" -"3564892800","3564893039","GB","GBR","UNITED KINGDOM" -"3564893040","3564893055","NL","NLD","NETHERLANDS" -"3564893056","3564893439","GB","GBR","UNITED KINGDOM" -"3564893440","3564893759","NL","NLD","NETHERLANDS" -"3564893760","3564893951","GB","GBR","UNITED KINGDOM" -"3564893952","3564895743","NL","NLD","NETHERLANDS" -"3564895744","3564896255","GB","GBR","UNITED KINGDOM" -"3564896256","3564904447","RU","RUS","RUSSIAN FEDERATION" -"3564904448","3564912639","DE","DEU","GERMANY" -"3564912640","3564920831","BG","BGR","BULGARIA" -"3564920832","3564922879","ES","ESP","SPAIN" -"3564922880","3564923647","US","USA","UNITED STATES" -"3564923648","3564923903","ES","ESP","SPAIN" -"3564923904","3564926975","US","USA","UNITED STATES" -"3564926976","3564929023","RU","RUS","RUSSIAN FEDERATION" -"3564929024","3564937215","AT","AUT","AUSTRIA" -"3564937216","3564941311","CS","SCG","SERBIA AND MONTENEGRO" -"3564941312","3564945407","CS","SCG","SERBIA AND MONTENEGRO" -"3564945408","3564947175","GB","GBR","UNITED KINGDOM" -"3564947176","3564947183","FR","FRA","FRANCE" -"3564947184","3564948063","GB","GBR","UNITED KINGDOM" -"3564948064","3564948071","IE","IRL","IRELAND" -"3564948072","3564948319","GB","GBR","UNITED KINGDOM" -"3564948320","3564948351","IE","IRL","IRELAND" -"3564948352","3564953647","GB","GBR","UNITED KINGDOM" -"3564953648","3564953651","CH","CHE","SWITZERLAND" -"3564953652","3564953727","GB","GBR","UNITED KINGDOM" -"3564953728","3564953743","AT","AUT","AUSTRIA" -"3564953744","3564953744","GB","GBR","UNITED KINGDOM" -"3564953745","3564953759","AT","AUT","AUSTRIA" -"3564953760","3564953791","GB","GBR","UNITED KINGDOM" -"3564953792","3564953855","AT","AUT","AUSTRIA" -"3564953856","3564954111","GB","GBR","UNITED KINGDOM" -"3564954112","3564954131","AT","AUT","AUSTRIA" -"3564954132","3564954139","GB","GBR","UNITED KINGDOM" -"3564954140","3564954143","AT","AUT","AUSTRIA" -"3564954144","3564954155","GB","GBR","UNITED KINGDOM" -"3564954156","3564954159","AT","AUT","AUSTRIA" -"3564954160","3564954175","DE","DEU","GERMANY" -"3564954176","3564954183","AT","AUT","AUSTRIA" -"3564954184","3564954191","CH","CHE","SWITZERLAND" -"3564954192","3564954211","AT","AUT","AUSTRIA" -"3564954212","3564954231","GB","GBR","UNITED KINGDOM" -"3564954232","3564954239","AT","AUT","AUSTRIA" -"3564954240","3564954303","GB","GBR","UNITED KINGDOM" -"3564954304","3564954311","AT","AUT","AUSTRIA" -"3564954312","3564954367","GB","GBR","UNITED KINGDOM" -"3564954368","3564954383","AT","AUT","AUSTRIA" -"3564954384","3564954415","GB","GBR","UNITED KINGDOM" -"3564954416","3564954431","DE","DEU","GERMANY" -"3564954432","3564956160","GB","GBR","UNITED KINGDOM" -"3564956161","3564956671","AT","AUT","AUSTRIA" -"3564956672","3564956687","GB","GBR","UNITED KINGDOM" -"3564956688","3564956719","AT","AUT","AUSTRIA" -"3564956720","3564956735","GB","GBR","UNITED KINGDOM" -"3564956736","3564956751","AT","AUT","AUSTRIA" -"3564956752","3564956767","US","USA","UNITED STATES" -"3564956768","3564956855","AT","AUT","AUSTRIA" -"3564956856","3564956903","GB","GBR","UNITED KINGDOM" -"3564956904","3564956907","AT","AUT","AUSTRIA" -"3564956908","3564956911","CH","CHE","SWITZERLAND" -"3564956912","3564956927","AT","AUT","AUSTRIA" -"3564956928","3564956967","GB","GBR","UNITED KINGDOM" -"3564956968","3564956971","CH","CHE","SWITZERLAND" -"3564956972","3564956975","US","USA","UNITED STATES" -"3564956976","3564956979","GB","GBR","UNITED KINGDOM" -"3564956980","3564956991","AT","AUT","AUSTRIA" -"3564956992","3564956999","GB","GBR","UNITED KINGDOM" -"3564957000","3564957007","AT","AUT","AUSTRIA" -"3564957008","3564957023","GB","GBR","UNITED KINGDOM" -"3564957024","3564957039","AT","AUT","AUSTRIA" -"3564957040","3564957087","GB","GBR","UNITED KINGDOM" -"3564957088","3564957255","AT","AUT","AUSTRIA" -"3564957256","3564957263","GB","GBR","UNITED KINGDOM" -"3564957264","3564957439","AT","AUT","AUSTRIA" -"3564957440","3564957447","GB","GBR","UNITED KINGDOM" -"3564957448","3564957455","CH","CHE","SWITZERLAND" -"3564957456","3564957459","AT","AUT","AUSTRIA" -"3564957460","3564957471","GB","GBR","UNITED KINGDOM" -"3564957472","3564957499","AT","AUT","AUSTRIA" -"3564957500","3564957503","GB","GBR","UNITED KINGDOM" -"3564957504","3564957507","AT","AUT","AUSTRIA" -"3564957508","3564957511","GB","GBR","UNITED KINGDOM" -"3564957512","3564957519","AT","AUT","AUSTRIA" -"3564957520","3564957527","GB","GBR","UNITED KINGDOM" -"3564957528","3564957531","AT","AUT","AUSTRIA" -"3564957532","3564957547","GB","GBR","UNITED KINGDOM" -"3564957548","3564957551","AT","AUT","AUSTRIA" -"3564957552","3564957559","GB","GBR","UNITED KINGDOM" -"3564957560","3564957591","AT","AUT","AUSTRIA" -"3564957592","3564957595","GB","GBR","UNITED KINGDOM" -"3564957596","3564957599","AT","AUT","AUSTRIA" -"3564957600","3564957607","GB","GBR","UNITED KINGDOM" -"3564957608","3564957615","AT","AUT","AUSTRIA" -"3564957616","3564957619","GB","GBR","UNITED KINGDOM" -"3564957620","3564957631","AT","AUT","AUSTRIA" -"3564957632","3564957663","GB","GBR","UNITED KINGDOM" -"3564957664","3564957671","AT","AUT","AUSTRIA" -"3564957672","3564957679","GB","GBR","UNITED KINGDOM" -"3564957680","3564957695","AT","AUT","AUSTRIA" -"3564957696","3564957855","GB","GBR","UNITED KINGDOM" -"3564957856","3564957859","ES","ESP","SPAIN" -"3564957860","3564957863","AT","AUT","AUSTRIA" -"3564957864","3564957867","IT","ITA","ITALY" -"3564957868","3564957871","AT","AUT","AUSTRIA" -"3564957872","3564957891","GB","GBR","UNITED KINGDOM" -"3564957892","3564957903","AT","AUT","AUSTRIA" -"3564957904","3564957911","GB","GBR","UNITED KINGDOM" -"3564957912","3564957919","AT","AUT","AUSTRIA" -"3564957920","3564957951","GB","GBR","UNITED KINGDOM" -"3564957952","3564957967","AT","AUT","AUSTRIA" -"3564957968","3564957987","GB","GBR","UNITED KINGDOM" -"3564957988","3564958015","AT","AUT","AUSTRIA" -"3564958016","3564958111","GB","GBR","UNITED KINGDOM" -"3564958112","3564958143","AT","AUT","AUSTRIA" -"3564958144","3564958147","GB","GBR","UNITED KINGDOM" -"3564958148","3564958155","AT","AUT","AUSTRIA" -"3564958156","3564958159","GB","GBR","UNITED KINGDOM" -"3564958160","3564958179","AT","AUT","AUSTRIA" -"3564958180","3564958183","US","USA","UNITED STATES" -"3564958184","3564958191","AT","AUT","AUSTRIA" -"3564958192","3564958207","GB","GBR","UNITED KINGDOM" -"3564958208","3564958463","AT","AUT","AUSTRIA" -"3564958464","3564958487","GB","GBR","UNITED KINGDOM" -"3564958488","3564958591","AT","AUT","AUSTRIA" -"3564958592","3564958719","GB","GBR","UNITED KINGDOM" -"3564958720","3564958799","AT","AUT","AUSTRIA" -"3564958800","3564958807","GB","GBR","UNITED KINGDOM" -"3564958808","3564958847","AT","AUT","AUSTRIA" -"3564958848","3564958911","GB","GBR","UNITED KINGDOM" -"3564958912","3564958975","AT","AUT","AUSTRIA" -"3564958976","3564959007","NL","NLD","NETHERLANDS" -"3564959008","3564959055","AT","AUT","AUSTRIA" -"3564959056","3564959075","GB","GBR","UNITED KINGDOM" -"3564959076","3564959091","AT","AUT","AUSTRIA" -"3564959092","3564959095","GB","GBR","UNITED KINGDOM" -"3564959096","3564959103","AT","AUT","AUSTRIA" -"3564959104","3564959119","GB","GBR","UNITED KINGDOM" -"3564959120","3564959127","AT","AUT","AUSTRIA" -"3564959128","3564959135","GB","GBR","UNITED KINGDOM" -"3564959136","3564959155","AT","AUT","AUSTRIA" -"3564959156","3564959191","GB","GBR","UNITED KINGDOM" -"3564959192","3564959195","AT","AUT","AUSTRIA" -"3564959196","3564959199","GB","GBR","UNITED KINGDOM" -"3564959200","3564959227","AT","AUT","AUSTRIA" -"3564959228","3564959231","GB","GBR","UNITED KINGDOM" -"3564959232","3564959359","AT","AUT","AUSTRIA" -"3564959360","3564959383","GB","GBR","UNITED KINGDOM" -"3564959384","3564959391","AT","AUT","AUSTRIA" -"3564959392","3564959399","SA","SAU","SAUDI ARABIA" -"3564959400","3564959407","AT","AUT","AUSTRIA" -"3564959408","3564959423","CH","CHE","SWITZERLAND" -"3564959424","3564959443","GB","GBR","UNITED KINGDOM" -"3564959444","3564959451","AT","AUT","AUSTRIA" -"3564959452","3564959455","FR","FRA","FRANCE" -"3564959456","3564959471","GB","GBR","UNITED KINGDOM" -"3564959472","3564959479","AT","AUT","AUSTRIA" -"3564959480","3564959487","GB","GBR","UNITED KINGDOM" -"3564959488","3564959495","AT","AUT","AUSTRIA" -"3564959496","3564959499","GB","GBR","UNITED KINGDOM" -"3564959500","3564959519","AT","AUT","AUSTRIA" -"3564959520","3564959535","GB","GBR","UNITED KINGDOM" -"3564959536","3564959551","AT","AUT","AUSTRIA" -"3564959552","3564959567","GB","GBR","UNITED KINGDOM" -"3564959568","3564959579","AT","AUT","AUSTRIA" -"3564959580","3564959583","GB","GBR","UNITED KINGDOM" -"3564959584","3564959615","AT","AUT","AUSTRIA" -"3564959616","3564959623","GB","GBR","UNITED KINGDOM" -"3564959624","3564959639","AT","AUT","AUSTRIA" -"3564959640","3564959655","GB","GBR","UNITED KINGDOM" -"3564959656","3564959663","CH","CHE","SWITZERLAND" -"3564959664","3564959679","AT","AUT","AUSTRIA" -"3564959680","3564959695","GB","GBR","UNITED KINGDOM" -"3564959696","3564959711","AT","AUT","AUSTRIA" -"3564959712","3564959755","GB","GBR","UNITED KINGDOM" -"3564959756","3564959759","AT","AUT","AUSTRIA" -"3564959760","3564959775","GB","GBR","UNITED KINGDOM" -"3564959776","3564959807","AT","AUT","AUSTRIA" -"3564959808","3564959839","GB","GBR","UNITED KINGDOM" -"3564959840","3564959903","AT","AUT","AUSTRIA" -"3564959904","3564959904","GB","GBR","UNITED KINGDOM" -"3564959905","3564959967","AT","AUT","AUSTRIA" -"3564959968","3564959999","GB","GBR","UNITED KINGDOM" -"3564960000","3564960127","AT","AUT","AUSTRIA" -"3564960128","3564960135","DE","DEU","GERMANY" -"3564960136","3564960159","GB","GBR","UNITED KINGDOM" -"3564960160","3564960195","AT","AUT","AUSTRIA" -"3564960196","3564960211","GB","GBR","UNITED KINGDOM" -"3564960212","3564960223","AT","AUT","AUSTRIA" -"3564960224","3564960231","GB","GBR","UNITED KINGDOM" -"3564960232","3564960511","AT","AUT","AUSTRIA" -"3564960512","3564960543","GB","GBR","UNITED KINGDOM" -"3564960544","3564960559","AT","AUT","AUSTRIA" -"3564960560","3564960615","GB","GBR","UNITED KINGDOM" -"3564960616","3564960623","FR","FRA","FRANCE" -"3564960624","3564960631","GB","GBR","UNITED KINGDOM" -"3564960632","3564960639","AT","AUT","AUSTRIA" -"3564960640","3564960767","GB","GBR","UNITED KINGDOM" -"3564960768","3564960879","AT","AUT","AUSTRIA" -"3564960880","3564960927","GB","GBR","UNITED KINGDOM" -"3564960928","3564960959","AT","AUT","AUSTRIA" -"3564960960","3564960991","GB","GBR","UNITED KINGDOM" -"3564960992","3564961007","AT","AUT","AUSTRIA" -"3564961008","3564961023","GB","GBR","UNITED KINGDOM" -"3564961024","3564961079","AT","AUT","AUSTRIA" -"3564961080","3564961151","GB","GBR","UNITED KINGDOM" -"3564961152","3564961311","AT","AUT","AUSTRIA" -"3564961312","3564961319","GB","GBR","UNITED KINGDOM" -"3564961320","3564961791","AT","AUT","AUSTRIA" -"3564961792","3564969983","TR","TUR","TURKEY" -"3564969984","3564972607","DE","DEU","GERMANY" -"3564972608","3564972631","AT","AUT","AUSTRIA" -"3564972632","3564972639","LI","LIE","LIECHTENSTEIN" -"3564972640","3564978175","DE","DEU","GERMANY" -"3564978176","3564986367","GB","GBR","UNITED KINGDOM" -"3564986368","3564994559","DE","DEU","GERMANY" -"3564994560","3565002751","NL","NLD","NETHERLANDS" -"3565002752","3565007247","NO","NOR","NORWAY" -"3565007248","3565007251","SE","SWE","SWEDEN" -"3565007252","3565027327","NO","NOR","NORWAY" -"3565027328","3565035519","PL","POL","POLAND" -"3565035520","3565043711","IE","IRL","IRELAND" -"3565043712","3565047807","AT","AUT","AUSTRIA" -"3565047808","3565048063","LI","LIE","LIECHTENSTEIN" -"3565048064","3565051903","AT","AUT","AUSTRIA" -"3565060096","3565068287","GB","GBR","UNITED KINGDOM" -"3565068288","3565076479","CH","CHE","SWITZERLAND" -"3565076480","3565084671","DE","DEU","GERMANY" -"3565084672","3565092863","IS","ISL","ICELAND" -"3565092864","3565093055","GB","GBR","UNITED KINGDOM" -"3565093056","3565093087","PS","PSE","PALESTINIAN TERRITORY, OCCUPIED" -"3565093088","3565093391","GB","GBR","UNITED KINGDOM" -"3565093392","3565093399","NO","NOR","NORWAY" -"3565093400","3565096759","GB","GBR","UNITED KINGDOM" -"3565096760","3565096767","IE","IRL","IRELAND" -"3565096768","3565099647","GB","GBR","UNITED KINGDOM" -"3565099648","3565099651","US","USA","UNITED STATES" -"3565099652","3565101055","GB","GBR","UNITED KINGDOM" -"3565101056","3565109247","DE","DEU","GERMANY" -"3565109248","3565117439","PL","POL","POLAND" -"3565117440","3565125631","TR","TUR","TURKEY" -"3565125632","3565158399","NL","NLD","NETHERLANDS" -"3565158400","3565223935","ES","ESP","SPAIN" -"3565223936","3565240319","FR","FRA","FRANCE" -"3565240320","3565248511","IE","IRL","IRELAND" -"3565248512","3565256703","RU","RUS","RUSSIAN FEDERATION" -"3565256704","3565289471","NL","NLD","NETHERLANDS" -"3565289472","3565355007","DK","DNK","DENMARK" -"3565355008","3565420543","IT","ITA","ITALY" -"3565420544","3565486079","GB","GBR","UNITED KINGDOM" -"3565486080","3565486335","IE","IRL","IRELAND" -"3565486336","3565486975","FR","FRA","FRANCE" -"3565486976","3565487615","NL","NLD","NETHERLANDS" -"3565487616","3565487871","SE","SWE","SWEDEN" -"3565487872","3565488383","GB","GBR","UNITED KINGDOM" -"3565488384","3565488639","ES","ESP","SPAIN" -"3565488640","3565488895","GB","GBR","UNITED KINGDOM" -"3565488896","3565489535","DE","DEU","GERMANY" -"3565489536","3565489791","GB","GBR","UNITED KINGDOM" -"3565489792","3565489823","DE","DEU","GERMANY" -"3565489824","3565490175","GB","GBR","UNITED KINGDOM" -"3565490176","3565490431","NL","NLD","NETHERLANDS" -"3565490432","3565491199","GB","GBR","UNITED KINGDOM" -"3565491200","3565491215","FR","FRA","FRANCE" -"3565491216","3565491455","GB","GBR","UNITED KINGDOM" -"3565491456","3565491711","IT","ITA","ITALY" -"3565491712","3565491839","GB","GBR","UNITED KINGDOM" -"3565491840","3565491903","IT","ITA","ITALY" -"3565491904","3565491967","NL","NLD","NETHERLANDS" -"3565491968","3565492295","GB","GBR","UNITED KINGDOM" -"3565492296","3565492303","IE","IRL","IRELAND" -"3565492304","3565492319","GB","GBR","UNITED KINGDOM" -"3565492320","3565492327","DE","DEU","GERMANY" -"3565492328","3565492335","GB","GBR","UNITED KINGDOM" -"3565492336","3565492351","FR","FRA","FRANCE" -"3565492352","3565492479","GB","GBR","UNITED KINGDOM" -"3565492480","3565492607","NL","NLD","NETHERLANDS" -"3565492608","3565492639","GB","GBR","UNITED KINGDOM" -"3565492640","3565492655","FR","FRA","FRANCE" -"3565492656","3565492671","GB","GBR","UNITED KINGDOM" -"3565492672","3565492735","IT","ITA","ITALY" -"3565492736","3565492991","CH","CHE","SWITZERLAND" -"3565492992","3565493247","NL","NLD","NETHERLANDS" -"3565493248","3565493583","GB","GBR","UNITED KINGDOM" -"3565493584","3565493591","DE","DEU","GERMANY" -"3565493592","3565493679","GB","GBR","UNITED KINGDOM" -"3565493680","3565493687","FR","FRA","FRANCE" -"3565493688","3565493759","GB","GBR","UNITED KINGDOM" -"3565493760","3565493775","NL","NLD","NETHERLANDS" -"3565493776","3565493983","GB","GBR","UNITED KINGDOM" -"3565493984","3565494055","DE","DEU","GERMANY" -"3565494056","3565494063","GB","GBR","UNITED KINGDOM" -"3565494064","3565494079","NL","NLD","NETHERLANDS" -"3565494080","3565494143","GB","GBR","UNITED KINGDOM" -"3565494144","3565494271","DE","DEU","GERMANY" -"3565494272","3565494527","IS","ISL","ICELAND" -"3565494528","3565494543","GB","GBR","UNITED KINGDOM" -"3565494544","3565494551","IT","ITA","ITALY" -"3565494552","3565494559","DE","DEU","GERMANY" -"3565494560","3565494591","GB","GBR","UNITED KINGDOM" -"3565494592","3565494655","FR","FRA","FRANCE" -"3565494656","3565494671","SE","SWE","SWEDEN" -"3565494672","3565494687","DE","DEU","GERMANY" -"3565494688","3565494703","SE","SWE","SWEDEN" -"3565494704","3565494719","DK","DNK","DENMARK" -"3565494720","3565494735","GB","GBR","UNITED KINGDOM" -"3565494736","3565494743","CA","CAN","CANADA" -"3565494744","3565495295","GB","GBR","UNITED KINGDOM" -"3565495296","3565496447","FR","FRA","FRANCE" -"3565496448","3565496511","DE","DEU","GERMANY" -"3565496512","3565496575","US","USA","UNITED STATES" -"3565496576","3565496831","GB","GBR","UNITED KINGDOM" -"3565496832","3565497087","IT","ITA","ITALY" -"3565497088","3565497103","GB","GBR","UNITED KINGDOM" -"3565497104","3565497119","IE","IRL","IRELAND" -"3565497120","3565497151","DE","DEU","GERMANY" -"3565497152","3565497159","IE","IRL","IRELAND" -"3565497160","3565497167","US","USA","UNITED STATES" -"3565497168","3565497199","GB","GBR","UNITED KINGDOM" -"3565497200","3565497207","IT","ITA","ITALY" -"3565497208","3565497215","GB","GBR","UNITED KINGDOM" -"3565497216","3565497279","CZ","CZE","CZECH REPUBLIC" -"3565497280","3565497287","NL","NLD","NETHERLANDS" -"3565497288","3565497343","GB","GBR","UNITED KINGDOM" -"3565497344","3565497599","US","USA","UNITED STATES" -"3565497600","3565497871","GB","GBR","UNITED KINGDOM" -"3565497872","3565497887","DE","DEU","GERMANY" -"3565497888","3565497903","GB","GBR","UNITED KINGDOM" -"3565497904","3565497911","IE","IRL","IRELAND" -"3565497912","3565497919","DE","DEU","GERMANY" -"3565497920","3565497927","PR","PRI","PUERTO RICO" -"3565497928","3565497951","GB","GBR","UNITED KINGDOM" -"3565497952","3565497967","US","USA","UNITED STATES" -"3565497968","3565498111","GB","GBR","UNITED KINGDOM" -"3565498112","3565498367","NL","NLD","NETHERLANDS" -"3565498368","3565498431","FR","FRA","FRANCE" -"3565498432","3565498479","US","USA","UNITED STATES" -"3565498480","3565498519","GB","GBR","UNITED KINGDOM" -"3565498520","3565498527","ZA","ZAF","SOUTH AFRICA" -"3565498528","3565499815","GB","GBR","UNITED KINGDOM" -"3565499816","3565499823","FR","FRA","FRANCE" -"3565499824","3565500479","GB","GBR","UNITED KINGDOM" -"3565500480","3565500543","DE","DEU","GERMANY" -"3565500544","3565500567","GB","GBR","UNITED KINGDOM" -"3565500568","3565500575","IE","IRL","IRELAND" -"3565500576","3565500591","GB","GBR","UNITED KINGDOM" -"3565500592","3565500599","DE","DEU","GERMANY" -"3565500600","3565500607","GB","GBR","UNITED KINGDOM" -"3565500608","3565500623","FR","FRA","FRANCE" -"3565500624","3565501095","GB","GBR","UNITED KINGDOM" -"3565501096","3565501103","FR","FRA","FRANCE" -"3565501104","3565501119","FI","FIN","FINLAND" -"3565501120","3565501231","GB","GBR","UNITED KINGDOM" -"3565501232","3565501247","DE","DEU","GERMANY" -"3565501248","3565501311","GB","GBR","UNITED KINGDOM" -"3565501312","3565501439","DE","DEU","GERMANY" -"3565501440","3565501679","GB","GBR","UNITED KINGDOM" -"3565501680","3565501695","IE","IRL","IRELAND" -"3565501696","3565502207","GB","GBR","UNITED KINGDOM" -"3565502208","3565502239","IT","ITA","ITALY" -"3565502240","3565502463","GB","GBR","UNITED KINGDOM" -"3565502464","3565503487","NL","NLD","NETHERLANDS" -"3565503488","3565503999","GB","GBR","UNITED KINGDOM" -"3565504000","3565504511","NL","NLD","NETHERLANDS" -"3565504512","3565510655","GB","GBR","UNITED KINGDOM" -"3565510656","3565511679","NL","NLD","NETHERLANDS" -"3565511680","3565512191","CH","CHE","SWITZERLAND" -"3565512192","3565512703","DE","DEU","GERMANY" -"3565512704","3565512767","GB","GBR","UNITED KINGDOM" -"3565512768","3565512959","DE","DEU","GERMANY" -"3565512960","3565514111","GB","GBR","UNITED KINGDOM" -"3565514112","3565514239","DE","DEU","GERMANY" -"3565514240","3565514495","DK","DNK","DENMARK" -"3565514496","3565518847","GB","GBR","UNITED KINGDOM" -"3565518848","3565551615","TR","TUR","TURKEY" -"3565551616","3565578495","GB","GBR","UNITED KINGDOM" -"3565578496","3565578751","CA","CAN","CANADA" -"3565578752","3565641487","GB","GBR","UNITED KINGDOM" -"3565641488","3565641503","DE","DEU","GERMANY" -"3565641504","3565682687","GB","GBR","UNITED KINGDOM" -"3565682688","3565688063","NL","NLD","NETHERLANDS" -"3565688064","3565688319","GB","GBR","UNITED KINGDOM" -"3565688320","3565748223","NL","NLD","NETHERLANDS" -"3565748224","3565752407","GB","GBR","UNITED KINGDOM" -"3565752416","3565752463","GB","GBR","UNITED KINGDOM" -"3565752472","3565752479","GB","GBR","UNITED KINGDOM" -"3565752488","3565752535","GB","GBR","UNITED KINGDOM" -"3565752544","3565752839","GB","GBR","UNITED KINGDOM" -"3565752856","3565752879","GB","GBR","UNITED KINGDOM" -"3565752888","3565752983","GB","GBR","UNITED KINGDOM" -"3565752992","3565752999","GB","GBR","UNITED KINGDOM" -"3565753016","3565753031","GB","GBR","UNITED KINGDOM" -"3565753040","3565753071","GB","GBR","UNITED KINGDOM" -"3565753080","3565753183","GB","GBR","UNITED KINGDOM" -"3565753248","3565753279","GB","GBR","UNITED KINGDOM" -"3565753344","3565753791","GB","GBR","UNITED KINGDOM" -"3565753800","3565753815","GB","GBR","UNITED KINGDOM" -"3565753824","3565753831","GB","GBR","UNITED KINGDOM" -"3565753840","3565753847","GB","GBR","UNITED KINGDOM" -"3565753984","3565754367","GB","GBR","UNITED KINGDOM" -"3565754496","3565754511","GB","GBR","UNITED KINGDOM" -"3565754624","3565755263","GB","GBR","UNITED KINGDOM" -"3565755280","3565755359","GB","GBR","UNITED KINGDOM" -"3565755376","3565755583","GB","GBR","UNITED KINGDOM" -"3565755648","3565755695","GB","GBR","UNITED KINGDOM" -"3565755704","3565755727","GB","GBR","UNITED KINGDOM" -"3565755736","3565755831","GB","GBR","UNITED KINGDOM" -"3565755840","3565755847","GB","GBR","UNITED KINGDOM" -"3565755856","3565755871","GB","GBR","UNITED KINGDOM" -"3565755880","3565755919","GB","GBR","UNITED KINGDOM" -"3565755928","3565755935","GB","GBR","UNITED KINGDOM" -"3565755944","3565755959","GB","GBR","UNITED KINGDOM" -"3565755968","3565755999","GB","GBR","UNITED KINGDOM" -"3565756008","3565756063","GB","GBR","UNITED KINGDOM" -"3565756072","3565756087","GB","GBR","UNITED KINGDOM" -"3565756096","3565756119","GB","GBR","UNITED KINGDOM" -"3565756136","3565756159","GB","GBR","UNITED KINGDOM" -"3565756288","3565760783","GB","GBR","UNITED KINGDOM" -"3565760792","3565760799","GB","GBR","UNITED KINGDOM" -"3565760808","3565760823","GB","GBR","UNITED KINGDOM" -"3565760832","3565760855","GB","GBR","UNITED KINGDOM" -"3565760864","3565760935","GB","GBR","UNITED KINGDOM" -"3565760944","3565760967","GB","GBR","UNITED KINGDOM" -"3565760976","3565761007","GB","GBR","UNITED KINGDOM" -"3565761016","3565761279","GB","GBR","UNITED KINGDOM" -"3565761344","3565761535","GB","GBR","UNITED KINGDOM" -"3565761544","3565761599","GB","GBR","UNITED KINGDOM" -"3565761616","3565761631","GB","GBR","UNITED KINGDOM" -"3565761640","3565761647","GB","GBR","UNITED KINGDOM" -"3565761656","3565761687","GB","GBR","UNITED KINGDOM" -"3565761704","3565761727","GB","GBR","UNITED KINGDOM" -"3565761752","3565761783","GB","GBR","UNITED KINGDOM" -"3565761792","3565762047","GB","GBR","UNITED KINGDOM" -"3565762048","3565762303","ZA","ZAF","SOUTH AFRICA" -"3565762560","3565762815","GB","GBR","UNITED KINGDOM" -"3565763072","3565763455","GB","GBR","UNITED KINGDOM" -"3565763488","3565763599","GB","GBR","UNITED KINGDOM" -"3565763616","3565763671","GB","GBR","UNITED KINGDOM" -"3565763680","3565763703","GB","GBR","UNITED KINGDOM" -"3565763720","3565763735","GB","GBR","UNITED KINGDOM" -"3565763744","3565763751","GB","GBR","UNITED KINGDOM" -"3565763760","3565763799","GB","GBR","UNITED KINGDOM" -"3565763808","3565763815","GB","GBR","UNITED KINGDOM" -"3565763832","3565763839","GB","GBR","UNITED KINGDOM" -"3565763884","3565763891","GB","GBR","UNITED KINGDOM" -"3565764096","3565764183","GB","GBR","UNITED KINGDOM" -"3565764192","3565764207","GB","GBR","UNITED KINGDOM" -"3565764256","3565764367","GB","GBR","UNITED KINGDOM" -"3565764376","3565764439","GB","GBR","UNITED KINGDOM" -"3565764448","3565764455","GB","GBR","UNITED KINGDOM" -"3565764464","3565764551","GB","GBR","UNITED KINGDOM" -"3565764576","3565766655","GB","GBR","UNITED KINGDOM" -"3565766912","3565767167","GB","GBR","UNITED KINGDOM" -"3565767176","3565767255","GB","GBR","UNITED KINGDOM" -"3565767272","3565767287","GB","GBR","UNITED KINGDOM" -"3565767296","3565767351","GB","GBR","UNITED KINGDOM" -"3565767360","3565767399","GB","GBR","UNITED KINGDOM" -"3565767408","3565767439","GB","GBR","UNITED KINGDOM" -"3565767456","3565767487","GB","GBR","UNITED KINGDOM" -"3565767504","3565767599","GB","GBR","UNITED KINGDOM" -"3565767616","3565767631","GB","GBR","UNITED KINGDOM" -"3565767680","3565767999","GB","GBR","UNITED KINGDOM" -"3565768208","3565768271","GB","GBR","UNITED KINGDOM" -"3565768280","3565768295","GB","GBR","UNITED KINGDOM" -"3565768312","3565768335","GB","GBR","UNITED KINGDOM" -"3565768448","3565768575","GB","GBR","UNITED KINGDOM" -"3565768704","3565768983","GB","GBR","UNITED KINGDOM" -"3565769216","3565769471","GB","GBR","UNITED KINGDOM" -"3565777920","3565813759","GB","GBR","UNITED KINGDOM" -"3565813760","3565879295","SA","SAU","SAUDI ARABIA" -"3565879296","3566010367","GB","GBR","UNITED KINGDOM" -"3566010368","3566075903","IT","ITA","ITALY" -"3566075904","3566092287","NL","NLD","NETHERLANDS" -"3566092288","3566108671","LV","LVA","LATVIA" -"3566108672","3566141439","ES","ESP","SPAIN" -"3566141440","3566206975","IL","ISR","ISRAEL" -"3566206976","3566272511","DE","DEU","GERMANY" -"3566272512","3566338047","ES","ESP","SPAIN" -"3566338048","3566354431","FI","FIN","FINLAND" -"3566354432","3566370815","RO","ROM","ROMANIA" -"3566370816","3566403583","TR","TUR","TURKEY" -"3566403584","3566436351","CH","CHE","SWITZERLAND" -"3566436352","3566439615","IE","IRL","IRELAND" -"3566439616","3566439631","GB","GBR","UNITED KINGDOM" -"3566439632","3566469119","IE","IRL","IRELAND" -"3566469120","3566534655","GB","GBR","UNITED KINGDOM" -"3566534656","3566551039","DE","DEU","GERMANY" -"3566551040","3566574747","FI","FIN","FINLAND" -"3566574748","3566574751","SE","SWE","SWEDEN" -"3566574752","3566600191","FI","FIN","FINLAND" -"3566600192","3566665727","IL","ISR","ISRAEL" -"3566665728","3566723071","SE","SWE","SWEDEN" -"3566723072","3566723327","FR","FRA","FRANCE" -"3566723328","3566739455","SE","SWE","SWEDEN" -"3566739456","3566747647","RU","RUS","RUSSIAN FEDERATION" -"3566747648","3566764031","GR","GRC","GREECE" -"3566764032","3566796799","AT","AUT","AUSTRIA" -"3566796800","3566816511","NL","NLD","NETHERLANDS" -"3566816512","3566816767","US","USA","UNITED STATES" -"3566816768","3566862335","NL","NLD","NETHERLANDS" -"3566862336","3566895103","TR","TUR","TURKEY" -"3566895104","3566897279","KZ","KAZ","KAZAKHSTAN" -"3566897280","3566897311","KG","KGZ","KYRGYZSTAN" -"3566897312","3566927871","KZ","KAZ","KAZAKHSTAN" -"3566927872","3566960127","FR","FRA","FRANCE" -"3566960128","3566960143","GB","GBR","UNITED KINGDOM" -"3566960144","3566993407","FR","FRA","FRANCE" -"3566993408","3567058943","TR","TUR","TURKEY" -"3567058944","3567103047","FR","FRA","FRANCE" -"3567103048","3567103055","IT","ITA","ITALY" -"3567103056","3567108255","FR","FRA","FRANCE" -"3567108256","3567108263","SE","SWE","SWEDEN" -"3567108264","3567124479","FR","FRA","FRANCE" -"3567124992","3567125023","GB","GBR","UNITED KINGDOM" -"3567125248","3567125503","GB","GBR","UNITED KINGDOM" -"3567126688","3567126759","GB","GBR","UNITED KINGDOM" -"3567127552","3567127807","GB","GBR","UNITED KINGDOM" -"3567129856","3567129887","GB","GBR","UNITED KINGDOM" -"3567130016","3567130079","GB","GBR","UNITED KINGDOM" -"3567131384","3567131647","GB","GBR","UNITED KINGDOM" -"3567133216","3567133247","GB","GBR","UNITED KINGDOM" -"3567133368","3567133375","GB","GBR","UNITED KINGDOM" -"3567134208","3567134335","GB","GBR","UNITED KINGDOM" -"3567134848","3567134975","GB","GBR","UNITED KINGDOM" -"3567136000","3567136255","GB","GBR","UNITED KINGDOM" -"3567136512","3567136575","GB","GBR","UNITED KINGDOM" -"3567136640","3567136671","GB","GBR","UNITED KINGDOM" -"3567136768","3567136895","GB","GBR","UNITED KINGDOM" -"3567137024","3567137279","GB","GBR","UNITED KINGDOM" -"3567137600","3567137663","GB","GBR","UNITED KINGDOM" -"3567137988","3567137991","GB","GBR","UNITED KINGDOM" -"3567138000","3567138003","GB","GBR","UNITED KINGDOM" -"3567138040","3567138047","GB","GBR","UNITED KINGDOM" -"3567140096","3567140351","GB","GBR","UNITED KINGDOM" -"3567140864","3567140927","GB","GBR","UNITED KINGDOM" -"3567141632","3567141887","GB","GBR","UNITED KINGDOM" -"3567142272","3567142399","GB","GBR","UNITED KINGDOM" -"3567143432","3567143439","GB","GBR","UNITED KINGDOM" -"3567143520","3567143551","GB","GBR","UNITED KINGDOM" -"3567143680","3567143687","GB","GBR","UNITED KINGDOM" -"3567143872","3567143935","GB","GBR","UNITED KINGDOM" -"3567143952","3567143967","GB","GBR","UNITED KINGDOM" -"3567144048","3567144063","GB","GBR","UNITED KINGDOM" -"3567144172","3567144175","GB","GBR","UNITED KINGDOM" -"3567144320","3567144447","GB","GBR","UNITED KINGDOM" -"3567144768","3567144831","GB","GBR","UNITED KINGDOM" -"3567147528","3567147535","GB","GBR","UNITED KINGDOM" -"3567147552","3567147559","GB","GBR","UNITED KINGDOM" -"3567147936","3567147967","GB","GBR","UNITED KINGDOM" -"3567148520","3567148527","GB","GBR","UNITED KINGDOM" -"3567148800","3567149055","GB","GBR","UNITED KINGDOM" -"3567149088","3567149119","GB","GBR","UNITED KINGDOM" -"3567149904","3567149911","GB","GBR","UNITED KINGDOM" -"3567149920","3567149935","GB","GBR","UNITED KINGDOM" -"3567151136","3567151199","GB","GBR","UNITED KINGDOM" -"3567151232","3567151263","GB","GBR","UNITED KINGDOM" -"3567152000","3567152127","GB","GBR","UNITED KINGDOM" -"3567152160","3567152191","GB","GBR","UNITED KINGDOM" -"3567152256","3567152383","GB","GBR","UNITED KINGDOM" -"3567152392","3567152407","GB","GBR","UNITED KINGDOM" -"3567152640","3567152647","GB","GBR","UNITED KINGDOM" -"3567152664","3567152671","GB","GBR","UNITED KINGDOM" -"3567152744","3567152751","GB","GBR","UNITED KINGDOM" -"3567152832","3567152863","GB","GBR","UNITED KINGDOM" -"3567152960","3567152991","GB","GBR","UNITED KINGDOM" -"3567153024","3567153055","GB","GBR","UNITED KINGDOM" -"3567153600","3567153623","GB","GBR","UNITED KINGDOM" -"3567153648","3567153663","GB","GBR","UNITED KINGDOM" -"3567153688","3567153703","GB","GBR","UNITED KINGDOM" -"3567153720","3567153727","GB","GBR","UNITED KINGDOM" -"3567153824","3567153847","GB","GBR","UNITED KINGDOM" -"3567154304","3567154367","GB","GBR","UNITED KINGDOM" -"3567155200","3567155967","GB","GBR","UNITED KINGDOM" -"3567156416","3567156607","GB","GBR","UNITED KINGDOM" -"3567156992","3567157247","GB","GBR","UNITED KINGDOM" -"3567157248","3567165439","CZ","CZE","CZECH REPUBLIC" -"3567165440","3567169535","RU","RUS","RUSSIAN FEDERATION" -"3567169536","3567173631","MK","MKD","THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA" -"3567173632","3567239167","GB","GBR","UNITED KINGDOM" -"3567239168","3567250143","NL","NLD","NETHERLANDS" -"3567250176","3567250943","NL","NLD","NETHERLANDS" -"3567255552","3567321087","PL","POL","POLAND" -"3567321088","3567353855","GB","GBR","UNITED KINGDOM" -"3567353856","3567386623","CH","CHE","SWITZERLAND" -"3567386624","3567386879","GB","GBR","UNITED KINGDOM" -"3567386880","3567386883","DE","DEU","GERMANY" -"3567386884","3567386975","GB","GBR","UNITED KINGDOM" -"3567386976","3567387007","DE","DEU","GERMANY" -"3567387008","3567387071","GB","GBR","UNITED KINGDOM" -"3567387072","3567387391","DE","DEU","GERMANY" -"3567387392","3567387439","GB","GBR","UNITED KINGDOM" -"3567387440","3567387455","DE","DEU","GERMANY" -"3567387456","3567387487","GB","GBR","UNITED KINGDOM" -"3567387488","3567387539","DE","DEU","GERMANY" -"3567387540","3567387543","GB","GBR","UNITED KINGDOM" -"3567387544","3567387547","DE","DEU","GERMANY" -"3567387548","3567387583","GB","GBR","UNITED KINGDOM" -"3567387584","3567388031","DE","DEU","GERMANY" -"3567388032","3567388159","GB","GBR","UNITED KINGDOM" -"3567388160","3567388399","DE","DEU","GERMANY" -"3567388400","3567388415","GB","GBR","UNITED KINGDOM" -"3567388416","3567388479","DE","DEU","GERMANY" -"3567388480","3567388543","GB","GBR","UNITED KINGDOM" -"3567388544","3567388607","DE","DEU","GERMANY" -"3567388608","3567388671","GB","GBR","UNITED KINGDOM" -"3567388672","3567388927","CZ","CZE","CZECH REPUBLIC" -"3567388928","3567389183","DE","DEU","GERMANY" -"3567389184","3567389695","GB","GBR","UNITED KINGDOM" -"3567389696","3567390847","DE","DEU","GERMANY" -"3567390848","3567390879","GB","GBR","UNITED KINGDOM" -"3567390880","3567390975","DE","DEU","GERMANY" -"3567390976","3567391147","GB","GBR","UNITED KINGDOM" -"3567391148","3567391151","DE","DEU","GERMANY" -"3567391152","3567391231","GB","GBR","UNITED KINGDOM" -"3567391232","3567391615","DE","DEU","GERMANY" -"3567391616","3567391759","GB","GBR","UNITED KINGDOM" -"3567391760","3567391791","DE","DEU","GERMANY" -"3567391792","3567391807","GB","GBR","UNITED KINGDOM" -"3567391808","3567391839","DE","DEU","GERMANY" -"3567391840","3567392767","GB","GBR","UNITED KINGDOM" -"3567392768","3567393023","DE","DEU","GERMANY" -"3567393024","3567393279","FR","FRA","FRANCE" -"3567393280","3567393535","HU","HUN","HUNGARY" -"3567393536","3567394975","GB","GBR","UNITED KINGDOM" -"3567394976","3567395007","DE","DEU","GERMANY" -"3567395008","3567395071","GB","GBR","UNITED KINGDOM" -"3567395072","3567395327","DE","DEU","GERMANY" -"3567395328","3567396863","GB","GBR","UNITED KINGDOM" -"3567396864","3567397119","DE","DEU","GERMANY" -"3567397120","3567397375","GB","GBR","UNITED KINGDOM" -"3567397376","3567397503","ES","ESP","SPAIN" -"3567397504","3567397887","GB","GBR","UNITED KINGDOM" -"3567397888","3567398143","DE","DEU","GERMANY" -"3567398144","3567398191","GB","GBR","UNITED KINGDOM" -"3567398192","3567398199","DE","DEU","GERMANY" -"3567398200","3567398655","GB","GBR","UNITED KINGDOM" -"3567398656","3567398911","DE","DEU","GERMANY" -"3567398912","3567398991","GB","GBR","UNITED KINGDOM" -"3567398992","3567399031","DE","DEU","GERMANY" -"3567399032","3567399039","GB","GBR","UNITED KINGDOM" -"3567399040","3567399047","DE","DEU","GERMANY" -"3567399048","3567399071","GB","GBR","UNITED KINGDOM" -"3567399072","3567399103","DE","DEU","GERMANY" -"3567399104","3567399167","GB","GBR","UNITED KINGDOM" -"3567399168","3567399263","DE","DEU","GERMANY" -"3567399264","3567399295","GB","GBR","UNITED KINGDOM" -"3567399296","3567399359","DE","DEU","GERMANY" -"3567399360","3567399423","GB","GBR","UNITED KINGDOM" -"3567399424","3567399439","DE","DEU","GERMANY" -"3567399440","3567399487","GB","GBR","UNITED KINGDOM" -"3567399488","3567399679","DE","DEU","GERMANY" -"3567399680","3567399687","GB","GBR","UNITED KINGDOM" -"3567399688","3567399695","DE","DEU","GERMANY" -"3567399696","3567399743","GB","GBR","UNITED KINGDOM" -"3567399744","3567399871","DE","DEU","GERMANY" -"3567399872","3567399935","GB","GBR","UNITED KINGDOM" -"3567399936","3567400447","DE","DEU","GERMANY" -"3567400448","3567400735","GB","GBR","UNITED KINGDOM" -"3567400736","3567400751","DE","DEU","GERMANY" -"3567400752","3567400959","GB","GBR","UNITED KINGDOM" -"3567400960","3567401471","DE","DEU","GERMANY" -"3567401472","3567401503","GB","GBR","UNITED KINGDOM" -"3567401504","3567401519","DE","DEU","GERMANY" -"3567401520","3567401543","GB","GBR","UNITED KINGDOM" -"3567401544","3567401551","DE","DEU","GERMANY" -"3567401552","3567401727","GB","GBR","UNITED KINGDOM" -"3567401728","3567402367","DE","DEU","GERMANY" -"3567402368","3567402495","GB","GBR","UNITED KINGDOM" -"3567402496","3567403007","DE","DEU","GERMANY" -"3567403008","3567419391","IT","ITA","ITALY" -"3567419392","3567427583","SA","SAU","SAUDI ARABIA" -"3567427584","3567435775","SE","SWE","SWEDEN" -"3567435776","3567436543","GB","GBR","UNITED KINGDOM" -"3567436544","3567436595","IN","IND","INDIA" -"3567436596","3567436599","GB","GBR","UNITED KINGDOM" -"3567436600","3567436603","IN","IND","INDIA" -"3567436604","3567436799","GB","GBR","UNITED KINGDOM" -"3567436800","3567436895","IN","IND","INDIA" -"3567436896","3567441375","GB","GBR","UNITED KINGDOM" -"3567441376","3567441407","NL","NLD","NETHERLANDS" -"3567441408","3567444223","GB","GBR","UNITED KINGDOM" -"3567444224","3567444475","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"3567444476","3567444479","NL","NLD","NETHERLANDS" -"3567444480","3567445951","GB","GBR","UNITED KINGDOM" -"3567445952","3567445983","NL","NLD","NETHERLANDS" -"3567445984","3567452031","GB","GBR","UNITED KINGDOM" -"3567452032","3567452047","GR","GRC","GREECE" -"3567452048","3567452159","GB","GBR","UNITED KINGDOM" -"3567452160","3567507455","ES","ESP","SPAIN" -"3567507456","3567509503","NL","NLD","NETHERLANDS" -"3567509504","3567512575","ES","ESP","SPAIN" -"3567512576","3567513599","NL","NLD","NETHERLANDS" -"3567513600","3567517695","ES","ESP","SPAIN" -"3567517696","3567583231","RU","RUS","RUSSIAN FEDERATION" -"3567583232","3567583487","AT","AUT","AUSTRIA" -"3567583744","3567583871","AT","AUT","AUSTRIA" -"3567583936","3567583999","AT","AUT","AUSTRIA" -"3567584256","3567584383","AT","AUT","AUSTRIA" -"3567584400","3567584407","AT","AUT","AUSTRIA" -"3567584512","3567584639","AT","AUT","AUSTRIA" -"3567585792","3567586303","GB","GBR","UNITED KINGDOM" -"3567587328","3567591423","GB","GBR","UNITED KINGDOM" -"3567591424","3567599615","IT","ITA","ITALY" -"3567599616","3567615999","NL","NLD","NETHERLANDS" -"3567616000","3567616511","BD","BGD","BANGLADESH" -"3567616512","3567617087","GB","GBR","UNITED KINGDOM" -"3567617088","3567617119","NG","NGA","NIGERIA" -"3567617120","3567617151","GB","GBR","UNITED KINGDOM" -"3567617152","3567617279","NG","NGA","NIGERIA" -"3567617280","3567617535","IN","IND","INDIA" -"3567617536","3567617791","KE","KEN","KENYA" -"3567617792","3567618047","NG","NGA","NIGERIA" -"3567618048","3567619071","IN","IND","INDIA" -"3567619072","3567619075","NG","NGA","NIGERIA" -"3567619076","3567619087","GB","GBR","UNITED KINGDOM" -"3567619088","3567619095","NG","NGA","NIGERIA" -"3567619096","3567619103","GB","GBR","UNITED KINGDOM" -"3567619104","3567619111","KE","KEN","KENYA" -"3567619112","3567619135","GB","GBR","UNITED KINGDOM" -"3567619136","3567619583","NG","NGA","NIGERIA" -"3567619584","3567620095","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"3567620096","3567620351","GB","GBR","UNITED KINGDOM" -"3567620352","3567620479","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"3567620480","3567620623","GB","GBR","UNITED KINGDOM" -"3567620624","3567620631","PK","PAK","PAKISTAN" -"3567620632","3567620639","IN","IND","INDIA" -"3567620640","3567620679","PK","PAK","PAKISTAN" -"3567620680","3567620695","GB","GBR","UNITED KINGDOM" -"3567620696","3567620719","PK","PAK","PAKISTAN" -"3567620720","3567620727","GB","GBR","UNITED KINGDOM" -"3567620728","3567620735","IN","IND","INDIA" -"3567620736","3567620863","GB","GBR","UNITED KINGDOM" -"3567620864","3567620927","NG","NGA","NIGERIA" -"3567620928","3567620931","GB","GBR","UNITED KINGDOM" -"3567620932","3567620935","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"3567620936","3567620959","KE","KEN","KENYA" -"3567620960","3567620991","GB","GBR","UNITED KINGDOM" -"3567620992","3567621055","NG","NGA","NIGERIA" -"3567621056","3567621119","KE","KEN","KENYA" -"3567621120","3567621631","GB","GBR","UNITED KINGDOM" -"3567621632","3567621887","ID","IDN","INDONESIA" -"3567621888","3567621895","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"3567621896","3567621903","KE","KEN","KENYA" -"3567621904","3567621911","NG","NGA","NIGERIA" -"3567621912","3567621919","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"3567621920","3567621951","NG","NGA","NIGERIA" -"3567621952","3567622655","GB","GBR","UNITED KINGDOM" -"3567622656","3567622951","KE","KEN","KENYA" -"3567622952","3567622959","GB","GBR","UNITED KINGDOM" -"3567622960","3567622963","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"3567622964","3567622967","NG","NGA","NIGERIA" -"3567622968","3567622975","GB","GBR","UNITED KINGDOM" -"3567622976","3567623039","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"3567623040","3567623055","GA","GAB","GABON" -"3567623056","3567623071","NG","NGA","NIGERIA" -"3567623072","3567623087","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"3567623088","3567623095","GB","GBR","UNITED KINGDOM" -"3567623096","3567623103","GA","GAB","GABON" -"3567623104","3567623135","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"3567623136","3567623143","GB","GBR","UNITED KINGDOM" -"3567623144","3567623151","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"3567623152","3567623167","GB","GBR","UNITED KINGDOM" -"3567623168","3567623423","KE","KEN","KENYA" -"3567623424","3567623471","GB","GBR","UNITED KINGDOM" -"3567623472","3567623479","KE","KEN","KENYA" -"3567623480","3567623727","GB","GBR","UNITED KINGDOM" -"3567623728","3567623759","PK","PAK","PAKISTAN" -"3567623760","3567623767","GB","GBR","UNITED KINGDOM" -"3567623768","3567623775","PK","PAK","PAKISTAN" -"3567623776","3567623791","GB","GBR","UNITED KINGDOM" -"3567623792","3567623839","PK","PAK","PAKISTAN" -"3567623840","3567623935","GB","GBR","UNITED KINGDOM" -"3567623936","3567624191","PK","PAK","PAKISTAN" -"3567624192","3567624447","GB","GBR","UNITED KINGDOM" -"3567624448","3567625727","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"3567625728","3567625983","CG","COG","CONGO" -"3567625984","3567626239","KE","KEN","KENYA" -"3567626240","3567627008","NG","NGA","NIGERIA" -"3567627009","3567629311","GB","GBR","UNITED KINGDOM" -"3567629312","3567630207","TJ","TJK","TAJIKISTAN" -"3567630208","3567648767","GB","GBR","UNITED KINGDOM" -"3567648768","3567665151","BE","BEL","BELGIUM" -"3567665152","3567673343","ES","ESP","SPAIN" -"3567673344","3567673647","AT","AUT","AUSTRIA" -"3567673648","3567673655","GI","GIB","GIBRALTAR" -"3567673656","3567681535","AT","AUT","AUSTRIA" -"3567681536","3567714303","ES","ESP","SPAIN" -"3567714304","3567715327","GB","GBR","UNITED KINGDOM" -"3567715584","3567715839","GB","GBR","UNITED KINGDOM" -"3567716352","3567716383","GB","GBR","UNITED KINGDOM" -"3567716608","3567716639","IL","ISR","ISRAEL" -"3567716944","3567717119","GB","GBR","UNITED KINGDOM" -"3567717120","3567717375","DE","DEU","GERMANY" -"3567717376","3567717631","GB","GBR","UNITED KINGDOM" -"3567717632","3567717679","DE","DEU","GERMANY" -"3567717760","3567717887","DE","DEU","GERMANY" -"3567717888","3567718015","GB","GBR","UNITED KINGDOM" -"3567718144","3567718399","CH","CHE","SWITZERLAND" -"3567718400","3567719423","US","USA","UNITED STATES" -"3567719424","3567719679","GB","GBR","UNITED KINGDOM" -"3567779840","3567845375","DE","DEU","GERMANY" -"3567845376","3567861759","GB","GBR","UNITED KINGDOM" -"3567861760","3567878143","NO","NOR","NORWAY" -"3567878144","3567976447","ES","ESP","SPAIN" -"3567976448","3568041983","IT","ITA","ITALY" -"3568041984","3568107519","DE","DEU","GERMANY" -"3568107520","3568153759","GB","GBR","UNITED KINGDOM" -"3568153760","3568153767","CH","CHE","SWITZERLAND" -"3568153768","3568173055","GB","GBR","UNITED KINGDOM" -"3568173056","3568304127","TR","TUR","TURKEY" -"3568304128","3568309775","RU","RUS","RUSSIAN FEDERATION" -"3568309776","3568309791","UZ","UZB","UZBEKISTAN" -"3568309792","3568309919","BY","BLR","BELARUS" -"3568309920","3568309951","RU","RUS","RUSSIAN FEDERATION" -"3568309952","3568310015","BY","BLR","BELARUS" -"3568310016","3568369663","RU","RUS","RUSSIAN FEDERATION" -"3568369664","3568435199","IT","ITA","ITALY" -"3568435200","3568443391","UA","UKR","UKRAINE" -"3568443392","3568476159","NL","NLD","NETHERLANDS" -"3568476160","3568484351","DK","DNK","DENMARK" -"3568484352","3568492543","NL","NLD","NETHERLANDS" -"3568492544","3568493055","RS","SRB","SERBIA" -"3568493056","3568493567","CS","SCG","SERBIA AND MONTENEGRO" -"3568493568","3568494591","RS","SRB","SERBIA" -"3568494592","3568496639","CS","SCG","SERBIA AND MONTENEGRO" -"3568496640","3568498687","RS","SRB","SERBIA" -"3568498688","3568498943","CS","SCG","SERBIA AND MONTENEGRO" -"3568498944","3568500735","RS","SRB","SERBIA" -"3568500736","3568566271","IL","ISR","ISRAEL" -"3568566272","3568599039","FR","FRA","FRANCE" -"3568599040","3568631807","PL","POL","POLAND" -"3568631808","3568697343","SE","SWE","SWEDEN" -"3568697344","3568730111","PL","POL","POLAND" -"3568730112","3568746495","NL","NLD","NETHERLANDS" -"3568746496","3568752895","FI","FIN","FINLAND" -"3568752896","3568752959","EE","EST","ESTONIA" -"3568752960","3568762879","FI","FIN","FINLAND" -"3568762880","3568795647","AT","AUT","AUSTRIA" -"3568795648","3568803839","GB","GBR","UNITED KINGDOM" -"3568803840","3568812031","IT","ITA","ITALY" -"3568812032","3568828415","ES","ESP","SPAIN" -"3568828416","3568829631","DE","DEU","GERMANY" -"3568829632","3568829639","CH","CHE","SWITZERLAND" -"3568829640","3568848791","DE","DEU","GERMANY" -"3568848792","3568848799","PL","POL","POLAND" -"3568848800","3568848871","DE","DEU","GERMANY" -"3568848872","3568848879","GB","GBR","UNITED KINGDOM" -"3568848880","3568876159","DE","DEU","GERMANY" -"3568876160","3568876287","ES","ESP","SPAIN" -"3568876288","3568916399","DE","DEU","GERMANY" -"3568916400","3568916407","IT","ITA","ITALY" -"3568916408","3568938311","DE","DEU","GERMANY" -"3568938312","3568938319","FI","FIN","FINLAND" -"3568938320","3568939519","DE","DEU","GERMANY" -"3568939520","3568939527","IT","ITA","ITALY" -"3568939528","3568959487","DE","DEU","GERMANY" -"3568959488","3569025023","AT","AUT","AUSTRIA" -"3569025024","3569057791","NL","NLD","NETHERLANDS" -"3569057792","3569068415","GB","GBR","UNITED KINGDOM" -"3569068416","3569068543","DE","DEU","GERMANY" -"3569068544","3569068671","BG","BGR","BULGARIA" -"3569068672","3569068951","GB","GBR","UNITED KINGDOM" -"3569068952","3569068991","DE","DEU","GERMANY" -"3569068992","3569075711","GB","GBR","UNITED KINGDOM" -"3569075712","3569075839","FR","FRA","FRANCE" -"3569075840","3569083903","GB","GBR","UNITED KINGDOM" -"3569083904","3569084159","US","USA","UNITED STATES" -"3569084160","3569090559","GB","GBR","UNITED KINGDOM" -"3569090560","3569123327","RU","RUS","RUSSIAN FEDERATION" -"3569123328","3569156095","GB","GBR","UNITED KINGDOM" -"3569156096","3569188863","NL","NLD","NETHERLANDS" -"3569188864","3569221631","IT","ITA","ITALY" -"3569221632","3569238399","BE","BEL","BELGIUM" -"3569238400","3569238527","AT","AUT","AUSTRIA" -"3569238528","3569239071","BE","BEL","BELGIUM" -"3569239072","3569239103","LU","LUX","LUXEMBOURG" -"3569239104","3569239231","BE","BEL","BELGIUM" -"3569239232","3569239263","LU","LUX","LUXEMBOURG" -"3569239264","3569239519","BE","BEL","BELGIUM" -"3569239520","3569239551","LU","LUX","LUXEMBOURG" -"3569239552","3569239983","BE","BEL","BELGIUM" -"3569239984","3569239999","BN","BRN","BRUNEI DARUSSALAM" -"3569240000","3569240031","BE","BEL","BELGIUM" -"3569240032","3569240063","FR","FRA","FRANCE" -"3569240064","3569241583","BE","BEL","BELGIUM" -"3569241584","3569241599","LU","LUX","LUXEMBOURG" -"3569241600","3569241887","BE","BEL","BELGIUM" -"3569241888","3569241903","LU","LUX","LUXEMBOURG" -"3569241904","3569242047","BE","BEL","BELGIUM" -"3569242048","3569242111","LU","LUX","LUXEMBOURG" -"3569242112","3569242551","BE","BEL","BELGIUM" -"3569242552","3569242559","LU","LUX","LUXEMBOURG" -"3569242560","3569242879","BE","BEL","BELGIUM" -"3569242880","3569243135","US","USA","UNITED STATES" -"3569243136","3569243903","BE","BEL","BELGIUM" -"3569243904","3569244031","NL","NLD","NETHERLANDS" -"3569244032","3569244303","BE","BEL","BELGIUM" -"3569244304","3569244319","LU","LUX","LUXEMBOURG" -"3569244320","3569245695","BE","BEL","BELGIUM" -"3569245696","3569245727","LU","LUX","LUXEMBOURG" -"3569245728","3569250879","BE","BEL","BELGIUM" -"3569250880","3569250895","LU","LUX","LUXEMBOURG" -"3569250896","3569251071","BE","BEL","BELGIUM" -"3569251072","3569251327","LU","LUX","LUXEMBOURG" -"3569251328","3569251839","US","USA","UNITED STATES" -"3569251840","3569252991","BE","BEL","BELGIUM" -"3569252992","3569253007","LU","LUX","LUXEMBOURG" -"3569253008","3569253095","BE","BEL","BELGIUM" -"3569253096","3569253103","LU","LUX","LUXEMBOURG" -"3569253104","3569254911","BE","BEL","BELGIUM" -"3569254912","3569254943","LU","LUX","LUXEMBOURG" -"3569254944","3569255007","BE","BEL","BELGIUM" -"3569255008","3569255055","LU","LUX","LUXEMBOURG" -"3569255056","3569255071","BE","BEL","BELGIUM" -"3569255072","3569255103","LU","LUX","LUXEMBOURG" -"3569255104","3569258815","BE","BEL","BELGIUM" -"3569258816","3569258847","US","USA","UNITED STATES" -"3569258848","3569258975","BE","BEL","BELGIUM" -"3569258976","3569259007","LU","LUX","LUXEMBOURG" -"3569259008","3569271815","BE","BEL","BELGIUM" -"3569271816","3569271823","LU","LUX","LUXEMBOURG" -"3569271824","3569271871","BE","BEL","BELGIUM" -"3569271872","3569271903","NL","NLD","NETHERLANDS" -"3569271904","3569271911","BE","BEL","BELGIUM" -"3569271912","3569271919","DE","DEU","GERMANY" -"3569271920","3569271935","BE","BEL","BELGIUM" -"3569271936","3569271943","IT","ITA","ITALY" -"3569271944","3569272063","BE","BEL","BELGIUM" -"3569272064","3569272079","LU","LUX","LUXEMBOURG" -"3569272080","3569272239","BE","BEL","BELGIUM" -"3569272240","3569272255","LU","LUX","LUXEMBOURG" -"3569272256","3569273167","BE","BEL","BELGIUM" -"3569273168","3569273183","LU","LUX","LUXEMBOURG" -"3569273184","3569273791","BE","BEL","BELGIUM" -"3569273792","3569273823","LU","LUX","LUXEMBOURG" -"3569273824","3569273935","BE","BEL","BELGIUM" -"3569273936","3569273951","LI","LIE","LIECHTENSTEIN" -"3569273952","3569274303","BE","BEL","BELGIUM" -"3569274304","3569274311","LU","LUX","LUXEMBOURG" -"3569274312","3569274335","BE","BEL","BELGIUM" -"3569274336","3569274383","LU","LUX","LUXEMBOURG" -"3569274384","3569274495","BE","BEL","BELGIUM" -"3569274496","3569274559","LU","LUX","LUXEMBOURG" -"3569274560","3569274687","BE","BEL","BELGIUM" -"3569274688","3569274719","LU","LUX","LUXEMBOURG" -"3569274720","3569277183","BE","BEL","BELGIUM" -"3569277184","3569277439","LU","LUX","LUXEMBOURG" -"3569277440","3569278703","BE","BEL","BELGIUM" -"3569278704","3569278719","NL","NLD","NETHERLANDS" -"3569278720","3569279223","BE","BEL","BELGIUM" -"3569279224","3569279231","US","USA","UNITED STATES" -"3569279232","3569279263","BE","BEL","BELGIUM" -"3569279264","3569279279","US","USA","UNITED STATES" -"3569279280","3569287167","BE","BEL","BELGIUM" -"3569287168","3569352703","PL","POL","POLAND" -"3569352704","3569483775","RU","RUS","RUSSIAN FEDERATION" -"3569483776","3569614847","FR","FRA","FRANCE" -"3569614848","3569680383","GB","GBR","UNITED KINGDOM" -"3569680384","3569683711","SK","SVK","SLOVAKIA" -"3569683712","3569683719","IQ","IRQ","IRAQ" -"3569683720","3569710959","SK","SVK","SLOVAKIA" -"3569710960","3569710975","NL","NLD","NETHERLANDS" -"3569710976","3569713151","SK","SVK","SLOVAKIA" -"3569713152","3569729535","AT","AUT","AUSTRIA" -"3569729536","3569731167","FR","FRA","FRANCE" -"3569731168","3569731183","IT","ITA","ITALY" -"3569731184","3569731215","GB","GBR","UNITED KINGDOM" -"3569731216","3569731231","FR","FRA","FRANCE" -"3569731232","3569731247","DE","DEU","GERMANY" -"3569731248","3569731263","GB","GBR","UNITED KINGDOM" -"3569731264","3569731311","FR","FRA","FRANCE" -"3569731312","3569731327","GB","GBR","UNITED KINGDOM" -"3569731328","3569731375","FR","FRA","FRANCE" -"3569731376","3569731391","GB","GBR","UNITED KINGDOM" -"3569731392","3569731423","FR","FRA","FRANCE" -"3569731424","3569731439","GB","GBR","UNITED KINGDOM" -"3569731440","3569731455","FR","FRA","FRANCE" -"3569731456","3569731471","GB","GBR","UNITED KINGDOM" -"3569731472","3569731487","FR","FRA","FRANCE" -"3569731488","3569731503","GB","GBR","UNITED KINGDOM" -"3569731504","3569731519","IT","ITA","ITALY" -"3569731520","3569731551","GB","GBR","UNITED KINGDOM" -"3569731552","3569731583","FR","FRA","FRANCE" -"3569731584","3569731599","GB","GBR","UNITED KINGDOM" -"3569731600","3569731615","FR","FRA","FRANCE" -"3569731616","3569731631","DE","DEU","GERMANY" -"3569731632","3569731647","IT","ITA","ITALY" -"3569731648","3569731727","FR","FRA","FRANCE" -"3569731728","3569731743","GB","GBR","UNITED KINGDOM" -"3569731744","3569731791","FR","FRA","FRANCE" -"3569731792","3569731807","GB","GBR","UNITED KINGDOM" -"3569731808","3569731839","FR","FRA","FRANCE" -"3569731840","3569731871","GB","GBR","UNITED KINGDOM" -"3569731872","3569731903","FR","FRA","FRANCE" -"3569731904","3569731919","BE","BEL","BELGIUM" -"3569731920","3569731951","FR","FRA","FRANCE" -"3569731952","3569731967","NL","NLD","NETHERLANDS" -"3569731968","3569731983","GB","GBR","UNITED KINGDOM" -"3569731984","3569732031","FR","FRA","FRANCE" -"3569732032","3569732047","DE","DEU","GERMANY" -"3569732048","3569732063","GB","GBR","UNITED KINGDOM" -"3569732064","3569732079","FR","FRA","FRANCE" -"3569732080","3569732095","GB","GBR","UNITED KINGDOM" -"3569732096","3569732143","FR","FRA","FRANCE" -"3569732144","3569732191","GB","GBR","UNITED KINGDOM" -"3569732192","3569732207","DE","DEU","GERMANY" -"3569732208","3569732287","FR","FRA","FRANCE" -"3569732288","3569732303","GB","GBR","UNITED KINGDOM" -"3569732304","3569732319","DE","DEU","GERMANY" -"3569732320","3569732335","FR","FRA","FRANCE" -"3569732336","3569732351","GB","GBR","UNITED KINGDOM" -"3569732352","3569732383","FR","FRA","FRANCE" -"3569732384","3569732399","US","USA","UNITED STATES" -"3569732400","3569732447","FR","FRA","FRANCE" -"3569732448","3569732479","US","USA","UNITED STATES" -"3569732480","3569732495","GB","GBR","UNITED KINGDOM" -"3569732496","3569732543","FR","FRA","FRANCE" -"3569732544","3569732575","GB","GBR","UNITED KINGDOM" -"3569732576","3569732607","FR","FRA","FRANCE" -"3569732608","3569732639","GB","GBR","UNITED KINGDOM" -"3569732640","3569732671","FR","FRA","FRANCE" -"3569732672","3569732703","GB","GBR","UNITED KINGDOM" -"3569732704","3569732719","FR","FRA","FRANCE" -"3569732720","3569732735","GB","GBR","UNITED KINGDOM" -"3569732736","3569732751","FR","FRA","FRANCE" -"3569732752","3569732767","GB","GBR","UNITED KINGDOM" -"3569732768","3569732783","FR","FRA","FRANCE" -"3569732784","3569732847","GB","GBR","UNITED KINGDOM" -"3569732848","3569732863","FR","FRA","FRANCE" -"3569732864","3569732879","GB","GBR","UNITED KINGDOM" -"3569732880","3569732895","FR","FRA","FRANCE" -"3569732896","3569732911","IT","ITA","ITALY" -"3569732912","3569733007","FR","FRA","FRANCE" -"3569733008","3569733023","IE","IRL","IRELAND" -"3569733024","3569733055","FR","FRA","FRANCE" -"3569733056","3569733087","GB","GBR","UNITED KINGDOM" -"3569733088","3569733103","IT","ITA","ITALY" -"3569733104","3569733183","FR","FRA","FRANCE" -"3569733184","3569733199","GB","GBR","UNITED KINGDOM" -"3569733200","3569733263","FR","FRA","FRANCE" -"3569733264","3569733279","US","USA","UNITED STATES" -"3569733280","3569733295","DE","DEU","GERMANY" -"3569733296","3569733311","GB","GBR","UNITED KINGDOM" -"3569733312","3569733327","FR","FRA","FRANCE" -"3569733328","3569733343","GB","GBR","UNITED KINGDOM" -"3569733344","3569733423","FR","FRA","FRANCE" -"3569733424","3569733439","GB","GBR","UNITED KINGDOM" -"3569733440","3569733471","FR","FRA","FRANCE" -"3569733472","3569733487","GB","GBR","UNITED KINGDOM" -"3569733488","3569733519","FR","FRA","FRANCE" -"3569733520","3569733535","GB","GBR","UNITED KINGDOM" -"3569733536","3569733551","NL","NLD","NETHERLANDS" -"3569733552","3569733567","FR","FRA","FRANCE" -"3569733568","3569733583","GB","GBR","UNITED KINGDOM" -"3569733584","3569733599","FR","FRA","FRANCE" -"3569733600","3569733615","GB","GBR","UNITED KINGDOM" -"3569733616","3569733647","FR","FRA","FRANCE" -"3569733648","3569733663","GB","GBR","UNITED KINGDOM" -"3569733664","3569733679","FR","FRA","FRANCE" -"3569733680","3569733695","GB","GBR","UNITED KINGDOM" -"3569733696","3569733775","FR","FRA","FRANCE" -"3569733776","3569733791","IE","IRL","IRELAND" -"3569733792","3569733807","FR","FRA","FRANCE" -"3569733808","3569733823","GB","GBR","UNITED KINGDOM" -"3569733824","3569733887","FR","FRA","FRANCE" -"3569733888","3569733919","GB","GBR","UNITED KINGDOM" -"3569733920","3569733935","FR","FRA","FRANCE" -"3569733936","3569733951","GB","GBR","UNITED KINGDOM" -"3569733952","3569733967","FR","FRA","FRANCE" -"3569733968","3569733983","ES","ESP","SPAIN" -"3569733984","3569733999","GB","GBR","UNITED KINGDOM" -"3569734000","3569734047","FR","FRA","FRANCE" -"3569734048","3569734079","GB","GBR","UNITED KINGDOM" -"3569734080","3569734143","FR","FRA","FRANCE" -"3569734144","3569734159","GB","GBR","UNITED KINGDOM" -"3569734160","3569734191","FR","FRA","FRANCE" -"3569734192","3569734207","GB","GBR","UNITED KINGDOM" -"3569734208","3569734367","FR","FRA","FRANCE" -"3569734368","3569734399","GB","GBR","UNITED KINGDOM" -"3569734400","3569734447","BE","BEL","BELGIUM" -"3569734448","3569734463","FR","FRA","FRANCE" -"3569734464","3569734511","BE","BEL","BELGIUM" -"3569734512","3569736047","FR","FRA","FRANCE" -"3569736048","3569736063","GB","GBR","UNITED KINGDOM" -"3569736064","3569736071","FR","FRA","FRANCE" -"3569736072","3569736079","ES","ESP","SPAIN" -"3569736080","3569736191","FR","FRA","FRANCE" -"3569736192","3569736223","NL","NLD","NETHERLANDS" -"3569736224","3569736239","FR","FRA","FRANCE" -"3569736240","3569736383","NL","NLD","NETHERLANDS" -"3569736384","3569736399","SE","SWE","SWEDEN" -"3569736400","3569736655","NL","NLD","NETHERLANDS" -"3569736656","3569736671","FR","FRA","FRANCE" -"3569736672","3569736703","NL","NLD","NETHERLANDS" -"3569736704","3569739263","FR","FRA","FRANCE" -"3569739264","3569739295","NL","NLD","NETHERLANDS" -"3569739296","3569739327","FR","FRA","FRANCE" -"3569739328","3569739471","NL","NLD","NETHERLANDS" -"3569739472","3569739487","FR","FRA","FRANCE" -"3569739488","3569739599","NL","NLD","NETHERLANDS" -"3569739600","3569739631","FR","FRA","FRANCE" -"3569739632","3569739647","NL","NLD","NETHERLANDS" -"3569739648","3569739663","FR","FRA","FRANCE" -"3569739664","3569739679","NL","NLD","NETHERLANDS" -"3569739680","3569739695","FR","FRA","FRANCE" -"3569739696","3569739839","NL","NLD","NETHERLANDS" -"3569739840","3569739855","FR","FRA","FRANCE" -"3569739856","3569739903","NL","NLD","NETHERLANDS" -"3569739904","3569739919","FR","FRA","FRANCE" -"3569739920","3569739935","NL","NLD","NETHERLANDS" -"3569739936","3569739951","FR","FRA","FRANCE" -"3569739952","3569740047","NL","NLD","NETHERLANDS" -"3569740048","3569740063","FR","FRA","FRANCE" -"3569740064","3569740111","NL","NLD","NETHERLANDS" -"3569740112","3569740127","FR","FRA","FRANCE" -"3569740128","3569740255","NL","NLD","NETHERLANDS" -"3569740256","3569740271","FR","FRA","FRANCE" -"3569740272","3569740303","NL","NLD","NETHERLANDS" -"3569740304","3569740319","FR","FRA","FRANCE" -"3569740320","3569740367","NL","NLD","NETHERLANDS" -"3569740368","3569740383","FR","FRA","FRANCE" -"3569740384","3569740415","NL","NLD","NETHERLANDS" -"3569740416","3569740431","FR","FRA","FRANCE" -"3569740432","3569740463","NL","NLD","NETHERLANDS" -"3569740464","3569740479","FR","FRA","FRANCE" -"3569740480","3569740495","NL","NLD","NETHERLANDS" -"3569740496","3569740511","FR","FRA","FRANCE" -"3569740512","3569740543","NL","NLD","NETHERLANDS" -"3569740544","3569740559","FR","FRA","FRANCE" -"3569740560","3569740655","NL","NLD","NETHERLANDS" -"3569740656","3569740671","FR","FRA","FRANCE" -"3569740672","3569740687","NL","NLD","NETHERLANDS" -"3569740688","3569740703","FR","FRA","FRANCE" -"3569740704","3569740799","NL","NLD","NETHERLANDS" -"3569740800","3569741311","FR","FRA","FRANCE" -"3569741312","3569741823","BE","BEL","BELGIUM" -"3569741824","3569742335","FR","FRA","FRANCE" -"3569742336","3569742351","BE","BEL","BELGIUM" -"3569742352","3569742383","FR","FRA","FRANCE" -"3569742384","3569742399","BE","BEL","BELGIUM" -"3569742400","3569742415","FR","FRA","FRANCE" -"3569742416","3569742511","BE","BEL","BELGIUM" -"3569742512","3569742527","FR","FRA","FRANCE" -"3569742528","3569742623","BE","BEL","BELGIUM" -"3569742624","3569742639","FR","FRA","FRANCE" -"3569742640","3569742671","BE","BEL","BELGIUM" -"3569742672","3569742687","FR","FRA","FRANCE" -"3569742688","3569742735","BE","BEL","BELGIUM" -"3569742736","3569742751","FR","FRA","FRANCE" -"3569742752","3569742767","BE","BEL","BELGIUM" -"3569742768","3569742783","FR","FRA","FRANCE" -"3569742784","3569742927","BE","BEL","BELGIUM" -"3569742928","3569742943","FR","FRA","FRANCE" -"3569742944","3569743087","BE","BEL","BELGIUM" -"3569743088","3569743103","FR","FRA","FRANCE" -"3569743104","3569743135","BE","BEL","BELGIUM" -"3569743136","3569743199","FR","FRA","FRANCE" -"3569743200","3569743215","BE","BEL","BELGIUM" -"3569743216","3569743359","FR","FRA","FRANCE" -"3569743360","3569743391","BE","BEL","BELGIUM" -"3569743392","3569743407","FR","FRA","FRANCE" -"3569743408","3569743423","BE","BEL","BELGIUM" -"3569743424","3569743455","FR","FRA","FRANCE" -"3569743456","3569743583","BE","BEL","BELGIUM" -"3569743584","3569743599","NL","NLD","NETHERLANDS" -"3569743600","3569743615","FR","FRA","FRANCE" -"3569743616","3569743631","BE","BEL","BELGIUM" -"3569743632","3569743647","FR","FRA","FRANCE" -"3569743648","3569743679","BE","BEL","BELGIUM" -"3569743680","3569743711","FR","FRA","FRANCE" -"3569743712","3569743775","BE","BEL","BELGIUM" -"3569743776","3569743791","FR","FRA","FRANCE" -"3569743792","3569743871","BE","BEL","BELGIUM" -"3569743872","3569743983","NL","NLD","NETHERLANDS" -"3569743984","3569743999","FR","FRA","FRANCE" -"3569744000","3569744047","NL","NLD","NETHERLANDS" -"3569744048","3569744063","FR","FRA","FRANCE" -"3569744064","3569744127","NL","NLD","NETHERLANDS" -"3569744128","3569744143","FR","FRA","FRANCE" -"3569744144","3569744543","NL","NLD","NETHERLANDS" -"3569744544","3569744559","FR","FRA","FRANCE" -"3569744560","3569744575","NL","NLD","NETHERLANDS" -"3569744576","3569744623","FR","FRA","FRANCE" -"3569744624","3569744815","NL","NLD","NETHERLANDS" -"3569744816","3569744831","FR","FRA","FRANCE" -"3569744832","3569744911","NL","NLD","NETHERLANDS" -"3569744912","3569744927","FR","FRA","FRANCE" -"3569744928","3569744975","NL","NLD","NETHERLANDS" -"3569744976","3569744991","FR","FRA","FRANCE" -"3569744992","3569745007","NL","NLD","NETHERLANDS" -"3569745008","3569745023","FR","FRA","FRANCE" -"3569745024","3569745039","NL","NLD","NETHERLANDS" -"3569745040","3569745055","FR","FRA","FRANCE" -"3569745056","3569745103","NL","NLD","NETHERLANDS" -"3569745104","3569745119","FR","FRA","FRANCE" -"3569745120","3569745167","NL","NLD","NETHERLANDS" -"3569745168","3569745183","FR","FRA","FRANCE" -"3569745184","3569745215","NL","NLD","NETHERLANDS" -"3569745216","3569745231","FR","FRA","FRANCE" -"3569745232","3569745247","NL","NLD","NETHERLANDS" -"3569745248","3569745279","FR","FRA","FRANCE" -"3569745280","3569745311","NL","NLD","NETHERLANDS" -"3569745312","3569745327","FR","FRA","FRANCE" -"3569745328","3569745359","NL","NLD","NETHERLANDS" -"3569745360","3569745375","FR","FRA","FRANCE" -"3569745376","3569745407","NL","NLD","NETHERLANDS" -"3569745408","3569745663","FR","FRA","FRANCE" -"3569745664","3569745727","NL","NLD","NETHERLANDS" -"3569745728","3569745743","FR","FRA","FRANCE" -"3569745744","3569745813","NL","NLD","NETHERLANDS" -"3569745814","3569745823","FR","FRA","FRANCE" -"3569745824","3569745839","NL","NLD","NETHERLANDS" -"3569745840","3569745871","FR","FRA","FRANCE" -"3569745872","3569745887","NL","NLD","NETHERLANDS" -"3569745888","3569745903","FR","FRA","FRANCE" -"3569745904","3569745919","NL","NLD","NETHERLANDS" -"3569745920","3569811455","FR","FRA","FRANCE" -"3569811456","3569830463","IL","ISR","ISRAEL" -"3569830464","3569830527","GB","GBR","UNITED KINGDOM" -"3569830528","3569876991","IL","ISR","ISRAEL" -"3569876992","3569877247","CS","SCG","SERBIA AND MONTENEGRO" -"3569877248","3569877759","RS","SRB","SERBIA" -"3569877760","3569879295","CS","SCG","SERBIA AND MONTENEGRO" -"3569879296","3569879551","RS","SRB","SERBIA" -"3569879552","3569885183","CS","SCG","SERBIA AND MONTENEGRO" -"3569885184","3569885439","CS","SCG","SERBIA AND MONTENEGRO" -"3569885440","3569885951","RS","SRB","SERBIA" -"3569885952","3569889791","CS","SCG","SERBIA AND MONTENEGRO" -"3569889792","3569890047","RS","SRB","SERBIA" -"3569890048","3569890575","CS","SCG","SERBIA AND MONTENEGRO" -"3569890576","3569890591","RS","SRB","SERBIA" -"3569890592","3569890615","CS","SCG","SERBIA AND MONTENEGRO" -"3569890616","3569890623","RS","SRB","SERBIA" -"3569890624","3569890751","CS","SCG","SERBIA AND MONTENEGRO" -"3569890752","3569890815","RS","SRB","SERBIA" -"3569890816","3569891071","CS","SCG","SERBIA AND MONTENEGRO" -"3569891072","3569891327","RS","SRB","SERBIA" -"3569891328","3569891583","CS","SCG","SERBIA AND MONTENEGRO" -"3569891584","3569891839","RS","SRB","SERBIA" -"3569891840","3569892351","CS","SCG","SERBIA AND MONTENEGRO" -"3569892352","3569892607","RS","SRB","SERBIA" -"3569892608","3569892863","CS","SCG","SERBIA AND MONTENEGRO" -"3569892864","3569893375","RS","SRB","SERBIA" -"3569893376","3569893887","CS","SCG","SERBIA AND MONTENEGRO" -"3569893888","3569894143","RS","SRB","SERBIA" -"3569894144","3569894527","CS","SCG","SERBIA AND MONTENEGRO" -"3569894528","3569894559","RS","SRB","SERBIA" -"3569894560","3569895943","CS","SCG","SERBIA AND MONTENEGRO" -"3569895944","3569895951","RS","SRB","SERBIA" -"3569895952","3569896047","CS","SCG","SERBIA AND MONTENEGRO" -"3569896048","3569896063","RS","SRB","SERBIA" -"3569896064","3569896083","CS","SCG","SERBIA AND MONTENEGRO" -"3569896084","3569896095","RS","SRB","SERBIA" -"3569896096","3569896103","CS","SCG","SERBIA AND MONTENEGRO" -"3569896104","3569896111","RS","SRB","SERBIA" -"3569896112","3569896143","CS","SCG","SERBIA AND MONTENEGRO" -"3569896144","3569896155","RS","SRB","SERBIA" -"3569896156","3569896447","CS","SCG","SERBIA AND MONTENEGRO" -"3569896448","3569896703","CS","SCG","SERBIA AND MONTENEGRO" -"3569896704","3569898495","CS","SCG","SERBIA AND MONTENEGRO" -"3569898496","3569899007","RS","SRB","SERBIA" -"3569899008","3569899775","CS","SCG","SERBIA AND MONTENEGRO" -"3569899776","3569900031","RS","SRB","SERBIA" -"3569900032","3569902847","CS","SCG","SERBIA AND MONTENEGRO" -"3569902848","3569903359","RS","SRB","SERBIA" -"3569903360","3569903999","CS","SCG","SERBIA AND MONTENEGRO" -"3569904000","3569904127","RS","SRB","SERBIA" -"3569904128","3569905471","CS","SCG","SERBIA AND MONTENEGRO" -"3569905472","3569905503","RS","SRB","SERBIA" -"3569905504","3569905535","CS","SCG","SERBIA AND MONTENEGRO" -"3569905536","3569905543","RS","SRB","SERBIA" -"3569905544","3569905583","CS","SCG","SERBIA AND MONTENEGRO" -"3569905584","3569906047","RS","SRB","SERBIA" -"3569906048","3569907711","CS","SCG","SERBIA AND MONTENEGRO" -"3569907712","3569907719","RS","SRB","SERBIA" -"3569907720","3569907723","CS","SCG","SERBIA AND MONTENEGRO" -"3569907724","3569907731","RS","SRB","SERBIA" -"3569907732","3569907787","CS","SCG","SERBIA AND MONTENEGRO" -"3569907788","3569907807","RS","SRB","SERBIA" -"3569907808","3569907839","CS","SCG","SERBIA AND MONTENEGRO" -"3569907840","3569907855","RS","SRB","SERBIA" -"3569907856","3569907911","CS","SCG","SERBIA AND MONTENEGRO" -"3569907912","3569907927","RS","SRB","SERBIA" -"3569907928","3569907975","CS","SCG","SERBIA AND MONTENEGRO" -"3569907976","3569907983","RS","SRB","SERBIA" -"3569907984","3569908015","CS","SCG","SERBIA AND MONTENEGRO" -"3569908016","3569908031","RS","SRB","SERBIA" -"3569908032","3569908159","CS","SCG","SERBIA AND MONTENEGRO" -"3569908160","3569908191","RS","SRB","SERBIA" -"3569908192","3569910063","CS","SCG","SERBIA AND MONTENEGRO" -"3569910064","3569910079","RS","SRB","SERBIA" -"3569910080","3569911039","CS","SCG","SERBIA AND MONTENEGRO" -"3569911040","3569911295","RS","SRB","SERBIA" -"3569911296","3569912623","CS","SCG","SERBIA AND MONTENEGRO" -"3569912624","3569912627","RS","SRB","SERBIA" -"3569912628","3569912751","CS","SCG","SERBIA AND MONTENEGRO" -"3569912752","3569912831","RS","SRB","SERBIA" -"3569912832","3569913599","CS","SCG","SERBIA AND MONTENEGRO" -"3569913600","3569913607","RS","SRB","SERBIA" -"3569913608","3569913655","CS","SCG","SERBIA AND MONTENEGRO" -"3569913656","3569913663","RS","SRB","SERBIA" -"3569913664","3569913703","CS","SCG","SERBIA AND MONTENEGRO" -"3569913704","3569913719","RS","SRB","SERBIA" -"3569913720","3569914007","CS","SCG","SERBIA AND MONTENEGRO" -"3569914008","3569914047","RS","SRB","SERBIA" -"3569914048","3569914175","CS","SCG","SERBIA AND MONTENEGRO" -"3569914176","3569914239","RS","SRB","SERBIA" -"3569914240","3569914351","CS","SCG","SERBIA AND MONTENEGRO" -"3569914352","3569914495","RS","SRB","SERBIA" -"3569914496","3569914623","CS","SCG","SERBIA AND MONTENEGRO" -"3569914624","3569915391","RS","SRB","SERBIA" -"3569915392","3569915831","CS","SCG","SERBIA AND MONTENEGRO" -"3569915832","3569915839","RS","SRB","SERBIA" -"3569915840","3569915903","CS","SCG","SERBIA AND MONTENEGRO" -"3569915904","3569916159","RS","SRB","SERBIA" -"3569916160","3569916295","CS","SCG","SERBIA AND MONTENEGRO" -"3569916296","3569916303","RS","SRB","SERBIA" -"3569916304","3569916319","CS","SCG","SERBIA AND MONTENEGRO" -"3569916320","3569916327","RS","SRB","SERBIA" -"3569916328","3569916331","CS","SCG","SERBIA AND MONTENEGRO" -"3569916332","3569916335","RS","SRB","SERBIA" -"3569916336","3569916359","CS","SCG","SERBIA AND MONTENEGRO" -"3569916360","3569916383","RS","SRB","SERBIA" -"3569916384","3569916671","CS","SCG","SERBIA AND MONTENEGRO" -"3569916672","3569916735","RS","SRB","SERBIA" -"3569916736","3569916799","CS","SCG","SERBIA AND MONTENEGRO" -"3569916800","3569916927","RS","SRB","SERBIA" -"3569916928","3569918463","CS","SCG","SERBIA AND MONTENEGRO" -"3569918464","3569918719","RS","SRB","SERBIA" -"3569918720","3569918847","CS","SCG","SERBIA AND MONTENEGRO" -"3569918848","3569918855","RS","SRB","SERBIA" -"3569918856","3569918863","CS","SCG","SERBIA AND MONTENEGRO" -"3569918864","3569918951","RS","SRB","SERBIA" -"3569918952","3569918975","CS","SCG","SERBIA AND MONTENEGRO" -"3569918976","3569919487","RS","SRB","SERBIA" -"3569919488","3569921023","CS","SCG","SERBIA AND MONTENEGRO" -"3569921024","3569921535","RS","SRB","SERBIA" -"3569921536","3569922047","CS","SCG","SERBIA AND MONTENEGRO" -"3569922048","3569925119","RS","SRB","SERBIA" -"3569925120","3569934335","CS","SCG","SERBIA AND MONTENEGRO" -"3569934336","3569934847","RS","SRB","SERBIA" -"3569934848","3569942527","CS","SCG","SERBIA AND MONTENEGRO" -"3569942528","3570073599","DE","DEU","GERMANY" -"3570073600","3570076943","NL","NLD","NETHERLANDS" -"3570076944","3570076951","PH","PHL","PHILIPPINES" -"3570076952","3570081791","NL","NLD","NETHERLANDS" -"3570081792","3570106367","CH","CHE","SWITZERLAND" -"3570106368","3570139135","PL","POL","POLAND" -"3570139136","3570170079","DE","DEU","GERMANY" -"3570170080","3570170111","BE","BEL","BELGIUM" -"3570170112","3570171903","DE","DEU","GERMANY" -"3570171904","3570204671","NL","NLD","NETHERLANDS" -"3570204672","3570215679","GR","GRC","GREECE" -"3570215680","3570215807","DE","DEU","GERMANY" -"3570215808","3570223103","GR","GRC","GREECE" -"3570223104","3570223231","DE","DEU","GERMANY" -"3570223232","3570236927","GR","GRC","GREECE" -"3570236928","3570237183","DE","DEU","GERMANY" -"3570237184","3570241791","GR","GRC","GREECE" -"3570241792","3570242047","DE","DEU","GERMANY" -"3570242048","3570270207","GR","GRC","GREECE" -"3570270208","3570335743","NL","NLD","NETHERLANDS" -"3570335744","3570401279","GB","GBR","UNITED KINGDOM" -"3570401280","3570442687","FR","FRA","FRANCE" -"3570442688","3570442695","IT","ITA","ITALY" -"3570442696","3570466815","FR","FRA","FRANCE" -"3570466816","3570507439","SE","SWE","SWEDEN" -"3570507440","3570507455","CH","CHE","SWITZERLAND" -"3570507456","3570532351","SE","SWE","SWEDEN" -"3570532352","3570597887","IT","ITA","ITALY" -"3570597888","3570607103","GB","GBR","UNITED KINGDOM" -"3570607104","3570608127","DE","DEU","GERMANY" -"3570608128","3570611199","GB","GBR","UNITED KINGDOM" -"3570611200","3570611455","FR","FRA","FRANCE" -"3570611456","3570614271","GB","GBR","UNITED KINGDOM" -"3570614272","3570617343","DE","DEU","GERMANY" -"3570617344","3570617855","GB","GBR","UNITED KINGDOM" -"3570617856","3570622463","DE","DEU","GERMANY" -"3570622464","3570630655","GB","GBR","UNITED KINGDOM" -"3570630656","3570633343","DE","DEU","GERMANY" -"3570633344","3570633471","CH","CHE","SWITZERLAND" -"3570633472","3570663423","DE","DEU","GERMANY" -"3570663424","3570728959","GB","GBR","UNITED KINGDOM" -"3570728960","3570729983","FI","FIN","FINLAND" -"3570729984","3570731007","SE","SWE","SWEDEN" -"3570731008","3570756191","FI","FIN","FINLAND" -"3570756192","3570756223","RU","RUS","RUSSIAN FEDERATION" -"3570756224","3570760543","FI","FIN","FINLAND" -"3570760544","3570760575","RU","RUS","RUSSIAN FEDERATION" -"3570760576","3570794495","FI","FIN","FINLAND" -"3570794496","3570860031","SE","SWE","SWEDEN" -"3570860032","3570892799","CH","CHE","SWITZERLAND" -"3570892800","3570925567","SA","SAU","SAUDI ARABIA" -"3570925568","3570991103","IT","ITA","ITALY" -"3571023872","3571056639","SE","SWE","SWEDEN" -"3571056640","3571122175","DE","DEU","GERMANY" -"3571122176","3571187711","GB","GBR","UNITED KINGDOM" -"3571187712","3571253247","RU","RUS","RUSSIAN FEDERATION" -"3571253248","3571259551","BE","BEL","BELGIUM" -"3571259552","3571259583","LU","LUX","LUXEMBOURG" -"3571259584","3571261359","BE","BEL","BELGIUM" -"3571261360","3571261367","LU","LUX","LUXEMBOURG" -"3571261368","3571262335","BE","BEL","BELGIUM" -"3571262336","3571262367","LU","LUX","LUXEMBOURG" -"3571262368","3571264607","BE","BEL","BELGIUM" -"3571264608","3571264639","FR","FRA","FRANCE" -"3571264640","3571265935","BE","BEL","BELGIUM" -"3571265936","3571265951","LU","LUX","LUXEMBOURG" -"3571265952","3571267199","BE","BEL","BELGIUM" -"3571267200","3571267263","LU","LUX","LUXEMBOURG" -"3571267264","3571268607","BE","BEL","BELGIUM" -"3571268608","3571268639","LU","LUX","LUXEMBOURG" -"3571268640","3571269823","BE","BEL","BELGIUM" -"3571269824","3571269855","LU","LUX","LUXEMBOURG" -"3571269856","3571271423","BE","BEL","BELGIUM" -"3571271424","3571271439","LU","LUX","LUXEMBOURG" -"3571271440","3571271551","BE","BEL","BELGIUM" -"3571271552","3571271679","LU","LUX","LUXEMBOURG" -"3571271680","3571272447","BE","BEL","BELGIUM" -"3571272448","3571272575","LU","LUX","LUXEMBOURG" -"3571272576","3571277119","BE","BEL","BELGIUM" -"3571277120","3571277151","DE","DEU","GERMANY" -"3571277152","3571286015","BE","BEL","BELGIUM" -"3571286016","3571318911","DE","DEU","GERMANY" -"3571318912","3571319167","GB","GBR","UNITED KINGDOM" -"3571319168","3571319295","DE","DEU","GERMANY" -"3571319296","3571319679","GB","GBR","UNITED KINGDOM" -"3571319680","3571319935","DE","DEU","GERMANY" -"3571319936","3571320063","GB","GBR","UNITED KINGDOM" -"3571320064","3571320575","DE","DEU","GERMANY" -"3571320576","3571320855","GB","GBR","UNITED KINGDOM" -"3571320856","3571320863","DE","DEU","GERMANY" -"3571320864","3571320927","GB","GBR","UNITED KINGDOM" -"3571320928","3571320991","DE","DEU","GERMANY" -"3571320992","3571321023","GB","GBR","UNITED KINGDOM" -"3571321024","3571321055","DE","DEU","GERMANY" -"3571321056","3571321151","GB","GBR","UNITED KINGDOM" -"3571321152","3571321247","DE","DEU","GERMANY" -"3571321248","3571321279","GB","GBR","UNITED KINGDOM" -"3571321280","3571321727","DE","DEU","GERMANY" -"3571321728","3571321791","GB","GBR","UNITED KINGDOM" -"3571321792","3571321855","DE","DEU","GERMANY" -"3571321856","3571321887","GB","GBR","UNITED KINGDOM" -"3571321888","3571321919","DE","DEU","GERMANY" -"3571321920","3571321983","GB","GBR","UNITED KINGDOM" -"3571321984","3571321999","DE","DEU","GERMANY" -"3571322000","3571322015","GB","GBR","UNITED KINGDOM" -"3571322016","3571322111","DE","DEU","GERMANY" -"3571322112","3571322559","GB","GBR","UNITED KINGDOM" -"3571322560","3571322591","DE","DEU","GERMANY" -"3571322592","3571322879","GB","GBR","UNITED KINGDOM" -"3571322880","3571323135","DE","DEU","GERMANY" -"3571323136","3571323391","GB","GBR","UNITED KINGDOM" -"3571323392","3571323455","DE","DEU","GERMANY" -"3571323456","3571323487","GB","GBR","UNITED KINGDOM" -"3571323488","3571323519","DE","DEU","GERMANY" -"3571323520","3571323711","GB","GBR","UNITED KINGDOM" -"3571323712","3571323743","DE","DEU","GERMANY" -"3571323744","3571323775","GB","GBR","UNITED KINGDOM" -"3571323776","3571323903","DE","DEU","GERMANY" -"3571323904","3571323935","GB","GBR","UNITED KINGDOM" -"3571323936","3571324031","DE","DEU","GERMANY" -"3571324032","3571324095","GB","GBR","UNITED KINGDOM" -"3571324096","3571324127","DE","DEU","GERMANY" -"3571324128","3571324415","GB","GBR","UNITED KINGDOM" -"3571324416","3571324527","DE","DEU","GERMANY" -"3571324528","3571324927","GB","GBR","UNITED KINGDOM" -"3571324928","3571324959","DE","DEU","GERMANY" -"3571324960","3571324991","GB","GBR","UNITED KINGDOM" -"3571324992","3571325023","DE","DEU","GERMANY" -"3571325024","3571325183","GB","GBR","UNITED KINGDOM" -"3571325184","3571325247","DE","DEU","GERMANY" -"3571325248","3571325407","GB","GBR","UNITED KINGDOM" -"3571325408","3571325439","DE","DEU","GERMANY" -"3571325440","3571325567","GB","GBR","UNITED KINGDOM" -"3571325568","3571325631","DE","DEU","GERMANY" -"3571325632","3571326207","GB","GBR","UNITED KINGDOM" -"3571326208","3571326255","DE","DEU","GERMANY" -"3571326256","3571326259","BE","BEL","BELGIUM" -"3571326260","3571326263","DE","DEU","GERMANY" -"3571326264","3571326463","GB","GBR","UNITED KINGDOM" -"3571326464","3571326591","DE","DEU","GERMANY" -"3571326592","3571326975","GB","GBR","UNITED KINGDOM" -"3571326976","3571327039","DE","DEU","GERMANY" -"3571327040","3571327135","GB","GBR","UNITED KINGDOM" -"3571327136","3571327167","DE","DEU","GERMANY" -"3571327168","3571327615","GB","GBR","UNITED KINGDOM" -"3571327616","3571327679","DE","DEU","GERMANY" -"3571327680","3571327711","GB","GBR","UNITED KINGDOM" -"3571327712","3571328063","DE","DEU","GERMANY" -"3571328064","3571328223","GB","GBR","UNITED KINGDOM" -"3571328224","3571328255","DE","DEU","GERMANY" -"3571328256","3571328447","GB","GBR","UNITED KINGDOM" -"3571328448","3571328543","DE","DEU","GERMANY" -"3571328544","3571328767","GB","GBR","UNITED KINGDOM" -"3571328768","3571328831","DE","DEU","GERMANY" -"3571328832","3571328863","GB","GBR","UNITED KINGDOM" -"3571328864","3571329119","DE","DEU","GERMANY" -"3571329120","3571329183","GB","GBR","UNITED KINGDOM" -"3571329184","3571329247","DE","DEU","GERMANY" -"3571329248","3571329439","GB","GBR","UNITED KINGDOM" -"3571329440","3571329455","DE","DEU","GERMANY" -"3571329456","3571329535","GB","GBR","UNITED KINGDOM" -"3571329536","3571329791","DE","DEU","GERMANY" -"3571329792","3571330047","GB","GBR","UNITED KINGDOM" -"3571330048","3571330079","DE","DEU","GERMANY" -"3571330080","3571330111","GB","GBR","UNITED KINGDOM" -"3571330112","3571330175","DE","DEU","GERMANY" -"3571330176","3571330239","GB","GBR","UNITED KINGDOM" -"3571330240","3571330271","DE","DEU","GERMANY" -"3571330272","3571330911","GB","GBR","UNITED KINGDOM" -"3571330912","3571331071","DE","DEU","GERMANY" -"3571331072","3571331455","GB","GBR","UNITED KINGDOM" -"3571331456","3571331519","DE","DEU","GERMANY" -"3571331520","3571331647","GB","GBR","UNITED KINGDOM" -"3571331648","3571331775","DE","DEU","GERMANY" -"3571331776","3571331807","GB","GBR","UNITED KINGDOM" -"3571331808","3571332415","DE","DEU","GERMANY" -"3571332416","3571332479","GB","GBR","UNITED KINGDOM" -"3571332480","3571332607","DE","DEU","GERMANY" -"3571332608","3571332735","GB","GBR","UNITED KINGDOM" -"3571332736","3571332751","DE","DEU","GERMANY" -"3571332752","3571332831","GB","GBR","UNITED KINGDOM" -"3571332832","3571333631","DE","DEU","GERMANY" -"3571333632","3571333759","GB","GBR","UNITED KINGDOM" -"3571333760","3571333791","DE","DEU","GERMANY" -"3571333792","3571333887","GB","GBR","UNITED KINGDOM" -"3571333888","3571333951","DE","DEU","GERMANY" -"3571333952","3571334079","GB","GBR","UNITED KINGDOM" -"3571334080","3571334111","DE","DEU","GERMANY" -"3571334112","3571334175","GB","GBR","UNITED KINGDOM" -"3571334176","3571334207","DE","DEU","GERMANY" -"3571334208","3571334303","GB","GBR","UNITED KINGDOM" -"3571334304","3571334335","DE","DEU","GERMANY" -"3571334336","3571334911","GB","GBR","UNITED KINGDOM" -"3571334912","3571334943","DE","DEU","GERMANY" -"3571334944","3571335103","GB","GBR","UNITED KINGDOM" -"3571335104","3571335455","DE","DEU","GERMANY" -"3571335456","3571335487","GB","GBR","UNITED KINGDOM" -"3571335488","3571335519","DE","DEU","GERMANY" -"3571335520","3571335583","GB","GBR","UNITED KINGDOM" -"3571335584","3571335647","DE","DEU","GERMANY" -"3571335648","3571335807","GB","GBR","UNITED KINGDOM" -"3571335808","3571335935","DE","DEU","GERMANY" -"3571335936","3571336063","GB","GBR","UNITED KINGDOM" -"3571336064","3571336191","DE","DEU","GERMANY" -"3571336192","3571336223","GB","GBR","UNITED KINGDOM" -"3571336224","3571336255","DE","DEU","GERMANY" -"3571336256","3571336319","GB","GBR","UNITED KINGDOM" -"3571336320","3571336447","DE","DEU","GERMANY" -"3571336448","3571336927","GB","GBR","UNITED KINGDOM" -"3571336928","3571336959","DE","DEU","GERMANY" -"3571336960","3571337215","GB","GBR","UNITED KINGDOM" -"3571337216","3571337279","DE","DEU","GERMANY" -"3571337280","3571337407","GB","GBR","UNITED KINGDOM" -"3571337408","3571337439","DE","DEU","GERMANY" -"3571337440","3571338367","GB","GBR","UNITED KINGDOM" -"3571338368","3571338751","DE","DEU","GERMANY" -"3571338752","3571338879","GB","GBR","UNITED KINGDOM" -"3571338880","3571338975","DE","DEU","GERMANY" -"3571338976","3571339135","GB","GBR","UNITED KINGDOM" -"3571339136","3571339199","DE","DEU","GERMANY" -"3571339200","3571339391","GB","GBR","UNITED KINGDOM" -"3571339392","3571339583","DE","DEU","GERMANY" -"3571339584","3571339903","GB","GBR","UNITED KINGDOM" -"3571339904","3571339967","DE","DEU","GERMANY" -"3571339968","3571340095","GB","GBR","UNITED KINGDOM" -"3571340096","3571340159","DE","DEU","GERMANY" -"3571340160","3571340383","GB","GBR","UNITED KINGDOM" -"3571340384","3571340447","DE","DEU","GERMANY" -"3571340448","3571340511","GB","GBR","UNITED KINGDOM" -"3571340512","3571340543","DE","DEU","GERMANY" -"3571340544","3571340799","GB","GBR","UNITED KINGDOM" -"3571340800","3571341375","DE","DEU","GERMANY" -"3571341376","3571341487","GB","GBR","UNITED KINGDOM" -"3571341488","3571341503","DE","DEU","GERMANY" -"3571341504","3571341567","GB","GBR","UNITED KINGDOM" -"3571341568","3571341823","DE","DEU","GERMANY" -"3571341824","3571342015","GB","GBR","UNITED KINGDOM" -"3571342016","3571342047","DE","DEU","GERMANY" -"3571342048","3571342079","GB","GBR","UNITED KINGDOM" -"3571342080","3571342591","DE","DEU","GERMANY" -"3571342592","3571342623","GB","GBR","UNITED KINGDOM" -"3571342624","3571342655","DE","DEU","GERMANY" -"3571342656","3571342719","GB","GBR","UNITED KINGDOM" -"3571342720","3571342751","DE","DEU","GERMANY" -"3571342752","3571343039","GB","GBR","UNITED KINGDOM" -"3571343040","3571343071","DE","DEU","GERMANY" -"3571343072","3571343103","GB","GBR","UNITED KINGDOM" -"3571343104","3571343359","DE","DEU","GERMANY" -"3571343360","3571343391","GB","GBR","UNITED KINGDOM" -"3571343392","3571343455","DE","DEU","GERMANY" -"3571343456","3571343487","GB","GBR","UNITED KINGDOM" -"3571343488","3571343495","DE","DEU","GERMANY" -"3571343496","3571343503","ES","ESP","SPAIN" -"3571343504","3571343515","DE","DEU","GERMANY" -"3571343516","3571343519","GB","GBR","UNITED KINGDOM" -"3571343520","3571343551","DE","DEU","GERMANY" -"3571343552","3571343615","GB","GBR","UNITED KINGDOM" -"3571343616","3571343871","DE","DEU","GERMANY" -"3571343872","3571344095","GB","GBR","UNITED KINGDOM" -"3571344096","3571344127","DE","DEU","GERMANY" -"3571344128","3571344191","GB","GBR","UNITED KINGDOM" -"3571344192","3571344255","DE","DEU","GERMANY" -"3571344256","3571345215","GB","GBR","UNITED KINGDOM" -"3571345216","3571346463","DE","DEU","GERMANY" -"3571346464","3571346495","GB","GBR","UNITED KINGDOM" -"3571346496","3571346559","DE","DEU","GERMANY" -"3571346560","3571346591","GB","GBR","UNITED KINGDOM" -"3571346592","3571346623","DE","DEU","GERMANY" -"3571346624","3571346831","GB","GBR","UNITED KINGDOM" -"3571346832","3571346847","DE","DEU","GERMANY" -"3571346848","3571346879","GB","GBR","UNITED KINGDOM" -"3571346880","3571346911","DE","DEU","GERMANY" -"3571346912","3571347071","GB","GBR","UNITED KINGDOM" -"3571347072","3571347191","DE","DEU","GERMANY" -"3571347192","3571347199","GB","GBR","UNITED KINGDOM" -"3571347200","3571347455","DE","DEU","GERMANY" -"3571347456","3571347711","BE","BEL","BELGIUM" -"3571347712","3571347967","GB","GBR","UNITED KINGDOM" -"3571347968","3571348223","DE","DEU","GERMANY" -"3571348224","3571348255","GB","GBR","UNITED KINGDOM" -"3571348256","3571348287","DE","DEU","GERMANY" -"3571348288","3571348383","GB","GBR","UNITED KINGDOM" -"3571348384","3571348399","DE","DEU","GERMANY" -"3571348400","3571348447","GB","GBR","UNITED KINGDOM" -"3571348448","3571348511","DE","DEU","GERMANY" -"3571348512","3571348543","GB","GBR","UNITED KINGDOM" -"3571348544","3571348735","DE","DEU","GERMANY" -"3571348736","3571348991","GB","GBR","UNITED KINGDOM" -"3571348992","3571349135","DE","DEU","GERMANY" -"3571349136","3571349151","GB","GBR","UNITED KINGDOM" -"3571349152","3571349231","DE","DEU","GERMANY" -"3571349232","3571349239","GB","GBR","UNITED KINGDOM" -"3571349240","3571349263","DE","DEU","GERMANY" -"3571349264","3571349311","GB","GBR","UNITED KINGDOM" -"3571349312","3571349343","DE","DEU","GERMANY" -"3571349344","3571349743","GB","GBR","UNITED KINGDOM" -"3571349744","3571349759","CH","CHE","SWITZERLAND" -"3571349760","3571349791","DE","DEU","GERMANY" -"3571349792","3571349799","SE","SWE","SWEDEN" -"3571349800","3571349807","DE","DEU","GERMANY" -"3571349808","3571349815","BE","BEL","BELGIUM" -"3571349816","3571349819","SE","SWE","SWEDEN" -"3571349820","3571349887","GB","GBR","UNITED KINGDOM" -"3571349888","3571349919","DE","DEU","GERMANY" -"3571349920","3571350511","GB","GBR","UNITED KINGDOM" -"3571350512","3571350527","DE","DEU","GERMANY" -"3571350528","3571351551","GB","GBR","UNITED KINGDOM" -"3571351552","3571351807","DE","DEU","GERMANY" -"3571351808","3571351871","GB","GBR","UNITED KINGDOM" -"3571351872","3571352031","DE","DEU","GERMANY" -"3571352032","3571352063","GB","GBR","UNITED KINGDOM" -"3571352064","3571352415","DE","DEU","GERMANY" -"3571352416","3571352527","GB","GBR","UNITED KINGDOM" -"3571352528","3571352639","DE","DEU","GERMANY" -"3571352640","3571352735","GB","GBR","UNITED KINGDOM" -"3571352736","3571352783","DE","DEU","GERMANY" -"3571352784","3571352831","GB","GBR","UNITED KINGDOM" -"3571352832","3571353215","DE","DEU","GERMANY" -"3571353216","3571353231","GB","GBR","UNITED KINGDOM" -"3571353232","3571353279","DE","DEU","GERMANY" -"3571353280","3571353311","GB","GBR","UNITED KINGDOM" -"3571353312","3571353343","DE","DEU","GERMANY" -"3571353344","3571353471","GB","GBR","UNITED KINGDOM" -"3571353472","3571353599","DE","DEU","GERMANY" -"3571353600","3571353791","GB","GBR","UNITED KINGDOM" -"3571353792","3571353807","DE","DEU","GERMANY" -"3571353808","3571353855","GB","GBR","UNITED KINGDOM" -"3571353856","3571354111","DE","DEU","GERMANY" -"3571354112","3571354463","GB","GBR","UNITED KINGDOM" -"3571354464","3571354495","DE","DEU","GERMANY" -"3571354496","3571355007","GB","GBR","UNITED KINGDOM" -"3571355008","3571355135","DE","DEU","GERMANY" -"3571355136","3571355167","GB","GBR","UNITED KINGDOM" -"3571355168","3571355183","DE","DEU","GERMANY" -"3571355184","3571355391","GB","GBR","UNITED KINGDOM" -"3571355392","3571355935","DE","DEU","GERMANY" -"3571355936","3571355967","GB","GBR","UNITED KINGDOM" -"3571355968","3571356031","DE","DEU","GERMANY" -"3571356032","3571356159","GB","GBR","UNITED KINGDOM" -"3571356160","3571356415","DE","DEU","GERMANY" -"3571356416","3571356543","GB","GBR","UNITED KINGDOM" -"3571356544","3571356607","DE","DEU","GERMANY" -"3571356608","3571356671","GB","GBR","UNITED KINGDOM" -"3571356672","3571357071","DE","DEU","GERMANY" -"3571357072","3571357183","GB","GBR","UNITED KINGDOM" -"3571357184","3571357695","DE","DEU","GERMANY" -"3571357696","3571357791","GB","GBR","UNITED KINGDOM" -"3571357792","3571357855","DE","DEU","GERMANY" -"3571357856","3571357871","GB","GBR","UNITED KINGDOM" -"3571357872","3571357951","DE","DEU","GERMANY" -"3571357952","3571358047","GB","GBR","UNITED KINGDOM" -"3571358048","3571358079","DE","DEU","GERMANY" -"3571358080","3571358223","GB","GBR","UNITED KINGDOM" -"3571358224","3571358255","DE","DEU","GERMANY" -"3571358256","3571358319","GB","GBR","UNITED KINGDOM" -"3571358320","3571358335","DE","DEU","GERMANY" -"3571358336","3571358399","GB","GBR","UNITED KINGDOM" -"3571358400","3571358415","DE","DEU","GERMANY" -"3571358416","3571358431","GB","GBR","UNITED KINGDOM" -"3571358432","3571358447","DE","DEU","GERMANY" -"3571358448","3571358463","GB","GBR","UNITED KINGDOM" -"3571358464","3571358495","DE","DEU","GERMANY" -"3571358496","3571358503","GB","GBR","UNITED KINGDOM" -"3571358504","3571358559","DE","DEU","GERMANY" -"3571358560","3571358575","GB","GBR","UNITED KINGDOM" -"3571358576","3571358591","DE","DEU","GERMANY" -"3571358592","3571358975","GB","GBR","UNITED KINGDOM" -"3571358976","3571358991","DE","DEU","GERMANY" -"3571358992","3571358999","GB","GBR","UNITED KINGDOM" -"3571359000","3571359079","DE","DEU","GERMANY" -"3571359080","3571359095","GB","GBR","UNITED KINGDOM" -"3571359096","3571359151","DE","DEU","GERMANY" -"3571359152","3571359159","GB","GBR","UNITED KINGDOM" -"3571359160","3571359167","DE","DEU","GERMANY" -"3571359168","3571359175","GB","GBR","UNITED KINGDOM" -"3571359176","3571359207","DE","DEU","GERMANY" -"3571359208","3571359215","GB","GBR","UNITED KINGDOM" -"3571359216","3571359335","DE","DEU","GERMANY" -"3571359336","3571359343","GB","GBR","UNITED KINGDOM" -"3571359344","3571359351","DE","DEU","GERMANY" -"3571359352","3571359359","GB","GBR","UNITED KINGDOM" -"3571359360","3571359415","DE","DEU","GERMANY" -"3571359416","3571359419","GB","GBR","UNITED KINGDOM" -"3571359420","3571359463","DE","DEU","GERMANY" -"3571359464","3571359471","GB","GBR","UNITED KINGDOM" -"3571359472","3571359487","DE","DEU","GERMANY" -"3571359488","3571359999","GB","GBR","UNITED KINGDOM" -"3571360000","3571360767","DE","DEU","GERMANY" -"3571360768","3571361151","GB","GBR","UNITED KINGDOM" -"3571361152","3571361215","DE","DEU","GERMANY" -"3571361216","3571361247","GB","GBR","UNITED KINGDOM" -"3571361248","3571361407","DE","DEU","GERMANY" -"3571361408","3571361439","GB","GBR","UNITED KINGDOM" -"3571361440","3571361455","DE","DEU","GERMANY" -"3571361456","3571361471","GB","GBR","UNITED KINGDOM" -"3571361472","3571361535","DE","DEU","GERMANY" -"3571361536","3571361983","GB","GBR","UNITED KINGDOM" -"3571361984","3571362303","DE","DEU","GERMANY" -"3571362304","3571362559","GB","GBR","UNITED KINGDOM" -"3571362560","3571362879","DE","DEU","GERMANY" -"3571362880","3571363007","GB","GBR","UNITED KINGDOM" -"3571363008","3571363039","DE","DEU","GERMANY" -"3571363040","3571363327","GB","GBR","UNITED KINGDOM" -"3571363328","3571364095","DE","DEU","GERMANY" -"3571364096","3571364287","GB","GBR","UNITED KINGDOM" -"3571364288","3571364319","DE","DEU","GERMANY" -"3571364320","3571364919","GB","GBR","UNITED KINGDOM" -"3571364920","3571364927","DE","DEU","GERMANY" -"3571364928","3571364955","GB","GBR","UNITED KINGDOM" -"3571364956","3571364975","DE","DEU","GERMANY" -"3571364976","3571364983","GB","GBR","UNITED KINGDOM" -"3571364984","3571364991","DE","DEU","GERMANY" -"3571364992","3571365023","GB","GBR","UNITED KINGDOM" -"3571365024","3571365031","DE","DEU","GERMANY" -"3571365032","3571365039","GB","GBR","UNITED KINGDOM" -"3571365040","3571365047","DE","DEU","GERMANY" -"3571365048","3571365055","GB","GBR","UNITED KINGDOM" -"3571365056","3571365071","DE","DEU","GERMANY" -"3571365072","3571365079","GB","GBR","UNITED KINGDOM" -"3571365080","3571365087","DE","DEU","GERMANY" -"3571365088","3571365183","GB","GBR","UNITED KINGDOM" -"3571365184","3571365247","DE","DEU","GERMANY" -"3571365248","3571365999","GB","GBR","UNITED KINGDOM" -"3571366000","3571366007","DE","DEU","GERMANY" -"3571366008","3571366143","GB","GBR","UNITED KINGDOM" -"3571366144","3571366151","DE","DEU","GERMANY" -"3571366152","3571366399","GB","GBR","UNITED KINGDOM" -"3571366400","3571366511","NL","NLD","NETHERLANDS" -"3571366512","3571366519","DE","DEU","GERMANY" -"3571366520","3571366559","GB","GBR","UNITED KINGDOM" -"3571366560","3571366591","DE","DEU","GERMANY" -"3571366592","3571366655","GB","GBR","UNITED KINGDOM" -"3571366656","3571366911","DE","DEU","GERMANY" -"3571366912","3571368447","GB","GBR","UNITED KINGDOM" -"3571368448","3571368479","DE","DEU","GERMANY" -"3571368480","3571368511","GB","GBR","UNITED KINGDOM" -"3571368512","3571368575","DE","DEU","GERMANY" -"3571368576","3571368623","GB","GBR","UNITED KINGDOM" -"3571368624","3571368687","DE","DEU","GERMANY" -"3571368688","3571368695","GB","GBR","UNITED KINGDOM" -"3571368696","3571368959","DE","DEU","GERMANY" -"3571368960","3571369215","GB","GBR","UNITED KINGDOM" -"3571369216","3571369279","DE","DEU","GERMANY" -"3571369280","3571369727","GB","GBR","UNITED KINGDOM" -"3571369728","3571369759","DE","DEU","GERMANY" -"3571369760","3571369807","GB","GBR","UNITED KINGDOM" -"3571369808","3571369823","DE","DEU","GERMANY" -"3571369824","3571369983","GB","GBR","UNITED KINGDOM" -"3571369984","3571371299","DE","DEU","GERMANY" -"3571371300","3571371303","GB","GBR","UNITED KINGDOM" -"3571371304","3571371319","DE","DEU","GERMANY" -"3571371320","3571371327","GB","GBR","UNITED KINGDOM" -"3571371328","3571371359","DE","DEU","GERMANY" -"3571371360","3571372303","GB","GBR","UNITED KINGDOM" -"3571372304","3571372319","DE","DEU","GERMANY" -"3571372320","3571375327","GB","GBR","UNITED KINGDOM" -"3571375328","3571375343","DE","DEU","GERMANY" -"3571375344","3571379199","GB","GBR","UNITED KINGDOM" -"3571379200","3571379231","DE","DEU","GERMANY" -"3571379232","3571379247","GB","GBR","UNITED KINGDOM" -"3571379248","3571379311","DE","DEU","GERMANY" -"3571379312","3571379315","NL","NLD","NETHERLANDS" -"3571379316","3571379351","DE","DEU","GERMANY" -"3571379352","3571379359","GB","GBR","UNITED KINGDOM" -"3571379360","3571379367","DE","DEU","GERMANY" -"3571379368","3571379375","GB","GBR","UNITED KINGDOM" -"3571379376","3571379631","DE","DEU","GERMANY" -"3571379632","3571379647","GB","GBR","UNITED KINGDOM" -"3571379648","3571379871","DE","DEU","GERMANY" -"3571379872","3571379887","GB","GBR","UNITED KINGDOM" -"3571379888","3571379903","DE","DEU","GERMANY" -"3571379904","3571381151","GB","GBR","UNITED KINGDOM" -"3571381152","3571381631","DE","DEU","GERMANY" -"3571381632","3571381695","AT","AUT","AUSTRIA" -"3571381696","3571381711","DE","DEU","GERMANY" -"3571381712","3571381727","GB","GBR","UNITED KINGDOM" -"3571381728","3571381791","DE","DEU","GERMANY" -"3571381792","3571381887","GB","GBR","UNITED KINGDOM" -"3571381888","3571381951","DE","DEU","GERMANY" -"3571381952","3571382015","GB","GBR","UNITED KINGDOM" -"3571382016","3571382207","DE","DEU","GERMANY" -"3571382208","3571382271","GB","GBR","UNITED KINGDOM" -"3571382272","3571382303","DE","DEU","GERMANY" -"3571382304","3571382351","GB","GBR","UNITED KINGDOM" -"3571382352","3571382367","DE","DEU","GERMANY" -"3571382368","3571382623","GB","GBR","UNITED KINGDOM" -"3571382624","3571382783","DE","DEU","GERMANY" -"3571382784","3571383039","AT","AUT","AUSTRIA" -"3571383040","3571383135","DE","DEU","GERMANY" -"3571383136","3571383151","AT","AUT","AUSTRIA" -"3571383152","3571383167","GB","GBR","UNITED KINGDOM" -"3571383168","3571383175","DE","DEU","GERMANY" -"3571383176","3571383999","GB","GBR","UNITED KINGDOM" -"3571384000","3571384063","DE","DEU","GERMANY" -"3571384064","3571384319","GB","GBR","UNITED KINGDOM" -"3571384320","3571385151","DE","DEU","GERMANY" -"3571385152","3571385183","GB","GBR","UNITED KINGDOM" -"3571385184","3571385631","DE","DEU","GERMANY" -"3571385632","3571385663","GB","GBR","UNITED KINGDOM" -"3571385664","3571389471","DE","DEU","GERMANY" -"3571389472","3571389475","ES","ESP","SPAIN" -"3571389476","3571389503","DE","DEU","GERMANY" -"3571389504","3571389519","HU","HUN","HUNGARY" -"3571389520","3571425695","DE","DEU","GERMANY" -"3571425696","3571425727","ES","ESP","SPAIN" -"3571425728","3571426895","DE","DEU","GERMANY" -"3571426896","3571426903","ES","ESP","SPAIN" -"3571426904","3571426931","DE","DEU","GERMANY" -"3571426932","3571426935","ES","ESP","SPAIN" -"3571426936","3571456575","DE","DEU","GERMANY" -"3571456576","3571456591","GB","GBR","UNITED KINGDOM" -"3571456592","3571473151","DE","DEU","GERMANY" -"3571473152","3571473407","NL","NLD","NETHERLANDS" -"3571473408","3571481343","DE","DEU","GERMANY" -"3571481344","3571481359","AT","AUT","AUSTRIA" -"3571481360","3571481375","DE","DEU","GERMANY" -"3571481376","3571481391","NL","NLD","NETHERLANDS" -"3571481392","3571481471","DE","DEU","GERMANY" -"3571481472","3571481599","NL","NLD","NETHERLANDS" -"3571481600","3571482367","DE","DEU","GERMANY" -"3571482368","3571482623","CH","CHE","SWITZERLAND" -"3571482624","3571515391","BE","BEL","BELGIUM" -"3571515392","3571548159","GB","GBR","UNITED KINGDOM" -"3571548160","3571580927","ES","ESP","SPAIN" -"3571580928","3571646463","FI","FIN","FINLAND" -"3571646464","3571675679","DE","DEU","GERMANY" -"3571675680","3571675687","GB","GBR","UNITED KINGDOM" -"3571675688","3571711999","DE","DEU","GERMANY" -"3571712000","3571843071","GB","GBR","UNITED KINGDOM" -"3571843072","3571974143","ES","ESP","SPAIN" -"3571978240","3571980287","SK","SVK","SLOVAKIA" -"3572006912","3572039679","CH","CHE","SWITZERLAND" -"3572039680","3572047871","BE","BEL","BELGIUM" -"3572047872","3572052479","LU","LUX","LUXEMBOURG" -"3572052480","3572052735","BE","BEL","BELGIUM" -"3572052736","3572054303","LU","LUX","LUXEMBOURG" -"3572054304","3572054431","BE","BEL","BELGIUM" -"3572054432","3572054527","LU","LUX","LUXEMBOURG" -"3572054528","3572055551","BE","BEL","BELGIUM" -"3572055552","3572055743","LU","LUX","LUXEMBOURG" -"3572055744","3572056063","BE","BEL","BELGIUM" -"3572056064","3572072447","RU","RUS","RUSSIAN FEDERATION" -"3572072448","3572105215","BG","BGR","BULGARIA" -"3572105216","3572170751","FR","FRA","FRANCE" -"3572170752","3572195791","IL","ISR","ISRAEL" -"3572195792","3572195807","GB","GBR","UNITED KINGDOM" -"3572195808","3572203519","IL","ISR","ISRAEL" -"3572203520","3572236287","SI","SVN","SLOVENIA" -"3572236288","3572301823","AT","AUT","AUSTRIA" -"3572301824","3572367359","DK","DNK","DENMARK" -"3572367360","3572432895","NL","NLD","NETHERLANDS" -"3572432896","3572436047","IT","ITA","ITALY" -"3572436048","3572436063","GB","GBR","UNITED KINGDOM" -"3572436064","3572442495","IT","ITA","ITALY" -"3572442496","3572442511","NL","NLD","NETHERLANDS" -"3572442512","3572447231","IT","ITA","ITALY" -"3572447232","3572447239","AT","AUT","AUSTRIA" -"3572447240","3572447247","FR","FRA","FRANCE" -"3572447248","3572447255","GB","GBR","UNITED KINGDOM" -"3572447256","3572447263","ES","ESP","SPAIN" -"3572447264","3572465663","IT","ITA","ITALY" -"3572465664","3572498431","BE","BEL","BELGIUM" -"3572498432","3572563967","GB","GBR","UNITED KINGDOM" -"3572563968","3572572159","KG","KGZ","KYRGYZSTAN" -"3572572160","3572580351","NL","NLD","NETHERLANDS" -"3572580352","3572596735","AT","AUT","AUSTRIA" -"3572596736","3572629503","GB","GBR","UNITED KINGDOM" -"3572629504","3572695039","DK","DNK","DENMARK" -"3572695040","3572704951","CH","CHE","SWITZERLAND" -"3572704952","3572704959","DE","DEU","GERMANY" -"3572704960","3572705479","CH","CHE","SWITZERLAND" -"3572705480","3572705487","NL","NLD","NETHERLANDS" -"3572705488","3572715519","CH","CHE","SWITZERLAND" -"3572715520","3572715775","GB","GBR","UNITED KINGDOM" -"3572715776","3572760575","CH","CHE","SWITZERLAND" -"3572760576","3572826111","PL","POL","POLAND" -"3572826112","3572891647","IT","ITA","ITALY" -"3572891648","3572957183","FI","FIN","FINLAND" -"3572957184","3573022719","SE","SWE","SWEDEN" -"3573022720","3573055487","RU","RUS","RUSSIAN FEDERATION" -"3573055488","3573088255","GB","GBR","UNITED KINGDOM" -"3573088256","3573088263","CH","CHE","SWITZERLAND" -"3573088264","3573088271","DE","DEU","GERMANY" -"3573088272","3573089759","CH","CHE","SWITZERLAND" -"3573089760","3573089791","AT","AUT","AUSTRIA" -"3573089792","3573090055","CH","CHE","SWITZERLAND" -"3573090056","3573090063","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"3573090064","3573142015","CH","CHE","SWITZERLAND" -"3573142016","3573142271","AT","AUT","AUSTRIA" -"3573142272","3573153791","CH","CHE","SWITZERLAND" -"3573153792","3573175711","GB","GBR","UNITED KINGDOM" -"3573175712","3573175727","IE","IRL","IRELAND" -"3573175728","3573208511","GB","GBR","UNITED KINGDOM" -"3573208512","3573208543","IE","IRL","IRELAND" -"3573208544","3573219327","GB","GBR","UNITED KINGDOM" -"3573219328","3573252095","GR","GRC","GREECE" -"3573252096","3573284863","NO","NOR","NORWAY" -"3573284864","3573415935","TR","TUR","TURKEY" -"3573415936","3573481471","CH","CHE","SWITZERLAND" -"3573481472","3573547007","DE","DEU","GERMANY" -"3573547008","3573612543","ES","ESP","SPAIN" -"3573612544","3573743615","GB","GBR","UNITED KINGDOM" -"3573743616","3573809151","CH","CHE","SWITZERLAND" -"3573809152","3573874687","ES","ESP","SPAIN" -"3573874688","3573878783","PL","POL","POLAND" -"3573878784","3573882879","RU","RUS","RUSSIAN FEDERATION" -"3573882880","3573884927","DK","DNK","DENMARK" -"3573884928","3573886975","PL","POL","POLAND" -"3573886976","3573889023","RU","RUS","RUSSIAN FEDERATION" -"3573889024","3573891071","HR","HRV","CROATIA" -"3573891072","3573893119","NL","NLD","NETHERLANDS" -"3573893120","3573897215","RU","RUS","RUSSIAN FEDERATION" -"3573897216","3573899263","GB","GBR","UNITED KINGDOM" -"3573899264","3573903359","RU","RUS","RUSSIAN FEDERATION" -"3573903360","3573905407","SI","SVN","SLOVENIA" -"3573905408","3573909503","RU","RUS","RUSSIAN FEDERATION" -"3573909504","3573913599","PL","POL","POLAND" -"3573913600","3573915647","CH","CHE","SWITZERLAND" -"3573915648","3573917695","RU","RUS","RUSSIAN FEDERATION" -"3573917696","3573919743","SA","SAU","SAUDI ARABIA" -"3573919744","3573921791","GB","GBR","UNITED KINGDOM" -"3573921792","3573923839","RU","RUS","RUSSIAN FEDERATION" -"3573923840","3573925887","UA","UKR","UKRAINE" -"3573925888","3573929983","PL","POL","POLAND" -"3573929984","3573938175","RU","RUS","RUSSIAN FEDERATION" -"3573938176","3573940223","PL","POL","POLAND" -"3573940224","3574005759","PS","PSE","PALESTINIAN TERRITORY, OCCUPIED" -"3574005760","3574071295","CY","CYP","CYPRUS" -"3574071296","3574136831","IL","ISR","ISRAEL" -"3574136832","3574137783","DE","DEU","GERMANY" -"3574137784","3574137791","AT","AUT","AUSTRIA" -"3574137792","3574137823","DE","DEU","GERMANY" -"3574137824","3574137855","NL","NLD","NETHERLANDS" -"3574137856","3574138559","DE","DEU","GERMANY" -"3574138560","3574138623","NL","NLD","NETHERLANDS" -"3574138624","3574138735","DE","DEU","GERMANY" -"3574138736","3574138751","NL","NLD","NETHERLANDS" -"3574138752","3574138767","DE","DEU","GERMANY" -"3574138768","3574138775","NL","NLD","NETHERLANDS" -"3574138776","3574151823","DE","DEU","GERMANY" -"3574151824","3574151831","AT","AUT","AUSTRIA" -"3574151832","3574153359","DE","DEU","GERMANY" -"3574153360","3574153367","AT","AUT","AUSTRIA" -"3574153368","3574153615","DE","DEU","GERMANY" -"3574153616","3574153623","AT","AUT","AUSTRIA" -"3574153624","3574153731","DE","DEU","GERMANY" -"3574153732","3574153735","HU","HUN","HUNGARY" -"3574153736","3574155591","DE","DEU","GERMANY" -"3574155592","3574155595","FR","FRA","FRANCE" -"3574155596","3574155627","DE","DEU","GERMANY" -"3574155628","3574155631","NL","NLD","NETHERLANDS" -"3574155632","3574155727","DE","DEU","GERMANY" -"3574155728","3574155731","AT","AUT","AUSTRIA" -"3574155732","3574155739","DE","DEU","GERMANY" -"3574155740","3574155743","AT","AUT","AUSTRIA" -"3574155744","3574155819","DE","DEU","GERMANY" -"3574155820","3574155823","NO","NOR","NORWAY" -"3574155824","3574155851","DE","DEU","GERMANY" -"3574155852","3574155855","NO","NOR","NORWAY" -"3574155856","3574155859","DE","DEU","GERMANY" -"3574155860","3574155863","NO","NOR","NORWAY" -"3574155864","3574159919","DE","DEU","GERMANY" -"3574159920","3574159927","NL","NLD","NETHERLANDS" -"3574159928","3574160931","DE","DEU","GERMANY" -"3574160932","3574160935","NL","NLD","NETHERLANDS" -"3574160936","3574161039","DE","DEU","GERMANY" -"3574161040","3574161043","NL","NLD","NETHERLANDS" -"3574161044","3574161055","DE","DEU","GERMANY" -"3574161056","3574161087","NL","NLD","NETHERLANDS" -"3574161088","3574161107","DE","DEU","GERMANY" -"3574161108","3574161111","NL","NLD","NETHERLANDS" -"3574161112","3574161171","DE","DEU","GERMANY" -"3574161172","3574161175","NO","NOR","NORWAY" -"3574161176","3574161319","DE","DEU","GERMANY" -"3574161320","3574161323","NO","NOR","NORWAY" -"3574161324","3574161335","DE","DEU","GERMANY" -"3574161336","3574161339","AI","AIA","ANGUILLA" -"3574161340","3574161343","AT","AUT","AUSTRIA" -"3574161344","3574161391","DE","DEU","GERMANY" -"3574161392","3574161395","NO","NOR","NORWAY" -"3574161396","3574169599","DE","DEU","GERMANY" -"3574169600","3574202367","ES","ESP","SPAIN" -"3574202368","3574267903","NL","NLD","NETHERLANDS" -"3574267904","3574333439","FR","FRA","FRANCE" -"3574333440","3574341631","GB","GBR","UNITED KINGDOM" -"3574348288","3574348543","GB","GBR","UNITED KINGDOM" -"3574398976","3574464511","PT","PRT","PORTUGAL" -"3574464512","3574530047","TR","TUR","TURKEY" -"3574530048","3574563679","SE","SWE","SWEDEN" -"3574563680","3574563695","FI","FIN","FINLAND" -"3574563696","3574563727","SE","SWE","SWEDEN" -"3574563728","3574563775","FI","FIN","FINLAND" -"3574563776","3574563807","SE","SWE","SWEDEN" -"3574563808","3574563823","FI","FIN","FINLAND" -"3574563824","3574563839","SE","SWE","SWEDEN" -"3574563840","3574564863","FI","FIN","FINLAND" -"3574564864","3574565887","SE","SWE","SWEDEN" -"3574565888","3574565951","FI","FIN","FINLAND" -"3574565952","3574566207","SE","SWE","SWEDEN" -"3574566208","3574566271","FI","FIN","FINLAND" -"3574566272","3574566447","SE","SWE","SWEDEN" -"3574566448","3574566463","FI","FIN","FINLAND" -"3574566464","3574594559","SE","SWE","SWEDEN" -"3574594560","3574595583","GB","GBR","UNITED KINGDOM" -"3574595584","3574596351","FR","FRA","FRANCE" -"3574596352","3574596607","MQ","MTQ","MARTINIQUE" -"3574596608","3574597631","FR","FRA","FRANCE" -"3574597632","3574597887","GP","GLP","GUADELOUPE" -"3574597888","3574598655","FR","FRA","FRANCE" -"3574598656","3574599679","MQ","MTQ","MARTINIQUE" -"3574599680","3574600191","FR","FRA","FRANCE" -"3574600192","3574601215","MQ","MTQ","MARTINIQUE" -"3574601216","3574601471","RE","REU","REUNION" -"3574601472","3574601983","MQ","MTQ","MARTINIQUE" -"3574601984","3574602239","GF","GUF","FRENCH GUIANA" -"3574602240","3574602495","FR","FRA","FRANCE" -"3574602496","3574603263","MQ","MTQ","MARTINIQUE" -"3574603264","3574603775","FR","FRA","FRANCE" -"3574603776","3574611967","BG","BGR","BULGARIA" -"3574611968","3574628351","HU","HUN","HUNGARY" -"3574628352","3574661119","GR","GRC","GREECE" -"3574661120","3574693887","NL","NLD","NETHERLANDS" -"3574693888","3574726655","PL","POL","POLAND" -"3574726656","3574792191","GB","GBR","UNITED KINGDOM" -"3574792192","3574824959","CZ","CZE","CZECH REPUBLIC" -"3574824960","3574825279","GB","GBR","UNITED KINGDOM" -"3574825280","3574825407","NL","NLD","NETHERLANDS" -"3574825408","3574825471","GB","GBR","UNITED KINGDOM" -"3574825472","3574826111","NL","NLD","NETHERLANDS" -"3574826112","3574826239","GB","GBR","UNITED KINGDOM" -"3574826240","3574826751","NL","NLD","NETHERLANDS" -"3574826752","3574827007","GB","GBR","UNITED KINGDOM" -"3574827008","3574829311","NL","NLD","NETHERLANDS" -"3574829312","3574829567","GB","GBR","UNITED KINGDOM" -"3574829568","3574829823","NL","NLD","NETHERLANDS" -"3574829824","3574830079","GB","GBR","UNITED KINGDOM" -"3574830080","3574831359","NL","NLD","NETHERLANDS" -"3574831360","3574833279","GB","GBR","UNITED KINGDOM" -"3574833280","3574833311","NL","NLD","NETHERLANDS" -"3574833312","3574833343","GB","GBR","UNITED KINGDOM" -"3574833344","3574833359","NL","NLD","NETHERLANDS" -"3574833360","3574833407","GB","GBR","UNITED KINGDOM" -"3574833408","3574833439","NL","NLD","NETHERLANDS" -"3574833440","3574834431","GB","GBR","UNITED KINGDOM" -"3574834432","3574834559","NL","NLD","NETHERLANDS" -"3574834560","3574834687","GB","GBR","UNITED KINGDOM" -"3574834688","3574835199","NL","NLD","NETHERLANDS" -"3574835200","3574836351","GB","GBR","UNITED KINGDOM" -"3574836352","3574838015","NL","NLD","NETHERLANDS" -"3574838016","3574838271","GB","GBR","UNITED KINGDOM" -"3574838272","3574838527","NL","NLD","NETHERLANDS" -"3574838528","3574857727","GB","GBR","UNITED KINGDOM" -"3574857728","3574917375","DE","DEU","GERMANY" -"3574917376","3574917631","CH","CHE","SWITZERLAND" -"3574917632","3574919359","DE","DEU","GERMANY" -"3574919360","3574919391","FR","FRA","FRANCE" -"3574919392","3574923263","DE","DEU","GERMANY" -"3574923264","3574939647","RU","RUS","RUSSIAN FEDERATION" -"3574939648","3574956031","SE","SWE","SWEDEN" -"3574956032","3574972415","IT","ITA","ITALY" -"3574972416","3574988799","LV","LVA","LATVIA" -"3574988800","3575054335","PT","PRT","PORTUGAL" -"3575054336","3575086175","DE","DEU","GERMANY" -"3575086176","3575086207","MT","MLT","MALTA" -"3575086208","3575119871","DE","DEU","GERMANY" -"3575119872","3575185407","RU","RUS","RUSSIAN FEDERATION" -"3575185408","3575250943","PL","POL","POLAND" -"3575250944","3575316479","IT","ITA","ITALY" -"3575316480","3575349247","RU","RUS","RUSSIAN FEDERATION" -"3575349248","3575355231","ES","ESP","SPAIN" -"3575355232","3575355247","GB","GBR","UNITED KINGDOM" -"3575355248","3575360199","ES","ESP","SPAIN" -"3575360200","3575360207","FR","FRA","FRANCE" -"3575360208","3575367111","ES","ESP","SPAIN" -"3575367112","3575367119","DE","DEU","GERMANY" -"3575367120","3575372159","ES","ESP","SPAIN" -"3575372160","3575372167","GB","GBR","UNITED KINGDOM" -"3575372168","3575372239","ES","ESP","SPAIN" -"3575372240","3575372247","PT","PRT","PORTUGAL" -"3575372248","3575382015","ES","ESP","SPAIN" -"3575382016","3575412991","FI","FIN","FINLAND" -"3575412992","3575413119","RU","RUS","RUSSIAN FEDERATION" -"3575413120","3575447551","FI","FIN","FINLAND" -"3575447552","3575513087","CZ","CZE","CZECH REPUBLIC" -"3575513088","3575545855","PT","PRT","PORTUGAL" -"3575545856","3575562239","FR","FRA","FRANCE" -"3575562240","3575578623","DE","DEU","GERMANY" -"3575578624","3575578879","BE","BEL","BELGIUM" -"3575578880","3575579135","AU","AUS","AUSTRALIA" -"3575579136","3575579647","BE","BEL","BELGIUM" -"3575579648","3575579903","AU","AUS","AUSTRALIA" -"3575579904","3575581439","BE","BEL","BELGIUM" -"3575581440","3575581567","GB","GBR","UNITED KINGDOM" -"3575581568","3575581695","IT","ITA","ITALY" -"3575581696","3575582207","BE","BEL","BELGIUM" -"3575582208","3575582463","CH","CHE","SWITZERLAND" -"3575582464","3575582719","FR","FRA","FRANCE" -"3575582720","3575583103","BE","BEL","BELGIUM" -"3575583104","3575583111","HU","HUN","HUNGARY" -"3575583112","3575583115","GB","GBR","UNITED KINGDOM" -"3575583116","3575583119","FR","FRA","FRANCE" -"3575583120","3575583231","BE","BEL","BELGIUM" -"3575583232","3575583487","IT","ITA","ITALY" -"3575583488","3575585791","BE","BEL","BELGIUM" -"3575585792","3575586047","EG","EGY","EGYPT" -"3575586048","3575586303","IT","ITA","ITALY" -"3575586304","3575586815","BE","BEL","BELGIUM" -"3575586816","3575587071","GB","GBR","UNITED KINGDOM" -"3575587072","3575587231","BE","BEL","BELGIUM" -"3575587232","3575587247","NL","NLD","NETHERLANDS" -"3575587248","3575587255","FR","FRA","FRANCE" -"3575587256","3575587263","BE","BEL","BELGIUM" -"3575587264","3575587271","CH","CHE","SWITZERLAND" -"3575587272","3575587287","BE","BEL","BELGIUM" -"3575587288","3575587295","PL","POL","POLAND" -"3575587296","3575587319","BE","BEL","BELGIUM" -"3575587320","3575587323","PL","POL","POLAND" -"3575587324","3575587839","BE","BEL","BELGIUM" -"3575587840","3575588351","GB","GBR","UNITED KINGDOM" -"3575588352","3575588863","BE","BEL","BELGIUM" -"3575588864","3575589887","FR","FRA","FRANCE" -"3575589888","3575590399","BE","BEL","BELGIUM" -"3575590400","3575590911","FR","FRA","FRANCE" -"3575590912","3575595007","BE","BEL","BELGIUM" -"3575595008","3575595519","GB","GBR","UNITED KINGDOM" -"3575595520","3575596287","BE","BEL","BELGIUM" -"3575596288","3575596415","GB","GBR","UNITED KINGDOM" -"3575596416","3575596543","BE","BEL","BELGIUM" -"3575596544","3575596799","FR","FRA","FRANCE" -"3575596800","3575622607","BE","BEL","BELGIUM" -"3575622608","3575622611","GB","GBR","UNITED KINGDOM" -"3575622612","3575622655","BE","BEL","BELGIUM" -"3575622656","3575622815","GB","GBR","UNITED KINGDOM" -"3575622816","3575622847","BE","BEL","BELGIUM" -"3575622848","3575622879","IT","ITA","ITALY" -"3575622880","3575622911","FI","FIN","FINLAND" -"3575622912","3575623167","GB","GBR","UNITED KINGDOM" -"3575623168","3575624703","BE","BEL","BELGIUM" -"3575624704","3575624831","FR","FRA","FRANCE" -"3575624832","3575624839","PT","PRT","PORTUGAL" -"3575624840","3575624863","GB","GBR","UNITED KINGDOM" -"3575624864","3575624895","IL","ISR","ISRAEL" -"3575624896","3575624911","GB","GBR","UNITED KINGDOM" -"3575624912","3575624959","BE","BEL","BELGIUM" -"3575624960","3575624991","GB","GBR","UNITED KINGDOM" -"3575624992","3575624999","IT","ITA","ITALY" -"3575625000","3575625007","GB","GBR","UNITED KINGDOM" -"3575625008","3575625023","NL","NLD","NETHERLANDS" -"3575625024","3575625027","EG","EGY","EGYPT" -"3575625028","3575625035","BE","BEL","BELGIUM" -"3575625036","3575625039","GB","GBR","UNITED KINGDOM" -"3575625040","3575625047","BE","BEL","BELGIUM" -"3575625048","3575625055","FI","FIN","FINLAND" -"3575625056","3575625071","BE","BEL","BELGIUM" -"3575625072","3575625087","PL","POL","POLAND" -"3575625088","3575625103","BE","BEL","BELGIUM" -"3575625104","3575625151","GB","GBR","UNITED KINGDOM" -"3575625152","3575625351","BE","BEL","BELGIUM" -"3575625352","3575625359","GB","GBR","UNITED KINGDOM" -"3575625360","3575625375","BE","BEL","BELGIUM" -"3575625376","3575625407","IT","ITA","ITALY" -"3575625408","3575625439","BE","BEL","BELGIUM" -"3575625440","3575625455","ES","ESP","SPAIN" -"3575625456","3575625471","BE","BEL","BELGIUM" -"3575625472","3575625503","NO","NOR","NORWAY" -"3575625504","3575625983","BE","BEL","BELGIUM" -"3575625984","3575625991","SE","SWE","SWEDEN" -"3575625992","3575626047","BE","BEL","BELGIUM" -"3575626048","3575626111","FR","FRA","FRANCE" -"3575626112","3575626319","BE","BEL","BELGIUM" -"3575626320","3575626335","GB","GBR","UNITED KINGDOM" -"3575626336","3575626351","ES","ESP","SPAIN" -"3575626352","3575626367","DE","DEU","GERMANY" -"3575626368","3575626503","BE","BEL","BELGIUM" -"3575626504","3575626511","CH","CHE","SWITZERLAND" -"3575626512","3575626519","BE","BEL","BELGIUM" -"3575626520","3575626527","FR","FRA","FRANCE" -"3575626528","3575626567","BE","BEL","BELGIUM" -"3575626568","3575626575","RO","ROM","ROMANIA" -"3575626576","3575626599","BE","BEL","BELGIUM" -"3575626600","3575626607","IE","IRL","IRELAND" -"3575626608","3575626631","BE","BEL","BELGIUM" -"3575626632","3575626639","GB","GBR","UNITED KINGDOM" -"3575626640","3575626647","DE","DEU","GERMANY" -"3575626648","3575626655","IT","ITA","ITALY" -"3575626656","3575627311","BE","BEL","BELGIUM" -"3575627312","3575627327","ES","ESP","SPAIN" -"3575627328","3575627335","SE","SWE","SWEDEN" -"3575627336","3575627359","BE","BEL","BELGIUM" -"3575627360","3575627367","ES","ESP","SPAIN" -"3575627368","3575627423","BE","BEL","BELGIUM" -"3575627424","3575627431","DE","DEU","GERMANY" -"3575627432","3575627487","BE","BEL","BELGIUM" -"3575627488","3575627503","GB","GBR","UNITED KINGDOM" -"3575627504","3575627711","BE","BEL","BELGIUM" -"3575627712","3575627775","GB","GBR","UNITED KINGDOM" -"3575627776","3575628543","NL","NLD","NETHERLANDS" -"3575628544","3575628631","BE","BEL","BELGIUM" -"3575628632","3575628639","GB","GBR","UNITED KINGDOM" -"3575628640","3575628815","BE","BEL","BELGIUM" -"3575628816","3575628823","ES","ESP","SPAIN" -"3575628824","3575628831","FR","FRA","FRANCE" -"3575628832","3575629183","BE","BEL","BELGIUM" -"3575629184","3575629247","NL","NLD","NETHERLANDS" -"3575629248","3575629279","BE","BEL","BELGIUM" -"3575629280","3575629287","GB","GBR","UNITED KINGDOM" -"3575629288","3575629295","BE","BEL","BELGIUM" -"3575629296","3575629303","NL","NLD","NETHERLANDS" -"3575629304","3575629823","BE","BEL","BELGIUM" -"3575629824","3575629855","GR","GRC","GREECE" -"3575629856","3575629871","DE","DEU","GERMANY" -"3575629872","3575629935","BE","BEL","BELGIUM" -"3575629936","3575629951","FR","FRA","FRANCE" -"3575629952","3575630015","BE","BEL","BELGIUM" -"3575630016","3575630023","GR","GRC","GREECE" -"3575630024","3575630063","BE","BEL","BELGIUM" -"3575630064","3575630079","ZA","ZAF","SOUTH AFRICA" -"3575630080","3575630335","BE","BEL","BELGIUM" -"3575630336","3575630463","IT","ITA","ITALY" -"3575630464","3575630591","CH","CHE","SWITZERLAND" -"3575630592","3575630847","IL","ISR","ISRAEL" -"3575630848","3575630975","BE","BEL","BELGIUM" -"3575630976","3575630991","FR","FRA","FRANCE" -"3575630992","3575631103","BE","BEL","BELGIUM" -"3575631104","3575631111","AT","AUT","AUSTRIA" -"3575631112","3575631119","CH","CHE","SWITZERLAND" -"3575631120","3575631127","DE","DEU","GERMANY" -"3575631128","3575631135","BE","BEL","BELGIUM" -"3575631136","3575631143","HU","HUN","HUNGARY" -"3575631144","3575631159","BE","BEL","BELGIUM" -"3575631160","3575631167","GB","GBR","UNITED KINGDOM" -"3575631168","3575631199","NL","NLD","NETHERLANDS" -"3575631200","3575631207","IE","IRL","IRELAND" -"3575631208","3575631223","BE","BEL","BELGIUM" -"3575631224","3575631231","IL","ISR","ISRAEL" -"3575631232","3575631295","CH","CHE","SWITZERLAND" -"3575631296","3575631615","BE","BEL","BELGIUM" -"3575631616","3575631631","SE","SWE","SWEDEN" -"3575631632","3575631639","BE","BEL","BELGIUM" -"3575631640","3575631647","CH","CHE","SWITZERLAND" -"3575631648","3575631663","SE","SWE","SWEDEN" -"3575631664","3575631679","DE","DEU","GERMANY" -"3575631680","3575631695","SE","SWE","SWEDEN" -"3575631696","3575631711","IT","ITA","ITALY" -"3575631712","3575631759","BE","BEL","BELGIUM" -"3575631760","3575631775","ZA","ZAF","SOUTH AFRICA" -"3575631776","3575631791","BE","BEL","BELGIUM" -"3575631792","3575631799","ES","ESP","SPAIN" -"3575631800","3575631807","CZ","CZE","CZECH REPUBLIC" -"3575631808","3575631855","BE","BEL","BELGIUM" -"3575631856","3575631863","ZA","ZAF","SOUTH AFRICA" -"3575631864","3575631871","BE","BEL","BELGIUM" -"3575631872","3575632639","IL","ISR","ISRAEL" -"3575632640","3575632655","NO","NOR","NORWAY" -"3575632656","3575632703","BE","BEL","BELGIUM" -"3575632704","3575632711","GB","GBR","UNITED KINGDOM" -"3575632712","3575632783","BE","BEL","BELGIUM" -"3575632784","3575632791","GB","GBR","UNITED KINGDOM" -"3575632792","3575632847","BE","BEL","BELGIUM" -"3575632848","3575632863","CH","CHE","SWITZERLAND" -"3575632864","3575632879","BE","BEL","BELGIUM" -"3575632880","3575632895","DE","DEU","GERMANY" -"3575632896","3575632967","BE","BEL","BELGIUM" -"3575632968","3575632975","GB","GBR","UNITED KINGDOM" -"3575632976","3575632991","BE","BEL","BELGIUM" -"3575632992","3575632999","IT","ITA","ITALY" -"3575633000","3575633039","BE","BEL","BELGIUM" -"3575633040","3575633055","DE","DEU","GERMANY" -"3575633056","3575633063","SE","SWE","SWEDEN" -"3575633064","3575633071","NL","NLD","NETHERLANDS" -"3575633072","3575633087","BE","BEL","BELGIUM" -"3575633088","3575633119","GB","GBR","UNITED KINGDOM" -"3575633120","3575633135","BE","BEL","BELGIUM" -"3575633136","3575633143","GB","GBR","UNITED KINGDOM" -"3575633144","3575633599","BE","BEL","BELGIUM" -"3575633600","3575633663","NL","NLD","NETHERLANDS" -"3575633664","3575633727","BE","BEL","BELGIUM" -"3575633728","3575633735","AT","AUT","AUSTRIA" -"3575633736","3575633743","IT","ITA","ITALY" -"3575633744","3575633783","BE","BEL","BELGIUM" -"3575633784","3575633791","DE","DEU","GERMANY" -"3575633792","3575633887","BE","BEL","BELGIUM" -"3575633888","3575633895","SE","SWE","SWEDEN" -"3575633896","3575633919","BE","BEL","BELGIUM" -"3575633920","3575633983","CH","CHE","SWITZERLAND" -"3575633984","3575633991","DE","DEU","GERMANY" -"3575633992","3575633999","BE","BEL","BELGIUM" -"3575634000","3575634007","PT","PRT","PORTUGAL" -"3575634008","3575634015","DK","DNK","DENMARK" -"3575634016","3575634047","GB","GBR","UNITED KINGDOM" -"3575634048","3575634183","BE","BEL","BELGIUM" -"3575634184","3575634191","AT","AUT","AUSTRIA" -"3575634192","3575634255","BE","BEL","BELGIUM" -"3575634256","3575634271","IT","ITA","ITALY" -"3575634272","3575634367","BE","BEL","BELGIUM" -"3575634368","3575634399","NO","NOR","NORWAY" -"3575634400","3575634431","GB","GBR","UNITED KINGDOM" -"3575634432","3575634455","BE","BEL","BELGIUM" -"3575634456","3575634463","DE","DEU","GERMANY" -"3575634464","3575634495","BE","BEL","BELGIUM" -"3575634496","3575634511","FI","FIN","FINLAND" -"3575634512","3575634519","CH","CHE","SWITZERLAND" -"3575634520","3575634591","BE","BEL","BELGIUM" -"3575634592","3575634599","ES","ESP","SPAIN" -"3575634600","3575634607","BE","BEL","BELGIUM" -"3575634608","3575634615","GB","GBR","UNITED KINGDOM" -"3575634616","3575634623","DE","DEU","GERMANY" -"3575634624","3575634695","BE","BEL","BELGIUM" -"3575634696","3575634703","FI","FIN","FINLAND" -"3575634704","3575634711","BE","BEL","BELGIUM" -"3575634712","3575634719","DE","DEU","GERMANY" -"3575634720","3575634767","BE","BEL","BELGIUM" -"3575634768","3575634775","NO","NOR","NORWAY" -"3575634776","3575634783","BE","BEL","BELGIUM" -"3575634784","3575634791","FR","FRA","FRANCE" -"3575634792","3575634799","ES","ESP","SPAIN" -"3575634800","3575634807","BE","BEL","BELGIUM" -"3575634808","3575634815","SE","SWE","SWEDEN" -"3575634816","3575634879","BE","BEL","BELGIUM" -"3575634880","3575634911","GB","GBR","UNITED KINGDOM" -"3575634912","3575634919","SE","SWE","SWEDEN" -"3575634920","3575634927","GB","GBR","UNITED KINGDOM" -"3575634928","3575634935","IT","ITA","ITALY" -"3575634936","3575635015","BE","BEL","BELGIUM" -"3575635016","3575635023","CH","CHE","SWITZERLAND" -"3575635024","3575635039","ES","ESP","SPAIN" -"3575635040","3575635055","BE","BEL","BELGIUM" -"3575635056","3575635063","CH","CHE","SWITZERLAND" -"3575635064","3575635071","BE","BEL","BELGIUM" -"3575635072","3575635087","SE","SWE","SWEDEN" -"3575635088","3575635103","BE","BEL","BELGIUM" -"3575635104","3575635119","PT","PRT","PORTUGAL" -"3575635120","3575635135","PL","POL","POLAND" -"3575635136","3575635151","DE","DEU","GERMANY" -"3575635152","3575635159","PT","PRT","PORTUGAL" -"3575635160","3575635167","DE","DEU","GERMANY" -"3575635168","3575635175","GB","GBR","UNITED KINGDOM" -"3575635176","3575635199","BE","BEL","BELGIUM" -"3575635200","3575635455","NO","NOR","NORWAY" -"3575635456","3575635463","RU","RUS","RUSSIAN FEDERATION" -"3575635464","3575635471","GB","GBR","UNITED KINGDOM" -"3575635472","3575635583","BE","BEL","BELGIUM" -"3575635584","3575635615","EG","EGY","EGYPT" -"3575635616","3575635631","FI","FIN","FINLAND" -"3575635632","3575635647","BE","BEL","BELGIUM" -"3575635648","3575635679","GB","GBR","UNITED KINGDOM" -"3575635680","3575635695","BE","BEL","BELGIUM" -"3575635696","3575635703","GB","GBR","UNITED KINGDOM" -"3575635704","3575635775","BE","BEL","BELGIUM" -"3575635776","3575635839","CH","CHE","SWITZERLAND" -"3575635840","3575635847","GB","GBR","UNITED KINGDOM" -"3575635848","3575635855","FR","FRA","FRANCE" -"3575635856","3575635871","TR","TUR","TURKEY" -"3575635872","3575635983","BE","BEL","BELGIUM" -"3575635984","3575635999","DE","DEU","GERMANY" -"3575636000","3575636143","BE","BEL","BELGIUM" -"3575636144","3575636151","HU","HUN","HUNGARY" -"3575636152","3575636607","BE","BEL","BELGIUM" -"3575636608","3575636735","FR","FRA","FRANCE" -"3575636736","3575636807","BE","BEL","BELGIUM" -"3575636808","3575636815","GB","GBR","UNITED KINGDOM" -"3575636816","3575636823","BE","BEL","BELGIUM" -"3575636824","3575636831","RU","RUS","RUSSIAN FEDERATION" -"3575636832","3575636855","BE","BEL","BELGIUM" -"3575636856","3575636863","DE","DEU","GERMANY" -"3575636864","3575636871","BE","BEL","BELGIUM" -"3575636872","3575636879","CZ","CZE","CZECH REPUBLIC" -"3575636880","3575636895","BE","BEL","BELGIUM" -"3575636896","3575636903","PL","POL","POLAND" -"3575636904","3575636911","CZ","CZE","CZECH REPUBLIC" -"3575636912","3575636927","BE","BEL","BELGIUM" -"3575636928","3575636959","DE","DEU","GERMANY" -"3575636960","3575636983","BE","BEL","BELGIUM" -"3575636984","3575636991","FR","FRA","FRANCE" -"3575636992","3575637039","BE","BEL","BELGIUM" -"3575637040","3575637055","DE","DEU","GERMANY" -"3575637056","3575637151","BE","BEL","BELGIUM" -"3575637152","3575637183","GB","GBR","UNITED KINGDOM" -"3575637184","3575637407","BE","BEL","BELGIUM" -"3575637408","3575637439","LU","LUX","LUXEMBOURG" -"3575637440","3575637471","GB","GBR","UNITED KINGDOM" -"3575637472","3575638103","BE","BEL","BELGIUM" -"3575638104","3575638111","GB","GBR","UNITED KINGDOM" -"3575638112","3575638175","BE","BEL","BELGIUM" -"3575638176","3575638239","GB","GBR","UNITED KINGDOM" -"3575638240","3575638279","BE","BEL","BELGIUM" -"3575638280","3575638287","RU","RUS","RUSSIAN FEDERATION" -"3575638288","3575638303","BE","BEL","BELGIUM" -"3575638304","3575638335","NO","NOR","NORWAY" -"3575638336","3575638527","BE","BEL","BELGIUM" -"3575638528","3575638543","DE","DEU","GERMANY" -"3575638544","3575638559","BE","BEL","BELGIUM" -"3575638560","3575638591","GB","GBR","UNITED KINGDOM" -"3575638592","3575638623","BE","BEL","BELGIUM" -"3575638624","3575638639","PL","POL","POLAND" -"3575638640","3575638719","BE","BEL","BELGIUM" -"3575638720","3575638735","NL","NLD","NETHERLANDS" -"3575638736","3575638751","GR","GRC","GREECE" -"3575638752","3575638767","BE","BEL","BELGIUM" -"3575638768","3575638783","SE","SWE","SWEDEN" -"3575638784","3575638911","BE","BEL","BELGIUM" -"3575638912","3575638943","FR","FRA","FRANCE" -"3575638944","3575638975","GB","GBR","UNITED KINGDOM" -"3575638976","3575639007","BE","BEL","BELGIUM" -"3575639008","3575639011","GB","GBR","UNITED KINGDOM" -"3575639012","3575639023","IE","IRL","IRELAND" -"3575639024","3575639039","PL","POL","POLAND" -"3575639040","3575644159","BE","BEL","BELGIUM" -"3575644160","3575709695","DK","DNK","DENMARK" -"3575709696","3575730175","AT","AUT","AUSTRIA" -"3575730176","3575730191","SA","SAU","SAUDI ARABIA" -"3575730192","3575732735","AT","AUT","AUSTRIA" -"3575732736","3575732991","LI","LIE","LIECHTENSTEIN" -"3575732992","3575736319","AT","AUT","AUSTRIA" -"3575736320","3575736895","LI","LIE","LIECHTENSTEIN" -"3575736896","3575738407","AT","AUT","AUSTRIA" -"3575738408","3575738415","SA","SAU","SAUDI ARABIA" -"3575738416","3575738431","AT","AUT","AUSTRIA" -"3575738432","3575738463","SA","SAU","SAUDI ARABIA" -"3575738464","3575738751","AT","AUT","AUSTRIA" -"3575738752","3575738759","SA","SAU","SAUDI ARABIA" -"3575738760","3575742463","AT","AUT","AUSTRIA" -"3575742464","3575775231","RU","RUS","RUSSIAN FEDERATION" -"3575775232","3575775295","AT","AUT","AUSTRIA" -"3575775296","3575775487","NL","NLD","NETHERLANDS" -"3575775488","3575775743","AT","AUT","AUSTRIA" -"3575775744","3575824383","NL","NLD","NETHERLANDS" -"3575824384","3575832575","KW","KWT","KUWAIT" -"3575832576","3575857151","NL","NLD","NETHERLANDS" -"3575857152","3575857407","BE","BEL","BELGIUM" -"3575857408","3575858529","NL","NLD","NETHERLANDS" -"3575858530","3575858543","US","USA","UNITED STATES" -"3575858544","3575860299","NL","NLD","NETHERLANDS" -"3575860300","3575860303","BE","BEL","BELGIUM" -"3575860304","3575866367","NL","NLD","NETHERLANDS" -"3575866368","3575867135","US","USA","UNITED STATES" -"3575867136","3575873535","NL","NLD","NETHERLANDS" -"3575873536","3575906303","EE","EST","ESTONIA" -"3575906304","3575971839","FR","FRA","FRANCE" -"3575971840","3576037375","ES","ESP","SPAIN" -"3576038208","3576038271","GB","GBR","UNITED KINGDOM" -"3576038336","3576038463","GB","GBR","UNITED KINGDOM" -"3576038528","3576038591","GB","GBR","UNITED KINGDOM" -"3576038912","3576038975","GB","GBR","UNITED KINGDOM" -"3576039168","3576039231","GB","GBR","UNITED KINGDOM" -"3576039360","3576039383","GB","GBR","UNITED KINGDOM" -"3576039392","3576039455","GB","GBR","UNITED KINGDOM" -"3576039520","3576039551","GB","GBR","UNITED KINGDOM" -"3576039584","3576039647","GB","GBR","UNITED KINGDOM" -"3576039808","3576039839","GB","GBR","UNITED KINGDOM" -"3576039904","3576039935","GB","GBR","UNITED KINGDOM" -"3576040064","3576040127","GB","GBR","UNITED KINGDOM" -"3576040216","3576040223","GB","GBR","UNITED KINGDOM" -"3576040272","3576040287","GB","GBR","UNITED KINGDOM" -"3576040352","3576040383","GB","GBR","UNITED KINGDOM" -"3576040832","3576040959","GB","GBR","UNITED KINGDOM" -"3576041472","3576041535","GB","GBR","UNITED KINGDOM" -"3576041728","3576041799","GB","GBR","UNITED KINGDOM" -"3576041832","3576041847","GB","GBR","UNITED KINGDOM" -"3576041864","3576041871","GB","GBR","UNITED KINGDOM" -"3576041880","3576041887","GB","GBR","UNITED KINGDOM" -"3576041904","3576041919","GB","GBR","UNITED KINGDOM" -"3576041936","3576041943","GB","GBR","UNITED KINGDOM" -"3576041952","3576041975","GB","GBR","UNITED KINGDOM" -"3576042112","3576042239","GB","GBR","UNITED KINGDOM" -"3576042496","3576042623","GB","GBR","UNITED KINGDOM" -"3576042688","3576042815","GB","GBR","UNITED KINGDOM" -"3576045568","3576045599","GB","GBR","UNITED KINGDOM" -"3576045664","3576045679","GB","GBR","UNITED KINGDOM" -"3576045712","3576045735","GB","GBR","UNITED KINGDOM" -"3576045800","3576045807","GB","GBR","UNITED KINGDOM" -"3576045816","3576045823","GB","GBR","UNITED KINGDOM" -"3576048640","3576048767","GB","GBR","UNITED KINGDOM" -"3576048960","3576049023","GB","GBR","UNITED KINGDOM" -"3576049152","3576050047","GB","GBR","UNITED KINGDOM" -"3576053760","3576054911","GB","GBR","UNITED KINGDOM" -"3576055104","3576055111","GB","GBR","UNITED KINGDOM" -"3576055120","3576055127","GB","GBR","UNITED KINGDOM" -"3576055152","3576055167","GB","GBR","UNITED KINGDOM" -"3576055184","3576055199","GB","GBR","UNITED KINGDOM" -"3576055208","3576055215","GB","GBR","UNITED KINGDOM" -"3576055280","3576055551","GB","GBR","UNITED KINGDOM" -"3576055680","3576055871","GB","GBR","UNITED KINGDOM" -"3576055936","3576055999","GB","GBR","UNITED KINGDOM" -"3576056192","3576056255","GB","GBR","UNITED KINGDOM" -"3576056320","3576056447","GB","GBR","UNITED KINGDOM" -"3576056704","3576056767","GB","GBR","UNITED KINGDOM" -"3576056856","3576056871","GB","GBR","UNITED KINGDOM" -"3576056880","3576056887","GB","GBR","UNITED KINGDOM" -"3576056896","3576056903","GB","GBR","UNITED KINGDOM" -"3576056920","3576056927","GB","GBR","UNITED KINGDOM" -"3576056936","3576056943","GB","GBR","UNITED KINGDOM" -"3576056952","3576056975","GB","GBR","UNITED KINGDOM" -"3576056992","3576057007","GB","GBR","UNITED KINGDOM" -"3576057040","3576057055","GB","GBR","UNITED KINGDOM" -"3576057632","3576057647","GB","GBR","UNITED KINGDOM" -"3576057712","3576057743","GB","GBR","UNITED KINGDOM" -"3576057760","3576057775","GB","GBR","UNITED KINGDOM" -"3576057824","3576057839","GB","GBR","UNITED KINGDOM" -"3576058880","3576059007","GB","GBR","UNITED KINGDOM" -"3576059648","3576059679","GB","GBR","UNITED KINGDOM" -"3576059712","3576059743","GB","GBR","UNITED KINGDOM" -"3576059776","3576059807","GB","GBR","UNITED KINGDOM" -"3576060096","3576060159","GB","GBR","UNITED KINGDOM" -"3576060288","3576060351","GB","GBR","UNITED KINGDOM" -"3576061040","3576061055","GB","GBR","UNITED KINGDOM" -"3576061120","3576061135","GB","GBR","UNITED KINGDOM" -"3576061184","3576061247","GB","GBR","UNITED KINGDOM" -"3576061312","3576061439","GB","GBR","UNITED KINGDOM" -"3576061584","3576061591","GB","GBR","UNITED KINGDOM" -"3576061620","3576061631","GB","GBR","UNITED KINGDOM" -"3576061640","3576061647","GB","GBR","UNITED KINGDOM" -"3576061688","3576061695","GB","GBR","UNITED KINGDOM" -"3576062464","3576062479","GB","GBR","UNITED KINGDOM" -"3576064320","3576064448","GB","GBR","UNITED KINGDOM" -"3576064544","3576064559","GB","GBR","UNITED KINGDOM" -"3576065408","3576065535","GB","GBR","UNITED KINGDOM" -"3576065856","3576065887","GB","GBR","UNITED KINGDOM" -"3576066288","3576066295","GB","GBR","UNITED KINGDOM" -"3576066304","3576066431","GB","GBR","UNITED KINGDOM" -"3576067072","3576067199","GB","GBR","UNITED KINGDOM" -"3576067248","3576067255","GB","GBR","UNITED KINGDOM" -"3576068352","3576068479","GB","GBR","UNITED KINGDOM" -"3576068864","3576068927","GB","GBR","UNITED KINGDOM" -"3576069056","3576069119","GB","GBR","UNITED KINGDOM" -"3576069248","3576069279","GB","GBR","UNITED KINGDOM" -"3576069312","3576069343","GB","GBR","UNITED KINGDOM" -"3576070696","3576070703","GB","GBR","UNITED KINGDOM" -"3576070712","3576070719","GB","GBR","UNITED KINGDOM" -"3576070728","3576070735","GB","GBR","UNITED KINGDOM" -"3576070776","3576070783","GB","GBR","UNITED KINGDOM" -"3576071296","3576071423","GB","GBR","UNITED KINGDOM" -"3576071552","3576071679","GB","GBR","UNITED KINGDOM" -"3576071936","3576071951","GB","GBR","UNITED KINGDOM" -"3576072064","3576072079","GB","GBR","UNITED KINGDOM" -"3576072288","3576072319","GB","GBR","UNITED KINGDOM" -"3576072416","3576072511","GB","GBR","UNITED KINGDOM" -"3576073216","3576073279","GB","GBR","UNITED KINGDOM" -"3576074752","3576074879","GB","GBR","UNITED KINGDOM" -"3576075104","3576075135","GB","GBR","UNITED KINGDOM" -"3576075264","3576075327","GB","GBR","UNITED KINGDOM" -"3576075648","3576075711","GB","GBR","UNITED KINGDOM" -"3576075776","3576075903","GB","GBR","UNITED KINGDOM" -"3576076272","3576076351","GB","GBR","UNITED KINGDOM" -"3576076568","3576076575","GB","GBR","UNITED KINGDOM" -"3576076624","3576076631","GB","GBR","UNITED KINGDOM" -"3576076704","3576076719","GB","GBR","UNITED KINGDOM" -"3576076784","3576076791","GB","GBR","UNITED KINGDOM" -"3576077440","3576077471","GB","GBR","UNITED KINGDOM" -"3576077568","3576077695","GB","GBR","UNITED KINGDOM" -"3576077872","3576077887","GB","GBR","UNITED KINGDOM" -"3576077936","3576077967","GB","GBR","UNITED KINGDOM" -"3576078080","3576078175","GB","GBR","UNITED KINGDOM" -"3576078464","3576078591","GB","GBR","UNITED KINGDOM" -"3576079616","3576079871","GB","GBR","UNITED KINGDOM" -"3576080000","3576080127","GB","GBR","UNITED KINGDOM" -"3576080224","3576080255","GB","GBR","UNITED KINGDOM" -"3576080776","3576080799","GB","GBR","UNITED KINGDOM" -"3576080808","3576080815","GB","GBR","UNITED KINGDOM" -"3576080824","3576080831","GB","GBR","UNITED KINGDOM" -"3576082080","3576082111","GB","GBR","UNITED KINGDOM" -"3576082192","3576082223","GB","GBR","UNITED KINGDOM" -"3576082688","3576082943","GB","GBR","UNITED KINGDOM" -"3576083968","3576084031","GB","GBR","UNITED KINGDOM" -"3576084480","3576084543","GB","GBR","UNITED KINGDOM" -"3576084608","3576084671","GB","GBR","UNITED KINGDOM" -"3576084704","3576084735","GB","GBR","UNITED KINGDOM" -"3576084864","3576084927","GB","GBR","UNITED KINGDOM" -"3576085184","3576085215","GB","GBR","UNITED KINGDOM" -"3576085696","3576085711","GB","GBR","UNITED KINGDOM" -"3576086016","3576086143","GB","GBR","UNITED KINGDOM" -"3576086368","3576086431","GB","GBR","UNITED KINGDOM" -"3576086496","3576086527","GB","GBR","UNITED KINGDOM" -"3576086568","3576086571","GB","GBR","UNITED KINGDOM" -"3576086576","3576086591","GB","GBR","UNITED KINGDOM" -"3576086600","3576086603","GB","GBR","UNITED KINGDOM" -"3576087808","3576087823","GB","GBR","UNITED KINGDOM" -"3576087952","3576087967","GB","GBR","UNITED KINGDOM" -"3576088032","3576088047","GB","GBR","UNITED KINGDOM" -"3576088224","3576088231","GB","GBR","UNITED KINGDOM" -"3576088376","3576088383","GB","GBR","UNITED KINGDOM" -"3576088480","3576088511","GB","GBR","UNITED KINGDOM" -"3576088960","3576088967","GB","GBR","UNITED KINGDOM" -"3576089024","3576089039","GB","GBR","UNITED KINGDOM" -"3576089440","3576089471","GB","GBR","UNITED KINGDOM" -"3576089776","3576089791","GB","GBR","UNITED KINGDOM" -"3576089824","3576089839","GB","GBR","UNITED KINGDOM" -"3576091408","3576091423","GB","GBR","UNITED KINGDOM" -"3576091456","3576091479","GB","GBR","UNITED KINGDOM" -"3576091520","3576091535","GB","GBR","UNITED KINGDOM" -"3576091968","3576091983","GB","GBR","UNITED KINGDOM" -"3576092000","3576092031","GB","GBR","UNITED KINGDOM" -"3576092128","3576092159","GB","GBR","UNITED KINGDOM" -"3576092864","3576092895","GB","GBR","UNITED KINGDOM" -"3576093064","3576093071","GB","GBR","UNITED KINGDOM" -"3576093184","3576093247","GB","GBR","UNITED KINGDOM" -"3576095232","3576096767","GB","GBR","UNITED KINGDOM" -"3576099072","3576100863","GB","GBR","UNITED KINGDOM" -"3576101376","3576102911","GB","GBR","UNITED KINGDOM" -"3576102912","3576103167","FR","FRA","FRANCE" -"3576103168","3576103247","GB","GBR","UNITED KINGDOM" -"3576103248","3576103295","FR","FRA","FRANCE" -"3576103296","3576103327","GB","GBR","UNITED KINGDOM" -"3576103328","3576103367","FR","FRA","FRANCE" -"3576103368","3576103375","GB","GBR","UNITED KINGDOM" -"3576103376","3576103455","FR","FRA","FRANCE" -"3576103456","3576103583","GB","GBR","UNITED KINGDOM" -"3576103584","3576103599","FR","FRA","FRANCE" -"3576103600","3576103615","GB","GBR","UNITED KINGDOM" -"3576103616","3576103631","FR","FRA","FRANCE" -"3576103632","3576103679","GB","GBR","UNITED KINGDOM" -"3576103680","3576103935","FR","FRA","FRANCE" -"3576103936","3576104111","GB","GBR","UNITED KINGDOM" -"3576104112","3576104127","FR","FRA","FRANCE" -"3576104128","3576104175","GB","GBR","UNITED KINGDOM" -"3576104176","3576104191","FR","FRA","FRANCE" -"3576104192","3576104319","GB","GBR","UNITED KINGDOM" -"3576104320","3576104351","FR","FRA","FRANCE" -"3576104352","3576104447","GB","GBR","UNITED KINGDOM" -"3576104448","3576104495","FR","FRA","FRANCE" -"3576104496","3576104575","GB","GBR","UNITED KINGDOM" -"3576104576","3576104607","FR","FRA","FRANCE" -"3576104608","3576104639","GB","GBR","UNITED KINGDOM" -"3576104640","3576104655","FR","FRA","FRANCE" -"3576104656","3576104703","GB","GBR","UNITED KINGDOM" -"3576104704","3576104959","FR","FRA","FRANCE" -"3576104960","3576105055","GB","GBR","UNITED KINGDOM" -"3576105056","3576105183","FR","FRA","FRANCE" -"3576105184","3576105215","GB","GBR","UNITED KINGDOM" -"3576105216","3576105535","FR","FRA","FRANCE" -"3576105536","3576105599","GB","GBR","UNITED KINGDOM" -"3576105600","3576105727","FR","FRA","FRANCE" -"3576105728","3576105759","GB","GBR","UNITED KINGDOM" -"3576105760","3576105855","FR","FRA","FRANCE" -"3576105856","3576105991","GB","GBR","UNITED KINGDOM" -"3576105992","3576106047","FR","FRA","FRANCE" -"3576106048","3576106055","GB","GBR","UNITED KINGDOM" -"3576106056","3576106111","FR","FRA","FRANCE" -"3576106112","3576106239","GB","GBR","UNITED KINGDOM" -"3576106240","3576106287","FR","FRA","FRANCE" -"3576106288","3576106559","GB","GBR","UNITED KINGDOM" -"3576106560","3576106751","FR","FRA","FRANCE" -"3576106752","3576107007","GB","GBR","UNITED KINGDOM" -"3576107008","3576107135","FR","FRA","FRANCE" -"3576107136","3576107183","GB","GBR","UNITED KINGDOM" -"3576107184","3576107231","FR","FRA","FRANCE" -"3576107232","3576107263","GB","GBR","UNITED KINGDOM" -"3576107264","3576107295","FR","FRA","FRANCE" -"3576107296","3576107391","GB","GBR","UNITED KINGDOM" -"3576107392","3576107519","FR","FRA","FRANCE" -"3576107520","3576107647","GB","GBR","UNITED KINGDOM" -"3576107648","3576107679","FR","FRA","FRANCE" -"3576107680","3576107695","GB","GBR","UNITED KINGDOM" -"3576107696","3576107759","FR","FRA","FRANCE" -"3576107760","3576107775","GB","GBR","UNITED KINGDOM" -"3576107776","3576107903","FR","FRA","FRANCE" -"3576107904","3576108031","GB","GBR","UNITED KINGDOM" -"3576108032","3576108063","FR","FRA","FRANCE" -"3576108064","3576108079","GB","GBR","UNITED KINGDOM" -"3576108080","3576108159","FR","FRA","FRANCE" -"3576108160","3576108255","GB","GBR","UNITED KINGDOM" -"3576108256","3576108263","FR","FRA","FRANCE" -"3576108264","3576108271","GB","GBR","UNITED KINGDOM" -"3576108272","3576108351","FR","FRA","FRANCE" -"3576108352","3576108511","GB","GBR","UNITED KINGDOM" -"3576108512","3576108799","FR","FRA","FRANCE" -"3576108800","3576108815","GB","GBR","UNITED KINGDOM" -"3576108816","3576108863","FR","FRA","FRANCE" -"3576108864","3576108991","GB","GBR","UNITED KINGDOM" -"3576108992","3576109023","FR","FRA","FRANCE" -"3576109024","3576109055","DE","DEU","GERMANY" -"3576109056","3576109567","FR","FRA","FRANCE" -"3576109568","3576109695","GB","GBR","UNITED KINGDOM" -"3576109696","3576109791","FR","FRA","FRANCE" -"3576109792","3576109799","GB","GBR","UNITED KINGDOM" -"3576109800","3576109815","FR","FRA","FRANCE" -"3576109816","3576110079","GB","GBR","UNITED KINGDOM" -"3576110080","3576110207","FR","FRA","FRANCE" -"3576110208","3576110271","GB","GBR","UNITED KINGDOM" -"3576110272","3576110335","FR","FRA","FRANCE" -"3576110336","3576110367","GB","GBR","UNITED KINGDOM" -"3576110368","3576110463","FR","FRA","FRANCE" -"3576110464","3576110575","GB","GBR","UNITED KINGDOM" -"3576110576","3576110847","FR","FRA","FRANCE" -"3576110848","3576111103","GB","GBR","UNITED KINGDOM" -"3576111104","3576111231","FR","FRA","FRANCE" -"3576111232","3576111423","GB","GBR","UNITED KINGDOM" -"3576111424","3576111599","FR","FRA","FRANCE" -"3576111600","3576111615","GB","GBR","UNITED KINGDOM" -"3576111616","3576111647","FR","FRA","FRANCE" -"3576111648","3576111679","GB","GBR","UNITED KINGDOM" -"3576111680","3576111711","FR","FRA","FRANCE" -"3576111712","3576111727","GB","GBR","UNITED KINGDOM" -"3576111728","3576111807","FR","FRA","FRANCE" -"3576111808","3576112383","GB","GBR","UNITED KINGDOM" -"3576112384","3576112543","FR","FRA","FRANCE" -"3576112544","3576113407","GB","GBR","UNITED KINGDOM" -"3576113408","3576113535","FR","FRA","FRANCE" -"3576113536","3576119295","GB","GBR","UNITED KINGDOM" -"3576119296","3576119455","CH","CHE","SWITZERLAND" -"3576119456","3576119471","BE","BEL","BELGIUM" -"3576119472","3576127487","CH","CHE","SWITZERLAND" -"3576127488","3576127615","GB","GBR","UNITED KINGDOM" -"3576127616","3576127647","FR","FRA","FRANCE" -"3576127648","3576127679","GB","GBR","UNITED KINGDOM" -"3576127680","3576127687","FR","FRA","FRANCE" -"3576127688","3576127695","GB","GBR","UNITED KINGDOM" -"3576127696","3576127703","FR","FRA","FRANCE" -"3576127704","3576131583","GB","GBR","UNITED KINGDOM" -"3576131584","3576135679","CH","CHE","SWITZERLAND" -"3576135680","3576168447","DE","DEU","GERMANY" -"3576168448","3576233983","GB","GBR","UNITED KINGDOM" -"3576233984","3576236671","FR","FRA","FRANCE" -"3576236672","3576236703","GB","GBR","UNITED KINGDOM" -"3576236704","3576236879","FR","FRA","FRANCE" -"3576236880","3576236927","GB","GBR","UNITED KINGDOM" -"3576236928","3576237063","FR","FRA","FRANCE" -"3576237064","3576237071","GB","GBR","UNITED KINGDOM" -"3576237072","3576237087","FR","FRA","FRANCE" -"3576237088","3576237119","GB","GBR","UNITED KINGDOM" -"3576237120","3576237231","FR","FRA","FRANCE" -"3576237232","3576237279","GB","GBR","UNITED KINGDOM" -"3576237280","3576237455","FR","FRA","FRANCE" -"3576237456","3576237503","GB","GBR","UNITED KINGDOM" -"3576237504","3576237567","FR","FRA","FRANCE" -"3576237568","3576237583","GB","GBR","UNITED KINGDOM" -"3576237584","3576237599","FR","FRA","FRANCE" -"3576237600","3576237647","GB","GBR","UNITED KINGDOM" -"3576237648","3576237711","FR","FRA","FRANCE" -"3576237712","3576237743","GB","GBR","UNITED KINGDOM" -"3576237744","3576237855","FR","FRA","FRANCE" -"3576237856","3576237871","GB","GBR","UNITED KINGDOM" -"3576237872","3576237887","FR","FRA","FRANCE" -"3576237888","3576237919","GB","GBR","UNITED KINGDOM" -"3576237920","3576237935","FR","FRA","FRANCE" -"3576237936","3576237967","GB","GBR","UNITED KINGDOM" -"3576237968","3576237983","FR","FRA","FRANCE" -"3576237984","3576238015","GB","GBR","UNITED KINGDOM" -"3576238016","3576238143","FR","FRA","FRANCE" -"3576238144","3576238159","GB","GBR","UNITED KINGDOM" -"3576238160","3576238271","FR","FRA","FRANCE" -"3576238272","3576238335","GB","GBR","UNITED KINGDOM" -"3576238336","3576238447","FR","FRA","FRANCE" -"3576238448","3576238463","GB","GBR","UNITED KINGDOM" -"3576238464","3576238511","FR","FRA","FRANCE" -"3576238512","3576238527","GB","GBR","UNITED KINGDOM" -"3576238528","3576238559","FR","FRA","FRANCE" -"3576238560","3576238575","GB","GBR","UNITED KINGDOM" -"3576238576","3576238607","FR","FRA","FRANCE" -"3576238608","3576238623","GB","GBR","UNITED KINGDOM" -"3576238624","3576238639","FR","FRA","FRANCE" -"3576238640","3576238879","GB","GBR","UNITED KINGDOM" -"3576238880","3576238895","FR","FRA","FRANCE" -"3576238896","3576238911","GB","GBR","UNITED KINGDOM" -"3576238912","3576238927","FR","FRA","FRANCE" -"3576238928","3576238975","GB","GBR","UNITED KINGDOM" -"3576238976","3576239007","FR","FRA","FRANCE" -"3576239008","3576239023","GB","GBR","UNITED KINGDOM" -"3576239024","3576239039","FR","FRA","FRANCE" -"3576239040","3576239071","GB","GBR","UNITED KINGDOM" -"3576239072","3576239087","FR","FRA","FRANCE" -"3576239088","3576239103","GB","GBR","UNITED KINGDOM" -"3576239104","3576239615","FR","FRA","FRANCE" -"3576239616","3576239871","GB","GBR","UNITED KINGDOM" -"3576239872","3576240039","FR","FRA","FRANCE" -"3576240040","3576240047","GB","GBR","UNITED KINGDOM" -"3576240048","3576240111","FR","FRA","FRANCE" -"3576240112","3576240127","GB","GBR","UNITED KINGDOM" -"3576240128","3576240639","FR","FRA","FRANCE" -"3576240640","3576240895","GB","GBR","UNITED KINGDOM" -"3576240896","3576241183","FR","FRA","FRANCE" -"3576241184","3576241215","GB","GBR","UNITED KINGDOM" -"3576241216","3576241287","FR","FRA","FRANCE" -"3576241288","3576241295","GB","GBR","UNITED KINGDOM" -"3576241296","3576241343","FR","FRA","FRANCE" -"3576241344","3576241351","GB","GBR","UNITED KINGDOM" -"3576241352","3576241383","FR","FRA","FRANCE" -"3576241384","3576241399","GB","GBR","UNITED KINGDOM" -"3576241400","3576241951","FR","FRA","FRANCE" -"3576241952","3576242047","GB","GBR","UNITED KINGDOM" -"3576242048","3576242183","FR","FRA","FRANCE" -"3576242184","3576242191","GB","GBR","UNITED KINGDOM" -"3576242192","3576243967","FR","FRA","FRANCE" -"3576243968","3576244223","GB","GBR","UNITED KINGDOM" -"3576244224","3576246399","FR","FRA","FRANCE" -"3576246400","3576246527","GB","GBR","UNITED KINGDOM" -"3576246528","3576246656","FR","FRA","FRANCE" -"3576246657","3576246727","GB","GBR","UNITED KINGDOM" -"3576246728","3576246735","FR","FRA","FRANCE" -"3576246736","3576246783","GB","GBR","UNITED KINGDOM" -"3576246784","3576249359","FR","FRA","FRANCE" -"3576249360","3576249367","GB","GBR","UNITED KINGDOM" -"3576249368","3576249463","FR","FRA","FRANCE" -"3576249464","3576249471","GB","GBR","UNITED KINGDOM" -"3576249472","3576249527","FR","FRA","FRANCE" -"3576249528","3576249535","GB","GBR","UNITED KINGDOM" -"3576249536","3576249743","FR","FRA","FRANCE" -"3576249744","3576249791","GB","GBR","UNITED KINGDOM" -"3576249792","3576249807","FR","FRA","FRANCE" -"3576249808","3576249823","GB","GBR","UNITED KINGDOM" -"3576249824","3576249831","FR","FRA","FRANCE" -"3576249832","3576249839","GB","GBR","UNITED KINGDOM" -"3576249840","3576251407","FR","FRA","FRANCE" -"3576251408","3576251519","GB","GBR","UNITED KINGDOM" -"3576251520","3576251583","FR","FRA","FRANCE" -"3576251584","3576251599","GB","GBR","UNITED KINGDOM" -"3576251600","3576251615","FR","FRA","FRANCE" -"3576251616","3576251647","GB","GBR","UNITED KINGDOM" -"3576251648","3576252415","FR","FRA","FRANCE" -"3576252416","3576252671","GB","GBR","UNITED KINGDOM" -"3576252672","3576253159","FR","FRA","FRANCE" -"3576253160","3576253183","GB","GBR","UNITED KINGDOM" -"3576253184","3576254487","FR","FRA","FRANCE" -"3576254488","3576254495","GB","GBR","UNITED KINGDOM" -"3576254496","3576254551","FR","FRA","FRANCE" -"3576254552","3576254559","GB","GBR","UNITED KINGDOM" -"3576254560","3576254607","FR","FRA","FRANCE" -"3576254608","3576254615","GB","GBR","UNITED KINGDOM" -"3576254616","3576254623","FR","FRA","FRANCE" -"3576254624","3576254639","GB","GBR","UNITED KINGDOM" -"3576254640","3576254655","FR","FRA","FRANCE" -"3576254656","3576254687","GB","GBR","UNITED KINGDOM" -"3576254688","3576254847","FR","FRA","FRANCE" -"3576254848","3576254855","GB","GBR","UNITED KINGDOM" -"3576254856","3576254863","FR","FRA","FRANCE" -"3576254864","3576254879","GB","GBR","UNITED KINGDOM" -"3576254880","3576254895","FR","FRA","FRANCE" -"3576254896","3576254903","GB","GBR","UNITED KINGDOM" -"3576254904","3576255087","FR","FRA","FRANCE" -"3576255088","3576255199","GB","GBR","UNITED KINGDOM" -"3576255200","3576255215","FR","FRA","FRANCE" -"3576255216","3576255263","GB","GBR","UNITED KINGDOM" -"3576255264","3576255319","FR","FRA","FRANCE" -"3576255320","3576255327","GB","GBR","UNITED KINGDOM" -"3576255328","3576255375","FR","FRA","FRANCE" -"3576255376","3576255383","GB","GBR","UNITED KINGDOM" -"3576255384","3576255407","FR","FRA","FRANCE" -"3576255408","3576255423","GB","GBR","UNITED KINGDOM" -"3576255424","3576255431","FR","FRA","FRANCE" -"3576255432","3576255439","GB","GBR","UNITED KINGDOM" -"3576255440","3576255503","FR","FRA","FRANCE" -"3576255504","3576255511","GB","GBR","UNITED KINGDOM" -"3576255512","3576255519","FR","FRA","FRANCE" -"3576255520","3576255527","GB","GBR","UNITED KINGDOM" -"3576255528","3576255543","FR","FRA","FRANCE" -"3576255544","3576255551","GB","GBR","UNITED KINGDOM" -"3576255552","3576255575","FR","FRA","FRANCE" -"3576255576","3576255583","GB","GBR","UNITED KINGDOM" -"3576255584","3576255631","FR","FRA","FRANCE" -"3576255632","3576255647","GB","GBR","UNITED KINGDOM" -"3576255648","3576255671","FR","FRA","FRANCE" -"3576255672","3576255679","GB","GBR","UNITED KINGDOM" -"3576255680","3576255703","FR","FRA","FRANCE" -"3576255704","3576255719","GB","GBR","UNITED KINGDOM" -"3576255720","3576255743","FR","FRA","FRANCE" -"3576255744","3576255759","GB","GBR","UNITED KINGDOM" -"3576255760","3576255839","FR","FRA","FRANCE" -"3576255840","3576255871","GB","GBR","UNITED KINGDOM" -"3576255872","3576255887","FR","FRA","FRANCE" -"3576255888","3576255919","GB","GBR","UNITED KINGDOM" -"3576255920","3576255943","FR","FRA","FRANCE" -"3576255944","3576255975","GB","GBR","UNITED KINGDOM" -"3576255976","3576255983","FR","FRA","FRANCE" -"3576255984","3576256047","GB","GBR","UNITED KINGDOM" -"3576256048","3576256111","FR","FRA","FRANCE" -"3576256112","3576256143","GB","GBR","UNITED KINGDOM" -"3576256144","3576256239","FR","FRA","FRANCE" -"3576256240","3576256255","GB","GBR","UNITED KINGDOM" -"3576256256","3576256351","FR","FRA","FRANCE" -"3576256352","3576256367","GB","GBR","UNITED KINGDOM" -"3576256368","3576256383","FR","FRA","FRANCE" -"3576256384","3576256415","GB","GBR","UNITED KINGDOM" -"3576256416","3576256431","FR","FRA","FRANCE" -"3576256432","3576256447","GB","GBR","UNITED KINGDOM" -"3576256448","3576256463","FR","FRA","FRANCE" -"3576256464","3576256527","GB","GBR","UNITED KINGDOM" -"3576256528","3576256543","FR","FRA","FRANCE" -"3576256544","3576256559","GB","GBR","UNITED KINGDOM" -"3576256560","3576256607","FR","FRA","FRANCE" -"3576256608","3576256623","GB","GBR","UNITED KINGDOM" -"3576256624","3576256639","FR","FRA","FRANCE" -"3576256640","3576256671","GB","GBR","UNITED KINGDOM" -"3576256672","3576256687","FR","FRA","FRANCE" -"3576256688","3576256767","GB","GBR","UNITED KINGDOM" -"3576256768","3576256895","FR","FRA","FRANCE" -"3576256896","3576256959","GB","GBR","UNITED KINGDOM" -"3576256960","3576256991","FR","FRA","FRANCE" -"3576256992","3576257007","GB","GBR","UNITED KINGDOM" -"3576257008","3576257079","FR","FRA","FRANCE" -"3576257080","3576257087","GB","GBR","UNITED KINGDOM" -"3576257088","3576257103","FR","FRA","FRANCE" -"3576257104","3576257111","GB","GBR","UNITED KINGDOM" -"3576257112","3576257135","FR","FRA","FRANCE" -"3576257136","3576257151","GB","GBR","UNITED KINGDOM" -"3576257152","3576257159","FR","FRA","FRANCE" -"3576257160","3576257167","GB","GBR","UNITED KINGDOM" -"3576257168","3576257287","FR","FRA","FRANCE" -"3576257288","3576257295","GB","GBR","UNITED KINGDOM" -"3576257296","3576257327","FR","FRA","FRANCE" -"3576257328","3576257359","GB","GBR","UNITED KINGDOM" -"3576257360","3576257367","FR","FRA","FRANCE" -"3576257368","3576257375","GB","GBR","UNITED KINGDOM" -"3576257376","3576257487","FR","FRA","FRANCE" -"3576257488","3576257495","GB","GBR","UNITED KINGDOM" -"3576257496","3576257503","FR","FRA","FRANCE" -"3576257504","3576257535","GB","GBR","UNITED KINGDOM" -"3576257536","3576257551","FR","FRA","FRANCE" -"3576257552","3576257583","GB","GBR","UNITED KINGDOM" -"3576257584","3576257631","FR","FRA","FRANCE" -"3576257632","3576257647","GB","GBR","UNITED KINGDOM" -"3576257648","3576257727","FR","FRA","FRANCE" -"3576257728","3576257807","GB","GBR","UNITED KINGDOM" -"3576257808","3576257823","FR","FRA","FRANCE" -"3576257824","3576257839","GB","GBR","UNITED KINGDOM" -"3576257840","3576257855","FR","FRA","FRANCE" -"3576257856","3576257871","GB","GBR","UNITED KINGDOM" -"3576257872","3576257887","FR","FRA","FRANCE" -"3576257888","3576257903","GB","GBR","UNITED KINGDOM" -"3576257904","3576257983","FR","FRA","FRANCE" -"3576257984","3576257999","GB","GBR","UNITED KINGDOM" -"3576258000","3576258055","FR","FRA","FRANCE" -"3576258056","3576258063","GB","GBR","UNITED KINGDOM" -"3576258064","3576258079","FR","FRA","FRANCE" -"3576258080","3576258095","GB","GBR","UNITED KINGDOM" -"3576258096","3576258167","FR","FRA","FRANCE" -"3576258168","3576258175","GB","GBR","UNITED KINGDOM" -"3576258176","3576258351","FR","FRA","FRANCE" -"3576258352","3576258399","GB","GBR","UNITED KINGDOM" -"3576258400","3576258415","FR","FRA","FRANCE" -"3576258416","3576258431","GB","GBR","UNITED KINGDOM" -"3576258432","3576258447","FR","FRA","FRANCE" -"3576258448","3576258479","GB","GBR","UNITED KINGDOM" -"3576258480","3576258495","FR","FRA","FRANCE" -"3576258496","3576258511","GB","GBR","UNITED KINGDOM" -"3576258512","3576258527","FR","FRA","FRANCE" -"3576258528","3576258575","GB","GBR","UNITED KINGDOM" -"3576258576","3576258591","FR","FRA","FRANCE" -"3576258592","3576258623","GB","GBR","UNITED KINGDOM" -"3576258624","3576258671","FR","FRA","FRANCE" -"3576258672","3576258687","GB","GBR","UNITED KINGDOM" -"3576258688","3576258703","FR","FRA","FRANCE" -"3576258704","3576258783","GB","GBR","UNITED KINGDOM" -"3576258784","3576258863","FR","FRA","FRANCE" -"3576258864","3576258895","GB","GBR","UNITED KINGDOM" -"3576258896","3576258943","FR","FRA","FRANCE" -"3576258944","3576259007","GB","GBR","UNITED KINGDOM" -"3576259008","3576259023","FR","FRA","FRANCE" -"3576259024","3576259039","GB","GBR","UNITED KINGDOM" -"3576259040","3576259071","FR","FRA","FRANCE" -"3576259072","3576259087","GB","GBR","UNITED KINGDOM" -"3576259088","3576259103","FR","FRA","FRANCE" -"3576259104","3576259199","GB","GBR","UNITED KINGDOM" -"3576259200","3576259231","FR","FRA","FRANCE" -"3576259232","3576259247","GB","GBR","UNITED KINGDOM" -"3576259248","3576259279","FR","FRA","FRANCE" -"3576259280","3576259295","GB","GBR","UNITED KINGDOM" -"3576259296","3576259311","FR","FRA","FRANCE" -"3576259312","3576259327","GB","GBR","UNITED KINGDOM" -"3576259328","3576259343","FR","FRA","FRANCE" -"3576259344","3576259391","GB","GBR","UNITED KINGDOM" -"3576259392","3576259423","FR","FRA","FRANCE" -"3576259424","3576259439","GB","GBR","UNITED KINGDOM" -"3576259440","3576259471","FR","FRA","FRANCE" -"3576259472","3576259487","GB","GBR","UNITED KINGDOM" -"3576259488","3576259519","FR","FRA","FRANCE" -"3576259520","3576259583","GB","GBR","UNITED KINGDOM" -"3576259584","3576259967","FR","FRA","FRANCE" -"3576259968","3576259975","GB","GBR","UNITED KINGDOM" -"3576259976","3576259991","FR","FRA","FRANCE" -"3576259992","3576259999","GB","GBR","UNITED KINGDOM" -"3576260000","3576260015","FR","FRA","FRANCE" -"3576260016","3576260031","GB","GBR","UNITED KINGDOM" -"3576260032","3576260079","FR","FRA","FRANCE" -"3576260080","3576260095","GB","GBR","UNITED KINGDOM" -"3576260096","3576260175","FR","FRA","FRANCE" -"3576260176","3576260191","GB","GBR","UNITED KINGDOM" -"3576260192","3576260207","FR","FRA","FRANCE" -"3576260208","3576260223","GB","GBR","UNITED KINGDOM" -"3576260224","3576260239","FR","FRA","FRANCE" -"3576260240","3576260255","GB","GBR","UNITED KINGDOM" -"3576260256","3576260271","FR","FRA","FRANCE" -"3576260272","3576260287","GB","GBR","UNITED KINGDOM" -"3576260288","3576260303","FR","FRA","FRANCE" -"3576260304","3576260335","GB","GBR","UNITED KINGDOM" -"3576260336","3576260463","FR","FRA","FRANCE" -"3576260464","3576260543","GB","GBR","UNITED KINGDOM" -"3576260544","3576260559","FR","FRA","FRANCE" -"3576260560","3576260607","GB","GBR","UNITED KINGDOM" -"3576260608","3576260655","FR","FRA","FRANCE" -"3576260656","3576260663","GB","GBR","UNITED KINGDOM" -"3576260664","3576260671","FR","FRA","FRANCE" -"3576260672","3576260679","GB","GBR","UNITED KINGDOM" -"3576260680","3576260703","FR","FRA","FRANCE" -"3576260704","3576260735","GB","GBR","UNITED KINGDOM" -"3576260736","3576260903","FR","FRA","FRANCE" -"3576260904","3576260927","GB","GBR","UNITED KINGDOM" -"3576260928","3576260959","FR","FRA","FRANCE" -"3576260960","3576260999","GB","GBR","UNITED KINGDOM" -"3576261000","3576261015","FR","FRA","FRANCE" -"3576261016","3576261023","GB","GBR","UNITED KINGDOM" -"3576261024","3576261047","FR","FRA","FRANCE" -"3576261048","3576261055","GB","GBR","UNITED KINGDOM" -"3576261056","3576261063","FR","FRA","FRANCE" -"3576261064","3576261071","GB","GBR","UNITED KINGDOM" -"3576261072","3576261079","FR","FRA","FRANCE" -"3576261080","3576261095","GB","GBR","UNITED KINGDOM" -"3576261096","3576261103","FR","FRA","FRANCE" -"3576261104","3576261111","GB","GBR","UNITED KINGDOM" -"3576261112","3576261375","FR","FRA","FRANCE" -"3576261376","3576261631","GB","GBR","UNITED KINGDOM" -"3576261632","3576261927","FR","FRA","FRANCE" -"3576261928","3576261935","GB","GBR","UNITED KINGDOM" -"3576261936","3576263439","FR","FRA","FRANCE" -"3576263440","3576263487","GB","GBR","UNITED KINGDOM" -"3576263488","3576263519","FR","FRA","FRANCE" -"3576263520","3576263527","GB","GBR","UNITED KINGDOM" -"3576263528","3576263535","FR","FRA","FRANCE" -"3576263536","3576263551","GB","GBR","UNITED KINGDOM" -"3576263552","3576263567","FR","FRA","FRANCE" -"3576263568","3576263575","GB","GBR","UNITED KINGDOM" -"3576263576","3576263583","FR","FRA","FRANCE" -"3576263584","3576263599","GB","GBR","UNITED KINGDOM" -"3576263600","3576263615","FR","FRA","FRANCE" -"3576263616","3576263623","GB","GBR","UNITED KINGDOM" -"3576263624","3576263751","FR","FRA","FRANCE" -"3576263752","3576263759","GB","GBR","UNITED KINGDOM" -"3576263760","3576263791","FR","FRA","FRANCE" -"3576263792","3576263887","GB","GBR","UNITED KINGDOM" -"3576263888","3576263911","FR","FRA","FRANCE" -"3576263912","3576263919","GB","GBR","UNITED KINGDOM" -"3576263920","3576264295","FR","FRA","FRANCE" -"3576264296","3576264319","GB","GBR","UNITED KINGDOM" -"3576264320","3576264383","FR","FRA","FRANCE" -"3576264384","3576264399","GB","GBR","UNITED KINGDOM" -"3576264400","3576264447","FR","FRA","FRANCE" -"3576264448","3576264511","GB","GBR","UNITED KINGDOM" -"3576264512","3576264543","FR","FRA","FRANCE" -"3576264544","3576264559","GB","GBR","UNITED KINGDOM" -"3576264560","3576264575","FR","FRA","FRANCE" -"3576264576","3576264623","GB","GBR","UNITED KINGDOM" -"3576264624","3576264639","FR","FRA","FRANCE" -"3576264640","3576264687","GB","GBR","UNITED KINGDOM" -"3576264688","3576265375","FR","FRA","FRANCE" -"3576265376","3576265383","GB","GBR","UNITED KINGDOM" -"3576265384","3576265399","FR","FRA","FRANCE" -"3576265400","3576265423","GB","GBR","UNITED KINGDOM" -"3576265424","3576265463","FR","FRA","FRANCE" -"3576265464","3576265471","GB","GBR","UNITED KINGDOM" -"3576265472","3576265807","FR","FRA","FRANCE" -"3576265808","3576265823","GB","GBR","UNITED KINGDOM" -"3576265824","3576265831","FR","FRA","FRANCE" -"3576265832","3576265839","GB","GBR","UNITED KINGDOM" -"3576265840","3576265847","FR","FRA","FRANCE" -"3576265848","3576265863","GB","GBR","UNITED KINGDOM" -"3576265864","3576265879","FR","FRA","FRANCE" -"3576265880","3576265895","GB","GBR","UNITED KINGDOM" -"3576265896","3576266663","FR","FRA","FRANCE" -"3576266664","3576266671","GB","GBR","UNITED KINGDOM" -"3576266672","3576266687","FR","FRA","FRANCE" -"3576266688","3576266751","GB","GBR","UNITED KINGDOM" -"3576266752","3576299519","FR","FRA","FRANCE" -"3576299520","3576365055","AE","ARE","UNITED ARAB EMIRATES" -"3576365056","3576430591","TR","TUR","TURKEY" -"3576430592","3576496127","FR","FRA","FRANCE" -"3576496128","3576561663","IT","ITA","ITALY" -"3576561664","3576603135","NL","NLD","NETHERLANDS" -"3576603136","3576603391","BE","BEL","BELGIUM" -"3576603392","3576603647","FR","FRA","FRANCE" -"3576603648","3576604159","NL","NLD","NETHERLANDS" -"3576604160","3576604415","HU","HUN","HUNGARY" -"3576604416","3576605183","NL","NLD","NETHERLANDS" -"3576605184","3576605439","RO","ROM","ROMANIA" -"3576605440","3576605695","NL","NLD","NETHERLANDS" -"3576605696","3576605951","CZ","CZE","CZECH REPUBLIC" -"3576605952","3576606207","AT","AUT","AUSTRIA" -"3576606208","3576606463","GB","GBR","UNITED KINGDOM" -"3576606464","3576606719","NL","NLD","NETHERLANDS" -"3576606720","3576606975","SE","SWE","SWEDEN" -"3576606976","3576607231","NO","NOR","NORWAY" -"3576607232","3576607487","PL","POL","POLAND" -"3576607488","3576607743","DE","DEU","GERMANY" -"3576607744","3576620031","NL","NLD","NETHERLANDS" -"3576620032","3576620543","SE","SWE","SWEDEN" -"3576620544","3576620799","GB","GBR","UNITED KINGDOM" -"3576620800","3576622335","NL","NLD","NETHERLANDS" -"3576622336","3576622591","GB","GBR","UNITED KINGDOM" -"3576622592","3576623871","NL","NLD","NETHERLANDS" -"3576623872","3576624127","AT","AUT","AUSTRIA" -"3576624128","3576626943","NL","NLD","NETHERLANDS" -"3576626944","3576692735","AT","AUT","AUSTRIA" -"3576692736","3576758271","GB","GBR","UNITED KINGDOM" -"3576758272","3576823807","BE","BEL","BELGIUM" -"3576823808","3576889343","SE","SWE","SWEDEN" -"3576889344","3576954879","NL","NLD","NETHERLANDS" -"3576954880","3576987647","NO","NOR","NORWAY" -"3576987648","3577001983","GB","GBR","UNITED KINGDOM" -"3577001984","3577002495","NL","NLD","NETHERLANDS" -"3577002496","3577020415","GB","GBR","UNITED KINGDOM" -"3577020416","3577085951","NL","NLD","NETHERLANDS" -"3577085952","3577151487","DE","DEU","GERMANY" -"3577151488","3577167871","GB","GBR","UNITED KINGDOM" -"3577184256","3577217023","CH","CHE","SWITZERLAND" -"3577217024","3577263167","FR","FRA","FRANCE" -"3577263168","3577263199","US","USA","UNITED STATES" -"3577263200","3577282559","FR","FRA","FRANCE" -"3577282560","3577348095","IL","ISR","ISRAEL" -"3577348096","3577392767","PT","PRT","PORTUGAL" -"3577392768","3577392783","DE","DEU","GERMANY" -"3577392784","3577413631","PT","PRT","PORTUGAL" -"3577413632","3577417519","RU","RUS","RUSSIAN FEDERATION" -"3577417520","3577417535","KZ","KAZ","KAZAKHSTAN" -"3577417536","3577479167","RU","RUS","RUSSIAN FEDERATION" -"3577479168","3577544703","ES","ESP","SPAIN" -"3577544704","3577545863","DE","DEU","GERMANY" -"3577545864","3577545871","US","USA","UNITED STATES" -"3577545872","3577545983","DE","DEU","GERMANY" -"3577545984","3577546111","SE","SWE","SWEDEN" -"3577546112","3577546239","DE","DEU","GERMANY" -"3577546240","3577546367","US","USA","UNITED STATES" -"3577546368","3577547455","DE","DEU","GERMANY" -"3577547456","3577547519","FR","FRA","FRANCE" -"3577547520","3577551407","DE","DEU","GERMANY" -"3577551408","3577551411","US","USA","UNITED STATES" -"3577551412","3577557215","DE","DEU","GERMANY" -"3577557216","3577557231","US","USA","UNITED STATES" -"3577557232","3577559775","DE","DEU","GERMANY" -"3577559776","3577559783","FR","FRA","FRANCE" -"3577559784","3577562391","DE","DEU","GERMANY" -"3577562392","3577562399","GB","GBR","UNITED KINGDOM" -"3577562400","3577577231","DE","DEU","GERMANY" -"3577577232","3577577247","US","USA","UNITED STATES" -"3577577248","3577592431","DE","DEU","GERMANY" -"3577592432","3577592447","FR","FRA","FRANCE" -"3577592448","3577592743","DE","DEU","GERMANY" -"3577592744","3577592751","IE","IRL","IRELAND" -"3577592752","3577608743","DE","DEU","GERMANY" -"3577608744","3577608751","ES","ESP","SPAIN" -"3577608752","3577610367","DE","DEU","GERMANY" -"3577610368","3577610495","GB","GBR","UNITED KINGDOM" -"3577610496","3577610751","DE","DEU","GERMANY" -"3577610752","3577611199","CH","CHE","SWITZERLAND" -"3577611264","3577612287","DE","DEU","GERMANY" -"3577612320","3577612383","DE","DEU","GERMANY" -"3577612416","3577612543","NO","NOR","NORWAY" -"3577612544","3577612799","HU","HUN","HUNGARY" -"3577612800","3577613055","FI","FIN","FINLAND" -"3577613312","3577613567","DE","DEU","GERMANY" -"3577613888","3577613951","TR","TUR","TURKEY" -"3577614080","3577614111","DE","DEU","GERMANY" -"3577614144","3577614207","DE","DEU","GERMANY" -"3577618432","3577618447","GB","GBR","UNITED KINGDOM" -"3577618448","3577618463","NL","NLD","NETHERLANDS" -"3577618464","3577618559","GB","GBR","UNITED KINGDOM" -"3577618560","3577618623","BE","BEL","BELGIUM" -"3577618656","3577618663","AT","AUT","AUSTRIA" -"3577618688","3577619935","GB","GBR","UNITED KINGDOM" -"3577619968","3577620575","GB","GBR","UNITED KINGDOM" -"3577620624","3577620671","GB","GBR","UNITED KINGDOM" -"3577620672","3577620735","TR","TUR","TURKEY" -"3577620992","3577621055","GB","GBR","UNITED KINGDOM" -"3577621120","3577621151","GB","GBR","UNITED KINGDOM" -"3577621216","3577621223","SK","SVK","SLOVAKIA" -"3577621248","3577622143","GB","GBR","UNITED KINGDOM" -"3577622144","3577622271","DE","DEU","GERMANY" -"3577622272","3577622527","GB","GBR","UNITED KINGDOM" -"3577622592","3577622927","GB","GBR","UNITED KINGDOM" -"3577623040","3577623935","GB","GBR","UNITED KINGDOM" -"3577624064","3577624319","GB","GBR","UNITED KINGDOM" -"3577624448","3577624879","GB","GBR","UNITED KINGDOM" -"3577624896","3577625199","GB","GBR","UNITED KINGDOM" -"3577625208","3577625215","GB","GBR","UNITED KINGDOM" -"3577625232","3577625599","GB","GBR","UNITED KINGDOM" -"3577625824","3577625839","GB","GBR","UNITED KINGDOM" -"3577625840","3577625855","DE","DEU","GERMANY" -"3577625856","3577626175","GB","GBR","UNITED KINGDOM" -"3577626240","3577626367","GB","GBR","UNITED KINGDOM" -"3577626624","3577627135","FR","FRA","FRANCE" -"3577627392","3577627647","GB","GBR","UNITED KINGDOM" -"3577627648","3577627967","FR","FRA","FRANCE" -"3577628000","3577628671","FR","FRA","FRANCE" -"3577628672","3577630719","CH","CHE","SWITZERLAND" -"3577630720","3577631743","GB","GBR","UNITED KINGDOM" -"3577633792","3577633951","CZ","CZE","CZECH REPUBLIC" -"3577633960","3577633967","CZ","CZE","CZECH REPUBLIC" -"3577634048","3577634239","CZ","CZE","CZECH REPUBLIC" -"3577634816","3577635455","FR","FRA","FRANCE" -"3577635520","3577635839","FR","FRA","FRANCE" -"3577635840","3577636863","DE","DEU","GERMANY" -"3577636864","3577638143","GB","GBR","UNITED KINGDOM" -"3577638144","3577638399","BE","BEL","BELGIUM" -"3577638400","3577638911","GB","GBR","UNITED KINGDOM" -"3577638912","3577638959","FR","FRA","FRANCE" -"3577638968","3577639239","FR","FRA","FRANCE" -"3577639248","3577639679","FR","FRA","FRANCE" -"3577639760","3577639783","FR","FRA","FRANCE" -"3577639800","3577639807","FR","FRA","FRANCE" -"3577639840","3577639847","FR","FRA","FRANCE" -"3577639864","3577639871","FR","FRA","FRANCE" -"3577639936","3577640719","FR","FRA","FRANCE" -"3577640728","3577641151","FR","FRA","FRANCE" -"3577641160","3577641175","FR","FRA","FRANCE" -"3577641184","3577641199","FR","FRA","FRANCE" -"3577641216","3577641279","FR","FRA","FRANCE" -"3577641344","3577641407","FR","FRA","FRANCE" -"3577641416","3577641423","FR","FRA","FRANCE" -"3577641472","3577641727","FR","FRA","FRANCE" -"3577641984","3577642111","GB","GBR","UNITED KINGDOM" -"3577642176","3577642239","GB","GBR","UNITED KINGDOM" -"3577642240","3577642623","FR","FRA","FRANCE" -"3577642752","3577643007","FR","FRA","FRANCE" -"3577643008","3577643231","NL","NLD","NETHERLANDS" -"3577643232","3577643247","GB","GBR","UNITED KINGDOM" -"3577643248","3577643263","NL","NLD","NETHERLANDS" -"3577645432","3577645447","NL","NLD","NETHERLANDS" -"3577645456","3577645503","NL","NLD","NETHERLANDS" -"3577645504","3577645567","SK","SVK","SLOVAKIA" -"3577645824","3577645887","NL","NLD","NETHERLANDS" -"3577645904","3577645951","NL","NLD","NETHERLANDS" -"3577646080","3577646207","NL","NLD","NETHERLANDS" -"3577646208","3577646335","NO","NOR","NORWAY" -"3577646336","3577646407","NL","NLD","NETHERLANDS" -"3577646416","3577646527","NL","NLD","NETHERLANDS" -"3577646592","3577646847","NL","NLD","NETHERLANDS" -"3577647104","3577647911","DK","DNK","DENMARK" -"3577647936","3577647967","DK","DNK","DENMARK" -"3577648000","3577648127","DK","DNK","DENMARK" -"3577648384","3577649151","NL","NLD","NETHERLANDS" -"3577651200","3577651455","GB","GBR","UNITED KINGDOM" -"3577652224","3577652671","IT","ITA","ITALY" -"3577652736","3577652743","NO","NOR","NORWAY" -"3577652752","3577652767","NO","NOR","NORWAY" -"3577652864","3577652943","NO","NOR","NORWAY" -"3577652992","3577653119","NO","NOR","NORWAY" -"3577653248","3577655295","IT","ITA","ITALY" -"3577655296","3577655519","AT","AUT","AUSTRIA" -"3577655552","3577655647","AT","AUT","AUSTRIA" -"3577655664","3577655679","AT","AUT","AUSTRIA" -"3577655712","3577655743","AT","AUT","AUSTRIA" -"3577655808","3577656447","AT","AUT","AUSTRIA" -"3577657344","3577657599","GB","GBR","UNITED KINGDOM" -"3577657664","3577659391","GB","GBR","UNITED KINGDOM" -"3577659392","3577659679","GR","GRC","GREECE" -"3577659712","3577659743","GR","GRC","GREECE" -"3577660160","3577660607","BE","BEL","BELGIUM" -"3577660672","3577661439","BE","BEL","BELGIUM" -"3577663488","3577665215","SE","SWE","SWEDEN" -"3577665248","3577665311","SE","SWE","SWEDEN" -"3577665344","3577665375","SE","SWE","SWEDEN" -"3577665408","3577665455","SE","SWE","SWEDEN" -"3577665536","3577665591","ES","ESP","SPAIN" -"3577665600","3577665607","ES","ESP","SPAIN" -"3577665616","3577665679","ES","ESP","SPAIN" -"3577665792","3577665823","BE","BEL","BELGIUM" -"3577665824","3577665855","RO","ROM","ROMANIA" -"3577665856","3577665919","LU","LUX","LUXEMBOURG" -"3577666048","3577666175","ES","ESP","SPAIN" -"3577667584","3577667743","PL","POL","POLAND" -"3577668640","3577668671","IE","IRL","IRELAND" -"3577668736","3577668799","IE","IRL","IRELAND" -"3577669120","3577669383","HU","HUN","HUNGARY" -"3577669504","3577669631","HU","HUN","HUNGARY" -"3577669632","3577671679","BE","BEL","BELGIUM" -"3577671680","3577672191","ZA","ZAF","SOUTH AFRICA" -"3577672192","3577673727","DE","DEU","GERMANY" -"3577675776","3577741311","PT","PRT","PORTUGAL" -"3577741312","3578003455","SE","SWE","SWEDEN" -"3578003456","3578049023","DE","DEU","GERMANY" -"3578049024","3578049055","CH","CHE","SWITZERLAND" -"3578049056","3578208127","DE","DEU","GERMANY" -"3578208128","3578208191","PK","PAK","PAKISTAN" -"3578208192","3578234759","DE","DEU","GERMANY" -"3578234760","3578234767","US","USA","UNITED STATES" -"3578234768","3578236791","DE","DEU","GERMANY" -"3578236792","3578236799","PL","POL","POLAND" -"3578236800","3578265599","DE","DEU","GERMANY" -"3578265600","3578331135","GB","GBR","UNITED KINGDOM" -"3578331136","3578339327","PL","POL","POLAND" -"3578339328","3578347519","ES","ESP","SPAIN" -"3578347520","3578363903","DE","DEU","GERMANY" -"3578363904","3578396671","NL","NLD","NETHERLANDS" -"3578396672","3578462207","TR","TUR","TURKEY" -"3578462208","3578527743","NL","NLD","NETHERLANDS" -"3578527744","3578658815","PL","POL","POLAND" -"3578658816","3578724351","GB","GBR","UNITED KINGDOM" -"3578724352","3578732543","RU","RUS","RUSSIAN FEDERATION" -"3578732544","3578740735","IE","IRL","IRELAND" -"3578740736","3578757119","RU","RUS","RUSSIAN FEDERATION" -"3578757120","3578822655","SE","SWE","SWEDEN" -"3578822656","3578855423","RU","RUS","RUSSIAN FEDERATION" -"3578855424","3578888191","GB","GBR","UNITED KINGDOM" -"3578888192","3578920959","SK","SVK","SLOVAKIA" -"3578920960","3578986495","IT","ITA","ITALY" -"3578986496","3578988095","DE","DEU","GERMANY" -"3578988096","3578988099","CH","CHE","SWITZERLAND" -"3578988100","3578996999","DE","DEU","GERMANY" -"3578997000","3578997007","CH","CHE","SWITZERLAND" -"3578997008","3578997935","DE","DEU","GERMANY" -"3578997936","3578997943","FR","FRA","FRANCE" -"3578997944","3578998575","DE","DEU","GERMANY" -"3578998576","3578998583","GB","GBR","UNITED KINGDOM" -"3578998584","3579002879","DE","DEU","GERMANY" -"3579002880","3579019263","GB","GBR","UNITED KINGDOM" -"3579019264","3579052031","DK","DNK","DENMARK" -"3579052032","3579117567","NL","NLD","NETHERLANDS" -"3579117568","3579132159","RU","RUS","RUSSIAN FEDERATION" -"3579132160","3579132415","BY","BLR","BELARUS" -"3579132416","3579183103","RU","RUS","RUSSIAN FEDERATION" -"3579183104","3579191759","GB","GBR","UNITED KINGDOM" -"3579191760","3579191775","DE","DEU","GERMANY" -"3579191776","3579193599","GB","GBR","UNITED KINGDOM" -"3579193600","3579193703","NL","NLD","NETHERLANDS" -"3579193704","3579193704","GB","GBR","UNITED KINGDOM" -"3579193705","3579193705","NL","NLD","NETHERLANDS" -"3579193706","3579193711","GB","GBR","UNITED KINGDOM" -"3579193712","3579193727","BE","BEL","BELGIUM" -"3579193728","3579193799","NL","NLD","NETHERLANDS" -"3579193800","3579193807","GB","GBR","UNITED KINGDOM" -"3579193808","3579193815","NL","NLD","NETHERLANDS" -"3579193816","3579193823","ES","ESP","SPAIN" -"3579193824","3579193855","NL","NLD","NETHERLANDS" -"3579193856","3579197055","GB","GBR","UNITED KINGDOM" -"3579197056","3579197183","US","USA","UNITED STATES" -"3579197184","3579197887","GB","GBR","UNITED KINGDOM" -"3579197888","3579197903","IT","ITA","ITALY" -"3579197904","3579228191","GB","GBR","UNITED KINGDOM" -"3579228192","3579228207","IT","ITA","ITALY" -"3579228208","3579228223","ES","ESP","SPAIN" -"3579228224","3579228671","GB","GBR","UNITED KINGDOM" -"3579228672","3579228799","US","USA","UNITED STATES" -"3579228800","3579241151","GB","GBR","UNITED KINGDOM" -"3579241152","3579241215","IE","IRL","IRELAND" -"3579241216","3579248639","GB","GBR","UNITED KINGDOM" -"3579248640","3579314175","RU","RUS","RUSSIAN FEDERATION" -"3579346944","3579361535","SE","SWE","SWEDEN" -"3579361536","3579361791","NO","NOR","NORWAY" -"3579361792","3579362047","SE","SWE","SWEDEN" -"3579362048","3579362063","NO","NOR","NORWAY" -"3579362064","3579362303","SE","SWE","SWEDEN" -"3579362304","3579362559","NO","NOR","NORWAY" -"3579362560","3579362815","SE","SWE","SWEDEN" -"3579362816","3579363327","NO","NOR","NORWAY" -"3579363328","3579445247","SE","SWE","SWEDEN" -"3579445248","3579463679","AT","AUT","AUSTRIA" -"3579463680","3579463683","US","USA","UNITED STATES" -"3579463684","3579478015","AT","AUT","AUSTRIA" -"3579478016","3579480847","FR","FRA","FRANCE" -"3579480848","3579480855","NL","NLD","NETHERLANDS" -"3579480856","3579480863","FR","FRA","FRANCE" -"3579480864","3579480871","NL","NLD","NETHERLANDS" -"3579480872","3579481095","FR","FRA","FRANCE" -"3579481096","3579481103","CH","CHE","SWITZERLAND" -"3579481104","3579481119","FR","FRA","FRANCE" -"3579481120","3579481127","GB","GBR","UNITED KINGDOM" -"3579481128","3579481143","FR","FRA","FRANCE" -"3579481144","3579481151","CH","CHE","SWITZERLAND" -"3579481152","3579481159","FR","FRA","FRANCE" -"3579481160","3579481167","GB","GBR","UNITED KINGDOM" -"3579481168","3579481191","FR","FRA","FRANCE" -"3579481192","3579481199","CH","CHE","SWITZERLAND" -"3579481200","3579481247","FR","FRA","FRANCE" -"3579481248","3579481255","GB","GBR","UNITED KINGDOM" -"3579481256","3579481263","CH","CHE","SWITZERLAND" -"3579481264","3579481279","FR","FRA","FRANCE" -"3579481280","3579481287","GB","GBR","UNITED KINGDOM" -"3579481288","3579482623","FR","FRA","FRANCE" -"3579482624","3579482783","NL","NLD","NETHERLANDS" -"3579482784","3579482799","FR","FRA","FRANCE" -"3579482800","3579482927","NL","NLD","NETHERLANDS" -"3579482928","3579482943","FR","FRA","FRANCE" -"3579482944","3579482991","NL","NLD","NETHERLANDS" -"3579482992","3579483151","FR","FRA","FRANCE" -"3579483152","3579483263","NL","NLD","NETHERLANDS" -"3579483264","3579483295","FR","FRA","FRANCE" -"3579483296","3579483311","NL","NLD","NETHERLANDS" -"3579483312","3579483359","FR","FRA","FRANCE" -"3579483360","3579483375","NL","NLD","NETHERLANDS" -"3579483376","3579484751","FR","FRA","FRANCE" -"3579484752","3579484767","BE","BEL","BELGIUM" -"3579484768","3579485263","FR","FRA","FRANCE" -"3579485264","3579485279","BE","BEL","BELGIUM" -"3579485280","3579485695","FR","FRA","FRANCE" -"3579485696","3579485711","GB","GBR","UNITED KINGDOM" -"3579485712","3579485714","FR","FRA","FRANCE" -"3579485715","3579485727","GB","GBR","UNITED KINGDOM" -"3579485728","3579485807","FR","FRA","FRANCE" -"3579485808","3579485823","GB","GBR","UNITED KINGDOM" -"3579485824","3579485887","FR","FRA","FRANCE" -"3579485888","3579485888","GB","GBR","UNITED KINGDOM" -"3579485889","3579485903","FR","FRA","FRANCE" -"3579485904","3579485919","DE","DEU","GERMANY" -"3579485920","3579485983","FR","FRA","FRANCE" -"3579485984","3579485999","CH","CHE","SWITZERLAND" -"3579486000","3579486015","FR","FRA","FRANCE" -"3579486016","3579486031","GB","GBR","UNITED KINGDOM" -"3579486032","3579486047","DE","DEU","GERMANY" -"3579486048","3579486095","GB","GBR","UNITED KINGDOM" -"3579486096","3579486143","FR","FRA","FRANCE" -"3579486144","3579486175","GB","GBR","UNITED KINGDOM" -"3579486176","3579486191","FR","FRA","FRANCE" -"3579486192","3579486207","GB","GBR","UNITED KINGDOM" -"3579486208","3579486271","FR","FRA","FRANCE" -"3579486272","3579486287","GB","GBR","UNITED KINGDOM" -"3579486288","3579486303","FR","FRA","FRANCE" -"3579486304","3579486319","GB","GBR","UNITED KINGDOM" -"3579486320","3579486335","FR","FRA","FRANCE" -"3579486336","3579486351","GB","GBR","UNITED KINGDOM" -"3579486352","3579486367","FR","FRA","FRANCE" -"3579486368","3579486383","IT","ITA","ITALY" -"3579486384","3579486399","DE","DEU","GERMANY" -"3579486400","3579486415","FR","FRA","FRANCE" -"3579486416","3579486431","DE","DEU","GERMANY" -"3579486432","3579486447","GB","GBR","UNITED KINGDOM" -"3579486448","3579486735","FR","FRA","FRANCE" -"3579486736","3579486751","DE","DEU","GERMANY" -"3579486752","3579486831","FR","FRA","FRANCE" -"3579486832","3579486847","BE","BEL","BELGIUM" -"3579486848","3579486863","FR","FRA","FRANCE" -"3579486864","3579486879","GB","GBR","UNITED KINGDOM" -"3579486880","3579487007","FR","FRA","FRANCE" -"3579487008","3579487039","GB","GBR","UNITED KINGDOM" -"3579487040","3579487055","DE","DEU","GERMANY" -"3579487056","3579487103","FR","FRA","FRANCE" -"3579487104","3579487119","GB","GBR","UNITED KINGDOM" -"3579487120","3579487215","FR","FRA","FRANCE" -"3579487216","3579487231","GB","GBR","UNITED KINGDOM" -"3579487232","3579487247","FR","FRA","FRANCE" -"3579487248","3579487263","GB","GBR","UNITED KINGDOM" -"3579487264","3579487471","FR","FRA","FRANCE" -"3579487472","3579487487","ES","ESP","SPAIN" -"3579487488","3579487519","FR","FRA","FRANCE" -"3579487520","3579487531","IT","ITA","ITALY" -"3579487532","3579487535","FR","FRA","FRANCE" -"3579487536","3579487551","GB","GBR","UNITED KINGDOM" -"3579487552","3579487567","FR","FRA","FRANCE" -"3579487568","3579487583","GB","GBR","UNITED KINGDOM" -"3579487584","3579487599","FR","FRA","FRANCE" -"3579487600","3579487615","IT","ITA","ITALY" -"3579487616","3579487663","FR","FRA","FRANCE" -"3579487664","3579487711","DE","DEU","GERMANY" -"3579487712","3579487727","SE","SWE","SWEDEN" -"3579487728","3579487743","GB","GBR","UNITED KINGDOM" -"3579487744","3579487807","FR","FRA","FRANCE" -"3579487808","3579487823","GB","GBR","UNITED KINGDOM" -"3579487824","3579487855","FR","FRA","FRANCE" -"3579487856","3579487871","GB","GBR","UNITED KINGDOM" -"3579487872","3579487887","IE","IRL","IRELAND" -"3579487888","3579487903","DE","DEU","GERMANY" -"3579487904","3579487951","FR","FRA","FRANCE" -"3579487952","3579487967","GB","GBR","UNITED KINGDOM" -"3579487968","3579487983","IT","ITA","ITALY" -"3579487984","3579487999","GB","GBR","UNITED KINGDOM" -"3579488000","3579488047","FR","FRA","FRANCE" -"3579488048","3579488079","GB","GBR","UNITED KINGDOM" -"3579488080","3579490559","FR","FRA","FRANCE" -"3579490560","3579490655","PT","PRT","PORTUGAL" -"3579490656","3579490671","FR","FRA","FRANCE" -"3579490672","3579490719","PT","PRT","PORTUGAL" -"3579490720","3579490735","NL","NLD","NETHERLANDS" -"3579490736","3579490751","FR","FRA","FRANCE" -"3579490752","3579490799","PT","PRT","PORTUGAL" -"3579490800","3579490831","FR","FRA","FRANCE" -"3579490832","3579490943","PT","PRT","PORTUGAL" -"3579490944","3579490959","FR","FRA","FRANCE" -"3579490960","3579490975","PT","PRT","PORTUGAL" -"3579490976","3579491007","FR","FRA","FRANCE" -"3579491008","3579491023","PT","PRT","PORTUGAL" -"3579491024","3579491231","FR","FRA","FRANCE" -"3579491232","3579491247","PT","PRT","PORTUGAL" -"3579491248","3579491263","NL","NLD","NETHERLANDS" -"3579491264","3579491471","FR","FRA","FRANCE" -"3579491472","3579491487","PT","PRT","PORTUGAL" -"3579491488","3579497983","FR","FRA","FRANCE" -"3579497984","3579497991","NL","NLD","NETHERLANDS" -"3579497992","3579527167","FR","FRA","FRANCE" -"3579527168","3579543551","BA","BIH","BOSNIA AND HERZEGOVINA" -"3579543552","3579576319","BG","BGR","BULGARIA" -"3579576320","3579579263","IT","ITA","ITALY" -"3579579264","3579579295","US","USA","UNITED STATES" -"3579579296","3579582367","IT","ITA","ITALY" -"3579582368","3579582399","US","USA","UNITED STATES" -"3579582400","3579596927","IT","ITA","ITALY" -"3579596928","3579597055","GR","GRC","GREECE" -"3579597056","3579600191","IT","ITA","ITALY" -"3579600192","3579600207","US","USA","UNITED STATES" -"3579600208","3579601471","IT","ITA","ITALY" -"3579601472","3579601487","US","USA","UNITED STATES" -"3579601488","3579605487","IT","ITA","ITALY" -"3579605488","3579605503","DE","DEU","GERMANY" -"3579605504","3579607551","IT","ITA","ITALY" -"3579607552","3579607807","US","USA","UNITED STATES" -"3579607808","3579609087","IT","ITA","ITALY" -"3579609088","3579641855","PL","POL","POLAND" -"3579641856","3579707391","NL","NLD","NETHERLANDS" -"3579707392","3579723775","ES","ESP","SPAIN" -"3579723776","3579740159","AT","AUT","AUSTRIA" -"3579740160","3579772927","IE","IRL","IRELAND" -"3579772928","3579838463","DE","DEU","GERMANY" -"3579838464","3580100607","ES","ESP","SPAIN" -"3580100608","3580198911","SE","SWE","SWEDEN" -"3580198912","3580199423","LV","LVA","LATVIA" -"3580199424","3580199935","SE","SWE","SWEDEN" -"3580199936","3580200447","EE","EST","ESTONIA" -"3580200448","3580200959","SE","SWE","SWEDEN" -"3580200960","3580201471","LT","LTU","LITHUANIA" -"3580201472","3580203519","SE","SWE","SWEDEN" -"3580203520","3580204543","RU","RUS","RUSSIAN FEDERATION" -"3580204544","3580205055","SE","SWE","SWEDEN" -"3580205056","3580207103","HR","HRV","CROATIA" -"3580207104","3580208127","SE","SWE","SWEDEN" -"3580208128","3580208639","EE","EST","ESTONIA" -"3580208640","3580213247","SE","SWE","SWEDEN" -"3580213248","3580214271","CH","CHE","SWITZERLAND" -"3580214272","3580214783","LV","LVA","LATVIA" -"3580214784","3580223487","SE","SWE","SWEDEN" -"3580223488","3580231679","DE","DEU","GERMANY" -"3580231680","3580231935","LT","LTU","LITHUANIA" -"3580231936","3580232447","LV","LVA","LATVIA" -"3580232448","3580233727","LT","LTU","LITHUANIA" -"3580233728","3580235263","SE","SWE","SWEDEN" -"3580235264","3580236799","LT","LTU","LITHUANIA" -"3580236800","3580237567","LV","LVA","LATVIA" -"3580237568","3580237823","LT","LTU","LITHUANIA" -"3580237824","3580239359","SE","SWE","SWEDEN" -"3580239360","3580239871","LV","LVA","LATVIA" -"3580239872","3580241919","SE","SWE","SWEDEN" -"3580241920","3580243967","CH","CHE","SWITZERLAND" -"3580243968","3580248063","NL","NLD","NETHERLANDS" -"3580248064","3580250111","ES","ESP","SPAIN" -"3580250112","3580252671","SE","SWE","SWEDEN" -"3580252672","3580254207","EE","EST","ESTONIA" -"3580254208","3580260351","DE","DEU","GERMANY" -"3580260352","3580265727","AT","AUT","AUSTRIA" -"3580265728","3580338175","SE","SWE","SWEDEN" -"3580338176","3580338432","HR","HRV","CROATIA" -"3580338433","3580362751","SE","SWE","SWEDEN" -"3580362752","3580473375","GB","GBR","UNITED KINGDOM" -"3580473376","3580473391","IE","IRL","IRELAND" -"3580473392","3580473503","GB","GBR","UNITED KINGDOM" -"3580473504","3580473511","IE","IRL","IRELAND" -"3580473512","3580473519","GB","GBR","UNITED KINGDOM" -"3580473520","3580473527","IE","IRL","IRELAND" -"3580473528","3580473695","GB","GBR","UNITED KINGDOM" -"3580473696","3580473727","IE","IRL","IRELAND" -"3580473728","3580473759","GB","GBR","UNITED KINGDOM" -"3580473760","3580473887","IE","IRL","IRELAND" -"3580473888","3580473951","GB","GBR","UNITED KINGDOM" -"3580473952","3580473959","IE","IRL","IRELAND" -"3580473960","3580473967","GB","GBR","UNITED KINGDOM" -"3580473968","3580473983","IE","IRL","IRELAND" -"3580473984","3580473999","GB","GBR","UNITED KINGDOM" -"3580474000","3580474007","IE","IRL","IRELAND" -"3580474008","3580474095","GB","GBR","UNITED KINGDOM" -"3580474096","3580474111","IE","IRL","IRELAND" -"3580474112","3580474495","GB","GBR","UNITED KINGDOM" -"3580474496","3580474559","IE","IRL","IRELAND" -"3580474560","3580474639","GB","GBR","UNITED KINGDOM" -"3580474640","3580474647","IE","IRL","IRELAND" -"3580474648","3580474655","GB","GBR","UNITED KINGDOM" -"3580474656","3580474671","IE","IRL","IRELAND" -"3580474672","3580474687","GB","GBR","UNITED KINGDOM" -"3580474688","3580474703","IE","IRL","IRELAND" -"3580474704","3580474719","GB","GBR","UNITED KINGDOM" -"3580474720","3580474735","IE","IRL","IRELAND" -"3580474736","3580474807","GB","GBR","UNITED KINGDOM" -"3580474808","3580474879","IE","IRL","IRELAND" -"3580474880","3580475055","GB","GBR","UNITED KINGDOM" -"3580475056","3580475063","IE","IRL","IRELAND" -"3580475064","3580475123","GB","GBR","UNITED KINGDOM" -"3580475124","3580475127","IE","IRL","IRELAND" -"3580475128","3580475343","GB","GBR","UNITED KINGDOM" -"3580475344","3580475351","IE","IRL","IRELAND" -"3580475352","3580624895","GB","GBR","UNITED KINGDOM" -"3580624896","3580626943","RU","RUS","RUSSIAN FEDERATION" -"3580626944","3580628991","PL","POL","POLAND" -"3580628992","3580631039","RU","RUS","RUSSIAN FEDERATION" -"3580631040","3580632575","NL","NLD","NETHERLANDS" -"3580632576","3580632831","DE","DEU","GERMANY" -"3580632832","3580633087","GB","GBR","UNITED KINGDOM" -"3580633088","3580635135","RU","RUS","RUSSIAN FEDERATION" -"3580635136","3580637183","UA","UKR","UKRAINE" -"3580637184","3580639231","KZ","KAZ","KAZAKHSTAN" -"3580641280","3580643327","FR","FRA","FRANCE" -"3580643328","3580645375","UA","UKR","UKRAINE" -"3580645376","3580647423","PL","POL","POLAND" -"3580647424","3580649471","DE","DEU","GERMANY" -"3580649472","3580651519","SE","SWE","SWEDEN" -"3580651520","3580653567","NL","NLD","NETHERLANDS" -"3580653568","3580655615","PL","POL","POLAND" -"3580655616","3580657663","SK","SVK","SLOVAKIA" -"3580657664","3580663807","RU","RUS","RUSSIAN FEDERATION" -"3580663808","3580665855","PL","POL","POLAND" -"3580665856","3580667903","CZ","CZE","CZECH REPUBLIC" -"3580667904","3580669951","RU","RUS","RUSSIAN FEDERATION" -"3580669952","3580671999","UA","UKR","UKRAINE" -"3580672000","3580682239","RU","RUS","RUSSIAN FEDERATION" -"3580682240","3580684287","PL","POL","POLAND" -"3580684288","3580686335","FR","FRA","FRANCE" -"3580686336","3580688383","BG","BGR","BULGARIA" -"3580688384","3580698623","RU","RUS","RUSSIAN FEDERATION" -"3580698624","3580702719","PL","POL","POLAND" -"3580702720","3580710911","RU","RUS","RUSSIAN FEDERATION" -"3580710912","3580715007","UA","UKR","UKRAINE" -"3580715008","3580719103","RU","RUS","RUSSIAN FEDERATION" -"3580719104","3580723199","NL","NLD","NETHERLANDS" -"3580723200","3580727295","UA","UKR","UKRAINE" -"3580727296","3580731391","RU","RUS","RUSSIAN FEDERATION" -"3580731392","3580739583","RO","ROM","ROMANIA" -"3580739584","3580743679","RU","RUS","RUSSIAN FEDERATION" -"3580743680","3580751871","UA","UKR","UKRAINE" -"3580751872","3580755967","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3580755968","3580772351","RU","RUS","RUSSIAN FEDERATION" -"3580772352","3580780543","LV","LVA","LATVIA" -"3580780544","3580805119","UA","UKR","UKRAINE" -"3580805120","3580821503","RU","RUS","RUSSIAN FEDERATION" -"3580821504","3580837887","FR","FRA","FRANCE" -"3580837888","3580870655","UA","UKR","UKRAINE" -"3580887040","3581149183","SE","SWE","SWEDEN" -"3581150368","3581150463","IE","IRL","IRELAND" -"3581150592","3581150719","NL","NLD","NETHERLANDS" -"3581150720","3581150783","SE","SWE","SWEDEN" -"3581150976","3581151039","SE","SWE","SWEDEN" -"3581151232","3581151295","SE","SWE","SWEDEN" -"3581154048","3581154303","NL","NLD","NETHERLANDS" -"3581157120","3581158655","AT","AUT","AUSTRIA" -"3581159168","3581159295","AT","AUT","AUSTRIA" -"3581159424","3581161471","IE","IRL","IRELAND" -"3581173760","3581196799","NL","NLD","NETHERLANDS" -"3581197312","3581197567","IE","IRL","IRELAND" -"3581197824","3581198335","GB","GBR","UNITED KINGDOM" -"3581198336","3581200127","NL","NLD","NETHERLANDS" -"3581203968","3581214719","SE","SWE","SWEDEN" -"3581214720","3581231103","NL","NLD","NETHERLANDS" -"3581239296","3581241343","NL","NLD","NETHERLANDS" -"3581255680","3581259263","FR","FRA","FRANCE" -"3581261312","3581261439","FR","FRA","FRANCE" -"3581279104","3581279199","NL","NLD","NETHERLANDS" -"3581280256","3581411327","BE","BEL","BELGIUM" -"3581411328","3581673471","GB","GBR","UNITED KINGDOM" -"3581673472","3581935615","NL","NLD","NETHERLANDS" -"3581935616","3581943807","RU","RUS","RUSSIAN FEDERATION" -"3581943808","3581951999","FR","FRA","FRANCE" -"3581952000","3581960191","TR","TUR","TURKEY" -"3581960192","3581976575","DE","DEU","GERMANY" -"3581976576","3581984767","NO","NOR","NORWAY" -"3581984768","3581992959","RU","RUS","RUSSIAN FEDERATION" -"3581992960","3582001151","GB","GBR","UNITED KINGDOM" -"3582001152","3582009343","DK","DNK","DENMARK" -"3582009344","3582017535","RU","RUS","RUSSIAN FEDERATION" -"3582017536","3582025727","GB","GBR","UNITED KINGDOM" -"3582025728","3582033919","RU","RUS","RUSSIAN FEDERATION" -"3582033920","3582042111","CZ","CZE","CZECH REPUBLIC" -"3582042112","3582050303","ES","ESP","SPAIN" -"3582050304","3582058495","NL","NLD","NETHERLANDS" -"3582058496","3582066687","AT","AUT","AUSTRIA" -"3582066688","3582074879","UA","UKR","UKRAINE" -"3582074880","3582078631","GB","GBR","UNITED KINGDOM" -"3582078632","3582078639","DE","DEU","GERMANY" -"3582078640","3582083071","GB","GBR","UNITED KINGDOM" -"3582083072","3582091263","BG","BGR","BULGARIA" -"3582091264","3582099455","QA","QAT","QATAR" -"3582099456","3582107647","GB","GBR","UNITED KINGDOM" -"3582107648","3582115839","NL","NLD","NETHERLANDS" -"3582115840","3582124031","SE","SWE","SWEDEN" -"3582124032","3582132223","FI","FIN","FINLAND" -"3582132224","3582140415","RU","RUS","RUSSIAN FEDERATION" -"3582140416","3582148607","GE","GEO","GEORGIA" -"3582156800","3582164991","GB","GBR","UNITED KINGDOM" -"3582164992","3582173183","SE","SWE","SWEDEN" -"3582173184","3582181375","GB","GBR","UNITED KINGDOM" -"3582181376","3582190847","DE","DEU","GERMANY" -"3582190848","3582190879","CH","CHE","SWITZERLAND" -"3582190880","3582190927","DE","DEU","GERMANY" -"3582190928","3582190931","FR","FRA","FRANCE" -"3582190932","3582191023","DE","DEU","GERMANY" -"3582191024","3582191031","BE","BEL","BELGIUM" -"3582191032","3582192127","DE","DEU","GERMANY" -"3582192128","3582192143","NL","NLD","NETHERLANDS" -"3582192144","3582192287","DE","DEU","GERMANY" -"3582192288","3582192303","CH","CHE","SWITZERLAND" -"3582192304","3582194775","DE","DEU","GERMANY" -"3582194776","3582194783","CY","CYP","CYPRUS" -"3582194784","3582194863","DE","DEU","GERMANY" -"3582194864","3582194879","CH","CHE","SWITZERLAND" -"3582194880","3582195135","DE","DEU","GERMANY" -"3582195136","3582195143","CH","CHE","SWITZERLAND" -"3582195144","3582196183","DE","DEU","GERMANY" -"3582196184","3582196191","BE","BEL","BELGIUM" -"3582196192","3582197127","DE","DEU","GERMANY" -"3582197128","3582197135","BZ","BLZ","BELIZE" -"3582197136","3582197759","DE","DEU","GERMANY" -"3582197760","3582205951","DK","DNK","DENMARK" -"3582205952","3582214143","AE","ARE","UNITED ARAB EMIRATES" -"3582214144","3582222335","RU","RUS","RUSSIAN FEDERATION" -"3582222336","3582222511","SE","SWE","SWEDEN" -"3582222512","3582222527","DK","DNK","DENMARK" -"3582222528","3582222863","SE","SWE","SWEDEN" -"3582222864","3582222879","NO","NOR","NORWAY" -"3582222880","3582223967","SE","SWE","SWEDEN" -"3582223968","3582223975","NO","NOR","NORWAY" -"3582223976","3582226599","SE","SWE","SWEDEN" -"3582226600","3582226607","FI","FIN","FINLAND" -"3582226608","3582230527","SE","SWE","SWEDEN" -"3582230528","3582238719","BE","BEL","BELGIUM" -"3582238720","3582255103","NL","NLD","NETHERLANDS" -"3582255104","3582263295","KW","KWT","KUWAIT" -"3582263296","3582271487","ME","MNE","MONTENEGRO" -"3582271488","3582279679","NL","NLD","NETHERLANDS" -"3582279680","3582287871","GB","GBR","UNITED KINGDOM" -"3582287872","3582296063","DE","DEU","GERMANY" -"3582296064","3582304255","GB","GBR","UNITED KINGDOM" -"3582304256","3582312447","UA","UKR","UKRAINE" -"3582312448","3582320639","GB","GBR","UNITED KINGDOM" -"3582320640","3582328831","CH","CHE","SWITZERLAND" -"3582328832","3582337023","HU","HUN","HUNGARY" -"3582337024","3582341119","ES","ESP","SPAIN" -"3582341120","3582343167","PT","PRT","PORTUGAL" -"3582343168","3582345215","ES","ESP","SPAIN" -"3582345216","3582353407","IT","ITA","ITALY" -"3582353408","3582361599","SE","SWE","SWEDEN" -"3582361600","3582377983","PL","POL","POLAND" -"3582377984","3582386175","RU","RUS","RUSSIAN FEDERATION" -"3582386176","3582394367","NL","NLD","NETHERLANDS" -"3582394368","3582402559","DE","DEU","GERMANY" -"3582402560","3582410751","PL","POL","POLAND" -"3582410752","3582435327","RU","RUS","RUSSIAN FEDERATION" -"3582435328","3582443519","MK","MKD","THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA" -"3582443520","3582451711","DE","DEU","GERMANY" -"3582451712","3582459903","LU","LUX","LUXEMBOURG" -"3582459904","3582468095","NL","NLD","NETHERLANDS" -"3582468096","3582476287","SE","SWE","SWEDEN" -"3582476288","3582484479","DE","DEU","GERMANY" -"3582492672","3582509055","IT","ITA","ITALY" -"3582509056","3582517247","SA","SAU","SAUDI ARABIA" -"3582517248","3582525439","PL","POL","POLAND" -"3582525440","3582533631","GB","GBR","UNITED KINGDOM" -"3582533632","3582538183","BG","BGR","BULGARIA" -"3582538184","3582538191","GB","GBR","UNITED KINGDOM" -"3582538192","3582541823","BG","BGR","BULGARIA" -"3582541824","3582550015","US","USA","UNITED STATES" -"3582550016","3582558207","RS","SRB","SERBIA" -"3582558208","3582566399","MC","MCO","MONACO" -"3582566432","3582566479","BE","BEL","BELGIUM" -"3582566528","3582566591","BE","BEL","BELGIUM" -"3582566736","3582566743","BE","BEL","BELGIUM" -"3582566752","3582566767","BE","BEL","BELGIUM" -"3582566784","3582566847","BE","BEL","BELGIUM" -"3582566864","3582566879","BE","BEL","BELGIUM" -"3582566912","3582567019","BE","BEL","BELGIUM" -"3582567024","3582567039","BE","BEL","BELGIUM" -"3582567136","3582567151","BE","BEL","BELGIUM" -"3582567232","3582567295","BE","BEL","BELGIUM" -"3582567392","3582567399","BE","BEL","BELGIUM" -"3582567424","3582567807","US","USA","UNITED STATES" -"3582567904","3582567935","US","USA","UNITED STATES" -"3582568208","3582568223","SE","SWE","SWEDEN" -"3582568248","3582568263","SE","SWE","SWEDEN" -"3582568336","3582568339","SE","SWE","SWEDEN" -"3582568440","3582568447","SE","SWE","SWEDEN" -"3582568448","3582568703","US","USA","UNITED STATES" -"3582568832","3582568959","US","USA","UNITED STATES" -"3582568960","3582568967","HU","HUN","HUNGARY" -"3582568992","3582569023","CZ","CZE","CZECH REPUBLIC" -"3582569032","3582569035","AT","AUT","AUSTRIA" -"3582569036","3582569039","DE","DEU","GERMANY" -"3582569040","3582569043","AT","AUT","AUSTRIA" -"3582569080","3582569087","HU","HUN","HUNGARY" -"3582569096","3582569103","HU","HUN","HUNGARY" -"3582569208","3582569215","AT","AUT","AUSTRIA" -"3582569280","3582569303","AT","AUT","AUSTRIA" -"3582569472","3582569535","FR","FRA","FRANCE" -"3582570240","3582570367","DE","DEU","GERMANY" -"3582570400","3582570431","FR","FRA","FRANCE" -"3582570464","3582570471","FR","FRA","FRANCE" -"3582570752","3582570823","FR","FRA","FRANCE" -"3582570848","3582570855","FR","FRA","FRANCE" -"3582570880","3582570883","FR","FRA","FRANCE" -"3582570888","3582570895","FR","FRA","FRANCE" -"3582570904","3582570975","FR","FRA","FRANCE" -"3582570984","3582571031","FR","FRA","FRANCE" -"3582571136","3582571199","FR","FRA","FRANCE" -"3582571304","3582571307","CH","CHE","SWITZERLAND" -"3582571308","3582571311","FR","FRA","FRANCE" -"3582571376","3582571391","FR","FRA","FRANCE" -"3582571408","3582571423","FR","FRA","FRANCE" -"3582571456","3582571487","FR","FRA","FRANCE" -"3582571648","3582571679","IE","IRL","IRELAND" -"3582571692","3582571707","IE","IRL","IRELAND" -"3582571728","3582571839","IE","IRL","IRELAND" -"3582571856","3582571871","IE","IRL","IRELAND" -"3582571976","3582571979","IE","IRL","IRELAND" -"3582572000","3582572015","IE","IRL","IRELAND" -"3582572024","3582572031","IE","IRL","IRELAND" -"3582572416","3582572431","CH","CHE","SWITZERLAND" -"3582572448","3582572451","CH","CHE","SWITZERLAND" -"3582572456","3582572459","CH","CHE","SWITZERLAND" -"3582572480","3582572543","CH","CHE","SWITZERLAND" -"3582572560","3582572567","DE","DEU","GERMANY" -"3582572800","3582572863","DE","DEU","GERMANY" -"3582572944","3582572951","DE","DEU","GERMANY" -"3582572976","3582572983","DE","DEU","GERMANY" -"3582573024","3582573055","DE","DEU","GERMANY" -"3582573088","3582573095","DE","DEU","GERMANY" -"3582573104","3582573111","DE","DEU","GERMANY" -"3582573128","3582573135","DE","DEU","GERMANY" -"3582573184","3582573215","DE","DEU","GERMANY" -"3582573408","3582573423","DE","DEU","GERMANY" -"3582573432","3582573439","DE","DEU","GERMANY" -"3582573512","3582573519","DE","DEU","GERMANY" -"3582573552","3582573567","DE","DEU","GERMANY" -"3582573600","3582573615","CH","CHE","SWITZERLAND" -"3582573632","3582573695","CH","CHE","SWITZERLAND" -"3582573728","3582573759","CH","CHE","SWITZERLAND" -"3582573824","3582573887","CH","CHE","SWITZERLAND" -"3582573896","3582573903","CH","CHE","SWITZERLAND" -"3582573912","3582574015","CH","CHE","SWITZERLAND" -"3582574432","3582574435","CH","CHE","SWITZERLAND" -"3582574456","3582574479","CH","CHE","SWITZERLAND" -"3582574592","3582582783","DE","DEU","GERMANY" -"3582582784","3582590975","RU","RUS","RUSSIAN FEDERATION" -"3582590976","3582599167","FR","FRA","FRANCE" -"3582599168","3582607359","DE","DEU","GERMANY" -"3582607360","3582615551","RU","RUS","RUSSIAN FEDERATION" -"3582615552","3582619391","CY","CYP","CYPRUS" -"3582619392","3582619647","UA","UKR","UKRAINE" -"3582619648","3582622591","CY","CYP","CYPRUS" -"3582622592","3582622719","LB","LBN","LEBANON" -"3582622720","3582623743","CY","CYP","CYPRUS" -"3582623744","3582631935","FI","FIN","FINLAND" -"3582631936","3582640127","NO","NOR","NORWAY" -"3582640128","3582648319","RU","RUS","RUSSIAN FEDERATION" -"3582648320","3582656511","PT","PRT","PORTUGAL" -"3582656512","3582664047","ES","ESP","SPAIN" -"3582664048","3582664055","FR","FRA","FRANCE" -"3582664056","3582664703","ES","ESP","SPAIN" -"3582664704","3582672895","JO","JOR","JORDAN" -"3582672896","3582681087","DE","DEU","GERMANY" -"3582681088","3582689279","FR","FRA","FRANCE" -"3582689280","3582697471","DE","DEU","GERMANY" -"3582697472","3582705663","FI","FIN","FINLAND" -"3582705664","3582722047","TR","TUR","TURKEY" -"3582722048","3582730239","IT","ITA","ITALY" -"3582730240","3582736383","ES","ESP","SPAIN" -"3582736384","3582737407","DZ","DZA","ALGERIA" -"3582737408","3582737919","MA","MAR","MOROCCO" -"3582737920","3582738431","ES","ESP","SPAIN" -"3582738432","3582746623","DK","DNK","DENMARK" -"3582746624","3582754815","RU","RUS","RUSSIAN FEDERATION" -"3582754816","3582763007","GR","GRC","GREECE" -"3582763008","3582771199","FI","FIN","FINLAND" -"3582771200","3582779391","IT","ITA","ITALY" -"3582779392","3582787583","RU","RUS","RUSSIAN FEDERATION" -"3582787584","3582795775","PT","PRT","PORTUGAL" -"3582795776","3582803967","ES","ESP","SPAIN" -"3582803968","3582812159","SE","SWE","SWEDEN" -"3582812160","3582820351","FI","FIN","FINLAND" -"3582820352","3582828543","RU","RUS","RUSSIAN FEDERATION" -"3582828544","3582836735","KZ","KAZ","KAZAKHSTAN" -"3582836736","3582853119","RU","RUS","RUSSIAN FEDERATION" -"3582853120","3582861311","SE","SWE","SWEDEN" -"3582861312","3582869503","RU","RUS","RUSSIAN FEDERATION" -"3582869504","3582877695","NO","NOR","NORWAY" -"3582877696","3582885887","AT","AUT","AUSTRIA" -"3582885888","3582894079","TR","TUR","TURKEY" -"3582894080","3582902271","CH","CHE","SWITZERLAND" -"3582902272","3582910463","RU","RUS","RUSSIAN FEDERATION" -"3582910464","3582918655","SI","SVN","SLOVENIA" -"3582918656","3582926847","GB","GBR","UNITED KINGDOM" -"3582926848","3582935039","ES","ESP","SPAIN" -"3582935040","3582943231","SI","SVN","SLOVENIA" -"3582943232","3582951423","AT","AUT","AUSTRIA" -"3582951424","3582959615","GB","GBR","UNITED KINGDOM" -"3582959616","3582967807","FI","FIN","FINLAND" -"3582967808","3582975999","DE","DEU","GERMANY" -"3582976000","3582984191","TR","TUR","TURKEY" -"3582984192","3582992383","DE","DEU","GERMANY" -"3582992384","3583000575","ES","ESP","SPAIN" -"3583000576","3583008767","IT","ITA","ITALY" -"3583008768","3583016959","TR","TUR","TURKEY" -"3583016960","3583019367","CH","CHE","SWITZERLAND" -"3583019368","3583019375","DE","DEU","GERMANY" -"3583019376","3583023215","CH","CHE","SWITZERLAND" -"3583023216","3583023223","DE","DEU","GERMANY" -"3583023224","3583025151","CH","CHE","SWITZERLAND" -"3583025152","3583029119","IT","ITA","ITALY" -"3583029120","3583029247","US","USA","UNITED STATES" -"3583029248","3583029375","SG","SGP","SINGAPORE" -"3583029376","3583029503","FR","FRA","FRANCE" -"3583029504","3583029759","IT","ITA","ITALY" -"3583029760","3583030015","GR","GRC","GREECE" -"3583030016","3583030783","IT","ITA","ITALY" -"3583030784","3583030847","IE","IRL","IRELAND" -"3583030848","3583031039","GR","GRC","GREECE" -"3583031040","3583031295","FR","FRA","FRANCE" -"3583031296","3583031839","GR","GRC","GREECE" -"3583031840","3583031847","IT","ITA","ITALY" -"3583031848","3583031895","GR","GRC","GREECE" -"3583031896","3583031903","IT","ITA","ITALY" -"3583031904","3583031919","LB","LBN","LEBANON" -"3583031920","3583032095","IT","ITA","ITALY" -"3583032096","3583032127","GR","GRC","GREECE" -"3583032128","3583032159","IT","ITA","ITALY" -"3583032160","3583032191","FR","FRA","FRANCE" -"3583032192","3583032319","IT","ITA","ITALY" -"3583032320","3583032575","FR","FRA","FRANCE" -"3583032576","3583032831","IT","ITA","ITALY" -"3583032832","3583033087","GR","GRC","GREECE" -"3583033088","3583033343","IT","ITA","ITALY" -"3583033344","3583041535","FR","FRA","FRANCE" -"3583041536","3583049727","NL","NLD","NETHERLANDS" -"3583057920","3583066111","RU","RUS","RUSSIAN FEDERATION" -"3583066112","3583074303","DE","DEU","GERMANY" -"3583074304","3583082495","BG","BGR","BULGARIA" -"3583082496","3583090687","KG","KGZ","KYRGYZSTAN" -"3583090688","3583098879","NO","NOR","NORWAY" -"3583098880","3583107071","FI","FIN","FINLAND" -"3583107072","3583115263","AT","AUT","AUSTRIA" -"3583115264","3583123455","CH","CHE","SWITZERLAND" -"3583123456","3583131647","PL","POL","POLAND" -"3583131648","3583139839","SE","SWE","SWEDEN" -"3583139840","3583141727","DE","DEU","GERMANY" -"3583141728","3583141735","AT","AUT","AUSTRIA" -"3583141736","3583148031","DE","DEU","GERMANY" -"3583148032","3583157247","GB","GBR","UNITED KINGDOM" -"3583157248","3583157279","IE","IRL","IRELAND" -"3583157280","3583157439","GB","GBR","UNITED KINGDOM" -"3583157440","3583157471","IE","IRL","IRELAND" -"3583157472","3583157487","GB","GBR","UNITED KINGDOM" -"3583157488","3583157503","IE","IRL","IRELAND" -"3583157504","3583158527","GB","GBR","UNITED KINGDOM" -"3583158528","3583159039","DE","DEU","GERMANY" -"3583159040","3583159359","GB","GBR","UNITED KINGDOM" -"3583159360","3583159375","DE","DEU","GERMANY" -"3583159376","3583160319","GB","GBR","UNITED KINGDOM" -"3583160320","3583161343","DE","DEU","GERMANY" -"3583161344","3583162367","GB","GBR","UNITED KINGDOM" -"3583162368","3583162623","DE","DEU","GERMANY" -"3583162624","3583164415","GB","GBR","UNITED KINGDOM" -"3583164416","3583172607","PT","PRT","PORTUGAL" -"3583172608","3583188991","DE","DEU","GERMANY" -"3583188992","3583197183","RU","RUS","RUSSIAN FEDERATION" -"3583205376","3583213567","HR","HRV","CROATIA" -"3583221760","3583229951","AT","AUT","AUSTRIA" -"3583229952","3583238143","RU","RUS","RUSSIAN FEDERATION" -"3583238144","3583246335","GB","GBR","UNITED KINGDOM" -"3583246336","3583254527","RU","RUS","RUSSIAN FEDERATION" -"3583254528","3583262719","GB","GBR","UNITED KINGDOM" -"3583262720","3583270911","TR","TUR","TURKEY" -"3583279104","3583287295","DE","DEU","GERMANY" -"3583287296","3583295487","RU","RUS","RUSSIAN FEDERATION" -"3583295488","3583303679","ES","ESP","SPAIN" -"3583303680","3583311871","NL","NLD","NETHERLANDS" -"3583311872","3583320063","RU","RUS","RUSSIAN FEDERATION" -"3583320064","3583328255","HR","HRV","CROATIA" -"3583328256","3583336447","DE","DEU","GERMANY" -"3583336448","3583337727","ME","MNE","MONTENEGRO" -"3583337728","3583337983","AL","ALB","ALBANIA" -"3583337984","3583338015","ME","MNE","MONTENEGRO" -"3583338016","3583338023","CS","SCG","SERBIA AND MONTENEGRO" -"3583338024","3583338031","ME","MNE","MONTENEGRO" -"3583338032","3583338047","CS","SCG","SERBIA AND MONTENEGRO" -"3583338048","3583338143","ME","MNE","MONTENEGRO" -"3583338144","3583338175","CS","SCG","SERBIA AND MONTENEGRO" -"3583338176","3583339519","ME","MNE","MONTENEGRO" -"3583339520","3583339775","AL","ALB","ALBANIA" -"3583339776","3583341039","ME","MNE","MONTENEGRO" -"3583341040","3583341055","AL","ALB","ALBANIA" -"3583341056","3583342335","ME","MNE","MONTENEGRO" -"3583342336","3583342591","CS","SCG","SERBIA AND MONTENEGRO" -"3583342592","3583344639","ME","MNE","MONTENEGRO" -"3583344640","3583350271","BG","BGR","BULGARIA" -"3583350272","3583351039","MK","MKD","THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA" -"3583351040","3583352319","BG","BGR","BULGARIA" -"3583352320","3583352575","MK","MKD","THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA" -"3583352576","3583352831","BG","BGR","BULGARIA" -"3583352832","3583361023","CY","CYP","CYPRUS" -"3583361024","3583369215","IT","ITA","ITALY" -"3583369216","3583377407","ES","ESP","SPAIN" -"3583377408","3583385599","AT","AUT","AUSTRIA" -"3583385600","3583393791","DK","DNK","DENMARK" -"3583393792","3583401983","RU","RUS","RUSSIAN FEDERATION" -"3583410176","3583418367","SE","SWE","SWEDEN" -"3583434752","3583442943","AT","AUT","AUSTRIA" -"3583442944","3583451135","UA","UKR","UKRAINE" -"3583451136","3583459327","IL","ISR","ISRAEL" -"3583459328","3583463891","CZ","CZE","CZECH REPUBLIC" -"3583463892","3583463895","PL","POL","POLAND" -"3583463896","3583467519","CZ","CZE","CZECH REPUBLIC" -"3583467520","3583475711","ES","ESP","SPAIN" -"3583475712","3583483903","NO","NOR","NORWAY" -"3583483904","3583492095","FR","FRA","FRANCE" -"3583492096","3583508479","SK","SVK","SLOVAKIA" -"3583508480","3583516671","FR","FRA","FRANCE" -"3583516672","3583524863","GB","GBR","UNITED KINGDOM" -"3583533056","3583541247","DE","DEU","GERMANY" -"3583541248","3583549439","RU","RUS","RUSSIAN FEDERATION" -"3583549440","3583558399","IT","ITA","ITALY" -"3583558400","3583558527","SM","SMR","SAN MARINO" -"3583558528","3583565823","IT","ITA","ITALY" -"3583565824","3583574015","GB","GBR","UNITED KINGDOM" -"3583574016","3583582207","NO","NOR","NORWAY" -"3583582208","3583590399","AT","AUT","AUSTRIA" -"3583590400","3583598591","DE","DEU","GERMANY" -"3583598592","3583606783","SE","SWE","SWEDEN" -"3583606784","3583639551","TR","TUR","TURKEY" -"3583639552","3583647743","AZ","AZE","AZERBAIJAN" -"3583664128","3583680511","RO","ROM","ROMANIA" -"3583680512","3583688703","RU","RUS","RUSSIAN FEDERATION" -"3583688704","3583696895","UA","UKR","UKRAINE" -"3583696896","3583705087","NL","NLD","NETHERLANDS" -"3583705088","3583705175","UA","UKR","UKRAINE" -"3583705176","3583705223","NA","NAM","NAMIBIA" -"3583705224","3583705239","UA","UKR","UKRAINE" -"3583705240","3583705247","NA","NAM","NAMIBIA" -"3583705248","3583705255","UA","UKR","UKRAINE" -"3583705256","3583705263","NA","NAM","NAMIBIA" -"3583705264","3583705287","UA","UKR","UKRAINE" -"3583705288","3583705295","NA","NAM","NAMIBIA" -"3583705296","3583705303","UA","UKR","UKRAINE" -"3583705304","3583705319","NA","NAM","NAMIBIA" -"3583705320","3583705335","UA","UKR","UKRAINE" -"3583705336","3583705343","NA","NAM","NAMIBIA" -"3583705344","3583705471","UA","UKR","UKRAINE" -"3583705472","3583705487","NA","NAM","NAMIBIA" -"3583705488","3583705495","UA","UKR","UKRAINE" -"3583705496","3583705503","NA","NAM","NAMIBIA" -"3583705504","3583705603","UA","UKR","UKRAINE" -"3583705604","3583705607","NA","NAM","NAMIBIA" -"3583705608","3583705647","UA","UKR","UKRAINE" -"3583705648","3583705791","NA","NAM","NAMIBIA" -"3583705792","3583705831","UA","UKR","UKRAINE" -"3583705832","3583705839","NA","NAM","NAMIBIA" -"3583705840","3583705847","UA","UKR","UKRAINE" -"3583705848","3583705855","NA","NAM","NAMIBIA" -"3583705856","3583705859","UA","UKR","UKRAINE" -"3583705860","3583705863","NA","NAM","NAMIBIA" -"3583705864","3583705887","UA","UKR","UKRAINE" -"3583705888","3583705895","RU","RUS","RUSSIAN FEDERATION" -"3583705896","3583705903","UA","UKR","UKRAINE" -"3583705904","3583705911","NA","NAM","NAMIBIA" -"3583705912","3583705919","RU","RUS","RUSSIAN FEDERATION" -"3583705920","3583706023","UA","UKR","UKRAINE" -"3583706024","3583706031","NA","NAM","NAMIBIA" -"3583706032","3583706055","UA","UKR","UKRAINE" -"3583706056","3583706063","RU","RUS","RUSSIAN FEDERATION" -"3583706064","3583706103","UA","UKR","UKRAINE" -"3583706104","3583706107","NA","NAM","NAMIBIA" -"3583706108","3583706151","UA","UKR","UKRAINE" -"3583706152","3583706159","NA","NAM","NAMIBIA" -"3583706160","3583706175","UA","UKR","UKRAINE" -"3583706176","3583706183","NA","NAM","NAMIBIA" -"3583706184","3583706191","UA","UKR","UKRAINE" -"3583706192","3583706199","NA","NAM","NAMIBIA" -"3583706200","3583706223","UA","UKR","UKRAINE" -"3583706224","3583706231","NA","NAM","NAMIBIA" -"3583706232","3583706295","UA","UKR","UKRAINE" -"3583706296","3583706319","NA","NAM","NAMIBIA" -"3583706320","3583706343","UA","UKR","UKRAINE" -"3583706344","3583706351","NA","NAM","NAMIBIA" -"3583706352","3583706375","UA","UKR","UKRAINE" -"3583706376","3583706383","NA","NAM","NAMIBIA" -"3583706384","3583706463","UA","UKR","UKRAINE" -"3583706464","3583706471","NA","NAM","NAMIBIA" -"3583706472","3583706495","UA","UKR","UKRAINE" -"3583706496","3583706511","NA","NAM","NAMIBIA" -"3583706512","3583706519","UA","UKR","UKRAINE" -"3583706520","3583706527","NA","NAM","NAMIBIA" -"3583706528","3583706535","UA","UKR","UKRAINE" -"3583706536","3583706543","NA","NAM","NAMIBIA" -"3583706544","3583706575","UA","UKR","UKRAINE" -"3583706576","3583706583","NA","NAM","NAMIBIA" -"3583706584","3583706591","UA","UKR","UKRAINE" -"3583706592","3583706607","NA","NAM","NAMIBIA" -"3583706608","3583706615","UA","UKR","UKRAINE" -"3583706616","3583706623","NA","NAM","NAMIBIA" -"3583706624","3583706647","UA","UKR","UKRAINE" -"3583706648","3583706655","NA","NAM","NAMIBIA" -"3583706656","3583706679","UA","UKR","UKRAINE" -"3583706680","3583706687","NA","NAM","NAMIBIA" -"3583706688","3583706695","UA","UKR","UKRAINE" -"3583706696","3583706711","NA","NAM","NAMIBIA" -"3583706712","3583706743","UA","UKR","UKRAINE" -"3583706744","3583706767","NA","NAM","NAMIBIA" -"3583706768","3583706775","UA","UKR","UKRAINE" -"3583706776","3583706791","NA","NAM","NAMIBIA" -"3583706792","3583706807","UA","UKR","UKRAINE" -"3583706808","3583706815","NA","NAM","NAMIBIA" -"3583706816","3583706863","UA","UKR","UKRAINE" -"3583706864","3583706879","NA","NAM","NAMIBIA" -"3583706880","3583706883","UA","UKR","UKRAINE" -"3583706884","3583706887","NA","NAM","NAMIBIA" -"3583706888","3583706895","UA","UKR","UKRAINE" -"3583706896","3583706911","NA","NAM","NAMIBIA" -"3583706912","3583706927","UA","UKR","UKRAINE" -"3583706928","3583706943","NA","NAM","NAMIBIA" -"3583706944","3583706959","UA","UKR","UKRAINE" -"3583706960","3583706967","NA","NAM","NAMIBIA" -"3583706968","3583706991","UA","UKR","UKRAINE" -"3583706992","3583706999","NA","NAM","NAMIBIA" -"3583707000","3583707015","UA","UKR","UKRAINE" -"3583707016","3583707023","NA","NAM","NAMIBIA" -"3583707024","3583707031","UA","UKR","UKRAINE" -"3583707032","3583707039","NA","NAM","NAMIBIA" -"3583707040","3583707071","UA","UKR","UKRAINE" -"3583707072","3583707111","NA","NAM","NAMIBIA" -"3583707112","3583707127","UA","UKR","UKRAINE" -"3583707128","3583707135","NA","NAM","NAMIBIA" -"3583707136","3583707519","UA","UKR","UKRAINE" -"3583707520","3583707535","NA","NAM","NAMIBIA" -"3583707536","3583707663","UA","UKR","UKRAINE" -"3583707664","3583707679","NA","NAM","NAMIBIA" -"3583707680","3583707751","UA","UKR","UKRAINE" -"3583707752","3583707767","NA","NAM","NAMIBIA" -"3583707768","3583707775","UA","UKR","UKRAINE" -"3583707776","3583707791","NA","NAM","NAMIBIA" -"3583707792","3583707807","UA","UKR","UKRAINE" -"3583707808","3583707815","NA","NAM","NAMIBIA" -"3583707816","3583707839","UA","UKR","UKRAINE" -"3583707840","3583707855","NA","NAM","NAMIBIA" -"3583707856","3583708031","UA","UKR","UKRAINE" -"3583708032","3583708095","NA","NAM","NAMIBIA" -"3583708096","3583708167","UA","UKR","UKRAINE" -"3583708168","3583708175","NA","NAM","NAMIBIA" -"3583708176","3583708223","UA","UKR","UKRAINE" -"3583708224","3583708239","NA","NAM","NAMIBIA" -"3583708240","3583708255","UA","UKR","UKRAINE" -"3583708256","3583708263","RU","RUS","RUSSIAN FEDERATION" -"3583708264","3583708423","UA","UKR","UKRAINE" -"3583708424","3583708431","NA","NAM","NAMIBIA" -"3583708432","3583708455","UA","UKR","UKRAINE" -"3583708456","3583708463","NA","NAM","NAMIBIA" -"3583708464","3583708479","UA","UKR","UKRAINE" -"3583708480","3583708543","NA","NAM","NAMIBIA" -"3583708544","3583708575","UA","UKR","UKRAINE" -"3583708576","3583708583","NA","NAM","NAMIBIA" -"3583708584","3583708607","UA","UKR","UKRAINE" -"3583708608","3583708623","NA","NAM","NAMIBIA" -"3583708624","3583709447","UA","UKR","UKRAINE" -"3583709448","3583709455","NA","NAM","NAMIBIA" -"3583709456","3583709479","UA","UKR","UKRAINE" -"3583709480","3583709487","NA","NAM","NAMIBIA" -"3583709488","3583709503","UA","UKR","UKRAINE" -"3583709504","3583709519","NA","NAM","NAMIBIA" -"3583709520","3583709527","UA","UKR","UKRAINE" -"3583709528","3583709543","NA","NAM","NAMIBIA" -"3583709544","3583709551","UA","UKR","UKRAINE" -"3583709552","3583709559","NA","NAM","NAMIBIA" -"3583709560","3583709599","UA","UKR","UKRAINE" -"3583709600","3583709615","NA","NAM","NAMIBIA" -"3583709616","3583709623","UA","UKR","UKRAINE" -"3583709624","3583709639","NA","NAM","NAMIBIA" -"3583709640","3583709663","UA","UKR","UKRAINE" -"3583709664","3583709671","NA","NAM","NAMIBIA" -"3583709672","3583709699","UA","UKR","UKRAINE" -"3583709700","3583709703","NA","NAM","NAMIBIA" -"3583709704","3583709727","UA","UKR","UKRAINE" -"3583709728","3583709751","NA","NAM","NAMIBIA" -"3583709752","3583709759","UA","UKR","UKRAINE" -"3583709760","3583709767","NA","NAM","NAMIBIA" -"3583709768","3583709791","UA","UKR","UKRAINE" -"3583709792","3583709799","NA","NAM","NAMIBIA" -"3583709800","3583709823","UA","UKR","UKRAINE" -"3583709824","3583709831","NA","NAM","NAMIBIA" -"3583709832","3583709839","UA","UKR","UKRAINE" -"3583709840","3583709863","NA","NAM","NAMIBIA" -"3583709864","3583709871","UA","UKR","UKRAINE" -"3583709872","3583709911","NA","NAM","NAMIBIA" -"3583709912","3583709927","UA","UKR","UKRAINE" -"3583709928","3583709943","NA","NAM","NAMIBIA" -"3583709944","3583710055","UA","UKR","UKRAINE" -"3583710056","3583710087","NA","NAM","NAMIBIA" -"3583710088","3583710103","UA","UKR","UKRAINE" -"3583710104","3583710111","NA","NAM","NAMIBIA" -"3583710112","3583710119","UA","UKR","UKRAINE" -"3583710120","3583710127","NA","NAM","NAMIBIA" -"3583710128","3583710211","UA","UKR","UKRAINE" -"3583710212","3583710231","NA","NAM","NAMIBIA" -"3583710232","3583710239","UA","UKR","UKRAINE" -"3583710240","3583710247","NA","NAM","NAMIBIA" -"3583710248","3583710319","UA","UKR","UKRAINE" -"3583710320","3583710335","NA","NAM","NAMIBIA" -"3583710336","3583710375","UA","UKR","UKRAINE" -"3583710376","3583710383","NA","NAM","NAMIBIA" -"3583710384","3583710407","UA","UKR","UKRAINE" -"3583710408","3583710415","NA","NAM","NAMIBIA" -"3583710416","3583710455","UA","UKR","UKRAINE" -"3583710456","3583710459","NA","NAM","NAMIBIA" -"3583710460","3583710495","UA","UKR","UKRAINE" -"3583710496","3583710503","NA","NAM","NAMIBIA" -"3583710504","3583710519","UA","UKR","UKRAINE" -"3583710520","3583710527","NA","NAM","NAMIBIA" -"3583710528","3583710631","UA","UKR","UKRAINE" -"3583710632","3583710639","NA","NAM","NAMIBIA" -"3583710640","3583710671","UA","UKR","UKRAINE" -"3583710672","3583710679","NA","NAM","NAMIBIA" -"3583710680","3583710703","UA","UKR","UKRAINE" -"3583710704","3583710711","NA","NAM","NAMIBIA" -"3583710712","3583710735","UA","UKR","UKRAINE" -"3583710736","3583710743","NA","NAM","NAMIBIA" -"3583710744","3583710823","UA","UKR","UKRAINE" -"3583710824","3583710831","NA","NAM","NAMIBIA" -"3583710832","3583710855","UA","UKR","UKRAINE" -"3583710856","3583710863","NA","NAM","NAMIBIA" -"3583710864","3583710871","UA","UKR","UKRAINE" -"3583710872","3583710879","NA","NAM","NAMIBIA" -"3583710880","3583710887","UA","UKR","UKRAINE" -"3583710888","3583710911","NA","NAM","NAMIBIA" -"3583710912","3583710935","UA","UKR","UKRAINE" -"3583710936","3583710943","NA","NAM","NAMIBIA" -"3583710944","3583710959","UA","UKR","UKRAINE" -"3583710960","3583710967","NA","NAM","NAMIBIA" -"3583710968","3583710991","UA","UKR","UKRAINE" -"3583710992","3583710999","NA","NAM","NAMIBIA" -"3583711000","3583711007","UA","UKR","UKRAINE" -"3583711008","3583711023","NA","NAM","NAMIBIA" -"3583711024","3583711079","UA","UKR","UKRAINE" -"3583711080","3583711095","NA","NAM","NAMIBIA" -"3583711096","3583711295","UA","UKR","UKRAINE" -"3583711296","3583711303","NA","NAM","NAMIBIA" -"3583711304","3583711311","UA","UKR","UKRAINE" -"3583711312","3583711319","NA","NAM","NAMIBIA" -"3583711320","3583711327","UA","UKR","UKRAINE" -"3583711328","3583711335","NA","NAM","NAMIBIA" -"3583711336","3583711359","UA","UKR","UKRAINE" -"3583711360","3583711367","NA","NAM","NAMIBIA" -"3583711368","3583711375","UA","UKR","UKRAINE" -"3583711376","3583711383","NA","NAM","NAMIBIA" -"3583711384","3583711495","UA","UKR","UKRAINE" -"3583711496","3583711503","NA","NAM","NAMIBIA" -"3583711504","3583711551","UA","UKR","UKRAINE" -"3583711552","3583711559","NA","NAM","NAMIBIA" -"3583711560","3583711567","UA","UKR","UKRAINE" -"3583711568","3583711591","NA","NAM","NAMIBIA" -"3583711592","3583711607","UA","UKR","UKRAINE" -"3583711608","3583711615","NA","NAM","NAMIBIA" -"3583711616","3583711695","UA","UKR","UKRAINE" -"3583711696","3583711703","NA","NAM","NAMIBIA" -"3583711704","3583711711","UA","UKR","UKRAINE" -"3583711712","3583711727","NA","NAM","NAMIBIA" -"3583711728","3583711759","UA","UKR","UKRAINE" -"3583711760","3583711767","NA","NAM","NAMIBIA" -"3583711768","3583711783","UA","UKR","UKRAINE" -"3583711784","3583711799","NA","NAM","NAMIBIA" -"3583711800","3583711807","UA","UKR","UKRAINE" -"3583711808","3583711823","NA","NAM","NAMIBIA" -"3583711824","3583711831","UA","UKR","UKRAINE" -"3583711832","3583711839","NA","NAM","NAMIBIA" -"3583711840","3583711863","UA","UKR","UKRAINE" -"3583711864","3583711879","NA","NAM","NAMIBIA" -"3583711880","3583712015","UA","UKR","UKRAINE" -"3583712016","3583712031","NA","NAM","NAMIBIA" -"3583712032","3583712095","UA","UKR","UKRAINE" -"3583712096","3583712111","NA","NAM","NAMIBIA" -"3583712112","3583712119","UA","UKR","UKRAINE" -"3583712120","3583712127","NA","NAM","NAMIBIA" -"3583712128","3583712159","UA","UKR","UKRAINE" -"3583712160","3583712199","NA","NAM","NAMIBIA" -"3583712200","3583712287","UA","UKR","UKRAINE" -"3583712288","3583712295","NA","NAM","NAMIBIA" -"3583712296","3583712303","UA","UKR","UKRAINE" -"3583712304","3583712311","RU","RUS","RUSSIAN FEDERATION" -"3583712312","3583712319","NA","NAM","NAMIBIA" -"3583712320","3583712351","UA","UKR","UKRAINE" -"3583712352","3583712359","NA","NAM","NAMIBIA" -"3583712360","3583712399","UA","UKR","UKRAINE" -"3583712400","3583712407","NA","NAM","NAMIBIA" -"3583712408","3583712415","UA","UKR","UKRAINE" -"3583712416","3583712423","NA","NAM","NAMIBIA" -"3583712424","3583712439","UA","UKR","UKRAINE" -"3583712440","3583712479","NA","NAM","NAMIBIA" -"3583712480","3583712495","UA","UKR","UKRAINE" -"3583712496","3583712503","NA","NAM","NAMIBIA" -"3583712504","3583712591","UA","UKR","UKRAINE" -"3583712592","3583712599","NA","NAM","NAMIBIA" -"3583712600","3583712623","UA","UKR","UKRAINE" -"3583712624","3583712631","NA","NAM","NAMIBIA" -"3583712632","3583712639","UA","UKR","UKRAINE" -"3583712640","3583712647","NA","NAM","NAMIBIA" -"3583712648","3583712655","UA","UKR","UKRAINE" -"3583712656","3583712663","NA","NAM","NAMIBIA" -"3583712664","3583712703","UA","UKR","UKRAINE" -"3583712704","3583712719","NA","NAM","NAMIBIA" -"3583712720","3583712735","UA","UKR","UKRAINE" -"3583712736","3583712743","NA","NAM","NAMIBIA" -"3583712744","3583712759","UA","UKR","UKRAINE" -"3583712760","3583712763","NA","NAM","NAMIBIA" -"3583712764","3583712775","UA","UKR","UKRAINE" -"3583712776","3583712783","NA","NAM","NAMIBIA" -"3583712784","3583712839","UA","UKR","UKRAINE" -"3583712840","3583712847","NA","NAM","NAMIBIA" -"3583712848","3583712911","UA","UKR","UKRAINE" -"3583712912","3583712943","NA","NAM","NAMIBIA" -"3583712944","3583712975","UA","UKR","UKRAINE" -"3583712976","3583712983","NA","NAM","NAMIBIA" -"3583712984","3583713031","UA","UKR","UKRAINE" -"3583713032","3583713039","NA","NAM","NAMIBIA" -"3583713040","3583713071","UA","UKR","UKRAINE" -"3583713072","3583713079","NA","NAM","NAMIBIA" -"3583713080","3583713103","UA","UKR","UKRAINE" -"3583713104","3583713111","NA","NAM","NAMIBIA" -"3583713112","3583713127","UA","UKR","UKRAINE" -"3583713128","3583713135","NA","NAM","NAMIBIA" -"3583713136","3583713143","UA","UKR","UKRAINE" -"3583713144","3583713151","NA","NAM","NAMIBIA" -"3583713152","3583713159","UA","UKR","UKRAINE" -"3583713160","3583713167","NA","NAM","NAMIBIA" -"3583713168","3583713183","UA","UKR","UKRAINE" -"3583713184","3583713191","NA","NAM","NAMIBIA" -"3583713192","3583713223","UA","UKR","UKRAINE" -"3583713224","3583713231","NA","NAM","NAMIBIA" -"3583713232","3583713279","UA","UKR","UKRAINE" -"3583713280","3583721471","CZ","CZE","CZECH REPUBLIC" -"3583721472","3583729663","DE","DEU","GERMANY" -"3583729664","3583737855","TR","TUR","TURKEY" -"3583740672","3583740927","GB","GBR","UNITED KINGDOM" -"3583741440","3583741695","GB","GBR","UNITED KINGDOM" -"3583741696","3583741951","NL","NLD","NETHERLANDS" -"3583742720","3583743487","DE","DEU","GERMANY" -"3583743976","3583743983","GB","GBR","UNITED KINGDOM" -"3583744068","3583744071","GB","GBR","UNITED KINGDOM" -"3583744128","3583744255","GB","GBR","UNITED KINGDOM" -"3583744288","3583744303","GB","GBR","UNITED KINGDOM" -"3583744320","3583744383","GB","GBR","UNITED KINGDOM" -"3583744512","3583744767","GB","GBR","UNITED KINGDOM" -"3583744832","3583744847","GB","GBR","UNITED KINGDOM" -"3583744960","3583744991","GB","GBR","UNITED KINGDOM" -"3583745280","3583745535","GB","GBR","UNITED KINGDOM" -"3583745536","3583745663","SE","SWE","SWEDEN" -"3583745800","3583745807","NL","NLD","NETHERLANDS" -"3583745808","3583745823","GB","GBR","UNITED KINGDOM" -"3583746048","3583754239","PL","POL","POLAND" -"3583754240","3583762431","IT","ITA","ITALY" -"3583762432","3583770623","CZ","CZE","CZECH REPUBLIC" -"3583770624","3583772351","NL","NLD","NETHERLANDS" -"3583772352","3583772367","IT","ITA","ITALY" -"3583772368","3583778815","NL","NLD","NETHERLANDS" -"3583778816","3583787007","IT","ITA","ITALY" -"3583787008","3583795199","UA","UKR","UKRAINE" -"3583795200","3583803391","PL","POL","POLAND" -"3583803392","3583806719","RU","RUS","RUSSIAN FEDERATION" -"3583806720","3583806975","BY","BLR","BELARUS" -"3583806976","3583811583","RU","RUS","RUSSIAN FEDERATION" -"3583811584","3583811839","GB","GBR","UNITED KINGDOM" -"3583811840","3583819775","DE","DEU","GERMANY" -"3583819776","3583827967","RU","RUS","RUSSIAN FEDERATION" -"3583827968","3583836159","CH","CHE","SWITZERLAND" -"3583836160","3583844351","DE","DEU","GERMANY" -"3583844352","3583852543","KZ","KAZ","KAZAKHSTAN" -"3583852544","3583854591","FI","FIN","FINLAND" -"3583854592","3583854726","GB","GBR","UNITED KINGDOM" -"3583854727","3583854735","FI","FIN","FINLAND" -"3583854736","3583854871","GB","GBR","UNITED KINGDOM" -"3583854872","3583854879","FI","FIN","FINLAND" -"3583854880","3583855103","GB","GBR","UNITED KINGDOM" -"3583855104","3583855167","US","USA","UNITED STATES" -"3583855168","3583855175","FI","FIN","FINLAND" -"3583855176","3583855183","US","USA","UNITED STATES" -"3583855184","3583855191","FI","FIN","FINLAND" -"3583855192","3583855199","US","USA","UNITED STATES" -"3583855200","3583855207","FI","FIN","FINLAND" -"3583855208","3583855247","US","USA","UNITED STATES" -"3583855248","3583855311","FI","FIN","FINLAND" -"3583855312","3583855327","US","USA","UNITED STATES" -"3583855328","3583856383","FI","FIN","FINLAND" -"3583856384","3583856447","SG","SGP","SINGAPORE" -"3583856448","3583856615","FI","FIN","FINLAND" -"3583856616","3583856639","SG","SGP","SINGAPORE" -"3583856640","3583860735","FI","FIN","FINLAND" -"3583860736","3583868927","HU","HUN","HUNGARY" -"3583868928","3583877119","AT","AUT","AUSTRIA" -"3583877120","3583882239","RO","ROM","ROMANIA" -"3583882240","3583882751","HU","HUN","HUNGARY" -"3583882752","3583885311","RO","ROM","ROMANIA" -"3583885312","3583893503","GE","GEO","GEORGIA" -"3583893504","3583901695","SI","SVN","SLOVENIA" -"3583901696","3583909887","RU","RUS","RUSSIAN FEDERATION" -"3583909888","3583918079","SE","SWE","SWEDEN" -"3583918080","3583926271","IT","ITA","ITALY" -"3583926272","3583934463","DE","DEU","GERMANY" -"3583934464","3583942655","CH","CHE","SWITZERLAND" -"3583950848","3583959039","PL","POL","POLAND" -"3583959040","3583967231","NO","NOR","NORWAY" -"3583967232","3583975423","NL","NLD","NETHERLANDS" -"3583975424","3583983615","LT","LTU","LITHUANIA" -"3583983616","3583999999","RU","RUS","RUSSIAN FEDERATION" -"3584000000","3584008191","IE","IRL","IRELAND" -"3584008192","3584016383","DK","DNK","DENMARK" -"3584016384","3584024575","RU","RUS","RUSSIAN FEDERATION" -"3584024576","3584032767","UA","UKR","UKRAINE" -"3584032768","3584040959","DE","DEU","GERMANY" -"3584040960","3584049151","CH","CHE","SWITZERLAND" -"3584049152","3584055911","DE","DEU","GERMANY" -"3584055912","3584055919","TR","TUR","TURKEY" -"3584055920","3584057343","DE","DEU","GERMANY" -"3584057344","3584065535","GB","GBR","UNITED KINGDOM" -"3584065536","3584073727","UA","UKR","UKRAINE" -"3584073728","3584081919","SK","SVK","SLOVAKIA" -"3584081920","3584081951","AT","AUT","AUSTRIA" -"3584081952","3584081959","NL","NLD","NETHERLANDS" -"3584081960","3584082143","AT","AUT","AUSTRIA" -"3584082144","3584082175","NL","NLD","NETHERLANDS" -"3584082176","3584082279","AT","AUT","AUSTRIA" -"3584082280","3584082287","NL","NLD","NETHERLANDS" -"3584082288","3584082943","AT","AUT","AUSTRIA" -"3584082944","3584089087","NL","NLD","NETHERLANDS" -"3584089088","3584089855","AT","AUT","AUSTRIA" -"3584089856","3584089871","NL","NLD","NETHERLANDS" -"3584089872","3584089903","AT","AUT","AUSTRIA" -"3584089904","3584089919","NL","NLD","NETHERLANDS" -"3584089920","3584090111","AT","AUT","AUSTRIA" -"3584090112","3584090623","NO","NOR","NORWAY" -"3584090624","3584090879","NL","NLD","NETHERLANDS" -"3584090880","3584090887","NO","NOR","NORWAY" -"3584090888","3584090895","NL","NLD","NETHERLANDS" -"3584090896","3584090943","NO","NOR","NORWAY" -"3584090944","3584090959","NL","NLD","NETHERLANDS" -"3584090960","3584093783","NO","NOR","NORWAY" -"3584093784","3584093791","NL","NLD","NETHERLANDS" -"3584093792","3584094893","NO","NOR","NORWAY" -"3584094894","3584094895","NL","NLD","NETHERLANDS" -"3584094896","3584095935","NO","NOR","NORWAY" -"3584095936","3584095999","NL","NLD","NETHERLANDS" -"3584096000","3584096255","NO","NOR","NORWAY" -"3584096256","3584098303","NL","NLD","NETHERLANDS" -"3584098304","3584106495","SI","SVN","SLOVENIA" -"3584106496","3584114687","FI","FIN","FINLAND" -"3584114688","3584122879","GB","GBR","UNITED KINGDOM" -"3584122880","3584131071","PL","POL","POLAND" -"3584131072","3584139263","TR","TUR","TURKEY" -"3584139264","3584147455","NO","NOR","NORWAY" -"3584147456","3584155647","FR","FRA","FRANCE" -"3584155648","3584163839","NO","NOR","NORWAY" -"3584163840","3584172031","CH","CHE","SWITZERLAND" -"3584172032","3584180223","FR","FRA","FRANCE" -"3584180224","3584188415","AT","AUT","AUSTRIA" -"3584188416","3584196607","GB","GBR","UNITED KINGDOM" -"3584196608","3584204799","DE","DEU","GERMANY" -"3584204800","3584212991","NL","NLD","NETHERLANDS" -"3584212992","3584221183","ES","ESP","SPAIN" -"3584221184","3584229375","NO","NOR","NORWAY" -"3584229376","3584245759","HU","HUN","HUNGARY" -"3584245760","3584253951","NL","NLD","NETHERLANDS" -"3584253952","3584256383","CS","SCG","SERBIA AND MONTENEGRO" -"3584256384","3584256399","CS","SCG","SERBIA AND MONTENEGRO" -"3584256400","3584260135","CS","SCG","SERBIA AND MONTENEGRO" -"3584260136","3584260139","CS","SCG","SERBIA AND MONTENEGRO" -"3584260140","3584260151","CS","SCG","SERBIA AND MONTENEGRO" -"3584260152","3584260155","CS","SCG","SERBIA AND MONTENEGRO" -"3584260156","3584260231","CS","SCG","SERBIA AND MONTENEGRO" -"3584260232","3584260239","CS","SCG","SERBIA AND MONTENEGRO" -"3584260240","3584260247","CS","SCG","SERBIA AND MONTENEGRO" -"3584260248","3584260255","CS","SCG","SERBIA AND MONTENEGRO" -"3584260256","3584262143","CS","SCG","SERBIA AND MONTENEGRO" -"3584262144","3584270335","SE","SWE","SWEDEN" -"3584270336","3584278527","FR","FRA","FRANCE" -"3584278528","3584286719","GB","GBR","UNITED KINGDOM" -"3584286720","3584295719","AT","AUT","AUSTRIA" -"3584295720","3584295727","NL","NLD","NETHERLANDS" -"3584295728","3584295759","AT","AUT","AUSTRIA" -"3584295760","3584295767","PT","PRT","PORTUGAL" -"3584295768","3584295935","AT","AUT","AUSTRIA" -"3584295936","3584295943","AS","ASM","AMERICAN SAMOA" -"3584295944","3584303103","AT","AUT","AUSTRIA" -"3584303104","3584311295","ES","ESP","SPAIN" -"3584311296","3584319487","DE","DEU","GERMANY" -"3584319488","3584327679","LT","LTU","LITHUANIA" -"3584327680","3584335871","DE","DEU","GERMANY" -"3584335872","3584344063","ES","ESP","SPAIN" -"3584344064","3584352255","SE","SWE","SWEDEN" -"3584352256","3584360447","RO","ROM","ROMANIA" -"3584360448","3584368639","GB","GBR","UNITED KINGDOM" -"3584368640","3584376831","SA","SAU","SAUDI ARABIA" -"3584376832","3584393215","DE","DEU","GERMANY" -"3584393216","3584401407","GB","GBR","UNITED KINGDOM" -"3584401408","3584409599","MT","MLT","MALTA" -"3584409600","3584413439","RU","RUS","RUSSIAN FEDERATION" -"3584413440","3584413695","DE","DEU","GERMANY" -"3584413696","3584414207","GB","GBR","UNITED KINGDOM" -"3584414208","3584414719","RU","RUS","RUSSIAN FEDERATION" -"3584414720","3584414975","DE","DEU","GERMANY" -"3584414976","3584416255","RU","RUS","RUSSIAN FEDERATION" -"3584416256","3584416767","GB","GBR","UNITED KINGDOM" -"3584416768","3584417791","RU","RUS","RUSSIAN FEDERATION" -"3584417792","3584434175","GB","GBR","UNITED KINGDOM" -"3584434176","3584442367","LU","LUX","LUXEMBOURG" -"3584442368","3584450559","GB","GBR","UNITED KINGDOM" -"3584458752","3584466943","SA","SAU","SAUDI ARABIA" -"3584466944","3584475135","NO","NOR","NORWAY" -"3584475136","3584483327","FR","FRA","FRANCE" -"3584483328","3584491519","DE","DEU","GERMANY" -"3584491520","3584499711","BG","BGR","BULGARIA" -"3584499712","3584507903","RU","RUS","RUSSIAN FEDERATION" -"3584507904","3584508927","GB","GBR","UNITED KINGDOM" -"3584508928","3584508943","CY","CYP","CYPRUS" -"3584508944","3584508951","KY","CYM","CAYMAN ISLANDS" -"3584508952","3584509031","GB","GBR","UNITED KINGDOM" -"3584509032","3584509039","NL","NLD","NETHERLANDS" -"3584509040","3584509231","GB","GBR","UNITED KINGDOM" -"3584509232","3584509239","AW","ABW","ARUBA" -"3584509240","3584509359","GB","GBR","UNITED KINGDOM" -"3584509360","3584509367","KY","CYM","CAYMAN ISLANDS" -"3584509368","3584510623","GB","GBR","UNITED KINGDOM" -"3584510624","3584510655","NL","NLD","NETHERLANDS" -"3584510656","3584510999","GB","GBR","UNITED KINGDOM" -"3584511000","3584511007","KY","CYM","CAYMAN ISLANDS" -"3584511008","3584511023","GB","GBR","UNITED KINGDOM" -"3584511024","3584511039","KY","CYM","CAYMAN ISLANDS" -"3584511040","3584511055","GB","GBR","UNITED KINGDOM" -"3584511056","3584511071","NL","NLD","NETHERLANDS" -"3584511072","3584511135","GB","GBR","UNITED KINGDOM" -"3584511136","3584511143","HK","HKG","HONG KONG" -"3584511144","3584511807","GB","GBR","UNITED KINGDOM" -"3584511808","3584511935","MT","MLT","MALTA" -"3584511936","3584513535","GB","GBR","UNITED KINGDOM" -"3584513536","3584513567","US","USA","UNITED STATES" -"3584513568","3584516071","GB","GBR","UNITED KINGDOM" -"3584516072","3584516079","BB","BRB","BARBADOS" -"3584516080","3584516095","GB","GBR","UNITED KINGDOM" -"3584516096","3584524287","NO","NOR","NORWAY" -"3584524288","3584532479","IS","ISL","ICELAND" -"3584532480","3584540671","DE","DEU","GERMANY" -"3584540672","3584548863","RU","RUS","RUSSIAN FEDERATION" -"3584548864","3584557055","ES","ESP","SPAIN" -"3584557056","3584565247","EE","EST","ESTONIA" -"3584565248","3584573439","RU","RUS","RUSSIAN FEDERATION" -"3584573440","3584589823","DE","DEU","GERMANY" -"3584589824","3584598015","RU","RUS","RUSSIAN FEDERATION" -"3584598016","3584606207","CZ","CZE","CZECH REPUBLIC" -"3584606208","3584614399","DE","DEU","GERMANY" -"3584614400","3584614463","GB","GBR","UNITED KINGDOM" -"3584614464","3584614623","IE","IRL","IRELAND" -"3584614624","3584614655","GB","GBR","UNITED KINGDOM" -"3584614656","3584614751","IE","IRL","IRELAND" -"3584614752","3584614767","GB","GBR","UNITED KINGDOM" -"3584614768","3584622335","IE","IRL","IRELAND" -"3584622336","3584622591","GB","GBR","UNITED KINGDOM" -"3584622592","3584630783","FI","FIN","FINLAND" -"3584630784","3584638975","BG","BGR","BULGARIA" -"3584638976","3584647167","UA","UKR","UKRAINE" -"3584647168","3584655359","LU","LUX","LUXEMBOURG" -"3584655360","3584663551","CY","CYP","CYPRUS" -"3584663552","3584671743","FR","FRA","FRANCE" -"3584671744","3584688127","NL","NLD","NETHERLANDS" -"3584688128","3584696319","GB","GBR","UNITED KINGDOM" -"3584696320","3584701751","ES","ESP","SPAIN" -"3584701752","3584701823","NL","NLD","NETHERLANDS" -"3584701824","3584701991","ES","ESP","SPAIN" -"3584701992","3584702007","CH","CHE","SWITZERLAND" -"3584702008","3584703095","ES","ESP","SPAIN" -"3584703096","3584703103","BE","BEL","BELGIUM" -"3584703104","3584704511","ES","ESP","SPAIN" -"3584704512","3584720895","RU","RUS","RUSSIAN FEDERATION" -"3584720896","3584729087","GB","GBR","UNITED KINGDOM" -"3584729088","3584737279","DE","DEU","GERMANY" -"3584737280","3584745471","GR","GRC","GREECE" -"3584745472","3584753663","DK","DNK","DENMARK" -"3584753664","3584770047","RU","RUS","RUSSIAN FEDERATION" -"3584770048","3584778239","NL","NLD","NETHERLANDS" -"3584778240","3584786431","IT","ITA","ITALY" -"3584786432","3584794623","NL","NLD","NETHERLANDS" -"3584794624","3584802815","IT","ITA","ITALY" -"3584802816","3584811007","GB","GBR","UNITED KINGDOM" -"3584811008","3584819199","ES","ESP","SPAIN" -"3584819200","3584827391","RU","RUS","RUSSIAN FEDERATION" -"3584827392","3584835583","ES","ESP","SPAIN" -"3584835584","3584843775","AZ","AZE","AZERBAIJAN" -"3584843776","3584851967","DE","DEU","GERMANY" -"3584860160","3584868351","PL","POL","POLAND" -"3584868352","3584876543","NO","NOR","NORWAY" -"3584876544","3584884735","SI","SVN","SLOVENIA" -"3584884736","3584892927","DE","DEU","GERMANY" -"3584892928","3584901119","IL","ISR","ISRAEL" -"3584901120","3584909311","AT","AUT","AUSTRIA" -"3584909312","3584917503","IT","ITA","ITALY" -"3584917504","3584925695","FI","FIN","FINLAND" -"3584925696","3584928275","CH","CHE","SWITZERLAND" -"3584928276","3584928279","IT","ITA","ITALY" -"3584928280","3584929599","CH","CHE","SWITZERLAND" -"3584929600","3584929727","DE","DEU","GERMANY" -"3584929728","3584931375","CH","CHE","SWITZERLAND" -"3584931376","3584931391","ES","ESP","SPAIN" -"3584931392","3584931687","CH","CHE","SWITZERLAND" -"3584931688","3584931695","ES","ESP","SPAIN" -"3584931696","3584932191","CH","CHE","SWITZERLAND" -"3584932192","3584932199","GB","GBR","UNITED KINGDOM" -"3584932200","3584933639","CH","CHE","SWITZERLAND" -"3584933640","3584933647","GB","GBR","UNITED KINGDOM" -"3584933648","3584933887","CH","CHE","SWITZERLAND" -"3584933888","3584942079","PL","POL","POLAND" -"3584942080","3584950271","DK","DNK","DENMARK" -"3584958464","3584966655","DE","DEU","GERMANY" -"3584966656","3584974847","DK","DNK","DENMARK" -"3584974848","3584983039","FR","FRA","FRANCE" -"3584983040","3584983295","US","USA","UNITED STATES" -"3584983296","3584984063","NL","NLD","NETHERLANDS" -"3584984064","3584984319","US","USA","UNITED STATES" -"3584984320","3584984575","NL","NLD","NETHERLANDS" -"3584984576","3584988311","US","USA","UNITED STATES" -"3584988312","3584988319","NL","NLD","NETHERLANDS" -"3584988320","3584988607","US","USA","UNITED STATES" -"3584988608","3584988623","NL","NLD","NETHERLANDS" -"3584988624","3584988639","US","USA","UNITED STATES" -"3584988640","3584988671","NL","NLD","NETHERLANDS" -"3584988672","3584990239","US","USA","UNITED STATES" -"3584990240","3584990527","NL","NLD","NETHERLANDS" -"3584990528","3584990591","US","USA","UNITED STATES" -"3584990592","3584990719","NL","NLD","NETHERLANDS" -"3584990720","3584991231","US","USA","UNITED STATES" -"3584991232","3584999423","IT","ITA","ITALY" -"3584999424","3585007615","GB","GBR","UNITED KINGDOM" -"3585007616","3585015807","AT","AUT","AUSTRIA" -"3585015808","3585023999","IT","ITA","ITALY" -"3585024000","3585032191","CZ","CZE","CZECH REPUBLIC" -"3585032192","3585048575","LV","LVA","LATVIA" -"3585048576","3585050623","IQ","IRQ","IRAQ" -"3585050624","3585054719","GB","GBR","UNITED KINGDOM" -"3585054720","3585055063","NG","NGA","NIGERIA" -"3585055064","3585055071","GB","GBR","UNITED KINGDOM" -"3585055072","3585055087","NG","NGA","NIGERIA" -"3585055088","3585056767","GB","GBR","UNITED KINGDOM" -"3585056768","3585064959","LB","LBN","LEBANON" -"3585064960","3585081343","GB","GBR","UNITED KINGDOM" -"3585081344","3585114111","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3585114112","3585122303","IS","ISL","ICELAND" -"3585122304","3585130495","ES","ESP","SPAIN" -"3585130496","3585138687","FR","FRA","FRANCE" -"3585138688","3585146879","RU","RUS","RUSSIAN FEDERATION" -"3585146880","3585155071","RO","ROM","ROMANIA" -"3585155072","3585163263","GB","GBR","UNITED KINGDOM" -"3585163264","3585171455","BE","BEL","BELGIUM" -"3585171456","3585179647","RU","RUS","RUSSIAN FEDERATION" -"3585179648","3585189887","BE","BEL","BELGIUM" -"3585189888","3585190399","DZ","DZA","ALGERIA" -"3585190400","3585190527","BE","BEL","BELGIUM" -"3585190528","3585190655","DZ","DZA","ALGERIA" -"3585190656","3585196031","BE","BEL","BELGIUM" -"3585196032","3585204223","ES","ESP","SPAIN" -"3585204224","3585212415","GB","GBR","UNITED KINGDOM" -"3585212416","3585220607","DE","DEU","GERMANY" -"3585220608","3585228799","RU","RUS","RUSSIAN FEDERATION" -"3585228800","3585236991","DE","DEU","GERMANY" -"3585236992","3585245183","HU","HUN","HUNGARY" -"3585245184","3585253375","GB","GBR","UNITED KINGDOM" -"3585253376","3585261567","DE","DEU","GERMANY" -"3585261568","3585269759","IT","ITA","ITALY" -"3585269760","3585277951","SY","SYR","SYRIAN ARAB REPUBLIC" -"3585277952","3585286143","SE","SWE","SWEDEN" -"3585286144","3585294335","NO","NOR","NORWAY" -"3585294336","3585302527","DE","DEU","GERMANY" -"3585302528","3585310719","ES","ESP","SPAIN" -"3585310720","3585318911","DE","DEU","GERMANY" -"3585335296","3585343487","UA","UKR","UKRAINE" -"3585343488","3585351679","EE","EST","ESTONIA" -"3585351680","3585359871","CZ","CZE","CZECH REPUBLIC" -"3585359872","3585368063","SE","SWE","SWEDEN" -"3585368064","3585376255","LV","LVA","LATVIA" -"3585376256","3585384447","PL","POL","POLAND" -"3585384448","3585392639","CH","CHE","SWITZERLAND" -"3585392640","3585400831","RU","RUS","RUSSIAN FEDERATION" -"3585400832","3585409023","FR","FRA","FRANCE" -"3585409024","3585417215","RU","RUS","RUSSIAN FEDERATION" -"3585417216","3585425407","BE","BEL","BELGIUM" -"3585425408","3585433599","ES","ESP","SPAIN" -"3585433600","3585441791","IS","ISL","ICELAND" -"3585441792","3585449983","SK","SVK","SLOVAKIA" -"3585449984","3585458175","SA","SAU","SAUDI ARABIA" -"3585458176","3585466367","HU","HUN","HUNGARY" -"3585474560","3585482751","DE","DEU","GERMANY" -"3585482752","3585490943","FR","FRA","FRANCE" -"3585490944","3585499135","IT","ITA","ITALY" -"3585499136","3585515519","DE","DEU","GERMANY" -"3585515520","3585523711","RU","RUS","RUSSIAN FEDERATION" -"3585523712","3585531903","LV","LVA","LATVIA" -"3585531904","3585540095","AT","AUT","AUSTRIA" -"3585540096","3585548287","DE","DEU","GERMANY" -"3585548288","3585556479","RU","RUS","RUSSIAN FEDERATION" -"3585556480","3585564671","DE","DEU","GERMANY" -"3585564672","3585572863","RU","RUS","RUSSIAN FEDERATION" -"3585572864","3585581055","IT","ITA","ITALY" -"3585581056","3585597439","DE","DEU","GERMANY" -"3585597440","3585605631","RU","RUS","RUSSIAN FEDERATION" -"3585605632","3585613823","PL","POL","POLAND" -"3585613824","3585622015","EE","EST","ESTONIA" -"3585622016","3585630207","RU","RUS","RUSSIAN FEDERATION" -"3585630208","3585630783","CS","SCG","SERBIA AND MONTENEGRO" -"3585630784","3585630975","CS","SCG","SERBIA AND MONTENEGRO" -"3585630976","3585630983","CS","SCG","SERBIA AND MONTENEGRO" -"3585630984","3585630999","RS","SRB","SERBIA" -"3585631000","3585631007","CS","SCG","SERBIA AND MONTENEGRO" -"3585631008","3585631023","CS","SCG","SERBIA AND MONTENEGRO" -"3585631024","3585631031","CS","SCG","SERBIA AND MONTENEGRO" -"3585631032","3585631103","CS","SCG","SERBIA AND MONTENEGRO" -"3585631104","3585631135","CS","SCG","SERBIA AND MONTENEGRO" -"3585631136","3585631199","CS","SCG","SERBIA AND MONTENEGRO" -"3585631200","3585631223","RS","SRB","SERBIA" -"3585631224","3585631227","CS","SCG","SERBIA AND MONTENEGRO" -"3585631228","3585631231","RS","SRB","SERBIA" -"3585631232","3585631255","CS","SCG","SERBIA AND MONTENEGRO" -"3585631256","3585631263","RS","SRB","SERBIA" -"3585631264","3585631307","CS","SCG","SERBIA AND MONTENEGRO" -"3585631308","3585631311","RS","SRB","SERBIA" -"3585631312","3585631503","CS","SCG","SERBIA AND MONTENEGRO" -"3585631504","3585631519","RS","SRB","SERBIA" -"3585631520","3585632495","CS","SCG","SERBIA AND MONTENEGRO" -"3585632496","3585632511","RS","SRB","SERBIA" -"3585632512","3585638399","CS","SCG","SERBIA AND MONTENEGRO" -"3585638400","3585646591","RU","RUS","RUSSIAN FEDERATION" -"3585646592","3585654783","SA","SAU","SAUDI ARABIA" -"3585654784","3585655631","NO","NOR","NORWAY" -"3585655632","3585655639","US","USA","UNITED STATES" -"3585655640","3585662975","NO","NOR","NORWAY" -"3585662976","3585671167","BY","BLR","BELARUS" -"3585671168","3585672191","SE","SWE","SWEDEN" -"3585672192","3585672447","DK","DNK","DENMARK" -"3585672448","3585672959","SE","SWE","SWEDEN" -"3585672960","3585673983","DK","DNK","DENMARK" -"3585673984","3585674239","SE","SWE","SWEDEN" -"3585674240","3585675775","DK","DNK","DENMARK" -"3585675776","3585676287","SE","SWE","SWEDEN" -"3585676288","3585677055","DK","DNK","DENMARK" -"3585677056","3585677311","SE","SWE","SWEDEN" -"3585677312","3585677567","DK","DNK","DENMARK" -"3585677568","3585679359","SE","SWE","SWEDEN" -"3585679360","3585687551","FI","FIN","FINLAND" -"3585687552","3585695743","DE","DEU","GERMANY" -"3585695744","3585695999","CM","CMR","CAMEROON" -"3585696000","3585696063","BD","BGD","BANGLADESH" -"3585696064","3585696511","GB","GBR","UNITED KINGDOM" -"3585696512","3585696767","LB","LBN","LEBANON" -"3585696768","3585696799","NO","NOR","NORWAY" -"3585696800","3585696831","LR","LBR","LIBERIA" -"3585696832","3585697279","GB","GBR","UNITED KINGDOM" -"3585697280","3585697535","NO","NOR","NORWAY" -"3585697536","3585697791","GB","GBR","UNITED KINGDOM" -"3585697792","3585698047","NG","NGA","NIGERIA" -"3585698048","3585698303","GB","GBR","UNITED KINGDOM" -"3585698304","3585698815","NG","NGA","NIGERIA" -"3585698816","3585699583","GB","GBR","UNITED KINGDOM" -"3585699584","3585699711","US","USA","UNITED STATES" -"3585699712","3585699839","AU","AUS","AUSTRALIA" -"3585699840","3585700159","US","USA","UNITED STATES" -"3585700160","3585700191","GB","GBR","UNITED KINGDOM" -"3585700192","3585700222","US","USA","UNITED STATES" -"3585700223","3585700231","GB","GBR","UNITED KINGDOM" -"3585700232","3585700239","US","USA","UNITED STATES" -"3585700240","3585700255","ZA","ZAF","SOUTH AFRICA" -"3585700256","3585700271","GB","GBR","UNITED KINGDOM" -"3585700272","3585700287","NG","NGA","NIGERIA" -"3585700288","3585700303","GB","GBR","UNITED KINGDOM" -"3585700304","3585700319","NG","NGA","NIGERIA" -"3585700320","3585700343","AU","AUS","AUSTRALIA" -"3585700344","3585700351","ZA","ZAF","SOUTH AFRICA" -"3585700352","3585700607","NG","NGA","NIGERIA" -"3585700608","3585700863","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"3585700864","3585701119","IQ","IRQ","IRAQ" -"3585701120","3585701375","US","USA","UNITED STATES" -"3585701376","3585701439","MW","MWI","MALAWI" -"3585701440","3585701503","GB","GBR","UNITED KINGDOM" -"3585701504","3585701519","NG","NGA","NIGERIA" -"3585701520","3585701535","CA","CAN","CANADA" -"3585701536","3585701631","NG","NGA","NIGERIA" -"3585701632","3585701887","GB","GBR","UNITED KINGDOM" -"3585701888","3585702143","FR","FRA","FRANCE" -"3585702144","3585702399","LR","LBR","LIBERIA" -"3585702400","3585702463","US","USA","UNITED STATES" -"3585702464","3585702527","GB","GBR","UNITED KINGDOM" -"3585702528","3585702655","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"3585702656","3585702911","TG","TGO","TOGO" -"3585702912","3585703167","NG","NGA","NIGERIA" -"3585703168","3585703423","FR","FRA","FRANCE" -"3585703424","3585703935","GB","GBR","UNITED KINGDOM" -"3585703936","3585712127","DE","DEU","GERMANY" -"3585712128","3585716415","AT","AUT","AUSTRIA" -"3585716416","3585716423","DE","DEU","GERMANY" -"3585716424","3585720319","AT","AUT","AUSTRIA" -"3585720320","3585728511","GB","GBR","UNITED KINGDOM" -"3585728512","3585736703","SE","SWE","SWEDEN" -"3585736704","3585744895","GB","GBR","UNITED KINGDOM" -"3585744896","3585750335","FR","FRA","FRANCE" -"3585750336","3585750351","GB","GBR","UNITED KINGDOM" -"3585750352","3585750367","DE","DEU","GERMANY" -"3585750368","3585750383","ES","ESP","SPAIN" -"3585750384","3585750399","PT","PRT","PORTUGAL" -"3585750400","3585753087","FR","FRA","FRANCE" -"3585753088","3585761279","PL","POL","POLAND" -"3585761280","3585769471","UA","UKR","UKRAINE" -"3585769472","3585777663","TR","TUR","TURKEY" -"3585777664","3585785855","JO","JOR","JORDAN" -"3585785856","3585794047","UA","UKR","UKRAINE" -"3585794048","3585802239","FI","FIN","FINLAND" -"3585802240","3585810431","IT","ITA","ITALY" -"3585810432","3585818623","GB","GBR","UNITED KINGDOM" -"3585818624","3585826815","DE","DEU","GERMANY" -"3585826816","3585835007","RU","RUS","RUSSIAN FEDERATION" -"3585835008","3585835023","GB","GBR","UNITED KINGDOM" -"3585835024","3585835039","US","USA","UNITED STATES" -"3585835040","3585835071","NL","NLD","NETHERLANDS" -"3585835072","3585835263","US","USA","UNITED STATES" -"3585835264","3585835395","NL","NLD","NETHERLANDS" -"3585835396","3585835399","US","USA","UNITED STATES" -"3585835400","3585835423","NL","NLD","NETHERLANDS" -"3585835424","3585835519","US","USA","UNITED STATES" -"3585835520","3585835583","NL","NLD","NETHERLANDS" -"3585835584","3585835647","IQ","IRQ","IRAQ" -"3585835648","3585835711","NL","NLD","NETHERLANDS" -"3585835712","3585835775","US","USA","UNITED STATES" -"3585835776","3585835791","NL","NLD","NETHERLANDS" -"3585835792","3585835839","GQ","GNQ","EQUATORIAL GUINEA" -"3585835840","3585835847","AO","AGO","ANGOLA" -"3585835848","3585835855","NL","NLD","NETHERLANDS" -"3585835856","3585835863","US","USA","UNITED STATES" -"3585835864","3585835871","NL","NLD","NETHERLANDS" -"3585835872","3585835879","IQ","IRQ","IRAQ" -"3585835880","3585835887","NL","NLD","NETHERLANDS" -"3585835888","3585835895","US","USA","UNITED STATES" -"3585835896","3585835903","IQ","IRQ","IRAQ" -"3585835904","3585835911","NL","NLD","NETHERLANDS" -"3585835912","3585835919","KE","KEN","KENYA" -"3585835920","3585835927","SO","SOM","SOMALIA" -"3585835928","3585835935","SC","SYC","SEYCHELLES" -"3585835936","3585835943","SD","SDN","SUDAN" -"3585835944","3585835951","DJ","DJI","DJIBOUTI" -"3585835952","3585835959","SO","SOM","SOMALIA" -"3585835960","3585835967","TD","TCD","CHAD" -"3585835968","3585835983","ER","ERI","ERITREA" -"3585835984","3585836007","US","USA","UNITED STATES" -"3585836008","3585836023","IQ","IRQ","IRAQ" -"3585836024","3585836031","US","USA","UNITED STATES" -"3585836032","3585836287","NL","NLD","NETHERLANDS" -"3585836288","3585836543","SA","SAU","SAUDI ARABIA" -"3585836544","3585837055","DZ","DZA","ALGERIA" -"3585837056","3585837311","NG","NGA","NIGERIA" -"3585837312","3585837439","NL","NLD","NETHERLANDS" -"3585837440","3585837567","NG","NGA","NIGERIA" -"3585837568","3585838143","AO","AGO","ANGOLA" -"3585838144","3585838207","NA","NAM","NAMIBIA" -"3585838208","3585838247","US","USA","UNITED STATES" -"3585838248","3585838255","AO","AGO","ANGOLA" -"3585838256","3585838271","US","USA","UNITED STATES" -"3585838272","3585838279","AO","AGO","ANGOLA" -"3585838280","3585838295","US","USA","UNITED STATES" -"3585838296","3585838303","AO","AGO","ANGOLA" -"3585838304","3585838335","US","USA","UNITED STATES" -"3585838336","3585838719","NL","NLD","NETHERLANDS" -"3585838720","3585838847","NG","NGA","NIGERIA" -"3585838848","3585838879","NL","NLD","NETHERLANDS" -"3585838880","3585838911","IQ","IRQ","IRAQ" -"3585838912","3585838975","NG","NGA","NIGERIA" -"3585838976","3585839103","DZ","DZA","ALGERIA" -"3585839104","3585839615","NL","NLD","NETHERLANDS" -"3585839616","3585841151","US","USA","UNITED STATES" -"3585841152","3585841663","IQ","IRQ","IRAQ" -"3585841664","3585841919","DZ","DZA","ALGERIA" -"3585841920","3585842175","NG","NGA","NIGERIA" -"3585842176","3585842199","IQ","IRQ","IRAQ" -"3585842200","3585842207","NL","NLD","NETHERLANDS" -"3585842208","3585842687","IQ","IRQ","IRAQ" -"3585842688","3585842943","NL","NLD","NETHERLANDS" -"3585842944","3585843199","SE","SWE","SWEDEN" -"3585843200","3585851391","NO","NOR","NORWAY" -"3585851392","3585859583","SE","SWE","SWEDEN" -"3585859584","3585860607","RU","RUS","RUSSIAN FEDERATION" -"3585860608","3585865727","DE","DEU","GERMANY" -"3585865728","3585867775","RU","RUS","RUSSIAN FEDERATION" -"3585867776","3585875967","NO","NOR","NORWAY" -"3585875968","3585884159","CH","CHE","SWITZERLAND" -"3585884160","3585892351","IQ","IRQ","IRAQ" -"3585892352","3585900543","DE","DEU","GERMANY" -"3585900544","3585902239","NO","NOR","NORWAY" -"3585902240","3585902271","GB","GBR","UNITED KINGDOM" -"3585902272","3585902447","NO","NOR","NORWAY" -"3585902448","3585902463","GB","GBR","UNITED KINGDOM" -"3585902464","3585908735","NO","NOR","NORWAY" -"3585908736","3585909759","FR","FRA","FRANCE" -"3585909760","3585910271","MQ","MTQ","MARTINIQUE" -"3585910272","3585910783","FR","FRA","FRANCE" -"3585910784","3585911039","MQ","MTQ","MARTINIQUE" -"3585911040","3585911551","FR","FRA","FRANCE" -"3585911552","3585911807","GP","GLP","GUADELOUPE" -"3585911808","3585912063","FR","FRA","FRANCE" -"3585912064","3585912319","GP","GLP","GUADELOUPE" -"3585912320","3585912575","FR","FRA","FRANCE" -"3585912576","3585912831","GP","GLP","GUADELOUPE" -"3585912832","3585916671","FR","FRA","FRANCE" -"3585916672","3585916927","MQ","MTQ","MARTINIQUE" -"3585916928","3585925119","IT","ITA","ITALY" -"3585925120","3585933311","CH","CHE","SWITZERLAND" -"3585933312","3585936127","NL","NLD","NETHERLANDS" -"3585936128","3585937407","US","USA","UNITED STATES" -"3585937408","3585940479","NL","NLD","NETHERLANDS" -"3585940480","3585940735","BE","BEL","BELGIUM" -"3585940736","3585941503","NL","NLD","NETHERLANDS" -"3585941504","3585949695","PL","POL","POLAND" -"3585949696","3585957887","KW","KWT","KUWAIT" -"3585957888","3585966079","SE","SWE","SWEDEN" -"3585966080","3585974271","CH","CHE","SWITZERLAND" -"3585974272","3585982463","BE","BEL","BELGIUM" -"3585982464","3585998847","RU","RUS","RUSSIAN FEDERATION" -"3585998848","3586007039","ES","ESP","SPAIN" -"3586007040","3586015231","LT","LTU","LITHUANIA" -"3586015232","3586023423","FR","FRA","FRANCE" -"3586023424","3586031615","IS","ISL","ICELAND" -"3586031616","3586039807","IE","IRL","IRELAND" -"3586039808","3586047999","GB","GBR","UNITED KINGDOM" -"3586048000","3586056191","PT","PRT","PORTUGAL" -"3586056192","3586072575","RU","RUS","RUSSIAN FEDERATION" -"3586072576","3586088959","DE","DEU","GERMANY" -"3586088960","3586097151","CZ","CZE","CZECH REPUBLIC" -"3586097152","3586105343","HR","HRV","CROATIA" -"3586105344","3586105599","IE","IRL","IRELAND" -"3586105600","3586105727","ER","ERI","ERITREA" -"3586105728","3586113535","IE","IRL","IRELAND" -"3586113536","3586121727","BG","BGR","BULGARIA" -"3586121728","3586129919","IE","IRL","IRELAND" -"3586129920","3586146303","CZ","CZE","CZECH REPUBLIC" -"3586146304","3586162687","PL","POL","POLAND" -"3586162688","3586179071","FI","FIN","FINLAND" -"3586179072","3586191871","ES","ESP","SPAIN" -"3586191872","3586191887","FR","FRA","FRANCE" -"3586191888","3586195455","ES","ESP","SPAIN" -"3586211840","3586220287","CH","CHE","SWITZERLAND" -"3586220288","3586220303","FR","FRA","FRANCE" -"3586220304","3586225295","CH","CHE","SWITZERLAND" -"3586225296","3586225311","FR","FRA","FRANCE" -"3586225312","3586228223","CH","CHE","SWITZERLAND" -"3586228224","3586237695","BE","BEL","BELGIUM" -"3586237696","3586237951","NL","NLD","NETHERLANDS" -"3586237952","3586244607","BE","BEL","BELGIUM" -"3586244608","3586244863","NL","NLD","NETHERLANDS" -"3586244864","3586246655","GB","GBR","UNITED KINGDOM" -"3586246656","3586248703","BE","BEL","BELGIUM" -"3586248704","3586250449","NL","NLD","NETHERLANDS" -"3586250450","3586250457","BE","BEL","BELGIUM" -"3586250458","3586252799","NL","NLD","NETHERLANDS" -"3586252800","3586254847","BE","BEL","BELGIUM" -"3586254848","3586258943","NL","NLD","NETHERLANDS" -"3586258944","3586259455","BE","BEL","BELGIUM" -"3586259456","3586269343","NL","NLD","NETHERLANDS" -"3586269344","3586269415","ES","ESP","SPAIN" -"3586269416","3586269423","NL","NLD","NETHERLANDS" -"3586269424","3586269439","ES","ESP","SPAIN" -"3586269440","3586269471","NL","NLD","NETHERLANDS" -"3586269472","3586269487","ES","ESP","SPAIN" -"3586269488","3586269535","NL","NLD","NETHERLANDS" -"3586269536","3586269607","GB","GBR","UNITED KINGDOM" -"3586269608","3586269695","ES","ESP","SPAIN" -"3586269696","3586269759","NL","NLD","NETHERLANDS" -"3586269760","3586269823","ES","ESP","SPAIN" -"3586269824","3586269855","NL","NLD","NETHERLANDS" -"3586269856","3586269887","ES","ESP","SPAIN" -"3586269888","3586269951","NL","NLD","NETHERLANDS" -"3586269952","3586270079","ES","ESP","SPAIN" -"3586270080","3586270207","NL","NLD","NETHERLANDS" -"3586270208","3586271231","ES","ESP","SPAIN" -"3586271232","3586271487","NL","NLD","NETHERLANDS" -"3586271488","3586271831","ES","ESP","SPAIN" -"3586271832","3586271839","IT","ITA","ITALY" -"3586271840","3586271999","ES","ESP","SPAIN" -"3586272000","3586272255","IT","ITA","ITALY" -"3586272256","3586272383","NL","NLD","NETHERLANDS" -"3586272384","3586272767","ES","ESP","SPAIN" -"3586272768","3586272799","NL","NLD","NETHERLANDS" -"3586272800","3586272807","IT","ITA","ITALY" -"3586272808","3586272815","ES","ESP","SPAIN" -"3586272816","3586272831","IT","ITA","ITALY" -"3586272832","3586272895","NL","NLD","NETHERLANDS" -"3586272896","3586272959","IT","ITA","ITALY" -"3586272960","3586272991","ES","ESP","SPAIN" -"3586272992","3586273023","IT","ITA","ITALY" -"3586273024","3586276351","NL","NLD","NETHERLANDS" -"3586276352","3586276863","ES","ESP","SPAIN" -"3586276864","3586277375","NL","NLD","NETHERLANDS" -"3586277376","3586293759","TR","TUR","TURKEY" -"3586293760","3586310143","ES","ESP","SPAIN" -"3586310144","3586326527","CZ","CZE","CZECH REPUBLIC" -"3586326528","3586342911","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3586342912","3586359295","ES","ESP","SPAIN" -"3586359296","3586375679","PL","POL","POLAND" -"3586375680","3586392063","CZ","CZE","CZECH REPUBLIC" -"3586392064","3586408447","NL","NLD","NETHERLANDS" -"3586408448","3586424831","BA","BIH","BOSNIA AND HERZEGOVINA" -"3586424832","3586441215","CH","CHE","SWITZERLAND" -"3586441216","3586457599","DE","DEU","GERMANY" -"3586457600","3586473983","NL","NLD","NETHERLANDS" -"3586473984","3586473987","SK","SVK","SLOVAKIA" -"3586473988","3586476311","HU","HUN","HUNGARY" -"3586476312","3586476319","AT","AUT","AUSTRIA" -"3586476320","3586476351","HU","HUN","HUNGARY" -"3586476352","3586476383","AT","AUT","AUSTRIA" -"3586476384","3586476407","UA","UKR","UKRAINE" -"3586476408","3586478079","HU","HUN","HUNGARY" -"3586478080","3586478591","SK","SVK","SLOVAKIA" -"3586478592","3586490367","HU","HUN","HUNGARY" -"3586490368","3586506751","LT","LTU","LITHUANIA" -"3586506752","3586523135","NL","NLD","NETHERLANDS" -"3586523136","3586543519","DE","DEU","GERMANY" -"3586543520","3586543527","GB","GBR","UNITED KINGDOM" -"3586543528","3586543759","DE","DEU","GERMANY" -"3586543760","3586543791","GB","GBR","UNITED KINGDOM" -"3586543792","3586545679","DE","DEU","GERMANY" -"3586545680","3586545703","GB","GBR","UNITED KINGDOM" -"3586545704","3586546375","DE","DEU","GERMANY" -"3586546376","3586546383","GB","GBR","UNITED KINGDOM" -"3586546384","3586555903","DE","DEU","GERMANY" -"3586555904","3586572287","IT","ITA","ITALY" -"3586572288","3586585087","CS","SCG","SERBIA AND MONTENEGRO" -"3586585088","3586585119","RS","SRB","SERBIA" -"3586585120","3586585127","CS","SCG","SERBIA AND MONTENEGRO" -"3586585128","3586585151","RS","SRB","SERBIA" -"3586585152","3586585159","CS","SCG","SERBIA AND MONTENEGRO" -"3586585160","3586585175","RS","SRB","SERBIA" -"3586585176","3586585183","CS","SCG","SERBIA AND MONTENEGRO" -"3586585184","3586585215","RS","SRB","SERBIA" -"3586585216","3586585223","CS","SCG","SERBIA AND MONTENEGRO" -"3586585224","3586585263","RS","SRB","SERBIA" -"3586585264","3586585279","CS","SCG","SERBIA AND MONTENEGRO" -"3586585280","3586585319","RS","SRB","SERBIA" -"3586585320","3586585335","CS","SCG","SERBIA AND MONTENEGRO" -"3586585336","3586585375","RS","SRB","SERBIA" -"3586585376","3586585391","CS","SCG","SERBIA AND MONTENEGRO" -"3586585392","3586585463","RS","SRB","SERBIA" -"3586585464","3586585471","CS","SCG","SERBIA AND MONTENEGRO" -"3586585472","3586585479","RS","SRB","SERBIA" -"3586585480","3586585487","CS","SCG","SERBIA AND MONTENEGRO" -"3586585488","3586585495","RS","SRB","SERBIA" -"3586585496","3586585511","CS","SCG","SERBIA AND MONTENEGRO" -"3586585512","3586585519","RS","SRB","SERBIA" -"3586585520","3586585535","CS","SCG","SERBIA AND MONTENEGRO" -"3586585536","3586585543","RS","SRB","SERBIA" -"3586585544","3586585559","CS","SCG","SERBIA AND MONTENEGRO" -"3586585560","3586585583","RS","SRB","SERBIA" -"3586585584","3586585591","CS","SCG","SERBIA AND MONTENEGRO" -"3586585592","3586585599","RS","SRB","SERBIA" -"3586585600","3586585615","CS","SCG","SERBIA AND MONTENEGRO" -"3586585616","3586585671","RS","SRB","SERBIA" -"3586585672","3586585679","CS","SCG","SERBIA AND MONTENEGRO" -"3586585680","3586585687","RS","SRB","SERBIA" -"3586585688","3586585703","CS","SCG","SERBIA AND MONTENEGRO" -"3586585704","3586585711","RS","SRB","SERBIA" -"3586585712","3586585719","CS","SCG","SERBIA AND MONTENEGRO" -"3586585720","3586585727","RS","SRB","SERBIA" -"3586585728","3586585735","CS","SCG","SERBIA AND MONTENEGRO" -"3586585736","3586585751","RS","SRB","SERBIA" -"3586585752","3586585759","CS","SCG","SERBIA AND MONTENEGRO" -"3586585760","3586585847","RS","SRB","SERBIA" -"3586585848","3586585863","CS","SCG","SERBIA AND MONTENEGRO" -"3586585864","3586585879","RS","SRB","SERBIA" -"3586585880","3586585895","CS","SCG","SERBIA AND MONTENEGRO" -"3586585896","3586585927","RS","SRB","SERBIA" -"3586585928","3586585943","CS","SCG","SERBIA AND MONTENEGRO" -"3586585944","3586585951","RS","SRB","SERBIA" -"3586585952","3586585959","CS","SCG","SERBIA AND MONTENEGRO" -"3586585960","3586585983","RS","SRB","SERBIA" -"3586585984","3586585999","CS","SCG","SERBIA AND MONTENEGRO" -"3586586000","3586586007","RS","SRB","SERBIA" -"3586586008","3586586111","CS","SCG","SERBIA AND MONTENEGRO" -"3586586112","3586586135","RS","SRB","SERBIA" -"3586586136","3586586151","CS","SCG","SERBIA AND MONTENEGRO" -"3586586152","3586586175","RS","SRB","SERBIA" -"3586586176","3586586183","CS","SCG","SERBIA AND MONTENEGRO" -"3586586184","3586586191","RS","SRB","SERBIA" -"3586586192","3586586207","CS","SCG","SERBIA AND MONTENEGRO" -"3586586208","3586586255","RS","SRB","SERBIA" -"3586586256","3586586263","CS","SCG","SERBIA AND MONTENEGRO" -"3586586264","3586586271","RS","SRB","SERBIA" -"3586586272","3586588671","CS","SCG","SERBIA AND MONTENEGRO" -"3586588672","3586596863","IT","ITA","ITALY" -"3586596864","3586605055","GB","GBR","UNITED KINGDOM" -"3586605056","3586621439","SE","SWE","SWEDEN" -"3586621440","3586625535","IE","IRL","IRELAND" -"3586625536","3586629631","GB","GBR","UNITED KINGDOM" -"3586629632","3586637823","IE","IRL","IRELAND" -"3586637824","3586654207","PL","POL","POLAND" -"3586654208","3586662399","GE","GEO","GEORGIA" -"3586662400","3586670591","UA","UKR","UKRAINE" -"3586670592","3586677183","DE","DEU","GERMANY" -"3586677184","3586677247","IE","IRL","IRELAND" -"3586677248","3586677311","DE","DEU","GERMANY" -"3586677312","3586677327","IE","IRL","IRELAND" -"3586677328","3586677375","DE","DEU","GERMANY" -"3586677376","3586677487","IE","IRL","IRELAND" -"3586677488","3586677759","DE","DEU","GERMANY" -"3586677760","3586678015","GR","GRC","GREECE" -"3586678016","3586678335","IE","IRL","IRELAND" -"3586678336","3586678399","US","USA","UNITED STATES" -"3586678400","3586678415","GB","GBR","UNITED KINGDOM" -"3586678416","3586678671","IE","IRL","IRELAND" -"3586678672","3586678679","GB","GBR","UNITED KINGDOM" -"3586678680","3586678687","MU","MUS","MAURITIUS" -"3586678688","3586678783","GB","GBR","UNITED KINGDOM" -"3586678784","3586679039","IT","ITA","ITALY" -"3586679040","3586679103","US","USA","UNITED STATES" -"3586679104","3586679167","DE","DEU","GERMANY" -"3586679168","3586679231","US","USA","UNITED STATES" -"3586679232","3586679327","IE","IRL","IRELAND" -"3586679328","3586679343","DK","DNK","DENMARK" -"3586679344","3586679359","IE","IRL","IRELAND" -"3586679360","3586679423","DE","DEU","GERMANY" -"3586679424","3586679583","IE","IRL","IRELAND" -"3586679584","3586679599","IT","ITA","ITALY" -"3586679600","3586679647","IE","IRL","IRELAND" -"3586679648","3586679711","IT","ITA","ITALY" -"3586679712","3586679727","IE","IRL","IRELAND" -"3586679728","3586679743","IT","ITA","ITALY" -"3586679744","3586679839","IE","IRL","IRELAND" -"3586679840","3586679855","FR","FRA","FRANCE" -"3586679856","3586680063","IE","IRL","IRELAND" -"3586680064","3586680319","IT","ITA","ITALY" -"3586680320","3586680447","ES","ESP","SPAIN" -"3586680448","3586680463","IE","IRL","IRELAND" -"3586680464","3586680543","ES","ESP","SPAIN" -"3586680544","3586680559","IE","IRL","IRELAND" -"3586680560","3586680575","ES","ESP","SPAIN" -"3586680576","3586680607","IE","IRL","IRELAND" -"3586680608","3586680615","ES","ESP","SPAIN" -"3586680616","3586680767","IE","IRL","IRELAND" -"3586680768","3586680831","ES","ESP","SPAIN" -"3586680832","3586680959","FR","FRA","FRANCE" -"3586680960","3586681015","IE","IRL","IRELAND" -"3586681016","3586681087","FR","FRA","FRANCE" -"3586681088","3586681343","IT","ITA","ITALY" -"3586681344","3586681599","IE","IRL","IRELAND" -"3586681600","3586681615","FR","FRA","FRANCE" -"3586681616","3586681695","IE","IRL","IRELAND" -"3586681696","3586682111","FR","FRA","FRANCE" -"3586682112","3586682175","US","USA","UNITED STATES" -"3586682176","3586682367","IE","IRL","IRELAND" -"3586682368","3586682399","AT","AUT","AUSTRIA" -"3586682400","3586682431","IE","IRL","IRELAND" -"3586682432","3586682879","FR","FRA","FRANCE" -"3586682880","3586686975","US","USA","UNITED STATES" -"3586686976","3586703359","SE","SWE","SWEDEN" -"3586703360","3586719743","CH","CHE","SWITZERLAND" -"3586719744","3586752511","ES","ESP","SPAIN" -"3586752512","3586785279","NL","NLD","NETHERLANDS" -"3586785280","3586793471","RU","RUS","RUSSIAN FEDERATION" -"3586793472","3586801663","CH","CHE","SWITZERLAND" -"3586801664","3586818047","HR","HRV","CROATIA" -"3586818048","3586834431","IE","IRL","IRELAND" -"3586834432","3586850495","DE","DEU","GERMANY" -"3586850496","3586850511","US","USA","UNITED STATES" -"3586850512","3586850543","DE","DEU","GERMANY" -"3586850544","3586850559","GR","GRC","GREECE" -"3586850560","3586850815","DE","DEU","GERMANY" -"3586850816","3586867199","NO","NOR","NORWAY" -"3586867200","3586883583","FR","FRA","FRANCE" -"3586883584","3586899967","IT","ITA","ITALY" -"3586899968","3586900287","DE","DEU","GERMANY" -"3586900288","3586900351","NL","NLD","NETHERLANDS" -"3586900352","3586902271","DE","DEU","GERMANY" -"3586902272","3586902335","CH","CHE","SWITZERLAND" -"3586902336","3586902411","DE","DEU","GERMANY" -"3586902412","3586902415","CH","CHE","SWITZERLAND" -"3586902416","3586903263","DE","DEU","GERMANY" -"3586903264","3586903295","CH","CHE","SWITZERLAND" -"3586903296","3586904223","DE","DEU","GERMANY" -"3586904224","3586904255","CH","CHE","SWITZERLAND" -"3586904256","3586904319","DE","DEU","GERMANY" -"3586904320","3586904415","CH","CHE","SWITZERLAND" -"3586904416","3586904831","DE","DEU","GERMANY" -"3586904832","3586904839","RU","RUS","RUSSIAN FEDERATION" -"3586904840","3586905039","DE","DEU","GERMANY" -"3586905040","3586905055","CH","CHE","SWITZERLAND" -"3586905056","3586905071","DE","DEU","GERMANY" -"3586905072","3586905079","CH","CHE","SWITZERLAND" -"3586905080","3586905087","DE","DEU","GERMANY" -"3586905088","3586905119","CH","CHE","SWITZERLAND" -"3586905120","3586905167","DE","DEU","GERMANY" -"3586905168","3586905199","CH","CHE","SWITZERLAND" -"3586905200","3586905215","GB","GBR","UNITED KINGDOM" -"3586905216","3586905247","DE","DEU","GERMANY" -"3586905248","3586905279","CH","CHE","SWITZERLAND" -"3586905280","3586905287","DE","DEU","GERMANY" -"3586905288","3586905295","CY","CYP","CYPRUS" -"3586905296","3586906391","DE","DEU","GERMANY" -"3586906392","3586906399","CH","CHE","SWITZERLAND" -"3586906400","3586906423","DE","DEU","GERMANY" -"3586906424","3586906427","CH","CHE","SWITZERLAND" -"3586906428","3586906719","DE","DEU","GERMANY" -"3586906720","3586906735","CH","CHE","SWITZERLAND" -"3586906736","3586907903","DE","DEU","GERMANY" -"3586907904","3586908031","CH","CHE","SWITZERLAND" -"3586908032","3586910559","DE","DEU","GERMANY" -"3586910560","3586910567","NL","NLD","NETHERLANDS" -"3586910568","3586910575","CY","CYP","CYPRUS" -"3586910576","3586910587","NL","NLD","NETHERLANDS" -"3586910588","3586910591","DE","DEU","GERMANY" -"3586910592","3586910703","NL","NLD","NETHERLANDS" -"3586910704","3586910711","DE","DEU","GERMANY" -"3586910712","3586910719","NL","NLD","NETHERLANDS" -"3586910720","3586910991","DE","DEU","GERMANY" -"3586910992","3586911007","BE","BEL","BELGIUM" -"3586911008","3586911039","DE","DEU","GERMANY" -"3586911040","3586911103","GB","GBR","UNITED KINGDOM" -"3586911104","3586911167","NL","NLD","NETHERLANDS" -"3586911168","3586911191","DE","DEU","GERMANY" -"3586911192","3586911195","BE","BEL","BELGIUM" -"3586911196","3586912511","DE","DEU","GERMANY" -"3586912512","3586912575","FR","FRA","FRANCE" -"3586912576","3586912647","DE","DEU","GERMANY" -"3586912648","3586912651","FR","FRA","FRANCE" -"3586912652","3586912671","DE","DEU","GERMANY" -"3586912672","3586912675","US","USA","UNITED STATES" -"3586912676","3586912719","DE","DEU","GERMANY" -"3586912720","3586912735","US","USA","UNITED STATES" -"3586912736","3586916351","DE","DEU","GERMANY" -"3586916352","3586924031","IT","ITA","ITALY" -"3586924032","3586924047","US","USA","UNITED STATES" -"3586924048","3586924543","IT","ITA","ITALY" -"3586924544","3586924743","FI","FIN","FINLAND" -"3586924744","3586924751","AX","FIN","FINLAND" -"3586924752","3586924767","FI","FIN","FINLAND" -"3586924768","3586924799","AX","FIN","FINLAND" -"3586924800","3586924871","FI","FIN","FINLAND" -"3586924872","3586924879","AX","FIN","FINLAND" -"3586924880","3586924919","FI","FIN","FINLAND" -"3586924920","3586924927","AX","FIN","FINLAND" -"3586924928","3586924943","FI","FIN","FINLAND" -"3586924944","3586924959","AX","FIN","FINLAND" -"3586924960","3586924983","FI","FIN","FINLAND" -"3586924984","3586925055","AX","FIN","FINLAND" -"3586925056","3586925103","FI","FIN","FINLAND" -"3586925104","3586925135","AX","FIN","FINLAND" -"3586925136","3586925471","FI","FIN","FINLAND" -"3586925472","3586925503","AX","FIN","FINLAND" -"3586925504","3586925535","FI","FIN","FINLAND" -"3586925536","3586925567","AX","FIN","FINLAND" -"3586925568","3586925695","FI","FIN","FINLAND" -"3586925696","3586925759","AX","FIN","FINLAND" -"3586925760","3586925791","FI","FIN","FINLAND" -"3586925792","3586925823","AX","FIN","FINLAND" -"3586925824","3586925831","FI","FIN","FINLAND" -"3586925832","3586925855","AX","FIN","FINLAND" -"3586925856","3586925887","FI","FIN","FINLAND" -"3586925888","3586925919","AX","FIN","FINLAND" -"3586925920","3586925983","FI","FIN","FINLAND" -"3586925984","3586926003","AX","FIN","FINLAND" -"3586926004","3586926015","FI","FIN","FINLAND" -"3586926016","3586926047","AX","FIN","FINLAND" -"3586926048","3586926079","FI","FIN","FINLAND" -"3586926080","3586926591","AX","FIN","FINLAND" -"3586926592","3586926847","SE","SWE","SWEDEN" -"3586926848","3586927103","FI","FIN","FINLAND" -"3586927104","3586927999","AX","FIN","FINLAND" -"3586928000","3586928159","FI","FIN","FINLAND" -"3586928160","3586928175","AX","FIN","FINLAND" -"3586928176","3586928303","FI","FIN","FINLAND" -"3586928304","3586928319","AX","FIN","FINLAND" -"3586928320","3586928639","FI","FIN","FINLAND" -"3586928640","3586932735","AX","FIN","FINLAND" -"3586932736","3586949119","LB","LBN","LEBANON" -"3586949120","3586965503","SE","SWE","SWEDEN" -"3586965504","3586981887","NL","NLD","NETHERLANDS" -"3586981888","3586998271","IT","ITA","ITALY" -"3586998272","3587006463","PT","PRT","PORTUGAL" -"3587006464","3587014655","FR","FRA","FRANCE" -"3587014656","3587051007","GB","GBR","UNITED KINGDOM" -"3587051008","3587051775","DE","DEU","GERMANY" -"3587051776","3587052031","GB","GBR","UNITED KINGDOM" -"3587052032","3587052799","NL","NLD","NETHERLANDS" -"3587052800","3587053055","GB","GBR","UNITED KINGDOM" -"3587053056","3587053823","FR","FRA","FRANCE" -"3587053824","3587055615","GB","GBR","UNITED KINGDOM" -"3587055616","3587063807","UZ","UZB","UZBEKISTAN" -"3587063808","3587071583","NL","NLD","NETHERLANDS" -"3587071584","3587071599","BE","BEL","BELGIUM" -"3587071600","3587071615","NL","NLD","NETHERLANDS" -"3587071616","3587071631","DE","DEU","GERMANY" -"3587071632","3587072095","NL","NLD","NETHERLANDS" -"3587072096","3587072127","DE","DEU","GERMANY" -"3587072128","3587074415","NL","NLD","NETHERLANDS" -"3587074416","3587074431","BE","BEL","BELGIUM" -"3587074432","3587080191","NL","NLD","NETHERLANDS" -"3587080192","3587082367","GB","GBR","UNITED KINGDOM" -"3587082368","3587082431","US","USA","UNITED STATES" -"3587082432","3587088383","GB","GBR","UNITED KINGDOM" -"3587088384","3587096575","DE","DEU","GERMANY" -"3587096576","3587121151","NL","NLD","NETHERLANDS" -"3587121152","3587129343","AL","ALB","ALBANIA" -"3587129344","3587134463","NL","NLD","NETHERLANDS" -"3587134464","3587134591","ES","ESP","SPAIN" -"3587134592","3587145727","NL","NLD","NETHERLANDS" -"3587145728","3587162111","CY","CYP","CYPRUS" -"3587162112","3587178495","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3587178496","3587178795","AT","AUT","AUSTRIA" -"3587178796","3587178799","US","USA","UNITED STATES" -"3587178800","3587179279","AT","AUT","AUSTRIA" -"3587179280","3587179287","AU","AUS","AUSTRALIA" -"3587179288","3587179439","AT","AUT","AUSTRIA" -"3587179440","3587179455","GB","GBR","UNITED KINGDOM" -"3587179456","3587179463","TR","TUR","TURKEY" -"3587179464","3587179471","CH","CHE","SWITZERLAND" -"3587179472","3587186687","AT","AUT","AUSTRIA" -"3587186688","3587194495","DE","DEU","GERMANY" -"3587194496","3587194511","RU","RUS","RUSSIAN FEDERATION" -"3587194512","3587194879","DE","DEU","GERMANY" -"3587194880","3587211263","GB","GBR","UNITED KINGDOM" -"3587211264","3587211531","AT","AUT","AUSTRIA" -"3587211532","3587211535","DE","DEU","GERMANY" -"3587211536","3587211663","AT","AUT","AUSTRIA" -"3587211664","3587211671","IT","ITA","ITALY" -"3587211672","3587213911","AT","AUT","AUSTRIA" -"3587213912","3587213919","UY","URY","URUGUAY" -"3587213920","3587219455","AT","AUT","AUSTRIA" -"3587219456","3587227647","RU","RUS","RUSSIAN FEDERATION" -"3587227648","3587227655","NL","NLD","NETHERLANDS" -"3587227656","3587227663","GB","GBR","UNITED KINGDOM" -"3587227664","3587227679","NL","NLD","NETHERLANDS" -"3587227680","3587227759","GB","GBR","UNITED KINGDOM" -"3587227760","3587227791","NL","NLD","NETHERLANDS" -"3587227792","3587227807","GB","GBR","UNITED KINGDOM" -"3587227808","3587227823","NL","NLD","NETHERLANDS" -"3587227824","3587227871","GB","GBR","UNITED KINGDOM" -"3587227872","3587227887","NL","NLD","NETHERLANDS" -"3587227888","3587227919","GB","GBR","UNITED KINGDOM" -"3587227920","3587227935","NL","NLD","NETHERLANDS" -"3587227936","3587227967","GB","GBR","UNITED KINGDOM" -"3587227968","3587227983","DE","DEU","GERMANY" -"3587227984","3587228015","NL","NLD","NETHERLANDS" -"3587228016","3587228047","GB","GBR","UNITED KINGDOM" -"3587228048","3587228087","NL","NLD","NETHERLANDS" -"3587228088","3587228127","GB","GBR","UNITED KINGDOM" -"3587228128","3587228207","NL","NLD","NETHERLANDS" -"3587228208","3587228223","GB","GBR","UNITED KINGDOM" -"3587228224","3587228271","NL","NLD","NETHERLANDS" -"3587228272","3587228287","GB","GBR","UNITED KINGDOM" -"3587228288","3587228319","NL","NLD","NETHERLANDS" -"3587228320","3587228335","GB","GBR","UNITED KINGDOM" -"3587228336","3587228367","NL","NLD","NETHERLANDS" -"3587228368","3587228447","GB","GBR","UNITED KINGDOM" -"3587228448","3587228463","NL","NLD","NETHERLANDS" -"3587228464","3587228647","GB","GBR","UNITED KINGDOM" -"3587228648","3587228663","NL","NLD","NETHERLANDS" -"3587228664","3587228667","GB","GBR","UNITED KINGDOM" -"3587228668","3587228927","NL","NLD","NETHERLANDS" -"3587228928","3587229455","GB","GBR","UNITED KINGDOM" -"3587229456","3587229487","NL","NLD","NETHERLANDS" -"3587229488","3587229535","GB","GBR","UNITED KINGDOM" -"3587229536","3587229583","NL","NLD","NETHERLANDS" -"3587229584","3587229647","GB","GBR","UNITED KINGDOM" -"3587229648","3587229663","NL","NLD","NETHERLANDS" -"3587229664","3587229791","GB","GBR","UNITED KINGDOM" -"3587229792","3587229807","NL","NLD","NETHERLANDS" -"3587229808","3587229855","GB","GBR","UNITED KINGDOM" -"3587229856","3587229887","NL","NLD","NETHERLANDS" -"3587229888","3587229951","GB","GBR","UNITED KINGDOM" -"3587229952","3587229967","NL","NLD","NETHERLANDS" -"3587229968","3587230047","GB","GBR","UNITED KINGDOM" -"3587230048","3587230079","NL","NLD","NETHERLANDS" -"3587230080","3587230095","GB","GBR","UNITED KINGDOM" -"3587230096","3587230111","NL","NLD","NETHERLANDS" -"3587230112","3587230239","GB","GBR","UNITED KINGDOM" -"3587230240","3587230271","NL","NLD","NETHERLANDS" -"3587230272","3587230319","GB","GBR","UNITED KINGDOM" -"3587230320","3587230351","NL","NLD","NETHERLANDS" -"3587230352","3587230447","GB","GBR","UNITED KINGDOM" -"3587230448","3587230463","NL","NLD","NETHERLANDS" -"3587230464","3587230511","GB","GBR","UNITED KINGDOM" -"3587230512","3587230519","NL","NLD","NETHERLANDS" -"3587230520","3587230527","GB","GBR","UNITED KINGDOM" -"3587230528","3587230543","NL","NLD","NETHERLANDS" -"3587230544","3587230607","GB","GBR","UNITED KINGDOM" -"3587230608","3587230623","NL","NLD","NETHERLANDS" -"3587230624","3587230687","GB","GBR","UNITED KINGDOM" -"3587230688","3587230719","NL","NLD","NETHERLANDS" -"3587230720","3587230791","GB","GBR","UNITED KINGDOM" -"3587230792","3587230799","NL","NLD","NETHERLANDS" -"3587230800","3587230807","GB","GBR","UNITED KINGDOM" -"3587230808","3587230815","NL","NLD","NETHERLANDS" -"3587230816","3587230847","GB","GBR","UNITED KINGDOM" -"3587230848","3587230911","NL","NLD","NETHERLANDS" -"3587230912","3587230943","GB","GBR","UNITED KINGDOM" -"3587230944","3587230967","DE","DEU","GERMANY" -"3587230968","3587230991","NL","NLD","NETHERLANDS" -"3587230992","3587231295","GB","GBR","UNITED KINGDOM" -"3587231296","3587231327","NL","NLD","NETHERLANDS" -"3587231328","3587231359","GB","GBR","UNITED KINGDOM" -"3587231360","3587232255","NL","NLD","NETHERLANDS" -"3587232256","3587232415","GB","GBR","UNITED KINGDOM" -"3587232416","3587232439","NL","NLD","NETHERLANDS" -"3587232440","3587232511","GB","GBR","UNITED KINGDOM" -"3587232512","3587232535","NL","NLD","NETHERLANDS" -"3587232536","3587232711","GB","GBR","UNITED KINGDOM" -"3587232712","3587232719","NL","NLD","NETHERLANDS" -"3587232720","3587232767","GB","GBR","UNITED KINGDOM" -"3587232768","3587232831","NL","NLD","NETHERLANDS" -"3587232832","3587232847","GB","GBR","UNITED KINGDOM" -"3587232848","3587232863","NL","NLD","NETHERLANDS" -"3587232864","3587232879","GB","GBR","UNITED KINGDOM" -"3587232880","3587232895","NL","NLD","NETHERLANDS" -"3587232896","3587232911","GB","GBR","UNITED KINGDOM" -"3587232912","3587232927","NL","NLD","NETHERLANDS" -"3587232928","3587232967","GB","GBR","UNITED KINGDOM" -"3587232968","3587232975","NL","NLD","NETHERLANDS" -"3587232976","3587232991","GB","GBR","UNITED KINGDOM" -"3587232992","3587233007","NL","NLD","NETHERLANDS" -"3587233008","3587233023","GB","GBR","UNITED KINGDOM" -"3587233024","3587233095","NL","NLD","NETHERLANDS" -"3587233096","3587233103","GB","GBR","UNITED KINGDOM" -"3587233104","3587233119","NL","NLD","NETHERLANDS" -"3587233120","3587233151","GB","GBR","UNITED KINGDOM" -"3587233152","3587233175","NL","NLD","NETHERLANDS" -"3587233176","3587233199","GB","GBR","UNITED KINGDOM" -"3587233200","3587233215","NL","NLD","NETHERLANDS" -"3587233216","3587233231","GB","GBR","UNITED KINGDOM" -"3587233232","3587233295","NL","NLD","NETHERLANDS" -"3587233296","3587233311","GB","GBR","UNITED KINGDOM" -"3587233312","3587233343","NL","NLD","NETHERLANDS" -"3587233344","3587233359","GB","GBR","UNITED KINGDOM" -"3587233360","3587233407","NL","NLD","NETHERLANDS" -"3587233408","3587233471","GB","GBR","UNITED KINGDOM" -"3587233472","3587233519","NL","NLD","NETHERLANDS" -"3587233520","3587233535","GB","GBR","UNITED KINGDOM" -"3587233536","3587233543","NL","NLD","NETHERLANDS" -"3587233544","3587233599","GB","GBR","UNITED KINGDOM" -"3587233600","3587233663","NL","NLD","NETHERLANDS" -"3587233664","3587233791","GB","GBR","UNITED KINGDOM" -"3587233792","3587233807","NL","NLD","NETHERLANDS" -"3587233808","3587233823","GB","GBR","UNITED KINGDOM" -"3587233824","3587233839","NL","NLD","NETHERLANDS" -"3587233840","3587233903","GB","GBR","UNITED KINGDOM" -"3587233904","3587233935","NL","NLD","NETHERLANDS" -"3587233936","3587233951","GB","GBR","UNITED KINGDOM" -"3587233952","3587233967","NL","NLD","NETHERLANDS" -"3587233968","3587233983","GB","GBR","UNITED KINGDOM" -"3587233984","3587233999","NL","NLD","NETHERLANDS" -"3587234000","3587234015","GB","GBR","UNITED KINGDOM" -"3587234016","3587234031","NL","NLD","NETHERLANDS" -"3587234032","3587234047","GB","GBR","UNITED KINGDOM" -"3587234048","3587234079","NL","NLD","NETHERLANDS" -"3587234080","3587234095","GB","GBR","UNITED KINGDOM" -"3587234096","3587234143","NL","NLD","NETHERLANDS" -"3587234144","3587234159","GB","GBR","UNITED KINGDOM" -"3587234160","3587234207","NL","NLD","NETHERLANDS" -"3587234208","3587234815","GB","GBR","UNITED KINGDOM" -"3587234816","3587235071","NL","NLD","NETHERLANDS" -"3587235072","3587235103","GB","GBR","UNITED KINGDOM" -"3587235104","3587235111","NL","NLD","NETHERLANDS" -"3587235112","3587235583","GB","GBR","UNITED KINGDOM" -"3587235584","3587235839","NL","NLD","NETHERLANDS" -"3587235840","3587236095","GB","GBR","UNITED KINGDOM" -"3587236096","3587236227","NL","NLD","NETHERLANDS" -"3587236228","3587236231","BE","BEL","BELGIUM" -"3587236232","3587236471","NL","NLD","NETHERLANDS" -"3587236472","3587236479","GB","GBR","UNITED KINGDOM" -"3587236480","3587236511","NL","NLD","NETHERLANDS" -"3587236512","3587236543","GB","GBR","UNITED KINGDOM" -"3587236544","3587236607","NL","NLD","NETHERLANDS" -"3587236608","3587236863","GB","GBR","UNITED KINGDOM" -"3587236864","3587237375","NL","NLD","NETHERLANDS" -"3587237376","3587237391","GB","GBR","UNITED KINGDOM" -"3587237392","3587237399","NL","NLD","NETHERLANDS" -"3587237400","3587237407","GB","GBR","UNITED KINGDOM" -"3587237408","3587237439","NL","NLD","NETHERLANDS" -"3587237440","3587237447","GB","GBR","UNITED KINGDOM" -"3587237448","3587237471","NL","NLD","NETHERLANDS" -"3587237472","3587237487","GB","GBR","UNITED KINGDOM" -"3587237488","3587237495","NL","NLD","NETHERLANDS" -"3587237496","3587237519","GB","GBR","UNITED KINGDOM" -"3587237520","3587237567","NL","NLD","NETHERLANDS" -"3587237568","3587238143","GB","GBR","UNITED KINGDOM" -"3587238144","3587238535","NL","NLD","NETHERLANDS" -"3587238536","3587238543","GB","GBR","UNITED KINGDOM" -"3587238544","3587238607","NL","NLD","NETHERLANDS" -"3587238608","3587238911","GB","GBR","UNITED KINGDOM" -"3587238912","3587239295","NL","NLD","NETHERLANDS" -"3587239296","3587239311","GB","GBR","UNITED KINGDOM" -"3587239312","3587239679","NL","NLD","NETHERLANDS" -"3587239680","3587239687","GB","GBR","UNITED KINGDOM" -"3587239688","3587239711","NL","NLD","NETHERLANDS" -"3587239712","3587239935","GB","GBR","UNITED KINGDOM" -"3587239936","3587240055","NL","NLD","NETHERLANDS" -"3587240056","3587240063","GB","GBR","UNITED KINGDOM" -"3587240064","3587240103","NL","NLD","NETHERLANDS" -"3587240104","3587240107","GB","GBR","UNITED KINGDOM" -"3587240108","3587240111","NL","NLD","NETHERLANDS" -"3587240112","3587240119","GB","GBR","UNITED KINGDOM" -"3587240120","3587240431","NL","NLD","NETHERLANDS" -"3587240432","3587240439","GB","GBR","UNITED KINGDOM" -"3587240440","3587240511","NL","NLD","NETHERLANDS" -"3587240512","3587240575","GB","GBR","UNITED KINGDOM" -"3587240576","3587240615","NL","NLD","NETHERLANDS" -"3587240616","3587240623","GB","GBR","UNITED KINGDOM" -"3587240624","3587240639","NL","NLD","NETHERLANDS" -"3587240640","3587240703","GB","GBR","UNITED KINGDOM" -"3587240704","3587241015","NL","NLD","NETHERLANDS" -"3587241016","3587241031","GB","GBR","UNITED KINGDOM" -"3587241032","3587241087","NL","NLD","NETHERLANDS" -"3587241088","3587241095","GB","GBR","UNITED KINGDOM" -"3587241096","3587241119","NL","NLD","NETHERLANDS" -"3587241120","3587241151","GB","GBR","UNITED KINGDOM" -"3587241152","3587241215","NL","NLD","NETHERLANDS" -"3587241216","3587241279","GB","GBR","UNITED KINGDOM" -"3587241280","3587241295","NL","NLD","NETHERLANDS" -"3587241296","3587241311","GB","GBR","UNITED KINGDOM" -"3587241312","3587241343","NL","NLD","NETHERLANDS" -"3587241344","3587241727","GB","GBR","UNITED KINGDOM" -"3587241728","3587243279","NL","NLD","NETHERLANDS" -"3587243280","3587243295","GB","GBR","UNITED KINGDOM" -"3587243296","3587243511","NL","NLD","NETHERLANDS" -"3587243512","3587243519","BE","BEL","BELGIUM" -"3587243520","3587243647","NL","NLD","NETHERLANDS" -"3587243648","3587243775","GB","GBR","UNITED KINGDOM" -"3587243776","3587243903","NL","NLD","NETHERLANDS" -"3587243904","3587243943","GB","GBR","UNITED KINGDOM" -"3587243944","3587244031","NL","NLD","NETHERLANDS" -"3587244032","3587260415","IT","ITA","ITALY" -"3587260416","3587284991","DE","DEU","GERMANY" -"3587284992","3587285135","IT","ITA","ITALY" -"3587285136","3587285159","HK","HKG","HONG KONG" -"3587285160","3587287043","IT","ITA","ITALY" -"3587287044","3587287047","LY","LBY","LIBYAN ARAB JAMAHIRIYA" -"3587287048","3587287055","IT","ITA","ITALY" -"3587287056","3587287059","LY","LBY","LIBYAN ARAB JAMAHIRIYA" -"3587287060","3587287295","IT","ITA","ITALY" -"3587287296","3587287307","GE","GEO","GEORGIA" -"3587287308","3587287311","DE","DEU","GERMANY" -"3587287312","3587287319","GE","GEO","GEORGIA" -"3587287320","3587287327","FR","FRA","FRANCE" -"3587287328","3587287335","GB","GBR","UNITED KINGDOM" -"3587287336","3587287339","DE","DEU","GERMANY" -"3587287340","3587287343","PL","POL","POLAND" -"3587287344","3587287351","GE","GEO","GEORGIA" -"3587287352","3587287359","IS","ISL","ICELAND" -"3587287360","3587287363","NL","NLD","NETHERLANDS" -"3587287364","3587287367","IT","ITA","ITALY" -"3587287368","3587287387","NL","NLD","NETHERLANDS" -"3587287388","3587287391","CZ","CZE","CZECH REPUBLIC" -"3587287392","3587287395","DE","DEU","GERMANY" -"3587287396","3587287403","IS","ISL","ICELAND" -"3587287404","3587287411","PL","POL","POLAND" -"3587287412","3587287415","DE","DEU","GERMANY" -"3587287416","3587287419","IQ","IRQ","IRAQ" -"3587287420","3587287423","DE","DEU","GERMANY" -"3587287424","3587287427","SE","SWE","SWEDEN" -"3587287428","3587287431","DE","DEU","GERMANY" -"3587287432","3587287435","IT","ITA","ITALY" -"3587287436","3587287439","DE","DEU","GERMANY" -"3587287440","3587287447","TR","TUR","TURKEY" -"3587287448","3587287451","DE","DEU","GERMANY" -"3587287452","3587287455","IT","ITA","ITALY" -"3587287456","3587287459","DE","DEU","GERMANY" -"3587287460","3587287463","IT","ITA","ITALY" -"3587287464","3587287475","SE","SWE","SWEDEN" -"3587287476","3587287479","PL","POL","POLAND" -"3587287480","3587287535","IT","ITA","ITALY" -"3587287536","3587287543","DE","DEU","GERMANY" -"3587287544","3587287551","PL","POL","POLAND" -"3587287552","3587287559","GB","GBR","UNITED KINGDOM" -"3587287560","3587287563","FR","FRA","FRANCE" -"3587287564","3587287571","PL","POL","POLAND" -"3587287572","3587287575","DE","DEU","GERMANY" -"3587287576","3587287579","FR","FRA","FRANCE" -"3587287580","3587287583","DE","DEU","GERMANY" -"3587287584","3587287591","FR","FRA","FRANCE" -"3587287592","3587287599","GB","GBR","UNITED KINGDOM" -"3587287600","3587287679","IT","ITA","ITALY" -"3587287680","3587287687","NL","NLD","NETHERLANDS" -"3587287688","3587287711","IS","ISL","ICELAND" -"3587287712","3587287719","GE","GEO","GEORGIA" -"3587287720","3587287723","IT","ITA","ITALY" -"3587287724","3587287727","SE","SWE","SWEDEN" -"3587287728","3587287807","IT","ITA","ITALY" -"3587287808","3587287815","IS","ISL","ICELAND" -"3587287816","3587287823","GB","GBR","UNITED KINGDOM" -"3587287824","3587287835","FR","FRA","FRANCE" -"3587287836","3587287847","GB","GBR","UNITED KINGDOM" -"3587287848","3587287851","SE","SWE","SWEDEN" -"3587287852","3587287879","IQ","IRQ","IRAQ" -"3587287880","3587287887","FR","FRA","FRANCE" -"3587287888","3587287935","IT","ITA","ITALY" -"3587287936","3587287943","FR","FRA","FRANCE" -"3587287944","3587287947","DE","DEU","GERMANY" -"3587287948","3587287959","IT","ITA","ITALY" -"3587287960","3587287963","FR","FRA","FRANCE" -"3587287964","3587287967","GB","GBR","UNITED KINGDOM" -"3587287968","3587287983","DE","DEU","GERMANY" -"3587287984","3587288575","IT","ITA","ITALY" -"3587288576","3587288703","AE","ARE","UNITED ARAB EMIRATES" -"3587288704","3587288707","DE","DEU","GERMANY" -"3587288708","3587288759","NL","NLD","NETHERLANDS" -"3587288760","3587288959","IT","ITA","ITALY" -"3587288960","3587289087","DE","DEU","GERMANY" -"3587289088","3587289343","FR","FRA","FRANCE" -"3587289344","3587289347","ES","ESP","SPAIN" -"3587289348","3587289351","FR","FRA","FRANCE" -"3587289352","3587289359","PT","PRT","PORTUGAL" -"3587289360","3587289367","ES","ESP","SPAIN" -"3587289368","3587289375","FR","FRA","FRANCE" -"3587289376","3587289383","IT","ITA","ITALY" -"3587289384","3587289387","GB","GBR","UNITED KINGDOM" -"3587289388","3587289391","ES","ESP","SPAIN" -"3587289392","3587289399","GB","GBR","UNITED KINGDOM" -"3587289400","3587289407","ES","ESP","SPAIN" -"3587289408","3587289411","IT","ITA","ITALY" -"3587289412","3587289415","FR","FRA","FRANCE" -"3587289416","3587289423","IT","ITA","ITALY" -"3587289424","3587289467","GB","GBR","UNITED KINGDOM" -"3587289468","3587289855","IT","ITA","ITALY" -"3587289856","3587289859","FR","FRA","FRANCE" -"3587289860","3587289863","IT","ITA","ITALY" -"3587289864","3587289871","GB","GBR","UNITED KINGDOM" -"3587289872","3587289895","IT","ITA","ITALY" -"3587289896","3587289907","GB","GBR","UNITED KINGDOM" -"3587289908","3587289911","ES","ESP","SPAIN" -"3587289912","3587289915","IT","ITA","ITALY" -"3587289916","3587289919","FR","FRA","FRANCE" -"3587289920","3587290367","IT","ITA","ITALY" -"3587290368","3587290622","GB","GBR","UNITED KINGDOM" -"3587290623","3587290623","IT","ITA","ITALY" -"3587290624","3587291135","FR","FRA","FRANCE" -"3587291136","3587291139","NL","NLD","NETHERLANDS" -"3587291140","3587291967","IT","ITA","ITALY" -"3587291968","3587292031","AL","ALB","ALBANIA" -"3587292032","3587292415","IT","ITA","ITALY" -"3587292416","3587292419","ES","ESP","SPAIN" -"3587292420","3587292799","IT","ITA","ITALY" -"3587292800","3587292863","AT","AUT","AUSTRIA" -"3587292864","3587309567","IT","ITA","ITALY" -"3587309568","3587325951","GB","GBR","UNITED KINGDOM" -"3587325952","3587342335","RU","RUS","RUSSIAN FEDERATION" -"3587342336","3587358719","CZ","CZE","CZECH REPUBLIC" -"3587358720","3587375103","SA","SAU","SAUDI ARABIA" -"3587375104","3587383295","TR","TUR","TURKEY" -"3587383296","3587391487","CZ","CZE","CZECH REPUBLIC" -"3587391488","3587407871","KZ","KAZ","KAZAKHSTAN" -"3587407872","3587424255","NL","NLD","NETHERLANDS" -"3587424256","3587440639","DE","DEU","GERMANY" -"3587440640","3587457023","SE","SWE","SWEDEN" -"3587457024","3587459263","GB","GBR","UNITED KINGDOM" -"3587459264","3587459295","DE","DEU","GERMANY" -"3587459296","3587473407","GB","GBR","UNITED KINGDOM" -"3587473408","3587489791","IT","ITA","ITALY" -"3587506176","3587538943","IT","ITA","ITALY" -"3587538944","3587547135","IS","ISL","ICELAND" -"3587547136","3587555327","CH","CHE","SWITZERLAND" -"3587555328","3587571711","BE","BEL","BELGIUM" -"3587571712","3587579903","DE","DEU","GERMANY" -"3587579904","3587588095","BE","BEL","BELGIUM" -"3587588096","3587596287","BG","BGR","BULGARIA" -"3587596288","3587604479","NL","NLD","NETHERLANDS" -"3587604480","3587620863","FI","FIN","FINLAND" -"3587620864","3587637247","SE","SWE","SWEDEN" -"3587637248","3587653631","FR","FRA","FRANCE" -"3587653632","3587670015","SK","SVK","SLOVAKIA" -"3587670016","3587686031","IT","ITA","ITALY" -"3587686032","3587686039","FR","FRA","FRANCE" -"3587686040","3587687591","IT","ITA","ITALY" -"3587687592","3587687599","NL","NLD","NETHERLANDS" -"3587687600","3587702783","IT","ITA","ITALY" -"3587702784","3587710975","DE","DEU","GERMANY" -"3587710976","3587719167","CZ","CZE","CZECH REPUBLIC" -"3587719168","3587735551","PL","POL","POLAND" -"3587735552","3587751935","GB","GBR","UNITED KINGDOM" -"3587751936","3587768319","FI","FIN","FINLAND" -"3587768320","3587776511","DE","DEU","GERMANY" -"3587776512","3587784703","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3587784704","3587801087","DE","DEU","GERMANY" -"3587801088","3587817471","IT","ITA","ITALY" -"3587817472","3587833855","MT","MLT","MALTA" -"3587833856","3587842047","DE","DEU","GERMANY" -"3587842048","3587850239","IT","ITA","ITALY" -"3587850240","3587854335","NL","NLD","NETHERLANDS" -"3587854336","3587866623","PL","POL","POLAND" -"3587866624","3587874815","FR","FRA","FRANCE" -"3587874816","3587877383","DE","DEU","GERMANY" -"3587877384","3587877391","US","USA","UNITED STATES" -"3587877392","3587877407","DE","DEU","GERMANY" -"3587877408","3587877439","NL","NLD","NETHERLANDS" -"3587877440","3587878527","DE","DEU","GERMANY" -"3587878528","3587878559","AT","AUT","AUSTRIA" -"3587878560","3587883007","DE","DEU","GERMANY" -"3587883008","3587915775","GB","GBR","UNITED KINGDOM" -"3587915776","3587932159","EE","EST","ESTONIA" -"3587932160","3587932415","NL","NLD","NETHERLANDS" -"3587932416","3587944447","BE","BEL","BELGIUM" -"3587944448","3587945471","NL","NLD","NETHERLANDS" -"3587945472","3587948031","BE","BEL","BELGIUM" -"3587948032","3587948543","NL","NLD","NETHERLANDS" -"3587948544","3587964927","RU","RUS","RUSSIAN FEDERATION" -"3587964928","3587981311","ES","ESP","SPAIN" -"3587981312","3587997695","IS","ISL","ICELAND" -"3587997696","3588014079","DE","DEU","GERMANY" -"3588014080","3588030463","CZ","CZE","CZECH REPUBLIC" -"3588030464","3588046847","RU","RUS","RUSSIAN FEDERATION" -"3588046848","3588060351","DE","DEU","GERMANY" -"3588060352","3588060359","CH","CHE","SWITZERLAND" -"3588060360","3588063231","DE","DEU","GERMANY" -"3588063232","3588071423","CH","CHE","SWITZERLAND" -"3588071424","3588079615","GB","GBR","UNITED KINGDOM" -"3588079616","3588095999","CH","CHE","SWITZERLAND" -"3588096000","3588104191","NL","NLD","NETHERLANDS" -"3588104192","3588112383","BG","BGR","BULGARIA" -"3588112384","3588128767","FR","FRA","FRANCE" -"3588128768","3588145151","HU","HUN","HUNGARY" -"3588145152","3588161535","PL","POL","POLAND" -"3588161536","3588227071","FR","FRA","FRANCE" -"3588227072","3588292607","BE","BEL","BELGIUM" -"3588292608","3588308991","AT","AUT","AUSTRIA" -"3588308992","3588325375","NO","NOR","NORWAY" -"3588325376","3588333567","GB","GBR","UNITED KINGDOM" -"3588333568","3588341759","FR","FRA","FRANCE" -"3588341760","3588358143","IT","ITA","ITALY" -"3588358144","3588374527","BG","BGR","BULGARIA" -"3588374528","3588390911","SE","SWE","SWEDEN" -"3588390912","3588393983","LT","LTU","LITHUANIA" -"3588393984","3588394495","LV","LVA","LATVIA" -"3588394496","3588407295","LT","LTU","LITHUANIA" -"3588407296","3588423679","CZ","CZE","CZECH REPUBLIC" -"3588423680","3588440063","ES","ESP","SPAIN" -"3588440064","3588456447","PL","POL","POLAND" -"3588456448","3588464639","NL","NLD","NETHERLANDS" -"3588464640","3588472831","AT","AUT","AUSTRIA" -"3588472832","3588489215","UA","UKR","UKRAINE" -"3588489216","3588505599","FR","FRA","FRANCE" -"3588505600","3588521983","RU","RUS","RUSSIAN FEDERATION" -"3588521984","3588538367","PT","PRT","PORTUGAL" -"3588538368","3588544383","GB","GBR","UNITED KINGDOM" -"3588544384","3588544391","IE","IRL","IRELAND" -"3588544392","3588547327","GB","GBR","UNITED KINGDOM" -"3588547328","3588547583","IE","IRL","IRELAND" -"3588547584","3588550447","GB","GBR","UNITED KINGDOM" -"3588550448","3588550463","IE","IRL","IRELAND" -"3588550464","3588553983","GB","GBR","UNITED KINGDOM" -"3588553984","3588554239","IE","IRL","IRELAND" -"3588554240","3588554687","GB","GBR","UNITED KINGDOM" -"3588554688","3588554751","IE","IRL","IRELAND" -"3588554752","3588571135","AT","AUT","AUSTRIA" -"3588571136","3588587519","GB","GBR","UNITED KINGDOM" -"3588587520","3588590175","ES","ESP","SPAIN" -"3588590176","3588590207","BE","BEL","BELGIUM" -"3588590208","3588594751","ES","ESP","SPAIN" -"3588594752","3588594759","DE","DEU","GERMANY" -"3588594760","3588603903","ES","ESP","SPAIN" -"3588603904","3588620287","SI","SVN","SLOVENIA" -"3588620288","3588628479","SA","SAU","SAUDI ARABIA" -"3588628480","3588636671","CH","CHE","SWITZERLAND" -"3588636672","3588653055","UZ","UZB","UZBEKISTAN" -"3588653056","3588661247","IT","ITA","ITALY" -"3588661248","3588669439","NO","NOR","NORWAY" -"3588669440","3588685823","GB","GBR","UNITED KINGDOM" -"3588685824","3588702207","UA","UKR","UKRAINE" -"3588702208","3588718591","ES","ESP","SPAIN" -"3588718592","3588734975","BG","BGR","BULGARIA" -"3588734976","3588751359","PL","POL","POLAND" -"3588751360","3588767743","TR","TUR","TURKEY" -"3588767744","3588773759","GB","GBR","UNITED KINGDOM" -"3588773760","3588773887","SL","SLE","SIERRA LEONE" -"3588773888","3588775935","GB","GBR","UNITED KINGDOM" -"3588775936","3588776191","NG","NGA","NIGERIA" -"3588776192","3588784127","GB","GBR","UNITED KINGDOM" -"3588784128","3588800511","CH","CHE","SWITZERLAND" -"3588800512","3588816895","RU","RUS","RUSSIAN FEDERATION" -"3588816896","3588833279","IT","ITA","ITALY" -"3588833280","3588848767","RO","ROM","ROMANIA" -"3588848768","3588848775","FR","FRA","FRANCE" -"3588848776","3588849663","RO","ROM","ROMANIA" -"3588849664","3588857855","IE","IRL","IRELAND" -"3588857856","3588866047","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3588866048","3588882431","NL","NLD","NETHERLANDS" -"3588882432","3588890623","RU","RUS","RUSSIAN FEDERATION" -"3588890624","3588898815","GB","GBR","UNITED KINGDOM" -"3588898816","3588915199","NO","NOR","NORWAY" -"3588915200","3588931583","IT","ITA","ITALY" -"3588931584","3588947967","RU","RUS","RUSSIAN FEDERATION" -"3588947968","3588964351","GB","GBR","UNITED KINGDOM" -"3588964352","3588997119","CZ","CZE","CZECH REPUBLIC" -"3588997120","3589013503","AT","AUT","AUSTRIA" -"3589013504","3589021695","ES","ESP","SPAIN" -"3589021696","3589029887","SA","SAU","SAUDI ARABIA" -"3589029888","3589030015","NL","NLD","NETHERLANDS" -"3589030016","3589030143","ES","ESP","SPAIN" -"3589030144","3589030183","NL","NLD","NETHERLANDS" -"3589030184","3589030191","ES","ESP","SPAIN" -"3589030192","3589030207","NL","NLD","NETHERLANDS" -"3589030208","3589030239","ES","ESP","SPAIN" -"3589030240","3589031423","NL","NLD","NETHERLANDS" -"3589031424","3589031935","ES","ESP","SPAIN" -"3589031936","3589034015","NL","NLD","NETHERLANDS" -"3589034016","3589034111","ES","ESP","SPAIN" -"3589034112","3589034143","NL","NLD","NETHERLANDS" -"3589034144","3589034159","ES","ESP","SPAIN" -"3589034160","3589034167","GB","GBR","UNITED KINGDOM" -"3589034168","3589034175","NL","NLD","NETHERLANDS" -"3589034176","3589034183","ES","ESP","SPAIN" -"3589034184","3589034191","GB","GBR","UNITED KINGDOM" -"3589034192","3589034207","DE","DEU","GERMANY" -"3589034208","3589034223","ES","ESP","SPAIN" -"3589034224","3589034271","NL","NLD","NETHERLANDS" -"3589034272","3589034303","ES","ESP","SPAIN" -"3589034304","3589034335","DE","DEU","GERMANY" -"3589034336","3589034367","FR","FRA","FRANCE" -"3589034368","3589034431","NL","NLD","NETHERLANDS" -"3589034432","3589034495","FR","FRA","FRANCE" -"3589034496","3589037311","ES","ESP","SPAIN" -"3589037312","3589037343","NL","NLD","NETHERLANDS" -"3589037344","3589037375","SE","SWE","SWEDEN" -"3589037376","3589037391","NL","NLD","NETHERLANDS" -"3589037392","3589037407","ES","ESP","SPAIN" -"3589037408","3589037423","NL","NLD","NETHERLANDS" -"3589037424","3589037439","ES","ESP","SPAIN" -"3589037440","3589037487","NL","NLD","NETHERLANDS" -"3589037488","3589037495","ES","ESP","SPAIN" -"3589037496","3589037503","CH","CHE","SWITZERLAND" -"3589037504","3589037535","NL","NLD","NETHERLANDS" -"3589037536","3589037551","ES","ESP","SPAIN" -"3589037552","3589037559","BE","BEL","BELGIUM" -"3589037560","3589037567","NL","NLD","NETHERLANDS" -"3589037568","3589038079","ES","ESP","SPAIN" -"3589038080","3589040127","NL","NLD","NETHERLANDS" -"3589040128","3589042207","ES","ESP","SPAIN" -"3589042208","3589042367","NL","NLD","NETHERLANDS" -"3589042368","3589043231","ES","ESP","SPAIN" -"3589043232","3589043327","NL","NLD","NETHERLANDS" -"3589043328","3589043455","ES","ESP","SPAIN" -"3589043456","3589043711","NL","NLD","NETHERLANDS" -"3589043712","3589044223","ES","ESP","SPAIN" -"3589044224","3589044319","NL","NLD","NETHERLANDS" -"3589044320","3589046271","ES","ESP","SPAIN" -"3589046272","3589079039","NO","NOR","NORWAY" -"3589079040","3589092223","DK","DNK","DENMARK" -"3589092224","3589092227","SE","SWE","SWEDEN" -"3589092228","3589128191","DK","DNK","DENMARK" -"3589128192","3589144575","GB","GBR","UNITED KINGDOM" -"3589144576","3589152767","UA","UKR","UKRAINE" -"3589152768","3589152927","DE","DEU","GERMANY" -"3589152928","3589152935","CH","CHE","SWITZERLAND" -"3589152936","3589153027","DE","DEU","GERMANY" -"3589153028","3589153031","ES","ESP","SPAIN" -"3589153032","3589156591","DE","DEU","GERMANY" -"3589156592","3589156607","CH","CHE","SWITZERLAND" -"3589156608","3589160959","DE","DEU","GERMANY" -"3589160960","3589177343","PL","POL","POLAND" -"3589177344","3589193727","TR","TUR","TURKEY" -"3589193728","3589210111","SE","SWE","SWEDEN" -"3589210112","3589226495","NL","NLD","NETHERLANDS" -"3589226496","3589230415","NO","NOR","NORWAY" -"3589230416","3589230431","DK","DNK","DENMARK" -"3589230432","3589230759","NO","NOR","NORWAY" -"3589230760","3589230775","GB","GBR","UNITED KINGDOM" -"3589230776","3589242879","NO","NOR","NORWAY" -"3589242880","3589248511","NL","NLD","NETHERLANDS" -"3589248512","3589248767","GB","GBR","UNITED KINGDOM" -"3589248768","3589256191","NL","NLD","NETHERLANDS" -"3589256192","3589256447","GR","GRC","GREECE" -"3589256448","3589258495","NL","NLD","NETHERLANDS" -"3589258496","3589258751","GB","GBR","UNITED KINGDOM" -"3589258752","3589259263","NL","NLD","NETHERLANDS" -"3589259264","3589269455","DE","DEU","GERMANY" -"3589269456","3589269471","AT","AUT","AUSTRIA" -"3589269472","3589275647","DE","DEU","GERMANY" -"3589275648","3589283327","CS","SCG","SERBIA AND MONTENEGRO" -"3589283328","3589283343","RS","SRB","SERBIA" -"3589283344","3589283535","CS","SCG","SERBIA AND MONTENEGRO" -"3589283536","3589283543","RS","SRB","SERBIA" -"3589283544","3589283567","CS","SCG","SERBIA AND MONTENEGRO" -"3589283568","3589283575","RS","SRB","SERBIA" -"3589283576","3589284975","CS","SCG","SERBIA AND MONTENEGRO" -"3589284976","3589285015","RS","SRB","SERBIA" -"3589285016","3589285047","CS","SCG","SERBIA AND MONTENEGRO" -"3589285048","3589285055","RS","SRB","SERBIA" -"3589285056","3589285103","CS","SCG","SERBIA AND MONTENEGRO" -"3589285104","3589285279","RS","SRB","SERBIA" -"3589285280","3589288015","CS","SCG","SERBIA AND MONTENEGRO" -"3589288016","3589288023","RS","SRB","SERBIA" -"3589288024","3589288127","CS","SCG","SERBIA AND MONTENEGRO" -"3589288128","3589288159","RS","SRB","SERBIA" -"3589288160","3589289831","CS","SCG","SERBIA AND MONTENEGRO" -"3589289832","3589289839","RS","SRB","SERBIA" -"3589289840","3589289855","CS","SCG","SERBIA AND MONTENEGRO" -"3589289856","3589289871","RS","SRB","SERBIA" -"3589289872","3589289879","CS","SCG","SERBIA AND MONTENEGRO" -"3589289880","3589289887","RS","SRB","SERBIA" -"3589289888","3589292031","CS","SCG","SERBIA AND MONTENEGRO" -"3589292032","3589308415","AT","AUT","AUSTRIA" -"3589308416","3589317887","DE","DEU","GERMANY" -"3589317888","3589317951","GB","GBR","UNITED KINGDOM" -"3589317952","3589324799","DE","DEU","GERMANY" -"3589324800","3589341183","BG","BGR","BULGARIA" -"3589341184","3589373951","PL","POL","POLAND" -"3589373952","3589375495","DE","DEU","GERMANY" -"3589375496","3589375503","CI","CIV","COTE D'IVOIRE" -"3589375504","3589390335","DE","DEU","GERMANY" -"3589390336","3589423103","RU","RUS","RUSSIAN FEDERATION" -"3589423104","3589423615","IT","ITA","ITALY" -"3589423616","3589424127","CH","CHE","SWITZERLAND" -"3589424128","3589424639","SE","SWE","SWEDEN" -"3589424640","3589425151","ES","ESP","SPAIN" -"3589425152","3589425663","CH","CHE","SWITZERLAND" -"3589425664","3589426175","GB","GBR","UNITED KINGDOM" -"3589426176","3589426303","FR","FRA","FRANCE" -"3589426304","3589427199","GB","GBR","UNITED KINGDOM" -"3589427200","3589427247","FR","FRA","FRANCE" -"3589427248","3589429247","GB","GBR","UNITED KINGDOM" -"3589429248","3589429503","FR","FRA","FRANCE" -"3589429504","3589430271","GB","GBR","UNITED KINGDOM" -"3589430272","3589430543","FR","FRA","FRANCE" -"3589430544","3589431295","GB","GBR","UNITED KINGDOM" -"3589431296","3589431343","FR","FRA","FRANCE" -"3589431344","3589432319","GB","GBR","UNITED KINGDOM" -"3589432320","3589432575","CH","CHE","SWITZERLAND" -"3589432576","3589432895","FR","FRA","FRANCE" -"3589432896","3589433343","GB","GBR","UNITED KINGDOM" -"3589433344","3589433375","IT","ITA","ITALY" -"3589433376","3589433407","CH","CHE","SWITZERLAND" -"3589433408","3589433439","SE","SWE","SWEDEN" -"3589433440","3589433471","ES","ESP","SPAIN" -"3589433472","3589433503","CH","CHE","SWITZERLAND" -"3589433504","3589433535","IE","IRL","IRELAND" -"3589433536","3589433567","DK","DNK","DENMARK" -"3589433568","3589433599","GB","GBR","UNITED KINGDOM" -"3589433600","3589434111","IE","IRL","IRELAND" -"3589434112","3589434623","DK","DNK","DENMARK" -"3589434624","3589434751","GB","GBR","UNITED KINGDOM" -"3589434752","3589434879","ES","ESP","SPAIN" -"3589434880","3589435391","FR","FRA","FRANCE" -"3589435392","3589435519","PL","POL","POLAND" -"3589435520","3589435775","ES","ESP","SPAIN" -"3589435776","3589435903","GB","GBR","UNITED KINGDOM" -"3589435904","3589436159","ES","ESP","SPAIN" -"3589436160","3589439487","GB","GBR","UNITED KINGDOM" -"3589439488","3589444631","SE","SWE","SWEDEN" -"3589444632","3589444639","NO","NOR","NORWAY" -"3589444640","3589455871","SE","SWE","SWEDEN" -"3589455872","3589472255","RU","RUS","RUSSIAN FEDERATION" -"3589472256","3589488639","TR","TUR","TURKEY" -"3589488640","3589491711","RU","RUS","RUSSIAN FEDERATION" -"3589491712","3589491743","TJ","TJK","TAJIKISTAN" -"3589491744","3589505023","RU","RUS","RUSSIAN FEDERATION" -"3589505024","3589521407","FI","FIN","FINLAND" -"3589521408","3589537791","IT","ITA","ITALY" -"3589537792","3589545983","FR","FRA","FRANCE" -"3589545984","3589554175","DE","DEU","GERMANY" -"3589554176","3589570559","PS","PSE","PALESTINIAN TERRITORY, OCCUPIED" -"3589570560","3589570655","NL","NLD","NETHERLANDS" -"3589570656","3589578751","GB","GBR","UNITED KINGDOM" -"3589578752","3589579263","NL","NLD","NETHERLANDS" -"3589579264","3589579775","GB","GBR","UNITED KINGDOM" -"3589579776","3589580799","NL","NLD","NETHERLANDS" -"3589580800","3589580895","GB","GBR","UNITED KINGDOM" -"3589580896","3589581055","NL","NLD","NETHERLANDS" -"3589581056","3589581199","GB","GBR","UNITED KINGDOM" -"3589581200","3589581215","NL","NLD","NETHERLANDS" -"3589581216","3589581327","GB","GBR","UNITED KINGDOM" -"3589581328","3589581439","NL","NLD","NETHERLANDS" -"3589581440","3589581567","GB","GBR","UNITED KINGDOM" -"3589581568","3589581791","NL","NLD","NETHERLANDS" -"3589581792","3589581823","GB","GBR","UNITED KINGDOM" -"3589581824","3589582591","NL","NLD","NETHERLANDS" -"3589582592","3589582607","GB","GBR","UNITED KINGDOM" -"3589582608","3589582639","NL","NLD","NETHERLANDS" -"3589582640","3589582655","GB","GBR","UNITED KINGDOM" -"3589582656","3589583359","NL","NLD","NETHERLANDS" -"3589583360","3589583647","GB","GBR","UNITED KINGDOM" -"3589583648","3589583663","NL","NLD","NETHERLANDS" -"3589583664","3589583743","GB","GBR","UNITED KINGDOM" -"3589583744","3589583871","NL","NLD","NETHERLANDS" -"3589583872","3589584127","GB","GBR","UNITED KINGDOM" -"3589584128","3589584271","NL","NLD","NETHERLANDS" -"3589584272","3589584639","GB","GBR","UNITED KINGDOM" -"3589584640","3589585279","NL","NLD","NETHERLANDS" -"3589585280","3589585407","GB","GBR","UNITED KINGDOM" -"3589585408","3589585983","NL","NLD","NETHERLANDS" -"3589585984","3589586431","GB","GBR","UNITED KINGDOM" -"3589586432","3589586687","NL","NLD","NETHERLANDS" -"3589586688","3589586943","GB","GBR","UNITED KINGDOM" -"3589586944","3589597559","CS","SCG","SERBIA AND MONTENEGRO" -"3589597560","3589597567","RS","SRB","SERBIA" -"3589597568","3589603327","CS","SCG","SERBIA AND MONTENEGRO" -"3589603328","3589668863","FR","FRA","FRANCE" -"3589668864","3589677055","RU","RUS","RUSSIAN FEDERATION" -"3589677056","3589680287","FR","FRA","FRANCE" -"3589680288","3589680303","MQ","MTQ","MARTINIQUE" -"3589680304","3589680751","FR","FRA","FRANCE" -"3589680752","3589680767","MQ","MTQ","MARTINIQUE" -"3589680768","3589685247","FR","FRA","FRANCE" -"3589685248","3589718015","GB","GBR","UNITED KINGDOM" -"3589718016","3589724271","BE","BEL","BELGIUM" -"3589724272","3589724287","NL","NLD","NETHERLANDS" -"3589724288","3589733375","BE","BEL","BELGIUM" -"3589733376","3589733439","LU","LUX","LUXEMBOURG" -"3589733440","3589734399","BE","BEL","BELGIUM" -"3589742592","3589742687","NL","NLD","NETHERLANDS" -"3589742688","3589742695","AT","AUT","AUSTRIA" -"3589742696","3589742975","NL","NLD","NETHERLANDS" -"3589742976","3589743039","IE","IRL","IRELAND" -"3589743040","3589743458","NL","NLD","NETHERLANDS" -"3589743459","3589743460","US","USA","UNITED STATES" -"3589743461","3589744895","NL","NLD","NETHERLANDS" -"3589744896","3589744959","BE","BEL","BELGIUM" -"3589744960","3589745119","NL","NLD","NETHERLANDS" -"3589745120","3589745151","BE","BEL","BELGIUM" -"3589745152","3589746087","NL","NLD","NETHERLANDS" -"3589746088","3589746095","DE","DEU","GERMANY" -"3589746096","3589747071","NL","NLD","NETHERLANDS" -"3589747072","3589747103","ES","ESP","SPAIN" -"3589747104","3589767167","NL","NLD","NETHERLANDS" -"3589767168","3589816319","RU","RUS","RUSSIAN FEDERATION" -"3589827072","3589827327","SE","SWE","SWEDEN" -"3589827328","3589827583","FR","FRA","FRANCE" -"3589827648","3589827679","DE","DEU","GERMANY" -"3589827712","3589828095","DE","DEU","GERMANY" -"3589828096","3589828111","FR","FRA","FRANCE" -"3589828128","3589828159","DE","DEU","GERMANY" -"3589828160","3589828607","FR","FRA","FRANCE" -"3589828608","3589828639","SE","SWE","SWEDEN" -"3589828640","3589828671","NL","NLD","NETHERLANDS" -"3589828736","3589828863","NL","NLD","NETHERLANDS" -"3589829120","3589829183","GB","GBR","UNITED KINGDOM" -"3589829376","3589830655","GB","GBR","UNITED KINGDOM" -"3589830656","3589831167","DE","DEU","GERMANY" -"3589831168","3589831679","US","USA","UNITED STATES" -"3589831680","3589832703","FR","FRA","FRANCE" -"3589832704","3589849087","TR","TUR","TURKEY" -"3589849088","3589865471","GB","GBR","UNITED KINGDOM" -"3589865472","3589881855","GR","GRC","GREECE" -"3589881856","3589890047","NL","NLD","NETHERLANDS" -"3589890048","3589890175","BE","BEL","BELGIUM" -"3589890176","3589890303","GB","GBR","UNITED KINGDOM" -"3589890304","3589890367","BE","BEL","BELGIUM" -"3589890368","3589890431","GB","GBR","UNITED KINGDOM" -"3589890432","3589890559","BE","BEL","BELGIUM" -"3589890560","3589890687","GB","GBR","UNITED KINGDOM" -"3589890688","3589891327","BE","BEL","BELGIUM" -"3589891328","3589891615","GB","GBR","UNITED KINGDOM" -"3589891616","3589891631","BE","BEL","BELGIUM" -"3589891632","3589931007","GB","GBR","UNITED KINGDOM" -"3589931008","3589947391","SI","SVN","SLOVENIA" -"3589947392","3589963775","FI","FIN","FINLAND" -"3589963776","3589971231","ES","ESP","SPAIN" -"3589971232","3589971247","CA","CAN","CANADA" -"3589971248","3589980159","ES","ESP","SPAIN" -"3589980160","3589996543","CZ","CZE","CZECH REPUBLIC" -"3589996544","3589996623","NL","NLD","NETHERLANDS" -"3589996624","3589996639","GB","GBR","UNITED KINGDOM" -"3589996640","3589996655","NL","NLD","NETHERLANDS" -"3589996656","3589996703","GB","GBR","UNITED KINGDOM" -"3589996704","3589996799","NL","NLD","NETHERLANDS" -"3589996800","3589996863","GB","GBR","UNITED KINGDOM" -"3589996864","3589996879","NL","NLD","NETHERLANDS" -"3589996880","3589996911","GB","GBR","UNITED KINGDOM" -"3589996912","3589996931","NL","NLD","NETHERLANDS" -"3589996932","3589996959","GB","GBR","UNITED KINGDOM" -"3589996960","3589996991","NL","NLD","NETHERLANDS" -"3589996992","3589997055","GB","GBR","UNITED KINGDOM" -"3589997056","3589997311","NL","NLD","NETHERLANDS" -"3589997312","3589997439","GB","GBR","UNITED KINGDOM" -"3589997440","3589997503","NL","NLD","NETHERLANDS" -"3589997504","3589997535","GB","GBR","UNITED KINGDOM" -"3589997536","3589997543","NL","NLD","NETHERLANDS" -"3589997544","3589997559","GB","GBR","UNITED KINGDOM" -"3589997560","3589997567","NL","NLD","NETHERLANDS" -"3589997568","3590012927","GB","GBR","UNITED KINGDOM" -"3590012928","3590029311","BE","BEL","BELGIUM" -"3590029312","3590045695","FR","FRA","FRANCE" -"3590045696","3590062079","RU","RUS","RUSSIAN FEDERATION" -"3590062080","3590078463","DE","DEU","GERMANY" -"3590078464","3590094847","RU","RUS","RUSSIAN FEDERATION" -"3590094848","3590111231","DE","DEU","GERMANY" -"3590111232","3590113023","LT","LTU","LITHUANIA" -"3590113024","3590113279","LV","LVA","LATVIA" -"3590113280","3590127615","LT","LTU","LITHUANIA" -"3590127616","3590128639","GB","GBR","UNITED KINGDOM" -"3590128640","3590128895","IT","ITA","ITALY" -"3590128896","3590143999","GB","GBR","UNITED KINGDOM" -"3590144000","3590151143","SI","SVN","SLOVENIA" -"3590151144","3590151151","HR","HRV","CROATIA" -"3590151152","3590154047","SI","SVN","SLOVENIA" -"3590154048","3590154063","HR","HRV","CROATIA" -"3590154064","3590155799","SI","SVN","SLOVENIA" -"3590155800","3590155807","HR","HRV","CROATIA" -"3590155808","3590155815","SI","SVN","SLOVENIA" -"3590155816","3590155823","HR","HRV","CROATIA" -"3590155824","3590156287","SI","SVN","SLOVENIA" -"3590156288","3590156959","HR","HRV","CROATIA" -"3590156960","3590156991","AE","ARE","UNITED ARAB EMIRATES" -"3590156992","3590157311","HR","HRV","CROATIA" -"3590157312","3590157335","CS","SCG","SERBIA AND MONTENEGRO" -"3590157336","3590157343","RS","SRB","SERBIA" -"3590157344","3590157351","SI","SVN","SLOVENIA" -"3590157352","3590157359","RS","SRB","SERBIA" -"3590157360","3590157439","SI","SVN","SLOVENIA" -"3590157440","3590157471","RS","SRB","SERBIA" -"3590157472","3590157487","SI","SVN","SLOVENIA" -"3590157488","3590157567","CS","SCG","SERBIA AND MONTENEGRO" -"3590157568","3590157631","SI","SVN","SLOVENIA" -"3590157632","3590157647","RS","SRB","SERBIA" -"3590157648","3590157655","CS","SCG","SERBIA AND MONTENEGRO" -"3590157656","3590157663","RS","SRB","SERBIA" -"3590157664","3590157671","CS","SCG","SERBIA AND MONTENEGRO" -"3590157672","3590157679","RS","SRB","SERBIA" -"3590157680","3590157687","SI","SVN","SLOVENIA" -"3590157688","3590157695","RS","SRB","SERBIA" -"3590157696","3590157727","CS","SCG","SERBIA AND MONTENEGRO" -"3590157728","3590157743","SI","SVN","SLOVENIA" -"3590157744","3590157783","RS","SRB","SERBIA" -"3590157784","3590157823","SI","SVN","SLOVENIA" -"3590157824","3590157831","CS","SCG","SERBIA AND MONTENEGRO" -"3590157832","3590157839","RS","SRB","SERBIA" -"3590157840","3590158335","CS","SCG","SERBIA AND MONTENEGRO" -"3590158336","3590158343","RS","SRB","SERBIA" -"3590158344","3590158407","SI","SVN","SLOVENIA" -"3590158408","3590158415","CS","SCG","SERBIA AND MONTENEGRO" -"3590158416","3590158431","SI","SVN","SLOVENIA" -"3590158432","3590158439","CS","SCG","SERBIA AND MONTENEGRO" -"3590158440","3590158455","SI","SVN","SLOVENIA" -"3590158456","3590158463","RS","SRB","SERBIA" -"3590158464","3590158479","CS","SCG","SERBIA AND MONTENEGRO" -"3590158480","3590158495","SI","SVN","SLOVENIA" -"3590158496","3590158503","RS","SRB","SERBIA" -"3590158504","3590158527","SI","SVN","SLOVENIA" -"3590158528","3590158535","RS","SRB","SERBIA" -"3590158536","3590158591","SI","SVN","SLOVENIA" -"3590158592","3590159359","CS","SCG","SERBIA AND MONTENEGRO" -"3590159360","3590160383","SI","SVN","SLOVENIA" -"3590160384","3590176767","GB","GBR","UNITED KINGDOM" -"3590176768","3590178615","HU","HUN","HUNGARY" -"3590178616","3590178623","MK","MKD","THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA" -"3590178624","3590193151","HU","HUN","HUNGARY" -"3590193152","3590201343","IT","ITA","ITALY" -"3590201344","3590209535","DE","DEU","GERMANY" -"3590209536","3590225919","ES","ESP","SPAIN" -"3590225920","3590234111","TR","TUR","TURKEY" -"3590234112","3590242303","GB","GBR","UNITED KINGDOM" -"3590242304","3590244351","US","USA","UNITED STATES" -"3590244352","3590244607","IE","IRL","IRELAND" -"3590244608","3590244863","DE","DEU","GERMANY" -"3590244864","3590245119","GR","GRC","GREECE" -"3590245120","3590245151","BE","BEL","BELGIUM" -"3590245152","3590245183","IE","IRL","IRELAND" -"3590245184","3590245215","FR","FRA","FRANCE" -"3590245216","3590245279","IE","IRL","IRELAND" -"3590245280","3590245311","BE","BEL","BELGIUM" -"3590245312","3590245439","IE","IRL","IRELAND" -"3590245440","3590245503","FR","FRA","FRANCE" -"3590245504","3590245567","GB","GBR","UNITED KINGDOM" -"3590245568","3590245631","US","USA","UNITED STATES" -"3590245632","3590245887","FR","FRA","FRANCE" -"3590245888","3590245983","US","USA","UNITED STATES" -"3590245984","3590246015","IE","IRL","IRELAND" -"3590246016","3590246175","FR","FRA","FRANCE" -"3590246176","3590246207","AU","AUS","AUSTRALIA" -"3590246208","3590246271","FR","FRA","FRANCE" -"3590246272","3590246287","DE","DEU","GERMANY" -"3590246288","3590246303","IE","IRL","IRELAND" -"3590246304","3590246399","FR","FRA","FRANCE" -"3590246400","3590246911","US","USA","UNITED STATES" -"3590246912","3590247039","DE","DEU","GERMANY" -"3590247040","3590247055","IT","ITA","ITALY" -"3590247056","3590247063","DE","DEU","GERMANY" -"3590247064","3590247071","IE","IRL","IRELAND" -"3590247072","3590247087","IT","ITA","ITALY" -"3590247088","3590247167","IE","IRL","IRELAND" -"3590247168","3590247231","US","USA","UNITED STATES" -"3590247232","3590247295","IT","ITA","ITALY" -"3590247296","3590247423","US","USA","UNITED STATES" -"3590247424","3590247487","IT","ITA","ITALY" -"3590247488","3590247551","US","USA","UNITED STATES" -"3590247552","3590247679","IT","ITA","ITALY" -"3590247680","3590247687","GB","GBR","UNITED KINGDOM" -"3590247688","3590247711","IE","IRL","IRELAND" -"3590247712","3590247743","HK","HKG","HONG KONG" -"3590247744","3590248447","IE","IRL","IRELAND" -"3590248448","3590248959","US","USA","UNITED STATES" -"3590248960","3590249471","ES","ESP","SPAIN" -"3590249472","3590249983","IE","IRL","IRELAND" -"3590249984","3590250495","GR","GRC","GREECE" -"3590250496","3590250751","IE","IRL","IRELAND" -"3590250752","3590251007","GR","GRC","GREECE" -"3590251008","3590251263","IT","ITA","ITALY" -"3590251264","3590251519","DE","DEU","GERMANY" -"3590251520","3590251551","ES","ESP","SPAIN" -"3590251552","3590251583","IE","IRL","IRELAND" -"3590251584","3590251647","US","USA","UNITED STATES" -"3590251648","3590251775","NL","NLD","NETHERLANDS" -"3590251776","3590251839","IE","IRL","IRELAND" -"3590251840","3590251903","ES","ESP","SPAIN" -"3590251904","3590251967","IE","IRL","IRELAND" -"3590251968","3590252543","ES","ESP","SPAIN" -"3590252544","3590253055","GB","GBR","UNITED KINGDOM" -"3590253056","3590253311","DE","DEU","GERMANY" -"3590253312","3590253375","IE","IRL","IRELAND" -"3590253376","3590253407","US","USA","UNITED STATES" -"3590253408","3590254079","IE","IRL","IRELAND" -"3590254080","3590254087","DE","DEU","GERMANY" -"3590254088","3590254095","IE","IRL","IRELAND" -"3590254096","3590254111","DE","DEU","GERMANY" -"3590254112","3590254127","IE","IRL","IRELAND" -"3590254128","3590254135","RU","RUS","RUSSIAN FEDERATION" -"3590254136","3590254143","IE","IRL","IRELAND" -"3590254144","3590254207","US","USA","UNITED STATES" -"3590254208","3590254303","IE","IRL","IRELAND" -"3590254304","3590254335","US","USA","UNITED STATES" -"3590254336","3590254591","IE","IRL","IRELAND" -"3590254592","3590254879","ES","ESP","SPAIN" -"3590254880","3590254911","IE","IRL","IRELAND" -"3590254912","3590254975","ES","ESP","SPAIN" -"3590254976","3590255047","IE","IRL","IRELAND" -"3590255048","3590255071","ES","ESP","SPAIN" -"3590255072","3590255103","IE","IRL","IRELAND" -"3590255104","3590255359","ES","ESP","SPAIN" -"3590255360","3590255935","IE","IRL","IRELAND" -"3590255936","3590255999","US","USA","UNITED STATES" -"3590256000","3590256383","IE","IRL","IRELAND" -"3590256384","3590256639","IT","ITA","ITALY" -"3590256640","3590256703","US","USA","UNITED STATES" -"3590256704","3590256719","BE","BEL","BELGIUM" -"3590256720","3590256735","IE","IRL","IRELAND" -"3590256736","3590256767","BE","BEL","BELGIUM" -"3590256768","3590257151","IE","IRL","IRELAND" -"3590257152","3590258175","DE","DEU","GERMANY" -"3590258176","3590258387","IE","IRL","IRELAND" -"3590258388","3590258391","DE","DEU","GERMANY" -"3590258392","3590258431","IE","IRL","IRELAND" -"3590258432","3590258447","GB","GBR","UNITED KINGDOM" -"3590258448","3590258463","IE","IRL","IRELAND" -"3590258464","3590258495","US","USA","UNITED STATES" -"3590258496","3590258687","IE","IRL","IRELAND" -"3590258688","3590291455","IT","ITA","ITALY" -"3590299648","3590307839","FI","FIN","FINLAND" -"3590307840","3590307903","CG","COG","CONGO" -"3590307904","3590307935","UA","UKR","UKRAINE" -"3590307936","3590307951","GB","GBR","UNITED KINGDOM" -"3590307952","3590307967","NG","NGA","NIGERIA" -"3590307968","3590308031","GB","GBR","UNITED KINGDOM" -"3590308032","3590308047","UG","UGA","UGANDA" -"3590308048","3590308063","GB","GBR","UNITED KINGDOM" -"3590308064","3590308071","ZW","ZWE","ZIMBABWE" -"3590308072","3590308079","GB","GBR","UNITED KINGDOM" -"3590308080","3590308087","MW","MWI","MALAWI" -"3590308088","3590308095","AO","AGO","ANGOLA" -"3590308096","3590308119","GB","GBR","UNITED KINGDOM" -"3590308120","3590308127","IQ","IRQ","IRAQ" -"3590308128","3590308175","GB","GBR","UNITED KINGDOM" -"3590308176","3590308183","NG","NGA","NIGERIA" -"3590308184","3590308191","IQ","IRQ","IRAQ" -"3590308192","3590308199","GB","GBR","UNITED KINGDOM" -"3590308200","3590308231","IQ","IRQ","IRAQ" -"3590308232","3590308247","GB","GBR","UNITED KINGDOM" -"3590308248","3590308263","IQ","IRQ","IRAQ" -"3590308264","3590308271","GB","GBR","UNITED KINGDOM" -"3590308272","3590308287","IQ","IRQ","IRAQ" -"3590308288","3590308295","GB","GBR","UNITED KINGDOM" -"3590308296","3590308303","IQ","IRQ","IRAQ" -"3590308304","3590308311","SO","SOM","SOMALIA" -"3590308312","3590308319","IQ","IRQ","IRAQ" -"3590308320","3590308327","GB","GBR","UNITED KINGDOM" -"3590308328","3590308343","IQ","IRQ","IRAQ" -"3590308344","3590308351","GB","GBR","UNITED KINGDOM" -"3590308352","3590308607","CG","COG","CONGO" -"3590308608","3590308735","NG","NGA","NIGERIA" -"3590308736","3590308767","GB","GBR","UNITED KINGDOM" -"3590308768","3590308775","RW","RWA","RWANDA" -"3590308776","3590308783","ZA","ZAF","SOUTH AFRICA" -"3590308784","3590308799","ZW","ZWE","ZIMBABWE" -"3590308800","3590308807","GB","GBR","UNITED KINGDOM" -"3590308808","3590308815","ZM","ZMB","ZAMBIA" -"3590308816","3590308831","KE","KEN","KENYA" -"3590308832","3590308839","ZW","ZWE","ZIMBABWE" -"3590308840","3590308847","ET","ETH","ETHIOPIA" -"3590308848","3590308855","GB","GBR","UNITED KINGDOM" -"3590308856","3590308863","NG","NGA","NIGERIA" -"3590308864","3590308911","GB","GBR","UNITED KINGDOM" -"3590308912","3590308927","BI","BDI","BURUNDI" -"3590308928","3590308951","GB","GBR","UNITED KINGDOM" -"3590308952","3590308959","GH","GHA","GHANA" -"3590308960","3590308991","GB","GBR","UNITED KINGDOM" -"3590308992","3590308999","NG","NGA","NIGERIA" -"3590309000","3590309007","UG","UGA","UGANDA" -"3590309008","3590309023","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"3590309024","3590309055","ZW","ZWE","ZIMBABWE" -"3590309056","3590309063","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"3590309064","3590309071","LU","LUX","LUXEMBOURG" -"3590309072","3590309079","MW","MWI","MALAWI" -"3590309080","3590309087","GH","GHA","GHANA" -"3590309088","3590309103","NG","NGA","NIGERIA" -"3590309104","3590309111","ZW","ZWE","ZIMBABWE" -"3590309112","3590309503","GB","GBR","UNITED KINGDOM" -"3590309504","3590309511","NG","NGA","NIGERIA" -"3590309512","3590309519","AO","AGO","ANGOLA" -"3590309520","3590309527","NG","NGA","NIGERIA" -"3590309528","3590309535","CM","CMR","CAMEROON" -"3590309536","3590309543","SO","SOM","SOMALIA" -"3590309544","3590309551","AM","ARM","ARMENIA" -"3590309552","3590309575","GB","GBR","UNITED KINGDOM" -"3590309576","3590309583","NG","NGA","NIGERIA" -"3590309584","3590309615","GB","GBR","UNITED KINGDOM" -"3590309616","3590309623","UG","UGA","UGANDA" -"3590309624","3590309631","ZW","ZWE","ZIMBABWE" -"3590309632","3590309647","IQ","IRQ","IRAQ" -"3590309648","3590309679","GB","GBR","UNITED KINGDOM" -"3590309680","3590309695","IQ","IRQ","IRAQ" -"3590309696","3590309711","GB","GBR","UNITED KINGDOM" -"3590309712","3590309719","IQ","IRQ","IRAQ" -"3590309720","3590309727","GB","GBR","UNITED KINGDOM" -"3590309728","3590309759","IQ","IRQ","IRAQ" -"3590309760","3590309775","GB","GBR","UNITED KINGDOM" -"3590309776","3590309783","IQ","IRQ","IRAQ" -"3590309784","3590309799","GB","GBR","UNITED KINGDOM" -"3590309800","3590309807","IQ","IRQ","IRAQ" -"3590309808","3590309823","GB","GBR","UNITED KINGDOM" -"3590309824","3590309839","IQ","IRQ","IRAQ" -"3590309840","3590309863","GB","GBR","UNITED KINGDOM" -"3590309864","3590309871","IQ","IRQ","IRAQ" -"3590309872","3590309879","GB","GBR","UNITED KINGDOM" -"3590309880","3590309887","IQ","IRQ","IRAQ" -"3590309888","3590310143","GB","GBR","UNITED KINGDOM" -"3590310144","3590310159","MZ","MOZ","MOZAMBIQUE" -"3590310160","3590310167","IQ","IRQ","IRAQ" -"3590310168","3590310175","GB","GBR","UNITED KINGDOM" -"3590310176","3590310183","LR","LBR","LIBERIA" -"3590310184","3590310191","IQ","IRQ","IRAQ" -"3590310192","3590310247","GB","GBR","UNITED KINGDOM" -"3590310248","3590310255","IQ","IRQ","IRAQ" -"3590310256","3590310279","GB","GBR","UNITED KINGDOM" -"3590310280","3590310287","IQ","IRQ","IRAQ" -"3590310288","3590310288","GB","GBR","UNITED KINGDOM" -"3590310289","3590310303","IQ","IRQ","IRAQ" -"3590310304","3590310327","GB","GBR","UNITED KINGDOM" -"3590310328","3590310335","NG","NGA","NIGERIA" -"3590310336","3590310351","IQ","IRQ","IRAQ" -"3590310352","3590310367","GB","GBR","UNITED KINGDOM" -"3590310368","3590310399","IQ","IRQ","IRAQ" -"3590310400","3590310655","UA","UKR","UKRAINE" -"3590310656","3590311679","GB","GBR","UNITED KINGDOM" -"3590311680","3590311935","YT","MYT","MAYOTTE" -"3590311936","3590312703","MW","MWI","MALAWI" -"3590312704","3590312799","GB","GBR","UNITED KINGDOM" -"3590312800","3590312807","KE","KEN","KENYA" -"3590312808","3590312895","GB","GBR","UNITED KINGDOM" -"3590312896","3590312903","ZA","ZAF","SOUTH AFRICA" -"3590312904","3590312911","AO","AGO","ANGOLA" -"3590312912","3590312919","NG","NGA","NIGERIA" -"3590312920","3590312927","GB","GBR","UNITED KINGDOM" -"3590312928","3590312943","UG","UGA","UGANDA" -"3590312944","3590312951","GB","GBR","UNITED KINGDOM" -"3590312952","3590312959","KE","KEN","KENYA" -"3590312960","3590314623","GB","GBR","UNITED KINGDOM" -"3590314624","3590314639","ET","ETH","ETHIOPIA" -"3590314640","3590314655","GH","GHA","GHANA" -"3590314656","3590314671","GB","GBR","UNITED KINGDOM" -"3590314672","3590314679","UG","UGA","UGANDA" -"3590314680","3590314687","GB","GBR","UNITED KINGDOM" -"3590314688","3590314703","NG","NGA","NIGERIA" -"3590314704","3590314719","GB","GBR","UNITED KINGDOM" -"3590314720","3590314727","TG","TGO","TOGO" -"3590314728","3590314735","UG","UGA","UGANDA" -"3590314736","3590314743","NG","NGA","NIGERIA" -"3590314744","3590314823","GB","GBR","UNITED KINGDOM" -"3590314824","3590314831","ZW","ZWE","ZIMBABWE" -"3590314832","3590314887","GB","GBR","UNITED KINGDOM" -"3590314888","3590314895","NG","NGA","NIGERIA" -"3590314896","3590314903","GB","GBR","UNITED KINGDOM" -"3590314904","3590314911","KE","KEN","KENYA" -"3590314912","3590314927","GH","GHA","GHANA" -"3590314928","3590314943","NG","NGA","NIGERIA" -"3590314944","3590314967","GB","GBR","UNITED KINGDOM" -"3590314968","3590314973","YT","MYT","MAYOTTE" -"3590314974","3590314975","GB","GBR","UNITED KINGDOM" -"3590314976","3590314983","UG","UGA","UGANDA" -"3590314984","3590316031","GB","GBR","UNITED KINGDOM" -"3590316032","3590316039","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"3590316040","3590316047","GB","GBR","UNITED KINGDOM" -"3590316048","3590316055","GH","GHA","GHANA" -"3590316056","3590316079","IQ","IRQ","IRAQ" -"3590316080","3590316087","LB","LBN","LEBANON" -"3590316088","3590316095","GB","GBR","UNITED KINGDOM" -"3590316096","3590316127","IQ","IRQ","IRAQ" -"3590316128","3590316151","NG","NGA","NIGERIA" -"3590316152","3590316159","GB","GBR","UNITED KINGDOM" -"3590316160","3590316175","LB","LBN","LEBANON" -"3590316176","3590316199","GB","GBR","UNITED KINGDOM" -"3590316200","3590316215","IQ","IRQ","IRAQ" -"3590316216","3590316231","GB","GBR","UNITED KINGDOM" -"3590316232","3590316239","LB","LBN","LEBANON" -"3590316240","3590316271","GB","GBR","UNITED KINGDOM" -"3590316272","3590316279","IQ","IRQ","IRAQ" -"3590316280","3590316287","GB","GBR","UNITED KINGDOM" -"3590316288","3590316543","LB","LBN","LEBANON" -"3590316544","3590316567","GB","GBR","UNITED KINGDOM" -"3590316568","3590316575","IQ","IRQ","IRAQ" -"3590316576","3590316591","GB","GBR","UNITED KINGDOM" -"3590316592","3590316599","IQ","IRQ","IRAQ" -"3590316600","3590316647","GB","GBR","UNITED KINGDOM" -"3590316648","3590316655","LY","LBY","LIBYAN ARAB JAMAHIRIYA" -"3590316656","3590316663","IQ","IRQ","IRAQ" -"3590316664","3590316671","LY","LBY","LIBYAN ARAB JAMAHIRIYA" -"3590316672","3590316727","GB","GBR","UNITED KINGDOM" -"3590316728","3590316735","LB","LBN","LEBANON" -"3590316736","3590316815","GB","GBR","UNITED KINGDOM" -"3590316816","3590316831","IQ","IRQ","IRAQ" -"3590316832","3590317055","GB","GBR","UNITED KINGDOM" -"3590317056","3590317311","NG","NGA","NIGERIA" -"3590317312","3590317343","AO","AGO","ANGOLA" -"3590317344","3590317407","GB","GBR","UNITED KINGDOM" -"3590317408","3590317439","US","USA","UNITED STATES" -"3590317440","3590317447","AM","ARM","ARMENIA" -"3590317448","3590317455","LB","LBN","LEBANON" -"3590317456","3590317471","IQ","IRQ","IRAQ" -"3590317472","3590317479","MW","MWI","MALAWI" -"3590317480","3590317487","US","USA","UNITED STATES" -"3590317488","3590317495","GB","GBR","UNITED KINGDOM" -"3590317496","3590317503","LB","LBN","LEBANON" -"3590317504","3590317519","GB","GBR","UNITED KINGDOM" -"3590317520","3590317527","LY","LBY","LIBYAN ARAB JAMAHIRIYA" -"3590317528","3590317823","IQ","IRQ","IRAQ" -"3590317824","3590317951","GB","GBR","UNITED KINGDOM" -"3590317952","3590318047","UA","UKR","UKRAINE" -"3590318048","3590319167","GB","GBR","UNITED KINGDOM" -"3590319168","3590319231","AE","ARE","UNITED ARAB EMIRATES" -"3590319232","3590319335","GB","GBR","UNITED KINGDOM" -"3590319336","3590319359","AE","ARE","UNITED ARAB EMIRATES" -"3590319360","3590319423","GB","GBR","UNITED KINGDOM" -"3590319424","3590319455","AE","ARE","UNITED ARAB EMIRATES" -"3590319456","3590319967","GB","GBR","UNITED KINGDOM" -"3590319968","3590319999","AE","ARE","UNITED ARAB EMIRATES" -"3590320000","3590320191","GB","GBR","UNITED KINGDOM" -"3590320192","3590320199","LB","LBN","LEBANON" -"3590320200","3590320207","IQ","IRQ","IRAQ" -"3590320208","3590320231","GB","GBR","UNITED KINGDOM" -"3590320232","3590320239","IQ","IRQ","IRAQ" -"3590320240","3590320247","GB","GBR","UNITED KINGDOM" -"3590320248","3590320255","LB","LBN","LEBANON" -"3590320256","3590320263","LY","LBY","LIBYAN ARAB JAMAHIRIYA" -"3590320264","3590320271","GB","GBR","UNITED KINGDOM" -"3590320272","3590320295","IQ","IRQ","IRAQ" -"3590320296","3590320303","GB","GBR","UNITED KINGDOM" -"3590320304","3590320319","IQ","IRQ","IRAQ" -"3590320320","3590320335","GB","GBR","UNITED KINGDOM" -"3590320336","3590320343","UG","UGA","UGANDA" -"3590320344","3590320367","IQ","IRQ","IRAQ" -"3590320368","3590320375","GB","GBR","UNITED KINGDOM" -"3590320376","3590320383","IQ","IRQ","IRAQ" -"3590320384","3590321151","GB","GBR","UNITED KINGDOM" -"3590321152","3590321663","IQ","IRQ","IRAQ" -"3590321664","3590321679","GB","GBR","UNITED KINGDOM" -"3590321680","3590321687","CM","CMR","CAMEROON" -"3590321688","3590321695","IQ","IRQ","IRAQ" -"3590321696","3590321711","ZW","ZWE","ZIMBABWE" -"3590321712","3590321727","IQ","IRQ","IRAQ" -"3590321728","3590321791","GB","GBR","UNITED KINGDOM" -"3590321792","3590321823","IQ","IRQ","IRAQ" -"3590321824","3590321839","GB","GBR","UNITED KINGDOM" -"3590321840","3590321855","US","USA","UNITED STATES" -"3590321856","3590321887","IQ","IRQ","IRAQ" -"3590321888","3590321927","GB","GBR","UNITED KINGDOM" -"3590321928","3590321935","IQ","IRQ","IRAQ" -"3590321936","3590321943","LY","LBY","LIBYAN ARAB JAMAHIRIYA" -"3590321944","3590321959","IQ","IRQ","IRAQ" -"3590321960","3590321967","GB","GBR","UNITED KINGDOM" -"3590321968","3590321983","TR","TUR","TURKEY" -"3590321984","3590322007","GB","GBR","UNITED KINGDOM" -"3590322008","3590322015","IQ","IRQ","IRAQ" -"3590322016","3590322047","GB","GBR","UNITED KINGDOM" -"3590322048","3590322055","NG","NGA","NIGERIA" -"3590322056","3590322063","GB","GBR","UNITED KINGDOM" -"3590322064","3590322079","IQ","IRQ","IRAQ" -"3590322080","3590322111","GB","GBR","UNITED KINGDOM" -"3590322112","3590322119","BJ","BEN","BENIN" -"3590322120","3590322127","IQ","IRQ","IRAQ" -"3590322128","3590322135","GH","GHA","GHANA" -"3590322136","3590322151","GB","GBR","UNITED KINGDOM" -"3590322152","3590322159","LY","LBY","LIBYAN ARAB JAMAHIRIYA" -"3590322160","3590322167","GB","GBR","UNITED KINGDOM" -"3590322168","3590322239","IQ","IRQ","IRAQ" -"3590322240","3590322255","GB","GBR","UNITED KINGDOM" -"3590322256","3590322271","RW","RWA","RWANDA" -"3590322272","3590322335","GB","GBR","UNITED KINGDOM" -"3590322336","3590322351","MG","MDG","MADAGASCAR" -"3590322352","3590322375","GB","GBR","UNITED KINGDOM" -"3590322376","3590322383","LY","LBY","LIBYAN ARAB JAMAHIRIYA" -"3590322384","3590322399","IQ","IRQ","IRAQ" -"3590322400","3590322415","AO","AGO","ANGOLA" -"3590322416","3590322423","LR","LBR","LIBERIA" -"3590322424","3590322431","GB","GBR","UNITED KINGDOM" -"3590322432","3590322559","LB","LBN","LEBANON" -"3590322560","3590322575","GB","GBR","UNITED KINGDOM" -"3590322576","3590322687","LB","LBN","LEBANON" -"3590322688","3590323199","IQ","IRQ","IRAQ" -"3590323200","3590323711","MW","MWI","MALAWI" -"3590323712","3590323903","GB","GBR","UNITED KINGDOM" -"3590323904","3590323911","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"3590323912","3590324031","GB","GBR","UNITED KINGDOM" -"3590324032","3590324095","NG","NGA","NIGERIA" -"3590324096","3590324223","GB","GBR","UNITED KINGDOM" -"3590324224","3623890943","US","USA","UNITED STATES" -"3623890944","3623891199","ZA","ZAF","SOUTH AFRICA" -"3623891200","3623891455","US","USA","UNITED STATES" -"3623891456","3623891711","ZA","ZAF","SOUTH AFRICA" -"3623891712","3623891967","US","USA","UNITED STATES" -"3623891968","3623892479","ZA","ZAF","SOUTH AFRICA" -"3623892480","3624054783","US","USA","UNITED STATES" -"3624054784","3624056831","ZA","ZAF","SOUTH AFRICA" -"3624056832","3624181759","US","USA","UNITED STATES" -"3624181760","3624182783","ZA","ZAF","SOUTH AFRICA" -"3624182784","3624206335","US","USA","UNITED STATES" -"3624206336","3624208383","ZA","ZAF","SOUTH AFRICA" -"3624208384","3624255487","US","USA","UNITED STATES" -"3624255488","3624257535","ZA","ZAF","SOUTH AFRICA" -"3624257536","3624271871","US","USA","UNITED STATES" -"3624271872","3624272383","SY","SYR","SYRIAN ARAB REPUBLIC" -"3624272384","3624279071","CA","CAN","CANADA" -"3624279072","3624279087","BD","BGD","BANGLADESH" -"3624279088","3624288255","CA","CAN","CANADA" -"3624288256","3624290303","IN","IND","INDIA" -"3624290304","3624292351","CA","CAN","CANADA" -"3624292352","3624292607","MF","MAF","SAINT MARTIN" -"3624292608","3624297471","CA","CAN","CANADA" -"3624297472","3624298495","CO","COL","COLOMBIA" -"3624298496","3624299519","PH","PHL","PHILIPPINES" -"3624299520","3624303743","CA","CAN","CANADA" -"3624303744","3624303759","ZA","ZAF","SOUTH AFRICA" -"3624303760","3624304639","CA","CAN","CANADA" -"3624304640","3624321023","US","USA","UNITED STATES" -"3624321024","3624325119","CA","CAN","CANADA" -"3624325120","3624330511","US","USA","UNITED STATES" -"3624330512","3624330519","IN","IND","INDIA" -"3624330520","3624333183","US","USA","UNITED STATES" -"3624333184","3624333215","IN","IND","INDIA" -"3624333216","3624359679","US","USA","UNITED STATES" -"3624359680","3624360703","AN","ANT","NETHERLANDS ANTILLES" -"3624360704","3624384767","US","USA","UNITED STATES" -"3624384768","3624385023","CA","CAN","CANADA" -"3624385024","3624386559","US","USA","UNITED STATES" -"3624386560","3624394751","CA","CAN","CANADA" -"3624394752","3624435711","US","USA","UNITED STATES" -"3624435712","3624452095","CA","CAN","CANADA" -"3624452096","3624480767","US","USA","UNITED STATES" -"3624480768","3624484863","CA","CAN","CANADA" -"3624484864","3624529919","US","USA","UNITED STATES" -"3624529920","3624534015","CA","CAN","CANADA" -"3624534016","3624534271","PA","PAN","PANAMA" -"3624534272","3624536063","CA","CAN","CANADA" -"3624536064","3624587263","US","USA","UNITED STATES" -"3624587264","3624591359","JM","JAM","JAMAICA" -"3624591360","3624730623","US","USA","UNITED STATES" -"3624730624","3624796159","CA","CAN","CANADA" -"3624812544","3624820735","US","USA","UNITED STATES" -"3624820736","3624820799","CY","CYP","CYPRUS" -"3624820800","3624821695","US","USA","UNITED STATES" -"3624821696","3624821703","GB","GBR","UNITED KINGDOM" -"3624821704","3624828927","US","USA","UNITED STATES" -"3624828928","3624833023","CA","CAN","CANADA" -"3624833024","3624845311","US","USA","UNITED STATES" -"3624845312","3624849407","AU","AUS","AUSTRALIA" -"3624849408","3624903167","US","USA","UNITED STATES" -"3624903168","3624903423","CA","CAN","CANADA" -"3624903424","3624903679","US","USA","UNITED STATES" -"3624903680","3624904447","CA","CAN","CANADA" -"3624904448","3624905471","US","USA","UNITED STATES" -"3624905472","3624905727","CA","CAN","CANADA" -"3624905728","3624964095","US","USA","UNITED STATES" -"3624976384","3624984575","US","USA","UNITED STATES" -"3624984576","3624990431","CA","CAN","CANADA" -"3624990432","3624990463","US","USA","UNITED STATES" -"3624990464","3624991223","CA","CAN","CANADA" -"3624991224","3624991231","US","USA","UNITED STATES" -"3624991232","3624992767","CA","CAN","CANADA" -"3624992768","3625058303","US","USA","UNITED STATES" -"3625058304","3625091071","CA","CAN","CANADA" -"3625091072","3625103359","US","USA","UNITED STATES" -"3625107456","3625116671","US","USA","UNITED STATES" -"3625116672","3625116767","CA","CAN","CANADA" -"3625116768","3625116775","US","USA","UNITED STATES" -"3625116776","3625116927","CA","CAN","CANADA" -"3625116928","3625117775","US","USA","UNITED STATES" -"3625117776","3625117783","CA","CAN","CANADA" -"3625117784","3625117791","US","USA","UNITED STATES" -"3625117792","3625117799","CA","CAN","CANADA" -"3625117800","3625117807","US","USA","UNITED STATES" -"3625117808","3625117839","CA","CAN","CANADA" -"3625117840","3625118233","US","USA","UNITED STATES" -"3625118234","3625118241","CA","CAN","CANADA" -"3625118242","3625118271","US","USA","UNITED STATES" -"3625118272","3625118287","CA","CAN","CANADA" -"3625118288","3625118975","US","USA","UNITED STATES" -"3625118976","3625119056","PL","POL","POLAND" -"3625119057","3625140223","US","USA","UNITED STATES" -"3625140224","3625148415","CA","CAN","CANADA" -"3625148416","3625168895","US","USA","UNITED STATES" -"3625168896","3625172991","CA","CAN","CANADA" -"3625172992","3625254911","US","USA","UNITED STATES" -"3625255168","3625255935","US","USA","UNITED STATES" -"3625256448","3625256959","US","USA","UNITED STATES" -"3625258752","3625259007","US","USA","UNITED STATES" -"3625259264","3625259519","US","USA","UNITED STATES" -"3625260032","3625287679","US","USA","UNITED STATES" -"3625287680","3625295871","CA","CAN","CANADA" -"3625295872","3625304063","US","USA","UNITED STATES" -"3625308160","3625346047","US","USA","UNITED STATES" -"3625346048","3625346303","AR","ARG","ARGENTINA" -"3625346304","3625418751","US","USA","UNITED STATES" -"3625418752","3625420031","CA","CAN","CANADA" -"3625420032","3625420543","US","USA","UNITED STATES" -"3625420544","3625422591","CA","CAN","CANADA" -"3625422592","3625423103","US","USA","UNITED STATES" -"3625423104","3625426943","CA","CAN","CANADA" -"3625426944","3625500671","US","USA","UNITED STATES" -"3625504768","3625508863","US","USA","UNITED STATES" -"3625508864","3625512959","CA","CAN","CANADA" -"3625512960","3625517055","PR","PRI","PUERTO RICO" -"3625517056","3625631743","US","USA","UNITED STATES" -"3625631744","3625639935","CA","CAN","CANADA" -"3625639936","3626025919","US","USA","UNITED STATES" -"3626025920","3626025951","LT","LTU","LITHUANIA" -"3626025952","3626060735","US","USA","UNITED STATES" -"3626060736","3626060743","BM","BMU","BERMUDA" -"3626060744","3626061903","US","USA","UNITED STATES" -"3626061904","3626061911","BM","BMU","BERMUDA" -"3626061912","3626069279","US","USA","UNITED STATES" -"3626069280","3626069311","NL","NLD","NETHERLANDS" -"3626069312","3626072959","US","USA","UNITED STATES" -"3626072960","3626072991","AE","ARE","UNITED ARAB EMIRATES" -"3626072992","3626073439","US","USA","UNITED STATES" -"3626073440","3626073455","AE","ARE","UNITED ARAB EMIRATES" -"3626073456","3626108895","US","USA","UNITED STATES" -"3626108896","3626108927","AU","AUS","AUSTRALIA" -"3626108928","3626130415","US","USA","UNITED STATES" -"3626130416","3626130431","CA","CAN","CANADA" -"3626130432","3626140479","US","USA","UNITED STATES" -"3626140480","3626140671","AU","AUS","AUSTRALIA" -"3626140672","3626142623","US","USA","UNITED STATES" -"3626142624","3626142639","AU","AUS","AUSTRALIA" -"3626142640","3626184191","US","USA","UNITED STATES" -"3626184192","3626184223","LT","LTU","LITHUANIA" -"3626184224","3626189359","US","USA","UNITED STATES" -"3626189360","3626189367","NO","NOR","NORWAY" -"3626189368","3626189375","US","USA","UNITED STATES" -"3626189376","3626189383","IL","ISR","ISRAEL" -"3626189384","3626189431","US","USA","UNITED STATES" -"3626189432","3626189439","IL","ISR","ISRAEL" -"3626189440","3626191119","US","USA","UNITED STATES" -"3626191120","3626191135","GB","GBR","UNITED KINGDOM" -"3626191136","3626192639","US","USA","UNITED STATES" -"3626192640","3626192703","CY","CYP","CYPRUS" -"3626192704","3626192767","US","USA","UNITED STATES" -"3626192768","3626192799","CH","CHE","SWITZERLAND" -"3626192800","3626213439","US","USA","UNITED STATES" -"3626213440","3626213471","GB","GBR","UNITED KINGDOM" -"3626213472","3626227167","US","USA","UNITED STATES" -"3626227168","3626227199","AR","ARG","ARGENTINA" -"3626227200","3626228463","US","USA","UNITED STATES" -"3626228464","3626228479","AE","ARE","UNITED ARAB EMIRATES" -"3626228480","3626270719","US","USA","UNITED STATES" -"3626270720","3626287103","CA","CAN","CANADA" -"3626287104","3626328063","US","USA","UNITED STATES" -"3626336256","3626508287","US","USA","UNITED STATES" -"3626508288","3626512383","CA","CAN","CANADA" -"3626512384","3626524671","US","USA","UNITED STATES" -"3626524672","3626532863","CA","CAN","CANADA" -"3626532864","3626852351","US","USA","UNITED STATES" -"3626852352","3626860543","CA","CAN","CANADA" -"3626860544","3626893311","US","USA","UNITED STATES" -"3626893312","3626905599","CA","CAN","CANADA" -"3626905600","3626926079","US","USA","UNITED STATES" -"3626926080","3626934271","CA","CAN","CANADA" -"3626934272","3627044863","US","USA","UNITED STATES" -"3627044864","3627048959","CA","CAN","CANADA" -"3627048960","3627065343","US","USA","UNITED STATES" -"3627065344","3627069439","CA","CAN","CANADA" -"3627069440","3627387903","US","USA","UNITED STATES" -"3627387904","3627388415","BR","BRA","BRAZIL" -"3627388416","3627400319","US","USA","UNITED STATES" -"3627400320","3627400351","BR","BRA","BRAZIL" -"3627400352","3627401151","US","USA","UNITED STATES" -"3627401152","3627401215","BR","BRA","BRAZIL" -"3627401216","3627507711","US","USA","UNITED STATES" -"3627507712","3627511807","CA","CAN","CANADA" -"3627511808","3627532287","US","USA","UNITED STATES" -"3627532288","3627544575","CA","CAN","CANADA" -"3627544576","3627659263","US","USA","UNITED STATES" -"3627659264","3627663359","CA","CAN","CANADA" -"3627663360","3627665407","US","USA","UNITED STATES" -"3627665408","3627665439","CA","CAN","CANADA" -"3627665440","3627666719","US","USA","UNITED STATES" -"3627666720","3627666751","CA","CAN","CANADA" -"3627666752","3627679743","US","USA","UNITED STATES" -"3627679744","3627712511","CA","CAN","CANADA" -"3627712512","3627728895","US","USA","UNITED STATES" -"3627737088","3627745343","US","USA","UNITED STATES" -"3627745344","3627745375","BE","BEL","BELGIUM" -"3627745376","3627746559","US","USA","UNITED STATES" -"3627746560","3627746815","IN","IND","INDIA" -"3627746816","3627761663","US","USA","UNITED STATES" -"3627778048","3627802623","US","USA","UNITED STATES" -"3627802624","3627810815","CA","CAN","CANADA" -"3627810816","3628123615","US","USA","UNITED STATES" -"3628123616","3628123647","CA","CAN","CANADA" -"3628123648","3628123711","BM","BMU","BERMUDA" -"3628123712","3628123903","US","USA","UNITED STATES" -"3628123904","3628123935","GB","GBR","UNITED KINGDOM" -"3628123936","3628128703","US","USA","UNITED STATES" -"3628128704","3628128719","CA","CAN","CANADA" -"3628128720","3628129087","US","USA","UNITED STATES" -"3628129088","3628129103","CA","CAN","CANADA" -"3628129104","3628139311","US","USA","UNITED STATES" -"3628139312","3628139327","SG","SGP","SINGAPORE" -"3628139328","3628153087","US","USA","UNITED STATES" -"3628153088","3628153343","KW","KWT","KUWAIT" -"3628153344","3628154239","US","USA","UNITED STATES" -"3628154240","3628154303","PH","PHL","PHILIPPINES" -"3628154304","3628154463","US","USA","UNITED STATES" -"3628154464","3628154495","GB","GBR","UNITED KINGDOM" -"3628154496","3628155647","US","USA","UNITED STATES" -"3628155648","3628155903","CA","CAN","CANADA" -"3628155904","3628179455","US","USA","UNITED STATES" -"3628179456","3628187647","CA","CAN","CANADA" -"3628187648","3628208127","US","USA","UNITED STATES" -"3628208128","3628208383","IT","ITA","ITALY" -"3628208384","3628236799","US","USA","UNITED STATES" -"3628236800","3628257279","CA","CAN","CANADA" -"3628257280","3628598271","US","USA","UNITED STATES" -"3628598272","3628599295","CO","COL","COLOMBIA" -"3628599296","3628603391","CL","CHL","CHILE" -"3628603392","3628604415","US","USA","UNITED STATES" -"3628604416","3628605439","GT","GTM","GUATEMALA" -"3628605440","3628608511","IL","ISR","ISRAEL" -"3628608512","3628609023","VE","VEN","VENEZUELA" -"3628609024","3628616191","US","USA","UNITED STATES" -"3628616192","3628617215","PR","PRI","PUERTO RICO" -"3628617216","3628617471","HN","HND","HONDURAS" -"3628617472","3628617727","US","USA","UNITED STATES" -"3628617728","3628618239","CO","COL","COLOMBIA" -"3628618240","3628618495","US","USA","UNITED STATES" -"3628618496","3628619775","HN","HND","HONDURAS" -"3628619776","3628622847","US","USA","UNITED STATES" -"3628622848","3628623871","PR","PRI","PUERTO RICO" -"3628623872","3628625919","NG","NGA","NIGERIA" -"3628625920","3628626175","US","USA","UNITED STATES" -"3628626176","3628626943","HN","HND","HONDURAS" -"3628626944","3628627199","CO","COL","COLOMBIA" -"3628627200","3628627455","IL","ISR","ISRAEL" -"3628627456","3628627711","HN","HND","HONDURAS" -"3628627712","3628627967","US","USA","UNITED STATES" -"3628627968","3628628991","SV","SLV","EL SALVADOR" -"3628628992","3628629247","GT","GTM","GUATEMALA" -"3628629248","3628629759","US","USA","UNITED STATES" -"3628629760","3628631807","VE","VEN","VENEZUELA" -"3628631808","3628634111","US","USA","UNITED STATES" -"3628634112","3628636159","AR","ARG","ARGENTINA" -"3628636160","3628636671","VE","VEN","VENEZUELA" -"3628636672","3628638207","US","USA","UNITED STATES" -"3628638208","3628646399","CL","CHL","CHILE" -"3628646400","3628646911","US","USA","UNITED STATES" -"3628646912","3628647423","HN","HND","HONDURAS" -"3628647424","3628647679","US","USA","UNITED STATES" -"3628647680","3628649727","CO","COL","COLOMBIA" -"3628649728","3628655103","US","USA","UNITED STATES" -"3628655104","3628655359","VE","VEN","VENEZUELA" -"3628655360","3628657407","CO","COL","COLOMBIA" -"3628657408","3628657663","US","USA","UNITED STATES" -"3628657664","3628657919","VE","VEN","VENEZUELA" -"3628657920","3628679167","US","USA","UNITED STATES" -"3628679168","3628683263","CA","CAN","CANADA" -"3628683264","3628762335","US","USA","UNITED STATES" -"3628762336","3628762367","IL","ISR","ISRAEL" -"3628762368","3628762519","US","USA","UNITED STATES" -"3628762520","3628762527","CY","CYP","CYPRUS" -"3628762528","3628766143","US","USA","UNITED STATES" -"3628766144","3628766151","GB","GBR","UNITED KINGDOM" -"3628766152","3628767039","US","USA","UNITED STATES" -"3628767040","3628767055","IE","IRL","IRELAND" -"3628767056","3628767135","US","USA","UNITED STATES" -"3628767136","3628767167","GB","GBR","UNITED KINGDOM" -"3628767168","3628767695","US","USA","UNITED STATES" -"3628767696","3628767703","NO","NOR","NORWAY" -"3628767704","3628768223","US","USA","UNITED STATES" -"3628768224","3628768239","NO","NOR","NORWAY" -"3628768240","3628770207","US","USA","UNITED STATES" -"3628770208","3628770215","NO","NOR","NORWAY" -"3628770216","3628770367","US","USA","UNITED STATES" -"3628770368","3628770383","CY","CYP","CYPRUS" -"3628770384","3628771455","US","USA","UNITED STATES" -"3628771456","3628771647","GB","GBR","UNITED KINGDOM" -"3628771648","3628771839","US","USA","UNITED STATES" -"3628771840","3628772095","NO","NOR","NORWAY" -"3628772096","3628772415","US","USA","UNITED STATES" -"3628772416","3628772431","CA","CAN","CANADA" -"3628772432","3628772447","GB","GBR","UNITED KINGDOM" -"3628772448","3628834815","US","USA","UNITED STATES" -"3628834816","3628843007","CA","CAN","CANADA" -"3628843008","3629187071","US","USA","UNITED STATES" -"3629187072","3629195263","CA","CAN","CANADA" -"3629195264","3629199359","US","USA","UNITED STATES" -"3629199360","3629203455","CA","CAN","CANADA" -"3629203456","3629318143","US","USA","UNITED STATES" -"3629318144","3629326335","CA","CAN","CANADA" -"3629326336","3629539327","US","USA","UNITED STATES" -"3629539328","3629547519","CA","CAN","CANADA" -"3629547520","3629662207","US","USA","UNITED STATES" -"3629662208","3629662463","GB","GBR","UNITED KINGDOM" -"3629662464","3629735943","US","USA","UNITED STATES" -"3629735944","3629735951","CA","CAN","CANADA" -"3629735952","3629736119","US","USA","UNITED STATES" -"3629736120","3629736127","CA","CAN","CANADA" -"3629736128","3629737215","US","USA","UNITED STATES" -"3629737216","3629737471","CA","CAN","CANADA" -"3629737472","3629761551","US","USA","UNITED STATES" -"3629761552","3629761567","CA","CAN","CANADA" -"3629761568","3629767935","US","USA","UNITED STATES" -"3629767936","3629768191","CA","CAN","CANADA" -"3629768192","3629789439","US","USA","UNITED STATES" -"3629789440","3629789695","CA","CAN","CANADA" -"3629789696","3629789951","US","USA","UNITED STATES" -"3629789952","3629790207","CA","CAN","CANADA" -"3629790208","3629808095","US","USA","UNITED STATES" -"3629808096","3629808127","CA","CAN","CANADA" -"3629808128","3629838551","US","USA","UNITED STATES" -"3629838552","3629838559","CA","CAN","CANADA" -"3629838560","3629838583","US","USA","UNITED STATES" -"3629838584","3629838591","CA","CAN","CANADA" -"3629838592","3629841951","US","USA","UNITED STATES" -"3629841952","3629841983","CA","CAN","CANADA" -"3629841984","3629859551","US","USA","UNITED STATES" -"3629859552","3629859583","CA","CAN","CANADA" -"3629859584","3629875775","US","USA","UNITED STATES" -"3629875776","3629875807","CA","CAN","CANADA" -"3629875808","3629876255","US","USA","UNITED STATES" -"3629876256","3629876263","CA","CAN","CANADA" -"3629876264","3630039039","US","USA","UNITED STATES" -"3630039040","3630039295","CA","CAN","CANADA" -"3630039296","3630040063","US","USA","UNITED STATES" -"3630040064","3630040319","CA","CAN","CANADA" -"3630040320","3630040575","US","USA","UNITED STATES" -"3630040576","3630040831","CA","CAN","CANADA" -"3630040832","3630041343","US","USA","UNITED STATES" -"3630041344","3630041599","CA","CAN","CANADA" -"3630041600","3630041863","US","USA","UNITED STATES" -"3630041864","3630041871","CA","CAN","CANADA" -"3630041872","3630041911","US","USA","UNITED STATES" -"3630041912","3630041919","CA","CAN","CANADA" -"3630041920","3630042095","US","USA","UNITED STATES" -"3630042096","3630042103","CA","CAN","CANADA" -"3630042104","3630042391","US","USA","UNITED STATES" -"3630042392","3630042399","CA","CAN","CANADA" -"3630042400","3630042463","US","USA","UNITED STATES" -"3630042464","3630042471","CA","CAN","CANADA" -"3630042472","3630042479","US","USA","UNITED STATES" -"3630042480","3630042487","CA","CAN","CANADA" -"3630042488","3630042599","US","USA","UNITED STATES" -"3630042600","3630042607","CA","CAN","CANADA" -"3630042608","3630044927","US","USA","UNITED STATES" -"3630044928","3630045183","CA","CAN","CANADA" -"3630045184","3630045695","US","USA","UNITED STATES" -"3630045696","3630046207","CA","CAN","CANADA" -"3630046208","3630046591","US","USA","UNITED STATES" -"3630046592","3630047231","CA","CAN","CANADA" -"3630047232","3630048767","US","USA","UNITED STATES" -"3630048768","3630049023","CA","CAN","CANADA" -"3630049024","3630049279","US","USA","UNITED STATES" -"3630049280","3630049535","CA","CAN","CANADA" -"3630049536","3630050479","US","USA","UNITED STATES" -"3630050480","3630050487","CA","CAN","CANADA" -"3630050488","3630050527","US","USA","UNITED STATES" -"3630050528","3630050535","CA","CAN","CANADA" -"3630050536","3630050559","US","USA","UNITED STATES" -"3630050560","3630050815","CA","CAN","CANADA" -"3630050816","3630051839","US","USA","UNITED STATES" -"3630051840","3630052351","CA","CAN","CANADA" -"3630052352","3630054655","US","USA","UNITED STATES" -"3630054656","3630055167","CA","CAN","CANADA" -"3630055168","3630055615","US","USA","UNITED STATES" -"3630055616","3630055647","CA","CAN","CANADA" -"3630055648","3630055935","US","USA","UNITED STATES" -"3630055936","3630056959","CA","CAN","CANADA" -"3630056960","3630060223","US","USA","UNITED STATES" -"3630060224","3630060287","CA","CAN","CANADA" -"3630060288","3630062335","US","USA","UNITED STATES" -"3630062336","3630062591","CA","CAN","CANADA" -"3630062592","3630062847","US","USA","UNITED STATES" -"3630062848","3630063103","CA","CAN","CANADA" -"3630063104","3630066175","US","USA","UNITED STATES" -"3630066176","3630066431","CA","CAN","CANADA" -"3630066432","3630066687","US","USA","UNITED STATES" -"3630066688","3630067967","CA","CAN","CANADA" -"3630067968","3630069503","US","USA","UNITED STATES" -"3630069504","3630069759","CA","CAN","CANADA" -"3630069760","3630070783","US","USA","UNITED STATES" -"3630070784","3630071039","CA","CAN","CANADA" -"3630071040","3630073087","US","USA","UNITED STATES" -"3630073088","3630073343","CA","CAN","CANADA" -"3630073344","3630073599","US","USA","UNITED STATES" -"3630073600","3630073855","CA","CAN","CANADA" -"3630073856","3630074543","US","USA","UNITED STATES" -"3630074544","3630074551","CA","CAN","CANADA" -"3630074552","3630074607","US","USA","UNITED STATES" -"3630074608","3630074615","CA","CAN","CANADA" -"3630074616","3630074815","US","USA","UNITED STATES" -"3630074816","3630074879","CA","CAN","CANADA" -"3630074880","3630075391","US","USA","UNITED STATES" -"3630075392","3630075647","CA","CAN","CANADA" -"3630075648","3630077183","US","USA","UNITED STATES" -"3630077184","3630077439","CA","CAN","CANADA" -"3630077440","3630077951","US","USA","UNITED STATES" -"3630077952","3630078015","CA","CAN","CANADA" -"3630078016","3630078463","US","USA","UNITED STATES" -"3630078464","3630078719","CA","CAN","CANADA" -"3630078720","3630080511","US","USA","UNITED STATES" -"3630080512","3630080575","CA","CAN","CANADA" -"3630080576","3630081279","US","USA","UNITED STATES" -"3630081280","3630081535","CA","CAN","CANADA" -"3630081536","3630082047","US","USA","UNITED STATES" -"3630082048","3630082303","CA","CAN","CANADA" -"3630082304","3630085119","US","USA","UNITED STATES" -"3630085120","3630085375","CA","CAN","CANADA" -"3630085376","3630088703","US","USA","UNITED STATES" -"3630088704","3630088959","CA","CAN","CANADA" -"3630088960","3630089471","US","USA","UNITED STATES" -"3630089472","3630090239","CA","CAN","CANADA" -"3630090240","3630091263","US","USA","UNITED STATES" -"3630091264","3630091519","CA","CAN","CANADA" -"3630091520","3630092031","US","USA","UNITED STATES" -"3630092032","3630092287","CA","CAN","CANADA" -"3630092288","3630093439","US","USA","UNITED STATES" -"3630093440","3630093447","CA","CAN","CANADA" -"3630093448","3630093527","US","USA","UNITED STATES" -"3630093528","3630093535","CA","CAN","CANADA" -"3630093536","3630094591","US","USA","UNITED STATES" -"3630094592","3630094847","CA","CAN","CANADA" -"3630094848","3630095015","US","USA","UNITED STATES" -"3630095016","3630095023","CA","CAN","CANADA" -"3630095024","3630095039","US","USA","UNITED STATES" -"3630095040","3630095047","CA","CAN","CANADA" -"3630095048","3630097663","US","USA","UNITED STATES" -"3630097664","3630098175","KW","KWT","KUWAIT" -"3630098176","3630098687","US","USA","UNITED STATES" -"3630098688","3630100223","CA","CAN","CANADA" -"3630100224","3630100479","KW","KWT","KUWAIT" -"3630100480","3630102783","US","USA","UNITED STATES" -"3630102784","3630103807","CA","CAN","CANADA" -"3630103808","3630141503","US","USA","UNITED STATES" -"3630141504","3630141567","CA","CAN","CANADA" -"3630141568","3630142463","US","USA","UNITED STATES" -"3630142464","3630143231","CA","CAN","CANADA" -"3630143232","3630143615","US","USA","UNITED STATES" -"3630143616","3630143647","CA","CAN","CANADA" -"3630143648","3630143711","US","USA","UNITED STATES" -"3630143712","3630143743","CA","CAN","CANADA" -"3630143744","3630144511","US","USA","UNITED STATES" -"3630144512","3630145023","CA","CAN","CANADA" -"3630145024","3630145535","US","USA","UNITED STATES" -"3630145536","3630145791","CA","CAN","CANADA" -"3630145792","3630146047","US","USA","UNITED STATES" -"3630146048","3630146815","CA","CAN","CANADA" -"3630146816","3630147327","US","USA","UNITED STATES" -"3630147328","3630147583","CA","CAN","CANADA" -"3630147584","3630149535","US","USA","UNITED STATES" -"3630149536","3630149567","CA","CAN","CANADA" -"3630149568","3630149631","US","USA","UNITED STATES" -"3630149632","3630149887","CA","CAN","CANADA" -"3630149888","3630150911","US","USA","UNITED STATES" -"3630150912","3630151167","CA","CAN","CANADA" -"3630151168","3630151455","US","USA","UNITED STATES" -"3630151456","3630151487","CA","CAN","CANADA" -"3630151488","3630151615","US","USA","UNITED STATES" -"3630151616","3630151647","CA","CAN","CANADA" -"3630151648","3630151679","US","USA","UNITED STATES" -"3630151680","3630152191","CA","CAN","CANADA" -"3630152192","3630152447","US","USA","UNITED STATES" -"3630152448","3630152703","CA","CAN","CANADA" -"3630152704","3630156031","US","USA","UNITED STATES" -"3630156032","3630156287","CA","CAN","CANADA" -"3630156288","3630156543","US","USA","UNITED STATES" -"3630156544","3630156799","CA","CAN","CANADA" -"3630156800","3630157055","US","USA","UNITED STATES" -"3630157056","3630157311","CA","CAN","CANADA" -"3630157312","3630157567","US","USA","UNITED STATES" -"3630157568","3630158087","CA","CAN","CANADA" -"3630158088","3630158231","US","USA","UNITED STATES" -"3630158232","3630158239","CA","CAN","CANADA" -"3630158240","3630158303","US","USA","UNITED STATES" -"3630158304","3630158311","CA","CAN","CANADA" -"3630158312","3630159007","US","USA","UNITED STATES" -"3630159008","3630159071","CA","CAN","CANADA" -"3630159072","3630159103","US","USA","UNITED STATES" -"3630159104","3630159359","CA","CAN","CANADA" -"3630159360","3630160487","US","USA","UNITED STATES" -"3630160488","3630160495","CA","CAN","CANADA" -"3630160496","3630160591","US","USA","UNITED STATES" -"3630160592","3630160599","CA","CAN","CANADA" -"3630160600","3630160607","US","USA","UNITED STATES" -"3630160608","3630160895","CA","CAN","CANADA" -"3630160896","3630161151","US","USA","UNITED STATES" -"3630161152","3630161919","CA","CAN","CANADA" -"3630161920","3630162687","US","USA","UNITED STATES" -"3630162688","3630162943","CA","CAN","CANADA" -"3630162944","3630163887","US","USA","UNITED STATES" -"3630163888","3630163895","CA","CAN","CANADA" -"3630163896","3630164223","US","USA","UNITED STATES" -"3630164224","3630164735","CA","CAN","CANADA" -"3630164736","3630164751","US","USA","UNITED STATES" -"3630164752","3630164767","CA","CAN","CANADA" -"3630164768","3630164783","US","USA","UNITED STATES" -"3630164784","3630164799","CA","CAN","CANADA" -"3630164800","3630164815","US","USA","UNITED STATES" -"3630164816","3630164831","CA","CAN","CANADA" -"3630164832","3630165247","US","USA","UNITED STATES" -"3630165248","3630165759","CA","CAN","CANADA" -"3630165760","3630166015","US","USA","UNITED STATES" -"3630166016","3630166527","CA","CAN","CANADA" -"3630166528","3630166687","US","USA","UNITED STATES" -"3630166688","3630166719","CA","CAN","CANADA" -"3630166720","3630167583","US","USA","UNITED STATES" -"3630167584","3630167615","CA","CAN","CANADA" -"3630167616","3630167711","US","USA","UNITED STATES" -"3630167712","3630167743","CA","CAN","CANADA" -"3630167744","3630167807","US","USA","UNITED STATES" -"3630167808","3630167823","CA","CAN","CANADA" -"3630167824","3630167903","US","USA","UNITED STATES" -"3630167904","3630167911","CA","CAN","CANADA" -"3630167912","3630168319","US","USA","UNITED STATES" -"3630168320","3630169087","CA","CAN","CANADA" -"3630169088","3630309375","US","USA","UNITED STATES" -"3630309376","3630317567","CA","CAN","CANADA" -"3630317568","3630370815","US","USA","UNITED STATES" -"3630372864","3630374911","US","USA","UNITED STATES" -"3630374912","3630383103","CA","CAN","CANADA" -"3630383104","3630391295","US","USA","UNITED STATES" -"3630391296","3630395391","CA","CAN","CANADA" -"3630395392","3630718975","US","USA","UNITED STATES" -"3630718976","3630727167","CA","CAN","CANADA" -"3630727168","3630746879","US","USA","UNITED STATES" -"3630746880","3630747391","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"3630747392","3630780415","US","USA","UNITED STATES" -"3630780416","3630784511","CA","CAN","CANADA" -"3630784512","3630850047","US","USA","UNITED STATES" -"3630850048","3630854143","CA","CAN","CANADA" -"3630854144","3630956543","US","USA","UNITED STATES" -"3630956544","3631005695","CA","CAN","CANADA" -"3631005696","3631039439","US","USA","UNITED STATES" -"3631039440","3631039455","CA","CAN","CANADA" -"3631039456","3631039487","US","USA","UNITED STATES" -"3631039488","3631039743","CA","CAN","CANADA" -"3631039744","3631043663","US","USA","UNITED STATES" -"3631043664","3631043679","CA","CAN","CANADA" -"3631043680","3631043759","US","USA","UNITED STATES" -"3631043760","3631043767","CA","CAN","CANADA" -"3631043768","3631045631","US","USA","UNITED STATES" -"3631045632","3631045759","CA","CAN","CANADA" -"3631045760","3631045983","US","USA","UNITED STATES" -"3631045984","3631045991","CA","CAN","CANADA" -"3631045992","3631112191","US","USA","UNITED STATES" -"3631112192","3631112703","VC","VCT","SAINT VINCENT AND THE GRENADINES" -"3631112704","3631116543","BB","BRB","BARBADOS" -"3631116544","3631117567","GD","GRD","GRENADA" -"3631117568","3631117823","BB","BRB","BARBADOS" -"3631117824","3631118079","GD","GRD","GRENADA" -"3631118080","3631119103","VC","VCT","SAINT VINCENT AND THE GRENADINES" -"3631119104","3631119615","BB","BRB","BARBADOS" -"3631119616","3631120383","GD","GRD","GRENADA" -"3631120384","3631144959","US","USA","UNITED STATES" -"3631144960","3631153151","CA","CAN","CANADA" -"3631153152","3631284223","US","USA","UNITED STATES" -"3631284224","3631316991","CA","CAN","CANADA" -"3631316992","3631333375","US","USA","UNITED STATES" -"3631333376","3631333679","CA","CAN","CANADA" -"3631333680","3631333695","US","USA","UNITED STATES" -"3631333696","3631341567","CA","CAN","CANADA" -"3631341568","3631480831","US","USA","UNITED STATES" -"3631480832","3631484927","CA","CAN","CANADA" -"3631484928","3631515647","US","USA","UNITED STATES" -"3631517696","3631644671","US","USA","UNITED STATES" -"3631644672","3631652863","CA","CAN","CANADA" -"3631652864","3631663151","US","USA","UNITED STATES" -"3631663152","3631663159","CA","CAN","CANADA" -"3631663160","3631665151","US","USA","UNITED STATES" -"3631665152","3631669247","CA","CAN","CANADA" -"3631669248","3631714303","US","USA","UNITED STATES" -"3631718400","3631841279","US","USA","UNITED STATES" -"3631841280","3631874047","CA","CAN","CANADA" -"3631874048","3631939583","US","USA","UNITED STATES" -"3631939584","3632005119","CA","CAN","CANADA" -"3632005120","3632136191","US","USA","UNITED STATES" -"3632144384","3632152575","US","USA","UNITED STATES" -"3632152576","3632168959","CA","CAN","CANADA" -"3632168960","3632197631","US","USA","UNITED STATES" -"3632197632","3632201727","CA","CAN","CANADA" -"3632201728","3632332799","US","USA","UNITED STATES" -"3632332800","3632357375","CA","CAN","CANADA" -"3632357376","3632381951","US","USA","UNITED STATES" -"3632381952","3632390143","CA","CAN","CANADA" -"3632390144","3632414719","US","USA","UNITED STATES" -"3632414720","3632422911","CA","CAN","CANADA" -"3632422912","3632447487","US","USA","UNITED STATES" -"3632455680","3632467967","US","USA","UNITED STATES" -"3632470016","3632826495","US","USA","UNITED STATES" -"3632826496","3632826511","CN","CHN","CHINA" -"3632826512","3632833231","US","USA","UNITED STATES" -"3632833232","3632833247","CN","CHN","CHINA" -"3632833248","3632837135","US","USA","UNITED STATES" -"3632837136","3632837151","IN","IND","INDIA" -"3632837152","3632838399","US","USA","UNITED STATES" -"3632838400","3632838431","TW","TWN","TAIWAN" -"3632838432","3632838583","US","USA","UNITED STATES" -"3632838584","3632838591","CN","CHN","CHINA" -"3632838592","3632847279","US","USA","UNITED STATES" -"3632847280","3632847295","CN","CHN","CHINA" -"3632847296","3632857087","US","USA","UNITED STATES" -"3632857088","3632861183","BS","BHS","BAHAMAS" -"3632861184","3632881663","US","USA","UNITED STATES" -"3632881664","3632889855","CA","CAN","CANADA" -"3632889856","3632898047","US","USA","UNITED STATES" -"3632898048","3632902143","CA","CAN","CANADA" -"3632902144","3632971775","US","USA","UNITED STATES" -"3632971776","3632988159","CA","CAN","CANADA" -"3632988160","3633030159","US","USA","UNITED STATES" -"3633030160","3633030167","ZA","ZAF","SOUTH AFRICA" -"3633030168","3633030175","US","USA","UNITED STATES" -"3633030176","3633030183","ZA","ZAF","SOUTH AFRICA" -"3633030184","3633030191","US","USA","UNITED STATES" -"3633030192","3633030199","ZA","ZAF","SOUTH AFRICA" -"3633030200","3633030207","US","USA","UNITED STATES" -"3633030208","3633030215","ZA","ZAF","SOUTH AFRICA" -"3633030216","3633030223","NG","NGA","NIGERIA" -"3633030224","3633030231","ZA","ZAF","SOUTH AFRICA" -"3633030232","3633030287","US","USA","UNITED STATES" -"3633030288","3633030303","ZA","ZAF","SOUTH AFRICA" -"3633030304","3633030335","US","USA","UNITED STATES" -"3633030336","3633030359","ZA","ZAF","SOUTH AFRICA" -"3633030360","3633030655","US","USA","UNITED STATES" -"3633030656","3633030911","SN","SEN","SENEGAL" -"3633030912","3633031615","US","USA","UNITED STATES" -"3633031616","3633031623","ZA","ZAF","SOUTH AFRICA" -"3633031624","3633031647","US","USA","UNITED STATES" -"3633031648","3633031655","NG","NGA","NIGERIA" -"3633031656","3633031959","US","USA","UNITED STATES" -"3633031960","3633031967","NL","NLD","NETHERLANDS" -"3633031968","3633031983","US","USA","UNITED STATES" -"3633031984","3633031991","PG","PNG","PAPUA NEW GUINEA" -"3633031992","3633032087","US","USA","UNITED STATES" -"3633032088","3633032095","NL","NLD","NETHERLANDS" -"3633032096","3633032167","US","USA","UNITED STATES" -"3633032168","3633032175","NL","NLD","NETHERLANDS" -"3633032176","3633032223","US","USA","UNITED STATES" -"3633032224","3633032231","NG","NGA","NIGERIA" -"3633032232","3633032239","US","USA","UNITED STATES" -"3633032240","3633032247","ZA","ZAF","SOUTH AFRICA" -"3633032248","3633032271","US","USA","UNITED STATES" -"3633032272","3633032279","ZA","ZAF","SOUTH AFRICA" -"3633032280","3633032287","US","USA","UNITED STATES" -"3633032288","3633032319","GQ","GNQ","EQUATORIAL GUINEA" -"3633032320","3633032415","US","USA","UNITED STATES" -"3633032416","3633032431","NG","NGA","NIGERIA" -"3633032432","3633032439","US","USA","UNITED STATES" -"3633032440","3633032447","ZA","ZAF","SOUTH AFRICA" -"3633032448","3633032591","US","USA","UNITED STATES" -"3633032592","3633032607","ZA","ZAF","SOUTH AFRICA" -"3633032608","3633033247","US","USA","UNITED STATES" -"3633033248","3633033255","ZA","ZAF","SOUTH AFRICA" -"3633033256","3633033263","US","USA","UNITED STATES" -"3633033264","3633033271","ZA","ZAF","SOUTH AFRICA" -"3633033272","3633033287","US","USA","UNITED STATES" -"3633033288","3633033295","GH","GHA","GHANA" -"3633033296","3633033303","NG","NGA","NIGERIA" -"3633033304","3633033319","ZA","ZAF","SOUTH AFRICA" -"3633033320","3633033327","NG","NGA","NIGERIA" -"3633033328","3633033335","US","USA","UNITED STATES" -"3633033336","3633033359","ZA","ZAF","SOUTH AFRICA" -"3633033360","3633033367","NG","NGA","NIGERIA" -"3633033368","3633033375","ZA","ZAF","SOUTH AFRICA" -"3633033376","3633033391","NG","NGA","NIGERIA" -"3633033392","3633033399","ZA","ZAF","SOUTH AFRICA" -"3633033400","3633034047","US","USA","UNITED STATES" -"3633034048","3633034079","ZA","ZAF","SOUTH AFRICA" -"3633034080","3633034519","US","USA","UNITED STATES" -"3633034520","3633034527","NG","NGA","NIGERIA" -"3633034528","3633034559","US","USA","UNITED STATES" -"3633034560","3633034751","NG","NGA","NIGERIA" -"3633034752","3633035015","US","USA","UNITED STATES" -"3633035016","3633035023","NL","NLD","NETHERLANDS" -"3633035024","3633035071","US","USA","UNITED STATES" -"3633035072","3633035087","NR","NRU","NAURU" -"3633035088","3633035095","CN","CHN","CHINA" -"3633035096","3633035135","US","USA","UNITED STATES" -"3633035136","3633035151","NR","NRU","NAURU" -"3633035152","3633035199","US","USA","UNITED STATES" -"3633035200","3633035207","ID","IDN","INDONESIA" -"3633035208","3633035311","US","USA","UNITED STATES" -"3633035312","3633035319","ID","IDN","INDONESIA" -"3633035320","3633035439","US","USA","UNITED STATES" -"3633035440","3633035447","ID","IDN","INDONESIA" -"3633035448","3633035455","US","USA","UNITED STATES" -"3633035456","3633035487","ID","IDN","INDONESIA" -"3633035488","3633035527","US","USA","UNITED STATES" -"3633035528","3633035535","NG","NGA","NIGERIA" -"3633035536","3633035551","US","USA","UNITED STATES" -"3633035552","3633035599","ZA","ZAF","SOUTH AFRICA" -"3633035600","3633036031","US","USA","UNITED STATES" -"3633036032","3633036287","HT","HTI","HAITI" -"3633036288","3633036479","US","USA","UNITED STATES" -"3633036480","3633036511","TT","TTO","TRINIDAD AND TOBAGO" -"3633036512","3633036607","US","USA","UNITED STATES" -"3633036608","3633036671","GB","GBR","UNITED KINGDOM" -"3633036672","3633039503","US","USA","UNITED STATES" -"3633039504","3633039519","CA","CAN","CANADA" -"3633039520","3633336319","US","USA","UNITED STATES" -"3633336320","3633340415","KY","CYM","CAYMAN ISLANDS" -"3633340416","3633344511","US","USA","UNITED STATES" -"3633344512","3633348607","CA","CAN","CANADA" -"3633348608","3633377279","US","USA","UNITED STATES" -"3633381376","3633405951","US","USA","UNITED STATES" -"3633405952","3633410047","CA","CAN","CANADA" -"3633410048","3633479679","US","USA","UNITED STATES" -"3633479680","3633483775","CA","CAN","CANADA" -"3633483776","3633545215","US","USA","UNITED STATES" -"3633545216","3633545727","GA","GAB","GABON" -"3633545728","3633546239","US","USA","UNITED STATES" -"3633546240","3633546751","GA","GAB","GABON" -"3633546752","3633547263","US","USA","UNITED STATES" -"3633547264","3633548287","GA","GAB","GABON" -"3633548288","3633548543","US","USA","UNITED STATES" -"3633548544","3633548799","GA","GAB","GABON" -"3633548800","3633548927","US","USA","UNITED STATES" -"3633548928","3633549055","GA","GAB","GABON" -"3633549056","3633549567","US","USA","UNITED STATES" -"3633549568","3633549823","GA","GAB","GABON" -"3633549824","3633550847","US","USA","UNITED STATES" -"3633550848","3633551359","GA","GAB","GABON" -"3633551360","3633552911","US","USA","UNITED STATES" -"3633552912","3633552927","GA","GAB","GABON" -"3633552928","3633553151","US","USA","UNITED STATES" -"3633553152","3633553279","GW","GNB","GUINEA-BISSAU" -"3633553280","3633783295","US","USA","UNITED STATES" -"3633783552","3633783807","US","USA","UNITED STATES" -"3633784064","3633784319","US","USA","UNITED STATES" -"3633784576","3633785087","US","USA","UNITED STATES" -"3633785600","3633786367","US","USA","UNITED STATES" -"3633786880","3633815551","US","USA","UNITED STATES" -"3633815552","3633819647","CA","CAN","CANADA" -"3633819648","3633881087","US","USA","UNITED STATES" -"3633881088","3633885183","AN","ANT","NETHERLANDS ANTILLES" -"3633885184","3633889279","US","USA","UNITED STATES" -"3633889280","3633893375","CA","CAN","CANADA" -"3633893376","3633971199","US","USA","UNITED STATES" -"3633971200","3634020351","CA","CAN","CANADA" -"3634020352","3634053119","US","USA","UNITED STATES" -"3634053120","3634061311","CL","CHL","CHILE" -"3634061312","3634094079","US","USA","UNITED STATES" -"3634094080","3634098175","SE","SWE","SWEDEN" -"3634098176","3634511871","US","USA","UNITED STATES" -"3634511872","3634515967","CA","CAN","CANADA" -"3634515968","3634524159","US","USA","UNITED STATES" -"3634528256","3634552831","US","USA","UNITED STATES" -"3634552832","3634556927","CA","CAN","CANADA" -"3634556928","3634597887","US","USA","UNITED STATES" -"3634601984","3634741247","US","USA","UNITED STATES" -"3634749440","3634880511","US","USA","UNITED STATES" -"3634880512","3634888703","CA","CAN","CANADA" -"3634888704","3634913279","US","USA","UNITED STATES" -"3634913280","3634921471","CA","CAN","CANADA" -"3634921472","3634925567","US","USA","UNITED STATES" -"3634925568","3634929663","CA","CAN","CANADA" -"3634929664","3635109887","US","USA","UNITED STATES" -"3635109888","3635110295","CA","CAN","CANADA" -"3635110296","3635110303","US","USA","UNITED STATES" -"3635110304","3635113983","CA","CAN","CANADA" -"3635113984","3635142655","US","USA","UNITED STATES" -"3635142656","3635146751","CA","CAN","CANADA" -"3635146752","3635150847","US","USA","UNITED STATES" -"3635216384","3635314687","US","USA","UNITED STATES" -"3635314688","3635322879","CA","CAN","CANADA" -"3635322880","3635425279","US","USA","UNITED STATES" -"3635425280","3635429375","CA","CAN","CANADA" -"3635429376","3635458527","US","USA","UNITED STATES" -"3635458528","3635458543","CH","CHE","SWITZERLAND" -"3635458544","3635460031","US","USA","UNITED STATES" -"3635460032","3635460095","CH","CHE","SWITZERLAND" -"3635460096","3635460543","US","USA","UNITED STATES" -"3635460544","3635460575","CH","CHE","SWITZERLAND" -"3635460576","3635460799","US","USA","UNITED STATES" -"3635460800","3635460831","CH","CHE","SWITZERLAND" -"3635460832","3635466239","US","USA","UNITED STATES" -"3635466240","3635470335","CA","CAN","CANADA" -"3635470336","3635658751","US","USA","UNITED STATES" -"3635658752","3635660799","CN","CHN","CHINA" -"3635660800","3635847791","US","USA","UNITED STATES" -"3635847792","3635847807","CA","CAN","CANADA" -"3635847808","3635856511","US","USA","UNITED STATES" -"3635856512","3635856543","CA","CAN","CANADA" -"3635856544","3635871743","US","USA","UNITED STATES" -"3635871744","3635879935","CA","CAN","CANADA" -"3635879936","3635892223","US","USA","UNITED STATES" -"3635892224","3635896319","CA","CAN","CANADA" -"3635896320","3635904511","US","USA","UNITED STATES" -"3635904512","3635912703","CA","CAN","CANADA" -"3635912704","3635945471","US","USA","UNITED STATES" -"3635949568","3635961855","US","USA","UNITED STATES" -"3635961856","3635963903","SV","SLV","EL SALVADOR" -"3635963904","3635964159","US","USA","UNITED STATES" -"3635964160","3635964415","BO","BOL","BOLIVIA" -"3635964416","3635965951","SV","SLV","EL SALVADOR" -"3635965952","3635966975","BO","BOL","BOLIVIA" -"3635966976","3635967999","PY","PRY","PARAGUAY" -"3635968000","3635970047","SV","SLV","EL SALVADOR" -"3635970048","3636019199","US","USA","UNITED STATES" -"3636019200","3636027391","CA","CAN","CANADA" -"3636027392","3636064255","US","USA","UNITED STATES" -"3636064256","3636068351","CA","CAN","CANADA" -"3636068352","3636152287","US","USA","UNITED STATES" -"3636152288","3636152575","CA","CAN","CANADA" -"3636152576","3636154111","US","USA","UNITED STATES" -"3636154112","3636154879","CA","CAN","CANADA" -"3636154880","3636155903","US","USA","UNITED STATES" -"3636155904","3636156159","CA","CAN","CANADA" -"3636156160","3636157055","US","USA","UNITED STATES" -"3636157056","3636157063","CA","CAN","CANADA" -"3636157064","3636158111","US","USA","UNITED STATES" -"3636158112","3636158143","CA","CAN","CANADA" -"3636158144","3636158463","US","USA","UNITED STATES" -"3636158464","3636158719","CA","CAN","CANADA" -"3636158720","3636158783","US","USA","UNITED STATES" -"3636158784","3636158815","CA","CAN","CANADA" -"3636158816","3636160511","US","USA","UNITED STATES" -"3636160512","3636160767","CA","CAN","CANADA" -"3636160768","3636161791","US","USA","UNITED STATES" -"3636161792","3636161855","CA","CAN","CANADA" -"3636161856","3636164095","US","USA","UNITED STATES" -"3636164096","3636164111","VG","VGB","VIRGIN ISLANDS, BRITISH" -"3636164112","3636164159","US","USA","UNITED STATES" -"3636164160","3636164223","CA","CAN","CANADA" -"3636164224","3636166143","US","USA","UNITED STATES" -"3636166144","3636166655","CA","CAN","CANADA" -"3636166656","3636206079","US","USA","UNITED STATES" -"3636206080","3636206335","AU","AUS","AUSTRALIA" -"3636206336","3636396031","US","USA","UNITED STATES" -"3636396032","3636461567","CA","CAN","CANADA" -"3636461568","3636609023","US","USA","UNITED STATES" -"3636609024","3636610559","CA","CAN","CANADA" -"3636610560","3636610815","US","USA","UNITED STATES" -"3636610816","3636621311","CA","CAN","CANADA" -"3636621312","3636822015","US","USA","UNITED STATES" -"3636822016","3636854783","CA","CAN","CANADA" -"3636854784","3636887551","US","USA","UNITED STATES" -"3636887552","3636895743","CA","CAN","CANADA" -"3636895744","3637071935","US","USA","UNITED STATES" -"3637071936","3637071943","SK","SVK","SLOVAKIA" -"3637071944","3637071951","US","USA","UNITED STATES" -"3637071952","3637071967","CY","CYP","CYPRUS" -"3637071968","3637072095","US","USA","UNITED STATES" -"3637072096","3637072127","GB","GBR","UNITED KINGDOM" -"3637072128","3637072143","US","USA","UNITED STATES" -"3637072144","3637072159","CY","CYP","CYPRUS" -"3637072160","3637072895","US","USA","UNITED STATES" -"3637072896","3637073151","CY","CYP","CYPRUS" -"3637073152","3637073215","US","USA","UNITED STATES" -"3637073216","3637073231","CY","CYP","CYPRUS" -"3637073232","3637074239","US","USA","UNITED STATES" -"3637074240","3637074303","PA","PAN","PANAMA" -"3637074304","3637074687","US","USA","UNITED STATES" -"3637074688","3637074703","CA","CAN","CANADA" -"3637074704","3637074751","US","USA","UNITED STATES" -"3637074752","3637074815","PA","PAN","PANAMA" -"3637074816","3637074943","US","USA","UNITED STATES" -"3637074944","3637074959","CA","CAN","CANADA" -"3637074960","3637074975","US","USA","UNITED STATES" -"3637074976","3637075007","PA","PAN","PANAMA" -"3637075008","3637075231","US","USA","UNITED STATES" -"3637075232","3637075263","PA","PAN","PANAMA" -"3637075264","3637075487","US","USA","UNITED STATES" -"3637075488","3637075519","PA","PAN","PANAMA" -"3637075520","3637075743","US","USA","UNITED STATES" -"3637075744","3637075775","PA","PAN","PANAMA" -"3637075776","3637075967","US","USA","UNITED STATES" -"3637075968","3637080063","CA","CAN","CANADA" -"3637080064","3637389335","US","USA","UNITED STATES" -"3637389336","3637389343","CA","CAN","CANADA" -"3637389344","3637469439","US","USA","UNITED STATES" -"3637469440","3637469695","GE","GEO","GEORGIA" -"3637469696","3637510143","US","USA","UNITED STATES" -"3637510144","3637641215","CA","CAN","CANADA" -"3637641216","3637661695","US","USA","UNITED STATES" -"3637665792","3637667439","CA","CAN","CANADA" -"3637667440","3637667518","US","USA","UNITED STATES" -"3637667519","3637669887","CA","CAN","CANADA" -"3637669888","3637706751","US","USA","UNITED STATES" -"3637706752","3637739519","CA","CAN","CANADA" -"3637739520","3637827327","US","USA","UNITED STATES" -"3637827328","3637827583","VI","VIR","VIRGIN ISLANDS, U.S." -"3637827584","3638165503","US","USA","UNITED STATES" -"3638165504","3638181887","CA","CAN","CANADA" -"3638181888","3638231039","US","USA","UNITED STATES" -"3638247424","3638247439","US","USA","UNITED STATES" -"3638247440","3638247455","GB","GBR","UNITED KINGDOM" -"3638247456","3638247487","US","USA","UNITED STATES" -"3638247488","3638247551","GB","GBR","UNITED KINGDOM" -"3638247552","3638247679","DE","DEU","GERMANY" -"3638247680","3638247855","US","USA","UNITED STATES" -"3638247856","3638247871","DE","DEU","GERMANY" -"3638247872","3638247903","US","USA","UNITED STATES" -"3638247904","3638248703","GB","GBR","UNITED KINGDOM" -"3638248704","3638249215","FR","FRA","FRANCE" -"3638249216","3638249471","GB","GBR","UNITED KINGDOM" -"3638249472","3638249751","US","USA","UNITED STATES" -"3638249752","3638249791","GB","GBR","UNITED KINGDOM" -"3638249792","3638250535","US","USA","UNITED STATES" -"3638250536","3638250543","GB","GBR","UNITED KINGDOM" -"3638250544","3638250559","US","USA","UNITED STATES" -"3638250560","3638250623","GB","GBR","UNITED KINGDOM" -"3638250624","3638250687","US","USA","UNITED STATES" -"3638250688","3638250703","GB","GBR","UNITED KINGDOM" -"3638250704","3638250719","US","USA","UNITED STATES" -"3638250720","3638250815","GB","GBR","UNITED KINGDOM" -"3638250816","3638250831","US","USA","UNITED STATES" -"3638250832","3638250847","GB","GBR","UNITED KINGDOM" -"3638250848","3638250863","US","USA","UNITED STATES" -"3638250864","3638250871","GB","GBR","UNITED KINGDOM" -"3638250872","3638250895","US","USA","UNITED STATES" -"3638250896","3638250911","GB","GBR","UNITED KINGDOM" -"3638250912","3638250919","CH","CHE","SWITZERLAND" -"3638250920","3638250983","US","USA","UNITED STATES" -"3638250984","3638250991","GB","GBR","UNITED KINGDOM" -"3638250992","3638304767","US","USA","UNITED STATES" -"3638304768","3638312959","CA","CAN","CANADA" -"3638312960","3638370303","US","USA","UNITED STATES" -"3638370304","3638386687","CA","CAN","CANADA" -"3638386688","3638398975","US","USA","UNITED STATES" -"3638403072","3638419455","US","USA","UNITED STATES" -"3638423552","3638509567","US","USA","UNITED STATES" -"3638509568","3638534143","CA","CAN","CANADA" -"3638534144","3638697983","US","USA","UNITED STATES" -"3638697984","3638706175","CA","CAN","CANADA" -"3638706176","3638738943","US","USA","UNITED STATES" -"3638740992","3638874111","US","USA","UNITED STATES" -"3638874112","3638878207","CA","CAN","CANADA" -"3638878208","3638960383","US","USA","UNITED STATES" -"3638960384","3638960639","BR","BRA","BRAZIL" -"3638960640","3638984703","US","USA","UNITED STATES" -"3638984704","3638992895","GT","GTM","GUATEMALA" -"3638992896","3639083007","US","USA","UNITED STATES" -"3639083008","3639148543","CA","CAN","CANADA" -"3639148544","3639222271","US","USA","UNITED STATES" -"3639222272","3639230463","CA","CAN","CANADA" -"3639230464","3639255039","US","USA","UNITED STATES" -"3639255040","3639258677","CA","CAN","CANADA" -"3639258678","3639258678","IL","ISR","ISRAEL" -"3639258679","3639263231","CA","CAN","CANADA" -"3639263232","3639279615","US","USA","UNITED STATES" -"3639279616","3639283711","CA","CAN","CANADA" -"3639283712","3639376383","US","USA","UNITED STATES" -"3639376384","3639377407","GU","GUM","GUAM" -"3639377408","3639390207","US","USA","UNITED STATES" -"3639394304","3639396351","US","USA","UNITED STATES" -"3639396352","3639396383","NE","NER","NIGER" -"3639396384","3639396415","US","USA","UNITED STATES" -"3639396416","3639396431","PK","PAK","PAKISTAN" -"3639396432","3639396447","US","USA","UNITED STATES" -"3639396448","3639396463","NG","NGA","NIGERIA" -"3639396464","3639396471","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"3639396472","3639396543","US","USA","UNITED STATES" -"3639396544","3639396551","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"3639396552","3639396671","US","USA","UNITED STATES" -"3639396672","3639396735","NE","NER","NIGER" -"3639396736","3639396863","US","USA","UNITED STATES" -"3639396864","3639396879","NE","NER","NIGER" -"3639396880","3639396927","US","USA","UNITED STATES" -"3639396928","3639396959","FR","FRA","FRANCE" -"3639396960","3639396975","NG","NGA","NIGERIA" -"3639396976","3639396991","US","USA","UNITED STATES" -"3639396992","3639397023","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"3639397024","3639397119","US","USA","UNITED STATES" -"3639397120","3639397375","IN","IND","INDIA" -"3639397376","3639397631","US","USA","UNITED STATES" -"3639397632","3639397887","NG","NGA","NIGERIA" -"3639397888","3639398527","US","USA","UNITED STATES" -"3639398528","3639398591","SA","SAU","SAUDI ARABIA" -"3639398592","3639400447","US","USA","UNITED STATES" -"3639400448","3639401471","RS","SRB","SERBIA" -"3639401472","3639401495","PK","PAK","PAKISTAN" -"3639401496","3639401511","US","USA","UNITED STATES" -"3639401512","3639401519","ID","IDN","INDONESIA" -"3639401520","3639401535","US","USA","UNITED STATES" -"3639401536","3639401551","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"3639401552","3639401559","LK","LKA","SRI LANKA" -"3639401560","3639401623","US","USA","UNITED STATES" -"3639401624","3639401631","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"3639401632","3639401647","US","USA","UNITED STATES" -"3639401648","3639401655","PK","PAK","PAKISTAN" -"3639401656","3639401687","US","USA","UNITED STATES" -"3639401688","3639401727","PK","PAK","PAKISTAN" -"3639401728","3639402015","US","USA","UNITED STATES" -"3639402016","3639402039","PK","PAK","PAKISTAN" -"3639402040","3639402055","US","USA","UNITED STATES" -"3639402056","3639402071","PK","PAK","PAKISTAN" -"3639402072","3639402079","US","USA","UNITED STATES" -"3639402080","3639402095","PK","PAK","PAKISTAN" -"3639402096","3639402111","US","USA","UNITED STATES" -"3639402112","3639402175","NG","NGA","NIGERIA" -"3639402176","3639402191","PK","PAK","PAKISTAN" -"3639402192","3639402199","US","USA","UNITED STATES" -"3639402200","3639402207","PK","PAK","PAKISTAN" -"3639402208","3639402239","US","USA","UNITED STATES" -"3639402240","3639402495","GH","GHA","GHANA" -"3639402496","3639558143","US","USA","UNITED STATES" -"3639558144","3639566335","CA","CAN","CANADA" -"3639566336","3639582719","US","USA","UNITED STATES" -"3639590912","3639607295","US","USA","UNITED STATES" -"3639607296","3639611391","CA","CAN","CANADA" -"3639611392","3639656447","US","USA","UNITED STATES" -"3639656448","3639660543","CA","CAN","CANADA" -"3639660544","3639664639","US","USA","UNITED STATES" -"3639664640","3639668735","CA","CAN","CANADA" -"3639668736","3639672831","US","USA","UNITED STATES" -"3639672832","3639675391","CL","CHL","CHILE" -"3639675392","3639676159","CO","COL","COLOMBIA" -"3639676160","3639676927","CL","CHL","CHILE" -"3639676928","3639676943","CO","COL","COLOMBIA" -"3639676944","3639677023","CL","CHL","CHILE" -"3639677024","3639677031","CO","COL","COLOMBIA" -"3639677032","3639677103","CL","CHL","CHILE" -"3639677104","3639677111","CO","COL","COLOMBIA" -"3639677112","3639677423","CL","CHL","CHILE" -"3639677424","3639677431","CO","COL","COLOMBIA" -"3639677432","3639677455","CL","CHL","CHILE" -"3639677456","3639677487","CO","COL","COLOMBIA" -"3639677488","3639677711","CL","CHL","CHILE" -"3639677712","3639677719","CO","COL","COLOMBIA" -"3639677720","3639677791","CL","CHL","CHILE" -"3639677792","3639677823","CO","COL","COLOMBIA" -"3639677824","3639677871","CL","CHL","CHILE" -"3639677872","3639677879","CO","COL","COLOMBIA" -"3639677880","3639677959","CL","CHL","CHILE" -"3639677960","3639677967","CO","COL","COLOMBIA" -"3639677968","3639677983","CL","CHL","CHILE" -"3639677984","3639677991","CO","COL","COLOMBIA" -"3639677992","3639678007","CL","CHL","CHILE" -"3639678008","3639678023","CO","COL","COLOMBIA" -"3639678024","3639678055","CL","CHL","CHILE" -"3639678056","3639678063","CO","COL","COLOMBIA" -"3639678064","3639678071","CL","CHL","CHILE" -"3639678072","3639678087","CO","COL","COLOMBIA" -"3639678088","3639678119","CL","CHL","CHILE" -"3639678120","3639678127","CO","COL","COLOMBIA" -"3639678128","3639678143","CL","CHL","CHILE" -"3639678144","3639678159","CO","COL","COLOMBIA" -"3639678160","3639678167","CL","CHL","CHILE" -"3639678168","3639678175","CO","COL","COLOMBIA" -"3639678176","3639678191","CL","CHL","CHILE" -"3639678192","3639678199","CO","COL","COLOMBIA" -"3639678200","3639678527","CL","CHL","CHILE" -"3639678528","3639678535","CO","COL","COLOMBIA" -"3639678536","3639678583","CL","CHL","CHILE" -"3639678584","3639678591","CO","COL","COLOMBIA" -"3639678592","3639678639","CL","CHL","CHILE" -"3639678640","3639678647","CO","COL","COLOMBIA" -"3639678648","3639678663","CL","CHL","CHILE" -"3639678664","3639678671","CO","COL","COLOMBIA" -"3639678672","3639678783","CL","CHL","CHILE" -"3639678784","3639678791","CO","COL","COLOMBIA" -"3639678792","3639678799","CL","CHL","CHILE" -"3639678800","3639678815","CO","COL","COLOMBIA" -"3639678816","3639678823","CL","CHL","CHILE" -"3639678824","3639678831","CO","COL","COLOMBIA" -"3639678832","3639678839","CL","CHL","CHILE" -"3639678840","3639678855","CO","COL","COLOMBIA" -"3639678856","3639678887","CL","CHL","CHILE" -"3639678888","3639678895","CO","COL","COLOMBIA" -"3639678896","3639678911","CL","CHL","CHILE" -"3639678912","3639678919","CO","COL","COLOMBIA" -"3639678920","3639678935","CL","CHL","CHILE" -"3639678936","3639678951","CO","COL","COLOMBIA" -"3639678952","3639678975","CL","CHL","CHILE" -"3639678976","3639679231","CO","COL","COLOMBIA" -"3639679232","3639679247","CL","CHL","CHILE" -"3639679248","3639679263","CO","COL","COLOMBIA" -"3639679264","3639679383","CL","CHL","CHILE" -"3639679384","3639679391","CO","COL","COLOMBIA" -"3639679392","3639679415","CL","CHL","CHILE" -"3639679416","3639679423","CO","COL","COLOMBIA" -"3639679424","3639679447","CL","CHL","CHILE" -"3639679448","3639679455","CO","COL","COLOMBIA" -"3639679456","3639679487","CL","CHL","CHILE" -"3639679488","3639679743","CO","COL","COLOMBIA" -"3639679744","3639680271","CL","CHL","CHILE" -"3639680272","3639680311","CO","COL","COLOMBIA" -"3639680312","3639680319","CL","CHL","CHILE" -"3639680320","3639680335","CO","COL","COLOMBIA" -"3639680336","3639680383","CL","CHL","CHILE" -"3639680384","3639680415","CO","COL","COLOMBIA" -"3639680416","3639680431","CL","CHL","CHILE" -"3639680432","3639680447","CO","COL","COLOMBIA" -"3639680448","3639680767","CL","CHL","CHILE" -"3639680768","3639680799","CO","COL","COLOMBIA" -"3639680800","3639680831","CL","CHL","CHILE" -"3639680832","3639680847","CO","COL","COLOMBIA" -"3639680848","3639680871","CL","CHL","CHILE" -"3639680872","3639680879","CO","COL","COLOMBIA" -"3639680880","3639680887","CL","CHL","CHILE" -"3639680888","3639680895","CO","COL","COLOMBIA" -"3639680896","3639680967","CL","CHL","CHILE" -"3639680968","3639680991","CO","COL","COLOMBIA" -"3639680992","3639681023","CL","CHL","CHILE" -"3639681024","3639730175","US","USA","UNITED STATES" -"3639730176","3639734271","CA","CAN","CANADA" -"3639734272","3639865343","US","USA","UNITED STATES" -"3639869440","3639886095","US","USA","UNITED STATES" -"3639886096","3639886103","CN","CHN","CHINA" -"3639886104","3639902207","US","USA","UNITED STATES" -"3639902208","3639903755","PE","PER","PERU" -"3639903756","3639903759","PA","PAN","PANAMA" -"3639903760","3639904031","PE","PER","PERU" -"3639904032","3639904035","CL","CHL","CHILE" -"3639904036","3639912127","PE","PER","PERU" -"3639912128","3639912143","CL","CHL","CHILE" -"3639912144","3639914767","PE","PER","PERU" -"3639914768","3639914775","PA","PAN","PANAMA" -"3639914776","3639918591","PE","PER","PERU" -"3639918592","3639934975","AR","ARG","ARGENTINA" -"3639934976","3640057855","US","USA","UNITED STATES" -"3640057856","3640066047","CA","CAN","CANADA" -"3640066048","3640197119","US","USA","UNITED STATES" -"3640197120","3640201215","CA","CAN","CANADA" -"3640201216","3640205311","US","USA","UNITED STATES" -"3640205312","3640209407","BM","BMU","BERMUDA" -"3640209408","3640213503","CA","CAN","CANADA" -"3640213504","3640287231","US","USA","UNITED STATES" -"3640287232","3640291327","CA","CAN","CANADA" -"3640295424","3640312079","US","USA","UNITED STATES" -"3640312080","3640312095","ID","IDN","INDONESIA" -"3640312096","3640312103","GB","GBR","UNITED KINGDOM" -"3640312104","3640312159","US","USA","UNITED STATES" -"3640312160","3640312191","ID","IDN","INDONESIA" -"3640312192","3640312575","US","USA","UNITED STATES" -"3640312576","3640312607","NG","NGA","NIGERIA" -"3640312608","3640314879","US","USA","UNITED STATES" -"3640314880","3640315135","ZA","ZAF","SOUTH AFRICA" -"3640315136","3640317327","US","USA","UNITED STATES" -"3640317328","3640317343","ZA","ZAF","SOUTH AFRICA" -"3640317344","3640317407","US","USA","UNITED STATES" -"3640317408","3640317423","ZA","ZAF","SOUTH AFRICA" -"3640317424","3640317559","US","USA","UNITED STATES" -"3640317560","3640317567","NL","NLD","NETHERLANDS" -"3640317568","3640318975","US","USA","UNITED STATES" -"3640318976","3640319103","GQ","GNQ","EQUATORIAL GUINEA" -"3640319104","3640360959","US","USA","UNITED STATES" -"3640360960","3640369151","CA","CAN","CANADA" -"3640369152","3640377343","US","USA","UNITED STATES" -"3640381440","3640410111","US","USA","UNITED STATES" -"3640410112","3640418303","CA","CAN","CANADA" -"3640418304","3640434943","US","USA","UNITED STATES" -"3640438784","3640442879","US","USA","UNITED STATES" -"3640449024","3640450047","US","USA","UNITED STATES" -"3640451072","3640557567","US","USA","UNITED STATES" -"3640557568","3640582143","CA","CAN","CANADA" -"3640582144","3640635391","US","USA","UNITED STATES" -"3640639488","3640647679","US","USA","UNITED STATES" -"3640647680","3640651775","JP","JPN","JAPAN" -"3640651776","3640655871","US","USA","UNITED STATES" -"3640655872","3641056319","DE","DEU","GERMANY" -"3641056320","3641056327","HU","HUN","HUNGARY" -"3641056328","3641056359","DE","DEU","GERMANY" -"3641056360","3641056367","AT","AUT","AUSTRIA" -"3641056368","3641056375","PL","POL","POLAND" -"3641056376","3641057655","DE","DEU","GERMANY" -"3641057656","3641057663","CZ","CZE","CZECH REPUBLIC" -"3641057664","3641078559","DE","DEU","GERMANY" -"3641078560","3641078567","BE","BEL","BELGIUM" -"3641078568","3641085687","DE","DEU","GERMANY" -"3641085688","3641085695","CZ","CZE","CZECH REPUBLIC" -"3641085696","3641087695","DE","DEU","GERMANY" -"3641087696","3641087703","GB","GBR","UNITED KINGDOM" -"3641087704","3641098191","DE","DEU","GERMANY" -"3641098192","3641098207","ES","ESP","SPAIN" -"3641098208","3641102607","DE","DEU","GERMANY" -"3641102608","3641102615","FR","FRA","FRANCE" -"3641102616","3641103719","DE","DEU","GERMANY" -"3641103720","3641103727","HU","HUN","HUNGARY" -"3641103728","3641106951","DE","DEU","GERMANY" -"3641106952","3641106959","CH","CHE","SWITZERLAND" -"3641106960","3641114031","DE","DEU","GERMANY" -"3641114032","3641114039","SK","SVK","SLOVAKIA" -"3641114040","3641134367","DE","DEU","GERMANY" -"3641134368","3641134375","BE","BEL","BELGIUM" -"3641134376","3641140671","DE","DEU","GERMANY" -"3641140672","3641140679","US","USA","UNITED STATES" -"3641140680","3641147519","DE","DEU","GERMANY" -"3641147520","3641147527","AT","AUT","AUSTRIA" -"3641147528","3641150303","DE","DEU","GERMANY" -"3641150304","3641150311","US","USA","UNITED STATES" -"3641150312","3641157951","DE","DEU","GERMANY" -"3641157952","3641157959","AT","AUT","AUSTRIA" -"3641157960","3641158031","DE","DEU","GERMANY" -"3641158032","3641158055","FR","FRA","FRANCE" -"3641158056","3641158103","DE","DEU","GERMANY" -"3641158104","3641158111","FR","FRA","FRANCE" -"3641158112","3641158127","DE","DEU","GERMANY" -"3641158128","3641158135","ES","ESP","SPAIN" -"3641158136","3641158199","DE","DEU","GERMANY" -"3641158200","3641158207","NL","NLD","NETHERLANDS" -"3641158208","3641158335","DE","DEU","GERMANY" -"3641158336","3641158343","ES","ESP","SPAIN" -"3641158344","3641158423","DE","DEU","GERMANY" -"3641158424","3641158431","IT","ITA","ITALY" -"3641158432","3641158519","DE","DEU","GERMANY" -"3641158520","3641158527","ES","ESP","SPAIN" -"3641158528","3641159679","DE","DEU","GERMANY" -"3641159680","3641159687","ES","ESP","SPAIN" -"3641159688","3641159727","DE","DEU","GERMANY" -"3641159728","3641159743","ES","ESP","SPAIN" -"3641159744","3641159767","DE","DEU","GERMANY" -"3641159768","3641159775","ES","ESP","SPAIN" -"3641159776","3641180159","DE","DEU","GERMANY" -"3641180160","3641188351","GB","GBR","UNITED KINGDOM" -"3641188352","3641192447","TJ","TJK","TAJIKISTAN" -"3641192448","3641196543","DE","DEU","GERMANY" -"3641196544","3641200639","SA","SAU","SAUDI ARABIA" -"3641200640","3641204735","RU","RUS","RUSSIAN FEDERATION" -"3641204736","3641206015","NL","NLD","NETHERLANDS" -"3641206016","3641206271","CN","CHN","CHINA" -"3641206272","3641208831","NL","NLD","NETHERLANDS" -"3641208832","3641212927","JO","JOR","JORDAN" -"3641212928","3641221119","NO","NOR","NORWAY" -"3641221120","3641229311","PL","POL","POLAND" -"3641229312","3641237503","CH","CHE","SWITZERLAND" -"3641237504","3641241599","RU","RUS","RUSSIAN FEDERATION" -"3641241600","3641245695","GB","GBR","UNITED KINGDOM" -"3641245696","3641249791","UA","UKR","UKRAINE" -"3641249792","3641262079","DE","DEU","GERMANY" -"3641262080","3641266175","IT","ITA","ITALY" -"3641266176","3641270271","RU","RUS","RUSSIAN FEDERATION" -"3641270272","3641278463","DE","DEU","GERMANY" -"3641278464","3641282559","IS","ISL","ICELAND" -"3641282560","3641286655","RU","RUS","RUSSIAN FEDERATION" -"3641286656","3641294847","PL","POL","POLAND" -"3641294848","3641298943","GB","GBR","UNITED KINGDOM" -"3641298944","3641303039","SE","SWE","SWEDEN" -"3641303040","3641307135","BG","BGR","BULGARIA" -"3641307136","3641311231","LT","LTU","LITHUANIA" -"3641311232","3641315327","DE","DEU","GERMANY" -"3641315328","3641319423","DK","DNK","DENMARK" -"3641319424","3641323519","RU","RUS","RUSSIAN FEDERATION" -"3641323520","3641323775","US","USA","UNITED STATES" -"3641323776","3641331711","DE","DEU","GERMANY" -"3641331712","3641335807","ES","ESP","SPAIN" -"3641335808","3641343999","SE","SWE","SWEDEN" -"3641344000","3641345199","GB","GBR","UNITED KINGDOM" -"3641345200","3641345215","IE","IRL","IRELAND" -"3641345216","3641353151","GB","GBR","UNITED KINGDOM" -"3641353152","3641353183","BD","BGD","BANGLADESH" -"3641353184","3641353215","NG","NGA","NIGERIA" -"3641353216","3641353231","GB","GBR","UNITED KINGDOM" -"3641353232","3641353247","IQ","IRQ","IRAQ" -"3641353248","3641353343","GB","GBR","UNITED KINGDOM" -"3641353344","3641353727","BD","BGD","BANGLADESH" -"3641353728","3641353759","NG","NGA","NIGERIA" -"3641353760","3641353775","GB","GBR","UNITED KINGDOM" -"3641353776","3641353807","NG","NGA","NIGERIA" -"3641353808","3641353983","GB","GBR","UNITED KINGDOM" -"3641353984","3641354239","AF","AFG","AFGHANISTAN" -"3641354240","3641354383","GB","GBR","UNITED KINGDOM" -"3641354384","3641354479","IT","ITA","ITALY" -"3641354480","3641354751","GB","GBR","UNITED KINGDOM" -"3641354752","3641355263","NG","NGA","NIGERIA" -"3641355264","3641355519","AO","AGO","ANGOLA" -"3641355520","3641355775","GB","GBR","UNITED KINGDOM" -"3641355776","3641356031","LB","LBN","LEBANON" -"3641356032","3641356111","GB","GBR","UNITED KINGDOM" -"3641356112","3641356119","NG","NGA","NIGERIA" -"3641356120","3641356191","GB","GBR","UNITED KINGDOM" -"3641356192","3641356207","NG","NGA","NIGERIA" -"3641356208","3641359359","GB","GBR","UNITED KINGDOM" -"3641359360","3641359615","IQ","IRQ","IRAQ" -"3641359616","3641360383","GB","GBR","UNITED KINGDOM" -"3641360384","3641368575","RO","ROM","ROMANIA" -"3641368576","3641372671","GB","GBR","UNITED KINGDOM" -"3641372672","3641376767","BG","BGR","BULGARIA" -"3641376768","3641380863","IT","ITA","ITALY" -"3641380864","3641384959","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3641384960","3641389055","CH","CHE","SWITZERLAND" -"3641389056","3641391807","DE","DEU","GERMANY" -"3641391808","3641391823","AT","AUT","AUSTRIA" -"3641391824","3641393151","DE","DEU","GERMANY" -"3641393152","3641397247","KZ","KAZ","KAZAKHSTAN" -"3641397248","3641401343","IT","ITA","ITALY" -"3641401344","3641409535","ES","ESP","SPAIN" -"3641409536","3641417727","PL","POL","POLAND" -"3641417728","3641421823","GE","GEO","GEORGIA" -"3641421824","3641425919","TJ","TJK","TAJIKISTAN" -"3641425920","3641430015","DE","DEU","GERMANY" -"3641430016","3641434111","CH","CHE","SWITZERLAND" -"3641434112","3641442303","CZ","CZE","CZECH REPUBLIC" -"3641442304","3641446399","GB","GBR","UNITED KINGDOM" -"3641446400","3641450495","ES","ESP","SPAIN" -"3641450496","3641454591","RU","RUS","RUSSIAN FEDERATION" -"3641454592","3641458687","SK","SVK","SLOVAKIA" -"3641458688","3641462783","RU","RUS","RUSSIAN FEDERATION" -"3641462784","3641466879","UZ","UZB","UZBEKISTAN" -"3641466880","3641470975","RU","RUS","RUSSIAN FEDERATION" -"3641470976","3641475071","MD","MDA","REPUBLIC OF MOLDOVA" -"3641475072","3641479167","IT","ITA","ITALY" -"3641479168","3641483263","GB","GBR","UNITED KINGDOM" -"3641483264","3641491455","IT","ITA","ITALY" -"3641491456","3641493503","UA","UKR","UKRAINE" -"3641493504","3641494015","RU","RUS","RUSSIAN FEDERATION" -"3641494016","3641495551","UA","UKR","UKRAINE" -"3641495552","3641496063","RU","RUS","RUSSIAN FEDERATION" -"3641496064","3641499647","UA","UKR","UKRAINE" -"3641499648","3641503743","SA","SAU","SAUDI ARABIA" -"3641503744","3641507839","RU","RUS","RUSSIAN FEDERATION" -"3641507840","3641516031","NO","NOR","NORWAY" -"3641516032","3641520127","HU","HUN","HUNGARY" -"3641520128","3641524223","FR","FRA","FRANCE" -"3641524224","3641528319","DE","DEU","GERMANY" -"3641528320","3641532415","ES","ESP","SPAIN" -"3641532416","3641536511","RO","ROM","ROMANIA" -"3641536512","3641540607","ES","ESP","SPAIN" -"3641540608","3641548799","GB","GBR","UNITED KINGDOM" -"3641548800","3641552895","DE","DEU","GERMANY" -"3641552896","3641556991","AT","AUT","AUSTRIA" -"3641556992","3641559103","DE","DEU","GERMANY" -"3641559104","3641559135","NL","NLD","NETHERLANDS" -"3641559136","3641560959","DE","DEU","GERMANY" -"3641560960","3641561087","NL","NLD","NETHERLANDS" -"3641561088","3641565183","RU","RUS","RUSSIAN FEDERATION" -"3641565184","3641573375","SE","SWE","SWEDEN" -"3641573376","3641577471","NO","NOR","NORWAY" -"3641577472","3641581567","RU","RUS","RUSSIAN FEDERATION" -"3641581568","3641585663","ES","ESP","SPAIN" -"3641585664","3641589759","RU","RUS","RUSSIAN FEDERATION" -"3641589760","3641593855","CH","CHE","SWITZERLAND" -"3641597952","3641602047","AZ","AZE","AZERBAIJAN" -"3641602048","3641606143","DE","DEU","GERMANY" -"3641606144","3641607695","GB","GBR","UNITED KINGDOM" -"3641607696","3641607711","FR","FRA","FRANCE" -"3641607712","3641610239","GB","GBR","UNITED KINGDOM" -"3641610240","3641618431","DE","DEU","GERMANY" -"3641618432","3641622527","GB","GBR","UNITED KINGDOM" -"3641622528","3641626623","RU","RUS","RUSSIAN FEDERATION" -"3641626624","3641630719","HR","HRV","CROATIA" -"3641630720","3641634815","AT","AUT","AUSTRIA" -"3641634816","3641638911","RU","RUS","RUSSIAN FEDERATION" -"3641638912","3641643007","AT","AUT","AUSTRIA" -"3641643008","3641647103","RU","RUS","RUSSIAN FEDERATION" -"3641647104","3641651199","ES","ESP","SPAIN" -"3641651200","3641655295","RU","RUS","RUSSIAN FEDERATION" -"3641655296","3641659391","GB","GBR","UNITED KINGDOM" -"3641659392","3641663487","FR","FRA","FRANCE" -"3641663488","3641667583","MT","MLT","MALTA" -"3641667584","3641668607","GB","GBR","UNITED KINGDOM" -"3641668608","3641670655","ZW","ZWE","ZIMBABWE" -"3641670656","3641670783","SO","SOM","SOMALIA" -"3641670784","3641670791","NG","NGA","NIGERIA" -"3641670792","3641670911","GB","GBR","UNITED KINGDOM" -"3641670912","3641671679","LS","LSO","LESOTHO" -"3641671680","3641679871","RU","RUS","RUSSIAN FEDERATION" -"3641679872","3641683967","GB","GBR","UNITED KINGDOM" -"3641683968","3641688063","KZ","KAZ","KAZAKHSTAN" -"3641688064","3641692159","RU","RUS","RUSSIAN FEDERATION" -"3641692160","3641696255","IT","ITA","ITALY" -"3641696256","3641700351","DE","DEU","GERMANY" -"3641700352","3641704447","SE","SWE","SWEDEN" -"3641704448","3641708543","FR","FRA","FRANCE" -"3641708544","3641712639","RU","RUS","RUSSIAN FEDERATION" -"3641712640","3641713447","NL","NLD","NETHERLANDS" -"3641713448","3641713639","BE","BEL","BELGIUM" -"3641713640","3641716735","NL","NLD","NETHERLANDS" -"3641716736","3641720831","GB","GBR","UNITED KINGDOM" -"3641720832","3641729023","MK","MKD","THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA" -"3641729024","3641733119","DK","DNK","DENMARK" -"3641733120","3641737215","AT","AUT","AUSTRIA" -"3641737216","3641741311","RS","SRB","SERBIA" -"3641741312","3641745407","ES","ESP","SPAIN" -"3641745408","3641749503","DE","DEU","GERMANY" -"3641749504","3641753599","CZ","CZE","CZECH REPUBLIC" -"3641753600","3641757695","SE","SWE","SWEDEN" -"3641757696","3641761791","GB","GBR","UNITED KINGDOM" -"3641761792","3641761795","CY","CYP","CYPRUS" -"3641761796","3641761851","GR","GRC","GREECE" -"3641761852","3641761855","CY","CYP","CYPRUS" -"3641761856","3641761863","GR","GRC","GREECE" -"3641761864","3641761867","CY","CYP","CYPRUS" -"3641761868","3641761895","GR","GRC","GREECE" -"3641761896","3641761899","CY","CYP","CYPRUS" -"3641761900","3641761923","GR","GRC","GREECE" -"3641761924","3641761927","CY","CYP","CYPRUS" -"3641761928","3641761935","GR","GRC","GREECE" -"3641761936","3641761939","CY","CYP","CYPRUS" -"3641761940","3641761967","GR","GRC","GREECE" -"3641761968","3641761971","CY","CYP","CYPRUS" -"3641761972","3641762007","GR","GRC","GREECE" -"3641762008","3641762011","CY","CYP","CYPRUS" -"3641762012","3641762047","GR","GRC","GREECE" -"3641762048","3641762571","CY","CYP","CYPRUS" -"3641762572","3641762575","GR","GRC","GREECE" -"3641762576","3641762591","CY","CYP","CYPRUS" -"3641762592","3641762595","GR","GRC","GREECE" -"3641762596","3641762607","CY","CYP","CYPRUS" -"3641762608","3641762611","GR","GRC","GREECE" -"3641762612","3641762647","CY","CYP","CYPRUS" -"3641762648","3641762655","GR","GRC","GREECE" -"3641762656","3641762687","CY","CYP","CYPRUS" -"3641762688","3641762691","GR","GRC","GREECE" -"3641762692","3641762703","CY","CYP","CYPRUS" -"3641762704","3641762711","GR","GRC","GREECE" -"3641762712","3641762755","CY","CYP","CYPRUS" -"3641762756","3641762759","GR","GRC","GREECE" -"3641762760","3641762907","CY","CYP","CYPRUS" -"3641762908","3641762911","GR","GRC","GREECE" -"3641762912","3641762943","CY","CYP","CYPRUS" -"3641762944","3641762947","GR","GRC","GREECE" -"3641762948","3641762951","CY","CYP","CYPRUS" -"3641762952","3641762999","GR","GRC","GREECE" -"3641763000","3641763003","CY","CYP","CYPRUS" -"3641763004","3641763023","GR","GRC","GREECE" -"3641763024","3641763035","CY","CYP","CYPRUS" -"3641763036","3641763063","GR","GRC","GREECE" -"3641763064","3641763331","CY","CYP","CYPRUS" -"3641763332","3641763339","GR","GRC","GREECE" -"3641763340","3641763367","CY","CYP","CYPRUS" -"3641763368","3641763371","GR","GRC","GREECE" -"3641763372","3641763427","CY","CYP","CYPRUS" -"3641763428","3641763431","GR","GRC","GREECE" -"3641763432","3641763439","CY","CYP","CYPRUS" -"3641763440","3641763443","GR","GRC","GREECE" -"3641763444","3641763451","CY","CYP","CYPRUS" -"3641763452","3641763455","GR","GRC","GREECE" -"3641763456","3641763475","CY","CYP","CYPRUS" -"3641763476","3641763479","GR","GRC","GREECE" -"3641763480","3641763491","CY","CYP","CYPRUS" -"3641763492","3641763503","GR","GRC","GREECE" -"3641763504","3641763511","CY","CYP","CYPRUS" -"3641763512","3641763519","GR","GRC","GREECE" -"3641763520","3641763582","CY","CYP","CYPRUS" -"3641763583","3641763583","GR","GRC","GREECE" -"3641763584","3641764111","CY","CYP","CYPRUS" -"3641764112","3641764115","GR","GRC","GREECE" -"3641764116","3641764231","CY","CYP","CYPRUS" -"3641764232","3641764239","GR","GRC","GREECE" -"3641764240","3641764279","CY","CYP","CYPRUS" -"3641764280","3641764291","GR","GRC","GREECE" -"3641764292","3641764303","CY","CYP","CYPRUS" -"3641764304","3641764307","GR","GRC","GREECE" -"3641764308","3641764319","CY","CYP","CYPRUS" -"3641764320","3641764327","GR","GRC","GREECE" -"3641764328","3641764347","CY","CYP","CYPRUS" -"3641764348","3641764351","GR","GRC","GREECE" -"3641764352","3641764607","CY","CYP","CYPRUS" -"3641764608","3641764679","GR","GRC","GREECE" -"3641764680","3641764683","CY","CYP","CYPRUS" -"3641764684","3641764699","GR","GRC","GREECE" -"3641764700","3641764703","CY","CYP","CYPRUS" -"3641764704","3641764711","GR","GRC","GREECE" -"3641764712","3641764715","CY","CYP","CYPRUS" -"3641764716","3641764775","GR","GRC","GREECE" -"3641764776","3641764783","CY","CYP","CYPRUS" -"3641764784","3641764787","GR","GRC","GREECE" -"3641764788","3641764791","CY","CYP","CYPRUS" -"3641764792","3641764847","GR","GRC","GREECE" -"3641764848","3641764856","CY","CYP","CYPRUS" -"3641764857","3641764863","GR","GRC","GREECE" -"3641764864","3641764875","CY","CYP","CYPRUS" -"3641764876","3641764927","GR","GRC","GREECE" -"3641764928","3641764935","CY","CYP","CYPRUS" -"3641764936","3641764943","GR","GRC","GREECE" -"3641764944","3641764951","CY","CYP","CYPRUS" -"3641764952","3641764963","GR","GRC","GREECE" -"3641764964","3641764967","CY","CYP","CYPRUS" -"3641764968","3641764975","GR","GRC","GREECE" -"3641764976","3641764979","CY","CYP","CYPRUS" -"3641764980","3641765023","GR","GRC","GREECE" -"3641765024","3641765031","CY","CYP","CYPRUS" -"3641765032","3641765083","GR","GRC","GREECE" -"3641765084","3641765087","CY","CYP","CYPRUS" -"3641765088","3641765119","GR","GRC","GREECE" -"3641765120","3641765631","CY","CYP","CYPRUS" -"3641765632","3641765887","GR","GRC","GREECE" -"3641765888","3641769983","ES","ESP","SPAIN" -"3641769984","3641774079","NO","NOR","NORWAY" -"3641774080","3641778175","DE","DEU","GERMANY" -"3641778176","3641782271","PL","POL","POLAND" -"3641782272","3641784079","GB","GBR","UNITED KINGDOM" -"3641784080","3641786367","BG","BGR","BULGARIA" -"3641786368","3641790463","SE","SWE","SWEDEN" -"3641790464","3641794559","LT","LTU","LITHUANIA" -"3641794560","3641798655","RS","SRB","SERBIA" -"3641798656","3641802751","RU","RUS","RUSSIAN FEDERATION" -"3641802752","3641806847","NL","NLD","NETHERLANDS" -"3641806848","3641807871","TR","TUR","TURKEY" -"3641807872","3641808895","NL","NLD","NETHERLANDS" -"3641808896","3641809663","TR","TUR","TURKEY" -"3641809664","3641809919","NL","NLD","NETHERLANDS" -"3641809920","3641810315","TR","TUR","TURKEY" -"3641810316","3641810431","CY","CYP","CYPRUS" -"3641810432","3641810439","NL","NLD","NETHERLANDS" -"3641810440","3641810447","US","USA","UNITED STATES" -"3641810448","3641810463","NL","NLD","NETHERLANDS" -"3641810464","3641810479","US","USA","UNITED STATES" -"3641810480","3641810559","TR","TUR","TURKEY" -"3641810560","3641810623","US","USA","UNITED STATES" -"3641810624","3641810631","TR","TUR","TURKEY" -"3641810632","3641810642","US","USA","UNITED STATES" -"3641810643","3641810687","TR","TUR","TURKEY" -"3641810688","3641810943","CY","CYP","CYPRUS" -"3641810944","3641819135","RU","RUS","RUSSIAN FEDERATION" -"3641819136","3641823231","DE","DEU","GERMANY" -"3641823232","3641827327","NO","NOR","NORWAY" -"3641827328","3641835519","BH","BHR","BAHRAIN" -"3641835520","3641839615","IT","ITA","ITALY" -"3641839616","3641843711","GB","GBR","UNITED KINGDOM" -"3641843712","3641847807","ES","ESP","SPAIN" -"3641847808","3641851903","IT","ITA","ITALY" -"3641851904","3641855999","NL","NLD","NETHERLANDS" -"3641856000","3641860095","GB","GBR","UNITED KINGDOM" -"3641860096","3641868287","IT","ITA","ITALY" -"3641868288","3641876479","RU","RUS","RUSSIAN FEDERATION" -"3641876480","3641880575","ES","ESP","SPAIN" -"3641880576","3641881343","DE","DEU","GERMANY" -"3641881344","3641881359","US","USA","UNITED STATES" -"3641881360","3641881391","DE","DEU","GERMANY" -"3641881392","3641881395","CH","CHE","SWITZERLAND" -"3641881396","3641881399","DE","DEU","GERMANY" -"3641881400","3641881407","CH","CHE","SWITZERLAND" -"3641881408","3641881423","DE","DEU","GERMANY" -"3641881424","3641881439","US","USA","UNITED STATES" -"3641881440","3641881447","DE","DEU","GERMANY" -"3641881448","3641881455","CH","CHE","SWITZERLAND" -"3641881456","3641881567","DE","DEU","GERMANY" -"3641881568","3641881583","CH","CHE","SWITZERLAND" -"3641881584","3641882727","DE","DEU","GERMANY" -"3641882728","3641882735","CH","CHE","SWITZERLAND" -"3641882736","3641884671","DE","DEU","GERMANY" -"3641884672","3641888767","NO","NOR","NORWAY" -"3641888768","3641892863","IT","ITA","ITALY" -"3641892864","3641896959","ES","ESP","SPAIN" -"3641896960","3641901055","BG","BGR","BULGARIA" -"3641901056","3641905151","RO","ROM","ROMANIA" -"3641905152","3641909247","NL","NLD","NETHERLANDS" -"3641909248","3641913343","AT","AUT","AUSTRIA" -"3641913344","3641917439","FR","FRA","FRANCE" -"3641917440","3641925631","GR","GRC","GREECE" -"3641925632","3641933823","RU","RUS","RUSSIAN FEDERATION" -"3641933824","3641937919","GB","GBR","UNITED KINGDOM" -"3641937920","3641942015","IT","ITA","ITALY" -"3641942016","3641950207","DE","DEU","GERMANY" -"3641950208","3641954303","FR","FRA","FRANCE" -"3641954304","3641957887","MD","MDA","REPUBLIC OF MOLDOVA" -"3641957888","3641957951","GB","GBR","UNITED KINGDOM" -"3641957952","3641958143","MD","MDA","REPUBLIC OF MOLDOVA" -"3641958144","3641958207","GB","GBR","UNITED KINGDOM" -"3641958208","3641958399","MD","MDA","REPUBLIC OF MOLDOVA" -"3641958400","3641960699","BE","BEL","BELGIUM" -"3641960700","3641960703","NL","NLD","NETHERLANDS" -"3641960704","3641961727","BE","BEL","BELGIUM" -"3641961728","3641961743","NL","NLD","NETHERLANDS" -"3641961744","3641961791","BE","BEL","BELGIUM" -"3641961792","3641961799","US","USA","UNITED STATES" -"3641961800","3641962495","BE","BEL","BELGIUM" -"3641962496","3641966591","GB","GBR","UNITED KINGDOM" -"3641966592","3641970687","IT","ITA","ITALY" -"3641970688","3641978879","GB","GBR","UNITED KINGDOM" -"3641978880","3641982975","DK","DNK","DENMARK" -"3641982976","3641991167","RU","RUS","RUSSIAN FEDERATION" -"3641991168","3641995263","SE","SWE","SWEDEN" -"3641995264","3641999359","DE","DEU","GERMANY" -"3641999360","3642003455","HU","HUN","HUNGARY" -"3642003456","3642007551","DE","DEU","GERMANY" -"3642007552","3642015743","UA","UKR","UKRAINE" -"3642015744","3642019839","CH","CHE","SWITZERLAND" -"3642019840","3642023935","RU","RUS","RUSSIAN FEDERATION" -"3642028032","3642028287","GB","GBR","UNITED KINGDOM" -"3642028288","3642028543","NG","NGA","NIGERIA" -"3642028544","3642028544","GB","GBR","UNITED KINGDOM" -"3642028545","3642028799","NG","NGA","NIGERIA" -"3642028800","3642028800","GB","GBR","UNITED KINGDOM" -"3642028801","3642028863","SO","SOM","SOMALIA" -"3642028864","3642028928","GB","GBR","UNITED KINGDOM" -"3642028929","3642029055","NG","NGA","NIGERIA" -"3642029056","3642029056","GB","GBR","UNITED KINGDOM" -"3642029057","3642029311","NG","NGA","NIGERIA" -"3642029312","3642029567","GB","GBR","UNITED KINGDOM" -"3642029568","3642031359","NG","NGA","NIGERIA" -"3642031360","3642031616","GB","GBR","UNITED KINGDOM" -"3642031617","3642031743","SL","SLE","SIERRA LEONE" -"3642031744","3642032127","GB","GBR","UNITED KINGDOM" -"3642032128","3642036223","PS","PSE","PALESTINIAN TERRITORY, OCCUPIED" -"3642036224","3642040319","RU","RUS","RUSSIAN FEDERATION" -"3642040320","3642048511","BY","BLR","BELARUS" -"3642048512","3642053439","GB","GBR","UNITED KINGDOM" -"3642053440","3642053631","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"3642053632","3642056703","GB","GBR","UNITED KINGDOM" -"3642056704","3642060799","RU","RUS","RUSSIAN FEDERATION" -"3642064896","3642068991","SE","SWE","SWEDEN" -"3642068992","3642073087","NL","NLD","NETHERLANDS" -"3642073088","3642077183","LV","LVA","LATVIA" -"3642077184","3642081279","BE","BEL","BELGIUM" -"3642081280","3642085375","NL","NLD","NETHERLANDS" -"3642085376","3642089471","RU","RUS","RUSSIAN FEDERATION" -"3642089472","3642093567","SE","SWE","SWEDEN" -"3642093568","3642097663","NL","NLD","NETHERLANDS" -"3642097664","3642101759","GB","GBR","UNITED KINGDOM" -"3642101760","3642109951","NO","NOR","NORWAY" -"3642109952","3642114047","BE","BEL","BELGIUM" -"3642114048","3642118143","NL","NLD","NETHERLANDS" -"3642118144","3642122239","GB","GBR","UNITED KINGDOM" -"3642122240","3642126335","ES","ESP","SPAIN" -"3642126336","3642130431","IL","ISR","ISRAEL" -"3642130432","3642134527","DE","DEU","GERMANY" -"3642134528","3642138623","GB","GBR","UNITED KINGDOM" -"3642138624","3642142719","RU","RUS","RUSSIAN FEDERATION" -"3642142720","3642146815","MT","MLT","MALTA" -"3642146816","3642150911","DE","DEU","GERMANY" -"3642150912","3642163199","IT","ITA","ITALY" -"3642163200","3642164595","NL","NLD","NETHERLANDS" -"3642164596","3642164663","HK","HKG","HONG KONG" -"3642164664","3642167295","NL","NLD","NETHERLANDS" -"3642167296","3642171391","RU","RUS","RUSSIAN FEDERATION" -"3642171392","3642175487","JO","JOR","JORDAN" -"3642175488","3642179583","DE","DEU","GERMANY" -"3642179584","3642187775","RU","RUS","RUSSIAN FEDERATION" -"3642187776","3642190591","DK","DNK","DENMARK" -"3642190592","3642190623","NO","NOR","NORWAY" -"3642190624","3642191423","DK","DNK","DENMARK" -"3642191424","3642191455","ES","ESP","SPAIN" -"3642191456","3642191487","TR","TUR","TURKEY" -"3642191488","3642191519","CH","CHE","SWITZERLAND" -"3642191520","3642191551","CY","CYP","CYPRUS" -"3642191552","3642191583","ES","ESP","SPAIN" -"3642191584","3642191615","US","USA","UNITED STATES" -"3642191616","3642191647","ZA","ZAF","SOUTH AFRICA" -"3642191648","3642191679","AU","AUS","AUSTRALIA" -"3642191680","3642191711","TH","THA","THAILAND" -"3642191712","3642191743","BR","BRA","BRAZIL" -"3642191744","3642191871","DK","DNK","DENMARK" -"3642191872","3642195967","BY","BLR","BELARUS" -"3642195968","3642204159","RU","RUS","RUSSIAN FEDERATION" -"3642204160","3642208255","GB","GBR","UNITED KINGDOM" -"3642208256","3642212351","RU","RUS","RUSSIAN FEDERATION" -"3642212352","3642216447","BA","BIH","BOSNIA AND HERZEGOVINA" -"3642216448","3642220543","HU","HUN","HUNGARY" -"3642220544","3642224639","GB","GBR","UNITED KINGDOM" -"3642224640","3642228735","SK","SVK","SLOVAKIA" -"3642228736","3642232831","DE","DEU","GERMANY" -"3642232832","3642233855","CS","SCG","SERBIA AND MONTENEGRO" -"3642233856","3642234879","RS","SRB","SERBIA" -"3642234880","3642234943","CS","SCG","SERBIA AND MONTENEGRO" -"3642234944","3642234999","RS","SRB","SERBIA" -"3642235000","3642235007","CS","SCG","SERBIA AND MONTENEGRO" -"3642235008","3642235903","RS","SRB","SERBIA" -"3642235904","3642236927","CS","SCG","SERBIA AND MONTENEGRO" -"3642236928","3642241023","CH","CHE","SWITZERLAND" -"3642241024","3642245119","DE","DEU","GERMANY" -"3642245120","3642249215","LV","LVA","LATVIA" -"3642249216","3642253311","FR","FRA","FRANCE" -"3642253312","3642257407","FI","FIN","FINLAND" -"3642257408","3642261503","RU","RUS","RUSSIAN FEDERATION" -"3642261504","3642265599","GB","GBR","UNITED KINGDOM" -"3642265600","3642266111","AE","ARE","UNITED ARAB EMIRATES" -"3642266112","3642266367","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3642266368","3642266623","AE","ARE","UNITED ARAB EMIRATES" -"3642266624","3642269695","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3642269696","3642273791","UA","UKR","UKRAINE" -"3642273792","3642277887","RU","RUS","RUSSIAN FEDERATION" -"3642277888","3642290175","DE","DEU","GERMANY" -"3642290176","3642294271","AL","ALB","ALBANIA" -"3642294272","3642298367","GB","GBR","UNITED KINGDOM" -"3642298368","3642302463","AZ","AZE","AZERBAIJAN" -"3642302464","3642302759","SE","SWE","SWEDEN" -"3642302760","3642302764","GB","GBR","UNITED KINGDOM" -"3642302765","3642302975","SE","SWE","SWEDEN" -"3642302976","3642303007","GB","GBR","UNITED KINGDOM" -"3642303008","3642304031","SE","SWE","SWEDEN" -"3642304032","3642304036","GB","GBR","UNITED KINGDOM" -"3642304037","3642306559","SE","SWE","SWEDEN" -"3642306560","3642310655","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3642310656","3642314751","DE","DEU","GERMANY" -"3642314752","3642318847","RU","RUS","RUSSIAN FEDERATION" -"3642318848","3642322943","FI","FIN","FINLAND" -"3642322944","3642327039","AT","AUT","AUSTRIA" -"3642327040","3642331135","DE","DEU","GERMANY" -"3642331136","3642335231","RU","RUS","RUSSIAN FEDERATION" -"3642335232","3642339327","DE","DEU","GERMANY" -"3642339328","3642343423","FR","FRA","FRANCE" -"3642343424","3642347519","UA","UKR","UKRAINE" -"3642347520","3642355711","RU","RUS","RUSSIAN FEDERATION" -"3642355712","3642359807","SE","SWE","SWEDEN" -"3642359808","3642367999","RU","RUS","RUSSIAN FEDERATION" -"3642368000","3642376191","CH","CHE","SWITZERLAND" -"3642376192","3642378127","CS","SCG","SERBIA AND MONTENEGRO" -"3642378128","3642378143","RS","SRB","SERBIA" -"3642378144","3642379519","CS","SCG","SERBIA AND MONTENEGRO" -"3642379520","3642379711","CS","SCG","SERBIA AND MONTENEGRO" -"3642379712","3642380031","CS","SCG","SERBIA AND MONTENEGRO" -"3642380032","3642380063","CS","SCG","SERBIA AND MONTENEGRO" -"3642380064","3642380095","RS","SRB","SERBIA" -"3642380096","3642380287","CS","SCG","SERBIA AND MONTENEGRO" -"3642380288","3642384383","IT","ITA","ITALY" -"3642384384","3642388479","NO","NOR","NORWAY" -"3642388480","3642392575","NL","NLD","NETHERLANDS" -"3642392576","3642396671","AM","ARM","ARMENIA" -"3642396672","3642404863","MD","MDA","REPUBLIC OF MOLDOVA" -"3642404864","3642408959","RU","RUS","RUSSIAN FEDERATION" -"3642408960","3642413055","FR","FRA","FRANCE" -"3642413056","3642414591","CS","SCG","SERBIA AND MONTENEGRO" -"3642414592","3642415627","GB","GBR","UNITED KINGDOM" -"3642415628","3642415635","MT","MLT","MALTA" -"3642415636","3642415651","GB","GBR","UNITED KINGDOM" -"3642415652","3642415655","MT","MLT","MALTA" -"3642415656","3642417151","GB","GBR","UNITED KINGDOM" -"3642417152","3642421247","IT","ITA","ITALY" -"3642421248","3642425343","US","USA","UNITED STATES" -"3642425344","3642429439","DE","DEU","GERMANY" -"3642429440","3642433535","GB","GBR","UNITED KINGDOM" -"3642433536","3642435583","CY","CYP","CYPRUS" -"3642435584","3642436607","RU","RUS","RUSSIAN FEDERATION" -"3642436608","3642437119","GR","GRC","GREECE" -"3642437120","3642437631","GB","GBR","UNITED KINGDOM" -"3642437632","3642439423","CY","CYP","CYPRUS" -"3642439424","3642439459","RU","RUS","RUSSIAN FEDERATION" -"3642439460","3642439463","CY","CYP","CYPRUS" -"3642439464","3642439471","RU","RUS","RUSSIAN FEDERATION" -"3642439472","3642439483","CY","CYP","CYPRUS" -"3642439484","3642439495","RU","RUS","RUSSIAN FEDERATION" -"3642439496","3642439551","CY","CYP","CYPRUS" -"3642439552","3642439567","RU","RUS","RUSSIAN FEDERATION" -"3642439568","3642441727","CY","CYP","CYPRUS" -"3642441728","3642449919","IT","ITA","ITALY" -"3642449920","3642454015","CH","CHE","SWITZERLAND" -"3642454016","3642458111","IT","ITA","ITALY" -"3642458112","3642462207","RU","RUS","RUSSIAN FEDERATION" -"3642462208","3642466303","UA","UKR","UKRAINE" -"3642466304","3642474495","SE","SWE","SWEDEN" -"3642474496","3642478591","DE","DEU","GERMANY" -"3642478592","3642482687","HU","HUN","HUNGARY" -"3642482688","3642486783","NL","NLD","NETHERLANDS" -"3642486784","3642499071","GB","GBR","UNITED KINGDOM" -"3642499072","3642503167","SE","SWE","SWEDEN" -"3642503168","3642507263","LV","LVA","LATVIA" -"3642507264","3642511359","FR","FRA","FRANCE" -"3642511360","3642515455","RU","RUS","RUSSIAN FEDERATION" -"3642515456","3642519551","DE","DEU","GERMANY" -"3642519552","3642523647","IT","ITA","ITALY" -"3642523648","3642527743","GB","GBR","UNITED KINGDOM" -"3642527744","3642531839","PL","POL","POLAND" -"3642531840","3642532351","DK","DNK","DENMARK" -"3642532352","3642532607","GB","GBR","UNITED KINGDOM" -"3642532608","3642532863","US","USA","UNITED STATES" -"3642532864","3642535935","DK","DNK","DENMARK" -"3642535936","3642539869","IS","ISL","ICELAND" -"3642539870","3642539870","GB","GBR","UNITED KINGDOM" -"3642539871","3642539971","IS","ISL","ICELAND" -"3642539972","3642539975","DK","DNK","DENMARK" -"3642539976","3642540031","IS","ISL","ICELAND" -"3642540032","3642544127","SE","SWE","SWEDEN" -"3642544128","3642552319","RU","RUS","RUSSIAN FEDERATION" -"3642552320","3642552639","DE","DEU","GERMANY" -"3642552640","3642552655","EE","EST","ESTONIA" -"3642552656","3642552663","HU","HUN","HUNGARY" -"3642552664","3642552665","EE","EST","ESTONIA" -"3642552666","3642552671","DE","DEU","GERMANY" -"3642552672","3642552687","SE","SWE","SWEDEN" -"3642552688","3642552831","DE","DEU","GERMANY" -"3642552832","3642552847","EE","EST","ESTONIA" -"3642552848","3642553103","DE","DEU","GERMANY" -"3642553104","3642553119","LV","LVA","LATVIA" -"3642553120","3642553151","DE","DEU","GERMANY" -"3642553152","3642553163","LV","LVA","LATVIA" -"3642553164","3642553167","DE","DEU","GERMANY" -"3642553168","3642553326","LV","LVA","LATVIA" -"3642553327","3642553343","DE","DEU","GERMANY" -"3642553344","3642553371","RU","RUS","RUSSIAN FEDERATION" -"3642553372","3642553375","DE","DEU","GERMANY" -"3642553376","3642553377","RU","RUS","RUSSIAN FEDERATION" -"3642553378","3642553379","DE","DEU","GERMANY" -"3642553380","3642553383","RU","RUS","RUSSIAN FEDERATION" -"3642553384","3642553387","DE","DEU","GERMANY" -"3642553388","3642553411","RU","RUS","RUSSIAN FEDERATION" -"3642553412","3642553415","DE","DEU","GERMANY" -"3642553416","3642553427","RU","RUS","RUSSIAN FEDERATION" -"3642553428","3642553431","DE","DEU","GERMANY" -"3642553432","3642553463","RU","RUS","RUSSIAN FEDERATION" -"3642553464","3642553467","DE","DEU","GERMANY" -"3642553468","3642553519","RU","RUS","RUSSIAN FEDERATION" -"3642553520","3642553523","DE","DEU","GERMANY" -"3642553524","3642553535","RU","RUS","RUSSIAN FEDERATION" -"3642553536","3642553543","DE","DEU","GERMANY" -"3642553544","3642553589","RU","RUS","RUSSIAN FEDERATION" -"3642553590","3642553591","DE","DEU","GERMANY" -"3642553592","3642553599","RU","RUS","RUSSIAN FEDERATION" -"3642553600","3642553855","DE","DEU","GERMANY" -"3642553856","3642553925","RU","RUS","RUSSIAN FEDERATION" -"3642553926","3642553935","DE","DEU","GERMANY" -"3642553936","3642553951","RU","RUS","RUSSIAN FEDERATION" -"3642553952","3642554111","DE","DEU","GERMANY" -"3642554112","3642554119","RU","RUS","RUSSIAN FEDERATION" -"3642554120","3642554123","DE","DEU","GERMANY" -"3642554124","3642554151","RU","RUS","RUSSIAN FEDERATION" -"3642554152","3642554177","DE","DEU","GERMANY" -"3642554178","3642554191","RU","RUS","RUSSIAN FEDERATION" -"3642554192","3642554193","DE","DEU","GERMANY" -"3642554194","3642554197","RU","RUS","RUSSIAN FEDERATION" -"3642554198","3642554199","DE","DEU","GERMANY" -"3642554200","3642554203","RU","RUS","RUSSIAN FEDERATION" -"3642554204","3642554205","DE","DEU","GERMANY" -"3642554206","3642554223","RU","RUS","RUSSIAN FEDERATION" -"3642554224","3642554239","DE","DEU","GERMANY" -"3642554240","3642554271","RU","RUS","RUSSIAN FEDERATION" -"3642554272","3642554367","DE","DEU","GERMANY" -"3642554368","3642554623","LT","LTU","LITHUANIA" -"3642554624","3642554631","DE","DEU","GERMANY" -"3642554632","3642554671","LV","LVA","LATVIA" -"3642554672","3642554675","DE","DEU","GERMANY" -"3642554676","3642554679","EE","EST","ESTONIA" -"3642554680","3642554687","LV","LVA","LATVIA" -"3642554688","3642554751","DE","DEU","GERMANY" -"3642554752","3642554783","LV","LVA","LATVIA" -"3642554784","3642554807","DE","DEU","GERMANY" -"3642554808","3642554815","LV","LVA","LATVIA" -"3642554816","3642554847","DE","DEU","GERMANY" -"3642554848","3642554879","LV","LVA","LATVIA" -"3642554880","3642554911","DE","DEU","GERMANY" -"3642554912","3642554919","NL","NLD","NETHERLANDS" -"3642554920","3642554931","DE","DEU","GERMANY" -"3642554932","3642554951","UA","UKR","UKRAINE" -"3642554952","3642554955","DE","DEU","GERMANY" -"3642554956","3642554959","GE","GEO","GEORGIA" -"3642554960","3642554963","DE","DEU","GERMANY" -"3642554964","3642554967","UA","UKR","UKRAINE" -"3642554968","3642554971","LV","LVA","LATVIA" -"3642554972","3642554975","DE","DEU","GERMANY" -"3642554976","3642554977","CZ","CZE","CZECH REPUBLIC" -"3642554978","3642554979","FR","FRA","FRANCE" -"3642554980","3642554983","BE","BEL","BELGIUM" -"3642554984","3642554987","DE","DEU","GERMANY" -"3642554988","3642554989","FR","FRA","FRANCE" -"3642554990","3642554991","UA","UKR","UKRAINE" -"3642554992","3642555015","DE","DEU","GERMANY" -"3642555016","3642555017","NL","NLD","NETHERLANDS" -"3642555018","3642555023","DE","DEU","GERMANY" -"3642555024","3642555039","NL","NLD","NETHERLANDS" -"3642555040","3642555051","DE","DEU","GERMANY" -"3642555052","3642555055","UA","UKR","UKRAINE" -"3642555056","3642555067","DE","DEU","GERMANY" -"3642555068","3642555069","NL","NLD","NETHERLANDS" -"3642555070","3642555071","DE","DEU","GERMANY" -"3642555072","3642555087","GE","GEO","GEORGIA" -"3642555088","3642555135","DE","DEU","GERMANY" -"3642555136","3642555153","LT","LTU","LITHUANIA" -"3642555154","3642555167","DE","DEU","GERMANY" -"3642555168","3642555183","LT","LTU","LITHUANIA" -"3642555184","3642555199","DE","DEU","GERMANY" -"3642555200","3642555223","LT","LTU","LITHUANIA" -"3642555224","3642555227","LV","LVA","LATVIA" -"3642555228","3642555391","LT","LTU","LITHUANIA" -"3642555392","3642555485","PL","POL","POLAND" -"3642555486","3642555647","DE","DEU","GERMANY" -"3642555648","3642555683","SE","SWE","SWEDEN" -"3642555684","3642555687","DE","DEU","GERMANY" -"3642555688","3642555695","SE","SWE","SWEDEN" -"3642555696","3642555703","LV","LVA","LATVIA" -"3642555704","3642555707","FI","FIN","FINLAND" -"3642555708","3642555711","SE","SWE","SWEDEN" -"3642555712","3642555727","RU","RUS","RUSSIAN FEDERATION" -"3642555728","3642555735","SE","SWE","SWEDEN" -"3642555736","3642555743","GB","GBR","UNITED KINGDOM" -"3642555744","3642555759","SE","SWE","SWEDEN" -"3642555760","3642555771","GB","GBR","UNITED KINGDOM" -"3642555772","3642555775","DE","DEU","GERMANY" -"3642555776","3642555783","SE","SWE","SWEDEN" -"3642555784","3642555787","GB","GBR","UNITED KINGDOM" -"3642555788","3642555789","DE","DEU","GERMANY" -"3642555790","3642555791","SE","SWE","SWEDEN" -"3642555792","3642555839","DE","DEU","GERMANY" -"3642555840","3642555903","SE","SWE","SWEDEN" -"3642555904","3642555935","DE","DEU","GERMANY" -"3642555936","3642555983","UA","UKR","UKRAINE" -"3642555984","3642556159","DE","DEU","GERMANY" -"3642556160","3642556415","LV","LVA","LATVIA" -"3642556416","3642560511","CZ","CZE","CZECH REPUBLIC" -"3642560512","3642564607","KG","KGZ","KYRGYZSTAN" -"3642564608","3642568703","DE","DEU","GERMANY" -"3642568704","3642572799","RU","RUS","RUSSIAN FEDERATION" -"3642572800","3642576895","IT","ITA","ITALY" -"3642576896","3642580991","RU","RUS","RUSSIAN FEDERATION" -"3642580992","3642585087","ES","ESP","SPAIN" -"3642585088","3642589183","UZ","UZB","UZBEKISTAN" -"3642593280","3642597375","AT","AUT","AUSTRIA" -"3642597376","3642601471","IT","ITA","ITALY" -"3642601472","3642605567","RU","RUS","RUSSIAN FEDERATION" -"3642605568","3642609663","GB","GBR","UNITED KINGDOM" -"3642613760","3642615583","FI","FIN","FINLAND" -"3642615584","3642615615","AX","FIN","FINLAND" -"3642615616","3642617855","FI","FIN","FINLAND" -"3642617856","3642621951","JO","JOR","JORDAN" -"3642621952","3642626047","IT","ITA","ITALY" -"3642626048","3642630143","BE","BEL","BELGIUM" -"3642630144","3642634239","DK","DNK","DENMARK" -"3642634240","3642638335","DE","DEU","GERMANY" -"3642638336","3642642431","CZ","CZE","CZECH REPUBLIC" -"3642642432","3642646527","DK","DNK","DENMARK" -"3642646528","3642650623","MT","MLT","MALTA" -"3642650624","3642654719","GB","GBR","UNITED KINGDOM" -"3642654720","3642662911","PL","POL","POLAND" -"3642662912","3642667007","UZ","UZB","UZBEKISTAN" -"3642667008","3642671103","FI","FIN","FINLAND" -"3642671104","3642675199","UA","UKR","UKRAINE" -"3642675200","3642679295","BG","BGR","BULGARIA" -"3642679296","3642683391","DE","DEU","GERMANY" -"3642683392","3642687487","RU","RUS","RUSSIAN FEDERATION" -"3642687488","3642691583","GB","GBR","UNITED KINGDOM" -"3642691584","3642695679","DE","DEU","GERMANY" -"3642695680","3642699775","SK","SVK","SLOVAKIA" -"3642699776","3642703871","CZ","CZE","CZECH REPUBLIC" -"3642703872","3642707967","LU","LUX","LUXEMBOURG" -"3642707968","3642712063","DE","DEU","GERMANY" -"3642712064","3642716159","NO","NOR","NORWAY" -"3642716160","3642720255","IT","ITA","ITALY" -"3642720256","3642728447","GB","GBR","UNITED KINGDOM" -"3642728448","3642736639","SE","SWE","SWEDEN" -"3642736640","3642740735","CZ","CZE","CZECH REPUBLIC" -"3642740736","3642744831","DE","DEU","GERMANY" -"3642744832","3642753023","TR","TUR","TURKEY" -"3642753024","3643801599","GB","GBR","UNITED KINGDOM" -"3643801600","3644063743","DE","DEU","GERMANY" -"3644325888","3644588031","IT","ITA","ITALY" -"3644588032","3644719103","DK","DNK","DENMARK" -"3644719104","3644809215","NL","NLD","NETHERLANDS" -"3644809216","3644817407","AM","ARM","ARMENIA" -"3644817408","3644850175","NL","NLD","NETHERLANDS" -"3644850176","3644854271","CZ","CZE","CZECH REPUBLIC" -"3644854272","3644858367","AZ","AZE","AZERBAIJAN" -"3644862464","3644866559","FR","FRA","FRANCE" -"3644866560","3644871167","DE","DEU","GERMANY" -"3644871168","3644871423","AT","AUT","AUSTRIA" -"3644871424","3644874751","DE","DEU","GERMANY" -"3644878848","3644882943","GB","GBR","UNITED KINGDOM" -"3644882944","3644887039","RU","RUS","RUSSIAN FEDERATION" -"3644887040","3644891135","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3644891136","3644895231","DE","DEU","GERMANY" -"3644895232","3644899327","FI","FIN","FINLAND" -"3644899328","3644903423","IT","ITA","ITALY" -"3644903424","3644907519","TR","TUR","TURKEY" -"3644907520","3644908983","GB","GBR","UNITED KINGDOM" -"3644908984","3644908991","IT","ITA","ITALY" -"3644908992","3644909855","GB","GBR","UNITED KINGDOM" -"3644909856","3644909859","IS","ISL","ICELAND" -"3644909860","3644911615","GB","GBR","UNITED KINGDOM" -"3644911616","3644915711","BE","BEL","BELGIUM" -"3644915712","3644919807","RU","RUS","RUSSIAN FEDERATION" -"3644919808","3644923903","DE","DEU","GERMANY" -"3644923904","3644924159","IL","ISR","ISRAEL" -"3644924160","3644924175","GB","GBR","UNITED KINGDOM" -"3644924176","3644924191","IL","ISR","ISRAEL" -"3644924192","3644924439","GB","GBR","UNITED KINGDOM" -"3644924440","3644924447","IL","ISR","ISRAEL" -"3644924448","3644924671","GB","GBR","UNITED KINGDOM" -"3644924672","3644924927","IL","ISR","ISRAEL" -"3644924928","3644925183","US","USA","UNITED STATES" -"3644925184","3644925439","IL","ISR","ISRAEL" -"3644925440","3644925951","GB","GBR","UNITED KINGDOM" -"3644925952","3644926799","US","USA","UNITED STATES" -"3644926800","3644926847","IL","ISR","ISRAEL" -"3644926848","3644926975","US","USA","UNITED STATES" -"3644926976","3644926991","IL","ISR","ISRAEL" -"3644926992","3644927007","US","USA","UNITED STATES" -"3644927008","3644927871","IL","ISR","ISRAEL" -"3644927872","3644927999","US","USA","UNITED STATES" -"3644928000","3644932095","GI","GIB","GIBRALTAR" -"3644932096","3644936191","IT","ITA","ITALY" -"3644936192","3644940287","RU","RUS","RUSSIAN FEDERATION" -"3644940288","3644948479","HU","HUN","HUNGARY" -"3644948480","3644952575","DE","DEU","GERMANY" -"3644952576","3644960767","GB","GBR","UNITED KINGDOM" -"3644960768","3644961311","DE","DEU","GERMANY" -"3644961312","3644961343","TR","TUR","TURKEY" -"3644961344","3644961791","DE","DEU","GERMANY" -"3644961792","3644964351","TR","TUR","TURKEY" -"3644964352","3644964383","DE","DEU","GERMANY" -"3644964384","3644964863","TR","TUR","TURKEY" -"3644964864","3644968959","RS","SRB","SERBIA" -"3644968960","3644973055","RU","RUS","RUSSIAN FEDERATION" -"3644973056","3644977151","NO","NOR","NORWAY" -"3644977152","3644981247","UA","UKR","UKRAINE" -"3644981248","3644985343","BE","BEL","BELGIUM" -"3644985344","3644989439","RU","RUS","RUSSIAN FEDERATION" -"3644989440","3644997631","DE","DEU","GERMANY" -"3644997632","3645005823","RU","RUS","RUSSIAN FEDERATION" -"3645005824","3645009919","UA","UKR","UKRAINE" -"3645009920","3645014015","FR","FRA","FRANCE" -"3645014016","3645018111","DE","DEU","GERMANY" -"3645018112","3645022207","RU","RUS","RUSSIAN FEDERATION" -"3645022208","3645023743","CZ","CZE","CZECH REPUBLIC" -"3645023744","3645023999","SK","SVK","SLOVAKIA" -"3645024000","3645030143","CZ","CZE","CZECH REPUBLIC" -"3645030144","3645030399","SK","SVK","SLOVAKIA" -"3645030400","3645038591","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3645038592","3645046783","PS","PSE","PALESTINIAN TERRITORY, OCCUPIED" -"3645046784","3645050879","RU","RUS","RUSSIAN FEDERATION" -"3645050880","3645054975","SK","SVK","SLOVAKIA" -"3645054976","3645059071","DE","DEU","GERMANY" -"3645059072","3645063167","GB","GBR","UNITED KINGDOM" -"3645063168","3645067263","UA","UKR","UKRAINE" -"3645067264","3645071359","SE","SWE","SWEDEN" -"3645071360","3645075455","DE","DEU","GERMANY" -"3645075456","3645079551","RU","RUS","RUSSIAN FEDERATION" -"3645079552","3645083647","IE","IRL","IRELAND" -"3645083648","3645087743","FR","FRA","FRANCE" -"3645087744","3645091839","ES","ESP","SPAIN" -"3645091840","3645095935","RU","RUS","RUSSIAN FEDERATION" -"3645095936","3645104127","PL","POL","POLAND" -"3645104128","3645112319","NL","NLD","NETHERLANDS" -"3645112320","3645116415","DE","DEU","GERMANY" -"3645116416","3645120511","GB","GBR","UNITED KINGDOM" -"3645120512","3645124607","SE","SWE","SWEDEN" -"3645124608","3645128703","NL","NLD","NETHERLANDS" -"3645128704","3645132799","GB","GBR","UNITED KINGDOM" -"3645132800","3645136895","HR","HRV","CROATIA" -"3645136896","3645145087","NO","NOR","NORWAY" -"3645145088","3645149183","GB","GBR","UNITED KINGDOM" -"3645149184","3645149887","DE","DEU","GERMANY" -"3645149888","3645149951","HK","HKG","HONG KONG" -"3645149952","3645150559","DE","DEU","GERMANY" -"3645150560","3645150591","HK","HKG","HONG KONG" -"3645150592","3645150615","DE","DEU","GERMANY" -"3645150616","3645150623","US","USA","UNITED STATES" -"3645150624","3645150975","DE","DEU","GERMANY" -"3645150976","3645151231","US","USA","UNITED STATES" -"3645151232","3645151487","DE","DEU","GERMANY" -"3645151488","3645151615","MT","MLT","MALTA" -"3645151616","3645152767","DE","DEU","GERMANY" -"3645152768","3645152799","HK","HKG","HONG KONG" -"3645152800","3645161471","DE","DEU","GERMANY" -"3645161472","3645165567","AT","AUT","AUSTRIA" -"3645165568","3645169663","TR","TUR","TURKEY" -"3645169664","3645173759","CH","CHE","SWITZERLAND" -"3645173760","3645177855","GB","GBR","UNITED KINGDOM" -"3645177856","3645181951","GR","GRC","GREECE" -"3645181952","3645183327","FR","FRA","FRANCE" -"3645183328","3645183359","GB","GBR","UNITED KINGDOM" -"3645183360","3645183439","FR","FRA","FRANCE" -"3645183440","3645183455","US","USA","UNITED STATES" -"3645183456","3645183615","FR","FRA","FRANCE" -"3645183616","3645183679","SA","SAU","SAUDI ARABIA" -"3645183680","3645183743","FR","FRA","FRANCE" -"3645183744","3645183871","GB","GBR","UNITED KINGDOM" -"3645183872","3645183903","FR","FRA","FRANCE" -"3645183904","3645183935","IE","IRL","IRELAND" -"3645183936","3645183999","FR","FRA","FRANCE" -"3645184000","3645184255","US","USA","UNITED STATES" -"3645184256","3645184256","FR","FRA","FRANCE" -"3645184257","3645184383","GB","GBR","UNITED KINGDOM" -"3645184384","3645186047","FR","FRA","FRANCE" -"3645186048","3645190143","GB","GBR","UNITED KINGDOM" -"3645190144","3645194239","FI","FIN","FINLAND" -"3645194240","3645202431","DE","DEU","GERMANY" -"3645202432","3645206527","CZ","CZE","CZECH REPUBLIC" -"3645206528","3645208575","LV","LVA","LATVIA" -"3645208576","3645210623","LT","LTU","LITHUANIA" -"3645210624","3645214719","RU","RUS","RUSSIAN FEDERATION" -"3645214720","3645218815","NL","NLD","NETHERLANDS" -"3645218816","3645222911","DE","DEU","GERMANY" -"3645222912","3645227007","KW","KWT","KUWAIT" -"3645227008","3645235199","RU","RUS","RUSSIAN FEDERATION" -"3645235200","3645243391","DE","DEU","GERMANY" -"3645243392","3645247487","ES","ESP","SPAIN" -"3645247488","3645251583","RU","RUS","RUSSIAN FEDERATION" -"3645251584","3645255679","SE","SWE","SWEDEN" -"3645255680","3645259775","PL","POL","POLAND" -"3645259776","3645263871","PT","PRT","PORTUGAL" -"3645263872","3645267967","FR","FRA","FRANCE" -"3645267968","3645276159","RU","RUS","RUSSIAN FEDERATION" -"3645276160","3645280255","DE","DEU","GERMANY" -"3645280256","3645281279","IT","ITA","ITALY" -"3645281280","3645281535","DE","DEU","GERMANY" -"3645281536","3645281791","IT","ITA","ITALY" -"3645281792","3645281919","HU","HUN","HUNGARY" -"3645281920","3645284351","IT","ITA","ITALY" -"3645284352","3645288447","DE","DEU","GERMANY" -"3645288448","3645292543","FR","FRA","FRANCE" -"3645292544","3645295103","DE","DEU","GERMANY" -"3645295104","3645295359","NL","NLD","NETHERLANDS" -"3645295360","3645296639","DE","DEU","GERMANY" -"3645296640","3645300735","NL","NLD","NETHERLANDS" -"3645300736","3645304831","BE","BEL","BELGIUM" -"3645304832","3645308927","ES","ESP","SPAIN" -"3645308928","3645313023","DK","DNK","DENMARK" -"3645313024","3645317119","ES","ESP","SPAIN" -"3645317120","3645321215","EE","EST","ESTONIA" -"3645321216","3645325311","BA","BIH","BOSNIA AND HERZEGOVINA" -"3645325312","3645329407","IT","ITA","ITALY" -"3645329408","3645333503","CH","CHE","SWITZERLAND" -"3645333504","3645334031","DE","DEU","GERMANY" -"3645334272","3645336927","DE","DEU","GERMANY" -"3645336936","3645336991","DE","DEU","GERMANY" -"3645337008","3645337023","DE","DEU","GERMANY" -"3645337088","3645337599","DE","DEU","GERMANY" -"3645337600","3645337631","FR","FRA","FRANCE" -"3645337632","3645337663","BE","BEL","BELGIUM" -"3645337664","3645338399","FR","FRA","FRANCE" -"3645338400","3645338431","BE","BEL","BELGIUM" -"3645338432","3645339295","FR","FRA","FRANCE" -"3645339296","3645339359","BE","BEL","BELGIUM" -"3645339360","3645339391","FR","FRA","FRANCE" -"3645339392","3645339647","NL","NLD","NETHERLANDS" -"3645339648","3645339903","FR","FRA","FRANCE" -"3645339904","3645339967","BE","BEL","BELGIUM" -"3645339968","3645340415","FR","FRA","FRANCE" -"3645340416","3645340447","NL","NLD","NETHERLANDS" -"3645340448","3645340543","FR","FRA","FRANCE" -"3645340544","3645340927","BE","BEL","BELGIUM" -"3645340928","3645341183","FR","FRA","FRANCE" -"3645341184","3645341439","BE","BEL","BELGIUM" -"3645341440","3645341695","FR","FRA","FRANCE" -"3645341696","3645345791","RU","RUS","RUSSIAN FEDERATION" -"3645345792","3645349887","FI","FIN","FINLAND" -"3645349888","3645353983","RU","RUS","RUSSIAN FEDERATION" -"3645353984","3645358079","MT","MLT","MALTA" -"3645358080","3645362175","ES","ESP","SPAIN" -"3645362176","3645364223","FR","FRA","FRANCE" -"3645366272","3645370367","RU","RUS","RUSSIAN FEDERATION" -"3645370368","3645374463","CH","CHE","SWITZERLAND" -"3645374464","3645378559","RU","RUS","RUSSIAN FEDERATION" -"3645378560","3645382655","SE","SWE","SWEDEN" -"3645382656","3645386751","IT","ITA","ITALY" -"3645386752","3645390847","SE","SWE","SWEDEN" -"3645390848","3645399039","SI","SVN","SLOVENIA" -"3645399040","3645403135","IT","ITA","ITALY" -"3645403136","3645407231","GB","GBR","UNITED KINGDOM" -"3645407232","3645408255","DE","DEU","GERMANY" -"3645408256","3645408319","CH","CHE","SWITZERLAND" -"3645408320","3645411327","DE","DEU","GERMANY" -"3645411328","3645415423","RU","RUS","RUSSIAN FEDERATION" -"3645415424","3645423615","GB","GBR","UNITED KINGDOM" -"3645423616","3645431807","DE","DEU","GERMANY" -"3645431808","3645435903","BE","BEL","BELGIUM" -"3645435904","3645439999","GB","GBR","UNITED KINGDOM" -"3645440000","3645444095","SE","SWE","SWEDEN" -"3645444096","3645448191","SK","SVK","SLOVAKIA" -"3645448192","3645456383","DE","DEU","GERMANY" -"3645456384","3645460479","GB","GBR","UNITED KINGDOM" -"3645460480","3645464575","UA","UKR","UKRAINE" -"3645464576","3645468671","SE","SWE","SWEDEN" -"3645468672","3645472767","RU","RUS","RUSSIAN FEDERATION" -"3645472768","3645476607","UA","UKR","UKRAINE" -"3645476608","3645476863","US","USA","UNITED STATES" -"3645476864","3645480959","DE","DEU","GERMANY" -"3645480960","3645485055","RO","ROM","ROMANIA" -"3645485056","3645489151","MT","MLT","MALTA" -"3645489152","3645493247","RU","RUS","RUSSIAN FEDERATION" -"3645493248","3645501439","IT","ITA","ITALY" -"3645501440","3645505535","PL","POL","POLAND" -"3645505536","3645506559","DE","DEU","GERMANY" -"3645506560","3645506815","AT","AUT","AUSTRIA" -"3645506816","3645507583","DE","DEU","GERMANY" -"3645507584","3645507587","AT","AUT","AUSTRIA" -"3645507588","3645507591","DE","DEU","GERMANY" -"3645507592","3645507595","AT","AUT","AUSTRIA" -"3645507596","3645507599","DE","DEU","GERMANY" -"3645507600","3645507607","AT","AUT","AUSTRIA" -"3645507608","3645509631","DE","DEU","GERMANY" -"3645509632","3645513727","GB","GBR","UNITED KINGDOM" -"3645513728","3645517823","RU","RUS","RUSSIAN FEDERATION" -"3645517824","3645521919","IE","IRL","IRELAND" -"3645521920","3645526015","PL","POL","POLAND" -"3645526016","3645530111","SE","SWE","SWEDEN" -"3645530112","3645534207","FR","FRA","FRANCE" -"3645534208","3645544959","RU","RUS","RUSSIAN FEDERATION" -"3645544960","3645544991","KZ","KAZ","KAZAKHSTAN" -"3645544992","3645545087","RU","RUS","RUSSIAN FEDERATION" -"3645545088","3645545215","TJ","TJK","TAJIKISTAN" -"3645545216","3645550591","RU","RUS","RUSSIAN FEDERATION" -"3645550592","3645558783","DE","DEU","GERMANY" -"3645558784","3645562879","DK","DNK","DENMARK" -"3645562880","3645563135","ZW","ZWE","ZIMBABWE" -"3645563136","3645564671","LS","LSO","LESOTHO" -"3645564672","3645564927","PK","PAK","PAKISTAN" -"3645564928","3645565055","SO","SOM","SOMALIA" -"3645565056","3645565695","GB","GBR","UNITED KINGDOM" -"3645565696","3645566975","ZW","ZWE","ZIMBABWE" -"3645566976","3645571071","RU","RUS","RUSSIAN FEDERATION" -"3645571072","3645575167","IE","IRL","IRELAND" -"3645575168","3645579263","CH","CHE","SWITZERLAND" -"3645579264","3645583359","NL","NLD","NETHERLANDS" -"3645583360","3645587455","PL","POL","POLAND" -"3645587456","3645595647","SK","SVK","SLOVAKIA" -"3645595648","3645597751","SE","SWE","SWEDEN" -"3645597752","3645597759","GB","GBR","UNITED KINGDOM" -"3645597760","3645601471","SE","SWE","SWEDEN" -"3645601472","3645601487","NO","NOR","NORWAY" -"3645601488","3645601759","SE","SWE","SWEDEN" -"3645601760","3645601775","FR","FRA","FRANCE" -"3645601776","3645603839","SE","SWE","SWEDEN" -"3645603840","3645612031","BG","BGR","BULGARIA" -"3645612032","3645616127","GB","GBR","UNITED KINGDOM" -"3645616128","3645620223","AT","AUT","AUSTRIA" -"3645620224","3645624319","BA","BIH","BOSNIA AND HERZEGOVINA" -"3645624320","3645628415","CZ","CZE","CZECH REPUBLIC" -"3645628416","3645636607","ES","ESP","SPAIN" -"3645636608","3645640703","AM","ARM","ARMENIA" -"3645640704","3645644799","NL","NLD","NETHERLANDS" -"3645644800","3645648895","RU","RUS","RUSSIAN FEDERATION" -"3645648896","3645652991","SE","SWE","SWEDEN" -"3645652992","3645657087","KZ","KAZ","KAZAKHSTAN" -"3645657088","3645661183","SE","SWE","SWEDEN" -"3645661184","3645665279","DE","DEU","GERMANY" -"3645665280","3645669375","PL","POL","POLAND" -"3645669376","3645669631","ES","ESP","SPAIN" -"3645669632","3645669855","FR","FRA","FRANCE" -"3645669856","3645670399","ES","ESP","SPAIN" -"3645670400","3645670911","FR","FRA","FRANCE" -"3645670912","3645673471","ES","ESP","SPAIN" -"3645673472","3645673535","FR","FRA","FRANCE" -"3645673536","3645675263","ES","ESP","SPAIN" -"3645675264","3645675519","PT","PRT","PORTUGAL" -"3645675520","3645675759","ES","ESP","SPAIN" -"3645675760","3645675775","FR","FRA","FRANCE" -"3645675776","3645676015","ES","ESP","SPAIN" -"3645676016","3645676031","FR","FRA","FRANCE" -"3645676032","3645677567","ES","ESP","SPAIN" -"3645677568","3645681663","AT","AUT","AUSTRIA" -"3645681664","3645685759","RU","RUS","RUSSIAN FEDERATION" -"3645685760","3645689855","UA","UKR","UKRAINE" -"3645689856","3645693951","IT","ITA","ITALY" -"3645693952","3645698047","BE","BEL","BELGIUM" -"3645698048","3645702143","ES","ESP","SPAIN" -"3645702144","3645706239","GB","GBR","UNITED KINGDOM" -"3645706240","3645710335","LT","LTU","LITHUANIA" -"3645710336","3645714431","NO","NOR","NORWAY" -"3645714432","3645718527","RU","RUS","RUSSIAN FEDERATION" -"3645722624","3645726719","IT","ITA","ITALY" -"3645726720","3645734911","RU","RUS","RUSSIAN FEDERATION" -"3645734912","3645743103","NL","NLD","NETHERLANDS" -"3645743104","3645747199","CZ","CZE","CZECH REPUBLIC" -"3645747200","3645751295","GB","GBR","UNITED KINGDOM" -"3645751296","3645755391","FI","FIN","FINLAND" -"3645755392","3645759487","UA","UKR","UKRAINE" -"3645759488","3645763583","FR","FRA","FRANCE" -"3645763584","3645763585","DE","DEU","GERMANY" -"3645763586","3645763587","IT","ITA","ITALY" -"3645763588","3645763588","DE","DEU","GERMANY" -"3645763589","3645763589","IE","IRL","IRELAND" -"3645763590","3645763590","ES","ESP","SPAIN" -"3645763591","3645763591","IT","ITA","ITALY" -"3645763592","3645763593","DE","DEU","GERMANY" -"3645763594","3645763594","CH","CHE","SWITZERLAND" -"3645763595","3645763595","IT","ITA","ITALY" -"3645763596","3645763597","DE","DEU","GERMANY" -"3645763598","3645763598","NL","NLD","NETHERLANDS" -"3645763599","3645763600","DE","DEU","GERMANY" -"3645763601","3645763601","GR","GRC","GREECE" -"3645763602","3645763603","FR","FRA","FRANCE" -"3645763604","3645763609","DE","DEU","GERMANY" -"3645763610","3645763610","PL","POL","POLAND" -"3645763611","3645763612","DE","DEU","GERMANY" -"3645763613","3645763613","HU","HUN","HUNGARY" -"3645763614","3645763614","CH","CHE","SWITZERLAND" -"3645763615","3645763615","ES","ESP","SPAIN" -"3645763616","3645763616","FR","FRA","FRANCE" -"3645763617","3645763617","DE","DEU","GERMANY" -"3645763618","3645763618","ES","ESP","SPAIN" -"3645763619","3645763619","DE","DEU","GERMANY" -"3645763620","3645763620","FR","FRA","FRANCE" -"3645763621","3645763621","CH","CHE","SWITZERLAND" -"3645763622","3645763622","GB","GBR","UNITED KINGDOM" -"3645763623","3645763623","FR","FRA","FRANCE" -"3645763624","3645763624","DE","DEU","GERMANY" -"3645763625","3645763625","FR","FRA","FRANCE" -"3645763626","3645763626","NL","NLD","NETHERLANDS" -"3645763627","3645763627","AT","AUT","AUSTRIA" -"3645763628","3645763629","DE","DEU","GERMANY" -"3645763630","3645763631","NL","NLD","NETHERLANDS" -"3645763632","3645763633","GB","GBR","UNITED KINGDOM" -"3645763634","3645763634","NL","NLD","NETHERLANDS" -"3645763635","3645763635","DE","DEU","GERMANY" -"3645763636","3645763636","AT","AUT","AUSTRIA" -"3645763637","3645763637","FR","FRA","FRANCE" -"3645763638","3645763638","NL","NLD","NETHERLANDS" -"3645763639","3645763639","DE","DEU","GERMANY" -"3645763640","3645763640","HU","HUN","HUNGARY" -"3645763641","3645763641","IT","ITA","ITALY" -"3645763642","3645763642","GB","GBR","UNITED KINGDOM" -"3645763643","3645763645","DE","DEU","GERMANY" -"3645763646","3645763647","ES","ESP","SPAIN" -"3645763648","3645763648","DE","DEU","GERMANY" -"3645763649","3645763649","IL","ISR","ISRAEL" -"3645763650","3645763650","DE","DEU","GERMANY" -"3645763651","3645763651","NL","NLD","NETHERLANDS" -"3645763652","3645763653","DE","DEU","GERMANY" -"3645763654","3645763654","ES","ESP","SPAIN" -"3645763655","3645763660","DE","DEU","GERMANY" -"3645763661","3645763662","FR","FRA","FRANCE" -"3645763663","3645763663","HU","HUN","HUNGARY" -"3645763664","3645763665","DE","DEU","GERMANY" -"3645763666","3645763666","NL","NLD","NETHERLANDS" -"3645763667","3645763667","DE","DEU","GERMANY" -"3645763668","3645763668","IT","ITA","ITALY" -"3645763669","3645763669","DK","DNK","DENMARK" -"3645763670","3645763670","DE","DEU","GERMANY" -"3645763671","3645763671","FR","FRA","FRANCE" -"3645763672","3645763672","DE","DEU","GERMANY" -"3645763673","3645763673","BE","BEL","BELGIUM" -"3645763674","3645763674","DE","DEU","GERMANY" -"3645763675","3645763675","NL","NLD","NETHERLANDS" -"3645763676","3645763676","DE","DEU","GERMANY" -"3645763677","3645763678","HU","HUN","HUNGARY" -"3645763679","3645763679","IT","ITA","ITALY" -"3645763680","3645763680","DE","DEU","GERMANY" -"3645763681","3645763681","CH","CHE","SWITZERLAND" -"3645763682","3645763682","DE","DEU","GERMANY" -"3645763683","3645763683","NO","NOR","NORWAY" -"3645763684","3645763684","CH","CHE","SWITZERLAND" -"3645763685","3645763685","NL","NLD","NETHERLANDS" -"3645763686","3645763686","DE","DEU","GERMANY" -"3645763687","3645763687","ES","ESP","SPAIN" -"3645763688","3645763690","NL","NLD","NETHERLANDS" -"3645763691","3645763691","CH","CHE","SWITZERLAND" -"3645763692","3645763692","DE","DEU","GERMANY" -"3645763693","3645763693","NL","NLD","NETHERLANDS" -"3645763694","3645763694","IE","IRL","IRELAND" -"3645763695","3645763696","DE","DEU","GERMANY" -"3645763697","3645763697","NL","NLD","NETHERLANDS" -"3645763698","3645763698","LU","LUX","LUXEMBOURG" -"3645763699","3645763699","BE","BEL","BELGIUM" -"3645763700","3645763700","NL","NLD","NETHERLANDS" -"3645763701","3645763701","DE","DEU","GERMANY" -"3645763702","3645763702","IT","ITA","ITALY" -"3645763703","3645763703","CH","CHE","SWITZERLAND" -"3645763704","3645763705","DE","DEU","GERMANY" -"3645763706","3645763706","GB","GBR","UNITED KINGDOM" -"3645763707","3645763707","NL","NLD","NETHERLANDS" -"3645763708","3645763708","GR","GRC","GREECE" -"3645763709","3645763709","NL","NLD","NETHERLANDS" -"3645763710","3645763710","GB","GBR","UNITED KINGDOM" -"3645763711","3645763713","NL","NLD","NETHERLANDS" -"3645763714","3645763714","DE","DEU","GERMANY" -"3645763715","3645763715","NL","NLD","NETHERLANDS" -"3645763716","3645763716","DE","DEU","GERMANY" -"3645763717","3645763717","NL","NLD","NETHERLANDS" -"3645763718","3645763718","DE","DEU","GERMANY" -"3645763719","3645763719","NL","NLD","NETHERLANDS" -"3645763720","3645763720","IT","ITA","ITALY" -"3645763721","3645763721","DE","DEU","GERMANY" -"3645763722","3645763722","GR","GRC","GREECE" -"3645763723","3645763723","NL","NLD","NETHERLANDS" -"3645763724","3645763726","IT","ITA","ITALY" -"3645763727","3645763727","NL","NLD","NETHERLANDS" -"3645763728","3645763728","GR","GRC","GREECE" -"3645763729","3645763730","IT","ITA","ITALY" -"3645763731","3645763732","DE","DEU","GERMANY" -"3645763733","3645763733","FR","FRA","FRANCE" -"3645763734","3645763734","DE","DEU","GERMANY" -"3645763735","3645763735","GB","GBR","UNITED KINGDOM" -"3645763736","3645763736","FR","FRA","FRANCE" -"3645763737","3645763737","DE","DEU","GERMANY" -"3645763738","3645763738","CH","CHE","SWITZERLAND" -"3645763739","3645763741","ES","ESP","SPAIN" -"3645763742","3645763742","DE","DEU","GERMANY" -"3645763743","3645763743","IT","ITA","ITALY" -"3645763744","3645763744","DE","DEU","GERMANY" -"3645763745","3645763745","FR","FRA","FRANCE" -"3645763746","3645763746","DE","DEU","GERMANY" -"3645763747","3645763752","NL","NLD","NETHERLANDS" -"3645763753","3645763753","ES","ESP","SPAIN" -"3645763754","3645763755","NL","NLD","NETHERLANDS" -"3645763756","3645763756","DE","DEU","GERMANY" -"3645763757","3645763757","BE","BEL","BELGIUM" -"3645763758","3645763758","FR","FRA","FRANCE" -"3645763759","3645763760","NL","NLD","NETHERLANDS" -"3645763761","3645763761","SE","SWE","SWEDEN" -"3645763762","3645763762","ES","ESP","SPAIN" -"3645763763","3645763764","NL","NLD","NETHERLANDS" -"3645763765","3645763765","DE","DEU","GERMANY" -"3645763766","3645763766","IL","ISR","ISRAEL" -"3645763767","3645763768","NL","NLD","NETHERLANDS" -"3645763769","3645763769","FR","FRA","FRANCE" -"3645763770","3645763770","NL","NLD","NETHERLANDS" -"3645763771","3645763771","GB","GBR","UNITED KINGDOM" -"3645763772","3645763772","CH","CHE","SWITZERLAND" -"3645763773","3645763773","DE","DEU","GERMANY" -"3645763774","3645763774","NL","NLD","NETHERLANDS" -"3645763775","3645763775","DE","DEU","GERMANY" -"3645763776","3645763776","NL","NLD","NETHERLANDS" -"3645763777","3645763777","BE","BEL","BELGIUM" -"3645763778","3645763779","DE","DEU","GERMANY" -"3645763780","3645763780","CH","CHE","SWITZERLAND" -"3645763781","3645763781","DE","DEU","GERMANY" -"3645763782","3645763782","NL","NLD","NETHERLANDS" -"3645763783","3645763783","DE","DEU","GERMANY" -"3645763784","3645763784","NL","NLD","NETHERLANDS" -"3645763785","3645763785","DE","DEU","GERMANY" -"3645763786","3645763786","CH","CHE","SWITZERLAND" -"3645763787","3645763787","NL","NLD","NETHERLANDS" -"3645763788","3645763788","IE","IRL","IRELAND" -"3645763789","3645763789","AT","AUT","AUSTRIA" -"3645763790","3645763790","ES","ESP","SPAIN" -"3645763791","3645763791","IT","ITA","ITALY" -"3645763792","3645763792","FR","FRA","FRANCE" -"3645763793","3645763793","ES","ESP","SPAIN" -"3645763794","3645763794","DE","DEU","GERMANY" -"3645763795","3645763795","IT","ITA","ITALY" -"3645763796","3645763796","GB","GBR","UNITED KINGDOM" -"3645763797","3645763797","DE","DEU","GERMANY" -"3645763798","3645763798","FR","FRA","FRANCE" -"3645763799","3645763801","DE","DEU","GERMANY" -"3645763802","3645763802","ES","ESP","SPAIN" -"3645763803","3645763803","NL","NLD","NETHERLANDS" -"3645763804","3645763806","DE","DEU","GERMANY" -"3645763807","3645763807","IT","ITA","ITALY" -"3645763808","3645763808","DE","DEU","GERMANY" -"3645763809","3645763809","IT","ITA","ITALY" -"3645763810","3645763810","NL","NLD","NETHERLANDS" -"3645763811","3645763813","DE","DEU","GERMANY" -"3645763814","3645763814","IT","ITA","ITALY" -"3645763815","3645763816","DE","DEU","GERMANY" -"3645763817","3645763817","GR","GRC","GREECE" -"3645763818","3645763818","ES","ESP","SPAIN" -"3645763819","3645763822","DE","DEU","GERMANY" -"3645763823","3645763823","ES","ESP","SPAIN" -"3645763824","3645763825","DE","DEU","GERMANY" -"3645763826","3645763826","IT","ITA","ITALY" -"3645763827","3645763827","ZA","ZAF","SOUTH AFRICA" -"3645763828","3645763841","DE","DEU","GERMANY" -"3645763842","3645763842","CH","CHE","SWITZERLAND" -"3645763843","3645763845","DE","DEU","GERMANY" -"3645763846","3645763846","FR","FRA","FRANCE" -"3645763847","3645763847","IT","ITA","ITALY" -"3645763848","3645763849","DE","DEU","GERMANY" -"3645763850","3645763850","IT","ITA","ITALY" -"3645763851","3645763851","GB","GBR","UNITED KINGDOM" -"3645763852","3645763852","DE","DEU","GERMANY" -"3645763853","3645763853","CH","CHE","SWITZERLAND" -"3645763854","3645763854","NL","NLD","NETHERLANDS" -"3645763855","3645763858","DE","DEU","GERMANY" -"3645763859","3645763859","DK","DNK","DENMARK" -"3645763860","3645763860","IT","ITA","ITALY" -"3645763861","3645763861","DE","DEU","GERMANY" -"3645763862","3645763862","FR","FRA","FRANCE" -"3645763863","3645763864","ES","ESP","SPAIN" -"3645763865","3645763865","CH","CHE","SWITZERLAND" -"3645763866","3645763866","DE","DEU","GERMANY" -"3645763867","3645763868","GB","GBR","UNITED KINGDOM" -"3645763869","3645763869","DE","DEU","GERMANY" -"3645763870","3645763870","HU","HUN","HUNGARY" -"3645763871","3645763874","DE","DEU","GERMANY" -"3645763875","3645763875","GB","GBR","UNITED KINGDOM" -"3645763876","3645763876","PL","POL","POLAND" -"3645763877","3645763877","FR","FRA","FRANCE" -"3645763878","3645763879","DE","DEU","GERMANY" -"3645763880","3645763881","FR","FRA","FRANCE" -"3645763882","3645763882","DE","DEU","GERMANY" -"3645763883","3645763883","NL","NLD","NETHERLANDS" -"3645763884","3645763884","IT","ITA","ITALY" -"3645763885","3645763886","DE","DEU","GERMANY" -"3645763887","3645763887","FR","FRA","FRANCE" -"3645763888","3645763888","DE","DEU","GERMANY" -"3645763889","3645763889","GR","GRC","GREECE" -"3645763890","3645763890","ES","ESP","SPAIN" -"3645763891","3645763894","DE","DEU","GERMANY" -"3645763895","3645763895","ES","ESP","SPAIN" -"3645763896","3645763896","DE","DEU","GERMANY" -"3645763897","3645763897","BE","BEL","BELGIUM" -"3645763898","3645763898","NL","NLD","NETHERLANDS" -"3645763899","3645763899","ES","ESP","SPAIN" -"3645763900","3645763900","NL","NLD","NETHERLANDS" -"3645763901","3645763902","LU","LUX","LUXEMBOURG" -"3645763903","3645763903","DE","DEU","GERMANY" -"3645763904","3645763904","BE","BEL","BELGIUM" -"3645763905","3645763905","CS","SCG","SERBIA AND MONTENEGRO" -"3645763906","3645763906","DE","DEU","GERMANY" -"3645763907","3645763908","IT","ITA","ITALY" -"3645763909","3645763909","DE","DEU","GERMANY" -"3645763910","3645763910","ES","ESP","SPAIN" -"3645763911","3645763911","DE","DEU","GERMANY" -"3645763912","3645763912","IE","IRL","IRELAND" -"3645763913","3645763913","PT","PRT","PORTUGAL" -"3645763914","3645763914","DE","DEU","GERMANY" -"3645763915","3645763915","IL","ISR","ISRAEL" -"3645763916","3645763916","BE","BEL","BELGIUM" -"3645763917","3645763917","DE","DEU","GERMANY" -"3645763918","3645763918","IT","ITA","ITALY" -"3645763919","3645763919","GB","GBR","UNITED KINGDOM" -"3645763920","3645763920","DE","DEU","GERMANY" -"3645763921","3645763921","CH","CHE","SWITZERLAND" -"3645763922","3645763922","ES","ESP","SPAIN" -"3645763923","3645763923","GB","GBR","UNITED KINGDOM" -"3645763924","3645763924","PL","POL","POLAND" -"3645763925","3645763926","DE","DEU","GERMANY" -"3645763927","3645763927","HU","HUN","HUNGARY" -"3645763928","3645763928","FR","FRA","FRANCE" -"3645763929","3645763929","NL","NLD","NETHERLANDS" -"3645763930","3645763930","ES","ESP","SPAIN" -"3645763931","3645763931","FR","FRA","FRANCE" -"3645763932","3645763932","DE","DEU","GERMANY" -"3645763933","3645763933","FR","FRA","FRANCE" -"3645763934","3645763934","IT","ITA","ITALY" -"3645763935","3645763935","FR","FRA","FRANCE" -"3645763936","3645763936","DE","DEU","GERMANY" -"3645763937","3645763937","FR","FRA","FRANCE" -"3645763938","3645763938","ES","ESP","SPAIN" -"3645763939","3645763939","NL","NLD","NETHERLANDS" -"3645763940","3645763941","DE","DEU","GERMANY" -"3645763942","3645763942","CH","CHE","SWITZERLAND" -"3645763943","3645763943","ES","ESP","SPAIN" -"3645763944","3645763944","CH","CHE","SWITZERLAND" -"3645763945","3645763945","DE","DEU","GERMANY" -"3645763946","3645763947","HU","HUN","HUNGARY" -"3645763948","3645763949","DE","DEU","GERMANY" -"3645763950","3645763950","ES","ESP","SPAIN" -"3645763951","3645763951","CH","CHE","SWITZERLAND" -"3645763952","3645763952","IT","ITA","ITALY" -"3645763953","3645763953","TR","TUR","TURKEY" -"3645763954","3645763954","IT","ITA","ITALY" -"3645763955","3645763955","FR","FRA","FRANCE" -"3645763956","3645763956","DE","DEU","GERMANY" -"3645763957","3645763957","GB","GBR","UNITED KINGDOM" -"3645763958","3645763958","AT","AUT","AUSTRIA" -"3645763959","3645763959","DE","DEU","GERMANY" -"3645763960","3645763960","IT","ITA","ITALY" -"3645763961","3645763961","DE","DEU","GERMANY" -"3645763962","3645763962","ES","ESP","SPAIN" -"3645763963","3645763964","DE","DEU","GERMANY" -"3645763965","3645763965","AT","AUT","AUSTRIA" -"3645763966","3645763966","DE","DEU","GERMANY" -"3645763967","3645763967","IT","ITA","ITALY" -"3645763968","3645763968","DE","DEU","GERMANY" -"3645763969","3645763969","ES","ESP","SPAIN" -"3645763970","3645763970","IT","ITA","ITALY" -"3645763971","3645763971","ES","ESP","SPAIN" -"3645763972","3645763972","IT","ITA","ITALY" -"3645763973","3645763973","BE","BEL","BELGIUM" -"3645763974","3645763974","GB","GBR","UNITED KINGDOM" -"3645763975","3645763975","AT","AUT","AUSTRIA" -"3645763976","3645763976","IT","ITA","ITALY" -"3645763977","3645763977","DE","DEU","GERMANY" -"3645763978","3645763978","NL","NLD","NETHERLANDS" -"3645763979","3645763979","IT","ITA","ITALY" -"3645763980","3645763981","DE","DEU","GERMANY" -"3645763982","3645763982","IT","ITA","ITALY" -"3645763983","3645763984","FR","FRA","FRANCE" -"3645763985","3645763985","NL","NLD","NETHERLANDS" -"3645763986","3645763986","DE","DEU","GERMANY" -"3645763987","3645763987","PL","POL","POLAND" -"3645763988","3645763988","CH","CHE","SWITZERLAND" -"3645763989","3645763989","FR","FRA","FRANCE" -"3645763990","3645763991","DE","DEU","GERMANY" -"3645763992","3645763992","NL","NLD","NETHERLANDS" -"3645763993","3645763993","DE","DEU","GERMANY" -"3645763994","3645763994","IT","ITA","ITALY" -"3645763995","3645763995","ES","ESP","SPAIN" -"3645763996","3645764000","DE","DEU","GERMANY" -"3645764001","3645764001","IT","ITA","ITALY" -"3645764002","3645764007","DE","DEU","GERMANY" -"3645764008","3645764008","PL","POL","POLAND" -"3645764009","3645764010","FR","FRA","FRANCE" -"3645764011","3645764012","DE","DEU","GERMANY" -"3645764013","3645764013","HU","HUN","HUNGARY" -"3645764014","3645764015","GB","GBR","UNITED KINGDOM" -"3645764016","3645764016","IT","ITA","ITALY" -"3645764017","3645764017","GB","GBR","UNITED KINGDOM" -"3645764018","3645764018","ES","ESP","SPAIN" -"3645764019","3645764019","NL","NLD","NETHERLANDS" -"3645764020","3645764020","IT","ITA","ITALY" -"3645764021","3645764021","DE","DEU","GERMANY" -"3645764022","3645764022","ES","ESP","SPAIN" -"3645764023","3645764023","FR","FRA","FRANCE" -"3645764024","3645764026","ES","ESP","SPAIN" -"3645764027","3645764028","DE","DEU","GERMANY" -"3645764029","3645764029","ES","ESP","SPAIN" -"3645764030","3645764030","DE","DEU","GERMANY" -"3645764031","3645764031","NL","NLD","NETHERLANDS" -"3645764032","3645764032","FR","FRA","FRANCE" -"3645764033","3645764034","DE","DEU","GERMANY" -"3645764035","3645764035","IT","ITA","ITALY" -"3645764036","3645764037","ES","ESP","SPAIN" -"3645764038","3645764038","IT","ITA","ITALY" -"3645764039","3645764039","HU","HUN","HUNGARY" -"3645764040","3645764040","ES","ESP","SPAIN" -"3645764041","3645764041","DE","DEU","GERMANY" -"3645764042","3645764042","CH","CHE","SWITZERLAND" -"3645764043","3645764043","DE","DEU","GERMANY" -"3645764044","3645764044","ES","ESP","SPAIN" -"3645764045","3645764045","AE","ARE","UNITED ARAB EMIRATES" -"3645764046","3645764046","ES","ESP","SPAIN" -"3645764047","3645764047","DE","DEU","GERMANY" -"3645764048","3645764048","BE","BEL","BELGIUM" -"3645764049","3645764049","ES","ESP","SPAIN" -"3645764050","3645764051","DE","DEU","GERMANY" -"3645764052","3645764052","FR","FRA","FRANCE" -"3645764053","3645764055","DE","DEU","GERMANY" -"3645764056","3645764056","BE","BEL","BELGIUM" -"3645764057","3645764057","DE","DEU","GERMANY" -"3645764058","3645764058","TR","TUR","TURKEY" -"3645764059","3645764059","DE","DEU","GERMANY" -"3645764060","3645764060","FR","FRA","FRANCE" -"3645764061","3645764061","IT","ITA","ITALY" -"3645764062","3645764062","SE","SWE","SWEDEN" -"3645764063","3645764063","AT","AUT","AUSTRIA" -"3645764064","3645764064","SI","SVN","SLOVENIA" -"3645764065","3645764065","DE","DEU","GERMANY" -"3645764066","3645764066","IT","ITA","ITALY" -"3645764067","3645764067","DE","DEU","GERMANY" -"3645764068","3645764068","IT","ITA","ITALY" -"3645764069","3645764069","CH","CHE","SWITZERLAND" -"3645764070","3645764070","GB","GBR","UNITED KINGDOM" -"3645764071","3645764074","DE","DEU","GERMANY" -"3645764075","3645764075","SE","SWE","SWEDEN" -"3645764076","3645764076","GR","GRC","GREECE" -"3645764077","3645764078","DE","DEU","GERMANY" -"3645764079","3645764079","ES","ESP","SPAIN" -"3645764080","3645764080","DE","DEU","GERMANY" -"3645764081","3645764081","GB","GBR","UNITED KINGDOM" -"3645764082","3645764084","DE","DEU","GERMANY" -"3645764085","3645764085","IE","IRL","IRELAND" -"3645764086","3645764086","IT","ITA","ITALY" -"3645764087","3645764087","CH","CHE","SWITZERLAND" -"3645764088","3645764091","DE","DEU","GERMANY" -"3645764092","3645764092","FR","FRA","FRANCE" -"3645764093","3645764093","DE","DEU","GERMANY" -"3645764094","3645764094","IT","ITA","ITALY" -"3645764095","3645764097","DE","DEU","GERMANY" -"3645764098","3645764098","IT","ITA","ITALY" -"3645764099","3645764099","DE","DEU","GERMANY" -"3645764100","3645764100","BE","BEL","BELGIUM" -"3645764101","3645764102","DE","DEU","GERMANY" -"3645764103","3645764103","SK","SVK","SLOVAKIA" -"3645764104","3645764105","IT","ITA","ITALY" -"3645764106","3645764106","NL","NLD","NETHERLANDS" -"3645764107","3645764107","GR","GRC","GREECE" -"3645764108","3645764108","PL","POL","POLAND" -"3645764109","3645764109","CH","CHE","SWITZERLAND" -"3645764110","3645764110","DK","DNK","DENMARK" -"3645764111","3645764111","DE","DEU","GERMANY" -"3645764112","3645764112","IT","ITA","ITALY" -"3645764113","3645764114","ES","ESP","SPAIN" -"3645764115","3645764115","GB","GBR","UNITED KINGDOM" -"3645764116","3645764116","GR","GRC","GREECE" -"3645764117","3645764117","DE","DEU","GERMANY" -"3645764118","3645764118","GB","GBR","UNITED KINGDOM" -"3645764119","3645764119","CH","CHE","SWITZERLAND" -"3645764120","3645764120","FR","FRA","FRANCE" -"3645764121","3645764121","IT","ITA","ITALY" -"3645764122","3645764122","DE","DEU","GERMANY" -"3645764123","3645764123","PL","POL","POLAND" -"3645764124","3645764124","DE","DEU","GERMANY" -"3645764125","3645764125","NO","NOR","NORWAY" -"3645764126","3645764126","LU","LUX","LUXEMBOURG" -"3645764127","3645764127","GB","GBR","UNITED KINGDOM" -"3645764128","3645764128","GR","GRC","GREECE" -"3645764129","3645764129","HR","HRV","CROATIA" -"3645764130","3645764130","FR","FRA","FRANCE" -"3645764131","3645764131","DE","DEU","GERMANY" -"3645764132","3645764132","ES","ESP","SPAIN" -"3645764133","3645764133","CY","CYP","CYPRUS" -"3645764134","3645764134","DE","DEU","GERMANY" -"3645764135","3645764135","IT","ITA","ITALY" -"3645764136","3645764136","BE","BEL","BELGIUM" -"3645764137","3645764137","DE","DEU","GERMANY" -"3645764138","3645764138","CH","CHE","SWITZERLAND" -"3645764139","3645764140","DE","DEU","GERMANY" -"3645764141","3645764141","ES","ESP","SPAIN" -"3645764142","3645764142","HU","HUN","HUNGARY" -"3645764143","3645764145","DE","DEU","GERMANY" -"3645764146","3645764147","NL","NLD","NETHERLANDS" -"3645764148","3645764148","DK","DNK","DENMARK" -"3645764149","3645764149","DE","DEU","GERMANY" -"3645764150","3645764150","ES","ESP","SPAIN" -"3645764151","3645764154","DE","DEU","GERMANY" -"3645764155","3645764155","ES","ESP","SPAIN" -"3645764156","3645764156","AT","AUT","AUSTRIA" -"3645764157","3645764158","DE","DEU","GERMANY" -"3645764159","3645764159","IT","ITA","ITALY" -"3645764160","3645764160","BE","BEL","BELGIUM" -"3645764161","3645764161","ES","ESP","SPAIN" -"3645764162","3645764162","DE","DEU","GERMANY" -"3645764163","3645764163","NL","NLD","NETHERLANDS" -"3645764164","3645764164","DE","DEU","GERMANY" -"3645764165","3645764165","CH","CHE","SWITZERLAND" -"3645764166","3645764166","HU","HUN","HUNGARY" -"3645764167","3645764167","DE","DEU","GERMANY" -"3645764168","3645764168","ES","ESP","SPAIN" -"3645764169","3645764169","GR","GRC","GREECE" -"3645764170","3645764170","IT","ITA","ITALY" -"3645764171","3645764172","DE","DEU","GERMANY" -"3645764173","3645764173","IT","ITA","ITALY" -"3645764174","3645764174","DE","DEU","GERMANY" -"3645764175","3645764175","PL","POL","POLAND" -"3645764176","3645764176","DE","DEU","GERMANY" -"3645764177","3645764177","GB","GBR","UNITED KINGDOM" -"3645764178","3645764178","ES","ESP","SPAIN" -"3645764179","3645764179","GR","GRC","GREECE" -"3645764180","3645764181","DE","DEU","GERMANY" -"3645764182","3645764182","FR","FRA","FRANCE" -"3645764183","3645764184","DE","DEU","GERMANY" -"3645764185","3645764185","IT","ITA","ITALY" -"3645764186","3645764186","FR","FRA","FRANCE" -"3645764187","3645764187","BE","BEL","BELGIUM" -"3645764188","3645764188","GB","GBR","UNITED KINGDOM" -"3645764189","3645764189","FR","FRA","FRANCE" -"3645764190","3645764190","IT","ITA","ITALY" -"3645764191","3645764191","GB","GBR","UNITED KINGDOM" -"3645764192","3645764192","DE","DEU","GERMANY" -"3645764193","3645764194","ES","ESP","SPAIN" -"3645764195","3645764195","DE","DEU","GERMANY" -"3645764196","3645764196","IT","ITA","ITALY" -"3645764197","3645764197","DE","DEU","GERMANY" -"3645764198","3645764198","GR","GRC","GREECE" -"3645764199","3645764199","DE","DEU","GERMANY" -"3645764200","3645764200","IT","ITA","ITALY" -"3645764201","3645764201","BE","BEL","BELGIUM" -"3645764202","3645764202","IT","ITA","ITALY" -"3645764203","3645764203","DE","DEU","GERMANY" -"3645764204","3645764204","ES","ESP","SPAIN" -"3645764205","3645764205","FR","FRA","FRANCE" -"3645764206","3645764206","DE","DEU","GERMANY" -"3645764207","3645764207","IT","ITA","ITALY" -"3645764208","3645764208","NO","NOR","NORWAY" -"3645764209","3645764210","DE","DEU","GERMANY" -"3645764211","3645764211","FR","FRA","FRANCE" -"3645764212","3645764212","NL","NLD","NETHERLANDS" -"3645764213","3645764213","GB","GBR","UNITED KINGDOM" -"3645764214","3645764214","NL","NLD","NETHERLANDS" -"3645764215","3645764216","DE","DEU","GERMANY" -"3645764217","3645764217","IT","ITA","ITALY" -"3645764218","3645764218","CH","CHE","SWITZERLAND" -"3645764219","3645764219","FR","FRA","FRANCE" -"3645764220","3645764220","NL","NLD","NETHERLANDS" -"3645764221","3645764221","IT","ITA","ITALY" -"3645764222","3645764222","BE","BEL","BELGIUM" -"3645764223","3645764224","ES","ESP","SPAIN" -"3645764225","3645764226","GB","GBR","UNITED KINGDOM" -"3645764227","3645764227","CH","CHE","SWITZERLAND" -"3645764228","3645764228","FR","FRA","FRANCE" -"3645764229","3645764229","PL","POL","POLAND" -"3645764230","3645764230","NL","NLD","NETHERLANDS" -"3645764231","3645764231","CH","CHE","SWITZERLAND" -"3645764232","3645764234","DE","DEU","GERMANY" -"3645764235","3645764235","FR","FRA","FRANCE" -"3645764236","3645764236","IT","ITA","ITALY" -"3645764237","3645764238","DE","DEU","GERMANY" -"3645764239","3645764240","ES","ESP","SPAIN" -"3645764241","3645764241","DE","DEU","GERMANY" -"3645764242","3645764242","AT","AUT","AUSTRIA" -"3645764243","3645764243","GR","GRC","GREECE" -"3645764244","3645764244","FR","FRA","FRANCE" -"3645764245","3645764246","NL","NLD","NETHERLANDS" -"3645764247","3645764247","IT","ITA","ITALY" -"3645764248","3645764250","DE","DEU","GERMANY" -"3645764251","3645764251","FR","FRA","FRANCE" -"3645764252","3645764253","ES","ESP","SPAIN" -"3645764254","3645764254","DE","DEU","GERMANY" -"3645764255","3645764255","CH","CHE","SWITZERLAND" -"3645764256","3645764257","DE","DEU","GERMANY" -"3645764258","3645764258","NL","NLD","NETHERLANDS" -"3645764259","3645764259","IT","ITA","ITALY" -"3645764260","3645764260","DE","DEU","GERMANY" -"3645764261","3645764261","GB","GBR","UNITED KINGDOM" -"3645764262","3645764262","BE","BEL","BELGIUM" -"3645764263","3645764264","IT","ITA","ITALY" -"3645764265","3645764265","TR","TUR","TURKEY" -"3645764266","3645764268","DE","DEU","GERMANY" -"3645764269","3645764270","ES","ESP","SPAIN" -"3645764271","3645764271","IT","ITA","ITALY" -"3645764272","3645764272","DE","DEU","GERMANY" -"3645764273","3645764273","IT","ITA","ITALY" -"3645764274","3645764274","DE","DEU","GERMANY" -"3645764275","3645764275","FR","FRA","FRANCE" -"3645764276","3645764277","DE","DEU","GERMANY" -"3645764278","3645764278","NL","NLD","NETHERLANDS" -"3645764279","3645764279","ES","ESP","SPAIN" -"3645764280","3645764280","IT","ITA","ITALY" -"3645764281","3645764281","DE","DEU","GERMANY" -"3645764282","3645764282","NL","NLD","NETHERLANDS" -"3645764283","3645764284","FR","FRA","FRANCE" -"3645764285","3645764285","IT","ITA","ITALY" -"3645764286","3645764286","NL","NLD","NETHERLANDS" -"3645764287","3645764287","BE","BEL","BELGIUM" -"3645764288","3645764288","FR","FRA","FRANCE" -"3645764289","3645764289","NL","NLD","NETHERLANDS" -"3645764290","3645764290","DE","DEU","GERMANY" -"3645764291","3645764291","NL","NLD","NETHERLANDS" -"3645764292","3645764292","FR","FRA","FRANCE" -"3645764293","3645764294","IT","ITA","ITALY" -"3645764295","3645764295","ES","ESP","SPAIN" -"3645764296","3645764297","DE","DEU","GERMANY" -"3645764298","3645764298","GR","GRC","GREECE" -"3645764299","3645764299","NL","NLD","NETHERLANDS" -"3645764300","3645764300","PL","POL","POLAND" -"3645764301","3645764301","GR","GRC","GREECE" -"3645764302","3645764302","IT","ITA","ITALY" -"3645764303","3645764303","DE","DEU","GERMANY" -"3645764304","3645764304","ES","ESP","SPAIN" -"3645764305","3645764305","GB","GBR","UNITED KINGDOM" -"3645764306","3645764306","BM","BMU","BERMUDA" -"3645764307","3645764307","NL","NLD","NETHERLANDS" -"3645764308","3645764308","DE","DEU","GERMANY" -"3645764309","3645764309","CH","CHE","SWITZERLAND" -"3645764310","3645764310","ZA","ZAF","SOUTH AFRICA" -"3645764311","3645764313","ES","ESP","SPAIN" -"3645764314","3645764315","DE","DEU","GERMANY" -"3645764316","3645764316","IT","ITA","ITALY" -"3645764317","3645764317","ES","ESP","SPAIN" -"3645764318","3645764318","HU","HUN","HUNGARY" -"3645764319","3645764319","FR","FRA","FRANCE" -"3645764320","3645764320","IT","ITA","ITALY" -"3645764321","3645764321","DE","DEU","GERMANY" -"3645764322","3645764322","CH","CHE","SWITZERLAND" -"3645764323","3645764323","DE","DEU","GERMANY" -"3645764324","3645764324","FR","FRA","FRANCE" -"3645764325","3645764325","DE","DEU","GERMANY" -"3645764326","3645764326","ES","ESP","SPAIN" -"3645764327","3645764327","DK","DNK","DENMARK" -"3645764328","3645764328","CH","CHE","SWITZERLAND" -"3645764329","3645764329","ES","ESP","SPAIN" -"3645764330","3645764330","DE","DEU","GERMANY" -"3645764331","3645764331","RU","RUS","RUSSIAN FEDERATION" -"3645764332","3645764332","NL","NLD","NETHERLANDS" -"3645764333","3645764333","GR","GRC","GREECE" -"3645764334","3645764334","ES","ESP","SPAIN" -"3645764335","3645764335","DE","DEU","GERMANY" -"3645764336","3645764336","MY","MYS","MALAYSIA" -"3645764337","3645764337","HU","HUN","HUNGARY" -"3645764338","3645764338","NL","NLD","NETHERLANDS" -"3645764339","3645764340","DE","DEU","GERMANY" -"3645764341","3645764341","IE","IRL","IRELAND" -"3645764342","3645764342","IT","ITA","ITALY" -"3645764343","3645764343","ES","ESP","SPAIN" -"3645764344","3645764345","DE","DEU","GERMANY" -"3645764346","3645764346","IT","ITA","ITALY" -"3645764347","3645764347","IE","IRL","IRELAND" -"3645764348","3645764348","NL","NLD","NETHERLANDS" -"3645764349","3645764349","BE","BEL","BELGIUM" -"3645764350","3645764350","IT","ITA","ITALY" -"3645764351","3645764356","DE","DEU","GERMANY" -"3645764357","3645764357","RU","RUS","RUSSIAN FEDERATION" -"3645764358","3645764358","FR","FRA","FRANCE" -"3645764359","3645764359","IT","ITA","ITALY" -"3645764360","3645764360","DE","DEU","GERMANY" -"3645764361","3645764361","CH","CHE","SWITZERLAND" -"3645764362","3645764362","GB","GBR","UNITED KINGDOM" -"3645764363","3645764364","NL","NLD","NETHERLANDS" -"3645764365","3645764365","BE","BEL","BELGIUM" -"3645764366","3645764367","DE","DEU","GERMANY" -"3645764368","3645764368","IT","ITA","ITALY" -"3645764369","3645764369","DE","DEU","GERMANY" -"3645764370","3645764370","GB","GBR","UNITED KINGDOM" -"3645764371","3645764371","ES","ESP","SPAIN" -"3645764372","3645764373","FR","FRA","FRANCE" -"3645764374","3645764375","DE","DEU","GERMANY" -"3645764376","3645764377","NL","NLD","NETHERLANDS" -"3645764378","3645764378","DE","DEU","GERMANY" -"3645764379","3645764380","GB","GBR","UNITED KINGDOM" -"3645764381","3645764381","DE","DEU","GERMANY" -"3645764382","3645764382","NL","NLD","NETHERLANDS" -"3645764383","3645764383","FR","FRA","FRANCE" -"3645764384","3645764384","AT","AUT","AUSTRIA" -"3645764385","3645764388","DE","DEU","GERMANY" -"3645764389","3645764389","NL","NLD","NETHERLANDS" -"3645764390","3645764390","DE","DEU","GERMANY" -"3645764391","3645764391","NL","NLD","NETHERLANDS" -"3645764392","3645764392","GR","GRC","GREECE" -"3645764393","3645764393","DE","DEU","GERMANY" -"3645764394","3645764394","FR","FRA","FRANCE" -"3645764395","3645764396","NL","NLD","NETHERLANDS" -"3645764397","3645764397","DE","DEU","GERMANY" -"3645764398","3645764398","NL","NLD","NETHERLANDS" -"3645764399","3645764399","DE","DEU","GERMANY" -"3645764400","3645764401","NL","NLD","NETHERLANDS" -"3645764402","3645764403","FR","FRA","FRANCE" -"3645764404","3645764406","NL","NLD","NETHERLANDS" -"3645764407","3645764408","DE","DEU","GERMANY" -"3645764409","3645764409","FR","FRA","FRANCE" -"3645764410","3645764410","DE","DEU","GERMANY" -"3645764411","3645764411","FR","FRA","FRANCE" -"3645764412","3645764412","NL","NLD","NETHERLANDS" -"3645764413","3645764413","FR","FRA","FRANCE" -"3645764414","3645764417","NL","NLD","NETHERLANDS" -"3645764418","3645764418","DE","DEU","GERMANY" -"3645764419","3645764419","NL","NLD","NETHERLANDS" -"3645764420","3645764420","GB","GBR","UNITED KINGDOM" -"3645764421","3645764421","DE","DEU","GERMANY" -"3645764422","3645764422","IT","ITA","ITALY" -"3645764423","3645764423","HU","HUN","HUNGARY" -"3645764424","3645764424","DE","DEU","GERMANY" -"3645764425","3645764425","GB","GBR","UNITED KINGDOM" -"3645764426","3645764433","DE","DEU","GERMANY" -"3645764434","3645764434","NL","NLD","NETHERLANDS" -"3645764435","3645764435","AT","AUT","AUSTRIA" -"3645764436","3645764436","NL","NLD","NETHERLANDS" -"3645764437","3645764437","FR","FRA","FRANCE" -"3645764438","3645764439","DE","DEU","GERMANY" -"3645764440","3645764440","CH","CHE","SWITZERLAND" -"3645764441","3645764441","DE","DEU","GERMANY" -"3645764442","3645764442","IT","ITA","ITALY" -"3645764443","3645764444","DE","DEU","GERMANY" -"3645764445","3645764445","GB","GBR","UNITED KINGDOM" -"3645764446","3645764446","NL","NLD","NETHERLANDS" -"3645764447","3645764456","DE","DEU","GERMANY" -"3645764457","3645764457","IT","ITA","ITALY" -"3645764458","3645764458","AT","AUT","AUSTRIA" -"3645764459","3645764459","IT","ITA","ITALY" -"3645764460","3645764462","DE","DEU","GERMANY" -"3645764463","3645764463","NL","NLD","NETHERLANDS" -"3645764464","3645764464","BE","BEL","BELGIUM" -"3645764465","3645764465","DE","DEU","GERMANY" -"3645764466","3645764466","GR","GRC","GREECE" -"3645764467","3645764467","DE","DEU","GERMANY" -"3645764468","3645764468","IT","ITA","ITALY" -"3645764469","3645764470","DE","DEU","GERMANY" -"3645764471","3645764471","IT","ITA","ITALY" -"3645764472","3645764472","GR","GRC","GREECE" -"3645764473","3645764473","NL","NLD","NETHERLANDS" -"3645764474","3645764474","DE","DEU","GERMANY" -"3645764475","3645764475","GR","GRC","GREECE" -"3645764476","3645764476","DE","DEU","GERMANY" -"3645764477","3645764477","NL","NLD","NETHERLANDS" -"3645764478","3645764478","GB","GBR","UNITED KINGDOM" -"3645764479","3645764479","DE","DEU","GERMANY" -"3645764480","3645764481","NL","NLD","NETHERLANDS" -"3645764482","3645764482","DE","DEU","GERMANY" -"3645764483","3645764483","NL","NLD","NETHERLANDS" -"3645764484","3645764484","FR","FRA","FRANCE" -"3645764485","3645764485","NL","NLD","NETHERLANDS" -"3645764486","3645764486","IE","IRL","IRELAND" -"3645764487","3645764487","DE","DEU","GERMANY" -"3645764488","3645764490","NL","NLD","NETHERLANDS" -"3645764491","3645764491","DE","DEU","GERMANY" -"3645764492","3645764492","NL","NLD","NETHERLANDS" -"3645764493","3645764493","ES","ESP","SPAIN" -"3645764494","3645764494","FR","FRA","FRANCE" -"3645764495","3645764495","NL","NLD","NETHERLANDS" -"3645764496","3645764496","DE","DEU","GERMANY" -"3645764497","3645764497","NL","NLD","NETHERLANDS" -"3645764498","3645764498","FR","FRA","FRANCE" -"3645764499","3645764500","NL","NLD","NETHERLANDS" -"3645764501","3645764501","DE","DEU","GERMANY" -"3645764502","3645764505","NL","NLD","NETHERLANDS" -"3645764506","3645764506","DE","DEU","GERMANY" -"3645764507","3645764507","ES","ESP","SPAIN" -"3645764508","3645764508","IT","ITA","ITALY" -"3645764509","3645764509","NL","NLD","NETHERLANDS" -"3645764510","3645764510","DE","DEU","GERMANY" -"3645764511","3645764511","NL","NLD","NETHERLANDS" -"3645764512","3645764512","DE","DEU","GERMANY" -"3645764513","3645764513","NL","NLD","NETHERLANDS" -"3645764514","3645764514","ES","ESP","SPAIN" -"3645764515","3645764515","DE","DEU","GERMANY" -"3645764516","3645764516","NL","NLD","NETHERLANDS" -"3645764517","3645764518","DE","DEU","GERMANY" -"3645764519","3645764522","NL","NLD","NETHERLANDS" -"3645764523","3645764523","DE","DEU","GERMANY" -"3645764524","3645764531","NL","NLD","NETHERLANDS" -"3645764532","3645764532","DE","DEU","GERMANY" -"3645764533","3645764535","NL","NLD","NETHERLANDS" -"3645764536","3645764536","IT","ITA","ITALY" -"3645764537","3645764539","NL","NLD","NETHERLANDS" -"3645764540","3645764540","DE","DEU","GERMANY" -"3645764541","3645764541","IT","ITA","ITALY" -"3645764542","3645764549","NL","NLD","NETHERLANDS" -"3645764550","3645764550","DE","DEU","GERMANY" -"3645764551","3645764551","GR","GRC","GREECE" -"3645764552","3645764553","DE","DEU","GERMANY" -"3645764554","3645764554","NL","NLD","NETHERLANDS" -"3645764555","3645764555","DE","DEU","GERMANY" -"3645764556","3645764556","CH","CHE","SWITZERLAND" -"3645764557","3645764557","NL","NLD","NETHERLANDS" -"3645764558","3645764561","DE","DEU","GERMANY" -"3645764562","3645764562","FR","FRA","FRANCE" -"3645764563","3645764563","ES","ESP","SPAIN" -"3645764564","3645764565","NL","NLD","NETHERLANDS" -"3645764566","3645764566","DE","DEU","GERMANY" -"3645764567","3645764568","NL","NLD","NETHERLANDS" -"3645764569","3645764569","DE","DEU","GERMANY" -"3645764570","3645764570","MA","MAR","MOROCCO" -"3645764571","3645765127","DE","DEU","GERMANY" -"3645765128","3645765131","GR","GRC","GREECE" -"3645765132","3645765135","DE","DEU","GERMANY" -"3645765136","3645765139","BE","BEL","BELGIUM" -"3645765140","3645765143","IT","ITA","ITALY" -"3645765144","3645765147","DE","DEU","GERMANY" -"3645765148","3645765151","IT","ITA","ITALY" -"3645765152","3645765155","BE","BEL","BELGIUM" -"3645765156","3645765171","IT","ITA","ITALY" -"3645765172","3645765175","NO","NOR","NORWAY" -"3645765176","3645765179","DE","DEU","GERMANY" -"3645765180","3645765183","FR","FRA","FRANCE" -"3645765184","3645765187","GR","GRC","GREECE" -"3645765188","3645765195","DE","DEU","GERMANY" -"3645765196","3645765199","CH","CHE","SWITZERLAND" -"3645765200","3645765207","GB","GBR","UNITED KINGDOM" -"3645765208","3645765211","FR","FRA","FRANCE" -"3645765212","3645765219","ES","ESP","SPAIN" -"3645765220","3645765223","PL","POL","POLAND" -"3645765224","3645765227","BE","BEL","BELGIUM" -"3645765228","3645765231","GB","GBR","UNITED KINGDOM" -"3645765232","3645765235","IT","ITA","ITALY" -"3645765236","3645765239","FR","FRA","FRANCE" -"3645765240","3645765243","GB","GBR","UNITED KINGDOM" -"3645765244","3645765247","IT","ITA","ITALY" -"3645765248","3645765251","ES","ESP","SPAIN" -"3645765252","3645765255","DE","DEU","GERMANY" -"3645765256","3645765259","GR","GRC","GREECE" -"3645765260","3645765263","PL","POL","POLAND" -"3645765264","3645765267","IT","ITA","ITALY" -"3645765268","3645765271","PL","POL","POLAND" -"3645765272","3645765275","IT","ITA","ITALY" -"3645765276","3645765279","FR","FRA","FRANCE" -"3645765280","3645765283","DE","DEU","GERMANY" -"3645765284","3645765287","ES","ESP","SPAIN" -"3645765288","3645765295","DE","DEU","GERMANY" -"3645765296","3645765299","ES","ESP","SPAIN" -"3645765300","3645765303","FR","FRA","FRANCE" -"3645765304","3645765311","IT","ITA","ITALY" -"3645765312","3645765315","TR","TUR","TURKEY" -"3645765316","3645765319","IT","ITA","ITALY" -"3645765320","3645765323","FR","FRA","FRANCE" -"3645765324","3645765331","ES","ESP","SPAIN" -"3645765332","3645765335","FR","FRA","FRANCE" -"3645765336","3645765339","IT","ITA","ITALY" -"3645765340","3645765343","FR","FRA","FRANCE" -"3645765344","3645765347","PL","POL","POLAND" -"3645765348","3645765351","GR","GRC","GREECE" -"3645765352","3645765355","IT","ITA","ITALY" -"3645765356","3645765359","ES","ESP","SPAIN" -"3645765360","3645765363","FR","FRA","FRANCE" -"3645765364","3645765367","ES","ESP","SPAIN" -"3645765368","3645765371","IT","ITA","ITALY" -"3645765372","3645765375","CH","CHE","SWITZERLAND" -"3645765376","3645765379","DE","DEU","GERMANY" -"3645765380","3645765383","BM","BMU","BERMUDA" -"3645765384","3645765387","NL","NLD","NETHERLANDS" -"3645765388","3645765391","DE","DEU","GERMANY" -"3645765392","3645765403","ES","ESP","SPAIN" -"3645765404","3645765407","GR","GRC","GREECE" -"3645765408","3645765411","DK","DNK","DENMARK" -"3645765412","3645765415","IT","ITA","ITALY" -"3645765416","3645765419","FR","FRA","FRANCE" -"3645765420","3645765423","DE","DEU","GERMANY" -"3645765424","3645765427","IT","ITA","ITALY" -"3645765428","3645765443","DE","DEU","GERMANY" -"3645765444","3645765447","FR","FRA","FRANCE" -"3645765448","3645765451","ES","ESP","SPAIN" -"3645765452","3645765455","FR","FRA","FRANCE" -"3645765456","3645765459","AT","AUT","AUSTRIA" -"3645765460","3645765463","FR","FRA","FRANCE" -"3645765464","3645765467","GB","GBR","UNITED KINGDOM" -"3645765468","3645765471","DE","DEU","GERMANY" -"3645765472","3645765475","NL","NLD","NETHERLANDS" -"3645765476","3645765487","DE","DEU","GERMANY" -"3645765488","3645765491","HU","HUN","HUNGARY" -"3645765492","3645765495","DE","DEU","GERMANY" -"3645765496","3645765499","GB","GBR","UNITED KINGDOM" -"3645765500","3645765503","NL","NLD","NETHERLANDS" -"3645765504","3645765507","CH","CHE","SWITZERLAND" -"3645765508","3645765511","IT","ITA","ITALY" -"3645765512","3645765519","GB","GBR","UNITED KINGDOM" -"3645765520","3645765523","FR","FRA","FRANCE" -"3645765524","3645765527","IT","ITA","ITALY" -"3645765528","3645765535","FR","FRA","FRANCE" -"3645765536","3645765539","SE","SWE","SWEDEN" -"3645765540","3645765543","IL","ISR","ISRAEL" -"3645765544","3645765547","BE","BEL","BELGIUM" -"3645765548","3645765555","DE","DEU","GERMANY" -"3645765556","3645765559","IT","ITA","ITALY" -"3645765560","3645765563","IE","IRL","IRELAND" -"3645765564","3645765567","ES","ESP","SPAIN" -"3645765568","3645765571","FR","FRA","FRANCE" -"3645765572","3645765575","DE","DEU","GERMANY" -"3645765576","3645765579","IT","ITA","ITALY" -"3645765580","3645765583","GB","GBR","UNITED KINGDOM" -"3645765584","3645765591","DE","DEU","GERMANY" -"3645765592","3645765595","IE","IRL","IRELAND" -"3645765596","3645765611","DE","DEU","GERMANY" -"3645765612","3645765615","IT","ITA","ITALY" -"3645765616","3645765619","GB","GBR","UNITED KINGDOM" -"3645765620","3645765623","CH","CHE","SWITZERLAND" -"3645765624","3645765627","FR","FRA","FRANCE" -"3645765628","3645765639","DE","DEU","GERMANY" -"3645765640","3645765643","DK","DNK","DENMARK" -"3645765644","3645765647","GB","GBR","UNITED KINGDOM" -"3645765648","3645765651","NL","NLD","NETHERLANDS" -"3645765652","3645765667","DE","DEU","GERMANY" -"3645765668","3645765675","FR","FRA","FRANCE" -"3645765676","3645765679","DE","DEU","GERMANY" -"3645765680","3645765683","FR","FRA","FRANCE" -"3645765684","3645765687","NL","NLD","NETHERLANDS" -"3645765688","3645765691","FR","FRA","FRANCE" -"3645765692","3645765695","CH","CHE","SWITZERLAND" -"3645765696","3645765703","IT","ITA","ITALY" -"3645765704","3645765707","DE","DEU","GERMANY" -"3645765708","3645765711","FR","FRA","FRANCE" -"3645765712","3645765715","DE","DEU","GERMANY" -"3645765716","3645765719","FR","FRA","FRANCE" -"3645765720","3645766401","DE","DEU","GERMANY" -"3645766402","3645766407","US","USA","UNITED STATES" -"3645766408","3645767187","DE","DEU","GERMANY" -"3645767188","3645767188","US","USA","UNITED STATES" -"3645767189","3645767193","DE","DEU","GERMANY" -"3645767194","3645767194","US","USA","UNITED STATES" -"3645767195","3645767195","DE","DEU","GERMANY" -"3645767196","3645767196","US","USA","UNITED STATES" -"3645767197","3645767197","DE","DEU","GERMANY" -"3645767198","3645767198","US","USA","UNITED STATES" -"3645767199","3645767208","DE","DEU","GERMANY" -"3645767209","3645767209","US","USA","UNITED STATES" -"3645767210","3645767222","DE","DEU","GERMANY" -"3645767223","3645767223","US","USA","UNITED STATES" -"3645767224","3645767240","DE","DEU","GERMANY" -"3645767241","3645767241","US","USA","UNITED STATES" -"3645767242","3645767426","DE","DEU","GERMANY" -"3645767427","3645767427","US","USA","UNITED STATES" -"3645767428","3645767428","DE","DEU","GERMANY" -"3645767429","3645767429","US","USA","UNITED STATES" -"3645767430","3645767431","DE","DEU","GERMANY" -"3645767432","3645767433","US","USA","UNITED STATES" -"3645767434","3645767434","CA","CAN","CANADA" -"3645767435","3645767448","US","USA","UNITED STATES" -"3645767449","3645767449","DE","DEU","GERMANY" -"3645767450","3645767455","US","USA","UNITED STATES" -"3645767456","3645767502","DE","DEU","GERMANY" -"3645767503","3645767503","US","USA","UNITED STATES" -"3645767504","3645767679","DE","DEU","GERMANY" -"3645767680","3645771775","IE","IRL","IRELAND" -"3645771776","3645779967","SE","SWE","SWEDEN" -"3645779968","3645784063","PS","PSE","PALESTINIAN TERRITORY, OCCUPIED" -"3645788160","3645792255","GB","GBR","UNITED KINGDOM" -"3645792256","3645796351","NO","NOR","NORWAY" -"3645796352","3645800447","CH","CHE","SWITZERLAND" -"3645800448","3645804543","DE","DEU","GERMANY" -"3645804544","3645808639","GB","GBR","UNITED KINGDOM" -"3645808640","3645812735","DE","DEU","GERMANY" -"3645812736","3645816831","RU","RUS","RUSSIAN FEDERATION" -"3645816832","3645825023","FI","FIN","FINLAND" -"3645825024","3645829119","GR","GRC","GREECE" -"3645829120","3645833215","NL","NLD","NETHERLANDS" -"3645833216","3645841407","RU","RUS","RUSSIAN FEDERATION" -"3645841408","3645845503","BG","BGR","BULGARIA" -"3645845504","3645849599","RU","RUS","RUSSIAN FEDERATION" -"3645849600","3645857791","BG","BGR","BULGARIA" -"3645857792","3645865983","GB","GBR","UNITED KINGDOM" -"3645865984","3645870079","HU","HUN","HUNGARY" -"3645870080","3645874175","PL","POL","POLAND" -"3645874176","3645878271","GB","GBR","UNITED KINGDOM" -"3645878272","3645882367","DE","DEU","GERMANY" -"3645882368","3645886463","CH","CHE","SWITZERLAND" -"3645886464","3645886991","DE","DEU","GERMANY" -"3645886992","3645886995","GB","GBR","UNITED KINGDOM" -"3645886996","3645887067","DE","DEU","GERMANY" -"3645887068","3645887071","US","USA","UNITED STATES" -"3645887072","3645888127","DE","DEU","GERMANY" -"3645888128","3645888143","AT","AUT","AUSTRIA" -"3645888144","3645888159","DE","DEU","GERMANY" -"3645888160","3645888191","AT","AUT","AUSTRIA" -"3645888192","3645889791","DE","DEU","GERMANY" -"3645889792","3645889919","US","USA","UNITED STATES" -"3645889920","3645890559","DE","DEU","GERMANY" -"3645890560","3645894655","RU","RUS","RUSSIAN FEDERATION" -"3645894656","3645898751","NL","NLD","NETHERLANDS" -"3645898752","3646501711","DE","DEU","GERMANY" -"3646501712","3646501719","US","USA","UNITED STATES" -"3646501720","3646513103","DE","DEU","GERMANY" -"3646513104","3646513111","CA","CAN","CANADA" -"3646513112","3646947327","DE","DEU","GERMANY" -"3646947328","3647209471","PL","POL","POLAND" -"3647209472","3647602687","NL","NLD","NETHERLANDS" -"3647602688","3647658751","RU","RUS","RUSSIAN FEDERATION" -"3647658752","3647659007","GE","GEO","GEORGIA" -"3647659008","3647665151","RU","RUS","RUSSIAN FEDERATION" -"3647665152","3647665407","GE","GEO","GEORGIA" -"3647665408","3647722751","RU","RUS","RUSSIAN FEDERATION" -"3647722752","3647722879","BY","BLR","BELARUS" -"3647722880","3647733759","RU","RUS","RUSSIAN FEDERATION" -"3647733760","3647864831","FR","FRA","FRANCE" -"3647864832","3647916799","DE","DEU","GERMANY" -"3647916800","3647917055","SE","SWE","SWEDEN" -"3647917056","3647917599","DE","DEU","GERMANY" -"3647917600","3647917615","US","USA","UNITED STATES" -"3647917616","3647922951","DE","DEU","GERMANY" -"3647922952","3647922959","FR","FRA","FRANCE" -"3647922960","3647933823","DE","DEU","GERMANY" -"3647933824","3647933855","GB","GBR","UNITED KINGDOM" -"3647933856","3647954231","DE","DEU","GERMANY" -"3647954232","3647954239","GB","GBR","UNITED KINGDOM" -"3647954240","3647958943","DE","DEU","GERMANY" -"3647958944","3647958959","FR","FRA","FRANCE" -"3647958960","3647959567","DE","DEU","GERMANY" -"3647959568","3647959575","ES","ESP","SPAIN" -"3647959576","3647963167","DE","DEU","GERMANY" -"3647963168","3647963183","BE","BEL","BELGIUM" -"3647963184","3647963231","DE","DEU","GERMANY" -"3647963232","3647963263","BE","BEL","BELGIUM" -"3647963264","3647963647","DE","DEU","GERMANY" -"3647963648","3647963711","BE","BEL","BELGIUM" -"3647963712","3647964415","DE","DEU","GERMANY" -"3647964416","3647964567","ES","ESP","SPAIN" -"3647964568","3647964583","DE","DEU","GERMANY" -"3647964584","3647964599","ES","ESP","SPAIN" -"3647964600","3647964607","DE","DEU","GERMANY" -"3647964608","3647964615","ES","ESP","SPAIN" -"3647964616","3647964623","DE","DEU","GERMANY" -"3647964624","3647964671","ES","ESP","SPAIN" -"3647964672","3647964679","DE","DEU","GERMANY" -"3647964680","3647964703","ES","ESP","SPAIN" -"3647964704","3647965183","DE","DEU","GERMANY" -"3647965184","3647965255","ES","ESP","SPAIN" -"3647965256","3647965279","DE","DEU","GERMANY" -"3647965280","3647965303","ES","ESP","SPAIN" -"3647965304","3647965311","DE","DEU","GERMANY" -"3647965312","3647965343","ES","ESP","SPAIN" -"3647965344","3647965439","DE","DEU","GERMANY" -"3647965440","3647965695","ES","ESP","SPAIN" -"3647965696","3647965951","CH","CHE","SWITZERLAND" -"3647965952","3647966207","DE","DEU","GERMANY" -"3647966208","3647967231","GB","GBR","UNITED KINGDOM" -"3647967232","3647968255","BE","BEL","BELGIUM" -"3647968256","3647968271","FR","FRA","FRANCE" -"3647968272","3647968279","DE","DEU","GERMANY" -"3647968280","3647968463","FR","FRA","FRANCE" -"3647968464","3647968511","DE","DEU","GERMANY" -"3647968512","3647968703","FR","FRA","FRANCE" -"3647968704","3647969279","DE","DEU","GERMANY" -"3647969280","3647969791","IT","ITA","ITALY" -"3647969792","3647970111","BE","BEL","BELGIUM" -"3647970112","3647970119","DE","DEU","GERMANY" -"3647970120","3647970263","BE","BEL","BELGIUM" -"3647970264","3647970271","DE","DEU","GERMANY" -"3647970272","3647970287","BE","BEL","BELGIUM" -"3647970288","3647970303","DE","DEU","GERMANY" -"3647970304","3647971327","FR","FRA","FRANCE" -"3647971328","3647971671","GB","GBR","UNITED KINGDOM" -"3647971672","3647971679","DE","DEU","GERMANY" -"3647971680","3647972159","GB","GBR","UNITED KINGDOM" -"3647972160","3647972351","DE","DEU","GERMANY" -"3647972352","3647973375","GB","GBR","UNITED KINGDOM" -"3647973376","3647973503","IT","ITA","ITALY" -"3647973504","3647973511","DE","DEU","GERMANY" -"3647973512","3647973711","IT","ITA","ITALY" -"3647973712","3647974399","DE","DEU","GERMANY" -"3647974400","3647976447","ES","ESP","SPAIN" -"3647976448","3647995903","DE","DEU","GERMANY" -"3647995904","3648004095","RU","RUS","RUSSIAN FEDERATION" -"3648004096","3648004607","GB","GBR","UNITED KINGDOM" -"3648004608","3648004863","RU","RUS","RUSSIAN FEDERATION" -"3648004864","3648005119","GB","GBR","UNITED KINGDOM" -"3648005120","3648006271","RU","RUS","RUSSIAN FEDERATION" -"3648006272","3648006399","GB","GBR","UNITED KINGDOM" -"3648006400","3648007167","RU","RUS","RUSSIAN FEDERATION" -"3648007168","3648008191","GB","GBR","UNITED KINGDOM" -"3648008192","3648016383","FR","FRA","FRANCE" -"3648016384","3648020479","GB","GBR","UNITED KINGDOM" -"3648020480","3648024575","IT","ITA","ITALY" -"3648024576","3648028671","NL","NLD","NETHERLANDS" -"3648028672","3648032767","HU","HUN","HUNGARY" -"3648032768","3648033023","IE","IRL","IRELAND" -"3648033040","3648033087","IE","IRL","IRELAND" -"3648033104","3648033119","IE","IRL","IRELAND" -"3648033536","3648033791","IE","IRL","IRELAND" -"3648034048","3648034051","IE","IRL","IRELAND" -"3648034056","3648034095","IE","IRL","IRELAND" -"3648034176","3648034191","IE","IRL","IRELAND" -"3648034816","3648034847","DE","DEU","GERMANY" -"3648035040","3648035071","NL","NLD","NETHERLANDS" -"3648036864","3648040959","CZ","CZE","CZECH REPUBLIC" -"3648040960","3648041020","BE","BEL","BELGIUM" -"3648041021","3648041021","FR","FRA","FRANCE" -"3648041022","3648045055","BE","BEL","BELGIUM" -"3648045056","3648049151","FI","FIN","FINLAND" -"3648049152","3648053247","UA","UKR","UKRAINE" -"3648053248","3648057343","FR","FRA","FRANCE" -"3648057344","3648061439","FI","FIN","FINLAND" -"3648061440","3648069631","AM","ARM","ARMENIA" -"3648069632","3648073727","DE","DEU","GERMANY" -"3648073728","3648077823","HU","HUN","HUNGARY" -"3648077824","3648078079","BE","BEL","BELGIUM" -"3648078080","3648078335","CG","COG","CONGO" -"3648078336","3648078463","BE","BEL","BELGIUM" -"3648078464","3648078495","BF","BFA","BURKINA FASO" -"3648078496","3648078527","BE","BEL","BELGIUM" -"3648078528","3648078591","BF","BFA","BURKINA FASO" -"3648078592","3648078847","CG","COG","CONGO" -"3648078848","3648079103","BE","BEL","BELGIUM" -"3648079104","3648080383","UG","UGA","UGANDA" -"3648080384","3648080511","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"3648080512","3648080543","BF","BFA","BURKINA FASO" -"3648080544","3648080639","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"3648080640","3648080895","BE","BEL","BELGIUM" -"3648080896","3648080903","NE","NER","NIGER" -"3648080904","3648080919","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"3648080920","3648080927","GA","GAB","GABON" -"3648080928","3648080959","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"3648080960","3648080991","TD","TCD","CHAD" -"3648080992","3648081007","SL","SLE","SIERRA LEONE" -"3648081008","3648081023","BE","BEL","BELGIUM" -"3648081024","3648081055","GB","GBR","UNITED KINGDOM" -"3648081056","3648081407","BE","BEL","BELGIUM" -"3648081408","3648082175","MW","MWI","MALAWI" -"3648082176","3648082239","BE","BEL","BELGIUM" -"3648082240","3648082687","LR","LBR","LIBERIA" -"3648082688","3648085759","BE","BEL","BELGIUM" -"3648085760","3648086015","LR","LBR","LIBERIA" -"3648086016","3648090111","AT","AUT","AUSTRIA" -"3648090112","3648094207","RU","RUS","RUSSIAN FEDERATION" -"3648094208","3648102399","PL","POL","POLAND" -"3648102400","3648106495","GB","GBR","UNITED KINGDOM" -"3648106496","3648110591","DE","DEU","GERMANY" -"3648110592","3648114687","FR","FRA","FRANCE" -"3648114688","3648118783","IT","ITA","ITALY" -"3648118784","3648122879","PL","POL","POLAND" -"3648122880","3648126975","ES","ESP","SPAIN" -"3648126976","3648139263","RU","RUS","RUSSIAN FEDERATION" -"3648139264","3648143359","GB","GBR","UNITED KINGDOM" -"3648143360","3648147455","DE","DEU","GERMANY" -"3648147456","3648149503","SE","SWE","SWEDEN" -"3648149504","3648150015","GB","GBR","UNITED KINGDOM" -"3648150016","3648150271","SE","SWE","SWEDEN" -"3648150272","3648150527","FI","FIN","FINLAND" -"3648150528","3648150783","DK","DNK","DENMARK" -"3648150784","3648151039","NO","NOR","NORWAY" -"3648151040","3648151551","SE","SWE","SWEDEN" -"3648151552","3648155647","NL","NLD","NETHERLANDS" -"3648155648","3648159743","CH","CHE","SWITZERLAND" -"3648159744","3648163839","ES","ESP","SPAIN" -"3648163840","3648167935","RU","RUS","RUSSIAN FEDERATION" -"3648167936","3648172031","IE","IRL","IRELAND" -"3648172032","3648176127","RU","RUS","RUSSIAN FEDERATION" -"3648176128","3648178687","FR","FRA","FRANCE" -"3648178688","3648178815","LU","LUX","LUXEMBOURG" -"3648178816","3648180223","FR","FRA","FRANCE" -"3648180224","3648180767","DE","DEU","GERMANY" -"3648180768","3648180799","AT","AUT","AUSTRIA" -"3648180800","3648181023","DE","DEU","GERMANY" -"3648181024","3648181055","AT","AUT","AUSTRIA" -"3648181056","3648181311","DE","DEU","GERMANY" -"3648181312","3648181343","AT","AUT","AUSTRIA" -"3648181344","3648181375","DE","DEU","GERMANY" -"3648181376","3648181407","RU","RUS","RUSSIAN FEDERATION" -"3648181408","3648181423","DE","DEU","GERMANY" -"3648181424","3648181439","CH","CHE","SWITZERLAND" -"3648181440","3648181631","DE","DEU","GERMANY" -"3648181632","3648181647","AT","AUT","AUSTRIA" -"3648181648","3648181655","DE","DEU","GERMANY" -"3648181656","3648181663","IT","ITA","ITALY" -"3648181664","3648181887","DE","DEU","GERMANY" -"3648181888","3648181903","AT","AUT","AUSTRIA" -"3648181904","3648182143","DE","DEU","GERMANY" -"3648182144","3648182159","NL","NLD","NETHERLANDS" -"3648182160","3648182175","DE","DEU","GERMANY" -"3648182176","3648182207","RU","RUS","RUSSIAN FEDERATION" -"3648182208","3648182271","GB","GBR","UNITED KINGDOM" -"3648182272","3648182303","CH","CHE","SWITZERLAND" -"3648182304","3648182335","IT","ITA","ITALY" -"3648182336","3648182591","DE","DEU","GERMANY" -"3648182592","3648182623","AT","AUT","AUSTRIA" -"3648182624","3648182655","CH","CHE","SWITZERLAND" -"3648182656","3648182783","DE","DEU","GERMANY" -"3648182784","3648182799","IT","ITA","ITALY" -"3648182800","3648182815","AT","AUT","AUSTRIA" -"3648182816","3648182823","US","USA","UNITED STATES" -"3648182824","3648182831","RU","RUS","RUSSIAN FEDERATION" -"3648182832","3648182847","DE","DEU","GERMANY" -"3648182848","3648182911","IT","ITA","ITALY" -"3648182912","3648183871","DE","DEU","GERMANY" -"3648183872","3648183935","GB","GBR","UNITED KINGDOM" -"3648183936","3648184319","DE","DEU","GERMANY" -"3648184320","3648192511","RU","RUS","RUSSIAN FEDERATION" -"3648192512","3648196607","DE","DEU","GERMANY" -"3648196608","3648200703","IT","ITA","ITALY" -"3648200704","3648208895","SE","SWE","SWEDEN" -"3648208896","3648212991","DE","DEU","GERMANY" -"3648212992","3648217087","RU","RUS","RUSSIAN FEDERATION" -"3648217088","3648221183","GB","GBR","UNITED KINGDOM" -"3648221184","3648225279","IE","IRL","IRELAND" -"3648225280","3648231263","DE","DEU","GERMANY" -"3648231264","3648231295","NL","NLD","NETHERLANDS" -"3648231296","3648233471","DE","DEU","GERMANY" -"3648233472","3648237567","FR","FRA","FRANCE" -"3648237568","3648241663","RU","RUS","RUSSIAN FEDERATION" -"3648241664","3648245759","NL","NLD","NETHERLANDS" -"3648245760","3648249855","RO","ROM","ROMANIA" -"3648249856","3648253951","NL","NLD","NETHERLANDS" -"3648253952","3648258047","CZ","CZE","CZECH REPUBLIC" -"3648258048","3648266239","ES","ESP","SPAIN" -"3648266240","3648270335","HU","HUN","HUNGARY" -"3648270336","3648274431","RU","RUS","RUSSIAN FEDERATION" -"3648274432","3648278527","AT","AUT","AUSTRIA" -"3648278528","3648282623","NO","NOR","NORWAY" -"3648282624","3648286719","PL","POL","POLAND" -"3648286720","3648290815","DE","DEU","GERMANY" -"3648290816","3648299007","RU","RUS","RUSSIAN FEDERATION" -"3648299008","3648303103","FI","FIN","FINLAND" -"3648303104","3648307199","AT","AUT","AUSTRIA" -"3648307200","3648311295","TR","TUR","TURKEY" -"3648311296","3648315615","DK","DNK","DENMARK" -"3648315616","3648315631","CA","CAN","CANADA" -"3648315632","3648316079","DK","DNK","DENMARK" -"3648316080","3648316087","SE","SWE","SWEDEN" -"3648316088","3648316127","DK","DNK","DENMARK" -"3648316128","3648316143","CA","CAN","CANADA" -"3648316144","3648316415","DK","DNK","DENMARK" -"3648316416","3648316671","NL","NLD","NETHERLANDS" -"3648316672","3648316927","AT","AUT","AUSTRIA" -"3648316928","3648317247","DK","DNK","DENMARK" -"3648317248","3648317263","CA","CAN","CANADA" -"3648317264","3648319527","DK","DNK","DENMARK" -"3648319528","3648319535","CH","CHE","SWITZERLAND" -"3648319536","3648321631","DK","DNK","DENMARK" -"3648321632","3648321639","CA","CAN","CANADA" -"3648321640","3648321823","DK","DNK","DENMARK" -"3648321824","3648321839","GB","GBR","UNITED KINGDOM" -"3648321840","3648323583","DK","DNK","DENMARK" -"3648327680","3648331775","LT","LTU","LITHUANIA" -"3648331776","3648339967","BE","BEL","BELGIUM" -"3648339968","3648344063","UA","UKR","UKRAINE" -"3648344064","3648348159","RU","RUS","RUSSIAN FEDERATION" -"3648348160","3648352255","DE","DEU","GERMANY" -"3648352256","3648356351","RU","RUS","RUSSIAN FEDERATION" -"3648356352","3648360447","PL","POL","POLAND" -"3648360448","3648364543","FR","FRA","FRANCE" -"3648364544","3648368639","CH","CHE","SWITZERLAND" -"3648368640","3648372735","RU","RUS","RUSSIAN FEDERATION" -"3648372736","3648376831","LU","LUX","LUXEMBOURG" -"3648376832","3648380927","CZ","CZE","CZECH REPUBLIC" -"3648380928","3648385023","NL","NLD","NETHERLANDS" -"3648385024","3648389119","RU","RUS","RUSSIAN FEDERATION" -"3648389120","3648393215","IT","ITA","ITALY" -"3648393216","3648397311","DE","DEU","GERMANY" -"3648397312","3648405503","NO","NOR","NORWAY" -"3648405504","3648413695","RU","RUS","RUSSIAN FEDERATION" -"3648413696","3648417791","SK","SVK","SLOVAKIA" -"3648417792","3648417807","AT","AUT","AUSTRIA" -"3648417808","3648417815","GB","GBR","UNITED KINGDOM" -"3648417816","3648417879","AT","AUT","AUSTRIA" -"3648417880","3648417919","GB","GBR","UNITED KINGDOM" -"3648417920","3648418047","AT","AUT","AUSTRIA" -"3648418048","3648418079","GB","GBR","UNITED KINGDOM" -"3648418080","3648418095","ES","ESP","SPAIN" -"3648418096","3648418111","GB","GBR","UNITED KINGDOM" -"3648418112","3648418135","ES","ESP","SPAIN" -"3648418136","3648418143","GB","GBR","UNITED KINGDOM" -"3648418144","3648418191","ES","ESP","SPAIN" -"3648418192","3648418207","GB","GBR","UNITED KINGDOM" -"3648418208","3648418247","ES","ESP","SPAIN" -"3648418248","3648418255","CH","CHE","SWITZERLAND" -"3648418256","3648418263","ES","ESP","SPAIN" -"3648418264","3648418271","GB","GBR","UNITED KINGDOM" -"3648418272","3648418303","ES","ESP","SPAIN" -"3648418304","3648419327","GB","GBR","UNITED KINGDOM" -"3648419328","3648419455","FR","FRA","FRANCE" -"3648419456","3648419519","IT","ITA","ITALY" -"3648419520","3648419583","ES","ESP","SPAIN" -"3648419584","3648420095","GB","GBR","UNITED KINGDOM" -"3648420096","3648420351","NL","NLD","NETHERLANDS" -"3648420352","3648420863","GB","GBR","UNITED KINGDOM" -"3648420864","3648421119","US","USA","UNITED STATES" -"3648421120","3648421375","GB","GBR","UNITED KINGDOM" -"3648421376","3648421631","DE","DEU","GERMANY" -"3648421632","3648421887","CH","CHE","SWITZERLAND" -"3648421888","3648425983","GB","GBR","UNITED KINGDOM" -"3648425984","3648430079","IT","ITA","ITALY" -"3648430080","3648434175","NL","NLD","NETHERLANDS" -"3648434176","3648438271","RU","RUS","RUSSIAN FEDERATION" -"3648438272","3648442367","CH","CHE","SWITZERLAND" -"3648442368","3648443743","SE","SWE","SWEDEN" -"3648443744","3648443759","PA","PAN","PANAMA" -"3648443760","3648446463","SE","SWE","SWEDEN" -"3648446464","3648447055","FR","FRA","FRANCE" -"3648447056","3648447063","ES","ESP","SPAIN" -"3648447064","3648449119","FR","FRA","FRANCE" -"3648449120","3648449135","ES","ESP","SPAIN" -"3648449136","3648450559","FR","FRA","FRANCE" -"3648450560","3648454655","IT","ITA","ITALY" -"3648454656","3648458751","NL","NLD","NETHERLANDS" -"3648458752","3648462847","RU","RUS","RUSSIAN FEDERATION" -"3648462848","3648466943","FI","FIN","FINLAND" -"3648466944","3648469263","DE","DEU","GERMANY" -"3648469264","3648469271","NL","NLD","NETHERLANDS" -"3648469272","3648469295","DE","DEU","GERMANY" -"3648469296","3648469311","AT","AUT","AUSTRIA" -"3648469312","3648471039","DE","DEU","GERMANY" -"3648471040","3648475135","PL","POL","POLAND" -"3648475136","3648479231","RU","RUS","RUSSIAN FEDERATION" -"3648479232","3648483327","CH","CHE","SWITZERLAND" -"3648483328","3648487423","SK","SVK","SLOVAKIA" -"3648487424","3648491519","FR","FRA","FRANCE" -"3648491520","3648495615","CH","CHE","SWITZERLAND" -"3648495616","3648499711","SE","SWE","SWEDEN" -"3648499712","3648503807","FR","FRA","FRANCE" -"3648503808","3648511999","DE","DEU","GERMANY" -"3648512000","3648516095","NL","NLD","NETHERLANDS" -"3648516096","3648517119","CS","SCG","SERBIA AND MONTENEGRO" -"3648517120","3648520191","RS","SRB","SERBIA" -"3648520192","3648782335","NL","NLD","NETHERLANDS" -"3648782336","3649044479","ES","ESP","SPAIN" -"3649044480","3649110015","FR","FRA","FRANCE" -"3649110016","3649175551","PT","PRT","PORTUGAL" -"3649175552","3649241087","ES","ESP","SPAIN" -"3649241088","3649306623","TR","TUR","TURKEY" -"3649306624","3649372159","IL","ISR","ISRAEL" -"3649372160","3649437695","IT","ITA","ITALY" -"3649437696","3649568767","GB","GBR","UNITED KINGDOM" -"3649568768","3649634303","BE","BEL","BELGIUM" -"3649634304","3649700159","GB","GBR","UNITED KINGDOM" -"3649700160","3649700247","US","USA","UNITED STATES" -"3649700248","3649700251","BB","BRB","BARBADOS" -"3649700252","3649700287","US","USA","UNITED STATES" -"3649700288","3649700863","GB","GBR","UNITED KINGDOM" -"3649700864","3649701119","US","USA","UNITED STATES" -"3649701120","3649708791","GB","GBR","UNITED KINGDOM" -"3649708792","3649709055","GD","GRD","GRENADA" -"3649709056","3649709287","GB","GBR","UNITED KINGDOM" -"3649709288","3649709295","BB","BRB","BARBADOS" -"3649709296","3649709311","AG","ATG","ANTIGUA AND BARBUDA" -"3649709312","3649709815","GB","GBR","UNITED KINGDOM" -"3649709816","3649709823","TT","TTO","TRINIDAD AND TOBAGO" -"3649709824","3649765375","GB","GBR","UNITED KINGDOM" -"3649830912","3649835007","NL","NLD","NETHERLANDS" -"3649835008","3649839103","ES","ESP","SPAIN" -"3649839104","3649847295","GB","GBR","UNITED KINGDOM" -"3649847296","3649855487","DE","DEU","GERMANY" -"3649855488","3649856511","GB","GBR","UNITED KINGDOM" -"3649856512","3649857023","US","USA","UNITED STATES" -"3649857024","3649857535","GB","GBR","UNITED KINGDOM" -"3649857536","3649858047","JP","JPN","JAPAN" -"3649858048","3649859071","GB","GBR","UNITED KINGDOM" -"3649859072","3649859583","US","USA","UNITED STATES" -"3649859584","3649863679","SE","SWE","SWEDEN" -"3649863680","3649896447","FI","FIN","FINLAND" -"3649896448","3649961983","IT","ITA","ITALY" -"3649961984","3650093055","SE","SWE","SWEDEN" -"3650093056","3650097151","JO","JOR","JORDAN" -"3650097152","3650101247","SK","SVK","SLOVAKIA" -"3650101248","3650105343","DE","DEU","GERMANY" -"3650105344","3650109439","CH","CHE","SWITZERLAND" -"3650109440","3650113535","UA","UKR","UKRAINE" -"3650113536","3650117631","GB","GBR","UNITED KINGDOM" -"3650117632","3650121727","RU","RUS","RUSSIAN FEDERATION" -"3650121728","3650125823","FR","FRA","FRANCE" -"3650125824","3650129743","DE","DEU","GERMANY" -"3650129744","3650129751","IE","IRL","IRELAND" -"3650129752","3650129919","DE","DEU","GERMANY" -"3650129920","3650134015","GB","GBR","UNITED KINGDOM" -"3650134016","3650142207","RU","RUS","RUSSIAN FEDERATION" -"3650142208","3650150399","PL","POL","POLAND" -"3650150400","3650158591","NO","NOR","NORWAY" -"3650158592","3650162687","MT","MLT","MALTA" -"3650162688","3650166783","RU","RUS","RUSSIAN FEDERATION" -"3650166784","3650167807","BE","BEL","BELGIUM" -"3650167808","3650168063","LU","LUX","LUXEMBOURG" -"3650168064","3650170879","BE","BEL","BELGIUM" -"3650170880","3650174975","DK","DNK","DENMARK" -"3650174976","3650179071","GB","GBR","UNITED KINGDOM" -"3650179072","3650183167","BG","BGR","BULGARIA" -"3650183168","3650187263","DE","DEU","GERMANY" -"3650187264","3650195455","GB","GBR","UNITED KINGDOM" -"3650195456","3650199551","RU","RUS","RUSSIAN FEDERATION" -"3650199552","3650203647","BG","BGR","BULGARIA" -"3650203648","3650207743","ES","ESP","SPAIN" -"3650207744","3650211839","SK","SVK","SLOVAKIA" -"3650211840","3650215935","LV","LVA","LATVIA" -"3650215936","3650220031","GB","GBR","UNITED KINGDOM" -"3650220032","3650224127","SA","SAU","SAUDI ARABIA" -"3650224128","3650225027","US","USA","UNITED STATES" -"3650225028","3650228223","IE","IRL","IRELAND" -"3650228224","3650232319","US","USA","UNITED STATES" -"3650232320","3650236415","RU","RUS","RUSSIAN FEDERATION" -"3650236416","3650240511","GB","GBR","UNITED KINGDOM" -"3650240512","3650244607","EE","EST","ESTONIA" -"3650244608","3650256895","GB","GBR","UNITED KINGDOM" -"3650256896","3650265087","DE","DEU","GERMANY" -"3650265088","3650269183","CH","CHE","SWITZERLAND" -"3650269184","3650273279","GB","GBR","UNITED KINGDOM" -"3650273280","3650277375","IT","ITA","ITALY" -"3650277376","3650281471","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3650281472","3650285567","FR","FRA","FRANCE" -"3650285568","3650289663","UA","UKR","UKRAINE" -"3650289664","3650297855","RU","RUS","RUSSIAN FEDERATION" -"3650297856","3650301951","LT","LTU","LITHUANIA" -"3650301952","3650306623","DE","DEU","GERMANY" -"3650306624","3650306639","GE","GEO","GEORGIA" -"3650306640","3650306775","DE","DEU","GERMANY" -"3650306776","3650306779","GE","GEO","GEORGIA" -"3650306780","3650306783","DE","DEU","GERMANY" -"3650306784","3650306791","AT","AUT","AUSTRIA" -"3650306792","3650306799","DE","DEU","GERMANY" -"3650306800","3650306807","AT","AUT","AUSTRIA" -"3650306808","3650306943","DE","DEU","GERMANY" -"3650306944","3650306959","GB","GBR","UNITED KINGDOM" -"3650306960","3650307007","DE","DEU","GERMANY" -"3650307008","3650307010","GB","GBR","UNITED KINGDOM" -"3650307011","3650310143","DE","DEU","GERMANY" -"3650310144","3650314239","GB","GBR","UNITED KINGDOM" -"3650314240","3650315271","DE","DEU","GERMANY" -"3650315272","3650315272","BE","BEL","BELGIUM" -"3650315273","3650316711","DE","DEU","GERMANY" -"3650316712","3650316715","FR","FRA","FRANCE" -"3650316716","3650318335","DE","DEU","GERMANY" -"3650318336","3650320383","GI","GIB","GIBRALTAR" -"3650320384","3650322431","GB","GBR","UNITED KINGDOM" -"3650322432","3650330623","IT","ITA","ITALY" -"3650330624","3650334719","UA","UKR","UKRAINE" -"3650334720","3650338815","GB","GBR","UNITED KINGDOM" -"3650338816","3650342911","FR","FRA","FRANCE" -"3650342912","3650344463","CH","CHE","SWITZERLAND" -"3650344464","3650344479","AT","AUT","AUSTRIA" -"3650344480","3650344879","CH","CHE","SWITZERLAND" -"3650344880","3650344911","PT","PRT","PORTUGAL" -"3650344912","3650345879","CH","CHE","SWITZERLAND" -"3650345880","3650345887","IM","IMN","ISLE OF MAN" -"3650345888","3650345903","AT","AUT","AUSTRIA" -"3650345904","3650345935","CH","CHE","SWITZERLAND" -"3650345936","3650345951","PT","PRT","PORTUGAL" -"3650345952","3650346207","CH","CHE","SWITZERLAND" -"3650346208","3650346239","IM","IMN","ISLE OF MAN" -"3650346240","3650347007","CH","CHE","SWITZERLAND" -"3650347008","3650351103","GE","GEO","GEORGIA" -"3650351104","3650351871","GB","GBR","UNITED KINGDOM" -"3650351872","3650351879","NL","NLD","NETHERLANDS" -"3650351880","3650351887","IT","ITA","ITALY" -"3650351888","3650351903","GB","GBR","UNITED KINGDOM" -"3650351904","3650351911","FR","FRA","FRANCE" -"3650351912","3650351919","SE","SWE","SWEDEN" -"3650351920","3650351927","DK","DNK","DENMARK" -"3650351928","3650351935","DE","DEU","GERMANY" -"3650351936","3650351943","PL","POL","POLAND" -"3650351944","3650351951","ES","ESP","SPAIN" -"3650351952","3650351959","BE","BEL","BELGIUM" -"3650351960","3650351967","ZA","ZAF","SOUTH AFRICA" -"3650351968","3650351975","PT","PRT","PORTUGAL" -"3650351976","3650351983","FI","FIN","FINLAND" -"3650351984","3650351991","NO","NOR","NORWAY" -"3650351992","3650351999","HU","HUN","HUNGARY" -"3650352000","3650352007","GB","GBR","UNITED KINGDOM" -"3650352008","3650352015","IE","IRL","IRELAND" -"3650352016","3650352127","GB","GBR","UNITED KINGDOM" -"3650352128","3650352247","DE","DEU","GERMANY" -"3650352248","3650352255","IE","IRL","IRELAND" -"3650352256","3650352271","DE","DEU","GERMANY" -"3650352272","3650352279","NL","NLD","NETHERLANDS" -"3650352280","3650352287","IT","ITA","ITALY" -"3650352288","3650352295","FR","FRA","FRANCE" -"3650352296","3650352303","SE","SWE","SWEDEN" -"3650352304","3650352311","DK","DNK","DENMARK" -"3650352312","3650352319","DE","DEU","GERMANY" -"3650352320","3650352327","PL","POL","POLAND" -"3650352328","3650352335","ES","ESP","SPAIN" -"3650352336","3650352343","BE","BEL","BELGIUM" -"3650352344","3650352351","ZA","ZAF","SOUTH AFRICA" -"3650352352","3650352359","PT","PRT","PORTUGAL" -"3650352360","3650352367","FI","FIN","FINLAND" -"3650352368","3650352375","NL","NLD","NETHERLANDS" -"3650352376","3650352383","HU","HUN","HUNGARY" -"3650352384","3650352895","DE","DEU","GERMANY" -"3650352896","3650355199","GB","GBR","UNITED KINGDOM" -"3650355200","3650359295","CH","CHE","SWITZERLAND" -"3650359296","3650363391","NL","NLD","NETHERLANDS" -"3650363392","3650367487","GB","GBR","UNITED KINGDOM" -"3650367488","3650371583","RU","RUS","RUSSIAN FEDERATION" -"3650371584","3650375679","ES","ESP","SPAIN" -"3650375680","3650379775","NL","NLD","NETHERLANDS" -"3650379776","3650387967","IT","ITA","ITALY" -"3650387968","3650392063","DE","DEU","GERMANY" -"3650392064","3650396159","NO","NOR","NORWAY" -"3650396160","3650404351","NL","NLD","NETHERLANDS" -"3650404352","3650412543","RU","RUS","RUSSIAN FEDERATION" -"3650412544","3650416639","DE","DEU","GERMANY" -"3650416640","3650420735","BE","BEL","BELGIUM" -"3650420736","3650424831","ES","ESP","SPAIN" -"3650424832","3650428927","RU","RUS","RUSSIAN FEDERATION" -"3650428928","3650433023","NL","NLD","NETHERLANDS" -"3650433024","3650437119","FI","FIN","FINLAND" -"3650437120","3650441215","NL","NLD","NETHERLANDS" -"3650441216","3650445311","IT","ITA","ITALY" -"3650445312","3650449407","GB","GBR","UNITED KINGDOM" -"3650449408","3650453503","NO","NOR","NORWAY" -"3650453504","3650457599","NL","NLD","NETHERLANDS" -"3650457600","3650461695","ES","ESP","SPAIN" -"3650461696","3650465791","AT","AUT","AUSTRIA" -"3650465792","3650469887","RU","RUS","RUSSIAN FEDERATION" -"3650469888","3650478079","NL","NLD","NETHERLANDS" -"3650478080","3650482175","AT","AUT","AUSTRIA" -"3650482176","3650484687","PL","POL","POLAND" -"3650484688","3650484695","SE","SWE","SWEDEN" -"3650484696","3650486271","PL","POL","POLAND" -"3650486272","3650502655","RU","RUS","RUSSIAN FEDERATION" -"3650502656","3650510847","SE","SWE","SWEDEN" -"3650510848","3650519039","GB","GBR","UNITED KINGDOM" -"3650519040","3650523135","HU","HUN","HUNGARY" -"3650523136","3650527231","DE","DEU","GERMANY" -"3650527232","3650535423","SE","SWE","SWEDEN" -"3650535424","3650539519","RU","RUS","RUSSIAN FEDERATION" -"3650539520","3650543615","ES","ESP","SPAIN" -"3650543616","3650551807","CH","CHE","SWITZERLAND" -"3650551808","3650555903","FR","FRA","FRANCE" -"3650555904","3650559999","RU","RUS","RUSSIAN FEDERATION" -"3650560000","3650564095","GB","GBR","UNITED KINGDOM" -"3650564096","3650568191","SE","SWE","SWEDEN" -"3650568192","3650572287","RU","RUS","RUSSIAN FEDERATION" -"3650572288","3650576383","DE","DEU","GERMANY" -"3650576384","3650580479","GB","GBR","UNITED KINGDOM" -"3650580480","3650584575","CH","CHE","SWITZERLAND" -"3650584576","3650588671","RU","RUS","RUSSIAN FEDERATION" -"3650588672","3650592767","DE","DEU","GERMANY" -"3650592768","3650600959","IS","ISL","ICELAND" -"3650600960","3650605055","SE","SWE","SWEDEN" -"3650605056","3650609279","DE","DEU","GERMANY" -"3650609280","3650609311","CY","CYP","CYPRUS" -"3650609312","3650609407","DE","DEU","GERMANY" -"3650609408","3650609439","IQ","IRQ","IRAQ" -"3650609440","3650609447","KZ","KAZ","KAZAKHSTAN" -"3650609448","3650609455","RU","RUS","RUSSIAN FEDERATION" -"3650609456","3650609663","DE","DEU","GERMANY" -"3650609664","3650609919","KZ","KAZ","KAZAKHSTAN" -"3650609920","3650610175","RU","RUS","RUSSIAN FEDERATION" -"3650610176","3650610687","KZ","KAZ","KAZAKHSTAN" -"3650610688","3650610943","RU","RUS","RUSSIAN FEDERATION" -"3650610944","3650611711","DE","DEU","GERMANY" -"3650611712","3650612735","KZ","KAZ","KAZAKHSTAN" -"3650612736","3650617343","DE","DEU","GERMANY" -"3650617344","3650682879","FI","FIN","FINLAND" -"3650682880","3650748415","PL","POL","POLAND" -"3650748416","3650789375","GB","GBR","UNITED KINGDOM" -"3650789376","3650790143","NL","NLD","NETHERLANDS" -"3650790144","3650879487","GB","GBR","UNITED KINGDOM" -"3650879488","3650912255","RO","ROM","ROMANIA" -"3650912256","3650912639","GB","GBR","UNITED KINGDOM" -"3650912640","3650912671","FR","FRA","FRANCE" -"3650912672","3650945023","GB","GBR","UNITED KINGDOM" -"3650945024","3651010559","DK","DNK","DENMARK" -"3651010560","3651076095","GB","GBR","UNITED KINGDOM" -"3651076096","3651077375","DE","DEU","GERMANY" -"3651077376","3651077887","GB","GBR","UNITED KINGDOM" -"3651077888","3651078143","IE","IRL","IRELAND" -"3651078144","3651078399","ES","ESP","SPAIN" -"3651078400","3651078655","IE","IRL","IRELAND" -"3651078656","3651078783","ES","ESP","SPAIN" -"3651078784","3651078911","DE","DEU","GERMANY" -"3651078912","3651079807","GB","GBR","UNITED KINGDOM" -"3651079808","3651079935","ES","ESP","SPAIN" -"3651079936","3651080191","DE","DEU","GERMANY" -"3651080192","3651080831","GB","GBR","UNITED KINGDOM" -"3651080832","3651081215","DE","DEU","GERMANY" -"3651081216","3651081727","GB","GBR","UNITED KINGDOM" -"3651081728","3651081983","AT","AUT","AUSTRIA" -"3651081984","3651082239","DE","DEU","GERMANY" -"3651082240","3651082751","GB","GBR","UNITED KINGDOM" -"3651082752","3651083007","IE","IRL","IRELAND" -"3651083008","3651083519","GB","GBR","UNITED KINGDOM" -"3651083520","3651083775","DE","DEU","GERMANY" -"3651083776","3651084031","IE","IRL","IRELAND" -"3651084032","3651084543","FR","FRA","FRANCE" -"3651084544","3651084799","IE","IRL","IRELAND" -"3651084800","3651085311","ES","ESP","SPAIN" -"3651085312","3651085567","FR","FRA","FRANCE" -"3651085568","3651086079","DE","DEU","GERMANY" -"3651086080","3651086335","IE","IRL","IRELAND" -"3651086336","3651086463","DE","DEU","GERMANY" -"3651086464","3651086591","IE","IRL","IRELAND" -"3651086592","3651086719","GR","GRC","GREECE" -"3651086720","3651086847","DE","DEU","GERMANY" -"3651086848","3651087103","FR","FRA","FRANCE" -"3651087104","3651087615","ES","ESP","SPAIN" -"3651087616","3651087871","GB","GBR","UNITED KINGDOM" -"3651087872","3651088127","DE","DEU","GERMANY" -"3651088128","3651088383","IE","IRL","IRELAND" -"3651088384","3651088639","GR","GRC","GREECE" -"3651088640","3651088895","SG","SGP","SINGAPORE" -"3651088896","3651098111","DE","DEU","GERMANY" -"3651098112","3651098367","IE","IRL","IRELAND" -"3651098368","3651098623","FR","FRA","FRANCE" -"3651098624","3651101439","DE","DEU","GERMANY" -"3651101440","3651101695","FR","FRA","FRANCE" -"3651101696","3651101951","CH","CHE","SWITZERLAND" -"3651101952","3651102207","FR","FRA","FRANCE" -"3651102208","3651102719","DE","DEU","GERMANY" -"3651102720","3651102975","GB","GBR","UNITED KINGDOM" -"3651102976","3651103231","SL","SLE","SIERRA LEONE" -"3651103232","3651103487","IT","ITA","ITALY" -"3651103488","3651103743","FR","FRA","FRANCE" -"3651103744","3651103999","IT","ITA","ITALY" -"3651104000","3651104511","DE","DEU","GERMANY" -"3651104512","3651104767","PL","POL","POLAND" -"3651104768","3651105535","DE","DEU","GERMANY" -"3651105536","3651105791","IT","ITA","ITALY" -"3651105792","3651106047","ES","ESP","SPAIN" -"3651106048","3651106559","GB","GBR","UNITED KINGDOM" -"3651106560","3651106815","IE","IRL","IRELAND" -"3651106816","3651107327","DE","DEU","GERMANY" -"3651107328","3651107583","GB","GBR","UNITED KINGDOM" -"3651107584","3651107839","NL","NLD","NETHERLANDS" -"3651107840","3651107967","GB","GBR","UNITED KINGDOM" -"3651107968","3651108351","IE","IRL","IRELAND" -"3651108352","3651108479","NL","NLD","NETHERLANDS" -"3651108480","3651108543","ES","ESP","SPAIN" -"3651108544","3651108863","DE","DEU","GERMANY" -"3651108864","3651141631","EE","EST","ESTONIA" -"3651141632","3651173375","DE","DEU","GERMANY" -"3651173376","3651173631","ES","ESP","SPAIN" -"3651173632","3651201023","DE","DEU","GERMANY" -"3651201024","3651201279","ES","ESP","SPAIN" -"3651201280","3651201535","DE","DEU","GERMANY" -"3651201536","3651201791","ES","ESP","SPAIN" -"3651201792","3651201919","FR","FRA","FRANCE" -"3651201920","3651202047","ES","ESP","SPAIN" -"3651202048","3651202175","FR","FRA","FRANCE" -"3651202176","3651202303","GB","GBR","UNITED KINGDOM" -"3651202304","3651202815","ES","ESP","SPAIN" -"3651202816","3651203071","GB","GBR","UNITED KINGDOM" -"3651203072","3651207167","US","USA","UNITED STATES" -"3651207168","3651207199","GB","GBR","UNITED KINGDOM" -"3651207224","3651207295","GB","GBR","UNITED KINGDOM" -"3651207424","3651207615","GB","GBR","UNITED KINGDOM" -"3651207648","3651208959","GB","GBR","UNITED KINGDOM" -"3651209216","3651209231","US","USA","UNITED STATES" -"3651209232","3651209239","GB","GBR","UNITED KINGDOM" -"3651209240","3651209243","DE","DEU","GERMANY" -"3651209472","3651210751","GB","GBR","UNITED KINGDOM" -"3651211264","3651211775","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3651213824","3651214207","US","USA","UNITED STATES" -"3651215360","3651215395","GB","GBR","UNITED KINGDOM" -"3651215616","3651215871","GB","GBR","UNITED KINGDOM" -"3651217408","3651217535","GI","GIB","GIBRALTAR" -"3651219456","3651219967","US","USA","UNITED STATES" -"3651220384","3651220479","GB","GBR","UNITED KINGDOM" -"3651221504","3651221695","GB","GBR","UNITED KINGDOM" -"3651223552","3651223567","GB","GBR","UNITED KINGDOM" -"3651223584","3651223607","GB","GBR","UNITED KINGDOM" -"3651223648","3651223663","ES","ESP","SPAIN" -"3651227136","3651227391","GB","GBR","UNITED KINGDOM" -"3651230720","3651231743","MU","MUS","MAURITIUS" -"3651232256","3651232287","GB","GBR","UNITED KINGDOM" -"3651232320","3651232383","GB","GBR","UNITED KINGDOM" -"3651232448","3651232511","GB","GBR","UNITED KINGDOM" -"3651233792","3651233855","GB","GBR","UNITED KINGDOM" -"3651236032","3651236063","GB","GBR","UNITED KINGDOM" -"3651236864","3651237631","SC","SYC","SEYCHELLES" -"3651237888","3651238399","SC","SYC","SEYCHELLES" -"3651239936","3651272703","GB","GBR","UNITED KINGDOM" -"3651272704","3651338239","CH","CHE","SWITZERLAND" -"3651338240","3651403775","GB","GBR","UNITED KINGDOM" -"3651403776","3651534847","AE","ARE","UNITED ARAB EMIRATES" -"3651534848","3651600383","NL","NLD","NETHERLANDS" -"3651600384","3651636696","FR","FRA","FRANCE" -"3651636697","3651636697","GB","GBR","UNITED KINGDOM" -"3651636698","3651665919","FR","FRA","FRANCE" -"3651665920","3651670015","ES","ESP","SPAIN" -"3651670016","3651674111","GB","GBR","UNITED KINGDOM" -"3651674112","3651682303","CH","CHE","SWITZERLAND" -"3651682304","3651686399","RU","RUS","RUSSIAN FEDERATION" -"3651686400","3651690495","NO","NOR","NORWAY" -"3651690496","3651694591","FR","FRA","FRANCE" -"3651694592","3651694719","GH","GHA","GHANA" -"3651694720","3651694847","PT","PRT","PORTUGAL" -"3651694848","3651694975","NG","NGA","NIGERIA" -"3651694976","3651695103","PT","PRT","PORTUGAL" -"3651695104","3651695359","CV","CPV","CAPE VERDE" -"3651695360","3651695871","AO","AGO","ANGOLA" -"3651695872","3651696639","PT","PRT","PORTUGAL" -"3651696640","3651698687","AO","AGO","ANGOLA" -"3651698688","3651702783","PL","POL","POLAND" -"3651702784","3651706879","GB","GBR","UNITED KINGDOM" -"3651706880","3651710975","MT","MLT","MALTA" -"3651710976","3651715071","AZ","AZE","AZERBAIJAN" -"3651715072","3651719167","PL","POL","POLAND" -"3651719168","3651723263","CZ","CZE","CZECH REPUBLIC" -"3651723264","3651727359","IT","ITA","ITALY" -"3651727360","3651731455","RU","RUS","RUSSIAN FEDERATION" -"3651731456","3651747839","GB","GBR","UNITED KINGDOM" -"3651747840","3651751935","FI","FIN","FINLAND" -"3651751936","3651756031","RU","RUS","RUSSIAN FEDERATION" -"3651756032","3651764223","IT","ITA","ITALY" -"3651764224","3651764679","CH","CHE","SWITZERLAND" -"3651764680","3651764687","FR","FRA","FRANCE" -"3651764688","3651772415","CH","CHE","SWITZERLAND" -"3651772416","3651776511","GB","GBR","UNITED KINGDOM" -"3651776512","3651780607","CZ","CZE","CZECH REPUBLIC" -"3651780608","3651784703","TR","TUR","TURKEY" -"3651784704","3651785215","RS","SRB","SERBIA" -"3651785216","3651785227","CS","SCG","SERBIA AND MONTENEGRO" -"3651785228","3651785231","RS","SRB","SERBIA" -"3651785232","3651785271","CS","SCG","SERBIA AND MONTENEGRO" -"3651785272","3651785279","RS","SRB","SERBIA" -"3651785280","3651785295","CS","SCG","SERBIA AND MONTENEGRO" -"3651785296","3651785303","RS","SRB","SERBIA" -"3651785304","3651785311","CS","SCG","SERBIA AND MONTENEGRO" -"3651785312","3651785319","RS","SRB","SERBIA" -"3651785320","3651785327","CS","SCG","SERBIA AND MONTENEGRO" -"3651785328","3651785335","RS","SRB","SERBIA" -"3651785336","3651785351","CS","SCG","SERBIA AND MONTENEGRO" -"3651785352","3651785359","RS","SRB","SERBIA" -"3651785360","3651785391","CS","SCG","SERBIA AND MONTENEGRO" -"3651785392","3651785399","RS","SRB","SERBIA" -"3651785400","3651785415","CS","SCG","SERBIA AND MONTENEGRO" -"3651785416","3651785419","RS","SRB","SERBIA" -"3651785420","3651785455","CS","SCG","SERBIA AND MONTENEGRO" -"3651785456","3651785499","RS","SRB","SERBIA" -"3651785500","3651785503","CS","SCG","SERBIA AND MONTENEGRO" -"3651785504","3651785527","RS","SRB","SERBIA" -"3651785528","3651785539","CS","SCG","SERBIA AND MONTENEGRO" -"3651785540","3651785555","RS","SRB","SERBIA" -"3651785556","3651785559","CS","SCG","SERBIA AND MONTENEGRO" -"3651785560","3651785563","RS","SRB","SERBIA" -"3651785564","3651785591","CS","SCG","SERBIA AND MONTENEGRO" -"3651785592","3651785603","RS","SRB","SERBIA" -"3651785604","3651785611","CS","SCG","SERBIA AND MONTENEGRO" -"3651785612","3651785615","RS","SRB","SERBIA" -"3651785616","3651785623","CS","SCG","SERBIA AND MONTENEGRO" -"3651785624","3651785627","RS","SRB","SERBIA" -"3651785628","3651785631","CS","SCG","SERBIA AND MONTENEGRO" -"3651785632","3651785635","RS","SRB","SERBIA" -"3651785636","3651785647","CS","SCG","SERBIA AND MONTENEGRO" -"3651785648","3651785655","RS","SRB","SERBIA" -"3651785656","3651785659","CS","SCG","SERBIA AND MONTENEGRO" -"3651785660","3651785663","RS","SRB","SERBIA" -"3651785664","3651785687","CS","SCG","SERBIA AND MONTENEGRO" -"3651785688","3651785691","RS","SRB","SERBIA" -"3651785692","3651785699","CS","SCG","SERBIA AND MONTENEGRO" -"3651785700","3651785703","RS","SRB","SERBIA" -"3651785704","3651785707","CS","SCG","SERBIA AND MONTENEGRO" -"3651785708","3651785711","RS","SRB","SERBIA" -"3651785712","3651785727","CS","SCG","SERBIA AND MONTENEGRO" -"3651785728","3651787519","RS","SRB","SERBIA" -"3651787520","3651787591","CS","SCG","SERBIA AND MONTENEGRO" -"3651787592","3651787615","RS","SRB","SERBIA" -"3651787616","3651787711","CS","SCG","SERBIA AND MONTENEGRO" -"3651787712","3651787743","RS","SRB","SERBIA" -"3651787744","3651787759","CS","SCG","SERBIA AND MONTENEGRO" -"3651787760","3651787791","RS","SRB","SERBIA" -"3651787792","3651787799","CS","SCG","SERBIA AND MONTENEGRO" -"3651787800","3651787839","RS","SRB","SERBIA" -"3651787840","3651787863","CS","SCG","SERBIA AND MONTENEGRO" -"3651787864","3651787875","RS","SRB","SERBIA" -"3651787876","3651787879","CS","SCG","SERBIA AND MONTENEGRO" -"3651787880","3651787887","RS","SRB","SERBIA" -"3651787888","3651787891","CS","SCG","SERBIA AND MONTENEGRO" -"3651787892","3651787895","RS","SRB","SERBIA" -"3651787896","3651787903","CS","SCG","SERBIA AND MONTENEGRO" -"3651787904","3651787911","RS","SRB","SERBIA" -"3651787912","3651787939","CS","SCG","SERBIA AND MONTENEGRO" -"3651787940","3651787943","RS","SRB","SERBIA" -"3651787944","3651788039","CS","SCG","SERBIA AND MONTENEGRO" -"3651788040","3651788043","RS","SRB","SERBIA" -"3651788044","3651788059","CS","SCG","SERBIA AND MONTENEGRO" -"3651788060","3651788063","RS","SRB","SERBIA" -"3651788064","3651788095","CS","SCG","SERBIA AND MONTENEGRO" -"3651788096","3651788175","RS","SRB","SERBIA" -"3651788176","3651788183","CS","SCG","SERBIA AND MONTENEGRO" -"3651788184","3651788207","RS","SRB","SERBIA" -"3651788208","3651788239","CS","SCG","SERBIA AND MONTENEGRO" -"3651788240","3651788251","RS","SRB","SERBIA" -"3651788252","3651788255","CS","SCG","SERBIA AND MONTENEGRO" -"3651788256","3651788263","RS","SRB","SERBIA" -"3651788264","3651788279","CS","SCG","SERBIA AND MONTENEGRO" -"3651788280","3651788543","RS","SRB","SERBIA" -"3651788544","3651788799","CS","SCG","SERBIA AND MONTENEGRO" -"3651788800","3651792895","NL","NLD","NETHERLANDS" -"3651792896","3651796991","FR","FRA","FRANCE" -"3651796992","3651813375","NL","NLD","NETHERLANDS" -"3651813376","3651821567","RU","RUS","RUSSIAN FEDERATION" -"3651821568","3651825663","CZ","CZE","CZECH REPUBLIC" -"3651825664","3651829759","RU","RUS","RUSSIAN FEDERATION" -"3651829760","3651833855","NO","NOR","NORWAY" -"3651837952","3651842047","PL","POL","POLAND" -"3651842048","3651846143","DE","DEU","GERMANY" -"3651846144","3651850239","NO","NOR","NORWAY" -"3651850240","3651854335","RU","RUS","RUSSIAN FEDERATION" -"3651854336","3651858431","IT","ITA","ITALY" -"3651858432","3651858687","CS","SCG","SERBIA AND MONTENEGRO" -"3651858688","3651858943","SC","SYC","SEYCHELLES" -"3651858944","3651862527","CS","SCG","SERBIA AND MONTENEGRO" -"3651862528","3651866623","RU","RUS","RUSSIAN FEDERATION" -"3651866624","3651870719","FR","FRA","FRANCE" -"3651870720","3651874815","IT","ITA","ITALY" -"3651874816","3651878911","PL","POL","POLAND" -"3651878912","3651883007","RU","RUS","RUSSIAN FEDERATION" -"3651883008","3651885823","BE","BEL","BELGIUM" -"3651885824","3651885843","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"3651885844","3651885851","BE","BEL","BELGIUM" -"3651885852","3651885855","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"3651885856","3651885867","BE","BEL","BELGIUM" -"3651885868","3651885875","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"3651885876","3651885903","BE","BEL","BELGIUM" -"3651885904","3651885919","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"3651885920","3651886335","BE","BEL","BELGIUM" -"3651886336","3651886347","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"3651886348","3651886367","BE","BEL","BELGIUM" -"3651886368","3651886383","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"3651886384","3651886387","BE","BEL","BELGIUM" -"3651886388","3651886395","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"3651886396","3651886399","BE","BEL","BELGIUM" -"3651886400","3651886403","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"3651886404","3651886431","BE","BEL","BELGIUM" -"3651886432","3651886451","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"3651886452","3651886455","BE","BEL","BELGIUM" -"3651886456","3651886459","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"3651886460","3651886463","BE","BEL","BELGIUM" -"3651886464","3651886471","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"3651886472","3651886479","BE","BEL","BELGIUM" -"3651886480","3651886495","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"3651886496","3651886511","BE","BEL","BELGIUM" -"3651886512","3651886519","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"3651886520","3651887103","BE","BEL","BELGIUM" -"3651887104","3651891199","GB","GBR","UNITED KINGDOM" -"3651891200","3651895295","DE","DEU","GERMANY" -"3651895296","3651899391","GB","GBR","UNITED KINGDOM" -"3651899392","3651903487","RU","RUS","RUSSIAN FEDERATION" -"3651903488","3651907583","IT","ITA","ITALY" -"3651907584","3651908991","IQ","IRQ","IRAQ" -"3651908992","3651909311","DE","DEU","GERMANY" -"3651909312","3651909375","IQ","IRQ","IRAQ" -"3651909376","3651909631","DE","DEU","GERMANY" -"3651909632","3651910655","IQ","IRQ","IRAQ" -"3651910656","3651910783","DE","DEU","GERMANY" -"3651910784","3651911167","IQ","IRQ","IRAQ" -"3651911168","3651911623","DE","DEU","GERMANY" -"3651911624","3651911631","IQ","IRQ","IRAQ" -"3651911632","3651911643","DE","DEU","GERMANY" -"3651911644","3651911647","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3651911648","3651911679","DE","DEU","GERMANY" -"3651911680","3651915775","NO","NOR","NORWAY" -"3651915776","3651919871","IS","ISL","ICELAND" -"3651919872","3651923967","RU","RUS","RUSSIAN FEDERATION" -"3651923968","3651928063","DE","DEU","GERMANY" -"3651928064","3651932159","IT","ITA","ITALY" -"3651932160","3651936255","RU","RUS","RUSSIAN FEDERATION" -"3651936256","3651938175","DE","DEU","GERMANY" -"3651938176","3651938207","GB","GBR","UNITED KINGDOM" -"3651938208","3651938255","DE","DEU","GERMANY" -"3651938256","3651938271","PL","POL","POLAND" -"3651938272","3651938943","DE","DEU","GERMANY" -"3651938944","3651938959","NL","NLD","NETHERLANDS" -"3651938960","3651938975","DE","DEU","GERMANY" -"3651938976","3651939007","TR","TUR","TURKEY" -"3651939008","3651939071","DE","DEU","GERMANY" -"3651939072","3651939087","SE","SWE","SWEDEN" -"3651939088","3651939135","DE","DEU","GERMANY" -"3651939136","3651939151","PL","POL","POLAND" -"3651939152","3651939167","DE","DEU","GERMANY" -"3651939168","3651939231","GB","GBR","UNITED KINGDOM" -"3651939232","3651939263","DE","DEU","GERMANY" -"3651939264","3651939295","IT","ITA","ITALY" -"3651939296","3651939327","PL","POL","POLAND" -"3651939328","3651939391","IT","ITA","ITALY" -"3651939392","3651939503","DE","DEU","GERMANY" -"3651939504","3651939511","GB","GBR","UNITED KINGDOM" -"3651939512","3651939519","DE","DEU","GERMANY" -"3651939520","3651939527","RU","RUS","RUSSIAN FEDERATION" -"3651939528","3651939583","PL","POL","POLAND" -"3651939584","3651939647","DE","DEU","GERMANY" -"3651939648","3651939711","ES","ESP","SPAIN" -"3651939712","3651939727","DE","DEU","GERMANY" -"3651939728","3651939743","PL","POL","POLAND" -"3651939744","3651939791","DE","DEU","GERMANY" -"3651939792","3651939799","RU","RUS","RUSSIAN FEDERATION" -"3651939800","3651940351","DE","DEU","GERMANY" -"3651940352","3651940383","TR","TUR","TURKEY" -"3651940384","3651940415","US","USA","UNITED STATES" -"3651940416","3651940479","IT","ITA","ITALY" -"3651940480","3651940543","GB","GBR","UNITED KINGDOM" -"3651940544","3651940639","DE","DEU","GERMANY" -"3651940640","3651940671","BS","BHS","BAHAMAS" -"3651940672","3651940735","DE","DEU","GERMANY" -"3651940736","3651940743","AU","AUS","AUSTRALIA" -"3651940744","3651940751","RU","RUS","RUSSIAN FEDERATION" -"3651940752","3651940799","DE","DEU","GERMANY" -"3651940800","3651940863","ES","ESP","SPAIN" -"3651940864","3651940927","GB","GBR","UNITED KINGDOM" -"3651940928","3651940991","IT","ITA","ITALY" -"3651940992","3651941027","DE","DEU","GERMANY" -"3651941028","3651941055","TR","TUR","TURKEY" -"3651941056","3651941087","DE","DEU","GERMANY" -"3651941088","3651941119","GB","GBR","UNITED KINGDOM" -"3651941120","3651941183","DE","DEU","GERMANY" -"3651941184","3651941215","IT","ITA","ITALY" -"3651941216","3651941249","TR","TUR","TURKEY" -"3651941250","3651941695","DE","DEU","GERMANY" -"3651941696","3651941759","IT","ITA","ITALY" -"3651941760","3651942655","DE","DEU","GERMANY" -"3651942656","3651942719","GB","GBR","UNITED KINGDOM" -"3651942720","3651942735","SE","SWE","SWEDEN" -"3651942736","3651942751","US","USA","UNITED STATES" -"3651942752","3651942783","DE","DEU","GERMANY" -"3651942784","3651942815","GB","GBR","UNITED KINGDOM" -"3651942816","3651944447","DE","DEU","GERMANY" -"3651944448","3651948543","ES","ESP","SPAIN" -"3651948544","3651952639","FO","FRO","FAROE ISLANDS" -"3651952640","3651954175","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3651954176","3651954431","AE","ARE","UNITED ARAB EMIRATES" -"3651954432","3651958271","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3651958272","3651958783","UA","UKR","UKRAINE" -"3651958784","3651960831","AE","ARE","UNITED ARAB EMIRATES" -"3651960832","3651964927","GB","GBR","UNITED KINGDOM" -"3651964928","3651969023","SK","SVK","SLOVAKIA" -"3651969024","3651977215","DE","DEU","GERMANY" -"3651977216","3651985407","IT","ITA","ITALY" -"3651985408","3651993599","PL","POL","POLAND" -"3651993600","3652001791","RU","RUS","RUSSIAN FEDERATION" -"3652001792","3652005887","HU","HUN","HUNGARY" -"3652005888","3652009983","GB","GBR","UNITED KINGDOM" -"3652009984","3652014079","RU","RUS","RUSSIAN FEDERATION" -"3652014080","3652018175","SA","SAU","SAUDI ARABIA" -"3652018176","3652018239","IE","IRL","IRELAND" -"3652018240","3652018387","GB","GBR","UNITED KINGDOM" -"3652018388","3652018391","IE","IRL","IRELAND" -"3652018392","3652018395","GB","GBR","UNITED KINGDOM" -"3652018396","3652018399","IE","IRL","IRELAND" -"3652018400","3652018943","GB","GBR","UNITED KINGDOM" -"3652018944","3652019167","IE","IRL","IRELAND" -"3652019168","3652019199","GB","GBR","UNITED KINGDOM" -"3652019200","3652019423","IE","IRL","IRELAND" -"3652019424","3652019427","GB","GBR","UNITED KINGDOM" -"3652019428","3652019431","IE","IRL","IRELAND" -"3652019432","3652019451","GB","GBR","UNITED KINGDOM" -"3652019452","3652019455","IE","IRL","IRELAND" -"3652019456","3652019567","GB","GBR","UNITED KINGDOM" -"3652019568","3652019663","IE","IRL","IRELAND" -"3652019664","3652019679","GB","GBR","UNITED KINGDOM" -"3652019680","3652019687","IE","IRL","IRELAND" -"3652019688","3652019695","GB","GBR","UNITED KINGDOM" -"3652019696","3652019711","IE","IRL","IRELAND" -"3652019712","3652019751","GB","GBR","UNITED KINGDOM" -"3652019752","3652019759","IE","IRL","IRELAND" -"3652019760","3652019775","GB","GBR","UNITED KINGDOM" -"3652019776","3652019791","IE","IRL","IRELAND" -"3652019792","3652019807","GB","GBR","UNITED KINGDOM" -"3652019808","3652019815","IE","IRL","IRELAND" -"3652019816","3652019887","GB","GBR","UNITED KINGDOM" -"3652019888","3652019935","IE","IRL","IRELAND" -"3652019936","3652019951","GB","GBR","UNITED KINGDOM" -"3652019952","3652019967","IE","IRL","IRELAND" -"3652019968","3652020479","GB","GBR","UNITED KINGDOM" -"3652020480","3652020735","IE","IRL","IRELAND" -"3652020736","3652020767","GB","GBR","UNITED KINGDOM" -"3652020768","3652020799","IE","IRL","IRELAND" -"3652020800","3652020863","DE","DEU","GERMANY" -"3652020864","3652020959","IE","IRL","IRELAND" -"3652020960","3652021791","GB","GBR","UNITED KINGDOM" -"3652021792","3652021887","IE","IRL","IRELAND" -"3652021888","3652022271","GB","GBR","UNITED KINGDOM" -"3652022272","3652026367","ES","ESP","SPAIN" -"3652026368","3652028031","DE","DEU","GERMANY" -"3652028032","3652028063","US","USA","UNITED STATES" -"3652028064","3652028095","CH","CHE","SWITZERLAND" -"3652028096","3652028223","DE","DEU","GERMANY" -"3652028224","3652028255","ES","ESP","SPAIN" -"3652028256","3652031743","DE","DEU","GERMANY" -"3652031744","3652031999","US","USA","UNITED STATES" -"3652032000","3652032767","DE","DEU","GERMANY" -"3652032768","3652033791","NL","NLD","NETHERLANDS" -"3652033792","3652033855","GD","GRD","GRENADA" -"3652033856","3652033887","NL","NLD","NETHERLANDS" -"3652033888","3652033919","VG","VGB","VIRGIN ISLANDS, BRITISH" -"3652033920","3652033935","TR","TUR","TURKEY" -"3652033936","3652033951","DE","DEU","GERMANY" -"3652033952","3652033967","CH","CHE","SWITZERLAND" -"3652033968","3652033983","NL","NLD","NETHERLANDS" -"3652033984","3652034015","TR","TUR","TURKEY" -"3652034016","3652034047","NL","NLD","NETHERLANDS" -"3652034048","3652034111","GD","GRD","GRENADA" -"3652034112","3652034143","TR","TUR","TURKEY" -"3652034144","3652034175","CH","CHE","SWITZERLAND" -"3652034176","3652034207","NL","NLD","NETHERLANDS" -"3652034208","3652034239","ES","ESP","SPAIN" -"3652034240","3652034271","VG","VGB","VIRGIN ISLANDS, BRITISH" -"3652034272","3652034367","GD","GRD","GRENADA" -"3652034368","3652034383","ES","ESP","SPAIN" -"3652034384","3652034399","VG","VGB","VIRGIN ISLANDS, BRITISH" -"3652034400","3652034559","GD","GRD","GRENADA" -"3652034560","3652046847","PL","POL","POLAND" -"3652046848","3652050499","IE","IRL","IRELAND" -"3652050500","3652050503","GB","GBR","UNITED KINGDOM" -"3652050504","3652050527","IE","IRL","IRELAND" -"3652050528","3652050535","GB","GBR","UNITED KINGDOM" -"3652050536","3652050567","IE","IRL","IRELAND" -"3652050568","3652050615","GB","GBR","UNITED KINGDOM" -"3652050616","3652050619","IE","IRL","IRELAND" -"3652050620","3652050671","GB","GBR","UNITED KINGDOM" -"3652050672","3652050787","IE","IRL","IRELAND" -"3652050788","3652050791","GB","GBR","UNITED KINGDOM" -"3652050792","3652050943","IE","IRL","IRELAND" -"3652050944","3652055039","LI","LIE","LIECHTENSTEIN" -"3652055040","3652059135","NO","NOR","NORWAY" -"3652059136","3652063231","RU","RUS","RUSSIAN FEDERATION" -"3652063232","3652067327","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3652067328","3652071423","TR","TUR","TURKEY" -"3652071424","3652075519","BG","BGR","BULGARIA" -"3652075520","3652083711","SE","SWE","SWEDEN" -"3652083712","3652087807","RU","RUS","RUSSIAN FEDERATION" -"3652087808","3652095999","IT","ITA","ITALY" -"3652096000","3652100095","BG","BGR","BULGARIA" -"3652100096","3652105471","RU","RUS","RUSSIAN FEDERATION" -"3652105472","3652105535","US","USA","UNITED STATES" -"3652105536","3652108287","RU","RUS","RUSSIAN FEDERATION" -"3652108288","3652116479","FR","FRA","FRANCE" -"3652116480","3652120575","TM","TKM","TURKMENISTAN" -"3652120576","3652124671","GB","GBR","UNITED KINGDOM" -"3652124672","3652128767","UA","UKR","UKRAINE" -"3652128768","3652136959","RU","RUS","RUSSIAN FEDERATION" -"3652136960","3652141055","IT","ITA","ITALY" -"3652141056","3652144127","GB","GBR","UNITED KINGDOM" -"3652144128","3652144383","KE","KEN","KENYA" -"3652144384","3652145151","GB","GBR","UNITED KINGDOM" -"3652145152","3652149247","UA","UKR","UKRAINE" -"3652149248","3652153343","DE","DEU","GERMANY" -"3652153344","3652157439","SE","SWE","SWEDEN" -"3652157440","3652165631","RU","RUS","RUSSIAN FEDERATION" -"3652165632","3652173823","FR","FRA","FRANCE" -"3652173824","3652177919","AT","AUT","AUSTRIA" -"3652177920","3652182015","CY","CYP","CYPRUS" -"3652182016","3652182527","DE","DEU","GERMANY" -"3652182528","3652182783","AT","AUT","AUSTRIA" -"3652182784","3652186591","DE","DEU","GERMANY" -"3652186592","3652186623","CH","CHE","SWITZERLAND" -"3652186624","3652186879","DE","DEU","GERMANY" -"3652186880","3652187007","AT","AUT","AUSTRIA" -"3652187008","3652190207","DE","DEU","GERMANY" -"3652190208","3652714495","GB","GBR","UNITED KINGDOM" -"3652714496","3652984927","DE","DEU","GERMANY" -"3652984928","3652984935","NL","NLD","NETHERLANDS" -"3652984936","3652985039","DE","DEU","GERMANY" -"3652985040","3652985047","FR","FRA","FRANCE" -"3652985048","3653039103","DE","DEU","GERMANY" -"3653039104","3653039359","IT","ITA","ITALY" -"3653039360","3653238783","DE","DEU","GERMANY" -"3653238784","3653334141","CH","CHE","SWITZERLAND" -"3653334142","3653334142","AT","AUT","AUSTRIA" -"3653334143","3653341871","CH","CHE","SWITZERLAND" -"3653341872","3653341879","AT","AUT","AUSTRIA" -"3653341880","3653369855","CH","CHE","SWITZERLAND" -"3653369856","3653373951","IT","ITA","ITALY" -"3653373952","3653378047","NL","NLD","NETHERLANDS" -"3653378048","3653382143","DE","DEU","GERMANY" -"3653382144","3653386239","CH","CHE","SWITZERLAND" -"3653386240","3653390335","DE","DEU","GERMANY" -"3653390336","3653394431","FR","FRA","FRANCE" -"3653394432","3653402623","NL","NLD","NETHERLANDS" -"3653402624","3653403135","AT","AUT","AUSTRIA" -"3653403136","3653403647","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"3653403648","3653403903","ZW","ZWE","ZIMBABWE" -"3653403904","3653403911","UA","UKR","UKRAINE" -"3653403912","3653403919","IQ","IRQ","IRAQ" -"3653403920","3653403931","UA","UKR","UKRAINE" -"3653403932","3653403935","GB","GBR","UNITED KINGDOM" -"3653403936","3653403943","IQ","IRQ","IRAQ" -"3653403944","3653403951","LB","LBN","LEBANON" -"3653403952","3653403959","IQ","IRQ","IRAQ" -"3653403960","3653403967","MW","MWI","MALAWI" -"3653403968","3653403983","NG","NGA","NIGERIA" -"3653403984","3653403999","UA","UKR","UKRAINE" -"3653404000","3653404008","LB","LBN","LEBANON" -"3653404009","3653404015","GB","GBR","UNITED KINGDOM" -"3653404016","3653404023","LB","LBN","LEBANON" -"3653404024","3653404039","GB","GBR","UNITED KINGDOM" -"3653404040","3653404055","IQ","IRQ","IRAQ" -"3653404056","3653404063","GB","GBR","UNITED KINGDOM" -"3653404064","3653404071","LB","LBN","LEBANON" -"3653404072","3653404079","AO","AGO","ANGOLA" -"3653404080","3653404087","UA","UKR","UKRAINE" -"3653404088","3653404095","LB","LBN","LEBANON" -"3653404096","3653404103","IQ","IRQ","IRAQ" -"3653404104","3653404111","GB","GBR","UNITED KINGDOM" -"3653404112","3653404119","MD","MDA","REPUBLIC OF MOLDOVA" -"3653404120","3653404127","GB","GBR","UNITED KINGDOM" -"3653404128","3653404135","CS","SCG","SERBIA AND MONTENEGRO" -"3653404136","3653404159","GB","GBR","UNITED KINGDOM" -"3653404160","3653404415","AT","AUT","AUSTRIA" -"3653404416","3653404543","GB","GBR","UNITED KINGDOM" -"3653404544","3653404559","NG","NGA","NIGERIA" -"3653404560","3653404567","IQ","IRQ","IRAQ" -"3653404568","3653404575","LY","LBY","LIBYAN ARAB JAMAHIRIYA" -"3653404576","3653404591","TR","TUR","TURKEY" -"3653404592","3653404607","GB","GBR","UNITED KINGDOM" -"3653404608","3653404655","UA","UKR","UKRAINE" -"3653404656","3653404671","GB","GBR","UNITED KINGDOM" -"3653404672","3653404679","TR","TUR","TURKEY" -"3653404680","3653404707","GB","GBR","UNITED KINGDOM" -"3653404708","3653404713","IQ","IRQ","IRAQ" -"3653404714","3653404719","GB","GBR","UNITED KINGDOM" -"3653404720","3653404735","LB","LBN","LEBANON" -"3653404736","3653404751","GB","GBR","UNITED KINGDOM" -"3653404752","3653404759","AM","ARM","ARMENIA" -"3653404760","3653404815","GB","GBR","UNITED KINGDOM" -"3653404816","3653404831","LB","LBN","LEBANON" -"3653404832","3653404847","NG","NGA","NIGERIA" -"3653404848","3653404855","GB","GBR","UNITED KINGDOM" -"3653404856","3653404863","SL","SLE","SIERRA LEONE" -"3653404864","3653404871","LY","LBY","LIBYAN ARAB JAMAHIRIYA" -"3653404872","3653404879","GB","GBR","UNITED KINGDOM" -"3653404880","3653404887","UA","UKR","UKRAINE" -"3653404888","3653404903","GB","GBR","UNITED KINGDOM" -"3653404904","3653404911","IQ","IRQ","IRAQ" -"3653404912","3653404919","LY","LBY","LIBYAN ARAB JAMAHIRIYA" -"3653404920","3653404959","GB","GBR","UNITED KINGDOM" -"3653404960","3653404975","UA","UKR","UKRAINE" -"3653404976","3653404983","GB","GBR","UNITED KINGDOM" -"3653404984","3653404991","AM","ARM","ARMENIA" -"3653404992","3653404999","IQ","IRQ","IRAQ" -"3653405000","3653405007","GB","GBR","UNITED KINGDOM" -"3653405008","3653405031","LB","LBN","LEBANON" -"3653405032","3653405039","GB","GBR","UNITED KINGDOM" -"3653405040","3653405047","LB","LBN","LEBANON" -"3653405048","3653405055","IQ","IRQ","IRAQ" -"3653405056","3653405063","GB","GBR","UNITED KINGDOM" -"3653405064","3653405079","IQ","IRQ","IRAQ" -"3653405080","3653405087","GB","GBR","UNITED KINGDOM" -"3653405088","3653405095","LY","LBY","LIBYAN ARAB JAMAHIRIYA" -"3653405096","3653405103","NG","NGA","NIGERIA" -"3653405104","3653405119","GB","GBR","UNITED KINGDOM" -"3653405120","3653405135","AM","ARM","ARMENIA" -"3653405136","3653405151","UA","UKR","UKRAINE" -"3653405152","3653405167","GB","GBR","UNITED KINGDOM" -"3653405168","3653405183","UA","UKR","UKRAINE" -"3653405184","3653405439","AT","AUT","AUSTRIA" -"3653405440","3653405695","GB","GBR","UNITED KINGDOM" -"3653405696","3653406975","NG","NGA","NIGERIA" -"3653406976","3653407015","GB","GBR","UNITED KINGDOM" -"3653407016","3653407023","UG","UGA","UGANDA" -"3653407024","3653407031","GB","GBR","UNITED KINGDOM" -"3653407032","3653407039","ZW","ZWE","ZIMBABWE" -"3653407040","3653407071","NG","NGA","NIGERIA" -"3653407072","3653407087","GB","GBR","UNITED KINGDOM" -"3653407088","3653407095","NG","NGA","NIGERIA" -"3653407096","3653407103","GB","GBR","UNITED KINGDOM" -"3653407104","3653407111","UG","UGA","UGANDA" -"3653407112","3653407119","ZM","ZMB","ZAMBIA" -"3653407120","3653407127","ZW","ZWE","ZIMBABWE" -"3653407128","3653407167","GB","GBR","UNITED KINGDOM" -"3653407168","3653407231","NG","NGA","NIGERIA" -"3653407232","3653407359","GB","GBR","UNITED KINGDOM" -"3653407360","3653407375","NG","NGA","NIGERIA" -"3653407376","3653407391","GB","GBR","UNITED KINGDOM" -"3653407392","3653407399","NG","NGA","NIGERIA" -"3653407400","3653407423","GB","GBR","UNITED KINGDOM" -"3653407424","3653407487","ZW","ZWE","ZIMBABWE" -"3653407488","3653407615","GB","GBR","UNITED KINGDOM" -"3653407616","3653407639","NG","NGA","NIGERIA" -"3653407640","3653407647","ZM","ZMB","ZAMBIA" -"3653407648","3653407679","GB","GBR","UNITED KINGDOM" -"3653407680","3653407695","UG","UGA","UGANDA" -"3653407696","3653407703","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"3653407704","3653407711","NG","NGA","NIGERIA" -"3653407712","3653407727","GB","GBR","UNITED KINGDOM" -"3653407728","3653407743","ZW","ZWE","ZIMBABWE" -"3653407744","3653407999","AT","AUT","AUSTRIA" -"3653408000","3653408023","GB","GBR","UNITED KINGDOM" -"3653408024","3653408031","UG","UGA","UGANDA" -"3653408032","3653408047","ZW","ZWE","ZIMBABWE" -"3653408048","3653408063","GB","GBR","UNITED KINGDOM" -"3653408064","3653408071","ZM","ZMB","ZAMBIA" -"3653408072","3653408079","NG","NGA","NIGERIA" -"3653408080","3653408087","MW","MWI","MALAWI" -"3653408088","3653408143","GB","GBR","UNITED KINGDOM" -"3653408144","3653408151","NG","NGA","NIGERIA" -"3653408152","3653408159","ZM","ZMB","ZAMBIA" -"3653408160","3653408167","NG","NGA","NIGERIA" -"3653408168","3653408175","ZW","ZWE","ZIMBABWE" -"3653408176","3653408183","GB","GBR","UNITED KINGDOM" -"3653408184","3653408191","MW","MWI","MALAWI" -"3653408192","3653408215","GB","GBR","UNITED KINGDOM" -"3653408216","3653408223","MW","MWI","MALAWI" -"3653408224","3653408231","GB","GBR","UNITED KINGDOM" -"3653408232","3653408239","KE","KEN","KENYA" -"3653408240","3653408247","ZM","ZMB","ZAMBIA" -"3653408248","3653408767","GB","GBR","UNITED KINGDOM" -"3653408768","3653409023","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"3653409024","3653409039","GB","GBR","UNITED KINGDOM" -"3653409040","3653409047","NG","NGA","NIGERIA" -"3653409048","3653409087","GB","GBR","UNITED KINGDOM" -"3653409088","3653409095","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"3653409096","3653409103","GB","GBR","UNITED KINGDOM" -"3653409104","3653409127","NG","NGA","NIGERIA" -"3653409128","3653409143","CD","COD","THE DEMOCRATIC REPUBLIC OF THE CONGO" -"3653409144","3653409151","NG","NGA","NIGERIA" -"3653409152","3653409175","GB","GBR","UNITED KINGDOM" -"3653409176","3653409183","NG","NGA","NIGERIA" -"3653409184","3653409191","GB","GBR","UNITED KINGDOM" -"3653409192","3653409199","NG","NGA","NIGERIA" -"3653409200","3653409223","GB","GBR","UNITED KINGDOM" -"3653409224","3653409231","NG","NGA","NIGERIA" -"3653409232","3653409279","GB","GBR","UNITED KINGDOM" -"3653409280","3653409535","TZ","TZA","UNITED REPUBLIC OF TANZANIA" -"3653409536","3653409559","UA","UKR","UKRAINE" -"3653409560","3653409567","CM","CMR","CAMEROON" -"3653409568","3653409575","UA","UKR","UKRAINE" -"3653409576","3653409615","GB","GBR","UNITED KINGDOM" -"3653409616","3653409623","IQ","IRQ","IRAQ" -"3653409624","3653409639","NG","NGA","NIGERIA" -"3653409640","3653409647","GB","GBR","UNITED KINGDOM" -"3653409648","3653409663","NG","NGA","NIGERIA" -"3653409664","3653409791","CM","CMR","CAMEROON" -"3653409792","3653409855","ZW","ZWE","ZIMBABWE" -"3653409856","3653409919","GB","GBR","UNITED KINGDOM" -"3653409920","3653410047","NG","NGA","NIGERIA" -"3653410048","3653410063","YT","MYT","MAYOTTE" -"3653410064","3653410079","UG","UGA","UGANDA" -"3653410080","3653410087","GB","GBR","UNITED KINGDOM" -"3653410088","3653410095","NG","NGA","NIGERIA" -"3653410096","3653410111","ZW","ZWE","ZIMBABWE" -"3653410112","3653410119","GB","GBR","UNITED KINGDOM" -"3653410120","3653410127","NG","NGA","NIGERIA" -"3653410128","3653410143","GB","GBR","UNITED KINGDOM" -"3653410144","3653410151","ET","ETH","ETHIOPIA" -"3653410152","3653410159","KE","KEN","KENYA" -"3653410160","3653410175","NG","NGA","NIGERIA" -"3653410176","3653410183","KE","KEN","KENYA" -"3653410184","3653410191","MZ","MOZ","MOZAMBIQUE" -"3653410192","3653410199","ZW","ZWE","ZIMBABWE" -"3653410200","3653410215","GB","GBR","UNITED KINGDOM" -"3653410216","3653410223","ZW","ZWE","ZIMBABWE" -"3653410224","3653410247","GB","GBR","UNITED KINGDOM" -"3653410248","3653410255","ZM","ZMB","ZAMBIA" -"3653410256","3653410263","GB","GBR","UNITED KINGDOM" -"3653410264","3653410271","NG","NGA","NIGERIA" -"3653410272","3653410279","SD","SDN","SUDAN" -"3653410280","3653410287","LU","LUX","LUXEMBOURG" -"3653410288","3653410295","GB","GBR","UNITED KINGDOM" -"3653410296","3653410303","MW","MWI","MALAWI" -"3653410304","3653410815","GB","GBR","UNITED KINGDOM" -"3653410816","3653414911","CZ","CZE","CZECH REPUBLIC" -"3653414912","3653419007","IT","ITA","ITALY" -"3653419008","3653423103","IL","ISR","ISRAEL" -"3653423104","3653427199","GB","GBR","UNITED KINGDOM" -"3653427200","3653431295","DE","DEU","GERMANY" -"3653431296","3653435391","RU","RUS","RUSSIAN FEDERATION" -"3653435392","3653439487","DE","DEU","GERMANY" -"3653439488","3653443583","FR","FRA","FRANCE" -"3653443584","3653444351","DE","DEU","GERMANY" -"3653444352","3653444383","IT","ITA","ITALY" -"3653444384","3653447679","DE","DEU","GERMANY" -"3653447680","3653451775","LV","LVA","LATVIA" -"3653451776","3653464063","RU","RUS","RUSSIAN FEDERATION" -"3653464064","3653468159","NL","NLD","NETHERLANDS" -"3653468160","3653472255","GR","GRC","GREECE" -"3653472256","3653472279","NL","NLD","NETHERLANDS" -"3653472280","3653472291","AF","AFG","AFGHANISTAN" -"3653472292","3653472511","NL","NLD","NETHERLANDS" -"3653472512","3653472559","AF","AFG","AFGHANISTAN" -"3653472560","3653472591","NL","NLD","NETHERLANDS" -"3653472592","3653472911","AF","AFG","AFGHANISTAN" -"3653472912","3653472919","NL","NLD","NETHERLANDS" -"3653472920","3653472943","AF","AFG","AFGHANISTAN" -"3653472944","3653474303","NL","NLD","NETHERLANDS" -"3653474304","3653474367","US","USA","UNITED STATES" -"3653474368","3653476351","NL","NLD","NETHERLANDS" -"3653476352","3653480447","CZ","CZE","CZECH REPUBLIC" -"3653480448","3653484543","DK","DNK","DENMARK" -"3653484544","3653488639","TR","TUR","TURKEY" -"3653488640","3653492735","RU","RUS","RUSSIAN FEDERATION" -"3653492736","3653500927","NL","NLD","NETHERLANDS" -"3653500928","3653505023","GB","GBR","UNITED KINGDOM" -"3653505024","3653509119","KZ","KAZ","KAZAKHSTAN" -"3653509120","3653513215","NL","NLD","NETHERLANDS" -"3653513216","3653517311","NO","NOR","NORWAY" -"3653517312","3653518367","AT","AUT","AUSTRIA" -"3653518368","3653518399","SK","SVK","SLOVAKIA" -"3653518400","3653518479","AT","AUT","AUSTRIA" -"3653518480","3653518495","SK","SVK","SLOVAKIA" -"3653518496","3653519815","AT","AUT","AUSTRIA" -"3653519816","3653519871","SK","SVK","SLOVAKIA" -"3653519872","3653520191","AT","AUT","AUSTRIA" -"3653520192","3653520255","SK","SVK","SLOVAKIA" -"3653520256","3653522975","AT","AUT","AUSTRIA" -"3653522976","3653522991","SK","SVK","SLOVAKIA" -"3653522992","3653523199","AT","AUT","AUSTRIA" -"3653523200","3653523455","SK","SVK","SLOVAKIA" -"3653523456","3653523615","AT","AUT","AUSTRIA" -"3653523616","3653523647","SK","SVK","SLOVAKIA" -"3653523648","3653524551","AT","AUT","AUSTRIA" -"3653524552","3653524559","GR","GRC","GREECE" -"3653524560","3653524735","AT","AUT","AUSTRIA" -"3653524736","3653524863","SK","SVK","SLOVAKIA" -"3653524864","3653524959","AT","AUT","AUSTRIA" -"3653524960","3653525151","SK","SVK","SLOVAKIA" -"3653525152","3653525183","AT","AUT","AUSTRIA" -"3653525184","3653525215","SK","SVK","SLOVAKIA" -"3653525216","3653525503","AT","AUT","AUSTRIA" -"3653533696","3653537791","HU","HUN","HUNGARY" -"3653537792","3653541887","AT","AUT","AUSTRIA" -"3653541888","3653545087","UA","UKR","UKRAINE" -"3653545088","3653545215","AT","AUT","AUSTRIA" -"3653545216","3653545343","UA","UKR","UKRAINE" -"3653545344","3653545471","SE","SWE","SWEDEN" -"3653545472","3653545727","UA","UKR","UKRAINE" -"3653545728","3653545791","SE","SWE","SWEDEN" -"3653545792","3653545855","UA","UKR","UKRAINE" -"3653545856","3653545983","SE","SWE","SWEDEN" -"3653545984","3653550079","CH","CHE","SWITZERLAND" -"3653550080","3653554175","GB","GBR","UNITED KINGDOM" -"3653554176","3653558271","CZ","CZE","CZECH REPUBLIC" -"3653558272","3653559671","GB","GBR","UNITED KINGDOM" -"3653559672","3653559679","US","USA","UNITED STATES" -"3653559680","3653566463","GB","GBR","UNITED KINGDOM" -"3653566464","3653570559","RU","RUS","RUSSIAN FEDERATION" -"3653570560","3653574655","NO","NOR","NORWAY" -"3653574656","3653578751","CZ","CZE","CZECH REPUBLIC" -"3653578752","3653582847","SE","SWE","SWEDEN" -"3653582848","3653586943","PL","POL","POLAND" -"3653586944","3653591039","DE","DEU","GERMANY" -"3653591040","3653595135","LU","LUX","LUXEMBOURG" -"3653595136","3653599231","RU","RUS","RUSSIAN FEDERATION" -"3653599232","3653603327","BG","BGR","BULGARIA" -"3653603328","3653607423","CZ","CZE","CZECH REPUBLIC" -"3653607424","3653611519","PL","POL","POLAND" -"3653611520","3653615615","HU","HUN","HUNGARY" -"3653619712","3653623295","CH","CHE","SWITZERLAND" -"3653623296","3653623551","JP","JPN","JAPAN" -"3653623552","3653623807","US","USA","UNITED STATES" -"3653623808","3653636095","RU","RUS","RUSSIAN FEDERATION" -"3653636096","3653640191","NL","NLD","NETHERLANDS" -"3653640192","3653644031","GB","GBR","UNITED KINGDOM" -"3653644032","3653644047","BE","BEL","BELGIUM" -"3653644048","3653644271","GB","GBR","UNITED KINGDOM" -"3653644272","3653644275","BE","BEL","BELGIUM" -"3653644276","3653648383","GB","GBR","UNITED KINGDOM" -"3653648384","3653652479","SE","SWE","SWEDEN" -"3653652480","3653656575","RU","RUS","RUSSIAN FEDERATION" -"3653656576","3653660671","GB","GBR","UNITED KINGDOM" -"3653660672","3653664767","CZ","CZE","CZECH REPUBLIC" -"3653664768","3653668863","UA","UKR","UKRAINE" -"3653668864","3653672959","SE","SWE","SWEDEN" -"3653672960","3653681151","RU","RUS","RUSSIAN FEDERATION" -"3653685248","3653689343","DK","DNK","DENMARK" -"3653689344","3653693439","LV","LVA","LATVIA" -"3653693440","3653697535","DE","DEU","GERMANY" -"3653697536","3653705727","IT","ITA","ITALY" -"3653705728","3653705735","SE","SWE","SWEDEN" -"3653705736","3653705863","NO","NOR","NORWAY" -"3653705864","3653705871","SE","SWE","SWEDEN" -"3653705872","3653705895","NO","NOR","NORWAY" -"3653705896","3653705903","BS","BHS","BAHAMAS" -"3653705904","3653706175","NO","NOR","NORWAY" -"3653706176","3653706191","SE","SWE","SWEDEN" -"3653706192","3653706271","NO","NOR","NORWAY" -"3653706272","3653706303","SE","SWE","SWEDEN" -"3653706304","3653706495","NO","NOR","NORWAY" -"3653706496","3653706751","SE","SWE","SWEDEN" -"3653706752","3653710847","NO","NOR","NORWAY" -"3653710848","3653710911","SE","SWE","SWEDEN" -"3653710912","3653713919","NO","NOR","NORWAY" -"3653713920","3653718015","DE","DEU","GERMANY" -"3653718016","3653722111","AT","AUT","AUSTRIA" -"3653722112","3653730303","LV","LVA","LATVIA" -"3653730304","3653734399","BA","BIH","BOSNIA AND HERZEGOVINA" -"3653738496","3653740295","GB","GBR","UNITED KINGDOM" -"3653740296","3653740303","US","USA","UNITED STATES" -"3653740304","3653744895","GB","GBR","UNITED KINGDOM" -"3653744896","3653744959","AE","ARE","UNITED ARAB EMIRATES" -"3653744960","3653746687","GB","GBR","UNITED KINGDOM" -"3653746688","3653750783","DE","DEU","GERMANY" -"3653750784","3653754879","RU","RUS","RUSSIAN FEDERATION" -"3653754880","3653758975","UA","UKR","UKRAINE" -"3653758976","3653763071","RU","RUS","RUSSIAN FEDERATION" -"3653763072","3654025215","IT","ITA","ITALY" -"3654025216","3654034783","GB","GBR","UNITED KINGDOM" -"3654034784","3654034799","LU","LUX","LUXEMBOURG" -"3654034800","3654035583","GB","GBR","UNITED KINGDOM" -"3654035584","3654035591","US","USA","UNITED STATES" -"3654035592","3654035607","GB","GBR","UNITED KINGDOM" -"3654035608","3654035615","SE","SWE","SWEDEN" -"3654035616","3654061035","GB","GBR","UNITED KINGDOM" -"3654061036","3654061039","US","USA","UNITED STATES" -"3654061040","3654061951","GB","GBR","UNITED KINGDOM" -"3654061952","3654062079","DE","DEU","GERMANY" -"3654062080","3654066027","GB","GBR","UNITED KINGDOM" -"3654066028","3654066031","MC","MCO","MONACO" -"3654066032","3654287359","GB","GBR","UNITED KINGDOM" -"3654287360","3654607871","SE","SWE","SWEDEN" -"3654607872","3654608127","NO","NOR","NORWAY" -"3654608128","3654608895","SE","SWE","SWEDEN" -"3654608896","3654609919","NO","NOR","NORWAY" -"3654609920","3654613007","SE","SWE","SWEDEN" -"3654613008","3654613015","RU","RUS","RUSSIAN FEDERATION" -"3654613016","3654613055","SE","SWE","SWEDEN" -"3654613056","3654613071","RU","RUS","RUSSIAN FEDERATION" -"3654613072","3654613087","SE","SWE","SWEDEN" -"3654613088","3654613151","RU","RUS","RUSSIAN FEDERATION" -"3654613152","3654613247","SE","SWE","SWEDEN" -"3654613248","3654614015","NO","NOR","NORWAY" -"3654614016","3654614031","SE","SWE","SWEDEN" -"3654614032","3654614047","US","USA","UNITED STATES" -"3654614048","3654614079","SE","SWE","SWEDEN" -"3654614080","3654614271","FI","FIN","FINLAND" -"3654614272","3654614527","SE","SWE","SWEDEN" -"3654614528","3654614783","RU","RUS","RUSSIAN FEDERATION" -"3654614784","3654615039","NO","NOR","NORWAY" -"3654615040","3654811647","SE","SWE","SWEDEN" -"3654811648","3654942719","ES","ESP","SPAIN" -"3654942720","3655073791","IR","IRN","ISLAMIC REPUBLIC OF IRAN" -"3655073792","3655335935","IT","ITA","ITALY" -"3655335936","3656229703","DE","DEU","GERMANY" -"3656229704","3656229711","ES","ESP","SPAIN" -"3656229712","3656233999","DE","DEU","GERMANY" -"3656234000","3656234007","NL","NLD","NETHERLANDS" -"3656234008","3656236527","DE","DEU","GERMANY" -"3656236528","3656236535","GB","GBR","UNITED KINGDOM" -"3656236536","3656236543","US","USA","UNITED STATES" -"3656236544","3656633487","DE","DEU","GERMANY" -"3656633488","3656633495","GB","GBR","UNITED KINGDOM" -"3656633496","3656633503","US","USA","UNITED STATES" -"3656633504","3656650583","DE","DEU","GERMANY" -"3656650584","3656650591","US","USA","UNITED STATES" -"3656650592","3656661183","DE","DEU","GERMANY" -"3656661184","3656661199","AT","AUT","AUSTRIA" -"3656661200","3656661583","DE","DEU","GERMANY" -"3656661584","3656661599","AT","AUT","AUSTRIA" -"3656661600","3656661647","DE","DEU","GERMANY" -"3656661648","3656661679","AT","AUT","AUSTRIA" -"3656661680","3656662271","DE","DEU","GERMANY" -"3656662272","3656662367","AT","AUT","AUSTRIA" -"3656662368","3656662431","DE","DEU","GERMANY" -"3656662432","3656662463","AT","AUT","AUSTRIA" -"3656662464","3657433087","DE","DEU","GERMANY" -"3657433088","3659530239","CN","CHN","CHINA" -"3659530240","3659595775","TW","TWN","TAIWAN" -"3659595776","3659628543","ID","IDN","INDONESIA" -"3659628544","3659661311","JP","JPN","JAPAN" -"3659661312","3659792383","TW","TWN","TAIWAN" -"3659792384","3660054527","KR","KOR","REPUBLIC OF KOREA" -"3660054528","3660578815","JP","JPN","JAPAN" -"3660578816","3661103103","KR","KOR","REPUBLIC OF KOREA" -"3661103104","3663986687","CN","CHN","CHINA" -"3663986688","3663987711","AU","AUS","AUSTRALIA" -"3663987712","3663987967","ID","IDN","INDONESIA" -"3663987968","3663989247","JP","JPN","JAPAN" -"3663989248","3663989503","VN","VNM","VIET NAM" -"3663989504","3663989759","ID","IDN","INDONESIA" -"3663989760","3663990271","AU","AUS","AUSTRALIA" -"3663990272","3663990527","VN","VNM","VIET NAM" -"3663990528","3663990783","JP","JPN","JAPAN" -"3663990784","3663991295","HK","HKG","HONG KONG" -"3663991296","3663991551","MY","MYS","MALAYSIA" -"3663991552","3663991807","AU","AUS","AUSTRALIA" -"3663991808","3663992063","JP","JPN","JAPAN" -"3663992064","3663992319","NZ","NZL","NEW ZEALAND" -"3663992320","3663992575","MY","MYS","MALAYSIA" -"3663992576","3663993599","NZ","NZL","NEW ZEALAND" -"3663993600","3663996159","ID","IDN","INDONESIA" -"3663996160","3663996415","BD","BGD","BANGLADESH" -"3663996416","3663996671","TH","THA","THAILAND" -"3663996672","3663997183","AU","AUS","AUSTRALIA" -"3663997184","3663997439","ID","IDN","INDONESIA" -"3663997440","3663997695","JP","JPN","JAPAN" -"3663997696","3663997951","AU","AUS","AUSTRALIA" -"3663997952","3663998207","MY","MYS","MALAYSIA" -"3663998208","3663998463","JP","JPN","JAPAN" -"3663998464","3663998975","TH","THA","THAILAND" -"3663998976","3663999487","IN","IND","INDIA" -"3663999488","3663999743","AU","AUS","AUSTRALIA" -"3663999744","3663999999","KH","KHM","CAMBODIA" -"3664000000","3664000767","AU","AUS","AUSTRALIA" -"3664000768","3664001023","ID","IDN","INDONESIA" -"3664001024","3664001279","NZ","NZL","NEW ZEALAND" -"3664001280","3664001535","LK","LKA","SRI LANKA" -"3664001536","3664001791","MY","MYS","MALAYSIA" -"3664001792","3664002047","AU","AUS","AUSTRALIA" -"3664002048","3664002303","VN","VNM","VIET NAM" -"3664002304","3664002559","LK","LKA","SRI LANKA" -"3664002560","3664003327","ID","IDN","INDONESIA" -"3664003328","3664003583","NZ","NZL","NEW ZEALAND" -"3664003584","3664003839","TH","THA","THAILAND" -"3664003840","3664004095","JP","JPN","JAPAN" -"3664004096","3664004351","NZ","NZL","NEW ZEALAND" -"3664004352","3664004607","MY","MYS","MALAYSIA" -"3664004608","3664052223","AU","AUS","AUSTRALIA" -"3664052224","3664084991","NZ","NZL","NEW ZEALAND" -"3664084992","3664117759","KR","KOR","REPUBLIC OF KOREA" -"3664117760","3664248831","HK","HKG","HONG KONG" -"3664248832","3664642047","CN","CHN","CHINA" -"3664642048","3664707583","JP","JPN","JAPAN" -"3664707584","3664773119","MY","MYS","MALAYSIA" -"3664773120","3666870271","JP","JPN","JAPAN" -"3666870272","3667918847","KR","KOR","REPUBLIC OF KOREA" -"3667918848","3668967423","TW","TWN","TAIWAN" -"3668967424","3669491711","JP","JPN","JAPAN" -"3669491712","3669557247","TW","TWN","TAIWAN" -"3669557248","3669590015","AU","AUS","AUSTRALIA" -"3669590016","3669606399","JP","JPN","JAPAN" -"3669606400","3669614591","CN","CHN","CHINA" -"3669614592","3669616639","NZ","NZL","NEW ZEALAND" -"3669616640","3669620735","AU","AUS","AUSTRALIA" -"3669620736","3669622783","JP","JPN","JAPAN" -"3669622784","3669688319","SG","SGP","SINGAPORE" -"3669688320","3669753855","TW","TWN","TAIWAN" -"3669753856","3669822719","HK","HKG","HONG KONG" -"3669822720","3669822735","US","USA","UNITED STATES" -"3669822736","3670015999","HK","HKG","HONG KONG" -"3670016000","3671064575","CN","CHN","CHINA" -"3671064576","3671130111","MY","MYS","MALAYSIA" -"3671130112","3671195647","KR","KOR","REPUBLIC OF KOREA" -"3671195648","3671326719","TW","TWN","TAIWAN" -"3671326720","3671392255","SG","SGP","SINGAPORE" -"3671392256","3671457791","HK","HKG","HONG KONG" -"3671457792","3671588863","AU","AUS","AUSTRALIA" -"3671588864","3672637439","JP","JPN","JAPAN" -"3672637440","3673161727","KR","KOR","REPUBLIC OF KOREA" -"3673161728","3673686015","CN","CHN","CHINA" -"3673686016","3673751551","IN","IND","INDIA" -"3673751552","3673817087","CN","CHN","CHINA" -"3673817088","3673882623","HK","HKG","HONG KONG" -"3673882624","3673948159","JP","JPN","JAPAN" -"3673948160","3674210303","HK","HKG","HONG KONG" -"3674210304","3674431743","JP","JPN","JAPAN" -"3674431744","3674431999","UA","UKR","UKRAINE" -"3674432000","3678404607","JP","JPN","JAPAN" -"3678404608","3678535679","IN","IND","INDIA" -"3678535680","3678666751","JP","JPN","JAPAN" -"3678666752","3678928895","TW","TWN","TAIWAN" -"3678928896","3678994431","CN","CHN","CHINA" -"3678994432","3679027199","HK","HKG","HONG KONG" -"3679027200","3679059967","JP","JPN","JAPAN" -"3679059968","3679158271","SG","SGP","SINGAPORE" -"3679158272","3679191039","JP","JPN","JAPAN" -"3679191040","3679453183","HK","HKG","HONG KONG" -"3679453184","3679584255","TW","TWN","TAIWAN" -"3679584256","3679649791","CN","CHN","CHINA" -"3679649792","3679682559","ID","IDN","INDONESIA" -"3679682560","3679715327","IN","IND","INDIA" -"3679715328","3679977471","TW","TWN","TAIWAN" -"3679977472","3680108543","NZ","NZL","NEW ZEALAND" -"3680108544","3680124927","TW","TWN","TAIWAN" -"3680124928","3680133119","PH","PHL","PHILIPPINES" -"3680133120","3680137215","IN","IND","INDIA" -"3680137216","3680141311","HK","HKG","HONG KONG" -"3680141312","3680174079","AU","AUS","AUSTRALIA" -"3680174080","3680206847","TW","TWN","TAIWAN" -"3680206848","3680239615","IN","IND","INDIA" -"3680239616","3680403455","MY","MYS","MALAYSIA" -"3680403456","3680436223","JP","JPN","JAPAN" -"3680436224","3680501759","MY","MYS","MALAYSIA" -"3680501760","3682598911","JP","JPN","JAPAN" -"3682598912","3684696063","CN","CHN","CHINA" -"3684696064","3688366079","JP","JPN","JAPAN" -"3688366080","3689938943","CN","CHN","CHINA" -"3689938944","3690070015","KR","KOR","REPUBLIC OF KOREA" -"3690070016","3690463231","CN","CHN","CHINA" -"3690463232","3690987519","KR","KOR","REPUBLIC OF KOREA" -"3690987520","3695181823","JP","JPN","JAPAN" -"3695181824","3697278975","KR","KOR","REPUBLIC OF KOREA" -"3697278976","3697606655","JP","JPN","JAPAN" -"3697606656","3697655807","AU","AUS","AUSTRALIA" -"3697655808","3697672191","CN","CHN","CHINA" -"3697672192","3697737727","JP","JPN","JAPAN" -"3697737728","3697803263","KR","KOR","REPUBLIC OF KOREA" -"3697803264","3698327551","JP","JPN","JAPAN" -"3698327552","3698589695","CN","CHN","CHINA" -"3698589696","3699376127","KR","KOR","REPUBLIC OF KOREA" -"3699376128","3700424703","TW","TWN","TAIWAN" -"3700424704","3700752383","JP","JPN","JAPAN" -"3700752384","3700817919","KR","KOR","REPUBLIC OF KOREA" -"3700817920","3700977663","JP","JPN","JAPAN" -"3700977664","3700979711","AU","AUS","AUSTRALIA" -"3700979712","3700981759","JP","JPN","JAPAN" -"3700981760","3701014527","CN","CHN","CHINA" -"3701014528","3701080063","JP","JPN","JAPAN" -"3701080064","3701211135","CN","CHN","CHINA" -"3701211136","3701252095","JP","JPN","JAPAN" -"3701252096","3701256191","AU","AUS","AUSTRALIA" -"3701256192","3701258239","SG","SGP","SINGAPORE" -"3701258240","3701260287","IN","IND","INDIA" -"3701260288","3701293055","JP","JPN","JAPAN" -"3701293056","3701301247","AU","AUS","AUSTRALIA" -"3701301248","3701305343","ID","IDN","INDONESIA" -"3701305344","3701309439","TW","TWN","TAIWAN" -"3701309440","3701473279","JP","JPN","JAPAN" -"3701473280","3704619007","CN","CHN","CHINA" -"3704619008","3705667583","JP","JPN","JAPAN" -"3705667584","3705929727","IN","IND","INDIA" -"3705929728","3706060799","TW","TWN","TAIWAN" -"3706060800","3706126335","KR","KOR","REPUBLIC OF KOREA" -"3706126336","3706142719","CN","CHN","CHINA" -"3706142720","3706159103","VN","VNM","VIET NAM" -"3706159104","3706191871","CN","CHN","CHINA" -"3706191872","3706208255","SG","SGP","SINGAPORE" -"3706208256","3706224639","CN","CHN","CHINA" -"3706224640","3706257407","HK","HKG","HONG KONG" -"3706257408","3706322943","AU","AUS","AUSTRALIA" -"3706322944","3706388479","CN","CHN","CHINA" -"3706388480","3706781695","AU","AUS","AUSTRALIA" -"3706781696","3706847231","HK","HKG","HONG KONG" -"3706847232","3706978303","CN","CHN","CHINA" -"3706978304","3707109375","AU","AUS","AUSTRALIA" -"3707109376","3707174911","HK","HKG","HONG KONG" -"3707174912","3707207679","JP","JPN","JAPAN" -"3707207680","3707208703","TW","TWN","TAIWAN" -"3707208704","3707215871","AU","AUS","AUSTRALIA" -"3707215872","3707217919","BD","BGD","BANGLADESH" -"3707217920","3707219967","ID","IDN","INDONESIA" -"3707219968","3707222015","AU","AUS","AUSTRALIA" -"3707222016","3707224063","JP","JPN","JAPAN" -"3707224064","3707240447","LK","LKA","SRI LANKA" -"3707240448","3707568127","CN","CHN","CHINA" -"3707568128","3707633663","AU","AUS","AUSTRALIA" -"3707633664","3707699199","JP","JPN","JAPAN" -"3707699200","3707764735","SG","SGP","SINGAPORE" -"3707764736","3708600319","CN","CHN","CHINA" -"3708600320","3708616703","JP","JPN","JAPAN" -"3708616704","3708813311","CN","CHN","CHINA" -"3708813312","3715629055","JP","JPN","JAPAN" -"3715629056","3715653631","TW","TWN","TAIWAN" -"3715653632","3715655679","BD","BGD","BANGLADESH" -"3715655680","3715657727","IN","IND","INDIA" -"3715657728","3715659775","AU","AUS","AUSTRALIA" -"3715659776","3715661823","SG","SGP","SINGAPORE" -"3715661824","3715674111","AU","AUS","AUSTRALIA" -"3715674112","3715678207","HK","HKG","HONG KONG" -"3715678208","3715694591","PK","PAK","PAKISTAN" -"3715694592","3715710975","VN","VNM","VIET NAM" -"3715710976","3715719167","AU","AUS","AUSTRALIA" -"3715719168","3715727359","PH","PHL","PHILIPPINES" -"3715727360","3715735551","AU","AUS","AUSTRALIA" -"3715735552","3715741695","JP","JPN","JAPAN" -"3715741696","3715743743","PH","PHL","PHILIPPINES" -"3715743744","3715760127","JP","JPN","JAPAN" -"3715760128","3715891199","CN","CHN","CHINA" -"3715891200","3716153343","HK","HKG","HONG KONG" -"3716153344","3716169727","SG","SGP","SINGAPORE" -"3716169728","3716186111","TH","THA","THAILAND" -"3716186112","3716218879","IN","IND","INDIA" -"3716218880","3716415487","CN","CHN","CHINA" -"3716415488","3716431871","VN","VNM","VIET NAM" -"3716431872","3716440063","KR","KOR","REPUBLIC OF KOREA" -"3716440064","3716444159","JP","JPN","JAPAN" -"3716444160","3716446207","PK","PAK","PAKISTAN" -"3716446208","3716448255","AU","AUS","AUSTRALIA" -"3716448256","3716464639","JP","JPN","JAPAN" -"3716464640","3716481023","ID","IDN","INDONESIA" -"3716481024","3716489215","VN","VNM","VIET NAM" -"3716489216","3716493311","MY","MYS","MALAYSIA" -"3716493312","3716497407","KR","KOR","REPUBLIC OF KOREA" -"3716497408","3716513791","JP","JPN","JAPAN" -"3716513792","3716530175","KR","KOR","REPUBLIC OF KOREA" -"3716530176","3716536372","AU","AUS","AUSTRALIA" -"3716536373","3716536373","AS","ASM","AMERICAN SAMOA" -"3716536374","3716537111","AU","AUS","AUSTRALIA" -"3716537112","3716537119","AS","ASM","AMERICAN SAMOA" -"3716537120","3716537151","AU","AUS","AUSTRALIA" -"3716537152","3716537183","AS","ASM","AMERICAN SAMOA" -"3716537184","3716537199","AU","AUS","AUSTRALIA" -"3716537200","3716537215","AS","ASM","AMERICAN SAMOA" -"3716537216","3716537279","AU","AUS","AUSTRALIA" -"3716537280","3716537343","AS","ASM","AMERICAN SAMOA" -"3716537344","3716537407","AU","AUS","AUSTRALIA" -"3716537408","3716537471","AS","ASM","AMERICAN SAMOA" -"3716537472","3716537535","AU","AUS","AUSTRALIA" -"3716537536","3716537567","HK","HKG","HONG KONG" -"3716537568","3716537599","JP","JPN","JAPAN" -"3716537600","3716538367","AU","AUS","AUSTRALIA" -"3716538368","3716546559","CN","CHN","CHINA" -"3716546560","3716677631","IN","IND","INDIA" -"3716677632","3716808703","CN","CHN","CHINA" -"3716808704","3718840319","KR","KOR","REPUBLIC OF KOREA" -"3718840320","3718905855","TW","TWN","TAIWAN" -"3718905856","3719036927","JP","JPN","JAPAN" -"3719036928","3719823359","CN","CHN","CHINA" -"3719823360","3720347647","JP","JPN","JAPAN" -"3720347648","3720859647","CN","CHN","CHINA" -"3720859648","3720863743","AU","AUS","AUSTRALIA" -"3720863744","3723493375","CN","CHN","CHINA" -"3723493376","3725590527","JP","JPN","JAPAN" -"3725590528","3730833407","CN","CHN","CHINA" -"3730833408","3732602879","KR","KOR","REPUBLIC OF KOREA" -"3732602880","3732668415","TH","THA","THAILAND" -"3732668416","3732733951","ID","IDN","INDONESIA" -"3732733952","3732799487","CN","CHN","CHINA" -"3732799488","3732832255","PH","PHL","PHILIPPINES" -"3732832256","3732865023","CN","CHN","CHINA" -"3732865024","3732930559","PH","PHL","PHILIPPINES" -"3732930560","3733979135","CN","CHN","CHINA" -"3733979136","3734503423","JP","JPN","JAPAN" -"3734503424","3734765567","NZ","NZL","NEW ZEALAND" -"3734765568","3734896639","TW","TWN","TAIWAN" -"3734896640","3735027711","JP","JPN","JAPAN" -"3735027712","3735289855","CN","CHN","CHINA" -"3735289856","3735388159","SG","SGP","SINGAPORE" -"3735388160","3735404543","LK","LKA","SRI LANKA" -"3735404544","3735420927","ID","IDN","INDONESIA" -"3735420928","3735551999","HK","HKG","HONG KONG" -"3735552000","3739222015","CN","CHN","CHINA" -"3739222016","3739570175","JP","JPN","JAPAN" -"3739570176","3739572223","ID","IDN","INDONESIA" -"3739572224","3739574271","AU","AUS","AUSTRALIA" -"3739574272","3739680767","JP","JPN","JAPAN" -"3739680768","3739697151","KR","KOR","REPUBLIC OF KOREA" -"3739697152","3739746303","JP","JPN","JAPAN" -"3739746304","3740270591","KR","KOR","REPUBLIC OF KOREA" -"3740270592","3740925951","CN","CHN","CHINA" -"3740925952","3741024255","TW","TWN","TAIWAN" -"3741024256","3741057023","KR","KOR","REPUBLIC OF KOREA" -"3741057024","3741319167","VN","VNM","VIET NAM" -"3758096384","4294967295","US","USA","UNITED STATES" +"7602176","7864319","AT" +"16777216","16777471","AU" +"16777472","16778239","CN" +"16778240","16779263","AU" +"16779264","16781311","CN" +"16781312","16785407","JP" +"16785408","16793599","CN" +"16793600","16809983","JP" +"16809984","16842751","TH" +"16842752","16843007","CN" +"16843008","16843263","AU" +"16843264","16859135","CN" +"16859136","16875519","JP" +"16875520","16908287","TH" +"16908288","16909055","CN" +"16909056","16909311","AU" +"16909312","16941055","CN" +"16941056","16973823","TH" +"16973824","17039359","CN" +"17039360","17039615","AU" +"17039616","17072127","CN" +"17072128","17104895","TH" +"17104896","17170431","JP" +"17170432","17301503","IN" +"17301504","17367039","CN" +"17367040","17432575","MY" +"17432576","17435135","CN" +"17435136","17435391","AU" +"17435392","17465343","CN" +"17465344","17498111","TH" +"17498112","17563647","KR" +"17563648","17825791","CN" +"17825792","18087935","KR" +"18087936","18153471","TH" +"18153472","18219007","JP" +"18219008","18350079","IN" +"18350080","18874367","CN" +"18874368","18939903","HK" +"18939904","19005439","JP" +"19005440","19136511","TW" +"19136512","19202047","HK" +"19202048","19267583","PH" +"19267584","19398655","IN" +"19398656","19726335","AU" +"19726336","19791871","CN" +"19791872","19922943","TH" +"19922944","20185087","CN" +"20185088","20447231","VN" +"20447232","20971519","CN" +"20971520","21102591","HK" +"21102592","21233663","JP" +"21233664","21495807","CN" +"21495808","22020095","JP" +"22020096","23068671","CN" +"23068672","24117247","KR" +"24117248","24379391","JP" +"24379392","24641535","CN" +"24641536","27262975","AU" +"27262976","28311551","TW" +"28311552","28442623","KR" +"28442624","28540927","AU" +"28540928","28573695","TH" +"28573696","28966911","CN" +"28966912","29097983","IN" +"29097984","29884415","CN" +"29884416","29949951","TW" +"29949952","30015487","KR" +"30015488","30408703","CN" +"30408704","33488895","KR" +"33488896","33554431","AU" +"33554432","34603007","FR" +"34603008","34604543","EU" +"34604544","34605055","DE" +"34605056","34620415","EU" +"34620416","34620927","SE" +"34620928","34621439","IT" +"34621440","34636799","EU" +"34636800","34637311","DE" +"34637312","34646527","EU" +"34646528","34647551","DE" +"34647552","34648575","EU" +"34648576","34649087","GR" +"34649088","34659327","EU" +"34659328","34660351","GR" +"34660352","34664447","EU" +"34664448","34668543","DE" +"34668544","34673663","EU" +"34673664","34674687","DE" +"34674688","34733055","EU" +"34733056","34734079","DE" +"34734080","34754559","EU" +"34754560","34758655","GR" +"34758656","34803711","EU" +"34803712","34807807","IT" +"34807808","34861055","EU" +"34861056","34865151","DE" +"34865152","34866175","EU" +"34866176","34867199","IT" +"34867200","34880511","EU" +"34880512","34881535","DE" +"34881536","34910975","EU" +"34910976","34911231","ES" +"34911232","34911743","DE" +"34911744","34911999","AT" +"34912000","34912255","GB" +"34912256","34912511","DE" +"34912512","34912767","ES" +"34912768","34913279","DE" +"34913280","34928383","EU" +"34928384","34928639","DE" +"34928640","34930687","EU" +"34930688","34938879","DE" +"34938880","34947071","FR" +"34947072","34953215","EU" +"34953216","34954751","AT" +"34954752","34955263","NL" +"34955264","34959359","AT" +"34959360","34963455","NL" +"34963456","34992127","EU" +"34992128","34993151","NL" +"34993152","34993663","FR" +"34993664","34993919","AT" +"34993920","34994175","DE" +"34994176","34995711","FR" +"34995712","34995967","EU" +"34995968","34996223","NL" +"34996224","34999295","EU" +"34999296","35001343","GB" +"35001344","35002367","FR" +"35002368","35008511","EU" +"35008512","35009023","FR" +"35009024","35010303","EU" +"35010304","35010559","BE" +"35010560","35011583","FR" +"35011584","35020799","EU" +"35020800","35037183","GB" +"35037184","35054079","FR" +"35054080","35054591","SE" +"35054592","35055103","EU" +"35055104","35055359","ES" +"35055360","35055615","EU" +"35055616","35055871","GB" +"35055872","35056127","NL" +"35056128","35059199","EU" +"35059200","35059711","GB" +"35059712","35060735","EU" +"35060736","35061247","GB" +"35061248","35061759","FR" +"35061760","35090431","EU" +"35090432","35094527","GR" +"35094528","35127295","EU" +"35127296","35651583","GB" +"35651584","36700159","IT" +"36700160","36962303","AE" +"36962304","37224447","IL" +"37224448","37265407","UA" +"37265408","37268479","CZ" +"37268480","37289983","UA" +"37289984","37298175","RU" +"37298176","37486591","UA" +"37486592","37748735","RU" +"37748736","38273023","SE" +"38273024","38797311","KZ" +"38797312","39059455","PT" +"39059456","39321599","GR" +"39321600","39583743","SA" +"39583744","39845887","RU" +"39845888","40370175","GB" +"40370176","40894463","DK" +"40894464","41418751","IT" +"41418752","41943039","GB" +"41943040","42205183","DK" +"42205184","42467327","KZ" +"42467328","42991615","ES" +"42991616","43253759","IR" +"43253760","43515903","NO" +"43515904","43778047","ES" +"43778048","44040191","IT" +"44040192","45088767","DE" +"45088768","46137343","IR" +"46137344","46661631","IT" +"46661632","47710207","DE" +"47710208","48234495","GB" +"48234496","49283071","IT" +"49283072","49807359","DE" +"49807360","50331647","SE" +"50331648","57083940","US" +"57083941","57083941","BE" +"57083942","68257567","US" +"68257568","68257599","CA" +"68257600","68259583","US" +"68259584","68259599","CA" +"68259600","68296775","US" +"68296776","68296783","MX" +"68296784","68298887","US" +"68298888","68298895","CA" +"68298896","68305407","US" +"68305408","68305919","MX" +"68305920","68314143","US" +"68314144","68314151","CA" +"68314152","68395663","US" +"68395664","68395671","CA" +"68395672","68438287","US" +"68438288","68438303","CA" +"68438304","68649143","US" +"68649144","68649151","CA" +"68649152","69533951","US" +"69533952","69534207","CA" +"69534208","69915111","US" +"69915112","69915119","CA" +"69915120","69937263","US" +"69937264","69937271","CA" +"69937272","69956103","US" +"69956104","69956111","BM" +"69956112","71007487","US" +"71007488","71007743","A1" +"71007744","71571339","US" +"71571340","71571340","DE" +"71571341","71571389","US" +"71571390","71571390","DE" +"71571391","71571713","US" +"71571714","71571715","DE" +"71571716","71595007","US" +"71595008","71595519","GB" +"71595520","71664639","US" +"71664640","71664692","GB" +"71664693","71664693","US" +"71664694","71664700","GB" +"71664701","71664701","US" +"71664702","71664704","GB" +"71664705","71664705","US" +"71664706","71664752","GB" +"71664753","71664753","US" +"71664754","71664895","GB" +"71664896","71665077","US" +"71665078","71665078","DE" +"71665079","71666464","US" +"71666465","71666465","DE" +"71666466","71666529","US" +"71666530","71666530","GB" +"71666531","71666711","US" +"71666712","71666719","DE" +"71666720","71667092","US" +"71667093","71667093","DE" +"71667094","71667113","US" +"71667114","71667114","NL" +"71667115","71667529","US" +"71667530","71667530","GB" +"71667531","71667625","US" +"71667626","71667626","DE" +"71667627","71667633","US" +"71667634","71667634","DE" +"71667635","71667656","US" +"71667657","71667657","NL" +"71667658","72303007","US" +"72303008","72303039","CA" +"72303040","72348895","US" +"72348896","72348927","CA" +"72348928","83886079","US" +"83886080","83951615","SY" +"83951616","83959807","UA" +"83959808","83961855","ES" +"83961856","83962111","KW" +"83962112","83962367","SA" +"83962368","83963647","CY" +"83963648","83963903","JO" +"83963904","83965951","RU" +"83965952","83967999","CZ" +"83968000","83976191","DE" +"83976192","83978239","CH" +"83978240","83980287","IQ" +"83980288","83982335","CH" +"83982336","84017151","DE" +"84017152","84021247","IT" +"84021248","84023295","GB" +"84023296","84025343","ES" +"84025344","84033535","RU" +"84033536","84037631","NL" +"84037632","84039679","TR" +"84039680","84041727","ES" +"84041728","84049919","GB" +"84049920","84082687","RO" +"84082688","84148223","RU" +"84148224","84410367","DE" +"84410368","84443135","RU" +"84443136","84451327","LB" +"84451328","84457471","RU" +"84457472","84459519","A2" +"84459520","84471807","RU" +"84471808","84473855","IQ" +"84473856","84475903","HU" +"84475904","84541439","DE" +"84557824","84574207","GB" +"84574208","84576255","FR" +"84576256","84582399","GB" +"84582400","84590591","DE" +"84594688","84598783","DE" +"84598784","84600831","IQ" +"84600832","84602879","GB" +"84602880","84606975","AZ" +"84606976","84609023","AT" +"84609024","84615167","GB" +"84615168","84617215","IT" +"84617216","84619263","PS" +"84619264","84621311","DE" +"84621312","84623359","GR" +"84623360","84627455","RU" +"84627456","84629503","GB" +"84631552","84639743","IT" +"84639744","84672511","TR" +"84672512","84934655","RO" +"84934656","85196799","RU" +"85196800","85262335","LT" +"85262336","85327871","OM" +"85327872","85360639","IR" +"85360640","85362687","IL" +"85362688","85364735","GB" +"85364736","85366783","DE" +"85366784","85368831","CZ" +"85368832","85377023","RS" +"85377024","85385215","IR" +"85385216","85387263","GB" +"85387264","85389311","SE" +"85389312","85391359","DE" +"85391360","85393407","NL" +"85393408","85401599","EU" +"85401600","85403647","IT" +"85403648","85405695","FR" +"85405696","85407743","RU" +"85407744","85409791","FI" +"85409792","85417983","CH" +"85417984","85422079","RU" +"85422080","85424127","IR" +"85424128","85426175","TR" +"85426176","85458943","BE" +"85458944","85721087","TR" +"85721088","85723135","HU" +"85723136","85725183","IT" +"85725184","85729279","RU" +"85729280","85731327","IR" +"85731328","85733375","DE" +"85733376","85737471","GB" +"85737472","85753855","DE" +"85753856","85770239","IL" +"85770240","85786623","DE" +"85786624","85852159","IL" +"85852160","86015999","AE" +"86016000","86018047","BG" +"86018048","86020095","SI" +"86020096","86022143","RU" +"86022144","86024191","GB" +"86024192","86026239","DE" +"86026240","86028287","MD" +"86028288","86030335","MK" +"86030336","86032383","DE" +"86032384","86048767","OM" +"86048768","86114303","DK" +"86114304","86147071","KZ" +"86147072","86155263","ES" +"86155264","86157311","PS" +"86157312","86159359","IL" +"86159360","86161407","UA" +"86161408","86163455","IT" +"86163456","86171647","IR" +"86171648","86173695","DE" +"86173696","86175743","NL" +"86175744","86177791","EE" +"86177792","86179839","LI" +"86179840","86220799","RU" +"86220800","86222847","JE" +"86222848","86224895","RU" +"86224896","86226943","NL" +"86226944","86228991","SE" +"86231040","86233087","ES" +"86233088","86235135","RO" +"86235136","86237183","ES" +"86237184","86245375","DE" +"86245376","86376447","OM" +"86376448","86409215","AE" +"86409216","86441983","HU" +"86441984","86442723","FR" +"86442724","86442724","PL" +"86442725","86444319","FR" +"86444320","86444323","ES" +"86444324","86446427","FR" +"86446428","86446431","DE" +"86446432","86454335","FR" +"86454336","86454339","DE" +"86454340","86456195","FR" +"86456196","86456211","DE" +"86456212","86474751","FR" +"86474752","86482943","HR" +"86482944","86484991","RU" +"86484992","86487039","NL" +"86487040","86489087","GB" +"86489088","86491135","NL" +"86491136","86493183","PL" +"86493184","86495231","RU" +"86495232","86497279","ES" +"86497280","86499327","NL" +"86499328","86503423","FR" +"86503424","86505471","DE" +"86505472","86507519","GB" +"86507520","86573055","ES" +"86573056","86638591","RO" +"86638592","86671359","RU" +"86671360","86673407","GB" +"86673408","86675455","DE" +"86675456","86677503","IT" +"86677504","86679551","FR" +"86679552","86687743","RO" +"86687744","86695935","IQ" +"86695936","86704127","SA" +"86704128","86720511","PT" +"86720512","86736895","BA" +"86736896","86745087","RU" +"86745088","86753279","HR" +"86753280","86761471","PS" +"86761472","86763519","CZ" +"86763520","86765567","IT" +"86765568","86767615","RU" +"86767616","86769663","IT" +"86769664","86773759","RU" +"86773760","86777855","EU" +"86777856","86779903","AZ" +"86779904","86786047","RU" +"86786048","86788095","NO" +"86788096","86790143","NL" +"86790144","86794239","TR" +"86794240","86795263","DE" +"86795264","86796287","NL" +"86796288","86797311","US" +"86797312","86798335","DE" +"86798336","86802431","CH" +"86802432","86804479","GE" +"86804480","86806527","DK" +"86806528","86810623","TR" +"86810624","86812671","FR" +"86812672","86814719","RU" +"86814720","86816767","SE" +"86816768","86818815","EE" +"86818816","86822911","PT" +"86822912","86824959","AT" +"86824960","86827007","LV" +"86827008","86831103","GB" +"86831104","86833151","FI" +"86833152","86835199","GB" +"86835200","86837247","DE" +"86837248","86839295","ES" +"86839296","86849535","GB" +"86849536","86851583","CZ" +"86851584","86867967","RU" +"86867968","86872063","JO" +"86872064","86874111","GB" +"86874112","86876159","NO" +"86876160","86880255","ES" +"86880256","86882303","DE" +"86882304","86884351","LB" +"86884352","86900735","RU" +"86900736","87031807","TR" +"87031808","87293951","FR" +"87293952","87359487","IR" +"87359488","87361535","ES" +"87361536","87363583","CZ" +"87363584","87367679","RU" +"87367680","87375871","IR" +"87375872","87384063","GB" +"87384064","87386111","AE" +"87386112","87388159","CH" +"87388160","87390207","UA" +"87390208","87392255","RU" +"87392256","87425023","BG" +"87425024","87556095","GR" +"87556096","87558143","ES" +"87558144","87560191","IT" +"87560192","87562239","DE" +"87562240","87564287","UA" +"87564288","87566335","HU" +"87566336","87568383","FR" +"87568384","87570431","GB" +"87570432","87572479","ES" +"87572480","87588863","MD" +"87588864","87590911","GB" +"87590912","87592959","RU" +"87592960","87597055","DK" +"87597056","87599103","ES" +"87599104","87601151","IR" +"87601152","87621631","DE" +"87621632","87623679","LB" +"87623680","87625727","KG" +"87625728","87627775","NL" +"87627776","87629823","ES" +"87629824","87631871","IR" +"87631872","87633919","DE" +"87633920","87635967","DK" +"87635968","87638015","GB" +"87638016","87640063","UA" +"87640064","87642111","RS" +"87642112","87646207","GB" +"87646208","87654399","FR" +"87654400","87670783","PL" +"87670784","87672831","DE" +"87672832","87674879","CH" +"87674880","87676927","AE" +"87676928","87678975","RU" +"87678976","87681023","NL" +"87681024","87683071","RU" +"87683072","87685119","SE" +"87685120","87687167","NL" +"87687168","87752703","UA" +"87752704","87818239","CZ" +"87818240","87883775","PL" +"87883776","87885823","IT" +"87885824","87889919","RU" +"87889920","87891967","IR" +"87891968","87900159","GB" +"87900160","87902207","DE" +"87902208","87904255","IR" +"87904256","87906303","DE" +"87906304","87908351","FI" +"87908352","87912447","BG" +"87912448","87914495","IE" +"87914496","87916543","GB" +"87916544","87932927","DE" +"87932928","87934975","GB" +"87934976","87939071","ES" +"87939072","87941119","IT" +"87941120","87943167","CH" +"87943168","87945215","RU" +"87945216","87947263","HU" +"87947264","87949311","NL" +"87949312","87982079","DE" +"87982080","88014847","RU" +"88014848","88016895","LY" +"88016896","88018943","IR" +"88018944","88020991","GB" +"88020992","88023039","FR" +"88023040","88031231","TR" +"88031232","88047615","KZ" +"88047616","88049663","RU" +"88049664","88051711","IT" +"88051712","88053759","GB" +"88053760","88055807","RU" +"88055808","88057855","AM" +"88057856","88059903","IT" +"88059904","88061951","DE" +"88061952","88063999","PL" +"88064000","88080383","HU" +"88080384","88604671","GB" +"88604672","88866815","RU" +"88866816","88932351","KZ" +"88932352","88940543","RU" +"88940544","88948735","GB" +"88948736","88965119","IT" +"88965120","88997887","AM" +"88997888","89063423","DE" +"89063424","89079807","GB" +"89079808","89096191","NL" +"89096192","89128959","RU" +"89128960","89260031","GB" +"89260032","89325567","SA" +"89325568","89327615","NL" +"89327616","89329663","GB" +"89329664","89331711","UA" +"89331712","89333759","DK" +"89333760","89337855","RO" +"89337856","89339903","ES" +"89339904","89341951","FI" +"89341952","89350143","ES" +"89350144","89352191","GB" +"89352192","89354239","IT" +"89354240","89356287","AE" +"89356288","89358335","IT" +"89358336","89374719","DE" +"89374720","89382911","GB" +"89382912","89384959","NO" +"89384960","89387007","FR" +"89387008","89391103","IE" +"89391104","90439679","IT" +"90439680","90456063","DE" +"90456064","90472447","RU" +"90472448","90476543","DE" +"90476544","90478591","FR" +"90478592","90480639","GB" +"90480640","90482687","YE" +"90482688","90484735","GB" +"90488832","90497023","BY" +"90497024","90499071","NL" +"90499072","90501119","IT" +"90501120","90503167","GB" +"90503168","90505215","IL" +"90505216","90570751","RU" +"90570752","90578943","IT" +"90578944","90583039","IR" +"90583040","90587135","CZ" +"90587136","90589183","PL" +"90589184","90591231","FR" +"90591232","90595327","GB" +"90595328","90603519","PS" +"90603520","90605567","ES" +"90605568","90607615","NL" +"90607616","90609663","CH" +"90609664","90611711","RU" +"90611712","90613759","DE" +"90613760","90615807","GB" +"90615808","90617855","SI" +"90617856","90619903","GB" +"90619904","90636287","IL" +"90636288","90701823","DK" +"90701824","90705919","TR" +"90705920","90707967","CZ" +"90707968","90710015","IT" +"90710016","90718207","UA" +"90718208","90720255","EU" +"90720256","90722303","IQ" +"90722304","90724351","FI" +"90724352","90726399","CH" +"90728448","90730495","DE" +"90730496","90734591","NL" +"90734592","90736639","SY" +"90736640","90738687","NL" +"90738688","90740735","DE" +"90740736","90742783","NL" +"90742784","90750975","BG" +"90750976","90753023","FR" +"90767360","90832895","UA" +"90832896","90898431","EU" +"90898432","90963967","RO" +"90963968","91226111","SA" +"91226112","92274687","IR" +"92274688","92536831","RU" +"100663296","121195295","US" +"121195296","121195327","IT" +"121195328","134693119","US" +"134693120","134693375","CA" +"134693376","134730239","US" +"134730240","134730495","CA" +"134730496","134738943","US" +"134738944","134739199","CA" +"134739200","134874866","US" +"134874867","134874867","DO" +"134874868","135013631","US" +"135013632","135013887","A1" +"135013888","135192575","US" +"135192576","135200767","MX" +"135200768","135430143","US" +"135430144","135430399","CA" +"135430400","135432191","US" +"135432192","135434239","CA" +"135434240","135441407","US" +"135441408","135441663","CA" +"135441664","135603199","US" +"135603200","135604223","CA" +"135604224","135606783","US" +"135606784","135607295","CA" +"135607296","135792639","US" +"135792640","135794687","CA" +"135794688","136237055","US" +"136237056","136239103","CA" +"136239104","136415487","US" +"136415488","136415743","CA" +"136415744","152305663","US" +"152305664","152338431","GB" +"152338432","167772159","US" +"184549376","201620303","US" +"201620304","201620311","CA" +"201620312","201636503","US" +"201636504","201636511","PR" +"201636512","201673767","US" +"201673768","201673775","CA" +"201673776","201674095","US" +"201674096","201674111","CA" +"201674112","201859071","US" +"201859072","201859087","VI" +"201859088","201897983","US" +"201897984","201898239","PR" +"201898240","202296847","US" +"202296848","202296855","PR" +"202296856","202385407","US" +"202385408","202385919","PR" +"202385920","202621431","US" +"202621432","202621439","PR" +"202621440","202621479","US" +"202621480","202621487","PR" +"202621488","202621495","US" +"202621496","202621503","PR" +"202621504","202621703","US" +"202621704","202621711","PR" +"202621712","202625287","US" +"202625288","202625295","PR" +"202625296","202696783","US" +"202696784","202696791","PR" +"202696792","202706431","US" +"202706432","202706943","PR" +"202706944","202934671","US" +"202934672","202934687","VI" +"202934688","202935551","US" +"202935552","202935807","PR" +"202935808","202938479","US" +"202938480","202938495","VI" +"202938496","203197063","US" +"203197064","203197071","CA" +"203197072","203625391","US" +"203625392","203625399","PR" +"203625400","203658303","US" +"203658304","203658367","PR" +"203658368","203658415","US" +"203658416","203658423","VI" +"203658424","203658463","US" +"203658464","203658471","VI" +"203658472","203658495","US" +"203658496","203658751","PR" +"203658752","203658783","US" +"203658784","203658831","VI" +"203658832","203658927","US" +"203658928","203658935","VI" +"203658936","203658943","US" +"203658944","203658951","PR" +"203658952","203658967","US" +"203658968","203658991","VI" +"203658992","203659039","US" +"203659040","203659095","VI" +"203659096","203850679","US" +"203850680","203850687","CA" +"203850688","204046335","US" +"204046336","204047103","PR" +"204047104","204047111","VI" +"204047112","204047231","US" +"204047232","204047247","VI" +"204047248","204047255","US" +"204047256","204047263","VI" +"204047264","204047311","US" +"204047312","204047335","VI" +"204047336","204047431","US" +"204047432","204047455","VI" +"204047456","204047463","US" +"204047464","204047471","VI" +"204047472","204047487","US" +"204047488","204047535","VI" +"204047536","204047543","PR" +"204047544","204047551","US" +"204047552","204047559","VI" +"204047560","204047567","PR" +"204047568","204047591","VI" +"204047592","204047999","PR" +"204048000","204048015","US" +"204048016","204048031","VI" +"204048032","204048047","PR" +"204048048","204048055","VI" +"204048056","204048063","US" +"204048064","204048127","VI" +"204048128","204048383","PR" +"204048384","204126151","US" +"204126152","204126159","PR" +"204126160","204152831","US" +"204152832","204153855","PR" +"204153856","204509375","US" +"204509376","204509383","PR" +"204509384","205500987","US" +"205500988","205500991","CA" +"205500992","205813063","US" +"205813064","205813071","PR" +"205813072","205953311","US" +"205953312","205953319","PR" +"205953320","205953327","US" +"205953328","205953351","PR" +"205953352","208651639","US" +"208651640","208651647","PR" +"208651648","209831679","US" +"209831680","209831711","DE" +"209831712","209845143","US" +"209845144","209845151","DE" +"209845152","209867103","US" +"209867104","209867111","CA" +"209867112","209988527","US" +"209988528","209988535","VI" +"209988536","210022479","US" +"210022480","210022487","PR" +"210022488","210090111","US" +"210090112","210090119","PR" +"210090120","210439559","US" +"210439560","210439567","PR" +"210439568","210458623","US" +"210458624","210458631","PR" +"210458632","210785791","US" +"210785792","210786303","BO" +"210786304","211126783","US" +"211126784","211126911","PR" +"211126912","211263999","US" +"211264000","211264255","SA" +"211264256","211410031","US" +"211410032","211410039","PR" +"211410040","211410119","US" +"211410120","211410135","PR" +"211410136","211596823","US" +"211596824","211596831","VI" +"211596832","211597055","US" +"211597056","211597071","VI" +"211597072","211597375","US" +"211597376","211597439","VI" +"211597440","211597727","US" +"211597728","211597743","PR" +"211597744","211597759","US" +"211597760","211597775","PR" +"211597776","211597791","VI" +"211597792","211598399","US" +"211598400","211598463","VI" +"211598464","211598639","US" +"211598640","211598655","VI" +"211598656","211654127","US" +"211654128","211654135","PR" +"211654136","212105495","US" +"212105496","212105503","VI" +"212105504","212119767","US" +"212119768","212119775","PR" +"212119776","212122039","US" +"212122040","212122047","PR" +"212122048","212491249","US" +"212491250","212491250","A1" +"212491251","212733527","US" +"212733528","212733535","PR" +"212733536","212787199","US" +"212787200","212788223","PR" +"212788224","212788479","US" +"212788480","212788607","VI" +"212788608","212788631","US" +"212788632","212788647","VI" +"212788648","212788655","US" +"212788656","212788663","VI" +"212788664","212788671","US" +"212788672","212788799","PR" +"212788800","212788807","US" +"212788808","212788815","VI" +"212788816","212788847","US" +"212788848","212788863","VI" +"212788864","212788991","PR" +"212788992","212789039","US" +"212789040","212789055","VI" +"212789056","212789063","US" +"212789064","212789079","VI" +"212789080","212789087","US" +"212789088","212789095","VI" +"212789096","212789143","US" +"212789144","212789151","VI" +"212789152","212789175","US" +"212789176","212789183","VI" +"212789184","212789191","PR" +"212789192","212789215","US" +"212789216","212789223","VI" +"212789224","212791295","US" +"212791296","212791447","VI" +"212791448","212791455","US" +"212791456","212791479","VI" +"212791480","212791807","PR" +"212791808","212791815","US" +"212791816","212791871","VI" +"212791872","212791935","US" +"212791936","212792063","VI" +"212792064","212792191","US" +"212792192","212792199","PR" +"212792200","212792215","VI" +"212792216","212792223","US" +"212792224","212792231","VI" +"212792232","212792271","US" +"212792272","212792279","VI" +"212792280","212792287","US" +"212792288","212792319","PR" +"212792320","212793119","US" +"212793120","212793127","VI" +"212793128","212793135","PR" +"212793136","212793199","US" +"212793200","212793207","VI" +"212793208","212793215","PR" +"212793216","212793311","US" +"212793312","212793327","PR" +"212793328","212793343","US" +"212793344","212794367","VI" +"212794368","212794575","US" +"212794576","212794583","VI" +"212794584","212794783","US" +"212794784","212794791","VI" +"212794792","212794799","US" +"212794800","212794815","VI" +"212794816","212794879","US" +"212794880","212794887","VI" +"212794888","212794895","US" +"212794896","212794911","VI" +"212794912","212794943","PR" +"212794944","212794999","US" +"212795000","212795007","VI" +"212795008","212822199","US" +"212822200","212822215","PR" +"212822216","212838527","US" +"212838528","212838535","PR" +"212838536","212890775","US" +"212890776","212890783","PR" +"212890784","212900583","US" +"212900584","212900591","PR" +"212900592","212977063","US" +"212977064","212977071","PR" +"212977072","213162607","US" +"213162608","213162615","PR" +"213162616","213498031","US" +"213498032","213498039","PR" +"213498040","213575847","US" +"213575848","213575855","PR" +"213575856","213579471","US" +"213579472","213579479","PR" +"213579480","213608911","US" +"213608912","213608919","PR" +"213608920","213608927","US" +"213608928","213608951","PR" +"213608952","213895679","US" +"213895680","213895743","VI" +"213895744","213923839","US" +"213923840","213924863","PR" +"213924864","213925631","US" +"213925632","213925887","PR" +"213925888","213936791","US" +"213936792","213936799","PR" +"213936800","213936871","US" +"213936872","213936879","PR" +"213936880","213936895","US" +"213936896","213936903","PR" +"213936904","214185215","US" +"214185216","214185471","PR" +"214185472","214185983","US" +"214185984","214187007","PR" +"214187008","214187775","VI" +"214187776","214187807","US" +"214187808","214187815","PR" +"214187816","214187903","US" +"214187904","214187935","VI" +"214187936","214187999","US" +"214188000","214188031","VI" +"214188032","214237247","US" +"214237248","214237311","PR" +"214237312","214249471","US" +"214249472","214253567","VI" +"214253568","214448335","US" +"214448336","214448343","PR" +"214448344","214697983","US" +"214697984","214698007","VI" +"214698008","214698015","PR" +"214698016","214698023","US" +"214698024","214698031","PR" +"214698032","214698087","VI" +"214698088","214698103","PR" +"214698104","214698135","VI" +"214698136","214698143","PR" +"214698144","214698159","VI" +"214698160","214698167","PR" +"214698168","214698175","VI" +"214698176","214698239","PR" +"214698240","214698271","VI" +"214698272","214698279","US" +"214698280","214698319","VI" +"214698320","214698335","PR" +"214698336","214698359","US" +"214698360","214698367","PR" +"214698368","214698383","US" +"214698384","214698639","PR" +"214698640","214698655","VI" +"214698656","214698919","PR" +"214698920","214698927","US" +"214698928","214699231","PR" +"214699232","214699263","US" +"214699264","214699295","VI" +"214699296","214699303","US" +"214699304","214699311","VI" +"214699312","214699335","PR" +"214699336","214699367","VI" +"214699368","214699383","US" +"214699384","214699455","VI" +"214699456","214699471","US" +"214699472","214699487","VI" +"214699488","214699519","US" +"214699520","214699647","PR" +"214699648","214699775","VI" +"214699776","214699783","PR" +"214699784","214699799","US" +"214699800","214699807","PR" +"214699808","214699839","US" +"214699840","214699847","PR" +"214699848","214699855","US" +"214699856","214699871","PR" +"214699872","214699879","US" +"214699880","214699895","PR" +"214699896","214699911","US" +"214699912","214699919","VI" +"214699920","214699927","PR" +"214699928","214699951","US" +"214699952","214699975","PR" +"214699976","214699991","VI" +"214699992","214700015","US" +"214700016","214700023","PR" +"214700024","214858655","US" +"214858656","214858671","NL" +"214858672","215001095","US" +"215001096","215001103","VI" +"215001104","215001151","US" +"215001152","215001167","VI" +"215001168","215001343","US" +"215001344","215001599","VI" +"215001600","215002111","US" +"215002112","215002127","VI" +"215002128","215723591","US" +"215723592","215723599","PR" +"215723600","216417663","US" +"216417664","216417727","PR" +"216417728","216627287","US" +"216627288","216627295","PR" +"216627296","216637639","US" +"216637640","216637647","PR" +"216637648","216820479","US" +"216820480","216820487","PR" +"216820488","216835615","US" +"216835616","216835623","PR" +"216835624","216881191","US" +"216881192","216881199","PR" +"216881200","216996407","US" +"216996408","216996415","PR" +"216996416","216996543","US" +"216996544","216996559","PR" +"216996560","217027999","US" +"217028000","217028007","PR" +"217028008","217046775","US" +"217046776","217046783","PR" +"217046784","219187465","US" +"219187466","219187467","EU" +"219187468","234881023","US" +"234881024","234883071","CN" +"234883072","234884095","JP" +"234884096","234885119","CN" +"234885120","234889215","VN" +"234889216","234913791","KR" +"234913792","234946559","HK" +"234946560","234947583","CN" +"234947584","234950655","JP" +"234950656","234951679","AU" +"234951680","234952703","HK" +"234952704","234954751","JP" +"234954752","234971135","NZ" +"234979328","235012095","MY" +"235012096","235077631","AU" +"235077632","235143167","JP" +"235143168","235405311","KR" +"235405312","235929599","JP" +"235929600","236978175","CN" +"236978176","241172479","KR" +"241172480","241434623","IN" +"241434624","241500159","SG" +"241500160","241565695","JP" +"241565696","241598463","IN" +"241598464","241599487","CN" +"241599488","241600511","JP" +"241600512","241602559","AU" +"241602560","241604607","MY" +"241604608","241605631","ID" +"241605632","241606655","CN" +"241614848","241623039","JP" +"241623040","241627135","IN" +"241627136","241631231","HK" +"241631232","243269631","CN" +"243269632","243270655","JP" +"243270656","243271679","NZ" +"243271680","243272703","TH" +"243272704","243273727","NP" +"243273728","243277823","JP" +"243277824","243286015","AU" +"243286016","243302399","JP" +"243302400","243400703","KR" +"243400704","243531775","CN" +"243531776","243662847","JP" +"243662848","243793919","CN" +"243793920","243859455","HK" +"243859456","243916799","AU" +"243916800","243924991","JP" +"243924992","243990527","KR" +"243990528","244318207","IN" +"244318208","245366783","CN" +"245366784","247463935","VN" +"247472128","247479295","JP" +"247479296","247480319","CN" +"247480320","247482367","MY" +"247482368","247483391","PG" +"247483392","247484415","CN" +"247484416","247488511","KR" +"247488512","247496703","JP" +"247496704","247504895","PK" +"247504896","247513087","AU" +"247513088","247529471","MY" +"247529472","247595007","JP" +"247595008","247726079","IN" +"247726080","247857151","CN" +"247857152","247988223","HK" +"247988224","248250367","AU" +"248250368","248381439","CN" +"248381440","248446975","KR" +"248446976","248512511","TH" +"248512512","249561087","CN" +"249561088","251658239","VN" +"251658240","264485119","US" +"264485120","264485375","EU" +"264485376","264997119","US" +"264997120","264997375","EU" +"264997376","265005311","US" +"265005312","265005567","EU" +"265005568","265025791","US" +"265025792","265026047","GB" +"265026048","265525503","US" +"265525504","265525759","AP" +"265525760","265529599","US" +"265529600","265529855","AP" +"265529856","266062079","US" +"266062080","266062335","IN" +"266062336","266070271","US" +"266070272","266070527","AU" +"266070528","266578175","US" +"266578176","266578431","CA" +"266578432","266586367","US" +"266586368","266586623","CA" +"266586624","266598655","US" +"266598656","266598911","BR" +"266598912","289011535","US" +"289011536","289011543","IT" +"289011544","289406975","US" +"289406976","289603583","IE" +"289603584","289628415","GB" +"289628416","289628671","US" +"289628672","289669119","GB" +"289669120","289734655","FR" +"289734656","289746943","GB" +"289746944","289748991","US" +"289748992","289752063","ES" +"289752064","289760255","US" +"289760256","289763327","DE" +"289763328","290264063","US" +"290264064","290264575","AT" +"290264576","290267135","US" +"290267136","290269183","NL" +"290269184","290270207","PL" +"290270208","290271231","PT" +"290271232","290272255","CH" +"290272256","290273279","US" +"290273280","290275327","RU" +"290275328","290277375","DE" +"290277376","290279423","US" +"290279424","290281471","GB" +"290281472","290287615","US" +"290287616","290291711","GB" +"290291712","290292223","FI" +"290292224","290292735","US" +"290292736","290293247","NO" +"290293248","290293759","US" +"290293760","290294271","DK" +"290294272","290294783","US" +"290294784","290295295","NL" +"290295296","290295807","IN" +"290295808","290296831","ES" +"290296832","290297855","US" +"290297856","290298879","SE" +"290298880","290299903","US" +"290299904","290300927","LU" +"290300928","290301951","TR" +"290301952","290302463","IN" +"290302464","290302975","US" +"290302976","290303999","IN" +"290304000","290305023","IT" +"290305024","290308095","US" +"290308096","290310143","DE" +"290310144","290312191","US" +"290312192","290314239","BE" +"290314240","290320383","US" +"290320384","290324479","FR" +"290324480","290357247","US" +"290357248","290365439","IL" +"290365440","290423807","US" +"290423808","290424831","SE" +"290424832","290513663","US" +"290513664","290513919","MY" +"290513920","323243895","US" +"323243896","323243903","FR" +"323243904","332132119","US" +"332132120","332132127","IL" +"332132128","344260607","US" +"344260608","344261119","GB" +"344261120","344261631","US" +"344261632","344261887","EU" +"344261888","344262655","US" +"344262656","344262911","GB" +"344262912","344268817","US" +"344268818","344268818","EU" +"344268819","344588543","US" +"344588544","344588799","GB" +"344588800","344592895","US" +"344592896","344592945","GB" +"344592946","344592946","EU" +"344592947","344593151","GB" +"344593152","344593638","US" +"344593639","344593639","SE" +"344593640","344651263","US" +"344651264","344651519","GB" +"344651520","344653823","US" +"344653824","344659519","AU" +"344659520","344659520","SG" +"344659521","344662591","AU" +"344662592","344662592","MY" +"344662593","344662783","AU" +"344662784","344663039","MY" +"344663040","344670719","AU" +"344670720","344671231","IN" +"344671232","344674815","AU" +"344674816","344675071","IN" +"344675072","344675121","AU" +"344675122","344676145","IN" +"344676146","344719359","AU" +"344719360","344880127","US" +"344880128","344880383","EU" +"344880384","344881151","US" +"344881152","344881407","IN" +"344881408","344977407","US" +"344977408","344977663","IN" +"344977664","355993887","US" +"355993888","355993895","IT" +"355993896","368674047","US" +"368674048","368674303","ES" +"368674304","386924543","US" +"386924544","387055615","CA" +"387055616","387121151","PR" +"387121152","387132143","US" +"387132144","387132151","CA" +"387132152","387132231","US" +"387132232","387132239","CA" +"387132240","387139327","US" +"387139328","387139583","CA" +"387139584","387164415","US" +"387164416","387164671","CA" +"387164672","387825663","US" +"387825664","387833855","CA" +"387833856","390594559","US" +"402653184","405012479","US" +"405012480","405143551","CA" +"405143552","405180415","US" +"405180416","405184511","CA" +"405184512","405372927","US" +"405372928","405422079","PR" +"405422080","405798911","US" +"405798912","405831679","CA" +"405831680","405843967","US" +"405843968","405848063","CA" +"405848064","405864447","PR" +"405864448","405921791","US" +"405921792","405929983","CA" +"405929984","405938175","US" +"405946368","405962751","CA" +"405962752","405970943","US" +"405979136","405995519","PR" +"406003712","406011903","US" +"406011904","406028287","BS" +"406028288","406110207","US" +"406110208","406142975","CA" +"406142976","406147071","US" +"406147072","406151167","CA" +"406159360","406175743","US" +"406183936","406208511","CA" +"406216704","406241279","US" +"406241280","406323199","PR" +"406323200","406388735","US" +"406388736","406454271","CA" +"406454272","406847487","US" +"406847488","407408639","CA" +"407408640","407633919","US" +"407633920","408420351","CA" +"408420352","408502271","US" +"408502272","408518655","CA" +"408518656","408535039","US" +"408535040","408551423","CA" +"408551424","408719359","US" +"408719360","408723455","LC" +"408723456","409255935","US" +"409255936","409272319","CA" +"409272320","409337855","US" +"409337856","409354239","CA" +"409370624","409731071","US" +"409731072","409862143","CA" +"409862144","410124287","US" +"410124288","410174779","CA" +"410174780","410174783","US" +"410174784","410178343","CA" +"410178344","410178347","US" +"410178348","410178463","CA" +"410178464","410178467","US" +"410178468","410180643","CA" +"410180644","410180647","US" +"410180648","410180695","CA" +"410180696","410180703","US" +"410180704","410180711","CA" +"410180712","410180715","US" +"410180716","410180759","CA" +"410180760","410180763","US" +"410180764","410180771","CA" +"410180772","410180775","US" +"410180776","410185407","CA" +"410185408","410185411","US" +"410185412","410185539","CA" +"410185540","410185543","US" +"410185544","410185551","CA" +"410185552","410185559","US" +"410185560","410186719","CA" +"410186720","410186723","US" +"410186724","410186971","CA" +"410186972","410186979","US" +"410186980","410186983","CA" +"410186984","410186999","US" +"410187000","410187003","CA" +"410187004","410187007","US" +"410187008","410187015","CA" +"410187016","410187019","US" +"410187020","410187047","CA" +"410187048","410187055","US" +"410187056","410187175","CA" +"410187176","410187183","US" +"410187184","410187231","CA" +"410187232","410187239","US" +"410187240","410187703","CA" +"410187704","410187707","US" +"410187708","410189823","CA" +"410189824","410648575","US" +"410648576","410714111","CA" +"410714112","411164671","US" +"411164672","411168767","CA" +"411172864","411303935","US" +"411303936","411369471","NL" +"411369472","411435007","TR" +"411435008","411500543","DE" +"411500544","411566079","RS" +"411566080","411639807","US" +"411639808","411643903","CA" +"411648000","411664383","CA" +"411664384","411680767","US" +"411680768","411688831","CA" +"411688832","411688863","US" +"411688864","411688959","CA" +"411688960","411697151","PR" +"411697152","411746303","CA" +"411746304","411762687","PR" +"411762688","411770879","CA" +"411770880","411779071","US" +"411779072","411828223","PR" +"411828224","411893759","US" +"411893760","411975679","CA" +"411975680","411979775","US" +"411979776","411983871","CA" +"411983872","411988735","US" +"411988736","411988991","EU" +"411988992","411989247","GB" +"411989248","412221439","US" +"412221440","412229631","CA" +"412254208","412483583","US" +"412483584","412549119","CA" +"412549120","412614655","US" +"412647424","412680191","US" +"412680192","412688383","CA" +"412688384","412704767","US" +"412704768","412708863","CA" +"412708864","412909567","US" +"412909568","412942335","CA" +"412942336","412946431","US" +"412946432","412950527","PR" +"412950528","412958719","US" +"412975104","413007871","CA" +"413007872","413908991","US" +"413908992","413925375","PR" +"413925376","415760383","US" +"415760384","416022527","CA" +"416022528","416059391","US" +"416059392","416063487","CA" +"416071680","416088063","CA" +"416088064","416153599","US" +"416153600","416161791","BS" +"416161792","416219135","US" +"416219136","416251903","CA" +"416251904","416546815","US" +"416546816","416612351","CA" +"416612352","416628735","US" +"416628736","416636927","CA" +"416636928","416743423","US" +"416743424","416776191","CA" +"416776192","417202175","US" +"417202176","417267711","CA" +"417267712","417365151","US" +"417365152","417365159","NC" +"417365160","417366015","US" +"417366016","417398783","CA" +"417398784","417431551","US" +"417431552","417529855","CA" +"417529856","417538047","PR" +"417538048","417775615","US" +"417775616","417796095","CA" +"417796096","417800191","US" +"417800192","417808383","BS" +"417808384","417820671","CA" +"417820672","417857535","US" +"417857536","417923071","AR" +"417923072","418062335","US" +"418062336","418070527","CA" +"418070528","418078719","US" +"418078720","418119679","CA" +"418119680","418316287","US" +"418316288","418320383","CA" +"418320384","418643967","US" +"418643968","418668543","CA" +"418668544","418672639","US" +"418672640","418676735","CA" +"418676736","418687743","BS" +"418687744","418687998","DM" +"418687999","418693119","BS" +"418693120","418709503","CA" +"418709504","418766847","US" +"418766848","418770943","CA" +"418770944","418775039","US" +"418775040","418799615","CA" +"418799616","419430399","US" +"419430400","436207615","GB" +"436207616","452984831","US" +"452984832","452985855","JP" +"452985856","452986879","MY" +"452986880","452987903","SG" +"452987904","452988927","VN" +"452988928","452993023","US" +"452993024","452997119","JP" +"452997120","453001215","IN" +"453001216","453009407","AU" +"453009408","453017599","BD" +"453050368","453115903","KR" +"453115904","453246975","VN" +"453246976","453509119","IN" +"453509120","455081983","CN" +"455081984","455213055","AU" +"455213056","455245823","NP" +"455245824","455258111","JP" +"455258112","455262207","SG" +"455262208","455270399","JP" +"455270400","455272447","AU" +"455272448","455274495","CN" +"455274496","455278591","IN" +"455278592","455344127","KR" +"455344128","456130559","CN" +"456130560","456261631","IN" +"456261632","456262655","PH" +"456262656","456263679","IN" +"456263680","456264703","NP" +"456264704","456265727","JP" +"456265728","456269823","ID" +"456269824","456271871","HK" +"456271872","456273919","CN" +"456273920","456286207","AU" +"456286208","456294399","JP" +"456294400","456327167","CN" +"456327168","456523775","TW" +"456523776","456540159","SG" +"456540160","456542207","AU" +"456542208","456544255","CN" +"456544256","456548351","AU" +"456548352","456553471","JP" +"456553472","456554495","MY" +"456554496","456555519","PK" +"456555520","456556543","JP" +"456556544","456560639","AU" +"456562688","456564735","CN" +"456564736","456572927","IN" +"456572928","456589311","CN" +"456589312","456654847","TH" +"456654848","457179135","IN" +"457179136","458227711","VN" +"458227712","459282431","JP" +"459282432","459284479","TK" +"459284480","459292671","JP" +"459292672","459293695","NZ" +"459293696","459297791","JP" +"459297792","459298815","IN" +"459300864","459309055","SG" +"459309056","459325439","KR" +"459325440","459333631","AU" +"459333632","459341823","TW" +"459341824","459407359","IN" +"459407360","459456511","JP" +"459456512","459460607","HK" +"459460608","459472895","CN" +"459472896","459505663","AU" +"459505664","459538431","CN" +"459538432","459539455","AU" +"459539456","459540479","TH" +"459540480","459541503","JP" +"459541504","459542527","IN" +"459542528","459544575","HK" +"459544576","459545599","AU" +"459545600","459547647","JP" +"459548672","459550719","TH" +"459550720","459554815","JP" +"459554816","459571199","TW" +"459571200","459735039","KR" +"459735040","459800575","CN" +"459800576","459866111","SG" +"459866112","459931647","TW" +"459931648","459964415","IN" +"459964416","459980799","CN" +"459980800","459983871","AU" +"459983872","459984895","CN" +"459984896","459986943","JP" +"459986944","459988991","PH" +"459988992","459997183","JP" +"459997184","460062719","IN" +"460062720","460128255","PH" +"460128256","460136447","IN" +"460136448","460144639","CN" +"460144640","460152831","PH" +"460152832","460154879","JP" +"460154880","460155903","SG" +"460155904","460156927","AU" +"460156928","460158975","KH" +"460158976","460159999","JP" +"460161024","460193791","MO" +"460193792","460210175","JP" +"460210176","460214271","HK" +"460214272","460218367","MY" +"460218368","460224511","JP" +"460224512","460226559","NZ" +"460226560","460259327","PH" +"460259328","460261375","AU" +"460261376","460262399","KH" +"460262400","460263423","NZ" +"460263424","460267519","NP" +"460267520","460275711","ID" +"460275712","460277759","AU" +"460278784","460279807","JP" +"460279808","460283903","AU" +"460283904","460292095","KR" +"460292096","460300287","JP" +"460300288","460312575","HK" +"460312576","460320767","SG" +"460320768","460324863","AU" +"460324864","460341247","CN" +"460341248","460343295","ID" +"460343296","460344319","AU" +"460344320","460345343","ID" +"460345344","460349439","CN" +"460349440","460351487","AU" +"460351488","460353535","JP" +"460355584","460356607","IN" +"460356608","460357631","JP" +"460357632","460423167","KR" +"460423168","460439551","CN" +"460439552","460451839","JP" +"460451840","460453887","AU" +"460453888","460454911","JP" +"460454912","460455935","IN" +"460455936","460488703","JP" +"460488704","460505087","MV" +"460505088","460521471","SG" +"460521472","460554239","CN" +"460554240","460587007","KR" +"460587008","460591103","JP" +"460591104","460593151","IN" +"460593152","460595199","JP" +"460595200","460595711","IN" +"460595712","460596223","JP" +"460596224","460597247","AU" +"460597248","460598271","JP" +"460598272","460599295","CN" +"460599296","460601343","IN" +"460601344","460602367","AF" +"460602368","460603391","KH" +"460603392","460718079","KR" +"460718080","460722175","JP" +"460722176","460726271","VN" +"460726272","460734463","IN" +"460734464","460865535","KR" +"460865536","460931071","JP" +"460931072","460933119","AU" +"460933120","460935167","CN" +"460935168","460937215","ID" +"460937216","460938239","NZ" +"460938240","460939263","JP" +"460939264","460940287","NZ" +"460940288","460941311","IN" +"460941312","460942335","AU" +"460942336","460942847","SG" +"460942848","460943103","MY" +"460943104","460943359","ID" +"460943360","460945407","AU" +"460945408","460947455","CN" +"460947456","460980223","JP" +"460980224","460981247","NC" +"460981248","460983295","JP" +"460983296","460984319","HK" +"460984320","460988415","PG" +"460988416","460994559","JP" +"460994560","460995583","MY" +"460995584","460996607","SG" +"460996608","461008895","JP" +"461008896","461012991","AU" +"461012992","461045759","KR" +"461045760","461047807","ID" +"461047808","461049855","JP" +"461049856","461050879","TH" +"461050880","461051903","NZ" +"461051904","461053951","AU" +"461053952","461062143","HK" +"461062144","461078527","IN" +"461078528","461094911","FJ" +"461094912","461099007","HK" +"461099008","461100031","JP" +"461100032","461101055","MN" +"461101056","461102079","IN" +"461102080","461103103","ID" +"461103104","461111295","PH" +"461111296","461127679","IN" +"461127680","461131775","PH" +"461131776","461135871","ID" +"461135872","461144063","AU" +"461144064","461209599","KR" +"461209600","461225983","SG" +"461225984","461227007","WF" +"461227008","461228031","SG" +"461228032","461229055","IN" +"461229056","461230079","JP" +"461230080","461234175","AU" +"461234176","461242367","MY" +"461242368","461258751","KR" +"461258752","461279231","JP" +"461279232","461281279","AU" +"461281280","461282303","PH" +"461282304","461283327","MY" +"461283328","461287423","JP" +"461287424","461307903","HK" +"461307904","461357055","JP" +"461357056","461369343","AU" +"461369344","461373439","JP" +"461373440","461504511","CN" +"461504512","461570047","TH" +"461570048","461572095","ID" +"461572096","461573119","JP" +"461573120","461574143","BD" +"461574144","461578239","JP" +"461578240","461586431","MY" +"461586432","461602815","AU" +"461602816","461619199","TH" +"461619200","461623295","JP" +"461623296","461625343","IN" +"461625344","461626367","AU" +"461626368","461627391","CN" +"461627392","461633535","JP" +"461633536","461635583","ID" +"461635584","462422015","JP" +"462422016","462487551","CN" +"462487552","462553087","TH" +"462553088","462618623","MY" +"462618624","462635007","TW" +"462635008","462651391","JP" +"462651392","462684159","BD" +"462684160","463470591","CN" +"463470592","465043455","KR" +"465043456","467927039","CN" +"467927040","468189183","JP" +"468189184","468713471","KR" +"468713472","469237759","TW" +"469237760","469499903","IN" +"469499904","469565439","NZ" +"469565440","469598207","AU" +"469598208","469630975","JP" +"469630976","469696511","TH" +"469696512","469712895","PK" +"469712896","469729279","KR" +"469729280","469762047","IN" +"469762048","520093695","US" +"520093696","520257535","PL" +"520257536","520290303","RO" +"520290304","520292351","TR" +"520292352","520294399","NL" +"520294400","520296447","RU" +"520296448","520298495","UA" +"520298496","520306687","SK" +"520306688","520308735","GB" +"520308736","520310783","DK" +"520310784","520312831","DE" +"520312832","520314879","MK" +"520314880","520318975","NL" +"520318976","520323071","ES" +"520323072","520325119","CH" +"520325120","520327167","FR" +"520327168","520329215","DE" +"520329216","520331263","SE" +"520331264","520339455","IT" +"520339456","520343551","UA" +"520343552","520355839","GB" +"520355840","520421375","ES" +"520421376","520486911","AT" +"520486912","520488959","NL" +"520488960","520489983","IT" +"520489984","520491007","RU" +"520491008","520493567","GB" +"520493568","520494335","FR" +"520494336","520494591","TR" +"520494592","520495103","CH" +"520495104","520496383","DE" +"520496384","520496895","TR" +"520496896","520497151","ES" +"520497152","520497407","FR" +"520497408","520497663","ES" +"520497664","520498175","FR" +"520498176","520498687","CH" +"520498688","520499711","FR" +"520499712","520501247","DE" +"520501248","520501503","IL" +"520501504","520501759","AE" +"520501760","520503295","GB" +"520503296","520505343","PL" +"520505344","520507391","GB" +"520507392","520511487","TR" +"520511488","520519679","UA" +"520519680","520552447","PL" +"520552448","520554495","NL" +"520554496","520556543","GB" +"520556544","520560639","FI" +"520560640","520562687","TR" +"520562688","520564735","PL" +"520564736","520566783","IE" +"520566784","520567039","CH" +"520567040","520567295","A1" +"520567296","520568831","CH" +"520568832","520589311","IR" +"520589312","520593407","IT" +"520593408","520595455","AM" +"520595456","520597503","MK" +"520597504","520597535","IT" +"520597536","520597567","DE" +"520597568","520597599","IT" +"520597600","520597631","DE" +"520597632","520597663","IT" +"520597664","520598015","DE" +"520598016","520598047","IT" +"520598048","520598079","FR" +"520598080","520598111","IT" +"520598112","520601599","DE" +"520601600","520609791","SI" +"520609792","520613887","RU" +"520613888","520615935","CZ" +"520615936","520617983","FR" +"520617984","520683519","RU" +"520683520","520749055","SY" +"520749056","520753151","RU" +"520753152","520757247","LI" +"520757248","520761343","GB" +"520761344","520763391","IT" +"520763392","520765439","CZ" +"520765440","520781823","RU" +"520781824","520822271","CH" +"520822272","520822527","DE" +"520822528","520822783","CH" +"520822784","520824831","IT" +"520824832","520826879","RO" +"520826880","520828927","QA" +"520828928","520830975","NL" +"520830976","520847359","MK" +"520847360","520880127","PL" +"520880128","520882175","AT" +"520882176","520884223","IT" +"520884224","520888319","MK" +"520888320","520896511","DE" +"520896512","520897023","BE" +"520897024","520897151","LU" +"520897152","520897791","BE" +"520897792","520897807","LU" +"520897808","520898559","BE" +"520898560","520902655","GB" +"520902656","520902784","NL" +"520902785","520912895","GB" +"520912896","520945663","UA" +"520945664","520947711","GB" +"520947712","520949759","SE" +"520949760","520951807","RU" +"520951808","520953855","IE" +"520953856","520962047","RU" +"520962048","520978431","IE" +"520978432","520980479","RU" +"520980480","520982527","IT" +"520982528","520984575","RU" +"520984576","520984831","NG" +"520984832","520986623","GB" +"520986624","520988671","PS" +"520988672","520990719","DE" +"520990720","520992767","RU" +"520992768","520994815","ES" +"520994816","521001567","BG" +"521001568","521001575","RO" +"521001576","521011199","BG" +"521011200","521057279","RO" +"521057280","521058303","MD" +"521058304","521076735","RO" +"521076736","521078783","ES" +"521078784","521080831","CZ" +"521080832","521082879","RU" +"521082880","521084927","FR" +"521084928","521093119","SE" +"521093120","521095167","DE" +"521095168","521097215","IT" +"521097216","521101311","RU" +"521101312","521103359","IT" +"521103360","521105407","GB" +"521105408","521107455","IS" +"521107456","521109503","FI" +"521109504","521142271","SI" +"521142272","521404415","DE" +"521404416","521535487","NL" +"521535488","521537535","GB" +"521537536","521539583","RU" +"521539584","521541631","BE" +"521541632","521543679","DE" +"521543680","521545727","RU" +"521545728","521547775","GB" +"521547776","521551871","AL" +"521551872","521553919","DE" +"521553920","521555967","GB" +"521555968","521556031","US" +"521556032","521558015","NL" +"521558016","521560063","CY" +"521560064","521562111","PL" +"521562112","521562911","DE" +"521562912","521564159","GB" +"521564160","521566207","GR" +"521566208","521568255","LU" +"521568256","521601023","PT" +"521601024","521666559","RU" +"521666560","521668607","GB" +"521668608","521670655","CH" +"521670656","521672703","HU" +"521672704","521674751","RU" +"521674752","521676799","GB" +"521676800","521678847","ES" +"521678848","521680895","NL" +"521680896","521682943","EE" +"521682944","521687039","SE" +"521687040","521689087","GB" +"521689088","521691135","BY" +"521691136","521693183","DE" +"521693184","521695231","GB" +"521695232","521697279","BE" +"521697280","521699327","ES" +"521699328","521701375","NO" +"521701376","521703423","IT" +"521703424","521705471","DE" +"521705472","521707519","ES" +"521707520","521709567","NL" +"521709568","521711615","DE" +"521711616","521713663","SK" +"521713664","521715711","HU" +"521715712","521717759","LV" +"521717760","521719807","IR" +"521719808","521721855","UA" +"521721856","521723903","GB" +"521723904","521725951","SA" +"521725952","521727999","IR" +"521728000","521732095","FR" +"521732096","521736191","GB" +"521736192","521738239","DK" +"521738240","521740287","RU" +"521740288","521742335","IT" +"521742336","521746431","DE" +"521746432","521748479","NL" +"521748480","521750527","SE" +"521750528","521752575","PS" +"521752576","521754367","FR" +"521754368","521754383","US" +"521754384","521754623","FR" +"521754624","521756671","IR" +"521756672","521758719","NL" +"521758720","521760767","IR" +"521760768","521762815","IL" +"521762816","521764863","CH" +"521764864","521766911","IR" +"521766912","521768959","IQ" +"521768960","521771007","FI" +"521771008","521773055","DE" +"521773056","521775103","GB" +"521775104","521777151","TR" +"521777152","521779199","ES" +"521779200","521783295","GB" +"521783296","521785343","RU" +"521785344","521787391","GB" +"521787392","521789439","NO" +"521789440","521791487","RU" +"521791488","521793535","IR" +"521793536","521795583","RU" +"521795584","521797631","PL" +"521797632","521928703","IT" +"521928704","521945087","RU" +"521945088","521953279","GB" +"521953280","521961471","RU" +"521961472","521969663","CZ" +"521969664","521977855","UA" +"521977856","521986047","RU" +"521986048","521994239","UA" +"521994240","522002431","KG" +"522002432","522010623","IR" +"522010624","522018815","AE" +"522018816","522027007","FR" +"522027008","522059775","RU" +"522059776","522125311","CZ" +"522125312","522133503","MD" +"522133504","522134783","NL" +"522134784","522134911","US" +"522134912","522135551","NL" +"522135552","522137599","IT" +"522137600","522141695","CH" +"522141696","522143743","RU" +"522143744","522145791","CZ" +"522145792","522147839","DK" +"522147840","522149887","ES" +"522149888","522158079","UA" +"522158080","522166271","BE" +"522166272","522168319","SE" +"522168320","522170367","RU" +"522170368","522174463","YE" +"522174464","522178559","RU" +"522178560","522180607","DE" +"522180608","522182655","KZ" +"522182656","522190847","CZ" +"522190848","522715135","FR" +"522715136","522717183","IR" +"522717184","522719231","RU" +"522719232","522721279","UA" +"522721280","522741759","RU" +"522741760","522743807","UA" +"522743808","522747903","RU" +"522747904","522780671","UA" +"522780672","522782719","RU" +"522782720","522784767","UA" +"522784768","522786815","BG" +"522786816","522788863","PL" +"522788864","522792959","RU" +"522792960","522795007","UA" +"522795008","522797055","RU" +"522797056","522801151","UA" +"522801152","522803199","PL" +"522803200","522805247","UA" +"522805248","522807295","RU" +"522807296","522811391","UA" +"522811392","522813439","RU" +"522813440","522815487","UA" +"522815488","522819583","PL" +"522819584","522821631","KG" +"522821632","522823679","RU" +"522823680","522827775","PL" +"522827776","522831871","RU" +"522831872","522833919","CZ" +"522833920","522835967","PL" +"522835968","522838015","UA" +"522838016","522840063","RU" +"522840064","522842111","PL" +"522842112","522846207","RU" +"522846208","522854399","PL" +"522854400","522858495","RU" +"522858496","522866687","UA" +"522866688","522870783","LV" +"522870784","522874879","RU" +"522874880","522878975","UA" +"522878976","522887167","RO" +"522887168","522895359","UA" +"522895360","522911743","RU" +"522911744","522960895","UA" +"522960896","522969087","RU" +"522969088","522977279","UA" +"522977280","522981375","RU" +"522981376","522985471","IT" +"522985472","522989567","CH" +"522989568","522993663","RU" +"522993664","522997759","AL" +"522997760","523001855","RU" +"523001856","523005951","LT" +"523005952","523010047","IT" +"523010048","523014143","IL" +"523014144","523018239","ES" +"523018240","523022335","IT" +"523022336","523024895","RU" +"523024896","523025407","BZ" +"523025408","523025663","UA" +"523025664","523025919","CH" +"523025920","523026431","NL" +"523026432","523030527","TR" +"523030528","523034623","FR" +"523034624","523038719","SE" +"523038720","523042815","RU" +"523042816","523075583","NO" +"523075584","523108351","HR" +"523108352","523113983","HU" +"523113984","523114239","RO" +"523114240","523115775","HU" +"523115776","523116287","RO" +"523116288","523173887","HU" +"523173888","523182079","BA" +"523182080","523190271","IR" +"523190272","523192319","FI" +"523192320","523194367","ES" +"523194368","523196415","DE" +"523196416","523198463","AE" +"523198464","523202559","CZ" +"523202560","523223039","RU" +"523223040","523225087","AM" +"523225088","523227135","SE" +"523227136","523229183","RO" +"523229184","523231231","GB" +"523231232","523239423","DE" +"523239424","523763711","GB" +"523763712","524025855","IR" +"524025856","524287999","PL" +"524288000","528482303","GB" +"528482304","528490495","PL" +"528490496","528498687","RU" +"528498688","528515071","UA" +"528515072","528523263","RU" +"528523264","528531455","UA" +"528531456","528539647","RU" +"528539648","528547839","UA" +"528547840","528564223","RU" +"528564224","528580607","UA" +"528580608","528588799","RU" +"528588800","528596991","UA" +"528596992","528605183","RU" +"528605184","528613375","UA" +"528613376","528637951","RU" +"528637952","528642047","PL" +"528642048","528654335","RU" +"528654336","528656383","SK" +"528656384","528658431","CZ" +"528658432","528662527","IR" +"528662528","528664575","RU" +"528664576","528666623","BY" +"528666624","528668671","RU" +"528668672","528670719","PL" +"528670720","528674815","CH" +"528674816","528676863","RO" +"528676864","528678911","RU" +"528678912","528680959","MD" +"528680960","528683007","RO" +"528683008","528685823","UA" +"528685824","528687103","US" +"528687104","528689151","UA" +"528689152","528691199","RO" +"528691200","528695295","PL" +"528695296","528699391","UA" +"528699392","528703487","RU" +"528703488","528715775","UA" +"528715776","528719871","RU" +"528719872","528721919","RO" +"528721920","528723967","PL" +"528723968","528726015","ES" +"528726016","528736255","RU" +"528736256","528740351","SK" +"528740352","528742399","IT" +"528742400","528744447","RU" +"528744448","528746495","GB" +"528746496","528748543","RO" +"528748544","528752639","CZ" +"528752640","528760831","RO" +"528760832","528762879","PL" +"528762880","528764927","AM" +"528764928","528769023","RO" +"528769024","528793599","RU" +"528793600","528795647","RO" +"528795648","528797695","NL" +"528797696","528805887","RU" +"528805888","528809983","RO" +"528809984","528812031","PL" +"528812032","528814079","CZ" +"528814080","528816127","PL" +"528816128","528818175","RO" +"528818176","528834559","UA" +"528834560","528836607","RO" +"528836608","528838655","RU" +"528838656","528840703","UA" +"528840704","528842751","RU" +"528842752","528859135","CH" +"528859136","528861183","RO" +"528861184","528863231","RU" +"528863232","528867327","KZ" +"528867328","528887807","RU" +"528887808","528891903","PL" +"528891904","528900095","UA" +"528900096","528902143","SK" +"528902144","528908287","UA" +"528908288","528926719","RU" +"528926720","528928767","NL" +"528928768","528930815","UA" +"528930816","528932863","CZ" +"528932864","528941055","RU" +"528941056","528943103","RO" +"528943104","528945151","RU" +"528945152","528949247","PL" +"528949248","528965631","RU" +"528965632","528982015","UA" +"528982016","528984063","PL" +"528984064","528986111","RO" +"528986112","528988159","UA" +"528988160","528990207","RO" +"528990208","528994303","PL" +"528994304","528996351","UZ" +"528996352","528998399","LT" +"528998400","529006591","RU" +"529006592","529268735","NL" +"529268736","529530879","TR" +"529530880","529596415","UA" +"529596416","529661951","TR" +"529661952","529727487","GE" +"529727488","529793023","HR" +"529793024","529827839","RU" +"529827840","529828863","CZ" +"529828864","529829887","RU" +"529829888","529831935","NL" +"529831936","529835007","RU" +"529835008","529836031","KG" +"529836032","529836543","UA" +"529836544","529837055","IL" +"529837056","529839103","RU" +"529839104","529839615","UA" +"529839616","529840127","CY" +"529840128","529841151","RU" +"529841152","529842175","UA" +"529842176","529843199","IN" +"529843200","529844735","RU" +"529844736","529845247","UA" +"529845248","529846271","UZ" +"529846272","529848319","RU" +"529848320","529848575","KZ" +"529848576","529848831","UA" +"529848832","529849343","GB" +"529849344","529849599","NL" +"529849600","529849855","RU" +"529849856","529853439","CZ" +"529853440","529856511","RU" +"529856512","529857535","KZ" +"529857536","529858559","UA" +"529858560","529924095","NL" +"529924096","529989631","DE" +"529989632","530055167","NL" +"530055168","530120703","GR" +"530120704","530165759","CY" +"530165760","530173951","GR" +"530173952","530186239","CY" +"530186240","530251775","IL" +"530251776","530317311","TR" +"530317312","530579455","IT" +"530579456","530710527","NL" +"530710528","530841599","RU" +"530841600","530972671","CH" +"530972672","531103743","SA" +"531103744","531169279","IL" +"531169280","531177471","KZ" +"531177472","531179519","GB" +"531179520","531181567","FR" +"531183616","531185663","NL" +"531185664","531193855","TR" +"531193856","531194303","IE" +"531194304","531194335","IR" +"531194336","531195903","IE" +"531195904","531197951","IT" +"531197952","531199999","GB" +"531200000","531202047","RU" +"531202048","531234815","CZ" +"531234816","531236863","IE" +"531236864","531238911","FR" +"531238912","531240959","LV" +"531240960","531242751","SE" +"531242752","531243007","DE" +"531243008","531245055","RU" +"531245056","531247103","IT" +"531247104","531251199","IR" +"531251200","531259391","SK" +"531259392","531261439","ES" +"531261440","531263487","DE" +"531263488","531265535","RU" +"531265536","531267583","GB" +"531267584","531275775","UA" +"531275776","531276799","US" +"531276800","531277311","GB" +"531277312","531277823","US" +"531277824","531279871","RU" +"531279872","531281919","CZ" +"531281920","531283967","RU" +"531283968","531292159","DE" +"531292160","531333119","AZ" +"531333120","531333599","NL" +"531333600","531333631","RU" +"531333632","531334143","NL" +"531334144","531334271","US" +"531334272","531334399","NL" +"531334400","531334463","US" +"531334464","531334527","NL" +"531334528","531334655","US" +"531334656","531335167","A1" +"531335168","531337215","IT" +"531337216","531339263","CH" +"531339264","531341311","AL" +"531341312","531349503","KZ" +"531349504","531351551","RU" +"531351552","531355647","NL" +"531355648","531357695","IR" +"531357696","531361791","HU" +"531361792","531365887","CH" +"531365888","531366399","DE" +"531366400","531367935","CH" +"531367936","531369983","DE" +"531369984","531371007","CH" +"531371008","531371519","US" +"531371520","531372031","JP" +"531372032","531373567","CH" +"531373568","531373575","DE" +"531373576","531380223","CH" +"531380224","531398655","DE" +"531398656","531400703","RU" +"531400704","531402751","UA" +"531402752","531404799","LU" +"531404800","531406847","FI" +"531406848","531408895","FR" +"531408896","531415039","PL" +"531415040","531423231","RU" +"531423232","531423487","GB" +"531423488","531425279","NO" +"531425280","531425325","FR" +"531425326","531425327","GB" +"531425328","531425407","FR" +"531425408","531425535","GB" +"531425536","531425887","FR" +"531425888","531425919","GB" +"531425920","531425967","FR" +"531425968","531425983","GB" +"531425984","531425991","FR" +"531425992","531425999","GB" +"531426000","531426015","FR" +"531426016","531426047","GB" +"531426048","531426495","FR" +"531426496","531426503","GB" +"531426504","531426791","FR" +"531426792","531426799","GB" +"531426800","531427327","FR" +"531427328","531428495","GB" +"531428496","531428503","IT" +"531428504","531428703","GB" +"531428704","531428711","IT" +"531428712","531428959","GB" +"531428960","531428967","IT" +"531428968","531428975","GB" +"531428976","531428983","IT" +"531428984","531429135","GB" +"531429136","531429143","IT" +"531429144","531429407","GB" +"531429408","531429415","IT" +"531429416","531429479","GB" +"531429480","531429487","IT" +"531429488","531429879","GB" +"531429880","531429887","IT" +"531429888","531430399","GB" +"531430400","531430407","IT" +"531430408","531430575","GB" +"531430576","531430583","IT" +"531430584","531430655","GB" +"531430656","531430671","IT" +"531430672","531430839","GB" +"531430840","531430855","IT" +"531430856","531431031","GB" +"531431032","531431039","IT" +"531431040","531431423","GB" +"531431424","531496959","RO" +"531496960","531628031","PL" +"531628032","531660799","TR" +"531660800","531693567","BA" +"531693568","531695615","RU" +"531695616","531697663","LT" +"531697664","531699711","GB" +"531699712","531701759","CZ" +"531701760","531703807","NL" +"531703808","531705855","IT" +"531705856","531707903","ES" +"531707904","531709951","GR" +"531709952","531718143","RU" +"531718144","531720191","ES" +"531720192","531722239","RU" +"531722240","531724287","IT" +"531724288","531726335","DE" +"531726336","531759103","TR" +"531759104","531890175","PL" +"531890176","532021247","RU" +"532021248","532152319","PL" +"532152320","532168703","DE" +"532168704","532185087","NL" +"532185088","532201471","IR" +"532201472","532210431","RU" +"532210432","532210687","LV" +"532210688","532211711","RU" +"532211712","532212223","LU" +"532212224","532212479","RU" +"532212480","532212735","UA" +"532212736","532214783","RU" +"532214784","532215295","AE" +"532215296","532221951","RU" +"532221952","532223999","IT" +"532224000","532226047","NO" +"532226048","532234239","GB" +"532234240","532242431","DK" +"532242432","532244479","IT" +"532244480","532246527","DE" +"532246528","532250623","BA" +"532250624","532283391","GB" +"532283392","532291583","TR" +"532291584","532293631","IE" +"532293632","532295679","IT" +"532295680","532297727","KG" +"532297728","532303871","RU" +"532303872","532305919","PL" +"532305920","532307967","NO" +"532307968","532310015","RU" +"532310016","532312063","GR" +"532312064","532312831","JE" +"532312832","532312944","GB" +"532312945","532312959","JE" +"532312960","532313060","GB" +"532313061","532314111","JE" +"532314112","532316159","DE" +"532316160","532324351","RU" +"532324352","532328447","NL" +"532328448","532330495","PS" +"532330496","532332543","CZ" +"532332544","532340735","PL" +"532340736","532341247","US" +"532341248","532348927","GB" +"532348928","532365311","PL" +"532365312","532373503","DE" +"532373504","532375551","RU" +"532375552","532377599","IT" +"532377600","532381695","DE" +"532381696","532414463","NL" +"532414464","532676607","IT" +"532676608","532692991","GE" +"532692992","532701183","CZ" +"532701184","532703231","GB" +"532703232","532703679","RU" +"532703680","532703743","IN" +"532703744","532704511","RU" +"532704512","532704767","IN" +"532704768","532705279","RU" +"532705280","532709375","NL" +"532709376","532725759","RU" +"532725760","532729855","SE" +"532729856","532731903","TR" +"532731904","532733951","PL" +"532733952","532734207","SE" +"532734208","532734463","US" +"532734464","532735999","SE" +"532736000","532738047","RU" +"532738048","532738303","GB" +"532738304","532738559","IN" +"532738560","532740095","GB" +"532740096","532742143","KG" +"532742144","532746239","GB" +"532746240","532752383","IT" +"532752384","532754431","BE" +"532754432","532756479","FR" +"532756480","532758527","IT" +"532758528","532762623","SY" +"532762624","532766719","UA" +"532766720","532768767","PL" +"532768768","532770815","NL" +"532770816","532772863","IR" +"532772864","532774911","RU" +"532774912","532779007","GB" +"532779008","532783103","IR" +"532783104","532785151","AT" +"532785152","532787199","GB" +"532787200","532789247","BE" +"532789248","532791295","DK" +"532791296","532793343","LT" +"532793344","532795391","SE" +"532795392","532797439","CH" +"532797440","532799487","IE" +"532799488","532801535","ES" +"532801536","532803583","DK" +"532803584","532805631","FR" +"532805632","532807679","SE" +"532807680","533200895","IT" +"533200896","533233663","TR" +"533233664","533250047","IE" +"533250048","533254143","RU" +"533254144","533256191","NL" +"533256192","533262335","RU" +"533262336","533264383","ES" +"533264384","533266431","RU" +"533266432","533266435","US" +"533266436","533266439","CN" +"533266440","533266443","JP" +"533266444","533266447","DE" +"533266448","533266451","FR" +"533266452","533266455","GB" +"533266456","533266459","BR" +"533266460","533266463","IT" +"533266464","533266467","CA" +"533266468","533266471","IN" +"533266472","533266475","RU" +"533266476","533266479","ES" +"533266480","533266483","AU" +"533266484","533266487","MX" +"533266488","533266491","KR" +"533266492","533266495","NL" +"533266496","533266499","TR" +"533266500","533266503","ID" +"533266504","533266507","CH" +"533266508","533266511","PL" +"533266512","533266515","BE" +"533266516","533266519","SE" +"533266520","533266523","SA" +"533266524","533266527","TW" +"533266528","533266531","SJ" +"533266532","533266535","AT" +"533266536","533266539","AR" +"533266540","533266543","ZA" +"533266544","533266547","IR" +"533266548","533266551","TH" +"533266552","533266555","DK" +"533266556","533266559","GR" +"533266560","533266563","AE" +"533266564","533266567","VE" +"533266568","533266571","CO" +"533266572","533266575","FI" +"533266576","533266579","MV" +"533266580","533266583","PT" +"533266584","533266587","HK" +"533266588","533266591","SG" +"533266592","533266595","EG" +"533266596","533266599","NG" +"533266600","533266603","IL" +"533266604","533266607","IE" +"533266608","533266611","CL" +"533266612","533266615","CZ" +"533266616","533266619","PH" +"533266620","533266623","PK" +"533266624","533266627","RO" +"533266628","533266631","DZ" +"533266632","533266635","PE" +"533266636","533266639","NZ" +"533266640","533266643","KZ" +"533266644","533266647","UA" +"533266648","533266651","KW" +"533266652","533266655","QA" +"533266656","533266687","DE" +"533266688","533266691","HU" +"533266692","533266695","BD" +"533266696","533266699","VN" +"533266700","533266703","MA" +"533266704","533266707","SK" +"533266708","533266711","AO" +"533266712","533266715","IQ" +"533266716","533266719","LY" +"533266720","533266723","SD" +"533266724","533266727","EC" +"533266728","533266731","HR" +"533266732","533266735","SY" +"533266736","533266739","OM" +"533266740","533266743","BY" +"533266744","533266747","LU" +"533266748","533266751","AZ" +"533266752","533266755","DO" +"533266756","533266759","LK" +"533266760","533266763","SI" +"533266764","533266767","FR" +"533266768","533266771","BG" +"533266772","533266775","TN" +"533266776","533266779","GT" +"533266780","533266783","UY" +"533266784","533266787","LB" +"533266788","533266791","UZ" +"533266792","533266795","RS" +"533266796","533266799","LT" +"533266800","533266803","MM" +"533266804","533266807","CR" +"533266808","533266811","KE" +"533266812","533266815","ET" +"533266816","533266819","YE" +"533266820","533266823","PA" +"533266824","533266827","JO" +"533266828","533266831","LV" +"533266832","533266835","CY" +"533266836","533266839","TZ" +"533266840","533266843","CI" +"533266844","533266847","CM" +"533266848","533266851","SV" +"533266852","533266855","BH" +"533266856","533266859","TT" +"533266860","533266863","EE" +"533266864","533266867","BO" +"533266868","533266871","GH" +"533266872","533266875","PY" +"533266876","533266879","UG" +"533266880","533266883","AF" +"533266884","533266887","BA" +"533266888","533266891","ZM" +"533266892","533266895","HN" +"533266896","533266899","NP" +"533266900","533266903","GQ" +"533266904","533266907","JM" +"533266908","533266911","IS" +"533266912","533266943","DE" +"533266944","533266947","SN" +"533266948","533266951","CD" +"533266952","533266955","GA" +"533266956","533266959","US" +"533266960","533266963","BN" +"533266964","533266967","CG" +"533266968","533266971","AL" +"533266972","533266975","NA" +"533266976","533266979","KH" +"533266980","533266983","GE" +"533266984","533266987","MK" +"533266988","533266991","MU" +"533266992","533266995","ML" +"533266996","533266999","AM" +"533267000","533267003","PG" +"533267004","533267007","BF" +"533267008","533267011","MG" +"533267012","533267015","MT" +"533267016","533267019","TD" +"533267020","533267023","BS" +"533267024","533267027","HT" +"533267028","533267031","BJ" +"533267032","533267035","NI" +"533267036","533267039","LS" +"533267040","533267043","MN" +"533267044","533267047","RW" +"533267048","533267051","NE" +"533267052","533267055","TJ" +"533267056","533267059","ZW" +"533267060","533267063","MD" +"533267064","533267067","MW" +"533267068","533267071","KG" +"533267072","533267075","GN" +"533267076","533267079","BB" +"533267080","533267083","ME" +"533267084","533267087","MR" +"533267088","533267091","SR" +"533267092","533267095","SZ" +"533267096","533267099","FJ" +"533267100","533267103","TG" +"533267104","533267107","ER" +"533267108","533267111","GY" +"533267112","533267115","CF" +"533267116","533267119","SL" +"533267120","533267123","LS" +"533267124","533267127","CV" +"533267128","533267131","BI" +"533267132","533267135","MV" +"533267136","533267139","BZ" +"533267140","533267143","BT" +"533267144","533267147","DJ" +"533267148","533267151","AG" +"533267152","533267155","GM" +"533267156","533267159","LC" +"533267160","533267163","LR" +"533267164","533267167","SC" +"533267168","533267199","DE" +"533267200","533267423","US" +"533267424","533267455","DE" +"533267456","533267679","CN" +"533267680","533267711","DE" +"533267712","533267935","JP" +"533267936","533268223","DE" +"533268224","533268447","FR" +"533268448","533268479","DE" +"533268480","533268703","GB" +"533268704","533268735","DE" +"533268736","533268959","BR" +"533268960","533268991","DE" +"533268992","533269215","IT" +"533269216","533269247","DE" +"533269248","533269471","CA" +"533269472","533269503","DE" +"533269504","533269727","IN" +"533269728","533269759","DE" +"533269760","533269983","ES" +"533269984","533270015","DE" +"533270016","533270239","AU" +"533270240","533270271","DE" +"533270272","533270495","KR" +"533270496","533270527","DE" +"533270528","533270751","NL" +"533270752","533270783","DE" +"533270784","533271039","DK" +"533271040","533271295","EE" +"533271296","533271551","FO" +"533271552","533271807","GE" +"533271808","533272063","FR" +"533272064","533272319","DE" +"533272320","533272575","GI" +"533272576","533272831","GR" +"533272832","533273087","GL" +"533273088","533273343","GG" +"533273344","533273599","VA" +"533273600","533273855","HU" +"533273856","533274111","IS" +"533274112","533274367","IR" +"533274368","533274623","IQ" +"533274624","533274879","IE" +"533274880","533275135","IM" +"533275136","533275391","IL" +"533275392","533275647","IT" +"533275648","533275903","JE" +"533275904","533276159","JO" +"533276160","533276415","KZ" +"533276416","533276671","KW" +"533276672","533276927","KG" +"533276928","533277183","LV" +"533277184","533277439","LB" +"533277440","533277695","LI" +"533277696","533277951","LT" +"533277952","533278207","LU" +"533278208","533278463","MT" +"533278464","533278719","MC" +"533278720","533278975","ME" +"533278976","533279231","NL" +"533279232","533279487","NO" +"533279488","533279743","OM" +"533279744","533279999","PS" +"533280000","533280255","PL" +"533280256","533280511","PT" +"533280512","533280767","RO" +"533280768","533281023","RU" +"533281024","533281279","SM" +"533281280","533281535","SA" +"533281536","533281791","RS" +"533281792","533282047","SK" +"533282048","533282303","SI" +"533282304","533282559","ES" +"533282560","533282815","SE" +"533282816","533283071","CH" +"533283072","533283327","SY" +"533283328","533283583","TJ" +"533283584","533283839","TR" +"533283840","533284095","TM" +"533284096","533284351","UA" +"533284352","533284607","AE" +"533284608","533284863","GB" +"533284864","533285119","UZ" +"533285120","533285375","YE" +"533285376","533285631","AX" +"533285632","533285887","AL" +"533285888","533286143","AD" +"533286144","533286399","AM" +"533286400","533286655","AT" +"533286656","533286911","AZ" +"533286912","533287167","BH" +"533287168","533287423","BY" +"533287424","533287679","BE" +"533287680","533287935","BA" +"533287936","533288191","BG" +"533288192","533288447","HR" +"533288448","533288703","CY" +"533288704","533288959","CZ" +"533288960","533289215","DK" +"533289216","533289471","EE" +"533289472","533289727","FO" +"533289728","533289983","GE" +"533289984","533290239","FR" +"533290240","533290495","DE" +"533290496","533290751","GI" +"533290752","533291007","GR" +"533291008","533291263","GL" +"533291264","533291519","GG" +"533291520","533291775","VA" +"533291776","533292031","HU" +"533292032","533292287","IS" +"533292288","533292543","IR" +"533292544","533292799","IQ" +"533292800","533293055","IE" +"533293056","533293311","IM" +"533293312","533293567","IL" +"533293568","533293823","IT" +"533293824","533294079","JE" +"533294080","533294335","JO" +"533294336","533294591","KZ" +"533294592","533294847","KW" +"533294848","533295103","KG" +"533295104","533295359","LV" +"533295360","533295615","LB" +"533295616","533295871","LI" +"533295872","533296127","LT" +"533296128","533296383","LU" +"533296384","533296639","MT" +"533296640","533296895","MC" +"533296896","533297151","ME" +"533297152","533297407","NL" +"533297408","533297663","NO" +"533297664","533297919","OM" +"533297920","533298175","PT" +"533298176","533298431","RO" +"533298432","533298687","RU" +"533298688","533298943","SM" +"533298944","533299199","SA" +"533299200","533299455","RS" +"533299456","533299711","SK" +"533299712","533299967","SI" +"533299968","533300223","ES" +"533300224","533300479","SE" +"533300480","533300735","CH" +"533300736","533300991","SY" +"533300992","533301247","TJ" +"533301248","533301503","TM" +"533301504","533301759","UA" +"533301760","533302015","AE" +"533302016","533302271","GB" +"533302272","533302527","UZ" +"533302528","533302783","AX" +"533302784","533303039","AL" +"533303040","533303295","AD" +"533303296","533303551","AM" +"533303552","533303807","AT" +"533303808","533304063","AZ" +"533304064","533304319","BH" +"533304320","533304575","BY" +"533304576","533304831","BE" +"533304832","533305087","BA" +"533305088","533305343","BG" +"533305344","533305855","HR" +"533305856","533306111","CZ" +"533306112","533306367","HR" +"533306368","533306623","EE" +"533306624","533306879","FO" +"533306880","533307135","GE" +"533307136","533307391","FR" +"533307392","533307647","DE" +"533307648","533307903","GI" +"533307904","533308159","GR" +"533308160","533308415","GL" +"533308416","533308671","GG" +"533308672","533308927","VA" +"533308928","533309183","HU" +"533309184","533309439","IS" +"533309440","533309695","IR" +"533309696","533309951","IQ" +"533309952","533310207","IE" +"533310208","533310463","IM" +"533310464","533310719","IL" +"533310720","533310975","IT" +"533310976","533311231","JE" +"533311232","533311487","JO" +"533311488","533311743","KZ" +"533311744","533311999","KW" +"533312000","533312255","KG" +"533312256","533312511","LV" +"533312512","533312767","LB" +"533312768","533313023","LI" +"533313024","533313279","LT" +"533313280","533313535","LU" +"533313536","533313791","MT" +"533313792","533314047","MC" +"533314048","533314303","ME" +"533314304","533314559","NL" +"533314560","533314815","NO" +"533314816","533315071","OM" +"533315072","533315327","PT" +"533315328","533315583","RO" +"533315584","533315839","RU" +"533315840","533316095","SM" +"533316096","533316351","SA" +"533316352","533316607","RS" +"533316608","533316863","SK" +"533316864","533317119","SI" +"533317120","533317375","ES" +"533317376","533317631","SE" +"533317632","533317887","CH" +"533317888","533318143","SY" +"533318144","533318399","TJ" +"533318400","533318655","TR" +"533318656","533318911","TM" +"533318912","533319167","UA" +"533319168","533319423","AE" +"533319424","533319679","GB" +"533319680","533319935","UZ" +"533319936","533320191","YE" +"533320192","533320447","AX" +"533320448","533320703","AL" +"533320704","533320959","AD" +"533320960","533321215","AM" +"533321216","533321471","AT" +"533321472","533321727","AZ" +"533321728","533321983","BH" +"533321984","533322495","BE" +"533322496","533331967","FR" +"533331968","533397503","UA" +"533397504","533463039","KW" +"533463040","533479423","RU" +"533479424","533479487","DE" +"533479488","533479519","SE" +"533479520","533479551","FI" +"533479552","533479711","DE" +"533479712","533479743","SE" +"533479744","533479775","FI" +"533479776","533479807","DK" +"533479808","533479999","DE" +"533480000","533480031","DK" +"533480032","533480063","FI" +"533480064","533480095","DE" +"533480096","533480127","SE" +"533480128","533480223","DE" +"533480224","533480255","DK" +"533480256","533480287","FI" +"533480288","533480319","SE" +"533480320","533480479","DE" +"533480480","533480511","NO" +"533480512","533480543","DE" +"533480544","533480575","DK" +"533480576","533480607","SE" +"533480608","533480735","DE" +"533480736","533480767","SE" +"533480768","533480799","NO" +"533480800","533480991","DE" +"533480992","533481023","NO" +"533481024","533481055","SE" +"533481056","533481279","DE" +"533481280","533481311","NO" +"533481312","533481343","DE" +"533481344","533481375","SE" +"533481376","533481471","DE" +"533481472","533483519","NO" +"533483520","533485567","FR" +"533485568","533487615","LU" +"533487616","533491711","RU" +"533491712","533495807","DE" +"533495808","533503999","NL" +"533504000","533512191","RU" +"533512192","533528575","ME" +"533528576","533594111","GB" +"533594112","533659647","TR" +"533659648","533676031","CZ" +"533676032","533680127","RU" +"533680128","533682175","TR" +"533682176","533684223","ES" +"533684224","533692415","IT" +"533692416","533725183","RU" +"533725184","533807103","SE" +"533807104","533811199","LT" +"533811200","533815295","DE" +"533815296","533815296","TR" +"533815297","533816319","CY" +"533816320","533816320","TR" +"533816321","533817343","CY" +"533817344","533817344","TR" +"533817345","533819391","CY" +"533819392","533823487","DE" +"533823488","533823551","CD" +"533823552","533823552","BE" +"533823553","533823612","CD" +"533823613","533823616","BE" +"533823617","533823644","CD" +"533823645","533823648","BE" +"533823649","533823660","CD" +"533823661","533823664","BE" +"533823665","533823676","CD" +"533823677","533823680","BE" +"533823681","533823692","CD" +"533823693","533823696","BE" +"533823697","533823708","CD" +"533823709","533823712","BE" +"533823713","533823724","CD" +"533823725","533824768","BE" +"533824769","533824828","CD" +"533824829","533824832","BE" +"533824833","533824860","CD" +"533824861","533824864","BE" +"533824865","533824876","CD" +"533824877","533824880","BE" +"533824881","533824892","CD" +"533824893","533825024","BE" +"533825025","533825148","CD" +"533825149","533825152","BE" +"533825153","533825276","CD" +"533825277","533825280","BE" +"533825281","533825532","CD" +"533825533","533825535","BE" +"533825536","533831679","IS" +"533831680","533835775","DE" +"533835776","533837823","SE" +"533837824","533839871","DE" +"533839872","533856255","IS" +"533856256","533858303","FR" +"533858304","533859583","HU" +"533859584","533859839","BG" +"533859840","533860095","HU" +"533860096","533860351","AT" +"533860352","533861375","DE" +"533861376","533862399","NL" +"533862400","533864447","GB" +"533864448","533889023","TR" +"533889024","533891071","GB" +"533891072","533893119","RU" +"533893120","533895167","ES" +"533895168","533897215","TR" +"533897216","533899263","DE" +"533899264","533901311","RU" +"533901312","533905407","IL" +"533905408","533913599","RU" +"533913600","533915647","ES" +"533915648","533919743","GB" +"533919744","533921791","SE" +"533921792","533954559","RU" +"533954560","533962751","BG" +"533962752","533964799","GB" +"533964800","533966847","NO" +"533966848","533968895","DE" +"533968896","533970943","ES" +"533970944","533987327","SE" +"533987328","534118399","DE" +"534118400","534151167","KW" +"534151168","534157759","DE" +"534157760","534157823","US" +"534157824","534166527","DE" +"534166528","534166783","AU" +"534166784","534167039","PL" +"534167040","534167295","TR" +"534167296","534175743","DE" +"534175744","534179839","NL" +"534179840","534181887","US" +"534181888","534183935","DE" +"534183936","534249471","RO" +"534249472","534253567","GB" +"534253568","534257407","FR" +"534257408","534257663","PL" +"534257664","534259711","SE" +"534259712","534261759","CH" +"534261760","534263807","GB" +"534263808","534265855","PL" +"534265856","534282239","CY" +"534282240","534284287","IT" +"534284288","534286335","SE" +"534286336","534288383","LU" +"534288384","534290431","IT" +"534290432","534296575","RU" +"534296576","534298623","BA" +"534298624","534306815","HR" +"534306816","534308863","SE" +"534308864","534308867","IE" +"534308868","534308887","GB" +"534308888","534308895","IE" +"534308896","534308907","GB" +"534308908","534308911","IE" +"534308912","534308919","GB" +"534308920","534309943","IE" +"534309944","534310007","GB" +"534310008","534310015","IE" +"534310016","534310047","GB" +"534310048","534310911","IE" +"534310912","534315007","IT" +"534315008","534347775","HR" +"534347776","534355967","GB" +"534355968","534364159","GR" +"534364160","534366207","FI" +"534366208","534368255","IT" +"534368256","534370303","IR" +"534370304","534372351","AT" +"534372352","534374399","KW" +"534374400","534376447","FR" +"534376448","534378495","IE" +"534378496","534380543","FR" +"534380544","534511615","AE" +"534511616","534544383","DE" +"534544384","534546431","RO" +"534546432","534548479","DE" +"534548480","534550527","PL" +"534550528","534560767","RU" +"534560768","534609919","GB" +"534609920","534642687","ES" +"534642688","534646783","CZ" +"534646784","534648831","PL" +"534648832","534650879","CH" +"534650880","534652927","RU" +"534652928","534654975","AL" +"534654976","534663167","GB" +"534663168","534675455","ES" +"534675456","534691839","GB" +"534691840","534693887","FR" +"534693888","534700031","GB" +"534700032","534708223","JO" +"534708224","534740991","TR" +"534740992","534749183","BA" +"534749184","534753279","NL" +"534753280","534757375","PS" +"534757376","534761471","KZ" +"534761472","534765567","BA" +"534765568","534767615","UA" +"534767616","534769663","HU" +"534769664","534773759","IT" +"534773760","536870911","DE" +"536870912","539623999","US" +"539624000","539624031","NL" +"539624032","539624567","US" +"539624568","539624575","IE" +"539624576","539624577","US" +"539624578","539624578","EU" +"539624579","539624703","US" +"539624704","539624735","GB" +"539624736","539624743","NL" +"539624744","539624751","GB" +"539624752","539624767","NL" +"539624768","539624775","US" +"539624776","539624799","GB" +"539624800","539624831","US" +"539624832","539624959","IE" +"539624960","539625087","US" +"539625088","539625119","GB" +"539625120","539625135","US" +"539625136","539625151","NL" +"539625152","539625391","US" +"539625392","539625407","GB" +"539625408","539626495","US" +"539626496","539626543","GB" +"539626544","539627127","US" +"539627128","539627135","SE" +"539627136","539627231","US" +"539627232","539627247","JP" +"539627248","539627263","AN" +"539627264","539627391","US" +"539627392","539627399","JP" +"539627400","539627407","IE" +"539627408","539627423","JP" +"539627424","539627503","US" +"539627504","539627519","NL" +"539627520","540680895","US" +"540680896","540680959","BE" +"540680960","540683775","US" +"540683776","540683783","DE" +"540683784","540685567","US" +"540685568","540685631","FR" +"540685632","540686591","US" +"540686592","540686599","GB" +"540686600","540686847","US" +"540686848","540686863","GB" +"540686864","540687103","US" +"540687104","540687111","GB" +"540687112","540687231","US" +"540687232","540687359","CA" +"540687360","540694527","US" +"540694528","540694591","IT" +"540694592","540705023","US" +"540705024","540705031","IE" +"540705032","540705535","US" +"540705536","540705599","IE" +"540705600","540711935","US" +"540711936","540712447","NL" +"540712448","540737535","US" +"540737536","540737757","BZ" +"540737758","540737758","BR" +"540737759","540737791","BZ" +"540737792","540737919","BR" +"540737920","540750175","BZ" +"540750176","540750207","MX" +"540750208","540750239","BZ" +"540750240","540750255","MX" +"540750256","540803071","BZ" +"540803072","540811791","US" +"540811792","540811799","JP" +"540811800","540811871","US" +"540811872","540811903","GB" +"540811904","540811935","US" +"540811936","540811967","DE" +"540811968","540811983","JP" +"540811984","540811991","US" +"540811992","540811999","DE" +"540812000","540812295","US" +"540812296","540812303","SG" +"540812304","540812319","DE" +"540812320","540812503","US" +"540812504","540812511","SG" +"540812512","540812719","US" +"540812720","540812727","SG" +"540812728","540812735","US" +"540812736","540812743","SG" +"540812744","540812751","NL" +"540812752","540812767","SG" +"540812768","540812775","US" +"540812776","540812783","NL" +"540812784","540813055","US" +"540813056","540813063","SG" +"540813064","540813071","US" +"540813072","540813103","NL" +"540813104","540813119","US" +"540813120","540813183","SG" +"540813184","540813247","NL" +"540813248","540813287","US" +"540813288","540813295","DE" +"540813296","540813303","SG" +"540813304","540813311","US" +"540813312","540813567","NL" +"540813568","540813639","DE" +"540813640","540813671","TW" +"540813672","540813695","US" +"540813696","540814015","TW" +"540814016","540814079","US" +"540814080","540814271","TW" +"540814272","540814279","DE" +"540814280","540814327","US" +"540814328","540814335","IN" +"540814336","540814591","AP" +"540814592","540814719","US" +"540814720","540814735","SG" +"540814736","540815124","US" +"540815125","540815126","SG" +"540815127","540815168","US" +"540815169","540815182","SG" +"540815183","540819455","US" +"540819456","540823551","CA" +"540823552","540826671","US" +"540826672","540826719","CA" +"540826720","540827135","US" +"540827136","540827263","CA" +"540827264","540827295","US" +"540827296","540827311","CA" +"540827312","540827359","US" +"540827360","540827375","CA" +"540827376","540827391","US" +"540827392","540827423","CA" +"540827424","540827471","US" +"540827472","540827487","CA" +"540827488","540827519","US" +"540827520","540827551","CA" +"540827552","540827583","US" +"540827584","540827647","CA" +"540827648","540829695","US" +"540829696","540829951","CA" +"540829952","540830511","US" +"540830512","540830527","CA" +"540830528","540830559","US" +"540830560","540830575","CA" +"540830576","540830623","US" +"540830624","540830735","CA" +"540830736","540830815","US" +"540830816","540830831","CA" +"540830832","540830847","US" +"540830848","540830895","CA" +"540830896","543690751","US" +"543690752","543691007","AR" +"543691008","543752191","US" +"543752192","543752447","BM" +"543752448","543755007","BR" +"543755008","543755263","AN" +"543755264","543760895","US" +"543760896","543761151","VE" +"543761152","543761407","US" +"543761408","543761663","CL" +"543761664","543761919","US" +"543761920","543763455","BR" +"543763456","543763711","US" +"543763712","543764223","MX" +"543764224","543766783","US" +"543766784","543767039","AR" +"543767040","543767295","US" +"543767296","543767551","EC" +"543767552","543768063","VE" +"543768064","543768319","US" +"543768320","543768575","AR" +"543768576","543817727","US" +"543817728","543818239","DE" +"543818240","543819263","NL" +"543819264","543820287","DE" +"543820288","543821311","NL" +"543821312","543821567","DE" +"543821568","543821823","NL" +"543821824","543824639","DE" +"543824640","543825663","GB" +"543825664","543826687","DE" +"543826688","543827711","GB" +"543827712","543827967","US" +"543827968","543833087","GB" +"543833088","543833599","IT" +"543833600","543834111","US" +"543834112","543835135","GB" +"543835136","543835647","FR" +"543835648","543836159","US" +"543836160","543836671","FR" +"543836672","543837183","US" +"543837184","543838207","FR" +"543838208","543840255","US" +"543840256","543841279","BE" +"543841280","543842303","US" +"543842304","543842559","AT" +"543842560","543843071","GB" +"543843072","543843583","US" +"543843584","543843839","DK" +"543843840","543844095","AT" +"543844096","543844351","US" +"543844352","543844863","CH" +"543844864","543845119","US" +"543845120","543846143","DE" +"543846144","543846655","HR" +"543846656","543846911","BG" +"543846912","543847167","SI" +"543847168","543847423","HU" +"543847424","543848447","US" +"543848448","543850495","ES" +"543850496","543850751","US" +"543850752","543851775","IE" +"543851776","543852031","DK" +"543852032","543852543","US" +"543852544","543854079","ES" +"543854080","543855615","CH" +"543855616","543855871","FI" +"543855872","543856127","IT" +"543856128","543856639","US" +"543856640","543857151","ZA" +"543857152","543857407","US" +"543857408","543857663","CZ" +"543857664","543857919","NO" +"543857920","543858943","DE" +"543858944","543859455","DK" +"543859456","543859967","US" +"543859968","543860223","DK" +"543860224","543860479","GR" +"543860480","543860735","US" +"543860736","543861247","SE" +"543861248","543864063","US" +"543864064","543864575","FI" +"543864576","543864831","US" +"543864832","543865343","PK" +"543865344","543865855","US" +"543865856","543866879","GB" +"543866880","543870975","NL" +"543870976","543872511","ES" +"543872512","543874047","US" +"543874048","543875583","FR" +"543875584","543877119","DE" +"543877120","543878655","BE" +"543878656","543880191","IT" +"543880192","543881727","NL" +"543881728","543883263","GB" +"543883264","586975999","US" +"586976000","586976255","AP" +"586976256","587006719","US" +"587006720","587006975","GB" +"587006976","603979775","US" +"603979776","603980799","CN" +"603980800","603981823","NP" +"603981824","604110847","CN" +"604110848","604241919","JP" +"604241920","604504063","CN" +"604504064","605028351","JP" +"605028352","606412799","CN" +"606412800","606413823","HK" +"606413824","606414335","CN" +"606414336","606414591","AU" +"606414592","606420991","CN" +"606420992","606437375","ID" +"606437376","606470143","KH" +"606470144","606601215","KR" +"606601216","607387647","CN" +"607387648","607649791","JP" +"607649792","608174079","CN" +"608174080","610271231","ID" +"610271232","618659839","CN" +"618659840","619708415","TW" +"619708416","620232703","JP" +"620232704","620494847","CN" +"620494848","620625919","NP" +"620625920","620691455","CN" +"620756992","620759039","IE" +"620759040","620763135","NL" +"620763136","620765183","EE" +"620765184","620773375","CH" +"620773376","620775423","ME" +"620775424","620777471","FR" +"620777472","620781567","NL" +"620781568","620783615","GB" +"620783616","620785663","ES" +"620785664","620787711","DE" +"620787712","620789759","RU" +"620789760","620810239","HR" +"620810240","620812287","LT" +"620812288","620814335","SE" +"620814336","620822527","LT" +"620822528","620845055","RU" +"620845056","620845193","GB" +"620845194","620845201","DE" +"620845202","620845215","NL" +"620845216","620845439","GB" +"620845440","620845503","SI" +"620845504","620849151","GB" +"620849152","620851199","NL" +"620851200","620855295","DE" +"620855296","620859391","RU" +"620859392","620861439","TR" +"620861440","620863487","GB" +"620863488","620865535","DE" +"620865536","620867583","FR" +"620867584","620869631","ES" +"620869632","620870655","FI" +"620870656","620871679","A2" +"620871680","620873727","DE" +"620873728","620875775","NL" +"620875776","620877823","US" +"620877824","620879871","DE" +"620879872","620881919","GB" +"620881920","620888063","FR" +"620888064","621019135","SE" +"621019136","621150207","DE" +"621150208","621215743","GR" +"621215744","621281279","PL" +"621281280","621314047","PS" +"621314048","621318143","BA" +"621318144","621322239","RU" +"621322240","621330431","FR" +"621330432","621346815","PL" +"621346816","621359615","RU" +"621359616","621360127","UA" +"621360128","621361663","RU" +"621361664","621361919","GB" +"621361920","621362175","SY" +"621362176","621362431","RU" +"621362432","621362687","BE" +"621362688","621381631","RU" +"621381632","621383679","FR" +"621383680","621387775","RU" +"621387776","621389823","NL" +"621389824","621391871","SK" +"621391872","621393919","CY" +"621393920","621395967","DE" +"621395968","621398015","CZ" +"621398016","621400063","TR" +"621400064","621402111","HU" +"621402112","621404159","NL" +"621404160","621408255","IT" +"621408256","621410303","RU" +"621410304","621412351","IR" +"621412352","621445119","DE" +"621445120","621805567","ES" +"621805568","621813759","NL" +"621813760","621821951","SA" +"621821952","621823999","DE" +"621824000","621826047","FR" +"621826048","621828095","RU" +"621828096","621830143","GB" +"621830144","621838335","FI" +"621838336","621871103","SA" +"621871104","621903871","BY" +"621903872","621912063","IQ" +"621912064","621916159","HU" +"621916160","621918207","KZ" +"621918208","621920255","GB" +"621920256","621924351","JO" +"621924352","621928447","NL" +"621928448","621932543","DE" +"621932544","621934591","UA" +"621934592","621936639","SE" +"621936640","621940479","RU" +"621940480","621942527","GB" +"621942528","621960703","RU" +"621960704","621960959","LV" +"621960960","621964031","RU" +"621964032","621968127","RO" +"621968128","621969407","RU" +"621969408","621971455","RO" +"621971456","621973503","GB" +"621973504","621975551","IE" +"621975552","621977599","RU" +"621977600","621981695","FR" +"621981696","621983743","US" +"621983744","621985791","RS" +"621985792","621987839","US" +"621987840","621989887","DK" +"621989888","621991935","SE" +"621991936","621993983","DK" +"621993984","621998079","SI" +"621998080","622000127","ES" +"622000128","622004223","RU" +"622004224","622006271","BE" +"622006272","622008319","FI" +"622008320","622010367","GB" +"622010368","622018559","RU" +"622018560","622020607","SI" +"622020608","622022655","RU" +"622022656","622026751","IR" +"622026752","622028799","IE" +"622028800","622030847","RS" +"622030848","622034943","IL" +"622034944","622067711","UA" +"622067712","622329855","RU" +"622329856","622395391","DE" +"622395392","622405631","UA" +"622405632","622407679","ES" +"622407680","622409727","DE" +"622409728","622411775","FR" +"622411776","622413823","DE" +"622413824","622415871","FR" +"622415872","622417919","MK" +"622417920","622418943","GB" +"622418944","622419967","IM" +"622419968","622428159","UA" +"622428160","622460927","RO" +"622460928","622477311","AZ" +"622477312","622479359","AL" +"622479360","622481407","GB" +"622481408","622483455","AL" +"622483456","622485503","GB" +"622485504","622487551","MK" +"622487552","622489599","GB" +"622489600","622493695","US" +"622493696","622497791","MD" +"622497792","622499839","IL" +"622499840","622501887","SE" +"622501888","622503935","PL" +"622503936","622505983","AM" +"622505984","622510079","FR" +"622510080","622512127","PL" +"622512128","622514175","DE" +"622514176","622518271","NO" +"622518272","622520319","NL" +"622520320","622522367","RU" +"622522368","622524415","FR" +"622524416","622526463","ES" +"622526464","622530815","DE" +"622530816","622531071","AT" +"622531072","622531327","CZ" +"622531328","622532351","CH" +"622532352","622559743","DE" +"622559744","622561791","AT" +"622561792","622582271","DE" +"622582272","622583295","AT" +"622583296","622591999","DE" +"622592000","622624767","OM" +"622624768","622626815","NO" +"622626816","622630911","DK" +"622630912","622632959","PL" +"622632960","622641151","RU" +"622641152","622657535","PT" +"622657536","622690303","RU" +"622690304","622723071","ES" +"622723072","622854143","PL" +"622854144","622866431","IR" +"622866432","622868479","NO" +"622868480","622870527","FR" +"622870528","622874623","AZ" +"622874624","622878719","IT" +"622878720","622880767","FR" +"622880768","622882815","IT" +"622882816","622886911","IR" +"622886912","622919679","GR" +"622919680","622985215","FI" +"622985216","622993407","TR" +"622993408","622997503","IT" +"622997504","623001599","NL" +"623001600","623003647","ES" +"623003648","623005695","IT" +"623005696","623009791","PS" +"623009792","623017983","MD" +"623017984","623050751","KW" +"623050752","623052799","FR" +"623052800","623054847","RS" +"623054848","623058943","FI" +"623058944","623067135","RO" +"623067136","623067136","RS" +"623067137","623069182","AL" +"623069183","623069183","RS" +"623069184","623071231","GB" +"623071232","623073279","FI" +"623073280","623075327","GB" +"623075328","623077375","DK" +"623077376","623083519","CH" +"623083520","623116287","RO" +"623116288","623378431","KW" +"623378432","623509503","OM" +"623509504","623640575","RO" +"623640576","623642623","DE" +"623642624","623644671","NL" +"623644672","623648767","CZ" +"623648768","623650815","JO" +"623650816","623652863","RU" +"623652864","623654911","FI" +"623654912","623656959","IR" +"623656960","623673343","BY" +"623673344","623689727","NO" +"623689728","623706111","RU" +"623706112","623771647","BY" +"623771648","623771903","GB" +"623771904","623772159","US" +"623772160","623774207","GB" +"623774208","623774719","NL" +"623774720","623775743","GB" +"623775744","623777791","IE" +"623777792","623778175","GB" +"623778176","623778239","DE" +"623778240","623778303","NL" +"623778304","623779839","GB" +"623779840","623783935","IL" +"623783936","623788031","RU" +"623788032","623790079","HU" +"623790080","623792127","ES" +"623792128","623794175","CZ" +"623794176","623796223","ES" +"623796224","623798271","GB" +"623798272","623800319","GE" +"623800320","623801855","LU" +"623801856","623803135","SE" +"623803136","623804415","NL" +"623804416","623806463","RU" +"623806464","623808511","NL" +"623808512","623810559","RU" +"623810560","623812607","ES" +"623812608","623820799","SE" +"623820800","623822847","NL" +"623822848","623824895","GB" +"623824896","623826943","CZ" +"623826944","623837183","UA" +"623837184","623902719","PL" +"623902720","623919103","CZ" +"623919104","623935487","NL" +"623935488","623960063","SY" +"623960064","623962111","GB" +"623962112","623964159","HR" +"623964160","623966207","GB" +"623966208","623968255","RU" +"623968256","624001023","DE" +"624001024","624005119","DK" +"624005120","624007167","IR" +"624007168","624009215","DE" +"624009216","624025599","RU" +"624025600","624027647","NL" +"624027648","624029695","FR" +"624029696","624033791","SE" +"624033792","624164863","DE" +"624164864","624427007","UA" +"624427008","624492543","RO" +"624492544","624521215","UA" +"624521216","624523263","RU" +"624523264","624558079","UA" +"624558080","624562175","SK" +"624562176","624564223","TR" +"624564224","624566271","GB" +"624566272","624568319","RU" +"624568320","624570367","BE" +"624570368","624574463","DE" +"624574464","624574479","US" +"624574480","624574487","NL" +"624574488","624574495","US" +"624574496","624574503","TR" +"624574504","624574511","BR" +"624574512","624574527","US" +"624574528","624574535","DK" +"624574536","624574551","US" +"624574552","624574559","GB" +"624574560","624574567","US" +"624574568","624574575","AU" +"624574576","624574599","US" +"624574600","624574607","SG" +"624574608","624574615","HK" +"624574616","624574623","GB" +"624574624","624574655","TR" +"624574656","624574663","DK" +"624574664","624574671","KW" +"624574672","624574687","US" +"624574688","624574703","TR" +"624574704","624574711","US" +"624574712","624574715","TR" +"624574716","624574719","US" +"624574720","624574720","NL" +"624574721","624574721","AU" +"624574722","624574723","US" +"624574724","624574727","TR" +"624574728","624574735","US" +"624574736","624574743","GB" +"624574744","624574751","BR" +"624574752","624574823","US" +"624574824","624574831","DK" +"624574832","624574855","US" +"624574856","624574863","GB" +"624574864","624574895","US" +"624574896","624574899","IT" +"624574900","624574903","HK" +"624574904","624574911","US" +"624574912","624574919","CA" +"624574920","624574927","US" +"624574928","624574935","IL" +"624574936","624574959","DK" +"624574960","624574967","RO" +"624574968","624574991","US" +"624574992","624574999","ES" +"624575000","624575007","US" +"624575008","624575015","NL" +"624575016","624575055","US" +"624575056","624575063","NL" +"624575064","624575099","US" +"624575100","624575103","IN" +"624575104","624575111","DK" +"624575112","624575119","IT" +"624575120","624575127","SA" +"624575128","624575135","RO" +"624575136","624575151","US" +"624575152","624575163","MA" +"624575164","624575167","TR" +"624575168","624575175","RU" +"624575176","624575183","ES" +"624575184","624575191","US" +"624575192","624575195","EG" +"624575196","624575199","TR" +"624575200","624575207","IN" +"624575208","624575215","IL" +"624575216","624575231","US" +"624575232","624575239","EG" +"624575240","624575247","IN" +"624575248","624575263","US" +"624575264","624575271","PH" +"624575272","624575279","GB" +"624575280","624575287","US" +"624575288","624575295","NL" +"624575296","624575303","CN" +"624575304","624575335","US" +"624575336","624575343","SA" +"624575344","624575347","GB" +"624575348","624575351","EG" +"624575352","624575391","US" +"624575392","624575399","GB" +"624575400","624575403","SA" +"624575404","624575407","IT" +"624575408","624575415","NL" +"624575416","624575423","US" +"624575424","624575427","IT" +"624575428","624575431","IL" +"624575432","624575439","DK" +"624575440","624575455","US" +"624575456","624575463","GB" +"624575464","624575471","DK" +"624575472","624575479","NL" +"624575480","624575487","AE" +"624575488","624575495","PL" +"624575496","624575503","IL" +"624575504","624575511","SK" +"624575512","624575535","US" +"624575536","624575539","PL" +"624575540","624575543","US" +"624575544","624575551","IN" +"624575552","624575567","GB" +"624575568","624575575","AE" +"624575576","624575583","AU" +"624575584","624575607","US" +"624575608","624575615","RU" +"624575616","624575759","US" +"624575760","624575771","NL" +"624575772","624575791","US" +"624575792","624575799","TR" +"624575800","624575807","NL" +"624575808","624575823","US" +"624575824","624575831","IL" +"624575832","624575839","US" +"624575840","624575871","GB" +"624575872","624575879","LB" +"624575880","624575883","TR" +"624575884","624575895","US" +"624575896","624575903","DK" +"624575904","624575911","US" +"624575912","624575919","CY" +"624575920","624575927","US" +"624575928","624575935","ES" +"624575936","624575943","US" +"624575944","624575951","GB" +"624575952","624575959","NO" +"624575960","624575967","US" +"624575968","624575975","NL" +"624575976","624575983","US" +"624575984","624575991","GB" +"624575992","624575999","IT" +"624576000","624576011","PL" +"624576012","624576015","CN" +"624576016","624576023","US" +"624576024","624576031","TR" +"624576032","624576055","CN" +"624576056","624576063","HK" +"624576064","624576071","BD" +"624576072","624576095","US" +"624576096","624576103","CA" +"624576104","624576107","CN" +"624576108","624576111","TW" +"624576112","624576119","BR" +"624576120","624576127","GB" +"624576128","624576131","IN" +"624576132","624576135","SA" +"624576136","624576143","RU" +"624576144","624576151","BR" +"624576152","624576159","US" +"624576160","624576191","CN" +"624576192","624576223","NL" +"624576224","624576235","CN" +"624576236","624576239","NL" +"624576240","624576255","US" +"624576256","624576263","EG" +"624576264","624576295","US" +"624576296","624576303","IE" +"624576304","624576319","US" +"624576320","624576327","IT" +"624576328","624576335","NL" +"624576336","624576343","TR" +"624576344","624576359","US" +"624576360","624576367","SE" +"624576368","624576383","US" +"624576384","624576391","CN" +"624576392","624576399","UA" +"624576400","624576407","GB" +"624576408","624576411","DE" +"624576412","624576415","TR" +"624576416","624576423","KW" +"624576424","624576431","GB" +"624576432","624576447","US" +"624576448","624576463","IL" +"624576464","624576479","US" +"624576480","624576487","CY" +"624576488","624576495","GB" +"624576496","624576511","US" +"624576512","624576543","DK" +"624576544","624576607","US" +"624576608","624576639","TR" +"624576640","624576703","PA" +"624576704","624576711","PT" +"624576712","624576735","US" +"624576736","624576767","SA" +"624576768","624576783","CA" +"624576784","624576863","US" +"624576864","624576879","IL" +"624576880","624576887","TR" +"624576888","624576911","US" +"624576912","624576927","NL" +"624576928","624576943","DE" +"624576944","624576959","NL" +"624576960","624576991","TR" +"624576992","624576999","US" +"624577000","624577007","IL" +"624577008","624577023","US" +"624577024","624577055","SA" +"624577056","624577071","VG" +"624577072","624577087","NL" +"624577088","624577119","DE" +"624577120","624577127","TR" +"624577128","624577135","EG" +"624577136","624577143","DE" +"624577144","624577151","US" +"624577152","624577215","GB" +"624577216","624577247","US" +"624577248","624577279","LT" +"624577280","624577287","US" +"624577288","624577295","DE" +"624577296","624577303","US" +"624577304","624577305","TR" +"624577306","624577307","GB" +"624577308","624577319","US" +"624577320","624577327","NL" +"624577328","624577335","CN" +"624577336","624577343","US" +"624577344","624577351","GB" +"624577352","624577359","CA" +"624577360","624577375","ES" +"624577376","624577439","TR" +"624577440","624577455","US" +"624577456","624577463","PK" +"624577464","624577467","US" +"624577468","624577471","TR" +"624577472","624577483","CA" +"624577484","624577487","HU" +"624577488","624577535","US" +"624577536","624577543","DE" +"624577544","624577547","US" +"624577548","624577551","AE" +"624577552","624577559","US" +"624577560","624577567","AE" +"624577568","624577575","US" +"624577576","624577583","GB" +"624577584","624577591","HU" +"624577592","624577599","TR" +"624577600","624577607","PL" +"624577608","624577615","US" +"624577616","624577623","AE" +"624577624","624577631","ES" +"624577632","624577639","NL" +"624577640","624577647","LB" +"624577648","624577663","GB" +"624577664","624577679","NL" +"624577680","624577687","US" +"624577688","624577695","DE" +"624577696","624577703","BE" +"624577704","624577711","CA" +"624577712","624577715","DE" +"624577716","624577719","TR" +"624577720","624577723","DE" +"624577724","624577791","US" +"624577792","624577799","ZA" +"624577800","624577807","US" +"624577808","624577823","GB" +"624577824","624577835","US" +"624577836","624577839","NL" +"624577840","624577855","US" +"624577856","624577863","GB" +"624577864","624577871","CN" +"624577872","624577887","NL" +"624577888","624577935","SA" +"624577936","624577943","ZA" +"624577944","624577959","US" +"624577960","624577967","TR" +"624577968","624578015","US" +"624578016","624578023","TR" +"624578024","624578047","US" +"624578048","624578079","TR" +"624578080","624578111","EG" +"624578112","624578143","US" +"624578144","624578159","NL" +"624578160","624578175","US" +"624578176","624578207","CA" +"624578208","624578239","TR" +"624578240","624578255","US" +"624578256","624578303","NL" +"624578304","624578407","US" +"624578408","624578415","GB" +"624578416","624578423","SA" +"624578424","624578431","US" +"624578432","624578527","NL" +"624578528","624578535","US" +"624578536","624578543","NL" +"624578544","624578559","US" +"624578560","624578799","NL" +"624578800","624578823","US" +"624578824","624578911","NL" +"624578912","624578919","GB" +"624578920","624578951","NL" +"624578952","624578955","PL" +"624578956","624578959","SA" +"624578960","624579007","NL" +"624579008","624579015","TR" +"624579016","624579019","DE" +"624579020","624579087","NL" +"624579088","624579095","SI" +"624579096","624579103","NL" +"624579104","624579111","PK" +"624579112","624579119","RO" +"624579120","624579175","NL" +"624579176","624579199","US" +"624579200","624579247","NL" +"624579248","624579255","CA" +"624579256","624579263","US" +"624579264","624579311","NL" +"624579312","624579359","US" +"624579360","624579431","NL" +"624579432","624579439","GB" +"624579440","624579455","US" +"624579456","624579463","NL" +"624579464","624579471","DE" +"624579472","624579479","AU" +"624579480","624579487","PL" +"624579488","624579495","DE" +"624579496","624579499","TR" +"624579500","624579503","PL" +"624579504","624579535","NL" +"624579536","624579551","US" +"624579552","624579567","NL" +"624579568","624579591","US" +"624579592","624579599","SA" +"624579600","624579607","IT" +"624579608","624579615","HK" +"624579616","624579623","IN" +"624579624","624579631","AE" +"624579632","624579639","GR" +"624579640","624579647","US" +"624579648","624579679","NL" +"624579680","624579687","LB" +"624579688","624579695","US" +"624579696","624579703","JO" +"624579704","624579711","PL" +"624579712","624579743","NL" +"624579744","624579751","US" +"624579752","624579759","HU" +"624579760","624579771","US" +"624579772","624579775","AE" +"624579776","624579783","MX" +"624579784","624579791","IN" +"624579792","624579815","US" +"624579816","624579823","AE" +"624579824","624579831","US" +"624579832","624579839","GB" +"624579840","624579847","TR" +"624579848","624579855","GR" +"624579856","624579871","BR" +"624579872","624579875","TR" +"624579876","624579879","GB" +"624579880","624579887","US" +"624579888","624579895","EG" +"624579896","624579903","HR" +"624579904","624579935","GB" +"624579936","624579943","CN" +"624579944","624579963","US" +"624579964","624579967","GR" +"624579968","624579975","NZ" +"624579976","624579983","SA" +"624579984","624579991","US" +"624579992","624579999","BH" +"624580000","624580011","TR" +"624580012","624580015","CN" +"624580016","624580031","BE" +"624580032","624580039","US" +"624580040","624580047","BR" +"624580048","624580051","BM" +"624580052","624580055","AE" +"624580056","624580063","PK" +"624580064","624580071","NL" +"624580072","624580079","US" +"624580080","624580087","NO" +"624580088","624580111","US" +"624580112","624580119","SA" +"624580120","624580127","CN" +"624580128","624580135","US" +"624580136","624580143","EG" +"624580144","624580151","RU" +"624580152","624580159","ES" +"624580160","624580167","IN" +"624580168","624580171","PT" +"624580172","624580175","CN" +"624580176","624580183","IN" +"624580184","624580191","GR" +"624580192","624580199","IN" +"624580200","624580207","TR" +"624580208","624580215","AU" +"624580216","624580219","NL" +"624580220","624580223","US" +"624580224","624580231","CH" +"624580232","624580239","US" +"624580240","624580247","DE" +"624580248","624580251","US" +"624580252","624580255","GR" +"624580256","624580271","GB" +"624580272","624580279","TR" +"624580280","624580287","CN" +"624580288","624580319","US" +"624580320","624580327","GB" +"624580328","624580335","AR" +"624580336","624580349","US" +"624580350","624580350","TR" +"624580351","624580351","CH" +"624580352","624580359","AE" +"624580360","624580367","FR" +"624580368","624580383","GB" +"624580384","624580391","ES" +"624580392","624580415","US" +"624580416","624580431","GB" +"624580432","624580471","US" +"624580472","624580479","AT" +"624580480","624580487","US" +"624580488","624580491","AT" +"624580492","624580495","GB" +"624580496","624580511","US" +"624580512","624580519","IN" +"624580520","624580523","CN" +"624580524","624580527","US" +"624580528","624580535","IL" +"624580536","624580543","DK" +"624580544","624580559","US" +"624580560","624580567","DK" +"624580568","624580599","US" +"624580600","624580607","MT" +"624580608","624580911","US" +"624580912","624580919","ES" +"624580920","624580951","US" +"624580952","624580955","GB" +"624580956","624580959","NL" +"624580960","624580975","US" +"624580976","624580983","SE" +"624580984","624580991","BR" +"624580992","624580995","RO" +"624580996","624580999","SE" +"624581000","624581003","TR" +"624581004","624581007","PL" +"624581008","624581023","NL" +"624581024","624581031","BE" +"624581032","624581039","US" +"624581040","624581047","GB" +"624581048","624581055","US" +"624581056","624581071","NL" +"624581072","624581087","EG" +"624581088","624581103","AE" +"624581104","624581127","US" +"624581128","624581135","RO" +"624581136","624581167","US" +"624581168","624581215","NL" +"624581216","624581279","US" +"624581280","624581295","NL" +"624581296","624581303","SZ" +"624581304","624581311","CN" +"624581312","624581319","US" +"624581320","624581327","NG" +"624581328","624581335","SZ" +"624581336","624581339","CN" +"624581340","624581343","IN" +"624581344","624581375","NL" +"624581376","624581407","US" +"624581408","624581439","NL" +"624581440","624581463","US" +"624581464","624581471","CN" +"624581472","624581487","NL" +"624581488","624581495","PE" +"624581496","624581503","US" +"624581504","624581511","IN" +"624581512","624581519","TR" +"624581520","624581527","US" +"624581528","624581567","NL" +"624581568","624581599","RO" +"624581600","624581632","NL" +"624581633","624581633","MA" +"624581634","624581635","SK" +"624581636","624581647","US" +"624581648","624581655","SA" +"624581656","624581663","GB" +"624581664","624581679","US" +"624581680","624581687","DK" +"624581688","624581691","TR" +"624581692","624581693","GB" +"624581694","624581694","MA" +"624581695","624581695","GB" +"624581696","624581703","DK" +"624581704","624581707","US" +"624581708","624581709","NL" +"624581710","624581710","US" +"624581711","624581711","AU" +"624581712","624581719","SA" +"624581720","624581743","US" +"624581744","624581751","NL" +"624581752","624581759","GB" +"624581760","624581763","SA" +"624581764","624581775","US" +"624581776","624581779","SA" +"624581780","624581783","US" +"624581784","624581791","HR" +"624581792","624581795","US" +"624581796","624581799","TR" +"624581800","624581803","US" +"624581804","624581807","HK" +"624581808","624581815","HR" +"624581816","624581819","NL" +"624581820","624581831","US" +"624581832","624581839","SA" +"624581840","624581847","BR" +"624581848","624581848","PA" +"624581849","624581851","NL" +"624581852","624581855","US" +"624581856","624581863","UA" +"624581864","624581867","GB" +"624581868","624581868","TR" +"624581869","624581869","NL" +"624581870","624581870","RU" +"624581871","624581871","IN" +"624581872","624581880","TR" +"624581881","624581881","US" +"624581882","624581882","SA" +"624581883","624581883","AU" +"624581884","624581885","MA" +"624581886","624581887","NL" +"624581888","624581895","US" +"624581896","624581903","MX" +"624581904","624581905","GB" +"624581906","624581906","US" +"624581907","624581907","DE" +"624581908","624581909","SA" +"624581910","624581910","GB" +"624581911","624581911","UA" +"624581912","624581915","TR" +"624581916","624581917","SA" +"624581918","624581918","BR" +"624581919","624581919","MA" +"624581920","624581927","RU" +"624581928","624581929","US" +"624581930","624581930","EG" +"624581931","624581931","AU" +"624581932","624581932","UA" +"624581933","624581933","AU" +"624581934","624581934","GB" +"624581935","624581935","IT" +"624581936","624581951","US" +"624581952","624581983","NL" +"624581984","624581991","US" +"624581992","624581999","BR" +"624582000","624582007","NL" +"624582008","624582011","DK" +"624582012","624582023","US" +"624582024","624582031","IT" +"624582032","624582039","US" +"624582040","624582045","NL" +"624582046","624582046","RU" +"624582047","624582047","NL" +"624582048","624582055","EG" +"624582056","624582063","US" +"624582064","624582071","TH" +"624582072","624582079","IN" +"624582080","624582087","US" +"624582088","624582095","CN" +"624582096","624582103","MX" +"624582104","624582107","IT" +"624582108","624582111","NO" +"624582112","624582127","US" +"624582128","624582131","TR" +"624582132","624582135","AR" +"624582136","624582139","TR" +"624582140","624582207","US" +"624582208","624582215","BA" +"624582216","624582223","US" +"624582224","624582235","NL" +"624582236","624582239","US" +"624582240","624582243","AE" +"624582244","624582245","NL" +"624582246","624582246","US" +"624582247","624582247","SA" +"624582248","624582255","GB" +"624582256","624582263","US" +"624582264","624582271","CN" +"624582272","624582272","US" +"624582273","624582273","CN" +"624582274","624582275","UA" +"624582276","624582279","US" +"624582280","624582287","GB" +"624582288","624582295","NL" +"624582296","624582303","CA" +"624582304","624582311","US" +"624582312","624582319","BE" +"624582320","624582327","US" +"624582328","624582335","KW" +"624582336","624582343","CN" +"624582344","624582351","EG" +"624582352","624582359","KW" +"624582360","624582367","AF" +"624582368","624582375","AR" +"624582376","624582383","GB" +"624582384","624582391","AF" +"624582392","624582399","HR" +"624582400","624582463","US" +"624582464","624582495","AF" +"624582496","624582503","SA" +"624582504","624582511","ES" +"624582512","624582527","US" +"624582528","624582543","NL" +"624582544","624582559","TR" +"624582560","624582575","NL" +"624582576","624582583","EG" +"624582584","624582607","DK" +"624582608","624582615","BR" +"624582616","624582623","PA" +"624582624","624582639","NL" +"624582640","624582647","CN" +"624582648","624582651","TR" +"624582652","624582759","US" +"624582760","624582767","JO" +"624582768","624582775","US" +"624582776","624582783","NO" +"624582784","624582791","NL" +"624582792","624582799","DK" +"624582800","624582807","US" +"624582808","624582815","LV" +"624582816","624582819","BR" +"624582820","624582823","US" +"624582824","624582847","DK" +"624582848","624582863","US" +"624582864","624582911","DK" +"624582912","624582919","SE" +"624582920","624582927","IL" +"624582928","624582935","SA" +"624582936","624582943","TR" +"624582944","624582951","LV" +"624582952","624582959","IL" +"624582960","624582975","US" +"624582976","624582983","TW" +"624582984","624582991","JO" +"624582992","624582999","GB" +"624583000","624583007","US" +"624583008","624583015","GR" +"624583016","624583031","NZ" +"624583032","624583039","SA" +"624583040","624583071","SG" +"624583072","624583079","BR" +"624583080","624583087","TR" +"624583088","624583103","GB" +"624583104","624583111","NG" +"624583112","624583115","US" +"624583116","624583119","SE" +"624583120","624583127","GB" +"624583128","624583135","IT" +"624583136","624583143","US" +"624583144","624583147","NG" +"624583148","624583151","CN" +"624583152","624583159","US" +"624583160","624583167","IN" +"624583168","624583175","US" +"624583176","624583183","RO" +"624583184","624583423","US" +"624583424","624583431","DE" +"624583432","624583435","US" +"624583436","624583439","AE" +"624583440","624583447","US" +"624583448","624583455","AE" +"624583456","624583463","US" +"624583464","624583471","GB" +"624583472","624583479","HU" +"624583480","624583487","TR" +"624583488","624583495","PL" +"624583496","624583503","US" +"624583504","624583511","AE" +"624583512","624583519","ES" +"624583520","624583527","NL" +"624583528","624583535","LB" +"624583536","624583551","GB" +"624583552","624583567","NL" +"624583568","624583575","US" +"624583576","624583583","DE" +"624583584","624583591","BE" +"624583592","624583599","CA" +"624583600","624583603","DE" +"624583604","624583607","TR" +"624583608","624583611","DE" +"624583612","624583679","US" +"624583680","624583703","NL" +"624583704","624583711","US" +"624583712","624583719","SA" +"624583720","624583727","UG" +"624583728","624583735","US" +"624583736","624583743","SA" +"624583744","624583751","AE" +"624583752","624583759","ES" +"624583760","624583767","NL" +"624583768","624583771","TR" +"624583772","624583775","US" +"624583776","624583783","PT" +"624583784","624583791","NL" +"624583792","624583795","TR" +"624583796","624583799","BM" +"624583800","624583807","CN" +"624583808","624583815","NL" +"624583816","624583823","US" +"624583824","624583831","MA" +"624583832","624583839","PK" +"624583840","624583855","NL" +"624583856","624583863","US" +"624583864","624583871","DK" +"624583872","624583903","IN" +"624583904","624583911","BR" +"624583912","624583919","ES" +"624583920","624583927","DK" +"624583928","624583935","GR" +"624583936","624583951","US" +"624583952","624583959","ES" +"624583960","624583967","US" +"624583968","624583975","NL" +"624583976","624584015","US" +"624584016","624584023","NL" +"624584024","624584059","US" +"624584060","624584063","IN" +"624584064","624584071","DK" +"624584072","624584079","IT" +"624584080","624584087","SA" +"624584088","624584095","RO" +"624584096","624584111","US" +"624584112","624584123","MA" +"624584124","624584127","TR" +"624584128","624584135","RU" +"624584136","624584143","ES" +"624584144","624584151","US" +"624584152","624584155","EG" +"624584156","624584159","TR" +"624584160","624584167","IN" +"624584168","624584175","IL" +"624584176","624584191","US" +"624584192","624584192","NL" +"624584193","624584193","AU" +"624584194","624584195","US" +"624584196","624584199","TR" +"624584200","624584207","US" +"624584208","624584215","GB" +"624584216","624584223","BR" +"624584224","624584295","US" +"624584296","624584303","DK" +"624584304","624584327","US" +"624584328","624584335","GB" +"624584336","624584367","US" +"624584368","624584371","IT" +"624584372","624584375","HK" +"624584376","624584383","US" +"624584384","624584391","CA" +"624584392","624584399","US" +"624584400","624584407","IL" +"624584408","624584431","DK" +"624584432","624584439","RO" +"624584440","624584455","US" +"624584456","624584463","ES" +"624584464","624584471","EG" +"624584472","624584487","US" +"624584488","624584495","SA" +"624584496","624584503","CA" +"624584504","624584511","GB" +"624584512","624584543","US" +"624584544","624584575","CY" +"624584576","624584671","US" +"624584672","624584679","DE" +"624584680","624584683","SE" +"624584684","624584687","US" +"624584688","624584695","NL" +"624584696","624584699","GB" +"624584700","624584719","US" +"624584720","624584731","NL" +"624584732","624584751","US" +"624584752","624584759","TR" +"624584760","624584767","NL" +"624584768","624584783","US" +"624584784","624584791","IL" +"624584792","624584799","US" +"624584800","624584831","GB" +"624584832","624584839","LB" +"624584840","624584843","TR" +"624584844","624584855","US" +"624584856","624584863","DK" +"624584864","624584871","US" +"624584872","624584879","CY" +"624584880","624584887","US" +"624584888","624584895","ES" +"624584896","624584903","US" +"624584904","624584911","GB" +"624584912","624584919","NO" +"624584920","624584927","US" +"624584928","624584935","NL" +"624584936","624584943","US" +"624584944","624584951","GB" +"624584952","624584959","IT" +"624584960","624584991","US" +"624584992","624584999","GB" +"624585000","624585007","US" +"624585008","624585023","TR" +"624585024","624585039","NL" +"624585040","624585047","CH" +"624585048","624585055","DK" +"624585056","624585071","EG" +"624585072","624585119","DK" +"624585120","624585135","US" +"624585136","624585143","DK" +"624585144","624585151","US" +"624585152","624585159","DK" +"624585160","624585183","NL" +"624585184","624585199","US" +"624585200","624585215","NL" +"624585216","624585227","PL" +"624585228","624585231","CN" +"624585232","624585239","US" +"624585240","624585247","TR" +"624585248","624585271","CN" +"624585272","624585279","HK" +"624585280","624585287","BD" +"624585288","624585311","US" +"624585312","624585319","CA" +"624585320","624585323","CN" +"624585324","624585327","TW" +"624585328","624585335","BR" +"624585336","624585343","GB" +"624585344","624585347","IN" +"624585348","624585351","SA" +"624585352","624585359","RU" +"624585360","624585367","BR" +"624585368","624585375","US" +"624585376","624585407","CN" +"624585408","624585439","NL" +"624585440","624585451","CN" +"624585452","624585455","NL" +"624585456","624585487","US" +"624585488","624585495","NL" +"624585496","624585503","US" +"624585504","624585511","TR" +"624585512","624585519","BR" +"624585520","624585535","US" +"624585536","624585543","DK" +"624585544","624585559","US" +"624585560","624585567","GB" +"624585568","624585575","US" +"624585576","624585583","AU" +"624585584","624585607","US" +"624585608","624585615","SG" +"624585616","624585623","HK" +"624585624","624585631","GB" +"624585632","624585663","TR" +"624585664","624585671","DK" +"624585672","624585679","KW" +"624585680","624585695","US" +"624585696","624585711","TR" +"624585712","624585719","US" +"624585720","624585723","TR" +"624585724","624585727","US" +"624585728","624585735","PL" +"624585736","624585743","IL" +"624585744","624585751","SK" +"624585752","624585775","US" +"624585776","624585779","PL" +"624585780","624585783","US" +"624585784","624585791","IN" +"624585792","624585807","GB" +"624585808","624585815","AE" +"624585816","624585823","AU" +"624585824","624585847","US" +"624585848","624585855","RU" +"624585856","624585983","US" +"624585984","624586015","SA" +"624586016","624586031","VG" +"624586032","624586047","US" +"624586048","624586079","DE" +"624586080","624586087","TR" +"624586088","624586095","EG" +"624586096","624586103","DE" +"624586104","624586111","US" +"624586112","624586175","GB" +"624586176","624586207","US" +"624586208","624586239","LT" +"624586240","624586247","US" +"624586248","624586255","DE" +"624586256","624586263","US" +"624586264","624586265","TR" +"624586266","624586267","GB" +"624586268","624586279","US" +"624586280","624586287","NL" +"624586288","624586295","CN" +"624586296","624586303","US" +"624586304","624586311","GB" +"624586312","624586319","CA" +"624586320","624586335","US" +"624586336","624586399","TR" +"624586400","624586415","US" +"624586416","624586423","PK" +"624586424","624586427","US" +"624586428","624586431","TR" +"624586432","624586443","CA" +"624586444","624586447","HU" +"624586448","624586495","US" +"624586496","624586511","CA" +"624586512","624586591","US" +"624586592","624586607","IL" +"624586608","624586615","TR" +"624586616","624586639","US" +"624586640","624586655","NL" +"624586656","624586671","DE" +"624586672","624586687","NL" +"624586688","624586719","TR" +"624586720","624586727","US" +"624586728","624586735","IL" +"624586736","624586751","US" +"624586752","624586759","ZA" +"624586760","624586767","US" +"624586768","624586783","GB" +"624586784","624586795","US" +"624586796","624586799","NL" +"624586800","624586815","US" +"624586816","624586823","GB" +"624586824","624586831","CN" +"624586832","624586847","NL" +"624586848","624586895","SA" +"624586896","624586903","ZA" +"624586904","624586919","US" +"624586920","624586927","TR" +"624586928","624586975","US" +"624586976","624586983","TR" +"624586984","624587039","US" +"624587040","624587103","NL" +"624587104","624587135","US" +"624587136","624587151","NL" +"624587152","624587159","AU" +"624587160","624587167","PL" +"624587168","624587263","US" +"624587264","624587295","DK" +"624587296","624587359","US" +"624587360","624587391","TR" +"624587392","624587455","PA" +"624587456","624587463","PT" +"624587464","624587487","US" +"624587488","624587519","SA" +"624587520","624587623","US" +"624587624","624587631","GB" +"624587632","624587639","SA" +"624587640","624587647","US" +"624587648","624587695","NL" +"624587696","624587727","US" +"624587728","624587743","NL" +"624587744","624587751","US" +"624587752","624587759","NL" +"624587760","624587775","US" +"624587776","624587783","EG" +"624587784","624587791","IN" +"624587792","624587807","US" +"624587808","624587815","PH" +"624587816","624587823","NL" +"624587824","624587831","US" +"624587832","624587839","NL" +"624587840","624587847","CN" +"624587848","624587879","US" +"624587880","624587887","SA" +"624587888","624587891","GB" +"624587892","624587895","EG" +"624587896","624587935","US" +"624587936","624587943","GB" +"624587944","624587947","SA" +"624587948","624587951","IT" +"624587952","624587959","NL" +"624587960","624587967","US" +"624587968","624587971","IT" +"624587972","624587975","IL" +"624587976","624587983","DK" +"624587984","624587999","US" +"624588000","624588007","GB" +"624588008","624588015","DK" +"624588016","624588023","NL" +"624588024","624588031","AE" +"624588032","624588271","NL" +"624588272","624588287","US" +"624588288","624588319","NL" +"624588320","624588327","PK" +"624588328","624588335","RO" +"624588336","624588391","NL" +"624588392","624588415","US" +"624588416","624588463","NL" +"624588464","624588479","US" +"624588480","624588527","NL" +"624588528","624588543","US" +"624588544","624588551","NL" +"624588552","624588559","US" +"624588560","624588567","NL" +"624588568","624588575","ES" +"624588576","624588583","NL" +"624588584","624588587","ES" +"624588588","624588591","MA" +"624588592","624588599","BE" +"624588600","624588607","AE" +"624588608","624588623","US" +"624588624","624588631","GB" +"624588632","624588639","AE" +"624588640","624588643","IT" +"624588644","624588647","TR" +"624588648","624588655","GB" +"624588656","624588671","DK" +"624588672","624588703","CN" +"624588704","624588711","TW" +"624588712","624588719","UG" +"624588720","624588727","SA" +"624588728","624588735","US" +"624588736","624588743","IN" +"624588744","624588751","RO" +"624588752","624588759","US" +"624588760","624588767","NL" +"624588768","624588775","BA" +"624588776","624588783","CA" +"624588784","624588791","US" +"624588792","624588799","TR" +"624588800","624588887","US" +"624588888","624588891","GB" +"624588892","624588895","NL" +"624588896","624588927","US" +"624588928","624588975","NL" +"624588976","624588983","GB" +"624588984","624588991","US" +"624588992","624589007","NL" +"624589008","624589055","US" +"624589056","624589063","EG" +"624589064","624589095","US" +"624589096","624589103","IE" +"624589104","624589119","US" +"624589120","624589127","IT" +"624589128","624589135","NL" +"624589136","624589143","TR" +"624589144","624589159","US" +"624589160","624589167","SE" +"624589168","624589183","US" +"624589184","624589191","CN" +"624589192","624589199","UA" +"624589200","624589207","GB" +"624589208","624589211","DE" +"624589212","624589215","TR" +"624589216","624589223","KW" +"624589224","624589231","GB" +"624589232","624589247","US" +"624589248","624589263","IL" +"624589264","624589279","US" +"624589280","624589287","CY" +"624589288","624589295","GB" +"624589296","624589311","US" +"624589312","624589343","TR" +"624589344","624589407","EG" +"624589408","624589423","NL" +"624589424","624589439","US" +"624589440","624589471","CA" +"624589472","624589503","TR" +"624589504","624589519","US" +"624589520","624589571","NL" +"624589572","624589575","TR" +"624589576","624589703","NL" +"624589704","624589707","PL" +"624589708","624589711","SA" +"624589712","624589759","NL" +"624589760","624589767","EG" +"624589768","624589823","NL" +"624589824","624590079","US" +"624590080","624590087","IT" +"624590088","624590119","US" +"624590120","624590127","GR" +"624590128","624590151","US" +"624590152","624590159","BG" +"624590160","624590167","GB" +"624590168","624590175","MX" +"624590176","624590183","US" +"624590184","624590191","EG" +"624590192","624590199","IN" +"624590200","624590203","US" +"624590204","624590207","IL" +"624590208","624590239","LT" +"624590240","624590247","AZ" +"624590248","624590255","IL" +"624590256","624590303","US" +"624590304","624590311","GB" +"624590312","624590319","BZ" +"624590320","624590327","RU" +"624590328","624590335","CA" +"624590336","624590351","US" +"624590352","624590359","GB" +"624590360","624590363","UG" +"624590364","624590367","ES" +"624590368","624590375","AT" +"624590376","624590383","US" +"624590384","624590399","NL" +"624590400","624590407","IN" +"624590408","624590415","CN" +"624590416","624590431","HR" +"624590432","624590463","AF" +"624590464","624590471","CN" +"624590472","624590475","TR" +"624590476","624590479","US" +"624590480","624590487","BD" +"624590488","624590495","IE" +"624590496","624590503","US" +"624590504","624590511","FR" +"624590512","624590519","AU" +"624590520","624590527","US" +"624590528","624590543","MA" +"624590544","624590551","AT" +"624590552","624590559","ES" +"624590560","624590567","US" +"624590568","624590575","EG" +"624590576","624590583","CA" +"624590584","624590591","GB" +"624590592","624590623","US" +"624590624","624590655","GB" +"624590656","624590703","NL" +"624590704","624590751","US" +"624590752","624590759","CN" +"624590760","624590767","US" +"624590768","624590775","TR" +"624590776","624590783","US" +"624590784","624590815","TR" +"624590816","624590823","US" +"624590824","624590831","BR" +"624590832","624590843","US" +"624590844","624590847","NL" +"624590848","624639999","FR" +"624640000","624640003","DE" +"624640004","624640007","GB" +"624640008","624640063","FR" +"624640064","624640067","PT" +"624640068","624640087","FR" +"624640088","624640091","GB" +"624640092","624640095","PL" +"624640096","624640111","NL" +"624640112","624640115","DE" +"624640116","624640119","IT" +"624640120","624640127","DE" +"624640128","624640135","PT" +"624640136","624640139","GB" +"624640140","624640143","FI" +"624640144","624640147","NL" +"624640148","624640159","DE" +"624640160","624640175","BE" +"624640176","624640183","GB" +"624640184","624640187","ES" +"624640188","624640191","GB" +"624640192","624640239","FR" +"624640240","624640243","CZ" +"624640244","624640247","NL" +"624640248","624640255","FR" +"624640256","624640259","GB" +"624640260","624640263","DE" +"624640264","624640275","PL" +"624640276","624640283","GB" +"624640284","624640287","PL" +"624640288","624640291","ES" +"624640292","624640295","PL" +"624640296","624640319","FR" +"624640320","624640351","GB" +"624640352","624640615","FR" +"624640616","624640619","IE" +"624640620","624640623","PT" +"624640624","624640639","FR" +"624640640","624640703","BE" +"624640704","624640727","FR" +"624640728","624640735","IT" +"624640736","624640755","GB" +"624640756","624640759","PL" +"624640760","624640763","FR" +"624640764","624640767","NL" +"624640768","624640775","IT" +"624640776","624640779","LT" +"624640780","624640783","DE" +"624640784","624640787","ES" +"624640788","624640791","IT" +"624640792","624640799","FR" +"624640800","624640803","CH" +"624640804","624640807","FR" +"624640808","624640811","DE" +"624640812","624640815","GB" +"624640816","624640823","FR" +"624640824","624640827","GB" +"624640828","624640831","DE" +"624640832","624640847","FR" +"624640848","624640851","ES" +"624640852","624640855","PT" +"624640856","624640863","DE" +"624640864","624640931","FR" +"624640932","624640935","ES" +"624640936","624640939","PL" +"624640940","624640943","DE" +"624640944","624640951","FR" +"624640952","624640959","PT" +"624640960","624640975","FR" +"624640976","624640991","ES" +"624640992","624640999","GB" +"624641000","624641007","FR" +"624641008","624641023","IT" +"624641024","624641055","GB" +"624641056","624641063","FR" +"624641064","624641067","NL" +"624641068","624641071","PL" +"624641072","624641087","FR" +"624641088","624641091","NL" +"624641092","624641095","FR" +"624641096","624641099","CH" +"624641100","624641103","FR" +"624641104","624641107","PL" +"624641108","624641119","FR" +"624641120","624641127","CH" +"624641128","624641131","PL" +"624641132","624641135","LT" +"624641136","624641183","FR" +"624641184","624641187","CZ" +"624641188","624641191","ES" +"624641192","624641195","PL" +"624641196","624641207","FR" +"624641208","624641211","GB" +"624641212","624641215","FR" +"624641216","624641223","IE" +"624641224","624641247","GB" +"624641248","624641255","IE" +"624641256","624641263","DE" +"624641264","624641295","FR" +"624641296","624641299","CZ" +"624641300","624641303","LT" +"624641304","624641311","PT" +"624641312","624641315","FR" +"624641316","624641319","ES" +"624641320","624641323","PT" +"624641324","624641327","PL" +"624641328","624641351","IE" +"624641352","624641355","FR" +"624641356","624641359","PT" +"624641360","624641367","FR" +"624641368","624641371","BE" +"624641372","624641375","IT" +"624641376","624641407","PL" +"624641408","624641535","FR" +"624641536","624641983","NL" +"624641984","624642015","ES" +"624642016","624642031","PL" +"624642032","624642035","DE" +"624642036","624642039","ES" +"624642040","624642047","FR" +"624642048","624642055","PL" +"624642056","624642063","GB" +"624642064","624642095","IE" +"624642096","624642111","PL" +"624642112","624642127","CH" +"624642128","624642135","GB" +"624642136","624642139","PL" +"624642140","624642143","FR" +"624642144","624642159","CH" +"624642160","624642175","FR" +"624642176","624642207","NL" +"624642208","624642223","IT" +"624642224","624642231","GB" +"624642232","624642251","FR" +"624642252","624642255","BE" +"624642256","624642271","PL" +"624642272","624642283","FR" +"624642284","624642287","GB" +"624642288","624642291","FR" +"624642292","624642299","PL" +"624642300","624642303","ES" +"624642304","624642335","PT" +"624642336","624642367","FR" +"624642368","624642375","ES" +"624642376","624642379","FR" +"624642380","624642383","GB" +"624642384","624642407","FR" +"624642408","624642411","PL" +"624642412","624642415","FR" +"624642416","624642423","DE" +"624642424","624642431","FR" +"624642432","624642447","BE" +"624642448","624642463","GB" +"624642464","624642479","FR" +"624642480","624642483","GB" +"624642484","624642487","FR" +"624642488","624642491","CZ" +"624642492","624642495","PL" +"624642496","624642503","FR" +"624642504","624642507","PT" +"624642508","624642511","ES" +"624642512","624642527","FR" +"624642528","624642559","IT" +"624642560","624642575","FR" +"624642576","624642591","GB" +"624642592","624642623","FR" +"624642624","624642627","IT" +"624642628","624642631","DE" +"624642632","624642639","IT" +"624642640","624642651","PL" +"624642652","624642655","IE" +"624642656","624642659","FR" +"624642660","624642663","PL" +"624642664","624642671","FI" +"624642672","624642679","PL" +"624642680","624642683","GB" +"624642684","624642687","DE" +"624642688","624642691","FR" +"624642692","624642695","ES" +"624642696","624642699","FR" +"624642700","624642703","DE" +"624642704","624642719","IE" +"624642720","624642723","PL" +"624642724","624642727","NL" +"624642728","624642735","FR" +"624642736","624642739","DE" +"624642740","624642743","FR" +"624642744","624642747","FI" +"624642748","624642787","FR" +"624642788","624642791","ES" +"624642792","624642795","NL" +"624642796","624642799","CZ" +"624642800","624642815","FR" +"624642816","624642831","PT" +"624642832","624642835","FR" +"624642836","624642839","GB" +"624642840","624642843","FR" +"624642844","624642855","GB" +"624642856","624642859","DE" +"624642860","624642863","PL" +"624642864","624642879","GB" +"624642880","624642887","FR" +"624642888","624642891","LT" +"624642892","624642895","PL" +"624642896","624642943","FR" +"624642944","624642947","IT" +"624642948","624642951","ES" +"624642952","624642967","FR" +"624642968","624642975","DE" +"624642976","624643007","FR" +"624643008","624643011","PL" +"624643012","624643015","GB" +"624643016","624643019","IE" +"624643020","624643023","FR" +"624643024","624643031","IT" +"624643032","624643035","PL" +"624643036","624643039","DE" +"624643040","624643043","GB" +"624643044","624643047","DE" +"624643048","624643051","NL" +"624643052","624643055","PT" +"624643056","624643063","IT" +"624643064","624643067","NL" +"624643068","624643071","PL" +"624643072","624643087","FR" +"624643088","624643091","IT" +"624643092","624643095","FI" +"624643096","624643103","IE" +"624643104","624643107","FR" +"624643108","624643111","GB" +"624643112","624643115","FR" +"624643116","624643119","PT" +"624643120","624643183","FR" +"624643184","624643191","ES" +"624643192","624643199","FR" +"624643200","624643211","PL" +"624643212","624643215","CH" +"624643216","624643231","FR" +"624643232","624643235","IT" +"624643236","624643239","PL" +"624643240","624643243","FR" +"624643244","624643247","ES" +"624643248","624643255","FR" +"624643256","624643263","PL" +"624643264","624643311","FR" +"624643312","624643315","NL" +"624643316","624643319","IE" +"624643320","624643327","IT" +"624643328","624643343","FR" +"624643344","624643347","DE" +"624643348","624643359","FR" +"624643360","624643371","LT" +"624643372","624643375","FR" +"624643376","624643383","ES" +"624643384","624643391","FR" +"624643392","624643423","GB" +"624643424","624643455","ES" +"624643456","624643459","NL" +"624643460","624643463","IE" +"624643464","624643487","FR" +"624643488","624643503","PL" +"624643504","624643507","NL" +"624643508","624643511","FR" +"624643512","624643519","IE" +"624643520","624643583","DE" +"624643584","624643619","FR" +"624643620","624643623","DE" +"624643624","624643627","BE" +"624643628","624643631","PL" +"624643632","624643647","PT" +"624643648","624643711","FR" +"624643712","624643727","PL" +"624643728","624643731","GB" +"624643732","624643735","IE" +"624643736","624643775","FR" +"624643776","624643779","NL" +"624643780","624643783","PL" +"624643784","624643787","FR" +"624643788","624643791","ES" +"624643792","624643807","DE" +"624643808","624643811","CH" +"624643812","624643839","FR" +"624643840","624644095","DE" +"624644096","624644111","PL" +"624644112","624644115","BE" +"624644116","624644119","GB" +"624644120","624644123","DE" +"624644124","624644127","FR" +"624644128","624644131","IT" +"624644132","624644135","ES" +"624644136","624644163","FR" +"624644164","624644167","BE" +"624644168","624644175","FR" +"624644176","624644191","PL" +"624644192","624644195","GB" +"624644196","624644199","IE" +"624644200","624644203","IT" +"624644204","624644207","PT" +"624644208","624644223","BE" +"624644224","624644239","IE" +"624644240","624644247","GB" +"624644248","624644255","NL" +"624644256","624644271","CH" +"624644272","624644275","FR" +"624644276","624644287","ES" +"624644288","624644295","PL" +"624644296","624644299","FR" +"624644300","624644303","NL" +"624644304","624644307","IE" +"624644308","624644311","FR" +"624644312","624644319","ES" +"624644320","624644607","FR" +"624644608","624644615","IE" +"624644616","624644619","IT" +"624644620","624644623","DE" +"624644624","624644631","PL" +"624644632","624644671","FR" +"624644672","624644675","DE" +"624644676","624644679","FR" +"624644680","624644683","DE" +"624644684","624644735","FR" +"624644736","624644767","PL" +"624644768","624644771","FR" +"624644772","624644775","CH" +"624644776","624644783","BE" +"624644784","624644799","IE" +"624644800","624644815","FR" +"624644816","624644819","IE" +"624644820","624644823","FR" +"624644824","624644831","PT" +"624644832","624644839","PL" +"624644840","624644843","IT" +"624644844","624644847","PL" +"624644848","624644851","ES" +"624644852","624644855","IT" +"624644856","624644859","PL" +"624644860","624644879","IE" +"624644880","624644895","ES" +"624644896","624644903","IE" +"624644904","624644911","NL" +"624644912","624644915","FR" +"624644916","624644919","ES" +"624644920","624644923","FR" +"624644924","624644927","PL" +"624644928","624644931","FR" +"624644932","624644935","CZ" +"624644936","624644939","FR" +"624644940","624644943","ES" +"624644944","624644955","FR" +"624644956","624644959","PL" +"624644960","624644991","NL" +"624644992","624645007","ES" +"624645008","624645011","FR" +"624645012","624645015","GB" +"624645016","624645023","BE" +"624645024","624645055","PL" +"624645056","624645119","FR" +"624645120","624645375","FI" +"624645376","624645423","FR" +"624645424","624645439","GB" +"624645440","624645503","FR" +"624645504","624645535","FI" +"624645536","624645539","PT" +"624645540","624645543","DE" +"624645544","624645547","CZ" +"624645548","624645551","GB" +"624645552","624645567","FR" +"624645568","624645579","GB" +"624645580","624645583","PT" +"624645584","624645591","GB" +"624645592","624645607","FR" +"624645608","624645615","CH" +"624645616","624645619","BE" +"624645620","624645627","FR" +"624645628","624645631","PL" +"624645632","624645887","FR" +"624645888","624645891","PL" +"624645892","624645895","FR" +"624645896","624645903","ES" +"624645904","624645907","GB" +"624645908","624645911","IE" +"624645912","624645919","GB" +"624645920","624646047","PT" +"624646048","624646111","FR" +"624646112","624646175","PL" +"624646176","624646223","FR" +"624646224","624646227","PL" +"624646228","624646231","IT" +"624646232","624646235","CZ" +"624646236","624646239","GB" +"624646240","624646255","LT" +"624646256","624646259","DE" +"624646260","624646263","GB" +"624646264","624646267","FR" +"624646268","624646271","DE" +"624646272","624646283","FR" +"624646284","624646287","PL" +"624646288","624646303","PT" +"624646304","624646311","PL" +"624646312","624646315","GB" +"624646316","624646319","ES" +"624646320","624646323","DE" +"624646324","624646327","FR" +"624646328","624646331","PL" +"624646332","624646335","CH" +"624646336","624646339","FR" +"624646340","624646343","LT" +"624646344","624646347","IT" +"624646348","624646351","IE" +"624646352","624646367","PT" +"624646368","624646527","PL" +"624646528","624646535","IE" +"624646536","624646539","PL" +"624646540","624646543","FR" +"624646544","624646559","DE" +"624646560","624646575","FR" +"624646576","624646579","ES" +"624646580","624646583","NL" +"624646584","624646591","FI" +"624646592","624646627","FR" +"624646628","624646631","DE" +"624646632","624646635","PT" +"624646636","624646639","IE" +"624646640","624646643","PL" +"624646644","624646647","PT" +"624646648","624646651","IT" +"624646652","624646655","PL" +"624646656","624646659","ES" +"624646660","624646663","GB" +"624646664","624646667","FR" +"624646668","624646671","IT" +"624646672","624646687","GB" +"624646688","624646703","NL" +"624646704","624646707","FR" +"624646708","624646715","PL" +"624646716","624646719","FR" +"624646720","624646735","ES" +"624646736","624646751","DE" +"624646752","624646759","FR" +"624646760","624646767","GB" +"624646768","624646787","DE" +"624646788","624646791","PL" +"624646792","624646795","IE" +"624646796","624646799","NL" +"624646800","624646815","GB" +"624646816","624646831","IT" +"624646832","624646835","BE" +"624646836","624646839","IE" +"624646840","624646843","CZ" +"624646844","624646847","FI" +"624646848","624646911","DE" +"624646912","624646915","IE" +"624646916","624646919","LT" +"624646920","624646923","PL" +"624646924","624646927","PT" +"624646928","624646931","CH" +"624646932","624646935","PL" +"624646936","624647087","FR" +"624647088","624647095","DE" +"624647096","624647107","GB" +"624647108","624647111","PL" +"624647112","624647119","ES" +"624647120","624647127","GB" +"624647128","624647135","FR" +"624647136","624647143","GB" +"624647144","624647171","FR" +"624647172","624647175","ES" +"624647176","624647183","GB" +"624647184","624647199","PT" +"624647200","624647263","PL" +"624647264","624647295","PT" +"624647296","624647327","NL" +"624647328","624647359","GB" +"624647360","624647423","CH" +"624647424","624647471","FR" +"624647472","624647479","PL" +"624647480","624647483","PT" +"624647484","624647491","DE" +"624647492","624647495","PL" +"624647496","624647499","FR" +"624647500","624647503","DE" +"624647504","624647519","FR" +"624647520","624647527","GB" +"624647528","624647531","FR" +"624647532","624647535","PL" +"624647536","624647551","FR" +"624647552","624647583","GB" +"624647584","624647615","FR" +"624647616","624647623","PL" +"624647624","624647631","GB" +"624647632","624647647","FR" +"624647648","624647663","GB" +"624647664","624647667","DE" +"624647668","624647679","FR" +"624647680","624647935","DE" +"624647936","624647999","PL" +"624648000","624648063","IT" +"624648064","624648071","GB" +"624648072","624648075","FR" +"624648076","624648079","GB" +"624648080","624648095","PT" +"624648096","624648099","FR" +"624648100","624648103","GB" +"624648104","624648127","FR" +"624648128","624648135","GB" +"624648136","624648159","FR" +"624648160","624648191","PT" +"624648192","624656703","FR" +"624656704","624656711","GB" +"624656712","624656723","FR" +"624656724","624656727","FI" +"624656728","624656731","PT" +"624656732","624656735","PL" +"624656736","624656739","DE" +"624656740","624656743","ES" +"624656744","624656751","FR" +"624656752","624656755","GB" +"624656756","624656759","PL" +"624656760","624656763","IT" +"624656764","624656767","GB" +"624656768","624656831","FR" +"624656832","624656895","ES" +"624656896","624656911","FR" +"624656912","624656927","NL" +"624656928","624656959","FI" +"624656960","624656991","PL" +"624656992","624656999","DE" +"624657000","624657003","FR" +"624657004","624657007","BE" +"624657008","624657015","ES" +"624657016","624657019","GB" +"624657020","624657023","PL" +"624657024","624657055","CH" +"624657056","624657063","FR" +"624657064","624657067","IE" +"624657068","624657071","FR" +"624657072","624657087","GB" +"624657088","624657135","PL" +"624657136","624657139","IT" +"624657140","624657147","FR" +"624657148","624657155","PL" +"624657156","624657159","CH" +"624657160","624657167","IE" +"624657168","624657199","PL" +"624657200","624657215","DE" +"624657216","624657263","PL" +"624657264","624657279","BE" +"624657280","624657295","PL" +"624657296","624657299","DE" +"624657300","624657303","PL" +"624657304","624657311","GB" +"624657312","624657315","PL" +"624657316","624657319","DE" +"624657320","624657323","NL" +"624657324","624657327","DE" +"624657328","624657335","ES" +"624657336","624657359","FR" +"624657360","624657363","GB" +"624657364","624657367","PL" +"624657368","624657375","IE" +"624657376","624657379","PL" +"624657380","624657383","FR" +"624657384","624657387","DE" +"624657388","624657407","FR" +"624657408","624657411","IT" +"624657412","624657415","PL" +"624657416","624657423","ES" +"624657424","624657427","BE" +"624657428","624657431","FR" +"624657432","624657435","PL" +"624657436","624657439","FR" +"624657440","624657471","GB" +"624657472","624657475","DE" +"624657476","624657479","ES" +"624657480","624657491","FR" +"624657492","624657495","BE" +"624657496","624657503","GB" +"624657504","624657535","BE" +"624657536","624657567","CZ" +"624657568","624657583","FR" +"624657584","624657591","GB" +"624657592","624657599","FR" +"624657600","624657603","BE" +"624657604","624657607","ES" +"624657608","624657611","LT" +"624657612","624657615","BE" +"624657616","624657631","GB" +"624657632","624657643","FR" +"624657644","624657651","PL" +"624657652","624657655","ES" +"624657656","624657663","GB" +"624657664","624657667","PT" +"624657668","624657671","PL" +"624657672","624657675","NL" +"624657676","624657679","ES" +"624657680","624657695","PL" +"624657696","624657699","FI" +"624657700","624657703","PT" +"624657704","624657707","FR" +"624657708","624657711","DE" +"624657712","624657715","IE" +"624657716","624657719","PT" +"624657720","624657723","PL" +"624657724","624657727","NL" +"624657728","624657735","GB" +"624657736","624657743","NL" +"624657744","624657759","FR" +"624657760","624657767","NL" +"624657768","624657771","ES" +"624657772","624657775","DE" +"624657776","624657779","BE" +"624657780","624657783","GB" +"624657784","624657787","ES" +"624657788","624657803","FR" +"624657804","624657807","PT" +"624657808","624657815","FR" +"624657816","624657819","PL" +"624657820","624657823","GB" +"624657824","624657827","PL" +"624657828","624657831","PT" +"624657832","624657839","ES" +"624657840","624657855","NL" +"624657856","624657871","PL" +"624657872","624657875","DE" +"624657876","624657879","PL" +"624657880","624657883","CH" +"624657884","624657887","FR" +"624657888","624657919","PL" +"624657920","624657967","FR" +"624657968","624657975","IE" +"624657976","624657979","GB" +"624657980","624657983","PL" +"624657984","624658007","FR" +"624658008","624658011","PL" +"624658012","624658015","FR" +"624658016","624658031","CH" +"624658032","624658047","GB" +"624658048","624658079","ES" +"624658080","624658087","IE" +"624658088","624658091","DE" +"624658092","624658095","CH" +"624658096","624658111","IT" +"624658112","624658175","FR" +"624658176","624658179","IE" +"624658180","624658183","PL" +"624658184","624658191","ES" +"624658192","624658383","FR" +"624658384","624658387","DE" +"624658388","624658391","FR" +"624658392","624658399","PL" +"624658400","624658527","FR" +"624658528","624658535","GB" +"624658536","624658539","ES" +"624658540","624658543","IE" +"624658544","624658631","FR" +"624658632","624658635","DE" +"624658636","624658659","PL" +"624658660","624658663","FR" +"624658664","624658671","GB" +"624658672","624658675","PL" +"624658676","624658679","FR" +"624658680","624658687","NL" +"624658688","624658719","DE" +"624658720","624658783","FR" +"624658784","624658787","ES" +"624658788","624658791","PT" +"624658792","624658795","DE" +"624658796","624658799","PL" +"624658800","624658807","PT" +"624658808","624658811","FR" +"624658812","624658831","PL" +"624658832","624658835","CH" +"624658836","624658839","NL" +"624658840","624658843","PL" +"624658844","624658847","GB" +"624658848","624658855","PL" +"624658856","624658863","FR" +"624658864","624658879","ES" +"624658880","624658911","NL" +"624658912","624658927","FR" +"624658928","624658943","SN" +"624658944","624658947","ES" +"624658948","624658951","PT" +"624658952","624658959","IE" +"624658960","624658963","ES" +"624658964","624658967","IT" +"624658968","624658971","DE" +"624658972","624658975","FR" +"624658976","624658979","IT" +"624658980","624658983","NL" +"624658984","624658987","BE" +"624658988","624658991","FR" +"624658992","624658995","GB" +"624658996","624658999","IT" +"624659000","624659003","IE" +"624659004","624659023","FR" +"624659024","624659031","ES" +"624659032","624659039","PL" +"624659040","624659071","FR" +"624659072","624659135","GB" +"624659136","624659279","FR" +"624659280","624659295","GB" +"624659296","624659299","NL" +"624659300","624659303","CZ" +"624659304","624659307","FR" +"624659308","624659311","CZ" +"624659312","624659315","PL" +"624659316","624659319","GB" +"624659320","624659327","FR" +"624659328","624659359","GB" +"624659360","624659395","IT" +"624659396","624659407","FR" +"624659408","624659415","PL" +"624659416","624659427","FR" +"624659428","624659431","CZ" +"624659432","624659439","FI" +"624659440","624659447","FR" +"624659448","624659455","DE" +"624659456","624659519","FR" +"624659520","624659551","IT" +"624659552","624659583","PL" +"624659584","624659599","GB" +"624659600","624659607","DE" +"624659608","624659611","CZ" +"624659612","624659695","FR" +"624659696","624659699","PL" +"624659700","624659703","CH" +"624659704","624659787","FR" +"624659788","624659791","NL" +"624659792","624659799","FR" +"624659800","624659807","PT" +"624659808","624659811","FR" +"624659812","624659815","PL" +"624659816","624659831","FR" +"624659832","624659839","FI" +"624659840","624659935","FR" +"624659936","624659951","BE" +"624659952","624659959","FR" +"624659960","624659967","PL" +"624659968","624659971","CZ" +"624659972","624659975","FI" +"624659976","624659995","FR" +"624659996","624659999","PL" +"624660000","624660015","FR" +"624660016","624660031","CH" +"624660032","624660095","FR" +"624660096","624660111","GB" +"624660112","624660127","ES" +"624660128","624660131","FR" +"624660132","624660135","IT" +"624660136","624660139","ES" +"624660140","624660143","GB" +"624660144","624660151","ES" +"624660152","624660155","BE" +"624660156","624660159","GB" +"624660160","624660167","FR" +"624660168","624660171","IE" +"624660172","624660191","FR" +"624660192","624660195","IT" +"624660196","624660199","PL" +"624660200","624660479","FR" +"624660480","624660495","ES" +"624660496","624660499","FR" +"624660500","624660503","PL" +"624660504","624660511","NL" +"624660512","624660543","CH" +"624660544","624660547","GB" +"624660548","624660551","FR" +"624660552","624660555","PL" +"624660556","624660559","FR" +"624660560","624660567","GB" +"624660568","624660575","ES" +"624660576","624660607","FR" +"624660608","624660671","CH" +"624660672","624660703","FR" +"624660704","624660719","IT" +"624660720","624660723","GB" +"624660724","624660727","PL" +"624660728","624660735","ES" +"624660736","624660799","GB" +"624660800","624660803","FR" +"624660804","624660807","NL" +"624660808","624660811","ES" +"624660812","624660827","FR" +"624660828","624660831","BE" +"624660832","624660839","ES" +"624660840","624660843","GB" +"624660844","624660847","ES" +"624660848","624660855","GB" +"624660856","624660859","NL" +"624660860","624660863","BE" +"624660864","624660879","FR" +"624660880","624660887","NL" +"624660888","624660891","DE" +"624660892","624660895","CH" +"624660896","624660911","FR" +"624660912","624660915","PL" +"624660916","624660919","FR" +"624660920","624660923","PL" +"624660924","624660991","GB" +"624660992","624661119","PL" +"624661120","624661159","FR" +"624661160","624661167","IT" +"624661168","624661175","FR" +"624661176","624661247","ES" +"624661248","624661251","FR" +"624661252","624661255","ES" +"624661256","624661259","LT" +"624661260","624661279","FR" +"624661280","624661283","ES" +"624661284","624661295","FR" +"624661296","624661343","DE" +"624661344","624661503","FR" +"624661504","624661759","DE" +"624661760","624661767","FR" +"624661768","624661771","IT" +"624661772","624661775","FI" +"624661776","624661779","FR" +"624661780","624661783","DE" +"624661784","624661823","FR" +"624661824","624661827","IT" +"624661828","624661831","PT" +"624661832","624661839","FR" +"624661840","624661855","PL" +"624661856","624661863","FR" +"624661864","624661871","DE" +"624661872","624661875","PL" +"624661876","624661879","CZ" +"624661880","624661903","FR" +"624661904","624661907","GB" +"624661908","624661915","FR" +"624661916","624661919","BE" +"624661920","624661935","ES" +"624661936","624661951","FR" +"624661952","624661955","PT" +"624661956","624661959","PL" +"624661960","624661967","FR" +"624661968","624661975","DE" +"624661976","624662015","FR" +"624662016","624662047","NL" +"624662048","624662079","BE" +"624662080","624662111","DE" +"624662112","624662227","FR" +"624662228","624662231","BE" +"624662232","624662239","ES" +"624662240","624662243","FR" +"624662244","624662251","PL" +"624662252","624662271","FR" +"624662272","624662315","GB" +"624662316","624662319","PL" +"624662320","624662327","FR" +"624662328","624662331","PT" +"624662332","624662399","FR" +"624662400","624662431","PT" +"624662432","624662471","FR" +"624662472","624662475","DE" +"624662476","624662479","FR" +"624662480","624662527","IE" +"624662528","624662543","CH" +"624662544","624662591","IE" +"624662592","624662631","FR" +"624662632","624662635","DE" +"624662636","624662639","NL" +"624662640","624662647","PL" +"624662648","624662651","FR" +"624662652","624662655","ES" +"624662656","624662687","FR" +"624662688","624662691","PT" +"624662692","624662695","FR" +"624662696","624662699","FI" +"624662700","624662703","FR" +"624662704","624662719","CZ" +"624662720","624662735","BE" +"624662736","624662739","FR" +"624662740","624662751","LT" +"624662752","624662755","GB" +"624662756","624662759","FR" +"624662760","624662763","IE" +"624662764","624662767","FR" +"624662768","624662783","CH" +"624662784","624662799","PL" +"624662800","624662807","FR" +"624662808","624662811","PT" +"624662812","624662815","IT" +"624662816","624662847","ES" +"624662848","624662895","FR" +"624662896","624662911","ES" +"624662912","624663039","IE" +"624663040","624663407","GB" +"624663408","624663423","FI" +"624663424","624663455","PL" +"624663456","624663487","GB" +"624663488","624663519","NL" +"624663520","624663551","FR" +"624663552","624663583","GB" +"624663584","624663615","FR" +"624663616","624663647","NL" +"624663648","624663663","CZ" +"624663664","624663667","FR" +"624663668","624663671","GB" +"624663672","624663679","IT" +"624663680","624663683","GB" +"624663684","624663687","PL" +"624663688","624663695","GB" +"624663696","624663711","FR" +"624663712","624663743","GB" +"624663744","624663847","FR" +"624663848","624663851","GB" +"624663852","624663855","IT" +"624663856","624663863","ES" +"624663864","624663867","PT" +"624663868","624663871","PL" +"624663872","624663879","FR" +"624663880","624663883","CH" +"624663884","624663887","NL" +"624663888","624663891","BE" +"624663892","624663895","PL" +"624663896","624663903","GB" +"624663904","624663919","FR" +"624663920","624663935","ES" +"624663936","624663951","FI" +"624663952","624663967","FR" +"624663968","624663971","DE" +"624663972","624663975","PL" +"624663976","624663983","GB" +"624663984","624664003","FR" +"624664004","624664007","CH" +"624664008","624664011","FR" +"624664012","624664031","PL" +"624664032","624664039","GB" +"624664040","624664047","DE" +"624664048","624664063","IE" +"624664064","624664067","GB" +"624664068","624664071","ES" +"624664072","624664079","GB" +"624664080","624664111","FR" +"624664112","624664115","PL" +"624664116","624664119","FI" +"624664120","624664123","ES" +"624664124","624664475","FR" +"624664476","624664479","IE" +"624664480","624664483","PL" +"624664484","624664495","FR" +"624664496","624664511","ES" +"624664512","624664527","IE" +"624664528","624664531","PT" +"624664532","624664535","FR" +"624664536","624664539","PL" +"624664540","624664543","IT" +"624664544","624664575","DE" +"624664576","624664591","GB" +"624664592","624664599","FR" +"624664600","624664603","GB" +"624664604","624664607","IE" +"624664608","624664611","CH" +"624664612","624664615","FR" +"624664616","624664619","GB" +"624664620","624664623","FR" +"624664624","624664627","ES" +"624664628","624664631","FR" +"624664632","624664635","NL" +"624664636","624664639","ES" +"624664640","624664655","FR" +"624664656","624664659","IE" +"624664660","624664663","ES" +"624664664","624664667","FR" +"624664668","624664671","PT" +"624664672","624664703","IE" +"624664704","624664767","IT" +"624664768","624664775","GB" +"624664776","624664783","BE" +"624664784","624664795","IT" +"624664796","624664799","FR" +"624664800","624664807","DE" +"624664808","624664811","FR" +"624664812","624664815","PL" +"624664816","624664831","PT" +"624664832","624664863","IE" +"624664864","624664895","FR" +"624664896","624664927","NL" +"624664928","624664959","DE" +"624664960","624664991","BE" +"624664992","624665087","FR" +"624665088","624665135","PL" +"624665136","624665151","PT" +"624665152","624665159","DE" +"624665160","624665167","CZ" +"624665168","624665175","CH" +"624665176","624665183","BE" +"624665184","624665187","FR" +"624665188","624665191","PL" +"624665192","624665199","GB" +"624665200","624665207","PL" +"624665208","624665211","FR" +"624665212","624665215","IT" +"624665216","624665231","FR" +"624665232","624665235","PL" +"624665236","624665247","FR" +"624665248","624665263","PT" +"624665264","624665271","IT" +"624665272","624665275","CZ" +"624665276","624665279","FR" +"624665280","624665283","DE" +"624665284","624665287","IT" +"624665288","624665295","NL" +"624665296","624665303","GB" +"624665304","624665475","FR" +"624665476","624665479","PL" +"624665480","624665495","FR" +"624665496","624665499","PL" +"624665500","624665535","FR" +"624665536","624665555","PL" +"624665556","624665559","FR" +"624665560","624665567","IE" +"624665568","624665587","FR" +"624665588","624665591","ES" +"624665592","624665595","FR" +"624665596","624665599","PL" +"624665600","624665607","FR" +"624665608","624665611","PL" +"624665612","624665615","ES" +"624665616","624665631","FR" +"624665632","624665647","PL" +"624665648","624665663","FR" +"624665664","624665695","PT" +"624665696","624665711","FR" +"624665712","624665727","GB" +"624665728","624665759","PT" +"624665760","624665767","FR" +"624665768","624665775","NL" +"624665776","624665779","PL" +"624665780","624665783","FI" +"624665784","624665787","FR" +"624665788","624665791","ES" +"624665792","624665823","FR" +"624665824","624665831","GB" +"624665832","624665839","DE" +"624665840","624665851","ES" +"624665852","624665855","PL" +"624665856","624665859","FR" +"624665860","624665863","IT" +"624665864","624665871","FR" +"624665872","624666111","IE" +"624666112","624666367","FR" +"624666368","624666371","PL" +"624666372","624666375","GB" +"624666376","624666379","ES" +"624666380","624666383","PL" +"624666384","624666391","FR" +"624666392","624666399","GB" +"624666400","624666431","BE" +"624666432","624666495","GB" +"624666496","624666623","FR" +"624666624","624666655","CH" +"624666656","624666667","PL" +"624666668","624666671","FR" +"624666672","624666687","GB" +"624666688","624666691","FR" +"624666692","624666695","ES" +"624666696","624666699","PT" +"624666700","624666703","CH" +"624666704","624666719","FI" +"624666720","624666727","DE" +"624666728","624666731","FR" +"624666732","624666735","ES" +"624666736","624666739","DE" +"624666740","624666743","BE" +"624666744","624666755","PL" +"624666756","624666759","IT" +"624666760","624666767","DE" +"624666768","624666783","PT" +"624666784","624666791","FR" +"624666792","624666795","ES" +"624666796","624666799","GB" +"624666800","624666879","FR" +"624666880","624666883","ES" +"624666884","624666887","FR" +"624666888","624666895","BE" +"624666896","624666899","GB" +"624666900","624666903","NL" +"624666904","624666907","ES" +"624666908","624666911","IT" +"624666912","624666919","PT" +"624666920","624666923","GB" +"624666924","624666943","FR" +"624666944","624666959","GB" +"624666960","624666975","PL" +"624666976","624666991","FR" +"624666992","624666995","PL" +"624666996","624666999","FR" +"624667000","624667007","PL" +"624667008","624667039","BE" +"624667040","624667075","FR" +"624667076","624667079","PL" +"624667080","624667083","IT" +"624667084","624667087","PL" +"624667088","624667103","GB" +"624667104","624667107","FR" +"624667108","624667111","DE" +"624667112","624667115","ES" +"624667116","624667199","FR" +"624667200","624667231","ES" +"624667232","624667263","IT" +"624667264","624667279","IE" +"624667280","624667395","FR" +"624667396","624667423","GB" +"624667424","624667455","CZ" +"624667456","624667519","PT" +"624667520","624667583","NL" +"624667584","624667591","PL" +"624667592","624667595","GB" +"624667596","624667603","PL" +"624667604","624667607","GB" +"624667608","624667615","FR" +"624667616","624667623","PL" +"624667624","624667631","GB" +"624667632","624667639","NL" +"624667640","624667647","PL" +"624667648","624667775","ES" +"624667776","624667827","FR" +"624667828","624667831","PL" +"624667832","624667839","BE" +"624667840","624667847","FR" +"624667848","624667851","LT" +"624667852","624667871","ES" +"624667872","624667887","IE" +"624667888","624667895","GB" +"624667896","624667899","PL" +"624667900","624667903","FR" +"624667904","624667935","PT" +"624667936","624667951","DE" +"624667952","624667967","GB" +"624667968","624667971","DE" +"624667972","624667975","FR" +"624667976","624667983","PL" +"624667984","624667991","FR" +"624667992","624667999","PL" +"624668000","624668015","IT" +"624668016","624668023","FR" +"624668024","624668027","ES" +"624668028","624668043","FR" +"624668044","624668047","PL" +"624668048","624668063","GB" +"624668064","624668067","FR" +"624668068","624668071","GB" +"624668072","624668095","PL" +"624668096","624668223","FR" +"624668224","624668255","PT" +"624668256","624668271","FR" +"624668272","624668275","BE" +"624668276","624668279","FR" +"624668280","624668287","NL" +"624668288","624668351","FR" +"624668352","624668367","GB" +"624668368","624668383","PL" +"624668384","624668415","PT" +"624668416","624668423","FR" +"624668424","624668431","PL" +"624668432","624668479","FR" +"624668480","624668511","DE" +"624668512","624668543","NL" +"624668544","624668547","CZ" +"624668548","624668551","FR" +"624668552","624668559","GB" +"624668560","624668575","FR" +"624668576","624668583","GB" +"624668584","624668607","FR" +"624668608","624668639","NL" +"624668640","624668643","PT" +"624668644","624668647","IE" +"624668648","624668655","FR" +"624668656","624668671","PL" +"624668672","624669215","NL" +"624669216","624669231","GB" +"624669232","624669247","ES" +"624669248","624669279","FR" +"624669280","624669295","PL" +"624669296","624669303","IT" +"624669304","624669311","PL" +"624669312","624669343","FR" +"624669344","624669359","LT" +"624669360","624669367","PL" +"624669368","624669371","CH" +"624669372","624669375","PL" +"624669376","624669439","FR" +"624669440","624669459","PL" +"624669460","624669463","FI" +"624669464","624669499","FR" +"624669500","624669515","PL" +"624669516","624669519","BE" +"624669520","624669579","FR" +"624669580","624669583","DE" +"624669584","624669591","PL" +"624669592","624669599","DE" +"624669600","624669623","FR" +"624669624","624669631","DE" +"624669632","624669695","FR" +"624669696","624669699","CH" +"624669700","624669703","DE" +"624669704","624669711","PL" +"624669712","624669727","GB" +"624669728","624669735","ES" +"624669736","624669743","PL" +"624669744","624669747","IT" +"624669748","624669751","FR" +"624669752","624669755","ES" +"624669756","624669791","FR" +"624669792","624669795","GB" +"624669796","624669807","IE" +"624669808","624669811","PL" +"624669812","624669815","NL" +"624669816","624669823","PL" +"624669824","624669855","FR" +"624669856","624669871","GB" +"624669872","624669879","PL" +"624669880","624669887","GB" +"624669888","624669919","FR" +"624669920","624669935","NL" +"624669936","624669939","PL" +"624669940","624669943","GB" +"624669944","624669955","FR" +"624669956","624669959","PL" +"624669960","624669963","ES" +"624669964","624669967","GB" +"624669968","624669975","PL" +"624669976","624669983","FR" +"624669984","624669987","PL" +"624669988","624669999","FR" +"624670000","624670007","IE" +"624670008","624670015","PL" +"624670016","624670079","FR" +"624670080","624670103","PL" +"624670104","624670127","FR" +"624670128","624670143","PL" +"624670144","624670147","CZ" +"624670148","624670151","PL" +"624670152","624670159","FR" +"624670160","624670167","PL" +"624670168","624670171","GB" +"624670172","624670175","ES" +"624670176","624670183","FI" +"624670184","624670191","IT" +"624670192","624670195","FR" +"624670196","624670203","ES" +"624670204","624670335","FR" +"624670336","624670343","NL" +"624670344","624670347","ES" +"624670348","624670351","NL" +"624670352","624670367","FR" +"624670368","624670383","PL" +"624670384","624670391","FR" +"624670392","624670395","CH" +"624670396","624670399","NL" +"624670400","624670403","LT" +"624670404","624670407","ES" +"624670408","624670411","FR" +"624670412","624670415","GB" +"624670416","624670431","DE" +"624670432","624670439","PL" +"624670440","624670443","FR" +"624670444","624670447","ES" +"624670448","624670463","CH" +"624670464","624670479","FR" +"624670480","624670487","GB" +"624670488","624670495","PL" +"624670496","624670591","FR" +"624670592","624670599","GB" +"624670600","624670603","FR" +"624670604","624670607","GB" +"624670608","624670615","FR" +"624670616","624670619","GB" +"624670620","624670623","FR" +"624670624","624670655","NL" +"624670656","624670671","ES" +"624670672","624670687","CZ" +"624670688","624670751","FR" +"624670752","624670767","GB" +"624670768","624670791","FR" +"624670792","624670803","GB" +"624670804","624670815","PL" +"624670816","624670847","FR" +"624670848","624670855","PL" +"624670856","624670863","FR" +"624670864","624670871","PL" +"624670872","624670879","FR" +"624670880","624670895","PT" +"624670896","624670903","CH" +"624670904","624670927","FR" +"624670928","624670935","PL" +"624670936","624670943","FR" +"624670944","624670975","BE" +"624670976","624671231","PT" +"624671232","624671239","GB" +"624671240","624671243","FR" +"624671244","624671247","PL" +"624671248","624671251","ES" +"624671252","624671255","PL" +"624671256","624671259","GB" +"624671260","624671279","FR" +"624671280","624671291","ES" +"624671292","624671359","FR" +"624671360","624671423","GB" +"624671424","624671743","FR" +"624671744","624671775","IT" +"624671776","624671807","PT" +"624671808","624671823","PL" +"624671824","624671831","IE" +"624671832","624671839","DE" +"624671840","624671855","PL" +"624671856","624671871","PT" +"624671872","624671887","CZ" +"624671888","624671895","PT" +"624671896","624671903","DE" +"624671904","624671919","PT" +"624671920","624671927","NL" +"624671928","624671935","IT" +"624671936","624671943","CZ" +"624671944","624671991","FR" +"624671992","624671999","ES" +"624672000","624672015","FR" +"624672016","624672019","GB" +"624672020","624672023","DE" +"624672024","624672067","FR" +"624672068","624672071","DE" +"624672072","624672079","PL" +"624672080","624672083","DE" +"624672084","624672127","PT" +"624672128","624672179","FR" +"624672180","624672183","ES" +"624672184","624672187","PT" +"624672188","624672191","FR" +"624672192","624672207","GB" +"624672208","624672223","PT" +"624672224","624672255","GB" +"624672256","624672523","FR" +"624672524","624672527","DE" +"624672528","624672547","FR" +"624672548","624672551","PT" +"624672552","624672555","IT" +"624672556","624672559","DE" +"624672560","624672571","FR" +"624672572","624672575","CH" +"624672576","624672607","PT" +"624672608","624672615","GB" +"624672616","624672619","PT" +"624672620","624672623","FR" +"624672624","624672639","CZ" +"624672640","624672655","NL" +"624672656","624672659","DE" +"624672660","624672663","FR" +"624672664","624672671","ES" +"624672672","624672895","FR" +"624672896","624672927","GB" +"624672928","624672943","PL" +"624672944","624672951","FR" +"624672952","624672959","ES" +"624672960","624672991","NL" +"624672992","624673279","FR" +"624673280","624673283","PL" +"624673284","624673299","FR" +"624673300","624673303","PT" +"624673304","624673307","NL" +"624673308","624673311","BE" +"624673312","624673343","FR" +"624673344","624673375","CH" +"624673376","624673407","FR" +"624673408","624673431","PL" +"624673432","624673435","PT" +"624673436","624673451","FR" +"624673452","624673455","BE" +"624673456","624673459","CH" +"624673460","624673463","FR" +"624673464","624673471","PL" +"624673472","624673487","DE" +"624673488","624673503","PL" +"624673504","624673511","ES" +"624673512","624673535","FR" +"624673536","624673791","ES" +"624673792","624673799","PL" +"624673800","624673803","IT" +"624673804","624673807","DE" +"624673808","624673823","PL" +"624673824","624673839","FR" +"624673840","624673855","PL" +"624673856","624673859","IT" +"624673860","624673863","DE" +"624673864","624673871","CZ" +"624673872","624673879","GB" +"624673880","624673887","FR" +"624673888","624673903","GB" +"624673904","624673919","ES" +"624673920","624673923","IE" +"624673924","624673927","NL" +"624673928","624673931","FR" +"624673932","624673935","IE" +"624673936","624673939","NL" +"624673940","624673943","ES" +"624673944","624673951","NL" +"624673952","624673955","DE" +"624673956","624673959","PL" +"624673960","624673963","GB" +"624673964","624673967","DE" +"624673968","624673983","FR" +"624673984","624673987","DE" +"624673988","624673991","ES" +"624673992","624673995","IT" +"624673996","624674007","NL" +"624674008","624674011","PL" +"624674012","624674015","GB" +"624674016","624674047","PT" +"624674048","624674303","ES" +"624674304","624674307","GB" +"624674308","624674311","ES" +"624674312","624674315","PT" +"624674316","624674351","FR" +"624674352","624674367","IE" +"624674368","624674383","FR" +"624674384","624674391","IT" +"624674392","624674395","LT" +"624674396","624674399","PL" +"624674400","624674403","DE" +"624674404","624674407","PT" +"624674408","624674411","DE" +"624674412","624674415","ES" +"624674416","624674447","FR" +"624674448","624674451","GB" +"624674452","624674455","ES" +"624674456","624674459","IT" +"624674460","624674463","ES" +"624674464","624674511","FR" +"624674512","624674527","NL" +"624674528","624674687","FR" +"624674688","624674703","DE" +"624674704","624674707","PL" +"624674708","624674711","DE" +"624674712","624674715","FI" +"624674716","624674719","BE" +"624674720","624674735","PL" +"624674736","624674751","DE" +"624674752","624674783","PT" +"624674784","624674847","FR" +"624674848","624674879","BE" +"624674880","624674911","NL" +"624674912","624674919","GB" +"624674920","624674927","IT" +"624674928","624674935","FR" +"624674936","624674943","IE" +"624674944","624675047","FR" +"624675048","624675055","ES" +"624675056","624675059","PL" +"624675060","624675067","FR" +"624675068","624675327","DE" +"624675328","624675375","FR" +"624675376","624675383","IT" +"624675384","624675387","PL" +"624675388","624675439","FR" +"624675440","624675447","PL" +"624675448","624675455","FR" +"624675456","624675487","PL" +"624675488","624675543","FR" +"624675544","624675547","ES" +"624675548","624675551","IT" +"624675552","624675583","PL" +"624675584","624675903","FR" +"624675904","624675919","PL" +"624675920","624675947","FR" +"624675948","624675951","PL" +"624675952","624675967","IE" +"624675968","624675999","FR" +"624676000","624676003","GB" +"624676004","624676007","DE" +"624676008","624676019","FR" +"624676020","624676023","IT" +"624676024","624676027","PT" +"624676028","624676087","FR" +"624676088","624676091","DE" +"624676092","624676143","FR" +"624676144","624676159","PL" +"624676160","624676175","PT" +"624676176","624676183","NL" +"624676184","624676191","LT" +"624676192","624676311","FR" +"624676312","624676315","PL" +"624676316","624676319","NL" +"624676320","624676327","GB" +"624676328","624676331","FR" +"624676332","624676335","DE" +"624676336","624676363","FR" +"624676364","624676367","NL" +"624676368","624676399","FR" +"624676400","624676403","GB" +"624676404","624676431","FR" +"624676432","624676435","PL" +"624676436","624676439","FR" +"624676440","624676447","NL" +"624676448","624676503","FR" +"624676504","624676507","GB" +"624676508","624676607","FR" +"624676608","624676863","PL" +"624676864","624676911","FR" +"624676912","624676919","BE" +"624676920","624676923","FR" +"624676924","624676927","ES" +"624676928","624676935","CH" +"624676936","624676939","PL" +"624676940","624676943","PT" +"624676944","624676947","PL" +"624676948","624676951","GB" +"624676952","624676959","NL" +"624676960","624676991","FR" +"624676992","624677119","IT" +"624677120","624677255","FR" +"624677256","624677259","DE" +"624677260","624677263","NL" +"624677264","624677271","CZ" +"624677272","624677279","PT" +"624677280","624677283","GB" +"624677284","624677287","ES" +"624677288","624677295","FR" +"624677296","624677311","GB" +"624677312","624677351","NL" +"624677352","624677359","FR" +"624677360","624677367","PT" +"624677368","624677375","CH" +"624677376","624677391","NL" +"624677392","624677395","PT" +"624677396","624677399","FR" +"624677400","624677403","FI" +"624677404","624677407","FR" +"624677408","624677439","GB" +"624677440","624677443","ES" +"624677444","624677447","NL" +"624677448","624677455","FR" +"624677456","624677459","BE" +"624677460","624677463","ES" +"624677464","624677467","IE" +"624677468","624677471","GB" +"624677472","624677503","FR" +"624677504","624677507","DE" +"624677508","624677535","FR" +"624677536","624677567","PT" +"624677568","624677583","FR" +"624677584","624677587","ES" +"624677588","624677599","PL" +"624677600","624677615","IT" +"624677616","624677623","PL" +"624677624","624677627","NL" +"624677628","624677631","GB" +"624677632","624677671","FR" +"624677672","624677679","DE" +"624677680","624677683","GB" +"624677684","624677687","FI" +"624677688","624677695","GB" +"624677696","624677703","FR" +"624677704","624677727","GB" +"624677728","624677735","FR" +"624677736","624677751","GB" +"624677752","624677759","FR" +"624677760","624677763","NL" +"624677764","624677767","FR" +"624677768","624677775","GB" +"624677776","624677783","DE" +"624677784","624677787","FI" +"624677788","624677791","DE" +"624677792","624677823","CH" +"624677824","624677887","FR" +"624677888","624678143","GB" +"624678144","624678183","FR" +"624678184","624678187","DE" +"624678188","624678191","FR" +"624678192","624678195","PT" +"624678196","624678199","FR" +"624678200","624678239","ES" +"624678240","624678255","PT" +"624678256","624678259","PL" +"624678260","624678279","ES" +"624678280","624678283","LT" +"624678284","624678287","FR" +"624678288","624678303","GB" +"624678304","624678319","FR" +"624678320","624678335","GB" +"624678336","624678351","FR" +"624678352","624678355","PT" +"624678356","624678359","PL" +"624678360","624678363","ES" +"624678364","624678367","FR" +"624678368","624678383","IE" +"624678384","624678387","FR" +"624678388","624678391","PT" +"624678392","624678395","ES" +"624678396","624678463","FR" +"624678464","624678479","CH" +"624678480","624678487","GB" +"624678488","624678491","PT" +"624678492","624678495","FR" +"624678496","624678527","IE" +"624678528","624678559","PT" +"624678560","624678563","BE" +"624678564","624678575","DE" +"624678576","624678591","FR" +"624678592","624678655","IT" +"624678656","624678687","FR" +"624678688","624678695","LT" +"624678696","624678703","IT" +"624678704","624678707","NL" +"624678708","624678715","FR" +"624678716","624678719","DE" +"624678720","624678723","GB" +"624678724","624678727","PL" +"624678728","624678735","IT" +"624678736","624678743","FR" +"624678744","624678747","CH" +"624678748","624678751","IT" +"624678752","624678783","NL" +"624678784","624678847","FR" +"624678848","624678855","GB" +"624678856","624678863","PL" +"624678864","624678895","PT" +"624678896","624678899","IT" +"624678900","624678903","GB" +"624678904","624678907","PT" +"624678908","624678911","FR" +"624678912","624679167","GB" +"624679168","624679175","PL" +"624679176","624679183","DE" +"624679184","624679199","PL" +"624679200","624679203","GB" +"624679204","624679207","IT" +"624679208","624679211","ES" +"624679212","624679215","IT" +"624679216","624679231","IE" +"624679232","624679299","FR" +"624679300","624679303","ES" +"624679304","624679307","PT" +"624679308","624679311","ES" +"624679312","624679679","FR" +"624679680","624679687","PL" +"624679688","624679695","NL" +"624679696","624679711","FR" +"624679712","624679743","BE" +"624679744","624679747","LT" +"624679748","624679751","FR" +"624679752","624679767","PL" +"624679768","624679771","NL" +"624679772","624679775","BE" +"624679776","624679807","NL" +"624679808","624679815","FR" +"624679816","624679819","GB" +"624679820","624679823","PL" +"624679824","624679827","FR" +"624679828","624679831","DE" +"624679832","624679839","GB" +"624679840","624679843","FR" +"624679844","624679847","BE" +"624679848","624679855","DE" +"624679856","624679859","IT" +"624679860","624679863","FR" +"624679864","624679867","ES" +"624679868","624679871","FR" +"624679872","624679903","GB" +"624679904","624679907","IT" +"624679908","624679911","FR" +"624679912","624679919","ES" +"624679920","624679923","GB" +"624679924","624679927","FR" +"624679928","624679935","GB" +"624679936","624680447","NL" +"624680448","624680703","GB" +"624680704","624680735","FR" +"624680736","624680743","PL" +"624680744","624680747","BE" +"624680748","624680751","GB" +"624680752","624680767","PL" +"624680768","624680783","CZ" +"624680784","624680799","GB" +"624680800","624680927","FR" +"624680928","624680931","CH" +"624680932","624680935","DE" +"624680936","624680939","ES" +"624680940","624680943","NL" +"624680944","624680951","FR" +"624680952","624680959","PT" +"624680960","624680991","FR" +"624680992","624681007","DE" +"624681008","624681023","FR" +"624681024","624681055","ES" +"624681056","624681071","FR" +"624681072","624681083","DE" +"624681084","624681095","FR" +"624681096","624681103","ES" +"624681104","624681111","FR" +"624681112","624681115","IT" +"624681116","624681151","FR" +"624681152","624681215","PT" +"624681216","624681247","PL" +"624681248","624681251","DE" +"624681252","624681255","IE" +"624681256","624681259","FR" +"624681260","624681263","PL" +"624681264","624681267","FR" +"624681268","624681271","DE" +"624681272","624681279","ES" +"624681280","624681295","GB" +"624681296","624681303","FR" +"624681304","624681311","DE" +"624681312","624681327","PL" +"624681328","624681335","FR" +"624681336","624681339","ES" +"624681340","624681343","FR" +"624681344","624681347","GB" +"624681348","624681359","FR" +"624681360","624681363","PL" +"624681364","624681367","CZ" +"624681368","624681375","PL" +"624681376","624681439","FR" +"624681440","624681451","GB" +"624681452","624681455","BE" +"624681456","624681459","GB" +"624681460","624681463","IT" +"624681464","624681467","PL" +"624681468","624681471","FR" +"624681472","624681727","GB" +"624681728","624681759","PL" +"624681760","624681763","PT" +"624681764","624681767","FR" +"624681768","624681775","CH" +"624681776","624681791","FR" +"624681792","624681795","ES" +"624681796","624681799","NL" +"624681800","624681803","FR" +"624681804","624681823","PL" +"624681824","624681855","CZ" +"624681856","624681919","FR" +"624681920","624681923","PT" +"624681924","624681927","IE" +"624681928","624681931","IT" +"624681932","624681967","FR" +"624681968","624681971","PL" +"624681972","624681975","BE" +"624681976","624681999","FR" +"624682000","624682003","ES" +"624682004","624682007","PL" +"624682008","624682047","FR" +"624682048","624682059","GB" +"624682060","624682063","IE" +"624682064","624682071","PT" +"624682072","624682075","GB" +"624682076","624682079","PL" +"624682080","624682083","GB" +"624682084","624682087","NL" +"624682088","624682091","PL" +"624682092","624682095","GB" +"624682096","624682103","FR" +"624682104","624682111","IE" +"624682112","624682127","PL" +"624682128","624682135","FR" +"624682136","624682143","IT" +"624682144","624682151","PT" +"624682152","624682159","FI" +"624682160","624682167","ES" +"624682168","624682175","GB" +"624682176","624682207","FR" +"624682208","624682215","BE" +"624682216","624682219","FR" +"624682220","624682223","PL" +"624682224","624682259","FR" +"624682260","624682263","IE" +"624682264","624682267","DE" +"624682268","624682271","PT" +"624682272","624682303","FR" +"624682304","624682319","BE" +"624682320","624682323","ES" +"624682324","624682335","PL" +"624682336","624682339","FR" +"624682340","624682343","GB" +"624682344","624682347","NL" +"624682348","624682351","ES" +"624682352","624682367","LT" +"624682368","624682495","FR" +"624682496","624682559","ES" +"624682560","624682639","FR" +"624682640","624682655","BE" +"624682656","624682687","ES" +"624682688","624682751","FR" +"624682752","624682767","DE" +"624682768","624682783","FR" +"624682784","624682791","NL" +"624682792","624682799","PL" +"624682800","624682879","FR" +"624682880","624682911","GB" +"624682912","624682919","IT" +"624682920","624682927","IE" +"624682928","624682943","FR" +"624682944","624682951","PL" +"624682952","624682959","IT" +"624682960","624682963","BE" +"624682964","624682967","PL" +"624682968","624682971","FR" +"624682972","624682975","PT" +"624682976","624682991","FR" +"624682992","624683007","NL" +"624683008","624683011","FR" +"624683012","624683015","PL" +"624683016","624683023","GB" +"624683024","624683027","PL" +"624683028","624683031","IT" +"624683032","624683039","GB" +"624683040","624683047","BE" +"624683048","624683051","PL" +"624683052","624683055","IT" +"624683056","624683063","ES" +"624683064","624683067","FR" +"624683068","624683071","IE" +"624683072","624683087","FR" +"624683088","624683091","GB" +"624683092","624683239","FR" +"624683240","624683243","PL" +"624683244","624683247","FR" +"624683248","624683251","PL" +"624683252","624683255","GB" +"624683256","624683295","FR" +"624683296","624683311","IT" +"624683312","624683327","FR" +"624683328","624683335","GB" +"624683336","624683339","FR" +"624683340","624683343","ES" +"624683344","624683351","IE" +"624683352","624683371","FR" +"624683372","624683375","ES" +"624683376","624683379","FR" +"624683380","624683383","IT" +"624683384","624683631","FR" +"624683632","624683647","ES" +"624683648","624683679","FR" +"624683680","624683683","PL" +"624683684","624683687","ES" +"624683688","624683691","FR" +"624683692","624683695","PL" +"624683696","624683727","FR" +"624683728","624683743","ES" +"624683744","624683759","FR" +"624683760","624683775","PL" +"624683776","624683783","FR" +"624683784","624683787","CZ" +"624683788","624683799","FR" +"624683800","624683803","FI" +"624683804","624683807","IT" +"624683808","624683811","ES" +"624683812","624683815","DE" +"624683816","624683819","NL" +"624683820","624683823","ES" +"624683824","624683839","FR" +"624683840","624683843","GB" +"624683844","624683847","PT" +"624683848","624683879","FR" +"624683880","624683883","NL" +"624683884","624683887","GB" +"624683888","624683895","PL" +"624683896","624683903","GB" +"624683904","624683943","FR" +"624683944","624683947","PL" +"624683948","624683951","FI" +"624683952","624683967","NL" +"624683968","624683971","IE" +"624683972","624683975","DE" +"624683976","624683983","GB" +"624683984","624683991","PT" +"624683992","624683999","GB" +"624684000","624684007","NL" +"624684008","624684015","FR" +"624684016","624684019","DE" +"624684020","624684023","CH" +"624684024","624684027","FR" +"624684028","624684031","CH" +"624684032","624684039","FR" +"624684040","624684043","DE" +"624684044","624684047","FR" +"624684048","624684051","DE" +"624684052","624684055","FR" +"624684056","624684063","NL" +"624684064","624684071","PT" +"624684072","624684079","FR" +"624684080","624684095","DE" +"624684096","624684103","PT" +"624684104","624684111","FR" +"624684112","624684127","ES" +"624684128","624684135","GB" +"624684136","624684143","FR" +"624684144","624684151","IT" +"624684152","624684155","NL" +"624684156","624684159","FR" +"624684160","624684167","NL" +"624684168","624684191","IE" +"624684192","624684195","CH" +"624684196","624684203","FR" +"624684204","624684207","PL" +"624684208","624684211","ES" +"624684212","624684215","FR" +"624684216","624684219","IT" +"624684220","624684223","DE" +"624684224","624684255","FR" +"624684256","624684287","DE" +"624684288","624684335","FR" +"624684336","624684343","IT" +"624684344","624684347","FR" +"624684348","624684351","NL" +"624684352","624684359","GB" +"624684360","624684363","DE" +"624684364","624684371","PL" +"624684372","624684379","FR" +"624684380","624684383","GB" +"624684384","624684399","IE" +"624684400","624684415","NL" +"624684416","624684419","PT" +"624684420","624684427","FR" +"624684428","624684431","NL" +"624684432","624684447","FR" +"624684448","624684479","GB" +"624684480","624684511","FI" +"624684512","624684543","GB" +"624684544","624684583","FR" +"624684584","624684587","FI" +"624684588","624684591","ES" +"624684592","624684603","FR" +"624684604","624684607","PL" +"624684608","624684615","ES" +"624684616","624684639","PL" +"624684640","624684655","CH" +"624684656","624684675","FR" +"624684676","624684679","GB" +"624684680","624684683","FR" +"624684684","624684687","CZ" +"624684688","624684703","FR" +"624684704","624684719","NL" +"624684720","624684799","FR" +"624684800","624684803","DE" +"624684804","624684807","PL" +"624684808","624684811","DE" +"624684812","624684815","BE" +"624684816","624684831","GB" +"624684832","624684839","PL" +"624684840","624684843","ES" +"624684844","624684847","PT" +"624684848","624684863","FR" +"624684864","624684867","GB" +"624684868","624684871","BE" +"624684872","624684879","DE" +"624684880","624684883","FR" +"624684884","624684887","ES" +"624684888","624684891","DE" +"624684892","624684895","NL" +"624684896","624684899","PL" +"624684900","624684903","FR" +"624684904","624684911","CH" +"624684912","624684915","PL" +"624684916","624684919","FR" +"624684920","624684927","PL" +"624684928","624684991","FR" +"624684992","624685023","NL" +"624685024","624685027","PL" +"624685028","624685031","FR" +"624685032","624685035","PL" +"624685036","624685039","ES" +"624685040","624685047","PL" +"624685048","624685051","FR" +"624685052","624685055","CZ" +"624685056","624685059","NL" +"624685060","624685063","GB" +"624685064","624685071","FR" +"624685072","624685075","ES" +"624685076","624685079","GB" +"624685080","624685087","NL" +"624685088","624685119","CZ" +"624685120","624685135","FR" +"624685136","624685151","CH" +"624685152","624685167","FR" +"624685168","624685183","GB" +"624685184","624685231","FR" +"624685232","624685235","CZ" +"624685236","624685239","BE" +"624685240","624685243","IE" +"624685244","624685247","BE" +"624685248","624685451","FR" +"624685452","624685455","PL" +"624685456","624685503","FR" +"624685504","624685535","NL" +"624685536","624685679","FR" +"624685680","624685683","PL" +"624685684","624685687","FI" +"624685688","624685691","GB" +"624685692","624685695","NL" +"624685696","624685703","IE" +"624685704","624685707","CH" +"624685708","624685711","DE" +"624685712","624685715","ES" +"624685716","624685719","GB" +"624685720","624685723","IE" +"624685724","624685727","PL" +"624685728","624685759","FR" +"624685760","624685775","IE" +"624685776","624685791","FR" +"624685792","624685799","PL" +"624685800","624685803","GB" +"624685804","624685807","IT" +"624685808","624685815","FR" +"624685816","624685823","GB" +"624685824","624685919","FR" +"624685920","624685943","IT" +"624685944","624685983","FR" +"624685984","624685987","IE" +"624685988","624685991","NL" +"624685992","624685999","DE" +"624686000","624686003","LT" +"624686004","624686007","PL" +"624686008","624686015","ES" +"624686016","624689151","FR" +"624689152","624691199","DE" +"624691200","624693247","FR" +"624693248","624695295","RU" +"624695296","624697343","PL" +"624697344","624699391","IT" +"624699392","624701439","IL" +"624701440","624705535","FR" +"624705536","624721919","GB" +"624721920","624723967","HR" +"624723968","624726015","BG" +"624726016","624728063","PS" +"624728064","624730111","FR" +"624730112","624732159","A2" +"624732160","624734207","DE" +"624734208","624736255","RU" +"624736256","624738303","FR" +"624738304","624740351","NL" +"624740352","624742399","DE" +"624742400","624746495","RU" +"624746496","624754687","RO" +"624754688","624787455","AZ" +"624787456","624791551","DE" +"624791552","624795647","ES" +"624795648","624799743","SK" +"624799744","624801791","RU" +"624801792","624803839","AT" +"624803840","624812031","DE" +"624812032","624814079","IL" +"624814080","624814335","NL" +"624814336","624816127","GB" +"624816128","624818175","FR" +"624818176","624820223","ES" +"624820224","624885759","BE" +"624885760","624918527","BG" +"624918528","624951295","IR" +"624951296","625475583","FR" +"625475584","625483775","ES" +"625483776","625485823","IT" +"625485824","625487871","UA" +"625487872","625491967","TR" +"625491968","625500159","RU" +"625500160","625504255","NL" +"625504256","625506303","GB" +"625506304","625508351","PL" +"625508352","625512447","AZ" +"625512448","625514495","DE" +"625514496","625516543","GG" +"625516544","625518591","BE" +"625518592","625518847","US" +"625518848","625520127","NL" +"625520128","625520639","US" +"625520640","625522687","RU" +"625522688","625523711","SE" +"625523712","625524479","US" +"625524480","625524735","SE" +"625524736","625541119","FR" +"625541120","625606655","UA" +"625606656","625672191","NL" +"625672192","625674239","RU" +"625674240","625676287","TR" +"625676288","625680383","MD" +"625680384","625688575","MT" +"625688576","625704959","MD" +"625704960","625707007","GE" +"625707008","625709055","AT" +"625709056","625713151","NL" +"625713152","625721343","DK" +"625721344","625725439","RU" +"625725440","625727487","PS" +"625727488","625729535","UA" +"625729536","625731583","NL" +"625731584","625733631","GB" +"625733632","625735679","IR" +"625735680","625737727","RU" +"625737728","625770495","HU" +"625770496","625786879","RU" +"625786880","625795071","PS" +"625795072","625803263","SA" +"625803264","625811455","TR" +"625811456","625815551","NL" +"625815552","625817599","IQ" +"625817600","625819647","NL" +"625819648","625823743","IQ" +"625823744","625827839","NL" +"625827840","625829887","IT" +"625829888","625831935","RU" +"625831936","625836031","IT" +"625836032","625836159","KZ" +"625836160","625838079","RU" +"625838080","625840127","IT" +"625840128","625842175","GB" +"625842176","625844223","PL" +"625844224","625846271","IT" +"625846272","625848319","RS" +"625848320","625854463","GB" +"625854464","625856511","DE" +"625856512","625860607","IT" +"625860608","625868799","CZ" +"625868800","625999871","RU" +"625999872","627048447","DE" +"627048448","627113983","DK" +"627113984","627179519","RO" +"627179520","627212287","IR" +"627212288","627216383","FI" +"627216384","627218431","GB" +"627218432","627220479","TJ" +"627220480","627228671","RU" +"627228672","627230719","GR" +"627230720","627232767","IR" +"627232768","627236863","PL" +"627236864","627238911","IT" +"627238912","627239167","US" +"627239168","627240959","EU" +"627240960","627245055","RU" +"627245056","627277823","KZ" +"627277824","627294207","SA" +"627294208","627296255","GR" +"627296256","627298303","DE" +"627298304","627300351","IT" +"627300352","627302399","RU" +"627302400","627572735","IT" +"627572736","627834879","SA" +"627834880","627965951","PL" +"627965952","628006911","RU" +"628006912","628015103","GE" +"628015104","628017151","GB" +"628017152","628019199","CH" +"628019200","628021247","UZ" +"628021248","628023295","GB" +"628023296","628029439","RU" +"628029440","628031487","GB" +"628031488","628097023","HU" +"628097024","628230143","RU" +"628230144","628232191","IT" +"628232192","628236287","RU" +"628236288","628239103","DE" +"628239104","628239359","RU" +"628239360","628239615","DE" +"628239616","628239871","AQ" +"628239872","628244479","DE" +"628244480","628246527","FR" +"628246528","628248575","MT" +"628248576","628250623","FI" +"628250624","628252671","NL" +"628252672","628254719","DE" +"628254720","628255487","US" +"628255488","628255743","NL" +"628255744","628257023","DE" +"628257024","628257279","US" +"628257280","628259071","DE" +"628259072","628259327","US" +"628259328","628260095","DE" +"628260096","628260351","US" +"628260352","628260863","DE" +"628260864","628277247","AZ" +"628277248","628293631","IR" +"628293632","628359167","UA" +"628359168","628621311","IT" +"628621312","628686847","RO" +"628686848","628752383","SA" +"628752384","628785151","RU" +"628785152","628787199","CH" +"628787200","628789247","TR" +"628789248","628791295","SE" +"628791296","628793343","IL" +"628793344","628801535","ME" +"628801536","628803583","GB" +"628803584","628805631","FR" +"628805632","628807679","GB" +"628807680","628809727","AE" +"628809728","628813823","TR" +"628813824","628815871","DK" +"628815872","628817919","GB" +"628817920","628834303","TR" +"628834304","628842495","JO" +"628842496","628844543","TR" +"628844544","628846591","DE" +"628846592","628848639","GB" +"628848640","628850687","DE" +"628850688","628852735","NO" +"628852736","628867071","SE" +"628867072","628869119","IR" +"628869120","628871167","PL" +"628871168","628873215","NL" +"628873216","628875263","RU" +"628875264","628877311","SE" +"628877312","628879359","BE" +"628879360","628881407","IT" +"628881408","628883455","GB" +"628883456","629145599","SA" +"629145600","629178367","PL" +"629178368","629180415","GB" +"629180416","629182463","IT" +"629182464","629184511","NL" +"629184512","629188607","PL" +"629188608","629190655","ES" +"629190656","629192703","CH" +"629192704","629194751","GB" +"629194752","629196799","IE" +"629196800","629198847","AZ" +"629198848","629202943","DK" +"629202944","629207039","RO" +"629207040","629211135","IR" +"629211136","629276671","RO" +"629276672","629293055","PL" +"629293056","629309439","TR" +"629309440","629313535","DE" +"629313536","629315583","ES" +"629315584","629317631","IT" +"629317632","629325823","FI" +"629325824","629327871","RU" +"629327872","629329919","IR" +"629329920","629331967","ES" +"629331968","629334015","IT" +"629334016","629338111","GB" +"629338112","629340159","BG" +"629340160","629342207","GB" +"629342208","629374975","BH" +"629374976","629387263","PL" +"629387264","629389311","DE" +"629389312","629391359","CH" +"629391360","629399551","RU" +"629399552","629401599","GE" +"629401600","629405695","DE" +"629405696","629407743","TR" +"629407744","629669887","ES" +"629669888","629735423","FI" +"629735424","629800959","IR" +"629800960","629866495","DE" +"629866496","629882879","RU" +"629882880","629882880","A1" +"629882881","629882889","GB" +"629882890","629882890","A1" +"629882891","629883135","GB" +"629883136","629883391","AU" +"629883392","629884927","GB" +"629884928","629886975","PL" +"629886976","629889023","RU" +"629889024","629891071","IT" +"629891072","629895167","UA" +"629895168","629897215","AL" +"629897216","629901311","ES" +"629901312","629903359","NL" +"629903360","629905407","PL" +"629905408","629907455","SE" +"629907456","629915647","UA" +"629915648","629983231","RU" +"629983232","629985279","FR" +"629985280","629987327","TR" +"629987328","629989375","SE" +"629989376","629991423","FR" +"629991424","629993471","NL" +"629993472","629997567","JO" +"629997568","630063103","SA" +"630063104","630128639","IL" +"630128640","630130687","BE" +"630130688","630136831","RU" +"630136832","630138879","NL" +"630138880","630145023","DE" +"630145024","630147071","EE" +"630147072","630149119","HU" +"630149120","630151167","NL" +"630151168","630153215","UA" +"630153216","630157311","RU" +"630157312","630159359","CZ" +"630159360","630161407","ES" +"630161408","630163455","KG" +"630163456","630165503","GB" +"630165504","630167551","IR" +"630167552","630169599","GE" +"630169600","630173695","RO" +"630173696","630177791","AT" +"630177792","630194175","BG" +"630194176","630456319","RU" +"630456320","630489087","RO" +"630489088","630491135","NL" +"630491136","630493183","DE" +"630493184","630495231","NO" +"630495232","630497279","DE" +"630497280","630499327","NL" +"630499328","630501375","LV" +"630501376","630501887","BE" +"630501888","630502911","NL" +"630502912","630503423","BE" +"630503424","630509567","NL" +"630509568","630511615","TR" +"630511616","630513663","GB" +"630513664","630515711","IT" +"630515712","630517759","DE" +"630517760","630519807","GB" +"630519808","630521855","IE" +"630521856","630587391","CY" +"630587392","630718463","KZ" +"630718464","630720511","JO" +"630720512","630722559","NL" +"630722560","630726655","PL" +"630726656","630732799","GB" +"630732800","630734847","SE" +"630734848","630736895","IS" +"630736896","630738943","TR" +"630738944","630743039","ES" +"630743040","630751231","SK" +"630751232","630759423","ES" +"630759424","630767615","IR" +"630767616","630783999","GB" +"630784000","630802431","RU" +"630802432","630804479","GB" +"630804480","630806527","CH" +"630806528","630808575","ES" +"630808576","630810175","NL" +"630810176","630816767","CH" +"630816768","630833151","RO" +"630833152","630849535","NL" +"630849536","630980607","TR" +"630980608","631046143","RO" +"631046144","631046399","LT" +"631046400","631048191","DK" +"631048192","631050239","FR" +"631050240","631054335","RU" +"631054336","631056383","GB" +"631056384","631058431","DE" +"631058432","631060479","GB" +"631060480","631062527","FR" +"631062528","631078911","EE" +"631078912","631080959","FR" +"631080960","631083007","BG" +"631083008","631085055","LT" +"631085056","631087103","LU" +"631087104","631095295","BG" +"631095296","631097343","CZ" +"631097344","631099391","PL" +"631099392","631103487","AM" +"631103488","631105535","FR" +"631105536","631107583","RU" +"631107584","631109631","GB" +"631109632","631111679","DE" +"631111680","631177215","ES" +"631177216","631242751","IT" +"631242752","632291327","FR" +"632291328","632815615","IT" +"632815616","632946687","BE" +"632946688","633077759","AT" +"633077760","633094143","RU" +"633094144","633098239","NL" +"633098240","633100287","HU" +"633100288","633102335","FR" +"633102336","633110527","GB" +"633110528","633143295","CZ" +"633143296","633208831","PT" +"633208832","633241599","RU" +"633241600","633274367","PL" +"633274368","633290751","HU" +"633290752","633298943","IR" +"633298944","633307135","GB" +"633307136","633339903","NO" +"633339904","633602047","RU" +"633602048","633864191","SE" +"633864192","633880575","NO" +"633880576","633884671","RU" +"633884672","633886719","IT" +"633886720","633888767","RU" +"633888768","633890815","DE" +"633890816","633892863","FR" +"633892864","633894911","GB" +"633894912","633896959","RU" +"633896960","633929727","OM" +"633929728","633997311","DE" +"633997312","633999359","RU" +"633999360","634001407","IT" +"634001408","634003455","NO" +"634003456","634007551","PL" +"634007552","634009599","TR" +"634009600","634011647","NO" +"634011648","634028031","JO" +"634028032","634060799","RO" +"634060800","634068991","UA" +"634068992","634071039","LV" +"634071040","634073087","GB" +"634073088","634075135","IE" +"634075136","634077183","NL" +"634077184","634093567","BA" +"634093568","634109951","GB" +"634109952","634111999","IE" +"634112000","634114047","RU" +"634114048","634116095","SE" +"634116096","634118143","NL" +"634118144","634122239","IT" +"634122240","634124287","RU" +"634124288","634126335","CH" +"634126336","634191871","RU" +"634191872","634193919","TR" +"634193920","634194431","CZ" +"634194432","634194687","SK" +"634194688","634194815","CZ" +"634194816","634195967","SK" +"634195968","634198015","RU" +"634198016","634200063","BA" +"634200064","634202111","IS" +"634202112","634204159","FR" +"634204160","634206207","RU" +"634206208","634208255","GB" +"634208256","634216447","RU" +"634216448","634220543","HR" +"634220544","634222591","IQ" +"634222592","634224639","DK" +"634224640","634388479","IT" +"634388480","634396671","SE" +"634396672","634398719","BA" +"634398720","634400767","KZ" +"634400768","634402815","FR" +"634402816","634404863","BE" +"634404864","634408959","RU" +"634408960","634411007","GB" +"634411008","634413055","BE" +"634413056","634415103","RU" +"634415104","634417151","DE" +"634417152","634419199","NL" +"634419200","634421247","RU" +"634421248","634454015","QA" +"634454016","634486783","DE" +"634486784","634494975","PL" +"634494976","634497023","LV" +"634497024","634499071","BG" +"634499072","634503167","CH" +"634503168","634505215","GB" +"634505216","634507263","IT" +"634507264","634511359","GB" +"634511360","634517503","RU" +"634517504","634519551","LB" +"634519552","634650623","QA" +"634650624","634912767","BY" +"634912768","635043839","RO" +"635043840","635076607","ES" +"635076608","635092991","KG" +"635092992","635097087","CY" +"635097088","635101183","PS" +"635101184","635103231","AE" +"635103232","635105279","HU" +"635105280","635107327","NL" +"635107328","635109375","DE" +"635109376","635174911","FI" +"635174912","635183103","GB" +"635183104","635185151","NL" +"635185152","635187199","IT" +"635187200","635191295","FR" +"635191296","635195391","RS" +"635195392","635197439","RU" +"635197440","635199487","GB" +"635199488","635199495","IT" +"635199496","635199575","GB" +"635199576","635199599","IT" +"635199600","635199607","GB" +"635199608","635199615","IT" +"635199616","635199623","GB" +"635199624","635199639","IT" +"635199640","635199647","GB" +"635199648","635199655","IT" +"635199656","635199663","GB" +"635199664","635199671","IT" +"635199672","635199695","GB" +"635199696","635199703","IT" +"635199704","635199711","GB" +"635199712","635199719","IT" +"635199720","635199735","GB" +"635199736","635199743","IT" +"635199744","635200967","GB" +"635200968","635200975","IT" +"635200976","635200991","GB" +"635200992","635201023","IT" +"635201024","635201079","GB" +"635201080","635201087","IT" +"635201088","635201159","GB" +"635201160","635201167","IT" +"635201168","635203583","GB" +"635203584","635207679","JO" +"635207680","635211775","HU" +"635211776","635213823","NL" +"635213824","635217919","RU" +"635217920","635219967","NL" +"635219968","635224063","RU" +"635224064","635240447","HU" +"635240448","635256831","IR" +"635256832","635273215","GB" +"635273216","635281407","UA" +"635281408","635285503","RO" +"635285504","635287551","ME" +"635287552","635289599","RU" +"635289600","635291647","DE" +"635291648","635293695","RU" +"635293696","635295743","HU" +"635295744","635297791","GB" +"635297792","635299839","SE" +"635299840","635301887","ES" +"635301888","635305983","CZ" +"635305984","635306239","NL" +"635306240","635306495","FR" +"635306496","635306751","DE" +"635306752","635307007","GB" +"635307008","635307775","DE" +"635307776","635308031","AD" +"635308032","635308287","AE" +"635308288","635308543","AF" +"635308544","635308799","AG" +"635308800","635309055","AI" +"635309056","635309311","AL" +"635309312","635309567","AM" +"635309568","635309823","AO" +"635309824","635310079","AQ" +"635310080","635310335","AR" +"635310336","635310591","AS" +"635310592","635310847","AT" +"635310848","635311103","AU" +"635311104","635311359","AW" +"635311360","635311615","AX" +"635311616","635311871","AZ" +"635311872","635312127","BA" +"635312128","635312383","BB" +"635312384","635312639","BD" +"635312640","635312895","BE" +"635312896","635313151","BF" +"635313152","635313407","BG" +"635313408","635313663","BH" +"635313664","635313919","BI" +"635313920","635314175","BJ" +"635314176","635314431","BL" +"635314432","635314687","BM" +"635314688","635314943","BN" +"635314944","635315199","BO" +"635315200","635315455","NL" +"635315456","635315711","BR" +"635315712","635315967","BS" +"635315968","635316223","BT" +"635316224","635316479","BV" +"635316480","635316735","BW" +"635316736","635316991","BY" +"635316992","635317247","BZ" +"635317248","635317503","CA" +"635317504","635317759","CC" +"635317760","635318015","CD" +"635318016","635318271","CF" +"635318272","635318527","CG" +"635318528","635318783","CH" +"635318784","635319039","CI" +"635319040","635319295","CK" +"635319296","635319551","CL" +"635319552","635319807","CM" +"635319808","635320063","CN" +"635320064","635320319","CO" +"635320320","635320575","CR" +"635320576","635320831","CU" +"635320832","635321087","CV" +"635321088","635321343","NL" +"635321344","635321599","CX" +"635321600","635321855","CY" +"635321856","635322111","CZ" +"635322112","635322367","DE" +"635322368","635322623","DJ" +"635322624","635322879","DK" +"635322880","635323135","DM" +"635323136","635323391","DO" +"635323392","635323647","DZ" +"635323648","635323903","EC" +"635323904","635324159","EE" +"635324160","635324415","EG" +"635324416","635324671","EH" +"635324672","635324927","ER" +"635324928","635325183","ES" +"635325184","635325439","ET" +"635325440","635325695","FI" +"635325696","635325951","FJ" +"635325952","635326207","FK" +"635326208","635326463","FM" +"635326464","635326719","FO" +"635326720","635326975","FR" +"635326976","635327231","GA" +"635327232","635327487","GB" +"635327488","635327743","GD" +"635327744","635327999","GE" +"635328000","635328255","GF" +"635328256","635328511","GG" +"635328512","635328767","GH" +"635328768","635329023","GI" +"635329024","635329279","GL" +"635329280","635329535","GM" +"635329536","635329791","GN" +"635329792","635330047","GP" +"635330048","635330303","GQ" +"635330304","635330559","GR" +"635330560","635330815","GS" +"635330816","635331071","GT" +"635331072","635331327","GU" +"635331328","635331583","GW" +"635331584","635331839","GY" +"635331840","635332095","HK" +"635332096","635332351","HM" +"635332352","635332607","HN" +"635332608","635332863","HR" +"635332864","635333119","HT" +"635333120","635333375","HU" +"635333376","635333631","ID" +"635333632","635333887","IE" +"635333888","635334143","IL" +"635334144","635334399","IM" +"635334400","635334655","IN" +"635334656","635334911","IO" +"635334912","635335167","IQ" +"635335168","635335423","IR" +"635335424","635335679","IS" +"635335680","635335935","IT" +"635335936","635336191","JE" +"635336192","635336447","JM" +"635336448","635336703","JO" +"635336704","635336959","JP" +"635336960","635337215","KE" +"635337216","635337471","KG" +"635337472","635337727","KI" +"635337728","635337983","KM" +"635337984","635338239","KN" +"635338240","635338495","KP" +"635338496","635338751","KR" +"635338752","635339007","KW" +"635339008","635339263","KY" +"635339264","635339519","KZ" +"635339520","635339775","LA" +"635339776","635340031","LB" +"635340032","635340287","LC" +"635340288","635340543","LI" +"635340544","635340799","LK" +"635340800","635341055","LR" +"635341056","635341311","LS" +"635341312","635341567","LT" +"635341568","635341823","LU" +"635341824","635342079","LV" +"635342080","635342335","LY" +"635342336","635342591","MC" +"635342592","635342847","MD" +"635342848","635343103","ME" +"635343104","635343359","MF" +"635343360","635343615","MG" +"635343616","635343871","MH" +"635343872","635344127","MK" +"635344128","635344383","ML" +"635344384","635344639","MM" +"635344640","635344895","MN" +"635344896","635345151","MO" +"635345152","635345407","MP" +"635345408","635345663","MQ" +"635345664","635345919","MR" +"635345920","635346175","MS" +"635346176","635346431","MT" +"635346432","635346687","MU" +"635346688","635346943","MV" +"635346944","635347199","MW" +"635347200","635347455","MX" +"635347456","635347711","MY" +"635347712","635347967","MZ" +"635347968","635348223","NA" +"635348224","635348479","NC" +"635348480","635348735","NE" +"635348736","635348991","NF" +"635348992","635349247","NG" +"635349248","635349503","NI" +"635349504","635349759","NL" +"635349760","635350015","NO" +"635350016","635350271","NP" +"635350272","635350527","NR" +"635350528","635350783","NU" +"635350784","635351039","NZ" +"635351040","635351295","OM" +"635351296","635351551","PA" +"635351552","635351807","PE" +"635351808","635352063","PF" +"635352064","635352319","PG" +"635352320","635352575","PH" +"635352576","635352831","PK" +"635352832","635353087","PL" +"635353088","635353343","PM" +"635353344","635353599","PN" +"635353600","635353855","PR" +"635353856","635354111","PS" +"635354112","635354367","PT" +"635354368","635354623","PW" +"635354624","635354879","PY" +"635354880","635355135","QA" +"635355136","635355391","RE" +"635355392","635355647","RO" +"635355648","635355903","RS" +"635355904","635356159","RU" +"635356160","635356415","RW" +"635356416","635356671","SA" +"635356672","635356927","SB" +"635356928","635357183","SC" +"635357184","635357439","SD" +"635357440","635357695","SE" +"635357696","635357951","SG" +"635357952","635358207","SH" +"635358208","635358463","SI" +"635358464","635358719","SJ" +"635358720","635358975","SK" +"635358976","635359231","SL" +"635359232","635359487","SM" +"635359488","635359743","SN" +"635359744","635359999","SO" +"635360000","635360255","SR" +"635360256","635360511","NL" +"635360512","635360767","ST" +"635360768","635361023","SV" +"635361024","635361279","NL" +"635361280","635361535","SY" +"635361536","635361791","SZ" +"635361792","635362047","TC" +"635362048","635362303","TD" +"635362304","635362559","TF" +"635362560","635362815","TG" +"635362816","635363071","TH" +"635363072","635363327","TJ" +"635363328","635363583","TK" +"635363584","635363839","TL" +"635363840","635364095","TM" +"635364096","635364351","TN" +"635364352","635364607","TO" +"635364608","635364863","TR" +"635364864","635365119","TT" +"635365120","635365375","TV" +"635365376","635365631","TW" +"635365632","635365887","TZ" +"635365888","635366143","UA" +"635366144","635366399","UG" +"635366400","635366655","UM" +"635366656","635366911","US" +"635366912","635367167","UY" +"635367168","635367423","UZ" +"635367424","635367679","VA" +"635367680","635367935","VC" +"635367936","635368191","VE" +"635368192","635368447","VG" +"635368448","635368703","VI" +"635368704","635368959","VN" +"635368960","635369215","VU" +"635369216","635369471","WF" +"635369472","635369727","WS" +"635369728","635369983","YE" +"635369984","635370239","YT" +"635370240","635370495","ZA" +"635370496","635370751","ZM" +"635370752","635371007","ZW" +"635371008","635371263","AD" +"635371264","635371519","AE" +"635371520","635371775","AF" +"635371776","635372031","AG" +"635372032","635372287","AI" +"635372288","635372543","AL" +"635372544","635372799","AM" +"635372800","635373055","AO" +"635373056","635373311","AQ" +"635373312","635373567","AR" +"635373568","635373823","AS" +"635373824","635374079","AT" +"635374080","635374335","AU" +"635374336","635374591","AW" +"635374592","635374847","AX" +"635374848","635375103","AZ" +"635375104","635375359","BA" +"635375360","635375615","BB" +"635375616","635375871","BD" +"635375872","635376127","BE" +"635376128","635376383","BF" +"635376384","635376639","BG" +"635376640","635376895","BH" +"635376896","635377151","BI" +"635377152","635377407","BJ" +"635377408","635377663","BL" +"635377664","635377919","BM" +"635377920","635378175","BN" +"635378176","635378431","BO" +"635378432","635378687","NL" +"635378688","635378943","BR" +"635378944","635379199","BS" +"635379200","635379455","BT" +"635379456","635379711","BV" +"635379712","635379967","BW" +"635379968","635380223","BY" +"635380224","635380479","BZ" +"635380480","635380735","CA" +"635380736","635380991","CC" +"635380992","635381247","CD" +"635381248","635381503","CF" +"635381504","635381759","CG" +"635381760","635382015","CH" +"635382016","635382271","CI" +"635382272","635382527","CK" +"635382528","635382783","CL" +"635382784","635383039","CM" +"635383040","635383295","CN" +"635383296","635383551","CO" +"635383552","635383807","CR" +"635383808","635384063","CU" +"635384064","635384319","CV" +"635384320","635384575","NL" +"635384576","635384831","CX" +"635384832","635385087","CY" +"635385088","635385343","CZ" +"635385344","635385599","DE" +"635385600","635385855","DJ" +"635385856","635386111","DK" +"635386112","635386367","DM" +"635386368","635386623","DO" +"635386624","635386879","DZ" +"635386880","635387135","EC" +"635387136","635387391","EE" +"635387392","635387647","EG" +"635387648","635387903","EH" +"635387904","635388159","ER" +"635388160","635437055","NL" +"635437056","635502591","RO" +"635502592","635568127","PL" +"635568128","635699199","IT" +"635699200","635715583","PL" +"635715584","635717631","KZ" +"635717632","635719679","NL" +"635719680","635723775","RU" +"635723776","635725823","ES" +"635727872","635729919","RU" +"635729920","635748351","DE" +"635748352","635764735","IE" +"635764736","635830271","UA" +"635830272","635842559","DE" +"635842560","635846655","GB" +"635846656","635854847","ES" +"635854848","635856895","NL" +"635856896","635858943","TR" +"635858944","635860991","RU" +"635860992","635863039","BE" +"635863040","635867135","RU" +"635867136","635869183","RO" +"635869184","635895807","RU" +"635895808","635961343","KW" +"635961344","635994111","GE" +"635994112","636026879","RU" +"636026880","636043263","MD" +"636043264","636047359","SE" +"636047360","636049407","RU" +"636049408","636051455","FI" +"636051456","636055551","PL" +"636055552","636057599","RU" +"636057600","636059647","CH" +"636059648","636092415","GE" +"636092416","636157951","HU" +"636157952","636159999","AT" +"636160000","636162047","NL" +"636162048","636166143","IR" +"636166144","636168191","ES" +"636168192","636170239","GB" +"636170240","636170495","PL" +"636170496","636170751","IS" +"636170752","636171007","CH" +"636171008","636174335","AT" +"636174336","636176383","RU" +"636176384","636178431","TR" +"636178432","636180479","NL" +"636180480","636182527","FR" +"636182528","636186623","CZ" +"636186624","636188671","NL" +"636188672","636190719","GB" +"636190720","636223487","RU" +"636223488","636485631","IQ" +"636485632","636747775","SA" +"636747776","636780543","DE" +"636780544","636813311","HR" +"636813312","636878847","AE" +"636878848","636944383","MD" +"636944384","636952575","SE" +"636952576","636956671","NL" +"636956672","636958719","IT" +"636958720","636960767","PL" +"636960768","636968959","DE" +"636968960","636975103","TR" +"636975104","636977151","ES" +"636977152","637140991","PL" +"637140992","637206527","SE" +"637206528","637239295","NL" +"637239296","637272063","RO" +"637272064","637276159","DE" +"637276160","637278207","RU" +"637278208","637288447","GB" +"637288448","637296639","AM" +"637296640","637298687","ES" +"637298688","637300735","A2" +"637300736","637302783","NO" +"637302784","637304831","AT" +"637304832","637313023","CH" +"637313024","637317119","EU" +"637317120","637319167","ES" +"637319168","637321215","AT" +"637321216","637323263","GB" +"637323264","637323653","A2" +"637323654","637323654","FR" +"637323655","637323655","A2" +"637323656","637323656","FR" +"637323657","637325311","A2" +"637325312","637325823","US" +"637325824","637326079","GB" +"637326080","637326335","DE" +"637326336","637326591","HK" +"637326592","637326847","AU" +"637326848","637327359","NO" +"637327360","637329407","IR" +"637329408","637337599","AT" +"637337600","637403135","NO" +"637403136","637534207","IR" +"637534208","642695167","US" +"642695168","642696191","A1" +"642696192","642795519","US" +"642795520","642796031","A1" +"642796032","642796543","US" +"642796544","642797055","A1" +"642797056","643875071","US" +"643875072","643875327","A1" +"643875328","644048127","US" +"644048128","644048383","A1" +"644048384","644049151","US" +"644049152","644049407","A1" +"644049408","644059135","US" +"644059136","644059391","A1" +"644059392","644067391","US" +"644067392","644067455","CA" +"644067456","644093439","US" +"644093440","644093695","A1" +"644093696","644121855","US" +"644121856","644122111","A1" +"644122112","644323391","US" +"644323392","644323407","CA" +"644323408","644422911","US" +"644422912","644423423","JP" +"644423424","644761439","US" +"644761440","644761455","CA" +"644761456","644835071","US" +"644835072","644835327","CA" +"644835328","644839423","US" +"644839424","644840447","CA" +"644840448","644898879","US" +"644898880","644898911","CA" +"644898912","645001215","US" +"645001216","645003263","A1" +"645003264","645221375","US" +"645221376","645222399","CA" +"645222400","645225471","US" +"645225472","645225503","CA" +"645225504","645228031","US" +"645228032","645228287","CA" +"645228288","645358271","US" +"645358272","645358335","A1" +"645358336","645361663","US" +"645361664","645361919","A1" +"645361920","645362175","US" +"645362176","645362431","A1" +"645362432","645482511","US" +"645482512","645482519","CA" +"645482520","645731071","US" +"645731072","645731199","A1" +"645731200","645810943","US" +"645810944","645811199","A1" +"645811200","654311423","US" +"654311424","654311679","CN" +"654311680","654311935","AU" +"654311936","654376959","CN" +"654376960","654442495","TW" +"654442496","654573567","JP" +"654573568","654835711","KR" +"654835712","655359999","TW" +"655360000","656408575","KR" +"656408576","658505727","PK" +"658505728","660602879","CN" +"660602880","661651455","HK" +"661651456","662700031","KR" +"662700032","666894335","CN" +"666894336","671088639","ID" +"671088640","671113215","US" +"671113216","671113471","EU" +"671113472","687618147","US" +"687618148","687618151","EU" +"687618152","687865855","US" +"687865856","689963007","ZA" +"689963008","691011583","EG" +"691011584","691617791","ZA" +"691617792","691621887","ZW" +"691621888","691625983","LR" +"691625984","691630079","KE" +"691630080","691631103","ZA" +"691632128","691633151","NG" +"691633152","691634175","ZW" +"691634176","691650559","ZA" +"691650560","691666943","GH" +"691666944","691732479","NG" +"691732480","691798015","TZ" +"691798016","691863551","ZM" +"691863552","691929087","ZA" +"691929088","691994623","SN" +"691994624","692011007","ZM" +"692011008","692027391","ZA" +"692027392","692035583","MG" +"692035584","692043775","AO" +"692043776","692060159","NA" +"692060160","692191231","EG" +"692191232","692207615","CI" +"692207616","692240383","ZA" +"692240384","692256767","GH" +"692256768","692273151","SD" +"692273152","692289535","EG" +"692289536","692305919","NG" +"692305920","692322303","CM" +"692322304","692453375","EG" +"692453376","692486143","MW" +"692486144","692518911","AO" +"692518912","692551679","ZA" +"692551680","692584447","NG" +"692584448","692600831","AO" +"692600832","692609023","EG" +"692609024","692617215","ZM" +"692617216","692625407","ZA" +"692625408","692633599","A2" +"692633600","692641791","KE" +"692641792","692649983","GA" +"692649984","692658175","NG" +"692658176","692666367","ZA" +"692666368","692674559","TZ" +"692674560","692682751","ML" +"692682752","692690943","NG" +"692690944","692707327","TZ" +"692707328","692715519","NG" +"692715520","692719615","BJ" +"692719616","692723711","MG" +"692723712","692727807","TD" +"692727808","692731903","BW" +"692731904","692735999","LY" +"692736000","692740095","GH" +"692740096","692744191","ZA" +"692744192","692748287","TZ" +"692748288","692752383","CV" +"692752384","692756479","ZA" +"692756480","692760575","RW" +"692760576","692768767","ZA" +"692768768","692772863","MG" +"692772864","692776959","ZA" +"692776960","692781055","AO" +"692781056","692785151","BW" +"692785152","692789247","NG" +"692789248","692793343","KE" +"692793344","692797439","GH" +"692797440","692801535","CG" +"692801536","692805631","NG" +"692805632","692809727","ZA" +"692809728","692813823","MW" +"692813824","692817919","ZA" +"692817920","692822015","KE" +"692822016","692826111","UG" +"692826112","692830207","KE" +"692830208","692834303","NG" +"692834304","692838399","TZ" +"692838400","692842495","ZA" +"692842496","692846591","ZM" +"692846592","692848639","MZ" +"692848640","692850687","GM" +"692850688","692852735","LS" +"692852736","692854783","GH" +"692854784","692856831","ZA" +"692856832","692858879","MU" +"692858880","692860927","MW" +"692860928","692862975","ZA" +"692862976","692869119","NG" +"692869120","692871167","TZ" +"692871168","692877311","ZA" +"692877312","692879359","GA" +"692879360","692881407","ZA" +"692881408","692883455","CG" +"692883456","692885503","MZ" +"692885504","692887551","NG" +"692887552","692889599","UG" +"692889600","692891647","KE" +"692891648","692893695","ZA" +"692893696","692895743","KE" +"692895744","692897791","NG" +"692897792","692905983","ZA" +"692905984","692908031","ZW" +"692908032","692910079","BW" +"692910080","692912127","NG" +"692912128","692914175","ZM" +"692914176","692916223","MW" +"692916224","692918271","MG" +"692918272","692920319","ZA" +"692920320","692922367","MZ" +"692922368","692924415","NG" +"692924416","692928511","ZA" +"692928512","692930559","GH" +"692930560","692932607","UG" +"692932608","692934655","CM" +"692934656","692936703","BW" +"692936704","692940799","ZA" +"692940800","692942847","MA" +"692942848","692944895","GA" +"692944896","692946943","MZ" +"692946944","692948991","EG" +"692948992","692951039","ZM" +"692951040","692953087","ZA" +"692953088","692955135","RW" +"692955136","692957183","NG" +"692957184","692959231","DZ" +"692959232","692961279","GN" +"692961280","692963327","TZ" +"692963328","692965375","ZA" +"692965376","692967423","CM" +"692968448","692969471","CD" +"692969472","692971519","TZ" +"692973568","692975615","MZ" +"692975616","692977663","EG" +"692977664","692978687","TZ" +"692978688","692979711","ZA" +"692979712","692981759","NG" +"692981760","692982783","AO" +"692982784","692983807","EG" +"692983808","692984831","KE" +"692984832","692987903","ZA" +"692987904","692988927","GH" +"692988928","692989951","ZW" +"692989952","692991999","BF" +"692992000","692993023","MW" +"692993024","692994047","EG" +"692994048","692995071","TZ" +"692995072","692996095","SL" +"692996096","692997119","SO" +"692997120","692998143","ZW" +"692998144","692999167","NG" +"692999168","693000191","SL" +"693000192","693001215","NG" +"693001216","693002239","BW" +"693002240","693003263","GA" +"693003264","693004287","NG" +"693004288","693005311","CD" +"693005312","693006335","SD" +"693006336","693007359","ZM" +"693007360","693008383","NE" +"693008384","693009407","CF" +"693009408","693010431","GH" +"693010432","693011455","ZA" +"693011456","693012479","SZ" +"693012480","693013503","TG" +"693013504","693014527","ZA" +"693014528","693015551","GH" +"693015552","693016575","EG" +"693016576","693017599","GA" +"693017600","693018623","NG" +"693018624","693019647","UG" +"693019648","693020671","ZA" +"693020672","693021695","TZ" +"693021696","693022719","NG" +"693022720","693023743","KE" +"693023744","693026815","ZA" +"693027840","693028863","CD" +"693028864","693029887","ZA" +"693029888","693030911","CM" +"693030912","693031935","NG" +"693031936","693032959","ZA" +"693032960","693033983","MW" +"693033984","693035007","ZA" +"693035008","693036031","NG" +"693036032","693038079","ZA" +"693038080","693039103","ZW" +"693039104","693040127","GA" +"693040128","693041151","ZA" +"693041152","693042175","MW" +"693042176","693043199","NG" +"693043200","693044223","ZW" +"693044224","693045247","NG" +"693045248","693046271","KE" +"693046272","693047295","ZW" +"693047296","693049343","ZA" +"693049344","693050367","KE" +"693050368","693051391","ZW" +"693051392","693052415","BW" +"693052416","693054463","ZA" +"693054464","693055487","BI" +"693055488","693056511","GQ" +"693056512","693057535","NA" +"693057536","693058559","ZW" +"693058560","693059583","SC" +"693059584","693060607","NG" +"693060608","693061631","TZ" +"693061632","693064703","ZA" +"693064704","693065727","GH" +"693065728","693066751","MW" +"693066752","693067775","ZA" +"693067776","693068799","GH" +"693068800","693069823","TZ" +"693069824","693071871","ZA" +"693071872","693072895","ZW" +"693072896","693073919","NG" +"693073920","693074943","SD" +"693074944","693075967","CV" +"693075968","693076991","CM" +"693076992","693078015","ZW" +"693078016","693079039","BW" +"693079040","693080063","KE" +"693080064","693081087","NG" +"693081088","693082111","ZA" +"693082112","693083135","NG" +"693083136","693086207","ZA" +"693086208","693087231","KE" +"693087232","693088255","ZA" +"693088256","693089279","NG" +"693089280","693090303","ZA" +"693090304","693091327","TZ" +"693091328","693092351","ZW" +"693092352","693093375","ZA" +"693093376","693094399","SO" +"693094400","693095423","GN" +"693095424","693096447","NG" +"693096448","693097471","EG" +"693097472","693098495","ZA" +"693098496","693099519","BJ" +"693099520","693100543","ZA" +"693100544","693101567","BI" +"693101568","693102591","KE" +"693102592","693103615","CD" +"693103616","693104639","GN" +"693104640","693105663","ZA" +"693105664","693106687","MZ" +"693106688","693107711","ZA" +"693107712","693239807","KE" +"693239808","693370879","SN" +"693370880","693403647","ZA" +"693403648","693411839","KE" +"693411840","693420031","NG" +"693420032","693428223","UG" +"693428224","693436415","SZ" +"693436416","693477375","ZA" +"693477376","693485567","BJ" +"693485568","693493759","ZW" +"693493760","693501951","ZA" +"693501952","693510143","LR" +"693510144","693518335","SC" +"693518336","693534719","ZA" +"693534720","693542911","NG" +"693542912","693551103","TZ" +"693551104","693559295","ZA" +"693559296","693567487","BJ" +"693567488","693575679","MW" +"693575680","693583871","KE" +"693583872","693592063","NG" +"693592064","693600255","MU" +"693600256","693608447","MA" +"693608448","693616639","BW" +"693616640","693633023","ZA" +"693633024","693698559","EG" +"693698560","693829631","KE" +"693829632","693895167","EG" +"693895168","693927935","MA" +"693927936","693960703","CM" +"693960704","693993471","TZ" +"693993472","694026239","GH" +"694026240","694091775","MZ" +"694091776","694157311","SD" +"694157312","695205887","DZ" +"695205888","696254463","ZA" +"696254464","696516607","EG" +"696516608","696778751","ZA" +"696778752","696844287","MU" +"696844288","696909823","MA" +"696909824","696918015","UG" +"696918016","696926207","NE" +"696926208","696928255","ZA" +"696928256","696930303","BW" +"696930304","696932351","RW" +"696932352","696933375","BJ" +"696933376","696934399","TZ" +"696934400","696942591","BF" +"696942592","696950783","MR" +"696950784","696958975","NG" +"696958976","696963071","TZ" +"696963072","696967167","UG" +"696967168","696971263","MZ" +"696971264","696975359","KE" +"696975360","696991743","GH" +"696991744","697008127","NG" +"697008128","697040895","KE" +"697040896","697303039","MA" +"697303040","697827327","ZA" +"697827328","697958399","EG" +"697958400","698023935","ZA" +"698023936","698056703","NG" +"698056704","698089471","EG" +"698089472","698220543","ZA" +"698220544","698351615","GA" +"698351616","699400191","ZA" +"699400192","699465727","EG" +"699465728","699531263","ZA" +"699531264","699662335","EG" +"699662336","699793407","ZA" +"699793408","699858943","NA" +"699858944","699924479","ZA" +"699924480","699990015","NG" +"699990016","700055551","ZA" +"700055552","700121087","RW" +"700121088","700186623","EG" +"700186624","700203007","MG" +"700203008","700219391","MR" +"700219392","700235775","TZ" +"700235776","700252159","ZA" +"700252160","700260351","NG" +"700260352","700268543","CI" +"700268544","700276735","ZA" +"700276736","700284927","CI" +"700284928","700293119","GH" +"700293120","700301311","EG" +"700301312","700309503","CD" +"700309504","700314367","DJ" +"700314368","700314623","US" +"700314624","700317695","DJ" +"700317696","700325887","NG" +"700325888","700334079","ZW" +"700334080","700335103","BJ" +"700335104","700336127","GH" +"700336128","700337151","CG" +"700338176","700339199","CD" +"700339200","700340223","NA" +"700340224","700341247","GH" +"700341248","700342271","MW" +"700342272","700350463","NA" +"700350464","700358655","UG" +"700358656","700366847","MZ" +"700366848","700375039","UG" +"700375040","700376063","CM" +"700376064","700377087","NE" +"700377088","700378111","KE" +"700378112","700379135","MG" +"700379136","700380159","NG" +"700380160","700381183","BW" +"700381184","700382207","EG" +"700382208","700383231","KE" +"700383232","700399615","EG" +"700399616","700400639","AO" +"700400640","700401663","CI" +"700401664","700402687","MZ" +"700402688","700403711","UG" +"700403712","700404735","EG" +"700404736","700405759","BJ" +"700405760","700406783","ZA" +"700406784","700407807","TZ" +"700407808","700408831","GH" +"700408832","700409855","CM" +"700409856","700410879","LR" +"700410880","700411903","NG" +"700411904","700412927","ZA" +"700412928","700413951","ZM" +"700413952","700414975","SC" +"700414976","700432383","ZA" +"700432384","700434431","KE" +"700434432","700436479","LS" +"700436480","700438527","UG" +"700438528","700442623","KE" +"700442624","700444671","ZW" +"700444672","700446719","GH" +"700446720","700447743","SL" +"700447744","700448767","DZ" +"700448768","700579839","ZA" +"700579840","700586495","A2" +"700586496","700586751","US" +"700586752","700587007","A2" +"700587008","700587263","ZM" +"700587264","700588031","A2" +"700588032","700588286","KM" +"700588287","700588287","A2" +"700588288","700588543","KM" +"700588544","700589567","A2" +"700589568","700589695","TZ" +"700589696","700592383","A2" +"700592384","700592639","KE" +"700592640","700593151","A2" +"700593152","700594175","NG" +"700594176","700645375","A2" +"700645376","700710911","ZA" +"700710912","700776447","EG" +"700776448","700841983","RW" +"700841984","700866559","MU" +"700866560","700866815","NG" +"700866816","700867327","MU" +"700867328","700867583","NG" +"700867584","700895231","MU" +"700895232","700897023","NG" +"700897024","700897279","AO" +"700897280","700899327","NG" +"700899328","700907519","MU" +"700907520","700973055","EG" +"700973056","701104127","DZ" +"701104128","701112319","GH" +"701112320","701120511","ZA" +"701120512","701145087","CI" +"701145088","701153279","SD" +"701153280","701161471","CM" +"701161472","701169663","UG" +"701169664","701186047","ZA" +"701186048","701190136","NG" +"701190137","701190137","BJ" +"701190138","701202431","NG" +"701202432","701210623","NE" +"701210624","701214719","ZA" +"701214720","701218815","LS" +"701218816","701222911","ML" +"701222912","701227007","KE" +"701227008","701231103","BF" +"701231104","701235199","SC" +"701235200","701243391","SZ" +"701243392","701251583","GH" +"701251584","701259775","CM" +"701259776","701267967","MG" +"701267968","701276159","TZ" +"701276160","701284351","KE" +"701284352","701292543","ZA" +"701292544","701300735","NG" +"701300736","701308927","CM" +"701308928","701317119","AO" +"701317120","701325311","CM" +"701325312","701333503","EG" +"701333504","701341695","NA" +"701341696","701349887","NG" +"701349888","701358079","MA" +"701358080","701366271","SL" +"701366272","701374463","NG" +"701374464","701382655","KE" +"701382656","701390847","CI" +"701399040","701407231","EG" +"701407232","701423615","ZA" +"701423616","701431807","NG" +"701431808","701439999","CI" +"701440000","701448191","MG" +"701448192","701461247","KE" +"701461248","701461503","CD" +"701461504","701462783","KE" +"701462784","701463039","CG" +"701463040","701463394","KE" +"701463395","701463395","NG" +"701463396","701463528","KE" +"701463529","701463529","NG" +"701463530","701463807","KE" +"701463808","701464063","CG" +"701464064","701464575","KE" +"701464576","701472767","MU" +"701472768","701480959","TG" +"701480960","701489151","CI" +"701489152","701513727","ZA" +"701513728","701530111","LY" +"701530112","701546495","SN" +"701546496","701562879","ZA" +"701562880","701579263","KE" +"701579264","701595647","SD" +"701595648","701603839","DZ" +"701612032","701628415","EG" +"701628416","701644799","GH" +"701644800","701661183","DZ" +"701661184","701677567","UG" +"701677568","701693951","AO" +"701693952","701702143","GH" +"701702144","701710335","SZ" +"701710336","701718527","MU" +"701718528","701726719","CM" +"701726720","701743103","GA" +"701743104","701759487","NG" +"701759488","701792255","KE" +"701792256","701825023","MU" +"701825024","701857791","ZA" +"701857792","701890559","RE" +"701890560","701923327","SN" +"701923328","701956095","MA" +"701956096","701992959","KE" +"701992960","701997055","SZ" +"701997056","702001151","GH" +"702001152","702005247","ZM" +"702005248","702009343","KE" +"702009344","702013439","CV" +"702013440","702015487","KE" +"702015488","702017535","ZA" +"702017536","702018559","EG" +"702018560","702019583","NG" +"702019584","702020607","RW" +"702020608","702021631","CD" +"702021632","702029823","ZM" +"702029824","702038015","BJ" +"702038016","702046207","ZM" +"702046208","702054399","RW" +"702054400","702058495","ZA" +"702058496","702062591","BF" +"702062592","702066687","NG" +"702066688","702070783","CM" +"702070784","702074879","ZA" +"702074880","702076927","BW" +"702076928","702078975","TZ" +"702078976","702079999","MA" +"702080000","702081023","MW" +"702081024","702082047","NG" +"702082048","702083071","AO" +"702087168","702119935","NG" +"702119936","702128127","CM" +"702128128","702136319","EG" +"702136320","702137343","ZA" +"702137344","702138367","MG" +"702138368","702139391","TZ" +"702139392","702140415","NG" +"702140416","702141439","MZ" +"702141440","702142463","MU" +"702142464","702143487","MW" +"702143488","702144511","KE" +"702144512","702146559","EG" +"702146560","702148607","UG" +"702148608","702150655","ZA" +"702150656","702152703","ZM" +"702152704","702169087","SD" +"702169088","702181375","NA" +"702181376","702185471","AO" +"702185472","702201855","EG" +"702201856","702218239","GH" +"702218240","702234623","SN" +"702234624","702251007","NA" +"702251008","702283775","NG" +"702283776","702287871","UG" +"702287872","702291967","ZW" +"702291968","702296063","MZ" +"702296064","702300159","GH" +"702300160","702304255","NG" +"702304256","702308351","SL" +"702308352","702312447","SC" +"702312448","702316543","KE" +"702316544","702320639","TZ" +"702320640","702324735","DZ" +"702324736","702328831","MZ" +"702328832","702332927","TZ" +"702332928","702337023","MZ" +"702337024","702341119","UG" +"702341120","702349311","KE" +"702349312","702353407","ZA" +"702353408","702357503","DZ" +"702357504","702365695","TZ" +"702365696","702369791","MZ" +"702369792","702373887","UG" +"702373888","702377983","MW" +"702377984","702382079","NG" +"702382080","702386175","EG" +"702386176","702390271","ZW" +"702390272","702394367","NG" +"702394368","702398463","ML" +"702398464","702402559","CV" +"702402560","702410751","ZA" +"702410752","702414847","AO" +"702414848","702416895","UG" +"702416896","702418943","KE" +"702418944","702420991","ZM" +"702420992","702423039","TZ" +"702423040","702425087","ZA" +"702425088","702427135","NG" +"702427136","702429183","ZA" +"702429184","702431231","TZ" +"702431232","702435327","NG" +"702435328","702437375","MZ" +"702437376","702439423","TZ" +"702439424","702441471","MU" +"702441472","702441727","ZA" +"702441728","702441983","GB" +"702441984","702442495","ZA" +"702442496","702442751","GB" +"702442752","702443519","ZA" +"702443520","702445567","GQ" +"702447616","702449663","EG" +"702449664","702451711","ZA" +"702451712","702453759","NG" +"702453760","702455807","TZ" +"702455808","702457855","KE" +"702457856","702459903","EG" +"702459904","702461951","TZ" +"702461952","702463999","MW" +"702464000","702465023","BJ" +"702465024","702466047","CD" +"702467072","702468095","SC" +"702468096","702469119","NG" +"702469120","702470143","ZA" +"702470144","702471167","CD" +"702471168","702474239","ZA" +"702474240","702475263","GH" +"702475264","702476287","AO" +"702476288","702477311","ZM" +"702477312","702478335","RW" +"702478336","702481407","AO" +"702481408","702482431","TZ" +"702482432","702483455","ZA" +"702484480","702485503","TZ" +"702485504","702486527","EG" +"702487552","702488575","CM" +"702488576","702490623","ZA" +"702490624","702491647","AO" +"702493696","702494719","EG" +"702494720","702495743","KE" +"702495744","702496767","ZA" +"702496768","702497791","NG" +"702497792","702498815","ZA" +"702498816","702499839","BW" +"702499840","702500863","MU" +"702500864","702501887","NA" +"702501888","702502911","UG" +"702502912","702503935","SL" +"702505984","702507007","AO" +"702507008","702508031","CD" +"702508032","702509055","KE" +"702510080","702511103","ZM" +"702511104","702512127","ZA" +"702512128","702513151","MZ" +"702513152","702514175","NG" +"702514176","702515199","SL" +"702515200","702516223","NG" +"702516224","702517247","BW" +"702517248","702518271","NG" +"702518272","702519295","KE" +"702519296","702520319","MZ" +"702520320","702521343","AO" +"702521344","702522367","SD" +"702522368","702523391","AO" +"702523392","702524415","NG" +"702524416","702525439","ZA" +"702525440","702526463","DZ" +"702526464","702527487","TZ" +"702527488","702528511","CF" +"702528512","702529535","CG" +"702530560","702531583","EG" +"702531584","702532607","SD" +"702532608","702533631","SC" +"702533632","702534655","CI" +"702534656","702535679","GM" +"702535680","702536703","SC" +"702536704","702537727","MU" +"702537728","702538751","RW" +"702538752","702539775","TZ" +"702539776","702540799","BF" +"702541824","702542847","EG" +"702542848","702543871","ZA" +"702543872","702544895","BJ" +"702544896","702545919","ZA" +"702545920","703070207","TN" +"703070208","703594495","EG" +"703594496","704118783","ZA" +"704118784","704380927","MA" +"704380928","704643071","LY" +"704643072","704644095","CN" +"704644096","704645119","BD" +"704645120","704650239","CN" +"704650240","704651263","MY" +"704651264","704659455","CN" +"704659456","704675839","TW" +"704675840","704723967","CN" +"704723968","704724991","MY" +"704724992","704741375","VN" +"704741376","704774143","CN" +"704774144","704905215","HK" +"704905216","705167359","CN" +"705167360","707788799","KR" +"707788800","708575231","CN" +"708575232","708706303","SG" +"708706304","708751359","CN" +"708751360","708752383","ID" +"708752384","708755455","CN" +"708755456","708771839","AU" +"708771840","708837375","CN" +"708837376","709885951","TW" +"709885952","710017023","CN" +"710017024","710082559","KR" +"710082560","710098943","JP" +"710098944","710104063","CN" +"710104064","710105087","PK" +"710105088","710934527","CN" +"710934528","710950911","VN" +"710950912","710961151","CN" +"710961152","710962175","TH" +"710962176","711065599","CN" +"711065600","711131135","HK" +"711131136","711160831","CN" +"711160832","711161855","BD" +"711161856","711163903","CN" +"711163904","711196671","JP" +"711196672","711458815","CN" +"711458816","711983103","IN" +"711983104","712507391","VN" +"712507392","712712191","CN" +"712712192","712713215","JP" +"712713216","712769535","CN" +"712769536","713031679","JP" +"713031680","714080255","CN" +"714080256","714604543","JP" +"714604544","714866687","MY" +"714866688","714874879","CN" +"714874880","714875903","MY" +"714875904","716930047","CN" +"716930048","716931071","JP" +"716931072","716963839","CN" +"716963840","717225983","MY" +"717225984","717750271","CN" +"717750272","717815807","HK" +"717815808","717848575","CN" +"717848576","717881343","PK" +"717881344","720437247","CN" +"720437248","720502783","AU" +"720502784","721420287","CN" +"721420288","738197503","JP" +"738197504","746717183","US" +"746717184","746782719","DE" +"746782720","755105791","US" +"771751936","771817471","RU" +"771817472","771948543","TR" +"771948544","772014079","RU" +"772014080","772050575","DE" +"772050576","772050583","TR" +"772050584","772054815","DE" +"772054816","772054847","ES" +"772054848","772057727","DE" +"772057728","772057735","IT" +"772057736","772073599","DE" +"772073600","772073607","IT" +"772073608","772076127","DE" +"772076128","772076159","EG" +"772076160","772145151","DE" +"772145152","772210687","ES" +"772210688","772276223","IE" +"772276224","772341759","RU" +"772341760","772407295","NO" +"772407296","772472831","BG" +"772472832","772538367","MT" +"772538368","772603903","GR" +"772603904","772669439","CZ" +"772669440","772734975","CH" +"772734976","772800511","NO" +"772800512","772802559","GB" +"772802560","772804607","RU" +"772804608","772806207","BZ" +"772806208","772806271","NI" +"772806272","772806463","BZ" +"772806464","772806527","NI" +"772806528","772806655","BZ" +"772806656","772808703","RU" +"772808704","772810751","GB" +"772810752","772812799","FR" +"772812800","772814847","NO" +"772814848","772816895","ES" +"772816896","772818943","RU" +"772818944","772820991","DE" +"772820992","772823039","GB" +"772823040","772825087","IT" +"772825088","772827135","RU" +"772827136","772829183","RS" +"772829184","772831231","EE" +"772831232","772833279","CZ" +"772833280","772835327","RU" +"772835328","772837375","CY" +"772837376","772839423","KZ" +"772839424","772841471","CH" +"772841472","772843519","GB" +"772843520","772844799","IT" +"772844800","772845311","US" +"772845312","772845567","IT" +"772845568","772847615","RU" +"772847616","772848128","GB" +"772848129","772848191","JO" +"772848192","772849663","GB" +"772849664","772851711","BG" +"772851712","772853759","CH" +"772853760","772855807","GB" +"772855808","772857855","DE" +"772857856","772859903","RU" +"772859904","772861951","SE" +"772861952","772863999","UA" +"772864000","772870143","NL" +"772870144","772872191","NO" +"772872192","772874239","NL" +"772874240","772876287","IE" +"772876288","772880383","RU" +"772880384","772882431","GB" +"772882432","772884479","FR" +"772884480","772884543","GB" +"772884544","772884735","LB" +"772884736","772884799","GB" +"772884800","772885503","LB" +"772885504","772885567","GB" +"772885568","772885759","LB" +"772885760","772885823","GB" +"772885824","772886527","LB" +"772886528","772888575","FR" +"772888576","772890623","GB" +"772890624","772892671","RU" +"772892672","772892927","DE" +"772892928","772892959","GB" +"772894720","772896767","PL" +"772896768","772898815","RS" +"772898816","772900863","TR" +"772900864","772902911","ES" +"772902912","772904959","RS" +"772904960","772907007","IT" +"772907008","772909055","GB" +"772909056","772911103","LU" +"772911104","772913151","GB" +"772913152","772915199","SE" +"772915200","772917247","FI" +"772917248","772919295","RU" +"772919296","772923391","GB" +"772923392","772925439","AT" +"772925440","772925695","GB" +"772925696","772926719","ZW" +"772926720","772927487","GB" +"772927488","772929535","UA" +"772929536","772931583","RU" +"772931584","772933631","UA" +"772933632","772933920","GB" +"772933921","772933928","IE" +"772933929","772935679","GB" +"772935680","772937727","PS" +"772937728","772939775","IT" +"772939776","772941823","BE" +"772941824","772943871","ES" +"772943872","772945919","GB" +"772945920","772947967","DE" +"772947968","772950015","AZ" +"772950016","772952063","ES" +"772952064","772954111","GB" +"772954112","772958207","FR" +"772958208","772962303","GB" +"772962304","772966399","FR" +"772966400","772968447","IT" +"772968448","772970495","SK" +"772970496","772972543","GB" +"772972544","772974591","SA" +"772974592","772978687","GB" +"772978688","772980735","DE" +"772980736","772982271","FR" +"772982272","772982279","US" +"772982280","772982783","FR" +"772982784","772984831","RU" +"772984832","772986879","FR" +"772986880","772988927","GB" +"772988928","772990975","FR" +"772990976","772993023","IT" +"772993024","772994559","DE" +"772994560","772994815","NL" +"772994816","772994943","US" +"772994944","772995071","DE" +"772995072","772997119","IR" +"772997120","772999167","BE" +"772999168","773001215","SI" +"773001216","773003263","NO" +"773003264","773005311","FR" +"773005312","773007359","NL" +"773007360","773009407","KZ" +"773009408","773011455","IT" +"773011456","773013503","DE" +"773013504","773015551","RU" +"773015552","773017599","AE" +"773017600","773019647","IL" +"773019648","773021695","DE" +"773021696","773023743","AM" +"773023744","773025791","RO" +"773025792","773027839","RU" +"773027840","773031935","FR" +"773031936","773032191","CH" +"773032192","773032447","A1" +"773032448","773033727","CH" +"773033728","773033983","A1" +"773033984","773036031","LV" +"773036032","773038079","DE" +"773038080","773040127","GB" +"773040128","773042175","NL" +"773042176","773044223","FR" +"773044224","773046271","RU" +"773046272","773048319","LB" +"773048320","773050367","LV" +"773050368","773052415","IE" +"773052416","773054463","NL" +"773054464","773054655","AL" +"773054656","773054719","RS" +"773054720","773055487","AL" +"773055488","773056255","RS" +"773056256","773056511","AL" +"773056512","773058559","IT" +"773058560","773060607","BE" +"773060608","773062655","DK" +"773062656","773062912","TR" +"773062913","773063167","GB" +"773063168","773063424","TR" +"773063425","773063436","US" +"773063437","773065088","TR" +"773065089","773065215","US" +"773065216","773066751","TR" +"773066752","773070847","AT" +"773070848","773074943","DE" +"773074944","773079039","PL" +"773079040","773083135","RU" +"773083136","773087231","IT" +"773087232","773091327","LB" +"773091328","773092512","GB" +"773092513","773092544","US" +"773092545","773092576","GB" +"773092577","773092580","US" +"773092581","773092581","GB" +"773092582","773092590","US" +"773092591","773092591","GB" +"773092592","773092604","US" +"773092605","773092867","GB" +"773092868","773092990","US" +"773092991","773093195","GB" +"773093196","773093196","US" +"773093197","773093198","GB" +"773093199","773093204","US" +"773093205","773093232","GB" +"773093233","773093233","US" +"773093234","773093257","GB" +"773093258","773093259","US" +"773093260","773093260","GB" +"773093261","773093263","US" +"773093264","773093266","GB" +"773093267","773093267","US" +"773093268","773093269","GB" +"773093270","773093271","US" +"773093272","773093275","GB" +"773093276","773093276","US" +"773093277","773093278","GB" +"773093279","773093279","US" +"773093280","773093282","GB" +"773093283","773093287","US" +"773093288","773093289","GB" +"773093290","773093290","US" +"773093291","773093292","GB" +"773093293","773093293","US" +"773093294","773093295","GB" +"773093296","773093297","US" +"773093298","773093298","GB" +"773093299","773093300","US" +"773093301","773093330","GB" +"773093331","773093334","US" +"773093335","773093336","GB" +"773093337","773093337","US" +"773093338","773093341","GB" +"773093342","773093342","US" +"773093343","773093524","GB" +"773093525","773093543","US" +"773093544","773093564","GB" +"773093565","773093577","US" +"773093578","773093600","GB" +"773093601","773093601","US" +"773093602","773094660","GB" +"773094661","773094910","US" +"773094911","773095423","GB" +"773095424","773099519","RO" +"773099520","773103615","TR" +"773103616","773107711","FR" +"773107712","773111807","RU" +"773111808","773115903","TJ" +"773115904","773119999","PS" +"773120000","773124095","GB" +"773124096","773128191","CH" +"773128192","773132287","DE" +"773132288","773134335","IT" +"773134336","773134847","CH" +"773134848","773136383","IT" +"773136384","773140479","DK" +"773140480","773144575","CY" +"773144576","773148671","RU" +"773148672","773152767","IR" +"773152768","773152895","SE" +"773152896","773152959","US" +"773152960","773153791","SE" +"773153792","773154815","US" +"773154816","773155583","SE" +"773155584","773155839","US" +"773155840","773156863","SE" +"773156864","773158143","FR" +"773158144","773158911","DE" +"773158912","773160447","FR" +"773160448","773160959","ES" +"773160960","773165055","FR" +"773165056","773166591","NL" +"773166592","773167207","US" +"773167208","773167215","NL" +"773167216","773168639","US" +"773168640","773168671","NL" +"773168672","773169151","US" +"773169152","773171343","NL" +"773171344","773171359","BE" +"773171360","773171599","NL" +"773171600","773171607","BE" +"773171608","773171615","NL" +"773171616","773171647","BE" +"773171648","773172223","NL" +"773172224","773172287","BE" +"773172288","773172351","GB" +"773172352","773172479","NL" +"773172480","773172607","GB" +"773172608","773172735","BE" +"773172736","773173247","NL" +"773173248","773177343","IT" +"773177344","773181439","FR" +"773181440","773185535","PL" +"773185536","773189631","NL" +"773189632","773197823","RU" +"773197824","773201919","CH" +"773201920","773206015","DE" +"773206016","773210111","RU" +"773210112","773214207","US" +"773214208","773218303","FR" +"773218304","773222399","IS" +"773222400","773226495","SE" +"773226496","773230591","IE" +"773230592","773234687","RS" +"773234688","773238783","PL" +"773238784","773242879","NL" +"773242880","773246975","FR" +"773246976","773251071","EE" +"773251072","773255167","AZ" +"773255168","773259263","RU" +"773259264","773263359","SI" +"773263360","773267455","GB" +"773267456","773271551","LV" +"773271552","773275647","CZ" +"773275648","773277695","GB" +"773277696","773283839","NL" +"773283840","773287935","AZ" +"773287936","773292031","JO" +"773292032","773296127","CZ" +"773296128","773300223","RU" +"773300224","773304319","FI" +"773304320","773308415","RU" +"773308416","773312511","IT" +"773312512","773316607","DE" +"773316608","773320703","RU" +"773320704","773324799","FR" +"773324800","773586943","ES" +"773586944","773588991","IT" +"773588992","773591039","PL" +"773591040","773593087","RU" +"773593088","773595135","IT" +"773595136","773597183","DE" +"773597184","773599231","BE" +"773599232","773601279","GB" +"773601280","773603327","LV" +"773603328","773603839","UA" +"773603840","773603855","HK" +"773603856","773605375","UA" +"773605376","773607423","IR" +"773607424","773609471","DE" +"773609472","773611519","RU" +"773611520","773613567","BY" +"773613568","773615615","CZ" +"773615616","773617663","DE" +"773617664","773619711","IT" +"773619712","773621759","RU" +"773621760","773623807","PS" +"773623808","773625855","SE" +"773625856","773627903","IS" +"773627904","773629951","ES" +"773629952","773631999","FR" +"773632000","773634047","CY" +"773634048","773636095","DE" +"773636096","773638143","UA" +"773638144","773640191","CH" +"773640192","773640513","ES" +"773640514","773640515","FR" +"773640516","773640516","NL" +"773640517","773642239","ES" +"773642240","773644287","HU" +"773644288","773646335","RU" +"773646336","773648383","TR" +"773648384","773650431","PL" +"773650432","773652479","GB" +"773652480","773653759","SK" +"773653760","773653775","CZ" +"773653776","773654527","SK" +"773654528","773656575","RU" +"773656576","773658623","PL" +"773658624","773660671","DE" +"773660672","773660935","AT" +"773660936","773660943","IT" +"773660944","773662719","AT" +"773662720","773664767","DE" +"773664768","773666815","ES" +"773666816","773668863","GB" +"773668864","773670911","DE" +"773670912","773672959","RU" +"773672960","773675007","SA" +"773675008","773677055","GB" +"773677056","773679103","DE" +"773679104","773679135","IT" +"773679136","773679231","A2" +"773679232","773679295","DE" +"773679296","773679327","A2" +"773679328","773679359","IT" +"773679360","773679423","GB" +"773679424","773679487","A2" +"773679488","773679615","FR" +"773679616","773680383","IT" +"773680384","773680639","A2" +"773680640","773680703","LY" +"773680704","773680895","IT" +"773680896","773681151","HK" +"773681152","773683199","RU" +"773683200","773684223","FR" +"773684224","773684239","GB" +"773684240","773684255","BE" +"773684256","773684271","NL" +"773684272","773685247","FR" +"773685248","773687295","UA" +"773687296","773689343","HU" +"773689344","773691391","PL" +"773691392","773695487","RU" +"773695488","773697535","MK" +"773697536","773698047","LU" +"773698048","773698063","GB" +"773698064","773698079","US" +"773698080","773698095","DE" +"773698096","773698111","BE" +"773698112","773698127","FR" +"773698128","773699583","LU" +"773699584","773701631","CZ" +"773701632","773703679","RU" +"773703680","773705727","IT" +"773705728","773707775","RU" +"773707776","773709823","NO" +"773709824","773711871","CZ" +"773711872","773713919","RU" +"773713920","773715967","NL" +"773715968","773716991","SE" +"773716992","773718015","US" +"773718016","773720063","DE" +"773720064","773722111","GB" +"773722112","773724159","ES" +"773724160","773726207","DE" +"773726208","773730303","RU" +"773730304","773732351","GB" +"773732352","773734399","DE" +"773734400","773736447","CZ" +"773736448","773738947","DE" +"773738948","773738951","NO" +"773738952","773739199","DE" +"773739200","773739203","GB" +"773739204","773740543","DE" +"773740544","773742591","CZ" +"773742592","773744639","GB" +"773744640","773746687","ES" +"773746688","773748735","DE" +"773748736","773750783","DK" +"773750784","773752831","FI" +"773752832","773754879","GB" +"773754880","773756927","CZ" +"773756928","773758975","RU" +"773758976","773761023","UA" +"773761024","773763071","IT" +"773763072","773765119","TR" +"773765120","773767167","NL" +"773767168","773769215","GB" +"773769216","773771263","FR" +"773771264","773773311","DK" +"773773312","773775359","IT" +"773775360","773777407","IQ" +"773777408","773779455","CZ" +"773779456","773783551","IT" +"773783552","773785599","RU" +"773785600","773787647","NL" +"773787648","773789695","DK" +"773789696","773791743","RU" +"773791744","773793791","PL" +"773793792","773794527","FR" +"773794528","773794535","GB" +"773794536","773794543","IT" +"773794544","773794551","ES" +"773794552","773794559","DE" +"773794560","773795839","FR" +"773795840","773797887","NL" +"773797888","773799935","ES" +"773799936","773800447","GB" +"773800448","773800703","CY" +"773800704","773800959","GB" +"773800960","773801215","SG" +"773801216","773801727","US" +"773801728","773801983","GB" +"773801984","773804031","IQ" +"773804032","773806079","GB" +"773806080","773808127","BE" +"773808128","773810175","IL" +"773810176","773812223","IT" +"773812224","773814271","TR" +"773814272","773816319","DE" +"773816320","773818367","IT" +"773818368","773820415","HR" +"773820416","773822463","TR" +"773822464","773824511","RU" +"773824512","773826559","FR" +"773826560","773828607","GB" +"773828608","773830655","HU" +"773830656","773832703","NO" +"773832704","773834751","FR" +"773834752","773836799","GB" +"773836800","773838847","FR" +"773838848","773840895","DE" +"773840896","773847039","GB" +"773847040","773849087","IT" +"773849088","773857279","IR" +"773857280","773865471","DK" +"773865472","773873663","RU" +"773873664","773881855","JO" +"773881856","773890047","DK" +"773890048","773898239","AZ" +"773898240","773906431","PS" +"773906432","773922815","GB" +"773922816","773931007","UA" +"773931008","773934591","DE" +"773934592","773939199","FR" +"773939200","773947391","CZ" +"773947392","773955583","GB" +"773955584","773963775","FR" +"773963776","773971967","ME" +"773971968","773980159","UA" +"773980160","773988351","GB" +"773988352","774000895","ES" +"774000896","774001151","NL" +"774001152","774001663","ES" +"774001664","774002687","NL" +"774002688","774003199","ES" +"774003200","774003263","TR" +"774003264","774003311","ES" +"774003312","774003455","TR" +"774003456","774003583","ES" +"774003584","774003647","TR" +"774003648","774003711","ES" +"774003712","774004223","BE" +"774004224","774004479","ES" +"774004480","774004511","BE" +"774004512","774004735","ES" +"774004736","774012927","IR" +"774012928","774021119","RU" +"774021120","774029311","IR" +"774029312","774037503","RO" +"774037504","774045695","SK" +"774045696","774053887","FR" +"774053888","774055519","DE" +"774055520","774055679","US" +"774055680","774055935","DE" +"774055936","774057855","US" +"774057856","774058079","DE" +"774058080","774058095","US" +"774058096","774058111","DE" +"774058112","774058239","US" +"774058240","774058327","DE" +"774058328","774058335","US" +"774058336","774058359","DE" +"774058360","774058367","HR" +"774058368","774058399","US" +"774058400","774058559","DE" +"774058560","774058599","US" +"774058600","774058815","DE" +"774058816","774058847","US" +"774058848","774058871","DE" +"774058872","774058879","US" +"774058880","774059215","DE" +"774059216","774059223","ZA" +"774059224","774059263","US" +"774059264","774059391","DE" +"774059392","774059423","US" +"774059424","774059455","DE" +"774059456","774059519","US" +"774059520","774060031","DE" +"774060032","774060047","ES" +"774060048","774060063","DE" +"774060064","774060159","US" +"774060160","774060639","DE" +"774060640","774060799","US" +"774060800","774061007","DE" +"774061008","774061023","CZ" +"774061024","774061103","DE" +"774061104","774061111","GI" +"774061112","774061367","DE" +"774061368","774061407","US" +"774061408","774061567","DE" +"774061568","774061727","US" +"774061728","774062015","DE" +"774062016","774062047","US" +"774062048","774062079","DE" +"774062080","774070271","YE" +"774070272","774078463","ES" +"774078464","774086655","BA" +"774086656","774094847","BG" +"774094848","774103039","HU" +"774103040","774111231","UA" +"774111232","774119423","RU" +"774119424","774127615","CZ" +"774127616","774135807","LT" +"774135808","774143999","IR" +"774144000","774152191","KZ" +"774152192","774160383","BA" +"774160384","774160415","VA" +"774160416","774160448","LI" +"774160449","774160480","IM" +"774160481","774160514","IS" +"774160515","774160547","RU" +"774160548","774160580","AE" +"774160581","774160612","DK" +"774160613","774160639","AT" +"774160640","774160671","GI" +"774160672","774160702","CY" +"774160703","774160735","CH" +"774160736","774160768","GR" +"774160769","774160801","IL" +"774160802","774160832","BG" +"774160833","774160864","NO" +"774160865","774160869","BR" +"774160870","774160873","CA" +"774160874","774160895","CR" +"774160896","774160927","PA" +"774160928","774160935","CU" +"774160936","774160946","BS" +"774160947","774160956","KY" +"774160957","774160966","JM" +"774160967","774160976","PR" +"774160977","774160986","VG" +"774160987","774160996","CO" +"774160997","774161006","GT" +"774161007","774161016","CN" +"774161017","774161026","EG" +"774161027","774161036","FJ" +"774161037","774161046","IN" +"774161047","774161056","MH" +"774161057","774161066","JP" +"774161067","774161076","MX" +"774161077","774161086","NZ" +"774161087","774161096","MY" +"774161097","774161106","PE" +"774161107","774161116","PH" +"774161117","774161126","SA" +"774161127","774161136","SC" +"774161137","774161146","SG" +"774161147","774161149","BY" +"774161150","774161151","VA" +"774161152","774161162","AQ" +"774161163","774161172","KR" +"774161173","774161182","TH" +"774161183","774161192","QA" +"774161193","774161202","VI" +"774161203","774161212","BM" +"774161213","774161222","BB" +"774161223","774161232","AW" +"774161233","774161242","BZ" +"774161243","774161252","MC" +"774161253","774161262","GB" +"774161263","774161272","TR" +"774161273","774161282","MT" +"774161283","774161292","SE" +"774161293","774161302","US" +"774161303","774161312","HK" +"774161313","774161322","IE" +"774161323","774161332","PK" +"774161333","774161337","KW" +"774161338","774161342","JO" +"774161343","774161347","OM" +"774161348","774161352","ID" +"774161353","774161357","TW" +"774161358","774161362","AI" +"774161363","774161367","KN" +"774161368","774161372","GD" +"774161373","774161377","DO" +"774161378","774161382","PY" +"774161383","774161387","EE" +"774161388","774161392","LU" +"774161393","774161397","SK" +"774161398","774161402","SI" +"774161403","774161405","LC" +"774161406","774161408","VA" +"774161409","774161418","AU" +"774161419","774161428","GL" +"774161429","774161438","HU" +"774161439","774161448","MK" +"774161449","774161458","PS" +"774161459","774161468","UZ" +"774161469","774161478","MS" +"774161479","774161488","US" +"774161489","774161498","MN" +"774161499","774161518","US" +"774161519","774161528","TW" +"774161529","774161538","DO" +"774161539","774161548","PY" +"774161549","774161558","EE" +"774161559","774161568","SK" +"774161569","774161578","LC" +"774161579","774161588","VE" +"774161589","774161598","TC" +"774161599","774161628","US" +"774161629","774161638","PA" +"774161639","774161648","RU" +"774161649","774161658","HK" +"774161659","774161664","VA" +"774161665","774161674","US" +"774161675","774161684","CL" +"774161685","774161694","GR" +"774161695","774161704","AG" +"774161705","774161714","AM" +"774161715","774161724","GB" +"774161725","774161734","RO" +"774161735","774161744","UA" +"774161745","774161754","AU" +"774161755","774161764","PG" +"774161765","774161774","ZA" +"774161775","774161784","SN" +"774161785","774161794","MA" +"774161795","774161804","BH" +"774161805","774161814","JE" +"774161815","774161824","TV" +"774161825","774161834","PF" +"774161835","774161844","SB" +"774161845","774161854","VU" +"774161855","774161864","AN" +"774161865","774161869","AR" +"774161870","774161874","ES" +"774161875","774161879","GE" +"774161880","774161884","RS" +"774161885","774161889","DE" +"774161890","774161894","IT" +"774161895","774161899","BE" +"774161900","774161904","FR" +"774161905","774161909","CZ" +"774161910","774161914","LT" +"774161915","774161917","PL" +"774161918","774161920","VA" +"774161921","774161940","GB" +"774161941","774161950","AU" +"774161951","774161955","IT" +"774161956","774161960","NZ" +"774161961","774161965","PL" +"774161966","774161970","NL" +"774161971","774161975","CA" +"774161976","774161980","US" +"774161981","774161985","GB" +"774161986","774161990","IQ" +"774161991","774161995","LT" +"774161996","774162000","ER" +"774162001","774162005","KE" +"774162006","774162010","DE" +"774162011","774162015","TN" +"774162016","774162020","TT" +"774162021","774162025","BO" +"774162026","774162030","CH" +"774162031","774162035","AU" +"774162036","774162040","AL" +"774162041","774162045","AD" +"774162046","774162050","HR" +"774162051","774162055","ME" +"774162056","774162060","SY" +"774162061","774162065","US" +"774162066","774162070","HT" +"774162071","774162075","EC" +"774162076","774162080","SH" +"774162081","774162085","ZM" +"774162086","774162090","KH" +"774162091","774162095","VN" +"774162096","774162100","FM" +"774162101","774162105","US" +"774162106","774162110","GB" +"774162111","774162115","SO" +"774162116","774162120","FI" +"774162121","774162125","DZ" +"774162126","774162130","MO" +"774162131","774162135","MR" +"774162136","774162140","CM" +"774162141","774162145","SV" +"774162146","774162150","HN" +"774162151","774162155","US" +"774162156","774162160","UY" +"774162161","774162165","LV" +"774162166","774162170","MD" +"774162171","774162173","GB" +"774162174","774162176","VA" +"774162177","774162181","LK" +"774162182","774162186","IE" +"774162187","774162196","EH" +"774162197","774162206","NA" +"774162207","774162216","CX" +"774162217","774162236","GB" +"774162237","774162246","CH" +"774162247","774162266","US" +"774162267","774162276","PT" +"774162277","774162286","AE" +"774162287","774162296","IO" +"774162297","774162306","GB" +"774162307","774162316","RE" +"774162317","774162326","TK" +"774162327","774162336","CV" +"774162337","774162346","AZ" +"774162347","774162366","US" +"774162367","774162376","MX" +"774162377","774162386","GB" +"774162387","774162396","ZW" +"774162397","774162406","SZ" +"774162407","774162416","SD" +"774162417","774162426","BF" +"774162427","774162432","VA" +"774162433","774162442","GB" +"774162443","774162452","BA" +"774162453","774162462","WS" +"774162463","774162472","SR" +"774162473","774162483","PT" +"774162484","774162492","CK" +"774162493","774162502","KI" +"774162503","774162512","NU" +"774162513","774162522","TO" +"774162523","774162532","CL" +"774162533","774162542","TF" +"774162543","774162552","GG" +"774162553","774162562","LR" +"774162563","774162572","MQ" +"774162573","774162582","YT" +"774162583","774162592","NC" +"774162593","774162602","NG" +"774162603","774162627","US" +"774162628","774162637","GB" +"774162638","774162642","NF" +"774162643","774162687","US" +"774162688","774162688","VA" +"774162689","774162778","US" +"774162779","774162798","CA" +"774162799","774162803","BN" +"774162804","774162808","TM" +"774162809","774162813","US" +"774162814","774162818","IT" +"774162819","774162823","KZ" +"774162824","774162828","MV" +"774162829","774162833","PN" +"774162834","774162838","SM" +"774162839","774162848","GB" +"774162849","774162853","AU" +"774162854","774162858","NL" +"774162859","774162863","IE" +"774162864","774162888","US" +"774162889","774162893","CA" +"774162894","774162903","MX" +"774162904","774162908","GB" +"774162909","774162943","VA" +"774162944","774163199","CH" +"774163200","774163205","VA" +"774163206","774163209","AU" +"774163210","774163210","VA" +"774163211","774163214","TD" +"774163215","774163215","VA" +"774163216","774163219","CD" +"774163220","774163220","VA" +"774163221","774163224","DJ" +"774163225","774163225","VA" +"774163226","774163229","CF" +"774163230","774163230","VA" +"774163231","774163234","HM" +"774163235","774163240","VA" +"774163241","774163244","VC" +"774163245","774163245","VA" +"774163246","774163249","PM" +"774163250","774163255","VA" +"774163256","774163259","DM" +"774163260","774163260","VA" +"774163261","774163264","KM" +"774163265","774163265","VA" +"774163266","774163269","TZ" +"774163270","774163270","VA" +"774163271","774163274","ST" +"774163275","774163275","VA" +"774163276","774163279","GB" +"774163280","774163280","VA" +"774163281","774163284","KP" +"774163285","774163285","VA" +"774163286","774163289","FK" +"774163290","774168575","VA" +"774168576","774176767","PL" +"774176768","774184959","IT" +"774184960","774193151","GB" +"774193152","774209535","ES" +"774209536","774217727","RU" +"774217728","774225919","GB" +"774225920","774234111","UA" +"774234112","774242303","IT" +"774242304","774258687","RU" +"774258688","774266879","SA" +"774266880","774275071","RU" +"774275072","774283007","IR" +"774283008","774291455","GB" +"774291456","774299647","NL" +"774299648","774307839","DE" +"774307840","774324223","RU" +"774324224","774332415","UA" +"774332416","774340607","SE" +"774340608","774348799","EE" +"774348800","774356991","CZ" +"774356992","774365183","ES" +"774365184","774373375","RU" +"774373376","774389759","RS" +"774389760","774406143","BG" +"774406144","774422527","IT" +"774422528","774438911","OM" +"774438912","774455295","DE" +"774455296","774471679","RU" +"774471680","774488063","PL" +"774488064","774504447","RO" +"774504448","774520831","RU" +"774520832","774537215","BH" +"774537216","774553599","RU" +"774553600","774569983","RO" +"774569984","774579295","GB" +"774579296","774579327","IT" +"774579328","774586367","GB" +"774586368","774602751","PS" +"774602752","774619135","GB" +"774619136","774651903","RU" +"774651904","774668287","SA" +"774668288","774684671","NL" +"774684672","774701055","IT" +"774701056","774717439","RU" +"774717440","774733823","PL" +"774733824","774750207","TR" +"774750208","774782975","RU" +"774782976","774799359","UA" +"774799360","774815743","RU" +"774815744","774832127","NO" +"774832128","774848511","RU" +"774848512","774864895","BG" +"774864896","774881279","CZ" +"774881280","774963199","RU" +"774963200","774995967","GE" +"774995968","775028735","RO" +"775028736","775061503","PT" +"775061504","775094271","RU" +"775094272","775127039","RO" +"775127040","775149566","IE" +"775149567","775149567","NL" +"775149568","775157759","IE" +"775157760","775159551","JP" +"775159552","775159807","IE" +"775159808","775192575","SA" +"775192576","775225343","RU" +"775225344","775258111","SY" +"775258112","775290879","BY" +"775290880","775323647","MT" +"775323648","775356415","SI" +"775356416","775389183","MD" +"775389184","775421951","BG" +"775421952","775487487","BY" +"775487488","775520255","AT" +"775520256","775553023","SY" +"775553024","775557119","EU" +"775557120","775557375","CH" +"775557376","775569407","EU" +"775569408","775569663","US" +"775569664","775585791","EU" +"775585792","775618559","SY" +"775618560","775641087","SE" +"775641088","775641119","FI" +"775641120","775641215","SE" +"775641216","775641279","GB" +"775641280","775641343","DE" +"775641344","775641375","FI" +"775641376","775641471","SE" +"775641472","775641535","GB" +"775641536","775641599","DE" +"775641600","775641631","FI" +"775641632","775641727","SE" +"775641728","775641791","GB" +"775641792","775641855","DE" +"775641856","775641887","FI" +"775641888","775641983","SE" +"775641984","775642047","GB" +"775642048","775642111","DE" +"775642112","775642143","FI" +"775642144","775642239","SE" +"775642240","775642303","GB" +"775642304","775642367","DE" +"775642368","775642399","FI" +"775642400","775642495","SE" +"775642496","775642559","GB" +"775642560","775642623","DE" +"775642624","775642655","FI" +"775642656","775642751","SE" +"775642752","775642815","GB" +"775642816","775642879","DE" +"775642880","775642911","FI" +"775642912","775643007","SE" +"775643008","775643071","GB" +"775643072","775643135","DE" +"775643136","775645951","SE" +"775645952","775646207","NO" +"775646208","775651327","SE" +"775651328","775684095","DE" +"775684096","775716863","PS" +"775716864","775749631","GB" +"775749632","775847935","RU" +"775847936","775880703","RO" +"775880704","775913471","UA" +"775913472","775946239","RU" +"775946240","776077311","GB" +"776077312","776208383","NO" +"776208384","776339455","GB" +"776339456","776470527","AM" +"776470528","776601599","RU" +"776601600","776732671","AT" +"776732672","776863743","PL" +"776863744","778043391","DE" +"778108928","778174463","RO" +"778174464","778239999","UA" +"778240000","778305535","AL" +"778305536","778371071","IR" +"778371072","778436607","RU" +"778436608","778498047","RO" +"778498048","778500095","NL" +"778500096","778502143","RO" +"778502144","778567679","GR" +"778567680","778633215","TR" +"778633216","778638079","FR" +"778638080","778638335","IT" +"778638336","778638591","ES" +"778638592","778638975","FR" +"778638976","778639103","CZ" +"778639104","778639231","LT" +"778639232","778639359","FI" +"778639360","778639615","ES" +"778639616","778639871","PL" +"778639872","778640127","DE" +"778640128","778640383","GB" +"778640384","778640639","IT" +"778640640","778640895","PT" +"778640896","778641151","NL" +"778641152","778641407","IE" +"778641408","778665983","FR" +"778665984","778666015","BE" +"778666016","778666031","FR" +"778666032","778666047","PL" +"778666048","778666063","FR" +"778666064","778666079","IE" +"778666080","778666095","FR" +"778666096","778666099","PL" +"778666100","778666103","LT" +"778666104","778666107","GB" +"778666108","778666111","IE" +"778666112","778666119","FR" +"778666120","778666123","GB" +"778666124","778666127","FR" +"778666128","778666143","PL" +"778666144","778666151","FR" +"778666152","778666155","GB" +"778666156","778666159","ES" +"778666160","778666191","FR" +"778666192","778666239","PL" +"778666240","778666247","GB" +"778666248","778666259","FR" +"778666260","778666263","PL" +"778666264","778666271","CH" +"778666272","778666287","FR" +"778666288","778666295","GB" +"778666296","778666299","ES" +"778666300","778666303","GB" +"778666304","778666367","FR" +"778666368","778666371","PL" +"778666372","778666379","GB" +"778666380","778666383","ES" +"778666384","778666391","DE" +"778666392","778666399","PL" +"778666400","778666479","FR" +"778666480","778666495","DE" +"778666496","778666751","BE" +"778666752","778666783","CZ" +"778666784","778666815","FR" +"778666816","778666847","GB" +"778666848","778666863","PT" +"778666864","778666871","GB" +"778666872","778666879","IE" +"778666880","778666967","FR" +"778666968","778666975","PL" +"778666976","778667007","FR" +"778667008","778667263","GB" +"778667264","778667279","FR" +"778667280","778667283","IE" +"778667284","778667287","PL" +"778667288","778667291","IT" +"778667292","778667295","CH" +"778667296","778667331","GB" +"778667332","778667335","FR" +"778667336","778667343","ES" +"778667344","778667347","FR" +"778667348","778667351","GB" +"778667352","778667391","PL" +"778667392","778667407","FR" +"778667408","778667415","PL" +"778667416","778667423","FR" +"778667424","778667455","LT" +"778667456","778667471","DE" +"778667472","778667475","PL" +"778667476","778667479","DE" +"778667480","778667483","GB" +"778667484","778667487","NL" +"778667488","778667491","LT" +"778667492","778667495","CH" +"778667496","778667499","DE" +"778667500","778667503","GB" +"778667504","778667839","FR" +"778667840","778667855","PL" +"778667856","778667871","FR" +"778667872","778667875","ES" +"778667876","778667879","LT" +"778667880","778667887","FI" +"778667888","778667895","IT" +"778667896","778667903","IE" +"778667904","778667911","GB" +"778667912","778667915","PL" +"778667916","778667919","PT" +"778667920","778667927","NL" +"778667928","778667931","GB" +"778667932","778667935","CZ" +"778667936","778667943","FR" +"778667944","778667947","DE" +"778667948","778667951","IE" +"778667952","778667967","GB" +"778667968","778668015","FR" +"778668016","778668019","DE" +"778668020","778668023","NL" +"778668024","778668027","PT" +"778668028","778668319","FR" +"778668320","778668351","GB" +"778668352","778668359","FR" +"778668360","778668367","PL" +"778668368","778668371","DE" +"778668372","778668375","ES" +"778668376","778668379","GB" +"778668380","778668391","FR" +"778668392","778668395","PT" +"778668396","778668399","ES" +"778668400","778668415","FR" +"778668416","778668495","ES" +"778668496","778668499","PL" +"778668500","778668503","FR" +"778668504","778668507","ES" +"778668508","778668511","PT" +"778668512","778668527","PL" +"778668528","778668535","IT" +"778668536","778668539","DE" +"778668540","778668543","FR" +"778668544","778668559","GB" +"778668560","778668567","IT" +"778668568","778668575","PL" +"778668576","778668607","FR" +"778668608","778668615","IE" +"778668616","778668623","PL" +"778668624","778668639","FR" +"778668640","778668671","PL" +"778668672","778668703","NL" +"778668704","778668707","PL" +"778668708","778668711","ES" +"778668712","778668715","FR" +"778668716","778668719","PL" +"778668720","778668723","PT" +"778668724","778668727","PL" +"778668728","778668731","IE" +"778668732","778668735","FR" +"778668736","778668799","IT" +"778668800","778668863","FR" +"778668864","778668895","DE" +"778668896","778669055","FR" +"778669056","778669087","ES" +"778669088","778669103","FR" +"778669104","778669107","PL" +"778669108","778669111","GB" +"778669112","778669115","FR" +"778669116","778669119","DE" +"778669120","778669151","FI" +"778669152","778669191","FR" +"778669192","778669199","IT" +"778669200","778669207","PL" +"778669208","778669211","CH" +"778669212","778669215","ES" +"778669216","778669219","CH" +"778669220","778669223","FI" +"778669224","778669231","GB" +"778669232","778669247","PL" +"778669248","778669295","FR" +"778669296","778669303","PL" +"778669304","778669439","FR" +"778669440","778669447","GB" +"778669448","778669451","PL" +"778669452","778669455","ES" +"778669456","778669471","DE" +"778669472","778669503","CZ" +"778669504","778669535","ES" +"778669536","778669539","PL" +"778669540","778669543","GB" +"778669544","778669547","FR" +"778669548","778669551","IT" +"778669552","778669567","PL" +"778669568","778669571","DE" +"778669572","778669575","CZ" +"778669576","778669579","NL" +"778669580","778669583","DE" +"778669584","778669587","ES" +"778669588","778669591","FR" +"778669592","778669599","BE" +"778669600","778669615","FR" +"778669616","778669623","GB" +"778669624","778669631","PL" +"778669632","778669663","FR" +"778669664","778669695","DE" +"778669696","778669727","PT" +"778669728","778669759","NL" +"778669760","778669767","DE" +"778669768","778669771","GB" +"778669772","778669775","PL" +"778669776","778669783","DE" +"778669784","778669787","IE" +"778669788","778669791","PL" +"778669792","778669807","DE" +"778669808","778669823","FR" +"778669824","778669855","ES" +"778669856","778669887","FR" +"778669888","778669903","PL" +"778669904","778669935","FR" +"778669936","778669943","DE" +"778669944","778669951","CH" +"778669952","778669959","NL" +"778669960","778669967","GB" +"778669968","778669983","IE" +"778669984","778669999","IT" +"778670000","778670007","PL" +"778670008","778670011","CZ" +"778670012","778670015","LT" +"778670016","778670019","NL" +"778670020","778670035","IT" +"778670036","778670039","GB" +"778670040","778670043","ES" +"778670044","778670079","GB" +"778670080","778670151","FR" +"778670152","778670159","CH" +"778670160","778670163","FR" +"778670164","778670171","GB" +"778670172","778670175","NL" +"778670176","778670207","GB" +"778670208","778670211","DE" +"778670212","778670223","FR" +"778670224","778670239","PL" +"778670240","778670243","ES" +"778670244","778670247","DE" +"778670248","778670255","CZ" +"778670256","778670299","FR" +"778670300","778670303","DE" +"778670304","778670335","FR" +"778670336","778670343","DE" +"778670344","778670347","FR" +"778670348","778670351","PL" +"778670352","778670355","DE" +"778670356","778670359","FR" +"778670360","778670383","DE" +"778670384","778670387","PL" +"778670388","778670391","NL" +"778670392","778670395","CZ" +"778670396","778670399","GB" +"778670400","778670407","PL" +"778670408","778670411","DE" +"778670412","778670415","NL" +"778670416","778670431","FR" +"778670432","778670435","NL" +"778670436","778670439","ES" +"778670440","778670447","PL" +"778670448","778670455","CH" +"778670456","778670495","CZ" +"778670496","778670503","FR" +"778670504","778670511","ES" +"778670512","778670519","NL" +"778670520","778670523","FR" +"778670524","778670527","PT" +"778670528","778670559","FR" +"778670560","778670563","PL" +"778670564","778670567","FI" +"778670568","778670575","FR" +"778670576","778670591","IT" +"778670592","778671103","ES" +"778671104","778671119","GB" +"778671120","778671127","IT" +"778671128","778671135","PT" +"778671136","778671167","BE" +"778671168","778671171","DE" +"778671172","778671175","FR" +"778671176","778671183","ES" +"778671184","778671203","FR" +"778671204","778671211","PL" +"778671212","778671231","FR" +"778671232","778671239","GB" +"778671240","778671243","PL" +"778671244","778671247","ES" +"778671248","778671263","PL" +"778671264","778671279","GB" +"778671280","778671311","FR" +"778671312","778671327","PT" +"778671328","778671331","ES" +"778671332","778671335","DE" +"778671336","778671631","FR" +"778671632","778671647","PL" +"778671648","778671775","FR" +"778671776","778671791","PL" +"778671792","778671807","FR" +"778671808","778671839","ES" +"778671840","778671867","FR" +"778671868","778671871","GB" +"778671872","778671875","PL" +"778671876","778671879","ES" +"778671880","778671883","NL" +"778671884","778671887","ES" +"778671888","778671903","GB" +"778671904","778671907","NL" +"778671908","778671915","FR" +"778671916","778671919","GB" +"778671920","778671935","PT" +"778671936","778671967","FR" +"778671968","778672015","ES" +"778672016","778672055","FR" +"778672056","778672063","PL" +"778672064","778672067","GB" +"778672068","778672071","FR" +"778672072","778672079","GB" +"778672080","778672095","BE" +"778672096","778672103","CH" +"778672104","778672111","NL" +"778672112","778672115","GB" +"778672116","778672119","IT" +"778672120","778672123","ES" +"778672124","778672127","CH" +"778672128","778672255","FR" +"778672256","778672319","BE" +"778672320","778672383","FR" +"778672384","778672447","PL" +"778672448","778672479","DE" +"778672480","778672511","ES" +"778672512","778672543","FR" +"778672544","778672551","ES" +"778672552","778672559","CH" +"778672560","778672563","GB" +"778672564","778672567","IT" +"778672568","778672639","FR" +"778672640","778672703","DE" +"778672704","778672767","CH" +"778672768","778672799","PL" +"778672800","778672803","FR" +"778672804","778672807","DE" +"778672808","778672811","PL" +"778672812","778672815","ES" +"778672816","778672819","LT" +"778672820","778672823","PL" +"778672824","778672831","DE" +"778672832","778672851","FR" +"778672852","778672879","PL" +"778672880","778672887","FR" +"778672888","778672891","PL" +"778672892","778672911","FR" +"778672912","778672919","PL" +"778672920","778672927","FR" +"778672928","778672959","DE" +"778672960","778673071","FR" +"778673072","778673079","DE" +"778673080","778673083","ES" +"778673084","778673087","PT" +"778673088","778673119","FR" +"778673120","778673151","ES" +"778673152","778673187","FR" +"778673188","778673191","DE" +"778673192","778673195","ES" +"778673196","778673199","GB" +"778673200","778673203","CZ" +"778673204","778673207","IE" +"778673208","778673211","DE" +"778673212","778673215","ES" +"778673216","778673263","FR" +"778673264","778673279","IT" +"778673280","778673343","FR" +"778673344","778673359","PL" +"778673360","778673391","GB" +"778673392","778673407","FR" +"778673408","778673663","PL" +"778673664","778673711","FR" +"778673712","778673715","CH" +"778673716","778673719","NL" +"778673720","778673723","PT" +"778673724","778673727","PL" +"778673728","778673807","FR" +"778673808","778673823","IT" +"778673824","778673839","ES" +"778673840","778673843","FR" +"778673844","778673847","GB" +"778673848","778673851","DE" +"778673852","778673855","BE" +"778673856","778673879","FR" +"778673880","778673883","CZ" +"778673884","778673887","FI" +"778673888","778673903","FR" +"778673904","778673907","DE" +"778673908","778673911","CH" +"778673912","778673915","FR" +"778673916","778673919","ES" +"778673920","778674175","NL" +"778674176","778674367","FR" +"778674368","778674387","DE" +"778674388","778674391","BE" +"778674392","778674395","CH" +"778674396","778674399","PT" +"778674400","778674431","FR" +"778674432","778674435","PL" +"778674436","778674439","ES" +"778674440","778674447","PL" +"778674448","778674451","IT" +"778674452","778674455","PL" +"778674456","778674459","IT" +"778674460","778674463","FI" +"778674464","778674471","CH" +"778674472","778674475","BE" +"778674476","778674479","CH" +"778674480","778674487","FR" +"778674488","778674491","CZ" +"778674492","778674495","PL" +"778674496","778674499","CZ" +"778674500","778674503","DE" +"778674504","778674507","PL" +"778674508","778674511","NL" +"778674512","778674527","FR" +"778674528","778674531","DE" +"778674532","778674535","ES" +"778674536","778674539","PT" +"778674540","778674543","PL" +"778674544","778674623","DE" +"778674624","778674635","PL" +"778674636","778674639","ES" +"778674640","778674975","FR" +"778674976","778674979","BE" +"778674980","778674983","DE" +"778674984","778674999","FR" +"778675000","778675003","FI" +"778675004","778675007","GB" +"778675008","778675023","FR" +"778675024","778675039","ES" +"778675040","778675071","FR" +"778675072","778675075","DE" +"778675076","778675079","IT" +"778675080","778675087","ES" +"778675088","778675135","FR" +"778675136","778675151","GB" +"778675152","778675159","FR" +"778675160","778675163","PL" +"778675164","778675167","GB" +"778675168","778675199","FR" +"778675200","778675207","ES" +"778675208","778675215","PL" +"778675216","778675219","PT" +"778675220","778675227","FR" +"778675228","778675231","NL" +"778675232","778675235","GB" +"778675236","778675243","PL" +"778675244","778675247","DE" +"778675248","778675359","FR" +"778675360","778675363","NL" +"778675364","778675367","BE" +"778675368","778675371","CH" +"778675372","778675375","CZ" +"778675376","778675439","FR" +"778675440","778675443","DE" +"778675444","778675447","FR" +"778675448","778675451","PL" +"778675452","778675455","DE" +"778675456","778675459","PL" +"778675460","778675471","FR" +"778675472","778675475","BE" +"778675476","778675479","ES" +"778675480","778675483","CH" +"778675484","778675487","PT" +"778675488","778675495","PL" +"778675496","778675499","DE" +"778675500","778675503","PL" +"778675504","778675507","DE" +"778675508","778675511","GB" +"778675512","778675519","PL" +"778675520","778675535","NL" +"778675536","778675543","GB" +"778675544","778675599","FR" +"778675600","778675615","GB" +"778675616","778675619","PL" +"778675620","778675623","ES" +"778675624","778675627","FR" +"778675628","778675631","PL" +"778675632","778675639","ES" +"778675640","778675647","DE" +"778675648","778675683","FR" +"778675684","778675687","GB" +"778675688","778675691","ES" +"778675692","778675695","FR" +"778675696","778675711","NL" +"778675712","778675735","FR" +"778675736","778675739","PL" +"778675740","778675763","FR" +"778675764","778675767","IE" +"778675768","778675775","ES" +"778675776","778675779","GB" +"778675780","778675783","PL" +"778675784","778675791","LT" +"778675792","778675795","NL" +"778675796","778675799","DE" +"778675800","778675803","GB" +"778675804","778675807","CZ" +"778675808","778675811","PL" +"778675812","778675815","GB" +"778675816","778675819","PL" +"778675820","778675823","GB" +"778675824","778675827","FR" +"778675828","778675831","DE" +"778675832","778675839","FR" +"778675840","778675843","FI" +"778675844","778675847","FR" +"778675848","778675851","GB" +"778675852","778675855","FR" +"778675856","778675859","GB" +"778675860","778675863","IE" +"778675864","778675867","DE" +"778675868","778675871","FI" +"778675872","778675887","FR" +"778675888","778675891","ES" +"778675892","778675895","FR" +"778675896","778675903","PL" +"778675904","778675907","CH" +"778675908","778675911","CZ" +"778675912","778675915","NL" +"778675916","778675935","DE" +"778675936","778675943","ES" +"778675944","778676095","FR" +"778676096","778676099","DE" +"778676100","778676103","CZ" +"778676104","778676115","GB" +"778676116","778676119","FR" +"778676120","778676127","PL" +"778676128","778676131","ES" +"778676132","778676135","CZ" +"778676136","778676139","DE" +"778676140","778676143","PL" +"778676144","778676159","DE" +"778676160","778676183","FR" +"778676184","778676191","CZ" +"778676192","778676207","IT" +"778676208","778676211","FI" +"778676212","778676215","IE" +"778676216","778676219","FR" +"778676220","778676223","GB" +"778676224","778676415","FR" +"778676416","778676423","ES" +"778676424","778676427","PL" +"778676428","778676439","FR" +"778676440","778676443","PL" +"778676444","778676447","CH" +"778676448","778676463","FR" +"778676464","778676479","PL" +"778676480","778676543","NL" +"778676544","778676575","GB" +"778676576","778676579","FR" +"778676580","778676583","DE" +"778676584","778676587","BE" +"778676588","778676591","DE" +"778676592","778676607","FR" +"778676608","778676611","PL" +"778676612","778676615","PT" +"778676616","778676619","BE" +"778676620","778676623","FR" +"778676624","778676627","GB" +"778676628","778676631","ES" +"778676632","778676635","FR" +"778676636","778676639","DE" +"778676640","778676655","ES" +"778676656","778676687","FR" +"778676688","778676691","ES" +"778676692","778676695","PL" +"778676696","778676719","FR" +"778676720","778676723","GB" +"778676724","778676727","PT" +"778676728","778676731","PL" +"778676732","778676735","IT" +"778676736","778676743","FR" +"778676744","778676747","CH" +"778676748","778676751","CZ" +"778676752","778676767","ES" +"778676768","778676771","PL" +"778676772","778676775","ES" +"778676776","778676779","PL" +"778676780","778676799","FR" +"778676800","778676803","GB" +"778676804","778676807","IT" +"778676808","778676811","FI" +"778676812","778676815","IE" +"778676816","778676823","LT" +"778676824","778676827","GB" +"778676828","778676831","NL" +"778676832","778676847","FR" +"778676848","778676851","NL" +"778676852","778676855","LT" +"778676856","778676859","IE" +"778676860","778676863","DE" +"778676864","778676991","PL" +"778676992","778676999","FR" +"778677000","778677007","PL" +"778677008","778677023","FR" +"778677024","778677055","DE" +"778677056","778677059","NL" +"778677060","778677063","IT" +"778677064","778677075","FR" +"778677076","778677079","DE" +"778677080","778677083","IT" +"778677084","778677087","DE" +"778677088","778677099","FR" +"778677100","778677103","IE" +"778677104","778677107","GB" +"778677108","778677119","PL" +"778677120","778677123","DE" +"778677124","778677127","GB" +"778677128","778677131","FR" +"778677132","778677135","BE" +"778677136","778677151","FR" +"778677152","778677167","DE" +"778677168","778677175","CZ" +"778677176","778677183","NL" +"778677184","778677215","FI" +"778677216","778677247","PL" +"778677248","778677251","FR" +"778677252","778677255","GB" +"778677256","778677259","ES" +"778677260","778677311","FR" +"778677312","778677327","PL" +"778677328","778677331","FI" +"778677332","778677335","PT" +"778677336","778677339","CH" +"778677340","778677343","CZ" +"778677344","778677375","FR" +"778677376","778677391","GB" +"778677392","778677399","FR" +"778677400","778677403","PT" +"778677404","778677407","CZ" +"778677408","778677411","CH" +"778677412","778677427","PL" +"778677428","778677431","DE" +"778677432","778677435","FR" +"778677436","778677439","PL" +"778677440","778677471","FR" +"778677472","778677475","DE" +"778677476","778677479","CZ" +"778677480","778677503","PL" +"778677504","778677507","IE" +"778677508","778677511","DE" +"778677512","778677515","IT" +"778677516","778677519","GB" +"778677520","778677523","FR" +"778677524","778677527","DE" +"778677528","778677531","BE" +"778677532","778677535","PT" +"778677536","778677543","FI" +"778677544","778677547","ES" +"778677548","778677551","FR" +"778677552","778677559","PL" +"778677560","778677567","ES" +"778677568","778677699","FR" +"778677700","778677703","GB" +"778677704","778677711","PL" +"778677712","778677719","FR" +"778677720","778677723","GB" +"778677724","778677727","PL" +"778677728","778677823","FR" +"778677824","778677839","NL" +"778677840","778677855","PL" +"778677856","778677859","ES" +"778677860","778677863","LT" +"778677864","778677871","IT" +"778677872","778677875","PL" +"778677876","778677879","GB" +"778677880","778677883","LT" +"778677884","778677887","BE" +"778677888","778677903","ES" +"778677904","778677919","FR" +"778677920","778677923","CH" +"778677924","778677927","PT" +"778677928","778677931","GB" +"778677932","778677935","DE" +"778677936","778677939","FR" +"778677940","778677943","BE" +"778677944","778677947","GB" +"778677948","778677951","DE" +"778677952","778677967","FR" +"778677968","778677983","GB" +"778677984","778677999","FR" +"778678000","778678003","BE" +"778678004","778678007","PL" +"778678008","778678011","GB" +"778678012","778678015","FR" +"778678016","778678019","PL" +"778678020","778678023","DE" +"778678024","778678027","ES" +"778678028","778678031","FR" +"778678032","778678039","NL" +"778678040","778678047","PL" +"778678048","778678115","FR" +"778678116","778678119","ES" +"778678120","778678127","IT" +"778678128","778678143","FR" +"778678144","778678159","GB" +"778678160","778678163","PL" +"778678164","778678167","BE" +"778678168","778678191","PL" +"778678192","778678207","FR" +"778678208","778678271","PL" +"778678272","778678783","DE" +"778678784","778678799","FR" +"778678800","778678803","PL" +"778678804","778678807","DE" +"778678808","778678815","FR" +"778678816","778678831","PL" +"778678832","778678835","FR" +"778678836","778678839","BE" +"778678840","778678847","IT" +"778678848","778678851","FR" +"778678852","778678855","ES" +"778678856","778678859","CZ" +"778678860","778678863","GB" +"778678864","778678871","PL" +"778678872","778678875","ES" +"778678876","778678879","NL" +"778678880","778678895","FR" +"778678896","778678903","GB" +"778678904","778678911","PL" +"778678912","778678919","FR" +"778678920","778678927","ES" +"778678928","778678943","BE" +"778678944","778678959","PL" +"778678960","778678967","FR" +"778678968","778678975","GB" +"778678976","778679007","FR" +"778679008","778679023","PL" +"778679024","778679031","GB" +"778679032","778679035","FR" +"778679036","778679055","PL" +"778679056","778679071","BE" +"778679072","778679075","FR" +"778679076","778679079","BE" +"778679080","778679087","FR" +"778679088","778679091","PL" +"778679092","778679095","CZ" +"778679096","778679099","CH" +"778679100","778679103","IT" +"778679104","778679123","PL" +"778679124","778679127","FR" +"778679128","778679151","DE" +"778679152","778679215","FR" +"778679216","778679231","PT" +"778679232","778679263","ES" +"778679264","778679267","IT" +"778679268","778679271","FR" +"778679272","778679279","PL" +"778679280","778679295","ES" +"778679296","778679491","FR" +"778679492","778679519","PL" +"778679520","778679523","LT" +"778679524","778679527","PL" +"778679528","778679531","NL" +"778679532","778679535","GB" +"778679536","778679551","ES" +"778679552","778679615","FR" +"778679616","778679679","ES" +"778679680","778679695","PT" +"778679696","778679711","GB" +"778679712","778679807","FR" +"778679808","778679823","IT" +"778679824","778679839","PL" +"778679840","778679843","CH" +"778679844","778679847","DE" +"778679848","778679855","FR" +"778679856","778679871","DE" +"778679872","778679903","PL" +"778679904","778679907","ES" +"778679908","778679911","FR" +"778679912","778679915","ES" +"778679916","778679919","FR" +"778679920","778679935","GB" +"778679936","778680079","FR" +"778680080","778680087","GB" +"778680088","778680091","IT" +"778680092","778680095","PL" +"778680096","778680111","IT" +"778680112","778680127","ES" +"778680128","778680143","PL" +"778680144","778680147","FR" +"778680148","778680151","GB" +"778680152","778680155","ES" +"778680156","778680159","BE" +"778680160","778680175","PT" +"778680176","778680183","ES" +"778680184","778680191","IT" +"778680192","778680195","FR" +"778680196","778680199","DE" +"778680200","778680203","NL" +"778680204","778680207","ES" +"778680208","778680227","FR" +"778680228","778680231","IE" +"778680232","778680235","FI" +"778680236","778680239","DE" +"778680240","778680255","FR" +"778680256","778680271","IT" +"778680272","778680279","BE" +"778680280","778680287","PL" +"778680288","778680319","DE" +"778680320","778680447","GB" +"778680448","778680451","PT" +"778680452","778680455","IE" +"778680456","778680471","FR" +"778680472","778680475","ES" +"778680476","778680479","IE" +"778680480","778680559","FR" +"778680560","778680575","ES" +"778680576","778680639","NL" +"778680640","778680643","GB" +"778680644","778680647","PT" +"778680648","778680655","ES" +"778680656","778680679","FR" +"778680680","778680683","PL" +"778680684","778680687","DE" +"778680688","778680767","FR" +"778680768","778680831","BE" +"778680832","778680895","IT" +"778680896","778680959","CH" +"778680960","778681023","DE" +"778681024","778681087","FI" +"778681088","778681343","FR" +"778681344","778681359","GB" +"778681360","778681367","ES" +"778681368","778681371","NL" +"778681372","778681375","LT" +"778681376","778681383","FR" +"778681384","778681391","DE" +"778681392","778681399","FR" +"778681400","778681403","DE" +"778681404","778681407","ES" +"778681408","778681419","GB" +"778681420","778681423","BE" +"778681424","778681431","FR" +"778681432","778681435","DE" +"778681436","778681439","ES" +"778681440","778681455","GB" +"778681456","778681459","NL" +"778681460","778681463","PL" +"778681464","778681471","ES" +"778681472","778681475","DE" +"778681476","778681479","PT" +"778681480","778681487","FR" +"778681488","778681503","GB" +"778681504","778681507","DE" +"778681508","778681511","IT" +"778681512","778681515","PL" +"778681516","778681523","ES" +"778681524","778681527","FR" +"778681528","778681531","PL" +"778681532","778681535","IT" +"778681536","778681543","FR" +"778681544","778681547","GB" +"778681548","778681551","PT" +"778681552","778681583","FR" +"778681584","778681587","PL" +"778681588","778681591","FR" +"778681592","778681595","LT" +"778681596","778681599","GB" +"778681600","778681615","DE" +"778681616","778681619","ES" +"778681620","778681623","DE" +"778681624","778681631","FR" +"778681632","778681639","IT" +"778681640","778681643","PL" +"778681644","778681647","DE" +"778681648","778681651","FR" +"778681652","778681655","CH" +"778681656","778681667","DE" +"778681668","778681671","FR" +"778681672","778681675","GB" +"778681676","778681707","FR" +"778681708","778681711","ES" +"778681712","778681727","FR" +"778681728","778681743","ES" +"778681744","778681747","FR" +"778681748","778681751","IT" +"778681752","778681759","FR" +"778681760","778681763","CZ" +"778681764","778681767","NL" +"778681768","778681771","PL" +"778681772","778681775","IT" +"778681776","778681779","FR" +"778681780","778681783","CZ" +"778681784","778681787","IE" +"778681788","778681791","NL" +"778681792","778681823","DE" +"778681824","778681855","FR" +"778681856","778681859","GB" +"778681860","778681871","FR" +"778681872","778681887","IT" +"778681888","778681903","LT" +"778681904","778681919","NL" +"778681920","778681983","GB" +"778681984","778681999","PT" +"778682000","778682015","GB" +"778682016","778682031","PL" +"778682032","778682047","BE" +"778682048","778682063","NL" +"778682064","778682079","PL" +"778682080","778682103","FR" +"778682104","778682111","ES" +"778682112","778682115","FR" +"778682116","778682119","PL" +"778682120","778682123","CH" +"778682124","778682127","FR" +"778682128","778682143","IE" +"778682144","778682175","CH" +"778682176","778682195","IT" +"778682196","778682199","NL" +"778682200","778682203","PL" +"778682204","778682207","PT" +"778682208","778682239","FR" +"778682240","778682243","BE" +"778682244","778682247","LT" +"778682248","778682295","FR" +"778682296","778682303","PL" +"778682304","778682319","FR" +"778682320","778682327","DE" +"778682328","778682331","FR" +"778682332","778682335","NL" +"778682336","778682351","IT" +"778682352","778682367","GB" +"778682368","778690559","FR" +"778690560","778690591","DE" +"778690592","778690623","FR" +"778690624","778690639","PL" +"778690640","778690655","IT" +"778690656","778690687","PT" +"778690688","778690703","IE" +"778690704","778690723","FR" +"778690724","778690727","GB" +"778690728","778690735","FR" +"778690736","778690751","PT" +"778690752","778690783","DE" +"778690784","778690815","FR" +"778690816","778690879","ES" +"778690880","778690883","DE" +"778690884","778690887","PL" +"778690888","778690927","FR" +"778690928","778690931","PL" +"778690932","778690935","ES" +"778690936","778690943","IT" +"778690944","778690959","GB" +"778690960","778690975","PL" +"778690976","778690983","PT" +"778690984","778690991","BE" +"778690992","778690999","IT" +"778691000","778691003","PT" +"778691004","778691007","GB" +"778691008","778691039","FR" +"778691040","778691043","PL" +"778691044","778691047","ES" +"778691048","778691051","PL" +"778691052","778691055","PT" +"778691056","778691063","NL" +"778691064","778691067","LT" +"778691068","778691071","PL" +"778691072","778691375","FR" +"778691376","778691391","PL" +"778691392","778691423","PT" +"778691424","778691427","FR" +"778691428","778691431","CZ" +"778691432","778691435","BE" +"778691436","778691439","FR" +"778691440","778691443","DE" +"778691444","778691519","FR" +"778691520","778691583","GB" +"778691584","778691615","FR" +"778691616","778691619","DE" +"778691620","778691627","NL" +"778691628","778691631","PL" +"778691632","778691743","FR" +"778691744","778691747","PL" +"778691748","778691751","ES" +"778691752","778691755","FI" +"778691756","778691759","ES" +"778691760","778691763","GB" +"778691764","778691767","DE" +"778691768","778691775","FR" +"778691776","778691791","GB" +"778691792","778691795","DE" +"778691796","778691799","PL" +"778691800","778691803","ES" +"778691804","778691807","PL" +"778691808","778691839","ES" +"778691840","778691855","CH" +"778691856","778691967","FR" +"778691968","778691971","NL" +"778691972","778691975","FR" +"778691976","778691983","ES" +"778691984","778691987","GB" +"778691988","778691991","IT" +"778691992","778692015","FR" +"778692016","778692031","IE" +"778692032","778692039","DE" +"778692040","778692063","PL" +"778692064","778692095","CH" +"778692096","778692099","PL" +"778692100","778692103","DE" +"778692104","778692107","CH" +"778692108","778692115","PL" +"778692116","778692127","FR" +"778692128","778692143","NL" +"778692144","778692191","FR" +"778692192","778692195","ES" +"778692196","778692199","CZ" +"778692200","778692207","ES" +"778692208","778692223","FR" +"778692224","778692255","DE" +"778692256","778692319","FR" +"778692320","778692351","IE" +"778692352","778692615","FR" +"778692616","778692619","PL" +"778692620","778692623","IE" +"778692624","778692639","NL" +"778692640","778692647","FR" +"778692648","778692651","DE" +"778692652","778692671","PL" +"778692672","778692679","DE" +"778692680","778692683","ES" +"778692684","778692687","CZ" +"778692688","778692703","FR" +"778692704","778692711","NL" +"778692712","778692719","GB" +"778692720","778692723","PL" +"778692724","778692735","FR" +"778692736","778692739","ES" +"778692740","778692743","PL" +"778692744","778692747","PT" +"778692748","778692751","ES" +"778692752","778692767","FR" +"778692768","778692783","ES" +"778692784","778692787","GB" +"778692788","778692791","DE" +"778692792","778692799","FR" +"778692800","778692807","IE" +"778692808","778692811","CH" +"778692812","778692815","DE" +"778692816","778692823","NL" +"778692824","778692827","IT" +"778692828","778692831","GB" +"778692832","778692835","BE" +"778692836","778692839","PT" +"778692840","778692843","ES" +"778692844","778692847","PL" +"778692848","778692863","ES" +"778692864","778692879","IE" +"778692880","778692883","PL" +"778692884","778692887","FR" +"778692888","778692891","PL" +"778692892","778692895","GB" +"778692896","778692911","FR" +"778692912","778692927","NL" +"778692928","778692959","DE" +"778692960","778692967","FR" +"778692968","778692971","LT" +"778692972","778692975","PT" +"778692976","778692983","DE" +"778692984","778692991","FR" +"778692992","778693023","GB" +"778693024","778693027","PL" +"778693028","778693031","ES" +"778693032","778693035","FR" +"778693036","778693039","DE" +"778693040","778693055","PT" +"778693056","778693059","CH" +"778693060","778693063","PL" +"778693064","778693067","CZ" +"778693068","778693071","IT" +"778693072","778693075","FR" +"778693076","778693079","PL" +"778693080","778693087","FR" +"778693088","778693091","IE" +"778693092","778693095","FR" +"778693096","778693099","GB" +"778693100","778693103","ES" +"778693104","778693119","FR" +"778693120","778693135","GB" +"778693136","778693139","FR" +"778693140","778693143","PL" +"778693144","778693151","FR" +"778693152","778693155","GB" +"778693156","778693159","FR" +"778693160","778693167","BE" +"778693168","778693171","CZ" +"778693172","778693183","FR" +"778693184","778693223","PL" +"778693224","778693227","FR" +"778693228","778693231","IT" +"778693232","778693235","DE" +"778693236","778693239","PL" +"778693240","778693243","ES" +"778693244","778693247","PL" +"778693248","778693279","FR" +"778693280","778693295","DE" +"778693296","778693311","CH" +"778693312","778693327","FR" +"778693328","778693391","GB" +"778693392","778693427","FR" +"778693428","778693431","CZ" +"778693432","778693439","FR" +"778693440","778693455","GB" +"778693456","778693459","DE" +"778693460","778693511","FR" +"778693512","778693515","CZ" +"778693516","778693567","FR" +"778693568","778693599","BE" +"778693600","778693607","DE" +"778693608","778693611","PL" +"778693612","778693615","GB" +"778693616","778693619","FR" +"778693620","778693623","DE" +"778693624","778693627","FR" +"778693628","778693631","PL" +"778693632","778693663","FR" +"778693664","778693679","NL" +"778693680","778693695","DE" +"778693696","778693759","IE" +"778693760","778693763","NL" +"778693764","778693767","ES" +"778693768","778693771","PL" +"778693772","778693775","FR" +"778693776","778693791","IT" +"778693792","778693795","PL" +"778693796","778693823","FR" +"778693824","778693839","PT" +"778693840","778693855","FR" +"778693856","778693887","DE" +"778693888","778693891","PT" +"778693892","778693895","FR" +"778693896","778693899","ES" +"778693900","778693903","GB" +"778693904","778693919","IE" +"778693920","778693927","CH" +"778693928","778693931","PL" +"778693932","778693935","DE" +"778693936","778693951","GB" +"778693952","778693967","FR" +"778693968","778693971","ES" +"778693972","778693975","PL" +"778693976","778693983","FR" +"778693984","778694015","IE" +"778694016","778694143","FR" +"778694144","778694147","DE" +"778694148","778694155","PL" +"778694156","778694159","NL" +"778694160","778694163","GB" +"778694164","778694171","PL" +"778694172","778694183","FR" +"778694184","778694187","PL" +"778694188","778694191","ES" +"778694192","778694195","BE" +"778694196","778694199","NL" +"778694200","778694203","IT" +"778694204","778694291","FR" +"778694292","778694295","DE" +"778694296","778694299","FR" +"778694300","778694303","PL" +"778694304","778694307","NL" +"778694308","778694315","PL" +"778694316","778694319","GB" +"778694320","778694335","FR" +"778694336","778694351","IT" +"778694352","778694415","FR" +"778694416","778694463","IT" +"778694464","778694479","FR" +"778694480","778694511","IT" +"778694512","778694515","LT" +"778694516","778694527","ES" +"778694528","778694543","PL" +"778694544","778694555","DE" +"778694556","778694559","NL" +"778694560","778694563","PL" +"778694564","778694567","DE" +"778694568","778694571","PT" +"778694572","778694575","BE" +"778694576","778694591","PT" +"778694592","778694623","FR" +"778694624","778694627","DE" +"778694628","778694639","FR" +"778694640","778694643","PL" +"778694644","778694647","PT" +"778694648","778694655","FR" +"778694656","778694663","DE" +"778694664","778694671","PT" +"778694672","778694679","FR" +"778694680","778694687","PL" +"778694688","778694703","GB" +"778694704","778694719","FR" +"778694720","778694783","IT" +"778694784","778694815","FR" +"778694816","778694823","BE" +"778694824","778694827","FI" +"778694828","778694831","PL" +"778694832","778694839","IT" +"778694840","778694847","PL" +"778694848","778694911","FR" +"778694912","778694943","LT" +"778694944","778694959","FR" +"778694960","778694975","ES" +"778694976","778695007","GB" +"778695008","778695039","ES" +"778695040","778695071","IT" +"778695072","778695075","FR" +"778695076","778695079","PL" +"778695080","778695083","NL" +"778695084","778695087","PL" +"778695088","778695103","PT" +"778695104","778695167","PL" +"778695168","778695183","FR" +"778695184","778695191","GB" +"778695192","778695203","PL" +"778695204","778695207","ES" +"778695208","778695215","FR" +"778695216","778695231","DE" +"778695232","778695295","NL" +"778695296","778695299","FR" +"778695300","778695303","IT" +"778695304","778695307","PL" +"778695308","778695327","FR" +"778695328","778695331","IE" +"778695332","778695335","GB" +"778695336","778695339","PL" +"778695340","778695343","FR" +"778695344","778695347","PL" +"778695348","778695351","ES" +"778695352","778695383","FR" +"778695384","778695399","DE" +"778695400","778695415","GB" +"778695416","778695423","IT" +"778695424","778695431","PT" +"778695432","778695439","ES" +"778695440","778695447","FI" +"778695448","778695455","NL" +"778695456","778695471","FR" +"778695472","778695479","PL" +"778695480","778695487","FR" +"778695488","778695503","BE" +"778695504","778695519","FR" +"778695520","778695535","GB" +"778695536","778695551","FR" +"778695552","778695555","BE" +"778695556","778695559","CH" +"778695560","778695563","DE" +"778695564","778695575","PL" +"778695576","778695579","ES" +"778695580","778695583","FI" +"778695584","778695615","PL" +"778695616","778695623","DE" +"778695624","778695627","CZ" +"778695628","778695663","FR" +"778695664","778695679","NL" +"778695680","778695711","PT" +"778695712","778695751","FR" +"778695752","778695759","PL" +"778695760","778695763","FR" +"778695764","778695767","PL" +"778695768","778695775","ES" +"778695776","778695795","FR" +"778695796","778695799","ES" +"778695800","778695807","FR" +"778695808","778695823","DE" +"778695824","778695839","FR" +"778695840","778695903","DE" +"778695904","778695911","FI" +"778695912","778695919","FR" +"778695920","778695923","PL" +"778695924","778695927","CZ" +"778695928","778695931","FI" +"778695932","778695943","ES" +"778695944","778695951","FI" +"778695952","778695967","DE" +"778695968","778695971","ES" +"778695972","778695975","PL" +"778695976","778695983","FR" +"778695984","778695987","PL" +"778695988","778695991","FR" +"778695992","778695995","GB" +"778695996","778695999","BE" +"778696000","778696015","FR" +"778696016","778696019","PL" +"778696020","778696023","ES" +"778696024","778696027","DE" +"778696028","778696031","GB" +"778696032","778696047","FR" +"778696048","778696063","ES" +"778696064","778696099","FR" +"778696100","778696103","GB" +"778696104","778696107","FR" +"778696108","778696111","DE" +"778696112","778696127","FR" +"778696128","778696159","DE" +"778696160","778696175","GB" +"778696176","778696183","DE" +"778696184","778696187","NL" +"778696188","778696199","FR" +"778696200","778696203","IT" +"778696204","778696207","ES" +"778696208","778696211","IE" +"778696212","778696215","DE" +"778696216","778696219","IT" +"778696220","778696223","GB" +"778696224","778696227","NL" +"778696228","778696231","PL" +"778696232","778696239","CH" +"778696240","778696247","DE" +"778696248","778696251","PL" +"778696252","778696255","GB" +"778696256","778696263","IT" +"778696264","778696287","ES" +"778696288","778696335","DE" +"778696336","778696339","PL" +"778696340","778696343","IT" +"778696344","778696347","CH" +"778696348","778696351","PL" +"778696352","778696383","ES" +"778696384","778696415","IE" +"778696416","778696479","FR" +"778696480","778696483","GB" +"778696484","778696487","ES" +"778696488","778696495","PL" +"778696496","778696499","ES" +"778696500","778696503","FR" +"778696504","778696511","IT" +"778696512","778696543","DE" +"778696544","778696559","FR" +"778696560","778696567","DE" +"778696568","778696575","ES" +"778696576","778696591","GB" +"778696592","778696639","IE" +"778696640","778696643","ES" +"778696644","778696647","NL" +"778696648","778696655","FR" +"778696656","778696659","NL" +"778696660","778696663","CH" +"778696664","778696667","FI" +"778696668","778696671","IE" +"778696672","778696687","CH" +"778696688","778696691","BE" +"778696692","778696695","FI" +"778696696","778696699","FR" +"778696700","778696703","GB" +"778696704","778696959","FR" +"778696960","778696975","IT" +"778696976","778696979","GB" +"778696980","778696983","FR" +"778696984","778696987","ES" +"778696988","778696991","FR" +"778696992","778696995","NL" +"778696996","778696999","ES" +"778697000","778697007","FR" +"778697008","778697015","IE" +"778697016","778697019","PL" +"778697020","778697023","ES" +"778697024","778697059","DE" +"778697060","778697063","FR" +"778697064","778697067","PL" +"778697068","778697071","FR" +"778697072","778697087","IT" +"778697088","778697095","IE" +"778697096","778697099","FR" +"778697100","778697103","ES" +"778697104","778697151","IE" +"778697152","778697167","ES" +"778697168","778697171","FR" +"778697172","778697175","DE" +"778697176","778697179","PL" +"778697180","778697183","GB" +"778697184","778697259","FR" +"778697260","778697263","CH" +"778697264","778697271","FR" +"778697272","778697279","PL" +"778697280","778697287","IE" +"778697288","778697291","FR" +"778697292","778697295","IT" +"778697296","778697307","NL" +"778697308","778697311","GB" +"778697312","778697343","PL" +"778697344","778697375","DE" +"778697376","778697387","FR" +"778697388","778697391","ES" +"778697392","778697407","GB" +"778697408","778697415","PT" +"778697416","778697423","BE" +"778697424","778697435","FR" +"778697436","778697439","GB" +"778697440","778697455","FR" +"778697456","778697459","IT" +"778697460","778697463","CZ" +"778697464","778697467","NL" +"778697468","778697471","PL" +"778697472","778697675","FR" +"778697676","778697679","DE" +"778697680","778697683","PL" +"778697684","778697687","FR" +"778697688","778697695","ES" +"778697696","778697727","FR" +"778697728","778697791","FI" +"778697792","778697807","ES" +"778697808","778697815","PL" +"778697816","778697819","FR" +"778697820","778697823","IT" +"778697824","778697835","FR" +"778697836","778697839","GB" +"778697840","778697847","FR" +"778697848","778697851","PL" +"778697852","778697927","FR" +"778697928","778697935","DE" +"778697936","778697943","PL" +"778697944","778697947","CH" +"778697948","778697951","FR" +"778697952","778697955","DE" +"778697956","778697959","IE" +"778697960","778697967","ES" +"778697968","778697975","FR" +"778697976","778697979","BE" +"778697980","778697983","FI" +"778697984","778698239","NL" +"778698240","778698247","GB" +"778698248","778698251","ES" +"778698252","778698255","PL" +"778698256","778698287","FR" +"778698288","778698295","FI" +"778698296","778698303","IE" +"778698304","778698399","FR" +"778698400","778698447","IE" +"778698448","778698451","NL" +"778698452","778698455","PL" +"778698456","778698459","CZ" +"778698460","778698463","PL" +"778698464","778698467","NL" +"778698468","778698471","PL" +"778698472","778698479","IT" +"778698480","778698495","FR" +"778698496","778698499","IE" +"778698500","778698503","FR" +"778698504","778698511","CH" +"778698512","778698519","FI" +"778698520","778698527","FR" +"778698528","778698531","PT" +"778698532","778698535","CH" +"778698536","778698539","PL" +"778698540","778698543","FR" +"778698544","778698551","DE" +"778698552","778698555","PL" +"778698556","778698559","IT" +"778698560","778698627","FR" +"778698628","778698631","IE" +"778698632","778698635","PL" +"778698636","778698639","ES" +"778698640","778698643","NL" +"778698644","778698647","PL" +"778698648","778698655","ES" +"778698656","778698667","FR" +"778698668","778698671","ES" +"778698672","778698687","IE" +"778698688","778698695","LT" +"778698696","778698703","FR" +"778698704","778698707","DE" +"778698708","778698711","ES" +"778698712","778698715","IE" +"778698716","778698719","CZ" +"778698720","778698751","FR" +"778698752","778764287","TR" +"778764288","778829823","HU" +"778829824","778895359","RO" +"778895360","778960895","LV" +"778960896","779026431","DE" +"779026432","779091967","RU" +"779091968","779223039","PL" +"779223040","779354111","DE" +"779354112","779485183","IL" +"779485184","779616255","UA" +"779616256","779747327","IL" +"779747328","779878399","SI" +"779878400","780009471","AT" +"780009472","780140543","CH" +"780140544","780206079","DE" +"780206080","780271615","NL" +"780271616","780337151","AM" +"780337152","780402687","EE" +"780402688","780468223","FI" +"780468224","780533759","UA" +"780533760","780599295","PL" +"780599296","780664831","CZ" +"780664832","780665087","NL" +"780665088","780665343","DE" +"780665344","780665599","FR" +"780665600","780665855","GB" +"780665856","780666111","SA" +"780666112","780666367","IT" +"780666368","780666623","AX" +"780666624","780666879","AF" +"780666880","780667135","AL" +"780667136","780667391","DZ" +"780667392","780667647","AS" +"780667648","780667903","AD" +"780667904","780668159","AM" +"780668160","780668415","AT" +"780668416","780668671","AZ" +"780668672","780668927","BH" +"780668928","780669183","BY" +"780669184","780669439","BE" +"780669440","780669695","BA" +"780669696","780669951","BG" +"780669952","780670207","HR" +"780670208","780670463","CY" +"780670464","780670719","CZ" +"780670720","780670975","DK" +"780670976","780671231","EE" +"780671232","780671487","FO" +"780671488","780671743","FI" +"780671744","780671999","FR" +"780672000","780672255","GE" +"780672256","780672511","DE" +"780672512","780672767","GI" +"780672768","780673023","GR" +"780673024","780673279","GL" +"780673280","780673535","GG" +"780673536","780673791","VA" +"780673792","780674047","HU" +"780674048","780674303","IS" +"780674304","780674559","IR" +"780674560","780674815","IQ" +"780674816","780675071","IE" +"780675072","780675327","IM" +"780675328","780675583","IL" +"780675584","780675839","IT" +"780675840","780676095","JE" +"780676096","780676351","JO" +"780676352","780676607","KZ" +"780676608","780676863","KW" +"780676864","780677119","KG" +"780677120","780677375","LV" +"780677376","780677631","LB" +"780677632","780677887","LI" +"780677888","780678143","LT" +"780678144","780678399","LU" +"780678400","780678655","MK" +"780678656","780678911","MT" +"780678912","780679167","MD" +"780679168","780679423","MC" +"780679424","780679679","ME" +"780679680","780679935","NL" +"780679936","780680447","NO" +"780680448","780680703","PS" +"780680704","780680959","PL" +"780680960","780681215","PT" +"780681216","780681471","QA" +"780681472","780681727","RO" +"780681728","780681983","RU" +"780681984","780682239","SM" +"780682240","780682495","SA" +"780682496","780682751","RS" +"780682752","780683007","SK" +"780683008","780683263","SI" +"780683264","780683519","ES" +"780683520","780683775","SJ" +"780683776","780684031","SE" +"780684032","780684287","CH" +"780684288","780684543","SY" +"780684544","780684799","TJ" +"780684800","780685055","TR" +"780685056","780685311","TM" +"780685312","780685567","UA" +"780685568","780685823","AE" +"780685824","780686079","GB" +"780686080","780686335","UZ" +"780686336","780686591","YE" +"780686592","780686847","AX" +"780686848","780687103","AL" +"780687104","780687359","AD" +"780687360","780687615","AM" +"780687616","780687871","AT" +"780687872","780688127","AZ" +"780688128","780688383","BH" +"780688384","780688639","BY" +"780688640","780688895","BE" +"780688896","780689151","BA" +"780689152","780689407","BG" +"780689408","780689663","HR" +"780689664","780689919","CY" +"780689920","780690175","CZ" +"780690176","780690431","DK" +"780690432","780690687","EE" +"780690688","780690943","FO" +"780690944","780691199","FI" +"780691200","780691455","FR" +"780691456","780691711","GE" +"780691712","780691967","DE" +"780691968","780692223","GI" +"780692224","780692479","GR" +"780692480","780692735","GL" +"780692736","780692991","GG" +"780692992","780693247","VA" +"780693248","780693503","HU" +"780693504","780693759","IS" +"780693760","780694015","IR" +"780694016","780694271","IQ" +"780694272","780694527","IE" +"780694528","780694783","IL" +"780694784","780695039","IT" +"780695040","780695295","JE" +"780695296","780695551","JO" +"780695552","780695807","KZ" +"780695808","780696063","KW" +"780696064","780696319","LB" +"780696320","780696575","LI" +"780696576","780696831","LT" +"780696832","780697087","LU" +"780697088","780697343","MK" +"780697344","780697599","MT" +"780697600","780697855","NL" +"780697856","780698111","IT" +"780698112","780698367","ES" +"780698368","780698623","DE" +"780698624","780698879","FR" +"780698880","780699135","RU" +"780699136","780699391","RO" +"780699392","780699647","BG" +"780699648","780699903","DK" +"780699904","780700159","AT" +"780700160","780700415","FI" +"780700416","780700671","GR" +"780700672","780700927","PL" +"780700928","780701183","PT" +"780701184","780701439","SE" +"780701440","780701695","CH" +"780701696","780701951","SA" +"780701952","780702207","AD" +"780702208","780702463","AE" +"780702464","780702719","AF" +"780702720","780702975","AG" +"780702976","780703231","AI" +"780703232","780703487","AL" +"780703488","780703743","AM" +"780703744","780703999","AO" +"780704000","780704255","AQ" +"780704256","780704511","AR" +"780704512","780704767","AS" +"780704768","780705023","AT" +"780705024","780705279","AU" +"780705280","780705535","AW" +"780705536","780705791","AX" +"780705792","780706047","AZ" +"780706048","780706303","BA" +"780706304","780706559","BB" +"780706560","780706815","BD" +"780706816","780707071","BE" +"780707072","780707327","BF" +"780707328","780707583","BG" +"780707584","780707839","BH" +"780707840","780708095","BI" +"780708096","780708351","BJ" +"780708352","780708607","BM" +"780708608","780708863","BN" +"780708864","780709119","BO" +"780709120","780709375","BR" +"780709376","780709631","BS" +"780709632","780709887","BT" +"780709888","780710143","BV" +"780710144","780710399","BW" +"780710400","780710655","BY" +"780710656","780710911","BZ" +"780710912","780711167","CA" +"780711168","780711423","CC" +"780711424","780711679","CD" +"780711680","780711935","CF" +"780711936","780712191","CG" +"780712192","780712447","CH" +"780712448","780712703","CI" +"780712704","780712959","CK" +"780712960","780713215","CL" +"780713216","780713471","CM" +"780713472","780713727","CN" +"780713728","780713983","CO" +"780713984","780714239","CR" +"780714240","780714495","CU" +"780714496","780714751","CV" +"780714752","780715263","CY" +"780715264","780715519","CZ" +"780715520","780715775","DE" +"780715776","780716031","DJ" +"780716032","780716287","DK" +"780716288","780716543","DM" +"780716544","780716799","DO" +"780716800","780717055","DZ" +"780717056","780717311","EC" +"780717312","780717567","EE" +"780717568","780717823","EG" +"780717824","780718079","EH" +"780718080","780718335","ER" +"780718336","780718591","ES" +"780718592","780718847","ET" +"780718848","780719103","FI" +"780719104","780719359","FJ" +"780719360","780719615","FK" +"780719616","780719871","FM" +"780719872","780720127","FO" +"780720128","780720383","FR" +"780720384","780720639","GA" +"780720640","780720895","GB" +"780720896","780721151","GD" +"780721152","780721407","GE" +"780721408","780721663","GF" +"780721664","780721919","GG" +"780721920","780722175","GH" +"780722176","780722431","GI" +"780722432","780722687","GL" +"780722688","780722943","GM" +"780722944","780723199","GN" +"780723200","780723455","GP" +"780723456","780723711","GQ" +"780723712","780723967","GR" +"780723968","780724223","GS" +"780724224","780724479","GT" +"780724480","780724735","GU" +"780724736","780724991","GW" +"780724992","780725247","GY" +"780725248","780725759","HK" +"780725760","780726015","HN" +"780726016","780726271","HR" +"780726272","780726527","HT" +"780726528","780726783","HU" +"780726784","780727039","ID" +"780727040","780727295","IE" +"780727296","780727551","IL" +"780727552","780727807","IM" +"780727808","780728063","IN" +"780728064","780728319","IO" +"780728320","780728575","IQ" +"780728576","780728831","IR" +"780728832","780729087","IS" +"780729088","780729343","IT" +"780729344","780729599","JE" +"780729600","780729855","JM" +"780729856","780730111","JO" +"780730112","780730367","JP" +"780730368","780779519","IE" +"780779520","780783615","NL" +"780783616","780785663","GB" +"780785664","780787711","DE" +"780787712","780791807","FR" +"780791808","780793855","SE" +"780793856","780795903","DE" +"780795904","780861439","RU" +"780861440","780926975","HU" +"780926976","780992511","CH" +"780992512","781058047","IT" +"781058048","781123583","DE" +"781123584","781189119","IR" +"781189120","781320191","NL" +"781320192","781451263","RU" +"781451264","781455359","PL" +"781455360","781459455","UA" +"781459456","781463551","IR" +"781463552","781467647","RU" +"781467648","781475839","PL" +"781475840","781479935","RU" +"781479936","781484031","UA" +"781484032","781488127","RU" +"781488128","781496319","PL" +"781496320","781516799","RU" +"781516800","781520895","RO" +"781520896","781524991","IS" +"781524992","781529087","RU" +"781529088","781533183","UA" +"781533184","781537279","RU" +"781537280","781545471","UA" +"781545472","781549567","CZ" +"781549568","781553663","RU" +"781553664","781557759","PL" +"781557760","781565951","UA" +"781565952","781570047","CH" +"781570048","781574143","PL" +"781574144","781578239","RU" +"781578240","781582335","PL" +"781582336","781590527","UA" +"781590528","781598719","SI" +"781598720","781615103","UA" +"781615104","781631487","RU" +"781631488","781639679","SK" +"781639680","781651967","RU" +"781651968","781654015","PL" +"781654016","781656063","RU" +"781656064","781658111","RO" +"781658112","781662207","UA" +"781662208","781664255","SK" +"781664256","781666303","UA" +"781666304","781668351","PL" +"781668352","781670399","UA" +"781670400","781672447","RU" +"781672448","781674495","BE" +"781674496","781676543","RU" +"781676544","781678591","PL" +"781678592","781682687","RS" +"781682688","781684735","PL" +"781684736","781686783","UA" +"781686784","781688831","RU" +"781688832","781690879","RO" +"781690880","781692927","RU" +"781692928","781694975","UA" +"781694976","781697023","PL" +"781697024","781699071","UA" +"781699072","781701119","RO" +"781701120","781703167","SA" +"781703168","781705215","PL" +"781705216","781707263","RO" +"781707264","781709311","SI" +"781709312","781711359","RU" +"781711360","781713407","UA" +"781713408","781844479","SA" +"781844480","781975551","TR" +"781975552","782106623","NO" +"782106624","782254079","RU" +"782254080","782270463","UA" +"782270464","782306303","RU" +"782306304","782307327","NL" +"782307328","782313727","RU" +"782313728","782313983","UA" +"782313984","782319615","RU" +"782319616","782335999","ME" +"782336000","782352383","RU" +"782352384","782368767","SY" +"782368768","782385151","UA" +"782385152","782401535","SE" +"782401536","782417919","FR" +"782417920","782434303","AM" +"782434304","782449151","SI" +"782449152","782449407","HR" +"782449408","782449663","SI" +"782449664","782449703","BA" +"782449704","782449711","SI" +"782449712","782449719","BA" +"782449720","782449727","SI" +"782449728","782449735","BA" +"782449736","782449759","SI" +"782449760","782449791","BA" +"782449792","782449807","SI" +"782449808","782449839","BA" +"782449840","782449855","SI" +"782449856","782449871","BA" +"782449872","782449887","SI" +"782449888","782450687","BA" +"782450688","782467071","DE" +"782467072","782483455","RU" +"782483456","782499839","FI" +"782499840","782516223","SI" +"782516224","782532607","IR" +"782532608","782548991","UA" +"782548992","782581759","RU" +"782581760","782598143","FR" +"782598144","782607971","DE" +"782607972","782607975","IT" +"782607976","782608039","DE" +"782608040","782608047","LU" +"782608048","782630911","DE" +"782630912","782647295","MD" +"782647296","782663679","RU" +"782663680","782663935","A1" +"782663936","782664447","GB" +"782664448","782664703","LU" +"782664704","782665471","NL" +"782665472","782666751","A1" +"782666752","782667007","US" +"782667008","782667519","UA" +"782667520","782667775","LU" +"782667776","782668287","FR" +"782668288","782668799","RU" +"782668800","782669567","NL" +"782669568","782671103","DE" +"782671104","782671359","A1" +"782671360","782671871","DE" +"782671872","782672383","CA" +"782672384","782672639","BG" +"782672640","782672895","RO" +"782672896","782673151","CZ" +"782673152","782673919","GB" +"782673920","782674943","LU" +"782674944","782680063","GB" +"782680064","782696447","RU" +"782696448","782696639","DE" +"782696640","782696703","US" +"782696704","782696831","DE" +"782696832","782696847","US" +"782696848","782696863","DE" +"782696864","782696895","US" +"782696896","782697087","DE" +"782697088","782697103","US" +"782697104","782697120","DE" +"782697121","782697151","US" +"782697152","782697343","DE" +"782697344","782697359","US" +"782697360","782697376","DE" +"782697377","782697407","US" +"782697408","782697599","DE" +"782697600","782697615","US" +"782697616","782697632","DE" +"782697633","782697663","US" +"782697664","782697855","DE" +"782697856","782697871","US" +"782697872","782697888","DE" +"782697889","782697919","US" +"782697920","782698111","DE" +"782698112","782698127","US" +"782698128","782698144","DE" +"782698145","782698175","US" +"782698176","782698367","DE" +"782698368","782698383","US" +"782698384","782698400","DE" +"782698401","782698431","US" +"782698432","782698623","DE" +"782698624","782698639","US" +"782698640","782698656","DE" +"782698657","782698687","US" +"782698688","782698879","DE" +"782698880","782698895","US" +"782698896","782698912","DE" +"782698913","782698943","US" +"782698944","782699135","DE" +"782699136","782699151","US" +"782699152","782699168","DE" +"782699169","782699199","US" +"782699200","782699391","DE" +"782699392","782699407","US" +"782699408","782699424","DE" +"782699425","782699455","US" +"782699456","782699647","DE" +"782699648","782699663","US" +"782699664","782699680","DE" +"782699681","782699711","US" +"782699712","782699903","DE" +"782699904","782699919","US" +"782699920","782699936","DE" +"782699937","782699967","US" +"782699968","782700159","DE" +"782700160","782700175","US" +"782700176","782700192","DE" +"782700193","782700223","US" +"782700224","782700415","DE" +"782700416","782700431","US" +"782700432","782700448","DE" +"782700449","782700479","US" +"782700480","782700671","DE" +"782700672","782700687","US" +"782700688","782700704","DE" +"782700705","782700735","US" +"782700736","782700927","DE" +"782700928","782700943","US" +"782700944","782700960","DE" +"782700961","782700991","US" +"782700992","782701183","DE" +"782701184","782701199","US" +"782701200","782701216","DE" +"782701217","782701247","US" +"782701248","782701439","DE" +"782701440","782701455","US" +"782701456","782701472","DE" +"782701473","782701503","US" +"782701504","782701695","DE" +"782701696","782701711","US" +"782701712","782701728","DE" +"782701729","782701759","US" +"782701760","782701951","DE" +"782701952","782701967","US" +"782701968","782701984","DE" +"782701985","782702015","US" +"782702016","782702207","DE" +"782702208","782702223","US" +"782702224","782702240","DE" +"782702241","782702271","US" +"782702272","782702463","DE" +"782702464","782702479","US" +"782702480","782702496","DE" +"782702497","782702527","US" +"782702528","782702719","DE" +"782702720","782702735","US" +"782702736","782702752","DE" +"782702753","782702783","US" +"782702784","782702975","DE" +"782702976","782702991","US" +"782702992","782703008","DE" +"782703009","782703039","US" +"782703040","782703231","DE" +"782703232","782703247","US" +"782703248","782703264","DE" +"782703265","782703295","US" +"782703296","782703487","DE" +"782703488","782703503","US" +"782703504","782703520","DE" +"782703521","782703551","US" +"782703552","782703743","DE" +"782703744","782703759","US" +"782703760","782703776","DE" +"782703777","782703807","US" +"782703808","782703999","DE" +"782704000","782704015","US" +"782704016","782704032","DE" +"782704033","782704063","US" +"782704064","782704255","DE" +"782704256","782704271","US" +"782704272","782704288","DE" +"782704289","782704319","US" +"782704320","782704511","DE" +"782704512","782704527","US" +"782704528","782704544","DE" +"782704545","782704575","US" +"782704576","782704767","DE" +"782704768","782704863","US" +"782704864","782705023","DE" +"782705024","782705119","US" +"782705120","782705279","DE" +"782705280","782705375","US" +"782705376","782705535","DE" +"782705536","782705631","US" +"782705632","782705791","DE" +"782705792","782705887","US" +"782705888","782706047","DE" +"782706048","782706143","US" +"782706144","782706303","DE" +"782706304","782706399","US" +"782706400","782706559","DE" +"782706560","782706655","US" +"782706656","782706815","DE" +"782706816","782706911","US" +"782706912","782707071","DE" +"782707072","782707167","US" +"782707168","782707327","DE" +"782707328","782707423","US" +"782707424","782707583","DE" +"782707584","782707679","US" +"782707680","782707839","DE" +"782707840","782707935","US" +"782707936","782708095","DE" +"782708096","782708191","US" +"782708192","782708351","DE" +"782708352","782708447","US" +"782708448","782708607","DE" +"782708608","782708703","US" +"782708704","782708863","DE" +"782708864","782708959","US" +"782708960","782709119","DE" +"782709120","782709215","US" +"782709216","782709375","DE" +"782709376","782709471","US" +"782709472","782709631","DE" +"782709632","782709727","US" +"782709728","782709887","DE" +"782709888","782709983","US" +"782709984","782710143","DE" +"782710144","782710239","US" +"782710240","782710399","DE" +"782710400","782710495","US" +"782710496","782710655","DE" +"782710656","782710751","US" +"782710752","782710911","DE" +"782710912","782711007","US" +"782711008","782711167","DE" +"782711168","782711263","US" +"782711264","782711423","DE" +"782711424","782711519","US" +"782711520","782711679","DE" +"782711680","782711775","US" +"782711776","782712831","DE" +"782712832","782729215","RU" +"782729216","782735359","DE" +"782735360","782735871","CH" +"782735872","782737407","DE" +"782737408","782738431","CH" +"782738432","782745599","DE" +"782745600","782761983","CZ" +"782761984","783024127","PL" +"783024128","783040511","RU" +"783040512","783048703","UA" +"783048704","783056895","RU" +"783056896","783065087","UA" +"783065088","783073279","RU" +"783073280","783089663","UA" +"783089664","783106047","RU" +"783106048","783134719","UA" +"783134720","783138815","RU" +"783138816","783142911","CZ" +"783142912","783147007","RU" +"783147008","783151103","FI" +"783151104","783155199","RO" +"783155200","783157247","PL" +"783157248","783159295","RU" +"783159296","783161343","CZ" +"783161344","783163391","PL" +"783163392","783165439","CZ" +"783165440","783167487","UA" +"783167488","783169535","RU" +"783169536","783171583","CZ" +"783171584","783173631","UA" +"783173632","783175679","PL" +"783175680","783179775","RU" +"783179776","783181823","RS" +"783181824","783185919","RU" +"783185920","783187967","UA" +"783187968","783190015","NL" +"783190016","783194111","RO" +"783194112","783196159","CZ" +"783196160","783198207","UA" +"783198208","783202303","PL" +"783202304","783204351","VG" +"783204352","783206399","RU" +"783206400","783208447","RO" +"783208448","783210495","PL" +"783210496","783212543","UA" +"783212544","783216639","PL" +"783216640","783218687","UA" +"783218688","783220735","RU" +"783220736","783222783","SK" +"783222784","783226879","UA" +"783226880","783230975","RU" +"783230976","783233023","PL" +"783233024","783235071","GB" +"783235072","783237119","DE" +"783237120","783243263","UA" +"783243264","783245311","CZ" +"783245312","783247359","RU" +"783247360","783251455","PL" +"783251456","783255551","RU" +"783255552","783259647","UA" +"783259648","783261695","RU" +"783261696","783263743","UA" +"783263744","783265791","BY" +"783265792","783267839","CZ" +"783267840","783269887","UA" +"783269888","783278079","RU" +"783278080","783282175","PL" +"783282176","783286271","UA" +"783286272","783417343","GR" +"783417344","783548415","BE" +"783548416","783679487","RU" +"783679488","783681535","FR" +"783681536","783683583","IE" +"783683584","783685375","DE" +"783685376","783685631","US" +"783685632","783687679","RU" +"783687680","783689727","PT" +"783689728","783691775","FR" +"783691776","783693823","BY" +"783693824","783694623","GB" +"783694624","783694687","FR" +"783694688","783695871","GB" +"783695872","783697919","TR" +"783697920","783699967","FR" +"783699968","783702015","UA" +"783702016","783704063","IT" +"783704064","783706111","PL" +"783706112","783707391","NL" +"783707392","783707647","US" +"783707648","783708159","NL" +"783708160","783710207","FI" +"783710208","783712255","NL" +"783712256","783714303","RU" +"783714304","783718399","DE" +"783718400","783720447","IT" +"783720448","783722495","FI" +"783722496","783724543","AM" +"783724544","783726591","NL" +"783726592","783728639","IS" +"783728640","783730655","BE" +"783730656","783730687","NL" +"783730688","783732735","SE" +"783732736","783734783","FR" +"783734784","783736831","NL" +"783736832","783738879","SI" +"783738880","783740927","IT" +"783740928","783745023","DE" +"783745024","783747071","RU" +"783747072","783749119","GB" +"783749120","783751167","GR" +"783751168","783753215","SE" +"783753216","783755263","FR" +"783755264","783757311","DE" +"783757312","783759359","FR" +"783759360","783763455","CZ" +"783763456","783765503","FI" +"783765504","783767551","RU" +"783767552","783769599","IL" +"783769600","783771647","DE" +"783771648","783773695","GB" +"783773696","783775743","ES" +"783775744","783777791","AL" +"783777792","783779839","RU" +"783779840","783781887","DK" +"783783936","783785983","DE" +"783785984","783788031","RU" +"783788032","783790079","NO" +"783790080","783792127","RU" +"783792128","783794175","IR" +"783794176","783798271","GB" +"783798272","783800319","PL" +"783800320","783802367","LV" +"783802368","783804415","FR" +"783804416","783806463","IT" +"783806464","783810303","NL" +"783810304","783810559","BE" +"783810560","783843327","SA" +"783843328","783876095","BH" +"783876096","783908863","UA" +"783908864","783941631","JO" +"783941632","783974399","PL" +"783974400","784007167","KW" +"784007168","784039935","RU" +"784039936","784072703","PL" +"784072704","784105471","RU" +"784105472","784138239","HR" +"784138240","784171007","DE" +"784171008","784203775","PT" +"784203776","784236543","GR" +"784236544","784269311","RO" +"784269312","784302079","BY" +"784302080","784334847","RU" +"784334848","784465919","FR" +"784465920","784596991","SE" +"784596992","784728063","TR" +"784728064","784784383","GR" +"784784384","784859135","CY" +"784859136","785121279","UA" +"785121280","785252351","PL" +"785252352","785383423","AT" +"785383424","785448959","GB" +"785448960","785514495","IR" +"785514496","785580031","IL" +"785580032","785645567","UA" +"785645568","785711103","NO" +"785711104","785776639","SY" +"785776640","785842175","RO" +"785842176","785907711","PL" +"785907712","785973247","BY" +"785973248","786038783","MK" +"786038784","786104319","FR" +"786104320","786169855","UA" +"786169856","786235391","AT" +"786235392","786300927","TR" +"786300928","786366463","ES" +"786366464","786431999","DE" +"786432000","786563071","IR" +"786563072","786565119","GB" +"786565120","786567167","NO" +"786567168","786569215","CZ" +"786569216","786571263","NO" +"786571264","786575359","ES" +"786575360","786575871","GB" +"786575872","786576127","SE" +"786576128","786577407","GB" +"786577408","786579455","NL" +"786579456","786581503","RU" +"786581504","786583551","GB" +"786583552","786585599","DE" +"786585600","786587647","NL" +"786587648","786589695","RU" +"786589696","786591743","FR" +"786591744","786593791","DE" +"786593792","786595839","GB" +"786595840","786597887","FR" +"786597888","786599935","EE" +"786599936","786601983","ES" +"786601984","786604031","SE" +"786604032","786606079","RU" +"786606080","786608127","GB" +"786608128","786610175","IT" +"786610176","786612223","IM" +"786612224","786614271","GR" +"786614272","786616319","IT" +"786616320","786618367","KG" +"786618368","786620415","GB" +"786620416","786622463","RU" +"786622464","786624511","NL" +"786624512","786626559","RU" +"786626560","786628607","GB" +"786628608","786630655","IT" +"786630656","786632703","CZ" +"786632704","786634751","FR" +"786634752","786636799","RU" +"786636800","786638847","PL" +"786638848","786640895","ES" +"786640896","786642943","GB" +"786642944","786644991","GR" +"786644992","786645759","SE" +"786645760","786646015","MT" +"786646016","786649087","SE" +"786649088","786651135","FR" +"786651136","786655231","DE" +"786655232","786657279","PL" +"786657280","786659327","FO" +"786659328","786661375","UZ" +"786661376","786663423","DE" +"786663424","786665471","UA" +"786665472","786667519","GB" +"786667520","786669567","IT" +"786669568","786671615","RU" +"786671616","786673663","CZ" +"786673664","786675711","SK" +"786675712","786677759","KZ" +"786677760","786679807","NO" +"786679808","786681855","GB" +"786681856","786683903","RU" +"786683904","786685951","DE" +"786685952","786687999","CH" +"786688000","786690047","NL" +"786690048","786692095","PL" +"786692096","786694143","LB" +"786694144","786698239","RU" +"786698240","786702335","CZ" +"786702336","786706431","GB" +"786706432","786710527","NO" +"786710528","786714623","RU" +"786714624","786718719","PL" +"786718720","786726911","RU" +"786726912","786731007","FI" +"786731008","786735103","IL" +"786735104","786739199","GB" +"786739200","786743295","AZ" +"786743296","786747391","DE" +"786747392","786751487","SK" +"786751488","786755583","PL" +"786755584","786759679","IT" +"786759680","786771711","DE" +"786771712","786771775","AT" +"786771776","786771967","DE" +"786771968","786776063","UA" +"786776064","786780159","RU" +"786780160","786784255","IT" +"786784256","786788351","RU" +"786788352","786792447","CZ" +"786792448","786796543","RU" +"786796544","786800639","PL" +"786800640","786801919","US" +"786801920","786802175","UA" +"786802176","786802687","US" +"786802688","786804735","UA" +"786804736","786808831","RU" +"786808832","786812927","BG" +"786812928","786817023","RU" +"786817024","786817151","SK" +"786817152","786817215","A1" +"786817216","786821119","SK" +"786821120","786825215","HR" +"786825216","786857983","SA" +"786857984","786864127","NO" +"786864128","786890751","SE" +"786890752","786892799","ES" +"786892800","786894847","GB" +"786894848","786896895","NL" +"786896896","786900991","IT" +"786900992","786905087","NL" +"786905088","786907135","PL" +"786907136","786909183","GB" +"786909184","786911231","CZ" +"786911232","786913279","NL" +"786913280","786915327","DE" +"786915328","786917375","SK" +"786917376","786919423","RO" +"786919424","786919879","GB" +"786919880","786919887","IT" +"786919888","786920167","GB" +"786920168","786920175","IT" +"786920176","786920839","GB" +"786920840","786920847","IT" +"786920848","786921015","GB" +"786921016","786921023","IT" +"786921024","786921199","GB" +"786921200","786921207","IT" +"786921208","786921311","GB" +"786921312","786921319","IT" +"786921320","786921471","GB" +"786921472","786923519","ES" +"786923520","786925567","FR" +"786925568","786927615","DE" +"786927616","786929663","FR" +"786929664","786931711","PL" +"786931712","786933759","GB" +"786933760","786935807","RU" +"786935808","786937855","DE" +"786937856","786939903","GB" +"786939904","786940159","SE" +"786940160","786940415","FI" +"786940416","786940800","SE" +"786940801","786940927","FI" +"786940928","786941951","SE" +"786941952","786943999","CH" +"786944000","786946047","RU" +"786946048","786948095","FR" +"786948096","786950143","UA" +"786950144","786952191","DE" +"786952192","786952703","NE" +"786952704","786952959","US" +"786952960","786953215","NE" +"786953216","786954239","US" +"786954240","786956287","NL" +"786956288","786989055","RU" +"786989056","786991103","PL" +"786991104","786995199","IT" +"786995200","786997247","BG" +"786997248","786999295","RU" +"786999296","787001343","ES" +"787001344","787003391","CH" +"787003392","787005439","DE" +"787005440","787007487","GB" +"787007488","787009535","RU" +"787009536","787011583","NL" +"787011584","787013631","RU" +"787013632","787015679","DE" +"787015680","787017727","UA" +"787017728","787019775","RU" +"787019776","787021823","NL" +"787021824","787038207","BG" +"787038208","787038463","GB" +"787038464","787038719","IE" +"787038720","787038975","DE" +"787038976","787039231","FR" +"787039232","787054591","GB" +"787054592","787070975","IT" +"787070976","787087359","RU" +"787087360","787095551","TR" +"787095552","787095567","EU" +"787095568","787095615","CH" +"787095616","787095807","EU" +"787095808","787096063","CH" +"787096064","787096575","EU" +"787096576","787098367","CH" +"787098368","787099647","EU" +"787099648","787102975","CH" +"787102976","787103743","EU" +"787103744","787111935","HR" +"787111936","787120127","CZ" +"787120128","787128319","ES" +"787128320","787136511","CZ" +"787136512","787152895","IT" +"787152896","787154943","GB" +"787154944","787156991","TR" +"787156992","787159039","FR" +"787159040","787161087","DE" +"787161088","787163135","SE" +"787163136","787165183","NL" +"787165184","787167231","RS" +"787167232","787169279","CH" +"787169280","787171327","RU" +"787171328","787173375","KG" +"787173376","787175423","KZ" +"787175424","787177471","SA" +"787177472","787179519","RS" +"787179520","787179775","CH" +"787179776","787183615","DE" +"787183616","787185663","PL" +"787185664","787187711","GG" +"787187712","787189759","IT" +"787189760","787191807","CH" +"787191808","787192319","GB" +"787192320","787192831","DE" +"787192832","787193855","EU" +"787193856","787195903","RU" +"787195904","787197951","GB" +"787197952","787199999","FR" +"787200000","787202047","RU" +"787202048","787206143","DE" +"787206144","787208191","BH" +"787208192","787210239","RU" +"787210240","787212287","GB" +"787212288","787214335","SE" +"787214336","787216383","DE" +"787216384","787218431","RU" +"787218432","787234815","GB" +"787234816","787251199","SE" +"787251200","787267583","RU" +"787267584","787283967","DE" +"787283968","787300351","RU" +"787300352","787316735","BG" +"787316736","787333119","GB" +"787333120","787349503","DE" +"787349504","787365887","BG" +"787365888","787382271","PL" +"787382272","787382527","GP" +"787382528","787382783","FR" +"787382784","787383039","GP" +"787383040","787383295","FR" +"787383296","787383551","GP" +"787383552","787384063","FR" +"787384064","787384319","GP" +"787384320","787386623","FR" +"787386624","787387391","MQ" +"787387392","787387647","FR" +"787387648","787388671","MQ" +"787388672","787390463","FR" +"787390464","787390719","MQ" +"787390720","787394559","FR" +"787394560","787395071","GF" +"787395072","787398655","FR" +"787398656","787415039","PL" +"787415040","787431423","BA" +"787431424","787447807","SE" +"787447808","787464191","PL" +"787464192","787480575","IS" +"787480576","787513343","SA" +"787513344","787546111","RS" +"787546112","787578879","RU" +"787578880","787611647","AM" +"787611648","787644415","RU" +"787644416","787677183","PL" +"787677184","787679231","GB" +"787679232","787681279","RU" +"787681280","787683327","IQ" +"787683328","787685375","NL" +"787685376","787687423","IT" +"787687424","787689471","NL" +"787689472","787691519","CZ" +"787691520","787693567","IT" +"787693568","787695615","SK" +"787695616","787697663","RU" +"787697664","787701759","DE" +"787701760","787703807","NL" +"787703808","787705855","AT" +"787705856","787707903","RO" +"787707904","787709951","DE" +"787709952","787724287","RU" +"787724288","787726335","UA" +"787726336","787742719","RU" +"787742720","787758847","NL" +"787758848","787759871","GB" +"787759872","787760895","NL" +"787760896","787761919","DE" +"787761920","787762943","NL" +"787762944","787763967","ES" +"787763968","787773183","NL" +"787773184","787773311","BE" +"787773312","787773439","NL" +"787773440","787773823","BE" +"787773824","787773951","NL" +"787773952","787774015","BE" +"787774016","787774207","NL" +"787774208","787774335","BE" +"787774336","787774463","NL" +"787774464","787774719","BE" +"787774720","787774735","NL" +"787774736","787774960","BE" +"787774961","787774975","NL" +"787774976","787774983","BE" +"787774984","787775007","NL" +"787775008","787775023","BE" +"787775024","787775039","NL" +"787775040","787775103","BE" +"787775104","787775166","NL" +"787775167","787775184","BE" +"787775185","787775487","NL" +"787775488","787808255","DE" +"787808256","787841023","IR" +"787841024","787843071","RU" +"787843072","787845119","GR" +"787845120","787847167","CH" +"787847168","787849215","SE" +"787849216","787850496","TR" +"787850497","787850751","NL" +"787850752","787851263","TR" +"787851264","787853311","RU" +"787853312","787855359","DE" +"787855360","787857407","CH" +"787857408","787859455","PL" +"787859456","787861503","AT" +"787861504","787863551","IE" +"787863552","787865599","DE" +"787865600","787869695","FR" +"787869696","787873791","GB" +"787873792","787892223","SE" +"787892224","787894271","A1" +"787894272","787896319","US" +"787896320","787896575","SE" +"787896576","787896703","A1" +"787896704","787906559","SE" +"787906560","787939327","GR" +"787939328","787972095","GB" +"787972096","788004863","UA" +"788004864","788005375","GB" +"788005376","788006399","BE" +"788006400","788006911","IT" +"788006912","788007423","FR" +"788007424","788007935","DE" +"788007936","788008447","US" +"788008448","788008959","SG" +"788008960","788009471","IN" +"788009472","788009983","ES" +"788009984","788010495","HK" +"788010496","788011007","AU" +"788011008","788011519","CN" +"788011520","788012031","AR" +"788012032","788012543","CA" +"788012544","788013055","RU" +"788013056","788021247","IR" +"788021248","788029439","SI" +"788029440","788045823","GB" +"788045824","788054015","PL" +"788054016","788062207","JO" +"788062208","788070399","GB" +"788070400","788078591","RU" +"788078592","788083711","NL" +"788083712","788084223","KN" +"788084224","788086783","NL" +"788086784","788094975","BG" +"788094976","788103167","IR" +"788103168","788111359","HU" +"788111360","788119551","LT" +"788119552","788127743","GB" +"788127744","788135935","NO" +"788135936","788144127","UA" +"788144128","788160511","RU" +"788160512","788168703","UA" +"788168704","788176895","RU" +"788176896","788185087","PL" +"788185088","788193279","NO" +"788193280","788201471","GB" +"788201472","788209663","HU" +"788209664","788217855","LT" +"788217856","788226047","RU" +"788226048","788234239","CY" +"788234240","788242431","SA" +"788242432","788250623","IR" +"788250624","788258815","KG" +"788258816","788259583","DE" +"788259584","788260095","NL" +"788260096","788260351","DE" +"788260352","788260863","NL" +"788260864","788266495","DE" +"788266496","788267007","IN" +"788267008","788271103","SE" +"788271104","788275199","DE" +"788275200","788279295","AL" +"788279296","788283391","BG" +"788283392","788291583","GB" +"788291584","788295679","TR" +"788295680","788299775","RU" +"788299776","788303871","DE" +"788303872","788307967","IT" +"788307968","788312063","RU" +"788312064","788312319","FR" +"788312320","788312351","IT" +"788312352","788312383","GB" +"788312384","788312415","DE" +"788312416","788312447","ES" +"788312448","788312479","US" +"788312480","788312511","BR" +"788312512","788312543","NL" +"788312544","788316159","FR" +"788316160","788320255","NL" +"788320256","788324351","UA" +"788324352","788328447","CZ" +"788328448","788332543","RU" +"788332544","788336639","BG" +"788336640","788337407","DE" +"788337408","788337663","GB" +"788337664","788340479","DE" +"788340480","788340735","GB" +"788340736","788344831","ES" +"788344832","788353023","DE" +"788353024","788357119","PS" +"788357120","788361215","CZ" +"788361216","788365311","DE" +"788365312","788369407","IQ" +"788369408","788371711","DE" +"788371712","788371715","AT" +"788371716","788371719","US" +"788371720","788371723","GB" +"788371724","788373503","DE" +"788373504","788377599","BE" +"788377600","788381695","CH" +"788381696","788385791","SE" +"788385792","788389887","PL" +"788389888","788393983","ES" +"788393984","788398079","DE" +"788398080","788400127","SI" +"788400128","788402175","SE" +"788402176","788406271","RU" +"788406272","788410367","IT" +"788410368","788412415","TR" +"788412416","788414463","SI" +"788414464","788416511","CZ" +"788416512","788418559","PL" +"788418560","788422655","RU" +"788422656","788424703","FI" +"788424704","788426751","IT" +"788426752","788428799","GB" +"788428800","788430847","DE" +"788430848","788432895","BG" +"788432896","788432927","DE" +"788432928","788432959","FR" +"788432960","788434943","DE" +"788434944","788436991","SI" +"788436992","788439039","IT" +"788439040","788441087","RU" +"788441088","788443135","NL" +"788443136","788445183","IT" +"788445184","788451327","GB" +"788451328","788453375","FI" +"788453376","788455423","RU" +"788455424","788457471","FR" +"788457472","788459519","IT" +"788459520","788461567","RU" +"788461568","788465663","GB" +"788465664","788467711","CZ" +"788467712","788469759","NO" +"788469760","788471807","NL" +"788471808","788473855","UA" +"788473856","788474111","DE" +"788474112","788475903","GB" +"788475904","788477951","FR" +"788477952","788479999","OM" +"788480000","788482047","UZ" +"788482048","788484095","GB" +"788484096","788486143","IT" +"788486144","788488191","NL" +"788488192","788490239","RU" +"788490240","788492287","NL" +"788492288","788494335","GB" +"788494336","788496383","SE" +"788496384","788498431","FR" +"788498432","788500479","RU" +"788500480","788502527","AL" +"788502528","788504575","IE" +"788504576","788506623","FR" +"788506624","788508671","CH" +"788508672","788509215","FR" +"788509216","788509231","AT" +"788509232","788509247","FR" +"788509248","788509279","AT" +"788509280","788509631","FR" +"788509632","788509695","AT" +"788509696","788510335","FR" +"788510336","788510463","AT" +"788510464","788510519","FR" +"788510520","788510527","AT" +"788510528","788510663","FR" +"788510664","788510687","AT" +"788510688","788510719","FR" +"788510720","788512767","ES" +"788512768","788514815","FI" +"788514816","788516863","FR" +"788516864","788518911","LT" +"788518912","788520959","IR" +"788520960","788522623","CZ" +"788522624","788522655","PL" +"788522656","788523007","CZ" +"788523008","788525055","KZ" +"788525056","788527103","IT" +"788527104","788529151","GB" +"788529152","795231487","CA" +"795231488","795231743","US" +"795231744","795233023","CA" +"795233024","795233279","US" +"795233280","797873663","CA" +"797873664","797873919","US" +"797873920","803602431","CA" +"803602432","803602687","US" +"803602688","803864575","CA" +"803864576","803864831","US" +"803864832","805306367","CA" +"805306368","822083583","US" +"822083584","822085631","ID" +"822085632","822087679","AU" +"822087680","822089727","JP" +"822089728","822090751","ID" +"822090752","822091775","NZ" +"822091776","822099967","BD" +"822099968","822116351","TH" +"822116352","822149119","MN" +"822149120","822214655","KR" +"822214656","822345727","AU" +"822345728","822607871","CN" +"822607872","822870015","KR" +"822870016","823132159","IN" +"823132160","824180735","KR" +"824180736","825229311","IN" +"825229312","825360383","TH" +"825360384","825361407","KR" +"825361408","825363455","ID" +"825363456","825364479","MY" +"825364480","825376767","KR" +"825376768","825393151","IN" +"825393152","825409535","KR" +"825409536","825419775","NZ" +"825419776","825420799","TH" +"825420800","825421823","MY" +"825421824","825425919","NZ" +"825425920","825753599","CN" +"825753600","826277887","KR" +"826277888","828375039","CN" +"828375040","829423615","JP" +"829423616","830210047","CN" +"830210048","830341119","MY" +"830341120","830406655","NP" +"830406656","830472191","AU" +"830472192","830472447","CN" +"830472448","830472703","AU" +"830472704","830473215","CN" +"830474240","830475263","SG" +"830475264","830476287","AU" +"830476288","830480383","JP" +"830480384","830488575","SG" +"830488576","830496767","TW" +"830496768","830498815","JP" +"830498816","830499839","GU" +"830499840","830500863","IN" +"830500864","830504959","TW" +"830504960","830513151","JP" +"830513152","830517247","IN" +"830517248","830521343","ID" +"830521344","830529535","KR" +"830529536","830537727","AU" +"830537728","830603263","JP" +"830603264","830734335","HK" +"830734336","830996479","JP" +"830996480","831258623","IN" +"831258624","831389695","CN" +"831389696","831512575","KR" +"831512576","831513599","AU" +"831513600","831514623","NZ" +"831514624","831514887","HK" +"831514888","831514895","AU" +"831514896","831515647","HK" +"831515648","831516671","AU" +"831516672","831518719","JP" +"831518720","831519743","AU" +"831519744","831520767","IN" +"831520768","832045055","PH" +"832045056","832307199","CN" +"832307200","832308223","MN" +"832308224","832311295","JP" +"832311296","832312319","AU" +"832312320","832313343","ID" +"832313344","832315391","AU" +"832315392","832319487","KH" +"832319488","832320511","NU" +"832320512","832321535","VN" +"832321536","832323583","ID" +"832323584","832348159","IN" +"832348160","832372735","JP" +"832372736","832438271","PH" +"832438272","832569343","TW" +"832569344","833617919","KR" +"833617920","835190783","AU" +"835190784","835715071","IN" +"835715072","835977215","CN" +"835977216","836042751","JP" +"836042752","836046847","HK" +"836046848","836050943","AU" +"836050944","836059135","IN" +"836059136","836075519","VN" +"836075520","836501503","TW" +"836501504","836763647","CN" +"836763648","837025791","NZ" +"837025792","837287935","TH" +"837287936","837550079","CN" +"837550080","837566463","IN" +"837566464","837599231","KR" +"837599232","837603327","MY" +"837603328","837604351","VN" +"837604352","837605375","NP" +"837605376","837607423","ID" +"837607424","837611519","JP" +"837611520","837615615","AU" +"837615616","837681151","TH" +"837681152","837689343","JP" +"837689344","837697535","IN" +"837697536","837746687","KR" +"837746688","837763071","CN" +"837763072","837779455","JP" +"837779456","837795839","KR" +"837795840","837812223","CN" +"837812224","838074367","JP" +"838074368","838139903","NP" +"838139904","838205439","SG" +"838205440","838238207","KR" +"838238208","838262783","VN" +"838262784","838270975","CN" +"838270976","838336511","KR" +"838336512","838467583","IN" +"838467584","838729727","JP" +"838729728","838795263","KR" +"838795264","838860799","AU" +"838860800","838999039","US" +"838999040","838999295","CA" +"838999296","839005215","US" +"839005216","839005280","CA" +"839005281","839010559","US" +"839010560","839010815","CA" +"839010816","839016191","US" +"839016192","839016447","CA" +"839016448","839052031","US" +"839052032","839052287","CA" +"839052288","839054079","US" +"839054080","839054335","CA" +"839054336","839055615","US" +"839055616","839055871","CA" +"839055872","839056895","US" +"839056896","839057151","CA" +"839057152","839061503","US" +"839061504","839061759","CA" +"839061760","839062271","US" +"839062272","839064063","CA" +"839064064","839069183","US" +"839069184","839071231","CA" +"839071232","839072255","US" +"839072256","839074303","CA" +"839074304","839095807","US" +"839095808","839096063","CA" +"839096064","839101695","US" +"839101696","839102207","CA" +"839102208","839103231","US" +"839103232","839103487","CA" +"839103488","839104255","US" +"839104256","839104511","CA" +"839104512","839112191","US" +"839112192","839112703","CA" +"839112704","839113215","US" +"839113216","839113471","CA" +"839113472","839122431","US" +"839122432","839122495","CA" +"839122496","839368703","US" +"839368704","839385087","CZ" +"839385088","840161595","US" +"840161596","840161596","A1" +"840161597","840269823","US" +"840269824","840273919","CA" +"840273920","840278015","US" +"840278016","840282111","CA" +"840282112","840294399","US" +"840294400","840298495","CA" +"840298496","842530895","US" +"842530896","842530903","IL" +"842530904","842531443","US" +"842531444","842531447","GB" +"842531448","842531519","US" +"842531520","842531523","MX" +"842531524","842531603","US" +"842531604","842531605","ES" +"842531606","842531659","US" +"842531660","842531661","IN" +"842531662","842533679","US" +"842533680","842533683","BR" +"842533684","842534251","US" +"842534252","842534255","NO" +"842534256","842534335","US" +"842534336","842534339","ES" +"842534340","842541693","US" +"842541694","842541695","ZA" +"842541696","842541723","US" +"842541724","842541725","CA" +"842541726","842542399","US" +"842542400","842542407","NZ" +"842542408","842542415","US" +"842542416","842542423","NZ" +"842542424","842542431","JO" +"842542432","842564897","US" +"842564898","842564899","ES" +"842564900","842564933","US" +"842564934","842564935","CA" +"842564936","842565975","US" +"842565976","842565979","AU" +"842565980","842566015","US" +"842566016","842566019","BR" +"842566020","842571891","US" +"842571892","842571895","IN" +"842571896","842572215","US" +"842572216","842572219","CA" +"842572220","842597639","US" +"842597640","842597647","GT" +"842597648","842597759","US" +"842597760","842597767","CA" +"842597768","842598703","US" +"842598704","842598719","CZ" +"842598720","842600079","US" +"842600080","842600087","GB" +"842600088","842601607","US" +"842601608","842601615","AR" +"842601616","842602423","US" +"842602424","842602431","IN" +"842602432","842651119","US" +"842651120","842651127","MX" +"842651128","843055103","US" +"843055104","843644927","CA" +"843644928","844890111","US" +"844890112","844988415","CA" +"844988416","845089407","US" +"845089408","845089535","PR" +"845089536","845283327","US" +"845283328","845545471","CA" +"845545472","846442495","US" +"846442496","846446591","CA" +"846446592","846537727","US" +"846537728","846537983","A1" +"846537984","846561279","US" +"846561280","846594047","CA" +"846594048","846626815","US" +"846626816","846627071","CN" +"846627072","855638015","US" +"855638016","872415231","GB" +"872415232","880877567","US" +"880877568","880878079","EU" +"880878080","882843337","US" +"882843338","882843339","EU" +"882843340","882843751","US" +"882843752","882843753","EU" +"882843754","882851942","US" +"882851943","882851943","EU" +"882851944","889192447","US" +"889192448","897238054","DE" +"897238055","897238055","EU" +"897238056","905969663","DE" +"905969664","922157055","US" +"922157056","922222591","IE" +"922222592","956301311","US" +"956301312","959447039","EU" +"959447040","959512575","US" +"959512576","960629507","EU" +"960629508","960629508","GB" +"960629509","960640769","EU" +"960640770","960640770","GB" +"960640771","960643365","EU" +"960643366","960643367","GB" +"960643368","960676607","EU" +"960676608","960676863","PL" +"960676864","960692223","EU" +"960692224","960724991","FR" +"960724992","960726783","EU" +"960726784","960727039","ZA" +"960727040","960727295","US" +"960727296","960729343","EU" +"960729344","960729599","ZA" +"960729600","960741375","EU" +"960741376","960749567","NL" +"960749568","960757759","LU" +"960757760","960888831","US" +"960888832","960921599","AU" +"960921600","960929791","NZ" +"960929792","960954367","AU" +"960954368","961019903","EU" +"961019904","961021439","HK" +"961021440","961021695","A2" +"961021696","961021951","HK" +"961021952","961022079","AP" +"961022080","961022095","SG" +"961022096","961022207","AP" +"961022208","961022719","HK" +"961022720","961022975","AP" +"961022976","961025535","HK" +"961025536","961025791","AP" +"961025792","961036799","HK" +"961036800","961037055","AP" +"961037056","961052671","HK" +"961052672","961085439","JP" +"961085440","961087231","SG" +"961087232","961087487","AP" +"961087488","961089023","SG" +"961089024","961089535","AP" +"961089536","961090047","SG" +"961090048","961090303","AP" +"961090304","961091839","SG" +"961091840","961092095","AP" +"961092096","961092351","IN" +"961092352","961092607","AP" +"961092608","961093887","SG" +"961093888","961094143","AP" +"961094144","961118207","SG" +"961118208","961119487","MY" +"961119488","961119743","AP" +"961119744","961126399","MY" +"961126400","961134591","TW" +"961134592","961142783","KR" +"961142784","961150975","KP" +"961150976","961183743","BR" +"961183744","961191935","AR" +"961191936","961200127","CL" +"961200128","961208319","CO" +"961208320","961216511","VE" +"961216512","961224703","PE" +"961224704","961249279","EU" +"961249280","961253375","GT" +"961253376","961265663","EU" +"961265664","961269759","SV" +"961269760","961282047","EU" +"961282048","961314815","MX" +"961314816","961380351","US" +"961380352","961413119","CA" +"961413120","961445887","IT" +"961445888","961478655","ES" +"961478656","961511423","CH" +"961511424","961519615","PT" +"961519616","961527807","EU" +"961527808","961531903","MC" +"961531904","961535999","SM" +"961536000","961540095","VA" +"961540096","961544191","EU" +"961544192","961675263","US" +"961675264","961740799","ZA" +"961740800","961806335","EU" +"961806336","961810431","MR" +"961810432","961826815","EU" +"961826816","961830911","NE" +"961830912","961892351","EU" +"961892352","961896447","ZW" +"961896448","961900543","NG" +"961900544","961937407","EU" +"961937408","961945599","IS" +"961945600","961950463","FI" +"961950464","961950719","EU" +"961950720","961953791","FI" +"961953792","961961983","DK" +"961961984","961970175","NO" +"961970176","961971455","SE" +"961971456","961971711","EU" +"961971712","962002943","SE" +"962002944","962035711","RU" +"962035712","962039807","EE" +"962039808","962043903","LV" +"962043904","962047999","LT" +"962048000","962076671","EU" +"962076672","962080767","BH" +"962080768","962084863","EU" +"962084864","962088959","GE" +"962088960","962097151","EU" +"962097152","962101247","IL" +"962101248","962134015","EU" +"962134016","962138111","AE" +"962138112","962203647","EU" +"962203648","962207999","AT" +"962208000","962208255","EU" +"962208256","962211839","AT" +"962211840","962215935","BG" +"962215936","962217983","HR" +"962217984","962220031","BA" +"962220032","962224127","CZ" +"962224128","962228223","GR" +"962228224","962232319","HU" +"962232320","962244607","EU" +"962244608","962248703","RO" +"962248704","962252799","EU" +"962252800","962256895","SK" +"962256896","962260991","SI" +"962260992","962265087","TR" +"962265088","962281471","EU" +"962281472","962285567","DO" +"962285568","962359295","EU" +"962359296","962363391","IN" +"962363392","962392063","EU" +"962392064","962396159","PK" +"962396160","962408447","EU" +"962408448","962412543","TH" +"962412544","962416639","UZ" +"962416640","962461695","EU" +"962461696","962469887","IE" +"962469888","962527231","TR" +"962527232","973078527","EU" +"973078528","973209599","JP" +"973209600","973275135","IN" +"973275136","973471743","JP" +"973471744","973602815","AU" +"973602816","973864959","TH" +"973864960","973996031","JP" +"973996032","974782463","CN" +"974782464","974880767","MY" +"974880768","974913535","PK" +"974913536","974979071","NZ" +"974979072","975044607","KR" +"975044608","977272831","CN" +"977272832","977305599","TH" +"977305600","977338367","HK" +"977338368","977346559","SG" +"977346560","977354751","JP" +"977354752","977371135","KR" +"977371136","977395711","PK" +"977395712","977397759","BD" +"977397760","977399807","CN" +"977399808","977401855","ID" +"977401856","977403903","AU" +"977403904","977534975","CN" +"977534976","977567743","IN" +"977567744","977600511","CN" +"977600512","977666047","PH" +"977666048","977731583","JP" +"977731584","977764351","PH" +"977764352","977797119","MY" +"977797120","978321407","KR" +"978321408","978452479","JP" +"978452480","978583551","CN" +"978599936","978640895","AU" +"978640896","978644991","NZ" +"978644992","978714623","JP" +"978714624","978780159","TW" +"978780160","978784255","AU" +"978784256","978788351","JP" +"978788352","978796543","KR" +"978796544","978812927","CN" +"978812928","978972671","JP" +"978972672","978973695","US" +"978973696","979369983","JP" +"979369984","979410943","AU" +"979410944","979419135","HK" +"979419136","979435519","AU" +"979435520","979468287","TH" +"979468288","979501055","BD" +"979501056","979566591","JP" +"979566592","979599359","TW" +"979599360","979763199","CN" +"979763200","979894271","KR" +"979894272","980418559","AU" +"980418560","980549631","JP" +"980549632","980680703","TW" +"980680704","980942847","CN" +"980942848","981467135","KR" +"981467136","981991423","CN" +"981991424","982122495","TH" +"982122496","982171647","JP" +"982171648","982188031","KR" +"982188032","982253567","MY" +"982253568","982515711","KR" +"982515712","982581247","CN" +"982581248","982614015","KR" +"982614016","982622207","AU" +"982622208","982624255","JP" +"982624256","982626303","ID" +"982626304","982628351","JP" +"982628352","982630399","BD" +"982630400","982646783","SG" +"982646784","982671359","JP" +"982671360","982679551","IN" +"982679552","982695935","SG" +"982695936","982712319","KR" +"982712320","982745087","TH" +"982745088","982753279","AF" +"982753280","982755327","JP" +"982755328","982757375","BD" +"982757376","982759423","KR" +"982759424","982761471","ID" +"982761472","982777855","JP" +"982777856","983039999","KR" +"983040000","983171071","HK" +"983171072","983302143","CN" +"983302144","983564287","JP" +"983564288","984612863","AU" +"984612864","984743935","HK" +"984743936","984875007","AU" +"984875008","984956927","KR" +"984956928","984965119","AU" +"984965120","984973311","PK" +"984973312","985006079","TH" +"985006080","985071615","SG" +"985071616","985137151","JP" +"985137152","985202687","KR" +"985202688","985224959","SG" +"985224960","985225215","AP" +"985225216","985243903","SG" +"985243904","985244159","AP" +"985244160","985268223","SG" +"985268224","985399295","VN" +"985399296","985661439","JP" +"985661440","987758591","CN" +"987758592","988807167","KR" +"988807168","989855743","CN" +"989855744","991952895","KR" +"991952896","995360767","CN" +"995360768","995532799","JP" +"995532800","995540991","AU" +"995540992","995557375","KR" +"995557376","995622911","JP" +"995622912","996409343","IN" +"996409344","996573183","AU" +"996573184","996605951","TW" +"996605952","996671487","PK" +"996671488","996802559","TW" +"996802560","996868095","JP" +"996868096","997195775","CN" +"997195776","998244351","TW" +"998244352","998760447","JP" +"998760448","998760703","US" +"998760704","998973376","JP" +"998973377","998973377","US" +"998973378","999292927","JP" +"999292928","999423999","IN" +"999424000","999555071","JP" +"999555072","999686143","HK" +"999686144","999751679","KR" +"999751680","999784447","CN" +"999784448","999800831","AP" +"999800832","999817215","KR" +"999817216","999849983","BD" +"999849984","999866367","KR" +"999866368","999882751","HK" +"999948288","1000013823","AU" +"1000013824","1000079359","CN" +"1000079360","1000341503","JP" +"1000341504","1000734719","IN" +"1000734720","1000800255","JP" +"1000800256","1000865791","AU" +"1000865792","1001127935","JP" +"1001127936","1001390079","CN" +"1001390080","1002045439","IN" +"1002045440","1002176511","KR" +"1002176512","1002242047","HK" +"1002242048","1002307583","SG" +"1002307584","1002373119","JP" +"1002373120","1002405887","CN" +"1002405888","1002422271","JP" +"1002422272","1002434559","AU" +"1002434560","1008730111","CN" +"1008730112","1009778687","JP" +"1009778688","1010237439","MY" +"1010237440","1010302975","CN" +"1010302976","1010761727","JP" +"1010761728","1010827263","CN" +"1010827264","1017118719","JP" +"1017118720","1019215871","CN" +"1019215872","1019346943","JP" +"1019346944","1019478015","CN" +"1019478016","1019609087","KR" +"1019609088","1019740159","TW" +"1019740160","1021313023","CN" +"1021313024","1021837311","AU" +"1021837312","1021968383","CN" +"1021968384","1022033919","NZ" +"1022033920","1022099455","CN" +"1022099456","1022361599","JP" +"1022361600","1022558207","AU" +"1022558208","1022623743","IN" +"1022623744","1022722047","TW" +"1022722048","1022754815","CN" +"1022754816","1022820351","MO" +"1022820352","1022885887","CN" +"1022885888","1023148031","TW" +"1023148032","1023213567","CN" +"1023213568","1023238143","KR" +"1023238144","1023246335","ID" +"1023246336","1023279103","CN" +"1023279104","1023311871","IN" +"1023311872","1023316991","US" +"1023316992","1023317247","AU" +"1023317248","1023328255","US" +"1023328256","1023344639","JP" +"1023344640","1023410175","CN" +"1023410176","1023672319","IN" +"1023672320","1023688703","HK" +"1023688704","1023692799","MM" +"1023692800","1023696895","CN" +"1023696896","1023705087","MY" +"1023705088","1023717375","JP" +"1023717376","1023721471","CN" +"1023721472","1023737855","KR" +"1023737856","1023770623","ID" +"1023770624","1023778815","PK" +"1023778816","1023787007","KR" +"1023787008","1023791103","AF" +"1023791104","1023795199","NC" +"1023795200","1023799039","JP" +"1023799040","1023799295","US" +"1023799296","1023803391","JP" +"1023803392","1023852543","MY" +"1023852544","1023868927","BN" +"1023868928","1023901695","JP" +"1023901696","1023934463","TH" +"1023934464","1023950847","AU" +"1023950848","1023954943","ID" +"1023954944","1023959039","JP" +"1023959040","1023967231","AU" +"1023967232","1023975423","IN" +"1023975424","1023979519","CN" +"1023979520","1023983615","AU" +"1023983616","1023991551","SG" +"1023991552","1023991807","AP" +"1023991808","1023999999","SG" +"1024000000","1024032767","PH" +"1024032768","1024065535","AU" +"1024065536","1024131071","HK" +"1024131072","1024163839","IN" +"1024163840","1024184319","JP" +"1024184320","1024188415","MY" +"1024188416","1024196607","VN" +"1024196608","1024229375","IN" +"1024229376","1024255743","JP" +"1024255744","1024255999","US" +"1024256000","1024262143","JP" +"1024262144","1024327679","SG" +"1024327680","1024344063","US" +"1024344064","1024352255","SG" +"1024352256","1024360447","AU" +"1024360448","1024363775","JP" +"1024363776","1024364031","AU" +"1024364032","1024365055","JP" +"1024365056","1024365311","AP" +"1024365312","1024376831","JP" +"1024376832","1024393215","PH" +"1024393216","1024458751","HK" +"1024458752","1024491519","SG" +"1024491520","1024589823","IN" +"1024589824","1024655359","HK" +"1024655360","1024720895","TH" +"1024720896","1024786431","TW" +"1024786432","1025245183","JP" +"1025245184","1025277951","CN" +"1025277952","1025294335","PH" +"1025294336","1025294591","JP" +"1025294592","1025294847","HK" +"1025294848","1025295103","TH" +"1025295104","1025295615","CN" +"1025295616","1025295871","MY" +"1025295872","1025296127","GB" +"1025296128","1025296639","FR" +"1025296640","1025296895","MY" +"1025296896","1025297407","SG" +"1025297408","1025297919","AU" +"1025297920","1025298175","NZ" +"1025298176","1025298943","AU" +"1025298944","1025299199","AE" +"1025299200","1025300223","AU" +"1025300224","1025300479","SA" +"1025300480","1025300735","AE" +"1025300736","1025301247","US" +"1025301248","1025302527","AU" +"1025302528","1025310719","VN" +"1025310720","1025343487","AU" +"1025343488","1025376255","CN" +"1025376256","1025507327","TW" +"1025507328","1026293759","KR" +"1026293760","1026295807","JP" +"1026295808","1026296575","US" +"1026296576","1026311423","JP" +"1026311424","1026311679","US" +"1026311680","1026392063","JP" +"1026392064","1026408447","CN" +"1026408448","1026416639","JP" +"1026416640","1026420735","CN" +"1026420736","1026422783","JP" +"1026422784","1026423295","AU" +"1026423296","1026423551","AP" +"1026423552","1026424831","AU" +"1026424832","1026490367","JP" +"1026490368","1026523135","TH" +"1026523136","1026539519","CN" +"1026539520","1026555903","KR" +"1026555904","1027080191","CN" +"1027080192","1027866623","TW" +"1027866624","1027997695","AU" +"1027997696","1028128767","TW" +"1028128768","1029046271","KR" +"1029046272","1029119999","JP" +"1029120000","1029120255","US" +"1029120256","1029144575","JP" +"1029144576","1029160959","SG" +"1029160960","1029177343","CN" +"1029177344","1029242879","AU" +"1029242880","1029308415","JP" +"1029308416","1029439487","TH" +"1029439488","1029570559","HK" +"1029570560","1029636095","ID" +"1029636096","1029668863","AU" +"1029668864","1029701631","IN" +"1029701632","1030750207","KR" +"1030750208","1030946303","JP" +"1030946304","1030946559","AP" +"1030946560","1031415039","JP" +"1031415040","1031415295","US" +"1031415296","1031798783","JP" +"1031798784","1035993087","CN" +"1035993088","1036447999","JP" +"1036448000","1036448255","US" +"1036448256","1037415679","JP" +"1037415680","1037415935","AP" +"1037415936","1037416447","JP" +"1037416448","1037416959","US" +"1037416960","1037565951","JP" +"1037565952","1038614527","TW" +"1038614528","1039007743","CN" +"1039007744","1039138815","HK" +"1039138816","1039400959","CN" +"1039400960","1039466495","HK" +"1039466496","1039499263","JP" +"1039499264","1039507455","AU" +"1039507456","1039511551","LK" +"1039511552","1039515647","KR" +"1039515648","1039523839","JP" +"1039523840","1039532031","KR" +"1039532032","1039597567","IN" +"1039597568","1039613951","ID" +"1039613952","1039638527","KR" +"1039638528","1039642623","TW" +"1039642624","1039646719","BD" +"1039646720","1039654911","KR" +"1039654912","1039663103","IN" +"1039663104","1040187391","KR" +"1040187392","1040252927","IL" +"1040252928","1040318463","GR" +"1040318464","1040383999","CH" +"1040384000","1040388095","SA" +"1040388096","1040388351","US" +"1040388352","1040390853","SA" +"1040390854","1040390854","ZA" +"1040390855","1040397823","SA" +"1040397824","1040398591","GB" +"1040398592","1040399871","SA" +"1040399872","1040400127","GB" +"1040400128","1040400383","SA" +"1040400384","1040416767","GB" +"1040416768","1040424959","SE" +"1040424960","1040433151","PL" +"1040433152","1040449535","GB" +"1040449536","1040449791","FR" +"1040449792","1040450047","DE" +"1040450048","1040457727","FR" +"1040457728","1040465919","ME" +"1040465920","1040466687","DE" +"1040466688","1040466975","EU" +"1040466976","1040467007","DE" +"1040467008","1040467071","EU" +"1040467072","1040467087","FR" +"1040467088","1040467103","DE" +"1040467104","1040467135","FR" +"1040467136","1040467151","DE" +"1040467152","1040467759","EU" +"1040467760","1040467767","FR" +"1040467768","1040467775","EU" +"1040467776","1040467823","FR" +"1040467824","1040467935","EU" +"1040467936","1040467951","FR" +"1040467952","1040467967","EU" +"1040467968","1040468095","FR" +"1040468096","1040468231","EU" +"1040468232","1040468255","FR" +"1040468256","1040468415","EU" +"1040468416","1040468479","FR" +"1040468480","1040468607","EU" +"1040468608","1040468735","DE" +"1040468736","1040468767","NL" +"1040468768","1040469119","EU" +"1040469120","1040469183","FR" +"1040469184","1040469247","EU" +"1040469248","1040469279","FR" +"1040469280","1040469311","EU" +"1040469312","1040469343","FR" +"1040469344","1040469439","EU" +"1040469440","1040469471","FR" +"1040469472","1040469503","EU" +"1040469504","1040469567","FR" +"1040469568","1040469631","EU" +"1040469632","1040469695","FR" +"1040469696","1040469727","EU" +"1040469728","1040469759","FR" +"1040469760","1040469903","EU" +"1040469904","1040469919","FR" +"1040469920","1040469983","EU" +"1040469984","1040469999","FR" +"1040470000","1040470399","EU" +"1040470400","1040470431","DE" +"1040470432","1040471487","EU" +"1040471488","1040471519","NL" +"1040471520","1040472575","EU" +"1040472576","1040472831","DE" +"1040472832","1040473071","EU" +"1040473072","1040473087","DE" +"1040473088","1040474111","EU" +"1040474112","1040482303","CZ" +"1040482304","1040515071","BE" +"1040515072","1040547839","GB" +"1040547840","1040580607","RU" +"1040580608","1040711679","GB" +"1040711680","1040719871","FR" +"1040719872","1040728063","DE" +"1040728064","1040736255","KE" +"1040736256","1040744447","GB" +"1040744448","1040777215","DE" +"1040777216","1040842751","IE" +"1040842752","1040973823","IT" +"1040973824","1040982015","NL" +"1040982016","1040982527","DK" +"1040982528","1040982783","FI" +"1040982784","1040983295","DK" +"1040983296","1040983551","US" +"1040983552","1040983807","EU" +"1040983808","1040990207","DK" +"1040990208","1040994303","CY" +"1040994304","1040994559","RU" +"1040994560","1040998399","CY" +"1040998400","1041006591","EG" +"1041006592","1041039359","CH" +"1041039360","1041051647","SE" +"1041051648","1041051839","NO" +"1041051840","1041052159","SE" +"1041052160","1041052175","NO" +"1041052176","1041072127","SE" +"1041072128","1041080319","GB" +"1041080320","1041088511","IT" +"1041088512","1041096703","AT" +"1041096704","1041235967","ES" +"1041235968","1041244159","UA" +"1041244160","1041253119","RU" +"1041253120","1041253375","TJ" +"1041253376","1041268735","RU" +"1041268736","1041301503","NO" +"1041301504","1041310975","IE" +"1041310976","1041311231","EU" +"1041311232","1041336319","IE" +"1041336320","1041336575","EU" +"1041336576","1041367039","IE" +"1041367040","1041498111","IT" +"1041498112","1041563647","SE" +"1041563648","1041596415","PL" +"1041596416","1041629183","NL" +"1041629184","1041633103","ES" +"1041633104","1041633119","GB" +"1041633120","1041638655","ES" +"1041638656","1041638911","EU" +"1041638912","1041642751","ES" +"1041642752","1041643007","EU" +"1041643008","1041694719","ES" +"1041694720","1041695151","FR" +"1041695152","1041695167","GB" +"1041695168","1041695359","FR" +"1041695360","1041695391","GB" +"1041695392","1041695647","FR" +"1041695648","1041695679","GB" +"1041695680","1041695695","CH" +"1041695696","1041695711","FR" +"1041695712","1041695719","GB" +"1041695720","1041695767","FR" +"1041695768","1041695775","GB" +"1041695776","1041695855","FR" +"1041695856","1041695887","GB" +"1041695888","1041695903","FR" +"1041695904","1041695999","GB" +"1041696000","1041696871","FR" +"1041696872","1041696879","GB" +"1041696880","1041697699","FR" +"1041697700","1041697703","GB" +"1041697704","1041698047","FR" +"1041698048","1041698077","GB" +"1041698078","1041698207","FR" +"1041698208","1041698223","GB" +"1041698224","1041698247","FR" +"1041698248","1041698255","GB" +"1041698256","1041698263","FR" +"1041698264","1041698271","GB" +"1041698272","1041698711","FR" +"1041698712","1041698719","GB" +"1041698720","1041699287","FR" +"1041699288","1041699295","GB" +"1041699296","1041699583","FR" +"1041699584","1041699591","IT" +"1041699592","1041699599","FR" +"1041699600","1041699615","GB" +"1041699616","1041699623","FR" +"1041699624","1041699631","GB" +"1041699632","1041699679","FR" +"1041699680","1041699695","GB" +"1041699696","1041699767","FR" +"1041699768","1041699807","GB" +"1041699808","1041700423","FR" +"1041700424","1041700535","GB" +"1041700536","1041700591","FR" +"1041700592","1041700599","GB" +"1041700600","1041700983","FR" +"1041700984","1041700991","GB" +"1041700992","1041701143","FR" +"1041701144","1041701151","GB" +"1041701152","1041701175","FR" +"1041701176","1041701183","GB" +"1041701184","1041701207","FR" +"1041701208","1041701222","GB" +"1041701223","1041701311","FR" +"1041701312","1041701551","GB" +"1041701552","1041701567","FR" +"1041701568","1041701631","GB" +"1041701632","1041701647","FR" +"1041701648","1041701663","GB" +"1041701664","1041701695","FR" +"1041701696","1041701703","GB" +"1041701704","1041701719","FR" +"1041701720","1041701727","GB" +"1041701728","1041701863","FR" +"1041701864","1041701871","GB" +"1041701872","1041701935","FR" +"1041701936","1041701943","GB" +"1041701944","1041702167","FR" +"1041702168","1041702175","GB" +"1041702176","1041702306","FR" +"1041702307","1041702311","GB" +"1041702312","1041702319","FR" +"1041702320","1041702335","GB" +"1041702336","1041702351","FR" +"1041702352","1041702399","GB" +"1041702400","1041702751","FR" +"1041702752","1041702759","GB" +"1041702760","1041703639","FR" +"1041703640","1041703647","GB" +"1041703648","1041703695","FR" +"1041703696","1041703711","GB" +"1041703712","1041704119","FR" +"1041704120","1041704127","GB" +"1041704128","1041704159","FR" +"1041704160","1041704175","GB" +"1041704176","1041704199","FR" +"1041704200","1041704207","GB" +"1041704208","1041704247","FR" +"1041704248","1041704263","GB" +"1041704264","1041704319","FR" +"1041704320","1041704335","GB" +"1041704336","1041704351","FR" +"1041704352","1041704383","GB" +"1041704384","1041704407","FR" +"1041704408","1041704431","GB" +"1041704432","1041704439","FR" +"1041704440","1041704447","GB" +"1041704448","1041704551","FR" +"1041704552","1041704575","GB" +"1041704576","1041704775","FR" +"1041704776","1041704783","GB" +"1041704784","1041704815","FR" +"1041704816","1041704823","GB" +"1041704824","1041704847","FR" +"1041704848","1041704863","GB" +"1041704864","1041704879","FR" +"1041704880","1041704887","GB" +"1041704888","1041704927","FR" +"1041704928","1041704959","GB" +"1041704960","1041705231","FR" +"1041705232","1041705239","GB" +"1041705240","1041705255","FR" +"1041705256","1041705279","GB" +"1041705280","1041705295","FR" +"1041705296","1041705311","GB" +"1041705312","1041705343","FR" +"1041705344","1041705367","GB" +"1041705368","1041705391","FR" +"1041705392","1041705439","GB" +"1041705440","1041705447","FR" +"1041705448","1041705455","GB" +"1041705456","1041705463","FR" +"1041705464","1041705479","GB" +"1041705480","1041705487","FR" +"1041705488","1041705519","GB" +"1041705520","1041705631","FR" +"1041705632","1041705663","GB" +"1041705664","1041705695","FR" +"1041705696","1041705703","GB" +"1041705704","1041705743","FR" +"1041705744","1041705751","GB" +"1041705752","1041705767","FR" +"1041705768","1041705815","GB" +"1041705816","1041705831","FR" +"1041705832","1041705855","GB" +"1041705856","1041705871","FR" +"1041705872","1041705879","GB" +"1041705880","1041705887","FR" +"1041705888","1041705895","GB" +"1041705896","1041705903","FR" +"1041705904","1041705911","GB" +"1041705912","1041705935","FR" +"1041705936","1041705951","GB" +"1041705952","1041706111","FR" +"1041706112","1041706143","GB" +"1041706144","1041706191","FR" +"1041706192","1041706239","GB" +"1041706240","1041706479","FR" +"1041706480","1041706487","GB" +"1041706488","1041706791","FR" +"1041706792","1041706799","GB" +"1041706800","1041706863","FR" +"1041706864","1041706871","GB" +"1041706872","1041706951","FR" +"1041706952","1041706975","GB" +"1041706976","1041706999","FR" +"1041707000","1041707007","GB" +"1041707008","1041707303","FR" +"1041707304","1041707319","GB" +"1041707320","1041707407","FR" +"1041707408","1041707415","GB" +"1041707416","1041707455","FR" +"1041707456","1041707463","GB" +"1041707464","1041707479","FR" +"1041707480","1041707495","GB" +"1041707496","1041707503","FR" +"1041707504","1041707519","GB" +"1041707520","1041707575","FR" +"1041707576","1041707583","GB" +"1041707584","1041707631","FR" +"1041707632","1041707647","GB" +"1041707648","1041707679","FR" +"1041707680","1041707687","GB" +"1041707688","1041707807","FR" +"1041707808","1041707815","GB" +"1041707816","1041707871","FR" +"1041707872","1041707887","GB" +"1041707888","1041707895","FR" +"1041707896","1041707903","GB" +"1041707904","1041707999","FR" +"1041708000","1041708007","GB" +"1041708008","1041708023","FR" +"1041708024","1041708031","GB" +"1041708032","1041708415","FR" +"1041708416","1041708431","GB" +"1041708432","1041708447","FR" +"1041708448","1041708487","GB" +"1041708488","1041708495","FR" +"1041708496","1041708511","GB" +"1041708512","1041708687","FR" +"1041708688","1041708695","GB" +"1041708696","1041708703","FR" +"1041708704","1041708799","GB" +"1041708800","1041708847","FR" +"1041708848","1041708855","GB" +"1041708856","1041708879","FR" +"1041708880","1041708895","GB" +"1041708896","1041708903","FR" +"1041708904","1041708911","GB" +"1041708912","1041708927","FR" +"1041708928","1041708943","GB" +"1041708944","1041708991","FR" +"1041708992","1041708999","GB" +"1041709000","1041709023","FR" +"1041709024","1041709055","GB" +"1041709056","1041709327","FR" +"1041709328","1041709375","GB" +"1041709376","1041709439","FR" +"1041709440","1041709455","GB" +"1041709456","1041709463","FR" +"1041709464","1041709471","GB" +"1041709472","1041709479","FR" +"1041709480","1041709487","GB" +"1041709488","1041709647","FR" +"1041709648","1041709695","GB" +"1041709696","1041709767","FR" +"1041709768","1041709775","GB" +"1041709776","1041709783","FR" +"1041709784","1041709791","GB" +"1041709792","1041709903","FR" +"1041709904","1041709911","GB" +"1041709912","1041709919","FR" +"1041709920","1041709927","GB" +"1041709928","1041709935","FR" +"1041709936","1041709943","GB" +"1041709944","1041709991","FR" +"1041709992","1041709999","GB" +"1041710000","1041710007","FR" +"1041710008","1041710015","GB" +"1041710016","1041710047","FR" +"1041710048","1041710055","GB" +"1041710056","1041710391","FR" +"1041710392","1041710407","GB" +"1041710408","1041710431","FR" +"1041710432","1041710455","GB" +"1041710456","1041710471","FR" +"1041710472","1041710487","GB" +"1041710488","1041710495","FR" +"1041710496","1041710511","GB" +"1041710512","1041710535","FR" +"1041710536","1041710543","GB" +"1041710544","1041710551","FR" +"1041710552","1041710591","GB" +"1041710592","1041710719","FR" +"1041710720","1041710727","GB" +"1041710728","1041710735","FR" +"1041710736","1041710751","GB" +"1041710752","1041710775","FR" +"1041710776","1041710783","GB" +"1041710784","1041711455","FR" +"1041711456","1041711519","GB" +"1041711520","1041711551","FR" +"1041711552","1041711567","GB" +"1041711568","1041711583","FR" +"1041711584","1041711599","GB" +"1041711600","1041711943","FR" +"1041711944","1041711951","GB" +"1041711952","1041712063","FR" +"1041712064","1041712095","GB" +"1041712096","1041712415","FR" +"1041712416","1041712423","GB" +"1041712424","1041712975","FR" +"1041712976","1041712983","GB" +"1041712984","1041713095","FR" +"1041713096","1041713103","GB" +"1041713104","1041713127","FR" +"1041713128","1041713135","GB" +"1041713136","1041713943","FR" +"1041713944","1041713951","GB" +"1041713952","1041713975","FR" +"1041713976","1041713983","GB" +"1041713984","1041713991","FR" +"1041713992","1041714007","GB" +"1041714008","1041714039","FR" +"1041714040","1041714055","GB" +"1041714056","1041714071","FR" +"1041714072","1041714079","GB" +"1041714080","1041714095","FR" +"1041714096","1041714103","GB" +"1041714104","1041714111","FR" +"1041714112","1041714175","GB" +"1041714176","1041714463","FR" +"1041714464","1041714471","GB" +"1041714472","1041714511","FR" +"1041714512","1041714519","GB" +"1041714520","1041714671","FR" +"1041714672","1041714687","GB" +"1041714688","1041714815","FR" +"1041714816","1041714847","GB" +"1041714848","1041714855","FR" +"1041714856","1041714879","GB" +"1041714880","1041714911","FR" +"1041714912","1041714919","GB" +"1041714920","1041715007","FR" +"1041715008","1041715015","GB" +"1041715016","1041715079","FR" +"1041715080","1041715087","GB" +"1041715088","1041715095","FR" +"1041715096","1041715103","GB" +"1041715104","1041715527","FR" +"1041715528","1041715535","GB" +"1041715536","1041715583","FR" +"1041715584","1041715615","GB" +"1041715616","1041715631","FR" +"1041715632","1041715647","GB" +"1041715648","1041715767","FR" +"1041715768","1041715791","GB" +"1041715792","1041715807","FR" +"1041715808","1041715823","GB" +"1041715824","1041715863","FR" +"1041715864","1041715870","GB" +"1041715871","1041715903","FR" +"1041715904","1041715911","GB" +"1041715912","1041715943","FR" +"1041715944","1041715951","GB" +"1041715952","1041715999","FR" +"1041716000","1041716015","GB" +"1041716016","1041716047","FR" +"1041716048","1041716095","GB" +"1041716096","1041716111","FR" +"1041716112","1041716223","GB" +"1041716224","1041716439","FR" +"1041716440","1041716447","GB" +"1041716448","1041716503","FR" +"1041716504","1041716511","GB" +"1041716512","1041716519","FR" +"1041716520","1041716527","GB" +"1041716528","1041716543","FR" +"1041716544","1041716575","GB" +"1041716576","1041716671","FR" +"1041716672","1041716703","GB" +"1041716704","1041717071","FR" +"1041717072","1041717079","GB" +"1041717080","1041717087","FR" +"1041717088","1041717103","GB" +"1041717104","1041717111","FR" +"1041717112","1041717119","GB" +"1041717120","1041717167","FR" +"1041717168","1041717183","GB" +"1041717184","1041717199","FR" +"1041717200","1041717247","GB" +"1041717248","1041717503","FR" +"1041717504","1041717511","IT" +"1041717512","1041717631","FR" +"1041717632","1041717639","GB" +"1041717640","1041717687","FR" +"1041717688","1041717695","GB" +"1041717696","1041717711","FR" +"1041717712","1041717719","GB" +"1041717720","1041718071","FR" +"1041718072","1041718079","GB" +"1041718080","1041718112","FR" +"1041718113","1041718119","GB" +"1041718120","1041718127","FR" +"1041718128","1041718135","GB" +"1041718136","1041718151","FR" +"1041718152","1041718159","GB" +"1041718160","1041718191","FR" +"1041718192","1041718223","GB" +"1041718224","1041718231","FR" +"1041718232","1041718255","GB" +"1041718256","1041718343","FR" +"1041718344","1041718351","GB" +"1041718352","1041718383","FR" +"1041718384","1041718391","GB" +"1041718392","1041718447","FR" +"1041718448","1041718455","GB" +"1041718456","1041718463","FR" +"1041718464","1041718479","GB" +"1041718480","1041718495","FR" +"1041718496","1041718503","GB" +"1041718504","1041718599","FR" +"1041718600","1041718607","GB" +"1041718608","1041718623","FR" +"1041718624","1041718639","GB" +"1041718640","1041718663","FR" +"1041718664","1041718671","GB" +"1041718672","1041718767","FR" +"1041718768","1041718775","GB" +"1041718776","1041718895","FR" +"1041718896","1041718911","GB" +"1041718912","1041718935","FR" +"1041718936","1041718943","GB" +"1041718944","1041718975","FR" +"1041718976","1041718991","GB" +"1041718992","1041718999","FR" +"1041719000","1041719007","GB" +"1041719008","1041719167","FR" +"1041719168","1041719175","GB" +"1041719176","1041719203","FR" +"1041719204","1041719207","GB" +"1041719208","1041719215","FR" +"1041719216","1041719223","GB" +"1041719224","1041719224","FR" +"1041719225","1041719227","GB" +"1041719228","1041719228","FR" +"1041719229","1041719231","GB" +"1041719232","1041719247","FR" +"1041719248","1041719263","GB" +"1041719264","1041719487","FR" +"1041719488","1041719519","GB" +"1041719520","1041719567","FR" +"1041719568","1041719583","GB" +"1041719584","1041719631","FR" +"1041719632","1041719639","GB" +"1041719640","1041719743","FR" +"1041719744","1041719759","GB" +"1041719760","1041719887","FR" +"1041719888","1041719903","GB" +"1041719904","1041719919","FR" +"1041719920","1041719935","GB" +"1041719936","1041720015","FR" +"1041720016","1041720031","GB" +"1041720032","1041720447","FR" +"1041720448","1041720455","GB" +"1041720456","1041720463","FR" +"1041720464","1041720471","GB" +"1041720472","1041720487","FR" +"1041720488","1041720495","GB" +"1041720496","1041720527","FR" +"1041720528","1041720535","GB" +"1041720536","1041720551","FR" +"1041720552","1041720559","GB" +"1041720560","1041720567","FR" +"1041720568","1041720607","GB" +"1041720608","1041720631","FR" +"1041720632","1041720639","GB" +"1041720640","1041720687","FR" +"1041720688","1041720703","GB" +"1041720704","1041720831","FR" +"1041720832","1041720839","GB" +"1041720840","1041720895","FR" +"1041720896","1041720927","GB" +"1041720928","1041721039","FR" +"1041721040","1041721055","GB" +"1041721056","1041721343","FR" +"1041721344","1041721359","GB" +"1041721360","1041721391","FR" +"1041721392","1041721407","GB" +"1041721408","1041721519","FR" +"1041721520","1041721535","GB" +"1041721536","1041721775","FR" +"1041721776","1041721791","GB" +"1041721792","1041721815","FR" +"1041721816","1041721823","GB" +"1041721824","1041722175","FR" +"1041722176","1041722191","GB" +"1041722192","1041722207","FR" +"1041722208","1041722215","GB" +"1041722216","1041722223","FR" +"1041722224","1041722239","GB" +"1041722240","1041722279","FR" +"1041722280","1041722383","GB" +"1041722384","1041722391","FR" +"1041722392","1041722399","GB" +"1041722400","1041722423","FR" +"1041722424","1041722463","GB" +"1041722464","1041722479","FR" +"1041722480","1041722495","GB" +"1041722496","1041722535","FR" +"1041722536","1041722559","GB" +"1041722560","1041722567","FR" +"1041722568","1041722623","GB" +"1041722624","1041722639","FR" +"1041722640","1041722655","GB" +"1041722656","1041722703","FR" +"1041722704","1041722711","GB" +"1041722712","1041722743","FR" +"1041722744","1041722751","GB" +"1041722752","1041722983","FR" +"1041722984","1041723007","GB" +"1041723008","1041723047","FR" +"1041723048","1041723135","GB" +"1041723136","1041723359","FR" +"1041723360","1041723391","GB" +"1041723392","1041723655","FR" +"1041723656","1041723775","GB" +"1041723776","1041723839","FR" +"1041723840","1041723871","GB" +"1041723872","1041723887","FR" +"1041723888","1041723903","GB" +"1041723904","1041724455","FR" +"1041724456","1041724471","GB" +"1041724472","1041724511","FR" +"1041724512","1041724519","GB" +"1041724520","1041724671","FR" +"1041724672","1041724927","GB" +"1041724928","1041725015","FR" +"1041725016","1041725023","GB" +"1041725024","1041725119","FR" +"1041725120","1041725167","GB" +"1041725168","1041725175","FR" +"1041725176","1041725183","GB" +"1041725184","1041725207","FR" +"1041725208","1041725231","GB" +"1041725232","1041725255","FR" +"1041725256","1041725279","GB" +"1041725280","1041725375","FR" +"1041725376","1041725407","GB" +"1041725408","1041725749","FR" +"1041725750","1041725751","GB" +"1041725752","1041725815","FR" +"1041725816","1041725831","GB" +"1041725832","1041725863","FR" +"1041725864","1041725871","GB" +"1041725872","1041726063","FR" +"1041726064","1041726079","GB" +"1041726080","1041726127","FR" +"1041726128","1041726151","GB" +"1041726152","1041726159","FR" +"1041726160","1041726167","GB" +"1041726168","1041726511","FR" +"1041726512","1041726543","GB" +"1041726544","1041726599","FR" +"1041726600","1041726607","GB" +"1041726608","1041726639","FR" +"1041726640","1041726655","GB" +"1041726656","1041726671","FR" +"1041726672","1041726687","GB" +"1041726688","1041726719","FR" +"1041726720","1041726727","GB" +"1041726728","1041726735","FR" +"1041726736","1041726751","GB" +"1041726752","1041726847","FR" +"1041726848","1041726855","GB" +"1041726856","1041726879","FR" +"1041726880","1041726903","GB" +"1041726904","1041726951","FR" +"1041726952","1041726959","GB" +"1041726960","1041726975","FR" +"1041726976","1041726979","GB" +"1041726980","1041726983","FR" +"1041726984","1041726987","GB" +"1041726988","1041726991","FR" +"1041726992","1041726992","GB" +"1041726993","1041726994","FR" +"1041726995","1041726995","GB" +"1041726996","1041727007","FR" +"1041727008","1041727028","GB" +"1041727029","1041727029","FR" +"1041727030","1041727036","GB" +"1041727037","1041727038","FR" +"1041727039","1041727042","GB" +"1041727043","1041727043","FR" +"1041727044","1041727049","GB" +"1041727050","1041727050","FR" +"1041727051","1041727055","GB" +"1041727056","1041727063","FR" +"1041727064","1041727070","GB" +"1041727071","1041727087","FR" +"1041727088","1041727089","GB" +"1041727090","1041727090","FR" +"1041727091","1041727091","GB" +"1041727092","1041727167","FR" +"1041727168","1041727231","GB" +"1041727232","1041727303","FR" +"1041727304","1041727311","GB" +"1041727312","1041727999","FR" +"1041728000","1041728047","GB" +"1041728048","1041728063","FR" +"1041728064","1041728095","GB" +"1041728096","1041728111","FR" +"1041728112","1041728127","GB" +"1041728128","1041728887","FR" +"1041728888","1041728895","GB" +"1041728896","1041729383","FR" +"1041729384","1041729391","GB" +"1041729392","1041729447","FR" +"1041729448","1041729455","GB" +"1041729456","1041729503","FR" +"1041729504","1041729519","GB" +"1041729520","1041729527","FR" +"1041729528","1041729535","GB" +"1041729536","1041729561","FR" +"1041729562","1041729564","GB" +"1041729565","1041729566","FR" +"1041729567","1041729567","GB" +"1041729568","1041729615","FR" +"1041729616","1041729623","GB" +"1041729624","1041729663","FR" +"1041729664","1041729935","GB" +"1041729936","1041729951","FR" +"1041729952","1041730047","GB" +"1041730048","1041730239","FR" +"1041730240","1041730247","GB" +"1041730248","1041730639","FR" +"1041730640","1041730655","GB" +"1041730656","1041731975","FR" +"1041731976","1041732031","GB" +"1041732032","1041732047","FR" +"1041732048","1041732063","GB" +"1041732064","1041732103","FR" +"1041732104","1041732111","GB" +"1041732112","1041732127","FR" +"1041732128","1041732191","GB" +"1041732192","1041732255","FR" +"1041732256","1041732295","GB" +"1041732296","1041732303","FR" +"1041732304","1041732311","GB" +"1041732312","1041732519","FR" +"1041732520","1041732527","GB" +"1041732528","1041732863","FR" +"1041732864","1041732871","GB" +"1041732872","1041732879","FR" +"1041732880","1041732927","GB" +"1041732928","1041732959","FR" +"1041732960","1041732967","GB" +"1041732968","1041732991","FR" +"1041732992","1041733103","GB" +"1041733104","1041733519","FR" +"1041733520","1041733535","GB" +"1041733536","1041733567","FR" +"1041733568","1041733631","GB" +"1041733632","1041734919","FR" +"1041734920","1041734927","IT" +"1041734928","1041734935","GB" +"1041734936","1041734975","FR" +"1041734976","1041734991","GB" +"1041734992","1041734999","FR" +"1041735000","1041735039","GB" +"1041735040","1041735055","FR" +"1041735056","1041735087","GB" +"1041735088","1041735095","FR" +"1041735096","1041735103","GB" +"1041735104","1041735119","FR" +"1041735120","1041735167","GB" +"1041735168","1041735431","FR" +"1041735432","1041735495","GB" +"1041735496","1041735511","FR" +"1041735512","1041735551","GB" +"1041735552","1041735567","FR" +"1041735568","1041735583","GB" +"1041735584","1041735615","FR" +"1041735616","1041735663","GB" +"1041735664","1041736375","FR" +"1041736376","1041736383","GB" +"1041736384","1041736423","FR" +"1041736424","1041736455","GB" +"1041736456","1041736471","FR" +"1041736472","1041736479","GB" +"1041736480","1041736527","FR" +"1041736528","1041736535","GB" +"1041736536","1041736543","FR" +"1041736544","1041736551","GB" +"1041736552","1041736591","FR" +"1041736592","1041736599","GB" +"1041736600","1041736607","FR" +"1041736608","1041736631","GB" +"1041736632","1041736687","FR" +"1041736688","1041736695","GB" +"1041736696","1041737015","FR" +"1041737016","1041737031","GB" +"1041737032","1041737039","FR" +"1041737040","1041737055","GB" +"1041737056","1041737071","FR" +"1041737072","1041737087","GB" +"1041737088","1041737223","FR" +"1041737224","1041737279","GB" +"1041737280","1041737295","FR" +"1041737296","1041737303","GB" +"1041737304","1041737375","FR" +"1041737376","1041737391","GB" +"1041737392","1041737399","FR" +"1041737400","1041737423","GB" +"1041737424","1041737455","FR" +"1041737456","1041737463","GB" +"1041737464","1041737487","FR" +"1041737488","1041737495","GB" +"1041737496","1041737503","FR" +"1041737504","1041737519","GB" +"1041737520","1041737535","FR" +"1041737536","1041737567","GB" +"1041737568","1041737591","FR" +"1041737592","1041737599","GB" +"1041737600","1041737607","FR" +"1041737608","1041737615","GB" +"1041737616","1041737647","FR" +"1041737648","1041737663","GB" +"1041737664","1041737671","FR" +"1041737672","1041737695","GB" +"1041737696","1041737727","FR" +"1041737728","1041737743","GB" +"1041737744","1041737775","FR" +"1041737776","1041737823","GB" +"1041737824","1041737847","FR" +"1041737848","1041737855","GB" +"1041737856","1041737871","FR" +"1041737872","1041737879","GB" +"1041737880","1041737903","FR" +"1041737904","1041737911","GB" +"1041737912","1041737919","FR" +"1041737920","1041737935","GB" +"1041737936","1041738159","FR" +"1041738160","1041738167","GB" +"1041738168","1041738215","FR" +"1041738216","1041738223","GB" +"1041738224","1041738519","FR" +"1041738520","1041738543","GB" +"1041738544","1041738551","FR" +"1041738552","1041738559","GB" +"1041738560","1041738567","FR" +"1041738568","1041738575","GB" +"1041738576","1041738583","FR" +"1041738584","1041738591","GB" +"1041738592","1041738599","FR" +"1041738600","1041738615","GB" +"1041738616","1041738663","FR" +"1041738664","1041738671","GB" +"1041738672","1041738703","FR" +"1041738704","1041738719","GB" +"1041738720","1041738735","FR" +"1041738736","1041738751","GB" +"1041738752","1041739079","FR" +"1041739080","1041739087","GB" +"1041739088","1041739167","FR" +"1041739168","1041739231","GB" +"1041739232","1041739295","FR" +"1041739296","1041739299","BE" +"1041739300","1041739375","FR" +"1041739376","1041739383","BE" +"1041739384","1041739407","FR" +"1041739408","1041739423","GB" +"1041739424","1041739463","FR" +"1041739464","1041739471","GB" +"1041739472","1041739487","FR" +"1041739488","1041739503","GB" +"1041739504","1041739519","FR" +"1041739520","1041739535","GB" +"1041739536","1041739743","FR" +"1041739744","1041739751","GB" +"1041739752","1041740031","FR" +"1041740032","1041740039","GB" +"1041740040","1041740103","FR" +"1041740104","1041740119","GB" +"1041740120","1041740135","FR" +"1041740136","1041740143","GB" +"1041740144","1041740167","FR" +"1041740168","1041740175","GB" +"1041740176","1041740263","FR" +"1041740264","1041740271","GB" +"1041740272","1041740567","FR" +"1041740568","1041740575","GB" +"1041740576","1041740591","FR" +"1041740592","1041740607","GB" +"1041740608","1041740647","FR" +"1041740648","1041740655","GB" +"1041740656","1041740671","FR" +"1041740672","1041740687","GB" +"1041740688","1041740703","FR" +"1041740704","1041740719","GB" +"1041740720","1041740807","FR" +"1041740808","1041740831","GB" +"1041740832","1041741063","FR" +"1041741064","1041741087","GB" +"1041741088","1041741135","FR" +"1041741136","1041741151","GB" +"1041741152","1041741231","FR" +"1041741232","1041741263","GB" +"1041741264","1041741279","FR" +"1041741280","1041741295","GB" +"1041741296","1041741567","FR" +"1041741568","1041741583","GB" +"1041741584","1041741607","FR" +"1041741608","1041741615","GB" +"1041741616","1041741631","FR" +"1041741632","1041741647","GB" +"1041741648","1041741663","DE" +"1041741664","1041741679","GB" +"1041741680","1041741687","FR" +"1041741688","1041741823","GB" +"1041741824","1041742087","FR" +"1041742088","1041742095","GB" +"1041742096","1041742183","FR" +"1041742184","1041742191","GB" +"1041742192","1041742223","FR" +"1041742224","1041742239","GB" +"1041742240","1041742263","FR" +"1041742264","1041742271","GB" +"1041742272","1041742279","FR" +"1041742280","1041742287","GB" +"1041742288","1041742303","FR" +"1041742304","1041742335","GB" +"1041742336","1041742359","FR" +"1041742360","1041742367","GB" +"1041742368","1041742375","FR" +"1041742376","1041742391","GB" +"1041742392","1041742407","FR" +"1041742408","1041742415","GB" +"1041742416","1041742455","FR" +"1041742456","1041742463","GB" +"1041742464","1041742471","FR" +"1041742472","1041742479","GB" +"1041742480","1041742511","FR" +"1041742512","1041742527","GB" +"1041742528","1041743135","FR" +"1041743136","1041743143","GB" +"1041743144","1041743175","FR" +"1041743176","1041743215","GB" +"1041743216","1041743263","FR" +"1041743264","1041743271","GB" +"1041743272","1041743303","FR" +"1041743304","1041743311","GB" +"1041743312","1041743615","FR" +"1041743616","1041743623","GB" +"1041743624","1041743639","FR" +"1041743640","1041743647","GB" +"1041743648","1041743671","FR" +"1041743672","1041743679","GB" +"1041743680","1041743743","FR" +"1041743744","1041743759","GB" +"1041743760","1041743767","FR" +"1041743768","1041743775","GB" +"1041743776","1041743783","FR" +"1041743784","1041743799","GB" +"1041743800","1041743807","FR" +"1041743808","1041743823","GB" +"1041743824","1041743831","FR" +"1041743832","1041743847","GB" +"1041743848","1041743863","FR" +"1041743864","1041743871","GB" +"1041743872","1041744207","FR" +"1041744208","1041744215","GB" +"1041744216","1041744263","FR" +"1041744264","1041744271","GB" +"1041744272","1041744287","FR" +"1041744288","1041744295","GB" +"1041744296","1041744311","FR" +"1041744312","1041744327","GB" +"1041744328","1041744359","FR" +"1041744360","1041744367","GB" +"1041744368","1041744391","FR" +"1041744392","1041744407","GB" +"1041744408","1041744415","FR" +"1041744416","1041744447","GB" +"1041744448","1041744479","FR" +"1041744480","1041744543","GB" +"1041744544","1041744575","FR" +"1041744576","1041744583","GB" +"1041744584","1041744599","FR" +"1041744600","1041744607","GB" +"1041744608","1041744623","FR" +"1041744624","1041744639","GB" +"1041744640","1041744895","FR" +"1041744896","1041744911","GB" +"1041744912","1041744919","FR" +"1041744920","1041744927","GB" +"1041744928","1041744943","FR" +"1041744944","1041744951","GB" +"1041744952","1041744975","FR" +"1041744976","1041744983","GB" +"1041744984","1041745007","FR" +"1041745008","1041745031","GB" +"1041745032","1041745063","FR" +"1041745064","1041745071","GB" +"1041745072","1041745127","FR" +"1041745128","1041745151","GB" +"1041745152","1041745167","FR" +"1041745168","1041745191","GB" +"1041745192","1041745247","FR" +"1041745248","1041745279","GB" +"1041745280","1041745327","FR" +"1041745328","1041745343","GB" +"1041745344","1041745359","FR" +"1041745360","1041745375","GB" +"1041745376","1041745399","FR" +"1041745400","1041745407","GB" +"1041745408","1041745447","FR" +"1041745448","1041745471","GB" +"1041745472","1041745479","FR" +"1041745480","1041745487","GB" +"1041745488","1041745495","FR" +"1041745496","1041745503","GB" +"1041745504","1041745543","FR" +"1041745544","1041745551","GB" +"1041745552","1041745567","FR" +"1041745568","1041745575","GB" +"1041745576","1041745599","FR" +"1041745600","1041745615","GB" +"1041745616","1041745639","FR" +"1041745640","1041745647","GB" +"1041745648","1041745655","FR" +"1041745656","1041745663","GB" +"1041745664","1041745751","FR" +"1041745752","1041745767","GB" +"1041745768","1041745791","FR" +"1041745792","1041745799","GB" +"1041745800","1041745855","FR" +"1041745856","1041745871","GB" +"1041745872","1041745887","FR" +"1041745888","1041745959","GB" +"1041745960","1041745999","FR" +"1041746000","1041746015","GB" +"1041746016","1041746023","FR" +"1041746024","1041746031","GB" +"1041746032","1041746039","FR" +"1041746040","1041746047","GB" +"1041746048","1041746063","FR" +"1041746064","1041746095","GB" +"1041746096","1041746111","FR" +"1041746112","1041746135","GB" +"1041746136","1041746711","FR" +"1041746712","1041746735","GB" +"1041746736","1041746743","FR" +"1041746744","1041746751","GB" +"1041746752","1041746799","FR" +"1041746800","1041746823","GB" +"1041746824","1041746831","FR" +"1041746832","1041746847","GB" +"1041746848","1041746863","FR" +"1041746864","1041746895","GB" +"1041746896","1041747463","FR" +"1041747464","1041747487","GB" +"1041747488","1041748991","FR" +"1041748992","1041749247","EU" +"1041749248","1041749775","FR" +"1041749776","1041749783","GB" +"1041749784","1041749807","FR" +"1041749808","1041749815","GB" +"1041749816","1041749839","FR" +"1041749840","1041749855","GB" +"1041749856","1041749959","FR" +"1041749960","1041749983","GB" +"1041749984","1041749999","FR" +"1041750000","1041750007","GB" +"1041750008","1041750527","FR" +"1041750528","1041750543","GB" +"1041750544","1041750663","FR" +"1041750664","1041750671","GB" +"1041750672","1041750687","FR" +"1041750688","1041750695","GB" +"1041750696","1041750743","FR" +"1041750744","1041750751","GB" +"1041750752","1041750775","FR" +"1041750776","1041750783","GB" +"1041750784","1041750831","FR" +"1041750832","1041750839","GB" +"1041750840","1041750919","FR" +"1041750920","1041750927","GB" +"1041750928","1041751007","FR" +"1041751008","1041751015","GB" +"1041751016","1041751303","FR" +"1041751304","1041751311","GB" +"1041751312","1041751351","FR" +"1041751352","1041751359","GB" +"1041751360","1041751567","FR" +"1041751568","1041751575","GB" +"1041751576","1041751695","FR" +"1041751696","1041751719","GB" +"1041751720","1041751759","FR" +"1041751760","1041751767","GB" +"1041751768","1041751775","FR" +"1041751776","1041751807","GB" +"1041751808","1041753319","FR" +"1041753320","1041753343","GB" +"1041753344","1041753407","FR" +"1041753408","1041753503","GB" +"1041753504","1041753599","FR" +"1041753600","1041753775","GB" +"1041753776","1041753831","FR" +"1041753832","1041753839","GB" +"1041753840","1041753983","FR" +"1041753984","1041754015","GB" +"1041754016","1041754143","FR" +"1041754144","1041754151","GB" +"1041754152","1041754175","FR" +"1041754176","1041754191","GB" +"1041754192","1041754239","FR" +"1041754240","1041754247","GB" +"1041754248","1041754423","FR" +"1041754424","1041754431","GB" +"1041754432","1041754455","FR" +"1041754456","1041754463","GB" +"1041754464","1041754479","FR" +"1041754480","1041754495","GB" +"1041754496","1041755231","FR" +"1041755232","1041755239","GB" +"1041755240","1041755271","FR" +"1041755272","1041755279","GB" +"1041755280","1041755335","FR" +"1041755336","1041755343","GB" +"1041755344","1041755375","FR" +"1041755376","1041755391","GB" +"1041755392","1041755503","FR" +"1041755504","1041755519","GB" +"1041755520","1041755631","FR" +"1041755632","1041755647","GB" +"1041755648","1041756463","FR" +"1041756464","1041756471","GB" +"1041756472","1041756543","FR" +"1041756544","1041756567","GB" +"1041756568","1041756591","FR" +"1041756592","1041756607","GB" +"1041756608","1041756655","FR" +"1041756656","1041756663","GB" +"1041756664","1041756695","FR" +"1041756696","1041756703","DE" +"1041756704","1041756919","FR" +"1041756920","1041756927","GB" +"1041756928","1041757023","FR" +"1041757024","1041757039","GB" +"1041757040","1041757087","FR" +"1041757088","1041757095","GB" +"1041757096","1041757111","FR" +"1041757112","1041757127","GB" +"1041757128","1041757175","FR" +"1041757176","1041757179","GB" +"1041757180","1041757439","FR" +"1041757440","1041757447","GB" +"1041757448","1041757479","FR" +"1041757480","1041757487","GB" +"1041757488","1041757503","FR" +"1041757504","1041757519","GB" +"1041757520","1041757583","FR" +"1041757584","1041757591","GB" +"1041757592","1041757607","FR" +"1041757608","1041757615","GB" +"1041757616","1041757631","FR" +"1041757632","1041757647","GB" +"1041757648","1041757663","FR" +"1041757664","1041757671","GB" +"1041757672","1041757687","FR" +"1041757688","1041757695","GB" +"1041757696","1041758031","FR" +"1041758032","1041758039","GB" +"1041758040","1041758095","FR" +"1041758096","1041758111","GB" +"1041758112","1041758159","FR" +"1041758160","1041758167","GB" +"1041758168","1041758255","FR" +"1041758256","1041758271","GB" +"1041758272","1041758319","FR" +"1041758320","1041758343","GB" +"1041758344","1041758351","FR" +"1041758352","1041758367","GB" +"1041758368","1041758391","FR" +"1041758392","1041758399","GB" +"1041758400","1041758407","FR" +"1041758408","1041758415","GB" +"1041758416","1041758423","FR" +"1041758424","1041758431","GB" +"1041758432","1041758679","FR" +"1041758680","1041758687","GB" +"1041758688","1041759231","FR" +"1041759232","1041760255","GB" +"1041760256","1041768447","DE" +"1041768448","1041776639","NO" +"1041776640","1041784831","CZ" +"1041784832","1041793023","KE" +"1041793024","1041825791","GB" +"1041825792","1041842175","NL" +"1041842176","1041891327","GB" +"1041891328","1041921535","DE" +"1041921536","1041921727","US" +"1041921728","1041945087","DE" +"1041945088","1041945151","AT" +"1041945152","1041958463","DE" +"1041958464","1041958527","DK" +"1041958528","1041959423","DE" +"1041959424","1041959679","US" +"1041959680","1042022399","DE" +"1042022400","1042045891","PT" +"1042045892","1042045895","A2" +"1042045896","1042086739","PT" +"1042086740","1042086743","A2" +"1042086744","1042087935","PT" +"1042087936","1042120703","TR" +"1042120704","1042153471","PL" +"1042153472","1042284543","GB" +"1042284544","1042288399","CH" +"1042288400","1042288415","GB" +"1042288416","1042292735","CH" +"1042292736","1042293247","NL" +"1042293248","1042293503","GB" +"1042293504","1042293535","IT" +"1042293536","1042293567","IR" +"1042293568","1042293631","IT" +"1042293632","1042293759","GE" +"1042293760","1042293985","IT" +"1042293986","1042294783","NL" +"1042294784","1042296063","GE" +"1042296064","1042296191","CY" +"1042296192","1042296575","GE" +"1042296576","1042296831","BY" +"1042296832","1042297215","NL" +"1042297216","1042297319","IR" +"1042297320","1042297327","GE" +"1042297328","1042297599","IR" +"1042297600","1042297855","GB" +"1042297856","1042298111","NL" +"1042298112","1042298143","US" +"1042298144","1042298175","NL" +"1042298176","1042298239","IR" +"1042298240","1042298279","IQ" +"1042298280","1042298287","IR" +"1042298288","1042298303","GB" +"1042298304","1042298335","IQ" +"1042298336","1042298351","IR" +"1042298352","1042298367","NL" +"1042298368","1042298623","GB" +"1042298624","1042298879","NL" +"1042298880","1042299135","GB" +"1042299136","1042299391","IQ" +"1042299392","1042300159","NL" +"1042300160","1042300175","BY" +"1042300176","1042300223","IQ" +"1042300224","1042300255","AM" +"1042300256","1042300287","IR" +"1042300288","1042300351","IT" +"1042300352","1042300383","IQ" +"1042300384","1042300415","IR" +"1042300416","1042300479","NL" +"1042300480","1042300495","IQ" +"1042300496","1042300543","GB" +"1042300544","1042300639","IQ" +"1042300640","1042300647","NL" +"1042300648","1042300655","IQ" +"1042300656","1042300671","LB" +"1042300672","1042300799","IQ" +"1042300800","1042300863","IR" +"1042300864","1042300895","LB" +"1042300896","1042300903","MD" +"1042300904","1042300911","UA" +"1042300912","1042300919","NL" +"1042300920","1042300927","UA" +"1042300928","1042309119","RU" +"1042309120","1042317311","GB" +"1042317312","1042350079","ES" +"1042350080","1042415615","RU" +"1042415616","1042546687","FR" +"1042546688","1042677759","ES" +"1042677760","1042743295","GR" +"1042743296","1042808831","FR" +"1042808832","1042817023","DE" +"1042817024","1042825215","IE" +"1042825216","1042833407","CZ" +"1042833408","1042841599","GB" +"1042841600","1042874367","AT" +"1042874368","1042875391","NL" +"1042875392","1042875399","GB" +"1042875400","1042875407","DE" +"1042875408","1042875423","NL" +"1042875424","1042875455","GB" +"1042875456","1042875903","NL" +"1042875904","1042876287","GB" +"1042876288","1042876415","NL" +"1042876416","1042876479","GB" +"1042876480","1042876647","NL" +"1042876648","1042876663","GB" +"1042876664","1042876671","NL" +"1042876672","1042876927","DE" +"1042876928","1042877183","GB" +"1042877184","1042877951","DE" +"1042877952","1042878207","NL" +"1042878208","1042878463","GB" +"1042878464","1042879487","NL" +"1042879488","1042879743","US" +"1042879744","1042879999","NL" +"1042880000","1042880007","GB" +"1042880008","1042880031","NL" +"1042880032","1042880063","BE" +"1042880064","1042880639","NL" +"1042880640","1042880767","GB" +"1042880768","1042882559","NL" +"1042882560","1042882815","DE" +"1042882816","1042888703","NL" +"1042888704","1042888959","GB" +"1042888960","1042889215","NL" +"1042889216","1042889471","DE" +"1042889472","1042889983","NL" +"1042889984","1042890119","GB" +"1042890120","1042890127","NL" +"1042890128","1042890143","GB" +"1042890144","1042890239","NL" +"1042890240","1042890495","GB" +"1042890496","1042890751","FR" +"1042890752","1042890815","GB" +"1042890816","1042890819","FR" +"1042890820","1042890944","NL" +"1042890945","1042890950","GB" +"1042890951","1042890959","NL" +"1042890960","1042890991","GB" +"1042890992","1042891775","NL" +"1042891776","1042891839","GB" +"1042891840","1042891871","BE" +"1042891872","1042892015","NL" +"1042892016","1042892031","DE" +"1042892032","1042892287","NL" +"1042892288","1042892543","FR" +"1042892544","1042892799","NL" +"1042892800","1042893055","EU" +"1042893056","1042893087","GB" +"1042893088","1042893135","NL" +"1042893136","1042893143","DE" +"1042893144","1042893151","NL" +"1042893152","1042893167","PL" +"1042893168","1042893183","NL" +"1042893184","1042893311","GB" +"1042893312","1042894079","NL" +"1042894080","1042894143","DE" +"1042894144","1042894175","SE" +"1042894176","1042894335","NL" +"1042894336","1042894355","FR" +"1042894356","1042894359","NL" +"1042894360","1042894367","GB" +"1042894368","1042894399","NL" +"1042894400","1042894415","GB" +"1042894416","1042894431","NL" +"1042894432","1042894463","PT" +"1042894464","1042894559","NL" +"1042894560","1042894591","DE" +"1042894592","1042894783","NL" +"1042894784","1042894847","DE" +"1042894848","1042895103","NL" +"1042895104","1042895231","GB" +"1042895232","1042895359","DE" +"1042895360","1042895615","NL" +"1042895616","1042895871","GB" +"1042895872","1042896127","NL" +"1042896128","1042896255","GB" +"1042896256","1042900479","NL" +"1042900480","1042900735","GB" +"1042900736","1042915375","NL" +"1042915376","1042915391","DE" +"1042915392","1042939903","NL" +"1042939904","1043070975","ES" +"1043070976","1043079167","CZ" +"1043079168","1043087359","DE" +"1043087360","1043095551","GB" +"1043095552","1043103743","BG" +"1043103744","1043120127","DK" +"1043120128","1043136511","FI" +"1043136512","1043202047","NL" +"1043202048","1043333119","AT" +"1043333120","1043341311","CH" +"1043341312","1043349503","IT" +"1043349504","1043350851","DE" +"1043350852","1043350855","CH" +"1043350856","1043356023","DE" +"1043356024","1043356031","CH" +"1043356032","1043357695","DE" +"1043357696","1043365887","CH" +"1043365888","1043398655","PT" +"1043398656","1043464191","GB" +"1043464192","1043464287","NL" +"1043464288","1043464311","GB" +"1043464312","1043464799","NL" +"1043464800","1043464807","GB" +"1043464808","1043464823","NL" +"1043464824","1043464831","GB" +"1043464832","1043464927","NL" +"1043464928","1043465055","GB" +"1043465056","1043465071","NL" +"1043465072","1043465087","GB" +"1043465088","1043465775","NL" +"1043465776","1043465783","GB" +"1043465784","1043465839","NL" +"1043465840","1043465855","GB" +"1043465856","1043465871","NL" +"1043465872","1043465919","GB" +"1043465920","1043465983","NL" +"1043465984","1043466247","GB" +"1043466248","1043466319","NL" +"1043466320","1043466327","GB" +"1043466328","1043466335","NL" +"1043466336","1043466351","GB" +"1043466352","1043466431","NL" +"1043466432","1043466447","GB" +"1043466448","1043466455","NL" +"1043466456","1043466463","GB" +"1043466464","1043466495","NL" +"1043466496","1043466503","GB" +"1043466504","1043466511","NL" +"1043466512","1043466519","GB" +"1043466520","1043466559","NL" +"1043466560","1043466575","GB" +"1043466576","1043466583","NL" +"1043466584","1043466607","GB" +"1043466608","1043466887","NL" +"1043466888","1043466927","GB" +"1043466928","1043466943","NL" +"1043466944","1043466991","GB" +"1043466992","1043467007","NL" +"1043467008","1043467039","GB" +"1043467040","1043467071","NL" +"1043467072","1043467087","GB" +"1043467088","1043467103","NL" +"1043467104","1043467199","GB" +"1043467200","1043467231","NL" +"1043467232","1043467519","GB" +"1043467520","1043467535","NL" +"1043467536","1043467583","GB" +"1043467584","1043467599","NL" +"1043467600","1043467615","GB" +"1043467616","1043467663","NL" +"1043467664","1043467679","GB" +"1043467680","1043467695","NL" +"1043467696","1043467759","GB" +"1043467760","1043467775","NL" +"1043467776","1043467815","GB" +"1043467816","1043467839","NL" +"1043467840","1043467871","GB" +"1043467872","1043467967","NL" +"1043467968","1043467983","GB" +"1043467984","1043467999","NL" +"1043468000","1043468063","GB" +"1043468064","1043468127","NL" +"1043468128","1043468159","GB" +"1043468160","1043468191","NL" +"1043468192","1043468415","GB" +"1043468416","1043468575","NL" +"1043468576","1043468655","GB" +"1043468656","1043468663","NL" +"1043468664","1043468671","GB" +"1043468672","1043468751","NL" +"1043468752","1043468767","GB" +"1043468768","1043468783","NL" +"1043468784","1043468791","GB" +"1043468792","1043468799","NL" +"1043468800","1043468831","GB" +"1043468832","1043468863","NL" +"1043468864","1043468895","GB" +"1043468896","1043468903","NL" +"1043468904","1043468911","GB" +"1043468912","1043468927","NL" +"1043468928","1043468935","GB" +"1043468936","1043468959","NL" +"1043468960","1043468967","GB" +"1043468968","1043469023","NL" +"1043469024","1043469055","GB" +"1043469056","1043469087","NL" +"1043469088","1043469151","GB" +"1043469152","1043469159","NL" +"1043469160","1043469183","GB" +"1043469184","1043469199","NL" +"1043469200","1043469207","GB" +"1043469208","1043469223","NL" +"1043469224","1043469231","GB" +"1043469232","1043469239","NL" +"1043469240","1043469247","GB" +"1043469248","1043469359","NL" +"1043469360","1043469375","GB" +"1043469376","1043469399","NL" +"1043469400","1043469439","GB" +"1043469440","1043469559","NL" +"1043469560","1043469567","GB" +"1043469568","1043469843","NL" +"1043469844","1043469847","GB" +"1043469848","1043469919","NL" +"1043469920","1043469939","GB" +"1043469940","1043469943","NL" +"1043469944","1043470127","GB" +"1043470128","1043470223","NL" +"1043470224","1043470271","GB" +"1043470272","1043470303","NL" +"1043470304","1043470335","GB" +"1043470336","1043470847","NL" +"1043470848","1043472383","GB" +"1043472384","1043472395","DE" +"1043472396","1043472399","GB" +"1043472400","1043472423","DE" +"1043472424","1043472431","GB" +"1043472432","1043472443","DE" +"1043472444","1043472467","GB" +"1043472468","1043472475","DE" +"1043472476","1043472487","GB" +"1043472488","1043472495","DE" +"1043472496","1043472503","GB" +"1043472504","1043472743","DE" +"1043472744","1043472751","GB" +"1043472752","1043472895","DE" +"1043472896","1043473151","GB" +"1043473152","1043473247","DE" +"1043473248","1043473255","GB" +"1043473256","1043473411","DE" +"1043473412","1043473415","GB" +"1043473416","1043473579","DE" +"1043473580","1043473583","GB" +"1043473584","1043473983","DE" +"1043473984","1043474015","GB" +"1043474016","1043474031","DE" +"1043474032","1043474047","GB" +"1043474048","1043474455","DE" +"1043474456","1043474463","GB" +"1043474464","1043474487","DE" +"1043474488","1043474495","GB" +"1043474496","1043474499","DE" +"1043474500","1043474503","GB" +"1043474504","1043475591","DE" +"1043475592","1043475711","GB" +"1043475712","1043475887","DE" +"1043475888","1043475919","GB" +"1043475920","1043475983","DE" +"1043475984","1043475991","GB" +"1043475992","1043476319","DE" +"1043476320","1043476351","GB" +"1043476352","1043476483","DE" +"1043476484","1043476487","GB" +"1043476488","1043476543","DE" +"1043476544","1043476559","GB" +"1043476560","1043476575","DE" +"1043476576","1043476607","GB" +"1043476608","1043476735","DE" +"1043476736","1043476767","GB" +"1043476768","1043476815","DE" +"1043476816","1043476991","GB" +"1043476992","1043477503","DE" +"1043477504","1043477759","GB" +"1043477760","1043478047","DE" +"1043478048","1043478063","GB" +"1043478064","1043478179","DE" +"1043478180","1043478271","GB" +"1043478272","1043478287","DE" +"1043478288","1043479295","GB" +"1043479296","1043479551","DE" +"1043479552","1043480063","GB" +"1043480064","1043480351","DE" +"1043480352","1043480359","GB" +"1043480360","1043480363","DE" +"1043480364","1043480575","GB" +"1043480576","1043480687","CH" +"1043480688","1043480695","GB" +"1043480696","1043480831","CH" +"1043480832","1043481855","GB" +"1043481856","1043481959","CH" +"1043481960","1043481967","GB" +"1043481968","1043481999","CH" +"1043482000","1043482015","GB" +"1043482016","1043482079","CH" +"1043482080","1043482623","GB" +"1043482624","1043482647","CH" +"1043482648","1043482667","GB" +"1043482668","1043482671","CH" +"1043482672","1043482687","GB" +"1043482688","1043482719","CH" +"1043482720","1043482735","GB" +"1043482736","1043482759","CH" +"1043482760","1043482783","GB" +"1043482784","1043482791","CH" +"1043482792","1043482807","GB" +"1043482808","1043482895","CH" +"1043482896","1043482911","GB" +"1043482912","1043482951","CH" +"1043482952","1043482959","GB" +"1043482960","1043482975","CH" +"1043482976","1043482995","GB" +"1043482996","1043483039","CH" +"1043483040","1043483047","GB" +"1043483048","1043483059","CH" +"1043483060","1043483063","GB" +"1043483064","1043483103","CH" +"1043483104","1043483111","GB" +"1043483112","1043483231","CH" +"1043483232","1043483235","GB" +"1043483236","1043483279","CH" +"1043483280","1043483295","GB" +"1043483296","1043483311","CH" +"1043483312","1043483319","GB" +"1043483320","1043483327","CH" +"1043483328","1043483335","GB" +"1043483336","1043483343","CH" +"1043483344","1043483359","GB" +"1043483360","1043483391","CH" +"1043483392","1043483406","GB" +"1043483407","1043483407","CH" +"1043483408","1043483655","GB" +"1043483656","1043483679","CH" +"1043483680","1043483687","GB" +"1043483688","1043483759","CH" +"1043483760","1043483775","GB" +"1043483776","1043483839","CH" +"1043483840","1043483871","GB" +"1043483872","1043483911","CH" +"1043483912","1043484159","GB" +"1043484160","1043484191","CH" +"1043484192","1043484199","GB" +"1043484200","1043484215","CH" +"1043484216","1043484231","GB" +"1043484232","1043484351","CH" +"1043484352","1043484383","GB" +"1043484384","1043484431","CH" +"1043484432","1043484463","GB" +"1043484464","1043484551","CH" +"1043484552","1043484559","GB" +"1043484560","1043484575","CH" +"1043484576","1043484583","GB" +"1043484584","1043484623","CH" +"1043484624","1043484631","GB" +"1043484632","1043484671","CH" +"1043484672","1043484679","GB" +"1043484680","1043484751","CH" +"1043484752","1043484767","GB" +"1043484768","1043484799","CH" +"1043484800","1043484927","GB" +"1043484928","1043484935","CH" +"1043484936","1043484943","GB" +"1043484944","1043484959","CH" +"1043484960","1043484991","GB" +"1043484992","1043485055","CH" +"1043485056","1043485191","GB" +"1043485192","1043485195","CH" +"1043485196","1043485439","GB" +"1043485440","1043485567","CH" +"1043485568","1043485695","GB" +"1043485696","1043486239","CH" +"1043486240","1043486463","GB" +"1043486464","1043486487","CH" +"1043486488","1043486719","GB" +"1043486720","1043486723","CH" +"1043486724","1043486975","GB" +"1043486976","1043487039","CH" +"1043487040","1043487055","GB" +"1043487056","1043487103","CH" +"1043487104","1043487231","GB" +"1043487232","1043487443","CH" +"1043487444","1043487447","GB" +"1043487448","1043487455","CH" +"1043487456","1043487487","GB" +"1043487488","1043487623","CH" +"1043487624","1043487631","GB" +"1043487632","1043487679","CH" +"1043487680","1043487743","GB" +"1043487744","1043487751","CH" +"1043487752","1043488767","GB" +"1043488768","1043496959","DE" +"1043496960","1043497055","FR" +"1043497056","1043497079","GB" +"1043497080","1043497215","FR" +"1043497216","1043497759","GB" +"1043497760","1043497767","FR" +"1043497768","1043497857","GB" +"1043497858","1043497858","FR" +"1043497859","1043497863","GB" +"1043497864","1043497871","FR" +"1043497872","1043497903","GB" +"1043497904","1043497911","FR" +"1043497912","1043497927","GB" +"1043497928","1043497935","FR" +"1043497936","1043497983","GB" +"1043497984","1043498015","FR" +"1043498016","1043498023","GB" +"1043498024","1043498031","FR" +"1043498032","1043498039","GB" +"1043498040","1043498071","FR" +"1043498072","1043498095","GB" +"1043498096","1043498111","FR" +"1043498112","1043498151","GB" +"1043498152","1043498183","FR" +"1043498184","1043498195","GB" +"1043498196","1043498207","FR" +"1043498208","1043498223","GB" +"1043498224","1043498239","FR" +"1043498240","1043498243","GB" +"1043498244","1043498247","FR" +"1043498248","1043498495","GB" +"1043498496","1043498527","FR" +"1043498528","1043498543","GB" +"1043498544","1043498639","FR" +"1043498640","1043498655","GB" +"1043498656","1043498671","FR" +"1043498672","1043498815","GB" +"1043498816","1043498911","FR" +"1043498912","1043499267","GB" +"1043499268","1043499519","FR" +"1043499520","1043505151","GB" +"1043505152","1043513343","NO" +"1043513344","1043529727","GB" +"1043529728","1043595263","NL" +"1043595264","1043600639","DE" +"1043600640","1043600895","FR" +"1043600896","1043606255","DE" +"1043606256","1043606271","GB" +"1043606272","1043607679","DE" +"1043607680","1043607711","FR" +"1043607712","1043609279","DE" +"1043609280","1043609343","AT" +"1043609344","1043609463","DE" +"1043609464","1043609471","IE" +"1043609472","1043619839","DE" +"1043619840","1043620095","IE" +"1043620096","1043621503","DE" +"1043621504","1043621567","GB" +"1043621568","1043623215","DE" +"1043623216","1043623231","GB" +"1043623232","1043633663","DE" +"1043633664","1043633919","FR" +"1043633920","1043661567","DE" +"1043661568","1043661823","GB" +"1043661824","1043693055","DE" +"1043693056","1043693127","GB" +"1043693128","1043693183","DE" +"1043693184","1043693567","GB" +"1043693568","1043718783","DE" +"1043718784","1043718815","FR" +"1043718816","1043719655","DE" +"1043719656","1043719679","CH" +"1043719680","1043857407","DE" +"1043857408","1043890175","GB" +"1043890176","1043890183","A2" +"1043890184","1043890191","NG" +"1043890192","1043890207","A2" +"1043890208","1043890239","NG" +"1043890240","1043890495","A2" +"1043890496","1043890591","NG" +"1043890592","1043891775","A2" +"1043891776","1043891839","NG" +"1043891840","1043892223","A2" +"1043892224","1043892239","MZ" +"1043892240","1043892255","A2" +"1043892256","1043892287","MZ" +"1043892288","1043892479","A2" +"1043892480","1043892735","CD" +"1043892736","1043892991","MZ" +"1043892992","1043893567","A2" +"1043893568","1043893583","NG" +"1043893584","1043894559","A2" +"1043894560","1043894591","LR" +"1043894592","1043894751","A2" +"1043894752","1043894783","NG" +"1043894784","1043894847","LR" +"1043894848","1043894879","NG" +"1043894880","1043895039","A2" +"1043895040","1043895167","NG" +"1043895168","1043895983","A2" +"1043895984","1043895999","AO" +"1043896000","1043896063","A2" +"1043896064","1043896319","NG" +"1043896320","1043897343","A2" +"1043897344","1043897855","KE" +"1043897856","1043898623","A2" +"1043898624","1043898751","TZ" +"1043898752","1043899391","A2" +"1043899392","1043899647","CG" +"1043899648","1043907071","A2" +"1043907072","1043907327","NG" +"1043907328","1043910495","A2" +"1043910496","1043910503","GB" +"1043910504","1043912703","A2" +"1043912704","1043913215","ZM" +"1043913216","1043914751","A2" +"1043914752","1043914879","NG" +"1043914880","1043916799","A2" +"1043916800","1043917055","NG" +"1043917056","1043921919","A2" +"1043921920","1043922943","IL" +"1043922944","1043988479","ES" +"1043988480","1043988495","BE" +"1043988496","1043988511","NL" +"1043988512","1043988519","BE" +"1043988520","1043988527","NL" +"1043988528","1043988551","BE" +"1043988552","1043988559","NL" +"1043988560","1043988575","BE" +"1043988576","1043988607","NL" +"1043988608","1043988679","BE" +"1043988680","1043988711","NL" +"1043988712","1043988719","BE" +"1043988720","1043988727","NL" +"1043988728","1043988735","BE" +"1043988736","1043988767","NL" +"1043988768","1043988775","BE" +"1043988776","1043988799","NL" +"1043988800","1043988895","BE" +"1043988896","1043988927","NL" +"1043988928","1043989119","BE" +"1043989120","1043989503","NL" +"1043989504","1043989535","BE" +"1043989536","1043989543","NL" +"1043989544","1043989567","BE" +"1043989568","1043989583","NL" +"1043989584","1043989591","BE" +"1043989592","1043989599","NL" +"1043989600","1043989639","BE" +"1043989640","1043989655","NL" +"1043989656","1043989663","BE" +"1043989664","1043989695","NL" +"1043989696","1043989751","BE" +"1043989752","1043990143","NL" +"1043990144","1043990271","BE" +"1043990272","1043990367","NL" +"1043990368","1043990535","BE" +"1043990536","1043990543","NL" +"1043990544","1043990567","BE" +"1043990568","1043990591","NL" +"1043990592","1043990615","BE" +"1043990616","1043990623","NL" +"1043990624","1043990631","BE" +"1043990632","1043990783","NL" +"1043990784","1043991055","BE" +"1043991056","1043991063","NL" +"1043991064","1043991103","BE" +"1043991104","1043991231","NL" +"1043991232","1043992063","BE" +"1043992064","1043992319","NL" +"1043992320","1043992575","BE" +"1043992576","1043992735","NL" +"1043992736","1043993599","BE" +"1043993600","1043993855","NL" +"1043993856","1043994643","BE" +"1043994644","1043994651","NL" +"1043994652","1043994655","BE" +"1043994656","1043994667","NL" +"1043994668","1043994671","BE" +"1043994672","1043994675","NL" +"1043994676","1043994679","BE" +"1043994680","1043994699","NL" +"1043994700","1043994703","BE" +"1043994704","1043994707","NL" +"1043994708","1043994711","BE" +"1043994712","1043994723","NL" +"1043994724","1043994727","BE" +"1043994728","1043994747","NL" +"1043994748","1043994755","BE" +"1043994756","1043994759","NL" +"1043994760","1043994791","BE" +"1043994792","1043994795","NL" +"1043994796","1043994811","BE" +"1043994812","1043994815","NL" +"1043994816","1043994851","BE" +"1043994852","1043994855","NL" +"1043994856","1043994863","BE" +"1043994864","1043994867","NL" +"1043994868","1043994871","BE" +"1043994872","1043994875","NL" +"1043994876","1043994879","BE" +"1043994880","1043994887","NL" +"1043994888","1043994907","BE" +"1043994908","1043994911","NL" +"1043994912","1043994931","BE" +"1043994932","1043994935","NL" +"1043994936","1043994975","BE" +"1043994976","1043994979","NL" +"1043994980","1043994995","BE" +"1043994996","1043995003","NL" +"1043995004","1043995023","BE" +"1043995024","1043995027","NL" +"1043995028","1043995043","BE" +"1043995044","1043995051","NL" +"1043995052","1043995059","BE" +"1043995060","1043995063","NL" +"1043995064","1043995103","BE" +"1043995104","1043995111","NL" +"1043995112","1043995127","BE" +"1043995128","1043995131","NL" +"1043995132","1043995135","BE" +"1043995136","1043995139","NL" +"1043995140","1043995151","BE" +"1043995152","1043995155","NL" +"1043995156","1043995183","BE" +"1043995184","1043995187","NL" +"1043995188","1043995219","BE" +"1043995220","1043995223","NL" +"1043995224","1043995279","BE" +"1043995280","1043995283","NL" +"1043995284","1043995291","BE" +"1043995292","1043995295","NL" +"1043995296","1043995303","BE" +"1043995304","1043995311","NL" +"1043995312","1043995663","BE" +"1043995664","1043995687","NL" +"1043995688","1043995695","BE" +"1043995696","1043995703","NL" +"1043995704","1043995719","BE" +"1043995720","1043995735","NL" +"1043995736","1043995767","BE" +"1043995768","1043995783","NL" +"1043995784","1043995807","BE" +"1043995808","1043995831","NL" +"1043995832","1043995863","BE" +"1043995864","1043995887","NL" +"1043995888","1043995919","BE" +"1043995920","1043995935","NL" +"1043995936","1043995943","BE" +"1043995944","1043995951","NL" +"1043995952","1043995975","BE" +"1043995976","1043995999","NL" +"1043996000","1043996015","BE" +"1043996016","1043996023","NL" +"1043996024","1043996095","BE" +"1043996096","1043996103","NL" +"1043996104","1043996111","BE" +"1043996112","1043996119","NL" +"1043996120","1043996143","BE" +"1043996144","1043996151","NL" +"1043996152","1043996159","BE" +"1043996160","1043996287","NL" +"1043996288","1043996319","BE" +"1043996320","1043996335","NL" +"1043996336","1043996415","BE" +"1043996416","1043996679","NL" +"1043996680","1043996687","BE" +"1043996688","1043996695","NL" +"1043996696","1043996703","BE" +"1043996704","1043996711","NL" +"1043996712","1043996735","BE" +"1043996736","1043996775","NL" +"1043996776","1043996791","BE" +"1043996792","1043996799","NL" +"1043996800","1043996815","BE" +"1043996816","1043996895","NL" +"1043996896","1043996927","BE" +"1043996928","1043997375","NL" +"1043997376","1043997463","BE" +"1043997464","1043997471","NL" +"1043997472","1043997519","BE" +"1043997520","1043997551","NL" +"1043997552","1043997559","BE" +"1043997560","1043997583","NL" +"1043997584","1043997615","BE" +"1043997616","1043997631","NL" +"1043997632","1043997639","BE" +"1043997640","1043997663","NL" +"1043997664","1043997687","BE" +"1043997688","1043997823","NL" +"1043997824","1043997887","BE" +"1043997888","1043997903","NL" +"1043997904","1043997919","BE" +"1043997920","1043997927","NL" +"1043997928","1043998079","BE" +"1043998080","1043998103","NL" +"1043998104","1043998111","BE" +"1043998112","1043998143","NL" +"1043998144","1043998151","BE" +"1043998152","1043998159","NL" +"1043998160","1043998167","BE" +"1043998168","1043998191","NL" +"1043998192","1043998195","BE" +"1043998196","1043998198","NL" +"1043998199","1043998199","BE" +"1043998200","1043998207","NL" +"1043998208","1043998463","BE" +"1043998464","1043998719","NL" +"1043998720","1043998759","BE" +"1043998760","1043998783","NL" +"1043998784","1043998799","BE" +"1043998800","1043998855","NL" +"1043998856","1043998863","BE" +"1043998864","1043998879","NL" +"1043998880","1043998887","BE" +"1043998888","1043998911","NL" +"1043998912","1043998975","BE" +"1043998976","1043998983","NL" +"1043998984","1043999039","BE" +"1043999040","1043999055","NL" +"1043999056","1043999071","BE" +"1043999072","1043999111","NL" +"1043999112","1043999119","BE" +"1043999120","1043999143","NL" +"1043999144","1043999151","BE" +"1043999152","1043999159","NL" +"1043999160","1043999207","BE" +"1043999208","1043999215","NL" +"1043999216","1043999231","BE" +"1043999232","1043999487","NL" +"1043999488","1043999751","BE" +"1043999752","1043999759","NL" +"1043999760","1043999775","BE" +"1043999776","1043999783","NL" +"1043999784","1043999791","BE" +"1043999792","1043999823","NL" +"1043999824","1043999831","BE" +"1043999832","1043999951","NL" +"1043999952","1044000031","BE" +"1044000032","1044000063","NL" +"1044000064","1044000095","BE" +"1044000096","1044000767","NL" +"1044000768","1044000831","BE" +"1044000832","1044000895","NL" +"1044000896","1044000999","BE" +"1044001000","1044001015","NL" +"1044001016","1044001271","BE" +"1044001272","1044001663","NL" +"1044001664","1044001791","BE" +"1044001792","1044001823","NL" +"1044001824","1044001839","BE" +"1044001840","1044001847","NL" +"1044001848","1044001895","BE" +"1044001896","1044001927","NL" +"1044001928","1044001935","BE" +"1044001936","1044001983","NL" +"1044001984","1044002023","BE" +"1044002024","1044002039","NL" +"1044002040","1044002063","BE" +"1044002064","1044002087","NL" +"1044002088","1044002095","BE" +"1044002096","1044002103","NL" +"1044002104","1044002135","BE" +"1044002136","1044002143","NL" +"1044002144","1044002303","BE" +"1044002304","1044002831","NL" +"1044002832","1044002855","BE" +"1044002856","1044002859","NL" +"1044002860","1044002879","BE" +"1044002880","1044002883","NL" +"1044002884","1044002891","BE" +"1044002892","1044002899","NL" +"1044002900","1044002911","BE" +"1044002912","1044002919","NL" +"1044002920","1044002931","BE" +"1044002932","1044002947","NL" +"1044002948","1044002959","BE" +"1044002960","1044002975","NL" +"1044002976","1044002983","BE" +"1044002984","1044002987","NL" +"1044002988","1044002999","BE" +"1044003000","1044003003","NL" +"1044003004","1044003019","BE" +"1044003020","1044003023","NL" +"1044003024","1044003027","BE" +"1044003028","1044003031","NL" +"1044003032","1044003071","BE" +"1044003072","1044003079","NL" +"1044003080","1044003099","BE" +"1044003100","1044003103","NL" +"1044003104","1044003115","BE" +"1044003116","1044003119","NL" +"1044003120","1044003123","BE" +"1044003124","1044003131","NL" +"1044003132","1044003147","BE" +"1044003148","1044003151","NL" +"1044003152","1044003155","BE" +"1044003156","1044003159","NL" +"1044003160","1044003167","BE" +"1044003168","1044003171","NL" +"1044003172","1044003183","BE" +"1044003184","1044003187","NL" +"1044003188","1044003211","BE" +"1044003212","1044003215","NL" +"1044003216","1044003223","BE" +"1044003224","1044003227","NL" +"1044003228","1044003235","BE" +"1044003236","1044003251","NL" +"1044003252","1044003279","BE" +"1044003280","1044003283","NL" +"1044003284","1044003291","BE" +"1044003292","1044003295","NL" +"1044003296","1044003299","BE" +"1044003300","1044003303","NL" +"1044003304","1044003311","BE" +"1044003312","1044003315","NL" +"1044003316","1044003331","BE" +"1044003332","1044003343","NL" +"1044003344","1044003359","BE" +"1044003360","1044003362","NL" +"1044003363","1044003363","BE" +"1044003364","1044003371","NL" +"1044003372","1044003379","BE" +"1044003380","1044003383","NL" +"1044003384","1044003423","BE" +"1044003424","1044003427","NL" +"1044003428","1044003459","BE" +"1044003460","1044003463","NL" +"1044003464","1044003467","BE" +"1044003468","1044003471","NL" +"1044003472","1044003483","BE" +"1044003484","1044003487","NL" +"1044003488","1044003511","BE" +"1044003512","1044003527","NL" +"1044003528","1044003539","BE" +"1044003540","1044003543","NL" +"1044003544","1044003551","BE" +"1044003552","1044003563","NL" +"1044003564","1044003579","BE" +"1044003580","1044003591","NL" +"1044003592","1044003595","BE" +"1044003596","1044003599","NL" +"1044003600","1044003619","BE" +"1044003620","1044003631","NL" +"1044003632","1044003635","BE" +"1044003636","1044003639","NL" +"1044003640","1044003647","BE" +"1044003648","1044003651","NL" +"1044003652","1044003655","BE" +"1044003656","1044003659","NL" +"1044003660","1044003663","BE" +"1044003664","1044003667","NL" +"1044003668","1044003675","BE" +"1044003676","1044003683","NL" +"1044003684","1044003687","BE" +"1044003688","1044003691","NL" +"1044003692","1044003695","BE" +"1044003696","1044003699","NL" +"1044003700","1044003723","BE" +"1044003724","1044003727","NL" +"1044003728","1044003731","BE" +"1044003732","1044003751","NL" +"1044003752","1044003755","BE" +"1044003756","1044003775","NL" +"1044003776","1044003783","BE" +"1044003784","1044003787","NL" +"1044003788","1044003807","BE" +"1044003808","1044003811","NL" +"1044003812","1044003815","BE" +"1044003816","1044003819","NL" +"1044003820","1044003823","BE" +"1044003824","1044003831","NL" +"1044003832","1044003855","BE" +"1044003856","1044003871","NL" +"1044003872","1044003879","BE" +"1044003880","1044003895","NL" +"1044003896","1044003911","BE" +"1044003912","1044003919","NL" +"1044003920","1044003927","BE" +"1044003928","1044003959","NL" +"1044003960","1044003967","BE" +"1044003968","1044003975","NL" +"1044003976","1044003983","BE" +"1044003984","1044003991","NL" +"1044003992","1044004015","BE" +"1044004016","1044004079","NL" +"1044004080","1044004095","BE" +"1044004096","1044004303","NL" +"1044004304","1044004351","BE" +"1044004352","1044004879","NL" +"1044004880","1044004903","BE" +"1044004904","1044004911","NL" +"1044004912","1044004927","BE" +"1044004928","1044004991","NL" +"1044004992","1044005639","BE" +"1044005640","1044005647","NL" +"1044005648","1044005663","BE" +"1044005664","1044005671","NL" +"1044005672","1044005679","BE" +"1044005680","1044005687","NL" +"1044005688","1044005695","BE" +"1044005696","1044005759","NL" +"1044005760","1044005799","BE" +"1044005800","1044005807","NL" +"1044005808","1044005823","BE" +"1044005824","1044005847","NL" +"1044005848","1044005887","BE" +"1044005888","1044006143","NL" +"1044006144","1044006911","BE" +"1044006912","1044006927","NL" +"1044006928","1044006935","BE" +"1044006936","1044006943","NL" +"1044006944","1044007007","BE" +"1044007008","1044007023","NL" +"1044007024","1044007031","BE" +"1044007032","1044007039","NL" +"1044007040","1044007047","BE" +"1044007048","1044007055","NL" +"1044007056","1044007063","BE" +"1044007064","1044007087","NL" +"1044007088","1044007119","BE" +"1044007120","1044007135","NL" +"1044007136","1044007167","BE" +"1044007168","1044007679","NL" +"1044007680","1044007935","BE" +"1044007936","1044007967","NL" +"1044007968","1044007983","BE" +"1044007984","1044007991","NL" +"1044007992","1044008007","BE" +"1044008008","1044008023","NL" +"1044008024","1044008031","BE" +"1044008032","1044008039","NL" +"1044008040","1044008047","BE" +"1044008048","1044008063","NL" +"1044008064","1044008095","BE" +"1044008096","1044008127","NL" +"1044008128","1044008183","BE" +"1044008184","1044008223","NL" +"1044008224","1044008239","BE" +"1044008240","1044008255","NL" +"1044008256","1044008279","BE" +"1044008280","1044008287","NL" +"1044008288","1044008319","BE" +"1044008320","1044008735","NL" +"1044008736","1044009055","BE" +"1044009056","1044009087","NL" +"1044009088","1044009183","BE" +"1044009184","1044009199","NL" +"1044009200","1044009215","BE" +"1044009216","1044009455","NL" +"1044009456","1044009487","BE" +"1044009488","1044009503","NL" +"1044009504","1044009535","BE" +"1044009536","1044009583","NL" +"1044009584","1044009599","BE" +"1044009600","1044009983","NL" +"1044009984","1044011007","BE" +"1044011008","1044011019","NL" +"1044011020","1044011023","BE" +"1044011024","1044011039","NL" +"1044011040","1044011043","BE" +"1044011044","1044011055","NL" +"1044011056","1044011059","BE" +"1044011060","1044011223","NL" +"1044011224","1044011227","BE" +"1044011228","1044011367","NL" +"1044011368","1044011371","BE" +"1044011372","1044011427","NL" +"1044011428","1044011431","BE" +"1044011432","1044011455","NL" +"1044011456","1044011459","BE" +"1044011460","1044011635","NL" +"1044011636","1044011639","BE" +"1044011640","1044011703","NL" +"1044011704","1044011707","BE" +"1044011708","1044011731","NL" +"1044011732","1044011735","BE" +"1044011736","1044011763","NL" +"1044011764","1044011767","BE" +"1044011768","1044011771","NL" +"1044011772","1044011775","BE" +"1044011776","1044011791","NL" +"1044011792","1044011795","BE" +"1044011796","1044011971","NL" +"1044011972","1044012031","BE" +"1044012032","1044012039","NL" +"1044012040","1044012063","BE" +"1044012064","1044012087","NL" +"1044012088","1044012095","BE" +"1044012096","1044012103","NL" +"1044012104","1044012111","BE" +"1044012112","1044012119","NL" +"1044012120","1044012135","BE" +"1044012136","1044012143","NL" +"1044012144","1044012151","BE" +"1044012152","1044012159","NL" +"1044012160","1044012167","BE" +"1044012168","1044012191","NL" +"1044012192","1044012223","BE" +"1044012224","1044012239","NL" +"1044012240","1044012255","BE" +"1044012256","1044013055","NL" +"1044013056","1044013111","BE" +"1044013112","1044013119","NL" +"1044013120","1044013135","BE" +"1044013136","1044013143","NL" +"1044013144","1044013247","BE" +"1044013248","1044013263","NL" +"1044013264","1044013271","BE" +"1044013272","1044013279","NL" +"1044013280","1044013375","BE" +"1044013376","1044013439","NL" +"1044013440","1044013575","BE" +"1044013576","1044013583","NL" +"1044013584","1044013615","BE" +"1044013616","1044013623","NL" +"1044013624","1044014111","BE" +"1044014112","1044014119","NL" +"1044014120","1044017167","BE" +"1044017168","1044017187","NL" +"1044017188","1044017191","BE" +"1044017192","1044017199","NL" +"1044017200","1044017215","BE" +"1044017216","1044017247","NL" +"1044017248","1044017359","BE" +"1044017360","1044017383","NL" +"1044017384","1044017399","BE" +"1044017400","1044017407","NL" +"1044017408","1044017919","BE" +"1044017920","1044017983","NL" +"1044017984","1044018039","BE" +"1044018040","1044018047","NL" +"1044018048","1044019279","BE" +"1044019280","1044019283","NL" +"1044019284","1044019291","BE" +"1044019292","1044019295","NL" +"1044019296","1044019315","BE" +"1044019316","1044019323","NL" +"1044019324","1044019347","BE" +"1044019348","1044019351","NL" +"1044019352","1044019383","BE" +"1044019384","1044019399","NL" +"1044019400","1044019403","BE" +"1044019404","1044019407","NL" +"1044019408","1044019415","BE" +"1044019416","1044019439","NL" +"1044019440","1044019443","BE" +"1044019444","1044019471","NL" +"1044019472","1044019491","BE" +"1044019492","1044019495","NL" +"1044019496","1044019503","BE" +"1044019504","1044019507","NL" +"1044019508","1044019695","BE" +"1044019696","1044019699","NL" +"1044019700","1044019819","BE" +"1044019820","1044019823","NL" +"1044019824","1044019995","BE" +"1044019996","1044019999","NL" +"1044020000","1044020147","BE" +"1044020148","1044020151","NL" +"1044020152","1044020215","BE" +"1044020216","1044020219","NL" +"1044020220","1044020255","BE" +"1044020256","1044020263","NL" +"1044020264","1044020303","BE" +"1044020304","1044020319","NL" +"1044020320","1044020511","BE" +"1044020512","1044020551","NL" +"1044020552","1044020567","BE" +"1044020568","1044020591","NL" +"1044020592","1044020607","BE" +"1044020608","1044020671","NL" +"1044020672","1044020735","BE" +"1044020736","1044021759","NL" +"1044021760","1044021887","BE" +"1044021888","1044022319","NL" +"1044022320","1044022335","BE" +"1044022336","1044022351","NL" +"1044022352","1044022415","BE" +"1044022416","1044022783","NL" +"1044022784","1044023039","BE" +"1044023040","1044023295","NL" +"1044023296","1044023343","BE" +"1044023344","1044023359","NL" +"1044023360","1044023407","BE" +"1044023408","1044023439","NL" +"1044023440","1044024319","BE" +"1044024320","1044024447","NL" +"1044024448","1044024575","BE" +"1044024576","1044024835","NL" +"1044024836","1044024843","BE" +"1044024844","1044024847","NL" +"1044024848","1044024851","BE" +"1044024852","1044024855","NL" +"1044024856","1044024863","BE" +"1044024864","1044024867","NL" +"1044024868","1044024875","BE" +"1044024876","1044024883","NL" +"1044024884","1044024887","BE" +"1044024888","1044024891","NL" +"1044024892","1044024959","BE" +"1044024960","1044025351","NL" +"1044025352","1044025599","BE" +"1044025600","1044025855","NL" +"1044025856","1044025863","BE" +"1044025864","1044025871","NL" +"1044025872","1044025879","BE" +"1044025880","1044025927","NL" +"1044025928","1044025935","BE" +"1044025936","1044025967","NL" +"1044025968","1044025983","BE" +"1044025984","1044025999","NL" +"1044026000","1044026007","BE" +"1044026008","1044026023","NL" +"1044026024","1044026031","BE" +"1044026032","1044026047","NL" +"1044026048","1044026055","BE" +"1044026056","1044026079","NL" +"1044026080","1044026095","BE" +"1044026096","1044026111","NL" +"1044026112","1044026119","BE" +"1044026120","1044026143","NL" +"1044026144","1044026159","BE" +"1044026160","1044026167","NL" +"1044026168","1044026175","BE" +"1044026176","1044026183","NL" +"1044026184","1044026199","BE" +"1044026200","1044026207","NL" +"1044026208","1044026215","BE" +"1044026216","1044026247","NL" +"1044026248","1044026255","BE" +"1044026256","1044026263","NL" +"1044026264","1044026279","BE" +"1044026280","1044026327","NL" +"1044026328","1044026343","BE" +"1044026344","1044026383","NL" +"1044026384","1044026391","BE" +"1044026392","1044026399","NL" +"1044026400","1044026407","BE" +"1044026408","1044026415","NL" +"1044026416","1044026431","BE" +"1044026432","1044026447","NL" +"1044026448","1044026455","BE" +"1044026456","1044026479","NL" +"1044026480","1044026487","BE" +"1044026488","1044026519","NL" +"1044026520","1044026535","BE" +"1044026536","1044026607","NL" +"1044026608","1044026615","BE" +"1044026616","1044026631","NL" +"1044026632","1044026639","BE" +"1044026640","1044026647","NL" +"1044026648","1044026655","BE" +"1044026656","1044026663","NL" +"1044026664","1044026671","BE" +"1044026672","1044026679","NL" +"1044026680","1044026687","BE" +"1044026688","1044026695","NL" +"1044026696","1044026703","BE" +"1044026704","1044026727","NL" +"1044026728","1044026767","BE" +"1044026768","1044026791","NL" +"1044026792","1044026799","BE" +"1044026800","1044026815","NL" +"1044026816","1044026839","BE" +"1044026840","1044026855","NL" +"1044026856","1044026863","BE" +"1044026864","1044026895","NL" +"1044026896","1044027263","BE" +"1044027264","1044027407","NL" +"1044027408","1044027415","BE" +"1044027416","1044027423","NL" +"1044027424","1044027431","BE" +"1044027432","1044027447","NL" +"1044027448","1044027455","BE" +"1044027456","1044027471","NL" +"1044027472","1044027487","BE" +"1044027488","1044027519","NL" +"1044027520","1044027527","BE" +"1044027528","1044027535","NL" +"1044027536","1044027575","BE" +"1044027576","1044027583","NL" +"1044027584","1044027591","BE" +"1044027592","1044027639","NL" +"1044027640","1044027647","BE" +"1044027648","1044027655","NL" +"1044027656","1044027671","BE" +"1044027672","1044027687","NL" +"1044027688","1044027711","BE" +"1044027712","1044027727","NL" +"1044027728","1044027775","BE" +"1044027776","1044027839","NL" +"1044027840","1044027903","BE" +"1044027904","1044028159","NL" +"1044028160","1044028543","BE" +"1044028544","1044028559","NL" +"1044028560","1044028799","BE" +"1044028800","1044028927","NL" +"1044028928","1044028935","BE" +"1044028936","1044028943","NL" +"1044028944","1044028955","BE" +"1044028956","1044028959","NL" +"1044028960","1044029011","BE" +"1044029012","1044029015","NL" +"1044029016","1044029019","BE" +"1044029020","1044029023","NL" +"1044029024","1044029027","BE" +"1044029028","1044029031","NL" +"1044029032","1044029039","BE" +"1044029040","1044029043","NL" +"1044029044","1044029311","BE" +"1044029312","1044029441","NL" +"1044029442","1044029442","BE" +"1044029443","1044029445","NL" +"1044029446","1044029448","BE" +"1044029449","1044029451","NL" +"1044029452","1044029452","BE" +"1044029453","1044029453","NL" +"1044029454","1044029455","BE" +"1044029456","1044029463","NL" +"1044029464","1044029466","BE" +"1044029467","1044029467","NL" +"1044029468","1044029470","BE" +"1044029471","1044029479","NL" +"1044029480","1044029483","BE" +"1044029484","1044029485","NL" +"1044029486","1044029487","BE" +"1044029488","1044029488","NL" +"1044029489","1044029489","BE" +"1044029490","1044029492","NL" +"1044029493","1044029493","BE" +"1044029494","1044029494","NL" +"1044029495","1044029497","BE" +"1044029498","1044029498","NL" +"1044029499","1044029501","BE" +"1044029502","1044029502","NL" +"1044029503","1044029505","BE" +"1044029506","1044029509","NL" +"1044029510","1044029510","BE" +"1044029511","1044029511","NL" +"1044029512","1044029535","BE" +"1044029536","1044029536","NL" +"1044029537","1044029537","BE" +"1044029538","1044029538","NL" +"1044029539","1044029545","BE" +"1044029546","1044029546","NL" +"1044029547","1044029548","BE" +"1044029549","1044029549","NL" +"1044029550","1044029552","BE" +"1044029553","1044029553","NL" +"1044029554","1044029554","BE" +"1044029555","1044029556","NL" +"1044029557","1044029557","BE" +"1044029558","1044029558","NL" +"1044029559","1044029561","BE" +"1044029562","1044029567","NL" +"1044029568","1044029568","BE" +"1044029569","1044029569","NL" +"1044029570","1044029572","BE" +"1044029573","1044029575","NL" +"1044029576","1044029580","BE" +"1044029581","1044029581","NL" +"1044029582","1044029584","BE" +"1044029585","1044029585","NL" +"1044029586","1044029586","BE" +"1044029587","1044029587","NL" +"1044029588","1044029590","BE" +"1044029591","1044029595","NL" +"1044029596","1044029596","BE" +"1044029597","1044029598","NL" +"1044029599","1044029599","BE" +"1044029600","1044029600","NL" +"1044029601","1044029601","BE" +"1044029602","1044029603","NL" +"1044029604","1044029606","BE" +"1044029607","1044029608","NL" +"1044029609","1044029609","BE" +"1044029610","1044029610","NL" +"1044029611","1044029611","BE" +"1044029612","1044029612","NL" +"1044029613","1044029616","BE" +"1044029617","1044029618","NL" +"1044029619","1044029620","BE" +"1044029621","1044029622","NL" +"1044029623","1044029625","BE" +"1044029626","1044029628","NL" +"1044029629","1044029630","BE" +"1044029631","1044029631","NL" +"1044029632","1044029634","BE" +"1044029635","1044029635","NL" +"1044029636","1044029636","BE" +"1044029637","1044029638","NL" +"1044029639","1044029640","BE" +"1044029641","1044029641","NL" +"1044029642","1044029642","BE" +"1044029643","1044029647","NL" +"1044029648","1044029648","BE" +"1044029649","1044029651","NL" +"1044029652","1044029652","BE" +"1044029653","1044029659","NL" +"1044029660","1044029660","BE" +"1044029661","1044029663","NL" +"1044029664","1044029665","BE" +"1044029666","1044029667","NL" +"1044029668","1044029668","BE" +"1044029669","1044029669","NL" +"1044029670","1044029672","BE" +"1044029673","1044029676","NL" +"1044029677","1044029678","BE" +"1044029679","1044029680","NL" +"1044029681","1044029681","BE" +"1044029682","1044029682","NL" +"1044029683","1044029684","BE" +"1044029685","1044029686","NL" +"1044029687","1044029687","BE" +"1044029688","1044029693","NL" +"1044029694","1044029694","BE" +"1044029695","1044029695","NL" +"1044029696","1044029711","BE" +"1044029712","1044029719","NL" +"1044029720","1044029727","BE" +"1044029728","1044029743","NL" +"1044029744","1044029767","BE" +"1044029768","1044029775","NL" +"1044029776","1044029783","BE" +"1044029784","1044029823","NL" +"1044029824","1044029839","BE" +"1044029840","1044029871","NL" +"1044029872","1044029879","BE" +"1044029880","1044029887","NL" +"1044029888","1044029919","BE" +"1044029920","1044029951","NL" +"1044029952","1044029959","BE" +"1044029960","1044029967","NL" +"1044029968","1044029983","BE" +"1044029984","1044030015","NL" +"1044030016","1044030031","BE" +"1044030032","1044030047","NL" +"1044030048","1044030055","BE" +"1044030056","1044030063","NL" +"1044030064","1044030071","BE" +"1044030072","1044030111","NL" +"1044030112","1044030119","BE" +"1044030120","1044030127","NL" +"1044030128","1044030135","BE" +"1044030136","1044030191","NL" +"1044030192","1044030223","BE" +"1044030224","1044030231","NL" +"1044030232","1044030239","BE" +"1044030240","1044030247","NL" +"1044030248","1044030263","BE" +"1044030264","1044030279","NL" +"1044030280","1044030295","BE" +"1044030296","1044030303","NL" +"1044030304","1044030311","BE" +"1044030312","1044030335","NL" +"1044030336","1044030343","BE" +"1044030344","1044030351","NL" +"1044030352","1044030359","BE" +"1044030360","1044030375","NL" +"1044030376","1044030391","BE" +"1044030392","1044030399","NL" +"1044030400","1044030415","BE" +"1044030416","1044030439","NL" +"1044030440","1044030447","BE" +"1044030448","1044030463","NL" +"1044030464","1044030471","BE" +"1044030472","1044030487","NL" +"1044030488","1044030495","BE" +"1044030496","1044030527","NL" +"1044030528","1044030535","BE" +"1044030536","1044030543","NL" +"1044030544","1044030551","BE" +"1044030552","1044030583","NL" +"1044030584","1044030591","BE" +"1044030592","1044030607","NL" +"1044030608","1044030623","BE" +"1044030624","1044030639","NL" +"1044030640","1044030655","BE" +"1044030656","1044030671","NL" +"1044030672","1044030687","BE" +"1044030688","1044030703","NL" +"1044030704","1044030735","BE" +"1044030736","1044030759","NL" +"1044030760","1044030775","BE" +"1044030776","1044030799","NL" +"1044030800","1044030807","BE" +"1044030808","1044030815","NL" +"1044030816","1044030823","BE" +"1044030824","1044030831","NL" +"1044030832","1044030847","BE" +"1044030848","1044030879","NL" +"1044030880","1044030887","BE" +"1044030888","1044030895","NL" +"1044030896","1044030903","BE" +"1044030904","1044030911","NL" +"1044030912","1044030919","BE" +"1044030920","1044030927","NL" +"1044030928","1044030935","BE" +"1044030936","1044030959","NL" +"1044030960","1044030967","BE" +"1044030968","1044030975","NL" +"1044030976","1044030991","BE" +"1044030992","1044030999","NL" +"1044031000","1044031007","BE" +"1044031008","1044031039","NL" +"1044031040","1044031103","BE" +"1044031104","1044031119","NL" +"1044031120","1044031127","BE" +"1044031128","1044031151","NL" +"1044031152","1044031167","BE" +"1044031168","1044031271","NL" +"1044031272","1044031295","BE" +"1044031296","1044031319","NL" +"1044031320","1044031335","BE" +"1044031336","1044031343","NL" +"1044031344","1044031351","BE" +"1044031352","1044031359","NL" +"1044031360","1044031360","BE" +"1044031361","1044031363","NL" +"1044031364","1044031364","BE" +"1044031365","1044031367","NL" +"1044031368","1044031375","BE" +"1044031376","1044031399","NL" +"1044031400","1044031431","BE" +"1044031432","1044031439","NL" +"1044031440","1044031455","BE" +"1044031456","1044031479","NL" +"1044031480","1044031487","BE" +"1044031488","1044031489","NL" +"1044031490","1044031490","BE" +"1044031491","1044031494","NL" +"1044031495","1044031495","BE" +"1044031496","1044031496","NL" +"1044031497","1044031497","BE" +"1044031498","1044031507","NL" +"1044031508","1044031508","BE" +"1044031509","1044031509","NL" +"1044031510","1044031510","BE" +"1044031511","1044031519","NL" +"1044031520","1044031520","BE" +"1044031521","1044031523","NL" +"1044031524","1044031524","BE" +"1044031525","1044031531","NL" +"1044031532","1044031532","BE" +"1044031533","1044031533","NL" +"1044031534","1044031536","BE" +"1044031537","1044031550","NL" +"1044031551","1044031551","BE" +"1044031552","1044031552","NL" +"1044031553","1044031553","BE" +"1044031554","1044031556","NL" +"1044031557","1044031557","BE" +"1044031558","1044031558","NL" +"1044031559","1044031559","BE" +"1044031560","1044031562","NL" +"1044031563","1044031563","BE" +"1044031564","1044031566","NL" +"1044031567","1044031567","BE" +"1044031568","1044031568","NL" +"1044031569","1044031569","BE" +"1044031570","1044031571","NL" +"1044031572","1044031572","BE" +"1044031573","1044031573","NL" +"1044031574","1044031574","BE" +"1044031575","1044031579","NL" +"1044031580","1044031581","BE" +"1044031582","1044031582","NL" +"1044031583","1044031584","BE" +"1044031585","1044031592","NL" +"1044031593","1044031593","BE" +"1044031594","1044031597","NL" +"1044031598","1044031598","BE" +"1044031599","1044031599","NL" +"1044031600","1044031600","BE" +"1044031601","1044031627","NL" +"1044031628","1044031628","BE" +"1044031629","1044031629","NL" +"1044031630","1044031630","BE" +"1044031631","1044031635","NL" +"1044031636","1044031636","BE" +"1044031637","1044031640","NL" +"1044031641","1044031641","BE" +"1044031642","1044031643","NL" +"1044031644","1044031644","BE" +"1044031645","1044031651","NL" +"1044031652","1044031652","BE" +"1044031653","1044031654","NL" +"1044031655","1044031655","BE" +"1044031656","1044031656","NL" +"1044031657","1044031658","BE" +"1044031659","1044031666","NL" +"1044031667","1044031667","BE" +"1044031668","1044031668","NL" +"1044031669","1044031670","BE" +"1044031671","1044031673","NL" +"1044031674","1044031674","BE" +"1044031675","1044031675","NL" +"1044031676","1044031677","BE" +"1044031678","1044031683","NL" +"1044031684","1044031684","BE" +"1044031685","1044031687","NL" +"1044031688","1044031688","BE" +"1044031689","1044031690","NL" +"1044031691","1044031692","BE" +"1044031693","1044031698","NL" +"1044031699","1044031699","BE" +"1044031700","1044031702","NL" +"1044031703","1044031704","BE" +"1044031705","1044031709","NL" +"1044031710","1044031710","BE" +"1044031711","1044031711","NL" +"1044031712","1044031712","BE" +"1044031713","1044031714","NL" +"1044031715","1044031715","BE" +"1044031716","1044031717","NL" +"1044031718","1044031719","BE" +"1044031720","1044031721","NL" +"1044031722","1044031723","BE" +"1044031724","1044031726","NL" +"1044031727","1044031727","BE" +"1044031728","1044031751","NL" +"1044031752","1044031759","BE" +"1044031760","1044031799","NL" +"1044031800","1044031807","BE" +"1044031808","1044031815","NL" +"1044031816","1044031871","BE" +"1044031872","1044031879","NL" +"1044031880","1044031895","BE" +"1044031896","1044031927","NL" +"1044031928","1044031943","BE" +"1044031944","1044031951","NL" +"1044031952","1044031991","BE" +"1044031992","1044031999","NL" +"1044032000","1044032031","BE" +"1044032032","1044032047","NL" +"1044032048","1044032055","BE" +"1044032056","1044032071","NL" +"1044032072","1044032079","BE" +"1044032080","1044032103","NL" +"1044032104","1044032127","BE" +"1044032128","1044032143","NL" +"1044032144","1044032167","BE" +"1044032168","1044032175","NL" +"1044032176","1044032183","BE" +"1044032184","1044032191","NL" +"1044032192","1044032199","BE" +"1044032200","1044032223","NL" +"1044032224","1044032239","BE" +"1044032240","1044032263","NL" +"1044032264","1044032287","BE" +"1044032288","1044032303","NL" +"1044032304","1044032327","BE" +"1044032328","1044032375","NL" +"1044032376","1044032407","BE" +"1044032408","1044032471","NL" +"1044032472","1044032479","BE" +"1044032480","1044032527","NL" +"1044032528","1044032559","BE" +"1044032560","1044032583","NL" +"1044032584","1044032615","BE" +"1044032616","1044032639","NL" +"1044032640","1044032647","BE" +"1044032648","1044032655","NL" +"1044032656","1044032663","BE" +"1044032664","1044032695","NL" +"1044032696","1044032703","BE" +"1044032704","1044032719","NL" +"1044032720","1044032727","BE" +"1044032728","1044032735","NL" +"1044032736","1044032743","BE" +"1044032744","1044032775","NL" +"1044032776","1044032783","BE" +"1044032784","1044032791","NL" +"1044032792","1044032799","BE" +"1044032800","1044032815","NL" +"1044032816","1044032831","BE" +"1044032832","1044032855","NL" +"1044032856","1044032863","BE" +"1044032864","1044032887","NL" +"1044032888","1044032903","BE" +"1044032904","1044032927","NL" +"1044032928","1044032935","BE" +"1044032936","1044032943","NL" +"1044032944","1044032959","BE" +"1044032960","1044032967","NL" +"1044032968","1044032975","BE" +"1044032976","1044032991","NL" +"1044032992","1044032999","BE" +"1044033000","1044033031","NL" +"1044033032","1044033055","BE" +"1044033056","1044033071","NL" +"1044033072","1044033079","BE" +"1044033080","1044033087","NL" +"1044033088","1044033095","BE" +"1044033096","1044033111","NL" +"1044033112","1044033119","BE" +"1044033120","1044033135","NL" +"1044033136","1044033159","BE" +"1044033160","1044033207","NL" +"1044033208","1044033215","BE" +"1044033216","1044033223","NL" +"1044033224","1044033231","BE" +"1044033232","1044033335","NL" +"1044033336","1044033343","BE" +"1044033344","1044033351","NL" +"1044033352","1044033359","BE" +"1044033360","1044033375","NL" +"1044033376","1044033407","BE" +"1044033408","1044033431","NL" +"1044033432","1044033447","BE" +"1044033448","1044033527","NL" +"1044033528","1044033535","BE" +"1044033536","1044033543","NL" +"1044033544","1044033551","BE" +"1044033552","1044033575","NL" +"1044033576","1044033583","BE" +"1044033584","1044033623","NL" +"1044033624","1044033631","BE" +"1044033632","1044033655","NL" +"1044033656","1044033663","BE" +"1044033664","1044033671","NL" +"1044033672","1044033687","BE" +"1044033688","1044033719","NL" +"1044033720","1044033727","BE" +"1044033728","1044033847","NL" +"1044033848","1044033855","BE" +"1044033856","1044033895","NL" +"1044033896","1044033903","BE" +"1044033904","1044033927","NL" +"1044033928","1044033935","BE" +"1044033936","1044033991","NL" +"1044033992","1044033999","BE" +"1044034000","1044034015","NL" +"1044034016","1044034023","BE" +"1044034024","1044034031","NL" +"1044034032","1044034039","BE" +"1044034040","1044034055","NL" +"1044034056","1044034063","BE" +"1044034064","1044034095","NL" +"1044034096","1044034119","BE" +"1044034120","1044034127","NL" +"1044034128","1044034143","BE" +"1044034144","1044034207","NL" +"1044034208","1044034215","BE" +"1044034216","1044034231","NL" +"1044034232","1044034247","BE" +"1044034248","1044034263","NL" +"1044034264","1044034271","BE" +"1044034272","1044034279","NL" +"1044034280","1044034295","BE" +"1044034296","1044034303","NL" +"1044034304","1044034311","BE" +"1044034312","1044034327","NL" +"1044034328","1044034335","BE" +"1044034336","1044034375","NL" +"1044034376","1044034383","BE" +"1044034384","1044034487","NL" +"1044034488","1044034495","BE" +"1044034496","1044034511","NL" +"1044034512","1044034519","BE" +"1044034520","1044034615","NL" +"1044034616","1044034623","BE" +"1044034624","1044034663","NL" +"1044034664","1044034671","BE" +"1044034672","1044034735","NL" +"1044034736","1044034743","BE" +"1044034744","1044034751","NL" +"1044034752","1044034759","BE" +"1044034760","1044034783","NL" +"1044034784","1044034791","BE" +"1044034792","1044034847","NL" +"1044034848","1044034855","BE" +"1044034856","1044034919","NL" +"1044034920","1044034927","BE" +"1044034928","1044034975","NL" +"1044034976","1044034983","BE" +"1044034984","1044034999","NL" +"1044035000","1044035007","BE" +"1044035008","1044035031","NL" +"1044035032","1044035039","BE" +"1044035040","1044035047","NL" +"1044035048","1044035055","BE" +"1044035056","1044035063","NL" +"1044035064","1044035071","BE" +"1044035072","1044035087","NL" +"1044035088","1044035095","BE" +"1044035096","1044035143","NL" +"1044035144","1044035151","BE" +"1044035152","1044035191","NL" +"1044035192","1044035199","BE" +"1044035200","1044035223","NL" +"1044035224","1044035231","BE" +"1044035232","1044035255","NL" +"1044035256","1044035263","BE" +"1044035264","1044035287","NL" +"1044035288","1044035311","BE" +"1044035312","1044035327","NL" +"1044035328","1044035351","BE" +"1044035352","1044035367","NL" +"1044035368","1044035375","BE" +"1044035376","1044035407","NL" +"1044035408","1044035423","BE" +"1044035424","1044035447","NL" +"1044035448","1044035471","BE" +"1044035472","1044035479","NL" +"1044035480","1044035487","BE" +"1044035488","1044035495","NL" +"1044035496","1044035503","BE" +"1044035504","1044035511","NL" +"1044035512","1044035527","BE" +"1044035528","1044035535","NL" +"1044035536","1044035543","BE" +"1044035544","1044035559","NL" +"1044035560","1044035591","BE" +"1044035592","1044035607","NL" +"1044035608","1044035623","BE" +"1044035624","1044035655","NL" +"1044035656","1044035663","BE" +"1044035664","1044035671","NL" +"1044035672","1044035679","BE" +"1044035680","1044035711","NL" +"1044035712","1044035727","BE" +"1044035728","1044035751","NL" +"1044035752","1044035759","BE" +"1044035760","1044035791","NL" +"1044035792","1044035807","BE" +"1044035808","1044035831","NL" +"1044035832","1044035839","BE" +"1044035840","1044035847","NL" +"1044035848","1044035871","BE" +"1044035872","1044035887","NL" +"1044035888","1044035895","BE" +"1044035896","1044035903","NL" +"1044035904","1044035919","BE" +"1044035920","1044035935","NL" +"1044035936","1044035967","BE" +"1044035968","1044035975","NL" +"1044035976","1044035991","BE" +"1044035992","1044035999","NL" +"1044036000","1044036007","BE" +"1044036008","1044036039","NL" +"1044036040","1044036047","BE" +"1044036048","1044036079","NL" +"1044036080","1044036087","BE" +"1044036088","1044036095","NL" +"1044036096","1044036103","BE" +"1044036104","1044036111","NL" +"1044036112","1044036119","BE" +"1044036120","1044036127","NL" +"1044036128","1044036135","BE" +"1044036136","1044036143","NL" +"1044036144","1044036159","BE" +"1044036160","1044036167","NL" +"1044036168","1044036199","BE" +"1044036200","1044036223","NL" +"1044036224","1044036247","BE" +"1044036248","1044036255","NL" +"1044036256","1044036271","BE" +"1044036272","1044036295","NL" +"1044036296","1044036311","BE" +"1044036312","1044036327","NL" +"1044036328","1044036335","BE" +"1044036336","1044036399","NL" +"1044036400","1044036407","BE" +"1044036408","1044036415","NL" +"1044036416","1044036423","BE" +"1044036424","1044036439","NL" +"1044036440","1044036447","BE" +"1044036448","1044036471","NL" +"1044036472","1044036479","BE" +"1044036480","1044036503","NL" +"1044036504","1044036511","BE" +"1044036512","1044036527","NL" +"1044036528","1044036543","BE" +"1044036544","1044036559","NL" +"1044036560","1044036567","BE" +"1044036568","1044036575","NL" +"1044036576","1044036623","BE" +"1044036624","1044036647","NL" +"1044036648","1044036655","BE" +"1044036656","1044036671","NL" +"1044036672","1044036687","BE" +"1044036688","1044036735","NL" +"1044036736","1044036743","BE" +"1044036744","1044036759","NL" +"1044036760","1044036767","BE" +"1044036768","1044036775","NL" +"1044036776","1044036783","BE" +"1044036784","1044036791","NL" +"1044036792","1044036799","BE" +"1044036800","1044036807","NL" +"1044036808","1044036815","BE" +"1044036816","1044036863","NL" +"1044036864","1044036864","BE" +"1044036865","1044036865","NL" +"1044036866","1044036866","BE" +"1044036867","1044036890","NL" +"1044036891","1044036891","BE" +"1044036892","1044036899","NL" +"1044036900","1044036900","BE" +"1044036901","1044036907","NL" +"1044036908","1044036908","BE" +"1044036909","1044036909","NL" +"1044036910","1044036910","BE" +"1044036911","1044036927","NL" +"1044036928","1044036928","BE" +"1044036929","1044036942","NL" +"1044036943","1044036943","BE" +"1044036944","1044036948","NL" +"1044036949","1044036951","BE" +"1044036952","1044036957","NL" +"1044036958","1044036958","BE" +"1044036959","1044036967","NL" +"1044036968","1044036968","BE" +"1044036969","1044036970","NL" +"1044036971","1044036971","BE" +"1044036972","1044036976","NL" +"1044036977","1044036977","BE" +"1044036978","1044036984","NL" +"1044036985","1044036985","BE" +"1044036986","1044036990","NL" +"1044036991","1044036991","BE" +"1044036992","1044037007","NL" +"1044037008","1044037010","BE" +"1044037011","1044037014","NL" +"1044037015","1044037015","BE" +"1044037016","1044037021","NL" +"1044037022","1044037022","BE" +"1044037023","1044037023","NL" +"1044037024","1044037025","BE" +"1044037026","1044037026","NL" +"1044037027","1044037027","BE" +"1044037028","1044037037","NL" +"1044037038","1044037038","BE" +"1044037039","1044037042","NL" +"1044037043","1044037043","BE" +"1044037044","1044037047","NL" +"1044037048","1044037048","BE" +"1044037049","1044037049","NL" +"1044037050","1044037051","BE" +"1044037052","1044037056","NL" +"1044037057","1044037057","BE" +"1044037058","1044037061","NL" +"1044037062","1044037063","BE" +"1044037064","1044037065","NL" +"1044037066","1044037066","BE" +"1044037067","1044037070","NL" +"1044037071","1044037071","BE" +"1044037072","1044037074","NL" +"1044037075","1044037075","BE" +"1044037076","1044037091","NL" +"1044037092","1044037092","BE" +"1044037093","1044037098","NL" +"1044037099","1044037100","BE" +"1044037101","1044037101","NL" +"1044037102","1044037102","BE" +"1044037103","1044037106","NL" +"1044037107","1044037107","BE" +"1044037108","1044037109","NL" +"1044037110","1044037110","BE" +"1044037111","1044037143","NL" +"1044037144","1044037151","BE" +"1044037152","1044037159","NL" +"1044037160","1044037167","BE" +"1044037168","1044037191","NL" +"1044037192","1044037223","BE" +"1044037224","1044037271","NL" +"1044037272","1044037279","BE" +"1044037280","1044037287","NL" +"1044037288","1044037295","BE" +"1044037296","1044037319","NL" +"1044037320","1044037327","BE" +"1044037328","1044037375","NL" +"1044037376","1044037631","BE" +"1044037632","1044037667","NL" +"1044037668","1044037671","BE" +"1044037672","1044037703","NL" +"1044037704","1044037711","BE" +"1044037712","1044037735","NL" +"1044037736","1044037743","BE" +"1044037744","1044037759","NL" +"1044037760","1044037763","BE" +"1044037764","1044037775","NL" +"1044037776","1044037783","BE" +"1044037784","1044037791","NL" +"1044037792","1044037823","BE" +"1044037824","1044037831","NL" +"1044037832","1044037839","BE" +"1044037840","1044037855","NL" +"1044037856","1044037887","BE" +"1044037888","1044038143","NL" +"1044038144","1044038527","BE" +"1044038528","1044038535","NL" +"1044038536","1044038543","BE" +"1044038544","1044038559","NL" +"1044038560","1044038567","BE" +"1044038568","1044038575","NL" +"1044038576","1044038583","BE" +"1044038584","1044038591","NL" +"1044038592","1044038599","BE" +"1044038600","1044038607","NL" +"1044038608","1044038623","BE" +"1044038624","1044038639","NL" +"1044038640","1044038647","BE" +"1044038648","1044038671","NL" +"1044038672","1044038679","BE" +"1044038680","1044038687","NL" +"1044038688","1044038703","BE" +"1044038704","1044038783","NL" +"1044038784","1044038911","BE" +"1044038912","1044038919","NL" +"1044038920","1044038927","BE" +"1044038928","1044038935","NL" +"1044038936","1044038943","BE" +"1044038944","1044039295","NL" +"1044039296","1044039303","BE" +"1044039304","1044039311","NL" +"1044039312","1044039359","BE" +"1044039360","1044039687","NL" +"1044039688","1044039695","BE" +"1044039696","1044039751","NL" +"1044039752","1044039759","BE" +"1044039760","1044039775","NL" +"1044039776","1044039855","BE" +"1044039856","1044039951","NL" +"1044039952","1044039959","BE" +"1044039960","1044039967","NL" +"1044039968","1044040015","BE" +"1044040016","1044040063","NL" +"1044040064","1044040111","BE" +"1044040112","1044040143","NL" +"1044040144","1044040159","BE" +"1044040160","1044040191","NL" +"1044040192","1044040223","BE" +"1044040224","1044040231","NL" +"1044040232","1044040239","BE" +"1044040240","1044040255","NL" +"1044040256","1044040703","BE" +"1044040704","1044041727","NL" +"1044041728","1044043775","BE" +"1044043776","1044043783","NL" +"1044043784","1044043787","BE" +"1044043788","1044043791","NL" +"1044043792","1044043795","BE" +"1044043796","1044043799","NL" +"1044043800","1044043803","BE" +"1044043804","1044043807","NL" +"1044043808","1044043811","BE" +"1044043812","1044043823","NL" +"1044043824","1044043827","BE" +"1044043828","1044043835","NL" +"1044043836","1044043847","BE" +"1044043848","1044043851","NL" +"1044043852","1044043879","BE" +"1044043880","1044043883","NL" +"1044043884","1044043895","BE" +"1044043896","1044043903","NL" +"1044043904","1044043907","BE" +"1044043908","1044043919","NL" +"1044043920","1044043927","BE" +"1044043928","1044043931","NL" +"1044043932","1044043935","BE" +"1044043936","1044043943","NL" +"1044043944","1044043955","BE" +"1044043956","1044043971","NL" +"1044043972","1044043975","BE" +"1044043976","1044043987","NL" +"1044043988","1044043999","BE" +"1044044000","1044044003","NL" +"1044044004","1044044007","BE" +"1044044008","1044044011","NL" +"1044044012","1044044015","BE" +"1044044016","1044044019","NL" +"1044044020","1044044027","BE" +"1044044028","1044044035","NL" +"1044044036","1044044043","BE" +"1044044044","1044044051","NL" +"1044044052","1044044055","BE" +"1044044056","1044044059","NL" +"1044044060","1044044071","BE" +"1044044072","1044044083","NL" +"1044044084","1044044099","BE" +"1044044100","1044044119","NL" +"1044044120","1044044131","BE" +"1044044132","1044044135","NL" +"1044044136","1044044143","BE" +"1044044144","1044044163","NL" +"1044044164","1044044167","BE" +"1044044168","1044044171","NL" +"1044044172","1044044187","BE" +"1044044188","1044044215","NL" +"1044044216","1044044227","BE" +"1044044228","1044044243","NL" +"1044044244","1044044247","BE" +"1044044248","1044044251","NL" +"1044044252","1044045311","BE" +"1044045312","1044045695","NL" +"1044045696","1044045911","BE" +"1044045912","1044045919","NL" +"1044045920","1044046079","BE" +"1044046080","1044046223","NL" +"1044046224","1044046231","BE" +"1044046232","1044046239","NL" +"1044046240","1044046319","BE" +"1044046320","1044046327","NL" +"1044046328","1044051987","BE" +"1044051988","1044051991","NL" +"1044051992","1044052011","BE" +"1044052012","1044052015","NL" +"1044052016","1044052031","BE" +"1044052032","1044052039","NL" +"1044052040","1044052063","BE" +"1044052064","1044052067","NL" +"1044052068","1044052107","BE" +"1044052108","1044052111","NL" +"1044052112","1044052131","BE" +"1044052132","1044052135","NL" +"1044052136","1044052223","BE" +"1044052224","1044052227","NL" +"1044052228","1044052255","BE" +"1044052256","1044052259","NL" +"1044052260","1044052347","BE" +"1044052348","1044052359","NL" +"1044052360","1044052363","BE" +"1044052364","1044052375","NL" +"1044052376","1044052479","BE" +"1044052480","1044052483","NL" +"1044052484","1044052967","BE" +"1044052968","1044052971","NL" +"1044052972","1044052983","BE" +"1044052984","1044052987","NL" +"1044052988","1044053055","BE" +"1044053056","1044053063","NL" +"1044053064","1044053255","BE" +"1044053256","1044053263","NL" +"1044053264","1044053455","BE" +"1044053456","1044053463","NL" +"1044053464","1044053567","BE" +"1044053568","1044059263","NL" +"1044059264","1044059935","BE" +"1044059936","1044060031","NL" +"1044060032","1044060063","BE" +"1044060064","1044061183","NL" +"1044061184","1044061223","BE" +"1044061224","1044061263","NL" +"1044061264","1044061271","BE" +"1044061272","1044061343","NL" +"1044061344","1044061375","BE" +"1044061376","1044061391","NL" +"1044061392","1044061399","BE" +"1044061400","1044061431","NL" +"1044061432","1044061439","BE" +"1044061440","1044061695","NL" +"1044061696","1044061703","BE" +"1044061704","1044061759","NL" +"1044061760","1044061775","BE" +"1044061776","1044061783","NL" +"1044061784","1044061807","BE" +"1044061808","1044061831","NL" +"1044061832","1044061839","BE" +"1044061840","1044061879","NL" +"1044061880","1044061895","BE" +"1044061896","1044061919","NL" +"1044061920","1044061951","BE" +"1044061952","1044062015","NL" +"1044062016","1044062047","BE" +"1044062048","1044062079","NL" +"1044062080","1044062095","BE" +"1044062096","1044062103","NL" +"1044062104","1044062135","BE" +"1044062136","1044062175","NL" +"1044062176","1044062199","BE" +"1044062200","1044062223","NL" +"1044062224","1044062239","BE" +"1044062240","1044062375","NL" +"1044062376","1044062383","BE" +"1044062384","1044062399","NL" +"1044062400","1044062415","BE" +"1044062416","1044062455","NL" +"1044062456","1044062471","BE" +"1044062472","1044062503","NL" +"1044062504","1044062527","BE" +"1044062528","1044062535","NL" +"1044062536","1044062543","BE" +"1044062544","1044062575","NL" +"1044062576","1044062583","BE" +"1044062584","1044062591","NL" +"1044062592","1044062599","BE" +"1044062600","1044062607","NL" +"1044062608","1044062623","BE" +"1044062624","1044062647","NL" +"1044062648","1044062655","BE" +"1044062656","1044062663","NL" +"1044062664","1044062671","BE" +"1044062672","1044063231","NL" +"1044063232","1044063355","BE" +"1044063356","1044063363","NL" +"1044063364","1044067327","BE" +"1044067328","1044068351","NL" +"1044068352","1044068991","BE" +"1044068992","1044069631","NL" +"1044069632","1044070399","BE" +"1044070400","1044076607","NL" +"1044076608","1044076799","BE" +"1044076800","1044077055","NL" +"1044077056","1044077567","BE" +"1044077568","1044092927","NL" +"1044092928","1044093183","BE" +"1044093184","1044094975","NL" +"1044094976","1044099071","BE" +"1044099072","1044103263","NL" +"1044103264","1044103423","BE" +"1044103424","1044103999","NL" +"1044104000","1044104031","BE" +"1044104032","1044104095","NL" +"1044104096","1044104159","BE" +"1044104160","1044104287","NL" +"1044104288","1044104319","BE" +"1044104320","1044104367","NL" +"1044104368","1044104383","BE" +"1044104384","1044104543","NL" +"1044104544","1044104559","BE" +"1044104560","1044104831","NL" +"1044104832","1044105023","BE" +"1044105024","1044105055","NL" +"1044105056","1044105087","BE" +"1044105088","1044105151","NL" +"1044105152","1044106771","BE" +"1044106772","1044106775","NL" +"1044106776","1044106787","BE" +"1044106788","1044106795","NL" +"1044106796","1044106807","BE" +"1044106808","1044106815","NL" +"1044106816","1044107263","BE" +"1044107264","1044111359","NL" +"1044111360","1044115455","BE" +"1044115456","1044117503","NL" +"1044117504","1044117551","BE" +"1044117552","1044117567","NL" +"1044117568","1044118527","BE" +"1044118528","1044118783","NL" +"1044118784","1044118847","BE" +"1044118848","1044118895","NL" +"1044118896","1044118903","BE" +"1044118904","1044119551","NL" +"1044119552","1044152319","GB" +"1044152320","1044185087","IR" +"1044185088","1044193279","RU" +"1044193280","1044201471","PL" +"1044201472","1044217855","FI" +"1044217856","1044226047","DK" +"1044226048","1044234239","OM" +"1044250624","1044251391","BE" +"1044251392","1044251647","EU" +"1044251648","1044252415","BE" +"1044252416","1044252927","EU" +"1044252928","1044253439","BE" +"1044253440","1044253695","EU" +"1044253696","1044254463","BE" +"1044254464","1044254975","EU" +"1044254976","1044255487","BE" +"1044255488","1044255999","EU" +"1044256000","1044256511","BE" +"1044256512","1044256767","EU" +"1044256768","1044257535","BE" +"1044257536","1044257791","EU" +"1044257792","1044258559","BE" +"1044258560","1044259071","EU" +"1044259072","1044259583","BE" +"1044259584","1044260095","EU" +"1044260096","1044261631","BE" +"1044261632","1044262143","EU" +"1044262144","1044262399","BE" +"1044262400","1044263167","EU" +"1044263168","1044263423","BE" +"1044263424","1044264191","EU" +"1044264192","1044264447","BE" +"1044264448","1044265215","EU" +"1044265216","1044265471","BE" +"1044265472","1044265983","EU" +"1044265984","1044266751","BE" +"1044266752","1044267519","EU" +"1044267520","1044269567","BE" +"1044269568","1044270079","EU" +"1044270080","1044271615","BE" +"1044271616","1044272127","EU" +"1044272128","1044272383","BE" +"1044272384","1044272895","EU" +"1044272896","1044273151","BE" +"1044273152","1044283391","EU" +"1044283392","1044316159","FR" +"1044316160","1044332543","NO" +"1044332544","1044348927","RU" +"1044348928","1044365311","LV" +"1044365312","1044381695","SE" +"1044381696","1044389887","RU" +"1044389888","1044398079","FR" +"1044398080","1044414463","UA" +"1044414464","1044447231","GB" +"1044447232","1044451583","SE" +"1044451584","1044451839","NO" +"1044451840","1044453183","SE" +"1044453184","1044453263","NO" +"1044453264","1044454399","SE" +"1044454400","1044454415","NO" +"1044454416","1044454423","SE" +"1044454424","1044454427","NO" +"1044454428","1044454463","SE" +"1044454464","1044454495","NO" +"1044454496","1044454511","SE" +"1044454512","1044454559","NO" +"1044454560","1044454583","SE" +"1044454584","1044454655","NO" +"1044454656","1044454911","SE" +"1044454912","1044455423","NO" +"1044455424","1044463615","EE" +"1044463616","1044479999","SE" +"1044480000","1044488191","CH" +"1044488192","1044494911","SK" +"1044494912","1044494943","SR" +"1044494944","1044496383","SK" +"1044496384","1044512767","EE" +"1044512768","1044578303","DK" +"1044578304","1044580607","DE" +"1044580608","1044580735","GB" +"1044580736","1044580767","DE" +"1044580768","1044580799","GB" +"1044580800","1044581119","DE" +"1044581120","1044581631","GB" +"1044581632","1044581887","DE" +"1044581888","1044586495","GB" +"1044586496","1044587007","DE" +"1044587008","1044587519","GB" +"1044587520","1044587775","DE" +"1044587776","1044588031","GB" +"1044588032","1044588287","DE" +"1044588288","1044588575","GB" +"1044588576","1044588607","DE" +"1044588608","1044588799","GB" +"1044588800","1044589567","DE" +"1044589568","1044590079","GB" +"1044590080","1044590335","DE" +"1044590336","1044590591","GB" +"1044590592","1044590671","DE" +"1044590672","1044590719","GB" +"1044590720","1044590783","DE" +"1044590784","1044590847","GB" +"1044590848","1044592127","DE" +"1044592128","1044592143","GB" +"1044592144","1044592159","DE" +"1044592160","1044592191","GB" +"1044592192","1044592255","DE" +"1044592256","1044592639","GB" +"1044592640","1044592655","DE" +"1044592656","1044592671","GB" +"1044592672","1044592703","DE" +"1044592704","1044592831","GB" +"1044592832","1044593151","DE" +"1044593152","1044593663","GB" +"1044593664","1044594431","DE" +"1044594432","1044625407","GB" +"1044625408","1044625463","DE" +"1044625464","1044625471","GB" +"1044625472","1044625535","DE" +"1044625536","1044625663","GB" +"1044625664","1044625679","DE" +"1044625680","1044627455","GB" +"1044627456","1044628223","DE" +"1044628224","1044629503","GB" +"1044629504","1044629759","DE" +"1044629760","1044631551","GB" +"1044631552","1044631903","DE" +"1044631904","1044631951","GB" +"1044631952","1044631967","DE" +"1044631968","1044632063","GB" +"1044632064","1044633087","DE" +"1044633088","1044633343","GB" +"1044633344","1044633855","DE" +"1044633856","1044634623","GB" +"1044634624","1044634879","DE" +"1044634880","1044635647","GB" +"1044635648","1044636159","US" +"1044636160","1044638207","DE" +"1044638208","1044638223","GB" +"1044638224","1044638239","DE" +"1044638240","1044638273","GB" +"1044638274","1044638274","A1" +"1044638275","1044638463","GB" +"1044638464","1044638719","DE" +"1044638720","1044638975","GB" +"1044638976","1044639231","DE" +"1044639232","1044639743","GB" +"1044639744","1044641791","DE" +"1044641792","1044642815","US" +"1044642816","1044643327","DE" +"1044643328","1044643839","GB" +"1044643840","1044652031","DE" +"1044652032","1044660223","LY" +"1044660224","1044660479","GR" +"1044660480","1044660991","US" +"1044660992","1044661247","AU" +"1044661248","1044661503","SA" +"1044661504","1044661759","GR" +"1044661760","1044662271","AU" +"1044662272","1044663807","US" +"1044663808","1044664063","AU" +"1044664064","1044664575","US" +"1044664576","1044664895","GR" +"1044664896","1044664959","IR" +"1044664960","1044665343","GR" +"1044665344","1044665855","US" +"1044665856","1044666367","GR" +"1044666368","1044666623","US" +"1044666624","1044667391","GR" +"1044667392","1044667647","US" +"1044667648","1044668159","GR" +"1044668160","1044668415","SA" +"1044668416","1044676607","BA" +"1044676608","1044684799","RU" +"1044684800","1044692991","HU" +"1044692992","1044695935","AT" +"1044695936","1044696062","DE" +"1044696063","1044697087","AT" +"1044697088","1044697343","DE" +"1044697344","1044697855","AT" +"1044697856","1044698110","DE" +"1044698111","1044698111","AT" +"1044698112","1044698367","DE" +"1044698368","1044698623","AT" +"1044698624","1044699134","DE" +"1044699135","1044701183","AT" +"1044701184","1044709375","EG" +"1044709376","1044717567","RU" +"1044717568","1044742143","GB" +"1044742144","1044742399","KW" +"1044742400","1044742655","US" +"1044742656","1044750335","KW" +"1044750336","1044750351","US" +"1044750352","1044750355","HU" +"1044750356","1044750359","BE" +"1044750360","1044750363","GB" +"1044750364","1044750367","FI" +"1044750368","1044753151","NL" +"1044753152","1044753183","DE" +"1044753184","1044753215","HU" +"1044753216","1044758527","NL" +"1044758528","1044774911","PL" +"1044774912","1044782079","NO" +"1044782080","1044782335","EU" +"1044782336","1044800383","NO" +"1044800384","1044800511","IT" +"1044800512","1044840447","NO" +"1044840448","1044905983","FI" +"1044905984","1044908031","GB" +"1044908032","1044909055","US" +"1044909056","1044910847","GB" +"1044910848","1044911103","DE" +"1044911104","1044913951","GB" +"1044913952","1044913967","DE" +"1044913968","1044913983","GB" +"1044913984","1044914015","DE" +"1044914016","1044914047","GB" +"1044914048","1044914111","DE" +"1044914112","1044916735","GB" +"1044916736","1044917247","DE" +"1044917248","1044917279","GB" +"1044917280","1044917295","US" +"1044917296","1044917311","DE" +"1044917312","1044917343","GB" +"1044917344","1044917359","DE" +"1044917360","1044917503","GB" +"1044917504","1044917759","DE" +"1044917760","1044917823","GB" +"1044917824","1044918271","DE" +"1044918272","1044918287","GB" +"1044918288","1044919295","DE" +"1044919296","1044920191","GB" +"1044920192","1044920319","DE" +"1044920320","1044921343","GB" +"1044921344","1044922367","US" +"1044922368","1044930559","DE" +"1044930560","1044930695","BE" +"1044930696","1044930703","GB" +"1044930704","1044930751","BE" +"1044930752","1044930783","GB" +"1044930784","1044930791","BE" +"1044930792","1044930795","GB" +"1044930796","1044930799","BE" +"1044930800","1044930807","GB" +"1044930808","1044930823","BE" +"1044930824","1044930831","GB" +"1044930832","1044930847","BE" +"1044930848","1044930879","FR" +"1044930880","1044930911","BE" +"1044930912","1044930927","DE" +"1044930928","1044930935","GB" +"1044930936","1044930967","BE" +"1044930968","1044930975","FR" +"1044930976","1044930979","GB" +"1044930980","1044931343","BE" +"1044931344","1044931359","GB" +"1044931360","1044931375","BE" +"1044931376","1044931391","GB" +"1044931392","1044931407","BE" +"1044931408","1044931439","GB" +"1044931440","1044931455","BE" +"1044931456","1044931463","GB" +"1044931464","1044931487","BE" +"1044931488","1044931495","GB" +"1044931496","1044931535","BE" +"1044931536","1044931543","GB" +"1044931544","1044931551","BE" +"1044931552","1044931567","GB" +"1044931568","1044931583","BE" +"1044931584","1044931623","GB" +"1044931624","1044931631","BE" +"1044931632","1044931639","GB" +"1044931640","1044931663","BE" +"1044931664","1044931671","GB" +"1044931672","1044931759","BE" +"1044931760","1044931775","GB" +"1044931776","1044931831","BE" +"1044931832","1044931835","GB" +"1044931836","1044931855","BE" +"1044931856","1044931871","GB" +"1044931872","1044931903","BE" +"1044931904","1044931911","GB" +"1044931912","1044931915","BE" +"1044931916","1044931919","GB" +"1044931920","1044931923","BE" +"1044931924","1044931927","GB" +"1044931928","1044931935","BE" +"1044931936","1044931951","GB" +"1044931952","1044931975","BE" +"1044931976","1044931983","GB" +"1044931984","1044932047","BE" +"1044932048","1044932087","GB" +"1044932088","1044932383","BE" +"1044932384","1044932391","GB" +"1044932392","1044932399","BE" +"1044932400","1044932407","GB" +"1044932408","1044932503","BE" +"1044932504","1044932543","GB" +"1044932544","1044932607","BE" +"1044932608","1044932671","LU" +"1044932672","1044932675","BE" +"1044932676","1044932687","GB" +"1044932688","1044932703","BE" +"1044932704","1044932707","GB" +"1044932708","1044932719","BE" +"1044932720","1044932727","GB" +"1044932728","1044932735","BE" +"1044932736","1044932799","GB" +"1044932800","1044932831","BE" +"1044932832","1044932863","GB" +"1044932864","1044932895","BE" +"1044932896","1044932903","GB" +"1044932904","1044932935","BE" +"1044932936","1044932947","GB" +"1044932948","1044932951","BE" +"1044932952","1044932959","GB" +"1044932960","1044933007","BE" +"1044933008","1044933015","GB" +"1044933016","1044933019","BE" +"1044933020","1044933039","GB" +"1044933040","1044933055","BE" +"1044933056","1044933071","GB" +"1044933072","1044933103","BE" +"1044933104","1044933107","GB" +"1044933108","1044933215","BE" +"1044933216","1044933227","GB" +"1044933228","1044933239","BE" +"1044933240","1044933247","GB" +"1044933248","1044933303","BE" +"1044933304","1044933311","GB" +"1044933312","1044933359","BE" +"1044933360","1044933375","GB" +"1044933376","1044933407","BE" +"1044933408","1044933411","GB" +"1044933412","1044933415","BE" +"1044933416","1044933439","GB" +"1044933440","1044933487","BE" +"1044933488","1044933495","GB" +"1044933496","1044933503","BE" +"1044933504","1044933519","GB" +"1044933520","1044933551","BE" +"1044933552","1044933555","GB" +"1044933556","1044933583","BE" +"1044933584","1044933599","GB" +"1044933600","1044933615","BE" +"1044933616","1044933623","GB" +"1044933624","1044933711","BE" +"1044933712","1044933719","GB" +"1044933720","1044933727","BE" +"1044933728","1044933735","GB" +"1044933736","1044933743","BE" +"1044933744","1044933759","GB" +"1044933760","1044933823","BE" +"1044933824","1044933831","GB" +"1044933832","1044933843","BE" +"1044933844","1044933847","GB" +"1044933848","1044933863","BE" +"1044933864","1044933887","GB" +"1044933888","1044933919","BE" +"1044933920","1044933935","GB" +"1044933936","1044933967","BE" +"1044933968","1044933975","GB" +"1044933976","1044934111","BE" +"1044934112","1044934119","GB" +"1044934120","1044934151","BE" +"1044934152","1044934159","GB" +"1044934160","1044934191","BE" +"1044934192","1044934199","GB" +"1044934200","1044934231","BE" +"1044934232","1044934247","GB" +"1044934248","1044934287","BE" +"1044934288","1044934295","GB" +"1044934296","1044934319","BE" +"1044934320","1044934327","GB" +"1044934328","1044934359","BE" +"1044934360","1044934503","GB" +"1044934504","1044934543","BE" +"1044934544","1044934551","GB" +"1044934552","1044934575","BE" +"1044934576","1044934583","GB" +"1044934584","1044934591","BE" +"1044934592","1044934599","GB" +"1044934600","1044934607","BE" +"1044934608","1044934615","GB" +"1044934616","1044934719","BE" +"1044934720","1044934783","GB" +"1044934784","1044934815","BE" +"1044934816","1044934819","GB" +"1044934820","1044934823","BE" +"1044934824","1044934911","GB" +"1044934912","1044935027","BE" +"1044935028","1044935031","GB" +"1044935032","1044935035","BE" +"1044935036","1044935039","GB" +"1044935040","1044935183","BE" +"1044935184","1044935199","GB" +"1044935200","1044935231","BE" +"1044935232","1044935247","GB" +"1044935248","1044935263","BE" +"1044935264","1044935295","GB" +"1044935296","1044935331","BE" +"1044935332","1044935343","GB" +"1044935344","1044935355","BE" +"1044935356","1044935391","GB" +"1044935392","1044935407","BE" +"1044935408","1044935423","GB" +"1044935424","1044935431","BE" +"1044935432","1044935439","LU" +"1044935440","1044935595","BE" +"1044935596","1044935599","GB" +"1044935600","1044935623","BE" +"1044935624","1044935631","GB" +"1044935632","1044935743","BE" +"1044935744","1044935751","GB" +"1044935752","1044935839","BE" +"1044935840","1044935847","GB" +"1044935848","1044935851","BE" +"1044935852","1044935871","GB" +"1044935872","1044935879","BE" +"1044935880","1044935887","GB" +"1044935888","1044935895","BE" +"1044935896","1044936095","GB" +"1044936096","1044936103","BE" +"1044936104","1044936111","GB" +"1044936112","1044936123","BE" +"1044936124","1044936151","GB" +"1044936152","1044936207","BE" +"1044936208","1044936215","GB" +"1044936216","1044936231","BE" +"1044936232","1044936239","GB" +"1044936240","1044936271","BE" +"1044936272","1044936287","GB" +"1044936288","1044936303","BE" +"1044936304","1044936311","GB" +"1044936312","1044936335","BE" +"1044936336","1044936351","GB" +"1044936352","1044936439","BE" +"1044936440","1044936463","GB" +"1044936464","1044936495","BE" +"1044936496","1044936503","GB" +"1044936504","1044936711","BE" +"1044936712","1044936719","GB" +"1044936720","1044936847","BE" +"1044936848","1044936863","GB" +"1044936864","1044936895","BE" +"1044936896","1044936903","GB" +"1044936904","1044936911","BE" +"1044936912","1044936959","GB" +"1044936960","1044937023","BE" +"1044937024","1044937031","GB" +"1044937032","1044937183","BE" +"1044937184","1044937187","GB" +"1044937188","1044937287","BE" +"1044937288","1044937311","GB" +"1044937312","1044937391","BE" +"1044937392","1044937399","GB" +"1044937400","1044937487","BE" +"1044937488","1044937503","GB" +"1044937504","1044937515","BE" +"1044937516","1044937531","GB" +"1044937532","1044937535","BE" +"1044937536","1044937551","GB" +"1044937552","1044937567","BE" +"1044937568","1044937583","GB" +"1044937584","1044937591","BE" +"1044937592","1044937599","GB" +"1044937600","1044937615","BE" +"1044937616","1044937631","GB" +"1044937632","1044937679","BE" +"1044937680","1044937695","GB" +"1044937696","1044937703","BE" +"1044937704","1044937711","GB" +"1044937712","1044937747","BE" +"1044937748","1044937767","GB" +"1044937768","1044937831","BE" +"1044937832","1044937839","GB" +"1044937840","1044937847","BE" +"1044937848","1044937887","GB" +"1044937888","1044937903","BE" +"1044937904","1044937915","GB" +"1044937916","1044937971","BE" +"1044937972","1044937975","GB" +"1044937976","1044938047","BE" +"1044938048","1044938079","GB" +"1044938080","1044938103","BE" +"1044938104","1044938107","GB" +"1044938108","1044938111","BE" +"1044938112","1044938143","GB" +"1044938144","1044938175","BE" +"1044938176","1044938207","GB" +"1044938208","1044938235","BE" +"1044938236","1044938271","GB" +"1044938272","1044938335","BE" +"1044938336","1044938343","GB" +"1044938344","1044938367","BE" +"1044938368","1044938399","GB" +"1044938400","1044938407","BE" +"1044938408","1044938415","GB" +"1044938416","1044938423","BE" +"1044938424","1044938431","GB" +"1044938432","1044938479","BE" +"1044938480","1044938511","GB" +"1044938512","1044938519","BE" +"1044938520","1044938523","GB" +"1044938524","1044938559","BE" +"1044938560","1044938623","LU" +"1044938624","1044938631","BE" +"1044938632","1044938639","GB" +"1044938640","1044938655","BE" +"1044938656","1044938695","GB" +"1044938696","1044938703","BE" +"1044938704","1044938719","GB" +"1044938720","1044938751","LU" +"1044938752","1044946943","GB" +"1044946944","1044955135","UA" +"1044955136","1044963327","NL" +"1044963328","1044971519","FI" +"1044971520","1044979711","FR" +"1044979712","1044987903","FI" +"1044987904","1045004287","BG" +"1045004288","1045013231","GB" +"1045013232","1045013247","IE" +"1045013248","1045013455","GB" +"1045013456","1045013471","IE" +"1045013472","1045016832","GB" +"1045016833","1045016862","ES" +"1045016863","1045016880","GB" +"1045016881","1045016886","ES" +"1045016887","1045016888","GB" +"1045016889","1045016894","ES" +"1045016895","1045016895","GB" +"1045016896","1045016911","ES" +"1045016912","1045016960","GB" +"1045016961","1045017022","ES" +"1045017023","1045018143","GB" +"1045018144","1045018151","AE" +"1045018152","1045018207","GB" +"1045018208","1045018231","FI" +"1045018232","1045018367","GB" +"1045018368","1045018559","ES" +"1045018560","1045018623","GB" +"1045018624","1045018783","ES" +"1045018784","1045020159","GB" +"1045020160","1045020671","ES" +"1045020672","1045037055","NO" +"1045037056","1045118975","GR" +"1045118976","1045119231","US" +"1045119232","1045119743","AL" +"1045119744","1045135359","GR" +"1045135360","1045141759","DE" +"1045141760","1045142015","PL" +"1045142016","1045149318","DE" +"1045149319","1045149319","US" +"1045149320","1045149341","DE" +"1045149342","1045149344","US" +"1045149345","1045149345","DE" +"1045149346","1045149346","PL" +"1045149347","1045149351","DE" +"1045149352","1045149352","GB" +"1045149353","1045149353","DE" +"1045149354","1045149354","TR" +"1045149355","1045154059","DE" +"1045154060","1045154060","IL" +"1045154061","1045154061","DE" +"1045154062","1045154062","BR" +"1045154063","1045154065","DE" +"1045154066","1045154068","BR" +"1045154069","1045154074","DE" +"1045154075","1045154083","BR" +"1045154084","1045154084","IL" +"1045154085","1045154106","DE" +"1045154107","1045154108","IL" +"1045154109","1045154109","NL" +"1045154110","1045154110","IL" +"1045154111","1045154559","DE" +"1045154560","1045154591","NL" +"1045154592","1045154623","DE" +"1045154624","1045154655","GB" +"1045154656","1045154687","MA" +"1045154688","1045154719","US" +"1045154720","1045154751","RU" +"1045154752","1045154783","SE" +"1045154784","1045154815","BR" +"1045154816","1045155071","DE" +"1045155072","1045155327","CH" +"1045155328","1045158277","DE" +"1045158278","1045158278","IL" +"1045158279","1045158279","DE" +"1045158280","1045158280","IL" +"1045158281","1045158281","DE" +"1045158282","1045158284","IL" +"1045158285","1045158294","DE" +"1045158295","1045158299","IL" +"1045158300","1045158300","NL" +"1045158301","1045158301","US" +"1045158302","1045158303","DE" +"1045158304","1045158304","IN" +"1045158305","1045158332","GB" +"1045158333","1045158333","DE" +"1045158334","1045158334","GB" +"1045158335","1045160959","DE" +"1045160960","1045160991","TR" +"1045160992","1045161023","MA" +"1045161024","1045161055","AT" +"1045161056","1045161087","US" +"1045161088","1045161119","IN" +"1045161120","1045161151","SC" +"1045161152","1045161183","DE" +"1045161184","1045161215","IN" +"1045161216","1045168127","DE" +"1045168128","1045233663","RU" +"1045233664","1045241855","GB" +"1045241856","1045250047","IT" +"1045250048","1045266431","CZ" +"1045266432","1045274623","HU" +"1045274624","1045282815","IE" +"1045282816","1045299199","HU" +"1045299200","1045302271","GB" +"1045302272","1045303295","EU" +"1045303296","1045305855","DE" +"1045305856","1045307391","EU" +"1045307392","1045315583","RU" +"1045315584","1045319679","DE" +"1045319680","1045323775","RU" +"1045323776","1045364735","FI" +"1045364736","1045430271","DK" +"1045430272","1045436911","DE" +"1045436912","1045436919","GB" +"1045436920","1045446655","DE" +"1045446656","1045446911","HU" +"1045446912","1045447167","SK" +"1045447168","1045447231","HU" +"1045447232","1045447295","SK" +"1045447296","1045447311","HU" +"1045447312","1045447519","SK" +"1045447520","1045447551","HU" +"1045447552","1045448255","SK" +"1045448256","1045448263","HU" +"1045448264","1045448703","SK" +"1045448704","1045448767","HU" +"1045448768","1045450751","SK" +"1045450752","1045451263","CZ" +"1045451264","1045451775","SK" +"1045451776","1045452079","CZ" +"1045452080","1045452159","SK" +"1045452160","1045452287","CZ" +"1045452288","1045452799","SK" +"1045452800","1045453055","CZ" +"1045453056","1045454847","SK" +"1045454848","1045460991","DE" +"1045460992","1045461503","FR" +"1045461504","1045461631","DE" +"1045461632","1045461695","FR" +"1045461696","1045461703","DE" +"1045461704","1045461711","GB" +"1045461712","1045461719","FR" +"1045461720","1045461727","IT" +"1045461728","1045461735","ES" +"1045461736","1045461743","NL" +"1045461744","1045463039","DE" +"1045463040","1045471231","FI" +"1045471232","1045479423","UA" +"1045479424","1045487615","SE" +"1045487616","1045495807","LT" +"1045495808","1045692415","ES" +"1045692416","1045700607","LV" +"1045700608","1045708799","KZ" +"1045708800","1045716991","LB" +"1045716992","1045725183","RU" +"1045725184","1045733375","CZ" +"1045733376","1045741567","GB" +"1045741568","1045741823","SE" +"1045741824","1045741831","GB" +"1045741832","1045741839","BE" +"1045741840","1045741887","SE" +"1045741888","1045742039","GB" +"1045742040","1045742047","SE" +"1045742048","1045742111","GB" +"1045742112","1045742115","SE" +"1045742116","1045742175","GB" +"1045742176","1045742191","SE" +"1045742192","1045742335","GB" +"1045742336","1045742391","SE" +"1045742392","1045742395","GB" +"1045742396","1045742471","SE" +"1045742472","1045742479","GB" +"1045742480","1045742487","SE" +"1045742488","1045742495","GB" +"1045742496","1045742511","SE" +"1045742512","1045742575","GB" +"1045742576","1045742623","SE" +"1045742624","1045742751","GB" +"1045742752","1045742759","SE" +"1045742760","1045742847","GB" +"1045742848","1045742983","SE" +"1045742984","1045742991","GB" +"1045742992","1045743007","SE" +"1045743008","1045743015","FI" +"1045743016","1045743031","GB" +"1045743032","1045743039","SE" +"1045743040","1045743063","GB" +"1045743064","1045743095","SE" +"1045743096","1045743103","GB" +"1045743104","1045743231","SE" +"1045743232","1045743251","GB" +"1045743252","1045743263","SE" +"1045743264","1045743299","GB" +"1045743300","1045743623","SE" +"1045743624","1045743871","GB" +"1045743872","1045744007","SE" +"1045744008","1045744015","GB" +"1045744016","1045744031","SE" +"1045744032","1045744127","GB" +"1045744128","1045744639","SE" +"1045744640","1045744671","BE" +"1045744672","1045745407","GB" +"1045745408","1045745607","SE" +"1045745608","1045745615","FI" +"1045745616","1045745627","SE" +"1045745628","1045745631","GB" +"1045745632","1045745647","SE" +"1045745648","1045745655","GB" +"1045745656","1045745663","FI" +"1045745664","1045745695","SE" +"1045745696","1045745759","GB" +"1045745760","1045745768","SE" +"1045745769","1045745791","GB" +"1045745792","1045745855","SE" +"1045745856","1045745919","GB" +"1045745920","1045745951","SE" +"1045745952","1045746175","GB" +"1045746176","1045746431","SE" +"1045746432","1045746495","GB" +"1045746496","1045746527","SE" +"1045746528","1045746671","GB" +"1045746672","1045747071","SE" +"1045747072","1045747199","GB" +"1045747200","1045747455","SE" +"1045747456","1045747759","GB" +"1045747760","1045747775","SE" +"1045747776","1045747839","GB" +"1045747840","1045747871","SE" +"1045747872","1045747919","GB" +"1045747920","1045747935","SE" +"1045747936","1045747967","GB" +"1045747968","1045748223","SE" +"1045748224","1045748319","GB" +"1045748320","1045748351","SE" +"1045748352","1045748463","GB" +"1045748464","1045748471","SE" +"1045748472","1045748479","GB" +"1045748480","1045748735","SE" +"1045748736","1045749503","GB" +"1045749504","1045749759","SE" +"1045749760","1045753855","SI" +"1045753856","1045755903","NL" +"1045755904","1045757951","UA" +"1045757952","1045790719","LV" +"1045790720","1045798911","FR" +"1045798912","1045889023","IT" +"1045889024","1045921791","ES" +"1045921792","1045954559","PL" +"1045954560","1045987327","BE" +"1045987328","1046020095","SE" +"1046020096","1046028287","AM" +"1046028288","1046036479","NO" +"1046036480","1046052863","PL" +"1046052864","1046061055","GB" +"1046061056","1046069247","DE" +"1046069248","1046085631","RU" +"1046085632","1046150143","IL" +"1046150144","1046150609","LR" +"1046150610","1046151167","IL" +"1046151168","1046216703","DE" +"1046216704","1046225647","NO" +"1046225648","1046225655","SE" +"1046225656","1046229111","NO" +"1046229112","1046229119","SE" +"1046229120","1046282239","NO" +"1046282240","1046282623","DE" +"1046282624","1046282751","US" +"1046282752","1046283007","DE" +"1046283008","1046283135","BZ" +"1046283136","1046283167","DE" +"1046283168","1046283199","US" +"1046283200","1046283247","DE" +"1046283248","1046283255","US" +"1046283256","1046283263","DE" +"1046283264","1046283327","LU" +"1046283328","1046285055","DE" +"1046285056","1046285119","HR" +"1046285120","1046285183","MT" +"1046285184","1046285247","BZ" +"1046285248","1046285311","BA" +"1046285312","1046286367","DE" +"1046286368","1046286399","US" +"1046286400","1046286527","DE" +"1046286528","1046286591","US" +"1046286592","1046286663","DE" +"1046286664","1046286671","BZ" +"1046286672","1046286783","DE" +"1046286784","1046286847","US" +"1046286848","1046286935","DE" +"1046286936","1046286943","ES" +"1046286944","1046287039","DE" +"1046287040","1046287103","US" +"1046287104","1046287111","DE" +"1046287112","1046287119","US" +"1046287120","1046287135","DE" +"1046287136","1046287167","US" +"1046287168","1046287295","DE" +"1046287296","1046287359","US" +"1046287360","1046288383","DE" +"1046288384","1046288511","CZ" +"1046288512","1046288543","US" +"1046288544","1046288663","CZ" +"1046288664","1046288671","DE" +"1046288672","1046288703","US" +"1046288704","1046288767","DE" +"1046288768","1046288775","AG" +"1046288776","1046288895","DE" +"1046288896","1046290431","AG" +"1046290432","1046298623","PL" +"1046298624","1046299903","AT" +"1046299904","1046300159","MK" +"1046300160","1046300799","AT" +"1046300800","1046300927","MK" +"1046300928","1046302143","AT" +"1046302144","1046302207","MK" +"1046302208","1046302911","AT" +"1046302912","1046302975","MK" +"1046302976","1046305279","AT" +"1046305280","1046305407","MK" +"1046305408","1046305535","AT" +"1046305536","1046305663","MK" +"1046305664","1046305791","AT" +"1046305792","1046306815","MK" +"1046306816","1046308927","AT" +"1046308928","1046309503","MK" +"1046309504","1046309887","AT" +"1046309888","1046310143","MK" +"1046310144","1046310399","AT" +"1046310400","1046311935","MK" +"1046311936","1046315007","AT" +"1046315008","1046315519","FR" +"1046315520","1046316031","IT" +"1046316032","1046316543","FR" +"1046316544","1046317055","DK" +"1046317056","1046317567","ES" +"1046317568","1046318335","NL" +"1046318336","1046318591","GB" +"1046318592","1046323199","NL" +"1046323200","1046327151","ES" +"1046327152","1046327155","FR" +"1046327156","1046331391","ES" +"1046331392","1046331519","DE" +"1046331520","1046331647","EU" +"1046331648","1046331679","DE" +"1046331680","1046331743","EU" +"1046331744","1046331775","DE" +"1046331776","1046331839","EU" +"1046331840","1046331871","DE" +"1046331872","1046332159","EU" +"1046332160","1046332415","FR" +"1046332416","1046332447","DE" +"1046332448","1046333439","EU" +"1046333440","1046333695","DE" +"1046333696","1046334719","EU" +"1046334720","1046334975","DE" +"1046334976","1046336511","EU" +"1046336512","1046337023","DE" +"1046337024","1046337535","EU" +"1046337536","1046338047","DE" +"1046338048","1046339839","EU" +"1046339840","1046340095","FR" +"1046340096","1046343423","EU" +"1046343424","1046343679","NL" +"1046343680","1046344959","EU" +"1046344960","1046345215","DE" +"1046345216","1046345327","EU" +"1046345328","1046345727","DE" +"1046345728","1046346111","EU" +"1046346112","1046346239","DE" +"1046346240","1046346303","EU" +"1046346304","1046346367","DE" +"1046346368","1046346511","EU" +"1046346512","1046346559","DE" +"1046346560","1046347775","EU" +"1046347776","1046349839","IT" +"1046349840","1046349847","FR" +"1046349848","1046352831","IT" +"1046352832","1046352847","SM" +"1046352848","1046366807","IT" +"1046366808","1046366815","PL" +"1046366816","1046385103","IT" +"1046385104","1046385111","A2" +"1046385112","1046413311","IT" +"1046413312","1046446079","SE" +"1046446080","1046479535","DE" +"1046479536","1046479551","GB" +"1046479552","1046479583","DE" +"1046479584","1046479615","GB" +"1046479616","1046479687","DE" +"1046479688","1046479695","GB" +"1046479696","1046480047","DE" +"1046480048","1046480055","GB" +"1046480056","1046480063","DE" +"1046480064","1046480095","GB" +"1046480096","1046480383","DE" +"1046480384","1046480384","GB" +"1046480385","1046480471","DE" +"1046480472","1046480479","GB" +"1046480480","1046480719","DE" +"1046480720","1046480735","GB" +"1046480736","1046481327","DE" +"1046481328","1046481375","GB" +"1046481376","1046481535","DE" +"1046481536","1046481919","GB" +"1046481920","1046481959","DE" +"1046481960","1046481967","GB" +"1046481968","1046482751","DE" +"1046482752","1046482943","GB" +"1046482944","1046483231","DE" +"1046483232","1046483471","GB" +"1046483472","1046483583","DE" +"1046483584","1046483967","GB" +"1046483968","1046484255","DE" +"1046484256","1046484287","GB" +"1046484288","1046484351","DE" +"1046484352","1046484479","GB" +"1046484480","1046484511","DE" +"1046484512","1046484607","GB" +"1046484608","1046484623","DE" +"1046484624","1046484991","GB" +"1046484992","1046485023","DE" +"1046485024","1046485031","GB" +"1046485032","1046485127","DE" +"1046485128","1046485135","GB" +"1046485136","1046485159","DE" +"1046485160","1046485167","GB" +"1046485168","1046485279","DE" +"1046485280","1046485287","GB" +"1046485288","1046485367","DE" +"1046485368","1046485375","GB" +"1046485376","1046485495","DE" +"1046485496","1046485503","GB" +"1046485504","1046486055","DE" +"1046486056","1046486063","GB" +"1046486064","1046486151","DE" +"1046486152","1046486175","GB" +"1046486176","1046486183","DE" +"1046486184","1046486191","GB" +"1046486192","1046486375","DE" +"1046486376","1046486383","GB" +"1046486384","1046491223","DE" +"1046491224","1046491231","GB" +"1046491232","1046491391","DE" +"1046491392","1046491399","GB" +"1046491400","1046491423","DE" +"1046491424","1046491431","GB" +"1046491432","1046491743","DE" +"1046491744","1046491775","GB" +"1046491776","1046491839","DE" +"1046491840","1046492159","GB" +"1046492160","1046492319","DE" +"1046492320","1046492327","GB" +"1046492328","1046492415","DE" +"1046492416","1046492447","GB" +"1046492448","1046492503","DE" +"1046492504","1046492511","GB" +"1046492512","1046492543","DE" +"1046492544","1046492551","GB" +"1046492552","1046492655","DE" +"1046492656","1046492663","GB" +"1046492664","1046492911","DE" +"1046492912","1046492967","GB" +"1046492968","1046493071","DE" +"1046493072","1046493087","GB" +"1046493088","1046493095","DE" +"1046493096","1046493103","GB" +"1046493104","1046493391","DE" +"1046493392","1046493399","GB" +"1046493400","1046493407","DE" +"1046493408","1046493471","GB" +"1046493472","1046493487","DE" +"1046493488","1046493511","GB" +"1046493512","1046493519","DE" +"1046493520","1046493535","GB" +"1046493536","1046493551","DE" +"1046493552","1046493575","GB" +"1046493576","1046493583","DE" +"1046493584","1046493591","GB" +"1046493592","1046493599","DE" +"1046493600","1046493631","GB" +"1046493632","1046493639","DE" +"1046493640","1046493695","GB" +"1046493696","1046493951","DE" +"1046493952","1046493983","GB" +"1046493984","1046494031","DE" +"1046494032","1046494039","GB" +"1046494040","1046494087","DE" +"1046494088","1046494095","GB" +"1046494096","1046494303","DE" +"1046494304","1046494311","GB" +"1046494312","1046494327","DE" +"1046494328","1046494335","GB" +"1046494336","1046494607","DE" +"1046494608","1046494615","GB" +"1046494616","1046494623","DE" +"1046494624","1046494719","GB" +"1046494720","1046495351","DE" +"1046495352","1046495359","GB" +"1046495360","1046495407","DE" +"1046495408","1046495415","GB" +"1046495416","1046495439","DE" +"1046495440","1046495447","GB" +"1046495448","1046495487","DE" +"1046495488","1046495519","GB" +"1046495520","1046495527","DE" +"1046495528","1046495535","GB" +"1046495536","1046495543","DE" +"1046495544","1046495551","GB" +"1046495552","1046495567","DE" +"1046495568","1046495575","GB" +"1046495576","1046495599","DE" +"1046495600","1046495607","GB" +"1046495608","1046495631","DE" +"1046495632","1046495639","GB" +"1046495640","1046495647","DE" +"1046495648","1046495663","GB" +"1046495664","1046495703","DE" +"1046495704","1046495719","GB" +"1046495720","1046495879","DE" +"1046495880","1046495895","GB" +"1046495896","1046495999","DE" +"1046496000","1046496047","GB" +"1046496048","1046496127","DE" +"1046496128","1046496135","GB" +"1046496136","1046496191","DE" +"1046496192","1046496215","GB" +"1046496216","1046496231","DE" +"1046496232","1046496239","GB" +"1046496240","1046496303","DE" +"1046496304","1046496511","GB" +"1046496512","1046497463","DE" +"1046497464","1046497471","GB" +"1046497472","1046497479","DE" +"1046497480","1046497567","GB" +"1046497568","1046497639","DE" +"1046497640","1046497647","GB" +"1046497648","1046497663","DE" +"1046497664","1046497671","GB" +"1046497672","1046497719","DE" +"1046497720","1046497727","GB" +"1046497728","1046497759","DE" +"1046497760","1046497775","GB" +"1046497776","1046497975","DE" +"1046497976","1046497983","GB" +"1046497984","1046498047","DE" +"1046498048","1046498079","GB" +"1046498080","1046498103","DE" +"1046498104","1046498111","GB" +"1046498112","1046498159","DE" +"1046498160","1046498167","GB" +"1046498168","1046498207","DE" +"1046498208","1046498215","GB" +"1046498216","1046498239","DE" +"1046498240","1046498255","GB" +"1046498256","1046498263","DE" +"1046498264","1046498271","GB" +"1046498272","1046498279","DE" +"1046498280","1046498295","GB" +"1046498296","1046498359","DE" +"1046498360","1046498367","GB" +"1046498368","1046498455","DE" +"1046498456","1046498591","GB" +"1046498592","1046498631","DE" +"1046498632","1046498639","GB" +"1046498640","1046498655","DE" +"1046498656","1046498663","GB" +"1046498664","1046498679","DE" +"1046498680","1046498687","GB" +"1046498688","1046498719","DE" +"1046498720","1046498727","GB" +"1046498728","1046498819","DE" +"1046498820","1046499327","GB" +"1046499328","1046502655","DE" +"1046502656","1046502719","GB" +"1046502720","1046502863","DE" +"1046502864","1046502911","GB" +"1046502912","1046504415","DE" +"1046504416","1046504447","GB" +"1046504448","1046508015","DE" +"1046508016","1046508031","GB" +"1046508032","1046508543","DE" +"1046508544","1046511615","GB" +"1046511616","1046516287","DE" +"1046516288","1046516735","GB" +"1046516736","1046516751","DE" +"1046516752","1046516991","GB" +"1046516992","1046517031","DE" +"1046517032","1046517039","GB" +"1046517040","1046517087","DE" +"1046517088","1046517759","GB" +"1046517760","1046518271","DE" +"1046518272","1046518783","GB" +"1046518784","1046519039","DE" +"1046519040","1046519167","GB" +"1046519168","1046519415","DE" +"1046519416","1046524159","GB" +"1046524160","1046524191","DE" +"1046524192","1046524207","GB" +"1046524208","1046524215","DE" +"1046524216","1046524287","GB" +"1046524288","1046524355","DE" +"1046524356","1046524415","GB" +"1046524416","1046525183","DE" +"1046525184","1046525215","GB" +"1046525216","1046525247","DE" +"1046525248","1046525311","GB" +"1046525312","1046525343","DE" +"1046525344","1046525439","GB" +"1046525440","1046525695","DE" +"1046525696","1046526591","GB" +"1046526592","1046526599","DE" +"1046526600","1046526631","GB" +"1046526632","1046526635","DE" +"1046526636","1046526719","GB" +"1046526720","1046527487","DE" +"1046527488","1046527743","GB" +"1046527744","1046527999","DE" +"1046528000","1046528255","GB" +"1046528256","1046528287","DE" +"1046528288","1046528319","GB" +"1046528320","1046528335","DE" +"1046528336","1046528391","GB" +"1046528392","1046528399","DE" +"1046528400","1046528459","GB" +"1046528460","1046528463","DE" +"1046528464","1046528471","GB" +"1046528472","1046528479","DE" +"1046528480","1046528487","GB" +"1046528488","1046528495","DE" +"1046528496","1046528519","GB" +"1046528520","1046528527","DE" +"1046528528","1046528543","GB" +"1046528544","1046528559","DE" +"1046528560","1046528575","GB" +"1046528576","1046528587","DE" +"1046528588","1046528599","GB" +"1046528600","1046528603","DE" +"1046528604","1046528607","GB" +"1046528608","1046528639","DE" +"1046528640","1046528703","GB" +"1046528704","1046528767","DE" +"1046528768","1046530047","GB" +"1046530048","1046530687","DE" +"1046530688","1046530815","GB" +"1046530816","1046530879","DE" +"1046530880","1046530943","GB" +"1046530944","1046530947","DE" +"1046530948","1046530967","GB" +"1046530968","1046530975","DE" +"1046530976","1046531007","GB" +"1046531008","1046531127","DE" +"1046531128","1046531839","GB" +"1046531840","1046532095","DE" +"1046532096","1046534015","GB" +"1046534016","1046534047","DE" +"1046534048","1046534063","GB" +"1046534064","1046534071","DE" +"1046534072","1046534143","GB" +"1046534144","1046534743","DE" +"1046534744","1046534847","GB" +"1046534848","1046534895","DE" +"1046534896","1046534911","GB" +"1046534912","1046535311","DE" +"1046535312","1046535359","GB" +"1046535360","1046535423","DE" +"1046535424","1046535487","GB" +"1046535488","1046535551","DE" +"1046535552","1046535619","GB" +"1046535620","1046535623","DE" +"1046535624","1046536023","GB" +"1046536024","1046536039","DE" +"1046536040","1046536063","GB" +"1046536064","1046536151","DE" +"1046536152","1046536159","GB" +"1046536160","1046536167","DE" +"1046536168","1046536191","GB" +"1046536192","1046536199","DE" +"1046536200","1046536211","GB" +"1046536212","1046536215","DE" +"1046536216","1046536255","GB" +"1046536256","1046536271","DE" +"1046536272","1046536279","GB" +"1046536280","1046536283","DE" +"1046536284","1046536287","GB" +"1046536288","1046536295","DE" +"1046536296","1046536319","GB" +"1046536320","1046536351","DE" +"1046536352","1046536355","GB" +"1046536356","1046536359","DE" +"1046536360","1046536607","GB" +"1046536608","1046536667","DE" +"1046536668","1046536959","GB" +"1046536960","1046537023","DE" +"1046537024","1046537055","GB" +"1046537056","1046537071","DE" +"1046537072","1046537087","GB" +"1046537088","1046537151","DE" +"1046537152","1046537215","GB" +"1046537216","1046537727","DE" +"1046537728","1046537983","GB" +"1046537984","1046538239","DE" +"1046538240","1046538431","GB" +"1046538432","1046538447","DE" +"1046538448","1046538463","GB" +"1046538464","1046538495","DE" +"1046538496","1046538751","GB" +"1046538752","1046539775","DE" +"1046539776","1046540031","GB" +"1046540032","1046540287","DE" +"1046540288","1046540543","GB" +"1046540544","1046541439","DE" +"1046541440","1046541503","GB" +"1046541504","1046541567","DE" +"1046541568","1046541631","GB" +"1046541632","1046541695","DE" +"1046541696","1046541727","GB" +"1046541728","1046541759","DE" +"1046541760","1046541767","GB" +"1046541768","1046541775","DE" +"1046541776","1046541807","GB" +"1046541808","1046543103","DE" +"1046543104","1046543263","GB" +"1046543264","1046543295","DE" +"1046543296","1046543327","GB" +"1046543328","1046543343","DE" +"1046543344","1046543359","GB" +"1046543360","1046543615","DE" +"1046543616","1046544127","GB" +"1046544128","1046544383","DE" +"1046544384","1046560767","IT" +"1046560768","1046570591","ES" +"1046570592","1046570607","CH" +"1046570608","1046572007","ES" +"1046572008","1046572015","DK" +"1046572016","1046585343","ES" +"1046585344","1046609919","NO" +"1046609920","1046675455","IT" +"1046675456","1046708223","ES" +"1046708224","1046740991","AT" +"1046740992","1046757375","NL" +"1046757376","1046765567","IT" +"1046765568","1046773759","ES" +"1046773760","1046781951","FR" +"1046781952","1046790143","GB" +"1046790144","1046791167","US" +"1046791168","1046798335","GB" +"1046798336","1046806527","HU" +"1046806528","1046814719","IT" +"1046814720","1046822911","SE" +"1046822912","1046839295","IT" +"1046839296","1046847487","BA" +"1046847488","1046855679","ES" +"1046855680","1046872063","NO" +"1046872064","1046872583","BE" +"1046872584","1046872607","EU" +"1046872608","1046872615","BE" +"1046872616","1046872975","EU" +"1046872976","1046872999","BE" +"1046873000","1046873087","EU" +"1046873088","1046873279","BE" +"1046873280","1046873599","EU" +"1046873600","1046878463","BE" +"1046878464","1046879255","EU" +"1046879256","1046879263","BE" +"1046879264","1046879271","EU" +"1046879272","1046879311","BE" +"1046879312","1046879327","EU" +"1046879328","1046879495","BE" +"1046879496","1046879503","EU" +"1046879504","1046879511","BE" +"1046879512","1046879543","EU" +"1046879544","1046879551","BE" +"1046879552","1046879591","EU" +"1046879592","1046879623","BE" +"1046879624","1046879647","EU" +"1046879648","1046879655","BE" +"1046879656","1046879687","EU" +"1046879688","1046879711","BE" +"1046879712","1046879719","EU" +"1046879720","1046879735","BE" +"1046879736","1046879775","EU" +"1046879776","1046879791","BE" +"1046879792","1046879807","EU" +"1046879808","1046879831","BE" +"1046879832","1046879839","EU" +"1046879840","1046879847","BE" +"1046879848","1046879895","EU" +"1046879896","1046879911","BE" +"1046879912","1046879943","EU" +"1046879944","1046879959","BE" +"1046879960","1046879967","EU" +"1046879968","1046880127","BE" +"1046880128","1046880135","EU" +"1046880136","1046880143","BE" +"1046880144","1046880151","EU" +"1046880152","1046880191","BE" +"1046880192","1046880255","EU" +"1046880256","1046880511","BE" +"1046880512","1046880519","EU" +"1046880520","1046880527","BE" +"1046880528","1046880559","EU" +"1046880560","1046880567","RO" +"1046880568","1046880591","EU" +"1046880592","1046880615","BE" +"1046880616","1046880639","EU" +"1046880640","1046880671","BE" +"1046880672","1046880735","EU" +"1046880736","1046880759","BE" +"1046880760","1046880767","EU" +"1046880768","1046880895","DE" +"1046880896","1046880903","EU" +"1046880904","1046880911","BE" +"1046880912","1046880919","EU" +"1046880920","1046880935","BE" +"1046880936","1046880983","EU" +"1046880984","1046881039","BE" +"1046881040","1046881055","EU" +"1046881056","1046881071","BE" +"1046881072","1046881079","EU" +"1046881080","1046881087","BE" +"1046881088","1046881111","EU" +"1046881112","1046881127","BE" +"1046881128","1046881135","EU" +"1046881136","1046881239","BE" +"1046881240","1046881279","EU" +"1046881280","1046882047","BE" +"1046882048","1046882303","EU" +"1046882304","1046884383","BE" +"1046884384","1046885375","EU" +"1046885376","1046888447","BE" +"1046888448","1046895359","GB" +"1046895360","1046896383","EU" +"1046896384","1046897663","GB" +"1046897664","1046898431","BE" +"1046898432","1046898687","EU" +"1046898688","1046898943","BE" +"1046898944","1046899167","EU" +"1046899168","1046904831","BE" +"1046904832","1046906879","SK" +"1046906880","1046908927","IR" +"1046908928","1046910975","SE" +"1046910976","1046913023","IT" +"1046913024","1046921215","NO" +"1046921216","1046929407","DE" +"1046929408","1046937599","FR" +"1046937600","1047003135","GR" +"1047003136","1047068671","DE" +"1047068672","1047085055","RU" +"1047085056","1047101439","GB" +"1047101440","1047109631","RU" +"1047109632","1047117823","GB" +"1047117824","1047134207","NL" +"1047134208","1047150591","FI" +"1047150592","1047158783","FR" +"1047158784","1047166975","RU" +"1047166976","1047199743","FR" +"1047199744","1047265279","DK" +"1047265280","1047273471","NL" +"1047273472","1047281663","DE" +"1047281664","1047289855","TR" +"1047289856","1047295351","RS" +"1047295352","1047295359","HU" +"1047295360","1047298047","RS" +"1047298048","1047300095","CH" +"1047300096","1047300415","GB" +"1047300416","1047300479","CH" +"1047300480","1047300495","FR" +"1047300496","1047300607","CH" +"1047300608","1047300639","GB" +"1047300640","1047302143","CH" +"1047302144","1047302159","US" +"1047302160","1047302175","GB" +"1047302176","1047302191","AU" +"1047302192","1047306239","CH" +"1047306240","1047314431","PL" +"1047314432","1047322623","SE" +"1047322624","1047330815","IT" +"1047330816","1047339007","RU" +"1047339008","1047340279","SE" +"1047340280","1047340287","DK" +"1047340288","1047340431","SE" +"1047340432","1047340439","NO" +"1047340440","1047340799","SE" +"1047340800","1047341055","NO" +"1047341056","1047343871","SE" +"1047343872","1047344127","NO" +"1047344128","1047346351","SE" +"1047346352","1047346359","FI" +"1047346360","1047346431","SE" +"1047346432","1047346687","FI" +"1047346688","1047347199","SE" +"1047347200","1047363583","DE" +"1047363584","1047371775","CZ" +"1047371776","1047373559","RU" +"1047373560","1047373567","FI" +"1047373568","1047379967","RU" +"1047379968","1047396351","NL" +"1047396352","1047461887","IT" +"1047461888","1047494655","DE" +"1047494656","1047527423","PL" +"1047527424","1047535615","BE" +"1047535616","1047551999","DE" +"1047552000","1047560191","RU" +"1047560192","1047561151","DE" +"1047561152","1047561159","AT" +"1047561160","1047561887","DE" +"1047561888","1047561891","US" +"1047561892","1047563071","DE" +"1047563072","1047563135","ES" +"1047563136","1047563287","DE" +"1047563288","1047563295","CH" +"1047563296","1047563303","DE" +"1047563304","1047563311","CH" +"1047563312","1047563319","DE" +"1047563320","1047563323","CH" +"1047563324","1047563331","DE" +"1047563332","1047563335","CH" +"1047563336","1047563351","DE" +"1047563352","1047563355","CH" +"1047563356","1047563363","DE" +"1047563364","1047563367","ES" +"1047563368","1047563403","DE" +"1047563404","1047563407","NL" +"1047563408","1047563411","CH" +"1047563412","1047563415","DE" +"1047563416","1047563419","BE" +"1047563420","1047563431","DE" +"1047563432","1047563435","CH" +"1047563436","1047563443","DE" +"1047563444","1047563447","CH" +"1047563448","1047563451","DE" +"1047563452","1047563455","NL" +"1047563456","1047563467","DE" +"1047563468","1047563471","CH" +"1047563472","1047563555","DE" +"1047563556","1047563559","CH" +"1047563560","1047565107","DE" +"1047565108","1047565111","IT" +"1047565112","1047565131","DE" +"1047565132","1047565135","GB" +"1047565136","1047565343","DE" +"1047565344","1047565359","CH" +"1047565360","1047565503","DE" +"1047565504","1047565507","CZ" +"1047565508","1047565839","DE" +"1047565840","1047565887","CH" +"1047565888","1047566015","DE" +"1047566016","1047566079","CZ" +"1047566080","1047566363","DE" +"1047566364","1047566367","CH" +"1047566368","1047566403","DE" +"1047566404","1047566415","CH" +"1047566416","1047566435","DE" +"1047566436","1047566439","CH" +"1047566440","1047566443","DE" +"1047566444","1047566447","AT" +"1047566448","1047566451","DE" +"1047566452","1047566459","CH" +"1047566460","1047566475","DE" +"1047566476","1047566479","CH" +"1047566480","1047566495","DE" +"1047566496","1047566499","CH" +"1047566500","1047566507","DE" +"1047566508","1047566511","CH" +"1047566512","1047566519","DE" +"1047566520","1047566539","CH" +"1047566540","1047566543","DE" +"1047566544","1047566547","CH" +"1047566548","1047566559","DE" +"1047566560","1047566563","CH" +"1047566564","1047566847","DE" +"1047566848","1047566851","AT" +"1047566852","1047566871","DE" +"1047566872","1047566879","CH" +"1047566880","1047566891","DE" +"1047566892","1047566903","CH" +"1047566904","1047566947","DE" +"1047566948","1047566951","AT" +"1047566952","1047566963","DE" +"1047566964","1047566967","AT" +"1047566968","1047566971","CH" +"1047566972","1047566995","DE" +"1047566996","1047566999","CH" +"1047567000","1047567015","DE" +"1047567016","1047567019","CH" +"1047567020","1047567027","DE" +"1047567028","1047567031","CH" +"1047567032","1047567039","DE" +"1047567040","1047567043","AT" +"1047567044","1047567047","CH" +"1047567048","1047567063","DE" +"1047567064","1047567067","CH" +"1047567068","1047567071","BE" +"1047567072","1047567075","NL" +"1047567076","1047567079","DE" +"1047567080","1047567083","NL" +"1047567084","1047567135","DE" +"1047567136","1047567143","GB" +"1047567144","1047567147","CH" +"1047567148","1047567151","BE" +"1047567152","1047567159","CH" +"1047567160","1047567163","DE" +"1047567164","1047567167","AT" +"1047567168","1047567175","CH" +"1047567176","1047567211","DE" +"1047567212","1047567227","CH" +"1047567228","1047567239","DE" +"1047567240","1047567243","CH" +"1047567244","1047567247","DE" +"1047567248","1047567255","CH" +"1047567256","1047567279","DE" +"1047567280","1047567287","CH" +"1047567288","1047567307","DE" +"1047567308","1047567311","CH" +"1047567312","1047567315","DE" +"1047567316","1047567319","AT" +"1047567320","1047567327","CH" +"1047567328","1047567343","DE" +"1047567344","1047567351","AT" +"1047567352","1047567359","DE" +"1047567360","1047567375","CH" +"1047567376","1047567447","DE" +"1047567448","1047567451","CH" +"1047567452","1047567455","AT" +"1047567456","1047567463","DE" +"1047567464","1047567471","CH" +"1047567472","1047567475","DE" +"1047567476","1047567483","CH" +"1047567484","1047567495","DE" +"1047567496","1047567499","CH" +"1047567500","1047567535","DE" +"1047567536","1047567539","CH" +"1047567540","1047567551","DE" +"1047567552","1047567555","CH" +"1047567556","1047567583","DE" +"1047567584","1047567615","CZ" +"1047567616","1047567655","DE" +"1047567656","1047567659","CH" +"1047567660","1047567727","DE" +"1047567728","1047567731","BE" +"1047567732","1047567735","DE" +"1047567736","1047567743","CH" +"1047567744","1047567751","DE" +"1047567752","1047567755","LU" +"1047567756","1047567759","CH" +"1047567760","1047567823","DE" +"1047567824","1047567839","CH" +"1047567840","1047567847","DE" +"1047567848","1047567851","CH" +"1047567852","1047567855","BE" +"1047567856","1047567871","DE" +"1047567872","1047567875","CH" +"1047567876","1047567879","AT" +"1047567880","1047567883","CH" +"1047567884","1047567903","DE" +"1047567904","1047567939","CH" +"1047567940","1047567983","DE" +"1047567984","1047567999","ES" +"1047568000","1047568047","DE" +"1047568048","1047568051","CH" +"1047568052","1047568055","DE" +"1047568056","1047568059","CH" +"1047568060","1047568159","DE" +"1047568160","1047568163","CH" +"1047568164","1047568187","DE" +"1047568188","1047568191","CH" +"1047568192","1047568215","DE" +"1047568216","1047568219","CH" +"1047568220","1047568247","DE" +"1047568248","1047568251","CH" +"1047568252","1047568259","DE" +"1047568260","1047568263","AT" +"1047568264","1047568339","DE" +"1047568340","1047568343","CH" +"1047568344","1047568363","DE" +"1047568364","1047568367","CH" +"1047568368","1047568383","DE" +"1047568384","1047576575","NL" +"1047576576","1047584767","HU" +"1047584768","1047592735","NL" +"1047592736","1047592743","FR" +"1047592744","1047592959","NL" +"1047592960","1047601151","BA" +"1047601152","1047625727","RU" +"1047625728","1047633919","NO" +"1047633920","1047642111","FI" +"1047642112","1047658495","DE" +"1047658496","1047724031","EG" +"1047724032","1047728127","EU" +"1047728128","1047732223","SE" +"1047732224","1047740415","EU" +"1047740416","1047740431","US" +"1047740432","1047740447","DE" +"1047740448","1047740463","IT" +"1047740464","1047740543","SE" +"1047740544","1047740671","DE" +"1047740672","1047740927","A2" +"1047740928","1047781679","EU" +"1047781680","1047781695","GB" +"1047781696","1047782695","EU" +"1047782696","1047782703","GB" +"1047782704","1047782719","EU" +"1047782720","1047782751","SE" +"1047782752","1047782783","NO" +"1047782784","1047782815","FI" +"1047782816","1047782847","EU" +"1047782848","1047782911","SE" +"1047782912","1047785471","EU" +"1047785472","1047788031","DE" +"1047788032","1047789375","EU" +"1047789376","1047789383","GB" +"1047789384","1047789407","EU" +"1047789408","1047789423","DE" +"1047789424","1047789439","EU" +"1047789440","1047789471","SE" +"1047789472","1047789535","EU" +"1047789536","1047789567","DE" +"1047789568","1047806031","AT" +"1047806032","1047806047","IT" +"1047806048","1047822335","AT" +"1047822336","1047838719","DE" +"1047838720","1047846911","DK" +"1047846912","1047855103","SE" +"1047855104","1047863295","DE" +"1047863296","1047871487","EG" +"1047871488","1047887871","RU" +"1047887872","1047920639","ES" +"1047920640","1047941119","RU" +"1047941120","1047941375","GB" +"1047941376","1047986175","RU" +"1047986176","1047997439","SE" +"1047997440","1047997503","NO" +"1047997504","1048003503","SE" +"1048003504","1048003511","NO" +"1048003512","1048011775","SE" +"1048011776","1048012031","EU" +"1048012032","1048012383","SE" +"1048012384","1048012391","DE" +"1048012392","1048051711","SE" +"1048051712","1048117247","SA" +"1048117248","1048125439","GB" +"1048125440","1048133631","FI" +"1048133632","1048158207","PL" +"1048158208","1048166399","DK" +"1048166400","1048182783","CH" +"1048182784","1048184831","UA" +"1048184832","1048186879","FR" +"1048186880","1048188927","LV" +"1048188928","1048190975","BE" +"1048190976","1048193023","UA" +"1048193024","1048195071","RO" +"1048195072","1048197119","RU" +"1048197120","1048201215","UA" +"1048201216","1048203263","EU" +"1048203264","1048205311","DE" +"1048205312","1048209407","RU" +"1048209408","1048211455","UA" +"1048211456","1048215551","PL" +"1048215552","1048217599","RU" +"1048217600","1048219647","TJ" +"1048219648","1048221695","RU" +"1048221696","1048223743","UA" +"1048223744","1048225791","DK" +"1048225792","1048227839","CZ" +"1048227840","1048233983","RU" +"1048233984","1048236031","UA" +"1048236032","1048240127","RU" +"1048240128","1048242175","IL" +"1048242176","1048244223","PL" +"1048244224","1048246271","RU" +"1048246272","1048248319","NO" +"1048248320","1048313855","IT" +"1048313856","1048510463","GB" +"1048510464","1048575999","SE" +"1048576000","1048584191","DE" +"1048584192","1048592383","IL" +"1048592384","1048600575","IT" +"1048600576","1048601599","UA" +"1048601600","1048602111","RU" +"1048602112","1048604671","UA" +"1048604672","1048604687","EE" +"1048604688","1048604751","UA" +"1048604752","1048604759","EE" +"1048604760","1048604927","UA" +"1048604928","1048604945","LT" +"1048604946","1048604955","UA" +"1048604956","1048604959","LT" +"1048604960","1048604963","UA" +"1048604964","1048604967","LT" +"1048604968","1048604971","UA" +"1048604972","1048604991","LT" +"1048604992","1048605055","UA" +"1048605056","1048605063","LT" +"1048605064","1048605071","UA" +"1048605072","1048605079","LT" +"1048605080","1048605103","UA" +"1048605104","1048605119","LT" +"1048605120","1048605695","UA" +"1048605696","1048606719","EE" +"1048606720","1048607231","UA" +"1048607232","1048607519","EE" +"1048607520","1048607743","UA" +"1048607744","1048607759","EE" +"1048607760","1048607775","UA" +"1048607776","1048607839","EE" +"1048607840","1048608255","UA" +"1048608256","1048608287","RU" +"1048608288","1048608671","UA" +"1048608672","1048608703","EE" +"1048608704","1048608711","UA" +"1048608712","1048608727","EE" +"1048608728","1048608731","UA" +"1048608732","1048608767","EE" +"1048608768","1048611583","GB" +"1048611584","1048611839","FR" +"1048611840","1048615423","GB" +"1048615424","1048615487","US" +"1048615488","1048616959","GB" +"1048616960","1048617215","A2" +"1048617216","1048618751","KE" +"1048618752","1048619007","A2" +"1048619008","1048621055","KE" +"1048621056","1048625151","US" +"1048625152","1048633343","GB" +"1048633344","1048641535","NO" +"1048641536","1048649727","FR" +"1048649728","1048657919","CZ" +"1048657920","1048674303","GB" +"1048674304","1048682495","NL" +"1048682496","1048690687","FR" +"1048690688","1048707071","PL" +"1048707072","1048772607","GB" +"1048772608","1048838143","NL" +"1048838144","1048838175","DE" +"1048838176","1048838207","PL" +"1048838208","1048838239","NL" +"1048838240","1048839935","DE" +"1048839936","1048840703","NL" +"1048840704","1048843263","DE" +"1048843264","1048843311","NL" +"1048843312","1048843319","DE" +"1048843320","1048843599","NL" +"1048843600","1048843607","DE" +"1048843608","1048843951","NL" +"1048843952","1048843959","DE" +"1048843960","1048843983","NL" +"1048843984","1048843991","DE" +"1048843992","1048844263","NL" +"1048844264","1048844271","DE" +"1048844272","1048844287","NL" +"1048844288","1048844319","DE" +"1048844320","1048844351","NL" +"1048844352","1048845567","DE" +"1048845568","1048845703","NL" +"1048845704","1048845711","DE" +"1048845712","1048845759","NL" +"1048845760","1048845767","DE" +"1048845768","1048845855","NL" +"1048845856","1048845863","DE" +"1048845864","1048846575","NL" +"1048846576","1048846583","DE" +"1048846584","1048846647","NL" +"1048846648","1048846663","DE" +"1048846664","1048846687","NL" +"1048846688","1048846695","DE" +"1048846696","1048846847","NL" +"1048846848","1048847359","DE" +"1048847360","1048847423","NL" +"1048847424","1048847431","DE" +"1048847432","1048847455","NL" +"1048847456","1048847463","DE" +"1048847464","1048848119","NL" +"1048848120","1048848127","DE" +"1048848128","1048848135","NL" +"1048848136","1048848143","DE" +"1048848144","1048848479","NL" +"1048848480","1048848487","DE" +"1048848488","1048848551","NL" +"1048848552","1048848559","DE" +"1048848560","1048848703","NL" +"1048848704","1048848711","DE" +"1048848712","1048848735","NL" +"1048848736","1048848743","DE" +"1048848744","1048848895","NL" +"1048848896","1048849407","DE" +"1048849408","1048849559","NL" +"1048849560","1048849567","DE" +"1048849568","1048849599","NL" +"1048849600","1048849607","DE" +"1048849608","1048849863","NL" +"1048849864","1048849871","DE" +"1048849872","1048850959","NL" +"1048850960","1048850967","DE" +"1048850968","1048851031","NL" +"1048851032","1048851039","DE" +"1048851040","1048851151","NL" +"1048851152","1048851159","DE" +"1048851160","1048851223","NL" +"1048851224","1048851231","DE" +"1048851232","1048851591","NL" +"1048851592","1048851607","DE" +"1048851608","1048851655","NL" +"1048851656","1048851663","DE" +"1048851664","1048851679","NL" +"1048851680","1048851687","DE" +"1048851688","1048851703","NL" +"1048851704","1048851711","DE" +"1048851712","1048851743","NL" +"1048851744","1048851751","DE" +"1048851752","1048852039","NL" +"1048852040","1048852047","DE" +"1048852048","1048852335","NL" +"1048852336","1048852343","DE" +"1048852344","1048852871","NL" +"1048852872","1048852879","DE" +"1048852880","1048853127","NL" +"1048853128","1048853135","DE" +"1048853136","1048853143","NL" +"1048853144","1048853151","DE" +"1048853152","1048853191","NL" +"1048853192","1048853199","DE" +"1048853200","1048853327","NL" +"1048853328","1048853335","DE" +"1048853336","1048853575","NL" +"1048853576","1048853583","DE" +"1048853584","1048853655","NL" +"1048853656","1048853663","DE" +"1048853664","1048853863","NL" +"1048853864","1048853871","DE" +"1048853872","1048854055","NL" +"1048854056","1048854063","DE" +"1048854064","1048854391","NL" +"1048854392","1048854407","DE" +"1048854408","1048854527","NL" +"1048854528","1048855039","DE" +"1048855040","1048855047","NL" +"1048855048","1048855055","DE" +"1048855056","1048855215","NL" +"1048855216","1048855223","DE" +"1048855224","1048855271","NL" +"1048855272","1048855279","DE" +"1048855280","1048855895","NL" +"1048855896","1048855903","DE" +"1048855904","1048856015","NL" +"1048856016","1048856031","DE" +"1048856032","1048856095","NL" +"1048856096","1048856103","DE" +"1048856104","1048856359","NL" +"1048856360","1048856367","DE" +"1048856368","1048856375","NL" +"1048856376","1048856383","DE" +"1048856384","1048856559","NL" +"1048856560","1048856567","DE" +"1048856568","1048856687","NL" +"1048856688","1048856695","DE" +"1048856696","1048856839","NL" +"1048856840","1048856847","DE" +"1048856848","1048856919","NL" +"1048856920","1048856927","DE" +"1048856928","1048856999","NL" +"1048857000","1048857007","DE" +"1048857008","1048857207","NL" +"1048857208","1048857215","DE" +"1048857216","1048857767","NL" +"1048857768","1048857775","DE" +"1048857776","1048858111","NL" +"1048858112","1048858623","DE" +"1048858624","1048859095","NL" +"1048859096","1048859103","DE" +"1048859104","1048859903","NL" +"1048859904","1048859911","DE" +"1048859912","1048860311","NL" +"1048860312","1048860319","DE" +"1048860320","1048860407","NL" +"1048860408","1048860415","DE" +"1048860416","1048860455","NL" +"1048860456","1048860463","DE" +"1048860464","1048860511","NL" +"1048860512","1048860519","DE" +"1048860520","1048860607","NL" +"1048860608","1048860615","DE" +"1048860616","1048861383","NL" +"1048861384","1048861391","DE" +"1048861392","1048861431","NL" +"1048861432","1048861439","DE" +"1048861440","1048862247","NL" +"1048862248","1048862255","DE" +"1048862256","1048862287","NL" +"1048862288","1048862295","DE" +"1048862296","1048862511","NL" +"1048862512","1048862519","DE" +"1048862520","1048862623","NL" +"1048862624","1048862639","DE" +"1048862640","1048862671","NL" +"1048862672","1048862679","DE" +"1048862680","1048862711","NL" +"1048862712","1048862719","DE" +"1048862720","1048862919","NL" +"1048862920","1048862927","DE" +"1048862928","1048863111","NL" +"1048863112","1048863119","DE" +"1048863120","1048863271","NL" +"1048863272","1048863279","DE" +"1048863280","1048863319","NL" +"1048863320","1048863327","DE" +"1048863328","1048863343","NL" +"1048863344","1048863351","DE" +"1048863352","1048863391","NL" +"1048863392","1048863399","DE" +"1048863400","1048863575","NL" +"1048863576","1048863591","DE" +"1048863592","1048863631","NL" +"1048863632","1048863639","DE" +"1048863640","1048863743","NL" +"1048863744","1048863751","DE" +"1048863752","1048863791","NL" +"1048863792","1048863799","DE" +"1048863800","1048864071","NL" +"1048864072","1048864079","DE" +"1048864080","1048864167","NL" +"1048864168","1048864175","DE" +"1048864176","1048864471","NL" +"1048864472","1048864479","DE" +"1048864480","1048864775","NL" +"1048864776","1048864783","DE" +"1048864784","1048865279","NL" +"1048865280","1048865791","DE" +"1048865792","1048865903","NL" +"1048865904","1048865911","DE" +"1048865912","1048865935","NL" +"1048865936","1048865943","DE" +"1048865944","1048866095","NL" +"1048866096","1048866103","DE" +"1048866104","1048867031","NL" +"1048867032","1048867039","DE" +"1048867040","1048867207","NL" +"1048867208","1048867215","DE" +"1048867216","1048867295","NL" +"1048867296","1048867303","DE" +"1048867304","1048867327","NL" +"1048867328","1048868351","DE" +"1048868352","1048868655","NL" +"1048868656","1048868663","DE" +"1048868664","1048869183","NL" +"1048869184","1048869191","DE" +"1048869192","1048869263","NL" +"1048869264","1048869279","DE" +"1048869280","1048869367","NL" +"1048869368","1048869375","DE" +"1048869376","1048869479","NL" +"1048869480","1048869487","DE" +"1048869488","1048869543","NL" +"1048869544","1048869551","DE" +"1048869552","1048869615","NL" +"1048869616","1048869623","DE" +"1048869624","1048869687","NL" +"1048869688","1048869695","DE" +"1048869696","1048869759","NL" +"1048869760","1048869767","DE" +"1048869768","1048869847","NL" +"1048869848","1048869863","DE" +"1048869864","1048869951","NL" +"1048869952","1048869967","DE" +"1048869968","1048869975","NL" +"1048869976","1048869983","DE" +"1048869984","1048870015","NL" +"1048870016","1048870023","DE" +"1048870024","1048870087","NL" +"1048870088","1048870095","DE" +"1048870096","1048870103","NL" +"1048870104","1048870111","DE" +"1048870112","1048870127","NL" +"1048870128","1048870135","DE" +"1048870136","1048870279","NL" +"1048870280","1048870287","DE" +"1048870288","1048870399","NL" +"1048870400","1048870911","DE" +"1048870912","1048871095","NL" +"1048871096","1048871103","DE" +"1048871104","1048871223","NL" +"1048871224","1048871231","DE" +"1048871232","1048871935","NL" +"1048871936","1048872703","DE" +"1048872704","1048872735","NL" +"1048872736","1048872743","DE" +"1048872744","1048873263","NL" +"1048873264","1048873271","DE" +"1048873272","1048873743","NL" +"1048873744","1048873751","DE" +"1048873752","1048873791","NL" +"1048873792","1048873799","DE" +"1048873800","1048873935","NL" +"1048873936","1048873951","DE" +"1048873952","1048874015","NL" +"1048874016","1048874023","DE" +"1048874024","1048874151","NL" +"1048874152","1048874159","DE" +"1048874160","1048874295","NL" +"1048874296","1048874303","DE" +"1048874304","1048874327","NL" +"1048874328","1048874335","DE" +"1048874336","1048874359","NL" +"1048874360","1048874367","DE" +"1048874368","1048874415","NL" +"1048874416","1048874423","DE" +"1048874424","1048874447","NL" +"1048874448","1048874455","DE" +"1048874456","1048874471","NL" +"1048874472","1048874479","DE" +"1048874480","1048874535","NL" +"1048874536","1048874543","DE" +"1048874544","1048874703","NL" +"1048874704","1048874711","DE" +"1048874712","1048875015","NL" +"1048875016","1048875023","DE" +"1048875024","1048875191","NL" +"1048875192","1048875199","DE" +"1048875200","1048875391","NL" +"1048875392","1048875399","DE" +"1048875400","1048875671","NL" +"1048875672","1048875679","DE" +"1048875680","1048875687","NL" +"1048875688","1048875695","DE" +"1048875696","1048875703","NL" +"1048875704","1048875711","DE" +"1048875712","1048875823","NL" +"1048875824","1048875839","DE" +"1048875840","1048876255","NL" +"1048876256","1048876263","DE" +"1048876264","1048876327","NL" +"1048876328","1048876335","DE" +"1048876336","1048876807","NL" +"1048876808","1048876815","DE" +"1048876816","1048876823","NL" +"1048876824","1048876831","DE" +"1048876832","1048876991","NL" +"1048876992","1048876999","DE" +"1048877000","1048877023","NL" +"1048877024","1048877031","DE" +"1048877032","1048877039","NL" +"1048877040","1048877055","DE" +"1048877056","1048877071","NL" +"1048877072","1048877079","DE" +"1048877080","1048877103","NL" +"1048877104","1048877111","DE" +"1048877112","1048877191","NL" +"1048877192","1048877199","DE" +"1048877200","1048877247","NL" +"1048877248","1048877263","DE" +"1048877264","1048877287","NL" +"1048877288","1048877295","DE" +"1048877296","1048877311","NL" +"1048877312","1048878087","DE" +"1048878088","1048878103","NL" +"1048878104","1048878111","DE" +"1048878112","1048878335","NL" +"1048878336","1048878343","DE" +"1048878344","1048878447","NL" +"1048878448","1048878455","DE" +"1048878456","1048878487","NL" +"1048878488","1048878495","DE" +"1048878496","1048878543","NL" +"1048878544","1048878551","DE" +"1048878552","1048878663","NL" +"1048878664","1048878671","DE" +"1048878672","1048878751","NL" +"1048878752","1048878759","DE" +"1048878760","1048878815","NL" +"1048878816","1048878823","DE" +"1048878824","1048878831","NL" +"1048878832","1048878839","DE" +"1048878840","1048878983","NL" +"1048878984","1048878991","DE" +"1048878992","1048879047","NL" +"1048879048","1048879055","DE" +"1048879056","1048879199","NL" +"1048879200","1048879207","DE" +"1048879208","1048879263","NL" +"1048879264","1048879271","DE" +"1048879272","1048879335","NL" +"1048879336","1048879343","DE" +"1048879344","1048879455","NL" +"1048879456","1048879463","DE" +"1048879464","1048879687","NL" +"1048879688","1048879695","DE" +"1048879696","1048880311","NL" +"1048880312","1048880327","DE" +"1048880328","1048880639","NL" +"1048880640","1048881159","DE" +"1048881160","1048881615","NL" +"1048881616","1048881631","DE" +"1048881632","1048882071","NL" +"1048882072","1048882079","DE" +"1048882080","1048882143","NL" +"1048882144","1048882151","DE" +"1048882152","1048882199","NL" +"1048882200","1048882207","DE" +"1048882208","1048882311","NL" +"1048882312","1048882319","DE" +"1048882320","1048882495","NL" +"1048882496","1048882503","DE" +"1048882504","1048882671","NL" +"1048882672","1048882679","DE" +"1048882680","1048882703","NL" +"1048882704","1048882711","DE" +"1048882712","1048882743","NL" +"1048882744","1048882751","DE" +"1048882752","1048882823","NL" +"1048882824","1048882831","DE" +"1048882832","1048882855","NL" +"1048882856","1048882863","DE" +"1048882864","1048882951","NL" +"1048882952","1048882959","DE" +"1048882960","1048883167","NL" +"1048883168","1048883175","DE" +"1048883176","1048883319","NL" +"1048883320","1048883327","DE" +"1048883328","1048883351","NL" +"1048883352","1048883359","DE" +"1048883360","1048883871","NL" +"1048883872","1048883879","DE" +"1048883880","1048884279","NL" +"1048884280","1048884295","DE" +"1048884296","1048884719","NL" +"1048884720","1048884727","DE" +"1048884728","1048884975","NL" +"1048884976","1048884999","DE" +"1048885000","1048885111","NL" +"1048885112","1048885119","DE" +"1048885120","1048885471","NL" +"1048885472","1048885479","DE" +"1048885480","1048885575","NL" +"1048885576","1048885583","DE" +"1048885584","1048885703","NL" +"1048885704","1048885711","DE" +"1048885712","1048885767","NL" +"1048885768","1048885775","DE" +"1048885776","1048885815","NL" +"1048885816","1048885823","DE" +"1048885824","1048885839","NL" +"1048885840","1048885847","DE" +"1048885848","1048886239","NL" +"1048886240","1048886247","DE" +"1048886248","1048886343","NL" +"1048886344","1048886351","DE" +"1048886352","1048886431","NL" +"1048886432","1048886439","DE" +"1048886440","1048886463","NL" +"1048886464","1048886471","DE" +"1048886472","1048886615","NL" +"1048886616","1048886623","DE" +"1048886624","1048886871","NL" +"1048886872","1048886879","DE" +"1048886880","1048886903","NL" +"1048886904","1048886911","DE" +"1048886912","1048887039","NL" +"1048887040","1048887047","DE" +"1048887048","1048887935","NL" +"1048887936","1048887999","DE" +"1048888000","1048889983","NL" +"1048889984","1048890015","DE" +"1048890016","1048891391","NL" +"1048891392","1048891399","DE" +"1048891400","1048891823","NL" +"1048891824","1048891831","DE" +"1048891832","1048891911","NL" +"1048891912","1048891919","DE" +"1048891920","1048892311","NL" +"1048892312","1048892319","DE" +"1048892320","1048892343","NL" +"1048892344","1048892351","DE" +"1048892352","1048892367","NL" +"1048892368","1048892375","DE" +"1048892376","1048892815","NL" +"1048892816","1048892823","DE" +"1048892824","1048892863","NL" +"1048892864","1048892871","DE" +"1048892872","1048892895","NL" +"1048892896","1048892903","DE" +"1048892904","1048893279","NL" +"1048893280","1048893287","DE" +"1048893288","1048893303","NL" +"1048893304","1048893311","DE" +"1048893312","1048893591","NL" +"1048893592","1048893599","DE" +"1048893600","1048893703","NL" +"1048893704","1048893711","DE" +"1048893712","1048893719","NL" +"1048893720","1048893727","DE" +"1048893728","1048893919","NL" +"1048893920","1048893927","DE" +"1048893928","1048893983","NL" +"1048893984","1048893991","DE" +"1048893992","1048894039","NL" +"1048894040","1048894047","DE" +"1048894048","1048894071","NL" +"1048894072","1048894079","DE" +"1048894080","1048894215","NL" +"1048894216","1048894223","DE" +"1048894224","1048894471","NL" +"1048894472","1048894479","DE" +"1048894480","1048894487","NL" +"1048894488","1048894495","DE" +"1048894496","1048894607","NL" +"1048894608","1048894615","DE" +"1048894616","1048894671","NL" +"1048894672","1048894679","DE" +"1048894680","1048894735","NL" +"1048894736","1048894743","DE" +"1048894744","1048894895","NL" +"1048894896","1048894903","DE" +"1048894904","1048895031","NL" +"1048895032","1048895039","DE" +"1048895040","1048895079","NL" +"1048895080","1048895087","DE" +"1048895088","1048895271","NL" +"1048895272","1048895279","DE" +"1048895280","1048895439","NL" +"1048895440","1048895447","DE" +"1048895448","1048895551","NL" +"1048895552","1048895559","DE" +"1048895560","1048895647","NL" +"1048895648","1048895655","DE" +"1048895656","1048895967","NL" +"1048895968","1048895975","DE" +"1048895976","1048896231","NL" +"1048896232","1048896239","DE" +"1048896240","1048896271","NL" +"1048896272","1048896279","DE" +"1048896280","1048896319","NL" +"1048896320","1048896327","DE" +"1048896328","1048896479","NL" +"1048896480","1048896487","DE" +"1048896488","1048896519","NL" +"1048896520","1048896535","DE" +"1048896536","1048896671","NL" +"1048896672","1048896679","DE" +"1048896680","1048896687","NL" +"1048896688","1048896695","DE" +"1048896696","1048896735","NL" +"1048896736","1048896743","DE" +"1048896744","1048896871","NL" +"1048896872","1048896879","DE" +"1048896880","1048896967","NL" +"1048896968","1048896975","DE" +"1048896976","1048897119","NL" +"1048897120","1048897135","DE" +"1048897136","1048897239","NL" +"1048897240","1048897247","DE" +"1048897248","1048897271","NL" +"1048897272","1048897279","DE" +"1048897280","1048897295","NL" +"1048897296","1048897311","DE" +"1048897312","1048897319","NL" +"1048897320","1048897327","DE" +"1048897328","1048897367","NL" +"1048897368","1048897375","DE" +"1048897376","1048897463","NL" +"1048897464","1048897471","DE" +"1048897472","1048897495","NL" +"1048897496","1048897503","DE" +"1048897504","1048897735","NL" +"1048897736","1048897743","DE" +"1048897744","1048898719","NL" +"1048898720","1048898727","DE" +"1048898728","1048898991","NL" +"1048898992","1048898999","DE" +"1048899000","1048899047","NL" +"1048899048","1048899055","DE" +"1048899056","1048899271","NL" +"1048899272","1048899279","DE" +"1048899280","1048899287","NL" +"1048899288","1048899295","DE" +"1048899296","1048899303","NL" +"1048899304","1048899311","DE" +"1048899312","1048899591","NL" +"1048899592","1048899599","DE" +"1048899600","1048900071","NL" +"1048900072","1048900079","DE" +"1048900080","1048900127","NL" +"1048900128","1048900135","DE" +"1048900136","1048900311","NL" +"1048900312","1048900319","DE" +"1048900320","1048900343","NL" +"1048900344","1048900351","DE" +"1048900352","1048900367","NL" +"1048900368","1048900375","DE" +"1048900376","1048900391","NL" +"1048900392","1048900399","DE" +"1048900400","1048900703","NL" +"1048900704","1048900711","DE" +"1048900712","1048900935","NL" +"1048900936","1048900951","DE" +"1048900952","1048901167","NL" +"1048901168","1048901175","DE" +"1048901176","1048901199","NL" +"1048901200","1048901207","DE" +"1048901208","1048901311","NL" +"1048901312","1048901319","DE" +"1048901320","1048901327","NL" +"1048901328","1048901335","DE" +"1048901336","1048901615","NL" +"1048901616","1048901623","DE" +"1048901624","1048901831","NL" +"1048901832","1048901839","DE" +"1048901840","1048901847","NL" +"1048901848","1048901863","DE" +"1048901864","1048902335","NL" +"1048902336","1048902343","DE" +"1048902344","1048902359","NL" +"1048902360","1048902367","DE" +"1048902368","1048902391","NL" +"1048902392","1048902399","DE" +"1048902400","1048902447","NL" +"1048902448","1048902455","DE" +"1048902456","1048902527","NL" +"1048902528","1048902535","DE" +"1048902536","1048902583","NL" +"1048902584","1048902591","DE" +"1048902592","1048902671","NL" +"1048902672","1048902679","DE" +"1048902680","1048903071","NL" +"1048903072","1048903079","DE" +"1048903080","1048903095","NL" +"1048903096","1048903103","DE" +"1048903104","1048903679","NL" +"1048903680","1048911871","GB" +"1048911872","1048920063","IT" +"1048920064","1048936447","NL" +"1048936448","1048944639","PL" +"1048944640","1048952831","RU" +"1048952832","1048953407","NL" +"1048953408","1048953439","BE" +"1048953440","1048954967","NL" +"1048954968","1048954975","BE" +"1048954976","1048969215","NL" +"1048969216","1048969855","EU" +"1048969856","1048969887","DE" +"1048969888","1048971063","EU" +"1048971064","1048971068","DE" +"1048971069","1048971327","EU" +"1048971328","1048971391","DE" +"1048971392","1048972719","EU" +"1048972720","1048972727","DE" +"1048972728","1048973439","EU" +"1048973440","1048973567","DE" +"1048973568","1048974335","EU" +"1048974336","1048975183","DE" +"1048975184","1048976287","EU" +"1048976288","1048976295","DE" +"1048976296","1048976296","EU" +"1048976297","1048976302","DE" +"1048976303","1048976303","EU" +"1048976304","1048976319","DE" +"1048976320","1048976383","EU" +"1048976384","1048976447","DE" +"1048976448","1048976511","EU" +"1048976512","1048977407","DE" +"1048977408","1048978431","EU" +"1048978432","1048978943","DE" +"1048978944","1048979135","EU" +"1048979136","1048979295","DE" +"1048979296","1048979455","EU" +"1048979456","1048980479","DE" +"1048980480","1048980735","EU" +"1048980736","1048980791","DE" +"1048980792","1048980803","EU" +"1048980804","1048980807","DE" +"1048980808","1048980815","EU" +"1048980816","1048980823","DE" +"1048980824","1048980831","EU" +"1048980832","1048980959","DE" +"1048980960","1048980967","EU" +"1048980968","1048980975","DE" +"1048980976","1048981503","EU" +"1048981504","1048981759","DE" +"1048981760","1048981791","EU" +"1048981792","1048981823","DE" +"1048981824","1048982015","EU" +"1048982016","1048982527","DE" +"1048982528","1048982823","EU" +"1048982824","1048982943","DE" +"1048982944","1048982959","EU" +"1048982960","1048983023","DE" +"1048983024","1048983167","EU" +"1048983168","1048983423","DE" +"1048983424","1048983487","EU" +"1048983488","1048983679","DE" +"1048983680","1048985087","EU" +"1048985088","1048985167","DE" +"1048985168","1048985183","EU" +"1048985184","1048985199","DE" +"1048985200","1048985215","EU" +"1048985216","1048985375","DE" +"1048985376","1048986879","EU" +"1048986880","1048987135","DE" +"1048987136","1048991743","EU" +"1048991744","1048991747","DE" +"1048991748","1049001983","EU" +"1049001984","1049002015","DE" +"1049002016","1049002111","EU" +"1049002112","1049002239","DE" +"1049002240","1049003263","EU" +"1049003264","1049004287","DE" +"1049004288","1049004351","EU" +"1049004352","1049004415","DE" +"1049004416","1049004543","EU" +"1049004544","1049006079","DE" +"1049006080","1049007103","EU" +"1049007104","1049007111","DE" +"1049007112","1049007359","EU" +"1049007360","1049009535","DE" +"1049009536","1049009559","EU" +"1049009560","1049009567","DE" +"1049009568","1049009583","EU" +"1049009584","1049009615","DE" +"1049009616","1049009647","EU" +"1049009648","1049009662","DE" +"1049009663","1049009663","EU" +"1049009664","1049012223","DE" +"1049012224","1049012224","EU" +"1049012225","1049012226","DE" +"1049012227","1049012735","EU" +"1049012736","1049014311","DE" +"1049014312","1049014335","EU" +"1049014336","1049014367","DE" +"1049014368","1049014783","EU" +"1049014784","1049016703","DE" +"1049016704","1049016711","FR" +"1049016712","1049016715","RU" +"1049016716","1049016743","DE" +"1049016744","1049016751","MA" +"1049016752","1049016759","DE" +"1049016760","1049016767","FR" +"1049016768","1049016815","DE" +"1049016816","1049016831","NL" +"1049016832","1049016847","DE" +"1049016848","1049016863","FR" +"1049016864","1049017983","DE" +"1049017984","1049018047","GE" +"1049018048","1049020127","DE" +"1049020128","1049020135","FR" +"1049020136","1049021343","DE" +"1049021344","1049021375","US" +"1049021376","1049026559","DE" +"1049026560","1049026815","EU" +"1049026816","1049031871","DE" +"1049031872","1049031903","EU" +"1049031904","1049032143","DE" +"1049032144","1049032167","EU" +"1049032168","1049032171","DE" +"1049032172","1049032191","EU" +"1049032192","1049032291","DE" +"1049032292","1049032295","EU" +"1049032296","1049032383","DE" +"1049032384","1049032399","EU" +"1049032400","1049032623","DE" +"1049032624","1049032631","EU" +"1049032632","1049032639","DE" +"1049032640","1049032647","EU" +"1049032648","1049032699","DE" +"1049032700","1049032703","EU" +"1049032704","1049034751","DE" +"1049034752","1049067519","EG" +"1049067520","1049100287","DK" +"1049100288","1049231359","GB" +"1049231360","1049296895","DE" +"1049296896","1049362431","EG" +"1049362432","1049362623","DE" +"1049362624","1049362687","GB" +"1049362688","1049362815","DE" +"1049362816","1049362943","GB" +"1049362944","1049362959","DE" +"1049362960","1049363071","GB" +"1049363072","1049363135","DE" +"1049363136","1049363967","GB" +"1049363968","1049364223","DE" +"1049364224","1049364991","GB" +"1049364992","1049365247","DE" +"1049365248","1049365711","GB" +"1049365712","1049365719","DE" +"1049365720","1049365727","GB" +"1049365728","1049365751","DE" +"1049365752","1049365887","GB" +"1049365888","1049365951","DE" +"1049365952","1049366015","GB" +"1049366016","1049366271","DE" +"1049366272","1049366335","GB" +"1049366336","1049366399","DE" +"1049366400","1049366527","GB" +"1049366528","1049368575","DE" +"1049368576","1049368671","GB" +"1049368672","1049368687","DE" +"1049368688","1049369599","GB" +"1049369600","1049369935","DE" +"1049369936","1049369983","GB" +"1049369984","1049370047","DE" +"1049370048","1049370111","GB" +"1049370112","1049370143","DE" +"1049370144","1049370175","GB" +"1049370176","1049370255","DE" +"1049370256","1049370367","GB" +"1049370368","1049370623","DE" +"1049370624","1049378815","AT" +"1049378816","1049395199","EG" +"1049395200","1049405055","NL" +"1049405056","1049405183","GB" +"1049405184","1049405247","LU" +"1049405248","1049405311","NL" +"1049405312","1049405375","BE" +"1049405376","1049405439","NL" +"1049405440","1049405567","DE" +"1049405568","1049405631","BE" +"1049405632","1049405695","AT" +"1049405696","1049405759","CH" +"1049405760","1049405823","ES" +"1049405824","1049405887","FR" +"1049405888","1049405951","GB" +"1049405952","1049407615","NL" +"1049407616","1049407999","CH" +"1049408000","1049409023","NL" +"1049409024","1049409279","DE" +"1049409280","1049411583","NL" +"1049411584","1049419775","GB" +"1049419776","1049427967","RU" +"1049427968","1049436159","CZ" +"1049436160","1049444351","DE" +"1049444352","1049460735","RU" +"1049460736","1049468927","NO" +"1049468928","1049477119","DE" +"1049477120","1049493503","PL" +"1049493504","1049518079","FI" +"1049518080","1049518095","GB" +"1049518096","1049559039","FI" +"1049559040","1049653095","DE" +"1049653096","1049653103","US" +"1049653104","1049698303","DE" +"1049698304","1049699071","NL" +"1049699072","1049699327","A2" +"1049699328","1049699583","NL" +"1049699584","1049699839","BW" +"1049699840","1049706495","NL" +"1049706496","1049707007","GB" +"1049707008","1049707519","NL" +"1049707520","1049707775","LB" +"1049707776","1049708031","DZ" +"1049708032","1049709055","GB" +"1049709056","1049709311","NL" +"1049709312","1049709567","GB" +"1049709568","1049710079","A2" +"1049710080","1049710335","GB" +"1049710336","1049710591","A2" +"1049710592","1049712895","GB" +"1049712896","1049713055","IR" +"1049713056","1049713087","MA" +"1049713088","1049713151","IR" +"1049713152","1049713663","NL" +"1049713664","1049713791","LB" +"1049713792","1049713919","IR" +"1049713920","1049714175","GB" +"1049714176","1049714687","NL" +"1049714688","1049715711","IR" +"1049715712","1049716735","NL" +"1049716736","1049717759","IQ" +"1049717760","1049718015","GB" +"1049718016","1049718271","IR" +"1049718272","1049722879","NL" +"1049722880","1049731071","IS" +"1049731072","1049739263","FI" +"1049739264","1049755647","NL" +"1049755648","1049757383","DE" +"1049757384","1049757391","IT" +"1049757392","1049758063","DE" +"1049758064","1049758071","PL" +"1049758072","1049758095","DE" +"1049758096","1049758103","ES" +"1049758104","1049758527","DE" +"1049758528","1049758559","DK" +"1049758560","1049759983","DE" +"1049759984","1049759999","AE" +"1049760000","1049760639","DE" +"1049760640","1049760703","IT" +"1049760704","1049760767","DE" +"1049760768","1049760775","ES" +"1049760776","1049760927","DE" +"1049760928","1049760959","DK" +"1049760960","1049761023","PL" +"1049761024","1049761791","DE" +"1049761792","1049762047","PL" +"1049762048","1049762271","DE" +"1049762272","1049762303","DK" +"1049762304","1049763039","DE" +"1049763040","1049763055","CH" +"1049763056","1049763327","DE" +"1049763328","1049763583","PL" +"1049763584","1049764447","DE" +"1049764448","1049764463","AE" +"1049764464","1049764479","DE" +"1049764480","1049764543","CH" +"1049764544","1049765695","DE" +"1049765696","1049765791","PL" +"1049765792","1049766143","DE" +"1049766144","1049766399","DK" +"1049766400","1049766415","DE" +"1049766416","1049766431","ES" +"1049766432","1049766511","DE" +"1049766512","1049766527","AE" +"1049766528","1049767935","DE" +"1049767936","1049767951","AE" +"1049767952","1049768063","DE" +"1049768064","1049768095","DK" +"1049768096","1049768367","DE" +"1049768368","1049768375","NL" +"1049768376","1049768383","GB" +"1049768384","1049768767","DE" +"1049768768","1049768799","AE" +"1049768800","1049769119","DE" +"1049769120","1049769151","AE" +"1049769152","1049770111","DE" +"1049770112","1049770127","AE" +"1049770128","1049772895","DE" +"1049772896","1049772927","AE" +"1049772928","1049773055","ES" +"1049773056","1049774367","DE" +"1049774368","1049774399","IT" +"1049774400","1049775087","DE" +"1049775088","1049775103","AE" +"1049775104","1049775119","CH" +"1049775120","1049776447","DE" +"1049776448","1049776479","AE" +"1049776480","1049777023","DE" +"1049777024","1049777039","CH" +"1049777040","1049778111","DE" +"1049778112","1049778143","ES" +"1049778144","1049778335","DE" +"1049778336","1049778351","AE" +"1049778352","1049778535","DE" +"1049778536","1049778543","AT" +"1049778544","1049779135","DE" +"1049779136","1049779167","AE" +"1049779168","1049782303","DE" +"1049782304","1049782335","AE" +"1049782336","1049782743","DE" +"1049782744","1049782751","IT" +"1049782752","1049783071","DE" +"1049783072","1049783103","DK" +"1049783104","1049783743","DE" +"1049783744","1049783759","AE" +"1049783760","1049784999","DE" +"1049785000","1049785007","AT" +"1049785008","1049794559","DE" +"1049794560","1049795583","CH" +"1049795584","1049811455","DE" +"1049811456","1049811711","PL" +"1049811712","1049812223","DE" +"1049812224","1049812479","PL" +"1049812480","1049817287","DE" +"1049817288","1049817295","AE" +"1049817296","1049821183","DE" +"1049821184","1049886719","FR" +"1049886720","1049894911","RU" +"1049894912","1049903103","NO" +"1049903104","1049911295","PL" +"1049911296","1049919487","FI" +"1049919488","1049927679","RU" +"1049927680","1049935871","NL" +"1049935872","1049944063","FI" +"1049944064","1049952255","RU" +"1049952256","1049960447","UA" +"1049960448","1049968639","GB" +"1049968640","1049985023","SA" +"1049985024","1050017791","IT" +"1050017792","1050041087","KW" +"1050041088","1050041599","US" +"1050041600","1050083327","KW" +"1050083328","1050148863","ES" +"1050148864","1050157055","CY" +"1050157056","1050173439","RU" +"1050173440","1050178487","IT" +"1050178488","1050178495","ES" +"1050178496","1050181631","IT" +"1050181632","1050189823","PL" +"1050189824","1050198015","DE" +"1050198016","1050206207","RU" +"1050206208","1050206999","SK" +"1050207000","1050207007","SR" +"1050207008","1050214399","SK" +"1050214400","1050246719","DE" +"1050246720","1050246735","BE" +"1050246736","1050268671","DE" +"1050268672","1050269183","US" +"1050269184","1050272511","DE" +"1050272512","1050272767","EU" +"1050272768","1050316799","DE" +"1050316800","1050317311","US" +"1050317312","1050320231","DE" +"1050320232","1050320239","GB" +"1050320240","1050332441","DE" +"1050332442","1050332442","GB" +"1050332443","1050340607","DE" +"1050340608","1050340639","US" +"1050340640","1050450711","DE" +"1050450712","1050450719","NL" +"1050450720","1050470911","DE" +"1050470912","1050471167","GB" +"1050471168","1050471391","DE" +"1050471392","1050471399","IT" +"1050471400","1050505247","DE" +"1050505248","1050505279","CA" +"1050505280","1050507503","DE" +"1050507504","1050507519","A2" +"1050507520","1050522407","DE" +"1050522408","1050522415","CH" +"1050522416","1050619503","DE" +"1050619504","1050619511","CH" +"1050619512","1050621407","DE" +"1050621408","1050621439","BE" +"1050621440","1050627491","DE" +"1050627492","1050627495","EU" +"1050627496","1050642687","DE" +"1050642688","1050642943","US" +"1050642944","1050664911","DE" +"1050664912","1050664919","IT" +"1050664920","1050667519","DE" +"1050667520","1050667775","FR" +"1050667776","1050672479","DE" +"1050672480","1050672487","SG" +"1050672488","1050673151","DE" +"1050673152","1050676470","FR" +"1050676471","1050676471","BE" +"1050676472","1050677335","FR" +"1050677336","1050677343","DE" +"1050677344","1050677505","FR" +"1050677506","1050677506","BE" +"1050677507","1050677702","FR" +"1050677703","1050677703","BE" +"1050677704","1050683711","FR" +"1050683712","1050683719","DK" +"1050683720","1050684095","FR" +"1050684096","1050684103","GB" +"1050684104","1050684609","FR" +"1050684610","1050684610","LU" +"1050684611","1050702623","FR" +"1050702624","1050702631","DE" +"1050702632","1050704082","FR" +"1050704083","1050704083","BE" +"1050704084","1050704661","FR" +"1050704662","1050704662","GB" +"1050704663","1050722831","FR" +"1050722832","1050722839","DE" +"1050722840","1050725463","FR" +"1050725464","1050725471","GB" +"1050725472","1050726335","FR" +"1050726336","1050726343","DE" +"1050726344","1050731146","FR" +"1050731147","1050731147","GB" +"1050731148","1050763476","FR" +"1050763477","1050763477","GB" +"1050763478","1050765853","FR" +"1050765854","1050765854","BE" +"1050765855","1050766665","FR" +"1050766666","1050766666","BE" +"1050766667","1050766729","FR" +"1050766730","1050766730","BE" +"1050766731","1050768551","FR" +"1050768552","1050768558","CH" +"1050768559","1050804223","FR" +"1050804224","1050869759","MK" +"1050869760","1050935295","NL" +"1050935296","1050940927","EU" +"1050940928","1050941183","ES" +"1050941184","1050943231","EU" +"1050943232","1050943487","ES" +"1050943488","1050945535","EU" +"1050945536","1050945791","ES" +"1050945792","1050948607","EU" +"1050948608","1050948863","ES" +"1050948864","1050968063","EU" +"1050968064","1051000831","GB" +"1051000832","1051017215","RU" +"1051017216","1051033599","NL" +"1051033600","1051049983","FI" +"1051049984","1051066367","HU" +"1051066368","1051082751","BE" +"1051082752","1051084287","NL" +"1051084288","1051084799","BE" +"1051084800","1051096831","NL" +"1051096832","1051097087","BE" +"1051097088","1051098111","NL" +"1051098112","1051099135","BE" +"1051099136","1051099647","NL" +"1051099648","1051099663","BE" +"1051099664","1051099671","NL" +"1051099672","1051099687","BE" +"1051099688","1051099695","NL" +"1051099696","1051099711","BE" +"1051099712","1051099727","NL" +"1051099728","1051099775","BE" +"1051099776","1051099791","NL" +"1051099792","1051099815","BE" +"1051099816","1051099823","NL" +"1051099824","1051099855","BE" +"1051099856","1051099863","NL" +"1051099864","1051099879","BE" +"1051099880","1051099887","NL" +"1051099888","1051099927","BE" +"1051099928","1051099967","NL" +"1051099968","1051099975","BE" +"1051099976","1051099983","NL" +"1051099984","1051100015","BE" +"1051100016","1051100023","NL" +"1051100024","1051100079","BE" +"1051100080","1051100095","NL" +"1051100096","1051100151","BE" +"1051100152","1051100159","NL" +"1051100160","1051100455","BE" +"1051100456","1051100463","NL" +"1051100464","1051100487","BE" +"1051100488","1051100499","NL" +"1051100500","1051100591","BE" +"1051100592","1051100607","NL" +"1051100608","1051100631","BE" +"1051100632","1051100663","NL" +"1051100664","1051100695","BE" +"1051100696","1051100703","NL" +"1051100704","1051100711","BE" +"1051100712","1051100735","NL" +"1051100736","1051100831","BE" +"1051100832","1051100839","NL" +"1051100840","1051100879","BE" +"1051100880","1051100911","NL" +"1051100912","1051100951","BE" +"1051100952","1051100967","NL" +"1051100968","1051101047","BE" +"1051101048","1051101055","NL" +"1051101056","1051101127","BE" +"1051101128","1051101151","NL" +"1051101152","1051101207","BE" +"1051101208","1051101231","NL" +"1051101232","1051101247","BE" +"1051101248","1051101279","NL" +"1051101280","1051101287","BE" +"1051101288","1051101407","NL" +"1051101408","1051101415","BE" +"1051101416","1051101431","NL" +"1051101432","1051101447","BE" +"1051101448","1051101463","NL" +"1051101464","1051101471","BE" +"1051101472","1051101591","NL" +"1051101592","1051101607","BE" +"1051101608","1051101615","NL" +"1051101616","1051101623","BE" +"1051101624","1051101631","NL" +"1051101632","1051101655","BE" +"1051101656","1051101671","NL" +"1051101672","1051101687","BE" +"1051101688","1051101719","NL" +"1051101720","1051101735","BE" +"1051101736","1051101783","NL" +"1051101784","1051101807","BE" +"1051101808","1051101823","NL" +"1051101824","1051101855","BE" +"1051101856","1051101919","NL" +"1051101920","1051101927","BE" +"1051101928","1051101959","NL" +"1051101960","1051101967","BE" +"1051101968","1051101983","NL" +"1051101984","1051102007","BE" +"1051102008","1051102055","NL" +"1051102056","1051102071","BE" +"1051102072","1051102079","NL" +"1051102080","1051102087","BE" +"1051102088","1051102095","NL" +"1051102096","1051102103","BE" +"1051102104","1051102119","NL" +"1051102120","1051102159","BE" +"1051102160","1051102207","NL" +"1051102208","1051102879","BE" +"1051102880","1051102887","NL" +"1051102888","1051103007","BE" +"1051103008","1051103015","NL" +"1051103016","1051103111","BE" +"1051103112","1051103119","NL" +"1051103120","1051103207","BE" +"1051103208","1051103215","NL" +"1051103216","1051103231","BE" +"1051103232","1051103233","NL" +"1051103234","1051103247","BE" +"1051103248","1051103287","NL" +"1051103288","1051103295","BE" +"1051103296","1051103359","NL" +"1051103360","1051103367","BE" +"1051103368","1051103431","NL" +"1051103432","1051103447","BE" +"1051103448","1051103503","NL" +"1051103504","1051103519","BE" +"1051103520","1051103527","NL" +"1051103528","1051103535","BE" +"1051103536","1051103543","NL" +"1051103544","1051103567","BE" +"1051103568","1051103583","NL" +"1051103584","1051103607","BE" +"1051103608","1051103639","NL" +"1051103640","1051103647","BE" +"1051103648","1051103663","NL" +"1051103664","1051103679","BE" +"1051103680","1051103687","NL" +"1051103688","1051103703","BE" +"1051103704","1051103767","NL" +"1051103768","1051103775","BE" +"1051103776","1051103799","NL" +"1051103800","1051103815","BE" +"1051103816","1051103823","NL" +"1051103824","1051103831","BE" +"1051103832","1051103863","NL" +"1051103864","1051103871","BE" +"1051103872","1051103879","NL" +"1051103880","1051103887","BE" +"1051103888","1051103911","NL" +"1051103912","1051103927","BE" +"1051103928","1051103959","NL" +"1051103960","1051103975","BE" +"1051103976","1051103991","NL" +"1051103992","1051103999","BE" +"1051104000","1051104015","NL" +"1051104016","1051104039","BE" +"1051104040","1051104071","NL" +"1051104072","1051104079","BE" +"1051104080","1051104111","NL" +"1051104112","1051104143","BE" +"1051104144","1051104167","NL" +"1051104168","1051104183","BE" +"1051104184","1051104191","NL" +"1051104192","1051104199","BE" +"1051104200","1051104231","NL" +"1051104232","1051104255","BE" +"1051104256","1051104311","NL" +"1051104312","1051104319","BE" +"1051104320","1051104327","NL" +"1051104328","1051104335","BE" +"1051104336","1051104351","NL" +"1051104352","1051104367","BE" +"1051104368","1051104383","NL" +"1051104384","1051104399","BE" +"1051104400","1051104503","NL" +"1051104504","1051104527","BE" +"1051104528","1051104559","NL" +"1051104560","1051104567","BE" +"1051104568","1051104583","NL" +"1051104584","1051104599","BE" +"1051104600","1051104607","NL" +"1051104608","1051104631","BE" +"1051104632","1051104679","NL" +"1051104680","1051104695","BE" +"1051104696","1051104719","NL" +"1051104720","1051104727","BE" +"1051104728","1051104751","NL" +"1051104752","1051104759","BE" +"1051104760","1051104791","NL" +"1051104792","1051104799","BE" +"1051104800","1051104823","NL" +"1051104824","1051104831","BE" +"1051104832","1051104839","NL" +"1051104840","1051104863","BE" +"1051104864","1051104903","NL" +"1051104904","1051104911","BE" +"1051104912","1051104935","NL" +"1051104936","1051104943","BE" +"1051104944","1051104951","NL" +"1051104952","1051104967","BE" +"1051104968","1051104975","NL" +"1051104976","1051104983","BE" +"1051104984","1051104991","NL" +"1051104992","1051104999","BE" +"1051105000","1051105047","NL" +"1051105048","1051105055","BE" +"1051105056","1051105063","NL" +"1051105064","1051105079","BE" +"1051105080","1051105103","NL" +"1051105104","1051105119","BE" +"1051105120","1051105127","NL" +"1051105128","1051105135","BE" +"1051105136","1051105143","NL" +"1051105144","1051105151","BE" +"1051105152","1051105183","NL" +"1051105184","1051105199","BE" +"1051105200","1051105207","NL" +"1051105208","1051105223","BE" +"1051105224","1051105255","NL" +"1051105256","1051105263","BE" +"1051105264","1051105271","NL" +"1051105272","1051105279","BE" +"1051105280","1051105319","NL" +"1051105320","1051105327","BE" +"1051105328","1051105359","NL" +"1051105360","1051105383","BE" +"1051105384","1051105439","NL" +"1051105440","1051105455","BE" +"1051105456","1051105503","NL" +"1051105504","1051105511","BE" +"1051105512","1051105519","NL" +"1051105520","1051105551","BE" +"1051105552","1051105599","NL" +"1051105600","1051105607","BE" +"1051105608","1051105703","NL" +"1051105704","1051105711","BE" +"1051105712","1051105791","NL" +"1051105792","1051105799","BE" +"1051105800","1051105807","NL" +"1051105808","1051105815","BE" +"1051105816","1051105831","NL" +"1051105832","1051105839","BE" +"1051105840","1051105863","NL" +"1051105864","1051105871","BE" +"1051105872","1051105895","NL" +"1051105896","1051105903","BE" +"1051105904","1051105911","NL" +"1051105912","1051105943","BE" +"1051105944","1051105967","NL" +"1051105968","1051105983","BE" +"1051105984","1051105999","NL" +"1051106000","1051106023","BE" +"1051106024","1051106031","NL" +"1051106032","1051106039","BE" +"1051106040","1051106047","NL" +"1051106048","1051106055","BE" +"1051106056","1051106071","NL" +"1051106072","1051106079","BE" +"1051106080","1051106087","NL" +"1051106088","1051106103","BE" +"1051106104","1051106111","NL" +"1051106112","1051106119","BE" +"1051106120","1051106127","NL" +"1051106128","1051106143","BE" +"1051106144","1051106167","NL" +"1051106168","1051106175","BE" +"1051106176","1051106183","NL" +"1051106184","1051106191","BE" +"1051106192","1051106247","NL" +"1051106248","1051106271","BE" +"1051106272","1051106303","NL" +"1051106304","1051106311","BE" +"1051106312","1051106319","NL" +"1051106320","1051106327","BE" +"1051106328","1051106335","NL" +"1051106336","1051106351","BE" +"1051106352","1051106383","NL" +"1051106384","1051106399","BE" +"1051106400","1051106423","NL" +"1051106424","1051106431","BE" +"1051106432","1051106463","NL" +"1051106464","1051106471","BE" +"1051106472","1051106503","NL" +"1051106504","1051106519","BE" +"1051106520","1051106527","NL" +"1051106528","1051106535","BE" +"1051106536","1051106543","NL" +"1051106544","1051106551","BE" +"1051106552","1051106583","NL" +"1051106584","1051106599","BE" +"1051106600","1051106607","NL" +"1051106608","1051106615","BE" +"1051106616","1051106639","NL" +"1051106640","1051106655","BE" +"1051106656","1051106663","NL" +"1051106664","1051106671","BE" +"1051106672","1051106711","NL" +"1051106712","1051106719","BE" +"1051106720","1051106759","NL" +"1051106760","1051106767","BE" +"1051106768","1051106775","NL" +"1051106776","1051106783","BE" +"1051106784","1051106799","NL" +"1051106800","1051106807","BE" +"1051106808","1051106823","NL" +"1051106824","1051106831","BE" +"1051106832","1051106847","NL" +"1051106848","1051106863","BE" +"1051106864","1051106895","NL" +"1051106896","1051106911","BE" +"1051106912","1051106927","NL" +"1051106928","1051106935","BE" +"1051106936","1051106943","NL" +"1051106944","1051106951","BE" +"1051106952","1051106959","NL" +"1051106960","1051106967","BE" +"1051106968","1051106975","NL" +"1051106976","1051107007","BE" +"1051107008","1051107015","NL" +"1051107016","1051107039","BE" +"1051107040","1051107055","NL" +"1051107056","1051107063","BE" +"1051107064","1051107071","NL" +"1051107072","1051107095","BE" +"1051107096","1051107103","NL" +"1051107104","1051107119","BE" +"1051107120","1051107127","NL" +"1051107128","1051107135","BE" +"1051107136","1051107143","NL" +"1051107144","1051107167","BE" +"1051107168","1051107183","NL" +"1051107184","1051107215","BE" +"1051107216","1051107223","NL" +"1051107224","1051107231","BE" +"1051107232","1051107239","NL" +"1051107240","1051107247","BE" +"1051107248","1051107279","NL" +"1051107280","1051107287","BE" +"1051107288","1051107295","NL" +"1051107296","1051107303","BE" +"1051107304","1051107311","NL" +"1051107312","1051107327","BE" +"1051107328","1051107329","NL" +"1051107330","1051107359","BE" +"1051107360","1051107375","NL" +"1051107376","1051107383","BE" +"1051107384","1051107391","NL" +"1051107392","1051107407","BE" +"1051107408","1051107423","NL" +"1051107424","1051107455","BE" +"1051107456","1051107519","NL" +"1051107520","1051107839","BE" +"1051107840","1051115519","NL" +"1051115520","1051121287","BE" +"1051121288","1051121295","NL" +"1051121296","1051123711","BE" +"1051123712","1051123839","NL" +"1051123840","1051123855","BE" +"1051123856","1051123911","NL" +"1051123912","1051123935","BE" +"1051123936","1051124479","NL" +"1051124480","1051124607","BE" +"1051124608","1051124767","NL" +"1051124768","1051124815","BE" +"1051124816","1051124895","NL" +"1051124896","1051124911","BE" +"1051124912","1051125247","NL" +"1051125248","1051125759","BE" +"1051125760","1051131903","NL" +"1051131904","1051197439","CH" +"1051197440","1051213823","CZ" +"1051213824","1051230207","SK" +"1051230208","1051238399","SE" +"1051238400","1051246591","GE" +"1051246592","1051254783","DE" +"1051254784","1051262975","RU" +"1051262976","1051271167","DE" +"1051271168","1051279359","IT" +"1051279360","1051295743","PT" +"1051295744","1051303935","GB" +"1051303936","1051312127","SK" +"1051312128","1051328511","GR" +"1051328512","1051460095","GB" +"1051460096","1051460351","ES" +"1051460352","1051525119","GB" +"1051525120","1051533311","MT" +"1051533312","1051541503","NG" +"1051541504","1051549345","GB" +"1051549346","1051549346","EU" +"1051549347","1051557887","GB" +"1051557888","1051566079","RU" +"1051566080","1051574271","IT" +"1051574272","1051574623","GB" +"1051574624","1051574655","GM" +"1051574656","1051577535","GB" +"1051577536","1051577567","NL" +"1051577568","1051577855","GB" +"1051577856","1051578111","NL" +"1051578112","1051578143","GB" +"1051578144","1051578175","NL" +"1051578176","1051578247","GB" +"1051578248","1051578255","FR" +"1051578256","1051578303","GB" +"1051578304","1051578335","NL" +"1051578336","1051580535","GB" +"1051580536","1051580543","SZ" +"1051580544","1051584207","GB" +"1051584208","1051584223","BE" +"1051584224","1051590655","GB" +"1051590656","1051702527","ES" +"1051702528","1051702783","US" +"1051702784","1051721727","ES" +"1051721728","1051729919","RU" +"1051729920","1051738111","FI" +"1051738112","1051754495","BG" +"1051754496","1051762687","DE" +"1051762688","1051770879","SK" +"1051770880","1051779071","NO" +"1051779072","1051787263","DE" +"1051787264","1051795455","IT" +"1051795456","1051803647","RU" +"1051803648","1051820031","CZ" +"1051820032","1051852799","NL" +"1051852800","1051918335","AT" +"1051918336","1051919359","PL" +"1051919360","1051920383","AT" +"1051920384","1051920895","PL" +"1051920896","1051946367","AT" +"1051946368","1051946383","NL" +"1051946384","1051946399","CH" +"1051946400","1051946415","NL" +"1051946416","1051946431","CH" +"1051946432","1051946447","NL" +"1051946448","1051946463","CH" +"1051946464","1051946479","NL" +"1051946480","1051946495","CH" +"1051946496","1051949823","AT" +"1051949824","1051949951","NL" +"1051949952","1051983871","AT" +"1051983872","1051986687","EU" +"1051986688","1051986943","DE" +"1051986944","1051990015","EU" +"1051990016","1051991039","DE" +"1051991040","1051991807","EU" +"1051991808","1051991935","DE" +"1051991936","1051992063","EU" +"1051992064","1051994639","DE" +"1051994640","1051994647","EU" +"1051994648","1051994671","DE" +"1051994672","1051994699","EU" +"1051994700","1051994703","BE" +"1051994704","1051994715","EU" +"1051994716","1051994719","DE" +"1051994720","1051994751","BE" +"1051994752","1051994791","EU" +"1051994792","1051994799","NL" +"1051994800","1051994831","DE" +"1051994832","1051994863","EU" +"1051994864","1051994871","DE" +"1051994872","1051994943","EU" +"1051994944","1051995055","DE" +"1051995056","1051995391","EU" +"1051995392","1051996159","DE" +"1051996160","1051996335","EU" +"1051996336","1051996351","DE" +"1051996352","1051996879","EU" +"1051996880","1051996927","DE" +"1051996928","1051997439","EU" +"1051997440","1051997695","DE" +"1051997696","1051997711","EU" +"1051997712","1051997727","DE" +"1051997728","1051997951","EU" +"1051997952","1051997983","DE" +"1051997984","1051998247","EU" +"1051998248","1051998255","DE" +"1051998256","1051998687","EU" +"1051998688","1051998695","DE" +"1051998696","1051999039","EU" +"1051999040","1051999043","DE" +"1051999044","1051999135","EU" +"1051999136","1051999151","DE" +"1051999152","1051999167","EU" +"1051999168","1051999359","DE" +"1051999360","1051999487","EU" +"1051999488","1051999743","DE" +"1051999744","1051999999","EU" +"1052000000","1052000063","DE" +"1052000064","1052000127","EU" +"1052000128","1052000143","DE" +"1052000144","1052000191","EU" +"1052000192","1052000511","DE" +"1052000512","1052000519","EU" +"1052000520","1052000527","DE" +"1052000528","1052000535","EU" +"1052000536","1052000539","DE" +"1052000540","1052000583","EU" +"1052000584","1052000623","DE" +"1052000624","1052000631","EU" +"1052000632","1052002303","DE" +"1052002304","1052002319","EU" +"1052002320","1052002335","DE" +"1052002336","1052002367","EU" +"1052002368","1052002431","DE" +"1052002432","1052002439","EU" +"1052002440","1052002447","DE" +"1052002448","1052002463","EU" +"1052002464","1052002511","DE" +"1052002512","1052002519","EU" +"1052002520","1052002523","DE" +"1052002524","1052002527","EU" +"1052002528","1052002535","DE" +"1052002536","1052003327","EU" +"1052003328","1052003359","DE" +"1052003360","1052003399","EU" +"1052003400","1052003455","DE" +"1052003456","1052003479","EU" +"1052003480","1052003487","DE" +"1052003488","1052003551","EU" +"1052003552","1052003839","DE" +"1052003840","1052003967","EU" +"1052003968","1052003999","DE" +"1052004000","1052004671","EU" +"1052004672","1052004687","DE" +"1052004688","1052004703","EU" +"1052004704","1052004735","DE" +"1052004736","1052004751","EU" +"1052004752","1052004759","DE" +"1052004760","1052004767","EU" +"1052004768","1052004783","DE" +"1052004784","1052004815","EU" +"1052004816","1052004831","DE" +"1052004832","1052004895","EU" +"1052004896","1052004959","DE" +"1052004960","1052005119","EU" +"1052005120","1052005151","DE" +"1052005152","1052005247","EU" +"1052005248","1052005631","DE" +"1052005632","1052005887","EU" +"1052005888","1052005911","DE" +"1052005912","1052006543","EU" +"1052006544","1052006559","DE" +"1052006560","1052007039","EU" +"1052007040","1052007103","DE" +"1052007104","1052007431","EU" +"1052007432","1052007435","DE" +"1052007436","1052007455","EU" +"1052007456","1052007471","DE" +"1052007472","1052007519","EU" +"1052007520","1052007535","DE" +"1052007536","1052007775","EU" +"1052007776","1052007791","DE" +"1052007792","1052007935","EU" +"1052007936","1052008223","DE" +"1052008224","1052008515","EU" +"1052008516","1052008527","DE" +"1052008528","1052008543","EU" +"1052008544","1052008583","DE" +"1052008584","1052008607","EU" +"1052008608","1052008623","DE" +"1052008624","1052008671","EU" +"1052008672","1052008687","DE" +"1052008688","1052008703","EU" +"1052008704","1052009087","DE" +"1052009088","1052009471","EU" +"1052009472","1052009487","DE" +"1052009488","1052009503","EU" +"1052009504","1052009535","DE" +"1052009536","1052010463","EU" +"1052010464","1052010519","DE" +"1052010520","1052010623","EU" +"1052010624","1052010655","DE" +"1052010656","1052010751","EU" +"1052010752","1052011135","DE" +"1052011136","1052011263","EU" +"1052011264","1052012287","DE" +"1052012288","1052012303","EU" +"1052012304","1052012335","DE" +"1052012336","1052012383","EU" +"1052012384","1052012399","DE" +"1052012400","1052012543","EU" +"1052012544","1052013055","DE" +"1052013056","1052013071","EU" +"1052013072","1052013087","DE" +"1052013088","1052013119","EU" +"1052013120","1052013127","DE" +"1052013128","1052013143","EU" +"1052013144","1052013151","DE" +"1052013152","1052013215","EU" +"1052013216","1052013263","DE" +"1052013264","1052013311","EU" +"1052013312","1052013567","DE" +"1052013568","1052013695","EU" +"1052013696","1052013823","DE" +"1052013824","1052013847","EU" +"1052013848","1052013855","DE" +"1052013856","1052013887","EU" +"1052013888","1052013951","DE" +"1052013952","1052013959","EU" +"1052013960","1052013963","DE" +"1052013964","1052014015","EU" +"1052014016","1052014079","DE" +"1052014080","1052014111","EU" +"1052014112","1052014239","DE" +"1052014240","1052014271","EU" +"1052014272","1052014303","DE" +"1052014304","1052015367","EU" +"1052015368","1052015375","DE" +"1052015376","1052015423","EU" +"1052015424","1052015519","DE" +"1052015520","1052015551","EU" +"1052015552","1052015583","DE" +"1052015584","1052015631","EU" +"1052015632","1052015647","DE" +"1052015648","1052015695","EU" +"1052015696","1052015727","DE" +"1052015728","1052015999","EU" +"1052016000","1052016127","DE" +"1052016128","1052016207","EU" +"1052016208","1052016223","DE" +"1052016224","1052016239","EU" +"1052016240","1052016247","DE" +"1052016248","1052016255","EU" +"1052016256","1052016323","DE" +"1052016324","1052016447","EU" +"1052016448","1052016463","DE" +"1052016464","1052016479","EU" +"1052016480","1052016511","DE" +"1052016512","1052016679","EU" +"1052016680","1052016687","DE" +"1052016688","1052016895","EU" +"1052016896","1052017151","DE" +"1052017152","1052017231","EU" +"1052017232","1052017247","DE" +"1052017248","1052017471","EU" +"1052017472","1052017503","DE" +"1052017504","1052017535","EU" +"1052017536","1052017567","DE" +"1052017568","1052017599","EU" +"1052017600","1052017663","DE" +"1052017664","1052018167","EU" +"1052018168","1052018431","DE" +"1052018432","1052018719","EU" +"1052018720","1052018767","DE" +"1052018768","1052019199","EU" +"1052019200","1052019455","DE" +"1052019456","1052019735","EU" +"1052019736","1052019775","DE" +"1052019776","1052019903","EU" +"1052019904","1052020047","DE" +"1052020048","1052020672","EU" +"1052020673","1052020702","DE" +"1052020703","1052020703","EU" +"1052020704","1052020735","DE" +"1052020736","1052022527","EU" +"1052022528","1052022783","DE" +"1052022784","1052024831","EU" +"1052024832","1052041247","DE" +"1052041248","1052041255","EU" +"1052041256","1052041279","DE" +"1052041280","1052041295","EU" +"1052041296","1052041327","DE" +"1052041328","1052041335","EU" +"1052041336","1052041359","DE" +"1052041360","1052041375","EU" +"1052041376","1052041599","DE" +"1052041600","1052041727","EU" +"1052041728","1052041863","DE" +"1052041864","1052041983","EU" +"1052041984","1052042095","DE" +"1052042096","1052042143","EU" +"1052042144","1052042183","DE" +"1052042184","1052042223","EU" +"1052042224","1052042239","DE" +"1052042240","1052042303","EU" +"1052042304","1052042311","DE" +"1052042312","1052042367","EU" +"1052042368","1052042431","DE" +"1052042432","1052042479","EU" +"1052042480","1052042519","DE" +"1052042520","1052042559","EU" +"1052042560","1052042575","DE" +"1052042576","1052042583","EU" +"1052042584","1052042687","DE" +"1052042688","1052042703","EU" +"1052042704","1052042751","DE" +"1052042752","1052042815","EU" +"1052042816","1052042863","DE" +"1052042864","1052043007","EU" +"1052043008","1052043103","DE" +"1052043104","1052043111","EU" +"1052043112","1052043127","DE" +"1052043128","1052043167","EU" +"1052043168","1052043263","DE" +"1052043264","1052043527","EU" +"1052043528","1052043535","DE" +"1052043536","1052043551","EU" +"1052043552","1052043575","DE" +"1052043576","1052043583","EU" +"1052043584","1052043651","DE" +"1052043652","1052043663","EU" +"1052043664","1052043679","DE" +"1052043680","1052043759","EU" +"1052043760","1052043775","DE" +"1052043776","1052044287","EU" +"1052044288","1052044351","DE" +"1052044352","1052044383","EU" +"1052044384","1052044399","DE" +"1052044400","1052044415","EU" +"1052044416","1052044447","DE" +"1052044448","1052044511","EU" +"1052044512","1052044527","DE" +"1052044528","1052044543","EU" +"1052044544","1052044927","DE" +"1052044928","1052045023","EU" +"1052045024","1052045055","DE" +"1052045056","1052045311","EU" +"1052045312","1052046135","DE" +"1052046136","1052046335","EU" +"1052046336","1052046591","DE" +"1052046592","1052046847","EU" +"1052046848","1052047139","DE" +"1052047140","1052049151","EU" +"1052049152","1052049183","DE" +"1052049184","1052049407","EU" +"1052049408","1052057599","PL" +"1052057600","1052065791","RU" +"1052065792","1052082175","SE" +"1052082176","1052090367","DE" +"1052090368","1052098559","PL" +"1052098560","1052099471","SE" +"1052099472","1052099479","NO" +"1052099480","1052104095","SE" +"1052104096","1052104127","DK" +"1052104128","1052116991","SE" +"1052116992","1052119039","RU" +"1052119040","1052121087","RO" +"1052121088","1052129279","RU" +"1052129280","1052131327","BE" +"1052131328","1052133375","UA" +"1052133376","1052135423","RU" +"1052135424","1052137471","UA" +"1052137472","1052139519","RU" +"1052139520","1052141567","DE" +"1052141568","1052143615","PL" +"1052143616","1052145663","BG" +"1052145664","1052147711","UA" +"1052147712","1052151807","RU" +"1052151808","1052153855","PL" +"1052153856","1052157951","UA" +"1052157952","1052159999","DK" +"1052160000","1052162047","LU" +"1052162048","1052164095","CH" +"1052164096","1052168191","RU" +"1052168192","1052170239","PL" +"1052170240","1052172287","SE" +"1052172288","1052174335","PL" +"1052174336","1052176383","CZ" +"1052176384","1052178431","NL" +"1052178432","1052180479","DK" +"1052180480","1052213247","RU" +"1052213248","1052246015","FI" +"1052246016","1052247039","DE" +"1052247040","1052247295","FR" +"1052247296","1052247359","DE" +"1052247360","1052247391","FR" +"1052247392","1052247407","DE" +"1052247408","1052247415","GB" +"1052247416","1052247423","NL" +"1052247424","1052247551","GB" +"1052247552","1052248095","DE" +"1052248096","1052248127","ZA" +"1052248128","1052248135","FR" +"1052248136","1052248143","DE" +"1052248144","1052248159","BE" +"1052248160","1052249375","DE" +"1052249376","1052249407","IT" +"1052249408","1052249471","DE" +"1052249472","1052249503","ZA" +"1052249504","1052250655","DE" +"1052250656","1052250687","GB" +"1052250688","1052250719","IL" +"1052250720","1052250735","IT" +"1052250736","1052250751","NL" +"1052250752","1052252863","DE" +"1052252864","1052252879","GB" +"1052252880","1052252895","ZA" +"1052252896","1052252927","IT" +"1052252928","1052254207","DE" +"1052254208","1052255255","NL" +"1052255256","1052255263","GB" +"1052255264","1052255871","NL" +"1052255872","1052255935","GB" +"1052255936","1052257279","NL" +"1052257280","1052257791","FR" +"1052257792","1052258303","AT" +"1052258304","1052260623","FR" +"1052260624","1052260631","ZA" +"1052260632","1052260639","AT" +"1052260640","1052260735","FR" +"1052260736","1052260863","NL" +"1052260864","1052260895","TR" +"1052260896","1052261055","FR" +"1052261056","1052261119","NL" +"1052261120","1052262399","FR" +"1052262400","1052263423","DK" +"1052263424","1052263935","DE" +"1052263936","1052264447","DK" +"1052264448","1052264639","SE" +"1052264640","1052264703","IT" +"1052264704","1052265471","SE" +"1052265472","1052265519","IT" +"1052265520","1052265535","GB" +"1052265536","1052265599","DE" +"1052265600","1052265983","IT" +"1052265984","1052266239","DE" +"1052266240","1052266495","GB" +"1052266496","1052268543","BE" +"1052268544","1052268607","ZA" +"1052268608","1052268671","BE" +"1052268672","1052268703","IT" +"1052268704","1052268719","ZA" +"1052268720","1052268735","NL" +"1052268736","1052268799","DE" +"1052268800","1052270591","ZA" +"1052270592","1052271871","FR" +"1052271872","1052272127","BE" +"1052272128","1052272543","FR" +"1052272544","1052272575","AT" +"1052272576","1052272639","SE" +"1052272640","1052274175","FR" +"1052274176","1052274687","ZA" +"1052274688","1052274943","ES" +"1052274944","1052275199","IT" +"1052275200","1052275711","AT" +"1052275712","1052276735","GB" +"1052276736","1052278207","IT" +"1052278208","1052278271","GB" +"1052278272","1052278783","IT" +"1052278784","1052278823","CH" +"1052278824","1052278831","GB" +"1052278832","1052278847","AT" +"1052278848","1052278863","ZA" +"1052278864","1052278879","NL" +"1052278880","1052284607","GB" +"1052284608","1052284671","EU" +"1052284672","1052286975","GB" +"1052286976","1052287487","CH" +"1052287488","1052288255","SE" +"1052288256","1052288287","EU" +"1052288288","1052288295","IL" +"1052288296","1052288303","BE" +"1052288304","1052288319","AT" +"1052288320","1052288383","EU" +"1052288384","1052288511","FR" +"1052288512","1052289023","AT" +"1052289024","1052289151","GB" +"1052289152","1052289183","CH" +"1052289184","1052289215","DE" +"1052289216","1052289279","GB" +"1052289280","1052289535","EU" +"1052289536","1052290047","GB" +"1052290048","1052290063","CH" +"1052290064","1052290303","GB" +"1052290304","1052290367","EU" +"1052290368","1052290399","CH" +"1052290400","1052290431","ZA" +"1052290432","1052290559","FR" +"1052290560","1052290575","GB" +"1052290576","1052290591","BE" +"1052290592","1052290639","GB" +"1052290640","1052290655","ZA" +"1052290656","1052290687","DE" +"1052290688","1052290815","GB" +"1052290816","1052290831","CH" +"1052290832","1052291327","GB" +"1052291328","1052291583","CH" +"1052291584","1052291679","FI" +"1052291680","1052291687","TR" +"1052291688","1052291695","GB" +"1052291696","1052291711","CH" +"1052291712","1052292095","FR" +"1052292096","1052299263","GB" +"1052299264","1052299775","EU" +"1052299776","1052303359","GB" +"1052303360","1052307455","DE" +"1052307456","1052309247","CH" +"1052309248","1052309503","NO" +"1052309504","1052310527","CH" +"1052310528","1052310783","FR" +"1052310784","1052311039","AT" +"1052311040","1052311551","GB" +"1052311552","1052311615","DE" +"1052311616","1052311679","BE" +"1052311680","1052311871","DE" +"1052311872","1052311895","BE" +"1052311896","1052311903","NL" +"1052311904","1052311935","IT" +"1052311936","1052311967","GB" +"1052311968","1052311999","DE" +"1052312000","1052312063","CH" +"1052312064","1052312767","DE" +"1052312768","1052312831","EU" +"1052312832","1052312895","DE" +"1052312896","1052312903","CH" +"1052312904","1052312911","ES" +"1052312912","1052312927","CH" +"1052312928","1052313087","GB" +"1052313088","1052314751","DE" +"1052314752","1052314815","ES" +"1052314816","1052314823","DE" +"1052314824","1052314831","ES" +"1052314832","1052314847","IT" +"1052314848","1052315071","DE" +"1052315072","1052315103","IT" +"1052315104","1052315135","AT" +"1052315136","1052315551","DE" +"1052315552","1052315583","ES" +"1052315584","1052315647","GB" +"1052315648","1052316319","DE" +"1052316320","1052316335","NL" +"1052316336","1052316767","DE" +"1052316768","1052316799","IT" +"1052316800","1052316927","DE" +"1052316928","1052317183","EU" +"1052317184","1052317599","DE" +"1052317600","1052317607","BE" +"1052317608","1052317615","DE" +"1052317616","1052317631","GB" +"1052317632","1052317663","IT" +"1052317664","1052318047","DE" +"1052318048","1052318079","ES" +"1052318080","1052318207","SE" +"1052318208","1052318719","DE" +"1052318720","1052319231","EU" +"1052319232","1052319743","DE" +"1052319744","1052319999","EU" +"1052320000","1052320079","GB" +"1052320080","1052320087","CZ" +"1052320088","1052320095","GB" +"1052320096","1052320127","ZA" +"1052320128","1052320255","BE" +"1052320256","1052322239","GB" +"1052322240","1052322303","CH" +"1052322304","1052323871","GB" +"1052323872","1052323903","CH" +"1052323904","1052324927","GB" +"1052324928","1052324943","ZA" +"1052324944","1052324959","NL" +"1052324960","1052324991","ES" +"1052324992","1052325191","GB" +"1052325192","1052325199","DE" +"1052325200","1052325215","AT" +"1052325216","1052325247","ZA" +"1052325248","1052325311","GB" +"1052325312","1052325375","NL" +"1052325376","1052325567","GB" +"1052325568","1052325631","ZA" +"1052325632","1052327935","GB" +"1052327936","1052328223","CH" +"1052328224","1052328255","IT" +"1052328256","1052328319","ES" +"1052328320","1052328447","DE" +"1052328448","1052328639","CH" +"1052328640","1052328671","ZA" +"1052328672","1052328703","ES" +"1052328704","1052329983","CH" +"1052329984","1052330239","DE" +"1052330240","1052331167","CH" +"1052331168","1052331183","GB" +"1052331184","1052331199","CH" +"1052331200","1052331263","GB" +"1052331264","1052331615","CH" +"1052331616","1052331647","AT" +"1052331648","1052331711","CH" +"1052331712","1052331743","GB" +"1052331744","1052332031","CH" +"1052332032","1052333103","IT" +"1052333104","1052333119","CH" +"1052333120","1052333183","FR" +"1052333184","1052333311","ZA" +"1052333312","1052333567","EU" +"1052333568","1052334751","IT" +"1052334752","1052334759","NL" +"1052334760","1052334767","ZA" +"1052334768","1052334815","GB" +"1052334816","1052334847","ZA" +"1052334848","1052335423","IT" +"1052335424","1052335455","NL" +"1052335456","1052335519","ES" +"1052335520","1052335535","ZA" +"1052335536","1052335551","DE" +"1052335552","1052335615","AT" +"1052335616","1052336127","BE" +"1052336128","1052336255","FR" +"1052336256","1052336383","GB" +"1052336384","1052337343","FR" +"1052337344","1052337375","DE" +"1052337376","1052337759","FR" +"1052337760","1052337887","GB" +"1052337888","1052337903","ZA" +"1052337904","1052337911","NL" +"1052337912","1052337919","ZA" +"1052337920","1052340111","FR" +"1052340112","1052340127","ES" +"1052340128","1052340135","NL" +"1052340136","1052340223","FR" +"1052340224","1052340527","AT" +"1052340528","1052340543","BE" +"1052340544","1052340575","IT" +"1052340576","1052340607","NL" +"1052340608","1052340671","HU" +"1052340672","1052340703","GB" +"1052340704","1052340719","ZA" +"1052340720","1052340735","GB" +"1052340736","1052340767","AT" +"1052340768","1052340799","DE" +"1052340800","1052340863","GB" +"1052340864","1052341247","AT" +"1052341248","1052341503","DE" +"1052341504","1052342271","AT" +"1052342272","1052342303","SE" +"1052342304","1052342335","CH" +"1052342336","1052342463","SE" +"1052342464","1052342471","ZA" +"1052342472","1052342479","GB" +"1052342480","1052342495","ZA" +"1052342496","1052342527","FR" +"1052342528","1052343647","CH" +"1052343648","1052343655","NL" +"1052343656","1052343663","GB" +"1052343664","1052343679","DE" +"1052343680","1052344319","CH" +"1052344320","1052344863","NL" +"1052344864","1052344895","ES" +"1052344896","1052344959","IT" +"1052344960","1052345087","CH" +"1052345088","1052345135","NL" +"1052345136","1052345151","GB" +"1052345152","1052345247","FR" +"1052345248","1052345279","IT" +"1052345280","1052345343","DE" +"1052345344","1052345471","NL" +"1052345472","1052345487","EU" +"1052345488","1052345503","NL" +"1052345504","1052345535","ZA" +"1052345536","1052345551","AT" +"1052345552","1052345567","GB" +"1052345568","1052345631","NL" +"1052345632","1052345663","IT" +"1052345664","1052345695","HU" +"1052345696","1052345727","PT" +"1052345728","1052345855","AT" +"1052345856","1052346903","NL" +"1052346904","1052346911","BE" +"1052346912","1052346943","ZA" +"1052346944","1052347007","ES" +"1052347008","1052347135","DE" +"1052347136","1052347391","NL" +"1052347392","1052348415","CH" +"1052348416","1052348799","GB" +"1052348800","1052348831","DE" +"1052348832","1052348863","CH" +"1052348864","1052348879","DE" +"1052348880","1052348895","GB" +"1052348896","1052348927","DE" +"1052348928","1052349119","GB" +"1052349120","1052349151","BE" +"1052349152","1052349343","GB" +"1052349344","1052349375","DE" +"1052349376","1052349407","GB" +"1052349408","1052349439","ZA" +"1052349440","1052352559","GB" +"1052352560","1052352591","ZA" +"1052352592","1052352607","GB" +"1052352608","1052352639","EU" +"1052352640","1052352703","GB" +"1052352704","1052352767","DE" +"1052352768","1052352927","GB" +"1052352928","1052352959","IT" +"1052352960","1052352991","ES" +"1052352992","1052353023","BE" +"1052353024","1052353279","IT" +"1052353280","1052353407","DE" +"1052353408","1052353535","EU" +"1052353536","1052354111","DE" +"1052354112","1052354175","TR" +"1052354176","1052354559","DE" +"1052354560","1052356607","GB" +"1052356608","1052356703","ZA" +"1052356704","1052356735","ES" +"1052356736","1052356799","RU" +"1052356800","1052356863","IE" +"1052356864","1052358479","ZA" +"1052358480","1052358495","GB" +"1052358496","1052358511","AT" +"1052358512","1052358527","ZA" +"1052358528","1052358655","DE" +"1052358656","1052359839","ZA" +"1052359840","1052359871","IE" +"1052359872","1052359935","IT" +"1052359936","1052360735","ZA" +"1052360736","1052360743","GB" +"1052360744","1052360767","ZA" +"1052360768","1052360783","DE" +"1052360784","1052360831","IT" +"1052360832","1052360959","GB" +"1052360960","1052360991","FR" +"1052360992","1052361023","BE" +"1052361024","1052361039","ZA" +"1052361040","1052361055","NL" +"1052361056","1052361087","DE" +"1052361088","1052361151","ES" +"1052361152","1052361215","GB" +"1052361216","1052361471","ZA" +"1052361472","1052361647","BE" +"1052361648","1052361655","GB" +"1052361656","1052361663","DE" +"1052361664","1052361695","BE" +"1052361696","1052361727","CH" +"1052361728","1052361919","IT" +"1052361920","1052361951","ZA" +"1052361952","1052361967","IT" +"1052361968","1052361983","ZA" +"1052361984","1052362239","IT" +"1052362240","1052362751","DK" +"1052362752","1052362783","ES" +"1052362784","1052362815","GB" +"1052362816","1052362879","CH" +"1052362880","1052363039","ES" +"1052363040","1052363071","EU" +"1052363072","1052363135","GB" +"1052363136","1052363263","ES" +"1052363264","1052364543","DE" +"1052364544","1052364671","BE" +"1052364672","1052364687","DE" +"1052364688","1052364695","GB" +"1052364696","1052364703","NL" +"1052364704","1052364799","GB" +"1052364800","1052366207","BE" +"1052366208","1052366271","IE" +"1052366272","1052366335","GB" +"1052366336","1052366655","BE" +"1052366656","1052366719","DE" +"1052366720","1052367871","BE" +"1052367872","1052368895","DK" +"1052368896","1052369023","IE" +"1052369024","1052369039","IT" +"1052369040","1052369055","DE" +"1052369056","1052369087","ZA" +"1052369088","1052369151","IT" +"1052369152","1052369407","IE" +"1052369408","1052369663","HU" +"1052369664","1052369855","CZ" +"1052369856","1052369887","EU" +"1052369888","1052369919","CZ" +"1052369920","1052370175","NO" +"1052370176","1052370431","DK" +"1052370432","1052370559","SE" +"1052370560","1052370623","DE" +"1052370624","1052370687","IT" +"1052370688","1052370943","DK" +"1052370944","1052372255","GB" +"1052372256","1052372287","ZA" +"1052372288","1052372351","FI" +"1052372352","1052374015","GB" +"1052374016","1052375039","CH" +"1052375040","1052375551","DE" +"1052375552","1052375679","EU" +"1052375680","1052375711","DE" +"1052375712","1052375807","FR" +"1052375808","1052376063","DE" +"1052376064","1052376319","EU" +"1052376320","1052376831","DE" +"1052376832","1052377087","ES" +"1052377088","1052377535","DE" +"1052377536","1052377599","NO" +"1052377600","1052377743","FR" +"1052377744","1052377759","NL" +"1052377760","1052377791","ZA" +"1052377792","1052377855","GB" +"1052377856","1052377871","DE" +"1052377872","1052377887","CH" +"1052377888","1052377919","EU" +"1052377920","1052377951","DE" +"1052377952","1052377983","FR" +"1052377984","1052378047","GB" +"1052378048","1052378079","FR" +"1052378080","1052378111","NL" +"1052378112","1052378983","DE" +"1052378984","1052378991","NO" +"1052378992","1052379031","GB" +"1052379032","1052379039","DE" +"1052379040","1052379103","GB" +"1052379104","1052379135","SE" +"1052379136","1052379391","EU" +"1052379392","1052379791","DE" +"1052379792","1052379799","GB" +"1052379800","1052379807","NL" +"1052379808","1052379839","DE" +"1052379840","1052379903","ZA" +"1052379904","1052380063","GB" +"1052380064","1052380127","DE" +"1052380128","1052380159","NL" +"1052380160","1052381183","DE" +"1052381184","1052381439","EU" +"1052381440","1052382623","DE" +"1052382624","1052382655","EU" +"1052382656","1052382719","ES" +"1052382720","1052382975","DE" +"1052382976","1052383999","GB" +"1052384000","1052384255","NL" +"1052384256","1052385279","GB" +"1052385280","1052385535","DE" +"1052385536","1052385615","GB" +"1052385616","1052385631","ZA" +"1052385632","1052385695","GB" +"1052385696","1052385791","FR" +"1052385792","1052388863","GB" +"1052388864","1052389119","NL" +"1052389120","1052390431","GB" +"1052390432","1052390447","ZA" +"1052390448","1052390455","GB" +"1052390456","1052390463","IT" +"1052390464","1052393471","GB" +"1052393472","1052393599","CH" +"1052393600","1052393695","FR" +"1052393696","1052394271","CH" +"1052394272","1052394303","ZA" +"1052394304","1052394367","GB" +"1052394368","1052395263","CH" +"1052395264","1052395679","GB" +"1052395680","1052395743","DE" +"1052395744","1052395775","ES" +"1052395776","1052396031","NL" +"1052396032","1052396543","CH" +"1052396544","1052396607","SE" +"1052396608","1052396671","BE" +"1052396672","1052396799","SE" +"1052396800","1052396863","TR" +"1052396864","1052396927","RO" +"1052396928","1052397439","HU" +"1052397440","1052397567","EU" +"1052397568","1052399039","IT" +"1052399040","1052399103","NO" +"1052399104","1052399903","IT" +"1052399904","1052399919","DE" +"1052399920","1052399927","NL" +"1052399928","1052399935","FR" +"1052399936","1052399999","IT" +"1052400000","1052400127","BE" +"1052400128","1052401151","IT" +"1052401152","1052401279","BE" +"1052401280","1052401311","IT" +"1052401312","1052401343","AT" +"1052401344","1052401407","ZA" +"1052401408","1052401599","BE" +"1052401600","1052401631","GB" +"1052401632","1052401663","RU" +"1052401664","1052402047","FR" +"1052402048","1052402175","NL" +"1052402176","1052402271","FR" +"1052402272","1052402303","IT" +"1052402304","1052402367","GB" +"1052402368","1052403359","FR" +"1052403360","1052403391","DE" +"1052403392","1052403407","IT" +"1052403408","1052403415","GB" +"1052403416","1052403423","NL" +"1052403424","1052403455","RO" +"1052403456","1052403727","FR" +"1052403728","1052403743","NL" +"1052403744","1052403775","FR" +"1052403776","1052403807","ZA" +"1052403808","1052403839","EU" +"1052403840","1052403967","CH" +"1052403968","1052404383","FR" +"1052404384","1052404399","ZA" +"1052404400","1052404447","FR" +"1052404448","1052404479","GB" +"1052404480","1052404767","FR" +"1052404768","1052404783","ZA" +"1052404784","1052404799","GB" +"1052404800","1052404863","FR" +"1052404864","1052404991","GB" +"1052404992","1052405759","FR" +"1052405760","1052407519","AT" +"1052407520","1052407535","FR" +"1052407536","1052407551","SE" +"1052407552","1052407839","AT" +"1052407840","1052407871","ZA" +"1052407872","1052407887","DE" +"1052407888","1052407903","ZA" +"1052407904","1052407935","DE" +"1052407936","1052408159","AT" +"1052408160","1052408383","GB" +"1052408384","1052408447","BE" +"1052408448","1052408511","FR" +"1052408512","1052408575","GB" +"1052408576","1052408831","AT" +"1052408832","1052409855","GB" +"1052409856","1052409863","NL" +"1052409864","1052409871","DE" +"1052409872","1052409951","NL" +"1052409952","1052409983","BE" +"1052409984","1052410047","GB" +"1052410048","1052410111","BE" +"1052410112","1052411135","EU" +"1052411136","1052412327","NL" +"1052412328","1052412335","EU" +"1052412336","1052412343","NL" +"1052412344","1052412351","GB" +"1052412352","1052412415","CH" +"1052412416","1052412671","EU" +"1052412672","1052412831","NL" +"1052412832","1052412863","DE" +"1052412864","1052413951","NL" +"1052413952","1052414335","CZ" +"1052414336","1052414463","EU" +"1052414464","1052414975","IE" +"1052414976","1052415999","BE" +"1052416000","1052416575","DE" +"1052416576","1052416639","ZA" +"1052416640","1052416671","GB" +"1052416672","1052416703","DE" +"1052416704","1052416735","IT" +"1052416736","1052416767","DE" +"1052416768","1052417071","NO" +"1052417072","1052417087","DE" +"1052417088","1052417119","AT" +"1052417120","1052417151","IT" +"1052417152","1052417279","GB" +"1052417280","1052417359","NO" +"1052417360","1052417367","EU" +"1052417368","1052417535","NO" +"1052417536","1052418047","ZA" +"1052418048","1052419583","BE" +"1052419584","1052420031","IT" +"1052420032","1052420063","EU" +"1052420064","1052420095","IT" +"1052420096","1052420735","GB" +"1052420736","1052420767","DE" +"1052420768","1052420783","GB" +"1052420784","1052420799","ZA" +"1052420800","1052420863","DE" +"1052420864","1052422143","GB" +"1052422144","1052422847","ZA" +"1052422848","1052422863","SE" +"1052422864","1052422879","FR" +"1052422880","1052423199","ZA" +"1052423200","1052423231","CH" +"1052423232","1052423295","ZA" +"1052423296","1052423303","EU" +"1052423304","1052423311","CH" +"1052423312","1052423359","EU" +"1052423360","1052423423","NL" +"1052423424","1052423967","ZA" +"1052423968","1052423999","EU" +"1052424000","1052424799","ZA" +"1052424800","1052424815","GB" +"1052424816","1052424823","ES" +"1052424824","1052424831","BE" +"1052424832","1052424959","GB" +"1052424960","1052425151","ZA" +"1052425152","1052425215","BE" +"1052425216","1052426239","ZA" +"1052426240","1052426319","PT" +"1052426320","1052426327","EU" +"1052426328","1052426495","PT" +"1052426496","1052426511","EU" +"1052426512","1052426527","FR" +"1052426528","1052426751","EU" +"1052426752","1052427263","NL" +"1052427264","1052427839","CH" +"1052427840","1052427855","GB" +"1052427856","1052427871","IT" +"1052427872","1052427903","AT" +"1052427904","1052427967","DE" +"1052427968","1052428031","GB" +"1052428032","1052428287","CH" +"1052428288","1052428479","ES" +"1052428480","1052428543","BE" +"1052428544","1052429407","ES" +"1052429408","1052429439","FR" +"1052429440","1052429567","BE" +"1052429568","1052429759","ES" +"1052429760","1052429823","DE" +"1052429824","1052430335","ES" +"1052430336","1052430407","BE" +"1052430408","1052430415","ZA" +"1052430416","1052430431","FR" +"1052430432","1052430463","DE" +"1052430464","1052430527","BE" +"1052430528","1052430591","DE" +"1052430592","1052433407","BE" +"1052433408","1052433719","DK" +"1052433720","1052433727","FR" +"1052433728","1052433919","DK" +"1052433920","1052434431","ZA" +"1052434432","1052434751","GB" +"1052434752","1052434783","NO" +"1052434784","1052435455","GB" +"1052435456","1052435647","NL" +"1052435648","1052435679","EU" +"1052435680","1052436479","NL" +"1052436480","1052437023","DE" +"1052437024","1052437055","ZA" +"1052437056","1052437119","DE" +"1052437120","1052437135","ZA" +"1052437136","1052437151","DE" +"1052437152","1052437183","GB" +"1052437184","1052437247","ZA" +"1052437248","1052437759","DE" +"1052437760","1052438015","CH" +"1052438016","1052438399","BE" +"1052438400","1052438527","EU" +"1052438528","1052439503","AT" +"1052439504","1052439519","EU" +"1052439520","1052439551","AT" +"1052439552","1052440575","FR" +"1052440576","1052441343","DE" +"1052441344","1052441599","EU" +"1052441600","1052442623","GB" +"1052442624","1052443647","DE" +"1052443648","1052446207","EU" +"1052446208","1052446719","DE" +"1052446720","1052447743","CZ" +"1052447744","1052447871","PL" +"1052447872","1052447999","EU" +"1052448000","1052448127","PL" +"1052448128","1052448255","EU" +"1052448256","1052450815","ZA" +"1052450816","1052451839","DE" +"1052451840","1052452159","NO" +"1052452160","1052452223","EU" +"1052452224","1052452351","NO" +"1052452352","1052452831","ES" +"1052452832","1052452847","GB" +"1052452848","1052452863","FR" +"1052452864","1052452991","EU" +"1052452992","1052452999","SK" +"1052453000","1052453119","EU" +"1052453120","1052453375","FR" +"1052453376","1052453887","AT" +"1052453888","1052454911","GB" +"1052454912","1052454943","FR" +"1052454944","1052454959","NL" +"1052454960","1052454975","EU" +"1052454976","1052455359","NL" +"1052455360","1052455423","EU" +"1052455424","1052455935","GB" +"1052455936","1052456447","NL" +"1052456448","1052456959","CH" +"1052456960","1052457983","NL" +"1052457984","1052458367","AT" +"1052458368","1052458431","EU" +"1052458432","1052458495","AT" +"1052458496","1052458847","NL" +"1052458848","1052458863","FR" +"1052458864","1052458871","NL" +"1052458872","1052458879","FR" +"1052458880","1052460031","GB" +"1052460032","1052460127","NO" +"1052460128","1052460223","EU" +"1052460224","1052460287","FR" +"1052460288","1052460543","EU" +"1052460544","1052460799","NO" +"1052460800","1052461055","DE" +"1052461056","1052461295","FR" +"1052461296","1052461311","BE" +"1052461312","1052461951","FR" +"1052461952","1052461967","EU" +"1052461968","1052463103","FR" +"1052463104","1052463615","ES" +"1052463616","1052464639","GB" +"1052464640","1052464927","ES" +"1052464928","1052464959","EU" +"1052464960","1052465087","ES" +"1052465088","1052465151","EU" +"1052465152","1052465375","ZA" +"1052465376","1052465407","EU" +"1052465408","1052465663","ZA" +"1052465664","1052466431","EU" +"1052466432","1052468223","FR" +"1052468224","1052469247","GB" +"1052469248","1052470271","FR" +"1052470272","1052470783","ZA" +"1052470784","1052471007","FR" +"1052471008","1052471039","EU" +"1052471040","1052471295","BE" +"1052471296","1052472511","GB" +"1052472512","1052472575","EU" +"1052472576","1052475231","GB" +"1052475232","1052475239","EU" +"1052475240","1052475255","GB" +"1052475256","1052475263","EU" +"1052475264","1052475391","GB" +"1052475392","1052476383","FR" +"1052476384","1052476415","EU" +"1052476416","1052479487","FR" +"1052479488","1052479743","NL" +"1052479744","1052479999","DE" +"1052480000","1052483583","NL" +"1052483584","1052483999","IT" +"1052484000","1052484031","EU" +"1052484032","1052485279","IT" +"1052485280","1052485311","EU" +"1052485312","1052485631","IT" +"1052485632","1052486655","GB" +"1052486656","1052486911","CH" +"1052486912","1052486975","DE" +"1052486976","1052487039","FR" +"1052487040","1052487167","DE" +"1052487168","1052487423","GB" +"1052487424","1052487679","AT" +"1052487680","1052488703","CH" +"1052488704","1052489727","GB" +"1052489728","1052490239","IE" +"1052490240","1052490751","SE" +"1052490752","1052491679","AT" +"1052491680","1052491687","EU" +"1052491688","1052491775","AT" +"1052491776","1052493567","BE" +"1052493568","1052493695","EU" +"1052493696","1052494335","BE" +"1052494336","1052494591","NL" +"1052494592","1052495439","BE" +"1052495440","1052495487","FR" +"1052495488","1052495551","BE" +"1052495552","1052495583","GB" +"1052495584","1052495871","BE" +"1052495872","1052495879","UA" +"1052495880","1052496127","EU" +"1052496128","1052497407","DE" +"1052497408","1052497663","EU" +"1052497664","1052497919","DE" +"1052497920","1052498431","ES" +"1052498432","1052498495","RO" +"1052498496","1052498943","EU" +"1052498944","1052499455","GB" +"1052499456","1052499967","EU" +"1052499968","1052500191","DK" +"1052500192","1052500207","EU" +"1052500208","1052500319","DK" +"1052500320","1052500479","EU" +"1052500480","1052500991","GB" +"1052500992","1052501023","FI" +"1052501024","1052501031","EU" +"1052501032","1052501039","FI" +"1052501040","1052501119","EU" +"1052501120","1052501247","FI" +"1052501248","1052501503","EU" +"1052501504","1052502015","CH" +"1052502016","1052502783","IE" +"1052502784","1052502815","EU" +"1052502816","1052502847","IE" +"1052502848","1052503039","EU" +"1052503040","1052504319","GB" +"1052504320","1052504351","BY" +"1052504352","1052504383","EU" +"1052504384","1052507583","GB" +"1052507584","1052507647","EU" +"1052507648","1052507775","GB" +"1052507776","1052507903","EU" +"1052507904","1052581087","GB" +"1052581088","1052581103","GE" +"1052581104","1052596447","GB" +"1052596448","1052596463","IT" +"1052596464","1052621951","GB" +"1052621952","1052622015","IE" +"1052622016","1052631935","GB" +"1052631936","1052631999","FR" +"1052632000","1052634943","GB" +"1052634944","1052634951","IE" +"1052634952","1052644095","GB" +"1052644096","1052644351","SE" +"1052644352","1052647167","GB" +"1052647168","1052647423","SE" +"1052647424","1052653823","GB" +"1052653824","1052654079","EU" +"1052654080","1052661759","GB" +"1052661760","1052662271","SE" +"1052662272","1052665343","GB" +"1052665344","1052665599","SE" +"1052665600","1052684575","GB" +"1052684576","1052684607","IT" +"1052684608","1052770303","GB" +"1052770304","1052775711","CH" +"1052775712","1052775727","DE" +"1052775728","1052777503","CH" +"1052777504","1052777535","IT" +"1052777536","1052778495","CH" +"1052778496","1052786687","RU" +"1052786688","1052803071","NL" +"1052803072","1052803327","A2" +"1052803328","1052803583","EU" +"1052803584","1052804607","US" +"1052804608","1052805119","A2" +"1052805120","1052805375","US" +"1052805376","1052805631","A2" +"1052805632","1052805887","US" +"1052805888","1052806655","A2" +"1052806656","1052806911","US" +"1052806912","1052807167","MW" +"1052807168","1052807679","A2" +"1052807680","1052809727","US" +"1052809728","1052810495","DE" +"1052810496","1052810751","US" +"1052810752","1052811263","DE" +"1052811264","1052819455","RU" +"1052819456","1052827647","DE" +"1052827648","1052835839","RU" +"1052835840","1052844031","IR" +"1052844032","1052852223","FR" +"1052852224","1052868607","EG" +"1052868608","1052876799","RS" +"1052876800","1052884991","NG" +"1052884992","1052896351","FR" +"1052896352","1052896352","A1" +"1052896353","1052901375","FR" +"1052901376","1053032447","NL" +"1053032448","1053047367","IT" +"1053047368","1053047375","TR" +"1053047376","1053097983","IT" +"1053097984","1053106175","DE" +"1053106176","1053114367","GB" +"1053114368","1053130751","BE" +"1053130752","1053138943","NL" +"1053138944","1053147135","FI" +"1053147136","1053163519","SK" +"1053163520","1053294591","DK" +"1053294592","1053294847","EU" +"1053294848","1053295103","AT" +"1053295104","1053295391","EU" +"1053295392","1053295423","AT" +"1053295424","1053295455","EU" +"1053295456","1053295471","AT" +"1053295472","1053295615","EU" +"1053295616","1053296639","AT" +"1053296640","1053296927","IT" +"1053296928","1053296991","EU" +"1053296992","1053297027","IT" +"1053297028","1053297039","EU" +"1053297040","1053297055","IT" +"1053297056","1053297071","EU" +"1053297072","1053297143","IT" +"1053297144","1053298175","EU" +"1053298176","1053299199","CH" +"1053299200","1053299711","EU" +"1053299712","1053300031","GB" +"1053300032","1053300095","EU" +"1053300096","1053300103","GB" +"1053300104","1053300111","EU" +"1053300112","1053300735","GB" +"1053300736","1053300991","CH" +"1053300992","1053301055","FR" +"1053301056","1053301071","EU" +"1053301072","1053301135","FR" +"1053301136","1053301167","EU" +"1053301168","1053301279","FR" +"1053301280","1053301287","EU" +"1053301288","1053301295","FR" +"1053301296","1053301303","EU" +"1053301304","1053301359","FR" +"1053301360","1053301367","EU" +"1053301368","1053301503","FR" +"1053301504","1053302031","EU" +"1053302032","1053302055","FR" +"1053302056","1053302063","DE" +"1053302064","1053302159","FR" +"1053302160","1053302175","EU" +"1053302176","1053302191","FR" +"1053302192","1053302303","EU" +"1053302304","1053302335","FR" +"1053302336","1053302367","EU" +"1053302368","1053302375","FR" +"1053302376","1053302383","EU" +"1053302384","1053302687","FR" +"1053302688","1053302703","EU" +"1053302704","1053302711","GB" +"1053302712","1053302783","FR" +"1053302784","1053305087","EU" +"1053305088","1053305951","GR" +"1053305952","1053306111","EU" +"1053306112","1053306879","GR" +"1053306880","1053307903","EU" +"1053307904","1053307943","GB" +"1053307944","1053307955","EU" +"1053307956","1053307967","GB" +"1053307968","1053307983","EU" +"1053307984","1053308543","GB" +"1053308544","1053308671","EU" +"1053308672","1053308687","GB" +"1053308688","1053308767","EU" +"1053308768","1053308831","GB" +"1053308832","1053308839","EU" +"1053308840","1053308863","GB" +"1053308864","1053308927","EU" +"1053308928","1053308991","ZA" +"1053308992","1053309183","EU" +"1053309184","1053309951","ZA" +"1053309952","1053311231","EU" +"1053311232","1053311359","CZ" +"1053311360","1053312255","EU" +"1053312256","1053312511","DK" +"1053312512","1053312767","EU" +"1053312768","1053312815","DK" +"1053312816","1053312831","EU" +"1053312832","1053312871","DK" +"1053312872","1053312879","EU" +"1053312880","1053312911","DK" +"1053312912","1053312927","EU" +"1053312928","1053312959","DK" +"1053312960","1053313023","EU" +"1053313024","1053313471","GB" +"1053313472","1053313479","EU" +"1053313480","1053313799","GB" +"1053313800","1053313823","EU" +"1053313824","1053313831","GB" +"1053313832","1053313919","EU" +"1053313920","1053314047","GB" +"1053314048","1053314063","EU" +"1053314064","1053314079","CZ" +"1053314080","1053315071","EU" +"1053315072","1053317119","GB" +"1053317120","1053317295","ZA" +"1053317296","1053317375","EU" +"1053317376","1053317631","GB" +"1053317632","1053318143","EU" +"1053318144","1053318655","GB" +"1053318656","1053318911","FI" +"1053318912","1053318927","EU" +"1053318928","1053318935","FI" +"1053318936","1053318943","EU" +"1053318944","1053318951","FI" +"1053318952","1053318975","EU" +"1053318976","1053319007","FI" +"1053319008","1053319167","EU" +"1053319168","1053320191","DE" +"1053320192","1053320223","EU" +"1053320224","1053320319","DE" +"1053320320","1053320447","EU" +"1053320448","1053320703","DE" +"1053320704","1053326335","EU" +"1053326336","1053326399","BE" +"1053326400","1053326431","EU" +"1053326432","1053326447","GB" +"1053326448","1053326455","EU" +"1053326456","1053326463","BE" +"1053326464","1053326527","EU" +"1053326528","1053326543","BE" +"1053326544","1053326559","EU" +"1053326560","1053326847","BE" +"1053326848","1053327103","FI" +"1053327104","1053327359","DK" +"1053327360","1053327871","EU" +"1053327872","1053328383","ZA" +"1053328384","1053328639","EU" +"1053328640","1053328863","ZA" +"1053328864","1053328895","EU" +"1053328896","1053329087","ZA" +"1053329088","1053329119","EU" +"1053329120","1053329135","ZA" +"1053329136","1053329143","EU" +"1053329144","1053329151","ZA" +"1053329152","1053329183","EU" +"1053329184","1053329279","ZA" +"1053329280","1053329407","EU" +"1053329408","1053329487","ES" +"1053329488","1053329503","EU" +"1053329504","1053329527","ES" +"1053329528","1053329631","EU" +"1053329632","1053329663","ES" +"1053329664","1053330431","EU" +"1053330432","1053330687","ES" +"1053330688","1053331455","EU" +"1053331456","1053331487","NL" +"1053331488","1053331583","EU" +"1053331584","1053331663","NL" +"1053331664","1053331679","EU" +"1053331680","1053331703","NL" +"1053331704","1053331711","EU" +"1053331712","1053331939","NL" +"1053331940","1053331967","EU" +"1053331968","1053332271","NL" +"1053332272","1053332319","EU" +"1053332320","1053332351","NL" +"1053332352","1053332447","EU" +"1053332448","1053332479","NL" +"1053332480","1053332991","EU" +"1053332992","1053334015","BE" +"1053334016","1053334079","EU" +"1053334080","1053334191","DK" +"1053334192","1053334199","EU" +"1053334200","1053334223","DK" +"1053334224","1053334239","EU" +"1053334240","1053334527","DK" +"1053334528","1053334783","SE" +"1053334784","1053335551","EU" +"1053335552","1053336831","ZA" +"1053336832","1053337087","EU" +"1053337088","1053337119","ZA" +"1053337120","1053337127","EU" +"1053337128","1053337183","ZA" +"1053337184","1053337607","EU" +"1053337608","1053337631","CH" +"1053337632","1053337855","EU" +"1053337856","1053338111","ZA" +"1053338112","1053338623","FI" +"1053338624","1053338943","NO" +"1053338944","1053338975","EU" +"1053338976","1053338983","NO" +"1053338984","1053339135","EU" +"1053339136","1053339423","NO" +"1053339424","1053339455","EU" +"1053339456","1053339519","NO" +"1053339520","1053339591","EU" +"1053339592","1053339599","NO" +"1053339600","1053339615","EU" +"1053339616","1053339623","NO" +"1053339624","1053339631","EU" +"1053339632","1053339647","NO" +"1053339648","1053340159","AT" +"1053340160","1053340415","ZA" +"1053340416","1053340479","EU" +"1053340480","1053340511","NL" +"1053340512","1053340671","EU" +"1053340672","1053341567","GB" +"1053341568","1053341575","EU" +"1053341576","1053341647","GB" +"1053341648","1053341655","EU" +"1053341656","1053341695","GB" +"1053341696","1053343743","EU" +"1053343744","1053344255","FI" +"1053344256","1053345279","EU" +"1053345280","1053345375","PK" +"1053345376","1053345407","EU" +"1053345408","1053345471","PK" +"1053345472","1053347839","EU" +"1053347840","1053348351","NL" +"1053348352","1053348639","EU" +"1053348640","1053348655","PT" +"1053348656","1053349119","EU" +"1053349120","1053349631","NL" +"1053349632","1053349887","EU" +"1053349888","1053349951","IE" +"1053349952","1053350143","EU" +"1053350144","1053350335","IE" +"1053350336","1053350351","EU" +"1053350352","1053350359","IE" +"1053350360","1053350375","EU" +"1053350376","1053350391","IE" +"1053350392","1053350399","EU" +"1053350400","1053350487","BE" +"1053350488","1053350655","EU" +"1053350656","1053350911","BE" +"1053350912","1053351935","EU" +"1053351936","1053352191","IL" +"1053352192","1053353103","EU" +"1053353104","1053353119","IE" +"1053353120","1053353135","EU" +"1053353136","1053353215","IE" +"1053353216","1053353223","GB" +"1053353224","1053353247","IE" +"1053353248","1053353263","EU" +"1053353264","1053353279","IE" +"1053353280","1053353983","EU" +"1053353984","1053354239","IL" +"1053354240","1053354495","EU" +"1053354496","1053354655","IL" +"1053354656","1053354687","EU" +"1053354688","1053354719","IL" +"1053354720","1053354751","EU" +"1053354752","1053354831","IL" +"1053354832","1053354855","EU" +"1053354856","1053354863","IL" +"1053354864","1053354871","EU" +"1053354872","1053354879","IL" +"1053354880","1053354911","EU" +"1053354912","1053355007","IL" +"1053355008","1053360127","EU" +"1053360128","1053364223","ES" +"1053364224","1053368319","CZ" +"1053368320","1053376511","SE" +"1053376512","1053392895","HU" +"1053392896","1053401087","FR" +"1053401088","1053409279","DE" +"1053409280","1053425663","IQ" +"1053425664","1053556735","CH" +"1053556736","1053564927","FI" +"1053564928","1053573119","GB" +"1053573120","1053581311","NL" +"1053581312","1053589503","CH" +"1053589504","1053597695","BG" +"1053597696","1053605887","DE" +"1053605888","1053614079","ES" +"1053614080","1053622271","CZ" +"1053622272","1053630463","IT" +"1053630464","1053638655","GR" +"1053638656","1053655039","BE" +"1053655040","1053663231","UA" +"1053663232","1053671423","RU" +"1053671424","1053687807","LV" +"1053687808","1053702635","DE" +"1053702636","1053702639","GB" +"1053702640","1053753343","DE" +"1053753344","1053818879","NL" +"1053818880","1053819391","DE" +"1053819392","1053819423","EU" +"1053819424","1053819439","DE" +"1053819440","1053819519","EU" +"1053819520","1053819563","DE" +"1053819564","1053819583","EU" +"1053819584","1053819647","DE" +"1053819648","1053820159","EU" +"1053820160","1053820927","DE" +"1053820928","1053821439","EU" +"1053821440","1053821447","GB" +"1053821448","1053821567","EU" +"1053821568","1053821695","GB" +"1053821696","1053824015","EU" +"1053824016","1053824023","DE" +"1053824024","1053824127","EU" +"1053824128","1053824255","NL" +"1053824256","1053825023","EU" +"1053825024","1053825791","ES" +"1053825792","1053825919","GB" +"1053825920","1053826047","ES" +"1053826048","1053826815","EU" +"1053826816","1053827327","DE" +"1053827328","1053827583","BE" +"1053827584","1053829887","EU" +"1053829888","1053830143","DE" +"1053830144","1053831167","EU" +"1053831168","1053831423","DE" +"1053831424","1053834943","EU" +"1053834944","1053834975","DE" +"1053834976","1053835263","EU" +"1053835264","1053835775","DE" +"1053835776","1053837311","EU" +"1053837312","1053837439","FK" +"1053837440","1053837455","GB" +"1053837456","1053837567","EU" +"1053837568","1053837823","GB" +"1053837824","1053838335","FK" +"1053838336","1053838591","DE" +"1053838592","1053840399","EU" +"1053840400","1053840415","DE" +"1053840416","1053840447","EU" +"1053840448","1053840511","DE" +"1053840512","1053843199","EU" +"1053843200","1053843231","DK" +"1053843232","1053843455","GB" +"1053843456","1053843711","EU" +"1053843712","1053843967","DE" +"1053843968","1053844223","GB" +"1053844224","1053844479","DE" +"1053844480","1053844991","EU" +"1053844992","1053845503","DE" +"1053845504","1053845727","EU" +"1053845728","1053845735","DE" +"1053845736","1053846015","EU" +"1053846016","1053846527","DE" +"1053846528","1053846783","EU" +"1053846784","1053847551","DE" +"1053847552","1053849599","GB" +"1053849600","1053850367","DE" +"1053850368","1053851135","EU" +"1053851136","1053851647","DE" +"1053851648","1053851903","EU" +"1053851904","1053851919","FR" +"1053851920","1053852031","EU" +"1053852032","1053852047","IT" +"1053852048","1053852111","EU" +"1053852112","1053852127","GB" +"1053852128","1053852159","DE" +"1053852160","1053853695","EU" +"1053853696","1053859839","GB" +"1053859840","1053860863","DE" +"1053860864","1053862655","EU" +"1053862656","1053862783","DE" +"1053862784","1053862847","EU" +"1053862848","1053862879","DE" +"1053862880","1053863423","EU" +"1053863424","1053864959","DE" +"1053864960","1053865215","EU" +"1053865216","1053865727","DE" +"1053865728","1053865759","US" +"1053865760","1053865983","EU" +"1053865984","1053866239","DE" +"1053866240","1053866495","ES" +"1053866496","1053866799","DE" +"1053866800","1053866807","EU" +"1053866808","1053866823","DE" +"1053866824","1053866831","EU" +"1053866832","1053866847","DE" +"1053866848","1053867519","EU" +"1053867520","1053867775","DE" +"1053867776","1053867975","EU" +"1053867976","1053867983","DE" +"1053867984","1053867991","EU" +"1053867992","1053867999","DE" +"1053868000","1053868007","EU" +"1053868008","1053868015","DE" +"1053868016","1053868031","EU" +"1053868032","1053868447","ES" +"1053868448","1053868455","GB" +"1053868456","1053868799","EU" +"1053868800","1053869567","DE" +"1053869568","1053870079","EU" +"1053870080","1053870335","DE" +"1053870336","1053870591","GB" +"1053870592","1053870847","EU" +"1053870848","1053871359","DE" +"1053871360","1053871615","EU" +"1053871616","1053871871","DE" +"1053871872","1053872383","EU" +"1053872384","1053872447","DE" +"1053872448","1053872895","EU" +"1053872896","1053873663","DE" +"1053873664","1053876223","EU" +"1053876224","1053876479","DE" +"1053876480","1053876735","GB" +"1053876736","1053876991","DE" +"1053876992","1053877247","EU" +"1053877248","1053878271","DE" +"1053878272","1053878783","GB" +"1053878784","1053879047","DE" +"1053879048","1053879055","EU" +"1053879056","1053879071","DE" +"1053879072","1053879167","GB" +"1053879168","1053879295","EU" +"1053879296","1053882111","DE" +"1053882112","1053882367","EU" +"1053882368","1053882879","DE" +"1053882880","1053883391","GB" +"1053883392","1053884415","DE" +"1053884416","1053892607","BH" +"1053892608","1053892619","DE" +"1053892620","1053892623","GB" +"1053892624","1053892943","DE" +"1053892944","1053892959","GB" +"1053892960","1053894495","DE" +"1053894496","1053894527","GB" +"1053894528","1053894719","DE" +"1053894720","1053894735","FR" +"1053894736","1053894743","GB" +"1053894744","1053894751","GE" +"1053894752","1053894783","DE" +"1053894784","1053894815","IL" +"1053894816","1053894831","DE" +"1053894832","1053894847","US" +"1053894848","1053895423","DE" +"1053895424","1053895679","GB" +"1053895680","1053896087","DE" +"1053896088","1053896095","US" +"1053896096","1053896127","GB" +"1053896128","1053896159","DE" +"1053896160","1053896175","US" +"1053896176","1053896447","DE" +"1053896448","1053896703","US" +"1053896704","1053900799","DE" +"1053900800","1053917183","NO" +"1053917184","1053925375","UZ" +"1053925376","1053927159","SE" +"1053927160","1053927167","FI" +"1053927168","1053933567","SE" +"1053933568","1053949951","CZ" +"1053949952","1053984415","FR" +"1053984416","1053984447","US" +"1053984448","1053984895","FR" +"1053984896","1053985023","US" +"1053985024","1054015487","FR" +"1054015488","1054089215","IT" +"1054089216","1054097407","GE" +"1054097408","1054105599","NL" +"1054105600","1054113791","FR" +"1054113792","1054121983","NL" +"1054121984","1054130175","AT" +"1054130176","1054138367","LT" +"1054138368","1054146559","AZ" +"1054146560","1054179327","RU" +"1054179328","1054180351","GB" +"1054180352","1054181120","DE" +"1054181121","1054181375","GB" +"1054181376","1054182399","DE" +"1054182400","1054183423","GB" +"1054183424","1054185216","DE" +"1054185217","1054185471","GB" +"1054185472","1054186240","DE" +"1054186241","1054186495","GB" +"1054186496","1054187264","DE" +"1054187265","1054187519","GB" +"1054187520","1054195711","BG" +"1054195712","1054212095","BE" +"1054212096","1054212519","DE" +"1054212520","1054212527","NL" +"1054212528","1054277631","DE" +"1054277632","1054343167","KW" +"1054343168","1054351359","NL" +"1054351360","1054359551","UA" +"1054359552","1054367743","RO" +"1054367744","1054375935","FI" +"1054375936","1054381055","GB" +"1054381056","1054381567","EG" +"1054381568","1054381583","SG" +"1054381584","1054381599","HK" +"1054381600","1054381615","GB" +"1054381616","1054381631","US" +"1054381632","1054384127","GB" +"1054384128","1054400511","DE" +"1054400512","1054408703","GB" +"1054408704","1054416895","FR" +"1054416896","1054425087","DE" +"1054425088","1054441471","GR" +"1054441472","1054449663","AZ" +"1054449664","1054457855","RU" +"1054457856","1054474239","RO" +"1054474240","1054539775","AT" +"1054539776","1054605311","IL" +"1054605312","1054613503","DE" +"1054613504","1054621695","RU" +"1054621696","1054629887","IT" +"1054629888","1054638079","IR" +"1054638080","1054646271","CH" +"1054646272","1054654463","SE" +"1054654464","1054662655","MK" +"1054662656","1054670847","FI" +"1054670848","1054671103","GB" +"1054671104","1054671167","EU" +"1054671168","1054671231","IE" +"1054671232","1054671371","EU" +"1054671372","1054671375","IE" +"1054671376","1054671415","EU" +"1054671416","1054671423","IE" +"1054671424","1054671431","EU" +"1054671432","1054671439","IE" +"1054671440","1054672159","EU" +"1054672160","1054672175","IE" +"1054672176","1054672255","EU" +"1054672256","1054672287","IE" +"1054672288","1054672319","EU" +"1054672320","1054672335","US" +"1054672336","1054672367","IE" +"1054672368","1054672383","EU" +"1054672384","1054672447","IE" +"1054672448","1054672719","EU" +"1054672720","1054672727","IE" +"1054672728","1054672743","EU" +"1054672744","1054672767","IE" +"1054672768","1054672775","EU" +"1054672776","1054672783","IE" +"1054672784","1054672791","EU" +"1054672792","1054672807","IE" +"1054672808","1054673663","EU" +"1054673664","1054673727","IE" +"1054673728","1054673855","EU" +"1054673856","1054673919","IE" +"1054673920","1054673951","EU" +"1054673952","1054674047","IE" +"1054674048","1054674079","EU" +"1054674080","1054674111","IE" +"1054674112","1054674455","EU" +"1054674456","1054674471","IE" +"1054674472","1054674479","EU" +"1054674480","1054674495","IE" +"1054674496","1054674503","EU" +"1054674504","1054674511","IE" +"1054674512","1054674519","EU" +"1054674520","1054674527","GB" +"1054674528","1054674687","EU" +"1054674688","1054675199","IE" +"1054675200","1054675455","EU" +"1054675456","1054675711","IE" +"1054675712","1054675967","EU" +"1054675968","1054676223","US" +"1054676224","1054679039","EU" +"1054679040","1054687231","UA" +"1054687232","1054703615","MD" +"1054703616","1054711807","BG" +"1054711808","1054719999","IT" +"1054720000","1054867455","NL" +"1054867456","1054943231","DE" +"1054943232","1054943487","PL" +"1054943488","1054948253","DE" +"1054948254","1054948254","EU" +"1054948255","1054949807","DE" +"1054949808","1054949815","ES" +"1054949816","1054969031","DE" +"1054969032","1054969039","AT" +"1054969040","1054973951","DE" +"1054973952","1054974207","EU" +"1054974208","1054978815","DE" +"1054978816","1054979071","FR" +"1054979072","1055129599","DE" +"1055129600","1055187027","CY" +"1055187028","1055194623","GR" +"1055194624","1055195135","CY" +"1055195136","1055196159","EU" +"1055196160","1055197823","CH" +"1055197824","1055197919","EU" +"1055197920","1055198463","CH" +"1055198464","1055198975","EU" +"1055198976","1055199103","CH" +"1055199104","1055199359","EU" +"1055199360","1055199375","CH" +"1055199376","1055199463","EU" +"1055199464","1055199487","CH" +"1055199488","1055200415","EU" +"1055200416","1055200423","PT" +"1055200424","1055201023","EU" +"1055201024","1055201279","US" +"1055201280","1055203327","EU" +"1055203328","1055203343","CZ" +"1055203344","1055203839","EU" +"1055203840","1055204095","CZ" +"1055204096","1055204863","EU" +"1055204864","1055205119","CZ" +"1055205120","1055205631","EU" +"1055205632","1055205887","CZ" +"1055205888","1055206655","EU" +"1055206656","1055206911","CZ" +"1055206912","1055207167","EU" +"1055207168","1055207423","CZ" +"1055207424","1055207679","EU" +"1055207680","1055209215","CZ" +"1055209216","1055209727","EU" +"1055209728","1055210239","CZ" +"1055210240","1055211263","EU" +"1055211264","1055211519","CZ" +"1055211520","1055212043","EU" +"1055212044","1055212131","PT" +"1055212132","1055212175","EU" +"1055212176","1055212179","PT" +"1055212180","1055212183","EU" +"1055212184","1055212247","PT" +"1055212248","1055212351","EU" +"1055212352","1055212415","PT" +"1055212416","1055213263","EU" +"1055213264","1055213307","PT" +"1055213308","1055213311","EU" +"1055213312","1055213319","PT" +"1055213320","1055213327","EU" +"1055213328","1055213359","PT" +"1055213360","1055213367","EU" +"1055213368","1055213455","PT" +"1055213456","1055213471","EU" +"1055213472","1055213567","PT" +"1055213568","1055214079","EU" +"1055214080","1055214239","PT" +"1055214240","1055214271","EU" +"1055214272","1055214847","PT" +"1055214848","1055215359","EU" +"1055215360","1055215999","PT" +"1055216000","1055216031","EU" +"1055216032","1055216383","PT" +"1055216384","1055216895","EU" +"1055216896","1055217663","PT" +"1055217664","1055218207","EU" +"1055218208","1055218239","PT" +"1055218240","1055218271","EU" +"1055218272","1055218299","PT" +"1055218300","1055218351","EU" +"1055218352","1055218383","PT" +"1055218384","1055218391","EU" +"1055218392","1055218399","PT" +"1055218400","1055218431","EU" +"1055218432","1055218447","PT" +"1055218448","1055218463","EU" +"1055218464","1055218471","PT" +"1055218472","1055218479","EU" +"1055218480","1055218687","PT" +"1055218688","1055220223","EU" +"1055220224","1055220287","NL" +"1055220288","1055220351","EU" +"1055220352","1055220399","NL" +"1055220400","1055221503","EU" +"1055221504","1055221631","BE" +"1055221632","1055223551","EU" +"1055223552","1055223807","NL" +"1055223808","1055223903","EU" +"1055223904","1055223999","LU" +"1055224000","1055224063","EU" +"1055224064","1055224463","LU" +"1055224464","1055224575","EU" +"1055224576","1055224607","LU" +"1055224608","1055224831","EU" +"1055224832","1055224911","LU" +"1055224912","1055226111","EU" +"1055226112","1055226175","ES" +"1055226176","1055226191","EU" +"1055226192","1055226207","ES" +"1055226208","1055226239","EU" +"1055226240","1055226255","ES" +"1055226256","1055226263","EU" +"1055226264","1055226271","ES" +"1055226272","1055226367","EU" +"1055226368","1055226399","ES" +"1055226400","1055227639","EU" +"1055227640","1055227647","PT" +"1055227648","1055227903","EU" +"1055227904","1055228159","TR" +"1055228160","1055228927","EU" +"1055228928","1055229183","TR" +"1055229184","1055231999","EU" +"1055232000","1055232255","NL" +"1055232256","1055232511","EU" +"1055232512","1055233023","NL" +"1055233024","1055234063","EU" +"1055234064","1055234079","NL" +"1055234080","1055234127","US" +"1055234128","1055241983","EU" +"1055241984","1055242239","GR" +"1055242240","1055252735","EU" +"1055252736","1055252991","ES" +"1055252992","1055253055","EU" +"1055253056","1055253087","ES" +"1055253088","1055256447","EU" +"1055256448","1055256463","ES" +"1055256464","1055326207","EU" +"1055326208","1055334399","RU" +"1055334400","1055342591","IE" +"1055342592","1055358975","RO" +"1055358976","1055367167","GB" +"1055367168","1055375359","RU" +"1055375360","1055391743","OM" +"1055391744","1055457279","GB" +"1055457280","1055465471","BE" +"1055465472","1055473663","FR" +"1055473664","1055490047","GB" +"1055490048","1055522815","PL" +"1055522816","1055588351","NL" +"1055588352","1055653887","BE" +"1055653888","1055784959","FI" +"1055784960","1055850495","NL" +"1055850496","1055916031","GB" +"1055916032","1055924223","RS" +"1055924224","1055932415","LY" +"1055932416","1055940607","FI" +"1055940608","1055948799","EG" +"1055948800","1055956991","DE" +"1055956992","1055958191","CZ" +"1055958192","1055958207","GB" +"1055958208","1055965183","CZ" +"1055965184","1055973375","CH" +"1055973376","1055981567","FR" +"1055981568","1055989759","IT" +"1055989760","1055992310","DE" +"1055992311","1055992318","CH" +"1055992319","1055997951","DE" +"1055997952","1056014335","FR" +"1056014336","1056022527","EG" +"1056022528","1056030719","GB" +"1056030720","1056047103","FI" +"1056047104","1056161023","DK" +"1056161024","1056161279","US" +"1056161280","1056178175","DK" +"1056178176","1056194559","UA" +"1056194560","1056210943","FR" +"1056210944","1056219135","PL" +"1056219136","1056227327","GB" +"1056227328","1056243711","TR" +"1056243712","1056244255","CH" +"1056244256","1056244287","FR" +"1056244288","1056244335","MC" +"1056244336","1056244367","FR" +"1056244368","1056244415","CH" +"1056244416","1056244479","MC" +"1056244480","1056251903","CH" +"1056251904","1056260095","RU" +"1056260096","1056276479","CZ" +"1056276480","1056286511","DE" +"1056286512","1056286519","A2" +"1056286520","1056286591","DE" +"1056286592","1056286655","A2" +"1056286656","1056374783","DE" +"1056374784","1056440319","SE" +"1056440320","1056473087","TR" +"1056473088","1056505855","FI" +"1056505856","1056507015","PT" +"1056507016","1056507023","ES" +"1056507024","1056514047","PT" +"1056514048","1056522239","IT" +"1056522240","1056538623","AT" +"1056538624","1056546815","RU" +"1056546816","1056555007","NO" +"1056555008","1056571391","GB" +"1056571392","1056669695","NL" +"1056669696","1056702463","MA" +"1056702464","1056874559","GB" +"1056874560","1056874567","IE" +"1056874568","1056874599","GB" +"1056874600","1056874607","IE" +"1056874608","1056874639","GB" +"1056874640","1056874647","IE" +"1056874648","1056874655","GB" +"1056874656","1056874679","IE" +"1056874680","1056874751","GB" +"1056874752","1056875007","IE" +"1056875008","1056875071","GB" +"1056875072","1056875103","IE" +"1056875104","1056875111","GB" +"1056875112","1056875135","IE" +"1056875136","1056875151","GB" +"1056875152","1056875167","IE" +"1056875168","1056875263","GB" +"1056875264","1056875311","IE" +"1056875312","1056875615","GB" +"1056875616","1056875623","IE" +"1056875624","1056875639","GB" +"1056875640","1056875671","IE" +"1056875672","1056876031","GB" +"1056876032","1056876047","IE" +"1056876048","1056964607","GB" +"1056964608","1061227007","US" +"1061227008","1061227263","HT" +"1061227264","1061227774","BO" +"1061227775","1061518015","US" +"1061518016","1061518047","A2" +"1061518048","1061558271","US" +"1061558272","1061559295","PK" +"1061559296","1061588735","US" +"1061588736","1061588991","GU" +"1061588992","1061633567","US" +"1061633568","1061633575","CA" +"1061633576","1061776479","US" +"1061776480","1061776639","CA" +"1061776640","1061847711","US" +"1061847712","1061847743","FR" +"1061847744","1061853695","US" +"1061853696","1061854207","GB" +"1061854208","1061939711","US" +"1061939712","1061940223","JM" +"1061940224","1062069247","US" +"1062069248","1062070271","PR" +"1062070272","1062219519","US" +"1062219520","1062219775","IN" +"1062219776","1062222975","US" +"1062222976","1062223039","PH" +"1062223040","1062244311","US" +"1062244312","1062244319","PH" +"1062244320","1062250495","US" +"1062250496","1062251519","UM" +"1062251520","1062262783","US" +"1062262784","1062263039","PH" +"1062263040","1062378767","US" +"1062378768","1062378783","CA" +"1062378784","1062429695","US" +"1062429696","1062430207","PR" +"1062430208","1062473731","US" +"1062473732","1062473732","IN" +"1062473733","1062475935","US" +"1062475936","1062475951","GB" +"1062475952","1062486271","US" +"1062486272","1062486527","MX" +"1062486528","1062497791","US" +"1062497792","1062498303","FM" +"1062498304","1062530047","US" +"1062530048","1062531071","EC" +"1062531072","1062545919","US" +"1062545920","1062546431","BM" +"1062546432","1062597375","US" +"1062597376","1062597631","PR" +"1062597632","1062608031","US" +"1062608032","1062608039","CA" +"1062608040","1062636287","US" +"1062636288","1062636351","GB" +"1062636352","1062725103","US" +"1062725104","1062725111","IL" +"1062725112","1062871551","US" +"1062871552","1062872319","PR" +"1062872320","1063305727","US" +"1063305728","1063305983","CA" +"1063305984","1063390207","US" +"1063390208","1063390463","PR" +"1063390464","1063497863","US" +"1063497864","1063497871","CA" +"1063497872","1063504191","US" +"1063504192","1063504255","MX" +"1063504256","1063560687","US" +"1063560688","1063560703","CA" +"1063560704","1063567359","US" +"1063567360","1063568895","A2" +"1063568896","1063569151","TZ" +"1063569152","1063573679","A2" +"1063573680","1063573695","VN" +"1063573696","1063575551","A2" +"1063575552","1063579999","US" +"1063580000","1063580015","CA" +"1063580016","1063587631","US" +"1063587632","1063587647","CA" +"1063587648","1063598847","US" +"1063598848","1063598863","CA" +"1063598864","1063690239","US" +"1063690240","1063690495","PR" +"1063690496","1063727615","US" +"1063727616","1063728127","GU" +"1063728128","1063747583","US" +"1063747584","1063747839","A2" +"1063747840","1063748095","UG" +"1063748096","1063748607","A2" +"1063748608","1063749119","GH" +"1063749120","1063749631","US" +"1063749632","1063749887","LR" +"1063749888","1063750143","SA" +"1063750144","1063750399","NG" +"1063750400","1063750463","SA" +"1063750464","1063750527","NG" +"1063750528","1063750543","US" +"1063750544","1063750559","A2" +"1063750560","1063750655","US" +"1063750656","1063751679","NG" +"1063751680","1063752959","US" +"1063752960","1063753215","A2" +"1063753216","1063895039","US" +"1063895040","1063899135","KR" +"1063899136","1064064127","US" +"1064064128","1064064191","CA" +"1064064192","1064124927","US" +"1064124928","1064125695","EC" +"1064125696","1064125951","US" +"1064125952","1064126207","PE" +"1064126208","1064126719","US" +"1064126720","1064126975","EC" +"1064126976","1064127487","US" +"1064127488","1064127999","EC" +"1064128000","1064170751","US" +"1064170752","1064170799","A2" +"1064170800","1064170807","NG" +"1064170808","1064170823","IN" +"1064170824","1064170831","A2" +"1064170832","1064170871","IN" +"1064170872","1064170879","A2" +"1064170880","1064170911","DE" +"1064170912","1064170919","A2" +"1064170920","1064170927","NG" +"1064170928","1064170943","DE" +"1064170944","1064170991","A2" +"1064170992","1064170999","NG" +"1064171000","1064171007","A2" +"1064171008","1064171135","NG" +"1064171136","1064171263","IN" +"1064171264","1064171551","NG" +"1064171552","1064171559","TZ" +"1064171560","1064171575","A2" +"1064171576","1064171583","PK" +"1064171584","1064171607","A2" +"1064171608","1064171615","PK" +"1064171616","1064171631","GH" +"1064171632","1064171647","A2" +"1064171648","1064171775","NG" +"1064171776","1064171799","A2" +"1064171800","1064171815","IN" +"1064171816","1064171823","A2" +"1064171824","1064171839","IN" +"1064171840","1064171855","A2" +"1064171856","1064171871","TZ" +"1064171872","1064171903","A2" +"1064171904","1064171911","NG" +"1064171912","1064171919","A2" +"1064171920","1064171927","PK" +"1064171928","1064171935","A2" +"1064171936","1064171967","NG" +"1064171968","1064172031","A2" +"1064172032","1064204287","US" +"1064204288","1064205311","MX" +"1064205312","1064221951","US" +"1064221952","1064222207","MX" +"1064222208","1064231023","US" +"1064231024","1064231039","CA" +"1064231040","1064306087","US" +"1064306088","1064306095","AU" +"1064306096","1064402687","US" +"1064402688","1064402751","CA" +"1064402752","1064445183","US" +"1064445184","1064445439","PK" +"1064445440","1064650751","US" +"1064650752","1064651775","EC" +"1064651776","1064769023","US" +"1064769024","1064769535","A2" +"1064769536","1064778343","US" +"1064778344","1064778351","CA" +"1064778352","1064973055","US" +"1064973056","1064973183","AU" +"1064973184","1065049471","US" +"1065049472","1065049535","CA" +"1065049536","1065389439","US" +"1065389440","1065389455","MY" +"1065389456","1065390591","US" +"1065390592","1065390599","MY" +"1065390600","1065390655","US" +"1065390656","1065390687","MX" +"1065390688","1065517087","US" +"1065517088","1065517119","A2" +"1065517120","1065519359","US" +"1065519360","1065519487","CA" +"1065519488","1065520895","US" +"1065520896","1065520911","CA" +"1065520912","1065520927","IT" +"1065520928","1065530879","US" +"1065530880","1065533439","TC" +"1065533440","1065537535","US" +"1065537536","1065541631","TC" +"1065541632","1065547775","US" +"1065547776","1065548031","FK" +"1065548032","1065548543","TC" +"1065548544","1065583423","US" +"1065583424","1065583439","HK" +"1065583440","1065611263","US" +"1065611264","1065615359","PR" +"1065615360","1065811967","US" +"1065811968","1065820159","CA" +"1065820160","1065873407","US" +"1065873408","1065877503","PR" +"1065877504","1065906175","US" +"1065906176","1065908223","KY" +"1065908224","1065926815","US" +"1065926816","1065926831","CA" +"1065926832","1066311679","US" +"1066311680","1066315775","CA" +"1066315776","1066332159","US" +"1066332160","1066336255","CA" +"1066336256","1066352639","US" +"1066352640","1066355711","JM" +"1066355712","1066355967","BB" +"1066355968","1066369023","JM" +"1066369024","1066606295","US" +"1066606296","1066606303","GB" +"1066606304","1066830311","US" +"1066830312","1066830319","SG" +"1066830320","1066830991","US" +"1066830992","1066830999","JP" +"1066831000","1066831071","US" +"1066831072","1066831087","JP" +"1066831088","1067237887","US" +"1067237888","1067238399","JP" +"1067238400","1067473471","US" +"1067473472","1067473535","CA" +"1067473536","1067474751","US" +"1067474752","1067474767","NL" +"1067474768","1067481855","US" +"1067481856","1067482111","CA" +"1067482112","1067494847","US" +"1067494848","1067494879","CA" +"1067494880","1067503615","US" +"1067503616","1067503743","CA" +"1067503744","1067532287","US" +"1067532288","1067532799","HN" +"1067532800","1067537959","US" +"1067537960","1067537967","GB" +"1067537968","1067552511","US" +"1067552512","1067552767","PR" +"1067552768","1067573247","US" +"1067573248","1067573255","SG" +"1067573256","1067575295","US" +"1067575296","1067577343","HN" +"1067577344","1067590111","US" +"1067590112","1067590143","CA" +"1067590144","1067593983","US" +"1067593984","1067594239","PR" +"1067594240","1067617791","US" +"1067617792","1067618047","CN" +"1067618048","1067621375","US" +"1067621376","1067621631","PR" +"1067621632","1067625967","US" +"1067625968","1067625983","CH" +"1067625984","1067653255","US" +"1067653256","1067653263","PR" +"1067653264","1067693055","US" +"1067693056","1067693567","CO" +"1067693568","1067700735","US" +"1067700736","1067701247","AN" +"1067701248","1067726847","US" +"1067726848","1067727359","EC" +"1067727360","1067736831","US" +"1067736832","1067737087","PR" +"1067737088","1067740159","US" +"1067740160","1067741183","HN" +"1067741184","1067762815","US" +"1067762816","1067762831","CA" +"1067762832","1067780607","US" +"1067780608","1067780863","GB" +"1067780864","1067822863","US" +"1067822864","1067822871","CA" +"1067822872","1067824895","US" +"1067824896","1067825151","PR" +"1067825152","1067826239","US" +"1067826240","1067826247","CA" +"1067826248","1067838463","US" +"1067838464","1067838591","IT" +"1067838592","1067856575","US" +"1067856576","1067856607","CO" +"1067856608","1067863807","US" +"1067863808","1067863935","CA" +"1067863936","1067908295","US" +"1067908296","1067908303","CH" +"1067908304","1067909023","US" +"1067909024","1067909039","SG" +"1067909040","1067914655","US" +"1067914656","1067914751","CA" +"1067914752","1067918879","US" +"1067918880","1067918887","NL" +"1067918888","1067923231","US" +"1067923232","1067923239","CA" +"1067923240","1067934911","US" +"1067934912","1067934927","CN" +"1067934928","1067954751","US" +"1067954752","1067954783","DK" +"1067954784","1067977895","US" +"1067977896","1067977903","CA" +"1067977904","1067978751","US" +"1067978752","1067979007","PR" +"1067979008","1067989247","US" +"1067989248","1067989503","EC" +"1067989504","1067998463","US" +"1067998464","1067998719","CO" +"1067998720","1068004351","US" +"1068004352","1068004607","CA" +"1068004608","1068017663","US" +"1068017664","1068018175","YE" +"1068018176","1068070887","US" +"1068070888","1068070895","CA" +"1068070896","1068083455","US" +"1068083456","1068083711","PR" +"1068083712","1068096415","US" +"1068096416","1068096447","CA" +"1068096448","1068119407","US" +"1068119408","1068119423","DE" +"1068119424","1068167439","US" +"1068167440","1068167447","GB" +"1068167448","1068175871","US" +"1068175872","1068176383","YE" +"1068176384","1068198879","US" +"1068198880","1068198911","IN" +"1068198912","1068199935","US" +"1068199936","1068204031","CA" +"1068204032","1068230655","US" +"1068230656","1068230911","CO" +"1068230912","1068284735","US" +"1068284736","1068284743","CA" +"1068284744","1068284751","US" +"1068284752","1068284759","DK" +"1068284760","1068326911","US" +"1068326912","1068327167","EC" +"1068327168","1068346367","US" +"1068346368","1068346879","YE" +"1068346880","1068362863","US" +"1068362864","1068362879","GB" +"1068362880","1068419071","US" +"1068419072","1068421119","CO" +"1068421120","1068425983","US" +"1068425984","1068426239","EC" +"1068426240","1068462079","US" +"1068462080","1068462335","PR" +"1068462336","1068473599","US" +"1068473600","1068473855","BB" +"1068473856","1068480159","US" +"1068480160","1068480191","IN" +"1068480192","1068480431","US" +"1068480432","1068480447","SE" +"1068480448","1068481023","US" +"1068481024","1068481535","PR" +"1068481536","1068491263","US" +"1068491264","1068491519","HN" +"1068491520","1069622866","US" +"1069622867","1069622867","MX" +"1069622868","1070652215","US" +"1070652216","1070652216","A1" +"1070652217","1070701055","US" +"1070701056","1070701311","DO" +"1070701312","1070701567","HT" +"1070701568","1070729471","US" +"1070729472","1070729727","CA" +"1070729728","1070805559","US" +"1070805560","1070805567","VG" +"1070805568","1071100159","US" +"1071100160","1071100415","PR" +"1071100416","1071100927","US" +"1071100928","1071101951","PR" +"1071101952","1071134719","US" +"1071134720","1071136767","HK" +"1071136768","1071141887","US" +"1071141888","1071142911","HK" +"1071142912","1071144959","US" +"1071144960","1071151103","GB" +"1071151104","1071153151","LB" +"1071153152","1071157247","US" +"1071157248","1071158271","SG" +"1071158272","1071159295","US" +"1071159296","1071160319","SG" +"1071160320","1071162367","US" +"1071162368","1071163391","KR" +"1071163392","1071165439","HK" +"1071165440","1071166463","US" +"1071166464","1071167487","A2" +"1071167488","1071169535","US" +"1071169536","1071171583","TW" +"1071171584","1071196159","US" +"1071196160","1071198207","HK" +"1071198208","1071199231","JP" +"1071199232","1071201279","US" +"1071201280","1071202303","TH" +"1071202304","1071204351","US" +"1071204352","1071205375","HK" +"1071205376","1071206399","US" +"1071206400","1071208447","HK" +"1071208448","1071210495","TW" +"1071210496","1071216639","US" +"1071216640","1071217663","AU" +"1071217664","1071227903","US" +"1071227904","1071228927","A2" +"1071228928","1071251711","US" +"1071251712","1071252479","HK" +"1071252480","1071254783","US" +"1071254784","1071255039","GB" +"1071255040","1071255295","US" +"1071255296","1071255551","DE" +"1071255552","1071256319","US" +"1071256320","1071256575","HK" +"1071256576","1071258879","US" +"1071258880","1071259135","HK" +"1071259136","1071260159","US" +"1071260160","1071260671","GB" +"1071260672","1071260927","US" +"1071260928","1071261695","IT" +"1071261696","1071264767","US" +"1071264768","1071265791","GB" +"1071265792","1071267071","US" +"1071267072","1071267839","HK" +"1071267840","1071268095","US" +"1071268096","1071268863","NL" +"1071268864","1071270655","US" +"1071270656","1071270911","AP" +"1071270912","1071271167","US" +"1071271168","1071271263","AP" +"1071271264","1071271279","US" +"1071271280","1071271359","AP" +"1071271360","1071271679","US" +"1071271680","1071271935","TW" +"1071271936","1071272191","US" +"1071272192","1071272447","SE" +"1071272448","1071274239","US" +"1071274240","1071274495","FR" +"1071274496","1071280895","US" +"1071280896","1071281151","HK" +"1071281152","1071281407","US" +"1071281408","1071281663","AU" +"1071281664","1071282943","US" +"1071282944","1071283199","PH" +"1071283200","1071283967","US" +"1071283968","1071284223","A2" +"1071284224","1071286527","US" +"1071286528","1071287295","LB" +"1071287296","1071287551","US" +"1071287552","1071287807","A2" +"1071287808","1071288063","US" +"1071288064","1071288319","FR" +"1071288320","1071288575","US" +"1071288576","1071288831","HK" +"1071288832","1071289087","US" +"1071289088","1071289343","JP" +"1071289344","1071289599","US" +"1071289600","1071289855","KR" +"1071289856","1071290111","US" +"1071290112","1071290367","KW" +"1071290368","1071291647","US" +"1071291648","1071291903","AU" +"1071291904","1071292159","US" +"1071292160","1071292415","HK" +"1071292416","1071293183","US" +"1071293184","1071293439","SG" +"1071293440","1071293695","US" +"1071293696","1071293951","SG" +"1071293952","1071294207","US" +"1071294208","1071294463","MY" +"1071294464","1071294719","US" +"1071294720","1071294975","A2" +"1071294976","1071295231","US" +"1071295232","1071295487","TH" +"1071295488","1071295743","US" +"1071295744","1071295999","GR" +"1071296000","1071296255","US" +"1071296256","1071296511","HK" +"1071296512","1071296767","US" +"1071296768","1071297023","AE" +"1071297024","1071297791","US" +"1071297792","1071298047","IN" +"1071298048","1071298303","US" +"1071298304","1071298559","JP" +"1071298560","1071298815","US" +"1071298816","1071299071","VN" +"1071299072","1071299327","US" +"1071299328","1071299583","VN" +"1071299584","1071299839","US" +"1071299840","1071300607","FR" +"1071300608","1071301119","US" +"1071301120","1071301631","FR" +"1071301632","1071301887","US" +"1071301888","1071302143","VN" +"1071302144","1071306495","US" +"1071306496","1071306751","HK" +"1071306752","1071309407","US" +"1071309408","1071309439","HK" +"1071309440","1071309471","US" +"1071309472","1071309503","HK" +"1071309504","1071309695","US" +"1071309696","1071309727","HK" +"1071309728","1071310079","US" +"1071310080","1071310335","SG" +"1071310336","1071313919","US" +"1071313920","1071314175","TW" +"1071314176","1071314687","US" +"1071314688","1071314943","TW" +"1071314944","1071315199","US" +"1071315200","1071315455","SG" +"1071315456","1071315711","US" +"1071315712","1071315967","JP" +"1071315968","1071318783","US" +"1071318784","1071319039","IN" +"1071319040","1071321087","US" +"1071321088","1071322111","HK" +"1071322112","1071362079","US" +"1071362080","1071362111","HK" +"1071362112","1071362207","US" +"1071362208","1071362239","HK" +"1071362240","1071382527","US" +"1071382528","1071384575","HK" +"1071384576","1071415295","US" +"1071415296","1071417343","TW" +"1071417344","1071446015","US" +"1071446016","1071448063","NL" +"1071448064","1071468543","US" +"1071468544","1071470591","TW" +"1071470592","1071482879","US" +"1071482880","1071483119","HK" +"1071483120","1071483135","US" +"1071483136","1071484927","HK" +"1071484928","1071486975","US" +"1071486976","1071487551","HK" +"1071487552","1071487615","JP" +"1071487616","1071487647","MY" +"1071487648","1071487679","HK" +"1071487680","1071487711","SG" +"1071487712","1071489023","HK" +"1071489024","1071517695","US" +"1071517696","1071519743","HK" +"1071519744","1071579391","US" +"1071579392","1071579647","CA" +"1071579648","1071599105","US" +"1071599106","1071599134","PH" +"1071599135","1071599300","US" +"1071599301","1071599313","PH" +"1071599314","1071599392","US" +"1071599393","1071599415","PH" +"1071599416","1071599477","US" +"1071599478","1071599490","PH" +"1071599491","1071954279","US" +"1071954280","1071954287","FR" +"1071954288","1071954375","US" +"1071954376","1071954383","NE" +"1071954384","1071985631","US" +"1071985632","1071985663","ML" +"1071985664","1072157631","US" +"1072157632","1072157663","GE" +"1072157664","1072157695","RO" +"1072157696","1072228863","US" +"1072228864","1072229375","CA" +"1072229376","1072360703","US" +"1072360704","1072360959","HK" +"1072360960","1072366599","US" +"1072366600","1072366607","CA" +"1072366608","1072512951","US" +"1072512952","1072512959","CA" +"1072512960","1072619023","US" +"1072619024","1072619039","CA" +"1072619040","1072697639","US" +"1072697640","1072697647","IL" +"1072697648","1072707327","US" +"1072707328","1072707583","IN" +"1072707584","1072710327","US" +"1072710328","1072710335","DE" +"1072710336","1072711479","US" +"1072711480","1072711487","DE" +"1072711488","1072711519","US" +"1072711520","1072711535","DE" +"1072711536","1072712479","US" +"1072712480","1072712495","IL" +"1072712496","1072714519","US" +"1072714520","1072714527","DE" +"1072714528","1072715943","US" +"1072715944","1072715951","IL" +"1072715952","1072716671","US" +"1072716672","1072716703","IL" +"1072716704","1072718031","US" +"1072718032","1072718039","DE" +"1072718040","1072725311","US" +"1072725312","1072725343","DE" +"1072725344","1072727039","US" +"1072727040","1072727047","JM" +"1072727048","1072727215","US" +"1072727216","1072727223","JM" +"1072727224","1072727551","US" +"1072727552","1072727567","DE" +"1072727568","1072774335","US" +"1072774336","1072774367","JP" +"1072774368","1072774463","US" +"1072774464","1072774479","JP" +"1072774480","1072777631","US" +"1072777632","1072777647","TW" +"1072777648","1072785415","US" +"1072785416","1072785423","DK" +"1072785424","1072785439","US" +"1072785440","1072785471","DK" +"1072785472","1072790015","US" +"1072790016","1072790031","JP" +"1072790032","1072922623","US" +"1072922624","1072922879","CA" +"1072922880","1072923135","US" +"1072923136","1072923391","CA" +"1072923392","1072923903","US" +"1072923904","1072924159","CA" +"1072924160","1072924671","HT" +"1072924672","1072925183","US" +"1072925184","1072925695","GB" +"1072925696","1072926207","CA" +"1072926208","1072926471","US" +"1072926472","1072926527","CA" +"1072926528","1072926591","US" +"1072926592","1072926719","CA" +"1072926720","1072926975","PH" +"1072926976","1072927487","CA" +"1072927488","1072927743","US" +"1072927744","1072928047","CA" +"1072928048","1072928063","IE" +"1072928064","1072928095","US" +"1072928096","1072928127","CA" +"1072928128","1072928255","US" +"1072928256","1072928263","CA" +"1072928264","1072928287","US" +"1072928288","1072928319","CA" +"1072928320","1072928383","GA" +"1072928384","1072928447","US" +"1072928448","1072929535","CA" +"1072929536","1072929791","US" +"1072929792","1072930047","CA" +"1072930048","1072930303","US" +"1072930304","1072931071","CA" +"1072931072","1072931199","US" +"1072931200","1072931583","CA" +"1072931584","1072931839","SY" +"1072931840","1072932607","CA" +"1072932608","1072932863","NG" +"1072932864","1072933887","US" +"1072933888","1072934399","CA" +"1072934400","1072934655","US" +"1072934656","1072934783","CA" +"1072934784","1072934847","AU" +"1072934848","1072934879","CA" +"1072934880","1072934911","TW" +"1072934912","1072934943","CA" +"1072934944","1072934975","PH" +"1072934976","1072935039","CA" +"1072935040","1072935135","US" +"1072935136","1072935159","CA" +"1072935160","1072935167","US" +"1072935168","1072935679","CA" +"1072935680","1072935807","PH" +"1072935808","1072936447","CA" +"1072936448","1072936703","PH" +"1072936704","1072937215","US" +"1072937216","1072937471","IR" +"1072937472","1072937727","US" +"1072937728","1072938239","CA" +"1072938240","1072938495","VG" +"1072938496","1072938751","CA" +"1072938752","1072939007","US" +"1072939008","1072939519","CA" +"1072939520","1072940031","US" +"1072940032","1072955391","CA" +"1072955392","1073022975","US" +"1073022976","1073025791","HN" +"1073025792","1073026047","NI" +"1073026048","1073026303","US" +"1073026304","1073026559","DO" +"1073026560","1073027071","PR" +"1073027072","1073028351","NI" +"1073028352","1073028607","US" +"1073028608","1073029119","GD" +"1073029120","1073031167","PR" +"1073031168","1073031423","US" +"1073031424","1073031935","AN" +"1073031936","1073033215","US" +"1073033216","1073035263","AN" +"1073035264","1073036032","GD" +"1073036033","1073036543","US" +"1073036544","1073037055","MX" +"1073037056","1073037311","AN" +"1073037312","1073037823","CO" +"1073037824","1073038335","GD" +"1073038336","1073039359","US" +"1073039360","1073041407","GT" +"1073041408","1073043455","CO" +"1073043456","1073043967","PR" +"1073043968","1073044735","US" +"1073044736","1073044991","PR" +"1073044992","1073045247","US" +"1073045248","1073045503","PR" +"1073045504","1073047551","CO" +"1073047552","1073049599","PR" +"1073049600","1073052671","BS" +"1073052672","1073075460","US" +"1073075461","1073075716","NL" +"1073075717","1073091397","US" +"1073091398","1073091407","CH" +"1073091408","1073093646","US" +"1073093647","1073093654","PE" +"1073093655","1073094557","US" +"1073094558","1073094570","IT" +"1073094571","1073373183","US" +"1073373184","1073381375","CA" +"1073381376","1073381391","US" +"1073381392","1073381463","NL" +"1073381464","1073381471","US" +"1073381472","1073381631","NL" +"1073381632","1073381887","EU" +"1073381888","1073382687","US" +"1073382688","1073382695","CA" +"1073382696","1073382815","US" +"1073382816","1073382847","CR" +"1073382848","1073382855","US" +"1073382856","1073382863","BR" +"1073382864","1073382879","US" +"1073382880","1073382911","AR" +"1073382912","1073382959","US" +"1073382960","1073382975","CA" +"1073382976","1073383519","US" +"1073383520","1073383551","SV" +"1073383552","1073383727","US" +"1073383728","1073383735","CA" +"1073383736","1073383839","US" +"1073383840","1073383871","VE" +"1073383872","1073384191","US" +"1073384192","1073384223","BR" +"1073384224","1073384287","US" +"1073384288","1073384295","BR" +"1073384296","1073384511","US" +"1073384512","1073384575","CA" +"1073384576","1073384607","US" +"1073384608","1073384639","BR" +"1073384640","1073384711","US" +"1073384712","1073384719","CL" +"1073384720","1073384775","US" +"1073384776","1073384783","CA" +"1073384784","1073384879","US" +"1073384880","1073384887","CA" +"1073384888","1073385087","US" +"1073385088","1073385095","CA" +"1073385096","1073385151","US" +"1073385152","1073385183","BR" +"1073385184","1073385279","US" +"1073385280","1073385311","BR" +"1073385312","1073389575","US" +"1073389576","1073389583","CA" +"1073389584","1073389599","US" +"1073389600","1073389631","GB" +"1073389632","1073389783","US" +"1073389784","1073389791","CL" +"1073389792","1073390207","US" +"1073390208","1073390215","CA" +"1073390216","1073390271","US" +"1073390272","1073390303","CA" +"1073390304","1073393887","US" +"1073393888","1073393895","CO" +"1073393896","1073393911","US" +"1073393912","1073393919","CO" +"1073393920","1073394191","US" +"1073394192","1073394207","MX" +"1073394208","1073394239","CA" +"1073394240","1073394247","MX" +"1073394248","1073394263","US" +"1073394264","1073394271","MX" +"1073394272","1073394279","US" +"1073394280","1073394287","MX" +"1073394288","1073394295","US" +"1073394296","1073394303","MX" +"1073394304","1073394311","AR" +"1073394312","1073394439","US" +"1073394440","1073394463","MX" +"1073394464","1073394495","US" +"1073394496","1073394503","MX" +"1073394504","1073394543","US" +"1073394544","1073394559","MX" +"1073394560","1073394591","US" +"1073394592","1073394623","AF" +"1073394624","1073394719","US" +"1073394720","1073394751","BR" +"1073394752","1073394767","AR" +"1073394768","1073394799","US" +"1073394800","1073394807","CA" +"1073394808","1073394967","US" +"1073394968","1073394975","AR" +"1073394976","1073395167","US" +"1073395168","1073395175","AR" +"1073395176","1073395183","US" +"1073395184","1073395191","AR" +"1073395192","1073395239","US" +"1073395240","1073395247","BR" +"1073395248","1073395399","US" +"1073395400","1073395407","CA" +"1073395408","1073395423","PR" +"1073395424","1073395967","US" +"1073395968","1073395999","BR" +"1073396000","1073396191","US" +"1073396192","1073396207","CA" +"1073396208","1073396215","BR" +"1073396216","1073396751","US" +"1073396752","1073396831","BR" +"1073396832","1073396863","US" +"1073396864","1073396895","CA" +"1073396896","1073396911","US" +"1073396912","1073396919","CA" +"1073396920","1073396927","US" +"1073396928","1073396935","VE" +"1073396936","1073396959","US" +"1073396960","1073396991","CA" +"1073396992","1073397063","US" +"1073397064","1073397071","BR" +"1073397072","1073425559","US" +"1073425560","1073425567","CA" +"1073425568","1073426559","US" +"1073426560","1073426623","AU" +"1073426624","1073434799","US" +"1073434800","1073434807","GB" +"1073434808","1073435583","US" +"1073435584","1073435647","CA" +"1073435648","1073438207","US" +"1073438208","1073438463","A2" +"1073438464","1073442863","US" +"1073442864","1073442879","GB" +"1073442880","1073448927","US" +"1073448928","1073448959","IL" +"1073448960","1073450399","US" +"1073450400","1073450431","GB" +"1073450432","1074020351","US" +"1074020352","1074028543","CA" +"1074028544","1074118655","US" +"1074118656","1074120703","CA" +"1074120704","1074120719","US" +"1074120720","1074120959","CA" +"1074120960","1074121215","US" +"1074121216","1074122415","CA" +"1074122416","1074122431","US" +"1074122432","1074125055","CA" +"1074125056","1074125311","US" +"1074125312","1074126847","CA" +"1074126848","1074127359","US" +"1074127360","1074128511","CA" +"1074128512","1074128575","US" +"1074128576","1074130943","CA" +"1074130944","1074131199","US" +"1074131200","1074135039","CA" +"1074135040","1074184191","US" +"1074184192","1074188287","CA" +"1074188288","1074229247","US" +"1074229248","1074241535","CA" +"1074241536","1074397439","US" +"1074397440","1074399039","CA" +"1074399040","1074399231","US" +"1074399232","1074408319","CA" +"1074408320","1074408447","US" +"1074408448","1074462463","CA" +"1074462464","1074463743","US" +"1074463744","1074493695","CA" +"1074493696","1074493823","US" +"1074493824","1074494719","CA" +"1074494720","1074495743","US" +"1074495744","1074513407","CA" +"1074513408","1074672671","US" +"1074672672","1074672703","IN" +"1074672704","1074672943","US" +"1074672944","1074672959","DK" +"1074672960","1074673663","US" +"1074673664","1074673679","CY" +"1074673680","1074675311","US" +"1074675312","1074675327","NO" +"1074675328","1074675679","US" +"1074675680","1074675687","GB" +"1074675688","1074680623","US" +"1074680624","1074680639","CA" +"1074680640","1074680703","US" +"1074680704","1074680719","IL" +"1074680720","1074681263","US" +"1074681264","1074681279","CA" +"1074681280","1074681343","US" +"1074681344","1074681359","CA" +"1074681360","1074682687","US" +"1074682688","1074682751","CA" +"1074682752","1074683023","US" +"1074683024","1074683039","CA" +"1074683040","1074683807","US" +"1074683808","1074683839","CA" +"1074683840","1074690895","US" +"1074690896","1074690911","AR" +"1074690912","1074690943","US" +"1074690944","1074691007","AR" +"1074691008","1074691135","US" +"1074691136","1074691199","AR" +"1074691200","1074701583","US" +"1074701584","1074701591","CA" +"1074701592","1074701599","US" +"1074701600","1074701631","CA" +"1074701632","1074702783","US" +"1074702784","1074702847","CA" +"1074702848","1074703615","US" +"1074703616","1074703871","GB" +"1074703872","1074704383","US" +"1074704384","1074704639","GB" +"1074704640","1074704703","US" +"1074704704","1074704711","CH" +"1074704712","1074704767","US" +"1074704768","1074704831","CH" +"1074704832","1074705727","US" +"1074705728","1074705743","GB" +"1074705744","1074705791","US" +"1074705792","1074705799","IL" +"1074705800","1074705887","US" +"1074705888","1074705903","IL" +"1074705904","1074706175","US" +"1074706176","1074706303","IL" +"1074706304","1074706367","US" +"1074706368","1074706431","GB" +"1074706432","1074706679","US" +"1074706680","1074706687","GB" +"1074706688","1074707775","US" +"1074707776","1074707839","GB" +"1074707840","1074707967","US" +"1074707968","1074708223","GB" +"1074708224","1074708991","US" +"1074708992","1074709247","PH" +"1074709248","1074711039","US" +"1074711040","1074711055","IN" +"1074711056","1074716679","US" +"1074716680","1074716687","GB" +"1074716688","1074716719","US" +"1074716720","1074716735","GB" +"1074716736","1074733055","US" +"1074733056","1074737151","AU" +"1074737152","1074745343","CA" +"1074745344","1074757631","US" +"1074757632","1074765823","CA" +"1074765824","1074777343","US" +"1074777344","1074777599","AU" +"1074777600","1074783167","US" +"1074783168","1074783199","CA" +"1074783200","1074783231","BM" +"1074783232","1074785823","US" +"1074785824","1074785855","AU" +"1074785856","1074871583","US" +"1074871584","1074871607","CA" +"1074871608","1074871615","US" +"1074871616","1074871679","CA" +"1074871680","1074937855","US" +"1074937856","1074946047","CA" +"1074946048","1074962431","US" +"1074962432","1074970623","CA" +"1074970624","1075062936","US" +"1075062937","1075062937","SA" +"1075062938","1075117287","US" +"1075117288","1075117311","IN" +"1075117312","1075147266","US" +"1075147267","1075147267","PK" +"1075147268","1075265535","US" +"1075265536","1075269631","KR" +"1075269632","1075421183","US" +"1075421184","1075429375","CA" +"1075429376","1075478527","US" +"1075478528","1075479103","CA" +"1075479104","1075479111","GB" +"1075479112","1075479135","CA" +"1075479136","1075479151","US" +"1075479152","1075479607","CA" +"1075479608","1075479615","US" +"1075479616","1075480415","CA" +"1075480416","1075480423","US" +"1075480424","1075482655","CA" +"1075482656","1075482671","US" +"1075482672","1075494911","CA" +"1075494912","1075513151","US" +"1075513152","1075513183","KW" +"1075513184","1075532663","US" +"1075532664","1075532673","IT" +"1075532674","1075558143","US" +"1075558144","1075558911","VI" +"1075558912","1075576831","US" +"1075576832","1075576871","NO" +"1075576872","1075576879","GB" +"1075576880","1075576951","NO" +"1075576952","1075576959","GB" +"1075576960","1075576967","NO" +"1075576968","1075576975","GB" +"1075576976","1075576991","NO" +"1075576992","1075577023","GB" +"1075577024","1075577067","NO" +"1075577068","1075577071","GB" +"1075577072","1075577087","NO" +"1075577088","1075577103","GB" +"1075577104","1075577271","NO" +"1075577272","1075577279","GB" +"1075577280","1075577311","NO" +"1075577312","1075577599","GB" +"1075577600","1075577615","NO" +"1075577616","1075577623","GB" +"1075577624","1075577775","NO" +"1075577776","1075577791","GB" +"1075577792","1075577855","NO" +"1075577856","1075578111","GB" +"1075578112","1075578623","NO" +"1075578624","1075578879","GB" +"1075578880","1075578927","NO" +"1075578928","1075578943","GB" +"1075578944","1075579007","NO" +"1075579008","1075579039","GB" +"1075579040","1075579047","NO" +"1075579048","1075579059","GB" +"1075579060","1075579747","NO" +"1075579748","1075579751","GB" +"1075579752","1075579935","NO" +"1075579936","1075579943","GB" +"1075579944","1075579967","NO" +"1075579968","1075579975","GB" +"1075579976","1075579983","NO" +"1075579984","1075579999","GB" +"1075580000","1075580055","NO" +"1075580056","1075580063","GB" +"1075580064","1075581271","NO" +"1075581272","1075581279","NL" +"1075581280","1075581295","NO" +"1075581296","1075581311","NL" +"1075581312","1075581447","NO" +"1075581448","1075581455","NL" +"1075581456","1075581471","NO" +"1075581472","1075581479","NL" +"1075581480","1075581495","NO" +"1075581496","1075581499","NL" +"1075581500","1075581543","NO" +"1075581544","1075581551","NL" +"1075581552","1075581695","NO" +"1075581696","1075581823","NL" +"1075581824","1075582495","NO" +"1075582496","1075582511","NL" +"1075582512","1075582527","NO" +"1075582528","1075582559","NL" +"1075582560","1075582615","NO" +"1075582616","1075582623","NL" +"1075582624","1075582975","NO" +"1075582976","1075583007","NL" +"1075583008","1075583039","NO" +"1075583040","1075583055","NL" +"1075583056","1075583119","NO" +"1075583120","1075583123","NL" +"1075583124","1075583127","NO" +"1075583128","1075583135","NL" +"1075583136","1075583147","NO" +"1075583148","1075583151","NL" +"1075583152","1075583503","NO" +"1075583504","1075583519","NL" +"1075583520","1075583551","NO" +"1075583552","1075583567","NL" +"1075583568","1075583583","NO" +"1075583584","1075583591","NL" +"1075583592","1075583647","NO" +"1075583648","1075583663","NL" +"1075583664","1075583743","NO" +"1075583744","1075583759","NL" +"1075583760","1075583783","NO" +"1075583784","1075583791","NL" +"1075583792","1075583903","NO" +"1075583904","1075583911","NL" +"1075583912","1075584071","NO" +"1075584072","1075584095","NL" +"1075584096","1075584355","NO" +"1075584356","1075584367","NL" +"1075584368","1075584695","NO" +"1075584696","1075584711","NL" +"1075584712","1075585023","NO" +"1075585024","1075593967","US" +"1075593968","1075593983","CA" +"1075593984","1075594975","US" +"1075594976","1075594991","CA" +"1075594992","1075595343","US" +"1075595344","1075595359","CA" +"1075595360","1075596031","US" +"1075596032","1075596047","CA" +"1075596048","1075596831","US" +"1075596832","1075596847","CA" +"1075596848","1075597023","US" +"1075597024","1075597039","CA" +"1075597040","1075597167","US" +"1075597168","1075597183","CA" +"1075597184","1075597375","US" +"1075597376","1075597407","CA" +"1075597408","1075597423","US" +"1075597424","1075597439","IL" +"1075597440","1075597551","US" +"1075597552","1075597599","CA" +"1075597600","1075598367","US" +"1075598368","1075598383","CA" +"1075598384","1075598943","US" +"1075598944","1075598991","CA" +"1075598992","1075599007","US" +"1075599008","1075599039","CA" +"1075599040","1075599471","US" +"1075599472","1075599487","IL" +"1075599488","1075599967","US" +"1075599968","1075599983","IE" +"1075599984","1075601279","US" +"1075601280","1075601295","CA" +"1075601296","1075609599","US" +"1075609600","1075613695","TT" +"1075613696","1075744767","US" +"1075744768","1075748863","A2" +"1075748864","1075782143","US" +"1075782144","1075782399","A1" +"1075782400","1075855359","US" +"1075855360","1075871743","DO" +"1075871744","1075970047","US" +"1075970048","1075972095","CA" +"1075972096","1075972351","GB" +"1075972352","1075973703","US" +"1075973704","1075973711","CA" +"1075973712","1075973887","US" +"1075973888","1075974143","CA" +"1075974144","1075975167","US" +"1075975168","1075975679","CA" +"1075975680","1075975815","US" +"1075975816","1075975983","CA" +"1075975984","1075975999","US" +"1075976000","1075976175","CA" +"1075976176","1075976191","US" +"1075976192","1075976447","CA" +"1075976448","1075976479","US" +"1075976480","1075976511","CA" +"1075976512","1075976543","US" +"1075976544","1075976647","CA" +"1075976648","1075976655","US" +"1075976656","1075976687","CA" +"1075976688","1075976695","US" +"1075976696","1075976703","CA" +"1075976704","1075976959","US" +"1075976960","1075977023","CA" +"1075977024","1075977039","US" +"1075977040","1075977071","CA" +"1075977072","1075977087","US" +"1075977088","1075977199","CA" +"1075977200","1075977215","US" +"1075977216","1075978239","CA" +"1075978240","1075978687","US" +"1075978688","1075978719","CA" +"1075978720","1075979551","US" +"1075979552","1075979583","CA" +"1075979584","1075980575","US" +"1075980576","1075980591","GB" +"1075980592","1075982335","US" +"1075982336","1075982591","CA" +"1075982592","1075982599","US" +"1075982600","1075982607","NZ" +"1075982608","1075982655","CA" +"1075982656","1075982671","MX" +"1075982672","1075982695","CA" +"1075982696","1075982703","US" +"1075982704","1075982751","CA" +"1075982752","1075982783","MX" +"1075982784","1075982815","US" +"1075982816","1075982831","CA" +"1075982832","1075982847","US" +"1075982848","1075983183","CA" +"1075983184","1075983191","US" +"1075983192","1075983199","CA" +"1075983200","1075983231","US" +"1075983232","1075984383","CA" +"1075984384","1075984823","US" +"1075984824","1075984831","CA" +"1075984832","1075985919","US" +"1075985920","1075989055","CA" +"1075989056","1075989119","US" +"1075989120","1075989247","CA" +"1075989248","1075989311","FI" +"1075989312","1075989327","CA" +"1075989328","1075989335","US" +"1075989336","1075989359","CA" +"1075989360","1075989375","US" +"1075989376","1075989455","CA" +"1075989456","1075989471","US" +"1075989472","1075989791","CA" +"1075989792","1075989823","US" +"1075989824","1075990527","CA" +"1075990528","1075990727","US" +"1075990728","1075990735","CA" +"1075990736","1075991551","US" +"1075991552","1075991583","CA" +"1075991584","1075991671","US" +"1075991672","1075991679","CA" +"1075991680","1075992319","US" +"1075992320","1075992447","GB" +"1075992448","1075994607","US" +"1075994608","1075994623","BE" +"1075994624","1075995007","CA" +"1075995008","1075995023","VG" +"1075995024","1075995039","US" +"1075995040","1075995055","CA" +"1075995056","1075995071","US" +"1075995072","1075995079","MX" +"1075995080","1075995087","CA" +"1075995088","1075995103","US" +"1075995104","1075995263","CA" +"1075995264","1075995295","US" +"1075995296","1075995326","CA" +"1075995327","1075995343","US" +"1075995344","1075995479","CA" +"1075995480","1075995487","US" +"1075995488","1075995503","CA" +"1075995504","1075995519","MX" +"1075995520","1075995567","CA" +"1075995568","1075995583","CN" +"1075995584","1075996671","CA" +"1075996672","1075996751","US" +"1075996752","1075996767","CA" +"1075996768","1075996799","BV" +"1075996800","1075997119","CA" +"1075997120","1075997183","MX" +"1075997184","1075997519","CA" +"1075997520","1075997535","US" +"1075997536","1075997695","CA" +"1075997696","1075997823","CR" +"1075997824","1075997919","US" +"1075997920","1075997935","CA" +"1075997936","1075997951","US" +"1075997952","1075998351","CA" +"1075998352","1075998431","US" +"1075998432","1075999231","CA" +"1075999232","1075999999","US" +"1076000000","1076000255","CA" +"1076000256","1076000767","US" +"1076000768","1076002047","CA" +"1076002048","1076002823","US" +"1076002824","1076002831","CA" +"1076002832","1076002879","US" +"1076002880","1076002975","CA" +"1076002976","1076003023","US" +"1076003024","1076003031","CA" +"1076003032","1076003039","US" +"1076003040","1076003055","CA" +"1076003056","1076003071","US" +"1076003072","1076003327","CA" +"1076003328","1076003359","US" +"1076003360","1076003375","CA" +"1076003376","1076003391","US" +"1076003392","1076003407","CA" +"1076003408","1076003519","US" +"1076003520","1076004383","CA" +"1076004384","1076004423","US" +"1076004424","1076004431","CA" +"1076004432","1076004471","US" +"1076004472","1076004479","CA" +"1076004480","1076004495","US" +"1076004496","1076004511","CA" +"1076004512","1076004543","US" +"1076004544","1076004591","CA" +"1076004592","1076004607","US" +"1076004608","1076004639","CA" +"1076004640","1076004703","US" +"1076004704","1076005119","CA" +"1076005120","1076005151","NZ" +"1076005152","1076005159","CA" +"1076005160","1076005167","US" +"1076005168","1076005191","CA" +"1076005192","1076005207","US" +"1076005208","1076005223","CA" +"1076005224","1076005239","US" +"1076005240","1076005247","CA" +"1076005248","1076005263","US" +"1076005264","1076005279","CA" +"1076005280","1076005311","US" +"1076005312","1076005343","CA" +"1076005344","1076005375","US" +"1076005376","1076005887","CA" +"1076005888","1076006015","US" +"1076006016","1076006055","CA" +"1076006056","1076006079","US" +"1076006080","1076006111","CA" +"1076006112","1076006271","US" +"1076006272","1076006303","CA" +"1076006304","1076006335","US" +"1076006336","1076006367","CA" +"1076006368","1076006383","US" +"1076006384","1076006719","CA" +"1076006720","1076006751","US" +"1076006752","1076006783","CA" +"1076006784","1076006911","US" +"1076006912","1076007167","CA" +"1076007168","1076007183","US" +"1076007184","1076007247","CA" +"1076007248","1076007263","US" +"1076007264","1076007947","CA" +"1076007948","1076007951","US" +"1076007952","1076008063","CA" +"1076008064","1076008191","US" +"1076008192","1076009631","CA" +"1076009632","1076009639","US" +"1076009640","1076009643","CA" +"1076009644","1076009663","US" +"1076009664","1076009695","CA" +"1076009696","1076009711","US" +"1076009712","1076009887","CA" +"1076009888","1076009919","US" +"1076009920","1076010727","CA" +"1076010728","1076010735","US" +"1076010736","1076011007","CA" +"1076011008","1076012236","US" +"1076012237","1076012237","IN" +"1076012238","1076013094","US" +"1076013095","1076013095","IN" +"1076013096","1076018303","US" +"1076018304","1076018367","BR" +"1076018368","1076024307","US" +"1076024308","1076024315","CA" +"1076024316","1076026367","US" +"1076026368","1076026527","CA" +"1076026528","1076026559","US" +"1076026560","1076026607","CA" +"1076026608","1076026623","SG" +"1076026624","1076026975","CA" +"1076026976","1076027031","US" +"1076027032","1076027263","CA" +"1076027264","1076027295","US" +"1076027296","1076027407","CA" +"1076027408","1076027423","US" +"1076027424","1076027711","CA" +"1076027712","1076027727","US" +"1076027728","1076027775","CA" +"1076027776","1076027791","US" +"1076027792","1076027911","CA" +"1076027912","1076027919","US" +"1076027920","1076028143","CA" +"1076028144","1076028151","US" +"1076028152","1076028479","CA" +"1076028480","1076028543","GB" +"1076028544","1076028671","CA" +"1076028672","1076028927","US" +"1076028928","1076029183","BZ" +"1076029184","1076029215","CA" +"1076029216","1076029223","US" +"1076029224","1076029231","DM" +"1076029232","1076029239","CA" +"1076029240","1076029247","US" +"1076029248","1076029255","CA" +"1076029256","1076029271","US" +"1076029272","1076029311","CA" +"1076029312","1076029319","GB" +"1076029320","1076029415","CA" +"1076029416","1076029422","US" +"1076029423","1076029430","CA" +"1076029431","1076029439","US" +"1076029440","1076030223","CA" +"1076030224","1076030231","US" +"1076030232","1076030319","CA" +"1076030320","1076030335","US" +"1076030336","1076030399","CA" +"1076030400","1076030463","US" +"1076030464","1076030623","CA" +"1076030624","1076030631","US" +"1076030632","1076031487","CA" +"1076031488","1076031743","US" +"1076031744","1076031999","CA" +"1076032000","1076032255","US" +"1076032256","1076032511","CA" +"1076032512","1076033647","US" +"1076033648","1076033663","EG" +"1076033664","1076033671","US" +"1076033672","1076033687","CA" +"1076033688","1076033855","US" +"1076033856","1076033871","CA" +"1076033872","1076033903","US" +"1076033904","1076033951","CA" +"1076033952","1076034047","US" +"1076034048","1076034063","CN" +"1076034064","1076034479","US" +"1076034480","1076034495","CA" +"1076034496","1076035295","US" +"1076035296","1076035327","EG" +"1076035328","1076035415","US" +"1076035416","1076035423","EG" +"1076035424","1076035519","US" +"1076035520","1076035583","IN" +"1076035584","1076036247","US" +"1076036248","1076036255","IL" +"1076036256","1076036351","US" +"1076036352","1076036605","ES" +"1076036606","1076036735","US" +"1076036736","1076036751","CA" +"1076036752","1076036791","US" +"1076036792","1076036799","ZA" +"1076036800","1076037439","US" +"1076037440","1076037447","MX" +"1076037448","1076043775","US" +"1076043776","1076043839","CA" +"1076043840","1076043871","MX" +"1076043872","1076044095","US" +"1076044096","1076044127","IN" +"1076044128","1076044175","US" +"1076044176","1076044183","IE" +"1076044184","1076044191","FR" +"1076044192","1076044551","US" +"1076044552","1076044567","DE" +"1076044568","1076044703","US" +"1076044704","1076044735","AR" +"1076044736","1076047527","US" +"1076047528","1076047535","JP" +"1076047536","1076047551","US" +"1076047552","1076047583","CH" +"1076047584","1076047967","US" +"1076047968","1076047975","VE" +"1076047976","1076048639","US" +"1076048640","1076048671","MX" +"1076048672","1076048703","AR" +"1076048704","1076048735","US" +"1076048736","1076048767","CA" +"1076048768","1076048831","US" +"1076048832","1076048863","IL" +"1076048864","1076049151","US" +"1076049152","1076049407","DE" +"1076049408","1076049439","CA" +"1076049440","1076049919","US" +"1076049920","1076050175","IL" +"1076050176","1076174847","US" +"1076174848","1076178943","BM" +"1076178944","1076179161","US" +"1076179162","1076179163","IN" +"1076179164","1076179196","US" +"1076179197","1076179198","IN" +"1076179199","1076180201","US" +"1076180202","1076180222","PK" +"1076180223","1076180795","US" +"1076180796","1076180799","IN" +"1076180800","1076181236","US" +"1076181237","1076181237","CA" +"1076181238","1076183039","US" +"1076183040","1076183071","IN" +"1076183072","1076183231","US" +"1076183232","1076183295","CA" +"1076183296","1076183807","US" +"1076183808","1076184063","CA" +"1076184064","1076184095","VE" +"1076184096","1076184159","US" +"1076184160","1076184191","PK" +"1076184192","1076184223","IN" +"1076184224","1076184255","US" +"1076184256","1076184287","BE" +"1076184288","1076184319","CA" +"1076184320","1076184575","US" +"1076184576","1076184831","CA" +"1076184832","1076185215","US" +"1076185216","1076185343","CA" +"1076185344","1076185439","US" +"1076185440","1076185471","IT" +"1076185472","1076185503","US" +"1076185504","1076185535","DO" +"1076185536","1076185919","US" +"1076185920","1076185951","CA" +"1076185952","1076185983","US" +"1076185984","1076186015","PK" +"1076186016","1076186047","US" +"1076186048","1076186079","IN" +"1076186080","1076186303","US" +"1076186304","1076186335","CA" +"1076186336","1076186367","IT" +"1076186368","1076186623","CA" +"1076186624","1076186751","US" +"1076186752","1076186783","CA" +"1076186784","1076186815","TW" +"1076186816","1076187391","US" +"1076187392","1076187647","CA" +"1076187648","1076187679","BE" +"1076187680","1076187743","US" +"1076187744","1076187775","CA" +"1076187776","1076187807","AU" +"1076187808","1076187903","US" +"1076187904","1076188159","CA" +"1076188160","1076188287","US" +"1076188288","1076188415","BE" +"1076188416","1076189183","US" +"1076189184","1076189215","VE" +"1076189216","1076189279","CA" +"1076189280","1076189311","US" +"1076189312","1076189343","CA" +"1076189344","1076189407","US" +"1076189408","1076189439","IN" +"1076189440","1076190079","US" +"1076190080","1076190143","IN" +"1076190144","1076190175","BE" +"1076190176","1076190207","IN" +"1076190208","1076190463","CA" +"1076190464","1076190783","US" +"1076190784","1076190815","CA" +"1076190816","1076190847","IN" +"1076190848","1076190913","US" +"1076190914","1076190945","IN" +"1076190946","1076191231","US" +"1076191232","1076191487","CA" +"1076191488","1076192127","US" +"1076192128","1076192191","CA" +"1076192192","1076192255","US" +"1076192256","1076192383","BE" +"1076192384","1076192767","US" +"1076192768","1076192831","IN" +"1076192832","1076193151","US" +"1076193152","1076193183","TR" +"1076193184","1076193247","US" +"1076193248","1076193279","CA" +"1076193280","1076193535","PK" +"1076193536","1076194367","US" +"1076194368","1076194399","IN" +"1076194400","1076194431","IL" +"1076194432","1076194463","IN" +"1076194464","1076194527","BE" +"1076194528","1076194559","US" +"1076194560","1076194815","CA" +"1076194816","1076195071","US" +"1076195072","1076195327","IN" +"1076195328","1076195551","US" +"1076195552","1076195583","IN" +"1076195584","1076195871","US" +"1076195872","1076195903","BE" +"1076195904","1076195999","US" +"1076196000","1076196031","CN" +"1076196032","1076196063","CA" +"1076196064","1076196095","US" +"1076196096","1076196415","CA" +"1076196416","1076196479","US" +"1076196480","1076196511","FR" +"1076196512","1076196641","US" +"1076196642","1076196671","BE" +"1076196672","1076196863","US" +"1076196864","1076196991","IN" +"1076196992","1076197119","US" +"1076197120","1076197375","CA" +"1076197376","1076197631","US" +"1076197632","1076197663","BE" +"1076197664","1076198399","US" +"1076198400","1076198655","CA" +"1076198656","1076198911","AE" +"1076198912","1076218015","US" +"1076218016","1076218023","GB" +"1076218024","1076219407","US" +"1076219408","1076219415","GB" +"1076219416","1076233177","US" +"1076233178","1076233178","TC" +"1076233179","1076281695","US" +"1076281696","1076281727","TH" +"1076281728","1076282111","US" +"1076282112","1076282143","AU" +"1076282144","1076282351","US" +"1076282352","1076282367","CA" +"1076282368","1076283903","US" +"1076283904","1076284159","NO" +"1076284160","1076284319","US" +"1076284320","1076284335","GB" +"1076284336","1076284679","US" +"1076284680","1076284687","HU" +"1076284688","1076285439","US" +"1076285440","1076285455","DK" +"1076285456","1076289951","US" +"1076289952","1076289967","GB" +"1076289968","1076291903","US" +"1076291904","1076291919","UA" +"1076291920","1076292559","US" +"1076292560","1076292567","NL" +"1076292568","1076294655","US" +"1076294656","1076294687","CY" +"1076294688","1076294703","US" +"1076294704","1076294719","NO" +"1076294720","1076295071","US" +"1076295072","1076295087","NL" +"1076295088","1076295167","US" +"1076295168","1076295199","CY" +"1076295200","1076298503","US" +"1076298504","1076298511","GB" +"1076298512","1076298591","US" +"1076298592","1076298607","BD" +"1076298608","1076298631","US" +"1076298632","1076298655","BD" +"1076298656","1076298695","US" +"1076298696","1076298703","MH" +"1076298704","1076298919","US" +"1076298920","1076298927","GB" +"1076298928","1076298975","US" +"1076298976","1076298983","IL" +"1076298984","1076298991","MX" +"1076298992","1076298999","US" +"1076299000","1076299007","MX" +"1076299008","1076299023","IN" +"1076299024","1076299095","US" +"1076299096","1076299103","AU" +"1076299104","1076299127","US" +"1076299128","1076299135","FR" +"1076299136","1076299159","US" +"1076299160","1076299167","CA" +"1076299168","1076299175","US" +"1076299176","1076299183","DE" +"1076299184","1076299271","US" +"1076299272","1076299279","AU" +"1076299280","1076299287","US" +"1076299288","1076299295","GB" +"1076299296","1076299303","US" +"1076299304","1076299311","IN" +"1076299312","1076299399","US" +"1076299400","1076299407","DK" +"1076299408","1076299415","PE" +"1076299416","1076299471","US" +"1076299472","1076299479","ID" +"1076299480","1076299487","GB" +"1076299488","1076299503","IN" +"1076299504","1076299519","BH" +"1076299520","1076299551","US" +"1076299552","1076299583","IN" +"1076299584","1076299647","US" +"1076299648","1076299663","BD" +"1076299664","1076299679","US" +"1076299680","1076299687","VI" +"1076299688","1076299727","US" +"1076299728","1076299735","AU" +"1076299736","1076299767","US" +"1076299768","1076299775","MX" +"1076299776","1076299823","US" +"1076299824","1076299831","GB" +"1076299832","1076299847","US" +"1076299848","1076299855","VI" +"1076299856","1076299863","GB" +"1076299864","1076299871","CA" +"1076299872","1076299943","US" +"1076299944","1076299951","IT" +"1076299952","1076299959","US" +"1076299960","1076299975","FR" +"1076299976","1076300015","US" +"1076300016","1076300031","GB" +"1076300032","1076300047","US" +"1076300048","1076300055","BD" +"1076300056","1076300071","GB" +"1076300072","1076300079","CK" +"1076300080","1076300095","IL" +"1076300096","1076300111","BD" +"1076300112","1076300119","IN" +"1076300120","1076300207","US" +"1076300208","1076300223","RU" +"1076300224","1076300231","MX" +"1076300232","1076300255","US" +"1076300256","1076300271","SE" +"1076300272","1076300279","ID" +"1076300280","1076300287","AU" +"1076300288","1076300295","US" +"1076300296","1076300303","IN" +"1076300304","1076300311","US" +"1076300312","1076300319","GB" +"1076300320","1076300335","US" +"1076300336","1076300343","IN" +"1076300344","1076300383","US" +"1076300384","1076300391","GB" +"1076300392","1076300399","IN" +"1076300400","1076300447","US" +"1076300448","1076300455","MY" +"1076300456","1076300463","US" +"1076300464","1076300471","IN" +"1076300472","1076300479","US" +"1076300480","1076300487","IN" +"1076300488","1076300511","US" +"1076300512","1076300519","IN" +"1076300520","1076300527","GB" +"1076300528","1076300663","US" +"1076300664","1076300671","AU" +"1076300672","1076300799","US" +"1076300800","1076300807","IN" +"1076300808","1076300847","US" +"1076300848","1076300855","AU" +"1076300856","1076300903","US" +"1076300904","1076300911","IN" +"1076300912","1076300919","US" +"1076300920","1076300927","IN" +"1076300928","1076300991","US" +"1076300992","1076301007","NZ" +"1076301008","1076301015","US" +"1076301016","1076301023","GR" +"1076301024","1076301047","US" +"1076301048","1076301055","AU" +"1076301056","1076301087","US" +"1076301088","1076301095","CA" +"1076301096","1076301143","US" +"1076301144","1076301151","NL" +"1076301152","1076301159","US" +"1076301160","1076301167","GB" +"1076301168","1076301183","US" +"1076301184","1076301191","AU" +"1076301192","1076301199","US" +"1076301200","1076301207","AU" +"1076301208","1076301263","US" +"1076301264","1076301271","CA" +"1076301272","1076301279","IN" +"1076301280","1076301823","US" +"1076301824","1076301831","IN" +"1076301832","1076301871","US" +"1076301872","1076301879","SE" +"1076301880","1076301895","US" +"1076301896","1076301903","IL" +"1076301904","1076301927","US" +"1076301928","1076301935","AU" +"1076301936","1076302359","US" +"1076302360","1076302367","GB" +"1076302368","1076302407","US" +"1076302408","1076302415","IN" +"1076302416","1076302439","US" +"1076302440","1076302447","CA" +"1076302448","1076302495","US" +"1076302496","1076302503","BD" +"1076302504","1076302511","GB" +"1076302512","1076302519","US" +"1076302520","1076302527","DE" +"1076302528","1076302639","US" +"1076302640","1076302655","FR" +"1076302656","1076302719","US" +"1076302720","1076302735","NZ" +"1076302736","1076302751","US" +"1076302752","1076302759","DK" +"1076302760","1076302783","US" +"1076302784","1076302799","IN" +"1076302800","1076302807","US" +"1076302808","1076302815","AU" +"1076302816","1076302839","US" +"1076302840","1076302847","GB" +"1076302848","1076302855","NZ" +"1076302856","1076302879","US" +"1076302880","1076302887","IN" +"1076302888","1076302911","US" +"1076302912","1076302919","IN" +"1076302920","1076302983","US" +"1076302984","1076302991","AR" +"1076302992","1076303079","US" +"1076303080","1076303087","RU" +"1076303088","1076303167","US" +"1076303168","1076303183","CA" +"1076303184","1076303215","US" +"1076303216","1076303223","IN" +"1076303224","1076303231","MX" +"1076303232","1076303271","US" +"1076303272","1076303287","AU" +"1076303288","1076303319","US" +"1076303320","1076303327","EG" +"1076303328","1076303335","AU" +"1076303336","1076303359","US" +"1076303360","1076303391","BH" +"1076303392","1076303439","US" +"1076303440","1076303455","KW" +"1076303456","1076303495","US" +"1076303496","1076303511","AU" +"1076303512","1076303519","CA" +"1076303520","1076303527","US" +"1076303528","1076303535","AU" +"1076303536","1076303551","US" +"1076303552","1076303559","AU" +"1076303560","1076303599","US" +"1076303600","1076303615","AU" +"1076303616","1076303631","US" +"1076303632","1076303639","CH" +"1076303640","1076303647","US" +"1076303648","1076303655","AU" +"1076303656","1076303663","US" +"1076303664","1076303679","GI" +"1076303680","1076303695","US" +"1076303696","1076303703","GB" +"1076303704","1076303711","US" +"1076303712","1076303719","CA" +"1076303720","1076303775","US" +"1076303776","1076303791","AU" +"1076303792","1076303831","US" +"1076303832","1076303839","SE" +"1076303840","1076303983","US" +"1076303984","1076303991","AU" +"1076303992","1076304031","US" +"1076304032","1076304039","CA" +"1076304040","1076304079","US" +"1076304080","1076304087","CA" +"1076304088","1076304127","US" +"1076304128","1076304135","CA" +"1076304136","1076304151","US" +"1076304152","1076304159","CA" +"1076304160","1076304191","BH" +"1076304192","1076304215","US" +"1076304216","1076304223","GI" +"1076304224","1076304255","US" +"1076304256","1076304383","IT" +"1076304384","1076304391","CA" +"1076304392","1076304407","US" +"1076304408","1076304415","CA" +"1076304416","1076304439","US" +"1076304440","1076304447","CA" +"1076304448","1076304487","US" +"1076304488","1076304495","EG" +"1076304496","1076304567","US" +"1076304568","1076304575","IN" +"1076304576","1076304583","BM" +"1076304584","1076304591","CA" +"1076304592","1076304607","US" +"1076304608","1076304615","GB" +"1076304616","1076304623","US" +"1076304624","1076304631","GB" +"1076304632","1076304639","US" +"1076304640","1076304647","GB" +"1076304648","1076304655","JP" +"1076304656","1076304663","SE" +"1076304664","1076304687","US" +"1076304688","1076304695","IN" +"1076304696","1076304751","US" +"1076304752","1076304759","RU" +"1076304760","1076304831","US" +"1076304832","1076304839","VE" +"1076304840","1076304895","US" +"1076304896","1076304911","AU" +"1076304912","1076304919","US" +"1076304920","1076304927","ES" +"1076304928","1076304951","US" +"1076304952","1076304959","NZ" +"1076304960","1076304991","US" +"1076304992","1076304999","ID" +"1076305000","1076305023","US" +"1076305024","1076305039","CA" +"1076305040","1076305055","RU" +"1076305056","1076305079","US" +"1076305080","1076305087","AT" +"1076305088","1076305111","GB" +"1076305112","1076305167","US" +"1076305168","1076305175","FR" +"1076305176","1076305191","US" +"1076305192","1076305207","CA" +"1076305208","1076305215","AR" +"1076305216","1076305231","DE" +"1076305232","1076305239","US" +"1076305240","1076305247","GB" +"1076305248","1076305255","VE" +"1076305256","1076305263","US" +"1076305264","1076305271","CA" +"1076305272","1076305303","US" +"1076305304","1076305311","RU" +"1076305312","1076306463","US" +"1076306464","1076306479","GB" +"1076306480","1076306511","US" +"1076306512","1076306527","AE" +"1076306528","1076307495","US" +"1076307496","1076307503","DE" +"1076307504","1076307519","US" +"1076307520","1076307535","DE" +"1076307536","1076307743","US" +"1076307744","1076307807","DE" +"1076307808","1076307967","US" +"1076307968","1076308223","DE" +"1076308224","1076308495","US" +"1076308496","1076308511","AE" +"1076308512","1076308575","US" +"1076308576","1076308591","IL" +"1076308592","1076308671","US" +"1076308672","1076308687","DE" +"1076308688","1076308991","US" +"1076308992","1076309007","IE" +"1076309008","1076309119","US" +"1076309120","1076309135","IE" +"1076309136","1076309151","US" +"1076309152","1076309183","DE" +"1076309184","1076309967","US" +"1076309968","1076309983","DE" +"1076309984","1076310015","US" +"1076310016","1076310271","DE" +"1076310272","1076310303","AE" +"1076310304","1076310367","US" +"1076310368","1076310383","IE" +"1076310384","1076310399","US" +"1076310400","1076310431","AE" +"1076310432","1076310463","AU" +"1076310464","1076310527","IL" +"1076310528","1076338687","US" +"1076338688","1076346879","CA" +"1076346880","1076387839","US" +"1076387840","1076393727","CA" +"1076393728","1076394239","US" +"1076394240","1076396031","CA" +"1076396032","1076404223","US" +"1076404224","1076406015","A2" +"1076406016","1076406271","US" +"1076406272","1076408063","A2" +"1076408064","1076408319","US" +"1076408320","1076412415","CA" +"1076412416","1076424703","US" +"1076424704","1076428799","CA" +"1076428800","1076493311","US" +"1076493312","1076493375","IN" +"1076493376","1076543487","US" +"1076543488","1076559871","CA" +"1076559872","1076628991","US" +"1076628992","1076629247","VI" +"1076629248","1076696655","US" +"1076696656","1076696663","CA" +"1076696664","1076697503","US" +"1076697504","1076697519","NZ" +"1076697520","1076697567","US" +"1076697568","1076697583","PE" +"1076697584","1076698565","US" +"1076698566","1076698580","AU" +"1076698581","1076704376","US" +"1076704377","1076704405","CO" +"1076704406","1076704743","US" +"1076704744","1076704751","GB" +"1076704752","1076705191","US" +"1076705192","1076705199","AE" +"1076705200","1076705215","US" +"1076705216","1076705247","CA" +"1076705248","1076705719","US" +"1076705720","1076705729","AU" +"1076705730","1076707087","US" +"1076707088","1076707103","AT" +"1076707104","1076707119","GB" +"1076707120","1076707311","US" +"1076707312","1076707319","AR" +"1076707320","1076756479","US" +"1076756480","1076772863","CA" +"1076772864","1076850687","US" +"1076850688","1076850943","CA" +"1076850944","1076880383","US" +"1076880384","1076880639","CH" +"1076880640","1076985855","US" +"1076985856","1077002239","A2" +"1077002240","1077002255","US" +"1077002256","1077002271","GB" +"1077002272","1077002343","US" +"1077002344","1077002351","VE" +"1077002352","1077002359","US" +"1077002360","1077002367","AG" +"1077002368","1077002399","US" +"1077002400","1077002407","CA" +"1077002408","1077002495","US" +"1077002496","1077002503","CA" +"1077002504","1077002543","US" +"1077002544","1077002551","CY" +"1077002552","1077002559","CA" +"1077002560","1077002575","US" +"1077002576","1077002583","CA" +"1077002584","1077002599","US" +"1077002600","1077002607","BH" +"1077002608","1077002823","US" +"1077002824","1077002831","IN" +"1077002832","1077002847","FR" +"1077002848","1077002855","NZ" +"1077002856","1077002863","AU" +"1077002864","1077002911","US" +"1077002912","1077002927","MX" +"1077002928","1077002935","IN" +"1077002936","1077002943","CA" +"1077002944","1077002991","US" +"1077002992","1077002999","BH" +"1077003000","1077003023","US" +"1077003024","1077003039","RU" +"1077003040","1077003047","AU" +"1077003048","1077003079","US" +"1077003080","1077003087","IN" +"1077003088","1077003199","US" +"1077003200","1077003231","IN" +"1077003232","1077003431","US" +"1077003432","1077003439","IE" +"1077003440","1077003687","US" +"1077003688","1077003695","PH" +"1077003696","1077003711","US" +"1077003712","1077003727","AU" +"1077003728","1077003735","DE" +"1077003736","1077003783","US" +"1077003784","1077003791","CA" +"1077003792","1077003807","US" +"1077003808","1077003815","AU" +"1077003816","1077003895","US" +"1077003896","1077003903","IN" +"1077003904","1077003919","US" +"1077003920","1077003927","JP" +"1077003928","1077003959","US" +"1077003960","1077003967","BH" +"1077003968","1077003991","US" +"1077003992","1077003999","AT" +"1077004000","1077004119","US" +"1077004120","1077004127","GB" +"1077004128","1077004143","US" +"1077004144","1077004159","FR" +"1077004160","1077004199","US" +"1077004200","1077004207","NZ" +"1077004208","1077004239","US" +"1077004240","1077004247","GB" +"1077004248","1077004255","US" +"1077004256","1077004263","AU" +"1077004264","1077004303","US" +"1077004304","1077004319","FR" +"1077004320","1077004327","AU" +"1077004328","1077004343","US" +"1077004344","1077004351","AT" +"1077004352","1077004367","US" +"1077004368","1077004375","ZA" +"1077004376","1077004431","US" +"1077004432","1077004439","CA" +"1077004440","1077004511","US" +"1077004512","1077004527","FR" +"1077004528","1077004543","US" +"1077004544","1077004559","CA" +"1077004560","1077004583","US" +"1077004584","1077004591","CA" +"1077004592","1077004687","US" +"1077004688","1077004695","GB" +"1077004696","1077004703","AE" +"1077004704","1077004735","FR" +"1077004736","1077004743","US" +"1077004744","1077004751","CA" +"1077004752","1077004759","US" +"1077004760","1077004767","NZ" +"1077004768","1077004783","US" +"1077004784","1077004791","CA" +"1077004792","1077004799","GB" +"1077004800","1077004815","CA" +"1077004816","1077004847","US" +"1077004848","1077004863","CA" +"1077004864","1077004871","US" +"1077004872","1077004879","GB" +"1077004880","1077005119","US" +"1077005120","1077005151","AU" +"1077005152","1077005295","US" +"1077005296","1077005303","CN" +"1077005304","1077005487","US" +"1077005488","1077005503","CA" +"1077005504","1077005535","US" +"1077005536","1077005543","AU" +"1077005544","1077005551","US" +"1077005552","1077005559","CA" +"1077005560","1077005631","US" +"1077005632","1077005695","AU" +"1077005696","1077005823","US" +"1077005824","1077005839","AU" +"1077005840","1077005895","US" +"1077005896","1077005903","RU" +"1077005904","1077005911","VE" +"1077005912","1077005943","US" +"1077005944","1077005951","TR" +"1077005952","1077006023","US" +"1077006024","1077006031","IN" +"1077006032","1077006039","US" +"1077006040","1077006047","NZ" +"1077006048","1077006071","US" +"1077006072","1077006079","IN" +"1077006080","1077006159","US" +"1077006160","1077006167","AE" +"1077006168","1077006407","US" +"1077006408","1077006415","CA" +"1077006416","1077006463","US" +"1077006464","1077006471","AU" +"1077006472","1077006623","US" +"1077006624","1077006631","GB" +"1077006632","1077006639","ES" +"1077006640","1077006647","IE" +"1077006648","1077006719","US" +"1077006720","1077006735","AU" +"1077006736","1077006743","US" +"1077006744","1077006751","IL" +"1077006752","1077006847","US" +"1077006848","1077006863","CA" +"1077006864","1077006887","US" +"1077006888","1077006895","IN" +"1077006896","1077006927","US" +"1077006928","1077006935","CA" +"1077006936","1077006943","AR" +"1077006944","1077006959","US" +"1077006960","1077006967","MX" +"1077006968","1077006991","US" +"1077006992","1077006999","CA" +"1077007000","1077007007","HK" +"1077007008","1077007063","CA" +"1077007064","1077007071","US" +"1077007072","1077007087","CA" +"1077007088","1077007103","US" +"1077007104","1077007111","NL" +"1077007112","1077007119","CA" +"1077007120","1077007167","US" +"1077007168","1077007191","CA" +"1077007192","1077007199","KR" +"1077007200","1077007247","US" +"1077007248","1077007255","BZ" +"1077007256","1077007287","US" +"1077007288","1077007295","CA" +"1077007296","1077007303","AU" +"1077007304","1077007311","IN" +"1077007312","1077007935","US" +"1077007936","1077007943","AU" +"1077007944","1077007967","US" +"1077007968","1077007983","NL" +"1077007984","1077008047","US" +"1077008048","1077008063","FR" +"1077008064","1077008127","US" +"1077008128","1077008191","CA" +"1077008192","1077008207","US" +"1077008208","1077008215","CA" +"1077008216","1077008239","US" +"1077008240","1077008271","CA" +"1077008272","1077008295","US" +"1077008296","1077008311","CA" +"1077008312","1077008319","US" +"1077008320","1077008335","CA" +"1077008336","1077008343","US" +"1077008344","1077008383","CA" +"1077008384","1077008735","US" +"1077008736","1077008751","BM" +"1077008752","1077008879","US" +"1077008880","1077008895","GB" +"1077008896","1077010431","US" +"1077010432","1077010439","HK" +"1077010440","1077011247","US" +"1077011248","1077011255","CA" +"1077011256","1077011287","US" +"1077011288","1077011295","AU" +"1077011296","1077011311","US" +"1077011312","1077011319","IN" +"1077011320","1077011327","TR" +"1077011328","1077011599","US" +"1077011600","1077011607","EG" +"1077011608","1077011615","NZ" +"1077011616","1077011807","US" +"1077011808","1077011823","GR" +"1077011824","1077011831","AT" +"1077011832","1077012031","US" +"1077012032","1077012039","CO" +"1077012040","1077012063","US" +"1077012064","1077012079","AU" +"1077012080","1077012111","US" +"1077012112","1077012127","GB" +"1077012128","1077012143","US" +"1077012144","1077012159","EG" +"1077012160","1077012167","GB" +"1077012168","1077012295","US" +"1077012296","1077012303","HK" +"1077012304","1077012311","IN" +"1077012312","1077012455","US" +"1077012456","1077012463","IN" +"1077012464","1077012495","US" +"1077012496","1077012511","IT" +"1077012512","1077012559","US" +"1077012560","1077012567","CA" +"1077012568","1077012575","US" +"1077012576","1077012583","ES" +"1077012584","1077013247","US" +"1077013248","1077013255","HK" +"1077013256","1077013263","US" +"1077013264","1077013279","MX" +"1077013280","1077013343","US" +"1077013344","1077013351","AU" +"1077013352","1077013359","US" +"1077013360","1077013375","NL" +"1077013376","1077013391","US" +"1077013392","1077013399","HK" +"1077013400","1077013407","US" +"1077013408","1077013415","NZ" +"1077013416","1077013431","US" +"1077013432","1077013439","NZ" +"1077013440","1077013511","US" +"1077013512","1077013519","NZ" +"1077013520","1077013551","US" +"1077013552","1077013559","IN" +"1077013560","1077013567","RU" +"1077013568","1077013647","US" +"1077013648","1077013663","DK" +"1077013664","1077013671","US" +"1077013672","1077013679","CA" +"1077013680","1077013695","US" +"1077013696","1077013703","CA" +"1077013704","1077013735","US" +"1077013736","1077013743","CR" +"1077013744","1077013759","IN" +"1077013760","1077014111","US" +"1077014112","1077014127","MX" +"1077014128","1077014151","US" +"1077014152","1077014159","AU" +"1077014160","1077014167","US" +"1077014168","1077014175","IN" +"1077014176","1077014527","US" +"1077014528","1077014535","CA" +"1077014536","1077014567","US" +"1077014568","1077014575","FR" +"1077014576","1077014607","US" +"1077014608","1077014623","BY" +"1077014624","1077014631","US" +"1077014632","1077014639","IN" +"1077014640","1077014647","US" +"1077014648","1077014703","HK" +"1077014704","1077014711","ZA" +"1077014712","1077014743","US" +"1077014744","1077014767","AE" +"1077014768","1077015551","US" +"1077015552","1077015559","GB" +"1077015560","1077015623","US" +"1077015624","1077015631","IN" +"1077015632","1077015831","US" +"1077015832","1077015847","ZA" +"1077015848","1077015871","US" +"1077015872","1077015879","CA" +"1077015880","1077015919","US" +"1077015920","1077015935","GB" +"1077015936","1077017327","US" +"1077017328","1077017335","IN" +"1077017336","1077017439","US" +"1077017440","1077017455","FR" +"1077017456","1077017631","US" +"1077017632","1077017647","VG" +"1077017648","1077018023","US" +"1077018024","1077018031","GB" +"1077018032","1077018079","US" +"1077018080","1077018111","BD" +"1077018112","1077055487","US" +"1077055488","1077059583","CA" +"1077059584","1077383167","US" +"1077383168","1077384191","A1" +"1077384192","1077444607","US" +"1077444608","1077452799","CA" +"1077452800","1077460991","JP" +"1077460992","1077469183","US" +"1077469184","1077477375","CA" +"1077477376","1077506047","US" +"1077506048","1077510143","LS" +"1077510144","1077561327","US" +"1077561328","1077561343","AR" +"1077561344","1077565503","US" +"1077565504","1077565567","AR" +"1077565568","1077567487","US" +"1077567488","1077571583","A2" +"1077571584","1077627167","US" +"1077627168","1077627199","EC" +"1077627200","1077629151","US" +"1077629152","1077629183","CA" +"1077629184","1077629535","US" +"1077629536","1077629567","CA" +"1077629568","1077629903","US" +"1077629904","1077629919","AN" +"1077629920","1077631167","US" +"1077631168","1077631231","NL" +"1077631232","1077632159","US" +"1077632160","1077632191","GB" +"1077632192","1077633823","US" +"1077633824","1077633855","AN" +"1077633856","1077640799","US" +"1077640800","1077640831","EC" +"1077640832","1077641215","US" +"1077641216","1077657599","CA" +"1077657600","1077839103","US" +"1077839104","1077839119","ES" +"1077839120","1077839543","US" +"1077839544","1077839551","ES" +"1077839552","1077840383","US" +"1077840384","1077840639","A1" +"1077840640","1077841151","US" +"1077841152","1077841407","GB" +"1077841408","1077841671","US" +"1077841672","1077841679","ES" +"1077841680","1077843719","US" +"1077843720","1077843727","CN" +"1077843728","1077844383","US" +"1077844384","1077844391","A1" +"1077844392","1077846271","US" +"1077846272","1077846527","JP" +"1077846528","1077848575","US" +"1077848576","1077848831","GR" +"1077848832","1077851375","US" +"1077851376","1077851383","FR" +"1077851384","1077851471","US" +"1077851472","1077851487","HK" +"1077851488","1077852671","US" +"1077852672","1077852927","CA" +"1077852928","1077856015","US" +"1077856016","1077856031","IT" +"1077856032","1077856127","US" +"1077856128","1077856191","AU" +"1077856192","1077856223","IT" +"1077856224","1077857279","US" +"1077857280","1077857535","CA" +"1077857536","1077857567","US" +"1077857568","1077857575","IT" +"1077857576","1077858015","US" +"1077858016","1077858047","CN" +"1077858048","1077858911","US" +"1077858912","1077858943","LV" +"1077858944","1077858975","ZA" +"1077858976","1077859935","US" +"1077859936","1077859951","IT" +"1077859952","1077859967","US" +"1077859968","1077860095","IT" +"1077860096","1077861119","US" +"1077861120","1077861375","IT" +"1077861376","1077863207","US" +"1077863208","1077863215","NG" +"1077863216","1077864703","US" +"1077864704","1077864719","IT" +"1077864720","1077865983","US" +"1077865984","1077866239","CA" +"1077866240","1077867655","US" +"1077867656","1077867663","CK" +"1077867664","1077867775","US" +"1077867776","1077868159","IT" +"1077868160","1077868831","US" +"1077868832","1077868847","AE" +"1077868848","1077869663","US" +"1077869664","1077869671","LV" +"1077869672","1077869759","US" +"1077869760","1077869823","GR" +"1077869824","1077870335","US" +"1077870336","1077870591","CN" +"1077870592","1077936137","US" +"1077936138","1077936141","CN" +"1077936142","1077936149","US" +"1077936150","1077936150","NL" +"1077936151","1077936151","GB" +"1077936152","1077936169","US" +"1077936170","1077936173","CA" +"1077936174","1077936189","US" +"1077936190","1077936193","CA" +"1077936194","1077936201","US" +"1077936202","1077936205","GB" +"1077936206","1077936209","US" +"1077936210","1077936213","GR" +"1077936214","1077936225","US" +"1077936226","1077936229","IN" +"1077936230","1077936233","US" +"1077936234","1077936237","ES" +"1077936238","1077936257","US" +"1077936258","1077936261","AU" +"1077936262","1077936265","IN" +"1077936266","1077936273","US" +"1077936274","1077936277","ES" +"1077936278","1077936297","US" +"1077936298","1077936301","NG" +"1077936302","1077936305","US" +"1077936306","1077936309","ZA" +"1077936310","1077936313","US" +"1077936314","1077936317","BR" +"1077936318","1077936321","US" +"1077936322","1077936325","GB" +"1077936326","1077936329","MX" +"1077936330","1077936345","US" +"1077936346","1077936349","DO" +"1077936350","1077936351","IN" +"1077936352","1077936365","US" +"1077936366","1077936369","NO" +"1077936370","1077936373","GB" +"1077936374","1077936377","US" +"1077936378","1077936381","IE" +"1077936382","1077936401","US" +"1077936402","1077936409","GB" +"1077936410","1077936413","CO" +"1077936414","1077936417","AU" +"1077936418","1077936426","US" +"1077936427","1077936429","TH" +"1077936430","1077936433","US" +"1077936434","1077936437","CZ" +"1077936438","1077936441","NO" +"1077936442","1077936445","US" +"1077936446","1077936449","TW" +"1077936450","1077936453","US" +"1077936454","1077936457","PT" +"1077936458","1077936461","US" +"1077936462","1077936463","GB" +"1077936464","1077936465","US" +"1077936466","1077936469","IN" +"1077936470","1077936473","US" +"1077936474","1077936474","CA" +"1077936475","1077936475","US" +"1077936476","1077936477","GB" +"1077936478","1077936485","US" +"1077936486","1077936489","TR" +"1077936490","1077936493","FR" +"1077936494","1077936501","US" +"1077936502","1077936505","AR" +"1077936506","1077936513","US" +"1077936514","1077936517","BR" +"1077936518","1077936521","US" +"1077936522","1077936525","IN" +"1077936526","1077936529","US" +"1077936530","1077936533","PH" +"1077936534","1077936545","US" +"1077936546","1077936549","MY" +"1077936550","1077936573","US" +"1077936574","1077936577","AR" +"1077936578","1077936593","US" +"1077936594","1077936597","GR" +"1077936598","1077936601","CA" +"1077936602","1077936605","TH" +"1077936606","1077936609","JO" +"1077936610","1077936613","US" +"1077936614","1077936617","UY" +"1077936618","1077936621","US" +"1077936622","1077936622","AU" +"1077936623","1077936630","US" +"1077936631","1077936634","PE" +"1077936635","1077936638","CA" +"1077936639","1077936645","US" +"1077936646","1077936649","HK" +"1077936650","1077936653","CA" +"1077936654","1077936667","US" +"1077936668","1077936671","CA" +"1077936672","1077936683","US" +"1077936684","1077936684","HU" +"1077936685","1077936691","US" +"1077936692","1077936695","IT" +"1077936696","1077936699","OM" +"1077936700","1077936742","US" +"1077936743","1077936743","BE" +"1077936744","1077936759","US" +"1077936760","1077936763","GB" +"1077936764","1077936767","UA" +"1077936768","1077936771","US" +"1077936772","1077936775","IT" +"1077936776","1077936789","US" +"1077936790","1077936793","NG" +"1077936794","1077936797","AU" +"1077936798","1077936801","SI" +"1077936802","1077936805","IT" +"1077936806","1077936818","US" +"1077936819","1077936822","RS" +"1077936823","1077936826","TH" +"1077936827","1077936834","US" +"1077936835","1077936838","VE" +"1077936839","1077936846","US" +"1077936847","1077936850","PK" +"1077936851","1077936854","GB" +"1077936855","1077936859","IN" +"1077936860","1077936871","US" +"1077936872","1077936875","LV" +"1077936876","1077936879","CA" +"1077936880","1077936883","IT" +"1077936884","1077936887","CO" +"1077936888","1077936891","US" +"1077936892","1077936892","OM" +"1077936893","1077936913","US" +"1077936914","1077936917","ES" +"1077936918","1077936921","ID" +"1077936922","1077936945","US" +"1077936946","1077936949","GB" +"1077936950","1077936957","US" +"1077936958","1077936961","MA" +"1077936962","1077936965","TR" +"1077936966","1077936969","SE" +"1077936970","1077936981","US" +"1077936982","1077936985","AR" +"1077936986","1077936989","ES" +"1077936990","1077937005","US" +"1077937006","1077937007","CA" +"1077937008","1077937015","US" +"1077937016","1077937019","CA" +"1077937020","1077937023","GB" +"1077937024","1077937027","DE" +"1077937028","1077937047","US" +"1077937048","1077937051","BZ" +"1077937052","1077937067","US" +"1077937068","1077937071","GB" +"1077937072","1077937079","US" +"1077937080","1077937083","SE" +"1077937084","1077937087","US" +"1077937088","1077937088","BE" +"1077937089","1077937089","CA" +"1077937090","1077937093","IT" +"1077937094","1077937129","US" +"1077937130","1077937133","CA" +"1077937134","1077937137","NG" +"1077937138","1077937145","US" +"1077937146","1077937149","CA" +"1077937150","1077937157","US" +"1077937158","1077937161","TR" +"1077937162","1077937165","NI" +"1077937166","1077937180","US" +"1077937181","1077937184","SA" +"1077937185","1077937196","US" +"1077937197","1077937200","LK" +"1077937201","1077937204","US" +"1077937205","1077937208","AT" +"1077937209","1077937212","US" +"1077937213","1077937214","CA" +"1077937215","1077937222","US" +"1077937223","1077937226","CA" +"1077937227","1077937230","JM" +"1077937231","1077937235","US" +"1077937236","1077937239","JO" +"1077937240","1077937260","US" +"1077937261","1077937269","EE" +"1077937270","1077937273","LV" +"1077937274","1077937289","US" +"1077937290","1077937293","GF" +"1077937294","1077937297","US" +"1077937298","1077937301","GB" +"1077937302","1077937305","US" +"1077937306","1077937309","ES" +"1077937310","1077937335","US" +"1077937336","1077937349","GB" +"1077937350","1077937353","CA" +"1077937354","1077937357","US" +"1077937358","1077937361","CA" +"1077937362","1077937365","US" +"1077937366","1077937369","AR" +"1077937370","1077937394","CA" +"1077937395","1077937398","CN" +"1077937399","1077937402","MX" +"1077937403","1077937417","US" +"1077937418","1077937421","IN" +"1077937422","1077937429","US" +"1077937430","1077937433","TH" +"1077937434","1077937437","GB" +"1077937438","1077937441","CA" +"1077937442","1077937445","US" +"1077937446","1077937447","ES" +"1077937448","1077937449","US" +"1077937450","1077937453","GR" +"1077937454","1077937457","SA" +"1077937458","1077937461","GB" +"1077937462","1077937474","US" +"1077937475","1077937478","DK" +"1077937479","1077937482","MX" +"1077937483","1077937484","US" +"1077937485","1077937485","LK" +"1077937486","1077937502","US" +"1077937503","1077937506","GB" +"1077937507","1077937510","CH" +"1077937511","1077937514","CR" +"1077937515","1077937531","US" +"1077937532","1077937535","IN" +"1077937536","1077937539","ES" +"1077937540","1077937547","AT" +"1077937548","1077937571","US" +"1077937572","1077937575","CY" +"1077937576","1077937577","GB" +"1077937578","1077937597","US" +"1077937598","1077937601","IN" +"1077937602","1077937617","US" +"1077937618","1077937621","IN" +"1077937622","1077937625","GB" +"1077937626","1077937629","IT" +"1077937630","1077937678","US" +"1077937679","1077937682","ZA" +"1077937683","1077937686","US" +"1077937687","1077937690","IN" +"1077937691","1077937702","US" +"1077937703","1077937706","PK" +"1077937707","1077937710","RS" +"1077937711","1077937714","AN" +"1077937715","1077937718","US" +"1077937719","1077937722","IN" +"1077937723","1077937726","AU" +"1077937727","1077937730","SG" +"1077937731","1077937734","US" +"1077937735","1077937738","BA" +"1077937739","1077937742","IL" +"1077937743","1077937750","US" +"1077937751","1077937754","AU" +"1077937755","1077937758","US" +"1077937759","1077937762","NL" +"1077937763","1077937766","US" +"1077937767","1077937770","RU" +"1077937771","1077937802","US" +"1077937803","1077937806","BE" +"1077937807","1077937822","US" +"1077937823","1077937826","GB" +"1077937827","1077937854","US" +"1077937855","1077937862","TH" +"1077937863","1077937866","SA" +"1077937867","1077937870","GB" +"1077937871","1077937878","US" +"1077937879","1077937882","GB" +"1077937883","1077937886","US" +"1077937887","1077937890","GR" +"1077937891","1077937902","US" +"1077937903","1077937906","IN" +"1077937907","1077937933","US" +"1077937934","1077937937","IT" +"1077937938","1077937941","US" +"1077937942","1077937945","NO" +"1077937946","1077937949","MY" +"1077937950","1077937953","CL" +"1077937954","1077937963","US" +"1077937964","1077937967","NO" +"1077937968","1077937975","US" +"1077937976","1077937979","TH" +"1077937980","1077937983","CN" +"1077937984","1077938003","US" +"1077938004","1077938007","TH" +"1077938008","1077938011","US" +"1077938012","1077938021","GB" +"1077938022","1077938025","US" +"1077938026","1077938029","FR" +"1077938030","1077938033","US" +"1077938034","1077938037","SA" +"1077938038","1077938041","AU" +"1077938042","1077938045","US" +"1077938046","1077938049","RU" +"1077938050","1077938073","US" +"1077938074","1077938077","CN" +"1077938078","1077938081","US" +"1077938082","1077938085","IN" +"1077938086","1077938089","US" +"1077938090","1077938093","CA" +"1077938094","1077938121","US" +"1077938122","1077938125","DZ" +"1077938126","1077938129","IN" +"1077938130","1077938133","ID" +"1077938134","1077938137","CA" +"1077938138","1077938141","GB" +"1077938142","1077938145","CA" +"1077938146","1077938149","US" +"1077938150","1077938153","IN" +"1077938154","1077938157","AR" +"1077938158","1077938185","US" +"1077938186","1077938189","PH" +"1077938190","1077938201","US" +"1077938202","1077938205","CA" +"1077938206","1077938209","AR" +"1077938210","1077938221","US" +"1077938222","1077938225","IN" +"1077938226","1077938258","US" +"1077938259","1077938262","PE" +"1077938263","1077938266","US" +"1077938267","1077938269","GB" +"1077938270","1077938277","US" +"1077938278","1077938281","GB" +"1077938282","1077938283","DE" +"1077938284","1077938284","CH" +"1077938285","1077938288","CA" +"1077938289","1077938292","US" +"1077938293","1077938296","GB" +"1077938297","1077938309","US" +"1077938310","1077938313","TH" +"1077938314","1077938321","US" +"1077938322","1077938325","GB" +"1077938326","1077938329","PK" +"1077938330","1077938333","US" +"1077938334","1077938337","MX" +"1077938338","1077938345","US" +"1077938346","1077938349","SA" +"1077938350","1077938357","US" +"1077938358","1077938361","ID" +"1077938362","1077938365","US" +"1077938366","1077938372","IN" +"1077938373","1077938376","DK" +"1077938377","1077938380","IL" +"1077938381","1077938384","LT" +"1077938385","1077938396","US" +"1077938397","1077938400","CA" +"1077938401","1077938404","US" +"1077938405","1077938408","IT" +"1077938409","1077938412","US" +"1077938413","1077938416","PT" +"1077938417","1077938426","US" +"1077938427","1077938430","SE" +"1077938431","1077938437","US" +"1077938438","1077938441","PE" +"1077938442","1077938445","US" +"1077938446","1077938446","BE" +"1077938447","1077938490","US" +"1077938491","1077938494","MT" +"1077938495","1077938506","US" +"1077938507","1077938510","DK" +"1077938511","1077938529","US" +"1077938530","1077938533","NZ" +"1077938534","1077938537","CA" +"1077938538","1077938541","ES" +"1077938542","1077938545","CY" +"1077938546","1077938551","US" +"1077938552","1077938552","ES" +"1077938553","1077938570","US" +"1077938571","1077938571","NL" +"1077938572","1077938572","US" +"1077938573","1077938576","CO" +"1077938577","1077938580","US" +"1077938581","1077938584","CA" +"1077938585","1077938588","US" +"1077938589","1077938592","MX" +"1077938593","1077938596","US" +"1077938597","1077938600","DO" +"1077938601","1077938630","US" +"1077938631","1077938644","IN" +"1077938645","1077938648","US" +"1077938649","1077938652","CA" +"1077938653","1077938656","CN" +"1077938657","1077938660","RO" +"1077938661","1077938664","TR" +"1077938665","1077938668","CA" +"1077938669","1077938672","US" +"1077938673","1077938676","GB" +"1077938677","1077938680","IN" +"1077938681","1077938702","US" +"1077938703","1077938706","ID" +"1077938707","1077938734","GB" +"1077938735","1077938735","PK" +"1077938736","1077938739","EG" +"1077938740","1077938749","NO" +"1077938750","1077938750","NL" +"1077938751","1077938765","US" +"1077938766","1077938769","CN" +"1077938770","1077938777","US" +"1077938778","1077938781","RO" +"1077938782","1077938785","US" +"1077938786","1077938789","GR" +"1077938790","1077938793","CA" +"1077938794","1077938797","IE" +"1077938798","1077938801","SG" +"1077938802","1077938805","US" +"1077938806","1077938809","DK" +"1077938810","1077938813","HK" +"1077938814","1077938829","US" +"1077938830","1077938831","ES" +"1077938832","1077938835","CA" +"1077938836","1077938848","US" +"1077938849","1077938852","IT" +"1077938853","1077938856","ES" +"1077938857","1077938860","EE" +"1077938861","1077938867","IN" +"1077938868","1077938887","US" +"1077938888","1077938891","VI" +"1077938892","1077938895","US" +"1077938896","1077938927","CA" +"1077938928","1077938931","US" +"1077938932","1077938935","MY" +"1077938936","1077938949","US" +"1077938950","1077938969","CA" +"1077938970","1077938981","US" +"1077938982","1077938982","NL" +"1077938983","1077938983","US" +"1077938984","1077938988","CA" +"1077938989","1077938992","ZA" +"1077938993","1077939005","US" +"1077939006","1077939009","BE" +"1077939010","1077939013","ID" +"1077939014","1077939017","GB" +"1077939018","1077939021","TH" +"1077939022","1077939025","GB" +"1077939026","1077939028","TH" +"1077939029","1077939032","US" +"1077939033","1077939036","IE" +"1077939037","1077939044","US" +"1077939045","1077939048","IN" +"1077939049","1077939064","US" +"1077939065","1077939065","TH" +"1077939066","1077939069","CA" +"1077939070","1077939078","US" +"1077939079","1077939082","IN" +"1077939083","1077939086","US" +"1077939087","1077939090","ES" +"1077939091","1077939099","US" +"1077939100","1077939103","ID" +"1077939104","1077939107","PS" +"1077939108","1077939111","GB" +"1077939112","1077939127","US" +"1077939128","1077939131","CA" +"1077939132","1077939135","US" +"1077939136","1077939139","IN" +"1077939140","1077939189","US" +"1077939190","1077939193","CA" +"1077939194","1077939209","US" +"1077939210","1077939210","BE" +"1077939211","1077939218","US" +"1077939219","1077939219","NL" +"1077939220","1077939223","US" +"1077939224","1077939228","BR" +"1077939229","1077939240","US" +"1077939241","1077939244","NL" +"1077939245","1077939251","US" +"1077939252","1077939255","BR" +"1077939256","1077939259","FR" +"1077939260","1077939263","US" +"1077939264","1077939267","MY" +"1077939268","1077939284","US" +"1077939285","1077939288","ES" +"1077939289","1077939292","US" +"1077939293","1077939296","IT" +"1077939297","1077939300","CA" +"1077939301","1077939321","US" +"1077939322","1077939325","CA" +"1077939326","1077939342","US" +"1077939343","1077939346","ID" +"1077939347","1077939350","US" +"1077939351","1077939354","IN" +"1077939355","1077939358","GB" +"1077939359","1077939362","IN" +"1077939363","1077939375","US" +"1077939376","1077939379","AE" +"1077939380","1077939387","US" +"1077939388","1077939391","PK" +"1077939392","1077939395","US" +"1077939396","1077939399","SE" +"1077939400","1077939410","US" +"1077939411","1077939414","CN" +"1077939415","1077939415","US" +"1077939416","1077939423","BE" +"1077939424","1077939439","US" +"1077939440","1077939443","IS" +"1077939444","1077939447","US" +"1077939448","1077939451","IN" +"1077939452","1077939491","US" +"1077939492","1077939495","GB" +"1077939496","1077939523","US" +"1077939524","1077939533","CA" +"1077939534","1077939557","US" +"1077939558","1077939561","MU" +"1077939562","1077939569","US" +"1077939570","1077939574","OM" +"1077939575","1077939582","US" +"1077939583","1077939586","GH" +"1077939587","1077939625","US" +"1077939626","1077939630","UY" +"1077939631","1077939634","GB" +"1077939635","1077939644","US" +"1077939645","1077939648","GR" +"1077939649","1077939683","US" +"1077939684","1077939687","CY" +"1077939688","1077939725","US" +"1077939726","1077939727","DE" +"1077939728","1077939790","US" +"1077939791","1077939794","PE" +"1077939795","1077939823","US" +"1077939824","1077939827","BR" +"1077939828","1077939837","PT" +"1077939838","1077939895","US" +"1077939896","1077939899","GB" +"1077939900","1077939959","US" +"1077939960","1077939963","CA" +"1077939964","1077939973","US" +"1077939974","1077939977","CL" +"1077939978","1077939981","US" +"1077939982","1077939985","MU" +"1077939986","1077939997","US" +"1077939998","1077940001","GB" +"1077940002","1077940005","EG" +"1077940006","1077940072","US" +"1077940073","1077940076","BE" +"1077940077","1077940133","US" +"1077940134","1077940137","IN" +"1077940138","1077940285","US" +"1077940286","1077940289","AU" +"1077940290","1077940378","US" +"1077940379","1077940382","PK" +"1077940383","1077942289","US" +"1077942290","1077942290","CN" +"1077942291","1077942310","US" +"1077942311","1077942314","AU" +"1077942315","1077942342","US" +"1077942343","1077942346","CN" +"1077942347","1077942363","US" +"1077942364","1077942367","AU" +"1077942368","1077942390","US" +"1077942391","1077942398","CA" +"1077942399","1077942411","US" +"1077942412","1077942415","CA" +"1077942416","1077942427","US" +"1077942428","1077942431","CA" +"1077942432","1077942435","SG" +"1077942436","1077942443","US" +"1077942444","1077942447","IN" +"1077942448","1077942456","US" +"1077942457","1077942461","CN" +"1077942462","1077942493","US" +"1077942494","1077942497","MX" +"1077942498","1077942501","VN" +"1077942502","1077942505","IN" +"1077942506","1077942509","GB" +"1077942510","1077942513","AE" +"1077942514","1077942535","US" +"1077942536","1077942539","AU" +"1077942540","1077942543","IN" +"1077942544","1077942544","US" +"1077942545","1077942559","CN" +"1077942560","1077942572","US" +"1077942573","1077942576","CA" +"1077942577","1077942600","US" +"1077942601","1077942604","PE" +"1077942605","1077942608","CO" +"1077942609","1077942612","JP" +"1077942613","1077942616","US" +"1077942617","1077942620","MX" +"1077942621","1077942624","BD" +"1077942625","1077942636","US" +"1077942637","1077942640","AU" +"1077942641","1077942656","US" +"1077942657","1077942660","CA" +"1077942661","1077942672","US" +"1077942673","1077942676","AU" +"1077942677","1077942718","US" +"1077942719","1077942722","CA" +"1077942723","1077942746","US" +"1077942747","1077942750","GB" +"1077942751","1077942754","MY" +"1077942755","1077942758","UA" +"1077942759","1077942762","US" +"1077942763","1077942766","AU" +"1077942767","1077942770","SG" +"1077942771","1077942813","US" +"1077942814","1077942817","OM" +"1077942818","1077942850","US" +"1077942851","1077942854","CN" +"1077942855","1077942858","ID" +"1077942859","1077942867","US" +"1077942868","1077942871","CA" +"1077942872","1077942889","US" +"1077942890","1077942893","ES" +"1077942894","1077942922","US" +"1077942923","1077942926","ZA" +"1077942927","1077942930","CA" +"1077942931","1077942943","US" +"1077942944","1077942947","CA" +"1077942948","1077942960","US" +"1077942961","1077942964","OM" +"1077942965","1077942972","US" +"1077942973","1077942976","CA" +"1077942977","1077942984","US" +"1077942985","1077942988","IN" +"1077942989","1077942992","NZ" +"1077942993","1077943028","US" +"1077943029","1077943038","TH" +"1077943039","1077943045","US" +"1077943046","1077943053","FI" +"1077943054","1077943096","US" +"1077943097","1077943100","AU" +"1077943101","1077943104","US" +"1077943105","1077943108","CN" +"1077943109","1077943109","US" +"1077943110","1077943110","CN" +"1077943111","1077943139","US" +"1077943140","1077943143","IN" +"1077943144","1077943175","US" +"1077943176","1077943179","DO" +"1077943180","1077943183","AU" +"1077943184","1077943191","CA" +"1077943192","1077943224","US" +"1077943225","1077943228","MY" +"1077943229","1077943242","US" +"1077943243","1077943246","IN" +"1077943247","1077943247","US" +"1077943248","1077943251","PK" +"1077943252","1077943270","US" +"1077943271","1077943274","BD" +"1077943275","1077943279","US" +"1077943280","1077943283","CN" +"1077943284","1077943287","SG" +"1077943288","1077943291","TH" +"1077943292","1077943313","US" +"1077943314","1077943314","BE" +"1077943315","1077943318","CN" +"1077943319","1077943378","US" +"1077943379","1077943379","CZ" +"1077943380","1077943406","US" +"1077943407","1077943410","AU" +"1077943411","1077943420","US" +"1077943421","1077943421","CN" +"1077943422","1077943425","US" +"1077943426","1077943426","CN" +"1077943427","1077943430","MY" +"1077943431","1077943503","US" +"1077943504","1077943507","CA" +"1077943508","1077943523","US" +"1077943524","1077943527","AU" +"1077943528","1077943531","US" +"1077943532","1077943535","AU" +"1077943536","1077943539","ID" +"1077943540","1077943540","US" +"1077943541","1077943544","CA" +"1077943545","1077943574","US" +"1077943575","1077943575","BE" +"1077943576","1077943576","CZ" +"1077943577","1077943634","US" +"1077943635","1077943638","ZA" +"1077943639","1077943674","US" +"1077943675","1077943675","CN" +"1077943676","1077943789","US" +"1077943790","1077943790","AU" +"1077943791","1077943794","US" +"1077943795","1077943796","SG" +"1077943797","1077943825","US" +"1077943826","1077943829","HK" +"1077943830","1077943845","US" +"1077943846","1077943849","AU" +"1077943850","1077943853","UA" +"1077943854","1077943867","US" +"1077943868","1077943868","CN" +"1077943869","1077943876","US" +"1077943877","1077943880","CA" +"1077943881","1077943896","US" +"1077943897","1077943897","CN" +"1077943898","1077943901","US" +"1077943902","1077943905","AU" +"1077943906","1077943921","US" +"1077943922","1077943925","AU" +"1077943926","1077943939","US" +"1077943940","1077943940","BE" +"1077943941","1077943944","US" +"1077943945","1077943948","KH" +"1077943949","1077943964","US" +"1077943965","1077943968","IN" +"1077943969","1077943970","US" +"1077943971","1077943972","CN" +"1077943973","1077943976","PK" +"1077943977","1077943984","AU" +"1077943985","1077943992","US" +"1077943993","1077943996","CA" +"1077943997","1077944000","AR" +"1077944001","1077944013","US" +"1077944014","1077944017","IN" +"1077944018","1077944025","US" +"1077944026","1077944028","CN" +"1077944029","1077944058","US" +"1077944059","1077944062","CA" +"1077944063","1077944081","US" +"1077944082","1077944085","CA" +"1077944086","1077944097","US" +"1077944098","1077944101","AU" +"1077944102","1077944127","US" +"1077944128","1077944128","BE" +"1077944129","1077944136","US" +"1077944137","1077944137","BE" +"1077944138","1077944141","PL" +"1077944142","1077944173","US" +"1077944174","1077944177","CA" +"1077944178","1077944181","US" +"1077944182","1077944182","CN" +"1077944183","1077944186","US" +"1077944187","1077944190","PH" +"1077944191","1077944198","US" +"1077944199","1077944202","CA" +"1077944203","1077944210","CN" +"1077944211","1077944218","US" +"1077944219","1077944219","BE" +"1077944220","1077944223","US" +"1077944224","1077944227","CA" +"1077944228","1077944231","US" +"1077944232","1077944235","JP" +"1077944236","1077944243","US" +"1077944244","1077944247","AU" +"1077944248","1077944255","US" +"1077944256","1077944259","TH" +"1077944260","1077944271","US" +"1077944272","1077944275","CA" +"1077944276","1077944279","US" +"1077944280","1077944283","TH" +"1077944284","1077944284","US" +"1077944285","1077944286","RO" +"1077944287","1077944295","US" +"1077944296","1077944299","CZ" +"1077944300","1077944308","US" +"1077944309","1077944312","CN" +"1077944313","1077944316","US" +"1077944317","1077944317","CZ" +"1077944318","1077960751","US" +"1077960752","1077960759","CA" +"1077960760","1077960791","US" +"1077960792","1077960799","CO" +"1077960800","1077968831","US" +"1077968832","1077968839","CA" +"1077968840","1077968847","DK" +"1077968848","1077977087","US" +"1077977088","1077985279","CA" +"1077985280","1077993471","US" +"1077993472","1078001663","CA" +"1078001664","1078067199","US" +"1078067200","1078071295","BS" +"1078071296","1078075391","CA" +"1078075392","1078124543","US" +"1078124544","1078128639","CA" +"1078128640","1078247423","US" +"1078247424","1078251519","CA" +"1078251520","1078252559","US" +"1078252560","1078252591","MX" +"1078252592","1078252639","US" +"1078252640","1078252655","MX" +"1078252656","1078253823","US" +"1078253824","1078253887","MX" +"1078253888","1078280191","US" +"1078280192","1078280583","CA" +"1078280584","1078280591","US" +"1078280592","1078280639","CA" +"1078280640","1078280655","US" +"1078280656","1078280671","CA" +"1078280672","1078280695","US" +"1078280696","1078280895","CA" +"1078280896","1078281087","US" +"1078281088","1078281279","CA" +"1078281280","1078281295","US" +"1078281296","1078281711","CA" +"1078281712","1078281719","US" +"1078281720","1078281735","CA" +"1078281736","1078281743","US" +"1078281744","1078281759","CA" +"1078281760","1078281791","KN" +"1078281792","1078282119","CA" +"1078282120","1078282223","US" +"1078282224","1078282238","CA" +"1078282239","1078282239","US" +"1078282240","1078283015","CA" +"1078283016","1078283023","VG" +"1078283024","1078283103","CA" +"1078283104","1078283111","MX" +"1078283112","1078283119","CA" +"1078283120","1078283135","US" +"1078283136","1078283263","CA" +"1078283264","1078283264","US" +"1078283265","1078283375","CA" +"1078283376","1078283391","MX" +"1078283392","1078283399","US" +"1078283400","1078283407","MX" +"1078283408","1078283423","US" +"1078283424","1078283487","CA" +"1078283488","1078283503","US" +"1078283504","1078283551","CA" +"1078283552","1078283583","US" +"1078283584","1078283647","CA" +"1078283648","1078283679","US" +"1078283680","1078283687","CA" +"1078283688","1078283695","US" +"1078283696","1078283735","CA" +"1078283736","1078283743","US" +"1078283744","1078283751","CA" +"1078283752","1078283775","US" +"1078283776","1078283999","CA" +"1078284000","1078284007","US" +"1078284008","1078284015","CA" +"1078284016","1078284031","US" +"1078284032","1078284159","BS" +"1078284160","1078284255","CA" +"1078284256","1078284351","US" +"1078284352","1078284367","CA" +"1078284368","1078284383","BV" +"1078284384","1078284399","US" +"1078284400","1078284687","CA" +"1078284688","1078284695","US" +"1078284696","1078284703","MX" +"1078284704","1078284719","CA" +"1078284720","1078284735","US" +"1078284736","1078284991","CA" +"1078284992","1078285007","US" +"1078285008","1078285015","CA" +"1078285016","1078285039","US" +"1078285040","1078285167","CA" +"1078285168","1078285175","US" +"1078285176","1078285191","CA" +"1078285192","1078285215","US" +"1078285216","1078285231","CA" +"1078285232","1078285247","US" +"1078285248","1078285255","CA" +"1078285256","1078285279","US" +"1078285280","1078285287","MX" +"1078285288","1078285295","US" +"1078285296","1078285303","CA" +"1078285304","1078285311","US" +"1078285312","1078285639","CA" +"1078285640","1078285647","US" +"1078285648","1078285655","CA" +"1078285656","1078285663","US" +"1078285664","1078285695","CA" +"1078285696","1078285703","MX" +"1078285704","1078285711","US" +"1078285712","1078285935","CA" +"1078285936","1078285943","US" +"1078285944","1078285951","CA" +"1078285952","1078286015","US" +"1078286016","1078286047","CA" +"1078286048","1078286079","US" +"1078286080","1078286111","CA" +"1078286112","1078286115","US" +"1078286116","1078286143","CA" +"1078286144","1078286207","US" +"1078286208","1078286335","CA" +"1078286336","1078286351","US" +"1078286352","1078286367","CA" +"1078286368","1078286463","US" +"1078286464","1078286543","CA" +"1078286544","1078286559","US" +"1078286560","1078286575","TW" +"1078286576","1078286591","CA" +"1078286592","1078286655","US" +"1078286656","1078286687","CA" +"1078286688","1078286751","US" +"1078286752","1078286759","CA" +"1078286760","1078286783","US" +"1078286784","1078286791","MX" +"1078286792","1078286847","US" +"1078286848","1078286975","CA" +"1078286976","1078286991","US" +"1078286992","1078287031","CA" +"1078287032","1078287039","US" +"1078287040","1078287071","CA" +"1078287072","1078287103","US" +"1078287104","1078287183","CA" +"1078287184","1078287231","US" +"1078287232","1078287239","CA" +"1078287240","1078287247","US" +"1078287248","1078287279","CA" +"1078287280","1078287311","US" +"1078287312","1078287327","CA" +"1078287328","1078287343","US" +"1078287344","1078287759","CA" +"1078287760","1078287767","US" +"1078287768","1078287839","CA" +"1078287840","1078287863","US" +"1078287864","1078288383","CA" +"1078288384","1078306559","US" +"1078306560","1078306815","GB" +"1078306816","1078309695","US" +"1078309696","1078309711","GB" +"1078309712","1078309967","US" +"1078309968","1078309999","GB" +"1078310000","1078312255","US" +"1078312256","1078312271","GB" +"1078312272","1078336447","US" +"1078336448","1078336455","HK" +"1078336456","1078336463","US" +"1078336464","1078336479","HK" +"1078336480","1078341807","US" +"1078341808","1078341823","PH" +"1078341824","1078349311","US" +"1078349312","1078349823","PH" +"1078349824","1078428031","US" +"1078428032","1078428159","AU" +"1078428160","1078428255","US" +"1078428256","1078428263","PH" +"1078428264","1078428999","US" +"1078429000","1078429007","MX" +"1078429008","1078429623","US" +"1078429624","1078429631","AU" +"1078429632","1078429695","US" +"1078429696","1078429951","GR" +"1078429952","1078430095","US" +"1078430096","1078430111","AE" +"1078430112","1078430159","US" +"1078430160","1078430167","FJ" +"1078430168","1078430847","US" +"1078430848","1078430855","JP" +"1078430856","1078430911","US" +"1078430912","1078430975","AU" +"1078430976","1078432095","US" +"1078432096","1078432103","JP" +"1078432104","1078432151","US" +"1078432152","1078432159","JP" +"1078432160","1078432223","US" +"1078432224","1078432239","AE" +"1078432240","1078432767","US" +"1078432768","1078432775","GB" +"1078432776","1078432879","US" +"1078432880","1078432887","GB" +"1078432888","1078433311","US" +"1078433312","1078433316","IT" +"1078433317","1078433317","A1" +"1078433318","1078433343","IT" +"1078433344","1078433631","US" +"1078433632","1078433663","CN" +"1078433664","1078434079","US" +"1078434080","1078434087","LV" +"1078434088","1078434271","US" +"1078434272","1078434303","GR" +"1078434304","1078434759","US" +"1078434760","1078434767","BE" +"1078434768","1078434775","US" +"1078434776","1078434783","JP" +"1078434784","1078434927","US" +"1078434928","1078434943","DE" +"1078434944","1078435423","US" +"1078435424","1078435455","HK" +"1078435456","1078435471","US" +"1078435472","1078435479","BM" +"1078435480","1078435871","US" +"1078435872","1078435879","A1" +"1078435880","1078436719","US" +"1078436720","1078436727","JP" +"1078436728","1078436767","US" +"1078436768","1078436799","GB" +"1078436800","1078437471","US" +"1078437472","1078437479","JP" +"1078437480","1078437503","US" +"1078437504","1078437567","IT" +"1078437568","1078437599","HK" +"1078437600","1078438399","US" +"1078438400","1078438655","CA" +"1078438656","1078438911","US" +"1078438912","1078439167","CN" +"1078439168","1078439679","US" +"1078439680","1078439935","NL" +"1078439936","1078440127","US" +"1078440128","1078440159","MX" +"1078440160","1078443799","US" +"1078443800","1078443807","A1" +"1078443808","1078452991","US" +"1078452992","1078453247","AZ" +"1078453248","1078453887","US" +"1078453888","1078453903","AF" +"1078453904","1078453935","US" +"1078453936","1078453951","AT" +"1078453952","1078454559","US" +"1078454560","1078454567","GB" +"1078454568","1078454655","US" +"1078454656","1078454663","UY" +"1078454664","1078454703","US" +"1078454704","1078454719","AT" +"1078454720","1078455343","US" +"1078455344","1078455359","AT" +"1078455360","1078456319","US" +"1078456320","1078460415","CA" +"1078460416","1078517759","US" +"1078517760","1078525951","CA" +"1078525952","1078575359","US" +"1078575360","1078575615","CA" +"1078575616","1078575679","US" +"1078575680","1078575743","AU" +"1078575744","1078575807","US" +"1078575808","1078575871","IN" +"1078575872","1078576639","US" +"1078576640","1078576895","CA" +"1078576896","1078576911","US" +"1078576912","1078576943","IN" +"1078576944","1078577711","US" +"1078577712","1078577727","IN" +"1078577728","1078578751","US" +"1078578752","1078578815","CA" +"1078578816","1078578879","US" +"1078578880","1078578943","IN" +"1078578944","1078580511","US" +"1078580512","1078580543","CA" +"1078580544","1078580703","US" +"1078580704","1078580735","CA" +"1078580736","1078581263","US" +"1078581264","1078581279","IN" +"1078581280","1078581311","US" +"1078581312","1078581327","CR" +"1078581328","1078581359","US" +"1078581360","1078581391","IN" +"1078581392","1078581503","US" +"1078581504","1078581759","CA" +"1078581760","1078600639","US" +"1078600640","1078600647","GB" +"1078600648","1078615679","US" +"1078615680","1078615711","GB" +"1078615712","1078621695","US" +"1078621696","1078621951","IN" +"1078621952","1078651055","US" +"1078651056","1078651071","CA" +"1078651072","1078654431","US" +"1078654432","1078654439","AU" +"1078654440","1078660799","US" +"1078660800","1078660831","CN" +"1078660832","1078661807","US" +"1078661808","1078661823","IN" +"1078661824","1078722559","US" +"1078722560","1078730127","AR" +"1078730128","1078730135","CH" +"1078730136","1078734847","AR" +"1078734848","1078737919","CO" +"1078737920","1078738943","EC" +"1078738944","1078739455","VE" +"1078739456","1078739967","US" +"1078739968","1078743039","PE" +"1078743040","1078746111","CO" +"1078746112","1078747135","PE" +"1078747136","1078749183","CL" +"1078749184","1078750231","PE" +"1078750232","1078750239","CA" +"1078750240","1078751231","PE" +"1078751232","1078753279","CO" +"1078753280","1078755327","AR" +"1078755328","1078757375","PE" +"1078757376","1078757423","CL" +"1078757424","1078757439","EC" +"1078757440","1078767615","CL" +"1078767616","1078768639","CO" +"1078768640","1078769663","CL" +"1078769664","1078771711","CO" +"1078771712","1078773759","EC" +"1078773760","1078775807","PE" +"1078775808","1078777855","CO" +"1078777856","1078780927","EC" +"1078780928","1078782463","US" +"1078782464","1078782719","PA" +"1078782720","1078791215","US" +"1078791216","1078791223","AU" +"1078791224","1078791255","US" +"1078791256","1078791263","CO" +"1078791264","1078791303","US" +"1078791304","1078791311","CA" +"1078791312","1078791319","US" +"1078791320","1078791343","AU" +"1078791344","1078791391","US" +"1078791392","1078791407","MX" +"1078791408","1078791439","US" +"1078791440","1078791447","PK" +"1078791448","1078791471","US" +"1078791472","1078791487","IL" +"1078791488","1078791503","US" +"1078791504","1078791519","MX" +"1078791520","1078791711","US" +"1078791712","1078791727","AU" +"1078791728","1078792015","US" +"1078792016","1078792031","AU" +"1078792032","1078792095","US" +"1078792096","1078792111","AU" +"1078792112","1078792127","IN" +"1078792128","1078792175","US" +"1078792176","1078792191","AU" +"1078792192","1078792511","US" +"1078792512","1078792543","SG" +"1078792544","1078793119","US" +"1078793120","1078793151","CA" +"1078793152","1078793535","US" +"1078793536","1078793599","ZA" +"1078793600","1078793663","US" +"1078793664","1078793727","ZA" +"1078793728","1078794495","US" +"1078794496","1078794559","ZA" +"1078794560","1078794591","US" +"1078794592","1078794623","AU" +"1078794624","1078795159","US" +"1078795160","1078795167","AE" +"1078795168","1078795255","US" +"1078795256","1078795263","MX" +"1078795264","1078795767","US" +"1078795768","1078795775","IN" +"1078795776","1078795783","CA" +"1078795784","1078795807","US" +"1078795808","1078795815","AU" +"1078795816","1078795823","US" +"1078795824","1078795831","CA" +"1078795832","1078795887","US" +"1078795888","1078795895","CA" +"1078795896","1078795903","US" +"1078795904","1078795911","ES" +"1078795912","1078797399","US" +"1078797400","1078797407","CA" +"1078797408","1078797591","US" +"1078797592","1078797599","IN" +"1078797600","1078797703","US" +"1078797704","1078797711","JP" +"1078797712","1078797791","US" +"1078797792","1078797815","IN" +"1078797816","1078797991","US" +"1078797992","1078797999","CA" +"1078798000","1078798071","US" +"1078798072","1078798079","GB" +"1078798080","1078798111","US" +"1078798112","1078798119","CA" +"1078798120","1078798151","US" +"1078798152","1078798159","AU" +"1078798160","1078798183","US" +"1078798184","1078798191","FR" +"1078798192","1078798199","IN" +"1078798200","1078798207","US" +"1078798208","1078798215","IN" +"1078798216","1078798223","GB" +"1078798224","1078798231","GR" +"1078798232","1078798279","US" +"1078798280","1078798287","PK" +"1078798288","1078798447","US" +"1078798448","1078798455","AT" +"1078798456","1078798575","US" +"1078798576","1078798591","AR" +"1078798592","1078798687","US" +"1078798688","1078798703","AU" +"1078798704","1078798911","US" +"1078798912","1078798927","IT" +"1078798928","1078799071","US" +"1078799072","1078799087","CA" +"1078799088","1078799263","US" +"1078799264","1078799295","MX" +"1078799296","1078799423","US" +"1078799424","1078799455","MX" +"1078799456","1078799551","US" +"1078799552","1078799583","ID" +"1078799584","1078799679","US" +"1078799680","1078799743","BR" +"1078799744","1078799999","US" +"1078800000","1078800031","AU" +"1078800032","1078800191","US" +"1078800192","1078800223","IN" +"1078800224","1078800287","US" +"1078800288","1078800319","MX" +"1078800320","1078800799","US" +"1078800800","1078800831","FR" +"1078800832","1078801327","US" +"1078801328","1078801343","CL" +"1078801344","1078808991","US" +"1078808992","1078809023","AU" +"1078809024","1078809647","US" +"1078809648","1078809663","CA" +"1078809664","1078814135","US" +"1078814136","1078814143","HK" +"1078814144","1078814399","US" +"1078814400","1078814415","CA" +"1078814416","1078895103","US" +"1078895104","1078895359","CN" +"1078895360","1078895967","US" +"1078895968","1078895983","CN" +"1078895984","1078945023","US" +"1078945024","1078945279","GB" +"1078945280","1078956799","US" +"1078956800","1078957055","GB" +"1078957056","1079320575","US" +"1079320576","1079320671","CA" +"1079320672","1079320703","US" +"1079320704","1079322191","CA" +"1079322192","1079322199","US" +"1079322200","1079322703","CA" +"1079322704","1079322719","US" +"1079322720","1079322815","CA" +"1079322816","1079322839","US" +"1079322840","1079322847","CA" +"1079322848","1079322863","US" +"1079322864","1079323231","CA" +"1079323232","1079323247","US" +"1079323248","1079323263","CA" +"1079323264","1079323279","US" +"1079323280","1079323311","CA" +"1079323312","1079323327","US" +"1079323328","1079323415","CA" +"1079323416","1079323423","US" +"1079323424","1079323447","CA" +"1079323448","1079323455","US" +"1079323456","1079323583","CA" +"1079323584","1079323599","US" +"1079323600","1079323615","CA" +"1079323616","1079323647","US" +"1079323648","1079324455","CA" +"1079324456","1079324463","US" +"1079324464","1079324799","CA" +"1079324800","1079324831","US" +"1079324832","1079325455","CA" +"1079325456","1079325483","US" +"1079325484","1079325527","CA" +"1079325528","1079325535","US" +"1079325536","1079325547","CA" +"1079325548","1079325559","US" +"1079325560","1079325599","CA" +"1079325600","1079325607","US" +"1079325608","1079325695","CA" +"1079325696","1079325727","US" +"1079325728","1079325871","CA" +"1079325872","1079325887","US" +"1079325888","1079325991","CA" +"1079325992","1079325999","US" +"1079326000","1079327616","CA" +"1079327617","1079327617","US" +"1079327618","1079328503","CA" +"1079328504","1079328511","US" +"1079328512","1079328767","CA" +"1079328768","1079329919","US" +"1079329920","1079329951","CA" +"1079329952","1079354127","US" +"1079354128","1079354143","TR" +"1079354144","1079354239","US" +"1079354240","1079354271","CA" +"1079354272","1079354703","US" +"1079354704","1079354711","CA" +"1079354712","1079355359","US" +"1079355360","1079355367","CA" +"1079355368","1079355967","US" +"1079355968","1079355991","CA" +"1079355992","1079377919","US" +"1079377920","1079378943","CA" +"1079378944","1079379199","US" +"1079379200","1079379455","CA" +"1079379456","1079379711","US" +"1079379712","1079380927","CA" +"1079380928","1079380991","US" +"1079380992","1079381567","CA" +"1079381568","1079381599","US" +"1079381600","1079381631","WS" +"1079381632","1079381759","CA" +"1079381760","1079382271","US" +"1079382272","1079382527","CA" +"1079382528","1079383039","US" +"1079383040","1079383295","VG" +"1079383296","1079383807","US" +"1079383808","1079384063","MH" +"1079384064","1079384319","LR" +"1079384320","1079384575","CA" +"1079384576","1079385087","ZW" +"1079385088","1079385343","US" +"1079385344","1079385471","CA" +"1079385472","1079385599","US" +"1079385600","1079386623","CA" +"1079386624","1079386879","SG" +"1079386880","1079387135","EG" +"1079387136","1079387903","US" +"1079387904","1079388159","PH" +"1079388160","1079389439","CA" +"1079389440","1079389567","US" +"1079389568","1079389695","CA" +"1079389696","1079389951","US" +"1079389952","1079390719","CA" +"1079390720","1079391487","US" +"1079391488","1079391615","CA" +"1079391616","1079391679","US" +"1079391680","1079391743","CA" +"1079391744","1079392255","HT" +"1079392256","1079393791","CA" +"1079393792","1079394047","US" +"1079394048","1079394063","CA" +"1079394064","1079394071","SG" +"1079394072","1079394079","CA" +"1079394080","1079394111","US" +"1079394112","1079394143","AF" +"1079394144","1079394175","CA" +"1079394176","1079394207","US" +"1079394208","1079394239","CA" +"1079394240","1079394303","US" +"1079394304","1079395327","EC" +"1079395328","1079395839","CA" +"1079395840","1079396095","US" +"1079396096","1079396351","CA" +"1079396352","1079397375","MP" +"1079397376","1079397631","MH" +"1079397632","1079397887","CA" +"1079397888","1079398399","US" +"1079398400","1079399583","CA" +"1079399584","1079399599","US" +"1079399600","1079400447","CA" +"1079400448","1079400511","FR" +"1079400512","1079400575","CA" +"1079400576","1079400639","US" +"1079400640","1079400767","CA" +"1079400768","1079400831","US" +"1079400832","1079401215","CA" +"1079401216","1079401471","US" +"1079401472","1079403263","CA" +"1079403264","1079403519","US" +"1079403520","1079403775","CA" +"1079403776","1079403807","US" +"1079403808","1079403903","CA" +"1079403904","1079403935","US" +"1079403936","1079403999","CA" +"1079404000","1079404031","US" +"1079404032","1079404543","CA" +"1079404544","1079405119","US" +"1079405120","1079405407","CA" +"1079405408","1079405439","BD" +"1079405440","1079405567","US" +"1079405568","1079407103","CA" +"1079407104","1079407359","US" +"1079407360","1079407615","CA" +"1079407616","1079408127","US" +"1079408128","1079408383","CA" +"1079408384","1079408415","ZA" +"1079408416","1079408447","US" +"1079408448","1079408639","CA" +"1079408640","1079408895","US" +"1079408896","1079409407","PK" +"1079409408","1079409919","US" +"1079409920","1079410687","CA" +"1079410688","1079410943","US" +"1079410944","1079411199","CA" +"1079411200","1079411455","US" +"1079411456","1079411711","PK" +"1079411712","1079412735","CA" +"1079412736","1079413247","US" +"1079413248","1079413311","CA" +"1079413312","1079413343","US" +"1079413344","1079413375","CA" +"1079413376","1079413407","US" +"1079413408","1079413535","CA" +"1079413536","1079413567","US" +"1079413568","1079414271","CA" +"1079414272","1079415039","US" +"1079415040","1079415295","HN" +"1079415296","1079421951","CA" +"1079421952","1079422207","US" +"1079422208","1079422239","CA" +"1079422240","1079422271","US" +"1079422272","1079425023","CA" +"1079425024","1079425279","US" +"1079425280","1079425535","CA" +"1079425536","1079425551","US" +"1079425552","1079427583","CA" +"1079427584","1079428095","PW" +"1079428096","1079431679","CA" +"1079431680","1079432191","ZM" +"1079432192","1079432703","CA" +"1079432704","1079432959","US" +"1079432960","1079433215","CA" +"1079433216","1079435263","CR" +"1079435264","1079435775","CO" +"1079435776","1079437311","CA" +"1079437312","1079439359","US" +"1079439360","1079442431","CA" +"1079442432","1079442687","US" +"1079442688","1079443199","CA" +"1079443200","1079443231","PW" +"1079443232","1079443327","CA" +"1079443328","1079443455","AU" +"1079443456","1079459839","US" +"1079459840","1079508991","CA" +"1079508992","1079566847","US" +"1079566848","1079567103","GB" +"1079567104","1079567359","US" +"1079567360","1079567615","AU" +"1079567616","1079574527","US" +"1079574528","1079576487","PR" +"1079576488","1079576495","US" +"1079576496","1079578623","PR" +"1079578624","1079585391","US" +"1079585392","1079585407","IN" +"1079585408","1079623679","US" +"1079623680","1079627775","PR" +"1079627776","1079664639","US" +"1079664640","1079668735","CA" +"1079668736","1079827871","US" +"1079827872","1079827887","RU" +"1079827888","1079857887","US" +"1079857888","1079857903","NZ" +"1079857904","1079861247","US" +"1079861248","1079865343","CA" +"1079865344","1079943999","US" +"1079944000","1079944031","AU" +"1079944032","1079944295","US" +"1079944296","1079944303","IL" +"1079944304","1079946271","US" +"1079946272","1079946303","IE" +"1079946304","1079946431","US" +"1079946432","1079946463","CA" +"1079946464","1079953567","US" +"1079953568","1079953599","GB" +"1079953600","1079962879","US" +"1079962880","1079963135","GB" +"1079963136","1080021999","US" +"1080022000","1080022007","GT" +"1080022008","1080030527","US" +"1080030528","1080030591","AR" +"1080030592","1080033279","US" +"1080033280","1080295423","CA" +"1080295424","1080498664","US" +"1080498665","1080498665","EU" +"1080498666","1080501503","US" +"1080501504","1080501759","EU" +"1080501760","1080569730","US" +"1080569731","1080569731","JP" +"1080569732","1080581887","US" +"1080581888","1080582143","AP" +"1080582144","1080610559","US" +"1080610560","1080610815","AU" +"1080610816","1080622079","US" +"1080622080","1080622335","AU" +"1080622336","1080722827","US" +"1080722828","1080722837","IT" +"1080722838","1080722993","US" +"1080722994","1080723003","CA" +"1080723004","1080723113","US" +"1080723114","1080723123","BR" +"1080723124","1080723229","US" +"1080723230","1080723239","GB" +"1080723240","1080723259","US" +"1080723260","1080723269","GB" +"1080723270","1080723359","US" +"1080723360","1080723369","BR" +"1080723370","1080723565","US" +"1080723566","1080723575","AE" +"1080723576","1080724519","US" +"1080724520","1080724539","CA" +"1080724540","1080724875","US" +"1080724876","1080724885","SY" +"1080724886","1080725041","US" +"1080725042","1080725051","QA" +"1080725052","1080725081","US" +"1080725082","1080725091","QA" +"1080725092","1080725171","US" +"1080725172","1080725181","QA" +"1080725182","1080725277","US" +"1080725278","1080725287","CA" +"1080725288","1080725297","NZ" +"1080725298","1080725467","US" +"1080725468","1080725477","LB" +"1080725478","1080725713","US" +"1080725714","1080725723","BE" +"1080725724","1080725929","US" +"1080725930","1080725939","BE" +"1080725940","1080726185","US" +"1080726186","1080726195","JO" +"1080726196","1080726607","US" +"1080726608","1080726617","CA" +"1080726618","1080727129","US" +"1080727130","1080727139","AU" +"1080727140","1080727159","US" +"1080727160","1080727169","CA" +"1080727170","1080727189","US" +"1080727190","1080727199","AU" +"1080727200","1080727741","US" +"1080727742","1080727761","BR" +"1080727762","1080727781","US" +"1080727782","1080727801","GB" +"1080727802","1080728625","US" +"1080728626","1080728655","NZ" +"1080728656","1080728775","US" +"1080728776","1080728805","SE" +"1080728806","1080728881","US" +"1080728882","1080728891","IN" +"1080728892","1080729127","US" +"1080729128","1080729137","UA" +"1080729138","1080729147","US" +"1080729148","1080729157","CA" +"1080729158","1080729177","US" +"1080729178","1080729187","KH" +"1080729188","1080729217","US" +"1080729218","1080729237","KH" +"1080729238","1080729287","US" +"1080729288","1080729297","IT" +"1080729298","1080729629","US" +"1080729630","1080729639","JP" +"1080729640","1080729649","CA" +"1080729650","1080732319","US" +"1080732320","1080732351","QA" +"1080732352","1080733193","US" +"1080733194","1080733203","NZ" +"1080733204","1080733213","LB" +"1080733214","1080733233","US" +"1080733234","1080733243","DK" +"1080733244","1080739007","US" +"1080739008","1080739023","JO" +"1080739024","1080739899","US" +"1080739900","1080739909","IN" +"1080739910","1080740235","US" +"1080740236","1080740255","UA" +"1080740256","1080740551","US" +"1080740552","1080740561","UA" +"1080740562","1080741189","US" +"1080741190","1080741199","GR" +"1080741200","1080741269","US" +"1080741270","1080741279","GR" +"1080741280","1080741289","GB" +"1080741290","1080741495","US" +"1080741496","1080741505","CA" +"1080741506","1080741605","US" +"1080741606","1080741615","SE" +"1080741616","1080741671","US" +"1080741672","1080741681","CA" +"1080741682","1080744211","US" +"1080744212","1080744221","CA" +"1080744222","1080744511","US" +"1080744512","1080744575","NO" +"1080744576","1080746691","US" +"1080746692","1080746723","QA" +"1080746724","1080747333","US" +"1080747334","1080747343","NZ" +"1080747344","1080747353","CA" +"1080747354","1080747503","US" +"1080747504","1080747513","CA" +"1080747514","1080747539","US" +"1080747540","1080747559","CA" +"1080747560","1080747875","US" +"1080747876","1080747885","ES" +"1080747886","1080747915","US" +"1080747916","1080747925","IL" +"1080747926","1080747955","US" +"1080747956","1080747965","ES" +"1080747966","1080747975","US" +"1080747976","1080748005","CA" +"1080748006","1080748063","US" +"1080748064","1080748095","QA" +"1080748096","1080749823","US" +"1080749824","1080749951","CA" +"1080749952","1080750601","US" +"1080750602","1080750611","GB" +"1080750612","1080954879","US" +"1080956774","1080956774","GB" +"1080957952","1080958207","A2" +"1080958208","1080958463","BH" +"1080958464","1080958719","A2" +"1080958720","1080958975","BH" +"1080958976","1080960255","A2" +"1080960256","1080960511","BH" +"1080960512","1080963839","A2" +"1080963840","1080967167","US" +"1080967168","1080968191","A2" +"1080968192","1080968447","BH" +"1080968448","1080969471","A2" +"1080969472","1080969727","BH" +"1080969728","1080972575","A2" +"1080972576","1080972607","ID" +"1080972608","1080975039","A2" +"1080975040","1080975103","BJ" +"1080975104","1080983551","A2" +"1080983552","1080987647","US" +"1080987648","1080988671","A2" +"1080988672","1080989951","US" +"1080989952","1080990207","A2" +"1080990208","1080999935","US" +"1080999936","1081016319","CA" +"1081016320","1081037311","US" +"1081037312","1081037567","CA" +"1081037568","1081038335","US" +"1081038336","1081040895","CA" +"1081040896","1081047580","US" +"1081047581","1081047581","A1" +"1081047582","1081122559","US" +"1081122560","1081122815","VI" +"1081122816","1081212927","US" +"1081212928","1081278463","CA" +"1081278464","1081368607","US" +"1081368608","1081368615","CO" +"1081368616","1081368623","US" +"1081368624","1081368631","CO" +"1081368632","1081368743","US" +"1081368744","1081368767","CO" +"1081368768","1081369119","US" +"1081369120","1081369151","CO" +"1081369152","1081369183","US" +"1081369184","1081369215","CO" +"1081369216","1081369599","US" +"1081369600","1081370111","CO" +"1081370112","1081377079","US" +"1081377080","1081377087","VE" +"1081377088","1081377119","US" +"1081377120","1081377135","VE" +"1081377136","1081377183","US" +"1081377184","1081377199","VE" +"1081377200","1081377247","US" +"1081377248","1081377279","VE" +"1081377280","1081377663","US" +"1081377664","1081377791","VE" +"1081377792","1081377887","US" +"1081377888","1081377919","VE" +"1081377920","1081377935","US" +"1081377936","1081377951","VE" +"1081377952","1081378015","US" +"1081378016","1081378047","VE" +"1081378048","1081378375","US" +"1081378376","1081378399","VE" +"1081378400","1081378495","US" +"1081378496","1081378575","VE" +"1081378576","1081378607","US" +"1081378608","1081378655","VE" +"1081378656","1081379327","US" +"1081379328","1081379839","VE" +"1081379840","1081385215","US" +"1081385216","1081385535","PA" +"1081385536","1081385983","US" +"1081385984","1081385991","PA" +"1081385992","1081385999","US" +"1081386000","1081386015","PA" +"1081386016","1081386047","VE" +"1081386048","1081387519","US" +"1081387520","1081388031","PA" +"1081388032","1081388127","US" +"1081388128","1081388143","PA" +"1081388144","1081388151","PR" +"1081388152","1081391103","US" +"1081391104","1081393151","PA" +"1081393152","1081393407","US" +"1081393408","1081393751","CL" +"1081393752","1081393759","US" +"1081393760","1081393783","CL" +"1081393784","1081393831","US" +"1081393832","1081393839","CL" +"1081393840","1081393887","US" +"1081393888","1081393903","CL" +"1081393904","1081393919","US" +"1081393920","1081397247","CL" +"1081397248","1081397759","US" +"1081397760","1081398783","CL" +"1081398784","1081399295","US" +"1081399296","1081401343","CL" +"1081401344","1081401391","AR" +"1081401392","1081401415","US" +"1081401416","1081401423","AR" +"1081401424","1081401439","US" +"1081401440","1081401471","AR" +"1081401472","1081401567","US" +"1081401568","1081401599","AR" +"1081401600","1081401623","US" +"1081401624","1081401631","AR" +"1081401632","1081401663","US" +"1081401664","1081401735","AR" +"1081401736","1081401743","US" +"1081401744","1081401775","AR" +"1081401776","1081401791","US" +"1081401792","1081401807","AR" +"1081401808","1081401815","US" +"1081401816","1081401823","AR" +"1081401824","1081401855","US" +"1081401856","1081402367","AR" +"1081402368","1081402895","US" +"1081402896","1081403007","AR" +"1081403008","1081403055","US" +"1081403056","1081403103","AR" +"1081403104","1081403119","US" +"1081403120","1081403487","AR" +"1081403488","1081403519","US" +"1081403520","1081403535","AR" +"1081403536","1081403543","US" +"1081403544","1081403551","AR" +"1081403552","1081403615","US" +"1081403616","1081403631","AR" +"1081403632","1081403847","US" +"1081403848","1081403855","AR" +"1081403856","1081403863","US" +"1081403864","1081403871","AR" +"1081403872","1081403903","US" +"1081403904","1081403967","AR" +"1081403968","1081404031","US" +"1081404032","1081404095","AR" +"1081404096","1081405055","US" +"1081405056","1081405119","AR" +"1081405120","1081409791","US" +"1081409792","1081410047","PR" +"1081410048","1081410559","US" +"1081410560","1081411583","PR" +"1081411584","1081413119","US" +"1081413120","1081413375","PR" +"1081413376","1081413423","US" +"1081413424","1081413439","PR" +"1081413440","1081413527","US" +"1081413528","1081413535","CA" +"1081413536","1081413567","US" +"1081413568","1081413575","CA" +"1081413576","1081413583","US" +"1081413584","1081413631","PR" +"1081413632","1081416191","US" +"1081416192","1081416447","PR" +"1081416448","1081419327","US" +"1081419328","1081419391","PR" +"1081419392","1081419423","US" +"1081419424","1081419431","PR" +"1081419432","1081419447","US" +"1081419448","1081419455","PR" +"1081419456","1081419775","US" +"1081419776","1081420287","PR" +"1081420288","1081420319","US" +"1081420320","1081420351","PR" +"1081420352","1081442367","US" +"1081442368","1081442399","CL" +"1081442400","1081442959","US" +"1081442960","1081442967","CL" +"1081442968","1081443327","US" +"1081443328","1081444351","CL" +"1081444352","1081445375","US" +"1081445376","1081446399","CL" +"1081446400","1081460735","US" +"1081460736","1081462783","PA" +"1081462784","1081462815","CO" +"1081462816","1081462847","BR" +"1081462848","1081462919","US" +"1081462920","1081462927","BR" +"1081462928","1081463231","US" +"1081463232","1081463247","BR" +"1081463248","1081463255","US" +"1081463256","1081463263","BR" +"1081463264","1081463287","US" +"1081463288","1081463391","BR" +"1081463392","1081463423","US" +"1081463424","1081463487","BR" +"1081463488","1081479167","US" +"1081479168","1081483247","CA" +"1081483248","1081483255","US" +"1081483256","1081483263","CA" +"1081483264","1081487367","US" +"1081487368","1081487375","A2" +"1081487376","1081487407","US" +"1081487408","1081487519","A2" +"1081487520","1081487583","US" +"1081487584","1081487871","A2" +"1081487872","1081487979","US" +"1081487980","1081487991","A2" +"1081487992","1081488111","US" +"1081488112","1081488119","A2" +"1081488120","1081488123","US" +"1081488124","1081488135","A2" +"1081488136","1081488159","US" +"1081488160","1081488167","A2" +"1081488168","1081488295","US" +"1081488296","1081488303","A2" +"1081488304","1081488335","US" +"1081488336","1081488343","A2" +"1081488344","1081488351","US" +"1081488352","1081488383","A2" +"1081488384","1081489671","US" +"1081489672","1081489679","A2" +"1081489680","1081489687","US" +"1081489688","1081489919","A2" +"1081489920","1081565183","US" +"1081565184","1081573375","CA" +"1081573376","1081581615","US" +"1081581616","1081581623","JP" +"1081581624","1081581695","US" +"1081581696","1081581703","AE" +"1081581704","1081582015","US" +"1081582016","1081582079","GB" +"1081582080","1081582167","US" +"1081582168","1081582175","AE" +"1081582176","1081582183","US" +"1081582184","1081582199","ID" +"1081582200","1081582223","US" +"1081582224","1081582231","JP" +"1081582232","1081582335","US" +"1081582336","1081582343","MY" +"1081582344","1081582567","US" +"1081582568","1081582591","MY" +"1081582592","1081582695","US" +"1081582696","1081582703","MY" +"1081582704","1081583071","US" +"1081583072","1081583103","MY" +"1081583104","1081583551","US" +"1081583552","1081583567","MY" +"1081583568","1081583807","US" +"1081583808","1081583815","AU" +"1081583816","1081583887","US" +"1081583888","1081583911","MY" +"1081583912","1081583919","JP" +"1081583920","1081583999","US" +"1081584000","1081584007","MY" +"1081584008","1081584079","US" +"1081584080","1081584087","MY" +"1081584088","1081584199","US" +"1081584200","1081584223","MY" +"1081584224","1081584463","US" +"1081584464","1081584487","MY" +"1081584488","1081584543","US" +"1081584544","1081584575","MY" +"1081584576","1081585439","US" +"1081585440","1081585455","AE" +"1081585456","1081585503","US" +"1081585504","1081585519","LB" +"1081585520","1081586231","US" +"1081586232","1081586239","IT" +"1081586240","1081586247","AU" +"1081586248","1081587759","US" +"1081587760","1081587767","AU" +"1081587768","1081588543","US" +"1081588544","1081588551","KH" +"1081588552","1081588751","US" +"1081588752","1081588767","AU" +"1081588768","1081589759","US" +"1081589760","1081593855","BB" +"1081593856","1081597951","CA" +"1081597952","1081608191","US" +"1081608192","1081608207","CA" +"1081608208","1081608223","US" +"1081608224","1081608231","CA" +"1081608232","1081608319","US" +"1081608320","1081608327","CA" +"1081608328","1081608335","US" +"1081608336","1081608343","CA" +"1081608344","1081608503","US" +"1081608504","1081608511","CA" +"1081608512","1081608575","US" +"1081608576","1081608583","CA" +"1081608584","1081609823","US" +"1081609824","1081609831","LK" +"1081609832","1081609887","US" +"1081609888","1081609919","IN" +"1081609920","1081611415","US" +"1081611416","1081611423","IN" +"1081611424","1081611511","US" +"1081611512","1081611519","IN" +"1081611520","1081611815","US" +"1081611816","1081611823","IN" +"1081611824","1081611831","US" +"1081611832","1081611839","IN" +"1081611840","1081611847","US" +"1081611848","1081611855","IN" +"1081611856","1081611903","US" +"1081611904","1081611911","IN" +"1081611912","1081611919","US" +"1081611920","1081611927","IN" +"1081611928","1081611935","LK" +"1081611936","1081611943","IN" +"1081611944","1081612015","US" +"1081612016","1081612023","IN" +"1081612024","1081612159","US" +"1081612160","1081612191","IN" +"1081612192","1081612655","US" +"1081612656","1081612663","CA" +"1081612664","1081612671","IN" +"1081612672","1081613351","US" +"1081613352","1081613359","CA" +"1081613360","1081613399","US" +"1081613400","1081613407","CA" +"1081613408","1081613447","US" +"1081613448","1081613455","CA" +"1081613456","1081613543","US" +"1081613544","1081613551","CA" +"1081613552","1081618047","US" +"1081618048","1081618055","ZA" +"1081618056","1081618951","US" +"1081618952","1081618959","GB" +"1081618960","1081619775","US" +"1081619776","1081619791","CA" +"1081619792","1081625671","US" +"1081625672","1081625679","CA" +"1081625680","1081625775","US" +"1081625776","1081625783","CA" +"1081625784","1081630903","US" +"1081630904","1081630911","CA" +"1081630912","1081872663","US" +"1081872664","1081872671","FI" +"1081872672","1081906751","US" +"1081906752","1081906815","IL" +"1081906816","1081911823","US" +"1081911824","1081911831","GB" +"1081911832","1081911935","US" +"1081911936","1081911951","GB" +"1081911952","1081912575","US" +"1081912576","1081912639","DE" +"1081912640","1081927135","US" +"1081927136","1081927143","GB" +"1081927144","1082091263","US" +"1082091264","1082091271","CN" +"1082091272","1082091999","US" +"1082092000","1082092007","CA" +"1082092008","1082093679","US" +"1082093680","1082093695","AU" +"1082093696","1082097055","US" +"1082097056","1082097071","CA" +"1082097072","1082138623","US" +"1082138624","1082139409","A2" +"1082139410","1082139410","ZA" +"1082139411","1082140671","A2" +"1082140672","1082314751","US" +"1082314752","1082315263","CA" +"1082315264","1082315471","US" +"1082315472","1082318847","CA" +"1082318848","1082344080","US" +"1082344081","1082344084","GB" +"1082344085","1082344784","US" +"1082344785","1082344786","HN" +"1082344787","1082345733","US" +"1082345734","1082345737","CA" +"1082345738","1082346510","US" +"1082346511","1082346514","IN" +"1082346515","1082347740","US" +"1082347741","1082347744","IN" +"1082347745","1082347882","US" +"1082347883","1082347886","IN" +"1082347887","1082347892","US" +"1082347893","1082347896","IN" +"1082347897","1082348005","US" +"1082348006","1082348009","IN" +"1082348010","1082348115","US" +"1082348116","1082348123","CA" +"1082348124","1082348319","US" +"1082348320","1082348327","GB" +"1082348328","1082348335","US" +"1082348336","1082348343","GB" +"1082348344","1082348399","US" +"1082348400","1082348407","BE" +"1082348408","1082348415","US" +"1082348416","1082348423","GB" +"1082348424","1082348799","US" +"1082348800","1082348831","CA" +"1082348832","1082349575","US" +"1082349576","1082349583","SA" +"1082349584","1082349591","CA" +"1082349592","1082349615","US" +"1082349616","1082349623","IT" +"1082349624","1082349639","US" +"1082349640","1082349647","GB" +"1082349648","1082349735","US" +"1082349736","1082349743","MY" +"1082349744","1082349767","US" +"1082349768","1082349775","GR" +"1082349776","1082349783","IT" +"1082349784","1082349807","US" +"1082349808","1082349815","GB" +"1082349816","1082350655","US" +"1082350656","1082350671","IT" +"1082350672","1082350911","US" +"1082350912","1082350943","RU" +"1082350944","1082351361","US" +"1082351362","1082351362","SA" +"1082351363","1082419455","US" +"1082419456","1082419711","A2" +"1082419712","1082434239","US" +"1082434240","1082434255","IN" +"1082434256","1082621987","US" +"1082621988","1082621991","ME" +"1082621992","1082679807","US" +"1082683392","1082687487","CA" +"1082687488","1082786591","US" +"1082786592","1082786623","HK" +"1082786624","1082788447","US" +"1082788448","1082788455","SG" +"1082788456","1082788767","US" +"1082788768","1082788799","SG" +"1082788800","1082790143","US" +"1082790144","1082790399","IN" +"1082790400","1082819839","US" +"1082819840","1082820351","IN" +"1082820352","1082885855","US" +"1082885856","1082885887","CA" +"1082885888","1082945535","US" +"1082945536","1082948943","CA" +"1082948944","1082948959","US" +"1082948960","1082949631","CA" +"1082949632","1082952703","US" +"1082952704","1082952959","CA" +"1082952960","1082982399","US" +"1082982400","1083015167","CA" +"1083015168","1083261311","US" +"1083261312","1083261439","A1" +"1083261440","1083264383","US" +"1083264384","1083264447","A1" +"1083264448","1083264463","US" +"1083264464","1083264511","A1" +"1083264512","1083265023","US" +"1083265024","1083265279","CA" +"1083265280","1083396095","US" +"1083396096","1083400191","BM" +"1083400192","1083417727","US" +"1083417728","1083417791","CA" +"1083417792","1083437055","US" +"1083437056","1083441151","CA" +"1083441152","1083486911","US" +"1083486912","1083486943","IS" +"1083486944","1083618602","US" +"1083618603","1083618611","DE" +"1083618612","1083618714","US" +"1083618715","1083618725","BR" +"1083618726","1083619954","US" +"1083619955","1083619986","CY" +"1083619987","1083621375","US" +"1083621376","1083637759","BS" +"1083637760","1083686911","US" +"1083686912","1083703295","CA" +"1083703296","1083738111","US" +"1083738112","1083740159","PR" +"1083740160","1084067583","US" +"1084067584","1084067839","CA" +"1084067840","1085439999","US" +"1085440000","1085448191","CA" +"1085448192","1085456383","US" +"1085456384","1085457919","PR" +"1085457920","1085458175","US" +"1085458176","1085464575","PR" +"1085464576","1085526015","US" +"1085526016","1085530111","CA" +"1085530112","1085538303","US" +"1085538304","1085603839","CA" +"1085603840","1085669656","US" +"1085669657","1085669664","BZ" +"1085669665","1085669794","US" +"1085669795","1085669803","IS" +"1085669804","1085669838","US" +"1085669839","1085669847","FR" +"1085669848","1085670342","US" +"1085670343","1085670351","IS" +"1085670352","1085670455","US" +"1085670456","1085670463","NL" +"1085670464","1085670628","US" +"1085670629","1085670636","GR" +"1085670637","1085670644","GE" +"1085670645","1085671328","US" +"1085671329","1085671336","IR" +"1085671337","1085671688","US" +"1085671689","1085671696","LB" +"1085671697","1085671712","US" +"1085671713","1085671720","AS" +"1085671721","1085672873","US" +"1085672874","1085672881","NL" +"1085672882","1085672969","US" +"1085672970","1085672978","CA" +"1085672979","1085678408","US" +"1085678409","1085678417","CA" +"1085678418","1085679027","US" +"1085679028","1085679045","FR" +"1085679046","1085681695","US" +"1085681696","1085681711","AS" +"1085681712","1085681756","US" +"1085681757","1085681765","EG" +"1085681766","1085681906","US" +"1085681907","1085681915","CA" +"1085681916","1085682331","US" +"1085682332","1085682339","CA" +"1085682340","1085682374","US" +"1085682375","1085682382","HK" +"1085682383","1085682863","US" +"1085682864","1085682872","AS" +"1085682873","1085682914","US" +"1085682915","1085682922","WS" +"1085682923","1085683905","US" +"1085683906","1085683914","TC" +"1085683915","1085684480","US" +"1085684481","1085684734","AS" +"1085684735","1085685225","US" +"1085685226","1085685233","CA" +"1085685234","1085685304","US" +"1085685305","1085685312","SA" +"1085685313","1085685345","US" +"1085685346","1085685353","CA" +"1085685354","1085685574","US" +"1085685575","1085685584","EG" +"1085685585","1085685636","US" +"1085685637","1085685645","SN" +"1085685646","1085685669","US" +"1085685670","1085685685","CA" +"1085685686","1085849599","US" +"1085849600","1085857791","CA" +"1085857792","1085915135","US" +"1085915136","1085923327","PR" +"1085923328","1085926765","US" +"1085926766","1085926766","A1" +"1085926767","1085997055","US" +"1085997056","1086013439","CA" +"1086013440","1086022079","US" +"1086022080","1086022111","CA" +"1086022112","1086022175","US" +"1086022176","1086022207","CA" +"1086022208","1086023175","US" +"1086023176","1086023183","GB" +"1086023184","1086023287","US" +"1086023288","1086023295","NZ" +"1086023296","1086023335","US" +"1086023336","1086023343","RO" +"1086023344","1086025447","US" +"1086025448","1086025455","CA" +"1086025456","1086028663","US" +"1086028664","1086028671","BR" +"1086028672","1086028751","US" +"1086028752","1086028759","BR" +"1086028760","1086309887","US" +"1086309888","1086310143","AU" +"1086310144","1086317823","US" +"1086317824","1086318079","CA" +"1086318080","1086358143","US" +"1086358144","1086358271","PA" +"1086358272","1086359231","US" +"1086359232","1086359295","IL" +"1086359296","1086359615","US" +"1086359616","1086359647","LB" +"1086359648","1086421503","US" +"1086421504","1086422015","MP" +"1086422016","1086476543","US" +"1086476544","1086476607","BM" +"1086476608","1086910335","US" +"1086910336","1086910463","LB" +"1086910464","1086922751","US" +"1086922752","1086923007","CA" +"1086923008","1086923263","NG" +"1086923264","1086930943","CA" +"1086930944","1086941831","US" +"1086941832","1086941835","CA" +"1086941836","1086942079","US" +"1086942080","1086942087","CA" +"1086942088","1086942975","US" +"1086942976","1086943231","CA" +"1086943232","1086955519","US" +"1086955520","1086971903","CA" +"1086971904","1087016959","US" +"1087016960","1087021055","CA" +"1087021056","1087385855","US" +"1087385856","1087386111","EU" +"1087386112","1087419903","US" +"1087419904","1087420159","CA" +"1087420160","1087432599","US" +"1087432600","1087432607","FR" +"1087432608","1087436159","US" +"1087436160","1087436167","CH" +"1087436168","1087440895","US" +"1087440896","1087442943","PR" +"1087442944","1087443551","US" +"1087443552","1087443583","DE" +"1087443584","1087444223","US" +"1087444224","1087444479","GB" +"1087444480","1087464945","US" +"1087464946","1087464949","GB" +"1087464950","1087467291","US" +"1087467292","1087467295","BR" +"1087467296","1087495519","US" +"1087495520","1087495535","TW" +"1087495536","1087496703","US" +"1087496704","1087496959","CA" +"1087496960","1087497855","US" +"1087497856","1087497887","CA" +"1087497888","1087554751","US" +"1087554752","1087554759","IL" +"1087554760","1087608485","US" +"1087608486","1087608486","GB" +"1087608487","1087643723","US" +"1087643724","1087643727","FR" +"1087643728","1087678623","US" +"1087678624","1087678655","GB" +"1087678656","1087686655","US" +"1087686656","1087686911","PR" +"1087686912","1087695319","US" +"1087695320","1087695323","GB" +"1087695324","1087714335","US" +"1087714336","1087714367","NL" +"1087714368","1087715327","US" +"1087715328","1087717375","PA" +"1087717376","1087726096","US" +"1087726097","1087726097","GB" +"1087726098","1087735639","US" +"1087735640","1087735647","GB" +"1087735648","1087746079","US" +"1087746080","1087746083","HK" +"1087746084","1087758335","US" +"1087758336","1087766527","PR" +"1087766528","1087799787","US" +"1087799788","1087799791","CH" +"1087799792","1087825663","US" +"1087825664","1087825919","SA" +"1087825920","1087862783","US" +"1087862784","1087864831","PA" +"1087864832","1087918511","US" +"1087918512","1087918519","PR" +"1087918520","1087950111","US" +"1087950112","1087950119","PR" +"1087950120","1088012767","US" +"1088012768","1088012775","PR" +"1088012776","1088424464","US" +"1088424465","1088424478","AU" +"1088424479","1088450704","US" +"1088450705","1088450718","ES" +"1088450719","1088451760","US" +"1088451761","1088451774","CA" +"1088451775","1088452112","US" +"1088452113","1088452126","CA" +"1088452127","1088452400","US" +"1088452401","1088452414","VE" +"1088452415","1088453024","US" +"1088453025","1088453038","JP" +"1088453039","1088453104","US" +"1088453105","1088453118","CL" +"1088453119","1088453488","US" +"1088453489","1088453502","IE" +"1088453503","1088453536","US" +"1088453537","1088453550","CL" +"1088453551","1088453808","US" +"1088453809","1088453822","AR" +"1088453823","1088453840","US" +"1088453841","1088453854","LB" +"1088453855","1088453856","US" +"1088453857","1088453870","CN" +"1088453871","1088454448","US" +"1088454449","1088454462","LB" +"1088454463","1088473375","US" +"1088473376","1088473391","ES" +"1088473392","1088473695","US" +"1088473696","1088473711","IE" +"1088473712","1088518415","US" +"1088518416","1088518431","HK" +"1088518432","1088518479","US" +"1088518480","1088518495","TH" +"1088518496","1088518927","US" +"1088518928","1088519007","UA" +"1088519008","1088522671","US" +"1088522672","1088522687","CA" +"1088522688","1088522735","US" +"1088522736","1088522751","TH" +"1088522752","1088523199","US" +"1088523200","1088523215","TH" +"1088523216","1088523439","US" +"1088523440","1088523487","JP" +"1088523488","1088524271","US" +"1088524272","1088524286","IN" +"1088524287","1088684031","US" +"1088684032","1088946175","CA" +"1088946176","1088949919","US" +"1088949920","1088949935","CA" +"1088949936","1089053183","US" +"1089053184","1089053439","BR" +"1089053440","1089054343","US" +"1089054344","1089054344","GB" +"1089054345","1089057279","US" +"1089057280","1089057535","EU" +"1089057536","1089058303","US" +"1089058304","1089058439","TW" +"1089058440","1089058440","EU" +"1089058441","1089058559","TW" +"1089058560","1089154847","US" +"1089154848","1089154855","VE" +"1089154856","1089154915","US" +"1089154916","1089154932","AU" +"1089154933","1089154968","US" +"1089154969","1089154977","IN" +"1089154978","1089155011","US" +"1089155012","1089155031","TR" +"1089155032","1089167359","US" +"1089167360","1089171455","CA" +"1089171456","1089171967","A2" +"1089171968","1089172735","US" +"1089172736","1089172839","A2" +"1089172840","1089172863","US" +"1089172864","1089172895","A2" +"1089172896","1089172927","US" +"1089172928","1089172983","A2" +"1089172984","1089172991","US" +"1089172992","1089173119","NL" +"1089173120","1089173247","A2" +"1089173248","1089174271","US" +"1089174272","1089175551","A2" +"1089175552","1089191935","US" +"1089191936","1089192591","CA" +"1089192592","1089192599","IT" +"1089192600","1089196623","CA" +"1089196624","1089196639","US" +"1089196640","1089200127","CA" +"1089200128","1089200751","US" +"1089200752","1089200783","CA" +"1089200784","1089203439","US" +"1089203440","1089203447","AU" +"1089203448","1089204575","US" +"1089204576","1089204607","CA" +"1089204608","1089209471","US" +"1089209472","1089209479","GB" +"1089209480","1089209487","FR" +"1089209488","1089209495","DE" +"1089209496","1089210367","US" +"1089210368","1089210431","JP" +"1089210432","1089210623","US" +"1089210624","1089210879","GB" +"1089210880","1089211391","BR" +"1089211392","1089219839","US" +"1089219840","1089220095","JP" +"1089220096","1089228799","US" +"1089228800","1089229311","GB" +"1089229312","1089231359","US" +"1089231360","1089231391","DE" +"1089231392","1089233919","US" +"1089233920","1089234175","JP" +"1089234176","1089235455","US" +"1089235456","1089235967","GB" +"1089235968","1089249279","US" +"1089249280","1089249535","IE" +"1089249536","1089250070","US" +"1089250071","1089250071","EU" +"1089250072","1089263359","US" +"1089263360","1089263615","FR" +"1089263616","1089263871","GB" +"1089263872","1089264127","EU" +"1089264128","1089264639","FR" +"1089264640","1089265663","US" +"1089265664","1089265919","GB" +"1089265920","1089266431","US" +"1089266432","1089266943","GB" +"1089266944","1089282059","US" +"1089282060","1089282063","CA" +"1089282064","1089282075","US" +"1089282076","1089282079","CA" +"1089282080","1089282095","US" +"1089282096","1089282099","CA" +"1089282100","1089282687","US" +"1089282688","1089282703","A1" +"1089282704","1089282711","CA" +"1089282712","1089285439","US" +"1089285440","1089285455","A1" +"1089285456","1089306623","US" +"1089306624","1089339391","PR" +"1089339392","1089393167","US" +"1089393168","1089393175","CA" +"1089393176","1089393223","US" +"1089393224","1089393231","CA" +"1089393232","1089393295","US" +"1089393296","1089393407","CA" +"1089393408","1089466975","US" +"1089466976","1089466991","CA" +"1089466992","1089468415","US" +"1089468416","1089468671","A2" +"1089468672","1089482927","US" +"1089482928","1089482935","CA" +"1089482936","1089486591","US" +"1089486592","1089486607","CA" +"1089486608","1089488463","US" +"1089488464","1089488479","JP" +"1089488480","1089492351","US" +"1089492352","1089492415","CA" +"1089492416","1089493631","US" +"1089493632","1089493647","CA" +"1089493648","1089503871","US" +"1089503872","1089503879","CA" +"1089503880","1089507159","US" +"1089507160","1089507167","CA" +"1089507168","1089526783","US" +"1089526784","1089527039","VE" +"1089527040","1089552383","US" +"1089552384","1089552391","AU" +"1089552392","1089557551","US" +"1089557552","1089557559","CA" +"1089557560","1089568351","US" +"1089568352","1089568359","CA" +"1089568360","1089574319","US" +"1089574320","1089574327","CA" +"1089574328","1089576623","US" +"1089576624","1089576631","CA" +"1089576632","1089579215","US" +"1089579216","1089579223","VI" +"1089579224","1089579519","US" +"1089579520","1089580031","VE" +"1089580032","1089581287","US" +"1089581288","1089581295","CA" +"1089581296","1089585919","US" +"1089585920","1089585951","CA" +"1089585952","1089587999","US" +"1089588000","1089588015","IN" +"1089588016","1089593615","US" +"1089593616","1089593623","CA" +"1089593624","1089595279","US" +"1089595280","1089595287","CA" +"1089595288","1089596543","US" +"1089596544","1089596575","CA" +"1089596576","1089598975","US" +"1089598976","1089599231","HK" +"1089599232","1089626399","US" +"1089626400","1089626407","CA" +"1089626408","1089626415","US" +"1089626416","1089626431","CA" +"1089626432","1089631055","US" +"1089631056","1089631071","CA" +"1089631072","1089644815","US" +"1089644816","1089644831","GB" +"1089644832","1089696063","US" +"1089696064","1089696071","GB" +"1089696072","1089703455","US" +"1089703456","1089703487","CA" +"1089703488","1089720959","US" +"1089720960","1089720967","CA" +"1089720968","1089721023","US" +"1089721024","1089721087","CA" +"1089721088","1089721503","US" +"1089721504","1089721519","CA" +"1089721520","1089721727","US" +"1089721728","1089721791","CA" +"1089721792","1089723823","US" +"1089723824","1089723831","CA" +"1089723832","1089746999","US" +"1089747000","1089747007","MU" +"1089747008","1089881599","US" +"1089881600","1089882111","GB" +"1089882112","1089882623","US" +"1089882624","1089883135","GB" +"1089883136","1089887231","US" +"1089887232","1089887743","GB" +"1089887744","1089961983","US" +"1089961984","1089970175","CA" +"1089970176","1089974271","PR" +"1089974272","1090146303","US" +"1090146304","1090150399","CA" +"1090150400","1090172495","US" +"1090172496","1090172511","GB" +"1090172512","1090207743","US" +"1090207744","1090215935","CA" +"1090215936","1090355199","US" +"1090355200","1090356327","CA" +"1090356328","1090356335","US" +"1090356336","1090356399","CA" +"1090356400","1090356415","US" +"1090356416","1090357535","CA" +"1090357536","1090357567","US" +"1090357568","1090357663","CA" +"1090357664","1090357679","US" +"1090357680","1090357703","CA" +"1090357704","1090357711","US" +"1090357712","1090357727","CA" +"1090357728","1090357735","US" +"1090357736","1090363391","CA" +"1090363392","1090387967","US" +"1090387968","1090391300","CA" +"1090391301","1090391302","US" +"1090391303","1090391359","CA" +"1090391360","1090391360","US" +"1090391361","1090396159","CA" +"1090396160","1090423759","US" +"1090423760","1090423783","FI" +"1090423784","1090424095","US" +"1090424096","1090424127","FI" +"1090424128","1090424287","US" +"1090424288","1090424319","FI" +"1090424320","1090424831","US" +"1090424832","1090428927","CA" +"1090428928","1090445311","US" +"1090445312","1090447359","CA" +"1090447360","1090447487","US" +"1090447488","1090448127","CA" +"1090448128","1090448255","US" +"1090448256","1090453503","CA" +"1090453504","1090497903","US" +"1090497904","1090497919","AU" +"1090497920","1090499583","US" +"1090499584","1090499839","A2" +"1090499840","1091683357","US" +"1091683358","1091683367","GB" +"1091683368","1091683407","US" +"1091683408","1091683417","BE" +"1091683418","1091683437","US" +"1091683438","1091683447","QA" +"1091683448","1091683593","US" +"1091683594","1091683603","CA" +"1091683604","1091683613","US" +"1091683614","1091683653","CA" +"1091683654","1091683869","US" +"1091683870","1091683889","AU" +"1091683890","1091684879","US" +"1091684880","1091684895","CA" +"1091684896","1091685695","US" +"1091685696","1091685711","QA" +"1091685712","1091685759","US" +"1091685760","1091685887","QA" +"1091685888","1091687167","US" +"1091687168","1091687183","CA" +"1091687184","1091687359","US" +"1091687360","1091687391","CA" +"1091687392","1091687711","US" +"1091687712","1091687727","ES" +"1091687728","1091687743","CO" +"1091687744","1091687807","US" +"1091687808","1091687839","CR" +"1091687840","1091687871","ES" +"1091687872","1091689255","US" +"1091689256","1091689265","GB" +"1091689266","1091689295","US" +"1091689296","1091689305","NZ" +"1091689306","1091689335","US" +"1091689336","1091689345","SI" +"1091689346","1091690495","US" +"1091690496","1091690511","CA" +"1091690512","1091690527","GB" +"1091690528","1091690751","US" +"1091690752","1091690815","GB" +"1091690816","1091691327","US" +"1091691328","1091691359","SA" +"1091691360","1091692347","US" +"1091692348","1091692357","SY" +"1091692358","1091692397","US" +"1091692398","1091692407","NL" +"1091692408","1091692447","US" +"1091692448","1091692457","GB" +"1091692458","1091692573","US" +"1091692574","1091692583","BE" +"1091692584","1091692643","US" +"1091692644","1091692653","PH" +"1091692654","1091692703","US" +"1091692704","1091692713","SI" +"1091692714","1091692723","US" +"1091692724","1091692733","CA" +"1091692734","1091693095","US" +"1091693096","1091693135","NZ" +"1091693136","1091694447","US" +"1091694448","1091694463","BG" +"1091694464","1091694877","US" +"1091694878","1091694887","DE" +"1091694888","1091695007","US" +"1091695008","1091695017","CA" +"1091695018","1091695123","US" +"1091695124","1091695163","CA" +"1091695164","1091695213","US" +"1091695214","1091695223","CA" +"1091695224","1091695283","US" +"1091695284","1091695293","CA" +"1091695294","1091797975","US" +"1091797976","1091797983","A1" +"1091797984","1091798639","US" +"1091798640","1091798647","CN" +"1091798648","1091798783","US" +"1091798784","1091799039","CN" +"1091799040","1091799719","US" +"1091799720","1091799727","SG" +"1091799728","1091800319","US" +"1091800320","1091800327","JP" +"1091800328","1091802111","US" +"1091802112","1091802367","CA" +"1091802368","1091803135","US" +"1091803136","1091803391","CN" +"1091803392","1091803711","US" +"1091803712","1091803775","TH" +"1091803776","1091803871","US" +"1091803872","1091803903","NL" +"1091803904","1091807231","US" +"1091807232","1091807487","CA" +"1091807488","1091807999","US" +"1091808000","1091808511","CA" +"1091808512","1091809375","US" +"1091809376","1091809391","GB" +"1091809392","1091809407","US" +"1091809408","1091809471","JP" +"1091809472","1091812351","US" +"1091812352","1091812607","CN" +"1091812608","1091960831","US" +"1091960832","1092026367","CA" +"1092026368","1092066589","US" +"1092066590","1092066597","KN" +"1092066598","1092067042","US" +"1092067043","1092067050","KN" +"1092067051","1092075519","US" +"1092075520","1092091903","PR" +"1092091904","1092940607","US" +"1092940608","1092940639","AU" +"1092940640","1093017599","US" +"1093017600","1093021695","CA" +"1093021696","1093025791","US" +"1093025792","1093033983","CA" +"1093033984","1093052015","US" +"1093052016","1093052023","CA" +"1093052024","1093052895","US" +"1093052896","1093052911","AR" +"1093052912","1093054127","US" +"1093054128","1093054143","FR" +"1093054144","1093054287","US" +"1093054288","1093054303","GB" +"1093054304","1093055487","US" +"1093055488","1093055871","AR" +"1093055872","1093056095","US" +"1093056096","1093056127","SY" +"1093056128","1093056167","US" +"1093056168","1093056175","RO" +"1093056176","1093056447","US" +"1093056448","1093056463","FR" +"1093056464","1093056479","CA" +"1093056480","1093056511","US" +"1093056512","1093056519","GB" +"1093056520","1093056591","US" +"1093056592","1093056599","CA" +"1093056600","1093057103","US" +"1093057104","1093057119","JP" +"1093057120","1093057263","US" +"1093057264","1093057279","IT" +"1093057280","1093057311","US" +"1093057312","1093057343","CY" +"1093057344","1093057391","US" +"1093057392","1093057407","RO" +"1093057408","1093058095","US" +"1093058096","1093058111","SY" +"1093058112","1093058271","US" +"1093058272","1093058287","SY" +"1093058288","1093058559","US" +"1093058560","1093063167","PR" +"1093063168","1093063679","DO" +"1093063680","1093066751","PR" +"1093066752","1093074943","US" +"1093074944","1093091327","CA" +"1093091328","1093107711","US" +"1093107712","1093107823","CA" +"1093107824","1093107839","US" +"1093107840","1093108223","CA" +"1093108224","1093108479","US" +"1093108480","1093109367","CA" +"1093109368","1093109375","US" +"1093109376","1093109879","CA" +"1093109880","1093109887","US" +"1093109888","1093109967","CA" +"1093109968","1093109983","US" +"1093109984","1093110271","CA" +"1093110272","1093110527","US" +"1093110528","1093110783","CA" +"1093110784","1093110815","US" +"1093110816","1093110847","CA" +"1093110848","1093110911","US" +"1093110912","1093111039","CA" +"1093111040","1093111295","US" +"1093111296","1093111711","CA" +"1093111712","1093111727","US" +"1093111728","1093111743","CA" +"1093111744","1093111759","US" +"1093111760","1093111871","CA" +"1093111872","1093111903","US" +"1093111904","1093111935","CA" +"1093111936","1093111951","US" +"1093111952","1093111959","CA" +"1093111960","1093111967","BV" +"1093111968","1093112431","CA" +"1093112432","1093112479","US" +"1093112480","1093112543","CA" +"1093112544","1093112831","US" +"1093112832","1093112911","CA" +"1093112912","1093112919","US" +"1093112920","1093112959","CA" +"1093112960","1093113087","US" +"1093113088","1093113191","CA" +"1093113192","1093113207","US" +"1093113208","1093113379","CA" +"1093113380","1093113383","US" +"1093113384","1093113487","CA" +"1093113488","1093113503","US" +"1093113504","1093113743","CA" +"1093113744","1093113759","US" +"1093113760","1093113783","CA" +"1093113784","1093113791","US" +"1093113792","1093113847","CA" +"1093113848","1093114623","US" +"1093114624","1093114679","CA" +"1093114680","1093114703","US" +"1093114704","1093114711","CA" +"1093114712","1093114719","VG" +"1093114720","1093114823","CA" +"1093114824","1093114843","US" +"1093114844","1093114847","CA" +"1093114848","1093114863","US" +"1093114864","1093116927","CA" +"1093116928","1093117183","HK" +"1093117184","1093117439","US" +"1093117440","1093117455","CA" +"1093117456","1093117503","US" +"1093117504","1093117519","CA" +"1093117520","1093117527","US" +"1093117528","1093117567","CA" +"1093117568","1093117599","US" +"1093117600","1093117607","CA" +"1093117608","1093117615","US" +"1093117616","1093117631","CA" +"1093117632","1093117647","VG" +"1093117648","1093118207","CA" +"1093118208","1093118463","HK" +"1093118464","1093118495","CA" +"1093118496","1093118527","US" +"1093118528","1093118531","CA" +"1093118532","1093118591","US" +"1093118592","1093118719","CA" +"1093118720","1093118983","US" +"1093118984","1093119007","CA" +"1093119008","1093119015","US" +"1093119016","1093119023","CA" +"1093119024","1093119039","US" +"1093119040","1093119135","CA" +"1093119136","1093119167","US" +"1093119168","1093119311","CA" +"1093119312","1093119327","US" +"1093119328","1093119663","CA" +"1093119664","1093119671","US" +"1093119672","1093119695","CA" +"1093119696","1093119743","US" +"1093119744","1093119831","CA" +"1093119832","1093119839","US" +"1093119840","1093120383","CA" +"1093120384","1093120399","US" +"1093120400","1093120415","BV" +"1093120416","1093120767","CA" +"1093120768","1093120911","US" +"1093120912","1093120943","CA" +"1093120944","1093120959","US" +"1093120960","1093122047","CA" +"1093122048","1093122303","US" +"1093122304","1093122447","CA" +"1093122448","1093122463","US" +"1093122464","1093122495","CA" +"1093122496","1093122535","US" +"1093122536","1093122543","CA" +"1093122544","1093122551","US" +"1093122552","1093122559","CA" +"1093122560","1093122591","US" +"1093122592","1093122655","CA" +"1093122656","1093122671","US" +"1093122672","1093122687","CA" +"1093122688","1093122719","US" +"1093122720","1093122767","CA" +"1093122768","1093122783","US" +"1093122784","1093122791","CA" +"1093122792","1093122799","US" +"1093122800","1093122807","CA" +"1093122808","1093123071","US" +"1093123072","1093123839","CA" +"1093123840","1093123903","US" +"1093123904","1093123935","AN" +"1093123936","1093123943","US" +"1093123944","1093123967","CA" +"1093123968","1093123983","US" +"1093123984","1093123999","VG" +"1093124000","1093124095","US" +"1093124096","1093124287","CA" +"1093124288","1093124351","US" +"1093124352","1093124559","CA" +"1093124560","1093124575","US" +"1093124576","1093124991","CA" +"1093124992","1093125055","US" +"1093125056","1093125711","CA" +"1093125712","1093125719","US" +"1093125720","1093125775","CA" +"1093125776","1093125871","US" +"1093125872","1093126015","CA" +"1093126016","1093126047","US" +"1093126048","1093126063","CA" +"1093126064","1093126079","US" +"1093126080","1093126111","CA" +"1093126112","1093126134","US" +"1093126135","1093126142","CA" +"1093126143","1093126143","US" +"1093126144","1093126399","CA" +"1093126400","1093126431","VG" +"1093126432","1093126535","CA" +"1093126536","1093126543","US" +"1093126544","1093126639","CA" +"1093126640","1093126655","US" +"1093126656","1093126687","CA" +"1093126688","1093126719","US" +"1093126720","1093126751","CA" +"1093126752","1093126767","US" +"1093126768","1093126783","CA" +"1093126784","1093126801","US" +"1093126802","1093126809","CA" +"1093126810","1093126823","US" +"1093126824","1093126839","CA" +"1093126840","1093126911","US" +"1093126912","1093127167","CA" +"1093127168","1093127191","US" +"1093127192","1093127199","CA" +"1093127200","1093127423","US" +"1093127424","1093127455","CA" +"1093127456","1093127551","US" +"1093127552","1093127615","CA" +"1093127616","1093127647","US" +"1093127648","1093127663","CA" +"1093127664","1093127775","US" +"1093127776","1093127791","CA" +"1093127792","1093128191","US" +"1093128192","1093128415","CA" +"1093128416","1093128447","US" +"1093128448","1093129215","CA" +"1093129216","1093130367","US" +"1093130368","1093130415","CA" +"1093130416","1093130431","US" +"1093130432","1093131215","CA" +"1093131216","1093131231","US" +"1093131232","1093131247","VG" +"1093131248","1093131263","CA" +"1093131264","1093131391","US" +"1093131392","1093131487","CA" +"1093131488","1093132287","US" +"1093132288","1093133311","CA" +"1093133312","1093133375","US" +"1093133376","1093134263","CA" +"1093134264","1093134271","US" +"1093134272","1093134335","CA" +"1093134336","1093135359","US" +"1093135360","1093135639","CA" +"1093135640","1093135647","US" +"1093135648","1093136639","CA" +"1093136640","1093136895","US" +"1093136896","1093137351","CA" +"1093137352","1093137359","US" +"1093137360","1093137375","MX" +"1093137376","1093138431","CA" +"1093138432","1093138559","US" +"1093138560","1093138623","CA" +"1093138624","1093139455","US" +"1093139456","1093139583","CA" +"1093139584","1093139647","US" +"1093139648","1093139679","CA" +"1093139680","1093139695","US" +"1093139696","1093140223","CA" +"1093140224","1093671591","US" +"1093671592","1093671599","UY" +"1093671600","1093697535","US" +"1093697536","1093699071","BB" +"1093699072","1093700607","GD" +"1093700608","1093701631","VC" +"1093701632","1093708287","BB" +"1093708288","1093709311","LC" +"1093709312","1093716479","BB" +"1093716480","1093717759","GD" +"1093717760","1093719807","BB" +"1093719808","1093720319","LC" +"1093720320","1093721343","VG" +"1093721344","1093723391","BB" +"1093723392","1093723647","VC" +"1093723648","1093724415","BB" +"1093724416","1093725183","VC" +"1093725184","1093730303","BB" +"1093730304","1093730815","US" +"1093730816","1093731071","A1" +"1093731072","1093733887","US" +"1093733888","1093734143","A1" +"1093734144","1093737247","US" +"1093737248","1093737263","AE" +"1093737264","1093737423","US" +"1093737424","1093737431","GB" +"1093737432","1093740095","US" +"1093740096","1093740159","JP" +"1093740160","1093740335","US" +"1093740336","1093740351","SG" +"1093740352","1093740415","JP" +"1093740416","1093741599","US" +"1093741600","1093741607","ES" +"1093741608","1093743423","US" +"1093743424","1093743487","JP" +"1093743488","1093743743","US" +"1093743744","1093743807","CA" +"1093743808","1093746879","US" +"1093746880","1093746943","DE" +"1093746944","1093747839","US" +"1093747840","1093747903","A1" +"1093747904","1093748799","US" +"1093748800","1093748863","CN" +"1093748864","1094441727","US" +"1094441728","1094441983","A1" +"1094441984","1094549687","US" +"1094549688","1094549695","CA" +"1094549696","1094549783","US" +"1094549784","1094549791","AU" +"1094549792","1094549807","US" +"1094549808","1094549815","UZ" +"1094549816","1094549863","US" +"1094549864","1094549871","BD" +"1094549872","1094549935","US" +"1094549936","1094549943","CA" +"1094549944","1094549951","CY" +"1094549952","1094550223","US" +"1094550224","1094550239","AU" +"1094550240","1094550247","BD" +"1094550248","1094550487","US" +"1094550488","1094550495","RO" +"1094550496","1094550607","US" +"1094550608","1094550615","BD" +"1094550616","1094550679","US" +"1094550680","1094550695","VE" +"1094550696","1094550799","US" +"1094550800","1094550807","NL" +"1094550808","1094550823","US" +"1094550824","1094550831","CA" +"1094550832","1094550847","US" +"1094550848","1094550855","IN" +"1094550856","1094550879","US" +"1094550880","1094550887","NZ" +"1094550888","1094550895","JP" +"1094550896","1094550911","US" +"1094550912","1094550919","JM" +"1094550920","1094550967","US" +"1094550968","1094550975","JM" +"1094550976","1094550991","US" +"1094550992","1094550999","NL" +"1094551000","1094551207","US" +"1094551208","1094551215","GB" +"1094551216","1094551231","AU" +"1094551232","1094551455","US" +"1094551456","1094551471","SE" +"1094551472","1094551839","US" +"1094551840","1094551855","GB" +"1094551856","1094552023","US" +"1094552024","1094552031","IN" +"1094552032","1094552191","US" +"1094552192","1094552199","GB" +"1094552200","1094552239","US" +"1094552240","1094552247","IN" +"1094552248","1094552287","US" +"1094552288","1094552311","NZ" +"1094552312","1094552319","US" +"1094552320","1094552335","IN" +"1094552336","1094552375","US" +"1094552376","1094552383","AE" +"1094552384","1094552527","US" +"1094552528","1094552543","CY" +"1094552544","1094552551","US" +"1094552552","1094552559","NL" +"1094552560","1094553855","US" +"1094553856","1094553863","GB" +"1094553864","1094553927","US" +"1094553928","1094553935","IN" +"1094553936","1094553975","US" +"1094553976","1094553983","NZ" +"1094553984","1094554879","US" +"1094554880","1094554887","LK" +"1094554888","1094554967","US" +"1094554968","1094554975","UZ" +"1094554976","1094555077","US" +"1094555078","1094555081","IN" +"1094555082","1094556191","US" +"1094556192","1094556207","IN" +"1094556208","1094556703","US" +"1094556704","1094556719","CA" +"1094556720","1094556783","US" +"1094556784","1094556799","NZ" +"1094556800","1094557183","US" +"1094557184","1094557199","AU" +"1094557200","1094557271","US" +"1094557272","1094557279","CA" +"1094557280","1094557751","US" +"1094557752","1094557759","GB" +"1094557760","1094558463","US" +"1094558464","1094558471","JP" +"1094558472","1094558751","US" +"1094558752","1094558783","CA" +"1094558784","1094558975","US" +"1094558976","1094558991","BD" +"1094558992","1094559535","US" +"1094559536","1094559551","GB" +"1094559552","1094559623","US" +"1094559624","1094559631","CA" +"1094559632","1094559743","US" +"1094559744","1094559775","AU" +"1094559776","1094559807","US" +"1094559808","1094559903","AU" +"1094559904","1094559919","US" +"1094559920","1094559935","AU" +"1094559936","1094560063","US" +"1094560064","1094560103","FR" +"1094560104","1094560255","US" +"1094560256","1094560263","IN" +"1094560264","1094560279","US" +"1094560280","1094560287","GB" +"1094560288","1094560319","US" +"1094560320","1094560335","IN" +"1094560336","1094560831","US" +"1094560832","1094560863","BD" +"1094560864","1094560895","US" +"1094560896","1094561023","CA" +"1094561024","1094561047","US" +"1094561048","1094561055","CA" +"1094561056","1094561311","US" +"1094561312","1094561319","ES" +"1094561320","1094561327","CA" +"1094561328","1094561399","US" +"1094561400","1094561407","IL" +"1094561408","1094561535","US" +"1094561536","1094561639","HK" +"1094561640","1094561831","US" +"1094561832","1094561839","AU" +"1094561840","1094561855","US" +"1094561856","1094561919","AU" +"1094561920","1094562431","US" +"1094562432","1094562455","TH" +"1094562456","1094562799","US" +"1094562800","1094562807","CA" +"1094562808","1094562879","US" +"1094562880","1094562895","MX" +"1094562896","1094562911","US" +"1094562912","1094562927","DK" +"1094562928","1094563743","US" +"1094563744","1094563775","BD" +"1094563776","1094563887","US" +"1094563888","1094563895","MX" +"1094563896","1094564671","US" +"1094564672","1094564703","BD" +"1094564704","1094565695","US" +"1094565696","1094565727","BD" +"1094565728","1094565887","US" +"1094565888","1094568046","CA" +"1094568047","1094568061","MO" +"1094568062","1094582271","CA" +"1094582272","1095314943","US" +"1095314944","1095314944","A1" +"1095314945","1095450623","US" +"1095450624","1095467007","BS" +"1095467008","1095627775","US" +"1095627776","1095628287","CA" +"1095628288","1096224919","US" +"1096224920","1096224927","CO" +"1096224928","1096278015","US" +"1096278016","1096286207","CA" +"1096286208","1096290879","US" +"1096290880","1096290943","A2" +"1096290944","1096351231","US" +"1096351232","1096351743","A2" +"1096351744","1096518655","US" +"1096518656","1096518911","A2" +"1096518912","1096519167","US" +"1096519168","1096519423","CD" +"1096519424","1096519679","SL" +"1096519680","1096540927","US" +"1096540928","1096541183","A1" +"1096541184","1096548351","US" +"1096548352","1096810495","CA" +"1096810496","1096884223","US" +"1096884224","1096888319","CA" +"1096888320","1096890879","US" +"1096890880","1096891135","GB" +"1096891136","1096925183","US" +"1096925184","1096941567","CA" +"1096941568","1096947471","US" +"1096947472","1096947479","MY" +"1096947480","1096950551","US" +"1096950552","1096950559","CA" +"1096950560","1096952455","US" +"1096952456","1096952463","GB" +"1096952464","1096952519","US" +"1096952520","1096952527","GB" +"1096952528","1096956463","US" +"1096956464","1096956471","GB" +"1096956472","1096956631","US" +"1096956632","1096956639","GB" +"1096956640","1096957247","US" +"1096957248","1096957255","CA" +"1096957256","1096957775","US" +"1096957776","1096957791","IE" +"1096957792","1096959599","US" +"1096959600","1096959607","GB" +"1096959608","1096960767","US" +"1096960768","1096960895","GB" +"1096960896","1096966303","US" +"1096966304","1096966311","IN" +"1096966312","1096968127","US" +"1096968128","1096968159","CA" +"1096968160","1096969071","US" +"1096969072","1096969079","CA" +"1096969080","1096969471","US" +"1096969472","1096969479","IN" +"1096969480","1097056559","US" +"1097056560","1097056575","SE" +"1097056576","1097057623","US" +"1097057624","1097057631","IT" +"1097057632","1097057655","US" +"1097057656","1097057663","NZ" +"1097057664","1097057727","US" +"1097057728","1097057735","NZ" +"1097057736","1097057743","IT" +"1097057744","1097058303","US" +"1097058304","1097058367","IT" +"1097058368","1097059391","US" +"1097059392","1097059399","PR" +"1097059400","1097060351","US" +"1097060352","1097060359","IT" +"1097060360","1097060367","AU" +"1097060368","1097060383","US" +"1097060384","1097060399","IT" +"1097060400","1097060463","US" +"1097060464","1097060471","IT" +"1097060472","1097063663","US" +"1097063664","1097063679","IT" +"1097063680","1097065151","US" +"1097065152","1097065167","CA" +"1097065168","1097067519","US" +"1097067520","1097068031","GB" +"1097068032","1097069055","US" +"1097069056","1097069311","CA" +"1097069312","1097131263","US" +"1097131264","1097131367","CN" +"1097131368","1097131375","US" +"1097131376","1097131423","CN" +"1097131424","1097131439","US" +"1097131440","1097131447","HK" +"1097131448","1097131455","US" +"1097131456","1097131471","CN" +"1097131472","1097727999","US" +"1097728000","1097729151","CA" +"1097729152","1097729167","US" +"1097729168","1097730847","CA" +"1097730848","1097730855","US" +"1097730856","1097731447","CA" +"1097731448","1097731455","GB" +"1097731456","1097736191","CA" +"1097736192","1097768959","US" +"1097768960","1097777151","CA" +"1097777152","1097797631","US" +"1097797632","1097797887","DE" +"1097797888","1097798143","CA" +"1097798144","1097798911","US" +"1097798912","1097799167","IE" +"1097799168","1097830399","US" +"1097830400","1097834495","CA" +"1097834496","1097837197","US" +"1097837198","1097837198","AE" +"1097837199","1097896191","US" +"1097896192","1097896519","VI" +"1097896520","1097896527","US" +"1097896528","1097896711","VI" +"1097896712","1097896719","US" +"1097896720","1097897215","VI" +"1097897216","1097947135","US" +"1097947136","1097947151","VI" +"1097947152","1097947167","US" +"1097947168","1097947207","VI" +"1097947208","1097947215","US" +"1097947216","1097947327","VI" +"1097947328","1097947391","US" +"1097947392","1097947463","VI" +"1097947464","1097947471","US" +"1097947472","1097947519","VI" +"1097947520","1097947527","US" +"1097947528","1097947559","VI" +"1097947560","1097947567","US" +"1097947568","1097947607","VI" +"1097947608","1097947623","US" +"1097947624","1097947639","VI" +"1097947640","1097947647","US" +"1097947648","1097947679","VI" +"1097947680","1097947695","US" +"1097947696","1097947735","VI" +"1097947736","1097947743","US" +"1097947744","1097947751","VI" +"1097947752","1097947775","US" +"1097947776","1097947871","VI" +"1097947872","1097947887","US" +"1097947888","1097947991","VI" +"1097947992","1097947999","US" +"1097948000","1097948015","VI" +"1097948016","1097948031","US" +"1097948032","1097948279","VI" +"1097948280","1097948287","US" +"1097948288","1097948327","VI" +"1097948328","1097948335","US" +"1097948336","1097949007","VI" +"1097949008","1097949055","US" +"1097949056","1097949183","VI" +"1097949184","1097951231","US" +"1097951232","1097951247","VI" +"1097951248","1097951263","US" +"1097951264","1097951359","VI" +"1097951360","1097951375","US" +"1097951376","1097953279","VI" +"1097953280","1098057375","US" +"1098057376","1098057407","CA" +"1098057408","1098187599","US" +"1098187600","1098187607","GB" +"1098187608","1098188047","US" +"1098188048","1098188055","CA" +"1098188056","1098353967","US" +"1098353968","1098353983","CA" +"1098353984","1098382143","US" +"1098382144","1098382175","CA" +"1098382176","1098386775","US" +"1098386776","1098386783","PR" +"1098386784","1098397695","US" +"1098397696","1098398719","A2" +"1098398720","1098398975","US" +"1098398976","1098399743","A2" +"1098399744","1098891575","US" +"1098891576","1098891607","AU" +"1098891608","1098891623","US" +"1098891624","1098891631","AU" +"1098891632","1098891647","US" +"1098891648","1098891679","AU" +"1098891680","1098891711","US" +"1098891712","1098891743","SG" +"1098891744","1098891775","AU" +"1098891776","1098891871","US" +"1098891872","1098891887","AU" +"1098891888","1098891903","US" +"1098891904","1098891935","AU" +"1098891936","1098891967","US" +"1098891968","1098891999","AU" +"1098892000","1098892015","US" +"1098892016","1098892031","AU" +"1098892032","1101041279","US" +"1101041280","1101041407","IN" +"1101041408","1101078455","US" +"1101078456","1101078463","CA" +"1101078464","1101113135","US" +"1101113136","1101113143","CA" +"1101113144","1101118239","US" +"1101118240","1101118271","GB" +"1101118272","1101121535","US" +"1101121536","1101121791","EC" +"1101121792","1101139967","US" +"1101139968","1101140223","PR" +"1101140224","1101177479","US" +"1101177480","1101177487","FR" +"1101177488","1101182975","US" +"1101182976","1101183487","YE" +"1101183488","1101190655","US" +"1101190656","1101191167","EC" +"1101191168","1101224959","US" +"1101224960","1101225215","EC" +"1101225216","1101263103","US" +"1101263104","1101263359","AN" +"1101263360","1101267711","US" +"1101267712","1101267967","CA" +"1101267968","1101289983","US" +"1101289984","1101290239","AN" +"1101290240","1101304063","US" +"1101304064","1101304319","EC" +"1101304320","1101304831","US" +"1101304832","1101305855","HN" +"1101305856","1101306047","US" +"1101306048","1101306079","PR" +"1101306080","1101339887","US" +"1101339888","1101339903","CA" +"1101339904","1101352959","US" +"1101352960","1101355007","HN" +"1101355008","1101357215","US" +"1101357216","1101357223","SE" +"1101357224","1101384415","US" +"1101384416","1101384447","CA" +"1101384448","1101385855","US" +"1101385856","1101385919","DK" +"1101385920","1101402031","US" +"1101402032","1101402047","PR" +"1101402048","1101425919","US" +"1101425920","1101426175","EC" +"1101426176","1101431679","US" +"1101431680","1101431807","AU" +"1101431808","1101440295","US" +"1101440296","1101440303","CA" +"1101440304","1101445775","US" +"1101445776","1101445791","CA" +"1101445792","1101461759","US" +"1101461760","1101462015","AN" +"1101462016","1101469695","US" +"1101469696","1101471743","HN" +"1101471744","1101475839","US" +"1101475840","1101479935","CO" +"1101479936","1101484031","US" +"1101484032","1101488127","CO" +"1101488128","1101492623","US" +"1101492624","1101492639","BE" +"1101492640","1101497535","US" +"1101497536","1101497567","DK" +"1101497568","1101521407","US" +"1101521408","1101521919","AS" +"1101521920","1101523039","US" +"1101523040","1101523071","GB" +"1101523072","1101542399","US" +"1101542400","1101542911","CO" +"1101542912","1101574655","US" +"1101574656","1101575167","EC" +"1101575168","1101617679","US" +"1101617680","1101617687","CA" +"1101617688","1101619247","US" +"1101619248","1101619255","NL" +"1101619256","1101635327","US" +"1101635328","1101635583","HN" +"1101635584","1101650431","US" +"1101650432","1101650943","HN" +"1101650944","1101662951","US" +"1101662952","1101662959","PR" +"1101662960","1101668095","US" +"1101668096","1101668351","EC" +"1101668352","1101676135","US" +"1101676136","1101676143","CA" +"1101676144","1101676543","US" +"1101676544","1101678591","EC" +"1101678592","1101681407","US" +"1101681408","1101681663","NL" +"1101681664","1101685383","US" +"1101685384","1101685391","NL" +"1101685392","1101726407","US" +"1101726408","1101726415","CA" +"1101726416","1101732199","US" +"1101732200","1101732207","CH" +"1101732208","1101750783","US" +"1101750784","1101751295","BM" +"1101751296","1101767679","US" +"1101767680","1101768191","AN" +"1101768192","1101791743","US" +"1101791744","1101791999","A2" +"1101792000","1101792255","US" +"1101792256","1101792767","A2" +"1101792768","1101803519","US" +"1101803520","1101804543","HN" +"1101804544","1101837311","US" +"1101837312","1101837567","EC" +"1101837568","1101856767","US" +"1101856768","1101856775","DK" +"1101856776","1101857295","US" +"1101857296","1101857311","CA" +"1101857312","1101864223","US" +"1101864224","1101864255","BE" +"1101864256","1101869055","US" +"1101869056","1101869567","GH" +"1101869568","1101871103","US" +"1101871104","1101873151","BO" +"1101873152","1101881935","US" +"1101881936","1101881951","GB" +"1101881952","1101905407","US" +"1101905408","1101905663","GH" +"1101905664","1101921407","US" +"1101921408","1101921471","BA" +"1101921472","1101952439","US" +"1101952440","1101952447","CA" +"1101952448","1101983231","US" +"1101983232","1101983743","AN" +"1101983744","1102004223","US" +"1102004224","1102004479","IN" +"1102004480","1102004735","US" +"1102004736","1102004991","IN" +"1102004992","1102005247","US" +"1102005248","1102005503","CA" +"1102005504","1102005759","PK" +"1102005760","1102005823","BE" +"1102005824","1102006271","US" +"1102006272","1102006527","CA" +"1102006528","1102007295","US" +"1102007296","1102007551","PK" +"1102007552","1102007599","US" +"1102007600","1102007615","AR" +"1102007616","1102007679","US" +"1102007680","1102007695","IN" +"1102007696","1102007791","US" +"1102007792","1102007807","VE" +"1102007808","1102008079","US" +"1102008080","1102008087","DO" +"1102008088","1102008095","US" +"1102008096","1102008103","CA" +"1102008104","1102008223","US" +"1102008224","1102008231","CA" +"1102008232","1102008607","US" +"1102008608","1102008639","CA" +"1102008640","1102008671","BE" +"1102008672","1102008735","US" +"1102008736","1102008767","BE" +"1102008768","1102008831","US" +"1102008832","1102008863","BE" +"1102008864","1102010623","US" +"1102010624","1102010879","PK" +"1102010880","1102011647","US" +"1102011648","1102011663","VE" +"1102011664","1102011743","US" +"1102011744","1102011759","TR" +"1102011760","1102011855","US" +"1102011856","1102011871","CR" +"1102011872","1102011887","US" +"1102011888","1102011903","AU" +"1102011904","1102012799","US" +"1102012800","1102012927","IN" +"1102012928","1102012975","US" +"1102012976","1102012991","IN" +"1102012992","1102013167","US" +"1102013168","1102013183","VE" +"1102013184","1102014271","US" +"1102014272","1102014335","IN" +"1102014336","1102014399","CA" +"1102014400","1102016255","US" +"1102016256","1102016287","AR" +"1102016288","1102016351","US" +"1102016352","1102016383","MY" +"1102016384","1102017087","US" +"1102017088","1102017119","DM" +"1102017120","1102018431","US" +"1102018432","1102018495","TZ" +"1102018496","1102019583","US" +"1102019584","1102019711","IN" +"1102019712","1102389247","US" +"1102389248","1102393343","CA" +"1102393344","1102446591","US" +"1102446592","1102448383","HN" +"1102448384","1102449151","US" +"1102449152","1102449407","SV" +"1102449408","1102454527","CR" +"1102454528","1102454783","HN" +"1102454784","1102488123","US" +"1102488124","1102488163","IN" +"1102488164","1102488284","US" +"1102488285","1102488315","IN" +"1102488316","1102494223","US" +"1102494224","1102494227","AU" +"1102494228","1102494262","US" +"1102494263","1102494279","AU" +"1102494280","1102494332","US" +"1102494333","1102494378","AU" +"1102494379","1102495519","US" +"1102495520","1102495527","AU" +"1102495528","1102512127","US" +"1102512128","1102516223","JM" +"1102516224","1103244799","US" +"1103244800","1103245055","EC" +"1103245056","1103475871","US" +"1103475872","1103475879","AF" +"1103475880","1103476223","US" +"1103476224","1103476255","CA" +"1103476256","1103548415","US" +"1103548416","1103550463","BS" +"1103550464","1103586335","US" +"1103586336","1103586351","DE" +"1103586352","1103586367","US" +"1103586368","1103586375","AF" +"1103586376","1103589143","US" +"1103589144","1103589151","AF" +"1103589152","1103603711","US" +"1103603712","1103605759","EC" +"1103605760","1103623167","US" +"1103623168","1103623679","CO" +"1103623680","1103675647","US" +"1103675648","1103675711","AU" +"1103675712","1103675775","US" +"1103675776","1103675903","AU" +"1103675904","1103676159","US" +"1103676160","1103676175","AU" +"1103676176","1103678543","US" +"1103678544","1103678551","PH" +"1103678552","1103678655","US" +"1103678656","1103678719","PH" +"1103678720","1103678831","US" +"1103678832","1103678847","AU" +"1103678848","1103769367","US" +"1103769368","1103769375","LU" +"1103769376","1103929055","US" +"1103929056","1103929063","MX" +"1103929064","1103930879","US" +"1103930880","1103931135","MX" +"1103931136","1103987967","US" +"1103987968","1103988223","BR" +"1103988224","1103992319","US" +"1103992320","1103992575","FI" +"1103992576","1103996927","US" +"1103996928","1103997439","EC" +"1103997440","1104003455","US" +"1104003456","1104003583","PH" +"1104003584","1104033439","US" +"1104033440","1104033471","GB" +"1104033472","1104075703","US" +"1104075704","1104075711","CH" +"1104075712","1104081391","US" +"1104081392","1104081399","PR" +"1104081400","1104082423","US" +"1104082424","1104082431","UM" +"1104082432","1104086175","US" +"1104086176","1104086183","VI" +"1104086184","1104096407","US" +"1104096408","1104096415","DE" +"1104096416","1104166911","US" +"1104166912","1104168959","CO" +"1104168960","1104232743","US" +"1104232744","1104232751","CA" +"1104232752","1104265215","US" +"1104265216","1104265727","PH" +"1104265728","1104357783","US" +"1104357784","1104357791","AF" +"1104357792","1104413695","US" +"1104413696","1104413711","CA" +"1104413712","1104414287","US" +"1104414288","1104414303","CA" +"1104414304","1104492287","US" +"1104492288","1104492543","PH" +"1104492544","1104509479","US" +"1104509480","1104509487","AF" +"1104509488","1104510975","US" +"1104510976","1104511743","EC" +"1104511744","1104559391","US" +"1104559392","1104559399","CA" +"1104559400","1104559487","US" +"1104559488","1104559503","CA" +"1104559504","1104618271","US" +"1104618272","1104618303","CA" +"1104618304","1104629247","US" +"1104629248","1104629759","GH" +"1104629760","1104630975","US" +"1104630976","1104631039","CA" +"1104631040","1104666751","US" +"1104666752","1104666767","CA" +"1104666768","1104708687","US" +"1104708688","1104708703","DE" +"1104708704","1104711439","US" +"1104711440","1104711455","AF" +"1104711456","1104787487","US" +"1104787488","1104787519","GB" +"1104787520","1104842751","US" +"1104842752","1104844799","PR" +"1104844800","1104870919","US" +"1104870920","1104870927","MX" +"1104870928","1104875335","US" +"1104875336","1104875351","AF" +"1104875352","1104881087","US" +"1104881088","1104881151","PH" +"1104881152","1105034495","US" +"1105034496","1105034751","IT" +"1105034752","1105099519","US" +"1105099520","1105099775","EC" +"1105099776","1105140519","US" +"1105140520","1105140527","MX" +"1105140528","1105142463","US" +"1105142464","1105142471","MN" +"1105142472","1105143039","US" +"1105143040","1105143047","MN" +"1105143048","1105153215","US" +"1105153216","1105153279","PH" +"1105153280","1106305663","US" +"1106305664","1106305671","CA" +"1106305672","1106306047","US" +"1106306048","1106306079","CA" +"1106306080","1106307967","US" +"1106307968","1106308031","CA" +"1106308032","1106320175","US" +"1106320176","1106320183","CA" +"1106320184","1106323631","US" +"1106323632","1106323639","AF" +"1106323640","1106323655","US" +"1106323656","1106323663","AF" +"1106323664","1106349599","US" +"1106349600","1106349607","UM" +"1106349608","1106428959","US" +"1106428960","1106428975","UM" +"1106428976","1106441615","US" +"1106441616","1106441623","A2" +"1106441624","1106443623","US" +"1106443624","1106443631","CA" +"1106443632","1106469695","US" +"1106469696","1106469759","CO" +"1106469760","1106469887","US" +"1106469888","1106470911","BS" +"1106470912","1106475007","US" +"1106475008","1106475519","CO" +"1106475520","1106484351","US" +"1106484352","1106484415","PH" +"1106484416","1106495303","US" +"1106495304","1106495319","GB" +"1106495320","1106532887","US" +"1106532888","1106532895","TW" +"1106532896","1106547743","US" +"1106547744","1106547759","DK" +"1106547760","1106567423","US" +"1106567424","1106567455","NZ" +"1106567456","1106605695","US" +"1106605696","1106605703","DE" +"1106605704","1106685047","US" +"1106685048","1106685055","CA" +"1106685056","1106758655","US" +"1106758656","1106759167","EC" +"1106759168","1106759679","CO" +"1106759680","1106767871","US" +"1106767872","1106768383","CO" +"1106768384","1106768895","EC" +"1106768896","1106769919","CO" +"1106769920","1106814719","US" +"1106814720","1106814975","EC" +"1106814976","1107220223","US" +"1107220224","1107220239","FI" +"1107220240","1107240191","US" +"1107240192","1107240447","A1" +"1107240448","1107241215","US" +"1107241216","1107241343","CN" +"1107241344","1107241471","US" +"1107241472","1107241599","CN" +"1107241600","1107243007","US" +"1107243008","1107247103","TC" +"1107247104","1107275775","US" +"1107275776","1107279871","CA" +"1107279872","1107288063","US" +"1107288064","1107292159","CA" +"1107292160","1107701759","US" +"1107701760","1107705855","CA" +"1107705856","1107801367","US" +"1107801368","1107801375","CA" +"1107801376","1107808842","US" +"1107808843","1107808846","PE" +"1107808847","1107808877","US" +"1107808878","1107808881","PE" +"1107808882","1107809850","US" +"1107809851","1107809851","CA" +"1107809852","1107820543","US" +"1107820544","1107853311","ZA" +"1107853312","1107895039","US" +"1107895040","1107895807","GB" +"1107895808","1107898367","US" +"1107898368","1107899903","GB" +"1107899904","1107900671","US" +"1107900672","1107900927","GB" +"1107900928","1107906559","US" +"1107906560","1107906815","GB" +"1107906816","1107907839","US" +"1107907840","1107908095","GB" +"1107908096","1107909375","US" +"1107909376","1107909631","GB" +"1107909632","1107909887","US" +"1107909888","1107910143","GB" +"1107910144","1107927039","US" +"1107927040","1107927551","GB" +"1107927552","1107935743","US" +"1107935744","1107936767","GB" +"1107936768","1107946495","US" +"1107946496","1107947007","GB" +"1107947008","1107947775","US" +"1107947776","1107948031","GB" +"1107948032","1107948543","US" +"1107948544","1107948799","GB" +"1107948800","1108025343","US" +"1108025344","1108029439","CA" +"1108029440","1108033535","US" +"1108033536","1108041727","CA" +"1108041728","1108054015","US" +"1108054016","1108054279","CA" +"1108054280","1108054287","FR" +"1108054288","1108054303","CA" +"1108054304","1108054319","US" +"1108054320","1108054527","CA" +"1108054528","1108054543","US" +"1108054544","1108054687","CA" +"1108054688","1108054695","US" +"1108054696","1108054751","CA" +"1108054752","1108054767","US" +"1108054768","1108055039","CA" +"1108055040","1108055103","US" +"1108055104","1108055399","CA" +"1108055400","1108055407","US" +"1108055408","1108055423","CA" +"1108055424","1108055439","US" +"1108055440","1108055455","CA" +"1108055456","1108055471","US" +"1108055472","1108055519","CA" +"1108055520","1108055551","US" +"1108055552","1108055903","CA" +"1108055904","1108055919","US" +"1108055920","1108055967","CA" +"1108055968","1108055983","US" +"1108055984","1108056127","PA" +"1108056128","1108056191","US" +"1108056192","1108056207","CA" +"1108056208","1108056215","GB" +"1108056216","1108056223","CA" +"1108056224","1108056255","US" +"1108056256","1108056287","CA" +"1108056288","1108056319","CR" +"1108056320","1108056351","CA" +"1108056352","1108056383","US" +"1108056384","1108056407","CA" +"1108056408","1108056415","US" +"1108056416","1108056579","CA" +"1108056580","1108056581","US" +"1108056582","1108056671","CA" +"1108056672","1108056703","US" +"1108056704","1108056727","CA" +"1108056728","1108056735","US" +"1108056736","1108056783","CA" +"1108056784","1108056791","CR" +"1108056792","1108056799","GB" +"1108056800","1108057071","CA" +"1108057072","1108057079","NL" +"1108057080","1108057087","US" +"1108057088","1108057135","CA" +"1108057136","1108057151","US" +"1108057152","1108057215","CA" +"1108057216","1108057239","US" +"1108057240","1108057335","CA" +"1108057336","1108057343","GB" +"1108057344","1108057383","CA" +"1108057384","1108057391","US" +"1108057392","1108057503","CA" +"1108057504","1108057519","BS" +"1108057520","1108057535","US" +"1108057536","1108066303","CA" +"1108066304","1108492287","US" +"1108492288","1108500479","ZA" +"1108500480","1108525055","US" +"1108525056","1108541439","CA" +"1108541440","1108861679","US" +"1108861680","1108861687","LK" +"1108861688","1108862271","US" +"1108862272","1108862335","LT" +"1108862336","1109250860","US" +"1109250861","1109250868","PH" +"1109250869","1109252455","US" +"1109252456","1109252463","AU" +"1109252464","1109639199","US" +"1109639200","1109639215","IN" +"1109639216","1109641663","US" +"1109641664","1109641679","JP" +"1109641680","1109642367","US" +"1109642368","1109642383","IL" +"1109642384","1109642415","US" +"1109642416","1109642431","IL" +"1109642432","1109642583","US" +"1109642584","1109642591","DE" +"1109642592","1109643303","US" +"1109643304","1109643311","DE" +"1109643312","1109643519","US" +"1109643520","1109643551","CA" +"1109643552","1109647231","US" +"1109647232","1109647247","AU" +"1109647248","1109648319","US" +"1109648320","1109648335","JP" +"1109648336","1109648927","US" +"1109648928","1109648943","AU" +"1109648944","1109650639","US" +"1109650640","1109650655","AU" +"1109650656","1109688319","US" +"1109688320","1109696511","CA" +"1109696512","1109705727","US" +"1109705728","1109705743","CG" +"1109705744","1109705759","US" +"1109705760","1109705791","CD" +"1109705792","1109705823","US" +"1109705824","1109705839","CD" +"1109705840","1109705855","US" +"1109705856","1109705928","CD" +"1109705929","1109705929","LB" +"1109705930","1109705983","CD" +"1109705984","1109707007","US" +"1109707008","1109707263","JM" +"1109707264","1109707519","US" +"1109707520","1109707775","MW" +"1109707776","1109708639","US" +"1109708640","1109708671","HT" +"1109708672","1109709823","US" +"1109709824","1109710847","ZM" +"1109710848","1109711175","US" +"1109711176","1109711183","HT" +"1109711184","1109712767","US" +"1109712768","1109712895","A2" +"1109712896","1109738495","US" +"1109738496","1109738623","VA" +"1109738624","1109774175","US" +"1109774176","1109774183","CA" +"1109774184","1109776575","US" +"1109776576","1109776607","CN" +"1109776608","1109776615","CA" +"1109776616","1109819391","US" +"1109819392","1109842111","CA" +"1109842112","1109842143","US" +"1109842144","1109848831","CA" +"1109848832","1109849087","A1" +"1109849088","1109852159","CA" +"1109852160","1109902415","US" +"1109902416","1109902431","CY" +"1109902432","1109902511","US" +"1109902512","1109902527","CY" +"1109902528","1109918463","US" +"1109918464","1109918719","GB" +"1109918720","1109919743","US" +"1109919744","1109919999","GB" +"1109920000","1109923135","US" +"1109923136","1109923151","BG" +"1109923152","1109923183","US" +"1109923184","1109923199","SK" +"1109923200","1109923279","US" +"1109923280","1109923295","GB" +"1109923296","1109923647","US" +"1109923648","1109923711","CA" +"1109923712","1109925503","US" +"1109925504","1109925567","GB" +"1109925568","1109927167","US" +"1109927168","1109927423","AU" +"1109927424","1109934591","US" +"1109934592","1109934847","GB" +"1109934848","1109952599","US" +"1109952600","1109952607","JP" +"1109952608","1109952623","US" +"1109952624","1109952631","GB" +"1109952632","1109954167","US" +"1109954168","1109954175","VE" +"1109954176","1109954351","US" +"1109954352","1109954367","ES" +"1109954368","1110126591","US" +"1110126592","1110130687","CA" +"1110130688","1110307903","US" +"1110307904","1110307967","AU" +"1110307968","1110310911","US" +"1110310912","1110376447","CA" +"1110376448","1110415929","US" +"1110415930","1110415930","A1" +"1110415931","1110441983","US" +"1110441984","1110442239","CA" +"1110442240","1110442303","US" +"1110442304","1110442367","CA" +"1110442368","1110442431","US" +"1110442432","1110442719","CA" +"1110442720","1110442751","US" +"1110442752","1110442863","CA" +"1110442864","1110443007","US" +"1110443008","1110443295","CA" +"1110443296","1110443327","US" +"1110443328","1110443551","CA" +"1110443552","1110443711","US" +"1110443712","1110443719","CA" +"1110443720","1110443903","US" +"1110443904","1110444031","CA" +"1110444032","1110444287","US" +"1110444288","1110444799","CA" +"1110444800","1110445055","US" +"1110445056","1110446655","CA" +"1110446656","1110446719","IL" +"1110446720","1110446847","CA" +"1110446848","1110446975","US" +"1110446976","1110447039","CA" +"1110447040","1110447103","US" +"1110447104","1110448383","CA" +"1110448384","1110448639","US" +"1110448640","1110449055","CA" +"1110449056","1110449151","US" +"1110449152","1110449703","CA" +"1110449704","1110449719","US" +"1110449720","1110449735","CA" +"1110449736","1110449751","US" +"1110449752","1110449783","CA" +"1110449784","1110449791","US" +"1110449792","1110449799","CA" +"1110449800","1110449807","US" +"1110449808","1110449879","CA" +"1110449880","1110449895","US" +"1110449896","1110449943","CA" +"1110449944","1110449967","US" +"1110449968","1110449975","CA" +"1110449976","1110450031","US" +"1110450032","1110450071","CA" +"1110450072","1110450175","US" +"1110450176","1110451327","CA" +"1110451328","1110451455","US" +"1110451456","1110451711","CA" +"1110451712","1110451967","US" +"1110451968","1110453247","CA" +"1110453248","1110454271","US" +"1110454272","1110455295","CA" +"1110455296","1110458367","US" +"1110458368","1110458415","CA" +"1110458416","1110458431","US" +"1110458432","1110458479","CA" +"1110458480","1110458495","US" +"1110458496","1110458575","CA" +"1110458576","1110458639","US" +"1110458640","1110458687","CA" +"1110458688","1110458703","US" +"1110458704","1110458735","CA" +"1110458736","1110458767","US" +"1110458768","1110458783","CA" +"1110458784","1110458831","US" +"1110458832","1110458847","CA" +"1110458848","1110458879","US" +"1110458880","1110458927","CA" +"1110458928","1110458943","US" +"1110458944","1110459007","CA" +"1110459008","1110459023","US" +"1110459024","1110459071","CA" +"1110459072","1110459087","US" +"1110459088","1110459151","CA" +"1110459152","1110459167","US" +"1110459168","1110459183","CA" +"1110459184","1110459199","US" +"1110459200","1110459215","CA" +"1110459216","1110459311","US" +"1110459312","1110459343","CA" +"1110459344","1110459391","US" +"1110459392","1110459423","CA" +"1110459424","1110459455","US" +"1110459456","1110459743","CA" +"1110459744","1110459903","US" +"1110459904","1110459967","CA" +"1110459968","1110460223","US" +"1110460224","1110460319","CA" +"1110460320","1110460383","US" +"1110460384","1110460447","CA" +"1110460448","1110460479","US" +"1110460480","1110460639","CA" +"1110460640","1110460671","US" +"1110460672","1110460719","CA" +"1110460720","1110460743","US" +"1110460744","1110460775","CA" +"1110460776","1110460783","US" +"1110460784","1110460831","CA" +"1110460832","1110460863","US" +"1110460864","1110460887","CA" +"1110460888","1110460903","US" +"1110460904","1110460911","CA" +"1110460912","1110460935","US" +"1110460936","1110460999","CA" +"1110461000","1110461183","US" +"1110461184","1110461375","CA" +"1110461376","1110461439","US" +"1110461440","1110461823","CA" +"1110461824","1110462079","US" +"1110462080","1110462271","CA" +"1110462272","1110462335","US" +"1110462336","1110462719","CA" +"1110462720","1110462847","US" +"1110462848","1110463103","CA" +"1110463104","1110463231","US" +"1110463232","1110463487","CA" +"1110463488","1110463999","US" +"1110464000","1110464767","CA" +"1110464768","1110464895","US" +"1110464896","1110464959","CA" +"1110464960","1110465023","US" +"1110465024","1110465535","CA" +"1110465536","1110466047","US" +"1110466048","1110466303","CA" +"1110466304","1110466559","US" +"1110466560","1110466567","CA" +"1110466568","1110466815","US" +"1110466816","1110466847","CA" +"1110466848","1110467583","US" +"1110467584","1110467711","CA" +"1110467712","1110472447","US" +"1110472448","1110473727","CA" +"1110473728","1110473983","US" +"1110473984","1110474303","CA" +"1110474304","1110474495","US" +"1110474496","1110474751","CA" +"1110474752","1110540287","US" +"1110540288","1110573055","CA" +"1110573056","1110587391","PR" +"1110587392","1110595776","US" +"1110595777","1110638591","PR" +"1110638592","1110654463","US" +"1110654464","1110654719","HT" +"1110654720","1110663167","US" +"1110663168","1110675455","CA" +"1110675456","1110679551","US" +"1110679552","1110683423","CA" +"1110683424","1110683431","US" +"1110683432","1110683647","CA" +"1110683648","1110700031","US" +"1110700032","1110704127","CA" +"1110704128","1110855679","US" +"1110855680","1110856703","CN" +"1110856704","1110857727","IN" +"1110857728","1110858751","SG" +"1110858752","1110863871","US" +"1110863872","1110865919","JM" +"1110865920","1110867455","KY" +"1110867456","1110867967","JM" +"1110867968","1110870815","US" +"1110870816","1110870847","HK" +"1110870848","1110870919","US" +"1110870920","1110870927","JP" +"1110870928","1110887423","US" +"1110887424","1110887679","IE" +"1110887680","1110929407","US" +"1110929408","1110933503","BM" +"1110933504","1110940751","US" +"1110940752","1110940767","A1" +"1110940768","1111195647","US" +"1111195648","1111212031","CA" +"1111212032","1111228415","US" +"1111228416","1111244799","AR" +"1111244800","1111888905","US" +"1111888906","1111888915","IN" +"1111888916","1111900223","US" +"1111900224","1111900287","NL" +"1111900288","1111901805","US" +"1111901806","1111901815","GB" +"1111901816","1112357375","US" +"1112357376","1112357503","CA" +"1112357504","1112360959","US" +"1112360960","1112361023","CA" +"1112361024","1112432639","US" +"1112432640","1112440831","CA" +"1112440832","1112530943","US" +"1112530944","1112539135","CA" +"1112539136","1112900287","US" +"1112900288","1112900351","GB" +"1112900352","1112900711","US" +"1112900712","1112900719","MV" +"1112900720","1112900863","US" +"1112900864","1112902143","A1" +"1112902144","1112902655","US" +"1112902656","1112902911","A1" +"1112902912","1112903711","US" +"1112903712","1112903719","TR" +"1112903720","1112903935","US" +"1112903936","1112903999","GB" +"1112904000","1112904447","US" +"1112904448","1112904511","GB" +"1112904512","1112905407","US" +"1112905408","1112905471","GB" +"1112905472","1112906367","US" +"1112906368","1112906375","BR" +"1112906376","1112906431","US" +"1112906432","1112906439","GB" +"1112906440","1112906943","US" +"1112906944","1112906959","BR" +"1112906960","1112907775","US" +"1112907776","1112907783","CA" +"1112907784","1112907919","US" +"1112907920","1112907935","EG" +"1112907936","1113212479","US" +"1113212480","1113212495","CA" +"1113212496","1113591807","US" +"1113591808","1113595903","CA" +"1113595904","1113596415","CL" +"1113596416","1113596927","GT" +"1113596928","1113597183","PE" +"1113597184","1113597439","US" +"1113597440","1113597695","PE" +"1113597696","1113598463","PA" +"1113598464","1113599487","US" +"1113599488","1113599999","VE" +"1113600000","1113600255","US" +"1113600256","1113603071","VE" +"1113603072","1113603327","CL" +"1113603328","1113603583","SV" +"1113603584","1113603839","US" +"1113603840","1113604095","CA" +"1113604096","1113657343","US" +"1113657344","1113661439","CA" +"1113661440","1113696575","US" +"1113696576","1113696639","CA" +"1113696640","1113696831","US" +"1113696832","1113696895","CA" +"1113696896","1113718783","US" +"1113718784","1113743359","DO" +"1113743360","1113752183","US" +"1113752184","1113752184","A1" +"1113752185","1113752306","US" +"1113752307","1113752307","A1" +"1113752308","1113752332","US" +"1113752333","1113752333","AE" +"1113752334","1113752434","US" +"1113752435","1113752435","A1" +"1113752436","1113752469","US" +"1113752470","1113752470","A1" +"1113752471","1113764497","US" +"1113764498","1113764498","A1" +"1113764499","1113769531","US" +"1113769532","1113769787","A1" +"1113769788","1113854007","US" +"1113854008","1113854015","CA" +"1113854016","1113854207","US" +"1113854208","1113854463","CA" +"1113854464","1113854975","US" +"1113854976","1113855487","CA" +"1113855488","1113857087","US" +"1113857088","1113857151","CA" +"1113857152","1113862247","US" +"1113862248","1113862255","MX" +"1113862256","1113864735","US" +"1113864736","1113864743","BR" +"1113864744","1113864767","US" +"1113864768","1113864783","VI" +"1113864784","1113881871","US" +"1113881872","1113881879","GB" +"1113881880","1113882351","US" +"1113882352","1113882359","CA" +"1113882360","1113888599","US" +"1113888600","1113888607","CA" +"1113888608","1113903295","US" +"1113903296","1113903359","CA" +"1113903360","1113905791","US" +"1113905792","1113905807","CA" +"1113905808","1113916831","US" +"1113916832","1113916839","GB" +"1113916840","1113919383","US" +"1113919384","1113919391","CA" +"1113919392","1113923839","US" +"1113923840","1113923903","BR" +"1113923904","1113932815","US" +"1113932816","1113932823","CA" +"1113932824","1113983999","US" +"1113984000","1113984255","NL" +"1113984256","1113997311","US" +"1113997312","1114005503","CA" +"1114005504","1114054655","US" +"1114054656","1114062847","CA" +"1114062848","1114095615","US" +"1114095616","1114103807","CA" +"1114103808","1114170095","US" +"1114170096","1114170111","CA" +"1114170112","1114505215","US" +"1114505216","1114507263","CA" +"1114507264","1114507295","US" +"1114507296","1114507327","CA" +"1114507328","1114507391","US" +"1114507392","1114507423","CA" +"1114507424","1114507431","GB" +"1114507432","1114508287","CA" +"1114508288","1114508799","US" +"1114508800","1114511359","CA" +"1114511360","1114511871","US" +"1114511872","1114513407","CA" +"1114513408","1114515455","SA" +"1114515456","1114517503","US" +"1114517504","1114519551","CA" +"1114519552","1114520063","US" +"1114520064","1114520319","PH" +"1114520320","1114520575","US" +"1114520576","1114520831","PH" +"1114520832","1114524159","CA" +"1114524160","1114524671","ZA" +"1114524672","1114533375","CA" +"1114533376","1114533887","ZA" +"1114533888","1114537983","AO" +"1114537984","1114550271","CA" +"1114550272","1114579831","US" +"1114579832","1114579832","A1" +"1114579833","1114628995","US" +"1114628996","1114628996","A1" +"1114628997","1114653951","US" +"1114653952","1114653983","MO" +"1114653984","1114657927","US" +"1114657928","1114657935","LA" +"1114657936","1114681343","US" +"1114681344","1114685439","CA" +"1114685440","1114730495","US" +"1114730496","1114734591","CA" +"1114734592","1114865711","US" +"1114865712","1114865727","CA" +"1114865728","1114875391","US" +"1114875392","1114876159","CA" +"1114876160","1114876447","US" +"1114876448","1114876463","CA" +"1114876464","1114876479","AD" +"1114876480","1114876543","CA" +"1114876544","1114876575","GB" +"1114876576","1114876911","US" +"1114876912","1114876927","AD" +"1114876928","1114877183","CA" +"1114877184","1114877439","CY" +"1114877440","1114877695","US" +"1114877696","1114877759","SK" +"1114877760","1114877791","US" +"1114877792","1114877807","CA" +"1114877808","1114877951","US" +"1114877952","1114878207","PA" +"1114878208","1114878463","US" +"1114878464","1114878719","NL" +"1114878720","1114878849","US" +"1114878850","1114878977","LT" +"1114878978","1114880079","US" +"1114880080","1114880095","CY" +"1114880096","1114880383","US" +"1114880384","1114880399","CY" +"1114880400","1114880407","GB" +"1114880408","1114881279","US" +"1114881280","1114881407","CY" +"1114881408","1114881471","US" +"1114881472","1114881535","CY" +"1114881536","1114926399","US" +"1114926400","1114926431","NL" +"1114926432","1114928863","US" +"1114928864","1114928871","GB" +"1114928872","1114929071","US" +"1114929072","1114929087","RU" +"1114929088","1114930175","US" +"1114930176","1114930303","GB" +"1114930304","1114966815","US" +"1114966816","1114966831","GB" +"1114966832","1115104511","US" +"1115104512","1115104639","CA" +"1115104640","1115111935","US" +"1115111936","1115112063","PR" +"1115112064","1115112079","US" +"1115112080","1115112087","ES" +"1115112088","1115112575","US" +"1115112576","1115112607","IN" +"1115112608","1115113471","US" +"1115113472","1115114495","HN" +"1115114496","1115114751","MX" +"1115114752","1115115007","GT" +"1115115008","1115115519","US" +"1115115520","1115116543","HN" +"1115116544","1115117055","US" +"1115117056","1115117311","GB" +"1115117312","1115117567","US" +"1115117568","1115118591","HN" +"1115118592","1115119615","SV" +"1115119616","1115127807","US" +"1115127808","1115131903","CA" +"1115131904","1115135999","US" +"1115136000","1115138671","CA" +"1115138672","1115138679","US" +"1115138680","1115144191","CA" +"1115144192","1115693055","US" +"1115697152","1115697175","US" +"1115697176","1115697183","AU" +"1115697184","1115697199","US" +"1115697200","1115697207","ID" +"1115697208","1115697215","US" +"1115697216","1115697223","ID" +"1115697224","1115697231","CA" +"1115697232","1115697263","US" +"1115697264","1115697279","IN" +"1115697280","1115697815","US" +"1115697816","1115697823","DO" +"1115697824","1115697943","US" +"1115697944","1115697951","MX" +"1115697952","1115697961","DO" +"1115697962","1115697999","US" +"1115698000","1115698007","DO" +"1115698008","1115698127","US" +"1115698128","1115698135","DO" +"1115698136","1115698431","US" +"1115698432","1115698687","DO" +"1115698688","1115698783","US" +"1115698784","1115698791","CO" +"1115698792","1115699903","US" +"1115699904","1115699911","CA" +"1115699912","1115699919","US" +"1115699920","1115699927","CA" +"1115699928","1115700223","US" +"1115700224","1115700479","DO" +"1115700480","1115700735","US" +"1115700736","1115700743","CA" +"1115700744","1115705343","US" +"1115705344","1115709439","CA" +"1115709440","1115768351","US" +"1115768352","1115768367","CA" +"1115768368","1115774799","US" +"1115774800","1115774815","A2" +"1115774816","1115779215","US" +"1115779216","1115779223","CA" +"1115779224","1115783167","US" +"1115783168","1115784599","CA" +"1115784600","1115784607","US" +"1115784608","1115791359","CA" +"1115791360","1115795455","PR" +"1115795456","1115799551","CA" +"1115799552","1115815935","US" +"1115815936","1115947007","CA" +"1115947008","1116014079","US" +"1116014080","1116014335","A2" +"1116014336","1116014591","US" +"1116014592","1116014847","A2" +"1116014848","1116015871","US" +"1116015872","1116016127","A2" +"1116016128","1116021247","US" +"1116021248","1116021503","CI" +"1116021504","1116027135","US" +"1116027136","1116027903","A2" +"1116027904","1116041791","US" +"1116041792","1116041807","CA" +"1116041808","1116154575","US" +"1116154576","1116154591","AE" +"1116154592","1116158271","US" +"1116158272","1116158335","CA" +"1116158336","1116158463","US" +"1116158464","1116158495","AU" +"1116158496","1116158623","US" +"1116158624","1116158719","CA" +"1116158720","1116159519","US" +"1116159520","1116159535","BR" +"1116159536","1116168191","US" +"1116168192","1116169311","CA" +"1116169312","1116169327","US" +"1116169328","1116175103","CA" +"1116175104","1116175135","JM" +"1116175136","1116176383","CA" +"1116176384","1116425393","US" +"1116425394","1116425394","A1" +"1116425395","1116538687","US" +"1116538688","1116538703","UA" +"1116538704","1116897279","US" +"1116897280","1116905471","CA" +"1116905472","1117137919","US" +"1117137920","1117138175","CA" +"1117138176","1117142271","US" +"1117142272","1117142527","CA" +"1117142528","1117163023","US" +"1117163024","1117163031","CA" +"1117163032","1117167855","US" +"1117167856","1117167871","GB" +"1117167872","1117169503","US" +"1117169504","1117169535","CA" +"1117169536","1117171071","US" +"1117171072","1117171103","CA" +"1117171104","1117178287","US" +"1117178288","1117178303","GB" +"1117178304","1117189951","US" +"1117189952","1117190015","KR" +"1117190016","1117195991","US" +"1117195992","1117195999","A2" +"1117196000","1117198591","US" +"1117198592","1117198847","CA" +"1117198848","1117274111","US" +"1117274112","1117282303","CA" +"1117282304","1117299615","US" +"1117299616","1117299623","GB" +"1117299624","1117303103","US" +"1117303104","1117303167","CA" +"1117303168","1117305671","US" +"1117305672","1117305679","GB" +"1117305680","1117409343","US" +"1117409344","1117409351","GB" +"1117409352","1117409783","US" +"1117409784","1117409791","GB" +"1117409792","1117410239","US" +"1117410240","1117410303","GB" +"1117410304","1117413375","US" +"1117413376","1117415423","CA" +"1117415424","1117416191","AN" +"1117416192","1117416447","CA" +"1117416448","1117416703","US" +"1117416704","1117417215","CA" +"1117417216","1117417223","US" +"1117417224","1117417231","CA" +"1117417232","1117417239","US" +"1117417240","1117417247","CA" +"1117417248","1117417263","US" +"1117417264","1117417279","CA" +"1117417280","1117417343","US" +"1117417344","1117418655","CA" +"1117418656","1117418671","US" +"1117418672","1117419775","CA" +"1117419776","1117420031","US" +"1117420032","1117420415","CA" +"1117420416","1117420447","US" +"1117420448","1117421055","CA" +"1117421056","1117421311","US" +"1117421312","1117421567","CA" +"1117421568","1117683711","US" +"1117683712","1117691903","CA" +"1117691904","1117724671","US" +"1117724672","1117728767","CA" +"1117728768","1117745151","US" +"1117745152","1117749247","CA" +"1117749248","1117796575","US" +"1117796576","1117796591","CA" +"1117796592","1117814823","US" +"1117814824","1117814831","CN" +"1117814832","1117815295","US" +"1117815296","1117815551","CN" +"1117815552","1117817919","US" +"1117817920","1117817983","CA" +"1117817984","1117818975","US" +"1117818976","1117818991","HK" +"1117818992","1117819631","US" +"1117819632","1117819647","AE" +"1117819648","1117822463","US" +"1117822464","1117822527","CA" +"1117822528","1117823231","US" +"1117823232","1117823487","CA" +"1117823488","1117823743","CN" +"1117823744","1117823999","US" +"1117824000","1117824511","GR" +"1117824512","1117829375","US" +"1117829376","1117829631","GR" +"1117829632","1117831359","US" +"1117831360","1117831423","A2" +"1117831424","1117978623","US" +"1117978624","1117979503","CA" +"1117979504","1117979519","US" +"1117979520","1117982639","CA" +"1117982640","1117982655","US" +"1117982656","1117982999","CA" +"1117983000","1117983007","US" +"1117983008","1117983023","CA" +"1117983024","1117983039","US" +"1117983040","1117983215","CA" +"1117983216","1117983223","US" +"1117983224","1117983831","CA" +"1117983832","1117983839","US" +"1117983840","1117984023","CA" +"1117984024","1117984047","US" +"1117984048","1117985055","CA" +"1117985056","1117985079","US" +"1117985080","1117985423","CA" +"1117985424","1117985447","US" +"1117985448","1117985463","CA" +"1117985464","1117985471","US" +"1117985472","1117985615","CA" +"1117985616","1117985647","US" +"1117985648","1117985767","CA" +"1117985768","1117985775","US" +"1117985776","1117986575","CA" +"1117986576","1117986687","US" +"1117986688","1117986815","CA" +"1117986816","1117995007","US" +"1117995008","1117999103","CA" +"1117999104","1118027783","US" +"1118027784","1118029471","CA" +"1118029472","1118029519","US" +"1118029520","1118029551","CA" +"1118029552","1118029567","US" +"1118029568","1118030991","CA" +"1118030992","1118030999","US" +"1118031000","1118031071","CA" +"1118031072","1118031079","US" +"1118031080","1118031263","CA" +"1118031264","1118031295","US" +"1118031296","1118031311","CA" +"1118031312","1118031319","US" +"1118031320","1118031375","CA" +"1118031376","1118031383","CR" +"1118031384","1118031431","CA" +"1118031432","1118031439","US" +"1118031440","1118031759","CA" +"1118031760","1118031799","US" +"1118031800","1118031871","CA" +"1118031872","1118126079","US" +"1118126080","1118126719","CA" +"1118126720","1118126847","US" +"1118126848","1118127231","CA" +"1118127232","1118127359","US" +"1118127360","1118127615","CA" +"1118127616","1118128255","US" +"1118128256","1118128319","CA" +"1118128320","1118128383","MY" +"1118128384","1118128639","CA" +"1118128640","1118129279","US" +"1118129280","1118129663","CA" +"1118129664","1118129695","BR" +"1118129696","1118129823","US" +"1118129824","1118129855","AU" +"1118129856","1118129887","US" +"1118129888","1118129919","CA" +"1118129920","1118130687","US" +"1118130688","1118131455","CA" +"1118131456","1118131583","US" +"1118131584","1118131711","IN" +"1118131712","1118132479","CA" +"1118132480","1118132991","US" +"1118132992","1118133375","CA" +"1118133376","1118133503","US" +"1118133504","1118133631","CA" +"1118133632","1118133759","US" +"1118133760","1118133887","CA" +"1118133888","1118134815","US" +"1118134816","1118134879","CA" +"1118134880","1118134911","US" +"1118134912","1118134975","CA" +"1118134976","1118135007","US" +"1118135008","1118135039","IN" +"1118135040","1118135567","US" +"1118135568","1118135583","CA" +"1118135584","1118135615","US" +"1118135616","1118135631","TZ" +"1118135632","1118135807","US" +"1118135808","1118136191","CA" +"1118136192","1118136831","US" +"1118136832","1118136863","IN" +"1118136864","1118136895","BE" +"1118136896","1118136927","US" +"1118136928","1118136959","CA" +"1118136960","1118137119","US" +"1118137120","1118137151","IL" +"1118137152","1118137215","US" +"1118137216","1118137247","GB" +"1118137248","1118138559","US" +"1118138560","1118138591","AU" +"1118138592","1118138623","FR" +"1118138624","1118138879","US" +"1118138880","1118139135","CA" +"1118139136","1118139903","US" +"1118139904","1118140415","CA" +"1118140416","1118140831","US" +"1118140832","1118140895","VE" +"1118140896","1118141183","US" +"1118141184","1118141439","CA" +"1118141440","1118141695","US" +"1118141696","1118141951","CA" +"1118141952","1118141967","CN" +"1118141968","1118142063","US" +"1118142064","1118142079","IN" +"1118142080","1118151215","US" +"1118151216","1118151231","TT" +"1118151232","1118151391","US" +"1118151392","1118151407","PR" +"1118151408","1118151423","US" +"1118151424","1118151431","ES" +"1118151432","1118151463","US" +"1118151464","1118151471","CR" +"1118151472","1118151631","US" +"1118151632","1118151647","MX" +"1118151648","1118151791","US" +"1118151792","1118151795","BR" +"1118151796","1118152015","US" +"1118152016","1118152031","CO" +"1118152032","1118152239","US" +"1118152240","1118152255","AW" +"1118152256","1118152271","PR" +"1118152272","1118152287","US" +"1118152288","1118152303","BR" +"1118152304","1118152319","FR" +"1118152320","1118152415","US" +"1118152416","1118152431","PR" +"1118152432","1118152879","US" +"1118152880","1118152895","DO" +"1118152896","1118153071","US" +"1118153072","1118153087","UY" +"1118153088","1118153151","US" +"1118153152","1118153167","AR" +"1118153168","1118153423","US" +"1118153424","1118153439","BR" +"1118153440","1118153543","US" +"1118153544","1118153547","BR" +"1118153548","1118153551","US" +"1118153552","1118153567","DE" +"1118153568","1118153679","US" +"1118153680","1118153695","VE" +"1118153696","1118153871","US" +"1118153872","1118153887","CO" +"1118153888","1118153919","US" +"1118153920","1118153935","PA" +"1118153936","1118153951","TT" +"1118153952","1118154063","US" +"1118154064","1118154079","MX" +"1118154080","1118154207","US" +"1118154208","1118154223","CL" +"1118154224","1118155103","US" +"1118155104","1118155119","NL" +"1118155120","1118155183","US" +"1118155184","1118155199","CA" +"1118155200","1118155215","US" +"1118155216","1118155231","PA" +"1118155232","1118155999","US" +"1118156000","1118156015","GT" +"1118156016","1118156319","US" +"1118156320","1118156335","PE" +"1118156336","1118156399","US" +"1118156400","1118156415","VE" +"1118156416","1118156543","US" +"1118156544","1118156559","UY" +"1118156560","1118156607","US" +"1118156608","1118156623","ES" +"1118156624","1118156703","US" +"1118156704","1118156719","DK" +"1118156720","1118157695","US" +"1118157696","1118157711","NL" +"1118157712","1118157759","US" +"1118157760","1118157775","GY" +"1118157776","1118157791","AR" +"1118157792","1118158079","US" +"1118158080","1118158087","PA" +"1118158088","1118158319","US" +"1118158320","1118158323","SV" +"1118158324","1118158331","US" +"1118158332","1118158335","SV" +"1118158336","1118158847","US" +"1118158848","1118167039","CA" +"1118167040","1118474239","US" +"1118474240","1118474535","CA" +"1118474536","1118474543","US" +"1118474544","1118474591","CA" +"1118474592","1118474599","US" +"1118474600","1118474607","CA" +"1118474608","1118474615","US" +"1118474616","1118474863","CA" +"1118474864","1118474871","US" +"1118474872","1118474879","CA" +"1118474880","1118474911","US" +"1118474912","1118475087","CA" +"1118475088","1118475095","US" +"1118475096","1118475215","CA" +"1118475216","1118475223","US" +"1118475224","1118475231","CA" +"1118475232","1118475247","US" +"1118475248","1118476807","CA" +"1118476808","1118476831","US" +"1118476832","1118476887","CA" +"1118476888","1118476895","US" +"1118476896","1118477535","CA" +"1118477536","1118477543","US" +"1118477544","1118478335","CA" +"1118478336","1118511103","US" +"1118511104","1118519295","CA" +"1118519296","1118527487","US" +"1118527488","1118531583","CA" +"1118531584","1118535679","US" +"1118535680","1118539775","CA" +"1118539776","1118543871","US" +"1118543872","1118547967","CA" +"1118547968","1118563839","US" +"1118563840","1118564351","BZ" +"1118564352","1118564607","US" +"1118564608","1118564639","NO" +"1118564640","1118564655","US" +"1118564656","1118564671","IN" +"1118564672","1118564895","US" +"1118564896","1118564927","AU" +"1118564928","1118565375","US" +"1118565376","1118565407","EG" +"1118565408","1118572303","US" +"1118572304","1118572319","A1" +"1118572320","1118572351","US" +"1118572352","1118572543","A1" +"1118572544","1118789783","US" +"1118789784","1118789791","BB" +"1118789792","1118790351","US" +"1118790352","1118790367","GB" +"1118790368","1118791551","US" +"1118791552","1118791567","LU" +"1118791568","1118791599","US" +"1118791600","1118791615","ES" +"1118791616","1118792815","US" +"1118792816","1118792831","DO" +"1118792832","1118792975","US" +"1118792976","1118792991","BB" +"1118792992","1118793407","US" +"1118793408","1118793423","BB" +"1118793424","1118793471","US" +"1118793472","1118793727","CO" +"1118793728","1118793823","US" +"1118793824","1118793839","CA" +"1118793840","1118793935","US" +"1118793936","1118793951","ES" +"1118793952","1118793967","US" +"1118793968","1118793983","HT" +"1118793984","1118794287","US" +"1118794288","1118794303","BR" +"1118794304","1118794799","US" +"1118794800","1118794815","PR" +"1118794816","1118794959","US" +"1118794960","1118794975","JM" +"1118794976","1118795407","US" +"1118795408","1118795423","PE" +"1118795424","1118795791","US" +"1118795792","1118795807","AG" +"1118795808","1118795895","US" +"1118795896","1118795903","CY" +"1118795904","1118796367","US" +"1118796368","1118796383","DO" +"1118796384","1118796543","US" +"1118796544","1118796799","GB" +"1118796800","1118797063","US" +"1118797064","1118797071","CR" +"1118797072","1118819327","US" +"1118819328","1118820607","A1" +"1118820608","1118961663","US" +"1118961664","1118962831","A2" +"1118962832","1118962839","SA" +"1118962840","1118962847","NG" +"1118962848","1118962943","A2" +"1118962944","1118963199","AS" +"1118963200","1118963455","A2" +"1118963456","1118963463","TZ" +"1118963464","1118963471","A2" +"1118963472","1118963479","NG" +"1118963480","1118963487","GB" +"1118963488","1118963495","AO" +"1118963496","1118963583","A2" +"1118963584","1118963647","KE" +"1118963648","1118963967","A2" +"1118963968","1118963991","LB" +"1118963992","1118964863","A2" +"1118964864","1118964879","LB" +"1118964880","1118964991","A2" +"1118964992","1118965247","AN" +"1118965248","1118965503","AS" +"1118965504","1118965839","A2" +"1118965840","1118965847","EC" +"1118965848","1118965911","A2" +"1118965912","1118965919","MA" +"1118965920","1118965991","A2" +"1118965992","1118966007","NG" +"1118966008","1118966015","A2" +"1118966016","1118966271","BR" +"1118966272","1118966351","SV" +"1118966352","1118966367","A2" +"1118966368","1118966399","SV" +"1118966400","1118966407","A2" +"1118966408","1118966415","SV" +"1118966416","1118966423","NI" +"1118966424","1118966455","A2" +"1118966456","1118966463","NI" +"1118966464","1118966487","A2" +"1118966488","1118966495","NI" +"1118966496","1118966503","A2" +"1118966504","1118966511","NI" +"1118966512","1118966519","A2" +"1118966520","1118966527","NI" +"1118966528","1118966655","US" +"1118966656","1118966687","SV" +"1118966688","1118966695","NI" +"1118966696","1118966703","A2" +"1118966704","1118966711","NI" +"1118966712","1118966719","A2" +"1118966720","1118966783","EC" +"1118966784","1118966791","LB" +"1118966792","1118966807","A2" +"1118966808","1118966815","LB" +"1118966816","1118966847","A2" +"1118966848","1118966911","PY" +"1118966912","1118966959","A2" +"1118966960","1118966975","SA" +"1118966976","1118966991","A2" +"1118966992","1118966999","SA" +"1118967000","1118967015","LB" +"1118967016","1118967039","A2" +"1118967040","1118967047","LB" +"1118967048","1118967063","A2" +"1118967064","1118967135","SA" +"1118967136","1118967167","LB" +"1118967168","1118967199","SA" +"1118967200","1118967207","A2" +"1118967208","1118967247","LB" +"1118967248","1118967255","A2" +"1118967256","1118967271","LB" +"1118967272","1118967279","A2" +"1118967280","1118967287","LB" +"1118967288","1118967295","A2" +"1118967296","1118967327","LB" +"1118967328","1118967335","A2" +"1118967336","1118967343","LB" +"1118967344","1118967359","A2" +"1118967360","1118967367","LB" +"1118967368","1118967375","SA" +"1118967376","1118967383","LB" +"1118967384","1118967391","A2" +"1118967392","1118967399","MA" +"1118967400","1118967423","LB" +"1118967424","1118967487","A2" +"1118967488","1118967519","SA" +"1118967520","1118967535","A2" +"1118967536","1118967543","LB" +"1118967544","1118967551","SA" +"1118967552","1118967567","LB" +"1118967568","1118967583","A2" +"1118967584","1118967615","SA" +"1118967616","1118967631","A2" +"1118967632","1118967647","SA" +"1118967648","1118967663","LB" +"1118967664","1118967679","SA" +"1118967680","1118967743","LB" +"1118967744","1118967775","SA" +"1118967776","1118967799","A2" +"1118967800","1118967807","RW" +"1118967808","1118967839","A2" +"1118967840","1118967847","LB" +"1118967848","1118967903","A2" +"1118967904","1118968015","SA" +"1118968016","1118968039","A2" +"1118968040","1118968047","LB" +"1118968048","1118968055","A2" +"1118968056","1118968095","SA" +"1118968096","1118968111","A2" +"1118968112","1118968127","LB" +"1118968128","1118968159","SA" +"1118968160","1118968175","LB" +"1118968176","1118968183","AE" +"1118968184","1118968191","A2" +"1118968192","1118968207","SA" +"1118968208","1118968223","IQ" +"1118968224","1118968255","A2" +"1118968256","1118968287","IQ" +"1118968288","1118968295","AE" +"1118968296","1118968303","A2" +"1118968304","1118968319","AE" +"1118968320","1118968575","SR" +"1118968576","1118968831","A2" +"1118968832","1118968975","SA" +"1118968976","1118968991","A2" +"1118968992","1118969007","SA" +"1118969008","1118969023","A2" +"1118969024","1118969215","SA" +"1118969216","1118969279","A2" +"1118969280","1118969343","SA" +"1118969344","1118969367","A2" +"1118969368","1118969375","NI" +"1118969376","1118969471","A2" +"1118969472","1118969599","TT" +"1118969600","1118969727","GY" +"1118969728","1118969855","A2" +"1118969856","1118970111","LB" +"1118970112","1118970119","KE" +"1118970120","1118970239","A2" +"1118970240","1118970367","NG" +"1118970368","1118970623","GB" +"1118970624","1118970751","SA" +"1118970752","1118970879","GY" +"1118970880","1118971520","SR" +"1118971521","1118971647","A2" +"1118971648","1118971903","GY" +"1118971904","1118972159","A2" +"1118972160","1118972415","VE" +"1118972416","1118972671","GB" +"1118972672","1118972927","SA" +"1118972928","1118972943","NI" +"1118972944","1118972959","VE" +"1118972960","1118972967","A2" +"1118972968","1118972975","NI" +"1118972976","1118972983","A2" +"1118972984","1118972999","NI" +"1118973000","1118973007","SV" +"1118973008","1118973031","A2" +"1118973032","1118973039","NI" +"1118973040","1118973047","A2" +"1118973048","1118973055","NI" +"1118973056","1118973063","A2" +"1118973064","1118973071","EC" +"1118973072","1118973079","SV" +"1118973080","1118973111","VE" +"1118973112","1118973119","SV" +"1118973120","1118973151","NI" +"1118973152","1118973159","A2" +"1118973160","1118973167","NI" +"1118973168","1118973183","A2" +"1118973184","1118973439","VE" +"1118973440","1118973695","US" +"1118973696","1118973951","NG" +"1118973952","1118974015","GY" +"1118974016","1118974047","A2" +"1118974048","1118974055","SV" +"1118974056","1118974095","A2" +"1118974096","1118974103","EC" +"1118974104","1118974111","SV" +"1118974112","1118974119","NI" +"1118974120","1118974127","A2" +"1118974128","1118974135","US" +"1118974136","1118974207","EC" +"1118974208","1118974215","US" +"1118974216","1118975487","A2" +"1118975488","1118975743","KE" +"1118975744","1118975999","A2" +"1118976000","1118976255","GB" +"1118976256","1118976287","LB" +"1118976288","1118976295","A2" +"1118976296","1118976311","SA" +"1118976312","1118976319","A2" +"1118976320","1118976327","SA" +"1118976328","1118976343","A2" +"1118976344","1118976359","LB" +"1118976360","1118976367","A2" +"1118976368","1118976375","SA" +"1118976376","1118976383","LB" +"1118976384","1118976391","SA" +"1118976392","1118976399","A2" +"1118976400","1118976423","SA" +"1118976424","1118976511","A2" +"1118976512","1118976575","NG" +"1118976576","1118976599","A2" +"1118976600","1118976607","NG" +"1118976608","1118976615","LB" +"1118976616","1118976687","A2" +"1118976688","1118976703","NG" +"1118976704","1118976727","A2" +"1118976728","1118976735","NG" +"1118976736","1118976767","A2" +"1118976768","1118976791","NG" +"1118976792","1118976831","A2" +"1118976832","1118976863","NG" +"1118976864","1118976895","A2" +"1118976896","1118977023","NG" +"1118977024","1118977279","SA" +"1118977280","1118977311","A2" +"1118977312","1118977343","NG" +"1118977344","1118977351","KE" +"1118977352","1118977535","A2" +"1118977536","1118977791","US" +"1118977792","1118977839","A2" +"1118977840","1118977847","LB" +"1118977848","1118977879","A2" +"1118977880","1118977887","NI" +"1118977888","1118978047","A2" +"1118978048","1118978439","SA" +"1118978440","1118978447","A2" +"1118978448","1118978463","LB" +"1118978464","1118978527","SA" +"1118978528","1118979071","A2" +"1118979072","1118979295","SA" +"1118979296","1118979327","LB" +"1118979328","1118979455","SA" +"1118979456","1118979479","LB" +"1118979480","1118979495","SA" +"1118979496","1118979503","LB" +"1118979504","1118979535","SA" +"1118979536","1118979575","LB" +"1118979576","1118979711","SA" +"1118979712","1118979775","LB" +"1118979776","1118979839","A2" +"1118979840","1118979855","NI" +"1118979856","1118979895","A2" +"1118979896","1118979903","NI" +"1118979904","1118980095","A2" +"1118980096","1118980351","NG" +"1118980352","1118980607","A2" +"1118980608","1118980863","TZ" +"1118980864","1118981119","AN" +"1118981120","1118981375","A2" +"1118981376","1118981631","IQ" +"1118981632","1118981687","EC" +"1118981688","1118981695","A2" +"1118981696","1118981735","SV" +"1118981736","1118981743","EC" +"1118981744","1118981751","SV" +"1118981752","1118981759","NG" +"1118981760","1118981783","A2" +"1118981784","1118981791","NI" +"1118981792","1118981823","NG" +"1118981824","1118981831","EC" +"1118981832","1118981855","NI" +"1118981856","1118981863","EC" +"1118981864","1118981871","NI" +"1118981872","1118981879","A2" +"1118981880","1118981887","NI" +"1118981888","1118982175","A2" +"1118982176","1118982183","NG" +"1118982184","1118982191","A2" +"1118982192","1118982199","KE" +"1118982200","1118982207","US" +"1118982208","1118982215","A2" +"1118982216","1118982279","NG" +"1118982280","1118982287","A2" +"1118982288","1118982295","NG" +"1118982296","1118982303","A2" +"1118982304","1118982311","KE" +"1118982312","1118982327","NG" +"1118982328","1118982335","A2" +"1118982336","1118982367","NG" +"1118982368","1118982383","A2" +"1118982384","1118982391","NG" +"1118982392","1118982399","A2" +"1118982400","1118982415","NG" +"1118982416","1118982431","SV" +"1118982432","1118982447","NG" +"1118982448","1118982463","US" +"1118982464","1118982479","NG" +"1118982480","1118982487","A2" +"1118982488","1118982551","NG" +"1118982552","1118982559","US" +"1118982560","1118982567","NG" +"1118982568","1118982575","US" +"1118982576","1118982583","NG" +"1118982584","1118982591","CM" +"1118982592","1118982599","NG" +"1118982600","1118982607","A2" +"1118982608","1118982647","NG" +"1118982648","1118982783","A2" +"1118982784","1118982911","NG" +"1118982912","1118982919","LB" +"1118982920","1118982927","A2" +"1118982928","1118982935","NG" +"1118982936","1118983079","A2" +"1118983080","1118983087","NG" +"1118983088","1118983167","A2" +"1118983168","1118983199","AE" +"1118983200","1118983279","SA" +"1118983280","1118983295","A2" +"1118983296","1118983359","AE" +"1118983360","1118983423","A2" +"1118983424","1118983679","NI" +"1118983680","1118983743","TZ" +"1118983744","1118983759","VE" +"1118983760","1118983807","A2" +"1118983808","1118983839","NG" +"1118983840","1118983871","A2" +"1118983872","1118983879","TZ" +"1118983880","1118983919","US" +"1118983920","1118984447","A2" +"1118984448","1118984703","SA" +"1118984704","1118984775","TZ" +"1118984776","1118984783","IQ" +"1118984784","1118984791","A2" +"1118984792","1118984799","NG" +"1118984800","1118984807","A2" +"1118984808","1118984815","LB" +"1118984816","1118984831","A2" +"1118984832","1118984839","LB" +"1118984840","1118984847","SA" +"1118984848","1118984855","A2" +"1118984856","1118984863","IQ" +"1118984864","1118984887","TZ" +"1118984888","1118984895","LB" +"1118984896","1118984943","SA" +"1118984944","1118984951","LB" +"1118984952","1118984959","SA" +"1118984960","1118985215","LB" +"1118985216","1118985983","A2" +"1118985984","1118986111","NG" +"1118986112","1118986239","A2" +"1118986240","1118987007","GB" +"1118987008","1118987263","US" +"1118987264","1118988287","KE" +"1118988288","1118988543","A2" +"1118988544","1118988575","NG" +"1118988576","1118988615","A2" +"1118988616","1118988623","GB" +"1118988624","1118988735","A2" +"1118988736","1118988751","GB" +"1118988752","1118988799","A2" +"1118988800","1118989055","VE" +"1118989056","1118989183","KE" +"1118989184","1118989311","GB" +"1118989312","1118989823","KE" +"1118989824","1118989951","A2" +"1118989952","1118990079","FR" +"1118990080","1118990271","A2" +"1118990272","1118990303","US" +"1118990304","1118990719","A2" +"1118990720","1118990727","KE" +"1118990728","1118991487","A2" +"1118991488","1118991615","LR" +"1118991616","1118992639","A2" +"1118992640","1118992655","KE" +"1118992656","1118992735","A2" +"1118992736","1118992743","SA" +"1118992744","1118992767","A2" +"1118992768","1118992839","US" +"1118992840","1118993151","A2" +"1118993152","1118993407","GY" +"1118993408","1118994175","A2" +"1118994176","1118994431","LR" +"1118994432","1119023735","US" +"1119023736","1119023743","UY" +"1119023744","1119109119","US" +"1119109120","1119111167","CA" +"1119113216","1119144927","US" +"1119144928","1119144935","AU" +"1119144936","1119150079","US" +"1119154176","1119166855","US" +"1119166856","1119166871","HT" +"1119166872","1119167079","US" +"1119167080","1119167087","CA" +"1119167088","1119167119","US" +"1119167120","1119167127","MX" +"1119167128","1119167359","US" +"1119167360","1119167367","CA" +"1119167368","1119167407","US" +"1119167408","1119167415","CA" +"1119167416","1119167495","US" +"1119167496","1119167503","CA" +"1119167504","1119167839","US" +"1119167840","1119167855","CA" +"1119167856","1119168023","US" +"1119168024","1119168031","CA" +"1119168032","1119168183","US" +"1119168184","1119168191","CA" +"1119168192","1119168351","US" +"1119168352","1119168359","AF" +"1119168360","1119168687","US" +"1119168688","1119168695","CA" +"1119168696","1119168975","US" +"1119168976","1119168983","CA" +"1119168984","1119169359","US" +"1119169360","1119169367","HT" +"1119169368","1119169535","US" +"1119169536","1119169543","CA" +"1119169544","1119169599","US" +"1119169600","1119169615","MX" +"1119169616","1119170439","US" +"1119170440","1119170447","CA" +"1119170448","1119170623","US" +"1119170624","1119170631","CA" +"1119170632","1119171207","US" +"1119171208","1119171215","CA" +"1119171216","1119171383","US" +"1119171384","1119171391","CA" +"1119171392","1119172199","US" +"1119172200","1119172207","CA" +"1119172208","1119172895","US" +"1119172896","1119172991","MX" +"1119172992","1119173007","US" +"1119173008","1119173095","MX" +"1119173096","1119173119","US" +"1119173120","1119173143","MX" +"1119173144","1119173151","US" +"1119173152","1119173207","MX" +"1119173208","1119173215","US" +"1119173216","1119173223","MX" +"1119173224","1119173231","US" +"1119173232","1119173263","MX" +"1119173264","1119173279","US" +"1119173280","1119173295","MX" +"1119173296","1119173311","US" +"1119173312","1119173343","MX" +"1119173344","1119173351","US" +"1119173352","1119173367","MX" +"1119173368","1119173375","US" +"1119173376","1119173399","MX" +"1119173400","1119173407","US" +"1119173408","1119173471","MX" +"1119173472","1119173495","US" +"1119173496","1119173527","MX" +"1119173528","1119173535","US" +"1119173536","1119173543","MX" +"1119173544","1119173551","US" +"1119173552","1119173575","MX" +"1119173576","1119173591","US" +"1119173592","1119173655","MX" +"1119173656","1119173671","US" +"1119173672","1119173679","MX" +"1119173680","1119173703","US" +"1119173704","1119173727","MX" +"1119173728","1119173735","US" +"1119173736","1119173751","MX" +"1119173752","1119173767","US" +"1119173768","1119173775","MX" +"1119173776","1119173799","US" +"1119173800","1119173815","MX" +"1119173816","1119173831","US" +"1119173832","1119173847","MX" +"1119173848","1119173863","US" +"1119173864","1119173871","MX" +"1119173872","1119173935","US" +"1119173936","1119173983","MX" +"1119173984","1119173999","US" +"1119174000","1119174007","MX" +"1119174008","1119174023","US" +"1119174024","1119174031","GT" +"1119174032","1119174039","MX" +"1119174040","1119174047","US" +"1119174048","1119174119","MX" +"1119174120","1119174127","US" +"1119174128","1119174199","MX" +"1119174200","1119174215","US" +"1119174216","1119174247","GT" +"1119174248","1119174287","US" +"1119174288","1119174319","MX" +"1119174320","1119174343","US" +"1119174344","1119174351","GT" +"1119174352","1119174359","MX" +"1119174360","1119174399","US" +"1119174400","1119174407","GT" +"1119174408","1119174415","MX" +"1119174416","1119174423","US" +"1119174424","1119174471","MX" +"1119174472","1119174479","US" +"1119174480","1119174511","MX" +"1119174512","1119174535","US" +"1119174536","1119174543","MX" +"1119174544","1119211519","US" +"1119211520","1119215615","CA" +"1119215616","1119289343","US" +"1119289344","1119354879","CA" +"1119354880","1119369407","US" +"1119369408","1119369415","UM" +"1119369416","1119428607","US" +"1119428608","1119432703","VI" +"1119432704","1119436799","CA" +"1119436800","1119440895","US" +"1119440896","1119444991","CA" +"1119444992","1119446751","US" +"1119446752","1119446759","CO" +"1119446760","1119469567","US" +"1119469568","1119477759","CA" +"1119477760","1119486623","US" +"1119486624","1119486631","AU" +"1119486632","1119490495","US" +"1119490496","1119490527","GI" +"1119490528","1119502335","US" +"1119502336","1119510527","CA" +"1119510528","1119558143","US" +"1119558144","1119558655","PR" +"1119558656","1119580159","US" +"1119580160","1119584255","CA" +"1119584256","1119999935","US" +"1119999936","1119999967","A2" +"1119999968","1120015295","US" +"1120015296","1120015327","A2" +"1120015328","1120064511","US" +"1120064512","1120064767","AR" +"1120064768","1120149503","US" +"1120149504","1120149599","CA" +"1120149600","1120149631","US" +"1120149632","1120150031","CA" +"1120150032","1120150039","TW" +"1120150040","1120151695","CA" +"1120151696","1120151711","TW" +"1120151712","1120152159","CA" +"1120152160","1120152191","US" +"1120152192","1120153599","CA" +"1120153600","1120272383","US" +"1120272384","1120276991","CA" +"1120276992","1120277503","US" +"1120277504","1120280575","CA" +"1120280576","1120280831","US" +"1120280832","1120280855","CA" +"1120280856","1120280863","US" +"1120280864","1120281087","CA" +"1120281088","1120281095","PG" +"1120281096","1120281103","US" +"1120281104","1120281111","CA" +"1120281112","1120281119","US" +"1120281120","1120281135","ZA" +"1120281136","1120281151","US" +"1120281152","1120281375","CA" +"1120281376","1120281383","AR" +"1120281384","1120281391","US" +"1120281392","1120281599","CA" +"1120281600","1120282367","US" +"1120282368","1120282623","SY" +"1120282624","1120282879","US" +"1120282880","1120283135","SY" +"1120283136","1120283391","US" +"1120283392","1120283647","CA" +"1120283648","1120284671","EC" +"1120284672","1120286719","CA" +"1120286720","1120289023","US" +"1120289024","1120290303","CA" +"1120290304","1120290559","US" +"1120290560","1120293119","CA" +"1120293120","1120293631","US" +"1120293632","1120299007","CA" +"1120299008","1120299263","PK" +"1120299264","1120299519","US" +"1120299520","1120300799","PK" +"1120300800","1120301055","US" +"1120301056","1120304895","CA" +"1120304896","1120305151","US" +"1120305152","1120306687","CA" +"1120306688","1120306943","PH" +"1120306944","1120307199","US" +"1120307200","1120307967","EC" +"1120307968","1120308223","PH" +"1120308224","1120309247","CA" +"1120309248","1120309503","US" +"1120309504","1120309759","CA" +"1120309760","1120310015","US" +"1120310016","1120310783","PH" +"1120310784","1120311807","CA" +"1120311808","1120312063","US" +"1120312064","1120312447","PH" +"1120312448","1120312575","CA" +"1120312576","1120312831","PH" +"1120312832","1120313343","CA" +"1120313344","1120313599","US" +"1120313600","1120315135","CA" +"1120315136","1120315391","US" +"1120315392","1120321535","CA" +"1120321536","1120346111","US" +"1120346112","1120347039","CA" +"1120347040","1120347055","US" +"1120347056","1120347135","CA" +"1120347136","1120347391","US" +"1120347392","1120347527","CA" +"1120347528","1120347535","US" +"1120347536","1120347591","CA" +"1120347592","1120347607","US" +"1120347608","1120350207","CA" +"1120350208","1120370687","US" +"1120370688","1120371199","CA" +"1120371200","1120371455","US" +"1120371456","1120371511","CA" +"1120371512","1120371551","US" +"1120371552","1120371647","CA" +"1120371648","1120371651","US" +"1120371652","1120371711","CA" +"1120371712","1120372223","US" +"1120372224","1120372479","CA" +"1120372480","1120372735","US" +"1120372736","1120373423","CA" +"1120373424","1120373503","US" +"1120373504","1120374047","CA" +"1120374048","1120374063","US" +"1120374064","1120374271","CA" +"1120374272","1120374303","US" +"1120374304","1120374399","CA" +"1120374400","1120374415","US" +"1120374416","1120374479","CA" +"1120374480","1120374487","US" +"1120374488","1120374511","CA" +"1120374512","1120374783","US" +"1120374784","1120375243","CA" +"1120375244","1120375263","US" +"1120375264","1120375423","CA" +"1120375424","1120375551","US" +"1120375552","1120376079","CA" +"1120376080","1120376127","US" +"1120376128","1120376223","CA" +"1120376224","1120376239","US" +"1120376240","1120376255","MX" +"1120376256","1120376287","CA" +"1120376288","1120376303","US" +"1120376304","1120376327","CA" +"1120376328","1120376383","US" +"1120376384","1120376447","CA" +"1120376448","1120376455","US" +"1120376456","1120376494","CA" +"1120376495","1120376559","US" +"1120376560","1120376647","CA" +"1120376648","1120376671","US" +"1120376672","1120376679","MX" +"1120376680","1120376687","CA" +"1120376688","1120376767","US" +"1120376768","1120376815","CA" +"1120376816","1120376831","US" +"1120376832","1120377167","CA" +"1120377168","1120377199","US" +"1120377200","1120377215","CA" +"1120377216","1120377247","US" +"1120377248","1120377791","CA" +"1120377792","1120377823","US" +"1120377824","1120378367","CA" +"1120378368","1120378623","US" +"1120378624","1120378911","CA" +"1120378912","1120378927","US" +"1120378928","1120379039","CA" +"1120379040","1120379071","PA" +"1120379072","1120379167","CA" +"1120379168","1120379183","US" +"1120379184","1120380027","CA" +"1120380028","1120380031","US" +"1120380032","1120380095","CA" +"1120380096","1120380127","US" +"1120380128","1120380131","CA" +"1120380132","1120380223","US" +"1120380224","1120380239","CA" +"1120380240","1120380263","US" +"1120380264","1120380271","CA" +"1120380272","1120380415","US" +"1120380416","1120380431","VG" +"1120380432","1120380447","CA" +"1120380448","1120380479","US" +"1120380480","1120380639","CA" +"1120380640","1120380655","US" +"1120380656","1120380659","CA" +"1120380660","1120380663","US" +"1120380664","1120381055","CA" +"1120381056","1120381071","US" +"1120381072","1120381087","PA" +"1120381088","1120381095","US" +"1120381096","1120381103","CA" +"1120381104","1120381119","US" +"1120381120","1120382231","CA" +"1120382232","1120382239","US" +"1120382240","1120382271","CA" +"1120382272","1120382367","US" +"1120382368","1120382431","CA" +"1120382432","1120382463","US" +"1120382464","1120382975","CA" +"1120382976","1120383263","US" +"1120383264","1120383327","CA" +"1120383328","1120383343","US" +"1120383344","1120383367","CA" +"1120383368","1120383423","US" +"1120383424","1120383439","CA" +"1120383440","1120383775","US" +"1120383776","1120383951","CA" +"1120383952","1120383999","US" +"1120384000","1120385023","CA" +"1120385024","1120385135","US" +"1120385136","1120385143","CA" +"1120385144","1120385151","US" +"1120385152","1120385183","GB" +"1120385184","1120385535","CA" +"1120385536","1120386559","US" +"1120386560","1120387071","CA" +"1120387072","1120485503","US" +"1120485504","1120485631","IN" +"1120485632","1120486079","US" +"1120486080","1120486143","IN" +"1120486144","1120486399","US" +"1120486400","1120486911","CA" +"1120486912","1120487103","US" +"1120487104","1120487167","CA" +"1120487168","1120487199","US" +"1120487200","1120487231","CA" +"1120487232","1120487359","US" +"1120487360","1120487391","CA" +"1120487392","1120487423","BE" +"1120487424","1120487679","CA" +"1120487680","1120488191","US" +"1120488192","1120488703","CA" +"1120488704","1120488767","US" +"1120488768","1120488799","VE" +"1120488800","1120488831","IL" +"1120488832","1120488863","CA" +"1120488864","1120488895","BE" +"1120488896","1120488927","KN" +"1120488928","1120489215","US" +"1120489216","1120489343","CA" +"1120489344","1120489471","US" +"1120489472","1120489727","CA" +"1120489728","1120489983","US" +"1120489984","1120490751","CA" +"1120490752","1120490783","GB" +"1120490784","1120491007","US" +"1120491008","1120491775","CA" +"1120491776","1120492415","US" +"1120492416","1120492543","FR" +"1120492544","1120493055","CA" +"1120493056","1120493087","IN" +"1120493088","1120493183","US" +"1120493184","1120493215","CA" +"1120493216","1120493247","BE" +"1120493248","1120493311","US" +"1120493312","1120493567","CA" +"1120493568","1120493823","US" +"1120493824","1120494079","CA" +"1120494080","1120494335","US" +"1120494336","1120494591","CA" +"1120494592","1120494975","US" +"1120494976","1120495039","CA" +"1120495040","1120495743","US" +"1120495744","1120495871","SG" +"1120495872","1120496223","US" +"1120496224","1120496255","BE" +"1120496256","1120496287","CA" +"1120496288","1120496385","US" +"1120496386","1120496638","CA" +"1120496639","1120496639","US" +"1120496640","1120497151","CA" +"1120497152","1120497183","BE" +"1120497184","1120497215","US" +"1120497216","1120497247","BE" +"1120497248","1120497311","US" +"1120497312","1120497343","IN" +"1120497344","1120497375","US" +"1120497376","1120497663","CA" +"1120497664","1120497791","US" +"1120497792","1120497919","AU" +"1120497920","1120497983","US" +"1120497984","1120498013","BE" +"1120498014","1120498143","US" +"1120498144","1120498303","CA" +"1120498304","1120498943","US" +"1120498944","1120499199","CA" +"1120499200","1120499583","US" +"1120499584","1120499615","FR" +"1120499616","1120499647","IN" +"1120499648","1120500639","US" +"1120500640","1120500671","BE" +"1120500672","1120501247","US" +"1120501248","1120501503","CA" +"1120501504","1120509951","US" +"1120509952","1120515583","SV" +"1120515584","1120515839","GT" +"1120515840","1120516095","SV" +"1120516096","1120517375","US" +"1120517376","1120517631","AR" +"1120517632","1120517887","US" +"1120517888","1120518143","CL" +"1120518144","1120534527","CA" +"1120534528","1120568639","US" +"1120568640","1120568671","CA" +"1120568672","1120575167","US" +"1120575168","1120575199","CA" +"1120575200","1120641023","US" +"1120641024","1120657407","CA" +"1120657408","1120731391","US" +"1120731392","1120731647","A2" +"1120731648","1120736207","US" +"1120736208","1120736223","PY" +"1120736224","1120736991","US" +"1120736992","1120737007","KN" +"1120737008","1120737023","US" +"1120737024","1120737279","BS" +"1120737280","1120739951","US" +"1120739952","1120739983","MX" +"1120739984","1120739991","US" +"1120739992","1120740079","MX" +"1120740080","1120740095","US" +"1120740096","1120740351","MX" +"1120740352","1120741375","TT" +"1120741376","1120741631","US" +"1120741632","1120741887","MX" +"1120741888","1120743423","US" +"1120743424","1120743679","KN" +"1120743680","1120744447","US" +"1120744448","1120744703","KN" +"1120744704","1120745471","US" +"1120745472","1120745727","A2" +"1120745728","1120826367","US" +"1120826368","1120826623","CA" +"1120826624","1120846431","US" +"1120846432","1120846463","CA" +"1120846464","1120854015","US" +"1120854016","1120862207","CA" +"1120862208","1120870399","US" +"1120874496","1120874763","US" +"1120874764","1120874767","A2" +"1120874768","1120874775","US" +"1120874776","1120874779","A2" +"1120874780","1120874815","US" +"1120874816","1120874831","A2" +"1120874832","1120874839","US" +"1120874840","1120874847","A2" +"1120874848","1120874879","US" +"1120874880","1120874887","A2" +"1120874888","1120874895","US" +"1120874896","1120874911","A2" +"1120874912","1120874935","US" +"1120874936","1120874943","A2" +"1120874944","1120874959","CA" +"1120874960","1120874979","US" +"1120874980","1120874983","A2" +"1120874984","1120875007","US" +"1120875008","1120875263","AS" +"1120875264","1120876287","US" +"1120876288","1120876543","A2" +"1120876544","1120876567","JO" +"1120876568","1120876575","A2" +"1120876576","1120876591","JO" +"1120876592","1120876599","A2" +"1120876600","1120876607","JO" +"1120876608","1120876615","A2" +"1120876616","1120876623","US" +"1120876624","1120876655","A2" +"1120876656","1120876671","US" +"1120876672","1120876799","A2" +"1120876800","1120877567","US" +"1120877568","1120877575","A2" +"1120877576","1120877583","CA" +"1120877584","1120877823","A2" +"1120877824","1120878359","US" +"1120878360","1120878591","A2" +"1120878592","1120886783","US" +"1120886784","1120886911","CA" +"1120886912","1120887039","NG" +"1120887040","1120888127","CA" +"1120888128","1120888159","US" +"1120888160","1120894975","CA" +"1120894976","1120911359","US" +"1120911360","1120914415","CA" +"1120914416","1120914431","AT" +"1120914432","1120918623","CA" +"1120918624","1120918639","NA" +"1120918640","1120919551","CA" +"1120919552","1121005567","US" +"1121005568","1121009663","CA" +"1121009664","1121038335","US" +"1121038336","1121042431","CA" +"1121042432","1121230847","US" +"1121230848","1121232119","CA" +"1121232120","1121232127","US" +"1121232128","1121233279","CA" +"1121233280","1121233311","DE" +"1121233312","1121233455","CA" +"1121233456","1121233463","US" +"1121233464","1121233471","DE" +"1121233472","1121233575","CA" +"1121233576","1121233583","US" +"1121233584","1121233599","DE" +"1121233600","1121239039","CA" +"1121239040","1121247231","US" +"1121247232","1121247239","CA" +"1121247240","1121247255","AG" +"1121247256","1121247263","CA" +"1121247264","1121247271","CR" +"1121247272","1121247279","CA" +"1121247280","1121247287","GI" +"1121247288","1121247295","CY" +"1121247296","1121247487","CA" +"1121247488","1121247495","VG" +"1121247496","1121247503","CA" +"1121247504","1121247511","AW" +"1121247512","1121247519","VG" +"1121247520","1121247527","BZ" +"1121247528","1121247535","VG" +"1121247536","1121247543","BZ" +"1121247544","1121247551","CA" +"1121247552","1121247559","VG" +"1121247560","1121247567","CA" +"1121247568","1121247583","MT" +"1121247584","1121247591","CY" +"1121247592","1121247615","CA" +"1121247616","1121247631","BZ" +"1121247632","1121247647","VG" +"1121247648","1121247663","US" +"1121247664","1121247695","BZ" +"1121247696","1121247711","CA" +"1121247712","1121247719","AN" +"1121247720","1121247743","CA" +"1121247744","1121247775","BZ" +"1121247776","1121247823","CA" +"1121247824","1121247855","AG" +"1121247856","1121247967","CA" +"1121247968","1121247999","CR" +"1121248000","1121248007","AG" +"1121248008","1121248015","BZ" +"1121248016","1121248039","CA" +"1121248040","1121248055","AG" +"1121248056","1121248063","AW" +"1121248064","1121248079","AG" +"1121248080","1121248095","CA" +"1121248096","1121248111","AG" +"1121248112","1121248127","AN" +"1121248128","1121248135","MT" +"1121248136","1121248159","CA" +"1121248160","1121248255","AG" +"1121248256","1121248287","CA" +"1121248288","1121248311","BZ" +"1121248312","1121248319","MT" +"1121248320","1121248335","CA" +"1121248336","1121248343","VG" +"1121248344","1121248351","BZ" +"1121248352","1121248367","MT" +"1121248368","1121248383","CA" +"1121248384","1121248399","VG" +"1121248400","1121248407","CA" +"1121248408","1121248431","PA" +"1121248432","1121248447","CA" +"1121248448","1121248495","BZ" +"1121248496","1121248783","CA" +"1121248784","1121248799","VG" +"1121248800","1121248863","CA" +"1121248864","1121248879","VG" +"1121248880","1121248911","CA" +"1121248912","1121248919","BZ" +"1121248920","1121248959","VG" +"1121248960","1121248983","CA" +"1121248984","1121248991","MT" +"1121248992","1121249023","VG" +"1121249024","1121249279","CA" +"1121249280","1121249343","MT" +"1121249344","1121249375","CA" +"1121249376","1121249383","VG" +"1121249384","1121249391","CA" +"1121249392","1121249399","AW" +"1121249400","1121249407","CA" +"1121249408","1121249439","AG" +"1121249440","1121249535","CA" +"1121249536","1121249543","BZ" +"1121249544","1121249551","AG" +"1121249552","1121249599","CA" +"1121249600","1121249615","IM" +"1121249616","1121249631","VG" +"1121249632","1121249743","CA" +"1121249744","1121249751","CR" +"1121249752","1121249759","CA" +"1121249760","1121249775","BZ" +"1121249776","1121249791","CA" +"1121249792","1121250047","AG" +"1121250048","1121250079","CR" +"1121250080","1121250095","AG" +"1121250096","1121250111","CA" +"1121250112","1121250127","CR" +"1121250128","1121250143","CA" +"1121250144","1121250175","GB" +"1121250176","1121250183","AW" +"1121250184","1121250207","BZ" +"1121250208","1121250303","CA" +"1121250304","1121250815","BZ" +"1121250816","1121250831","AG" +"1121250832","1121250839","BZ" +"1121250840","1121250879","AG" +"1121250880","1121250911","VG" +"1121250912","1121250943","CA" +"1121250944","1121251007","BZ" +"1121251008","1121251015","VG" +"1121251016","1121251039","CA" +"1121251040","1121251047","CR" +"1121251048","1121251055","AW" +"1121251056","1121251087","CA" +"1121251088","1121251095","CY" +"1121251096","1121251103","CA" +"1121251104","1121251119","BZ" +"1121251120","1121251135","CA" +"1121251136","1121251167","AG" +"1121251168","1121251199","VG" +"1121251200","1121251263","AW" +"1121251264","1121251279","CA" +"1121251280","1121251287","BZ" +"1121251288","1121251311","IM" +"1121251312","1121251327","BZ" +"1121251328","1121251583","CA" +"1121251584","1121251591","BZ" +"1121251592","1121251599","MT" +"1121251600","1121251607","CA" +"1121251608","1121251615","BZ" +"1121251616","1121251647","NL" +"1121251648","1121251655","BZ" +"1121251656","1121251663","CA" +"1121251664","1121251671","MT" +"1121251672","1121251679","CA" +"1121251680","1121251687","AG" +"1121251688","1121251711","BZ" +"1121251712","1121251727","CA" +"1121251728","1121251791","BZ" +"1121251792","1121251807","VG" +"1121251808","1121251831","CA" +"1121251832","1121251839","VG" +"1121251840","1121251847","BZ" +"1121251848","1121251855","CA" +"1121251856","1121251863","AN" +"1121251864","1121251871","BZ" +"1121251872","1121251887","VG" +"1121251888","1121251895","CY" +"1121251896","1121251903","CA" +"1121251904","1121251935","AG" +"1121251936","1121251943","CY" +"1121251944","1121251951","MT" +"1121251952","1121251967","CA" +"1121251968","1121251983","MT" +"1121251984","1121251991","CA" +"1121251992","1121251999","AG" +"1121252000","1121252063","CA" +"1121252064","1121252359","AG" +"1121252360","1121252367","ZA" +"1121252368","1121252375","GG" +"1121252376","1121252383","MT" +"1121252384","1121252391","CR" +"1121252392","1121252399","GG" +"1121252400","1121252415","MT" +"1121252416","1121252479","GI" +"1121252480","1121252607","CR" +"1121252608","1121252671","AW" +"1121252672","1121252735","BZ" +"1121252736","1121252863","CA" +"1121252864","1121253119","BZ" +"1121253120","1121253887","CA" +"1121253888","1121254143","BZ" +"1121254144","1121254151","CA" +"1121254152","1121254159","AG" +"1121254160","1121254191","CA" +"1121254192","1121254199","CR" +"1121254200","1121254207","AW" +"1121254208","1121254215","GI" +"1121254216","1121254223","CA" +"1121254224","1121254231","BZ" +"1121254232","1121254239","CA" +"1121254240","1121254255","CR" +"1121254256","1121254271","AG" +"1121254272","1121255423","CA" +"1121255424","1121468463","US" +"1121468464","1121468479","AR" +"1121468480","1121468495","US" +"1121468496","1121468511","PK" +"1121468512","1121468519","AU" +"1121468520","1121468527","IN" +"1121468528","1121468551","US" +"1121468552","1121468559","CA" +"1121468560","1121468567","US" +"1121468568","1121468575","AU" +"1121468576","1121468591","US" +"1121468592","1121468600","AU" +"1121468601","1121468911","US" +"1121468912","1121468927","GB" +"1121468928","1121469175","US" +"1121469176","1121469183","CA" +"1121469184","1121469367","US" +"1121469368","1121469375","CA" +"1121469376","1121469839","US" +"1121469840","1121469847","AU" +"1121469848","1121469871","US" +"1121469872","1121469879","SE" +"1121469880","1121469911","US" +"1121469912","1121469919","PH" +"1121469920","1121470015","US" +"1121470016","1121470047","AU" +"1121470048","1121470175","US" +"1121470176","1121470191","CA" +"1121470192","1121470215","US" +"1121470216","1121470223","CA" +"1121470224","1121470263","US" +"1121470264","1121470271","CA" +"1121470272","1121470311","US" +"1121470312","1121470319","IL" +"1121470320","1121470423","US" +"1121470424","1121470463","NL" +"1121470464","1121470551","US" +"1121470552","1121470559","LB" +"1121470560","1121470583","US" +"1121470584","1121470591","AU" +"1121470592","1121470703","US" +"1121470704","1121470711","VU" +"1121470712","1121470727","US" +"1121470728","1121470735","CA" +"1121470736","1121470759","US" +"1121470760","1121470767","FR" +"1121470768","1121470815","US" +"1121470816","1121470831","AU" +"1121470832","1121470847","US" +"1121470848","1121470863","AU" +"1121470864","1121470871","US" +"1121470872","1121470879","AU" +"1121470880","1121471063","US" +"1121471064","1121471071","AU" +"1121471072","1121471087","US" +"1121471088","1121471095","AU" +"1121471096","1121471127","US" +"1121471128","1121471135","AU" +"1121471136","1121471151","US" +"1121471152","1121471159","CH" +"1121471160","1121471279","US" +"1121471280","1121471295","GB" +"1121471296","1121471375","US" +"1121471376","1121471391","DK" +"1121471392","1121471471","US" +"1121471472","1121471487","CA" +"1121471488","1121471503","MY" +"1121471504","1121471511","US" +"1121471512","1121471519","BR" +"1121471520","1121471527","US" +"1121471528","1121471535","EC" +"1121471536","1121471559","US" +"1121471560","1121471575","CA" +"1121471576","1121471591","US" +"1121471592","1121471599","CA" +"1121471600","1121471623","US" +"1121471624","1121471631","CA" +"1121471632","1121471655","US" +"1121471656","1121471663","CA" +"1121471664","1121471703","US" +"1121471704","1121471711","JP" +"1121471712","1121471719","US" +"1121471720","1121471727","IT" +"1121471728","1121471935","US" +"1121471936","1121471943","CA" +"1121471944","1121471951","IN" +"1121471952","1121471975","US" +"1121471976","1121471983","CA" +"1121471984","1121472047","US" +"1121472048","1121472055","MY" +"1121472056","1121472263","US" +"1121472264","1121472271","LK" +"1121472272","1121472287","US" +"1121472288","1121472303","IN" +"1121472304","1121472375","US" +"1121472376","1121472447","AU" +"1121472448","1121472511","US" +"1121472512","1121472519","NZ" +"1121472520","1121472527","CA" +"1121472528","1121472559","US" +"1121472560","1121472567","IN" +"1121472568","1121472655","US" +"1121472656","1121472663","UA" +"1121472664","1121472727","US" +"1121472728","1121472735","CA" +"1121472736","1121472743","LB" +"1121472744","1121472775","US" +"1121472776","1121472807","RU" +"1121472808","1121472831","US" +"1121472832","1121472839","LB" +"1121472840","1121472847","US" +"1121472848","1121472863","IN" +"1121472864","1121472871","US" +"1121472872","1121472879","SE" +"1121472880","1121472887","IT" +"1121472888","1121472927","US" +"1121472928","1121472935","GB" +"1121472936","1121473175","US" +"1121473176","1121473183","FR" +"1121473184","1121473239","US" +"1121473240","1121473247","ES" +"1121473248","1121473279","US" +"1121473280","1121473295","AU" +"1121473296","1121473303","US" +"1121473304","1121473311","AU" +"1121473312","1121473439","US" +"1121473440","1121473471","AU" +"1121473472","1121473479","US" +"1121473480","1121473487","CA" +"1121473488","1121473599","US" +"1121473600","1121473607","GB" +"1121473608","1121473871","US" +"1121473872","1121473887","NL" +"1121473888","1121474007","US" +"1121474008","1121474015","DE" +"1121474016","1121474031","US" +"1121474032","1121474039","AG" +"1121474040","1121474063","US" +"1121474064","1121474071","GB" +"1121474072","1121474079","SI" +"1121474080","1121474095","US" +"1121474096","1121474111","CA" +"1121474112","1121474151","US" +"1121474152","1121474159","CA" +"1121474160","1121474351","US" +"1121474352","1121474359","NZ" +"1121474360","1121474383","US" +"1121474384","1121474415","AU" +"1121474416","1121474535","US" +"1121474536","1121474543","GB" +"1121474544","1121474591","US" +"1121474592","1121474607","CA" +"1121474608","1121474927","US" +"1121474928","1121474935","AU" +"1121474936","1121475135","US" +"1121475136","1121475151","FR" +"1121475152","1121475199","US" +"1121475200","1121475215","IN" +"1121475216","1121475295","US" +"1121475296","1121475327","BD" +"1121475328","1121475967","US" +"1121475968","1121476031","AU" +"1121476032","1121476191","US" +"1121476192","1121476223","BD" +"1121476224","1121476431","US" +"1121476432","1121476439","JP" +"1121476440","1121476927","US" +"1121476928","1121476935","IN" +"1121476936","1121477391","US" +"1121477392","1121477399","IN" +"1121477400","1121477415","US" +"1121477416","1121477423","NZ" +"1121477424","1121477439","US" +"1121477440","1121477447","ID" +"1121477448","1121477551","US" +"1121477552","1121477567","CA" +"1121477568","1121477599","US" +"1121477600","1121477607","AU" +"1121477608","1121477935","US" +"1121477936","1121477943","CA" +"1121477944","1121478023","US" +"1121478024","1121478031","GB" +"1121478032","1121478079","US" +"1121478080","1121478087","CA" +"1121478088","1121478095","US" +"1121478096","1121478111","CA" +"1121478112","1121478167","US" +"1121478168","1121478175","AU" +"1121478176","1121478207","US" +"1121478208","1121478239","GB" +"1121478240","1121478343","US" +"1121478344","1121478367","AU" +"1121478368","1121478511","US" +"1121478512","1121478519","RU" +"1121478520","1121478527","KE" +"1121478528","1121478591","US" +"1121478592","1121478655","AU" +"1121478656","1121478687","US" +"1121478688","1121478703","NZ" +"1121478704","1121478967","US" +"1121478968","1121478975","AU" +"1121478976","1121478991","US" +"1121478992","1121478999","IN" +"1121479000","1121479023","US" +"1121479024","1121479031","CY" +"1121479032","1121479143","US" +"1121479144","1121479167","EG" +"1121479168","1121479215","US" +"1121479216","1121479231","CA" +"1121479232","1121479295","US" +"1121479296","1121479303","HK" +"1121479304","1121479343","CA" +"1121479344","1121479359","US" +"1121479360","1121479367","NZ" +"1121479368","1121479407","US" +"1121479408","1121479415","CA" +"1121479416","1121479687","US" +"1121479688","1121479695","CA" +"1121479696","1121479759","US" +"1121479760","1121479783","AU" +"1121479784","1121479831","US" +"1121479832","1121479839","NZ" +"1121479840","1121479847","IN" +"1121479848","1121479919","US" +"1121479920","1121479927","AU" +"1121479928","1121480783","US" +"1121480784","1121480791","TH" +"1121480792","1121480847","US" +"1121480848","1121480855","CY" +"1121480856","1121480903","US" +"1121480904","1121480911","HK" +"1121480912","1121480959","US" +"1121480960","1121480967","AU" +"1121480968","1121480991","US" +"1121480992","1121481023","AU" +"1121481024","1121481039","US" +"1121481040","1121481047","AU" +"1121481048","1121481055","US" +"1121481056","1121481087","AU" +"1121481088","1121481407","US" +"1121481408","1121481415","GB" +"1121481416","1121481439","US" +"1121481440","1121481447","AT" +"1121481448","1121482799","US" +"1121482800","1121482807","AU" +"1121482808","1121483567","US" +"1121483568","1121483575","PT" +"1121483576","1121483759","US" +"1121483760","1121483775","FR" +"1121483776","1121654863","US" +"1121654864","1121654879","IN" +"1121654880","1121654975","US" +"1121654976","1121654991","FR" +"1121654992","1121655231","US" +"1121655232","1121655263","AR" +"1121655264","1121655439","US" +"1121655440","1121655447","IN" +"1121655448","1121655455","US" +"1121655456","1121655463","IN" +"1121655464","1121656063","US" +"1121656064","1121656095","NZ" +"1121656096","1121714975","US" +"1121714976","1121714991","AU" +"1121714992","1121714998","US" +"1121714999","1121714999","KW" +"1121715000","1121715935","US" +"1121715936","1121715943","A1" +"1121715944","1121717431","US" +"1121717432","1121717439","JP" +"1121717440","1121878015","US" +"1121878016","1121910783","CA" +"1121910784","1122074623","US" +"1122074624","1122087935","CA" +"1122087936","1122088191","US" +"1122088192","1122091007","CA" +"1122091008","1122092623","US" +"1122092624","1122092631","CA" +"1122092632","1122092687","US" +"1122092688","1122092695","GB" +"1122092696","1122092799","US" +"1122092800","1122093055","CA" +"1122093056","1122093807","US" +"1122093808","1122093815","HK" +"1122093816","1122101127","US" +"1122101128","1122101135","SE" +"1122101136","1122101375","US" +"1122101376","1122101383","CO" +"1122101384","1122101471","US" +"1122101472","1122101479","VE" +"1122101480","1122103471","US" +"1122103472","1122103479","BE" +"1122103480","1122126745","US" +"1122126746","1122126753","CH" +"1122126754","1122140159","US" +"1122140160","1122148351","CA" +"1122148352","1122179343","US" +"1122179344","1122179351","CA" +"1122179352","1122197695","US" +"1122197696","1122197727","GB" +"1122197728","1122197735","US" +"1122197736","1122197743","GB" +"1122197744","1122197767","US" +"1122197768","1122197775","FR" +"1122197776","1122203135","US" +"1122203136","1122203391","GB" +"1122203392","1122269217","US" +"1122269218","1122269218","A1" +"1122269219","1122320959","US" +"1122320960","1122320995","PT" +"1122320996","1122411551","US" +"1122411552","1122411583","AU" +"1122411584","1122412497","US" +"1122412498","1122412498","LB" +"1122412499","1122416383","US" +"1122416384","1122416639","DM" +"1122416640","1122417919","US" +"1122417920","1122418175","AU" +"1122418176","1122451455","US" +"1122451456","1122455551","CO" +"1122455552","1122476031","US" +"1122476032","1122480127","PR" +"1122480128","1122480159","US" +"1122480160","1122480167","RU" +"1122480168","1122480207","US" +"1122480208","1122480223","GB" +"1122480224","1122480231","PL" +"1122480232","1122480415","US" +"1122480416","1122480423","CL" +"1122480424","1122480479","US" +"1122480480","1122480487","CA" +"1122480488","1122493055","US" +"1122493056","1122493183","ES" +"1122493184","1122493439","US" +"1122493440","1122494207","PR" +"1122494208","1122495231","US" +"1122495232","1122495999","PR" +"1122496000","1122497535","US" +"1122497536","1122498047","PR" +"1122498048","1122498559","US" +"1122498560","1122498815","PR" +"1122498816","1122499583","US" +"1122499584","1122500095","PR" +"1122500096","1122528603","US" +"1122528604","1122528613","ES" +"1122528614","1122535423","US" +"1122535424","1122538495","KR" +"1122538496","1122635775","US" +"1122635776","1122639871","CA" +"1122639872","1122667071","US" +"1122667072","1122667135","CH" +"1122667136","1122759247","US" +"1122759248","1122759263","CA" +"1122759264","1123123199","US" +"1123123200","1123127295","CA" +"1123127296","1123165247","US" +"1123165248","1123165311","CA" +"1123165312","1123180543","US" +"1123180544","1123184639","CA" +"1123184640","1123319807","US" +"1123319808","1123323903","CA" +"1123323904","1123336191","US" +"1123336192","1123352575","CA" +"1123352576","1123534847","US" +"1123534848","1123536895","AW" +"1123536896","1123582239","US" +"1123582240","1123582271","CY" +"1123582272","1123584511","US" +"1123584512","1123584767","ES" +"1123584768","1123589631","US" +"1123589632","1123589887","DE" +"1123589888","1123590143","US" +"1123590144","1123598335","VI" +"1123598336","1123651583","US" +"1123651584","1123651839","JM" +"1123651840","1123652095","BB" +"1123652096","1123653119","JM" +"1123653120","1123653375","BB" +"1123653376","1123653631","JM" +"1123653632","1123654655","KY" +"1123654656","1123655679","JM" +"1123655680","1123663871","US" +"1123663872","1123667967","SV" +"1123667968","1123670015","PR" +"1123670016","1123671039","US" +"1123671040","1123672063","PY" +"1123672064","1123694591","US" +"1123694592","1123694847","CA" +"1123694848","1123778559","US" +"1123794944","1123795199","DO" +"1123795200","1123801087","US" +"1123801088","1123801343","RU" +"1123801344","1123848191","US" +"1123848192","1123852287","CA" +"1123852288","1123870063","US" +"1123870064","1123870071","GB" +"1123870072","1123870295","US" +"1123870296","1123870303","HK" +"1123870304","1123870343","US" +"1123870344","1123870351","HK" +"1123870352","1123950591","US" +"1123950592","1123958783","CA" +"1123958784","1124028511","US" +"1124028512","1124028543","NC" +"1124028544","1125064703","US" +"1125064704","1125065215","GB" +"1125065216","1125076115","US" +"1125076116","1125076116","A1" +"1125076117","1125076167","US" +"1125076168","1125076168","A1" +"1125076169","1125076339","US" +"1125076340","1125076340","A1" +"1125076341","1125076348","US" +"1125076349","1125076349","A1" +"1125076350","1125081087","US" +"1125081088","1125081151","CL" +"1125081152","1125081183","CA" +"1125081184","1125081215","US" +"1125081216","1125081279","GB" +"1125081280","1125081855","US" +"1125081856","1125082111","DE" +"1125082112","1125082367","US" +"1125082368","1125082623","DE" +"1125082624","1125082655","US" +"1125082656","1125082687","UY" +"1125082688","1125082783","US" +"1125082784","1125082799","UY" +"1125082800","1125083007","US" +"1125083008","1125083023","RU" +"1125083024","1125083967","US" +"1125083968","1125084031","UY" +"1125084032","1125084063","US" +"1125084064","1125084095","SE" +"1125084096","1125085135","US" +"1125085136","1125085151","DE" +"1125085152","1125086079","US" +"1125086080","1125086143","AU" +"1125086144","1125087999","US" +"1125088000","1125088255","CA" +"1125088256","1125090303","US" +"1125090304","1125090335","AU" +"1125090336","1125090367","US" +"1125090368","1125090431","ZA" +"1125090432","1125090479","US" +"1125090480","1125090495","DE" +"1125090496","1125091087","US" +"1125091088","1125091103","CA" +"1125091104","1125091135","US" +"1125091136","1125091167","SK" +"1125091168","1125091183","US" +"1125091184","1125091199","UY" +"1125091200","1125091455","US" +"1125091456","1125091519","ES" +"1125091520","1125091583","US" +"1125091584","1125091647","GB" +"1125091648","1125091663","US" +"1125091664","1125091679","HU" +"1125091680","1125091711","SE" +"1125091712","1125091743","CA" +"1125091744","1125091759","US" +"1125091760","1125091775","UY" +"1125091776","1125091839","CA" +"1125091840","1125093471","US" +"1125093472","1125093503","IL" +"1125093504","1125093567","SK" +"1125093568","1125093631","AU" +"1125093632","1125094463","US" +"1125094464","1125094527","BR" +"1125094528","1125094655","US" +"1125094656","1125094671","GB" +"1125094672","1125094783","US" +"1125094784","1125094799","GB" +"1125094800","1125094847","CA" +"1125094848","1125094911","BR" +"1125094912","1125095039","AU" +"1125095040","1125095167","GB" +"1125095168","1125095183","BE" +"1125095184","1125095295","US" +"1125095296","1125095327","AU" +"1125095328","1125096959","US" +"1125096960","1125097087","AR" +"1125097088","1125097215","US" +"1125097216","1125097279","AU" +"1125097280","1125097343","BR" +"1125097344","1125097407","US" +"1125097408","1125097439","IL" +"1125097440","1125097455","US" +"1125097456","1125097471","GB" +"1125097472","1125097791","US" +"1125097792","1125097823","ES" +"1125097824","1125097855","AU" +"1125097856","1125097871","JO" +"1125097872","1125097887","UY" +"1125097888","1125097919","US" +"1125097920","1125097983","IL" +"1125097984","1125099775","US" +"1125099776","1125100031","GB" +"1125100032","1125103359","US" +"1125103360","1125103487","A1" +"1125103488","1125103519","UY" +"1125103520","1125106111","US" +"1125106112","1125106175","GB" +"1125106176","1125106207","AU" +"1125106208","1125106223","TR" +"1125106224","1125106239","FR" +"1125106240","1125106255","UY" +"1125106256","1125106271","FR" +"1125106272","1125106303","US" +"1125106304","1125106367","DE" +"1125106368","1125110271","US" +"1125110272","1125110335","GB" +"1125110336","1125110399","US" +"1125110400","1125110463","KW" +"1125110464","1125110783","US" +"1125110784","1125110911","MA" +"1125110912","1125110927","UY" +"1125110928","1125110943","TW" +"1125110944","1125110959","CA" +"1125110960","1125110975","US" +"1125110976","1125111039","MA" +"1125111040","1125111423","US" +"1125111424","1125111439","BR" +"1125111440","1125111455","US" +"1125111456","1125111471","CA" +"1125111472","1125111487","US" +"1125111488","1125111519","GB" +"1125111520","1125111535","IL" +"1125111536","1125111743","US" +"1125111744","1125111775","DE" +"1125111776","1125112447","US" +"1125112448","1125112511","PL" +"1125112512","1125112767","US" +"1125112768","1125112783","GB" +"1125112784","1125112831","US" +"1125112832","1125113087","MA" +"1125113088","1125115647","US" +"1125115648","1125115663","ES" +"1125115664","1125115727","US" +"1125115728","1125115743","ES" +"1125115744","1125116159","US" +"1125116160","1125116191","BR" +"1125116192","1125116223","TR" +"1125116224","1125116415","US" +"1125116416","1125116671","MA" +"1125116672","1125116959","US" +"1125116960","1125116991","JP" +"1125116992","1125117023","US" +"1125117024","1125117055","BR" +"1125117056","1125117151","US" +"1125117152","1125117167","UY" +"1125117168","1125117183","US" +"1125117184","1125117439","MA" +"1125117440","1125118495","US" +"1125118496","1125118511","BR" +"1125118512","1125118527","US" +"1125118528","1125118559","UY" +"1125118560","1125118591","TR" +"1125118592","1125118655","US" +"1125118656","1125118687","IL" +"1125118688","1125118719","BR" +"1125118720","1125119199","US" +"1125119200","1125119231","TR" +"1125119232","1125119743","US" +"1125119744","1125119871","RO" +"1125119872","1125119903","US" +"1125119904","1125119935","IL" +"1125119936","1125119967","JP" +"1125119968","1125120255","US" +"1125120256","1125120511","MA" +"1125120512","1125120767","US" +"1125120768","1125120799","UY" +"1125120800","1125120831","IL" +"1125120832","1125120863","US" +"1125120864","1125120895","GB" +"1125120896","1125121023","RO" +"1125121024","1125238553","US" +"1125238554","1125238554","ES" +"1125238555","1125290241","US" +"1125290242","1125290242","AE" +"1125290243","1125350145","US" +"1125350146","1125350146","A1" +"1125350147","1125396483","US" +"1125396484","1125396491","LK" +"1125396492","1125396999","US" +"1125397000","1125397007","ES" +"1125397008","1125398466","US" +"1125398467","1125398468","LK" +"1125398469","1125454007","US" +"1125454008","1125454015","GB" +"1125454016","1125454111","US" +"1125454112","1125454119","ES" +"1125454120","1125454271","US" +"1125454272","1125454279","DE" +"1125454280","1125454303","US" +"1125454304","1125454323","NO" +"1125454324","1125454327","SG" +"1125454328","1125454343","US" +"1125454344","1125454351","NO" +"1125454352","1125454371","US" +"1125454372","1125454375","ES" +"1125454376","1125454383","US" +"1125454384","1125454395","NO" +"1125454396","1125454411","US" +"1125454412","1125454423","NO" +"1125454424","1125454435","ES" +"1125454436","1125454439","NO" +"1125454440","1125454447","ES" +"1125454448","1125454451","NO" +"1125454452","1125454459","US" +"1125454460","1125454463","NO" +"1125454464","1125454467","ES" +"1125454468","1125454471","NO" +"1125454472","1125454479","ES" +"1125454480","1125454483","NO" +"1125454484","1125454487","ES" +"1125454488","1125454495","NO" +"1125454496","1125454499","CA" +"1125454500","1125454511","US" +"1125454512","1125454527","NO" +"1125454528","1125454543","US" +"1125454544","1125454551","ES" +"1125454552","1125454587","US" +"1125454588","1125454591","CA" +"1125454592","1125454847","A2" +"1125454848","1125455359","US" +"1125455360","1125455363","CA" +"1125455364","1125455395","US" +"1125455396","1125455399","NO" +"1125455400","1125455423","US" +"1125455424","1125455427","ES" +"1125455428","1125455431","GB" +"1125455432","1125455435","US" +"1125455436","1125455439","ES" +"1125455440","1125455443","CA" +"1125455444","1125455447","US" +"1125455448","1125455451","NO" +"1125455452","1125455475","US" +"1125455476","1125455479","NO" +"1125455480","1125455491","US" +"1125455492","1125455495","GB" +"1125455496","1125455499","CA" +"1125455500","1125455507","US" +"1125455508","1125455515","ES" +"1125455516","1125455519","CA" +"1125455520","1125455523","ES" +"1125455524","1125455527","US" +"1125455528","1125455531","GB" +"1125455532","1125455535","NO" +"1125455536","1125455543","US" +"1125455544","1125455547","ES" +"1125455548","1125455551","VG" +"1125455552","1125455555","ES" +"1125455556","1125455559","US" +"1125455560","1125455563","NZ" +"1125455564","1125455567","ES" +"1125455568","1125455571","US" +"1125455572","1125455575","NO" +"1125455576","1125455579","AN" +"1125455580","1125455615","US" +"1125455616","1125455871","A2" +"1125455872","1125456131","US" +"1125456132","1125456135","NO" +"1125456136","1125456139","A2" +"1125456140","1125456163","US" +"1125456164","1125456167","NO" +"1125456168","1125456175","US" +"1125456176","1125456179","NO" +"1125456180","1125456191","US" +"1125456192","1125456195","GB" +"1125456196","1125456199","NO" +"1125456200","1125456203","AN" +"1125456204","1125456207","US" +"1125456208","1125456211","SG" +"1125456212","1125456231","US" +"1125456232","1125456239","ES" +"1125456240","1125456247","GB" +"1125456248","1125456259","AN" +"1125456260","1125456263","ES" +"1125456264","1125456407","US" +"1125456408","1125456411","AN" +"1125456412","1125456415","US" +"1125456416","1125456419","AN" +"1125456420","1125474303","US" +"1125474304","1125478399","CA" +"1125478400","1125479199","US" +"1125479200","1125479263","BR" +"1125479264","1125481215","US" +"1125481216","1125481471","CA" +"1125481472","1125493127","US" +"1125493128","1125493135","CA" +"1125493136","1125498879","US" +"1125498880","1125508095","CA" +"1125508096","1125508351","PA" +"1125508352","1125514239","CA" +"1125514240","1125514495","CY" +"1125514496","1125514751","US" +"1125514752","1125515263","CA" +"1125515264","1125528063","US" +"1125528064","1125528319","GB" +"1125528320","1125531647","US" +"1125531648","1125539903","CA" +"1125539904","1125539935","US" +"1125539936","1125540151","CA" +"1125540152","1125540159","GB" +"1125540160","1125540207","CA" +"1125540208","1125540223","US" +"1125540224","1125540479","CA" +"1125540480","1125540495","US" +"1125540496","1125540511","CA" +"1125540512","1125540527","US" +"1125540528","1125540543","IE" +"1125540544","1125540575","CA" +"1125540576","1125540591","US" +"1125540592","1125540703","CA" +"1125540704","1125540711","US" +"1125540712","1125540927","CA" +"1125540928","1125540959","US" +"1125540960","1125541151","CA" +"1125541152","1125541159","CN" +"1125541160","1125541183","CA" +"1125541184","1125541215","KY" +"1125541216","1125541223","CA" +"1125541224","1125541231","US" +"1125541232","1125541247","CA" +"1125541248","1125541279","US" +"1125541280","1125541391","CA" +"1125541392","1125541407","US" +"1125541408","1125541487","CA" +"1125541488","1125541503","US" +"1125541504","1125541543","CA" +"1125541544","1125541551","CN" +"1125541552","1125541807","CA" +"1125541808","1125541815","US" +"1125541816","1125541951","CA" +"1125541952","1125541959","BM" +"1125541960","1125542143","CA" +"1125542144","1125542159","US" +"1125542160","1125542175","CA" +"1125542176","1125542199","US" +"1125542200","1125542239","CA" +"1125542240","1125542255","FR" +"1125542256","1125542351","CA" +"1125542352","1125542367","US" +"1125542368","1125543687","CA" +"1125543688","1125543695","US" +"1125543696","1125543887","CA" +"1125543888","1125543903","US" +"1125543904","1125543919","CA" +"1125543920","1125545983","US" +"1125548032","1125548291","CA" +"1125548292","1125548351","US" +"1125548352","1125550079","CA" +"1125550080","1125550335","US" +"1125550336","1125552127","CA" +"1125552128","1125572607","US" +"1125572608","1125576703","CA" +"1125576704","1125593371","US" +"1125593372","1125593375","GB" +"1125593376","1125593503","US" +"1125593504","1125593599","CA" +"1125593600","1125595695","US" +"1125595696","1125595711","NG" +"1125595712","1125596343","US" +"1125596344","1125596351","NO" +"1125596352","1125596479","US" +"1125596480","1125596503","GB" +"1125596504","1125596687","US" +"1125596688","1125596695","VE" +"1125596696","1125613567","US" +"1125613568","1125617663","CA" +"1125617664","1125623295","US" +"1125623296","1125623551","IN" +"1125623552","1125623807","US" +"1125623808","1125624063","A1" +"1125624064","1125626111","US" +"1125626112","1125626367","A1" +"1125626368","1125628671","US" +"1125628672","1125628703","NZ" +"1125628704","1125641790","US" +"1125641791","1125641792","CA" +"1125641793","1125642185","US" +"1125642186","1125642189","CA" +"1125642190","1125642301","US" +"1125642302","1125642303","IN" +"1125642304","1125642674","US" +"1125642675","1125642694","BO" +"1125642695","1125643183","US" +"1125643184","1125643187","BR" +"1125643188","1125644770","US" +"1125644771","1125644771","PK" +"1125644772","1125645449","US" +"1125645450","1125645453","CA" +"1125645454","1126924287","US" +"1126924288","1126928383","CA" +"1126928384","1126928639","A1" +"1126928640","1126931455","US" +"1126931456","1126931711","A1" +"1126931712","1126948863","US" +"1126948864","1126949375","CA" +"1126949376","1126949503","GB" +"1126949504","1126949559","CA" +"1126949560","1126949567","BZ" +"1126949568","1126949583","CA" +"1126949584","1126949591","LB" +"1126949592","1126949607","CA" +"1126949608","1126949615","CN" +"1126949616","1126949631","LB" +"1126949632","1126949695","CA" +"1126949696","1126949759","PK" +"1126949760","1126950191","CA" +"1126950192","1126950199","ES" +"1126950200","1126950207","HR" +"1126950208","1126950415","CA" +"1126950416","1126950423","PK" +"1126950424","1126950463","CA" +"1126950464","1126950495","IT" +"1126950496","1126950599","CA" +"1126950600","1126950607","CN" +"1126950608","1126950623","CA" +"1126950624","1126950655","FR" +"1126950656","1126950783","CA" +"1126950784","1126950847","MY" +"1126950848","1126951775","CA" +"1126951776","1126951783","PH" +"1126951784","1126951967","CA" +"1126951968","1126951975","KP" +"1126951976","1126951999","CA" +"1126952000","1126952007","LB" +"1126952008","1126952015","CA" +"1126952016","1126952023","LB" +"1126952024","1126952031","CA" +"1126952032","1126952039","LB" +"1126952040","1126952263","CA" +"1126952264","1126952271","PH" +"1126952272","1126952559","CA" +"1126952560","1126952567","TH" +"1126952568","1126952895","CA" +"1126952896","1126952959","CY" +"1126952960","1127677951","US" +"1127677952","1127694335","CA" +"1127694336","1127707467","US" +"1127707468","1127707468","A1" +"1127707469","1127923711","US" +"1127923712","1127931903","CA" +"1127931904","1127976191","US" +"1127976192","1127976223","IL" +"1127976224","1127979111","US" +"1127979112","1127979119","CA" +"1127979120","1127986087","US" +"1127986088","1127986095","RO" +"1127986096","1127986935","US" +"1127986936","1127986943","IN" +"1127986944","1127988551","US" +"1127988552","1127988559","AU" +"1127988560","1127988687","US" +"1127988688","1127988695","IL" +"1127988696","1128529919","US" +"1128529920","1128633999","CA" +"1128634000","1128634015","US" +"1128634016","1128641023","CA" +"1128641024","1128641535","US" +"1128641536","1128792063","CA" +"1128792064","1128818687","US" +"1128818688","1128818719","CA" +"1128818720","1132582463","US" +"1132582464","1132582479","CA" +"1132582480","1132698119","US" +"1132698120","1132698127","CA" +"1132698128","1132713607","US" +"1132713608","1132713615","CA" +"1132713616","1132764423","US" +"1132764424","1132764431","MX" +"1132764432","1132910111","US" +"1132910112","1132910143","AU" +"1132910144","1132947431","US" +"1132947432","1132947439","CA" +"1132947440","1132954319","US" +"1132954320","1132954335","IS" +"1132954336","1133461247","US" +"1133461248","1133461503","CA" +"1133461504","1133785375","US" +"1133785376","1133785383","NE" +"1133785384","1133785391","US" +"1133785392","1133785407","GB" +"1133785408","1133785471","US" +"1133785472","1133785503","GB" +"1133785504","1133785567","US" +"1133785568","1133785599","BE" +"1133785600","1134029311","US" +"1134029312","1134029567","A2" +"1134029568","1134440447","US" +"1134440448","1134443520","CN" +"1134443521","1134444543","US" +"1134444544","1134448639","CA" +"1134448640","1134494361","US" +"1134494362","1134494362","A1" +"1134494363","1134494689","US" +"1134494690","1134494690","A1" +"1134494691","1134496041","US" +"1134496042","1134496042","A1" +"1134496043","1134499659","US" +"1134499660","1134499660","A1" +"1134499661","1134502354","US" +"1134502355","1134502355","A1" +"1134502356","1134505665","US" +"1134505666","1134505666","A1" +"1134505667","1134505867","US" +"1134505868","1134505868","A1" +"1134505869","1134505931","US" +"1134505932","1134505934","A1" +"1134505935","1134506628","US" +"1134506629","1134506629","A1" +"1134506630","1134506907","US" +"1134506908","1134506910","A1" +"1134506911","1134508267","US" +"1134508268","1134508268","A1" +"1134508269","1134545919","US" +"1134545920","1134545951","BH" +"1134545952","1134546175","US" +"1134546176","1134546207","BH" +"1134546208","1134546943","US" +"1134546944","1134551039","CA" +"1134551040","1134759726","US" +"1134759727","1134759727","A1" +"1134759728","1136517007","US" +"1136517008","1136517023","GB" +"1136517024","1136517039","US" +"1136517040","1136517055","GB" +"1136517056","1136656503","US" +"1136656504","1136656511","CA" +"1136656512","1136656583","US" +"1136656584","1136656591","GB" +"1136656592","1136656615","US" +"1136656616","1136656631","AU" +"1136656632","1136656863","US" +"1136656864","1136656895","CA" +"1136656896","1136657039","US" +"1136657040","1136657047","CA" +"1136657048","1136657615","US" +"1136657616","1136657623","GB" +"1136657624","1136657775","US" +"1136657776","1136657783","CA" +"1136657784","1136657815","US" +"1136657816","1136657823","CA" +"1136657824","1136657871","US" +"1136657872","1136657887","GT" +"1136657888","1136657911","US" +"1136657912","1136657919","CA" +"1136657920","1136658087","US" +"1136658088","1136658095","CN" +"1136658096","1136658111","MX" +"1136658112","1136658119","US" +"1136658120","1136658127","JP" +"1136658128","1136658135","US" +"1136658136","1136658143","AU" +"1136658144","1136658151","US" +"1136658152","1136658159","AU" +"1136658160","1136658439","US" +"1136658440","1136658447","MX" +"1136658448","1136658711","US" +"1136658712","1136658719","IN" +"1136658720","1136658727","NZ" +"1136658728","1136658991","US" +"1136658992","1136658999","AU" +"1136659000","1136659023","US" +"1136659024","1136659031","AU" +"1136659032","1136659039","US" +"1136659040","1136659047","AU" +"1136659048","1136659599","US" +"1136659600","1136659607","MX" +"1136659608","1136659639","US" +"1136659640","1136659647","FR" +"1136659648","1136659767","US" +"1136659768","1136659775","CA" +"1136659776","1136659927","US" +"1136659928","1136659935","CA" +"1136659936","1136659967","US" +"1136659968","1136659975","CA" +"1136659976","1136660047","US" +"1136660048","1136660055","GB" +"1136660056","1136660223","US" +"1136660224","1136660231","CA" +"1136660232","1136660239","US" +"1136660240","1136660247","GB" +"1136660248","1136660471","US" +"1136660472","1136660479","GB" +"1136660480","1136660487","US" +"1136660488","1136660495","NO" +"1136660496","1136660511","US" +"1136660512","1136660519","HR" +"1136660520","1136660759","US" +"1136660760","1136660767","CA" +"1136660768","1136660775","US" +"1136660776","1136660791","CA" +"1136660792","1136660823","US" +"1136660824","1136660839","CA" +"1136660840","1136660871","US" +"1136660872","1136660879","AU" +"1136660880","1136660943","US" +"1136660944","1136660951","IN" +"1136660952","1136661295","US" +"1136661296","1136661303","TW" +"1136661304","1136661327","US" +"1136661328","1136661335","IN" +"1136661336","1136661343","US" +"1136661344","1136661351","CN" +"1136661352","1136661367","US" +"1136661368","1136661375","IN" +"1136661376","1136661399","US" +"1136661400","1136661407","MX" +"1136661408","1136661631","US" +"1136661632","1136661639","IN" +"1136661640","1136661687","US" +"1136661688","1136661695","GB" +"1136661696","1136661727","US" +"1136661728","1136661743","CA" +"1136661744","1136661919","US" +"1136661920","1136661951","CA" +"1136661952","1136662087","US" +"1136662088","1136662095","CA" +"1136662096","1136662151","US" +"1136662152","1136662159","MX" +"1136662160","1136662575","US" +"1136662576","1136662583","CA" +"1136662584","1136662663","US" +"1136662664","1136662671","CA" +"1136662672","1136662815","US" +"1136662816","1136662823","IN" +"1136662824","1136662911","US" +"1136662912","1136662919","IN" +"1136662920","1136663247","US" +"1136663248","1136663255","CL" +"1136663256","1136663575","US" +"1136663576","1136663583","CN" +"1136663584","1136663679","US" +"1136663680","1136663687","IN" +"1136663688","1136663695","JP" +"1136663696","1136664543","US" +"1136664544","1136664551","AU" +"1136664552","1136664639","US" +"1136664640","1136664647","CA" +"1136664648","1136664791","US" +"1136664792","1136664799","GB" +"1136664800","1136664815","US" +"1136664816","1136664823","IL" +"1136664824","1136664847","US" +"1136664848","1136664863","CA" +"1136664864","1136665103","US" +"1136665104","1136665111","AU" +"1136665112","1136665135","US" +"1136665136","1136665143","GB" +"1136665144","1136665655","US" +"1136665656","1136665663","IN" +"1136665664","1136665735","US" +"1136665736","1136665743","GB" +"1136665744","1136665759","US" +"1136665760","1136665767","CA" +"1136665768","1136665831","US" +"1136665832","1136665839","CA" +"1136665840","1136665919","US" +"1136665920","1136665927","DE" +"1136665928","1136666143","US" +"1136666144","1136666151","CA" +"1136666152","1136666223","US" +"1136666224","1136666231","PT" +"1136666232","1136666351","US" +"1136666352","1136666359","IL" +"1136666360","1136666447","US" +"1136666448","1136666463","GB" +"1136666464","1136666743","US" +"1136666744","1136666751","CA" +"1136666752","1136666791","US" +"1136666792","1136666799","IL" +"1136666800","1136666863","US" +"1136666864","1136666871","GB" +"1136666872","1136666991","US" +"1136666992","1136667007","CA" +"1136667008","1136667087","US" +"1136667088","1136667103","IL" +"1136667104","1136667447","US" +"1136667448","1136667455","GB" +"1136667456","1136667551","US" +"1136667552","1136667559","AU" +"1136667560","1136667599","US" +"1136667600","1136667615","IN" +"1136667616","1136667655","US" +"1136667656","1136667663","CA" +"1136667664","1136667759","US" +"1136667760","1136667767","KW" +"1136667768","1136668023","US" +"1136668024","1136668031","GB" +"1136668032","1136668127","US" +"1136668128","1136668159","AU" +"1136668160","1136668191","US" +"1136668192","1136668207","MX" +"1136668208","1136668287","US" +"1136668288","1136668303","IN" +"1136668304","1136668319","MX" +"1136668320","1136668335","US" +"1136668336","1136668351","MX" +"1136668352","1136668383","US" +"1136668384","1136668415","IN" +"1136668416","1136668447","US" +"1136668448","1136668455","IN" +"1136668456","1136668559","US" +"1136668560","1136668567","CA" +"1136668568","1136668671","US" +"1136668672","1136668679","IN" +"1136668680","1136668887","US" +"1136668888","1136668895","CL" +"1136668896","1136669143","US" +"1136669144","1136669151","IN" +"1136669152","1136669263","US" +"1136669264","1136669279","GB" +"1136669280","1136669343","US" +"1136669344","1136669359","CO" +"1136669360","1136669487","US" +"1136669488","1136669495","CA" +"1136669496","1136669511","US" +"1136669512","1136669519","CA" +"1136669520","1136669567","US" +"1136669568","1136669575","CA" +"1136669576","1136669583","MX" +"1136669584","1136669775","US" +"1136669776","1136669783","NL" +"1136669784","1136669911","US" +"1136669912","1136669919","ES" +"1136669920","1136670063","US" +"1136670064","1136670071","SG" +"1136670072","1136670151","US" +"1136670152","1136670159","SG" +"1136670160","1136670719","US" +"1136670720","1136670975","GB" +"1136670976","1136672999","US" +"1136673000","1136673007","CA" +"1136673008","1136673039","US" +"1136673040","1136673047","IN" +"1136673048","1136673231","US" +"1136673232","1136673239","GB" +"1136673240","1136673279","US" +"1136673280","1136673287","CA" +"1136673288","1136673327","US" +"1136673328","1136673335","CA" +"1136673336","1136673423","US" +"1136673424","1136673431","CA" +"1136673432","1136673559","US" +"1136673560","1136673567","VE" +"1136673568","1136673703","US" +"1136673704","1136673711","MX" +"1136673712","1136673855","US" +"1136673856","1136673863","CA" +"1136673864","1136673903","US" +"1136673904","1136673919","CA" +"1136673920","1136673927","GB" +"1136673928","1136674079","US" +"1136674080","1136674095","AU" +"1136674096","1136674447","US" +"1136674448","1136674463","AU" +"1136674464","1136674583","US" +"1136674584","1136674591","CA" +"1136674592","1136674607","MX" +"1136674608","1136674807","US" +"1136674808","1136674815","GB" +"1136674816","1136674863","US" +"1136674864","1136674871","IN" +"1136674872","1136674895","US" +"1136674896","1136674903","IL" +"1136674904","1136674911","GB" +"1136674912","1136674967","US" +"1136674968","1136674975","CA" +"1136674976","1136675007","US" +"1136675008","1136675015","AU" +"1136675016","1136675023","CL" +"1136675024","1136675055","US" +"1136675056","1136675063","ES" +"1136675064","1136675311","US" +"1136675312","1136675319","GB" +"1136675320","1136675751","US" +"1136675752","1136675759","IN" +"1136675760","1136675815","US" +"1136675816","1136675823","AE" +"1136675824","1136675839","US" +"1136675840","1136676095","GB" +"1136676096","1136676127","US" +"1136676128","1136676143","IE" +"1136676144","1136676255","US" +"1136676256","1136676271","CA" +"1136676272","1136676551","US" +"1136676552","1136676559","GB" +"1136676560","1136676583","US" +"1136676584","1136676591","AU" +"1136676592","1136676671","US" +"1136676672","1136676679","CA" +"1136676680","1136677375","US" +"1136677376","1136677391","AU" +"1136677392","1136677463","US" +"1136677464","1136677471","CA" +"1136677472","1136677615","US" +"1136677616","1136677631","CA" +"1136677632","1136678103","US" +"1136678104","1136678111","IN" +"1136678112","1136678303","US" +"1136678304","1136678319","MX" +"1136678320","1136678431","US" +"1136678432","1136678447","GB" +"1136678448","1136679071","US" +"1136679072","1136679087","CA" +"1136679088","1136679135","US" +"1136679136","1136679167","BR" +"1136679168","1136679215","US" +"1136679216","1136679223","GB" +"1136679224","1136679231","US" +"1136679232","1136679263","IL" +"1136679264","1136679279","US" +"1136679280","1136679295","CA" +"1136679296","1136680055","US" +"1136680056","1136680063","CA" +"1136680064","1136680143","US" +"1136680144","1136680151","NO" +"1136680152","1136680159","US" +"1136680160","1136680175","BD" +"1136680176","1136680311","US" +"1136680312","1136680319","IN" +"1136680320","1136680743","US" +"1136680744","1136680751","BD" +"1136680752","1136680759","IN" +"1136680760","1136681167","US" +"1136681168","1136681175","CA" +"1136681176","1136681191","US" +"1136681192","1136681199","MX" +"1136681200","1136681215","US" +"1136681216","1136681223","HN" +"1136681224","1136681231","US" +"1136681232","1136681239","IL" +"1136681240","1136681311","US" +"1136681312","1136681319","BR" +"1136681320","1136681439","US" +"1136681440","1136681447","GB" +"1136681448","1136681455","US" +"1136681456","1136681471","IL" +"1136681472","1136681487","US" +"1136681488","1136681495","GB" +"1136681496","1136681559","US" +"1136681560","1136681567","CA" +"1136681568","1136682271","US" +"1136682272","1136682303","GB" +"1136682304","1136682495","US" +"1136682496","1136682503","CA" +"1136682504","1136682527","US" +"1136682528","1136682559","CA" +"1136682560","1136682583","US" +"1136682584","1136682591","CA" +"1136682592","1136682695","US" +"1136682696","1136682703","CA" +"1136682704","1136682863","US" +"1136682864","1136682871","CA" +"1136682872","1136683095","US" +"1136683096","1136683103","IL" +"1136683104","1136683367","US" +"1136683368","1136683375","GB" +"1136683376","1136683383","ZA" +"1136683384","1136683527","US" +"1136683528","1136683535","AU" +"1136683536","1136683543","US" +"1136683544","1136683551","AE" +"1136683552","1136684047","US" +"1136684048","1136684063","CA" +"1136684064","1136684087","US" +"1136684088","1136684095","MX" +"1136684096","1136684103","US" +"1136684104","1136684111","CA" +"1136684112","1136684231","US" +"1136684232","1136684239","CA" +"1136684240","1136684247","IN" +"1136684248","1136684463","US" +"1136684464","1136684471","CA" +"1136684472","1136684559","US" +"1136684560","1136684575","CA" +"1136684576","1136684607","US" +"1136684608","1136684615","CA" +"1136684616","1136684623","US" +"1136684624","1136684631","IN" +"1136684632","1136684663","US" +"1136684664","1136684671","AU" +"1136684672","1136684679","GB" +"1136684680","1136684703","US" +"1136684704","1136684719","MX" +"1136684720","1136684735","US" +"1136684736","1136684751","IN" +"1136684752","1136684807","US" +"1136684808","1136684815","IT" +"1136684816","1136684895","US" +"1136684896","1136684911","CA" +"1136684912","1136684919","HR" +"1136684920","1136684975","US" +"1136684976","1136684983","CA" +"1136684984","1136684991","US" +"1136684992","1136684999","JP" +"1136685000","1136685055","US" +"1136685056","1136685183","CA" +"1136685184","1136685191","US" +"1136685192","1136685199","BM" +"1136685200","1136685231","US" +"1136685232","1136685239","CN" +"1136685240","1136685247","US" +"1136685248","1136685263","CA" +"1136685264","1136685791","US" +"1136685792","1136685799","IL" +"1136685800","1136685871","US" +"1136685872","1136685879","CA" +"1136685880","1136685903","US" +"1136685904","1136685911","HR" +"1136685912","1136685935","US" +"1136685936","1136685943","IT" +"1136685944","1136686047","US" +"1136686048","1136686055","IE" +"1136686056","1136689271","US" +"1136689272","1136689279","MX" +"1136689280","1136689431","US" +"1136689432","1136689439","BM" +"1136689440","1136689503","US" +"1136689504","1136689511","VE" +"1136689512","1136689551","US" +"1136689552","1136689559","IN" +"1136689560","1136689735","US" +"1136689736","1136689743","GB" +"1136689744","1136689815","US" +"1136689816","1136689823","GB" +"1136689824","1136689951","US" +"1136689952","1136689959","CA" +"1136689960","1136689975","US" +"1136689976","1136689983","IL" +"1136689984","1136690023","US" +"1136690024","1136690031","IN" +"1136690032","1136690055","US" +"1136690056","1136690063","CA" +"1136690064","1136690079","US" +"1136690080","1136690087","AU" +"1136690088","1136690407","US" +"1136690408","1136690415","BD" +"1136690416","1136690847","US" +"1136690848","1136690863","GB" +"1136690864","1136691415","US" +"1136691416","1136691423","CA" +"1136691424","1136691935","US" +"1136691936","1136691943","CA" +"1136691944","1136692039","US" +"1136692040","1136692047","AU" +"1136692048","1136692071","US" +"1136692072","1136692079","CA" +"1136692080","1136692239","US" +"1136692240","1136692247","AR" +"1136692248","1136692319","US" +"1136692320","1136692327","NL" +"1136692328","1136692535","US" +"1136692536","1136692543","GB" +"1136692544","1136692799","US" +"1136692800","1136692807","NZ" +"1136692808","1136692919","US" +"1136692920","1136692927","IN" +"1136692928","1136692991","US" +"1136692992","1136693055","IR" +"1136693056","1136693063","AU" +"1136693064","1136693503","US" +"1136693504","1136693511","GB" +"1136693512","1136693519","CA" +"1136693520","1136693887","US" +"1136693888","1136693903","CA" +"1136693904","1136693951","US" +"1136693952","1136693959","CA" +"1136693960","1136693967","AU" +"1136693968","1136693975","US" +"1136693976","1136693983","GB" +"1136693984","1136694079","US" +"1136694080","1136694087","BG" +"1136694088","1136694263","US" +"1136694264","1136694271","GB" +"1136694272","1136694303","US" +"1136694304","1136694311","KR" +"1136694312","1136694319","US" +"1136694320","1136694327","KR" +"1136694328","1136694399","US" +"1136694400","1136694415","CA" +"1136694416","1136694895","US" +"1136694896","1136694903","AU" +"1136694904","1136694991","US" +"1136694992","1136694999","GB" +"1136695000","1136695503","US" +"1136695504","1136695511","GB" +"1136695512","1136695703","US" +"1136695704","1136695711","DK" +"1136695712","1136695719","US" +"1136695720","1136695727","IL" +"1136695728","1136695743","DK" +"1136695744","1136696087","US" +"1136696088","1136696095","AU" +"1136696096","1136696111","US" +"1136696112","1136696127","AU" +"1136696128","1136696263","US" +"1136696264","1136696271","CA" +"1136696272","1136696647","US" +"1136696648","1136696655","GB" +"1136696656","1136696671","US" +"1136696672","1136696679","IL" +"1136696680","1136696711","US" +"1136696712","1136696719","GT" +"1136696720","1136696767","US" +"1136696768","1136696775","IL" +"1136696776","1136696855","US" +"1136696856","1136696863","GB" +"1136696864","1136697047","US" +"1136697048","1136697055","BM" +"1136697056","1136697455","US" +"1136697456","1136697463","CA" +"1136697464","1136697647","US" +"1136697648","1136697655","CA" +"1136697656","1136697767","US" +"1136697768","1136697775","GB" +"1136697776","1136697975","US" +"1136697976","1136697983","CA" +"1136697984","1136698023","US" +"1136698024","1136698031","GB" +"1136698032","1136698039","US" +"1136698040","1136698111","IE" +"1136698112","1136698815","US" +"1136698816","1136698823","GB" +"1136698824","1136699023","US" +"1136699024","1136699039","GB" +"1136699040","1136699087","US" +"1136699088","1136699095","GB" +"1136699096","1136699487","US" +"1136699488","1136699503","CA" +"1136699504","1136699511","US" +"1136699512","1136699519","SE" +"1136699520","1136699583","US" +"1136699584","1136699599","CA" +"1136699600","1136699623","US" +"1136699624","1136699631","CA" +"1136699632","1136699647","IN" +"1136699648","1136699695","US" +"1136699696","1136699703","AU" +"1136699704","1136699839","US" +"1136699840","1136699847","MT" +"1136699848","1136699935","US" +"1136699936","1136699943","AU" +"1136699944","1136699999","US" +"1136700000","1136700007","GB" +"1136700008","1136700031","US" +"1136700032","1136700039","CA" +"1136700040","1136700103","US" +"1136700104","1136700111","NZ" +"1136700112","1136700263","US" +"1136700264","1136700271","IL" +"1136700272","1136700343","US" +"1136700344","1136700351","MX" +"1136700352","1136700479","US" +"1136700480","1136700487","NZ" +"1136700488","1136700583","US" +"1136700584","1136700591","AU" +"1136700592","1136700663","US" +"1136700664","1136700671","DK" +"1136700672","1136700783","US" +"1136700784","1136700791","CA" +"1136700792","1136700847","US" +"1136700848","1136700855","CL" +"1136700856","1136700911","US" +"1136700912","1136700919","CA" +"1136700920","1136701119","US" +"1136701120","1136701183","AU" +"1136701184","1136701279","US" +"1136701280","1136701287","CA" +"1136701288","1136701335","US" +"1136701336","1136701343","GB" +"1136701344","1136701455","US" +"1136701456","1136701463","IN" +"1136701464","1136701527","US" +"1136701528","1136701543","CA" +"1136701544","1136702711","US" +"1136702712","1136702719","GB" +"1136702720","1136702727","CA" +"1136702728","1136702799","US" +"1136702800","1136702807","GB" +"1136702808","1136702871","US" +"1136702872","1136702879","AT" +"1136702880","1136702911","US" +"1136702912","1136702919","GB" +"1136702920","1136703095","US" +"1136703096","1136703103","CA" +"1136703104","1136703279","US" +"1136703280","1136703287","CA" +"1136703288","1136704639","US" +"1136704640","1136704703","GB" +"1136704704","1136705575","US" +"1136705576","1136705583","CA" +"1136705584","1136705671","US" +"1136705672","1136705679","CA" +"1136705680","1136705807","US" +"1136705808","1136705815","IN" +"1136705816","1136705823","RU" +"1136705824","1136706087","US" +"1136706088","1136706095","IN" +"1136706096","1136706119","US" +"1136706120","1136706127","CA" +"1136706128","1136706231","US" +"1136706232","1136706239","MX" +"1136706240","1136706359","US" +"1136706360","1136706367","BM" +"1136706368","1136706455","US" +"1136706456","1136706463","GB" +"1136706464","1136706471","CA" +"1136706472","1136706495","US" +"1136706496","1136706559","IE" +"1136706560","1136706591","US" +"1136706592","1136706599","AU" +"1136706600","1136706703","US" +"1136706704","1136706711","CA" +"1136706712","1136706935","US" +"1136706936","1136706943","AU" +"1136706944","1136707087","US" +"1136707088","1136707095","GB" +"1136707096","1136707175","US" +"1136707176","1136707183","ZA" +"1136707184","1136707263","US" +"1136707264","1136707271","IN" +"1136707272","1136707751","US" +"1136707752","1136707759","GB" +"1136707760","1136707775","US" +"1136707776","1136707783","BR" +"1136707784","1136707847","US" +"1136707848","1136707855","SG" +"1136707856","1136707887","US" +"1136707888","1136707895","CA" +"1136707896","1136708039","US" +"1136708040","1136708047","CA" +"1136708048","1136708679","US" +"1136708680","1136708687","GB" +"1136708688","1136708871","US" +"1136708872","1136708879","GB" +"1136708880","1136709023","US" +"1136709024","1136709031","BD" +"1136709032","1136709647","US" +"1136709648","1136709655","CA" +"1136709656","1136709679","US" +"1136709680","1136709695","AU" +"1136709696","1136709767","US" +"1136709768","1136709775","GB" +"1136709776","1136709815","US" +"1136709816","1136709823","CA" +"1136709824","1136709927","US" +"1136709928","1136709935","CA" +"1136709936","1136710191","US" +"1136710192","1136710199","GB" +"1136710200","1136710415","US" +"1136710416","1136710431","AU" +"1136710432","1136711479","US" +"1136711480","1136711487","ZA" +"1136711488","1136711927","US" +"1136711928","1136711935","GB" +"1136711936","1136711991","US" +"1136711992","1136711999","AU" +"1136712000","1136712607","US" +"1136712608","1136712615","GB" +"1136712616","1136712695","US" +"1136712696","1136712703","CA" +"1136712704","1136712991","US" +"1136712992","1136712999","CA" +"1136713000","1136713087","US" +"1136713088","1136713103","CA" +"1136713104","1136713151","US" +"1136713152","1136713167","CA" +"1136713168","1136713471","US" +"1136713472","1136713479","SG" +"1136713480","1136713583","US" +"1136713584","1136713591","CA" +"1136713592","1136713919","US" +"1136713920","1136713935","NO" +"1136713936","1136714031","US" +"1136714032","1136714039","BR" +"1136714040","1136714167","US" +"1136714168","1136714175","IE" +"1136714176","1136714255","US" +"1136714256","1136714263","GB" +"1136714264","1136714271","US" +"1136714272","1136714279","GB" +"1136714280","1136714639","US" +"1136714640","1136714647","DE" +"1136714648","1136714671","US" +"1136714672","1136714679","CN" +"1136714680","1136715135","US" +"1136715136","1136715151","MX" +"1136715152","1136715623","US" +"1136715624","1136715631","AU" +"1136715632","1136716287","US" +"1136716288","1136716295","ZA" +"1136716296","1136716431","US" +"1136716432","1136716439","IN" +"1136716440","1136716447","US" +"1136716448","1136716479","CA" +"1136716480","1136716631","US" +"1136716632","1136716639","AU" +"1136716640","1136716703","US" +"1136716704","1136716711","IN" +"1136716712","1136716759","US" +"1136716760","1136716767","CA" +"1136716768","1136716775","US" +"1136716776","1136716783","NZ" +"1136716784","1136716799","US" +"1136716800","1136716831","VI" +"1136716832","1136717167","US" +"1136717168","1136717183","IT" +"1136717184","1136717399","US" +"1136717400","1136717407","GB" +"1136717408","1136717551","US" +"1136717552","1136717559","CA" +"1136717560","1136717583","US" +"1136717584","1136717599","GB" +"1136717600","1136717935","US" +"1136717936","1136717943","CA" +"1136717944","1136718391","US" +"1136718392","1136718399","MX" +"1136718400","1136718439","US" +"1136718440","1136718447","IN" +"1136718448","1136718487","US" +"1136718488","1136718495","IN" +"1136718496","1136718759","US" +"1136718760","1136718767","AU" +"1136718768","1136718791","US" +"1136718792","1136718799","CA" +"1136718800","1136718879","US" +"1136718880","1136718895","AU" +"1136718896","1136721919","US" +"1136721920","1136787455","CA" +"1136787456","1137189135","US" +"1137189136","1137189151","IE" +"1137189152","1137189247","US" +"1137189248","1137189255","GB" +"1137189256","1137189263","US" +"1137189264","1137189271","GB" +"1137189272","1137195519","US" +"1137195520","1137195775","JP" +"1137195776","1137254815","US" +"1137254816","1137254831","NZ" +"1137254832","1137255167","US" +"1137255168","1137255423","IT" +"1137255424","1137256191","US" +"1137256192","1137256203","IT" +"1137256204","1137260927","US" +"1137260928","1137260959","IT" +"1137260960","1137261119","US" +"1137261120","1137261183","IT" +"1137261184","1137278975","US" +"1137278976","1137283071","CA" +"1137283072","1137287167","US" +"1137287168","1137295359","CA" +"1137295360","1137341063","US" +"1137341064","1137341064","GB" +"1137341065","1137369087","US" +"1137369088","1137369359","CA" +"1137369360","1137369375","US" +"1137369376","1137369519","CA" +"1137369520","1137369535","US" +"1137369536","1137369855","CA" +"1137369856","1137376255","US" +"1137376256","1137376335","CA" +"1137376336","1137376351","US" +"1137376352","1137376367","CA" +"1137376368","1137376383","US" +"1137376384","1137376463","CA" +"1137376464","1137376479","US" +"1137376480","1137376511","CA" +"1137376512","1137376639","US" +"1137376640","1137376719","CA" +"1137376720","1137377311","US" +"1137377312","1137377327","DE" +"1137377328","1137383455","US" +"1137383456","1137383471","DE" +"1137383472","1137426431","US" +"1137426432","1137442815","PR" +"1137442816","1137459199","CA" +"1137459200","1137491967","US" +"1137491968","1137508351","CA" +"1137508352","1137524735","US" +"1137524736","1137525642","CA" +"1137525643","1137525643","A1" +"1137525644","1137541119","CA" +"1137541120","1137623039","US" +"1137623040","1137639423","PR" +"1137639424","1137704967","US" +"1137704968","1137705287","CA" +"1137705288","1137705295","US" +"1137705296","1137705383","CA" +"1137705384","1137705391","NL" +"1137705392","1137705447","CA" +"1137705448","1137705455","US" +"1137705456","1137705727","CA" +"1137705728","1137705735","US" +"1137705736","1137705767","CA" +"1137705768","1137705791","US" +"1137705792","1137705879","CA" +"1137705880","1137705887","US" +"1137705888","1137705903","CA" +"1137705904","1137705911","US" +"1137705912","1137705943","CA" +"1137705944","1137705951","US" +"1137705952","1137706247","CA" +"1137706248","1137706263","US" +"1137706264","1137706319","CA" +"1137706320","1137706359","US" +"1137706360","1137706375","CA" +"1137706376","1137706383","US" +"1137706384","1137706775","CA" +"1137706776","1137706791","US" +"1137706792","1137706807","CA" +"1137706808","1137706823","US" +"1137706824","1137706831","CA" +"1137706832","1137706839","US" +"1137706840","1137706879","CA" +"1137706880","1137706887","US" +"1137706888","1137706903","CA" +"1137706904","1137706943","US" +"1137706944","1137706991","CA" +"1137706992","1137707007","US" +"1137707008","1137707071","CA" +"1137707072","1137707095","US" +"1137707096","1137707127","CA" +"1137707128","1137707143","US" +"1137707144","1137707151","CA" +"1137707152","1137707159","NL" +"1137707160","1137707191","US" +"1137707192","1137707199","CA" +"1137707200","1137707207","NL" +"1137707208","1137707223","US" +"1137707224","1137707255","CA" +"1137707256","1137707263","US" +"1137707264","1137707519","CA" +"1137707520","1137707575","US" +"1137707576","1137707583","NL" +"1137707584","1137707623","CA" +"1137707624","1137707647","US" +"1137707648","1137707663","CA" +"1137707664","1137707679","US" +"1137707680","1137707695","CA" +"1137707696","1137707719","NL" +"1137707720","1137707727","CA" +"1137707728","1137707743","US" +"1137707744","1137707759","CA" +"1137707760","1137707775","US" +"1137707776","1137708031","CA" +"1137708032","1137708151","US" +"1137708152","1137708167","CA" +"1137708168","1137708175","US" +"1137708176","1137708183","CA" +"1137708184","1137708207","US" +"1137708208","1137708215","CA" +"1137708216","1137708247","US" +"1137708248","1137708255","CA" +"1137708256","1137708279","US" +"1137708280","1137708927","CA" +"1137708928","1137708943","US" +"1137708944","1137708951","CA" +"1137708952","1137708959","US" +"1137708960","1137709007","CA" +"1137709008","1137709023","US" +"1137709024","1137709351","CA" +"1137709352","1137709359","US" +"1137709360","1137709383","CA" +"1137709384","1137709391","US" +"1137709392","1137709399","CA" +"1137709400","1137709407","US" +"1137709408","1137709423","CA" +"1137709424","1137709431","US" +"1137709432","1137709439","CA" +"1137709440","1137709447","US" +"1137709448","1137709463","CA" +"1137709464","1137709487","US" +"1137709488","1137709831","CA" +"1137709832","1137709839","US" +"1137709840","1137709903","CA" +"1137709904","1137709911","US" +"1137709912","1137709959","CA" +"1137709960","1137709967","NL" +"1137709968","1137710087","CA" +"1137710088","1137710095","US" +"1137710096","1137710151","CA" +"1137710152","1137710159","US" +"1137710160","1137710175","CA" +"1137710176","1137710183","US" +"1137710184","1137710191","CA" +"1137710192","1137710199","NL" +"1137710200","1137710215","CA" +"1137710216","1137710231","US" +"1137710232","1137710239","NL" +"1137710240","1137710247","US" +"1137710248","1137710295","CA" +"1137710296","1137710311","US" +"1137710312","1137710847","CA" +"1137710848","1137710959","US" +"1137710960","1137710967","CA" +"1137710968","1137711135","US" +"1137711136","1137711167","CA" +"1137711168","1137711175","US" +"1137711176","1137711191","CA" +"1137711192","1137711199","NL" +"1137711200","1137711207","CA" +"1137711208","1137711215","NL" +"1137711216","1137711223","US" +"1137711224","1137711231","CA" +"1137711232","1137711239","NL" +"1137711240","1137711247","US" +"1137711248","1137711255","CA" +"1137711256","1137711263","NL" +"1137711264","1137711279","US" +"1137711280","1137711287","NL" +"1137711288","1137711295","US" +"1137711296","1137711303","NL" +"1137711304","1137711335","US" +"1137711336","1137711367","CA" +"1137711368","1137711375","US" +"1137711376","1137711399","CA" +"1137711400","1137711407","US" +"1137711408","1137711439","CA" +"1137711440","1137711455","US" +"1137711456","1137711471","CA" +"1137711472","1137711487","US" +"1137711488","1137711503","CA" +"1137711504","1137711511","US" +"1137711512","1137711559","CA" +"1137711560","1137711567","US" +"1137711568","1137711575","CA" +"1137711576","1137711639","US" +"1137711640","1137711647","CA" +"1137711648","1137711655","US" +"1137711656","1137711687","CA" +"1137711688","1137711703","US" +"1137711704","1137711743","CA" +"1137711744","1137711751","US" +"1137711752","1137711759","CA" +"1137711760","1137711767","US" +"1137711768","1137711791","CA" +"1137711792","1137711807","US" +"1137711808","1137711863","CA" +"1137711864","1137711871","US" +"1137711872","1137712007","CA" +"1137712008","1137712015","US" +"1137712016","1137712055","CA" +"1137712056","1137712119","US" +"1137712120","1137712127","CA" +"1137712128","1137712135","US" +"1137712136","1137712151","CA" +"1137712152","1137712183","US" +"1137712184","1137712191","CA" +"1137712192","1137712215","US" +"1137712216","1137712223","CA" +"1137712224","1137712239","US" +"1137712240","1137712255","CA" +"1137712256","1137712263","US" +"1137712264","1137712279","CA" +"1137712280","1137712287","US" +"1137712288","1137712295","CA" +"1137712296","1137712327","US" +"1137712328","1137712343","CA" +"1137712344","1137712359","US" +"1137712360","1137712383","CA" +"1137712384","1137712671","US" +"1137712672","1137712687","CA" +"1137712688","1137712711","US" +"1137712712","1137712719","CA" +"1137712720","1137712759","US" +"1137712760","1137712767","CA" +"1137712768","1137712919","US" +"1137712920","1137712927","CA" +"1137712928","1137712959","US" +"1137712960","1137712975","CA" +"1137712976","1137713015","US" +"1137713016","1137713023","CA" +"1137713024","1137713071","US" +"1137713072","1137713087","CA" +"1137713088","1137713103","US" +"1137713104","1137713111","CA" +"1137713112","1137713127","US" +"1137713128","1137713135","CA" +"1137713136","1137724495","US" +"1137724496","1137724511","CA" +"1137724512","1137724543","US" +"1137724544","1137724575","CA" +"1137724576","1137724607","US" +"1137724608","1137724623","CA" +"1137724624","1137724655","US" +"1137724656","1137724687","CA" +"1137724688","1137724703","US" +"1137724704","1137724719","CA" +"1137724720","1137724847","US" +"1137724848","1137724863","CA" +"1137724864","1137724911","US" +"1137724912","1137724927","CA" +"1137724928","1137758207","US" +"1137758208","1137758463","GB" +"1137758464","1137758495","US" +"1137758496","1137758527","AU" +"1137758528","1137758671","US" +"1137758672","1137758687","CH" +"1137758688","1137785855","US" +"1137785856","1137786111","HU" +"1137786112","1137795071","US" +"1137795072","1137799167","A2" +"1137799168","1137840127","US" +"1137840128","1137840383","CA" +"1137840384","1137843711","US" +"1137843712","1137843775","NO" +"1137843776","1137868799","US" +"1137868800","1137872895","CA" +"1137872896","1137876991","US" +"1137876992","1137881087","CA" +"1137881088","1137889279","US" +"1137889280","1137893375","CA" +"1137893376","1137893791","US" +"1137893792","1137893799","ES" +"1137893800","1137893807","US" +"1137893808","1137893823","AR" +"1137893824","1137894287","US" +"1137894288","1137894295","GB" +"1137894296","1137894527","US" +"1137894528","1137894535","CO" +"1137894536","1137894607","US" +"1137894608","1137894615","DO" +"1137894616","1137895263","US" +"1137895264","1137895295","AU" +"1137895296","1137895311","US" +"1137895312","1137895319","AU" +"1137895320","1137895743","US" +"1137895744","1137895751","CO" +"1137895752","1137896351","US" +"1137896352","1137896359","IN" +"1137896360","1137917951","US" +"1137917952","1137922047","CA" +"1137922048","1137926143","US" +"1137926144","1137927519","CA" +"1137927520","1137927527","AG" +"1137927528","1137927679","CA" +"1137927680","1137927807","CR" +"1137927808","1137927935","CA" +"1137927936","1137928063","VG" +"1137928064","1137928127","BZ" +"1137928128","1137928255","CA" +"1137928256","1137928319","BZ" +"1137928320","1137929727","CA" +"1137929728","1137929983","IE" +"1137929984","1137930143","CA" +"1137930144","1137930159","MT" +"1137930160","1137934335","CA" +"1137934336","1137946585","US" +"1137946586","1137946593","NO" +"1137946594","1137950719","US" +"1137950720","1137952255","CA" +"1137952256","1137952767","US" +"1137952768","1137954303","CA" +"1137954304","1137963007","US" +"1137963008","1137967103","VI" +"1137967104","1137975295","CA" +"1137975296","1137983487","US" +"1137983488","1137984329","CA" +"1137984330","1137984330","A1" +"1137984331","1137988095","CA" +"1137988096","1137988607","A1" +"1137988608","1137991679","CA" +"1137991680","1138000063","US" +"1138000064","1138000095","CA" +"1138000096","1138001519","US" +"1138001520","1138001535","CA" +"1138001536","1138049023","US" +"1138049024","1138053631","CA" +"1138053632","1138053887","US" +"1138053888","1138061311","CA" +"1138061312","1138163711","US" +"1138163712","1138163967","CA" +"1138163968","1138163975","MA" +"1138163976","1138163991","CA" +"1138163992","1138163999","HR" +"1138164000","1138164007","PA" +"1138164008","1138164015","FR" +"1138164016","1138164127","CA" +"1138164128","1138164151","FR" +"1138164152","1138164175","CA" +"1138164176","1138164183","SK" +"1138164184","1138164191","PH" +"1138164192","1138164199","PK" +"1138164200","1138164207","CA" +"1138164208","1138164215","US" +"1138164216","1138164255","CA" +"1138164256","1138164263","LB" +"1138164264","1138164271","FR" +"1138164272","1138164279","PH" +"1138164280","1138164327","CA" +"1138164328","1138164335","PA" +"1138164336","1138164367","CA" +"1138164368","1138164375","PH" +"1138164376","1138164399","FR" +"1138164400","1138164511","CA" +"1138164512","1138164543","FR" +"1138164544","1138164583","CA" +"1138164584","1138164591","NZ" +"1138164592","1138164655","CA" +"1138164656","1138164663","MA" +"1138164664","1138164815","CA" +"1138164816","1138164823","US" +"1138164824","1138164831","CA" +"1138164832","1138164839","PH" +"1138164840","1138164863","CA" +"1138164864","1138164991","US" +"1138164992","1138165311","CA" +"1138165312","1138165319","US" +"1138165320","1138165431","CA" +"1138165432","1138165439","LB" +"1138165440","1138165487","CA" +"1138165488","1138165503","SK" +"1138165504","1138165807","CA" +"1138165808","1138165815","FR" +"1138165816","1138165823","CH" +"1138165824","1138165895","CA" +"1138165896","1138165903","LB" +"1138165904","1138165935","CA" +"1138165936","1138165943","IL" +"1138165944","1138165959","CA" +"1138165960","1138165975","FR" +"1138165976","1138165983","US" +"1138165984","1138166183","CA" +"1138166184","1138166191","FR" +"1138166192","1138166199","CA" +"1138166200","1138166207","FR" +"1138166208","1138166527","CA" +"1138166528","1138166535","TR" +"1138166536","1138166639","CA" +"1138166640","1138166647","FR" +"1138166648","1138166655","CA" +"1138166656","1138166663","FR" +"1138166664","1138166671","LB" +"1138166672","1138166703","CA" +"1138166704","1138166711","FR" +"1138166712","1138166719","AE" +"1138166720","1138166819","CA" +"1138166820","1138166823","PA" +"1138166824","1138166879","CA" +"1138166880","1138166887","RU" +"1138166888","1138166919","CA" +"1138166920","1138166927","PH" +"1138166928","1138166967","CA" +"1138166968","1138166983","FR" +"1138166984","1138166991","SE" +"1138166992","1138166999","PH" +"1138167000","1138167007","CA" +"1138167008","1138167015","FR" +"1138167016","1138167031","CA" +"1138167032","1138167039","FR" +"1138167040","1138167199","MA" +"1138167200","1138167207","UA" +"1138167208","1138167215","AE" +"1138167216","1138167219","PH" +"1138167220","1138167239","CA" +"1138167240","1138167247","FR" +"1138167248","1138167543","CA" +"1138167544","1138167551","PA" +"1138167552","1138167807","CA" +"1138167808","1138175999","US" +"1138176000","1138180095","CA" +"1138180096","1138184191","US" +"1138184192","1138184447","SG" +"1138184448","1138188287","US" +"1138188288","1138192383","PR" +"1138192384","1138196479","US" +"1138196480","1138204671","CA" +"1138204672","1138212863","US" +"1138212864","1138216959","CA" +"1138216960","1138271087","US" +"1138271088","1138271103","TN" +"1138271104","1138337167","US" +"1138337168","1138337183","GB" +"1138337184","1138337199","US" +"1138337200","1138337207","SG" +"1138337208","1138419711","US" +"1138419712","1138419967","DE" +"1138419968","1138422271","US" +"1138422272","1138422527","DE" +"1138422528","1138424319","US" +"1138424320","1138424575","CA" +"1138424576","1138480127","US" +"1138480128","1138480383","AU" +"1138480384","1138480639","US" +"1138480640","1138481407","AU" +"1138481408","1138481663","US" +"1138481664","1138482687","AU" +"1138482688","1138499583","US" +"1138499584","1138503679","CA" +"1138503680","1138508031","US" +"1138508032","1138508095","GB" +"1138508096","1138508447","US" +"1138508448","1138508479","IT" +"1138508480","1138508511","US" +"1138508512","1138508543","CR" +"1138508544","1138508575","US" +"1138508576","1138508591","IT" +"1138508592","1138508735","US" +"1138508736","1138508767","CR" +"1138508768","1138509823","US" +"1138509824","1138510847","IN" +"1138510848","1138510879","CA" +"1138510880","1138510911","US" +"1138510912","1138510975","IN" +"1138510976","1138511103","MY" +"1138511104","1138511167","CH" +"1138511168","1138512383","US" +"1138512384","1138512415","ID" +"1138512416","1138512639","US" +"1138512640","1138512671","ID" +"1138512672","1138512895","US" +"1138512896","1138512927","ID" +"1138512928","1138544895","US" +"1138544896","1138545151","GB" +"1138545152","1138593791","US" +"1138593792","1138597887","CA" +"1138597888","1138600447","US" +"1138600448","1138600703","BE" +"1138600704","1138615299","US" +"1138615300","1138615323","IT" +"1138615324","1138622207","US" +"1138622208","1138622463","A1" +"1138622464","1138655245","US" +"1138655246","1138655316","CA" +"1138655317","1138655374","US" +"1138655375","1138655382","CA" +"1138655383","1138655446","US" +"1138655447","1138655454","CA" +"1138655455","1138655458","US" +"1138655459","1138655486","CA" +"1138655487","1138655503","US" +"1138655504","1138655521","MX" +"1138655522","1138655581","US" +"1138655582","1138655589","MX" +"1138655590","1138655609","US" +"1138655610","1138655617","MX" +"1138655618","1138655629","US" +"1138655630","1138655637","EG" +"1138655638","1138655695","US" +"1138655696","1138655703","MX" +"1138655704","1138655715","US" +"1138655716","1138655723","GB" +"1138655724","1138655731","US" +"1138655732","1138655739","VE" +"1138655740","1138655817","US" +"1138655818","1138655825","MX" +"1138655826","1138655899","US" +"1138655900","1138655911","MX" +"1138655912","1138656025","US" +"1138656026","1138656033","MX" +"1138656034","1138656069","US" +"1138656070","1138656077","EG" +"1138656078","1138656093","MX" +"1138656094","1138656141","US" +"1138656142","1138656173","GB" +"1138656174","1138656190","US" +"1138656191","1138656198","CH" +"1138656199","1138656206","GB" +"1138656207","1138656222","US" +"1138656223","1138656230","EG" +"1138656231","1138656388","US" +"1138656389","1138656396","ID" +"1138656397","1138656597","US" +"1138656598","1138656613","EG" +"1138656614","1138656661","US" +"1138656662","1138656669","MA" +"1138656670","1138656745","US" +"1138656746","1138656753","AE" +"1138656754","1138656909","US" +"1138656910","1138656917","IN" +"1138656918","1138656997","US" +"1138656998","1138657005","EG" +"1138657006","1138657101","US" +"1138657102","1138657109","IN" +"1138657110","1138657110","US" +"1138657111","1138657118","SE" +"1138657119","1138657123","US" +"1138657124","1138657131","EG" +"1138657132","1138657173","US" +"1138657174","1138657181","EG" +"1138657182","1138657206","US" +"1138657207","1138657214","EG" +"1138657215","1138657222","IN" +"1138657223","1138657235","US" +"1138657236","1138657244","MA" +"1138657245","1138657324","US" +"1138657325","1138657332","LK" +"1138657333","1138657401","US" +"1138657402","1138657409","IN" +"1138657410","1138657504","US" +"1138657505","1138657520","EG" +"1138657521","1138657732","US" +"1138657733","1138657740","VE" +"1138657741","1138657748","US" +"1138657749","1138657780","GB" +"1138657781","1138658057","US" +"1138658058","1138658123","GB" +"1138658124","1138658131","US" +"1138658132","1138658163","EG" +"1138658164","1138658175","US" +"1138658176","1138658302","GB" +"1138658303","1138658431","US" +"1138658432","1138658496","PK" +"1138658497","1138659081","US" +"1138659082","1138659207","ES" +"1138659208","1138659307","US" +"1138659308","1138659315","EG" +"1138659316","1138659369","US" +"1138659370","1138659401","GB" +"1138659402","1138659425","US" +"1138659426","1138659433","VE" +"1138659434","1138659465","US" +"1138659466","1138659497","GB" +"1138659498","1138659593","US" +"1138659594","1138659609","LK" +"1138659610","1138659642","GB" +"1138659643","1138659650","ID" +"1138659651","1138659673","US" +"1138659674","1138659681","MA" +"1138659682","1138659689","ID" +"1138659690","1138659697","US" +"1138659698","1138659705","ID" +"1138659706","1138659723","US" +"1138659724","1138659731","ID" +"1138659732","1138659781","US" +"1138659782","1138659789","NZ" +"1138659790","1138659797","ID" +"1138659798","1138659805","US" +"1138659806","1138659813","ID" +"1138659814","1138659821","LK" +"1138659822","1138659823","US" +"1138659824","1138659831","ID" +"1138659832","1138659849","US" +"1138659850","1138659857","MA" +"1138659858","1138659889","GB" +"1138659890","1138659922","US" +"1138659923","1138659930","LK" +"1138659931","1138659983","US" +"1138659984","1138659999","EG" +"1138660000","1138660035","US" +"1138660036","1138660043","IN" +"1138660044","1138660050","US" +"1138660051","1138660058","PH" +"1138660059","1138660105","US" +"1138660106","1138660137","GB" +"1138660138","1138660169","US" +"1138660170","1138660177","MA" +"1138660178","1138660185","ID" +"1138660186","1138660193","US" +"1138660194","1138660201","EG" +"1138660202","1138660217","US" +"1138660218","1138660225","IN" +"1138660226","1138660233","US" +"1138660234","1138660241","EG" +"1138660242","1138660270","US" +"1138660271","1138660310","GB" +"1138660311","1138660311","US" +"1138660312","1138660333","GB" +"1138660334","1138660499","US" +"1138660500","1138660507","AE" +"1138660508","1138660625","US" +"1138660626","1138660633","EG" +"1138660634","1138660645","US" +"1138660646","1138660653","VE" +"1138660654","1138660665","US" +"1138660666","1138660673","IN" +"1138660674","1138660694","US" +"1138660695","1138660726","GB" +"1138660727","1138660734","EG" +"1138660735","1138660805","US" +"1138660806","1138660821","EG" +"1138660822","1138660873","US" +"1138660874","1138660881","EG" +"1138660882","1138660966","US" +"1138660967","1138660974","VE" +"1138660975","1138660982","US" +"1138660983","1138660990","EG" +"1138660991","1138661002","US" +"1138661003","1138661010","LK" +"1138661011","1138661055","US" +"1138661056","1138661063","EG" +"1138661064","1138661137","US" +"1138661138","1138661177","EG" +"1138661178","1138661441","US" +"1138661442","1138661449","EG" +"1138661450","1138661457","US" +"1138661458","1138661465","EG" +"1138661466","1138661521","US" +"1138661522","1138661529","EG" +"1138661530","1138661607","US" +"1138661608","1138661615","LK" +"1138661616","1138661669","US" +"1138661670","1138661677","IN" +"1138661678","1138661729","US" +"1138661730","1138661737","ID" +"1138661738","1138661769","US" +"1138661770","1138661777","MA" +"1138661778","1138661821","US" +"1138661822","1138661829","MA" +"1138661830","1138661913","US" +"1138661914","1138661954","EG" +"1138661955","1138662273","US" +"1138662274","1138662309","EG" +"1138662310","1138662333","US" +"1138662334","1138662353","GB" +"1138662354","1138662369","US" +"1138662370","1138662393","GB" +"1138662394","1138662473","US" +"1138662474","1138662505","GB" +"1138662506","1138662537","US" +"1138662538","1138662545","EG" +"1138662546","1138662575","US" +"1138662576","1138662607","MX" +"1138662608","1138662623","US" +"1138662624","1138662639","GB" +"1138662640","1138662793","US" +"1138662794","1138662801","ID" +"1138662802","1138662841","US" +"1138662842","1138662849","GB" +"1138662850","1138663021","US" +"1138663022","1138663166","GB" +"1138663167","1138712575","US" +"1138712576","1138713583","CA" +"1138713584","1138713599","MY" +"1138713600","1138714071","CA" +"1138714072","1138714079","US" +"1138714080","1138714087","ES" +"1138714088","1138716671","CA" +"1138716672","1138720767","US" +"1138720768","1138728959","CA" +"1138728960","1138774015","US" +"1138774016","1138778111","CA" +"1138778112","1138780159","US" +"1138780160","1138780191","CA" +"1138780192","1138780271","US" +"1138780272","1138780287","CA" +"1138780288","1138786303","US" +"1138786304","1138819071","PR" +"1138819072","1138851839","CA" +"1138851840","1138851847","US" +"1138851848","1138851855","IN" +"1138851856","1138865578","US" +"1138865579","1138865586","IN" +"1138865587","1138874252","US" +"1138874253","1138874264","UY" +"1138874265","1138882331","US" +"1138882332","1138882339","GB" +"1138882340","1138882445","US" +"1138882446","1138882453","GB" +"1138882454","1138917375","US" +"1138917376","1138937855","CA" +"1138937856","1138941951","US" +"1138941952","1138950143","CA" +"1138950144","1139146751","US" +"1139146752","1139154943","GT" +"1139154944","1139167231","JM" +"1139167232","1139167743","US" +"1139167744","1139168895","PR" +"1139168896","1139169279","US" +"1139169280","1139170047","PR" +"1139170048","1139171327","US" +"1139171328","1139175423","GT" +"1139175424","1139179519","US" +"1139179520","1139188735","CA" +"1139188736","1139188991","GB" +"1139188992","1139193599","CA" +"1139193600","1139194111","US" +"1139194112","1139194367","CA" +"1139194368","1139194623","US" +"1139194624","1139194879","CA" +"1139194880","1139195135","US" +"1139195136","1139195391","GB" +"1139195392","1139195903","CA" +"1139195904","1139265535","US" +"1139265536","1139269631","CA" +"1139269632","1139274495","US" +"1139274496","1139274751","A1" +"1139274752","1145056703","US" +"1145056704","1145056719","CO" +"1145056720","1145188351","US" +"1145188352","1145192447","CA" +"1145192448","1145242111","US" +"1145242112","1145242367","NO" +"1145242368","1145243135","US" +"1145243136","1145243391","EU" +"1145243392","1145243647","US" +"1145243648","1145244159","EU" +"1145244160","1145244415","NO" +"1145244416","1145249791","US" +"1145249792","1145257983","CA" +"1145257984","1145259007","US" +"1145259008","1145259071","IN" +"1145259072","1145259247","US" +"1145259248","1145259251","AE" +"1145259252","1145259263","US" +"1145259264","1145259327","IN" +"1145259328","1145259423","US" +"1145259424","1145259455","AE" +"1145259456","1145260031","US" +"1145260032","1145260095","IN" +"1145260096","1145260623","US" +"1145260624","1145260631","IN" +"1145260632","1145260751","US" +"1145260752","1145260767","AE" +"1145260768","1145261055","US" +"1145261056","1145261119","IN" +"1145261120","1145261311","US" +"1145261312","1145261375","IN" +"1145261376","1145261407","US" +"1145261408","1145261439","AE" +"1145261440","1145261647","US" +"1145261648","1145261663","AE" +"1145261664","1145307135","US" +"1145307136","1145311231","CA" +"1145311232","1145333031","US" +"1145333032","1145333039","IT" +"1145333040","1145333191","US" +"1145333192","1145333199","CN" +"1145333200","1145333215","US" +"1145333216","1145333223","CN" +"1145333224","1145333239","US" +"1145333240","1145333247","CN" +"1145333248","1145333327","US" +"1145333328","1145333343","CN" +"1145333344","1145333351","US" +"1145333352","1145333359","CN" +"1145333360","1145333367","US" +"1145333368","1145333375","PA" +"1145333376","1145333503","BD" +"1145333504","1145333863","US" +"1145333864","1145333871","EG" +"1145333872","1145333879","US" +"1145333880","1145333895","CN" +"1145333896","1145334151","US" +"1145334152","1145334167","CN" +"1145334168","1145334175","US" +"1145334176","1145334223","CN" +"1145334224","1145334231","US" +"1145334232","1145334239","CN" +"1145334240","1145335103","US" +"1145335104","1145335135","NL" +"1145335136","1145335167","US" +"1145335168","1145335183","CN" +"1145335184","1145335215","US" +"1145335216","1145335223","CN" +"1145335224","1145376767","US" +"1145376768","1145380863","CA" +"1145380864","1145405439","US" +"1145405440","1145413631","CA" +"1145413632","1145421823","US" +"1145421824","1145430015","CA" +"1145430016","1145475071","US" +"1145475072","1145476887","CA" +"1145476888","1145476895","US" +"1145476896","1145479167","CA" +"1145479168","1145483583","US" +"1145483584","1145483591","VG" +"1145483592","1145484031","US" +"1145484032","1145484063","VG" +"1145484064","1145503743","US" +"1145503744","1145520127","CA" +"1145520128","1145552895","US" +"1145552896","1145556991","CA" +"1145556992","1145567839","US" +"1145567840","1145567871","CN" +"1145567872","1150043135","US" +"1150043136","1150044159","VA" +"1150044160","1150046207","US" +"1150046208","1150050303","JP" +"1150050304","1150287871","US" +"1150287872","1150812159","CA" +"1150812160","1151889407","US" +"1151889408","1151889423","CA" +"1151889424","1151889431","US" +"1151889432","1151889447","CA" +"1151889448","1151889455","FR" +"1151889456","1151889471","CA" +"1151889472","1151889487","RU" +"1151889488","1151889495","CA" +"1151889496","1151889535","MA" +"1151889536","1151889599","CN" +"1151889600","1151889615","CA" +"1151889616","1151889631","MA" +"1151889632","1151889791","CA" +"1151889792","1151889823","MA" +"1151889824","1151889839","CA" +"1151889840","1151889847","PH" +"1151889848","1151890007","CA" +"1151890008","1151890015","GB" +"1151890016","1151890079","CA" +"1151890080","1151890087","GB" +"1151890088","1151890095","CA" +"1151890096","1151890127","GB" +"1151890128","1151892735","CA" +"1151892736","1151892991","MA" +"1151892992","1151895551","CA" +"1151895552","1151895807","US" +"1151895808","1151895919","CA" +"1151895920","1151895935","US" +"1151895936","1151896319","CA" +"1151896320","1151896575","US" +"1151896576","1151896831","CA" +"1151896832","1151897087","US" +"1151897088","1151897343","CA" +"1151897344","1151943680","US" +"1151943681","1151943808","GB" +"1151943809","1151943871","NL" +"1151943872","1151943935","CA" +"1151943936","1151943999","DE" +"1151944000","1151944063","HK" +"1151944064","1151944079","CH" +"1151944080","1151944095","NO" +"1151944096","1151944111","KR" +"1151944112","1151944127","US" +"1151944128","1151944159","AU" +"1151944160","1151944175","FR" +"1151944176","1151945727","US" +"1151945728","1151945759","RU" +"1151945760","1151945791","IR" +"1151945792","1151945823","IT" +"1151945824","1151945855","US" +"1151945856","1151945887","SE" +"1151945888","1151945919","US" +"1151945920","1151945935","JP" +"1151945936","1151946239","US" +"1151946240","1151946751","GB" +"1151946752","1152073727","US" +"1152073728","1152077823","CA" +"1152077824","1152082175","US" +"1152082176","1152082303","IN" +"1152082304","1152083455","US" +"1152083456","1152083967","CN" +"1152083968","1152084735","US" +"1152084736","1152084991","IN" +"1152084992","1152581631","US" +"1152581632","1152614399","CA" +"1152614400","1152778239","US" +"1152778240","1152843775","CA" +"1152843776","1154488319","US" +"1154488320","1154488831","A2" +"1154488832","1156071423","US" +"1156071424","1156079615","CA" +"1156079616","1156129487","US" +"1156129488","1156129495","JP" +"1156129496","1156129983","US" +"1156129984","1156129999","CY" +"1156130000","1156263935","US" +"1156263936","1156265983","CA" +"1156265984","1156296703","US" +"1156296704","1156300799","CA" +"1156300800","1157670431","US" +"1157670432","1157670463","CA" +"1157670464","1157713663","US" +"1157713664","1157713791","CA" +"1157713792","1157753087","US" +"1157753088","1157753343","GB" +"1157753344","1157755247","US" +"1157755248","1157755263","GR" +"1157755264","1157758207","US" +"1157758208","1157758463","RU" +"1157758464","1157910527","US" +"1157910528","1157911807","CA" +"1157911808","1157912063","US" +"1157912064","1157912253","CA" +"1157912254","1157912318","US" +"1157912319","1157912831","CA" +"1157912832","1157913087","US" +"1157913088","1157913343","CA" +"1157913344","1157913599","US" +"1157913600","1157914623","CA" +"1157914624","1157931007","US" +"1157931008","1157935103","BS" +"1157935104","1157943295","US" +"1157943296","1157947391","CA" +"1157947392","1157950919","US" +"1157950920","1157950975","HK" +"1157950976","1158027263","US" +"1158027264","1158027519","CA" +"1158027520","1158028287","US" +"1158028288","1158028543","CA" +"1158028544","1158120959","US" +"1158120960","1158121215","GB" +"1158121216","1158148095","US" +"1158148096","1158152191","CA" +"1158152192","1158234111","US" +"1158234112","1158250495","CA" +"1158250496","1158294719","US" +"1158294720","1158294751","GB" +"1158294752","1158295807","US" +"1158295808","1158296063","GB" +"1158296064","1158316031","US" +"1158316032","1158318847","CA" +"1158318848","1158319103","A1" +"1158319104","1158320031","CA" +"1158320032","1158320047","SY" +"1158320048","1158322671","CA" +"1158322672","1158322687","SY" +"1158322688","1158323535","CA" +"1158323536","1158323551","SY" +"1158323552","1158323695","CA" +"1158323696","1158323711","SY" +"1158323712","1158324223","CA" +"1158324224","1158340607","US" +"1158340608","1158343199","CA" +"1158343200","1158343231","US" +"1158343232","1158344703","CA" +"1158344704","1158348799","US" +"1158348800","1158381567","CA" +"1158381568","1158481417","US" +"1158481418","1158481426","CA" +"1158481427","1158481427","US" +"1158481428","1158481436","CA" +"1158481437","1158481597","US" +"1158481598","1158481606","CA" +"1158481607","1158481737","US" +"1158481738","1158481745","CA" +"1158481746","1158488529","US" +"1158488530","1158488542","IL" +"1158488543","1158488833","US" +"1158488834","1158488846","IL" +"1158488847","1158493441","US" +"1158493442","1158493566","CA" +"1158493567","1158496497","US" +"1158496498","1158496506","TC" +"1158496507","1158496530","US" +"1158496531","1158496539","WS" +"1158496540","1158496779","US" +"1158496780","1158496788","FJ" +"1158496789","1158496797","BE" +"1158496798","1158496806","US" +"1158496807","1158496815","PE" +"1158496816","1158497616","US" +"1158497617","1158497625","CH" +"1158497626","1158497652","US" +"1158497653","1158497661","CA" +"1158497662","1158497670","GE" +"1158497671","1158497770","US" +"1158497771","1158497779","CA" +"1158497780","1158497825","US" +"1158497826","1158497834","GE" +"1158497835","1158497865","WS" +"1158497866","1158498032","US" +"1158498033","1158498041","HK" +"1158498042","1158498282","US" +"1158498283","1158498291","MX" +"1158498292","1158498457","US" +"1158498458","1158498466","GR" +"1158498467","1158498778","US" +"1158498779","1158498787","IT" +"1158498788","1158499171","US" +"1158499172","1158499179","VI" +"1158499180","1158499315","US" +"1158499316","1158499326","CA" +"1158499327","1158499382","US" +"1158499383","1158499391","AS" +"1158499392","1158499400","NL" +"1158499401","1158499409","FR" +"1158499410","1158499584","US" +"1158499585","1158499838","CA" +"1158499839","1158501120","US" +"1158501121","1158501374","PR" +"1158501375","1158504775","US" +"1158504776","1158504784","CA" +"1158504785","1158504836","US" +"1158504837","1158504845","JM" +"1158504846","1158504863","US" +"1158504864","1158504872","GR" +"1158504873","1158504941","US" +"1158504942","1158504950","CA" +"1158504951","1158504951","US" +"1158504952","1158504959","KE" +"1158504960","1158505653","US" +"1158505654","1158505727","AU" +"1158505728","1158506793","US" +"1158506794","1158506809","IN" +"1158506810","1158512741","US" +"1158512742","1158512750","PK" +"1158512751","1158513050","US" +"1158513051","1158513059","AS" +"1158513060","1158513070","US" +"1158513071","1158513079","AS" +"1158513080","1158513362","US" +"1158513363","1158513371","TC" +"1158513372","1158513398","US" +"1158513399","1158513407","CA" +"1158513408","1158513600","US" +"1158513601","1158513609","CA" +"1158513610","1158513618","US" +"1158513619","1158513627","CO" +"1158513628","1158513682","US" +"1158513683","1158513691","CA" +"1158513692","1158513756","US" +"1158513757","1158513765","TC" +"1158513766","1158513850","US" +"1158513851","1158513859","SZ" +"1158513860","1158513877","US" +"1158513878","1158513886","BZ" +"1158513887","1158514057","US" +"1158514058","1158514066","SN" +"1158514067","1158514075","US" +"1158514076","1158514084","MX" +"1158514085","1158514129","US" +"1158514130","1158514138","TW" +"1158514139","1158514331","US" +"1158514332","1158514340","CA" +"1158514341","1158514349","US" +"1158514350","1158514358","MX" +"1158514359","1158514367","US" +"1158514368","1158514376","CA" +"1158514377","1158514432","US" +"1158514433","1158514560","AS" +"1158514561","1158514664","US" +"1158514665","1158514673","FR" +"1158514674","1158514787","US" +"1158514788","1158514796","AS" +"1158514797","1158515273","US" +"1158515274","1158515282","BZ" +"1158515283","1158516844","US" +"1158516845","1158516853","CA" +"1158516854","1158516859","US" +"1158516860","1158516868","AU" +"1158516869","1158516938","US" +"1158516939","1158516947","CA" +"1158516948","1158517284","US" +"1158517285","1158517293","PK" +"1158517294","1158517426","US" +"1158517427","1158517435","BG" +"1158517436","1158517466","US" +"1158517467","1158517475","BE" +"1158517476","1158518020","US" +"1158518021","1158518029","CA" +"1158518030","1158518107","US" +"1158518108","1158518116","TH" +"1158518117","1158518246","US" +"1158518247","1158518255","CA" +"1158518256","1158518347","US" +"1158518348","1158518356","NO" +"1158518357","1158518727","US" +"1158518728","1158518736","SZ" +"1158518737","1158518784","US" +"1158518785","1158519038","NO" +"1158519039","1158519049","US" +"1158519050","1158519058","CH" +"1158519059","1158519067","NL" +"1158519068","1158519473","US" +"1158519474","1158519483","CA" +"1158519484","1158519616","US" +"1158519617","1158519625","WS" +"1158519626","1158519758","US" +"1158519759","1158519776","CA" +"1158519777","1158519794","US" +"1158519795","1158519803","NO" +"1158519804","1158519826","US" +"1158519827","1158519953","WS" +"1158519954","1158520541","US" +"1158520542","1158520550","IS" +"1158520551","1158525184","US" +"1158525185","1158525320","BE" +"1158525321","1158525741","US" +"1158525742","1158525750","BZ" +"1158525751","1158525776","US" +"1158525777","1158525785","FR" +"1158525786","1158525821","US" +"1158525822","1158525830","IT" +"1158525831","1158526297","US" +"1158526298","1158526306","IT" +"1158526307","1158526335","US" +"1158526336","1158526344","FR" +"1158526345","1158526346","US" +"1158526347","1158526355","PE" +"1158526356","1158526357","US" +"1158526358","1158526366","CA" +"1158526367","1158526368","US" +"1158526369","1158526377","CH" +"1158526378","1158526930","US" +"1158526931","1158526963","AS" +"1158526964","1158526987","US" +"1158526988","1158526996","MY" +"1158526997","1158527068","US" +"1158527069","1158527077","WS" +"1158527078","1158527086","US" +"1158527087","1158527095","CA" +"1158527096","1158527097","US" +"1158527098","1158527106","KE" +"1158527107","1158527133","US" +"1158527134","1158527142","FR" +"1158527143","1158527216","US" +"1158527217","1158527225","CA" +"1158527226","1158527288","US" +"1158527289","1158527297","CA" +"1158527298","1158527306","US" +"1158527307","1158527315","BA" +"1158527316","1158527454","US" +"1158527455","1158527463","IR" +"1158527464","1158527839","US" +"1158527840","1158527848","AS" +"1158527849","1158528256","US" +"1158528257","1158528511","CA" +"1158528512","1158528512","US" +"1158528513","1158528521","AS" +"1158528522","1158528575","US" +"1158528576","1158528584","MX" +"1158528585","1158528629","US" +"1158528630","1158528638","CA" +"1158528639","1158528647","VN" +"1158528648","1158528755","US" +"1158528756","1158528764","SN" +"1158528765","1158528777","US" +"1158528778","1158528786","AS" +"1158528787","1158538864","US" +"1158538865","1158538872","WS" +"1158538873","1158714111","US" +"1158714112","1158714367","A1" +"1158714368","1158715007","US" +"1158715008","1158715039","IE" +"1158715040","1158716415","US" +"1158716416","1158716423","IN" +"1158716424","1158716543","US" +"1158716544","1158716551","IE" +"1158716552","1158716671","US" +"1158716672","1158716703","IE" +"1158716704","1158717967","US" +"1158717968","1158717983","CA" +"1158717984","1158717999","US" +"1158718000","1158718015","CY" +"1158718016","1158726731","US" +"1158726732","1158726739","CA" +"1158726740","1158732876","US" +"1158732877","1158732884","GB" +"1158732885","1158736241","US" +"1158736242","1158736249","IN" +"1158736250","1158774783","US" +"1158774784","1158776947","CA" +"1158776948","1158776951","US" +"1158776952","1158791167","CA" +"1158791168","1158794239","BM" +"1158794240","1158794495","US" +"1158794496","1158799359","BM" +"1158799360","1158807551","CA" +"1158807552","1158940823","US" +"1158940824","1158940831","ES" +"1158940832","1158940911","US" +"1158940912","1158940919","CA" +"1158940920","1158941247","US" +"1158941248","1158941255","CY" +"1158941256","1158941351","US" +"1158941352","1158941359","CR" +"1158941360","1158941367","CA" +"1158941368","1158941399","US" +"1158941400","1158941407","CA" +"1158941408","1158941775","US" +"1158941776","1158941791","JM" +"1158941792","1158941799","IE" +"1158941800","1158942271","US" +"1158942272","1158942279","IE" +"1158942280","1158942311","US" +"1158942312","1158942319","CA" +"1158942320","1158943423","US" +"1158943424","1158943431","PK" +"1158943432","1158943535","US" +"1158943536","1158943543","CA" +"1158943544","1158943599","US" +"1158943600","1158943615","GB" +"1158943616","1158943707","US" +"1158943708","1158943709","CA" +"1158943710","1158943863","US" +"1158943864","1158943871","CR" +"1158943872","1158943895","US" +"1158943896","1158943903","GB" +"1158943904","1158943975","US" +"1158943976","1158943983","CA" +"1158943984","1158944279","US" +"1158944280","1158944287","AE" +"1158944288","1158944863","US" +"1158944864","1158944871","CA" +"1158944872","1158944895","US" +"1158944896","1158944903","ZA" +"1158944904","1158944951","US" +"1158944952","1158944959","IN" +"1158944960","1158945095","US" +"1158945096","1158945103","TH" +"1158945104","1158945111","US" +"1158945112","1158945119","CA" +"1158945120","1158945127","US" +"1158945128","1158945135","MX" +"1158945136","1158945271","US" +"1158945272","1158945287","CA" +"1158945288","1158945319","US" +"1158945320","1158945335","CA" +"1158945336","1158945535","US" +"1158945536","1158945543","CA" +"1158945544","1158945791","US" +"1158945792","1158945799","IE" +"1158945800","1158945807","US" +"1158945808","1158945815","IE" +"1158945816","1158945823","US" +"1158945824","1158945831","JP" +"1158945832","1158945935","US" +"1158945936","1158945943","CA" +"1158945944","1158946047","US" +"1158946048","1158946055","CA" +"1158946056","1158946151","US" +"1158946152","1158946159","IE" +"1158946160","1158946207","US" +"1158946208","1158946215","CA" +"1158946216","1158946487","US" +"1158946488","1158946495","GB" +"1158946496","1158946551","US" +"1158946552","1158946559","CH" +"1158946560","1158946575","US" +"1158946576","1158946583","IN" +"1158946584","1158946711","US" +"1158946712","1158946719","HK" +"1158946720","1158946771","US" +"1158946772","1158946772","MX" +"1158946773","1158947391","US" +"1158947392","1158947399","CA" +"1158947400","1158947591","US" +"1158947592","1158947599","JP" +"1158947600","1158947647","US" +"1158947648","1158947655","CA" +"1158947656","1158947663","US" +"1158947664","1158947695","IE" +"1158947696","1158947711","US" +"1158947712","1158947719","CA" +"1158947720","1158947735","US" +"1158947736","1158947743","IN" +"1158947744","1158947791","US" +"1158947792","1158947799","IN" +"1158947800","1158947831","US" +"1158947832","1158947839","TR" +"1158947840","1158947847","US" +"1158947848","1158947849","CA" +"1158947850","1158948383","US" +"1158948384","1158948391","IT" +"1158948392","1158948895","US" +"1158948896","1158948903","CA" +"1158948904","1158948967","US" +"1158948968","1158948975","CA" +"1158948976","1158949007","US" +"1158949008","1158949015","IL" +"1158949016","1158949287","US" +"1158949288","1158949295","CA" +"1158949296","1158950105","US" +"1158950106","1158950107","CA" +"1158950108","1158950335","US" +"1158950336","1158950351","CA" +"1158950352","1158950359","IN" +"1158950360","1158950367","CA" +"1158950368","1158950767","US" +"1158950768","1158950775","TH" +"1158950776","1158951231","US" +"1158951232","1158951263","TH" +"1158951264","1158951423","US" +"1158951424","1158951439","CA" +"1158951440","1158951447","NL" +"1158951448","1158951551","US" +"1158951552","1158951559","NL" +"1158951560","1158951575","US" +"1158951576","1158951583","CA" +"1158951584","1158951627","US" +"1158951628","1158951631","CA" +"1158951632","1158951743","US" +"1158951744","1158951751","IN" +"1158951752","1158951839","US" +"1158951840","1158951855","CA" +"1158951856","1158952711","US" +"1158952712","1158952719","IN" +"1158952720","1158952743","US" +"1158952744","1158952751","FI" +"1158952752","1158952815","US" +"1158952816","1158952823","CA" +"1158952824","1158952895","US" +"1158952896","1158952903","IL" +"1158952904","1158953503","US" +"1158953504","1158953511","NL" +"1158953512","1158954815","US" +"1158954816","1158954823","GB" +"1158954824","1158954831","CA" +"1158954832","1158955015","US" +"1158955016","1158955023","CA" +"1158955024","1158955039","US" +"1158955040","1158955047","GB" +"1158955048","1158956063","US" +"1158956064","1158956079","NL" +"1158956080","1158956095","US" +"1158956096","1158956103","CA" +"1158956104","1158956295","US" +"1158956296","1158956303","CA" +"1158956304","1158957455","US" +"1158957456","1158957471","NL" +"1158957472","1158957647","US" +"1158957648","1158957655","AU" +"1158957656","1158957663","PE" +"1158957664","1158957801","US" +"1158957802","1158957803","NL" +"1158957804","1158958295","US" +"1158958296","1158958303","AG" +"1158958304","1158958311","ES" +"1158958312","1158958367","US" +"1158958368","1158958375","CA" +"1158958376","1158958591","US" +"1158958592","1158958599","ZA" +"1158958600","1158958607","IL" +"1158958608","1158958671","US" +"1158958672","1158958679","SA" +"1158958680","1158958719","US" +"1158958720","1158958751","CA" +"1158958752","1158959031","US" +"1158959032","1158959039","CA" +"1158959040","1158959079","US" +"1158959080","1158959081","BG" +"1158959082","1158959135","US" +"1158959136","1158959151","BD" +"1158959152","1158959679","US" +"1158959680","1158959687","CR" +"1158959688","1158960455","US" +"1158960456","1158960463","IN" +"1158960464","1158960535","US" +"1158960536","1158960543","NZ" +"1158960544","1158961063","US" +"1158961064","1158961071","TW" +"1158961072","1158961151","US" +"1158961152","1158961159","GB" +"1158961160","1158961175","US" +"1158961176","1158961183","CA" +"1158961184","1158961255","US" +"1158961256","1158961263","ES" +"1158961264","1158961775","US" +"1158961776","1158961783","CA" +"1158961784","1158962023","US" +"1158962024","1158962027","IL" +"1158962028","1158962175","US" +"1158962176","1158962183","GB" +"1158962184","1158962287","US" +"1158962288","1158962295","ZA" +"1158962296","1158962591","US" +"1158962592","1158962607","GB" +"1158962608","1158962615","US" +"1158962616","1158962623","GB" +"1158962624","1158962671","US" +"1158962672","1158962675","IN" +"1158962676","1158963271","US" +"1158963272","1158963279","IE" +"1158963280","1158963453","US" +"1158963454","1158963455","CA" +"1158963456","1158963647","US" +"1158963648","1158963663","IN" +"1158963664","1158963727","US" +"1158963728","1158963735","GB" +"1158963736","1158964103","US" +"1158964104","1158964111","IN" +"1158964112","1158964189","US" +"1158964190","1158964191","CA" +"1158964192","1158964287","US" +"1158964288","1158964319","CA" +"1158964320","1158964631","US" +"1158964632","1158964639","CA" +"1158964640","1158964647","MX" +"1158964648","1158964701","US" +"1158964702","1158964703","CA" +"1158964704","1158964799","US" +"1158964800","1158964807","IE" +"1158964808","1158964831","US" +"1158964832","1158964839","GB" +"1158964840","1158964943","US" +"1158964944","1158964951","MX" +"1158964952","1158965087","US" +"1158965088","1158965111","CA" +"1158965112","1158965119","US" +"1158965120","1158965135","AR" +"1158965136","1158965159","US" +"1158965160","1158965167","IL" +"1158965168","1158965199","US" +"1158965200","1158965215","CA" +"1158965216","1158965247","US" +"1158965248","1158965255","IN" +"1158965256","1158965559","US" +"1158965560","1158965567","IN" +"1158965568","1158965743","US" +"1158965744","1158965751","IN" +"1158965752","1158966127","US" +"1158966128","1158966143","FR" +"1158966144","1158966335","US" +"1158966336","1158966343","PL" +"1158966344","1158966359","CA" +"1158966360","1158966567","US" +"1158966568","1158966591","CA" +"1158966592","1158966799","US" +"1158966800","1158966807","CA" +"1158966808","1158966887","US" +"1158966888","1158966895","EG" +"1158966896","1158966911","US" +"1158966912","1158966919","MX" +"1158966920","1158966959","US" +"1158966960","1158966967","MX" +"1158966968","1158966991","US" +"1158966992","1158966999","CA" +"1158967000","1158967263","US" +"1158967264","1158967279","TH" +"1158967280","1158967327","US" +"1158967328","1158967335","JP" +"1158967336","1158967343","GB" +"1158967344","1158967527","US" +"1158967528","1158967535","CA" +"1158967536","1158967543","IE" +"1158967544","1158967559","US" +"1158967560","1158967567","CA" +"1158967568","1158967615","US" +"1158967616","1158967623","GT" +"1158967624","1158967631","US" +"1158967632","1158967679","CA" +"1158967680","1158968015","US" +"1158968016","1158968017","GB" +"1158968018","1158968071","US" +"1158968072","1158968079","MT" +"1158968080","1158968103","US" +"1158968104","1158968111","HU" +"1158968112","1158968207","US" +"1158968208","1158968239","CA" +"1158968240","1158968823","US" +"1158968824","1158968827","GB" +"1158968828","1158969447","US" +"1158969448","1158969455","CA" +"1158969456","1158969663","US" +"1158969664","1158969679","MX" +"1158969680","1158969703","US" +"1158969704","1158969711","CA" +"1158969712","1158970127","US" +"1158970128","1158970135","CA" +"1158970136","1158970287","US" +"1158970288","1158970295","CA" +"1158970296","1158970303","MY" +"1158970304","1158970943","US" +"1158970944","1158970975","CA" +"1158970976","1158995967","US" +"1158995968","1158997919","CA" +"1158997920","1158997935","GB" +"1158997936","1158999271","CA" +"1158999272","1158999279","SK" +"1158999280","1158999663","CA" +"1158999664","1158999671","US" +"1158999672","1158999863","CA" +"1158999864","1158999871","US" +"1158999872","1159004159","CA" +"1159004160","1159213055","US" +"1159213056","1159217151","CA" +"1159217152","1159249919","US" +"1159249920","1159254015","PR" +"1159254016","1159262471","US" +"1159262472","1159262475","TZ" +"1159262476","1159262479","SA" +"1159262480","1159262483","US" +"1159262484","1159262487","TZ" +"1159262488","1159262491","SA" +"1159262492","1159262727","US" +"1159262728","1159262731","DE" +"1159262732","1159262735","RU" +"1159262736","1159262739","US" +"1159262740","1159262743","DE" +"1159262744","1159262751","RU" +"1159262752","1159262967","US" +"1159262968","1159262975","RU" +"1159262976","1159263279","US" +"1159263280","1159263295","DE" +"1159263296","1159263375","US" +"1159263376","1159263391","ES" +"1159263392","1159263503","US" +"1159263504","1159263519","CZ" +"1159263520","1159263599","US" +"1159263600","1159263615","RU" +"1159263616","1159263807","US" +"1159263808","1159263823","EG" +"1159263824","1159263967","US" +"1159263968","1159263983","NG" +"1159263984","1159264031","US" +"1159264032","1159264047","ZA" +"1159264048","1159264207","US" +"1159264208","1159264223","AE" +"1159264224","1159264351","US" +"1159264352","1159264367","MY" +"1159264368","1159264383","US" +"1159264384","1159264399","TW" +"1159264400","1159264623","US" +"1159264624","1159264639","JP" +"1159264640","1159264655","US" +"1159264656","1159264671","AU" +"1159264672","1159264767","US" +"1159264768","1159264783","AR" +"1159264784","1159264959","US" +"1159264960","1159264975","BR" +"1159264976","1159266935","US" +"1159266936","1159266943","PR" +"1159266944","1159269119","US" +"1159269120","1159269375","AR" +"1159269376","1159274495","US" +"1159274496","1159274751","GB" +"1159274752","1159276799","US" +"1159276800","1159277055","A2" +"1159277056","1159281679","US" +"1159281680","1159281695","HK" +"1159281696","1159281727","US" +"1159281728","1159281743","HK" +"1159281744","1159281919","US" +"1159281920","1159282175","GB" +"1159282176","1159290655","US" +"1159290656","1159290687","CA" +"1159290688","1159292807","US" +"1159292808","1159292815","AU" +"1159292816","1159293343","US" +"1159293344","1159293359","KR" +"1159293360","1159293487","US" +"1159293488","1159293503","BR" +"1159293504","1159300607","US" +"1159300608","1159300863","SE" +"1159300864","1159313919","US" +"1159313920","1159313927","MX" +"1159313928","1159314079","US" +"1159314080","1159314087","TR" +"1159314088","1159314367","US" +"1159314368","1159314383","BR" +"1159314384","1159314943","US" +"1159314944","1159315199","CR" +"1159315200","1159318015","US" +"1159318016","1159318047","GB" +"1159318048","1159328655","US" +"1159328656","1159328671","FR" +"1159328672","1159348223","US" +"1159348224","1159356415","CA" +"1159356416","1159421951","US" +"1159421952","1159430143","CA" +"1159430144","1159480439","US" +"1159480440","1159480447","CA" +"1159480448","1159482423","US" +"1159482424","1159482431","AN" +"1159482432","1159512063","US" +"1159512064","1159512159","CA" +"1159512160","1159512191","US" +"1159512192","1159512895","CA" +"1159512896","1159512959","US" +"1159512960","1159513007","CA" +"1159513008","1159513023","US" +"1159513024","1159513343","CA" +"1159513344","1159513375","US" +"1159513376","1159513439","CA" +"1159513440","1159513487","US" +"1159513488","1159513519","CA" +"1159513520","1159513535","US" +"1159513536","1159513567","CA" +"1159513568","1159513599","US" +"1159513600","1159514879","CA" +"1159514880","1159515135","US" +"1159515136","1159515647","CA" +"1159515648","1159515711","US" +"1159515712","1159515887","CA" +"1159515888","1159515895","US" +"1159515896","1159515903","MX" +"1159515904","1159516159","CA" +"1159516160","1159516255","US" +"1159516256","1159516287","CA" +"1159516288","1159516415","US" +"1159516416","1159516671","NL" +"1159516672","1159517119","US" +"1159517120","1159517151","CA" +"1159517152","1159517183","US" +"1159517184","1159517327","CA" +"1159517328","1159517343","US" +"1159517344","1159517359","CA" +"1159517360","1159517439","US" +"1159517440","1159517599","CA" +"1159517600","1159517631","US" +"1159517632","1159517663","CA" +"1159517664","1159517695","US" +"1159517696","1159517975","CA" +"1159517976","1159517991","US" +"1159517992","1159517999","CA" +"1159518000","1159518015","US" +"1159518016","1159518175","CA" +"1159518176","1159518191","US" +"1159518192","1159518207","CA" +"1159518208","1159519743","US" +"1159519744","1159520767","CA" +"1159520768","1159520799","US" +"1159520800","1159520831","CA" +"1159520832","1159520863","US" +"1159520864","1159520871","CA" +"1159520872","1159520895","US" +"1159520896","1159520959","CA" +"1159520960","1159520975","US" +"1159520976","1159521007","CA" +"1159521008","1159521087","US" +"1159521088","1159521199","CA" +"1159521200","1159521215","US" +"1159521216","1159521823","CA" +"1159521824","1159521855","US" +"1159521856","1159522031","CA" +"1159522032","1159522047","US" +"1159522048","1159522095","CA" +"1159522096","1159522111","US" +"1159522112","1159522143","CA" +"1159522144","1159522167","US" +"1159522168","1159522175","CA" +"1159522176","1159522207","US" +"1159522208","1159522239","CA" +"1159522240","1159522271","BV" +"1159522272","1159522287","CA" +"1159522288","1159522303","BV" +"1159522304","1159522815","US" +"1159522816","1159523327","CA" +"1159523328","1159523583","US" +"1159523584","1159524351","CA" +"1159524352","1159525375","US" +"1159525376","1159526399","CA" +"1159526400","1159527935","US" +"1159527936","1159528191","CA" +"1159528192","1159532103","US" +"1159532104","1159532111","MO" +"1159532112","1159560207","US" +"1159560208","1159560215","MO" +"1159560216","1159656487","US" +"1159656488","1159656495","BR" +"1159656496","1159657023","US" +"1159657024","1159657039","AU" +"1159657040","1159659063","US" +"1159659064","1159659079","IN" +"1159659080","1159668479","US" +"1159668480","1159668735","CA" +"1159668736","1159673471","US" +"1159673472","1159673503","CA" +"1159673504","1159676927","US" +"1159676928","1159677183","A1" +"1159677184","1159694591","US" +"1159694592","1159694847","CA" +"1159694848","1159700479","US" +"1159700480","1159725055","CA" +"1159725056","1159988735","US" +"1159988736","1159988991","MX" +"1159988992","1159995647","US" +"1159995648","1159995655","AU" +"1159995656","1159996063","US" +"1159996064","1159996079","GB" +"1159996080","1159996287","US" +"1159996288","1159996319","AU" +"1159996320","1159996383","US" +"1159996384","1159996415","AU" +"1159996416","1159997583","US" +"1159997584","1159997591","BB" +"1159997592","1159997623","US" +"1159997624","1159997631","SC" +"1159997632","1159998575","US" +"1159998576","1159998583","UG" +"1159998584","1159998703","US" +"1159998704","1159998711","RS" +"1159998712","1160011775","US" +"1160011776","1160012783","CA" +"1160012784","1160012791","US" +"1160012792","1160013399","CA" +"1160013400","1160013423","US" +"1160013424","1160013463","CA" +"1160013464","1160013479","US" +"1160013480","1160013647","CA" +"1160013648","1160013663","US" +"1160013664","1160013679","CA" +"1160013680","1160013687","US" +"1160013688","1160014775","CA" +"1160014776","1160014783","US" +"1160014784","1160014959","CA" +"1160014960","1160014967","US" +"1160014968","1160015007","CA" +"1160015008","1160015015","US" +"1160015016","1160015031","CA" +"1160015032","1160015039","US" +"1160015040","1160015063","CA" +"1160015064","1160015071","US" +"1160015072","1160015143","CA" +"1160015144","1160015151","US" +"1160015152","1160015167","CA" +"1160015168","1160015191","US" +"1160015192","1160015231","CA" +"1160015232","1160015239","US" +"1160015240","1160015279","CA" +"1160015280","1160015287","US" +"1160015288","1160015311","CA" +"1160015312","1160015327","US" +"1160015328","1160015999","CA" +"1160016000","1160016095","US" +"1160016096","1160016183","CA" +"1160016184","1160016191","US" +"1160016192","1160016223","CA" +"1160016224","1160016239","US" +"1160016240","1160016247","CA" +"1160016248","1160016263","US" +"1160016264","1160016271","CA" +"1160016272","1160016279","US" +"1160016280","1160016295","CA" +"1160016296","1160016319","US" +"1160016320","1160016343","CA" +"1160016344","1160016351","US" +"1160016352","1160016359","CA" +"1160016360","1160016383","US" +"1160016384","1160016895","CA" +"1160016896","1160016903","US" +"1160016904","1160016943","CA" +"1160016944","1160016951","US" +"1160016952","1160017023","CA" +"1160017024","1160017031","US" +"1160017032","1160017143","CA" +"1160017144","1160017159","US" +"1160017160","1160019967","CA" +"1160019968","1160357942","US" +"1160357943","1160357943","A1" +"1160357944","1160364031","US" +"1160364032","1160368127","CA" +"1160368128","1160392703","US" +"1160392704","1160396799","CA" +"1160396800","1160397007","US" +"1160397008","1160397023","GB" +"1160397024","1160405631","US" +"1160405632","1160406015","DO" +"1160406016","1160406271","US" +"1160406272","1160406303","VE" +"1160406304","1160406319","US" +"1160406320","1160406335","DO" +"1160406336","1160406431","US" +"1160406432","1160406447","ES" +"1160406448","1160406479","US" +"1160406480","1160406487","A2" +"1160406488","1160408095","US" +"1160408096","1160408111","GD" +"1160408112","1160408127","ES" +"1160408128","1160408319","US" +"1160408320","1160408575","CA" +"1160408576","1160409423","US" +"1160409424","1160409439","PT" +"1160409440","1160409599","US" +"1160409600","1160410111","CO" +"1160410112","1160410143","US" +"1160410144","1160410175","PR" +"1160410176","1160410191","US" +"1160410192","1160410207","BM" +"1160410208","1160410239","US" +"1160410240","1160410255","MX" +"1160410256","1160410287","US" +"1160410288","1160410303","DO" +"1160410304","1160410447","US" +"1160410448","1160410463","UY" +"1160410464","1160410479","TT" +"1160410480","1160410495","US" +"1160410496","1160410511","PR" +"1160410512","1160410519","EC" +"1160410520","1160410551","US" +"1160410552","1160410559","EC" +"1160410560","1160411407","US" +"1160411408","1160411423","GB" +"1160411424","1160411567","US" +"1160411568","1160411583","BR" +"1160411584","1160412863","US" +"1160412864","1160412879","GT" +"1160412880","1160415637","US" +"1160415638","1160415733","KN" +"1160415734","1160415746","US" +"1160415747","1160415776","CA" +"1160415777","1160425471","US" +"1160425472","1160429567","CA" +"1160429568","1160433695","US" +"1160433696","1160433711","GR" +"1160433712","1160434015","US" +"1160434016","1160434047","TR" +"1160434048","1160434111","PT" +"1160434112","1160434303","US" +"1160434304","1160434367","NL" +"1160434368","1160434559","US" +"1160434560","1160434623","GB" +"1160434624","1160434879","US" +"1160434880","1160434943","IN" +"1160434944","1160435007","US" +"1160435008","1160435199","IN" +"1160435200","1160436543","US" +"1160436544","1160436575","ID" +"1160436576","1160436607","CO" +"1160436608","1160436799","US" +"1160436800","1160436863","PK" +"1160436864","1160436927","PT" +"1160436928","1160437119","US" +"1160437120","1160437183","IT" +"1160437184","1160437247","US" +"1160437248","1160437279","PT" +"1160437280","1160437343","US" +"1160437344","1160437375","CA" +"1160437376","1160437503","US" +"1160437504","1160437535","PT" +"1160437536","1160437695","US" +"1160437696","1160437759","IN" +"1160437760","1160486911","US" +"1160486912","1160487423","AU" +"1160487424","1160496615","US" +"1160496616","1160496623","CA" +"1160496624","1160503295","US" +"1160503296","1160503871","A2" +"1160503872","1160503903","US" +"1160503904","1160504159","A2" +"1160504160","1160504175","US" +"1160504176","1160504191","A2" +"1160504192","1160504207","AU" +"1160504208","1160504287","A2" +"1160504288","1160504303","US" +"1160504304","1160504319","A2" +"1160504320","1160504383","US" +"1160504384","1160504511","A2" +"1160504512","1160504543","NP" +"1160504544","1160504575","AF" +"1160504576","1160505343","A2" +"1160505344","1160505855","AU" +"1160505856","1160507391","A2" +"1160507392","1160542207","US" +"1160542208","1160542239","LB" +"1160542240","1160543327","US" +"1160543328","1160543359","MX" +"1160543360","1160544055","US" +"1160544056","1160544071","CA" +"1160544072","1160544135","US" +"1160544136","1160544143","LB" +"1160544144","1160547839","US" +"1160547840","1160548351","MX" +"1160548352","1160563199","US" +"1160563200","1160563711","MP" +"1160563712","1160609791","US" +"1160609792","1160610815","MX" +"1160610816","1160660111","US" +"1160660112","1160660119","GB" +"1160660120","1160660417","US" +"1160660418","1160660418","A1" +"1160660419","1160661639","US" +"1160661640","1160661647","GB" +"1160661648","1160662487","US" +"1160662488","1160662495","GB" +"1160662496","1160662743","US" +"1160662744","1160662751","GB" +"1160662752","1160663679","US" +"1160663680","1160663711","HK" +"1160663712","1160665623","US" +"1160665624","1160665631","GB" +"1160665632","1160665807","US" +"1160665808","1160665815","GB" +"1160665816","1160667087","US" +"1160667088","1160667095","GB" +"1160667096","1160667135","US" +"1160667136","1160675327","CA" +"1160675328","1160677015","US" +"1160677016","1160677023","AR" +"1160677024","1160677247","US" +"1160677248","1160677279","GB" +"1160677280","1160677375","US" +"1160677376","1160677439","GB" +"1160677440","1160678399","US" +"1160678400","1160678655","MX" +"1160678656","1160683519","US" +"1160683520","1160684039","CA" +"1160684040","1160684047","US" +"1160684048","1160684063","CA" +"1160684064","1160684071","US" +"1160684072","1160684615","CA" +"1160684616","1160684623","US" +"1160684624","1160684631","CA" +"1160684632","1160684639","US" +"1160684640","1160684887","CA" +"1160684888","1160684895","US" +"1160684896","1160686567","CA" +"1160686568","1160686575","US" +"1160686576","1160687271","CA" +"1160687272","1160687279","US" +"1160687280","1160687583","CA" +"1160687584","1160687591","US" +"1160687592","1160688191","CA" +"1160688192","1160688199","US" +"1160688200","1160688255","CA" +"1160688256","1160688263","US" +"1160688264","1160688351","CA" +"1160688352","1160688359","US" +"1160688360","1160688555","CA" +"1160688556","1160688578","US" +"1160688579","1160688687","CA" +"1160688688","1160688695","US" +"1160688696","1160688703","CA" +"1160688704","1160688711","US" +"1160688712","1160688767","CA" +"1160688768","1160688783","US" +"1160688784","1160688815","CA" +"1160688816","1160688823","US" +"1160688824","1160688831","CA" +"1160688832","1160688839","US" +"1160688840","1160689167","CA" +"1160689168","1160689175","US" +"1160689176","1160689199","CA" +"1160689200","1160689207","US" +"1160689208","1160689231","CA" +"1160689232","1160689239","US" +"1160689240","1160689287","CA" +"1160689288","1160689303","US" +"1160689304","1160689311","CA" +"1160689312","1160689319","IN" +"1160689320","1160689367","CA" +"1160689368","1160689375","US" +"1160689376","1160689419","CA" +"1160689420","1160689447","US" +"1160689448","1160689531","CA" +"1160689532","1160689571","US" +"1160689572","1160689693","CA" +"1160689694","1160689732","US" +"1160689733","1160689733","CA" +"1160689734","1160689741","US" +"1160689742","1160689766","CA" +"1160689767","1160689778","US" +"1160689779","1160689789","CA" +"1160689790","1160689799","US" +"1160689800","1160689800","CA" +"1160689801","1160689811","US" +"1160689812","1160689834","CA" +"1160689835","1160689846","US" +"1160689847","1160689861","CA" +"1160689862","1160689887","US" +"1160689888","1160689943","CA" +"1160689944","1160689971","US" +"1160689972","1160690103","CA" +"1160690104","1160690175","US" +"1160690176","1160690349","CA" +"1160690350","1160690361","US" +"1160690362","1160690362","CA" +"1160690363","1160690381","US" +"1160690382","1160690386","CA" +"1160690387","1160690415","US" +"1160690416","1160690447","CA" +"1160690448","1160690455","US" +"1160690456","1160690559","CA" +"1160690560","1160690607","US" +"1160690608","1160690695","CA" +"1160690696","1160690727","US" +"1160690728","1160690735","CA" +"1160690736","1160690751","US" +"1160690752","1160690783","CA" +"1160690784","1160690791","US" +"1160690792","1160690807","CA" +"1160690808","1160690823","US" +"1160690824","1160690911","CA" +"1160690912","1160690919","US" +"1160690920","1160690951","CA" +"1160690952","1160690959","US" +"1160690960","1160691011","CA" +"1160691012","1160691027","US" +"1160691028","1160691551","CA" +"1160691552","1160691567","US" +"1160691568","1160691591","CA" +"1160691592","1160691599","US" +"1160691600","1160691615","CA" +"1160691616","1160691631","US" +"1160691632","1160691639","CA" +"1160691640","1160691647","US" +"1160691648","1160691671","CA" +"1160691672","1160691679","US" +"1160691680","1160691711","CA" +"1160691712","1160808255","US" +"1160808256","1160808287","CA" +"1160808288","1160810495","US" +"1160810496","1160810751","CA" +"1160810752","1160811551","US" +"1160811552","1160811559","BE" +"1160811560","1160847359","US" +"1160847360","1160855551","CA" +"1160855552","1160863999","US" +"1160864000","1160864255","CA" +"1160864256","1160905215","US" +"1160905216","1160905471","A1" +"1160905472","1160921087","US" +"1160921088","1160925183","AG" +"1160925184","1160938879","US" +"1160938880","1160938887","NL" +"1160938888","1160938895","US" +"1160938896","1160938911","CY" +"1160938912","1160941463","US" +"1160941464","1160941471","RU" +"1160941472","1160941503","US" +"1160941504","1160941519","CY" +"1160941520","1160941535","US" +"1160941536","1160941567","CA" +"1160941568","1160945663","US" +"1160945664","1160953855","CA" +"1160953856","1160974591","US" +"1160974592","1160974623","HK" +"1160974624","1161019391","US" +"1161019392","1161035775","CA" +"1161035776","1161293823","US" +"1161293824","1161297919","CA" +"1161297920","1161298303","US" +"1161298304","1161298311","IL" +"1161298312","1161300495","US" +"1161300496","1161300519","CA" +"1161300520","1161304591","US" +"1161304592","1161304599","AU" +"1161304600","1161311743","US" +"1161311744","1161311759","KN" +"1161311760","1161311991","US" +"1161311992","1161311999","KN" +"1161312000","1161312839","US" +"1161312840","1161312855","BS" +"1161312856","1161312863","US" +"1161312864","1161312871","BS" +"1161312872","1161312991","US" +"1161312992","1161312999","IL" +"1161313000","1161313127","US" +"1161313128","1161313135","BS" +"1161313136","1161314151","US" +"1161314152","1161314159","CA" +"1161314160","1161363455","US" +"1161363456","1161367551","CA" +"1161367552","1161416703","US" +"1161416704","1161420799","CA" +"1161420800","1161421151","AG" +"1161421152","1161421167","MS" +"1161421168","1161421311","AG" +"1161421312","1161421567","AI" +"1161421568","1161422079","AG" +"1161422080","1161422335","VG" +"1161422336","1161422591","LC" +"1161422592","1161422847","AG" +"1161422848","1161423103","LC" +"1161423104","1161423359","VG" +"1161423360","1161423615","AI" +"1161423616","1161423871","AG" +"1161423872","1161424127","LC" +"1161424128","1161424383","AI" +"1161424384","1161424639","KN" +"1161424640","1161424895","LC" +"1161424896","1161425151","VG" +"1161425152","1161425407","DM" +"1161425408","1161425663","AG" +"1161425664","1161425919","AI" +"1161425920","1161425935","AG" +"1161425936","1161425951","MS" +"1161425952","1161426143","AG" +"1161426144","1161426175","MS" +"1161426176","1161426943","AG" +"1161426944","1161427199","AI" +"1161427200","1161427455","VG" +"1161427456","1161427487","AG" +"1161427488","1161427519","MS" +"1161427520","1161428223","AG" +"1161428224","1161428991","KN" +"1161428992","1161453567","US" +"1161453568","1161457663","CA" +"1161457664","1161501443","US" +"1161501444","1161501470","TR" +"1161501471","1161576447","US" +"1161576448","1161580543","CA" +"1161580544","1161586559","US" +"1161586560","1161586623","A1" +"1161586624","1161586687","US" +"1161586688","1161586943","PA" +"1161586944","1161617407","US" +"1161617408","1161625599","CA" +"1161625600","1161627663","US" +"1161627664","1161627679","SE" +"1161627680","1161627687","US" +"1161627688","1161627695","SI" +"1161627696","1161627703","US" +"1161627704","1161627711","DE" +"1161627712","1161627727","US" +"1161627728","1161627743","AR" +"1161627744","1161627751","US" +"1161627752","1161627759","PL" +"1161627760","1161627807","US" +"1161627808","1161627815","SI" +"1161627816","1161627823","US" +"1161627824","1161627831","AU" +"1161627832","1161627839","US" +"1161627840","1161627847","AR" +"1161627848","1161627855","US" +"1161627856","1161627863","AR" +"1161627864","1161627871","CA" +"1161627872","1161627879","SI" +"1161627880","1161628455","US" +"1161628456","1161628463","GB" +"1161628464","1161628479","US" +"1161628480","1161628487","GB" +"1161628488","1161628519","US" +"1161628520","1161628527","PL" +"1161628528","1161628607","US" +"1161628608","1161628639","AR" +"1161628640","1161628647","IN" +"1161628648","1161628663","US" +"1161628664","1161628671","AR" +"1161628672","1161629199","US" +"1161629200","1161629215","SI" +"1161629216","1161629239","US" +"1161629240","1161629247","PL" +"1161629248","1161629263","US" +"1161629264","1161629271","PL" +"1161629272","1161629343","US" +"1161629344","1161629375","FI" +"1161629376","1161629383","CA" +"1161629384","1161629391","AR" +"1161629392","1161629399","GB" +"1161629400","1161629407","IL" +"1161629408","1161629415","GB" +"1161629416","1161629423","SI" +"1161629424","1161629431","US" +"1161629432","1161629439","MY" +"1161629440","1161629519","US" +"1161629520","1161629527","GB" +"1161629528","1161629535","MY" +"1161629536","1161629583","US" +"1161629584","1161629599","GB" +"1161629600","1161629615","PL" +"1161629616","1161629631","GB" +"1161629632","1161629663","US" +"1161629664","1161629671","AU" +"1161629672","1161629695","US" +"1161629696","1161629703","PL" +"1161629704","1161629735","US" +"1161629736","1161629743","PL" +"1161629744","1161629751","US" +"1161629752","1161629759","AU" +"1161629760","1161629775","US" +"1161629776","1161629791","PL" +"1161629792","1161629799","US" +"1161629800","1161629807","IL" +"1161629808","1161629823","PL" +"1161629824","1161629855","US" +"1161629856","1161629863","AR" +"1161629864","1161629887","US" +"1161629888","1161629903","CY" +"1161629904","1161629935","PL" +"1161629936","1161629943","US" +"1161629944","1161629947","PL" +"1161629948","1161630247","US" +"1161630248","1161630255","HR" +"1161630256","1161630263","NL" +"1161630264","1161630271","AR" +"1161630272","1161630335","US" +"1161630336","1161630343","AR" +"1161630344","1161630351","IL" +"1161630352","1161630367","US" +"1161630368","1161630375","GB" +"1161630376","1161630383","US" +"1161630384","1161630391","AR" +"1161630392","1161630399","US" +"1161630400","1161630431","GB" +"1161630432","1161630439","US" +"1161630440","1161630447","HR" +"1161630448","1161630455","US" +"1161630456","1161630463","NL" +"1161630464","1161630743","US" +"1161630744","1161630751","GB" +"1161630752","1161630767","US" +"1161630768","1161630775","IL" +"1161630776","1161630807","US" +"1161630808","1161630815","BG" +"1161630816","1161630823","US" +"1161630824","1161630831","GB" +"1161630832","1161630895","US" +"1161630896","1161630903","DK" +"1161630904","1161630911","US" +"1161630912","1161630919","KW" +"1161630920","1161630927","US" +"1161630928","1161630935","GB" +"1161630936","1161630943","SI" +"1161630944","1161630951","US" +"1161630952","1161630959","TR" +"1161630960","1161630967","US" +"1161630968","1161630975","CZ" +"1161630976","1161631039","US" +"1161631040","1161631047","PL" +"1161631048","1161631055","IN" +"1161631056","1161631079","US" +"1161631080","1161631087","SI" +"1161631088","1161631095","PL" +"1161631096","1161631103","AR" +"1161631104","1161631111","KW" +"1161631112","1161631207","US" +"1161631208","1161631215","AR" +"1161631216","1161631431","US" +"1161631432","1161631439","KW" +"1161631440","1161631471","US" +"1161631472","1161631479","AR" +"1161631480","1161631511","US" +"1161631512","1161631519","BG" +"1161631520","1161631535","GB" +"1161631536","1161631623","US" +"1161631624","1161631631","KW" +"1161631632","1161631655","US" +"1161631656","1161631663","AR" +"1161631664","1161631703","US" +"1161631704","1161631711","NL" +"1161631712","1161632519","US" +"1161632520","1161632527","BG" +"1161632528","1161632559","US" +"1161632560","1161632575","GB" +"1161632576","1161632631","US" +"1161632632","1161632639","GB" +"1161632640","1161632687","US" +"1161632688","1161632703","GB" +"1161632704","1161633023","US" +"1161633024","1161633055","CA" +"1161633056","1161633215","US" +"1161633216","1161633231","EE" +"1161633232","1161633239","US" +"1161633240","1161633247","AU" +"1161633248","1161633263","US" +"1161633264","1161633271","PL" +"1161633272","1161633543","US" +"1161633544","1161633551","AR" +"1161633552","1161633559","US" +"1161633560","1161633567","IL" +"1161633568","1161633583","PL" +"1161633584","1161633631","US" +"1161633632","1161633639","CA" +"1161633640","1161634055","US" +"1161634056","1161634063","IN" +"1161634064","1161634127","US" +"1161634128","1161634135","AR" +"1161634136","1161634143","PH" +"1161634144","1161634175","US" +"1161634176","1161634191","PL" +"1161634192","1161634199","US" +"1161634200","1161634207","NZ" +"1161634208","1161634223","US" +"1161634224","1161634231","VN" +"1161634232","1161634239","US" +"1161634240","1161634247","GB" +"1161634248","1161634335","US" +"1161634336","1161634351","PL" +"1161634352","1161634495","US" +"1161634496","1161634503","GB" +"1161634504","1161634519","US" +"1161634520","1161634527","BG" +"1161634528","1161634543","GB" +"1161634544","1161634815","US" +"1161634816","1161634831","PL" +"1161634832","1161634911","US" +"1161634912","1161634927","GB" +"1161634928","1161635007","US" +"1161635008","1161635071","KW" +"1161635072","1161635871","US" +"1161635872","1161635887","PL" +"1161635888","1161636095","US" +"1161636096","1161636127","GB" +"1161636128","1161636159","US" +"1161636160","1161636223","IL" +"1161636224","1161636463","US" +"1161636464","1161636471","EG" +"1161636472","1161636495","US" +"1161636496","1161636503","CA" +"1161636504","1161636575","US" +"1161636576","1161636583","PL" +"1161636584","1161637127","US" +"1161637128","1161637135","PL" +"1161637136","1161637143","CA" +"1161637144","1161637159","US" +"1161637160","1161637167","NZ" +"1161637168","1161637175","GB" +"1161637176","1161637199","US" +"1161637200","1161637207","GB" +"1161637208","1161637215","US" +"1161637216","1161637223","PL" +"1161637224","1161637295","US" +"1161637296","1161637303","AR" +"1161637304","1161637655","US" +"1161637656","1161637663","IL" +"1161637664","1161637671","PL" +"1161637672","1161637679","IL" +"1161637680","1161637695","AR" +"1161637696","1161637775","US" +"1161637776","1161637783","GB" +"1161637784","1161638911","US" +"1161638912","1161638943","PL" +"1161638944","1161638967","US" +"1161638968","1161638975","GB" +"1161638976","1161638991","US" +"1161638992","1161638999","PL" +"1161639000","1161639007","US" +"1161639008","1161639023","BG" +"1161639024","1161639039","US" +"1161639040","1161639047","CA" +"1161639048","1161639063","US" +"1161639064","1161639071","PL" +"1161639072","1161639087","US" +"1161639088","1161639095","CA" +"1161639096","1161639119","US" +"1161639120","1161639127","DK" +"1161639128","1161639151","US" +"1161639152","1161639159","IL" +"1161639160","1161639447","US" +"1161639448","1161639455","PT" +"1161639456","1161639511","US" +"1161639512","1161639519","GB" +"1161639520","1161639527","PL" +"1161639528","1161639575","US" +"1161639576","1161639583","BG" +"1161639584","1161639687","US" +"1161639688","1161639695","KW" +"1161639696","1161639703","US" +"1161639704","1161639711","BZ" +"1161639712","1161639831","US" +"1161639832","1161639839","AR" +"1161639840","1161639887","US" +"1161639888","1161639895","AT" +"1161639896","1161639959","US" +"1161639960","1161639967","GB" +"1161639968","1161639991","US" +"1161639992","1161639999","HR" +"1161640000","1161640015","US" +"1161640016","1161640023","PL" +"1161640024","1161640031","AR" +"1161640032","1161640095","US" +"1161640096","1161640127","AR" +"1161640128","1161640767","US" +"1161640768","1161640783","RO" +"1161640784","1161640791","GB" +"1161640792","1161640847","US" +"1161640848","1161640863","PL" +"1161640864","1161640895","AR" +"1161640896","1161641375","US" +"1161641376","1161641383","KW" +"1161641384","1161641463","US" +"1161641464","1161641471","IN" +"1161641472","1161641887","US" +"1161641888","1161641911","KW" +"1161641912","1161641919","US" +"1161641920","1161641983","PL" +"1161641984","1161641999","US" +"1161642000","1161642007","IN" +"1161642008","1161642031","US" +"1161642032","1161642039","GB" +"1161642040","1161642175","US" +"1161642176","1161642191","GB" +"1161642192","1161644655","US" +"1161644656","1161644671","PL" +"1161644672","1161644735","US" +"1161644736","1161644743","GB" +"1161644744","1161644751","AR" +"1161644752","1161644767","PL" +"1161644768","1161645911","US" +"1161645912","1161645919","GB" +"1161645920","1161645935","US" +"1161645936","1161645951","PL" +"1161645952","1161646863","US" +"1161646864","1161646879","PL" +"1161646880","1161646895","US" +"1161646896","1161646943","PL" +"1161646944","1161647103","US" +"1161647104","1161647119","PL" +"1161647120","1161647135","US" +"1161647136","1161647167","PL" +"1161647168","1161649407","US" +"1161649408","1161649663","AR" +"1161649664","1161650175","US" +"1161650176","1161650183","HR" +"1161650184","1161650191","AR" +"1161650192","1161650215","US" +"1161650216","1161650223","FI" +"1161650224","1161650327","US" +"1161650328","1161650343","AR" +"1161650344","1161650359","US" +"1161650360","1161650367","IL" +"1161650368","1161650375","ES" +"1161650376","1161650391","US" +"1161650392","1161650399","CA" +"1161650400","1161650415","US" +"1161650416","1161650423","PL" +"1161650424","1161650799","US" +"1161650800","1161650815","SI" +"1161650816","1161650823","US" +"1161650824","1161650831","AU" +"1161650832","1161650847","US" +"1161650848","1161650863","AR" +"1161650864","1161650879","US" +"1161650880","1161650895","GB" +"1161650896","1161650927","US" +"1161650928","1161650935","SI" +"1161650936","1161650943","US" +"1161650944","1161650951","SI" +"1161650952","1161650967","US" +"1161650968","1161650975","SI" +"1161650976","1161651055","US" +"1161651056","1161651071","PL" +"1161651072","1161651079","SI" +"1161651080","1161651095","US" +"1161651096","1161651103","HR" +"1161651104","1161651135","GB" +"1161651136","1161651143","BG" +"1161651144","1161651183","US" +"1161651184","1161651199","GB" +"1161651200","1161651487","US" +"1161651488","1161651503","GB" +"1161651504","1161651511","US" +"1161651512","1161651519","GB" +"1161651520","1161651575","US" +"1161651576","1161651583","CA" +"1161651584","1161651743","US" +"1161651744","1161651775","GB" +"1161651776","1161651807","AR" +"1161651808","1161651839","US" +"1161651840","1161651855","MY" +"1161651856","1161652095","US" +"1161652096","1161652103","CY" +"1161652104","1161652143","US" +"1161652144","1161652159","GB" +"1161652160","1161653023","US" +"1161653024","1161653055","AR" +"1161653056","1161653087","US" +"1161653088","1161653119","PL" +"1161653120","1161653503","US" +"1161653504","1161653759","CA" +"1161653760","1161653791","US" +"1161653792","1161653799","SI" +"1161653800","1161653831","US" +"1161653832","1161653839","SI" +"1161653840","1161653847","US" +"1161653848","1161653855","SI" +"1161653856","1161653887","US" +"1161653888","1161653951","SE" +"1161653952","1161654239","US" +"1161654240","1161654247","GB" +"1161654248","1161654263","US" +"1161654264","1161654271","SI" +"1161654272","1161657663","US" +"1161657664","1161657679","AF" +"1161657680","1161657695","PL" +"1161657696","1161658135","US" +"1161658136","1161658143","AR" +"1161658144","1161658151","SI" +"1161658152","1161658159","AR" +"1161658160","1161764863","US" +"1161764864","1161773055","CA" +"1161773056","1161777151","SZ" +"1161777152","1161789981","US" +"1161789982","1161789983","CA" +"1161789984","1161789984","US" +"1161789985","1161789985","CA" +"1161789986","1161790165","US" +"1161790166","1161790171","CA" +"1161790172","1161790196","US" +"1161790197","1161790205","DE" +"1161790206","1161790476","US" +"1161790477","1161790477","CA" +"1161790478","1161790478","US" +"1161790479","1161790480","CA" +"1161790481","1161790483","US" +"1161790484","1161790484","CA" +"1161790485","1161790486","US" +"1161790487","1161790487","CA" +"1161790488","1161790500","US" +"1161790501","1161790502","CA" +"1161790503","1161790516","US" +"1161790517","1161790517","CA" +"1161790518","1161790523","US" +"1161790524","1161790524","CA" +"1161790525","1161790531","US" +"1161790532","1161790532","CA" +"1161790533","1161790533","US" +"1161790534","1161790542","CA" +"1161790543","1161790839","US" +"1161790840","1161790848","CA" +"1161790849","1161791321","US" +"1161791322","1161791330","CA" +"1161791331","1161791381","US" +"1161791382","1161791386","CA" +"1161791387","1161793851","US" +"1161793852","1161793860","PA" +"1161793861","1161793911","US" +"1161793912","1161793912","IT" +"1161793913","1161793916","US" +"1161793917","1161793917","IT" +"1161793918","1161793920","US" +"1161793921","1161793929","IT" +"1161793930","1161794011","US" +"1161794012","1161794020","AO" +"1161794021","1161794036","US" +"1161794037","1161794037","IT" +"1161794038","1161794039","US" +"1161794040","1161794040","IT" +"1161794041","1161794468","US" +"1161794469","1161794472","ZA" +"1161794473","1161794649","US" +"1161794650","1161794654","ZA" +"1161794655","1161795643","US" +"1161795644","1161795647","CA" +"1161795648","1161795663","US" +"1161795664","1161795667","BR" +"1161795668","1161795979","US" +"1161795980","1161795983","CA" +"1161795984","1161796099","US" +"1161796100","1161796103","CZ" +"1161796104","1161818111","US" +"1161818112","1161822207","CA" +"1161822208","1161832547","US" +"1161832548","1161832550","CA" +"1161832551","1161832555","US" +"1161832556","1161832556","CA" +"1161832557","1161832560","IN" +"1161832561","1161832562","US" +"1161832563","1161832563","IN" +"1161832564","1161832565","US" +"1161832566","1161832572","IN" +"1161832573","1161832573","US" +"1161832574","1161832574","IN" +"1161832575","1161832577","US" +"1161832578","1161832579","IN" +"1161832580","1161832582","PK" +"1161832583","1161832767","US" +"1161832768","1161832831","BR" +"1161832832","1161832998","US" +"1161832999","1161832999","CA" +"1161833000","1161833000","TH" +"1161833001","1161833003","US" +"1161833004","1161833006","BG" +"1161833007","1161833007","US" +"1161833008","1161833008","BG" +"1161833009","1161833011","US" +"1161833012","1161833012","BG" +"1161833013","1161833013","US" +"1161833014","1161833014","BG" +"1161833015","1161833017","US" +"1161833018","1161833019","BG" +"1161833020","1161833027","US" +"1161833028","1161833029","BG" +"1161833030","1161833036","US" +"1161833037","1161833039","BG" +"1161833040","1161833040","US" +"1161833041","1161833042","BG" +"1161833043","1161833046","US" +"1161833047","1161833047","BG" +"1161833048","1161833051","US" +"1161833052","1161833052","BG" +"1161833053","1161833053","US" +"1161833054","1161833054","BG" +"1161833055","1161833055","US" +"1161833056","1161833058","BG" +"1161833059","1161833062","US" +"1161833063","1161833063","BG" +"1161833064","1161833064","US" +"1161833065","1161833072","BG" +"1161833073","1161833073","US" +"1161833074","1161833075","BG" +"1161833076","1161833076","US" +"1161833077","1161833077","TH" +"1161833078","1161833081","BR" +"1161833082","1161833082","US" +"1161833083","1161833083","TH" +"1161833084","1161833085","CA" +"1161833086","1161833086","US" +"1161833087","1161833087","CA" +"1161833088","1161833090","US" +"1161833091","1161833093","CA" +"1161833094","1161833094","US" +"1161833095","1161833095","CA" +"1161833096","1161833097","US" +"1161833098","1161833100","CA" +"1161833101","1161833101","US" +"1161833102","1161833128","CA" +"1161833129","1161833129","US" +"1161833130","1161833130","CA" +"1161833131","1161833131","US" +"1161833132","1161833134","CA" +"1161833135","1161833136","US" +"1161833137","1161833138","CA" +"1161833139","1161833139","US" +"1161833140","1161833144","CA" +"1161833145","1161833145","US" +"1161833146","1161833151","CA" +"1161833152","1161833152","US" +"1161833153","1161833168","CA" +"1161833169","1161833169","US" +"1161833170","1161833170","CA" +"1161833171","1161833191","US" +"1161833192","1161833197","CA" +"1161833198","1161833198","US" +"1161833199","1161833200","CA" +"1161833201","1161833919","US" +"1161833920","1161833951","LT" +"1161833952","1161833967","US" +"1161833968","1161833975","DE" +"1161833976","1161835341","US" +"1161835342","1161835353","GR" +"1161835354","1161835828","US" +"1161835829","1161835829","PK" +"1161835830","1161835941","US" +"1161835942","1161835947","PK" +"1161835948","1161835952","US" +"1161835953","1161835954","PK" +"1161835955","1161835955","US" +"1161835956","1161835956","PK" +"1161835957","1161835957","US" +"1161835958","1161835962","PK" +"1161835963","1161835969","US" +"1161835970","1161835971","PK" +"1161835972","1161835973","TH" +"1161835974","1161835983","CA" +"1161835984","1161835984","US" +"1161835985","1161835987","CA" +"1161835988","1161835988","US" +"1161835989","1161835994","CA" +"1161835995","1161835999","US" +"1161836000","1161836001","CA" +"1161836002","1161836004","US" +"1161836005","1161836011","CA" +"1161836012","1161836014","US" +"1161836015","1161836016","CA" +"1161836017","1161836018","US" +"1161836019","1161836028","CA" +"1161836029","1161836031","US" +"1161836032","1161836063","CA" +"1161836064","1161836095","JP" +"1161836096","1161836159","US" +"1161836160","1161836191","BR" +"1161836192","1161836287","US" +"1161836288","1161836319","RS" +"1161836320","1161836383","US" +"1161836384","1161836415","CY" +"1161836416","1161836447","BR" +"1161836448","1161836479","US" +"1161836480","1161836511","GB" +"1161836512","1161836543","DE" +"1161836544","1161837567","US" +"1161837568","1161837823","JP" +"1161837824","1161837874","US" +"1161837875","1161837875","CA" +"1161837876","1161837876","US" +"1161837877","1161837879","PK" +"1161837880","1161838548","US" +"1161838549","1161838560","RU" +"1161838561","1161841101","US" +"1161841102","1161841112","DE" +"1161841113","1161842101","US" +"1161842102","1161842109","CH" +"1161842110","1161842932","US" +"1161842933","1161842940","MX" +"1161842941","1161842955","US" +"1161842956","1161842963","CA" +"1161842964","1161842970","US" +"1161842971","1161842978","GB" +"1161842979","1161843084","US" +"1161843085","1161843092","MX" +"1161843093","1161843098","US" +"1161843099","1161843106","MX" +"1161843107","1161843143","US" +"1161843144","1161843153","CA" +"1161843154","1161843245","US" +"1161843246","1161843253","MX" +"1161843254","1161865703","US" +"1161865704","1161865711","EG" +"1161865712","1161866111","US" +"1161866112","1161866127","MT" +"1161866128","1161886719","US" +"1161886720","1161887231","DE" +"1161887232","1161891287","US" +"1161891288","1161891295","CA" +"1161891296","1161891527","US" +"1161891528","1161891535","CA" +"1161891536","1161891543","US" +"1161891544","1161891551","CA" +"1161891552","1161900863","US" +"1161900864","1161900895","A1" +"1161900896","1161901647","US" +"1161901648","1161901655","VN" +"1161901656","1161925631","US" +"1161925632","1161925887","EC" +"1161925888","1161926399","US" +"1161926400","1161926655","EC" +"1161926656","1162018815","US" +"1162018816","1162022911","CA" +"1162022912","1162023607","US" +"1162023608","1162023615","FI" +"1162023616","1162027007","US" +"1162027008","1162031103","ZA" +"1162031104","1162031375","US" +"1162031376","1162031383","CA" +"1162031384","1162031407","US" +"1162031408","1162031423","DO" +"1162031424","1162032255","US" +"1162032256","1162032271","CA" +"1162032272","1162032287","US" +"1162032288","1162032303","BE" +"1162032304","1162032359","US" +"1162032360","1162032367","JO" +"1162032368","1162032735","US" +"1162032736","1162032767","CA" +"1162032768","1162032831","DO" +"1162032832","1162033247","US" +"1162033248","1162033263","CA" +"1162033264","1162033983","US" +"1162033984","1162034015","IN" +"1162034016","1162059775","US" +"1162059776","1162067967","CA" +"1162067968","1162204970","US" +"1162204971","1162204972","A1" +"1162204973","1162215423","US" +"1162215424","1162280959","CA" +"1162280960","1162296015","US" +"1162296016","1162296023","CA" +"1162296024","1162296407","US" +"1162296408","1162296415","CA" +"1162296416","1162297343","US" +"1162297344","1162305535","CA" +"1162305536","1162313727","US" +"1162313728","1162320127","A2" +"1162320128","1162320383","US" +"1162320384","1162321919","A2" +"1162321920","1162394463","US" +"1162394464","1162394471","GB" +"1162394472","1162408617","US" +"1162408618","1162408618","A1" +"1162408619","1162408783","US" +"1162408784","1162408831","CR" +"1162408832","1162409727","US" +"1162409728","1162409983","A1" +"1162409984","1162457991","US" +"1162457992","1162457999","ID" +"1162458000","1162461183","US" +"1162461184","1162461695","BB" +"1162461696","1162462207","GD" +"1162462208","1162462975","BB" +"1162462976","1162463054","VC" +"1162463055","1162463055","BB" +"1162463056","1162463999","VC" +"1162464000","1162465279","BB" +"1162465280","1162465535","GD" +"1162465536","1162470911","BB" +"1162470912","1162471423","GD" +"1162471424","1162472703","BB" +"1162472704","1162473471","VC" +"1162473472","1162475007","GD" +"1162475008","1162477567","BB" +"1162477568","1162715135","US" +"1162715136","1162716159","CA" +"1162716160","1162716175","US" +"1162716176","1162718495","CA" +"1162718496","1162718511","US" +"1162718512","1162719599","CA" +"1162719600","1162719615","US" +"1162719616","1162723327","CA" +"1162723328","1162805247","US" +"1162805248","1162811391","PR" +"1162811392","1162811647","AN" +"1162811648","1162812159","US" +"1162812160","1162812415","DO" +"1162812416","1162813439","BS" +"1162813440","1162817535","AN" +"1162817536","1162821631","GT" +"1162821632","1162823679","PR" +"1162823680","1162825727","GT" +"1162825728","1162827775","US" +"1162827776","1162833919","PR" +"1162833920","1162835967","GT" +"1162835968","1162836223","BS" +"1162836224","1162836735","AN" +"1162836736","1162836991","US" +"1162836992","1162838015","BS" +"1162838016","1162840063","PR" +"1162840064","1162853375","US" +"1162853376","1162854399","PR" +"1162854400","1162858495","JM" +"1162858496","1162862591","HN" +"1162862592","1162870783","US" +"1162870784","1162871295","BB" +"1162871296","1162879999","LC" +"1162880000","1162882559","DM" +"1162882560","1162883839","GD" +"1162883840","1162887167","BB" +"1162887168","1162895359","US" +"1162895360","1162899455","A1" +"1162899456","1162925983","US" +"1162925984","1162926015","AU" +"1162926016","1162926071","US" +"1162926072","1162926079","AU" +"1162926080","1163395071","US" +"1163395072","1163395823","A2" +"1163395824","1163395827","NP" +"1163395828","1163395831","AF" +"1163395832","1163395839","A2" +"1163395840","1163395847","BD" +"1163395848","1163395855","ID" +"1163395856","1163395863","BD" +"1163395864","1163395871","ID" +"1163395872","1163395879","PK" +"1163395880","1163395911","ID" +"1163395912","1163395919","BD" +"1163395920","1163395927","ID" +"1163395928","1163395943","BD" +"1163395944","1163395951","A2" +"1163395952","1163395959","PK" +"1163395960","1163396023","ID" +"1163396024","1163396031","PK" +"1163396032","1163396079","ID" +"1163396080","1163396087","BD" +"1163396088","1163396143","ID" +"1163396144","1163396151","BD" +"1163396152","1163396191","ID" +"1163396192","1163396199","A2" +"1163396200","1163396207","ID" +"1163396208","1163396215","A2" +"1163396216","1163396231","ID" +"1163396232","1163396239","A2" +"1163396240","1163396247","ID" +"1163396248","1163396255","BD" +"1163396256","1163396287","ID" +"1163396288","1163396295","A2" +"1163396296","1163396303","BD" +"1163396304","1163396319","A2" +"1163396320","1163396327","BD" +"1163396328","1163396343","ID" +"1163396344","1163396351","A2" +"1163396352","1163396383","ID" +"1163396384","1163396399","A2" +"1163396400","1163396431","BD" +"1163396432","1163396519","A2" +"1163396520","1163396527","ID" +"1163396528","1163396559","A2" +"1163396560","1163396575","ID" +"1163396576","1163396623","A2" +"1163396624","1163396639","ID" +"1163396640","1163396655","A2" +"1163396656","1163396671","BD" +"1163396672","1163396687","A2" +"1163396688","1163396719","BD" +"1163396720","1163396831","A2" +"1163396832","1163396895","BD" +"1163396896","1163396927","ID" +"1163396928","1163396991","A2" +"1163396992","1163397023","BD" +"1163397024","1163397055","A2" +"1163397056","1163397087","BD" +"1163397088","1163397119","A2" +"1163397120","1163397247","NP" +"1163397248","1163397375","BD" +"1163397376","1163397471","A2" +"1163397472","1163397479","US" +"1163397480","1163397535","A2" +"1163397536","1163397543","US" +"1163397544","1163397575","A2" +"1163397576","1163397583","BD" +"1163397584","1163397663","A2" +"1163397664","1163397695","BD" +"1163397696","1163397791","A2" +"1163397792","1163397807","AF" +"1163397808","1163397855","A2" +"1163397856","1163397887","US" +"1163397888","1163398143","NP" +"1163398144","1163398239","A2" +"1163398240","1163398303","BD" +"1163398304","1163398367","A2" +"1163398368","1163398399","BD" +"1163398400","1163398655","US" +"1163398656","1163399039","BD" +"1163399040","1163399103","A2" +"1163399104","1163399295","BD" +"1163399296","1163399679","A2" +"1163399680","1163399807","US" +"1163399808","1163399935","A2" +"1163399936","1163400063","US" +"1163400064","1163400447","A2" +"1163400448","1163400703","BD" +"1163400704","1163400719","PK" +"1163400720","1163400727","ID" +"1163400728","1163400735","A2" +"1163400736","1163400743","PK" +"1163400744","1163400751","A2" +"1163400752","1163400759","PK" +"1163400760","1163400839","A2" +"1163400840","1163400847","ID" +"1163400848","1163400887","A2" +"1163400888","1163400927","ID" +"1163400928","1163400959","A2" +"1163400960","1163401215","BD" +"1163401216","1163401239","ID" +"1163401240","1163401255","A2" +"1163401256","1163401263","ID" +"1163401264","1163401319","A2" +"1163401320","1163401327","PK" +"1163401328","1163401351","A2" +"1163401352","1163401359","PK" +"1163401360","1163401431","A2" +"1163401432","1163401439","PK" +"1163401440","1163401471","A2" +"1163401472","1163401727","ID" +"1163401728","1163401791","BD" +"1163401792","1163401983","A2" +"1163401984","1163402367","BD" +"1163402368","1163402495","A2" +"1163402496","1163402879","BD" +"1163402880","1163403007","A2" +"1163403008","1163403071","BD" +"1163403072","1163403135","US" +"1163403136","1163403263","A2" +"1163403264","1163407359","US" +"1163407360","1163411455","CA" +"1163411456","1163468799","US" +"1163468800","1163469055","PR" +"1163469056","1163469311","US" +"1163469312","1163472895","PR" +"1163472896","1163477695","US" +"1163477696","1163477727","JP" +"1163477728","1163478047","US" +"1163478048","1163478063","JP" +"1163478064","1163526143","US" +"1163526144","1163526471","CA" +"1163526472","1163526559","US" +"1163526560","1163526575","CA" +"1163526576","1163526655","US" +"1163526656","1163527023","CA" +"1163527024","1163527039","BV" +"1163527040","1163527059","CA" +"1163527060","1163527071","US" +"1163527072","1163527103","CA" +"1163527104","1163527135","US" +"1163527136","1163527903","CA" +"1163527904","1163527935","US" +"1163527936","1163529215","CA" +"1163529216","1163530239","US" +"1163530240","1163530415","CA" +"1163530416","1163530431","US" +"1163530432","1163530599","CA" +"1163530600","1163530623","US" +"1163530624","1163530639","CA" +"1163530640","1163530655","US" +"1163530656","1163530839","CA" +"1163530840","1163530847","RS" +"1163530848","1163530887","CA" +"1163530888","1163530895","US" +"1163530896","1163530903","CA" +"1163530904","1163530935","US" +"1163530936","1163530959","CA" +"1163530960","1163530967","US" +"1163530968","1163533023","CA" +"1163533024","1163533055","US" +"1163533056","1163533439","CA" +"1163533440","1163533503","US" +"1163533504","1163533551","CA" +"1163533552","1163533567","PA" +"1163533568","1163533695","CA" +"1163533696","1163533727","US" +"1163533728","1163533759","CA" +"1163533760","1163533791","AU" +"1163533792","1163533807","US" +"1163533808","1163533951","CA" +"1163533952","1163534015","US" +"1163534016","1163534031","CA" +"1163534032","1163534047","US" +"1163534048","1163534063","CA" +"1163534064","1163534071","US" +"1163534072","1163534079","MX" +"1163534080","1163534143","US" +"1163534144","1163534175","CA" +"1163534176","1163534255","US" +"1163534256","1163534311","CA" +"1163534312","1163534319","US" +"1163534320","1163534327","CA" +"1163534328","1163535359","US" +"1163535360","1163535615","CA" +"1163535616","1163535743","US" +"1163535744","1163535839","CA" +"1163535840","1163535871","US" +"1163535872","1163536383","CA" +"1163536384","1163537071","US" +"1163537072","1163537079","CA" +"1163537080","1163537663","US" +"1163537664","1163540479","CA" +"1163540480","1163540511","US" +"1163540512","1163540607","CA" +"1163540608","1163540735","US" +"1163540736","1163541503","CA" +"1163541504","1163542015","US" +"1163542016","1163542847","CA" +"1163542848","1163542855","US" +"1163542856","1163542919","CA" +"1163542920","1163542927","US" +"1163542928","1163543687","CA" +"1163543688","1163543695","FI" +"1163543696","1163543823","CA" +"1163543824","1163543847","US" +"1163543848","1163543983","CA" +"1163543984","1163543991","US" +"1163543992","1163544319","CA" +"1163544320","1163544327","US" +"1163544328","1163544335","GB" +"1163544336","1163544383","CA" +"1163544384","1163544423","US" +"1163544424","1163544575","CA" +"1163544576","1163544607","US" +"1163544608","1163544751","CA" +"1163544752","1163544759","SG" +"1163544760","1163544767","CA" +"1163544768","1163544799","US" +"1163544800","1163545087","CA" +"1163545088","1163545215","US" +"1163545216","1163545295","CA" +"1163545296","1163545303","US" +"1163545304","1163545311","CA" +"1163545312","1163545343","BV" +"1163545344","1163545351","US" +"1163545352","1163545359","CA" +"1163545360","1163545407","US" +"1163545408","1163545471","CA" +"1163545472","1163545599","US" +"1163545600","1163545631","CA" +"1163545632","1163545663","GB" +"1163545664","1163545695","CA" +"1163545696","1163545727","US" +"1163545728","1163545903","CA" +"1163545904","1163545911","US" +"1163545912","1163545983","CA" +"1163545984","1163546015","US" +"1163546016","1163546039","CA" +"1163546040","1163546047","NZ" +"1163546048","1163546119","CA" +"1163546120","1163546127","US" +"1163546128","1163546135","CA" +"1163546136","1163546143","US" +"1163546144","1163546199","CA" +"1163546200","1163546207","US" +"1163546208","1163546399","CA" +"1163546400","1163546423","US" +"1163546424","1163546447","CA" +"1163546448","1163546455","US" +"1163546456","1163546527","CA" +"1163546528","1163546535","US" +"1163546536","1163546551","CA" +"1163546552","1163546559","US" +"1163546560","1163547455","CA" +"1163547456","1163547463","US" +"1163547464","1163547487","CA" +"1163547488","1163547519","US" +"1163547520","1163547535","CA" +"1163547536","1163547539","US" +"1163547540","1163547567","CA" +"1163547568","1163547583","VG" +"1163547584","1163547951","CA" +"1163547952","1163547983","US" +"1163547984","1163550239","CA" +"1163550240","1163550255","US" +"1163550256","1163550335","CA" +"1163550336","1163550351","US" +"1163550352","1163550367","CA" +"1163550368","1163550375","US" +"1163550376","1163550383","CA" +"1163550384","1163550399","US" +"1163550400","1163550783","CA" +"1163550784","1163550815","US" +"1163550816","1163551071","CA" +"1163551072","1163551087","US" +"1163551088","1163551423","CA" +"1163551424","1163551439","US" +"1163551440","1163551623","CA" +"1163551624","1163551631","CN" +"1163551632","1163551663","CA" +"1163551664","1163551679","US" +"1163551680","1163551727","CA" +"1163551728","1163551743","US" +"1163551744","1163552383","CA" +"1163552384","1163552519","US" +"1163552520","1163552527","CA" +"1163552528","1163552535","US" +"1163552536","1163552575","CA" +"1163552576","1163552607","PA" +"1163552608","1163552679","CA" +"1163552680","1163552687","US" +"1163552688","1163552695","CA" +"1163552696","1163552703","US" +"1163552704","1163553855","CA" +"1163553856","1163553871","US" +"1163553872","1163553919","CA" +"1163553920","1163553935","BV" +"1163553936","1163553951","US" +"1163553952","1163554559","CA" +"1163554560","1163554591","US" +"1163554592","1163554639","CA" +"1163554640","1163554647","US" +"1163554648","1163554655","MX" +"1163554656","1163554703","CA" +"1163554704","1163554751","US" +"1163554752","1163555839","CA" +"1163555840","1163556095","US" +"1163556096","1163556607","CA" +"1163556608","1163557727","US" +"1163557728","1163557759","CA" +"1163557760","1163558015","US" +"1163558016","1163558028","KW" +"1163558029","1163560191","US" +"1163560192","1163560447","CA" +"1163560448","1163560959","US" +"1163560960","1163562063","CA" +"1163562064","1163562079","US" +"1163562080","1163562199","CA" +"1163562200","1163562207","US" +"1163562208","1163562231","CA" +"1163562232","1163562239","US" +"1163562240","1163563007","CA" +"1163563008","1163564031","US" +"1163564032","1163565055","CA" +"1163565056","1163566047","US" +"1163566048","1163566079","CA" +"1163566080","1163567103","US" +"1163567104","1163568127","CA" +"1163568128","1163570431","US" +"1163570432","1163570495","CA" +"1163570496","1163571199","US" +"1163571200","1163571983","CA" +"1163571984","1163571999","US" +"1163572000","1163572175","CA" +"1163572176","1163572183","US" +"1163572184","1163572687","CA" +"1163572688","1163572703","US" +"1163572704","1163573071","CA" +"1163573072","1163573087","US" +"1163573088","1163573199","CA" +"1163573200","1163573215","US" +"1163573216","1163573263","CA" +"1163573264","1163573439","US" +"1163573440","1163573503","IN" +"1163573504","1163575295","US" +"1163575296","1163576703","CA" +"1163576704","1163576799","US" +"1163576800","1163576959","CA" +"1163576960","1163576991","US" +"1163576992","1163577327","CA" +"1163577328","1163577375","US" +"1163577376","1163577407","CA" +"1163577408","1163577423","US" +"1163577424","1163577439","CA" +"1163577440","1163577471","US" +"1163577472","1163577503","CA" +"1163577504","1163577863","US" +"1163577864","1163577919","CA" +"1163577920","1163577951","US" +"1163577952","1163578175","CA" +"1163578176","1163578191","US" +"1163578192","1163578239","CA" +"1163578240","1163578255","US" +"1163578256","1163578271","CA" +"1163578272","1163578287","US" +"1163578288","1163578711","CA" +"1163578712","1163578715","US" +"1163578716","1163579119","CA" +"1163579120","1163579127","US" +"1163579128","1163579391","CA" +"1163579392","1163579519","US" +"1163579520","1163579647","CA" +"1163579648","1163579871","US" +"1163579872","1163579903","CA" +"1163579904","1163580159","NL" +"1163580160","1163580927","US" +"1163580928","1163581183","CA" +"1163581184","1163581439","US" +"1163581440","1163581503","CA" +"1163581504","1163581567","US" +"1163581568","1163581583","CA" +"1163581584","1163581615","US" +"1163581616","1163581631","CA" +"1163581632","1163581695","US" +"1163581696","1163581983","CA" +"1163581984","1163582015","US" +"1163582016","1163582111","CA" +"1163582112","1163582127","US" +"1163582128","1163582159","CA" +"1163582160","1163582167","FI" +"1163582168","1163582183","CA" +"1163582184","1163582191","US" +"1163582192","1163583487","CA" +"1163583488","1163585199","US" +"1163585200","1163585215","CA" +"1163585216","1163585855","US" +"1163585856","1163585871","CA" +"1163585872","1163585889","US" +"1163585890","1163585905","GB" +"1163585906","1163586740","US" +"1163586741","1163586743","CA" +"1163586744","1163586744","NL" +"1163586745","1163586745","GB" +"1163586746","1163587583","US" +"1163587584","1163588095","CA" +"1163588096","1163588111","US" +"1163588112","1163588159","CA" +"1163588160","1163588199","US" +"1163588200","1163588207","DM" +"1163588208","1163588215","CA" +"1163588216","1163588223","US" +"1163588224","1163588607","CA" +"1163588608","1163588608","US" +"1163588609","1163588695","CA" +"1163588696","1163588703","US" +"1163588704","1163588727","CA" +"1163588728","1163588799","US" +"1163588800","1163588815","CA" +"1163588816","1163588831","US" +"1163588832","1163588847","CA" +"1163588848","1163588863","US" +"1163588864","1163589631","CA" +"1163589632","1163759071","US" +"1163759072","1163759087","AE" +"1163759088","1163870575","US" +"1163870576","1163870583","CN" +"1163870584","1163876471","US" +"1163876472","1163876479","PA" +"1163876480","1163878399","US" +"1163878400","1163878407","CN" +"1163878408","1167319111","US" +"1167319112","1167319119","ZA" +"1167319120","1167319255","US" +"1167319256","1167319263","CA" +"1167319264","1167319359","US" +"1167319360","1167319367","CA" +"1167319368","1167320071","US" +"1167320072","1167320079","CA" +"1167320080","1167321447","US" +"1167321448","1167321455","CA" +"1167321456","1167321959","US" +"1167321960","1167321967","GB" +"1167321968","1167322255","US" +"1167322256","1167322263","CA" +"1167322264","1167322695","US" +"1167322696","1167322703","IN" +"1167322704","1167323543","US" +"1167323544","1167323551","CA" +"1167323552","1167323823","US" +"1167323824","1167323831","IN" +"1167323832","1167324047","US" +"1167324048","1167324055","CA" +"1167324056","1167324287","US" +"1167324288","1167324295","GB" +"1167324296","1167324311","US" +"1167324312","1167324319","CA" +"1167324320","1167325727","US" +"1167325728","1167325735","CA" +"1167325736","1167325935","US" +"1167325936","1167325951","CA" +"1167325952","1167326231","US" +"1167326232","1167326239","CA" +"1167326240","1167326271","IN" +"1167326272","1167326303","US" +"1167326304","1167326335","IN" +"1167326336","1167326367","SI" +"1167326368","1167326399","US" +"1167326400","1167326431","IN" +"1167326432","1167326439","US" +"1167326440","1167326447","IN" +"1167326448","1167326983","US" +"1167326984","1167326991","IN" +"1167326992","1167327111","US" +"1167327112","1167327119","IN" +"1167327120","1167327207","US" +"1167327208","1167327215","IN" +"1167327216","1167693199","US" +"1167693200","1167693215","UA" +"1167693216","1167851519","US" +"1167851520","1168113663","CA" +"1168113664","1168138239","US" +"1168138240","1168146431","JM" +"1168146432","1168178687","US" +"1168178688","1168178943","A1" +"1168178944","1168211967","US" +"1168211968","1168220159","CA" +"1168220160","1168318719","US" +"1168318720","1168318975","CA" +"1168318976","1168321535","US" +"1168321536","1168321791","CA" +"1168321792","1168393215","US" +"1168393216","1168394271","CA" +"1168394272","1168394279","US" +"1168394280","1168394375","CA" +"1168394376","1168394383","US" +"1168394384","1168394423","CA" +"1168394424","1168394431","US" +"1168394432","1168394471","CA" +"1168394472","1168394479","US" +"1168394480","1168394495","CA" +"1168394496","1168394511","US" +"1168394512","1168394751","CA" +"1168394752","1168420863","US" +"1168420864","1168424959","CA" +"1168424960","1168454655","US" +"1168454656","1168455167","A1" +"1168455168","1168474111","US" +"1168474112","1168506879","CA" +"1168508928","1168510975","US" +"1168510976","1168515071","CA" +"1168515072","1168535551","US" +"1168535552","1168539647","CA" +"1168539648","1168621268","US" +"1168621269","1168621270","IN" +"1168621271","1168670719","US" +"1168670720","1168687103","CA" +"1168687104","1168859135","US" +"1168859136","1168863231","CA" +"1168863232","1168867327","US" +"1168867328","1168875519","CA" +"1168875520","1168887807","US" +"1168887808","1168891903","CA" +"1168891904","1168916479","US" +"1168916480","1168932863","CA" +"1168932864","1168935807","US" +"1168935808","1168935935","RU" +"1168935936","1168936959","US" +"1168936960","1168949247","CA" +"1168949248","1168949503","US" +"1168949504","1168949759","CA" +"1168949760","1168949823","US" +"1168949824","1168949855","CA" +"1168949856","1168950271","US" +"1168950272","1168951823","CA" +"1168951824","1168952063","US" +"1168952064","1168952095","CA" +"1168952096","1168952319","US" +"1168952320","1168952831","CA" +"1168952832","1168952863","US" +"1168952864","1168952879","CA" +"1168952880","1168952887","US" +"1168952888","1168952895","CA" +"1168952896","1168952959","US" +"1168952960","1168953087","CA" +"1168953088","1168953119","US" +"1168953120","1168953343","CA" +"1168953344","1168954015","US" +"1168954016","1168954047","IN" +"1168954048","1168954075","US" +"1168954076","1168954079","CA" +"1168954080","1168954623","US" +"1168954624","1168954687","IN" +"1168954688","1168955647","US" +"1168955648","1168955903","CA" +"1168955904","1168957439","US" +"1168957440","1168958047","CA" +"1168958048","1168958055","DE" +"1168958056","1168958063","CA" +"1168958064","1168958071","US" +"1168958072","1168958111","CA" +"1168958112","1168958127","US" +"1168958128","1168958191","CA" +"1168958192","1168958207","AU" +"1168958208","1168958211","US" +"1168958212","1168958215","CA" +"1168958216","1168958223","US" +"1168958224","1168958231","SG" +"1168958232","1168958239","US" +"1168958240","1168958423","CA" +"1168958424","1168958463","US" +"1168958464","1168958479","CA" +"1168958480","1168958495","US" +"1168958496","1168958559","IN" +"1168958560","1168960543","US" +"1168960544","1168960591","CA" +"1168960592","1168960607","US" +"1168960608","1168960623","CA" +"1168960624","1168960639","US" +"1168960640","1168960767","CA" +"1168960768","1168960799","US" +"1168960800","1168960831","CA" +"1168960832","1168960863","US" +"1168960864","1168960887","CA" +"1168960888","1168960895","US" +"1168960896","1168961983","CA" +"1168961984","1168961991","US" +"1168961992","1168962023","CA" +"1168962024","1168962303","US" +"1168962304","1168962559","CA" +"1168962560","1168963039","US" +"1168963040","1168963071","ES" +"1168963072","1168965631","CA" +"1168965632","1168973823","US" +"1168973824","1168982015","CA" +"1168982016","1169051903","US" +"1169051904","1169051911","SG" +"1169051912","1169057039","US" +"1169057040","1169057055","BR" +"1169057056","1169057071","US" +"1169057072","1169057079","AR" +"1169057080","1169057087","US" +"1169057088","1169057119","BR" +"1169057120","1169057127","US" +"1169057128","1169057135","BR" +"1169057136","1169057143","US" +"1169057144","1169057151","BR" +"1169057152","1169057215","US" +"1169057216","1169057223","BR" +"1169057224","1169057231","US" +"1169057232","1169057247","BR" +"1169057248","1169057263","US" +"1169057264","1169057279","BR" +"1169057280","1169092639","US" +"1169092640","1169092671","GB" +"1169092672","1169094713","US" +"1169094714","1169094726","CA" +"1169094727","1169094755","US" +"1169094756","1169094763","AU" +"1169094764","1169094771","IN" +"1169094772","1169094925","US" +"1169094926","1169094933","IN" +"1169094934","1169095017","US" +"1169095018","1169095027","IN" +"1169095028","1169182975","US" +"1169182976","1169183487","CA" +"1169183488","1169184767","US" +"1169184768","1169185023","CA" +"1169185024","1169185535","US" +"1169185536","1169186047","CA" +"1169186048","1169186303","SG" +"1169186304","1169203199","US" +"1169203200","1169211391","CA" +"1169211392","1170190335","US" +"1170190336","1170190847","GB" +"1170190848","1170456959","US" +"1170456960","1170456975","CR" +"1170456976","1170456991","US" +"1170456992","1170457007","PR" +"1170457008","1170457599","US" +"1170457600","1170457663","BR" +"1170457664","1170458063","US" +"1170458064","1170458079","DE" +"1170458080","1170461055","US" +"1170461056","1170461695","CO" +"1170461696","1170465791","US" +"1170465792","1170466047","CY" +"1170466048","1170466767","US" +"1170466768","1170466783","MQ" +"1170466784","1170467839","US" +"1170467840","1170468351","DO" +"1170468352","1170469055","US" +"1170469056","1170469071","VG" +"1170469072","1170470911","US" +"1170470912","1170471167","ES" +"1170471168","1170471263","US" +"1170471264","1170471279","CA" +"1170471280","1170471375","US" +"1170471376","1170471391","UY" +"1170471392","1170471903","US" +"1170471904","1170471919","BE" +"1170471920","1170472703","US" +"1170472704","1170472959","VG" +"1170472960","1170481151","CA" +"1170481152","1170489343","US" +"1170489344","1170497535","CA" +"1170497536","1170505727","US" +"1170505728","1170522111","CA" +"1170522112","1170539329","US" +"1170539330","1170539330","CN" +"1170539331","1170539350","US" +"1170539351","1170539352","CN" +"1170539353","1170539460","US" +"1170539461","1170539461","PK" +"1170539462","1170539522","US" +"1170539523","1170539523","AU" +"1170539524","1170539524","CN" +"1170539525","1170539584","US" +"1170539585","1170539585","GB" +"1170539586","1170539586","US" +"1170539587","1170539587","SC" +"1170539588","1170539590","US" +"1170539591","1170539591","CN" +"1170539592","1170539592","AU" +"1170539593","1170539651","US" +"1170539652","1170539652","CN" +"1170539653","1170539653","GB" +"1170539654","1170539712","US" +"1170539713","1170539713","CN" +"1170539714","1170539714","US" +"1170539715","1170539715","PK" +"1170539716","1170539721","US" +"1170539722","1170539722","CN" +"1170539723","1170539723","KH" +"1170539724","1170539776","US" +"1170539777","1170539777","SC" +"1170539778","1170539778","US" +"1170539779","1170539779","SC" +"1170539780","1170539786","US" +"1170539787","1170539787","CN" +"1170539788","1170539842","US" +"1170539843","1170539843","MY" +"1170539844","1170539844","GB" +"1170539845","1170539847","US" +"1170539848","1170539848","CN" +"1170539849","1170539969","US" +"1170539970","1170539970","KH" +"1170539971","1170539975","US" +"1170539976","1170539976","CN" +"1170539977","1170539979","US" +"1170539980","1170539980","CN" +"1170539981","1170540032","US" +"1170540033","1170540033","GB" +"1170540034","1170540038","US" +"1170540039","1170540039","PH" +"1170540040","1170540040","US" +"1170540041","1170540041","CN" +"1170540042","1170540096","US" +"1170540097","1170540097","TR" +"1170540098","1170540165","US" +"1170540166","1170540166","CN" +"1170540167","1170540229","US" +"1170540230","1170540230","CN" +"1170540231","1170540231","US" +"1170540232","1170540232","CN" +"1170540233","1170540288","US" +"1170540289","1170540290","CN" +"1170540291","1170540359","US" +"1170540360","1170540360","CN" +"1170540361","1170540361","CA" +"1170540362","1170540363","CN" +"1170540364","1170540369","US" +"1170540370","1170540370","CN" +"1170540371","1170540371","US" +"1170540372","1170540372","CN" +"1170540373","1170540418","US" +"1170540419","1170540419","CN" +"1170540420","1170540426","US" +"1170540427","1170540427","CN" +"1170540428","1170540428","US" +"1170540429","1170540429","TR" +"1170540430","1170540430","US" +"1170540431","1170540431","CZ" +"1170540432","1170540432","CN" +"1170540433","1170540491","US" +"1170540492","1170540492","TR" +"1170540493","1170540493","US" +"1170540494","1170540494","TR" +"1170540495","1170540496","US" +"1170540497","1170540497","CZ" +"1170540498","1170540503","US" +"1170540504","1170540504","BD" +"1170540505","1170540612","US" +"1170540613","1170540613","AE" +"1170540614","1170540619","US" +"1170540620","1170540620","CN" +"1170540621","1170540621","US" +"1170540622","1170540623","CN" +"1170540624","1170540625","US" +"1170540626","1170540626","CN" +"1170540627","1170540629","US" +"1170540630","1170540631","CN" +"1170540632","1170542847","US" +"1170542848","1170542863","KH" +"1170542864","1170542895","US" +"1170542896","1170542903","CN" +"1170542904","1170542923","US" +"1170542924","1170542927","CN" +"1170542928","1170542943","US" +"1170542944","1170542959","CN" +"1170542960","1170542967","US" +"1170542968","1170543071","CN" +"1170543072","1170543075","TR" +"1170543076","1170543087","US" +"1170543088","1170543103","CN" +"1170543104","1170543135","US" +"1170543136","1170543247","CN" +"1170543248","1170543615","US" +"1170543616","1170543679","CN" +"1170543680","1170543719","US" +"1170543720","1170543743","CN" +"1170543744","1170543759","US" +"1170543760","1170543775","CN" +"1170543776","1170543871","US" +"1170543872","1170543919","CN" +"1170543920","1170543927","BR" +"1170543928","1170544047","CN" +"1170544048","1170544063","US" +"1170544064","1170544191","CN" +"1170544192","1170544255","US" +"1170544256","1170544383","PK" +"1170544384","1170544387","US" +"1170544388","1170544391","BD" +"1170544392","1170544431","US" +"1170544432","1170544439","CN" +"1170544440","1170544543","US" +"1170544544","1170544575","KR" +"1170544576","1170544783","US" +"1170544784","1170544799","CN" +"1170544800","1170544895","US" +"1170544896","1170544959","CN" +"1170544960","1170544991","US" +"1170544992","1170545023","SC" +"1170545024","1170545083","US" +"1170545084","1170545151","CN" +"1170545152","1170545439","US" +"1170545440","1170545471","SC" +"1170545472","1170545595","US" +"1170545596","1170545599","FR" +"1170545600","1170545711","US" +"1170545712","1170545791","CN" +"1170545792","1170545887","US" +"1170545888","1170545983","CN" +"1170545984","1170546015","US" +"1170546016","1170546047","CN" +"1170546048","1170546079","US" +"1170546080","1170546175","CN" +"1170546176","1170546207","US" +"1170546208","1170546239","CN" +"1170546240","1170546263","US" +"1170546264","1170546271","CN" +"1170546272","1170546303","US" +"1170546304","1170546335","CN" +"1170546336","1170546951","US" +"1170546952","1170546955","CN" +"1170546956","1170546963","US" +"1170546964","1170546967","AU" +"1170546968","1170546975","CN" +"1170546976","1170546991","US" +"1170546992","1170547071","CN" +"1170547072","1170547135","US" +"1170547136","1170547215","CN" +"1170547216","1170547327","US" +"1170547328","1170547391","CN" +"1170547392","1170547455","US" +"1170547456","1170547839","CN" +"1170547840","1170547871","US" +"1170547872","1170547967","CN" +"1170547968","1170548291","US" +"1170548292","1170548319","CN" +"1170548320","1170548479","US" +"1170548480","1170548487","CN" +"1170548488","1170548519","US" +"1170548520","1170548527","CN" +"1170548528","1170548575","US" +"1170548576","1170548591","CN" +"1170548592","1170548599","US" +"1170548600","1170548607","CN" +"1170548608","1170548735","US" +"1170548736","1170548799","CN" +"1170548800","1170548815","US" +"1170548816","1170548879","CN" +"1170548880","1170548887","US" +"1170548888","1170548927","CN" +"1170548928","1170549247","US" +"1170549248","1170549279","CN" +"1170549280","1170549343","US" +"1170549344","1170549359","CN" +"1170549360","1170549363","US" +"1170549364","1170549371","CN" +"1170549372","1170549503","US" +"1170549504","1170549535","KR" +"1170549536","1170549823","US" +"1170549824","1170549887","CN" +"1170549888","1170550015","US" +"1170550016","1170550143","CN" +"1170550144","1170550271","US" +"1170550272","1170550543","CN" +"1170550544","1170550551","US" +"1170550552","1170550559","CN" +"1170550560","1170550567","US" +"1170550568","1170550575","CN" +"1170550576","1170550591","US" +"1170550592","1170550623","CN" +"1170550624","1170550687","US" +"1170550688","1170550719","CN" +"1170550720","1170550783","US" +"1170550784","1170551039","CN" +"1170551040","1170551295","US" +"1170551296","1170551407","CN" +"1170551408","1170551415","US" +"1170551416","1170551423","CN" +"1170551424","1170551439","US" +"1170551440","1170551463","CN" +"1170551464","1170551487","US" +"1170551488","1170551743","CN" +"1170551744","1170551807","US" +"1170551808","1170552575","KH" +"1170552576","1170552583","CN" +"1170552584","1170552591","US" +"1170552592","1170552599","CN" +"1170552600","1170552655","US" +"1170552656","1170552663","CN" +"1170552664","1170552831","US" +"1170552832","1170552839","MY" +"1170552840","1170552863","CN" +"1170552864","1170553087","US" +"1170553088","1170553151","GB" +"1170553152","1170553215","CN" +"1170553216","1170553231","US" +"1170553232","1170553407","CN" +"1170553408","1170553431","US" +"1170553432","1170553439","CN" +"1170553440","1170553471","US" +"1170553472","1170553535","PK" +"1170553536","1170553615","US" +"1170553616","1170553619","SA" +"1170553620","1170553627","US" +"1170553628","1170553631","CN" +"1170553632","1170553635","US" +"1170553636","1170553643","SA" +"1170553644","1170553647","US" +"1170553648","1170553651","BR" +"1170553652","1170553655","TR" +"1170553656","1170553659","US" +"1170553660","1170553663","GB" +"1170553664","1170553667","SA" +"1170553668","1170553675","US" +"1170553676","1170553679","GB" +"1170553680","1170553687","CN" +"1170553688","1170553691","US" +"1170553692","1170553695","PK" +"1170553696","1170553855","US" +"1170553856","1170553983","MY" +"1170553984","1170554135","CN" +"1170554136","1170554151","US" +"1170554152","1170554159","CN" +"1170554160","1170554191","US" +"1170554192","1170554199","CN" +"1170554200","1170554367","US" +"1170554368","1170554479","CN" +"1170554480","1170554483","US" +"1170554484","1170554487","BD" +"1170554488","1170554559","CN" +"1170554560","1170554663","US" +"1170554664","1170554671","CN" +"1170554672","1170554675","US" +"1170554676","1170554679","CZ" +"1170554680","1170554683","US" +"1170554684","1170554687","TR" +"1170554688","1170554711","US" +"1170554712","1170554715","PK" +"1170554716","1170573375","US" +"1170573376","1170573391","RU" +"1170573392","1170573392","US" +"1170573393","1170573393","RU" +"1170573394","1170573394","US" +"1170573395","1170573439","RU" +"1170573440","1170585047","US" +"1170585048","1170585055","RU" +"1170585056","1175977983","US" +"1175977984","1176068167","CA" +"1176068168","1176068175","US" +"1176068176","1176068191","CA" +"1176068192","1176068207","US" +"1176068208","1176069007","CA" +"1176069008","1176069023","US" +"1176069024","1176101023","CA" +"1176101024","1176101039","US" +"1176101040","1176108551","CA" +"1176108552","1176108559","US" +"1176108560","1176502271","CA" +"1176502272","1176511831","US" +"1176511832","1176511839","CA" +"1176511840","1176512175","US" +"1176512176","1176512183","CA" +"1176512184","1176512703","US" +"1176512704","1176512711","ZA" +"1176512712","1176513479","US" +"1176513480","1176513487","CA" +"1176513488","1176513879","US" +"1176513880","1176513887","GB" +"1176513888","1176514271","US" +"1176514272","1176514303","IN" +"1176514304","1176609535","US" +"1176609536","1176609583","CA" +"1176609584","1176609599","US" +"1176609600","1176609615","CA" +"1176609616","1176609631","US" +"1176609632","1176609663","CA" +"1176609664","1176613927","US" +"1176613928","1176613935","CA" +"1176613936","1176616959","US" +"1176616960","1176620047","CA" +"1176620048","1176620055","US" +"1176620056","1176620095","CA" +"1176620096","1176620127","US" +"1176620128","1176620175","CA" +"1176620176","1176620183","US" +"1176620184","1176620223","CA" +"1176620224","1176620255","US" +"1176620256","1176620287","CA" +"1176620288","1176620319","US" +"1176620320","1176620487","CA" +"1176620488","1176620511","US" +"1176620512","1176620743","CA" +"1176620744","1176620783","US" +"1176620784","1176620863","CA" +"1176620864","1176620879","US" +"1176620880","1176620911","CA" +"1176620912","1176620927","US" +"1176620928","1176620967","CA" +"1176620968","1176620975","US" +"1176620976","1176620991","CA" +"1176620992","1176620999","US" +"1176621000","1176621599","CA" +"1176621600","1176621631","US" +"1176621632","1176621695","CA" +"1176621696","1176621727","US" +"1176621728","1176621759","CA" +"1176621760","1176621823","US" +"1176621824","1176621863","CA" +"1176621864","1176621887","US" +"1176621888","1176622047","CA" +"1176622048","1176622079","US" +"1176622080","1176622335","GB" +"1176622336","1176622431","CA" +"1176622432","1176622455","US" +"1176622456","1176622559","CA" +"1176622560","1176622591","US" +"1176622592","1176623567","CA" +"1176623568","1176623583","US" +"1176623584","1176623615","CA" +"1176623616","1176623871","US" +"1176623872","1176629279","CA" +"1176629280","1176629295","US" +"1176629296","1176629303","CA" +"1176629304","1176629311","US" +"1176629312","1176629343","CA" +"1176629344","1176629375","US" +"1176629376","1176629439","GI" +"1176629440","1176629455","CA" +"1176629456","1176629463","GI" +"1176629464","1176629503","US" +"1176629504","1176629519","CA" +"1176629520","1176629535","NZ" +"1176629536","1176629695","CA" +"1176629696","1176629727","US" +"1176629728","1176629759","CA" +"1176629760","1176630271","US" +"1176630272","1176631295","CA" +"1176631296","1176631423","NL" +"1176631424","1176662015","US" +"1176662016","1176666111","CA" +"1176666112","1176702975","US" +"1176702976","1176707071","CA" +"1176707072","1176731647","US" +"1176731648","1176735743","PR" +"1176735744","1176739839","A2" +"1176739840","1176743935","CA" +"1176743936","1176752127","US" +"1176752128","1176756223","CA" +"1176756224","1176764415","US" +"1176764416","1176768511","PM" +"1176768512","1176770751","US" +"1176770752","1176770783","AE" +"1176770784","1176770799","US" +"1176770800","1176770803","KR" +"1176770804","1176770811","US" +"1176770812","1176770815","CA" +"1176770816","1176770831","US" +"1176770832","1176770847","BR" +"1176770848","1176770851","BM" +"1176770852","1176770919","US" +"1176770920","1176770927","BR" +"1176770928","1176770935","DO" +"1176770936","1176771327","US" +"1176771328","1176771583","KR" +"1176771584","1176771895","US" +"1176771896","1176771903","AE" +"1176771904","1176772079","US" +"1176772080","1176772095","DO" +"1176772096","1176776703","US" +"1176776704","1176780799","CA" +"1176780800","1176895487","US" +"1176895488","1176896519","CA" +"1176896520","1176896527","MX" +"1176896528","1176896543","CA" +"1176896544","1176896551","MX" +"1176896552","1176897047","CA" +"1176897048","1176897055","US" +"1176897056","1176899151","CA" +"1176899152","1176899159","KZ" +"1176899160","1176908223","CA" +"1176908224","1176908231","MX" +"1176908232","1176909671","CA" +"1176909672","1176909679","US" +"1176909680","1176917831","CA" +"1176917832","1176917839","AU" +"1176917840","1176925007","CA" +"1176925008","1176925015","NG" +"1176925016","1176928255","CA" +"1176928256","1176997375","US" +"1176997376","1176997407","GB" +"1176997408","1177022975","US" +"1177022976","1177023231","GB" +"1177023232","1177030655","US" +"1177030656","1177033727","AG" +"1177033728","1177053695","US" +"1177053696","1177053951","GB" +"1177053952","1177059327","US" +"1177059328","1177061375","CA" +"1177061376","1177062143","US" +"1177062144","1177075455","CA" +"1177075456","1177164255","US" +"1177164256","1177164263","CA" +"1177164264","1177164415","US" +"1177164416","1177164479","CA" +"1177164480","1177164511","US" +"1177164512","1177164543","CA" +"1177164544","1177164863","US" +"1177164864","1177164895","CA" +"1177164896","1177164927","US" +"1177164928","1177164943","CA" +"1177164944","1177165058","US" +"1177165059","1177165059","A1" +"1177165060","1177165311","US" +"1177165312","1177165823","CA" +"1177165824","1177167743","US" +"1177167744","1177167751","LB" +"1177167752","1177167839","US" +"1177167840","1177167847","IL" +"1177167848","1177168223","US" +"1177168224","1177168231","IE" +"1177168232","1177175199","US" +"1177175200","1177175231","CZ" +"1177175232","1177182527","US" +"1177182528","1177182591","CA" +"1177182592","1177187663","US" +"1177187664","1177187671","GB" +"1177187672","1177210983","US" +"1177210984","1177211007","FR" +"1177211008","1177354239","US" +"1177354240","1177419775","PR" +"1177419776","1177505401","US" +"1177505402","1177505402","BB" +"1177505403","1177550847","US" +"1177550848","1178000911","CA" +"1178000912","1178000919","US" +"1178000920","1178075135","CA" +"1178075136","1178599423","US" +"1178599424","1179910143","CA" +"1179910144","1179924649","US" +"1179924650","1179924650","A1" +"1179924651","1179924659","US" +"1179924660","1179924660","A1" +"1179924661","1180113919","US" +"1180113920","1180114431","AE" +"1180114432","1180124865","US" +"1180124866","1180124866","AE" +"1180124867","1184829439","US" +"1184829440","1184829695","A2" +"1184829696","1184830769","US" +"1184830770","1184830770","A1" +"1184830771","1189672191","US" +"1189672192","1189672249","A1" +"1189672250","1189672251","A2" +"1189672252","1189672447","A1" +"1189672448","1190170111","US" +"1190170112","1190170127","UY" +"1190170128","1190983455","US" +"1190983456","1190983487","UA" +"1190983488","1191673855","US" +"1191673856","1191706623","CA" +"1191706624","1192296447","US" +"1192296448","1192361983","CA" +"1192361984","1192427519","US" +"1192427520","1192460287","CA" +"1192464384","1192468479","US" +"1192468480","1192476671","CA" +"1192476672","1192488959","US" +"1192488960","1192493055","CA" +"1192493056","1199718695","US" +"1199718696","1199718703","A2" +"1199718704","1199722495","US" +"1199722496","1199722503","A2" +"1199722504","1207975935","US" +"1207975936","1207980031","CA" +"1207980032","1208008703","US" +"1208008704","1208016895","CA" +"1208016896","1208020991","US" +"1208020992","1208025087","CA" +"1208025088","1208050943","US" +"1208050944","1208051199","CA" +"1208051200","1208056111","US" +"1208056112","1208056127","CN" +"1208056128","1208074239","US" +"1208074240","1208078527","CA" +"1208078528","1208078591","US" +"1208078592","1208082431","CA" +"1208082432","1208090623","US" +"1208090624","1208107007","CA" +"1208107008","1208122031","US" +"1208122032","1208122047","GB" +"1208122048","1208122063","CA" +"1208122064","1208189951","US" +"1208189952","1208190015","GB" +"1208190016","1208190543","US" +"1208190544","1208190559","GB" +"1208190560","1208190583","US" +"1208190584","1208190591","GB" +"1208190592","1208191047","US" +"1208191048","1208191055","AU" +"1208191056","1208191087","US" +"1208191088","1208191095","NO" +"1208191096","1208191223","US" +"1208191224","1208191231","BG" +"1208191232","1208191311","US" +"1208191312","1208191313","GB" +"1208191314","1208191317","US" +"1208191318","1208191319","GB" +"1208191320","1208191359","US" +"1208191360","1208191367","GB" +"1208191368","1208191391","US" +"1208191392","1208191423","NO" +"1208191424","1208191447","US" +"1208191448","1208191455","IE" +"1208191456","1208191567","US" +"1208191568","1208191575","SG" +"1208191576","1208191647","US" +"1208191648","1208191655","AG" +"1208191656","1208192167","US" +"1208192168","1208192175","BM" +"1208192176","1208192311","US" +"1208192312","1208192319","CA" +"1208192320","1208192359","US" +"1208192360","1208192367","GB" +"1208192368","1208192879","US" +"1208192880","1208192895","MY" +"1208192896","1208192903","US" +"1208192904","1208192911","CA" +"1208192912","1208192959","US" +"1208192960","1208192967","IL" +"1208192968","1208193135","US" +"1208193136","1208193151","MY" +"1208193152","1208193391","US" +"1208193392","1208193407","AU" +"1208193408","1208193455","US" +"1208193456","1208193463","PA" +"1208193464","1208193599","US" +"1208193600","1208193615","CA" +"1208193616","1208193871","US" +"1208193872","1208193879","AU" +"1208193880","1208194045","US" +"1208194046","1208194047","IL" +"1208194048","1208194191","US" +"1208194192","1208194223","MY" +"1208194224","1208194289","US" +"1208194290","1208194291","GB" +"1208194292","1208194511","US" +"1208194512","1208194513","CA" +"1208194514","1208194519","US" +"1208194520","1208194523","AU" +"1208194524","1208195359","US" +"1208195360","1208195375","MY" +"1208195376","1208195391","US" +"1208195392","1208195399","IN" +"1208195400","1208195447","US" +"1208195448","1208195455","GB" +"1208195456","1208195535","US" +"1208195536","1208195551","GB" +"1208195552","1208195703","US" +"1208195704","1208195711","CA" +"1208195712","1208195727","TH" +"1208195728","1208195759","US" +"1208195760","1208195775","BG" +"1208195776","1208195855","US" +"1208195856","1208195871","GB" +"1208195872","1208195887","US" +"1208195888","1208195903","ID" +"1208195904","1208196143","US" +"1208196144","1208196151","AU" +"1208196152","1208196327","US" +"1208196328","1208196335","CA" +"1208196336","1208196607","US" +"1208196608","1208196615","CA" +"1208196616","1208196703","US" +"1208196704","1208196719","CA" +"1208196720","1208196951","US" +"1208196952","1208196959","ZA" +"1208196960","1208197055","US" +"1208197056","1208197057","BR" +"1208197058","1208197135","US" +"1208197136","1208197167","MY" +"1208197168","1208197239","US" +"1208197240","1208197247","CA" +"1208197248","1208197559","US" +"1208197560","1208197567","AU" +"1208197568","1208197579","US" +"1208197580","1208197583","GB" +"1208197584","1208197631","US" +"1208197632","1208197639","AU" +"1208197640","1208197671","US" +"1208197672","1208197679","MX" +"1208197680","1208197967","US" +"1208197968","1208197983","AU" +"1208197984","1208198039","US" +"1208198040","1208198047","BS" +"1208198048","1208198135","US" +"1208198136","1208198143","AU" +"1208198144","1208198159","US" +"1208198160","1208198167","ID" +"1208198168","1208198343","US" +"1208198344","1208198347","GB" +"1208198348","1208198349","CA" +"1208198350","1208198463","US" +"1208198464","1208198471","CA" +"1208198472","1208198559","US" +"1208198560","1208198575","IN" +"1208198576","1208198743","US" +"1208198744","1208198751","GB" +"1208198752","1208199055","US" +"1208199056","1208199063","AU" +"1208199064","1208199087","US" +"1208199088","1208199103","MY" +"1208199104","1208199127","US" +"1208199128","1208199129","IE" +"1208199130","1208199215","US" +"1208199216","1208199223","AU" +"1208199224","1208199343","US" +"1208199344","1208199351","CR" +"1208199352","1208199359","MY" +"1208199360","1208199637","US" +"1208199638","1208199639","NG" +"1208199640","1208199767","US" +"1208199768","1208199775","MX" +"1208199776","1208199783","MY" +"1208199784","1208200167","US" +"1208200168","1208200175","CA" +"1208200176","1208200247","US" +"1208200248","1208200255","MC" +"1208200256","1208200271","US" +"1208200272","1208200287","BD" +"1208200288","1208200303","US" +"1208200304","1208200319","AU" +"1208200320","1208200639","US" +"1208200640","1208200647","FR" +"1208200648","1208200655","US" +"1208200656","1208200663","BS" +"1208200664","1208200815","US" +"1208200816","1208200887","BS" +"1208200888","1208200959","US" +"1208200960","1208200963","ID" +"1208200964","1208201063","US" +"1208201064","1208201071","IN" +"1208201072","1208201535","US" +"1208201536","1208201543","GB" +"1208201544","1208201631","US" +"1208201632","1208201639","CA" +"1208201640","1208201727","US" +"1208201728","1208201743","MY" +"1208201744","1208201951","US" +"1208201952","1208201959","MY" +"1208201960","1208202007","US" +"1208202008","1208202015","CA" +"1208202016","1208202031","US" +"1208202032","1208202039","GB" +"1208202040","1208202135","US" +"1208202136","1208202143","MY" +"1208202144","1208202255","US" +"1208202256","1208202287","MY" +"1208202288","1208202495","US" +"1208202496","1208202511","GB" +"1208202512","1208202519","AU" +"1208202520","1208202559","US" +"1208202560","1208202575","JP" +"1208202576","1208202731","US" +"1208202732","1208202733","CA" +"1208202734","1208203023","US" +"1208203024","1208203071","MY" +"1208203072","1208203255","US" +"1208203256","1208203257","RO" +"1208203258","1208203343","US" +"1208203344","1208203351","AU" +"1208203352","1208204007","US" +"1208204008","1208204015","NL" +"1208204016","1208204031","US" +"1208204032","1208204039","GB" +"1208204040","1208204047","US" +"1208204048","1208204055","JP" +"1208204056","1208204259","US" +"1208204260","1208204263","MX" +"1208204264","1208204775","US" +"1208204776","1208204783","CA" +"1208204784","1208204951","US" +"1208204952","1208204959","MY" +"1208204960","1208205049","US" +"1208205050","1208205053","IL" +"1208205054","1208205063","US" +"1208205064","1208205079","MY" +"1208205080","1208205167","US" +"1208205168","1208205231","MY" +"1208205232","1208205247","US" +"1208205248","1208205263","IN" +"1208205264","1208205303","US" +"1208205304","1208205311","CO" +"1208205312","1208205407","US" +"1208205408","1208205423","MY" +"1208205424","1208205455","US" +"1208205456","1208205463","CA" +"1208205464","1208205523","US" +"1208205524","1208205525","IN" +"1208205526","1208205703","US" +"1208205704","1208205711","CA" +"1208205712","1208205959","US" +"1208205960","1208205967","SG" +"1208205968","1208206041","US" +"1208206042","1208206043","SG" +"1208206044","1208206535","US" +"1208206536","1208206537","IL" +"1208206538","1208206559","US" +"1208206560","1208206561","BH" +"1208206562","1208206783","US" +"1208206784","1208206785","ZA" +"1208206786","1208207095","US" +"1208207096","1208207097","IN" +"1208207098","1208207183","US" +"1208207184","1208207191","AU" +"1208207192","1208207359","US" +"1208207360","1208207391","CA" +"1208207392","1208207463","US" +"1208207464","1208207471","CA" +"1208207472","1208207583","US" +"1208207584","1208207591","AU" +"1208207592","1208207599","US" +"1208207600","1208207607","AU" +"1208207608","1208207623","US" +"1208207624","1208207631","GB" +"1208207632","1208207983","US" +"1208207984","1208207999","NL" +"1208208000","1208208111","US" +"1208208112","1208208127","CA" +"1208208128","1208208215","US" +"1208208216","1208208223","CA" +"1208208224","1208208231","AU" +"1208208232","1208208303","US" +"1208208304","1208208311","KR" +"1208208312","1208208319","US" +"1208208320","1208208321","CA" +"1208208322","1208208799","US" +"1208208800","1208208807","AU" +"1208208808","1208208815","US" +"1208208816","1208208831","CA" +"1208208832","1208208875","US" +"1208208876","1208208877","CH" +"1208208878","1208208879","CA" +"1208208880","1208208927","US" +"1208208928","1208208943","AU" +"1208208944","1208209095","US" +"1208209096","1208209097","IN" +"1208209098","1208209175","US" +"1208209176","1208209183","CA" +"1208209184","1208209215","US" +"1208209216","1208209247","MY" +"1208209248","1208209359","US" +"1208209360","1208209375","MY" +"1208209376","1208209391","US" +"1208209392","1208209407","MY" +"1208209408","1208209719","US" +"1208209720","1208209727","TH" +"1208209728","1208209863","US" +"1208209864","1208209871","GT" +"1208209872","1208209959","US" +"1208209960","1208209967","IN" +"1208209968","1208210063","US" +"1208210064","1208210071","HK" +"1208210072","1208210079","US" +"1208210080","1208210095","GB" +"1208210096","1208210303","US" +"1208210304","1208210351","GB" +"1208210352","1208210431","US" +"1208210432","1208210447","JP" +"1208210448","1208210511","US" +"1208210512","1208210519","CA" +"1208210520","1208210751","US" +"1208210752","1208210759","TR" +"1208210760","1208211239","US" +"1208211240","1208211247","JM" +"1208211248","1208213087","US" +"1208213088","1208213103","NG" +"1208213104","1208213383","US" +"1208213384","1208213391","CA" +"1208213392","1208215351","US" +"1208215352","1208215359","PR" +"1208215360","1208215935","US" +"1208215936","1208215951","GB" +"1208215952","1208216367","US" +"1208216368","1208216375","CA" +"1208216376","1208217447","US" +"1208217448","1208217455","AE" +"1208217456","1208218031","US" +"1208218032","1208218039","HK" +"1208218040","1208218415","US" +"1208218416","1208218423","IN" +"1208218424","1208219159","US" +"1208219160","1208219167","AU" +"1208219168","1208219311","US" +"1208219312","1208219319","JP" +"1208219320","1208220655","US" +"1208220656","1208220663","AU" +"1208220664","1208220671","NZ" +"1208220672","1208220743","US" +"1208220744","1208220751","GB" +"1208220752","1208250367","US" +"1208250368","1208250375","CA" +"1208250376","1208250623","US" +"1208250624","1208250631","NL" +"1208250632","1208250711","US" +"1208250712","1208250719","GB" +"1208250720","1208250735","US" +"1208250736","1208250743","IN" +"1208250744","1208251199","US" +"1208251200","1208251207","CA" +"1208251208","1208251215","US" +"1208251216","1208251223","AU" +"1208251224","1208251415","US" +"1208251416","1208251423","GB" +"1208251424","1208251431","IL" +"1208251432","1208251439","US" +"1208251440","1208251447","ES" +"1208251448","1208251479","US" +"1208251480","1208251487","GB" +"1208251488","1208251495","BB" +"1208251496","1208251631","US" +"1208251632","1208251647","GB" +"1208251648","1208251679","US" +"1208251680","1208251695","GB" +"1208251696","1208251807","US" +"1208251808","1208251823","CA" +"1208251824","1208251871","US" +"1208251872","1208251887","GB" +"1208251888","1208251903","IL" +"1208251904","1208252423","US" +"1208252424","1208252431","CA" +"1208252432","1208252703","US" +"1208252704","1208252735","AU" +"1208252736","1208252927","US" +"1208252928","1208253183","MX" +"1208253184","1208253599","US" +"1208253600","1208253615","IN" +"1208253616","1208301455","US" +"1208301456","1208301471","CA" +"1208301472","1208333567","US" +"1208333568","1208333823","GB" +"1208333824","1208337919","US" +"1208337920","1208338175","A2" +"1208338176","1208516847","US" +"1208516848","1208516851","MY" +"1208516852","1208516998","US" +"1208516999","1208516999","CN" +"1208517000","1208517003","US" +"1208517004","1208517008","CN" +"1208517009","1208517009","US" +"1208517010","1208517010","CN" +"1208517011","1208517011","TR" +"1208517012","1208517013","US" +"1208517014","1208517014","GB" +"1208517015","1208517015","CN" +"1208517016","1208517017","US" +"1208517018","1208517018","GB" +"1208517019","1208517021","US" +"1208517022","1208517022","ES" +"1208517023","1208517023","CA" +"1208517024","1208517024","US" +"1208517025","1208517025","PH" +"1208517026","1208517026","CN" +"1208517027","1208517027","US" +"1208517028","1208517028","CN" +"1208517029","1208517029","US" +"1208517030","1208517030","CN" +"1208517031","1208517119","US" +"1208517120","1208517375","KH" +"1208517376","1208517503","US" +"1208517504","1208517567","CN" +"1208517568","1208517627","US" +"1208517628","1208517631","PK" +"1208517632","1208517887","KH" +"1208517888","1208518015","TR" +"1208518016","1208518079","CN" +"1208518080","1208518143","US" +"1208518144","1208518207","CN" +"1208518208","1208518241","US" +"1208518242","1208518242","CN" +"1208518243","1208518243","US" +"1208518244","1208518244","CN" +"1208518245","1208518246","US" +"1208518247","1208518247","KH" +"1208518248","1208518252","US" +"1208518253","1208518253","CN" +"1208518254","1208518254","KR" +"1208518255","1208518255","US" +"1208518256","1208518256","NL" +"1208518257","1208518257","US" +"1208518258","1208518258","CN" +"1208518259","1208518261","US" +"1208518262","1208518262","TR" +"1208518263","1208518263","CN" +"1208518264","1208518264","GB" +"1208518265","1208518265","CN" +"1208518266","1208518266","US" +"1208518267","1208518267","CN" +"1208518268","1208518268","US" +"1208518269","1208518269","CN" +"1208518270","1208518399","US" +"1208518400","1208519423","CN" +"1208519424","1208519679","US" +"1208519680","1208519935","GB" +"1208519936","1208520031","US" +"1208520032","1208520063","MY" +"1208520064","1208520959","US" +"1208520960","1208521727","CN" +"1208521728","1208521983","US" +"1208521984","1208522239","CN" +"1208522240","1208522271","US" +"1208522272","1208522303","TR" +"1208522304","1208522319","US" +"1208522320","1208522335","TR" +"1208522336","1208523775","US" +"1208523776","1208523903","GB" +"1208523904","1208523975","US" +"1208523976","1208523983","CN" +"1208523984","1208523991","US" +"1208523992","1208523995","TR" +"1208523996","1208524055","US" +"1208524056","1208524059","BD" +"1208524060","1208524091","US" +"1208524092","1208524095","TR" +"1208524096","1208524223","US" +"1208524224","1208524227","SC" +"1208524228","1208524863","US" +"1208524864","1208524927","PK" +"1208524928","1208525055","US" +"1208525056","1208525335","CN" +"1208525336","1208525343","US" +"1208525344","1208525375","TR" +"1208525376","1208525567","US" +"1208525568","1208525823","CN" +"1208525824","1208526591","US" +"1208526592","1208526607","TR" +"1208526608","1208526719","US" +"1208526720","1208526735","BD" +"1208526736","1208526919","US" +"1208526920","1208526927","CN" +"1208526928","1208527679","US" +"1208527680","1208527743","KH" +"1208527744","1208528015","US" +"1208528016","1208528031","SC" +"1208528032","1208528127","US" +"1208528128","1208528383","CN" +"1208528384","1208528447","US" +"1208528448","1208528575","CN" +"1208528576","1208528927","US" +"1208528928","1208528939","CN" +"1208528940","1208528943","PH" +"1208528944","1208528947","US" +"1208528948","1208528951","CN" +"1208528952","1208528955","US" +"1208528956","1208528959","MY" +"1208528960","1208528967","US" +"1208528968","1208528971","CN" +"1208528972","1208529031","US" +"1208529032","1208529035","CN" +"1208529036","1208529043","US" +"1208529044","1208529047","CN" +"1208529048","1208529059","US" +"1208529060","1208529071","CN" +"1208529072","1208529079","US" +"1208529080","1208529083","CN" +"1208529084","1208529159","US" +"1208529160","1208529163","AU" +"1208529164","1208529411","US" +"1208529412","1208529415","CN" +"1208529416","1208529419","IT" +"1208529420","1208529423","US" +"1208529424","1208529427","CN" +"1208529428","1208529431","US" +"1208529432","1208529435","CN" +"1208529436","1208529439","CA" +"1208529440","1208529447","US" +"1208529448","1208529455","CN" +"1208529456","1208529463","US" +"1208529464","1208529467","AE" +"1208529468","1208529475","US" +"1208529476","1208529479","PK" +"1208529480","1208529483","CN" +"1208529484","1208529535","US" +"1208529536","1208529539","MX" +"1208529540","1208529543","BR" +"1208529544","1208529547","MY" +"1208529548","1208529563","US" +"1208529564","1208529567","SA" +"1208529568","1208529587","US" +"1208529588","1208529591","HK" +"1208529592","1208529599","US" +"1208529600","1208529603","CN" +"1208529604","1208529663","US" +"1208529664","1208529667","CN" +"1208529668","1208529679","US" +"1208529680","1208529683","CN" +"1208529684","1208529687","AU" +"1208529688","1208529699","US" +"1208529700","1208529707","CN" +"1208529708","1208529711","LV" +"1208529712","1208529939","US" +"1208529940","1208529943","CN" +"1208529944","1208529951","US" +"1208529952","1208529955","CN" +"1208529956","1208529959","US" +"1208529960","1208529963","CN" +"1208529964","1208529971","US" +"1208529972","1208529987","CN" +"1208529988","1208530063","US" +"1208530064","1208530067","FR" +"1208530068","1208530083","US" +"1208530084","1208530087","CN" +"1208530088","1208530095","US" +"1208530096","1208530099","CN" +"1208530100","1208530103","US" +"1208530104","1208530107","CN" +"1208530108","1208530115","US" +"1208530116","1208530119","CN" +"1208530120","1208531007","US" +"1208531008","1208531071","CN" +"1208531072","1208531111","US" +"1208531112","1208531119","CN" +"1208531120","1208531711","US" +"1208531712","1208531971","CN" +"1208531972","1208531975","US" +"1208531976","1208531979","CN" +"1208531980","1208531995","US" +"1208531996","1208531999","CN" +"1208532000","1208532003","IT" +"1208532004","1208532023","US" +"1208532024","1208532027","CN" +"1208532028","1208532035","US" +"1208532036","1208532047","CN" +"1208532048","1208532051","US" +"1208532052","1208532071","CN" +"1208532072","1208532075","US" +"1208532076","1208532079","CN" +"1208532080","1208532083","LV" +"1208532084","1208532091","US" +"1208532092","1208532095","CA" +"1208532096","1208532287","US" +"1208532288","1208532351","PK" +"1208532352","1208586372","US" +"1208586373","1208586380","ID" +"1208586381","1208586419","US" +"1208586420","1208586427","AE" +"1208586428","1208586447","US" +"1208586448","1208586455","TR" +"1208586456","1208586526","US" +"1208586527","1208586536","TR" +"1208586537","1208586559","US" +"1208586560","1208586567","EG" +"1208586568","1208586573","US" +"1208586574","1208586581","VE" +"1208586582","1208586589","LK" +"1208586590","1208586597","EG" +"1208586598","1208586761","US" +"1208586762","1208586774","GB" +"1208586775","1208586871","US" +"1208586872","1208586879","BS" +"1208586880","1208586919","US" +"1208586920","1208586927","AF" +"1208586928","1208586957","US" +"1208586958","1208586973","GB" +"1208586974","1208586980","US" +"1208586981","1208586988","EG" +"1208586989","1208587025","US" +"1208587026","1208587033","NZ" +"1208587034","1208587045","US" +"1208587046","1208587053","IN" +"1208587054","1208587076","US" +"1208587077","1208587083","LK" +"1208587084","1208587087","US" +"1208587088","1208587095","LK" +"1208587096","1208587169","US" +"1208587170","1208587177","MX" +"1208587178","1208587187","US" +"1208587188","1208587195","EG" +"1208587196","1208587321","US" +"1208587322","1208587329","GB" +"1208587330","1208587333","US" +"1208587334","1208587341","CA" +"1208587342","1208587345","US" +"1208587346","1208587353","GB" +"1208587354","1208587394","US" +"1208587395","1208587402","EG" +"1208587403","1208587418","US" +"1208587419","1208587426","TR" +"1208587427","1208587427","US" +"1208587428","1208587443","GB" +"1208587444","1208587450","US" +"1208587451","1208587458","IN" +"1208587459","1208587479","US" +"1208587480","1208587487","LK" +"1208587488","1208587488","US" +"1208587489","1208587504","GB" +"1208587505","1208587553","US" +"1208587554","1208587561","ID" +"1208587562","1208587609","US" +"1208587610","1208587617","EG" +"1208587618","1208587629","US" +"1208587630","1208587637","MA" +"1208587638","1208587671","US" +"1208587672","1208587679","EG" +"1208587680","1208587705","US" +"1208587706","1208587713","CA" +"1208587714","1208587728","US" +"1208587729","1208587736","CA" +"1208587737","1208587765","US" +"1208587766","1208587773","VE" +"1208587774","1208587944","US" +"1208587945","1208587976","GB" +"1208587977","1208588071","US" +"1208588072","1208588079","RU" +"1208588080","1208588103","US" +"1208588104","1208588111","MA" +"1208588112","1208588185","US" +"1208588186","1208588193","EG" +"1208588194","1208588591","US" +"1208588592","1208588599","IN" +"1208588600","1208588728","US" +"1208588729","1208588760","GB" +"1208588761","1208588771","US" +"1208588772","1208588779","GB" +"1208588780","1208588853","US" +"1208588854","1208588861","IN" +"1208588862","1208588953","US" +"1208588954","1208588961","TR" +"1208588962","1208588972","US" +"1208588973","1208588985","GB" +"1208588986","1208588989","US" +"1208588990","1208589000","GB" +"1208589001","1208589043","US" +"1208589044","1208589051","BH" +"1208589052","1208589073","US" +"1208589074","1208589081","CA" +"1208589082","1208589111","US" +"1208589112","1208589119","VE" +"1208589120","1208589299","US" +"1208589300","1208589307","LK" +"1208589308","1208589341","US" +"1208589342","1208589349","ID" +"1208589350","1208589383","US" +"1208589384","1208589391","BH" +"1208589392","1208589449","US" +"1208589450","1208589457","EG" +"1208589458","1208589577","US" +"1208589578","1208589585","GB" +"1208589586","1208589609","US" +"1208589610","1208589617","EG" +"1208589618","1208589639","US" +"1208589640","1208589651","TR" +"1208589652","1208589737","US" +"1208589738","1208589745","EG" +"1208589746","1208589857","US" +"1208589858","1208589865","MA" +"1208589866","1208589901","US" +"1208589902","1208589925","EG" +"1208589926","1208589959","US" +"1208589960","1208589967","IR" +"1208589968","1208590031","US" +"1208590032","1208590055","EG" +"1208590056","1208590091","US" +"1208590092","1208590108","GB" +"1208590109","1208590115","US" +"1208590116","1208590123","EG" +"1208590124","1208590170","US" +"1208590171","1208590178","GB" +"1208590179","1208590335","US" +"1208590336","1208598527","CA" +"1208598528","1208647679","US" +"1208647680","1208656319","CA" +"1208656320","1208656351","US" +"1208656352","1208656511","CA" +"1208656512","1208656543","US" +"1208656544","1208656575","CA" +"1208656576","1208656583","DO" +"1208656584","1208656591","PA" +"1208656592","1208656639","CA" +"1208656640","1208656703","MY" +"1208656704","1208656767","CA" +"1208656768","1208656895","MY" +"1208656896","1208656903","CA" +"1208656904","1208656911","LB" +"1208656912","1208657087","CA" +"1208657088","1208657103","MA" +"1208657104","1208657139","CA" +"1208657140","1208657143","SE" +"1208657144","1208657415","CA" +"1208657416","1208657423","CH" +"1208657424","1208657519","CA" +"1208657520","1208657527","MA" +"1208657528","1208657531","PA" +"1208657532","1208657535","CA" +"1208657536","1208657543","SE" +"1208657544","1208657551","CA" +"1208657552","1208657559","PH" +"1208657560","1208657775","CA" +"1208657776","1208657783","PA" +"1208657784","1208657855","CA" +"1208657856","1208657871","PA" +"1208657872","1208657919","CA" +"1208657920","1208657975","MA" +"1208657976","1208657983","CA" +"1208657984","1208657991","CN" +"1208657992","1208658015","MA" +"1208658016","1208658031","CA" +"1208658032","1208658039","MA" +"1208658040","1208658103","CA" +"1208658104","1208658111","FR" +"1208658112","1208658127","CA" +"1208658128","1208658143","MA" +"1208658144","1208658159","CA" +"1208658160","1208658167","MA" +"1208658168","1208658175","CA" +"1208658176","1208658199","MA" +"1208658200","1208658223","CA" +"1208658224","1208658239","MA" +"1208658240","1208658271","CA" +"1208658272","1208658279","IL" +"1208658280","1208658303","CA" +"1208658304","1208658335","US" +"1208658336","1208659135","CA" +"1208659136","1208659151","CN" +"1208659152","1208659327","CA" +"1208659328","1208659359","US" +"1208659360","1208659391","CA" +"1208659392","1208659399","CN" +"1208659400","1208659423","CA" +"1208659424","1208659455","US" +"1208659456","1208659519","PK" +"1208659520","1208659551","US" +"1208659552","1208659647","CA" +"1208659648","1208659711","ID" +"1208659712","1208659743","CA" +"1208659744","1208659775","ID" +"1208659776","1208659831","CA" +"1208659832","1208659839","ID" +"1208659840","1208659903","PK" +"1208659904","1208659967","CA" +"1208659968","1208721407","US" +"1208721408","1208729599","CA" +"1208729600","1208770559","US" +"1208770560","1208774655","CA" +"1208774656","1208778751","US" +"1208778752","1208795135","CA" +"1208795136","1208832391","US" +"1208832392","1208832407","CN" +"1208832408","1208832455","US" +"1208832456","1208832463","CN" +"1208832464","1208832567","US" +"1208832568","1208832575","CN" +"1208832576","1208832583","US" +"1208832584","1208832591","CN" +"1208832592","1208832599","US" +"1208832600","1208832607","CN" +"1208832608","1208832623","IT" +"1208832624","1208832631","NZ" +"1208832632","1208832639","CN" +"1208832640","1208832711","US" +"1208832712","1208832719","CN" +"1208832720","1208832775","US" +"1208832776","1208832783","CA" +"1208832784","1208833023","US" +"1208833024","1208833031","PR" +"1208833032","1208834415","US" +"1208834416","1208834423","TK" +"1208834424","1208834967","US" +"1208834968","1208834975","ID" +"1208834976","1208834991","US" +"1208834992","1208834999","NP" +"1208835000","1208835007","CA" +"1208835008","1208852479","US" +"1208852480","1208860671","CA" +"1208860672","1208918015","US" +"1208918016","1208920007","CA" +"1208920008","1208920015","US" +"1208920016","1208922111","CA" +"1208922112","1208926463","US" +"1208926464","1208926719","EU" +"1208926720","1208928767","US" +"1208928768","1208929023","TW" +"1208929024","1208935935","US" +"1208935936","1208935943","AU" +"1208935944","1208935951","IN" +"1208935952","1208935959","SG" +"1208935960","1208935967","HK" +"1208935968","1208935975","KR" +"1208935976","1208935983","TW" +"1208935984","1208935991","IN" +"1208935992","1208935999","JP" +"1208936000","1208936191","US" +"1208936192","1208936199","AU" +"1208936200","1208936207","SG" +"1208936208","1208936215","HK" +"1208936216","1208936223","IN" +"1208936224","1208936231","KR" +"1208936232","1208936239","TW" +"1208936240","1208936247","JP" +"1208936248","1208936255","IN" +"1208936256","1208936263","MY" +"1208936264","1208954879","US" +"1208954880","1208958975","CA" +"1208958976","1208975359","US" +"1208975360","1208980191","CA" +"1208980192","1208980223","US" +"1208980224","1208980503","CA" +"1208980504","1208980511","US" +"1208980512","1208983551","CA" +"1208983552","1208991775","US" +"1208991776","1208991791","GB" +"1208991792","1209002351","US" +"1209002352","1209002367","A2" +"1209002368","1209002495","US" +"1209002496","1209002687","A2" +"1209002688","1209003007","US" +"1209003008","1209004031","A2" +"1209004032","1209004863","US" +"1209004864","1209004927","GB" +"1209004928","1209189379","US" +"1209189380","1209189395","MX" +"1209189396","1209190147","US" +"1209190148","1209190163","MX" +"1209190164","1209190167","US" +"1209190168","1209190195","GR" +"1209190196","1209190851","US" +"1209190852","1209190883","CA" +"1209190884","1209190911","US" +"1209190912","1209191167","MX" +"1209191168","1209270547","US" +"1209270548","1209270551","ID" +"1209270552","1209270603","US" +"1209270604","1209270607","CN" +"1209270608","1209270779","US" +"1209270780","1209270787","CN" +"1209270788","1209271035","US" +"1209271036","1209271039","BD" +"1209271040","1209271083","US" +"1209271084","1209271087","BR" +"1209271088","1209271097","US" +"1209271098","1209271098","A1" +"1209271099","1209271127","US" +"1209271128","1209271131","SA" +"1209271132","1209271191","US" +"1209271192","1209271195","RO" +"1209271196","1209271207","US" +"1209271208","1209271211","SC" +"1209271212","1209271215","US" +"1209271216","1209271219","IN" +"1209271220","1209271367","US" +"1209271368","1209271371","TR" +"1209271372","1209271375","CN" +"1209271376","1209271435","US" +"1209271436","1209271439","CN" +"1209271440","1209271451","US" +"1209271452","1209271455","CN" +"1209271456","1209271463","US" +"1209271464","1209271467","PK" +"1209271468","1209271483","US" +"1209271484","1209271487","VN" +"1209271488","1209271491","CN" +"1209271492","1209271495","US" +"1209271496","1209271499","CA" +"1209271500","1209271511","US" +"1209271512","1209271515","CN" +"1209271516","1209271519","US" +"1209271520","1209271523","CN" +"1209271524","1209271527","KH" +"1209271528","1209271547","US" +"1209271548","1209271551","CN" +"1209271552","1209271575","US" +"1209271576","1209271579","CN" +"1209271580","1209271583","BD" +"1209271584","1209271607","US" +"1209271608","1209271611","KH" +"1209271612","1209271615","CA" +"1209271616","1209271635","US" +"1209271636","1209271643","CN" +"1209271644","1209271647","GB" +"1209271648","1209271651","US" +"1209271652","1209271655","DE" +"1209271656","1209271663","US" +"1209271664","1209271667","CN" +"1209271668","1209271695","US" +"1209271696","1209271699","SC" +"1209271700","1209271703","US" +"1209271704","1209271707","CN" +"1209271708","1209271719","US" +"1209271720","1209271723","CN" +"1209271724","1209271727","US" +"1209271728","1209271735","CN" +"1209271736","1209271739","US" +"1209271740","1209271747","GB" +"1209271748","1209271767","US" +"1209271768","1209271771","RO" +"1209271772","1209271775","US" +"1209271776","1209271779","CN" +"1209271780","1209271783","US" +"1209271784","1209271787","RO" +"1209271788","1209271795","US" +"1209271796","1209271799","ZA" +"1209271800","1209271803","US" +"1209271804","1209271807","GB" +"1209271808","1209271827","US" +"1209271828","1209271831","KH" +"1209271832","1209271835","CN" +"1209271836","1209271847","US" +"1209271848","1209271855","IN" +"1209271856","1209271859","US" +"1209271860","1209271863","CN" +"1209271864","1209271867","US" +"1209271868","1209271887","CN" +"1209271888","1209271891","US" +"1209271892","1209271895","CN" +"1209271896","1209271911","US" +"1209271912","1209271915","ID" +"1209271916","1209271923","US" +"1209271924","1209271927","CA" +"1209271928","1209271935","US" +"1209271936","1209271939","BD" +"1209271940","1209272079","US" +"1209272080","1209272095","CN" +"1209272096","1209272159","US" +"1209272160","1209272175","IT" +"1209272176","1209272191","BR" +"1209272192","1209272239","US" +"1209272240","1209272287","CN" +"1209272288","1209272407","US" +"1209272408","1209272415","PE" +"1209272416","1209272447","DE" +"1209272448","1209272479","KH" +"1209272480","1209272495","LV" +"1209272496","1209272583","US" +"1209272584","1209272591","PH" +"1209272592","1209272599","GB" +"1209272600","1209272607","BD" +"1209272608","1209272623","SC" +"1209272624","1209272735","US" +"1209272736","1209272767","CN" +"1209272768","1209272783","US" +"1209272784","1209272799","CN" +"1209272800","1209272839","US" +"1209272840","1209272847","CN" +"1209272848","1209272863","US" +"1209272864","1209272895","MY" +"1209272896","1209272959","CN" +"1209272960","1209273023","BR" +"1209273024","1209273055","US" +"1209273056","1209273071","TR" +"1209273072","1209273079","US" +"1209273080","1209273083","SC" +"1209273084","1209273119","US" +"1209273120","1209273135","BR" +"1209273136","1209273151","TR" +"1209273152","1209273207","US" +"1209273208","1209273215","CA" +"1209273216","1209273279","US" +"1209273280","1209273311","BR" +"1209273312","1209273351","US" +"1209273352","1209273359","CA" +"1209273360","1209273375","US" +"1209273376","1209273407","TR" +"1209273408","1209273471","CZ" +"1209273472","1209273487","US" +"1209273488","1209273519","CN" +"1209273520","1209273535","US" +"1209273536","1209273551","VN" +"1209273552","1209273559","US" +"1209273560","1209273563","AE" +"1209273564","1209273647","US" +"1209273648","1209273655","CN" +"1209273656","1209273663","US" +"1209273664","1209273671","BD" +"1209273672","1209273675","US" +"1209273676","1209273679","GB" +"1209273680","1209273991","US" +"1209273992","1209273999","SC" +"1209274000","1209274023","US" +"1209274024","1209274031","SA" +"1209274032","1209274039","CZ" +"1209274040","1209274115","US" +"1209274116","1209274119","ZA" +"1209274120","1209274175","US" +"1209274176","1209274239","SC" +"1209274240","1209274591","US" +"1209274592","1209274607","CN" +"1209274608","1209274623","SC" +"1209274624","1209274751","CN" +"1209274752","1209274879","US" +"1209274880","1209274911","CN" +"1209274912","1209274935","US" +"1209274936","1209274943","PH" +"1209274944","1209274959","US" +"1209274960","1209274967","PH" +"1209274968","1209274975","US" +"1209274976","1209274991","BD" +"1209274992","1209275039","US" +"1209275040","1209275071","BD" +"1209275072","1209275135","GB" +"1209275136","1209275647","US" +"1209275648","1209275679","SC" +"1209275680","1209275695","TR" +"1209275696","1209275791","US" +"1209275792","1209275799","TR" +"1209275800","1209275807","US" +"1209275808","1209275823","ID" +"1209275824","1209275847","US" +"1209275848","1209275855","AE" +"1209275856","1209275859","CN" +"1209275860","1209275863","US" +"1209275864","1209275871","SC" +"1209275872","1209275904","US" +"1209275905","1209275905","MY" +"1209275906","1209275906","US" +"1209275907","1209275908","KH" +"1209275909","1209275909","CN" +"1209275910","1209275913","US" +"1209275914","1209275915","CN" +"1209275916","1209275924","US" +"1209275925","1209275925","TR" +"1209275926","1209275926","US" +"1209275927","1209275927","ES" +"1209275928","1209275928","US" +"1209275929","1209275929","MY" +"1209275930","1209275930","CN" +"1209275931","1209275931","US" +"1209275932","1209275932","CN" +"1209275933","1209276031","US" +"1209276032","1209276063","BR" +"1209276064","1209276351","US" +"1209276352","1209276559","CN" +"1209276560","1209276583","US" +"1209276584","1209276655","CN" +"1209276656","1209276671","US" +"1209276672","1209276703","CN" +"1209276704","1209276707","PH" +"1209276708","1209276815","US" +"1209276816","1209276819","CN" +"1209276820","1209276879","US" +"1209276880","1209276895","PK" +"1209276896","1209276903","AU" +"1209276904","1209276911","CN" +"1209276912","1209276927","TR" +"1209276928","1209277087","US" +"1209277088","1209277095","SC" +"1209277096","1209277103","US" +"1209277104","1209277119","TR" +"1209277120","1209277143","US" +"1209277144","1209277147","TR" +"1209277148","1209277155","US" +"1209277156","1209277156","CN" +"1209277157","1209277157","US" +"1209277158","1209277158","IN" +"1209277159","1209277159","CN" +"1209277160","1209277160","US" +"1209277161","1209277161","SC" +"1209277162","1209277163","US" +"1209277164","1209277165","SC" +"1209277166","1209277166","GB" +"1209277167","1209277167","CN" +"1209277168","1209277170","US" +"1209277171","1209277171","CN" +"1209277172","1209277174","US" +"1209277175","1209277175","MY" +"1209277176","1209277179","US" +"1209277180","1209277180","CN" +"1209277181","1209277215","US" +"1209277216","1209277231","BR" +"1209277232","1209277247","US" +"1209277248","1209277263","BR" +"1209277264","1209277279","US" +"1209277280","1209277283","BR" +"1209277284","1209277287","US" +"1209277288","1209277295","BD" +"1209277296","1209277311","US" +"1209277312","1209277375","CN" +"1209277376","1209277391","US" +"1209277392","1209277419","CN" +"1209277420","1209277431","US" +"1209277432","1209277439","ZA" +"1209277440","1209277567","ES" +"1209277568","1209277583","US" +"1209277584","1209277599","TR" +"1209277600","1209277695","US" +"1209277696","1209277951","KH" +"1209277952","1209278087","US" +"1209278088","1209278095","AU" +"1209278096","1209278127","US" +"1209278128","1209278143","AU" +"1209278144","1209278151","CN" +"1209278152","1209278155","US" +"1209278156","1209278159","SC" +"1209278160","1209278207","US" +"1209278208","1209278463","CN" +"1209278464","1209278467","PH" +"1209278468","1209278471","US" +"1209278472","1209278479","CA" +"1209278480","1209278527","US" +"1209278528","1209278591","MY" +"1209278592","1209278727","US" +"1209278728","1209278735","KH" +"1209278736","1209278799","US" +"1209278800","1209278803","PK" +"1209278804","1209278931","US" +"1209278932","1209278935","GB" +"1209278936","1209278979","US" +"1209278980","1209278983","KH" +"1209278984","1209278987","US" +"1209278988","1209278995","KH" +"1209278996","1209278999","US" +"1209279000","1209279003","CN" +"1209279004","1209279015","US" +"1209279016","1209279023","CN" +"1209279024","1209279043","US" +"1209279044","1209279047","CN" +"1209279048","1209279075","US" +"1209279076","1209279079","CN" +"1209279080","1209279087","US" +"1209279088","1209279091","CN" +"1209279092","1209279095","BD" +"1209279096","1209279099","US" +"1209279100","1209279103","CN" +"1209279104","1209279143","US" +"1209279144","1209279151","CN" +"1209279152","1209279231","US" +"1209279232","1209279295","BR" +"1209279296","1209279487","US" +"1209279488","1209279551","PK" +"1209279552","1209279583","US" +"1209279584","1209279599","BD" +"1209279600","1209279615","US" +"1209279616","1209279743","GB" +"1209279744","1209279807","US" +"1209279808","1209279823","PH" +"1209279824","1209279839","CN" +"1209279840","1209279871","US" +"1209279872","1209279935","MY" +"1209279936","1209279967","US" +"1209279968","1209279999","CN" +"1209280000","1209280007","TR" +"1209280008","1209280027","US" +"1209280028","1209280031","SA" +"1209280032","1209280047","IN" +"1209280048","1209280159","US" +"1209280160","1209280167","CN" +"1209280168","1209280191","US" +"1209280192","1209280255","ID" +"1209280256","1209280319","SC" +"1209280320","1209280419","US" +"1209280420","1209280423","VN" +"1209280424","1209280443","US" +"1209280444","1209280447","GB" +"1209280448","1209280463","IN" +"1209280464","1209280479","US" +"1209280480","1209280487","CN" +"1209280488","1209280491","US" +"1209280492","1209280495","AU" +"1209280496","1209280511","CN" +"1209280512","1209280515","US" +"1209280516","1209280519","AU" +"1209280520","1209280535","US" +"1209280536","1209280543","BD" +"1209280544","1209280559","US" +"1209280560","1209280575","CA" +"1209280576","1209280607","SC" +"1209280608","1209280619","US" +"1209280620","1209280623","CN" +"1209280624","1209280895","US" +"1209280896","1209280959","BR" +"1209280960","1209280975","CN" +"1209280976","1209281235","US" +"1209281236","1209281239","AU" +"1209281240","1209281247","US" +"1209281248","1209281279","CA" +"1209281280","1209281535","KH" +"1209281536","1209281791","IN" +"1209281792","1209281863","US" +"1209281864","1209281871","SC" +"1209281872","1209281927","US" +"1209281928","1209281935","IN" +"1209281936","1209282063","US" +"1209282064","1209282067","SA" +"1209282068","1209282111","US" +"1209282112","1209282143","SC" +"1209282144","1209282559","US" +"1209282560","1209282623","CN" +"1209282624","1209283479","US" +"1209283480","1209283487","GB" +"1209283488","1209283503","TR" +"1209283504","1209283519","US" +"1209283520","1209283535","ES" +"1209283536","1209283543","GB" +"1209283544","1209283547","SA" +"1209283548","1209283551","US" +"1209283552","1209283567","GB" +"1209283568","1209283575","CN" +"1209283576","1209283583","US" +"1209283584","1209283587","SA" +"1209283588","1209283599","US" +"1209283600","1209283607","IN" +"1209283608","1209283679","US" +"1209283680","1209283683","CZ" +"1209283684","1209283687","US" +"1209283688","1209283695","CN" +"1209283696","1209283703","GB" +"1209283704","1209283751","US" +"1209283752","1209283759","BD" +"1209283760","1209283775","US" +"1209283776","1209283807","ZA" +"1209283808","1209283839","MY" +"1209283840","1209283967","US" +"1209283968","1209284095","GB" +"1209284096","1209284127","CA" +"1209284128","1209284159","US" +"1209284160","1209284223","TR" +"1209284224","1209284375","US" +"1209284376","1209284383","NL" +"1209284384","1209284607","US" +"1209284608","1209284671","TR" +"1209284672","1209284735","CN" +"1209284736","1209284759","US" +"1209284760","1209284767","SC" +"1209284768","1209284799","MY" +"1209284800","1209284859","US" +"1209284860","1209284863","IT" +"1209284864","1209284991","CN" +"1209284992","1209284993","US" +"1209284994","1209284994","TR" +"1209284995","1209284996","US" +"1209284997","1209284997","KR" +"1209284998","1209285004","US" +"1209285005","1209285005","KR" +"1209285006","1209285010","US" +"1209285011","1209285011","CN" +"1209285012","1209285012","TR" +"1209285013","1209285013","US" +"1209285014","1209285014","CN" +"1209285015","1209285016","US" +"1209285017","1209285017","CN" +"1209285018","1209285021","US" +"1209285022","1209285022","CN" +"1209285023","1209285183","US" +"1209285184","1209285247","AE" +"1209285248","1209285631","US" +"1209285632","1209285695","CN" +"1209285696","1209285887","US" +"1209285888","1209286399","CN" +"1209286400","1209338513","US" +"1209338514","1209338514","A1" +"1209338515","1209357215","US" +"1209357216","1209357231","SI" +"1209357232","1209358591","US" +"1209358592","1209358847","DE" +"1209358848","1209434111","US" +"1209434112","1209436671","BB" +"1209436672","1209437183","VC" +"1209437184","1209440767","BB" +"1209440768","1209441279","GD" +"1209441280","1209442303","BB" +"1209442304","1209647103","US" +"1209647104","1209663487","CA" +"1209663488","1209719807","US" +"1209719808","1209720831","SG" +"1209720832","1209729023","US" +"1209729024","1209786367","JM" +"1209786368","1209810943","US" +"1209810944","1209819135","CA" +"1209819136","1209819903","US" +"1209819904","1209819967","CA" +"1209819968","1209820159","US" +"1209820160","1209820223","CA" +"1209820224","1209860095","US" +"1209860096","1209860127","IN" +"1209860128","1209860159","BE" +"1209860160","1209860447","US" +"1209860448","1209860479","BE" +"1209860480","1209860575","US" +"1209860576","1209860607","IN" +"1209860608","1209860927","US" +"1209860928","1209860959","AU" +"1209860960","1209861119","US" +"1209861120","1209861375","CA" +"1209861376","1209861759","US" +"1209861760","1209861887","FR" +"1209861888","1209862143","US" +"1209862144","1209862399","CA" +"1209862400","1209863167","US" +"1209863168","1209863423","CA" +"1209863424","1209863679","IN" +"1209863680","1209863935","US" +"1209863936","1209864191","CA" +"1209864192","1209864543","US" +"1209864544","1209864575","BE" +"1209864576","1209864607","US" +"1209864608","1209864639","BE" +"1209864640","1209864671","IN" +"1209864672","1209865599","US" +"1209865600","1209865727","IN" +"1209865728","1209866111","US" +"1209866112","1209866143","IN" +"1209866144","1209866175","US" +"1209866176","1209866207","BE" +"1209866208","1209866239","IN" +"1209866240","1209866751","US" +"1209866752","1209867007","IN" +"1209867008","1209867039","NZ" +"1209867040","1209867071","BE" +"1209867072","1209867135","US" +"1209867136","1209867167","BE" +"1209867168","1209867199","US" +"1209867200","1209867231","IN" +"1209867232","1209867263","US" +"1209867264","1209867519","CA" +"1209867520","1209877934","US" +"1209877935","1209877938","PK" +"1209877939","1209879554","US" +"1209879555","1209879558","PE" +"1209879559","1209880125","US" +"1209880126","1209880126","CA" +"1209880127","1209881219","US" +"1209881220","1209881223","BR" +"1209881224","1209882516","US" +"1209882517","1209882517","CA" +"1209882518","1209884671","US" +"1209884672","1209884679","IT" +"1209884680","1209884687","ES" +"1209884688","1209884823","US" +"1209884824","1209884831","IT" +"1209884832","1209885119","US" +"1209885120","1209885127","AU" +"1209885128","1209885143","IT" +"1209885144","1209885167","US" +"1209885168","1209885175","IT" +"1209885176","1209886175","US" +"1209886176","1209886207","GB" +"1209886208","1209890495","US" +"1209890496","1209890559","AU" +"1209890560","1209893503","US" +"1209893504","1209893519","MX" +"1209893520","1209904959","US" +"1209904960","1209904975","GB" +"1209904976","1209917439","US" +"1209917440","1209918367","CA" +"1209918368","1209918399","US" +"1209918400","1209925631","CA" +"1209925632","1210057039","US" +"1210057040","1210057047","JM" +"1210057048","1210057055","US" +"1210057056","1210057071","DE" +"1210057072","1210057519","US" +"1210057520","1210057535","IN" +"1210057536","1210057567","US" +"1210057568","1210057583","NG" +"1210057584","1210057615","US" +"1210057616","1210057623","CA" +"1210057624","1210057639","US" +"1210057640","1210057647","GB" +"1210057648","1210057879","US" +"1210057880","1210057887","IL" +"1210057888","1210057895","US" +"1210057896","1210057903","MX" +"1210057904","1210057911","GB" +"1210057912","1210058159","US" +"1210058160","1210058167","CA" +"1210058168","1210058191","US" +"1210058192","1210058199","CA" +"1210058200","1210058615","US" +"1210058616","1210058623","AU" +"1210058624","1210059271","US" +"1210059272","1210059279","ES" +"1210059280","1210059303","US" +"1210059304","1210059311","AU" +"1210059312","1210059591","US" +"1210059592","1210059599","CA" +"1210059600","1210059767","US" +"1210059768","1210059775","CH" +"1210059776","1210059791","GB" +"1210059792","1210060031","US" +"1210060032","1210060047","AE" +"1210060048","1210060351","US" +"1210060352","1210060359","IN" +"1210060360","1210060383","US" +"1210060384","1210060407","IL" +"1210060408","1210060515","US" +"1210060516","1210060517","IN" +"1210060518","1210060623","US" +"1210060624","1210060639","CA" +"1210060640","1210060783","US" +"1210060784","1210060787","NL" +"1210060788","1210060799","US" +"1210060800","1210060815","BR" +"1210060816","1210060839","US" +"1210060840","1210060847","AU" +"1210060848","1210061327","US" +"1210061328","1210061335","CA" +"1210061336","1210061367","US" +"1210061368","1210061375","IN" +"1210061376","1210061407","US" +"1210061408","1210061415","AU" +"1210061416","1210061463","US" +"1210061464","1210061471","HK" +"1210061472","1210061599","US" +"1210061600","1210061631","IL" +"1210061632","1210061647","US" +"1210061648","1210061655","IN" +"1210061656","1210061663","GB" +"1210061664","1210061727","US" +"1210061728","1210061735","GB" +"1210061736","1210061803","US" +"1210061804","1210061807","AU" +"1210061808","1210061991","US" +"1210061992","1210061999","AU" +"1210062000","1210062079","US" +"1210062080","1210062087","IN" +"1210062088","1210062095","US" +"1210062096","1210062103","NZ" +"1210062104","1210062463","US" +"1210062464","1210062479","IN" +"1210062480","1210062487","US" +"1210062488","1210062495","MX" +"1210062496","1210062815","US" +"1210062816","1210062831","ZA" +"1210062832","1210062847","IL" +"1210062848","1210062927","US" +"1210062928","1210062935","AU" +"1210062936","1210062975","US" +"1210062976","1210062983","CR" +"1210062984","1210064067","US" +"1210064068","1210064071","CA" +"1210064072","1210064311","US" +"1210064312","1210064319","IE" +"1210064320","1210064527","US" +"1210064528","1210064535","AU" +"1210064536","1210064663","US" +"1210064664","1210064671","AU" +"1210064672","1210065023","US" +"1210065024","1210065031","CA" +"1210065032","1210065319","US" +"1210065320","1210065327","AU" +"1210065328","1210065535","US" +"1210065536","1210065543","IN" +"1210065544","1210065663","US" +"1210065664","1210065679","IN" +"1210065680","1210065695","AU" +"1210065696","1210065703","IN" +"1210065704","1210065751","US" +"1210065752","1210065759","GB" +"1210065760","1210065783","US" +"1210065784","1210065791","PA" +"1210065792","1210065823","US" +"1210065824","1210065855","AU" +"1210065856","1210066287","US" +"1210066288","1210066295","IN" +"1210066296","1210066787","US" +"1210066788","1210066791","CR" +"1210066792","1210066807","US" +"1210066808","1210066831","CA" +"1210066832","1210066883","US" +"1210066884","1210066887","CA" +"1210066888","1210066921","US" +"1210066922","1210066923","IN" +"1210066924","1210067207","US" +"1210067208","1210067215","AU" +"1210067216","1210067263","US" +"1210067264","1210067287","GB" +"1210067288","1210067632","US" +"1210067633","1210067640","AU" +"1210067641","1210067671","US" +"1210067672","1210067675","NL" +"1210067676","1210068039","US" +"1210068040","1210068047","GB" +"1210068048","1210068163","US" +"1210068164","1210068165","IN" +"1210068166","1210068319","US" +"1210068320","1210068327","CA" +"1210068328","1210068343","US" +"1210068344","1210068351","MX" +"1210068352","1210068447","US" +"1210068448","1210068471","NO" +"1210068472","1210068607","US" +"1210068608","1210068735","IL" +"1210068736","1210068903","US" +"1210068904","1210068927","AU" +"1210068928","1210069015","US" +"1210069016","1210069023","CA" +"1210069024","1210069159","US" +"1210069160","1210069167","AU" +"1210069168","1210070175","US" +"1210070176","1210070183","IL" +"1210070184","1210070631","US" +"1210070632","1210070639","MX" +"1210070640","1210070799","US" +"1210070800","1210070807","AU" +"1210070808","1210070959","US" +"1210070960","1210070967","JP" +"1210070968","1210071007","US" +"1210071008","1210071015","GB" +"1210071016","1210071039","US" +"1210071040","1210071167","GB" +"1210071168","1210072519","US" +"1210072520","1210072527","NZ" +"1210072528","1210072559","US" +"1210072560","1210072567","GB" +"1210072568","1210075279","US" +"1210075280","1210075295","FR" +"1210075296","1210075663","US" +"1210075664","1210075671","IN" +"1210075672","1210076039","US" +"1210076040","1210076047","CA" +"1210076048","1210076097","US" +"1210076098","1210076099","NL" +"1210076100","1210076109","US" +"1210076110","1210076111","CH" +"1210076112","1210079903","US" +"1210079904","1210079911","IT" +"1210079912","1210079919","BM" +"1210079920","1210080079","US" +"1210080080","1210080111","GB" +"1210080112","1210080407","US" +"1210080408","1210080455","NL" +"1210080456","1210080731","US" +"1210080732","1210080733","IL" +"1210080734","1210081087","US" +"1210081088","1210081103","CA" +"1210081104","1210081335","US" +"1210081336","1210081343","CR" +"1210081344","1210081559","US" +"1210081560","1210081567","PK" +"1210081568","1210081599","US" +"1210081600","1210081615","AU" +"1210081616","1210081789","US" +"1210081790","1210081791","IN" +"1210081792","1210081823","US" +"1210081824","1210081831","MX" +"1210081832","1210081839","US" +"1210081840","1210081847","MX" +"1210081848","1210081879","US" +"1210081880","1210081887","MX" +"1210081888","1210081911","US" +"1210081912","1210081919","AU" +"1210081920","1210081943","US" +"1210081944","1210081951","CA" +"1210081952","1210082043","US" +"1210082044","1210082047","CA" +"1210082048","1210082055","IN" +"1210082056","1210082199","US" +"1210082200","1210082207","CA" +"1210082208","1210082327","US" +"1210082328","1210082335","CA" +"1210082336","1210082447","US" +"1210082448","1210082463","AU" +"1210082464","1210082655","US" +"1210082656","1210082663","CA" +"1210082664","1210082797","US" +"1210082798","1210082799","AU" +"1210082800","1210082809","US" +"1210082810","1210082811","IN" +"1210082812","1210082831","US" +"1210082832","1210082839","AU" +"1210082840","1210082847","IN" +"1210082848","1210082975","US" +"1210082976","1210082991","GB" +"1210082992","1210083071","US" +"1210083072","1210083079","JP" +"1210083080","1210083567","US" +"1210083568","1210083569","BH" +"1210083570","1210083719","US" +"1210083720","1210083735","IN" +"1210083736","1210083871","US" +"1210083872","1210083879","CA" +"1210083880","1210083983","US" +"1210083984","1210083991","IN" +"1210083992","1210084215","US" +"1210084216","1210084223","VE" +"1210084224","1210084263","US" +"1210084264","1210084271","NZ" +"1210084272","1210084359","US" +"1210084360","1210084367","BG" +"1210084368","1210084415","US" +"1210084416","1210084479","CA" +"1210084480","1210084711","US" +"1210084712","1210084719","AU" +"1210084720","1210084783","US" +"1210084784","1210084799","BD" +"1210084800","1210085055","US" +"1210085056","1210085057","AU" +"1210085058","1210086255","US" +"1210086256","1210086263","MX" +"1210086264","1210086503","US" +"1210086504","1210086511","GB" +"1210086512","1210086551","US" +"1210086552","1210086559","SE" +"1210086560","1210086583","US" +"1210086584","1210086591","SE" +"1210086592","1210086599","US" +"1210086600","1210086607","NZ" +"1210086608","1210086623","US" +"1210086624","1210086631","SE" +"1210086632","1210087295","US" +"1210087296","1210087303","GB" +"1210087304","1210087423","US" +"1210087424","1210087431","MX" +"1210087432","1210087463","US" +"1210087464","1210087471","CA" +"1210087472","1210088959","US" +"1210088960","1210088967","GB" +"1210088968","1210089047","US" +"1210089048","1210089055","MX" +"1210089056","1210089375","US" +"1210089376","1210089383","CA" +"1210089384","1210089399","US" +"1210089400","1210089407","GB" +"1210089408","1210089705","US" +"1210089706","1210089707","HK" +"1210089708","1210089823","US" +"1210089824","1210089855","CA" +"1210089856","1210090071","US" +"1210090072","1210090079","MX" +"1210090080","1210090287","US" +"1210090288","1210090295","AU" +"1210090296","1210090367","US" +"1210090368","1210090375","JM" +"1210090376","1210090383","US" +"1210090384","1210090399","CA" +"1210090400","1210090439","US" +"1210090440","1210090443","FR" +"1210090444","1210090475","US" +"1210090476","1210090479","CA" +"1210090480","1210090623","US" +"1210090624","1210090639","BD" +"1210090640","1210090767","US" +"1210090768","1210090783","BD" +"1210090784","1210090815","US" +"1210090816","1210090823","CA" +"1210090824","1210090895","US" +"1210090896","1210090903","AU" +"1210090904","1210091079","US" +"1210091080","1210091087","SG" +"1210091088","1210091135","US" +"1210091136","1210091151","CA" +"1210091152","1210091175","US" +"1210091176","1210091183","SR" +"1210091184","1210091351","US" +"1210091352","1210091359","AU" +"1210091360","1210091535","US" +"1210091536","1210091543","CA" +"1210091544","1210091679","US" +"1210091680","1210091687","AU" +"1210091688","1210091723","US" +"1210091724","1210091725","GB" +"1210091726","1210091791","US" +"1210091792","1210091807","CA" +"1210091808","1210091839","US" +"1210091840","1210091847","CA" +"1210091848","1210091987","US" +"1210091988","1210091991","GB" +"1210091992","1210092287","US" +"1210092288","1210092543","ES" +"1210092544","1210092567","US" +"1210092568","1210092575","AU" +"1210092576","1210092583","CA" +"1210092584","1210092591","MX" +"1210092592","1210092607","US" +"1210092608","1210092639","GB" +"1210092640","1210092799","US" +"1210092800","1210092815","CA" +"1210092816","1210093191","US" +"1210093192","1210093199","BR" +"1210093200","1210093407","US" +"1210093408","1210093423","MX" +"1210093424","1210093639","US" +"1210093640","1210093647","CA" +"1210093648","1210093663","US" +"1210093664","1210093671","CA" +"1210093672","1210093679","AU" +"1210093680","1210093751","US" +"1210093752","1210093759","AU" +"1210093760","1210093771","US" +"1210093772","1210093775","HU" +"1210093776","1210093815","US" +"1210093816","1210093817","JE" +"1210093818","1210093847","US" +"1210093848","1210093855","AU" +"1210093856","1210094175","US" +"1210094176","1210094183","TT" +"1210094184","1210094407","US" +"1210094408","1210094415","GB" +"1210094416","1210094831","US" +"1210094832","1210094847","SG" +"1210094848","1210094855","US" +"1210094856","1210094863","SE" +"1210094864","1210094943","US" +"1210094944","1210094951","GB" +"1210094952","1210094959","US" +"1210094960","1210094967","GB" +"1210094968","1210095263","US" +"1210095264","1210095271","GB" +"1210095272","1210095503","US" +"1210095504","1210095519","IN" +"1210095520","1210095527","NZ" +"1210095528","1210095711","US" +"1210095712","1210095727","GB" +"1210095728","1210095935","US" +"1210095936","1210095951","IN" +"1210095952","1210095959","US" +"1210095960","1210095967","GB" +"1210095968","1210096295","US" +"1210096296","1210096303","GB" +"1210096304","1210096391","US" +"1210096392","1210096399","AU" +"1210096400","1210096543","US" +"1210096544","1210096551","MX" +"1210096552","1210096559","US" +"1210096560","1210096575","DE" +"1210096576","1210096871","US" +"1210096872","1210096879","CA" +"1210096880","1210097151","US" +"1210097152","1210097159","GB" +"1210097160","1210097303","US" +"1210097304","1210097311","MX" +"1210097312","1210097335","US" +"1210097336","1210097343","IE" +"1210097344","1210097415","US" +"1210097416","1210097423","ZA" +"1210097424","1210097567","US" +"1210097568","1210097575","GB" +"1210097576","1210097655","US" +"1210097656","1210097663","GB" +"1210097664","1210097783","US" +"1210097784","1210097791","GB" +"1210097792","1210098111","US" +"1210098112","1210098119","IL" +"1210098120","1210098127","US" +"1210098128","1210098143","CA" +"1210098144","1210098215","US" +"1210098216","1210098223","IN" +"1210098224","1210098319","US" +"1210098320","1210098327","CA" +"1210098328","1210098527","US" +"1210098528","1210098535","SG" +"1210098536","1210098775","US" +"1210098776","1210098783","CN" +"1210098784","1210098899","US" +"1210098900","1210098901","MX" +"1210098902","1210098959","US" +"1210098960","1210098975","CA" +"1210098976","1210099383","US" +"1210099384","1210099399","AE" +"1210099400","1210099495","US" +"1210099496","1210099503","BG" +"1210099504","1210099511","US" +"1210099512","1210099519","MX" +"1210099520","1210099583","US" +"1210099584","1210099591","CA" +"1210099592","1210099695","US" +"1210099696","1210099711","AU" +"1210099712","1210099783","US" +"1210099784","1210099791","NZ" +"1210099792","1210099879","US" +"1210099880","1210099895","GB" +"1210099896","1210099967","US" +"1210099968","1210099975","MT" +"1210099976","1210100103","US" +"1210100104","1210100111","MT" +"1210100112","1210100199","US" +"1210100200","1210100203","CA" +"1210100204","1210100231","US" +"1210100232","1210100239","CA" +"1210100240","1210100255","PK" +"1210100256","1210100287","CA" +"1210100288","1210100359","US" +"1210100360","1210100367","AU" +"1210100368","1210100463","US" +"1210100464","1210100479","CA" +"1210100480","1210100631","US" +"1210100632","1210100639","NZ" +"1210100640","1210101023","US" +"1210101024","1210101039","GB" +"1210101040","1210101191","US" +"1210101192","1210101195","CA" +"1210101196","1210101263","US" +"1210101264","1210101279","MY" +"1210101280","1210101311","US" +"1210101312","1210101319","IE" +"1210101320","1210101327","IL" +"1210101328","1210101519","US" +"1210101520","1210101527","IL" +"1210101528","1210101559","US" +"1210101560","1210101567","AU" +"1210101568","1210101727","US" +"1210101728","1210101743","GB" +"1210101744","1210101863","US" +"1210101864","1210101871","CH" +"1210101872","1210101879","US" +"1210101880","1210101887","CA" +"1210101888","1210102287","US" +"1210102288","1210102295","IL" +"1210102296","1210102399","US" +"1210102400","1210102407","AU" +"1210102408","1210102815","US" +"1210102816","1210102823","CA" +"1210102824","1210102879","US" +"1210102880","1210102895","IL" +"1210102896","1210105063","US" +"1210105064","1210105071","SE" +"1210105072","1210107967","US" +"1210107968","1210107975","MO" +"1210107976","1210108295","US" +"1210108296","1210108303","IN" +"1210108304","1210108335","US" +"1210108336","1210108343","CA" +"1210108344","1210108351","IL" +"1210108352","1210108359","US" +"1210108360","1210108367","CA" +"1210108368","1210108423","US" +"1210108424","1210108431","PR" +"1210108432","1210108631","US" +"1210108632","1210108639","GB" +"1210108640","1210108903","US" +"1210108904","1210108911","AU" +"1210108912","1210108919","GB" +"1210108920","1210109247","US" +"1210109248","1210109255","DK" +"1210109256","1210109263","IL" +"1210109264","1210109271","CA" +"1210109272","1210109343","US" +"1210109344","1210109351","FI" +"1210109352","1210109751","US" +"1210109752","1210109759","IL" +"1210109760","1210109767","GB" +"1210109768","1210109775","IN" +"1210109776","1210109935","US" +"1210109936","1210109943","BB" +"1210109944","1210111007","US" +"1210111008","1210111015","GB" +"1210111016","1210111095","US" +"1210111096","1210111103","CA" +"1210111104","1210111279","US" +"1210111280","1210111287","VG" +"1210111288","1210111295","US" +"1210111296","1210111303","AU" +"1210111304","1210111999","US" +"1210112000","1210112007","CA" +"1210112008","1210112039","US" +"1210112040","1210112047","IL" +"1210112048","1210112455","US" +"1210112456","1210112463","ZA" +"1210112464","1210112679","US" +"1210112680","1210112687","CA" +"1210112688","1210112727","US" +"1210112728","1210112735","PY" +"1210112736","1210112815","US" +"1210112816","1210112823","MX" +"1210112824","1210112839","US" +"1210112840","1210112847","LT" +"1210112848","1210112855","IN" +"1210112856","1210113055","US" +"1210113056","1210113063","CA" +"1210113064","1210113095","US" +"1210113096","1210113103","BR" +"1210113104","1210113535","US" +"1210113536","1210113551","CA" +"1210113552","1210113615","US" +"1210113616","1210113631","GB" +"1210113632","1210113991","US" +"1210113992","1210113999","IE" +"1210114000","1210114095","US" +"1210114096","1210114103","CR" +"1210114104","1210114151","US" +"1210114152","1210114159","MY" +"1210114160","1210114167","US" +"1210114168","1210114175","HN" +"1210114176","1210114279","US" +"1210114280","1210114287","AU" +"1210114288","1210114351","US" +"1210114352","1210114367","AU" +"1210114368","1210114439","US" +"1210114440","1210114447","GB" +"1210114448","1210114471","US" +"1210114472","1210114479","AU" +"1210114480","1210114487","CL" +"1210114488","1210114495","AU" +"1210114496","1210114503","US" +"1210114504","1210114511","BB" +"1210114512","1210114551","US" +"1210114552","1210114559","AU" +"1210114560","1210114623","US" +"1210114624","1210114631","CA" +"1210114632","1210114711","US" +"1210114712","1210114719","ZA" +"1210114720","1210114759","US" +"1210114760","1210114775","MT" +"1210114776","1210114831","US" +"1210114832","1210114839","AU" +"1210114840","1210114991","US" +"1210114992","1210114999","AU" +"1210115000","1210115079","US" +"1210115080","1210115087","AU" +"1210115088","1210115135","US" +"1210115136","1210115143","AU" +"1210115144","1210115199","US" +"1210115200","1210115207","GB" +"1210115208","1210115231","US" +"1210115232","1210115239","AU" +"1210115240","1210115335","US" +"1210115336","1210115343","GB" +"1210115344","1210115471","US" +"1210115472","1210115479","IN" +"1210115480","1210115495","US" +"1210115496","1210115503","AU" +"1210115504","1210115543","US" +"1210115544","1210115575","BB" +"1210115576","1210115719","US" +"1210115720","1210115727","AU" +"1210115728","1210115791","US" +"1210115792","1210115799","GB" +"1210115800","1210115911","US" +"1210115912","1210115919","GB" +"1210115920","1210116255","US" +"1210116256","1210116263","IN" +"1210116264","1210116375","US" +"1210116376","1210116383","CA" +"1210116384","1210116423","US" +"1210116424","1210116431","GB" +"1210116432","1210116527","US" +"1210116528","1210116535","PR" +"1210116536","1210116671","US" +"1210116672","1210116679","AU" +"1210116680","1210116687","GB" +"1210116688","1210116695","NG" +"1210116696","1210116863","US" +"1210116864","1210116871","GB" +"1210116872","1210117191","US" +"1210117192","1210117199","CA" +"1210117200","1210117567","US" +"1210117568","1210117599","CA" +"1210117600","1210117631","US" +"1210117632","1210117639","IN" +"1210117640","1210117647","GB" +"1210117648","1210117655","AE" +"1210117656","1210117871","US" +"1210117872","1210117879","CA" +"1210117880","1210117887","US" +"1210117888","1210117895","TH" +"1210117896","1210118023","US" +"1210118024","1210118031","GB" +"1210118032","1210118089","US" +"1210118090","1210118091","IN" +"1210118092","1210118191","US" +"1210118192","1210118199","NZ" +"1210118200","1210118239","US" +"1210118240","1210118255","TH" +"1210118256","1210118431","US" +"1210118432","1210118439","AU" +"1210118440","1210118655","US" +"1210118656","1210118663","IN" +"1210118664","1210118687","US" +"1210118688","1210118703","IN" +"1210118704","1210118887","US" +"1210118888","1210118895","BR" +"1210118896","1210119119","US" +"1210119120","1210119135","GB" +"1210119136","1210119183","US" +"1210119184","1210119191","CA" +"1210119192","1210119255","US" +"1210119256","1210119263","MY" +"1210119264","1210119311","US" +"1210119312","1210119319","AN" +"1210119320","1210119551","US" +"1210119552","1210119559","MX" +"1210119560","1210119823","US" +"1210119824","1210119831","CA" +"1210119832","1210119881","US" +"1210119882","1210119883","GB" +"1210119884","1210120007","US" +"1210120008","1210120015","IN" +"1210120016","1210120847","US" +"1210120848","1210120855","MY" +"1210120856","1210120895","US" +"1210120896","1210120903","MX" +"1210120904","1210120991","US" +"1210120992","1210120999","IN" +"1210121000","1210121023","US" +"1210121024","1210121039","AU" +"1210121040","1210121079","US" +"1210121080","1210121087","BR" +"1210121088","1210122031","US" +"1210122032","1210122039","CA" +"1210122040","1210122063","US" +"1210122064","1210122071","MX" +"1210122072","1210253311","US" +"1210253312","1210254703","CA" +"1210254704","1210254719","NZ" +"1210254720","1210261503","CA" +"1210261504","1210381759","US" +"1210381760","1210381823","RU" +"1210381824","1210418175","US" +"1210418176","1210418207","SG" +"1210418208","1210427039","US" +"1210427040","1210427071","JP" +"1210427072","1210449919","US" +"1210449920","1210468751","CA" +"1210468752","1210468767","US" +"1210468768","1210580991","CA" +"1210580992","1210861207","US" +"1210861208","1210861215","GB" +"1210861216","1210862191","US" +"1210862192","1210862199","GB" +"1210862200","1210865262","US" +"1210865263","1210865270","MY" +"1210865271","1210866435","US" +"1210866436","1210866443","CL" +"1210866444","1210925055","US" +"1210925056","1210941439","CA" +"1210941440","1211032223","US" +"1211032224","1211032255","VE" +"1211032256","1211032271","US" +"1211032272","1211032287","DO" +"1211032288","1211033087","US" +"1211033088","1211033599","CO" +"1211033600","1211035647","US" +"1211035648","1211035663","PR" +"1211035664","1211035711","US" +"1211035712","1211035775","CA" +"1211035776","1211035791","US" +"1211035792","1211035807","CR" +"1211035808","1211036031","US" +"1211036032","1211036095","EC" +"1211036096","1211036703","US" +"1211036704","1211036719","BO" +"1211036720","1211036735","US" +"1211036736","1211036751","GT" +"1211036752","1211036991","US" +"1211036992","1211037055","BR" +"1211037056","1211037135","US" +"1211037136","1211037151","GB" +"1211037152","1211037183","DO" +"1211037184","1211037519","US" +"1211037520","1211037535","UY" +"1211037536","1211037679","US" +"1211037680","1211037695","AR" +"1211037696","1211037999","US" +"1211038000","1211038007","BB" +"1211038008","1211038011","TT" +"1211038012","1211038063","US" +"1211038064","1211038079","TT" +"1211038080","1211038719","US" +"1211038720","1211038975","CY" +"1211038976","1211039007","US" +"1211039008","1211039023","VG" +"1211039024","1211039087","US" +"1211039088","1211039103","RU" +"1211039104","1211039503","US" +"1211039504","1211039519","A2" +"1211039520","1211039647","US" +"1211039648","1211039663","AR" +"1211039664","1211039679","US" +"1211039680","1211039695","BR" +"1211039696","1211236351","US" +"1211236352","1211269119","PR" +"1211269120","1211303935","US" +"1211303936","1211304159","CA" +"1211304160","1211304207","US" +"1211304208","1211304215","CA" +"1211304216","1211304223","US" +"1211304224","1211304239","CA" +"1211304240","1211304287","US" +"1211304288","1211304319","CA" +"1211304320","1211304351","NL" +"1211304352","1211304703","CA" +"1211304704","1211304767","GB" +"1211304768","1211304831","US" +"1211304832","1211304959","CA" +"1211304960","1211305983","US" +"1211305984","1211306111","NL" +"1211306112","1211306751","US" +"1211306752","1211306879","CA" +"1211306880","1211308167","US" +"1211308168","1211308175","CA" +"1211308176","1211308191","BV" +"1211308192","1211308543","CA" +"1211308544","1211308559","KN" +"1211308560","1211308607","CA" +"1211308608","1211308615","US" +"1211308616","1211308623","CA" +"1211308624","1211308639","US" +"1211308640","1211308655","MX" +"1211308656","1211308671","GB" +"1211308672","1211308703","CA" +"1211308704","1211308719","VG" +"1211308720","1211308735","CA" +"1211308736","1211308751","BV" +"1211308752","1211308767","CA" +"1211308768","1211308783","US" +"1211308784","1211310079","CA" +"1211310080","1211310404","US" +"1211310405","1211310405","IN" +"1211310406","1211310951","US" +"1211310952","1211310952","IN" +"1211310953","1211311378","US" +"1211311379","1211311379","IN" +"1211311380","1211311394","US" +"1211311395","1211311395","IN" +"1211311396","1211311883","US" +"1211311884","1211311884","IN" +"1211311885","1211311963","US" +"1211311964","1211311964","IN" +"1211311965","1211312569","US" +"1211312570","1211312570","IN" +"1211312571","1211313219","US" +"1211313220","1211313231","IN" +"1211313232","1211313311","US" +"1211313312","1211313315","IN" +"1211313316","1211313431","US" +"1211313432","1211313439","IN" +"1211313440","1211313567","US" +"1211313568","1211313579","IN" +"1211313580","1211314383","US" +"1211314384","1211314399","CA" +"1211314400","1211314415","US" +"1211314416","1211314423","CA" +"1211314424","1211314639","US" +"1211314640","1211314671","CA" +"1211314672","1211314863","US" +"1211314864","1211314879","CA" +"1211314880","1211316479","US" +"1211316480","1211316991","CA" +"1211316992","1211317503","US" +"1211317504","1211317759","CA" +"1211317760","1211318271","US" +"1211318272","1211321343","BB" +"1211321344","1211322367","VC" +"1211322368","1211322623","BB" +"1211322624","1211324159","GD" +"1211324160","1211324927","VC" +"1211324928","1211333119","BB" +"1211333120","1211333631","VC" +"1211333632","1211333887","GD" +"1211333888","1211334655","VG" +"1211334656","1211367487","US" +"1211367488","1211367495","GB" +"1211367496","1211367503","US" +"1211367504","1211367519","CH" +"1211367520","1211367615","US" +"1211367616","1211367679","GB" +"1211367680","1211367935","US" +"1211367936","1211368191","CA" +"1211368192","1211368447","EE" +"1211368448","1211384279","US" +"1211384280","1211384287","GB" +"1211384288","1211384327","US" +"1211384328","1211384335","A1" +"1211384336","1211387983","US" +"1211387984","1211387999","AE" +"1211388000","1211388159","US" +"1211388160","1211388287","A1" +"1211388288","1211391455","US" +"1211391456","1211391487","CN" +"1211391488","1211391711","US" +"1211391712","1211391719","CN" +"1211391720","1211391727","US" +"1211391728","1211391735","CN" +"1211391736","1211392607","US" +"1211392608","1211392639","GB" +"1211392640","1211393279","US" +"1211393280","1211393311","AU" +"1211393312","1211394063","US" +"1211394064","1211394079","ES" +"1211394080","1211404421","US" +"1211404422","1211404422","CA" +"1211404423","1211407293","US" +"1211407294","1211407333","MX" +"1211407334","1211419489","US" +"1211419490","1211419497","CA" +"1211419498","1211421739","US" +"1211421740","1211421740","CA" +"1211421741","1211432959","US" +"1211432960","1211473919","CA" +"1211473920","1211596799","US" +"1211596800","1211605999","CA" +"1211606000","1211606003","US" +"1211606004","1211613183","CA" +"1211613184","1212191304","US" +"1212191305","1212191305","A1" +"1212191306","1212191367","US" +"1212191368","1212191368","A1" +"1212191369","1214073215","US" +"1214073216","1214073223","A2" +"1214073224","1216872447","US" +"1216872448","1217396735","CA" +"1217396736","1218697215","US" +"1218697216","1218697471","IN" +"1218697472","1218731807","US" +"1218731808","1218731815","A2" +"1218731816","1218778111","US" +"1218778112","1218778367","SG" +"1218778368","1218987263","US" +"1218987264","1218987519","CA" +"1218987520","1219253119","US" +"1219253120","1219253135","IN" +"1219253136","1219253319","US" +"1219253320","1219253327","CA" +"1219253328","1219256319","US" +"1219256320","1219264511","CA" +"1219264512","1219272703","US" +"1219272704","1219276799","CA" +"1219276800","1219290623","US" +"1219290624","1219290751","AU" +"1219290752","1219295295","US" +"1219295296","1219295359","GR" +"1219295360","1220701665","US" +"1220701666","1220701666","A1" +"1220701667","1223182487","US" +"1223182488","1223182503","ES" +"1223182504","1223208831","US" +"1223208832","1223208959","ES" +"1223208960","1223222911","US" +"1223222912","1223223039","BR" +"1223223040","1223239167","US" +"1223239168","1223239295","ES" +"1223239296","1223244159","US" +"1223244160","1223244223","BR" +"1223244224","1223257599","US" +"1223257600","1223257727","MX" +"1223257728","1224278015","US" +"1224278016","1224278023","GB" +"1224278024","1224278111","US" +"1224278112","1224278143","MY" +"1224278144","1224278183","US" +"1224278184","1224278191","CA" +"1224278192","1224278359","US" +"1224278360","1224278367","GB" +"1224278368","1224278599","US" +"1224278600","1224278607","AU" +"1224278608","1224278815","US" +"1224278816","1224278823","CH" +"1224278824","1224286719","US" +"1224286720","1224286975","CA" +"1224286976","1224290815","US" +"1224290816","1224291071","CA" +"1224291072","1224292095","US" +"1224292096","1224292351","CA" +"1224292352","1224295423","US" +"1224295424","1224295679","VN" +"1224295680","1224296447","US" +"1224296448","1224296959","CA" +"1224296960","1224299519","US" +"1224299520","1224299775","CA" +"1224299776","1224303359","US" +"1224303360","1224303367","CA" +"1224303368","1224311063","US" +"1224311064","1224311071","MX" +"1224311072","1224311247","US" +"1224311248","1224311255","CA" +"1224311256","1224311807","US" +"1224311808","1224312319","CA" +"1224312320","1224312327","GB" +"1224312328","1224312911","US" +"1224312912","1224312927","AU" +"1224312928","1224314047","US" +"1224314048","1224314079","GB" +"1224314080","1224314687","US" +"1224314688","1224314751","PA" +"1224314752","1224317439","US" +"1224317440","1224317695","CA" +"1224317696","1224318207","US" +"1224318208","1224318463","CA" +"1224318464","1224321279","US" +"1224321280","1224321535","CA" +"1224321536","1224322559","US" +"1224322560","1224323071","GB" +"1224323072","1224474623","US" +"1224474624","1224475647","GT" +"1224475648","1224476671","US" +"1224476672","1224478719","AN" +"1224478720","1224480767","US" +"1224480768","1224484863","JM" +"1224484864","1224493055","GT" +"1224493056","1224497151","US" +"1224497152","1224501247","GT" +"1224501248","1224503551","JM" +"1224503552","1224503807","BS" +"1224503808","1224523520","JM" +"1224523521","1224523775","US" +"1224523776","1224525568","JM" +"1224525569","1224525823","US" +"1224525824","1224527616","JM" +"1224527617","1224527871","US" +"1224527872","1224529664","JM" +"1224529665","1224529919","US" +"1224529920","1224539904","JM" +"1224539905","1224701942","US" +"1224701943","1224701943","CA" +"1224701944","1241743359","US" +"1241743360","1241759743","CA" +"1241759744","1242300415","US" +"1242300416","1242562559","CA" +"1242562560","1244659711","US" +"1244659712","1244790783","CA" +"1244790784","1244831743","US" +"1244831744","1244839935","CA" +"1244839936","1244848127","US" +"1244848128","1244852223","CA" +"1244852224","1244864511","US" +"1244864512","1244872703","CA" +"1244872704","1244996655","US" +"1244996656","1244996663","CH" +"1244996664","1245050689","US" +"1245050690","1245050690","SA" +"1245050691","1245052289","US" +"1245052290","1245052545","SA" +"1245052546","1245144575","US" +"1245144576","1245144831","CH" +"1245144832","1245168215","US" +"1245168216","1245168219","CH" +"1245168220","1245173215","US" +"1245173216","1245173223","CH" +"1245173224","1245178423","US" +"1245178424","1245178431","IE" +"1245178432","1245183999","US" +"1245184000","1245446143","CA" +"1245446144","1245662179","US" +"1245662180","1245662182","A1" +"1245662183","1245663891","US" +"1245663892","1245663892","A1" +"1245663893","1245663899","US" +"1245663900","1245663900","A1" +"1245663901","1245664931","US" +"1245664932","1245664932","A1" +"1245664933","1245664939","US" +"1245664940","1245664940","A1" +"1245664941","1245665737","US" +"1245665738","1245665739","A1" +"1245665740","1245665745","US" +"1245665746","1245665747","A1" +"1245665748","1246864899","US" +"1246864900","1246864958","EG" +"1246864959","1246870015","US" +"1246870016","1246870079","UA" +"1246870080","1246870687","US" +"1246870688","1246870719","UA" +"1246870720","1246871487","US" +"1246871488","1246871519","UA" +"1246871520","1246874127","US" +"1246874128","1246874216","GB" +"1246874217","1246874368","US" +"1246874369","1246874496","GB" +"1246874497","1246874558","US" +"1246874559","1246874590","GB" +"1246874591","1246875509","US" +"1246875510","1246875520","NL" +"1246875521","1246902783","US" +"1246902784","1246903039","NL" +"1246903040","1246937087","US" +"1246937088","1246940159","CA" +"1246940160","1246940415","GB" +"1246940416","1246943287","CA" +"1246943288","1246943295","DE" +"1246943296","1246945279","CA" +"1246945280","1247027199","US" +"1247027200","1247034559","A2" +"1247034560","1247034575","US" +"1247034576","1247035391","A2" +"1247035392","1247069303","US" +"1247069304","1247069311","VA" +"1247069312","1247070815","US" +"1247070816","1247070831","CA" +"1247070832","1247072719","US" +"1247072720","1247072735","NL" +"1247072736","1247073791","US" +"1247073792","1247074303","A2" +"1247074304","1247087871","US" +"1247087872","1247088127","A1" +"1247088128","1247123455","US" +"1247123456","1247123711","GB" +"1247123712","1247123967","US" +"1247123968","1247124223","LU" +"1247124224","1247481855","US" +"1247481856","1247481863","CN" +"1247481864","1247481871","US" +"1247481872","1247481879","TR" +"1247481880","1247481887","US" +"1247481888","1247481903","CN" +"1247481904","1247481911","BO" +"1247481912","1247481927","CN" +"1247481928","1247481951","US" +"1247481952","1247481967","CN" +"1247481968","1247481983","US" +"1247481984","1247482015","GB" +"1247482016","1247482047","CN" +"1247482048","1247482063","CA" +"1247482064","1247482071","BO" +"1247482072","1247482079","US" +"1247482080","1247482175","CN" +"1247482176","1247482239","US" +"1247482240","1247482255","GB" +"1247482256","1247482319","CN" +"1247482320","1247482335","US" +"1247482336","1247482351","CN" +"1247482352","1247482367","US" +"1247482368","1247482383","GB" +"1247482384","1247482543","CN" +"1247482544","1247482551","US" +"1247482552","1247482559","CN" +"1247482560","1247482567","US" +"1247482568","1247482583","CN" +"1247482584","1247482607","US" +"1247482608","1247482623","CN" +"1247482624","1247482687","US" +"1247482688","1247482751","CA" +"1247482752","1247482815","US" +"1247482816","1247482879","CN" +"1247482880","1247482927","US" +"1247482928","1247482951","BO" +"1247482952","1247482967","US" +"1247482968","1247482975","CN" +"1247482976","1247483015","US" +"1247483016","1247483039","CN" +"1247483040","1247483047","CA" +"1247483048","1247483079","US" +"1247483080","1247483095","CN" +"1247483096","1247483111","US" +"1247483112","1247483119","CN" +"1247483120","1247483647","US" +"1247483648","1247483903","CN" +"1247483904","1247485183","US" +"1247485184","1247485191","CN" +"1247485192","1247485231","US" +"1247485232","1247485263","CN" +"1247485264","1247485439","US" +"1247485440","1247485471","CN" +"1247485472","1247485479","US" +"1247485480","1247485503","CN" +"1247485504","1247485511","US" +"1247485512","1247485543","CN" +"1247485544","1247485615","US" +"1247485616","1247485623","CN" +"1247485624","1247485631","US" +"1247485632","1247485639","CN" +"1247485640","1247485647","US" +"1247485648","1247485951","CN" +"1247485952","1248864255","US" +"1248864256","1248866303","CA" +"1248866304","1248885759","US" +"1248885760","1248886783","CA" +"1248886784","1248887935","US" +"1248887936","1248887943","CA" +"1248887944","1248888055","US" +"1248888056","1248888063","BR" +"1248888064","1248888439","US" +"1248888440","1248888447","BO" +"1248888448","1248888631","US" +"1248888632","1248888639","CA" +"1248888640","1248888679","US" +"1248888680","1248888687","BO" +"1248888688","1248888703","US" +"1248888704","1248888711","BR" +"1248888712","1248897263","US" +"1248897264","1248897271","FR" +"1248897272","1248899071","US" +"1248899072","1248900095","CA" +"1248900096","1248902143","US" +"1248902144","1248903167","CA" +"1248903168","1248903695","US" +"1248903696","1248903711","ZA" +"1248903712","1248903775","US" +"1248903776","1248903791","FR" +"1248903792","1248913407","US" +"1248913408","1248915455","MF" +"1248915456","1248919551","US" +"1248919552","1248920575","CA" +"1248920576","1248921599","US" +"1248921600","1248923647","CA" +"1248923648","1248936959","US" +"1248936960","1248939007","CA" +"1248939008","1248946175","US" +"1248946176","1248947199","VG" +"1248947200","1248958463","US" +"1248958464","1248959487","CA" +"1248959488","1248964607","US" +"1248964608","1248966655","CA" +"1248966656","1249003519","US" +"1249003520","1249005567","CA" +"1249005568","1249010687","US" +"1249010688","1249011711","CA" +"1249011712","1249019903","US" +"1249019904","1249020927","CA" +"1249020928","1249026455","US" +"1249026456","1249026463","ES" +"1249026464","1249026703","US" +"1249026704","1249026711","ZA" +"1249026712","1249026767","US" +"1249026768","1249026775","CA" +"1249026776","1249026783","MX" +"1249026784","1249027127","US" +"1249027128","1249027135","ZA" +"1249027136","1249027143","AU" +"1249027144","1249027175","US" +"1249027176","1249027183","IN" +"1249027184","1249027351","US" +"1249027352","1249027359","CA" +"1249027360","1249027391","US" +"1249027392","1249027399","PH" +"1249027400","1249027503","US" +"1249027504","1249027519","CA" +"1249027520","1249027551","US" +"1249027552","1249027559","CA" +"1249027560","1249027647","US" +"1249027648","1249027655","GB" +"1249027656","1249027719","US" +"1249027720","1249027727","GR" +"1249027728","1249027823","US" +"1249027824","1249027839","CA" +"1249027840","1249027895","US" +"1249027896","1249027903","PL" +"1249027904","1249027919","US" +"1249027920","1249027935","AU" +"1249027936","1249029119","US" +"1249029120","1249030143","CA" +"1249030144","1249036287","US" +"1249036288","1249037311","TC" +"1249037312","1249037343","US" +"1249037344","1249037359","CA" +"1249037360","1249038335","US" +"1249038336","1249040383","CA" +"1249040384","1249046527","US" +"1249046528","1249047551","BM" +"1249047552","1249050623","US" +"1249050624","1249051135","A1" +"1249051136","1249051391","US" +"1249051392","1249051647","A1" +"1249051648","1249051903","US" +"1249051904","1249052671","A1" +"1249052672","1249059327","US" +"1249059328","1249059839","CA" +"1249059840","1249082367","US" +"1249082368","1249083391","CA" +"1249083392","1249091583","US" +"1249091584","1249092607","A1" +"1249092608","1249094015","US" +"1249094016","1249094143","RO" +"1249094144","1249099775","US" +"1249099776","1249101823","CA" +"1249101824","1249102847","PR" +"1249102848","1249103103","US" +"1249103104","1249103871","CA" +"1249103872","1249105119","US" +"1249105120","1249105127","AR" +"1249105128","1249105279","US" +"1249105280","1249105295","CA" +"1249105296","1249105367","US" +"1249105368","1249105375","ES" +"1249105376","1249105535","US" +"1249105536","1249105567","ES" +"1249105568","1249105599","CA" +"1249105600","1249106431","US" +"1249106432","1249106687","DE" +"1249106688","1249106943","US" +"1249106944","1249107967","CA" +"1249107968","1249130495","US" +"1249130496","1249131519","JM" +"1249131520","1249139711","US" +"1249139712","1249140479","GP" +"1249140480","1249140735","MF" +"1249140736","1249163263","US" +"1249163264","1249167359","CA" +"1249167360","1249171455","US" +"1249171456","1249173503","CA" +"1249173504","1249179967","US" +"1249179968","1249179983","SE" +"1249179984","1249191935","US" +"1249191936","1249193983","CA" +"1249193984","1249195007","US" +"1249195008","1249196031","CA" +"1249196032","1249203199","US" +"1249203200","1249204223","GD" +"1249204224","1249210367","US" +"1249210368","1249212415","KY" +"1249212416","1249217535","US" +"1249217536","1249218559","CA" +"1249218560","1249227007","US" +"1249227008","1249227071","CY" +"1249227072","1249227135","VG" +"1249227136","1249227167","US" +"1249227168","1249227199","VG" +"1249227200","1249227263","HK" +"1249227264","1249227519","VG" +"1249227520","1249228031","US" +"1249228032","1249228063","CZ" +"1249228064","1249228095","US" +"1249228096","1249228223","UA" +"1249228224","1249228239","CZ" +"1249228240","1249228287","US" +"1249228288","1249228351","SC" +"1249228352","1249229007","US" +"1249229008","1249229008","CA" +"1249229009","1249229087","US" +"1249229088","1249229095","CA" +"1249229096","1249229216","US" +"1249229217","1249229217","CA" +"1249229218","1249229289","US" +"1249229290","1249229291","CA" +"1249229292","1249229591","US" +"1249229592","1249229599","ES" +"1249229600","1249234687","US" +"1249234688","1249234943","GB" +"1249234944","1249236991","US" +"1249236992","1249239039","KY" +"1249239040","1249245183","US" +"1249245184","1249247231","CA" +"1249247232","1249253583","US" +"1249253584","1249253591","VA" +"1249253592","1249256447","US" +"1249256448","1249256588","CA" +"1249256589","1249256613","US" +"1249256614","1249256649","CA" +"1249256650","1249256687","GB" +"1249256688","1249256835","CA" +"1249256836","1249256868","US" +"1249256869","1249256988","CA" +"1249256989","1249256998","US" +"1249256999","1249256999","CA" +"1249257000","1249257009","LB" +"1249257010","1249257178","CA" +"1249257179","1249257213","GB" +"1249257214","1249257471","CA" +"1249257472","1249260543","US" +"1249260544","1249261567","CA" +"1249261568","1249272831","US" +"1249272832","1249273855","CA" +"1249273856","1249310719","US" +"1249310720","1249311743","CA" +"1249311744","1249312767","US" +"1249312768","1249313791","CA" +"1249313792","1249335295","US" +"1249335296","1249337343","CA" +"1249337344","1249359871","US" +"1249359872","1249361919","CA" +"1249361920","1249381503","US" +"1249381504","1249381519","DE" +"1249381520","1249381759","US" +"1249381760","1249381763","DE" +"1249381764","1249381764","A1" +"1249381765","1249381775","DE" +"1249381776","1249382287","US" +"1249382288","1249382303","DE" +"1249382304","1249384447","US" +"1249384448","1249386495","PR" +"1249386496","1249391615","US" +"1249391616","1249392639","CA" +"1249392640","1249396735","US" +"1249396736","1249397759","CA" +"1249397760","1249409023","US" +"1249409024","1249410047","CA" +"1249410048","1249439823","US" +"1249439824","1249439839","BR" +"1249439840","1249440063","US" +"1249440064","1249440127","AN" +"1249440128","1249440255","US" +"1249440256","1249440271","AN" +"1249440272","1249440279","US" +"1249440280","1249440287","FR" +"1249440288","1249452031","US" +"1249452032","1249453055","CA" +"1249453056","1249460671","US" +"1249460672","1249460687","CA" +"1249460688","1249474559","US" +"1249474560","1249475583","CA" +"1249475584","1249484799","US" +"1249484800","1249486847","CA" +"1249486848","1249492735","US" +"1249492736","1249492991","CA" +"1249492992","1249506303","US" +"1249506304","1249507327","CA" +"1249507328","1249516031","US" +"1249516032","1249516287","GB" +"1249516288","1249522687","US" +"1249522688","1249523711","CA" +"1249523712","1249531903","US" +"1249531904","1249533951","GD" +"1249533952","1249542143","US" +"1249542144","1249544191","CA" +"1249544192","1249550367","US" +"1249550368","1249550375","HK" +"1249550376","1249562623","US" +"1249562624","1249564671","CA" +"1249564672","1249567558","US" +"1249567559","1249567562","RU" +"1249567563","1249567564","US" +"1249567565","1249567569","RU" +"1249567570","1249568319","US" +"1249568320","1249568327","NL" +"1249568328","1249571839","US" +"1249571840","1249572863","CA" +"1249572864","1249576959","US" +"1249576960","1249577403","CA" +"1249577404","1249577468","US" +"1249577469","1249577983","CA" +"1249577984","1249592319","US" +"1249592320","1249593343","CA" +"1249593344","1249598463","US" +"1249598464","1249599487","CA" +"1249599488","1249637887","US" +"1249637888","1249638143","CA" +"1249638144","1249690677","US" +"1249690678","1249690686","GB" +"1249690687","1249690783","US" +"1249690784","1249690815","AU" +"1249690816","1249691999","US" +"1249692000","1249692031","CA" +"1249692032","1249692735","US" +"1249692736","1249692767","HK" +"1249692768","1249693263","US" +"1249693264","1249693271","CA" +"1249693272","1249710143","US" +"1249710144","1249710207","CN" +"1249710208","1249710271","NL" +"1249710272","1249710335","BE" +"1249710336","1249710847","DE" +"1249710848","1249715711","US" +"1249715712","1249715967","DE" +"1249715968","1249716735","US" +"1249716736","1249716991","DE" +"1249716992","1249720599","US" +"1249720600","1249720607","IT" +"1249720608","1249720751","US" +"1249720752","1249720767","GB" +"1249720768","1249721343","US" +"1249721344","1249721351","AT" +"1249721352","1249721359","BE" +"1249721360","1249721367","CH" +"1249721368","1249721375","CZ" +"1249721376","1249721407","DE" +"1249721408","1249721415","ES" +"1249721416","1249721423","FI" +"1249721424","1249721431","FR" +"1249721432","1249721439","HU" +"1249721440","1249721447","IE" +"1249721448","1249721455","IT" +"1249721456","1249721463","NL" +"1249721464","1249721471","NO" +"1249721472","1249721479","PL" +"1249721480","1249721487","PT" +"1249721488","1249721495","SE" +"1249721496","1249721503","GB" +"1249721504","1249721511","KE" +"1249721512","1249721519","TR" +"1249721520","1249721527","ZA" +"1249721528","1249721535","DK" +"1249721536","1249721599","US" +"1249721600","1249721607","AT" +"1249721608","1249721615","BE" +"1249721616","1249721623","CH" +"1249721624","1249721631","CZ" +"1249721632","1249721647","DE" +"1249721648","1249721655","DK" +"1249721656","1249721663","ES" +"1249721664","1249721671","FI" +"1249721672","1249721679","FR" +"1249721680","1249721687","HU" +"1249721688","1249721695","IE" +"1249721696","1249721703","IT" +"1249721704","1249721711","NL" +"1249721712","1249721719","NO" +"1249721720","1249721727","PL" +"1249721728","1249721735","PT" +"1249721736","1249721743","SE" +"1249721744","1249721751","GB" +"1249721752","1249721759","DE" +"1249721760","1249721767","FR" +"1249721768","1249721775","IE" +"1249721776","1249721783","RU" +"1249721784","1249721791","GB" +"1249721792","1249721799","KE" +"1249721800","1249721807","TR" +"1249721808","1249721815","ZA" +"1249721816","1249722111","US" +"1249722112","1249722367","IN" +"1249722368","1249723903","US" +"1249723904","1249724159","CN" +"1249724160","1249725439","US" +"1249725440","1249725695","NL" +"1249725696","1249725951","US" +"1249725952","1249726207","NL" +"1249726208","1249727999","US" +"1249728000","1249728255","HU" +"1249728256","1249744895","US" +"1249744896","1249745151","TW" +"1249745152","1249773023","US" +"1249773024","1249773055","CA" +"1249773056","1249796095","US" +"1249796096","1249804287","CA" +"1249804288","1249838847","US" +"1249838848","1249838911","IN" +"1249838912","1249838975","US" +"1249838976","1249839039","IN" +"1249839040","1249839423","US" +"1249839424","1249839487","VE" +"1249839488","1249843231","US" +"1249843232","1249843247","IN" +"1249843248","1249843423","US" +"1249843424","1249843439","IN" +"1249843440","1249845311","US" +"1249845312","1249845327","IN" +"1249845328","1249845343","US" +"1249845344","1249845375","IN" +"1249845376","1249846847","US" +"1249846848","1249846879","GB" +"1249846880","1249846911","CN" +"1249846912","1249847039","US" +"1249847040","1249847167","IN" +"1249847168","1249847839","US" +"1249847840","1249847871","IN" +"1249847872","1249847903","US" +"1249847904","1249847935","NO" +"1249847936","1249848927","US" +"1249848928","1249848959","AU" +"1249848960","1249850367","US" +"1249850368","1249850383","IN" +"1249850384","1249850511","US" +"1249850512","1249850527","CA" +"1249850528","1249850543","US" +"1249850544","1249850559","IN" +"1249850560","1249850575","US" +"1249850576","1249850591","IN" +"1249850592","1249850607","NG" +"1249850608","1249851903","US" +"1249851904","1249852159","FR" +"1249852160","1249852447","US" +"1249852448","1249852479","IN" +"1249852480","1249852727","US" +"1249852728","1249852735","CY" +"1249852736","1249852767","US" +"1249852768","1249852775","ID" +"1249852776","1249886207","US" +"1249886208","1249902591","CA" +"1249902592","1254490111","US" +"1254490112","1254555647","CA" +"1254555648","1254604047","US" +"1254604048","1254604063","ES" +"1254604064","1254604159","US" +"1254604160","1254604175","GB" +"1254604176","1254604191","US" +"1254604192","1254604199","IE" +"1254604200","1254621183","US" +"1254621184","1254629375","CA" +"1254629376","1254688511","US" +"1254688512","1254688543","CA" +"1254688544","1254690495","US" +"1254690496","1254690503","CA" +"1254690504","1254704383","US" +"1254704384","1254704639","PH" +"1254704640","1254704903","US" +"1254704904","1254704911","PH" +"1254704912","1254713359","US" +"1254713360","1254713407","CA" +"1254713408","1254752191","US" +"1254752192","1254752207","CH" +"1254752208","1254924687","US" +"1254924688","1254924703","RO" +"1254924704","1254948927","US" +"1254948928","1254948935","SG" +"1254948936","1254949247","US" +"1254949248","1254949279","IN" +"1254949280","1254950199","US" +"1254950200","1254950207","IL" +"1254950208","1254950671","US" +"1254950672","1254950679","RU" +"1254950680","1254950687","CA" +"1254950688","1254950751","US" +"1254950752","1254950759","IL" +"1254950760","1254950767","US" +"1254950768","1254950775","GR" +"1254950776","1254950847","US" +"1254950848","1254950855","IL" +"1254950856","1254950919","US" +"1254950920","1254950927","CA" +"1254950928","1254950951","US" +"1254950952","1254950959","IN" +"1254950960","1254951247","US" +"1254951248","1254951263","CA" +"1254951264","1254951431","US" +"1254951432","1254951439","CA" +"1254951440","1254951471","US" +"1254951472","1254951479","MX" +"1254951480","1254951591","US" +"1254951592","1254951599","IL" +"1254951600","1254951607","US" +"1254951608","1254951615","IN" +"1254951616","1254951631","US" +"1254951632","1254951639","JP" +"1254951640","1254951655","US" +"1254951656","1254951663","CA" +"1254951664","1254951871","US" +"1254951872","1254951887","TH" +"1254951888","1254952047","US" +"1254952048","1254952055","MX" +"1254952056","1254952255","US" +"1254952256","1254952263","CA" +"1254952264","1254952279","US" +"1254952280","1254952287","CA" +"1254952288","1254952295","IL" +"1254952296","1254952591","US" +"1254952592","1254952599","CA" +"1254952600","1254952927","US" +"1254952928","1254952935","CA" +"1254952936","1254953031","US" +"1254953032","1254953039","CA" +"1254953040","1254953047","ZA" +"1254953048","1254953055","US" +"1254953056","1254953063","IL" +"1254953064","1254953071","US" +"1254953072","1254953079","CA" +"1254953080","1254953087","US" +"1254953088","1254953095","CA" +"1254953096","1254953279","US" +"1254953280","1254953295","BD" +"1254953296","1254953327","US" +"1254953328","1254953343","NL" +"1254953344","1254953615","US" +"1254953616","1254953623","GB" +"1254953624","1254953639","US" +"1254953640","1254953647","TW" +"1254953648","1254953743","US" +"1254953744","1254953751","IN" +"1254953752","1254953759","US" +"1254953760","1254953767","IN" +"1254953768","1254953775","GB" +"1254953776","1254953815","US" +"1254953816","1254953823","GT" +"1254953824","1254953855","US" +"1254953856","1254953879","NL" +"1254953880","1254953919","US" +"1254953920","1254953935","NL" +"1254953936","1254954255","US" +"1254954256","1254954263","CA" +"1254954264","1254954287","US" +"1254954288","1254954295","CA" +"1254954296","1254954319","US" +"1254954320","1254954327","CA" +"1254954328","1254954343","US" +"1254954344","1254954351","TH" +"1254954352","1254954639","US" +"1254954640","1254954647","GB" +"1254954648","1254954655","CA" +"1254954656","1254954663","US" +"1254954664","1254954671","GB" +"1254954672","1254954887","US" +"1254954888","1254954895","IL" +"1254954896","1254955103","US" +"1254955104","1254955111","GB" +"1254955112","1254955599","US" +"1254955600","1254955607","GB" +"1254955608","1254955735","US" +"1254955736","1254955743","GB" +"1254955744","1254956135","US" +"1254956136","1254956143","IL" +"1254956144","1254956383","US" +"1254956384","1254956391","IL" +"1254956392","1254957055","US" +"1254957056","1254957063","GB" +"1254957064","1254957071","MX" +"1254957072","1254957239","US" +"1254957240","1254957247","GB" +"1254957248","1254957255","MT" +"1254957256","1254957287","US" +"1254957288","1254957295","IN" +"1254957296","1254957311","US" +"1254957312","1254957327","CA" +"1254957328","1254957375","US" +"1254957376","1254957391","CA" +"1254957392","1254957407","US" +"1254957408","1254957423","IN" +"1254957424","1254957983","US" +"1254957984","1254957991","MX" +"1254957992","1254958303","US" +"1254958304","1254958319","GB" +"1254958320","1254958351","US" +"1254958352","1254958359","BO" +"1254958360","1254958423","US" +"1254958424","1254958431","NO" +"1254958432","1254958535","US" +"1254958536","1254958543","CA" +"1254958544","1254958855","US" +"1254958856","1254958863","NZ" +"1254958864","1254958895","US" +"1254958896","1254958903","CA" +"1254958904","1254959151","US" +"1254959152","1254959183","CA" +"1254959184","1254959391","US" +"1254959392","1254959399","GB" +"1254959400","1254959671","US" +"1254959672","1254959679","GB" +"1254959680","1254959775","US" +"1254959776","1254959783","KR" +"1254959784","1254959799","US" +"1254959800","1254959807","GB" +"1254959808","1254959927","US" +"1254959928","1254959935","MX" +"1254959936","1254959943","US" +"1254959944","1254959951","CA" +"1254959952","1254959991","US" +"1254959992","1254959999","MX" +"1254960000","1254960039","US" +"1254960040","1254960047","IN" +"1254960048","1254960279","US" +"1254960280","1254960287","JM" +"1254960288","1254960351","US" +"1254960352","1254960359","AU" +"1254960360","1254960367","CA" +"1254960368","1254960415","US" +"1254960416","1254960423","CA" +"1254960424","1254960447","US" +"1254960448","1254960455","AU" +"1254960456","1254960463","US" +"1254960464","1254960471","SG" +"1254960472","1254960479","AU" +"1254960480","1254960487","US" +"1254960488","1254960495","GB" +"1254960496","1254960559","US" +"1254960560","1254960567","MY" +"1254960568","1254960583","US" +"1254960584","1254960591","MY" +"1254960592","1254960655","US" +"1254960656","1254960663","CA" +"1254960664","1254960879","US" +"1254960880","1254960887","CA" +"1254960888","1254960903","US" +"1254960904","1254960911","NZ" +"1254960912","1254960935","US" +"1254960936","1254960943","IN" +"1254960944","1254960967","US" +"1254960968","1254960975","IN" +"1254960976","1254961567","US" +"1254961568","1254961599","BD" +"1254961600","1254961743","US" +"1254961744","1254961751","ZA" +"1254961752","1254961767","GB" +"1254961768","1254961823","US" +"1254961824","1254961831","AE" +"1254961832","1254961911","US" +"1254961912","1254961919","CA" +"1254961920","1254962015","US" +"1254962016","1254962023","AE" +"1254962024","1254962191","US" +"1254962192","1254962199","GB" +"1254962200","1254962351","US" +"1254962352","1254962359","GB" +"1254962360","1254962511","US" +"1254962512","1254962527","JP" +"1254962528","1254962695","US" +"1254962696","1254962703","GB" +"1254962704","1254962799","US" +"1254962800","1254962807","CA" +"1254962808","1254962855","US" +"1254962856","1254962863","CA" +"1254962864","1254962951","US" +"1254962952","1254962959","NZ" +"1254962960","1254962975","US" +"1254962976","1254962983","CA" +"1254962984","1254963047","US" +"1254963048","1254963055","MX" +"1254963056","1254963583","US" +"1254963584","1254963591","AU" +"1254963592","1254963663","US" +"1254963664","1254963671","GB" +"1254963672","1254964079","US" +"1254964080","1254964087","DK" +"1254964088","1254964255","US" +"1254964256","1254964263","BR" +"1254964264","1254964335","US" +"1254964336","1254964343","NZ" +"1254964344","1254964351","PR" +"1254964352","1254964391","US" +"1254964392","1254964399","AU" +"1254964400","1254964639","US" +"1254964640","1254964671","AU" +"1254964672","1254964799","US" +"1254964800","1254964815","CA" +"1254964816","1254964927","US" +"1254964928","1254964943","CA" +"1254964944","1254965095","US" +"1254965096","1254965103","IN" +"1254965104","1254965239","US" +"1254965240","1254965247","GB" +"1254965248","1254965431","US" +"1254965432","1254965439","GB" +"1254965440","1254965735","US" +"1254965736","1254965743","CA" +"1254965744","1254965887","US" +"1254965888","1254965895","MX" +"1254965896","1254966031","US" +"1254966032","1254966039","CA" +"1254966040","1254966135","US" +"1254966136","1254966143","GB" +"1254966144","1254966239","US" +"1254966240","1254966247","AU" +"1254966248","1254966383","US" +"1254966384","1254966391","ZA" +"1254966392","1254966487","US" +"1254966488","1254966495","IE" +"1254966496","1254966567","US" +"1254966568","1254966575","ZA" +"1254966576","1254966607","US" +"1254966608","1254966615","JO" +"1254966616","1254966655","US" +"1254966656","1254966663","GB" +"1254966664","1254966863","US" +"1254966864","1254966879","IL" +"1254966880","1254966927","US" +"1254966928","1254966943","FR" +"1254966944","1254966975","US" +"1254966976","1254966991","IL" +"1254966992","1254967079","US" +"1254967080","1254967087","PH" +"1254967088","1254967279","US" +"1254967280","1254967287","FR" +"1254967288","1254967519","US" +"1254967520","1254967535","CA" +"1254967536","1254967607","US" +"1254967608","1254967615","CA" +"1254967616","1254967647","US" +"1254967648","1254967655","EG" +"1254967656","1254967887","US" +"1254967888","1254967895","CA" +"1254967896","1254967975","US" +"1254967976","1254967991","IN" +"1254967992","1254968039","US" +"1254968040","1254968047","CA" +"1254968048","1254968103","US" +"1254968104","1254968111","UY" +"1254968112","1254968295","US" +"1254968296","1254968303","IT" +"1254968304","1254968391","US" +"1254968392","1254968399","SG" +"1254968400","1254968487","US" +"1254968488","1254968495","CA" +"1254968496","1254968503","US" +"1254968504","1254968511","GB" +"1254968512","1254968671","US" +"1254968672","1254968679","DO" +"1254968680","1254968751","US" +"1254968752","1254968759","GB" +"1254968760","1254968927","US" +"1254968928","1254968935","CA" +"1254968936","1254968951","US" +"1254968952","1254968959","GB" +"1254968960","1254968991","US" +"1254968992","1254968999","CA" +"1254969000","1254969111","US" +"1254969112","1254969127","AU" +"1254969128","1254969175","US" +"1254969176","1254969183","AU" +"1254969184","1254969247","US" +"1254969248","1254969255","CO" +"1254969256","1254969263","BD" +"1254969264","1254969287","US" +"1254969288","1254969295","GB" +"1254969296","1254969311","US" +"1254969312","1254969319","CA" +"1254969320","1254969399","US" +"1254969400","1254969407","CA" +"1254969408","1254969423","US" +"1254969424","1254969431","CA" +"1254969432","1254969439","GB" +"1254969440","1254969447","CA" +"1254969448","1254969455","US" +"1254969456","1254969463","IL" +"1254969464","1254969471","GB" +"1254969472","1254969495","US" +"1254969496","1254969503","DK" +"1254969504","1254969551","US" +"1254969552","1254969559","CA" +"1254969560","1254969567","GB" +"1254969568","1254969575","US" +"1254969576","1254969583","AE" +"1254969584","1254969727","US" +"1254969728","1254969735","CA" +"1254969736","1254970047","US" +"1254970048","1254970063","CA" +"1254970064","1254970095","US" +"1254970096","1254970111","AE" +"1254970112","1254970167","US" +"1254970168","1254970175","GB" +"1254970176","1254970183","US" +"1254970184","1254970191","GB" +"1254970192","1254970287","US" +"1254970288","1254970295","IN" +"1254970296","1254970335","US" +"1254970336","1254970343","CH" +"1254970344","1254970527","US" +"1254970528","1254970543","GB" +"1254970544","1254970591","US" +"1254970592","1254970607","PH" +"1254970608","1254970623","GH" +"1254970624","1254970631","MX" +"1254970632","1254970903","US" +"1254970904","1254970911","CA" +"1254970912","1254971007","US" +"1254971008","1254971015","JP" +"1254971016","1254971023","IN" +"1254971024","1254971055","US" +"1254971056","1254971063","GB" +"1254971064","1254971143","US" +"1254971144","1254971151","CA" +"1254971152","1254971231","US" +"1254971232","1254971239","IN" +"1254971240","1254971255","US" +"1254971256","1254971263","CA" +"1254971264","1254971319","US" +"1254971320","1254971327","MX" +"1254971328","1254971951","US" +"1254971952","1254971959","GB" +"1254971960","1254971967","IN" +"1254971968","1254972239","US" +"1254972240","1254972247","CA" +"1254972248","1254972407","US" +"1254972408","1254972415","AU" +"1254972416","1254972431","US" +"1254972432","1254972439","AU" +"1254972440","1254972447","US" +"1254972448","1254972455","GG" +"1254972456","1254972727","US" +"1254972728","1254972735","AU" +"1254972736","1254972879","US" +"1254972880","1254972895","MX" +"1254972896","1254972983","US" +"1254972984","1254972991","CA" +"1254972992","1254973015","US" +"1254973016","1254973023","BR" +"1254973024","1254973047","US" +"1254973048","1254973055","AU" +"1254973056","1254973471","US" +"1254973472","1254973479","IN" +"1254973480","1254973575","US" +"1254973576","1254973583","MX" +"1254973584","1254973663","US" +"1254973664","1254973671","PH" +"1254973672","1254973679","US" +"1254973680","1254973687","IN" +"1254973688","1254973695","US" +"1254973696","1254973703","MY" +"1254973704","1254973807","US" +"1254973808","1254973815","IN" +"1254973816","1254973895","US" +"1254973896","1254973903","MX" +"1254973904","1254974167","US" +"1254974168","1254974175","MX" +"1254974176","1254974327","US" +"1254974328","1254974335","MX" +"1254974336","1254974367","US" +"1254974368","1254974375","CA" +"1254974376","1254974391","US" +"1254974392","1254974399","CA" +"1254974400","1254974511","US" +"1254974512","1254974519","IL" +"1254974520","1254974647","US" +"1254974648","1254974655","CA" +"1254974656","1254974767","US" +"1254974768","1254974775","GB" +"1254974776","1254974887","US" +"1254974888","1254974895","AU" +"1254974896","1254974951","US" +"1254974952","1254974959","NZ" +"1254974960","1254975231","US" +"1254975232","1254975239","AU" +"1254975240","1254975415","US" +"1254975416","1254975423","CA" +"1254975424","1254975471","US" +"1254975472","1254975487","GB" +"1254975488","1254975615","US" +"1254975616","1254975623","IN" +"1254975624","1254975887","US" +"1254975888","1254975895","IN" +"1254975896","1254975919","US" +"1254975920","1254975927","IN" +"1254975928","1254975935","CA" +"1254975936","1254976023","US" +"1254976024","1254976031","GB" +"1254976032","1254976127","US" +"1254976128","1254976135","AU" +"1254976136","1254976151","US" +"1254976152","1254976167","CA" +"1254976168","1254976303","US" +"1254976304","1254976311","GB" +"1254976312","1254976351","US" +"1254976352","1254976359","GB" +"1254976360","1254976399","US" +"1254976400","1254976407","MX" +"1254976408","1254976735","US" +"1254976736","1254976751","CA" +"1254976752","1254976767","US" +"1254976768","1254976775","GB" +"1254976776","1254976791","US" +"1254976792","1254976799","IN" +"1254976800","1254976903","US" +"1254976904","1254976911","MX" +"1254976912","1254977095","US" +"1254977096","1254977103","CO" +"1254977104","1254977135","US" +"1254977136","1254977143","NZ" +"1254977144","1254977159","US" +"1254977160","1254977167","IN" +"1254977168","1254977247","US" +"1254977248","1254977255","CL" +"1254977256","1254977455","US" +"1254977456","1254977471","IN" +"1254977472","1254977487","US" +"1254977488","1254977503","TH" +"1254977504","1254977647","US" +"1254977648","1254977655","AE" +"1254977656","1254977735","US" +"1254977736","1254977743","NZ" +"1254977744","1254977791","US" +"1254977792","1254977799","GB" +"1254977800","1254978183","US" +"1254978184","1254978191","GB" +"1254978192","1254978327","US" +"1254978328","1254978335","IN" +"1254978336","1254978375","US" +"1254978376","1254978383","BR" +"1254978384","1254978391","CA" +"1254978392","1254978447","US" +"1254978448","1254978463","IN" +"1254978464","1254978495","US" +"1254978496","1254978559","NL" +"1254978560","1254978751","US" +"1254978752","1254978767","LB" +"1254978768","1254979407","US" +"1254979408","1254979423","CA" +"1254979424","1254989823","US" +"1254989824","1254998015","CA" +"1254998016","1255002111","US" +"1255002112","1255006207","CA" +"1255006208","1255007487","US" +"1255007488","1255007711","CA" +"1255007712","1255011343","US" +"1255011344","1255011359","CA" +"1255011360","1255011375","US" +"1255011376","1255011551","CA" +"1255011552","1255011559","US" +"1255011560","1255011839","CA" +"1255011840","1255039631","US" +"1255039632","1255039663","CA" +"1255039664","1255042751","US" +"1255042752","1255042783","CA" +"1255042784","1255047167","US" +"1255047168","1255055359","CA" +"1255055360","1255057887","US" +"1255057888","1255057919","NL" +"1255057920","1255058671","US" +"1255058672","1255058687","GB" +"1255058688","1255059327","US" +"1255059328","1255059343","NL" +"1255059344","1255059359","US" +"1255059360","1255059391","CA" +"1255059392","1255060159","US" +"1255060160","1255060191","NL" +"1255060192","1255060607","US" +"1255060608","1255060623","AN" +"1255060624","1255060655","US" +"1255060656","1255060671","AN" +"1255060672","1255061631","US" +"1255061632","1255061647","CA" +"1255061648","1255061695","US" +"1255061696","1255061727","CR" +"1255061728","1255061983","US" +"1255061984","1255062015","CA" +"1255062016","1255062463","US" +"1255062464","1255062527","PA" +"1255062528","1255063551","US" +"1255063552","1255071743","PR" +"1255071744","1255210495","US" +"1255210496","1255211007","DE" +"1255211008","1255245311","US" +"1255245312","1255245567","BR" +"1255245568","1255264511","US" +"1255264512","1255264767","SG" +"1255264768","1255265279","US" +"1255265280","1255266303","SG" +"1255266304","1255274047","US" +"1255274048","1255274079","GB" +"1255274080","1255274495","US" +"1255274496","1255274751","SG" +"1255274752","1255276543","US" +"1255276544","1255342079","CA" +"1255342080","1255367167","US" +"1255367168","1255367423","DE" +"1255367424","1255372287","US" +"1255372288","1255372543","PA" +"1255372544","1255372799","US" +"1255372800","1255373055","DE" +"1255373056","1255373567","US" +"1255373568","1255373599","PH" +"1255373600","1255489535","US" +"1255489536","1255505919","PR" +"1255505920","1255514111","US" +"1255514112","1255522303","CA" +"1255522304","1255571455","US" +"1255571456","1255579647","CA" +"1255579648","1255669759","US" +"1255669760","1255735295","CA" +"1255735296","1255746799","US" +"1255746800","1255746815","BB" +"1255746816","1255749247","US" +"1255749248","1255749311","CH" +"1255749312","1255756799","US" +"1255756800","1255756815","CA" +"1255756816","1255768063","US" +"1255768064","1255768575","CA" +"1255768576","1255770367","US" +"1255770368","1255770623","CA" +"1255770624","1255776431","US" +"1255776432","1255776439","LB" +"1255776440","1255784959","US" +"1255784960","1255784967","BE" +"1255784968","1255788511","US" +"1255788512","1255788543","BE" +"1255788544","1255792127","US" +"1255792128","1255792383","IL" +"1255792384","1255792767","US" +"1255792768","1255792895","IL" +"1255792896","1255972863","US" +"1255972864","1255981055","CA" +"1255981056","1256001535","US" +"1256001536","1256005631","CA" +"1256005632","1256054271","US" +"1256054272","1256054303","CZ" +"1256054304","1256057975","US" +"1256057976","1256057983","BZ" +"1256057984","1256058719","US" +"1256058720","1256058727","CA" +"1256058728","1256079359","US" +"1256079360","1256087551","KY" +"1256087552","1258767359","US" +"1258767360","1258767615","A1" +"1258767616","1258958095","US" +"1258958096","1258958103","CA" +"1258958104","1263263999","US" +"1263264000","1263264127","CA" +"1263264128","1263264511","US" +"1263264512","1263264767","CA" +"1263264768","1263268275","US" +"1263268276","1263268340","CA" +"1263268341","1263268343","US" +"1263268344","1263268351","CA" +"1263268352","1263270143","US" +"1263270144","1263270159","CA" +"1263270160","1263271423","US" +"1263271424","1263271679","CA" +"1263271680","1264717823","US" +"1264717824","1264718079","CA" +"1264718080","1264718719","US" +"1264718720","1264718847","CA" +"1264718848","1264719103","US" +"1264719104","1264719871","CA" +"1264719872","1264733759","US" +"1264733760","1264733823","IL" +"1264733824","1264762879","US" +"1264762880","1264763391","CA" +"1264763392","1264763647","IE" +"1264763648","1264764927","CA" +"1264764928","1264764959","US" +"1264764960","1264766975","CA" +"1264766976","1264968406","US" +"1264968407","1264968407","A1" +"1264968408","1264980735","US" +"1264980736","1264980743","CA" +"1264980744","1264982847","US" +"1264982848","1264982855","CA" +"1264982856","1264982895","US" +"1264982896","1264982903","AF" +"1264982904","1264984575","US" +"1264984576","1264984583","VE" +"1264984584","1264984799","US" +"1264984800","1264984807","AF" +"1264984808","1264990975","US" +"1264990976","1264991231","NL" +"1264991232","1266107759","US" +"1266107760","1266107775","UM" +"1266107776","1266147327","US" +"1266147328","1266155519","CA" +"1266155520","1266489663","US" +"1266489664","1266489695","CA" +"1266489696","1266498175","US" +"1266498176","1266498303","MA" +"1266498304","1266516817","US" +"1266516818","1266516830","IE" +"1266516831","1268252671","US" +"1268252672","1268776959","CA" +"1268776960","1275600895","US" +"1275600896","1275604991","BM" +"1275604992","1275605263","US" +"1275605264","1275605279","PL" +"1275605280","1275605567","US" +"1275605568","1275605583","PL" +"1275605584","1275605823","US" +"1275605824","1275605839","PL" +"1275605840","1275606207","US" +"1275606208","1275606223","PL" +"1275606224","1275606367","US" +"1275606368","1275606383","PL" +"1275606384","1275606975","US" +"1275606976","1275606991","PL" +"1275606992","1275607071","US" +"1275607072","1275607087","PL" +"1275607088","1275607407","US" +"1275607408","1275607423","PL" +"1275607424","1275608319","US" +"1275608320","1275608335","PL" +"1275608336","1275608575","US" +"1275608576","1275608591","PL" +"1275608592","1275608831","US" +"1275608832","1275608847","PL" +"1275608848","1275621375","US" +"1275621376","1275625471","CA" +"1275625472","1275658239","US" +"1275658240","1275658495","GB" +"1275658496","1275659007","US" +"1275659008","1275659263","GB" +"1275659264","1275665151","US" +"1275665152","1275665407","UA" +"1275665408","1275666431","US" +"1275666432","1275674623","CA" +"1275674624","1275707391","US" +"1275707392","1275708927","CA" +"1275708928","1275709183","US" +"1275709184","1275711487","CA" +"1275711488","1275712511","US" +"1275712512","1275714047","CA" +"1275714048","1275714559","US" +"1275714560","1275715583","CA" +"1275715584","1275756543","US" +"1275756544","1275772927","CA" +"1275772928","1275789311","US" +"1275789312","1275822079","CA" +"1275822080","1275854967","US" +"1275854968","1275854975","CA" +"1275854976","1275858215","US" +"1275858216","1275858223","BB" +"1275858224","1275858239","US" +"1275858240","1275858247","CA" +"1275858248","1275859671","US" +"1275859672","1275859679","AU" +"1275859680","1275859711","US" +"1275859712","1275859719","PR" +"1275859720","1275859727","US" +"1275859728","1275859743","PR" +"1275859744","1275859807","US" +"1275859808","1275859815","AE" +"1275859816","1275860087","US" +"1275860088","1275860095","MX" +"1275860096","1275861039","US" +"1275861040","1275861055","CA" +"1275861056","1275861103","US" +"1275861104","1275861119","GT" +"1275861120","1275862183","US" +"1275862184","1275862191","JO" +"1275862192","1275864175","US" +"1275864176","1275864183","CA" +"1275864184","1275865055","US" +"1275865056","1275865063","AU" +"1275865064","1275865383","US" +"1275865384","1275865391","CA" +"1275865392","1275865711","US" +"1275865712","1275865719","SA" +"1275865720","1275869087","US" +"1275869088","1275869095","CA" +"1275869096","1275869103","IL" +"1275869104","1275869535","US" +"1275869536","1275869551","GB" +"1275869552","1275869895","US" +"1275869896","1275869903","IL" +"1275869904","1275869935","US" +"1275869936","1275869943","PK" +"1275869944","1275870647","US" +"1275870648","1275870655","CA" +"1275870656","1275870671","US" +"1275870672","1275870695","CA" +"1275870696","1275871719","US" +"1275871720","1275871727","GB" +"1275871728","1275872895","US" +"1275872896","1275872903","AU" +"1275872904","1275872911","CA" +"1275872912","1275872927","US" +"1275872928","1275872935","CA" +"1275872936","1275873095","US" +"1275873096","1275873103","CA" +"1275873104","1275873183","US" +"1275873184","1275873215","AU" +"1275873216","1275873535","US" +"1275873536","1275873543","CG" +"1275873544","1275873639","US" +"1275873640","1275873647","SA" +"1275873648","1275875135","US" +"1275875136","1275875143","CA" +"1275875144","1275875247","US" +"1275875248","1275875255","CA" +"1275875256","1275875359","US" +"1275875360","1275875367","AU" +"1275875368","1275875479","US" +"1275875480","1275875503","AU" +"1275875504","1275875767","US" +"1275875768","1275875775","CA" +"1275875776","1275876623","US" +"1275876624","1275876631","GB" +"1275876632","1275876839","US" +"1275876840","1275876847","CA" +"1275876848","1275877111","US" +"1275877112","1275877119","CA" +"1275877120","1275877695","US" +"1275877696","1275877703","PK" +"1275877704","1275879463","US" +"1275879464","1275879471","GB" +"1275879472","1275879487","AU" +"1275879488","1275879519","GB" +"1275879520","1275879527","AU" +"1275879528","1275879535","US" +"1275879536","1275879551","AU" +"1275879552","1275879711","US" +"1275879712","1275879743","CA" +"1275879744","1275879791","US" +"1275879792","1275879807","GB" +"1275879808","1275880079","US" +"1275880080","1275880095","AU" +"1275880096","1275880191","US" +"1275880192","1275880207","MX" +"1275880208","1275880247","US" +"1275880248","1275880255","CA" +"1275880256","1275880783","US" +"1275880784","1275880799","CA" +"1275880800","1275881791","US" +"1275881792","1275881799","AU" +"1275881800","1275881807","CA" +"1275881808","1275881847","US" +"1275881848","1275881871","CA" +"1275881872","1275881887","US" +"1275881888","1275881895","CA" +"1275881896","1275883991","US" +"1275883992","1275883999","CA" +"1275884000","1275884391","US" +"1275884392","1275884399","AU" +"1275884400","1275885551","US" +"1275885552","1275885559","IT" +"1275885560","1275885567","US" +"1275885568","1275885583","IT" +"1275885584","1275885647","US" +"1275885648","1275885655","AU" +"1275885656","1275886703","US" +"1275886704","1275886719","CA" +"1275886720","1275886735","US" +"1275886736","1275886743","AU" +"1275886744","1275886855","US" +"1275886856","1275886863","IT" +"1275886864","1275886879","US" +"1275886880","1275886895","IT" +"1275886896","1275886983","US" +"1275886984","1275886991","PA" +"1275886992","1275887063","US" +"1275887064","1275887071","AE" +"1275887072","1275887079","US" +"1275887080","1275887087","AE" +"1275887088","1275888015","US" +"1275888016","1275888023","IN" +"1275888024","1275888039","US" +"1275888040","1275888047","GB" +"1275888048","1275888095","US" +"1275888096","1275888127","ZA" +"1275888128","1275888311","US" +"1275888312","1275888319","DE" +"1275888320","1275889695","US" +"1275889696","1275889711","CA" +"1275889712","1275889967","US" +"1275889968","1275889983","DE" +"1275889984","1275890039","US" +"1275890040","1275890047","CA" +"1275890048","1275890087","US" +"1275890088","1275890095","GB" +"1275890096","1275890191","US" +"1275890192","1275890207","SA" +"1275890208","1275890359","US" +"1275890360","1275890367","CA" +"1275890368","1275890423","US" +"1275890424","1275890431","NL" +"1275890432","1275890687","US" +"1275890688","1275890703","DE" +"1275890704","1275890735","US" +"1275890736","1275890751","NL" +"1275890752","1275891007","US" +"1275891008","1275891015","CA" +"1275891016","1275891063","US" +"1275891064","1275891071","LB" +"1275891072","1275891191","US" +"1275891192","1275891199","DE" +"1275891200","1275891463","US" +"1275891464","1275891471","IE" +"1275891472","1275891511","US" +"1275891512","1275891519","AU" +"1275891520","1275892255","US" +"1275892256","1275892279","DK" +"1275892280","1275892423","US" +"1275892424","1275892431","GB" +"1275892432","1275892735","US" +"1275892736","1275892767","GB" +"1275892768","1275892951","US" +"1275892952","1275892967","GB" +"1275892968","1275893303","US" +"1275893304","1275893311","CA" +"1275893312","1275893455","US" +"1275893456","1275893463","MX" +"1275893464","1275893663","US" +"1275893664","1275893679","CA" +"1275893680","1275893775","US" +"1275893776","1275893791","MX" +"1275893792","1275894327","US" +"1275894328","1275894335","GB" +"1275894336","1275894383","US" +"1275894384","1275894399","GB" +"1275894400","1275894519","US" +"1275894520","1275894527","AU" +"1275894528","1275894831","US" +"1275894832","1275894863","AU" +"1275894864","1275895023","US" +"1275895024","1275895039","CA" +"1275895040","1275895095","US" +"1275895096","1275895103","CG" +"1275895104","1275895135","US" +"1275895136","1275895143","SA" +"1275895144","1275895159","US" +"1275895160","1275895167","CA" +"1275895168","1275895191","US" +"1275895192","1275895199","GB" +"1275895200","1275895263","US" +"1275895264","1275895271","NG" +"1275895272","1275896951","US" +"1275896952","1275896959","PK" +"1275896960","1275898247","US" +"1275898248","1275898255","IT" +"1275898256","1275898319","US" +"1275898320","1275898335","IT" +"1275898336","1275898783","US" +"1275898784","1275898791","AU" +"1275898792","1275898799","US" +"1275898800","1275898807","AU" +"1275898808","1275899223","US" +"1275899224","1275899231","PT" +"1275899232","1275899887","US" +"1275899888","1275899903","NO" +"1275899904","1275899951","US" +"1275899952","1275899967","NG" +"1275899968","1275900271","US" +"1275900272","1275900287","GB" +"1275900288","1275900455","US" +"1275900456","1275900479","AU" +"1275900480","1275901007","US" +"1275901008","1275901023","PT" +"1275901024","1275901135","US" +"1275901136","1275901143","IL" +"1275901144","1275901439","US" +"1275901440","1275901455","GB" +"1275901456","1275901511","US" +"1275901512","1275901519","MX" +"1275901520","1275901783","US" +"1275901784","1275901791","NG" +"1275901792","1275901991","US" +"1275901992","1275902015","NG" +"1275902016","1275902031","US" +"1275902032","1275902039","GB" +"1275902040","1275902047","US" +"1275902048","1275902079","GB" +"1275902080","1275902095","CR" +"1275902096","1275902119","US" +"1275902120","1275902127","NG" +"1275902128","1275902303","US" +"1275902304","1275902311","CA" +"1275902312","1275902335","US" +"1275902336","1275902343","PK" +"1275902344","1275902383","US" +"1275902384","1275902391","CA" +"1275902392","1275903775","US" +"1275903776","1275903839","NO" +"1275903840","1275903863","US" +"1275903864","1275903871","CA" +"1275903872","1275904823","US" +"1275904824","1275904831","NG" +"1275904832","1275904991","US" +"1275904992","1275905023","CA" +"1275905024","1275905767","US" +"1275905768","1275905783","GB" +"1275905784","1275905791","ZA" +"1275905792","1275906343","US" +"1275906344","1275906351","CA" +"1275906352","1275907071","US" +"1275907072","1275907079","CA" +"1275907080","1275907911","US" +"1275907912","1275907919","HK" +"1275907920","1275908431","US" +"1275908432","1275908447","GB" +"1275908448","1275909439","US" +"1275909440","1275909455","GB" +"1275909456","1275910207","US" +"1275910208","1275910223","PA" +"1275910224","1275910503","US" +"1275910504","1275910511","IN" +"1275910512","1275911655","US" +"1275911656","1275911663","CA" +"1275911664","1275911935","US" +"1275911936","1275911967","CA" +"1275911968","1275912759","US" +"1275912760","1275912783","CA" +"1275912784","1275912799","AU" +"1275912800","1275912879","US" +"1275912880","1275912887","PT" +"1275912888","1275914135","US" +"1275914136","1275914143","AU" +"1275914144","1275915655","US" +"1275915656","1275915663","MX" +"1275915664","1275916167","US" +"1275916168","1275916199","CA" +"1275916200","1275916351","US" +"1275916352","1275916383","NL" +"1275916384","1275916887","US" +"1275916888","1275916895","CA" +"1275916896","1275918431","US" +"1275918432","1275918463","PK" +"1275918464","1275918479","IN" +"1275918480","1275918719","US" +"1275918720","1275918735","CA" +"1275918736","1275918807","US" +"1275918808","1275918815","NG" +"1275918816","1275919263","US" +"1275919264","1275919279","IE" +"1275919280","1275919911","US" +"1275919912","1275919919","BR" +"1275919920","1275919935","US" +"1275919936","1275919967","BR" +"1275919968","1275919999","IE" +"1275920000","1275920015","GB" +"1275920016","1275920055","US" +"1275920056","1275920063","GB" +"1275920064","1275920079","US" +"1275920080","1275920095","CA" +"1275920096","1279262719","US" +"1279262720","1279787007","CA" +"1279787008","1279828567","US" +"1279828568","1279828575","CA" +"1279828576","1279828615","US" +"1279828616","1279828623","CA" +"1279828624","1279829711","US" +"1279829712","1279829759","FR" +"1279829760","1279848447","US" +"1279848448","1279852543","PR" +"1279852544","1279921919","US" +"1279921920","1279922047","IE" +"1279922048","1279940879","US" +"1279940880","1279940887","DE" +"1279940888","1279940943","US" +"1279940944","1279940959","DE" +"1279940960","1279940991","US" +"1279940992","1279940999","DE" +"1279941000","1279943679","US" +"1279943680","1279943743","PR" +"1279943744","1279950847","US" +"1279950848","1279951103","CA" +"1279951104","1279951167","US" +"1279951168","1279951199","CA" +"1279951200","1279951223","US" +"1279951224","1279952127","CA" +"1279952128","1279952159","US" +"1279952160","1279952175","CA" +"1279952176","1279952191","US" +"1279952192","1279952223","CA" +"1279952224","1279952231","US" +"1279952232","1279952239","CA" +"1279952240","1279952383","US" +"1279952384","1279952919","CA" +"1279952920","1279952927","VG" +"1279952928","1279952943","US" +"1279952944","1279953023","CA" +"1279953024","1279953055","VG" +"1279953056","1279953087","US" +"1279953088","1279953663","CA" +"1279953664","1279953687","US" +"1279953688","1279953727","CA" +"1279953728","1279953759","US" +"1279953760","1279953791","GB" +"1279953792","1279953935","CA" +"1279953936","1279953967","US" +"1279953968","1279954015","CA" +"1279954016","1279954047","US" +"1279954048","1279954095","CA" +"1279954096","1279954119","US" +"1279954120","1279954303","CA" +"1279954304","1279954431","US" +"1279954432","1279954495","CA" +"1279954496","1279954543","US" +"1279954544","1279954623","CA" +"1279954624","1279954655","US" +"1279954656","1279954719","CA" +"1279954720","1279954727","US" +"1279954728","1279954783","CA" +"1279954784","1279954839","US" +"1279954840","1279954879","CA" +"1279954880","1279954915","US" +"1279954916","1279954927","CA" +"1279954928","1279955095","US" +"1279955096","1279955103","BB" +"1279955104","1279955119","CA" +"1279955120","1279955151","US" +"1279955152","1279955159","AU" +"1279955160","1279956059","US" +"1279956060","1279956063","MX" +"1279956064","1279956071","US" +"1279956072","1279956079","CA" +"1279956080","1279956239","US" +"1279956240","1279956255","CA" +"1279956256","1279956311","US" +"1279956312","1279956351","CA" +"1279956352","1279956455","US" +"1279956456","1279956463","PA" +"1279956464","1279957172","US" +"1279957173","1279957173","IN" +"1279957174","1279957174","US" +"1279957175","1279957175","IN" +"1279957176","1279957179","US" +"1279957180","1279957180","IN" +"1279957181","1279957184","US" +"1279957185","1279957185","IN" +"1279957186","1279957252","US" +"1279957253","1279957253","IN" +"1279957254","1279957375","US" +"1279957376","1279957383","IN" +"1279957384","1279957431","US" +"1279957432","1279957439","IN" +"1279957440","1279957631","US" +"1279957632","1279957651","IN" +"1279957652","1279958305","US" +"1279958306","1279958306","IN" +"1279958307","1279959551","US" +"1279959552","1279959807","CA" +"1279959808","1279960063","US" +"1279960064","1279960127","CA" +"1279960128","1279960143","US" +"1279960144","1279960159","CA" +"1279960160","1279960223","US" +"1279960224","1279960319","CA" +"1279960320","1279960335","US" +"1279960336","1279960343","CA" +"1279960344","1279960415","US" +"1279960416","1279960527","CA" +"1279960528","1279960535","US" +"1279960536","1279960559","CA" +"1279960560","1279960567","MX" +"1279960568","1279962223","US" +"1279962224","1279962239","CA" +"1279962240","1279962783","US" +"1279962784","1279962791","CN" +"1279962792","1279962895","US" +"1279962896","1279962911","CA" +"1279962912","1279962927","CN" +"1279962928","1279962943","US" +"1279962944","1279962975","CN" +"1279962976","1279963135","US" +"1279963136","1279963391","IN" +"1279963392","1279963935","US" +"1279963936","1279963967","CA" +"1279963968","1279965183","US" +"1279965184","1279966207","CA" +"1279966208","1279967231","US" +"1279967232","1279971327","CA" +"1279971328","1279971583","US" +"1279971584","1279972095","CA" +"1279972096","1279973951","US" +"1279973952","1279973967","CA" +"1279973968","1279973983","US" +"1279973984","1279974015","IN" +"1279974016","1279974175","US" +"1279974176","1279974207","CN" +"1279974208","1279974271","CA" +"1279974272","1279974391","US" +"1279974392","1279974399","CA" +"1279974400","1279974799","US" +"1279974800","1279974815","CA" +"1279974816","1279975407","US" +"1279975408","1279975423","NZ" +"1279975424","1279975695","CA" +"1279975696","1279975967","US" +"1279975968","1279975975","HK" +"1279975976","1279975983","US" +"1279975984","1279976007","CA" +"1279976008","1279976031","US" +"1279976032","1279976063","KN" +"1279976064","1279976127","US" +"1279976128","1279976143","CA" +"1279976144","1279976159","US" +"1279976160","1279976959","CA" +"1279976960","1279977215","US" +"1279977216","1279977471","CA" +"1279977472","1279977727","US" +"1279977728","1279978111","CA" +"1279978112","1279978143","US" +"1279978144","1279978271","CA" +"1279978272","1279978303","US" +"1279978304","1279978367","CA" +"1279978368","1279978495","VG" +"1279978496","1279978683","US" +"1279978684","1279978692","IN" +"1279978693","1279978693","US" +"1279978694","1279978702","IN" +"1279978703","1279979424","US" +"1279979425","1279979425","IN" +"1279979426","1279979559","US" +"1279979560","1279979575","CA" +"1279979576","1279979583","US" +"1279979584","1279979647","CA" +"1279979648","1279979775","US" +"1279979776","1279980063","CA" +"1279980064","1279980071","US" +"1279980072","1279980079","BV" +"1279980080","1279980127","CA" +"1279980128","1279980151","US" +"1279980152","1279980159","CA" +"1279980160","1279980287","US" +"1279980288","1279981567","CA" +"1279981568","1279999999","US" +"1280000000","1280032767","CA" +"1280032768","1280040959","US" +"1280040960","1280043527","CA" +"1280043528","1280043535","US" +"1280043536","1280043551","CA" +"1280043552","1280043559","US" +"1280043560","1280043567","CA" +"1280043568","1280043607","US" +"1280043608","1280043679","CA" +"1280043680","1280043703","US" +"1280043704","1280043711","CA" +"1280043712","1280043719","US" +"1280043720","1280043751","CA" +"1280043752","1280043759","US" +"1280043760","1280043767","CA" +"1280043768","1280043775","US" +"1280043776","1280043807","CA" +"1280043808","1280043815","US" +"1280043816","1280043823","CA" +"1280043824","1280043831","US" +"1280043832","1280043959","CA" +"1280043960","1280043975","US" +"1280043976","1280044447","CA" +"1280044448","1280044455","US" +"1280044456","1280044463","CA" +"1280044464","1280044471","US" +"1280044472","1280044503","CA" +"1280044504","1280044535","US" +"1280044536","1280045063","CA" +"1280045064","1280045071","US" +"1280045072","1280045167","CA" +"1280045168","1280045175","US" +"1280045176","1280045183","CA" +"1280045184","1280045191","US" +"1280045192","1280045439","CA" +"1280045440","1280045463","US" +"1280045464","1280045511","CA" +"1280045512","1280045527","US" +"1280045528","1280045551","CA" +"1280045552","1280045559","US" +"1280045560","1280045711","CA" +"1280045712","1280045727","US" +"1280045728","1280045783","CA" +"1280045784","1280045791","US" +"1280045792","1280045879","CA" +"1280045880","1280045887","US" +"1280045888","1280046039","CA" +"1280046040","1280046055","US" +"1280046056","1280046167","CA" +"1280046168","1280046199","US" +"1280046200","1280046231","CA" +"1280046232","1280046239","US" +"1280046240","1280046247","CA" +"1280046248","1280046255","US" +"1280046256","1280046343","CA" +"1280046344","1280046351","US" +"1280046352","1280046423","CA" +"1280046424","1280046431","US" +"1280046432","1280046527","CA" +"1280046528","1280046551","US" +"1280046552","1280046751","CA" +"1280046752","1280046759","US" +"1280046760","1280046791","CA" +"1280046792","1280046799","US" +"1280046800","1280046871","CA" +"1280046872","1280046879","US" +"1280046880","1280046951","CA" +"1280046952","1280046959","US" +"1280046960","1280047095","CA" +"1280047096","1280047103","US" +"1280047104","1280047183","CA" +"1280047184","1280047191","US" +"1280047192","1280047495","CA" +"1280047496","1280047519","US" +"1280047520","1280047527","CA" +"1280047528","1280047535","NL" +"1280047536","1280047543","CA" +"1280047544","1280047551","US" +"1280047552","1280047583","CA" +"1280047584","1280047591","US" +"1280047592","1280047775","CA" +"1280047776","1280047783","US" +"1280047784","1280047799","CA" +"1280047800","1280047807","US" +"1280047808","1280047831","CA" +"1280047832","1280047839","US" +"1280047840","1280047967","CA" +"1280047968","1280047983","US" +"1280047984","1280047991","CA" +"1280047992","1280047999","US" +"1280048000","1280048095","CA" +"1280048096","1280048103","US" +"1280048104","1280048119","CA" +"1280048120","1280048127","US" +"1280048128","1280048399","CA" +"1280048400","1280048407","US" +"1280048408","1280048591","CA" +"1280048592","1280048599","US" +"1280048600","1280048607","CA" +"1280048608","1280048623","US" +"1280048624","1280048631","NL" +"1280048632","1280048639","US" +"1280048640","1280048735","CA" +"1280048736","1280048743","US" +"1280048744","1280048895","CA" +"1280048896","1280048903","US" +"1280048904","1280048911","CA" +"1280048912","1280048919","FR" +"1280048920","1280048991","CA" +"1280048992","1280049007","US" +"1280049008","1280049063","CA" +"1280049064","1280049071","US" +"1280049072","1280049095","CA" +"1280049096","1280049127","US" +"1280049128","1280049151","CA" +"1280049152","1280073727","US" +"1280073728","1280081919","CA" +"1280081920","1280090111","US" +"1280090112","1280091135","AG" +"1280091136","1280092159","VG" +"1280092160","1280093183","KN" +"1280093184","1280094207","VG" +"1280094208","1280095231","AI" +"1280095232","1280095487","KN" +"1280095488","1280097279","AG" +"1280097280","1280097791","LC" +"1280097792","1280098303","AG" +"1280098304","1280102399","PR" +"1280102400","1280131071","US" +"1280131072","1280139263","CA" +"1280139264","1287611402","US" +"1287611403","1287611403","A1" +"1287611404","1287612122","US" +"1287612123","1287612136","SE" +"1287612137","1287877503","US" +"1287877504","1287877567","UM" +"1287877568","1290252799","US" +"1290252800","1290252863","GB" +"1290252864","1291845631","US" +"1291845632","1292894207","DE" +"1292894208","1293156351","NO" +"1293156352","1293549567","DE" +"1293549568","1293680639","ES" +"1293680640","1293811711","MK" +"1293811712","1293942783","SA" +"1293942784","1294073855","PL" +"1294073856","1294204927","RU" +"1294204928","1294237695","RO" +"1294237696","1294270463","IR" +"1294270464","1294278463","DE" +"1294278464","1294278495","CA" +"1294278496","1294303231","DE" +"1294303232","1294335999","RU" +"1294336000","1294368767","SI" +"1294368768","1294401535","LV" +"1294401536","1294434303","RU" +"1294434304","1294467071","IT" +"1294467072","1294499839","RU" +"1294499840","1294532607","NO" +"1294532608","1294598143","RU" +"1294598144","1294630911","IT" +"1294630912","1294663679","LB" +"1294663680","1294696447","IT" +"1294696448","1294729215","RU" +"1294729216","1294761983","GB" +"1294761984","1294794751","SY" +"1294794752","1294827519","PL" +"1294827520","1294860287","RU" +"1294860288","1294893055","PL" +"1294893056","1294925823","RS" +"1294925824","1294958591","DE" +"1294958592","1294991359","UA" +"1294991360","1294998527","CZ" +"1294998528","1294998591","SK" +"1294998592","1295009023","CZ" +"1295009024","1295009407","SK" +"1295009408","1295047679","CZ" +"1295047680","1295048191","SK" +"1295048192","1295056895","CZ" +"1295056896","1295122431","GR" +"1295122432","1295253503","RU" +"1295253504","1295319039","UA" +"1295319040","1295349119","SE" +"1295349120","1295349247","NO" +"1295349248","1295384575","SE" +"1295384576","1295450111","PT" +"1295450112","1295515647","PL" +"1295515648","1295777791","CH" +"1295777792","1296039935","NL" +"1296039936","1296072703","SA" +"1296072704","1296105471","DE" +"1296105472","1296171007","PL" +"1296171008","1296171599","DK" +"1296171600","1296171600","DE" +"1296171601","1296171601","GB" +"1296171602","1296181743","DK" +"1296181744","1296181751","GB" +"1296181752","1296203775","DK" +"1296203776","1296236543","RU" +"1296236544","1296236671","FR" +"1296236672","1296236799","US" +"1296236800","1296237055","GB" +"1296237056","1296237311","FR" +"1296237312","1296237567","US" +"1296237568","1296238079","FR" +"1296238080","1296238591","DE" +"1296238592","1296239103","NL" +"1296239104","1296239231","FR" +"1296239232","1296239359","NL" +"1296239360","1296239615","DE" +"1296239616","1296240383","FR" +"1296240384","1296241151","BE" +"1296241152","1296241407","IT" +"1296241408","1296242175","NL" +"1296242176","1296242303","DE" +"1296242304","1296242431","NL" +"1296242432","1296242687","BE" +"1296242688","1296243199","FR" +"1296243200","1296243455","GB" +"1296243456","1296243711","DE" +"1296243712","1296244223","US" +"1296244224","1296244479","NL" +"1296244480","1296244735","GB" +"1296244736","1296244991","IR" +"1296244992","1296245247","CH" +"1296245248","1296245503","CA" +"1296245504","1296245759","NL" +"1296245760","1296246783","ES" +"1296246784","1296247295","NL" +"1296247296","1296247807","FR" +"1296247808","1296247871","US" +"1296247872","1296247999","FR" +"1296248000","1296248063","IE" +"1296248064","1296248191","FR" +"1296248192","1296248255","IE" +"1296248256","1296248318","BE" +"1296248319","1296248319","FR" +"1296248320","1296248383","BE" +"1296248384","1296248447","IT" +"1296248448","1296248575","US" +"1296248576","1296248703","IE" +"1296248704","1296248959","FR" +"1296248960","1296249024","DE" +"1296249025","1296249855","FR" +"1296249856","1296249887","US" +"1296249888","1296249951","FR" +"1296249952","1296250015","DE" +"1296250016","1296250047","IL" +"1296250048","1296250079","IE" +"1296250080","1296250111","IL" +"1296250112","1296250143","IE" +"1296250144","1296250175","GB" +"1296250176","1296250207","FR" +"1296250208","1296250239","ES" +"1296250240","1296250271","BE" +"1296250272","1296250303","DE" +"1296250304","1296250335","FR" +"1296250336","1296250367","ES" +"1296250368","1296250975","FR" +"1296250976","1296251007","DE" +"1296251008","1296251039","FR" +"1296251040","1296251071","US" +"1296251072","1296251103","NL" +"1296251104","1296251135","ES" +"1296251136","1296251167","GB" +"1296251168","1296251199","HR" +"1296251200","1296251295","DE" +"1296251296","1296251327","BE" +"1296251328","1296251359","IE" +"1296251360","1296251391","DE" +"1296251392","1296251775","NL" +"1296251776","1296251903","DE" +"1296251904","1296251919","IR" +"1296251920","1296251935","BE" +"1296251936","1296251967","US" +"1296251968","1296252015","NL" +"1296252016","1296252039","US" +"1296252040","1296252055","DE" +"1296252056","1296252063","US" +"1296252064","1296252079","IT" +"1296252080","1296252087","IE" +"1296252088","1296252095","FR" +"1296252096","1296252111","BE" +"1296252112","1296252127","GB" +"1296252128","1296252143","ES" +"1296252144","1296252159","US" +"1296252160","1296252175","GB" +"1296252176","1296252191","PL" +"1296252192","1296252207","RO" +"1296252208","1296252223","BG" +"1296252224","1296252239","GB" +"1296252240","1296252255","IT" +"1296252256","1296252271","GB" +"1296252272","1296252303","FR" +"1296252304","1296252319","IL" +"1296252320","1296252335","GB" +"1296252336","1296252351","FR" +"1296252352","1296252359","DE" +"1296252360","1296252367","FR" +"1296252368","1296252383","DE" +"1296252384","1296252399","RO" +"1296252400","1296252415","IE" +"1296252416","1296252671","FR" +"1296252672","1296252679","GB" +"1296252680","1296252687","FR" +"1296252688","1296252695","NL" +"1296252696","1296252711","DE" +"1296252712","1296252719","FR" +"1296252720","1296252727","BE" +"1296252728","1296252735","IL" +"1296252736","1296252739","FR" +"1296252740","1296252743","IM" +"1296252744","1296252759","FR" +"1296252760","1296252791","DE" +"1296252792","1296252799","IE" +"1296252800","1296252839","GB" +"1296252840","1296252847","DE" +"1296252848","1296252855","GB" +"1296252856","1296252871","IE" +"1296252872","1296252887","DE" +"1296252888","1296252895","IE" +"1296252896","1296252911","BE" +"1296252912","1296252919","GB" +"1296252920","1296252927","PL" +"1296252928","1296255743","DE" +"1296255744","1296255999","FR" +"1296256000","1296257023","DE" +"1296257024","1296257535","US" +"1296257536","1296257791","DE" +"1296257792","1296258047","US" +"1296258048","1296258303","TW" +"1296258304","1296259071","NL" +"1296259072","1296259583","US" +"1296259584","1296259839","DE" +"1296259840","1296260351","NL" +"1296260352","1296260607","US" +"1296260608","1296262143","DE" +"1296262144","1296262399","FR" +"1296262400","1296262655","US" +"1296262656","1296262911","FR" +"1296262912","1296263935","US" +"1296263936","1296263943","FR" +"1296263944","1296263999","US" +"1296264000","1296264015","FR" +"1296264016","1296264023","US" +"1296264024","1296264027","DE" +"1296264028","1296264031","FR" +"1296264032","1296264035","IM" +"1296264036","1296264039","FR" +"1296264040","1296264047","US" +"1296264048","1296264063","FR" +"1296264064","1296264151","GB" +"1296264152","1296264191","FR" +"1296264192","1296264223","US" +"1296264224","1296264239","IE" +"1296264240","1296264271","FR" +"1296264272","1296264303","US" +"1296264304","1296264319","CA" +"1296264320","1296264383","US" +"1296264384","1296264447","FR" +"1296264448","1296264543","US" +"1296264544","1296264639","CA" +"1296264640","1296264671","US" +"1296264672","1296264703","FR" +"1296264704","1296265023","US" +"1296265024","1296265087","FR" +"1296265088","1296265151","CA" +"1296265152","1296265215","FR" +"1296265216","1296265727","US" +"1296265728","1296266239","FR" +"1296266240","1296266751","US" +"1296266752","1296267007","FR" +"1296267008","1296267263","US" +"1296267264","1296267519","FR" +"1296267520","1296267775","CA" +"1296267776","1296268031","US" +"1296268032","1296268287","FR" +"1296268288","1296268799","US" +"1296268800","1296269055","FR" +"1296269056","1296269311","US" +"1296269312","1296302079","TR" +"1296302080","1296334847","GB" +"1296334848","1296367615","DK" +"1296367616","1296400383","GR" +"1296400384","1296433151","BH" +"1296433152","1296465919","BG" +"1296465920","1296466415","NO" +"1296466416","1296466431","NG" +"1296466432","1296466439","NO" +"1296466440","1296466447","TZ" +"1296466448","1296466495","NO" +"1296466496","1296466543","GN" +"1296466544","1296466655","NO" +"1296466656","1296466671","BJ" +"1296466672","1296472383","NO" +"1296472384","1296472415","BI" +"1296472416","1296473087","NO" +"1296473088","1296474623","LT" +"1296474624","1296476159","US" +"1296476160","1296479743","LT" +"1296479744","1296482303","NO" +"1296482304","1296498687","LT" +"1296498688","1296531455","BG" +"1296531456","1296564223","MT" +"1296564224","1296566271","GB" +"1296566272","1296568319","DE" +"1296568320","1296570367","RU" +"1296570368","1296574463","IT" +"1296574464","1296576511","FR" +"1296576512","1296578559","DK" +"1296578560","1296580607","FI" +"1296580608","1296582655","CH" +"1296582656","1296584703","IE" +"1296584704","1296586751","RU" +"1296586752","1296588799","FR" +"1296588800","1296590847","SE" +"1296590848","1296592895","ES" +"1296592896","1296594943","NL" +"1296594944","1296596991","RU" +"1296596992","1296599039","DE" +"1296599040","1296601087","RU" +"1296601088","1296603135","DE" +"1296603136","1296605183","NL" +"1296605184","1296606271","AT" +"1296606272","1296606335","DE" +"1296606336","1296606367","AT" +"1296606368","1296606399","CH" +"1296606400","1296607103","AT" +"1296607104","1296607135","CH" +"1296607136","1296607231","AT" +"1296607232","1296607743","CH" +"1296607744","1296607999","NL" +"1296608000","1296609023","CH" +"1296609024","1296609279","NL" +"1296609280","1296611327","CH" +"1296611328","1296613375","TR" +"1296613376","1296615423","IT" +"1296615424","1296617471","GB" +"1296617472","1296619519","ES" +"1296619520","1296621567","DE" +"1296621568","1296623615","SE" +"1296623616","1296625663","BE" +"1296625664","1296629759","RU" +"1296629760","1296633855","GB" +"1296633856","1296635903","NL" +"1296635904","1296637951","RU" +"1296637952","1296639999","CH" +"1296640000","1296642047","ES" +"1296642048","1296644095","RU" +"1296644096","1296646143","IT" +"1296646144","1296648191","RU" +"1296648192","1296650239","GB" +"1296650240","1296652287","ES" +"1296652288","1296654335","RU" +"1296654336","1296656383","BE" +"1296656384","1296658431","RU" +"1296658432","1296662527","GB" +"1296662528","1296664575","KZ" +"1296664576","1296666623","RU" +"1296666624","1296670719","GB" +"1296670720","1296672767","ES" +"1296672768","1296674815","GB" +"1296674816","1296676863","BE" +"1296676864","1296677271","NG" +"1296677272","1296677287","A2" +"1296677288","1296677311","NG" +"1296677312","1296677319","A2" +"1296677320","1296677343","NG" +"1296677344","1296677351","A2" +"1296677352","1296677367","NG" +"1296677368","1296677375","US" +"1296677376","1296677511","NG" +"1296677512","1296677519","A2" +"1296677520","1296677591","NG" +"1296677592","1296677599","A2" +"1296677600","1296677703","NG" +"1296677704","1296677719","A2" +"1296677720","1296677735","NG" +"1296677736","1296677751","A2" +"1296677752","1296677767","NG" +"1296677768","1296677775","A2" +"1296677776","1296677959","NG" +"1296677960","1296677967","A2" +"1296677968","1296677991","NG" +"1296677992","1296678015","A2" +"1296678016","1296678047","NG" +"1296678048","1296678079","A2" +"1296678080","1296678119","NG" +"1296678120","1296678143","A2" +"1296678144","1296678151","NG" +"1296678152","1296678159","A2" +"1296678160","1296678215","NG" +"1296678216","1296678223","A2" +"1296678224","1296678351","NG" +"1296678352","1296678367","A2" +"1296678368","1296678415","NG" +"1296678416","1296678431","A2" +"1296678432","1296678447","NG" +"1296678448","1296678463","A2" +"1296678464","1296678471","NG" +"1296678472","1296678479","A2" +"1296678480","1296678775","NG" +"1296678776","1296678791","A2" +"1296678792","1296678831","NG" +"1296678832","1296678839","A2" +"1296678840","1296678911","NG" +"1296678912","1296680191","SA" +"1296680192","1296680447","AE" +"1296680448","1296680703","KW" +"1296680704","1296680959","SA" +"1296680960","1296683007","ES" +"1296683008","1296685055","IE" +"1296685056","1296687103","TR" +"1296687104","1296689151","NL" +"1296689152","1296691199","RU" +"1296691200","1296693247","CH" +"1296693248","1296695295","DE" +"1296695296","1296696831","CH" +"1296696832","1296697087","DE" +"1296697088","1296697343","CH" +"1296697344","1296699391","RU" +"1296699392","1296701439","IT" +"1296701440","1296703487","RU" +"1296703488","1296705535","BY" +"1296705536","1296707583","GE" +"1296707584","1296709631","NL" +"1296709632","1296711679","CY" +"1296711680","1296713727","KZ" +"1296713728","1296715775","RU" +"1296715776","1296717823","CH" +"1296717824","1296719871","BE" +"1296719872","1296721919","CH" +"1296721920","1296723967","GB" +"1296723968","1296726015","AT" +"1296726016","1296728063","GB" +"1296728064","1296730111","SE" +"1296730112","1296732159","DE" +"1296732160","1296734207","IT" +"1296734208","1296736255","FR" +"1296736256","1296738303","NO" +"1296738304","1296738815","CH" +"1296738816","1296739327","FI" +"1296739328","1296740351","CH" +"1296740352","1296744447","RU" +"1296744448","1296746495","GB" +"1296746496","1296748543","SI" +"1296748544","1296750591","FR" +"1296750592","1296752639","NO" +"1296752640","1296754687","BA" +"1296754688","1296756735","DE" +"1296756736","1296758783","FR" +"1296758784","1296760831","RS" +"1296760832","1296764927","RU" +"1296764928","1296769023","AT" +"1296769024","1296771071","TR" +"1296771072","1296773119","LT" +"1296773120","1296774367","FR" +"1296774368","1296775167","EU" +"1296775168","1296779263","FR" +"1296779264","1296781311","CZ" +"1296781312","1296783359","DK" +"1296783360","1296785407","LB" +"1296785408","1296787455","IE" +"1296787456","1296789503","GB" +"1296789504","1296791551","CH" +"1296791552","1296793599","GB" +"1296793600","1296795647","RU" +"1296795648","1296795903","NL" +"1296795904","1296797695","GB" +"1296797696","1296799743","UA" +"1296799744","1296801791","RU" +"1296801792","1296803839","DK" +"1296803840","1296805887","RU" +"1296805888","1296807935","ES" +"1296807936","1296812031","GB" +"1296812032","1296814079","DE" +"1296814080","1296816127","NO" +"1296816128","1296818175","TR" +"1296818176","1296820223","ES" +"1296820224","1296822271","GB" +"1296822272","1296824319","IE" +"1296824320","1296826367","DE" +"1296826368","1296842751","BG" +"1296842752","1296859135","GB" +"1296859136","1296875519","BG" +"1296875520","1296891903","DE" +"1296891904","1296908287","BG" +"1296908288","1296924671","IR" +"1296924672","1296941055","BG" +"1296941056","1296957439","BA" +"1296957440","1296973823","BG" +"1296973824","1296990207","CZ" +"1296990208","1297006591","BG" +"1297006592","1297022975","BA" +"1297022976","1297026815","LT" +"1297026816","1297026847","FR" +"1297026848","1297026879","LT" +"1297026880","1297026888","CY" +"1297026889","1297039359","LT" +"1297039360","1297055743","TR" +"1297055744","1297072127","RU" +"1297072128","1297083375","PL" +"1297083376","1297083391","SE" +"1297083392","1297088511","PL" +"1297088512","1297121279","AT" +"1297121280","1297154047","SE" +"1297154048","1297215487","RO" +"1297215488","1297217535","NL" +"1297217536","1297219583","RO" +"1297219584","1297285119","RU" +"1297285120","1297350655","GR" +"1297350656","1297416191","FR" +"1297416192","1297481727","BG" +"1297481728","1297514495","GB" +"1297514496","1297547263","FI" +"1297547264","1297549311","PL" +"1297549312","1297551359","LT" +"1297551360","1297553407","SA" +"1297553408","1297555455","IE" +"1297555456","1297559551","UA" +"1297559552","1297561599","DE" +"1297561600","1297563647","NL" +"1297563648","1297565695","RU" +"1297565696","1297567743","PL" +"1297567744","1297569791","RU" +"1297569792","1297571839","RO" +"1297571840","1297573887","RU" +"1297573888","1297575935","FR" +"1297575936","1297577983","RU" +"1297577984","1297580031","PL" +"1297580032","1297582079","CH" +"1297582080","1297584127","PL" +"1297584128","1297588223","UA" +"1297588224","1297590271","NL" +"1297590272","1297592319","RU" +"1297592320","1297594367","GB" +"1297594368","1297596415","DE" +"1297596416","1297598463","UA" +"1297598464","1297602559","RU" +"1297602560","1297604607","PL" +"1297604608","1297606655","DE" +"1297606656","1297610751","CZ" +"1297610752","1297612799","DE" +"1297612800","1297629183","RU" +"1297629184","1297645567","NO" +"1297645568","1297661951","PL" +"1297661952","1297678335","UA" +"1297678336","1297694719","IT" +"1297694720","1297711103","PL" +"1297711104","1297727487","GB" +"1297727488","1297743871","MD" +"1297743872","1297760255","DE" +"1297760256","1297776639","LT" +"1297776640","1297793023","DE" +"1297793024","1297809407","UA" +"1297809408","1297825791","PL" +"1297825792","1297842175","RU" +"1297842176","1297858559","UA" +"1297858560","1297860607","RU" +"1297860608","1297862655","PT" +"1297862656","1297864703","FI" +"1297864704","1297866751","SE" +"1297866752","1297867687","RU" +"1297867688","1297867695","CY" +"1297867696","1297867871","RU" +"1297867872","1297867879","ES" +"1297867880","1297868799","RU" +"1297868800","1297870847","DE" +"1297870848","1297872895","FR" +"1297872896","1297874943","GB" +"1297874944","1297875487","CY" +"1297875488","1297875503","TR" +"1297875504","1297875536","CY" +"1297875537","1297875551","TR" +"1297875552","1297879040","CY" +"1297879041","1297883135","TR" +"1297883136","1297891327","PL" +"1297891328","1297899519","GB" +"1297899520","1297915903","TR" +"1297915904","1297924095","BH" +"1297924096","1297932287","CZ" +"1297932288","1297940479","GE" +"1297940480","1297948671","LV" +"1297948672","1297956863","UA" +"1297956864","1297965055","NL" +"1297965056","1297973247","RU" +"1297973248","1297981439","GB" +"1297981440","1297989631","RO" +"1297989632","1297993295","CZ" +"1297993296","1297993311","SK" +"1297993312","1297997823","CZ" +"1297997824","1298006015","IT" +"1298006016","1298014207","RU" +"1298014208","1298014719","LT" +"1298014720","1298014975","RU" +"1298014976","1298015231","LT" +"1298015232","1298015487","RU" +"1298015488","1298015743","LB" +"1298015744","1298015999","IQ" +"1298016000","1298016511","LB" +"1298016512","1298017023","RU" +"1298017024","1298018303","BY" +"1298018304","1298018559","TM" +"1298018560","1298018815","RU" +"1298018816","1298019071","GB" +"1298019072","1298019327","RU" +"1298019328","1298019839","LT" +"1298019840","1298020351","RU" +"1298020352","1298022399","BY" +"1298022400","1298030591","IT" +"1298030592","1298038783","RU" +"1298038784","1298046975","SI" +"1298046976","1298063359","RU" +"1298063360","1298065407","FR" +"1298065408","1298067455","NO" +"1298067456","1298071551","NL" +"1298071552","1298073599","TJ" +"1298073600","1298075647","RU" +"1298075648","1298076671","CY" +"1298076672","1298077695","US" +"1298077696","1298079743","DE" +"1298079744","1298081791","GB" +"1298081792","1298083839","CZ" +"1298083840","1298085887","PL" +"1298085888","1298087935","KG" +"1298087936","1298089983","FR" +"1298089984","1298092031","NO" +"1298092032","1298094079","GB" +"1298094080","1298096127","RU" +"1298096128","1298098175","NL" +"1298098176","1298100223","SE" +"1298100224","1298102271","GB" +"1298102272","1298102687","CH" +"1298102688","1298102703","LV" +"1298102704","1298104319","CH" +"1298104320","1298106367","RU" +"1298106368","1298108415","IT" +"1298108416","1298110463","FI" +"1298110464","1298112511","ES" +"1298112512","1298114559","IE" +"1298114560","1298116607","IT" +"1298116608","1298118655","GB" +"1298118656","1298120703","AM" +"1298120704","1298122751","CZ" +"1298122752","1298124799","RU" +"1298124800","1298126847","IT" +"1298126848","1298127615","SA" +"1298127616","1298128127","IR" +"1298128128","1298128895","SA" +"1298128896","1298129463","NL" +"1298129464","1298129464","GB" +"1298129465","1298129488","NL" +"1298129489","1298129495","GB" +"1298129496","1298129744","NL" +"1298129745","1298129747","IT" +"1298129748","1298130199","NL" +"1298130200","1298130200","US" +"1298130201","1298130202","NL" +"1298130203","1298130217","US" +"1298130218","1298130943","NL" +"1298130944","1298132991","BG" +"1298132992","1298135039","FI" +"1298135040","1298137087","NL" +"1298137088","1298661375","GB" +"1298661376","1298677759","FR" +"1298677760","1298694143","IR" +"1298694144","1298710527","RO" +"1298710528","1298726911","CZ" +"1298726912","1298743295","RS" +"1298743296","1298759679","FI" +"1298759680","1298776063","RU" +"1298776064","1298792447","SE" +"1298792448","1298825215","RU" +"1298825216","1298841599","NO" +"1298841600","1298857983","RU" +"1298857984","1298874367","SE" +"1298874368","1298907135","GB" +"1298907136","1298915199","IE" +"1298915200","1298915215","CA" +"1298915216","1298917711","IE" +"1298917712","1298917719","GB" +"1298917720","1298923519","IE" +"1298923520","1298939903","IT" +"1298939904","1298956287","RU" +"1298956288","1298972671","GB" +"1298972672","1298989055","RU" +"1298989056","1299005439","UA" +"1299005440","1299005695","BE" +"1299005696","1299005951","RU" +"1299005952","1299008511","NL" +"1299008512","1299009791","BE" +"1299009792","1299010047","NL" +"1299010048","1299010815","BE" +"1299010816","1299011071","RU" +"1299011072","1299011327","BE" +"1299011328","1299011583","RU" +"1299011584","1299011839","FR" +"1299011840","1299012095","DE" +"1299012096","1299012607","BE" +"1299012608","1299013119","GB" +"1299013120","1299013375","FR" +"1299013376","1299013631","DE" +"1299013632","1299015679","BE" +"1299015680","1299016703","NL" +"1299016704","1299016959","BE" +"1299016960","1299017215","NL" +"1299017216","1299017727","RU" +"1299017728","1299021823","BE" +"1299021824","1299022527","CH" +"1299022528","1299022543","DE" +"1299022544","1299023879","CH" +"1299023880","1299023887","DE" +"1299023888","1299024559","CH" +"1299024560","1299024575","DE" +"1299024576","1299024863","CH" +"1299024864","1299024871","DE" +"1299024872","1299025255","CH" +"1299025256","1299025263","US" +"1299025264","1299026111","CH" +"1299026112","1299026127","ES" +"1299026128","1299026251","CH" +"1299026252","1299026263","PT" +"1299026264","1299038207","CH" +"1299038208","1299054591","FI" +"1299054592","1299070975","SE" +"1299070976","1299087359","SA" +"1299087360","1299103743","HU" +"1299103744","1299120127","NO" +"1299120128","1299136511","SI" +"1299136512","1299169279","HU" +"1299169280","1299174399","FR" +"1299174400","1299176959","GB" +"1299176960","1299177471","FR" +"1299177472","1299180031","DE" +"1299180032","1299185663","FR" +"1299185664","1299447807","PL" +"1299447808","1299709951","AT" +"1299709952","1299972095","UA" +"1299972096","1300234239","IL" +"1300234240","1302331391","FR" +"1302331392","1303379967","NL" +"1303379968","1304428543","DE" +"1304428544","1305477119","FR" +"1305477120","1305739263","ES" +"1305739264","1306001407","DK" +"1306001408","1306132479","RU" +"1306132480","1306198015","SE" +"1306198016","1306206207","LV" +"1306206208","1306214399","HR" +"1306214400","1306222591","LT" +"1306222592","1306230783","HR" +"1306230784","1306238975","LT" +"1306238976","1306263551","SE" +"1306263552","1306265599","A2" +"1306265600","1306266879","KE" +"1306266880","1306267135","NG" +"1306267136","1306267522","KE" +"1306267523","1306267527","NG" +"1306267528","1306271743","KE" +"1306271744","1306279935","RU" +"1306279936","1306285775","IT" +"1306285776","1306285783","US" +"1306285784","1306286079","IT" +"1306286080","1306287103","CH" +"1306287104","1306287615","IT" +"1306287616","1306287903","CH" +"1306287904","1306288127","IT" +"1306288128","1306296319","AT" +"1306296320","1306311143","RU" +"1306311144","1306311151","CH" +"1306311152","1306312703","RU" +"1306312704","1306320895","UZ" +"1306320896","1306323199","DE" +"1306323200","1306323263","NL" +"1306323264","1306323295","GB" +"1306323296","1306329087","DE" +"1306329088","1306337279","BA" +"1306337280","1306345471","HU" +"1306345472","1306353663","LT" +"1306353664","1306361855","SA" +"1306361856","1306370047","RU" +"1306370048","1306378239","GB" +"1306378240","1306386431","RU" +"1306386432","1306394623","DK" +"1306394624","1306402815","ME" +"1306402816","1306411007","RU" +"1306411008","1306419199","NL" +"1306419200","1306427391","RU" +"1306427392","1306435583","UA" +"1306435584","1306451967","NO" +"1306451968","1306460159","PL" +"1306460160","1306468351","IT" +"1306468352","1306476543","FI" +"1306476544","1306492927","RU" +"1306492928","1306501119","TR" +"1306501120","1306509311","NO" +"1306509312","1306525695","PL" +"1306525696","1307049983","ES" +"1307049984","1307066367","RU" +"1307066368","1307068869","EU" +"1307068870","1307068870","CH" +"1307068871","1307069695","EU" +"1307069696","1307069919","DE" +"1307069920","1307074559","EU" +"1307074560","1307082751","SA" +"1307082752","1307090943","RU" +"1307099136","1307107327","RO" +"1307107328","1307115519","DE" +"1307115520","1307123711","RU" +"1307123712","1307131903","NL" +"1307131904","1307140095","EE" +"1307140096","1307148287","FR" +"1307148288","1307156479","GB" +"1307156480","1307172863","RU" +"1307172864","1307181055","DK" +"1307181056","1307189247","RU" +"1307189248","1307191295","DE" +"1307191296","1307191807","CZ" +"1307191808","1307192063","US" +"1307192064","1307193343","CZ" +"1307193344","1307195391","NO" +"1307195392","1307197439","CH" +"1307197440","1307205631","HU" +"1307205632","1307213823","FI" +"1307213824","1307219239","SI" +"1307219240","1307219247","MX" +"1307219248","1307222015","SI" +"1307222016","1307230207","DK" +"1307230208","1307238399","RU" +"1307238400","1307246591","SK" +"1307246592","1307254783","KG" +"1307254784","1307262975","NL" +"1307262976","1307271167","AT" +"1307271168","1307279359","MD" +"1307279360","1307287551","LB" +"1307287552","1307295743","DE" +"1307295744","1307303935","RU" +"1307303936","1307312127","SE" +"1307312128","1307320319","PL" +"1307320320","1307336703","RU" +"1307336704","1307344895","DE" +"1307344896","1307353087","RU" +"1307353088","1307361279","BG" +"1307361280","1307369471","CZ" +"1307369472","1307377663","RU" +"1307377664","1307385855","PL" +"1307385856","1307393919","AT" +"1307393920","1307393983","CZ" +"1307393984","1307394047","AT" +"1307394048","1307402239","IR" +"1307402240","1307410431","HR" +"1307410432","1307418623","CZ" +"1307418624","1307426815","IR" +"1307426816","1307435007","CH" +"1307435008","1307443199","DE" +"1307443200","1307451391","IT" +"1307451392","1307459583","SE" +"1307459584","1307467775","BG" +"1307467776","1307484159","RU" +"1307484160","1307488767","GB" +"1307488768","1307489023","IE" +"1307489024","1307491327","GB" +"1307491328","1307491839","IE" +"1307491840","1307492351","GB" +"1307492352","1307500543","BA" +"1307500544","1307508735","RU" +"1307508736","1307516927","BA" +"1307516928","1307525119","CH" +"1307525120","1307533311","BA" +"1307533312","1307535359","GB" +"1307535360","1307535615","DE" +"1307535616","1307541503","GB" +"1307541504","1307549695","IT" +"1307549696","1307557887","UA" +"1307557888","1307574271","RU" +"1307574272","1307578367","GB" +"1307578368","1307582463","FI" +"1307582464","1307586559","KZ" +"1307586560","1307590655","GB" +"1307590656","1307594751","SE" +"1307594752","1307598847","SA" +"1307598848","1307602943","CZ" +"1307602944","1307607039","ES" +"1307607040","1307611135","SA" +"1307611136","1307619327","RU" +"1307619328","1307623423","CZ" +"1307623424","1307627519","FR" +"1307627520","1307631615","SE" +"1307631616","1307635711","IT" +"1307635712","1307636735","EE" +"1307636736","1307636807","LV" +"1307636808","1307636815","EE" +"1307636816","1307636847","LV" +"1307636848","1307636863","EE" +"1307636864","1307637359","LV" +"1307637360","1307637367","EE" +"1307637368","1307637383","LV" +"1307637384","1307637407","EE" +"1307637408","1307637471","LV" +"1307637472","1307637491","EE" +"1307637492","1307637751","LV" +"1307637752","1307637759","EE" +"1307637760","1307639791","LT" +"1307639792","1307639807","EE" +"1307639808","1307643903","IT" +"1307643904","1307652095","RU" +"1307652096","1307656191","ES" +"1307656192","1307660287","JO" +"1307660288","1307662335","BE" +"1307662336","1307662351","NL" +"1307662352","1307662359","GB" +"1307662360","1307662367","FR" +"1307662368","1307664383","BE" +"1307664384","1307668479","NO" +"1307668480","1307672575","ES" +"1307672576","1307676671","DK" +"1307676672","1307680767","RU" +"1307680768","1307684863","LV" +"1307684864","1307688959","GB" +"1307688960","1307693055","LT" +"1307693056","1307697151","IT" +"1307697152","1307697407","NL" +"1307697408","1307697663","EU" +"1307697664","1307698687","NL" +"1307698688","1307698943","EU" +"1307698944","1307701247","NL" +"1307701248","1307709439","RU" +"1307709440","1307713535","AL" +"1307713536","1307717631","IT" +"1307717632","1307721727","GE" +"1307721728","1307725823","AT" +"1307725824","1307729919","CZ" +"1307729920","1307734015","RU" +"1307734016","1307738111","NL" +"1307738112","1307742207","IT" +"1307742208","1307746303","HU" +"1307746304","1307750399","UA" +"1307750400","1307754495","IT" +"1307754496","1307755519","US" +"1307755520","1307755775","A1" +"1307755776","1307756031","GB" +"1307756032","1307756287","US" +"1307756288","1307756431","GB" +"1307756432","1307756447","FR" +"1307756448","1307756543","GB" +"1307756544","1307756863","FR" +"1307756864","1307756903","GB" +"1307756904","1307756911","US" +"1307756912","1307757063","GB" +"1307757064","1307757071","US" +"1307757072","1307757183","GB" +"1307757184","1307757279","US" +"1307757280","1307757311","FR" +"1307757312","1307758591","GB" +"1307758592","1307762687","SM" +"1307762688","1307766783","PL" +"1307766784","1307770879","GB" +"1307770880","1307774975","RU" +"1307774976","1307779071","RS" +"1307779072","1307787263","DK" +"1307787264","1307791359","MT" +"1307791360","1307795455","KZ" +"1307795456","1307803647","RU" +"1307803648","1307807743","DK" +"1307807744","1307811839","SE" +"1307811840","1307815935","NL" +"1307815936","1307816191","EU" +"1307816192","1307816447","GB" +"1307816448","1307817471","EU" +"1307817472","1307817511","GB" +"1307817512","1307817519","EU" +"1307817520","1307817535","GB" +"1307817536","1307818048","EU" +"1307818049","1307818049","BE" +"1307818050","1307818239","EU" +"1307818240","1307818495","GB" +"1307818496","1307818751","DE" +"1307818752","1307819007","ES" +"1307819008","1307819263","DE" +"1307819264","1307819519","NL" +"1307819520","1307819775","BE" +"1307819776","1307820031","IT" +"1307820032","1307824127","ES" +"1307824128","1307828223","HU" +"1307828224","1307830128","NL" +"1307830129","1307830129","SE" +"1307830130","1307830751","NL" +"1307830752","1307830767","BE" +"1307830768","1307832319","NL" +"1307832320","1307836415","RU" +"1307836416","1307840511","SE" +"1307840512","1307844607","RU" +"1307844608","1307848703","UA" +"1307848704","1307852799","CH" +"1307852800","1307856895","RU" +"1307856896","1307860991","IT" +"1307860992","1307861055","DE" +"1307861056","1307861063","LU" +"1307861064","1307861079","DE" +"1307861080","1307861083","LU" +"1307861084","1307861119","DE" +"1307861120","1307861123","LU" +"1307861124","1307861127","A2" +"1307861128","1307861151","DE" +"1307861152","1307861155","LU" +"1307861156","1307861919","DE" +"1307861920","1307861935","LU" +"1307861936","1307861983","DE" +"1307861984","1307861987","A2" +"1307861988","1307864127","DE" +"1307864128","1307864135","LU" +"1307864136","1307864143","DE" +"1307864144","1307864147","A2" +"1307864148","1307864467","DE" +"1307864468","1307864471","LU" +"1307864472","1307864479","DE" +"1307864480","1307864495","LU" +"1307864496","1307865087","DE" +"1307865088","1307869183","AZ" +"1307869184","1307873279","GB" +"1307873280","1307877375","TJ" +"1307877376","1307881471","RU" +"1307881472","1307885567","IT" +"1307885568","1307889663","BG" +"1307889664","1307893759","RU" +"1307893760","1307897855","SE" +"1307897856","1307901663","AT" +"1307901664","1307901671","DE" +"1307901672","1307901951","AT" +"1307901952","1307906047","JO" +"1307906048","1307906599","CH" +"1307906600","1307906607","DK" +"1307906608","1307907263","CH" +"1307907264","1307907327","IM" +"1307907328","1307910143","CH" +"1307910144","1307914239","DE" +"1307914240","1307918335","NL" +"1307918336","1307922431","GB" +"1307922432","1307926527","NL" +"1307926528","1307930623","KZ" +"1307930624","1307934719","RU" +"1307934720","1307938815","FR" +"1307938816","1307940863","TR" +"1307940864","1307941119","US" +"1307941120","1307942911","TR" +"1307942912","1307947007","RU" +"1307947008","1307951103","CH" +"1307951104","1307959295","RU" +"1307959296","1307963391","IR" +"1307963392","1307967487","PL" +"1307967488","1307971583","IT" +"1307971584","1307979775","GB" +"1307979776","1307981823","ZW" +"1307981824","1307982847","ZA" +"1307982848","1307983359","ZW" +"1307983360","1307983423","ZA" +"1307983424","1307983487","BW" +"1307983488","1307983551","ZM" +"1307983552","1307983615","MZ" +"1307983616","1307983743","ZA" +"1307983744","1307983871","ZM" +"1307983872","1307984383","NG" +"1307984384","1307987967","LB" +"1307987968","1307992063","FR" +"1307992064","1307996159","RU" +"1307996160","1308000255","DE" +"1308000256","1308004351","CH" +"1308004352","1308008447","RU" +"1308008448","1308012543","GB" +"1308012544","1308016639","ES" +"1308016640","1308020735","FI" +"1308020736","1308024831","BG" +"1308024832","1308033023","RU" +"1308033024","1308033279","NL" +"1308033280","1308033535","FR" +"1308033536","1308033791","DE" +"1308033792","1308034047","IT" +"1308034048","1308034559","GB" +"1308034560","1308034815","CZ" +"1308034816","1308035327","DE" +"1308035328","1308035583","GB" +"1308035584","1308035839","AE" +"1308035840","1308036095","GB" +"1308036096","1308036351","SE" +"1308036352","1308036607","BE" +"1308036608","1308036863","ES" +"1308036864","1308037119","FR" +"1308037120","1308041215","UA" +"1308041216","1308049407","RU" +"1308049408","1308053503","DK" +"1308053504","1308055551","DE" +"1308055552","1308057599","AL" +"1308057600","1308061695","GR" +"1308061696","1308069887","RU" +"1308069888","1308073983","NO" +"1308073984","1308078079","RU" +"1308078080","1308078879","NL" +"1308078880","1308078911","FR" +"1308078912","1308079521","NL" +"1308079522","1308079525","A1" +"1308079526","1308079807","NL" +"1308079808","1308079823","SC" +"1308079824","1308080127","NL" +"1308080128","1308082175","RU" +"1308082176","1308084223","GB" +"1308084224","1308086271","RS" +"1308086272","1308088319","RU" +"1308088320","1308090367","UA" +"1308090368","1308092415","SK" +"1308092416","1308096511","RU" +"1308096512","1308098559","RS" +"1308098560","1308360703","NL" +"1308360704","1308622847","PL" +"1308622848","1308884991","HR" +"1308884992","1309147135","IT" +"1309147136","1309409279","PL" +"1309409280","1309671423","IT" +"1309671424","1309933567","IE" +"1309933568","1310195711","BE" +"1310195712","1310197759","RU" +"1310197760","1310199807","CZ" +"1310199808","1310201599","IE" +"1310201600","1310201855","GB" +"1310201856","1310203903","RU" +"1310203904","1310205951","FR" +"1310205952","1310207999","RU" +"1310208000","1310210047","MD" +"1310210048","1310212095","RU" +"1310212096","1310214143","HU" +"1310214144","1310216191","UA" +"1310216192","1310218239","IT" +"1310218240","1310220287","NO" +"1310220288","1310221311","NL" +"1310221312","1310221567","MK" +"1310221568","1310222335","NL" +"1310222336","1310224383","RS" +"1310224384","1310226431","GB" +"1310226432","1310228479","BE" +"1310228480","1310230527","FR" +"1310230528","1310232575","ES" +"1310232576","1310234623","NO" +"1310234624","1310236671","RU" +"1310236672","1310238719","PL" +"1310238720","1310240767","BE" +"1310240768","1310242815","RU" +"1310242816","1310244863","HU" +"1310244864","1310246911","EE" +"1310246912","1310246927","FR" +"1310246928","1310246943","ES" +"1310246944","1310246959","IT" +"1310246960","1310246975","AT" +"1310246976","1310246991","PT" +"1310246992","1310247007","NL" +"1310247008","1310247023","GB" +"1310247024","1310247039","GR" +"1310247040","1310247055","CL" +"1310247056","1310247071","BE" +"1310247072","1310247087","MX" +"1310247088","1310247103","AR" +"1310247104","1310247119","PL" +"1310247120","1310247135","IE" +"1310247136","1310247151","CH" +"1310247152","1310247167","RU" +"1310247168","1310247183","BE" +"1310247184","1310247199","BR" +"1310247200","1310247215","CZ" +"1310247216","1310247231","HK" +"1310247232","1310247247","LU" +"1310247248","1310247263","CN" +"1310247264","1310247279","PH" +"1310247280","1310247295","CH" +"1310247296","1310247311","JP" +"1310247312","1310247327","PE" +"1310247328","1310247343","DE" +"1310247344","1310247359","CA" +"1310247360","1310247375","CR" +"1310247376","1310247391","IN" +"1310247392","1310247407","US" +"1310247408","1310247423","CA" +"1310247424","1310247431","BE" +"1310247432","1310247439","BR" +"1310247440","1310247447","CZ" +"1310247448","1310247455","HK" +"1310247456","1310247463","LU" +"1310247464","1310247471","CN" +"1310247472","1310247479","PH" +"1310247480","1310247487","CH" +"1310247488","1310247495","JP" +"1310247496","1310247503","PE" +"1310247504","1310247511","DE" +"1310247512","1310247519","CA" +"1310247520","1310247527","CR" +"1310247528","1310247535","IN" +"1310247536","1310247543","US" +"1310247544","1310247551","CA" +"1310247552","1310247559","FR" +"1310247560","1310247567","ES" +"1310247568","1310247575","IT" +"1310247576","1310247583","AT" +"1310247584","1310247591","PT" +"1310247592","1310247599","NL" +"1310247600","1310247607","GB" +"1310247608","1310247615","GR" +"1310247616","1310247623","CL" +"1310247624","1310247631","BE" +"1310247632","1310247639","MX" +"1310247640","1310247647","AR" +"1310247648","1310247655","PL" +"1310247656","1310247663","IE" +"1310247664","1310247671","CH" +"1310247672","1310247679","RU" +"1310247680","1310247687","BE" +"1310247688","1310247695","BR" +"1310247696","1310247703","CZ" +"1310247704","1310247711","HK" +"1310247712","1310247719","LU" +"1310247720","1310247727","CN" +"1310247728","1310247735","PH" +"1310247736","1310247743","CH" +"1310247744","1310247751","JP" +"1310247752","1310247759","PE" +"1310247760","1310247767","DE" +"1310247768","1310247775","CA" +"1310247776","1310247783","CR" +"1310247784","1310247791","IN" +"1310247792","1310247799","US" +"1310247800","1310247807","CA" +"1310247808","1310247815","FR" +"1310247816","1310247823","ES" +"1310247824","1310247831","IT" +"1310247832","1310247839","AT" +"1310247840","1310247847","PT" +"1310247848","1310247855","NL" +"1310247856","1310247863","GB" +"1310247864","1310247871","GR" +"1310247872","1310247879","CL" +"1310247880","1310247887","BE" +"1310247888","1310247895","MX" +"1310247896","1310247903","AR" +"1310247904","1310247911","PL" +"1310247912","1310247919","IE" +"1310247920","1310247927","CH" +"1310247928","1310247935","RU" +"1310247936","1310247951","TR" +"1310247952","1310247967","SE" +"1310247968","1310247983","NO" +"1310247984","1310247999","DK" +"1310248000","1310248015","LV" +"1310248016","1310248031","BG" +"1310248032","1310248047","UA" +"1310248048","1310248063","CH" +"1310248064","1310248079","ZA" +"1310248080","1310248095","LU" +"1310248096","1310248111","UY" +"1310248112","1310248127","PA" +"1310248128","1310248143","MY" +"1310248144","1310248159","CO" +"1310248160","1310248175","SG" +"1310248176","1310248191","US" +"1310248192","1310248207","RO" +"1310248208","1310248223","LT" +"1310248224","1310248239","BO" +"1310248240","1310248255","HU" +"1310248256","1310248271","FI" +"1310248272","1310248287","IL" +"1310248288","1310248303","AU" +"1310248304","1310248319","NZ" +"1310248320","1310248335","VE" +"1310248336","1310248351","CR" +"1310248352","1310248367","MA" +"1310248368","1310248383","ID" +"1310248384","1310248399","SK" +"1310248400","1310248415","TW" +"1310248416","1310248431","PA" +"1310248432","1310248447","US" +"1310248448","1310248455","BE" +"1310248456","1310248463","BR" +"1310248464","1310248487","FR" +"1310248488","1310248495","CN" +"1310248496","1310248503","FR" +"1310248504","1310248511","CH" +"1310248512","1310248519","JP" +"1310248520","1310248527","PE" +"1310248528","1310248535","DE" +"1310248536","1310248543","CA" +"1310248544","1310248551","CR" +"1310248552","1310248559","IN" +"1310248560","1310248567","US" +"1310248568","1310248575","CA" +"1310248576","1310248583","FR" +"1310248584","1310248591","ES" +"1310248592","1310248599","IT" +"1310248600","1310248607","AT" +"1310248608","1310248615","PT" +"1310248616","1310248623","NL" +"1310248624","1310248631","GB" +"1310248632","1310248639","GR" +"1310248640","1310248647","CL" +"1310248648","1310248655","BE" +"1310248656","1310248663","MX" +"1310248664","1310248671","AR" +"1310248672","1310248679","PL" +"1310248680","1310248687","IE" +"1310248688","1310248695","CH" +"1310248696","1310248703","RU" +"1310248704","1310248959","CH" +"1310248960","1310249215","IM" +"1310249216","1310249279","GB" +"1310249280","1310249775","IM" +"1310249776","1310249799","GG" +"1310249800","1310250111","IM" +"1310250112","1310250143","GG" +"1310250144","1310250495","IM" +"1310250496","1310251007","MT" +"1310251008","1310255103","RU" +"1310255104","1310257151","CZ" +"1310257152","1310259199","FR" +"1310259200","1310261247","GB" +"1310261248","1310277631","UA" +"1310277632","1310310399","RU" +"1310310400","1310326783","GB" +"1310326784","1310343167","NO" +"1310343168","1310359551","IT" +"1310359552","1310392319","UA" +"1310392320","1310408703","NL" +"1310408704","1310425087","FI" +"1310425088","1310457855","UA" +"1310457856","1310474239","PL" +"1310474240","1310490623","EE" +"1310490624","1310507007","BA" +"1310507008","1310523391","LV" +"1310523392","1310556159","RU" +"1310556160","1310572543","PT" +"1310572544","1310588927","BE" +"1310588928","1310605311","RU" +"1310605312","1310621695","PL" +"1310621696","1310638079","RS" +"1310638080","1310654463","UA" +"1310654464","1310656511","RU" +"1310656512","1310657535","GB" +"1310657536","1310658559","SE" +"1310658560","1310660607","RU" +"1310660608","1310662655","CZ" +"1310662656","1310664703","DK" +"1310664704","1310666751","FR" +"1310666752","1310668799","NL" +"1310668800","1310670847","RO" +"1310670848","1310672895","DE" +"1310672896","1310674943","RU" +"1310674944","1310676991","NO" +"1310676992","1310679039","PL" +"1310679040","1310681087","RU" +"1310681088","1310683135","GB" +"1310683136","1310685183","NL" +"1310685184","1310687231","PL" +"1310687232","1310689279","RO" +"1310689280","1310695423","PL" +"1310695424","1310697471","RO" +"1310697472","1310699519","DE" +"1310699520","1310705663","UA" +"1310705664","1310711807","RU" +"1310711808","1310713855","LT" +"1310713856","1310715903","UA" +"1310715904","1310717951","RU" +"1310717952","1310719999","UA" +"1310720000","1310851071","GB" +"1310851072","1310982143","DE" +"1310982144","1311113215","RU" +"1311113216","1311244287","IR" +"1311244288","1311246335","MK" +"1311246336","1311248383","IT" +"1311248384","1311250431","GB" +"1311250432","1311252479","RU" +"1311252480","1311253415","GB" +"1311253416","1311253423","IT" +"1311253424","1311254527","GB" +"1311254528","1311256575","SE" +"1311256576","1311258623","FR" +"1311258624","1311262719","GB" +"1311262720","1311262975","FR" +"1311262976","1311263407","CH" +"1311263408","1311263423","BE" +"1311263424","1311263615","CH" +"1311263616","1311263679","FR" +"1311263680","1311263871","CH" +"1311263872","1311263999","FR" +"1311264000","1311264255","CH" +"1311264256","1311264767","FR" +"1311264768","1311266815","RU" +"1311266816","1311268863","FR" +"1311268864","1311270911","BE" +"1311270912","1311272959","RU" +"1311272960","1311275007","GB" +"1311275008","1311276671","FR" +"1311276672","1311276703","RU" +"1311276704","1311276879","FR" +"1311276880","1311276895","SC" +"1311276896","1311277055","FR" +"1311277056","1311279103","IT" +"1311279104","1311280127","BG" +"1311280128","1311280383","MK" +"1311280384","1311281151","BG" +"1311281152","1311285247","GB" +"1311285248","1311289343","IT" +"1311289344","1311291391","LB" +"1311291392","1311293439","RU" +"1311293440","1311295487","NL" +"1311295488","1311297535","IT" +"1311297536","1311298559","EU" +"1311298560","1311299583","AT" +"1311299584","1311301631","RU" +"1311301632","1311303679","TR" +"1311303680","1311307775","GB" +"1311307776","1311309823","IS" +"1311309824","1311311823","GB" +"1311311824","1311311824","JE" +"1311311825","1311311871","GB" +"1311311872","1311315967","CZ" +"1311315968","1311317247","PL" +"1311317248","1311317503","A2" +"1311317504","1311318015","PL" +"1311318016","1311320063","RU" +"1311320064","1311322111","FR" +"1311322112","1311324159","IT" +"1311324160","1311326207","LB" +"1311326208","1311328159","BE" +"1311328160","1311328191","LU" +"1311328192","1311328255","BE" +"1311328256","1311330303","NL" +"1311330304","1311332351","DE" +"1311332352","1311338495","RU" +"1311338496","1311340543","AT" +"1311340544","1311342591","NO" +"1311342592","1311344639","FR" +"1311344640","1311346687","NO" +"1311346688","1311348735","AT" +"1311348736","1311350783","GB" +"1311350784","1311352831","FR" +"1311352832","1311354879","SK" +"1311354880","1311356927","RU" +"1311356928","1311357183","GB" +"1311357184","1311357439","FR" +"1311357440","1311357695","IT" +"1311357696","1311357951","CH" +"1311357952","1311358207","CA" +"1311358208","1311358263","FR" +"1311358264","1311358271","ES" +"1311358272","1311358719","FR" +"1311358720","1311358975","BE" +"1311358976","1311361023","RU" +"1311361024","1311361286","NL" +"1311361287","1311361288","SA" +"1311361289","1311363071","NL" +"1311363072","1311365119","GB" +"1311365120","1311367167","DE" +"1311367168","1311367295","GN" +"1311367296","1311367423","GA" +"1311367424","1311367679","MM" +"1311367680","1311367711","UG" +"1311367712","1311367743","CD" +"1311367744","1311367775","SL" +"1311367776","1311367807","LR" +"1311367808","1311367839","US" +"1311367840","1311367871","DK" +"1311367872","1311367887","LR" +"1311367888","1311367895","DE" +"1311367896","1311367903","NG" +"1311367904","1311367927","A2" +"1311367928","1311367935","DE" +"1311367936","1311368191","A2" +"1311368192","1311368319","BD" +"1311368320","1311368447","CF" +"1311368448","1311368575","TZ" +"1311368576","1311368703","PG" +"1311368704","1311368831","NP" +"1311368832","1311368959","GM" +"1311368960","1311369087","PT" +"1311369088","1311369215","BT" +"1311369216","1311371263","FR" +"1311371264","1311373311","SE" +"1311373312","1311374335","FR" +"1311374336","1311374351","ES" +"1311374352","1311375359","FR" +"1311375360","1311506431","DE" +"1311506432","1311637503","CZ" +"1311637504","1311676023","DE" +"1311676024","1311676031","IT" +"1311676032","1311699527","DE" +"1311699528","1311699535","IT" +"1311699536","1311707655","DE" +"1311707656","1311707663","NL" +"1311707664","1311757439","DE" +"1311757440","1311757447","ES" +"1311757448","1311757463","DE" +"1311757464","1311757471","ES" +"1311757472","1311767311","DE" +"1311767312","1311767319","IT" +"1311767320","1312292863","DE" +"1312292864","1312817151","LT" +"1312817152","1313865727","SE" +"1313865728","1313931263","CZ" +"1313931264","1313996799","RU" +"1313996800","1314062335","SE" +"1314062336","1314088763","BG" +"1314088764","1314088764","A1" +"1314088765","1314127871","BG" +"1314127872","1314193407","LV" +"1314193408","1314258943","RU" +"1314258944","1314324479","GB" +"1314324480","1314390015","GR" +"1314390016","1314455551","PL" +"1314455552","1314489599","KW" +"1314489600","1314489855","US" +"1314489856","1314521087","KW" +"1314521088","1314586623","BG" +"1314586624","1314652159","NO" +"1314652160","1314717695","HU" +"1314717696","1314783231","SA" +"1314783232","1314848767","DE" +"1314848768","1315045375","RO" +"1315045376","1315176447","SK" +"1315176448","1315307519","QA" +"1315307520","1315438591","CZ" +"1315438592","1315504127","AT" +"1315504128","1315569663","GB" +"1315569664","1315700735","RU" +"1315700736","1315704831","SE" +"1315704832","1315708927","HU" +"1315708928","1315713023","GR" +"1315713024","1315717119","SE" +"1315717120","1315725311","RU" +"1315725312","1315729407","CZ" +"1315729408","1315733503","EU" +"1315733504","1315737599","NL" +"1315737600","1315741695","CZ" +"1315741696","1315745791","LB" +"1315745792","1315749375","CZ" +"1315749376","1315749503","ES" +"1315749504","1315749887","CZ" +"1315749888","1315753983","RU" +"1315753984","1315758079","KZ" +"1315758080","1315762175","FR" +"1315762176","1315766271","BG" +"1315766272","1315769087","NL" +"1315769088","1315769343","EU" +"1315769344","1315769855","NL" +"1315769856","1315770111","EU" +"1315770112","1315770367","NL" +"1315770368","1315770383","UA" +"1315770384","1315770399","NA" +"1315770400","1315770503","UA" +"1315770504","1315770511","NA" +"1315770512","1315770575","UA" +"1315770576","1315770583","NA" +"1315770584","1315770591","UA" +"1315770592","1315770599","NA" +"1315770600","1315770639","UA" +"1315770640","1315770647","NA" +"1315770648","1315770719","UA" +"1315770720","1315770727","NA" +"1315770728","1315770975","UA" +"1315770976","1315770983","NA" +"1315770984","1315770991","UA" +"1315770992","1315770999","NA" +"1315771000","1315771199","UA" +"1315771200","1315771207","NA" +"1315771208","1315771223","UA" +"1315771224","1315771231","NA" +"1315771232","1315771247","UA" +"1315771248","1315771263","NA" +"1315771264","1315771271","UA" +"1315771272","1315771279","NA" +"1315771280","1315771415","UA" +"1315771416","1315771423","NA" +"1315771424","1315771639","UA" +"1315771640","1315771647","NA" +"1315771648","1315771759","UA" +"1315771760","1315771767","NA" +"1315771768","1315771815","UA" +"1315771816","1315771823","NA" +"1315771824","1315771871","UA" +"1315771872","1315771879","NA" +"1315771880","1315771935","UA" +"1315771936","1315771951","NA" +"1315771952","1315771959","UA" +"1315771960","1315771967","NA" +"1315771968","1315772031","UA" +"1315772032","1315772039","NA" +"1315772040","1315772167","UA" +"1315772168","1315772175","NA" +"1315772176","1315772191","UA" +"1315772192","1315772199","NA" +"1315772200","1315772223","UA" +"1315772224","1315772231","NA" +"1315772232","1315772303","UA" +"1315772304","1315772311","NA" +"1315772312","1315772319","UA" +"1315772320","1315772327","NA" +"1315772328","1315772399","UA" +"1315772400","1315772407","NA" +"1315772408","1315772463","UA" +"1315772464","1315772479","NA" +"1315772480","1315772503","UA" +"1315772504","1315772511","NA" +"1315772512","1315772583","UA" +"1315772584","1315772599","NA" +"1315772600","1315772703","UA" +"1315772704","1315772711","NA" +"1315772712","1315772887","UA" +"1315772888","1315772895","NA" +"1315772896","1315772919","UA" +"1315772920","1315772927","NA" +"1315772928","1315773463","UA" +"1315773464","1315773471","NA" +"1315773472","1315773487","UA" +"1315773488","1315773495","NA" +"1315773496","1315773511","UA" +"1315773512","1315773519","NA" +"1315773520","1315773535","UA" +"1315773536","1315773543","NA" +"1315773544","1315773551","UA" +"1315773552","1315773559","NA" +"1315773560","1315773575","UA" +"1315773576","1315773583","NA" +"1315773584","1315773655","UA" +"1315773656","1315773663","NA" +"1315773664","1315773679","UA" +"1315773680","1315773687","NA" +"1315773688","1315773703","UA" +"1315773704","1315773711","NA" +"1315773712","1315773719","UA" +"1315773720","1315773751","NA" +"1315773752","1315773895","UA" +"1315773896","1315773903","NA" +"1315773904","1315773955","UA" +"1315773956","1315773959","NA" +"1315773960","1315773983","UA" +"1315773984","1315773991","BY" +"1315773992","1315774015","UA" +"1315774016","1315774031","NA" +"1315774032","1315774039","UA" +"1315774040","1315774071","NA" +"1315774072","1315774095","UA" +"1315774096","1315774111","NA" +"1315774112","1315774135","UA" +"1315774136","1315774143","US" +"1315774144","1315774191","UA" +"1315774192","1315774207","NA" +"1315774208","1315774239","UA" +"1315774240","1315774255","RU" +"1315774256","1315774263","NA" +"1315774264","1315774423","UA" +"1315774424","1315774431","NA" +"1315774432","1315774463","UA" +"1315774464","1315778559","RU" +"1315778560","1315780607","AZ" +"1315780608","1315780863","DE" +"1315780864","1315781119","PL" +"1315781120","1315781631","DE" +"1315781632","1315781887","DK" +"1315781888","1315782143","DE" +"1315782144","1315782399","PL" +"1315782400","1315782655","DE" +"1315782656","1315786751","AM" +"1315786752","1315790592","FR" +"1315790593","1315790593","IT" +"1315790594","1315790847","FR" +"1315790848","1315794943","RS" +"1315794944","1315803135","RU" +"1315803136","1315807231","KZ" +"1315807232","1315815423","GB" +"1315815424","1315819519","IR" +"1315819520","1315823615","DK" +"1315823616","1315827711","IQ" +"1315827712","1315831807","RU" +"1315831808","1315835903","SA" +"1315835904","1315836159","CY" +"1315836160","1315839487","MT" +"1315839488","1315839743","CY" +"1315839744","1315839999","MT" +"1315840000","1315844095","EE" +"1315844096","1315848191","RU" +"1315848192","1315852287","BH" +"1315852288","1315856383","SE" +"1315856384","1315860479","SY" +"1315860480","1315864575","IR" +"1315864576","1315868671","CH" +"1315868672","1315872767","RU" +"1315872768","1315875183","GB" +"1315875184","1315875199","ES" +"1315875200","1315876863","GB" +"1315876864","1315880959","IT" +"1315880960","1315885055","BE" +"1315885056","1315889151","CZ" +"1315889152","1315893247","DE" +"1315893248","1315897343","RU" +"1315897344","1315901439","IR" +"1315901440","1315905535","UA" +"1315905536","1315907583","BA" +"1315907584","1315908095","SI" +"1315908096","1315909631","BA" +"1315909632","1315913727","AZ" +"1315913728","1315917823","DE" +"1315917824","1315921919","RU" +"1315921920","1315926015","TR" +"1315926016","1315930111","CZ" +"1315930112","1315930175","LB" +"1315930176","1315930623","DE" +"1315930624","1315930879","LB" +"1315930880","1315931135","DE" +"1315931136","1315931391","LB" +"1315931392","1315934207","DE" +"1315934208","1315938303","RU" +"1315938304","1315942399","DK" +"1315942400","1315946495","UA" +"1315946496","1315950591","GG" +"1315950592","1315954687","UA" +"1315954688","1315958783","DE" +"1315958784","1315962879","RU" +"1315962880","1317011455","FR" +"1317011456","1317044223","BG" +"1317044224","1317076991","CZ" +"1317076992","1317109759","BE" +"1317109760","1317113103","GB" +"1317113104","1317113119","IE" +"1317113120","1317113855","GB" +"1317113856","1317114111","US" +"1317114112","1317118207","GB" +"1317118208","1317118463","IN" +"1317118464","1317119103","GB" +"1317119104","1317119119","CH" +"1317119120","1317122175","GB" +"1317122176","1317122303","CY" +"1317122304","1317122559","RU" +"1317122560","1317124095","GB" +"1317124096","1317124351","US" +"1317124352","1317126399","GB" +"1317126400","1317126655","US" +"1317126656","1317126815","GB" +"1317126816","1317126847","US" +"1317126848","1317129023","GB" +"1317129024","1317129039","CH" +"1317129040","1317129279","GB" +"1317129280","1317129343","CA" +"1317129344","1317129471","GB" +"1317129472","1317129727","IT" +"1317129728","1317130495","GB" +"1317130496","1317130511","CH" +"1317130512","1317133055","GB" +"1317133056","1317133183","LV" +"1317133184","1317135615","GB" +"1317135616","1317135871","DE" +"1317135872","1317137183","GB" +"1317137184","1317137215","CH" +"1317137216","1317137663","GB" +"1317137664","1317137919","SE" +"1317137920","1317140095","GB" +"1317140096","1317140223","US" +"1317140224","1317140559","GB" +"1317140560","1317140575","FR" +"1317140576","1317142143","GB" +"1317142144","1317142271","CA" +"1317142272","1317142527","GB" +"1317142528","1317175295","PT" +"1317175296","1317208063","BG" +"1317208064","1317240831","HU" +"1317240832","1317273599","PL" +"1317273600","1317306367","AT" +"1317306368","1317339135","RU" +"1317339136","1317371903","MT" +"1317371904","1317404671","PL" +"1317404672","1317437439","IT" +"1317437440","1317470207","HR" +"1317470208","1317502975","TR" +"1317502976","1317535743","IE" +"1317535744","1317552127","GB" +"1317552128","1317568511","ES" +"1317568512","1317584895","CZ" +"1317584896","1317601279","RU" +"1317601280","1317617663","UA" +"1317617664","1317634047","RU" +"1317634048","1317637119","IE" +"1317637120","1317637375","GB" +"1317637376","1317640703","IE" +"1317640704","1317641215","GB" +"1317641216","1317641471","IE" +"1317641472","1317641727","GB" +"1317641728","1317642863","IE" +"1317642864","1317642879","GB" +"1317642880","1317642975","IE" +"1317642976","1317642991","GB" +"1317642992","1317643023","IE" +"1317643024","1317643039","GB" +"1317643040","1317645407","IE" +"1317645408","1317645423","GB" +"1317645424","1317645471","IE" +"1317645472","1317645823","GB" +"1317645824","1317646895","IE" +"1317646896","1317646911","GB" +"1317646912","1317646991","IE" +"1317646992","1317646999","GB" +"1317647000","1317647359","IE" +"1317647360","1317647615","GB" +"1317647616","1317648383","IE" +"1317648384","1317649919","GB" +"1317649920","1317650023","IE" +"1317650024","1317650031","GB" +"1317650032","1317650047","IE" +"1317650048","1317650095","GB" +"1317650096","1317650135","IE" +"1317650136","1317650143","GB" +"1317650144","1317650431","IE" +"1317650432","1317666815","PT" +"1317666816","1317666823","GB" +"1317666824","1317666831","CD" +"1317666832","1317666839","GB" +"1317666840","1317666855","GH" +"1317666856","1317666863","GB" +"1317666864","1317666871","GH" +"1317666872","1317666879","GB" +"1317666880","1317666887","LR" +"1317666888","1317666911","NG" +"1317666912","1317666959","GB" +"1317666960","1317666967","NG" +"1317666968","1317666999","GB" +"1317667000","1317667007","AO" +"1317667008","1317667015","GH" +"1317667016","1317667055","GB" +"1317667056","1317667063","LR" +"1317667064","1317667103","GB" +"1317667104","1317667111","UG" +"1317667112","1317667135","GB" +"1317667136","1317667143","AO" +"1317667144","1317667151","GB" +"1317667152","1317667159","NG" +"1317667160","1317667167","AO" +"1317667168","1317667175","NG" +"1317667176","1317667191","GB" +"1317667192","1317667207","NG" +"1317667208","1317667223","GB" +"1317667224","1317667231","NG" +"1317667232","1317667239","GB" +"1317667240","1317667247","NG" +"1317667248","1317667287","GB" +"1317667288","1317667295","NG" +"1317667296","1317667311","GB" +"1317667312","1317667335","NG" +"1317667336","1317667343","GB" +"1317667344","1317667351","NG" +"1317667352","1317667359","AO" +"1317667360","1317667423","GB" +"1317667424","1317667431","TD" +"1317667432","1317667439","GH" +"1317667440","1317667455","GB" +"1317667456","1317667463","NG" +"1317667464","1317667487","GB" +"1317667488","1317667495","GH" +"1317667496","1317667551","GB" +"1317667552","1317667567","NG" +"1317667568","1317667735","GB" +"1317667736","1317667743","NG" +"1317667744","1317667751","GB" +"1317667752","1317667759","NG" +"1317667760","1317667767","FR" +"1317667768","1317667775","ZA" +"1317667776","1317667783","US" +"1317667784","1317667791","AO" +"1317667792","1317667799","NG" +"1317667800","1317667807","GB" +"1317667808","1317667815","NG" +"1317667816","1317667824","UG" +"1317667825","1317668143","GB" +"1317668144","1317668151","AO" +"1317668152","1317668167","NG" +"1317668168","1317668183","GB" +"1317668184","1317668191","CI" +"1317668192","1317668199","GB" +"1317668200","1317668207","BW" +"1317668208","1317668215","LR" +"1317668216","1317668223","GB" +"1317668224","1317668231","NG" +"1317668232","1317668271","GB" +"1317668272","1317668279","SL" +"1317668280","1317668303","GB" +"1317668304","1317668311","UG" +"1317668312","1317668319","IQ" +"1317668320","1317668351","GB" +"1317668352","1317668359","NG" +"1317668360","1317668367","SL" +"1317668368","1317668391","GB" +"1317668392","1317668399","NG" +"1317668400","1317668407","GB" +"1317668408","1317668415","GH" +"1317668416","1317668447","NG" +"1317668448","1317668455","SL" +"1317668456","1317668463","GB" +"1317668464","1317668471","AO" +"1317668472","1317668479","NG" +"1317668480","1317668487","GB" +"1317668488","1317668495","UG" +"1317668496","1317668503","GH" +"1317668504","1317668511","CD" +"1317668512","1317668519","GB" +"1317668520","1317668527","MZ" +"1317668528","1317668535","GB" +"1317668536","1317668543","BJ" +"1317668544","1317668551","GB" +"1317668552","1317668559","AO" +"1317668560","1317668567","GB" +"1317668568","1317668575","NG" +"1317668576","1317668583","GB" +"1317668584","1317668591","LR" +"1317668592","1317668599","UG" +"1317668600","1317668615","GB" +"1317668616","1317668623","UG" +"1317668624","1317668631","IQ" +"1317668632","1317668639","GB" +"1317668640","1317668655","NG" +"1317668656","1317668671","GB" +"1317668672","1317668687","NG" +"1317668688","1317668695","GB" +"1317668696","1317668703","NG" +"1317668704","1317668727","GB" +"1317668728","1317668735","NG" +"1317668736","1317668767","GB" +"1317668768","1317668775","LR" +"1317668776","1317668783","GB" +"1317668784","1317668791","NG" +"1317668792","1317668807","GB" +"1317668808","1317668815","NG" +"1317668816","1317668847","GB" +"1317668848","1317668855","NG" +"1317668856","1317668863","GB" +"1317668864","1317668871","LR" +"1317668872","1317669007","GB" +"1317669008","1317669015","NG" +"1317669016","1317669055","GB" +"1317669056","1317669063","NG" +"1317669064","1317669095","GB" +"1317669096","1317669103","NG" +"1317669104","1317669111","GB" +"1317669112","1317669119","NG" +"1317669120","1317669375","GE" +"1317669376","1317669631","CG" +"1317669632","1317669903","GB" +"1317669904","1317669911","NG" +"1317669912","1317669919","GH" +"1317669920","1317669943","GB" +"1317669944","1317669959","NG" +"1317669960","1317669983","GB" +"1317669984","1317669991","LR" +"1317669992","1317669999","NG" +"1317670000","1317670063","GB" +"1317670064","1317670103","NG" +"1317670104","1317670135","GB" +"1317670136","1317670143","NG" +"1317670144","1317670175","SL" +"1317670176","1317670223","GB" +"1317670224","1317670231","AO" +"1317670232","1317670239","GB" +"1317670240","1317670247","NG" +"1317670248","1317670255","GB" +"1317670256","1317670263","NG" +"1317670264","1317670447","GB" +"1317670448","1317670455","IQ" +"1317670456","1317670463","GB" +"1317670464","1317670471","NG" +"1317670472","1317670479","CO" +"1317670480","1317670511","GB" +"1317670512","1317670519","CI" +"1317670520","1317670543","NG" +"1317670544","1317670551","GB" +"1317670552","1317670559","UG" +"1317670560","1317670567","NG" +"1317670568","1317670575","GB" +"1317670576","1317670583","NG" +"1317670584","1317670591","GH" +"1317670592","1317670607","GB" +"1317670608","1317670615","NG" +"1317670616","1317670631","UG" +"1317670632","1317670639","NG" +"1317670640","1317670647","GB" +"1317670648","1317670655","NG" +"1317670656","1317670663","AO" +"1317670664","1317670679","GB" +"1317670680","1317670703","NG" +"1317670704","1317670711","GB" +"1317670712","1317670719","GH" +"1317670720","1317670727","GB" +"1317670728","1317670735","GH" +"1317670736","1317670767","GB" +"1317670768","1317670775","GH" +"1317670776","1317670783","GB" +"1317670784","1317670791","GH" +"1317670792","1317670815","GB" +"1317670816","1317670823","NG" +"1317670824","1317670847","GB" +"1317670848","1317670855","NG" +"1317670856","1317670863","CD" +"1317670864","1317670879","GB" +"1317670880","1317670887","NG" +"1317670888","1317670896","GB" +"1317670897","1317670903","NG" +"1317670904","1317671175","GB" +"1317671176","1317671191","NG" +"1317671192","1317671239","GB" +"1317671240","1317671247","CI" +"1317671248","1317671255","GB" +"1317671256","1317671263","CI" +"1317671264","1317671279","GB" +"1317671280","1317671287","NG" +"1317671288","1317671295","GB" +"1317671296","1317671303","NG" +"1317671304","1317671319","GB" +"1317671320","1317671327","NG" +"1317671328","1317671335","GB" +"1317671336","1317671343","BW" +"1317671344","1317671359","GB" +"1317671360","1317671367","NG" +"1317671368","1317671375","GB" +"1317671376","1317671383","NG" +"1317671384","1317671391","CI" +"1317671392","1317671399","GB" +"1317671400","1317671407","IQ" +"1317671408","1317671439","GB" +"1317671440","1317671447","ZW" +"1317671448","1317671487","NG" +"1317671488","1317671527","GB" +"1317671528","1317671535","NG" +"1317671536","1317671543","LR" +"1317671544","1317671551","IQ" +"1317671552","1317671559","GB" +"1317671560","1317671567","NG" +"1317671568","1317671647","GB" +"1317671648","1317671671","NG" +"1317671672","1317671679","AO" +"1317671680","1317671687","LR" +"1317671688","1317671719","GB" +"1317671720","1317671727","NG" +"1317671728","1317671759","GB" +"1317671760","1317671767","AO" +"1317671768","1317671783","GB" +"1317671784","1317671807","NG" +"1317671808","1317671823","CI" +"1317671824","1317671831","NG" +"1317671832","1317671847","GB" +"1317671848","1317671855","NG" +"1317671856","1317671863","UG" +"1317671864","1317671887","GB" +"1317671888","1317671895","NG" +"1317671896","1317671903","GB" +"1317671904","1317671911","NG" +"1317671912","1317671919","AO" +"1317671920","1317671927","NG" +"1317671928","1317671935","GB" +"1317671936","1317672447","GA" +"1317672448","1317672455","GB" +"1317672456","1317672463","GA" +"1317672464","1317672471","NG" +"1317672472","1317672487","GB" +"1317672488","1317672503","NG" +"1317672504","1317672583","GB" +"1317672584","1317672591","CD" +"1317672592","1317672615","GB" +"1317672616","1317672623","NG" +"1317672624","1317672671","GB" +"1317672672","1317672679","NG" +"1317672680","1317672727","GB" +"1317672728","1317672735","UG" +"1317672736","1317672743","LR" +"1317672744","1317672759","GB" +"1317672760","1317672767","NG" +"1317672768","1317672815","GB" +"1317672816","1317672823","BW" +"1317672824","1317672839","GB" +"1317672840","1317672847","NG" +"1317672848","1317672863","GB" +"1317672864","1317672871","NG" +"1317672872","1317672903","GB" +"1317672904","1317672919","CI" +"1317672920","1317672927","GH" +"1317672928","1317672935","GB" +"1317672936","1317672943","NG" +"1317672944","1317672959","GB" +"1317672960","1317673231","NG" +"1317673232","1317673239","GB" +"1317673240","1317673247","NG" +"1317673248","1317673335","GB" +"1317673336","1317673343","GH" +"1317673344","1317673359","GB" +"1317673360","1317673367","NG" +"1317673368","1317673375","GB" +"1317673376","1317673383","AO" +"1317673384","1317673391","NG" +"1317673392","1317673399","GB" +"1317673400","1317673407","NG" +"1317673408","1317673423","GB" +"1317673424","1317673431","NG" +"1317673432","1317673455","GB" +"1317673456","1317673463","AO" +"1317673464","1317673471","GB" +"1317673472","1317673479","NG" +"1317673480","1317673495","GB" +"1317673496","1317673527","NG" +"1317673528","1317673535","GB" +"1317673536","1317673551","ZW" +"1317673552","1317673567","GB" +"1317673568","1317673575","NG" +"1317673576","1317673583","CD" +"1317673584","1317673623","GB" +"1317673624","1317673631","NG" +"1317673632","1317673639","GB" +"1317673640","1317673647","AO" +"1317673648","1317673679","GB" +"1317673680","1317673687","IQ" +"1317673688","1317673695","GB" +"1317673696","1317673703","NG" +"1317673704","1317673711","GB" +"1317673712","1317673719","CO" +"1317673720","1317673727","NG" +"1317673728","1317673735","GB" +"1317673736","1317673743","AO" +"1317673744","1317673751","IQ" +"1317673752","1317673815","GB" +"1317673816","1317673823","LR" +"1317673824","1317673863","GB" +"1317673864","1317673871","NG" +"1317673872","1317673903","GB" +"1317673904","1317673911","NG" +"1317673912","1317673919","AO" +"1317673920","1317673927","CI" +"1317673928","1317673943","NG" +"1317673944","1317673951","AO" +"1317673952","1317673959","NG" +"1317673960","1317673975","GB" +"1317673976","1317674239","NG" +"1317674240","1317674271","GB" +"1317674272","1317674279","NG" +"1317674280","1317674287","GB" +"1317674288","1317674295","GH" +"1317674296","1317674303","AO" +"1317674304","1317674319","NG" +"1317674320","1317674351","GB" +"1317674352","1317674359","NG" +"1317674360","1317674415","GB" +"1317674416","1317674423","AO" +"1317674424","1317674431","UG" +"1317674432","1317674439","GB" +"1317674440","1317674440","AO" +"1317674441","1317674447","GB" +"1317674448","1317674455","AO" +"1317674456","1317674463","GB" +"1317674464","1317674471","NG" +"1317674472","1317674487","GB" +"1317674488","1317674495","UG" +"1317674496","1317674527","GB" +"1317674528","1317674535","NG" +"1317674536","1317674543","IQ" +"1317674544","1317674567","NG" +"1317674568","1317674607","GB" +"1317674608","1317674615","NG" +"1317674616","1317674623","GB" +"1317674624","1317674631","NG" +"1317674632","1317674639","GB" +"1317674640","1317674647","NG" +"1317674648","1317674655","GB" +"1317674656","1317674671","NG" +"1317674672","1317674687","GB" +"1317674688","1317674703","NG" +"1317674704","1317674711","GB" +"1317674712","1317674735","NG" +"1317674736","1317674743","AO" +"1317674744","1317674751","IQ" +"1317674752","1317674759","NG" +"1317674760","1317674767","GB" +"1317674768","1317674775","NG" +"1317674776","1317674783","GB" +"1317674784","1317674791","NG" +"1317674792","1317674799","GB" +"1317674800","1317674807","NG" +"1317674808","1317674823","GB" +"1317674824","1317674831","NG" +"1317674832","1317674847","GB" +"1317674848","1317674855","NG" +"1317674856","1317674879","GB" +"1317674880","1317674887","NG" +"1317674888","1317674911","GB" +"1317674912","1317674927","NG" +"1317674928","1317674935","GB" +"1317674936","1317674943","NG" +"1317674944","1317674951","GA" +"1317674952","1317674959","NG" +"1317674960","1317674967","GH" +"1317674968","1317674983","NG" +"1317674984","1317675031","GB" +"1317675032","1317675039","NG" +"1317675040","1317675063","GB" +"1317675064","1317675071","AO" +"1317675072","1317675095","NG" +"1317675096","1317675199","GB" +"1317675200","1317675215","NG" +"1317675216","1317675247","GB" +"1317675248","1317675255","AO" +"1317675256","1317675271","GB" +"1317675272","1317675279","NG" +"1317675280","1317675295","GB" +"1317675296","1317675319","NG" +"1317675320","1317675351","GB" +"1317675352","1317675359","IQ" +"1317675360","1317675367","NG" +"1317675368","1317675423","GB" +"1317675424","1317675439","NG" +"1317675440","1317675447","GB" +"1317675448","1317675455","NG" +"1317675456","1317675463","GB" +"1317675464","1317675471","CI" +"1317675472","1317675503","GB" +"1317675504","1317675511","NG" +"1317675512","1317675551","GB" +"1317675552","1317675559","NG" +"1317675560","1317675567","NA" +"1317675568","1317675591","GB" +"1317675592","1317675607","NG" +"1317675608","1317675623","GB" +"1317675624","1317675639","NG" +"1317675640","1317675647","FR" +"1317675648","1317675655","LR" +"1317675656","1317675671","GB" +"1317675672","1317675679","NG" +"1317675680","1317675695","GB" +"1317675696","1317675703","NG" +"1317675704","1317675711","GB" +"1317675712","1317675719","CM" +"1317675720","1317675743","GB" +"1317675744","1317675751","GH" +"1317675752","1317675759","NG" +"1317675760","1317675775","GH" +"1317675776","1317675791","GB" +"1317675792","1317675799","CD" +"1317675800","1317675807","GB" +"1317675808","1317675815","NG" +"1317675816","1317675823","GB" +"1317675824","1317675839","NG" +"1317675840","1317675847","GB" +"1317675848","1317675855","TD" +"1317675856","1317675903","GB" +"1317675904","1317675911","UG" +"1317675912","1317675919","NG" +"1317675920","1317675927","GB" +"1317675928","1317675935","LR" +"1317675936","1317675951","GB" +"1317675952","1317675959","NG" +"1317675960","1317675967","GB" +"1317675968","1317675975","NG" +"1317675976","1317675991","GB" +"1317675992","1317675999","NG" +"1317676000","1317676007","GB" +"1317676008","1317676015","GH" +"1317676016","1317676023","SD" +"1317676024","1317676031","GQ" +"1317676032","1317676039","NG" +"1317676040","1317676055","GB" +"1317676056","1317676063","NG" +"1317676064","1317676071","GH" +"1317676072","1317676079","NG" +"1317676080","1317676087","AO" +"1317676088","1317676095","NG" +"1317676096","1317676103","CM" +"1317676104","1317676111","NG" +"1317676112","1317676119","CM" +"1317676120","1317676135","GB" +"1317676136","1317676143","CM" +"1317676144","1317676151","NG" +"1317676152","1317676159","CM" +"1317676160","1317676167","TG" +"1317676168","1317676175","ML" +"1317676176","1317676191","GB" +"1317676192","1317676207","SD" +"1317676208","1317676215","GB" +"1317676216","1317676223","NG" +"1317676224","1317676231","GH" +"1317676232","1317676239","NG" +"1317676240","1317676247","GB" +"1317676248","1317676255","NG" +"1317676256","1317676263","CD" +"1317676264","1317676271","NG" +"1317676272","1317676279","GB" +"1317676280","1317676287","NG" +"1317676288","1317676543","LR" +"1317676544","1317676551","NG" +"1317676552","1317676559","GB" +"1317676560","1317676567","NG" +"1317676568","1317676583","GB" +"1317676584","1317676591","NG" +"1317676592","1317676599","AO" +"1317676600","1317676607","UG" +"1317676608","1317676631","GB" +"1317676632","1317676639","NG" +"1317676640","1317676647","CD" +"1317676648","1317676655","GB" +"1317676656","1317676671","NG" +"1317676672","1317676687","GB" +"1317676688","1317676695","LR" +"1317676696","1317676711","GB" +"1317676712","1317676719","NG" +"1317676720","1317676759","GB" +"1317676760","1317676767","LR" +"1317676768","1317676775","GB" +"1317676776","1317676783","UG" +"1317676784","1317676799","GB" +"1317676800","1317676807","CD" +"1317676808","1317676815","NG" +"1317676816","1317676823","LR" +"1317676824","1317676863","GB" +"1317676864","1317676871","TG" +"1317676872","1317676879","NG" +"1317676880","1317676903","GB" +"1317676904","1317676911","NG" +"1317676912","1317676919","GB" +"1317676920","1317676927","NG" +"1317676928","1317676943","GB" +"1317676944","1317676951","CM" +"1317676952","1317676983","GB" +"1317676984","1317676999","NG" +"1317677000","1317677007","IQ" +"1317677008","1317677023","GB" +"1317677024","1317677039","NG" +"1317677040","1317677047","GB" +"1317677048","1317677055","NG" +"1317677056","1317677063","UG" +"1317677064","1317677071","TD" +"1317677072","1317677079","NG" +"1317677080","1317677095","GB" +"1317677096","1317677103","BF" +"1317677104","1317677191","GB" +"1317677192","1317677199","SD" +"1317677200","1317677215","NG" +"1317677216","1317677231","GB" +"1317677232","1317677239","UG" +"1317677240","1317677247","GB" +"1317677248","1317677271","NG" +"1317677272","1317677279","FR" +"1317677280","1317677303","GB" +"1317677304","1317677311","NG" +"1317677312","1317677319","CD" +"1317677320","1317677327","AO" +"1317677328","1317677335","CD" +"1317677336","1317677343","GB" +"1317677344","1317677351","NG" +"1317677352","1317677375","GB" +"1317677376","1317677391","NG" +"1317677392","1317677399","GB" +"1317677400","1317677407","NG" +"1317677408","1317677415","BJ" +"1317677416","1317677423","LR" +"1317677424","1317677447","GB" +"1317677448","1317677455","CD" +"1317677456","1317677463","AO" +"1317677464","1317677471","GQ" +"1317677472","1317677479","NG" +"1317677480","1317677487","GB" +"1317677488","1317677495","CD" +"1317677496","1317677527","NG" +"1317677528","1317677535","GQ" +"1317677536","1317677559","GB" +"1317677560","1317677567","NG" +"1317677568","1317677823","GB" +"1317677824","1317677831","AO" +"1317677832","1317677839","GB" +"1317677840","1317677847","LR" +"1317677848","1317677855","NG" +"1317677856","1317677863","BF" +"1317677864","1317677895","GB" +"1317677896","1317677903","GN" +"1317677904","1317678007","GB" +"1317678008","1317678015","NG" +"1317678016","1317678047","GB" +"1317678048","1317678055","IQ" +"1317678056","1317678095","GB" +"1317678096","1317678103","GQ" +"1317678104","1317678111","NG" +"1317678112","1317678127","GB" +"1317678128","1317678135","SD" +"1317678136","1317678143","NG" +"1317678144","1317678151","GB" +"1317678152","1317678159","NG" +"1317678160","1317678167","GQ" +"1317678168","1317678175","NG" +"1317678176","1317678183","GR" +"1317678184","1317678191","NG" +"1317678192","1317678223","GB" +"1317678224","1317678231","NG" +"1317678232","1317678239","BF" +"1317678240","1317678247","CD" +"1317678248","1317678255","GB" +"1317678256","1317678263","CD" +"1317678264","1317678271","GB" +"1317678272","1317678287","NG" +"1317678288","1317678295","GR" +"1317678296","1317678311","GB" +"1317678312","1317678319","SD" +"1317678320","1317678327","NG" +"1317678328","1317678335","GB" +"1317678336","1317678343","AO" +"1317678344","1317678351","GB" +"1317678352","1317678359","CD" +"1317678360","1317678367","NG" +"1317678368","1317678375","CD" +"1317678376","1317678383","GB" +"1317678384","1317678391","GL" +"1317678392","1317678399","GB" +"1317678400","1317678407","ML" +"1317678408","1317678415","GB" +"1317678416","1317678423","NG" +"1317678424","1317678455","GB" +"1317678456","1317678463","CD" +"1317678464","1317678479","GB" +"1317678480","1317678487","CD" +"1317678488","1317678495","ML" +"1317678496","1317678535","GB" +"1317678536","1317678551","CD" +"1317678552","1317678559","ML" +"1317678560","1317678567","GB" +"1317678568","1317678575","CD" +"1317678576","1317678583","NG" +"1317678584","1317678591","AO" +"1317678592","1317678943","GB" +"1317678944","1317678951","NG" +"1317678952","1317679047","GB" +"1317679048","1317679055","NG" +"1317679056","1317679615","GB" +"1317679616","1317679623","AO" +"1317679624","1317679639","GB" +"1317679640","1317679647","ZW" +"1317679648","1317679655","CD" +"1317679656","1317679663","GB" +"1317679664","1317679671","AO" +"1317679672","1317679679","GB" +"1317679680","1317679687","NG" +"1317679688","1317679695","GB" +"1317679696","1317679703","LU" +"1317679704","1317679719","NG" +"1317679720","1317679727","GB" +"1317679728","1317679735","LR" +"1317679736","1317679743","GB" +"1317679744","1317679751","AO" +"1317679752","1317679759","GB" +"1317679760","1317679767","NG" +"1317679768","1317679783","GB" +"1317679784","1317679799","NG" +"1317679800","1317679807","GB" +"1317679808","1317679815","AO" +"1317679816","1317679839","GB" +"1317679840","1317679847","NG" +"1317679848","1317679863","GB" +"1317679864","1317679871","NG" +"1317679872","1317681159","GB" +"1317681160","1317681167","NG" +"1317681168","1317681175","GB" +"1317681176","1317681191","NG" +"1317681192","1317681279","GB" +"1317681280","1317681287","NG" +"1317681288","1317681927","GB" +"1317681928","1317681931","NG" +"1317681932","1317683199","GB" +"1317683200","1317683839","DE" +"1317683840","1317683855","CH" +"1317683856","1317683863","DE" +"1317683864","1317683871","FR" +"1317683872","1317685503","DE" +"1317685504","1317685631","BE" +"1317685632","1317686303","DE" +"1317686304","1317686319","NL" +"1317686320","1317686335","DE" +"1317686336","1317686367","NL" +"1317686368","1317696287","DE" +"1317696288","1317696319","ES" +"1317696320","1317699071","DE" +"1317699072","1317699583","PL" +"1317699584","1317715967","RU" +"1317715968","1317732351","SA" +"1317732352","1317748735","HU" +"1317748736","1317765119","RU" +"1317765120","1317781503","GE" +"1317781504","1317814271","RU" +"1317814272","1317830655","DE" +"1317830656","1317831679","NL" +"1317831680","1317831711","CY" +"1317831712","1317831839","NL" +"1317831840","1317831871","CA" +"1317831872","1317832191","NL" +"1317832192","1317832447","GB" +"1317832448","1317832511","CY" +"1317832512","1317832575","NL" +"1317832576","1317832703","GI" +"1317832704","1317832959","NL" +"1317832960","1317833215","IT" +"1317833216","1317835007","NL" +"1317835008","1317835071","RU" +"1317835072","1317835135","GI" +"1317835136","1317835199","RU" +"1317835200","1317835263","CY" +"1317835264","1317835615","NL" +"1317835616","1317835647","RU" +"1317835648","1317835711","NL" +"1317835712","1317835775","GI" +"1317835776","1317836031","CY" +"1317836032","1317836159","NL" +"1317836160","1317836223","CY" +"1317836224","1317836863","NL" +"1317836864","1317836927","CY" +"1317836928","1317836991","NL" +"1317836992","1317837007","GB" +"1317837008","1317837023","RU" +"1317837024","1317837567","NL" +"1317837568","1317837823","US" +"1317837824","1317837951","NL" +"1317837952","1317838015","CY" +"1317838016","1317838943","NL" +"1317838944","1317838959","GB" +"1317838960","1317838975","NL" +"1317838976","1317839103","GI" +"1317839104","1317839359","NL" +"1317839360","1317839615","RU" +"1317839616","1317839679","HK" +"1317839680","1317839695","CZ" +"1317839696","1317840639","NL" +"1317840640","1317840895","US" +"1317840896","1317841407","NL" +"1317841408","1317841439","SC" +"1317841440","1317841471","MT" +"1317841472","1317841535","CY" +"1317841536","1317841567","HK" +"1317841568","1317841599","NL" +"1317841600","1317841663","GI" +"1317841664","1317841727","HK" +"1317841728","1317841855","CY" +"1317841856","1317841887","IL" +"1317841888","1317842943","NL" +"1317842944","1317843071","CY" +"1317843072","1317843135","HK" +"1317843136","1317843199","CY" +"1317843200","1317843391","US" +"1317843392","1317843423","NL" +"1317843424","1317843455","US" +"1317843456","1317843519","NL" +"1317843520","1317843583","GI" +"1317843584","1317843647","US" +"1317843648","1317843839","NL" +"1317843840","1317843967","SC" +"1317843968","1317844223","MY" +"1317844224","1317845375","NL" +"1317845376","1317845503","US" +"1317845504","1317845631","NL" +"1317845632","1317845759","CY" +"1317845760","1317846271","NL" +"1317846272","1317846335","HK" +"1317846336","1317846399","NL" +"1317846400","1317846463","LU" +"1317846464","1317846527","NL" +"1317846528","1317846655","HK" +"1317846656","1317846759","NL" +"1317846760","1317846763","US" +"1317846764","1317846783","NL" +"1317846784","1317846911","CY" +"1317846912","1317847039","NL" +"1317847040","1317863423","RU" +"1317863424","1317879807","GB" +"1317879808","1317896191","SK" +"1317896192","1317912575","LU" +"1317912576","1317928959","GB" +"1317928960","1317945343","BG" +"1317945344","1317950207","AT" +"1317950208","1317950463","CZ" +"1317950464","1317956607","AT" +"1317956608","1317956639","CZ" +"1317956640","1317957631","AT" +"1317957632","1317958911","DE" +"1317958912","1317958975","CZ" +"1317958976","1317959007","DE" +"1317959008","1317965047","AT" +"1317965048","1317965055","DE" +"1317965056","1317977407","AT" +"1317977408","1317977415","MT" +"1317977416","1317978111","AT" +"1317978112","1317994495","RU" +"1317994496","1317995007","NL" +"1317995008","1317996095","DE" +"1317996096","1317996287","NL" +"1317996288","1317998207","DE" +"1317998208","1317998335","NL" +"1317998336","1318000383","DE" +"1318000384","1318000447","NL" +"1318000448","1318001791","DE" +"1318001792","1318001919","NL" +"1318001920","1318002175","DE" +"1318002176","1318002431","NL" +"1318002432","1318003711","DE" +"1318003712","1318003967","NL" +"1318003968","1318005631","DE" +"1318005632","1318005759","NL" +"1318005760","1318006271","DE" +"1318006272","1318006783","NL" +"1318006784","1318007999","DE" +"1318008000","1318008031","NL" +"1318008032","1318009423","DE" +"1318009424","1318009471","NL" +"1318009472","1318010511","DE" +"1318010512","1318010879","NL" +"1318010880","1318027263","DK" +"1318027264","1318043647","IE" +"1318043648","1318584319","GB" +"1318584320","1318592511","PL" +"1318592512","1318592623","NL" +"1318592624","1318592639","DE" +"1318592640","1318592655","NL" +"1318592656","1318592671","US" +"1318592672","1318599807","NL" +"1318599808","1318599823","US" +"1318599824","1318600703","NL" +"1318600704","1318608895","AT" +"1318608896","1318617087","IT" +"1318617088","1318625279","FR" +"1318625280","1318633471","UA" +"1318633472","1318649855","IE" +"1318649856","1318658047","RU" +"1318658048","1318666239","SI" +"1318666240","1318674431","DE" +"1318674432","1318682623","HU" +"1318682624","1318690815","RU" +"1318690816","1318699007","DK" +"1318699008","1318707199","IE" +"1318707200","1318707775","FR" +"1318707776","1318707783","GB" +"1318707784","1318708511","FR" +"1318708512","1318708519","GB" +"1318708520","1318708599","FR" +"1318708600","1318708607","GB" +"1318708608","1318708639","FR" +"1318708640","1318708647","GB" +"1318708648","1318708735","FR" +"1318708736","1318708991","GB" +"1318708992","1318711647","FR" +"1318711648","1318711663","IT" +"1318711664","1318713855","FR" +"1318713856","1318714111","GB" +"1318714112","1318715390","FR" +"1318715391","1318715391","GB" +"1318715392","1318723583","BG" +"1318723584","1318731775","IR" +"1318731776","1318739967","PL" +"1318739968","1318748159","GB" +"1318748160","1318753023","LV" +"1318753024","1318753279","BE" +"1318753280","1318756351","LV" +"1318756352","1318764543","UA" +"1318764544","1318780927","KW" +"1318780928","1318789119","CH" +"1318789120","1318797311","ME" +"1318797312","1318805503","SY" +"1318805504","1318813695","PL" +"1318813696","1318821887","FR" +"1318821888","1318838271","RU" +"1318838272","1318841078","IE" +"1318841079","1318841079","GB" +"1318841080","1318846463","IE" +"1318846464","1318854655","NO" +"1318854656","1318862847","CZ" +"1318862848","1318871039","GB" +"1318871040","1318879231","DK" +"1318879232","1318887423","CZ" +"1318887424","1318895615","PL" +"1318895616","1318897663","SE" +"1318897664","1318903807","DK" +"1318903808","1318911999","RU" +"1318912000","1318920191","MK" +"1318920192","1318928383","IR" +"1318928384","1318936575","LT" +"1318936576","1318944767","DK" +"1318944768","1318956287","CZ" +"1318956288","1318957055","PL" +"1318957056","1318958079","CZ" +"1318958080","1318960895","PL" +"1318960896","1318961151","CZ" +"1318961152","1318969343","GB" +"1318969344","1318977535","RU" +"1318977536","1318985727","LT" +"1318985728","1319001087","GB" +"1319001088","1319002111","US" +"1319002112","1319010303","IE" +"1319010304","1319017215","CY" +"1319017216","1319017279","DE" +"1319017280","1319017295","CY" +"1319017296","1319017303","DE" +"1319017304","1319018495","CY" +"1319018496","1319026687","IR" +"1319026688","1319034879","RU" +"1319034880","1319035903","NO" +"1319035904","1319036927","DK" +"1319036928","1319038975","SE" +"1319038976","1319043071","NO" +"1319043072","1319051263","FR" +"1319051264","1319059455","UA" +"1319059456","1319067647","PL" +"1319067648","1319070271","DE" +"1319070272","1319070335","PT" +"1319070336","1319070463","RU" +"1319070464","1319070975","DE" +"1319070976","1319071103","PL" +"1319071104","1319071231","RU" +"1319071232","1319071487","PL" +"1319071488","1319073023","DE" +"1319073024","1319073279","TR" +"1319073280","1319074303","DE" +"1319074304","1319074559","HK" +"1319074560","1319074815","DE" +"1319074816","1319074943","PL" +"1319074944","1319075071","RU" +"1319075072","1319075199","PL" +"1319075200","1319075327","RU" +"1319075328","1319075455","DE" +"1319075456","1319075583","RU" +"1319075584","1319075711","DE" +"1319075712","1319075839","RU" +"1319075840","1319084031","BG" +"1319084032","1319092223","KW" +"1319092224","1319100415","IT" +"1319100416","1319108607","RU" +"1319108608","1321205759","TR" +"1321205760","1325400063","FR" +"1325400064","1329594367","IT" +"1329594368","1330642943","GB" +"1330642944","1331691519","FR" +"1331691520","1331757055","PL" +"1331757056","1331822591","IE" +"1331822592","1331824639","IT" +"1331824640","1331826687","RU" +"1331826688","1331828607","FR" +"1331828608","1331828615","BE" +"1331828616","1331828735","FR" +"1331828736","1331830783","LT" +"1331830784","1331831335","GB" +"1331831336","1331831343","IE" +"1331831344","1331831351","AE" +"1331831352","1331832831","GB" +"1331832832","1331834879","IT" +"1331834880","1331836927","BY" +"1331836928","1331838975","FR" +"1331838976","1331841023","ES" +"1331841024","1331843071","CZ" +"1331843072","1331845119","GB" +"1331845120","1331847167","RU" +"1331847168","1331849215","FR" +"1331849216","1331851263","RU" +"1331851264","1331853311","AL" +"1331853312","1331855359","AE" +"1331855360","1331857407","TR" +"1331857408","1331859455","RU" +"1331859456","1331861503","PL" +"1331861504","1331863551","CZ" +"1331863552","1331865599","GB" +"1331865600","1331869695","NL" +"1331869696","1331871743","SA" +"1331871744","1331873791","DK" +"1331873792","1331877887","RU" +"1331877888","1331879935","ES" +"1331879936","1331881983","DE" +"1331881984","1331883007","GB" +"1331883008","1331883263","SL" +"1331883264","1331886079","GB" +"1331886080","1331888127","RU" +"1331888128","1331890175","SE" +"1331890176","1331892223","IT" +"1331892224","1331894271","RU" +"1331894272","1331896319","NL" +"1331896320","1331898367","FR" +"1331898368","1331900415","GB" +"1331900416","1331902463","RU" +"1331902464","1331904511","MK" +"1331904512","1331908607","GB" +"1331908608","1331910655","DE" +"1331910656","1331912703","BH" +"1331912704","1331914751","DE" +"1331914752","1331916799","RU" +"1331916800","1331918847","IT" +"1331918848","1331920895","BE" +"1331920896","1331922751","NL" +"1331922752","1331922815","BE" +"1331922816","1331922943","NL" +"1331922944","1331924991","DE" +"1331924992","1331927039","GB" +"1331927040","1331929087","FI" +"1331929088","1331931135","FR" +"1331931136","1331933183","SE" +"1331933184","1331935231","TR" +"1331935232","1331937279","NL" +"1331937280","1331937311","GB" +"1331937312","1331937319","IQ" +"1331937320","1331937471","GB" +"1331937472","1331937519","NG" +"1331937520","1331937535","LB" +"1331937536","1331937567","SM" +"1331937568","1331937575","NG" +"1331937576","1331937583","GB" +"1331937584","1331937599","ZA" +"1331937600","1331937663","GB" +"1331937664","1331937727","DE" +"1331937728","1331938111","GB" +"1331938112","1331938127","AE" +"1331938128","1331938135","SA" +"1331938136","1331938143","AE" +"1331938144","1331938151","GB" +"1331938152","1331938159","PL" +"1331938160","1331938167","GB" +"1331938168","1331938175","KW" +"1331938176","1331938191","GB" +"1331938192","1331938207","AE" +"1331938208","1331938271","GB" +"1331938272","1331938303","QA" +"1331938304","1331938319","GB" +"1331938320","1331938335","AE" +"1331938336","1331938375","GB" +"1331938376","1331938383","AE" +"1331938384","1331938399","IE" +"1331938400","1331938431","AE" +"1331938432","1331938815","GB" +"1331938816","1331938823","NG" +"1331938824","1331938831","US" +"1331938832","1331938839","NG" +"1331938840","1331938847","IE" +"1331938848","1331938871","GB" +"1331938872","1331938895","NG" +"1331938896","1331938911","GB" +"1331938912","1331938927","NG" +"1331938928","1331938935","RU" +"1331938936","1331938943","NG" +"1331938944","1331938967","US" +"1331938968","1331938983","GB" +"1331938984","1331938999","NG" +"1331939000","1331939007","QA" +"1331939008","1331939023","GB" +"1331939024","1331939031","NG" +"1331939032","1331939327","GB" +"1331939328","1331941375","BE" +"1331941376","1331943423","ES" +"1331943424","1331945471","RU" +"1331945472","1331947519","SE" +"1331947520","1331948543","CH" +"1331948544","1331948547","NL" +"1331948548","1331948551","CH" +"1331948552","1331948559","FR" +"1331948560","1331948567","GB" +"1331948568","1331948575","DE" +"1331948576","1331948583","CZ" +"1331948584","1331948591","CY" +"1331948592","1331948607","BG" +"1331948608","1331948615","US" +"1331948616","1331949567","CH" +"1331949568","1331951615","RU" +"1331951616","1331953663","GE" +"1331953664","1332019199","BG" +"1332019200","1332084735","RS" +"1332084736","1332150271","SE" +"1332150272","1332215807","GR" +"1332215808","1332346879","RU" +"1332346880","1332412415","AL" +"1332412416","1332477951","GR" +"1332477952","1332609023","ES" +"1332609024","1332613119","PL" +"1332613120","1332617215","UA" +"1332617216","1332621311","CZ" +"1332621312","1332625407","UA" +"1332625408","1332629503","RU" +"1332629504","1332633599","DE" +"1332633600","1332637695","UA" +"1332637696","1332641791","BG" +"1332641792","1332645887","UA" +"1332645888","1332649983","RS" +"1332649984","1332658175","UA" +"1332658176","1332662271","PL" +"1332662272","1332670463","UA" +"1332670464","1332740095","RU" +"1332740096","1333264383","RO" +"1333264384","1333297151","RU" +"1333297152","1333362687","HU" +"1333362688","1333395455","GB" +"1333395456","1333428223","HU" +"1333428224","1333460991","RU" +"1333460992","1333493759","GB" +"1333493760","1333526527","TR" +"1333526528","1333551103","BG" +"1333551104","1333559295","PL" +"1333559296","1333592063","UA" +"1333592064","1333624831","IE" +"1333624832","1333657599","MK" +"1333657600","1333690367","RU" +"1333690368","1333723135","MK" +"1333723136","1333755903","IR" +"1333755904","1333788671","CZ" +"1333788672","1334050815","GR" +"1334050816","1334059007","BG" +"1334059008","1334067199","FR" +"1334067200","1334075391","LV" +"1334075392","1334083583","RU" +"1334083584","1334084627","DE" +"1334084628","1334084631","NL" +"1334084632","1334091775","DE" +"1334091776","1334099967","LT" +"1334099968","1334108159","IR" +"1334108160","1334113527","BE" +"1334113528","1334113535","NL" +"1334113536","1334116351","BE" +"1334116352","1334124543","AX" +"1334124544","1334132735","DE" +"1334132736","1334165503","RU" +"1334165504","1334173695","PL" +"1334173696","1334181887","LT" +"1334181888","1334190079","RU" +"1334190080","1334198271","BG" +"1334198272","1334206463","RU" +"1334206464","1334214655","FI" +"1334214656","1334222847","JO" +"1334222848","1334231039","BG" +"1334231040","1334239231","EE" +"1334239232","1334247423","IS" +"1334247424","1334255615","NO" +"1334255616","1334263807","IT" +"1334263808","1334271999","RU" +"1334272000","1334280191","GB" +"1334280192","1334288383","LV" +"1334288384","1334296575","PL" +"1334296576","1334304767","UA" +"1334304768","1334312959","RU" +"1334312960","1334316031","SE" +"1334316032","1334316287","NO" +"1334316288","1334343047","SE" +"1334343048","1334343055","NO" +"1334343056","1334345727","SE" +"1334345728","1334378495","RU" +"1334378496","1334411263","IT" +"1334411264","1334444031","RU" +"1334444032","1334478847","SE" +"1334478848","1334480895","DK" +"1334480896","1334484991","SE" +"1334484992","1334489087","DK" +"1334489088","1334501375","SE" +"1334501376","1334509567","DK" +"1334509568","1334542335","PL" +"1334542336","1334575103","RU" +"1334575104","1334579199","UA" +"1334579200","1334583295","RU" +"1334583296","1334583535","DE" +"1334583536","1334583543","US" +"1334583544","1334583807","DE" +"1334583808","1334584063","CH" +"1334584064","1334584255","DE" +"1334584256","1334584287","AT" +"1334584288","1334584759","DE" +"1334584760","1334584767","PL" +"1334584768","1334584999","DE" +"1334585000","1334585007","US" +"1334585008","1334585111","DE" +"1334585112","1334585119","AT" +"1334585120","1334585471","DE" +"1334585472","1334585503","AT" +"1334585504","1334591487","DE" +"1334591488","1334595583","RU" +"1334595584","1334596351","IT" +"1334596352","1334596607","GR" +"1334596608","1334597887","IT" +"1334597888","1334598143","GR" +"1334598144","1334598159","SK" +"1334598160","1334598167","CZ" +"1334598168","1334598271","SK" +"1334598272","1334598399","CZ" +"1334598400","1334598463","GR" +"1334598464","1334598527","IT" +"1334598528","1334598655","GR" +"1334598656","1334599039","IT" +"1334599040","1334599167","FR" +"1334599168","1334599679","IT" +"1334599680","1334603775","RU" +"1334603776","1334607871","DE" +"1334607872","1334609994","IE" +"1334609995","1334609995","GB" +"1334609996","1334610020","IE" +"1334610021","1334610021","GB" +"1334610022","1334611967","IE" +"1334611968","1334616063","ME" +"1334616064","1334620159","MD" +"1334620160","1334624255","DE" +"1334624256","1334625535","GB" +"1334625536","1334625791","AP" +"1334625792","1334628351","GB" +"1334628352","1334632447","IE" +"1334632448","1334636543","KZ" +"1334636544","1334640639","RU" +"1334640640","1334644735","FR" +"1334644736","1334644991","LU" +"1334644992","1334645222","A2" +"1334645223","1334645223","US" +"1334645224","1334645226","A2" +"1334645227","1334645227","US" +"1334645228","1334645247","A2" +"1334645248","1334647936","IQ" +"1334647937","1334648063","DE" +"1334648064","1334648319","IQ" +"1334648320","1334648575","DE" +"1334648576","1334648831","A2" +"1334648832","1334649343","GB" +"1334649344","1334649375","DK" +"1334649376","1334651647","GB" +"1334651648","1334651903","FR" +"1334651904","1334652159","DE" +"1334652160","1334652543","GB" +"1334652544","1334652559","NL" +"1334652560","1334652863","GB" +"1334652864","1334652895","FR" +"1334652896","1334652927","GB" +"1334652928","1334661119","RU" +"1334661120","1334665215","CH" +"1334665216","1334669311","NO" +"1334669312","1334673407","MK" +"1334673408","1334677503","GB" +"1334677504","1334681599","FI" +"1334681600","1334681855","PL" +"1334681856","1334682111","GB" +"1334682112","1334682367","IE" +"1334682368","1334682623","FR" +"1334682624","1334682879","NO" +"1334682880","1334683135","DK" +"1334683136","1334683391","CZ" +"1334683392","1334683647","CH" +"1334683648","1334684159","DE" +"1334684160","1334684415","SE" +"1334684416","1334684671","DE" +"1334684672","1334684927","FI" +"1334684928","1334685183","NL" +"1334685184","1334685695","DE" +"1334685696","1334689791","IT" +"1334689792","1334693887","FR" +"1334693888","1334702079","RU" +"1334702080","1334706175","CZ" +"1334706176","1334706431","BA" +"1334706432","1334706687","AT" +"1334706688","1334710271","BA" +"1334710272","1334714367","RU" +"1334714368","1334718463","DE" +"1334718464","1334722559","KZ" +"1334722560","1334725631","NL" +"1334725632","1334726143","SE" +"1334726144","1334726655","LU" +"1334726656","1334729983","RU" +"1334729984","1334730027","KZ" +"1334730028","1334730031","RU" +"1334730032","1334730043","KZ" +"1334730044","1334730047","RU" +"1334730048","1334730055","KZ" +"1334730056","1334730063","RU" +"1334730064","1334730159","KZ" +"1334730160","1334730175","RU" +"1334730176","1334730199","KZ" +"1334730200","1334730207","RU" +"1334730208","1334730215","KZ" +"1334730216","1334730223","RU" +"1334730224","1334730235","KZ" +"1334730236","1334730239","RU" +"1334730240","1334730431","KZ" +"1334730432","1334730439","RU" +"1334730440","1334730443","KZ" +"1334730444","1334730447","RU" +"1334730448","1334730463","KZ" +"1334730464","1334730479","RU" +"1334730480","1334730487","KZ" +"1334730488","1334730495","RU" +"1334730496","1334730499","KZ" +"1334730500","1334730503","RU" +"1334730504","1334730539","KZ" +"1334730540","1334730543","RU" +"1334730544","1334730579","KZ" +"1334730580","1334730583","RU" +"1334730584","1334730667","KZ" +"1334730668","1334730671","RU" +"1334730672","1334730743","KZ" +"1334730744","1334734847","RU" +"1334734848","1334738943","LT" +"1334738944","1334743039","CH" +"1334743040","1334747135","CZ" +"1334747136","1334751231","RU" +"1334751232","1334755327","BH" +"1334755328","1334759423","UA" +"1334759424","1334763519","SE" +"1334763520","1334767615","DK" +"1334767616","1334771711","SE" +"1334771712","1334779903","RU" +"1334779904","1334783999","UA" +"1334784000","1334788095","AT" +"1334788096","1334796287","RU" +"1334796288","1334800383","ME" +"1334800384","1334804479","IT" +"1334804480","1334808575","FR" +"1334808576","1334812671","GB" +"1334812672","1334816767","BA" +"1334816768","1334820863","DE" +"1334820864","1334824959","IE" +"1334824960","1334829055","NL" +"1334829056","1334833151","RU" +"1334833152","1334837247","FR" +"1334837248","1335885823","ES" +"1335885824","1336016895","NO" +"1336016896","1336147967","PL" +"1336147968","1336279039","RU" +"1336279040","1336410111","GR" +"1336410112","1336541183","PT" +"1336541184","1336543231","SA" +"1336543232","1336545279","ES" +"1336545280","1336547327","SE" +"1336547328","1336549375","RU" +"1336549376","1336551423","IM" +"1336551424","1336553471","GB" +"1336553472","1336555519","SA" +"1336555520","1336557567","BE" +"1336557568","1336558591","ES" +"1336558592","1336559328","US" +"1336559329","1336559615","ES" +"1336559616","1336561663","GB" +"1336561664","1336563711","NO" +"1336563712","1336567807","NL" +"1336567808","1336569855","BY" +"1336569856","1336571903","EU" +"1336571904","1336573951","PL" +"1336573952","1336575999","DK" +"1336576000","1336578047","RU" +"1336578048","1336580095","IR" +"1336580096","1336584191","RU" +"1336584192","1336586239","TR" +"1336586240","1336588287","GB" +"1336588288","1336590335","TJ" +"1336590336","1336592383","GB" +"1336592384","1336594431","AM" +"1336594432","1336596479","AT" +"1336596480","1336598527","FR" +"1336598528","1336600575","MD" +"1336600576","1336602623","FR" +"1336602624","1336604671","IE" +"1336604672","1336606719","CZ" +"1336606720","1336608767","PL" +"1336608768","1336610815","RU" +"1336610816","1336612863","TR" +"1336612864","1336614911","ES" +"1336614912","1336616959","GB" +"1336616960","1336619007","ES" +"1336619008","1336621055","AL" +"1336621056","1336623103","DE" +"1336623104","1336625151","BE" +"1336625152","1336625303","IE" +"1336625304","1336625311","GB" +"1336625312","1336625823","IE" +"1336625824","1336625839","GB" +"1336625840","1336626207","IE" +"1336626208","1336626319","GB" +"1336626320","1336626335","IE" +"1336626336","1336626367","GB" +"1336626368","1336626447","IE" +"1336626448","1336626463","GB" +"1336626464","1336626767","IE" +"1336626768","1336626783","GB" +"1336626784","1336626927","IE" +"1336626928","1336626943","GB" +"1336626944","1336627199","IE" +"1336627200","1336629247","NO" +"1336629248","1336631295","DE" +"1336631296","1336633343","IS" +"1336633344","1336635391","ES" +"1336635392","1336637439","RU" +"1336637440","1336639487","UA" +"1336639488","1336643583","HU" +"1336643584","1336645631","DK" +"1336645632","1336647679","GB" +"1336647680","1336649727","IT" +"1336649728","1336651775","RU" +"1336651776","1336653823","DE" +"1336653824","1336655871","CZ" +"1336655872","1336657919","NL" +"1336657920","1336659967","DE" +"1336659968","1336662015","RU" +"1336662016","1336663039","ES" +"1336663040","1336663071","FR" +"1336663072","1336664063","ES" +"1336664064","1336668159","FI" +"1336668160","1336670207","BH" +"1336670208","1336672255","SE" +"1336672256","1336705023","RU" +"1336705024","1336721407","SA" +"1336721408","1336737791","HU" +"1336737792","1336754175","PL" +"1336754176","1336770559","RU" +"1336770560","1336786943","GB" +"1336786944","1336803327","JO" +"1336803328","1336811519","UA" +"1336811520","1336827903","RU" +"1336827904","1336836095","AT" +"1336836096","1336852479","RU" +"1336852480","1336868863","FR" +"1336868864","1336885247","RU" +"1336885248","1336901631","RS" +"1336901632","1336911103","IR" +"1336911104","1336911359","SE" +"1336911360","1336911749","IR" +"1336911750","1336911759","AE" +"1336911760","1336911853","IR" +"1336911854","1336911869","CA" +"1336911870","1336918015","IR" +"1336918016","1336934399","PL" +"1336934400","1337458687","IL" +"1337458688","1337982975","PL" +"1337982976","1342177279","DE" +"1342177280","1342628031","GB" +"1342628032","1342628095","IE" +"1342628096","1342628159","GB" +"1342628160","1342628175","IE" +"1342628176","1342628207","GB" +"1342628208","1342628223","IE" +"1342628224","1342628319","GB" +"1342628320","1342628335","IE" +"1342628336","1342628351","GB" +"1342628352","1342628367","IE" +"1342628368","1342628431","GB" +"1342628432","1342628463","IE" +"1342628464","1342628663","GB" +"1342628664","1342628671","IE" +"1342628672","1342701567","GB" +"1342701568","1342981887","FR" +"1342981888","1342981935","GB" +"1342981936","1342982143","FR" +"1342982144","1342982399","MG" +"1342982400","1342988287","FR" +"1342988288","1342989055","US" +"1342989056","1343013119","FR" +"1343013120","1343013375","US" +"1343013376","1343017983","FR" +"1343017984","1343018367","RE" +"1343018368","1343025151","FR" +"1343025152","1343025663","RE" +"1343025664","1343025819","FR" +"1343025820","1343025820","LU" +"1343025821","1343217663","FR" +"1343217664","1343218687","MU" +"1343218688","1343219711","FR" +"1343219712","1343219967","KR" +"1343219968","1343220479","FR" +"1343220480","1343220671","DE" +"1343220672","1343220735","FR" +"1343220736","1343220863","GB" +"1343220864","1343221023","FR" +"1343221024","1343221027","DE" +"1343221028","1343221031","FR" +"1343221032","1343221039","GB" +"1343221040","1343221439","FR" +"1343221440","1343221447","GB" +"1343221448","1343221503","FR" +"1343221504","1343221759","GB" +"1343221760","1343221823","LB" +"1343221824","1343221855","FR" +"1343221856","1343222271","LB" +"1343222272","1343222287","CI" +"1343222288","1343222527","FR" +"1343222528","1343222575","TD" +"1343222576","1343222783","FR" +"1343222784","1343222911","TD" +"1343222912","1343223551","FR" +"1343223552","1343223807","LB" +"1343223808","1343224063","FR" +"1343224064","1343224303","US" +"1343224304","1343224319","FR" +"1343224320","1343224535","LB" +"1343224536","1343224543","FR" +"1343224544","1343224575","LB" +"1343224576","1343224831","FR" +"1343224832","1343225087","A2" +"1343225088","1343225855","FR" +"1343225856","1343475711","IT" +"1343475712","1343475967","US" +"1343475968","1343605503","IT" +"1343605504","1343605759","US" +"1343605760","1343746559","IT" +"1343746560","1343746815","US" +"1343746816","1343750143","IT" +"1343750144","1344566271","ES" +"1344566272","1344566527","US" +"1344566528","1344798719","ES" +"1344798720","1345323007","GB" +"1345323008","1345847295","PL" +"1345847296","1345978367","NL" +"1345978368","1346109439","ES" +"1346109440","1346240511","NL" +"1346240512","1346371583","DK" +"1346371584","1346375679","FI" +"1346375680","1346379775","RU" +"1346379776","1346383871","ES" +"1346383872","1346387967","GB" +"1346387968","1346392063","HU" +"1346392064","1346396159","UA" +"1346396160","1346400255","RU" +"1346400256","1346404351","IT" +"1346404352","1346408447","AT" +"1346408448","1346412543","LU" +"1346412544","1346416639","RU" +"1346416640","1346420735","DE" +"1346420736","1346424831","NO" +"1346424832","1346428927","JO" +"1346428928","1346429183","EU" +"1346429184","1346431743","FR" +"1346431744","1346431999","KZ" +"1346432000","1346433023","FR" +"1346433024","1346439167","NL" +"1346439168","1346441215","ES" +"1346441216","1346445311","RU" +"1346445312","1346449407","DE" +"1346449408","1346453503","NO" +"1346453504","1346461695","BA" +"1346461696","1346469887","NL" +"1346469888","1346473983","BE" +"1346473984","1346477823","IT" +"1346477824","1346477855","HU" +"1346477856","1346478079","IT" +"1346478080","1346482175","BA" +"1346482176","1346486271","CZ" +"1346486272","1346490367","SE" +"1346490368","1346494463","GB" +"1346494464","1346498559","FR" +"1346498560","1346500607","IM" +"1346500608","1346500639","GB" +"1346500640","1346500735","IM" +"1346500736","1346500767","GB" +"1346500768","1346500863","IM" +"1346500864","1346501231","GB" +"1346501232","1346501247","IM" +"1346501248","1346501343","GB" +"1346501344","1346501375","IM" +"1346501376","1346501695","GB" +"1346501696","1346501759","IM" +"1346501760","1346501807","GB" +"1346501808","1346501839","IM" +"1346501840","1346501847","GB" +"1346501848","1346501879","IM" +"1346501880","1346501883","GB" +"1346501884","1346501887","IM" +"1346501888","1346501891","GB" +"1346501892","1346501895","IM" +"1346501896","1346502183","GB" +"1346502184","1346502207","IM" +"1346502208","1346502223","GB" +"1346502224","1346502225","IM" +"1346502226","1346502233","GB" +"1346502234","1346502263","IM" +"1346502264","1346502319","GB" +"1346502320","1346502323","IM" +"1346502324","1346502655","GB" +"1346502656","1346510847","DE" +"1346510848","1346519039","AT" +"1346519040","1346527231","RU" +"1346527232","1346528607","DE" +"1346528608","1346528623","CH" +"1346528624","1346531327","DE" +"1346531328","1346535423","ES" +"1346535424","1346537335","BE" +"1346537336","1346537343","GB" +"1346537344","1346537983","BE" +"1346537984","1346537988","AT" +"1346537989","1346537991","BE" +"1346537992","1346537999","AT" +"1346538000","1346538007","CZ" +"1346538008","1346538015","BE" +"1346538016","1346538031","CH" +"1346538032","1346538143","BE" +"1346538144","1346538175","HR" +"1346538176","1346538239","BE" +"1346538240","1346538303","AT" +"1346538304","1346539519","BE" +"1346539520","1346543615","RU" +"1346543616","1346547711","FI" +"1346547712","1346551807","IR" +"1346551808","1346555903","DE" +"1346555904","1346559999","IT" +"1346560000","1346561535","LI" +"1346561536","1346561599","CH" +"1346561600","1346563071","LI" +"1346563072","1346563327","CH" +"1346563328","1346564095","LI" +"1346564096","1346568191","EE" +"1346568192","1346571199","SE" +"1346571200","1346571207","SK" +"1346571208","1346571775","SE" +"1346571776","1346572287","A1" +"1346572288","1346576383","DE" +"1346576384","1346580479","DK" +"1346580480","1346584575","RU" +"1346584576","1346588159","US" +"1346588160","1346588671","KR" +"1346588672","1346589439","US" +"1346589440","1346589695","DE" +"1346589696","1346592767","US" +"1346592768","1346596863","ES" +"1346596864","1346600959","IT" +"1346605056","1346609151","CH" +"1346609152","1346617343","FR" +"1346617344","1346620415","SE" +"1346620416","1346620927","DK" +"1346620928","1346621439","SE" +"1346621440","1346625535","RU" +"1346625536","1346629631","DE" +"1346629632","1346637823","RU" +"1346637824","1346650111","GB" +"1346650112","1346654207","RU" +"1346654208","1346658303","GB" +"1346658304","1346666495","SE" +"1346666496","1346670591","ES" +"1346670592","1346674687","IT" +"1346674688","1346678783","DE" +"1346678784","1346686975","IT" +"1346686976","1346691071","GB" +"1346691072","1346695167","PL" +"1346695168","1346699263","RU" +"1346699264","1346699839","GB" +"1346699840","1346699871","HK" +"1346699872","1346699875","GB" +"1346699876","1346699879","IL" +"1346699880","1346699887","US" +"1346699888","1346700575","GB" +"1346700576","1346700591","VG" +"1346700592","1346700607","GB" +"1346700608","1346700639","US" +"1346700640","1346700847","GB" +"1346700848","1346700855","US" +"1346700856","1346701183","GB" +"1346701184","1346701215","GR" +"1346701216","1346703431","GB" +"1346703432","1346703435","US" +"1346703436","1346703483","GB" +"1346703484","1346703487","US" +"1346703488","1346703503","GB" +"1346703504","1346703511","US" +"1346703512","1346703567","GB" +"1346703568","1346703571","US" +"1346703572","1346703603","GB" +"1346703604","1346703607","US" +"1346703608","1346703871","GB" +"1346703872","1346704127","LI" +"1346704128","1346704383","GB" +"1346704384","1346704447","US" +"1346704448","1346704479","GB" +"1346704480","1346704511","US" +"1346704512","1346704575","GB" +"1346704576","1346704639","US" +"1346704640","1346704767","LI" +"1346704768","1346704895","US" +"1346704896","1346705247","GB" +"1346705248","1346705279","US" +"1346705280","1346705407","GB" +"1346705408","1346705535","US" +"1346705536","1346707455","GB" +"1346707456","1346711551","DE" +"1346711552","1346715647","AZ" +"1346715648","1346723839","NL" +"1346723840","1346732031","DE" +"1346732032","1346736127","GB" +"1346736128","1346740223","RU" +"1346740224","1346744319","FI" +"1346744320","1346748415","RU" +"1346748416","1346752511","DE" +"1346752512","1346756607","FR" +"1346756608","1346760703","SE" +"1346760704","1346764799","IR" +"1346764800","1346768895","DK" +"1346768896","1346772991","LV" +"1346772992","1346777087","FR" +"1346777088","1346781183","GB" +"1346781184","1346789375","UA" +"1346789376","1346793471","RU" +"1346793472","1346797567","IT" +"1346797568","1346801663","IL" +"1346801664","1346805759","SE" +"1346805760","1346806031","DE" +"1346806032","1346806047","CH" +"1346806048","1346818047","DE" +"1346818048","1346822143","FR" +"1346822144","1346826239","RU" +"1346826240","1346830335","RS" +"1346830336","1346838527","GB" +"1346838528","1346842623","RU" +"1346842624","1346846719","MT" +"1346846720","1346854911","DK" +"1346854912","1346859007","MT" +"1346859008","1346863103","IR" +"1346863104","1346867199","DK" +"1346867200","1346871295","BA" +"1346871296","1346879487","RU" +"1346879488","1346883583","FI" +"1346883584","1346887679","RU" +"1346887680","1346891775","IT" +"1346891776","1346895871","RU" +"1346895872","1346899967","SE" +"1346899968","1346904063","RU" +"1346904064","1346908159","PL" +"1346908160","1346912255","LI" +"1346912256","1346920447","BG" +"1346920448","1346924543","A2" +"1346924544","1346928639","RU" +"1346928640","1346932735","DE" +"1346932736","1346936831","DK" +"1346936832","1346940927","IT" +"1346940928","1346945023","KG" +"1346945024","1346949119","PL" +"1346949120","1346957311","RU" +"1346957312","1346961407","DE" +"1346961408","1346965503","UA" +"1346965504","1346969599","RU" +"1346969600","1346973695","DE" +"1346973696","1346977791","SE" +"1346977792","1346985983","RU" +"1346985984","1346986975","DE" +"1346986976","1346987007","ES" +"1346987008","1346991231","DE" +"1346991232","1346991247","CH" +"1346991248","1346994175","DE" +"1346994176","1346998271","NL" +"1346998272","1347002367","ES" +"1347002368","1347006463","RU" +"1347006464","1347010559","SE" +"1347010560","1347014655","RU" +"1347014656","1347018751","GG" +"1347018752","1347022847","IT" +"1347022848","1347026943","AT" +"1347026944","1347035135","GB" +"1347035136","1347039231","CZ" +"1347039232","1347043327","RO" +"1347043328","1347047423","FR" +"1347047424","1347051519","SA" +"1347051520","1347059711","IL" +"1347059712","1347067903","CH" +"1347067904","1347071999","RS" +"1347072000","1347076095","IT" +"1347076096","1347084287","FI" +"1347084288","1347092479","GB" +"1347092480","1347096575","IR" +"1347096576","1347100671","SE" +"1347100672","1347108863","AT" +"1347108864","1347111423","GB" +"1347111424","1347111455","US" +"1347111456","1347112959","GB" +"1347112960","1347117055","RU" +"1347117056","1347121151","FI" +"1347121152","1347125247","CH" +"1347125248","1347129343","RU" +"1347129344","1347133439","FR" +"1347133440","1347141631","EG" +"1347141632","1347145727","CH" +"1347145728","1347146239","GB" +"1347146240","1347146495","CA" +"1347146496","1347146751","FR" +"1347146752","1347147007","CA" +"1347147008","1347147263","DE" +"1347147264","1347147775","GB" +"1347147776","1347148287","DE" +"1347148288","1347148543","GB" +"1347148544","1347148799","CA" +"1347148800","1347149055","NO" +"1347149056","1347149311","GB" +"1347149312","1347149567","DE" +"1347149568","1347149823","CA" +"1347149824","1347151423","HU" +"1347151424","1347151615","AT" +"1347151616","1347153407","HU" +"1347153408","1347158015","AT" +"1347158016","1347162111","CH" +"1347162112","1347166207","IT" +"1347166208","1347174399","GR" +"1347174400","1347182591","IT" +"1347182592","1347186687","RU" +"1347186688","1347190783","GB" +"1347190784","1347194879","RU" +"1347194880","1347198975","SE" +"1347198976","1347203071","QA" +"1347203072","1347207167","RU" +"1347207168","1347210735","GB" +"1347210736","1347210743","IE" +"1347210744","1347210911","GB" +"1347210912","1347210919","IE" +"1347210920","1347210927","GB" +"1347210928","1347210935","IE" +"1347210936","1347211111","GB" +"1347211112","1347211119","IE" +"1347211120","1347215359","GB" +"1347215360","1347219967","RU" +"1347219968","1347220479","US" +"1347220480","1347222015","RU" +"1347222016","1347222271","US" +"1347222272","1347222527","RU" +"1347222528","1347222783","US" +"1347222784","1347223551","RU" +"1347223552","1347223807","EG" +"1347223808","1347224063","HK" +"1347224064","1347224183","US" +"1347224184","1347224575","EG" +"1347224576","1347224831","US" +"1347224832","1347225599","EG" +"1347225600","1347226623","PK" +"1347226624","1347227135","EG" +"1347227136","1347227391","HK" +"1347227392","1347227647","EG" +"1347227648","1347228055","DE" +"1347228056","1347228063","GR" +"1347228064","1347229311","DE" +"1347229312","1347229343","AT" +"1347229344","1347229895","DE" +"1347229896","1347229903","GR" +"1347229904","1347230975","DE" +"1347230976","1347230983","ES" +"1347230984","1347231071","DE" +"1347231072","1347231087","AT" +"1347231088","1347231095","GR" +"1347231096","1347231743","DE" +"1347231744","1347235839","UA" +"1347235840","1347239935","GE" +"1347239936","1347240943","DK" +"1347240944","1347240959","GB" +"1347240960","1347244031","DK" +"1347244032","1347245311","GB" +"1347245312","1347245567","US" +"1347245568","1347245823","GB" +"1347245824","1347246015","US" +"1347246016","1347247359","GB" +"1347247360","1347247839","RU" +"1347247840","1347248127","US" +"1347248128","1347248863","SE" +"1347248864","1347248864","FI" +"1347248865","1347249343","SE" +"1347249344","1347249375","FI" +"1347249376","1347249631","SE" +"1347249632","1347249639","RU" +"1347249640","1347250687","SE" +"1347250688","1347250691","NO" +"1347250692","1347250695","SE" +"1347250696","1347250735","NO" +"1347250736","1347250767","SE" +"1347250768","1347250783","FI" +"1347250784","1347252223","SE" +"1347252224","1347255903","HU" +"1347255904","1347255919","SC" +"1347255920","1347256271","HU" +"1347256272","1347256287","SC" +"1347256288","1347256319","HU" +"1347256320","1347260415","FO" +"1347260416","1347264511","MK" +"1347264512","1347268607","RU" +"1347268608","1347272703","LB" +"1347272704","1347276799","MT" +"1347276800","1347278831","DE" +"1347278832","1347278847","BR" +"1347278848","1347280031","DE" +"1347280032","1347280063","ET" +"1347280064","1347280495","DE" +"1347280496","1347280511","ET" +"1347280512","1347280543","DE" +"1347280544","1347280575","MY" +"1347280576","1347280895","DE" +"1347280896","1347284991","FR" +"1347284992","1347286271","GB" +"1347286272","1347286335","BN" +"1347286336","1347286527","GB" +"1347286528","1347286535","BG" +"1347286536","1347289087","GB" +"1347289088","1347293183","FR" +"1347293184","1347293311","SE" +"1347293312","1347293312","LR" +"1347293313","1347293316","DJ" +"1347293317","1347293319","LR" +"1347293320","1347293328","GA" +"1347293329","1347293335","NG" +"1347293336","1347293351","A2" +"1347293352","1347293375","NG" +"1347293376","1347293391","A2" +"1347293392","1347293392","CY" +"1347293393","1347293400","NG" +"1347293401","1347293407","US" +"1347293408","1347293408","A2" +"1347293409","1347293416","NG" +"1347293417","1347293424","TZ" +"1347293425","1347293440","GN" +"1347293441","1347293447","US" +"1347293448","1347293456","GA" +"1347293457","1347293464","NG" +"1347293465","1347293471","A2" +"1347293472","1347293479","IQ" +"1347293480","1347293487","LR" +"1347293488","1347293495","TD" +"1347293496","1347293496","GH" +"1347293497","1347293512","NG" +"1347293513","1347293520","GN" +"1347293521","1347293528","PS" +"1347293529","1347293536","NG" +"1347293537","1347293544","GH" +"1347293545","1347293552","NG" +"1347293553","1347293559","A2" +"1347293560","1347293568","GN" +"1347293569","1347293576","NG" +"1347293577","1347293584","GN" +"1347293585","1347293591","NG" +"1347293592","1347293600","US" +"1347293601","1347293616","NG" +"1347293617","1347293623","US" +"1347293624","1347293624","PK" +"1347293625","1347293632","GH" +"1347293633","1347293640","LR" +"1347293641","1347293656","NG" +"1347293657","1347293672","GN" +"1347293673","1347293675","A2" +"1347293676","1347293679","BR" +"1347293680","1347293680","GN" +"1347293681","1347293688","US" +"1347293689","1347293719","NG" +"1347293720","1347293723","A2" +"1347293724","1347293724","US" +"1347293725","1347293727","A2" +"1347293728","1347293728","GN" +"1347293729","1347293744","US" +"1347293745","1347293752","GN" +"1347293753","1347293760","NG" +"1347293761","1347293776","ZM" +"1347293777","1347293800","NG" +"1347293801","1347293807","US" +"1347293808","1347293816","NG" +"1347293817","1347293824","GN" +"1347293825","1347293831","CM" +"1347293832","1347293840","NG" +"1347293841","1347293848","CG" +"1347293849","1347293856","NG" +"1347293857","1347293864","GN" +"1347293865","1347293872","ZM" +"1347293873","1347293880","GN" +"1347293881","1347293887","NG" +"1347293888","1347293904","GQ" +"1347293905","1347293912","GN" +"1347293913","1347293920","US" +"1347293921","1347293928","CM" +"1347293929","1347293936","TZ" +"1347293937","1347293944","NG" +"1347293945","1347293952","US" +"1347293953","1347293976","NG" +"1347293977","1347293984","CM" +"1347293985","1347293991","US" +"1347293992","1347294000","NG" +"1347294001","1347294008","TZ" +"1347294009","1347294015","A2" +"1347294016","1347294023","US" +"1347294024","1347294040","GN" +"1347294041","1347294048","NG" +"1347294049","1347294056","GN" +"1347294057","1347294072","US" +"1347294073","1347294080","NG" +"1347294081","1347294087","GA" +"1347294088","1347294095","US" +"1347294096","1347294096","CM" +"1347294097","1347294112","NG" +"1347294113","1347294119","GN" +"1347294120","1347294136","NG" +"1347294137","1347294143","LR" +"1347294144","1347294152","NG" +"1347294153","1347294160","NE" +"1347294161","1347294168","GN" +"1347294169","1347294176","NG" +"1347294177","1347294184","US" +"1347294185","1347294191","A2" +"1347294192","1347294192","KE" +"1347294193","1347294208","NG" +"1347294209","1347294212","SE" +"1347294213","1347294215","A2" +"1347294216","1347294223","IQ" +"1347294224","1347294224","A2" +"1347294225","1347294232","CM" +"1347294233","1347294240","US" +"1347294241","1347294248","LR" +"1347294249","1347294256","NG" +"1347294257","1347294264","LR" +"1347294265","1347294268","LS" +"1347294269","1347294271","LR" +"1347294272","1347294279","BR" +"1347294280","1347294280","A2" +"1347294281","1347294288","CM" +"1347294289","1347294303","UG" +"1347294304","1347294304","US" +"1347294305","1347294312","NG" +"1347294313","1347294319","KZ" +"1347294320","1347294328","NG" +"1347294329","1347294336","GA" +"1347294337","1347294343","NG" +"1347294344","1347294351","CM" +"1347294352","1347294352","LR" +"1347294353","1347294368","US" +"1347294369","1347294372","LS" +"1347294373","1347294375","IQ" +"1347294376","1347294400","NG" +"1347294401","1347294401","CM" +"1347294402","1347294402","NG" +"1347294403","1347294408","CM" +"1347294409","1347294415","GN" +"1347294416","1347294418","A2" +"1347294419","1347294424","NG" +"1347294425","1347294425","US" +"1347294426","1347294426","NG" +"1347294427","1347294432","US" +"1347294433","1347294435","A2" +"1347294436","1347294440","SE" +"1347294441","1347294447","SO" +"1347294448","1347294975","US" +"1347294976","1347294992","CG" +"1347294993","1347295008","US" +"1347295009","1347295015","LR" +"1347295016","1347295032","A2" +"1347295033","1347295056","NG" +"1347295057","1347295064","A2" +"1347295065","1347295072","LS" +"1347295073","1347295079","AF" +"1347295080","1347295103","NG" +"1347295104","1347295104","A2" +"1347295105","1347295112","LY" +"1347295113","1347295120","ZA" +"1347295121","1347295128","NG" +"1347295129","1347295132","GN" +"1347295133","1347295135","A2" +"1347295136","1347295144","FR" +"1347295145","1347295152","NG" +"1347295153","1347295159","US" +"1347295160","1347295160","NG" +"1347295161","1347295168","GN" +"1347295169","1347295184","LS" +"1347295185","1347295192","SO" +"1347295193","1347295199","A2" +"1347295200","1347295216","ZM" +"1347295217","1347295223","US" +"1347295224","1347295224","AO" +"1347295225","1347295232","NG" +"1347295233","1347295744","A2" +"1347295745","1347295745","US" +"1347295746","1347295748","A2" +"1347295749","1347295752","US" +"1347295753","1347295755","BW" +"1347295756","1347295759","A2" +"1347295760","1347295775","BW" +"1347295776","1347295776","IQ" +"1347295777","1347295784","HU" +"1347295785","1347295791","LB" +"1347295792","1347295816","A2" +"1347295817","1347295824","OM" +"1347295825","1347295832","GH" +"1347295833","1347295840","FR" +"1347295841","1347295848","NG" +"1347295849","1347295852","LS" +"1347295853","1347295856","A2" +"1347295857","1347295864","NG" +"1347295865","1347295928","A2" +"1347295929","1347295936","NG" +"1347295937","1347295976","US" +"1347295977","1347295984","LS" +"1347295985","1347295992","US" +"1347295993","1347295999","A2" +"1347296000","1347296080","US" +"1347296081","1347296088","SE" +"1347296089","1347296112","US" +"1347296113","1347296128","ZM" +"1347296129","1347296232","US" +"1347296233","1347296240","JO" +"1347296241","1347296255","US" +"1347296256","1347296264","A2" +"1347296265","1347296272","US" +"1347296273","1347297279","A2" +"1347297280","1347305471","UA" +"1347305472","1347309567","AL" +"1347309568","1347309839","DE" +"1347309840","1347309855","CH" +"1347309856","1347313663","DE" +"1347313664","1347321855","RU" +"1347321856","1347322111","KW" +"1347322112","1347322367","US" +"1347322368","1347322623","KW" +"1347322624","1347322879","US" +"1347322880","1347324927","KW" +"1347324928","1347325439","US" +"1347325440","1347325695","KW" +"1347325696","1347325951","IQ" +"1347325952","1347327231","CZ" +"1347327232","1347327487","SK" +"1347327488","1347327743","CZ" +"1347327744","1347327999","SK" +"1347328000","1347330047","CZ" +"1347330048","1347338239","DE" +"1347338240","1347342335","RU" +"1347342336","1347346431","SE" +"1347346432","1347350527","BG" +"1347350528","1347354623","RU" +"1347354624","1347358719","GR" +"1347358720","1347362815","CZ" +"1347362816","1347366911","NL" +"1347366912","1347371007","IT" +"1347371008","1347375103","RU" +"1347375104","1347375359","EU" +"1347375360","1347375615","GB" +"1347375616","1347375871","EU" +"1347375872","1347379199","GB" +"1347379200","1347383295","NL" +"1347383296","1347384111","EE" +"1347384112","1347384115","FI" +"1347384116","1347386751","EE" +"1347386752","1347386815","MY" +"1347386816","1347387011","EE" +"1347387012","1347387015","DE" +"1347387016","1347387215","EE" +"1347387216","1347387219","NZ" +"1347387220","1347387224","EE" +"1347387225","1347387228","DE" +"1347387229","1347387391","EE" +"1347387392","1347391487","GB" +"1347391488","1347395583","LB" +"1347395584","1347399679","SE" +"1347399680","1347403775","RU" +"1347403776","1347407871","NL" +"1347407872","1347411967","GB" +"1347411968","1347416063","DE" +"1347416064","1347420159","RU" +"1347420160","1347420671","DK" +"1347420672","1347420679","SE" +"1347420680","1347420791","DK" +"1347420792","1347420799","US" +"1347420800","1347420831","DK" +"1347420832","1347420847","US" +"1347420848","1347420887","DK" +"1347420888","1347420895","PT" +"1347420896","1347420991","DK" +"1347420992","1347421007","CH" +"1347421008","1347423775","DK" +"1347423776","1347423807","NO" +"1347423808","1347424339","DK" +"1347424340","1347424351","NO" +"1347424352","1347425791","DK" +"1347425792","1347426047","EU" +"1347426048","1347427135","DK" +"1347427136","1347427327","NO" +"1347427328","1347428351","DK" +"1347428352","1347432447","BA" +"1347432448","1347436543","HR" +"1347436544","1347440639","SE" +"1347440640","1347444735","ES" +"1347444736","1347452927","RU" +"1347452928","1347455930","BG" +"1347455931","1347455931","A1" +"1347455932","1347461119","BG" +"1347461120","1347461375","US" +"1347461376","1347462579","AL" +"1347462580","1347462583","RS" +"1347462584","1347462591","AL" +"1347462592","1347462607","RS" +"1347462608","1347464618","AL" +"1347464619","1347464619","US" +"1347464620","1347464703","AL" +"1347464704","1347464959","US" +"1347464960","1347465215","AL" +"1347465216","1347469311","GB" +"1347469312","1347473407","RU" +"1347473408","1347477503","UZ" +"1347477504","1347481599","CH" +"1347481600","1347485695","AT" +"1347485696","1347493887","DE" +"1347493888","1347502079","LV" +"1347502080","1347503103","ES" +"1347503104","1347503359","GB" +"1347503360","1347504383","ES" +"1347504384","1347504639","GB" +"1347504640","1347504959","ES" +"1347504960","1347505023","GB" +"1347505024","1347505151","ES" +"1347505152","1347505407","GB" +"1347505408","1347505663","DE" +"1347505664","1347506175","ES" +"1347506176","1347506431","GB" +"1347506432","1347518463","ES" +"1347518464","1347522559","AT" +"1347522560","1347526655","LB" +"1347526656","1347527967","FI" +"1347527968","1347527999","SE" +"1347528000","1347534847","FI" +"1347534848","1347538943","DE" +"1347538944","1347543039","RU" +"1347543040","1347544063","SK" +"1347544064","1347544319","SL" +"1347544320","1347547135","SK" +"1347547136","1347550303","DE" +"1347550304","1347550335","AT" +"1347550336","1347551167","DE" +"1347551168","1347551231","PL" +"1347551232","1347555327","IT" +"1347555328","1347559423","PL" +"1347559424","1347567615","RU" +"1347567616","1347571711","NL" +"1347571712","1347575807","RU" +"1347575808","1347579903","DK" +"1347579904","1347588095","GB" +"1347588096","1347590911","CZ" +"1347590912","1347591167","SK" +"1347591168","1347592191","CZ" +"1347592192","1347600383","RU" +"1347600384","1347602431","UA" +"1347602432","1347608575","DE" +"1347608576","1347612671","FR" +"1347612672","1347616767","GB" +"1347616768","1347620863","FI" +"1347620864","1347624959","LB" +"1347624960","1347633151","CH" +"1347633152","1347637247","CZ" +"1347637248","1347641343","SE" +"1347641344","1347646194","DE" +"1347646195","1347646207","TR" +"1347646208","1347649535","DE" +"1347649536","1347653631","GE" +"1347653632","1347654615","GB" +"1347654616","1347654623","EG" +"1347654624","1347655175","GB" +"1347655176","1347655183","EG" +"1347655184","1347657727","GB" +"1347657728","1347661823","IT" +"1347661824","1347665919","DE" +"1347665920","1347670015","RU" +"1347670016","1347674111","SE" +"1347674112","1347682303","RU" +"1347682304","1347686399","DE" +"1347686400","1347688743","EU" +"1347688744","1347688751","ET" +"1347688752","1347688767","SN" +"1347688768","1347688959","EU" +"1347688960","1347689343","BE" +"1347689344","1347690495","EU" +"1347690496","1347694591","SE" +"1347694592","1347706879","GB" +"1347706880","1347710975","IT" +"1347710976","1347715071","RU" +"1347715072","1347723263","ES" +"1347723264","1347727359","GB" +"1347727360","1347731455","UA" +"1347731456","1347739647","DE" +"1347739648","1347747839","NL" +"1347747840","1347751935","DE" +"1347751936","1347754751","CY" +"1347754752","1347754775","GR" +"1347754776","1347754791","CY" +"1347754792","1347754887","GR" +"1347754888","1347754888","CY" +"1347754889","1347754894","GR" +"1347754895","1347754895","CY" +"1347754896","1347754919","GR" +"1347754920","1347754927","CY" +"1347754928","1347754935","GR" +"1347754936","1347754943","RS" +"1347754944","1347754951","CY" +"1347754952","1347754959","TN" +"1347754960","1347754967","CY" +"1347754968","1347754983","GR" +"1347754984","1347754991","CY" +"1347754992","1347755112","GR" +"1347755113","1347755119","CY" +"1347755120","1347755191","GR" +"1347755192","1347755223","CY" +"1347755224","1347755231","GR" +"1347755232","1347755239","CY" +"1347755240","1347755247","GR" +"1347755248","1347755263","CY" +"1347755264","1347755775","GR" +"1347755776","1347756031","CY" +"1347756032","1347760127","NL" +"1347760128","1347764223","HU" +"1347764224","1347772415","GB" +"1347772416","1347776511","MT" +"1347776512","1347780607","SE" +"1347780608","1347784703","NL" +"1347784704","1347788799","RU" +"1347788800","1347792895","NL" +"1347792896","1347796991","RU" +"1347796992","1347801087","DE" +"1347801088","1347805183","GB" +"1347805184","1347809279","PL" +"1347809280","1347813375","RU" +"1347813376","1347817471","DE" +"1347817472","1347821567","A2" +"1347821568","1347822343","GB" +"1347822344","1347822351","NL" +"1347822352","1347825663","GB" +"1347825664","1347829759","IT" +"1347829760","1347833855","SE" +"1347833856","1347835790","DE" +"1347835791","1347835791","GB" +"1347835792","1347835794","DE" +"1347835795","1347835795","IN" +"1347835796","1347835796","GB" +"1347835797","1347835811","DE" +"1347835812","1347835812","RU" +"1347835813","1347835813","ZA" +"1347835814","1347835814","PL" +"1347835815","1347835817","DE" +"1347835818","1347835818","AR" +"1347835819","1347835819","DE" +"1347835820","1347835820","US" +"1347835821","1347835821","ES" +"1347835822","1347835827","DE" +"1347835828","1347835828","PL" +"1347835829","1347835834","DE" +"1347835835","1347835835","IN" +"1347835836","1347835841","DE" +"1347835842","1347835842","AR" +"1347835843","1347835843","DE" +"1347835844","1347835844","US" +"1347835845","1347835845","DE" +"1347835846","1347835846","JM" +"1347835847","1347835848","DE" +"1347835849","1347835849","AQ" +"1347835850","1347835850","DE" +"1347835851","1347835851","AQ" +"1347835852","1347835859","DE" +"1347835860","1347835860","PL" +"1347835861","1347835865","DE" +"1347835866","1347835866","PH" +"1347835867","1347835867","DE" +"1347835868","1347835868","PH" +"1347835869","1347835869","NL" +"1347835870","1347835870","GR" +"1347835871","1347835873","DE" +"1347835874","1347835874","AR" +"1347835875","1347835875","BR" +"1347835876","1347835879","DE" +"1347835880","1347835880","IT" +"1347835881","1347835881","TR" +"1347835882","1347835883","TH" +"1347835884","1347835886","TW" +"1347835887","1347835889","DE" +"1347835890","1347835892","ID" +"1347835893","1347835893","BD" +"1347835894","1347835894","DE" +"1347835895","1347835895","ES" +"1347835896","1347835897","DE" +"1347835898","1347835898","VN" +"1347835899","1347835975","DE" +"1347835976","1347835976","BR" +"1347835977","1347835977","GR" +"1347835978","1347835981","BR" +"1347835982","1347835982","DE" +"1347835983","1347835984","RU" +"1347835985","1347835985","PL" +"1347835986","1347835988","DK" +"1347835989","1347835999","DE" +"1347836000","1347836000","BR" +"1347836001","1347836004","DE" +"1347836005","1347836005","BR" +"1347836006","1347836008","CA" +"1347836009","1347836010","DE" +"1347836011","1347836012","BR" +"1347836013","1347836014","DE" +"1347836015","1347836015","MX" +"1347836016","1347836017","DE" +"1347836018","1347836020","CA" +"1347836021","1347836022","DE" +"1347836023","1347836024","MD" +"1347836025","1347836026","DE" +"1347836027","1347836027","MD" +"1347836028","1347836029","DE" +"1347836030","1347836030","BR" +"1347836031","1347836033","DE" +"1347836034","1347836035","BR" +"1347836036","1347836036","DE" +"1347836037","1347836038","UG" +"1347836039","1347836039","DE" +"1347836040","1347836041","UA" +"1347836042","1347836044","DE" +"1347836045","1347836047","TR" +"1347836048","1347836049","DE" +"1347836050","1347836052","US" +"1347836053","1347836053","KR" +"1347836054","1347836056","DE" +"1347836057","1347836057","BR" +"1347836058","1347836058","DE" +"1347836059","1347836061","US" +"1347836062","1347837511","DE" +"1347837512","1347837512","IL" +"1347837513","1347837515","DE" +"1347837516","1347837517","RU" +"1347837518","1347837523","DE" +"1347837524","1347837525","BR" +"1347837526","1347837538","DE" +"1347837539","1347837541","TR" +"1347837542","1347837578","DE" +"1347837579","1347837579","BR" +"1347837580","1347837580","DE" +"1347837581","1347837581","BR" +"1347837582","1347837582","TR" +"1347837583","1347837583","US" +"1347837584","1347837590","DE" +"1347837591","1347837591","TR" +"1347837592","1347837593","DE" +"1347837594","1347837595","RU" +"1347837596","1347837598","FI" +"1347837599","1347837600","DO" +"1347837601","1347837604","DE" +"1347837605","1347837605","IN" +"1347837606","1347837608","TR" +"1347837609","1347837610","DE" +"1347837611","1347837611","BY" +"1347837612","1347837616","DE" +"1347837617","1347837619","IN" +"1347837620","1347837622","TW" +"1347837623","1347837626","DE" +"1347837627","1347837629","RU" +"1347837630","1347837951","DE" +"1347837952","1347846143","RO" +"1347846144","1347850239","NO" +"1347850240","1347854335","IT" +"1347854336","1347854591","DE" +"1347854592","1347854599","EU" +"1347854600","1347854607","DE" +"1347854608","1347854623","EU" +"1347854624","1347854639","DE" +"1347854640","1347854655","EU" +"1347854656","1347854791","DE" +"1347854792","1347854847","EU" +"1347854848","1347854871","DE" +"1347854872","1347854879","EU" +"1347854880","1347854887","DE" +"1347854888","1347854911","EU" +"1347854912","1347855023","DE" +"1347855024","1347855039","EU" +"1347855040","1347855071","DE" +"1347855072","1347855087","EU" +"1347855088","1347855103","DE" +"1347855104","1347855359","CH" +"1347855360","1347855935","DE" +"1347855936","1347855943","EU" +"1347855944","1347855951","DE" +"1347855952","1347855959","EU" +"1347855960","1347855967","DE" +"1347855968","1347855999","EU" +"1347856000","1347856063","DE" +"1347856064","1347856079","EU" +"1347856080","1347856087","DE" +"1347856088","1347856095","EU" +"1347856096","1347856127","DE" +"1347856128","1347856191","EU" +"1347856192","1347856239","DE" +"1347856240","1347856255","EU" +"1347856256","1347856383","DE" +"1347856384","1347856399","EU" +"1347856400","1347856423","DE" +"1347856424","1347856447","EU" +"1347856448","1347856591","DE" +"1347856592","1347856607","EU" +"1347856608","1347856639","DE" +"1347856640","1347856895","AT" +"1347856896","1347858495","DE" +"1347858496","1347858503","EU" +"1347858504","1347858527","DE" +"1347858528","1347858559","EU" +"1347858560","1347858575","DE" +"1347858576","1347858623","EU" +"1347858624","1347858631","DE" +"1347858632","1347858639","EU" +"1347858640","1347858751","DE" +"1347858752","1347858815","EU" +"1347858816","1347859335","DE" +"1347859336","1347859343","EU" +"1347859344","1347859351","DE" +"1347859352","1347859359","EU" +"1347859360","1347859383","DE" +"1347859384","1347859391","EU" +"1347859392","1347859423","DE" +"1347859424","1347859455","EU" +"1347859456","1347860863","DE" +"1347860864","1347860879","EU" +"1347860880","1347860895","DE" +"1347860896","1347860911","EU" +"1347860912","1347860927","DE" +"1347860928","1347860943","EU" +"1347860944","1347861383","DE" +"1347861384","1347861391","EU" +"1347861392","1347861395","DE" +"1347861396","1347861399","EU" +"1347861400","1347861471","DE" +"1347861472","1347861503","EU" +"1347861504","1347861759","DE" +"1347861760","1347861799","EU" +"1347861800","1347861823","DE" +"1347861824","1347861943","EU" +"1347861944","1347861951","DE" +"1347861952","1347862007","EU" +"1347862008","1347862015","CH" +"1347862016","1347862111","EU" +"1347862112","1347862143","DE" +"1347862144","1347862279","EU" +"1347862280","1347862287","DE" +"1347862288","1347862303","EU" +"1347862304","1347862431","DE" +"1347862432","1347862463","EU" +"1347862464","1347862471","DE" +"1347862472","1347862479","EU" +"1347862480","1347862527","DE" +"1347862528","1347866623","CH" +"1347866624","1347870719","NO" +"1347870720","1347874815","AM" +"1347874816","1347874938","RU" +"1347874939","1347875450","SE" +"1347875451","1347878399","RU" +"1347878400","1347878911","SK" +"1347878912","1347887103","GB" +"1347887104","1347891199","PL" +"1347891200","1347895287","SE" +"1347895288","1347895295","GB" +"1347895296","1347903487","GH" +"1347903488","1347907583","RU" +"1347907584","1347911679","DE" +"1347911680","1347915775","GB" +"1347915776","1347919871","RU" +"1347919872","1347922303","DE" +"1347922304","1347922319","NL" +"1347922320","1347923967","DE" +"1347923968","1347928063","CZ" +"1347928064","1347932159","RU" +"1347932160","1347932639","SK" +"1347932640","1347932655","PL" +"1347932656","1347932663","SK" +"1347932664","1347932667","PL" +"1347932668","1347936255","SK" +"1347936256","1347940351","FR" +"1347940352","1347944447","BA" +"1347947520","1347948543","DZ" +"1347948544","1347952639","DE" +"1347952640","1347956735","BE" +"1347956736","1347960831","RU" +"1347960832","1347964927","DE" +"1347964928","1347969023","IT" +"1347969024","1347977215","SE" +"1347977216","1347978007","A2" +"1347978008","1347978015","NG" +"1347978016","1347978031","A2" +"1347978032","1347978039","NG" +"1347978040","1347978191","A2" +"1347978192","1347978199","NG" +"1347978200","1347978263","A2" +"1347978264","1347978271","NG" +"1347978272","1347978319","A2" +"1347978320","1347978327","NG" +"1347978328","1347978351","A2" +"1347978352","1347978359","NG" +"1347978360","1347978375","A2" +"1347978376","1347978407","NG" +"1347978408","1347978447","A2" +"1347978448","1347978463","NG" +"1347978464","1347978631","A2" +"1347978632","1347978647","NG" +"1347978648","1347978727","A2" +"1347978728","1347978735","NG" +"1347978736","1347978847","A2" +"1347978848","1347978855","NG" +"1347978856","1347978935","A2" +"1347978936","1347978943","NG" +"1347978944","1347979055","A2" +"1347979056","1347979071","NG" +"1347979072","1347979135","A2" +"1347979136","1347979143","NG" +"1347979144","1347979159","A2" +"1347979160","1347979167","NG" +"1347979168","1347979231","A2" +"1347979232","1347979247","NG" +"1347979248","1347979375","A2" +"1347979376","1347979399","NG" +"1347979400","1347979583","A2" +"1347979584","1347979591","NG" +"1347979592","1347979743","A2" +"1347979744","1347979751","NG" +"1347979752","1347980111","A2" +"1347980112","1347980127","GN" +"1347980128","1347980271","A2" +"1347980272","1347980279","DK" +"1347980280","1347981007","A2" +"1347981008","1347981015","NG" +"1347981016","1347981023","A2" +"1347981024","1347981031","NG" +"1347981032","1347981255","A2" +"1347981256","1347981263","DK" +"1347981264","1347981927","A2" +"1347981928","1347981935","NG" +"1347981936","1347982031","A2" +"1347982032","1347982055","NG" +"1347982056","1347982279","A2" +"1347982280","1347982287","NG" +"1347982288","1347982927","A2" +"1347982928","1347982943","NG" +"1347982944","1347983063","A2" +"1347983064","1347983071","NG" +"1347983072","1347983247","A2" +"1347983248","1347983263","DK" +"1347983264","1347983303","A2" +"1347983304","1347983311","NG" +"1347983312","1347983399","A2" +"1347983400","1347983407","A1" +"1347983408","1347983903","A2" +"1347983904","1347983911","NG" +"1347983912","1347983919","A2" +"1347983920","1347983927","NG" +"1347983928","1347983983","A2" +"1347983984","1347984127","NG" +"1347984128","1347984207","A2" +"1347984208","1347984215","NG" +"1347984216","1347984415","A2" +"1347984416","1347984423","NG" +"1347984424","1347984719","A2" +"1347984720","1347984727","NG" +"1347984728","1347984879","A2" +"1347984880","1347984895","NG" +"1347984896","1347984959","A2" +"1347984960","1347984991","NG" +"1347984992","1347985031","A2" +"1347985032","1347985039","NG" +"1347985040","1347985103","A2" +"1347985104","1347985119","NG" +"1347985120","1347985151","A2" +"1347985152","1347985407","DK" +"1347985408","1347989503","IT" +"1347989504","1347993599","FI" +"1347993600","1348001791","GB" +"1348001792","1348005887","ES" +"1348005888","1348009983","BH" +"1348009984","1348014079","RU" +"1348014080","1348018175","DK" +"1348018176","1348026367","NO" +"1348026368","1348030463","DE" +"1348030464","1348034559","GB" +"1348034560","1348038655","AT" +"1348038656","1348042751","FR" +"1348042752","1348050943","RU" +"1348050944","1348055039","SE" +"1348055040","1348058111","NG" +"1348058112","1348059135","LB" +"1348059136","1348063231","RU" +"1348063232","1348067327","CH" +"1348067328","1348071423","NL" +"1348071424","1348075519","DE" +"1348075520","1348075967","LV" +"1348075968","1348076031","PA" +"1348076032","1348076287","LV" +"1348076288","1348076543","RU" +"1348076544","1348083711","LV" +"1348083712","1348091903","LU" +"1348091904","1348095999","RU" +"1348096000","1348100095","AL" +"1348100096","1348104191","DE" +"1348104192","1348108287","RU" +"1348108288","1348112383","CZ" +"1348112384","1348116479","DE" +"1348116480","1348120575","JO" +"1348120576","1348124671","RU" +"1348124672","1348128767","GB" +"1348128768","1348132863","SI" +"1348132864","1348136959","UA" +"1348136960","1348141055","RU" +"1348141056","1348145151","DK" +"1348145152","1348149247","RU" +"1348149248","1348153343","NO" +"1348153344","1348157439","IT" +"1348157440","1348165631","ES" +"1348165632","1348169727","DE" +"1348169728","1348173823","AL" +"1348173824","1348174591","FI" +"1348174592","1348177919","DK" +"1348177920","1348182015","BE" +"1348182016","1348190207","UA" +"1348190208","1348194303","RU" +"1348194304","1348194815","GR" +"1348194816","1348195071","US" +"1348195072","1348198399","GR" +"1348198400","1348202495","NO" +"1348202496","1348206591","EU" +"1348206592","1348218879","RU" +"1348218880","1348219295","DE" +"1348219296","1348219327","A2" +"1348219328","1348219343","DE" +"1348219344","1348219359","ZM" +"1348219360","1348219391","DE" +"1348219392","1348219647","US" +"1348219648","1348219903","DE" +"1348219904","1348219967","CA" +"1348219968","1348220687","DE" +"1348220688","1348220703","SA" +"1348220704","1348220711","DE" +"1348220712","1348220735","SA" +"1348220736","1348220799","BH" +"1348220800","1348220863","DE" +"1348220864","1348220895","BH" +"1348220896","1348220927","DE" +"1348220928","1348221183","US" +"1348221184","1348222975","DE" +"1348222976","1348231167","LU" +"1348231168","1348235263","RU" +"1348235264","1348239359","AT" +"1348239360","1348241407","SE" +"1348241408","1348242943","GB" +"1348242944","1348243455","SE" +"1348243456","1348247551","GB" +"1348247552","1348251647","RU" +"1348251648","1348255743","GE" +"1348255744","1348263935","RU" +"1348263936","1348268031","UA" +"1348268032","1348272127","CZ" +"1348272128","1348274695","IE" +"1348274696","1348274791","CH" +"1348274792","1348274799","IE" +"1348274800","1348274815","IL" +"1348274816","1348274927","IE" +"1348274928","1348274935","IL" +"1348274936","1348275199","CH" +"1348275200","1348275711","GB" +"1348275712","1348275967","CH" +"1348275968","1348280319","IE" +"1348280320","1348284415","AT" +"1348284416","1348288511","RU" +"1348288512","1348292607","IT" +"1348292608","1348296703","FR" +"1348296704","1348300799","RU" +"1348300800","1348304895","UA" +"1348304896","1348308991","IT" +"1348308992","1348313087","MT" +"1348313088","1348317183","GB" +"1348317184","1348321279","RU" +"1348321280","1348325375","GB" +"1348325376","1348329471","TR" +"1348329472","1348337663","RS" +"1348337664","1348341759","ES" +"1348341760","1348345855","PL" +"1348345856","1348349951","GB" +"1348349952","1348354047","SK" +"1348354048","1348358143","NL" +"1348358144","1348362239","DE" +"1348362240","1348366335","MC" +"1348366336","1348368227","IT" +"1348368228","1348368228","A2" +"1348368229","1348368895","IT" +"1348368896","1348369151","A2" +"1348369152","1348370431","IT" +"1348370432","1348374527","DE" +"1348374528","1348378623","CH" +"1348378624","1348382719","BY" +"1348382720","1348386815","FR" +"1348386816","1348390911","GB" +"1348390912","1348395007","SE" +"1348395008","1348399103","BY" +"1348399104","1348403199","MD" +"1348407296","1348411391","BG" +"1348411392","1348415487","RU" +"1348415488","1348419583","GB" +"1348419584","1348427775","HU" +"1348427776","1348435967","CZ" +"1348435968","1348440063","FI" +"1348440064","1348441215","DE" +"1348441216","1348441343","NL" +"1348441344","1348441855","DE" +"1348441856","1348442111","NL" +"1348442112","1348443775","DE" +"1348443776","1348448255","NL" +"1348448256","1348456447","GB" +"1348456448","1348460543","BH" +"1348460544","1348464639","SI" +"1348464640","1348468735","CZ" +"1348468736","1348548607","RO" +"1348548608","1348549631","MD" +"1348549632","1348599807","RO" +"1348599808","1348730879","HU" +"1348730880","1348861951","NL" +"1348861952","1348993023","ES" +"1348993024","1349124095","IT" +"1349124096","1349255167","GR" +"1349255168","1349517311","AT" +"1349517312","1349763071","NL" +"1349763072","1349771263","RU" +"1349771264","1349779455","NL" +"1349779456","1349910527","IT" +"1349910528","1350041599","FR" +"1350041600","1350057215","AT" +"1350057216","1350057343","AG" +"1350057344","1350091135","AT" +"1350091136","1350091199","SA" +"1350091200","1350091991","AT" +"1350091992","1350091999","SA" +"1350092000","1350092287","AT" +"1350092288","1350092543","A2" +"1350092544","1350215167","AT" +"1350215168","1350215191","IQ" +"1350215192","1350215679","AT" +"1350215680","1350215935","IQ" +"1350215936","1350216703","US" +"1350216704","1350216959","A2" +"1350216960","1350217215","IQ" +"1350217216","1350217471","US" +"1350217472","1350217727","IQ" +"1350217728","1350220287","AT" +"1350220288","1350220543","DE" +"1350220544","1350295823","AT" +"1350295824","1350295831","SA" +"1350295832","1350295847","AT" +"1350295848","1350295855","SA" +"1350295856","1350296063","AT" +"1350296064","1350296575","US" +"1350296576","1350303743","AT" +"1350303744","1350434815","FR" +"1350434816","1350565887","NL" +"1350565888","1351793791","DE" +"1351793792","1351793855","GB" +"1351793856","1351797231","DE" +"1351797232","1351797239","PL" +"1351797240","1351801327","DE" +"1351801328","1351801335","HU" +"1351801336","1351806975","DE" +"1351806976","1351807231","IT" +"1351807232","1351879999","DE" +"1351880000","1351880031","IT" +"1351880032","1351965183","DE" +"1351965184","1351965439","US" +"1351965440","1351991295","DE" +"1351991296","1351991551","IT" +"1351991552","1352002047","DE" +"1352002048","1352002303","US" +"1352002304","1352010239","DE" +"1352010240","1352010495","US" +"1352010496","1352011447","DE" +"1352011448","1352011455","IT" +"1352011456","1352038695","DE" +"1352038696","1352038699","US" +"1352038700","1352041471","DE" +"1352041472","1352041727","US" +"1352041728","1352058431","DE" +"1352058432","1352058495","US" +"1352058496","1352139671","DE" +"1352139672","1352139679","IT" +"1352139680","1352141311","DE" +"1352141312","1352141567","NL" +"1352141568","1352144519","DE" +"1352144520","1352144527","IT" +"1352144528","1352147007","DE" +"1352147008","1352147015","SE" +"1352147016","1352147107","DE" +"1352147108","1352147111","SE" +"1352147112","1352147263","DE" +"1352147264","1352147271","ES" +"1352147272","1352147391","DE" +"1352147392","1352147399","CZ" +"1352147400","1352147423","DE" +"1352147424","1352147431","ES" +"1352147432","1352147439","DE" +"1352147440","1352147447","SZ" +"1352147448","1352148151","DE" +"1352148152","1352148159","IT" +"1352148160","1352148751","DE" +"1352148752","1352148759","US" +"1352148760","1352149415","DE" +"1352149416","1352149423","FI" +"1352149424","1352149427","DE" +"1352149428","1352149451","FR" +"1352149452","1352149455","DE" +"1352149456","1352149487","FR" +"1352149488","1352149743","DE" +"1352149744","1352149751","AT" +"1352149752","1352149783","DE" +"1352149784","1352149791","SE" +"1352149792","1352149807","DE" +"1352149808","1352149823","SE" +"1352149824","1352149855","DE" +"1352149856","1352149871","SE" +"1352149872","1352276991","DE" +"1352276992","1352277503","US" +"1352277504","1352277535","DE" +"1352277536","1352277567","IT" +"1352277568","1352294911","DE" +"1352294912","1352295167","EU" +"1352295168","1352299775","DE" +"1352299776","1352300031","US" +"1352300032","1352402791","DE" +"1352402792","1352402799","BE" +"1352402800","1352404599","DE" +"1352404600","1352404607","NL" +"1352404608","1352412159","DE" +"1352412160","1352412415","FR" +"1352412416","1352445687","DE" +"1352445688","1352445703","NL" +"1352445704","1352663039","DE" +"1352663040","1353182591","DK" +"1353182592","1353182599","DE" +"1353182600","1353187327","DK" +"1353187328","1353252991","GB" +"1353252992","1353253023","FR" +"1353253024","1353253663","GB" +"1353253664","1353253671","NL" +"1353253672","1353253791","GB" +"1353253792","1353253823","FR" +"1353253824","1353255071","GB" +"1353255072","1353255087","CA" +"1353255088","1353255839","GB" +"1353255840","1353255855","FR" +"1353255856","1353257111","GB" +"1353257112","1353257119","ES" +"1353257120","1353257151","GB" +"1353257152","1353257167","FR" +"1353257168","1353257983","GB" +"1353257984","1353258263","SE" +"1353258264","1353258271","NO" +"1353258272","1353258303","SE" +"1353258304","1353258367","FI" +"1353258368","1353258391","SE" +"1353258392","1353258399","GB" +"1353258400","1353258415","SE" +"1353258416","1353258423","DK" +"1353258424","1353258495","SE" +"1353258496","1353258503","GB" +"1353258504","1353258519","SE" +"1353258520","1353258559","GB" +"1353258560","1353258639","SE" +"1353258640","1353258783","GB" +"1353258784","1353258807","SE" +"1353258808","1353259271","GB" +"1353259272","1353259279","DE" +"1353259280","1353264167","GB" +"1353264168","1353264175","FR" +"1353264176","1353265375","GB" +"1353265376","1353265383","IE" +"1353265384","1353265943","GB" +"1353265944","1353265951","IE" +"1353265952","1353266959","GB" +"1353266960","1353266975","IE" +"1353266976","1353267455","GB" +"1353267456","1353268223","IE" +"1353268224","1353268487","GB" +"1353268488","1353268511","BE" +"1353268512","1353268519","GB" +"1353268520","1353268599","BE" +"1353268600","1353268607","GB" +"1353268608","1353268687","BE" +"1353268688","1353268695","GB" +"1353268696","1353268703","BE" +"1353268704","1353268711","GB" +"1353268712","1353268991","BE" +"1353268992","1353269015","GB" +"1353269016","1353269223","BE" +"1353269224","1353269231","FR" +"1353269232","1353269247","BE" +"1353269248","1353270527","GB" +"1353270528","1353270783","IE" +"1353270784","1353271295","GB" +"1353271296","1353271423","IE" +"1353271424","1353271807","GB" +"1353271808","1353271831","ES" +"1353271832","1353271839","GB" +"1353271840","1353271911","ES" +"1353271912","1353271919","GB" +"1353271920","1353272039","ES" +"1353272040","1353272047","GB" +"1353272048","1353272055","ES" +"1353272056","1353272079","GB" +"1353272080","1353272103","ES" +"1353272104","1353272111","GB" +"1353272112","1353272119","ES" +"1353272120","1353272127","GB" +"1353272128","1353272159","ES" +"1353272160","1353272207","GB" +"1353272208","1353272245","ES" +"1353272246","1353272247","GB" +"1353272248","1353272631","ES" +"1353272632","1353272639","GB" +"1353272640","1353272691","ES" +"1353272692","1353272703","GB" +"1353272704","1353272743","ES" +"1353272744","1353272751","GB" +"1353272752","1353272807","ES" +"1353272808","1353272815","GB" +"1353272816","1353273055","ES" +"1353273056","1353273063","GB" +"1353273064","1353273343","ES" +"1353273344","1353273631","BE" +"1353273632","1353273639","ES" +"1353273640","1353273711","BE" +"1353273712","1353273719","GB" +"1353273720","1353274367","BE" +"1353274368","1353274679","ES" +"1353274680","1353274687","GB" +"1353274688","1353274759","ES" +"1353274760","1353274767","GB" +"1353274768","1353274791","ES" +"1353274792","1353274807","GB" +"1353274808","1353274895","ES" +"1353274896","1353274911","GB" +"1353274912","1353274935","ES" +"1353274936","1353274943","GB" +"1353274944","1353275007","ES" +"1353275008","1353275015","GB" +"1353275016","1353275111","ES" +"1353275112","1353275119","GB" +"1353275120","1353275159","ES" +"1353275160","1353275167","GB" +"1353275168","1353275391","ES" +"1353275392","1353277439","GB" +"1353277440","1353279487","CH" +"1353279488","1353279759","IT" +"1353279760","1353279763","GB" +"1353279764","1353280119","IT" +"1353280120","1353280127","GB" +"1353280128","1353280143","IT" +"1353280144","1353280151","GB" +"1353280152","1353280191","IT" +"1353280192","1353280199","GB" +"1353280200","1353280463","IT" +"1353280464","1353280479","GB" +"1353280480","1353280767","IT" +"1353280768","1353281023","GB" +"1353281024","1353281311","BE" +"1353281312","1353281319","GB" +"1353281320","1353281327","BE" +"1353281328","1353281343","GB" +"1353281344","1353281359","BE" +"1353281360","1353281367","GB" +"1353281368","1353281535","BE" +"1353281536","1353282047","GB" +"1353282048","1353282103","IT" +"1353282104","1353282111","GB" +"1353282112","1353282143","IT" +"1353282144","1353282151","GB" +"1353282152","1353282159","IT" +"1353282160","1353282167","GB" +"1353282168","1353282183","IT" +"1353282184","1353282191","GB" +"1353282192","1353282215","IT" +"1353282216","1353282223","GB" +"1353282224","1353282255","IT" +"1353282256","1353282263","GB" +"1353282264","1353282559","IT" +"1353282560","1353283071","GB" +"1353283072","1353283327","IT" +"1353283328","1353286143","GB" +"1353286144","1353286255","EU" +"1353286256","1353286271","GB" +"1353286272","1353286303","EU" +"1353286304","1353286311","GB" +"1353286312","1353286397","EU" +"1353286398","1353286398","GB" +"1353286399","1353286399","EU" +"1353286400","1353287679","GB" +"1353287680","1353288031","IE" +"1353288032","1353288063","GB" +"1353288064","1353288067","IE" +"1353288068","1353288071","GB" +"1353288072","1353288151","IE" +"1353288152","1353288159","GB" +"1353288160","1353288167","IE" +"1353288168","1353288191","GB" +"1353288192","1353288319","IE" +"1353288320","1353288327","GB" +"1353288328","1353288351","IE" +"1353288352","1353288383","GB" +"1353288384","1353288399","IE" +"1353288400","1353288407","GB" +"1353288408","1353288415","IE" +"1353288416","1353288431","GB" +"1353288432","1353288519","IE" +"1353288520","1353288527","GB" +"1353288528","1353288607","IE" +"1353288608","1353288639","GB" +"1353288640","1353288671","IE" +"1353288672","1353288679","GB" +"1353288680","1353288831","IE" +"1353288832","1353288839","GB" +"1353288840","1353288847","IE" +"1353288848","1353288855","GB" +"1353288856","1353288879","IE" +"1353288880","1353288895","GB" +"1353288896","1353288959","IE" +"1353288960","1353288975","GB" +"1353288976","1353288991","IE" +"1353288992","1353288999","GB" +"1353289000","1353289023","IE" +"1353289024","1353289031","NL" +"1353289032","1353289047","IE" +"1353289048","1353289087","GB" +"1353289088","1353289359","IE" +"1353289360","1353289375","GB" +"1353289376","1353289391","IE" +"1353289392","1353289407","GB" +"1353289408","1353289599","IE" +"1353289600","1353289615","GB" +"1353289616","1353289623","IE" +"1353289624","1353289631","GB" +"1353289632","1353289647","IE" +"1353289648","1353289663","GB" +"1353289664","1353289727","IE" +"1353289728","1353290927","GB" +"1353290928","1353290935","IE" +"1353290936","1353293351","GB" +"1353293352","1353293355","IT" +"1353293356","1353294767","GB" +"1353294768","1353294775","US" +"1353294776","1353295471","GB" +"1353295472","1353295479","IE" +"1353295480","1353295511","GB" +"1353295512","1353295519","DE" +"1353295520","1353297151","GB" +"1353297152","1353297183","IE" +"1353297184","1353298687","GB" +"1353298688","1353298695","SE" +"1353298696","1353298703","GB" +"1353298704","1353298707","SE" +"1353298708","1353298751","GB" +"1353298752","1353298815","SE" +"1353298816","1353298831","PT" +"1353298832","1353298839","SE" +"1353298840","1353298847","IE" +"1353298848","1353298863","SE" +"1353298864","1353298871","GB" +"1353298872","1353298881","SE" +"1353298882","1353298887","GB" +"1353298888","1353299647","SE" +"1353299648","1353299839","GB" +"1353299840","1353299847","SE" +"1353299848","1353299871","GB" +"1353299872","1353299911","SE" +"1353299912","1353299927","GB" +"1353299928","1353299951","SE" +"1353299952","1353299967","GB" +"1353299968","1353300063","SE" +"1353300064","1353300071","GB" +"1353300072","1353300095","SE" +"1353300096","1353300103","CH" +"1353300104","1353300111","SE" +"1353300112","1353300119","FI" +"1353300120","1353300127","SE" +"1353300128","1353300143","GB" +"1353300144","1353300159","SE" +"1353300160","1353300175","GB" +"1353300176","1353300191","SE" +"1353300192","1353300239","GB" +"1353300240","1353300247","SE" +"1353300248","1353300279","GB" +"1353300280","1353300735","SE" +"1353300736","1353301095","GB" +"1353301096","1353301103","US" +"1353301104","1353301415","GB" +"1353301416","1353301423","BE" +"1353301424","1353305679","GB" +"1353305680","1353305687","US" +"1353305688","1353306111","GB" +"1353306112","1353306623","ES" +"1353306624","1353306687","GB" +"1353306688","1353306735","BE" +"1353306736","1353306751","GB" +"1353306752","1353307135","BE" +"1353307136","1353307143","IT" +"1353307144","1353308159","GB" +"1353308160","1353309183","FR" +"1353309184","1353310303","GB" +"1353310304","1353310335","IE" +"1353310336","1353310463","GB" +"1353310464","1353310479","ES" +"1353310480","1353310487","GB" +"1353310488","1353310551","ES" +"1353310552","1353310559","GB" +"1353310560","1353310599","ES" +"1353310600","1353310607","DE" +"1353310608","1353310719","ES" +"1353310720","1353310807","IT" +"1353310808","1353310815","GB" +"1353310816","1353311175","IT" +"1353311176","1353311183","ES" +"1353311184","1353311231","IT" +"1353311232","1353312255","GB" +"1353312256","1353312767","CH" +"1353312768","1353312775","IT" +"1353312776","1353312783","GB" +"1353312784","1353312895","IT" +"1353312896","1353312903","GB" +"1353312904","1353312999","IT" +"1353313000","1353313015","GB" +"1353313016","1353313191","IT" +"1353313192","1353313199","GB" +"1353313200","1353313279","IT" +"1353313280","1353313791","IE" +"1353313792","1353314303","GB" +"1353314304","1353314815","CH" +"1353314816","1353315415","ES" +"1353315416","1353315423","FR" +"1353315424","1353315903","ES" +"1353315904","1353315935","FR" +"1353315936","1353316351","ES" +"1353316352","1353317375","GB" +"1353317376","1353317631","FR" +"1353317632","1353318143","GB" +"1353318144","1353318399","IE" +"1353318400","1353383935","SE" +"1353383936","1353449471","DE" +"1353449472","1353515007","PT" +"1353515008","1353646079","ES" +"1353646080","1353842687","GB" +"1353842688","1353956607","IL" +"1353956608","1353956863","GB" +"1353956864","1353968639","IL" +"1353968640","1353968895","A2" +"1353968896","1353970431","IL" +"1353970432","1353970543","A2" +"1353970544","1353970547","IL" +"1353970548","1353970571","A2" +"1353970572","1353970575","IL" +"1353970576","1353970579","A2" +"1353970580","1353970587","IL" +"1353970588","1353970623","A2" +"1353970624","1353970639","IL" +"1353970640","1353970687","A2" +"1353970688","1353973759","IL" +"1353973760","1354235903","IT" +"1354235904","1354301439","KW" +"1354301440","1354366975","FR" +"1354366976","1354432511","FI" +"1354432512","1354469375","DE" +"1354469376","1354469631","EU" +"1354469632","1354469887","DE" +"1354469888","1354471679","EU" +"1354471680","1354471935","DE" +"1354471936","1354472191","EU" +"1354472192","1354472959","DE" +"1354472960","1354473215","EU" +"1354473216","1354485759","DE" +"1354485760","1354487295","EU" +"1354487296","1354488319","DE" +"1354488320","1354488831","EU" +"1354488832","1354489087","DE" +"1354489088","1354489855","EU" +"1354489856","1354498047","DE" +"1354498048","1354563583","CZ" +"1354563584","1354629119","GB" +"1354629120","1354662191","DE" +"1354662192","1354662207","CY" +"1354662208","1354662943","DE" +"1354662944","1354662975","AT" +"1354662976","1354664759","DE" +"1354664760","1354664767","IT" +"1354664768","1354665923","DE" +"1354665924","1354665927","AT" +"1354665928","1354666639","DE" +"1354666640","1354666650","FI" +"1354666651","1354666687","DE" +"1354666688","1354666688","FI" +"1354666689","1354668031","DE" +"1354668032","1354668159","AT" +"1354668160","1354673919","DE" +"1354673920","1354674175","PL" +"1354674176","1354674719","DE" +"1354674720","1354674751","CH" +"1354674752","1354674815","DE" +"1354674816","1354674943","IT" +"1354674944","1354675199","AE" +"1354675200","1354676479","DE" +"1354676480","1354676767","AE" +"1354676768","1354676783","DE" +"1354676784","1354676791","PL" +"1354676792","1354676991","DE" +"1354676992","1354677023","AE" +"1354677024","1354677247","DE" +"1354677248","1354677279","AE" +"1354677280","1354678015","DE" +"1354678016","1354678031","AE" +"1354678032","1354678159","DE" +"1354678160","1354678163","PL" +"1354678164","1354678559","DE" +"1354678560","1354678575","AE" +"1354678576","1354678743","DE" +"1354678744","1354678751","CH" +"1354678752","1354678759","IT" +"1354678760","1354679295","DE" +"1354679296","1354679807","AE" +"1354679808","1354680063","DE" +"1354680064","1354680079","AE" +"1354680080","1354680175","DE" +"1354680176","1354680179","PL" +"1354680180","1354681471","DE" +"1354681472","1354681487","AE" +"1354681488","1354681815","DE" +"1354681816","1354681823","CH" +"1354681824","1354682143","DE" +"1354682144","1354682175","CH" +"1354682176","1354682287","DE" +"1354682288","1354682303","AE" +"1354682304","1354682771","DE" +"1354682772","1354682775","RS" +"1354682776","1354682895","DE" +"1354682896","1354682911","AE" +"1354682912","1354683095","DE" +"1354683096","1354683103","IT" +"1354683104","1354683391","DE" +"1354683392","1354684159","PL" +"1354684160","1354684415","DE" +"1354684416","1354684431","AE" +"1354684432","1354684671","DE" +"1354684672","1354684927","AE" +"1354684928","1354687023","DE" +"1354687024","1354687031","LU" +"1354687032","1354687359","DE" +"1354687360","1354687375","NZ" +"1354687376","1354687383","DE" +"1354687384","1354687391","NZ" +"1354687392","1354687399","DE" +"1354687400","1354687407","IT" +"1354687408","1354687455","DE" +"1354687456","1354687487","IT" +"1354687488","1354694655","DE" +"1354694656","1354760191","IR" +"1354760192","1355022335","GB" +"1355022336","1355284479","DK" +"1355284480","1355415551","BE" +"1355415552","1355546623","NO" +"1355546624","1355808767","IT" +"1355808768","1356070911","DK" +"1356070912","1356201983","NO" +"1356201984","1356333055","FR" +"1356333056","1356464127","SE" +"1356464128","1356595199","CH" +"1356595200","1356857343","FI" +"1356857344","1356922879","ES" +"1356922880","1356988415","GB" +"1356988416","1357053951","DE" +"1357053952","1357091727","AE" +"1357091728","1357091743","A2" +"1357091744","1357119487","AE" +"1357119488","1357126807","DE" +"1357126808","1357126815","NL" +"1357126816","1357127063","DE" +"1357127064","1357127079","NL" +"1357127080","1357127471","DE" +"1357127472","1357127487","CH" +"1357127488","1357177943","DE" +"1357177944","1357177951","NL" +"1357177952","1357185023","DE" +"1357185024","1357250559","GB" +"1357250560","1357316095","IL" +"1357316096","1357316607","ES" +"1357316608","1357317119","LU" +"1357317120","1357317375","GB" +"1357317376","1357317631","A2" +"1357317632","1357318143","LY" +"1357318144","1357320191","QA" +"1357320192","1357320703","FR" +"1357320704","1357320959","RO" +"1357320960","1357320991","ES" +"1357320992","1357320999","GB" +"1357321000","1357321007","FR" +"1357321008","1357321015","GB" +"1357321016","1357321023","DK" +"1357321024","1357321087","KE" +"1357321088","1357321215","HK" +"1357321216","1357321471","GB" +"1357321472","1357321727","ES" +"1357321728","1357321983","CY" +"1357321984","1357322239","GB" +"1357322240","1357322751","DE" +"1357322752","1357323263","BH" +"1357323264","1357323519","ES" +"1357323520","1357323775","GB" +"1357323776","1357324287","DE" +"1357324288","1357326335","GB" +"1357326336","1357326591","NL" +"1357326592","1357326847","DE" +"1357326848","1357327359","GB" +"1357327360","1357328383","DE" +"1357328384","1357330431","EU" +"1357330432","1357330943","DE" +"1357330944","1357331455","ES" +"1357331456","1357332479","EU" +"1357332480","1357333247","DE" +"1357333248","1357333503","GB" +"1357333504","1357333759","IR" +"1357333760","1357333823","FR" +"1357333824","1357333855","GB" +"1357333856","1357334015","ES" +"1357334016","1357334271","TZ" +"1357334272","1357334527","CA" +"1357334528","1357335039","FR" +"1357335040","1357335295","GB" +"1357335296","1357335551","FR" +"1357335552","1357335807","GB" +"1357335808","1357336063","KE" +"1357336064","1357336319","GB" +"1357336320","1357336575","FR" +"1357336576","1357337599","NL" +"1357337600","1357337855","ES" +"1357337856","1357338111","SA" +"1357338112","1357338879","FR" +"1357338880","1357339391","NO" +"1357339392","1357339647","ES" +"1357339648","1357339903","DZ" +"1357339904","1357340159","GB" +"1357340160","1357340415","DE" +"1357340416","1357342719","GB" +"1357342720","1357342975","PL" +"1357342976","1357344767","EU" +"1357344768","1357346815","CA" +"1357346816","1357347839","FR" +"1357347840","1357348095","PL" +"1357348096","1357348351","EU" +"1357348352","1357348607","ES" +"1357348608","1357348863","EU" +"1357348864","1357349119","DE" +"1357349120","1357349375","LU" +"1357349376","1357349887","GB" +"1357349888","1357350399","ES" +"1357350400","1357350911","QA" +"1357350912","1357351167","GB" +"1357351168","1357351423","PL" +"1357351424","1357352959","GB" +"1357352960","1357353983","CA" +"1357353984","1357354495","GB" +"1357354496","1357354751","ES" +"1357354752","1357355007","FR" +"1357355008","1357355263","NL" +"1357355264","1357355775","FR" +"1357355776","1357356031","GB" +"1357356032","1357356543","ES" +"1357356544","1357357055","PT" +"1357357056","1357357567","ES" +"1357357568","1357358079","DE" +"1357358080","1357358335","ES" +"1357358336","1357358591","FR" +"1357358592","1357358847","DE" +"1357358848","1357359103","PL" +"1357359104","1357359999","ES" +"1357360000","1357360015","GB" +"1357360016","1357360023","IT" +"1357360024","1357360031","BE" +"1357360032","1357360271","GB" +"1357360272","1357360279","FR" +"1357360280","1357360287","GB" +"1357360288","1357360319","IN" +"1357360320","1357360335","GB" +"1357360336","1357360343","BE" +"1357360344","1357360351","LU" +"1357360352","1357360383","GB" +"1357360384","1357360639","ES" +"1357360640","1357360895","GB" +"1357360896","1357361151","DE" +"1357361152","1357363199","CA" +"1357363200","1357364223","QA" +"1357364224","1357365247","ES" +"1357365248","1357365759","DZ" +"1357365760","1357365791","ES" +"1357365792","1357365823","BH" +"1357365824","1357365887","GB" +"1357365888","1357366015","DE" +"1357366016","1357366271","KM" +"1357366272","1357366527","FR" +"1357366528","1357366591","BE" +"1357366592","1357366655","FR" +"1357366656","1357366719","PT" +"1357366720","1357366783","GB" +"1357366784","1357366799","MD" +"1357366800","1357366815","ES" +"1357366816","1357366847","FR" +"1357366848","1357366863","GB" +"1357366864","1357366879","ES" +"1357366880","1357366959","GB" +"1357366960","1357366967","BE" +"1357366968","1357366975","FR" +"1357366976","1357367295","GB" +"1357367296","1357367551","FR" +"1357367552","1357368063","GB" +"1357368064","1357368831","GN" +"1357368832","1357369343","ES" +"1357369344","1357369599","PL" +"1357369600","1357369855","GB" +"1357369856","1357370111","KE" +"1357370112","1357370367","DE" +"1357370368","1357370879","GB" +"1357370880","1357371391","LY" +"1357371392","1357371647","GB" +"1357371648","1357371903","FR" +"1357371904","1357372159","RU" +"1357372160","1357372927","GB" +"1357372928","1357373183","AM" +"1357373184","1357373439","GB" +"1357373440","1357381631","EU" +"1357381632","1357386143","NO" +"1357386144","1357386147","DK" +"1357386148","1357386151","NO" +"1357386152","1357386159","DK" +"1357386160","1357391615","NO" +"1357391616","1357391871","SE" +"1357391872","1357414399","NO" +"1357414400","1357447167","LV" +"1357447168","1357479935","IE" +"1357479936","1357512703","LV" +"1357512704","1357545471","RU" +"1357545472","1357578239","GB" +"1357578240","1357611007","EE" +"1357611008","1357643775","GB" +"1357643776","1357676543","FR" +"1357676544","1357709311","BE" +"1357709312","1357742079","RU" +"1357742080","1357759079","DE" +"1357759080","1357759087","AM" +"1357759088","1357759183","DE" +"1357759184","1357759191","AT" +"1357759192","1357765823","DE" +"1357765824","1357765831","AT" +"1357765832","1357767056","DE" +"1357767057","1357767057","A1" +"1357767058","1357767239","DE" +"1357767240","1357769287","A1" +"1357769288","1357773111","DE" +"1357773112","1357773119","PL" +"1357773120","1357774847","DE" +"1357774848","1357791231","GB" +"1357791232","1357807615","PL" +"1357807616","1357840383","CH" +"1357840384","1357867735","NO" +"1357867736","1357867743","SE" +"1357867744","1357873151","NO" +"1357873152","1357875199","DE" +"1357875200","1357875215","AT" +"1357875216","1357875247","DE" +"1357875248","1357875263","US" +"1357875264","1357875279","AT" +"1357875280","1357875295","DE" +"1357875296","1357875327","EU" +"1357875328","1357875423","DE" +"1357875424","1357875439","GB" +"1357875440","1357875711","DE" +"1357875712","1357875967","PL" +"1357875968","1357876143","DE" +"1357876144","1357876151","SE" +"1357876152","1357876223","DE" +"1357876224","1357876239","NO" +"1357876240","1357876335","EU" +"1357876336","1357876339","PL" +"1357876340","1357876343","RU" +"1357876344","1357876383","EU" +"1357876384","1357876391","RU" +"1357876392","1357876399","PL" +"1357876400","1357876407","DE" +"1357876408","1357876415","GB" +"1357876416","1357876447","PL" +"1357876448","1357876479","EU" +"1357876480","1357876495","SE" +"1357876496","1357876543","EU" +"1357876544","1357876863","DE" +"1357876864","1357876927","SE" +"1357876928","1357877759","DE" +"1357877760","1357878271","EU" +"1357878272","1357878335","CH" +"1357878336","1357878399","CZ" +"1357878400","1357878463","NL" +"1357878464","1357878527","NO" +"1357878528","1357878591","AT" +"1357878592","1357878655","PL" +"1357878656","1357878719","DE" +"1357878720","1357878783","NL" +"1357878784","1357879807","DE" +"1357879808","1357879871","RU" +"1357879872","1357879935","DE" +"1357879936","1357880063","GB" +"1357880064","1357880319","NL" +"1357880320","1357880447","DE" +"1357880448","1357880511","CH" +"1357880512","1357880543","DE" +"1357880544","1357880559","AT" +"1357880560","1357880831","DE" +"1357880832","1357881087","AT" +"1357881088","1357881343","DE" +"1357881344","1357883391","FR" +"1357883392","1357883407","ES" +"1357883408","1357883423","DE" +"1357883424","1357883455","EU" +"1357883456","1357883519","FR" +"1357883520","1357883535","EU" +"1357883536","1357883543","FR" +"1357883544","1357883583","EU" +"1357883584","1357883711","FR" +"1357883712","1357883719","EU" +"1357883720","1357883727","FR" +"1357883728","1357883743","DE" +"1357883744","1357883759","IT" +"1357883760","1357883775","FR" +"1357883776","1357883807","RU" +"1357883808","1357883839","GB" +"1357883840","1357883903","EU" +"1357883904","1357883911","GB" +"1357883912","1357883999","EU" +"1357884000","1357884031","FR" +"1357884032","1357884095","RU" +"1357884096","1357884159","SE" +"1357884160","1357884415","GB" +"1357884416","1357884419","EU" +"1357884420","1357884423","FR" +"1357884424","1357884427","BE" +"1357884428","1357884431","DE" +"1357884432","1357884439","US" +"1357884440","1357884447","FR" +"1357884448","1357884495","EU" +"1357884496","1357884511","DE" +"1357884512","1357884927","FR" +"1357884928","1357884935","EU" +"1357884936","1357884943","GB" +"1357884944","1357884959","FR" +"1357884960","1357884991","RU" +"1357884992","1357885055","EU" +"1357885056","1357885119","FR" +"1357885120","1357885191","EU" +"1357885192","1357885199","ES" +"1357885200","1357885215","EU" +"1357885216","1357885247","ES" +"1357885248","1357885439","DE" +"1357885440","1357885695","FR" +"1357885696","1357885951","DE" +"1357885952","1357886079","EU" +"1357886080","1357886207","DE" +"1357886208","1357886463","EU" +"1357886464","1357887487","US" +"1357887488","1357888511","FR" +"1357888512","1357889023","DE" +"1357889024","1357889535","GB" +"1357889536","1357890815","PL" +"1357890816","1357890827","NL" +"1357890828","1357890847","EU" +"1357890848","1357890879","NL" +"1357890880","1357890911","EU" +"1357890912","1357890943","DE" +"1357890944","1357891327","NL" +"1357891328","1357891391","EU" +"1357891392","1357891399","NL" +"1357891400","1357891423","EU" +"1357891424","1357891455","DE" +"1357891456","1357891647","SE" +"1357891648","1357891679","NL" +"1357891680","1357891711","GB" +"1357891712","1357891839","SE" +"1357891840","1357892095","GB" +"1357892096","1357892111","DE" +"1357892112","1357892127","ES" +"1357892128","1357892143","FR" +"1357892144","1357892159","IT" +"1357892160","1357892175","GB" +"1357892176","1357892183","AR" +"1357892184","1357892191","AU" +"1357892192","1357892199","BR" +"1357892200","1357892207","NL" +"1357892208","1357892215","SE" +"1357892216","1357892223","US" +"1357892224","1357892351","FR" +"1357892352","1357893119","NL" +"1357893120","1357893375","SE" +"1357893376","1357893407","EU" +"1357893408","1357893439","SE" +"1357893440","1357893471","IT" +"1357893472","1357893503","PL" +"1357893504","1357893631","DE" +"1357893632","1357894911","EU" +"1357894912","1357895423","FR" +"1357895424","1357895679","AE" +"1357895680","1357895935","DE" +"1357895936","1357896191","SE" +"1357896192","1357897215","EU" +"1357897216","1357897279","SE" +"1357897280","1357897343","DK" +"1357897344","1357897375","HU" +"1357897376","1357897407","PL" +"1357897408","1357897439","RU" +"1357897440","1357897487","DE" +"1357897488","1357897535","EU" +"1357897536","1357897543","CZ" +"1357897544","1357897551","SE" +"1357897552","1357897855","EU" +"1357897856","1357898495","DE" +"1357898496","1357898751","EU" +"1357898752","1357899015","DE" +"1357899016","1357899019","EU" +"1357899020","1357899023","NL" +"1357899024","1357899039","DE" +"1357899040","1357899047","EU" +"1357899048","1357899063","DE" +"1357899064","1357899071","EU" +"1357899072","1357899199","DE" +"1357899200","1357899263","EU" +"1357899264","1357899267","DE" +"1357899268","1357899275","FR" +"1357899276","1357899279","NL" +"1357899280","1357899287","RU" +"1357899288","1357899295","EU" +"1357899296","1357899311","DE" +"1357899312","1357899527","EU" +"1357899528","1357899535","BR" +"1357899536","1357899543","CZ" +"1357899544","1357899551","EU" +"1357899552","1357899567","AT" +"1357899568","1357899647","EU" +"1357899648","1357899775","GB" +"1357899776","1357900287","DE" +"1357900288","1357900319","EU" +"1357900320","1357900327","FR" +"1357900328","1357900351","EU" +"1357900352","1357900415","CH" +"1357900416","1357900543","SE" +"1357900544","1357900799","NL" +"1357900800","1357901823","DE" +"1357901824","1357902335","EU" +"1357902336","1357902847","A2" +"1357902848","1357903359","GB" +"1357903360","1357903615","DE" +"1357903616","1357904383","EU" +"1357904384","1357904895","DE" +"1357904896","1357905407","GB" +"1357905408","1357905663","SE" +"1357905664","1357905919","NL" +"1357905920","1357910015","LT" +"1357910016","1357914111","GR" +"1357914112","1357922303","RU" +"1357922304","1357926399","SA" +"1357926400","1357930495","GB" +"1357930496","1357942783","RU" +"1357942784","1357946879","RS" +"1357946880","1357955071","PL" +"1357955072","1357959167","KE" +"1357959168","1357963263","RU" +"1357963264","1357964199","AT" +"1357964200","1357964207","DE" +"1357964208","1357967359","AT" +"1357967360","1357971455","RU" +"1357971456","1357975551","KZ" +"1357975552","1357979647","AT" +"1357979648","1357983743","KZ" +"1357983744","1357987839","RU" +"1357987840","1357988479","GB" +"1357988480","1357988483","DE" +"1357988484","1357988495","GB" +"1357988496","1357988543","DE" +"1357988544","1357988551","NL" +"1357988552","1357988559","DE" +"1357988560","1357988567","GB" +"1357988568","1357988607","DE" +"1357988608","1357988751","GB" +"1357988752","1357988775","DE" +"1357988776","1357988783","GB" +"1357988784","1357988863","DE" +"1357988864","1357989375","GB" +"1357989376","1357989383","CH" +"1357989384","1357989647","GB" +"1357989648","1357989655","FR" +"1357989656","1357989663","GB" +"1357989664","1357989671","FR" +"1357989672","1357989679","BE" +"1357989680","1357989703","FR" +"1357989704","1357989711","GB" +"1357989712","1357989727","FR" +"1357989728","1357989743","GB" +"1357989744","1357989759","CH" +"1357989760","1357989783","FR" +"1357989784","1357989791","GB" +"1357989792","1357989807","FR" +"1357989808","1357989823","GB" +"1357989824","1357989831","NL" +"1357989832","1357989839","FR" +"1357989840","1357989847","GB" +"1357989848","1357989887","FR" +"1357989888","1357991679","GB" +"1357991680","1357991711","DE" +"1357991712","1357991719","GB" +"1357991720","1357991735","DE" +"1357991736","1357991759","GB" +"1357991760","1357991783","DE" +"1357991784","1357991791","GB" +"1357991792","1357991799","DE" +"1357991800","1357991823","GB" +"1357991824","1357991839","DE" +"1357991840","1357991855","GB" +"1357991856","1357991895","DE" +"1357991896","1357991903","GB" +"1357991904","1357991927","DE" +"1357991928","1357991935","GB" +"1357991936","1357996031","NO" +"1357996032","1358000127","CH" +"1358000128","1358004223","LI" +"1358004224","1358008319","PL" +"1358008320","1358012415","BH" +"1358012416","1358016511","IT" +"1358016512","1358020607","GE" +"1358020608","1358028799","DE" +"1358028800","1358032895","IT" +"1358032896","1358036991","GE" +"1358036992","1358041087","IR" +"1358041088","1358045183","FI" +"1358045184","1358049279","SK" +"1358049280","1358061567","RU" +"1358061568","1358065663","UA" +"1358065664","1358069759","BA" +"1358069760","1358074719","DE" +"1358074720","1358074751","CH" +"1358074752","1358082815","DE" +"1358082816","1358083071","CH" +"1358083072","1358086143","DE" +"1358086144","1358090239","CH" +"1358090240","1358094335","KZ" +"1358094336","1358102527","NL" +"1358102528","1358106623","RU" +"1358106624","1358110719","LT" +"1358110720","1358116895","DE" +"1358116896","1358116911","IT" +"1358116912","1358118911","DE" +"1358118912","1358123007","RU" +"1358123008","1358127103","PT" +"1358127104","1358131199","CZ" +"1358131200","1358135295","DK" +"1358135296","1358139391","RU" +"1358139392","1358143487","UA" +"1358143488","1358144159","AT" +"1358144160","1358144191","MT" +"1358144192","1358147519","AT" +"1358147520","1358147583","MT" +"1358147584","1358151679","GB" +"1358151680","1358155775","DE" +"1358155776","1358159871","CH" +"1358159872","1358163967","ES" +"1358163968","1358168063","FR" +"1358168064","1358172159","GB" +"1358172160","1358176255","CY" +"1358176256","1358180351","RU" +"1358180352","1358184447","ES" +"1358184448","1358192639","SE" +"1358192640","1358196735","HU" +"1358196736","1358200831","IT" +"1358200832","1358209023","PL" +"1358209024","1358213119","IL" +"1358213120","1358217215","GB" +"1358217216","1358221311","SE" +"1358221312","1358223359","DE" +"1358223360","1358223631","GB" +"1358223632","1358223663","DE" +"1358223664","1358223671","GB" +"1358223672","1358223687","DE" +"1358223688","1358223695","GB" +"1358223696","1358223719","DE" +"1358223720","1358223815","GB" +"1358223816","1358223823","DE" +"1358223824","1358223835","GB" +"1358223836","1358223843","DE" +"1358223844","1358223871","GB" +"1358223872","1358223887","NL" +"1358223888","1358223895","DE" +"1358223896","1358223903","NL" +"1358223904","1358223911","DE" +"1358223912","1358223927","NL" +"1358223928","1358223935","DE" +"1358223936","1358223939","NL" +"1358223940","1358223951","DE" +"1358223952","1358223959","NL" +"1358223960","1358223975","DE" +"1358223976","1358223991","NL" +"1358223992","1358223999","DE" +"1358224000","1358224043","NL" +"1358224044","1358224047","DE" +"1358224048","1358224087","NL" +"1358224088","1358224511","DE" +"1358224512","1358224519","BE" +"1358224520","1358224611","DE" +"1358224612","1358224651","BE" +"1358224652","1358224655","DE" +"1358224656","1358224727","BE" +"1358224728","1358224959","DE" +"1358224960","1358225127","IT" +"1358225128","1358225135","DE" +"1358225136","1358225183","IT" +"1358225184","1358225187","DE" +"1358225188","1358225231","IT" +"1358225232","1358225407","DE" +"1358225408","1358229503","RU" +"1358229504","1358230111","DE" +"1358230112","1358230115","AT" +"1358230116","1358230383","DE" +"1358230384","1358230391","TR" +"1358230392","1358230399","CH" +"1358230400","1358232863","DE" +"1358232864","1358232867","IT" +"1358232868","1358232903","DE" +"1358232904","1358232911","CH" +"1358232912","1358232924","DE" +"1358232925","1358232925","CH" +"1358232926","1358233599","DE" +"1358233600","1358237695","ES" +"1358237696","1358239231","FR" +"1358239232","1358239487","CH" +"1358239488","1358239743","FR" +"1358239744","1358239999","CH" +"1358240000","1358240255","FR" +"1358240256","1358240319","CH" +"1358240320","1358241791","FR" +"1358241792","1358241823","BE" +"1358241824","1358241951","FR" +"1358241952","1358241983","BE" +"1358241984","1358242591","FR" +"1358242592","1358242623","BE" +"1358242624","1358244351","FR" +"1358244352","1358244607","IT" +"1358244608","1358245503","FR" +"1358245504","1358245631","BE" +"1358245632","1358245695","FR" +"1358245696","1358245759","BE" +"1358245760","1358249215","FR" +"1358249216","1358249471","IT" +"1358249472","1358249983","FR" +"1358249984","1358251815","DE" +"1358251816","1358251823","NL" +"1358251824","1358254079","DE" +"1358254080","1358258175","MD" +"1358258176","1358262271","RU" +"1358262272","1358266367","UA" +"1358266368","1358274559","DE" +"1358274560","1358278655","GR" +"1358278656","1358282751","PL" +"1358282752","1358286847","AT" +"1358286848","1358290943","MT" +"1358290944","1358295039","SE" +"1358295040","1358299135","RU" +"1358299136","1358303231","DZ" +"1358303232","1358307327","RU" +"1358307328","1358315519","DE" +"1358315520","1358323711","RU" +"1358323712","1358327807","LU" +"1358327808","1358328671","DE" +"1358328672","1358328727","AT" +"1358328728","1358331903","DE" +"1358331904","1358335999","IL" +"1358336000","1358344191","FI" +"1358344192","1358352383","NL" +"1358352384","1358356479","RU" +"1358356480","1358360575","SI" +"1358360576","1358364671","RU" +"1358364672","1358372863","GB" +"1358372864","1358376959","RU" +"1358376960","1358381055","GB" +"1358381056","1358383311","IT" +"1358383312","1358383327","FR" +"1358383328","1358384127","IT" +"1358384128","1358384143","FR" +"1358384144","1358384191","IT" +"1358384192","1358384199","FR" +"1358384200","1358385151","IT" +"1358385152","1358389247","GB" +"1358389248","1358397439","RU" +"1358397440","1358397743","GB" +"1358397744","1358397951","A2" +"1358397952","1358398463","TZ" +"1358398464","1358399487","GB" +"1358399488","1358399999","NG" +"1358400000","1358400007","PK" +"1358400008","1358400015","A2" +"1358400016","1358400071","IN" +"1358400072","1358400255","A2" +"1358400256","1358400511","AF" +"1358400512","1358400519","GA" +"1358400520","1358400527","A2" +"1358400528","1358400535","TZ" +"1358400536","1358400543","A2" +"1358400544","1358400551","GA" +"1358400552","1358400575","A2" +"1358400576","1358400591","KE" +"1358400592","1358400639","A2" +"1358400640","1358400775","KE" +"1358400776","1358400783","A2" +"1358400784","1358400799","KE" +"1358400800","1358400863","NG" +"1358400864","1358400895","GA" +"1358400896","1358401279","NG" +"1358401280","1358401535","KE" +"1358401536","1358401791","GB" +"1358401792","1358402175","A2" +"1358402176","1358402559","TZ" +"1358402560","1358402719","GB" +"1358402720","1358403103","A2" +"1358403104","1358403135","ID" +"1358403136","1358403151","A2" +"1358403152","1358403167","ID" +"1358403168","1358403183","A2" +"1358403184","1358403273","ID" +"1358403274","1358403327","A2" +"1358403328","1358403583","NG" +"1358403584","1358403591","PK" +"1358403592","1358403631","A2" +"1358403632","1358403679","PK" +"1358403680","1358403687","A2" +"1358403688","1358403711","PK" +"1358403712","1358403839","A2" +"1358403840","1358404095","NG" +"1358404096","1358404607","A2" +"1358404608","1358404611","NG" +"1358404612","1358404615","TZ" +"1358404616","1358404623","NG" +"1358404624","1358404655","TZ" +"1358404656","1358404671","NG" +"1358404672","1358404695","A2" +"1358404696","1358404703","TZ" +"1358404704","1358404735","A2" +"1358404736","1358404751","NG" +"1358404752","1358404767","A2" +"1358404768","1358404783","NG" +"1358404784","1358404863","A2" +"1358404864","1358405119","NG" +"1358405120","1358405375","TZ" +"1358405376","1358405631","NG" +"1358405632","1358409727","NL" +"1358409728","1358413823","RU" +"1358413824","1358422015","NL" +"1358422016","1358426111","FR" +"1358426112","1358430207","FI" +"1358430208","1358434303","NG" +"1358434304","1358438399","IS" +"1358438400","1358442495","NL" +"1358442496","1358446591","RU" +"1358446592","1358450687","TG" +"1358450688","1358454783","RU" +"1358454784","1358462975","FI" +"1358462976","1358467071","SE" +"1358467072","1358471167","RU" +"1358471168","1358475263","FI" +"1358475264","1358479359","GB" +"1358479360","1358479615","CH" +"1358479616","1358483455","LI" +"1358483456","1358487551","FR" +"1358487552","1358487689","SE" +"1358487690","1358487691","RU" +"1358487692","1358487693","RO" +"1358487694","1358487695","PL" +"1358487696","1358487697","HU" +"1358487698","1358487699","BG" +"1358487700","1358487701","ES" +"1358487702","1358487711","SE" +"1358487712","1358487727","US" +"1358487728","1358487999","FR" +"1358488000","1358488191","SE" +"1358488192","1358488223","GB" +"1358488224","1358488239","US" +"1358488240","1358488255","FR" +"1358488256","1358488447","SE" +"1358488448","1358488479","GB" +"1358488480","1358488495","US" +"1358488496","1358488511","FR" +"1358488512","1358491647","SE" +"1358491648","1358495743","FI" +"1358495744","1358499839","PL" +"1358499840","1358503935","KZ" +"1358503936","1358508031","IT" +"1358508032","1358512127","GB" +"1358512128","1358516223","DZ" +"1358516224","1358520319","BY" +"1358520320","1358524415","GB" +"1358524416","1358528511","DE" +"1358528512","1358536703","RU" +"1358536704","1358540799","HU" +"1358540800","1358548991","RU" +"1358548992","1358553087","JO" +"1358553088","1358557183","UA" +"1358557184","1358557343","IE" +"1358557344","1358557407","GB" +"1358557408","1358557903","IE" +"1358557904","1358557911","GB" +"1358557912","1358557951","IE" +"1358557952","1358558047","GB" +"1358558048","1358558143","IE" +"1358558144","1358558175","GB" +"1358558176","1358558807","IE" +"1358558808","1358558815","GB" +"1358558816","1358558831","IE" +"1358558832","1358558847","GB" +"1358558848","1358558975","IE" +"1358558976","1358559007","GB" +"1358559008","1358559039","IE" +"1358559040","1358559071","GB" +"1358559072","1358559551","IE" +"1358559552","1358559559","GB" +"1358559560","1358560975","IE" +"1358560976","1358560991","GB" +"1358560992","1358561119","IE" +"1358561120","1358561151","GB" +"1358561152","1358561279","IE" +"1358561280","1358569471","CZ" +"1358569472","1358573567","NG" +"1358573568","1358577663","LV" +"1358577664","1358585855","RU" +"1358585856","1358589951","GB" +"1358589952","1358594047","EE" +"1358594048","1358598143","DE" +"1358598144","1358602239","IL" +"1358602240","1358622719","RU" +"1358622720","1358626815","SK" +"1358626816","1358630911","A2" +"1358630912","1358635007","GB" +"1358635008","1358639103","TR" +"1358639104","1358643199","RU" +"1358643200","1358647295","ES" +"1358647296","1358651391","DE" +"1358651392","1358655487","FR" +"1358655488","1358667775","RU" +"1358667776","1358668067","PT" +"1358668068","1358668071","GB" +"1358668072","1358668111","PT" +"1358668112","1358668119","GB" +"1358668120","1358668159","PT" +"1358668160","1358668167","GB" +"1358668168","1358668255","PT" +"1358668256","1358668263","GB" +"1358668264","1358668271","PT" +"1358668272","1358668279","ES" +"1358668280","1358668287","PT" +"1358668288","1358668303","GB" +"1358668304","1358668359","PT" +"1358668360","1358668363","GB" +"1358668364","1358668463","PT" +"1358668464","1358668479","ES" +"1358668480","1358668495","GB" +"1358668496","1358668503","PT" +"1358668504","1358668511","GB" +"1358668512","1358668535","PT" +"1358668536","1358668543","GB" +"1358668544","1358668799","PT" +"1358668800","1358668807","GB" +"1358668808","1358668927","PT" +"1358668928","1358668959","ES" +"1358668960","1358669327","PT" +"1358669328","1358669335","GB" +"1358669336","1358669351","PT" +"1358669352","1358669359","GB" +"1358669360","1358669463","PT" +"1358669464","1358669471","GB" +"1358669472","1358669823","PT" +"1358669824","1358669839","GB" +"1358669840","1358669847","PT" +"1358669848","1358669855","GB" +"1358669856","1358669975","PT" +"1358669976","1358669983","GB" +"1358669984","1358670015","PT" +"1358670016","1358670023","GB" +"1358670024","1358670183","PT" +"1358670184","1358670191","GB" +"1358670192","1358670943","PT" +"1358670944","1358670951","FR" +"1358670952","1358671047","PT" +"1358671048","1358671055","ES" +"1358671056","1358671415","PT" +"1358671416","1358671423","AT" +"1358671424","1358671431","PT" +"1358671432","1358671439","GB" +"1358671440","1358671607","PT" +"1358671608","1358671615","GB" +"1358671616","1358671839","PT" +"1358671840","1358671855","ES" +"1358671856","1358671871","PT" +"1358671872","1358671903","GB" +"1358671904","1358671967","PT" +"1358671968","1358671983","GB" +"1358671984","1358672479","PT" +"1358672480","1358672511","GB" +"1358672512","1358672687","PT" +"1358672688","1358672703","GB" +"1358672704","1358673535","PT" +"1358673536","1358673567","US" +"1358673568","1358673599","GB" +"1358673600","1358673663","PT" +"1358673664","1358675967","GB" +"1358675968","1358677247","SE" +"1358677248","1358677759","DK" +"1358677760","1358679295","SE" +"1358679296","1358680063","DK" +"1358680064","1358688255","RU" +"1358688256","1358692351","CZ" +"1358692352","1358696447","PL" +"1358696448","1358700543","RU" +"1358700544","1358704639","AT" +"1358704640","1358708735","HU" +"1358708736","1358712831","GB" +"1358712832","1358713999","NL" +"1358714000","1358714015","A2" +"1358714016","1358716927","NL" +"1358716928","1358721023","DE" +"1358721024","1358725119","GB" +"1358725120","1358733311","RU" +"1358733312","1358733639","SE" +"1358733640","1358733643","DE" +"1358733644","1358734003","SE" +"1358734004","1358734007","NO" +"1358734008","1358734123","SE" +"1358734124","1358734127","AN" +"1358734128","1358734343","SE" +"1358734344","1358734347","NL" +"1358734348","1358734715","SE" +"1358734716","1358734719","NL" +"1358734720","1358734727","SE" +"1358734728","1358734731","US" +"1358734732","1358734975","SE" +"1358734976","1358734979","NL" +"1358734980","1358735139","SE" +"1358735140","1358735143","NL" +"1358735144","1358735319","SE" +"1358735320","1358735323","DE" +"1358735324","1358735491","SE" +"1358735492","1358735495","NL" +"1358735496","1358735711","SE" +"1358735712","1358735715","FR" +"1358735716","1358735743","SE" +"1358735744","1358735751","FR" +"1358735752","1358736071","SE" +"1358736072","1358736075","US" +"1358736076","1358736927","SE" +"1358736928","1358736943","NL" +"1358736944","1358737383","SE" +"1358737384","1358737387","NL" +"1358737388","1358738103","SE" +"1358738104","1358738111","FR" +"1358738112","1358738303","SE" +"1358738304","1358738307","FR" +"1358738308","1358738431","SE" +"1358738432","1358738447","NL" +"1358738448","1358738687","SE" +"1358738688","1358738691","DE" +"1358738692","1358739135","SE" +"1358739136","1358739151","NL" +"1358739152","1358739503","SE" +"1358739504","1358739519","FR" +"1358739520","1358740099","SE" +"1358740100","1358740103","MY" +"1358740104","1358740159","SE" +"1358740160","1358740175","FR" +"1358740176","1358740335","SE" +"1358740336","1358740351","GB" +"1358740352","1358740671","SE" +"1358740672","1358740675","PL" +"1358740676","1358740679","BG" +"1358740680","1358740683","BR" +"1358740684","1358740687","TR" +"1358740688","1358740883","SE" +"1358740884","1358740887","NL" +"1358740888","1358740927","SE" +"1358740928","1358740943","DK" +"1358740944","1358741503","SE" +"1358741504","1358745599","IT" +"1358745600","1358749695","SE" +"1358749696","1358753791","IT" +"1358753792","1358757887","UA" +"1358757888","1358766079","RU" +"1358766080","1358770175","IT" +"1358770176","1358774271","BG" +"1358774272","1358778367","ES" +"1358778368","1358782463","CH" +"1358782464","1358784015","GB" +"1358784016","1358784039","NL" +"1358784040","1358784063","DE" +"1358784064","1358784831","GB" +"1358784832","1358784863","NL" +"1358784864","1358784895","DE" +"1358784896","1358785087","GB" +"1358785088","1358785151","NL" +"1358785152","1358786559","GB" +"1358786560","1358787071","NL" +"1358787072","1358787327","GB" +"1358787328","1358787583","IE" +"1358787584","1358790655","GB" +"1358790656","1358798847","IR" +"1358798848","1358799359","DE" +"1358799360","1358802943","HR" +"1358802944","1358807039","HU" +"1358807040","1358811135","ES" +"1358811136","1358815231","DE" +"1358815232","1358819327","RU" +"1358819328","1358823423","TR" +"1358823424","1358827519","UA" +"1358827520","1358831615","RU" +"1358831616","1358835711","NO" +"1358835712","1358839807","RU" +"1358839808","1358842111","CH" +"1358842112","1358842879","A1" +"1358842880","1358843903","CH" +"1358843904","1358847999","MT" +"1358848000","1358856191","RU" +"1358856192","1358860287","DE" +"1358860288","1358861311","GB" +"1358861312","1358861567","EU" +"1358861568","1358861823","DE" +"1358861824","1358862335","FR" +"1358862336","1358862847","US" +"1358862848","1358863103","DK" +"1358863104","1358863359","CH" +"1358863360","1358863871","US" +"1358863872","1358864383","GB" +"1358864384","1358864399","CH" +"1358864400","1358864407","IN" +"1358864408","1358864535","CH" +"1358864536","1358864543","LI" +"1358864544","1358872575","CH" +"1358872576","1358876671","IT" +"1358876672","1358880767","LV" +"1358880768","1358884863","GB" +"1358884864","1358888959","SE" +"1358888960","1358889599","DE" +"1358889600","1358889631","IN" +"1358889632","1358890591","DE" +"1358890592","1358890623","IT" +"1358890624","1358890943","DE" +"1358890944","1358890975","GB" +"1358890976","1358891007","IT" +"1358891008","1358891647","DE" +"1358891648","1358891711","IT" +"1358891712","1358892191","DE" +"1358892192","1358892223","IT" +"1358892224","1358893055","DE" +"1358893056","1358897151","RU" +"1358897152","1358898175","A2" +"1358898176","1358898239","CA" +"1358898240","1358898291","A2" +"1358898292","1358898292","US" +"1358898293","1358898335","A2" +"1358898336","1358898351","DK" +"1358898352","1358898816","A2" +"1358898817","1358898943","CG" +"1358898944","1358899199","US" +"1358899200","1358899207","UG" +"1358899208","1358899215","LA" +"1358899216","1358899239","US" +"1358899240","1358899247","LK" +"1358899248","1358899263","A2" +"1358899264","1358899295","PK" +"1358899296","1358899303","NG" +"1358899304","1358899311","AE" +"1358899312","1358899327","NG" +"1358899328","1358899335","CD" +"1358899336","1358899343","NG" +"1358899344","1358899359","MR" +"1358899360","1358899375","US" +"1358899376","1358899383","CD" +"1358899384","1358899391","UG" +"1358899392","1358899407","A2" +"1358899408","1358899415","DE" +"1358899416","1358899423","CD" +"1358899424","1358899439","A2" +"1358899440","1358899455","NG" +"1358899456","1358899463","A2" +"1358899464","1358899471","US" +"1358899472","1358899479","SV" +"1358899480","1358899599","A2" +"1358899600","1358899607","LK" +"1358899608","1358899615","A2" +"1358899616","1358899631","NG" +"1358899632","1358899647","NP" +"1358899648","1358899711","A2" +"1358899712","1358899967","US" +"1358899968","1358900223","KE" +"1358900224","1358900767","A2" +"1358900768","1358900783","BI" +"1358900784","1358900959","A2" +"1358900960","1358900975","SL" +"1358900976","1358901807","A2" +"1358901808","1358901815","CD" +"1358901816","1358901935","A2" +"1358901936","1358901951","NG" +"1358901952","1358901999","A2" +"1358902000","1358902039","NG" +"1358902040","1358902063","A2" +"1358902064","1358902079","TZ" +"1358902080","1358902087","NG" +"1358902088","1358902103","MG" +"1358902104","1358902143","NG" +"1358902144","1358902151","A2" +"1358902152","1358902167","NG" +"1358902168","1358902175","AU" +"1358902176","1358902207","A2" +"1358902208","1358902215","US" +"1358902216","1358902233","NG" +"1358902234","1358902263","A2" +"1358902264","1358902271","ZA" +"1358902272","1358903615","A2" +"1358903616","1358903623","GB" +"1358903624","1358903807","A2" +"1358903808","1358903951","NG" +"1358903952","1358903967","A2" +"1358903968","1358903983","CA" +"1358903984","1358903999","NG" +"1358904000","1358904032","ZA" +"1358904033","1358904071","A2" +"1358904072","1358904095","US" +"1358904096","1358904103","A2" +"1358904104","1358904119","US" +"1358904120","1358904127","A2" +"1358904128","1358904135","US" +"1358904136","1358904143","A2" +"1358904144","1358904151","NG" +"1358904152","1358904167","A2" +"1358904168","1358904175","US" +"1358904176","1358904191","A2" +"1358904192","1358904199","NG" +"1358904200","1358904255","US" +"1358904256","1358904295","A2" +"1358904296","1358904311","NG" +"1358904312","1358904551","A2" +"1358904552","1358904559","IL" +"1358904560","1358904575","A2" +"1358904576","1358904701","NG" +"1358904702","1358904703","A2" +"1358904704","1358904719","MU" +"1358904720","1358904735","KN" +"1358904736","1358904767","ZA" +"1358904768","1358904831","NG" +"1358904832","1358905095","A2" +"1358905096","1358905103","GH" +"1358905104","1358905111","A2" +"1358905112","1358905119","TZ" +"1358905120","1358905127","GY" +"1358905128","1358905151","A2" +"1358905152","1358905159","MG" +"1358905160","1358905167","A2" +"1358905168","1358905183","CD" +"1358905184","1358905215","GH" +"1358905216","1358905223","US" +"1358905224","1358905231","A2" +"1358905232","1358905247","GN" +"1358905248","1358905279","US" +"1358905280","1358905295","A2" +"1358905296","1358905303","LR" +"1358905304","1358905311","A2" +"1358905312","1358905327","US" +"1358905328","1358905343","A2" +"1358905344","1358909439","UA" +"1358909440","1358913535","RU" +"1358913536","1358917631","CH" +"1358917632","1358921727","ES" +"1358921728","1358929919","RU" +"1358929920","1358930700","LU" +"1358930701","1358930701","EU" +"1358930702","1358934015","LU" +"1358934016","1358938111","RU" +"1358938112","1358946303","GB" +"1358946304","1358950399","LV" +"1358950400","1358954495","NL" +"1358954496","1358970879","ES" +"1358970880","1358984191","HU" +"1358984192","1358984703","SK" +"1358984704","1358986239","HU" +"1358986240","1358986495","SK" +"1358986496","1358987263","HU" +"1358987264","1359003647","NO" +"1359003648","1359020031","CZ" +"1359020032","1359036415","FR" +"1359036416","1359052799","GB" +"1359052800","1359063039","RU" +"1359063040","1359064063","PL" +"1359064064","1359101951","RU" +"1359101952","1359118335","GB" +"1359118336","1359118591","DE" +"1359118592","1359118719","NL" +"1359118720","1359118815","DE" +"1359118816","1359118831","NL" +"1359118832","1359119199","DE" +"1359119200","1359119231","NL" +"1359119232","1359119359","DE" +"1359119360","1359120383","NL" +"1359120384","1359121407","DK" +"1359121408","1359123583","DE" +"1359123584","1359123711","SE" +"1359123712","1359133311","DE" +"1359133312","1359133439","AT" +"1359133440","1359134303","DE" +"1359134304","1359134319","NL" +"1359134320","1359134719","DE" +"1359134720","1359150079","CZ" +"1359150080","1359150591","HU" +"1359150592","1359151103","CZ" +"1359151104","1359158207","DE" +"1359158208","1359158215","CH" +"1359158216","1359166175","DE" +"1359166176","1359166191","HK" +"1359166192","1359167487","DE" +"1359167488","1359172095","GB" +"1359172096","1359172351","EU" +"1359172352","1359183871","GB" +"1359183872","1359200255","RU" +"1359200256","1359216639","AT" +"1359216640","1359233023","EG" +"1359233024","1359249407","NL" +"1359249408","1359260735","CY" +"1359260736","1359260751","A2" +"1359260752","1359263743","CY" +"1359263744","1359263999","LB" +"1359264000","1359265791","CY" +"1359265792","1359282175","RU" +"1359282176","1359298559","IL" +"1359298560","1359314943","RU" +"1359314944","1359331327","GB" +"1359331328","1359347711","AT" +"1359347712","1359349351","CH" +"1359349352","1359349359","LB" +"1359349360","1359364095","CH" +"1359364096","1359380479","TR" +"1359380480","1359396863","PL" +"1359396864","1359413247","GB" +"1359413248","1359413503","DE" +"1359413504","1359413759","FR" +"1359413760","1359429631","DE" +"1359429632","1359446015","LT" +"1359446016","1359451727","DK" +"1359451728","1359451731","US" +"1359451732","1359455551","DK" +"1359455552","1359455558","PL" +"1359455559","1359462399","DK" +"1359462400","1359467007","DE" +"1359467008","1359467015","US" +"1359467016","1359467063","DE" +"1359467064","1359467079","US" +"1359467080","1359467087","DE" +"1359467088","1359467095","US" +"1359467096","1359467103","BR" +"1359467104","1359467135","US" +"1359467136","1359467143","MX" +"1359467144","1359467215","US" +"1359467216","1359467223","DE" +"1359467224","1359467231","US" +"1359467232","1359467239","DE" +"1359467240","1359467255","US" +"1359467256","1359467263","MX" +"1359467264","1359467455","US" +"1359467456","1359467487","CA" +"1359467488","1359467495","DE" +"1359467496","1359467647","US" +"1359467648","1359467775","DE" +"1359467776","1359467855","US" +"1359467856","1359467871","DE" +"1359467872","1359468063","US" +"1359468064","1359468575","DE" +"1359468576","1359468583","SG" +"1359468584","1359468639","DE" +"1359468640","1359468655","SG" +"1359468656","1359468671","JP" +"1359468672","1359468695","SG" +"1359468696","1359468711","DE" +"1359468712","1359468751","SG" +"1359468752","1359468759","AU" +"1359468760","1359468863","DE" +"1359468864","1359468879","SG" +"1359468880","1359468927","DE" +"1359468928","1359469055","SG" +"1359469056","1359469311","DE" +"1359469312","1359469567","SG" +"1359469568","1359469943","DE" +"1359469944","1359469983","AT" +"1359469984","1359470591","DE" +"1359470592","1359478783","CH" +"1359478784","1359511551","TR" +"1359511552","1359544319","SE" +"1359544320","1359577087","RU" +"1359577088","1359609855","ES" +"1359609856","1359641087","EG" +"1359641088","1359642623","JO" +"1359642624","1359675391","AT" +"1359675392","1359708159","DE" +"1359708160","1359740927","BE" +"1359740928","1359773695","IR" +"1359773696","1359806463","RO" +"1359806464","1359839231","RU" +"1359839232","1359871999","CH" +"1359872000","1359904767","FR" +"1359904768","1359937535","DE" +"1359937536","1359970303","IS" +"1359970304","1360003071","PL" +"1360003072","1360007167","AM" +"1360007168","1360011263","GB" +"1360011264","1360015359","AT" +"1360015360","1360019455","DE" +"1360019456","1360023551","FI" +"1360023552","1360027647","RU" +"1360027648","1360031743","AT" +"1360031744","1360039935","RU" +"1360039936","1360041439","AT" +"1360041440","1360041447","CZ" +"1360041448","1360043671","AT" +"1360043672","1360043679","CZ" +"1360043680","1360044031","AT" +"1360044032","1360048127","SE" +"1360048128","1360049167","DE" +"1360049168","1360049183","GB" +"1360049184","1360049199","DE" +"1360049200","1360049207","SE" +"1360049208","1360049215","IT" +"1360049216","1360049223","ES" +"1360049224","1360049231","JP" +"1360049232","1360049239","US" +"1360049240","1360049247","GB" +"1360049248","1360050959","DE" +"1360050960","1360050975","US" +"1360050976","1360052223","DE" +"1360052224","1360056319","HU" +"1360056320","1360060415","SA" +"1360060416","1360064511","LT" +"1360064512","1360068607","GE" +"1360068608","1360072703","RU" +"1360072704","1360076799","CH" +"1360076800","1360084991","NL" +"1360084992","1360089087","GB" +"1360089088","1360093183","AZ" +"1360093184","1360101375","DE" +"1360101376","1360105471","UA" +"1360105472","1360109567","RU" +"1360109568","1360113663","KZ" +"1360113664","1360117759","HU" +"1360117760","1360121855","FI" +"1360121856","1360125951","DE" +"1360125952","1360126975","SI" +"1360126976","1360127487","HR" +"1360127488","1360127999","RS" +"1360128000","1360128511","MK" +"1360128512","1360129023","SI" +"1360129024","1360130047","BA" +"1360130048","1360131520","IE" +"1360131521","1360131583","GB" +"1360131584","1360131903","IE" +"1360131904","1360131919","US" +"1360131920","1360134143","IE" +"1360134144","1360138239","NL" +"1360138240","1360142335","CH" +"1360142336","1360146431","KZ" +"1360146432","1360150527","RS" +"1360150528","1360158719","RO" +"1360158720","1360162815","DE" +"1360162816","1360175103","RU" +"1360175104","1360179199","NL" +"1360179200","1360183295","FR" +"1360183296","1360191487","PL" +"1360191488","1360195583","FO" +"1360195584","1360199679","NL" +"1360199680","1360203775","CZ" +"1360203776","1360207871","FR" +"1360207872","1360210943","CZ" +"1360210944","1360211199","EU" +"1360211200","1360211967","CZ" +"1360211968","1360216063","GB" +"1360216064","1360224255","RU" +"1360224256","1360225663","ES" +"1360225664","1360225695","GB" +"1360225696","1360228351","ES" +"1360228352","1360232447","FI" +"1360232448","1360236543","RU" +"1360236544","1360239135","AT" +"1360239136","1360239167","DE" +"1360239168","1360240639","AT" +"1360240640","1360244735","ES" +"1360244736","1360249855","GB" +"1360249856","1360250111","CH" +"1360250112","1360251391","GB" +"1360251392","1360251647","DE" +"1360251648","1360252415","GB" +"1360252416","1360252671","CH" +"1360252672","1360257023","GB" +"1360257024","1360257959","DK" +"1360257960","1360257964","FI" +"1360257965","1360259447","DK" +"1360259448","1360259451","US" +"1360259452","1360265215","DK" +"1360265216","1360265983","NL" +"1360265984","1360267007","GB" +"1360267008","1360268031","SE" +"1360268032","1360268287","FR" +"1360268288","1360269311","GB" +"1360269312","1360273407","KG" +"1360273408","1360281599","GB" +"1360281600","1360281727","NL" +"1360281728","1360281855","ES" +"1360281856","1360282111","NL" +"1360282112","1360282239","ES" +"1360282240","1360282751","NL" +"1360282752","1360282783","GB" +"1360282784","1360283519","NL" +"1360283520","1360283535","BE" +"1360283536","1360285183","NL" +"1360285184","1360285335","ES" +"1360285336","1360285343","NL" +"1360285344","1360285375","ES" +"1360285376","1360285695","NL" +"1360285696","1360289791","DE" +"1360289792","1360293887","RU" +"1360293888","1360302079","DE" +"1360302080","1360306175","EE" +"1360306176","1360310271","RU" +"1360310272","1360314367","JE" +"1360314368","1360318463","RU" +"1360318464","1360322559","FR" +"1360322560","1360326655","FI" +"1360326656","1360330751","PT" +"1360330752","1360334847","UA" +"1360334848","1360338943","IT" +"1360338944","1360343039","CY" +"1360343040","1360347135","SA" +"1360347136","1360351231","GB" +"1360351232","1360355327","AZ" +"1360355328","1360359423","EG" +"1360359424","1360363519","AT" +"1360363520","1360365567","IT" +"1360365568","1360367615","NL" +"1360367616","1360371711","IE" +"1360371712","1360375807","TR" +"1360375808","1360379903","NL" +"1360379904","1360383999","PL" +"1360384000","1360388095","SE" +"1360388096","1360392191","RU" +"1360392192","1360396287","EE" +"1360396288","1360400383","RU" +"1360400384","1360404479","BH" +"1360404480","1360404735","GB" +"1360404736","1360404991","DE" +"1360404992","1360405247","FR" +"1360405248","1360405503","SE" +"1360405504","1360408575","GB" +"1360408576","1360412671","RU" +"1360412672","1360420863","DZ" +"1360420864","1360424959","TR" +"1360424960","1360429055","RU" +"1360429056","1360433151","UA" +"1360433152","1360437247","RO" +"1360437248","1360441343","FI" +"1360441344","1360445439","HU" +"1360445440","1360453631","RU" +"1360453632","1360457727","DE" +"1360457728","1360461823","FI" +"1360461824","1360465919","RU" +"1360465920","1360470015","UA" +"1360470016","1360474111","FR" +"1360474112","1360478207","GB" +"1360478208","1360482303","CH" +"1360482304","1360486399","IT" +"1360486400","1360494591","RU" +"1360494592","1360498687","DK" +"1360498688","1360511231","RU" +"1360511232","1360511487","A2" +"1360511488","1360514047","RU" +"1360514048","1360515071","A2" +"1360515072","1360519167","GB" +"1360519168","1360524031","NL" +"1360524032","1360524287","US" +"1360524288","1360531455","NL" +"1360531456","1360535551","RO" +"1360535552","1360539647","DE" +"1360539648","1360543743","NL" +"1360543744","1360547839","DE" +"1360547840","1360551935","RU" +"1360551936","1360556031","NL" +"1360556032","1360564223","RU" +"1360564224","1360568319","AT" +"1360568320","1360572415","ES" +"1360572416","1360576511","RU" +"1360576512","1360580607","GB" +"1360580608","1360584703","UA" +"1360584704","1360588799","IT" +"1360592896","1360596991","RU" +"1360596992","1360601087","CZ" +"1360601088","1360605183","BY" +"1360605184","1360613375","RU" +"1360613376","1360617471","SE" +"1360617472","1360621567","IT" +"1360621568","1360625663","ES" +"1360625664","1360626687","DE" +"1360626688","1360627199","LB" +"1360627200","1360627455","A2" +"1360627456","1360627520","IQ" +"1360627521","1360627711","DE" +"1360627712","1360627743","LB" +"1360627744","1360627967","DE" +"1360627968","1360628095","IQ" +"1360628096","1360628223","LU" +"1360628224","1360628479","A2" +"1360628480","1360628735","LB" +"1360628736","1360628991","IQ" +"1360628992","1360629055","TR" +"1360629056","1360629247","DE" +"1360629248","1360629503","A2" +"1360629504","1360629759","IQ" +"1360629760","1360633855","SE" +"1360633856","1360637951","RU" +"1360637952","1360642047","FO" +"1360642048","1360645711","FR" +"1360645712","1360645719","GB" +"1360645720","1360646143","FR" +"1360646144","1360650239","AT" +"1360650240","1360654335","UA" +"1360654336","1360658431","EE" +"1360658432","1360666623","PL" +"1360666624","1360674815","NO" +"1360674816","1360678911","DZ" +"1360678912","1360683007","RU" +"1360683008","1360691199","GB" +"1360691200","1360699391","RU" +"1360699392","1360703487","DE" +"1360703488","1360707583","RU" +"1360707584","1360709631","IT" +"1360709632","1360711679","AL" +"1360711680","1360715775","NL" +"1360715776","1360728063","SE" +"1360728064","1360732159","FR" +"1360732160","1360736255","NO" +"1360736256","1360740351","RU" +"1360740352","1360743679","GB" +"1360743680","1360743935","FR" +"1360743936","1360748677","GB" +"1360748678","1360748678","IM" +"1360748679","1360749759","GB" +"1360749760","1360749791","IM" +"1360749792","1360752639","GB" +"1360752640","1360756735","DE" +"1360756736","1360760831","IT" +"1360760832","1360764927","RU" +"1360764928","1360769023","DE" +"1360769024","1360773119","IT" +"1360773120","1360777215","CZ" +"1360777216","1360781311","DK" +"1360781312","1360785407","DE" +"1360785408","1360793599","RU" +"1360793600","1360797695","CZ" +"1360797696","1360805887","IR" +"1360805888","1360809983","DE" +"1360809984","1360814079","NL" +"1360814080","1360818175","FR" +"1360818176","1360822271","JO" +"1360822272","1360826367","AT" +"1360826368","1360830463","GB" +"1360830464","1360838655","RU" +"1360838656","1360842751","FR" +"1360842752","1360846847","RU" +"1360846848","1360850943","DE" +"1360850944","1360855039","IT" +"1360855040","1360859135","NL" +"1360859136","1360863231","LT" +"1360863232","1360867327","NO" +"1360867328","1360879615","GB" +"1360879616","1360883711","EG" +"1360883712","1360887807","RU" +"1360887808","1360890367","FI" +"1360890368","1360890623","RU" +"1360890624","1360890879","FI" +"1360890880","1360891391","RU" +"1360891392","1360891647","FI" +"1360891648","1360891903","RU" +"1360891904","1360892487","CH" +"1360892488","1360892495","IT" +"1360892496","1360892791","CH" +"1360892792","1360892799","IT" +"1360892800","1360892831","CH" +"1360892832","1360892847","MD" +"1360892848","1360892927","CH" +"1360892928","1360893183","IT" +"1360893184","1360894335","CH" +"1360894336","1360894367","MD" +"1360894368","1360894975","CH" +"1360894976","1360894983","IT" +"1360894984","1360895999","CH" +"1360896000","1360900095","QA" +"1360900096","1360905039","IT" +"1360905040","1360905055","GB" +"1360905056","1360905391","IT" +"1360905392","1360905407","GB" +"1360905408","1360906687","IT" +"1360906688","1360906719","GB" +"1360906720","1360909391","IT" +"1360909392","1360909407","GB" +"1360909408","1360910495","IT" +"1360910496","1360910511","GB" +"1360910512","1360910527","IT" +"1360910528","1360910559","GB" +"1360910560","1360916479","IT" +"1360916480","1360920575","IR" +"1360920576","1360928767","IT" +"1360928768","1360932863","NL" +"1360932864","1360936959","RU" +"1360936960","1360941055","NL" +"1360941056","1360945151","BY" +"1360945152","1360949247","DE" +"1360949248","1360953343","RU" +"1360953344","1360957439","PL" +"1360957440","1360961535","DE" +"1360961536","1360965631","UA" +"1360965632","1360977919","RU" +"1360977920","1360986111","CZ" +"1360986112","1360987935","GB" +"1360987936","1360987983","SK" +"1360987984","1360988055","GB" +"1360988056","1360988063","SK" +"1360988064","1360990207","GB" +"1360990208","1360990463","CZ" +"1360990464","1360994303","GB" +"1360994304","1360998399","CZ" +"1360998400","1361002495","FI" +"1361002496","1361006591","GB" +"1361006592","1361010687","DK" +"1361010688","1361018879","GB" +"1361018880","1361022975","AT" +"1361022976","1361027071","IT" +"1361027072","1361035263","IR" +"1361035264","1361035627","US" +"1361035628","1361035631","DZ" +"1361035632","1361039359","US" +"1361039360","1361043455","PL" +"1361043456","1361051647","IR" +"1361051648","1362100223","ES" +"1362100224","1362395135","FR" +"1362395136","1362395183","CH" +"1362395184","1362395391","FR" +"1362395392","1362395519","SG" +"1362395520","1362395647","FR" +"1362395648","1362396159","US" +"1362396160","1362396415","FR" +"1362396416","1362396927","US" +"1362396928","1362397183","CM" +"1362397184","1362397255","GB" +"1362397256","1362397439","FR" +"1362397440","1362397503","US" +"1362397504","1362398463","FR" +"1362398464","1362398719","DE" +"1362398720","1362403583","FR" +"1362403584","1362405887","DZ" +"1362405888","1362406143","FR" +"1362406144","1362407167","SV" +"1362407168","1362407423","FR" +"1362407424","1362407431","US" +"1362407432","1362407439","FR" +"1362407440","1362407447","US" +"1362407448","1362407455","FR" +"1362407456","1362407519","US" +"1362407520","1362407615","FR" +"1362407616","1362407647","HK" +"1362407648","1362407679","FR" +"1362407680","1362407743","US" +"1362407744","1362407839","FR" +"1362407840","1362407871","US" +"1362407872","1362407887","HK" +"1362407888","1362407903","US" +"1362407904","1362407919","HK" +"1362407920","1362407935","US" +"1362407936","1362409727","FR" +"1362409728","1362409983","HK" +"1362409984","1362411519","FR" +"1362411520","1362413273","MQ" +"1362413274","1362413567","FR" +"1362413568","1362413587","CM" +"1362413588","1362414079","FR" +"1362414080","1362414847","US" +"1362414848","1362415103","GB" +"1362415104","1362415359","FR" +"1362415360","1362415615","DE" +"1362415616","1362417663","GP" +"1362417664","1362419711","SG" +"1362419712","1362423039","FR" +"1362423040","1362423167","SG" +"1362423168","1362423231","FR" +"1362423232","1362423239","GB" +"1362423240","1362423263","FR" +"1362423264","1362423295","SG" +"1362423296","1362423807","VE" +"1362423808","1362424063","US" +"1362424064","1362425855","SG" +"1362425856","1362426623","US" +"1362426624","1362426879","FR" +"1362426880","1362427903","MQ" +"1362427904","1362755583","FR" +"1362755584","1362759695","NL" +"1362759696","1362759703","BE" +"1362759704","1362759711","NL" +"1362759712","1362759727","BE" +"1362759728","1362759735","NL" +"1362759736","1362759767","BE" +"1362759768","1362759775","NL" +"1362759776","1362759791","BE" +"1362759792","1362759815","NL" +"1362759816","1362759847","BE" +"1362759848","1362759863","NL" +"1362759864","1362759879","BE" +"1362759880","1362759895","NL" +"1362759896","1362759903","BE" +"1362759904","1362759919","NL" +"1362759920","1362759927","BE" +"1362759928","1362759943","NL" +"1362759944","1362759967","BE" +"1362759968","1362759983","NL" +"1362759984","1362759999","BE" +"1362760000","1362760007","NL" +"1362760008","1362760031","BE" +"1362760032","1362760039","NL" +"1362760040","1362760047","BE" +"1362760048","1362760055","NL" +"1362760056","1362760087","BE" +"1362760088","1362760111","NL" +"1362760112","1362760119","BE" +"1362760120","1362760167","NL" +"1362760168","1362760191","BE" +"1362760192","1362760215","NL" +"1362760216","1362760223","BE" +"1362760224","1362760239","NL" +"1362760240","1362760271","BE" +"1362760272","1362760279","NL" +"1362760280","1362760287","BE" +"1362760288","1362760303","NL" +"1362760304","1362760351","BE" +"1362760352","1362760375","NL" +"1362760376","1362760383","BE" +"1362760384","1362760391","NL" +"1362760392","1362760399","BE" +"1362760400","1362760423","NL" +"1362760424","1362760439","BE" +"1362760440","1362760447","NL" +"1362760448","1362760455","BE" +"1362760456","1362760471","NL" +"1362760472","1362760479","BE" +"1362760480","1362760503","NL" +"1362760504","1362760511","BE" +"1362760512","1362760519","NL" +"1362760520","1362760535","BE" +"1362760536","1362760559","NL" +"1362760560","1362760567","BE" +"1362760568","1362760575","NL" +"1362760576","1362760591","BE" +"1362760592","1362760615","NL" +"1362760616","1362760639","BE" +"1362760640","1362760647","NL" +"1362760648","1362760663","BE" +"1362760664","1362760671","NL" +"1362760672","1362760679","BE" +"1362760680","1362760687","NL" +"1362760688","1362760703","BE" +"1362760704","1362760711","NL" +"1362760712","1362760719","BE" +"1362760720","1362760735","NL" +"1362760736","1362760751","BE" +"1362760752","1362760783","NL" +"1362760784","1362760807","BE" +"1362760808","1362760831","NL" +"1362760832","1362760839","BE" +"1362760840","1362760863","NL" +"1362760864","1362760879","BE" +"1362760880","1362760887","NL" +"1362760888","1362760903","BE" +"1362760904","1362760919","NL" +"1362760920","1362760927","BE" +"1362760928","1362760967","NL" +"1362760968","1362760983","BE" +"1362760984","1362761007","NL" +"1362761008","1362761023","BE" +"1362761024","1362761031","NL" +"1362761032","1362761063","BE" +"1362761064","1362761103","NL" +"1362761104","1362761111","BE" +"1362761112","1362761119","NL" +"1362761120","1362761127","BE" +"1362761128","1362761159","NL" +"1362761160","1362761167","BE" +"1362761168","1362761175","NL" +"1362761176","1362761199","BE" +"1362761200","1362761207","NL" +"1362761208","1362761215","BE" +"1362761216","1362761247","NL" +"1362761248","1362761255","BE" +"1362761256","1362761279","NL" +"1362761280","1362761287","BE" +"1362761288","1362761303","NL" +"1362761304","1362761311","BE" +"1362761312","1362761319","NL" +"1362761320","1362761327","BE" +"1362761328","1362761407","NL" +"1362761408","1362761415","BE" +"1362761416","1362761463","NL" +"1362761464","1362761471","BE" +"1362761472","1362761495","NL" +"1362761496","1362761503","BE" +"1362761504","1362761519","NL" +"1362761520","1362761535","BE" +"1362761536","1362761559","NL" +"1362761560","1362761567","BE" +"1362761568","1362761583","NL" +"1362761584","1362761591","BE" +"1362761592","1362761607","NL" +"1362761608","1362761623","BE" +"1362761624","1362761631","NL" +"1362761632","1362761647","BE" +"1362761648","1362761663","NL" +"1362761664","1362761679","BE" +"1362761680","1362761687","NL" +"1362761688","1362761695","BE" +"1362761696","1362761719","NL" +"1362761720","1362761727","BE" +"1362761728","1362761743","NL" +"1362761744","1362761767","BE" +"1362761768","1362761879","NL" +"1362761880","1362761895","BE" +"1362761896","1362761959","NL" +"1362761960","1362761967","BE" +"1362761968","1362761983","NL" +"1362761984","1362761999","BE" +"1362762000","1362762007","NL" +"1362762008","1362762015","BE" +"1362762016","1362762031","NL" +"1362762032","1362762039","BE" +"1362762040","1362762047","NL" +"1362762048","1362762063","BE" +"1362762064","1362762071","NL" +"1362762072","1362762079","BE" +"1362762080","1362762095","NL" +"1362762096","1362762127","BE" +"1362762128","1362762135","NL" +"1362762136","1362762143","BE" +"1362762144","1362762151","NL" +"1362762152","1362762175","BE" +"1362762176","1362762183","NL" +"1362762184","1362762199","BE" +"1362762200","1362762207","NL" +"1362762208","1362762215","BE" +"1362762216","1362762231","NL" +"1362762232","1362762255","BE" +"1362762256","1362762263","NL" +"1362762264","1362762271","BE" +"1362762272","1362762279","NL" +"1362762280","1362762287","BE" +"1362762288","1362762335","NL" +"1362762336","1362762343","BE" +"1362762344","1362762351","NL" +"1362762352","1362762367","BE" +"1362762368","1362762423","NL" +"1362762424","1362762439","BE" +"1362762440","1362762447","NL" +"1362762448","1362762455","BE" +"1362762456","1362762495","NL" +"1362762496","1362762527","BE" +"1362762528","1362762535","NL" +"1362762536","1362762567","BE" +"1362762568","1362762583","NL" +"1362762584","1362762599","BE" +"1362762600","1362762647","NL" +"1362762648","1362762655","BE" +"1362762656","1362762719","NL" +"1362762720","1362762727","BE" +"1362762728","1362762791","NL" +"1362762792","1362762807","BE" +"1362762808","1362762863","NL" +"1362762864","1362762879","BE" +"1362762880","1362762903","NL" +"1362762904","1362762911","BE" +"1362762912","1362762951","NL" +"1362762952","1362762983","BE" +"1362762984","1362762991","NL" +"1362762992","1362763031","BE" +"1362763032","1362763047","NL" +"1362763048","1362763055","BE" +"1362763056","1362763079","NL" +"1362763080","1362763087","BE" +"1362763088","1362763103","NL" +"1362763104","1362763119","BE" +"1362763120","1362763143","NL" +"1362763144","1362763151","BE" +"1362763152","1362763159","NL" +"1362763160","1362763175","BE" +"1362763176","1362763183","NL" +"1362763184","1362763191","BE" +"1362763192","1362763223","NL" +"1362763224","1362763231","BE" +"1362763232","1362763287","NL" +"1362763288","1362763295","BE" +"1362763296","1362763303","NL" +"1362763304","1362763311","BE" +"1362763312","1362763335","NL" +"1362763336","1362763343","BE" +"1362763344","1362763367","NL" +"1362763368","1362763375","BE" +"1362763376","1362763383","NL" +"1362763384","1362763415","BE" +"1362763416","1362763423","NL" +"1362763424","1362763439","BE" +"1362763440","1362763455","NL" +"1362763456","1362763463","BE" +"1362763464","1362763471","NL" +"1362763472","1362763479","BE" +"1362763480","1362763503","NL" +"1362763504","1362763519","BE" +"1362763520","1362763535","NL" +"1362763536","1362763543","BE" +"1362763544","1362763599","NL" +"1362763600","1362763615","BE" +"1362763616","1362763623","NL" +"1362763624","1362763631","BE" +"1362763632","1362763679","NL" +"1362763680","1362763687","BE" +"1362763688","1362763695","NL" +"1362763696","1362763703","BE" +"1362763704","1362763735","NL" +"1362763736","1362763751","BE" +"1362763752","1362763767","NL" +"1362763768","1362763783","BE" +"1362763784","1362763799","NL" +"1362763800","1362763815","BE" +"1362763816","1362763903","NL" +"1362763904","1362763927","BE" +"1362763928","1362763967","NL" +"1362763968","1362763975","BE" +"1362763976","1362763991","NL" +"1362763992","1362763999","BE" +"1362764000","1362764023","NL" +"1362764024","1362764031","BE" +"1362764032","1362764039","NL" +"1362764040","1362764047","BE" +"1362764048","1362764063","NL" +"1362764064","1362764087","BE" +"1362764088","1362764103","NL" +"1362764104","1362764111","BE" +"1362764112","1362764135","NL" +"1362764136","1362764143","BE" +"1362764144","1362764159","NL" +"1362764160","1362764167","BE" +"1362764168","1362764175","NL" +"1362764176","1362764183","BE" +"1362764184","1362764199","NL" +"1362764200","1362764207","BE" +"1362764208","1362764255","NL" +"1362764256","1362764263","BE" +"1362764264","1362764311","NL" +"1362764312","1362764327","BE" +"1362764328","1362764335","NL" +"1362764336","1362764351","BE" +"1362764352","1362764367","NL" +"1362764368","1362764375","BE" +"1362764376","1362764383","NL" +"1362764384","1362764391","BE" +"1362764392","1362764407","NL" +"1362764408","1362764415","BE" +"1362764416","1362764431","NL" +"1362764432","1362764439","BE" +"1362764440","1362764495","NL" +"1362764496","1362764527","BE" +"1362764528","1362764535","NL" +"1362764536","1362764543","BE" +"1362764544","1362764551","NL" +"1362764552","1362764559","BE" +"1362764560","1362764567","NL" +"1362764568","1362764575","BE" +"1362764576","1362764607","NL" +"1362764608","1362764615","BE" +"1362764616","1362764623","NL" +"1362764624","1362764639","BE" +"1362764640","1362764655","NL" +"1362764656","1362764679","BE" +"1362764680","1362764695","NL" +"1362764696","1362764703","BE" +"1362764704","1362764711","NL" +"1362764712","1362764735","BE" +"1362764736","1362764743","NL" +"1362764744","1362764751","BE" +"1362764752","1362764759","NL" +"1362764760","1362764775","BE" +"1362764776","1362764791","NL" +"1362764792","1362764807","BE" +"1362764808","1362764823","NL" +"1362764824","1362764831","BE" +"1362764832","1362764847","NL" +"1362764848","1362764855","BE" +"1362764856","1362764871","NL" +"1362764872","1362764887","BE" +"1362764888","1362764895","NL" +"1362764896","1362764911","BE" +"1362764912","1362764927","NL" +"1362764928","1362764935","BE" +"1362764936","1362764975","NL" +"1362764976","1362764991","BE" +"1362764992","1362764999","NL" +"1362765000","1362765015","BE" +"1362765016","1362765023","NL" +"1362765024","1362765047","BE" +"1362765048","1362765063","NL" +"1362765064","1362765071","BE" +"1362765072","1362765079","NL" +"1362765080","1362765087","BE" +"1362765088","1362765095","NL" +"1362765096","1362765127","BE" +"1362765128","1362765135","NL" +"1362765136","1362765151","BE" +"1362765152","1362765175","NL" +"1362765176","1362765191","BE" +"1362765192","1362765199","NL" +"1362765200","1362765215","BE" +"1362765216","1362765239","NL" +"1362765240","1362765247","BE" +"1362765248","1362765255","NL" +"1362765256","1362765263","BE" +"1362765264","1362765311","NL" +"1362765312","1362765319","BE" +"1362765320","1362765327","NL" +"1362765328","1362765343","BE" +"1362765344","1362765375","NL" +"1362765376","1362765407","BE" +"1362765408","1362765415","NL" +"1362765416","1362765431","BE" +"1362765432","1362765447","NL" +"1362765448","1362765455","BE" +"1362765456","1362765463","NL" +"1362765464","1362765471","BE" +"1362765472","1362765495","NL" +"1362765496","1362765511","BE" +"1362765512","1362765519","NL" +"1362765520","1362765535","BE" +"1362765536","1362765551","NL" +"1362765552","1362765559","BE" +"1362765560","1362765575","NL" +"1362765576","1362765599","BE" +"1362765600","1362765607","NL" +"1362765608","1362765615","BE" +"1362765616","1362765639","NL" +"1362765640","1362765647","BE" +"1362765648","1362765655","NL" +"1362765656","1362765663","BE" +"1362765664","1362765703","NL" +"1362765704","1362765711","BE" +"1362765712","1362765727","NL" +"1362765728","1362765735","BE" +"1362765736","1362765759","NL" +"1362765760","1362765767","BE" +"1362765768","1362765783","NL" +"1362765784","1362765807","BE" +"1362765808","1362765823","NL" +"1362765824","1362765847","BE" +"1362765848","1362765919","NL" +"1362765920","1362765943","BE" +"1362765944","1362765959","NL" +"1362765960","1362765967","BE" +"1362765968","1362765991","NL" +"1362765992","1362766015","BE" +"1362766016","1362766031","NL" +"1362766032","1362766071","BE" +"1362766072","1362766095","NL" +"1362766096","1362766119","BE" +"1362766120","1362766127","NL" +"1362766128","1362766143","BE" +"1362766144","1362766151","NL" +"1362766152","1362766159","BE" +"1362766160","1362766175","NL" +"1362766176","1362766183","BE" +"1362766184","1362766191","NL" +"1362766192","1362766207","BE" +"1362766208","1362766215","NL" +"1362766216","1362766231","BE" +"1362766232","1362766247","NL" +"1362766248","1362766255","BE" +"1362766256","1362766279","NL" +"1362766280","1362766295","BE" +"1362766296","1362766319","NL" +"1362766320","1362766335","BE" +"1362766336","1362766351","NL" +"1362766352","1362766359","BE" +"1362766360","1362766375","NL" +"1362766376","1362766383","BE" +"1362766384","1362766407","NL" +"1362766408","1362766447","BE" +"1362766448","1362766479","NL" +"1362766480","1362766487","BE" +"1362766488","1362766503","NL" +"1362766504","1362766511","BE" +"1362766512","1362766527","NL" +"1362766528","1362766535","BE" +"1362766536","1362766551","NL" +"1362766552","1362766591","BE" +"1362766592","1362766599","NL" +"1362766600","1362766615","BE" +"1362766616","1362766623","NL" +"1362766624","1362766639","BE" +"1362766640","1362766647","NL" +"1362766648","1362766663","BE" +"1362766664","1362766671","NL" +"1362766672","1362766687","BE" +"1362766688","1362766703","NL" +"1362766704","1362766711","BE" +"1362766712","1362766727","NL" +"1362766728","1362766751","BE" +"1362766752","1362766759","NL" +"1362766760","1362766767","BE" +"1362766768","1362766831","NL" +"1362766832","1362766847","BE" +"1362766848","1362766863","NL" +"1362766864","1362766871","BE" +"1362766872","1362766879","NL" +"1362766880","1362766887","BE" +"1362766888","1362766895","NL" +"1362766896","1362766903","BE" +"1362766904","1362766911","NL" +"1362766912","1362766919","BE" +"1362766920","1362766927","NL" +"1362766928","1362766935","BE" +"1362766936","1362766943","NL" +"1362766944","1362766959","BE" +"1362766960","1362766967","NL" +"1362766968","1362766983","BE" +"1362766984","1362766999","NL" +"1362767000","1362767031","BE" +"1362767032","1362767039","NL" +"1362767040","1362767063","BE" +"1362767064","1362767079","NL" +"1362767080","1362767087","BE" +"1362767088","1362767095","NL" +"1362767096","1362767103","BE" +"1362767104","1362767111","NL" +"1362767112","1362767127","BE" +"1362767128","1362767135","NL" +"1362767136","1362767143","BE" +"1362767144","1362767199","NL" +"1362767200","1362767207","BE" +"1362767208","1362767223","NL" +"1362767224","1362767231","BE" +"1362767232","1362767239","NL" +"1362767240","1362767255","BE" +"1362767256","1362767303","NL" +"1362767304","1362767319","BE" +"1362767320","1362767327","NL" +"1362767328","1362767335","BE" +"1362767336","1362767343","NL" +"1362767344","1362767367","BE" +"1362767368","1362767375","NL" +"1362767376","1362767383","BE" +"1362767384","1362767407","NL" +"1362767408","1362767423","BE" +"1362767424","1362767447","NL" +"1362767448","1362767463","BE" +"1362767464","1362767479","NL" +"1362767480","1362767495","BE" +"1362767496","1362767527","NL" +"1362767528","1362767535","BE" +"1362767536","1362767543","NL" +"1362767544","1362767551","BE" +"1362767552","1362767559","NL" +"1362767560","1362767575","BE" +"1362767576","1362767607","NL" +"1362767608","1362767639","BE" +"1362767640","1362767647","NL" +"1362767648","1362767663","BE" +"1362767664","1362767671","NL" +"1362767672","1362767679","BE" +"1362767680","1362767695","NL" +"1362767696","1362767711","BE" +"1362767712","1362767719","NL" +"1362767720","1362767759","BE" +"1362767760","1362767767","NL" +"1362767768","1362767775","BE" +"1362767776","1362767783","NL" +"1362767784","1362767807","BE" +"1362767808","1362767815","NL" +"1362767816","1362767839","BE" +"1362767840","1362767863","NL" +"1362767864","1362767871","BE" +"1362767872","1362817031","NL" +"1362817032","1362817039","BE" +"1362817040","1362817047","NL" +"1362817048","1362817063","BE" +"1362817064","1362817071","NL" +"1362817072","1362817087","BE" +"1362817088","1362817103","NL" +"1362817104","1362817119","BE" +"1362817120","1362817151","NL" +"1362817152","1362817215","BE" +"1362817216","1362817271","NL" +"1362817272","1362817279","BE" +"1362817280","1362817311","NL" +"1362817312","1362817343","BE" +"1362817344","1362817359","NL" +"1362817360","1362817367","BE" +"1362817368","1362817563","NL" +"1362817564","1362817583","BE" +"1362817584","1362817655","NL" +"1362817656","1362817663","BE" +"1362817664","1362817743","NL" +"1362817744","1362818091","BE" +"1362818092","1362818092","NL" +"1362818093","1362820095","BE" +"1362820096","1362837503","NL" +"1362837504","1362845695","BE" +"1362845696","1362870271","NL" +"1362870272","1362872319","BE" +"1362872320","1362872335","NL" +"1362872336","1362872343","BE" +"1362872344","1362872351","NL" +"1362872352","1362873855","BE" +"1362873856","1362873859","NL" +"1362873860","1362874367","BE" +"1362874368","1362874375","NL" +"1362874376","1362875903","BE" +"1362875904","1362875907","NL" +"1362875908","1362876423","BE" +"1362876424","1362876431","NL" +"1362876432","1362876439","BE" +"1362876440","1362876463","NL" +"1362876464","1362876471","BE" +"1362876472","1362876535","NL" +"1362876536","1362876543","BE" +"1362876544","1362876583","NL" +"1362876584","1362876607","BE" +"1362876608","1362876639","NL" +"1362876640","1362877963","BE" +"1362877964","1362877979","NL" +"1362877980","1362877983","BE" +"1362877984","1362877999","NL" +"1362878000","1362878003","BE" +"1362878004","1362878015","NL" +"1362878016","1362878463","BE" +"1362878464","1362878471","NL" +"1362878472","1362879999","BE" +"1362880000","1362880003","NL" +"1362880004","1362880527","BE" +"1362880528","1362880727","NL" +"1362880728","1362880735","BE" +"1362880736","1362880743","NL" +"1362880744","1362880751","BE" +"1362880752","1362880783","NL" +"1362880784","1362880799","BE" +"1362880800","1362880847","NL" +"1362880848","1362880855","BE" +"1362880856","1362880895","NL" +"1362880896","1362880959","BE" +"1362880960","1362880967","NL" +"1362880968","1362880975","BE" +"1362880976","1362880999","NL" +"1362881000","1362881007","BE" +"1362881008","1362881023","NL" +"1362881024","1362881055","BE" +"1362881056","1362881087","NL" +"1362881088","1362881103","BE" +"1362881104","1362881111","NL" +"1362881112","1362882047","BE" +"1362882048","1362882051","NL" +"1362882052","1362882055","BE" +"1362882056","1362882067","NL" +"1362882068","1362882071","BE" +"1362882072","1362882143","NL" +"1362882144","1362882155","BE" +"1362882156","1362882207","NL" +"1362882208","1362882211","BE" +"1362882212","1362882219","NL" +"1362882220","1362882223","BE" +"1362882224","1362882231","NL" +"1362882232","1362884095","BE" +"1362884096","1362884099","NL" +"1362884100","1362885119","BE" +"1362885120","1362886399","NL" +"1362886400","1362886400","BE" +"1362886401","1362886409","NL" +"1362886410","1362886413","BE" +"1362886414","1362886416","NL" +"1362886417","1362886419","BE" +"1362886420","1362886421","NL" +"1362886422","1362886422","BE" +"1362886423","1362886423","NL" +"1362886424","1362886655","BE" +"1362886656","1363017727","ES" +"1363017728","1363148799","CH" +"1363148800","1363410943","FR" +"1363410944","1363673087","NL" +"1363673088","1363935231","IT" +"1363935232","1364197375","GB" +"1364197376","1364204034","FR" +"1364204035","1364204035","GB" +"1364204036","1364262911","FR" +"1364262912","1364328447","IT" +"1364328448","1364459519","BE" +"1364459520","1364525055","PT" +"1364525056","1364525311","NL" +"1364525312","1364525567","A2" +"1364525568","1364526335","NL" +"1364526336","1364526591","US" +"1364526592","1364528639","GB" +"1364528640","1364528895","UA" +"1364528896","1364530175","GB" +"1364530176","1364531455","NL" +"1364531456","1364531711","IT" +"1364531712","1364540671","NL" +"1364540672","1364540927","US" +"1364540928","1364577023","NL" +"1364577024","1364577279","GB" +"1364577280","1364577791","NL" +"1364577792","1364578303","GB" +"1364578304","1364579839","NL" +"1364579840","1364580095","US" +"1364580096","1364581375","NL" +"1364581376","1364582399","LY" +"1364582400","1364582415","NL" +"1364582416","1364582431","LB" +"1364582432","1364585727","NL" +"1364585728","1364585983","CA" +"1364585984","1364586240","LB" +"1364586241","1364586495","NL" +"1364586496","1364586752","LB" +"1364586753","1364587263","NL" +"1364587264","1364587519","US" +"1364587520","1364588977","NL" +"1364588978","1364588978","US" +"1364588979","1364589567","NL" +"1364589568","1364589823","A2" +"1364589824","1364590335","NL" +"1364590336","1364590591","US" +"1364590592","1364721663","GB" +"1364721664","1364725759","SE" +"1364725760","1364733951","DE" +"1364733952","1364738047","IT" +"1364738048","1364742143","NO" +"1364742144","1364746239","RU" +"1364746240","1364749311","FR" +"1364749312","1364749374","BE" +"1364749375","1364749455","FR" +"1364749456","1364749463","BE" +"1364749464","1364749471","FR" +"1364749472","1364749583","BE" +"1364749584","1364749599","FR" +"1364749600","1364749696","BE" +"1364749697","1364749823","FR" +"1364749824","1364749983","BE" +"1364749984","1364749991","FR" +"1364749992","1364750079","BE" +"1364750080","1364750335","FR" +"1364750336","1364754431","RU" +"1364754432","1364758527","SK" +"1364758528","1364762623","KZ" +"1364762624","1364766719","GB" +"1364766720","1364770815","CH" +"1364770816","1364774911","KG" +"1364774912","1364779007","RU" +"1364779008","1364787199","IT" +"1364787200","1364795391","RO" +"1364795392","1364799487","ES" +"1364799488","1364803583","SK" +"1364803584","1364809727","RU" +"1364809728","1364815871","DE" +"1364815872","1364819967","RU" +"1364819968","1364823295","GB" +"1364823296","1364823311","AE" +"1364823312","1364824063","GB" +"1364824064","1364828159","SE" +"1364828160","1364829439","GB" +"1364829440","1364829487","FR" +"1364829488","1364829503","GB" +"1364829504","1364829527","FR" +"1364829528","1364832255","GB" +"1364832256","1364836351","RU" +"1364836352","1364840447","DE" +"1364840448","1364844543","AM" +"1364844544","1364852111","DE" +"1364852112","1364852127","GB" +"1364852128","1364852479","DE" +"1364852480","1364852735","GB" +"1364852736","1364856831","RU" +"1364856832","1364860927","IQ" +"1364860928","1364865023","DE" +"1364865024","1364869119","PT" +"1364869120","1364873215","FI" +"1364873216","1364877311","GB" +"1364877312","1364881407","ES" +"1364881408","1364885503","EE" +"1364885504","1364889599","GB" +"1364889600","1364893695","IR" +"1364893696","1364897791","CZ" +"1364897792","1364901887","SI" +"1364901888","1364905983","DE" +"1364905984","1364910079","RU" +"1364910080","1364914175","UA" +"1364914176","1364918271","CZ" +"1364918272","1364922367","SE" +"1364922368","1364926463","TR" +"1364926464","1364934655","RU" +"1364934656","1364938751","FR" +"1364938752","1364942847","CZ" +"1364942848","1364946943","GB" +"1364946944","1364947167","TR" +"1364947168","1364947199","US" +"1364947200","1364948479","GB" +"1364948480","1364949247","TR" +"1364949248","1364949503","CY" +"1364949504","1364949759","TR" +"1364949760","1364950015","CY" +"1364950016","1364950527","TR" +"1364950528","1364950783","CY" +"1364950784","1364950847","TR" +"1364950848","1364950911","GB" +"1364950912","1364951039","TR" +"1364951040","1364959231","IR" +"1364959232","1364963327","DE" +"1364963328","1364967423","RU" +"1364967424","1364969983","GB" +"1364969984","1364970239","FR" +"1364970240","1364970495","US" +"1364970496","1364971519","GB" +"1364971520","1364975615","CZ" +"1364975616","1364979711","BJ" +"1364979712","1364982783","GB" +"1364982784","1364983295","CH" +"1364983296","1364983551","US" +"1364983552","1364983807","GB" +"1364983808","1364991999","DE" +"1364992000","1364996095","IT" +"1364996096","1365000191","GR" +"1365000192","1365002751","SE" +"1365002752","1365003263","GB" +"1365003264","1365003903","SE" +"1365003904","1365004035","GB" +"1365004036","1365004039","SE" +"1365004040","1365004047","GB" +"1365004048","1365004063","SE" +"1365004064","1365004287","GB" +"1365004288","1365008383","FR" +"1365008384","1365012479","CH" +"1365012480","1365012735","FR" +"1365012736","1365013503","US" +"1365013504","1365013631","FR" +"1365013632","1365015551","US" +"1365015552","1365015839","FR" +"1365015840","1365015903","US" +"1365015904","1365015919","GB" +"1365015920","1365015927","DE" +"1365015928","1365015935","ES" +"1365015936","1365016047","US" +"1365016048","1365016063","CN" +"1365016064","1365016079","FR" +"1365016080","1365016095","US" +"1365016096","1365016111","FR" +"1365016112","1365016575","US" +"1365016576","1365020671","ES" +"1365020672","1365024767","CZ" +"1365024768","1365027839","DE" +"1365027840","1365027871","US" +"1365027872","1365028863","DE" +"1365028864","1365032959","NL" +"1365032960","1365041151","PT" +"1365041152","1365041407","IQ" +"1365041408","1365041663","LU" +"1365041664","1365041695","FR" +"1365041696","1365041727","GB" +"1365041728","1365042047","LU" +"1365042048","1365042055","GB" +"1365042056","1365042175","LU" +"1365042176","1365044223","FR" +"1365044224","1365044287","BE" +"1365044288","1365044479","FR" +"1365044480","1365044607","LU" +"1365044608","1365044639","BE" +"1365044640","1365044655","LU" +"1365044656","1365044719","FR" +"1365044720","1365044815","LU" +"1365044816","1365044831","BE" +"1365044832","1365044895","LU" +"1365044896","1365044911","FR" +"1365044912","1365044959","LU" +"1365044960","1365044975","BE" +"1365044976","1365045215","LU" +"1365045216","1365045247","BE" +"1365045248","1365045535","AT" +"1365045536","1365045543","BA" +"1365045544","1365045551","BG" +"1365045552","1365045559","DE" +"1365045560","1365045567","GB" +"1365045568","1365045575","HR" +"1365045576","1365045583","AT" +"1365045584","1365045591","PL" +"1365045592","1365045599","RO" +"1365045600","1365045607","RU" +"1365045608","1365045615","RS" +"1365045616","1365045623","SI" +"1365045624","1365045631","SK" +"1365045632","1365045639","CZ" +"1365045640","1365045647","UA" +"1365045648","1365045663","HU" +"1365045664","1365047295","AT" +"1365047296","1365047423","SK" +"1365047424","1365047551","AT" +"1365047552","1365047647","SK" +"1365047648","1365047679","AT" +"1365047680","1365047807","SK" +"1365047808","1365047871","AT" +"1365047872","1365047903","SK" +"1365047904","1365047999","AT" +"1365048000","1365048191","SK" +"1365048192","1365048255","AT" +"1365048256","1365048383","SK" +"1365048384","1365048511","AT" +"1365048512","1365048607","SK" +"1365048608","1365048703","AT" +"1365048704","1365048887","SK" +"1365048888","1365048895","AT" +"1365048896","1365048927","SK" +"1365048928","1365049343","AT" +"1365049344","1365054263","FR" +"1365054264","1365054271","US" +"1365054272","1365057535","FR" +"1365057536","1365061631","IT" +"1365061632","1365065727","NL" +"1365065728","1365073919","BA" +"1365073920","1365078015","NO" +"1365078016","1365082111","DE" +"1365082112","1365090303","SE" +"1365090304","1365094399","NO" +"1365094400","1365095087","FR" +"1365095088","1365095095","GB" +"1365095096","1365095575","FR" +"1365095576","1365095583","GB" +"1365095584","1365096703","FR" +"1365096704","1365096711","GB" +"1365096712","1365096735","FR" +"1365096736","1365096767","IT" +"1365096768","1365097215","FR" +"1365097216","1365097471","ES" +"1365097472","1365097727","FR" +"1365097728","1365097983","CH" +"1365097984","1365098495","FR" +"1365098496","1365102591","HU" +"1365102592","1365102911","ES" +"1365102912","1365102919","GB" +"1365102920","1365103383","ES" +"1365103384","1365103391","GB" +"1365103392","1365103479","ES" +"1365103480","1365103487","GB" +"1365103488","1365103519","ES" +"1365103520","1365103551","GB" +"1365103552","1365103679","ES" +"1365103680","1365103743","GB" +"1365103744","1365103775","ES" +"1365103776","1365103791","GB" +"1365103792","1365103871","ES" +"1365103872","1365103936","GB" +"1365103937","1365103966","ES" +"1365103967","1365103967","GB" +"1365103968","1365103983","ES" +"1365103984","1365103991","IL" +"1365103992","1365103992","GB" +"1365103993","1365103998","ES" +"1365103999","1365104000","GB" +"1365104001","1365104062","ES" +"1365104063","1365104064","GB" +"1365104065","1365104126","ES" +"1365104127","1365104127","GB" +"1365104128","1365104199","ES" +"1365104200","1365104207","GB" +"1365104208","1365106687","ES" +"1365106688","1365110783","GB" +"1365110784","1365114879","FR" +"1365114880","1365118975","BA" +"1365118976","1365127167","RU" +"1365127168","1365130271","AT" +"1365130272","1365130303","IT" +"1365130304","1365130495","AT" +"1365130496","1365131007","IT" +"1365131008","1365131263","AT" +"1365131264","1365139455","SE" +"1365139456","1365147647","CH" +"1365147648","1365155839","RU" +"1365155840","1365159935","SE" +"1365159936","1365164031","HU" +"1365164032","1365166497","GB" +"1365166498","1365166498","A1" +"1365166499","1365172223","GB" +"1365172224","1365176319","LV" +"1365176320","1365180415","HU" +"1365180416","1365183231","DE" +"1365183232","1365183295","SC" +"1365183296","1365184511","DE" +"1365184512","1365192703","RU" +"1365192704","1365196799","GB" +"1365196800","1365200895","ES" +"1365200896","1365204991","IQ" +"1365204992","1365209087","CZ" +"1365209088","1365213183","BE" +"1365213184","1365217279","RU" +"1365217280","1365217551","GB" +"1365217552","1365217567","US" +"1365217568","1365217575","PT" +"1365217576","1365217591","GB" +"1365217592","1365217599","EG" +"1365217600","1365217631","GB" +"1365217632","1365217663","US" +"1365217664","1365217671","PH" +"1365217672","1365217687","IL" +"1365217688","1365217695","KW" +"1365217696","1365217703","GB" +"1365217704","1365217711","AU" +"1365217712","1365217791","US" +"1365217792","1365217807","BD" +"1365217808","1365217815","US" +"1365217816","1365217823","DK" +"1365217824","1365217831","GB" +"1365217832","1365217839","TR" +"1365217840","1365217847","GB" +"1365217848","1365217855","BD" +"1365217856","1365217871","GB" +"1365217872","1365217879","BD" +"1365217880","1365217919","US" +"1365217920","1365217927","DK" +"1365217928","1365217951","BD" +"1365217952","1365217975","GB" +"1365217976","1365217983","US" +"1365217984","1365217991","DK" +"1365217992","1365218023","US" +"1365218024","1365218031","DK" +"1365218032","1365218303","US" +"1365218304","1365218311","CA" +"1365218312","1365218319","AR" +"1365218320","1365218327","ZA" +"1365218328","1365218351","US" +"1365218352","1365218367","CY" +"1365218368","1365218375","RO" +"1365218376","1365218383","UA" +"1365218384","1365218407","EG" +"1365218408","1365218415","IN" +"1365218416","1365218431","GB" +"1365218432","1365218439","EG" +"1365218440","1365218447","ZA" +"1365218448","1365218455","CA" +"1365218456","1365218459","GB" +"1365218460","1365218463","US" +"1365218464","1365218471","HK" +"1365218472","1365218479","GB" +"1365218480","1365218511","GR" +"1365218512","1365218519","AU" +"1365218520","1365218527","US" +"1365218528","1365218543","GR" +"1365218544","1365218551","CY" +"1365218552","1365218559","GR" +"1365218560","1365218815","GB" +"1365218816","1365218879","EG" +"1365218880","1365218895","US" +"1365218896","1365218903","GB" +"1365218904","1365218911","MU" +"1365218912","1365218927","US" +"1365218928","1365218943","BR" +"1365218944","1365218951","IN" +"1365218952","1365218959","NL" +"1365218960","1365218975","US" +"1365218976","1365219007","CN" +"1365219008","1365219023","US" +"1365219024","1365219031","DK" +"1365219032","1365219039","CY" +"1365219040","1365219071","GB" +"1365219072","1365219103","TR" +"1365219104","1365219111","SA" +"1365219112","1365219119","GB" +"1365219120","1365219135","US" +"1365219136","1365219143","GB" +"1365219144","1365219159","US" +"1365219160","1365219167","CA" +"1365219168","1365219168","GB" +"1365219169","1365219183","ES" +"1365219184","1365219191","CA" +"1365219192","1365219199","DE" +"1365219200","1365219207","IN" +"1365219208","1365219215","US" +"1365219216","1365219231","GB" +"1365219232","1365219247","CY" +"1365219248","1365219279","GB" +"1365219280","1365219287","BD" +"1365219288","1365219295","US" +"1365219296","1365219311","GB" +"1365219312","1365219327","TR" +"1365219328","1365219391","US" +"1365219392","1365219399","DK" +"1365219400","1365219407","AU" +"1365219408","1365219415","GB" +"1365219416","1365219423","TR" +"1365219424","1365219431","US" +"1365219432","1365219439","RU" +"1365219440","1365219455","US" +"1365219456","1365219463","NL" +"1365219464","1365219471","AU" +"1365219472","1365219479","IL" +"1365219480","1365219511","GB" +"1365219512","1365219519","BD" +"1365219520","1365219583","US" +"1365219584","1365219647","CN" +"1365219648","1365219663","IN" +"1365219664","1365219671","TR" +"1365219672","1365219679","GB" +"1365219680","1365219687","BD" +"1365219688","1365219695","US" +"1365219696","1365219703","DK" +"1365219704","1365219711","UA" +"1365219712","1365219743","TR" +"1365219744","1365219751","US" +"1365219752","1365219759","SG" +"1365219760","1365219775","UA" +"1365219776","1365219783","PY" +"1365219784","1365219791","BA" +"1365219792","1365219799","NO" +"1365219800","1365219807","TR" +"1365219808","1365219811","US" +"1365219812","1365219815","AU" +"1365219816","1365219903","US" +"1365219904","1365219919","ES" +"1365219920","1365219935","IN" +"1365219936","1365219951","CA" +"1365219952","1365219967","DK" +"1365219968","1365219983","ES" +"1365219984","1365219991","IT" +"1365219992","1365220007","EE" +"1365220008","1365220015","ES" +"1365220016","1365220031","US" +"1365220032","1365220127","CN" +"1365220128","1365220143","TR" +"1365220144","1365220151","IL" +"1365220152","1365220159","AR" +"1365220160","1365220223","US" +"1365220224","1365220255","JO" +"1365220256","1365220263","KW" +"1365220264","1365220271","GB" +"1365220272","1365220287","KW" +"1365220288","1365220303","AR" +"1365220304","1365220311","NL" +"1365220312","1365220319","BR" +"1365220320","1365220371","US" +"1365220372","1365220375","GB" +"1365220376","1365220387","US" +"1365220388","1365220391","JO" +"1365220392","1365220399","ZA" +"1365220400","1365220407","GB" +"1365220408","1365220423","US" +"1365220424","1365220431","GB" +"1365220432","1365220435","JO" +"1365220436","1365220439","US" +"1365220440","1365220479","GB" +"1365220480","1365220487","AU" +"1365220488","1365220523","US" +"1365220524","1365220527","GB" +"1365220528","1365220535","IS" +"1365220536","1365220551","GB" +"1365220552","1365220567","IS" +"1365220568","1365220575","IL" +"1365220576","1365220583","CH" +"1365220584","1365220599","TR" +"1365220600","1365220607","GR" +"1365220608","1365220615","TR" +"1365220616","1365220623","US" +"1365220624","1365220631","KW" +"1365220632","1365220639","GR" +"1365220640","1365220663","GB" +"1365220664","1365220679","US" +"1365220680","1365220687","IT" +"1365220688","1365220727","US" +"1365220728","1365220735","JO" +"1365220736","1365220767","US" +"1365220768","1365220769","GR" +"1365220770","1365220770","CY" +"1365220771","1365220775","GR" +"1365220776","1365220783","US" +"1365220784","1365220791","IN" +"1365220792","1365220799","KW" +"1365220800","1365220807","RU" +"1365220808","1365220815","US" +"1365220816","1365220823","KW" +"1365220824","1365220831","GB" +"1365220832","1365220847","IT" +"1365220848","1365220855","AU" +"1365220856","1365220903","US" +"1365220904","1365220911","CA" +"1365220912","1365220919","US" +"1365220920","1365220927","KW" +"1365220928","1365220935","IT" +"1365220936","1365220939","AR" +"1365220940","1365220943","US" +"1365220944","1365220959","GB" +"1365220960","1365220967","US" +"1365220968","1365220975","GB" +"1365220976","1365220979","US" +"1365220980","1365220983","GB" +"1365220984","1365220991","BR" +"1365220992","1365220999","ZA" +"1365221000","1365221023","US" +"1365221024","1365221031","TR" +"1365221032","1365221047","IL" +"1365221048","1365221055","GB" +"1365221056","1365221063","KW" +"1365221064","1365221071","MY" +"1365221072","1365221087","ES" +"1365221088","1365221119","US" +"1365221120","1365221375","GB" +"1365221376","1365225471","GE" +"1365225472","1365229567","UA" +"1365229568","1365233663","PL" +"1365233664","1365237759","RU" +"1365237760","1365241855","UZ" +"1365241856","1365245951","DK" +"1365245952","1366294527","GB" +"1366294528","1366673407","IT" +"1366673408","1366673663","US" +"1366673664","1367343103","IT" +"1367343104","1368440063","GB" +"1368440064","1368440319","US" +"1368440320","1369440255","GB" +"1369440256","1369473023","DE" +"1369473024","1369505791","HU" +"1369538560","1369554943","DK" +"1369554944","1369559039","PL" +"1369559040","1369563135","RU" +"1369563136","1369567231","PL" +"1369567232","1369571327","BG" +"1369571328","1369585663","RU" +"1369585664","1369591807","UA" +"1369591808","1369595903","SK" +"1369595904","1369604095","UA" +"1369604096","1369620479","MD" +"1369620480","1369624575","CZ" +"1369624576","1369626623","PL" +"1369626624","1369636863","UA" +"1369636864","1369638911","IR" +"1369638912","1369640959","PL" +"1369640960","1369655295","RU" +"1369655296","1369657343","LV" +"1369657344","1369659391","RU" +"1369659392","1369661439","UA" +"1369661440","1369665535","RU" +"1369665536","1369669631","RO" +"1369669632","1369677823","UA" +"1369677824","1369686015","RU" +"1369686016","1369690111","PL" +"1369690112","1369694207","UA" +"1369694208","1369702399","RU" +"1369702400","1369833471","BE" +"1369833472","1369964543","NO" +"1369964544","1369997311","GB" +"1369997312","1370030079","PL" +"1370030080","1370062847","BE" +"1370062848","1370095615","DE" +"1370095616","1370128383","GB" +"1370128384","1370161151","SE" +"1370161152","1370170367","NL" +"1370170368","1370170399","US" +"1370170400","1370174463","NL" +"1370174464","1370174591","US" +"1370174592","1370174719","A1" +"1370174720","1370175487","US" +"1370175488","1370181887","NL" +"1370181888","1370182015","A1" +"1370182016","1370182143","US" +"1370182144","1370182911","NL" +"1370182912","1370183167","A1" +"1370183168","1370185983","NL" +"1370185984","1370186495","A1" +"1370186496","1370187775","NL" +"1370187776","1370188031","GR" +"1370188032","1370188799","NL" +"1370188800","1370189055","US" +"1370189056","1370189311","NL" +"1370189312","1370189567","A1" +"1370189568","1370193919","NL" +"1370193920","1370226687","GB" +"1370226688","1370259455","ES" +"1370259456","1370292223","SE" +"1370292224","1370299903","NL" +"1370299904","1370300159","US" +"1370300160","1370324991","NL" +"1370324992","1370357759","DE" +"1370357760","1370390527","IT" +"1370390528","1370423295","GB" +"1370423296","1370439679","NO" +"1370439680","1370456063","NL" +"1370456064","1370488831","FI" +"1370488832","1370505855","RU" +"1370505856","1370505871","CY" +"1370505872","1370508895","RU" +"1370508896","1370508911","CY" +"1370508912","1370555887","RU" +"1370555888","1370555903","CY" +"1370555904","1370563967","RU" +"1370563968","1370564031","US" +"1370564032","1370619903","RU" +"1370619904","1370750975","GB" +"1370750976","1370767359","RO" +"1370767360","1370771455","MD" +"1370771456","1370772479","RO" +"1370772480","1370772991","MD" +"1370772992","1370882047","RO" +"1370882048","1371013119","HU" +"1371013120","1371078655","ES" +"1371078656","1371144191","FR" +"1371144192","1371201535","GR" +"1371201536","1371205631","PL" +"1371205632","1371209727","SE" +"1371209728","1371251343","GB" +"1371251344","1371251359","US" +"1371251360","1371275263","GB" +"1371275264","1371340799","BE" +"1371340800","1371374740","AT" +"1371374741","1371374741","SK" +"1371374742","1371406335","AT" +"1371406336","1371471871","PL" +"1371471872","1371537407","NO" +"1371537408","1371602943","MA" +"1371602944","1371668479","PT" +"1371668480","1371734015","FR" +"1371734016","1371799551","RU" +"1371799552","1371865087","RO" +"1371865088","1371930623","FI" +"1371930624","1371996159","LV" +"1371996160","1371996415","NG" +"1371996416","1371996671","A2" +"1371996672","1371996927","GA" +"1371996928","1371997183","A2" +"1371997184","1371997439","KE" +"1371997440","1371998207","NG" +"1371998208","1371998463","CD" +"1371998464","1371998719","NG" +"1371998720","1372000255","A2" +"1372000256","1372004351","UG" +"1372004352","1372006399","A2" +"1372006400","1372006407","NG" +"1372006408","1372006426","A2" +"1372006427","1372006427","TZ" +"1372006428","1372006463","A2" +"1372006464","1372006495","NG" +"1372006496","1372007039","A2" +"1372007040","1372007455","NG" +"1372007456","1372008095","A2" +"1372008096","1372008127","NG" +"1372008128","1372008159","A2" +"1372008160","1372008191","NG" +"1372008192","1372008927","A2" +"1372008928","1372008959","MW" +"1372008960","1372010239","A2" +"1372010240","1372010272","NG" +"1372010273","1372010967","A2" +"1372010968","1372011007","TZ" +"1372011008","1372011775","A2" +"1372011776","1372012031","ZM" +"1372012032","1372012543","A2" +"1372012544","1372014591","ZM" +"1372014592","1372015615","A2" +"1372015616","1372015871","NG" +"1372015872","1372016127","A2" +"1372016128","1372016383","GH" +"1372016384","1372019199","A2" +"1372019200","1372019455","GA" +"1372019456","1372020735","A2" +"1372020736","1372022783","ZM" +"1372022784","1372024831","A2" +"1372024832","1372025087","ZM" +"1372025088","1372025631","A2" +"1372025632","1372025663","ZM" +"1372025664","1372025695","KE" +"1372025696","1372025727","TZ" +"1372025728","1372025855","A2" +"1372025856","1372026367","IL" +"1372026368","1372026879","KE" +"1372026880","1372027903","IL" +"1372027904","1372029439","A2" +"1372029440","1372029695","NG" +"1372029696","1372029951","NE" +"1372029952","1372031999","A2" +"1372032000","1372032255","CM" +"1372032256","1372041343","A2" +"1372041344","1372041471","NG" +"1372041472","1372043519","A2" +"1372043520","1372043775","NG" +"1372043776","1372044287","A2" +"1372044288","1372044543","NG" +"1372044544","1372044799","A2" +"1372044800","1372044863","CM" +"1372044864","1372044927","NG" +"1372044928","1372045055","A2" +"1372045056","1372045087","CM" +"1372045088","1372045119","A2" +"1372045120","1372045151","NG" +"1372045152","1372045567","A2" +"1372045568","1372045823","ZM" +"1372045824","1372045887","NG" +"1372045888","1372046559","A2" +"1372046560","1372046591","NG" +"1372046592","1372047231","A2" +"1372047232","1372047295","NG" +"1372047296","1372047359","A2" +"1372047360","1372047615","CM" +"1372047616","1372049919","A2" +"1372049920","1372050175","NG" +"1372050176","1372060159","A2" +"1372060160","1372061695","IL" +"1372061696","1372069887","RU" +"1372069888","1372073983","FR" +"1372073984","1372078079","CZ" +"1372078080","1372082175","GB" +"1372082176","1372086271","RU" +"1372086272","1372090367","DE" +"1372090368","1372094463","RU" +"1372094464","1372098559","IT" +"1372098560","1372102655","RU" +"1372102656","1372106751","SE" +"1372106752","1372110591","FR" +"1372110592","1372110623","GB" +"1372110624","1372110655","DE" +"1372110656","1372110687","IT" +"1372110688","1372110719","ES" +"1372110720","1372110751","FR" +"1372110752","1372110783","NL" +"1372110784","1372110847","FR" +"1372110848","1372114943","DE" +"1372114944","1372119039","RU" +"1372119040","1372123135","IT" +"1372123136","1372127231","RU" +"1372127232","1372131327","IT" +"1372131328","1372135423","RU" +"1372135424","1372138255","DE" +"1372138256","1372138263","GB" +"1372138264","1372139519","DE" +"1372139520","1372143615","CZ" +"1372143616","1372147711","RU" +"1372147712","1372151807","BE" +"1372151808","1372152823","DE" +"1372152824","1372152831","GB" +"1372152832","1372156063","DE" +"1372156064","1372156095","GB" +"1372156096","1372156719","DE" +"1372156720","1372156735","GB" +"1372156736","1372159999","DE" +"1372160000","1372164095","GB" +"1372164096","1372166863","DE" +"1372166864","1372166879","US" +"1372166880","1372168191","DE" +"1372168192","1372172287","GB" +"1372172288","1372176383","FR" +"1372176384","1372180479","CH" +"1372180480","1372184071","SE" +"1372184072","1372184079","ES" +"1372184080","1372184575","SE" +"1372184576","1372188671","DE" +"1372188672","1372192767","RU" +"1372192768","1372323839","ES" +"1372323840","1372585983","NL" +"1372585984","1372586239","A2" +"1372586240","1372589567","IT" +"1372589568","1372589823","A2" +"1372589824","1372618751","IT" +"1372618752","1372651519","GB" +"1372651520","1372684287","FI" +"1372684288","1372685631","DE" +"1372685632","1372685655","EU" +"1372685656","1372685663","DE" +"1372685664","1372685695","EU" +"1372685696","1372685823","DE" +"1372685824","1372685887","EU" +"1372685888","1372686335","DE" +"1372686336","1372687359","EU" +"1372687360","1372687487","DE" +"1372687488","1372687519","EU" +"1372687520","1372687615","DE" +"1372687616","1372687679","EU" +"1372687680","1372687711","DE" +"1372687712","1372687719","EU" +"1372687720","1372687727","DE" +"1372687728","1372687743","EU" +"1372687744","1372688199","DE" +"1372688200","1372688223","EU" +"1372688224","1372688351","DE" +"1372688352","1372688383","EU" +"1372688384","1372689695","DE" +"1372689696","1372689791","EU" +"1372689792","1372689839","DE" +"1372689840","1372689855","EU" +"1372689856","1372691455","DE" +"1372691456","1372691711","US" +"1372691712","1372691967","EU" +"1372691968","1372694271","DE" +"1372694272","1372694303","EU" +"1372694304","1372694367","DE" +"1372694368","1372694383","EU" +"1372694384","1372694399","DE" +"1372694400","1372694559","EU" +"1372694560","1372694591","DE" +"1372694592","1372694623","EU" +"1372694624","1372694719","DE" +"1372694720","1372694783","EU" +"1372694784","1372694815","DE" +"1372694816","1372694831","EU" +"1372694832","1372695039","DE" +"1372695040","1372695295","EU" +"1372695296","1372695423","DE" +"1372695424","1372695551","EU" +"1372695552","1372695807","CZ" +"1372695808","1372696007","DK" +"1372696008","1372696063","EU" +"1372696064","1372697215","DE" +"1372697216","1372697231","EU" +"1372697232","1372697239","DE" +"1372697240","1372697247","EU" +"1372697248","1372697279","DE" +"1372697280","1372697343","EU" +"1372697344","1372698471","DE" +"1372698472","1372698559","EU" +"1372698560","1372700159","DE" +"1372700160","1372700415","SE" +"1372700416","1372700671","EU" +"1372700672","1372702463","DE" +"1372702464","1372702719","EU" +"1372702720","1372702735","DE" +"1372702736","1372702751","EU" +"1372702752","1372702991","DE" +"1372702992","1372703271","EU" +"1372703272","1372703295","DE" +"1372703296","1372703327","EU" +"1372703328","1372703391","DE" +"1372703392","1372703423","EU" +"1372703424","1372703487","DE" +"1372703488","1372704767","EU" +"1372704768","1372717055","DE" +"1372717056","1372749823","PL" +"1372749824","1372782591","DE" +"1372782592","1372784639","RU" +"1372784640","1372784895","EU" +"1372784896","1372815359","RU" +"1372815360","1372848127","KZ" +"1372848128","1373110271","TR" +"1373110272","1373175807","SE" +"1373175808","1373241343","AT" +"1373241344","1373306879","IL" +"1373306880","1373372415","PL" +"1373372416","1373437951","FR" +"1373437952","1373503487","CH" +"1373503488","1373519871","RU" +"1373519872","1373520895","GB" +"1373520896","1373569023","RU" +"1373569024","1373634559","AT" +"1373634560","1374683135","SE" +"1374683136","1375080959","BE" +"1375080960","1375081215","EU" +"1375081216","1375207423","BE" +"1375207424","1375268095","FR" +"1375268096","1375268351","RE" +"1375268352","1375731711","FR" +"1375731712","1375798335","GB" +"1375798336","1375798351","IE" +"1375798352","1375852543","GB" +"1375852544","1375852799","IE" +"1375852800","1378877439","GB" +"1378877440","1379926015","IT" +"1379926016","1380188159","FR" +"1380188160","1380450303","GB" +"1380450304","1380712447","NL" +"1380712448","1380974591","RO" +"1380974592","1381036471","IL" +"1381036472","1381036479","A2" +"1381036480","1381105663","IL" +"1381105664","1381236735","DE" +"1381236736","1381347327","IT" +"1381347328","1381347583","A2" +"1381347584","1381367807","IT" +"1381367808","1381498879","ES" +"1381498880","1381761023","IT" +"1381761024","1382023167","NL" +"1382023168","1382024959","SE" +"1382024960","1382025215","DK" +"1382025216","1382033583","SE" +"1382033584","1382033599","NL" +"1382033600","1382035359","SE" +"1382035360","1382035375","NO" +"1382035376","1382039007","SE" +"1382039008","1382039023","FR" +"1382039024","1382039055","SE" +"1382039056","1382039071","DE" +"1382039072","1382039175","SE" +"1382039176","1382039191","GB" +"1382039192","1382039271","SE" +"1382039272","1382039275","GB" +"1382039276","1382039551","SE" +"1382039552","1382055935","DE" +"1382055936","1382072319","FR" +"1382072320","1382088703","RU" +"1382088704","1382091311","FR" +"1382091312","1382091327","MC" +"1382091328","1382091375","FR" +"1382091376","1382091391","MC" +"1382091392","1382092367","FR" +"1382092368","1382092399","MC" +"1382092400","1382092815","FR" +"1382092816","1382092831","MC" +"1382092832","1382092927","FR" +"1382092928","1382092943","MC" +"1382092944","1382093055","FR" +"1382093056","1382093087","GB" +"1382093088","1382093119","FR" +"1382093120","1382093151","MC" +"1382093152","1382093503","FR" +"1382093504","1382093583","MC" +"1382093584","1382093823","FR" +"1382093824","1382093887","MC" +"1382093888","1382094079","FR" +"1382094080","1382094143","MC" +"1382094144","1382094335","FR" +"1382094336","1382094351","MC" +"1382094352","1382094591","FR" +"1382094592","1382094623","MC" +"1382094624","1382105087","FR" +"1382105088","1382137855","DE" +"1382137856","1382154239","RU" +"1382154240","1382170623","FR" +"1382170624","1382171775","DE" +"1382171776","1382171791","CH" +"1382171792","1382171927","DE" +"1382171928","1382171935","CH" +"1382171936","1382172215","DE" +"1382172216","1382172223","CH" +"1382172224","1382173663","DE" +"1382173664","1382173671","GB" +"1382173672","1382173675","DE" +"1382173676","1382173679","CH" +"1382173680","1382176099","DE" +"1382176100","1382176103","CH" +"1382176104","1382177983","DE" +"1382177984","1382178303","LI" +"1382178304","1382178823","DE" +"1382178824","1382178831","CH" +"1382178832","1382179231","DE" +"1382179232","1382179239","MT" +"1382179240","1382179247","DE" +"1382179248","1382179279","GB" +"1382179280","1382181135","DE" +"1382181136","1382181151","CH" +"1382181152","1382182095","DE" +"1382182096","1382182111","CH" +"1382182112","1382182547","DE" +"1382182548","1382182551","CH" +"1382182552","1382182655","DE" +"1382182656","1382182687","US" +"1382182688","1382182799","DE" +"1382182800","1382182831","GB" +"1382182832","1382182895","DE" +"1382182896","1382182911","GB" +"1382182912","1382183167","LI" +"1382183168","1382183423","CH" +"1382183424","1382183935","LI" +"1382183936","1382185031","DE" +"1382185032","1382185039","SK" +"1382185040","1382187007","DE" +"1382187008","1382191871","ES" +"1382191872","1382192127","VE" +"1382192128","1382203391","ES" +"1382203392","1382205439","GB" +"1382205440","1382205695","EU" +"1382205696","1382205951","DE" +"1382205952","1382207743","EU" +"1382207744","1382207999","DE" +"1382208000","1382208255","EU" +"1382208256","1382208319","DE" +"1382208320","1382209535","EU" +"1382209536","1382209791","DE" +"1382209792","1382211071","EU" +"1382211072","1382211199","DE" +"1382211200","1382211583","EU" +"1382211584","1382211711","FR" +"1382211712","1382212223","EU" +"1382212224","1382212239","FR" +"1382212240","1382212607","EU" +"1382212608","1382212863","FR" +"1382212864","1382213631","EU" +"1382213632","1382215679","GB" +"1382215680","1382216447","NL" +"1382216448","1382217727","GB" +"1382217728","1382217983","NL" +"1382217984","1382219007","GB" +"1382219008","1382219519","NL" +"1382219520","1382219775","GB" +"1382219776","1382219959","SE" +"1382219960","1382219967","FI" +"1382219968","1382222847","SE" +"1382222848","1382222911","FI" +"1382222912","1382223327","SE" +"1382223328","1382223359","FI" +"1382223360","1382223551","SE" +"1382223552","1382223615","NO" +"1382223616","1382224287","SE" +"1382224288","1382224319","NO" +"1382224320","1382226271","SE" +"1382226272","1382226303","NO" +"1382226304","1382227327","SE" +"1382227328","1382227455","NO" +"1382227456","1382227583","SE" +"1382227584","1382227711","DK" +"1382227712","1382229503","SE" +"1382229504","1382229511","NO" +"1382229512","1382232575","SE" +"1382232576","1382232639","NO" +"1382232640","1382233279","SE" +"1382233280","1382233343","NO" +"1382233344","1382233407","SE" +"1382233408","1382233423","NO" +"1382233424","1382252543","SE" +"1382252544","1382268927","CZ" +"1382268928","1382285311","IR" +"1382285312","1382301695","CZ" +"1382301696","1382318079","SE" +"1382318080","1382334463","RU" +"1382334464","1382350847","DE" +"1382350848","1382367231","FR" +"1382367232","1382383615","BG" +"1382383616","1382399999","DZ" +"1382400000","1382416383","NL" +"1382416384","1382432767","PT" +"1382432768","1382449151","CY" +"1382449152","1382465535","IL" +"1382465536","1382481919","PS" +"1382481920","1382498303","AT" +"1382498304","1382514687","BG" +"1382514688","1382531071","DK" +"1382531072","1382547455","FI" +"1382547456","1382809599","IT" +"1382809600","1382967551","GB" +"1382967552","1382967807","A1" +"1382967808","1383025663","GB" +"1383025664","1383025672","DE" +"1383025673","1383025679","GB" +"1383025680","1383025711","DE" +"1383025712","1383025727","GB" +"1383025728","1383025759","DE" +"1383025760","1383045215","GB" +"1383045216","1383045231","IT" +"1383045232","1383071743","GB" +"1383071744","1383073279","RU" +"1383073280","1383073535","KZ" +"1383073536","1383088127","RU" +"1383088128","1383096319","IS" +"1383096320","1383096447","PL" +"1383096448","1383096575","FR" +"1383096576","1383096831","GB" +"1383096832","1383096863","FR" +"1383096864","1383096959","GB" +"1383096960","1383097087","FR" +"1383097088","1383097343","ES" +"1383097344","1383098111","GB" +"1383098112","1383098367","DE" +"1383098368","1383098879","GB" +"1383098880","1383099159","DE" +"1383099160","1383099163","BE" +"1383099164","1383099167","NL" +"1383099168","1383099171","IT" +"1383099172","1383099175","RU" +"1383099176","1383099179","GB" +"1383099180","1383099191","DE" +"1383099192","1383099199","GB" +"1383099200","1383099231","DE" +"1383099232","1383099391","GB" +"1383099392","1383099903","DE" +"1383099904","1383100415","FR" +"1383100416","1383100831","GB" +"1383100832","1383100847","IE" +"1383100848","1383100879","GB" +"1383100880","1383100895","IE" +"1383100896","1383103271","GB" +"1383103272","1383103279","ES" +"1383103280","1383103471","GB" +"1383103472","1383103487","AE" +"1383103488","1383104015","GB" +"1383104016","1383104023","ES" +"1383104024","1383104255","GB" +"1383104256","1383104511","FR" +"1383104512","1383112703","JE" +"1383112704","1383114751","LB" +"1383114752","1383116799","GB" +"1383116800","1383120895","RU" +"1383120896","1383129031","IT" +"1383129032","1383129039","ES" +"1383129040","1383129087","IT" +"1383129088","1383137279","GB" +"1383137280","1383139583","MC" +"1383139584","1383139839","A2" +"1383139840","1383140095","MC" +"1383140096","1383140351","A2" +"1383140352","1383141119","MC" +"1383141120","1383141375","US" +"1383141376","1383145471","MC" +"1383145472","1383153663","CZ" +"1383153664","1383161855","GB" +"1383161856","1383170047","DE" +"1383170048","1383171743","GB" +"1383171744","1383171775","NZ" +"1383171776","1383172559","GB" +"1383172560","1383172567","ZA" +"1383172568","1383186431","GB" +"1383186432","1383194623","IT" +"1383194624","1383202815","GB" +"1383202816","1383211007","RU" +"1383211008","1383219199","CY" +"1383219200","1383219461","AL" +"1383219462","1383219462","US" +"1383219463","1383220223","AL" +"1383220224","1383222447","RS" +"1383222448","1383222455","AL" +"1383222456","1383223695","RS" +"1383223696","1383223703","AL" +"1383223704","1383225759","RS" +"1383225760","1383225771","AL" +"1383225772","1383225807","RS" +"1383225808","1383225808","AL" +"1383225809","1383225819","RS" +"1383225820","1383225827","AL" +"1383225828","1383226091","RS" +"1383226092","1383226095","AL" +"1383226096","1383226271","RS" +"1383226272","1383226623","AL" +"1383226624","1383226751","RS" +"1383226752","1383226815","AL" +"1383226816","1383227391","RS" +"1383227392","1383239295","RU" +"1383239296","1383239423","AR" +"1383239424","1383243775","RU" +"1383243776","1383251967","YE" +"1383251968","1383260159","CZ" +"1383260160","1383268351","RU" +"1383268352","1383273983","IR" +"1383273984","1383276543","KW" +"1383276544","1383284735","KZ" +"1383284736","1383292927","PL" +"1383292928","1383301119","DE" +"1383301120","1383309311","SE" +"1383309312","1383317503","IT" +"1383317504","1383321599","SE" +"1383321600","1383325695","RU" +"1383325696","1383333887","GB" +"1383333888","1383350271","RU" +"1383350272","1383358463","NO" +"1383358464","1383366911","DE" +"1383366912","1383367167","SY" +"1383367168","1383367423","US" +"1383367424","1383367679","KW" +"1383367680","1383368703","GB" +"1383368704","1383368831","DE" +"1383368832","1383368847","GB" +"1383368848","1383368895","KW" +"1383368896","1383368957","DE" +"1383368958","1383368958","US" +"1383368959","1383369087","DE" +"1383369088","1383369119","GB" +"1383369120","1383369231","KW" +"1383369232","1383369247","GB" +"1383369248","1383369535","KW" +"1383369536","1383369567","GB" +"1383369568","1383369599","DE" +"1383369600","1383369727","KW" +"1383369728","1383369760","SA" +"1383369761","1383369761","KW" +"1383369762","1383369768","SA" +"1383369769","1383369769","KW" +"1383369770","1383369983","SA" +"1383369984","1383370751","KW" +"1383370752","1383371775","DE" +"1383371776","1383374591","KW" +"1383374592","1383374723","US" +"1383374724","1383374724","KW" +"1383374725","1383374847","US" +"1383374848","1383383039","ES" +"1383383040","1383391231","CY" +"1383391232","1383399423","FI" +"1383399424","1383402015","LI" +"1383402016","1383402023","CH" +"1383402024","1383407615","LI" +"1383407616","1383415807","NO" +"1383415808","1383423999","RU" +"1383424000","1383432191","SE" +"1383432192","1383440383","CZ" +"1383440384","1383448575","RU" +"1383448576","1383456767","RS" +"1383456768","1383464959","UA" +"1383464960","1383469055","BA" +"1383469056","1383471103","UA" +"1383471104","1383473151","SE" +"1383473152","1383481343","DE" +"1383481344","1383481599","GB" +"1383481600","1383481615","US" +"1383481616","1383481663","GB" +"1383481664","1383481695","US" +"1383481696","1383481703","GB" +"1383481704","1383481711","US" +"1383481712","1383481775","GB" +"1383481776","1383481791","SA" +"1383481792","1383482367","GB" +"1383482368","1383482879","NL" +"1383482880","1383483887","GB" +"1383483888","1383483903","JP" +"1383483904","1383485375","GB" +"1383485376","1383485407","US" +"1383485408","1383497727","GB" +"1383497728","1383499039","RU" +"1383499040","1383499047","UA" +"1383499048","1383502335","RU" +"1383502336","1383502847","CH" +"1383502848","1383503615","RU" +"1383503616","1383503616","CZ" +"1383503617","1383505919","RU" +"1383505920","1383514111","SA" +"1383514112","1383522303","FI" +"1383522304","1383530495","BG" +"1383530496","1383538687","DE" +"1383538688","1383546879","IT" +"1383546880","1383555071","BG" +"1383555072","1383563263","SK" +"1383563264","1383571455","RU" +"1383571456","1383579647","DE" +"1383579648","1383587839","IT" +"1383587840","1383591935","SK" +"1383591936","1383596031","CZ" +"1383596032","1384120319","FR" +"1384120320","1384153087","NG" +"1384153088","1384185855","FI" +"1384185856","1384189183","DE" +"1384189184","1384189439","AT" +"1384189440","1384190463","DE" +"1384190464","1384190719","NL" +"1384190720","1384190975","DE" +"1384190976","1384191231","DK" +"1384191232","1384191999","DE" +"1384192000","1384192191","NL" +"1384192192","1384192255","DE" +"1384192256","1384192511","NL" +"1384192512","1384192575","DE" +"1384192576","1384192639","SE" +"1384192640","1384192767","DE" +"1384192768","1384193023","BG" +"1384193024","1384194191","DE" +"1384194192","1384194207","AT" +"1384194208","1384194559","DE" +"1384194560","1384194815","NL" +"1384194816","1384195711","DE" +"1384195712","1384195743","NL" +"1384195744","1384195751","CH" +"1384195752","1384195775","DE" +"1384195776","1384195839","SE" +"1384195840","1384196095","DE" +"1384196096","1384197119","CZ" +"1384197120","1384202239","DE" +"1384202240","1384218623","GB" +"1384218624","1384251391","EG" +"1384251392","1384267775","FI" +"1384267776","1384284159","CH" +"1384284160","1384316927","ES" +"1384316928","1384349695","EE" +"1384349696","1384382463","HU" +"1384382464","1384415231","HR" +"1384415232","1384480767","GB" +"1384480768","1384513535","FI" +"1384513536","1384546303","NO" +"1384546304","1384579071","NL" +"1384579072","1384611839","DE" +"1384611840","1384644607","LT" +"1384644608","1384660991","GB" +"1384660992","1384677375","CH" +"1384677376","1384693759","SE" +"1384693760","1384710143","NL" +"1384710144","1384726527","RO" +"1384726528","1384742911","BG" +"1384742912","1384759295","RU" +"1384759296","1384775679","SY" +"1384775680","1384792063","RU" +"1384792064","1384792623","FR" +"1384792624","1384792639","BE" +"1384792640","1384793679","FR" +"1384793680","1384793695","BE" +"1384793696","1384793791","FR" +"1384793792","1384793823","BE" +"1384793824","1384794127","FR" +"1384794128","1384794143","CH" +"1384794144","1384794271","FR" +"1384794272","1384794287","CH" +"1384794288","1384795279","FR" +"1384795280","1384795327","BE" +"1384795328","1384799807","FR" +"1384799808","1384799871","CH" +"1384799872","1384808447","FR" +"1384808448","1384808479","BE" +"1384808480","1384808735","EU" +"1384808736","1384808799","BE" +"1384808800","1384808831","FR" +"1384808832","1384808959","FI" +"1384808960","1384808967","BE" +"1384808968","1384808975","EU" +"1384808976","1384808991","DE" +"1384808992","1384809015","BE" +"1384809016","1384809023","GB" +"1384809024","1384809039","FR" +"1384809040","1384809047","BE" +"1384809048","1384809055","EU" +"1384809056","1384809071","BE" +"1384809072","1384809087","FR" +"1384809088","1384809103","BE" +"1384809104","1384809111","EU" +"1384809112","1384809119","GE" +"1384809120","1384809175","BE" +"1384809176","1384809183","EU" +"1384809184","1384809199","BE" +"1384809200","1384809207","EU" +"1384809208","1384809215","BE" +"1384809216","1384809407","BR" +"1384809408","1384809439","FR" +"1384809440","1384809471","DE" +"1384809472","1384809983","US" +"1384809984","1384810239","PT" +"1384810240","1384811007","US" +"1384811008","1384811519","GB" +"1384811520","1384811647","IR" +"1384811648","1384811711","EU" +"1384811712","1384811743","ES" +"1384811744","1384811775","BE" +"1384811776","1384812031","FR" +"1384812032","1384812159","PR" +"1384812160","1384812287","PT" +"1384812288","1384812543","ES" +"1384812544","1384813567","GB" +"1384813568","1384814079","ES" +"1384814080","1384814591","GB" +"1384814592","1384815103","BE" +"1384815104","1384815615","FR" +"1384815616","1384816127","BE" +"1384816128","1384816255","EU" +"1384816256","1384816383","ES" +"1384816384","1384816639","EU" +"1384816640","1384817151","DK" +"1384817152","1384817407","EU" +"1384817408","1384817439","GB" +"1384817440","1384817471","EU" +"1384817472","1384817503","SE" +"1384817504","1384817599","BE" +"1384817600","1384817663","FR" +"1384817664","1384817919","BE" +"1384817920","1384818175","EU" +"1384818176","1384818815","BE" +"1384818816","1384818879","NL" +"1384818880","1384819199","EU" +"1384819200","1384819711","GB" +"1384819712","1384820223","CH" +"1384820224","1384820735","BE" +"1384820736","1384821247","EU" +"1384821248","1384821759","BE" +"1384821760","1384822271","DK" +"1384822272","1384822783","ES" +"1384822784","1384823295","BE" +"1384823296","1384823807","CH" +"1384823808","1384824831","EU" +"1384824832","1384841215","GB" +"1384841216","1384857599","PL" +"1384857600","1384873983","NL" +"1384873984","1384890367","PL" +"1384890368","1384923135","DE" +"1384923136","1384939519","RU" +"1384939520","1384955903","LT" +"1384955904","1384972287","RU" +"1384972288","1384978975","DE" +"1384978976","1384978991","NL" +"1384978992","1384988671","DE" +"1384988672","1385005055","FI" +"1385005056","1385021439","HU" +"1385021440","1385037823","IE" +"1385037824","1385054207","FR" +"1385054208","1385070591","CZ" +"1385070592","1385086975","RU" +"1385086976","1385103359","GB" +"1385103360","1385119743","IT" +"1385119744","1385136127","BE" +"1385136128","1385152511","PL" +"1385152512","1385168895","DK" +"1385168896","1385177087","ES" +"1385177088","1385185279","DE" +"1385185280","1385193471","RU" +"1385193472","1385201663","ES" +"1385201664","1385209855","CZ" +"1385209856","1385218047","HU" +"1385218048","1385226239","UA" +"1385226240","1385234431","GB" +"1385234432","1385242623","DE" +"1385242624","1385250815","GB" +"1385250816","1385259007","PL" +"1385259008","1385267199","IT" +"1385267200","1385275391","SE" +"1385275392","1385283583","IT" +"1385283584","1385285631","DE" +"1385285632","1385287679","GB" +"1385287680","1385291775","A2" +"1385291776","1385299967","TR" +"1385299968","1385308159","BG" +"1385308160","1385309439","BE" +"1385309440","1385309695","RU" +"1385309696","1385310207","BE" +"1385310208","1385312255","RU" +"1385312256","1385314303","US" +"1385314304","1385316351","RU" +"1385316352","1385324543","NO" +"1385324544","1385332735","BE" +"1385332736","1385340927","GB" +"1385340928","1385341439","LB" +"1385341440","1385341634","US" +"1385341635","1385341635","GB" +"1385341636","1385341695","US" +"1385341696","1385342207","LB" +"1385342208","1385342463","US" +"1385342464","1385349119","LB" +"1385349120","1385357311","CH" +"1385357312","1385365503","PL" +"1385365504","1385373695","GB" +"1385373696","1385381887","NO" +"1385381888","1385398271","RU" +"1385398272","1385406463","BG" +"1385406464","1385414655","EE" +"1385414656","1385422847","SA" +"1385422848","1385431039","DK" +"1385431040","1385439231","RU" +"1385439232","1385447423","GB" +"1385447424","1385455615","IS" +"1385455616","1385463807","QA" +"1385463808","1385480191","NO" +"1385480192","1385488383","NL" +"1385488384","1385496575","GB" +"1385496576","1385504767","SI" +"1385504768","1385512959","IT" +"1385512960","1385521151","DE" +"1385521152","1385529343","AT" +"1385529344","1385537535","RU" +"1385537536","1385545727","DE" +"1385545728","1385553919","RU" +"1385553920","1385554515","DE" +"1385554516","1385554519","CH" +"1385554520","1385554527","DE" +"1385554528","1385554531","AT" +"1385554532","1385554719","DE" +"1385554720","1385554735","AT" +"1385554736","1385557503","DE" +"1385557504","1385557759","AT" +"1385557760","1385559039","DE" +"1385559040","1385559295","SK" +"1385559296","1385560831","DE" +"1385560832","1385561087","SK" +"1385561088","1385562111","DE" +"1385562112","1385562367","ES" +"1385562368","1385562623","EU" +"1385562624","1385563135","ES" +"1385563136","1385563391","IE" +"1385563392","1385563647","EU" +"1385563648","1385563935","IE" +"1385563936","1385564039","EU" +"1385564040","1385564055","IE" +"1385564056","1385564063","EU" +"1385564064","1385564095","IE" +"1385564096","1385564103","EU" +"1385564104","1385564111","IE" +"1385564112","1385564159","EU" +"1385564160","1385564231","HU" +"1385564232","1385564239","AT" +"1385564240","1385564415","EU" +"1385564416","1385564671","HU" +"1385564672","1385565183","EU" +"1385565184","1385565439","ES" +"1385565440","1385566207","EU" +"1385566208","1385566399","FR" +"1385566400","1385566431","EU" +"1385566432","1385566847","FR" +"1385566848","1385566927","EU" +"1385566928","1385566935","FR" +"1385566936","1385566959","EU" +"1385566960","1385566991","FR" +"1385566992","1385566999","EU" +"1385567000","1385567023","FR" +"1385567024","1385567087","EU" +"1385567088","1385567103","FR" +"1385567104","1385567135","EU" +"1385567136","1385567155","FR" +"1385567156","1385567159","EU" +"1385567160","1385567215","FR" +"1385567216","1385567223","EU" +"1385567224","1385567227","FR" +"1385567228","1385567231","EU" +"1385567232","1385568255","IE" +"1385568256","1385568767","FR" +"1385568768","1385569279","EU" +"1385569280","1385569407","FR" +"1385569408","1385569455","CZ" +"1385569456","1385569471","EU" +"1385569472","1385569487","CZ" +"1385569488","1385569791","EU" +"1385569792","1385570303","FR" +"1385570304","1385578495","HU" +"1385578496","1385580543","TR" +"1385580544","1385580799","DK" +"1385580800","1385586687","TR" +"1385586688","1385587967","GB" +"1385587968","1385588735","US" +"1385588736","1385589247","HK" +"1385589248","1385589503","JP" +"1385589504","1385589759","SG" +"1385589760","1385590015","JP" +"1385590016","1385590783","GB" +"1385590784","1385591295","US" +"1385591296","1385591807","HK" +"1385591808","1385592063","SG" +"1385592064","1385594879","GB" +"1385594880","1385603071","NL" +"1385603072","1385611263","CZ" +"1385611264","1385619455","AT" +"1385619456","1385625599","DE" +"1385625600","1385635839","FR" +"1385635840","1385644031","NL" +"1385644032","1385652223","MR" +"1385652224","1385660415","RU" +"1385660416","1385668607","TR" +"1385668608","1385676799","NL" +"1385676800","1385684991","RU" +"1385684992","1385824255","GB" +"1385824256","1385955327","PT" +"1385955328","1386086399","NL" +"1386086400","1386217471","ES" +"1386217472","1386283007","PL" +"1386283008","1386348543","NL" +"1386348544","1386414079","RU" +"1386414080","1386479615","GB" +"1386479616","1386545151","NO" +"1386545152","1386549247","DE" +"1386549248","1386549503","GB" +"1386549504","1386549759","IT" +"1386549760","1386586111","DE" +"1386586112","1386594303","US" +"1386594304","1386602495","DE" +"1386602496","1386610687","US" +"1386610688","1386676223","IL" +"1386676224","1386741759","SA" +"1386741760","1387233623","NL" +"1387233624","1387233627","BE" +"1387233628","1387233663","NL" +"1387233664","1387233727","BE" +"1387233728","1387233791","NL" +"1387233792","1387233919","BE" +"1387233920","1387249663","NL" +"1387249664","1387250687","BE" +"1387250688","1387251199","NL" +"1387251200","1387251231","BE" +"1387251232","1387251263","NL" +"1387251264","1387251615","BE" +"1387251616","1387251647","NL" +"1387251648","1387251727","BE" +"1387251728","1387251751","NL" +"1387251752","1387251759","BE" +"1387251760","1387331583","NL" +"1387331584","1387397119","PL" +"1387397120","1387462655","OM" +"1387462656","1387528191","RU" +"1387528192","1387593727","DK" +"1387593728","1387659263","FI" +"1387659264","1387790335","SE" +"1387790336","1388128511","IT" +"1388128512","1388128767","US" +"1388128768","1388314623","IT" +"1388314624","1388322815","AT" +"1388322816","1388331007","SI" +"1388331008","1388331519","NL" +"1388331520","1388331522","FR" +"1388331523","1388331524","NL" +"1388331525","1388331526","GB" +"1388331527","1388331528","DE" +"1388331529","1388331532","NL" +"1388331533","1388331534","IT" +"1388331535","1388331536","NL" +"1388331537","1388331538","PL" +"1388331539","1388338175","NL" +"1388338176","1388338178","FR" +"1388338179","1388338180","GB" +"1388338181","1388338182","DE" +"1388338183","1388338186","NL" +"1388338187","1388338188","IT" +"1388338189","1388338190","NL" +"1388338191","1388338192","PL" +"1388338193","1388339199","NL" +"1388339200","1388347391","GB" +"1388347392","1388363775","DK" +"1388363776","1388371967","DE" +"1388371968","1388380159","CH" +"1388380160","1388388943","IT" +"1388388944","1388388951","NG" +"1388388952","1388388959","IT" +"1388388960","1388388967","NG" +"1388388968","1388388975","IT" +"1388388976","1388388991","NG" +"1388388992","1388389567","IT" +"1388389568","1388389631","NG" +"1388389632","1388389943","IT" +"1388389944","1388390015","NG" +"1388390016","1388390143","IT" +"1388390144","1388394495","NG" +"1388394496","1388396031","IT" +"1388396032","1388396287","NG" +"1388396288","1388396543","IT" +"1388396544","1388404735","LV" +"1388404736","1388412927","UA" +"1388412928","1388421119","RU" +"1388421120","1388429311","SE" +"1388429312","1388437503","HR" +"1388437504","1388445695","DE" +"1388445696","1388453887","AZ" +"1388453888","1388462079","BH" +"1388462080","1388470271","ES" +"1388470272","1388478463","DE" +"1388478464","1388486655","AT" +"1388486656","1388494847","RU" +"1388494848","1388503039","NO" +"1388503040","1388519423","RU" +"1388519424","1388527615","NL" +"1388527616","1388535807","DE" +"1388535808","1388543999","GB" +"1388544000","1388546066","IE" +"1388546067","1388546069","GB" +"1388546070","1388546159","IE" +"1388546160","1388546167","GB" +"1388546168","1388547935","IE" +"1388547936","1388547951","GB" +"1388547952","1388550847","IE" +"1388550848","1388550852","A1" +"1388550853","1388552191","IE" +"1388552192","1388560383","GB" +"1388560384","1388568575","FI" +"1388568576","1388570841","CH" +"1388570842","1388570842","A1" +"1388570843","1388576767","CH" +"1388576768","1388584959","FR" +"1388584960","1388586303","GB" +"1388586304","1388586367","EU" +"1388586368","1388586391","GB" +"1388586392","1388586399","EU" +"1388586400","1388586447","GB" +"1388586448","1388586455","EU" +"1388586456","1388586495","GB" +"1388586496","1388587263","EU" +"1388587264","1388587391","GB" +"1388587392","1388587407","EU" +"1388587408","1388587423","GB" +"1388587424","1388587439","EU" +"1388587440","1388587471","GB" +"1388587472","1388587487","EU" +"1388587488","1388587503","FR" +"1388587504","1388587511","GB" +"1388587512","1388587519","EU" +"1388587520","1388587615","GB" +"1388587616","1388587631","EU" +"1388587632","1388588415","GB" +"1388588416","1388588543","EU" +"1388588544","1388588799","US" +"1388588800","1388589823","GB" +"1388589824","1388590079","EU" +"1388590080","1388590127","FR" +"1388590128","1388590327","EU" +"1388590328","1388590335","FR" +"1388590336","1388591103","EU" +"1388591104","1388591359","AU" +"1388591360","1388591615","EU" +"1388591616","1388591631","US" +"1388591632","1388591647","EU" +"1388591648","1388591663","US" +"1388591664","1388593151","EU" +"1388593152","1388601343","RU" +"1388601344","1388609535","SE" +"1388609536","1388617727","RU" +"1388617728","1388625919","SE" +"1388625920","1388634111","NO" +"1388634112","1388642303","GB" +"1388642304","1388650495","FI" +"1388650496","1388658687","PL" +"1388658688","1388666879","GB" +"1388666880","1388675071","FR" +"1388675072","1388675327","NL" +"1388675328","1388676863","DE" +"1388676864","1388677119","EU" +"1388677120","1388677375","GB" +"1388677376","1388677631","EU" +"1388677632","1388677663","AT" +"1388677664","1388677887","EU" +"1388677888","1388679167","DE" +"1388679168","1388679423","FR" +"1388679424","1388679455","DE" +"1388679456","1388679679","EU" +"1388679680","1388682239","DE" +"1388682240","1388682751","EU" +"1388682752","1388683263","DE" +"1388683264","1388689639","CH" +"1388689640","1388689647","DE" +"1388689648","1388691455","CH" +"1388691456","1388699647","NL" +"1388699648","1388707839","SE" +"1388707840","1388708607","LB" +"1388708608","1388709119","LT" +"1388709120","1388709375","IQ" +"1388709376","1388709887","RU" +"1388709888","1388710911","LB" +"1388710912","1388711167","IQ" +"1388711168","1388711679","RU" +"1388711680","1388711935","LB" +"1388711936","1388712191","RU" +"1388712192","1388712703","LT" +"1388712704","1388713215","LB" +"1388713216","1388713471","SE" +"1388713472","1388713727","RU" +"1388713728","1388713983","LT" +"1388713984","1388714239","RU" +"1388714240","1388714495","LB" +"1388714496","1388714751","RU" +"1388714752","1388715007","IQ" +"1388715008","1388715263","LB" +"1388715264","1388715519","LT" +"1388715520","1388715775","LV" +"1388715776","1388716031","LT" +"1388716032","1388724223","ES" +"1388724224","1388732415","DE" +"1388732416","1388740607","ES" +"1388740608","1388740623","GB" +"1388740624","1388740703","IE" +"1388740704","1388740707","GB" +"1388740708","1388740719","IE" +"1388740720","1388740735","GB" +"1388740736","1388740847","IE" +"1388740848","1388740863","GB" +"1388740864","1388741559","IE" +"1388741560","1388741567","GB" +"1388741568","1388741615","IE" +"1388741616","1388741631","GB" +"1388741632","1388741699","IE" +"1388741700","1388741711","GB" +"1388741712","1388741787","IE" +"1388741788","1388741791","GB" +"1388741792","1388741971","IE" +"1388741972","1388741983","GB" +"1388741984","1388742067","IE" +"1388742068","1388742079","GB" +"1388742080","1388742655","IE" +"1388742656","1388742719","GB" +"1388742720","1388742731","IE" +"1388742732","1388742735","IR" +"1388742736","1388742783","IE" +"1388742784","1388742791","GB" +"1388742792","1388742795","IE" +"1388742796","1388742847","GB" +"1388742848","1388743087","IE" +"1388743088","1388743099","GB" +"1388743100","1388743603","IE" +"1388743604","1388743615","GB" +"1388743616","1388744683","IE" +"1388744684","1388744687","GB" +"1388744688","1388745671","IE" +"1388745672","1388745683","GB" +"1388745684","1388745726","IE" +"1388745727","1388745727","GB" +"1388745728","1388746187","IE" +"1388746188","1388746191","GB" +"1388746192","1388746703","IE" +"1388746704","1388746711","GB" +"1388746712","1388746851","IE" +"1388746852","1388746863","GB" +"1388746864","1388746967","IE" +"1388746968","1388746975","GB" +"1388746976","1388747583","IE" +"1388747584","1388747599","GB" +"1388747600","1388747629","IE" +"1388747630","1388747631","GB" +"1388747632","1388748303","IE" +"1388748304","1388748319","GB" +"1388748320","1388748349","IE" +"1388748350","1388748351","GB" +"1388748352","1388748799","IE" +"1388748800","1388756991","RU" +"1388756992","1388765183","DE" +"1388765184","1388773375","GB" +"1388773376","1388781567","NO" +"1388781568","1388789759","ES" +"1388789760","1388794943","NL" +"1388794944","1388794959","GB" +"1388794960","1388796559","NL" +"1388796560","1388796575","GB" +"1388796576","1388796679","NL" +"1388796680","1388796687","GB" +"1388796688","1388796783","NL" +"1388796784","1388796799","GB" +"1388796800","1388797951","NL" +"1388797952","1388806143","RU" +"1388806144","1388807679","DE" +"1388807680","1388807711","BZ" +"1388807712","1388808255","DE" +"1388808256","1388808287","BZ" +"1388808288","1388814335","DE" +"1388814336","1388815103","AX" +"1388815104","1388815231","FI" +"1388815232","1388818687","AX" +"1388818688","1388818815","FI" +"1388818816","1388821119","AX" +"1388821120","1388821150","SE" +"1388821151","1388821247","AX" +"1388821248","1388822527","SE" +"1388822528","1388830719","BG" +"1388830720","1388838911","FI" +"1388838912","1388871679","RU" +"1388871680","1388904447","KZ" +"1388904448","1388937215","NL" +"1388937216","1388969983","EG" +"1388969984","1389002751","CZ" +"1389002752","1389035519","RU" +"1389035520","1389068287","GB" +"1389068288","1389101055","FI" +"1389101056","1389133823","NL" +"1389133824","1389166591","RU" +"1389166592","1389199359","PS" +"1389199360","1389199615","A2" +"1389199616","1389199647","IR" +"1389199648","1389200383","A2" +"1389200384","1389200639","AE" +"1389200640","1389201919","A2" +"1389201920","1389202175","AF" +"1389202176","1389203455","A2" +"1389203456","1389204479","US" +"1389204480","1389204799","A2" +"1389204800","1389204863","IQ" +"1389204864","1389204879","A2" +"1389204880","1389204895","IQ" +"1389204896","1389205247","A2" +"1389205248","1389205503","AF" +"1389205504","1389205631","A2" +"1389205632","1389205759","DE" +"1389205760","1389205791","A2" +"1389205792","1389205919","IR" +"1389205920","1389206143","A2" +"1389206144","1389206175","LY" +"1389206176","1389206271","A2" +"1389206272","1389206656","IR" +"1389206657","1389206783","A2" +"1389206784","1389207039","DE" +"1389207040","1389207391","A2" +"1389207392","1389207423","IR" +"1389207424","1389207487","DE" +"1389207488","1389207519","A2" +"1389207520","1389207551","IR" +"1389207552","1389209887","A2" +"1389209888","1389209903","IQ" +"1389209904","1389210143","A2" +"1389210144","1389210207","IQ" +"1389210208","1389210271","A2" +"1389210272","1389210303","IQ" +"1389210304","1389210623","A2" +"1389210624","1389210627","IQ" +"1389210628","1389210631","US" +"1389210632","1389210655","IQ" +"1389210656","1389210687","A2" +"1389210688","1389210719","IQ" +"1389210720","1389210767","A2" +"1389210768","1389210783","IQ" +"1389210784","1389210815","A2" +"1389210816","1389210863","IQ" +"1389210864","1389211135","A2" +"1389211136","1389211151","IQ" +"1389211152","1389211199","A2" +"1389211200","1389211263","IQ" +"1389211264","1389211343","A2" +"1389211344","1389211359","LY" +"1389211360","1389211391","A2" +"1389211392","1389211423","IQ" +"1389211424","1389211439","A2" +"1389211440","1389211455","IQ" +"1389211456","1389211519","A2" +"1389211520","1389211535","IQ" +"1389211536","1389211567","A2" +"1389211568","1389211647","IQ" +"1389211648","1389212159","A2" +"1389212160","1389212415","KW" +"1389212416","1389212671","A2" +"1389212672","1389212767","IQ" +"1389212768","1389212927","A2" +"1389212928","1389212991","IR" +"1389212992","1389213087","A2" +"1389213088","1389213119","IQ" +"1389213120","1389213183","A2" +"1389213184","1389213439","LY" +"1389213440","1389214719","A2" +"1389214720","1389215743","LY" +"1389215744","1389215999","AF" +"1389216000","1389217535","A2" +"1389217536","1389217791","AF" +"1389217792","1389218047","A2" +"1389218048","1389218303","AE" +"1389218304","1389219839","AF" +"1389219840","1389220191","A2" +"1389220192","1389220207","IQ" +"1389220208","1389220911","A2" +"1389220912","1389220927","SA" +"1389220928","1389222495","A2" +"1389222496","1389222511","SA" +"1389222512","1389222543","A2" +"1389222544","1389222559","LY" +"1389222560","1389222591","SA" +"1389222592","1389223679","A2" +"1389223680","1389223935","DE" +"1389223936","1389224191","US" +"1389224192","1389225215","A2" +"1389225216","1389225471","US" +"1389225472","1389225583","A2" +"1389225584","1389225599","IQ" +"1389225600","1389225983","A2" +"1389225984","1389226239","AE" +"1389226240","1389226495","A2" +"1389226496","1389227775","AE" +"1389227776","1389227791","IQ" +"1389227792","1389228351","A2" +"1389228352","1389228415","AE" +"1389228416","1389228479","LB" +"1389228480","1389229055","A2" +"1389229056","1389231359","AE" +"1389231360","1389231615","EU" +"1389231616","1389231871","US" +"1389231872","1389232127","SA" +"1389232128","1389232319","DE" +"1389232320","1389232327","LT" +"1389232328","1389263871","DE" +"1389263872","1389264031","NL" +"1389264032","1389264063","ES" +"1389264064","1389264127","NL" +"1389264128","1389264639","ES" +"1389264640","1389264895","US" +"1389264896","1389265151","TZ" +"1389265152","1389265167","NG" +"1389265168","1389265183","US" +"1389265184","1389265199","ZA" +"1389265200","1389265231","ET" +"1389265232","1389265239","TZ" +"1389265240","1389265263","A2" +"1389265264","1389265279","NG" +"1389265280","1389265407","TD" +"1389265408","1389265663","US" +"1389265664","1389266463","A2" +"1389266464","1389266471","CD" +"1389266472","1389266543","A2" +"1389266544","1389266551","CD" +"1389266552","1389266559","A2" +"1389266560","1389266569","CD" +"1389266570","1389266575","A2" +"1389266576","1389266591","NG" +"1389266592","1389266599","A2" +"1389266600","1389266607","NG" +"1389266608","1389266663","A2" +"1389266664","1389266687","CD" +"1389266688","1389266695","ZA" +"1389266696","1389266957","A2" +"1389266958","1389266958","NG" +"1389266959","1389267199","A2" +"1389267200","1389267455","CD" +"1389267456","1389267967","A2" +"1389267968","1389268223","BI" +"1389268224","1389268351","US" +"1389268352","1389268479","A2" +"1389268480","1389268607","US" +"1389268608","1389268735","GB" +"1389268736","1389268863","A2" +"1389268864","1389268871","KE" +"1389268872","1389269023","A2" +"1389269024","1389269031","CD" +"1389269032","1389269055","A2" +"1389269056","1389269063","CD" +"1389269064","1389269151","A2" +"1389269152","1389269159","NG" +"1389269160","1389269183","A2" +"1389269184","1389269215","NG" +"1389269216","1389269247","A2" +"1389269248","1389269375","NG" +"1389269376","1389269759","A2" +"1389269760","1389269887","CD" +"1389269888","1389270015","A2" +"1389270016","1389270079","CD" +"1389270080","1389270095","A2" +"1389270096","1389270111","CD" +"1389270112","1389270815","A2" +"1389270816","1389270823","US" +"1389270824","1389271039","A2" +"1389271040","1389271295","CA" +"1389271296","1389272063","A2" +"1389272064","1389272191","NO" +"1389272192","1389272223","GB" +"1389272224","1389272319","A2" +"1389272320","1389272575","AE" +"1389272576","1389272831","US" +"1389272832","1389272959","ZA" +"1389272960","1389273087","FR" +"1389273088","1389273343","LB" +"1389273344","1389273599","AE" +"1389273600","1389273855","MG" +"1389273856","1389274111","NG" +"1389274112","1389274367","A2" +"1389274368","1389274399","US" +"1389274400","1389274431","GH" +"1389274432","1389274494","US" +"1389274495","1389274495","A2" +"1389274496","1389274751","ZA" +"1389274752","1389274815","CD" +"1389274816","1389274839","LR" +"1389274840","1389274847","A2" +"1389274848","1389274879","LR" +"1389274880","1389275135","AE" +"1389275136","1389275391","GB" +"1389275392","1389275471","BD" +"1389275472","1389275503","A2" +"1389275504","1389275511","DE" +"1389275512","1389275647","A2" +"1389275648","1389275903","ZA" +"1389275904","1389276415","US" +"1389276416","1389276671","MX" +"1389276672","1389277055","A2" +"1389277056","1389277183","MX" +"1389277184","1389277439","A2" +"1389277440","1389277695","IQ" +"1389277696","1389277951","AE" +"1389277952","1389278207","A2" +"1389278208","1389278463","SN" +"1389278464","1389278719","MX" +"1389278720","1389278975","DE" +"1389278976","1389279231","MX" +"1389279232","1389279487","US" +"1389279488","1389279743","TZ" +"1389279744","1389279999","LR" +"1389280000","1389280255","CI" +"1389280256","1389280511","A2" +"1389280512","1389280767","FR" +"1389280768","1389281023","VG" +"1389281024","1389281279","A2" +"1389281280","1389282047","ZA" +"1389282048","1389282815","A2" +"1389282816","1389282943","LR" +"1389282944","1389283071","SN" +"1389283072","1389283327","A2" +"1389283328","1389283583","LR" +"1389283584","1389283711","A2" +"1389283712","1389283839","ZA" +"1389283840","1389287423","A2" +"1389287424","1389287551","US" +"1389287552","1389287679","A2" +"1389287680","1389287935","DK" +"1389287936","1389288447","US" +"1389288448","1389289471","GN" +"1389289472","1389290495","NO" +"1389290496","1389290751","US" +"1389290752","1389291007","FR" +"1389291008","1389291519","A2" +"1389291520","1389292031","US" +"1389292032","1389292799","GH" +"1389292800","1389293055","MG" +"1389293056","1389293311","US" +"1389293312","1389294335","A2" +"1389294336","1389294591","US" +"1389294592","1389294719","A2" +"1389294720","1389294847","IQ" +"1389294848","1389295615","US" +"1389295616","1389295871","ZA" +"1389295872","1389296063","US" +"1389296064","1389296383","A2" +"1389296384","1389296447","AD" +"1389296448","1389296639","A2" +"1389296640","1389297151","TZ" +"1389297152","1389297663","A2" +"1389297664","1389330431","UA" +"1389330432","1389363199","DE" +"1389363200","1389365780","CZ" +"1389365781","1389365781","SA" +"1389365782","1389379583","CZ" +"1389379584","1389395967","RU" +"1389395968","1389412351","RO" +"1389412352","1389428735","RS" +"1389428736","1389445119","CZ" +"1389445120","1389461503","RU" +"1389461504","1389477887","SE" +"1389477888","1389494271","BY" +"1389494272","1389495615","DE" +"1389495616","1389495645","CH" +"1389495646","1389502239","DE" +"1389502240","1389502271","CH" +"1389502272","1389504511","DE" +"1389504512","1389504772","FR" +"1389504773","1389504780","CH" +"1389504781","1389505023","FR" +"1389505024","1389510655","DE" +"1389510656","1389527039","NL" +"1389527040","1389543423","PL" +"1389543424","1389544927","DE" +"1389544928","1389544943","SG" +"1389544944","1389548991","DE" +"1389548992","1389549055","BE" +"1389549056","1389552639","DE" +"1389552640","1389552895","US" +"1389552896","1389554023","DE" +"1389554024","1389554039","FR" +"1389554040","1389554047","TR" +"1389554048","1389554087","DE" +"1389554088","1389554095","ES" +"1389554096","1389554103","DE" +"1389554104","1389554111","FR" +"1389554112","1389554135","IT" +"1389554136","1389555263","DE" +"1389555264","1389555327","AT" +"1389555328","1389556751","DE" +"1389556752","1389556759","CH" +"1389556760","1389557247","DE" +"1389557248","1389557503","EU" +"1389557504","1389558015","DE" +"1389558016","1389558271","EU" +"1389558272","1389559743","DE" +"1389559744","1389559807","CH" +"1389559808","1389560063","DE" +"1389560064","1389560319","BR" +"1389560320","1389561343","DE" +"1389561344","1389561599","IT" +"1389561600","1389562367","DE" +"1389562368","1389563135","IT" +"1389563136","1389563391","DE" +"1389563392","1389563647","IT" +"1389563648","1389563903","US" +"1389563904","1389564159","IT" +"1389564160","1389564415","DE" +"1389564416","1389564671","US" +"1389564672","1389565183","DE" +"1389565184","1389565439","US" +"1389565440","1389565695","IT" +"1389565696","1389565951","US" +"1389565952","1389566207","IT" +"1389566208","1389566463","BR" +"1389566464","1389566719","DE" +"1389566720","1389566975","US" +"1389566976","1389568767","DE" +"1389568768","1389569023","IT" +"1389569024","1389569279","DE" +"1389569280","1389570047","US" +"1389570048","1389570303","IT" +"1389570304","1389570559","US" +"1389570560","1389571839","DE" +"1389571840","1389572095","US" +"1389572096","1389572607","DE" +"1389572608","1389572863","US" +"1389572864","1389573375","DE" +"1389573376","1389573631","US" +"1389573632","1389573887","DE" +"1389573888","1389574143","NL" +"1389574144","1389574399","DE" +"1389574400","1389574655","US" +"1389574656","1389575167","DE" +"1389575168","1389576191","US" +"1389576192","1389592575","GB" +"1389592576","1389598719","GE" +"1389598720","1389598975","RU" +"1389598976","1389604863","GE" +"1389604864","1389605119","RU" +"1389605120","1389607935","GE" +"1389607936","1389608447","US" +"1389608448","1389608959","GE" +"1389608960","1389625343","DK" +"1389625344","1389641727","DE" +"1389641728","1389658111","JO" +"1389658112","1389674495","BE" +"1389674496","1389690879","DE" +"1389690880","1389707263","PS" +"1389707264","1389723647","IT" +"1389723648","1389756415","ES" +"1389756416","1389772799","SE" +"1389772800","1389778431","SI" +"1389778432","1389778943","CA" +"1389778944","1389780735","RS" +"1389780736","1389780991","SI" +"1389780992","1389782527","HR" +"1389782528","1389782543","SI" +"1389782544","1389782559","HR" +"1389782560","1389783039","SI" +"1389783040","1389785087","BA" +"1389785088","1389787135","MK" +"1389787136","1389788671","SI" +"1389788672","1389789183","RS" +"1389789184","1389805567","PL" +"1389805568","1389806591","US" +"1389806592","1389806847","SA" +"1389806848","1389808639","US" +"1389808640","1389808895","EU" +"1389808896","1389814271","US" +"1389814272","1389814527","DE" +"1389814528","1389814783","US" +"1389814784","1389815039","EU" +"1389815040","1389815295","US" +"1389815296","1389815551","DE" +"1389815552","1389815807","US" +"1389815808","1389821951","DE" +"1389821952","1389838335","NL" +"1389838336","1389854719","UZ" +"1389854720","1389871103","IT" +"1389871104","1389887487","FI" +"1389887488","1389953023","FR" +"1389953024","1390018559","NL" +"1390018560","1390084095","AT" +"1390084096","1390149631","GB" +"1390149632","1390215167","CH" +"1390215168","1390280703","IS" +"1390280704","1390346239","TR" +"1390346240","1390394367","ES" +"1390394368","1390394879","PT" +"1390394880","1390395391","ES" +"1390395392","1390396415","FR" +"1390396416","1390397183","PT" +"1390397184","1390411775","ES" +"1390411776","1392508927","FR" +"1392508928","1394606079","PL" +"1394606080","1396703231","ES" +"1396703232","1396776476","AT" +"1396776477","1396776477","A1" +"1396776478","1396834303","AT" +"1396834304","1396899839","TR" +"1396899840","1396965375","GB" +"1396965376","1396973567","NL" +"1396973568","1396981759","RU" +"1396981760","1396989951","PL" +"1396989952","1396998143","FR" +"1396998144","1397006335","AT" +"1397006336","1397014527","KW" +"1397014528","1397022719","CH" +"1397022720","1397030911","SE" +"1397030912","1397039103","RU" +"1397039104","1397047295","CZ" +"1397047296","1397063679","RU" +"1397063680","1397071871","UZ" +"1397071872","1397096447","RU" +"1397096448","1397227519","IE" +"1397227520","1397489663","DK" +"1397489664","1397751807","CH" +"1397751808","1398276095","NL" +"1398276096","1398800383","DK" +"1398800384","1398833151","KW" +"1398833152","1398840447","NL" +"1398840448","1398840575","GB" +"1398840576","1398865919","NL" +"1398865920","1398867967","RU" +"1398867968","1398870015","NL" +"1398870016","1398872063","PL" +"1398872064","1398874111","BG" +"1398874112","1398876159","GB" +"1398876160","1398880255","DE" +"1398880256","1398882303","FR" +"1398882304","1398884351","BG" +"1398884352","1398886399","DE" +"1398886400","1398888447","CH" +"1398888448","1398890495","GB" +"1398890496","1398892543","DK" +"1398892544","1398894591","RU" +"1398894592","1398896639","DE" +"1398896640","1398898687","CH" +"1398898688","1398931455","ES" +"1398931456","1398964223","GB" +"1398964224","1398964543","NL" +"1398964544","1398964559","US" +"1398964560","1398965503","NL" +"1398965504","1398965759","US" +"1398965760","1398966015","DE" +"1398966016","1398966839","NL" +"1398966840","1398966847","PL" +"1398966848","1398967871","NL" +"1398967872","1398967903","IE" +"1398967904","1398973695","NL" +"1398973696","1398973951","AT" +"1398973952","1398974207","US" +"1398974208","1398979327","NL" +"1398979328","1398979583","US" +"1398979584","1398979839","GB" +"1398979840","1398980873","NL" +"1398980874","1398980881","US" +"1398980882","1398980956","NL" +"1398980957","1398980975","US" +"1398980976","1398982143","NL" +"1398982144","1398982399","US" +"1398982400","1398983423","NL" +"1398983424","1398983487","GB" +"1398983488","1398983519","JE" +"1398983520","1398983551","GB" +"1398983552","1398983679","NL" +"1398983680","1398984191","US" +"1398984192","1398996991","NL" +"1398996992","1399029759","LU" +"1399029760","1399062527","LV" +"1399062528","1399095295","FI" +"1399095296","1399128063","GB" +"1399128064","1399160831","BE" +"1399160832","1399193599","SA" +"1399193600","1399226367","FI" +"1399226368","1399259135","RU" +"1399259136","1399291903","IT" +"1399291904","1399324671","RO" +"1399324672","1399586815","GB" +"1399586816","1399717887","NO" +"1399717888","1399848959","AE" +"1399848960","1400111103","FR" +"1400111104","1400373247","NL" +"1400373248","1400705279","DE" +"1400705280","1400705791","EU" +"1400705792","1400707071","DE" +"1400707072","1400708095","EU" +"1400708096","1400708863","DE" +"1400708864","1400709120","EU" +"1400709121","1400710142","DE" +"1400710143","1400710399","EU" +"1400710400","1400712191","DE" +"1400712192","1400712447","EU" +"1400712448","1400712703","DE" +"1400712704","1400712959","EU" +"1400712960","1400718335","DE" +"1400718336","1400718847","EU" +"1400718848","1400721407","DE" +"1400721408","1400721919","EU" +"1400721920","1400722431","DE" +"1400722432","1400729599","EU" +"1400729600","1400730639","DE" +"1400730640","1400731135","EU" +"1400731136","1400733695","DE" +"1400733696","1400897535","EU" +"1400897536","1400963071","NL" +"1400963072","1401028607","DE" +"1401028608","1401094143","IL" +"1401094144","1401159679","HR" +"1401159680","1401225215","PT" +"1401225216","1401241599","DE" +"1401241600","1401242623","DK" +"1401242624","1401244159","DE" +"1401244160","1401246719","EU" +"1401246720","1401257983","DE" +"1401257984","1401264127","EU" +"1401264128","1401264903","DE" +"1401264904","1401265151","EU" +"1401265152","1401265919","DE" +"1401265920","1401265951","EU" +"1401265952","1401265983","DE" +"1401265984","1401266175","EU" +"1401266176","1401273599","DE" +"1401273600","1401273727","EU" +"1401273728","1401274367","DE" +"1401274368","1401278463","EU" +"1401278464","1401283583","DE" +"1401283584","1401286655","EU" +"1401286656","1401290751","DE" +"1401290752","1401356287","BE" +"1401356288","1401421823","DE" +"1401421824","1401423135","GB" +"1401423136","1401423167","IN" +"1401423168","1401423199","GB" +"1401423200","1401423231","US" +"1401423232","1401423871","GB" +"1401423872","1401423903","AE" +"1401423904","1401423967","GR" +"1401423968","1401423999","SA" +"1401424000","1401425151","AE" +"1401425152","1401425407","US" +"1401425408","1401425919","AE" +"1401425920","1401427967","NL" +"1401427968","1401430015","RU" +"1401430016","1401432063","AT" +"1401432064","1401434111","IE" +"1401434112","1401436159","RU" +"1401436160","1401438207","BH" +"1401438208","1401440255","GB" +"1401440256","1401443487","DE" +"1401443488","1401443519","GI" +"1401443520","1401444351","DE" +"1401444352","1401446399","DK" +"1401446400","1401448447","DE" +"1401448448","1401450495","IT" +"1401450496","1401452543","RU" +"1401452544","1401454591","GB" +"1401454592","1401456639","DE" +"1401456640","1401458687","LV" +"1401458688","1401460735","IT" +"1401460736","1401462783","PL" +"1401462784","1401464831","FR" +"1401464832","1401466879","IE" +"1401466880","1401468927","RS" +"1401468928","1401470975","ES" +"1401470976","1401473023","NL" +"1401473024","1401475071","CZ" +"1401475072","1401477119","FR" +"1401477120","1401479167","BE" +"1401479168","1401481215","PL" +"1401481216","1401485311","RU" +"1401485312","1401489407","GB" +"1401489408","1401491455","SE" +"1401491456","1401493503","NL" +"1401493504","1401495551","CH" +"1401495552","1401497599","DE" +"1401497600","1401499647","AT" +"1401499648","1401501695","RU" +"1401501696","1401501791","IT" +"1401501792","1401502207","A2" +"1401502208","1401502463","IT" +"1401502464","1401503487","A2" +"1401503488","1401503743","AL" +"1401503744","1401505791","DE" +"1401505792","1401509887","CH" +"1401509888","1401511935","UA" +"1401511936","1401513983","DE" +"1401513984","1401516031","IT" +"1401516032","1401516439","AT" +"1401516440","1401516447","AE" +"1401516448","1401518079","AT" +"1401518080","1401520127","IT" +"1401520128","1401522175","GB" +"1401522176","1401526271","NL" +"1401526272","1401528319","HU" +"1401528320","1401530367","IT" +"1401530368","1401532415","DE" +"1401532416","1401534463","GB" +"1401534464","1401536511","DE" +"1401536512","1401538559","NL" +"1401538560","1401540607","NO" +"1401540608","1401542655","GB" +"1401542656","1401544703","RU" +"1401544704","1401546751","GB" +"1401546752","1401548799","IT" +"1401548800","1401550847","FR" +"1401550848","1401550879","GB" +"1401550880","1401550911","JE" +"1401550912","1401550935","GB" +"1401550936","1401550975","JE" +"1401550976","1401550983","GB" +"1401550984","1401551015","JE" +"1401551016","1401551023","GB" +"1401551024","1401551071","JE" +"1401551072","1401552895","GB" +"1401552896","1401554943","NL" +"1401554944","1401556991","IE" +"1401556992","1401563135","GB" +"1401563136","1401565183","ES" +"1401565184","1401567231","RU" +"1401567232","1401569279","GB" +"1401569280","1401585663","DE" +"1401585664","1401602047","GB" +"1401602048","1401618431","ES" +"1401618432","1401634815","AM" +"1401634816","1401651199","HR" +"1401651200","1401667583","RU" +"1401667584","1401683967","IT" +"1401683968","1401684067","SE" +"1401684068","1401684071","NO" +"1401684072","1401684075","DE" +"1401684076","1401684479","SE" +"1401684480","1401684511","DK" +"1401684512","1401684515","DE" +"1401684516","1401684559","SE" +"1401684560","1401684607","DK" +"1401684608","1401684671","SE" +"1401684672","1401684703","DK" +"1401684704","1401684731","SE" +"1401684732","1401684735","DK" +"1401684736","1401684755","NO" +"1401684756","1401684759","SE" +"1401684760","1401684763","DE" +"1401684764","1401684767","SE" +"1401684768","1401684895","NO" +"1401684896","1401684995","SE" +"1401684996","1401684999","DE" +"1401685000","1401686015","SE" +"1401686016","1401686059","GB" +"1401686060","1401686063","DE" +"1401686064","1401686143","GB" +"1401686144","1401686223","SE" +"1401686224","1401686271","GB" +"1401686272","1401686287","NL" +"1401686288","1401686291","DE" +"1401686292","1401686335","SE" +"1401686336","1401686399","NL" +"1401686400","1401686911","SE" +"1401686912","1401686927","DE" +"1401686928","1401686943","SE" +"1401686944","1401686947","DE" +"1401686948","1401691519","SE" +"1401691520","1401691535","DE" +"1401691536","1401695263","SE" +"1401695264","1401695267","GB" +"1401695268","1401695271","SE" +"1401695272","1401695275","GB" +"1401695276","1401695279","DE" +"1401695280","1401697815","SE" +"1401697816","1401697823","DE" +"1401697824","1401698223","SE" +"1401698224","1401698227","GB" +"1401698228","1401698231","DE" +"1401698232","1401703951","SE" +"1401703952","1401703955","DE" +"1401703956","1401704511","SE" +"1401704512","1401704515","DE" +"1401704516","1401705983","SE" +"1401705984","1401705987","DE" +"1401705988","1401708287","SE" +"1401708288","1401708543","DE" +"1401708544","1401709055","FR" +"1401709056","1401709311","SE" +"1401709312","1401709567","GB" +"1401709568","1401711615","SE" +"1401711616","1401711647","GB" +"1401711648","1401711679","DE" +"1401711680","1401711711","NL" +"1401711712","1401711743","ES" +"1401711744","1401711775","DK" +"1401711776","1401711807","IT" +"1401711808","1401711839","US" +"1401711840","1401711871","NL" +"1401711872","1401711903","GB" +"1401711904","1401711935","DE" +"1401711936","1401711967","NL" +"1401711968","1401711999","ES" +"1401712000","1401712031","DK" +"1401712032","1401712063","CH" +"1401712064","1401712095","FR" +"1401712096","1401712127","NL" +"1401712128","1401712159","GB" +"1401712160","1401712191","DE" +"1401712192","1401712223","SE" +"1401712224","1401712255","ES" +"1401712256","1401712287","DK" +"1401712288","1401712319","SE" +"1401712320","1401712351","IT" +"1401712352","1401712383","DE" +"1401712384","1401712415","GB" +"1401712416","1401712447","DE" +"1401712448","1401712479","NL" +"1401712480","1401712511","ES" +"1401712512","1401712543","SE" +"1401712544","1401712575","US" +"1401712576","1401712607","GB" +"1401712608","1401712639","NL" +"1401712640","1401712895","SE" +"1401712896","1401713151","DE" +"1401713152","1401714047","SE" +"1401714048","1401714063","FR" +"1401714064","1401715403","SE" +"1401715404","1401715407","DE" +"1401715408","1401715455","SE" +"1401715456","1401715459","US" +"1401715460","1401719935","SE" +"1401719936","1401719951","DK" +"1401719952","1401719955","GB" +"1401719956","1401719959","SE" +"1401719960","1401719963","GB" +"1401719964","1401719967","DE" +"1401719968","1401726783","SE" +"1401726784","1401726787","DE" +"1401726788","1401727743","SE" +"1401727744","1401727999","GB" +"1401728000","1401728335","SE" +"1401728336","1401728351","NL" +"1401728352","1401728431","SE" +"1401728432","1401728447","NL" +"1401728448","1401740543","SE" +"1401740544","1401740799","DE" +"1401740800","1401742847","SE" +"1401742848","1401742879","GB" +"1401742880","1401742895","SE" +"1401742896","1401742911","GB" +"1401742912","1401743055","SE" +"1401743056","1401743071","GB" +"1401743072","1401743087","SE" +"1401743088","1401743119","GB" +"1401743120","1401743151","SE" +"1401743152","1401743167","GB" +"1401743168","1401743311","SE" +"1401743312","1401743327","GB" +"1401743328","1401743343","SE" +"1401743344","1401743359","GB" +"1401743360","1401745439","SE" +"1401745440","1401745443","GB" +"1401745444","1401745447","US" +"1401745448","1401745487","SE" +"1401745488","1401745503","ES" +"1401745504","1401745919","SE" +"1401745920","1401745935","IT" +"1401745936","1401745959","SE" +"1401745960","1401745967","US" +"1401745968","1401745971","MY" +"1401745972","1401745975","NL" +"1401745976","1401745983","SE" +"1401745984","1401745999","NL" +"1401746000","1401746015","ES" +"1401746016","1401746019","GB" +"1401746020","1401746023","SE" +"1401746024","1401746027","DE" +"1401746028","1401746175","SE" +"1401746176","1401746191","DK" +"1401746192","1401746215","SE" +"1401746216","1401746223","BG" +"1401746224","1401746239","SE" +"1401746240","1401746255","NL" +"1401746256","1401746271","ES" +"1401746272","1401746279","GB" +"1401746280","1401746283","SE" +"1401746284","1401746287","US" +"1401746288","1401746291","DE" +"1401746292","1401746431","SE" +"1401746432","1401746447","NL" +"1401746448","1401746467","SE" +"1401746468","1401746471","NL" +"1401746472","1401746479","US" +"1401746480","1401746487","GB" +"1401746488","1401746495","SE" +"1401746496","1401746511","NL" +"1401746512","1401746527","ES" +"1401746528","1401746531","DE" +"1401746532","1401746623","SE" +"1401746624","1401746639","DE" +"1401746640","1401746655","SE" +"1401746656","1401746687","IE" +"1401746688","1401746703","NO" +"1401746704","1401746719","SE" +"1401746720","1401746723","DE" +"1401746724","1401746751","SE" +"1401746752","1401746767","NL" +"1401746768","1401746783","ES" +"1401746784","1401746879","SE" +"1401746880","1401746895","DE" +"1401746896","1401746943","SE" +"1401746944","1401746959","FR" +"1401746960","1401747007","SE" +"1401747008","1401747023","NL" +"1401747024","1401747039","ES" +"1401747040","1401747043","DE" +"1401747044","1401747135","SE" +"1401747136","1401747151","DE" +"1401747152","1401747199","SE" +"1401747200","1401747215","IT" +"1401747216","1401747235","SE" +"1401747236","1401747239","US" +"1401747240","1401747243","DE" +"1401747244","1401747247","SE" +"1401747248","1401747263","ES" +"1401747264","1401747391","SE" +"1401747392","1401747407","DE" +"1401747408","1401747423","GB" +"1401747424","1401747439","ES" +"1401747440","1401747487","SE" +"1401747488","1401747495","DK" +"1401747496","1401747499","SE" +"1401747500","1401747503","GB" +"1401747504","1401747583","SE" +"1401747584","1401747587","DE" +"1401747588","1401747647","SE" +"1401747648","1401747663","DE" +"1401747664","1401747711","SE" +"1401747712","1401747967","FR" +"1401747968","1401749135","SE" +"1401749136","1401749151","DE" +"1401749152","1401749503","SE" +"1401749504","1401753087","DE" +"1401753088","1401753343","AT" +"1401753344","1401759231","DE" +"1401759232","1401759487","GB" +"1401759488","1401760255","DE" +"1401760256","1401760767","SK" +"1401760768","1401765247","DE" +"1401765248","1401765375","NL" +"1401765376","1401765759","DE" +"1401765760","1401765887","NL" +"1401765888","1401782271","IE" +"1401782272","1401815039","FR" +"1401815040","1401817087","SE" +"1401817088","1401819135","RU" +"1401819136","1401821183","BG" +"1401821184","1401825279","GB" +"1401825280","1401827327","PL" +"1401827328","1401829375","GB" +"1401829376","1401831423","PL" +"1401831424","1401833471","GB" +"1401833472","1401835519","FI" +"1401835520","1401837567","DE" +"1401837568","1401839615","CH" +"1401839616","1401841663","NO" +"1401841664","1401843711","UA" +"1401843712","1401847807","PL" +"1401847808","1401849855","DE" +"1401849856","1401851903","PL" +"1401851904","1401853951","FR" +"1401853952","1401855999","PL" +"1401856000","1401858047","RU" +"1401858048","1401868287","PL" +"1401868288","1401870335","UA" +"1401870336","1401872383","PL" +"1401872384","1401874431","GB" +"1401874432","1401876479","UA" +"1401876480","1401878527","ES" +"1401878528","1401880575","MT" +"1401880576","1401882623","DE" +"1401882624","1401884671","NG" +"1401884672","1401886719","FR" +"1401886720","1401888767","BW" +"1401888768","1401890815","RU" +"1401890816","1401892863","PL" +"1401892864","1401894911","RU" +"1401894912","1401896959","FI" +"1401896960","1401899007","RU" +"1401899008","1401901055","PL" +"1401901056","1401903103","NO" +"1401903104","1401905151","FI" +"1401905152","1401907199","PL" +"1401907200","1401909247","GR" +"1401909248","1401911295","NO" +"1401911296","1401913343","DK" +"1401913344","1401917439","PL" +"1401917440","1401919487","BG" +"1401919488","1401921535","RU" +"1401921536","1401923583","PL" +"1401923584","1401925631","KN" +"1401925632","1401927679","BG" +"1401927680","1401929727","NL" +"1401929728","1401931775","RU" +"1401931776","1401933823","UA" +"1401933824","1401935871","DE" +"1401935872","1401937919","FI" +"1401937920","1401939967","GB" +"1401939968","1401942015","UA" +"1401942016","1401944063","EU" +"1401944064","1401946111","BG" +"1401946112","1401962495","FR" +"1401962496","1401978879","PL" +"1401978880","1401995263","PT" +"1401995264","1402011647","CH" +"1402011648","1402018815","SE" +"1402018816","1402019327","FI" +"1402019328","1402025007","SE" +"1402025008","1402025023","NO" +"1402025024","1402026111","SE" +"1402026112","1402026175","NO" +"1402026176","1402027263","SE" +"1402027264","1402027519","NO" +"1402027520","1402027823","SE" +"1402027824","1402027831","GB" +"1402027832","1402028031","SE" +"1402028032","1402044415","FR" +"1402044416","1402060799","PL" +"1402060800","1402077183","FI" +"1402077184","1402093567","GB" +"1402093568","1402109951","RU" +"1402109952","1402142719","FI" +"1402142720","1402159103","ES" +"1402159104","1402175487","IT" +"1402175488","1402191871","IE" +"1402191872","1402208255","IR" +"1402208256","1402224639","CZ" +"1402224640","1402241023","BG" +"1402241024","1402257407","GB" +"1402257408","1402273791","FI" +"1402273792","1402277631","RU" +"1402277632","1402277887","TJ" +"1402277888","1402290175","RU" +"1402290176","1402306559","NL" +"1402306560","1402322943","IT" +"1402322944","1402339327","RU" +"1402339328","1402355711","CH" +"1402355712","1402372095","FI" +"1402372096","1402388479","SE" +"1402388480","1402404863","ES" +"1402404864","1402408959","RU" +"1402408960","1402413055","DE" +"1402413056","1402417151","PL" +"1402417152","1402421247","DE" +"1402421248","1402422783","FR" +"1402422784","1402423039","LU" +"1402423040","1402423295","FR" +"1402423296","1402423807","BE" +"1402423808","1402424319","FR" +"1402424320","1402424575","BE" +"1402424576","1402424831","FR" +"1402424832","1402425343","GB" +"1402425344","1402425599","DE" +"1402425600","1402425855","LU" +"1402425856","1402426367","FR" +"1402426368","1402426623","DE" +"1402426624","1402427135","CH" +"1402427136","1402429439","GB" +"1402429440","1402431487","US" +"1402431488","1402433535","GB" +"1402433536","1402434047","FR" +"1402434048","1402434559","GB" +"1402434560","1402434815","US" +"1402434816","1402437631","GB" +"1402437632","1402454015","DK" +"1402454016","1402470399","GB" +"1402470400","1402994687","FR" +"1402994688","1403256831","NL" +"1403256832","1403322367","AT" +"1403322368","1403387903","ES" +"1403387904","1403396095","SE" +"1403396096","1403400191","EE" +"1403400192","1403400207","TR" +"1403400208","1403400215","EE" +"1403400216","1403400219","US" +"1403400220","1403400239","EE" +"1403400240","1403400255","BG" +"1403400256","1403400263","EE" +"1403400264","1403400271","US" +"1403400272","1403404287","EE" +"1403404288","1403412479","GB" +"1403412480","1403420671","RU" +"1403420672","1403428863","NL" +"1403428864","1403437055","GB" +"1403437056","1403445247","RO" +"1403445248","1403461631","RU" +"1403461632","1403462015","FR" +"1403462016","1403462031","GB" +"1403462032","1403464663","FR" +"1403464664","1403464671","BE" +"1403464672","1403465727","FR" +"1403465728","1403465743","GB" +"1403465744","1403469423","FR" +"1403469424","1403469431","US" +"1403469432","1403469823","FR" +"1403469824","1403486207","RU" +"1403486208","1403494399","FR" +"1403494400","1403502591","GB" +"1403502592","1403510783","NL" +"1403510784","1403518975","CZ" +"1403518976","1403535359","CY" +"1403535360","1403551743","PL" +"1403551744","1403556503","SK" +"1403556504","1403556511","SR" +"1403556512","1403568127","SK" +"1403568128","1403573247","SE" +"1403573248","1403573503","ES" +"1403573504","1403574783","SE" +"1403574784","1403575039","IT" +"1403575040","1403576063","SE" +"1403576064","1403576319","DE" +"1403576320","1403578879","SE" +"1403578880","1403579135","DK" +"1403579136","1403580159","SE" +"1403580160","1403580415","GB" +"1403580416","1403581951","SE" +"1403581952","1403582207","US" +"1403582208","1403584511","SE" +"1403584512","1403600895","DE" +"1403600896","1403601519","FR" +"1403601520","1403601535","MC" +"1403601536","1403617279","FR" +"1403617280","1403633663","DE" +"1403633664","1403650047","RU" +"1403650048","1403666431","A2" +"1403666432","1403682815","GB" +"1403682816","1403688959","A2" +"1403688960","1403692031","GB" +"1403692032","1403699199","A2" +"1403699200","1403715583","UA" +"1403715584","1403731967","LT" +"1403731968","1403748351","RU" +"1403748352","1403764735","DE" +"1403764736","1403781119","GR" +"1403781120","1403797503","RU" +"1403797504","1403813887","SE" +"1403813888","1403827327","NL" +"1403827328","1403827455","BE" +"1403827456","1403827583","NL" +"1403827584","1403827711","BE" +"1403827712","1403830271","NL" +"1403830272","1403846655","CH" +"1403846656","1403863039","IS" +"1403863040","1403879423","FR" +"1403879424","1403895807","ES" +"1403895808","1403912191","CH" +"1403912192","1403928575","PT" +"1403928576","1403944959","SE" +"1403944960","1403961343","GR" +"1403961344","1403977727","RU" +"1403977728","1403994111","IT" +"1403994112","1404010495","AT" +"1404010496","1404026879","PL" +"1404026880","1404043263","ES" +"1404043264","1404051455","EE" +"1404051456","1404059647","HR" +"1404059648","1404076031","NO" +"1404076032","1404084223","DE" +"1404084224","1404092415","NO" +"1404092416","1404116991","SE" +"1404116992","1404125183","NO" +"1404125184","1404184063","SE" +"1404184064","1404184575","NO" +"1404184576","1404186623","SE" +"1404186624","1404187647","NO" +"1404187648","1404188671","SE" +"1404188672","1404189183","LT" +"1404189184","1404189695","EE" +"1404189696","1404190719","NO" +"1404190720","1404192767","SE" +"1404192768","1404194815","LV" +"1404194816","1404195839","LT" +"1404195840","1404196351","NO" +"1404196352","1404197375","LT" +"1404197376","1404197887","NO" +"1404197888","1404198911","LT" +"1404198912","1404200959","SE" +"1404200960","1404203007","NL" +"1404203008","1404207103","HR" +"1404207104","1404210175","NO" +"1404210176","1404212223","LV" +"1404212224","1404215295","SE" +"1404215296","1404219391","LV" +"1404219392","1404220415","SE" +"1404220416","1404221439","EE" +"1404221440","1404222463","RU" +"1404222464","1404222975","LV" +"1404222976","1404225535","SE" +"1404225536","1404227071","RU" +"1404227072","1404227583","HR" +"1404227584","1404231679","LV" +"1404231680","1404232191","SE" +"1404232192","1404232703","NO" +"1404232704","1404233215","CH" +"1404233216","1404234239","SE" +"1404234240","1404235775","HR" +"1404235776","1404256255","SE" +"1404256256","1404305407","RU" +"1404305408","1404321791","NL" +"1404321792","1404338175","RU" +"1404338176","1404379135","SE" +"1404379136","1404383231","AT" +"1404383232","1404387327","SE" +"1404387328","1404395519","DE" +"1404395520","1404403711","SE" +"1404403712","1404411903","NL" +"1404411904","1404420095","SE" +"1404420096","1404436479","RU" +"1404436480","1404575743","SE" +"1404575744","1404583935","HR" +"1404583936","1404600319","KZ" +"1404600320","1404645375","SE" +"1404645376","1404645887","HR" +"1404645888","1404764159","SE" +"1404764160","1404780543","NL" +"1404780544","1404796927","SE" +"1404796928","1404801023","EE" +"1404801024","1404802047","SE" +"1404802048","1404803071","EE" +"1404803072","1404804095","LV" +"1404804096","1404805119","SE" +"1404805120","1404813311","AT" +"1404813312","1404815871","EE" +"1404815872","1404816383","LT" +"1404816384","1404821503","NL" +"1404821504","1404829695","SE" +"1404829696","1404870655","RU" +"1404870656","1404872703","LT" +"1404872704","1404874751","SE" +"1404874752","1404875775","LV" +"1404875776","1404876799","LT" +"1404876800","1404895231","SE" +"1404895232","1404927999","DE" +"1404928000","1404944383","SE" +"1404944384","1404952575","DE" +"1404952576","1404960767","NL" +"1404960768","1405026303","SE" +"1405026304","1405042687","NO" +"1405042688","1405048831","SE" +"1405048832","1405050879","HR" +"1405050880","1405059071","AT" +"1405059072","1405063167","SE" +"1405063168","1405067263","NO" +"1405067264","1405075455","DE" +"1405075456","1405083647","NL" +"1405083648","1405091839","SE" +"1405091840","1406140415","FR" +"1406140416","1406205951","CZ" +"1406205952","1406271487","SE" +"1406271488","1406337023","IE" +"1406337024","1406402559","IT" +"1406402560","1406468095","GR" +"1406468096","1406533631","ES" +"1406533632","1406599167","FR" +"1406599168","1406664703","AT" +"1406664704","1406672895","FI" +"1406672896","1406681087","HU" +"1406681088","1406689279","GB" +"1406689280","1406697471","SE" +"1406697472","1406705663","GB" +"1406705664","1406708735","IT" +"1406708736","1406709759","A2" +"1406709760","1406710015","IT" +"1406710016","1406711295","A2" +"1406711296","1406712063","IT" +"1406712064","1406713343","A2" +"1406713344","1406713855","IT" +"1406713856","1406714879","AT" +"1406714880","1406715391","NL" +"1406715392","1406715519","AT" +"1406715520","1406715647","NL" +"1406715648","1406715711","AT" +"1406715712","1406716415","NL" +"1406716416","1406716671","AT" +"1406716672","1406716927","NL" +"1406716928","1406717439","AT" +"1406717440","1406717695","NL" +"1406717696","1406717951","DE" +"1406717952","1406718015","GB" +"1406718016","1406718019","AT" +"1406718020","1406719487","GB" +"1406719488","1406719743","AT" +"1406719744","1406719999","GB" +"1406720000","1406721023","AT" +"1406721024","1406722047","GB" +"1406722048","1406730239","DE" +"1406730240","1406746623","RU" +"1406746624","1406754815","BE" +"1406754816","1406763007","GB" +"1406763008","1406771199","BE" +"1406771200","1406779391","GB" +"1406779392","1406787583","RU" +"1406787584","1406787679","GB" +"1406787680","1406787687","ES" +"1406787688","1406787695","IL" +"1406787696","1406787935","GB" +"1406787936","1406787967","ES" +"1406787968","1406788055","GB" +"1406788056","1406788351","ES" +"1406788352","1406788479","BG" +"1406788480","1406788607","ES" +"1406788608","1406788711","GB" +"1406788712","1406789119","ES" +"1406789120","1406789135","GB" +"1406789136","1406789183","ES" +"1406789184","1406789247","GB" +"1406789248","1406789375","ES" +"1406789376","1406789503","RO" +"1406789504","1406789631","ES" +"1406789632","1406789887","FR" +"1406789888","1406790015","HU" +"1406790016","1406790143","ES" +"1406790144","1406790176","GB" +"1406790177","1406790207","ES" +"1406790208","1406791087","GB" +"1406791088","1406791103","ES" +"1406791104","1406791135","GB" +"1406791136","1406791423","ES" +"1406791424","1406791551","GB" +"1406791552","1406791679","ES" +"1406791680","1406791935","GB" +"1406791936","1406791967","DE" +"1406791968","1406792191","ES" +"1406792192","1406792703","GB" +"1406792704","1406792719","FR" +"1406792720","1406792735","GB" +"1406792736","1406793039","FR" +"1406793040","1406793215","ES" +"1406793216","1406793743","GB" +"1406793744","1406793759","DE" +"1406793760","1406793831","GB" +"1406793832","1406793839","ES" +"1406793840","1406793843","IL" +"1406793844","1406793847","ES" +"1406793848","1406793967","GB" +"1406793968","1406794239","ES" +"1406794240","1406794495","NL" +"1406794496","1406794751","ES" +"1406794752","1406795775","NL" +"1406795776","1406803967","GB" +"1406803968","1406812159","DE" +"1406812160","1406820351","SE" +"1406820352","1406828543","PL" +"1406828544","1406836735","GB" +"1406836736","1406844927","AT" +"1406844928","1406853119","MD" +"1406853120","1406861311","UA" +"1406861312","1406869503","RU" +"1406869504","1406877695","GB" +"1406877696","1406885887","NL" +"1406894080","1406902271","RU" +"1406902272","1406910463","AT" +"1406910464","1406918655","SE" +"1406918656","1406926335","RU" +"1406926336","1406926847","DE" +"1406926848","1406935039","IT" +"1406935040","1406951423","RU" +"1406951424","1406959615","PL" +"1406959616","1406964287","DE" +"1406964288","1406964351","NL" +"1406964352","1406964735","DE" +"1406964736","1406964927","US" +"1406964928","1406967295","DE" +"1406967296","1406967327","GB" +"1406967328","1406967343","NL" +"1406967344","1406967399","GB" +"1406967400","1406967407","DE" +"1406967408","1406967423","GB" +"1406967424","1406967551","DE" +"1406967552","1406967615","GB" +"1406967616","1406967807","DE" +"1406967808","1406975999","RU" +"1406976000","1406984191","IE" +"1406984192","1407000575","RU" +"1407000576","1407016959","DE" +"1407016960","1407025151","IT" +"1407025152","1407025663","DK" +"1407025664","1407025919","US" +"1407025920","1407033343","DK" +"1407033344","1407034367","UZ" +"1407034368","1407035391","RU" +"1407035392","1407041535","UZ" +"1407041536","1407049727","RU" +"1407049728","1407057919","DE" +"1407057920","1407066111","RU" +"1407066112","1407074303","LU" +"1407074304","1407089663","RU" +"1407089664","1407090687","US" +"1407090688","1407098879","CH" +"1407098880","1407107071","BG" +"1407107072","1407115263","RU" +"1407115264","1407119232","GB" +"1407119233","1407119237","US" +"1407119238","1407119498","GB" +"1407119499","1407119500","US" +"1407119501","1407119519","GB" +"1407119520","1407119520","US" +"1407119521","1407119549","GB" +"1407119550","1407119613","US" +"1407119614","1407120976","GB" +"1407120977","1407120980","US" +"1407120981","1407123455","GB" +"1407123456","1407131647","SE" +"1407131648","1407139839","NL" +"1407139840","1407148031","DE" +"1407148032","1407148295","GB" +"1407148296","1407148303","SE" +"1407148304","1407149695","GB" +"1407149696","1407149759","CY" +"1407149760","1407149791","SE" +"1407149792","1407151615","GB" +"1407151616","1407151871","SE" +"1407151872","1407152259","GB" +"1407152260","1407152263","IE" +"1407152264","1407152287","US" +"1407152288","1407152903","GB" +"1407152904","1407152927","NL" +"1407152928","1407154623","GB" +"1407154624","1407154631","SE" +"1407154632","1407154711","GB" +"1407154712","1407154719","SE" +"1407154720","1407156223","GB" +"1407156224","1407164415","LV" +"1407164416","1407172607","PT" +"1407172608","1407180799","GB" +"1407180800","1407188991","RU" +"1407188992","1407320063","IT" +"1407320064","1407451135","SE" +"1407451136","1407483903","BG" +"1407483904","1407516671","CH" +"1407516672","1407516679","GB" +"1407516680","1407516695","NG" +"1407516696","1407516703","GB" +"1407516704","1407516711","NG" +"1407516712","1407516727","GB" +"1407516728","1407516735","NG" +"1407516736","1407516743","UG" +"1407516744","1407516751","LR" +"1407516752","1407516767","GB" +"1407516768","1407516775","AO" +"1407516776","1407516783","GB" +"1407516784","1407516791","NG" +"1407516792","1407516807","GB" +"1407516808","1407516815","NG" +"1407516816","1407516847","GB" +"1407516848","1407516855","NG" +"1407516856","1407516863","GB" +"1407516864","1407516871","NG" +"1407516872","1407516879","GB" +"1407516880","1407516895","NG" +"1407516896","1407516911","GB" +"1407516912","1407516927","NG" +"1407516928","1407516943","GB" +"1407516944","1407516951","NG" +"1407516952","1407516959","GB" +"1407516960","1407516967","NG" +"1407516968","1407516975","GB" +"1407516976","1407516983","GN" +"1407516984","1407516991","KE" +"1407516992","1407516999","CD" +"1407517000","1407517023","GB" +"1407517024","1407517031","GQ" +"1407517032","1407517039","NG" +"1407517040","1407517135","GB" +"1407517136","1407517143","NG" +"1407517144","1407517151","GB" +"1407517152","1407517159","CD" +"1407517160","1407517167","ML" +"1407517168","1407517175","GB" +"1407517176","1407517183","NG" +"1407517184","1407517383","GB" +"1407517384","1407517391","CD" +"1407517392","1407517423","GB" +"1407517424","1407517431","US" +"1407517432","1407517439","NG" +"1407517440","1407517695","GB" +"1407517696","1407517887","NG" +"1407517888","1407517919","CD" +"1407517920","1407517951","GB" +"1407517952","1407518015","SL" +"1407518016","1407518023","GB" +"1407518024","1407518031","ZA" +"1407518032","1407518039","GB" +"1407518040","1407518055","CD" +"1407518056","1407518063","NG" +"1407518064","1407518079","GB" +"1407518080","1407518111","LR" +"1407518112","1407518127","NG" +"1407518128","1407518135","ZW" +"1407518136","1407518143","GH" +"1407518144","1407518151","GB" +"1407518152","1407518159","ZA" +"1407518160","1407518167","NG" +"1407518168","1407518175","CD" +"1407518176","1407518183","GB" +"1407518184","1407518199","NG" +"1407518200","1407518207","AE" +"1407518208","1407518215","LR" +"1407518216","1407518231","GB" +"1407518232","1407518255","NG" +"1407518256","1407518263","CD" +"1407518264","1407518269","GH" +"1407518270","1407518335","GB" +"1407518336","1407518343","CG" +"1407518344","1407518351","ZA" +"1407518352","1407518359","GB" +"1407518360","1407518367","NG" +"1407518368","1407518375","ZA" +"1407518376","1407518383","AO" +"1407518384","1407518831","GB" +"1407518832","1407518847","NG" +"1407518848","1407518911","FR" +"1407518912","1407518943","NG" +"1407518944","1407518975","GB" +"1407518976","1407518983","NG" +"1407518984","1407518991","GB" +"1407518992","1407518999","NG" +"1407519000","1407519015","GB" +"1407519016","1407519023","AO" +"1407519024","1407519031","GB" +"1407519032","1407519039","AO" +"1407519040","1407519047","NG" +"1407519048","1407519055","GB" +"1407519056","1407519063","NG" +"1407519064","1407519071","BJ" +"1407519072","1407519079","GB" +"1407519080","1407519095","NG" +"1407519096","1407519103","CM" +"1407519104","1407519111","NG" +"1407519112","1407519119","SL" +"1407519120","1407519127","GB" +"1407519128","1407519135","SL" +"1407519136","1407519143","GB" +"1407519144","1407519151","AO" +"1407519152","1407519159","GB" +"1407519160","1407519167","AO" +"1407519168","1407519175","GB" +"1407519176","1407519183","SL" +"1407519184","1407519191","GB" +"1407519192","1407519199","CD" +"1407519200","1407519207","GB" +"1407519208","1407519215","TG" +"1407519216","1407519223","NG" +"1407519224","1407519231","GB" +"1407519232","1407519615","NG" +"1407519616","1407519751","GB" +"1407519752","1407519759","NG" +"1407519760","1407519775","GB" +"1407519776","1407519783","CG" +"1407519784","1407519791","GB" +"1407519792","1407519799","NG" +"1407519800","1407519815","GB" +"1407519816","1407519823","NG" +"1407519824","1407519831","GB" +"1407519832","1407519839","SD" +"1407519840","1407519847","ML" +"1407519848","1407519855","NG" +"1407519856","1407519863","GB" +"1407519864","1407519871","NG" +"1407519872","1407519879","GB" +"1407519880","1407519887","NG" +"1407519888","1407519903","GB" +"1407519904","1407519911","NG" +"1407519912","1407519943","GB" +"1407519944","1407519959","CD" +"1407519960","1407519991","GB" +"1407519992","1407519999","NG" +"1407520000","1407520015","GB" +"1407520016","1407520023","NG" +"1407520024","1407520071","GB" +"1407520072","1407520079","CM" +"1407520080","1407520087","NG" +"1407520088","1407520103","GB" +"1407520104","1407520111","SD" +"1407520112","1407520119","GB" +"1407520120","1407520127","NE" +"1407520128","1407520143","GB" +"1407520144","1407520151","GN" +"1407520152","1407520152","GB" +"1407520153","1407520159","GN" +"1407520160","1407520167","GB" +"1407520168","1407520175","GN" +"1407520176","1407520207","GB" +"1407520208","1407520215","NG" +"1407520216","1407520223","CD" +"1407520224","1407520231","SD" +"1407520232","1407520239","GB" +"1407520240","1407520247","NE" +"1407520248","1407520271","GB" +"1407520272","1407520279","NG" +"1407520280","1407520311","GB" +"1407520312","1407520327","NG" +"1407520328","1407520335","SL" +"1407520336","1407520351","GB" +"1407520352","1407520359","NG" +"1407520360","1407520367","CD" +"1407520368","1407520375","GB" +"1407520376","1407520397","NG" +"1407520398","1407520415","GB" +"1407520416","1407520423","AO" +"1407520424","1407520439","GB" +"1407520440","1407520447","CD" +"1407520448","1407520463","NG" +"1407520464","1407520511","GB" +"1407520512","1407520527","CD" +"1407520528","1407520543","NG" +"1407520544","1407520551","GB" +"1407520552","1407520559","NG" +"1407520560","1407520567","SL" +"1407520568","1407520583","NG" +"1407520584","1407520591","GB" +"1407520592","1407520599","NG" +"1407520600","1407520607","GB" +"1407520608","1407520615","AO" +"1407520616","1407520623","GB" +"1407520624","1407520647","NG" +"1407520648","1407520655","ML" +"1407520656","1407520663","GA" +"1407520664","1407520687","GB" +"1407520688","1407520695","NG" +"1407520696","1407520711","GB" +"1407520712","1407520719","NG" +"1407520720","1407520735","GB" +"1407520736","1407520743","LR" +"1407520744","1407520751","NG" +"1407520752","1407520759","BF" +"1407520760","1407520767","CD" +"1407520768","1407520775","TZ" +"1407520776","1407520783","GB" +"1407520784","1407520791","SD" +"1407520792","1407520799","ZA" +"1407520800","1407520807","GB" +"1407520808","1407520815","MU" +"1407520816","1407520823","ZW" +"1407520824","1407520831","CI" +"1407520832","1407520839","SO" +"1407520840","1407520847","GB" +"1407520848","1407520855","ZM" +"1407520856","1407520863","GB" +"1407520864","1407520871","TZ" +"1407520872","1407520887","CD" +"1407520888","1407520895","TZ" +"1407520896","1407520903","AO" +"1407520904","1407520911","NG" +"1407520912","1407520919","ZW" +"1407520920","1407520927","IQ" +"1407520928","1407520935","GB" +"1407520936","1407520943","CD" +"1407520944","1407520951","TZ" +"1407520952","1407520959","ZM" +"1407520960","1407520975","GB" +"1407520976","1407520991","ZM" +"1407520992","1407520999","IQ" +"1407521000","1407521023","CD" +"1407521024","1407521031","ZM" +"1407521032","1407521047","GB" +"1407521048","1407521055","NG" +"1407521056","1407521063","KE" +"1407521064","1407521071","NG" +"1407521072","1407521079","TZ" +"1407521080","1407521087","UG" +"1407521088","1407521095","NG" +"1407521096","1407521103","GB" +"1407521104","1407521111","MZ" +"1407521112","1407521119","SL" +"1407521120","1407521127","GB" +"1407521128","1407521135","NG" +"1407521136","1407521143","GB" +"1407521144","1407521151","ZM" +"1407521152","1407521159","NG" +"1407521160","1407521167","ZW" +"1407521168","1407521175","GB" +"1407521176","1407521183","IQ" +"1407521184","1407521199","CD" +"1407521200","1407521207","GB" +"1407521208","1407521215","IQ" +"1407521216","1407521223","MU" +"1407521224","1407521231","TZ" +"1407521232","1407521239","LR" +"1407521240","1407521247","GB" +"1407521248","1407521279","GH" +"1407521280","1407521415","GB" +"1407521416","1407521423","LR" +"1407521424","1407521535","GB" +"1407521536","1407521709","NG" +"1407521710","1407521711","GB" +"1407521712","1407521727","NG" +"1407521728","1407521735","GB" +"1407521736","1407521751","NG" +"1407521752","1407521759","GB" +"1407521760","1407521767","NG" +"1407521768","1407521783","GB" +"1407521784","1407521791","NG" +"1407521792","1407522303","GB" +"1407522304","1407522559","A2" +"1407522560","1407522567","MZ" +"1407522568","1407522575","NG" +"1407522576","1407522583","GB" +"1407522584","1407522591","GL" +"1407522592","1407522599","UG" +"1407522600","1407522607","ZM" +"1407522608","1407522615","AO" +"1407522616","1407522631","GB" +"1407522632","1407522639","MW" +"1407522640","1407522647","GQ" +"1407522648","1407522655","NG" +"1407522656","1407522671","GB" +"1407522672","1407522679","ZM" +"1407522680","1407522687","SD" +"1407522688","1407522695","GB" +"1407522696","1407522703","GL" +"1407522704","1407522711","NG" +"1407522712","1407522719","BJ" +"1407522720","1407522727","GB" +"1407522728","1407522735","ZW" +"1407522736","1407522743","GB" +"1407522744","1407522751","NG" +"1407522752","1407522767","ZM" +"1407522768","1407522775","GB" +"1407522776","1407522783","TD" +"1407522784","1407522791","ZW" +"1407522792","1407522799","GB" +"1407522800","1407522807","NG" +"1407522808","1407522815","GB" +"1407522816","1407522823","CD" +"1407522824","1407522831","NG" +"1407522832","1407522839","MZ" +"1407522840","1407522847","NG" +"1407522848","1407522855","TZ" +"1407522856","1407522863","ZW" +"1407522864","1407522871","TZ" +"1407522872","1407522879","IQ" +"1407522880","1407522887","MU" +"1407522888","1407522895","GB" +"1407522896","1407522903","UG" +"1407522904","1407522911","KE" +"1407522912","1407522919","CG" +"1407522920","1407522927","GB" +"1407522928","1407522935","GR" +"1407522936","1407522967","GB" +"1407522968","1407522975","MU" +"1407522976","1407522983","CD" +"1407522984","1407522991","GB" +"1407522992","1407522999","CD" +"1407523000","1407523015","GB" +"1407523016","1407523023","KE" +"1407523024","1407523031","MU" +"1407523032","1407523047","GB" +"1407523048","1407523055","NG" +"1407523056","1407523063","MU" +"1407523064","1407523071","GB" +"1407523072","1407523079","CD" +"1407523080","1407523087","GB" +"1407523088","1407523088","NG" +"1407523089","1407523103","GB" +"1407523104","1407523111","UG" +"1407523112","1407523119","ZW" +"1407523120","1407523127","CD" +"1407523128","1407523135","GB" +"1407523136","1407523143","BJ" +"1407523144","1407523159","GB" +"1407523160","1407523167","LR" +"1407523168","1407523175","GB" +"1407523176","1407523183","UG" +"1407523184","1407523191","NG" +"1407523192","1407523207","GB" +"1407523208","1407523215","SD" +"1407523216","1407523223","BI" +"1407523224","1407523255","GB" +"1407523256","1407523263","NG" +"1407523264","1407523271","GB" +"1407523272","1407523279","US" +"1407523280","1407523287","ZW" +"1407523288","1407523295","NG" +"1407523296","1407523303","GR" +"1407523304","1407523311","NG" +"1407523312","1407523327","BJ" +"1407523328","1407523335","MW" +"1407523336","1407523351","GB" +"1407523352","1407523359","LU" +"1407523360","1407523535","GB" +"1407523536","1407523543","SO" +"1407523544","1407523551","NG" +"1407523552","1407523559","CM" +"1407523560","1407523567","KE" +"1407523568","1407523583","GB" +"1407523584","1407523591","IQ" +"1407523592","1407523607","GB" +"1407523608","1407523615","IQ" +"1407523616","1407523623","GB" +"1407523624","1407523655","IQ" +"1407523656","1407523663","GB" +"1407523664","1407523719","IQ" +"1407523720","1407523743","GB" +"1407523744","1407523751","IQ" +"1407523752","1407523799","GB" +"1407523800","1407523807","SY" +"1407523808","1407523831","GB" +"1407523832","1407523839","IQ" +"1407523840","1407524607","GB" +"1407524608","1407524615","ZW" +"1407524616","1407524623","CD" +"1407524624","1407524631","ZA" +"1407524632","1407524639","NG" +"1407524640","1407524647","KE" +"1407524648","1407524655","CD" +"1407524656","1407524663","ZW" +"1407524664","1407524671","CD" +"1407524672","1407524679","GB" +"1407524680","1407524687","LR" +"1407524688","1407524703","MZ" +"1407524704","1407524711","GB" +"1407524712","1407524719","ZW" +"1407524720","1407524727","GB" +"1407524728","1407524735","NG" +"1407524736","1407524743","GB" +"1407524744","1407524751","ZW" +"1407524752","1407524759","GB" +"1407524760","1407524767","CM" +"1407524768","1407524775","BW" +"1407524776","1407524783","GB" +"1407524784","1407524791","ZW" +"1407524792","1407524799","LR" +"1407524800","1407524839","GB" +"1407524840","1407524847","LR" +"1407524848","1407524855","GB" +"1407524856","1407524863","CD" +"1407524864","1407524879","GB" +"1407524880","1407524887","ZW" +"1407524888","1407524895","TZ" +"1407524896","1407524903","LR" +"1407524904","1407524911","GB" +"1407524912","1407524919","ZW" +"1407524920","1407524927","ZA" +"1407524928","1407524935","GB" +"1407524936","1407524943","GR" +"1407524944","1407524951","ZW" +"1407524952","1407524959","UG" +"1407524960","1407524967","TZ" +"1407524968","1407524975","NG" +"1407524976","1407524983","CD" +"1407524984","1407524991","ZA" +"1407524992","1407524999","TZ" +"1407525000","1407525007","GB" +"1407525008","1407525015","TZ" +"1407525016","1407525023","UG" +"1407525024","1407525031","US" +"1407525032","1407525039","IL" +"1407525040","1407525047","ZA" +"1407525048","1407525055","NG" +"1407525056","1407525063","ZA" +"1407525064","1407525071","SO" +"1407525072","1407525079","CD" +"1407525080","1407525087","GB" +"1407525088","1407525095","MW" +"1407525096","1407525103","ZW" +"1407525104","1407525111","NG" +"1407525112","1407525119","ZA" +"1407525120","1407525127","GB" +"1407525128","1407525135","SD" +"1407525136","1407525143","CD" +"1407525144","1407525151","TZ" +"1407525152","1407525167","CD" +"1407525168","1407525175","GB" +"1407525176","1407525183","CD" +"1407525184","1407525191","ZW" +"1407525192","1407525207","GB" +"1407525208","1407525215","CD" +"1407525216","1407525231","GB" +"1407525232","1407525255","CD" +"1407525256","1407525263","GB" +"1407525264","1407525287","CD" +"1407525288","1407525303","GB" +"1407525304","1407525319","CD" +"1407525320","1407525327","GB" +"1407525328","1407525343","CD" +"1407525344","1407525383","GB" +"1407525384","1407525391","CD" +"1407525392","1407525399","GB" +"1407525400","1407525407","KE" +"1407525408","1407525415","UG" +"1407525416","1407525423","GB" +"1407525424","1407525431","UG" +"1407525432","1407525471","GB" +"1407525472","1407525479","UG" +"1407525480","1407525487","CD" +"1407525488","1407525503","GB" +"1407525504","1407525511","UG" +"1407525512","1407525543","GB" +"1407525544","1407525551","KE" +"1407525552","1407525559","VG" +"1407525560","1407525567","GB" +"1407525568","1407525575","CD" +"1407525576","1407525583","LR" +"1407525584","1407525607","GB" +"1407525608","1407525615","CD" +"1407525616","1407525623","GB" +"1407525624","1407525631","SO" +"1407525632","1407525695","GB" +"1407525696","1407525703","IQ" +"1407525704","1407525751","GB" +"1407525752","1407525759","IQ" +"1407525760","1407526711","GB" +"1407526712","1407526719","GN" +"1407526720","1407528959","GB" +"1407528960","1407528991","SO" +"1407528992","1407529023","GB" +"1407529024","1407529087","US" +"1407529088","1407529095","SO" +"1407529096","1407529103","GB" +"1407529104","1407529111","SO" +"1407529112","1407529175","GB" +"1407529176","1407529178","SO" +"1407529179","1407529180","NG" +"1407529181","1407529183","SO" +"1407529184","1407529191","NG" +"1407529192","1407529207","GB" +"1407529208","1407529215","NG" +"1407529216","1407531007","GB" +"1407531008","1407531519","NG" +"1407531520","1407531543","CD" +"1407531544","1407531567","GB" +"1407531568","1407531575","CD" +"1407531576","1407531583","GQ" +"1407531584","1407531591","CD" +"1407531592","1407531607","GB" +"1407531608","1407531615","CD" +"1407531616","1407531623","GB" +"1407531624","1407531631","CD" +"1407531632","1407531639","ZM" +"1407531640","1407531647","CD" +"1407531648","1407531663","GB" +"1407531664","1407531671","MZ" +"1407531672","1407531687","CD" +"1407531688","1407531703","GB" +"1407531704","1407531711","SD" +"1407531712","1407531735","CD" +"1407531736","1407531743","ZW" +"1407531744","1407531751","GB" +"1407531752","1407531759","GQ" +"1407531760","1407531767","ZW" +"1407531768","1407531775","SD" +"1407531776","1407532543","GB" +"1407532544","1407532551","SO" +"1407532552","1407532559","AO" +"1407532560","1407532583","GB" +"1407532584","1407532591","ZW" +"1407532592","1407532615","GB" +"1407532616","1407532623","KG" +"1407532624","1407532639","GB" +"1407532640","1407532647","NG" +"1407532648","1407532663","GB" +"1407532664","1407532671","TZ" +"1407532672","1407532799","GB" +"1407532800","1407532927","SO" +"1407532928","1407533055","GB" +"1407533056","1407533311","NG" +"1407533312","1407533327","AO" +"1407533328","1407533343","GB" +"1407533344","1407533375","NG" +"1407533376","1407533407","CD" +"1407533408","1407533423","GB" +"1407533424","1407533567","GH" +"1407533568","1407533583","NG" +"1407533584","1407533591","NE" +"1407533592","1407533607","GB" +"1407533608","1407533663","NG" +"1407533664","1407533679","GB" +"1407533680","1407533695","NG" +"1407533696","1407533711","GB" +"1407533712","1407533719","ZW" +"1407533720","1407533727","SL" +"1407533728","1407533735","GB" +"1407533736","1407533743","GN" +"1407533744","1407533751","NG" +"1407533752","1407533759","SL" +"1407533760","1407533767","NG" +"1407533768","1407533815","GB" +"1407533816","1407533823","NG" +"1407533824","1407533831","LR" +"1407533832","1407533895","GB" +"1407533896","1407533903","CD" +"1407533904","1407533919","GB" +"1407533920","1407533927","BF" +"1407533928","1407534079","GB" +"1407534080","1407534335","AE" +"1407534336","1407534359","GB" +"1407534360","1407534383","NG" +"1407534384","1407534391","GR" +"1407534392","1407534399","AO" +"1407534400","1407534407","NG" +"1407534408","1407534415","CI" +"1407534416","1407534455","GB" +"1407534456","1407534463","NG" +"1407534464","1407534543","GB" +"1407534544","1407534559","GH" +"1407534560","1407534567","NG" +"1407534568","1407534575","GB" +"1407534576","1407534583","CD" +"1407534584","1407534719","GB" +"1407534720","1407534727","NG" +"1407534728","1407534735","GB" +"1407534736","1407534775","NG" +"1407534776","1407534783","ML" +"1407534784","1407534791","CD" +"1407534792","1407534847","GB" +"1407534848","1407535103","CM" +"1407535104","1407535615","GA" +"1407535616","1407535631","GB" +"1407535632","1407535639","SD" +"1407535640","1407535647","GB" +"1407535648","1407535655","NG" +"1407535656","1407535679","GB" +"1407535680","1407535687","GN" +"1407535688","1407535695","GB" +"1407535696","1407535703","GN" +"1407535704","1407535735","GB" +"1407535736","1407535743","NG" +"1407535744","1407536127","GB" +"1407536128","1407536639","GA" +"1407536640","1407536895","CD" +"1407536896","1407536903","GB" +"1407536904","1407536919","ZW" +"1407536920","1407536935","GB" +"1407536936","1407536943","NG" +"1407536944","1407536951","AO" +"1407536952","1407536983","GB" +"1407536984","1407536991","IQ" +"1407536992","1407537031","GB" +"1407537032","1407537039","NG" +"1407537040","1407537047","GB" +"1407537048","1407537055","NG" +"1407537056","1407537071","GH" +"1407537072","1407537079","GB" +"1407537080","1407537087","NG" +"1407537088","1407537095","GH" +"1407537096","1407537103","GB" +"1407537104","1407537111","NG" +"1407537112","1407537119","LR" +"1407537120","1407537135","GB" +"1407537136","1407537143","NG" +"1407537144","1407537151","GB" +"1407537152","1407537159","UG" +"1407537160","1407537183","GB" +"1407537184","1407537191","NG" +"1407537192","1407537207","GB" +"1407537208","1407537215","BE" +"1407537216","1407537239","GB" +"1407537240","1407537255","NG" +"1407537256","1407537263","GB" +"1407537264","1407537279","CM" +"1407537280","1407537287","GB" +"1407537288","1407537295","UG" +"1407537296","1407537303","GB" +"1407537304","1407537311","LR" +"1407537312","1407537319","GB" +"1407537320","1407537327","NG" +"1407537328","1407537343","GB" +"1407537344","1407537351","NG" +"1407537352","1407537367","GB" +"1407537368","1407537383","NG" +"1407537384","1407537431","GB" +"1407537432","1407537439","NG" +"1407537440","1407537447","LR" +"1407537448","1407537455","GB" +"1407537456","1407537463","AO" +"1407537464","1407537511","GB" +"1407537512","1407537519","LR" +"1407537520","1407537543","GB" +"1407537544","1407537551","AO" +"1407537552","1407537575","GB" +"1407537576","1407537591","NG" +"1407537592","1407537607","GB" +"1407537608","1407537615","CM" +"1407537616","1407537631","GB" +"1407537632","1407537639","NG" +"1407537640","1407537679","GB" +"1407537680","1407537687","IQ" +"1407537688","1407537703","GB" +"1407537704","1407537735","NG" +"1407537736","1407537751","GB" +"1407537752","1407537847","NG" +"1407537848","1407537855","GB" +"1407537856","1407537863","NG" +"1407537864","1407537871","TG" +"1407537872","1407537879","IQ" +"1407537880","1407537903","GB" +"1407537904","1407537911","TG" +"1407537912","1407537927","GB" +"1407537928","1407537935","SL" +"1407537936","1407537943","GH" +"1407537944","1407537951","TG" +"1407537952","1407537959","GB" +"1407537960","1407537967","TG" +"1407537968","1407537975","NG" +"1407537976","1407537983","GB" +"1407537984","1407537991","NG" +"1407537992","1407537999","GB" +"1407538000","1407538023","NG" +"1407538024","1407538031","GB" +"1407538032","1407538039","NG" +"1407538040","1407538047","CD" +"1407538048","1407538055","NG" +"1407538056","1407538063","GB" +"1407538064","1407538071","LU" +"1407538072","1407538079","GB" +"1407538080","1407538087","LR" +"1407538088","1407538095","AO" +"1407538096","1407538111","GB" +"1407538112","1407538119","LR" +"1407538120","1407538127","NG" +"1407538128","1407538143","GB" +"1407538144","1407538151","GN" +"1407538152","1407538167","GB" +"1407538168","1407538175","IQ" +"1407538176","1407538199","GB" +"1407538200","1407538271","NG" +"1407538272","1407538279","CO" +"1407538280","1407538287","GB" +"1407538288","1407538295","NG" +"1407538296","1407538303","AO" +"1407538304","1407538311","NG" +"1407538312","1407538319","CD" +"1407538320","1407538327","GB" +"1407538328","1407538335","CD" +"1407538336","1407538343","GB" +"1407538344","1407538351","CD" +"1407538352","1407538383","GB" +"1407538384","1407538391","CM" +"1407538392","1407538407","GB" +"1407538408","1407538415","NG" +"1407538416","1407538423","GB" +"1407538424","1407538431","NG" +"1407538432","1407538439","GB" +"1407538440","1407538447","NG" +"1407538448","1407538463","GB" +"1407538464","1407538471","ZM" +"1407538472","1407538479","NG" +"1407538480","1407538663","GB" +"1407538664","1407538679","NG" +"1407538680","1407538863","GB" +"1407538864","1407538879","GE" +"1407538880","1407538887","GB" +"1407538888","1407538895","NG" +"1407538896","1407538911","GB" +"1407538912","1407538919","GH" +"1407538920","1407538927","GB" +"1407538928","1407538935","NG" +"1407538936","1407538943","GH" +"1407538944","1407538975","GB" +"1407538976","1407538983","NG" +"1407538984","1407538991","SL" +"1407538992","1407538999","GB" +"1407539000","1407539007","NG" +"1407539008","1407539055","GB" +"1407539056","1407539063","NG" +"1407539064","1407539103","GB" +"1407539104","1407539111","NG" +"1407539112","1407539143","GB" +"1407539144","1407539151","NG" +"1407539152","1407539167","GB" +"1407539168","1407539175","TD" +"1407539176","1407539183","GH" +"1407539184","1407539191","GB" +"1407539192","1407539199","NG" +"1407539200","1407539455","GE" +"1407539456","1407539711","GB" +"1407539712","1407539719","BE" +"1407539720","1407539727","GB" +"1407539728","1407539735","GR" +"1407539736","1407539743","NG" +"1407539744","1407539751","GB" +"1407539752","1407539759","NG" +"1407539760","1407539767","GB" +"1407539768","1407539775","GR" +"1407539776","1407539783","GB" +"1407539784","1407539791","GR" +"1407539792","1407539799","NG" +"1407539800","1407539831","GB" +"1407539832","1407539839","NG" +"1407539840","1407539855","GB" +"1407539856","1407539863","CD" +"1407539864","1407539879","NG" +"1407539880","1407539887","GB" +"1407539888","1407539895","NG" +"1407539896","1407539911","GB" +"1407539912","1407539927","NG" +"1407539928","1407539935","GB" +"1407539936","1407539943","GN" +"1407539944","1407539951","GB" +"1407539952","1407539959","LR" +"1407539960","1407539967","GB" +"1407539968","1407539975","CD" +"1407539976","1407540055","GB" +"1407540056","1407540063","NG" +"1407540064","1407540071","GB" +"1407540072","1407540079","NG" +"1407540080","1407540111","GB" +"1407540112","1407540119","TG" +"1407540120","1407540135","GB" +"1407540136","1407540143","NG" +"1407540144","1407540159","GB" +"1407540160","1407540167","CD" +"1407540168","1407540199","GB" +"1407540200","1407540215","CD" +"1407540216","1407540223","GB" +"1407540224","1407540231","AO" +"1407540232","1407540239","GB" +"1407540240","1407540247","NG" +"1407540248","1407540271","GB" +"1407540272","1407540279","LR" +"1407540280","1407540287","NG" +"1407540288","1407540295","CD" +"1407540296","1407540303","NG" +"1407540304","1407540311","AO" +"1407540312","1407540319","GB" +"1407540320","1407540327","CD" +"1407540328","1407540343","GB" +"1407540344","1407540351","CF" +"1407540352","1407540359","TD" +"1407540360","1407540367","GB" +"1407540368","1407540375","LR" +"1407540376","1407540415","GB" +"1407540416","1407540423","NG" +"1407540424","1407540431","GB" +"1407540432","1407540439","CI" +"1407540440","1407540447","GB" +"1407540448","1407540455","LR" +"1407540456","1407540463","GB" +"1407540464","1407540471","MU" +"1407540472","1407540479","GB" +"1407540480","1407540487","CM" +"1407540488","1407540551","GB" +"1407540552","1407540559","NG" +"1407540560","1407540615","GB" +"1407540616","1407540623","SD" +"1407540624","1407540655","GB" +"1407540656","1407540663","CD" +"1407540664","1407540695","GB" +"1407540696","1407540703","NG" +"1407540704","1407540767","GB" +"1407540768","1407540775","NG" +"1407540776","1407540991","GB" +"1407540992","1407540999","CD" +"1407541000","1407541023","GB" +"1407541024","1407541031","LR" +"1407541032","1407541039","NG" +"1407541040","1407541047","GB" +"1407541048","1407541055","NG" +"1407541056","1407541063","GB" +"1407541064","1407541071","NG" +"1407541072","1407541095","GB" +"1407541096","1407541103","GQ" +"1407541104","1407541175","GB" +"1407541176","1407541183","NG" +"1407541184","1407541191","GB" +"1407541192","1407541199","NG" +"1407541200","1407541471","GB" +"1407541472","1407541495","NG" +"1407541496","1407541535","GB" +"1407541536","1407541543","CM" +"1407541544","1407541551","GB" +"1407541552","1407541559","NG" +"1407541560","1407541567","GH" +"1407541568","1407541711","GB" +"1407541712","1407541719","NG" +"1407541720","1407541727","GB" +"1407541728","1407541735","NG" +"1407541736","1407541751","GB" +"1407541752","1407541759","NG" +"1407541760","1407541887","GB" +"1407541888","1407542143","NG" +"1407542144","1407542543","GB" +"1407542544","1407542551","LR" +"1407542552","1407542575","GB" +"1407542576","1407542583","CD" +"1407542584","1407542599","GB" +"1407542600","1407542607","TG" +"1407542608","1407542623","GB" +"1407542624","1407542631","BJ" +"1407542632","1407542639","NG" +"1407542640","1407542655","GB" +"1407542656","1407542663","SL" +"1407542664","1407542671","GB" +"1407542672","1407542679","CM" +"1407542680","1407542687","NG" +"1407542688","1407542695","CD" +"1407542696","1407542703","NG" +"1407542704","1407542727","GB" +"1407542728","1407542735","NG" +"1407542736","1407542767","GB" +"1407542768","1407542775","GA" +"1407542776","1407542791","GB" +"1407542792","1407542799","NG" +"1407542800","1407542847","GB" +"1407542848","1407542863","NG" +"1407542864","1407542903","GB" +"1407542904","1407542911","CD" +"1407542912","1407543039","AT" +"1407543040","1407543167","GB" +"1407543168","1407543183","GH" +"1407543184","1407543191","GB" +"1407543192","1407543239","NG" +"1407543240","1407543255","GB" +"1407543256","1407543263","NG" +"1407543264","1407543279","GB" +"1407543280","1407543287","NG" +"1407543288","1407545855","GB" +"1407545856","1407545863","CI" +"1407545864","1407545871","GB" +"1407545872","1407545879","CD" +"1407545880","1407545887","GB" +"1407545888","1407545895","NG" +"1407545896","1407545911","GB" +"1407545912","1407545919","NG" +"1407545920","1407545935","GB" +"1407545936","1407545943","ZA" +"1407545944","1407545951","GB" +"1407545952","1407545959","BJ" +"1407545960","1407545967","GB" +"1407545968","1407545975","GQ" +"1407545976","1407545991","GB" +"1407545992","1407545999","GN" +"1407546000","1407546023","GB" +"1407546024","1407546047","NG" +"1407546048","1407546063","GB" +"1407546064","1407546071","ML" +"1407546072","1407546367","GB" +"1407546368","1407546495","AE" +"1407546496","1407546863","GB" +"1407546864","1407546879","LR" +"1407546880","1407546959","GB" +"1407546960","1407546967","GH" +"1407546968","1407547039","GB" +"1407547040","1407547047","GN" +"1407547048","1407547063","GB" +"1407547064","1407547071","NG" +"1407547072","1407547167","GB" +"1407547168","1407547175","NG" +"1407547176","1407547183","GH" +"1407547184","1407547191","UG" +"1407547192","1407547199","NG" +"1407547200","1407547207","AO" +"1407547208","1407547215","TD" +"1407547216","1407547239","GB" +"1407547240","1407547255","SL" +"1407547256","1407547263","GB" +"1407547264","1407547271","SL" +"1407547272","1407547303","GB" +"1407547304","1407547311","SL" +"1407547312","1407547327","NG" +"1407547328","1407547335","GB" +"1407547336","1407547343","CI" +"1407547344","1407547375","NG" +"1407547376","1407547383","GB" +"1407547384","1407547911","NG" +"1407547912","1407547919","GB" +"1407547920","1407547927","CG" +"1407547928","1407547943","GB" +"1407547944","1407547951","BJ" +"1407547952","1407547983","GB" +"1407547984","1407547999","BJ" +"1407548000","1407548023","GB" +"1407548024","1407548031","NG" +"1407548032","1407548047","GB" +"1407548048","1407548055","GA" +"1407548056","1407548063","NG" +"1407548064","1407548111","GB" +"1407548112","1407548119","CI" +"1407548120","1407548127","GB" +"1407548128","1407548143","CM" +"1407548144","1407548151","GB" +"1407548152","1407548415","NG" +"1407548416","1407548443","GE" +"1407548444","1407548447","NE" +"1407548448","1407548543","GE" +"1407548544","1407548711","GB" +"1407548712","1407548719","CD" +"1407548720","1407548927","GB" +"1407548928","1407548959","NG" +"1407548960","1407548967","GB" +"1407548968","1407548975","CM" +"1407548976","1407548983","GB" +"1407548984","1407548991","CD" +"1407548992","1407549055","GB" +"1407549056","1407549063","NG" +"1407549064","1407549071","GA" +"1407549072","1407549087","GB" +"1407549088","1407549095","LR" +"1407549096","1407549119","GB" +"1407549120","1407549127","LR" +"1407549128","1407549143","GB" +"1407549144","1407549159","LR" +"1407549160","1407549175","GB" +"1407549176","1407549183","NG" +"1407549184","1407549439","GB" +"1407549440","1407582207","RU" +"1407582208","1407614975","PL" +"1407614976","1407680511","ES" +"1407680512","1407680695","FR" +"1407680696","1407680703","GB" +"1407680704","1407680831","FR" +"1407680832","1407681023","GB" +"1407681024","1407681291","ES" +"1407681292","1407681295","GB" +"1407681296","1407681535","ES" +"1407681536","1407681639","FR" +"1407681640","1407681983","GB" +"1407681984","1407681999","ES" +"1407682000","1407682303","GB" +"1407682304","1407682559","FR" +"1407682560","1407682879","GB" +"1407682880","1407682911","FI" +"1407682912","1407683431","GB" +"1407683432","1407683439","IL" +"1407683440","1407683471","GB" +"1407683472","1407683479","IL" +"1407683480","1407687423","GB" +"1407687424","1407687679","ES" +"1407687680","1407693159","GB" +"1407693160","1407693167","ES" +"1407693168","1407695215","GB" +"1407695216","1407695223","ES" +"1407695224","1407696487","GB" +"1407696488","1407696495","AU" +"1407696496","1407700271","GB" +"1407700272","1407700287","DE" +"1407700288","1407702015","GB" +"1407702016","1407702271","FR" +"1407702272","1407702783","GB" +"1407702784","1407702911","FR" +"1407702912","1407702927","GB" +"1407702928","1407702975","FR" +"1407702976","1407703039","GB" +"1407703040","1407703455","FR" +"1407703456","1407703535","GB" +"1407703536","1407703871","FR" +"1407703872","1407703935","GB" +"1407703936","1407704039","FR" +"1407704040","1407704063","GB" +"1407704064","1407704127","FR" +"1407704128","1407704191","GB" +"1407704192","1407704319","FR" +"1407704320","1407704383","GB" +"1407704384","1407704447","FR" +"1407704448","1407705207","GB" +"1407705208","1407705215","ES" +"1407705216","1407705599","GB" +"1407705600","1407705727","FR" +"1407705728","1407705759","GB" +"1407705760","1407705791","FR" +"1407705792","1407706367","GB" +"1407706368","1407706423","FR" +"1407706424","1407706431","GB" +"1407706432","1407706559","FR" +"1407706560","1407707703","GB" +"1407707704","1407707839","CH" +"1407707840","1407707903","GB" +"1407707904","1407707935","CH" +"1407707936","1407709183","GB" +"1407709184","1407709695","DE" +"1407709696","1407710207","GB" +"1407710208","1407710239","ES" +"1407710240","1407710491","GB" +"1407710492","1407710495","IL" +"1407710496","1407710651","GB" +"1407710652","1407710655","IL" +"1407710656","1407710975","GB" +"1407710976","1407711319","FR" +"1407711320","1407711327","GB" +"1407711328","1407711743","FR" +"1407711744","1407712207","GB" +"1407712208","1407712223","FR" +"1407712224","1407712767","GB" +"1407712768","1407712863","DE" +"1407712864","1407712887","GB" +"1407712888","1407712911","DE" +"1407712912","1407712919","GB" +"1407712920","1407712959","DE" +"1407712960","1407712975","GB" +"1407712976","1407713239","DE" +"1407713240","1407713247","GB" +"1407713248","1407713279","DE" +"1407713280","1407778815","NL" +"1407778816","1407844351","SE" +"1407844352","1407909887","RU" +"1407909888","1407975423","GR" +"1407975424","1408013647","DE" +"1408013648","1408013655","A2" +"1408013656","1408015312","DE" +"1408015313","1408015313","A2" +"1408015314","1408035046","DE" +"1408035047","1408035047","A2" +"1408035048","1408040959","DE" +"1408040960","1408106495","RU" +"1408106496","1408172031","PL" +"1408172032","1408237567","RU" +"1408237568","1408270335","CZ" +"1408270336","1408303103","PT" +"1408303104","1408335871","LV" +"1408335872","1408336879","SE" +"1408336880","1408336887","FI" +"1408336888","1408337695","SE" +"1408337696","1408337703","DK" +"1408337704","1408338807","SE" +"1408338808","1408338815","DK" +"1408338816","1408338959","SE" +"1408338960","1408338967","NO" +"1408338968","1408340047","SE" +"1408340048","1408340055","NO" +"1408340056","1408353815","SE" +"1408353816","1408353823","DK" +"1408353824","1408360935","SE" +"1408360936","1408360943","DK" +"1408360944","1408368639","SE" +"1408368640","1408376831","NO" +"1408376832","1408385023","DE" +"1408385024","1408393215","PL" +"1408393216","1408397311","UA" +"1408397312","1408401407","PL" +"1408401408","1408434175","RU" +"1408434176","1408436223","DE" +"1408436224","1408438271","LU" +"1408438272","1408440319","FR" +"1408440320","1408442367","SE" +"1408442368","1408444415","PL" +"1408444416","1408450559","DE" +"1408450560","1408454655","RU" +"1408454656","1408456703","DE" +"1408456704","1408458751","LV" +"1408458752","1408460799","GB" +"1408460800","1408462847","PL" +"1408462848","1408464895","DE" +"1408464896","1408466943","RO" +"1408466944","1408499711","NO" +"1408499712","1408532479","PS" +"1408532480","1408567919","GB" +"1408567920","1408567927","IE" +"1408567928","1408574847","GB" +"1408574848","1408574911","IE" +"1408574912","1408575231","GB" +"1408575232","1408575239","IE" +"1408575240","1408579583","GB" +"1408579584","1408579839","IE" +"1408579840","1408584191","GB" +"1408584192","1408584703","IE" +"1408584704","1408585407","GB" +"1408585408","1408585471","IE" +"1408585472","1408590367","GB" +"1408590368","1408590383","IM" +"1408590384","1408590847","GB" +"1408590848","1408591103","BE" +"1408591104","1408597503","GB" +"1408597504","1408598015","IE" +"1408598016","1408630783","FI" +"1408630784","1408634879","RO" +"1408634880","1408663551","DE" +"1408663552","1408696319","RU" +"1408696320","1408729087","NL" +"1408729088","1408761855","ES" +"1408761856","1409286143","SE" +"1409286144","1409362431","HU" +"1409362432","1409363967","BG" +"1409363968","1409380655","HU" +"1409380656","1409380673","RO" +"1409380674","1409413119","HU" +"1409413120","1409415167","BG" +"1409415168","1409430271","HU" +"1409430272","1409430783","RO" +"1409430784","1409548287","HU" +"1409548288","1409810431","FR" +"1409810432","1409941503","GB" +"1409941504","1410007039","PL" +"1410007040","1410007551","A2" +"1410007552","1410007807","IR" +"1410007808","1410008575","A2" +"1410008576","1410008607","AE" +"1410008608","1410008831","A2" +"1410008832","1410009087","US" +"1410009088","1410009343","A2" +"1410009344","1410009479","US" +"1410009480","1410009487","A2" +"1410009488","1410009535","GI" +"1410009536","1410010399","A2" +"1410010400","1410010431","LY" +"1410010432","1410010543","A2" +"1410010544","1410010575","LY" +"1410010576","1410010599","A2" +"1410010600","1410010607","IR" +"1410010608","1410010623","LY" +"1410010624","1410010639","DE" +"1410010640","1410010687","A2" +"1410010688","1410010703","IR" +"1410010704","1410010719","A2" +"1410010720","1410010751","LY" +"1410010752","1410010823","A2" +"1410010824","1410010831","IR" +"1410010832","1410010879","A2" +"1410010880","1410011135","IR" +"1410011136","1410011647","DE" +"1410011648","1410012671","A2" +"1410012672","1410013183","DE" +"1410013184","1410013439","ES" +"1410013440","1410013471","IR" +"1410013472","1410013535","AE" +"1410013536","1410013567","IR" +"1410013568","1410013631","AE" +"1410013632","1410013663","IR" +"1410013664","1410013695","AE" +"1410013696","1410013727","KW" +"1410013728","1410013759","AE" +"1410013760","1410013791","IR" +"1410013792","1410013823","A2" +"1410013824","1410013887","AF" +"1410013888","1410013919","A2" +"1410013920","1410013951","KW" +"1410013952","1410013983","AE" +"1410013984","1410014015","IR" +"1410014016","1410014047","KW" +"1410014048","1410014079","AE" +"1410014080","1410014207","A2" +"1410014208","1410014239","AE" +"1410014240","1410014335","IR" +"1410014336","1410014399","AE" +"1410014400","1410014463","ES" +"1410014464","1410014495","KW" +"1410014496","1410014591","IR" +"1410014592","1410014885","A2" +"1410014886","1410014886","ES" +"1410014887","1410014895","A2" +"1410014896","1410014927","IR" +"1410014928","1410014935","PA" +"1410014936","1410014943","IR" +"1410014944","1410014951","AE" +"1410014952","1410014966","A2" +"1410014967","1410014967","IR" +"1410014968","1410014968","A2" +"1410014969","1410014969","IR" +"1410014970","1410014972","A2" +"1410014973","1410014974","AE" +"1410014975","1410015007","A2" +"1410015008","1410015103","IR" +"1410015104","1410015135","ES" +"1410015136","1410015263","IR" +"1410015264","1410015295","KW" +"1410015296","1410015423","IR" +"1410015424","1410015487","AE" +"1410015488","1410015743","AF" +"1410015744","1410015871","IR" +"1410015872","1410015935","AE" +"1410015936","1410016255","IR" +"1410016256","1410016319","AE" +"1410016320","1410016383","ES" +"1410016384","1410016415","IR" +"1410016416","1410016447","PA" +"1410016448","1410016543","IR" +"1410016544","1410016575","A2" +"1410016576","1410016607","AE" +"1410016608","1410016639","PA" +"1410016640","1410016671","IR" +"1410016672","1410016703","PA" +"1410016704","1410016767","A2" +"1410016768","1410016831","IR" +"1410016832","1410016863","AE" +"1410016864","1410016895","IR" +"1410016896","1410017023","AE" +"1410017024","1410017055","PA" +"1410017056","1410017119","IR" +"1410017120","1410017279","A2" +"1410017280","1410017407","IR" +"1410017408","1410017791","A2" +"1410017792","1410018047","IR" +"1410018048","1410018303","A2" +"1410018304","1410018559","AE" +"1410018560","1410018591","A2" +"1410018592","1410018607","IR" +"1410018608","1410018623","LY" +"1410018624","1410020103","A2" +"1410020104","1410020111","US" +"1410020112","1410021375","A2" +"1410021376","1410021407","IR" +"1410021408","1410021631","A2" +"1410021632","1410021663","IR" +"1410021664","1410021791","A2" +"1410021792","1410021823","IR" +"1410021824","1410022527","A2" +"1410022528","1410022591","AE" +"1410022592","1410022655","IR" +"1410022656","1410022911","A2" +"1410022912","1410023423","IR" +"1410023424","1410024287","A2" +"1410024288","1410024319","IR" +"1410024320","1410024447","A2" +"1410024448","1410025087","IR" +"1410025088","1410025215","A2" +"1410025216","1410025247","ES" +"1410025248","1410025279","A2" +"1410025280","1410025311","AE" +"1410025312","1410025343","ES" +"1410025344","1410025407","IR" +"1410025408","1410025439","AE" +"1410025440","1410025503","A2" +"1410025504","1410025519","AE" +"1410025520","1410025535","IR" +"1410025536","1410025567","ES" +"1410025568","1410025599","A2" +"1410025600","1410025727","IR" +"1410025728","1410025759","AE" +"1410025760","1410025791","A2" +"1410025792","1410025823","AE" +"1410025824","1410025855","IR" +"1410025856","1410025983","A2" +"1410025984","1410026015","IR" +"1410026016","1410026047","AE" +"1410026048","1410026111","ES" +"1410026112","1410026143","A2" +"1410026144","1410026175","IR" +"1410026176","1410026207","AE" +"1410026208","1410026239","IR" +"1410026240","1410026367","AE" +"1410026368","1410026431","IR" +"1410026432","1410026463","A2" +"1410026464","1410026751","IR" +"1410026752","1410026815","CA" +"1410026816","1410026847","A2" +"1410026848","1410026911","IR" +"1410026912","1410026943","A2" +"1410026944","1410027006","IR" +"1410027007","1410027007","A2" +"1410027008","1410027263","KW" +"1410027264","1410027519","AF" +"1410027520","1410027711","A2" +"1410027712","1410027775","IR" +"1410027776","1410028799","A2" +"1410028800","1410028831","IR" +"1410028832","1410035327","A2" +"1410035328","1410035343","IR" +"1410035344","1410035967","A2" +"1410035968","1410036223","US" +"1410036224","1410036735","A2" +"1410036736","1410036751","PA" +"1410036752","1410040319","A2" +"1410040320","1410040575","US" +"1410040576","1410042367","A2" +"1410042368","1410042623","US" +"1410042624","1410042815","A2" +"1410042816","1410042831","US" +"1410042832","1410043169","A2" +"1410043170","1410043171","US" +"1410043172","1410043172","A2" +"1410043173","1410043173","US" +"1410043174","1410045183","A2" +"1410045184","1410045439","IQ" +"1410045440","1410071815","A2" +"1410071816","1410071839","DE" +"1410071840","1410072319","A2" +"1410072320","1410072575","AE" +"1410072576","1410203647","GB" +"1410203648","1410204439","FR" +"1410204440","1410204455","IT" +"1410204456","1410204479","FR" +"1410204480","1410204495","PT" +"1410204496","1410212863","FR" +"1410212864","1410213119","GB" +"1410213120","1410225431","FR" +"1410225432","1410225439","GB" +"1410225440","1410233575","FR" +"1410233576","1410233583","IE" +"1410233584","1410234839","FR" +"1410234840","1410234847","A2" +"1410234848","1410239943","FR" +"1410239944","1410239951","GB" +"1410239952","1410241759","FR" +"1410241760","1410241775","GB" +"1410241776","1410257495","FR" +"1410257496","1410257503","GB" +"1410257504","1410261663","FR" +"1410261664","1410261671","GB" +"1410261672","1410262023","FR" +"1410262024","1410262031","BE" +"1410262032","1410262391","FR" +"1410262392","1410262399","GB" +"1410262400","1410262799","FR" +"1410262800","1410262815","DE" +"1410262816","1410266303","FR" +"1410266304","1410266311","IE" +"1410266312","1410267039","FR" +"1410267040","1410267055","ES" +"1410267056","1410267071","GB" +"1410267072","1410267087","IT" +"1410267088","1410269183","FR" +"1410269184","1410278399","LT" +"1410278400","1410278655","LV" +"1410278656","1410318335","LT" +"1410318336","1410319359","LV" +"1410319360","1410334719","LT" +"1410334720","1410341887","ES" +"1410341888","1410342655","MA" +"1410342656","1410342911","ES" +"1410342912","1410351103","SK" +"1410351104","1410353039","CH" +"1410353040","1410353047","NI" +"1410353048","1410353143","CH" +"1410353144","1410353151","NI" +"1410353152","1410354175","CH" +"1410354176","1410354431","FR" +"1410354432","1410359295","CH" +"1410359296","1410367487","CZ" +"1410367488","1410375679","RU" +"1410375680","1410375935","DK" +"1410375936","1410376191","CH" +"1410376192","1410383871","DK" +"1410383872","1410392063","NO" +"1410392064","1410397183","DE" +"1410397184","1410397439","PL" +"1410397440","1410399487","DE" +"1410399488","1410399743","TR" +"1410399744","1410400063","DE" +"1410400064","1410400127","TR" +"1410400128","1410400255","DE" +"1410400256","1410408447","RU" +"1410408448","1410416639","IT" +"1410416640","1410424831","TR" +"1410424832","1410433023","DE" +"1410433024","1410441215","BE" +"1410441216","1410443295","DE" +"1410443296","1410443327","IR" +"1410443328","1410443383","DE" +"1410443384","1410443387","US" +"1410443388","1410449407","DE" +"1410449408","1410457599","SE" +"1410457600","1410465791","RU" +"1410465792","1410473983","ES" +"1410473984","1410490367","JO" +"1410490368","1410498559","RU" +"1410498560","1410502803","IT" +"1410502804","1410502807","US" +"1410502808","1410506751","IT" +"1410506752","1410514943","IE" +"1410514944","1410523135","GB" +"1410523136","1410531327","PT" +"1410531328","1410539519","DE" +"1410539520","1410540159","GB" +"1410540160","1410540191","DE" +"1410540192","1410544415","GB" +"1410544416","1410544431","DE" +"1410544432","1410547711","GB" +"1410547712","1410555903","CZ" +"1410555904","1410564095","GB" +"1410564096","1410572287","SE" +"1410572288","1410572863","DE" +"1410572864","1410572895","RU" +"1410572896","1410573407","DE" +"1410573408","1410573439","RU" +"1410573440","1410573695","DE" +"1410573696","1410573711","RU" +"1410573712","1410573759","DE" +"1410573760","1410573775","RU" +"1410573776","1410573799","DE" +"1410573800","1410573815","IT" +"1410573816","1410573823","RU" +"1410573824","1410574511","DE" +"1410574512","1410574519","CH" +"1410574520","1410574527","DE" +"1410574528","1410574543","IT" +"1410574544","1410574559","DE" +"1410574560","1410574575","RU" +"1410574576","1410574583","DE" +"1410574584","1410574591","RU" +"1410574592","1410574719","DE" +"1410574720","1410574727","RU" +"1410574728","1410574847","DE" +"1410574848","1410574853","BR" +"1410574854","1410574854","DE" +"1410574855","1410574975","BR" +"1410574976","1410575071","DE" +"1410575072","1410575087","IT" +"1410575088","1410575103","RU" +"1410575104","1410575111","US" +"1410575112","1410575119","IT" +"1410575120","1410575135","DE" +"1410575136","1410575167","RU" +"1410575168","1410575231","DE" +"1410575232","1410575263","CH" +"1410575264","1410575279","DE" +"1410575280","1410575295","IL" +"1410575296","1410575327","IT" +"1410575328","1410575359","SI" +"1410575360","1410575551","DE" +"1410575552","1410575615","IT" +"1410575616","1410575775","DE" +"1410575776","1410575791","RU" +"1410575792","1410575807","DE" +"1410575808","1410575823","IL" +"1410575824","1410575839","BG" +"1410575840","1410575855","IT" +"1410575856","1410575871","DE" +"1410575872","1410575999","DK" +"1410576000","1410576255","DE" +"1410576256","1410576319","IT" +"1410576320","1410576351","DE" +"1410576352","1410576383","IT" +"1410576384","1410588671","DE" +"1410588672","1410596863","GB" +"1410596864","1410605055","ES" +"1410605056","1410613247","CH" +"1410613248","1410621439","AL" +"1410621440","1410629631","NO" +"1410629632","1410637823","FI" +"1410637824","1410646015","AT" +"1410646016","1410647807","GB" +"1410647808","1410648319","IE" +"1410648320","1410654207","GB" +"1410654208","1410662399","SI" +"1410662400","1410670591","HU" +"1410670592","1410672639","DE" +"1410672640","1410673663","US" +"1410673664","1410675967","DE" +"1410675968","1410676223","US" +"1410676224","1410678783","DE" +"1410678784","1410686975","RU" +"1410686976","1410695167","CZ" +"1410695168","1410703359","GB" +"1410703360","1410711551","ES" +"1410711552","1410719743","BG" +"1410719744","1410727935","RU" +"1410727936","1410736127","BG" +"1410736128","1410736383","AL" +"1410736384","1410736384","RS" +"1410736385","1410736638","AL" +"1410736639","1410736639","RS" +"1410736640","1410736751","AL" +"1410736752","1410736767","RS" +"1410736768","1410736895","AL" +"1410736896","1410736896","RS" +"1410736897","1410736911","AL" +"1410736912","1410736928","RS" +"1410736929","1410737407","AL" +"1410737408","1410737415","RS" +"1410737416","1410737423","AL" +"1410737424","1410737431","RS" +"1410737432","1410737439","AL" +"1410737440","1410737535","RS" +"1410737536","1410737663","AL" +"1410737664","1410737664","RS" +"1410737665","1410737918","AL" +"1410737919","1410737920","RS" +"1410737921","1410738174","AL" +"1410738175","1410738175","RS" +"1410738176","1410738215","AL" +"1410738216","1410738223","RS" +"1410738224","1410738247","AL" +"1410738248","1410738263","RS" +"1410738264","1410738295","AL" +"1410738296","1410738304","RS" +"1410738305","1410738310","AL" +"1410738311","1410738320","RS" +"1410738321","1410738326","AL" +"1410738327","1410738328","RS" +"1410738329","1410738334","AL" +"1410738335","1410738351","RS" +"1410738352","1410738359","AL" +"1410738360","1410738384","RS" +"1410738385","1410738390","AL" +"1410738391","1410738431","RS" +"1410738432","1410738447","AL" +"1410738448","1410738559","RS" +"1410738560","1410738718","AL" +"1410738719","1410738720","RS" +"1410738721","1410738734","AL" +"1410738735","1410738735","RS" +"1410738736","1410738751","AL" +"1410738752","1410738752","RS" +"1410738753","1410738766","AL" +"1410738767","1410738768","RS" +"1410738769","1410738782","AL" +"1410738783","1410738800","RS" +"1410738801","1410738814","AL" +"1410738815","1410738816","RS" +"1410738817","1410738830","AL" +"1410738831","1410738832","RS" +"1410738833","1410738846","AL" +"1410738847","1410738864","RS" +"1410738865","1410738878","AL" +"1410738879","1410738896","RS" +"1410738897","1410738902","AL" +"1410738903","1410738912","RS" +"1410738913","1410738927","AL" +"1410738928","1410738943","RS" +"1410738944","1410738967","AL" +"1410738968","1410739023","RS" +"1410739024","1410739031","AL" +"1410739032","1410739200","RS" +"1410739201","1410739326","AL" +"1410739327","1410739328","RS" +"1410739329","1410739390","AL" +"1410739391","1410739391","RS" +"1410739392","1410739471","AL" +"1410739472","1410739472","RS" +"1410739473","1410739486","AL" +"1410739487","1410739520","RS" +"1410739521","1410739534","AL" +"1410739535","1410739543","RS" +"1410739544","1410739550","AL" +"1410739551","1410739568","RS" +"1410739569","1410739582","AL" +"1410739583","1410739583","RS" +"1410739584","1410739599","AL" +"1410739600","1410739616","RS" +"1410739617","1410739630","AL" +"1410739631","1410739647","RS" +"1410739648","1410739679","AL" +"1410739680","1410739696","RS" +"1410739697","1410739710","AL" +"1410739711","1410739712","RS" +"1410739713","1410739719","AL" +"1410739720","1410739720","RS" +"1410739721","1410739727","AL" +"1410739728","1410739728","RS" +"1410739729","1410739734","AL" +"1410739735","1410739736","RS" +"1410739737","1410739742","AL" +"1410739743","1410739744","RS" +"1410739745","1410739750","AL" +"1410739751","1410739752","RS" +"1410739753","1410739759","AL" +"1410739760","1410739776","RS" +"1410739777","1410739783","AL" +"1410739784","1410739791","RS" +"1410739792","1410739799","AL" +"1410739800","1410739807","RS" +"1410739808","1410739879","AL" +"1410739880","1410739887","RS" +"1410739888","1410739919","AL" +"1410739920","1410739927","RS" +"1410739928","1410739959","AL" +"1410739960","1410739967","RS" +"1410739968","1410739995","AL" +"1410739996","1410739999","RS" +"1410740000","1410740003","AL" +"1410740004","1410740007","RS" +"1410740008","1410740043","AL" +"1410740044","1410740047","RS" +"1410740048","1410740122","AL" +"1410740123","1410740123","RS" +"1410740124","1410740171","AL" +"1410740172","1410740175","RS" +"1410740176","1410740238","AL" +"1410740239","1410740239","RS" +"1410740240","1410740335","AL" +"1410740336","1410740343","RS" +"1410740344","1410740471","AL" +"1410740472","1410740479","RS" +"1410740480","1410740507","AL" +"1410740508","1410740511","RS" +"1410740512","1410740515","AL" +"1410740516","1410740519","RS" +"1410740520","1410740591","AL" +"1410740592","1410740595","RS" +"1410740596","1410740643","AL" +"1410740644","1410740647","RS" +"1410740648","1410740675","AL" +"1410740676","1410740679","RS" +"1410740680","1410740695","AL" +"1410740696","1410740699","RS" +"1410740700","1410740734","AL" +"1410740735","1410740735","RS" +"1410740736","1410740759","AL" +"1410740760","1410740767","RS" +"1410740768","1410740871","AL" +"1410740872","1410740879","RS" +"1410740880","1410740911","AL" +"1410740912","1410740919","RS" +"1410740920","1410740931","AL" +"1410740932","1410740935","RS" +"1410740936","1410740943","AL" +"1410740944","1410740991","RS" +"1410740992","1410741303","AL" +"1410741304","1410741304","RS" +"1410741305","1410741311","AL" +"1410741312","1410741327","RS" +"1410741328","1410741343","AL" +"1410741344","1410741351","RS" +"1410741352","1410741463","AL" +"1410741464","1410741471","RS" +"1410741472","1410742279","AL" +"1410742280","1410742287","RS" +"1410742288","1410742303","AL" +"1410742304","1410742319","RS" +"1410742320","1410742351","AL" +"1410742352","1410742359","RS" +"1410742360","1410742415","AL" +"1410742416","1410742527","RS" +"1410742528","1410742907","AL" +"1410742908","1410742911","RS" +"1410742912","1410742923","AL" +"1410742924","1410742927","RS" +"1410742928","1410742931","AL" +"1410742932","1410742939","RS" +"1410742940","1410742952","AL" +"1410742953","1410742955","RS" +"1410742956","1410742963","AL" +"1410742964","1410742971","RS" +"1410742972","1410742975","AL" +"1410742976","1410742979","RS" +"1410742980","1410742996","AL" +"1410742997","1410742999","RS" +"1410743000","1410743059","AL" +"1410743060","1410743063","RS" +"1410743064","1410743075","AL" +"1410743076","1410743079","RS" +"1410743080","1410743095","AL" +"1410743096","1410743107","RS" +"1410743108","1410743111","AL" +"1410743112","1410743119","RS" +"1410743120","1410743127","AL" +"1410743128","1410743295","RS" +"1410743296","1410743551","AL" +"1410743552","1410743775","RS" +"1410743776","1410743783","AL" +"1410743784","1410743807","RS" +"1410743808","1410743967","AL" +"1410743968","1410744031","RS" +"1410744032","1410744063","AL" +"1410744064","1410744083","RS" +"1410744084","1410744087","AL" +"1410744088","1410744107","RS" +"1410744108","1410744119","AL" +"1410744120","1410744135","RS" +"1410744136","1410744139","AL" +"1410744140","1410744155","RS" +"1410744156","1410744163","AL" +"1410744164","1410744167","RS" +"1410744168","1410744171","AL" +"1410744172","1410744191","RS" +"1410744192","1410744319","AL" +"1410744320","1410744575","FR" +"1410744576","1410744831","A2" +"1410744832","1410745087","FR" +"1410745088","1410745343","US" +"1410745344","1410745855","FR" +"1410745856","1410746111","CH" +"1410746112","1410746879","AO" +"1410746880","1410748415","A2" +"1410748416","1410752511","DE" +"1410752512","1410752703","AQ" +"1410752704","1410752763","DE" +"1410752764","1410752791","AQ" +"1410752792","1410752799","DE" +"1410752800","1410752827","AQ" +"1410752828","1410752831","DE" +"1410752832","1410752835","AQ" +"1410752836","1410753023","DE" +"1410753024","1410753031","AQ" +"1410753032","1410753047","DE" +"1410753048","1410753055","BS" +"1410753056","1410753143","AQ" +"1410753144","1410753151","SC" +"1410753152","1410753155","AQ" +"1410753156","1410753159","DE" +"1410753160","1410753167","AQ" +"1410753168","1410753303","DE" +"1410753304","1410753327","AQ" +"1410753328","1410753335","DE" +"1410753336","1410753343","AQ" +"1410753344","1410753351","DE" +"1410753352","1410753367","AQ" +"1410753368","1410753391","DE" +"1410753392","1410753399","NL" +"1410753400","1410754559","AQ" +"1410754560","1410754591","US" +"1410754592","1410754623","AQ" +"1410754624","1410754631","CN" +"1410754632","1410754831","AQ" +"1410754832","1410754835","DE" +"1410754836","1410754839","AQ" +"1410754840","1410754855","DE" +"1410754856","1410754859","AQ" +"1410754860","1410754867","DE" +"1410754868","1410754871","AQ" +"1410754872","1410755059","DE" +"1410755060","1410755067","AQ" +"1410755068","1410755071","DE" +"1410755072","1410755327","AQ" +"1410755328","1410755583","DE" +"1410755584","1410759423","AQ" +"1410759424","1410759679","DE" +"1410759680","1410760191","US" +"1410760192","1410760447","DE" +"1410760448","1410760455","NL" +"1410760456","1410760463","BS" +"1410760464","1410760471","CN" +"1410760472","1410760479","AQ" +"1410760480","1410760487","DE" +"1410760488","1410760503","AQ" +"1410760504","1410760575","DE" +"1410760576","1410760703","AQ" +"1410760704","1410768895","RU" +"1410768896","1410777087","GB" +"1410777088","1410785279","RU" +"1410785280","1410793471","SA" +"1410793472","1410801663","GB" +"1410801664","1410809855","RU" +"1410809856","1410818047","DE" +"1410818048","1410826239","SA" +"1410826240","1410834431","SE" +"1410834432","1410842623","PL" +"1410842624","1410850815","PT" +"1410850816","1410859007","DE" +"1410859008","1411383295","NL" +"1411383296","1411448831","LT" +"1411448832","1411451647","IT" +"1411451648","1411451903","DE" +"1411451904","1411452159","IT" +"1411452160","1411452415","DE" +"1411452416","1411453439","IT" +"1411453440","1411453695","DE" +"1411453696","1411454975","IT" +"1411454976","1411455743","DE" +"1411455744","1411456255","IT" +"1411456256","1411456511","DE" +"1411456512","1411457279","IT" +"1411457280","1411457535","DE" +"1411457536","1411465215","IT" +"1411465216","1411465471","GB" +"1411465472","1411465727","US" +"1411465728","1411481855","IT" +"1411481856","1411483903","DE" +"1411483904","1411500799","IT" +"1411500800","1411501055","DE" +"1411501056","1411505407","IT" +"1411505408","1411505663","US" +"1411505664","1411514367","IT" +"1411514368","1411579903","FI" +"1411579904","1411645439","NL" +"1411645440","1411710975","EG" +"1411710976","1411717127","FR" +"1411717128","1411717135","A2" +"1411717136","1411717183","FR" +"1411717184","1411717191","A2" +"1411717192","1411717367","FR" +"1411717368","1411717375","A2" +"1411717376","1411736663","FR" +"1411736664","1411736671","A2" +"1411736672","1411737079","FR" +"1411737080","1411737087","A2" +"1411737088","1411776511","FR" +"1411776512","1411778559","RU" +"1411778560","1411780607","NO" +"1411780608","1411784703","PL" +"1411784704","1411788799","GB" +"1411788800","1411792895","IT" +"1411792896","1411796991","DE" +"1411796992","1411805183","PL" +"1411805184","1411809279","AT" +"1411809280","1411813375","LV" +"1411813376","1411817471","NO" +"1411817472","1411821567","PL" +"1411821568","1411825663","RU" +"1411825664","1411829759","DE" +"1411829760","1411833855","PL" +"1411833856","1411837951","NL" +"1411837952","1411842047","BG" +"1411842048","1411907583","PT" +"1411907584","1411907839","EU" +"1411907840","1411908095","GB" +"1411908096","1411908351","DE" +"1411908352","1411908399","EU" +"1411908400","1411908479","GB" +"1411908480","1411908535","EU" +"1411908536","1411908559","GB" +"1411908560","1411908563","AU" +"1411908564","1411908607","EU" +"1411908608","1411909375","GB" +"1411909376","1411909631","EU" +"1411909632","1411909759","GB" +"1411909760","1411909887","EU" +"1411909888","1411910143","GB" +"1411910144","1411910399","EU" +"1411910400","1411910655","GB" +"1411910656","1411910911","EU" +"1411910912","1411911167","GB" +"1411911168","1411911423","EU" +"1411911424","1411911439","GB" +"1411911440","1411911615","EU" +"1411911616","1411911647","GB" +"1411911648","1411911679","EU" +"1411911680","1411915775","US" +"1411915776","1411915839","GB" +"1411915840","1411915903","EU" +"1411915904","1411915911","GB" +"1411915912","1411915935","EU" +"1411915936","1411915967","GB" +"1411915968","1411916031","EU" +"1411916032","1411916095","GB" +"1411916096","1411916295","EU" +"1411916296","1411916303","GB" +"1411916304","1411916799","EU" +"1411916800","1411916863","GB" +"1411916864","1411917567","EU" +"1411917568","1411917639","GB" +"1411917640","1411917663","EU" +"1411917664","1411917695","GB" +"1411917696","1411917759","EU" +"1411917760","1411917791","GB" +"1411917792","1411919871","EU" +"1411919872","1411923967","DE" +"1411923968","1411940351","BG" +"1411940352","1411973119","PL" +"1411973120","1411999751","SI" +"1411999752","1411999791","BA" +"1411999792","1411999807","SI" +"1411999808","1411999847","BA" +"1411999848","1411999871","SI" +"1411999872","1411999895","BA" +"1411999896","1411999903","SI" +"1411999904","1411999911","BA" +"1411999912","1411999919","SI" +"1411999920","1411999927","BA" +"1411999928","1411999935","SI" +"1411999936","1411999943","BA" +"1411999944","1411999951","SI" +"1411999952","1411999959","BA" +"1411999960","1411999967","SI" +"1411999968","1412000767","BA" +"1412000768","1412000783","SI" +"1412000784","1412000791","BA" +"1412000792","1412000863","SI" +"1412000864","1412000879","BA" +"1412000880","1412000895","SI" +"1412000896","1412000911","BA" +"1412000912","1412000943","SI" +"1412000944","1412000959","BA" +"1412000960","1412000967","SI" +"1412000968","1412000999","BA" +"1412001000","1412001007","SI" +"1412001008","1412001015","BA" +"1412001016","1412001311","SI" +"1412001312","1412001319","DE" +"1412001320","1412001807","SI" +"1412001808","1412001855","RO" +"1412001856","1412001919","SI" +"1412001920","1412002303","RO" +"1412002304","1412002559","SI" +"1412002560","1412002783","MK" +"1412002784","1412002815","SI" +"1412002816","1412002847","BA" +"1412002848","1412002863","SI" +"1412002864","1412002895","BA" +"1412002896","1412002903","SI" +"1412002904","1412002911","BA" +"1412002912","1412002919","SI" +"1412002920","1412003015","BA" +"1412003016","1412003023","SI" +"1412003024","1412003039","BA" +"1412003040","1412003055","SI" +"1412003056","1412003119","BA" +"1412003120","1412003135","SI" +"1412003136","1412003151","BA" +"1412003152","1412003199","SI" +"1412003200","1412003215","BA" +"1412003216","1412003223","SI" +"1412003224","1412003231","BA" +"1412003232","1412003247","SI" +"1412003248","1412003263","BA" +"1412003264","1412003271","SI" +"1412003272","1412003303","BA" +"1412003304","1412003327","SI" +"1412003328","1412003335","BA" +"1412003336","1412003343","SI" +"1412003344","1412003351","BA" +"1412003352","1412003375","SI" +"1412003376","1412003383","BA" +"1412003384","1412003391","SI" +"1412003392","1412003527","BA" +"1412003528","1412003535","SI" +"1412003536","1412003551","BA" +"1412003552","1412003583","SI" +"1412003584","1412003599","BA" +"1412003600","1412003623","SI" +"1412003624","1412003631","BA" +"1412003632","1412003639","SI" +"1412003640","1412003647","BA" +"1412003648","1412003855","SI" +"1412003856","1412003903","BG" +"1412003904","1412003967","SI" +"1412003968","1412004351","BG" +"1412004352","1412004863","BA" +"1412004864","1412005887","SI" +"1412005888","1412038655","NL" +"1412038656","1412071423","RU" +"1412071424","1412104191","CZ" +"1412104192","1412136959","GB" +"1412136960","1412169727","BG" +"1412169728","1412202495","TR" +"1412202496","1412235263","DE" +"1412235264","1412241111","GB" +"1412241112","1412241119","NL" +"1412241120","1412254719","GB" +"1412254720","1412254975","NL" +"1412254976","1412257535","GB" +"1412257536","1412257599","NL" +"1412257600","1412258559","GB" +"1412258560","1412258815","DE" +"1412258816","1412300799","GB" +"1412300800","1412333567","DE" +"1412333568","1412366335","LT" +"1412366336","1412399103","SK" +"1412399104","1412415487","RU" +"1412415488","1412416511","AE" +"1412416512","1412420351","IR" +"1412420352","1412420607","AE" +"1412420608","1412431871","IR" +"1412431872","1412562943","NO" +"1412562944","1412628479","EE" +"1412628480","1412641791","TR" +"1412641792","1412642815","DE" +"1412642816","1412644863","TR" +"1412644864","1412661247","RU" +"1412661248","1412677631","GB" +"1412677632","1412685823","RU" +"1412685824","1412686239","IE" +"1412686240","1412686335","BB" +"1412686336","1412689315","IE" +"1412689316","1412689343","GB" +"1412689344","1412690191","IE" +"1412690192","1412690199","GB" +"1412690200","1412694015","IE" +"1412694016","1412710399","EE" +"1412710400","1412726783","RU" +"1412726784","1412743167","SI" +"1412743168","1412775935","NO" +"1412775936","1412792319","NL" +"1412792320","1412793343","US" +"1412793344","1412793855","EU" +"1412793856","1412804607","US" +"1412804608","1412804863","EU" +"1412804864","1412805631","US" +"1412805632","1412806143","EU" +"1412806144","1412808703","US" +"1412808704","1412825087","RU" +"1412825088","1412830463","IQ" +"1412830464","1412832767","LB" +"1412832768","1412833023","SL" +"1412833024","1412833279","LB" +"1412833280","1412833535","CI" +"1412833536","1412841471","LB" +"1412841472","1412857855","UZ" +"1412857856","1412874239","BG" +"1412874240","1412890623","RU" +"1412890624","1412907007","LT" +"1412907008","1412923391","SE" +"1412923392","1412939775","FR" +"1412939776","1412956159","CH" +"1412956160","1413480447","DE" +"1413480448","1414004735","GB" +"1414004736","1414266879","CH" +"1414266880","1414529023","ES" +"1414529024","1415053311","NL" +"1415053312","1415184383","ES" +"1415184384","1415315455","PT" +"1415315456","1415446527","GB" +"1415446528","1415577599","IL" +"1415577600","1416101887","FR" +"1416101888","1416364031","NL" +"1416364032","1416626175","IL" +"1416626176","1417150463","AT" +"1417150464","1417674751","ES" +"1417674752","1421869055","DE" +"1421869056","1422393343","BE" +"1422393344","1422393599","DE" +"1422393600","1422393855","IT" +"1422393856","1422398719","DE" +"1422398720","1422398783","IT" +"1422398784","1422398847","DE" +"1422398848","1422398911","CN" +"1422398912","1422399231","DE" +"1422399232","1422399487","US" +"1422399488","1422399999","DE" +"1422400000","1422400255","IT" +"1422400256","1422400511","DE" +"1422400512","1422400767","BR" +"1422400768","1422401319","DE" +"1422401320","1422401327","AT" +"1422401328","1422403839","DE" +"1422403840","1422403903","IT" +"1422403904","1422403935","SE" +"1422403936","1422403943","AT" +"1422403944","1422406399","DE" +"1422406400","1422406463","GB" +"1422406464","1422406471","AT" +"1422406472","1422406543","DE" +"1422406544","1422406559","DK" +"1422406560","1422410335","DE" +"1422410336","1422410343","AT" +"1422410344","1422410367","DE" +"1422410368","1422410495","IT" +"1422410496","1422418943","US" +"1422418944","1422419967","DE" +"1422419968","1422423807","US" +"1422423808","1422425855","DE" +"1422425856","1422430463","US" +"1422430464","1422432511","DE" +"1422432512","1422433023","US" +"1422433024","1422434047","DE" +"1422434048","1422436863","US" +"1422436864","1422437391","DE" +"1422437392","1422437399","AT" +"1422437400","1422437439","DE" +"1422437440","1422437455","CH" +"1422437456","1422437647","DE" +"1422437648","1422437655","AT" +"1422437656","1422437695","DE" +"1422437696","1422437711","CH" +"1422437712","1422437903","DE" +"1422437904","1422437911","AT" +"1422437912","1422437951","DE" +"1422437952","1422437967","CH" +"1422437968","1422438159","DE" +"1422438160","1422438167","AT" +"1422438168","1422438207","DE" +"1422438208","1422438223","CH" +"1422438224","1422438415","DE" +"1422438416","1422438423","AT" +"1422438424","1422438463","DE" +"1422438464","1422438479","CH" +"1422438480","1422438671","DE" +"1422438672","1422438679","AT" +"1422438680","1422438719","DE" +"1422438720","1422438735","CH" +"1422438736","1422438927","DE" +"1422438928","1422438935","AT" +"1422438936","1422438975","DE" +"1422438976","1422438991","CH" +"1422438992","1422439183","DE" +"1422439184","1422439191","AT" +"1422439192","1422439231","DE" +"1422439232","1422439247","CH" +"1422439248","1422439439","DE" +"1422439440","1422439447","AT" +"1422439448","1422439487","DE" +"1422439488","1422439503","CH" +"1422439504","1422439695","DE" +"1422439696","1422439703","AT" +"1422439704","1422439743","DE" +"1422439744","1422439759","CH" +"1422439760","1422439951","DE" +"1422439952","1422439959","AT" +"1422439960","1422439999","DE" +"1422440000","1422440015","CH" +"1422440016","1422440207","DE" +"1422440208","1422440215","AT" +"1422440216","1422440255","DE" +"1422440256","1422440271","CH" +"1422440272","1422440463","DE" +"1422440464","1422440471","AT" +"1422440472","1422440511","DE" +"1422440512","1422440527","CH" +"1422440528","1422440719","DE" +"1422440720","1422440727","AT" +"1422440728","1422440767","DE" +"1422440768","1422440783","CH" +"1422440784","1422440975","DE" +"1422440976","1422440983","AT" +"1422440984","1422441023","DE" +"1422441024","1422441039","CH" +"1422441040","1422441231","DE" +"1422441232","1422441239","AT" +"1422441240","1422441279","DE" +"1422441280","1422441295","CH" +"1422441296","1422441487","DE" +"1422441488","1422441495","AT" +"1422441496","1422441535","DE" +"1422441536","1422441551","CH" +"1422441552","1422441743","DE" +"1422441744","1422441751","AT" +"1422441752","1422441791","DE" +"1422441792","1422441807","CH" +"1422441808","1422441999","DE" +"1422442000","1422442007","AT" +"1422442008","1422442047","DE" +"1422442048","1422442063","CH" +"1422442064","1422442255","DE" +"1422442256","1422442263","AT" +"1422442264","1422442303","DE" +"1422442304","1422442319","CH" +"1422442320","1422442751","DE" +"1422442752","1422443263","US" +"1422443264","1422444287","DE" +"1422444288","1422444543","US" +"1422444544","1422444671","CN" +"1422444672","1422445055","DE" +"1422445056","1422446079","IT" +"1422446080","1422448639","DE" +"1422448640","1422450687","US" +"1422450688","1422451119","DE" +"1422451120","1422451127","AT" +"1422451128","1422451199","DE" +"1422451200","1422451455","US" +"1422451456","1422451551","DE" +"1422451552","1422451583","SE" +"1422451584","1422451687","DE" +"1422451688","1422451695","AT" +"1422451696","1422452271","DE" +"1422452272","1422452275","RU" +"1422452276","1422452567","DE" +"1422452568","1422452575","AT" +"1422452576","1422453007","DE" +"1422453008","1422453015","AT" +"1422453016","1422453263","DE" +"1422453264","1422453271","AT" +"1422453272","1422453519","DE" +"1422453520","1422453527","AT" +"1422453528","1422453775","DE" +"1422453776","1422453783","AT" +"1422453784","1422454031","DE" +"1422454032","1422454039","AT" +"1422454040","1422454287","DE" +"1422454288","1422454295","AT" +"1422454296","1422454543","DE" +"1422454544","1422454551","AT" +"1422454552","1422454847","DE" +"1422454848","1422454851","US" +"1422454852","1422454871","DE" +"1422454872","1422454879","AT" +"1422454880","1422455551","DE" +"1422455552","1422456063","US" +"1422456064","1422456127","DE" +"1422456128","1422456135","AT" +"1422456136","1422456319","DE" +"1422456320","1422456575","US" +"1422456576","1422456639","DE" +"1422456640","1422456647","AT" +"1422456648","1422457215","DE" +"1422457216","1422457223","AT" +"1422457224","1422457407","DE" +"1422457408","1422457415","AT" +"1422457416","1422457471","DE" +"1422457472","1422457487","US" +"1422457488","1422457855","DE" +"1422457856","1422458111","US" +"1422458112","1422459647","DE" +"1422459648","1422459903","US" +"1422459904","1422460927","DE" +"1422460928","1422461183","US" +"1422461184","1422464255","DE" +"1422464256","1422466559","US" +"1422466560","1422466815","DE" +"1422466816","1422467071","US" +"1422467072","1422467839","DE" +"1422467840","1422468095","US" +"1422468096","1422468671","DE" +"1422468672","1422468735","IT" +"1422468736","1422468799","DE" +"1422468800","1422468863","CN" +"1422468864","1422469839","DE" +"1422469840","1422469847","RO" +"1422469848","1422469903","DE" +"1422469904","1422469911","AT" +"1422469912","1422470159","DE" +"1422470160","1422470167","AT" +"1422470168","1422470415","DE" +"1422470416","1422470423","AT" +"1422470424","1422470671","DE" +"1422470672","1422470679","AT" +"1422470680","1422470927","DE" +"1422470928","1422470935","AT" +"1422470936","1422471183","DE" +"1422471184","1422471191","AT" +"1422471192","1422471439","DE" +"1422471440","1422471447","AT" +"1422471448","1422471695","DE" +"1422471696","1422471703","AT" +"1422471704","1422471951","DE" +"1422471952","1422471959","AT" +"1422471960","1422472207","DE" +"1422472208","1422472215","AT" +"1422472216","1422472463","DE" +"1422472464","1422472471","AT" +"1422472472","1422472719","DE" +"1422472720","1422472727","AT" +"1422472728","1422472975","DE" +"1422472976","1422472983","AT" +"1422472984","1422473231","DE" +"1422473232","1422473239","AT" +"1422473240","1422473487","DE" +"1422473488","1422473495","AT" +"1422473496","1422473743","DE" +"1422473744","1422473751","AT" +"1422473752","1422473999","DE" +"1422474000","1422474007","AT" +"1422474008","1422474255","DE" +"1422474256","1422474263","AT" +"1422474264","1422474511","DE" +"1422474512","1422474519","AT" +"1422474520","1422474767","DE" +"1422474768","1422474775","AT" +"1422474776","1422475023","DE" +"1422475024","1422475031","AT" +"1422475032","1422476863","DE" +"1422476864","1422476895","GB" +"1422476896","1422479615","DE" +"1422479616","1422479871","BE" +"1422479872","1422480431","DE" +"1422480432","1422480447","GB" +"1422480448","1422483423","DE" +"1422483424","1422483439","GB" +"1422483440","1422484463","DE" +"1422484464","1422484479","GB" +"1422484480","1422491647","DE" +"1422491648","1422508031","RU" +"1422508032","1422512127","BG" +"1422512128","1422516223","PL" +"1422516224","1422520319","BY" +"1422520320","1422524415","RU" +"1422524416","1422589951","NO" +"1422589952","1422655487","IE" +"1422655488","1422721023","RU" +"1422721024","1422729215","PL" +"1422729216","1422737407","NO" +"1422737408","1422745599","EU" +"1422745600","1422753791","EG" +"1422753792","1422761983","FR" +"1422761984","1422770175","PL" +"1422770176","1422786559","GR" +"1422786560","1422852095","HU" +"1422852096","1422856383","EU" +"1422856384","1422856447","FR" +"1422856448","1422856703","EU" +"1422856704","1422856959","FR" +"1422856960","1422857087","EU" +"1422857088","1422857151","FR" +"1422857152","1422857183","EU" +"1422857184","1422857855","FR" +"1422857856","1422857919","EU" +"1422857920","1422858143","FR" +"1422858144","1422858239","EU" +"1422858240","1422858623","FR" +"1422858624","1422909439","EU" +"1422909440","1422909951","NL" +"1422909952","1422911231","EU" +"1422911232","1422911487","NL" +"1422911488","1422917119","EU" +"1422917120","1422917631","GB" +"1422917632","1423441919","NO" +"1423441920","1423704063","SE" +"1423704064","1423966207","IT" +"1423966208","1424097279","HU" +"1424097280","1424228351","CH" +"1424228352","1424359423","IL" +"1424359424","1424490495","FI" +"1424490496","1424523263","ES" +"1424523264","1424556031","RO" +"1424556032","1424588799","EG" +"1424588800","1424588839","DE" +"1424588840","1424588847","GB" +"1424588848","1424588863","DE" +"1424588864","1424588927","US" +"1424588928","1424588951","DE" +"1424588952","1424588959","GB" +"1424588960","1424588963","IT" +"1424588964","1424589311","DE" +"1424589312","1424589567","FR" +"1424589568","1424590719","GB" +"1424590720","1424590767","SE" +"1424590768","1424590771","GB" +"1424590772","1424590783","SE" +"1424590784","1424590847","CH" +"1424590848","1424591359","SE" +"1424591360","1424591367","GB" +"1424591368","1424591406","SE" +"1424591407","1424591407","GB" +"1424591408","1424591423","SE" +"1424591424","1424591439","GB" +"1424591440","1424591447","SE" +"1424591448","1424591455","GB" +"1424591456","1424591463","SE" +"1424591464","1424591471","GB" +"1424591472","1424591551","SE" +"1424591552","1424591615","CZ" +"1424591616","1424591839","GB" +"1424591840","1424591871","NL" +"1424591872","1424592639","GB" +"1424592640","1424593151","FR" +"1424593152","1424593407","NL" +"1424593408","1424593663","DE" +"1424593664","1424593727","SK" +"1424593728","1424593791","HU" +"1424593792","1424593919","DE" +"1424593920","1424593967","FR" +"1424593968","1424593983","GB" +"1424593984","1424594047","FR" +"1424594048","1424594055","GB" +"1424594056","1424594063","IT" +"1424594064","1424594103","FR" +"1424594104","1424594431","GB" +"1424594432","1424594519","IE" +"1424594520","1424594527","GB" +"1424594528","1424594535","IE" +"1424594536","1424595455","GB" +"1424595456","1424595527","IT" +"1424595528","1424595535","GB" +"1424595536","1424595575","IT" +"1424595576","1424595583","GB" +"1424595584","1424595819","IT" +"1424595820","1424595823","GB" +"1424595824","1424596479","IT" +"1424596480","1424596991","FR" +"1424596992","1424597255","CZ" +"1424597256","1424597263","GB" +"1424597264","1424597311","CZ" +"1424597312","1424597343","GB" +"1424597344","1424597351","CH" +"1424597352","1424597375","GB" +"1424597376","1424597391","CZ" +"1424597392","1424597407","GB" +"1424597408","1424597431","CZ" +"1424597432","1424597503","GB" +"1424597504","1424597759","FR" +"1424597760","1424598015","IT" +"1424598016","1424599039","GB" +"1424599040","1424599279","DK" +"1424599280","1424599295","GB" +"1424599296","1424599551","DK" +"1424599552","1424599855","HU" +"1424599856","1424599871","GB" +"1424599872","1424599875","HU" +"1424599876","1424599879","GB" +"1424599880","1424599887","HU" +"1424599888","1424599903","GB" +"1424599904","1424599935","HU" +"1424599936","1424599943","GB" +"1424599944","1424599951","HU" +"1424599952","1424599999","GB" +"1424600000","1424600031","HU" +"1424600032","1424600063","GB" +"1424600064","1424600319","CH" +"1424600320","1424600575","GB" +"1424600576","1424600831","FR" +"1424600832","1424601087","BE" +"1424601088","1424601343","GB" +"1424601344","1424601367","ES" +"1424601368","1424601599","GB" +"1424601600","1424601855","CH" +"1424601856","1424602111","GB" +"1424602112","1424602623","DE" +"1424602624","1424602735","GB" +"1424602736","1424602743","IT" +"1424602744","1424602879","GB" +"1424602880","1424602911","US" +"1424602912","1424602927","FR" +"1424602928","1424602935","GB" +"1424602936","1424603007","US" +"1424603008","1424603023","GB" +"1424603024","1424603087","US" +"1424603088","1424603095","GB" +"1424603096","1424603135","US" +"1424603136","1424603391","SK" +"1424603392","1424603647","DE" +"1424603648","1424603903","GB" +"1424603904","1424604039","ES" +"1424604040","1424604047","GB" +"1424604048","1424604159","ES" +"1424604160","1424604543","NL" +"1424604544","1424604671","GB" +"1424604672","1424604927","EU" +"1424604928","1424604959","NL" +"1424604960","1424604967","GB" +"1424604968","1424605023","NL" +"1424605024","1424605055","GB" +"1424605056","1424605079","NL" +"1424605080","1424605087","GB" +"1424605088","1424605119","NL" +"1424605120","1424605135","GB" +"1424605136","1424605183","NL" +"1424605184","1424605247","GB" +"1424605248","1424605279","NL" +"1424605280","1424605439","GB" +"1424605440","1424605567","BG" +"1424605568","1424605583","GR" +"1424605584","1424605599","BE" +"1424605600","1424605607","GB" +"1424605608","1424605623","BG" +"1424605624","1424605631","GB" +"1424605632","1424605695","BG" +"1424605696","1424605951","NL" +"1424605952","1424605959","CH" +"1424605960","1424605967","AT" +"1424605968","1424605983","GB" +"1424605984","1424606023","AT" +"1424606024","1424606207","GB" +"1424606208","1424606719","IT" +"1424606720","1424606975","NL" +"1424606976","1424607167","GB" +"1424607168","1424607199","SK" +"1424607200","1424607215","GB" +"1424607216","1424607223","SK" +"1424607224","1424607487","GB" +"1424607488","1424607871","DE" +"1424607872","1424608031","GB" +"1424608032","1424608083","FR" +"1424608084","1424608087","GB" +"1424608088","1424608127","FR" +"1424608128","1424608279","GB" +"1424608280","1424608383","FR" +"1424608384","1424608399","ES" +"1424608400","1424608511","FR" +"1424608512","1424608559","ES" +"1424608560","1424608567","GB" +"1424608568","1424608687","ES" +"1424608688","1424608691","GB" +"1424608692","1424609023","ES" +"1424609024","1424609255","DE" +"1424609256","1424609271","GB" +"1424609272","1424609279","DE" +"1424609280","1424609375","CH" +"1424609376","1424609383","GB" +"1424609384","1424609395","CH" +"1424609396","1424609399","GB" +"1424609400","1424609535","CH" +"1424609536","1424609543","GB" +"1424609544","1424609743","CH" +"1424609744","1424609759","GB" +"1424609760","1424609791","CH" +"1424609792","1424610303","GB" +"1424610304","1424610559","TZ" +"1424610560","1424610815","PL" +"1424610816","1424611071","FR" +"1424611072","1424611135","BE" +"1424611136","1424611151","GB" +"1424611152","1424611271","BE" +"1424611272","1424611279","LU" +"1424611280","1424611287","BE" +"1424611288","1424611295","FR" +"1424611296","1424611319","BE" +"1424611320","1424611327","GB" +"1424611328","1424611583","PL" +"1424611584","1424612095","GB" +"1424612096","1424612231","CZ" +"1424612232","1424612239","CH" +"1424612240","1424612319","CZ" +"1424612320","1424612607","GB" +"1424612608","1424612671","AE" +"1424612672","1424612863","GB" +"1424612864","1424613119","FR" +"1424613120","1424613375","GB" +"1424613376","1424613631","ES" +"1424613632","1424614087","IT" +"1424614088","1424614095","GB" +"1424614096","1424614127","IT" +"1424614128","1424614135","GB" +"1424614136","1424614143","IT" +"1424614144","1424614399","GB" +"1424614400","1424614655","US" +"1424614656","1424614911","FR" +"1424614912","1424615167","RO" +"1424615168","1424615679","GB" +"1424615680","1424615803","IT" +"1424615804","1424615807","GB" +"1424615808","1424615935","IT" +"1424615936","1424616191","FR" +"1424616192","1424616320","IT" +"1424616321","1424616479","GB" +"1424616480","1424616483","ES" +"1424616484","1424616487","GB" +"1424616488","1424616503","ES" +"1424616504","1424616511","GB" +"1424616512","1424616615","ES" +"1424616616","1424616623","GB" +"1424616624","1424616655","ES" +"1424616656","1424616659","GB" +"1424616660","1424616695","ES" +"1424616696","1424616703","GB" +"1424616704","1424616959","US" +"1424616960","1424617215","FR" +"1424617216","1424617231","IT" +"1424617232","1424617247","GB" +"1424617248","1424617359","IT" +"1424617360","1424617391","GB" +"1424617392","1424617395","IT" +"1424617396","1424617399","GB" +"1424617400","1424617407","IT" +"1424617408","1424617423","ES" +"1424617424","1424617439","GB" +"1424617440","1424617447","IT" +"1424617448","1424617455","GB" +"1424617456","1424617463","IT" +"1424617464","1424617471","GB" +"1424617472","1424617727","US" +"1424617728","1424618031","IT" +"1424618032","1424618047","GB" +"1424618048","1424618111","IT" +"1424618112","1424618143","GB" +"1424618144","1424618191","IT" +"1424618192","1424618207","GB" +"1424618208","1424618239","IT" +"1424618240","1424618367","GB" +"1424618368","1424618495","NL" +"1424618496","1424618751","GB" +"1424618752","1424618927","FR" +"1424618928","1424618943","IT" +"1424618944","1424619007","FR" +"1424619008","1424619215","IT" +"1424619216","1424619223","GB" +"1424619224","1424619775","IT" +"1424619776","1424619807","BE" +"1424619808","1424619839","GB" +"1424619840","1424619915","BE" +"1424619916","1424619919","GB" +"1424619920","1424620031","BE" +"1424620032","1424620767","GB" +"1424620768","1424620775","RU" +"1424620776","1424620783","DE" +"1424620784","1424621311","GB" +"1424621312","1424621567","IT" +"1424621568","1424625663","PL" +"1424625664","1424629759","GB" +"1424629760","1424633855","PL" +"1424633856","1424637951","MD" +"1424637952","1424642047","FI" +"1424642048","1424646143","DK" +"1424646144","1424650239","UA" +"1424650240","1424654335","PL" +"1424654336","1424687103","NO" +"1424687104","1424711679","SA" +"1424711680","1424713727","BH" +"1424713728","1424719871","SA" +"1424719872","1424722431","IE" +"1424722432","1424723199","CZ" +"1424723200","1424724735","DE" +"1424724736","1424724991","IE" +"1424724992","1424727039","GB" +"1424727040","1424727295","IE" +"1424727296","1424727551","SL" +"1424727552","1424728063","PL" +"1424728064","1424728319","IE" +"1424728320","1424729855","FR" +"1424729856","1424730367","DE" +"1424730368","1424730623","ES" +"1424730624","1424730879","GB" +"1424730880","1424733183","IE" +"1424733184","1424733951","NL" +"1424733952","1424735103","SE" +"1424735104","1424736127","DE" +"1424736128","1424736383","AT" +"1424736384","1424736895","FR" +"1424736896","1424737151","DE" +"1424737152","1424737279","GB" +"1424737280","1424737407","DK" +"1424737408","1424737535","AT" +"1424737536","1424737671","DE" +"1424737672","1424737751","GB" +"1424737752","1424738815","DE" +"1424738816","1424739583","SE" +"1424739584","1424739839","GB" +"1424739840","1424740511","DE" +"1424740512","1424740551","GB" +"1424740552","1424741119","DE" +"1424741120","1424741375","IE" +"1424741376","1424742911","DE" +"1424742912","1424743167","IE" +"1424743168","1424743423","IT" +"1424743424","1424743935","DE" +"1424743936","1424744191","GB" +"1424744192","1424744703","DE" +"1424744704","1424744959","GB" +"1424744960","1424746495","DE" +"1424746496","1424749055","IE" +"1424749056","1424749311","SL" +"1424749312","1424750079","DE" +"1424750080","1424750335","FR" +"1424750336","1424750591","GB" +"1424750592","1424750847","FR" +"1424750848","1424751103","IE" +"1424751104","1424751359","DE" +"1424751360","1424751615","AT" +"1424751616","1424752127","IE" +"1424752128","1424752383","DE" +"1424752384","1424752639","NL" +"1424752640","1424785407","HU" +"1424785408","1424818175","ES" +"1424818176","1424850943","RU" +"1424850944","1424883711","LV" +"1424883712","1424916479","DK" +"1424916480","1424949247","BG" +"1424949248","1424982015","RO" +"1424982016","1425014783","FI" +"1425014784","1425031167","LT" +"1425031168","1425047551","FI" +"1425047552","1425063935","IT" +"1425063936","1425080319","KZ" +"1425080320","1425096703","IR" +"1425096704","1425113087","CH" +"1425113088","1425145855","NL" +"1425145856","1425162239","RU" +"1425162240","1425178623","CZ" +"1425178624","1425195007","BG" +"1425195008","1425211391","RU" +"1425211392","1425227775","SE" +"1425227776","1425244159","RO" +"1425244160","1425260543","NO" +"1425260544","1425276927","NL" +"1425276928","1425293311","RU" +"1425293312","1425309695","CZ" +"1425309696","1425326079","NL" +"1425326080","1425342463","SE" +"1425342464","1425358847","NL" +"1425358848","1425375231","SK" +"1425375232","1425377339","DE" +"1425377340","1425377340","A2" +"1425377341","1425391615","DE" +"1425391616","1425407999","LV" +"1425408000","1425424383","NL" +"1425424384","1425424463","A2" +"1425424464","1425424895","DE" +"1425424896","1425425151","NE" +"1425425152","1425426303","DE" +"1425426304","1425426319","IR" +"1425426320","1425426343","DE" +"1425426344","1425426352","IR" +"1425426353","1425426431","DE" +"1425426432","1425428479","KW" +"1425428480","1425430527","GB" +"1425430528","1425432575","SE" +"1425432576","1425434623","HR" +"1425434624","1425436671","FR" +"1425436672","1425438719","GB" +"1425438720","1425439271","DE" +"1425439272","1425439279","CZ" +"1425439280","1425439399","DE" +"1425439400","1425439407","CZ" +"1425439408","1425439535","DE" +"1425439536","1425439543","CZ" +"1425439544","1425439711","DE" +"1425439712","1425439727","CZ" +"1425439728","1425440767","DE" +"1425440768","1425441935","SE" +"1425441936","1425441943","FI" +"1425441944","1425442815","SE" +"1425442816","1425444863","GB" +"1425444864","1425445126","IT" +"1425445127","1425445127","FR" +"1425445128","1425445139","IT" +"1425445140","1425445141","GB" +"1425445142","1425446911","IT" +"1425446912","1425448959","GB" +"1425448960","1425451007","CZ" +"1425451008","1425457855","GB" +"1425457856","1425457919","US" +"1425457920","1425459199","GB" +"1425459200","1425460735","IM" +"1425460736","1425460767","GB" +"1425460768","1425460863","IM" +"1425460864","1425460927","GB" +"1425460928","1425460991","IM" +"1425460992","1425461119","GB" +"1425461120","1425461247","IM" +"1425461248","1425463295","ES" +"1425463296","1425467135","FR" +"1425467136","1425467391","ES" +"1425467392","1425469439","CH" +"1425469440","1425471487","DK" +"1425471488","1425471791","DE" +"1425471792","1425471799","CH" +"1425471800","1425471815","DE" +"1425471816","1425471823","CH" +"1425471824","1425471831","GB" +"1425471832","1425471863","DE" +"1425471864","1425471871","GB" +"1425471872","1425471887","IT" +"1425471888","1425471895","GB" +"1425471896","1425471919","DE" +"1425471920","1425471943","GB" +"1425471944","1425471967","DE" +"1425471968","1425471975","CH" +"1425471976","1425472007","DE" +"1425472008","1425472011","GB" +"1425472012","1425472015","ES" +"1425472016","1425472035","DE" +"1425472036","1425472039","GB" +"1425472040","1425473535","DE" +"1425473536","1425485311","RO" +"1425485312","1425485823","US" +"1425485824","1425506303","RO" +"1425506304","1425522687","NO" +"1425522688","1425539071","IT" +"1425539072","1425801215","FI" +"1425801216","1425817599","BG" +"1425817600","1425833983","DE" +"1425833984","1425850367","RU" +"1425850368","1425866751","GB" +"1425866752","1425883135","CH" +"1425883136","1425899519","RU" +"1425899520","1425915903","IT" +"1425915904","1425932287","FI" +"1425932288","1425948671","GR" +"1425948672","1425949183","DE" +"1425949184","1425949191","NL" +"1425949192","1425965055","DE" +"1425965056","1425965100","ES" +"1425965101","1425965112","FR" +"1425965113","1425965116","ZA" +"1425965117","1425965120","A2" +"1425965121","1425965182","IT" +"1425965183","1425965183","A2" +"1425965184","1425965503","IT" +"1425965504","1425965567","FR" +"1425965568","1425965568","A2" +"1425965569","1425965572","NG" +"1425965573","1425965576","US" +"1425965577","1425965580","FR" +"1425965581","1425965584","BJ" +"1425965585","1425965588","ES" +"1425965589","1425965592","A2" +"1425965593","1425965631","FR" +"1425965632","1425966080","A2" +"1425966081","1425966088","DE" +"1425966089","1425966104","A2" +"1425966105","1425966128","DE" +"1425966129","1425966144","A2" +"1425966145","1425966152","DE" +"1425966153","1425966208","A2" +"1425966209","1425966224","DE" +"1425966225","1425966239","A2" +"1425966240","1425966271","IT" +"1425966272","1425966335","DE" +"1425966336","1425966463","A2" +"1425966464","1425966527","IT" +"1425966528","1425966608","A2" +"1425966609","1425966624","IT" +"1425966625","1425966655","A2" +"1425966656","1425966719","IT" +"1425966720","1425966720","A2" +"1425966721","1425966728","BJ" +"1425966729","1425966735","A2" +"1425966736","1425966751","BJ" +"1425966752","1425966815","A2" +"1425966816","1425966847","BJ" +"1425966848","1425966852","A2" +"1425966853","1425966896","DE" +"1425966897","1425966911","A2" +"1425966912","1425966975","DE" +"1425966976","1425967039","IT" +"1425967040","1425967103","DE" +"1425967104","1425967104","A2" +"1425967105","1425967120","TR" +"1425967121","1425967359","IT" +"1425967360","1425967743","A2" +"1425967744","1425967807","IT" +"1425967808","1425967876","A2" +"1425967877","1425967892","DE" +"1425967893","1425967896","A2" +"1425967897","1425967904","DE" +"1425967905","1425967912","A2" +"1425967913","1425967924","DE" +"1425967925","1425967928","A2" +"1425967929","1425967940","DE" +"1425967941","1425967967","A2" +"1425967968","1425967999","IT" +"1425968000","1425968127","DE" +"1425968128","1425968383","A2" +"1425968384","1425968638","GB" +"1425968639","1425968703","A2" +"1425968704","1425968831","IT" +"1425968832","1425968895","A2" +"1425968896","1425969023","IT" +"1425969024","1425969199","A2" +"1425969200","1425969215","IT" +"1425969216","1425969279","A2" +"1425969280","1425969343","IT" +"1425969344","1425969407","A2" +"1425969408","1425969471","IT" +"1425969472","1425969663","A2" +"1425969664","1425969727","FR" +"1425969728","1425969791","IT" +"1425969792","1425969855","FR" +"1425969856","1425969983","A2" +"1425969984","1425970047","IT" +"1425970048","1425970111","DE" +"1425970112","1425970175","A2" +"1425970176","1425970431","FR" +"1425970432","1425970495","A2" +"1425970496","1425970687","IT" +"1425970688","1425970943","US" +"1425970944","1425971007","IT" +"1425971008","1425971071","NL" +"1425971072","1425971199","A2" +"1425971200","1425971231","NL" +"1425971232","1425971263","DE" +"1425971264","1425971455","NL" +"1425971456","1425971519","A2" +"1425971520","1425971583","IT" +"1425971584","1425971647","A2" +"1425971648","1425971711","IT" +"1425971712","1425971727","AE" +"1425971728","1425971743","US" +"1425971744","1425971775","A2" +"1425971776","1425971839","DE" +"1425971840","1425971903","SE" +"1425971904","1425972671","A2" +"1425972672","1425972735","IT" +"1425972736","1425973183","A2" +"1425973184","1425973247","IT" +"1425973248","1425973248","A2" +"1425973249","1425973260","PL" +"1425973261","1425973264","A2" +"1425973265","1425973268","DE" +"1425973269","1425973272","FR" +"1425973273","1425973276","PL" +"1425973277","1425973280","A2" +"1425973281","1425973300","PL" +"1425973301","1425973308","DE" +"1425973309","1425973332","PL" +"1425973333","1425973336","DE" +"1425973337","1425973439","A2" +"1425973440","1425973503","PL" +"1425973504","1425973759","IT" +"1425973760","1425973823","PL" +"1425973824","1425973887","IT" +"1425973888","1425974143","A2" +"1425974144","1425974207","IT" +"1425974208","1425974463","A2" +"1425974464","1425974527","IT" +"1425974528","1425974783","A2" +"1425974784","1425974847","IT" +"1425974848","1425974911","SE" +"1425974912","1425974975","A2" +"1425974976","1425975039","IT" +"1425975040","1425975103","A2" +"1425975104","1425975167","IT" +"1425975168","1425975296","A2" +"1425975297","1425975360","PE" +"1425975361","1425975487","A2" +"1425975488","1425975551","IT" +"1425975552","1425975679","FR" +"1425975680","1425975743","IT" +"1425975744","1425975807","A2" +"1425975808","1425976063","IT" +"1425976064","1425976064","A2" +"1425976065","1425976126","FR" +"1425976127","1425976127","A2" +"1425976128","1425976191","IT" +"1425976192","1425976255","FR" +"1425976256","1425976319","IT" +"1425976320","1425976320","A2" +"1425976321","1425976328","FR" +"1425976329","1425976336","GB" +"1425976337","1425976344","A2" +"1425976345","1425976352","FR" +"1425976353","1425976368","GB" +"1425976369","1425976372","FR" +"1425976373","1425976380","GB" +"1425976381","1425976388","FR" +"1425976389","1425976392","IT" +"1425976393","1425976432","FR" +"1425976433","1425976440","GB" +"1425976441","1425976448","FR" +"1425976449","1425976464","GB" +"1425976465","1425976575","A2" +"1425976576","1425976830","GB" +"1425976831","1425976831","A2" +"1425976832","1425977342","GB" +"1425977343","1425977343","A2" +"1425977344","1425977855","IT" +"1425977856","1425978111","DE" +"1425978112","1425978367","BG" +"1425978368","1425978368","A2" +"1425978369","1425978388","IT" +"1425978389","1425978389","A2" +"1425978390","1425978495","IT" +"1425978496","1425978624","A2" +"1425978625","1425978751","IT" +"1425978752","1425978815","A2" +"1425978816","1425978819","IT" +"1425978820","1425979071","A2" +"1425979072","1425979135","IT" +"1425979136","1425979327","A2" +"1425979328","1425979391","IT" +"1425979392","1425979392","A2" +"1425979393","1425979400","DE" +"1425979401","1425979412","A2" +"1425979413","1425979416","DE" +"1425979417","1425979436","A2" +"1425979437","1425979456","DE" +"1425979457","1425979460","A2" +"1425979461","1425979464","DE" +"1425979465","1425979472","A2" +"1425979473","1425979476","DE" +"1425979477","1425979480","A2" +"1425979481","1425979488","DE" +"1425979489","1425979503","A2" +"1425979504","1425979519","IT" +"1425979520","1425979583","DE" +"1425979584","1425979652","A2" +"1425979653","1425979656","AE" +"1425979657","1425979660","A2" +"1425979661","1425979692","AE" +"1425979693","1425979704","A2" +"1425979705","1425979708","AE" +"1425979709","1425979711","A2" +"1425979712","1425979775","DE" +"1425979776","1425979839","US" +"1425979840","1425979903","IT" +"1425979904","1425979904","A2" +"1425979905","1425979968","AE" +"1425979969","1425979976","A2" +"1425979977","1425979984","FR" +"1425979985","1425979998","IT" +"1425979999","1425979999","A2" +"1425980000","1425980031","US" +"1425980032","1425980095","DE" +"1425980096","1425980159","AE" +"1425980160","1425980287","IT" +"1425980288","1425980351","A2" +"1425980352","1425980415","IT" +"1425980416","1425980671","IQ" +"1425980672","1425981375","A2" +"1425981376","1425981439","IT" +"1425981440","1425997823","RU" +"1425997824","1426014207","MT" +"1426014208","1426030591","DK" +"1426030592","1426046975","BH" +"1426046976","1426063359","SI" +"1426063360","1426587647","CH" +"1426587648","1426604031","SE" +"1426604032","1426620415","DE" +"1426620416","1426653183","GB" +"1426653184","1426669567","RO" +"1426669568","1426685951","IR" +"1426685952","1426702335","TJ" +"1426702336","1426703103","LV" +"1426703104","1426703167","RU" +"1426703168","1426703214","LV" +"1426703215","1426703217","RU" +"1426703218","1426716159","LV" +"1426716160","1426716415","RU" +"1426716416","1426718719","LV" +"1426718720","1426731007","SI" +"1426731008","1426735103","HR" +"1426735104","1426751487","BE" +"1426751488","1426767871","FR" +"1426767872","1426778991","DE" +"1426778992","1426778999","IT" +"1426779000","1426781655","DE" +"1426781656","1426781663","IT" +"1426781664","1426784255","DE" +"1426784256","1426800639","SE" +"1426800640","1426817023","PL" +"1426817024","1426833407","BG" +"1426833408","1426849791","SE" +"1426849792","1426851519","NL" +"1426851520","1426851583","PA" +"1426851584","1426852352","NL" +"1426852353","1426852359","RU" +"1426852360","1426852367","SE" +"1426852368","1426852375","NL" +"1426852376","1426852383","US" +"1426852384","1426857472","NL" +"1426857473","1426857500","ES" +"1426857501","1426864511","NL" +"1426864512","1426864639","PA" +"1426864640","1426866175","NL" +"1426866176","1426882559","GB" +"1426882560","1426898943","FR" +"1426898944","1426915327","RU" +"1426915328","1426931711","AT" +"1426931712","1426948095","CZ" +"1426948096","1426964479","DE" +"1426964480","1426967287","GB" +"1426967288","1426967295","ES" +"1426967296","1426967455","GB" +"1426967456","1426967463","ES" +"1426967464","1426967567","GB" +"1426967568","1426967575","ES" +"1426967576","1426967671","GB" +"1426967672","1426967679","ES" +"1426967680","1426968343","GB" +"1426968344","1426968351","ES" +"1426968352","1426968591","GB" +"1426968592","1426968600","ES" +"1426968601","1426968799","GB" +"1426968800","1426968800","ES" +"1426968801","1426969135","GB" +"1426969136","1426969151","ES" +"1426969152","1426971855","GB" +"1426971856","1426971859","ES" +"1426971860","1426972319","GB" +"1426972320","1426972326","FR" +"1426972327","1426973335","GB" +"1426973336","1426973343","ES" +"1426973344","1426976031","GB" +"1426976032","1426976047","ES" +"1426976048","1426976111","GB" +"1426976112","1426976119","ES" +"1426976120","1426978999","GB" +"1426979000","1426979007","ES" +"1426979008","1426980863","GB" +"1426980864","1426997247","BG" +"1426997248","1427013631","PL" +"1427013632","1427030015","FR" +"1427030016","1427031679","DE" +"1427031680","1427031743","AT" +"1427031744","1427031807","DE" +"1427031808","1427032063","AT" +"1427032064","1427032183","DE" +"1427032184","1427032191","PL" +"1427032192","1427032223","DE" +"1427032224","1427032231","GR" +"1427032232","1427032735","DE" +"1427032736","1427032743","AT" +"1427032744","1427032959","DE" +"1427032960","1427032967","NL" +"1427032968","1427035391","DE" +"1427035392","1427035519","GB" +"1427035520","1427046399","DE" +"1427046400","1427062783","IR" +"1427062784","1427095551","RU" +"1427095552","1427111935","LV" +"1427111936","1427177471","DE" +"1427177472","1427220556","NL" +"1427220557","1427220557","KG" +"1427220558","1427227135","NL" +"1427227136","1427227647","US" +"1427227648","1427227967","NL" +"1427227968","1427227975","GB" +"1427227976","1427227983","DE" +"1427227984","1427227991","IT" +"1427227992","1427227999","ES" +"1427228000","1427228007","PL" +"1427228008","1427228015","RU" +"1427228016","1427228023","FR" +"1427228024","1427236631","NL" +"1427236632","1427236633","US" +"1427236634","1427243007","NL" +"1427243008","1427308543","IT" +"1427308544","1427364571","NO" +"1427364572","1427364575","SE" +"1427364576","1427374079","NO" +"1427374080","1427439615","IT" +"1427439616","1427505151","RU" +"1427505152","1427570687","DE" +"1427570688","1427636223","FI" +"1427636224","1427668991","DK" +"1427668992","1427701759","SE" +"1427701760","1427705115","DE" +"1427705116","1427705117","RU" +"1427705118","1427705118","BG" +"1427705119","1427705143","CA" +"1427705144","1427705147","DE" +"1427705148","1427705148","US" +"1427705149","1427705149","DE" +"1427705150","1427705150","CA" +"1427705151","1427705289","DE" +"1427705290","1427705290","AZ" +"1427705291","1427705297","DE" +"1427705298","1427705298","UA" +"1427705299","1427705299","IN" +"1427705300","1427705303","DE" +"1427705304","1427705304","NL" +"1427705305","1427705307","DE" +"1427705308","1427705309","BY" +"1427705310","1427705310","DE" +"1427705311","1427705311","SG" +"1427705312","1427705314","DE" +"1427705315","1427705315","NL" +"1427705316","1427705316","DE" +"1427705317","1427705317","EC" +"1427705318","1427705318","DE" +"1427705319","1427705319","EC" +"1427705320","1427705321","DE" +"1427705322","1427705323","PT" +"1427705324","1427705328","DE" +"1427705329","1427705331","US" +"1427705332","1427705332","LK" +"1427705333","1427705334","DE" +"1427705335","1427705335","IT" +"1427705336","1427705337","BR" +"1427705338","1427705338","DE" +"1427705339","1427705339","GB" +"1427705340","1427705342","FR" +"1427705343","1427705604","DE" +"1427705605","1427705605","UY" +"1427705606","1427705616","DE" +"1427705617","1427705618","UY" +"1427705619","1427705625","DE" +"1427705626","1427705627","CO" +"1427705628","1427705737","DE" +"1427705738","1427705740","BR" +"1427705741","1427705743","EG" +"1427705744","1427705747","DE" +"1427705748","1427705749","US" +"1427705750","1427705750","DE" +"1427705751","1427705751","US" +"1427705752","1427705753","DE" +"1427705754","1427705756","US" +"1427705757","1427705759","GB" +"1427705760","1427705796","DE" +"1427705797","1427705797","UA" +"1427705798","1427705800","DE" +"1427705801","1427705801","RU" +"1427705802","1427705802","DE" +"1427705803","1427705803","US" +"1427705804","1427705804","GR" +"1427705805","1427705808","DE" +"1427705809","1427705809","BR" +"1427705810","1427705810","GR" +"1427705811","1427705811","US" +"1427705812","1427705813","DE" +"1427705814","1427705814","US" +"1427705815","1427705816","CO" +"1427705817","1427705818","US" +"1427705819","1427705822","DE" +"1427705823","1427705823","CN" +"1427705824","1427705824","US" +"1427705825","1427705830","DE" +"1427705831","1427705831","US" +"1427705832","1427705834","DE" +"1427705835","1427705835","BR" +"1427705836","1427705836","DE" +"1427705837","1427705837","US" +"1427705838","1427705840","NL" +"1427705841","1427705848","DE" +"1427705849","1427705849","DK" +"1427705850","1427705850","TR" +"1427705851","1427705851","UA" +"1427705852","1427706441","DE" +"1427706442","1427706446","TR" +"1427706447","1427706447","DE" +"1427706448","1427706448","MA" +"1427706449","1427723391","DE" +"1427723392","1427723519","LI" +"1427723520","1427728383","DE" +"1427728384","1427728415","BR" +"1427728416","1427728447","RU" +"1427728448","1427728479","DE" +"1427728480","1427728511","CY" +"1427728512","1427728543","BR" +"1427728544","1427728575","DE" +"1427728576","1427728639","BR" +"1427728640","1427728671","CY" +"1427728672","1427728703","TR" +"1427728704","1427728735","RU" +"1427728736","1427728799","DE" +"1427728800","1427728831","RU" +"1427728832","1427728895","CY" +"1427728896","1427728927","RU" +"1427728928","1427728959","US" +"1427728960","1427728991","RU" +"1427728992","1427729023","LT" +"1427729024","1427729055","GB" +"1427729056","1427729087","CA" +"1427729088","1427729119","MA" +"1427729120","1427729151","BR" +"1427729152","1427729215","DE" +"1427729216","1427729279","IN" +"1427729280","1427729311","DE" +"1427729312","1427729343","GR" +"1427729344","1427730018","DE" +"1427730019","1427730019","IR" +"1427730020","1427730082","DE" +"1427730083","1427730083","IN" +"1427730084","1427730118","DE" +"1427730119","1427730119","IN" +"1427730120","1427730132","DE" +"1427730133","1427730134","BD" +"1427730135","1427730137","TH" +"1427730138","1427730139","DE" +"1427730140","1427730140","BD" +"1427730141","1427730141","IN" +"1427730142","1427730142","DK" +"1427730143","1427730144","US" +"1427730145","1427730145","HR" +"1427730146","1427730147","BG" +"1427730148","1427730148","DE" +"1427730149","1427730149","IN" +"1427730150","1427730150","GB" +"1427730151","1427730151","RU" +"1427730152","1427730152","IN" +"1427730153","1427730154","PK" +"1427730155","1427730155","RU" +"1427730156","1427730157","DE" +"1427730158","1427730158","DK" +"1427730159","1427730159","DE" +"1427730160","1427730162","US" +"1427730163","1427730165","DE" +"1427730166","1427730166","DO" +"1427730167","1427730167","BR" +"1427730168","1427730170","DK" +"1427730171","1427730171","DE" +"1427730172","1427730172","AR" +"1427730173","1427731511","DE" +"1427731512","1427731512","US" +"1427731513","1427731516","DE" +"1427731517","1427731517","RU" +"1427731518","1427731551","DE" +"1427731552","1427731583","BR" +"1427731584","1427739889","DE" +"1427739890","1427739890","RU" +"1427739891","1427741183","DE" +"1427741184","1427741184","US" +"1427741185","1427741185","BD" +"1427741186","1427741186","PK" +"1427741187","1427741188","DE" +"1427741189","1427741189","CO" +"1427741190","1427741201","DE" +"1427741202","1427741202","DK" +"1427741203","1427741203","DE" +"1427741204","1427741205","IL" +"1427741206","1427741206","DE" +"1427741207","1427741208","IN" +"1427741209","1427741209","DE" +"1427741210","1427741210","DO" +"1427741211","1427741211","DE" +"1427741212","1427741212","EC" +"1427741213","1427741214","US" +"1427741215","1427741216","TR" +"1427741217","1427741217","GB" +"1427741218","1427741218","TR" +"1427741219","1427741219","NL" +"1427741220","1427741221","DE" +"1427741222","1427741224","VN" +"1427741225","1427741227","US" +"1427741228","1427741229","IR" +"1427741230","1427741230","TR" +"1427741231","1427741247","DE" +"1427741248","1427741248","BR" +"1427741249","1427741249","AZ" +"1427741250","1427741250","DE" +"1427741251","1427741271","IN" +"1427741272","1427741272","TR" +"1427741273","1427741273","DE" +"1427741274","1427741274","HR" +"1427741275","1427741276","DE" +"1427741277","1427741278","ES" +"1427741279","1427741280","HR" +"1427741281","1427741283","BR" +"1427741284","1427741284","BE" +"1427741285","1427741285","LK" +"1427741286","1427741286","UA" +"1427741287","1427741291","DE" +"1427741292","1427741293","TR" +"1427741294","1427741295","DE" +"1427741296","1427741296","EG" +"1427741297","1427741298","IN" +"1427741299","1427741301","DE" +"1427741302","1427741302","UA" +"1427741303","1427741303","DE" +"1427741304","1427741304","AL" +"1427741305","1427741309","DE" +"1427741310","1427741311","UA" +"1427741312","1427741312","DE" +"1427741313","1427741313","KE" +"1427741314","1427741314","TR" +"1427741315","1427741317","EG" +"1427741318","1427741320","GR" +"1427741321","1427741321","AT" +"1427741322","1427741324","DE" +"1427741325","1427741325","GR" +"1427741326","1427741329","DE" +"1427741330","1427741330","AZ" +"1427741331","1427741332","DE" +"1427741333","1427741333","IT" +"1427741334","1427741334","DE" +"1427741335","1427741336","TR" +"1427741337","1427741339","DE" +"1427741340","1427741340","PL" +"1427741341","1427741341","DE" +"1427741342","1427741342","BG" +"1427741343","1427741348","DE" +"1427741349","1427741350","RU" +"1427741351","1427741358","DE" +"1427741359","1427741359","BD" +"1427741360","1427741360","RU" +"1427741361","1427741361","BR" +"1427741362","1427741368","DE" +"1427741369","1427741369","KR" +"1427741370","1427741370","DE" +"1427741371","1427741372","GR" +"1427741373","1427741376","DE" +"1427741377","1427741377","AT" +"1427741378","1427741384","DE" +"1427741385","1427741385","IT" +"1427741386","1427741386","DE" +"1427741387","1427741387","AT" +"1427741388","1427741388","DE" +"1427741389","1427741391","US" +"1427741392","1427741393","DE" +"1427741394","1427741396","GB" +"1427741397","1427741399","CA" +"1427741400","1427741400","AL" +"1427741401","1427741403","DE" +"1427741404","1427741404","US" +"1427741405","1427741406","HU" +"1427741407","1427741408","DE" +"1427741409","1427741409","ES" +"1427741410","1427741412","SG" +"1427741413","1427742719","DE" +"1427742720","1427742751","IO" +"1427742752","1427742911","DE" +"1427742912","1427742975","BR" +"1427742976","1427743007","RU" +"1427743008","1427743039","US" +"1427743040","1427743071","BR" +"1427743072","1427743103","CY" +"1427743104","1427743135","BR" +"1427743136","1427743167","IN" +"1427743168","1427743199","CY" +"1427743200","1427743231","TR" +"1427743232","1427743263","GR" +"1427743264","1427743295","DE" +"1427743296","1427743327","BR" +"1427743328","1427743359","NL" +"1427743360","1427743423","BR" +"1427743424","1427743455","US" +"1427743456","1427743487","CY" +"1427743488","1427743519","DE" +"1427743520","1427743551","BR" +"1427743552","1427743583","DE" +"1427743584","1427743615","LV" +"1427743616","1427743647","DK" +"1427743648","1427743679","IN" +"1427743680","1427743711","RU" +"1427743712","1427743743","DE" +"1427743744","1427743775","MA" +"1427743776","1427743807","ZA" +"1427743808","1427743839","BR" +"1427743840","1427743871","RU" +"1427743872","1427743903","DE" +"1427743904","1427743935","US" +"1427743936","1427743967","RU" +"1427743968","1427743999","DE" +"1427744000","1427744031","AT" +"1427744032","1427744063","RU" +"1427744064","1427744095","DE" +"1427744096","1427744127","MA" +"1427744128","1427744159","DE" +"1427744160","1427744223","RU" +"1427744224","1427744255","DE" +"1427744256","1427744287","US" +"1427744288","1427744319","TR" +"1427744320","1427744351","IN" +"1427744352","1427744383","UA" +"1427744384","1427744415","PL" +"1427744416","1427744447","UA" +"1427744448","1427744479","US" +"1427744480","1427744511","DE" +"1427744512","1427744543","US" +"1427744544","1427744575","DE" +"1427744576","1427744607","PL" +"1427744608","1427744639","MA" +"1427744640","1427744671","TR" +"1427744672","1427744703","DE" +"1427744704","1427744799","BR" +"1427744800","1427744831","LT" +"1427744832","1427744863","DE" +"1427744864","1427744927","TR" +"1427744928","1427744959","HU" +"1427744960","1427744991","RU" +"1427744992","1427745023","DK" +"1427745024","1427745055","BM" +"1427745056","1427745087","US" +"1427745088","1427745119","MA" +"1427745120","1427745151","US" +"1427745152","1427745183","RO" +"1427745184","1427745215","CH" +"1427745216","1427745247","US" +"1427745248","1427745279","DE" +"1427745280","1427745311","MA" +"1427745312","1427745343","NL" +"1427745344","1427745375","RU" +"1427745376","1427745407","BR" +"1427745408","1427745471","US" +"1427745472","1427745503","RO" +"1427745504","1427745535","RU" +"1427745536","1427745567","BR" +"1427745568","1427745599","RU" +"1427745600","1427745631","DE" +"1427745632","1427745663","BM" +"1427745664","1427745695","CY" +"1427745696","1427745727","US" +"1427745728","1427745759","DE" +"1427745760","1427745791","LT" +"1427745792","1427745823","FR" +"1427745824","1427745855","US" +"1427745856","1427745887","BR" +"1427745888","1427745919","IN" +"1427745920","1427745951","ES" +"1427745952","1427745983","IN" +"1427745984","1427746015","RU" +"1427746016","1427746047","US" +"1427746048","1427746079","SE" +"1427746080","1427746111","GB" +"1427746112","1427746143","DE" +"1427746144","1427746175","GR" +"1427746176","1427746239","DE" +"1427746240","1427746271","US" +"1427746272","1427746463","DE" +"1427746464","1427746495","MA" +"1427746496","1427747839","DE" +"1427747840","1427747871","FI" +"1427747872","1427747935","BR" +"1427747936","1427747999","US" +"1427748000","1427748031","BR" +"1427748032","1427748063","DE" +"1427748064","1427748095","US" +"1427748096","1427748127","BR" +"1427748128","1427748159","DE" +"1427748160","1427748191","GB" +"1427748192","1427748255","DE" +"1427748256","1427748287","US" +"1427748288","1427748351","DE" +"1427748352","1427748383","BR" +"1427748384","1427748447","DE" +"1427748448","1427748479","RU" +"1427748480","1427748543","MA" +"1427748544","1427748575","DE" +"1427748576","1427748607","BR" +"1427748608","1427748639","HU" +"1427748640","1427748671","FR" +"1427748672","1427748703","DE" +"1427748704","1427748735","LT" +"1427748736","1427748799","BR" +"1427748800","1427748863","MA" +"1427748864","1427749471","DE" +"1427749472","1427749503","BR" +"1427749504","1427749535","DE" +"1427749536","1427749567","MA" +"1427749568","1427749599","CY" +"1427749600","1427749631","IN" +"1427749632","1427749663","RU" +"1427749664","1427749695","DE" +"1427749696","1427749727","BR" +"1427749728","1427749759","DE" +"1427749760","1427749791","BR" +"1427749792","1427749855","DE" +"1427749856","1427749887","RU" +"1427749888","1427749919","BR" +"1427749920","1427749951","US" +"1427749952","1427749983","BR" +"1427749984","1427750015","RU" +"1427750016","1427750079","DE" +"1427750080","1427750111","US" +"1427750112","1427750143","DE" +"1427750144","1427750175","US" +"1427750176","1427750207","SE" +"1427750208","1427750239","DE" +"1427750240","1427750271","US" +"1427750272","1427750303","GR" +"1427750304","1427750335","FR" +"1427750336","1427750367","US" +"1427750368","1427759903","DE" +"1427759904","1427759935","MA" +"1427759936","1427759967","HR" +"1427759968","1427759999","DE" +"1427760000","1427760031","BR" +"1427760032","1427760063","US" +"1427760064","1427760095","AR" +"1427760096","1427760127","US" +"1427760128","1427760159","DE" +"1427760160","1427760191","PL" +"1427760192","1427760255","US" +"1427760256","1427760319","BR" +"1427760320","1427760351","TR" +"1427760352","1427760383","RU" +"1427760384","1427760415","IN" +"1427760416","1427760447","US" +"1427760448","1427760479","BR" +"1427760480","1427760575","DE" +"1427760576","1427760607","CH" +"1427760608","1427760671","DE" +"1427760672","1427760703","BR" +"1427760704","1427760735","DE" +"1427760736","1427760767","BR" +"1427760768","1427760799","DE" +"1427760800","1427760831","US" +"1427760832","1427760863","DE" +"1427760864","1427760895","US" +"1427760896","1427760959","DE" +"1427760960","1427760991","CZ" +"1427760992","1427761023","BG" +"1427761024","1427761055","DE" +"1427761056","1427761087","CL" +"1427761088","1427761119","CH" +"1427761120","1427761151","TR" +"1427761152","1427761215","DE" +"1427761216","1427761247","TR" +"1427761248","1427761279","US" +"1427761280","1427761311","RU" +"1427761312","1427761343","UA" +"1427761344","1427761375","DE" +"1427761376","1427761407","TW" +"1427761408","1427761439","RU" +"1427761440","1427761471","DE" +"1427761472","1427761503","IN" +"1427761504","1427761535","PL" +"1427761536","1427761567","US" +"1427761568","1427761599","RU" +"1427761600","1427761631","EG" +"1427761632","1427761663","TR" +"1427761664","1427766019","DE" +"1427766020","1427766021","BY" +"1427766022","1427766024","DE" +"1427766025","1427766025","BY" +"1427766026","1427766027","DE" +"1427766028","1427766028","CH" +"1427766029","1427766029","IN" +"1427766030","1427766031","DE" +"1427766032","1427766032","CH" +"1427766033","1427766036","DE" +"1427766037","1427766039","CH" +"1427766040","1427766040","IN" +"1427766041","1427766047","DE" +"1427766048","1427766048","CH" +"1427766049","1427766052","DE" +"1427766053","1427766054","CH" +"1427766055","1427766055","AR" +"1427766056","1427766056","IN" +"1427766057","1427766057","CH" +"1427766058","1427766064","DE" +"1427766065","1427766065","IN" +"1427766066","1427766067","DE" +"1427766068","1427766070","IN" +"1427766071","1427766072","DE" +"1427766073","1427766073","IN" +"1427766074","1427766074","DE" +"1427766075","1427766075","BY" +"1427766076","1427766087","DE" +"1427766088","1427766088","AR" +"1427766089","1427766089","IN" +"1427766090","1427766092","DE" +"1427766093","1427766093","IN" +"1427766094","1427766110","DE" +"1427766111","1427766111","AR" +"1427766112","1427766121","DE" +"1427766122","1427766122","AR" +"1427766123","1427766124","DE" +"1427766125","1427766125","IN" +"1427766126","1427766126","DE" +"1427766127","1427766127","AR" +"1427766128","1427766136","DE" +"1427766137","1427766138","AR" +"1427766139","1427767295","DE" +"1427767296","1427800063","BE" +"1427800064","1427832831","RU" +"1427832832","1427865599","BE" +"1427865600","1427898367","DK" +"1427898368","1427914751","RU" +"1427914752","1427931135","BE" +"1427931136","1427947519","PL" +"1427947520","1427963903","RU" +"1427963904","1427980287","TR" +"1427980288","1427996671","FI" +"1427996672","1428013055","KZ" +"1428013056","1428029439","EE" +"1428029440","1428045823","SE" +"1428045824","1428062207","MK" +"1428062208","1428078591","SE" +"1428078592","1428094975","RU" +"1428094976","1428103167","AT" +"1428103168","1428111359","GB" +"1428111360","1428115455","A2" +"1428115456","1428116735","US" +"1428116736","1428117503","A2" +"1428117504","1428118015","US" +"1428118016","1428118783","A2" +"1428118784","1428119039","US" +"1428119040","1428119551","A2" +"1428119552","1428121599","LV" +"1428121600","1428123647","FR" +"1428123648","1428126975","RU" +"1428126976","1428127231","TR" +"1428127232","1428127743","RU" +"1428127744","1428129791","ES" +"1428129792","1428131839","GB" +"1428131840","1428133887","FR" +"1428133888","1428135935","LI" +"1428135936","1428137983","IT" +"1428137984","1428140031","GB" +"1428140032","1428142079","RU" +"1428142080","1428143119","DE" +"1428143120","1428143135","RU" +"1428143136","1428143263","DE" +"1428143264","1428143279","CH" +"1428143280","1428144127","DE" +"1428144128","1428147271","FR" +"1428147272","1428147279","GB" +"1428147280","1428147343","FR" +"1428147344","1428147351","GB" +"1428147352","1428147599","FR" +"1428147600","1428147615","GB" +"1428147616","1428147855","FR" +"1428147856","1428147871","US" +"1428147872","1428148175","FR" +"1428148176","1428148191","CH" +"1428148192","1428150487","FR" +"1428150488","1428150495","GB" +"1428150496","1428151231","FR" +"1428151232","1428151295","CH" +"1428151296","1428152319","FR" +"1428152320","1428160511","PL" +"1428160512","1428260863","IT" +"1428260864","1428261119","GB" +"1428261120","1428474367","IT" +"1428474368","1428474623","US" +"1428474624","1428536831","IT" +"1428536832","1428537343","US" +"1428537344","1428737279","IT" +"1428737280","1428737535","US" +"1428737536","1429209087","IT" +"1429209088","1430257663","ES" +"1430257664","1430388735","IL" +"1430388736","1430519807","HU" +"1430519808","1430650879","FR" +"1430650880","1430781951","CZ" +"1430781952","1431044095","GR" +"1431044096","1431306239","FI" +"1431306240","1431568383","DK" +"1431568384","1431830527","ES" +"1431830528","1431832832","DE" +"1431832833","1431832846","AT" +"1431832847","1431837680","DE" +"1431837681","1431837694","AT" +"1431837695","1431838719","DE" +"1431838720","1431839007","BE" +"1431839008","1431839039","DE" +"1431839040","1431846911","BE" +"1431846912","1431855103","NO" +"1431855104","1431863295","NL" +"1431863296","1431864391","PT" +"1431864392","1431864399","ES" +"1431864400","1431864879","PT" +"1431864880","1431864887","ES" +"1431864888","1431864935","PT" +"1431864936","1431864943","ES" +"1431864944","1431865335","PT" +"1431865336","1431865343","ES" +"1431865344","1431865631","PT" +"1431865632","1431865639","ES" +"1431865640","1431865663","PT" +"1431865664","1431865679","ES" +"1431865680","1431866447","PT" +"1431866448","1431866455","NL" +"1431866456","1431866479","PT" +"1431866480","1431866495","ES" +"1431866496","1431871487","PT" +"1431871488","1431879679","RU" +"1431879680","1431887871","IT" +"1431887872","1431896063","GB" +"1431896064","1431904255","NO" +"1431904256","1431912447","EE" +"1431912448","1431920639","SE" +"1431920640","1431928831","RU" +"1431928832","1431937023","IT" +"1431937024","1431945215","PL" +"1431945216","1431953407","NO" +"1431953408","1431956735","DK" +"1431956736","1431956991","EU" +"1431956992","1431961599","DK" +"1431961600","1431969791","CH" +"1431969792","1431977983","GB" +"1431977984","1431979479","NL" +"1431979480","1431979487","GB" +"1431979488","1431980151","NL" +"1431980152","1431980159","US" +"1431980160","1431980687","NL" +"1431980688","1431980695","DE" +"1431980696","1431980719","NL" +"1431980720","1431980727","SA" +"1431980728","1431986175","NL" +"1431986176","1431994367","RU" +"1431994368","1432002559","AT" +"1432002560","1432010751","HU" +"1432010752","1432018943","UA" +"1432018944","1432023551","GB" +"1432023552","1432023567","BG" +"1432023568","1432027135","GB" +"1432027136","1432035327","IE" +"1432035328","1432043519","GB" +"1432043520","1432051711","ES" +"1432051712","1432059903","RU" +"1432059904","1432068095","BG" +"1432068096","1432076287","BE" +"1432076288","1432084479","RU" +"1432084480","1432092671","GB" +"1432092672","1432100863","RU" +"1432100864","1432109055","CZ" +"1432109056","1432117247","GB" +"1432117248","1432117759","CY" +"1432125440","1432131607","NL" +"1432131608","1432131615","PH" +"1432131616","1432131679","NL" +"1432131680","1432131695","PH" +"1432131696","1432131711","NL" +"1432131712","1432131727","PH" +"1432131728","1432131743","NL" +"1432131744","1432131759","PH" +"1432131760","1432131775","NL" +"1432131776","1432131783","PH" +"1432131784","1432131887","NL" +"1432131888","1432131903","PH" +"1432131904","1432131919","NL" +"1432131920","1432131935","PH" +"1432131936","1432131951","NL" +"1432131952","1432131967","PH" +"1432131968","1432131999","NL" +"1432132000","1432132031","PH" +"1432132032","1432132271","NL" +"1432132272","1432132287","PH" +"1432132288","1432132303","NL" +"1432132304","1432132319","PH" +"1432132320","1432132351","NL" +"1432132352","1432132495","PH" +"1432132496","1432132511","NL" +"1432132512","1432132559","PH" +"1432132560","1432132639","NL" +"1432132640","1432132655","PH" +"1432132656","1432132671","NL" +"1432132672","1432132687","PH" +"1432132688","1432132815","NL" +"1432132816","1432132831","PH" +"1432132832","1432132895","NL" +"1432132896","1432132911","PH" +"1432132912","1432132927","NL" +"1432132928","1432132943","PH" +"1432132944","1432133039","NL" +"1432133040","1432133055","PH" +"1432133056","1432133151","NL" +"1432133152","1432133167","PH" +"1432133168","1432133199","NL" +"1432133200","1432133215","PH" +"1432133216","1432133327","NL" +"1432133328","1432133343","PH" +"1432133344","1432133455","NL" +"1432133456","1432133503","PH" +"1432133504","1432133543","NL" +"1432133544","1432133551","PH" +"1432133552","1432133631","NL" +"1432133632","1432150015","GB" +"1432150016","1432158207","BA" +"1432158208","1432160255","DE" +"1432160256","1432160511","CH" +"1432160512","1432165247","DE" +"1432165248","1432165375","PL" +"1432165376","1432166399","DE" +"1432166400","1432174591","RU" +"1432174592","1432182783","DE" +"1432182784","1432190975","CZ" +"1432190976","1432199167","RU" +"1432199168","1432207359","CZ" +"1432207360","1432215551","LU" +"1432215552","1432223743","NO" +"1432223744","1432240127","RU" +"1432240128","1432248319","HR" +"1432248320","1432256511","ME" +"1432256512","1432264703","BA" +"1432264704","1432272895","AD" +"1432272896","1432281087","IT" +"1432281088","1432289279","LU" +"1432289280","1432297471","GB" +"1432297472","1432305663","NO" +"1432305664","1432313855","BG" +"1432313856","1432322047","GB" +"1432322048","1432338431","RU" +"1432338432","1432346623","FR" +"1432346624","1432349762","TR" +"1432349763","1432349770","RU" +"1432349771","1433403391","TR" +"1433403392","1433406431","ES" +"1433406432","1433406447","US" +"1433406448","1433407487","ES" +"1433407488","1433410047","NL" +"1433410048","1433410559","US" +"1433410560","1433411071","ES" +"1433411072","1433411327","US" +"1433411328","1433411343","ES" +"1433411344","1433411375","TR" +"1433411376","1433411407","US" +"1433411408","1433411423","TR" +"1433411424","1433411439","ES" +"1433411440","1433411455","TR" +"1433411456","1433411519","US" +"1433411520","1433411583","ES" +"1433411584","1433419775","RU" +"1433419776","1433427967","LB" +"1433427968","1433436159","RU" +"1433436160","1433444351","NO" +"1433444352","1433452543","SE" +"1433452544","1433460735","PL" +"1433460736","1433468927","DE" +"1433468928","1433477119","KG" +"1433477120","1433485311","RU" +"1433485312","1433493503","GB" +"1433493504","1433501695","PS" +"1433501696","1433509887","RU" +"1433509888","1433518079","NO" +"1433518080","1433526271","RU" +"1433526272","1433534463","NL" +"1433534464","1433542655","RU" +"1433542656","1433550847","HR" +"1433550848","1433559039","RU" +"1433559040","1433567231","PS" +"1433567232","1433575423","DE" +"1433575424","1433583615","RU" +"1433583616","1433591807","UA" +"1433591808","1433599999","GE" +"1433600000","1433602303","DE" +"1433602304","1433602319","LU" +"1433602320","1433608191","DE" +"1433608192","1433610239","EU" +"1433610240","1433612287","US" +"1433612288","1433614335","GB" +"1433614336","1433615359","DE" +"1433615360","1433615871","FR" +"1433615872","1433616383","GB" +"1433616384","1433619455","AE" +"1433619456","1433619711","US" +"1433619712","1433624575","AE" +"1433624576","1433632767","LV" +"1433632768","1433640959","GI" +"1433640960","1433649151","RU" +"1433649152","1433657343","KG" +"1433657344","1433665535","RU" +"1433665536","1433673727","GB" +"1433673728","1433681919","FR" +"1433681920","1433690111","IS" +"1433690112","1433698303","RU" +"1433698304","1433706495","IT" +"1433706496","1433714687","GB" +"1433714688","1433722879","DE" +"1433722880","1433731071","IT" +"1433731072","1433739263","PL" +"1433739264","1433747455","GE" +"1433747456","1433755647","RU" +"1433755648","1433763839","EE" +"1433763840","1433772031","FR" +"1433772032","1433788415","SE" +"1433788416","1433796607","UZ" +"1433796608","1433804799","GB" +"1433804800","1433805823","FR" +"1433805824","1433805855","AE" +"1433805856","1433805887","US" +"1433805888","1433806591","FR" +"1433806592","1433806623","GB" +"1433806624","1433806655","BE" +"1433806656","1433806687","IT" +"1433806688","1433806719","NL" +"1433806720","1433806751","DE" +"1433806752","1433806783","ES" +"1433806784","1433806815","CH" +"1433806816","1433806847","AT" +"1433806848","1433812991","FR" +"1433812992","1433821183","BG" +"1433821184","1433829375","GE" +"1433829376","1433831423","CZ" +"1433831424","1433833471","RU" +"1433833472","1433835519","IT" +"1433835520","1433837567","GB" +"1433837568","1433839615","DE" +"1433839616","1433841663","GB" +"1433841664","1433843711","RU" +"1433845760","1433847807","BG" +"1433847808","1433849855","SE" +"1433849856","1433851903","BE" +"1433851904","1433853951","CH" +"1433853952","1433855999","RU" +"1433856000","1433858047","GB" +"1433858048","1433860095","ES" +"1433860096","1433862143","DE" +"1433862144","1433862703","CH" +"1433862704","1433862719","GB" +"1433862720","1433862751","CH" +"1433862752","1433862783","MC" +"1433862784","1433862975","CH" +"1433862976","1433862991","GB" +"1433862992","1433863055","CH" +"1433863056","1433863071","GB" +"1433863072","1433863095","CH" +"1433863096","1433863119","US" +"1433863120","1433863423","CH" +"1433863424","1433863487","US" +"1433863488","1433864191","CH" +"1433864192","1433866239","HU" +"1433866240","1433866751","NL" +"1433866752","1433867007","GB" +"1433867008","1433867519","NL" +"1433867520","1433867647","GB" +"1433867648","1433867775","NL" +"1433867776","1433870335","GB" +"1433870336","1433872383","TR" +"1433872384","1433874431","IT" +"1433874432","1433876479","NL" +"1433876480","1433878527","GB" +"1433878528","1433880575","TR" +"1433880576","1433882623","RU" +"1433882624","1433884671","GB" +"1433884672","1433886719","CZ" +"1433886720","1433888767","GB" +"1433888768","1433890815","NL" +"1433890816","1433892863","GB" +"1433892864","1433894911","MT" +"1433894912","1433896959","SE" +"1433896960","1433897471","NO" +"1433897472","1433897727","NL" +"1433897728","1433899007","NO" +"1433899008","1433901055","RU" +"1433901056","1433905151","DE" +"1433905152","1433907199","FR" +"1433907200","1433909247","IT" +"1433909248","1433911295","BE" +"1433911296","1433913343","ES" +"1433913344","1433913875","NL" +"1433913876","1433913879","DE" +"1433913880","1433914047","NL" +"1433914048","1433915135","DE" +"1433915136","1433915391","NL" +"1433915392","1433917439","DE" +"1433917440","1433919487","BE" +"1433919488","1433921535","GB" +"1433921536","1433921735","CH" +"1433921736","1433921736","EU" +"1433921737","1433923583","CH" +"1433923584","1433923711","BE" +"1433923712","1433924479","NL" +"1433924480","1433925631","BE" +"1433925632","1433927679","GB" +"1433927680","1434189823","RO" +"1434189824","1434451967","AT" +"1434451968","1434517503","PL" +"1434517504","1434550271","DK" +"1434550272","1434583039","SA" +"1434583040","1434615807","BG" +"1434615808","1434648575","IL" +"1434648576","1434681343","FI" +"1434681344","1434681983","DE" +"1434681984","1434682015","CY" +"1434682016","1434682111","NL" +"1434682112","1434682303","DE" +"1434682304","1434682367","NL" +"1434682368","1434683327","DE" +"1434683328","1434683391","MY" +"1434683392","1434685759","DE" +"1434685760","1434685951","NL" +"1434685952","1434686975","DE" +"1434686976","1434687231","NL" +"1434687232","1434687359","DE" +"1434687360","1434687487","NL" +"1434687488","1434687647","DE" +"1434687648","1434687679","NL" +"1434687680","1434688031","DE" +"1434688032","1434688127","NL" +"1434688128","1434688143","DE" +"1434688144","1434688151","NL" +"1434688152","1434688207","DE" +"1434688208","1434688223","NL" +"1434688224","1434688255","DE" +"1434688256","1434689023","NL" +"1434689024","1434689887","DE" +"1434689888","1434689919","NL" +"1434689920","1434689951","DE" +"1434689952","1434690015","NL" +"1434690016","1434691071","DE" +"1434691072","1434691327","NL" +"1434691328","1434692607","DE" +"1434692608","1434692671","NL" +"1434692672","1434694655","DE" +"1434694656","1434694719","NL" +"1434694720","1434694911","DE" +"1434694912","1434695679","NL" +"1434695680","1434696447","DE" +"1434696448","1434696703","NL" +"1434696704","1434698239","DE" +"1434698240","1434698367","NL" +"1434698368","1434698879","DE" +"1434698880","1434699263","NL" +"1434699264","1434702463","DE" +"1434702464","1434702591","NL" +"1434702592","1434702655","DE" +"1434702656","1434702671","NL" +"1434702672","1434702783","DE" +"1434702784","1434702911","NL" +"1434702912","1434702975","DE" +"1434702976","1434703039","NL" +"1434703040","1434704895","DE" +"1434704896","1434705407","NL" +"1434705408","1434705727","DE" +"1434705728","1434705919","NL" +"1434705920","1434708991","DE" +"1434708992","1434709247","NL" +"1434709248","1434709503","DE" +"1434709504","1434709759","NL" +"1434709760","1434710015","DE" +"1434710016","1434710527","NL" +"1434710528","1434712063","DE" +"1434712064","1434712575","NL" +"1434712576","1434712959","DE" +"1434712960","1434712975","NL" +"1434712976","1434714111","DE" +"1434714112","1434746879","AZ" +"1434746880","1434779647","CZ" +"1434779648","1434812415","GB" +"1434812416","1434845183","IR" +"1434845184","1434877951","FI" +"1434877952","1434910719","IE" +"1434910720","1434943487","CZ" +"1434943488","1434976255","SK" +"1434976256","1435107327","ES" +"1435107328","1435238399","PT" +"1435238400","1435500543","RU" +"1435500544","1436024831","NL" +"1436024832","1436090367","ES" +"1436090368","1436155903","TR" +"1436155904","1436221439","OM" +"1436221440","1436286975","ES" +"1436286976","1436418047","FI" +"1436418048","1436420095","DE" +"1436420096","1436422143","GB" +"1436422144","1436424191","FR" +"1436424192","1436426239","CH" +"1436426240","1436428287","BA" +"1436428288","1436430335","GB" +"1436430336","1436432383","RU" +"1436432384","1436436479","GB" +"1436436480","1436438527","LV" +"1436438528","1436440575","IT" +"1436440576","1436442623","RU" +"1436442624","1436444671","TR" +"1436444672","1436446719","BE" +"1436446720","1436450815","FR" +"1436450816","1436452863","BH" +"1436452864","1436453119","NL" +"1436453120","1436453314","DE" +"1436453315","1436453315","EU" +"1436453316","1436453631","DE" +"1436453632","1436454399","GB" +"1436454400","1436454655","NL" +"1436454656","1436454911","GB" +"1436454912","1436456959","AZ" +"1436456960","1436459007","GB" +"1436459008","1436461055","NL" +"1436461056","1436463103","ES" +"1436463104","1436465151","DE" +"1436465152","1436467199","RU" +"1436467200","1436469247","DE" +"1436469248","1436471295","NL" +"1436471296","1436471551","BE" +"1436471552","1436471615","NL" +"1436471616","1436471679","FR" +"1436471680","1436471743","BE" +"1436471744","1436471807","BR" +"1436471808","1436473343","BE" +"1436473344","1436473599","RO" +"1436473600","1436473855","IT" +"1436473856","1436474111","RO" +"1436474112","1436474367","IT" +"1436474368","1436475391","RO" +"1436475392","1436477439","AT" +"1436477440","1436479487","CH" +"1436479488","1436481535","RU" +"1436481536","1436483583","NL" +"1436483584","1436485631","UA" +"1436485632","1436487471","DE" +"1436487472","1436487487","AT" +"1436487488","1436487623","DE" +"1436487624","1436487631","AT" +"1436487632","1436487679","DE" +"1436487680","1436489727","IE" +"1436489728","1436491775","KZ" +"1436491776","1436495871","RU" +"1436495872","1436497919","HU" +"1436497920","1436499967","GB" +"1436499968","1436504063","TR" +"1436504064","1436508159","GB" +"1436508160","1436510207","NL" +"1436510208","1436512255","SK" +"1436512256","1436514303","NL" +"1436514304","1436516351","GI" +"1436516352","1436520447","GB" +"1436520448","1436522495","IT" +"1436522496","1436524543","GB" +"1436524544","1436526591","IL" +"1436526592","1436528639","GB" +"1436528640","1436530687","IT" +"1436530688","1436532735","GB" +"1436532736","1436535039","IT" +"1436535040","1436535295","AP" +"1436535296","1436535839","IT" +"1436535840","1436535855","ET" +"1436535856","1436535943","IT" +"1436535944","1436535951","ET" +"1436535952","1436535999","IT" +"1436536000","1436536007","MO" +"1436536008","1436536831","IT" +"1436536832","1436538879","GB" +"1436538880","1436540927","JO" +"1436540928","1436542975","RU" +"1436542976","1436544203","NL" +"1436544204","1436544207","HK" +"1436544208","1436545023","NL" +"1436545024","1436547071","DE" +"1436547072","1436549119","GB" +"1436549120","1436811263","CZ" +"1436811264","1437073407","NO" +"1437073408","1437335551","FR" +"1437335552","1437597695","RU" +"1437597696","1438121983","DE" +"1438121984","1438127103","NL" +"1438127104","1438127359","GB" +"1438127360","1438127615","SE" +"1438127616","1438127871","BE" +"1438127872","1438142463","NL" +"1438142464","1438142719","GB" +"1438142720","1438187519","NL" +"1438187520","1438253055","IR" +"1438253056","1438318591","RO" +"1438318592","1438384127","BG" +"1438384128","1438400511","FI" +"1438400512","1438433279","SE" +"1438433280","1438515199","GB" +"1438515200","1438519007","DE" +"1438519008","1438519039","SI" +"1438519040","1438523391","DE" +"1438523392","1438524159","NL" +"1438524160","1438524415","DE" +"1438524416","1438524947","NL" +"1438524948","1438524951","DE" +"1438524952","1438525335","NL" +"1438525336","1438525343","DE" +"1438525344","1438525607","NL" +"1438525608","1438580735","DE" +"1438580736","1438646271","NL" +"1438646272","1438662655","RU" +"1438662656","1438679039","ES" +"1438679040","1438695423","RU" +"1438695424","1438711807","FR" +"1438711808","1438728191","CZ" +"1438728192","1438744575","RU" +"1438744576","1438760959","AT" +"1438760960","1438777343","PL" +"1438777344","1438793727","SE" +"1438793728","1438810111","SA" +"1438810112","1438826495","SE" +"1438826496","1438842879","FI" +"1438842880","1438859263","SE" +"1438859264","1438860287","DE" +"1438860288","1438860415","US" +"1438860416","1438861311","DE" +"1438861312","1438861327","US" +"1438861328","1438861567","DE" +"1438861568","1438861635","US" +"1438861636","1438861695","DE" +"1438861696","1438861823","US" +"1438861824","1438862335","CH" +"1438862336","1438862615","US" +"1438862616","1438862623","DE" +"1438862624","1438862655","US" +"1438862656","1438869591","DE" +"1438869592","1438869595","RU" +"1438869596","1438869647","DE" +"1438869648","1438869651","LV" +"1438869652","1438869655","US" +"1438869656","1438869663","UA" +"1438869664","1438870783","DE" +"1438870784","1438871039","GB" +"1438871040","1438873119","DE" +"1438873120","1438873127","PA" +"1438873128","1438873671","DE" +"1438873672","1438873679","PA" +"1438873680","1438874687","DE" +"1438874688","1438874695","CH" +"1438874696","1438874719","DE" +"1438874720","1438874751","NL" +"1438874752","1438874759","DE" +"1438874760","1438874767","PA" +"1438874768","1438874783","DE" +"1438874784","1438874791","PA" +"1438874792","1438874799","DE" +"1438874800","1438874855","PA" +"1438874856","1438874863","DE" +"1438874864","1438874879","PA" +"1438874880","1438875647","DE" +"1438875648","1438876159","RU" +"1438876160","1438876415","LT" +"1438876416","1438876927","RU" +"1438876928","1438877183","IQ" +"1438877184","1438877439","A2" +"1438877440","1438877695","RU" +"1438877696","1438877951","LT" +"1438877952","1438878207","LB" +"1438878208","1438878463","IQ" +"1438878464","1438878975","LB" +"1438878976","1438879231","IQ" +"1438879232","1438880767","RU" +"1438880768","1438881791","LB" +"1438881792","1438882303","RU" +"1438882304","1438882559","LT" +"1438882560","1438883583","RU" +"1438883584","1438883839","AM" +"1438883840","1438884351","RU" +"1438884352","1438884607","LB" +"1438884608","1438884863","IQ" +"1438884864","1438885887","RU" +"1438885888","1438890239","LT" +"1438890240","1438890495","RU" +"1438890496","1438890751","IQ" +"1438890752","1438892031","RU" +"1438892032","1438895359","CH" +"1438895360","1438900223","IS" +"1438900224","1438908415","CH" +"1438908416","1438924799","GR" +"1438924800","1438941183","NO" +"1438941184","1438957567","BG" +"1438957568","1438973951","EE" +"1438973952","1438994175","DE" +"1438994176","1438994431","SE" +"1438994432","1438994551","DE" +"1438994552","1438994559","GB" +"1438994560","1438994619","DE" +"1438994620","1438994623","SE" +"1438994624","1438994751","DE" +"1438994752","1438994759","GB" +"1438994760","1438994763","SE" +"1438994764","1438995039","DE" +"1438995040","1438995047","GB" +"1438995048","1438995067","DE" +"1438995068","1438995071","SE" +"1438995072","1438995399","DE" +"1438995400","1438995407","GB" +"1438995408","1438995647","DE" +"1438995648","1438995655","GB" +"1438995656","1438998697","DE" +"1438998698","1438998730","NL" +"1438998731","1438999167","DE" +"1438999168","1438999248","NL" +"1438999249","1438999252","DE" +"1438999253","1438999295","NL" +"1438999296","1438999551","DE" +"1438999552","1438999807","GB" +"1438999808","1439000575","DE" +"1439000576","1439000831","NL" +"1439000832","1439002367","DE" +"1439002368","1439002623","NL" +"1439002624","1439006567","DE" +"1439006568","1439006575","AT" +"1439006576","1439006671","DE" +"1439006672","1439006675","PL" +"1439006676","1439006719","DE" +"1439006720","1439023103","SE" +"1439023104","1439039487","IS" +"1439039488","1439055871","IR" +"1439055872","1439072255","RU" +"1439072256","1439088639","UA" +"1439088640","1439105023","PL" +"1439105024","1439121407","AT" +"1439121408","1439154175","DE" +"1439154176","1439156106","GB" +"1439156107","1439156108","LB" +"1439156109","1439170559","GB" +"1439170560","1439236095","NO" +"1439236096","1439301631","BE" +"1439301632","1439305727","RU" +"1439305728","1439309823","DK" +"1439309824","1439318015","PL" +"1439318016","1439322111","DK" +"1439322112","1439326207","RO" +"1439326208","1439330303","PL" +"1439330304","1439334399","RS" +"1439334400","1439338495","RU" +"1439338496","1439342591","PL" +"1439342592","1439346687","UA" +"1439346688","1439350783","RU" +"1439350784","1439354879","UA" +"1439354880","1439358975","PL" +"1439358976","1439367167","RU" +"1439367168","1439375359","NL" +"1439375360","1439383551","DE" +"1439383552","1439432703","NL" +"1439432704","1439498239","RO" +"1439498240","1439513599","DE" +"1439513600","1439514623","GB" +"1439514624","1439516671","IT" +"1439516672","1439518207","DE" +"1439518208","1439518719","IT" +"1439518720","1439527935","DE" +"1439527936","1439528959","GB" +"1439528960","1439529599","DE" +"1439529600","1439529727","GB" +"1439529728","1439529983","DE" +"1439529984","1439530239","EG" +"1439530240","1439534079","DE" +"1439534080","1439535103","GB" +"1439535104","1439536127","IT" +"1439536128","1439537151","DE" +"1439537152","1439538175","IT" +"1439538176","1439538687","GB" +"1439538688","1439539199","IT" +"1439539200","1439549439","DE" +"1439549440","1439551487","IT" +"1439551488","1439556095","DE" +"1439556096","1439556607","IT" +"1439556608","1439558143","DE" +"1439558144","1439558911","IT" +"1439558912","1439560191","DE" +"1439560192","1439560447","IT" +"1439560448","1439560703","DE" +"1439560704","1439561215","IT" +"1439561216","1439561727","DE" +"1439561728","1439562239","GB" +"1439562240","1439562751","IE" +"1439562752","1439563007","DE" +"1439563008","1439563263","GB" +"1439563264","1439563775","DE" +"1439563776","1439629311","LT" +"1439629312","1439694847","CZ" +"1439694848","1439825919","SA" +"1439825920","1439956991","GB" +"1439956992","1440103181","DE" +"1440103182","1440103182","A1" +"1440103183","1440204799","DE" +"1440204800","1440215039","EU" +"1440215040","1440251903","DE" +"1440251904","1440284671","SK" +"1440284672","1440317439","FI" +"1440317440","1440350207","BG" +"1440350208","1440382975","CH" +"1440382976","1440415743","DK" +"1440415744","1440448511","ES" +"1440448512","1440481279","PL" +"1440481280","1440514047","IS" +"1440514048","1440546815","DE" +"1440546816","1440579583","NO" +"1440579584","1440645119","PL" +"1440645120","1440677887","RS" +"1440677888","1440710655","NL" +"1440710656","1440743423","UA" +"1440743424","1441267711","SE" +"1441267712","1441275903","DE" +"1441275904","1441284095","GB" +"1441284096","1441292287","AT" +"1441292288","1441300479","RU" +"1441300480","1441308671","LT" +"1441308672","1441316863","SE" +"1441316864","1441325055","MT" +"1441325056","1441325759","PL" +"1441325760","1441325775","US" +"1441325776","1441333247","PL" +"1441333248","1441349631","DE" +"1441349632","1441357823","RU" +"1441357824","1441366015","AT" +"1441366016","1441374207","RU" +"1441374208","1441382399","GB" +"1441382400","1441384511","FR" +"1441384512","1441384543","US" +"1441384544","1441386111","FR" +"1441386112","1441386239","IL" +"1441386240","1441387519","FR" +"1441387520","1441387647","US" +"1441387648","1441387903","FR" +"1441387904","1441387919","GN" +"1441387920","1441387935","FR" +"1441387936","1441387951","GB" +"1441387952","1441388671","FR" +"1441388672","1441388799","CA" +"1441388800","1441389055","FR" +"1441389056","1441389119","IE" +"1441389120","1441389223","FR" +"1441389224","1441389231","LU" +"1441389232","1441389567","FR" +"1441389568","1441389599","LU" +"1441389600","1441390383","FR" +"1441390384","1441390399","CA" +"1441390400","1441390591","FR" +"1441390592","1441398783","DK" +"1441398784","1441415167","RU" +"1441415168","1441423359","GB" +"1441423360","1441431551","RU" +"1441431552","1441439743","GB" +"1441439744","1441447935","LV" +"1441447936","1441456127","BE" +"1441456128","1441464319","NL" +"1441464320","1441468671","SE" +"1441468672","1441470719","DK" +"1441470720","1441472511","SE" +"1441472512","1441480703","RU" +"1441480704","1441488895","TR" +"1441488896","1441492223","GB" +"1441492224","1441492479","BE" +"1441492480","1441497087","GB" +"1441497088","1441505279","IT" +"1441505280","1441521663","RU" +"1441521664","1441529855","DK" +"1441529856","1441538047","RU" +"1441538048","1441542911","DE" +"1441542912","1441542927","RO" +"1441542928","1441543567","DE" +"1441543568","1441543583","CH" +"1441543584","1441543599","HR" +"1441543600","1441544063","DE" +"1441544064","1441544127","TR" +"1441544128","1441545535","DE" +"1441545536","1441545599","AT" +"1441545600","1441546239","DE" +"1441546240","1441554431","DK" +"1441554432","1441554687","GB" +"1441554688","1441554943","NL" +"1441554944","1441555199","GB" +"1441555200","1441555455","DE" +"1441555456","1441556735","GB" +"1441556736","1441556991","DE" +"1441556992","1441557759","GB" +"1441557760","1441558015","NL" +"1441558016","1441562623","GB" +"1441562624","1441566719","IQ" +"1441566720","1441570815","IR" +"1441570816","1441579007","RU" +"1441579008","1441582159","DE" +"1441582160","1441582175","US" +"1441582176","1441582975","DE" +"1441582976","1441583103","US" +"1441583104","1441586431","DE" +"1441586432","1441586687","US" +"1441586688","1441587199","DE" +"1441587200","1441594879","AT" +"1441594880","1441595135","DE" +"1441595136","1441603583","AT" +"1441603584","1441611775","RU" +"1441611776","1441619967","DE" +"1441619968","1441620271","FR" +"1441620272","1441620287","ES" +"1441620288","1441620407","FR" +"1441620408","1441620411","ES" +"1441620412","1441620735","FR" +"1441620736","1441620767","ES" +"1441620768","1441620863","FR" +"1441620864","1441620895","ES" +"1441620896","1441620927","PT" +"1441620928","1441620959","ES" +"1441620960","1441628159","FR" +"1441628160","1441636351","SA" +"1441636352","1441644543","PL" +"1441644544","1441652735","GB" +"1441652736","1441660927","SK" +"1441660928","1441669119","ES" +"1441669120","1441677311","GE" +"1441677312","1441685503","HU" +"1441685504","1441693695","UA" +"1441693696","1441694719","BR" +"1441694720","1441695743","DE" +"1441695744","1441696767","US" +"1441696768","1441697023","AP" +"1441697024","1441697791","SG" +"1441697792","1441698815","US" +"1441698816","1441701887","DE" +"1441701888","1441710079","AT" +"1441710080","1441718271","SE" +"1441718272","1441726463","DE" +"1441726464","1441729023","KW" +"1441729024","1441729535","SG" +"1441729536","1441734655","KW" +"1441734656","1441742847","RU" +"1441742848","1441751039","CZ" +"1441751040","1441759231","DE" +"1441759232","1441767423","BG" +"1441767424","1441775615","IT" +"1441775616","1441783807","ES" +"1441783808","1441791999","CZ" +"1441792000","1442316287","PT" +"1442316288","1442316583","SK" +"1442316584","1442316591","DE" +"1442316592","1442321455","SK" +"1442321456","1442321463","DE" +"1442321464","1442332927","SK" +"1442332928","1442333055","BE" +"1442333056","1442381823","SK" +"1442381824","1442447359","RU" +"1442447360","1442512895","IL" +"1442512896","1442578431","ES" +"1442578432","1442643967","NO" +"1442643968","1442709503","EE" +"1442709504","1442775039","LV" +"1442775040","1442779135","PL" +"1442779136","1442783231","DE" +"1442783232","1442787327","NO" +"1442787328","1442791423","LT" +"1442791424","1442795519","LV" +"1442795520","1442799615","DE" +"1442799616","1442803711","LT" +"1442803712","1442807807","UA" +"1442807808","1442811903","BG" +"1442811904","1442815999","AT" +"1442816000","1442820095","BG" +"1442820096","1442822143","UA" +"1442822144","1442824191","RU" +"1442824192","1442828287","BE" +"1442828288","1442832383","NL" +"1442832384","1442836479","GB" +"1442836480","1442840575","PL" +"1442840576","1444937727","GB" +"1444937728","1445068799","AT" +"1445068800","1445199871","RO" +"1445199872","1445330943","QA" +"1445330944","1445396479","LT" +"1445396480","1445429247","BE" +"1445429248","1445429311","NL" +"1445429312","1445430303","BE" +"1445430304","1445431295","NL" +"1445431296","1445431647","BE" +"1445431648","1445431679","NL" +"1445431680","1445431807","BE" +"1445431808","1445433855","NL" +"1445433856","1445433887","BE" +"1445433888","1445434111","NL" +"1445434112","1445434399","BE" +"1445434400","1445434527","NL" +"1445434528","1445434559","BE" +"1445434560","1445434623","NL" +"1445434624","1445435135","BE" +"1445435136","1445435395","NL" +"1445435396","1445435399","BE" +"1445435400","1445435423","NL" +"1445435424","1445435431","BE" +"1445435432","1445435967","NL" +"1445435968","1445435999","BE" +"1445436000","1445436287","NL" +"1445436288","1445436415","BE" +"1445436416","1445436463","NL" +"1445436464","1445436511","BE" +"1445436512","1445436799","NL" +"1445436800","1445436863","BE" +"1445436864","1445436895","NL" +"1445436896","1445436927","BE" +"1445436928","1445436959","NL" +"1445436960","1445437182","BE" +"1445437183","1445437311","NL" +"1445437312","1445437319","BE" +"1445437320","1445437439","NL" +"1445437440","1445437695","BE" +"1445437696","1445437711","NL" +"1445437712","1445437743","BE" +"1445437744","1445437823","NL" +"1445437824","1445438271","BE" +"1445438272","1445439999","NL" +"1445440000","1445440255","BE" +"1445440256","1445442559","NL" +"1445442560","1445443327","BE" +"1445443328","1445445119","NL" +"1445445120","1445445855","BE" +"1445445856","1445447679","NL" +"1445447680","1445451519","BE" +"1445451520","1445451647","NL" +"1445451648","1445456126","BE" +"1445456127","1445456127","NL" +"1445456128","1445458175","BE" +"1445458176","1445462015","NL" +"1445462016","1445986303","IE" +"1445986304","1446007367","DK" +"1446007368","1446007374","ES" +"1446007375","1446007407","DK" +"1446007408","1446007414","SE" +"1446007415","1446007471","DK" +"1446007472","1446007476","RU" +"1446007477","1446008423","DK" +"1446008424","1446008430","GB" +"1446008431","1446008655","DK" +"1446008656","1446008662","FR" +"1446008663","1446010511","DK" +"1446010512","1446010518","NL" +"1446010519","1446051839","DK" +"1446051840","1446117375","CZ" +"1446117376","1446182911","FI" +"1446182912","1446248447","SA" +"1446248448","1446313983","DK" +"1446313984","1446445055","GB" +"1446445056","1446510591","RO" +"1446510592","1446543359","DE" +"1446543360","1446576127","AT" +"1446576128","1446608895","IR" +"1446608896","1446641663","BY" +"1446641664","1446674431","SI" +"1446674432","1446678407","DK" +"1446678408","1446678411","US" +"1446678412","1446694543","DK" +"1446694544","1446694559","SE" +"1446694560","1446694591","DK" +"1446694592","1446694607","NO" +"1446694608","1446694623","GB" +"1446694624","1446694639","TH" +"1446694640","1446694655","BR" +"1446694656","1446707175","DK" +"1446707176","1446707179","NO" +"1446707180","1446707183","FI" +"1446707184","1446707199","DK" +"1446707200","1446710687","AT" +"1446710688","1446710695","CH" +"1446710696","1446710799","AT" +"1446710800","1446710815","MT" +"1446710816","1446710887","AT" +"1446710888","1446710895","MT" +"1446710896","1446710903","AT" +"1446710904","1446710911","MT" +"1446710912","1446712783","AT" +"1446712784","1446712791","DE" +"1446712792","1446716399","AT" +"1446716400","1446716407","MT" +"1446716408","1446736503","AT" +"1446736504","1446736511","US" +"1446736512","1446739967","AT" +"1446739968","1446772735","RU" +"1446772736","1446805503","SA" +"1446805504","1446838271","FI" +"1446838272","1446862079","SI" +"1446862080","1446862591","HR" +"1446862592","1446871039","SI" +"1446871040","1446903807","CZ" +"1446903808","1446904063","A2" +"1446904064","1446904071","CY" +"1446904072","1446904079","LY" +"1446904080","1446904087","AF" +"1446904088","1446904095","BF" +"1446904096","1446904103","SD" +"1446904104","1446904111","IQ" +"1446904112","1446904119","GN" +"1446904120","1446904127","IQ" +"1446904128","1446904135","A2" +"1446904136","1446904143","LY" +"1446904144","1446904151","ER" +"1446904152","1446904231","A2" +"1446904232","1446904239","IQ" +"1446904240","1446904247","A2" +"1446904248","1446904255","AF" +"1446904256","1446904263","CY" +"1446904264","1446904319","A2" +"1446904320","1446904335","AE" +"1446904336","1446904351","A2" +"1446904352","1446904367","AE" +"1446904368","1446904383","IQ" +"1446904384","1446904399","A2" +"1446904400","1446904415","IQ" +"1446904416","1446904575","A2" +"1446904576","1446904591","SD" +"1446904592","1446904599","AF" +"1446904600","1446904607","A2" +"1446904608","1446904623","SD" +"1446904624","1446904639","A2" +"1446904640","1446904679","IQ" +"1446904680","1446904751","A2" +"1446904752","1446904759","NG" +"1446904760","1446904799","A2" +"1446904800","1446904807","SD" +"1446904808","1446904831","A2" +"1446904832","1446905087","US" +"1446905088","1446905343","A2" +"1446905344","1446905351","NG" +"1446905352","1446905383","A2" +"1446905384","1446905391","SD" +"1446905392","1446905583","A2" +"1446905584","1446905591","AF" +"1446905592","1446905611","A2" +"1446905612","1446905615","IQ" +"1446905616","1446905619","A2" +"1446905620","1446905623","TD" +"1446905624","1446905627","A2" +"1446905628","1446905631","IQ" +"1446905632","1446905635","A2" +"1446905636","1446905639","IQ" +"1446905640","1446905643","A2" +"1446905644","1446905647","IQ" +"1446905648","1446905651","A2" +"1446905652","1446905655","IQ" +"1446905656","1446905659","AF" +"1446905660","1446905663","ER" +"1446905664","1446905667","LY" +"1446905668","1446905675","AF" +"1446905676","1446905683","LY" +"1446905684","1446905687","A2" +"1446905688","1446905691","CF" +"1446905692","1446905703","A2" +"1446905704","1446905707","IQ" +"1446905708","1446905715","A2" +"1446905716","1446905719","IQ" +"1446905720","1446905723","AF" +"1446905724","1446905727","A2" +"1446905728","1446905731","IQ" +"1446905732","1446905735","AF" +"1446905736","1446905739","IQ" +"1446905740","1446905743","A2" +"1446905744","1446905759","LY" +"1446905760","1446905763","ML" +"1446905764","1446905767","A2" +"1446905768","1446905775","IQ" +"1446905776","1446905791","A2" +"1446905792","1446905795","TD" +"1446905796","1446905799","A2" +"1446905800","1446905803","IQ" +"1446905804","1446905815","A2" +"1446905816","1446905819","LY" +"1446905820","1446905823","IQ" +"1446905824","1446905831","A2" +"1446905832","1446905835","NG" +"1446905836","1446905839","IQ" +"1446905840","1446905851","A2" +"1446905852","1446905855","AF" +"1446905856","1446905863","LY" +"1446905864","1446905871","SD" +"1446905872","1446905911","A2" +"1446905912","1446905927","SD" +"1446905928","1446905935","A2" +"1446905936","1446905943","SD" +"1446905944","1446905959","A2" +"1446905960","1446905967","AF" +"1446905968","1446906023","A2" +"1446906024","1446906031","SD" +"1446906032","1446906071","A2" +"1446906072","1446906079","CY" +"1446906080","1446906111","A2" +"1446906112","1446906119","IQ" +"1446906120","1446906123","A2" +"1446906124","1446906131","IQ" +"1446906132","1446906135","SD" +"1446906136","1446906151","A2" +"1446906152","1446906159","AF" +"1446906160","1446906167","A2" +"1446906168","1446906171","IQ" +"1446906172","1446906179","AF" +"1446906180","1446906211","A2" +"1446906212","1446906215","AF" +"1446906216","1446906219","IQ" +"1446906220","1446906223","BG" +"1446906224","1446906231","A2" +"1446906232","1446906239","AF" +"1446906240","1446906243","IQ" +"1446906244","1446906251","A2" +"1446906252","1446906255","IQ" +"1446906256","1446906259","A2" +"1446906260","1446906263","AF" +"1446906264","1446906287","A2" +"1446906288","1446906295","IQ" +"1446906296","1446906299","A2" +"1446906300","1446906303","LY" +"1446906304","1446906327","A2" +"1446906328","1446906331","IQ" +"1446906332","1446906343","A2" +"1446906344","1446906347","NG" +"1446906348","1446906359","A2" +"1446906360","1446906363","SD" +"1446906364","1446906391","A2" +"1446906392","1446906399","CY" +"1446906400","1446906879","A2" +"1446906880","1446907135","IQ" +"1446907136","1446907143","A2" +"1446907144","1446907147","AF" +"1446907148","1446907151","IQ" +"1446907152","1446907159","A2" +"1446907160","1446907163","IQ" +"1446907164","1446907171","A2" +"1446907172","1446907175","IQ" +"1446907176","1446907187","A2" +"1446907188","1446907191","CG" +"1446907192","1446907195","A2" +"1446907196","1446907199","LY" +"1446907200","1446907211","A2" +"1446907212","1446907215","IQ" +"1446907216","1446907219","A2" +"1446907220","1446907223","BJ" +"1446907224","1446907231","A2" +"1446907232","1446907243","IQ" +"1446907244","1446907251","A2" +"1446907252","1446907259","IQ" +"1446907260","1446907263","A2" +"1446907264","1446907271","IQ" +"1446907272","1446907279","A2" +"1446907280","1446907283","GA" +"1446907284","1446907287","A2" +"1446907288","1446907291","AF" +"1446907292","1446907307","A2" +"1446907308","1446907311","AF" +"1446907312","1446907315","A2" +"1446907316","1446907319","IQ" +"1446907320","1446907323","AF" +"1446907324","1446907355","A2" +"1446907356","1446907359","IQ" +"1446907360","1446907367","A2" +"1446907368","1446907368","IQ" +"1446907369","1446907371","A2" +"1446907372","1446907375","AF" +"1446907376","1446907383","A2" +"1446907384","1446907387","CI" +"1446907388","1446907395","A2" +"1446907396","1446907399","IQ" +"1446907400","1446907403","A2" +"1446907404","1446907407","IQ" +"1446907408","1446907415","A2" +"1446907416","1446907423","IQ" +"1446907424","1446907431","A2" +"1446907432","1446907435","IQ" +"1446907436","1446907439","A2" +"1446907440","1446907443","AF" +"1446907444","1446907447","IQ" +"1446907448","1446907487","A2" +"1446907488","1446907491","IQ" +"1446907492","1446907495","TD" +"1446907496","1446907519","A2" +"1446907520","1446907523","LY" +"1446907524","1446907531","A2" +"1446907532","1446907535","CI" +"1446907536","1446907543","A2" +"1446907544","1446907547","LY" +"1446907548","1446907551","A2" +"1446907552","1446907555","LY" +"1446907556","1446907559","A2" +"1446907560","1446907563","AF" +"1446907564","1446907571","A2" +"1446907572","1446907575","AF" +"1446907576","1446907579","IQ" +"1446907580","1446907583","A2" +"1446907584","1446907587","IQ" +"1446907588","1446907595","A2" +"1446907596","1446907599","IQ" +"1446907600","1446907611","A2" +"1446907612","1446907615","IQ" +"1446907616","1446907619","TD" +"1446907620","1446907635","A2" +"1446907636","1446907639","IQ" +"1446907640","1446907663","A2" +"1446907664","1446907667","NG" +"1446907668","1446907671","IQ" +"1446907672","1446907679","A2" +"1446907680","1446907683","LY" +"1446907684","1446907687","IQ" +"1446907688","1446907691","A2" +"1446907692","1446907695","IQ" +"1446907696","1446907711","A2" +"1446907712","1446907715","IQ" +"1446907716","1446907719","AF" +"1446907720","1446907735","A2" +"1446907736","1446907739","IQ" +"1446907740","1446907743","A2" +"1446907744","1446907747","IQ" +"1446907748","1446907751","A2" +"1446907752","1446907755","AF" +"1446907756","1446907767","A2" +"1446907768","1446907775","IQ" +"1446907776","1446907787","A2" +"1446907788","1446907791","IQ" +"1446907792","1446907811","A2" +"1446907812","1446907819","IQ" +"1446907820","1446907823","AF" +"1446907824","1446907827","A2" +"1446907828","1446907831","TD" +"1446907832","1446907855","A2" +"1446907856","1446907859","AF" +"1446907860","1446907871","A2" +"1446907872","1446907875","IQ" +"1446907876","1446907891","A2" +"1446907892","1446907895","AF" +"1446907896","1446907899","A2" +"1446907900","1446907903","EG" +"1446907904","1446907911","A2" +"1446907912","1446907919","SD" +"1446907920","1446908143","A2" +"1446908144","1446908151","AE" +"1446908152","1446908159","SD" +"1446908160","1446908163","AF" +"1446908164","1446908187","A2" +"1446908188","1446908191","GH" +"1446908192","1446908195","A2" +"1446908196","1446908199","IQ" +"1446908200","1446908211","A2" +"1446908212","1446908215","SD" +"1446908216","1446908231","A2" +"1446908232","1446908235","LY" +"1446908236","1446908247","A2" +"1446908248","1446908251","AF" +"1446908252","1446908259","A2" +"1446908260","1446908263","IQ" +"1446908264","1446908267","A2" +"1446908268","1446908271","AF" +"1446908272","1446908275","A2" +"1446908276","1446908279","LY" +"1446908280","1446908283","A2" +"1446908284","1446908287","AF" +"1446908288","1446908299","A2" +"1446908300","1446908303","IQ" +"1446908304","1446908331","A2" +"1446908332","1446908335","NG" +"1446908336","1446908343","A2" +"1446908344","1446908347","IQ" +"1446908348","1446908351","TD" +"1446908352","1446908355","IQ" +"1446908356","1446908359","A2" +"1446908360","1446908363","LY" +"1446908364","1446908379","A2" +"1446908380","1446908383","IQ" +"1446908384","1446908387","A2" +"1446908388","1446908391","IQ" +"1446908392","1446908423","A2" +"1446908424","1446908427","AF" +"1446908428","1446908435","A2" +"1446908436","1446908443","AF" +"1446908444","1446908455","A2" +"1446908456","1446908459","LB" +"1446908460","1446908479","A2" +"1446908480","1446908483","IQ" +"1446908484","1446908603","A2" +"1446908604","1446908607","CG" +"1446908608","1446908631","A2" +"1446908632","1446908635","IQ" +"1446908636","1446908655","A2" +"1446908656","1446908659","IQ" +"1446908660","1446908663","A2" +"1446908664","1446908667","IQ" +"1446908668","1446908683","A2" +"1446908684","1446908687","SD" +"1446908688","1446908691","IQ" +"1446908692","1446908755","A2" +"1446908756","1446908759","IQ" +"1446908760","1446908787","A2" +"1446908788","1446908791","NG" +"1446908792","1446908863","A2" +"1446908864","1446908871","AF" +"1446908872","1446908875","A2" +"1446908876","1446908879","AF" +"1446908880","1446908919","A2" +"1446908920","1446908923","IQ" +"1446908924","1446908927","A2" +"1446908928","1446908931","IQ" +"1446908932","1446908971","A2" +"1446908972","1446908975","AF" +"1446908976","1446908979","GA" +"1446908980","1446908983","AF" +"1446908984","1446908991","A2" +"1446908992","1446908995","IQ" +"1446908996","1446909007","A2" +"1446909008","1446909011","IQ" +"1446909012","1446909083","A2" +"1446909084","1446909087","CG" +"1446909088","1446909095","A2" +"1446909096","1446909099","TD" +"1446909100","1446909111","A2" +"1446909112","1446909115","IQ" +"1446909116","1446909163","A2" +"1446909164","1446909167","IQ" +"1446909168","1446909187","A2" +"1446909188","1446909191","IQ" +"1446909192","1446909203","A2" +"1446909204","1446909207","IQ" +"1446909208","1446909239","A2" +"1446909240","1446909243","LY" +"1446909244","1446909295","A2" +"1446909296","1446909299","IQ" +"1446909300","1446909363","A2" +"1446909364","1446909367","IQ" +"1446909368","1446909399","A2" +"1446909400","1446909403","AF" +"1446909404","1446909423","A2" +"1446909424","1446909435","AF" +"1446909436","1446909443","IQ" +"1446909444","1446909447","NG" +"1446909448","1446909499","A2" +"1446909500","1446909503","IQ" +"1446909504","1446909507","LY" +"1446909508","1446909511","IQ" +"1446909512","1446909515","A2" +"1446909516","1446909519","EG" +"1446909520","1446909523","CG" +"1446909524","1446909527","A2" +"1446909528","1446909531","EG" +"1446909532","1446909535","A2" +"1446909536","1446909539","AF" +"1446909540","1446909547","IQ" +"1446909548","1446909575","A2" +"1446909576","1446909579","AF" +"1446909580","1446909599","A2" +"1446909600","1446909603","AF" +"1446909604","1446909639","A2" +"1446909640","1446909643","NG" +"1446909644","1446909687","A2" +"1446909688","1446909691","AF" +"1446909692","1446909739","A2" +"1446909740","1446909743","AF" +"1446909744","1446909803","A2" +"1446909804","1446909807","AF" +"1446909808","1446909815","A2" +"1446909816","1446909819","AF" +"1446909820","1446909827","IQ" +"1446909828","1446909967","A2" +"1446909968","1446909971","LY" +"1446909972","1446909999","A2" +"1446910000","1446910003","AF" +"1446910004","1446910019","A2" +"1446910020","1446910023","IQ" +"1446910024","1446910035","A2" +"1446910036","1446910039","NG" +"1446910040","1446910055","A2" +"1446910056","1446910059","ZM" +"1446910060","1446910111","A2" +"1446910112","1446910115","NG" +"1446910116","1446910139","A2" +"1446910140","1446910143","NG" +"1446910144","1446910163","A2" +"1446910164","1446910167","NG" +"1446910168","1446910187","A2" +"1446910188","1446910191","IQ" +"1446910192","1446910195","A2" +"1446910196","1446910199","AF" +"1446910200","1446910215","A2" +"1446910216","1446910219","IQ" +"1446910220","1446910223","A2" +"1446910224","1446910227","IQ" +"1446910228","1446910251","A2" +"1446910252","1446910255","IQ" +"1446910256","1446910275","A2" +"1446910276","1446910279","IQ" +"1446910280","1446910283","A2" +"1446910284","1446910287","IQ" +"1446910288","1446910303","A2" +"1446910304","1446910307","IQ" +"1446910308","1446910311","AF" +"1446910312","1446910335","A2" +"1446910336","1446910339","AF" +"1446910340","1446910347","A2" +"1446910348","1446910351","GA" +"1446910352","1446910359","A2" +"1446910360","1446910363","IQ" +"1446910364","1446910375","A2" +"1446910376","1446910379","AF" +"1446910380","1446910459","A2" +"1446910460","1446910463","LY" +"1446910464","1446910471","A2" +"1446910472","1446910479","LY" +"1446910480","1446910487","EG" +"1446910488","1446910495","A2" +"1446910496","1446910503","NG" +"1446910504","1446910599","A2" +"1446910600","1446910607","NG" +"1446910608","1446910623","A2" +"1446910624","1446910639","AF" +"1446910640","1446910695","A2" +"1446910696","1446910711","SD" +"1446910712","1446910719","A2" +"1446910720","1446911231","IQ" +"1446911232","1446911235","A2" +"1446911236","1446911239","IQ" +"1446911240","1446911255","A2" +"1446911256","1446911259","LY" +"1446911260","1446911263","AF" +"1446911264","1446911267","IQ" +"1446911268","1446911271","AF" +"1446911272","1446911303","A2" +"1446911304","1446911307","IQ" +"1446911308","1446911319","A2" +"1446911320","1446911323","AF" +"1446911324","1446911343","A2" +"1446911344","1446911347","IQ" +"1446911348","1446911351","LY" +"1446911352","1446911363","A2" +"1446911364","1446911367","LY" +"1446911368","1446911395","A2" +"1446911396","1446911399","AF" +"1446911400","1446911403","A2" +"1446911404","1446911407","AF" +"1446911408","1446911411","LY" +"1446911412","1446911423","A2" +"1446911424","1446911427","AF" +"1446911428","1446911435","A2" +"1446911436","1446911439","SD" +"1446911440","1446911443","A2" +"1446911444","1446911447","IQ" +"1446911448","1446911459","A2" +"1446911460","1446911463","LY" +"1446911464","1446911475","A2" +"1446911476","1446911479","ER" +"1446911480","1446911483","CG" +"1446911484","1446911743","A2" +"1446911744","1446911751","IQ" +"1446911752","1446911763","A2" +"1446911764","1446911767","LY" +"1446911768","1446911771","A2" +"1446911772","1446911775","AF" +"1446911776","1446911779","A2" +"1446911780","1446911783","AF" +"1446911784","1446911787","A2" +"1446911788","1446911791","AF" +"1446911792","1446911795","A2" +"1446911796","1446911799","IQ" +"1446911800","1446911803","NG" +"1446911804","1446911819","A2" +"1446911820","1446911823","IQ" +"1446911824","1446911827","A2" +"1446911828","1446911831","IQ" +"1446911832","1446911835","A2" +"1446911836","1446911843","IQ" +"1446911844","1446911847","A2" +"1446911848","1446911855","IQ" +"1446911856","1446911859","AF" +"1446911860","1446911867","A2" +"1446911868","1446911871","LY" +"1446911872","1446911875","AF" +"1446911876","1446911903","A2" +"1446911904","1446911907","AF" +"1446911908","1446911947","A2" +"1446911948","1446911951","IQ" +"1446911952","1446911955","A2" +"1446911956","1446911959","IQ" +"1446911960","1446911963","A2" +"1446911964","1446911967","IQ" +"1446911968","1446911987","A2" +"1446911988","1446911995","AF" +"1446911996","1446912003","A2" +"1446912004","1446912007","AF" +"1446912008","1446912011","A2" +"1446912012","1446912015","IQ" +"1446912016","1446912027","A2" +"1446912028","1446912031","AF" +"1446912032","1446912035","A2" +"1446912036","1446912039","AF" +"1446912040","1446912043","IQ" +"1446912044","1446912047","CG" +"1446912048","1446912051","AF" +"1446912052","1446912055","ER" +"1446912056","1446912059","A2" +"1446912060","1446912063","NG" +"1446912064","1446912067","AF" +"1446912068","1446912071","A2" +"1446912072","1446912075","IQ" +"1446912076","1446912079","A2" +"1446912080","1446912083","IQ" +"1446912084","1446912087","AF" +"1446912088","1446912095","A2" +"1446912096","1446912103","AF" +"1446912104","1446912115","A2" +"1446912116","1446912119","LY" +"1446912120","1446912151","A2" +"1446912152","1446912155","CF" +"1446912156","1446912163","A2" +"1446912164","1446912167","IQ" +"1446912168","1446912183","A2" +"1446912184","1446912187","AF" +"1446912188","1446912191","IQ" +"1446912192","1446912195","A2" +"1446912196","1446912203","IQ" +"1446912204","1446912215","A2" +"1446912216","1446912219","IQ" +"1446912220","1446912239","A2" +"1446912240","1446912247","IQ" +"1446912248","1446912251","AF" +"1446912252","1446912255","IQ" +"1446912256","1446912263","AF" +"1446912264","1446912295","IQ" +"1446912296","1446912311","AF" +"1446912312","1446912319","A2" +"1446912320","1446912335","IQ" +"1446912336","1446912343","KW" +"1446912344","1446912367","IQ" +"1446912368","1446912375","A2" +"1446912376","1446912391","AF" +"1446912392","1446912399","GA" +"1446912400","1446912415","AF" +"1446912416","1446912423","A2" +"1446912424","1446912431","AF" +"1446912432","1446920191","A2" +"1446920192","1446936575","RU" +"1446936576","1446952959","NO" +"1446952960","1446969343","QA" +"1446969344","1446985727","GB" +"1446985728","1447010303","PL" +"1447010304","1447018495","LV" +"1447018496","1447019007","CZ" +"1447019008","1447019023","BZ" +"1447019024","1447026687","CZ" +"1447026688","1447076354","FR" +"1447076355","1447076357","A1" +"1447076358","1447169375","FR" +"1447169376","1447169391","TN" +"1447169392","1448083455","FR" +"1448083456","1449132031","NL" +"1449132032","1449394175","AE" +"1449394176","1449459711","LT" +"1449459712","1449525247","HU" +"1449525248","1449590783","RU" +"1449590784","1449656319","DE" +"1449656320","1449808639","RO" +"1449808640","1449808895","UA" +"1449808896","1449840639","RO" +"1449840640","1449852927","MD" +"1449852928","1449918463","RO" +"1449918464","1449951231","JO" +"1449951232","1449983999","TR" +"1449984000","1449992191","NL" +"1449992192","1450000383","IR" +"1450000384","1450008575","HU" +"1450008576","1450016767","ES" +"1450016768","1450024959","IT" +"1450024960","1450033151","ES" +"1450033152","1450041343","RU" +"1450041344","1450049535","DE" +"1450049536","1450057727","RU" +"1450057728","1450065919","EE" +"1450065920","1450074111","DE" +"1450074112","1450082303","RU" +"1450082304","1450084351","IT" +"1450084352","1450085119","A2" +"1450085120","1450090495","IT" +"1450090496","1450106879","RU" +"1450106880","1450115071","SK" +"1450115072","1450123263","RU" +"1450123264","1450125231","AT" +"1450125232","1450125239","DE" +"1450125240","1450125247","US" +"1450125248","1450131455","AT" +"1450131456","1450139647","UA" +"1450139648","1450147839","PL" +"1450147840","1450151935","CH" +"1450151936","1450153983","IQ" +"1450153984","1450156031","DE" +"1450156032","1450164223","GB" +"1450164224","1450166271","SA" +"1450166272","1450168319","PL" +"1450168320","1450170367","EU" +"1450170368","1450172415","GB" +"1450172416","1450174463","UA" +"1450174464","1450176511","DE" +"1450176512","1450178559","PL" +"1450178560","1450180607","DE" +"1450180608","1450311679","GB" +"1450311680","1450442751","FI" +"1450442752","1450704895","CH" +"1450704896","1451229183","RO" +"1451229184","1455423487","GB" +"1455423488","1459617791","FR" +"1459617792","1461714943","IT" +"1461714944","1462763519","IE" +"1462763520","1463162611","DK" +"1463162612","1463162612","US" +"1463162613","1463162613","DK" +"1463162614","1463162614","US" +"1463162615","1463171071","DK" +"1463171072","1463171327","US" +"1463171328","1463812095","DK" +"1463812096","1464074239","BE" +"1464074240","1464336383","IL" +"1464336384","1464467455","DK" +"1464467456","1464598527","GB" +"1464598528","1464602623","RU" +"1464602624","1464606719","GB" +"1464606720","1464614911","KZ" +"1464614912","1464664063","UA" +"1464664064","1464860671","DE" +"1464860672","1465384959","GB" +"1465384960","1465647103","FR" +"1465647104","1465909247","FI" +"1465909248","1465942015","PL" +"1465942016","1465974783","SE" +"1465974784","1466007551","HU" +"1466007552","1466040319","BG" +"1466040320","1466073087","EE" +"1466073088","1466097663","FR" +"1466097664","1466099711","ES" +"1466099712","1466101759","PL" +"1466101760","1466103807","DE" +"1466103808","1466104575","GB" +"1466104576","1466104831","FR" +"1466104832","1466105343","BE" +"1466105344","1466105855","GB" +"1466105856","1466122239","PL" +"1466122240","1466130431","LV" +"1466130432","1466138623","PL" +"1466138624","1466171391","SE" +"1466171392","1466204159","FR" +"1466204160","1466236927","FI" +"1466236928","1466241023","NL" +"1466241024","1466249215","PL" +"1466249216","1466253311","GR" +"1466253312","1466257407","PL" +"1466257408","1466261503","GR" +"1466261504","1466265599","GB" +"1466265600","1466269695","HU" +"1466269696","1466302463","SA" +"1466302464","1466335231","GB" +"1466335232","1466367119","CH" +"1466367120","1466367127","GR" +"1466367128","1466367631","CH" +"1466367632","1466367639","AT" +"1466367640","1466367999","CH" +"1466368000","1466400767","PT" +"1466400768","1466433535","RU" +"1466433536","1466499071","DK" +"1466499072","1466564607","PL" +"1466564608","1466571894","DE" +"1466571895","1466571895","AE" +"1466571896","1466589183","DE" +"1466589184","1466590207","FR" +"1466590208","1466592255","GB" +"1466592256","1466592511","FR" +"1466592512","1466592767","GB" +"1466592768","1466592895","FR" +"1466592896","1466593279","GB" +"1466593280","1466604799","DE" +"1466604800","1466605055","ES" +"1466605056","1466606847","DE" +"1466606848","1466607103","FR" +"1466607104","1466608895","DE" +"1466608896","1466609151","ES" +"1466609152","1466613759","DE" +"1466613760","1466615807","ES" +"1466615808","1466616575","GB" +"1466616576","1466617343","ES" +"1466617344","1466617471","FR" +"1466617472","1466617599","GB" +"1466617600","1466617855","ES" +"1466617856","1466630143","DE" +"1466630144","1466695679","IR" +"1466695680","1466761215","FI" +"1466761216","1466826751","SA" +"1466826752","1466886399","LV" +"1466886400","1466886655","LT" +"1466886656","1466892287","LV" +"1466892288","1466957823","ES" +"1466957824","1467219967","GB" +"1467219968","1467236351","DK" +"1467236352","1467252735","BG" +"1467252736","1467269119","RS" +"1467269120","1467285503","PL" +"1467285504","1467301887","RU" +"1467301888","1467318271","GB" +"1467318272","1467334655","RU" +"1467334656","1467340959","GB" +"1467340960","1467340991","US" +"1467340992","1467344639","GB" +"1467344640","1467344895","ZA" +"1467344896","1467347999","GB" +"1467348000","1467348031","US" +"1467348032","1467349471","GB" +"1467349472","1467349503","US" +"1467349504","1467349887","GB" +"1467349888","1467349903","CH" +"1467349904","1467351039","GB" +"1467351040","1467367423","NO" +"1467367424","1467367615","DE" +"1467367616","1467367647","SE" +"1467367648","1467367871","DE" +"1467367872","1467367903","SE" +"1467367904","1467367935","DE" +"1467367936","1467368191","SI" +"1467368192","1467368319","DK" +"1467368320","1467368447","DE" +"1467368448","1467368703","DK" +"1467368704","1467369519","DE" +"1467369520","1467369535","RU" +"1467369536","1467369647","DE" +"1467369648","1467369663","CH" +"1467369664","1467369759","DE" +"1467369760","1467369791","HR" +"1467369792","1467369855","SE" +"1467369856","1467369871","RU" +"1467369872","1467369887","DE" +"1467369888","1467369903","RU" +"1467369904","1467369919","DE" +"1467369920","1467369951","SG" +"1467369952","1467383807","DE" +"1467383808","1467400191","BG" +"1467400192","1467416575","RU" +"1467416576","1467432959","PL" +"1467432960","1467449343","BG" +"1467449344","1467457535","SI" +"1467457536","1467465727","EE" +"1467465728","1467465759","NL" +"1467465760","1467465791","AT" +"1467465792","1467465799","NL" +"1467465800","1467465807","AT" +"1467465808","1467465823","NL" +"1467465824","1467465855","AT" +"1467465856","1467465983","DE" +"1467465984","1467466015","NL" +"1467466016","1467466023","DE" +"1467466024","1467466031","AT" +"1467466032","1467466111","NL" +"1467466112","1467466143","DE" +"1467466144","1467466175","NL" +"1467466176","1467466215","DE" +"1467466216","1467466223","VG" +"1467466224","1467466239","NL" +"1467466240","1467466271","DE" +"1467466272","1467466495","NL" +"1467466496","1467467071","DE" +"1467467072","1467467103","CH" +"1467467104","1467473919","DE" +"1467473920","1467482111","RU" +"1467482112","1467613183","BG" +"1467613184","1467744255","DE" +"1467744256","1467875327","GB" +"1467875328","1467940863","BG" +"1467940864","1468006399","GB" +"1468006400","1472200703","DE" +"1472200704","1472226463","IE" +"1472226464","1472226479","GB" +"1472226480","1472259071","IE" +"1472259072","1472259327","GB" +"1472259328","1472264799","IE" +"1472264800","1472264807","GB" +"1472264808","1472266239","IE" +"1472266240","1472314335","DE" +"1472314336","1472314343","A2" +"1472314344","1472330699","DE" +"1472330700","1472330700","A2" +"1472330701","1472331775","DE" +"1472331776","1472397311","GB" +"1472397312","1472462847","NL" +"1472462848","1472528383","PT" +"1472528384","1472593919","SK" +"1472593920","1472659455","IE" +"1472659456","1472724991","PL" +"1472724992","1472856063","AE" +"1472856064","1472987135","GR" +"1472987136","1473249279","PL" +"1473249280","1473773567","NL" +"1473773568","1474297855","ES" +"1474297856","1474330623","GB" +"1474330624","1474396159","RU" +"1474396160","1474428927","DE" +"1474428928","1474461695","LV" +"1474461696","1474494463","RU" +"1474494464","1474527231","SE" +"1474527232","1474559999","BG" +"1474560000","1474592767","RU" +"1474592768","1474625535","CY" +"1474625536","1474658303","HU" +"1474658304","1474691071","RU" +"1474691072","1474723839","DE" +"1474723840","1474756607","SA" +"1474756608","1474822143","FR" +"1474822144","1474887679","IE" +"1474887680","1474944527","NL" +"1474944528","1474944535","US" +"1474944536","1474953215","NL" +"1474953216","1474966473","DE" +"1474966474","1474966474","A2" +"1474966475","1474968895","DE" +"1474968896","1474968903","A2" +"1474968904","1475016447","DE" +"1475016448","1475016703","A2" +"1475016704","1475018751","DE" +"1475018752","1475084287","ES" +"1475084288","1475086335","NL" +"1475086336","1475092479","RU" +"1475092480","1475094527","CY" +"1475094528","1475096575","RU" +"1475096576","1475098623","BH" +"1475098624","1475101695","GB" +"1475101696","1475102207","ZA" +"1475102208","1475102719","GB" +"1475102720","1475104767","FR" +"1475104768","1475106815","RU" +"1475106816","1475107583","SE" +"1475107584","1475107839","LU" +"1475107840","1475108863","SE" +"1475108864","1475110911","NL" +"1475110912","1475112959","DE" +"1475112960","1475115007","AT" +"1475115008","1475117055","KW" +"1475117056","1475119103","GB" +"1475119104","1475121151","BH" +"1475121152","1475123199","GB" +"1475123200","1475125247","FI" +"1475125248","1475127295","IT" +"1475127296","1475129343","FI" +"1475129344","1475131391","BE" +"1475131392","1475133439","RU" +"1475133440","1475134901","CZ" +"1475134902","1475134902","SA" +"1475134903","1475135487","CZ" +"1475135488","1475137535","CH" +"1475137536","1475139583","GB" +"1475139584","1475141631","ES" +"1475141632","1475143679","FI" +"1475143680","1475145727","JO" +"1475145728","1475147775","ES" +"1475147776","1475149823","GB" +"1475149824","1475151871","NL" +"1475151872","1475153919","BE" +"1475153920","1475155967","GB" +"1475155968","1475158015","NL" +"1475158016","1475160063","IS" +"1475160064","1475162111","RU" +"1475162112","1475170303","GB" +"1475170304","1475172351","ES" +"1475172352","1475174399","DE" +"1475174400","1475175047","NL" +"1475175048","1475175055","US" +"1475175056","1475176447","NL" +"1475176448","1475178495","RO" +"1475178496","1475180543","RU" +"1475180544","1475181343","DE" +"1475181344","1475181375","LU" +"1475181376","1475181455","DE" +"1475181456","1475181471","SC" +"1475181472","1475181519","DE" +"1475181520","1475181535","GB" +"1475181536","1475181551","NL" +"1475181552","1475181855","DE" +"1475181856","1475181887","LU" +"1475181888","1475182079","DE" +"1475182080","1475182335","RO" +"1475182336","1475184639","DE" +"1475184640","1475186687","RU" +"1475186688","1475188735","GB" +"1475188736","1475190783","SE" +"1475190784","1475192831","GB" +"1475192832","1475194879","CH" +"1475194880","1475196927","DE" +"1475196928","1475197791","FR" +"1475197792","1475197807","GB" +"1475197808","1475198143","FR" +"1475198144","1475198175","GB" +"1475198176","1475198975","FR" +"1475198976","1475201023","BH" +"1475201024","1475203071","RS" +"1475203072","1475205119","SE" +"1475205120","1475205887","DE" +"1475205888","1475206143","US" +"1475206144","1475206207","JP" +"1475206208","1475206271","US" +"1475206272","1475206383","DE" +"1475206384","1475206399","NL" +"1475206400","1475206655","AP" +"1475206656","1475206911","DE" +"1475206912","1475206927","NL" +"1475206928","1475206943","FR" +"1475206944","1475206959","DE" +"1475206960","1475206975","GB" +"1475206976","1475206991","IT" +"1475206992","1475207007","SE" +"1475207008","1475207023","RU" +"1475207024","1475207039","ES" +"1475207040","1475207055","AU" +"1475207056","1475207071","KR" +"1475207072","1475207087","CH" +"1475207088","1475207103","JP" +"1475207104","1475207135","KR" +"1475207136","1475207147","DE" +"1475207148","1475207183","US" +"1475207184","1475207263","AE" +"1475207264","1475207295","US" +"1475207296","1475207423","AE" +"1475207424","1475207679","GR" +"1475207680","1475208191","SA" +"1475208192","1475208447","AE" +"1475208448","1475208959","US" +"1475208960","1475209215","AE" +"1475209216","1475211263","UZ" +"1475211264","1475213311","DE" +"1475213312","1475215359","FR" +"1475215360","1475223551","IT" +"1475223552","1475229695","NO" +"1475229696","1475229759","SE" +"1475229760","1475229951","NO" +"1475229952","1475230231","SE" +"1475230232","1475230271","NO" +"1475230272","1475230335","SE" +"1475230336","1475233791","NO" +"1475233792","1475234303","GB" +"1475234304","1475234559","IE" +"1475234560","1475235839","GB" +"1475235840","1475237887","IE" +"1475237888","1475239935","ES" +"1475239936","1475241983","RU" +"1475241984","1475242239","MC" +"1475242240","1475243775","FR" +"1475243776","1475244031","MC" +"1475244032","1475244287","DE" +"1475244288","1475244543","SD" +"1475244544","1475245055","DE" +"1475245056","1475245311","US" +"1475245312","1475245823","DE" +"1475245824","1475246079","RU" +"1475246080","1475248127","CH" +"1475248128","1475250175","JO" +"1475250176","1475252223","DE" +"1475252224","1475254271","FR" +"1475254272","1475256319","UA" +"1475256320","1475258367","BE" +"1475258368","1475260415","NL" +"1475260416","1475262463","FR" +"1475262464","1475266559","DE" +"1475266560","1475268607","GB" +"1475268608","1475270655","RS" +"1475270656","1475272703","GB" +"1475272704","1475274751","BE" +"1475274752","1475276799","RU" +"1475276800","1475278847","ES" +"1475278848","1475280895","DK" +"1475280896","1475282943","RU" +"1475282944","1475284991","NL" +"1475284992","1475287039","GB" +"1475287040","1475291135","RU" +"1475291136","1475293183","PL" +"1475293184","1475295231","GB" +"1475295232","1475297279","SK" +"1475297280","1475299327","DK" +"1475299328","1475301375","PL" +"1475301376","1475303423","LT" +"1475303424","1475305471","PL" +"1475305472","1475307519","NL" +"1475307520","1475309567","RU" +"1475309568","1475311615","LT" +"1475311616","1475313663","FI" +"1475313664","1475315711","DE" +"1475315712","1475317759","US" +"1475317760","1475319807","RU" +"1475319808","1475321855","BG" +"1475321856","1475323903","RO" +"1475323904","1475327999","PL" +"1475328000","1475330047","NL" +"1475330048","1475332095","PL" +"1475332096","1475334143","LI" +"1475334144","1475336191","CH" +"1475336192","1475338239","PL" +"1475338240","1475340287","RO" +"1475340288","1475342335","GR" +"1475342336","1475344383","PL" +"1475344384","1475346431","RO" +"1475346432","1475362815","RU" +"1475362816","1475379199","FR" +"1475379200","1475395583","RU" +"1475395584","1475411967","LU" +"1475411968","1475412383","IT" +"1475412384","1475412391","ES" +"1475412392","1475417975","IT" +"1475417976","1475417983","A2" +"1475417984","1475428351","IT" +"1475428352","1475444735","SE" +"1475444736","1475461119","AM" +"1475461120","1475477503","RU" +"1475477504","1475493887","HU" +"1475493888","1475510271","RU" +"1475510272","1475543039","GB" +"1475543040","1475559423","RO" +"1475559424","1475562751","GR" +"1475562752","1475563007","BG" +"1475563008","1475571711","GR" +"1475571712","1475572735","BG" +"1475572736","1475575807","GR" +"1475575808","1475592191","AT" +"1475592192","1475608575","GB" +"1475608576","1475624959","RU" +"1475624960","1475627519","JE" +"1475627520","1475627655","GB" +"1475627656","1475627663","JE" +"1475627664","1475627688","GB" +"1475627689","1475627695","JE" +"1475627696","1475627775","GB" +"1475627776","1475634431","JE" +"1475634432","1475634495","GB" +"1475634496","1475634559","JE" +"1475634560","1475634719","GB" +"1475634720","1475634727","JE" +"1475634728","1475634735","GB" +"1475634736","1475634751","JE" +"1475634752","1475634759","GB" +"1475634760","1475634967","JE" +"1475634968","1475634975","GB" +"1475634976","1475636223","JE" +"1475636224","1475636399","GB" +"1475636400","1475636415","JE" +"1475636416","1475636431","GB" +"1475636432","1475636447","JE" +"1475636448","1475636479","GB" +"1475636480","1475636735","JE" +"1475636736","1475637503","GB" +"1475637504","1475638783","JE" +"1475638784","1475639182","GB" +"1475639183","1475639183","JE" +"1475639184","1475639216","GB" +"1475639217","1475639223","JE" +"1475639224","1475639263","GB" +"1475639264","1475639271","BB" +"1475639272","1475639295","JE" +"1475639296","1475639343","GB" +"1475639344","1475639351","JE" +"1475639352","1475639375","GB" +"1475639376","1475639383","JE" +"1475639384","1475639527","GB" +"1475639528","1475639543","JE" +"1475639544","1475639595","GB" +"1475639596","1475639599","JE" +"1475639600","1475639807","GB" +"1475639808","1475641343","JE" +"1475641344","1475657727","UA" +"1475657728","1475674111","SK" +"1475674112","1475690495","DE" +"1475690496","1475706879","CH" +"1475706880","1475723263","RU" +"1475723264","1475725311","GB" +"1475725312","1475726111","RU" +"1475726112","1475726207","GB" +"1475726208","1475726527","RU" +"1475726528","1475726591","GB" +"1475726592","1475727167","RU" +"1475727168","1475727343","GB" +"1475727344","1475727359","RU" +"1475727360","1475727391","FI" +"1475727392","1475727615","GB" +"1475727616","1475727623","FI" +"1475727624","1475727631","GB" +"1475727632","1475727639","FI" +"1475727640","1475727647","GB" +"1475727648","1475727663","FI" +"1475727664","1475727735","GB" +"1475727736","1475727743","RU" +"1475727744","1475727807","GB" +"1475727808","1475727871","FI" +"1475727872","1475728383","GB" +"1475728384","1475728511","DE" +"1475728512","1475728887","GB" +"1475728888","1475728895","RU" +"1475728896","1475729087","GB" +"1475729088","1475729103","DE" +"1475729104","1475729135","GB" +"1475729136","1475729143","RU" +"1475729144","1475729151","GB" +"1475729152","1475729215","AT" +"1475729216","1475729343","GB" +"1475729344","1475729359","RU" +"1475729360","1475729391","GB" +"1475729392","1475729407","RU" +"1475729408","1475729536","UA" +"1475729537","1475729647","GB" +"1475729648","1475729671","UA" +"1475729672","1475729679","GB" +"1475729680","1475729687","UA" +"1475729688","1475729919","GB" +"1475729920","1475730431","UA" +"1475730432","1475730495","RU" +"1475730496","1475731455","UA" +"1475731456","1475732479","GB" +"1475732480","1475732991","RU" +"1475732992","1475734271","GB" +"1475734272","1475734279","RU" +"1475734280","1475734783","GB" +"1475734784","1475734791","UA" +"1475734792","1475734799","RU" +"1475734800","1475734807","UA" +"1475734808","1475734815","RU" +"1475734816","1475734823","UA" +"1475734824","1475734831","RU" +"1475734832","1475734911","UA" +"1475734912","1475734919","RU" +"1475734920","1475734991","UA" +"1475734992","1475734999","RU" +"1475735000","1475735039","UA" +"1475735040","1475735295","GB" +"1475735296","1475735319","UA" +"1475735320","1475735327","RU" +"1475735328","1475735343","UA" +"1475735344","1475735351","RU" +"1475735352","1475735367","UA" +"1475735368","1475735375","RU" +"1475735376","1475735383","UA" +"1475735384","1475735391","RU" +"1475735392","1475735439","UA" +"1475735440","1475735455","RU" +"1475735456","1475735551","UA" +"1475735552","1475735807","US" +"1475735808","1475735999","RU" +"1475736000","1475736063","GB" +"1475736064","1475736127","LV" +"1475736128","1475736191","EE" +"1475736192","1475736255","GB" +"1475736256","1475736319","HU" +"1475736320","1475736447","RU" +"1475736448","1475736551","UA" +"1475736552","1475736831","RU" +"1475736832","1475736959","GB" +"1475736960","1475737023","FR" +"1475737024","1475737087","PL" +"1475737088","1475737151","NL" +"1475737152","1475737183","CZ" +"1475737184","1475737191","RU" +"1475737192","1475737215","CZ" +"1475737216","1475737255","DE" +"1475737256","1475737263","RU" +"1475737264","1475737267","DE" +"1475737268","1475737279","RU" +"1475737280","1475737343","AT" +"1475737344","1475737399","UA" +"1475737400","1475737407","RU" +"1475737408","1475737471","UA" +"1475737472","1475737479","RU" +"1475737480","1475737487","UA" +"1475737488","1475737495","RU" +"1475737496","1475737503","UA" +"1475737504","1475737519","RU" +"1475737520","1475737543","UA" +"1475737544","1475737551","RU" +"1475737552","1475737583","UA" +"1475737584","1475737591","RU" +"1475737592","1475737599","UA" +"1475737600","1475737655","FI" +"1475737656","1475737663","RU" +"1475737664","1475737727","FI" +"1475737728","1475737735","RU" +"1475737736","1475737855","FI" +"1475737856","1475738111","SE" +"1475738112","1475739647","RU" +"1475739648","1475756031","BG" +"1475756032","1475772415","GB" +"1475772416","1475788799","LV" +"1475788800","1475805183","PL" +"1475805184","1475821567","KZ" +"1475821568","1475837951","LT" +"1475837952","1475846143","GB" +"1475846144","1475854335","IR" +"1475854336","1475862527","AT" +"1475862528","1475864575","FR" +"1475864576","1475866623","IT" +"1475866624","1475868671","GB" +"1475868672","1475870719","BG" +"1475870720","1475878911","NO" +"1475878912","1475887103","IT" +"1475887104","1475895295","PL" +"1475895296","1475895551","GB" +"1475895552","1475897343","IE" +"1475897344","1475899903","GB" +"1475899904","1475901439","IE" +"1475901440","1475903487","CH" +"1475903488","1475911679","IR" +"1475911680","1475919871","MD" +"1475919872","1475921983","IT" +"1475921984","1475922007","NL" +"1475922008","1475923967","IT" +"1475923968","1475926015","GB" +"1475926016","1475927151","IT" +"1475927152","1475927159","FR" +"1475927160","1475927631","IT" +"1475927632","1475927647","FR" +"1475927648","1475928063","IT" +"1475928064","1475952639","RU" +"1475952640","1475953151","AE" +"1475953152","1475953663","A2" +"1475953664","1475954175","GB" +"1475954176","1475954687","NO" +"1475954688","1475955199","GB" +"1475955200","1475955839","NG" +"1475955840","1475955967","GH" +"1475955968","1475956223","GB" +"1475956224","1475956607","NG" +"1475956608","1475956735","GH" +"1475956736","1475956991","US" +"1475956992","1475957503","GB" +"1475957504","1475957759","IN" +"1475957760","1475958015","AF" +"1475958016","1475958527","GB" +"1475958528","1475958783","NO" +"1475958784","1475959039","GB" +"1475959040","1475959047","US" +"1475959048","1475959295","A2" +"1475959296","1475960207","GB" +"1475960208","1475960319","A2" +"1475960320","1475960831","GB" +"1475960832","1475969023","NL" +"1475969024","1475977215","CZ" +"1475977216","1475985407","SE" +"1475985408","1476009983","RU" +"1476009984","1476018175","RS" +"1476018176","1476026367","IT" +"1476026368","1476034559","BA" +"1476034560","1476042751","NL" +"1476042752","1476050943","PL" +"1476050944","1476067327","RU" +"1476067328","1476075519","TR" +"1476075520","1476077911","NL" +"1476077912","1476077919","DE" +"1476077920","1476079551","NL" +"1476079552","1476079571","DE" +"1476079572","1476083711","NL" +"1476083712","1476116479","RU" +"1476116480","1476124671","SE" +"1476124672","1476132863","PL" +"1476132864","1476134911","FR" +"1476134912","1476135167","GB" +"1476135168","1476141055","FR" +"1476141056","1476149247","GB" +"1476149248","1476157439","NO" +"1476157440","1476157535","BH" +"1476157536","1476157631","BR" +"1476157632","1476157695","BH" +"1476157696","1476157823","BR" +"1476157824","1476157855","BH" +"1476157856","1476157887","BR" +"1476157888","1476157951","BH" +"1476157952","1476157983","BR" +"1476157984","1476158079","BH" +"1476158080","1476158399","BR" +"1476158400","1476158463","BH" +"1476158464","1476158975","BR" +"1476158976","1476159231","BH" +"1476159232","1476159487","JO" +"1476159488","1476159695","GB" +"1476159696","1476159727","BH" +"1476159728","1476159951","GB" +"1476159952","1476159983","BH" +"1476159984","1476165119","GB" +"1476165120","1476165375","BH" +"1476165376","1476165631","JO" +"1476165632","1476173823","HR" +"1476173824","1476182015","BG" +"1476182016","1476190207","IE" +"1476190208","1476198399","BY" +"1476198400","1476206591","RU" +"1476206592","1476214783","GE" +"1476214784","1476222975","SE" +"1476222976","1476231167","IT" +"1476231168","1476239359","NL" +"1476239360","1476247551","DE" +"1476247552","1476263935","RU" +"1476263936","1476272127","GB" +"1476272128","1476280319","NO" +"1476280320","1476288511","IM" +"1476288512","1476296703","LU" +"1476296704","1476304895","RU" +"1476304896","1476313087","BG" +"1476313088","1476315135","FI" +"1476315136","1476316159","US" +"1476316160","1476316671","SG" +"1476316672","1476317695","FI" +"1476317696","1476318207","DE" +"1476318208","1476318463","FI" +"1476318464","1476318719","DE" +"1476318720","1476318975","FI" +"1476318976","1476319231","DE" +"1476319232","1476321279","FI" +"1476321280","1476329471","MC" +"1476329472","1476337663","RU" +"1476337664","1476345855","NL" +"1476345856","1476354047","MD" +"1476354048","1476362239","KE" +"1476362240","1476370431","FR" +"1476370432","1476378623","SE" +"1476378624","1476386815","KZ" +"1476386816","1476395007","RU" +"1476395008","1478492159","ES" +"1478492160","1478534087","IT" +"1478534088","1478534095","FR" +"1478534096","1478534951","IT" +"1478534952","1478534975","FR" +"1478534976","1478535471","IT" +"1478535472","1478535479","FR" +"1478535480","1478544383","IT" +"1478544384","1478544639","US" +"1478544640","1478869511","IT" +"1478869512","1478869519","FR" +"1478869520","1478870167","IT" +"1478870168","1478870175","FR" +"1478870176","1478872119","IT" +"1478872120","1478872127","FR" +"1478872128","1479006463","IT" +"1479006464","1479006719","US" +"1479006720","1479016191","IT" +"1479016192","1479016447","US" +"1479016448","1479400703","IT" +"1479400704","1479401471","US" +"1479401472","1480287231","IT" +"1480287232","1480287487","US" +"1480287488","1480589311","IT" +"1480589312","1481633041","DE" +"1481633042","1481633042","A1" +"1481633043","1481637887","DE" +"1481637888","1481646079","SE" +"1481646080","1481654271","RU" +"1481654272","1481662463","IT" +"1481662464","1481678847","BG" +"1481678848","1481679743","SE" +"1481679744","1481679775","GB" +"1481679776","1481680639","SE" +"1481680640","1481680643","GB" +"1481680644","1481687039","SE" +"1481687040","1481695231","DE" +"1481695232","1481703423","SK" +"1481703424","1481711615","SA" +"1481711616","1481719807","RU" +"1481719808","1481727999","CZ" +"1481728000","1481736191","IE" +"1481736192","1481741823","GG" +"1481741824","1481742079","GB" +"1481742080","1481744383","GG" +"1481744384","1481752575","IT" +"1481752576","1481760767","RU" +"1481760768","1481768959","UA" +"1481768960","1481777151","GB" +"1481777152","1481785343","BE" +"1481785344","1481793535","RU" +"1481793536","1481801727","LI" +"1481801728","1481809919","GB" +"1481809920","1481818111","RU" +"1481818112","1481826303","ES" +"1481826304","1481834495","DE" +"1481834496","1481842687","GL" +"1481842688","1481850879","SE" +"1481850880","1481859071","DK" +"1481859072","1481867263","GB" +"1481867264","1481875455","SE" +"1481875456","1481883647","CZ" +"1481883648","1481891839","RU" +"1481891840","1481893119","CZ" +"1481893120","1481893375","SK" +"1481893376","1481893631","CZ" +"1481893632","1481893887","SK" +"1481893888","1481900031","CZ" +"1481900032","1481908223","CH" +"1481908224","1481916415","NO" +"1481916416","1481924607","ES" +"1481924608","1481932799","SA" +"1481932800","1481940991","DE" +"1481940992","1481949183","NO" +"1481949184","1481957375","RU" +"1481957376","1481965567","SE" +"1481965568","1481973759","CH" +"1481973760","1481981951","FO" +"1481981952","1481982340","NL" +"1481982341","1481982341","LB" +"1481982342","1481984127","NL" +"1481984128","1481984255","PA" +"1481984256","1481984383","NL" +"1481984384","1481984511","GI" +"1481984512","1481984639","CY" +"1481984640","1481985023","NL" +"1481985024","1481985279","MT" +"1481985280","1481987327","NL" +"1481987328","1481987583","GB" +"1481987584","1481987967","NL" +"1481987968","1481988031","PA" +"1481988032","1481988095","NL" +"1481988096","1481988159","GI" +"1481988160","1481988167","RU" +"1481988168","1481988319","NL" +"1481988320","1481988335","BZ" +"1481988336","1481988351","NL" +"1481988352","1481988607","GB" +"1481988608","1481990143","NL" +"1481990144","1481998335","MK" +"1481998336","1482006527","FI" +"1482006528","1482022911","RU" +"1482022912","1482031103","SA" +"1482031104","1482039295","SY" +"1482039296","1482047487","SE" +"1482047488","1482055679","RU" +"1482055680","1482060919","CZ" +"1482060920","1482060927","SK" +"1482060928","1482063871","CZ" +"1482063872","1482072063","FI" +"1482072064","1482076383","IT" +"1482076384","1482076415","MT" +"1482076416","1482080255","IT" +"1482080256","1482088447","RU" +"1482088448","1482096639","FR" +"1482096640","1482104831","BG" +"1482104832","1482113023","NO" +"1482113024","1482121215","RU" +"1482121216","1482127123","IT" +"1482127124","1482127127","TR" +"1482127128","1482129407","IT" +"1482129408","1482137599","ES" +"1482137600","1482145791","IE" +"1482145792","1482153983","ES" +"1482153984","1482162175","HU" +"1482162176","1482686463","NO" +"1482686464","1482948607","GB" +"1482948608","1483210751","CZ" +"1483210752","1483735039","GB" +"1483735040","1483997183","FI" +"1483997184","1484038143","AT" +"1484038144","1484038399","US" +"1484038400","1484038911","AT" +"1484038912","1484039167","US" +"1484039168","1484128255","AT" +"1484128256","1484259327","LT" +"1484259328","1484783615","FR" +"1484783616","1484849151","DE" +"1484849152","1484914687","SE" +"1484914688","1484980223","DE" +"1484980224","1485045759","SE" +"1485045760","1485111295","HU" +"1485111296","1485242367","DE" +"1485242368","1485246463","RU" +"1485246464","1485250559","UA" +"1485250560","1485254655","IR" +"1485254656","1485258751","RU" +"1485258752","1485266943","UA" +"1485266944","1485271039","RO" +"1485271040","1485275135","UA" +"1485275136","1485283327","LV" +"1485283328","1485291519","PL" +"1485291520","1485307903","UA" +"1485307904","1485832191","FR" +"1485832192","1485963263","GB" +"1485963264","1486028799","CZ" +"1486028800","1486061567","BE" +"1486061568","1486094335","RU" +"1486094336","1486127103","ES" +"1486127104","1486159871","FI" +"1486159872","1486192639","IS" +"1486192640","1486211687","IT" +"1486211688","1486211695","GB" +"1486211696","1486225407","IT" +"1486225408","1486258175","DE" +"1486258176","1486290943","RS" +"1486290944","1486292991","GB" +"1486292992","1486295039","RU" +"1486295040","1486297087","ES" +"1486297088","1486299135","IE" +"1486299136","1486301183","NL" +"1486301184","1486303231","GB" +"1486303232","1486305279","IS" +"1486305280","1486307327","HU" +"1486307328","1486309375","DE" +"1486309376","1486311423","AT" +"1486311424","1486313471","IE" +"1486313472","1486315519","RU" +"1486315520","1486317567","HU" +"1486317568","1486320383","RU" +"1486320384","1486320639","US" +"1486320640","1486321663","RU" +"1486321664","1486323711","NL" +"1486323712","1486325759","GB" +"1486325760","1486327807","PL" +"1486327808","1486329855","CH" +"1486329856","1486331903","GB" +"1486331904","1486333951","NO" +"1486333952","1486335999","SE" +"1486336000","1486338047","KZ" +"1486338048","1486340095","RU" +"1486340096","1486342143","AZ" +"1486342144","1486344191","RU" +"1486344192","1486346239","ES" +"1486346240","1486348287","GB" +"1486348288","1486349311","NL" +"1486349312","1486350335","US" +"1486350336","1486352383","FR" +"1486352384","1486354431","BE" +"1486354432","1486356479","RU" +"1486356480","1486487551","DE" +"1486487552","1486618623","UA" +"1486618624","1486684159","PL" +"1486684160","1486749695","PT" +"1486749696","1486815231","RO" +"1486815232","1486880767","NL" +"1486880768","1488977919","FR" +"1488977920","1489240063","FI" +"1489240064","1489305599","EE" +"1489305600","1489338367","GR" +"1489338368","1489371135","BE" +"1489371136","1489389391","DE" +"1489389392","1489389399","IT" +"1489389400","1489391639","DE" +"1489391640","1489391647","ES" +"1489391648","1489392767","DE" +"1489392768","1489392775","IT" +"1489392776","1489402239","DE" +"1489402240","1489402367","TR" +"1489402368","1489404767","DE" +"1489404768","1489404775","IT" +"1489404776","1489404839","DE" +"1489404840","1489404847","ES" +"1489404848","1489404855","DE" +"1489404856","1489404863","ES" +"1489404864","1489436671","DE" +"1489436672","1489502207","PL" +"1489502208","1489534975","SI" +"1489534976","1489567743","RU" +"1489567744","1489600511","BH" +"1489600512","1489633279","RU" +"1489633280","1489635327","IT" +"1489635328","1489635838","GB" +"1489635839","1489635839","A2" +"1489635840","1489636863","IT" +"1489636864","1489637119","FR" +"1489637120","1489637887","IT" +"1489637888","1489638399","US" +"1489638400","1489638655","IT" +"1489638656","1489638911","FR" +"1489638912","1489640703","IT" +"1489640704","1489640959","FR" +"1489640960","1489641727","IT" +"1489641728","1489641983","HK" +"1489641984","1489642495","IT" +"1489642496","1489642751","FR" +"1489642752","1489644543","IT" +"1489644544","1489644799","IQ" +"1489644800","1489645055","US" +"1489645056","1489645567","IT" +"1489645568","1489645823","US" +"1489645824","1489646591","A2" +"1489646592","1489646847","US" +"1489646848","1489647103","IT" +"1489647104","1489647359","A2" +"1489647360","1489648639","IT" +"1489648640","1489649158","A2" +"1489649159","1489649159","US" +"1489649160","1489649663","A2" +"1489649664","1489650687","FR" +"1489650688","1489651199","A2" +"1489651200","1489653759","IT" +"1489653760","1489657855","A2" +"1489657856","1489659919","IT" +"1489659920","1489659935","FR" +"1489659936","1489659951","DE" +"1489659952","1489659967","CY" +"1489659968","1489659983","FI" +"1489659984","1489659999","GR" +"1489660000","1489660015","IE" +"1489660016","1489660031","ES" +"1489660032","1489660047","PL" +"1489660048","1489660063","GB" +"1489660064","1489660079","AD" +"1489660080","1489660095","AE" +"1489660096","1489660111","AL" +"1489660112","1489660127","AM" +"1489660128","1489660143","AT" +"1489660144","1489660159","BA" +"1489660160","1489660175","BE" +"1489660176","1489660191","BG" +"1489660192","1489660207","BH" +"1489660208","1489660223","BY" +"1489660224","1489660239","CH" +"1489660240","1489660255","CZ" +"1489660256","1489660271","DK" +"1489660272","1489660287","DZ" +"1489660288","1489660303","EE" +"1489660304","1489660319","EG" +"1489660320","1489660335","HR" +"1489660336","1489660351","HU" +"1489660352","1489660367","KW" +"1489660368","1489660383","LI" +"1489660384","1489660399","LT" +"1489660400","1489660415","LU" +"1489660416","1489660431","LV" +"1489660432","1489660447","LY" +"1489660448","1489660463","MA" +"1489660464","1489660479","MC" +"1489660480","1489660495","MD" +"1489660496","1489660511","ME" +"1489660512","1489660527","MK" +"1489660528","1489660543","MT" +"1489660544","1489660559","NL" +"1489660560","1489660575","NO" +"1489660576","1489660591","OM" +"1489660592","1489660607","PT" +"1489660608","1489660623","QA" +"1489660624","1489660639","RO" +"1489660640","1489660655","RS" +"1489660656","1489660671","RU" +"1489660672","1489660687","SA" +"1489660688","1489660703","SE" +"1489660704","1489660719","SI" +"1489660720","1489660735","SK" +"1489660736","1489660751","SM" +"1489660752","1489660767","TN" +"1489660768","1489660783","TR" +"1489660784","1489660799","UA" +"1489660800","1489660815","VA" +"1489660816","1489660927","A2" +"1489660928","1489660943","IT" +"1489660944","1489660959","FR" +"1489660960","1489660975","DE" +"1489660976","1489660991","CY" +"1489660992","1489661007","FI" +"1489661008","1489661023","GR" +"1489661024","1489661039","IE" +"1489661040","1489661055","ES" +"1489661056","1489661071","PL" +"1489661072","1489661087","GB" +"1489661088","1489661103","AD" +"1489661104","1489661119","AE" +"1489661120","1489661135","AL" +"1489661136","1489661151","AM" +"1489661152","1489661167","AT" +"1489661168","1489661183","BA" +"1489661184","1489661199","BE" +"1489661200","1489661215","BG" +"1489661216","1489661231","BH" +"1489661232","1489661247","BY" +"1489661248","1489661263","CH" +"1489661264","1489661279","CZ" +"1489661280","1489661295","DK" +"1489661296","1489661311","DZ" +"1489661312","1489661327","EE" +"1489661328","1489661343","EG" +"1489661344","1489661359","HR" +"1489661360","1489661375","HU" +"1489661376","1489661391","KW" +"1489661392","1489661407","LI" +"1489661408","1489661423","LT" +"1489661424","1489661439","LU" +"1489661440","1489661455","LV" +"1489661456","1489661471","LY" +"1489661472","1489661487","MA" +"1489661488","1489661503","MC" +"1489661504","1489661519","MD" +"1489661520","1489661535","ME" +"1489661536","1489661551","MK" +"1489661552","1489661567","MT" +"1489661568","1489661583","NL" +"1489661584","1489661599","NO" +"1489661600","1489661615","OM" +"1489661616","1489661631","PT" +"1489661632","1489661647","QA" +"1489661648","1489661663","RO" +"1489661664","1489661679","RS" +"1489661680","1489661695","RU" +"1489661696","1489661711","SA" +"1489661712","1489661727","SE" +"1489661728","1489661743","SI" +"1489661744","1489661759","SK" +"1489661760","1489661775","SM" +"1489661776","1489661791","TN" +"1489661792","1489661807","TR" +"1489661808","1489661823","UA" +"1489661824","1489661839","VA" +"1489661840","1489661951","A2" +"1489661952","1489662207","US" +"1489662208","1489662719","A2" +"1489662720","1489662975","ZA" +"1489662976","1489663487","FR" +"1489663488","1489663999","ES" +"1489664000","1489664511","LY" +"1489664512","1489665023","A2" +"1489665024","1489665279","ZA" +"1489665280","1489666047","IT" +"1489666048","1489698815","GB" +"1489698816","1489731583","MT" +"1489731584","1489764351","BG" +"1489764352","1489797119","RU" +"1489797120","1489829887","KZ" +"1489829888","1489855495","DE" +"1489855496","1489855503","CH" +"1489855504","1489855519","RU" +"1489855520","1489855543","DE" +"1489855544","1489855551","PL" +"1489855552","1489855583","DE" +"1489855584","1489855615","RU" +"1489855616","1489855903","DE" +"1489855904","1489855935","AU" +"1489855936","1489855999","US" +"1489856000","1489856031","PL" +"1489856032","1489856063","RU" +"1489856064","1489862655","DE" +"1489862656","1489928191","RU" +"1489928192","1489960959","SE" +"1489960960","1489993727","HR" +"1489993728","1490026495","LU" +"1490026496","1490028543","US" +"1490028544","1490029055","UA" +"1490029056","1490042879","NL" +"1490042880","1490049879","CZ" +"1490049880","1490049887","AT" +"1490049888","1490049919","CZ" +"1490049920","1490049983","PL" +"1490049984","1490053375","CZ" +"1490053376","1490054400","PL" +"1490054401","1490059263","CZ" +"1490059264","1490075647","DE" +"1490075648","1490092031","GB" +"1490092032","1490108415","DE" +"1490108416","1490116607","MC" +"1490116608","1490118143","FR" +"1490118144","1490118399","MC" +"1490118400","1490118655","FR" +"1490118656","1490120703","MC" +"1490120704","1490124287","FR" +"1490124288","1490124799","MC" +"1490124800","1490157567","HU" +"1490157568","1490173951","RU" +"1490173952","1490190335","PT" +"1490190336","1490192895","GB" +"1490192896","1490193151","IE" +"1490193152","1490194431","GB" +"1490194432","1490194687","DE" +"1490194688","1490195455","GB" +"1490195456","1490195519","DE" +"1490195520","1490195583","PL" +"1490195584","1490195711","DE" +"1490195712","1490195775","IT" +"1490195776","1490195903","PL" +"1490195904","1490195967","CZ" +"1490195968","1490196095","IT" +"1490196096","1490196223","HU" +"1490196224","1490196287","IT" +"1490196288","1490196351","AL" +"1490196352","1490196415","RS" +"1490196416","1490196479","GR" +"1490196480","1490196511","GB" +"1490196512","1490196527","DE" +"1490196528","1490196543","RS" +"1490196544","1490196559","PL" +"1490196560","1490196607","GB" +"1490196608","1490196735","AL" +"1490196736","1490196863","CZ" +"1490196864","1490196895","ES" +"1490196896","1490196927","HU" +"1490196928","1490196959","IT" +"1490196960","1490197503","IE" +"1490197504","1490198271","GB" +"1490198272","1490198527","ES" +"1490198528","1490200063","GB" +"1490200064","1490200319","ES" +"1490200320","1490200575","GB" +"1490200576","1490200831","ES" +"1490200832","1490201087","GB" +"1490201088","1490201183","DE" +"1490201184","1490201215","HU" +"1490201216","1490201279","ES" +"1490201280","1490201471","DE" +"1490201472","1490201535","HU" +"1490201536","1490201855","DE" +"1490201856","1490206719","GB" +"1490206720","1490223103","GE" +"1490223104","1490255871","GB" +"1490255872","1490272255","NL" +"1490272256","1490288639","GB" +"1490288640","1490305023","SK" +"1490305024","1490321407","DK" +"1490321408","1490337791","GB" +"1490337792","1490354175","RU" +"1490354176","1490386943","SA" +"1490386944","1490403327","IT" +"1490403328","1490419711","BG" +"1490419712","1490436095","A2" +"1490436096","1490452479","UA" +"1490452480","1490468863","PT" +"1490468864","1490472447","GB" +"1490472448","1490472703","US" +"1490472704","1490473983","GB" +"1490473984","1490474239","US" +"1490474240","1490478591","GB" +"1490478592","1490479103","RU" +"1490479104","1490484223","GB" +"1490484224","1490484479","US" +"1490484480","1490501631","GB" +"1490501632","1490518015","DE" +"1490518016","1490534399","RU" +"1490534400","1490550783","DE" +"1490550784","1490616319","LT" +"1490616320","1490680643","DE" +"1490680644","1490680647","A2" +"1490680648","1490680663","DE" +"1490680664","1490680667","A2" +"1490680668","1490681855","DE" +"1490681856","1490747391","GR" +"1490747392","1490812927","FR" +"1490812928","1490878463","PL" +"1490878464","1490879487","DE" +"1490879488","1490880511","US" +"1490880512","1490881535","FR" +"1490881536","1490885631","EU" +"1490885632","1490886655","US" +"1490886656","1490904063","EU" +"1490904064","1490905087","US" +"1490905088","1490909183","EU" +"1490909184","1490910207","US" +"1490910208","1490913279","EU" +"1490913280","1490915327","US" +"1490915328","1490917375","IT" +"1490917376","1490919423","IL" +"1490919424","1490927615","EU" +"1490927616","1490929663","FR" +"1490929664","1490931711","EU" +"1490931712","1490933759","DE" +"1490933760","1490934527","EU" +"1490934528","1490934783","IL" +"1490934784","1490943999","EU" +"1490944000","1491075071","LT" +"1491075072","1493172223","TR" +"1493172224","1493303295","DE" +"1493303296","1493434367","FR" +"1493434368","1493565439","SA" +"1493565440","1493696511","ES" +"1493696512","1493958655","NO" +"1493958656","1494220799","DE" +"1494220800","1494228991","FR" +"1494228992","1494237183","RU" +"1494237184","1494245375","IE" +"1494245376","1494253567","RU" +"1494253568","1494261759","DE" +"1494261760","1494269951","GB" +"1494269952","1494278143","AT" +"1494278144","1494282751","GB" +"1494282752","1494283007","FR" +"1494283008","1494286335","GB" +"1494286336","1494294527","HR" +"1494294528","1494302719","RU" +"1494302720","1494310911","FI" +"1494310912","1494319103","LB" +"1494319104","1494327295","IS" +"1494327296","1494335487","IT" +"1494335488","1494343679","ES" +"1494343680","1494351871","PL" +"1494351872","1494360063","RO" +"1494360064","1494368255","HR" +"1494368256","1494376447","IE" +"1494376448","1494384639","SE" +"1494384640","1494392831","RU" +"1494392832","1494393087","US" +"1494393088","1494398975","NL" +"1494398976","1494399743","US" +"1494399744","1494401023","NL" +"1494401024","1494409215","LV" +"1494409216","1494417407","FI" +"1494417408","1494425599","TR" +"1494425600","1494433791","RU" +"1494433792","1494441983","IE" +"1494441984","1494450175","UA" +"1494450176","1494458367","DK" +"1494458368","1494474751","RU" +"1494474752","1494477471","DE" +"1494477472","1494477503","IL" +"1494477504","1494482943","DE" +"1494482944","1494499327","RU" +"1494499328","1494507519","NL" +"1494507520","1494523903","RU" +"1494523904","1494532095","NL" +"1494532096","1494540287","GB" +"1494540288","1494548479","NO" +"1494548480","1494556671","GB" +"1494556672","1494564863","DE" +"1494564864","1494573055","UA" +"1494573056","1494580479","RO" +"1494580480","1494580735","HU" +"1494580736","1494581247","RO" +"1494581248","1494589439","RU" +"1494589440","1494592511","NL" +"1494592512","1494593535","US" +"1494593536","1494594559","NL" +"1494594560","1494595071","US" +"1494595072","1494595327","A2" +"1494595328","1494595583","NL" +"1494595584","1494596607","US" +"1494596608","1494597119","NL" +"1494597120","1494597375","US" +"1494597376","1494597631","NL" +"1494597632","1494605823","IT" +"1494605824","1494614015","GB" +"1494614016","1494616063","RU" +"1494616064","1494618111","ES" +"1494618112","1494622207","RU" +"1494622208","1494624255","PL" +"1494624256","1494626303","UA" +"1494626304","1494630399","RO" +"1494630400","1494638591","CZ" +"1494638592","1494646783","DE" +"1494646784","1494663167","RU" +"1494663168","1494665215","PL" +"1494665216","1494667263","UA" +"1494667264","1494669311","PL" +"1494669312","1494675455","RU" +"1494675456","1494679551","UA" +"1494679552","1494695935","RU" +"1494695936","1494704127","RS" +"1494704128","1494736895","RU" +"1494736896","1494745087","DK" +"1494745088","1494810623","CZ" +"1494810624","1494843391","BG" +"1494843392","1494876159","PL" +"1494876160","1494880519","AT" +"1494880520","1494880527","DE" +"1494880528","1494908927","AT" +"1494908928","1494941695","PT" +"1494941696","1494974463","FI" +"1494974464","1495007231","DE" +"1495007232","1495039999","MD" +"1495040000","1495042047","KZ" +"1495042048","1495044095","DE" +"1495044096","1495046143","FR" +"1495048192","1495050239","RU" +"1495050240","1495052287","GB" +"1495052288","1495054335","IE" +"1495054336","1495056383","GB" +"1495056384","1495058431","RU" +"1495058432","1495060479","UA" +"1495060480","1495062527","GB" +"1495062528","1495064575","JO" +"1495064576","1495066623","PL" +"1495066624","1495068671","GB" +"1495068672","1495070719","DE" +"1495070720","1495072767","RU" +"1495072768","1495105535","CZ" +"1495105536","1495138303","ES" +"1495138304","1495139095","FR" +"1495139096","1495139103","IT" +"1495139104","1495139327","FR" +"1495139328","1495139583","EU" +"1495139584","1495139591","GB" +"1495139592","1495139711","EU" +"1495139712","1495139839","GB" +"1495139840","1495139871","ES" +"1495139872","1495139903","FR" +"1495139904","1495140351","EU" +"1495140352","1495142399","FR" +"1495142400","1495146495","EU" +"1495146496","1495150591","FR" +"1495150592","1495151103","GB" +"1495151104","1495151359","NL" +"1495151360","1495153919","FR" +"1495153920","1495154175","TR" +"1495154176","1495154687","FR" +"1495154688","1495160063","EU" +"1495160064","1495160319","NL" +"1495160320","1495161599","EU" +"1495161600","1495161855","FR" +"1495161856","1495162367","EU" +"1495162368","1495162879","US" +"1495162880","1495163903","FR" +"1495163904","1495164415","EU" +"1495164416","1495164671","FR" +"1495164672","1495164927","EU" +"1495164928","1495165055","FR" +"1495165056","1495165183","EU" +"1495165184","1495165199","FR" +"1495165200","1495165207","EU" +"1495165208","1495165215","ES" +"1495165216","1495165439","EU" +"1495165440","1495168383","FR" +"1495168384","1495168511","EU" +"1495168512","1495168767","FR" +"1495168768","1495169023","GB" +"1495169024","1495169279","FR" +"1495169280","1495169535","EU" +"1495169536","1495169791","FR" +"1495169792","1495170047","NL" +"1495170048","1495170079","FR" +"1495170080","1495170159","EU" +"1495170160","1495170175","FR" +"1495170176","1495170303","EU" +"1495170304","1495170335","FR" +"1495170336","1495170431","EU" +"1495170432","1495171071","FR" +"1495171072","1495174399","NL" +"1495174400","1495174655","US" +"1495174656","1495203839","NL" +"1495203840","1495205887","DE" +"1495205888","1495207935","CZ" +"1495207936","1495209983","RU" +"1495209984","1495212031","KZ" +"1495212032","1495214079","RU" +"1495214080","1495216127","CZ" +"1495216128","1495220223","IT" +"1495220224","1495222271","PL" +"1495222272","1495224319","IT" +"1495224320","1495228415","RU" +"1495228416","1495230463","NL" +"1495230464","1495234559","RU" +"1495234560","1495236607","CH" +"1495236608","1495237247","AT" +"1495237248","1495237255","EU" +"1495237256","1495237271","AT" +"1495237272","1495237311","EU" +"1495237312","1495237319","AT" +"1495237320","1495237375","EU" +"1495237376","1495237711","AT" +"1495237712","1495237727","NL" +"1495237728","1495237731","AT" +"1495237732","1495237739","EU" +"1495237740","1495237743","AT" +"1495237744","1495237751","EU" +"1495237752","1495237775","AT" +"1495237776","1495237791","EU" +"1495237792","1495237807","AT" +"1495237808","1495237887","EU" +"1495237888","1495238207","AT" +"1495238208","1495238223","EU" +"1495238224","1495238231","AT" +"1495238232","1495238239","EU" +"1495238240","1495238255","AT" +"1495238256","1495238271","EU" +"1495238272","1495238399","AT" +"1495238400","1495238655","EU" +"1495238656","1495240703","DE" +"1495240704","1495240751","FR" +"1495240752","1495240759","BE" +"1495240760","1495240767","CH" +"1495240768","1495242111","FR" +"1495242112","1495242119","NL" +"1495242120","1495242127","LU" +"1495242128","1495242135","DE" +"1495242136","1495242143","AT" +"1495242144","1495242151","ES" +"1495242152","1495242159","IT" +"1495242160","1495242167","PL" +"1495242168","1495242175","FR" +"1495242176","1495242183","GB" +"1495242184","1495242191","IE" +"1495242192","1495242199","DK" +"1495242200","1495242207","CZ" +"1495242208","1495242215","GR" +"1495242216","1495242223","PT" +"1495242224","1495242231","RO" +"1495242232","1495242367","FR" +"1495242368","1495242375","HU" +"1495242376","1495242383","BG" +"1495242384","1495242391","SK" +"1495242392","1495242399","LT" +"1495242400","1495242407","LV" +"1495242408","1495242415","SI" +"1495242416","1495242423","EE" +"1495242424","1495242431","FI" +"1495242432","1495242439","SE" +"1495242440","1495242751","FR" +"1495242752","1495244799","MK" +"1495244800","1495246847","CZ" +"1495246848","1495248895","IE" +"1495248896","1495250943","GR" +"1495250944","1495252991","RU" +"1495252992","1495255039","BH" +"1495255040","1495257087","IT" +"1495257088","1495259135","GB" +"1495259136","1495261183","BE" +"1495261184","1495261439","EU" +"1495261440","1495263231","PT" +"1495263232","1495265279","GB" +"1495265280","1495265791","DE" +"1495265792","1495267327","RU" +"1495267328","1495269375","SE" +"1495269376","1495306239","RO" +"1495306240","1495306573","GB" +"1495306574","1495306574","RO" +"1495306575","1495308287","GB" +"1495308288","1495326719","RO" +"1495326720","1495330815","MD" +"1495330816","1495334911","RO" +"1495334912","1495335935","MD" +"1495335936","1495339007","RO" +"1495339008","1495343103","MD" +"1495343104","1495399935","RO" +"1495399936","1495400191","MD" +"1495400192","1495623679","RO" +"1495623680","1495623935","MD" +"1495623936","1495801855","RO" +"1495801856","1495802879","GB" +"1495802880","1495875583","RO" +"1495875584","1495891967","MD" +"1495891968","1495927295","RO" +"1495927296","1495927551","AE" +"1495927552","1495937023","RO" +"1495937024","1495937535","SE" +"1495937536","1496078335","RO" +"1496078336","1496079359","MD" +"1496079360","1496121343","RO" +"1496121344","1496122367","MD" +"1496122368","1496178943","RO" +"1496178944","1496179199","AE" +"1496179200","1496262655","RO" +"1496262656","1496262911","AE" +"1496262912","1496263167","US" +"1496263168","1496317951","RO" +"1496317952","1497366527","DE" +"1497366528","1498415103","PL" +"1498415104","1499463679","FR" +"1499463680","1499594751","IT" +"1499594752","1499725823","NL" +"1499725824","1499856895","IE" +"1499856896","1499987967","CZ" +"1499987968","1499996159","AT" +"1499996160","1500004351","GB" +"1500004352","1500020735","RU" +"1500020736","1500028927","IS" +"1500028928","1500037119","NL" +"1500037120","1500045311","DK" +"1500045312","1500061695","GB" +"1500061696","1500069887","NO" +"1500069888","1500078079","IT" +"1500078080","1500086271","GB" +"1500086272","1500094463","RU" +"1500094464","1500102655","AT" +"1500102656","1500106527","NL" +"1500106528","1500106559","DE" +"1500106560","1500107415","NL" +"1500107416","1500107423","DE" +"1500107424","1500107439","NL" +"1500107440","1500107455","DE" +"1500107456","1500107775","NL" +"1500107776","1500107903","DE" +"1500107904","1500107943","NL" +"1500107944","1500107951","DE" +"1500107952","1500107999","NL" +"1500108000","1500108007","BE" +"1500108008","1500108159","NL" +"1500108160","1500108287","DE" +"1500108288","1500108319","NL" +"1500108320","1500108351","DE" +"1500108352","1500108799","NL" +"1500108800","1500109311","DE" +"1500109312","1500110847","NL" +"1500110848","1500119039","UA" +"1500119040","1500127231","TR" +"1500127232","1500135423","FI" +"1500135424","1500135555","DE" +"1500135556","1500135559","CH" +"1500135560","1500140560","DE" +"1500140561","1500140564","AT" +"1500140565","1500140568","CH" +"1500140569","1500143615","DE" +"1500143616","1500151807","BG" +"1500151808","1500153855","GB" +"1500153856","1500155903","IE" +"1500155904","1500157951","GB" +"1500157952","1500159999","DE" +"1500160000","1500162047","NL" +"1500162048","1500164095","RU" +"1500164096","1500166143","GB" +"1500166144","1500166399","FR" +"1500166400","1500166655","DE" +"1500166656","1500168191","FR" +"1500168192","1500170239","RU" +"1500170240","1500172287","LU" +"1500172288","1500174335","AT" +"1500174336","1500176383","DE" +"1500176384","1500178431","GB" +"1500178432","1500180479","KZ" +"1500180480","1500182527","BE" +"1500182528","1500184575","RU" +"1500184576","1500184831","GB" +"1500184832","1500184895","IM" +"1500184896","1500184919","GB" +"1500184920","1500184943","IM" +"1500184944","1500185007","GB" +"1500185008","1500185023","IM" +"1500185024","1500185047","GB" +"1500185048","1500185055","IM" +"1500185056","1500185063","GB" +"1500185064","1500185071","IM" +"1500185072","1500185079","GB" +"1500185080","1500185087","IM" +"1500185088","1500185119","GB" +"1500185120","1500185199","IM" +"1500185200","1500185207","GB" +"1500185208","1500185231","IM" +"1500185232","1500185247","GB" +"1500185248","1500185279","IM" +"1500185280","1500185287","GB" +"1500185288","1500185311","IM" +"1500185312","1500185319","GB" +"1500185320","1500185327","IM" +"1500185328","1500185335","GB" +"1500185336","1500186623","IM" +"1500186624","1500188671","KW" +"1500188672","1500190719","GB" +"1500190720","1500194815","RU" +"1500194816","1500196863","GB" +"1500196864","1500198911","ES" +"1500198912","1500200959","GB" +"1500200960","1500203007","DE" +"1500203008","1500205055","GB" +"1500205056","1500207103","RU" +"1500207104","1500209151","IT" +"1500209152","1500211199","KZ" +"1500211200","1500213247","IT" +"1500213248","1500217343","RU" +"1500217344","1500217599","CZ" +"1500217600","1500218111","DE" +"1500218112","1500218367","CZ" +"1500218368","1500219391","DE" +"1500219392","1500219647","FR" +"1500221440","1500223487","SK" +"1500223488","1500225535","PL" +"1500225536","1500227583","DE" +"1500227584","1500229631","FR" +"1500229632","1500231679","ES" +"1500231680","1500233727","DE" +"1500233728","1500237823","RU" +"1500237824","1500241919","SE" +"1500241920","1500243967","TR" +"1500243968","1500246015","GB" +"1500246016","1500248063","ES" +"1500248064","1500250111","HU" +"1500250112","1500266495","SA" +"1500266496","1500282879","RU" +"1500282880","1500299263","LB" +"1500299264","1500315647","PL" +"1500315648","1500332031","RU" +"1500332032","1500348415","PT" +"1500348416","1500413951","RU" +"1500413952","1500430335","DE" +"1500430336","1500446719","RS" +"1500446720","1500447743","LV" +"1500447744","1500447999","LT" +"1500448000","1500448511","LV" +"1500448512","1500448767","LT" +"1500448768","1500463103","LV" +"1500463104","1500479487","CZ" +"1500479488","1500495871","RU" +"1500495872","1500512255","BA" +"1500512256","1500643327","RU" +"1500643328","1500774399","RO" +"1500774400","1500905471","LT" +"1500905472","1501036543","IT" +"1501036544","1501298687","RO" +"1501298688","1501560831","IE" +"1501560832","1501822975","ES" +"1501822976","1502085119","HU" +"1502085120","1502216191","RO" +"1502216192","1502347263","IL" +"1502347264","1502478335","ES" +"1502478336","1502605311","SI" +"1502605312","1502606335","HR" +"1502606336","1502609407","SI" +"1502609408","1502624030","DE" +"1502624031","1502624047","IR" +"1502624048","1502625791","DE" +"1502625792","1502642175","SA" +"1502642176","1502658559","IR" +"1502658560","1502674943","AT" +"1502674944","1502691327","DE" +"1502691328","1502691679","GB" +"1502691680","1502691711","SE" +"1502691712","1502702835","GB" +"1502702836","1502702839","IE" +"1502702840","1502703103","GB" +"1502703104","1502703615","SE" +"1502703616","1502706623","GB" +"1502706624","1502706687","CY" +"1502706688","1502707711","GB" +"1502707712","1502715903","RU" +"1502715904","1502717951","IT" +"1502717952","1502719999","GB" +"1502720000","1502722047","CH" +"1502722048","1502724095","TR" +"1502724096","1502740479","GB" +"1502740480","1502756863","NL" +"1502756864","1502773247","UZ" +"1502773248","1502789631","BA" +"1502789632","1502791551","DE" +"1502791552","1502791679","PL" +"1502791680","1502793503","DE" +"1502793504","1502793511","NL" +"1502793512","1502794239","DE" +"1502794240","1502794495","NL" +"1502794496","1502795767","DE" +"1502795768","1502795771","NL" +"1502795772","1502806015","DE" +"1502806016","1502822399","SA" +"1502822400","1502838783","HU" +"1502838784","1502855167","SE" +"1502855168","1502871551","AZ" +"1502871552","1502887679","BH" +"1502887680","1502887935","US" +"1502887936","1502904319","HU" +"1502904320","1502920703","IT" +"1502920704","1502937087","RU" +"1502937088","1502953471","RO" +"1502953472","1502969855","MD" +"1502969856","1502975231","US" +"1502975232","1502975247","FR" +"1502975248","1502975263","IE" +"1502975264","1502975295","GB" +"1502975296","1502975311","FR" +"1502975312","1502975319","IE" +"1502975320","1502975359","FR" +"1502975360","1502975367","IE" +"1502975368","1502975383","FR" +"1502975384","1502975391","ES" +"1502975392","1502975423","FR" +"1502975424","1502975455","GB" +"1502975456","1502975487","IE" +"1502975488","1502975743","ES" +"1502975744","1502975999","FR" +"1502976000","1502977055","US" +"1502977056","1502977151","FR" +"1502977152","1502979071","US" +"1502979072","1502979103","FR" +"1502979104","1502979111","ES" +"1502979112","1502979119","FR" +"1502979120","1502979135","ES" +"1502979136","1502979199","FR" +"1502979200","1502979215","ES" +"1502979216","1502979327","FR" +"1502979328","1502979583","US" +"1502979584","1502980095","FR" +"1502980096","1502980159","US" +"1502980160","1502980351","FR" +"1502980352","1502980871","US" +"1502980872","1502981119","FR" +"1502981120","1502981887","US" +"1502981888","1502982143","NL" +"1502982144","1502982911","DE" +"1502982912","1502983167","FR" +"1502983168","1502986255","DE" +"1502986256","1502986495","TR" +"1502986496","1502986511","DE" +"1502986512","1502986751","PL" +"1502986752","1502987535","DE" +"1502987536","1502987551","AE" +"1502987552","1502987775","DE" +"1502987776","1502988031","TR" +"1502988032","1502989055","DE" +"1502989056","1502989567","TR" +"1502989568","1502990847","DE" +"1502990848","1502991103","PL" +"1502991104","1502991359","DE" +"1502991360","1502991615","PL" +"1502991616","1502994687","DE" +"1502994688","1502994943","PL" +"1502994944","1502995967","DE" +"1502995968","1502996479","PL" +"1502996480","1502996735","DE" +"1502996736","1502997247","PL" +"1502997248","1502997503","LT" +"1502997504","1502997759","HK" +"1502997760","1502999734","DE" +"1502999735","1502999735","SA" +"1502999736","1502999737","DE" +"1502999738","1502999738","SA" +"1502999739","1502999855","DE" +"1502999856","1502999871","MK" +"1502999872","1503000063","DE" +"1503000064","1503000319","PL" +"1503000320","1503000831","DE" +"1503000832","1503001343","PL" +"1503001344","1503002623","DE" +"1503002624","1503006719","GE" +"1503006720","1503010815","GB" +"1503010816","1503019007","IT" +"1503019008","1503051775","DK" +"1503051776","1503068159","SE" +"1503068160","1503084543","PL" +"1503084544","1503100927","GB" +"1503100928","1503117311","RU" +"1503117312","1503133695","NO" +"1503133696","1503395839","PT" +"1503395840","1503657983","FR" +"1503657984","1503690751","SE" +"1503690752","1503723519","IS" +"1503723520","1503789055","PL" +"1503789056","1503821823","NO" +"1503821824","1503854591","UA" +"1503854592","1503887359","RU" +"1503887360","1503895599","DE" +"1503895600","1503895607","BE" +"1503895608","1503895663","DE" +"1503895664","1503895671","FR" +"1503895672","1503895679","PL" +"1503895680","1503895687","IT" +"1503895688","1503895695","DE" +"1503895696","1503895703","GB" +"1503895704","1503895751","DE" +"1503895752","1503895759","IT" +"1503895760","1503895775","DE" +"1503895776","1503895783","NL" +"1503895784","1503896175","DE" +"1503896176","1503896183","NL" +"1503896184","1503896351","DE" +"1503896352","1503896359","AT" +"1503896360","1503896367","CH" +"1503896368","1503896375","DE" +"1503896376","1503896383","CH" +"1503896384","1503896399","DE" +"1503896400","1503896407","GR" +"1503896408","1503896439","DE" +"1503896440","1503896447","NO" +"1503896448","1503896543","DE" +"1503896544","1503896551","FR" +"1503896552","1503897303","DE" +"1503897304","1503897311","BE" +"1503897312","1503897335","DE" +"1503897336","1503897343","PT" +"1503897344","1503897367","DE" +"1503897368","1503897375","BE" +"1503897376","1503897383","GR" +"1503897384","1503897407","DE" +"1503897408","1503897415","IT" +"1503897416","1503897431","DE" +"1503897432","1503897439","IT" +"1503897440","1503897463","DE" +"1503897464","1503897471","GR" +"1503897472","1503897479","AT" +"1503897480","1503897487","BE" +"1503897488","1503897519","DE" +"1503897520","1503897527","IT" +"1503897528","1503897583","DE" +"1503897584","1503897591","GB" +"1503897592","1503898119","DE" +"1503898120","1503898135","TH" +"1503898136","1503898167","DE" +"1503898168","1503898175","RO" +"1503898176","1503898183","IT" +"1503898184","1503898191","AT" +"1503898192","1503898199","GR" +"1503898200","1503898207","DE" +"1503898208","1503898215","BE" +"1503898216","1503898239","DE" +"1503898240","1503898303","IT" +"1503898304","1503898311","BE" +"1503898312","1503898351","DE" +"1503898352","1503898359","CH" +"1503898360","1503898415","DE" +"1503898416","1503898431","BE" +"1503898432","1503898503","DE" +"1503898504","1503898511","GR" +"1503898512","1503898567","DE" +"1503898568","1503898575","NL" +"1503898576","1503898599","DE" +"1503898600","1503898607","IT" +"1503898608","1503898615","GR" +"1503898616","1503898631","DE" +"1503898632","1503898647","GR" +"1503898648","1503898791","DE" +"1503898792","1503898799","RO" +"1503898800","1503898807","DE" +"1503898808","1503898815","PL" +"1503898816","1503898831","GB" +"1503898832","1503898839","SE" +"1503898840","1503898847","DE" +"1503898848","1503898855","MX" +"1503898856","1503898887","DE" +"1503898888","1503898895","IT" +"1503898896","1503898935","DE" +"1503898936","1503898943","IT" +"1503898944","1503898959","DE" +"1503898960","1503898967","IT" +"1503898968","1503898991","DE" +"1503898992","1503898999","GB" +"1503899000","1503899007","AT" +"1503899008","1503899015","CH" +"1503899016","1503899063","DE" +"1503899064","1503899079","AT" +"1503899080","1503899119","DE" +"1503899120","1503899127","NL" +"1503899128","1503899143","DE" +"1503899144","1503899151","IT" +"1503899152","1503899159","DE" +"1503899160","1503899167","GB" +"1503899168","1503899183","DE" +"1503899184","1503899191","GR" +"1503899192","1503899199","CH" +"1503899200","1503899263","DE" +"1503899264","1503899271","AT" +"1503899272","1503899287","BE" +"1503899288","1503899295","CH" +"1503899296","1503899303","GR" +"1503899304","1503899311","NL" +"1503899312","1503899319","RU" +"1503899320","1503899335","DE" +"1503899336","1503899343","TH" +"1503899344","1503899351","DE" +"1503899352","1503899367","GR" +"1503899368","1503899375","CH" +"1503899376","1503899399","DE" +"1503899400","1503899407","CH" +"1503899408","1503899423","DE" +"1503899424","1503899431","IT" +"1503899432","1503899439","GR" +"1503899440","1503899463","DE" +"1503899464","1503899479","BR" +"1503899480","1503899495","DE" +"1503899496","1503899503","IT" +"1503899504","1503899575","DE" +"1503899576","1503899583","BE" +"1503899584","1503899687","DE" +"1503899688","1503899695","IT" +"1503899696","1503899703","BE" +"1503899704","1503899951","DE" +"1503899952","1503899959","IT" +"1503899960","1503900063","DE" +"1503900064","1503900071","AU" +"1503900072","1503900095","DE" +"1503900096","1503900103","CH" +"1503900104","1503900111","CA" +"1503900112","1503900143","DE" +"1503900144","1503900159","IT" +"1503900160","1503900679","DE" +"1503900680","1503900687","BE" +"1503900688","1503900703","IT" +"1503900704","1503908351","DE" +"1503908352","1503909375","IT" +"1503909376","1503920127","DE" +"1503920128","1503985663","HR" +"1503985664","1504018431","IR" +"1504018432","1504051199","RO" +"1504051200","1504083967","FI" +"1504083968","1504116735","DE" +"1504116736","1504149503","PL" +"1504149504","1504151551","GB" +"1504151552","1504151615","IE" +"1504151616","1504152127","GB" +"1504152128","1504152191","IE" +"1504152192","1504152415","GB" +"1504152416","1504152431","IE" +"1504152432","1504154623","GB" +"1504154624","1504155647","IE" +"1504155648","1504156927","GB" +"1504156928","1504157183","IE" +"1504157184","1504161279","GB" +"1504161280","1504161535","IE" +"1504161536","1504164607","GB" +"1504164608","1504164863","IE" +"1504164864","1504169983","GB" +"1504169984","1504170239","IE" +"1504170240","1504171007","GB" +"1504171008","1504171263","PT" +"1504171264","1504171775","GB" +"1504171776","1504172031","US" +"1504172032","1504173055","GB" +"1504173056","1504173311","IE" +"1504173312","1504174591","GB" +"1504174592","1504175103","IE" +"1504175104","1504176383","GB" +"1504176384","1504176639","IE" +"1504176640","1504178431","GB" +"1504178432","1504178687","IE" +"1504178688","1504247807","GB" +"1504247808","1504313343","RU" +"1504313344","1504378879","FR" +"1504378880","1504444415","PL" +"1504444416","1504509951","HR" +"1504509952","1504575487","SK" +"1504575488","1504641023","PL" +"1504641024","1504675839","RU" +"1504675840","1504676095","US" +"1504676096","1504706559","RU" +"1504706560","1504837631","CZ" +"1504837632","1504968703","RU" +"1504968704","1505099775","PT" +"1505099776","1505230847","DE" +"1505230848","1505239039","RU" +"1505239040","1505247231","IE" +"1505247232","1505255423","UA" +"1505255424","1505263615","IT" +"1505263616","1505271807","DK" +"1505271808","1505279999","NL" +"1505280000","1505288191","IR" +"1505288192","1505296383","RU" +"1505296384","1505304575","UA" +"1505304576","1505305351","FR" +"1505305352","1505305359","GB" +"1505305360","1505305367","BE" +"1505305368","1505305375","ES" +"1505305376","1505305383","NL" +"1505305384","1505305391","DE" +"1505305392","1505305399","IT" +"1505305400","1505305407","PT" +"1505305408","1505305415","US" +"1505305416","1505305423","CH" +"1505305424","1505305908","FR" +"1505305909","1505305909","LU" +"1505305910","1505306303","FR" +"1505306304","1505306319","ES" +"1505306320","1505306335","DE" +"1505306336","1505306351","GB" +"1505306352","1505306367","IT" +"1505306368","1505312767","FR" +"1505312768","1505320959","RU" +"1505320960","1505321103","AT" +"1505321104","1505321111","DE" +"1505321112","1505321119","AT" +"1505321120","1505321135","DE" +"1505321136","1505321423","AT" +"1505321424","1505321439","DE" +"1505321440","1505321599","AT" +"1505321600","1505321631","DE" +"1505321632","1505321695","AT" +"1505321696","1505321823","DE" +"1505321824","1505321831","AT" +"1505321832","1505321983","DE" +"1505321984","1505322303","AT" +"1505322304","1505322415","DE" +"1505322416","1505322895","AT" +"1505322896","1505324335","DE" +"1505324336","1505324367","AT" +"1505324368","1505324791","DE" +"1505324792","1505324799","AT" +"1505324800","1505326847","DE" +"1505326848","1505326863","AT" +"1505326864","1505326879","DE" +"1505326880","1505326887","AT" +"1505326888","1505326895","DE" +"1505326896","1505327359","AT" +"1505327360","1505327607","DE" +"1505327608","1505327871","AT" +"1505327872","1505328119","DE" +"1505328120","1505328135","AT" +"1505328136","1505328143","DE" +"1505328144","1505328223","AT" +"1505328224","1505328255","DE" +"1505328256","1505328287","AT" +"1505328288","1505328319","DE" +"1505328320","1505328391","AT" +"1505328392","1505328399","DE" +"1505328400","1505328511","AT" +"1505328512","1505328639","DE" +"1505328640","1505329023","AT" +"1505329024","1505329151","DE" +"1505329152","1505329215","GB" +"1505329216","1505329231","IE" +"1505329232","1505329247","GB" +"1505329248","1505329375","IE" +"1505329376","1505329407","GB" +"1505329408","1505332991","IE" +"1505332992","1505332999","GB" +"1505333000","1505333471","IE" +"1505333472","1505333487","GB" +"1505333488","1505333623","IE" +"1505333624","1505333631","GB" +"1505333632","1505333887","IE" +"1505333888","1505333951","GB" +"1505333952","1505335807","IE" +"1505335808","1505336071","GB" +"1505336072","1505336576","IE" +"1505336577","1505336639","GB" +"1505336640","1505336655","IE" +"1505336656","1505336711","GB" +"1505336712","1505336823","IE" +"1505336824","1505336863","GB" +"1505336864","1505336864","IE" +"1505336865","1505336879","GB" +"1505336880","1505336959","IE" +"1505336960","1505336975","GB" +"1505336976","1505337023","IE" +"1505337024","1505337055","GB" +"1505337056","1505337071","IE" +"1505337072","1505337215","GB" +"1505337216","1505337343","IE" +"1505337344","1505345535","FR" +"1505345536","1505353727","MK" +"1505353728","1505359663","CZ" +"1505359664","1505359671","SK" +"1505359672","1505359675","CZ" +"1505359676","1505359679","SK" +"1505359680","1505359759","CZ" +"1505359760","1505359775","SK" +"1505359776","1505361919","CZ" +"1505361920","1505370111","PL" +"1505370112","1505378303","SM" +"1505378304","1505386495","IT" +"1505386496","1505394687","HU" +"1505394688","1505402879","DE" +"1505402880","1505411071","DK" +"1505419264","1505427455","RU" +"1505427456","1505435647","UA" +"1505435648","1505443839","MD" +"1505443840","1505452103","GB" +"1505452104","1505452111","US" +"1505452112","1505453167","GB" +"1505453168","1505453175","SE" +"1505453176","1505453183","US" +"1505453184","1505454367","GB" +"1505454368","1505454375","US" +"1505454376","1505454383","GB" +"1505454384","1505454391","US" +"1505454392","1505454399","SG" +"1505454400","1505454463","GB" +"1505454464","1505454495","AU" +"1505454496","1505454511","GB" +"1505454512","1505454527","DE" +"1505454528","1505454543","NZ" +"1505454544","1505454911","GB" +"1505454912","1505454943","CZ" +"1505454944","1505454959","GB" +"1505454960","1505454975","IE" +"1505454976","1505455103","US" +"1505455104","1505455503","GB" +"1505455504","1505455519","NL" +"1505455520","1505455683","GB" +"1505455684","1505455687","US" +"1505455688","1505455695","GB" +"1505455696","1505455699","NZ" +"1505455700","1505455711","US" +"1505455712","1505455719","GB" +"1505455720","1505455727","US" +"1505455728","1505455759","GB" +"1505455760","1505455767","DE" +"1505455768","1505455791","GB" +"1505455792","1505455799","US" +"1505455800","1505455999","GB" +"1505456000","1505456079","US" +"1505456080","1505456127","GB" +"1505456128","1505456255","US" +"1505456256","1505456343","GB" +"1505456344","1505456347","US" +"1505456348","1505456351","GB" +"1505456352","1505456367","US" +"1505456368","1505456639","GB" +"1505456640","1505456895","US" +"1505456896","1505456927","GB" +"1505456928","1505456935","US" +"1505456936","1505456983","GB" +"1505456984","1505456987","IL" +"1505456988","1505456991","US" +"1505456992","1505457011","GB" +"1505457012","1505457015","US" +"1505457016","1505458175","GB" +"1505458176","1505458431","US" +"1505458432","1505458455","GB" +"1505458456","1505458495","US" +"1505458496","1505458519","GB" +"1505458520","1505458527","US" +"1505458528","1505458543","GB" +"1505458544","1505458559","US" +"1505458560","1505460223","GB" +"1505460224","1505460895","CZ" +"1505460896","1505460927","US" +"1505460928","1505478655","CZ" +"1505478656","1505482751","DE" +"1505482752","1505484799","LB" +"1505484800","1505492991","PL" +"1505492992","1505501183","NL" +"1505501184","1505509375","ME" +"1505509376","1505517567","SA" +"1505517568","1505525759","RU" +"1505525760","1505533951","IT" +"1505533952","1505542143","RU" +"1505542144","1505550335","PL" +"1505550336","1505566719","RU" +"1505566720","1505574911","IT" +"1505574912","1505583103","YE" +"1505583104","1505607679","RU" +"1505607680","1505615871","SE" +"1505615872","1505624063","SA" +"1505624064","1505632255","FI" +"1505632256","1505646847","CZ" +"1505646848","1505647103","PL" +"1505647104","1505648639","CZ" +"1505648640","1505656831","LT" +"1505656832","1505665023","BH" +"1505665024","1505668263","IT" +"1505668264","1505668267","DE" +"1505668268","1505670615","IT" +"1505670616","1505670623","US" +"1505670624","1505673215","IT" +"1505673216","1505681407","BG" +"1505681408","1505689599","RU" +"1505689600","1505697791","NO" +"1505697792","1505705983","IE" +"1505705984","1505707327","DE" +"1505707328","1505707519","AT" +"1505707520","1505708543","DE" +"1505708544","1505709055","AT" +"1505709056","1505714175","DE" +"1505714176","1505722367","LV" +"1505722368","1505738751","PL" +"1505738752","1505745135","GB" +"1505745136","1505745151","ES" +"1505745152","1505745839","GB" +"1505745840","1505745855","IL" +"1505745856","1505746943","GB" +"1505746944","1505755135","RU" +"1505755136","1506017279","GB" +"1506017280","1506279423","DE" +"1506279424","1506312191","NL" +"1506312192","1506316287","GB" +"1506316288","1506322431","PL" +"1506322432","1506324479","DE" +"1506324480","1506328575","RU" +"1506328576","1506330623","FI" +"1506330624","1506332671","NL" +"1506332672","1506334719","PL" +"1506334720","1506336767","GB" +"1506336768","1506338815","PL" +"1506338816","1506340863","UA" +"1506340864","1506342911","RO" +"1506342912","1506344959","UA" +"1506344960","1506377727","LV" +"1506377728","1506410495","HR" +"1506410496","1506418687","DE" +"1506418688","1506418695","CY" +"1506418696","1506418703","GB" +"1506418704","1506418719","CA" +"1506418720","1506418975","DE" +"1506418976","1506418983","CA" +"1506418984","1506422079","DE" +"1506422080","1506422111","CY" +"1506422112","1506422142","CA" +"1506422143","1506422319","DE" +"1506422320","1506422335","GB" +"1506422336","1506422655","DE" +"1506422656","1506422687","CY" +"1506422688","1506422703","CA" +"1506422704","1506422719","GB" +"1506422720","1506422751","US" +"1506422752","1506427183","DE" +"1506427184","1506427199","CA" +"1506427200","1506427663","DE" +"1506427664","1506427679","GB" +"1506427680","1506427743","DE" +"1506427744","1506427759","CA" +"1506427760","1506428223","DE" +"1506428224","1506428239","US" +"1506428240","1506436863","DE" +"1506436864","1506436879","FR" +"1506436880","1506436883","GB" +"1506436884","1506436959","DE" +"1506436960","1506436975","GB" +"1506436976","1506437119","DE" +"1506437120","1506437503","US" +"1506437504","1506437551","DE" +"1506437552","1506437567","BG" +"1506437568","1506437583","DE" +"1506437584","1506437615","NL" +"1506437616","1506437623","US" +"1506437624","1506437631","DE" +"1506437632","1506437887","MU" +"1506437888","1506437903","CA" +"1506437904","1506437919","US" +"1506437920","1506437951","IN" +"1506437952","1506437983","DE" +"1506437984","1506437991","US" +"1506437992","1506437999","DE" +"1506438000","1506438015","CA" +"1506438016","1506438143","DE" +"1506438144","1506438271","HK" +"1506438272","1506438367","GB" +"1506438368","1506438383","IL" +"1506438384","1506438399","GB" +"1506438400","1506438527","US" +"1506438528","1506438783","DE" +"1506438784","1506438799","KR" +"1506438800","1506438847","DE" +"1506438848","1506438863","US" +"1506438864","1506438871","DE" +"1506438872","1506438879","FR" +"1506438880","1506438883","US" +"1506438884","1506438887","DE" +"1506438888","1506438895","NL" +"1506438896","1506438911","CH" +"1506438912","1506439039","US" +"1506439040","1506439463","DE" +"1506439464","1506439471","GB" +"1506439472","1506439571","DE" +"1506439572","1506439575","US" +"1506439576","1506439579","DE" +"1506439580","1506439583","NL" +"1506439584","1506439607","DE" +"1506439608","1506439615","SE" +"1506439616","1506439619","CH" +"1506439620","1506439623","GB" +"1506439624","1506439631","DE" +"1506439632","1506439647","AE" +"1506439648","1506439667","GB" +"1506439668","1506439935","DE" +"1506439936","1506440191","US" +"1506440192","1506440447","DE" +"1506440448","1506440575","US" +"1506440576","1506440591","CY" +"1506440592","1506440607","NL" +"1506440608","1506440639","DE" +"1506440640","1506440671","US" +"1506440672","1506440702","SE" +"1506440703","1506440703","DE" +"1506440704","1506440711","US" +"1506440712","1506440719","FR" +"1506440720","1506440735","US" +"1506440736","1506440767","GB" +"1506440768","1506440799","US" +"1506440800","1506440831","DE" +"1506440832","1506440959","US" +"1506440960","1506440991","FR" +"1506440992","1506440999","US" +"1506441000","1506441007","GB" +"1506441008","1506441023","US" +"1506441024","1506441087","HK" +"1506441088","1506441215","CA" +"1506441216","1506441343","US" +"1506441344","1506441407","HK" +"1506441408","1506441415","DE" +"1506441416","1506441423","FR" +"1506441424","1506441495","DE" +"1506441496","1506441503","GB" +"1506441504","1506441535","US" +"1506441536","1506441615","DE" +"1506441616","1506441631","US" +"1506441632","1506441647","DE" +"1506441648","1506441663","GB" +"1506441664","1506441671","NL" +"1506441672","1506441679","CA" +"1506441680","1506441695","DE" +"1506441696","1506441727","CA" +"1506441728","1506442239","MU" +"1506442240","1506442383","US" +"1506442384","1506442399","GB" +"1506442400","1506442415","FR" +"1506442416","1506442427","US" +"1506442428","1506442431","DE" +"1506442432","1506442463","HK" +"1506442464","1506442623","DE" +"1506442624","1506442655","GB" +"1506442656","1506442687","US" +"1506442688","1506442703","GB" +"1506442704","1506442711","US" +"1506442712","1506442715","NL" +"1506442716","1506442719","US" +"1506442720","1506442735","GB" +"1506442736","1506442743","DE" +"1506442744","1506442751","US" +"1506442752","1506442879","DE" +"1506442880","1506442911","GB" +"1506442912","1506442919","DE" +"1506442920","1506442923","GB" +"1506442924","1506442927","NL" +"1506442928","1506442975","US" +"1506442976","1506442991","DE" +"1506442992","1506442999","GB" +"1506443000","1506443003","IE" +"1506443004","1506443151","DE" +"1506443152","1506443167","GB" +"1506443168","1506443183","NL" +"1506443184","1506443199","DE" +"1506443200","1506443263","US" +"1506443264","1506444287","GB" +"1506444288","1506445311","DE" +"1506445312","1506445337","FR" +"1506445338","1506445343","GB" +"1506445344","1506445519","FR" +"1506445520","1506445527","GB" +"1506445528","1506445591","FR" +"1506445592","1506445599","GB" +"1506445600","1506445703","FR" +"1506445704","1506445711","NL" +"1506445712","1506445719","GB" +"1506445720","1506445759","FR" +"1506445760","1506445767","GB" +"1506445768","1506445815","FR" +"1506445816","1506445823","GB" +"1506445824","1506446175","FR" +"1506446176","1506446183","GB" +"1506446184","1506446335","FR" +"1506446336","1506446719","NL" +"1506446720","1506446735","GB" +"1506446736","1506447359","NL" +"1506447360","1506447423","IT" +"1506447424","1506447463","GB" +"1506447464","1506448127","IT" +"1506448128","1506448135","GB" +"1506448136","1506448255","IT" +"1506448256","1506448319","GB" +"1506448320","1506448383","IT" +"1506448384","1506448639","AT" +"1506448640","1506448647","GB" +"1506448648","1506448663","AT" +"1506448664","1506448671","GB" +"1506448672","1506448703","AT" +"1506448704","1506448895","GB" +"1506448896","1506449159","BE" +"1506449160","1506449171","GB" +"1506449172","1506449407","BE" +"1506449408","1506449663","NL" +"1506449664","1506449919","SK" +"1506449920","1506449927","CH" +"1506449928","1506449935","GB" +"1506449936","1506450031","CH" +"1506450032","1506450039","GB" +"1506450040","1506450431","CH" +"1506450432","1506450767","CZ" +"1506450768","1506450847","GB" +"1506450848","1506450863","CZ" +"1506450864","1506450879","GB" +"1506450880","1506450943","CZ" +"1506450944","1506450958","DK" +"1506450959","1506450959","GB" +"1506450960","1506450999","DK" +"1506451000","1506451007","GB" +"1506451008","1506451023","DK" +"1506451024","1506451031","FI" +"1506451032","1506451039","DK" +"1506451040","1506451055","NO" +"1506451056","1506451059","DK" +"1506451060","1506451071","GB" +"1506451072","1506451135","DK" +"1506451136","1506451199","GB" +"1506451200","1506451791","ES" +"1506451792","1506451799","GB" +"1506451800","1506451871","ES" +"1506451872","1506451887","GB" +"1506451888","1506451895","ES" +"1506451896","1506451919","GB" +"1506451920","1506452063","ES" +"1506452064","1506452079","GB" +"1506452080","1506452087","ES" +"1506452088","1506452095","GB" +"1506452096","1506452143","ES" +"1506452144","1506452159","GB" +"1506452160","1506452223","ES" +"1506452224","1506452479","GB" +"1506452480","1506452735","US" +"1506452736","1506452751","RO" +"1506452752","1506452991","GB" +"1506452992","1506453247","AT" +"1506453248","1506453391","SE" +"1506453392","1506453399","ES" +"1506453400","1506453415","SE" +"1506453416","1506453423","GB" +"1506453424","1506453439","SE" +"1506453440","1506453447","GB" +"1506453448","1506453471","SE" +"1506453472","1506453487","GB" +"1506453488","1506453503","SE" +"1506453504","1506453759","DE" +"1506453760","1506453823","FR" +"1506453824","1506453839","GB" +"1506453840","1506454015","FR" +"1506454016","1506454271","AT" +"1506454272","1506454527","ES" +"1506454528","1506454783","IT" +"1506454784","1506455039","US" +"1506455040","1506455295","GB" +"1506455296","1506455551","IT" +"1506455552","1506456063","AE" +"1506456064","1506456319","HU" +"1506456320","1506456575","IT" +"1506456576","1506456831","IE" +"1506456832","1506456847","IT" +"1506456848","1506456863","GB" +"1506456864","1506456959","IT" +"1506456960","1506456991","GB" +"1506456992","1506457087","IT" +"1506457088","1506458239","GB" +"1506458240","1506458271","CH" +"1506458272","1506458279","GB" +"1506458280","1506458287","CH" +"1506458288","1506458303","GB" +"1506458304","1506458623","CH" +"1506458624","1506459135","GB" +"1506459136","1506459177","BE" +"1506459178","1506459178","EU" +"1506459179","1506459647","BE" +"1506459648","1506459967","FR" +"1506459968","1506460031","ES" +"1506460032","1506460047","FR" +"1506460048","1506460055","GB" +"1506460056","1506460063","FR" +"1506460064","1506460079","GB" +"1506460080","1506460126","FR" +"1506460127","1506460127","GB" +"1506460128","1506460315","FR" +"1506460316","1506460319","GB" +"1506460320","1506460335","FR" +"1506460336","1506460343","GB" +"1506460344","1506460671","FR" +"1506460672","1506460927","AT" +"1506460928","1506461311","IT" +"1506461312","1506461315","GB" +"1506461316","1506461319","IT" +"1506461320","1506461327","GB" +"1506461328","1506461343","IT" +"1506461344","1506461351","GB" +"1506461352","1506461359","FR" +"1506461360","1506461695","IT" +"1506461696","1506461839","FR" +"1506461840","1506461855","GB" +"1506461856","1506461863","FR" +"1506461864","1506461887","GB" +"1506461888","1506462207","FR" +"1506462208","1506462463","ES" +"1506462464","1506462527","FR" +"1506462528","1506462583","GB" +"1506462584","1506462599","FR" +"1506462600","1506462607","GB" +"1506462608","1506462623","A2" +"1506462624","1506462719","FR" +"1506462720","1506463231","IT" +"1506463232","1506463487","SE" +"1506463488","1506463671","DE" +"1506463672","1506463679","GB" +"1506463680","1506463999","DE" +"1506464000","1506464767","GB" +"1506464768","1506464911","NL" +"1506464912","1506464919","GB" +"1506464920","1506465023","NL" +"1506465024","1506465279","EU" +"1506465280","1506465791","GB" +"1506465792","1506466047","DE" +"1506466048","1506466303","BE" +"1506466304","1506466559","DE" +"1506466560","1506466627","GB" +"1506466628","1506466631","NL" +"1506466632","1506467071","GB" +"1506467072","1506467327","DE" +"1506467328","1506467599","GB" +"1506467600","1506467695","IT" +"1506467696","1506467839","GB" +"1506467840","1506468351","IT" +"1506468352","1506468607","GB" +"1506468608","1506468863","TZ" +"1506468864","1506469471","IT" +"1506469472","1506469479","GB" +"1506469480","1506470143","IT" +"1506470144","1506470399","GB" +"1506470400","1506470655","DE" +"1506470656","1506471679","IT" +"1506471680","1506471935","GB" +"1506471936","1506471975","NL" +"1506471976","1506471979","GB" +"1506471980","1506471999","NL" +"1506472000","1506472031","BE" +"1506472032","1506472175","NL" +"1506472176","1506472191","GB" +"1506472192","1506472447","IT" +"1506472448","1506472703","GB" +"1506472704","1506473215","IT" +"1506473216","1506473455","GB" +"1506473456","1506473471","CH" +"1506473472","1506473791","IT" +"1506473792","1506473855","GB" +"1506473856","1506474247","IT" +"1506474248","1506474255","GB" +"1506474256","1506474495","IT" +"1506474496","1506474751","FR" +"1506474752","1506475519","IT" +"1506475520","1506475527","GB" +"1506475528","1506475567","AT" +"1506475568","1506475775","GB" +"1506475776","1506476031","DE" +"1506476032","1506508799","KW" +"1506508800","1506541567","CZ" +"1506541568","1506574335","RU" +"1506574336","1506582527","DE" +"1506582528","1506607103","IE" +"1506607104","1506639871","MK" +"1506639872","1506672639","NL" +"1506672640","1506689023","PL" +"1506689024","1506705407","CH" +"1506705408","1506740223","GB" +"1506740224","1506742271","FI" +"1506742272","1506743167","SE" +"1506743168","1506743183","DE" +"1506743184","1506743199","FR" +"1506743200","1506743215","IE" +"1506743216","1506744319","SE" +"1506744320","1506744383","NL" +"1506744384","1506744391","GB" +"1506744392","1506746367","NL" +"1506746368","1506750463","RU" +"1506750464","1506752511","GB" +"1506752512","1506754559","IE" +"1506754560","1506758655","RU" +"1506758656","1506760703","IT" +"1506760704","1506764799","RU" +"1506764800","1506766847","IT" +"1506766848","1506767679","NO" +"1506767680","1506767871","GE" +"1506767872","1506768383","NO" +"1506768384","1506768895","GE" +"1506768896","1506770943","AT" +"1506770944","1506772143","NL" +"1506772144","1506772145","TR" +"1506772146","1506772323","NL" +"1506772324","1506772324","IR" +"1506772325","1506772991","NL" +"1506772992","1506775039","GB" +"1506775040","1506777087","AT" +"1506777088","1506781695","GB" +"1506781696","1506781951","IE" +"1506781952","1506783231","GB" +"1506783232","1506785279","RU" +"1506785280","1506787327","BE" +"1506787328","1506789375","ME" +"1506789376","1506791423","DE" +"1506791424","1506793471","GB" +"1506793472","1506795519","RU" +"1506795520","1506797567","IE" +"1506797568","1506799615","ES" +"1506799616","1506801663","LV" +"1506801664","1506802831","DE" +"1506802832","1506802839","CH" +"1506802840","1506803135","DE" +"1506803136","1506803151","CH" +"1506803152","1506803711","DE" +"1506803712","1506869247","RU" +"1506869248","1506934783","UA" +"1506934784","1507000319","GR" +"1507000320","1507016191","QA" +"1507016192","1507016447","US" +"1507016448","1507065855","QA" +"1507065856","1507131391","SI" +"1507131392","1507196927","GB" +"1507196928","1507262463","PT" +"1507262464","1507327999","BG" +"1507328000","1507393535","RS" +"1507393536","1507459071","CH" +"1507459072","1507524607","KZ" +"1507524608","1507590143","EE" +"1507590144","1507655679","NL" +"1507655680","1507659119","DE" +"1507659120","1507659135","TR" +"1507659136","1507659775","DE" +"1507659776","1507663871","RU" +"1507663872","1507664127","IT" +"1507664128","1507664383","GR" +"1507664384","1507664767","DE" +"1507664768","1507664895","US" +"1507664896","1507665407","GR" +"1507665408","1507665663","IT" +"1507665664","1507665791","TZ" +"1507665792","1507665919","GR" +"1507665920","1507666431","US" +"1507666432","1507666559","GR" +"1507666560","1507666591","FR" +"1507666592","1507666639","GR" +"1507666640","1507666655","IL" +"1507666656","1507666687","SG" +"1507666688","1507666943","GB" +"1507666944","1507667455","IT" +"1507667456","1507667711","DE" +"1507667712","1507667967","US" +"1507667968","1507672063","RU" +"1507672064","1507676159","EE" +"1507676160","1507680255","IR" +"1507680256","1507684351","NO" +"1507684352","1507688447","LV" +"1507688448","1507696639","IT" +"1507696640","1507700735","DK" +"1507700736","1507704831","NL" +"1507704832","1507708927","RU" +"1507708928","1507713023","CZ" +"1507713024","1507717119","RU" +"1507717120","1507717631","SE" +"1507717632","1507718911","NO" +"1507718912","1507720191","SE" +"1507720192","1507720447","NO" +"1507720448","1507721215","SE" +"1507721216","1507753983","GB" +"1507753984","1507819519","RU" +"1507819520","1507852287","HU" +"1507852288","1508114431","FR" +"1508114432","1508376575","PL" +"1508376576","1508392959","GE" +"1508392960","1508442111","RU" +"1508442112","1508458495","DK" +"1508458496","1508474879","RU" +"1508474880","1508479263","CZ" +"1508479264","1508479295","GB" +"1508479296","1508486463","CZ" +"1508486464","1508486527","DE" +"1508486528","1508491263","CZ" +"1508491264","1508507647","SE" +"1508507648","1508514063","GB" +"1508514064","1508514071","A2" +"1508514072","1508521535","GB" +"1508521536","1508521551","IE" +"1508521552","1508524031","GB" +"1508524032","1508540415","IE" +"1508540416","1508556799","FR" +"1508556800","1508573183","PL" +"1508573184","1508573255","CZ" +"1508573256","1508573259","SK" +"1508573260","1508589567","CZ" +"1508589568","1508605951","IR" +"1508605952","1508622335","RU" +"1508622336","1508638719","EE" +"1508638720","1508639231","SE" +"1508639232","1508640767","DK" +"1508640768","1508641279","SE" +"1508641280","1508641535","DK" +"1508641536","1508642175","SE" +"1508642176","1508642303","DK" +"1508642304","1508642559","SE" +"1508642560","1508642815","DK" +"1508642816","1508646935","SE" +"1508646936","1508646991","DK" +"1508646992","1508646999","SE" +"1508647000","1508647039","DK" +"1508647040","1508647679","SE" +"1508647680","1508647807","DK" +"1508647808","1508648447","SE" +"1508648448","1508648703","DK" +"1508648704","1508650751","SE" +"1508650752","1508650863","DK" +"1508650864","1508650879","SE" +"1508650880","1508651263","DK" +"1508651264","1508652543","SE" +"1508652544","1508654079","DK" +"1508654080","1508655103","SE" +"1508655104","1508671487","FI" +"1508671488","1508687871","CH" +"1508687872","1508704255","UZ" +"1508704256","1508720639","RU" +"1508720640","1508737023","FR" +"1508737024","1508753407","SA" +"1508753408","1508769791","KG" +"1508769792","1508786175","PL" +"1508786176","1508787199","DE" +"1508787200","1508787455","ES" +"1508787456","1508788031","DE" +"1508788032","1508788063","BE" +"1508788064","1508802559","DE" +"1508802560","1508804783","GB" +"1508804784","1508804791","DE" +"1508804792","1508809263","GB" +"1508809264","1508809271","FR" +"1508809272","1508818943","GB" +"1508818944","1508835327","RO" +"1508835328","1508851711","CZ" +"1508851712","1508868095","PL" +"1508868096","1508884479","RU" +"1508884480","1508900863","DK" +"1508900864","1509163007","GB" +"1509163008","1509425151","DE" +"1509425152","1509429247","NO" +"1509429248","1509433343","GB" +"1509433344","1509437439","CH" +"1509437440","1509443583","GB" +"1509443584","1509445631","FR" +"1509445632","1509449727","LV" +"1509449728","1509453823","ES" +"1509453824","1509457919","RU" +"1509457920","1509462015","NL" +"1509462016","1509465599","LI" +"1509465600","1509465983","CH" +"1509465984","1509466055","LI" +"1509466056","1509466103","CH" +"1509466104","1509466111","LI" +"1509466112","1509466879","NL" +"1509466880","1509466911","FR" +"1509466912","1509467055","NL" +"1509467056","1509467103","SE" +"1509467104","1509467399","NL" +"1509467400","1509467407","PL" +"1509467408","1509467423","NL" +"1509467424","1509467455","PL" +"1509467456","1509467487","NL" +"1509467488","1509467519","PL" +"1509467520","1509467583","BE" +"1509467584","1509467839","NL" +"1509467840","1509467871","PL" +"1509467872","1509469055","NL" +"1509469056","1509469183","PL" +"1509469184","1509469887","NL" +"1509469888","1509469919","MY" +"1509469920","1509470207","NL" +"1509470208","1509478399","RU" +"1509478400","1509482495","FR" +"1509482496","1509486591","RU" +"1509486592","1509489407","CZ" +"1509489408","1509489535","DE" +"1509489536","1509490687","CZ" +"1509490688","1509494783","DK" +"1509494784","1509498879","RU" +"1509498880","1509499391","CH" +"1509499392","1509500671","DE" +"1509500672","1509500927","CH" +"1509500928","1509501151","DE" +"1509501152","1509501159","GB" +"1509501160","1509502975","CH" +"1509502976","1509507071","RU" +"1509507072","1509511167","GB" +"1509511168","1509515263","LT" +"1509515264","1509519359","HR" +"1509519360","1509535743","RU" +"1509535744","1509537791","IT" +"1509537792","1509539839","HR" +"1509539840","1509543935","AM" +"1509543936","1509543975","LB" +"1509543976","1509543983","DE" +"1509543984","1509548031","LB" +"1509548032","1509564415","RU" +"1509564416","1509568511","GB" +"1509568512","1509572607","FI" +"1509572608","1509576703","NL" +"1509576704","1509580799","KZ" +"1509580800","1509584895","CZ" +"1509584896","1509588479","NO" +"1509588480","1509588607","GB" +"1509588608","1509588991","NO" +"1509588992","1509593087","DE" +"1509593088","1509601279","RU" +"1509601280","1509605375","NL" +"1509605376","1509609471","PL" +"1509609472","1509617663","RU" +"1509617664","1509621759","CZ" +"1509621760","1509624319","NL" +"1509624320","1509624831","US" +"1509624832","1509625855","NL" +"1509625856","1509629951","UA" +"1509629952","1509634047","HU" +"1509634048","1509638143","FR" +"1509638144","1509642239","RU" +"1509642240","1509644351","KW" +"1509644352","1509644383","GB" +"1509644384","1509646335","KW" +"1509646336","1509650431","RU" +"1509650432","1509654527","GB" +"1509654528","1509658623","DE" +"1509658624","1509666815","RU" +"1509666816","1509670911","IT" +"1509670912","1509675007","GB" +"1509675008","1509677823","NO" +"1509677824","1509679103","GB" +"1509679104","1509683199","ES" +"1509683200","1509687295","CH" +"1509687296","1509703679","UA" +"1509703680","1509720063","RU" +"1509720064","1509723135","US" +"1509723136","1509724159","TR" +"1509724160","1509724927","US" +"1509724928","1509736447","TR" +"1509736448","1509752831","BG" +"1509752832","1509769215","RU" +"1509769216","1509785599","SE" +"1509785600","1509801983","BG" +"1509801984","1509818367","RU" +"1509818368","1509851135","NO" +"1509851136","1509867519","LV" +"1509867520","1509883903","RU" +"1509883904","1509900287","NL" +"1509900288","1509916671","RU" +"1509916672","1509933055","GB" +"1509933056","1509949439","US" +"1509949440","1515192639","FR" +"1515192640","1515192655","EU" +"1515192656","1515241759","FR" +"1515241760","1515241791","GB" +"1515241792","1515467007","FR" +"1515467008","1515467263","ES" +"1515467264","1515467519","FR" +"1515467520","1515468031","US" +"1515468032","1515468287","ES" +"1515468288","1515468415","NL" +"1515468416","1515468543","FR" +"1515468544","1515468671","DE" +"1515468672","1515486975","FR" +"1515486976","1515487231","CD" +"1515487232","1515487495","HK" +"1515487496","1515487739","FR" +"1515487740","1515487775","HK" +"1515487776","1515487999","FR" +"1515488000","1515488255","HK" +"1515488256","1515519743","FR" +"1515519744","1515519999","ES" +"1515520000","1518338047","FR" +"1518338048","1518370815","DE" +"1518370816","1518403583","NL" +"1518403584","1518452735","SE" +"1518452736","1518460927","AT" +"1518460928","1518479359","SE" +"1518479360","1518481407","EE" +"1518481408","1518501887","SE" +"1518501888","1518503935","EE" +"1518503936","1518508799","LT" +"1518508800","1518509055","SE" +"1518509056","1518510079","LT" +"1518510080","1518516479","LV" +"1518516480","1518517247","SE" +"1518517248","1518518271","LV" +"1518518272","1518538495","SE" +"1518538496","1518538751","LT" +"1518538752","1518542847","SE" +"1518542848","1518551039","LT" +"1518551040","1518565375","NL" +"1518565376","1518633215","SE" +"1518633216","1518633471","NL" +"1518633472","1518635007","SE" +"1518635008","1518637055","NL" +"1518637056","1518665727","SE" +"1518665728","1518727167","RU" +"1518727168","1518731263","SE" +"1518731264","1518927871","DE" +"1518927872","1518944255","RU" +"1518944256","1518960639","SE" +"1518960640","1518961663","LT" +"1518961664","1518962175","EE" +"1518962176","1518962687","LV" +"1518962688","1518964735","NO" +"1518964736","1518966783","HR" +"1518966784","1518967807","SE" +"1518967808","1518977023","HR" +"1518977024","1518993407","SE" +"1518993408","1519190015","RU" +"1519190016","1519321087","SE" +"1519321088","1519386623","RU" +"1519386624","1519452159","SE" +"1519452160","1519517695","NL" +"1519517696","1519583231","AT" +"1519583232","1519648767","IT" +"1519648768","1519714303","SA" +"1519714304","1519779839","NO" +"1519779840","1519910911","RU" +"1519910912","1519927295","GB" +"1519927296","1519927311","FR" +"1519927312","1519927319","BE" +"1519927320","1519927327","FR" +"1519927328","1519927335","ES" +"1519927336","1519927343","CH" +"1519927344","1519927351","AT" +"1519927352","1519927375","NL" +"1519927376","1519927383","CH" +"1519927384","1519927399","NL" +"1519927400","1519927407","FR" +"1519927408","1519927415","AT" +"1519927416","1519927423","BE" +"1519927424","1519927431","LU" +"1519927432","1519927439","NL" +"1519927440","1519927447","CH" +"1519927448","1519927463","FR" +"1519927464","1519927471","IT" +"1519927472","1519927479","NL" +"1519927480","1519927503","FR" +"1519927504","1519927511","NL" +"1519927512","1519927527","ES" +"1519927528","1519927535","NL" +"1519927536","1519927543","FR" +"1519927544","1519927551","IE" +"1519927552","1519927559","SE" +"1519927560","1519927567","IT" +"1519927568","1519927575","GB" +"1519927576","1519927583","FR" +"1519927584","1519927591","AT" +"1519927592","1519927607","BE" +"1519927608","1519927615","FR" +"1519927616","1519927631","NL" +"1519927632","1519927639","CH" +"1519927640","1519927647","BE" +"1519927648","1519927655","FR" +"1519927656","1519927663","NL" +"1519927664","1519927671","IT" +"1519927672","1519927679","FI" +"1519927680","1519927687","IE" +"1519927688","1519927695","IT" +"1519927696","1519927719","NL" +"1519927720","1519927727","ES" +"1519927728","1519927735","FR" +"1519927736","1519927743","NL" +"1519927744","1519927751","ES" +"1519927752","1519927759","IT" +"1519927760","1519927767","ES" +"1519927768","1519927775","NL" +"1519927776","1519927783","FR" +"1519927784","1519927823","GB" +"1519927824","1519927831","BE" +"1519927832","1519927855","GB" +"1519927856","1519927863","DK" +"1519927864","1519927871","FI" +"1519927872","1519927879","NL" +"1519927880","1519927895","GB" +"1519927896","1519927903","NL" +"1519927904","1519928119","GB" +"1519928120","1519928143","NO" +"1519928144","1519928151","NL" +"1519928152","1519928183","DK" +"1519928184","1519928191","GB" +"1519928192","1519928199","SE" +"1519928200","1519928247","GB" +"1519928248","1519928255","DK" +"1519928256","1519929279","GB" +"1519929280","1519929287","NL" +"1519929288","1519929343","GB" +"1519929344","1519929471","NL" +"1519929472","1519929503","FI" +"1519929504","1519929567","NL" +"1519929568","1519929599","FI" +"1519929600","1519929759","NL" +"1519929760","1519929791","CZ" +"1519929792","1519929792","GB" +"1519929793","1519929823","SE" +"1519929824","1519929855","DK" +"1519929856","1519929951","SE" +"1519929952","1519930111","BE" +"1519930112","1519930207","NL" +"1519930208","1519930239","BE" +"1519930240","1519930271","NL" +"1519930272","1519930335","DK" +"1519930336","1519930367","SE" +"1519930368","1519930399","DK" +"1519930400","1519930527","NL" +"1519930528","1519930559","NO" +"1519930560","1519930591","SE" +"1519930592","1519930655","NO" +"1519930656","1519930751","NL" +"1519930752","1519930783","BE" +"1519930784","1519930911","NL" +"1519930912","1519930943","CZ" +"1519930944","1519930975","BE" +"1519930976","1519931007","NL" +"1519931008","1519931039","BE" +"1519931040","1519931071","DK" +"1519931072","1519931103","NO" +"1519931104","1519931135","SE" +"1519931136","1519931231","NL" +"1519931232","1519931263","NO" +"1519931264","1519931359","GB" +"1519931360","1519931375","BE" +"1519931376","1519931391","GB" +"1519931392","1519934463","NL" +"1519934464","1519934975","GB" +"1519934976","1519935487","NL" +"1519935488","1519935615","FR" +"1519935616","1519935743","NL" +"1519935744","1519935935","FI" +"1519935936","1519936191","BE" +"1519936192","1519936255","DK" +"1519936256","1519936383","NL" +"1519936384","1519936447","BE" +"1519936448","1519936511","NO" +"1519936512","1519936575","SK" +"1519936576","1519936767","DK" +"1519936768","1519936895","SE" +"1519936896","1519937023","BE" +"1519937024","1519937279","DK" +"1519937280","1519937343","NL" +"1519937344","1519937407","SE" +"1519937408","1519937471","NO" +"1519937472","1519937535","GB" +"1519937536","1519937727","NL" +"1519937728","1519938559","GB" +"1519938560","1519939583","NL" +"1519939584","1519939615","NO" +"1519939616","1519939647","NL" +"1519939648","1519939679","SE" +"1519939680","1519939711","SK" +"1519939712","1519939743","NL" +"1519939744","1519939807","BE" +"1519939808","1519939839","NL" +"1519939840","1519940095","GB" +"1519940096","1519940159","NL" +"1519940160","1519940191","FI" +"1519940192","1519940223","SE" +"1519940224","1519943679","GB" +"1519943680","1519976447","AT" +"1519976448","1520009215","DE" +"1520009216","1520041983","SY" +"1520041984","1520074751","RU" +"1520074752","1520107519","BG" +"1520107520","1520138167","GB" +"1520138168","1520138175","IE" +"1520138176","1520138611","GB" +"1520138612","1520138615","IE" +"1520138616","1520139311","GB" +"1520139312","1520139319","IE" +"1520139320","1520139399","GB" +"1520139400","1520139407","IE" +"1520139408","1520140287","GB" +"1520140288","1520173055","RU" +"1520173056","1520205823","PL" +"1520205824","1520230399","RU" +"1520230400","1520230911","NL" +"1520230912","1520231935","RU" +"1520231936","1520232447","NL" +"1520232448","1520232959","RU" +"1520232960","1520233471","NL" +"1520233472","1520271359","RU" +"1520271360","1520304127","SI" +"1520304128","1520435199","TR" +"1520435200","1521483775","ES" +"1521483776","1522008063","CZ" +"1522008064","1522139135","DK" +"1522139136","1522270207","DE" +"1522270208","1522401279","RU" +"1522401280","1522532351","EE" +"1522532352","1524629503","GB" +"1524629504","1525678079","SE" +"1525678080","1526726655","GB" +"1526726656","1531183103","DE" +"1531183104","1531445247","FR" +"1531445248","1531707391","AE" +"1531707392","1531969535","RU" +"1531969536","1532100607","IT" +"1532100608","1532199935","HU" +"1532199936","1532200959","RS" +"1532200960","1532231679","HU" +"1532231680","1532362751","GB" +"1532362752","1532493823","BE" +"1532493824","1532559359","FR" +"1532559360","1532624895","DE" +"1532624896","1532626943","ES" +"1532626944","1532631039","UA" +"1532631040","1532633087","SE" +"1532633088","1532635135","RU" +"1532635136","1532637183","NO" +"1532637184","1532639231","FI" +"1532639232","1532641279","PL" +"1532641280","1532643327","NO" +"1532643328","1532645375","PL" +"1532645376","1532647423","RU" +"1532647424","1532649471","PL" +"1532649472","1532651519","FR" +"1532651520","1532653567","NO" +"1532653568","1532655615","PL" +"1532655616","1532657663","RO" +"1532657664","1532661759","IL" +"1532661760","1532665855","DE" +"1532665856","1532674047","PL" +"1532674048","1532682239","UA" +"1532682240","1532690431","LV" +"1532690432","1532755967","FR" +"1532755968","1532821503","BG" +"1532821504","1532887039","TR" +"1532887040","1532952575","PL" +"1532952576","1533018111","SE" +"1533018112","1533149183","DE" +"1533149184","1533280255","IR" +"1533280256","1533411327","DK" +"1533411328","1533413375","GB" +"1533413376","1533415423","DE" +"1533415424","1533417471","SA" +"1533417472","1533419519","NO" +"1533419520","1533421567","KW" +"1533421568","1533423615","NL" +"1533423616","1533425663","IT" +"1533425664","1533429759","GB" +"1533429760","1533431807","RU" +"1533431808","1533433855","IE" +"1533433856","1533435903","DK" +"1533435904","1533437951","CZ" +"1533437952","1533438975","FI" +"1533438976","1533439999","A2" +"1533440000","1533441519","PL" +"1533441520","1533441535","CH" +"1533441536","1533442047","PL" +"1533442048","1533444095","AE" +"1533444096","1533446143","IT" +"1533446144","1533448191","DE" +"1533448192","1533450239","KW" +"1533450240","1533452287","RU" +"1533452288","1533454335","TR" +"1533454336","1533456383","RS" +"1533456384","1533458431","UA" +"1533458432","1533460479","GB" +"1533460480","1533462527","NL" +"1533462528","1533464575","RU" +"1533464576","1533466623","NL" +"1533466624","1533468671","RU" +"1533468672","1533470719","RS" +"1533470720","1533472767","KW" +"1533472768","1533474815","ES" +"1533474816","1533476863","FR" +"1533476864","1533478911","IE" +"1533478912","1533480959","RS" +"1533480960","1533481727","NL" +"1533481728","1533482495","GB" +"1533482496","1533482751","NL" +"1533482752","1533483007","GB" +"1533483008","1533485055","AM" +"1533485056","1533485567","GB" +"1533485568","1533485823","DE" +"1533485824","1533486335","SE" +"1533486336","1533486591","NO" +"1533486592","1533486847","DK" +"1533486848","1533487103","FI" +"1533487104","1533487359","FR" +"1533487360","1533487615","US" +"1533487616","1533487871","JP" +"1533487872","1533488639","FR" +"1533488640","1533488895","US" +"1533488896","1533489151","JP" +"1533489152","1533491199","ES" +"1533491200","1533493247","AM" +"1533493248","1533499391","RU" +"1533499392","1533501439","MT" +"1533501440","1533503487","LT" +"1533503488","1533505535","RU" +"1533505536","1533507583","DE" +"1533507584","1533509631","UA" +"1533509632","1533511679","GB" +"1533511680","1533511935","IT" +"1533511936","1533513023","FR" +"1533513024","1533513087","ES" +"1533513088","1533513215","FR" +"1533513216","1533513471","GB" +"1533513472","1533513727","DE" +"1533513728","1533515775","KW" +"1533515776","1533517823","RU" +"1533517824","1533519871","CZ" +"1533519872","1533526015","GB" +"1533526016","1533532159","RU" +"1533532160","1533534207","GB" +"1533534208","1533536255","RU" +"1533536256","1533538303","FR" +"1533538304","1533540351","DE" +"1533540352","1533542399","AT" +"1533542400","1533607935","HU" +"1533607936","1533640703","LV" +"1533640704","1533657087","RU" +"1533665280","1533667327","GB" +"1533667328","1533669375","RU" +"1533669376","1533671423","DE" +"1533671424","1533673471","FI" +"1533673472","1533677567","DE" +"1533677568","1533679615","ES" +"1533679616","1533681663","PL" +"1533681664","1533689855","IQ" +"1533689856","1533698047","IR" +"1533698048","1533702143","JO" +"1533702144","1533704191","RU" +"1533704192","1533722623","DE" +"1533722624","1533724671","SE" +"1533724672","1533726719","RU" +"1533726720","1533728767","CY" +"1533728768","1533730815","FR" +"1533730816","1533732863","NL" +"1533732864","1533734911","RU" +"1533734912","1533739007","CZ" +"1533739008","1533804543","RU" +"1533804544","1533837311","DE" +"1533837312","1533845503","IR" +"1533845504","1533847551","GB" +"1533847552","1533849599","RU" +"1533849600","1533851647","EE" +"1533851648","1533853695","CH" +"1533853696","1533870079","IQ" +"1533870080","1533874175","GB" +"1533874176","1533878271","DE" +"1533878272","1533880319","CZ" +"1533880320","1533882367","GB" +"1533882368","1533886463","IT" +"1533886464","1533894655","RU" +"1533894656","1533896703","ES" +"1533896704","1533900799","PT" +"1533900800","1533902847","FR" +"1533902848","1533911039","RU" +"1533911040","1533913087","ES" +"1533913088","1533915135","IT" +"1533915136","1533919231","FR" +"1533919232","1533921279","IT" +"1533921280","1533923327","RU" +"1533923328","1533925375","TR" +"1533925376","1533927423","AF" +"1533927424","1533929471","RU" +"1533929472","1533933567","GB" +"1533933568","1533935615","GI" +"1533935616","1534066687","GB" +"1534066688","1534129151","AT" +"1534129152","1534129407","A2" +"1534129408","1534328831","AT" +"1534328832","1534459903","ES" +"1534459904","1534482091","AT" +"1534482092","1534482095","GB" +"1534482096","1534590975","AT" +"1534590976","1534656511","HU" +"1534656512","1534711807","FR" +"1534711808","1534712831","BE" +"1534712832","1534713855","FR" +"1534713856","1534713887","PL" +"1534713888","1534713919","FR" +"1534713920","1534713927","IT" +"1534713928","1534713931","GB" +"1534713932","1534713935","FI" +"1534713936","1534713939","DE" +"1534713940","1534713943","FR" +"1534713944","1534713947","DE" +"1534713948","1534713951","PL" +"1534713952","1534713955","DE" +"1534713956","1534713959","BE" +"1534713960","1534713963","CH" +"1534713964","1534713983","FR" +"1534713984","1534713999","PL" +"1534714000","1534714015","FR" +"1534714016","1534714031","DE" +"1534714032","1534714047","BE" +"1534714048","1534714051","FR" +"1534714052","1534714055","IT" +"1534714056","1534714059","DE" +"1534714060","1534714063","FR" +"1534714064","1534714079","ES" +"1534714080","1534714095","FR" +"1534714096","1534714111","BE" +"1534714112","1534714115","ES" +"1534714116","1534714119","DE" +"1534714120","1534714123","FI" +"1534714124","1534714127","ES" +"1534714128","1534714143","BE" +"1534714144","1534714159","GB" +"1534714160","1534714255","FR" +"1534714256","1534714259","DE" +"1534714260","1534714271","PL" +"1534714272","1534714287","IT" +"1534714288","1534714303","ES" +"1534714304","1534714307","GB" +"1534714308","1534714311","ES" +"1534714312","1534714315","PL" +"1534714316","1534714319","FR" +"1534714320","1534714327","DE" +"1534714328","1534714331","FR" +"1534714332","1534714335","PL" +"1534714336","1534714351","FR" +"1534714352","1534714383","GB" +"1534714384","1534714399","FR" +"1534714400","1534714403","GB" +"1534714404","1534714407","PL" +"1534714408","1534714415","DE" +"1534714416","1534714431","GB" +"1534714432","1534714447","PL" +"1534714448","1534714463","FR" +"1534714464","1534714495","GB" +"1534714496","1534714511","FR" +"1534714512","1534714527","PL" +"1534714528","1534714531","FR" +"1534714532","1534714535","PL" +"1534714536","1534714539","GB" +"1534714540","1534714543","PL" +"1534714544","1534714547","FR" +"1534714548","1534714551","NL" +"1534714552","1534714559","GB" +"1534714560","1534714575","NL" +"1534714576","1534714591","GB" +"1534714592","1534714691","FR" +"1534714692","1534714695","GB" +"1534714696","1534714703","FR" +"1534714704","1534714719","CH" +"1534714720","1534714751","BE" +"1534714752","1534714767","DE" +"1534714768","1534714783","FR" +"1534714784","1534714799","PL" +"1534714800","1534714815","FR" +"1534714816","1534714819","BE" +"1534714820","1534714831","FR" +"1534714832","1534714839","DE" +"1534714840","1534714847","FR" +"1534714848","1534714855","GB" +"1534714856","1534714863","CH" +"1534714864","1534714871","FR" +"1534714872","1534714875","ES" +"1534714876","1534714879","DE" +"1534714880","1534714895","PL" +"1534714896","1534714911","FR" +"1534714912","1534714927","DE" +"1534714928","1534714931","BE" +"1534714932","1534714935","DE" +"1534714936","1534714939","GB" +"1534714940","1534714975","DE" +"1534714976","1534715039","FR" +"1534715040","1534715055","GB" +"1534715056","1534715071","PL" +"1534715072","1534715103","FR" +"1534715104","1534715119","BE" +"1534715120","1534715135","FR" +"1534715136","1534715143","PL" +"1534715144","1534715167","FR" +"1534715168","1534715183","NL" +"1534715184","1534715199","FR" +"1534715200","1534715203","IT" +"1534715204","1534715207","FR" +"1534715208","1534715211","GB" +"1534715212","1534715215","FR" +"1534715216","1534715231","BE" +"1534715232","1534715263","FR" +"1534715264","1534715279","ES" +"1534715280","1534715283","PL" +"1534715284","1534715287","FR" +"1534715288","1534715295","PL" +"1534715296","1534715299","ES" +"1534715300","1534715307","FR" +"1534715308","1534715311","DE" +"1534715312","1534715315","PL" +"1534715316","1534715319","ES" +"1534715320","1534715327","PL" +"1534715328","1534715359","FR" +"1534715360","1534715367","PL" +"1534715368","1534715371","FR" +"1534715372","1534715375","CH" +"1534715376","1534715391","ES" +"1534715392","1534715399","PL" +"1534715400","1534715407","FR" +"1534715408","1534715411","GB" +"1534715412","1534715415","FI" +"1534715416","1534715419","DE" +"1534715420","1534715423","IT" +"1534715424","1534715439","PL" +"1534715440","1534715447","ES" +"1534715448","1534715451","FR" +"1534715452","1534715487","PL" +"1534715488","1534715551","FR" +"1534715552","1534715583","ES" +"1534715584","1534715599","GB" +"1534715600","1534715603","PL" +"1534715604","1534715607","GB" +"1534715608","1534715611","CH" +"1534715612","1534715615","FI" +"1534715616","1534715639","FR" +"1534715640","1534715643","PL" +"1534715644","1534715647","DE" +"1534715648","1534715663","PL" +"1534715664","1534715667","FR" +"1534715668","1534715675","PL" +"1534715676","1534715679","GB" +"1534715680","1534715711","FR" +"1534715712","1534715727","PT" +"1534715728","1534715735","GB" +"1534715736","1534715759","PL" +"1534715760","1534715775","ES" +"1534715776","1534715783","PL" +"1534715784","1534715791","BE" +"1534715792","1534715807","CZ" +"1534715808","1534715879","FR" +"1534715880","1534715883","PT" +"1534715884","1534715887","PL" +"1534715888","1534715935","FR" +"1534715936","1534715951","PL" +"1534715952","1534715983","FR" +"1534715984","1534715987","PL" +"1534715988","1534715991","DE" +"1534715992","1534715995","PL" +"1534715996","1534715999","FR" +"1534716000","1534716007","NL" +"1534716008","1534716047","FR" +"1534716048","1534716063","GB" +"1534716064","1534716127","FR" +"1534716128","1534716143","ES" +"1534716144","1534716159","PL" +"1534716160","1534716163","IT" +"1534716164","1534716167","FI" +"1534716168","1534716175","IE" +"1534716176","1534716191","FR" +"1534716192","1534716223","ES" +"1534716224","1534716239","FR" +"1534716240","1534716255","GB" +"1534716256","1534716303","FR" +"1534716304","1534716311","PL" +"1534716312","1534716319","FR" +"1534716320","1534716351","PL" +"1534716352","1534716355","FR" +"1534716356","1534716359","PL" +"1534716360","1534716363","FR" +"1534716364","1534716367","GB" +"1534716368","1534716375","BE" +"1534716376","1534716379","CH" +"1534716380","1534716383","PL" +"1534716384","1534716391","FR" +"1534716392","1534716395","ES" +"1534716396","1534716399","GB" +"1534716400","1534716403","PL" +"1534716404","1534716407","NL" +"1534716408","1534716415","FR" +"1534716416","1534716423","NL" +"1534716424","1534716447","PL" +"1534716448","1534716479","FR" +"1534716480","1534716495","ES" +"1534716496","1534716575","FR" +"1534716576","1534716591","PL" +"1534716592","1534716639","FR" +"1534716640","1534716647","BE" +"1534716648","1534716655","FR" +"1534716656","1534716663","IE" +"1534716664","1534716671","FR" +"1534716672","1534716687","PL" +"1534716688","1534716703","FR" +"1534716704","1534716735","ES" +"1534716736","1534716751","FR" +"1534716752","1534716759","PL" +"1534716760","1534716763","DE" +"1534716764","1534716767","ES" +"1534716768","1534716775","FR" +"1534716776","1534716779","ES" +"1534716780","1534716787","PL" +"1534716788","1534716799","FR" +"1534716800","1534716803","DE" +"1534716804","1534716807","PL" +"1534716808","1534716811","NL" +"1534716812","1534716815","DE" +"1534716816","1534716823","FR" +"1534716824","1534716831","GB" +"1534716832","1534716879","FR" +"1534716880","1534716895","BE" +"1534716896","1534716903","ES" +"1534716904","1534716911","DE" +"1534716912","1534716927","FR" +"1534716928","1534716943","DE" +"1534716944","1534716959","FR" +"1534716960","1534716963","ES" +"1534716964","1534716967","FR" +"1534716968","1534716975","GB" +"1534716976","1534716991","FR" +"1534716992","1534717007","DE" +"1534717008","1534717011","PL" +"1534717012","1534717019","FR" +"1534717020","1534717023","DE" +"1534717024","1534717031","IE" +"1534717032","1534717035","DE" +"1534717036","1534717039","GB" +"1534717040","1534717047","PL" +"1534717048","1534717055","FR" +"1534717056","1534717071","GB" +"1534717072","1534717103","FR" +"1534717104","1534717119","PL" +"1534717120","1534717135","IT" +"1534717136","1534717139","CH" +"1534717140","1534717143","CZ" +"1534717144","1534717147","FR" +"1534717148","1534717151","IT" +"1534717152","1534717215","FR" +"1534717216","1534717219","ES" +"1534717220","1534717247","FR" +"1534717248","1534717251","CZ" +"1534717252","1534717255","NL" +"1534717256","1534717263","FR" +"1534717264","1534717267","PL" +"1534717268","1534717311","FR" +"1534717312","1534717315","PL" +"1534717316","1534717319","IE" +"1534717320","1534717323","GB" +"1534717324","1534717343","FR" +"1534717344","1534717359","GB" +"1534717360","1534717375","PL" +"1534717376","1534717411","FR" +"1534717412","1534717415","CH" +"1534717416","1534717419","CZ" +"1534717420","1534717427","PL" +"1534717428","1534717431","FR" +"1534717432","1534717435","GB" +"1534717436","1534717439","NL" +"1534717440","1534717503","FR" +"1534717504","1534717519","BE" +"1534717520","1534717535","DE" +"1534717536","1534717551","PL" +"1534717552","1534717567","CZ" +"1534717568","1534717583","IE" +"1534717584","1534717587","CZ" +"1534717588","1534717591","NL" +"1534717592","1534717599","IT" +"1534717600","1534717647","FR" +"1534717648","1534717659","PL" +"1534717660","1534717663","FR" +"1534717664","1534717679","GB" +"1534717680","1534717695","ES" +"1534717696","1534717711","IE" +"1534717712","1534717715","DE" +"1534717716","1534717727","FR" +"1534717728","1534717731","GB" +"1534717732","1534717735","FR" +"1534717736","1534717739","BE" +"1534717740","1534717743","GB" +"1534717744","1534717751","FR" +"1534717752","1534717759","BE" +"1534717760","1534717763","PL" +"1534717764","1534717767","FR" +"1534717768","1534717771","IT" +"1534717772","1534717783","FR" +"1534717784","1534717787","GB" +"1534717788","1534717791","DE" +"1534717792","1534717823","FR" +"1534717824","1534717855","BE" +"1534717856","1534717871","NL" +"1534717872","1534717903","FR" +"1534717904","1534717907","IT" +"1534717908","1534717911","GB" +"1534717912","1534717915","FR" +"1534717916","1534717919","DE" +"1534717920","1534717923","FR" +"1534717924","1534717927","ES" +"1534717928","1534717931","DE" +"1534717932","1534717951","FR" +"1534717952","1534717955","DE" +"1534717956","1534717959","BE" +"1534717960","1534717963","PT" +"1534717964","1534717967","CH" +"1534717968","1534717983","IT" +"1534717984","1534717987","PL" +"1534717988","1534717991","DE" +"1534717992","1534717995","NL" +"1534717996","1534717999","GB" +"1534718000","1534718007","ES" +"1534718008","1534718011","PL" +"1534718012","1534718015","FR" +"1534718016","1534718031","BE" +"1534718032","1534718063","FR" +"1534718064","1534718079","IT" +"1534718080","1534718087","ES" +"1534718088","1534718091","DE" +"1534718092","1534718095","ES" +"1534718096","1534718111","PL" +"1534718112","1534718127","GB" +"1534718128","1534718143","ES" +"1534718144","1534718159","FR" +"1534718160","1534718175","DE" +"1534718176","1534718207","PL" +"1534718208","1534718271","DE" +"1534718272","1534718335","FR" +"1534718336","1534718351","CH" +"1534718352","1534718359","GB" +"1534718360","1534718363","ES" +"1534718364","1534718399","FR" +"1534718400","1534718415","DE" +"1534718416","1534718419","ES" +"1534718420","1534718423","GB" +"1534718424","1534718431","ES" +"1534718432","1534718435","GB" +"1534718436","1534718439","DE" +"1534718440","1534718447","ES" +"1534718448","1534718451","FR" +"1534718452","1534718455","DE" +"1534718456","1534718463","IT" +"1534718464","1534718467","DE" +"1534718468","1534718471","PT" +"1534718472","1534718487","PL" +"1534718488","1534718495","DE" +"1534718496","1534718531","FR" +"1534718532","1534718535","PL" +"1534718536","1534718539","DE" +"1534718540","1534718543","ES" +"1534718544","1534718559","FR" +"1534718560","1534718575","BE" +"1534718576","1534718591","GB" +"1534718592","1534718607","NL" +"1534718608","1534718623","FR" +"1534718624","1534718631","PL" +"1534718632","1534718687","FR" +"1534718688","1534718703","PL" +"1534718704","1534718711","FR" +"1534718712","1534718719","ES" +"1534718720","1534718735","GB" +"1534718736","1534718739","NL" +"1534718740","1534718759","FR" +"1534718760","1534718767","PL" +"1534718768","1534718783","FR" +"1534718784","1534718815","ES" +"1534718816","1534718831","GB" +"1534718832","1534718847","FR" +"1534718848","1534718911","BE" +"1534718912","1534718927","IT" +"1534718928","1534718959","FR" +"1534718960","1534718975","ES" +"1534718976","1534719039","FR" +"1534719040","1534719055","BE" +"1534719056","1534719071","FR" +"1534719072","1534719075","FI" +"1534719076","1534719079","ES" +"1534719080","1534719083","IT" +"1534719084","1534719087","CH" +"1534719088","1534719103","PL" +"1534719104","1534719167","BE" +"1534719168","1534719199","FR" +"1534719200","1534719215","PL" +"1534719216","1534719279","FR" +"1534719280","1534719295","GB" +"1534719296","1534719311","DE" +"1534719312","1534719335","FR" +"1534719336","1534719343","PL" +"1534719344","1534719359","FR" +"1534719360","1534719375","PL" +"1534719376","1534719391","DE" +"1534719392","1534719395","CH" +"1534719396","1534719399","PT" +"1534719400","1534719403","IT" +"1534719404","1534719439","FR" +"1534719440","1534719459","PL" +"1534719460","1534719463","FR" +"1534719464","1534719471","PL" +"1534719472","1534719487","IE" +"1534719488","1534719503","NL" +"1534719504","1534719507","DE" +"1534719508","1534719511","GB" +"1534719512","1534719515","PL" +"1534719516","1534719519","DE" +"1534719520","1534719535","ES" +"1534719536","1534719539","NL" +"1534719540","1534719543","IE" +"1534719544","1534719551","PL" +"1534719552","1534719631","FR" +"1534719632","1534719639","ES" +"1534719640","1534719647","FR" +"1534719648","1534719655","IE" +"1534719656","1534719663","FR" +"1534719664","1534719679","IE" +"1534719680","1534719695","GB" +"1534719696","1534719699","IT" +"1534719700","1534719703","DE" +"1534719704","1534719711","GB" +"1534719712","1534719747","FR" +"1534719748","1534719751","PL" +"1534719752","1534719759","FR" +"1534719760","1534719775","IT" +"1534719776","1534719783","PL" +"1534719784","1534719787","FR" +"1534719788","1534719791","PL" +"1534719792","1534719799","FR" +"1534719800","1534719803","ES" +"1534719804","1534719807","GB" +"1534719808","1534719811","PL" +"1534719812","1534719815","FR" +"1534719816","1534719819","CH" +"1534719820","1534719823","CZ" +"1534719824","1534719827","PT" +"1534719828","1534719831","FR" +"1534719832","1534719839","PL" +"1534719840","1534719951","FR" +"1534719952","1534719967","DE" +"1534719968","1534719983","PL" +"1534719984","1534720003","FR" +"1534720004","1534720007","ES" +"1534720008","1534720015","FR" +"1534720016","1534720023","ES" +"1534720024","1534720027","PL" +"1534720028","1534720063","ES" +"1534720064","1534720079","FR" +"1534720080","1534720095","GB" +"1534720096","1534720111","FR" +"1534720112","1534720127","ES" +"1534720128","1534720211","FR" +"1534720212","1534720215","PL" +"1534720216","1534720219","FR" +"1534720220","1534720223","GB" +"1534720224","1534720239","DE" +"1534720240","1534720255","BE" +"1534720256","1534720271","FR" +"1534720272","1534720287","PL" +"1534720288","1534720291","IT" +"1534720292","1534720295","PL" +"1534720296","1534720299","GB" +"1534720300","1534720351","FR" +"1534720352","1534720367","ES" +"1534720368","1534720383","PL" +"1534720384","1534720391","PT" +"1534720392","1534720395","DE" +"1534720396","1534720399","PL" +"1534720400","1534720403","LT" +"1534720404","1534720411","GB" +"1534720412","1534720415","IE" +"1534720416","1534720419","ES" +"1534720420","1534720423","DE" +"1534720424","1534720431","ES" +"1534720432","1534720435","DE" +"1534720436","1534720439","FR" +"1534720440","1534720443","GB" +"1534720444","1534720447","NL" +"1534720448","1534720451","FR" +"1534720452","1534720455","NL" +"1534720456","1534720463","IE" +"1534720464","1534720467","FR" +"1534720468","1534720471","GB" +"1534720472","1534720479","DE" +"1534720480","1534720495","IE" +"1534720496","1534720511","PL" +"1534720512","1534720535","FR" +"1534720536","1534720539","PL" +"1534720540","1534720543","FI" +"1534720544","1534720559","FR" +"1534720560","1534720583","IT" +"1534720584","1534720591","BE" +"1534720592","1534720611","FR" +"1534720612","1534720615","BE" +"1534720616","1534720619","DE" +"1534720620","1534720623","PT" +"1534720624","1534720639","FR" +"1534720640","1534720643","PL" +"1534720644","1534720647","NL" +"1534720648","1534720655","IE" +"1534720656","1534720671","ES" +"1534720672","1534720739","FR" +"1534720740","1534720743","PL" +"1534720744","1534720747","IE" +"1534720748","1534720767","FR" +"1534720768","1534720783","ES" +"1534720784","1534720787","FR" +"1534720788","1534720791","DE" +"1534720792","1534720795","IT" +"1534720796","1534720799","ES" +"1534720800","1534720815","PL" +"1534720816","1534720831","FR" +"1534720832","1534720863","PL" +"1534720864","1534720879","ES" +"1534720880","1534720895","FR" +"1534720896","1534720899","ES" +"1534720900","1534720903","LT" +"1534720904","1534720943","FR" +"1534720944","1534720951","CH" +"1534720952","1534720959","PL" +"1534720960","1534720967","IT" +"1534720968","1534720971","DE" +"1534720972","1534720975","PL" +"1534720976","1534720979","NL" +"1534720980","1534720983","GB" +"1534720984","1534720991","PL" +"1534720992","1534720995","PT" +"1534720996","1534720999","ES" +"1534721000","1534721003","FI" +"1534721004","1534721007","GB" +"1534721008","1534721023","ES" +"1534721024","1534721031","DE" +"1534721032","1534721055","FR" +"1534721056","1534721063","ES" +"1534721064","1534721087","GB" +"1534721088","1534721103","ES" +"1534721104","1534721111","PL" +"1534721112","1534721115","DE" +"1534721116","1534721119","FR" +"1534721120","1534721135","IT" +"1534721136","1534721159","FR" +"1534721160","1534721163","ES" +"1534721164","1534721183","FR" +"1534721184","1534721191","LT" +"1534721192","1534721195","FR" +"1534721196","1534721199","IT" +"1534721200","1534721215","FR" +"1534721216","1534721223","BE" +"1534721224","1534721231","CH" +"1534721232","1534721247","DE" +"1534721248","1534721263","FR" +"1534721264","1534721279","GB" +"1534721280","1534721295","PL" +"1534721296","1534721311","FR" +"1534721312","1534721319","PL" +"1534721320","1534721327","PT" +"1534721328","1534721343","NL" +"1534721344","1534721359","PL" +"1534721360","1534721375","GB" +"1534721376","1534721391","ES" +"1534721392","1534721407","PL" +"1534721408","1534721439","DE" +"1534721440","1534721455","FR" +"1534721456","1534721491","GB" +"1534721492","1534721495","FR" +"1534721496","1534721519","PL" +"1534721520","1534721527","FR" +"1534721528","1534721531","ES" +"1534721532","1534721567","FR" +"1534721568","1534721583","GB" +"1534721584","1534721587","IE" +"1534721588","1534721595","FR" +"1534721596","1534721615","ES" +"1534721616","1534721619","PL" +"1534721620","1534721623","ES" +"1534721624","1534721627","PL" +"1534721628","1534721631","NL" +"1534721632","1534721647","ES" +"1534721648","1534721663","FR" +"1534721664","1534721679","ES" +"1534721680","1534721695","FR" +"1534721696","1534721703","PL" +"1534721704","1534721707","DE" +"1534721708","1534721711","GB" +"1534721712","1534721743","FR" +"1534721744","1534721747","PL" +"1534721748","1534721751","GB" +"1534721752","1534721755","DE" +"1534721756","1534721807","FR" +"1534721808","1534721827","PL" +"1534721828","1534721831","FR" +"1534721832","1534721835","DE" +"1534721836","1534721839","BE" +"1534721840","1534721855","PL" +"1534721856","1534721887","ES" +"1534721888","1534721903","FR" +"1534721904","1534721919","DE" +"1534721920","1534721935","FR" +"1534721936","1534721943","CH" +"1534721944","1534721951","IT" +"1534721952","1534721955","NL" +"1534721956","1534721959","PL" +"1534721960","1534721963","IE" +"1534721964","1534721967","CH" +"1534721968","1534721971","DE" +"1534721972","1534721975","PL" +"1534721976","1534721979","FI" +"1534721980","1534721983","PL" +"1534721984","1534721999","FR" +"1534722000","1534722007","PL" +"1534722008","1534722011","PT" +"1534722012","1534722015","ES" +"1534722016","1534722031","IE" +"1534722032","1534722039","FR" +"1534722040","1534722043","BE" +"1534722044","1534722047","FR" +"1534722048","1534787583","RU" +"1534787584","1534791679","RO" +"1534791680","1534795775","RU" +"1534795776","1534803967","NO" +"1534803968","1534808063","LV" +"1534808064","1534812159","RU" +"1534812160","1534816255","CH" +"1534816256","1534820351","FR" +"1534820352","1534824447","FI" +"1534824448","1534828543","UA" +"1534828544","1534836735","PL" +"1534836736","1534840831","SE" +"1534840832","1534844927","PL" +"1534844928","1534849023","IE" +"1534849024","1534853119","NL" +"1534853120","1534918655","UA" +"1534918656","1534984191","GB" +"1534984192","1534989855","SE" +"1534989856","1534990063","ES" +"1534990064","1534990079","SE" +"1534990080","1534990335","ES" +"1534990336","1534999551","SE" +"1534999552","1535004671","ES" +"1535004672","1535006719","SE" +"1535006720","1535007231","ES" +"1535007232","1535008767","SE" +"1535008768","1535014911","ES" +"1535014912","1535017983","SE" +"1535017984","1535019519","ES" +"1535019520","1535020543","SE" +"1535020544","1535021055","ES" +"1535021056","1535022079","SE" +"1535022080","1535023103","ES" +"1535023104","1535024127","SE" +"1535024128","1535049727","ES" +"1535049728","1535115263","SK" +"1535115264","1535197183","AT" +"1535197184","1535246335","SE" +"1535246336","1535377407","AT" +"1535377408","1535442943","GR" +"1535442944","1535508479","FI" +"1535508480","1535574015","BG" +"1535574016","1535578111","GB" +"1535578112","1535582207","LV" +"1535582208","1535590399","NO" +"1535590400","1535594495","CH" +"1535594496","1535598591","LV" +"1535598592","1535602687","IL" +"1535602688","1535606783","HU" +"1535606784","1535610879","NO" +"1535610880","1535614975","RU" +"1535614976","1535619071","AT" +"1535619072","1535623167","FR" +"1535623168","1535627263","KZ" +"1535627264","1535631359","RU" +"1535631360","1535635455","GB" +"1535635456","1535639551","AZ" +"1535639552","1535672319","GB" +"1535672320","1535706111","DE" +"1535706112","1535708671","CH" +"1535708672","1535709694","DE" +"1535709695","1535720447","CH" +"1535720448","1535721727","DE" +"1535721728","1535737855","CH" +"1535737856","1535769855","HU" +"1535769856","1535770623","SR" +"1535770624","1535803391","CH" +"1535803392","1535836159","GR" +"1535836160","1535868927","HU" +"1535868928","1535901695","BG" +"1535901696","1535934463","GR" +"1535934464","1535963391","KW" +"1535963392","1535963647","US" +"1535963648","1535967231","KW" +"1535967232","1535999999","AT" +"1536000000","1536032767","NL" +"1536032768","1536036863","LV" +"1536036864","1536040959","AT" +"1536040960","1536045055","GB" +"1536045056","1536045311","IQ" +"1536045312","1536045567","LB" +"1536045568","1536046079","IQ" +"1536046080","1536046847","DE" +"1536046848","1536046975","A2" +"1536046976","1536047039","SA" +"1536047040","1536047103","IQ" +"1536047104","1536047679","LB" +"1536047680","1536047999","A2" +"1536048000","1536048127","SA" +"1536048128","1536048255","AE" +"1536048256","1536048319","DE" +"1536048320","1536048383","IQ" +"1536048384","1536048511","A2" +"1536048512","1536048575","IQ" +"1536048576","1536048639","A2" +"1536048640","1536048671","FR" +"1536048672","1536048703","LU" +"1536048704","1536048719","IQ" +"1536048720","1536048735","NL" +"1536048736","1536048895","DE" +"1536048896","1536049151","A2" +"1536049152","1536051199","IT" +"1536051200","1536057343","RU" +"1536057344","1536061439","IE" +"1536061440","1536065535","SE" +"1536065536","1536065791","GB" +"1536065792","1536066303","LU" +"1536066304","1536066815","NL" +"1536066816","1536067071","RU" +"1536067072","1536067327","GB" +"1536067328","1536067583","RU" +"1536067584","1536067839","DK" +"1536067840","1536068095","PL" +"1536068096","1536068351","RU" +"1536068352","1536068607","HR" +"1536068608","1536069119","RU" +"1536069120","1536069375","TR" +"1536069376","1536069631","IT" +"1536069632","1536073727","RU" +"1536073728","1536077823","UA" +"1536077824","1536081919","SE" +"1536081920","1536086015","PL" +"1536086016","1536090111","ES" +"1536090112","1536094207","IE" +"1536094208","1536098303","NL" +"1536098304","1536114687","RU" +"1536114688","1536118783","GB" +"1536118784","1536122879","DE" +"1536122880","1536126975","AT" +"1536126976","1536130815","DK" +"1536130816","1536131071","EU" +"1536131072","1536143359","RU" +"1536143360","1536147455","GB" +"1536147456","1536151551","IT" +"1536151552","1536155647","RS" +"1536155648","1536155655","IL" +"1536155656","1536155659","GB" +"1536155660","1536155663","GR" +"1536155664","1536155667","US" +"1536155668","1536159743","IL" +"1536159744","1536163839","DE" +"1536163840","1536180223","SY" +"1536180224","1536196607","HU" +"1536196608","1536212991","RU" +"1536212992","1536229375","DK" +"1536229376","1536245759","SE" +"1536245760","1536262143","FI" +"1536262144","1536278527","PL" +"1536278528","1536294911","UA" +"1536294912","1536311295","RU" +"1536311296","1536319487","EE" +"1536319488","1536321535","ES" +"1536321536","1536325631","GB" +"1536325632","1536327679","CZ" +"1536327680","1536344063","HU" +"1536344064","1536360447","PL" +"1536360448","1536376831","RU" +"1536376832","1536393215","KZ" +"1536393216","1536409599","SA" +"1536409600","1536425983","HU" +"1536425984","1536442367","SK" +"1536442368","1536458751","RS" +"1536458752","1536475135","BG" +"1536475136","1536491519","NL" +"1536491520","1536499711","NO" +"1536499712","1536503807","SE" +"1536503808","1536507903","NO" +"1536507904","1536524287","RU" +"1536524288","1536540671","BY" +"1536540672","1536557055","PL" +"1536557056","1536573439","FI" +"1536573440","1536589823","RS" +"1536589824","1536614399","PL" +"1536614400","1536622591","DK" +"1536622592","1536626687","GB" +"1536626688","1536630783","IT" +"1536630784","1536634879","RU" +"1536634880","1536643071","FR" +"1536643072","1536647167","TR" +"1536647168","1536651263","ES" +"1536651264","1536655359","FR" +"1536655360","1536659455","GE" +"1536659456","1536659519","DE" +"1536659520","1536659543","SA" +"1536659544","1536659775","DE" +"1536659776","1536659791","AO" +"1536659792","1536659823","SD" +"1536659824","1536659841","DE" +"1536659842","1536659843","US" +"1536659844","1536659991","DE" +"1536659992","1536659999","EG" +"1536660000","1536660015","DE" +"1536660016","1536660019","CG" +"1536660020","1536660023","DE" +"1536660024","1536660031","CG" +"1536660032","1536660063","CD" +"1536660064","1536660079","SO" +"1536660080","1536662271","DE" +"1536662272","1536662527","IQ" +"1536662528","1536663295","DE" +"1536663296","1536663311","LB" +"1536663312","1536663319","DE" +"1536663320","1536663327","LB" +"1536663328","1536663335","SA" +"1536663336","1536663391","DE" +"1536663392","1536663423","SD" +"1536663424","1536663551","KW" +"1536663552","1536667647","SA" +"1536667648","1536675839","RU" +"1536675840","1536679935","GB" +"1536679936","1536684031","LB" +"1536684032","1536688127","GB" +"1536688128","1537212415","FI" +"1537212416","1538260991","FR" +"1538260992","1538785279","BE" +"1538785280","1538793471","NL" +"1538793472","1538797055","DE" +"1538797056","1538801663","NL" +"1538801664","1538809855","IR" +"1538809856","1538818047","GE" +"1538818048","1538826239","NO" +"1538826240","1538834431","DE" +"1538834432","1538842623","CY" +"1538842624","1538850815","RU" +"1538850816","1538859007","KZ" +"1538859008","1538875391","RU" +"1538875392","1538883583","RS" +"1538883584","1538891775","BE" +"1538891776","1538894847","DE" +"1538894848","1538895871","LV" +"1538895872","1538896895","DE" +"1538896896","1538897663","LV" +"1538897664","1538897671","DE" +"1538897672","1538897679","IT" +"1538897680","1538897687","ES" +"1538897688","1538897695","RU" +"1538897696","1538897703","PL" +"1538897704","1538897711","GR" +"1538897712","1538897719","PT" +"1538897720","1538897727","GB" +"1538897728","1538897735","NL" +"1538897736","1538897919","FR" +"1538897920","1538898431","DE" +"1538898432","1538899967","FR" +"1538899968","1538904031","SI" +"1538904032","1538904039","BH" +"1538904040","1538908159","SI" +"1538908160","1538916351","RU" +"1538916352","1538924543","GB" +"1538924544","1538932735","DE" +"1538932736","1538940927","NO" +"1538940928","1538949119","RU" +"1538949120","1538957311","AT" +"1538957312","1538961535","DE" +"1538961536","1538961599","IT" +"1538961600","1538962263","DE" +"1538962264","1538962271","GB" +"1538962272","1538963399","DE" +"1538963400","1538963407","FR" +"1538963408","1538965503","DE" +"1538965504","1538973695","IR" +"1538973696","1538981887","JO" +"1538981888","1538990079","BY" +"1538990080","1538998271","CZ" +"1538998272","1539006463","AD" +"1539006464","1539014655","AL" +"1539014656","1539022847","RS" +"1539022848","1539031039","LT" +"1539031040","1539039231","IT" +"1539039232","1539047423","PL" +"1539047424","1539047583","IT" +"1539047584","1539047591","US" +"1539047592","1539048543","IT" +"1539048544","1539048551","LY" +"1539048552","1539048559","IT" +"1539048560","1539048567","LY" +"1539048568","1539048639","IT" +"1539048640","1539048687","IQ" +"1539048688","1539048703","IT" +"1539048704","1539048959","A2" +"1539048960","1539049215","IT" +"1539049216","1539049223","LY" +"1539049224","1539049255","IT" +"1539049256","1539049263","LY" +"1539049264","1539049311","IT" +"1539049312","1539049327","LY" +"1539049328","1539049335","IT" +"1539049336","1539049343","LY" +"1539049344","1539050263","IT" +"1539050264","1539050271","TR" +"1539050272","1539050367","IT" +"1539050368","1539050375","FR" +"1539050376","1539050383","IT" +"1539050384","1539050399","FR" +"1539050400","1539050407","IT" +"1539050408","1539050415","AL" +"1539050416","1539055471","IT" +"1539055472","1539055487","FR" +"1539055488","1539055511","IT" +"1539055512","1539055519","DE" +"1539055520","1539055615","IT" +"1539055616","1539063807","LV" +"1539063808","1539071999","FR" +"1539072000","1539080191","PL" +"1539080192","1539088383","UZ" +"1539088384","1539096575","RU" +"1539096576","1539112959","TR" +"1539112960","1539115007","PL" +"1539115008","1539117055","CH" +"1539117056","1539123199","PL" +"1539123200","1539125247","SE" +"1539125248","1539127295","RU" +"1539127296","1539129343","PL" +"1539129344","1539131391","IE" +"1539131392","1539133439","PL" +"1539133440","1539135487","RU" +"1539135488","1539136255","GB" +"1539136256","1539136511","US" +"1539136512","1539137535","GB" +"1539137536","1539139583","NL" +"1539139584","1539141631","FR" +"1539141632","1539143679","RU" +"1539143680","1539145727","NO" +"1539145728","1539147775","UA" +"1539147776","1539149823","PL" +"1539149824","1539151871","GB" +"1539151872","1539153919","UA" +"1539153920","1539155967","RU" +"1539155968","1539160063","NO" +"1539160064","1539162111","RU" +"1539162112","1539164159","DE" +"1539164160","1539166207","DK" +"1539166208","1539168255","FI" +"1539168256","1539170303","PL" +"1539170304","1539172351","NL" +"1539172352","1539176447","RU" +"1539176448","1539178495","PL" +"1539178496","1539186687","CH" +"1539186688","1539194879","LV" +"1539194880","1539203071","RU" +"1539203072","1539207167","NL" +"1539207168","1539211263","RU" +"1539211264","1539211775","CZ" +"1539211776","1539212031","DE" +"1539212032","1539212287","CZ" +"1539212288","1539212543","DE" +"1539212544","1539213311","CZ" +"1539213312","1539215359","SE" +"1539215360","1539219455","DE" +"1539219456","1539219711","GB" +"1539219712","1539221503","GG" +"1539221504","1539222527","FR" +"1539222528","1539222783","HK" +"1539222784","1539223039","CN" +"1539223040","1539223103","ES" +"1539223104","1539223167","BR" +"1539223168","1539223231","IT" +"1539223232","1539223551","FR" +"1539223552","1539225599","RU" +"1539225600","1539227647","HU" +"1539227648","1539229695","FI" +"1539229696","1539231743","DE" +"1539231744","1539233791","BE" +"1539233792","1539234303","LU" +"1539234304","1539234559","IE" +"1539234560","1539235839","LU" +"1539235840","1539237887","DE" +"1539237888","1539239935","RU" +"1539239936","1539244031","DE" +"1539244032","1539260415","BA" +"1539260416","1539276799","SK" +"1539276800","1539280895","SE" +"1539280896","1539284991","FR" +"1539284992","1539287039","DE" +"1539287040","1539289087","TR" +"1539289088","1539293183","RU" +"1539293184","1539297279","AZ" +"1539297280","1539301375","BG" +"1539301376","1539309567","RU" +"1539309568","1539310591","PL" +"1539310592","1539311615","UA" +"1539311616","1539312639","NL" +"1539312640","1539313663","DE" +"1539313664","1539314687","GB" +"1539314688","1539315711","RU" +"1539315712","1539316735","UA" +"1539316736","1539317759","SE" +"1539317760","1539318783","CZ" +"1539318784","1539319807","NL" +"1539319808","1539320831","DE" +"1539320832","1539321855","UA" +"1539321856","1539322879","EG" +"1539322880","1539323903","DK" +"1539323904","1539324927","PL" +"1539324928","1539325951","RU" +"1539325952","1539326975","KG" +"1539326976","1539329023","RU" +"1539329024","1539330047","PL" +"1539330048","1539331071","RU" +"1539331072","1539332095","UA" +"1539332096","1539333119","PL" +"1539333120","1539335167","RU" +"1539335168","1539336191","CH" +"1539336192","1539336703","UA" +"1539336704","1539337215","EE" +"1539337216","1539338239","ES" +"1539338240","1539339263","SE" +"1539339264","1539340287","NL" +"1539340288","1539341311","PL" +"1539341312","1539342335","IT" +"1539342336","1539345407","UA" +"1539345408","1539346431","RO" +"1539346432","1539347455","PL" +"1539347456","1539348479","RU" +"1539348480","1539351551","UA" +"1539351552","1539352575","PL" +"1539352576","1539354623","RU" +"1539354624","1539355647","PL" +"1539355648","1539357695","UA" +"1539357696","1539358719","RU" +"1539358720","1539359743","GB" +"1539359744","1539360767","PL" +"1539360768","1539361279","UA" +"1539361280","1539361791","DE" +"1539361792","1539362815","PL" +"1539362816","1539363839","GB" +"1539363840","1539364863","DK" +"1539364864","1539365887","UA" +"1539365888","1539366911","NO" +"1539366912","1539368959","PL" +"1539368960","1539369983","GB" +"1539369984","1539371007","BG" +"1539371008","1539373055","RU" +"1539373056","1539374079","PL" +"1539374080","1539375103","SE" +"1539375104","1539376127","NO" +"1539376128","1539377151","IL" +"1539377152","1539378175","UA" +"1539378176","1539379199","PL" +"1539379200","1539380223","EU" +"1539380224","1539381247","CH" +"1539381248","1539382271","RS" +"1539382272","1539383295","RO" +"1539383296","1539384319","UA" +"1539384320","1539385343","RU" +"1539385344","1539385855","PL" +"1539385856","1539386367","BE" +"1539386368","1539387391","IT" +"1539387392","1539388415","IL" +"1539388416","1539389439","PL" +"1539389440","1539389951","FR" +"1539389952","1539390463","RU" +"1539390464","1539391487","RO" +"1539391488","1539392511","LV" +"1539392512","1539393535","UA" +"1539393536","1539393791","DE" +"1539393792","1539394047","PL" +"1539394048","1539394303","RU" +"1539394304","1539394559","RS" +"1539394560","1539396607","UA" +"1539396608","1539397631","PL" +"1539397632","1539398143","RU" +"1539398144","1539398655","PL" +"1539398656","1539399679","ES" +"1539399680","1539401727","PL" +"1539401728","1539402239","GB" +"1539402240","1539402751","FR" +"1539402752","1539403263","GB" +"1539403264","1539403775","RU" +"1539403776","1539404799","GR" +"1539404800","1539405823","EE" +"1539405824","1539406847","PL" +"1539406848","1539408895","UA" +"1539408896","1539409919","CZ" +"1539409920","1539410943","DK" +"1539410944","1539411967","RU" +"1539411968","1539412991","PL" +"1539412992","1539414015","RU" +"1539414016","1539415039","UA" +"1539415040","1539416063","BG" +"1539416064","1539417087","PL" +"1539417088","1539418111","UA" +"1539418112","1539419135","RU" +"1539419136","1539420159","UA" +"1539420160","1539421183","RU" +"1539421184","1539422207","GB" +"1539422208","1539423231","PL" +"1539423232","1539424255","IE" +"1539424256","1539425279","LV" +"1539425280","1539426303","PL" +"1539426304","1539427327","BG" +"1539427328","1539428351","UA" +"1539428352","1539429375","PL" +"1539429376","1539434495","RU" +"1539434496","1539435519","UA" +"1539435520","1539437567","RU" +"1539437568","1539439615","GB" +"1539439616","1539440639","UA" +"1539440640","1539441663","RU" +"1539441664","1539442175","IL" +"1539442176","1539442687","DE" +"1539442688","1539443199","NL" +"1539443200","1539444223","RU" +"1539444224","1539444735","FR" +"1539444736","1539445247","RU" +"1539445248","1539445759","PL" +"1539445760","1539446271","FI" +"1539446272","1539446783","SE" +"1539446784","1539447295","RU" +"1539447296","1539447807","SE" +"1539447808","1539448831","RO" +"1539448832","1539449343","AT" +"1539449344","1539449855","UA" +"1539449856","1539450367","DK" +"1539450368","1539450879","SE" +"1539450880","1539451391","UA" +"1539451392","1539452415","RO" +"1539452416","1539452927","GB" +"1539452928","1539453439","CH" +"1539453440","1539453951","UA" +"1539453952","1539454463","GB" +"1539454464","1539454975","RU" +"1539454976","1539455487","UA" +"1539455488","1539455999","RU" +"1539456000","1539456511","FR" +"1539456512","1539457023","ES" +"1539457024","1539457535","RU" +"1539457536","1539458047","SE" +"1539458048","1539459071","GB" +"1539459072","1539459583","UA" +"1539459584","1539460095","GB" +"1539460096","1539460607","LV" +"1539460608","1539461631","UA" +"1539461632","1539462143","RS" +"1539462144","1539462655","DE" +"1539462656","1539463167","BE" +"1539463168","1539463679","UA" +"1539463680","1539464191","DE" +"1539464192","1539464703","RO" +"1539464704","1539465215","DK" +"1539465216","1539466751","FR" +"1539466752","1539467263","KW" +"1539467264","1539467775","RU" +"1539467776","1539468287","PL" +"1539468288","1539468799","DE" +"1539468800","1539469823","RU" +"1539469824","1539470335","IL" +"1539470336","1539470847","GB" +"1539470848","1539471359","SE" +"1539471360","1539471871","RU" +"1539471872","1539472383","PL" +"1539472384","1539472895","UA" +"1539472896","1539473407","GB" +"1539473408","1539473919","FR" +"1539473920","1539474431","KW" +"1539474432","1539474943","DE" +"1539474944","1539475455","UA" +"1539475456","1539475967","NL" +"1539475968","1539476479","PL" +"1539476480","1539476991","CZ" +"1539476992","1539477503","IT" +"1539477504","1539478015","PL" +"1539478016","1539478527","CH" +"1539478528","1539479039","RO" +"1539479040","1539479551","DK" +"1539479552","1539480063","GB" +"1539480064","1539480575","DK" +"1539480576","1539481087","PL" +"1539481088","1539481599","GB" +"1539481600","1539482111","RU" +"1539482112","1539482623","UA" +"1539482624","1539483135","RU" +"1539483136","1539483647","ES" +"1539483648","1539484159","UA" +"1539484160","1539484671","GB" +"1539484672","1539485695","RU" +"1539485696","1539486207","RO" +"1539486208","1539486719","FR" +"1539486720","1539487231","DE" +"1539487232","1539488255","RU" +"1539488256","1539488767","SE" +"1539488768","1539489279","PL" +"1539489280","1539490815","RU" +"1539490816","1539491327","CH" +"1539491328","1539491839","PL" +"1539491840","1539492351","RU" +"1539492352","1539492863","BE" +"1539492864","1539493375","KR" +"1539493376","1539493887","RU" +"1539493888","1539494399","FR" +"1539494400","1539494911","PL" +"1539494912","1539495423","RU" +"1539495424","1539495935","UA" +"1539495936","1539496447","RS" +"1539496448","1539496959","NL" +"1539496960","1539497471","GB" +"1539497472","1539497983","DE" +"1539497984","1539498495","NL" +"1539498496","1539499007","RU" +"1539499008","1539499519","PL" +"1539499520","1539500543","DE" +"1539500544","1539501055","RO" +"1539501056","1539501567","BE" +"1539501568","1539502079","UA" +"1539502080","1539502591","PL" +"1539502592","1539503103","HR" +"1539503104","1539504127","RU" +"1539504128","1539504639","AT" +"1539504640","1539505151","UA" +"1539505152","1539506175","RU" +"1539506176","1539506687","NL" +"1539506688","1539507199","UA" +"1539507200","1539508223","RO" +"1539508224","1539508735","NO" +"1539508736","1539509759","UA" +"1539509760","1539510271","RO" +"1539510272","1539510783","RU" +"1539510784","1539511295","LU" +"1539511296","1539511807","UA" +"1539511808","1539512319","RU" +"1539512320","1539512831","BG" +"1539512832","1539513343","PL" +"1539513344","1539513855","RO" +"1539513856","1539514367","RU" +"1539514368","1539514879","SE" +"1539514880","1539515391","ES" +"1539515392","1539515903","FR" +"1539515904","1539516415","RS" +"1539516416","1539516927","AT" +"1539516928","1539517439","PL" +"1539517440","1539517951","RO" +"1539517952","1539518463","PL" +"1539518464","1539518975","DE" +"1539518976","1539519487","RU" +"1539519488","1539519999","UA" +"1539520000","1539520511","DE" +"1539520512","1539521023","PL" +"1539521024","1539521535","DK" +"1539521536","1539522047","RU" +"1539522048","1539522559","RO" +"1539522560","1539523071","RU" +"1539523072","1539523583","RO" +"1539523584","1539524095","UA" +"1539524096","1539524607","GR" +"1539524608","1539525119","FR" +"1539525120","1539525631","UA" +"1539525632","1539526143","SE" +"1539526144","1539526655","DE" +"1539526656","1539527167","NL" +"1539527168","1539527679","GB" +"1539527680","1539528191","RO" +"1539528192","1539528703","UA" +"1539528704","1539529215","SA" +"1539529216","1539529727","UA" +"1539529728","1539530239","PL" +"1539530240","1539530751","AT" +"1539530752","1539531263","UA" +"1539531264","1539531775","RO" +"1539531776","1539532799","RU" +"1539532800","1539533311","DE" +"1539533312","1539533823","CZ" +"1539533824","1539534335","PL" +"1539534336","1539534847","RU" +"1539534848","1539535359","GB" +"1539535360","1539535871","RU" +"1539535872","1539536383","AT" +"1539536384","1539536895","NL" +"1539536896","1539537407","UA" +"1539537408","1539537919","GB" +"1539537920","1539540479","RU" +"1539540480","1539540991","PL" +"1539540992","1539541503","RU" +"1539541504","1539542015","TR" +"1539542016","1539542527","DE" +"1539542528","1539543039","CH" +"1539543040","1539543551","RO" +"1539543552","1539544063","SI" +"1539544064","1539544575","RU" +"1539544576","1539545087","CH" +"1539545088","1539545599","GR" +"1539545600","1539546111","SE" +"1539546112","1539546623","UA" +"1539546624","1539547135","PL" +"1539547136","1539547647","NL" +"1539547648","1539548159","IL" +"1539548160","1539548671","FR" +"1539548672","1539549183","EU" +"1539549184","1539549695","GB" +"1539549696","1539550207","RU" +"1539550208","1539550719","UA" +"1539550720","1539551231","ES" +"1539551232","1539551743","RS" +"1539551744","1539552255","RU" +"1539552256","1539552767","RO" +"1539552768","1539553279","GB" +"1539553280","1539553791","UA" +"1539553792","1539554303","GB" +"1539554304","1539554815","CH" +"1539554816","1539555327","PL" +"1539555328","1539555839","GB" +"1539555840","1539556863","RO" +"1539556864","1539557375","AT" +"1539557376","1539557887","NL" +"1539557888","1539558399","CZ" +"1539558400","1539558911","RU" +"1539558912","1539559423","FR" +"1539559424","1539560447","RU" +"1539560448","1539560959","GB" +"1539560960","1539561471","UA" +"1539561472","1539561983","RO" +"1539561984","1539563007","DE" +"1539563008","1539563519","RU" +"1539563520","1539564031","SE" +"1539564032","1539564543","KZ" +"1539564544","1539565055","GB" +"1539565056","1539565567","UA" +"1539565568","1539566079","PL" +"1539566080","1539567103","NL" +"1539567104","1539567615","CH" +"1539567616","1539568127","DE" +"1539568128","1539568639","NL" +"1539568640","1539569151","UA" +"1539569152","1539569663","EE" +"1539569664","1539570175","UA" +"1539570176","1539570687","PL" +"1539570688","1539571711","RU" +"1539571712","1539572735","UA" +"1539572736","1539573759","RU" +"1539573760","1539575807","PL" +"1539575808","1539576831","LV" +"1539576832","1539577855","GB" +"1539577856","1539578879","RU" +"1539578880","1539579903","PL" +"1539579904","1539580927","RU" +"1539580928","1539581951","AM" +"1539581952","1539582975","RU" +"1539582976","1539583999","RO" +"1539584000","1539585023","PL" +"1539585024","1539586047","UA" +"1539586048","1539587071","PL" +"1539587072","1539588095","UA" +"1539588096","1539589119","BG" +"1539589120","1539590143","GB" +"1539590144","1539591167","RU" +"1539591168","1539592191","UZ" +"1539592192","1539593215","UA" +"1539593216","1539594239","RU" +"1539594240","1539598335","UA" +"1539598336","1539599359","NL" +"1539599360","1539600383","PL" +"1539600384","1539601407","HU" +"1539601408","1539602431","GB" +"1539602432","1539603455","UA" +"1539603456","1539604479","BG" +"1539604480","1539605503","ES" +"1539605504","1539606527","UA" +"1539606528","1539607551","RU" +"1539607552","1539609599","DE" +"1539609600","1539610623","UA" +"1539610624","1539611647","RU" +"1539611648","1539614719","UA" +"1539614720","1539615743","NL" +"1539615744","1539616767","DK" +"1539616768","1539617791","UA" +"1539617792","1539618815","FR" +"1539618816","1539619839","GB" +"1539619840","1539620863","RU" +"1539620864","1539623935","UA" +"1539623936","1539624959","DE" +"1539624960","1539625983","RU" +"1539625984","1539627007","PL" +"1539627008","1539628031","RU" +"1539628032","1539629055","UA" +"1539629056","1539630079","BG" +"1539630080","1539631103","UA" +"1539631104","1539632127","CN" +"1539632128","1539633151","RU" +"1539633152","1539634175","SE" +"1539634176","1539638271","RU" +"1539638272","1539639295","UA" +"1539639296","1539640319","RU" +"1539640320","1539641343","PL" +"1539641344","1539642367","UA" +"1539642368","1539643391","RU" +"1539643392","1539644415","UA" +"1539644416","1539645439","DE" +"1539645440","1539646463","GB" +"1539646464","1539647487","IE" +"1539647488","1539648511","RU" +"1539648512","1539649023","CY" +"1539649024","1539649535","LB" +"1539649536","1539650559","UA" +"1539650560","1539651583","RU" +"1539651584","1539652607","UA" +"1539652608","1539653631","IL" +"1539653632","1539655679","RU" +"1539655680","1539656703","NL" +"1539656704","1539657727","RU" +"1539657728","1539658751","UA" +"1539658752","1539659775","FI" +"1539659776","1539660799","PL" +"1539660800","1539661823","GB" +"1539661824","1539662847","RU" +"1539662848","1539663871","IL" +"1539663872","1539664895","RU" +"1539664896","1539665919","BE" +"1539665920","1539666943","RU" +"1539666944","1539667967","CZ" +"1539667968","1539668991","UA" +"1539668992","1539670015","RU" +"1539670016","1539672063","UA" +"1539672064","1539673087","FR" +"1539673088","1539674111","GB" +"1539674112","1539675135","UA" +"1539675136","1539677183","PL" +"1539677184","1539678207","UA" +"1539678208","1539679231","RU" +"1539679232","1539680255","FR" +"1539680256","1539681279","UA" +"1539681280","1539684351","RU" +"1539684352","1539685375","UA" +"1539685376","1539688447","RU" +"1539688448","1539689471","SA" +"1539689472","1539690495","RU" +"1539690496","1539691519","FI" +"1539691520","1539692543","RU" +"1539692544","1539694591","UA" +"1539694592","1539695615","PL" +"1539695616","1539696639","GB" +"1539696640","1539697663","RU" +"1539697664","1539698687","UA" +"1539698688","1539699711","GE" +"1539699712","1539700735","RO" +"1539700736","1539701759","DK" +"1539701760","1539702783","UA" +"1539702784","1539703039","SI" +"1539703040","1539703295","UA" +"1539703296","1539703551","DE" +"1539703552","1539703807","GB" +"1539703808","1539704063","UA" +"1539704064","1539704319","IL" +"1539704320","1539704575","CH" +"1539704576","1539704831","HU" +"1539704832","1539705087","CH" +"1539705088","1539705343","GB" +"1539705344","1539705599","UA" +"1539705600","1539706111","CH" +"1539706112","1539706367","GB" +"1539706368","1539706623","RU" +"1539706624","1539707135","PL" +"1539707136","1539707391","LT" +"1539707392","1539707647","GB" +"1539707648","1539707903","AE" +"1539707904","1539708159","UA" +"1539708160","1539708415","DE" +"1539708416","1539708671","GB" +"1539708672","1539708927","RO" +"1539708928","1539709183","IE" +"1539709184","1539709439","AT" +"1539709440","1539709695","BE" +"1539709696","1539709951","NL" +"1539709952","1539710207","TR" +"1539710208","1539710463","GB" +"1539710464","1539710719","FR" +"1539710720","1539710975","UA" +"1539710976","1539711231","DE" +"1539711232","1539711487","RU" +"1539711488","1539711743","UA" +"1539711744","1539711999","DE" +"1539712000","1539712255","UA" +"1539712256","1539712511","NL" +"1539712512","1539713023","RU" +"1539713024","1539713279","UA" +"1539713280","1539713535","FR" +"1539713536","1539713791","DK" +"1539713792","1539714047","DE" +"1539714048","1539714303","FR" +"1539714304","1539714559","AT" +"1539714560","1539714815","RU" +"1539714816","1539715071","PT" +"1539715072","1539715327","SE" +"1539715328","1539715583","TR" +"1539715584","1539715839","UA" +"1539715840","1539716095","RU" +"1539716096","1539716351","SI" +"1539716352","1539716607","PL" +"1539716608","1539716863","RU" +"1539716864","1539717375","PL" +"1539717376","1539717631","DE" +"1539717632","1539717887","CH" +"1539717888","1539718143","MK" +"1539718144","1539718399","DE" +"1539718400","1539718655","TR" +"1539718656","1539718911","SA" +"1539718912","1539719167","KZ" +"1539719168","1539719423","IE" +"1539719424","1539719679","PL" +"1539719680","1539720191","DE" +"1539720192","1539720703","RU" +"1539720704","1539720959","IL" +"1539720960","1539721215","RU" +"1539721216","1539721727","CH" +"1539721728","1539721983","PL" +"1539721984","1539722239","RU" +"1539722240","1539722495","PL" +"1539722496","1539722751","GB" +"1539722752","1539723007","DE" +"1539723008","1539723263","CH" +"1539723264","1539723519","PL" +"1539723520","1539723775","GB" +"1539723776","1539724031","DE" +"1539724032","1539724287","UA" +"1539724288","1539724543","IT" +"1539724544","1539724799","RU" +"1539724800","1539725055","DE" +"1539725056","1539725311","NL" +"1539725312","1539725567","FR" +"1539725568","1539725823","PL" +"1539725824","1539726079","PT" +"1539726080","1539726335","RU" +"1539726336","1539726591","SE" +"1539726592","1539726847","AT" +"1539726848","1539727103","PL" +"1539727104","1539727359","SE" +"1539727360","1539727615","SI" +"1539727616","1539727871","PL" +"1539727872","1539728127","RU" +"1539728128","1539728383","GB" +"1539728384","1539728639","PL" +"1539728640","1539728895","UA" +"1539728896","1539729151","SA" +"1539729152","1539729407","NL" +"1539729408","1539729663","RU" +"1539729664","1539729919","FR" +"1539729920","1539730175","NL" +"1539730176","1539730431","GB" +"1539730432","1539730687","GR" +"1539730688","1539730943","KZ" +"1539730944","1539731455","PL" +"1539731456","1539731711","SI" +"1539731712","1539732223","DE" +"1539732224","1539732479","FR" +"1539732480","1539732735","UA" +"1539732736","1539732991","DK" +"1539732992","1539733247","PL" +"1539733248","1539733503","BG" +"1539733504","1539733759","FI" +"1539733760","1539734015","PL" +"1539734016","1539734271","FR" +"1539734272","1539734527","NO" +"1539734528","1539734783","TR" +"1539734784","1539735039","FR" +"1539735040","1539735295","BE" +"1539735296","1539735551","RU" +"1539735552","1539735807","AT" +"1539735808","1539736063","IL" +"1539736064","1539736319","RU" +"1539736320","1539736575","HU" +"1539736576","1539736831","BG" +"1539736832","1539737087","UA" +"1539737088","1539737343","KW" +"1539737344","1539737599","SE" +"1539737600","1539737855","RO" +"1539737856","1539738111","DE" +"1539738112","1539738367","DK" +"1539738368","1539738623","DE" +"1539738624","1539738879","UA" +"1539738880","1539739135","NL" +"1539739136","1539739391","AT" +"1539739392","1539739647","UA" +"1539739648","1539739903","DK" +"1539739904","1539740415","PL" +"1539740416","1539740671","RO" +"1539740672","1539740927","AT" +"1539740928","1539741183","RU" +"1539741184","1539741439","PL" +"1539741440","1539741695","NL" +"1539741696","1539741951","DE" +"1539741952","1539742207","UA" +"1539742208","1539742463","CH" +"1539742464","1539742719","RU" +"1539742720","1539742975","LV" +"1539742976","1539743231","DE" +"1539743232","1539743487","GR" +"1539743488","1539743743","FR" +"1539743744","1539743999","RO" +"1539744000","1539744255","PL" +"1539744256","1539744511","RO" +"1539744512","1539744767","DE" +"1539744768","1539745023","SE" +"1539745024","1539745279","GB" +"1539745280","1539745535","GI" +"1539745536","1539745791","CH" +"1539745792","1539746303","DK" +"1539746304","1539746815","RU" +"1539746816","1539747071","DK" +"1539747072","1539747327","CH" +"1539747328","1539747583","NL" +"1539747584","1539747839","UA" +"1539747840","1539748095","NO" +"1539748096","1539748351","PL" +"1539748352","1539748607","NL" +"1539748608","1539748863","PL" +"1539748864","1539749119","GB" +"1539749120","1539749375","BG" +"1539749376","1539749631","PT" +"1539749632","1539749887","GR" +"1539749888","1539750143","RU" +"1539750144","1539750399","TR" +"1539750400","1539750655","PL" +"1539750656","1539750911","DE" +"1539750912","1539751167","UA" +"1539751168","1539751423","AT" +"1539751424","1539751679","SI" +"1539751680","1539751935","FR" +"1539751936","1539752191","DE" +"1539752192","1539752447","SE" +"1539752448","1539752703","PL" +"1539752704","1539752959","AT" +"1539752960","1539753215","RO" +"1539753216","1539753471","DE" +"1539753472","1539753727","HU" +"1539753728","1539754239","FR" +"1539754240","1539754495","NO" +"1539754496","1539754751","SE" +"1539754752","1539755007","BE" +"1539755008","1539755263","DK" +"1539755264","1539755519","IL" +"1539755520","1539755775","EE" +"1539755776","1539756031","MT" +"1539756032","1539756543","PL" +"1539756544","1539756799","DE" +"1539756800","1539757055","BE" +"1539757056","1539757311","RU" +"1539757312","1539757567","GB" +"1539757568","1539757823","SI" +"1539757824","1539758079","UA" +"1539758080","1539758335","HR" +"1539758336","1539758591","PL" +"1539758592","1539758847","NL" +"1539758848","1539759103","BA" +"1539759104","1539759359","DK" +"1539759360","1539759615","RU" +"1539759616","1539759871","PL" +"1539759872","1539760127","SE" +"1539760128","1539760383","DE" +"1539760384","1539760639","RU" +"1539760640","1539760895","PL" +"1539760896","1539761151","DK" +"1539761152","1539761407","DE" +"1539761408","1539761663","CH" +"1539761664","1539761919","PL" +"1539761920","1539762175","RU" +"1539762176","1539762431","PL" +"1539762432","1539762687","UA" +"1539762688","1539762943","NL" +"1539762944","1539763199","UA" +"1539763200","1539763455","MD" +"1539763456","1539763711","DK" +"1539763712","1539763967","DE" +"1539763968","1539764223","PT" +"1539764224","1539764479","AT" +"1539764480","1539764735","GB" +"1539764736","1539764991","RO" +"1539764992","1539765247","BE" +"1539765248","1539765503","GB" +"1539765504","1539766015","PL" +"1539766016","1539766271","UA" +"1539766272","1539766527","PL" +"1539766528","1539766783","UA" +"1539766784","1539767039","DE" +"1539767040","1539767295","SA" +"1539767296","1539767551","DK" +"1539767552","1539767807","DE" +"1539767808","1539768063","IL" +"1539768064","1539768319","GB" +"1539768320","1539768575","FR" +"1539768576","1539768831","GB" +"1539768832","1539769087","IT" +"1539769088","1539769343","BE" +"1539769344","1539769599","RU" +"1539769600","1539769855","AT" +"1539769856","1539770111","FR" +"1539770112","1539770367","GR" +"1539770368","1539770623","DE" +"1539770624","1539770879","FR" +"1539770880","1539771135","RU" +"1539771136","1539771391","FR" +"1539771392","1539771647","PL" +"1539771648","1539771903","UA" +"1539771904","1539772159","RU" +"1539772160","1539772415","BE" +"1539772416","1539772671","RU" +"1539772672","1539772927","RS" +"1539772928","1539773183","RU" +"1539773184","1539773439","GB" +"1539773440","1539773695","KZ" +"1539773696","1539773951","DE" +"1539773952","1539774207","PL" +"1539774208","1539774463","SI" +"1539774464","1539774719","GB" +"1539774720","1539774975","PL" +"1539774976","1539775231","RU" +"1539775232","1539775487","CH" +"1539775488","1539775743","UA" +"1539775744","1539775999","IL" +"1539776000","1539776255","PL" +"1539776256","1539776511","SK" +"1539776512","1539776767","HU" +"1539776768","1539777023","UA" +"1539777024","1539777279","RU" +"1539777280","1539777535","UA" +"1539777536","1539777791","BG" +"1539777792","1539778047","UA" +"1539778048","1539778303","AM" +"1539778304","1539778559","LB" +"1539778560","1539778815","RU" +"1539778816","1539779071","RO" +"1539779072","1539779327","GB" +"1539779328","1539779583","NL" +"1539779584","1539779839","PL" +"1539779840","1539780095","NL" +"1539780096","1539780351","RU" +"1539780352","1539780607","AT" +"1539780608","1539780863","PL" +"1539780864","1539781119","RO" +"1539781120","1539781375","NL" +"1539781376","1539781631","PL" +"1539781632","1539781887","HU" +"1539781888","1539782143","IL" +"1539782144","1539782399","UA" +"1539782400","1539782655","LT" +"1539782656","1539782911","GI" +"1539782912","1539783167","PL" +"1539783168","1539783679","NL" +"1539783680","1539783935","DE" +"1539783936","1539784191","SI" +"1539784192","1539784447","RU" +"1539784448","1539784703","NO" +"1539784704","1539784959","SE" +"1539784960","1539785215","DE" +"1539785216","1539785471","CH" +"1539785472","1539785727","RU" +"1539785728","1539785983","SE" +"1539785984","1539786239","IL" +"1539786240","1539786495","AT" +"1539786496","1539786751","GB" +"1539786752","1539787007","HU" +"1539787008","1539787263","TR" +"1539787264","1539787519","IE" +"1539787520","1539787775","DE" +"1539787776","1539788031","CH" +"1539788032","1539788287","HR" +"1539788288","1539788543","GB" +"1539788544","1539788799","HR" +"1539788800","1539789311","RU" +"1539789312","1539789567","UA" +"1539789568","1539789823","DE" +"1539789824","1539790079","NL" +"1539790080","1539790335","CH" +"1539790336","1539790591","LV" +"1539790592","1539790847","PL" +"1539790848","1539791103","DE" +"1539791104","1539791359","PL" +"1539791360","1539791615","RU" +"1539791616","1539792383","UA" +"1539792384","1539792639","IL" +"1539792640","1539792895","PL" +"1539792896","1539793151","GR" +"1539793152","1539793407","PL" +"1539793408","1539793663","CH" +"1539793664","1539794175","IL" +"1539794176","1539794431","PL" +"1539794432","1539794687","DK" +"1539794688","1539794943","FR" +"1539794944","1539795199","RO" +"1539795200","1539795455","PL" +"1539795456","1539795711","UA" +"1539795712","1539795967","SA" +"1539795968","1539796223","NL" +"1539796224","1539796479","MC" +"1539796480","1539796735","GB" +"1539796736","1539796991","TR" +"1539796992","1539797247","UA" +"1539797248","1539797503","DK" +"1539797504","1539797759","RU" +"1539797760","1539798015","UA" +"1539798016","1539798271","HU" +"1539798272","1539798527","PL" +"1539798528","1539798783","GB" +"1539798784","1539799039","IL" +"1539799040","1539799295","ES" +"1539799296","1539799551","DK" +"1539799552","1539799807","ES" +"1539799808","1539800063","RO" +"1539800064","1539800319","SI" +"1539800320","1539800575","GB" +"1539800576","1539800831","LV" +"1539800832","1539801087","PL" +"1539801088","1539801343","BG" +"1539801344","1539801855","GB" +"1539801856","1539802111","SI" +"1539802112","1539802367","PL" +"1539802368","1539802623","RO" +"1539802624","1539802879","IS" +"1539802880","1539803135","NL" +"1539803136","1539803391","GB" +"1539803392","1539803647","NL" +"1539803648","1539804159","UA" +"1539804160","1539804671","PL" +"1539804672","1539804927","SI" +"1539804928","1539805439","UA" +"1539805440","1539805695","AT" +"1539805696","1539805951","CH" +"1539805952","1539806207","RU" +"1539806208","1539806463","FI" +"1539806464","1539806719","RU" +"1539806720","1539806975","BG" +"1539806976","1539807231","GB" +"1539807232","1539807487","FR" +"1539807488","1539807743","RU" +"1539807744","1539807999","GB" +"1539808000","1539808255","HU" +"1539808256","1539808511","RU" +"1539808512","1539808767","GB" +"1539808768","1539809023","DE" +"1539809024","1539809279","GB" +"1539809280","1539809535","EU" +"1539809536","1539809791","SI" +"1539809792","1539810047","DE" +"1539810048","1539810303","UA" +"1539810304","1539810559","CZ" +"1539810560","1539810815","DE" +"1539810816","1539811071","TR" +"1539811072","1539811327","NL" +"1539811328","1539811583","CZ" +"1539811584","1539811839","DE" +"1539811840","1539812095","IT" +"1539812096","1539812351","RU" +"1539812352","1539812607","CH" +"1539812608","1539812863","IT" +"1539812864","1539813119","RU" +"1539813120","1539813375","AT" +"1539813376","1539813631","PL" +"1539813632","1539813887","NL" +"1539813888","1539814143","RU" +"1539814144","1539814399","NL" +"1539814400","1539814911","GB" +"1539814912","1539815167","UA" +"1539815168","1539815423","GB" +"1539815424","1539815935","RU" +"1539815936","1539816191","CH" +"1539816192","1539816447","SA" +"1539816448","1539816703","UA" +"1539816704","1539816959","RU" +"1539816960","1539817215","DK" +"1539817216","1539817471","TR" +"1539817472","1539817727","DE" +"1539817728","1539817983","PL" +"1539817984","1539818239","UA" +"1539818240","1539818495","NO" +"1539818496","1539819007","RU" +"1539819008","1539819263","CH" +"1539819264","1539819519","RO" +"1539819520","1539819775","AT" +"1539819776","1539820031","SI" +"1539820032","1539820287","VG" +"1539820288","1539820543","PL" +"1539820544","1539820799","ES" +"1539820800","1539821055","RU" +"1539821056","1539821311","UA" +"1539821312","1539821567","CZ" +"1539821568","1539821823","DK" +"1539821824","1539822079","DE" +"1539822080","1539822335","RO" +"1539822336","1539822591","RU" +"1539822592","1539822847","GB" +"1539822848","1539823103","IE" +"1539823104","1539823359","DE" +"1539823360","1539823615","CY" +"1539823616","1539823871","RO" +"1539823872","1539824127","DK" +"1539824128","1539824383","CH" +"1539824384","1539824639","NL" +"1539824640","1539824895","HU" +"1539824896","1539825151","RU" +"1539825152","1539825407","UA" +"1539825408","1539825919","RU" +"1539825920","1539826175","DE" +"1539826176","1539826431","AM" +"1539826432","1539826687","BE" +"1539826688","1539826943","CH" +"1539826944","1539827199","RU" +"1539827200","1539827455","ES" +"1539827456","1539827711","MK" +"1539827712","1539827967","RU" +"1539827968","1539828479","FR" +"1539828480","1539828735","SI" +"1539828736","1539828991","NL" +"1539828992","1539829247","BG" +"1539829248","1539829503","SE" +"1539829504","1539829759","DE" +"1539829760","1539830015","PL" +"1539830016","1539830271","DE" +"1539830272","1539830527","FR" +"1539830528","1539830783","RO" +"1539830784","1539831039","RU" +"1539831040","1539831295","UA" +"1539831296","1539831551","PL" +"1539831552","1539831807","DE" +"1539831808","1539832063","RU" +"1539832064","1539832319","GB" +"1539832320","1539832575","PL" +"1539832576","1539832831","RU" +"1539832832","1539833087","GB" +"1539833088","1539833343","RU" +"1539833344","1539833855","FR" +"1539833856","1539837951","UA" +"1539837952","1539838975","NL" +"1539838976","1539839999","GR" +"1539840000","1539841023","PL" +"1539841024","1539842047","RU" +"1539842048","1539844095","PL" +"1539844096","1539846143","UA" +"1539846144","1539847167","NL" +"1539847168","1539849215","UA" +"1539850240","1539851263","LV" +"1539851264","1539852287","PL" +"1539852288","1539853311","UA" +"1539853312","1539854335","PL" +"1539854336","1539855359","UA" +"1539855360","1539856383","RU" +"1539856384","1539857407","UA" +"1539857408","1539858431","PL" +"1539858432","1539859455","RO" +"1539859456","1539860479","DE" +"1539860480","1539861503","PL" +"1539861504","1539862527","DE" +"1539862528","1539863551","UA" +"1539863552","1539864575","ES" +"1539864576","1539865599","RO" +"1539865600","1539866623","UA" +"1539866624","1539867647","IT" +"1539868672","1539869695","UA" +"1539869696","1539870719","ES" +"1539870720","1539871743","IL" +"1539871744","1539872767","ES" +"1539872768","1539873791","SE" +"1539873792","1539875839","UA" +"1539875840","1539876863","MD" +"1539876864","1539877887","ES" +"1539877888","1539878911","PL" +"1539878912","1539879935","EU" +"1539879936","1539880959","UA" +"1539880960","1539881983","PL" +"1539881984","1539883007","UA" +"1539883008","1539884031","RS" +"1539884032","1539885055","MT" +"1539885056","1539886079","UA" +"1539886080","1539887103","FR" +"1539887104","1539888127","IT" +"1539888128","1539889151","UA" +"1539889152","1539890175","RU" +"1539890176","1539891199","UA" +"1539891200","1539893247","RU" +"1539893248","1539894271","UA" +"1539894272","1539895295","PL" +"1539895296","1539896319","EU" +"1539896320","1539899391","UA" +"1539899392","1539900415","RU" +"1539900416","1539901439","EU" +"1539901440","1539902463","RU" +"1539902464","1539903487","LV" +"1539903488","1539904511","PL" +"1539904512","1539905535","CZ" +"1539905536","1539907583","UA" +"1539907584","1539908607","EU" +"1539908608","1539910655","UA" +"1539910656","1539911679","PL" +"1539911680","1539913727","RU" +"1539913728","1539914751","CH" +"1539914752","1539915775","SE" +"1539915776","1539916799","RU" +"1539916800","1539917823","UA" +"1539917824","1539918847","RU" +"1539918848","1539920895","RO" +"1539920896","1539921919","UA" +"1539921920","1539922943","PL" +"1539922944","1539923967","SE" +"1539923968","1539924991","RU" +"1539924992","1539926015","DE" +"1539926016","1539927039","RU" +"1539927040","1539928063","UA" +"1539928064","1539930111","RU" +"1539930112","1539931135","PL" +"1539931136","1539932159","UA" +"1539932160","1539933183","DE" +"1539933184","1539934207","ES" +"1539934208","1539935231","RS" +"1539935232","1539936255","LV" +"1539936256","1539937279","UA" +"1539937280","1539938303","CH" +"1539938304","1539939327","PL" +"1539939328","1539940351","UA" +"1539940352","1539941375","GB" +"1539941376","1539942399","NL" +"1539942400","1539943423","UA" +"1539943424","1539944447","BG" +"1539944448","1539946495","UA" +"1539946496","1539947519","RU" +"1539947520","1539948543","UA" +"1539948544","1539949567","RO" +"1539949568","1539950591","MD" +"1539950592","1539950847","GB" +"1539950848","1539951103","RU" +"1539951104","1539951615","UA" +"1539951616","1539953663","RU" +"1539953664","1539954687","UA" +"1539954688","1539956735","RO" +"1539956736","1539957759","UA" +"1539957760","1539958783","RU" +"1539958784","1539962879","UA" +"1539962880","1539964927","RU" +"1539964928","1539965951","UA" +"1539965952","1539966975","RU" +"1539966976","1539967999","UA" +"1539968000","1539972095","RU" +"1539972096","1539973119","GB" +"1539973120","1539975167","RU" +"1539975168","1539976191","DE" +"1539976192","1539977215","RU" +"1539977216","1539978239","DE" +"1539978240","1539979263","CZ" +"1539979264","1539980287","UA" +"1539980288","1539981311","VG" +"1539981312","1539982335","SI" +"1539982336","1539983359","RU" +"1539983360","1539984383","UA" +"1539984384","1539985407","RU" +"1539985408","1539986431","SE" +"1539986432","1539987455","RU" +"1539987456","1539988479","RO" +"1539988480","1539990527","RU" +"1539990528","1539991551","PL" +"1539991552","1539993599","UA" +"1539993600","1539994623","FI" +"1539994624","1539995647","AT" +"1539995648","1539996671","CH" +"1539996672","1539997695","PL" +"1539997696","1539999743","UA" +"1539999744","1540000767","GB" +"1540000768","1540001791","RU" +"1540001792","1540002815","UA" +"1540002816","1540003839","RU" +"1540003840","1540004863","PL" +"1540004864","1540005887","SE" +"1540005888","1540006911","UA" +"1540006912","1540007935","RU" +"1540007936","1540008959","IL" +"1540008960","1540011007","PL" +"1540011008","1540014079","RU" +"1540014080","1540015103","PL" +"1540015104","1540016127","RU" +"1540016128","1540017151","DE" +"1540017152","1540019199","RU" +"1540019200","1540020223","UA" +"1540020224","1540022271","RU" +"1540022272","1540023295","GB" +"1540023296","1540024319","PL" +"1540024320","1540025343","RU" +"1540025344","1540026367","GB" +"1540026368","1540028415","UA" +"1540028416","1540029439","ES" +"1540029440","1540031487","RU" +"1540031488","1540032511","UA" +"1540032512","1540033535","RU" +"1540033536","1540034559","UA" +"1540034560","1540035583","PL" +"1540035584","1540036607","RU" +"1540036608","1540037631","UA" +"1540037632","1540038655","EE" +"1540038656","1540039679","FR" +"1540039680","1540040703","RU" +"1540040704","1540041727","SE" +"1540041728","1540042751","RU" +"1540042752","1540043775","UA" +"1540043776","1540044799","PL" +"1540044800","1540045823","GB" +"1540045824","1540046847","UA" +"1540046848","1540047871","RU" +"1540047872","1540048895","LV" +"1540048896","1540049919","GB" +"1540049920","1540050943","UA" +"1540050944","1540052991","RU" +"1540052992","1540055039","UA" +"1540055040","1540056063","NO" +"1540056064","1540057087","NL" +"1540057088","1540057343","PL" +"1540057344","1540057599","RU" +"1540057600","1540057855","US" +"1540057856","1540058111","UA" +"1540058112","1540059135","DE" +"1540059136","1540060159","UA" +"1540060160","1540061183","NO" +"1540061184","1540062207","A2" +"1540062208","1540063231","RU" +"1540063232","1540064255","NL" +"1540064256","1540065279","PL" +"1540065280","1540068351","UA" +"1540068352","1540069375","FR" +"1540069376","1540070399","RU" +"1540070400","1540071423","PL" +"1540071424","1540072447","SE" +"1540072448","1540073471","UA" +"1540073472","1540074495","RU" +"1540074496","1540075519","UZ" +"1540075520","1540077567","RU" +"1540077568","1540078591","FR" +"1540078592","1540081663","RU" +"1540081664","1540082687","DE" +"1540082688","1540083711","NO" +"1540083712","1540084735","RU" +"1540084736","1540085759","NL" +"1540085760","1540087807","PL" +"1540087808","1540092927","RU" +"1540092928","1540094975","PL" +"1540094976","1540095999","RU" +"1540096000","1540097023","SE" +"1540097024","1540099071","DE" +"1540099072","1540100095","UA" +"1540100096","1540103167","RU" +"1540103168","1540105215","DE" +"1540105216","1540110335","UA" +"1540110336","1540111359","RU" +"1540111360","1540112383","UA" +"1540112384","1540113407","LV" +"1540113408","1540115455","RU" +"1540115456","1540116479","UA" +"1540116480","1540117503","CH" +"1540117504","1540118527","UA" +"1540118528","1540119551","PL" +"1540119552","1540120575","UA" +"1540120576","1540124671","RU" +"1540124672","1540125695","UA" +"1540125696","1540126719","FR" +"1540126720","1540127743","UA" +"1540127744","1540128767","GB" +"1540128768","1540129791","RU" +"1540129792","1540130815","UA" +"1540130816","1540131839","RU" +"1540131840","1540132863","PL" +"1540132864","1540134911","RU" +"1540134912","1540135935","PL" +"1540135936","1540136959","BG" +"1540136960","1540137983","PL" +"1540137984","1540139007","RU" +"1540139008","1540140031","DE" +"1540140032","1540141055","GB" +"1540141056","1540142079","RU" +"1540142080","1540143103","UA" +"1540143104","1540144127","RU" +"1540144128","1540145151","AM" +"1540145152","1540145407","EU" +"1540145408","1540146175","AT" +"1540146176","1540147199","UA" +"1540147200","1540148223","RU" +"1540148224","1540149247","PL" +"1540149248","1540150271","GB" +"1540150272","1540151295","UA" +"1540151296","1540152319","AT" +"1540152320","1540153343","SE" +"1540153344","1540156415","RU" +"1540156416","1540157439","UZ" +"1540157440","1540158463","RU" +"1540158464","1540159487","GB" +"1540159488","1540160511","UA" +"1540160512","1540162559","RU" +"1540162560","1540163583","UA" +"1540163584","1540164607","RU" +"1540164608","1540165631","DE" +"1540165632","1540166655","UA" +"1540166656","1540167679","PL" +"1540167680","1540168703","RU" +"1540168704","1540169727","DE" +"1540169728","1540170751","NL" +"1540170752","1540171775","DE" +"1540171776","1540172799","GB" +"1540172800","1540173823","RU" +"1540173824","1540174847","KG" +"1540174848","1540175871","RU" +"1540175872","1540176895","DE" +"1540176896","1540177919","SE" +"1540177920","1540178943","UA" +"1540178944","1540179967","BA" +"1540179968","1540180991","PL" +"1540180992","1540182015","DE" +"1540182016","1540183039","IT" +"1540183040","1540184063","RU" +"1540184064","1540185087","PL" +"1540185088","1540186111","RU" +"1540186112","1540187135","NL" +"1540187136","1540188159","US" +"1540188160","1540189183","KZ" +"1540189184","1540190207","GB" +"1540190208","1540191231","PT" +"1540191232","1540192255","FR" +"1540192256","1540195327","RU" +"1540195328","1540198399","AM" +"1540198400","1540199423","RU" +"1540199424","1540200447","CH" +"1540200448","1540201471","IL" +"1540201472","1540202495","UA" +"1540202496","1540203519","RU" +"1540203520","1540204543","UA" +"1540204544","1540205567","RU" +"1540205568","1540206591","DE" +"1540206592","1540208639","RU" +"1540208640","1540209663","NO" +"1540209664","1540211711","RU" +"1540211712","1540212735","RO" +"1540212736","1540213759","RU" +"1540213760","1540214783","UA" +"1540214784","1540215807","RU" +"1540215808","1540216831","NL" +"1540216832","1540217855","UA" +"1540217856","1540218879","GB" +"1540218880","1540219903","RU" +"1540219904","1540220927","PL" +"1540220928","1540221951","NL" +"1540221952","1540223999","RU" +"1540224000","1540225023","PL" +"1540225024","1540226047","GB" +"1540226048","1540227071","RU" +"1540227072","1540227583","GB" +"1540227584","1540228095","RU" +"1540228096","1540228607","UA" +"1540228608","1540229119","PL" +"1540229120","1540229631","AT" +"1540229632","1540230143","NL" +"1540230144","1540232191","RU" +"1540232192","1540232703","BG" +"1540232704","1540233215","RU" +"1540233216","1540233727","CH" +"1540233728","1540234239","PL" +"1540234240","1540234751","DE" +"1540234752","1540235775","UA" +"1540235776","1540236287","NO" +"1540236288","1540236799","RO" +"1540236800","1540237311","PL" +"1540237312","1540238847","RO" +"1540238848","1540239359","DE" +"1540239360","1540239871","UA" +"1540239872","1540240383","FR" +"1540240384","1540240895","CH" +"1540240896","1540242431","RU" +"1540242432","1540242943","DE" +"1540242944","1540243455","RU" +"1540243456","1540243967","PL" +"1540243968","1540244479","RU" +"1540244480","1540244991","CH" +"1540244992","1540245503","DE" +"1540245504","1540246015","RU" +"1540246016","1540246527","IT" +"1540246528","1540247551","RO" +"1540247552","1540248063","NL" +"1540248064","1540248575","RO" +"1540248576","1540249087","GB" +"1540249088","1540249599","PL" +"1540249600","1540250111","KZ" +"1540250112","1540250367","PL" +"1540250368","1540250623","CZ" +"1540250624","1540251135","RU" +"1540251136","1540251647","GB" +"1540251648","1540252159","PL" +"1540252160","1540252671","DE" +"1540252672","1540253183","RU" +"1540253184","1540253695","AT" +"1540253696","1540254207","CH" +"1540254208","1540254719","RU" +"1540254720","1540255231","PL" +"1540255232","1540255743","UA" +"1540255744","1540256255","AT" +"1540256256","1540256767","PL" +"1540256768","1540257279","RU" +"1540257280","1540257791","GB" +"1540257792","1540258303","RU" +"1540258304","1540258815","IR" +"1540258816","1540259327","UA" +"1540259328","1540259839","RU" +"1540259840","1540260351","IT" +"1540260352","1540260863","RU" +"1540260864","1540261375","LT" +"1540261376","1540261887","SA" +"1540261888","1540262399","NL" +"1540262400","1540262911","BG" +"1540262912","1540263423","RO" +"1540263424","1540263935","DE" +"1540263936","1540264447","GB" +"1540264448","1540265983","RU" +"1540265984","1540266495","DE" +"1540266496","1540267007","PL" +"1540267008","1540267519","FR" +"1540267520","1540268543","RO" +"1540268544","1540269055","RU" +"1540269056","1540269567","DK" +"1540269568","1540270079","RU" +"1540270080","1540270591","GB" +"1540270592","1540271103","IL" +"1540271104","1540271615","PL" +"1540271616","1540272127","SE" +"1540272128","1540272639","GB" +"1540272640","1540273663","PL" +"1540273664","1540274175","GB" +"1540274176","1540274687","DE" +"1540274688","1540275199","UA" +"1540275200","1540275711","DE" +"1540275712","1540276223","GR" +"1540276224","1540276735","AT" +"1540276736","1540277247","RO" +"1540277248","1540277759","RU" +"1540277760","1540278271","FR" +"1540278272","1540278783","UA" +"1540278784","1540279807","RU" +"1540279808","1540280319","RO" +"1540280320","1540280831","MD" +"1540280832","1540281343","PL" +"1540281344","1540281855","UA" +"1540281856","1540282367","DE" +"1540282368","1540282879","RU" +"1540282880","1540283391","UA" +"1540283392","1540284415","RU" +"1540284416","1540284927","AT" +"1540284928","1540285439","UA" +"1540285440","1540285951","DE" +"1540285952","1540286463","RU" +"1540286464","1540286975","NL" +"1540286976","1540287487","GB" +"1540287488","1540288511","AT" +"1540288512","1540289535","RU" +"1540289536","1540290047","PL" +"1540290048","1540290559","NL" +"1540290560","1540291071","RU" +"1540291072","1540291583","BE" +"1540291584","1540292095","UA" +"1540292096","1540292607","RU" +"1540292608","1540293119","FR" +"1540293120","1540293631","DK" +"1540293632","1540295167","UA" +"1540295168","1540295679","PL" +"1540295680","1540296191","SA" +"1540296192","1540296703","PL" +"1540296704","1540297215","DE" +"1540297216","1540298239","FR" +"1540298240","1540298751","HR" +"1540298752","1540299263","RU" +"1540299264","1540299775","UA" +"1540299776","1540300287","KZ" +"1540300288","1540300799","RU" +"1540300800","1540301311","DK" +"1540301312","1540301823","IL" +"1540301824","1540302847","GB" +"1540302848","1540303871","RU" +"1540303872","1540304895","UA" +"1540304896","1540305407","PL" +"1540305408","1540305929","GB" +"1540305930","1540306431","PL" +"1540306432","1540306943","UA" +"1540306944","1540307455","GB" +"1540307456","1540307967","RU" +"1540307968","1540308479","UA" +"1540308480","1540308991","RS" +"1540308992","1540309503","PL" +"1540309504","1540310015","UA" +"1540310016","1540310527","PL" +"1540310528","1540313087","RU" +"1540313088","1540313599","SE" +"1540313600","1540315135","RU" +"1540315136","1540315647","UA" +"1540315648","1540316159","IL" +"1540316160","1540316415","EU" +"1540316416","1540316671","DE" +"1540316672","1540317183","RO" +"1540317184","1540317695","KG" +"1540317696","1540318207","UA" +"1540318208","1540318719","RU" +"1540318720","1540319231","RO" +"1540319232","1540320255","UA" +"1540320256","1540320767","RU" +"1540320768","1540321279","GB" +"1540321280","1540321791","SE" +"1540321792","1540322303","RU" +"1540322304","1540322815","UA" +"1540322816","1540323327","DE" +"1540323328","1540323839","RO" +"1540323840","1540324351","UA" +"1540324352","1540324863","RO" +"1540324864","1540325375","PL" +"1540325376","1540325887","DE" +"1540325888","1540326399","LI" +"1540326400","1540326911","RU" +"1540326912","1540327423","AT" +"1540327424","1540327935","RU" +"1540327936","1540328447","IR" +"1540328448","1540329983","RU" +"1540329984","1540330495","UA" +"1540330496","1540331007","PL" +"1540331008","1540331519","IT" +"1540331520","1540332031","GB" +"1540332032","1540332543","RU" +"1540332544","1540333055","PL" +"1540333056","1540333567","NO" +"1540333568","1540334079","RO" +"1540334080","1540334591","DE" +"1540334592","1540335103","RU" +"1540335104","1540336127","PL" +"1540336128","1540336639","RU" +"1540336640","1540337663","MC" +"1540337664","1540338175","FR" +"1540338176","1540339199","RU" +"1540339200","1540339711","UA" +"1540339712","1540340735","PL" +"1540340736","1540341247","CZ" +"1540341248","1540341759","BG" +"1540342272","1540342783","UA" +"1540342784","1540343295","ES" +"1540343296","1540343807","GB" +"1540343808","1540344831","PL" +"1540344832","1540345343","UA" +"1540345344","1540345855","IL" +"1540345856","1540346367","FR" +"1540346368","1540346879","UA" +"1540346880","1540347391","GB" +"1540347392","1540347903","DK" +"1540347904","1540348415","RO" +"1540348416","1540348927","UA" +"1540348928","1540349439","GB" +"1540349440","1540349951","AT" +"1540349952","1540350463","UA" +"1540350464","1540350975","NO" +"1540350976","1540351487","DK" +"1540351488","1540351999","RO" +"1540352000","1540352511","NL" +"1540352512","1540353023","RU" +"1540353024","1540353535","GR" +"1540353536","1540354047","RU" +"1540354048","1540354559","IL" +"1540354560","1540355071","PL" +"1540355072","1540355583","UA" +"1540355584","1540356607","RU" +"1540356608","1540357119","DE" +"1540357120","1540357631","RU" +"1540357632","1540358143","FR" +"1540358144","1540358399","RU" +"1540358400","1540358655","GB" +"1540358656","1540358911","SE" +"1540358912","1540359167","GB" +"1540359168","1540359423","SA" +"1540359424","1540359679","DE" +"1540359680","1540359935","GB" +"1540359936","1540360191","AT" +"1540360192","1540360447","NO" +"1540360448","1540360703","FR" +"1540360704","1540360959","PL" +"1540360960","1540361215","GB" +"1540361216","1540361471","BE" +"1540361472","1540361727","DE" +"1540361728","1540361983","IT" +"1540361984","1540362239","EE" +"1540362240","1540362495","RU" +"1540362496","1540363007","DE" +"1540363008","1540363263","FR" +"1540363264","1540363519","RU" +"1540363520","1540363775","GB" +"1540363776","1540364031","IS" +"1540364032","1540364287","RU" +"1540364288","1540364543","NO" +"1540364544","1540364799","UA" +"1540364800","1540365055","EE" +"1540365056","1540365311","SI" +"1540365312","1540365567","GB" +"1540365568","1540365823","RU" +"1540365824","1540366079","CH" +"1540366080","1540366335","IE" +"1540366336","1540366591","PL" +"1540366592","1540366847","RU" +"1540366848","1540367103","AT" +"1540367104","1540367359","RU" +"1540367360","1540367615","HU" +"1540367616","1540367871","BE" +"1540367872","1540368127","DE" +"1540368128","1540368383","RU" +"1540368384","1540368639","FR" +"1540368640","1540368895","SK" +"1540368896","1540369407","RU" +"1540369408","1540369663","PL" +"1540369664","1540369919","DE" +"1540369920","1540370175","UA" +"1540370176","1540370431","DE" +"1540370432","1540370687","LB" +"1540370688","1540370943","NL" +"1540370944","1540371199","PL" +"1540371200","1540371455","BE" +"1540371456","1540371711","UA" +"1540371712","1540371967","GB" +"1540371968","1540372223","NO" +"1540372224","1540372479","PL" +"1540372480","1540372735","EU" +"1540372736","1540372991","GR" +"1540372992","1540373247","DE" +"1540373248","1540373503","UA" +"1540373504","1540373759","NL" +"1540373760","1540374015","TR" +"1540374016","1540374271","NL" +"1540374272","1540374527","BG" +"1540374528","1540374783","RU" +"1540374784","1540375039","UA" +"1540375040","1540375295","DE" +"1540375296","1540375551","GB" +"1540375552","1540375807","DE" +"1540375808","1540376063","NL" +"1540376064","1540376319","TR" +"1540376320","1540376575","DK" +"1540376576","1540376831","PL" +"1540376832","1540377087","RU" +"1540377088","1540377343","DE" +"1540377344","1540377599","RO" +"1540377600","1540377855","AM" +"1540377856","1540378111","ES" +"1540378112","1540378367","PL" +"1540378368","1540378623","CH" +"1540378624","1540378879","AT" +"1540378880","1540379135","SE" +"1540379136","1540379391","CH" +"1540379392","1540379647","DE" +"1540379648","1540379903","RU" +"1540379904","1540380159","EU" +"1540380160","1540380415","IL" +"1540380416","1540380671","NL" +"1540380672","1540380927","SI" +"1540380928","1540381183","RS" +"1540381184","1540381439","RO" +"1540381440","1540381695","AT" +"1540381696","1540381951","RO" +"1540381952","1540382207","PL" +"1540382208","1540382463","UA" +"1540382464","1540382719","GB" +"1540382720","1540382975","LB" +"1540382976","1540383231","UA" +"1540383232","1540383487","AT" +"1540383488","1540383743","GB" +"1540383744","1540383999","RO" +"1540384000","1540384255","SI" +"1540384256","1540384511","FR" +"1540384512","1540384767","SE" +"1540384768","1540385023","HR" +"1540385024","1540385279","GB" +"1540385280","1540385535","PL" +"1540385536","1540385791","DE" +"1540385792","1540386303","FR" +"1540386304","1540386559","NL" +"1540386560","1540386815","GB" +"1540386816","1540387071","NL" +"1540387072","1540387327","RU" +"1540387328","1540387583","GB" +"1540387584","1540388095","UA" +"1540388096","1540388351","GB" +"1540388352","1540388607","IL" +"1540388608","1540388863","RU" +"1540388864","1540389119","RO" +"1540389120","1540389375","RU" +"1540389376","1540389631","GB" +"1540389632","1540389887","RO" +"1540389888","1540390143","GB" +"1540390144","1540390399","SI" +"1540390400","1540390655","RU" +"1540390656","1540390911","UA" +"1540390912","1540391167","SA" +"1540391168","1540391423","IL" +"1540391424","1540391679","CH" +"1540391680","1540391935","NL" +"1540391936","1540392191","RU" +"1540392192","1540392447","PL" +"1540392448","1540392703","RU" +"1540392704","1540392959","PL" +"1540392960","1540393471","GB" +"1540393472","1540393727","UA" +"1540393728","1540394239","IL" +"1540394240","1540394495","GB" +"1540394496","1540394751","RO" +"1540394752","1540395007","DK" +"1540395008","1540395263","GE" +"1540395264","1540395519","UA" +"1540395520","1540395775","GB" +"1540395776","1540396031","IL" +"1540396032","1540396287","NO" +"1540396288","1540396543","AM" +"1540396544","1540396799","PL" +"1540396800","1540397055","RU" +"1540397056","1540397311","IT" +"1540397312","1540397823","UA" +"1540397824","1540398079","DE" +"1540398080","1540398335","SA" +"1540398336","1540398591","DK" +"1540398592","1540399359","DE" +"1540399360","1540399871","RU" +"1540399872","1540400127","GB" +"1540400128","1540400383","NL" +"1540400384","1540400639","IR" +"1540400640","1540400895","RU" +"1540400896","1540401151","NL" +"1540401152","1540401407","SI" +"1540401408","1540401663","AT" +"1540401664","1540401919","GB" +"1540401920","1540402175","RU" +"1540402176","1540402431","FR" +"1540402432","1540402687","CH" +"1540402688","1540402943","SE" +"1540402944","1540403199","NL" +"1540403200","1540403455","AT" +"1540403456","1540403711","GB" +"1540403712","1540404223","RO" +"1540404224","1540404479","CH" +"1540404480","1540404735","FR" +"1540404736","1540404991","PL" +"1540404992","1540405247","RU" +"1540405248","1540405503","GB" +"1540405504","1540405759","RU" +"1540405760","1540406015","PL" +"1540406016","1540406271","RU" +"1540406272","1540406527","SE" +"1540406528","1540407039","PL" +"1540407040","1540407807","DE" +"1540407808","1540408063","UA" +"1540408064","1540408319","IT" +"1540408320","1540408575","NL" +"1540408576","1540408831","HR" +"1540408832","1540409087","UA" +"1540409088","1540409343","TR" +"1540409344","1540409599","SI" +"1540409600","1540409855","AT" +"1540409856","1540410111","DE" +"1540410112","1540410367","KW" +"1540410368","1540410623","CH" +"1540410624","1540410879","RU" +"1540410880","1540411135","TR" +"1540411136","1540411391","SG" +"1540411392","1540411647","RU" +"1540411648","1540411903","FR" +"1540411904","1540412159","RU" +"1540412160","1540412415","BE" +"1540412416","1540412671","DE" +"1540412672","1540412927","RO" +"1540412928","1540413183","FR" +"1540413184","1540413439","RO" +"1540413440","1540413695","RU" +"1540413696","1540413951","AT" +"1540413952","1540414207","IL" +"1540414208","1540414463","GB" +"1540414464","1540414719","BE" +"1540414720","1540414975","SE" +"1540414976","1540415231","FR" +"1540415232","1540415487","RO" +"1540415488","1540415743","FR" +"1540415744","1540415999","SI" +"1540416000","1540416255","FR" +"1540416256","1540416511","CH" +"1540416512","1540416767","RU" +"1540416768","1540417023","NL" +"1540417024","1540417279","RU" +"1540417280","1540417535","UA" +"1540417536","1540417791","RU" +"1540417792","1540418047","HR" +"1540418048","1540418559","RO" +"1540418560","1540418815","AT" +"1540418816","1540419071","FR" +"1540419072","1540419327","RU" +"1540419328","1540419839","GB" +"1540419840","1540420095","NL" +"1540420096","1540420607","GB" +"1540420608","1540420863","DE" +"1540420864","1540421119","GB" +"1540421120","1540421375","RU" +"1540421376","1540421631","PL" +"1540421632","1540422143","RU" +"1540422144","1540422399","PL" +"1540422400","1540422655","UA" +"1540422656","1540422911","GB" +"1540422912","1540423423","RU" +"1540423424","1540423679","BA" +"1540423680","1540423935","SE" +"1540423936","1540424191","UA" +"1540424192","1540424447","AT" +"1540424448","1540424703","ES" +"1540424704","1540424959","PL" +"1540424960","1540425215","RO" +"1540425216","1540425471","US" +"1540425472","1540425727","NL" +"1540425728","1540425983","BG" +"1540425984","1540426239","RU" +"1540426240","1540426495","IE" +"1540426496","1540426751","UA" +"1540426752","1540427263","NL" +"1540427264","1540427519","RU" +"1540427520","1540427775","FR" +"1540427776","1540428287","RU" +"1540428288","1540428543","SI" +"1540428544","1540428799","FR" +"1540428800","1540429055","PL" +"1540429056","1540429311","BG" +"1540429312","1540429823","RO" +"1540429824","1540430079","UA" +"1540430080","1540430335","FR" +"1540430336","1540430591","DE" +"1540430592","1540430847","PL" +"1540430848","1540431103","CH" +"1540431104","1540431359","FI" +"1540431360","1540431615","NO" +"1540431616","1540431871","GB" +"1540431872","1540432127","HR" +"1540432128","1540432383","AT" +"1540432384","1540432639","GB" +"1540432640","1540432895","FR" +"1540432896","1540433151","UA" +"1540433152","1540433407","GB" +"1540433408","1540433663","AM" +"1540433664","1540433919","DK" +"1540433920","1540434175","GB" +"1540434176","1540434431","CH" +"1540434432","1540434687","DE" +"1540434688","1540434943","GB" +"1540434944","1540435199","FR" +"1540435200","1540435455","RO" +"1540435456","1540435967","GR" +"1540435968","1540436223","RU" +"1540436224","1540436479","SI" +"1540436480","1540436735","GB" +"1540436736","1540436991","UA" +"1540436992","1540437247","DE" +"1540437248","1540437503","CH" +"1540437504","1540438015","UA" +"1540438016","1540438271","PL" +"1540438272","1540438527","US" +"1540438528","1540439039","RU" +"1540439040","1540439295","GB" +"1540439296","1540439551","RO" +"1540439552","1540440063","PL" +"1540440064","1540440319","UA" +"1540440320","1540440575","RU" +"1540440576","1540440831","MD" +"1540440832","1540441087","RU" +"1540441088","1540441343","PL" +"1540441344","1540441855","RU" +"1540441856","1540442111","GB" +"1540442112","1540442367","RU" +"1540442368","1540442623","GB" +"1540442624","1540442879","IE" +"1540442880","1540443135","AT" +"1540443136","1540443647","RU" +"1540443648","1540443903","FR" +"1540443904","1540444159","GB" +"1540444160","1540444415","RU" +"1540444416","1540444671","DE" +"1540444672","1540445183","GB" +"1540445184","1540445439","CH" +"1540445440","1540445695","RU" +"1540445696","1540445951","GB" +"1540445952","1540446207","DE" +"1540446208","1540446463","NO" +"1540446464","1540446719","AT" +"1540446720","1540446975","UA" +"1540446976","1540447231","RU" +"1540447232","1540447487","DE" +"1540447488","1540447743","PL" +"1540447744","1540447999","RU" +"1540448000","1540448255","PL" +"1540448256","1540448511","UA" +"1540448512","1540448767","IT" +"1540448768","1540449023","CH" +"1540449024","1540449279","DE" +"1540449280","1540449535","UA" +"1540449536","1540449791","CZ" +"1540449792","1540450047","RO" +"1540450048","1540450303","DE" +"1540450304","1540450559","GB" +"1540450560","1540450815","AM" +"1540450816","1540451071","IE" +"1540451072","1540451327","FR" +"1540451328","1540451583","ES" +"1540451584","1540451839","RO" +"1540451840","1540452095","NL" +"1540452096","1540452351","CH" +"1540452352","1540452607","AT" +"1540452608","1540452863","IL" +"1540452864","1540453119","HU" +"1540453120","1540453375","RU" +"1540453376","1540453631","PL" +"1540453632","1540453887","FR" +"1540453888","1540454143","UA" +"1540454144","1540454399","RU" +"1540454400","1540454911","DE" +"1540454912","1540455167","RU" +"1540455168","1540455423","RO" +"1540455424","1540455679","RU" +"1540455680","1540455935","GB" +"1540455936","1540456191","UA" +"1540456192","1540457215","RU" +"1540457216","1540457471","GE" +"1540457472","1540457727","SI" +"1540457728","1540457983","BE" +"1540457984","1540458239","CH" +"1540458240","1540458495","ES" +"1540458496","1540458751","HR" +"1540458752","1540459007","NL" +"1540459008","1540459519","UA" +"1540459520","1540459775","GB" +"1540459776","1540460031","PL" +"1540460032","1540460543","NL" +"1540460544","1540460799","GB" +"1540460800","1540461055","SI" +"1540461056","1540461311","BG" +"1540461312","1540461823","RU" +"1540461824","1540462079","RO" +"1540462080","1540462335","SI" +"1540462336","1540462591","UA" +"1540462592","1540463103","PL" +"1540463104","1540463359","FR" +"1540463360","1540463615","PL" +"1540463616","1540463871","DK" +"1540463872","1540464127","UA" +"1540464128","1540464383","CH" +"1540464384","1540464895","DE" +"1540464896","1540465407","GB" +"1540465408","1540465663","ES" +"1540465664","1540465919","NL" +"1540465920","1540466175","RU" +"1540466176","1540466431","DK" +"1540466432","1540466687","RU" +"1540466688","1540466943","NL" +"1540466944","1540467455","CH" +"1540467456","1540467711","RO" +"1540467712","1540467967","KW" +"1540467968","1540468223","GR" +"1540468224","1540468735","FR" +"1540468736","1540468991","UA" +"1540468992","1540469247","PL" +"1540469248","1540469503","GB" +"1540469504","1540469759","RO" +"1540469760","1540470015","PL" +"1540470016","1540470271","SI" +"1540470272","1540470527","IL" +"1540470528","1540471039","RU" +"1540471040","1540471295","DE" +"1540471296","1540471551","RU" +"1540471552","1540471807","GB" +"1540471808","1540472063","SI" +"1540472064","1540472319","RO" +"1540472320","1540472575","DK" +"1540472576","1540472831","FR" +"1540472832","1540473087","NL" +"1540473088","1540473343","UA" +"1540473344","1540473599","IT" +"1540473600","1540473855","RO" +"1540473856","1540474367","GB" +"1540474368","1540474623","RO" +"1540474624","1540474879","PL" +"1540474880","1540475135","GB" +"1540475136","1540475903","UA" +"1540475904","1540476159","CH" +"1540476160","1540476415","DE" +"1540476416","1540476671","UA" +"1540476672","1540476927","SI" +"1540476928","1540477183","NL" +"1540477184","1540477439","RO" +"1540477440","1540477695","UA" +"1540477696","1540477951","DE" +"1540477952","1540478207","NO" +"1540478208","1540478463","NL" +"1540478464","1540478719","UA" +"1540478720","1540478975","SA" +"1540478976","1540479231","HR" +"1540479232","1540479487","GB" +"1540479488","1540479743","RU" +"1540479744","1540479999","AT" +"1540480000","1540480255","GB" +"1540480256","1540480767","PL" +"1540480768","1540481023","GB" +"1540481024","1540481279","LT" +"1540481280","1540481535","GB" +"1540481536","1540481791","UA" +"1540481792","1540482047","RU" +"1540482048","1540482303","DK" +"1540482304","1540482559","FR" +"1540482560","1540482815","CH" +"1540482816","1540483071","DE" +"1540483072","1540483327","SE" +"1540483328","1540483839","RU" +"1540483840","1540484095","UA" +"1540484096","1540484351","DK" +"1540484352","1540484607","SI" +"1540484608","1540484863","GB" +"1540484864","1540485119","UA" +"1540485120","1540485375","SE" +"1540485376","1540485631","RO" +"1540485632","1540485887","IR" +"1540485888","1540486143","ES" +"1540486144","1540486399","GB" +"1540486400","1540486655","FR" +"1540486656","1540486911","GB" +"1540486912","1540487167","SK" +"1540487168","1540487423","PS" +"1540487424","1540487679","UA" +"1540487680","1540487935","DE" +"1540487936","1540488191","SI" +"1540488192","1540488447","GB" +"1540488448","1540488703","SA" +"1540488704","1540488959","DE" +"1540488960","1540489215","RO" +"1540489216","1540491263","RU" +"1540491264","1540492287","UA" +"1540492288","1540493311","PL" +"1540493312","1540494335","CZ" +"1540494336","1540495359","UA" +"1540495360","1540496383","RU" +"1540496384","1540499455","UA" +"1540499456","1540500479","AM" +"1540500480","1540501503","RU" +"1540501504","1540502527","PL" +"1540502528","1540503551","RU" +"1540503552","1540504575","NL" +"1540504576","1540505599","SE" +"1540505600","1540506623","RO" +"1540506624","1540507647","GB" +"1540507648","1540508671","RU" +"1540508672","1540509695","UA" +"1540509696","1540510719","RO" +"1540510720","1540511743","RU" +"1540511744","1540512767","BG" +"1540512768","1540513791","RU" +"1540513792","1540514815","UA" +"1540514816","1540515839","GB" +"1540515840","1540516863","RU" +"1540516864","1540517887","UA" +"1540517888","1540518911","RU" +"1540518912","1540520959","UA" +"1540520960","1540521983","RU" +"1540521984","1540523007","PL" +"1540523008","1540524031","RU" +"1540524032","1540525055","AL" +"1540525056","1540526079","AT" +"1540526080","1540528127","UA" +"1540528128","1540529151","RU" +"1540529152","1540530175","UA" +"1540530176","1540531199","RU" +"1540531200","1540532223","UA" +"1540532224","1540533247","RU" +"1540533248","1540534271","KZ" +"1540534272","1540535295","UA" +"1540535296","1540536319","SK" +"1540536320","1540537343","RU" +"1540537344","1540538367","UA" +"1540538368","1540542463","RU" +"1540542464","1540543487","PL" +"1540543488","1540544511","DE" +"1540544512","1540545535","RU" +"1540545536","1540546559","AT" +"1540546560","1540548607","RU" +"1540548608","1540549631","IE" +"1540549632","1540552703","PL" +"1540552704","1540553727","UA" +"1540553728","1540555775","RU" +"1540555776","1540556799","UZ" +"1540556800","1540557823","GB" +"1540557824","1540559871","UA" +"1540559872","1540562943","RU" +"1540562944","1540563967","AT" +"1540563968","1540564991","RU" +"1540564992","1540566015","DE" +"1540566016","1540567039","RU" +"1540567040","1540568063","MD" +"1540568064","1540572159","RU" +"1540572160","1540573183","UA" +"1540573184","1540574207","NL" +"1540574208","1540576255","RU" +"1540576256","1540577279","PL" +"1540577280","1540578303","RO" +"1540578304","1540579327","RU" +"1540579328","1540580351","IE" +"1540580352","1540581375","PL" +"1540581376","1540582399","RU" +"1540582400","1540583423","BG" +"1540583424","1540584447","DE" +"1540584448","1540586495","UA" +"1540586496","1540588543","RU" +"1540588544","1540589567","UA" +"1540589568","1540593663","RU" +"1540593664","1540594687","GB" +"1540594688","1540595711","IT" +"1540595712","1540596735","UZ" +"1540596736","1540597759","FR" +"1540597760","1540598783","SE" +"1540598784","1540600831","UA" +"1540600832","1540602879","RU" +"1540602880","1540603903","BG" +"1540603904","1540605951","RU" +"1540605952","1540606975","MD" +"1540606976","1540607999","UA" +"1540608000","1540609023","RU" +"1540609024","1540610047","UA" +"1540610048","1540611071","RU" +"1540611072","1540612095","PL" +"1540612096","1540613119","TR" +"1540613120","1540614143","RU" +"1540614144","1540615167","BG" +"1540615168","1540616191","RU" +"1540616192","1540617215","AT" +"1540617216","1540618239","LT" +"1540618240","1540619263","UA" +"1540619264","1540620287","PL" +"1540620288","1540620543","NL" +"1540620544","1540620799","LB" +"1540620800","1540621055","PL" +"1540621056","1540621311","DE" +"1540621312","1540621567","BA" +"1540621568","1540621823","PL" +"1540621824","1540622335","RU" +"1540622336","1540622591","KW" +"1540622592","1540622847","PL" +"1540622848","1540622848","RU" +"1540622849","1540622849","GB" +"1540622850","1540622853","RU" +"1540622854","1540622854","GB" +"1540622855","1540623103","RU" +"1540623104","1540623359","SE" +"1540623360","1540623615","GB" +"1540623616","1540623871","BG" +"1540623872","1540624127","RO" +"1540624128","1540624383","RS" +"1540624384","1540624639","IR" +"1540624640","1540624895","BG" +"1540624896","1540625151","GB" +"1540625152","1540625407","IR" +"1540625408","1540625663","RU" +"1540625664","1540625919","FR" +"1540625920","1540626175","UA" +"1540626176","1540626431","RO" +"1540626432","1540626687","SI" +"1540626688","1540626943","PL" +"1540626944","1540627199","FR" +"1540627200","1540627455","PL" +"1540627456","1540627711","DK" +"1540627712","1540627967","CH" +"1540627968","1540628223","PL" +"1540628224","1540628479","HR" +"1540628480","1540628735","KW" +"1540628736","1540628991","PL" +"1540628992","1540629247","UA" +"1540629248","1540629503","RO" +"1540629504","1540629759","DK" +"1540629760","1540630015","BG" +"1540630016","1540630271","DE" +"1540630272","1540630527","RO" +"1540630528","1540630783","CH" +"1540630784","1540631039","RU" +"1540631040","1540631295","NL" +"1540631296","1540631551","CH" +"1540631552","1540631807","HR" +"1540631808","1540632063","LV" +"1540632064","1540632319","AT" +"1540632320","1540632575","RU" +"1540632576","1540632831","DK" +"1540632832","1540633087","GB" +"1540633088","1540633343","RU" +"1540633344","1540633599","CH" +"1540633600","1540633855","RO" +"1540633856","1540634111","AE" +"1540634112","1540634367","GB" +"1540634368","1540634623","FR" +"1540634624","1540634879","UA" +"1540634880","1540635135","RU" +"1540635136","1540635391","FR" +"1540635392","1540635647","RO" +"1540635648","1540636159","RU" +"1540636160","1540636415","RO" +"1540636416","1540636671","LV" +"1540636672","1540636927","RU" +"1540636928","1540637183","UA" +"1540637184","1540637439","RO" +"1540637440","1540637695","SA" +"1540637696","1540637951","RU" +"1540637952","1540638207","RS" +"1540638208","1540638463","RO" +"1540638464","1540638719","AM" +"1540638720","1540638975","UA" +"1540638976","1540639487","RO" +"1540639488","1540639491","CH" +"1540639492","1540639492","EU" +"1540639493","1540639743","CH" +"1540639744","1540639999","IL" +"1540640000","1540640255","CH" +"1540640256","1540640511","FR" +"1540640512","1540640767","ES" +"1540640768","1540641023","UA" +"1540641024","1540641535","RU" +"1540641536","1540641791","DE" +"1540641792","1540642047","PL" +"1540642048","1540642303","DE" +"1540642304","1540642559","PL" +"1540642560","1540642815","DE" +"1540642816","1540643071","IE" +"1540643072","1540643327","UZ" +"1540643328","1540643583","GB" +"1540643584","1540643839","CH" +"1540643840","1540644095","NO" +"1540644096","1540644607","GB" +"1540644608","1540644863","DE" +"1540644864","1540645119","NL" +"1540645120","1540645375","RU" +"1540645376","1540645631","BE" +"1540645632","1540645887","NL" +"1540645888","1540646143","PL" +"1540646144","1540646399","RO" +"1540646400","1540646655","PS" +"1540646656","1540646911","SE" +"1540646912","1540647167","RU" +"1540647168","1540647423","GB" +"1540647424","1540647679","RU" +"1540647680","1540647935","CY" +"1540647936","1540648191","GB" +"1540648192","1540648447","CH" +"1540648448","1540648959","RO" +"1540648960","1540649215","SK" +"1540649216","1540649471","DE" +"1540649472","1540649727","IL" +"1540649728","1540649983","GB" +"1540649984","1540650239","FR" +"1540650240","1540650495","CH" +"1540650496","1540650751","RU" +"1540650752","1540651007","FR" +"1540651008","1540651263","RO" +"1540651264","1540651519","CH" +"1540651520","1540651775","MK" +"1540651776","1540652031","RU" +"1540652032","1540652543","UA" +"1540652544","1540652799","TR" +"1540652800","1540653055","PL" +"1540653056","1540653311","FR" +"1540653312","1540653567","DK" +"1540653568","1540653823","DE" +"1540653824","1540654079","GB" +"1540654080","1540654335","EU" +"1540654336","1540654591","RU" +"1540654592","1540654847","SI" +"1540654848","1540655103","RU" +"1540655104","1540655359","AT" +"1540655360","1540655615","RU" +"1540655616","1540655871","GB" +"1540655872","1540656383","NL" +"1540656384","1540656895","RU" +"1540656896","1540657151","RO" +"1540657152","1540657407","DE" +"1540657408","1540657663","CY" +"1540657664","1540657919","RU" +"1540657920","1540658175","FR" +"1540658176","1540658431","RO" +"1540658432","1540659199","RU" +"1540659200","1540659455","FR" +"1540659456","1540659967","UA" +"1540659968","1540660223","PL" +"1540660224","1540660479","RU" +"1540660480","1540660735","FR" +"1540660736","1540660991","RU" +"1540660992","1540661247","RO" +"1540661248","1540661503","GB" +"1540661504","1540662015","RO" +"1540662016","1540662271","BG" +"1540662272","1540662527","RO" +"1540662528","1540662783","PL" +"1540662784","1540663039","GB" +"1540663040","1540663295","IT" +"1540663296","1540663551","RU" +"1540663552","1540664063","PL" +"1540664064","1540664319","RU" +"1540664320","1540664575","PL" +"1540664576","1540665087","UA" +"1540665088","1540665343","ES" +"1540665344","1540665599","NL" +"1540665600","1540665855","UA" +"1540665856","1540666111","TR" +"1540666112","1540666367","RU" +"1540666368","1540666623","UZ" +"1540666624","1540666879","DE" +"1540666880","1540667135","GB" +"1540667136","1540667647","NL" +"1540667648","1540668159","BE" +"1540668160","1540668415","AT" +"1540668416","1540668671","SE" +"1540668672","1540668927","IL" +"1540668928","1540669695","RO" +"1540669696","1540669951","KZ" +"1540669952","1540670207","UA" +"1540670208","1540670463","RU" +"1540670464","1540670719","CH" +"1540670720","1540670975","RU" +"1540670976","1540671231","LV" +"1540671232","1540671487","SI" +"1540671488","1540671743","CH" +"1540671744","1540671999","BG" +"1540672000","1540672255","FR" +"1540672256","1540672511","UA" +"1540672512","1540672767","DE" +"1540672768","1540673023","FR" +"1540673024","1540673279","DE" +"1540673280","1540673535","SE" +"1540673536","1540673791","SI" +"1540673792","1540674047","SE" +"1540674048","1540674303","NL" +"1540674304","1540674559","FR" +"1540674560","1540674815","GB" +"1540674816","1540675071","GE" +"1540675072","1540675327","UA" +"1540675328","1540675583","NL" +"1540675584","1540675839","GB" +"1540675840","1540676351","RU" +"1540676352","1540676607","IT" +"1540676608","1540677119","RU" +"1540677120","1540677375","GB" +"1540677376","1540677631","PL" +"1540677632","1540677887","DK" +"1540677888","1540678143","GE" +"1540678144","1540678399","RU" +"1540678400","1540678655","RO" +"1540678656","1540678911","SE" +"1540678912","1540679167","GB" +"1540679168","1540679423","RU" +"1540679424","1540679679","PL" +"1540679680","1540679935","LT" +"1540679936","1540680191","BG" +"1540680192","1540680447","CH" +"1540680448","1540680703","BG" +"1540680704","1540680959","FR" +"1540680960","1540681215","NL" +"1540681216","1540681471","FR" +"1540681472","1540681727","RU" +"1540681728","1540681983","TR" +"1540681984","1540682239","IT" +"1540682240","1540682495","PL" +"1540682496","1540682751","DE" +"1540682752","1540683007","EE" +"1540683008","1540683263","DE" +"1540683264","1540683775","HR" +"1540683776","1540684031","UA" +"1540684032","1540684287","IT" +"1540684288","1540684543","HU" +"1540684544","1540684799","SI" +"1540684800","1540685055","IR" +"1540685056","1540685311","UA" +"1540685312","1540685567","RO" +"1540685568","1540685823","FR" +"1540685824","1540686079","SE" +"1540686080","1540686335","TR" +"1540686336","1540686591","CH" +"1540686592","1540686847","GB" +"1540686848","1540687103","CH" +"1540687104","1540687359","RU" +"1540687360","1540687615","AT" +"1540687616","1540687871","IT" +"1540687872","1540688127","UA" +"1540688128","1540688383","HU" +"1540688384","1540688639","CZ" +"1540688640","1540688895","RO" +"1540688896","1540689151","BG" +"1540689152","1540689407","NL" +"1540689408","1540689663","RU" +"1540689664","1540689919","FR" +"1540689920","1540690175","RO" +"1540690176","1540690431","DK" +"1540690432","1540690687","SA" +"1540690688","1540690943","RO" +"1540690944","1540691711","DE" +"1540691712","1540691967","RU" +"1540691968","1540692223","CH" +"1540692224","1540692479","FR" +"1540692480","1540692735","BE" +"1540692736","1540692991","DE" +"1540692992","1540693247","GB" +"1540693248","1540693503","RU" +"1540693504","1540693759","ES" +"1540693760","1540694015","UZ" +"1540694016","1540694271","CH" +"1540694272","1540694527","UA" +"1540694528","1540695039","RO" +"1540695040","1540695295","DE" +"1540695296","1540695551","NL" +"1540695552","1540695807","PL" +"1540695808","1540696063","RU" +"1540696064","1540696319","HU" +"1540696320","1540696575","FR" +"1540696576","1540696831","GB" +"1540696832","1540697087","EE" +"1540697088","1540697343","RU" +"1540697344","1540697599","GB" +"1540697600","1540697855","ES" +"1540697856","1540698111","NO" +"1540698112","1540698367","DE" +"1540698368","1540698623","IE" +"1540698624","1540698879","EU" +"1540698880","1540699135","RU" +"1540699136","1540699391","GR" +"1540699392","1540699647","NL" +"1540699648","1540699903","AT" +"1540699904","1540700159","RO" +"1540700160","1540700415","DE" +"1540700416","1540700671","RO" +"1540700672","1540700927","PL" +"1540700928","1540701183","UA" +"1540701184","1540701695","DE" +"1540701696","1540701951","UA" +"1540701952","1540702207","GB" +"1540702208","1540702463","PL" +"1540702464","1540702719","PT" +"1540702720","1540702975","DK" +"1540702976","1540703231","RU" +"1540703232","1540703487","GB" +"1540703488","1540703743","NL" +"1540703744","1540703999","DK" +"1540704000","1540704255","PL" +"1540704256","1540704511","KZ" +"1540704512","1540704767","IE" +"1540704768","1540705023","UA" +"1540705024","1540705279","HU" +"1540705280","1540705535","RO" +"1540705536","1540705791","AT" +"1540705792","1540706047","NL" +"1540706048","1540706303","FR" +"1540706304","1540706559","SI" +"1540706560","1540706815","GB" +"1540706816","1540707071","FR" +"1540707072","1540707327","AT" +"1540707328","1540707583","HR" +"1540707584","1540707839","NL" +"1540707840","1540708095","MD" +"1540708096","1540708351","RU" +"1540708352","1540708607","PL" +"1540708608","1540708863","SI" +"1540708864","1540709119","FR" +"1540709120","1540709375","DE" +"1540709376","1540709631","UA" +"1540709632","1540709887","KZ" +"1540709888","1540710143","UA" +"1540710144","1540710399","NL" +"1540710400","1540710655","PL" +"1540710656","1540710911","FI" +"1540710912","1540711423","DE" +"1540711424","1540711679","CH" +"1540711680","1540711935","RO" +"1540711936","1540712191","FR" +"1540712192","1540712447","DE" +"1540712448","1540712703","RU" +"1540712704","1540713215","LV" +"1540713216","1540713727","PL" +"1540713728","1540713983","RU" +"1540713984","1540714239","GB" +"1540714240","1540714495","RO" +"1540714496","1540714751","NL" +"1540714752","1540715263","RU" +"1540715520","1540715775","DE" +"1540715776","1540716031","UA" +"1540716032","1540716287","PL" +"1540716288","1540716543","UA" +"1540716544","1540716799","RU" +"1540716800","1540717055","UA" +"1540717056","1540717311","CZ" +"1540717312","1540717823","PL" +"1540717824","1540718079","UA" +"1540718080","1540718335","RU" +"1540718336","1540718591","NO" +"1540718592","1540718847","CH" +"1540718848","1540719103","IT" +"1540719104","1540719359","RU" +"1540719360","1540719615","SI" +"1540719616","1540719871","AT" +"1540719872","1540720127","CH" +"1540720128","1540720383","NL" +"1540720384","1540720639","RO" +"1540720640","1540720895","CH" +"1540720896","1540721151","PL" +"1540721152","1540721663","RU" +"1540721664","1540721919","GB" +"1540721920","1540722431","RU" +"1540722432","1540722687","CZ" +"1540722688","1540722943","RU" +"1540722944","1540723455","FR" +"1540723456","1540723711","SI" +"1540723712","1540723967","RU" +"1540723968","1540724223","UA" +"1540724224","1540724479","HU" +"1540724480","1540724735","DE" +"1540724736","1540724991","CH" +"1540724992","1540725247","IT" +"1540725248","1540725503","UA" +"1540725504","1540725759","SE" +"1540725760","1540726015","PL" +"1540726016","1540726271","TT" +"1540726272","1540726527","RU" +"1540726528","1540726783","CH" +"1540726784","1540727039","CZ" +"1540727040","1540727295","FI" +"1540727296","1540727551","PL" +"1540727552","1540727807","RU" +"1540727808","1540728063","GB" +"1540728064","1540728319","NL" +"1540728320","1540729343","RU" +"1540729344","1540729599","PL" +"1540729600","1540729855","CH" +"1540729856","1540730111","RU" +"1540730112","1540730367","GB" +"1540730368","1540730623","RU" +"1540730624","1540730879","UA" +"1540730880","1540731135","IL" +"1540731136","1540731391","DE" +"1540731392","1540731647","NL" +"1540731648","1540731903","SE" +"1540731904","1540732159","FR" +"1540732160","1540732415","MD" +"1540732416","1540732671","UA" +"1540732672","1540732927","GB" +"1540732928","1540733183","RU" +"1540733184","1540733439","UA" +"1540733440","1540733695","RU" +"1540733696","1540733951","UA" +"1540733952","1540734207","GB" +"1540734208","1540734463","RU" +"1540734464","1540734719","NL" +"1540734720","1540734975","IQ" +"1540734976","1540735231","UA" +"1540735232","1540735487","PL" +"1540735488","1540735743","CH" +"1540735744","1540735999","NL" +"1540736000","1540736255","RU" +"1540736256","1540736511","IT" +"1540736512","1540736767","DE" +"1540736768","1540737791","GB" +"1540737792","1540738047","NO" +"1540738048","1540738303","AT" +"1540738304","1540738559","SA" +"1540738560","1540738815","PL" +"1540738816","1540739071","DE" +"1540739072","1540739327","SE" +"1540739328","1540739583","PA" +"1540739584","1540739839","IT" +"1540739840","1540740095","CZ" +"1540740096","1540740351","GB" +"1540740352","1540740607","SA" +"1540740608","1540740863","NL" +"1540740864","1540741119","RO" +"1540741120","1540741375","GB" +"1540741376","1540741631","EU" +"1540741632","1540742143","NL" +"1540742144","1540742399","RU" +"1540742400","1540742655","DE" +"1540742656","1540742911","AT" +"1540742912","1540743167","RU" +"1540743168","1540743423","NO" +"1540743424","1540743679","GB" +"1540743680","1540743935","PL" +"1540743936","1540744191","CH" +"1540744192","1540744447","GR" +"1540744448","1540744703","FR" +"1540744704","1540744959","GB" +"1540744960","1540745215","UA" +"1540745216","1540745471","DE" +"1540745472","1540745727","KG" +"1540745728","1540746239","AT" +"1540746240","1540746495","FR" +"1540746496","1540747263","PL" +"1540747264","1540747519","RU" +"1540747520","1540747775","SI" +"1540747776","1540748031","FR" +"1540748032","1540748287","RU" +"1540748288","1540748543","CZ" +"1540748544","1540748799","TR" +"1540748800","1540749055","SE" +"1540749056","1540749311","RU" +"1540749312","1540749567","UZ" +"1540749568","1540749823","RU" +"1540749824","1540750079","SE" +"1540750080","1540750335","BE" +"1540750336","1540750591","GB" +"1540750592","1540751103","TR" +"1540751104","1540752383","PL" +"1540752384","1540753407","GB" +"1540753408","1540754431","DE" +"1540754432","1540755455","RO" +"1540755456","1540756479","UA" +"1540756480","1540757503","DK" +"1540757504","1540758527","PL" +"1540758528","1540760575","UA" +"1540760576","1540761599","PL" +"1540761600","1540762623","RU" +"1540762624","1540763647","LU" +"1540763648","1540764671","UA" +"1540764672","1540765695","PL" +"1540765696","1540766719","RU" +"1540766720","1540767743","IT" +"1540767744","1540768767","GB" +"1540768768","1540769791","RU" +"1540769792","1540770815","IT" +"1540770816","1540771839","RU" +"1540771840","1540773887","UA" +"1540773888","1540774911","SE" +"1540774912","1540775935","GB" +"1540775936","1540776959","RU" +"1540776960","1540777983","IL" +"1540777984","1540779007","HR" +"1540779008","1540780031","NL" +"1540780032","1540781055","UA" +"1540781056","1540783103","RU" +"1540783104","1540787199","UA" +"1540787200","1540788223","KZ" +"1540788224","1540790271","RU" +"1540790272","1540791295","KW" +"1540791296","1540792319","CZ" +"1540792320","1540793343","UA" +"1540793344","1540794367","FI" +"1540794368","1540795391","CH" +"1540795392","1540796415","RU" +"1540796416","1540798463","UA" +"1540798464","1540799487","RU" +"1540799488","1540800511","RO" +"1540800512","1540801535","CZ" +"1540801536","1540802559","RU" +"1540802560","1540803583","MD" +"1540803584","1540804607","RU" +"1540804608","1540805631","UA" +"1540805632","1540809727","RU" +"1540809728","1540810751","GB" +"1540810752","1540811775","UA" +"1540811776","1540812799","PL" +"1540812800","1540813823","RU" +"1540813824","1540815871","UA" +"1540815872","1540816895","DE" +"1540816896","1540817920","PL" +"1540817921","1540818943","NL" +"1540818944","1540819967","UA" +"1540819968","1540820991","CZ" +"1540820992","1540823039","RU" +"1540823040","1540824063","UA" +"1540824064","1540825087","RU" +"1540825088","1540826111","PL" +"1540826112","1540828159","RU" +"1540828160","1540829183","PL" +"1540829184","1540830207","RU" +"1540830208","1540833279","UA" +"1540833280","1540834303","ES" +"1540834304","1540835327","UA" +"1540835328","1540836351","DE" +"1540836352","1540837375","RU" +"1540837376","1540838399","PL" +"1540838400","1540840447","RU" +"1540840448","1540841471","SE" +"1540841472","1540842495","RO" +"1540842496","1540843519","DE" +"1540843520","1540844543","PL" +"1540844544","1540846591","RU" +"1540846592","1540847615","DE" +"1540847616","1540848639","RU" +"1540848640","1540849663","UA" +"1540849664","1540850687","RU" +"1540850688","1540851711","FI" +"1540851712","1540852735","UA" +"1540852736","1540853759","RU" +"1540853760","1540854783","UA" +"1540854784","1540855807","NL" +"1540855808","1540856831","RU" +"1540856832","1540857855","NL" +"1540857856","1540858879","DK" +"1540858880","1540859903","GB" +"1540859904","1540860927","RU" +"1540860928","1540861951","KZ" +"1540861952","1540862975","BY" +"1540862976","1540865023","GB" +"1540865024","1540872191","RU" +"1540872192","1540873215","BG" +"1540873216","1540875263","RU" +"1540875264","1540876287","PL" +"1540876288","1540877311","RU" +"1540877312","1540878335","PL" +"1540878336","1540879359","AT" +"1540879360","1540880383","RU" +"1540880384","1540881407","UA" +"1540881408","1540882431","RU" +"1540882432","1540882687","SE" +"1540882688","1540883199","LV" +"1540883200","1540883455","RU" +"1540883456","1540883711","IR" +"1540883712","1540883967","PL" +"1540883968","1540884223","IE" +"1540884224","1540884479","SE" +"1540884480","1540884991","GB" +"1540884992","1540885247","BE" +"1540885248","1540885503","UA" +"1540885504","1540885759","ES" +"1540885760","1540886015","DE" +"1540886016","1540886271","DK" +"1540886272","1540886527","UA" +"1540886528","1540886783","PL" +"1540886784","1540887039","IT" +"1540887040","1540887295","GB" +"1540887296","1540887551","FR" +"1540887552","1540887807","BE" +"1540887808","1540888063","MD" +"1540888064","1540888319","UA" +"1540888320","1540888575","DE" +"1540888576","1540888831","SE" +"1540888832","1540889087","PL" +"1540889088","1540889343","FR" +"1540889344","1540889599","RO" +"1540889600","1540889855","UA" +"1540889856","1540890111","FR" +"1540890112","1540890367","PL" +"1540890368","1540890623","IL" +"1540890624","1540890879","SE" +"1540890880","1540891135","DE" +"1540891136","1540891391","NL" +"1540891392","1540891647","DE" +"1540891648","1540891903","CH" +"1540891904","1540892159","GB" +"1540892160","1540892415","IT" +"1540892416","1540892671","UA" +"1540892672","1540892927","GB" +"1540892928","1540893183","BE" +"1540893184","1540893439","GB" +"1540893440","1540893695","FR" +"1540893696","1540893951","HU" +"1540893952","1540894207","DE" +"1540894208","1540894463","RU" +"1540894464","1540894719","RO" +"1540894720","1540895487","RU" +"1540895488","1540895743","PL" +"1540895744","1540895999","RO" +"1540896000","1540896255","RU" +"1540896256","1540896511","SI" +"1540896512","1540896767","GB" +"1540896768","1540897023","EU" +"1540897024","1540897279","GB" +"1540897280","1540897535","FR" +"1540897536","1540897791","RU" +"1540897792","1540898047","HU" +"1540898048","1540898303","UA" +"1540898304","1540898559","SE" +"1540898560","1540898815","ES" +"1540898816","1540899071","PL" +"1540899072","1540899327","SE" +"1540899328","1540899583","RU" +"1540899584","1540899839","FR" +"1540899840","1540900351","RU" +"1540900352","1540900607","HU" +"1540900608","1540900863","BG" +"1540900864","1540901119","RU" +"1540901120","1540901375","LV" +"1540901376","1540901631","SI" +"1540901632","1540901887","RO" +"1540901888","1540902143","GR" +"1540902144","1540902399","FI" +"1540902400","1540902655","RO" +"1540902656","1540902911","DE" +"1540902912","1540903167","RO" +"1540903168","1540903423","RU" +"1540903424","1540903679","GB" +"1540903680","1540904447","FR" +"1540904448","1540904703","EE" +"1540904704","1540904959","SI" +"1540904960","1540905471","GB" +"1540905472","1540905727","DE" +"1540905728","1540905983","TR" +"1540905984","1540906239","AT" +"1540906240","1540906495","GB" +"1540906496","1540906751","UA" +"1540906752","1540907007","BG" +"1540907008","1540907263","RU" +"1540907264","1540907519","MD" +"1540907776","1540908031","PL" +"1540908032","1540908287","NL" +"1540908288","1540908543","DK" +"1540908544","1540908799","IT" +"1540908800","1540909055","DK" +"1540909056","1540909311","NL" +"1540909312","1540909567","GB" +"1540909568","1540909823","UA" +"1540909824","1540910079","FR" +"1540910080","1540910335","DE" +"1540910336","1540910591","SI" +"1540910592","1540910847","FR" +"1540910848","1540911103","SE" +"1540911104","1540911359","GB" +"1540911360","1540911615","NL" +"1540911616","1540911871","RU" +"1540911872","1540912127","PL" +"1540912128","1540912383","GB" +"1540912384","1540912639","PT" +"1540912640","1540912895","DK" +"1540912896","1540913151","TR" +"1540913152","1540913407","AT" +"1540913408","1540913663","RU" +"1540913664","1540913919","MD" +"1540913920","1540914175","RU" +"1540914176","1540914687","PL" +"1540914688","1540914943","RU" +"1540914944","1540915199","IT" +"1540915200","1540915455","DE" +"1540915456","1540915967","RU" +"1540915968","1540916479","NL" +"1540916480","1540916735","UA" +"1540916736","1540916991","PL" +"1540916992","1540917247","UA" +"1540917248","1540917503","FI" +"1540917504","1540918015","GB" +"1540918016","1540918527","FR" +"1540918528","1540919039","NL" +"1540919040","1540919295","GB" +"1540919296","1540919551","RO" +"1540919552","1540919807","BE" +"1540919808","1540920063","GB" +"1540920064","1540920319","RU" +"1540920320","1540920575","TR" +"1540920576","1540920831","PL" +"1540920832","1540921087","HU" +"1540921088","1540921599","RO" +"1540921600","1540922111","EU" +"1540922112","1540922367","ES" +"1540922368","1540922879","RO" +"1540922880","1540923135","DE" +"1540923136","1540923391","GB" +"1540923392","1540923647","PL" +"1540923648","1540923903","UA" +"1540923904","1540924159","DE" +"1540924160","1540924415","LT" +"1540924416","1540924671","RU" +"1540924672","1540924927","UA" +"1540924928","1540925183","MD" +"1540925184","1540925439","RU" +"1540925440","1540925695","CZ" +"1540925696","1540925951","AE" +"1540925952","1540926207","TR" +"1540926208","1540926463","FR" +"1540926464","1540926719","SI" +"1540926720","1540926975","UA" +"1540926976","1540927231","BG" +"1540927232","1540927487","RU" +"1540927488","1540927743","GE" +"1540927744","1540927999","RO" +"1540928000","1540928255","KZ" +"1540928256","1540928511","CZ" +"1540928512","1540928767","GR" +"1540928768","1540929023","GB" +"1540929024","1540929279","DK" +"1540929280","1540929535","GB" +"1540929536","1540929791","NL" +"1540929792","1540930047","CZ" +"1540930048","1540930303","FR" +"1540930304","1540930559","RU" +"1540930560","1540930815","KW" +"1540930816","1540931071","KZ" +"1540931072","1540931327","EU" +"1540931328","1540931839","PL" +"1540931840","1540932095","GB" +"1540932096","1540932351","PL" +"1540932352","1540932607","FR" +"1540932608","1540932863","UA" +"1540932864","1540933119","GB" +"1540933120","1540933375","RU" +"1540933376","1540933631","RO" +"1540933632","1540933887","NL" +"1540933888","1540934143","TR" +"1540934144","1540934399","PL" +"1540934400","1540934655","FR" +"1540934656","1540934911","PL" +"1540934912","1540935167","RU" +"1540935168","1540935423","GR" +"1540935424","1540935679","NL" +"1540935680","1540935935","RU" +"1540935936","1540936191","FR" +"1540936192","1540936447","CY" +"1540936448","1540936959","RU" +"1540936960","1540937471","PL" +"1540937472","1540937727","RU" +"1540937728","1540937983","DE" +"1540937984","1540938239","RU" +"1540938240","1540938751","ES" +"1540938752","1540939007","KZ" +"1540939008","1540939263","FR" +"1540939264","1540939519","IL" +"1540939520","1540939775","TR" +"1540939776","1540940031","PL" +"1540940032","1540940287","RO" +"1540940288","1540940543","DK" +"1540940544","1540940799","RO" +"1540940800","1540941055","FR" +"1540941056","1540941311","CH" +"1540941312","1540941567","AT" +"1540941568","1540942079","UA" +"1540942080","1540942335","RO" +"1540942336","1540942591","FR" +"1540942592","1540942847","DE" +"1540942848","1540943103","IE" +"1540943104","1540943359","UA" +"1540943360","1540943615","BE" +"1540943616","1540943871","PL" +"1540943872","1540944127","UA" +"1540944128","1540944383","IE" +"1540944384","1540944639","AT" +"1540944640","1540944895","DE" +"1540944896","1540945151","UA" +"1540945152","1540945407","DE" +"1540945408","1540945663","GB" +"1540945664","1540945919","AT" +"1540945920","1540946175","DE" +"1540946176","1540946431","AT" +"1540946432","1540946687","RU" +"1540946688","1540946943","UA" +"1540946944","1540947199","IL" +"1540947200","1540947455","BG" +"1540947456","1540947711","PL" +"1540947712","1540947967","IS" +"1540947968","1540948479","PL" +"1540948480","1540948991","RU" +"1540948992","1540949503","UA" +"1540949504","1540950015","RU" +"1540950016","1540951551","UA" +"1540951552","1540952063","RS" +"1540952064","1540952575","RU" +"1540952576","1540953087","PL" +"1540953088","1540953599","RU" +"1540953600","1540954623","PL" +"1540954624","1540955647","RO" +"1540955648","1540956159","NL" +"1540956160","1540956671","SK" +"1540956672","1540957183","RU" +"1540957184","1540957695","DE" +"1540957696","1540958207","AT" +"1540958208","1540958719","PL" +"1540958720","1540959231","RU" +"1540959232","1540959743","FR" +"1540959744","1540960255","RU" +"1540960256","1540960767","PL" +"1540960768","1540961279","RU" +"1540961280","1540961791","CZ" +"1540961792","1540962303","AT" +"1540962304","1540962815","NL" +"1540962816","1540963839","UA" +"1540963840","1540964351","RU" +"1540964352","1540964863","IR" +"1540964864","1540965887","UA" +"1540965888","1540966399","RU" +"1540966400","1540966911","GB" +"1540966912","1540967935","RU" +"1540967936","1540968447","UA" +"1540968448","1540969471","RO" +"1540969472","1540969983","NL" +"1540969984","1540970495","DE" +"1540970496","1540971007","IE" +"1540971008","1540971519","UA" +"1540971520","1540972031","SI" +"1540972032","1540972543","FR" +"1540972544","1540973055","CZ" +"1540973056","1540973567","PL" +"1540973568","1540974079","UA" +"1540974080","1540974591","RU" +"1540974592","1540975103","PL" +"1540975104","1540975615","UA" +"1540975616","1540976639","RU" +"1540976640","1540977151","UA" +"1540977152","1540977663","PL" +"1540977664","1540978175","FI" +"1540978176","1540978687","AT" +"1540978688","1540979199","RU" +"1540979200","1540979711","SI" +"1540979712","1540980223","RU" +"1540980224","1540980735","SI" +"1540980736","1540980991","CH" +"1540980992","1540981247","RU" +"1540981248","1540981503","RO" +"1540981504","1540981759","DE" +"1540981760","1540982015","PL" +"1540982016","1540982271","DK" +"1540982272","1540982783","GB" +"1540982784","1540983295","RU" +"1540983296","1540983551","ME" +"1540983552","1540983807","CH" +"1540983808","1540984063","FR" +"1540984064","1540984319","DE" +"1540984320","1540984575","PL" +"1540984576","1540984831","RU" +"1540984832","1540985087","UA" +"1540985088","1540985343","DE" +"1540985344","1540985599","NL" +"1540985600","1540985855","TR" +"1540985856","1540986111","BG" +"1540986112","1540986367","AT" +"1540986368","1540986623","PL" +"1540986624","1540986879","FR" +"1540986880","1540987135","PL" +"1540987136","1540987391","UA" +"1540987392","1540987647","FR" +"1540987648","1540987903","GR" +"1540987904","1540988159","RU" +"1540988160","1540988415","AM" +"1540988416","1540988671","PL" +"1540988672","1540988927","RU" +"1540988928","1540989183","GB" +"1540989184","1540989439","PL" +"1540989440","1540989695","UA" +"1540989696","1540989951","PL" +"1540989952","1540990207","FR" +"1540990208","1540990463","DE" +"1540990464","1540990975","UA" +"1540990976","1540991231","FR" +"1540991232","1540991487","HU" +"1540991488","1540991743","CH" +"1540991744","1540991999","PL" +"1540992000","1540992255","FR" +"1540992256","1540992511","AT" +"1540992512","1540993279","DE" +"1540993280","1540993535","LB" +"1540993536","1540993791","SC" +"1540993792","1540994047","UA" +"1540994048","1540994303","RU" +"1540994304","1540994559","SE" +"1540994560","1540994815","PL" +"1540994816","1540995071","UA" +"1540995072","1540995327","RU" +"1540995328","1540995583","IQ" +"1540995584","1540995839","SE" +"1540995840","1540996095","RO" +"1540996096","1540996351","DE" +"1540996352","1540996607","NL" +"1540996608","1540996863","RU" +"1540996864","1540997119","NL" +"1540997120","1540997375","RU" +"1540997376","1540997631","TR" +"1540997632","1540998399","RU" +"1540998400","1540998655","UA" +"1540998656","1540998911","PL" +"1540998912","1540999167","DE" +"1540999168","1540999423","RU" +"1540999424","1540999679","DK" +"1540999680","1540999935","RU" +"1540999936","1541000191","RO" +"1541000192","1541000447","PL" +"1541000448","1541000703","BG" +"1541000704","1541000959","DE" +"1541000960","1541001215","RU" +"1541001216","1541001471","PL" +"1541001472","1541001727","SE" +"1541001728","1541001983","NL" +"1541001984","1541002239","FI" +"1541002240","1541002495","RU" +"1541002496","1541002751","AT" +"1541002752","1541003007","DE" +"1541003008","1541003263","BG" +"1541003264","1541003519","GB" +"1541003520","1541004031","PL" +"1541004032","1541004287","IL" +"1541004288","1541004543","RU" +"1541004544","1541004799","PL" +"1541004800","1541005055","SI" +"1541005056","1541005311","NL" +"1541005312","1541005567","PL" +"1541005568","1541006079","AT" +"1541006080","1541006335","RU" +"1541006336","1541006591","PL" +"1541006592","1541006847","AT" +"1541006848","1541007103","DE" +"1541007104","1541007359","GB" +"1541007360","1541007615","DE" +"1541007616","1541007871","RU" +"1541007872","1541008127","FR" +"1541008128","1541008383","NL" +"1541008384","1541008639","RU" +"1541008640","1541008895","GB" +"1541008896","1541009151","TR" +"1541009152","1541009407","RU" +"1541009408","1541009663","UA" +"1541009664","1541009919","CH" +"1541009920","1541010175","PL" +"1541010176","1541010431","GR" +"1541010432","1541010687","UA" +"1541010688","1541010943","GB" +"1541010944","1541011199","CY" +"1541011200","1541011455","CH" +"1541011456","1541011711","FI" +"1541011712","1541012223","RU" +"1541012224","1541012479","DE" +"1541012480","1541012735","FI" +"1541012736","1541013247","UA" +"1541013248","1541013503","SI" +"1541013504","1541014527","RO" +"1541014528","1541015551","AM" +"1541015552","1541016575","RU" +"1541016576","1541018623","UA" +"1541018624","1541019647","ES" +"1541019648","1541020671","RU" +"1541020672","1541023743","UA" +"1541023744","1541024767","RU" +"1541024768","1541026815","UA" +"1541026816","1541027839","LV" +"1541027840","1541028863","RU" +"1541028864","1541029887","PL" +"1541029888","1541030911","UA" +"1541030912","1541031935","PL" +"1541031936","1541032959","UA" +"1541032960","1541033983","PL" +"1541033984","1541035007","BG" +"1541035008","1541036031","RU" +"1541036032","1541037055","UA" +"1541037056","1541038079","RU" +"1541038080","1541039103","UA" +"1541039104","1541040127","RU" +"1541040128","1541041151","UA" +"1541041152","1541042175","RU" +"1541042176","1541043199","DE" +"1541043200","1541044223","RU" +"1541044224","1541045247","US" +"1541045248","1541046271","NL" +"1541046272","1541051391","RU" +"1541051392","1541052415","NL" +"1541052416","1541053439","RO" +"1541053440","1541054463","PL" +"1541054464","1541055487","RU" +"1541055488","1541056511","PL" +"1541056512","1541057535","TJ" +"1541057536","1541058559","RS" +"1541058560","1541059583","RU" +"1541059584","1541060607","AM" +"1541060608","1541061631","NO" +"1541061632","1541062655","CZ" +"1541062656","1541063679","UA" +"1541063680","1541065727","PL" +"1541065728","1541066751","NL" +"1541066752","1541067775","PL" +"1541067776","1541068799","UA" +"1541068800","1541069823","PL" +"1541069824","1541070847","RU" +"1541070848","1541071871","IT" +"1541071872","1541072895","RU" +"1541072896","1541073919","CZ" +"1541073920","1541074943","RO" +"1541074944","1541075967","PL" +"1541075968","1541078015","RU" +"1541078016","1541079039","RO" +"1541079040","1541080063","PL" +"1541080064","1541081087","RU" +"1541081088","1541082111","DE" +"1541082112","1541083135","RU" +"1541083136","1541084159","RO" +"1541084160","1541086207","RU" +"1541086208","1541088255","UA" +"1541088256","1541089279","RU" +"1541089280","1541090303","GB" +"1541090304","1541091327","CZ" +"1541091328","1541092351","RU" +"1541092352","1541093375","UA" +"1541093376","1541094399","RU" +"1541094400","1541095423","UA" +"1541095424","1541096447","RU" +"1541096448","1541097471","AT" +"1541097472","1541098495","RU" +"1541098496","1541099519","NL" +"1541099520","1541100543","UA" +"1541100544","1541101567","HU" +"1541101568","1541102591","RU" +"1541102592","1541103615","RO" +"1541103616","1541105663","RU" +"1541105664","1541106687","PL" +"1541106688","1541107711","NL" +"1541107712","1541108735","PL" +"1541108736","1541109759","ES" +"1541109760","1541110783","PL" +"1541110784","1541111807","RU" +"1541111808","1541112831","PL" +"1541112832","1541113855","SK" +"1541113856","1541114879","RU" +"1541114880","1541116927","UA" +"1541116928","1541117951","RU" +"1541117952","1541118975","DK" +"1541118976","1541122047","RU" +"1541122048","1541123071","UA" +"1541123072","1541124095","FI" +"1541124096","1541126143","RU" +"1541126144","1541127167","PL" +"1541127168","1541129215","RU" +"1541129216","1541130239","UA" +"1541130240","1541132287","RU" +"1541132288","1541133311","PL" +"1541133312","1541134335","RO" +"1541134336","1541135359","SE" +"1541135360","1541136383","UA" +"1541136384","1541138431","RU" +"1541138432","1541139455","UA" +"1541139456","1541140479","HU" +"1541140480","1541142527","CZ" +"1541142528","1541143551","RU" +"1541143552","1541144575","UA" +"1541144576","1541144831","PL" +"1541144832","1541145087","RU" +"1541145088","1541145343","AT" +"1541145344","1541145599","UA" +"1541145600","1541145855","IT" +"1541145856","1541146111","RU" +"1541146112","1541146367","UA" +"1541146368","1541146623","DK" +"1541146624","1541146879","AT" +"1541146880","1541147135","IL" +"1541147136","1541147391","PL" +"1541147392","1541147903","RU" +"1541147904","1541148415","RO" +"1541148416","1541148671","US" +"1541148672","1541148927","RU" +"1541148928","1541149439","PL" +"1541149440","1541149695","SE" +"1541149696","1541149951","LT" +"1541149952","1541150207","NL" +"1541150208","1541150463","IL" +"1541150464","1541150719","CH" +"1541150720","1541151231","GB" +"1541151232","1541151487","RO" +"1541151488","1541151743","FR" +"1541151744","1541151999","NL" +"1541152000","1541152255","HU" +"1541152256","1541152511","NL" +"1541152512","1541152767","RU" +"1541152768","1541153023","PL" +"1541153024","1541153279","RU" +"1541153280","1541153535","DE" +"1541153536","1541153791","RO" +"1541153792","1541154047","DE" +"1541154048","1541154303","NL" +"1541154304","1541154559","RU" +"1541154560","1541154815","PL" +"1541154816","1541155071","CH" +"1541155072","1541155327","CY" +"1541155328","1541155583","GB" +"1541155584","1541155839","LV" +"1541155840","1541156095","PL" +"1541156096","1541156351","IE" +"1541156352","1541156607","RU" +"1541156608","1541156863","SE" +"1541156864","1541157119","RO" +"1541157120","1541157375","DE" +"1541157376","1541157631","TR" +"1541157632","1541157887","KZ" +"1541157888","1541158143","GB" +"1541158144","1541158399","NL" +"1541158400","1541158655","PL" +"1541158656","1541158911","SI" +"1541158912","1541159167","DE" +"1541159168","1541159423","RU" +"1541159424","1541159679","SE" +"1541159680","1541159935","LT" +"1541159936","1541160447","UA" +"1541160448","1541160703","RU" +"1541160704","1541160959","MD" +"1541160960","1541161215","CH" +"1541161216","1541161471","TR" +"1541161472","1541161727","ES" +"1541161728","1541161983","DE" +"1541161984","1541162239","BE" +"1541162240","1541162495","RU" +"1541162496","1541162751","GB" +"1541162752","1541163007","DE" +"1541163008","1541163263","RO" +"1541163264","1541163519","PL" +"1541163520","1541163775","DE" +"1541163776","1541164031","RO" +"1541164032","1541164287","RU" +"1541164288","1541164543","HR" +"1541164544","1541164799","SI" +"1541164800","1541165055","IR" +"1541165056","1541165311","UA" +"1541165312","1541165567","RU" +"1541165568","1541165823","NL" +"1541165824","1541166079","GB" +"1541166080","1541166335","RU" +"1541166336","1541166591","FR" +"1541166592","1541166847","RO" +"1541166848","1541167103","RU" +"1541167104","1541167359","NL" +"1541167360","1541167615","AT" +"1541167616","1541167871","RU" +"1541167872","1541168127","UA" +"1541168128","1541168639","RU" +"1541168640","1541168895","MD" +"1541168896","1541169151","MK" +"1541169152","1541169407","RO" +"1541169408","1541169663","PL" +"1541169664","1541169919","SE" +"1541169920","1541170431","CH" +"1541170432","1541170687","NL" +"1541170688","1541170943","BE" +"1541170944","1541171199","PL" +"1541171200","1541171455","UA" +"1541171456","1541171711","PL" +"1541171712","1541171967","UA" +"1541171968","1541172223","SI" +"1541172224","1541172479","GR" +"1541172480","1541172735","RU" +"1541172736","1541172991","IS" +"1541172992","1541173247","BE" +"1541173248","1541173503","RU" +"1541173504","1541173759","UA" +"1541173760","1541174015","LT" +"1541174016","1541174271","DE" +"1541174272","1541174527","FR" +"1541174528","1541174783","SE" +"1541174784","1541175039","GB" +"1541175040","1541175295","SI" +"1541175296","1541175551","RU" +"1541175552","1541175807","RO" +"1541175808","1541176063","CZ" +"1541176064","1541176319","NL" +"1541176320","1541176575","AM" +"1541176576","1541176831","DE" +"1541176832","1541177087","RU" +"1541177088","1541177343","GB" +"1541177344","1541177599","CH" +"1541177600","1541177855","DE" +"1541177856","1541178111","RO" +"1541178112","1541178367","RU" +"1541178368","1541178623","GB" +"1541178624","1541178879","RU" +"1541178880","1541179135","DE" +"1541179136","1541179391","RU" +"1541179392","1541179647","BE" +"1541179648","1541179903","RU" +"1541179904","1541180159","IS" +"1541180160","1541180415","MT" +"1541180416","1541180671","UA" +"1541180672","1541180927","GB" +"1541180928","1541181183","IT" +"1541181184","1541181439","NO" +"1541181440","1541181695","MD" +"1541181696","1541182207","RU" +"1541182208","1541182463","NL" +"1541182464","1541182719","DE" +"1541182720","1541182975","RO" +"1541182976","1541183231","SE" +"1541183232","1541183487","UA" +"1541183488","1541183743","RU" +"1541183744","1541183999","DE" +"1541184000","1541184255","BE" +"1541184256","1541184511","RU" +"1541184512","1541184767","SI" +"1541184768","1541185023","DE" +"1541185024","1541185279","ES" +"1541185280","1541185535","DE" +"1541185536","1541185791","GB" +"1541185792","1541186047","UA" +"1541186048","1541186303","CH" +"1541186304","1541186559","UA" +"1541186560","1541186815","PL" +"1541186816","1541187071","NO" +"1541187072","1541187327","RU" +"1541187328","1541187583","RO" +"1541187584","1541187839","IT" +"1541187840","1541188351","RU" +"1541188352","1541188607","FR" +"1541188608","1541188863","HU" +"1541188864","1541189119","RU" +"1541189120","1541189375","UA" +"1541189376","1541189631","GB" +"1541189632","1541189887","SC" +"1541189888","1541190143","PL" +"1541190144","1541190399","GB" +"1541190400","1541190655","AT" +"1541190656","1541190911","GB" +"1541190912","1541191167","RU" +"1541191168","1541191423","TR" +"1541191424","1541191679","RO" +"1541191680","1541192191","NL" +"1541192192","1541192447","RU" +"1541192448","1541192703","ME" +"1541192704","1541192959","RU" +"1541192960","1541193215","BG" +"1541193216","1541193471","UA" +"1541193472","1541193727","BE" +"1541193728","1541193983","SE" +"1541193984","1541194239","IL" +"1541194240","1541194495","SI" +"1541194496","1541194751","JO" +"1541194752","1541195007","NO" +"1541195008","1541195263","FR" +"1541195264","1541195519","UA" +"1541195520","1541195775","GB" +"1541195776","1541196031","FR" +"1541196032","1541196287","CZ" +"1541196288","1541196543","RU" +"1541196544","1541197055","UA" +"1541197056","1541197311","PL" +"1541197312","1541197567","RU" +"1541197568","1541197823","MD" +"1541197824","1541198079","GR" +"1541198080","1541198335","LT" +"1541198336","1541198591","AT" +"1541198592","1541198847","RU" +"1541198848","1541199103","GB" +"1541199104","1541199359","SI" +"1541199360","1541199615","GB" +"1541199616","1541199871","RU" +"1541199872","1541200127","GB" +"1541200128","1541200383","NO" +"1541200384","1541201151","RU" +"1541201152","1541201407","SI" +"1541201408","1541201663","PL" +"1541201664","1541201919","RU" +"1541201920","1541202175","IE" +"1541202176","1541202431","PL" +"1541202432","1541202687","ES" +"1541202688","1541202943","SE" +"1541202944","1541203199","DE" +"1541203200","1541203455","ES" +"1541203456","1541203711","UA" +"1541203712","1541203967","GB" +"1541203968","1541204223","RO" +"1541204224","1541204479","RU" +"1541204480","1541204735","GB" +"1541204736","1541204991","UA" +"1541204992","1541205247","GR" +"1541205248","1541205503","SK" +"1541205504","1541205759","PL" +"1541205760","1541206015","AT" +"1541206016","1541206271","SI" +"1541206272","1541206527","FI" +"1541206528","1541206783","TR" +"1541206784","1541207039","NO" +"1541207040","1541207295","DE" +"1541207296","1541207807","FR" +"1541207808","1541208063","HU" +"1541208064","1541208319","FR" +"1541208320","1541208575","NL" +"1541208576","1541208831","BY" +"1541208832","1541209087","HU" +"1541209088","1541209599","UA" +"1541209600","1541209855","SE" +"1541209856","1541210111","UA" +"1541210112","1541210623","RU" +"1541210624","1541211135","CZ" +"1541211136","1541211647","SK" +"1541211648","1541212159","UA" +"1541212160","1541212671","DE" +"1541212672","1541213183","MT" +"1541213184","1541213695","DE" +"1541213696","1541214207","UA" +"1541214208","1541215743","RU" +"1541215744","1541216255","SA" +"1541216256","1541216767","RU" +"1541216768","1541217279","PL" +"1541217280","1541218303","RU" +"1541218304","1541218815","IT" +"1541218816","1541219839","RU" +"1541219840","1541220351","CZ" +"1541220352","1541221375","RU" +"1541221376","1541221887","PL" +"1541221888","1541222399","CZ" +"1541222400","1541222911","RU" +"1541222912","1541223423","DK" +"1541223424","1541223935","UA" +"1541223936","1541224447","GB" +"1541224448","1541224959","RU" +"1541224960","1541225471","DE" +"1541225472","1541225983","RU" +"1541225984","1541226495","LV" +"1541226496","1541227007","UA" +"1541227008","1541227519","FI" +"1541228032","1541228543","RU" +"1541228544","1541229055","CZ" +"1541229056","1541229567","UA" +"1541229568","1541230079","RU" +"1541230080","1541230591","RO" +"1541230592","1541231103","RU" +"1541231104","1541231615","GB" +"1541231616","1541232127","UA" +"1541232128","1541232639","RU" +"1541232640","1541233151","PL" +"1541233152","1541233663","RU" +"1541233664","1541234175","SK" +"1541234176","1541234687","RO" +"1541234688","1541235199","NL" +"1541235200","1541235455","RU" +"1541235456","1541235711","NL" +"1541235712","1541236223","AT" +"1541236224","1541236735","RU" +"1541236736","1541237247","DE" +"1541237248","1541237759","RU" +"1541237760","1541238271","CZ" +"1541238272","1541239295","SK" +"1541239296","1541239807","PL" +"1541239808","1541240319","RU" +"1541240320","1541240831","CH" +"1541240832","1541241343","DE" +"1541241344","1541241855","PL" +"1541241856","1541242367","UA" +"1541242368","1541242879","PL" +"1541242880","1541243391","KW" +"1541243392","1541243903","NO" +"1541243904","1541244415","UA" +"1541244416","1541244927","RS" +"1541244928","1541245439","UA" +"1541245440","1541245951","AT" +"1541245952","1541246463","RU" +"1541246464","1541246975","DK" +"1541246976","1541247487","PL" +"1541247488","1541247999","FR" +"1541248000","1541248511","CZ" +"1541248512","1541249023","NL" +"1541249024","1541249535","GB" +"1541249536","1541250047","UA" +"1541250048","1541250559","RU" +"1541250560","1541251071","PL" +"1541251072","1541251583","NL" +"1541251584","1541252607","RU" +"1541252608","1541253119","UA" +"1541253120","1541253631","GB" +"1541253632","1541254143","SI" +"1541254144","1541254655","PL" +"1541254656","1541255679","RU" +"1541255680","1541256191","UA" +"1541256192","1541256703","RU" +"1541256704","1541257215","DE" +"1541257216","1541257727","SA" +"1541257728","1541258239","EE" +"1541258240","1541258751","RU" +"1541258752","1541259263","UA" +"1541259264","1541259775","CH" +"1541259776","1541260287","RU" +"1541260288","1541260799","DK" +"1541260800","1541261823","RU" +"1541261824","1541262335","SA" +"1541262336","1541262847","DE" +"1541262848","1541263359","DK" +"1541263360","1541263871","NL" +"1541263872","1541264383","UA" +"1541264384","1541264895","CZ" +"1541264896","1541265407","PL" +"1541265408","1541265919","RS" +"1541265920","1541266431","UA" +"1541266432","1541266943","KW" +"1541266944","1541267455","US" +"1541267456","1541267967","FR" +"1541267968","1541268479","DE" +"1541268480","1541268991","AM" +"1541268992","1541269503","NL" +"1541269504","1541270015","RU" +"1541270016","1541270527","UA" +"1541270528","1541271039","IT" +"1541271040","1541271551","FI" +"1541271552","1541272063","RO" +"1541272064","1541272575","RU" +"1541272576","1541273087","FR" +"1541273088","1541274623","RU" +"1541274624","1541275135","UA" +"1541275136","1541275647","FR" +"1541275648","1541276671","UA" +"1541276672","1541277695","RS" +"1541277696","1541278719","GB" +"1541278720","1541280767","UA" +"1541280768","1541281791","BG" +"1541281792","1541282815","PL" +"1541282816","1541283839","RU" +"1541283840","1541286911","UA" +"1541286912","1541287935","DE" +"1541287936","1541288959","UA" +"1541288960","1541289983","CZ" +"1541289984","1541291007","PL" +"1541291008","1541293055","UA" +"1541293056","1541295103","PL" +"1541295104","1541297151","UA" +"1541297152","1541298175","CH" +"1541298176","1541299199","KZ" +"1541299200","1541300223","RO" +"1541300224","1541301247","DE" +"1541301248","1541302271","PL" +"1541302272","1541303295","SK" +"1541303296","1541304319","PL" +"1541304320","1541305343","UA" +"1541305344","1541306367","PL" +"1541306368","1541307391","RU" +"1541307392","1541308415","PL" +"1541308416","1541309439","RU" +"1541309440","1541310463","CH" +"1541310464","1541311487","UA" +"1541311488","1541314559","PL" +"1541314560","1541315583","UA" +"1541315584","1541316607","RU" +"1541316608","1541317631","PL" +"1541317632","1541318655","RU" +"1541318656","1541320703","UA" +"1541320704","1541321727","DE" +"1541321728","1541322751","UA" +"1541322752","1541323775","PL" +"1541323776","1541324799","FI" +"1541324800","1541325823","PL" +"1541325824","1541326847","IR" +"1541326848","1541327871","SA" +"1541327872","1541328895","CZ" +"1541328896","1541329919","RU" +"1541329920","1541330943","PL" +"1541330944","1541331967","RU" +"1541331968","1541332991","UA" +"1541332992","1541334015","PL" +"1541334016","1541335039","RU" +"1541335040","1541336063","DE" +"1541336064","1541338111","RU" +"1541338112","1541341183","UA" +"1541341184","1541341439","TR" +"1541341440","1541341695","RU" +"1541341696","1541341951","DE" +"1541341952","1541342463","PL" +"1541342464","1541342719","FR" +"1541342720","1541342975","PL" +"1541342976","1541343231","RU" +"1541343232","1541343487","TR" +"1541343488","1541343743","IE" +"1541343744","1541343999","GB" +"1541344000","1541344255","IL" +"1541344256","1541344511","IT" +"1541344512","1541345023","PL" +"1541345024","1541345279","RU" +"1541345280","1541345535","GB" +"1541345536","1541345791","CH" +"1541345792","1541346047","DE" +"1541346048","1541346303","UA" +"1541346304","1541346559","DE" +"1541346560","1541346815","BE" +"1541346816","1541347071","FR" +"1541347072","1541347327","PL" +"1541347328","1541347583","HR" +"1541347584","1541347839","RU" +"1541347840","1541348095","SI" +"1541348096","1541348351","UA" +"1541348352","1541348607","RU" +"1541348608","1541348863","HR" +"1541348864","1541349119","UA" +"1541349120","1541349375","PL" +"1541349376","1541349631","ES" +"1541349632","1541349887","PL" +"1541349888","1541350143","RU" +"1541350144","1541350399","FR" +"1541350400","1541350655","NO" +"1541350656","1541350911","RU" +"1541350912","1541351167","AT" +"1541351168","1541351423","SI" +"1541351424","1541351679","FR" +"1541351680","1541351935","DE" +"1541351936","1541352191","GR" +"1541352192","1541352447","SI" +"1541352448","1541352703","RU" +"1541352704","1541352959","RO" +"1541352960","1541353215","GB" +"1541353216","1541353471","SE" +"1541353472","1541353727","UA" +"1541353728","1541353983","SI" +"1541353984","1541354239","RO" +"1541354240","1541354495","SE" +"1541354496","1541354751","PL" +"1541354752","1541355007","UA" +"1541355008","1541355263","IL" +"1541355264","1541355519","PL" +"1541355520","1541355775","NL" +"1541355776","1541356031","PL" +"1541356032","1541356287","GB" +"1541356288","1541356543","UA" +"1541356544","1541356799","RU" +"1541356800","1541357055","ES" +"1541357056","1541357311","FR" +"1541357312","1541357567","RU" +"1541357568","1541357823","PL" +"1541357824","1541358079","HR" +"1541358080","1541358335","BG" +"1541358336","1541358591","GB" +"1541358592","1541358847","PL" +"1541358848","1541359103","SK" +"1541359104","1541359359","LV" +"1541359360","1541359615","FR" +"1541359616","1541359871","PL" +"1541359872","1541360127","FR" +"1541360128","1541360383","CZ" +"1541360384","1541360639","RU" +"1541360640","1541360895","FR" +"1541360896","1541361151","UA" +"1541361152","1541361407","PL" +"1541361408","1541361663","CH" +"1541361664","1541361919","SI" +"1541361920","1541362175","PL" +"1541362176","1541362431","NL" +"1541362432","1541362687","PL" +"1541362688","1541362943","FR" +"1541362944","1541363199","DK" +"1541363200","1541363455","UA" +"1541363456","1541363711","IE" +"1541363712","1541363967","UA" +"1541363968","1541364479","RU" +"1541364480","1541364735","AT" +"1541364736","1541364991","SE" +"1541364992","1541365247","RU" +"1541365248","1541365503","GB" +"1541365504","1541365759","NL" +"1541365760","1541366015","DE" +"1541366016","1541366271","UA" +"1541366272","1541366527","RU" +"1541366528","1541366783","RO" +"1541366784","1541367039","NO" +"1541367040","1541367295","AT" +"1541367296","1541367807","UA" +"1541367808","1541368063","GR" +"1541368064","1541368319","RU" +"1541368320","1541368575","IL" +"1541368576","1541368831","FI" +"1541368832","1541369343","RU" +"1541369344","1541369599","UA" +"1541369600","1541369855","GB" +"1541369856","1541370111","UA" +"1541370112","1541370367","SI" +"1541370368","1541370623","DE" +"1541370624","1541370879","SI" +"1541370880","1541371135","FI" +"1541371136","1541371391","RO" +"1541371392","1541371647","RU" +"1541371648","1541371903","PL" +"1541371904","1541372159","RU" +"1541372160","1541372415","CH" +"1541372416","1541372671","UA" +"1541372672","1541372927","US" +"1541372928","1541373183","NL" +"1541373184","1541373439","FR" +"1541373440","1541373695","GB" +"1541373696","1541373951","UA" +"1541373952","1541374207","RU" +"1541374208","1541374463","DE" +"1541374464","1541374719","PL" +"1541374720","1541374975","NL" +"1541374976","1541375231","GR" +"1541375232","1541375487","UA" +"1541375488","1541375999","PL" +"1541376000","1541376255","UA" +"1541376256","1541376767","RU" +"1541376768","1541377023","FR" +"1541377024","1541377279","NL" +"1541377280","1541377535","DE" +"1541377536","1541377791","PL" +"1541377792","1541378047","ES" +"1541378048","1541378303","RU" +"1541378304","1541378559","DE" +"1541378560","1541378815","GB" +"1541378816","1541379071","AT" +"1541379072","1541379327","RO" +"1541379328","1541379583","UA" +"1541379584","1541379839","FR" +"1541379840","1541380095","DE" +"1541380096","1541380351","UA" +"1541380352","1541380607","RU" +"1541380608","1541380863","CH" +"1541380864","1541381119","IT" +"1541381120","1541381375","RO" +"1541381376","1541381631","TR" +"1541381632","1541381887","RO" +"1541381888","1541382143","FR" +"1541382144","1541382399","PL" +"1541382400","1541382655","IM" +"1541382656","1541382911","RS" +"1541382912","1541383167","RO" +"1541383168","1541383423","CY" +"1541383424","1541383679","LV" +"1541383680","1541383935","SI" +"1541383936","1541384447","PL" +"1541384448","1541384703","LV" +"1541384704","1541384959","RU" +"1541384960","1541385215","PL" +"1541385216","1541385471","NL" +"1541385472","1541385727","SK" +"1541385728","1541385983","SI" +"1541385984","1541386239","PL" +"1541386240","1541386495","RU" +"1541386496","1541386751","UA" +"1541386752","1541387007","RU" +"1541387008","1541387263","CH" +"1541387264","1541387519","UA" +"1541387520","1541387775","RU" +"1541387776","1541388031","SI" +"1541388032","1541388287","RO" +"1541388288","1541388543","PL" +"1541388544","1541388799","RO" +"1541388800","1541389055","CH" +"1541389056","1541389311","NL" +"1541389312","1541389567","RU" +"1541389568","1541389823","SI" +"1541389824","1541390079","RO" +"1541390080","1541390335","US" +"1541390336","1541390591","DK" +"1541390592","1541390847","SI" +"1541390848","1541391103","RU" +"1541391104","1541391359","BE" +"1541391360","1541391615","PL" +"1541391616","1541391871","SI" +"1541391872","1541392127","DE" +"1541392128","1541392383","RU" +"1541392384","1541392639","RO" +"1541392640","1541392895","AT" +"1541392896","1541393151","DE" +"1541393152","1541393407","GB" +"1541393408","1541393663","DE" +"1541393664","1541393919","UA" +"1541393920","1541394175","ES" +"1541394176","1541394431","FR" +"1541394432","1541394687","CY" +"1541394688","1541394943","SK" +"1541394944","1541395199","SA" +"1541395200","1541395455","DE" +"1541395456","1541395711","PL" +"1541395712","1541395967","NO" +"1541395968","1541396223","UA" +"1541396224","1541396479","LB" +"1541396480","1541396735","UA" +"1541396736","1541396991","RU" +"1541396992","1541397247","GB" +"1541397248","1541397503","SE" +"1541397504","1541397759","NL" +"1541397760","1541398015","PL" +"1541398016","1541398271","HU" +"1541398272","1541398527","UA" +"1541398528","1541398783","RU" +"1541398784","1541399039","PL" +"1541399040","1541399295","RU" +"1541399296","1541399551","UA" +"1541399552","1541399807","DE" +"1541399808","1541400063","RU" +"1541400064","1541400319","SI" +"1541400320","1541400831","SE" +"1541400832","1541401087","NL" +"1541401088","1541401343","UA" +"1541401344","1541401599","DK" +"1541401600","1541401855","LV" +"1541401856","1541402111","HR" +"1541402112","1541402367","SI" +"1541402368","1541402623","RU" +"1541402624","1541402879","FR" +"1541402880","1541403135","PL" +"1541403136","1541403391","RU" +"1541403392","1541403647","EE" +"1541403648","1541403903","RU" +"1541403904","1541404159","GE" +"1541404160","1541404415","RU" +"1541404416","1541404671","DE" +"1541404672","1541404927","AT" +"1541404928","1541405183","HR" +"1541405184","1541405439","PL" +"1541405440","1541405951","RU" +"1541405952","1541406207","FR" +"1541406208","1541406463","RU" +"1541406464","1541406719","AT" +"1541406720","1541407231","LV" +"1541407232","1541407743","UA" +"1541407744","1541408255","FI" +"1541408256","1541408767","FR" +"1541408768","1541409791","UA" +"1541409792","1541410303","LV" +"1541410304","1541410815","RU" +"1541410816","1541411327","UA" +"1541411328","1541412863","RU" +"1541412864","1541413375","UA" +"1541413376","1541413887","GB" +"1541413888","1541414399","PL" +"1541414400","1541414911","UA" +"1541414912","1541415935","RU" +"1541415936","1541416447","SE" +"1541416448","1541416959","PL" +"1541416960","1541417471","RO" +"1541417472","1541417983","SK" +"1541417984","1541418495","UA" +"1541418496","1541419007","PL" +"1541419008","1541419519","CZ" +"1541419520","1541420031","RO" +"1541420032","1541420543","RU" +"1541420544","1541421055","NL" +"1541421056","1541421567","PL" +"1541421568","1541422079","CZ" +"1541422080","1541422591","PL" +"1541422592","1541423103","RU" +"1541423104","1541423615","UA" +"1541423616","1541424127","AT" +"1541424128","1541424639","UA" +"1541424640","1541425151","AT" +"1541425152","1541425663","IT" +"1541425664","1541426175","UA" +"1541426176","1541426687","RU" +"1541426688","1541427199","UA" +"1541427200","1541428223","RU" +"1541428224","1541429247","UA" +"1541429248","1541429759","FI" +"1541429760","1541430271","CZ" +"1541430272","1541430783","LT" +"1541430784","1541431295","CH" +"1541431296","1541431807","UA" +"1541431808","1541432319","RU" +"1541432320","1541432831","RO" +"1541432832","1541433343","RU" +"1541433344","1541433855","PL" +"1541433856","1541434367","RU" +"1541434368","1541434879","GB" +"1541434880","1541435391","IR" +"1541435392","1541435903","UA" +"1541435904","1541436415","RU" +"1541436416","1541437951","PL" +"1541437952","1541438463","NL" +"1541438464","1541439487","RU" +"1541439488","1541439999","PL" +"1541440000","1541441023","RU" +"1541441024","1541441535","LT" +"1541441536","1541442559","RU" +"1541442560","1541443071","NL" +"1541443072","1541444607","PL" +"1541444608","1541445119","FR" +"1541445120","1541445631","ES" +"1541445632","1541446143","GB" +"1541446144","1541446655","RU" +"1541446656","1541447167","UA" +"1541447168","1541447679","RU" +"1541447680","1541448191","NL" +"1541448192","1541448703","FR" +"1541448704","1541449215","NL" +"1541449216","1541449727","RU" +"1541449728","1541450239","UA" +"1541450240","1541450751","RU" +"1541450752","1541451263","SI" +"1541451264","1541451775","DK" +"1541451776","1541452287","IR" +"1541452288","1541452799","UA" +"1541452800","1541453311","PL" +"1541453312","1541453823","RU" +"1541453824","1541454335","PL" +"1541454336","1541454847","GB" +"1541454848","1541455359","EE" +"1541455360","1541455871","GB" +"1541455872","1541456383","PL" +"1541456384","1541456895","RU" +"1541456896","1541457919","PL" +"1541457920","1541458943","UA" +"1541458944","1541459455","RO" +"1541459456","1541460479","RU" +"1541460480","1541460991","DK" +"1541460992","1541461503","RO" +"1541461504","1541462527","PL" +"1541462528","1541463039","RU" +"1541463040","1541463551","PL" +"1541463552","1541464063","UA" +"1541464064","1541464575","PL" +"1541464576","1541465087","DE" +"1541465088","1541465599","RU" +"1541465600","1541466111","FR" +"1541466112","1541467135","RU" +"1541467136","1541467647","PL" +"1541467648","1541468159","SI" +"1541468160","1541468671","ES" +"1541468672","1541469183","NL" +"1541469184","1541469695","SE" +"1541469696","1541470207","LV" +"1541470208","1541470719","NL" +"1541470720","1541471231","RS" +"1541471232","1541472255","UA" +"1541472256","1541473279","GB" +"1541473280","1541474303","UA" +"1541474304","1541475327","PL" +"1541475328","1541476351","RO" +"1541476352","1541477375","GB" +"1541477376","1541479423","RU" +"1541479424","1541480447","PL" +"1541480448","1541481471","RO" +"1541481472","1541485567","UA" +"1541485568","1541486591","IR" +"1541486592","1541487615","UA" +"1541487616","1541488639","NO" +"1541488640","1541489663","PL" +"1541489664","1541490687","FI" +"1541490688","1541491711","UA" +"1541491712","1541492735","RU" +"1541492736","1541493759","UA" +"1541493760","1541494783","CZ" +"1541494784","1541496831","UA" +"1541496832","1541497855","SI" +"1541497856","1541498879","RU" +"1541498880","1541499903","LT" +"1541499904","1541500927","UA" +"1541500928","1541501951","RU" +"1541501952","1541503999","UA" +"1541504000","1541506047","RU" +"1541506048","1541507071","PL" +"1541507072","1541510143","UA" +"1541510144","1541511167","RU" +"1541511168","1541512191","UA" +"1541512192","1541513215","PL" +"1541513216","1541517311","UA" +"1541517312","1541518335","PL" +"1541518336","1541519359","IT" +"1541519360","1541521407","PL" +"1541521408","1541522431","RU" +"1541522432","1541524479","UA" +"1541524480","1541525503","RO" +"1541525504","1541528575","RU" +"1541528576","1541532671","UA" +"1541532672","1541533695","RU" +"1541533696","1541534719","PL" +"1541534720","1541535743","IT" +"1541535744","1541536767","US" +"1541536768","1541537791","RU" +"1541537792","1541538303","GB" +"1541538304","1541538815","RO" +"1541538816","1541539327","UA" +"1541539328","1541539839","PL" +"1541539840","1541540351","HR" +"1541540352","1541541375","RU" +"1541541376","1541541887","UA" +"1541541888","1541542399","PL" +"1541542400","1541542911","FR" +"1541542912","1541543423","MK" +"1541543424","1541543935","PL" +"1541543936","1541544447","GB" +"1541544448","1541544959","PL" +"1541544960","1541545471","FR" +"1541545472","1541545983","RU" +"1541545984","1541546495","LV" +"1541546496","1541547007","UA" +"1541547008","1541547519","SE" +"1541547520","1541548543","PL" +"1541548544","1541549567","UA" +"1541549568","1541550079","DE" +"1541550080","1541550591","RU" +"1541550592","1541551103","PL" +"1541551104","1541552127","RO" +"1541552128","1541553151","UA" +"1541553152","1541555199","RU" +"1541555200","1541556223","PL" +"1541556224","1541556479","UA" +"1541556480","1541556735","RU" +"1541556736","1541557247","IT" +"1541557248","1541557503","RU" +"1541557504","1541557759","SI" +"1541557760","1541558015","RU" +"1541558016","1541558271","HU" +"1541558272","1541559295","RU" +"1541559296","1541560319","RO" +"1541560320","1541561343","DE" +"1541561344","1541562879","RU" +"1541562880","1541563135","FR" +"1541563136","1541563391","NL" +"1541563392","1541564415","PL" +"1541564416","1541565439","RU" +"1541565440","1541565951","IT" +"1541565952","1541566463","PL" +"1541566464","1541567487","SK" +"1541567488","1541567743","RU" +"1541567744","1541567999","PL" +"1541568000","1541568511","SE" +"1541568512","1541569535","RU" +"1541569536","1541570559","NL" +"1541570560","1541571583","RU" +"1541571584","1541572607","UA" +"1541572608","1541573119","RU" +"1541573120","1541573631","UA" +"1541573632","1541574655","RU" +"1541574656","1541575167","DK" +"1541575168","1541575423","PL" +"1541575424","1541575679","IT" +"1541575680","1541577727","RU" +"1541577728","1541578751","AT" +"1541578752","1541579007","GB" +"1541579008","1541579263","RU" +"1541579264","1541579775","DE" +"1541579776","1541580799","RU" +"1541580800","1541581311","KZ" +"1541581312","1541581567","HR" +"1541581568","1541582847","RU" +"1541582848","1541583359","ES" +"1541583360","1541583615","RU" +"1541583616","1541583871","GE" +"1541583872","1541584127","SE" +"1541584128","1541584383","GB" +"1541584384","1541584895","BE" +"1541584896","1541585151","DE" +"1541585152","1541585663","RU" +"1541585664","1541585919","UA" +"1541585920","1541586431","RU" +"1541586432","1541587199","UA" +"1541587200","1541587455","FR" +"1541587456","1541588991","PL" +"1541588992","1541589247","RU" +"1541589248","1541589503","UA" +"1541589504","1541590015","CH" +"1541590016","1541590527","RU" +"1541590528","1541590783","GB" +"1541590784","1541591039","UA" +"1541591040","1541592063","RU" +"1541592064","1541592575","UA" +"1541592576","1541593087","FR" +"1541593088","1541594111","CZ" +"1541594112","1541594367","AL" +"1541594368","1541595135","RU" +"1541595136","1541595647","IR" +"1541595648","1541596159","BG" +"1541596160","1541597695","PL" +"1541597696","1541597951","RU" +"1541597952","1541598207","AM" +"1541598208","1541599231","PL" +"1541599232","1541600255","RS" +"1541600256","1541600511","HR" +"1541600512","1541600767","IL" +"1541600768","1541601023","SI" +"1541601024","1541601279","RU" +"1541601280","1541601791","DE" +"1541601792","1541602047","RU" +"1541602048","1541602303","PL" +"1541602304","1541603327","UA" +"1541603328","1541604351","PL" +"1541604352","1541605119","TR" +"1541605120","1541605375","CZ" +"1541605376","1541606911","RU" +"1541606912","1541607423","UZ" +"1541607424","1541608447","RU" +"1541608448","1541608703","DE" +"1541608704","1541608959","PL" +"1541608960","1541609215","SA" +"1541609216","1541609471","RU" +"1541609472","1541609983","SA" +"1541609984","1541610239","GB" +"1541610240","1541610495","NL" +"1541610496","1541611775","RU" +"1541611776","1541612031","RO" +"1541612032","1541612543","RU" +"1541612544","1541614079","PL" +"1541614080","1541614335","UA" +"1541614336","1541614591","SI" +"1541614592","1541615615","RU" +"1541615616","1541615871","CH" +"1541615872","1541616127","SE" +"1541616128","1541617663","RU" +"1541617664","1541619199","PL" +"1541619200","1541619455","GB" +"1541619456","1541620735","PL" +"1541620736","1541620991","RU" +"1541620992","1541621247","UA" +"1541621248","1541621759","IL" +"1541621760","1541622271","RO" +"1541622272","1541622527","RU" +"1541622528","1541622783","NL" +"1541622784","1541623295","PL" +"1541623296","1541623551","GB" +"1541623552","1541623807","RU" +"1541623808","1541624831","PL" +"1541624832","1541625855","RU" +"1541625856","1541626367","PL" +"1541626368","1541626623","RO" +"1541626624","1541627903","RU" +"1541627904","1541628415","CZ" +"1541628416","1541628927","DE" +"1541628928","1541629183","PT" +"1541629184","1541629439","LV" +"1541629440","1541630975","PL" +"1541630976","1541631231","GR" +"1541631232","1541631487","IT" +"1541631488","1541631999","SI" +"1541632000","1541632511","RU" +"1541632512","1541632767","NL" +"1541632768","1541634303","PL" +"1541634304","1541634559","MD" +"1541634560","1541635071","PL" +"1541635072","1541636095","GB" +"1541636096","1541636863","AT" +"1541636864","1541637119","RO" +"1541637120","1541637631","PL" +"1541637632","1541638143","CZ" +"1541638144","1541638399","RU" +"1541638400","1541638655","FR" +"1541638656","1541639167","HU" +"1541639168","1541640191","RU" +"1541640192","1541641215","KZ" +"1541641216","1541641727","RU" +"1541641728","1541642239","UA" +"1541642240","1541643263","RU" +"1541643264","1541644287","PL" +"1541644288","1541645311","RU" +"1541645312","1541645823","IL" +"1541645824","1541646079","RO" +"1541646080","1541646335","PL" +"1541646336","1541646847","RU" +"1541646848","1541647359","NO" +"1541647360","1541648383","RU" +"1541648384","1541648639","PL" +"1541648640","1541648895","DK" +"1541648896","1541649151","GB" +"1541649152","1541649407","NL" +"1541649408","1541650431","UA" +"1541650432","1541650687","RU" +"1541650688","1541650943","MD" +"1541650944","1541651199","SE" +"1541651200","1541651455","FI" +"1541651456","1541652479","RU" +"1541652480","1541652991","FI" +"1541652992","1541653247","FR" +"1541653248","1541653503","CZ" +"1541653504","1541654015","PL" +"1541654016","1541654271","RU" +"1541654272","1541655551","PL" +"1541655552","1541656063","AT" +"1541656064","1541656575","UA" +"1541656576","1541656831","SE" +"1541656832","1541657087","BE" +"1541657088","1541657599","RU" +"1541657600","1541659647","PL" +"1541659648","1541660671","GB" +"1541660672","1541661695","SK" +"1541661696","1541661951","RU" +"1541661952","1541662207","NL" +"1541662208","1541662719","RO" +"1541662720","1541663743","CZ" +"1541663744","1541664767","RO" +"1541664768","1541666047","RU" +"1541666048","1541666815","GB" +"1541666816","1541667839","NO" +"1541667840","1541668095","CH" +"1541668096","1541668351","GB" +"1541668352","1541668607","UA" +"1541668608","1541668863","GE" +"1541668864","1541669887","A1" +"1541669888","1541670911","LV" +"1541670912","1541671423","PL" +"1541671424","1541671679","RU" +"1541671680","1541671935","PL" +"1541671936","1541672959","UA" +"1541672960","1541674495","RS" +"1541674496","1541675007","KG" +"1541675008","1541675519","IE" +"1541675520","1541676031","RU" +"1541676032","1541676287","PL" +"1541676288","1541676543","RO" +"1541676544","1541677055","RU" +"1541677056","1541678079","PL" +"1541678080","1541678591","RO" +"1541678592","1541678847","BG" +"1541678848","1541679615","RU" +"1541679616","1541680127","PL" +"1541680128","1541681151","CZ" +"1541681152","1541682175","RU" +"1541682176","1541682687","DE" +"1541682688","1541683199","RU" +"1541683200","1541683455","PL" +"1541683456","1541683711","RU" +"1541683712","1541684223","UA" +"1541684224","1541684735","CH" +"1541684736","1541686271","RU" +"1541686272","1541687295","UA" +"1541687296","1541688319","GB" +"1541688320","1541688831","RU" +"1541688832","1541689343","GB" +"1541689344","1541690367","PL" +"1541690368","1541691391","LT" +"1541691392","1541691903","PL" +"1541691904","1541692159","SE" +"1541692160","1541692415","ES" +"1541692416","1541693439","PL" +"1541693440","1541694463","RU" +"1541694464","1541694719","CZ" +"1541694720","1541694975","DE" +"1541694976","1541695487","RU" +"1541695488","1541696511","DE" +"1541696512","1541697535","MD" +"1541697536","1541698047","PL" +"1541698048","1541698303","DK" +"1541698304","1541698559","GB" +"1541698560","1541699327","RU" +"1541699328","1541699583","RO" +"1541699584","1541700095","RU" +"1541700096","1541700607","UA" +"1541700608","1541700863","RU" +"1541700864","1541701119","PL" +"1541701120","1541701631","IL" +"1541701632","1541702655","RO" +"1541702656","1541703679","RU" +"1541703680","1541704703","PL" +"1541704704","1541706239","RO" +"1541706240","1541706751","UA" +"1541706752","1541707263","RU" +"1541707264","1541707519","CH" +"1541707520","1541707775","NL" +"1541707776","1541708799","RU" +"1541708800","1541709823","PL" +"1541709824","1541710335","RU" +"1541710336","1541710847","IL" +"1541710848","1541711871","SK" +"1541711872","1541712127","FR" +"1541712128","1541712383","TR" +"1541712384","1541712895","DE" +"1541712896","1541713919","RU" +"1541713920","1541714175","NL" +"1541714176","1541716223","RU" +"1541716224","1541716479","PL" +"1541716480","1541716991","UA" +"1541716992","1541717247","FR" +"1541717248","1541717503","IR" +"1541717504","1541718015","DE" +"1541718016","1541718271","KZ" +"1541718272","1541719039","NO" +"1541719040","1541720063","PL" +"1541720064","1541721087","RU" +"1541721088","1541721343","PL" +"1541721344","1541721599","RU" +"1541721600","1541721855","GB" +"1541721856","1541722111","SI" +"1541722112","1541723135","RU" +"1541723136","1541723647","HU" +"1541723648","1541723903","NO" +"1541723904","1541724159","BE" +"1541724160","1541725183","CZ" +"1541725184","1541727231","RU" +"1541727232","1541727743","UA" +"1541727744","1541727999","RU" +"1541728000","1541728255","UA" +"1541728256","1541729023","GB" +"1541729024","1541729279","DE" +"1541729280","1541729535","UA" +"1541729536","1541729791","PL" +"1541729792","1541730303","RU" +"1541730304","1541730815","ES" +"1541730816","1541731071","GB" +"1541731072","1541731327","DE" +"1541731328","1541731839","SK" +"1541731840","1541732351","RU" +"1541732352","1541732607","IL" +"1541732608","1541732863","RO" +"1541732864","1541733119","RU" +"1541733120","1541733375","GB" +"1541733376","1541734143","RS" +"1541734144","1541734399","TR" +"1541734400","1541734911","RO" +"1541734912","1541735167","RU" +"1541735168","1541735423","DE" +"1541735424","1541735679","GB" +"1541735680","1541735935","RU" +"1541735936","1541736447","RO" +"1541736448","1541737471","RU" +"1541737472","1541739519","RO" +"1541739520","1541739775","FR" +"1541739776","1541740031","NO" +"1541740032","1541740287","PL" +"1541740288","1541740543","NL" +"1541740544","1541740799","SK" +"1541740800","1541741055","RU" +"1541741056","1541741567","PL" +"1541741568","1541742079","SK" +"1541742080","1541742591","RO" +"1541742592","1541743103","SA" +"1541743104","1541743615","TR" +"1541743616","1541744639","SK" +"1541744640","1541745663","PL" +"1541745664","1541746175","TR" +"1541746176","1541746687","UA" +"1541746688","1541746943","RU" +"1541746944","1541747199","NL" +"1541747200","1541747711","RU" +"1541747712","1541748735","UA" +"1541748736","1541748991","RU" +"1541748992","1541749247","AT" +"1541749248","1541749503","ES" +"1541749504","1541749759","RU" +"1541749760","1541750783","NL" +"1541750784","1541751295","AE" +"1541751296","1541751807","UA" +"1541751808","1541752831","PL" +"1541752832","1541753087","SI" +"1541753088","1541753343","GB" +"1541753344","1541753855","RU" +"1541753856","1541754879","UA" +"1541754880","1541755391","IT" +"1541755392","1541757439","PL" +"1541757440","1541757951","EU" +"1541757952","1541758207","GB" +"1541758208","1541758463","HU" +"1541758464","1541758719","RU" +"1541758720","1541758975","FR" +"1541758976","1541760255","RU" +"1541760256","1541760511","UA" +"1541760512","1541761023","CH" +"1541761024","1541761535","KG" +"1541761536","1541762047","PL" +"1541762048","1541763583","RU" +"1541763584","1541763839","SE" +"1541763840","1541764095","UA" +"1541764096","1541765119","RU" +"1541765120","1541766143","UA" +"1541766144","1541767167","GB" +"1541767168","1541767679","UA" +"1541767680","1541768191","FR" +"1541768192","1541769215","RO" +"1541769216","1541769471","FR" +"1541769472","1541770239","FI" +"1541770240","1541770495","CH" +"1541770496","1541770751","SE" +"1541770752","1541771263","NO" +"1541771264","1541771775","NL" +"1541771776","1541772031","RU" +"1541772032","1541772287","RO" +"1541772288","1541773311","KZ" +"1541773312","1541773823","NL" +"1541773824","1541774079","RU" +"1541774080","1541774335","TR" +"1541774336","1541775359","RO" +"1541775360","1541776895","UZ" +"1541776896","1541777151","GB" +"1541777152","1541777407","UA" +"1541777408","1541778431","DE" +"1541778432","1541778687","FR" +"1541778688","1541779455","GB" +"1541779456","1541779967","RU" +"1541779968","1541780479","DE" +"1541780480","1541780735","ES" +"1541780736","1541780991","GB" +"1541780992","1541781503","RO" +"1541781504","1541781759","TR" +"1541781760","1541782015","RU" +"1541782016","1541782271","RO" +"1541782272","1541782527","GB" +"1541782528","1541783551","RU" +"1541783552","1541783807","IE" +"1541783808","1541784063","PL" +"1541784064","1541784575","DE" +"1541784576","1541785855","RU" +"1541785856","1541786111","GB" +"1541786112","1541786623","RU" +"1541786624","1541787647","UA" +"1541787648","1541788671","RU" +"1541788672","1541789183","PL" +"1541789184","1541789695","IR" +"1541789696","1541790719","UA" +"1541790720","1541790975","SA" +"1541790976","1541791231","RU" +"1541791232","1541791743","GB" +"1541791744","1541792255","KG" +"1541792256","1541792511","UA" +"1541792512","1541792767","FR" +"1541792768","1541793023","RO" +"1541793024","1541793279","HR" +"1541793280","1541793791","FR" +"1541793792","1541794047","NL" +"1541794048","1541794815","RU" +"1541794816","1541795071","CH" +"1541795072","1541795327","RU" +"1541795328","1541795583","PL" +"1541795584","1541795839","ES" +"1541795840","1541796863","UA" +"1541796864","1541797375","RU" +"1541797376","1541797887","NL" +"1541797888","1541798143","UA" +"1541798144","1541798399","PL" +"1541798400","1541798911","RO" +"1541798912","1541799935","CZ" +"1541799936","1541800447","FR" +"1541800448","1541800959","AT" +"1541800960","1541801471","FI" +"1541801472","1541801983","BG" +"1541801984","1541802495","PL" +"1541802496","1541803007","RU" +"1541803008","1541804031","LT" +"1541804032","1541804287","GB" +"1541804288","1541804543","PL" +"1541804544","1541805567","RU" +"1541805568","1541805823","DE" +"1541805824","1541806079","RU" +"1541806080","1541806335","PL" +"1541806336","1541806591","UA" +"1541806592","1541807103","RU" +"1541807104","1541808127","UA" +"1541808128","1541808383","IR" +"1541808384","1541809151","NL" +"1541809152","1541809663","PL" +"1541809664","1541810175","GB" +"1541810176","1541810431","PT" +"1541810432","1541810687","AE" +"1541810688","1541811199","PL" +"1541811200","1541811711","SK" +"1541811712","1541811967","NL" +"1541811968","1541812991","RU" +"1541812992","1541813247","NL" +"1541813248","1541813759","LT" +"1541813760","1541814015","RU" +"1541814016","1541814783","ES" +"1541814784","1541815295","PL" +"1541815296","1541816319","RU" +"1541816320","1541816575","BE" +"1541816576","1541816831","RU" +"1541816832","1541817343","FR" +"1541817344","1541818367","DK" +"1541818368","1541818623","RU" +"1541818624","1541818879","TR" +"1541818880","1541819903","PL" +"1541819904","1541820159","SE" +"1541820160","1541820415","IL" +"1541820416","1541820671","MD" +"1541820672","1541820927","TR" +"1541820928","1541821183","RU" +"1541821184","1541821439","DE" +"1541821440","1541821695","RU" +"1541821696","1541821951","TR" +"1541821952","1541822975","PL" +"1541822976","1541823231","SI" +"1541823232","1541823487","RU" +"1541823488","1541823999","UA" +"1541824000","1541824511","RU" +"1541824512","1541824767","IT" +"1541824768","1541825023","GB" +"1541825024","1541825535","PL" +"1541825536","1541826047","RU" +"1541826048","1541826559","IT" +"1541826560","1541827071","ES" +"1541827072","1541827327","LV" +"1541827328","1541827583","RU" +"1541827584","1541828095","SE" +"1541828096","1541828351","RU" +"1541828352","1541828607","LV" +"1541828608","1541830911","PL" +"1541830912","1541831167","UA" +"1541831168","1541831423","PL" +"1541831424","1541831679","RO" +"1541831680","1541832191","SA" +"1541832192","1541833983","SE" +"1541833984","1541834239","RU" +"1541834240","1541834495","LV" +"1541834496","1541834751","RU" +"1541834752","1541835775","RO" +"1541835776","1541836287","CH" +"1541836288","1541836543","AT" +"1541836544","1541836799","RU" +"1541836800","1541837055","CZ" +"1541837056","1541837311","IT" +"1541837312","1541837823","RU" +"1541837824","1541838079","PL" +"1541838080","1541839871","RU" +"1541839872","1541840383","PL" +"1541840384","1541840639","RU" +"1541840640","1541840895","PL" +"1541840896","1541841407","DE" +"1541841408","1541842943","PL" +"1541842944","1541843199","GB" +"1541843200","1541843455","FR" +"1541843456","1541843967","BE" +"1541843968","1541844991","DE" +"1541844992","1541846015","BE" +"1541846016","1541846271","PL" +"1541846272","1541846527","GB" +"1541846528","1541848063","RU" +"1541848064","1541848319","HU" +"1541848320","1541848575","GB" +"1541848576","1541849087","RU" +"1541849088","1541850111","BG" +"1541850112","1541850623","RU" +"1541850624","1541851135","UA" +"1541851136","1541852671","PL" +"1541852672","1541853183","RO" +"1541853184","1541854207","RU" +"1541854208","1541854463","FR" +"1541854464","1541854719","KW" +"1541854720","1541854975","MD" +"1541854976","1541855999","RU" +"1541856000","1541856255","MK" +"1541856256","1541856511","UA" +"1541856512","1541857279","PL" +"1541857280","1541857535","RU" +"1541857536","1541857791","KW" +"1541857792","1541858303","RU" +"1541858304","1541858559","LV" +"1541858560","1541858815","UA" +"1541858816","1541859327","BG" +"1541859328","1541859583","RO" +"1541859584","1541859839","PL" +"1541859840","1541860095","RO" +"1541860096","1541860351","FR" +"1541860352","1541860607","IL" +"1541860608","1541860863","NL" +"1541860864","1541861119","SI" +"1541861120","1541861375","DK" +"1541861376","1541861887","RO" +"1541861888","1541862143","AT" +"1541862144","1541862399","GB" +"1541862400","1541862911","NL" +"1541862912","1541863167","GB" +"1541863168","1541863423","RU" +"1541863424","1541863679","RO" +"1541863680","1541863935","CH" +"1541863936","1541864191","ES" +"1541864192","1541864447","GB" +"1541864448","1541864959","RU" +"1541864960","1541865471","AL" +"1541865472","1541865727","RO" +"1541865728","1541865983","UA" +"1541865984","1541866239","PL" +"1541866240","1541866495","FR" +"1541866496","1541867263","NL" +"1541867264","1541867519","RO" +"1541867520","1541867775","RU" +"1541867776","1541868031","PL" +"1541868032","1541868287","MT" +"1541868288","1541868543","AE" +"1541868544","1541869567","PL" +"1541869568","1541870079","RU" +"1541870080","1541871103","PL" +"1541871104","1541871359","AT" +"1541871360","1541872639","PL" +"1541872640","1541873663","CZ" +"1541873664","1541874175","PL" +"1541874176","1541874687","RU" +"1541874688","1541875711","PL" +"1541875712","1541876735","UA" +"1541876736","1541877247","PL" +"1541877248","1541877503","GB" +"1541877504","1541877759","RU" +"1541877760","1541878783","RO" +"1541878784","1541879295","PL" +"1541879296","1541879807","UA" +"1541879808","1541880831","UZ" +"1541880832","1541881343","PL" +"1541881344","1541881599","IT" +"1541881600","1541881855","SE" +"1541881856","1541882879","RU" +"1541882880","1541883135","LV" +"1541883136","1541883391","UA" +"1541883392","1541884927","PL" +"1541884928","1541885951","LT" +"1541885952","1541886975","PL" +"1541886976","1541887999","UA" +"1541888000","1541888255","RS" +"1541888256","1541888511","RU" +"1541888512","1541889023","GB" +"1541889024","1541889535","PL" +"1541889536","1541890303","RU" +"1541890304","1541890559","DE" +"1541890560","1541891071","UA" +"1541891072","1541893119","PL" +"1541893120","1541893631","BE" +"1541893632","1541894143","PL" +"1541894144","1541895167","RU" +"1541895168","1541897727","PL" +"1541897728","1541897983","RU" +"1541897984","1541898239","UA" +"1541898240","1541900799","RU" +"1541900800","1541901055","RO" +"1541901056","1541901311","FR" +"1541901312","1541901567","PL" +"1541901568","1541901823","RU" +"1541901824","1541902335","UA" +"1541902336","1541902847","GB" +"1541902848","1541903103","RU" +"1541903104","1541903359","DK" +"1541903360","1541904383","UA" +"1541904384","1541904639","PL" +"1541904640","1541904895","SE" +"1541904896","1541905407","GB" +"1541905408","1541905663","RU" +"1541905664","1541906431","RO" +"1541906432","1541906687","UA" +"1541906688","1541907455","RU" +"1541907456","1541908479","IT" +"1541908480","1541908991","PL" +"1541908992","1541909247","UA" +"1541909248","1541909503","CZ" +"1541909504","1541910527","NL" +"1541910528","1541911039","RU" +"1541911040","1541911295","PL" +"1541911296","1541911551","IT" +"1541911552","1541912575","RU" +"1541912576","1541912831","NL" +"1541912832","1541913087","UA" +"1541913088","1541914623","RU" +"1541914624","1541915647","IL" +"1541915648","1541916671","RU" +"1541916672","1541917695","RO" +"1541917696","1541917951","CH" +"1541917952","1541918207","PL" +"1541918208","1541918463","UA" +"1541918464","1541919743","RO" +"1541919744","1541919999","DK" +"1541920000","1541920767","RU" +"1541920768","1541921279","PT" +"1541921280","1541921791","RU" +"1541921792","1541922047","DE" +"1541922048","1541922303","PL" +"1541922304","1541922559","RU" +"1541922560","1541923839","RO" +"1541923840","1541924095","FR" +"1541924096","1541924351","UA" +"1541924352","1541924863","PL" +"1541924864","1541925119","RO" +"1541925120","1541926911","RU" +"1541926912","1541927167","UA" +"1541927168","1541927679","PL" +"1541927680","1541927935","DE" +"1541927936","1541929983","PL" +"1541929984","1541931007","RU" +"1541931008","1541932031","UA" +"1541932032","1541932543","PL" +"1541932544","1541935103","RU" +"1541935104","1541936383","RO" +"1541936384","1541936639","UA" +"1541936640","1541936895","DE" +"1541936896","1541937151","FR" +"1541937152","1541937663","NL" +"1541937664","1541937919","GE" +"1541937920","1541938175","PL" +"1541938176","1541939199","UA" +"1541939200","1541939967","RU" +"1541939968","1541940223","ES" +"1541940224","1541940479","GB" +"1541940480","1541940735","CH" +"1541940736","1541940991","PL" +"1541940992","1541941247","RU" +"1541941248","1541942271","FR" +"1541942272","1541944831","PL" +"1541944832","1541945087","DE" +"1541945088","1541945855","RO" +"1541945856","1541946111","PL" +"1541946112","1541946879","SE" +"1541946880","1541947391","PL" +"1541947392","1541948927","IR" +"1541948928","1541949183","RU" +"1541949184","1541949439","ES" +"1541949440","1541950463","IR" +"1541950464","1541951487","ES" +"1541951488","1541951743","RU" +"1541951744","1541951999","ES" +"1541952000","1541952255","CZ" +"1541952256","1541952511","NO" +"1541952512","1541953535","CZ" +"1541953536","1541954047","LU" +"1541954048","1541954559","PL" +"1541954560","1541955583","RU" +"1541955584","1541956095","DE" +"1541956096","1541956351","RO" +"1541956352","1541956607","UA" +"1541956608","1541957119","LB" +"1541957120","1541957375","PL" +"1541957376","1541957631","UA" +"1541957632","1541957887","GB" +"1541957888","1541958143","NL" +"1541958144","1541958655","RS" +"1541958656","1541959679","RU" +"1541959680","1541959935","PL" +"1541959936","1541960191","RU" +"1541960192","1541960703","NL" +"1541960704","1541961727","UA" +"1541961728","1541962751","RU" +"1541962752","1541963263","GB" +"1541963264","1541963519","RU" +"1541963520","1541964031","UA" +"1541964032","1541964287","RU" +"1541964288","1541964543","NL" +"1541964544","1541965823","RU" +"1541965824","1541966847","NL" +"1541966848","1541967871","PL" +"1541967872","1541968895","RU" +"1541968896","1541969407","RO" +"1541969408","1541969919","GB" +"1541969920","1541970175","IT" +"1541970176","1541970431","GB" +"1541970432","1541971199","FI" +"1541971200","1541971967","UA" +"1541971968","1541972479","PL" +"1541972480","1541972735","RU" +"1541972736","1541972991","AT" +"1541972992","1541974015","PL" +"1541974016","1541975551","RU" +"1541975552","1541975807","TR" +"1541975808","1541976319","PL" +"1541976320","1541976575","UA" +"1541976576","1541977087","RU" +"1541977088","1541977343","IT" +"1541977344","1541977599","GB" +"1541977600","1541977855","RO" +"1541977856","1541978111","PL" +"1541978112","1541978623","RO" +"1541978624","1541978879","MD" +"1541978880","1541979135","FR" +"1541979136","1541979647","RU" +"1541979648","1541981183","PL" +"1541981184","1541981951","RU" +"1541981952","1541982207","UA" +"1541982208","1541982719","RS" +"1541982720","1541984255","RU" +"1541984256","1541984511","UA" +"1541984512","1541984767","BG" +"1541984768","1541985279","RO" +"1541985280","1541986303","CZ" +"1541986304","1541986815","RU" +"1541986816","1541988351","SK" +"1541988352","1541988607","FR" +"1541988608","1541988863","RU" +"1541988864","1541989631","RO" +"1541989632","1541989887","LI" +"1541989888","1541990399","RU" +"1541990400","1541990911","AT" +"1541990912","1541991167","SI" +"1541991168","1541991423","RU" +"1541991424","1541991935","RS" +"1541991936","1541992191","UA" +"1541992192","1541992447","SI" +"1541992448","1541992959","UA" +"1541992960","1541993215","FR" +"1541993216","1541994239","RU" +"1541994240","1541994495","CZ" +"1541994496","1541995519","PL" +"1541995520","1541996031","RU" +"1541996032","1541996287","RO" +"1541996288","1541996543","RU" +"1541996544","1541997567","RO" +"1541997568","1541997823","RU" +"1541997824","1541998079","GB" +"1541998080","1541998335","NL" +"1541998336","1541998591","AT" +"1541998592","1541999615","DE" +"1541999616","1542000127","AT" +"1542000128","1542000383","NO" +"1542000384","1542000639","GE" +"1542000640","1542000895","GB" +"1542000896","1542001151","UA" +"1542001152","1542001663","PL" +"1542001664","1542001919","MD" +"1542001920","1542002175","HU" +"1542002176","1542002687","NL" +"1542002688","1542002943","RS" +"1542002944","1542003199","PL" +"1542003200","1542003711","RO" +"1542003712","1542004735","RU" +"1542004736","1542004991","BG" +"1542004992","1542005247","GB" +"1542005248","1542005503","PL" +"1542005504","1542005759","DE" +"1542005760","1542006271","HR" +"1542006272","1542008831","RU" +"1542008832","1542009343","UA" +"1542009344","1542009599","LI" +"1542009600","1542009855","FR" +"1542009856","1542010367","NL" +"1542010368","1542010879","RU" +"1542010880","1542011903","IR" +"1542011904","1542012159","PL" +"1542012160","1542012415","RU" +"1542012416","1542012671","GB" +"1542012672","1542013951","RU" +"1542013952","1542014207","FR" +"1542014208","1542017023","PL" +"1542017024","1542017279","TR" +"1542017280","1542017535","GB" +"1542017536","1542017791","RU" +"1542017792","1542018047","GB" +"1542018048","1542019071","DE" +"1542019072","1542019583","RU" +"1542019584","1542020095","UA" +"1542020096","1542021119","RU" +"1542021120","1542023167","UA" +"1542023168","1542023423","PL" +"1542023424","1542023679","NL" +"1542023680","1542023935","RO" +"1542023936","1542024191","PL" +"1542024192","1542025215","UA" +"1542025216","1542026239","PL" +"1542026240","1542026751","FI" +"1542026752","1542027007","BE" +"1542027008","1542027263","FR" +"1542027264","1542027775","NL" +"1542027776","1542028031","FR" +"1542028032","1542028287","UA" +"1542028288","1542028543","GB" +"1542028544","1542028799","FI" +"1542028800","1542029055","CH" +"1542029056","1542029311","UA" +"1542029312","1542029823","GB" +"1542029824","1542031359","RU" +"1542031360","1542032383","PL" +"1542032384","1542032639","UA" +"1542032640","1542032895","SA" +"1542032896","1542033407","DK" +"1542033408","1542035199","RU" +"1542035200","1542035455","UA" +"1542035456","1542036479","GB" +"1542036480","1542038271","PL" +"1542038272","1542038527","SI" +"1542038528","1542040575","RU" +"1542040576","1542041087","UA" +"1542041088","1542041343","SA" +"1542041344","1542041599","RU" +"1542041600","1542042623","LT" +"1542042624","1542043135","IT" +"1542043136","1542043391","CH" +"1542043392","1542043647","GB" +"1542043648","1542044671","PL" +"1542044672","1542045183","RU" +"1542045184","1542045439","RO" +"1542045440","1542045695","AT" +"1542045696","1542046719","RO" +"1542046720","1542047743","PL" +"1542047744","1542048767","RO" +"1542048768","1542049279","PL" +"1542049280","1542049791","BE" +"1542049792","1542050815","CZ" +"1542050816","1542051071","CH" +"1542051072","1542051327","RU" +"1542051328","1542051839","LV" +"1542051840","1542053887","RU" +"1542053888","1542054399","NL" +"1542054400","1542054655","RU" +"1542054656","1542054911","AT" +"1542054912","1542055423","PL" +"1542055424","1542055935","RU" +"1542055936","1542057471","PL" +"1542057472","1542060031","RU" +"1542060032","1542060287","SK" +"1542060288","1542060543","RO" +"1542060544","1542061055","PL" +"1542061056","1542062079","IT" +"1542062080","1542064127","UA" +"1542064128","1542064383","PL" +"1542064384","1542064639","FR" +"1542064640","1542065151","RU" +"1542065152","1542066175","PL" +"1542066176","1542066431","RU" +"1542066432","1542066687","NL" +"1542066688","1542066943","GB" +"1542066944","1542067199","BG" +"1542067200","1542067455","UA" +"1542067456","1542067711","BG" +"1542067712","1542067967","DE" +"1542067968","1542068223","GB" +"1542068224","1542069759","UA" +"1542069760","1542070015","DE" +"1542070016","1542071295","UA" +"1542071296","1542071551","CN" +"1542071552","1542071807","UA" +"1542071808","1542072319","DE" +"1542072320","1542073343","UA" +"1542073344","1542074111","RO" +"1542074112","1542074367","UA" +"1542074368","1542074623","GB" +"1542074624","1542074879","PL" +"1542074880","1542075391","NL" +"1542075392","1542075647","CH" +"1542075648","1542075903","RU" +"1542075904","1542077439","RO" +"1542077440","1542078975","RU" +"1542078976","1542079487","PL" +"1542079488","1542080511","RU" +"1542080512","1542082559","UA" +"1542082560","1542083583","RU" +"1542083584","1542085631","UA" +"1542085632","1542086655","BG" +"1542086656","1542087167","RU" +"1542087168","1542087679","UA" +"1542087680","1542088703","PL" +"1542088704","1542089727","FR" +"1542089728","1542090751","RU" +"1542090752","1542091775","PL" +"1542091776","1542092799","RU" +"1542092800","1542093823","RO" +"1542093824","1542095871","PL" +"1542095872","1542096895","RS" +"1542096896","1542098431","UA" +"1542098432","1542099199","PL" +"1542099200","1542099455","RU" +"1542099456","1542099711","PL" +"1542099712","1542099967","RU" +"1542099968","1542100223","NL" +"1542100224","1542100479","DK" +"1542100480","1542100991","RO" +"1542100992","1542102015","RU" +"1542102016","1542103039","RO" +"1542103040","1542103295","CH" +"1542103296","1542103551","RU" +"1542103552","1542104063","CZ" +"1542104064","1542105087","RU" +"1542105088","1542105599","RO" +"1542105600","1542105855","RU" +"1542105856","1542106111","DE" +"1542106112","1542107135","RU" +"1542107136","1542107391","PL" +"1542107392","1542107903","RU" +"1542107904","1542108159","SK" +"1542108160","1542109183","RU" +"1542109184","1542109695","GB" +"1542109696","1542110207","PL" +"1542110208","1542110463","RU" +"1542110464","1542110719","CH" +"1542110720","1542111231","RS" +"1542111232","1542111487","SE" +"1542111488","1542111743","NL" +"1542111744","1542112255","FR" +"1542112256","1542113279","UA" +"1542113280","1542113535","LT" +"1542113536","1542113791","GB" +"1542113792","1542114047","RU" +"1542114048","1542114303","BE" +"1542114304","1542114815","FI" +"1542114816","1542115071","NL" +"1542115072","1542115327","PL" +"1542115328","1542116351","UA" +"1542116352","1542116607","RO" +"1542116608","1542116863","DE" +"1542116864","1542117119","GB" +"1542117120","1542117631","DE" +"1542117632","1542117887","PL" +"1542117888","1542118399","UZ" +"1542118400","1542119423","RO" +"1542119424","1542119935","RU" +"1542119936","1542120703","RO" +"1542120704","1542120959","AT" +"1542120960","1542121471","BE" +"1542121472","1542121727","PL" +"1542121728","1542123519","FR" +"1542123520","1542123775","SE" +"1542123776","1542124543","RO" +"1542124544","1542124799","DE" +"1542124800","1542125567","PL" +"1542125568","1542126591","CZ" +"1542126592","1542127103","PL" +"1542127104","1542127359","GB" +"1542127360","1542127615","RU" +"1542127616","1542128127","PL" +"1542128128","1542128383","RU" +"1542128384","1542129151","RO" +"1542129152","1542129407","IS" +"1542129408","1542129663","RU" +"1542129664","1542130687","DE" +"1542130688","1542131711","UA" +"1542131712","1542134271","PL" +"1542134272","1542136319","RU" +"1542136320","1542136831","DE" +"1542136832","1542137855","RU" +"1542137856","1542138367","ES" +"1542138368","1542138623","RU" +"1542138624","1542138879","RO" +"1542138880","1542139135","GB" +"1542139136","1542139391","DE" +"1542139392","1542139647","UA" +"1542139648","1542139903","DE" +"1542139904","1542140927","ES" +"1542140928","1542141951","SK" +"1542141952","1542142975","GB" +"1542142976","1542143999","NO" +"1542144000","1542144255","TR" +"1542144256","1542144511","GB" +"1542144512","1542144767","RU" +"1542144768","1542146047","UA" +"1542146048","1542147583","RU" +"1542147584","1542148095","FR" +"1542148096","1542148607","RU" +"1542148608","1542148863","SI" +"1542148864","1542149119","NL" +"1542149120","1542150143","UA" +"1542150144","1542152191","RU" +"1542152192","1542153215","IE" +"1542153216","1542153471","DK" +"1542153472","1542153727","RU" +"1542153728","1542153983","UA" +"1542153984","1542154239","RU" +"1542154240","1542154751","TR" +"1542154752","1542155007","RU" +"1542155008","1542155263","IL" +"1542155264","1542156287","ES" +"1542156288","1542156543","RU" +"1542156544","1542156799","RO" +"1542156800","1542157311","DE" +"1542157312","1542158335","AZ" +"1542158336","1542158847","IT" +"1542158848","1542159359","RO" +"1542159360","1542160127","PL" +"1542160128","1542160383","RU" +"1542160384","1542160895","UA" +"1542160896","1542161407","RO" +"1542161408","1542162431","NL" +"1542162432","1542162943","RU" +"1542162944","1542163199","FR" +"1542163200","1542163455","DK" +"1542163456","1542163711","GB" +"1542163712","1542163967","FR" +"1542163968","1542164479","UA" +"1542164480","1542165759","RU" +"1542165760","1542166015","PL" +"1542166016","1542166527","IL" +"1542166528","1542167551","PL" +"1542167552","1542168319","RU" +"1542168320","1542168575","AE" +"1542168576","1542169599","PL" +"1542169600","1542169855","BG" +"1542169856","1542170623","RO" +"1542170624","1542170879","SE" +"1542170880","1542171135","RU" +"1542171136","1542171647","HR" +"1542171648","1542172159","GB" +"1542172160","1542172415","NL" +"1542172416","1542172671","RU" +"1542172672","1542173695","KZ" +"1542173696","1542174207","RU" +"1542174208","1542174463","UA" +"1542174464","1542174719","CZ" +"1542174720","1542176767","RU" +"1542176768","1542177791","PL" +"1542177792","1542178815","UA" +"1542178816","1542179327","CZ" +"1542179328","1542179583","PL" +"1542179584","1542179839","RU" +"1542179840","1542180863","PL" +"1542180864","1542181887","GB" +"1542181888","1542182143","CH" +"1542182144","1542182399","RU" +"1542182400","1542182655","GB" +"1542182656","1542182911","FR" +"1542182912","1542183935","PL" +"1542183936","1542184191","GB" +"1542184192","1542184447","RU" +"1542184448","1542184959","PL" +"1542184960","1542185983","UA" +"1542185984","1542187007","PL" +"1542187008","1542187263","DK" +"1542187264","1542187519","RU" +"1542187520","1542188031","GB" +"1542188032","1542188287","DE" +"1542188288","1542188543","NL" +"1542188544","1542189055","PL" +"1542189056","1542189311","DE" +"1542189312","1542189567","TR" +"1542189568","1542189823","SI" +"1542189824","1542190079","GE" +"1542190080","1542191103","RU" +"1542191104","1542192127","BG" +"1542192128","1542193407","PL" +"1542193408","1542193663","SI" +"1542193664","1542194175","RU" +"1542194176","1542195711","PL" +"1542195712","1542196479","RU" +"1542196480","1542196735","PL" +"1542196736","1542197247","RU" +"1542197248","1542197503","DK" +"1542197504","1542198015","GB" +"1542198016","1542198271","NL" +"1542198272","1542198783","PL" +"1542198784","1542199551","RU" +"1542199552","1542199807","FR" +"1542199808","1542200319","GB" +"1542200320","1542200575","DK" +"1542200576","1542200831","US" +"1542200832","1542201343","RU" +"1542201344","1542202367","PL" +"1542202368","1542202623","UA" +"1542202624","1542202879","HR" +"1542202880","1542203391","EE" +"1542203392","1542204415","CZ" +"1542204416","1542204671","EE" +"1542204672","1542204927","CH" +"1542204928","1542205439","RO" +"1542205440","1542206463","RU" +"1542206464","1542207487","PL" +"1542207488","1542207743","GB" +"1542207744","1542207999","PL" +"1542208000","1542208255","RO" +"1542208256","1542208511","ES" +"1542208512","1542209535","RU" +"1542209536","1542211583","SK" +"1542211584","1542212607","PL" +"1542212608","1542213119","RO" +"1542213120","1542213375","CH" +"1542213376","1542213631","RO" +"1542213632","1542214143","RU" +"1542214144","1542214399","SK" +"1542214400","1542214655","NL" +"1542214656","1542215679","PL" +"1542215680","1542216703","RO" +"1542216704","1542217727","RU" +"1542217728","1542218751","UA" +"1542218752","1542220031","RU" +"1542220032","1542220287","PL" +"1542220288","1542220799","DE" +"1542220800","1542222335","RU" +"1542222336","1542222591","UA" +"1542222592","1542222847","PK" +"1542222848","1542223103","SE" +"1542223104","1542223359","GB" +"1542223360","1542223871","UA" +"1542223872","1542224127","RU" +"1542224128","1542224383","UA" +"1542224640","1542224895","DK" +"1542224896","1542225151","RU" +"1542225152","1542225407","PL" +"1542225408","1542225919","UA" +"1542225920","1542227455","PL" +"1542227456","1542227967","UA" +"1542227968","1542228223","RU" +"1542228224","1542228479","PL" +"1542228480","1542228991","UA" +"1542228992","1542230015","RU" +"1542230016","1542231039","BG" +"1542231040","1542232063","RO" +"1542232064","1542232319","GB" +"1542232320","1542232575","FR" +"1542232576","1542233087","RU" +"1542233088","1542234111","UA" +"1542234112","1542234367","AT" +"1542234368","1542234623","FR" +"1542234624","1542234879","AE" +"1542234880","1542235135","PL" +"1542235136","1542236159","RU" +"1542236160","1542236671","IR" +"1542236672","1542236927","RO" +"1542236928","1542237183","UA" +"1542237184","1542238207","PL" +"1542238208","1542239743","RU" +"1542239744","1542239999","EU" +"1542240000","1542240767","RU" +"1542240768","1542241023","DK" +"1542241024","1542241279","GB" +"1542241280","1542241535","LV" +"1542241536","1542241791","NL" +"1542241792","1542242303","GB" +"1542242304","1542243071","NL" +"1542243072","1542244863","RU" +"1542244864","1542245375","NL" +"1542245376","1542245887","RU" +"1542245888","1542246143","GB" +"1542246144","1542246911","SE" +"1542246912","1542247423","DK" +"1542247424","1542247679","SE" +"1542247680","1542247935","UA" +"1542247936","1542248447","NL" +"1542248448","1542249471","RO" +"1542249472","1542249727","RU" +"1542249728","1542249983","UA" +"1542249984","1542250239","EE" +"1542250240","1542250495","RO" +"1542250496","1542251519","UA" +"1542251520","1542251775","RO" +"1542251776","1542252031","PL" +"1542252032","1542252543","RO" +"1542252544","1542253055","PL" +"1542253056","1542253567","RU" +"1542253568","1542253823","LB" +"1542253824","1542254079","RO" +"1542254080","1542254335","RU" +"1542254336","1542254591","FR" +"1542254592","1542255615","RO" +"1542255616","1542256127","BE" +"1542256128","1542256639","RU" +"1542256640","1542257663","UA" +"1542257664","1542258175","RU" +"1542258176","1542258687","FR" +"1542258688","1542262783","UA" +"1542262784","1542263295","IT" +"1542263296","1542263807","PL" +"1542263808","1542264063","RU" +"1542264064","1542264831","SA" +"1542264832","1542265855","UA" +"1542265856","1542266879","SA" +"1542266880","1542267135","RU" +"1542267136","1542267391","SI" +"1542267392","1542267903","NO" +"1542267904","1542268159","PL" +"1542268160","1542268415","RU" +"1542268416","1542268927","FR" +"1542268928","1542269439","UA" +"1542269440","1542269695","LV" +"1542269696","1542269951","NL" +"1542269952","1542271487","RO" +"1542271488","1542271743","PS" +"1542271744","1542271999","CZ" +"1542272000","1542272255","PL" +"1542272256","1542273023","RU" +"1542273024","1542274047","BG" +"1542274048","1542275071","PL" +"1542275072","1542275327","UA" +"1542275328","1542275583","DE" +"1542275584","1542276095","SE" +"1542276096","1542277631","PL" +"1542277632","1542278143","GB" +"1542278144","1542278399","RU" +"1542278400","1542278655","PL" +"1542278656","1542278911","NL" +"1542278912","1542279679","PL" +"1542279680","1542280191","RU" +"1542280192","1542280959","PL" +"1542280960","1542281215","GB" +"1542281216","1542281727","DE" +"1542281728","1542281983","SE" +"1542281984","1542282751","RO" +"1542282752","1542283007","RU" +"1542283008","1542283263","SE" +"1542283264","1542283519","AT" +"1542283520","1542283775","RU" +"1542283776","1542284287","LV" +"1542284288","1542284799","DE" +"1542284800","1542285311","BG" +"1542285312","1542285823","RU" +"1542285824","1542286079","SE" +"1542286080","1542287359","UA" +"1542287360","1542287871","PL" +"1542287872","1542288639","UA" +"1542288640","1542288895","DE" +"1542288896","1542289151","PL" +"1542289152","1542291967","UA" +"1542291968","1542292479","RO" +"1542292480","1542293503","SI" +"1542293504","1542294527","PL" +"1542294528","1542295039","SE" +"1542295040","1542295295","UA" +"1542295296","1542295551","AT" +"1542295552","1542296831","RU" +"1542296832","1542297087","PL" +"1542297088","1542297343","RU" +"1542297344","1542297599","FI" +"1542297600","1542297855","UA" +"1542297856","1542298111","RU" +"1542298112","1542300159","PL" +"1542300160","1542300671","RU" +"1542300672","1542301695","UA" +"1542301696","1542302463","SK" +"1542302464","1542303231","PL" +"1542303232","1542303743","EU" +"1542303744","1542303999","GB" +"1542304000","1542304255","FR" +"1542304256","1542304511","RU" +"1542304768","1542305279","RU" +"1542305280","1542305791","UA" +"1542305792","1542306047","FR" +"1542306048","1542306303","GB" +"1542306304","1542307327","RU" +"1542307328","1542307583","PL" +"1542307584","1542307839","SE" +"1542307840","1542308095","RU" +"1542308096","1542308863","RO" +"1542308864","1542309119","PL" +"1542309120","1542309375","GB" +"1542309376","1542310911","RU" +"1542310912","1542312191","UA" +"1542312192","1542312447","RU" +"1542312448","1542312959","GB" +"1542312960","1542313215","FR" +"1542313216","1542313471","RU" +"1542313472","1542313727","DE" +"1542313728","1542313983","RU" +"1542313984","1542314495","TR" +"1542314496","1542314751","NL" +"1542314752","1542315007","PL" +"1542315008","1542316031","RU" +"1542316032","1542317567","PL" +"1542317568","1542317823","RU" +"1542317824","1542318079","GB" +"1542318080","1542319103","UA" +"1542319104","1542320127","CZ" +"1542320128","1542322175","UA" +"1542322176","1542322431","RO" +"1542322432","1542322687","RU" +"1542322688","1542322943","UA" +"1542322944","1542323199","IL" +"1542323200","1542323711","RU" +"1542323712","1542324479","IR" +"1542324480","1542325247","RU" +"1542325248","1542325759","UA" +"1542325760","1542326271","RS" +"1542326272","1542326527","CH" +"1542326528","1542326783","UA" +"1542326784","1542327295","RU" +"1542327296","1542328319","MD" +"1542328320","1542328831","UA" +"1542328832","1542329087","TR" +"1542329088","1542329343","AT" +"1542329344","1542329855","RU" +"1542329856","1542330111","GB" +"1542330112","1542330367","UA" +"1542330368","1542331903","RU" +"1542331904","1542332671","BE" +"1542332672","1542333439","RU" +"1542333440","1542333695","PL" +"1542333696","1542335487","RO" +"1542335488","1542337023","RU" +"1542337024","1542337279","RO" +"1542337280","1542337535","SE" +"1542337536","1542339839","PL" +"1542339840","1542340095","RS" +"1542340096","1542340607","PL" +"1542340608","1542342143","RU" +"1542342144","1542342655","RO" +"1542342656","1542343167","FR" +"1542343168","1542343679","UA" +"1542343680","1542344447","PL" +"1542344448","1542345727","RU" +"1542345728","1542345983","UA" +"1542345984","1542346239","PL" +"1542346240","1542348287","RU" +"1542348288","1542348799","MD" +"1542348800","1542349823","RU" +"1542349824","1542351359","UA" +"1542351360","1542351615","BG" +"1542351616","1542351871","PL" +"1542351872","1542353151","RU" +"1542353152","1542353407","SA" +"1542353408","1542353919","RU" +"1542353920","1542354943","IT" +"1542354944","1542355711","RU" +"1542355712","1542355967","GB" +"1542355968","1542356479","PL" +"1542356480","1542356735","ES" +"1542356736","1542357503","RU" +"1542357504","1542357759","GB" +"1542357760","1542358015","FR" +"1542358016","1542358271","UA" +"1542358272","1542358527","RU" +"1542358528","1542359039","PL" +"1542359040","1542360319","RU" +"1542360320","1542360575","NL" +"1542360576","1542361087","PL" +"1542361088","1542361343","LI" +"1542361344","1542361599","PL" +"1542361600","1542362111","UA" +"1542362112","1542362623","RO" +"1542362624","1542363135","FR" +"1542363136","1542363647","DK" +"1542363648","1542364159","NL" +"1542364160","1542365183","RU" +"1542365184","1542366719","GB" +"1542366720","1542367231","PL" +"1542367232","1542368255","RU" +"1542368256","1542369279","PL" +"1542369280","1542369791","NL" +"1542369792","1542370303","PL" +"1542370304","1542370815","DE" +"1542370816","1542371839","RU" +"1542371840","1542372351","RO" +"1542372352","1542373375","RU" +"1542373376","1542374399","UA" +"1542374400","1542375167","GB" +"1542375168","1542375423","BG" +"1542375424","1542376447","RU" +"1542376448","1542376959","BG" +"1542377216","1542377471","RU" +"1542377472","1542377983","GB" +"1542377984","1542378495","RU" +"1542378496","1542378751","DK" +"1542378752","1542379007","RU" +"1542379008","1542379519","GB" +"1542379520","1542379775","PL" +"1542379776","1542380031","RU" +"1542380032","1542380287","RO" +"1542380288","1542380543","BE" +"1542380544","1542380799","FR" +"1542380800","1542381055","GB" +"1542381056","1542381823","RU" +"1542381824","1542382079","AT" +"1542382080","1542382335","BE" +"1542382336","1542383615","RU" +"1542383616","1542384639","PL" +"1542384640","1542384895","DE" +"1542384896","1542385151","RU" +"1542385152","1542385663","CH" +"1542385664","1542386687","PL" +"1542386688","1542387199","UA" +"1542387200","1542387711","PL" +"1542387712","1542388223","RU" +"1542388224","1542388479","IT" +"1542388480","1542388735","BG" +"1542388736","1542389247","RU" +"1542389248","1542389503","PL" +"1542389504","1542389759","BG" +"1542389760","1542390783","RO" +"1542390784","1542391295","RU" +"1542391296","1542391807","FR" +"1542391808","1542392831","MD" +"1542392832","1542393087","RO" +"1542393088","1542393343","BG" +"1542393344","1542393599","IR" +"1542393600","1542394879","RU" +"1542395136","1542395391","ES" +"1542395392","1542395647","RU" +"1542395648","1542395903","AT" +"1542395904","1542396159","RU" +"1542396160","1542396415","NO" +"1542396416","1542396927","RU" +"1542396928","1542397951","PL" +"1542397952","1542398463","NL" +"1542398464","1542398975","DE" +"1542398976","1542399231","PL" +"1542399232","1542399487","RU" +"1542399488","1542399999","DK" +"1542400000","1542401535","RU" +"1542401536","1542401791","GB" +"1542401792","1542402047","BG" +"1542402048","1542403071","RU" +"1542403072","1542403327","CH" +"1542403328","1542403583","UA" +"1542404096","1542405375","RU" +"1542405376","1542405631","PL" +"1542405632","1542405887","GB" +"1542405888","1542406143","RU" +"1542406656","1542407167","PL" +"1542407168","1542408191","RU" +"1542409216","1542410239","UA" +"1542410240","1542411263","RU" +"1542411264","1542411519","DE" +"1542411520","1542411775","RU" +"1542411776","1542412031","EE" +"1542412032","1542412287","GB" +"1542412288","1542412799","RU" +"1542412800","1542413055","PL" +"1542413056","1542413311","GB" +"1542413312","1542413823","DE" +"1542413824","1542414079","RU" +"1542414080","1542414335","UA" +"1542414336","1542414847","SI" +"1542414848","1542415359","RU" +"1542415360","1542415615","DK" +"1542415616","1542415871","KZ" +"1542415872","1542416383","RU" +"1542416384","1542417407","UA" +"1542417408","1542418431","IR" +"1542418432","1542418687","RU" +"1542418688","1542420735","PL" +"1542420736","1542420991","RU" +"1542420992","1542421247","DK" +"1542421248","1542421503","RO" +"1542421504","1542422015","GB" +"1542422016","1542422527","RU" +"1542422528","1542422783","RO" +"1542422784","1542423039","PL" +"1542423040","1542423295","RO" +"1542423296","1542424575","RU" +"1542424576","1542425599","UA" +"1542425600","1542426623","RU" +"1542426624","1542426879","PL" +"1542426880","1542427135","GB" +"1542427136","1542427391","PT" +"1542427392","1542427647","IE" +"1542427648","1542428159","BG" +"1542428160","1542428415","UA" +"1542428416","1542428671","RS" +"1542428672","1542429695","PL" +"1542429696","1542429951","GB" +"1542429952","1542430207","VG" +"1542430208","1542430719","RU" +"1542430720","1542431743","UA" +"1542431744","1542432767","RO" +"1542432768","1542433791","PL" +"1542433792","1542434047","RU" +"1542434048","1542434303","RO" +"1542434304","1542434815","NL" +"1542434816","1542435071","RU" +"1542435072","1542435327","DE" +"1542435328","1542435839","RO" +"1542435840","1542436863","PL" +"1542436864","1542437119","RU" +"1542437120","1542437375","PL" +"1542437376","1542437631","NL" +"1542437632","1542437887","UA" +"1542437888","1542438399","SE" +"1542438400","1542438655","UA" +"1542438656","1542438911","RU" +"1542438912","1542439167","KZ" +"1542439168","1542439423","SI" +"1542439424","1542439679","RO" +"1542439680","1542439935","CY" +"1542439936","1542440959","PL" +"1542440960","1542441983","CZ" +"1542441984","1542442239","TR" +"1542442240","1542442495","PL" +"1542442496","1542443007","GE" +"1542443008","1542444031","GB" +"1542444032","1542444543","NL" +"1542444544","1542444799","IR" +"1542444800","1542445055","RU" +"1542445056","1542445567","SE" +"1542445568","1542446079","IL" +"1542446080","1542447871","RO" +"1542447872","1542448639","RU" +"1542448640","1542448895","RO" +"1542449152","1542450175","UA" +"1542450176","1542450687","CZ" +"1542450688","1542451199","RU" +"1542451200","1542451455","BG" +"1542451456","1542451711","UA" +"1542451712","1542451967","TR" +"1542451968","1542452223","SI" +"1542452224","1542454271","PL" +"1542454272","1542454783","NO" +"1542454784","1542455039","PL" +"1542455040","1542455295","SE" +"1542455552","1542455807","RO" +"1542455808","1542456319","GB" +"1542456320","1542456831","RO" +"1542456832","1542457343","RS" +"1542457344","1542458367","RO" +"1542458368","1542459391","UZ" +"1542459392","1542459647","RU" +"1542459648","1542459903","GB" +"1542459904","1542461439","UA" +"1542461440","1542461695","GB" +"1542461696","1542461951","RU" +"1542461952","1542462207","TR" +"1542462208","1542462463","GE" +"1542462464","1542463487","PL" +"1542463488","1542463743","FR" +"1542463744","1542463999","ES" +"1542464000","1542464255","DE" +"1542464256","1542464511","CZ" +"1542464512","1542464767","RU" +"1542464768","1542465023","TR" +"1542465024","1542465535","RU" +"1542465536","1542466559","RS" +"1542466560","1542466815","PL" +"1542466816","1542467071","RU" +"1542467072","1542467583","PL" +"1542467584","1542468607","UA" +"1542468608","1542469631","SI" +"1542469632","1542470655","ES" +"1542470656","1542471679","IR" +"1542471680","1542472703","SE" +"1542472704","1542472959","PL" +"1542472960","1542473215","LB" +"1542473216","1542473471","PL" +"1542473472","1542473727","GB" +"1542473728","1542473983","FR" +"1542473984","1542474239","AE" +"1542474240","1542474751","RU" +"1542474752","1542475007","PL" +"1542475008","1542475263","DE" +"1542475264","1542475775","FR" +"1542475776","1542476799","LB" +"1542476800","1542477823","RU" +"1542477824","1542478079","DK" +"1542478080","1542478335","RU" +"1542478336","1542478847","UA" +"1542478848","1542479103","RU" +"1542479104","1542479359","PL" +"1542479360","1542479615","RO" +"1542479616","1542480895","RU" +"1542480896","1542481407","PL" +"1542481408","1542481919","RU" +"1542481920","1542482431","CH" +"1542482432","1542482943","PL" +"1542482944","1542483199","TR" +"1542483200","1542483455","FR" +"1542483456","1542484991","RU" +"1542484992","1542486015","NL" +"1542486016","1542488319","RU" +"1542488320","1542488575","DE" +"1542488576","1542491135","PL" +"1542491136","1542492415","RU" +"1542492416","1542492671","CZ" +"1542492672","1542493183","IL" +"1542493184","1542493439","PS" +"1542493440","1542494207","RO" +"1542494208","1542494719","PL" +"1542494720","1542494975","RO" +"1542494976","1542495231","RU" +"1542495232","1542496255","RO" +"1542496256","1542496767","DE" +"1542496768","1542497279","RU" +"1542497280","1542497535","DE" +"1542497536","1542497791","CZ" +"1542498304","1542499327","RU" +"1543503872","1545601023","GB" +"1545601024","1545673167","SE" +"1545673168","1545673175","FI" +"1545673176","1545673183","SE" +"1545673184","1545673215","FI" +"1545673216","1545674495","SE" +"1545674496","1545674751","FI" +"1545674752","1545863167","SE" +"1545863168","1545895935","RU" +"1545895936","1545928703","BA" +"1545928704","1545961471","SI" +"1545961472","1545994239","RU" +"1545994240","1546027007","CZ" +"1546027008","1546059775","RU" +"1546059776","1546063871","SE" +"1546063872","1546067967","DE" +"1546067968","1546072063","SE" +"1546072064","1546076159","MD" +"1546076160","1546080255","RU" +"1546080256","1546084351","AZ" +"1546084352","1546088447","RU" +"1546088448","1546088575","SN" +"1546088576","1546088703","TM" +"1546088704","1546088831","BA" +"1546088832","1546088959","TJ" +"1546088960","1546089087","SD" +"1546089088","1546089215","DE" +"1546089216","1546089343","MW" +"1546089344","1546089471","ZW" +"1546089472","1546089599","BI" +"1546089600","1546089727","GW" +"1546089728","1546089855","LS" +"1546089856","1546089983","NE" +"1546089984","1546090111","DE" +"1546090112","1546090239","MR" +"1546090240","1546090367","ZM" +"1546090368","1546090495","MG" +"1546090496","1546090623","BW" +"1546090624","1546090751","GH" +"1546090752","1546090879","ER" +"1546090880","1546091007","AO" +"1546091008","1546091135","NA" +"1546091136","1546091263","KM" +"1546091264","1546091391","GN" +"1546091392","1546091519","HT" +"1546091520","1546091647","AF" +"1546091648","1546091775","TD" +"1546091776","1546091903","BF" +"1546091904","1546092031","RW" +"1546092032","1546092159","TG" +"1546092160","1546092287","SD" +"1546092288","1546092415","RW" +"1546092416","1546092543","NG" +"1546092544","1546096639","RU" +"1546096640","1546100735","IT" +"1546100736","1546104831","AT" +"1546104832","1546108927","IE" +"1546108928","1546113023","IM" +"1546113024","1546121215","RU" +"1546121216","1546124799","ES" +"1546124800","1546125311","FR" +"1546125312","1546256383","GB" +"1546256384","1546264575","RU" +"1546264576","1546266623","TR" +"1546266624","1546268671","RU" +"1546268672","1546270719","IR" +"1546270720","1546272767","GB" +"1546272768","1546274815","NO" +"1546274816","1546276863","SE" +"1546276864","1546278911","IT" +"1546278912","1546280959","RU" +"1546280960","1546283007","IT" +"1546283008","1546285055","CH" +"1546285056","1546287103","PL" +"1546287104","1546289151","GB" +"1546289152","1546291199","RU" +"1546291200","1546293247","AT" +"1546293248","1546295295","GB" +"1546295296","1546297343","SE" +"1546297344","1546299391","RU" +"1546299392","1546301439","GB" +"1546301440","1546303487","LU" +"1546303488","1546305535","CH" +"1546305536","1546307583","DE" +"1546307584","1546311679","RU" +"1546311680","1546313727","FR" +"1546313728","1546315775","DE" +"1546315776","1546317823","NL" +"1546317824","1546319871","CH" +"1546319872","1546321919","RS" +"1546321920","1546323967","RU" +"1546323968","1546325503","GE" +"1546325504","1546326015","SE" +"1546326016","1546328063","ES" +"1546328064","1546330111","CZ" +"1546330112","1546332159","SE" +"1546332160","1546334207","GB" +"1546334208","1546336255","DE" +"1546336256","1546338303","CZ" +"1546338304","1546340351","GB" +"1546340352","1546342399","DK" +"1546342400","1546344447","TR" +"1546344448","1546346495","DK" +"1546346496","1546348543","AT" +"1546348544","1546350399","DE" +"1546350400","1546350431","JP" +"1546350432","1546350591","DE" +"1546350592","1546352639","PL" +"1546352640","1546354687","DK" +"1546354688","1546356735","FR" +"1546356736","1546358783","AM" +"1546358784","1546360831","PL" +"1546360832","1546364927","RU" +"1546364928","1546366975","SA" +"1546366976","1546369023","DK" +"1546369024","1546371071","RU" +"1546371072","1546373119","IS" +"1546373120","1546375167","HU" +"1546375168","1546377215","GB" +"1546377216","1546379263","CH" +"1546379264","1546381311","ES" +"1546381312","1546383359","DK" +"1546383360","1546385407","IT" +"1546385408","1546385471","FR" +"1546385472","1546385479","DE" +"1546385480","1546385487","IT" +"1546385488","1546385495","ES" +"1546385496","1546385535","FR" +"1546385536","1546385599","US" +"1546385600","1546387455","FR" +"1546387456","1546460960","TR" +"1546460961","1546460967","NL" +"1546460968","1546518527","TR" +"1546518528","1546649599","KZ" +"1546649600","1546665983","SA" +"1546665984","1546673823","GB" +"1546673824","1546673839","RS" +"1546673840","1546678863","GB" +"1546678864","1546678871","RS" +"1546678872","1546679839","GB" +"1546679840","1546679840","HR" +"1546679841","1546680831","GB" +"1546680832","1546680895","RS" +"1546680896","1546681407","GB" +"1546681408","1546681439","RS" +"1546681440","1546681455","GB" +"1546681456","1546681471","RS" +"1546681472","1546682367","GB" +"1546682368","1546698751","BE" +"1546698752","1546715135","NL" +"1546715136","1546731519","LV" +"1546731520","1546747903","FR" +"1546747904","1546764287","RU" +"1546764288","1546780671","UA" +"1546780672","1546797055","IR" +"1546797056","1546813439","DE" +"1546813440","1546862591","RU" +"1546862592","1546878975","GE" +"1546878976","1546895359","DE" +"1546895360","1546911743","IE" +"1546911744","1546928127","SK" +"1546928128","1546929407","GB" +"1546929408","1546929415","A2" +"1546929416","1546944511","GB" +"1546944512","1546960895","UA" +"1546960896","1546977279","HU" +"1546977280","1546993663","MK" +"1546993664","1547010047","RU" +"1547010048","1547026431","SI" +"1547026432","1547034623","ES" +"1547034624","1547036671","RU" +"1547036672","1547038719","SE" +"1547038720","1547040767","GB" +"1547040768","1547042815","NL" +"1547042816","1547059199","ES" +"1547059200","1547075583","RU" +"1547075584","1547091967","GB" +"1547091968","1547108351","GE" +"1547108352","1547124735","RU" +"1547124736","1547141119","MK" +"1547141120","1547157503","RO" +"1547157504","1547173887","PL" +"1547173888","1547436031","ES" +"1547436032","1547440127","AT" +"1547440128","1547444223","AL" +"1547444224","1547448319","IT" +"1547448320","1547452415","SK" +"1547452416","1547456511","IT" +"1547456512","1547460607","RU" +"1547460608","1547465727","GB" +"1547465728","1547465983","ES" +"1547465984","1547467775","GB" +"1547467776","1547468031","ES" +"1547468032","1547468287","GB" +"1547468288","1547468543","ES" +"1547468544","1547468799","GB" +"1547468800","1547472895","PL" +"1547472896","1547476991","DK" +"1547476992","1547481087","ES" +"1547481088","1547485183","UA" +"1547485184","1547489279","IE" +"1547489280","1547493375","DE" +"1547493376","1547497471","RS" +"1547497472","1547498495","NL" +"1547498496","1547501567","GB" +"1547501568","1547505663","TR" +"1547505664","1547509759","RU" +"1547509760","1547513855","LT" +"1547513856","1547517951","AT" +"1547517952","1547522047","RU" +"1547522048","1547526143","CZ" +"1547526144","1547534335","HU" +"1547534336","1547538431","FR" +"1547538432","1547542527","EU" +"1547542528","1547546623","FR" +"1547546624","1547550719","IR" +"1547550720","1547554815","IE" +"1547554816","1547558911","AT" +"1547558912","1547563007","IL" +"1547563008","1547564287","NL" +"1547564288","1547564311","CH" +"1547564312","1547564315","BG" +"1547564316","1547564335","NL" +"1547564336","1547564351","US" +"1547564352","1547564415","CY" +"1547564416","1547564439","NZ" +"1547564440","1547564543","NL" +"1547564544","1547564799","US" +"1547564800","1547564831","NL" +"1547564832","1547564863","LV" +"1547564864","1547565311","NL" +"1547565312","1547565823","US" +"1547565824","1547567103","NL" +"1547567104","1547571199","GB" +"1547571200","1547575295","AT" +"1547575296","1547579391","NO" +"1547579392","1547583487","RU" +"1547583488","1547587583","KG" +"1547587584","1547591679","IT" +"1547591680","1547595775","EE" +"1547595776","1547599871","JO" +"1547599872","1547603967","LT" +"1547603968","1547608063","RU" +"1547608064","1547612159","LB" +"1547612160","1547616255","IR" +"1547616256","1547620351","DK" +"1547620352","1547620359","A2" +"1547620360","1547620367","NG" +"1547620368","1547620375","A2" +"1547620376","1547620391","NG" +"1547620392","1547620399","A2" +"1547620400","1547620407","NG" +"1547620408","1547620415","A2" +"1547620416","1547620423","NG" +"1547620424","1547620439","A2" +"1547620440","1547620551","NG" +"1547620552","1547620559","A2" +"1547620560","1547620615","NG" +"1547620616","1547620639","A2" +"1547620640","1547620647","NG" +"1547620648","1547620863","A2" +"1547620864","1547620871","NG" +"1547620872","1547620879","A2" +"1547620880","1547620887","NG" +"1547620888","1547620895","A2" +"1547620896","1547620903","NG" +"1547620904","1547620911","A2" +"1547620912","1547620935","NG" +"1547620936","1547620951","A2" +"1547620952","1547620959","NG" +"1547620960","1547620967","A2" +"1547620968","1547620991","NG" +"1547620992","1547620999","A2" +"1547621000","1547621031","NG" +"1547621032","1547621039","A2" +"1547621040","1547621063","NG" +"1547621064","1547621071","A2" +"1547621072","1547621087","NG" +"1547621088","1547621095","A2" +"1547621096","1547621135","NG" +"1547621136","1547621143","A2" +"1547621144","1547621151","NG" +"1547621152","1547621167","A2" +"1547621168","1547621191","NG" +"1547621192","1547621199","A2" +"1547621200","1547621207","NG" +"1547621208","1547621215","US" +"1547621216","1547621223","NG" +"1547621224","1547621231","A2" +"1547621232","1547621239","NG" +"1547621240","1547621247","A2" +"1547621248","1547621263","NG" +"1547621264","1547621271","A2" +"1547621272","1547621279","NG" +"1547621280","1547621303","A2" +"1547621304","1547621335","NG" +"1547621336","1547621351","A2" +"1547621352","1547621375","NG" +"1547621376","1547621447","A2" +"1547621448","1547621455","NG" +"1547621456","1547621463","A2" +"1547621464","1547621471","NG" +"1547621472","1547621575","A2" +"1547621576","1547621583","NG" +"1547621584","1547621615","A2" +"1547621616","1547621623","NG" +"1547621624","1547621687","A2" +"1547621688","1547621711","NG" +"1547621712","1547622407","A2" +"1547622408","1547622415","NG" +"1547622416","1547622455","A2" +"1547622456","1547622471","NG" +"1547622472","1547622511","A2" +"1547622512","1547622519","NG" +"1547622520","1547622527","GB" +"1547622528","1547622559","A2" +"1547622560","1547622575","NG" +"1547622576","1547622583","A2" +"1547622584","1547622615","NG" +"1547622616","1547622623","A2" +"1547622624","1547622631","NG" +"1547622632","1547622911","A2" +"1547622912","1547622935","NG" +"1547622936","1547622943","A2" +"1547622944","1547622951","US" +"1547622952","1547622959","NG" +"1547622960","1547622967","A2" +"1547622968","1547622983","NG" +"1547622984","1547622991","A2" +"1547622992","1547623015","NG" +"1547623016","1547623031","A2" +"1547623032","1547623039","NG" +"1547623040","1547623047","A2" +"1547623048","1547623071","NG" +"1547623072","1547623103","A2" +"1547623104","1547623159","NG" +"1547623160","1547623167","A2" +"1547623168","1547623423","NG" +"1547623424","1547623455","US" +"1547623456","1547623463","NG" +"1547623464","1547623479","A2" +"1547623480","1547623487","NG" +"1547623488","1547623495","A2" +"1547623496","1547623519","NG" +"1547623520","1547623527","A2" +"1547623528","1547623559","NG" +"1547623560","1547623567","A2" +"1547623568","1547623615","NG" +"1547623616","1547623727","A2" +"1547623728","1547623735","NG" +"1547623736","1547624447","A2" +"1547624448","1547628543","CZ" +"1547628544","1547632639","BG" +"1547632640","1547636735","TR" +"1547636736","1547640831","SI" +"1547640832","1547644927","PL" +"1547644928","1547649023","CZ" +"1547649024","1547653119","RU" +"1547653120","1547657215","LV" +"1547657216","1547661311","RU" +"1547661312","1547665407","LV" +"1547665408","1547669503","GB" +"1547669504","1547672575","AT" +"1547672576","1547673087","HR" +"1547673088","1547673599","AT" +"1547673600","1547685887","RU" +"1547685888","1547689983","AT" +"1547689984","1547694079","IT" +"1547694080","1547698175","HU" +"1547698176","1547777119","NL" +"1547777120","1547777127","IT" +"1547777128","1548157119","NL" +"1548157120","1548157183","DE" +"1548157184","1548157951","NL" +"1548157952","1548158207","SE" +"1548158208","1548158599","NL" +"1548158600","1548158607","GB" +"1548158608","1548158623","NL" +"1548158624","1548158639","DE" +"1548158640","1548158647","NL" +"1548158648","1548158663","GB" +"1548158664","1548158671","DE" +"1548158672","1548158975","NL" +"1548158976","1548159103","DE" +"1548159104","1548159231","NL" +"1548159232","1548159487","ES" +"1548159488","1548159999","GB" +"1548160000","1548160535","NL" +"1548160536","1548160543","GB" +"1548160544","1548160559","BE" +"1548160560","1548160639","NL" +"1548160640","1548160767","BE" +"1548160768","1548222463","NL" +"1548222464","1548746751","DE" +"1548746752","1549271039","RO" +"1549271040","1549795327","FR" +"1549795328","1550057471","AE" +"1550057472","1550188543","RU" +"1550188544","1550319615","FR" +"1550319616","1550581759","CH" +"1550581760","1550843903","NL" +"1550843904","1550974975","UA" +"1550974976","1550975231","MD" +"1550975232","1550996223","RO" +"1550996224","1550996479","CH" +"1550996480","1551007743","RO" +"1551007744","1551106047","MD" +"1551106048","1551237119","DE" +"1551237120","1551368191","GR" +"1551368192","1551385151","NL" +"1551385152","1551385215","TR" +"1551385216","1551385343","DE" +"1551385344","1551385471","CH" +"1551385472","1551390719","NL" +"1551390720","1551392767","DE" +"1551392768","1551396863","NL" +"1551396864","1551397375","GB" +"1551397376","1551397887","NL" +"1551397888","1551398271","GB" +"1551398272","1551398399","NL" +"1551398400","1551398911","IL" +"1551398912","1551399935","NL" +"1551399936","1551400959","IN" +"1551400960","1551401983","NL" +"1551401984","1551403007","SG" +"1551403008","1551413247","NL" +"1551413248","1551417343","CN" +"1551417344","1551417855","NL" +"1551417856","1551418879","CN" +"1551418880","1551419391","NL" +"1551419392","1551421439","CN" +"1551421440","1551425535","PH" +"1551425536","1551427583","TH" +"1551427584","1551429631","HK" +"1551429632","1551433727","TH" +"1551433728","1551499263","NL" +"1551499264","1551503359","EU" +"1551503360","1551504383","GB" +"1551504384","1551505407","FR" +"1551505408","1551507455","EU" +"1551507456","1551508479","DE" +"1551508480","1551509503","IT" +"1551509504","1551516671","EU" +"1551516672","1551517695","IT" +"1551517696","1551518719","ES" +"1551518720","1551528959","EU" +"1551528960","1551529983","FR" +"1551529984","1551544319","EU" +"1551544320","1551547391","DE" +"1551547392","1551548415","EU" +"1551548416","1551551487","DE" +"1551551488","1551556607","EU" +"1551556608","1551558655","FR" +"1551558656","1551560703","EU" +"1551560704","1551561727","DE" +"1551561728","1551562751","FR" +"1551562752","1551564799","EU" +"1551564800","1551572991","FR" +"1551572992","1551576063","NL" +"1551576064","1551577087","EU" +"1551577088","1551580159","NL" +"1551580160","1551604479","EU" +"1551604480","1551604735","SE" +"1551604736","1551630335","EU" +"1551630336","1551892479","RU" +"1551892480","1556086783","FR" +"1556086784","1556486924","DE" +"1556486925","1556486925","A2" +"1556486926","1556493903","DE" +"1556493904","1556493911","A2" +"1556493912","1556497655","DE" +"1556497656","1556497663","A2" +"1556497664","1558708223","DE" +"1558708224","1559232511","GB" +"1559232512","1559240703","IL" +"1559240704","1559248895","BA" +"1559248896","1559257087","LV" +"1559257088","1559265279","UA" +"1559265280","1559273471","RU" +"1559273472","1559281663","CZ" +"1559281664","1559289855","RU" +"1559289856","1559298047","SK" +"1559298048","1559306239","RU" +"1559306240","1559314431","JO" +"1559314432","1559322623","GE" +"1559322624","1559330815","RU" +"1559330816","1559339007","BA" +"1559339008","1559339743","RU" +"1559339744","1559339775","MH" +"1559339776","1559341695","RU" +"1559341696","1559341703","ES" +"1559341704","1559347199","RU" +"1559347200","1559355391","SE" +"1559355392","1559388159","RU" +"1559388160","1559396351","UA" +"1559396352","1559404543","GB" +"1559404544","1559412735","FI" +"1559412736","1559420927","IR" +"1559420928","1559429119","HR" +"1559429120","1559437311","FR" +"1559437312","1559445503","AT" +"1559445504","1559461887","RU" +"1559461888","1559470079","IT" +"1559470080","1559478271","RU" +"1559478272","1559486463","CZ" +"1559486464","1559494655","DK" +"1559494656","1559502847","SE" +"1559502848","1559511039","PL" +"1559511040","1559519231","SI" +"1559519232","1559527423","UA" +"1559527424","1559535615","RS" +"1559535616","1559543807","GB" +"1559543808","1559551999","SE" +"1559552000","1559560191","RU" +"1559560192","1559568383","SK" +"1559568384","1559576575","RU" +"1559576576","1559584767","HU" +"1559584768","1559592959","KG" +"1559592960","1559601151","FR" +"1559601152","1559609343","IT" +"1559609344","1559617535","SK" +"1559617536","1559625727","GB" +"1559625728","1559633919","DK" +"1559633920","1559642111","IT" +"1559642112","1559650303","RU" +"1559650304","1559658495","IT" +"1559658496","1559683071","RU" +"1559683072","1559691263","CH" +"1559691264","1559756799","BG" +"1559756800","1559789567","AT" +"1559789568","1559838719","RU" +"1559838720","1559855103","UA" +"1559855104","1559887871","HU" +"1559887872","1559920639","PT" +"1559920640","1559924693","LU" +"1559924694","1559924694","GB" +"1559924695","1559932927","LU" +"1559932928","1559953407","DE" +"1559953408","1559986175","MT" +"1559986176","1560018943","IE" +"1560018944","1560051711","DE" +"1560051712","1560084479","RU" +"1560084480","1560117247","JO" +"1560117248","1560150015","CZ" +"1560150016","1560182783","NL" +"1560182784","1560215551","SE" +"1560215552","1560281087","RU" +"1560281088","1562378239","FR" +"1562378240","1564404895","IT" +"1564404896","1564404903","A2" +"1564404904","1564999679","IT" +"1564999680","1565523967","UA" +"1565523968","1565655039","RU" +"1565655040","1565786111","AT" +"1565786112","1565917183","BY" +"1565917184","1566048255","RS" +"1566048256","1566056447","RU" +"1566056448","1566060543","IT" +"1566060544","1566064639","UA" +"1566064640","1566068735","RU" +"1566068736","1566072831","AZ" +"1566072832","1566081023","IT" +"1566081024","1566085119","RU" +"1566085120","1566089215","NL" +"1566089216","1566097407","RU" +"1566097408","1566101503","HU" +"1566101504","1566105599","RU" +"1566105600","1566109695","DE" +"1566109696","1566113791","CH" +"1566113792","1566117887","DE" +"1566117888","1566121983","TR" +"1566121984","1566126079","NO" +"1566126080","1566130175","IT" +"1566130176","1566134271","TR" +"1566134272","1566134999","GB" +"1566135000","1566135007","ES" +"1566135008","1566138367","GB" +"1566138368","1566142463","CZ" +"1566142464","1566146559","NO" +"1566146560","1566150655","GB" +"1566150656","1566154751","CZ" +"1566154752","1566158847","HU" +"1566158848","1566162943","RU" +"1566162944","1566167039","PL" +"1566167040","1566171135","UA" +"1566171136","1566175024","CY" +"1566175025","1566175031","TR" +"1566175032","1566175230","CY" +"1566175231","1566175231","TR" +"1566175232","1566179327","IE" +"1566179328","1566183423","DK" +"1566183424","1566187519","ES" +"1566187520","1566191615","RU" +"1566191616","1566195711","FI" +"1566195712","1566199807","AL" +"1566199808","1566207999","RU" +"1566208000","1566212095","DK" +"1566212096","1566216191","DE" +"1566216192","1566220287","SE" +"1566220288","1566224383","CZ" +"1566224384","1566226175","DE" +"1566226176","1566226239","NL" +"1566226240","1566226303","DE" +"1566226304","1566226335","NL" +"1566226336","1566226343","DE" +"1566226344","1566226351","NL" +"1566226352","1566228479","DE" +"1566228480","1566232575","GB" +"1566232576","1566248959","RU" +"1566248960","1566257151","GB" +"1566257152","1566261247","CZ" +"1566261248","1566265343","TR" +"1566265344","1566266367","US" +"1566266368","1566269439","A2" +"1566269440","1566271487","NO" +"1566271488","1566271999","FI" +"1566272000","1566272511","SE" +"1566272512","1566273535","NO" +"1566273536","1566277631","RU" +"1566277632","1566281727","IT" +"1566281728","1566285823","CZ" +"1566285824","1566289919","RU" +"1566289920","1566294015","FI" +"1566294016","1566298111","IQ" +"1566298112","1566302207","PL" +"1566302208","1566306303","RU" +"1566306304","1566310399","CZ" +"1566310400","1566312447","SE" +"1566312448","1566314495","IE" +"1566314496","1566316543","BE" +"1566316544","1566317567","NO" +"1566318592","1566320639","RU" +"1566320640","1566321151","DE" +"1566321152","1566321407","NL" +"1566321408","1566321663","UA" +"1566321664","1566321919","BZ" +"1566321920","1566322431","GB" +"1566322432","1566322687","BS" +"1566322688","1566324735","CZ" +"1566324736","1566326783","HU" +"1566326784","1566328831","RU" +"1566328832","1566330879","IT" +"1566330880","1566334975","RU" +"1566334976","1566337023","NL" +"1566337024","1566339071","FR" +"1566339072","1566341119","RU" +"1566341120","1566343167","GB" +"1566343168","1566345215","DE" +"1566345216","1566347263","RU" +"1566347264","1566349311","DE" +"1566349312","1566350592","IT" +"1566350593","1566350720","US" +"1566350721","1566350847","GB" +"1566350848","1566351359","IT" +"1566351360","1566353407","AT" +"1566353408","1566355455","ES" +"1566355456","1566357503","RU" +"1566357504","1566359551","IT" +"1566359552","1566363647","RU" +"1566363648","1566365695","GB" +"1566365696","1566367743","RU" +"1566367744","1566371839","ES" +"1566371840","1566373887","IT" +"1566373888","1566375935","RS" +"1566375936","1566377983","DE" +"1566377984","1566380031","BG" +"1566380032","1566382079","IT" +"1566382080","1566384127","TR" +"1566384128","1566386175","RU" +"1566386176","1566388223","FR" +"1566388224","1566388479","HK" +"1566388480","1566388991","HU" +"1566388992","1566389247","SC" +"1566389248","1566389503","HU" +"1566389504","1566389759","SC" +"1566389760","1566390271","US" +"1566390272","1566392319","LT" +"1566392320","1566394367","ES" +"1566394368","1566396175","NO" +"1566396176","1566396191","NL" +"1566396192","1566396415","NO" +"1566396416","1566398463","GB" +"1566398464","1566400511","RU" +"1566400512","1566400575","NO" +"1566400576","1566400639","GB" +"1566400640","1566400671","NO" +"1566400672","1566400703","DE" +"1566400704","1566400735","NL" +"1566400736","1566400859","NO" +"1566400860","1566400863","NL" +"1566400864","1566400871","GB" +"1566400872","1566400903","NO" +"1566400904","1566400907","DE" +"1566400908","1566400911","GB" +"1566400912","1566400915","GE" +"1566400916","1566400919","NO" +"1566400920","1566400923","NE" +"1566400924","1566400943","NO" +"1566400944","1566400955","NE" +"1566400956","1566400967","NO" +"1566400968","1566400979","GB" +"1566400980","1566400983","GE" +"1566400984","1566400987","NE" +"1566400988","1566401023","NO" +"1566401024","1566401247","US" +"1566401248","1566401279","FR" +"1566401280","1566401327","US" +"1566401328","1566401343","NO" +"1566401344","1566401376","US" +"1566401377","1566401399","NO" +"1566401400","1566401463","US" +"1566401464","1566401467","NO" +"1566401468","1566401483","US" +"1566401484","1566401487","HK" +"1566401488","1566401491","NO" +"1566401492","1566401499","US" +"1566401500","1566401503","NO" +"1566401504","1566401535","US" +"1566401536","1566401599","IN" +"1566401600","1566401663","HK" +"1566401664","1566401727","SG" +"1566401728","1566401791","NO" +"1566401792","1566401856","SI" +"1566401857","1566401887","NO" +"1566401888","1566401919","US" +"1566401920","1566401967","NO" +"1566401968","1566401975","HK" +"1566401976","1566401987","AU" +"1566401988","1566401991","HK" +"1566401992","1566401999","SG" +"1566402000","1566402003","AU" +"1566402004","1566402007","NO" +"1566402008","1566402011","AU" +"1566402012","1566402035","HK" +"1566402036","1566402111","NO" +"1566402112","1566402143","HK" +"1566402144","1566402175","NL" +"1566402176","1566402199","US" +"1566402200","1566402207","NO" +"1566402208","1566402215","US" +"1566402216","1566402223","NO" +"1566402224","1566402239","US" +"1566402240","1566402255","NO" +"1566402256","1566402303","US" +"1566402304","1566402559","NO" +"1566402560","1566404607","IQ" +"1566404608","1566406655","ES" +"1566406656","1566408703","NL" +"1566408704","1566410751","GB" +"1566410752","1566414847","RU" +"1566414848","1566416895","FR" +"1566416896","1566418943","IT" +"1566418944","1566420991","RU" +"1566420992","1566423039","ES" +"1566423040","1566425087","FR" +"1566425088","1566427135","RS" +"1566427136","1566429183","IT" +"1566429184","1566437375","GB" +"1566437376","1566439423","BE" +"1566439424","1566443519","DE" +"1566443520","1566445567","NO" +"1566445568","1566447615","PL" +"1566447616","1566451711","IT" +"1566451712","1566453759","IL" +"1566453760","1566455807","IQ" +"1566455808","1566456351","PT" +"1566456352","1566456359","AO" +"1566456360","1566457855","PT" +"1566457856","1566459903","CH" +"1566459904","1566461951","GB" +"1566461952","1566463999","DE" +"1566464000","1566466047","IT" +"1566466048","1566468095","ES" +"1566468096","1566468879","BE" +"1566468880","1566468895","HU" +"1566468896","1566469391","BE" +"1566469392","1566469407","HU" +"1566469408","1566470143","BE" +"1566470144","1566470163","IE" +"1566470164","1566470171","GB" +"1566470172","1566470351","IE" +"1566470352","1566470367","GB" +"1566470368","1566471567","IE" +"1566471568","1566471575","GB" +"1566471576","1566471971","IE" +"1566471972","1566471975","GB" +"1566471976","1566472005","IE" +"1566472006","1566472007","GB" +"1566472008","1566472051","IE" +"1566472052","1566472063","GB" +"1566472064","1566472087","IE" +"1566472088","1566474239","GB" +"1566474240","1566476287","DE" +"1566476288","1566478335","BG" +"1566478336","1566482431","RU" +"1566482432","1566484479","FR" +"1566484480","1566486527","SE" +"1566486528","1566488575","RU" +"1566488576","1566490623","PL" +"1566490624","1566492671","TR" +"1566492672","1566494719","NL" +"1566494720","1566496767","SE" +"1566496768","1566498815","AM" +"1566498816","1566500863","NL" +"1566500864","1566502911","RU" +"1566502912","1566504959","CH" +"1566504960","1566507007","TR" +"1566507008","1566509055","NL" +"1566509056","1566511103","GB" +"1566511104","1566513151","KN" +"1566513152","1566515199","BH" +"1566515200","1566517247","CZ" +"1566517248","1566519295","RU" +"1566519296","1566521343","BE" +"1566521344","1566523391","FR" +"1566523392","1566525439","MK" +"1566525440","1566527487","IS" +"1566527488","1566529535","IE" +"1566529536","1566531583","PL" +"1566531584","1566533631","RU" +"1566533632","1566535679","GB" +"1566535680","1566537727","NL" +"1566537728","1566539775","GB" +"1566539776","1566541823","DE" +"1566541824","1566543871","RU" +"1566543872","1566545919","NL" +"1566545920","1566552063","RU" +"1566552064","1566554111","TR" +"1566554112","1566556159","UA" +"1566556160","1566558207","RU" +"1566558208","1566560255","JO" +"1566560256","1566564351","IT" +"1566564352","1566566399","IS" +"1566566400","1566568447","FR" +"1566568448","1566570495","KZ" +"1566570496","1566571479","NL" +"1566571480","1566571483","DE" +"1566571484","1566572543","NL" +"1566572544","1566703615","GB" +"1566703616","1566769151","SA" +"1566769152","1566773759","CZ" +"1566773760","1566774015","SK" +"1566774016","1566793215","CZ" +"1566793216","1566793471","SK" +"1566793472","1566834687","CZ" +"1566834688","1566900223","RU" +"1566900224","1566965759","IT" +"1566965760","1567031295","PT" +"1567031296","1567096831","SI" +"1567096832","1567162367","DE" +"1567162368","1567227903","PL" +"1567227904","1567293439","FI" +"1567293440","1567358975","IE" +"1567358976","1567424511","PT" +"1567424512","1567488055","CY" +"1567488056","1567488063","A2" +"1567488064","1567490047","CY" +"1567490048","1567555583","IR" +"1567555584","1567621119","AT" +"1567621120","1567696383","RO" +"1567696384","1567696895","MD" +"1567696896","1567705087","RO" +"1567705088","1567707135","MD" +"1567707136","1567712767","RO" +"1567712768","1567713279","DE" +"1567713280","1567715327","RO" +"1567715328","1567717375","MD" +"1567717376","1567719935","RO" +"1567719936","1567720191","GB" +"1567720192","1567750655","RO" +"1567750656","1567751167","SE" +"1567751168","1567752191","RO" +"1567752192","1567756287","MD" +"1567756288","1567775743","RO" +"1567775744","1567776767","MD" +"1567776768","1567830015","RO" +"1567830016","1567831039","MD" +"1567831040","1567840255","RO" +"1567840256","1567842303","DE" +"1567842304","1567880191","RO" +"1567880192","1567881215","SE" +"1567881216","1567883263","RO" +"1567883264","1567948799","MD" +"1567948800","1568026623","RO" +"1568026624","1568030719","MD" +"1568030720","1568083967","RO" +"1568083968","1568086015","MD" +"1568086016","1568178175","RO" +"1568178176","1568243711","RU" +"1568243712","1568243967","GP" +"1568243968","1568244735","FR" +"1568244736","1568244991","GP" +"1568244992","1568245759","FR" +"1568245760","1568246527","GF" +"1568246528","1568247039","GP" +"1568247040","1568247551","GF" +"1568247552","1568248063","GP" +"1568248064","1568249855","MQ" +"1568249856","1568250111","GP" +"1568250112","1568253951","MQ" +"1568253952","1568254719","GP" +"1568254720","1568254975","GF" +"1568254976","1568255743","GP" +"1568255744","1568255999","GF" +"1568256000","1568257791","GP" +"1568257792","1568258303","MQ" +"1568258304","1568259071","GF" +"1568259072","1568260351","MQ" +"1568260352","1568261119","FR" +"1568261120","1568261375","MQ" +"1568261376","1568262143","FR" +"1568262144","1568262399","MQ" +"1568262400","1568263167","FR" +"1568263168","1568263423","MQ" +"1568263424","1568263679","FR" +"1568263680","1568263935","MQ" +"1568263936","1568264447","GP" +"1568264448","1568265215","FR" +"1568265216","1568265471","GP" +"1568265472","1568266239","FR" +"1568266240","1568266495","GP" +"1568266496","1568267263","FR" +"1568267264","1568267519","GP" +"1568267520","1568267775","FR" +"1568267776","1568268287","GP" +"1568268288","1568268543","GF" +"1568268544","1568269311","FR" +"1568269312","1568269567","MQ" +"1568269568","1568270335","FR" +"1568270336","1568270591","GP" +"1568270592","1568271359","FR" +"1568271360","1568271615","GP" +"1568271616","1568272383","FR" +"1568272384","1568272639","GP" +"1568272640","1568273407","GF" +"1568273408","1568274687","MQ" +"1568274688","1568275455","FR" +"1568275456","1568276479","MQ" +"1568276480","1568293135","DE" +"1568293136","1568293151","SA" +"1568293152","1568294223","DE" +"1568294224","1568294239","IT" +"1568294240","1568294983","DE" +"1568294984","1568294991","FR" +"1568294992","1568295791","DE" +"1568295792","1568295799","GB" +"1568295800","1568295855","DE" +"1568295856","1568295863","GB" +"1568295864","1568296239","DE" +"1568296240","1568296247","ZA" +"1568296248","1568309247","DE" +"1568309248","1568342015","RO" +"1568342016","1568374783","BG" +"1568374784","1568440319","RU" +"1568440320","1568473087","NO" +"1568473088","1568505855","BY" +"1568505856","1568538623","NL" +"1568538624","1568555007","IR" +"1568555008","1568571391","UA" +"1568571392","1568604159","LB" +"1568604160","1568636927","UA" +"1568636928","1569193983","DE" +"1569193984","1569718271","HR" +"1569718272","1570242559","IT" +"1570242560","1570275327","GB" +"1570275328","1570308095","BG" +"1570308096","1570340863","CZ" +"1570340864","1570373631","RU" +"1570373632","1570406399","NL" +"1570406400","1570439167","PL" +"1570439168","1570471935","TR" +"1570471936","1570480895","BG" +"1570480896","1570481151","MK" +"1570481152","1570492159","BG" +"1570492160","1570492415","ES" +"1570492416","1570504703","BG" +"1570504704","1570570239","ES" +"1570570240","1570572287","NL" +"1570572288","1570574335","UA" +"1570574336","1570576383","RU" +"1570576384","1570578431","UA" +"1570578432","1570580479","CH" +"1570580480","1570582527","RU" +"1570582528","1570584575","DE" +"1570584576","1570586623","RU" +"1570586624","1570590719","PL" +"1570590720","1570592767","IL" +"1570592768","1570596863","PL" +"1570596864","1570598911","UA" +"1570598912","1570600959","PL" +"1570600960","1570603007","RU" +"1570603008","1570605055","CZ" +"1570605056","1570607103","NL" +"1570607104","1570609151","RU" +"1570609152","1570611199","PL" +"1570611200","1570619391","RU" +"1570619392","1570621439","BA" +"1570621440","1570625535","RU" +"1570625536","1570627583","GB" +"1570627584","1570635775","RU" +"1570635776","1570644767","FR" +"1570644768","1570644775","GB" +"1570644776","1570644991","FR" +"1570644992","1570645055","GB" +"1570645056","1570645231","FR" +"1570645232","1570645247","GB" +"1570645248","1570652159","FR" +"1570652160","1570652287","SE" +"1570652288","1570652291","MY" +"1570652292","1570652295","GB" +"1570652296","1570652299","DE" +"1570652300","1570652543","SE" +"1570652544","1570652551","FR" +"1570652552","1570652891","SE" +"1570652892","1570652895","DE" +"1570652896","1570655631","SE" +"1570655632","1570655635","DE" +"1570655636","1570655999","SE" +"1570656000","1570656003","DE" +"1570656004","1570656119","SE" +"1570656120","1570656127","GB" +"1570656128","1570660351","SE" +"1570660352","1570660359","FI" +"1570660360","1570660367","SE" +"1570660368","1570660383","FR" +"1570660384","1570660387","RU" +"1570660388","1570660407","SE" +"1570660408","1570660411","DE" +"1570660412","1570660543","SE" +"1570660544","1570660575","FI" +"1570660576","1570660591","GB" +"1570660592","1570660595","RU" +"1570660596","1570660599","SE" +"1570660600","1570660607","FI" +"1570660608","1570660615","SE" +"1570660616","1570660619","RU" +"1570660620","1570660623","SE" +"1570660624","1570660639","FR" +"1570660640","1570660675","DE" +"1570660676","1570660863","SE" +"1570660864","1570661375","NO" +"1570661376","1570661631","GB" +"1570661632","1570662143","SE" +"1570662144","1570662399","DE" +"1570662400","1570663423","SE" +"1570663424","1570663583","GB" +"1570663584","1570663615","NO" +"1570663616","1570663839","GB" +"1570663840","1570663871","NO" +"1570663872","1570663935","GB" +"1570663936","1570665343","SE" +"1570665344","1570665351","GB" +"1570665352","1570665407","SE" +"1570665408","1570665423","GB" +"1570665424","1570665439","SE" +"1570665440","1570665455","FR" +"1570665456","1570665463","DK" +"1570665464","1570665919","SE" +"1570665920","1570665935","GB" +"1570665936","1570665951","IT" +"1570665952","1570665967","FR" +"1570665968","1570666143","SE" +"1570666144","1570666147","DE" +"1570666148","1570666175","SE" +"1570666176","1570666191","GB" +"1570666192","1570666223","FR" +"1570666224","1570666227","SE" +"1570666228","1570666231","NO" +"1570666232","1570666263","SE" +"1570666264","1570666267","US" +"1570666268","1570666367","SE" +"1570666368","1570666383","FR" +"1570666384","1570666387","SE" +"1570666388","1570666391","NL" +"1570666392","1570666395","SE" +"1570666396","1570666399","DE" +"1570666400","1570666431","SE" +"1570666432","1570666447","GB" +"1570666448","1570666463","DE" +"1570666464","1570666495","SE" +"1570666496","1570666499","ES" +"1570666500","1570666511","SE" +"1570666512","1570666519","NO" +"1570666520","1570666687","SE" +"1570666688","1570666703","GB" +"1570666704","1570666719","ES" +"1570666720","1570666735","FR" +"1570666736","1570666751","SE" +"1570666752","1570666755","ES" +"1570666756","1570666759","SE" +"1570666760","1570666767","GB" +"1570666768","1570666887","SE" +"1570666888","1570666891","DE" +"1570666892","1570666943","SE" +"1570666944","1570666959","FR" +"1570666960","1570666975","SE" +"1570666976","1570666991","FR" +"1570666992","1570667007","SE" +"1570667008","1570667011","ES" +"1570667012","1570667015","SE" +"1570667016","1570667023","FI" +"1570667024","1570667039","ES" +"1570667040","1570667167","SE" +"1570667168","1570667171","DE" +"1570667172","1570667199","SE" +"1570667200","1570667215","FR" +"1570667216","1570667231","SE" +"1570667232","1570667247","FR" +"1570667248","1570667263","SE" +"1570667264","1570667267","ES" +"1570667268","1570667283","SE" +"1570667284","1570667287","MT" +"1570667288","1570667295","SE" +"1570667296","1570667327","GB" +"1570667328","1570667335","SE" +"1570667336","1570667339","GB" +"1570667340","1570667343","NL" +"1570667344","1570667347","DE" +"1570667348","1570667455","SE" +"1570667456","1570667471","FR" +"1570667472","1570667487","SE" +"1570667488","1570667503","FR" +"1570667504","1570667515","SE" +"1570667516","1570667519","US" +"1570667520","1570667523","NL" +"1570667524","1570667527","IT" +"1570667528","1570667531","NO" +"1570667532","1570667535","IT" +"1570667536","1570667587","SE" +"1570667588","1570667591","US" +"1570667592","1570667599","SE" +"1570667600","1570667603","DE" +"1570667604","1570667647","SE" +"1570667648","1570667651","US" +"1570667652","1570667711","SE" +"1570667712","1570667727","FR" +"1570667728","1570667743","NL" +"1570667744","1570667775","SE" +"1570667776","1570667779","NL" +"1570667780","1570667791","SE" +"1570667792","1570667807","ES" +"1570667808","1570667839","SE" +"1570667840","1570667903","FR" +"1570667904","1570667907","SE" +"1570667908","1570667911","RU" +"1570667912","1570667915","US" +"1570667916","1570667919","SE" +"1570667920","1570667923","DE" +"1570667924","1570667967","SE" +"1570667968","1570667983","FR" +"1570667984","1570668031","SE" +"1570668032","1570668035","NL" +"1570668036","1570668047","SE" +"1570668048","1570668055","ES" +"1570668056","1570668063","NL" +"1570668064","1570668287","SE" +"1570668288","1570668291","NL" +"1570668292","1570668351","SE" +"1570668352","1570668415","NO" +"1570668416","1570668543","SE" +"1570668544","1570671983","RU" +"1570671984","1570671987","TR" +"1570671988","1570701311","RU" +"1570701312","1570717695","PL" +"1570717696","1570725887","HR" +"1570725888","1570734079","DE" +"1570734080","1570750463","PL" +"1570750464","1570752511","AL" +"1570752512","1570754559","GB" +"1570754560","1570756607","ES" +"1570756608","1570764799","RU" +"1570764800","1570766847","DE" +"1570766848","1571291135","DK" +"1571291136","1571422207","RO" +"1571422208","1571422463","UA" +"1571422464","1571425791","CZ" +"1571425792","1571426303","RU" +"1571426304","1571428351","CZ" +"1571428352","1571428863","RU" +"1571428864","1571429119","CZ" +"1571429120","1571429375","RU" +"1571429376","1571435519","UA" +"1571435520","1571436031","NL" +"1571436032","1571436287","UA" +"1571436288","1571438591","RU" +"1571438592","1571441663","UA" +"1571441664","1571441919","RU" +"1571441920","1571442175","DE" +"1571442176","1571442687","NL" +"1571442688","1571443199","UA" +"1571443200","1571443455","NL" +"1571443456","1571443711","UA" +"1571443712","1571444735","CZ" +"1571444736","1571446783","NL" +"1571446784","1571447807","KZ" +"1571447808","1571448831","RU" +"1571448832","1571450879","US" +"1571450880","1571451903","UA" +"1571451904","1571452927","RU" +"1571452928","1571453951","CZ" +"1571453952","1571454975","GB" +"1571454976","1571455999","RU" +"1571456000","1571456511","CY" +"1571456512","1571457023","RU" +"1571457024","1571458047","UA" +"1571458048","1571459071","CZ" +"1571459072","1571463167","UA" +"1571463168","1571465215","RU" +"1571465216","1571469311","CZ" +"1571469312","1571470335","RU" +"1571470336","1571477503","CZ" +"1571477504","1571478527","RU" +"1571478528","1571485695","CZ" +"1571485696","1571487743","RU" +"1571487744","1571495935","SK" +"1571495936","1571500031","CZ" +"1571500032","1571502079","RU" +"1571502080","1571504127","CZ" +"1571504128","1571508223","UA" +"1571508224","1571514367","CZ" +"1571514368","1571520511","BY" +"1571520512","1571524607","CZ" +"1571524608","1571526655","RU" +"1571526656","1571528703","CZ" +"1571528704","1571529727","MD" +"1571529728","1571530751","CZ" +"1571530752","1571531007","RU" +"1571531008","1571549183","CZ" +"1571549184","1571552255","UA" +"1571552256","1571553279","CZ" +"1571553280","1571684351","IL" +"1571684352","1571686399","ES" +"1571686400","1571688447","GB" +"1571688448","1571690495","CH" +"1571690496","1571691519","GE" +"1571692544","1571694591","FR" +"1571694592","1571696639","LU" +"1571696640","1571700735","RU" +"1571700736","1571702783","IT" +"1571702784","1571704831","RU" +"1571704832","1571706879","GB" +"1571706880","1571708927","NL" +"1571708928","1571709439","GB" +"1571709440","1571709567","DE" +"1571709568","1571709695","GB" +"1571709696","1571709823","FR" +"1571709824","1571709951","GB" +"1571709952","1571710079","NL" +"1571710080","1571710207","GB" +"1571710208","1571710335","ES" +"1571710336","1571710463","GB" +"1571710464","1571710591","IT" +"1571710592","1571710975","GB" +"1571710976","1571713023","NL" +"1571713024","1571715071","RU" +"1571715072","1571717119","GR" +"1571717120","1571719167","RU" +"1571719168","1571721215","GB" +"1571721216","1571723263","FR" +"1571723264","1571723775","GB" +"1571723776","1571724031","SE" +"1571724032","1571725311","GB" +"1571725312","1571727359","RO" +"1571727360","1571729407","IE" +"1571729408","1571729791","SK" +"1571729792","1571729799","CZ" +"1571729800","1571731455","SK" +"1571731456","1571732479","CH" +"1571732480","1571732495","LI" +"1571732496","1571733503","CH" +"1571733504","1571735551","FI" +"1571735552","1571737599","NL" +"1571737600","1571737855","GB" +"1571737856","1571738111","EU" +"1571738112","1571738367","NL" +"1571738368","1571739647","EU" +"1571739648","1571741695","GB" +"1571741696","1571743743","RU" +"1571743744","1571745791","GB" +"1571745792","1571747839","RU" +"1571747840","1571749887","GB" +"1571749888","1571758079","RU" +"1571758080","1571766271","IL" +"1571766272","1571786751","PL" +"1571786752","1571790847","EU" +"1571790848","1571794943","PL" +"1571794944","1571799039","NL" +"1571799040","1571815423","UA" +"1571815424","1571831807","FR" +"1571831808","1571838079","DK" +"1571838080","1571838111","CY" +"1571838112","1571848191","DK" +"1571848192","1571864575","RU" +"1571864576","1571880959","PL" +"1571880960","1571897343","RU" +"1571897344","1571913727","NO" +"1571913728","1571930111","GE" +"1571930112","1571946495","LV" +"1571946496","1571962879","SA" +"1571962880","1571979263","RU" +"1571979264","1571995647","DK" +"1571995648","1572012031","UA" +"1572012032","1572020223","NO" +"1572020224","1572028415","SE" +"1572028416","1572044799","RU" +"1572044800","1572061183","IT" +"1572061184","1572077567","PL" +"1572077568","1572093951","RU" +"1572093952","1572095999","NL" +"1572096000","1572098047","DE" +"1572098048","1572100095","DK" +"1572100096","1572102143","CH" +"1572102144","1572110335","BA" +"1572110336","1572126719","RU" +"1572126720","1572143103","UA" +"1572143104","1572159487","DE" +"1572159488","1572175871","CZ" +"1572175872","1572192255","PL" +"1572192256","1572225023","RU" +"1572225024","1572241407","TR" +"1572241408","1572257791","SE" +"1572257792","1572274175","FR" +"1572274176","1572276223","FI" +"1572276224","1572277247","US" +"1572277248","1572277759","DE" +"1572277760","1572280319","SG" +"1572280320","1572280575","DE" +"1572280576","1572282111","SG" +"1572282112","1572282367","PT" +"1572282368","1572290559","SG" +"1572290560","1572306943","RU" +"1572306944","1572323327","BG" +"1572323328","1572339711","UA" +"1572339712","1572343807","PS" +"1572343808","1572347903","CH" +"1572347904","1572351999","FR" +"1572352000","1572356095","DE" +"1572356096","1572360191","SK" +"1572360192","1572364287","RS" +"1572364288","1572368383","NL" +"1572368384","1572372479","NO" +"1572372480","1572376575","DE" +"1572376576","1572380671","TR" +"1572380672","1572384767","RU" +"1572384768","1572388863","DE" +"1572388864","1572392959","DK" +"1572392960","1572393471","NL" +"1572393472","1572393983","GB" +"1572393984","1572394495","DE" +"1572394496","1572397055","US" +"1572397056","1572401151","AZ" +"1572401152","1572405247","GB" +"1572405248","1572409343","CZ" +"1572409344","1572413439","RU" +"1572413440","1572417535","AM" +"1572417536","1572421631","CZ" +"1572421632","1572425727","KZ" +"1572425728","1572429823","LB" +"1572429824","1572433919","CZ" +"1572433920","1572438015","IT" +"1572438016","1572442111","AT" +"1572442112","1572446207","RU" +"1572446208","1572450303","NO" +"1572450304","1572458495","RU" +"1572458496","1572462591","UA" +"1572462592","1572466687","LB" +"1572466688","1572470783","EE" +"1572470784","1572474879","DE" +"1572474880","1572483071","GB" +"1572483072","1572487167","RU" +"1572487168","1572490751","RS" +"1572490752","1572491007","HR" +"1572491008","1572491263","LU" +"1572491264","1572495359","IT" +"1572495360","1572499455","RU" +"1572499456","1572503551","TR" +"1572503552","1572504063","IT" +"1572504064","1572504319","US" +"1572504320","1572504575","DE" +"1572504576","1572504703","RO" +"1572504704","1572504831","TR" +"1572504832","1572505087","SG" +"1572505088","1572505871","IT" +"1572505872","1572505887","GR" +"1572505888","1572505983","IT" +"1572505984","1572506623","GR" +"1572506624","1572507199","IT" +"1572507200","1572507207","GB" +"1572507208","1572507647","IT" +"1572507648","1572511743","GB" +"1572511744","1572515839","DE" +"1572515840","1572517759","NL" +"1572517760","1572517775","CA" +"1572517776","1572519935","NL" +"1572519936","1572524031","DE" +"1572524032","1572528127","GE" +"1572528128","1572532223","RU" +"1572532224","1572536319","IT" +"1572536320","1572536831","JE" +"1572536832","1572537087","GB" +"1572537088","1572538111","JE" +"1572538112","1572538175","GB" +"1572538176","1572538367","JE" +"1572538368","1572540415","NL" +"1572540416","1572540511","GB" +"1572540512","1572540519","DE" +"1572540520","1572541439","GB" +"1572541440","1572541447","FR" +"1572541448","1572541455","GB" +"1572541456","1572541463","FR" +"1572541464","1572541471","GB" +"1572541472","1572541535","FR" +"1572541536","1572541543","GB" +"1572541544","1572541551","CH" +"1572541552","1572541903","GB" +"1572541904","1572541919","DE" +"1572541920","1572541951","GB" +"1572541952","1572541983","DE" +"1572541984","1572541999","ES" +"1572542000","1572542015","GB" +"1572542016","1572542031","HU" +"1572542032","1572542071","GB" +"1572542072","1572542079","DE" +"1572542080","1572542087","ES" +"1572542088","1572542111","GB" +"1572542112","1572542119","PL" +"1572542120","1572542127","ES" +"1572542128","1572542151","GB" +"1572542152","1572542159","DE" +"1572542160","1572542207","GB" +"1572542208","1572542463","FR" +"1572542464","1572544511","IT" +"1572544512","1572546559","IQ" +"1572546560","1572548607","FR" +"1572548608","1572550655","NL" +"1572550656","1572552703","DE" +"1572552704","1572554751","TR" +"1572554752","1572556799","RU" +"1572556800","1572558847","NO" +"1572558848","1572560895","IT" +"1572560896","1572562943","RU" +"1572562944","1572564991","CZ" +"1572564992","1572567039","DE" +"1572567040","1572569087","RU" +"1572569088","1572569343","NL" +"1572569344","1572569599","GB" +"1572569600","1572571135","NL" +"1572571136","1572573183","RO" +"1572573184","1572574975","GG" +"1572574976","1572575167","GB" +"1572575168","1572575231","GG" +"1572575232","1572577279","RU" +"1572577280","1572579327","AM" +"1572579328","1572581375","GB" +"1572581376","1572585471","RU" +"1572585472","1572587519","CH" +"1572587520","1572589567","TR" +"1572589568","1572591615","CH" +"1572591616","1572593663","NL" +"1572593664","1572594687","GB" +"1572594688","1572594943","FR" +"1572594944","1572595711","GB" +"1572595712","1572597759","DE" +"1572597760","1572599807","RS" +"1572599808","1572601855","DE" +"1572601856","1572603903","SE" +"1572603904","1572605951","GE" +"1572605952","1572607999","RU" +"1572608000","1572610047","DE" +"1572610048","1572612095","UA" +"1572612096","1572614143","RU" +"1572614144","1572616191","ES" +"1572616192","1572618239","CH" +"1572618240","1572620287","NL" +"1572620288","1572620415","CH" +"1572620416","1572620431","CZ" +"1572620432","1572620559","CH" +"1572620560","1572620567","NL" +"1572620568","1572622335","CH" +"1572622336","1572624383","RU" +"1572624384","1572626431","NO" +"1572626432","1572628479","IT" +"1572628480","1572630527","DE" +"1572630528","1572632575","IT" +"1572632576","1572634623","RU" +"1572634624","1572636671","US" +"1572636672","1572638719","ES" +"1572638720","1572640767","FR" +"1572640768","1572642815","RU" +"1572642816","1572644863","UA" +"1572644864","1572646911","FR" +"1572646912","1572648959","GB" +"1572648960","1572651007","RU" +"1572651008","1572653055","BH" +"1572653056","1572657151","RU" +"1572657152","1572659199","DE" +"1572659200","1572661247","IT" +"1572661248","1572663295","NO" +"1572663296","1572665343","DE" +"1572665344","1572667391","NL" +"1572667392","1572668655","GB" +"1572668656","1572668671","CY" +"1572668672","1572668703","GB" +"1572668704","1572668711","CY" +"1572668712","1572668719","GB" +"1572668720","1572668727","CY" +"1572668728","1572669439","GB" +"1572669440","1572673535","RU" +"1572673536","1572675583","AT" +"1572675584","1572677631","ES" +"1572677632","1572681727","RU" +"1572681728","1572681983","DE" +"1572681984","1572682239","RU" +"1572682240","1572682751","DE" +"1572682752","1572683775","RU" +"1572683776","1572685823","CH" +"1572685824","1572689919","RU" +"1572689920","1572691967","ES" +"1572691968","1572694015","SA" +"1572694016","1572694214","GB" +"1572694215","1572694217","US" +"1572694218","1572694655","GB" +"1572694656","1572694783","SG" +"1572694784","1572696063","GB" +"1572696064","1572698111","HU" +"1572698112","1572700159","RU" +"1572700160","1572702207","NL" +"1572702208","1572704255","IT" +"1572704256","1572706303","RU" +"1572706304","1572708351","DE" +"1572708352","1572710399","GB" +"1572710400","1572712447","DE" +"1572712448","1572714495","ES" +"1572714496","1572716543","IT" +"1572716544","1572718591","SA" +"1572718592","1572720639","RU" +"1572720640","1572722687","IT" +"1572722688","1572726783","RU" +"1572726784","1572728831","CH" +"1572728832","1572730239","SE" +"1572730240","1572730303","MY" +"1572730304","1572730879","SE" +"1572730880","1572732927","RU" +"1572732928","1572734975","HU" +"1572734976","1572737023","KZ" +"1572737024","1572739071","RU" +"1572739072","1572741119","IR" +"1572741120","1572743167","FI" +"1572743168","1572745215","UA" +"1572745216","1572749311","CZ" +"1572749312","1572751111","DE" +"1572751112","1572751119","GB" +"1572751120","1572751359","DE" +"1572751360","1572753407","CH" +"1572753408","1572755455","NO" +"1572755456","1572757503","DE" +"1572757504","1572759551","FI" +"1572759552","1572761599","RU" +"1572761600","1572763647","GB" +"1572763648","1572765695","TR" +"1572765696","1572767743","CZ" +"1572767744","1572769740","NL" +"1572769741","1572769790","KY" +"1572769791","1572769791","NL" +"1572769792","1572770047","RO" +"1572770048","1572770111","RS" +"1572770112","1572771839","RO" +"1572771840","1572772095","EU" +"1572772096","1572773887","ES" +"1572773888","1572775935","RS" +"1572775936","1572777983","GB" +"1572777984","1572780031","UA" +"1572780032","1572782079","NL" +"1572782080","1572784127","SE" +"1572784128","1572786175","RU" +"1572786176","1572788223","FR" +"1572788224","1572790271","TR" +"1572790272","1572792319","RU" +"1572792320","1572794367","DE" +"1572794368","1572796415","RU" +"1572796416","1572798463","DE" +"1572798464","1572800511","NL" +"1572800512","1572804607","RU" +"1572804608","1572808703","GB" +"1572808704","1572810751","FR" +"1572810752","1572812031","DE" +"1572812032","1572812543","RO" +"1572812544","1572812799","DE" +"1572812800","1572814847","RU" +"1572814848","1572816895","KW" +"1572816896","1572818943","RU" +"1572818944","1572820991","FR" +"1572820992","1572823039","CH" +"1572823040","1572825087","BY" +"1572825088","1572827135","RU" +"1572827136","1572829183","NO" +"1572829184","1572831231","FI" +"1572831232","1572831487","BH" +"1572833280","1572835327","ES" +"1572835328","1572837375","IE" +"1572837376","1572839423","DK" +"1572839424","1572841471","DE" +"1572841472","1572842239","EU" +"1572842240","1572842495","LV" +"1572842496","1572842751","EU" +"1572842752","1572843007","NL" +"1572843008","1572843519","EU" +"1572843520","1572845567","JO" +"1572845568","1572847615","FR" +"1572847616","1572849663","GI" +"1572849664","1572851711","GB" +"1572851712","1572853759","DE" +"1572853760","1572853760","EU" +"1572853761","1572853767","BE" +"1572853768","1572853769","EU" +"1572853770","1572853770","DK" +"1572853771","1572853775","EU" +"1572853776","1572854015","BE" +"1572854016","1572854271","LU" +"1572854272","1572854272","EU" +"1572854273","1572854284","BE" +"1572854285","1572854285","NL" +"1572854286","1572854286","CH" +"1572854287","1572854287","LU" +"1572854288","1572854527","BE" +"1572854528","1572855039","EU" +"1572855040","1572855071","BE" +"1572855072","1572855295","EU" +"1572855296","1572855551","CH" +"1572855552","1572855552","EU" +"1572855553","1572855558","BE" +"1572855559","1572855561","EU" +"1572855562","1572855562","DK" +"1572855563","1572855567","EU" +"1572855568","1572855807","BE" +"1572855808","1572857855","KZ" +"1572857856","1572859903","SE" +"1572859904","1572861951","IT" +"1572861952","1572863999","CH" +"1572864000","1577058303","DE" +"1577058304","1578106879","GB" +"1578106880","1578139391","DE" +"1578139392","1578139647","AT" +"1578139648","1578172415","DE" +"1578172416","1578237951","MT" +"1578237952","1578303487","DK" +"1578303488","1578369023","RU" +"1578369024","1578434559","AZ" +"1578434560","1578500095","HU" +"1578500096","1578565631","FI" +"1578565632","1578582015","FR" +"1578582016","1578584575","IT" +"1578584576","1578586111","PT" +"1578586112","1578588159","ES" +"1578588160","1578590207","PL" +"1578590208","1578590223","FR" +"1578590224","1578590231","ES" +"1578590232","1578590239","IT" +"1578590240","1578590271","FR" +"1578590272","1578590275","NL" +"1578590276","1578590279","PT" +"1578590280","1578590283","PL" +"1578590284","1578590287","GB" +"1578590288","1578590303","DE" +"1578590304","1578590311","IT" +"1578590312","1578590339","FR" +"1578590340","1578590343","DE" +"1578590344","1578590351","FR" +"1578590352","1578590367","GB" +"1578590368","1578590415","FR" +"1578590416","1578590431","PL" +"1578590432","1578590447","BE" +"1578590448","1578590471","FR" +"1578590472","1578590479","DE" +"1578590480","1578590495","IT" +"1578590496","1578590527","PL" +"1578590528","1578590535","ES" +"1578590536","1578590543","FR" +"1578590544","1578590559","PL" +"1578590560","1578590563","PT" +"1578590564","1578590567","FR" +"1578590568","1578590571","PL" +"1578590572","1578590575","IT" +"1578590576","1578590599","FR" +"1578590600","1578590603","LT" +"1578590604","1578590607","PL" +"1578590608","1578590615","GB" +"1578590616","1578590619","DE" +"1578590620","1578590623","IT" +"1578590624","1578590639","FR" +"1578590640","1578590647","CZ" +"1578590648","1578590655","BE" +"1578590656","1578590659","FR" +"1578590660","1578590663","CZ" +"1578590664","1578590667","FR" +"1578590668","1578590671","NL" +"1578590672","1578590687","PL" +"1578590688","1578590691","GB" +"1578590692","1578590695","DE" +"1578590696","1578590699","FR" +"1578590700","1578590735","PL" +"1578590736","1578590787","FR" +"1578590788","1578590791","LT" +"1578590792","1578590795","FR" +"1578590796","1578590799","IT" +"1578590800","1578590815","ES" +"1578590816","1578590831","GB" +"1578590832","1578590839","NL" +"1578590840","1578590847","PL" +"1578590848","1578590851","DE" +"1578590852","1578590855","FR" +"1578590856","1578590859","GB" +"1578590860","1578590879","FR" +"1578590880","1578590911","PL" +"1578590912","1578590927","FR" +"1578590928","1578590935","DE" +"1578590936","1578590943","ES" +"1578590944","1578590975","FR" +"1578590976","1578590991","GB" +"1578590992","1578590999","IT" +"1578591000","1578591007","FR" +"1578591008","1578591011","GB" +"1578591012","1578591023","FR" +"1578591024","1578591039","PL" +"1578591040","1578591055","NL" +"1578591056","1578591071","FR" +"1578591072","1578591119","GB" +"1578591120","1578591127","FR" +"1578591128","1578591135","DE" +"1578591136","1578591143","FR" +"1578591144","1578591151","GB" +"1578591152","1578591183","FR" +"1578591184","1578591187","CH" +"1578591188","1578591191","PT" +"1578591192","1578591195","GB" +"1578591196","1578591279","FR" +"1578591280","1578591287","ES" +"1578591288","1578591291","DE" +"1578591292","1578591295","ES" +"1578591296","1578591327","FR" +"1578591328","1578591343","PL" +"1578591344","1578591391","FR" +"1578591392","1578591395","IT" +"1578591396","1578591407","PL" +"1578591408","1578591411","ES" +"1578591412","1578591415","FR" +"1578591416","1578591423","ES" +"1578591424","1578591431","PL" +"1578591432","1578591439","ES" +"1578591440","1578591455","FR" +"1578591456","1578591459","GB" +"1578591460","1578591463","FR" +"1578591464","1578591487","PL" +"1578591488","1578591503","FR" +"1578591504","1578591519","CH" +"1578591520","1578591551","ES" +"1578591552","1578591555","BE" +"1578591556","1578591559","IT" +"1578591560","1578591563","PL" +"1578591564","1578591575","FR" +"1578591576","1578591579","DE" +"1578591580","1578591583","ES" +"1578591584","1578591599","IT" +"1578591600","1578591695","FR" +"1578591696","1578591699","DE" +"1578591700","1578591703","FR" +"1578591704","1578591707","DE" +"1578591708","1578591711","FR" +"1578591712","1578591743","PL" +"1578591744","1578591759","ES" +"1578591760","1578591791","FR" +"1578591792","1578591795","ES" +"1578591796","1578591799","NL" +"1578591800","1578591807","PL" +"1578591808","1578591887","FR" +"1578591888","1578591891","DE" +"1578591892","1578591899","FR" +"1578591900","1578591903","NL" +"1578591904","1578591919","PL" +"1578591920","1578591939","ES" +"1578591940","1578591951","FR" +"1578591952","1578591967","PT" +"1578591968","1578591975","FR" +"1578591976","1578591979","PL" +"1578591980","1578591983","FR" +"1578591984","1578592031","PL" +"1578592032","1578592039","PT" +"1578592040","1578592043","ES" +"1578592044","1578592047","PL" +"1578592048","1578592063","FR" +"1578592064","1578592067","ES" +"1578592068","1578592071","FR" +"1578592072","1578592079","PL" +"1578592080","1578592095","ES" +"1578592096","1578592111","FR" +"1578592112","1578592127","GB" +"1578592128","1578592143","DE" +"1578592144","1578592159","NL" +"1578592160","1578592163","FR" +"1578592164","1578592171","IT" +"1578592172","1578592175","ES" +"1578592176","1578592183","CZ" +"1578592184","1578592191","PT" +"1578592192","1578592199","BE" +"1578592200","1578592207","CH" +"1578592208","1578592223","FR" +"1578592224","1578592239","ES" +"1578592240","1578592271","FR" +"1578592272","1578592279","PL" +"1578592280","1578592283","BE" +"1578592284","1578592287","FR" +"1578592288","1578592295","PL" +"1578592296","1578592303","PT" +"1578592304","1578592351","FR" +"1578592352","1578592367","PL" +"1578592368","1578592371","FR" +"1578592372","1578592375","IE" +"1578592376","1578592379","GB" +"1578592380","1578592383","NL" +"1578592384","1578592395","FR" +"1578592396","1578592399","DE" +"1578592400","1578592407","FR" +"1578592408","1578592411","GB" +"1578592412","1578592415","DE" +"1578592416","1578592423","IT" +"1578592424","1578592431","IE" +"1578592432","1578592487","FR" +"1578592488","1578592495","PL" +"1578592496","1578592511","FR" +"1578592512","1578592515","GB" +"1578592516","1578592519","PL" +"1578592520","1578592531","FR" +"1578592532","1578592535","GB" +"1578592536","1578592539","PL" +"1578592540","1578592543","ES" +"1578592544","1578592559","FR" +"1578592560","1578592575","NL" +"1578592576","1578592591","GB" +"1578592592","1578592607","FR" +"1578592608","1578592623","IE" +"1578592624","1578592687","FR" +"1578592688","1578592695","DE" +"1578592696","1578592719","ES" +"1578592720","1578592735","CH" +"1578592736","1578592743","PL" +"1578592744","1578592747","PT" +"1578592748","1578592751","DE" +"1578592752","1578592767","IE" +"1578592768","1578592783","DE" +"1578592784","1578592799","FR" +"1578592800","1578592803","NL" +"1578592804","1578592811","FR" +"1578592812","1578592815","PL" +"1578592816","1578592831","FR" +"1578592832","1578592847","PL" +"1578592848","1578592851","BE" +"1578592852","1578592855","DE" +"1578592856","1578592859","FR" +"1578592860","1578592879","PL" +"1578592880","1578592883","FR" +"1578592884","1578592891","GB" +"1578592892","1578592895","FR" +"1578592896","1578592959","IT" +"1578592960","1578593007","FR" +"1578593008","1578593279","DE" +"1578593280","1578593295","PL" +"1578593296","1578593299","ES" +"1578593300","1578593303","GB" +"1578593304","1578593307","ES" +"1578593308","1578593319","FR" +"1578593320","1578593323","PT" +"1578593324","1578593327","FR" +"1578593328","1578593343","IT" +"1578593344","1578593359","FR" +"1578593360","1578593375","PL" +"1578593376","1578593407","GB" +"1578593408","1578593411","IT" +"1578593412","1578593415","FR" +"1578593416","1578593423","DE" +"1578593424","1578593439","FR" +"1578593440","1578593443","IT" +"1578593444","1578593447","PL" +"1578593448","1578593455","DE" +"1578593456","1578593471","FR" +"1578593472","1578593479","GB" +"1578593480","1578593483","PL" +"1578593484","1578593487","FR" +"1578593488","1578593495","ES" +"1578593496","1578593503","FR" +"1578593504","1578593519","PL" +"1578593520","1578593543","FR" +"1578593544","1578593547","ES" +"1578593548","1578593551","FI" +"1578593552","1578593559","PL" +"1578593560","1578593583","FR" +"1578593584","1578593587","GB" +"1578593588","1578593591","DE" +"1578593592","1578593599","IE" +"1578593600","1578593631","FR" +"1578593632","1578593647","NL" +"1578593648","1578593659","PL" +"1578593660","1578593663","FR" +"1578593664","1578593679","IT" +"1578593680","1578593711","FR" +"1578593712","1578593727","IE" +"1578593728","1578593759","FR" +"1578593760","1578593775","ES" +"1578593776","1578593791","NL" +"1578593792","1578593823","FR" +"1578593824","1578593831","GB" +"1578593832","1578593835","FR" +"1578593836","1578593839","NL" +"1578593840","1578593871","FR" +"1578593872","1578593875","ES" +"1578593876","1578593879","FR" +"1578593880","1578593887","DE" +"1578593888","1578593895","ES" +"1578593896","1578593899","GB" +"1578593900","1578593903","DE" +"1578593904","1578593919","FR" +"1578593920","1578593935","PL" +"1578593936","1578593943","FR" +"1578593944","1578593947","IT" +"1578593948","1578593955","FR" +"1578593956","1578593959","LT" +"1578593960","1578593963","FR" +"1578593964","1578593967","ES" +"1578593968","1578593983","FR" +"1578593984","1578593999","PL" +"1578594000","1578594015","FR" +"1578594016","1578594031","BE" +"1578594032","1578594039","ES" +"1578594040","1578594047","IT" +"1578594048","1578594055","FR" +"1578594056","1578594059","ES" +"1578594060","1578594063","FR" +"1578594064","1578594079","PL" +"1578594080","1578594087","CH" +"1578594088","1578594095","CZ" +"1578594096","1578594143","FR" +"1578594144","1578594147","PL" +"1578594148","1578594151","ES" +"1578594152","1578594159","IT" +"1578594160","1578594163","PT" +"1578594164","1578594167","ES" +"1578594168","1578594171","DE" +"1578594172","1578594175","ES" +"1578594176","1578594207","FR" +"1578594208","1578594211","DE" +"1578594212","1578594215","ES" +"1578594216","1578594239","PL" +"1578594240","1578594255","FR" +"1578594256","1578594271","IE" +"1578594272","1578594303","PL" +"1578594304","1578594307","GB" +"1578594308","1578594311","FI" +"1578594312","1578594315","PL" +"1578594316","1578594319","FR" +"1578594320","1578594335","PL" +"1578594336","1578594351","IE" +"1578594352","1578594355","GB" +"1578594356","1578594359","FR" +"1578594360","1578594363","PT" +"1578594364","1578594367","ES" +"1578594368","1578594375","FR" +"1578594376","1578594383","PT" +"1578594384","1578594399","FR" +"1578594400","1578594431","PL" +"1578594432","1578594447","FR" +"1578594448","1578594463","PL" +"1578594464","1578594479","FR" +"1578594480","1578594495","ES" +"1578594496","1578594511","FR" +"1578594512","1578594515","PL" +"1578594516","1578594519","FR" +"1578594520","1578594523","PL" +"1578594524","1578594527","FR" +"1578594528","1578594531","PL" +"1578594532","1578594535","NL" +"1578594536","1578594539","DE" +"1578594540","1578594543","FR" +"1578594544","1578594551","ES" +"1578594552","1578594555","PL" +"1578594556","1578594559","LT" +"1578594560","1578594575","PL" +"1578594576","1578594607","ES" +"1578594608","1578594623","FR" +"1578594624","1578594687","DE" +"1578594688","1578594703","FR" +"1578594704","1578594707","BE" +"1578594708","1578594711","DE" +"1578594712","1578594715","IT" +"1578594716","1578594751","FR" +"1578594752","1578594767","ES" +"1578594768","1578594775","GB" +"1578594776","1578594783","ES" +"1578594784","1578594799","FR" +"1578594800","1578594815","DE" +"1578594816","1578594847","FR" +"1578594848","1578594863","IT" +"1578594864","1578594871","PL" +"1578594872","1578595039","FR" +"1578595040","1578595055","GB" +"1578595056","1578595103","FR" +"1578595104","1578595119","GB" +"1578595120","1578595127","FR" +"1578595128","1578595131","ES" +"1578595132","1578595151","FR" +"1578595152","1578595167","ES" +"1578595168","1578595199","FR" +"1578595200","1578595203","DE" +"1578595204","1578595207","FR" +"1578595208","1578595215","PL" +"1578595216","1578595231","DE" +"1578595232","1578595263","BE" +"1578595264","1578595267","ES" +"1578595268","1578595271","FR" +"1578595272","1578595275","DE" +"1578595276","1578595279","ES" +"1578595280","1578595287","FR" +"1578595288","1578595295","PL" +"1578595296","1578595327","FR" +"1578595328","1578595343","IT" +"1578595344","1578595363","FR" +"1578595364","1578595367","DE" +"1578595368","1578595379","FR" +"1578595380","1578595383","CH" +"1578595384","1578595387","ES" +"1578595388","1578595407","PL" +"1578595408","1578595411","IE" +"1578595412","1578595419","PL" +"1578595420","1578595423","IT" +"1578595424","1578595439","PL" +"1578595440","1578595447","FR" +"1578595448","1578595455","ES" +"1578595456","1578595459","DE" +"1578595460","1578595467","PL" +"1578595468","1578595471","FR" +"1578595472","1578595479","ES" +"1578595480","1578595487","GB" +"1578595488","1578595503","DE" +"1578595504","1578595519","PL" +"1578595520","1578595535","FR" +"1578595536","1578595539","BE" +"1578595540","1578595543","CH" +"1578595544","1578595547","GB" +"1578595548","1578595607","FR" +"1578595608","1578595611","GB" +"1578595612","1578595615","ES" +"1578595616","1578595619","PL" +"1578595620","1578595623","BE" +"1578595624","1578595627","GB" +"1578595628","1578595631","IE" +"1578595632","1578595635","FR" +"1578595636","1578595639","ES" +"1578595640","1578595643","DE" +"1578595644","1578595647","GB" +"1578595648","1578595679","FR" +"1578595680","1578595695","PL" +"1578595696","1578595711","FR" +"1578595712","1578595743","GB" +"1578595744","1578595747","IT" +"1578595748","1578595751","FR" +"1578595752","1578595759","ES" +"1578595760","1578595763","FR" +"1578595764","1578595775","ES" +"1578595776","1578595807","CH" +"1578595808","1578595823","DE" +"1578595824","1578595855","FR" +"1578595856","1578595871","GB" +"1578595872","1578595907","PL" +"1578595908","1578595911","BE" +"1578595912","1578595935","FR" +"1578595936","1578595967","DE" +"1578595968","1578595983","IE" +"1578595984","1578595991","NL" +"1578595992","1578595995","IT" +"1578595996","1578596015","FR" +"1578596016","1578596023","PL" +"1578596024","1578596031","FR" +"1578596032","1578596063","IT" +"1578596064","1578596095","IE" +"1578596096","1578596099","DE" +"1578596100","1578596103","GB" +"1578596104","1578596107","PL" +"1578596108","1578596111","ES" +"1578596112","1578596115","NL" +"1578596116","1578596119","FR" +"1578596120","1578596123","PT" +"1578596124","1578596127","ES" +"1578596128","1578596143","PL" +"1578596144","1578596147","DE" +"1578596148","1578596151","FR" +"1578596152","1578596155","DE" +"1578596156","1578596159","FR" +"1578596160","1578596175","PL" +"1578596176","1578596183","GB" +"1578596184","1578596191","BE" +"1578596192","1578596207","ES" +"1578596208","1578596255","FR" +"1578596256","1578596287","GB" +"1578596288","1578596303","ES" +"1578596304","1578596351","FR" +"1578596352","1578596863","GB" +"1578596864","1578600191","FR" +"1578600192","1578600255","BE" +"1578600256","1578600511","FR" +"1578600512","1578600575","BE" +"1578600576","1578602495","FR" +"1578602496","1578604543","NL" +"1578604544","1578606591","GB" +"1578606592","1578607725","DE" +"1578607726","1578607726","FR" +"1578607727","1578608639","DE" +"1578608640","1578610687","CZ" +"1578610688","1578610751","FR" +"1578610752","1578610755","BE" +"1578610756","1578610759","ES" +"1578610760","1578610763","PL" +"1578610764","1578610767","NL" +"1578610768","1578610771","CH" +"1578610772","1578610775","GB" +"1578610776","1578610779","DE" +"1578610780","1578610783","FR" +"1578610784","1578610799","DE" +"1578610800","1578610803","PL" +"1578610804","1578610807","GB" +"1578610808","1578610819","FR" +"1578610820","1578610823","NL" +"1578610824","1578610831","DE" +"1578610832","1578610847","CH" +"1578610848","1578610851","PL" +"1578610852","1578610855","IE" +"1578610856","1578610863","PL" +"1578610864","1578610867","BE" +"1578610868","1578610871","FR" +"1578610872","1578610879","PL" +"1578610880","1578610943","FR" +"1578610944","1578610975","ES" +"1578610976","1578611007","PL" +"1578611008","1578611023","FR" +"1578611024","1578611039","NL" +"1578611040","1578611043","ES" +"1578611044","1578611047","GB" +"1578611048","1578611051","ES" +"1578611052","1578611055","PL" +"1578611056","1578611071","FR" +"1578611072","1578611075","DE" +"1578611076","1578611087","FR" +"1578611088","1578611103","DE" +"1578611104","1578611107","BE" +"1578611108","1578611119","DE" +"1578611120","1578611123","PL" +"1578611124","1578611127","FR" +"1578611128","1578611135","PL" +"1578611136","1578611151","CH" +"1578611152","1578611167","DE" +"1578611168","1578611175","PL" +"1578611176","1578611183","IE" +"1578611184","1578611191","BE" +"1578611192","1578611195","FR" +"1578611196","1578611199","ES" +"1578611200","1578611215","NL" +"1578611216","1578611219","GB" +"1578611220","1578611223","DE" +"1578611224","1578611227","ES" +"1578611228","1578611231","PL" +"1578611232","1578611235","IT" +"1578611236","1578611239","FR" +"1578611240","1578611243","IE" +"1578611244","1578611251","GB" +"1578611252","1578611255","IT" +"1578611256","1578611263","PL" +"1578611264","1578611279","IT" +"1578611280","1578611287","FR" +"1578611288","1578611291","PL" +"1578611292","1578611295","DE" +"1578611296","1578611303","GB" +"1578611304","1578611327","PL" +"1578611328","1578611343","BE" +"1578611344","1578611359","FR" +"1578611360","1578611375","CH" +"1578611376","1578611391","FR" +"1578611392","1578611399","GB" +"1578611400","1578611407","ES" +"1578611408","1578611423","IT" +"1578611424","1578611431","GB" +"1578611432","1578611435","ES" +"1578611436","1578611439","FR" +"1578611440","1578611443","ES" +"1578611444","1578611447","NL" +"1578611448","1578611455","ES" +"1578611456","1578611711","FR" +"1578611712","1578611775","CH" +"1578611776","1578611783","DE" +"1578611784","1578611791","FR" +"1578611792","1578611807","GB" +"1578611808","1578611839","CH" +"1578611840","1578611855","BE" +"1578611856","1578611919","FR" +"1578611920","1578611935","BE" +"1578611936","1578611943","PL" +"1578611944","1578611947","FR" +"1578611948","1578611951","GB" +"1578611952","1578611967","FR" +"1578611968","1578612031","GB" +"1578612032","1578612039","DE" +"1578612040","1578612047","CH" +"1578612048","1578612051","NL" +"1578612052","1578612055","DE" +"1578612056","1578612059","PL" +"1578612060","1578612063","ES" +"1578612064","1578612115","FR" +"1578612116","1578612119","PL" +"1578612120","1578612123","IE" +"1578612124","1578612127","DE" +"1578612128","1578612135","ES" +"1578612136","1578612139","IE" +"1578612140","1578612143","ES" +"1578612144","1578612223","PL" +"1578612224","1578612239","IT" +"1578612240","1578612255","FR" +"1578612256","1578612259","PL" +"1578612260","1578612263","IT" +"1578612264","1578612303","FR" +"1578612304","1578612319","DE" +"1578612320","1578612383","FR" +"1578612384","1578612415","PL" +"1578612416","1578612575","FR" +"1578612576","1578612579","PL" +"1578612580","1578612583","FR" +"1578612584","1578612587","IE" +"1578612588","1578612607","IT" +"1578612608","1578612623","PT" +"1578612624","1578612639","CH" +"1578612640","1578612671","PL" +"1578612672","1578612687","ES" +"1578612688","1578612703","DE" +"1578612704","1578612863","FR" +"1578612864","1578612895","NL" +"1578612896","1578612899","FR" +"1578612900","1578612903","PL" +"1578612904","1578612907","DE" +"1578612908","1578612927","FR" +"1578612928","1578612943","ES" +"1578612944","1578612959","GB" +"1578612960","1578612975","DE" +"1578612976","1578612983","IT" +"1578612984","1578612991","FR" +"1578612992","1578613247","DE" +"1578613248","1578613391","FR" +"1578613392","1578613399","GB" +"1578613400","1578613423","FR" +"1578613424","1578613427","DE" +"1578613428","1578613431","GB" +"1578613432","1578613435","ES" +"1578613436","1578613447","FR" +"1578613448","1578613451","NL" +"1578613452","1578613455","GB" +"1578613456","1578613459","IE" +"1578613460","1578613471","FR" +"1578613472","1578613475","ES" +"1578613476","1578613479","CH" +"1578613480","1578613483","GB" +"1578613484","1578613487","PL" +"1578613488","1578613491","IT" +"1578613492","1578613495","IE" +"1578613496","1578613503","NL" +"1578613504","1578613567","DE" +"1578613568","1578613631","PL" +"1578613632","1578613647","DE" +"1578613648","1578613679","FR" +"1578613680","1578613695","ES" +"1578613696","1578613711","NL" +"1578613712","1578613719","BE" +"1578613720","1578613723","ES" +"1578613724","1578613727","IT" +"1578613728","1578613735","FR" +"1578613736","1578613739","PL" +"1578613740","1578613743","FR" +"1578613744","1578613751","ES" +"1578613752","1578613759","NL" +"1578613760","1578613775","DE" +"1578613776","1578613779","FR" +"1578613780","1578613783","PL" +"1578613784","1578613787","BE" +"1578613788","1578613791","PL" +"1578613792","1578613823","ES" +"1578613824","1578613887","IT" +"1578613888","1578613951","ES" +"1578613952","1578613983","FR" +"1578613984","1578613999","PL" +"1578614000","1578614003","FR" +"1578614004","1578614007","PL" +"1578614008","1578614015","DE" +"1578614016","1578614031","FR" +"1578614032","1578614047","BE" +"1578614048","1578614055","FI" +"1578614056","1578614071","FR" +"1578614072","1578614079","ES" +"1578614080","1578614175","FR" +"1578614176","1578614191","ES" +"1578614192","1578614195","FR" +"1578614196","1578614207","GB" +"1578614208","1578614271","PL" +"1578614272","1578614527","ES" +"1578614528","1578614543","GB" +"1578614544","1578614559","PL" +"1578614560","1578614575","FR" +"1578614576","1578614583","DE" +"1578614584","1578614591","GB" +"1578614592","1578614623","CZ" +"1578614624","1578614655","BE" +"1578614656","1578631167","FR" +"1578631168","1578663935","RO" +"1578663936","1578762239","RU" +"1578762240","1578795007","BG" +"1578795008","1578827775","RU" +"1578827776","1578860543","UA" +"1578860544","1578893311","HU" +"1578893312","1578991615","RU" +"1578991616","1579024383","KW" +"1579024384","1579057151","GB" +"1579057152","1579089919","LV" +"1579089920","1579090431","GB" +"1579090432","1579090463","NL" +"1579090464","1579091759","GB" +"1579091760","1579091775","IL" +"1579091776","1579091839","GB" +"1579091840","1579091855","US" +"1579091856","1579091967","GB" +"1579091968","1579092223","DE" +"1579092224","1579093759","GB" +"1579093760","1579094015","NL" +"1579094016","1579094271","GB" +"1579094272","1579094527","NL" +"1579094528","1579094783","GB" +"1579094784","1579095039","NL" +"1579095040","1579096319","GB" +"1579096320","1579096351","DK" +"1579096352","1579098367","GB" +"1579098368","1579098431","NL" +"1579098432","1579099175","GB" +"1579099176","1579099183","NL" +"1579099184","1579105023","GB" +"1579105024","1579105087","NL" +"1579105088","1579105119","DE" +"1579105120","1579105535","GB" +"1579105536","1579105599","NL" +"1579105600","1579106303","GB" +"1579106304","1579122687","DE" +"1579122688","1579155455","RU" +"1579155456","1579679743","IT" +"1579679744","1579745279","PL" +"1579745280","1579810815","RU" +"1579810816","1579876351","PL" +"1579876352","1579941887","GE" +"1579941888","1580007423","HU" +"1580007424","1580015615","RU" +"1580015616","1580048383","UA" +"1580048384","1580064767","RU" +"1580064768","1580072959","DE" +"1580072960","1580075071","PT" +"1580075072","1580075199","GB" +"1580075200","1580104959","PT" +"1580104960","1580105215","CH" +"1580105216","1580134399","PT" +"1580134400","1580134575","ES" +"1580134576","1580134583","GB" +"1580134584","1580134591","ES" +"1580134592","1580134655","GB" +"1580134656","1580136447","ES" +"1580136448","1580138495","PT" +"1580138496","1580204031","IT" +"1580204032","1580335103","RO" +"1580335104","1580466175","RU" +"1580466176","1580597247","RO" +"1580597248","1580728319","TR" +"1580728320","1580990463","AE" +"1580990464","1581252607","RO" +"1581252608","1581776895","GR" +"1581776896","1581793279","RU" +"1581793280","1581809663","PL" +"1581809664","1581826047","BG" +"1581826048","1581842431","GB" +"1581842432","1581858815","BG" +"1581858816","1581875199","IT" +"1581875200","1581881343","TR" +"1581881344","1581881599","GB" +"1581881600","1581890559","TR" +"1581890560","1581891071","GB" +"1581891072","1581891583","TR" +"1581891584","1581907967","RU" +"1581907968","1581924351","IT" +"1581924352","1581940735","UA" +"1581940736","1581957119","IR" +"1581957120","1581973503","CZ" +"1581973504","1581989887","RU" +"1581989888","1582006271","PL" +"1582006272","1582022655","RU" +"1582022656","1582029900","NL" +"1582029901","1582029901","SE" +"1582029902","1582039039","NL" +"1582039040","1582055423","BH" +"1582055424","1582071807","UA" +"1582071808","1582088191","ES" +"1582088192","1582104575","GB" +"1582104576","1582153727","RU" +"1582153728","1582170111","SA" +"1582170112","1582186495","CH" +"1582186496","1582194207","TR" +"1582194208","1582194431","GB" +"1582194432","1582202879","TR" +"1582202880","1582219263","PL" +"1582219264","1582252031","RU" +"1582252032","1582268415","TR" +"1582268416","1582284799","DE" +"1582284800","1582301183","BH" +"1582301184","1583349759","IT" +"1583349760","1583611903","SA" +"1583611904","1583615999","LV" +"1583616000","1583617791","NL" +"1583617792","1583617844","US" +"1583617845","1583617845","A1" +"1583617846","1583618047","US" +"1583618048","1583619839","NL" +"1583619840","1583620095","US" +"1583620096","1583624191","IT" +"1583624192","1583628287","RS" +"1583628288","1583631283","DE" +"1583631284","1583631287","A2" +"1583631288","1583632383","DE" +"1583632384","1583636479","RU" +"1583636480","1583640575","MK" +"1583640576","1583644671","NL" +"1583644672","1583646463","DE" +"1583646464","1583646719","GB" +"1583646720","1583648767","DE" +"1583648768","1583652863","CH" +"1583652864","1583656959","FR" +"1583656960","1583665151","RU" +"1583665152","1583669247","UA" +"1583669248","1583673343","GE" +"1583673344","1583673991","DE" +"1583673992","1583673999","GB" +"1583674000","1583677439","DE" +"1583677440","1583681535","FI" +"1583681536","1583685631","PL" +"1583685632","1583689727","DE" +"1583689728","1583693823","IT" +"1583693824","1583693871","RU" +"1583693872","1583693879","A2" +"1583693880","1583697919","RU" +"1583697920","1583702015","TR" +"1583702016","1583706111","RU" +"1583706112","1583710207","GI" +"1583710208","1583712255","IR" +"1583712256","1583714303","AE" +"1583714304","1583718111","GB" +"1583718112","1583718112","FR" +"1583718113","1583718113","DE" +"1583718114","1583718114","ES" +"1583718115","1583718115","IT" +"1583718116","1583718116","NL" +"1583718117","1583718117","BE" +"1583718118","1583722495","GB" +"1583722496","1583726591","IR" +"1583726592","1583727359","BG" +"1583727360","1583727871","MK" +"1583727872","1583730687","BG" +"1583730688","1583732335","DK" +"1583732336","1583732351","A2" +"1583732352","1583732383","DK" +"1583732384","1583732399","DE" +"1583732400","1583734783","DK" +"1583734784","1583738879","LV" +"1583738880","1583742975","IR" +"1583742976","1583747071","TR" +"1583747072","1583751167","RU" +"1583751168","1583755263","NO" +"1583755264","1583755414","NL" +"1583755415","1583755424","RU" +"1583755425","1583759359","NL" +"1583759360","1583763455","TR" +"1583763456","1583767551","RU" +"1583767552","1583771647","AT" +"1583771648","1583775743","RU" +"1583775744","1583779839","IT" +"1583779840","1583780255","GB" +"1583780256","1583780263","IT" +"1583780264","1583780767","GB" +"1583780768","1583780775","IT" +"1583780776","1583781127","GB" +"1583781128","1583781135","IT" +"1583781136","1583781279","GB" +"1583781280","1583781295","IT" +"1583781296","1583781359","GB" +"1583781360","1583781367","IT" +"1583781368","1583782495","GB" +"1583782496","1583782503","IT" +"1583782504","1583782527","GB" +"1583782528","1583782535","IT" +"1583782536","1583782671","GB" +"1583782672","1583782679","IT" +"1583782680","1583783023","GB" +"1583783024","1583783031","IT" +"1583783032","1583783727","GB" +"1583783728","1583783735","IT" +"1583783736","1583783767","GB" +"1583783768","1583783775","IT" +"1583783776","1583783903","GB" +"1583783904","1583783911","IT" +"1583783912","1583783935","GB" +"1583783936","1583788031","EU" +"1583788032","1583792127","TM" +"1583792128","1583796223","IE" +"1583796224","1583800063","DE" +"1583800064","1583800095","AT" +"1583800096","1583800319","DE" +"1583800320","1583804415","ME" +"1583804416","1583808511","GB" +"1583808512","1583812607","MD" +"1583812608","1583813171","NL" +"1583813172","1583813183","US" +"1583813184","1583813199","NL" +"1583813200","1583813215","RU" +"1583813216","1583813231","US" +"1583813232","1583813239","NL" +"1583813240","1583813243","US" +"1583813244","1583813663","NL" +"1583813664","1583813671","US" +"1583813672","1583813711","NL" +"1583813712","1583813727","US" +"1583813728","1583813735","NL" +"1583813736","1583813743","DE" +"1583813744","1583815167","NL" +"1583815168","1583815215","US" +"1583815216","1583815343","NL" +"1583815344","1583815351","US" +"1583815352","1583815679","NL" +"1583815680","1583815711","DE" +"1583815712","1583815727","US" +"1583815728","1583815807","NL" +"1583815808","1583815935","US" +"1583815936","1583816191","GB" +"1583816192","1583816255","DE" +"1583816256","1583816351","NL" +"1583816352","1583816415","GB" +"1583816416","1583816703","NL" +"1583816704","1583819007","TR" +"1583819008","1583819136","GB" +"1583819137","1583820799","TR" +"1583820800","1583824895","LV" +"1583824896","1583828991","SI" +"1583828992","1583833087","RU" +"1583833088","1583837183","CH" +"1583837184","1583841279","GB" +"1583841280","1583845375","FR" +"1583845376","1583845535","NL" +"1583845536","1583845567","BE" +"1583845568","1583845727","NL" +"1583845728","1583845743","BE" +"1583845744","1583848639","NL" +"1583848640","1583848703","BE" +"1583848704","1583848735","NL" +"1583848736","1583848799","BE" +"1583848800","1583849471","NL" +"1583849472","1583850751","DE" +"1583850752","1583850943","AT" +"1583850944","1583850951","DE" +"1583850952","1583850959","AT" +"1583850960","1583850999","DE" +"1583851000","1583851007","AT" +"1583851008","1583853567","DE" +"1583853568","1583857663","RU" +"1583857664","1583861759","SE" +"1583861760","1583865855","LU" +"1583865856","1583869951","RU" +"1583869952","1583874047","KZ" +"1583874048","1584398335","BE" +"1584398336","1584660479","CZ" +"1584660480","1584857087","GB" +"1584857088","1584859135","DE" +"1584859136","1584922623","GB" +"1584922624","1585184767","TR" +"1585184768","1585190911","PL" +"1585190912","1585192959","ES" +"1585192960","1585195007","IT" +"1585195008","1585197055","CZ" +"1585197056","1585199103","IT" +"1585199104","1585201151","NL" +"1585201152","1585205247","IT" +"1585205248","1585207295","FR" +"1585207296","1585209855","NL" +"1585209856","1585210111","IQ" +"1585210112","1585210367","IR" +"1585210368","1585211391","NL" +"1585211392","1585213439","CZ" +"1585213440","1585214463","GB" +"1585214464","1585217535","NL" +"1585217536","1585219583","FR" +"1585219584","1585221631","NL" +"1585221632","1585223679","SK" +"1585223680","1585225727","FR" +"1585225728","1585227775","UA" +"1585227776","1585231359","RU" +"1585231360","1585231615","NL" +"1585231616","1585231871","RU" +"1585231872","1585233919","CZ" +"1585233920","1585238015","RU" +"1585238016","1585240063","DE" +"1585240064","1585241087","FR" +"1585241088","1585242111","MQ" +"1585242112","1585244159","RU" +"1585244160","1585246207","FR" +"1585246208","1585248255","RU" +"1585248256","1585250303","CZ" +"1585250304","1585254399","RU" +"1585254400","1585256447","GB" +"1585256448","1585258495","DE" +"1585258496","1585260543","GB" +"1585260544","1585264639","RU" +"1585264640","1585265663","MT" +"1585265664","1585265695","FR" +"1585265696","1585265727","IM" +"1585265728","1585266175","FR" +"1585266176","1585266271","MT" +"1585266272","1585266287","MA" +"1585266288","1585266687","MT" +"1585266688","1585270783","DE" +"1585270784","1585272831","IT" +"1585272832","1585274879","RU" +"1585274880","1585276927","ES" +"1585276928","1585278975","FR" +"1585278976","1585281023","AL" +"1585281024","1585283071","UA" +"1585283072","1585285119","GB" +"1585285120","1585287167","ES" +"1585287168","1585289215","CY" +"1585289216","1585291263","DE" +"1585291264","1585295359","FR" +"1585295360","1585297407","HU" +"1585297408","1585299455","RU" +"1585299456","1585301503","GB" +"1585301504","1585303551","LU" +"1585303552","1585305599","DE" +"1585305600","1585307647","CZ" +"1585307648","1585309695","QA" +"1585309696","1585311743","IT" +"1585311744","1585313791","RU" +"1585313792","1585315839","HU" +"1585315840","1585317887","DK" +"1585317888","1585319935","IT" +"1585319936","1585321983","CH" +"1585321984","1585324031","RU" +"1585324032","1585326079","NL" +"1585326080","1585328127","GB" +"1585328128","1585330175","BE" +"1585330176","1585332223","IT" +"1585332224","1585334271","NL" +"1585334272","1585336319","DE" +"1585336320","1585338367","SE" +"1585338368","1585340415","RU" +"1585340416","1585342463","AT" +"1585342464","1585343311","GB" +"1585343312","1585343319","DE" +"1585343320","1585344511","GB" +"1585344512","1585346559","FR" +"1585346560","1585348607","GB" +"1585348608","1585350655","CH" +"1585350656","1585352703","IT" +"1585352704","1585354751","PT" +"1585354752","1585356799","RU" +"1585356800","1585358847","FI" +"1585358848","1585360895","PT" +"1585360896","1585362943","DK" +"1585362944","1585363455","IT" +"1585363456","1585363551","ES" +"1585363552","1585364991","IT" +"1585364992","1585367039","GB" +"1585367040","1585369087","RU" +"1585369088","1585371135","GB" +"1585371136","1585375231","SE" +"1585375232","1585377279","GB" +"1585377280","1585379327","ES" +"1585379328","1585381375","CH" +"1585381376","1585382399","RS" +"1585382400","1585383423","GB" +"1585383424","1585385471","FR" +"1585385472","1585387519","DE" +"1585387520","1585389567","SI" +"1585389568","1585391615","SE" +"1585391616","1585393663","IT" +"1585393664","1585395711","DK" +"1585395712","1585397759","NO" +"1585397760","1585399807","RU" +"1585399808","1585400063","NL" +"1585400064","1585400319","IL" +"1585400320","1585400575","GB" +"1585400576","1585400831","FR" +"1585400832","1585401087","DE" +"1585401088","1585401343","NL" +"1585401344","1585401599","DE" +"1585401600","1585401855","GB" +"1585401856","1585403903","IT" +"1585403904","1585405951","RU" +"1585405952","1585407999","GB" +"1585408000","1585410047","PL" +"1585410048","1585412095","GB" +"1585412096","1585414143","NO" +"1585414144","1585416191","CZ" +"1585416192","1585422335","RU" +"1585422336","1585424383","ES" +"1585424384","1585428479","RU" +"1585428480","1585432575","ES" +"1585432576","1585434623","RU" +"1585434624","1585436671","JO" +"1585436672","1585438719","RU" +"1585438720","1585440767","DE" +"1585440768","1585442815","IT" +"1585442816","1585446911","RU" +"1585446912","1585577983","KW" +"1585577984","1585709055","UA" +"1585709056","1585840127","PT" +"1585840128","1585971199","DE" +"1585971200","1585979391","AT" +"1585979392","1585987583","GB" +"1585987584","1585988095","SE" +"1585988096","1585988103","IT" +"1585988104","1585988119","SE" +"1585988120","1585988123","US" +"1585988124","1585988351","SE" +"1585988352","1585988359","DE" +"1585988360","1585988479","SE" +"1585988480","1585988483","US" +"1585988484","1585988927","SE" +"1585988928","1585988931","US" +"1585988932","1585989307","SE" +"1585989308","1585989311","US" +"1585989312","1585990655","SE" +"1585990656","1585990659","US" +"1585990660","1585990847","SE" +"1585990848","1585990851","US" +"1585990852","1585990911","SE" +"1585990912","1585990915","US" +"1585990916","1585991167","SE" +"1585991168","1585991171","US" +"1585991172","1585991683","SE" +"1585991684","1585991687","US" +"1585991688","1585991727","SE" +"1585991728","1585991731","RU" +"1585991732","1585991935","SE" +"1585991936","1585991939","US" +"1585991940","1585994543","SE" +"1585994544","1585994547","MY" +"1585994548","1585995647","SE" +"1585995648","1585995651","US" +"1585995652","1585995775","SE" +"1585995776","1586003967","AT" +"1586003968","1586012159","SK" +"1586012160","1586020351","DE" +"1586020352","1586028543","RU" +"1586028544","1586036735","GB" +"1586036736","1586061311","RU" +"1586061312","1586069503","SE" +"1586069504","1586077695","DE" +"1586077696","1586085887","GE" +"1586085888","1586110463","RU" +"1586110464","1586118655","IT" +"1586118656","1586126847","DK" +"1586126848","1586128383","CZ" +"1586128384","1586128639","SK" +"1586128640","1586135039","CZ" +"1586135040","1586143231","RU" +"1586143232","1586151423","IT" +"1586151424","1586159615","TR" +"1586159616","1586167807","MT" +"1586167808","1586175999","DE" +"1586176000","1586184191","BE" +"1586184192","1586192383","NO" +"1586192384","1586200575","RU" +"1586200576","1586208767","MD" +"1586208768","1586216959","IR" +"1586216960","1586225151","BG" +"1586225152","1586233343","RU" +"1586233344","1586241535","FR" +"1586241536","1586242983","SE" +"1586242984","1586242991","DK" +"1586242992","1586243779","SE" +"1586243780","1586243787","NO" +"1586243788","1586249727","SE" +"1586249728","1586257919","SI" +"1586257920","1586266111","EU" +"1586266112","1586274303","RU" +"1586274304","1586282495","BE" +"1586282496","1586298879","RU" +"1586298880","1586307071","IT" +"1586307072","1586315263","RU" +"1586315264","1586323455","UZ" +"1586323456","1586331647","RU" +"1586331648","1586339839","PL" +"1586339840","1586348031","RU" +"1586348032","1586356223","SY" +"1586356224","1586372607","RU" +"1586372608","1586380799","JO" +"1586380800","1586388991","GB" +"1586388992","1586397183","ES" +"1586397184","1586399231","LV" +"1586399232","1586401279","RU" +"1586401280","1586403327","IT" +"1586403328","1586405375","IS" +"1586405376","1586407423","AT" +"1586407424","1586409471","GB" +"1586409472","1586411519","IT" +"1586411520","1586411775","GB" +"1586411776","1586412287","US" +"1586412288","1586412543","HK" +"1586412544","1586412799","GB" +"1586412800","1586413055","US" +"1586413056","1586413567","GB" +"1586413568","1586415615","IT" +"1586415616","1586416255","ES" +"1586416256","1586417663","AD" +"1586417664","1586419711","NL" +"1586419712","1586421759","DE" +"1586421760","1586423807","SE" +"1586423808","1586425855","CZ" +"1586425856","1586427903","NL" +"1586427904","1586428159","CH" +"1586428160","1586429407","FR" +"1586429408","1586429423","US" +"1586429424","1586429951","FR" +"1586429952","1586431999","CH" +"1586432000","1586434047","DK" +"1586434048","1586436095","BE" +"1586436096","1586438143","ES" +"1586438144","1586446335","RU" +"1586446336","1586448383","NO" +"1586448384","1586450431","ES" +"1586450432","1586452479","FR" +"1586452480","1586454527","CH" +"1586454528","1586456575","IT" +"1586456576","1586458623","GB" +"1586458624","1586458911","FR" +"1586458912","1586458943","BE" +"1586458944","1586458975","CH" +"1586458976","1586459007","DE" +"1586459008","1586459039","ES" +"1586459040","1586459071","GB" +"1586459072","1586459103","IT" +"1586459104","1586459135","NL" +"1586459136","1586460527","FR" +"1586460528","1586460543","ES" +"1586460544","1586460671","FR" +"1586460672","1586462719","GB" +"1586462720","1586464767","RU" +"1586464768","1586466815","ES" +"1586466816","1586468863","RU" +"1586468864","1586470911","IT" +"1586470912","1586472959","GB" +"1586472960","1586475007","CZ" +"1586475008","1586477055","GR" +"1586477056","1586479103","BE" +"1586479104","1586481151","KG" +"1586481152","1586483199","ES" +"1586483200","1586485247","NL" +"1586485248","1586487295","FR" +"1586487296","1586489343","SA" +"1586489344","1586491391","CZ" +"1586491392","1586493439","RU" +"1586493440","1586495487","GB" +"1586495488","1587019775","DK" +"1587019776","1587085311","PL" +"1587085312","1587150847","UA" +"1587150848","1587154943","RU" +"1587154944","1587159039","PL" +"1587159040","1587163135","UA" +"1587163136","1587165183","DE" +"1587165184","1587167231","PL" +"1587167232","1587175423","RU" +"1587175424","1587177471","PL" +"1587177472","1587179519","RS" +"1587179520","1587183615","UA" +"1587183616","1587199999","RU" +"1587200000","1587216383","UA" +"1587216384","1587347455","BG" +"1587347456","1587412991","NL" +"1587412992","1587417087","RU" +"1587417088","1587425279","UA" +"1587425280","1587429375","UZ" +"1587429376","1587437567","UA" +"1587437568","1587445759","RU" +"1587445760","1587449855","PL" +"1587449856","1587453951","UA" +"1587453952","1587470335","RU" +"1587470336","1587474431","PL" +"1587474432","1587478527","UA" +"1587478528","1587511295","RU" +"1587511296","1587544063","IL" +"1587544064","1588068351","IT" +"1588068352","1588592639","GB" +"1588592640","1588621311","RO" +"1588621312","1588625407","MD" +"1588625408","1588670463","RO" +"1588670464","1588674559","MD" +"1588674560","1588689407","RO" +"1588689408","1588689919","DE" +"1588689920","1588723711","RO" +"1588723712","1588854783","UA" +"1588854784","1588985855","RU" +"1588985856","1589182463","IR" +"1589182464","1589198847","OM" +"1589198848","1589200895","FR" +"1589200896","1589202943","IT" +"1589202944","1589203711","SE" +"1589203712","1589203967","NL" +"1589203968","1589204223","SE" +"1589204224","1589204991","NL" +"1589204992","1589207039","DE" +"1589207040","1589215231","IT" +"1589215232","1589247999","GB" +"1589248000","1589280767","NO" +"1589280768","1589313535","DE" +"1589313536","1589346303","LB" +"1589346304","1589379071","KW" +"1589379072","1589411839","RU" +"1589411840","1589444607","IL" +"1589444608","1589477375","DK" +"1589477376","1589510143","RS" +"1589510144","1589542911","RU" +"1589542912","1589575679","BG" +"1589575680","1589608447","RU" +"1589608448","1589612543","DK" +"1589612544","1589620735","SE" +"1589620736","1589641215","DK" +"1589641216","1590034431","GB" +"1590034432","1590036479","RU" +"1590036480","1590038527","GB" +"1590038528","1590040575","RU" +"1590040576","1590042623","NL" +"1590042624","1590048767","RU" +"1590048768","1590050815","DE" +"1590050816","1590052863","SE" +"1590052864","1590054911","IT" +"1590054912","1590056959","GB" +"1590056960","1590059007","ES" +"1590059008","1590060223","IT" +"1590060224","1590060255","CH" +"1590060256","1590060799","IT" +"1590060800","1590061055","US" +"1590061056","1590063103","RU" +"1590063104","1590065151","CZ" +"1590065152","1590067199","IE" +"1590067200","1590069247","RU" +"1590069248","1590071295","AT" +"1590071296","1590073343","FR" +"1590073344","1590075391","NL" +"1590075392","1590077247","BE" +"1590077248","1590077279","NL" +"1590077280","1590077439","BE" +"1590077440","1590079487","GB" +"1590079488","1590081535","FR" +"1590081536","1590083583","GB" +"1590083584","1590085631","RU" +"1590085632","1590087679","FR" +"1590087680","1590089727","IT" +"1590089728","1590091775","RU" +"1590091776","1590093823","CZ" +"1590093824","1590095871","RU" +"1590095872","1590097919","CZ" +"1590097920","1590099967","CH" +"1590099968","1590102015","RU" +"1590102016","1590104063","IT" +"1590104064","1590106111","TJ" +"1590106112","1590108159","GB" +"1590108160","1590110207","TR" +"1590110208","1590112255","CZ" +"1590112256","1590114303","HU" +"1590114304","1590116351","FI" +"1590116352","1590120447","RU" +"1590120448","1590122495","IT" +"1590122496","1590124543","DE" +"1590124544","1590126591","CH" +"1590126592","1590128639","RU" +"1590128640","1590130687","FI" +"1590130688","1590132735","FR" +"1590132736","1590132991","DE" +"1590132992","1590133567","GB" +"1590133568","1590133599","DE" +"1590133600","1590134783","GB" +"1590134784","1590136831","ES" +"1590136832","1590138879","GB" +"1590138880","1590140927","FR" +"1590140928","1590142975","UA" +"1590142976","1590145023","AT" +"1590145024","1590147071","HU" +"1590147072","1590149119","GB" +"1590149120","1590151167","CZ" +"1590151168","1590153215","TR" +"1590153216","1590157311","RU" +"1590157312","1590158335","IE" +"1590158336","1590161407","GB" +"1590161408","1590163455","DE" +"1590163456","1590165503","NL" +"1590165504","1590176643","AE" +"1590176644","1590176644","US" +"1590176645","1590176831","AE" +"1590176832","1590176863","A2" +"1590176864","1590689791","AE" +"1590689792","1591214079","NL" +"1591214080","1591738367","DE" +"1591738368","1592000511","BE" +"1592000512","1592004607","ES" +"1592004608","1592008703","AM" +"1592008704","1592012799","GB" +"1592012800","1592016895","CH" +"1592016896","1592020991","GB" +"1592020992","1592025087","SK" +"1592025088","1592029183","DE" +"1592029184","1592033279","RU" +"1592033280","1592037375","NL" +"1592037376","1592041471","CH" +"1592041472","1592045567","RU" +"1592045568","1592049663","FR" +"1592049664","1592053759","RU" +"1592053760","1592054271","NL" +"1592054272","1592054527","AE" +"1592054528","1592054655","NL" +"1592054656","1592054783","US" +"1592054784","1592055295","AE" +"1592055296","1592057623","NL" +"1592057624","1592057631","IN" +"1592057632","1592057727","NL" +"1592057728","1592057735","IN" +"1592057736","1592057855","NL" +"1592057856","1592061951","RS" +"1592061952","1592066047","RU" +"1592066048","1592067583","US" +"1592067584","1592067711","NO" +"1592067712","1592067839","CY" +"1592067840","1592068095","NL" +"1592068096","1592068607","US" +"1592068608","1592068863","CY" +"1592068864","1592068895","US" +"1592068896","1592068927","NL" +"1592068928","1592068959","US" +"1592068960","1592068991","CY" +"1592068992","1592069087","US" +"1592069088","1592069247","CY" +"1592069248","1592069375","RU" +"1592069376","1592069407","US" +"1592069408","1592069631","CY" +"1592069632","1592069711","NL" +"1592069712","1592069727","CY" +"1592069728","1592069759","NL" +"1592069760","1592069839","CY" +"1592069840","1592069887","NL" +"1592069888","1592074239","RU" +"1592074240","1592078335","SK" +"1592078336","1592082431","NL" +"1592082432","1592086527","GB" +"1592086528","1592087079","CZ" +"1592087080","1592087087","PL" +"1592087088","1592087295","CZ" +"1592087296","1592088191","PL" +"1592088192","1592090623","CZ" +"1592090624","1592094719","RU" +"1592094720","1592098815","RS" +"1592098816","1592102911","GB" +"1592102912","1592107007","DE" +"1592107008","1592111103","GB" +"1592111104","1592115199","DE" +"1592115200","1592119295","ES" +"1592119296","1592123391","PL" +"1592123392","1592135679","RU" +"1592135680","1592139775","PL" +"1592139776","1592143871","RU" +"1592143872","1592147967","DE" +"1592147968","1592152063","IT" +"1592152064","1592156159","IL" +"1592156160","1592160255","IE" +"1592160256","1592168447","RU" +"1592168448","1592172543","CZ" +"1592172544","1592176639","RU" +"1592176640","1592180735","RS" +"1592180736","1592184831","UA" +"1592184832","1592188927","CH" +"1592188928","1592193023","UZ" +"1592193024","1592197119","RU" +"1592197120","1592201215","PL" +"1592201216","1592205311","RU" +"1592205312","1592209407","UA" +"1592209408","1592213503","PL" +"1592213504","1592217599","UA" +"1592217600","1592221695","CH" +"1592221696","1592225791","DK" +"1592225792","1592242175","RU" +"1592242176","1592246271","UA" +"1592246272","1592254463","RU" +"1592254464","1592258559","PL" +"1592258560","1592262655","NL" +"1592262656","1592270847","RU" +"1592270848","1592272895","PL" +"1592272896","1592281087","RU" +"1592281088","1592283135","UA" +"1592283136","1592285183","GR" +"1592285184","1592287231","RU" +"1592287232","1592289279","RO" +"1592289280","1592291327","RU" +"1592291328","1592293375","NL" +"1592293376","1592295423","LT" +"1592295424","1592299519","RU" +"1592299520","1592303615","PL" +"1592303616","1592305663","NL" +"1592305664","1592307711","IR" +"1592307712","1592309759","UA" +"1592309760","1592311807","RU" +"1592311808","1592313855","DE" +"1592313856","1592315903","RU" +"1592315904","1592317951","UA" +"1592317952","1592319999","PL" +"1592320000","1592322047","LT" +"1592322048","1592324095","RU" +"1592324096","1592326143","KZ" +"1592326144","1592328191","UA" +"1592328192","1592393727","RU" +"1592393728","1592459263","SE" +"1592459264","1592524799","TR" +"1592524800","1592557567","GB" +"1592557568","1592590335","BG" +"1592590336","1592623103","FI" +"1592623104","1592655871","RU" +"1592655872","1592786943","FR" +"1592786944","1592803327","PL" +"1592803328","1592819711","RU" +"1592819712","1592836095","UA" +"1592836096","1592852479","GE" +"1592852480","1592868863","RU" +"1592868864","1592885247","CZ" +"1592885248","1592901631","IR" +"1592901632","1592934399","RU" +"1592934400","1592950783","CZ" +"1592950784","1592967167","RU" +"1592967168","1592983551","LU" +"1592983552","1592999935","RU" +"1592999936","1593016319","MD" +"1593016320","1593049087","RU" +"1593049088","1593065471","UA" +"1593065472","1593081855","LT" +"1593081856","1593098239","UA" +"1593098240","1593114623","CH" +"1593114624","1593122815","DK" +"1593122816","1593131007","SE" +"1593131008","1593147135","GB" +"1593147136","1593147391","EU" +"1593147392","1593163775","RU" +"1593163776","1593180159","AT" +"1593180160","1593196543","NO" +"1593196544","1593202687","SE" +"1593202688","1593202815","NO" +"1593202816","1593203455","SE" +"1593203456","1593203487","NO" +"1593203488","1593204087","SE" +"1593204088","1593204095","FI" +"1593204096","1593204159","SE" +"1593204160","1593204223","FI" +"1593204224","1593205567","SE" +"1593205568","1593205631","DK" +"1593205632","1593206083","SE" +"1593206084","1593206095","DK" +"1593206096","1593206103","FI" +"1593206104","1593206111","GB" +"1593206112","1593206223","SE" +"1593206224","1593206231","FI" +"1593206232","1593209151","SE" +"1593209152","1593209155","GR" +"1593209156","1593209159","HU" +"1593209160","1593209163","FI" +"1593209164","1593209167","CH" +"1593209168","1593210879","SE" +"1593210880","1593211391","NO" +"1593211392","1593212415","SE" +"1593212416","1593212927","NO" +"1593212928","1593229311","PL" +"1593229312","1593245695","EE" +"1593245696","1593247743","NL" +"1593247744","1593249791","IT" +"1593249792","1593251839","RU" +"1593251840","1593252159","FR" +"1593252160","1593252192","GB" +"1593252193","1593253887","FR" +"1593253888","1593255935","CZ" +"1593255936","1593257983","DE" +"1593257984","1593260031","IE" +"1593260032","1593262079","RU" +"1593262080","1593264127","KZ" +"1593264128","1593266175","NL" +"1593266176","1593268223","GB" +"1593268224","1593270271","HU" +"1593270272","1593272319","GB" +"1593272320","1593274367","RU" +"1593274368","1593276415","DE" +"1593276416","1593278463","RU" +"1593278464","1593280511","KZ" +"1593280512","1593282559","EE" +"1593282560","1593284607","AT" +"1593284608","1593286655","GB" +"1593286656","1593288703","FR" +"1593288704","1593290751","SE" +"1593290752","1593292799","FR" +"1593292800","1593294847","IT" +"1593294848","1593296895","NL" +"1593296896","1593298943","RS" +"1593298944","1593300991","RU" +"1593300992","1593303039","CH" +"1593303040","1593305087","UA" +"1593305088","1593307135","FR" +"1593307136","1593311231","RU" +"1593311232","1593343999","UA" +"1593344000","1593376767","HU" +"1593376768","1593409535","JO" +"1593409536","1593442303","DE" +"1593442304","1593475071","BA" +"1593475072","1593540607","RU" +"1593540608","1593573375","PL" +"1593573376","1593606143","LU" +"1593606144","1593638911","SY" +"1593638912","1593671679","RU" +"1593671680","1593704447","HR" +"1593704448","1593737215","SE" +"1593737216","1593769983","PL" +"1593769984","1593802751","RU" +"1593802752","1593835519","SE" +"1593835520","1594884095","TR" +"1594884096","1595408383","ES" +"1595408384","1595998207","RU" +"1595998208","1596063743","DE" +"1596063744","1596129279","NO" +"1596129280","1596194815","IL" +"1596194816","1596260351","NL" +"1596260352","1596325887","RU" +"1596325888","1596391423","IR" +"1596391424","1596456959","ES" +"1596456960","1596588031","PL" +"1596588032","1596719103","BG" +"1596719104","1596850175","IE" +"1596850176","1596981247","CZ" +"1596981248","1597243391","PL" +"1597243392","1597505535","RU" +"1597505536","1597767679","KZ" +"1597767680","1598029823","ES" +"1598029824","1598062591","RO" +"1598062592","1598095359","RU" +"1598095360","1598128127","MD" +"1598128128","1598160895","TR" +"1598160896","1598193663","KW" +"1598193664","1598226431","RU" +"1598226432","1598259199","UA" +"1598259200","1598291967","RU" +"1598291968","1598324735","LV" +"1598324736","1598357503","RU" +"1598357504","1598390271","PT" +"1598390272","1598423039","UA" +"1598423040","1598455807","RU" +"1598455808","1598488575","TR" +"1598488576","1598685183","RU" +"1598685184","1598816255","IT" +"1598816256","1598947327","RO" +"1598947328","1599078399","RU" +"1599078400","1599094783","SE" +"1599094784","1599111167","RU" +"1599111168","1599127551","IR" +"1599127552","1599129007","CZ" +"1599129008","1599129011","EE" +"1599129012","1599133695","CZ" +"1599133696","1599133823","SK" +"1599133824","1599137055","CZ" +"1599137056","1599137071","SK" +"1599137072","1599143935","CZ" +"1599143936","1599160319","UA" +"1599160320","1599176703","IR" +"1599176704","1599188991","FR" +"1599188992","1599189375","DE" +"1599189376","1599193087","FR" +"1599193088","1599209471","RU" +"1599209472","1599242239","IR" +"1599242240","1599258623","CZ" +"1599258624","1599324159","RU" +"1599324160","1599340543","IE" +"1599340544","1599356927","RU" +"1599356928","1599373311","BH" +"1599373312","1599438847","RU" +"1599438848","1599455231","RS" +"1599455232","1599471615","CZ" +"1599471616","1599487999","MK" +"1599488000","1599504383","IL" +"1599504384","1599520767","AZ" +"1599520768","1599537151","RU" +"1599537152","1599553535","BG" +"1599553536","1599561727","KG" +"1599561728","1599565823","GB" +"1599565824","1599567871","SY" +"1599567872","1599569919","IT" +"1599569920","1599586303","SI" +"1599586304","1599602687","BG" +"1599602688","1599864831","DE" +"1599864832","1600126975","PT" +"1600126976","1600389119","NL" +"1600389120","1600397311","EU" +"1600397312","1600401407","DE" +"1600401408","1600442367","EU" +"1600442368","1600446463","DE" +"1600446464","1600453119","EU" +"1600453120","1600453631","IT" +"1600453632","1600456703","EU" +"1600456704","1600457727","DE" +"1600457728","1600520191","EU" +"1600520192","1600651263","SK" +"1600651264","1600684031","GE" +"1600684032","1600749567","RU" +"1600749568","1600782335","SK" +"1600782336","1600880639","RU" +"1600880640","1600913407","AL" +"1600913408","1600946175","PL" +"1600946176","1600963167","RU" +"1600963168","1600963175","UA" +"1600963176","1600963183","RU" +"1600963184","1600963191","BY" +"1600963192","1600963199","KZ" +"1600963200","1600978943","RU" +"1600978944","1601011711","SE" +"1601011712","1601044479","UA" +"1601044480","1601077247","RU" +"1601077248","1601110015","IT" +"1601110016","1601142783","BG" +"1601142784","1601175551","UA" +"1601175552","1601699839","DE" +"1601699840","1602224127","ES" +"1602224128","1602226175","NL" +"1602226176","1602228223","GB" +"1602228224","1602230270","FR" +"1602230271","1602230271","DE" +"1602230272","1602232319","DK" +"1602232320","1602234367","CH" +"1602234368","1602234591","FR" +"1602234592","1602234623","GB" +"1602234624","1602234703","FR" +"1602234704","1602234848","GB" +"1602234849","1602234895","FR" +"1602234896","1602234903","GB" +"1602234904","1602234943","FR" +"1602234944","1602235135","GB" +"1602235136","1602235263","FR" +"1602235264","1602235647","GB" +"1602235648","1602235775","FR" +"1602235776","1602235903","GB" +"1602235904","1602235967","ES" +"1602235968","1602238463","GB" +"1602238464","1602240511","TR" +"1602240512","1602242559","BY" +"1602242560","1602244031","FR" +"1602244032","1602244035","GB" +"1602244036","1602244039","ES" +"1602244040","1602244607","FR" +"1602244608","1602246655","CH" +"1602246656","1602248703","NL" +"1602248704","1602250751","BE" +"1602250752","1602252799","NO" +"1602252800","1602254847","SE" +"1602254848","1602255103","PT" +"1602255104","1602255359","HU" +"1602255360","1602255615","US" +"1602255616","1602255871","PT" +"1602255872","1602256895","HU" +"1602256896","1602258943","GB" +"1602258944","1602260991","RU" +"1602260992","1602263039","FR" +"1602263040","1602265087","ES" +"1602265088","1602267135","RU" +"1602267136","1602267199","DE" +"1602267200","1602267263","FR" +"1602267264","1602267327","GB" +"1602267328","1602267391","ES" +"1602267392","1602269183","RO" +"1602269184","1602271231","RU" +"1602271232","1602273279","MK" +"1602273280","1602273535","FR" +"1602273536","1602273791","GB" +"1602273792","1602274559","IN" +"1602274560","1602274815","IE" +"1602274816","1602275071","GB" +"1602275072","1602275679","DE" +"1602275680","1602275695","CA" +"1602275696","1602279423","DE" +"1602279424","1602281471","GB" +"1602281472","1602283519","RU" +"1602283520","1602285567","HR" +"1602285568","1602287615","RU" +"1602287616","1602289663","DE" +"1602289664","1602291711","LB" +"1602291712","1602293759","SA" +"1602293760","1602295807","GB" +"1602295808","1602297855","NL" +"1602297856","1602298367","IL" +"1602298368","1602298431","MT" +"1602298432","1602298879","IL" +"1602298880","1602299391","MT" +"1602299392","1602299903","GB" +"1602299904","1602301951","GR" +"1602301952","1602303999","DE" +"1602304000","1602306047","RU" +"1602306048","1602308095","GB" +"1602308096","1602310143","RU" +"1602310144","1602312191","NL" +"1602312192","1602314239","RU" +"1602314240","1602316287","CZ" +"1602316288","1602318335","GB" +"1602318336","1602320383","ES" +"1602320384","1602322687","NL" +"1602322688","1602322703","IE" +"1602322704","1602324479","NL" +"1602324480","1602328575","RU" +"1602328576","1602330623","ES" +"1602330624","1602336767","RU" +"1602336768","1602338815","GB" +"1602338816","1602340863","EE" +"1602340864","1602342911","AT" +"1602342912","1602344959","DE" +"1602344960","1602347007","ES" +"1602347008","1602349055","PL" +"1602349056","1602351103","RU" +"1602351104","1602353151","CZ" +"1602353152","1602355199","ES" +"1602355200","1602357247","GB" +"1602357248","1602357503","FR" +"1602357504","1602357759","A1" +"1602357760","1602359295","FR" +"1602359296","1602361343","DE" +"1602361344","1602363391","FI" +"1602363392","1602365439","LV" +"1602365440","1602367487","BE" +"1602367488","1602369535","ES" +"1602369536","1602371583","IR" +"1602371584","1602373631","SE" +"1602373632","1602375679","GB" +"1602375680","1602377727","BY" +"1602377728","1602379775","PS" +"1602379776","1602383871","GB" +"1602383872","1602383872","EU" +"1602383873","1602383873","DE" +"1602383874","1602384895","EU" +"1602384896","1602385151","DE" +"1602385152","1602385919","EU" +"1602385920","1602387967","AT" +"1602387968","1602390015","RU" +"1602390016","1602392063","IT" +"1602392064","1602394111","GB" +"1602394112","1602396159","FR" +"1602396160","1602398207","DE" +"1602398208","1602400255","TR" +"1602400256","1602402303","RU" +"1602402304","1602404351","LU" +"1602404352","1602406399","GB" +"1602406400","1602408447","DE" +"1602408448","1602410495","DK" +"1602410496","1602412543","NO" +"1602412544","1602414591","GB" +"1602414592","1602416639","NL" +"1602416640","1602418687","IR" +"1602418688","1602420735","DE" +"1602420736","1602424831","RU" +"1602424832","1602426879","FR" +"1602426880","1602428927","RU" +"1602428928","1602430975","PL" +"1602430976","1602433023","IT" +"1602433024","1602433471","HU" +"1602433472","1602433479","CY" +"1602433480","1602435071","HU" +"1602435072","1602437119","IT" +"1602437120","1602439167","GB" +"1602439168","1602441215","RU" +"1602441216","1602443263","GB" +"1602443264","1602445311","RU" +"1602445312","1602447359","DE" +"1602447360","1602447871","GB" +"1602447872","1602448383","DE" +"1602448384","1602448895","NL" +"1602448896","1602449407","GB" +"1602449408","1602451455","LV" +"1602451456","1602453503","DE" +"1602453504","1602455551","SK" +"1602455552","1602455690","FR" +"1602455691","1602455691","BE" +"1602455692","1602456015","FR" +"1602456016","1602456025","ES" +"1602456026","1602456026","DE" +"1602456027","1602456027","NL" +"1602456028","1602456028","IT" +"1602456029","1602456029","ES" +"1602456030","1602456030","PT" +"1602456031","1602456031","ES" +"1602456032","1602456175","FR" +"1602456176","1602456183","ES" +"1602456184","1602457599","FR" +"1602457600","1602459647","RU" +"1602459648","1602461695","GB" +"1602461696","1602465791","ES" +"1602465792","1602467839","RU" +"1602467840","1602469887","GI" +"1602469888","1602471935","AT" +"1602471936","1602473983","SE" +"1602473984","1602476031","RU" +"1602476032","1602478079","GB" +"1602478080","1602480127","RU" +"1602480128","1602482175","MT" +"1602482176","1602484223","FR" +"1602484224","1602486271","GB" +"1602486272","1602748415","UA" +"1602748416","1602781183","PT" +"1602781184","1602813951","FR" +"1602813952","1602846719","RU" +"1602846720","1602879487","GE" +"1602879488","1602895871","FR" +"1602895872","1602896127","MQ" +"1602896128","1602912255","FR" +"1602912256","1603010559","RU" +"1603010560","1603014655","FR" +"1603014656","1603018751","RU" +"1603018752","1603022847","HU" +"1603022848","1603026943","GB" +"1603026944","1603031039","SE" +"1603031040","1603035135","RU" +"1603035136","1603039231","SY" +"1603039232","1603043327","RS" +"1603043328","1603047423","IT" +"1603047424","1603051519","RU" +"1603051520","1603055615","JO" +"1603055616","1603059711","SE" +"1603059712","1603063807","AM" +"1603063808","1603067903","BG" +"1603067904","1603067927","DE" +"1603067928","1603071999","GB" +"1603072000","1603076095","CZ" +"1603076096","1603080191","RU" +"1603080192","1603080447","DE" +"1603080448","1603080703","FR" +"1603080704","1603082751","DE" +"1603082752","1603083007","ES" +"1603083008","1603083263","UA" +"1603083264","1603084031","DE" +"1603084032","1603086847","IT" +"1603086848","1603087103","DE" +"1603087104","1603088383","IT" +"1603088384","1603092479","LB" +"1603092480","1603100671","NO" +"1603100672","1603108863","FR" +"1603108864","1603112959","KZ" +"1603112960","1603121151","GB" +"1603121152","1603129343","RU" +"1603129344","1603133439","JO" +"1603133440","1603137535","RU" +"1603137536","1603141631","KW" +"1603141632","1603145727","ES" +"1603145728","1603146031","NL" +"1603146032","1603146063","CY" +"1603146064","1603146239","NL" +"1603146240","1603146751","US" +"1603146752","1603147007","NL" +"1603147008","1603147263","US" +"1603147264","1603147391","CY" +"1603147392","1603147519","NL" +"1603147520","1603147775","IL" +"1603147776","1603148031","US" +"1603148032","1603148287","IL" +"1603148288","1603148799","NL" +"1603148800","1603149311","IL" +"1603149312","1603149567","NL" +"1603149568","1603149823","US" +"1603149824","1603153919","RU" +"1603153920","1603158015","NL" +"1603158016","1603159167","DE" +"1603159168","1603159183","NL" +"1603159184","1603159199","FR" +"1603159200","1603159487","DE" +"1603159488","1603159519","AT" +"1603159520","1603159535","DE" +"1603159536","1603159551","GB" +"1603159552","1603159823","DE" +"1603159824","1603159871","CH" +"1603159872","1603160079","DE" +"1603160080","1603160095","NL" +"1603160096","1603160111","GB" +"1603160112","1603160335","DE" +"1603160336","1603160351","GB" +"1603160352","1603161007","DE" +"1603161008","1603161023","GB" +"1603161024","1603161103","DE" +"1603161104","1603161119","GB" +"1603161120","1603161135","AT" +"1603161136","1603161151","GB" +"1603161152","1603161567","DE" +"1603161568","1603161599","FR" +"1603161600","1603162111","DE" +"1603162112","1603166207","TJ" +"1603166208","1603166751","NL" +"1603166752","1603166767","MT" +"1603166768","1603166815","US" +"1603166816","1603166847","VE" +"1603166848","1603166911","NL" +"1603166912","1603166943","VE" +"1603166944","1603166959","NL" +"1603166960","1603166975","US" +"1603166976","1603167135","NL" +"1603167136","1603167167","JP" +"1603167168","1603167231","NL" +"1603167232","1603167743","BE" +"1603167744","1603167871","NO" +"1603167872","1603169919","NL" +"1603169920","1603169983","US" +"1603169984","1603170047","SE" +"1603170048","1603170303","NL" +"1603170304","1603174399","IE" +"1603174400","1603178495","TR" +"1603178496","1603182591","GB" +"1603182592","1603186687","FR" +"1603186688","1603190783","IT" +"1603190784","1603194879","RU" +"1603194880","1603198975","IT" +"1603198976","1603203071","IR" +"1603203072","1603207167","PL" +"1603207168","1603215359","RU" +"1603215360","1603217167","DE" +"1603217168","1603217183","US" +"1603217184","1603219455","DE" +"1603219456","1603220495","CH" +"1603220496","1603220503","LI" +"1603220504","1603223551","CH" +"1603223552","1603223615","FR" +"1603223616","1603223631","GB" +"1603223632","1603223704","FR" +"1603223705","1603223711","GB" +"1603223712","1603223936","FR" +"1603223937","1603223951","GB" +"1603223952","1603224319","FR" +"1603224320","1603224335","GB" +"1603224336","1603224351","BE" +"1603224352","1603224367","NL" +"1603224368","1603224383","DE" +"1603224384","1603224399","CH" +"1603224400","1603224415","IT" +"1603224416","1603224431","ES" +"1603224432","1603224447","US" +"1603224448","1603224463","MX" +"1603224464","1603224575","GB" +"1603224576","1603224831","FR" +"1603224832","1603224847","ES" +"1603224848","1603224895","FR" +"1603224896","1603224911","GB" +"1603224912","1603225007","FR" +"1603225008","1603225023","MX" +"1603225024","1603225243","FR" +"1603225244","1603225247","GB" +"1603225248","1603225283","FR" +"1603225284","1603225287","GB" +"1603225288","1603225299","FR" +"1603225300","1603225303","GB" +"1603225304","1603225327","FR" +"1603225328","1603225343","GB" +"1603225344","1603225599","FR" +"1603225600","1603225607","ES" +"1603225608","1603225615","GB" +"1603225616","1603225623","DE" +"1603225624","1603225631","IT" +"1603225632","1603225639","US" +"1603225640","1603225647","CN" +"1603225648","1603226111","FR" +"1603226112","1603226623","GB" +"1603226624","1603227647","FR" +"1603227648","1603227787","AT" +"1603227788","1603227799","DE" +"1603227800","1603227843","AT" +"1603227844","1603227847","DE" +"1603227848","1603227931","AT" +"1603227932","1603227935","IT" +"1603227936","1603227939","CZ" +"1603227940","1603227947","CH" +"1603227948","1603227971","IT" +"1603227972","1603227983","AT" +"1603227984","1603227991","DE" +"1603227992","1603228171","AT" +"1603228172","1603228175","FR" +"1603228176","1603228287","AT" +"1603228288","1603228295","IT" +"1603228296","1603228399","AT" +"1603228400","1603228403","CH" +"1603228404","1603228407","DE" +"1603228408","1603228415","AT" +"1603228416","1603228799","DE" +"1603228800","1603228883","AT" +"1603228884","1603228887","DE" +"1603228888","1603228927","AT" +"1603228928","1603228991","DE" +"1603228992","1603229047","AT" +"1603229048","1603229055","SI" +"1603229056","1603231743","AT" +"1603231744","1603235839","IT" +"1603235840","1603239935","RU" +"1603239936","1603244031","CZ" +"1603244032","1603248127","SI" +"1603248128","1603252223","DE" +"1603252224","1603256319","RU" +"1603256320","1603260415","SE" +"1603260416","1603264511","RU" +"1603264512","1603268607","AT" +"1603268608","1603272703","PL" +"1603272704","1603796991","GB" +"1603796992","1603813375","RU" +"1603813376","1603829759","CH" +"1603829760","1603846143","NL" +"1603846144","1603862527","GB" +"1603862528","1603878911","EE" +"1603878912","1603895295","MD" +"1603895296","1603928063","RU" +"1603928064","1603944447","DK" +"1603944448","1603977215","RU" +"1603977216","1603979295","GB" +"1603979296","1603979327","US" +"1603979328","1603980463","GB" +"1603980464","1603980479","CH" +"1603980480","1603980863","GB" +"1603980864","1603980927","ID" +"1603980928","1603982655","GB" +"1603982656","1603982687","DK" +"1603982688","1603982719","AN" +"1603982720","1603982783","GB" +"1603982784","1603982847","AN" +"1603982848","1603984895","GB" +"1603984896","1603985151","PT" +"1603985152","1603985279","GB" +"1603985280","1603985407","BR" +"1603985408","1603990015","GB" +"1603990016","1603990271","GR" +"1603990272","1603990527","SA" +"1603990528","1603992319","GB" +"1603992320","1603992575","US" +"1603992576","1603993599","GB" +"1603993600","1604009983","ME" +"1604009984","1604026367","PL" +"1604026368","1604042751","NL" +"1604042752","1604059135","SE" +"1604059136","1604075519","MK" +"1604075520","1604091903","RU" +"1604091904","1604108287","BA" +"1604108288","1604117199","DE" +"1604117200","1604117215","GR" +"1604117216","1604141055","DE" +"1604141056","1604157439","RO" +"1604157440","1604190207","FR" +"1604190208","1604206591","UA" +"1604206592","1604222975","PL" +"1604222976","1604239359","BG" +"1604239360","1604255743","RU" +"1604255744","1604272127","SY" +"1604272128","1604288511","IQ" +"1604288512","1604304895","RU" +"1604304896","1604321279","SI" +"1604321280","1604386815","PL" +"1604386816","1604452351","RU" +"1604452352","1604517887","RO" +"1604517888","1604583423","RU" +"1604583424","1604648959","UA" +"1604648960","1604714495","RU" +"1604714496","1604780031","DK" +"1604780032","1604845567","RU" +"1604845568","1604853759","FR" +"1604853760","1604861951","HU" +"1604861952","1604870143","RS" +"1604870144","1604878335","HR" +"1604878336","1604886655","DE" +"1604886656","1604886783","RU" +"1604886784","1604887039","DE" +"1604887040","1604887295","GB" +"1604887296","1604888063","DE" +"1604888064","1604889599","TR" +"1604889600","1604890111","DE" +"1604890112","1604890367","RU" +"1604890368","1604890879","TR" +"1604890880","1604891967","DE" +"1604891968","1604892159","RU" +"1604892160","1604892927","DE" +"1604892928","1604893183","HK" +"1604893184","1604893951","DE" +"1604893952","1604894463","TR" +"1604894464","1604894719","DE" +"1604894720","1604895487","CZ" +"1604895488","1604895491","SK" +"1604895492","1604895607","CZ" +"1604895608","1604895611","SK" +"1604895612","1604900351","CZ" +"1604900352","1604900383","SC" +"1604900384","1604901311","CZ" +"1604901312","1604901375","SC" +"1604901376","1604901631","CZ" +"1604901632","1604901887","SK" +"1604901888","1604901911","CZ" +"1604901912","1604901935","SK" +"1604901936","1604901983","CZ" +"1604901984","1604902142","SK" +"1604902143","1604902399","CZ" +"1604902400","1604902911","SK" +"1604902912","1604911103","BG" +"1604911104","1604919295","UA" +"1604919296","1604927487","NO" +"1604927488","1604935679","IT" +"1604935680","1604952063","RU" +"1604952064","1604958719","DE" +"1604958720","1604959231","RU" +"1604959232","1604959743","DE" +"1604959744","1604960255","RU" +"1604960256","1604968447","BG" +"1604968448","1604976639","ES" +"1604976640","1604993023","FR" +"1604993024","1605001215","NL" +"1605001216","1605025791","RU" +"1605025792","1605033983","IQ" +"1605033984","1605042175","SK" +"1605042176","1605050367","RU" +"1605050368","1605058559","IT" +"1605058560","1605066751","HU" +"1605066752","1605074943","PL" +"1605074944","1605083135","FR" +"1605083136","1605091327","BE" +"1605091328","1605099519","PL" +"1605099520","1605107711","RU" +"1605107712","1605109071","GB" +"1605109072","1605109079","NL" +"1605109080","1605109255","GB" +"1605109256","1605109263","IT" +"1605109264","1605109431","GB" +"1605109432","1605109439","IT" +"1605109440","1605109719","GB" +"1605109720","1605109727","IT" +"1605109728","1605111919","GB" +"1605111920","1605111927","IT" +"1605111928","1605112607","GB" +"1605112608","1605112615","IT" +"1605112616","1605112959","GB" +"1605112960","1605112967","IT" +"1605112968","1605113383","GB" +"1605113384","1605113391","IT" +"1605113392","1605114399","GB" +"1605114400","1605114407","IT" +"1605114408","1605115007","GB" +"1605115008","1605115015","IT" +"1605115016","1605115231","GB" +"1605115232","1605115239","IT" +"1605115240","1605115671","GB" +"1605115672","1605115679","IT" +"1605115680","1605115783","GB" +"1605115784","1605115791","IT" +"1605115792","1605115903","GB" +"1605115904","1605124095","RU" +"1605124096","1605124607","US" +"1605124608","1605124639","GB" +"1605124640","1605124735","US" +"1605124736","1605124863","GB" +"1605124864","1605124895","US" +"1605124896","1605124927","GB" +"1605124928","1605124959","US" +"1605124960","1605125119","GB" +"1605125120","1605125247","US" +"1605125248","1605125263","GB" +"1605125264","1605125279","DE" +"1605125280","1605125335","GB" +"1605125336","1605125343","US" +"1605125344","1605125375","GB" +"1605125376","1605125903","US" +"1605125904","1605125904","GB" +"1605125905","1605125920","DE" +"1605125921","1605126015","GB" +"1605126016","1605126911","US" +"1605126912","1605127167","EU" +"1605127168","1605127679","US" +"1605127680","1605127935","GB" +"1605127936","1605128703","US" +"1605128704","1605129215","GB" +"1605129216","1605129727","US" +"1605129728","1605130239","GB" +"1605130240","1605130271","US" +"1605130272","1605130295","GB" +"1605130296","1605130303","US" +"1605130304","1605130367","GB" +"1605130368","1605130399","US" +"1605130400","1605130495","GB" +"1605130496","1605131007","US" +"1605131008","1605131263","GB" +"1605131264","1605132095","US" +"1605132096","1605132287","GB" +"1605132288","1605148671","RU" +"1605148672","1605156863","PT" +"1605156864","1605165055","JO" +"1605165056","1605169411","GB" +"1605169412","1605169412","DE" +"1605169413","1605173247","GB" +"1605173248","1605181439","TR" +"1605181440","1605189631","LT" +"1605189632","1605189663","SK" +"1605189664","1605189759","CZ" +"1605189760","1605189887","SK" +"1605189888","1605197823","CZ" +"1605197824","1605206015","DE" +"1605206016","1605214207","RU" +"1605214208","1605222399","TR" +"1605222400","1605230591","CZ" +"1605230592","1605238783","TR" +"1605238784","1605246975","IT" +"1605246976","1605255167","PL" +"1605255168","1605257215","RU" +"1605257216","1605259263","FR" +"1605259264","1605259519","DE" +"1605259520","1605259583","CH" +"1605259584","1605261311","DE" +"1605261312","1605271551","RU" +"1605271552","1605279743","DE" +"1605279744","1605287935","FR" +"1605287936","1605296127","RU" +"1605296128","1605304319","CH" +"1605304320","1605312511","PL" +"1605312512","1605320703","IL" +"1605320704","1605328895","KW" +"1605328896","1605337087","FI" +"1605337088","1605345279","GB" +"1605345280","1605353471","FR" +"1605353472","1605361663","GB" +"1605361664","1605369855","RU" +"1605369856","1605402623","FR" +"1605402624","1605435391","SI" +"1605435392","1605468159","GB" +"1605468160","1605500927","RO" +"1605500928","1605533695","PL" +"1605533696","1605566463","HR" +"1605566464","1605599231","RU" +"1605599232","1605631999","GR" +"1605632000","1605664767","RS" +"1605664768","1605697535","MK" +"1605697536","1605795839","RU" +"1605795840","1605828607","BE" +"1605828608","1605861375","RU" +"1605861376","1605894143","TR" +"1605894144","1606156287","RO" +"1606156288","1606418431","RU" +"1606418432","1606636287","SE" +"1606636288","1606636543","GB" +"1606636544","1607467007","SE" +"1607467008","1607532543","DE" +"1607532544","1607569407","SE" +"1607569408","1607572479","DK" +"1607572480","1607575551","SE" +"1607575552","1607577599","DK" +"1607577600","1607581695","SE" +"1607581696","1607583743","DK" +"1607583744","1607585791","SE" +"1607585792","1607598079","DK" +"1607598080","1607598335","IT" +"1607598336","1607598591","EU" +"1607598592","1607606015","IT" +"1607606016","1607606271","FR" +"1607606272","1607609343","IT" +"1607609344","1607609599","EU" +"1607609600","1607610367","IT" +"1607610368","1607612415","IE" +"1607612416","1607614463","A2" +"1607614464","1607616511","FR" +"1607616512","1607618559","A2" +"1607618560","1607622655","GB" +"1607622656","1607625983","A2" +"1607625984","1607626239","EU" +"1607626240","1607628543","A2" +"1607628544","1607628799","EU" +"1607628800","1607630847","A2" +"1607630848","1607633919","IE" +"1607633920","1607636991","A2" +"1607636992","1607639039","IE" +"1607639040","1607647231","EU" +"1607647232","1607651327","DE" +"1607651328","1607655423","FR" +"1607655424","1607663615","A2" +"1607663616","1607695559","NL" +"1607695560","1607695560","A1" +"1607695561","1607729151","NL" +"1607729152","1607761919","EG" +"1607761920","1607766015","SY" +"1607766016","1607794687","EG" +"1607794688","1607860223","RU" +"1607860224","1607892991","ES" +"1607892992","1607893055","GB" +"1607893056","1607893119","DE" +"1607893120","1607893188","DK" +"1607893189","1607893247","IT" +"1607893248","1607893311","AT" +"1607893312","1607893375","FR" +"1607893376","1607893443","SE" +"1607893444","1607893503","NL" +"1607893504","1607893567","BE" +"1607893568","1607893631","IE" +"1607893632","1607925759","ES" +"1607925760","1607926783","RU" +"1607926784","1607927807","NL" +"1607927808","1607929855","RU" +"1607929856","1607930879","SE" +"1607930880","1607933951","PL" +"1607933952","1607934975","DE" +"1607934976","1607935999","UA" +"1607937024","1607938047","LV" +"1607938048","1607939071","UA" +"1607939072","1607940095","PL" +"1607940096","1607941119","RU" +"1607941120","1607942143","ES" +"1607942144","1607944191","RU" +"1607944192","1607945215","FR" +"1607946240","1607947263","UA" +"1607947264","1607948287","RU" +"1607948288","1607949311","GB" +"1607949312","1607950335","UA" +"1607950336","1607952383","RU" +"1607952384","1607953407","UA" +"1607954432","1607956479","UA" +"1607956480","1607957503","ES" +"1607957504","1607958527","UA" +"1607958528","1607959551","PS" +"1607959552","1607960575","EE" +"1607960576","1607962623","RU" +"1607962624","1607963647","UA" +"1607963648","1607965695","RU" +"1607965696","1607966719","UA" +"1607967744","1607968767","UA" +"1607968768","1607969791","SE" +"1607970816","1607972863","RU" +"1607972864","1607974911","NL" +"1607974912","1607976959","PL" +"1607976960","1607980031","RU" +"1607980032","1607981055","DE" +"1607981056","1607982079","UA" +"1607983104","1607984127","GB" +"1607985152","1607986175","PL" +"1607986176","1607987199","UA" +"1607988224","1607989247","KG" +"1607990272","1607991295","RU" +"1607991296","1608122367","UA" +"1608122368","1608253439","RO" +"1608253440","1608384511","RU" +"1608384512","1608515583","DE" +"1608515584","1610612735","IT" +"1610612736","1610678271","US" +"1610678272","1610743807","CA" +"1610743808","1611165943","US" +"1611165944","1611165951","BD" +"1611165952","1611166111","US" +"1611166112","1611166119","NZ" +"1611166120","1611166167","US" +"1611166168","1611166175","AF" +"1611166176","1611166343","US" +"1611166344","1611166351","VE" +"1611166352","1611166559","US" +"1611166560","1611166575","HN" +"1611166576","1611167199","US" +"1611167200","1611167231","IN" +"1611167232","1611167679","US" +"1611167680","1611167727","SE" +"1611167728","1611169023","US" +"1611169024","1611169663","IE" +"1611169664","1611169791","GB" +"1611169792","1611227135","US" +"1611227136","1611235327","CA" +"1611235328","1611923455","US" +"1611923456","1612185599","CA" +"1612185600","1612611583","US" +"1612611584","1612636159","CA" +"1612636160","1612685567","US" +"1612685568","1612685583","CA" +"1612685584","1612687055","US" +"1612687056","1612687063","CA" +"1612687064","1612689087","US" +"1612689088","1612689151","CA" +"1612689152","1613471743","US" +"1613471744","1613479935","JM" +"1613479936","1613488127","US" +"1613488128","1613492223","CA" +"1613492224","1613504511","US" +"1613504512","1613529087","CA" +"1613529088","1613538122","US" +"1613538123","1613538125","A1" +"1613538126","1613545471","US" +"1613545472","1613545495","CA" +"1613545496","1613545503","US" +"1613545504","1613545551","CA" +"1613545552","1613545559","US" +"1613545560","1613545799","CA" +"1613545800","1613545807","US" +"1613545808","1613545871","CA" +"1613545872","1613545879","US" +"1613545880","1613545887","NL" +"1613545888","1613546159","CA" +"1613546160","1613546167","US" +"1613546168","1613546407","CA" +"1613546408","1613546423","US" +"1613546424","1613546679","CA" +"1613546680","1613546695","US" +"1613546696","1613546703","CA" +"1613546704","1613546719","US" +"1613546720","1613547935","CA" +"1613547936","1613547943","US" +"1613547944","1613548479","CA" +"1613548480","1613548487","US" +"1613548488","1613548959","CA" +"1613548960","1613548967","US" +"1613548968","1613550487","CA" +"1613550488","1613550495","US" +"1613550496","1613550735","CA" +"1613550736","1613550743","US" +"1613550744","1613552063","CA" +"1613552064","1613552079","US" +"1613552080","1613552151","CA" +"1613552152","1613552159","US" +"1613552160","1613552199","CA" +"1613552200","1613552207","US" +"1613552208","1613556183","CA" +"1613556184","1613556191","US" +"1613556192","1613558359","CA" +"1613558360","1613558375","NL" +"1613558376","1613565951","CA" +"1613565952","1613570047","US" +"1613570048","1613574143","CA" +"1613574144","1613606911","US" +"1613606912","1613607167","CA" +"1613607168","1613607423","US" +"1613607424","1613615103","CA" +"1613615104","1613635583","US" +"1613635584","1613639679","CA" +"1613639680","1613640703","US" +"1613640704","1613640831","CA" +"1613640832","1613676543","US" +"1613676544","1613680639","CA" +"1613680640","1613703670","US" +"1613703671","1613703678","LK" +"1613703679","1613737983","US" +"1613737984","1613742079","CA" +"1613742080","1613758463","US" +"1613758464","1614282751","CA" +"1614282752","1614741503","US" +"1614741504","1614757887","CA" +"1614757888","1614774271","US" +"1614774272","1614786559","CA" +"1614786560","1618837503","US" +"1618837504","1618841599","CA" +"1618841600","1618849791","US" +"1618849792","1618850303","CA" +"1618850304","1618850559","US" +"1618850560","1618852863","CA" +"1618852864","1618853631","US" +"1618853632","1618862079","CA" +"1618862080","1618866175","US" +"1618866176","1618870271","CA" +"1618870272","1618984959","US" +"1618984960","1619001343","CA" +"1619001344","1632305151","US" +"1632305152","1632321535","CA" +"1632321536","1632354303","US" +"1632354304","1632354607","CA" +"1632354608","1632354615","US" +"1632354616","1632354679","CA" +"1632354680","1632354687","US" +"1632354688","1632354919","CA" +"1632354920","1632354927","NL" +"1632354928","1632355511","CA" +"1632355512","1632355519","US" +"1632355520","1632355583","CA" +"1632355584","1632355599","US" +"1632355600","1632358647","CA" +"1632358648","1632358655","US" +"1632358656","1632358775","CA" +"1632358776","1632358783","US" +"1632358784","1632362495","CA" +"1632362496","1634414591","US" +"1634414592","1634418687","CA" +"1634418688","1634447359","US" +"1634447360","1634451455","CA" +"1634451456","1634455551","US" +"1634455552","1634459647","CA" +"1634459648","1634467839","US" +"1634467840","1634729983","CA" +"1634729984","1650919315","US" +"1650919316","1650919316","A1" +"1650919317","1652293631","US" +"1652293632","1652310015","CA" +"1652310016","1652481279","US" +"1652481280","1652481791","CN" +"1652481792","1652487286","US" +"1652487287","1652487287","TR" +"1652487288","1652621327","US" +"1652621328","1652621335","CA" +"1652621336","1652621343","AU" +"1652621344","1652621359","CA" +"1652621360","1652621495","US" +"1652621496","1652621503","CA" +"1652621504","1652621663","US" +"1652621664","1652621671","GB" +"1652621672","1652621679","US" +"1652621680","1652621687","CA" +"1652621688","1652621695","US" +"1652621696","1652621703","MX" +"1652621704","1652621911","US" +"1652621912","1652621919","GB" +"1652621920","1652622119","US" +"1652622120","1652622127","GB" +"1652622128","1652622175","US" +"1652622176","1652622207","GB" +"1652622208","1652622271","US" +"1652622272","1652622279","AU" +"1652622280","1652622575","US" +"1652622576","1652622583","GB" +"1652622584","1652622895","US" +"1652622896","1652622903","MX" +"1652622904","1652623903","US" +"1652623904","1652623935","IN" +"1652623936","1652624111","US" +"1652624112","1652624119","MX" +"1652624120","1652624511","US" +"1652624512","1652624519","IN" +"1652624520","1652624527","US" +"1652624528","1652624535","GB" +"1652624536","1652624591","US" +"1652624592","1652624599","IE" +"1652624600","1652624655","US" +"1652624656","1652624663","ZA" +"1652624664","1652625119","US" +"1652625120","1652625127","ZA" +"1652625128","1652625303","US" +"1652625304","1652625311","CA" +"1652625312","1652625495","US" +"1652625496","1652625503","CA" +"1652625504","1652625695","US" +"1652625696","1652625711","IN" +"1652625712","1652626055","US" +"1652626056","1652626063","GB" +"1652626064","1652626319","US" +"1652626320","1652626327","GB" +"1652626328","1652626399","US" +"1652626400","1652626407","IE" +"1652626408","1652626487","US" +"1652626488","1652626495","GB" +"1652626496","1652626727","US" +"1652626728","1652626735","IL" +"1652626736","1652627519","US" +"1652627520","1652627567","MY" +"1652627568","1652627575","US" +"1652627576","1652627583","GB" +"1652627584","1652628055","US" +"1652628056","1652628063","IN" +"1652628064","1652628311","US" +"1652628312","1652628319","BO" +"1652628320","1652628351","US" +"1652628352","1652628359","CA" +"1652628360","1652629551","US" +"1652629552","1652629559","NZ" +"1652629560","1652630031","US" +"1652630032","1652630039","GB" +"1652630040","1652630247","US" +"1652630248","1652630255","AU" +"1652630256","1652630655","US" +"1652630656","1652630663","IL" +"1652630664","1652630887","US" +"1652630888","1652630895","AU" +"1652630896","1652631015","US" +"1652631016","1652631023","IN" +"1652631024","1652631343","US" +"1652631344","1652631351","CA" +"1652631352","1652631535","US" +"1652631536","1652631551","MY" +"1652631552","1652631751","US" +"1652631752","1652631759","GB" +"1652631760","1652631999","US" +"1652632000","1652632015","AE" +"1652632016","1652632255","US" +"1652632256","1652632263","IL" +"1652632264","1652632431","US" +"1652632432","1652632439","CA" +"1652632440","1652632647","US" +"1652632648","1652632655","MY" +"1652632656","1652632671","US" +"1652632672","1652632751","MY" +"1652632752","1652632863","US" +"1652632864","1652632879","CA" +"1652632880","1652632887","US" +"1652632888","1652632895","AU" +"1652632896","1652632911","US" +"1652632912","1652632919","CA" +"1652632920","1652632935","US" +"1652632936","1652632943","PH" +"1652632944","1652633159","US" +"1652633160","1652633167","CA" +"1652633168","1652633999","US" +"1652634000","1652634007","GB" +"1652634008","1652634143","US" +"1652634144","1652634151","AE" +"1652634152","1652634423","US" +"1652634424","1652634431","CA" +"1652634432","1652634647","US" +"1652634648","1652634655","PH" +"1652634656","1652634663","AU" +"1652634664","1652634767","US" +"1652634768","1652634775","AU" +"1652634776","1652634791","US" +"1652634792","1652634799","CA" +"1652634800","1652634855","US" +"1652634856","1652634863","CA" +"1652634864","1652635047","US" +"1652635048","1652635055","GB" +"1652635056","1652635295","US" +"1652635296","1652635311","CA" +"1652635312","1652635591","US" +"1652635592","1652635599","CA" +"1652635600","1652635903","US" +"1652635904","1652635911","AU" +"1652635912","1652636423","US" +"1652636424","1652636431","CA" +"1652636432","1652636631","US" +"1652636632","1652636639","IL" +"1652636640","1652636655","US" +"1652636656","1652636663","CA" +"1652636664","1652636839","US" +"1652636840","1652636847","CA" +"1652636848","1652637207","US" +"1652637208","1652637215","FR" +"1652637216","1652637623","US" +"1652637624","1652637631","GB" +"1652637632","1652637887","US" +"1652637888","1652637895","IL" +"1652637896","1652638143","US" +"1652638144","1652638151","CH" +"1652638152","1652638191","US" +"1652638192","1652638207","IN" +"1652638208","1652638215","US" +"1652638216","1652638223","AU" +"1652638224","1652638703","US" +"1652638704","1652638711","IN" +"1652638712","1652638855","US" +"1652638856","1652638863","CA" +"1652638864","1652638895","US" +"1652638896","1652638903","GB" +"1652638904","1652639015","US" +"1652639016","1652639023","MX" +"1652639024","1652639135","US" +"1652639136","1652639143","AU" +"1652639144","1652639455","US" +"1652639456","1652639471","IN" +"1652639472","1652639535","US" +"1652639536","1652639543","CA" +"1652639544","1652639671","US" +"1652639672","1652639679","GB" +"1652639680","1652640631","US" +"1652640632","1652640639","NL" +"1652640640","1652641183","US" +"1652641184","1652641191","BR" +"1652641192","1652641431","US" +"1652641432","1652641439","IN" +"1652641440","1652641879","US" +"1652641880","1652641887","GB" +"1652641888","1652641895","US" +"1652641896","1652641911","GB" +"1652641912","1652641919","CA" +"1652641920","1652641983","US" +"1652641984","1652642015","AE" +"1652642016","1652642023","CA" +"1652642024","1652643215","US" +"1652643216","1652643223","IT" +"1652643224","1652643351","US" +"1652643352","1652643359","CA" +"1652643360","1652643431","US" +"1652643432","1652643447","CA" +"1652643448","1652643463","US" +"1652643464","1652643471","CA" +"1652643472","1652643575","US" +"1652643576","1652643583","EG" +"1652643584","1652643631","US" +"1652643632","1652643639","IN" +"1652643640","1652643655","US" +"1652643656","1652643663","GB" +"1652643664","1652643679","US" +"1652643680","1652643687","GB" +"1652643688","1652643799","US" +"1652643800","1652643807","GB" +"1652643808","1652643839","US" +"1652643840","1652643847","GB" +"1652643848","1652643879","US" +"1652643880","1652643887","AU" +"1652643888","1652643895","CA" +"1652643896","1652644223","US" +"1652644224","1652644231","AU" +"1652644232","1652644247","US" +"1652644248","1652644255","GB" +"1652644256","1652644311","US" +"1652644312","1652644319","CA" +"1652644320","1652644375","US" +"1652644376","1652644383","CA" +"1652644384","1652644591","US" +"1652644592","1652644639","BD" +"1652644640","1652644647","US" +"1652644648","1652644655","BO" +"1652644656","1652644799","US" +"1652644800","1652644807","CA" +"1652644808","1652644863","US" +"1652644864","1652644871","AU" +"1652644872","1652645103","US" +"1652645104","1652645111","CA" +"1652645112","1652645751","US" +"1652645752","1652645759","NZ" +"1652645760","1652645791","US" +"1652645792","1652645799","IN" +"1652645800","1652645879","US" +"1652645880","1652645887","NZ" +"1652645888","1652645919","US" +"1652645920","1652645935","AE" +"1652645936","1652646271","US" +"1652646272","1652646279","AU" +"1652646280","1652646487","US" +"1652646488","1652646495","CA" +"1652646496","1652646503","US" +"1652646504","1652646511","CA" +"1652646512","1652646815","US" +"1652646816","1652646823","BD" +"1652646824","1652647199","US" +"1652647200","1652647207","IL" +"1652647208","1652647215","GB" +"1652647216","1652647303","US" +"1652647304","1652647311","AU" +"1652647312","1652647319","US" +"1652647320","1652647327","IL" +"1652647328","1652647351","US" +"1652647352","1652647359","GB" +"1652647360","1652647511","US" +"1652647512","1652647519","CA" +"1652647520","1652647647","US" +"1652647648","1652647655","MX" +"1652647656","1652647823","US" +"1652647824","1652647831","CA" +"1652647832","1652647855","US" +"1652647856","1652647871","CA" +"1652647872","1652647919","US" +"1652647920","1652647935","IE" +"1652647936","1652648103","US" +"1652648104","1652648111","MX" +"1652648112","1652648255","US" +"1652648256","1652648263","GB" +"1652648264","1652648399","US" +"1652648400","1652648407","IN" +"1652648408","1652648639","US" +"1652648640","1652648647","MY" +"1652648648","1652648879","US" +"1652648880","1652648887","BD" +"1652648888","1652648983","US" +"1652648984","1652648991","NZ" +"1652648992","1652649463","US" +"1652649464","1652649471","GB" +"1652649472","1652649519","US" +"1652649520","1652649527","SE" +"1652649528","1652649543","US" +"1652649544","1652649551","CA" +"1652649552","1652650303","US" +"1652650304","1652650311","SE" +"1652650312","1652650335","US" +"1652650336","1652650343","CA" +"1652650344","1652650679","US" +"1652650680","1652650687","CA" +"1652650688","1652650751","US" +"1652650752","1652650759","AU" +"1652650760","1652650791","US" +"1652650792","1652650799","GB" +"1652650800","1652651063","US" +"1652651064","1652651071","SG" +"1652651072","1652651079","US" +"1652651080","1652651087","GB" +"1652651088","1652651111","US" +"1652651112","1652651119","NZ" +"1652651120","1652651271","US" +"1652651272","1652651279","IN" +"1652651280","1652651351","US" +"1652651352","1652651359","CA" +"1652651360","1652651495","US" +"1652651496","1652651503","AR" +"1652651504","1652652151","US" +"1652652152","1652652159","IN" +"1652652160","1652652327","US" +"1652652328","1652652335","SG" +"1652652336","1652652591","US" +"1652652592","1652652599","BD" +"1652652600","1652652655","US" +"1652652656","1652652663","GB" +"1652652664","1652652895","US" +"1652652896","1652652927","CA" +"1652652928","1652653231","US" +"1652653232","1652653239","CA" +"1652653240","1652653247","US" +"1652653248","1652653279","BD" +"1652653280","1652653343","US" +"1652653344","1652653359","BD" +"1652653360","1652653631","US" +"1652653632","1652653639","CA" +"1652653640","1652653663","US" +"1652653664","1652653671","IN" +"1652653672","1652653679","GB" +"1652653680","1652653855","US" +"1652653856","1652653863","AR" +"1652653864","1652654023","US" +"1652654024","1652654031","CA" +"1652654032","1652654527","US" +"1652654528","1652654535","NZ" +"1652654536","1652654543","CA" +"1652654544","1652654719","US" +"1652654720","1652654727","GB" +"1652654728","1652654783","US" +"1652654784","1652654815","BD" +"1652654816","1652654927","US" +"1652654928","1652654935","GB" +"1652654936","1652655007","US" +"1652655008","1652655015","GB" +"1652655016","1652655063","US" +"1652655064","1652655071","GU" +"1652655072","1652655231","US" +"1652655232","1652655263","CA" +"1652655264","1652655303","US" +"1652655304","1652655311","IN" +"1652655312","1652655431","US" +"1652655432","1652655439","GU" +"1652655440","1652655511","US" +"1652655512","1652655519","AU" +"1652655520","1652655727","US" +"1652655728","1652655743","GB" +"1652655744","1652655871","US" +"1652655872","1652655879","CA" +"1652655880","1652655887","US" +"1652655888","1652655895","IN" +"1652655896","1652655903","GB" +"1652655904","1652655943","US" +"1652655944","1652655951","JM" +"1652655952","1652655983","US" +"1652655984","1652655999","GB" +"1652656000","1652656063","US" +"1652656064","1652656071","GB" +"1652656072","1652656383","US" +"1652656384","1652656391","CA" +"1652656392","1652656431","US" +"1652656432","1652656439","ZA" +"1652656440","1652656447","CA" +"1652656448","1652656671","US" +"1652656672","1652656679","GB" +"1652656680","1652656703","US" +"1652656704","1652656711","CA" +"1652656712","1652656719","US" +"1652656720","1652656727","NZ" +"1652656728","1652656759","US" +"1652656760","1652656767","CN" +"1652656768","1652656799","US" +"1652656800","1652656807","GB" +"1652656808","1652656855","US" +"1652656856","1652656863","PH" +"1652656864","1652656927","US" +"1652656928","1652656935","GB" +"1652656936","1652657295","US" +"1652657296","1652657311","AU" +"1652657312","1652657439","US" +"1652657440","1652657447","MX" +"1652657448","1652657567","US" +"1652657568","1652657575","JM" +"1652657576","1652657863","US" +"1652657864","1652657871","GB" +"1652657872","1652658223","US" +"1652658224","1652658231","GB" +"1652658232","1652658367","US" +"1652658368","1652658375","MX" +"1652658376","1652658431","US" +"1652658432","1652658439","GB" +"1652658440","1652658535","US" +"1652658536","1652658543","GB" +"1652658544","1652658559","US" +"1652658560","1652658567","CA" +"1652658568","1652658687","US" +"1652658688","1652658695","NZ" +"1652658696","1652658727","US" +"1652658728","1652658735","IN" +"1652658736","1652659151","US" +"1652659152","1652659159","GB" +"1652659160","1652659367","US" +"1652659368","1652659375","CA" +"1652659376","1652660007","US" +"1652660008","1652660015","CA" +"1652660016","1652660127","US" +"1652660128","1652660135","CA" +"1652660136","1652660183","US" +"1652660184","1652660191","MX" +"1652660192","1652660287","US" +"1652660288","1652660295","IN" +"1652660296","1652660303","MX" +"1652660304","1652660551","US" +"1652660552","1652660559","GB" +"1652660560","1652660639","US" +"1652660640","1652660663","AU" +"1652660664","1652660959","US" +"1652660960","1652660967","BR" +"1652660968","1652661087","US" +"1652661088","1652661095","MY" +"1652661096","1652661135","US" +"1652661136","1652661143","GB" +"1652661144","1652661151","US" +"1652661152","1652661159","IL" +"1652661160","1652661191","US" +"1652661192","1652661199","CA" +"1652661200","1652662735","US" +"1652662736","1652662751","GB" +"1652662752","1652662919","US" +"1652662920","1652662927","AU" +"1652662928","1652663039","US" +"1652663040","1652663047","MX" +"1652663048","1652663135","US" +"1652663136","1652663143","CA" +"1652663144","1652664527","US" +"1652664528","1652664543","CA" +"1652664544","1652665079","US" +"1652665080","1652665087","CA" +"1652665088","1652665103","US" +"1652665104","1652665111","CA" +"1652665112","1652665319","US" +"1652665320","1652665327","BR" +"1652665328","1652665335","PR" +"1652665336","1652665455","US" +"1652665456","1652665463","CA" +"1652665464","1652665479","US" +"1652665480","1652665487","GB" +"1652665488","1652665671","US" +"1652665672","1652665679","MX" +"1652665680","1652665687","IE" +"1652665688","1652665807","US" +"1652665808","1652665815","GB" +"1652665816","1652665863","US" +"1652665864","1652665871","AU" +"1652665872","1652665951","US" +"1652665952","1652665959","IT" +"1652665960","1652665983","US" +"1652665984","1652665991","CA" +"1652665992","1652666175","US" +"1652666176","1652666183","CA" +"1652666184","1652666207","US" +"1652666208","1652666215","GB" +"1652666216","1652666327","US" +"1652666328","1652666335","MX" +"1652666336","1652666495","US" +"1652666496","1652666511","CA" +"1652666512","1652666527","US" +"1652666528","1652666543","GB" +"1652666544","1652668951","US" +"1652668952","1652668959","IE" +"1652668960","1652668967","US" +"1652668968","1652668975","AU" +"1652668976","1652669191","US" +"1652669192","1652669199","IN" +"1652669200","1652669231","US" +"1652669232","1652669239","CA" +"1652669240","1652669567","US" +"1652669568","1652669575","GB" +"1652669576","1652670015","US" +"1652670016","1652670023","CA" +"1652670024","1652670311","US" +"1652670312","1652670319","BR" +"1652670320","1652670327","US" +"1652670328","1652670335","BR" +"1652670336","1652670463","CA" +"1652670464","1652670871","US" +"1652670872","1652670879","CA" +"1652670880","1652671167","US" +"1652671168","1652671175","NL" +"1652671176","1652671207","US" +"1652671208","1652671215","NL" +"1652671216","1652671271","US" +"1652671272","1652671279","GB" +"1652671280","1652671343","US" +"1652671344","1652671351","GB" +"1652671352","1652671359","MX" +"1652671360","1652671375","US" +"1652671376","1652671383","CA" +"1652671384","1652671407","US" +"1652671408","1652671415","GB" +"1652671416","1652671783","US" +"1652671784","1652671791","NL" +"1652671792","1652672023","US" +"1652672024","1652672031","MX" +"1652672032","1652672063","US" +"1652672064","1652672071","GB" +"1652672072","1652672159","US" +"1652672160","1652672167","JP" +"1652672168","1652672191","US" +"1652672192","1652672199","PK" +"1652672200","1652672295","US" +"1652672296","1652672303","MT" +"1652672304","1652672335","US" +"1652672336","1652672343","MT" +"1652672344","1652672439","US" +"1652672440","1652672447","CA" +"1652672448","1652672455","GB" +"1652672456","1652672463","US" +"1652672464","1652672471","IN" +"1652672472","1652672479","ZA" +"1652672480","1652672487","IN" +"1652672488","1652673279","US" +"1652673280","1652673535","CA" +"1652673536","1652674063","US" +"1652674064","1652674071","CA" +"1652674072","1652674135","US" +"1652674136","1652674143","MX" +"1652674144","1652674327","US" +"1652674328","1652674335","GB" +"1652674336","1652674343","US" +"1652674344","1652674351","NA" +"1652674352","1652674367","US" +"1652674368","1652674375","GB" +"1652674376","1652674879","US" +"1652674880","1652674887","CA" +"1652674888","1652674919","US" +"1652674920","1652674927","CH" +"1652674928","1652674943","US" +"1652674944","1652674951","CA" +"1652674952","1652675047","US" +"1652675048","1652675055","MX" +"1652675056","1652675103","US" +"1652675104","1652675111","GB" +"1652675112","1652675391","US" +"1652675392","1652675399","IN" +"1652675400","1652675487","US" +"1652675488","1652675495","NZ" +"1652675496","1652675951","US" +"1652675952","1652675959","KE" +"1652675960","1652676031","US" +"1652676032","1652676047","IN" +"1652676048","1652676191","US" +"1652676192","1652676199","IN" +"1652676200","1652676615","US" +"1652676616","1652676623","AU" +"1652676624","1652676679","US" +"1652676680","1652676687","CA" +"1652676688","1652677007","US" +"1652677008","1652677015","IN" +"1652677016","1652677039","US" +"1652677040","1652677047","MT" +"1652677048","1652677335","US" +"1652677336","1652677343","KE" +"1652677344","1652677367","US" +"1652677368","1652677375","GB" +"1652677376","1652677407","US" +"1652677408","1652677415","IN" +"1652677416","1652677575","US" +"1652677576","1652677583","CH" +"1652677584","1652678999","US" +"1652679000","1652679007","SG" +"1652679008","1652679031","US" +"1652679032","1652679039","BR" +"1652679040","1652679103","US" +"1652679104","1652679111","MX" +"1652679112","1652679119","NO" +"1652679120","1652680743","US" +"1652680744","1652680751","CA" +"1652680752","1652681047","US" +"1652681048","1652681055","GB" +"1652681056","1652681455","US" +"1652681456","1652681463","CA" +"1652681464","1652681471","US" +"1652681472","1652681479","GB" +"1652681480","1652681511","US" +"1652681512","1652681519","IL" +"1652681520","1653500927","US" +"1653500928","1653501183","FR" +"1653501184","1653501439","IL" +"1653501440","1653501695","HK" +"1653501696","1653534719","US" +"1653534720","1653538815","CA" +"1653538816","1653555199","US" +"1653555200","1653560319","CA" +"1653560320","1653560327","US" +"1653560328","1653567487","CA" +"1653567488","1653571583","US" +"1653571584","1653575679","CA" +"1653575680","1653575797","US" +"1653575798","1653575798","A1" +"1653575799","1653592063","US" +"1653592064","1653596159","CA" +"1653596160","1653600255","US" +"1653600256","1653604351","CA" +"1653604352","1654542335","US" +"1654542336","1654546431","CA" +"1654546432","1654550527","VG" +"1654550528","1654554623","US" +"1654554624","1654558719","CA" +"1654558720","1654583103","US" +"1654583104","1654583135","CA" +"1654583136","1654648831","US" +"1654648832","1654652927","CA" +"1654652928","1663444375","US" +"1663444376","1663444383","CA" +"1663444384","1665833175","US" +"1665833176","1665833183","A2" +"1665833184","1673527295","US" +"1673527296","1673560063","CA" +"1673560064","1673562207","US" +"1673562208","1673562239","CR" +"1673562240","1673562255","CA" +"1673562256","1673562303","US" +"1673562304","1673562319","CA" +"1673562320","1673562335","PL" +"1673562336","1673562399","US" +"1673562400","1673562415","GB" +"1673562416","1673562495","US" +"1673562496","1673562511","CA" +"1673562512","1673562639","US" +"1673562640","1673562671","GB" +"1673562672","1673562719","US" +"1673562720","1673562751","NL" +"1673562752","1673562767","CA" +"1673562768","1673562895","US" +"1673562896","1673562911","CA" +"1673562912","1673562975","US" +"1673562976","1673563007","NL" +"1673563008","1673563151","US" +"1673563152","1673563167","CA" +"1673563168","1673563407","US" +"1673563408","1673563423","CA" +"1673563424","1673563487","US" +"1673563488","1673563519","CA" +"1673563520","1673563663","US" +"1673563664","1673563679","CA" +"1673563680","1673563695","US" +"1673563696","1673563711","CA" +"1673563712","1673563775","US" +"1673563776","1673563903","GB" +"1673563904","1673566847","US" +"1673566848","1673566911","CA" +"1673566912","1673566975","US" +"1673566976","1673567007","CA" +"1673567008","1673567103","US" +"1673567104","1673567167","GB" +"1673567168","1673567263","US" +"1673567264","1673567279","AT" +"1673567280","1673567327","US" +"1673567328","1673567343","RU" +"1673567344","1673567359","US" +"1673567360","1673567423","MT" +"1673567424","1673567583","US" +"1673567584","1673567615","CA" +"1673567616","1673567743","CZ" +"1673567744","1673567791","US" +"1673567792","1673567807","CA" +"1673567808","1673567823","AU" +"1673567824","1673567855","US" +"1673567856","1673567871","CA" +"1673567872","1673568255","US" +"1673568256","1673568271","CA" +"1673568272","1673568303","US" +"1673568304","1673568319","GB" +"1673568320","1673568383","US" +"1673568384","1673568447","CA" +"1673568448","1673569023","US" +"1673569024","1673569039","CA" +"1673569040","1673569055","HR" +"1673569056","1673569103","US" +"1673569104","1673569119","CA" +"1673569120","1673569183","US" +"1673569184","1673569215","NL" +"1673569216","1673569887","US" +"1673569888","1673569903","PL" +"1673569904","1673569967","US" +"1673569968","1673569983","GB" +"1673569984","1673570559","US" +"1673570560","1673570815","LT" +"1673570816","1673571679","US" +"1673571680","1673571711","CA" +"1673571712","1673572095","US" +"1673572096","1673572351","LT" +"1673572352","1673572895","US" +"1673572896","1673572911","CA" +"1673572912","1673573183","US" +"1673573184","1673573247","CA" +"1673573248","1673573503","US" +"1673573504","1673573567","NL" +"1673573568","1673573743","US" +"1673573744","1673573823","CA" +"1673573824","1673576895","US" +"1673576896","1673576959","A1" +"1673576960","1673577231","US" +"1673577232","1673577247","CA" +"1673577248","1673577727","US" +"1673577728","1673577983","LT" +"1673577984","1673578239","A1" +"1673578240","1673578287","US" +"1673578288","1673578303","CA" +"1673578304","1673578751","US" +"1673578752","1673578767","CA" +"1673578768","1673579391","US" +"1673579392","1673579455","LT" +"1673579456","1673580095","US" +"1673580096","1673580127","CA" +"1673580128","1673580287","US" +"1673580288","1673580543","CA" +"1673580544","1673580927","US" +"1673580928","1673580991","LT" +"1673580992","1673581183","US" +"1673581184","1673581247","LT" +"1673581248","1673581439","US" +"1673581440","1673581503","LT" +"1673581504","1673581599","US" +"1673581600","1673581615","CA" +"1673581616","1673581695","US" +"1673581696","1673581759","LT" +"1673581760","1673581951","US" +"1673581952","1673582015","LT" +"1673582016","1673582207","US" +"1673582208","1673582271","LT" +"1673582272","1673583231","US" +"1673583232","1673583295","CA" +"1673583296","1673583455","US" +"1673583456","1673583487","HR" +"1673583488","1673584191","US" +"1673584192","1673584223","HR" +"1673584224","1673584383","US" +"1673584384","1673584399","HR" +"1673584400","1673584767","US" +"1673584768","1673584895","CA" +"1673584896","1673585343","US" +"1673585344","1673585407","SC" +"1673585408","1673586175","US" +"1673586176","1673586191","NL" +"1673586192","1673586431","US" +"1673586432","1673586447","NL" +"1673586448","1673588799","US" +"1673588800","1673588863","CA" +"1673588864","1673588991","US" +"1673588992","1673589007","HR" +"1673589008","1673590783","US" +"1673590784","1673590911","EC" +"1673590912","1673986047","US" +"1673986048","1674051583","CA" +"1674051584","1674575871","US" +"1674575872","1677721599","CA" +"1677721600","1680535551","US" +"1680535552","1680539647","CA" +"1680539648","1680564223","US" +"1680564224","1680572415","CA" +"1680572416","1680627199","US" +"1680627200","1680627263","CA" +"1680627264","1681915903","US" +"1686110208","1694498815","US" +"1694498816","1694499839","CN" +"1694499840","1694500863","ID" +"1694500864","1694507007","JP" +"1694507008","1694515199","IN" +"1694515200","1694531583","AU" +"1694531584","1694564351","TW" +"1694564352","1694565375","CN" +"1694565376","1694566399","HK" +"1694566400","1694568447","KR" +"1694568448","1694572543","HK" +"1694572544","1694580735","KR" +"1694580736","1694629887","JP" +"1694629888","1694662655","IN" +"1694662656","1694670847","JP" +"1694670848","1694672895","BD" +"1694672896","1694673919","AU" +"1694673920","1694674943","CN" +"1694674944","1694679039","LK" +"1694679040","1694695423","AU" +"1694695424","1694760959","TW" +"1694760960","1695023103","CN" +"1695023104","1695547391","TW" +"1695547392","1697775615","CN" +"1697775616","1697776639","ID" +"1697776640","1697779711","JP" +"1697779712","1697783807","ID" +"1697783808","1697789951","JP" +"1697789952","1697790975","CN" +"1697790976","1697791999","JP" +"1697792000","1697808383","PK" +"1697808384","1697841151","JP" +"1697841152","1697906687","TH" +"1697906688","1697972223","CN" +"1697972224","1697988607","VN" +"1697988608","1697996799","KR" +"1697996800","1697997823","JP" +"1697997824","1697998847","CN" +"1697998848","1698004991","JP" +"1698004992","1698037759","AU" +"1698037760","1698103295","CN" +"1698103296","1698136063","KR" +"1698136064","1698160639","JP" +"1698160640","1698162687","CN" +"1698162688","1698168831","JP" +"1698168832","1698693119","IN" +"1698693120","1699611647","CN" +"1699611648","1699612671","JP" +"1699612672","1699614719","LA" +"1699614720","1699618815","PH" +"1699618816","1699627007","CN" +"1699627008","1699643391","SG" +"1699643392","1699676159","HK" +"1699676160","1699741695","KR" +"1699741696","1700793343","CN" +"1700793344","1700794367","VN" +"1700794368","1700798463","CN" +"1700798464","1700806655","JP" +"1700806656","1700823039","VN" +"1700823040","1700855807","CN" +"1700855808","1700921343","JP" +"1700921344","1700986879","NZ" +"1700986880","1701003263","VN" +"1701003264","1701011455","MY" +"1701011456","1701019647","CN" +"1701019648","1701052415","GU" +"1701052416","1701117951","NZ" +"1701117952","1701134335","NC" +"1701134336","1701142527","CN" +"1701142528","1701143551","HK" +"1701143552","1701143807","CN" +"1701143808","1701144063","AU" +"1701144064","1701150719","CN" +"1701150720","1701183487","KR" +"1701183488","1701199871","JP" +"1701199872","1701208063","CN" +"1701208064","1701209087","JP" +"1701209088","1701209855","CN" +"1701209856","1701210111","AU" +"1701210112","1701216255","CN" +"1701216256","1701249023","JP" +"1701249024","1701314559","AU" +"1701314560","1701576703","CN" +"1701576704","1701707775","TH" +"1701707776","1701724159","JP" +"1701724160","1701736447","CN" +"1701736448","1701737471","NZ" +"1701737472","1701740543","CN" +"1701740544","1701838847","JP" +"1701838848","1702363135","AU" +"1702363136","1702821887","CN" +"1702821888","1702887423","HK" +"1702887424","1702888447","CN" +"1702888448","1702889471","AU" +"1702889472","1702903807","CN" +"1702903808","1702920191","ID" +"1702920192","1702952959","JP" +"1702952960","1703411711","CN" +"1703411712","1703673855","TW" +"1703673856","1703935999","JP" +"1703936000","1704984575","CN" +"1704984576","1707081727","AU" +"1707081728","1707737087","CN" +"1707737088","1707802623","KR" +"1707802624","1707835391","JP" +"1707835392","1707845631","CN" +"1707845632","1707846655","ID" +"1707846656","1707851775","CN" +"1707851776","1707868159","JP" +"1707868160","1708130303","CN" +"1708130304","1709178879","IN" +"1709178880","1709834239","CN" +"1709834240","1709850623","SG" +"1709850624","1709852671","CN" +"1709852672","1709853695","AU" +"1709853696","1709867007","CN" +"1709867008","1709899775","AU" +"1709899776","1709965311","KR" +"1709965312","1710882815","CN" +"1710882816","1710948351","KR" +"1710948352","1710949375","CN" +"1710949376","1710950399","NP" +"1710950400","1711210495","CN" +"1711210496","1711276031","ID" +"1728053248","1728120063","AU" +"1728120064","1728120319","SG" +"1728120320","1728120575","IN" +"1728120576","1728120831","AU" +"1728120832","1728121855","CN" +"1728121856","1728123903","HK" +"1728123904","1728125951","CN" +"1728125952","1728126975","LA" +"1728126976","1728132095","HK" +"1728132096","1728135167","AU" +"1728135168","1728136191","HK" +"1728136192","1728137215","MY" +"1728137216","1728138239","CN" +"1728138240","1728139263","AU" +"1728139264","1728140287","IN" +"1728140288","1728141311","SG" +"1728141312","1728142335","CN" +"1728142336","1728143359","NP" +"1728143360","1728144383","MP" +"1728144384","1728145407","IN" +"1728145408","1728146431","MY" +"1728146432","1728147455","AU" +"1728147456","1728148479","IN" +"1728148480","1728149503","PH" +"1728149504","1728150527","JP" +"1728150528","1728152575","IN" +"1728152576","1728153599","MY" +"1728153600","1728154623","SG" +"1728154624","1728155647","JP" +"1728155648","1728158719","MY" +"1728158720","1728159743","HK" +"1728159744","1728161791","TH" +"1728161792","1728162815","CN" +"1728162816","1728163839","SG" +"1728163840","1728164863","LK" +"1728164864","1728165887","FJ" +"1728165888","1728168959","AU" +"1728168960","1728169983","IN" +"1728169984","1728171007","VN" +"1728171008","1728172031","AU" +"1728172032","1728173055","VN" +"1728173056","1728175103","AU" +"1728175104","1728177151","HK" +"1728177152","1728178175","AU" +"1728178176","1728179199","LA" +"1728179200","1728180223","VN" +"1728180224","1728181247","AU" +"1728181248","1728203775","JP" +"1728203776","1728204799","KR" +"1728204800","1728205823","IN" +"1728205824","1728206847","KR" +"1728206848","1728207871","SB" +"1728207872","1728208895","KR" +"1728208896","1728210943","JP" +"1728210944","1728211967","SG" +"1728211968","1728212991","CN" +"1728212992","1728214015","TH" +"1728214016","1728215039","AU" +"1728215040","1728216063","NZ" +"1728216064","1728218111","JP" +"1728218112","1728219135","IN" +"1728219136","1728220159","JP" +"1728220160","1728221183","NZ" +"1728221184","1728222207","ID" +"1728222208","1728224255","LK" +"1728224256","1728225279","CN" +"1728225280","1728226303","JP" +"1728226304","1728227327","CN" +"1728227328","1728230399","AU" +"1728230400","1728231423","SG" +"1728231424","1728232447","NC" +"1728232448","1728235519","AU" +"1728235520","1728239615","CN" +"1728239616","1728240639","TW" +"1728240640","1728243711","VN" +"1728243712","1728246783","IN" +"1728246784","1728254975","JP" +"1728254976","1728255999","MY" +"1728256000","1728257023","HK" +"1728257024","1728258047","MN" +"1728258048","1728259071","IN" +"1728259072","1728260095","KR" +"1728260096","1728261119","IN" +"1728261120","1728262143","ID" +"1728262144","1728264191","JP" +"1728264192","1728265215","ID" +"1728265216","1728266239","SG" +"1728266240","1728267263","TH" +"1728267264","1728268287","ID" +"1728268288","1728269311","MY" +"1728269312","1728270335","ID" +"1728270336","1728271359","PH" +"1728271360","1728286719","CN" +"1728286720","1728287743","AU" +"1728287744","1728290815","CN" +"1728290816","1728291839","AU" +"1728291840","1728292863","SG" +"1728292864","1728293887","PG" +"1728293888","1728294911","MY" +"1728294912","1728295935","TH" +"1728295936","1728299007","JP" +"1728299008","1728300031","TW" +"1728300032","1728301055","AU" +"1728301056","1728302079","SG" +"1728302080","1728303103","IN" +"1728303104","1728305151","ID" +"1728305152","1728306175","AU" +"1728306176","1728307199","ID" +"1728307200","1728308223","BD" +"1728308224","1728309247","IN" +"1728309248","1728310271","NZ" +"1728310272","1728311295","AU" +"1728311296","1728312319","GU" +"1728312320","1728315391","VN" +"1728315392","1728316415","ID" +"1728316416","1728317439","MY" +"1728317440","1728318463","JP" +"1728318464","1728319487","SG" +"1728319488","1728320511","AU" +"1728320512","1728321535","PH" +"1728321536","1728322559","JP" +"1728322560","1728323583","MY" +"1728323584","1728324607","JP" +"1728324608","1728325631","SG" +"1728325632","1728326655","JP" +"1728326656","1728327679","MY" +"1728327680","1728328703","KR" +"1728328704","1728329727","ID" +"1728329728","1728330751","CN" +"1728330752","1728331775","AU" +"1728331776","1728332799","BD" +"1728332800","1728333823","JP" +"1728333824","1728334847","PF" +"1728334848","1728336895","JP" +"1728336896","1728337919","AU" +"1728337920","1728338943","MY" +"1728338944","1728339967","PK" +"1728339968","1728340991","SG" +"1728340992","1728342015","AU" +"1728342016","1728343039","TW" +"1728343040","1728344063","SG" +"1728344064","1728344575","HK" +"1728344576","1728345087","SG" +"1728345088","1728346111","BD" +"1728346112","1728346367","AU" +"1728346368","1728346623","NZ" +"1728346624","1728347135","AU" +"1728347136","1728348159","SG" +"1728348160","1728349183","VN" +"1728349184","1728349951","AU" +"1728349952","1728350207","NP" +"1728350208","1728351231","NZ" +"1728351232","1728352255","MY" +"1728352256","1728353279","BD" +"1728353280","1728354303","KR" +"1728354304","1728355327","NZ" +"1728355328","1728356351","TH" +"1728356352","1728357375","AU" +"1728357376","1728358399","ID" +"1728358400","1728359423","CN" +"1728359424","1728359935","AU" +"1728359936","1728360447","ID" +"1728360448","1728362495","KR" +"1728362496","1728363519","CN" +"1728363520","1728364543","BN" +"1728364544","1728365567","AU" +"1728365568","1728366591","SG" +"1728366592","1728367615","JP" +"1728367616","1728367871","IN" +"1728367872","1728368127","AU" +"1728368128","1728368639","ID" +"1728368640","1728369663","IN" +"1728369664","1728370687","AU" +"1728370688","1728371711","TH" +"1728371712","1728372735","IN" +"1728372736","1728373759","HK" +"1728373760","1728374783","TH" +"1728374784","1728375039","SG" +"1728375296","1728376831","AU" +"1728376832","1728377855","ID" +"1728377856","1728378879","HK" +"1728378880","1728380927","IN" +"1728380928","1728382975","PH" +"1728382976","1728383999","SG" +"1728384000","1728385023","HK" +"1728385024","1728386047","IN" +"1728386048","1728387071","JP" +"1728387072","1728388095","TH" +"1728388096","1728388351","NZ" +"1728388352","1728388607","AU" +"1728388608","1728389119","VN" +"1728389120","1728390143","TW" +"1728390144","1728391167","CN" +"1728391168","1728392191","JP" +"1728392192","1728393215","SG" +"1728393216","1728394239","ID" +"1728394240","1728396287","CN" +"1728396288","1728397311","PH" +"1728397312","1728398335","JP" +"1728398336","1728398847","AU" +"1728398848","1728399103","IN" +"1728399104","1728400383","NZ" +"1728400384","1728400895","AU" +"1728400896","1728401151","IN" +"1728401152","1728401407","SG" +"1728401408","1728402431","NZ" +"1728402432","1728403455","IN" +"1728403456","1728406527","AU" +"1728406528","1728407551","TW" +"1728407552","1728407807","JP" +"1728407808","1728408063","MY" +"1728408064","1728408319","NZ" +"1728408320","1728408575","ID" +"1728408576","1728409599","NZ" +"1728409600","1728410623","IN" +"1728410624","1728411647","JP" +"1728411648","1728412671","TH" +"1728412672","1728413695","KH" +"1728413696","1728414719","KR" +"1728414720","1728415743","IN" +"1728415744","1728416767","PK" +"1728416768","1728417791","JP" +"1728417792","1728418815","KR" +"1728418816","1728419071","ID" +"1728419072","1728419327","HK" +"1728419328","1728419583","NP" +"1728419584","1728419839","SG" +"1728419840","1728420863","JP" +"1728420864","1728421887","NZ" +"1728421888","1728422911","JP" +"1728422912","1728423935","AU" +"1728423936","1728424959","TW" +"1728424960","1728425983","AF" +"1728425984","1728427007","JP" +"1728427008","1728428031","MY" +"1728428032","1728430079","IN" +"1728430080","1728431103","JP" +"1728431104","1728431615","AF" +"1728431616","1728431871","HK" +"1728431872","1728432127","SG" +"1728432128","1728433151","IN" +"1728433152","1728435199","VN" +"1728435200","1728435967","AU" +"1728435968","1728436223","ID" +"1728436224","1728437247","IN" +"1728437248","1728438271","HK" +"1728438272","1728439295","NZ" +"1728439296","1728439807","NP" +"1728439808","1728440319","AU" +"1728440320","1728441343","BD" +"1728441344","1728442367","MY" +"1728442368","1728443391","SG" +"1728443392","1728444415","IN" +"1728444416","1728445439","JP" +"1728445440","1728446463","CN" +"1728446464","1728446975","ID" +"1728446976","1728447487","IN" +"1728447488","1728448511","HK" +"1728448512","1728449535","KH" +"1728449536","1728450559","AU" +"1728450560","1728452607","JP" +"1728452608","1728453119","AU" +"1728453120","1728453631","IN" +"1728453632","1728454655","NZ" +"1728454656","1728455167","IN" +"1728455168","1728455423","ID" +"1728455424","1728455679","AU" +"1728455680","1728457727","ID" +"1728457728","1728458751","JP" +"1728458752","1728459775","HK" +"1728459776","1728460799","ID" +"1728460800","1728462847","JP" +"1728462848","1728463871","NZ" +"1728463872","1728464895","JP" +"1728464896","1728465919","KR" +"1728465920","1728466943","CN" +"1728466944","1728467967","KR" +"1728467968","1728468479","HK" +"1728468480","1728468735","AU" +"1728468736","1728469247","IN" +"1728469248","1728469503","NZ" +"1728469504","1728470015","HK" +"1728470016","1728471039","JP" +"1728471040","1728472063","PH" +"1728472064","1728473087","KR" +"1728473088","1728473343","IN" +"1728473344","1728473599","AU" +"1728473600","1728474111","SG" +"1728474112","1728475135","IN" +"1728475136","1728476159","JP" +"1728476160","1728476415","AU" +"1728476416","1728476927","ID" +"1728476928","1728477183","IN" +"1728477184","1728480255","HK" +"1728480256","1728481279","IN" +"1728481280","1728483327","HK" +"1728483328","1728484351","NZ" +"1728484352","1728485375","SG" +"1728485376","1728486399","HK" +"1728486400","1728487423","IN" +"1728487424","1728487935","HK" +"1728487936","1728488191","TH" +"1728488192","1728488447","MY" +"1728488448","1728488703","IN" +"1728488704","1728488959","TH" +"1728488960","1728489215","HK" +"1728489216","1728490495","IN" +"1728490496","1728491519","KR" +"1728491520","1728492543","HK" +"1728492544","1728492799","ID" +"1728492800","1728493055","PH" +"1728493056","1728493567","TH" +"1728493568","1728494591","IN" +"1728494592","1728495615","AU" +"1728495616","1728496639","HK" +"1728496640","1728497663","MY" +"1728497664","1728499711","ID" +"1728499712","1728500735","AU" +"1728500736","1728501247","NZ" +"1728501248","1728501503","ID" +"1728501504","1728502783","AU" +"1728502784","1728503807","CN" +"1728503808","1728505855","JP" +"1728505856","1728506879","NZ" +"1728506880","1728507903","MY" +"1728507904","1728508927","JP" +"1728508928","1728509951","MY" +"1728509952","1728510975","PH" +"1728510976","1728511999","AU" +"1728512000","1728512511","ID" +"1728512512","1728512767","SG" +"1728512768","1728513023","IN" +"1728513024","1728514047","CN" +"1728514048","1728515071","SG" +"1728515072","1728516095","ID" +"1728516096","1728517119","TH" +"1728517120","1728518143","JP" +"1728518144","1728519167","KH" +"1728519168","1728520191","CN" +"1728520192","1728521215","KR" +"1728521216","1728523263","VN" +"1728523264","1728525311","AU" +"1728525312","1728525823","ID" +"1728525824","1728526335","HK" +"1728526336","1728527359","TH" +"1728527360","1728528383","PK" +"1728528384","1728529407","IN" +"1728529408","1728530431","MY" +"1728530432","1728531455","AU" +"1728531456","1728532479","PK" +"1728532480","1728533503","IN" +"1728533504","1728534527","ID" +"1728534528","1728535551","AU" +"1728535552","1728536575","JP" +"1728536576","1728537087","NZ" +"1728537088","1728537599","AU" +"1728537600","1728538623","GU" +"1728538624","1728539647","AF" +"1728539648","1728540671","IN" +"1728540672","1728541695","BD" +"1728541696","1728543743","JP" +"1728543744","1728544767","SG" +"1728544768","1728545791","IN" +"1728545792","1728546815","JP" +"1728546816","1728547839","AU" +"1728547840","1728548863","MY" +"1728548864","1728549119","KH" +"1728549120","1728549375","IN" +"1728549376","1728549631","PH" +"1728549632","1728549887","AU" +"1728549888","1728550911","IN" +"1728550912","1728551935","JP" +"1728551936","1728552959","MY" +"1728552960","1728553983","HK" +"1728553984","1728555007","AU" +"1728555008","1728556031","NZ" +"1728556032","1728556287","VN" +"1728556288","1728556543","ID" +"1728556544","1728557055","VN" +"1728557056","1728557311","ID" +"1728557312","1728557567","VN" +"1728557568","1728558079","ID" +"1728558080","1728559103","IN" +"1728559104","1728560127","ID" +"1728560128","1728560639","AU" +"1728560640","1728561151","HK" +"1728561152","1728562175","AU" +"1728562176","1728562431","VN" +"1728562432","1728562687","VU" +"1728562688","1728563199","JP" +"1728563200","1728564223","SG" +"1728564224","1728565247","IN" +"1728565248","1728566271","JP" +"1728566272","1728569343","CN" +"1728569344","1728569599","PH" +"1728569600","1728571391","ID" +"1728571392","1728572415","AU" +"1728572416","1728573439","JP" +"1728573440","1728574463","HK" +"1728574464","1728575487","KR" +"1728575488","1728576511","BD" +"1728576512","1728577535","BT" +"1728577536","1728578559","KH" +"1728578560","1728580607","CN" +"1728580608","1728580863","ID" +"1728580864","1728581119","VN" +"1728581120","1728581631","PK" +"1728581632","1728582655","NZ" +"1728582656","1728583679","JP" +"1728583680","1728584703","MY" +"1728584704","1728585215","AU" +"1728585216","1728585727","SG" +"1728585728","1728586751","CN" +"1728586752","1728589823","IN" +"1728589824","1728590847","JP" +"1728590848","1728591871","CN" +"1728591872","1728592895","ID" +"1728592896","1728593151","MN" +"1728593152","1728593407","AU" +"1728593408","1728593663","IN" +"1728593664","1728593919","ID" +"1728593920","1728595967","JP" +"1728595968","1728596479","NZ" +"1728596480","1728598015","ID" +"1728598016","1728599039","NZ" +"1728599040","1728602111","JP" +"1728602112","1728603135","ID" +"1728603136","1728604159","KR" +"1728604160","1728605183","TW" +"1728605184","1728606207","CN" +"1728606208","1728607231","PK" +"1728607232","1728608255","IN" +"1728608256","1728608511","SG" +"1728608512","1728608767","IN" +"1728608768","1728609023","ID" +"1728609024","1728610303","IN" +"1728610304","1728611327","TH" +"1728611328","1728613375","AU" +"1728613376","1728614399","NZ" +"1728614400","1728615423","MY" +"1728615424","1728616447","IN" +"1728616448","1728617471","SG" +"1728617472","1728618495","CN" +"1728618496","1728619519","MY" +"1728619520","1728620543","IN" +"1728620544","1728622591","AU" +"1728622592","1728624639","SG" +"1728624640","1728625663","JP" +"1728625664","1728626175","IN" +"1728626176","1728626431","JP" +"1728626432","1728626687","HK" +"1728626688","1728627711","IN" +"1728627712","1728628735","JP" +"1728628736","1728630783","CN" +"1728630784","1728631807","TH" +"1728631808","1728632319","SG" +"1728632320","1728632575","PK" +"1728632576","1728633855","IN" +"1728633856","1728634879","CN" +"1728634880","1728636159","ID" +"1728636160","1728636415","AU" +"1728636416","1728636671","KR" +"1728636672","1728636927","PK" +"1728636928","1728637951","NZ" +"1728637952","1728638463","AU" +"1728638464","1728638719","ID" +"1728638720","1728638975","AU" +"1728638976","1728639999","JP" +"1728640000","1728641023","ID" +"1728641024","1728642047","IN" +"1728642048","1728643071","NZ" +"1728643072","1728645119","VN" +"1728645120","1728646143","SG" +"1728646144","1728647167","IN" +"1728647168","1728648703","AU" +"1728648704","1728648959","ID" +"1728648960","1728649215","PK" +"1728650240","1728651263","JP" +"1728651264","1728652287","KR" +"1728652288","1728653311","ID" +"1728653312","1728654335","NZ" +"1728654336","1728655359","ID" +"1728655360","1728655871","IN" +"1728655872","1728656127","SB" +"1728656128","1728656383","HK" +"1728656384","1728661503","AU" +"1728661504","1728662527","IN" +"1728662528","1728665599","VN" +"1728665600","1728666623","MN" +"1728666624","1728668671","JP" +"1728668672","1728669695","SG" +"1728669696","1728670207","BD" +"1728670208","1728670463","NZ" +"1728670464","1728670719","FJ" +"1728670720","1728671743","JP" +"1728671744","1728672767","BD" +"1728672768","1728673791","TW" +"1728673792","1728674815","JP" +"1728674816","1728675839","ID" +"1728675840","1728676863","KR" +"1728676864","1728677887","IN" +"1728677888","1728678911","BD" +"1728678912","1728679935","PG" +"1728679936","1728680959","ID" +"1728680960","1728681983","MY" +"1728681984","1728683007","CN" +"1728683008","1728684031","BD" +"1728684032","1728685055","AU" +"1728685056","1728686079","JP" +"1728686080","1728687103","AU" +"1728687104","1728689407","JP" +"1728689408","1728689663","BD" +"1728689664","1728689919","PK" +"1728689920","1728690175","SG" +"1728690176","1728691199","BD" +"1728691200","1728692223","KH" +"1728692224","1728693247","JP" +"1728693248","1728698367","VN" +"1728698368","1728699391","NZ" +"1728699392","1728699903","BD" +"1728699904","1728700415","IN" +"1728700416","1728700671","BD" +"1728700672","1728700927","IN" +"1728700928","1728701183","PG" +"1728701184","1728701439","ID" +"1728701440","1728702463","WS" +"1728702464","1728703487","IN" +"1728703488","1728704511","NZ" +"1728704512","1728705535","AU" +"1728705536","1728706559","HK" +"1728706560","1728709631","CN" +"1728709632","1728710655","TW" +"1728710656","1728710911","AU" +"1728710912","1728711167","IN" +"1728711424","1728711679","AU" +"1728711680","1728712703","HK" +"1728712704","1728713727","CN" +"1728713728","1728714751","MN" +"1728714752","1728715775","IN" +"1728715776","1728716799","NP" +"1728716800","1728717823","AU" +"1728717824","1728718847","JP" +"1728718848","1728719871","MY" +"1728719872","1728720895","NZ" +"1728720896","1728721919","AU" +"1728721920","1728722943","BD" +"1728722944","1728723199","ID" +"1728723200","1728723455","AU" +"1728723456","1728726015","ID" +"1728726016","1728727039","JP" +"1728727040","1728728063","AU" +"1728728064","1728729087","BD" +"1728729088","1728729599","ID" +"1728729600","1728730111","AU" +"1728730112","1728731135","CN" +"1728731136","1728732159","VN" +"1728732160","1728733183","KR" +"1728733184","1728734207","ID" +"1728734208","1728735231","SG" +"1728735232","1728736255","ID" +"1728736256","1728736511","HK" +"1728736512","1728736767","IN" +"1728736768","1728737023","ID" +"1728737024","1728737279","CN" +"1728737280","1728738303","JP" +"1728738304","1728739327","IN" +"1728739328","1728740351","ID" +"1728740352","1728740863","HK" +"1728740864","1728741119","AU" +"1728741120","1728741375","IN" +"1728741376","1728742399","ID" +"1728742400","1728743423","IN" +"1728743424","1728744447","ID" +"1728744448","1728745471","CN" +"1728745472","1728747519","ID" +"1728747520","1728748543","PH" +"1728748544","1728750591","MY" +"1728750592","1728751615","JP" +"1728751616","1728751871","IN" +"1728751872","1728752639","ID" +"1728752640","1728753663","LK" +"1728753664","1728754687","PH" +"1728754688","1728755711","IN" +"1728755712","1728756735","ID" +"1728756736","1728757759","IN" +"1728757760","1728758783","JP" +"1728758784","1728759039","MY" +"1728759040","1728759295","HK" +"1728759296","1728759551","SG" +"1728759552","1728759807","HK" +"1728759808","1728760831","PH" +"1728760832","1728761855","TW" +"1728761856","1728762879","IN" +"1728762880","1728763903","VN" +"1728763904","1728764927","KR" +"1728764928","1728765439","SG" +"1728765440","1728765695","IN" +"1728765696","1728765951","ID" +"1728765952","1728766975","IN" +"1728766976","1728767999","TH" +"1728768000","1728768255","AU" +"1728768256","1728768511","NZ" +"1728768512","1728769023","IN" +"1728769024","1728770047","HK" +"1728770048","1728772095","JP" +"1728772096","1728773375","IN" +"1728773376","1728773631","ID" +"1728773632","1728774143","PH" +"1728774144","1728775167","AU" +"1728775168","1728776191","JP" +"1728776192","1728777215","AU" +"1728777216","1728778239","TH" +"1728778240","1728779263","JP" +"1728779264","1728779519","IN" +"1728779520","1728779775","NZ" +"1728779776","1728780287","ID" +"1728780288","1728781311","KR" +"1728781312","1728782335","ID" +"1728782336","1728783359","LK" +"1728783360","1728784383","HK" +"1728784384","1728785407","PH" +"1728785408","1728786431","KR" +"1728786432","1728787455","SG" +"1728787456","1728788479","AU" +"1728788480","1728789503","KR" +"1728789504","1728790527","PK" +"1728790528","1728791551","PH" +"1728791552","1728792575","PK" +"1728792576","1728793087","NZ" +"1728793088","1728793599","ID" +"1728793600","1728794623","AU" +"1728794624","1728796671","IN" +"1728796672","1728798719","HK" +"1728798720","1728799743","ID" +"1728799744","1728801279","HK" +"1728801280","1728801791","ID" +"1728801792","1728802815","HK" +"1728802816","1728803839","PH" +"1728803840","1728804863","IN" +"1728804864","1728805887","JP" +"1728805888","1728806911","NZ" +"1728806912","1728807935","KR" +"1728807936","1728808959","ID" +"1728808960","1728809983","BD" +"1728809984","1728810495","SG" +"1728810496","1728810751","AU" +"1728810752","1728811007","SG" +"1728811008","1728812031","AU" +"1728812032","1728812543","ID" +"1728812544","1728813055","SG" +"1728813056","1728814079","IN" +"1728814080","1728815103","JP" +"1728815104","1728818175","AU" +"1728818176","1728819199","VN" +"1728819200","1728819711","ID" +"1728819712","1728819967","NZ" +"1728819968","1728820223","ID" +"1728820224","1728821247","CN" +"1728821248","1728821759","AU" +"1728821760","1728822271","ID" +"1728822272","1728823295","SG" +"1728823296","1728824319","MN" +"1728824320","1728825343","JP" +"1728825344","1728826367","SG" +"1728826368","1728827391","AU" +"1728827392","1728828415","JP" +"1728828416","1728829439","AU" +"1728829440","1728830463","KH" +"1728830464","1728830719","SG" +"1728830720","1728830975","JP" +"1728830976","1728831487","ID" +"1728831488","1728832511","IN" +"1728832512","1728833535","HK" +"1728833536","1728834559","IN" +"1728834560","1728835583","JP" +"1728835584","1728836607","NZ" +"1728836608","1728837631","HK" +"1728837632","1728838655","KR" +"1728838656","1728839679","ID" +"1728839680","1728839935","FJ" +"1728839936","1728840191","IN" +"1728840192","1728840447","SG" +"1728840448","1728842751","AU" +"1728842752","1728843775","ID" +"1728843776","1728844799","JP" +"1728844800","1728845311","ID" +"1728845312","1728845567","AU" +"1728845568","1728845823","ID" +"1728845824","1728846847","IN" +"1728846848","1728847871","ID" +"1728847872","1728848895","CN" +"1728848896","1728849919","AU" +"1728849920","1728850943","PK" +"1728850944","1728851967","BD" +"1728851968","1728854015","JP" +"1728854016","1728854527","AU" +"1728854528","1728854783","PK" +"1728854784","1728855039","AU" +"1728855040","1728856063","HK" +"1728856064","1728857087","MY" +"1728857088","1728858111","CN" +"1728858112","1728860159","BD" +"1728860160","1728860671","ID" +"1728860672","1728861183","BD" +"1728861184","1728861439","ID" +"1728861440","1728862207","AU" +"1728862208","1728863231","PH" +"1728863232","1728864255","HK" +"1728864256","1728865279","AF" +"1728865280","1728866303","AU" +"1728866304","1728867327","VN" +"1728867328","1728868351","AU" +"1728868352","1728869375","ID" +"1728869376","1728870399","IN" +"1728870400","1728871423","PK" +"1728871424","1728872447","IN" +"1728905216","1728905471","FJ" +"1728905472","1728905727","PK" +"1728905728","1728907263","IN" +"1728907264","1728908287","NZ" +"1728908288","1728912383","JP" +"1728912384","1728913407","TH" +"1728913408","1728914431","PH" +"1728914432","1728915199","ID" +"1728915200","1728915455","NZ" +"1728915456","1728917503","JP" +"1728917504","1728918527","HK" +"1728918528","1728919551","KR" +"1728919552","1728920575","AU" +"1728920576","1728921599","JP" +"1728921600","1728922623","AF" +"1728922624","1728924671","AU" +"1728924672","1728925695","VN" +"1728925696","1728926719","AU" +"1728970752","1728971007","FJ" +"1728971008","1728971263","AU" +"1728971264","1728971519","IN" +"1728971520","1728971775","NZ" +"1728971776","1728972799","AU" +"1728972800","1728973823","TH" +"1728973824","1728974847","JP" +"1728974848","1728976383","ID" +"1728976384","1728976895","AU" +"1728976896","1728977151","AF" +"1728977408","1728977663","HK" +"1728977664","1728977919","BD" +"1728977920","1728978943","MY" +"1728978944","1728979967","JP" +"1728979968","1728980991","MN" +"1728980992","1728982015","NZ" +"1728982016","1728982527","ID" +"1728982528","1728982783","IN" +"1728982784","1728985087","AU" +"1728985088","1728986111","TW" +"1728986112","1728987135","PH" +"1729495040","1729519615","CN" +"1729519616","1729520639","HK" +"1729520640","1729527807","CN" +"1729527808","1729528831","SG" +"1729528832","1729530879","ID" +"1729530880","1729531903","MY" +"1729531904","1729532927","AU" +"1729532928","1729533951","MY" +"1729533952","1729534975","JP" +"1729534976","1729535999","TW" +"1729536000","1729537023","HK" +"1729537024","1729537791","ID" +"1729537792","1729538047","JP" +"1729538048","1729539071","SG" +"1729539072","1729540095","IN" +"1729540096","1729541119","AU" +"1729541120","1729542143","TH" +"1729542144","1729543167","AU" +"1729543168","1729544191","CN" +"1729544192","1729545215","IN" +"1729545216","1729546239","AU" +"1729546240","1729547263","HK" +"1729547264","1729548287","IN" +"1729548288","1729549311","AU" +"1729549312","1729550335","JP" +"1729550336","1729551359","MY" +"1729551360","1729552383","KR" +"1729552384","1729553407","AU" +"1729553408","1729554431","CN" +"1729554432","1729554943","ID" +"1729554944","1729555455","NZ" +"1729555456","1729556479","IN" +"1729556480","1729557503","ID" +"1729557504","1729558527","HK" +"1729558528","1729559551","ID" +"1729559552","1729560575","CN" +"1729560576","1729561599","AU" +"1729561600","1729562623","JP" +"1729562624","1729563647","CN" +"1729563648","1729564671","JP" +"1729564672","1729565695","NZ" +"1729565696","1729566719","ID" +"1729566720","1729568255","IN" +"1729568256","1729568511","ID" +"1729568768","1729569791","ID" +"1729569792","1729570815","AF" +"1729570816","1729571839","AU" +"1729571840","1729572863","MY" +"1729572864","1729573887","MN" +"1729573888","1729574911","NC" +"1729574912","1729575935","CN" +"1729575936","1729576959","BD" +"1729576960","1729577983","AU" +"1729577984","1729578495","HK" +"1729578496","1729578751","AU" +"1729578752","1729579007","MY" +"1729579008","1729580031","JP" +"1729580032","1729581055","SG" +"1729581056","1729583103","KR" +"1729583104","1729584127","JP" +"1729584128","1729585151","SG" +"1729585152","1729586175","PH" +"1729586176","1729587199","ID" +"1729587200","1729588223","AU" +"1729588224","1729589247","TW" +"1729589248","1729590271","AU" +"1729590272","1729590783","ID" +"1729590784","1729591295","IN" +"1729591296","1729592319","TH" +"1729592320","1729593343","IN" +"1729593344","1729594367","JP" +"1729594368","1729596415","KH" +"1729596416","1729596671","IN" +"1729596672","1729596927","ID" +"1729596928","1729597439","NZ" +"1729597440","1729598463","VN" +"1729598464","1729598975","AU" +"1729598976","1729599231","IN" +"1729599232","1729599487","ID" +"1729599488","1729600511","AU" +"1729600512","1729601535","VN" +"1729601536","1729603583","CN" +"1729603584","1729604607","BD" +"1729604608","1729605119","AU" +"1729605120","1729605375","PH" +"1729605376","1729605631","ID" +"1729605632","1729606655","CN" +"1729606656","1729607679","ID" +"1729607680","1729609727","AU" +"1729609728","1729610751","HK" +"1729610752","1729611775","JP" +"1729611776","1729612799","ID" +"1729612800","1729613823","JP" +"1729613824","1729614847","SG" +"1729614848","1729615103","NZ" +"1729615104","1729615359","KH" +"1729615360","1729615871","IN" +"1729615872","1729616895","AU" +"1729616896","1729617919","JP" +"1729617920","1729618943","ID" +"1729618944","1729619967","CN" +"1729619968","1729620991","ID" +"1729620992","1729622015","IN" +"1729622016","1729623295","ID" +"1729623296","1729623551","AU" +"1729623552","1729623807","TH" +"1729623808","1729624063","AF" +"1729624064","1729626111","JP" +"1729888256","1729889279","KH" +"1729889280","1729891327","CN" +"1729891328","1729892351","ID" +"1729892352","1729893375","PH" +"1729893376","1729893631","AU" +"1729893632","1729894399","ID" +"1729894400","1729896447","JP" +"1729896448","1729898495","VN" +"1729898496","1729899519","AU" +"1729899520","1729900543","HK" +"1729900544","1729901567","AU" +"1729901568","1729902079","BD" +"1729902080","1729902591","SG" +"1729902592","1729903615","ID" +"1729903616","1729905663","KR" +"1729905664","1729906687","PH" +"1729906688","1729906943","AU" +"1729906944","1729907199","JP" +"1729907200","1729907711","ID" +"1729907712","1729908735","HK" +"1729908736","1729909759","ID" +"1729909760","1729910783","NP" +"1729910784","1729911807","MY" +"1729911808","1729912063","AU" +"1729912064","1729912831","ID" +"1729912832","1729913855","JP" +"1729913856","1729914879","TH" +"1729914880","1729915135","ID" +"1729915136","1729915391","IN" +"1729915392","1729918975","ID" +"1729918976","1729919999","BD" +"1729920000","1729921023","TH" +"1729921024","1729922047","AU" +"1729922048","1729923071","AF" +"1729923072","1729924095","VN" +"1729924096","1729925119","IN" +"1729925120","1729926143","HK" +"1729926144","1729926655","ID" +"1729926656","1729928191","PK" +"1729928192","1729929215","IN" +"1729929216","1729929471","AU" +"1729929472","1729929727","ID" +"1729929728","1729929983","MY" +"1729929984","1729930239","ID" +"1729930240","1729932287","JP" +"1729932288","1729933311","VN" +"1729933312","1729934335","ID" +"1729934336","1729935359","IN" +"1729935360","1729936383","JP" +"1729936384","1729938431","ID" +"1729938432","1729939455","AU" +"1729939456","1729939967","TW" +"1729939968","1729940479","PH" +"1729940480","1729941503","CN" +"1729941504","1729942527","SG" +"1729942528","1729943551","IN" +"1729943552","1729944063","AU" +"1729944064","1729946623","ID" +"1729946624","1729949695","JP" +"1729949696","1729950207","IN" +"1729950208","1729950719","KH" +"1729950720","1729952767","JP" +"1729952768","1729953791","IN" +"1729953792","1729954815","MY" +"1729954816","1729955839","ID" +"1729955840","1729956863","BD" +"1729956864","1729957887","HK" +"1729957888","1729958911","CN" +"1729958912","1729959935","PH" +"1729959936","1729960959","SG" +"1729960960","1729961471","IN" +"1729961472","1729961983","NZ" +"1729961984","1729964031","IN" +"1729964032","1729965055","AU" +"1729965056","1729966079","IN" +"1729966080","1729967103","JP" +"1729967104","1729968127","AU" +"1729968128","1729969151","MY" +"1729969152","1729970175","LK" +"1729970176","1729971199","AU" +"1729971200","1729972223","JP" +"1729972224","1729973247","HK" +"1729973248","1729974271","AU" +"1729974272","1729975295","PH" +"1729975296","1729976831","AU" +"1729976832","1729977343","NZ" +"1729977344","1729978367","HK" +"1729978368","1729979391","IN" +"1729979392","1729980415","AU" +"1729980416","1729980927","BD" +"1729980928","1729982463","SG" +"1729982464","1729982719","AU" +"1729982720","1729982975","JP" +"1729982976","1729983231","SG" +"1729983232","1729983487","AU" +"1729983488","1729984511","IN" +"1729984512","1729985535","ID" +"1729985536","1729986559","BD" +"1729986560","1729989631","CN" +"1729989632","1729990655","HK" +"1729990656","1729991679","MN" +"1729991680","1729992703","ID" +"1729992704","1729993727","NC" +"1729993728","1729994751","IN" +"1729994752","1729995519","AU" +"1729995520","1729995775","PK" +"1729995776","1729996799","ID" +"1729996800","1729997311","AU" +"1729997312","1729997823","ID" +"1729997824","1729998847","AU" +"1729998848","1730000895","JP" +"1730000896","1730001919","ID" +"1730001920","1730002943","TH" +"1730002944","1730003967","AU" +"1730003968","1730004223","ID" +"1730004224","1730004479","IN" +"1730004480","1730004735","MY" +"1730004736","1730004991","MN" +"1730004992","1730007039","AU" +"1730007040","1730008063","IN" +"1730008064","1730009087","ID" +"1730009088","1730010111","AU" +"1730010112","1730011135","IN" +"1730011136","1730012159","BT" +"1730012160","1730013183","ID" +"1730013184","1730015231","IN" +"1730015232","1730016255","MY" +"1730016256","1730017279","PH" +"1730017280","1730017791","IN" +"1730017792","1730019327","PH" +"1744175104","1744176127","ID" +"1744176128","1744177151","AU" +"1744177152","1744179199","CN" +"1744179200","1744180223","TH" +"1744180224","1744181247","PH" +"1744181248","1744182271","TH" +"1744182272","1744184575","AU" +"1744184576","1744184831","SG" +"1744184832","1744185087","HK" +"1744185088","1744185343","AU" +"1744185344","1744186367","HK" +"1744186368","1744187903","IN" +"1744187904","1744188159","TH" +"1744188160","1744188415","AU" +"1744188416","1744189439","NZ" +"1744189440","1744190463","KR" +"1744190464","1744191487","JP" +"1744191488","1744192511","IN" +"1744192512","1744194559","JP" +"1744194560","1744194815","ID" +"1744194816","1744195071","HK" +"1744195072","1744195327","SG" +"1744195328","1744195583","HK" +"1744195584","1744196607","JP" +"1744196608","1744197631","IN" +"1744197632","1744198655","MY" +"1744198656","1744199679","SG" +"1744199680","1744201727","AU" +"1744201728","1744201983","VN" +"1744202240","1744202495","IN" +"1744202496","1744202751","ID" +"1744202752","1744203775","PK" +"1744203776","1744204799","MY" +"1744204800","1744205823","ID" +"1744205824","1744207871","CN" +"1744207872","1744208127","AU" +"1744208128","1744208383","ID" +"1744208384","1744208895","AU" +"1744208896","1744209919","CN" +"1744209920","1744210943","AU" +"1744210944","1744211967","SG" +"1744211968","1744212991","KH" +"1744212992","1744214015","JP" +"1744214016","1744216063","CN" +"1744216064","1744217087","HK" +"1744217088","1744218111","JP" +"1744218112","1744218367","AU" +"1744218368","1744218623","ID" +"1744218624","1744219135","IN" +"1744219136","1744220159","PH" +"1744220160","1744221183","HK" +"1744221184","1744222207","NZ" +"1744222208","1744222719","ID" +"1744222720","1744223231","AU" +"1744223232","1744224255","TH" +"1744224256","1744225279","JP" +"1744225280","1744226303","IN" +"1744226304","1744227327","SG" +"1744227328","1744228351","MY" +"1744228352","1744229375","TW" +"1744229376","1744230399","IN" +"1744230400","1744230655","HK" +"1744230656","1744230911","MY" +"1744230912","1744231423","IN" +"1744231424","1744232447","VN" +"1744232448","1744233471","IN" +"1744233472","1744234495","KH" +"1744234496","1744234751","JP" +"1744234752","1744235519","AU" +"1744235520","1744236543","KR" +"1744236544","1744237567","IN" +"1744237568","1744238591","HK" +"1744238592","1744239103","US" +"1744239104","1744239615","NZ" +"1744239616","1744240639","JP" +"1744240640","1744241663","AU" +"1744241664","1744242687","JP" +"1744242688","1744245503","ID" +"1744245504","1744245759","AU" +"1744245760","1744247807","ID" +"1744247808","1744248831","IN" +"1744248832","1744250367","ID" +"1744250368","1744250879","PH" +"1744250880","1744251903","ID" +"1744251904","1744252927","BD" +"1744252928","1744253951","LK" +"1744253952","1744254975","JP" +"1744254976","1744255999","NZ" +"1744256000","1744257023","TH" +"1744257024","1744257535","AU" +"1744257536","1744257791","PK" +"1744257792","1744258047","AU" +"1744258048","1744259071","JP" +"1744259072","1744260095","NZ" +"1744260096","1744261119","AU" +"1744261120","1744262143","IN" +"1744262144","1744264191","JP" +"1744264192","1744265215","HK" +"1744265216","1744266239","IN" +"1744266240","1744267263","ID" +"1744267264","1744268287","IN" +"1744268288","1744269311","HK" +"1744269312","1744270335","TW" +"1744270336","1744270591","AU" +"1744270592","1744270847","ID" +"1744270848","1744271359","AU" +"1744271360","1744272383","ID" +"1744272384","1744272895","PK" +"1744272896","1744273407","ID" +"1744273408","1744274431","AU" +"1744274432","1744275455","SG" +"1744275456","1744278527","HK" +"1744278528","1744279551","IN" +"1744279552","1744280575","NZ" +"1744280576","1744283647","HK" +"1744283648","1744286719","CN" +"1744287232","1744287743","ID" +"1744287744","1744288767","AU" +"1744288768","1744289791","JP" +"1744289792","1744290815","NZ" +"1744290816","1744291327","ID" +"1744291328","1744291583","AF" +"1744291584","1744291839","SG" +"1744291840","1744292863","CN" +"1744292864","1744293887","SG" +"1744293888","1744294655","IN" +"1744294656","1744294911","ID" +"1744294912","1744295935","CN" +"1744295936","1744296959","ID" +"1744296960","1744297983","KR" +"1744297984","1744298495","AU" +"1744298496","1744299007","ID" +"1744299008","1744300031","HK" +"1744300032","1744301055","KR" +"1744301056","1744301567","AU" +"1744301568","1744302079","BD" +"1744302080","1744303103","JP" +"1744303104","1744303615","ID" +"1744303616","1744303871","IN" +"1744303872","1744304127","NZ" +"1744304128","1744305151","AU" +"1744305152","1744306175","PH" +"1769996288","1772093439","MA" +"1777205248","1777336319","SD" +"1777336320","1778384895","ZA" +"1778384896","1778385151","CN" +"1778385152","1778385407","AU" +"1778385408","1778393087","CN" +"1778401280","1778417663","CN" +"1778417664","1778450431","TH" +"1778450432","1778515967","TW" +"1778515968","1779040255","CN" +"1779040256","1779073023","KR" +"1779073024","1779105791","SG" +"1779105792","1781727231","CN" +"1781727232","1781792767","IN" +"1781792768","1782579199","CN" +"1782579200","1782710271","TW" +"1782710272","1782841343","IN" +"1782841344","1783103487","AU" +"1783103488","1783234559","JP" +"1783234560","1783365631","CN" +"1783365632","1783627775","IN" +"1783627776","1784676351","CN" +"1784676352","1785200639","KR" +"1785200640","1785462783","TW" +"1785462784","1786773503","CN" +"1786773504","1790967807","JP" +"1790967808","1793064959","IN" +"1793064960","1794113535","CN" +"1794113536","1795162111","KR" +"1795162112","1795555359","US" +"1795555360","1795555455","CA" +"1795555456","1795555519","US" +"1795555520","1795555583","CA" +"1795555584","1795555839","US" +"1795555840","1795555855","CA" +"1795555856","1795555863","US" +"1795555864","1795555903","CA" +"1795555904","1795555967","AN" +"1795555968","1795556095","CA" +"1795556096","1795556103","US" +"1795556104","1795556127","CA" +"1795556128","1795556175","US" +"1795556176","1795556183","CA" +"1795556184","1795556191","US" +"1795556192","1795556255","CA" +"1795556256","1795556287","US" +"1795556288","1795556319","QA" +"1795556320","1795556351","US" +"1795556352","1795556607","CA" +"1795556608","1795556623","US" +"1795556624","1795556863","CA" +"1795556864","1795556927","US" +"1795556928","1795556959","CA" +"1795556960","1795556991","US" +"1795556992","1795557119","CA" +"1795557120","1795557135","US" +"1795557136","1795557143","CA" +"1795557144","1795557151","US" +"1795557152","1795557215","CA" +"1795557216","1795557247","US" +"1795557248","1795557375","CA" +"1795557376","1795557631","IN" +"1795557632","1795558655","US" +"1795558656","1795558911","A1" +"1795558912","1795559423","US" +"1795559424","1795559679","AR" +"1795559680","1795559743","US" +"1795559744","1795559807","AE" +"1795559808","1795560447","US" +"1795560448","1795560959","CA" +"1795560960","1795561215","US" +"1795561216","1795561359","CA" +"1795561360","1795561471","US" +"1795561472","1795562239","CA" +"1795562240","1795565631","US" +"1795565632","1795565719","CA" +"1795565720","1795565759","US" +"1795565760","1795565791","CA" +"1795565792","1795565807","US" +"1795565808","1795566143","CA" +"1795566144","1795566207","US" +"1795566208","1795566231","CA" +"1795566232","1795566239","US" +"1795566240","1795566303","CA" +"1795566304","1795566335","US" +"1795566336","1795566591","CA" +"1795566592","1795567615","US" +"1795567616","1795567663","CA" +"1795567664","1795567679","US" +"1795567680","1795567695","CA" +"1795567696","1795567711","US" +"1795567712","1795567735","CA" +"1795567736","1795567743","US" +"1795567744","1795567775","CA" +"1795567776","1795567791","US" +"1795567792","1795567807","CA" +"1795567808","1795567999","US" +"1795568000","1795568639","CA" +"1795568640","1795568911","US" +"1795568912","1795568927","CA" +"1795568928","1795569663","US" +"1795569664","1795570175","CA" +"1795570176","1795570943","US" +"1795570944","1795571215","CA" +"1795571216","1795571223","US" +"1795571224","1795571231","CA" +"1795571232","1795571327","US" +"1795571328","1795571391","CA" +"1795571392","1795571423","US" +"1795571424","1795571455","CA" +"1795571456","1795583999","US" +"1795584000","1795588095","SG" +"1795588096","1796257919","US" +"1796257920","1796258047","PR" +"1796258048","1796262911","US" +"1796262912","1796263167","PR" +"1796263168","1796325375","US" +"1796325376","1796325631","PR" +"1796325632","1796514244","US" +"1796514245","1796514245","A1" +"1796514246","1803550719","US" +"1807745024","1815805951","US" +"1815805952","1815806207","FR" +"1815806208","1815806463","A1" +"1815806464","1815806527","US" +"1815806528","1815806559","GB" +"1815806560","1815806719","US" +"1815806720","1815806847","GB" +"1815806848","1815806917","US" +"1815806918","1815806925","AR" +"1815806926","1815807103","US" +"1815807104","1815807135","SC" +"1815807136","1815807199","US" +"1815807200","1815807231","GB" +"1815807232","1815807302","US" +"1815807303","1815807312","DE" +"1815807313","1815807679","US" +"1815807680","1815807743","GB" +"1815807744","1815807775","SC" +"1815807776","1815807776","US" +"1815807777","1815807794","GB" +"1815807795","1815807839","US" +"1815807840","1815807935","GB" +"1815807936","1815807999","US" +"1815808000","1815808255","A1" +"1815808256","1815808292","US" +"1815808293","1815808300","GB" +"1815808301","1815808304","US" +"1815808305","1815808314","GB" +"1815808315","1815808393","US" +"1815808394","1815808404","GB" +"1815808405","1815808586","US" +"1815808587","1815808598","AE" +"1815808599","1815808656","US" +"1815808657","1815808657","A1" +"1815808658","1815808719","US" +"1815808720","1815808731","GB" +"1815808732","1815808737","US" +"1815808738","1815808758","GB" +"1815808759","1815808767","US" +"1815808768","1815808831","SC" +"1815808832","1815808844","US" +"1815808845","1815808857","GB" +"1815808858","1815808874","US" +"1815808875","1815808883","GB" +"1815808884","1815808895","US" +"1815808896","1815808959","SC" +"1815808960","1815809005","US" +"1815809006","1815809015","GB" +"1815809016","1815809196","US" +"1815809197","1815809205","IE" +"1815809206","1815809319","US" +"1815809320","1815809327","NL" +"1815809328","1815809328","US" +"1815809329","1815809337","SE" +"1815809338","1815809439","US" +"1815809440","1815809471","SC" +"1815809472","1815809503","DK" +"1815809504","1815809504","US" +"1815809505","1815809513","GB" +"1815809514","1815809535","US" +"1815809536","1815809599","SC" +"1815809600","1815809644","US" +"1815809645","1815809654","AN" +"1815809655","1815809664","US" +"1815809665","1815809686","DK" +"1815809687","1815809702","US" +"1815809703","1815809721","DK" +"1815809722","1815809766","US" +"1815809767","1815809784","DK" +"1815809785","1815822335","US" +"1815822336","1815826431","CA" +"1815826432","1815871487","US" +"1815871488","1815879679","CA" +"1815879680","1815905034","US" +"1815905035","1815905038","A1" +"1815905039","1815912447","US" +"1815912448","1815920639","CA" +"1815920640","1815928831","US" +"1815928832","1815937023","BS" +"1815937024","1815957823","US" +"1815957824","1815957887","A1" +"1815957888","1816001791","US" +"1816001792","1816002559","NL" +"1816002560","1816007167","US" +"1816007168","1816007175","CA" +"1816007176","1816024319","US" +"1816024320","1816024575","CA" +"1816024576","1816031343","US" +"1816031344","1816031351","CA" +"1816031352","1816068095","US" +"1816068096","1816133631","CA" +"1816133632","1822429183","US" +"1822429184","1822433279","CA" +"1822433280","1822445567","US" +"1822445568","1822453759","CA" +"1822453760","1822486527","US" +"1822486528","1822490623","CA" +"1822490624","1822498815","US" +"1822498816","1822502911","CA" +"1822502912","1822519295","US" +"1822519296","1822523391","CA" +"1822523392","1822531583","US" +"1822531584","1822535679","CA" +"1822535680","1822572543","US" +"1822572544","1822605311","CA" +"1822605312","1822654463","US" +"1822654464","1822670847","CA" +"1822670848","1822818367","US" +"1822818368","1822818375","CA" +"1822818376","1822818999","US" +"1822819000","1822819007","CA" +"1822819008","1822819031","US" +"1822819032","1822819039","IL" +"1822819040","1822819215","US" +"1822819216","1822819223","CA" +"1822819224","1822819347","US" +"1822819348","1822819351","NO" +"1822819352","1822819355","US" +"1822819356","1822819359","AU" +"1822819360","1822819563","US" +"1822819564","1822819567","AU" +"1822819568","1822819839","US" +"1822819840","1822819843","PE" +"1822819844","1822819891","US" +"1822819892","1822819895","CA" +"1822819896","1822820039","US" +"1822820040","1822820043","IL" +"1822820044","1822820147","US" +"1822820148","1822820151","AU" +"1822820152","1822820195","US" +"1822820196","1822820199","AU" +"1822820200","1822820327","US" +"1822820328","1822820331","AU" +"1822820332","1822821183","US" +"1822821184","1822821199","IN" +"1822821200","1822822135","US" +"1822822136","1822822183","IL" +"1822822184","1822822239","US" +"1822822240","1822822247","IN" +"1822822248","1822822863","US" +"1822822864","1822822871","CA" +"1822822872","1822823423","US" +"1822823424","1822823431","CA" +"1822823432","1822823671","US" +"1822823672","1822823679","CY" +"1822823680","1822825003","US" +"1822825004","1822825007","AU" +"1822825008","1822825119","US" +"1822825120","1822825123","CA" +"1822825124","1822825135","US" +"1822825136","1822825139","CY" +"1822825140","1822825143","NZ" +"1822825144","1822825211","US" +"1822825212","1822825215","NO" +"1822825216","1822825783","US" +"1822825784","1822825791","AU" +"1822825792","1822825895","US" +"1822825896","1822825903","NZ" +"1822825904","1822826151","US" +"1822826152","1822826175","IL" +"1822826176","1822826207","US" +"1822826208","1822826215","AU" +"1822826216","1822826559","US" +"1822826560","1822826575","MX" +"1822826576","1822826975","US" +"1822826976","1822827007","IL" +"1822827008","1822827055","US" +"1822827056","1822827063","DK" +"1822827064","1822827167","US" +"1822827168","1822827175","IL" +"1822827176","1822827183","US" +"1822827184","1822827191","DK" +"1822827192","1822827311","US" +"1822827312","1822827319","IN" +"1822827320","1822827463","US" +"1822827464","1822827471","AU" +"1822827472","1822827687","US" +"1822827688","1822827691","CZ" +"1822827692","1822827727","US" +"1822827728","1822827731","CA" +"1822827732","1822827771","US" +"1822827772","1822827775","AU" +"1822827776","1822827871","US" +"1822827872","1822827879","AU" +"1822827880","1822949375","US" +"1822949376","1822982143","CA" +"1822982144","1823081975","US" +"1823081976","1823081983","ID" +"1823081984","1823082199","US" +"1823082200","1823082207","TR" +"1823082208","1823084799","US" +"1823084800","1823084807","TR" +"1823084808","1823084959","US" +"1823084960","1823084967","MV" +"1823084968","1823113215","US" +"1823113216","1823129599","CA" +"1823129600","1823162367","US" +"1823162368","1823170559","CA" +"1823170560","1823187975","US" +"1823187976","1823187983","FI" +"1823187984","1823188279","US" +"1823188280","1823188287","MX" +"1823188288","1823188311","US" +"1823188312","1823188319","IN" +"1823188320","1823189011","US" +"1823189012","1823189015","AU" +"1823189016","1823189047","US" +"1823189048","1823189075","KY" +"1823189076","1823189155","US" +"1823189156","1823189159","AU" +"1823189160","1823211519","US" +"1823211520","1823342591","CA" +"1823342592","1823346687","US" +"1823346688","1823350783","CA" +"1823350784","1823354879","US" +"1823354880","1823354895","GB" +"1823354896","1823354903","BE" +"1823354904","1823354927","US" +"1823354928","1823354935","VE" +"1823354936","1823355039","US" +"1823355040","1823355047","GB" +"1823355048","1823355055","US" +"1823355056","1823355063","GB" +"1823355064","1823355071","CA" +"1823355072","1823355087","SE" +"1823355088","1823355095","US" +"1823355096","1823355111","SE" +"1823355112","1823355119","US" +"1823355120","1823355127","VE" +"1823355128","1823355135","US" +"1823355136","1823355263","GB" +"1823355264","1823355391","US" +"1823355392","1823355455","ES" +"1823355456","1823355487","US" +"1823355488","1823355495","SE" +"1823355496","1823357951","US" +"1823357952","1823357983","SE" +"1823357984","1823358207","US" +"1823358208","1823358239","SE" +"1823358240","1823361791","US" +"1823361792","1823362303","CA" +"1823362304","1823375359","US" +"1823375360","1823379455","CA" +"1823379456","1823383551","US" +"1823383552","1823387647","CA" +"1823387648","1823428607","US" +"1823428608","1823432703","CA" +"1823432704","1823465471","US" +"1823465472","1823469567","CA" +"1823469568","1823735807","US" +"1824522240","1826955551","US" +"1826955552","1826955559","AD" +"1826955560","1828716543","US" +"1828716544","1830813695","FR" +"1830813696","1831337983","NL" +"1831337984","1831862271","DE" +"1831862272","1832124415","PT" +"1832124416","1832386559","IT" +"1832386560","1832517631","DK" +"1832517632","1832583167","SE" +"1832583168","1832648703","DK" +"1832648704","1832681471","HR" +"1832681472","1832714239","RU" +"1832714240","1832747007","HU" +"1832747008","1832779775","RU" +"1832779776","1832812543","FR" +"1832812544","1832845311","RU" +"1832845312","1832878079","BH" +"1832878080","1832910847","RU" +"1832910848","1833172991","IL" +"1833172992","1833177087","GB" +"1833177088","1833179135","RU" +"1833179136","1833181183","IT" +"1833181184","1833183231","GB" +"1833183232","1833185279","UA" +"1833185280","1833187327","DE" +"1833187328","1833189375","NL" +"1833189376","1833191423","GB" +"1833191424","1833193471","RU" +"1833193472","1833195519","ES" +"1833195520","1833197567","NO" +"1833197568","1833199615","DE" +"1833199616","1833201663","AT" +"1833201664","1833203711","RU" +"1833203712","1833205759","AM" +"1833205760","1833207807","FI" +"1833207808","1833209855","RU" +"1833209856","1833211903","GR" +"1833211904","1833213951","IT" +"1833213952","1833215999","BE" +"1833216000","1833218047","RU" +"1833218048","1833220095","NO" +"1833220096","1833222143","RU" +"1833222144","1833224191","GB" +"1833224192","1833228287","RU" +"1833228288","1833232383","DE" +"1833232384","1833234431","TJ" +"1833234432","1833236479","GB" +"1833236480","1833238527","FI" +"1833238528","1833240575","AL" +"1833240576","1833242623","ES" +"1833242624","1833246719","RU" +"1833246720","1833248767","FI" +"1833248768","1833250815","MK" +"1833250816","1833254911","GB" +"1833254912","1833256959","DE" +"1833256960","1833259007","RU" +"1833259008","1833261055","GB" +"1833261056","1833263103","PL" +"1833263104","1833265151","DE" +"1833265152","1833267199","GB" +"1833267200","1833269247","HU" +"1833269248","1833271295","FI" +"1833271296","1833273343","IT" +"1833273344","1833275391","EU" +"1833275392","1833277439","IT" +"1833277440","1833279487","CH" +"1833279488","1833281535","AL" +"1833281536","1833283583","AT" +"1833283584","1833285631","RU" +"1833285632","1833289727","FR" +"1833289728","1833291775","IT" +"1833291776","1833293823","CZ" +"1833293824","1833294540","BE" +"1833294541","1833294550","NL" +"1833294551","1833294591","FR" +"1833294592","1833295871","BE" +"1833295872","1833297919","NL" +"1833297920","1833299967","GB" +"1833299968","1833302015","LU" +"1833302016","1833304063","AT" +"1833304064","1833308159","NL" +"1833308160","1833308751","FR" +"1833308752","1833308759","NL" +"1833308760","1833308763","FR" +"1833308764","1833308767","NL" +"1833308768","1833308807","FR" +"1833308808","1833308815","NL" +"1833308816","1833308819","FR" +"1833308820","1833308823","NL" +"1833308824","1833308831","FR" +"1833308832","1833308839","NL" +"1833308840","1833308855","FR" +"1833308856","1833308859","NL" +"1833308860","1833310207","FR" +"1833310208","1833312255","RU" +"1833312256","1833314303","ES" +"1833314304","1833315903","IM" +"1833315904","1833315919","GB" +"1833315920","1833316351","IM" +"1833316352","1833318399","DK" +"1833318400","1833320447","GB" +"1833320448","1833320959","AE" +"1833320960","1833321215","IQ" +"1833321216","1833321282","US" +"1833321283","1833321283","AE" +"1833321284","1833321471","US" +"1833321472","1833322495","AE" +"1833322496","1833324543","IT" +"1833324544","1833326591","NO" +"1833326592","1833327103","GB" +"1833327104","1833328639","US" +"1833328640","1833330687","AT" +"1833330688","1833332735","UA" +"1833332736","1833334783","CH" +"1833334784","1833336831","IT" +"1833336832","1833336959","ES" +"1833336960","1833337071","FR" +"1833337072","1833338879","ES" +"1833338880","1833342975","GB" +"1833342976","1833345023","CH" +"1833345024","1833347071","FI" +"1833347072","1833349119","FR" +"1833349120","1833351167","FI" +"1833351168","1833353215","RU" +"1833353216","1833355263","DE" +"1833355264","1833357311","IT" +"1833357312","1833357561","IE" +"1833357562","1833357563","GB" +"1833357564","1833357579","IE" +"1833357580","1833357587","GB" +"1833357588","1833357631","IE" +"1833357632","1833357647","GB" +"1833357648","1833357903","IE" +"1833357904","1833358079","GB" +"1833358080","1833358619","IE" +"1833358620","1833358841","GB" +"1833358842","1833358845","IE" +"1833358846","1833358847","GB" +"1833358848","1833359079","IE" +"1833359080","1833359083","GB" +"1833359084","1833359087","IE" +"1833359088","1833359103","GB" +"1833359104","1833359359","IE" +"1833359360","1833361407","DE" +"1833361408","1833363455","GB" +"1833363456","1833365503","RU" +"1833365504","1833367551","IT" +"1833367552","1833369599","RU" +"1833369600","1833370111","NL" +"1833370112","1833370367","BG" +"1833370368","1833370623","SE" +"1833370624","1833371647","NL" +"1833371648","1833373695","RU" +"1833373696","1833377791","DE" +"1833377792","1833379839","KZ" +"1833379840","1833381887","PT" +"1833381888","1833383935","NL" +"1833383936","1833385983","DK" +"1833385984","1833388031","SK" +"1833388032","1833390079","RU" +"1833390080","1833390207","GB" +"1833390208","1833390335","US" +"1833390336","1833391871","GB" +"1833391872","1833392127","US" +"1833392128","1833396223","CH" +"1833396224","1833398271","NL" +"1833398272","1833400319","DE" +"1833400320","1833402367","GB" +"1833402368","1833406463","FR" +"1833406464","1833406720","GB" +"1833406721","1833406751","NL" +"1833406752","1833406848","GB" +"1833406849","1833406863","ET" +"1833406864","1833406912","GB" +"1833406913","1833406919","CA" +"1833406920","1833408511","GB" +"1833408512","1833409535","RS" +"1833409536","1833410047","AL" +"1833410048","1833410303","RS" +"1833410304","1833410559","AL" +"1833410560","1833412607","PT" +"1833412608","1833414655","GB" +"1833414656","1833416703","RU" +"1833416704","1833418751","NL" +"1833418752","1833422847","RU" +"1833422848","1833424895","CZ" +"1833424896","1833426687","DE" +"1833426688","1833426943","GB" +"1833426944","1833428991","KG" +"1833428992","1833431039","IT" +"1833431040","1833433087","RU" +"1833433088","1833435135","GB" +"1833435136","1833439231","CZ" +"1833439232","1833443327","GB" +"1833443328","1833447423","NL" +"1833447424","1833451519","RS" +"1833451520","1833455615","RU" +"1833455616","1833459711","NL" +"1833459712","1833463807","ME" +"1833463808","1833467903","UA" +"1833467904","1833468079","RU" +"1833468080","1833468159","CH" +"1833468160","1833468287","RU" +"1833468288","1833468575","CH" +"1833468576","1833468591","RU" +"1833468592","1833469439","CH" +"1833469440","1833469951","IN" +"1833469952","1833471999","CH" +"1833472000","1833474047","EU" +"1833474048","1833474559","UA" +"1833474560","1833474815","RU" +"1833474816","1833475071","EU" +"1833475072","1833476095","DE" +"1833476096","1833477375","NL" +"1833477376","1833477503","GB" +"1833477504","1833477631","DE" +"1833477632","1833484287","NL" +"1833484288","1833488383","IR" +"1833488384","1833492479","GB" +"1833492480","1833504767","RU" +"1833504768","1833508863","DE" +"1833508864","1833512959","RU" +"1833512960","1833517055","DE" +"1833517056","1833521151","GB" +"1833521152","1833525247","IT" +"1833525248","1833529343","LV" +"1833529344","1833533439","GB" +"1833533440","1833537535","RU" +"1833537536","1833541631","AT" +"1833541632","1833542143","IL" +"1833542144","1833542655","GB" +"1833542656","1833542911","IN" +"1833542912","1833543168","GB" +"1833543169","1833543423","IN" +"1833543424","1833545727","GB" +"1833545728","1833549823","IT" +"1833549824","1833553919","RU" +"1833553920","1833558015","CZ" +"1833558016","1833562111","RO" +"1833562112","1833566207","PS" +"1833566208","1833570303","SE" +"1833570304","1833573631","GB" +"1833573632","1833574399","NL" +"1833574400","1833578495","YE" +"1833578496","1833582591","HU" +"1833582592","1833586687","TJ" +"1833586688","1833590783","FR" +"1833590784","1833594879","PL" +"1833594880","1833603071","RU" +"1833603072","1833606399","SK" +"1833606400","1833606655","CZ" +"1833606656","1833607167","SK" +"1833607168","1833611263","RU" +"1833611264","1833615359","NO" +"1833615360","1833619455","GB" +"1833619456","1833623551","RU" +"1833623552","1833627647","IR" +"1833627648","1833631743","GB" +"1833631744","1833635839","CZ" +"1833635840","1833636367","DE" +"1833636368","1833636375","AL" +"1833636376","1833639935","DE" +"1833639936","1833644031","AM" +"1833644032","1833644063","TJ" +"1833644064","1833644287","RU" +"1833644288","1833644319","TJ" +"1833644320","1833648127","RU" +"1833648128","1833652223","LB" +"1833652224","1833656511","DE" +"1833656512","1833656543","US" +"1833656544","1833656639","DE" +"1833656640","1833656671","US" +"1833656672","1833656991","DE" +"1833656992","1833657039","US" +"1833657040","1833657151","DE" +"1833657152","1833657215","US" +"1833657216","1833657303","DE" +"1833657304","1833657311","US" +"1833657312","1833657791","DE" +"1833657792","1833657855","US" +"1833657856","1833658047","DE" +"1833658048","1833658111","US" +"1833658112","1833658303","DE" +"1833658304","1833658367","US" +"1833658368","1833658959","DE" +"1833658960","1833658975","US" +"1833658976","1833659103","DE" +"1833659104","1833659199","US" +"1833659200","1833659231","DE" +"1833659232","1833659263","US" +"1833659264","1833659423","DE" +"1833659424","1833659455","US" +"1833659456","1833660351","DE" +"1833660352","1833660415","US" +"1833660416","1833664511","IT" +"1833664512","1833668607","RU" +"1833668608","1833672703","CZ" +"1833672704","1833676799","GB" +"1833676800","1833677567","DE" +"1833677568","1833677599","CH" +"1833677600","1833677775","DE" +"1833677776","1833677783","FR" +"1833677784","1833680895","DE" +"1833680896","1833684991","UA" +"1833684992","1833685015","DE" +"1833685016","1833685023","LU" +"1833685024","1833685067","DE" +"1833685068","1833685071","GB" +"1833685072","1833685847","DE" +"1833685848","1833685851","IE" +"1833685852","1833685855","DE" +"1833685856","1833685871","IE" +"1833685872","1833689087","DE" +"1833689088","1833693183","FI" +"1833693184","1833697279","RU" +"1833697280","1833959423","IE" +"1833959424","1834090495","CZ" +"1834090496","1834221567","SA" +"1834221568","1834352639","DE" +"1834352640","1834483711","UA" +"1834483712","1834614783","BE" +"1834614784","1834745855","DE" +"1834745856","1834876927","RS" +"1834876928","1834885119","RU" +"1834885120","1834893311","FR" +"1834893312","1834901503","RU" +"1834901504","1834909695","RS" +"1834909696","1834913791","GB" +"1834913792","1834917887","RO" +"1834917888","1834921983","UA" +"1834921984","1834930175","RU" +"1834930176","1834934271","UA" +"1834934272","1834938367","RS" +"1834938368","1834944511","PL" +"1834944512","1834946559","RO" +"1834946560","1834948607","RU" +"1834948608","1834950655","PL" +"1834950656","1834956799","UA" +"1834956800","1834960895","IR" +"1834960896","1834964991","RU" +"1834964992","1834967039","PL" +"1834967040","1834971135","RU" +"1834971136","1834973183","PL" +"1834973184","1834975231","RU" +"1834975232","1834977279","IL" +"1834977280","1834983423","PL" +"1834983424","1834985471","RU" +"1834985472","1834989567","PL" +"1834989568","1834991615","GB" +"1834991616","1834993663","RU" +"1834993664","1834995711","PL" +"1834995712","1835001855","RU" +"1835001856","1835003903","PL" +"1835003904","1835005951","CH" +"1835005952","1835007999","RU" +"1835008000","1835532287","RO" +"1835532288","1835540479","SE" +"1835540480","1835548671","DE" +"1835548672","1835549695","GB" +"1835549696","1835550207","ES" +"1835550208","1835561351","GB" +"1835561352","1835561359","A2" +"1835561360","1835565055","GB" +"1835565056","1835573247","AL" +"1835573248","1835581439","UA" +"1835581440","1835589631","BG" +"1835589632","1835597823","IT" +"1835597824","1835606015","HU" +"1835606016","1835614207","CZ" +"1835614208","1835622399","RU" +"1835622400","1835624959","SE" +"1835624960","1835625215","DK" +"1835625216","1835625471","SE" +"1835625472","1835625599","DK" +"1835625600","1835626239","SE" +"1835626240","1835626495","DK" +"1835626496","1835626751","SE" +"1835626752","1835627007","DK" +"1835627008","1835627519","SE" +"1835627520","1835627647","DK" +"1835627648","1835629567","SE" +"1835629568","1835630335","DK" +"1835630336","1835630591","SE" +"1835630592","1835636735","RU" +"1835636736","1835638527","LU" +"1835638528","1835638783","AM" +"1835638784","1835646975","RU" +"1835646976","1835655167","BA" +"1835655168","1835663359","CY" +"1835663360","1835671551","UA" +"1835671552","1835679743","CH" +"1835679744","1835687935","FR" +"1835687936","1835696127","IE" +"1835696128","1835704319","RU" +"1835704320","1835709439","NL" +"1835709440","1835712511","EU" +"1835712512","1835720703","RU" +"1835720704","1835728895","RS" +"1835728896","1835737087","PL" +"1835737088","1835745279","GB" +"1835745280","1835753471","BG" +"1835753472","1835761663","ES" +"1835761664","1835769855","JO" +"1835769856","1835778047","RU" +"1835778048","1835786239","CZ" +"1835786240","1835794431","JO" +"1835794432","1835802623","FI" +"1835802624","1835810815","RU" +"1835810816","1835819007","UA" +"1835819008","1835827199","CZ" +"1835827200","1835835391","GB" +"1835835392","1835843583","ES" +"1835843584","1835851775","NO" +"1835851776","1835859967","UA" +"1835859968","1835868159","DE" +"1835868160","1835876351","IR" +"1835876352","1835884543","NO" +"1835884544","1835892735","NL" +"1835892736","1835909119","GB" +"1835909120","1835913215","RS" +"1835913216","1835917311","RU" +"1835917312","1835917927","GB" +"1835917928","1835917935","IT" +"1835917936","1835918159","GB" +"1835918160","1835918167","IT" +"1835918168","1835918519","GB" +"1835918520","1835918527","IT" +"1835918528","1835918567","GB" +"1835918568","1835918575","IT" +"1835918576","1835918735","GB" +"1835918736","1835918743","IT" +"1835918744","1835919431","GB" +"1835919432","1835919439","IT" +"1835919440","1835919511","GB" +"1835919512","1835919519","IT" +"1835919520","1835919527","GB" +"1835919528","1835919535","IT" +"1835919536","1835920127","GB" +"1835920128","1835920175","PT" +"1835920176","1835920191","GB" +"1835920192","1835920199","PT" +"1835920200","1835920207","GB" +"1835920208","1835920239","PT" +"1835920240","1835920247","GB" +"1835920248","1835920279","PT" +"1835920280","1835920287","GB" +"1835920288","1835920327","PT" +"1835920328","1835920335","GB" +"1835920336","1835920343","PT" +"1835920344","1835920351","GB" +"1835920352","1835920383","PT" +"1835920384","1835920479","GB" +"1835920480","1835920487","IT" +"1835920488","1835920775","GB" +"1835920776","1835920783","IT" +"1835920784","1835921375","GB" +"1835921376","1835921383","IT" +"1835921384","1835921407","GB" +"1835921408","1835921415","IT" +"1835921416","1835921439","GB" +"1835921440","1835921447","IT" +"1835921448","1835922575","GB" +"1835922576","1835922583","IT" +"1835922584","1835924527","GB" +"1835924528","1835924535","IT" +"1835924536","1835924959","GB" +"1835924960","1835924967","IT" +"1835924968","1835925503","GB" +"1835925504","1835933695","LV" +"1835933696","1835941887","RU" +"1835941888","1835950079","UA" +"1835950080","1835958271","LB" +"1835958272","1835966463","HU" +"1835966464","1835974655","IR" +"1835974656","1835982847","PL" +"1835982848","1835991039","CY" +"1835991040","1835999231","RU" +"1835999232","1836007423","IR" +"1836007424","1836015615","RU" +"1836015616","1836023807","AD" +"1836023808","1836040191","RU" +"1836040192","1836048383","GB" +"1836048384","1836048467","RS" +"1836048468","1836048471","SR" +"1836048472","1836056575","RS" +"1836056576","1836580863","IT" +"1836580864","1836597247","RU" +"1836597248","1836597759","LU" +"1836597760","1836606463","DE" +"1836606464","1836613631","LU" +"1836613632","1836630015","RU" +"1836630016","1836646399","BG" +"1836646400","1836679167","RS" +"1836679168","1836711935","BG" +"1836711936","1836728319","UA" +"1836728320","1836744703","RS" +"1836744704","1836761087","FR" +"1836761088","1836777471","IR" +"1836777472","1836793855","SI" +"1836793856","1836810239","GB" +"1836810240","1836826623","RU" +"1836826624","1836843007","CZ" +"1836843008","1836875775","RU" +"1836875776","1836892159","SE" +"1836892160","1836908543","RU" +"1836908544","1836924927","IE" +"1836924928","1836941311","DE" +"1836941312","1836957695","IR" +"1836957696","1836974079","PL" +"1836974080","1836990463","RU" +"1836990464","1837006847","AT" +"1837006848","1837023231","BY" +"1837023232","1837039615","RU" +"1837039616","1837055999","AZ" +"1837056000","1837072383","IQ" +"1837072384","1837088767","RU" +"1837088768","1837105151","SI" +"1837105152","1838153727","BE" +"1838153728","1839202303","GB" +"1839202304","1839235071","BG" +"1839235072","1839267839","IL" +"1839267840","1839300607","RU" +"1839300608","1839333375","BH" +"1839333376","1839366143","UA" +"1839366144","1839398911","IR" +"1839398912","1839431679","NO" +"1839431680","1839448063","BA" +"1839448064","1839450111","KZ" +"1839450112","1839452159","NO" +"1839452160","1839454207","FI" +"1839454208","1839456255","RU" +"1839456256","1839457695","RO" +"1839457696","1839457711","SY" +"1839457712","1839457759","RO" +"1839457760","1839457775","AQ" +"1839457776","1839458687","RO" +"1839458688","1839458719","IN" +"1839458720","1839458759","RO" +"1839458760","1839458760","A1" +"1839458761","1839459327","RO" +"1839459328","1839460159","DE" +"1839460160","1839460223","RO" +"1839460224","1839460351","DE" +"1839460352","1839462399","RU" +"1839462400","1839464447","FI" +"1839464448","1839497215","CZ" +"1839497216","1839529983","CH" +"1839529984","1839562751","RU" +"1839562752","1839595519","BA" +"1839595520","1839661055","RO" +"1839661056","1839693823","UA" +"1839693824","1839726591","RU" +"1839726592","1839753535","IT" +"1839753536","1839753543","ES" +"1839753544","1839756327","IT" +"1839756328","1839756335","FR" +"1839756336","1839759359","IT" +"1839759360","1839792127","RU" +"1839792128","1839794735","GB" +"1839794736","1839794751","CH" +"1839794752","1839794815","GB" +"1839794816","1839794847","MY" +"1839794848","1839795151","GB" +"1839795152","1839795167","US" +"1839795168","1839796607","GB" +"1839796608","1839796671","US" +"1839796672","1839797759","GB" +"1839797760","1839798015","GR" +"1839798016","1839798271","GB" +"1839798272","1839798399","US" +"1839798400","1839798527","GB" +"1839798528","1839798559","US" +"1839798560","1839800127","GB" +"1839800128","1839800159","US" +"1839800160","1839800447","GB" +"1839800448","1839800479","SG" +"1839800480","1839800895","GB" +"1839800896","1839800959","CY" +"1839800960","1839801023","GR" +"1839801024","1839801279","GB" +"1839801280","1839801311","VG" +"1839801312","1839801551","GB" +"1839801552","1839801567","US" +"1839801568","1839802111","GB" +"1839802112","1839802239","RO" +"1839802240","1839806463","GB" +"1839806464","1839811071","US" +"1839811072","1839812607","GB" +"1839812608","1839814143","US" +"1839814144","1839816703","GB" +"1839816704","1839824895","NO" +"1839824896","1839890431","RU" +"1839890432","1839923199","GB" +"1839923200","1839955967","RU" +"1839955968","1839988735","SA" +"1839988736","1840021503","RU" +"1840021504","1840054271","GE" +"1840054272","1840087039","RU" +"1840087040","1840119807","PL" +"1840119808","1840152575","RU" +"1840152576","1840185343","GB" +"1840185344","1840218111","BA" +"1840218112","1840316415","GB" +"1840316416","1840381951","RU" +"1840381952","1840447487","GR" +"1840447488","1840513023","NO" +"1840513024","1840644095","GB" +"1840644096","1840709631","SI" +"1840709632","1840775167","CZ" +"1840775168","1840840703","RU" +"1840840704","1840906239","MD" +"1840906240","1840971775","IL" +"1840971776","1841102847","RU" +"1841102848","1841168383","NO" +"1841168384","1841233919","FR" +"1841233920","1841299455","RU" +"1841299456","1841430527","DE" +"1841430528","1841561599","RU" +"1841561600","1841565695","PL" +"1841565696","1841569791","RU" +"1841569792","1841577983","PL" +"1841577984","1841582079","RU" +"1841582080","1841586175","PL" +"1841586176","1841590271","RU" +"1841590272","1841594367","PL" +"1841594368","1841598463","RU" +"1841598464","1841602559","PL" +"1841602560","1841610751","UA" +"1841610752","1841618943","RU" +"1841618944","1841627135","PL" +"1841627136","1841629183","NO" +"1841629184","1841635327","RU" +"1841635328","1841639423","PL" +"1841639424","1841641471","RU" +"1841641472","1841645567","PL" +"1841645568","1841647615","RU" +"1841647616","1841649663","RO" +"1841649664","1841651711","RU" +"1841651712","1841653759","PL" +"1841653760","1841655807","FR" +"1841655808","1841668095","RU" +"1841668096","1841670143","RO" +"1841670144","1841672191","PL" +"1841672192","1841674239","FR" +"1841674240","1841676287","PL" +"1841676288","1841680383","RU" +"1841680384","1841682431","LV" +"1841682432","1841684479","UA" +"1841684480","1841686527","RU" +"1841686528","1841688575","RO" +"1841688576","1841690623","FR" +"1841690624","1841692671","RU" +"1841692672","1841700863","RS" +"1841700864","1841709055","MD" +"1841709056","1841725439","RU" +"1841725440","1841733631","DK" +"1841733632","1841758207","RU" +"1841758208","1841766399","PL" +"1841766400","1841774591","HU" +"1841774592","1841782783","PL" +"1841782784","1841790975","RO" +"1841790976","1841799167","BG" +"1841799168","1841807359","DE" +"1841807360","1841815551","NO" +"1841815552","1841823743","BG" +"1841823744","1841831935","GB" +"1841831936","1841840127","MT" +"1841840128","1841848319","PL" +"1841848320","1841856511","RU" +"1841856512","1841864769","UA" +"1841864770","1841872895","YE" +"1841872896","1841878015","NL" +"1841878016","1841879039","AU" +"1841879040","1841879551","NL" +"1841879552","1841879807","US" +"1841879808","1841880063","GB" +"1841880064","1841881087","JP" +"1841881088","1841889279","UA" +"1841889280","1841897471","IR" +"1841897472","1841905663","RO" +"1841905664","1841922047","RU" +"1841922048","1841930239","NL" +"1841930240","1841938431","KG" +"1841938432","1841946623","RU" +"1841946624","1841954815","UA" +"1841954816","1841971199","RU" +"1841971200","1841979391","CZ" +"1841979392","1841983487","NL" +"1841983488","1841983999","GI" +"1841984000","1841985535","IM" +"1841985536","1841987583","SI" +"1841987584","1841995775","DK" +"1841995776","1842003967","RU" +"1842003968","1842012159","CH" +"1842012160","1842020351","GB" +"1842020352","1842028543","NO" +"1842028544","1842036735","CH" +"1842036736","1842038783","FR" +"1842038784","1842044927","LU" +"1842044928","1842047369","GB" +"1842047370","1842047371","IN" +"1842047372","1842053119","GB" +"1842053120","1842061311","ES" +"1842061312","1842069503","IR" +"1842069504","1842077695","RU" +"1842077696","1842079743","FR" +"1842079744","1842085887","MQ" +"1842085888","1842118655","GB" +"1842118656","1842151423","FI" +"1842151424","1842153471","FR" +"1842153472","1842153567","NO" +"1842153568","1842153575","GB" +"1842153576","1842153663","NO" +"1842153664","1842153679","NL" +"1842153680","1842153687","NO" +"1842153688","1842153695","NL" +"1842153696","1842153887","NO" +"1842153888","1842153919","DE" +"1842153920","1842153951","NE" +"1842153952","1842153983","NO" +"1842153984","1842154047","US" +"1842154048","1842154111","NO" +"1842154112","1842154115","US" +"1842154116","1842154119","NO" +"1842154120","1842154143","US" +"1842154144","1842154239","NO" +"1842154240","1842154247","HK" +"1842154248","1842154271","NO" +"1842154272","1842154279","CN" +"1842154280","1842154367","NO" +"1842154368","1842154431","US" +"1842154432","1842154447","SG" +"1842154448","1842154495","NO" +"1842154496","1842155007","US" +"1842155008","1842155263","AU" +"1842155264","1842155519","SG" +"1842155520","1842157567","IT" +"1842157568","1842159615","AE" +"1842159616","1842161663","BA" +"1842161664","1842163711","GE" +"1842163712","1842165759","PL" +"1842165760","1842167807","RU" +"1842167808","1842169855","FR" +"1842169856","1842171903","CZ" +"1842171904","1842173951","RU" +"1842173952","1842175999","RO" +"1842176000","1842178047","FI" +"1842178048","1842180095","IT" +"1842180096","1842182143","IQ" +"1842182144","1842184191","LV" +"1842184192","1842186239","DE" +"1842186240","1842188287","ES" +"1842188288","1842190335","RU" +"1842190336","1842192383","GB" +"1842192384","1842194431","AZ" +"1842194432","1842196479","CH" +"1842196480","1842198527","DE" +"1842198528","1842200575","GB" +"1842200576","1842202623","NL" +"1842202624","1842204671","CH" +"1842204672","1842206719","AZ" +"1842206720","1842208767","SE" +"1842208768","1842210815","GB" +"1842210816","1842212863","LT" +"1842212864","1842214655","CZ" +"1842214656","1842216959","RU" +"1842216960","1842225151","RO" +"1842225152","1842233343","UA" +"1842233344","1842241535","RO" +"1842241536","1842249727","RS" +"1842249728","1842257919","RU" +"1842257920","1842266111","EU" +"1842266112","1842274303","PL" +"1842274304","1842282495","RO" +"1842282496","1842286591","RU" +"1842286592","1842290687","GB" +"1842290688","1842294783","RS" +"1842294784","1842298879","PL" +"1842298880","1842302975","UA" +"1842302976","1842307071","RU" +"1842307072","1842311167","PL" +"1842311168","1842315263","UA" +"1842315264","1842319359","RO" +"1842319360","1842323455","PL" +"1842323456","1842331647","RU" +"1842331648","1842335743","UA" +"1842335744","1842339839","RO" +"1842339840","1842343935","RU" +"1842343936","1842348031","UZ" +"1842348032","1843396607","FR" +"1843396608","1843412991","IQ" +"1843412992","1843429375","CZ" +"1843429376","1843462143","GB" +"1843462144","1843478527","RU" +"1843478528","1843494911","SE" +"1843494912","1843511295","IR" +"1843511296","1843527679","RU" +"1843527680","1843544063","IL" +"1843544064","1843560447","RU" +"1843560448","1843576831","DE" +"1843576832","1843593215","RU" +"1843593216","1843609599","HR" +"1843609600","1843625983","UA" +"1843625984","1843642367","ES" +"1843642368","1843658751","RU" +"1843658752","1843675135","GB" +"1843675136","1843691519","ME" +"1843691520","1843707903","SE" +"1843707904","1843724287","TR" +"1843724288","1843732479","UA" +"1843732480","1843765247","RU" +"1843765248","1843773439","KZ" +"1843773440","1843781631","LV" +"1843781632","1843789823","RU" +"1843789824","1843806207","SK" +"1843806208","1843822591","IR" +"1843822592","1843838975","RU" +"1843838976","1843841535","DE" +"1843841536","1843841791","CH" +"1843841792","1843842047","AU" +"1843842048","1843845887","DE" +"1843845888","1843846143","IT" +"1843846144","1843847743","DE" +"1843847744","1843847759","GR" +"1843847760","1843849215","DE" +"1843849216","1843850239","GB" +"1843850240","1843852799","DE" +"1843852800","1843853055","A1" +"1843853056","1843855359","DE" +"1843855360","1843871743","PL" +"1843871744","1843888127","GB" +"1843888128","1843904511","CZ" +"1843904512","1843920895","GB" +"1843920896","1843922943","KZ" +"1843922944","1843924991","NL" +"1843924992","1843927039","ES" +"1843927040","1843929087","PL" +"1843929088","1843931135","IT" +"1843931136","1843933183","NL" +"1843933184","1843935231","IT" +"1843935232","1843937279","GB" +"1843937280","1843939327","ES" +"1843939328","1843941375","DK" +"1843941376","1843943423","FI" +"1843943424","1843945471","CH" +"1843945472","1843947519","FR" +"1843947520","1843949567","RU" +"1843949568","1843951615","BY" +"1843951616","1843955711","DE" +"1843955712","1843957759","IT" +"1843957760","1843959807","CZ" +"1843959808","1843961855","GB" +"1843961856","1843965951","DE" +"1843965952","1843967999","GB" +"1843968000","1843970047","RU" +"1843970048","1843972095","FR" +"1843972096","1843974143","HU" +"1843974144","1843976191","ES" +"1843976192","1843978239","TR" +"1843978240","1843980287","NL" +"1843980288","1843982335","FR" +"1843982336","1843984383","PL" +"1843984384","1843985407","RU" +"1843985408","1843985663","UA" +"1843985664","1843986431","RU" +"1843986432","1843988479","NO" +"1843988480","1843988527","GB" +"1843988528","1843988528","EU" +"1843988529","1843990527","GB" +"1843990528","1843992575","LB" +"1843992576","1843994623","AT" +"1843994624","1844000767","GB" +"1844000768","1844001791","NO" +"1844001792","1844002303","NL" +"1844002304","1844002559","NO" +"1844002560","1844002815","NL" +"1844002816","1844006911","CZ" +"1844006912","1844008959","SM" +"1844008960","1844011007","PL" +"1844011008","1844013055","IT" +"1844013056","1844015103","PL" +"1844015104","1844017151","GB" +"1844017152","1844021247","IT" +"1844021248","1844027391","DE" +"1844027392","1844029439","CZ" +"1844029440","1844031487","RU" +"1844031488","1844031743","EU" +"1844031744","1844031775","CH" +"1844031776","1844031999","EU" +"1844032000","1844032255","GB" +"1844032256","1844033023","CH" +"1844033024","1844033271","EU" +"1844033272","1844033535","CH" +"1844033536","1844035583","RS" +"1844035584","1844037631","MD" +"1844037632","1844041727","RU" +"1844041728","1844043775","IT" +"1844043776","1844049919","RU" +"1844049920","1844051967","DE" +"1844051968","1844054015","FR" +"1844054016","1844056063","RU" +"1844056064","1844058111","IL" +"1844058112","1844062207","RU" +"1844062208","1844064255","CZ" +"1844064256","1844068351","IT" +"1844068352","1844068479","FR" +"1844068480","1844070399","ES" +"1844070400","1844071423","GB" +"1844071424","1844072447","DE" +"1844072448","1844076543","ES" +"1844076544","1844076575","GB" +"1844076576","1844076639","IE" +"1844076640","1844076655","GB" +"1844076656","1844076775","IE" +"1844076776","1844076783","GB" +"1844076784","1844076791","IE" +"1844076792","1844076799","GB" +"1844076800","1844076991","IE" +"1844076992","1844077007","GB" +"1844077008","1844077031","IE" +"1844077032","1844077055","GB" +"1844077056","1844077287","IE" +"1844077288","1844077311","GB" +"1844077312","1844077463","IE" +"1844077464","1844077471","GB" +"1844077472","1844077503","IE" +"1844077504","1844077567","GB" +"1844077568","1844077631","IE" +"1844077632","1844078559","GB" +"1844078560","1844078575","IE" +"1844078576","1844078591","GB" +"1844078592","1844080127","DE" +"1844080128","1844080639","PL" +"1844080640","1844082687","GE" +"1844082688","1844084055","DE" +"1844084056","1844084071","CH" +"1844084072","1844084735","DE" +"1844084736","1844086783","RU" +"1844086784","1844088831","IT" +"1844088832","1844090879","AT" +"1844090880","1844092927","RU" +"1844092928","1844094975","FR" +"1844094976","1844099071","GB" +"1844099072","1844101119","DE" +"1844101120","1844105215","GB" +"1844105216","1844107263","ES" +"1844107264","1844107807","DE" +"1844107808","1844107823","CH" +"1844107824","1844109311","DE" +"1844109312","1844109567","US" +"1844109568","1844111359","GB" +"1844111360","1844113407","AL" +"1844113408","1844115455","FI" +"1844115456","1844117503","DE" +"1844117504","1844119551","CZ" +"1844119552","1844121599","UA" +"1844121600","1844123647","ES" +"1844123648","1844125695","RU" +"1844125696","1844127743","NL" +"1844127744","1844129791","DE" +"1844129792","1844131583","NL" +"1844131584","1844131647","SC" +"1844131648","1844131711","NL" +"1844131712","1844131775","RU" +"1844131776","1844131807","US" +"1844131808","1844131817","NL" +"1844131818","1844131839","US" +"1844131840","1844131849","DE" +"1844131850","1844131865","AT" +"1844131866","1844133887","DE" +"1844133888","1844135935","LT" +"1844135936","1844137983","NL" +"1844137984","1844140031","FR" +"1844140032","1844142079","RU" +"1844142080","1844144127","RS" +"1844144128","1844146175","SM" +"1844146176","1844148223","NO" +"1844148224","1844150271","GB" +"1844150272","1844152319","ES" +"1844152320","1844154355","DE" +"1844154356","1844154367","NL" +"1844154368","1844156415","GB" +"1844156416","1844158463","IT" +"1844158464","1844160511","RU" +"1844160512","1844162559","SE" +"1844162560","1844164607","CZ" +"1844164608","1844166655","RU" +"1844166656","1844168703","AZ" +"1844168704","1844169471","SE" +"1844169472","1844169487","AF" +"1844169488","1844169519","US" +"1844169520","1844169599","SE" +"1844169600","1844169647","US" +"1844169648","1844169655","AF" +"1844169656","1844169663","SE" +"1844169664","1844169679","US" +"1844169680","1844169687","ZM" +"1844169688","1844169695","IQ" +"1844169696","1844169703","KZ" +"1844169704","1844169707","ZA" +"1844169708","1844169727","SE" +"1844169728","1844169767","DE" +"1844169768","1844169951","US" +"1844169952","1844169983","DE" +"1844169984","1844169995","AF" +"1844169996","1844169999","TM" +"1844170000","1844170015","AF" +"1844170016","1844170019","NG" +"1844170020","1844170027","AF" +"1844170028","1844170031","IQ" +"1844170032","1844170051","AF" +"1844170052","1844170055","GH" +"1844170056","1844170063","AF" +"1844170064","1844170067","DE" +"1844170068","1844170071","NG" +"1844170072","1844170075","CG" +"1844170076","1844170079","DE" +"1844170080","1844170083","CG" +"1844170084","1844170091","NG" +"1844170092","1844170095","ZM" +"1844170096","1844170099","AF" +"1844170100","1844170103","MA" +"1844170104","1844170111","AF" +"1844170112","1844170119","DE" +"1844170120","1844170123","AF" +"1844170124","1844170127","LY" +"1844170128","1844170135","NG" +"1844170136","1844170139","AF" +"1844170140","1844170239","DE" +"1844170240","1844170255","AF" +"1844170256","1844170263","IQ" +"1844170264","1844170303","AF" +"1844170304","1844170751","DE" +"1844170752","1844174847","RU" +"1844174848","1844178943","DE" +"1844178944","1844180991","EE" +"1844180992","1844181488","TR" +"1844181489","1844181503","DE" +"1844181504","1844181608","TR" +"1844181609","1844181616","CA" +"1844181617","1844181824","TR" +"1844181825","1844181839","GB" +"1844181840","1844181952","TR" +"1844181953","1844181958","GB" +"1844181959","1844181984","TR" +"1844181985","1844181990","GB" +"1844181991","1844183039","TR" +"1844183040","1844191231","IT" +"1844191232","1844195327","AL" +"1844195328","1844203519","RU" +"1844203520","1844207615","NL" +"1844207616","1844211711","RU" +"1844211712","1844215807","SK" +"1844215808","1844219903","BE" +"1844219904","1844220159","KE" +"1844220160","1844220287","DE" +"1844220288","1844220415","LB" +"1844220416","1844220671","A2" +"1844220672","1844220927","DE" +"1844220928","1844221951","A2" +"1844221952","1844222975","DE" +"1844222976","1844223487","US" +"1844223488","1844223743","DE" +"1844223744","1844223999","A2" +"1844224000","1844228095","GB" +"1844228096","1844228479","DK" +"1844228480","1844228511","SE" +"1844228512","1844230159","DK" +"1844230160","1844230175","SE" +"1844230176","1844232191","DK" +"1844232192","1844235775","ES" +"1844235776","1844236031","GB" +"1844236032","1844236287","FR" +"1844236288","1844252671","RU" +"1844252672","1844256767","GB" +"1844256768","1844260863","BA" +"1844260864","1844264959","CH" +"1844264960","1844269055","NL" +"1844269056","1844273151","UA" +"1844273152","1844277247","RU" +"1844277248","1844281343","AZ" +"1844281344","1844285439","DE" +"1844285440","1844289535","RU" +"1844289536","1844293631","IT" +"1844293632","1844297727","DE" +"1844297728","1844301823","IQ" +"1844301824","1844305919","NL" +"1844305920","1844310015","RU" +"1844310016","1844318207","FR" +"1844318208","1844322303","IT" +"1844322304","1844326399","CZ" +"1844326400","1844330239","DK" +"1844330240","1844330303","LU" +"1844330304","1844330423","DK" +"1844330424","1844330439","LU" +"1844330440","1844330495","DK" +"1844330496","1844334591","GB" +"1844334592","1844342783","RU" +"1844342784","1844346879","IT" +"1844346880","1844347007","US" +"1844347008","1844347135","GB" +"1844347136","1844347263","BE" +"1844347264","1844347903","GB" +"1844347904","1844348159","US" +"1844348160","1844348671","GB" +"1844348672","1844348927","BE" +"1844348928","1844349439","GB" +"1844349440","1844349951","US" +"1844349952","1844350207","HK" +"1844350208","1844350719","CA" +"1844350720","1844350975","GB" +"1844350976","1844355071","SY" +"1844355072","1844359167","KZ" +"1844359168","1844363263","IR" +"1844363264","1844367359","RU" +"1844367360","1844371455","CZ" +"1844371456","1844375551","GE" +"1844375552","1844379647","RU" +"1844379648","1844383743","IR" +"1844383744","1844387839","AZ" +"1844387840","1844391935","KZ" +"1844391936","1844396031","DE" +"1844396032","1844400127","CZ" +"1844400128","1844408319","GB" +"1844408320","1844412415","FR" +"1844412416","1844414207","RU" +"1844414208","1844414463","SE" +"1844414464","1844414719","NL" +"1844414720","1844414975","US" +"1844414976","1844416511","RU" +"1844416512","1844420607","FR" +"1844420608","1844424703","DE" +"1844424704","1844428799","SI" +"1844428800","1844432895","DE" +"1844432896","1844436991","RU" +"1844436992","1844441087","NO" +"1844441088","1844445183","IT" +"1844445184","1844510719","FI" +"1844510720","1844576255","RU" +"1844576256","1844641791","GR" +"1844641792","1844707327","PL" +"1844707328","1844772863","RU" +"1844772864","1844838399","RS" +"1844838400","1844903935","GB" +"1844903936","1844969471","NO" +"1844969472","1845035007","RU" +"1845035008","1845100543","GB" +"1845100544","1845166079","DE" +"1845166080","1845231615","UA" +"1845231616","1845297151","RU" +"1845297152","1845362687","IL" +"1845362688","1845428223","UA" +"1845428224","1845493759","IE" +"1845493760","1845755903","JP" +"1845755904","1845764095","HK" +"1845764096","1845766143","JP" +"1845766144","1845768191","MY" +"1845768192","1845772287","JP" +"1845772288","1845788671","KR" +"1845788672","1845837823","JP" +"1845837824","1845839871","PH" +"1845839872","1845841919","IN" +"1845841920","1845846015","AU" +"1845846016","1845850111","ID" +"1845850112","1845851135","WS" +"1845851136","1845852159","AU" +"1845852160","1845854207","JP" +"1845854208","1845886975","KR" +"1845886976","1846018047","CN" +"1846018048","1846542335","KR" +"1846542336","1846804479","CN" +"1846804480","1847066623","AU" +"1847066624","1847590911","TW" +"1847590912","1847721983","AU" +"1847721984","1847730175","NP" +"1847730176","1847732223","PK" +"1847734272","1847735295","NZ" +"1847735296","1847736319","AU" +"1847736320","1847738367","HK" +"1847738368","1847754751","KR" +"1847754752","1847787519","TH" +"1847787520","1847803903","KR" +"1847803904","1847807999","VN" +"1847808000","1847810047","ID" +"1847810048","1847812095","FJ" +"1847812096","1847853055","KR" +"1847853056","1848115199","PK" +"1848115200","1848377343","CN" +"1848381440","1848382463","NZ" +"1848382464","1848383487","JP" +"1848383488","1848385535","AU" +"1848385536","1848393727","KR" +"1848393728","1848401919","JP" +"1848401920","1848406015","PH" +"1848406016","1848410111","NP" +"1848410112","1848414207","PH" +"1848414208","1848418303","CN" +"1848418304","1848420351","AU" +"1848420352","1848422399","ID" +"1848422400","1848424447","JP" +"1848424448","1848426495","VN" +"1848426496","1848639487","KR" +"1848639488","1848705023","CN" +"1848705024","1848770559","TH" +"1848770560","1848774655","JP" +"1848774656","1848776703","AU" +"1848776704","1848778751","JP" +"1848778752","1848786943","IN" +"1848786944","1848791039","JP" +"1848791040","1848793087","ID" +"1848793088","1848803327","JP" +"1848803328","1848819711","TW" +"1848819712","1848827903","JP" +"1848827904","1848831999","PH" +"1848832000","1848836095","JP" +"1848836096","1849032703","CN" +"1849032704","1849065471","JP" +"1849065472","1849163775","PH" +"1849163776","1849819135","CN" +"1849819136","1849950207","JP" +"1849950208","1850212351","KR" +"1850212352","1850343423","CN" +"1850343424","1850376191","JP" +"1850376192","1850392575","MY" +"1850392576","1850400767","KH" +"1850400768","1850408959","JP" +"1850408960","1850490879","CN" +"1850490880","1850507263","KR" +"1850507264","1850510335","AU" +"1850510336","1850511359","KR" +"1850511360","1850513407","ID" +"1850513408","1850514431","TH" +"1850514432","1850515455","CN" +"1850515456","1850519551","IN" +"1850519552","1850520575","AU" +"1850520576","1850521599","JP" +"1850521600","1850522623","CN" +"1850522624","1850523647","HK" +"1850523648","1850572799","CN" +"1850572800","1850671103","TH" +"1850671104","1850736639","HK" +"1850736640","1851523071","CN" +"1851523072","1851527167","JP" +"1851527168","1851528191","NZ" +"1851528192","1851529215","KR" +"1851529216","1851531263","PH" +"1851531264","1851539455","JP" +"1851541504","1851542527","ID" +"1851542528","1851543551","HK" +"1851543552","1851547647","JP" +"1851547648","1851555839","SG" +"1851555840","1851588607","KR" +"1851588608","1851590655","JP" +"1851590656","1851591679","AU" +"1851591680","1851592703","ID" +"1851592704","1851594751","AU" +"1851594752","1851596799","KR" +"1851596800","1851604991","CN" +"1851604992","1851613183","PH" +"1851613184","1851617279","JP" +"1851617280","1851637759","KR" +"1851637760","1851654143","PK" +"1851654144","1853882367","CN" +"1853882368","1854406655","JP" +"1854406656","1854668799","ID" +"1854668800","1855455231","AU" +"1855455232","1855848447","CN" +"1855848448","1855913983","JP" +"1855913984","1855979519","MY" +"1855979520","1856241663","JP" +"1856241664","1856307199","TH" +"1856307200","1856315391","KR" +"1856315392","1856323583","CN" +"1856323584","1856339967","KR" +"1856339968","1856372735","JP" +"1856372736","1856503807","CN" +"1856503808","1856765951","TH" +"1856765952","1856770047","JP" +"1856770048","1856774143","IN" +"1856774144","1856779263","JP" +"1856779264","1856780287","IN" +"1856780288","1856782335","JP" +"1856782336","1856798719","KR" +"1856798720","1856815103","IN" +"1856815104","1856843775","CN" +"1856843776","1856847871","HK" +"1856847872","1856864255","CN" +"1856864256","1856872447","AU" +"1856872448","1856876543","NZ" +"1856876544","1856880639","IN" +"1856880640","1856888831","CN" +"1856888832","1856892927","AU" +"1856892928","1856897023","JP" +"1856897024","1857028095","AU" +"1857028096","1860173823","CN" +"1860173824","1860435967","IN" +"1860435968","1860698111","CN" +"1860698112","1860706303","JP" +"1860706304","1860714495","CN" +"1860714496","1860722687","ID" +"1860722688","1860726783","KR" +"1860726784","1860728831","AU" +"1860728832","1860733951","JP" +"1860733952","1860734975","AU" +"1860734976","1860735999","NZ" +"1860736000","1860737023","AU" +"1860737024","1860739071","JP" +"1860739072","1860743167","PH" +"1860743168","1860744191","AU" +"1860744192","1860745215","IN" +"1860745216","1860746239","AU" +"1860746240","1860747263","PK" +"1860747264","1860759551","JP" +"1860759552","1860761599","AU" +"1860761600","1860763647","IN" +"1860763648","1860829183","JP" +"1860829184","1860960255","IN" +"1860960256","1861091327","CN" +"1861091328","1861222399","AU" +"1861222400","1866465279","CN" +"1866465280","1866530815","JP" +"1866530816","1866563583","SG" +"1866563584","1866579967","KR" +"1866579968","1866588159","JP" +"1866588160","1866592255","NZ" +"1866592256","1866596351","VN" +"1866596352","1866661887","CN" +"1866661888","1866670079","AU" +"1866670080","1866674175","MY" +"1866674176","1866678271","TW" +"1866678272","1866686463","ID" +"1866686464","1866690559","KH" +"1866690560","1866711039","JP" +"1866711040","1866715135","CN" +"1866715136","1866727423","KR" +"1866727424","1866731519","HK" +"1866731520","1866733567","JP" +"1866733568","1866735615","ID" +"1866735616","1866743807","PH" +"1866743808","1866751999","CN" +"1866752000","1866756095","PK" +"1866756096","1866760191","ID" +"1866760192","1866792959","JP" +"1866792960","1866858495","NZ" +"1866858496","1866989567","TW" +"1866989568","1867513855","CN" +"1867513856","1867775999","TW" +"1867776000","1867841535","TH" +"1867841536","1867907071","CN" +"1867907072","1868038143","JP" +"1868038144","1868103679","PK" +"1868103680","1868201983","JP" +"1868201984","1868210175","MY" +"1868210176","1868212223","JP" +"1868212224","1868214271","IN" +"1868214272","1868218367","KH" +"1868218368","1868234751","SG" +"1868234752","1868267519","IN" +"1868267520","1868283903","KR" +"1868283904","1868292095","CN" +"1868292096","1868294143","IN" +"1868294144","1868295167","VN" +"1868295168","1868296191","HK" +"1868296192","1868300287","JP" +"1868300288","1868333055","IN" +"1868333056","1868341247","PK" +"1868341248","1868345343","ID" +"1868345344","1868346367","GU" +"1868346368","1868347391","TH" +"1868347392","1868348415","AU" +"1868348416","1868349439","KR" +"1868349440","1868357631","SG" +"1868357632","1868361727","HK" +"1868361728","1868362751","KH" +"1868362752","1868363775","JP" +"1868363776","1868365823","BD" +"1868365824","1868431359","IN" +"1868431360","1868562431","ID" +"1868562432","1869611007","JP" +"1869611008","1870004223","CN" +"1870004224","1870036991","KR" +"1870036992","1870045183","KH" +"1870045184","1870049279","AU" +"1870049280","1870053375","IN" +"1870053376","1870055423","AU" +"1870055424","1870057471","CN" +"1870057472","1870058495","AU" +"1870058496","1870059519","IN" +"1870059520","1870065663","AU" +"1870065664","1870069759","IN" +"1870069760","1870077951","JP" +"1870077952","1870086143","NP" +"1870086144","1870110719","CN" +"1870110720","1870118911","PK" +"1870118912","1870135295","IN" +"1870135296","1870462975","CN" +"1870462976","1870479359","JP" +"1870479360","1870495743","PH" +"1870495744","1870497791","TW" +"1870497792","1870499839","IN" +"1870499840","1870501887","JP" +"1870501888","1870503935","AF" +"1870503936","1870512127","AU" +"1870512128","1870528511","IN" +"1870528512","1873281023","CN" +"1873281024","1873412095","JP" +"1873412096","1873477631","CN" +"1873477632","1873510399","KR" +"1873510400","1873543167","JP" +"1873543168","1874329599","CN" +"1874329600","1874460671","TW" +"1874460672","1874591743","CN" +"1874591744","1874853887","JP" +"1874853888","1876426751","CN" +"1876426752","1876557823","JP" +"1876557824","1876688895","KR" +"1876688896","1876754431","AU" +"1876754432","1876756479","BD" +"1876756480","1876762623","SG" +"1876762624","1876764671","KR" +"1876764672","1876765695","ID" +"1876765696","1876766719","SG" +"1876766720","1876768767","MY" +"1876768768","1876769791","AU" +"1876769792","1876770815","JP" +"1876770816","1876787199","SG" +"1876787200","1876885503","CN" +"1876885504","1876893695","PH" +"1876893696","1876901887","TH" +"1876901888","1876918271","SG" +"1876918272","1876934655","LK" +"1876934656","1876942847","JP" +"1876942848","1876946943","AU" +"1876946944","1876947967","CN" +"1876947968","1876948991","AF" +"1876948992","1876950015","CN" +"1876950016","1876951039","ID" +"1876951040","1877475327","CN" +"1877475328","1877688319","JP" +"1877688320","1877689343","IN" +"1877689344","1877690367","TH" +"1877690368","1877691391","IN" +"1877691392","1877692415","JP" +"1877692416","1877696511","PH" +"1877696512","1877704703","CN" +"1877704704","1877705727","AU" +"1877705728","1877706751","MY" +"1877706752","1877707775","SG" +"1877707776","1877709823","AU" +"1877709824","1877710847","IN" +"1877710848","1877711871","HK" +"1877711872","1877721087","CN" +"1877721088","1877737471","TW" +"1877737472","1877999615","JP" +"1877999616","1879048191","TW" +"1879048192","1883504639","CN" +"1883504640","1883766783","JP" +"1883766784","1883770879","MN" +"1883770880","1883783167","KR" +"1883783168","1883799551","VN" +"1883799552","1883832319","KR" +"1883832320","1884028927","CN" +"1884028928","1884159999","KR" +"1884160000","1884164095","VN" +"1884164096","1884168191","TW" +"1884168192","1884172287","ID" +"1884172288","1884176383","PH" +"1884176384","1884184575","TW" +"1884184576","1884186623","ID" +"1884186624","1884188671","TW" +"1884188672","1884192767","JP" +"1884192768","1884209151","ID" +"1884209152","1884217343","JP" +"1884217344","1884225535","SG" +"1884225536","1884291071","IN" +"1884291072","1885863935","CN" +"1885863936","1885995007","TW" +"1885995008","1886191615","KR" +"1886191616","1886195711","PH" +"1886195712","1886197759","ID" +"1886197760","1886199807","JP" +"1886199808","1886207999","KR" +"1886208000","1886214143","NZ" +"1886214144","1886216191","VN" +"1886216192","1886224383","IN" +"1886224384","1886257151","CN" +"1886257152","1886322687","IN" +"1886322688","1886781439","CN" +"1886781440","1886978047","HK" +"1886978048","1886986239","KR" +"1886986240","1886990335","TW" +"1886990336","1886994431","IN" +"1886994432","1887008767","TW" +"1887008768","1887010815","HK" +"1887010816","1887019007","TH" +"1887019008","1887027199","HK" +"1887027200","1887043583","KR" +"1887043584","1887764479","CN" +"1887764480","1887813631","KR" +"1887813632","1887830015","IN" +"1887830016","1887961087","LK" +"1887961088","1887993855","JP" +"1887993856","1888026623","KR" +"1888026624","1888030719","BD" +"1888030720","1888034815","HK" +"1888034816","1888038911","JP" +"1888038912","1888040959","CN" +"1888040960","1888059391","JP" +"1888059392","1888063487","VN" +"1888063488","1888067583","JP" +"1888067584","1888071679","MY" +"1888071680","1888073727","KR" +"1888073728","1888239615","JP" +"1888239616","1888255999","KR" +"1888256000","1888260095","JP" +"1888260096","1888264191","KR" +"1888264192","1888266239","ID" +"1888266240","1888268287","JP" +"1888268288","1888270335","AU" +"1888270336","1888271359","SG" +"1888272384","1888288767","KR" +"1888288768","1888354303","AU" +"1888354304","1888485375","TH" +"1888485376","1891631103","KR" +"1891631104","1891893247","CN" +"1891893248","1891942399","IN" +"1891942400","1891950591","KR" +"1891950592","1891958783","PH" +"1891958784","1892024319","VN" +"1892024320","1892122623","PH" +"1892122624","1892155391","SG" +"1892155392","1892941823","PH" +"1892941824","1893015551","KR" +"1893015552","1893019647","AU" +"1893019648","1893023743","TW" +"1893023744","1893027839","HK" +"1893027840","1893031935","VN" +"1893031936","1893040127","HK" +"1893040128","1893072895","AU" +"1893072896","1893138431","KR" +"1893138432","1893203967","ID" +"1893203968","1893728255","KR" +"1893728256","1896480767","CN" +"1896480768","1896497151","KR" +"1896497152","1896513535","SG" +"1896513536","1896546303","HK" +"1896546304","1896579071","BD" +"1896579072","1896587263","ID" +"1896587264","1896591359","SG" +"1896591360","1896593407","ID" +"1896593408","1896594431","AU" +"1896594432","1896595455","MY" +"1896595456","1896603647","CN" +"1896603648","1896605695","IN" +"1896605696","1896606719","AU" +"1896606720","1896607743","MY" +"1896607744","1896609791","VU" +"1896609792","1896611839","SG" +"1896611840","1897070591","CN" +"1897070592","1897136127","IN" +"1897136128","1897140223","AU" +"1897140224","1897141247","IN" +"1897141248","1897142271","HK" +"1897142272","1897143295","AU" +"1897143296","1897144319","ID" +"1897144320","1897152511","NC" +"1897152512","1897160703","FJ" +"1897160704","1897168895","VN" +"1897168896","1897169919","AU" +"1897169920","1897170943","HK" +"1897170944","1897172991","ID" +"1897172992","1897175039","PH" +"1897175040","1897176063","JP" +"1897176064","1897177087","SG" +"1897177088","1897185279","PH" +"1897185280","1897201663","JP" +"1897201664","1897209855","KR" +"1897209856","1897213951","AU" +"1897213952","1897218047","JP" +"1897218048","1897222143","IN" +"1897222144","1897226239","TW" +"1897226240","1897234431","NC" +"1897234432","1897242623","MY" +"1897242624","1897250815","TW" +"1897250816","1897259007","HK" +"1897259008","1897260031","NZ" +"1897260032","1897261055","BD" +"1897261056","1897263103","JP" +"1897263104","1897265151","TH" +"1897265152","1897267199","JP" +"1897267200","1897365503","VN" +"1897365504","1897398271","MY" +"1897398272","1897660415","CN" +"1897660416","1897725951","HK" +"1897725952","1897730047","JP" +"1897730048","1897734143","AU" +"1897734144","1897738239","HK" +"1897738240","1897742335","KR" +"1897742336","1897746431","SG" +"1897746432","1897758719","US" +"1897758720","1897779199","KR" +"1897779200","1897781247","AU" +"1897781248","1897783295","JP" +"1897783296","1897787391","SG" +"1897787392","1897789439","AU" +"1897789440","1897790463","KH" +"1897790464","1897791487","HK" +"1897791488","1897824255","KR" +"1897824256","1897857023","IN" +"1897857024","1897922559","CN" +"1897922560","1898708991","JP" +"1898708992","1899233279","CN" +"1899233280","1899237375","AU" +"1899237376","1899241471","JP" +"1899241472","1899249663","VN" +"1899249664","1899266047","MO" +"1899266048","1899267071","AU" +"1899267072","1899268095","HK" +"1899268096","1899270143","KR" +"1899270144","1899271167","AU" +"1899271168","1899272191","ID" +"1899272192","1899273215","SG" +"1899273216","1899274239","JP" +"1899274240","1899282431","CN" +"1899282432","1899290623","KR" +"1899290624","1899294719","AU" +"1899294720","1899298815","JP" +"1899298816","1899364351","TH" +"1899364352","1899724799","CN" +"1899724800","1899741183","KR" +"1899741184","1899749375","LK" +"1899749376","1899750399","CN" +"1899750400","1899751423","JP" +"1899751424","1899753471","ID" +"1899753472","1899757567","HK" +"1899757568","1899831295","KR" +"1899831296","1899839487","PH" +"1899839488","1899849727","AU" +"1899849728","1899850751","KR" +"1899850752","1899851775","VN" +"1899851776","1899855871","JP" +"1899855872","1899888639","TW" +"1899888640","1904345087","CN" +"1904345088","1904361471","JP" +"1904361472","1904369663","KR" +"1904369664","1904375807","CN" +"1904375808","1904376831","NZ" +"1904376832","1904377855","KH" +"1904377856","1904476159","KR" +"1904476160","1905262591","CN" +"1905262592","1905429765","JP" +"1905429766","1905429766","AP" +"1905429767","1906311167","JP" +"1906311168","1908408319","VN" +"1908408320","1908424703","AU" +"1908424704","1908441087","KR" +"1908441088","1908473855","JP" +"1908473856","1908539391","IN" +"1908539392","1908670463","CN" +"1908670464","1908735999","TW" +"1908736000","1908740095","AU" +"1908740096","1908744191","JP" +"1908744192","1908746239","SG" +"1908746240","1908748287","JP" +"1908748288","1908750335","PK" +"1908750336","1908752383","JP" +"1908752384","1908753407","NZ" +"1908753408","1908754431","PF" +"1908754432","1908756479","PH" +"1908756480","1908760575","KR" +"1908760576","1908761599","NZ" +"1908761600","1908762623","CN" +"1908762624","1908762879","IN" +"1908762880","1908763135","HK" +"1908763136","1908763647","IN" +"1908763648","1908764671","ID" +"1908764672","1908768767","AU" +"1908768768","1908801535","JP" +"1908801536","1908899839","KR" +"1908899840","1908932607","NP" +"1908932608","1909129215","CN" +"1909129216","1909161983","AU" +"1909161984","1909194751","PK" +"1909194752","1909456895","CN" +"1909456896","1909473279","JP" +"1909473280","1909479939","HK" +"1909479940","1909479940","US" +"1909479941","1909481471","HK" +"1909481472","1909587967","CN" +"1909587968","1909719039","MY" +"1909719040","1909735423","CN" +"1909735424","1909743615","US" +"1909743616","1909744639","AU" +"1909744640","1909745663","CN" +"1909745664","1909746687","JP" +"1909746688","1909747711","MY" +"1909747712","1909751807","ID" +"1909751808","1909759999","JP" +"1909760000","1909762047","ID" +"1909762048","1909764095","AU" +"1909764096","1909766143","PH" +"1909766144","1909768191","CN" +"1909768192","1909784575","HK" +"1909784576","1909817343","CN" +"1909817344","1909850111","JP" +"1909850112","1909981183","CN" +"1909981184","1910112255","KR" +"1910112256","1912340479","CN" +"1912340480","1912602623","HK" +"1912602624","1913651199","ID" +"1913651200","1914109951","JP" +"1914109952","1914175487","NZ" +"1914175488","1914437631","TW" +"1914437632","1914503167","CN" +"1914503168","1914552319","KR" +"1914552320","1914560511","SG" +"1914560512","1914568703","KH" +"1914568704","1914576895","KR" +"1914576896","1914580991","TW" +"1914580992","1914585087","KR" +"1914585088","1914587135","AU" +"1914587136","1914589183","IN" +"1914589184","1914593279","ID" +"1914593280","1914601471","AU" +"1914601472","1914634239","KR" +"1914634240","1914642431","BD" +"1914642432","1914650623","KR" +"1914650624","1914652671","MN" +"1914652672","1914654719","AU" +"1914654720","1914658815","JP" +"1914658816","1914660863","AU" +"1914660864","1914662911","JP" +"1914662912","1914667007","KR" +"1914667008","1914683391","IN" +"1914683392","1914687487","AU" +"1914687488","1914689535","NZ" +"1914689536","1914691583","JP" +"1914691584","1914695679","IN" +"1914695680","1914697727","ID" +"1914697728","1914699775","IN" +"1914699776","1915748351","TW" +"1915748352","1916010495","JP" +"1916010496","1916141567","KR" +"1916141568","1916272639","CN" +"1916272640","1916534783","ID" +"1916534784","1917124607","CN" +"1917124608","1917169663","JP" +"1917169664","1917181951","NC" +"1917181952","1917190143","IN" +"1917190144","1917321215","KR" +"1917321216","1917779967","AU" +"1917779968","1917796351","ID" +"1917796352","1917812735","CN" +"1917812736","1917845503","IN" +"1917845504","1919680511","CN" +"1919680512","1919729663","KR" +"1919729664","1919746047","PH" +"1919746048","1919811583","TH" +"1919811584","1919815679","CN" +"1919815680","1919817727","ID" +"1919817728","1919819775","KR" +"1919819776","1919821823","NZ" +"1919821824","1919823871","ID" +"1919823872","1919827967","JP" +"1919827968","1919844351","CN" +"1919844352","1919877119","KR" +"1919877120","1919885311","CN" +"1919885312","1919893503","KR" +"1919893504","1919909887","JP" +"1919909888","1919918079","AU" +"1919918080","1919926271","CN" +"1919926272","1919942655","KR" +"1919942656","1920466943","CN" +"1920466944","1920991231","ID" +"1920991232","1921056767","TH" +"1921056768","1921058815","JP" +"1921058816","1921060863","BD" +"1921060864","1921062911","ID" +"1921062912","1921064959","LA" +"1921064960","1921069055","SG" +"1921069056","1921073151","JP" +"1921073152","1921089535","KR" +"1921089536","1921105919","AU" +"1921105920","1921122303","KR" +"1921122304","1921187839","BD" +"1921187840","1921253375","TH" +"1921253376","1921318911","CN" +"1921318912","1921384447","MY" +"1921384448","1921388543","NZ" +"1921388544","1921392639","PG" +"1921392640","1921400831","JP" +"1921400832","1921404927","ID" +"1921404928","1921405823","HK" +"1921405824","1921405855","MM" +"1921405856","1921405919","HK" +"1921405920","1921405951","MM" +"1921405952","1921406975","HK" +"1921406976","1921409023","BD" +"1921409024","1921425407","JP" +"1921425408","1921431551","NZ" +"1921431552","1921433599","KH" +"1921433600","1921449983","JP" +"1921449984","1921515519","CN" +"1921515520","1921646591","TW" +"1921646592","1921777663","CN" +"1921777664","1921843199","TW" +"1921843200","1921851391","KR" +"1921851392","1921853439","JP" +"1921853440","1921855487","KR" +"1921855488","1921859583","ID" +"1921859584","1921861631","CN" +"1921861632","1921863679","SG" +"1921865728","1921867775","ID" +"1921867776","1921871871","AU" +"1921871872","1921875967","NZ" +"1921875968","1921892351","CN" +"1921892352","1921896447","AU" +"1921896448","1921898495","SG" +"1921898496","1921900543","PH" +"1921900544","1921908735","KR" +"1921908736","1921943551","JP" +"1921943552","1921945599","IN" +"1921945600","1921949695","HK" +"1921949696","1921953791","AU" +"1921953792","1921957887","JP" +"1921957888","1921974271","GU" +"1921974272","1922039807","IN" +"1922039808","1925447679","JP" +"1925447680","1925578751","CN" +"1925578752","1925611519","AU" +"1925611520","1925619711","PH" +"1925619712","1925627903","TW" +"1925627904","1925638143","JP" +"1925638144","1925640191","PK" +"1925640192","1925642239","ID" +"1925642240","1925644287","CN" +"1925644288","1925660671","KR" +"1925660672","1925664767","HK" +"1925664768","1925677055","ID" +"1925677056","1926234111","KR" +"1926234112","1929379839","CN" +"1929379840","1930952703","KR" +"1930952704","1931345919","CN" +"1931345920","1931354111","JP" +"1931354112","1931362303","AU" +"1931362304","1931378687","TW" +"1931378688","1931427839","JP" +"1931427840","1931431935","PH" +"1931431936","1931433983","JP" +"1931433984","1931436031","AU" +"1931436032","1931444223","KR" +"1931444224","1931460607","TH" +"1931460608","1931468799","JP" +"1931468800","1931476991","SG" +"1931476992","1931739135","CN" +"1931739136","1932001279","JP" +"1932001280","1932132351","KR" +"1932132352","1932140543","AU" +"1932148736","1932152831","PK" +"1932152832","1932156927","TW" +"1932156928","1932161023","JP" +"1932161024","1932163071","TW" +"1932163072","1932165119","PH" +"1932165120","1932197887","SG" +"1932197888","1932263423","TW" +"1932263424","1933574143","CN" +"1933574144","1933639679","AU" +"1933639680","1933705215","JP" +"1933705216","1933770751","SG" +"1933770752","1933836287","TH" +"1933836288","1933901823","KR" +"1933901824","1933909759","AU" +"1933909760","1933910015","A1" +"1933910016","1933918207","AU" +"1933918208","1933922303","CN" +"1933922304","1933926399","IN" +"1933926400","1933934591","KR" +"1933934592","1933942783","IN" +"1933942784","1933950975","AU" +"1933950976","1933955071","JP" +"1933955072","1933957119","BD" +"1933957120","1933959167","ID" +"1933959168","1933963263","JP" +"1933963264","1933967359","IN" +"1933967360","1934032895","AU" +"1934032896","1934098431","KR" +"1934098432","1934622719","VN" +"1934622720","1934884863","TW" +"1934884864","1934901247","CN" +"1934901248","1934917631","LA" +"1934917632","1934925823","MV" +"1934925824","1934927871","KR" +"1934927872","1934929919","PH" +"1934929920","1934931967","VN" +"1934931968","1934934015","JP" +"1934934016","1934942207","CN" +"1934942208","1934966783","PH" +"1934966784","1934974975","ID" +"1934974976","1934983167","JP" +"1934983168","1934983423","MY" +"1934983424","1934985215","AU" +"1934985216","1934987263","JP" +"1934987264","1934991359","TW" +"1934991360","1934999551","KR" +"1934999552","1935015935","CN" +"1935015936","1935081471","KR" +"1935081472","1935147007","TH" +"1935147008","1935671295","KR" +"1935671296","1935933439","IN" +"1935933440","1936457727","CN" +"1936457728","1937244159","IN" +"1937244160","1937506303","CN" +"1937506304","1937510399","AU" +"1937510400","1937514495","CN" +"1937514496","1937516543","AU" +"1937516544","1937518591","IN" +"1937518592","1937522687","JP" +"1937522688","1937530879","ID" +"1937530880","1937532927","US" +"1937532928","1937534975","IN" +"1937534976","1937535487","US" +"1937535488","1937535999","IN" +"1937536000","1937536511","GB" +"1937536512","1937539071","IN" +"1937539072","1937637375","JP" +"1937637376","1937670143","HK" +"1937670144","1937672191","NZ" +"1937672192","1937678335","JP" +"1937678336","1937686527","NC" +"1937686528","1937702911","KR" +"1937702912","1937768447","BD" +"1937768448","1938030591","AU" +"1938030592","1938292735","MY" +"1938292736","1938948095","KR" +"1938948096","1938964479","JP" +"1938964480","1938972671","AU" +"1938972672","1938976767","MY" +"1938976768","1938978815","SG" +"1938978816","1938980863","VN" +"1938980864","1939079167","PH" +"1939079168","1939865599","CN" +"1939865600","1939898367","KR" +"1939898368","1939914751","HK" +"1939914752","1939931135","IN" +"1939931136","1939996671","KR" +"1939996672","1940127743","JP" +"1940127744","1940193279","MY" +"1940193280","1940234239","JP" +"1940234240","1940236287","VN" +"1940236288","1940238335","AU" +"1940238336","1940240383","KR" +"1940240384","1940242431","JP" +"1940242432","1940258815","TW" +"1940258816","1940275199","AU" +"1940275200","1940283391","CN" +"1940283392","1940291583","ID" +"1940291584","1940295679","HK" +"1940295680","1940324351","JP" +"1940324352","1940357119","PK" +"1940357120","1940389887","JP" +"1940389888","1940914175","CN" +"1940914176","1941045247","JP" +"1941045248","1941049343","HK" +"1941049344","1941051391","AU" +"1941051392","1941052415","KH" +"1941052416","1941053439","AU" +"1941053440","1941057535","KR" +"1941057536","1941059583","ID" +"1941059584","1941061631","TH" +"1941061632","1941069823","KR" +"1941069824","1941071871","IN" +"1941071872","1941073919","AU" +"1941073920","1941075967","JP" +"1941075968","1941110783","ID" +"1941110784","1941176319","JP" +"1941176320","1941438463","CN" +"1941438464","1941569535","IN" +"1941569536","1941618687","PK" +"1941618688","1941635071","AU" +"1941635072","1941639167","IN" +"1941639168","1941643263","NP" +"1941643264","1941651455","IN" +"1941651456","1941655551","JP" +"1941655552","1941657599","KR" +"1941657600","1941658623","MN" +"1941658624","1941659647","JP" +"1941659648","1941667839","NZ" +"1941667840","1941700607","AU" +"1941700608","1941831679","NZ" +"1941831680","1945108479","CN" +"1945108480","1946157055","IN" +"1946157056","1946159103","ID" +"1946159104","1946161151","CN" +"1946161152","1946163199","AU" +"1946163200","1946165247","CN" +"1946165248","1946173439","PK" +"1946173440","1946173695","PG" +"1946173696","1946181631","SG" +"1946181632","1946189823","MY" +"1946189824","1946222591","JP" +"1946222592","1946943487","CN" +"1946943488","1946951679","JP" +"1946951680","1946953727","BD" +"1946953728","1946955775","ID" +"1946955776","1946957823","SG" +"1946957824","1946959871","NZ" +"1946959872","1946976255","LK" +"1946976256","1947009023","SG" +"1947009024","1947074559","CN" +"1947074560","1947205631","SG" +"1947205632","1948254207","CN" +"1948254208","1949302783","KR" +"1949302784","1949391103","HK" +"1949391104","1949391359","CN" +"1949391360","1949433855","HK" +"1949433856","1949437951","CN" +"1949437952","1949439999","AU" +"1949440000","1949442047","ID" +"1949442048","1949446143","TW" +"1949446144","1949448191","JP" +"1949448192","1949448959","HK" +"1949448960","1949449215","IN" +"1949449216","1949450239","HK" +"1949450240","1949466623","IN" +"1949466624","1949499391","PH" +"1949499392","1949564927","SG" +"1949564928","1949958143","CN" +"1949958144","1949990911","PK" +"1949990912","1949995007","CN" +"1949995008","1950007295","JP" +"1950007296","1950009343","ID" +"1950009344","1950011391","BD" +"1950011392","1950015487","CN" +"1950015488","1950023679","TH" +"1950023680","1950089215","TW" +"1950089216","1950351359","CN" +"1950351360","1950482431","JP" +"1950482432","1950515199","CN" +"1950515200","1950523391","IN" +"1950523392","1950527487","AU" +"1950527488","1950531583","JP" +"1950531584","1950533631","NP" +"1950533632","1950535679","ID" +"1950535680","1950539775","HK" +"1950539776","1950541823","AU" +"1950541824","1950543871","HK" +"1950543872","1950545919","NZ" +"1950545920","1950547967","PH" +"1950547968","1950580735","KR" +"1950580736","1950613503","JP" +"1950613504","1950621695","GU" +"1950621696","1950629887","KR" +"1950629888","1950646271","IN" +"1950646272","1950648319","VN" +"1950650368","1950654463","TH" +"1950654464","1950658559","ID" +"1950660608","1950662655","HK" +"1950662656","1950666751","BD" +"1950666752","1950668799","NP" +"1950668800","1950670847","JP" +"1950670848","1950672895","ID" +"1950672896","1950674943","KR" +"1950674944","1950676991","IN" +"1950676992","1950679039","ID" +"1950679040","1950777343","CN" +"1950777344","1950810111","JP" +"1950810112","1950875647","PK" +"1950875648","1951137791","IN" +"1951137792","1951399935","CN" +"1951399936","1951662079","JP" +"1951662080","1951727615","KR" +"1951727616","1951793151","CN" +"1951793152","1952022527","SG" +"1952022528","1952026623","TW" +"1952026624","1952030719","CN" +"1952030720","1952038911","KR" +"1952038912","1952047103","JP" +"1952047104","1952051199","NZ" +"1952051200","1952055295","JP" +"1952055296","1952071679","AU" +"1952071680","1952073727","HK" +"1952073728","1952074751","AU" +"1952074752","1952075775","NZ" +"1952075776","1952079871","CN" +"1952079872","1952088063","PK" +"1952088064","1952092159","NZ" +"1952092160","1952096255","JP" +"1952096256","1952102399","ID" +"1952102400","1952104447","CN" +"1952104448","1952108543","JP" +"1952108544","1952110591","ID" +"1952110592","1952112639","KR" +"1952112640","1952116735","NP" +"1952116736","1952120831","IN" +"1952120832","1952186367","JP" +"1952186368","1952251903","HK" +"1952251904","1952284671","PH" +"1952284672","1952288767","NZ" +"1952288768","1952292863","JP" +"1952292864","1952317439","KR" +"1952317440","1952382975","JP" +"1952382976","1952448511","CN" +"1952448512","1953497087","VN" +"1953497088","1953890303","CN" +"1953890304","1953923071","VN" +"1953923072","1953939455","TW" +"1953939456","1953951743","JP" +"1953951744","1953955839","AU" +"1953955840","1954021375","IN" +"1954021376","1954545663","KR" +"1954545664","1958805503","CN" +"1958805504","1958807551","SG" +"1958807552","1958809599","MO" +"1958809600","1958821887","CN" +"1958821888","1958825983","VN" +"1958825984","1958830079","KR" +"1958830080","1958838271","JP" +"1958838272","1958842367","IN" +"1958842368","1958844415","NZ" +"1958845440","1958845951","MY" +"1958845952","1958846463","HK" +"1958846464","1958847487","IN" +"1958848512","1958850559","BD" +"1958850560","1958852607","CN" +"1958852608","1958853631","AU" +"1958853632","1958854655","ID" +"1958854656","1958860799","AU" +"1958860800","1958862847","BD" +"1958862848","1958871039","JP" +"1958871040","1959067647","CN" +"1959067648","1959100415","MY" +"1959100416","1959102463","ID" +"1959102464","1959104511","JP" +"1959104512","1959106559","AU" +"1959106560","1959108607","JP" +"1959110656","1959112703","JP" +"1959112704","1959116799","HK" +"1959116800","1959133183","SG" +"1959133184","1959239679","CN" +"1959239680","1959241727","KR" +"1959241728","1959243775","IN" +"1959243776","1959247871","JP" +"1959247872","1959251967","ID" +"1959251968","1959256063","NZ" +"1959256064","1959260159","AU" +"1959260160","1959264255","JP" +"1959264256","1959395327","KR" +"1959395328","1959526399","IN" +"1959526400","1960050687","CN" +"1960050688","1960058879","KR" +"1960058880","1960067071","VN" +"1960067072","1960069119","AU" +"1960069120","1960071167","ID" +"1960071168","1960075263","TW" +"1960075264","1960077311","ID" +"1960077312","1960079359","BD" +"1960079360","1960083455","HK" +"1960083456","1960091647","KH" +"1960091648","1960095743","CN" +"1960095744","1960097791","IN" +"1960097792","1960099839","BD" +"1960099840","1960121343","AU" +"1960121344","1960122367","JP" +"1960122368","1960124415","ID" +"1960128512","1960132607","ID" +"1960132608","1960181759","CN" +"1960181760","1960185855","TW" +"1960185856","1960187903","JP" +"1960187904","1960189951","IN" +"1960189952","1960202239","CN" +"1960202240","1960206335","JP" +"1960206336","1960212582","SG" +"1960212583","1960212583","AP" +"1960212584","1960214527","SG" +"1960214528","1960574975","CN" +"1960574976","1960837119","JP" +"1960837120","1961885695","CN" +"1961885696","1961951231","AU" +"1961951232","1962016767","TW" +"1962016768","1962541055","CN" +"1962541056","1962622975","AU" +"1962622976","1962639359","CN" +"1962639360","1962658815","NZ" +"1962658816","1962659839","HK" +"1962659840","1962663935","SG" +"1962663936","1962672127","HK" +"1962672128","1962803199","CN" +"1962803200","1962827775","JP" +"1962827776","1962829823","ID" +"1962829824","1962831871","JP" +"1962831872","1962835967","ID" +"1962835968","1962868735","CN" +"1962868736","1962885119","AU" +"1962885120","1962901503","KR" +"1962901504","1962934271","CN" +"1962934272","1963458559","VN" +"1963458560","1963982847","CN" +"1963982848","1964113919","KR" +"1964113920","1964118015","HK" +"1964118016","1964120063","ID" +"1964120064","1964122111","JP" +"1964122112","1964130303","SG" +"1964130304","1964134399","HK" +"1964134400","1964136447","NZ" +"1964136448","1964138495","JP" +"1964138496","1964146687","HK" +"1964146688","1964171263","JP" +"1964171264","1964173311","BD" +"1964173312","1964175359","AU" +"1964175360","1964179455","PK" +"1964179456","1964244991","TW" +"1964244992","1964249087","AU" +"1964249088","1964253183","PK" +"1964253184","1964255231","WF" +"1964255232","1964257279","SG" +"1964257280","1964261375","ID" +"1964261376","1964263423","AU" +"1964263424","1964265471","JP" +"1964265472","1964269567","KR" +"1964269568","1964273663","JP" +"1964273664","1964275711","KH" +"1964275712","1964277759","GU" +"1964277760","1964294143","SG" +"1964294144","1964310527","KR" +"1964310528","1965948927","CN" +"1965948928","1966014463","JP" +"1966014464","1966079999","TH" +"1966080000","1966342143","CN" +"1966342144","1966407679","KR" +"1966407680","1966417919","JP" +"1966419968","1966424063","CN" +"1966424064","1966440447","KR" +"1966440448","1966444543","AU" +"1966446592","1966447615","MY" +"1966447616","1966448639","NZ" +"1966448640","1966452735","AU" +"1966452736","1966456831","CN" +"1966456832","1966473215","KR" +"1966473216","1966538751","ID" +"1966538752","1966571519","JP" +"1966571520","1966587903","KR" +"1966587904","1966591999","AF" +"1966592000","1966596095","JP" +"1966596096","1966600191","AU" +"1966600192","1966602239","IN" +"1966602240","1966604287","KH" +"1966604288","1966669823","TW" +"1966669824","1966768127","CN" +"1966768128","1966772223","KR" +"1966772224","1966776319","JP" +"1966776320","1966784511","SG" +"1966784512","1966792703","PH" +"1966792704","1966796799","JP" +"1966796800","1966798847","BD" +"1966798848","1966800895","AU" +"1966800896","1967783935","CN" +"1967783936","1967800319","JP" +"1967800320","1967808511","CN" +"1967808512","1967812607","AT" +"1967812608","1967816703","ID" +"1967816704","1969225727","CN" +"1969225728","1969487871","IN" +"1969487872","1969618943","CN" +"1969618944","1969635327","PK" +"1969635328","1969651711","ID" +"1969651712","1969659903","AU" +"1969659904","1969661951","ID" +"1969661952","1969676287","JP" +"1969676288","1969688575","ID" +"1969688576","1969692671","CN" +"1969692672","1969694719","ID" +"1969694720","1969696767","CN" +"1969696768","1969702911","ID" +"1969702912","1969704959","CN" +"1969704960","1969707007","BD" +"1969707008","1969709055","MH" +"1969709056","1969713151","TW" +"1969713152","1969715199","AU" +"1969715200","1969717247","IN" +"1969717248","1969721343","CN" +"1969721344","1969725439","HK" +"1969725440","1969727487","JP" +"1969727488","1969729535","ID" +"1969729536","1969733631","JP" +"1969733632","1969750015","VN" +"1969750016","1969783551","JP" +"1969783552","1969783807","US" +"1969783808","1969790975","JP" +"1969790976","1969793023","AU" +"1969793024","1969795071","CN" +"1969795072","1969797119","NZ" +"1969797120","1969798143","SG" +"1969798144","1969799167","HK" +"1969799168","1969807359","ID" +"1969807360","1969809407","AF" +"1969809408","1969811455","IN" +"1969811456","1969815551","PH" +"1969815552","1969881087","SG" +"1969881088","1970012159","CN" +"1970012160","1970143231","JP" +"1970143232","1970274303","KR" +"1970274304","1970798591","CN" +"1970798592","1970800639","SG" +"1970800640","1970803711","AU" +"1970803712","1970804223","HK" +"1970804224","1970804735","AU" +"1970804736","1970806783","KH" +"1970806784","1970808831","NZ" +"1970808832","1970810879","AU" +"1970810880","1970812927","JP" +"1970814976","1970915327","CN" +"1970915328","1970917375","ID" +"1970917376","1970921471","TH" +"1970921472","1970925567","NP" +"1970925568","1970925823","MY" +"1970925824","1970926079","SG" +"1970926080","1970926335","AU" +"1970926336","1970926591","US" +"1970926592","1970926847","SG" +"1970926848","1970927103","IL" +"1970927104","1970927359","SG" +"1970927360","1970927615","US" +"1970927616","1970929663","AU" +"1970929664","1970962431","VN" +"1970962432","1970995199","CN" +"1970995200","1971060735","KR" +"1971060736","1975517183","CN" +"1975517184","1979711487","IN" +"1979711488","1981284351","JP" +"1981284352","1981808639","CN" +"1981808640","1983905791","KR" +"1983905792","1984102399","CN" +"1984102400","1984118783","AU" +"1984118784","1984131071","JP" +"1984131072","1984135167","CN" +"1984135168","1984151551","KR" +"1984151552","1984153599","NZ" +"1984153600","1984155647","KH" +"1984155648","1984159743","AU" +"1984159744","1984167935","IN" +"1984167936","1984430079","VN" +"1984430080","1985085439","CN" +"1985085440","1985093631","ID" +"1985093632","1985097727","AU" +"1985097728","1985118207","JP" +"1985118208","1985150975","NZ" +"1985150976","1985216511","JP" +"1985216512","1985347583","CN" +"1985347584","1985478655","JP" +"1985478656","1985480703","IN" +"1985480704","1985482751","PH" +"1985482752","1985484799","AU" +"1985484800","1985485055","A1" +"1985485056","1985486847","AU" +"1985486848","1985609727","CN" +"1985609728","1985675263","NZ" +"1985675264","1985708031","KR" +"1985708032","1985712127","ID" +"1985712128","1985716223","KR" +"1985716224","1985720319","NP" +"1985720320","1985724415","IN" +"1985724416","1985732607","JP" +"1985732608","1985734655","ID" +"1985734656","1985736703","IN" +"1985736704","1985740799","CN" +"1985740800","1985871871","NZ" +"1985871872","1986002943","IN" +"1986002944","1986199551","ID" +"1986199552","1986215935","HK" +"1986215936","1986232319","ID" +"1986232320","1986265087","TW" +"1986265088","1986396159","MY" +"1986396160","1986398207","VN" +"1986398208","1986400255","HK" +"1986400256","1986406399","CN" +"1986406400","1986412543","JP" +"1986412544","1986428927","AU" +"1986428928","1986461695","IN" +"1986461696","1986496511","JP" +"1986496512","1986498559","BT" +"1986498560","1986502655","HK" +"1986510848","1986519039","KR" +"1986519040","1986523135","PK" +"1986523136","1986525183","HK" +"1986525184","1986527231","BN" +"1986527232","1986723839","JP" +"1986723840","1986740223","AU" +"1986740224","1986756607","VN" +"1986756608","1986760703","PK" +"1986760704","1986762751","AU" +"1986762752","1986764799","JP" +"1986764800","1986768895","KR" +"1986770944","1986772991","AU" +"1986772992","1986789375","MY" +"1986789376","1987051519","JP" +"1987051520","1988034559","CN" +"1988034560","1988067327","AU" +"1988067328","1988075519","CN" +"1988075520","1988083711","AU" +"1988083712","1988158975","KR" +"1988158976","1988159231","US" +"1988159232","1988362239","KR" +"1988362240","1988624383","CN" +"1988624384","1988755455","ID" +"1988755456","1988861951","AU" +"1988861952","1988870143","SG" +"1988870144","1988886527","KR" +"1988886528","1989148671","HK" +"1989148672","1989410815","CN" +"1989410816","1989541887","NZ" +"1989541888","1989607423","TW" +"1989607424","1989660671","JP" +"1989660672","1989661695","IN" +"1989661696","1989662719","ID" +"1989662720","1989663743","AU" +"1989663744","1989664767","ID" +"1989664768","1990197247","JP" +"1990197248","1990983679","TW" +"1990983680","1991245823","TH" +"1991245824","1991311359","KR" +"1991311360","1991376895","JP" +"1991376896","1991442431","CN" +"1991442432","1991499775","BD" +"1991499776","1991507967","NC" +"1991507968","1992097791","CN" +"1992097792","1992163327","HK" +"1992163328","1993342975","CN" +"1993342976","1993605119","AU" +"1993605120","1993736191","CN" +"1993736192","1993867263","SG" +"1993867264","1994391551","KR" +"1994391552","1994850303","CN" +"1994850304","1995046911","TW" +"1995046912","1995177983","KR" +"1995177984","1995374591","JP" +"1995374592","1995440127","CN" +"1995440128","1995571199","JP" +"1995571200","1995636735","CN" +"1995636736","1995702271","JP" +"1995702272","1996627967","CN" +"1996627968","1996630015","PH" +"1996630016","1996634111","ID" +"1996634112","1996636159","NP" +"1996636160","1996644351","ID" +"1996644352","1996652543","BT" +"1996652544","1997078527","CN" +"1997078528","1997144063","HK" +"1997144064","1997176831","CN" +"1997176832","1997180927","AU" +"1997180928","1997185023","HK" +"1997185024","1997187071","JP" +"1997187072","1997189119","HK" +"1997189120","1997191167","ID" +"1997191168","1997209599","JP" +"1997209600","1997242367","AU" +"1997242368","1997275135","ID" +"1997275136","1997406207","AU" +"1997406208","1997471743","TW" +"1997471744","1997479935","NZ" +"1997479936","1997488127","JP" +"1997488128","1997492223","AU" +"1997492224","1997496319","KH" +"1997496320","1997500415","AU" +"1997500416","1997504511","JP" +"1997504512","1997506559","ID" +"1997506560","1997508607","CN" +"1997508608","1997510655","JP" +"1997510656","1997512703","BD" +"1997512704","1997520895","VN" +"1997520896","1997537279","TW" +"1997537280","1997602815","CN" +"1997602816","1997611007","KR" +"1997611008","1997619199","AU" +"1997619200","1997635583","KR" +"1997635584","1997651967","AU" +"1997651968","1997668351","VN" +"1997668352","1997680639","AU" +"1997680640","1997684735","IN" +"1997684736","1997701119","KR" +"1997701120","1997705215","VN" +"1997705216","1997707263","BD" +"1997707264","1997709311","ID" +"1997709312","1997715455","JP" +"1997715456","1997717503","VN" +"1997717504","1997723647","CN" +"1997723648","1997725695","JP" +"1997725696","1998061567","CN" +"1998061568","1998258175","JP" +"1998258176","1998274559","SG" +"1998274560","1998454783","CN" +"1998454784","1998456831","AU" +"1998456832","1998458879","JP" +"1998458880","1998462975","TW" +"1998462976","1998467071","BD" +"1998467072","1998471167","CN" +"1998471168","1998487551","PK" +"1998487552","1998503935","KR" +"1998503936","1998520319","JP" +"1998520320","1998553087","TH" +"1998553088","1998561279","JP" +"1998561280","1998562047","IN" +"1998562048","1998562303","TH" +"1998562304","1998562559","IN" +"1998562560","1998562815","AP" +"1998562816","1998562863","IN" +"1998562864","1998562864","HK" +"1998562865","1998565375","IN" +"1998565376","1998569471","TW" +"1998569472","1998577663","CN" +"1998577664","1998579711","AU" +"1998579712","1998581759","SG" +"1998581760","1998585855","KR" +"1998585856","1999130623","CN" +"1999130624","1999134719","BD" +"1999134720","1999136767","MN" +"1999136768","1999138815","AU" +"1999138816","1999142911","MY" +"1999142912","1999249407","CN" +"1999249408","1999257599","PH" +"1999257600","1999273983","TH" +"1999273984","1999278079","CN" +"1999278080","1999278097","HK" +"1999278098","1999278098","A1" +"1999278099","1999280127","HK" +"1999280128","1999282175","IN" +"1999282176","1999290367","KR" +"1999290368","1999298559","SG" +"1999298560","1999306751","CN" +"1999306752","1999372287","IN" +"1999372288","1999503359","CN" +"1999503360","1999568895","TH" +"1999568896","1999589375","JP" +"1999589376","1999591423","HK" +"1999591424","1999593471","ID" +"1999593472","1999597567","JP" +"1999597568","1999601663","NZ" +"1999601664","1999634431","JP" +"1999634432","2000158719","CN" +"2000158720","2000191487","SG" +"2000191488","2000224255","KR" +"2000224256","2000355327","CN" +"2000355328","2000371711","KR" +"2000371712","2000373759","JP" +"2000373760","2000375807","HK" +"2000375808","2000377855","AF" +"2000377856","2000379903","JP" +"2000379904","2000388095","TH" +"2000388096","2000617471","CN" +"2000617472","2000621567","PH" +"2000621568","2000625663","JP" +"2000625664","2000633855","CN" +"2000633856","2000642047","TH" +"2000642048","2000646143","HK" +"2000646144","2000650239","JP" +"2000650240","2000654335","PK" +"2000654336","2000668671","JP" +"2000668672","2000674815","AU" +"2000674816","2001207295","KR" +"2001207296","2001272831","JP" +"2001272832","2001305599","PK" +"2001305600","2001420287","SG" +"2001420288","2001453055","KR" +"2001453056","2001457151","SG" +"2001457152","2001461247","CN" +"2001461248","2001465343","JP" +"2001465344","2001469439","TW" +"2001469440","2001534975","TH" +"2001534976","2001559551","AU" +"2001559552","2001567743","KR" +"2001567744","2001600511","TW" +"2001600512","2001797119","CN" +"2001797120","2001862655","SG" +"2001862656","2001864703","AU" +"2001864704","2001870847","JP" +"2001870848","2001879039","KR" +"2001879040","2001895423","IN" +"2001895424","2001899519","VN" +"2001899520","2001901567","AU" +"2001901568","2001915903","JP" +"2001915904","2001919999","CN" +"2001920000","2001926143","ID" +"2001926144","2001928191","KH" +"2001928192","2001993727","JP" +"2001993728","2002518015","CN" +"2002518016","2002780159","PH" +"2002780160","2003304447","CN" +"2003304448","2003566591","JP" +"2003566592","2003697663","CN" +"2003697664","2003714047","MY" +"2003714048","2003720191","ID" +"2003720192","2003722239","JP" +"2003722240","2003726335","MY" +"2003726336","2003730431","ID" +"2003730432","2003763199","MY" +"2003763200","2003828735","PH" +"2003828736","2006188031","CN" +"2006188032","2006204415","BD" +"2006204416","2006212607","AU" +"2006212608","2006214655","TH" +"2006214656","2006216703","JP" +"2006216704","2006228991","KR" +"2006228992","2006237183","CN" +"2006237184","2006253567","JP" +"2006253568","2006319103","KR" +"2006319104","2006384639","JP" +"2006384640","2006433791","IN" +"2006433792","2006450175","CN" +"2006450176","2007007231","PK" +"2007007232","2007023615","BN" +"2007023616","2007025663","IN" +"2007025664","2007027711","CN" +"2007027712","2007031807","TH" +"2007031808","2007035903","AU" +"2007035904","2007039999","TW" +"2007040000","2007048191","KR" +"2007048192","2007064575","AU" +"2007066624","2007070719","JP" +"2007070720","2007072767","IN" +"2007072768","2007498751","CN" +"2007498752","2008023039","JP" +"2008023040","2009071615","CN" +"2009071616","2011168767","KR" +"2011168768","2011205631","NZ" +"2011205632","2011209727","AU" +"2011209728","2011234303","JP" +"2011234304","2011299839","AU" +"2011299840","2011430911","IN" +"2011430912","2011693055","JP" +"2011693056","2011824127","CN" +"2011824128","2011889663","SG" +"2011889664","2011893759","LK" +"2011893760","2011897855","ID" +"2011897856","2011899903","NZ" +"2011899904","2011901951","HK" +"2011901952","2011906047","IN" +"2011906048","2011916287","FJ" +"2011916288","2011922431","JP" +"2011922432","2011938815","CN" +"2011938816","2011942911","KR" +"2011942912","2011947007","ID" +"2011947008","2011951103","JP" +"2011951104","2011953151","KR" +"2011953152","2011955199","ID" +"2011955200","2012086271","HK" +"2012086272","2012610559","JP" +"2012610560","2012741631","HK" +"2012741632","2013003775","CN" +"2013003776","2013011967","AU" +"2013011968","2013020159","JP" +"2013020160","2013028351","AU" +"2013028352","2013030399","CN" +"2013030400","2013032447","ID" +"2013032448","2013036543","FM" +"2013036544","2013038591","ID" +"2013038592","2013040639","HK" +"2013040640","2013044735","IN" +"2013044736","2013048831","ID" +"2013048832","2013052927","AU" +"2013052928","2013061119","IN" +"2013061120","2013065215","PG" +"2013065216","2014314495","CN" +"2014314496","2014838783","AU" +"2014838784","2015100927","CN" +"2015100928","2015166463","PH" +"2015166464","2015182847","AU" +"2015182848","2015199231","PH" +"2015199232","2015203327","KR" +"2015203328","2015205375","JP" +"2015205376","2015207423","ID" +"2015207424","2015215615","JP" +"2015215616","2015219711","IN" +"2015219712","2015219967","US" +"2015219968","2015220223","PH" +"2015220224","2015220479","IN" +"2015220480","2015220735","HK" +"2015220736","2015223807","IN" +"2015223808","2015225855","ID" +"2015225856","2015227903","IN" +"2015227904","2015231999","AU" +"2015232000","2016542719","CN" +"2016542720","2016550911","BD" +"2016550912","2016555007","SG" +"2016555008","2016559103","MY" +"2016559104","2016583679","KR" +"2016583680","2016587775","JP" +"2016587776","2016589823","BD" +"2016589824","2016591871","VN" +"2016591872","2016673791","JP" +"2016673792","2016935935","CN" +"2016935936","2017460223","IN" +"2017460224","2017984511","CN" +"2017984512","2017988607","JP" +"2017988608","2017992703","PH" +"2017992704","2018000895","CN" +"2018000896","2018004991","JP" +"2018004992","2018007039","VN" +"2018007040","2018009087","IN" +"2018009088","2018017279","VN" +"2018017280","2018050047","CN" +"2018050048","2018115583","KR" +"2018115584","2018246655","JP" +"2018246656","2019033087","CN" +"2019033088","2019035135","AU" +"2019035136","2019037183","CN" +"2019037184","2019041279","JP" +"2019041280","2019045375","IN" +"2019045376","2019045631","US" +"2019045632","2019049471","JP" +"2019049472","2019078143","AU" +"2019078144","2019082239","IN" +"2019082240","2019098623","HK" +"2019098624","2019115007","PH" +"2019115008","2019117055","JP" +"2019117056","2019119103","IN" +"2019119104","2019121151","NZ" +"2019121152","2019123199","ID" +"2019123200","2019131391","NP" +"2019131392","2019164159","JP" +"2019164160","2019360767","CN" +"2019360768","2019426303","JP" +"2019426304","2019557375","CN" +"2019557376","2021654527","TW" +"2021654528","2022178815","CN" +"2022178816","2022180863","NZ" +"2022180864","2022182911","JP" +"2022184960","2022187007","KH" +"2022187008","2022189651","HK" +"2022189652","2022189652","A1" +"2022189653","2022191103","HK" +"2022191104","2022195199","NZ" +"2022195200","2022211583","KR" +"2022211584","2022227967","CN" +"2022227968","2022244351","JP" +"2022244352","2022277119","CN" +"2022277120","2022309887","JP" +"2022309888","2022313983","PH" +"2022313984","2022318079","NZ" +"2022318080","2022319135","AU" +"2022319136","2022319151","SG" +"2022319152","2022326271","AU" +"2022326272","2022330367","VN" +"2022330368","2022334463","MY" +"2022334464","2022342655","IN" +"2022342656","2022359039","JP" +"2022359040","2022375423","IN" +"2022375424","2022572031","MY" +"2022572032","2022637567","KR" +"2022637568","2022670335","JP" +"2022670336","2022678527","CN" +"2022678528","2022703103","KR" +"2022703104","2023751679","AU" +"2023751680","2025848831","ID" +"2025848832","2030043135","CN" +"2030043136","2030045183","AU" +"2030045184","2030051327","CN" +"2030051328","2030059519","JP" +"2030059520","2030108671","KR" +"2030108672","2030125055","PH" +"2030125056","2030141439","KR" +"2030141440","2030173695","JP" +"2030173696","2030173951","AP" +"2030173952","2030305279","JP" +"2030305280","2030436351","CN" +"2030436352","2030567423","SG" +"2030567424","2032926719","CN" +"2032926720","2033057791","AU" +"2033057792","2033319935","CN" +"2033319936","2033321983","IN" +"2033321984","2033324031","CN" +"2033324032","2033328127","KR" +"2033328128","2033330175","ID" +"2033330176","2033336319","JP" +"2033336320","2033352703","KR" +"2033352704","2033356799","ID" +"2033356800","2033358847","TW" +"2033358848","2033362943","JP" +"2033364992","2033369087","TW" +"2033369088","2033377279","AU" +"2033377280","2033385471","KR" +"2033385472","2033451007","CN" +"2033451008","2033487871","ID" +"2033487872","2033491967","PK" +"2033491968","2033500159","CN" +"2033500160","2033502207","AU" +"2033502208","2033504255","SG" +"2033504256","2033516543","CN" +"2033516544","2033582079","KR" +"2033582080","2033614847","PH" +"2033614848","2033623039","AU" +"2033625088","2033627135","HK" +"2033627136","2033629183","CN" +"2033629184","2033631231","JP" +"2033631232","2033647615","KR" +"2033647616","2033663999","CN" +"2033664000","2033696767","KR" +"2033696768","2033713151","GU" +"2033713152","2033876991","CN" +"2033876992","2033879039","JP" +"2033879040","2033887231","CN" +"2033887232","2033889279","IN" +"2033889280","2033891327","JP" +"2033891328","2033893375","ID" +"2033893376","2033909759","PH" +"2033909760","2034237439","CN" +"2034237440","2034499583","KR" +"2034499584","2034761727","CN" +"2034761728","2035023871","NZ" +"2035023872","2035154943","CN" +"2035154944","2035220479","KR" +"2035220480","2035253247","AU" +"2035253248","2035269631","CN" +"2035269632","2035286015","NZ" +"2035286016","2035810303","JP" +"2035810304","2035875839","KR" +"2035875840","2035941375","CN" +"2035941376","2036006911","NZ" +"2036006912","2036072447","AU" +"2036072448","2036334591","JP" +"2036334592","2036465663","PH" +"2036465664","2036596735","NZ" +"2036596736","2036598783","ID" +"2036598784","2036600831","JP" +"2036600832","2036604927","ID" +"2036604928","2036609023","SG" +"2036609024","2036611071","AF" +"2036611072","2036613119","JP" +"2036613120","2036629503","KR" +"2036629504","2036678655","CN" +"2036678656","2036695039","JP" +"2036695040","2036697087","ID" +"2036697088","2036699135","AU" +"2036699136","2036703231","IN" +"2036703232","2036705279","AU" +"2036705280","2036707327","HK" +"2036707328","2036709375","MN" +"2036709376","2036711423","ID" +"2036711424","2036715519","KR" +"2036715520","2036719615","CN" +"2036719616","2036727807","KR" +"2036727808","2037896959","JP" +"2037896960","2037897215","US" +"2037897216","2037907455","JP" +"2037907456","2038169599","MY" +"2038169600","2038366207","KR" +"2038366208","2038374399","PH" +"2038374400","2038382591","AF" +"2038382592","2038415359","KR" +"2038415360","2038423551","AU" +"2038423552","2038431743","HK" +"2038431744","2042626047","KR" +"2042626048","2043150335","CN" +"2043150336","2043162623","AU" +"2043162624","2043165695","IN" +"2043165696","2043166719","BD" +"2043166720","2043183103","KR" +"2043183104","2043199487","JP" +"2043199488","2043201535","CN" +"2043201536","2043203583","JP" +"2043203584","2043205631","AU" +"2043205632","2043207679","JP" +"2043207680","2043211775","AU" +"2043211776","2043215871","SG" +"2043215872","2043281407","CN" +"2043281408","2043412479","HK" +"2043412480","2043674623","CN" +"2043674624","2044723199","AU" +"2044723200","2045771775","CN" +"2045771776","2046296063","IN" +"2046296064","2046558207","CN" +"2046558208","2046705663","KR" +"2046705664","2046722047","TW" +"2046722048","2046754815","KR" +"2046754816","2046820351","CN" +"2046820352","2046822399","TH" +"2046822400","2046824447","KR" +"2046824448","2046828543","MY" +"2046828544","2046836735","KR" +"2046836736","2046885887","CN" +"2046885888","2046951423","JP" +"2046951424","2047082495","PH" +"2047082496","2047526911","CN" +"2047526912","2047531007","HK" +"2047531008","2047868927","CN" +"2047868928","2048917503","JP" +"2048917504","2049966079","KR" +"2049966080","2050047999","CN" +"2050048000","2050064383","KR" +"2050064384","2050080767","AU" +"2050080768","2050082815","JP" +"2050082816","2050084863","AU" +"2050084864","2050088959","PH" +"2050088960","2050091007","ID" +"2050091008","2050097151","JP" +"2050097152","2050099199","SG" +"2050099200","2050101247","IN" +"2050101248","2050113535","JP" +"2050113536","2050129919","SG" +"2050129920","2050162687","IN" +"2050162688","2050228223","CN" +"2050228224","2050490367","PH" +"2050490368","2051014655","NZ" +"2051014656","2053242879","CN" +"2053242880","2053308415","IN" +"2053308416","2053324799","TW" +"2053324800","2053332991","AU" +"2053332992","2053335039","BD" +"2053335040","2053337087","JP" +"2053337088","2053340159","AU" +"2053340160","2053341183","IN" +"2053341184","2053373951","KR" +"2053373952","2053378047","AU" +"2053378048","2053382143","JP" +"2053382144","2053390335","KR" +"2053390336","2053406719","TW" +"2053406720","2053439487","MO" +"2053439488","2053505023","KR" +"2053505024","2053509119","CN" +"2053509120","2053511167","AU" +"2053511168","2053513215","IN" +"2053513216","2053515263","BD" +"2053515264","2053519359","ID" +"2053519360","2053521407","JP" +"2053521408","2053529599","CN" +"2053529600","2053532671","AU" +"2053532672","2053533183","NZ" +"2053533184","2053533695","AU" +"2053533696","2053534719","VN" +"2053534720","2053537791","IN" +"2053537792","2053636095","JP" +"2053636096","2054160383","AU" +"2054160384","2054422527","CN" +"2054422528","2054619135","TW" +"2054619136","2054684671","CN" +"2054684672","2055208959","TW" +"2055208960","2055213055","JP" +"2055213056","2055217151","ID" +"2055217152","2055229439","KR" +"2055229440","2055231487","TW" +"2055231488","2055233535","AU" +"2055235584","2055237631","HK" +"2055237632","2055239679","JP" +"2055239680","2055241727","CN" +"2055241728","2055274495","KR" +"2055274496","2055290879","VN" +"2055290880","2055299071","PK" +"2055299072","2055305215","ID" +"2055305216","2055307263","MY" +"2055307264","2055315455","AU" +"2055315456","2055323647","JP" +"2055323648","2055327743","ID" +"2055327744","2055329791","KR" +"2055329792","2055331839","AU" +"2055331840","2055335935","JP" +"2055335936","2055340031","KR" +"2055340032","2055733247","JP" +"2055733248","2056257535","CN" +"2056257536","2056259583","ID" +"2056259584","2056261631","BD" +"2056261632","2056263679","IN" +"2056263680","2056265727","TH" +"2056265728","2056273919","TW" +"2056273920","2056290303","PH" +"2056290304","2056323071","CN" +"2056323072","2056340991","JP" +"2056340992","2056341247","US" +"2056341248","2056341503","JP" +"2056341504","2056341759","US" +"2056341760","2056342271","JP" +"2056342272","2056342527","US" +"2056342528","2056388607","JP" +"2056388608","2056519679","TW" +"2056519680","2056781823","AU" +"2056781824","2056794111","JP" +"2056794112","2056796159","BD" +"2056796160","2056806399","JP" +"2056806400","2056814591","KR" +"2056814592","2056818943","JP" +"2056818944","2056818993","MY" +"2056818994","2056818994","AP" +"2056818995","2056819199","MY" +"2056819200","2056830975","JP" +"2056830976","2056847359","CN" +"2056847360","2056912895","KR" +"2056912896","2057043967","TH" +"2057043968","2057306111","CN" +"2057306112","2059141119","IN" +"2059141120","2059665407","CN" +"2059665408","2059796479","JP" +"2059796480","2059862015","CN" +"2059862016","2059878399","AU" +"2059878400","2059927551","KR" +"2059927552","2059931647","ID" +"2059931648","2059933695","IN" +"2059933696","2059935743","AU" +"2059935744","2059937791","JP" +"2059937792","2059939839","BD" +"2059939840","2059941887","ID" +"2059941888","2059943935","AU" +"2059943936","2059960319","CN" +"2059960320","2059961343","JP" +"2059961344","2059962367","HK" +"2059962368","2059964415","JP" +"2059964416","2059966463","ID" +"2059966464","2059968511","TW" +"2059968512","2059976703","AU" +"2059976704","2059995135","JP" +"2059995136","2059997183","VN" +"2059997184","2060001279","MN" +"2060001280","2060001535","HK" +"2060001536","2060001791","US" +"2060001792","2060002303","HK" +"2060002304","2060002559","US" +"2060002560","2060002815","ID" +"2060002816","2060003071","US" +"2060003072","2060005375","HK" +"2060005376","2060009471","CN" +"2060009472","2060025855","AU" +"2060025856","2060058623","TW" +"2060058624","2060062719","AU" +"2060062720","2060066815","JP" +"2060066816","2060075007","KR" +"2060075008","2060083199","AU" +"2060083200","2060091391","PH" +"2060091392","2060189695","KR" +"2060189696","2060451839","CN" +"2060451840","2061500415","JP" +"2061500416","2063073279","CN" +"2063073280","2063077375","BD" +"2063077376","2063077377","HK" +"2063077378","2063077378","AP" +"2063077379","2063079423","HK" +"2063079424","2063081471","CN" +"2063081472","2063085567","ID" +"2063085568","2063089663","CN" +"2063089664","2063097855","JP" +"2063097856","2063106047","MM" +"2063106048","2063107071","JP" +"2063107072","2063107327","AP" +"2063107328","2063107623","JP" +"2063107624","2063107631","AU" +"2063107632","2063118335","JP" +"2063118336","2063118591","IN" +"2063118592","2063122431","JP" +"2063122432","2063138815","SG" +"2063138816","2063335423","JP" +"2063335424","2063341567","AU" +"2063341568","2063343615","SG" +"2063343616","2063351807","JP" +"2063351808","2063368191","KR" +"2063368192","2063372287","JP" +"2063372288","2063374335","AP" +"2063374336","2063376383","NZ" +"2063376384","2063380479","TW" +"2063380480","2063382527","KH" +"2063382528","2063384575","NZ" +"2063384576","2063392767","KR" +"2063392768","2063400959","IN" +"2063400960","2063466495","JP" +"2063466496","2063482879","TW" +"2063482880","2063499263","MN" +"2063499264","2063532031","KR" +"2063532032","2063548415","LK" +"2063548416","2063550463","CN" +"2063550464","2063551487","IN" +"2063551488","2063552511","JP" +"2063552512","2063556607","TW" +"2063556608","2063564799","MY" +"2063564800","2063597567","JP" +"2063597568","2063601663","KR" +"2063601664","2063605759","BD" +"2063605760","2063613951","TW" +"2063613952","2063630335","JP" +"2063630336","2063646719","CN" +"2063646720","2063663103","TW" +"2063663104","2063695871","JP" +"2063695872","2063728639","HK" +"2063728640","2063859711","AU" +"2063859712","2064646143","CN" +"2064646144","2065694719","VN" +"2065694720","2066743295","KR" +"2066743296","2066808831","JP" +"2066808832","2066825215","BD" +"2066825216","2066841599","SG" +"2066841600","2066874367","CN" +"2066874368","2066882559","JP" +"2066882560","2066890751","TW" +"2066890752","2066907135","PF" +"2066907136","2066915327","AU" +"2066915328","2066923519","CN" +"2066923520","2066939903","JP" +"2066939904","2066972671","AU" +"2066972672","2067005439","TW" +"2067005440","2067726335","CN" +"2067726336","2067791871","HK" +"2067791872","2070052863","CN" +"2070052864","2070056959","AU" +"2070056960","2070061055","JP" +"2070061056","2070077439","KR" +"2070077440","2070085631","JP" +"2070085632","2070102015","TW" +"2070102016","2070118399","KR" +"2070118400","2070159359","CN" +"2070159360","2070167551","AU" +"2070167552","2070183935","NZ" +"2070183936","2070192127","AU" +"2070192128","2070200319","KR" +"2070200320","2070208511","JP" +"2070208512","2070210047","SG" +"2070210048","2070210303","AU" +"2070210304","2070216703","SG" +"2070216704","2070282239","CN" +"2070282240","2070347775","AU" +"2070347776","2070380543","CN" +"2070380544","2070396927","JP" +"2070396928","2070405119","AU" +"2070405120","2070409215","JP" +"2070409216","2070413311","HK" +"2070413312","2070677503","JP" +"2070677504","2070679551","ID" +"2070679552","2070683647","KR" +"2070683648","2070691839","IN" +"2070691840","2070700031","AU" +"2070700032","2070702079","ID" +"2070702080","2070703103","AU" +"2070703104","2070704127","HK" +"2070704128","2070708223","PH" +"2070708224","2070712319","CN" +"2070712320","2070714367","NZ" +"2070714368","2070716415","JP" +"2070716416","2070724607","KR" +"2070724608","2070726655","JP" +"2070726656","2070728703","IN" +"2070728704","2070732799","CN" +"2070732800","2070734847","IN" +"2070734848","2070736895","JP" +"2070736896","2070738943","BD" +"2070738944","2070740991","KH" +"2070740992","2070806527","KR" +"2070806528","2070872063","TW" +"2070872064","2070937599","KR" +"2070937600","2072510463","CN" +"2072510464","2072514559","HK" +"2072514560","2072516607","IN" +"2072516608","2072518655","BD" +"2072518656","2072526847","AU" +"2072526848","2072528895","SG" +"2072528896","2072530943","PH" +"2072530944","2072535039","CN" +"2072535040","2072543231","MY" +"2072543232","2072575999","IN" +"2072576000","2072772607","CN" +"2072772608","2073034751","KR" +"2073034752","2075131903","CN" +"2075131904","2075140095","MV" +"2075140096","2075144191","IN" +"2075144192","2075146239","JP" +"2075146240","2075147263","BD" +"2075147264","2075148287","CN" +"2075148288","2075150335","PH" +"2075150336","2075152383","WS" +"2075152384","2075156479","CN" +"2075156480","2075158527","HK" +"2075158528","2075160575","JP" +"2075160576","2075162623","AU" +"2075162624","2075164671","ID" +"2075164672","2075197439","JP" +"2075197440","2076180479","CN" +"2076180480","2076442623","TW" +"2076442624","2076573695","CN" +"2076573696","2076639231","JP" +"2076639232","2076671999","KR" +"2076672000","2076704767","CN" +"2076704768","2076712959","BD" +"2076712960","2076721151","JP" +"2076721152","2076737535","KR" +"2076737536","2076770303","AU" +"2076770304","2076835839","IN" +"2076835840","2076966911","HK" +"2076966912","2077097983","TW" +"2077097984","2077229055","CN" +"2077229056","2077491199","AU" +"2077491200","2077753343","KR" +"2077753344","2078539775","JP" +"2078539776","2078670847","KR" +"2078670848","2078736383","JP" +"2078736384","2078769151","LK" +"2078769152","2078801919","ID" +"2078801920","2079064063","CN" +"2079064064","2079326207","IN" +"2079326208","2079457279","TW" +"2079457280","2079490047","CN" +"2079490048","2079506431","TH" +"2079508480","2079510527","PH" +"2079510528","2079514623","JP" +"2079514624","2079516671","HK" +"2079516672","2079518719","JP" +"2079518720","2079522815","IN" +"2079522816","2079588351","AU" +"2079588352","2079850495","CN" +"2079850496","2079916031","KR" +"2079916032","2079981567","CN" +"2079981568","2080112639","KR" +"2080112640","2080145407","TW" +"2080145408","2080178175","IN" +"2080178176","2080243711","CN" +"2080243712","2080260095","JP" +"2080260096","2080268287","KR" +"2080268288","2080270335","AU" +"2080270336","2080272383","HK" +"2080272384","2080276479","AU" +"2080276480","2080309247","KR" +"2080309248","2080325631","NZ" +"2080325632","2080342015","HK" +"2080342016","2080360447","JP" +"2080360448","2080362495","ID" +"2080362496","2080366591","AU" +"2080366592","2080368639","TW" +"2080368640","2080372735","JP" +"2080372736","2080374783","IN" +"2080374784","2080636927","KR" +"2080636928","2080702463","IN" +"2080702464","2080767999","KR" +"2080768000","2080776191","TW" +"2080776192","2080784383","ID" +"2080784384","2080800767","CN" +"2080800768","2080817151","PH" +"2080817152","2080825343","NZ" +"2080825344","2080829439","BD" +"2080829440","2080833535","LK" +"2080833536","2080899071","IN" +"2080899072","2081226751","TW" +"2081226752","2081292287","MY" +"2081292288","2081554431","CN" +"2081554432","2081619967","JP" +"2081619968","2081652735","AU" +"2081652736","2081685503","PH" +"2081685504","2081947647","CN" +"2081947648","2082209791","JP" +"2082209792","2082258943","KR" +"2082258944","2082308095","CN" +"2082308096","2082324479","TW" +"2082324480","2082340863","PK" +"2082340864","2082406399","IN" +"2082406400","2082471935","CN" +"2082471936","2083007487","JP" +"2083007488","2083009023","US" +"2083009024","2083010047","JP" +"2083010048","2083011327","US" +"2083011328","2083011583","JP" +"2083011584","2083012607","US" +"2083012608","2083024895","JP" +"2083024896","2083053567","CN" +"2083053568","2083057663","TH" +"2083057664","2083058687","AU" +"2083058688","2083059711","IN" +"2083059712","2083061759","ID" +"2083061760","2083110911","JP" +"2083110912","2083127295","NP" +"2083127296","2083192831","CN" +"2083192832","2083258367","LK" +"2083258368","2083389439","JP" +"2083389440","2083454975","KR" +"2083454976","2083471359","CN" +"2083471360","2083487743","JP" +"2083487744","2083504127","AU" +"2083504128","2083520511","JP" +"2083520512","2084569087","KR" +"2084569088","2084732927","CN" +"2084732928","2084741119","SG" +"2084741120","2084743167","ID" +"2084745216","2084749311","KR" +"2084749312","2084753407","JP" +"2084753408","2084757503","KR" +"2084757504","2084765695","JP" +"2084765696","2085617663","CN" +"2085617664","2085683199","KR" +"2085683200","2085748735","ID" +"2085748736","2085814271","MY" +"2085814272","2085847039","PH" +"2085847040","2086141951","JP" +"2086141952","2086666239","CN" +"2086666240","2087190527","JP" +"2087190528","2087452671","PH" +"2087452672","2087453695","AU" +"2087453696","2087454719","KH" +"2087454720","2087456767","CN" +"2087456768","2087457791","MY" +"2087458816","2087460863","FJ" +"2087460864","2087462911","JP" +"2087462912","2087464959","CN" +"2087464960","2087467007","KH" +"2087467008","2087469055","JP" +"2087469056","2087481343","HK" +"2087481344","2087485439","SG" +"2087485440","2087501823","TW" +"2087501824","2087518207","JP" +"2087518208","2087519231","TH" +"2087519232","2087520255","SG" +"2087520256","2087522303","FM" +"2087522304","2087524351","BD" +"2087524352","2087526399","TH" +"2087526400","2087534591","PK" +"2087534592","2087542783","AU" +"2087542784","2087544831","CN" +"2087544832","2087545855","BD" +"2087545856","2087546879","JP" +"2087546880","2087550975","TW" +"2087550976","2087649279","JP" +"2087649280","2087714815","KR" +"2087714816","2088239103","CN" +"2088239104","2088435711","TH" +"2088435712","2088632319","IN" +"2088632320","2089287679","CN" +"2089287680","2089549823","KR" +"2089549824","2089943039","JP" +"2089943040","2089959423","KR" +"2089959424","2090041343","JP" +"2090041344","2090074111","CN" +"2090074112","2090237951","AU" +"2090237952","2090239999","TW" +"2090240000","2090240255","IN" +"2090241024","2090242047","MY" +"2090242048","2090246143","JP" +"2090246144","2090250239","NZ" +"2090250240","2090270719","JP" +"2090270720","2090401791","CN" +"2090401792","2090418175","ID" +"2090418176","2090434559","IN" +"2090434560","2090467327","KR" +"2090467328","2090565631","JP" +"2090565632","2090582015","TW" +"2090582016","2090590207","SG" +"2090590208","2090594303","NZ" +"2090594304","2090598399","IN" +"2090598400","2090663935","CN" +"2090663936","2090680319","VN" +"2090680320","2090696703","NZ" +"2090696704","2090729471","TH" +"2090729472","2090733567","VN" +"2090733568","2090736639","AU" +"2090736640","2090737663","IN" +"2090737664","2090745855","PH" +"2090745856","2090762239","MN" +"2090762240","2090778623","ID" +"2090778624","2090786815","HK" +"2090786816","2090795007","MY" +"2090795008","2090860543","JP" +"2090860544","2091384831","CN" +"2091384832","2091646975","AU" +"2091646976","2091909119","CN" +"2091909120","2092957695","AU" +"2092957696","2093088767","CN" +"2093088768","2093154303","KR" +"2093154304","2093187071","ID" +"2093187072","2093191167","MY" +"2093191168","2093195263","JP" +"2093195264","2093203455","KR" +"2093203456","2093211647","MV" +"2093211648","2093219839","KR" +"2093219840","2093285375","CN" +"2093285376","2093301759","NZ" +"2093301760","2093318143","SG" +"2093318144","2093342719","KR" +"2093342720","2093350911","MY" +"2093350912","2093383679","KR" +"2093383680","2093416447","NZ" +"2093416448","2093432831","KR" +"2093432832","2093445119","TW" +"2093445120","2093449215","AF" +"2093449216","2093481983","KR" +"2093481984","2094006271","CN" +"2094006272","2094530559","JP" +"2094530560","2094596095","KR" +"2094596096","2094628863","PH" +"2094628864","2094645247","HK" +"2094645248","2094653439","KR" +"2094653440","2094661631","MY" +"2094661632","2094759935","TW" +"2094759936","2094792703","JP" +"2094792704","2096152575","CN" +"2096152576","2096160767","PG" +"2096160768","2096234495","JP" +"2096234496","2096300031","CN" +"2096300032","2096332799","KR" +"2096332800","2096349183","AU" +"2096349184","2096365567","CN" +"2096365568","2096431103","HK" +"2096431104","2096496639","JP" +"2096496640","2096513023","AU" +"2096513024","2096529407","SG" +"2096529408","2096611327","JP" +"2096611328","2096627711","IN" +"2096627712","2096660479","CN" +"2096660480","2096664575","NZ" +"2096664576","2096668671","JP" +"2096668672","2096676863","KH" +"2096676864","2096693247","HK" +"2096693248","2096889855","CN" +"2096889856","2096955391","AU" +"2096955392","2097020927","IN" +"2097020928","2097037311","CN" +"2097037312","2097053695","AU" +"2097053696","2097086463","KR" +"2097086464","2097479679","JP" +"2097479680","2097545215","PH" +"2097545216","2097610751","JP" +"2097610752","2097643519","AU" +"2097643520","2097676287","KR" +"2097676288","2098114815","JP" +"2098114816","2098115071","US" +"2098115072","2098122495","JP" +"2098122496","2098122751","US" +"2098122752","2098200575","JP" +"2098200576","2098724863","IN" +"2098724864","2098987007","TH" +"2098987008","2099183615","JP" +"2099183616","2099199999","MO" +"2099200000","2099216383","JP" +"2099216384","2099232767","KR" +"2099232768","2100297727","CN" +"2100297728","2100854783","JP" +"2100854784","2100887551","US" +"2100887552","2100953087","KR" +"2100953088","2100969471","VN" +"2100969472","2100985855","JP" +"2100985856","2101018623","CN" +"2101018624","2101084159","HK" +"2101084160","2101116927","KR" +"2101116928","2101149695","PH" +"2101149696","2101182463","KR" +"2101182464","2101231615","CN" +"2101231616","2101239807","AU" +"2101239808","2101270527","IN" +"2101270528","2101272575","KR" +"2101272576","2101276671","TW" +"2101276672","2101280767","JP" +"2101280768","2101288959","AU" +"2101288960","2101293055","JP" +"2101293056","2101297151","AU" +"2101297152","2101313535","IN" +"2101313536","2101346303","AU" +"2101346304","2103640063","CN" +"2103640064","2103705599","IN" +"2103705600","2103967743","JP" +"2103967744","2105540607","CN" +"2105540608","2107637759","KR" +"2107637760","2108162047","ID" +"2108162048","2108227583","AU" +"2108227584","2108293119","CN" +"2108293120","2108358655","JP" +"2108358656","2108424191","CN" +"2108424192","2108686335","JP" +"2108686336","2109734911","KR" +"2109734912","2110783487","JP" +"2110783488","2110799871","CN" +"2110799872","2110816255","KR" +"2110816256","2110832639","ID" +"2110832640","2110865407","KR" +"2110865408","2110881791","PK" +"2110881792","2110898175","AU" +"2110898176","2110914559","KR" +"2110914560","2111045631","CN" +"2111045632","2111078399","PH" +"2111078400","2111111167","VN" +"2111111168","2111143935","CN" +"2111143936","2111152127","ID" +"2111152128","2111160319","AU" +"2111160320","2111168511","AF" +"2111168512","2111176703","TH" +"2111176704","2111193087","VN" +"2111193088","2111201279","AU" +"2111201280","2111209471","CN" +"2111209472","2111217663","JP" +"2111217664","2111225855","LK" +"2111225856","2111242239","HK" +"2111242240","2111258623","CN" +"2111258624","2111275007","JP" +"2111275008","2111307775","HK" +"2111307776","2111832063","CN" +"2111832064","2112487423","TW" +"2112487424","2112618495","VN" +"2112618496","2112880639","NZ" +"2112880640","2113683455","KR" +"2113683456","2113716223","JP" +"2113716224","2113732607","SG" +"2113732608","2113761279","AU" +"2113761280","2113765375","VN" +"2113765376","2113798143","HK" +"2113798144","2113811455","AU" +"2113811456","2113812479","HK" +"2113812480","2113813503","JP" +"2113813504","2113830911","AU" +"2113830912","2113863679","CN" +"2113863680","2113929215","AU" +"2113929216","2130706431","JP" +"2147483648","2147549183","EU" +"2147549184","2147942399","US" +"2147942400","2148007935","DE" +"2148007936","2148220515","US" +"2148220516","2148220535","AU" +"2148220536","2148229151","US" +"2148229152","2148229183","CA" +"2148229184","2148532223","US" +"2148532224","2148597759","GB" +"2148597760","2150039551","US" +"2150039552","2150105087","NO" +"2150105088","2150236159","GB" +"2150236160","2150301695","US" +"2150301696","2150367231","CA" +"2150367232","2150432767","US" +"2150432768","2150498303","IT" +"2150498304","2151743487","US" +"2151743488","2151759871","BY" +"2151759872","2151768063","US" +"2151768064","2151770111","GB" +"2151770112","2151772159","BA" +"2151772160","2151776255","IT" +"2151776256","2151778303","AT" +"2151778304","2151780351","RU" +"2151780352","2151782399","DE" +"2151782400","2151784447","ES" +"2151784448","2151792639","IR" +"2151792640","2151794687","CH" +"2151794688","2151796735","IT" +"2151796736","2151797759","NL" +"2151797760","2151797775","DE" +"2151797776","2151799807","NL" +"2151799808","2151800831","DE" +"2151800832","2151809023","PT" +"2151809024","2151940095","IT" +"2151940096","2152464383","RU" +"2152464384","2152595455","DK" +"2152595456","2152726527","FR" +"2152726528","2153119743","US" +"2153119744","2153185279","GB" +"2153185280","2153250815","SE" +"2153250816","2153316095","US" +"2153316096","2153316351","AP" +"2153316352","2153578495","US" +"2153578496","2153644031","FR" +"2153644032","2153906175","US" +"2153906176","2153971711","GB" +"2153971712","2154037247","US" +"2154037248","2154102783","CA" +"2154102784","2155610111","US" +"2155610112","2155675647","UA" +"2155675648","2155806719","US" +"2155806720","2155808767","IT" +"2155808768","2155810815","RU" +"2155810816","2155812863","FR" +"2155812864","2155814911","GB" +"2155814912","2155819007","NL" +"2155819008","2155821055","DE" +"2155821056","2155823103","IT" +"2155823104","2155825151","DE" +"2155825152","2155827199","AE" +"2155827200","2155831295","PL" +"2155831296","2155833343","RU" +"2155833344","2155833855","SE" +"2155833856","2155834623","NL" +"2155834624","2155834879","LU" +"2155834880","2155835391","NL" +"2155835392","2155839487","RO" +"2155839488","2155843583","FR" +"2155843584","2155845631","RU" +"2155845632","2155847679","DE" +"2155847680","2155849727","ES" +"2155849728","2155851775","TR" +"2155851776","2155853823","KZ" +"2155853824","2155855871","SE" +"2155855872","2155872255","RO" +"2155872256","2156003327","US" +"2156003328","2156134399","AT" +"2156134400","2156265471","US" +"2156265472","2156331007","KR" +"2156331008","2156593151","US" +"2156593152","2156658687","IL" +"2156658688","2156691455","IR" +"2156691456","2156691478","A2" +"2156691479","2156691479","FR" +"2156691480","2156695551","A2" +"2156695552","2156697599","FR" +"2156697600","2156699647","CY" +"2156699648","2156703743","RU" +"2156703744","2156707839","BG" +"2156707840","2156709887","RU" +"2156709888","2156711935","ES" +"2156711936","2156713983","DE" +"2156713984","2156716031","NL" +"2156716032","2156718079","RO" +"2156718080","2156720127","IS" +"2156720128","2156724223","BY" +"2156724224","2156855295","CH" +"2156855296","2156920831","US" +"2156920832","2156986367","CA" +"2156986368","2159017983","US" +"2159017984","2159083519","DE" +"2159083520","2159149055","US" +"2159149056","2159280127","CH" +"2159280128","2159542271","US" +"2159542272","2159607807","AU" +"2159607808","2159869951","US" +"2159869952","2159935487","CA" +"2159935488","2160525311","US" +"2160525312","2160590847","GB" +"2160590848","2160656383","US" +"2160656384","2160721919","EU" +"2160721920","2160852991","US" +"2160852992","2160885759","RU" +"2160885760","2160893951","AT" +"2160893952","2160902143","RU" +"2160902144","2160903428","NL" +"2160903429","2160903556","ES" +"2160903557","2160904452","NL" +"2160904453","2160904580","RO" +"2160904581","2160904717","NL" +"2160904718","2160904719","GB" +"2160904720","2160904727","NL" +"2160904728","2160904729","GB" +"2160904730","2160904741","NL" +"2160904742","2160904743","GB" +"2160904744","2160904746","NL" +"2160904747","2160904775","GB" +"2160904776","2160904782","NL" +"2160904783","2160904874","GB" +"2160904875","2160905286","NL" +"2160905287","2160905287","TR" +"2160905288","2160905397","NL" +"2160905398","2160905398","ES" +"2160905399","2160906239","NL" +"2160906240","2160908287","FR" +"2160908288","2160910335","PL" +"2160910336","2160914431","NL" +"2160914432","2160918527","SA" +"2160918528","2161508351","US" +"2161508352","2161573887","FI" +"2161573888","2162687999","US" +"2162688000","2162753535","GB" +"2162753536","2162819071","CA" +"2162819072","2162884607","RO" +"2162884608","2163212287","US" +"2163212288","2163277823","GB" +"2163277824","2163288063","US" +"2163288064","2163290111","A1" +"2163290112","2163304447","US" +"2163304448","2163306495","A1" +"2163306496","2163408895","US" +"2163408896","2163474431","GB" +"2163474432","2163605503","US" +"2163605504","2163623935","CH" +"2163623936","2163624191","AP" +"2163624192","2163638271","CH" +"2163638272","2163638527","US" +"2163638528","2163671039","CH" +"2163671040","2163867647","US" +"2163867648","2163933183","AU" +"2163933184","2164981759","US" +"2164981760","2165112831","GB" +"2165112832","2165178367","DE" +"2165178368","2165309439","US" +"2165309440","2165374975","SE" +"2165374976","2165440511","US" +"2165506048","2165571583","US" +"2165571584","2165637119","FR" +"2165637120","2165964799","US" +"2165964800","2166030335","DE" +"2166030336","2166095871","AT" +"2166095872","2166292479","US" +"2166292480","2166358015","GB" +"2166358016","2166466559","US" +"2166466560","2166466815","CA" +"2166466816","2166571007","US" +"2166571008","2166575103","GB" +"2166575104","2166575359","US" +"2166575360","2166575615","GB" +"2166575616","2166607009","US" +"2166607010","2166607010","DE" +"2166607011","2166613759","US" +"2166613760","2166614015","DE" +"2166614016","2168193023","US" +"2168193024","2168258559","JP" +"2168258560","2168651775","US" +"2168651776","2168717311","GB" +"2168717312","2168782847","US" +"2168782848","2168913919","DE" +"2168913920","2169372671","US" +"2169372672","2169438207","AU" +"2169438208","2170028031","US" +"2170028032","2170093567","FR" +"2170093568","2170159103","US" +"2170159104","2170224639","VE" +"2170224640","2170421247","US" +"2170421248","2170486783","AU" +"2170486784","2170552319","US" +"2170552320","2170617855","AU" +"2170617856","2170683391","CA" +"2170683392","2170814463","US" +"2170814464","2170879999","CA" +"2170880000","2170945535","US" +"2170945536","2171011071","FR" +"2171011072","2171076607","DE" +"2171076608","2171142143","FR" +"2171142144","2172452863","US" +"2172452864","2172518399","NL" +"2172518400","2172583935","US" +"2172583936","2172649471","AU" +"2172649472","2172715007","CA" +"2172715008","2172780543","CH" +"2172780544","2172911615","US" +"2172911616","2172977151","CH" +"2172977152","2173173759","US" +"2173173760","2173239295","JP" +"2173239296","2173435903","US" +"2173501440","2173566975","US" +"2173566976","2173632511","DK" +"2173632512","2173698047","DE" +"2173698048","2175336447","US" +"2175336448","2175401983","GB" +"2175401984","2175598591","US" +"2175598592","2175664127","CA" +"2175664128","2175729663","US" +"2175729664","2175795199","FR" +"2175795200","2175860735","US" +"2175860736","2175926271","NO" +"2175926272","2175991807","SE" +"2175991808","2176057343","US" +"2176057344","2176122879","AU" +"2176122880","2176450559","FR" +"2176450560","2176516095","US" +"2176516096","2176581631","DE" +"2176581632","2176868607","US" +"2176868608","2176868863","IT" +"2176868864","2176893951","US" +"2176893952","2176894207","AP" +"2176894208","2176974847","US" +"2176974848","2177105919","CH" +"2177105920","2177302527","US" +"2177302528","2177368063","FR" +"2177368064","2177695743","US" +"2177761280","2177826815","DE" +"2177826816","2177892351","US" +"2177892352","2177957887","GB" +"2177957888","2178351103","US" +"2178351104","2178416639","GB" +"2178416640","2178482175","US" +"2178482176","2178547711","DE" +"2178547712","2179379199","US" +"2179379200","2179399679","GB" +"2179399680","2179465215","US" +"2179530752","2179596287","DE" +"2179596288","2179661823","GB" +"2179661824","2179989503","US" +"2179989504","2180186111","NO" +"2180186112","2180448255","US" +"2180448256","2180513791","DE" +"2180513792","2180579327","US" +"2180579328","2180644863","JP" +"2180644864","2180645453","US" +"2180645454","2180645454","GB" +"2180645455","2180646372","US" +"2180646373","2180646373","DE" +"2180646374","2180657313","US" +"2180657314","2180657314","JP" +"2180657315","2180657317","US" +"2180657318","2180657318","JP" +"2180657319","2180657324","US" +"2180657325","2180657325","GB" +"2180657326","2180657340","US" +"2180657341","2180657341","NL" +"2180657342","2180657364","US" +"2180657365","2180657365","FR" +"2180657366","2180657372","US" +"2180657373","2180657373","DE" +"2180657374","2180907007","US" +"2180907008","2180972543","KR" +"2180972544","2181038079","US" +"2181038080","2181040127","GB" +"2181040128","2181042175","AZ" +"2181042176","2181044223","DE" +"2181044224","2181046271","AL" +"2181046272","2181054463","UA" +"2181054464","2181056511","AT" +"2181056512","2181058559","DE" +"2181058560","2181060607","GB" +"2181060608","2181062655","BA" +"2181062656","2181070847","FR" +"2181070848","2181087231","IT" +"2181087232","2181089279","FR" +"2181089280","2181091327","SE" +"2181091328","2181093375","IT" +"2181093376","2181095423","RU" +"2181095424","2181097471","GB" +"2181097472","2181099519","UA" +"2181099520","2181103615","SY" +"2181103616","2181824511","US" +"2181824512","2181890047","CA" +"2181890048","2182021119","US" +"2182021120","2182086655","CA" +"2182086656","2182610943","US" +"2182610944","2182676479","GB" +"2182676480","2182742015","IT" +"2182742016","2182873087","US" +"2182873088","2182938623","SE" +"2182938624","2183135231","US" +"2183135232","2183200767","GB" +"2183200768","2183266303","US" +"2183266304","2183331839","JP" +"2183331840","2183416575","US" +"2183416576","2183416831","GB" +"2183416832","2183419647","US" +"2183419648","2183419903","EU" +"2183419904","2183421695","US" +"2183421696","2183421951","EU" +"2183421952","2183437055","US" +"2183437056","2183437311","AP" +"2183437312","2183462911","US" +"2183462912","2183528447","NL" +"2183528448","2183856127","US" +"2183856128","2183888895","GR" +"2183888896","2183905279","GB" +"2183905280","2183921663","HU" +"2183921664","2184577023","US" +"2184577024","2184642559","JP" +"2184642560","2184708095","US" +"2184708096","2184773631","AU" +"2184773632","2184904703","US" +"2184904704","2185035775","CH" +"2185035776","2185166847","US" +"2185166848","2185232383","CA" +"2185232384","2185363455","US" +"2185363456","2185428991","FR" +"2185428992","2185494527","NO" +"2185494528","2185560063","US" +"2185560064","2185625599","JP" +"2185625600","2185822207","US" +"2185822208","2185887743","DE" +"2185887744","2185953279","US" +"2185953280","2186018815","DE" +"2186018816","2186149887","US" +"2186149888","2186215423","NL" +"2186215424","2186280959","FR" +"2186280960","2186412031","US" +"2186412032","2186477567","CH" +"2186477568","2186543103","DE" +"2186543104","2186608639","FR" +"2186608640","2186739711","US" +"2186739712","2186805247","JP" +"2186805248","2186870783","GB" +"2186870784","2186936319","NL" +"2186936320","2187067391","US" +"2187067392","2187132927","CH" +"2187132928","2187221887","US" +"2187221888","2187222015","A1" +"2187222016","2187225471","US" +"2187225472","2187225599","A1" +"2187225600","2187225823","US" +"2187225824","2187225855","A1" +"2187225856","2187225983","US" +"2187225984","2187226111","A1" +"2187226112","2187229471","US" +"2187229472","2187229479","A1" +"2187229480","2187229607","US" +"2187229608","2187229615","A1" +"2187229616","2187229679","US" +"2187229680","2187229687","A1" +"2187229688","2187230111","US" +"2187230112","2187230143","A1" +"2187230144","2187232511","US" +"2187232512","2187232639","A1" +"2187232640","2187232767","US" +"2187232768","2187233023","A1" +"2187233024","2187263999","US" +"2187264000","2187329535","AU" +"2187329536","2187460607","US" +"2187460608","2187526143","FR" +"2187526144","2187591679","US" +"2187591680","2187657215","SE" +"2187657216","2187722751","US" +"2187722752","2187788287","AU" +"2187788288","2187853823","US" +"2187853824","2187919359","BE" +"2187919360","2188378111","US" +"2188378112","2188443647","NL" +"2188443648","2188509183","CA" +"2188509184","2188574719","US" +"2188574720","2188640255","NL" +"2188640256","2188705791","AU" +"2188705792","2188705857","EU" +"2188705858","2188705858","DE" +"2188705859","2188705957","EU" +"2188705958","2188705958","DE" +"2188705959","2188706101","EU" +"2188706102","2188706102","DE" +"2188706103","2188706453","EU" +"2188706454","2188706454","DK" +"2188706455","2188711800","EU" +"2188711801","2188711801","DE" +"2188711802","2188718581","EU" +"2188718582","2188718582","DE" +"2188718583","2188724463","EU" +"2188724464","2188724464","NL" +"2188724465","2188726783","EU" +"2188726784","2188727039","GB" +"2188727040","2188771327","EU" +"2188771328","2188900351","US" +"2188900352","2188900607","EU" +"2188900608","2188902399","US" +"2188902400","2188967935","FR" +"2188967936","2189099007","US" +"2189099008","2189164543","NZ" +"2189164544","2189230079","US" +"2189230080","2189295615","CH" +"2189295616","2189492223","US" +"2189492224","2189557759","CZ" +"2189557760","2189623295","AU" +"2189623296","2189754367","US" +"2189754368","2189819903","DE" +"2189819904","2189950975","US" +"2189950976","2190016511","IT" +"2190016512","2190082047","US" +"2190082048","2190140159","NL" +"2190140160","2190140415","EU" +"2190140416","2190737407","NL" +"2190737408","2190802943","GB" +"2190802944","2190868479","DE" +"2190868480","2191065087","US" +"2191065088","2191130623","JP" +"2191130624","2191196159","US" +"2191196160","2191261695","AU" +"2191261696","2191392767","US" +"2191392768","2191458303","JP" +"2191458304","2191523839","GB" +"2191523840","2191589375","US" +"2191589376","2191654911","NL" +"2191654912","2192132863","US" +"2192132864","2192133119","DE" +"2192133120","2192769023","US" +"2192769024","2192834559","CA" +"2192834560","2192867327","DE" +"2192867328","2192883711","SY" +"2192883712","2192885759","PL" +"2192885760","2192887807","GB" +"2192887808","2192891903","UA" +"2192891904","2192900095","RS" +"2192900096","2193031167","US" +"2193031168","2193096703","DE" +"2193096704","2193162239","US" +"2193162240","2193178623","UA" +"2193178624","2193180671","GB" +"2193180672","2193181695","IR" +"2193181696","2193182207","DE" +"2193182208","2193182719","IR" +"2193182720","2193184767","PT" +"2193184768","2193186815","ES" +"2193186816","2193188863","PL" +"2193188864","2193189919","DE" +"2193189920","2193189935","NL" +"2193189936","2193190911","DE" +"2193190912","2193195007","RU" +"2193195008","2193199103","DK" +"2193199104","2193201151","GB" +"2193201152","2193202175","SE" +"2193202176","2193203199","US" +"2193203200","2193205247","GB" +"2193205248","2193207295","FR" +"2193207296","2193209343","CZ" +"2193209344","2193211391","FR" +"2193211392","2193227775","BG" +"2193227776","2193293311","IT" +"2193293312","2193358847","US" +"2193358848","2193424383","FI" +"2193424384","2193489919","US" +"2193489920","2193555455","FR" +"2193555456","2193620991","US" +"2193620992","2193686527","IT" +"2193686528","2193688575","FR" +"2193688576","2193691199","CZ" +"2193691200","2193691263","SK" +"2193691264","2193692671","CZ" +"2193692672","2193694719","FR" +"2193694720","2193704959","RU" +"2193704960","2193707007","IT" +"2193707008","2193711103","GB" +"2193711104","2193713151","DE" +"2193713152","2193715199","ES" +"2193715200","2193717247","DE" +"2193717248","2193719295","AM" +"2193719296","2193752063","IQ" +"2193752064","2193817599","AU" +"2193817600","2193883135","NZ" +"2193883136","2194014207","US" +"2194014208","2194079743","CH" +"2194079744","2194210815","US" +"2194210816","2194276351","GB" +"2194276352","2194407423","US" +"2194407424","2194472959","BG" +"2194472960","2194538495","US" +"2194538496","2194604031","ES" +"2194604032","2194669567","US" +"2194669568","2194735103","IS" +"2194735104","2194800639","GB" +"2194800640","2194866175","US" +"2194931712","2195069436","US" +"2195069437","2195069437","AP" +"2195069438","2195073023","US" +"2195073024","2195073279","EU" +"2195073280","2195193855","US" +"2195193856","2195324927","NZ" +"2195324928","2195455999","US" +"2195456000","2195521535","AU" +"2195521536","2195652607","US" +"2195652608","2195718143","CH" +"2195718144","2195783679","US" +"2195783680","2196045823","DK" +"2196045824","2196111359","SE" +"2196111360","2196439039","FI" +"2196439040","2197094399","SE" +"2197094400","2197159935","US" +"2197159936","2197225471","GB" +"2197225472","2197422079","US" +"2197422080","2197487615","CA" +"2197487616","2197553151","IT" +"2197553152","2197749759","US" +"2197749760","2197751807","IQ" +"2197751808","2197753855","RU" +"2197753856","2197757951","GB" +"2197757952","2197766143","RU" +"2197766144","2197768191","PS" +"2197768192","2197770239","IL" +"2197770240","2197772287","RU" +"2197772288","2197774335","IQ" +"2197774336","2197776383","IT" +"2197776384","2197778431","DE" +"2197778432","2197780479","IT" +"2197780480","2197782527","DE" +"2197782528","2197786623","UA" +"2197786624","2197788671","IT" +"2197788672","2197790719","PL" +"2197790720","2197790947","SE" +"2197790948","2197790951","EE" +"2197790952","2197791111","SE" +"2197791112","2197791115","LV" +"2197791116","2197791455","SE" +"2197791456","2197791459","LT" +"2197791460","2197792767","SE" +"2197792768","2197794815","IT" +"2197794816","2197796863","SA" +"2197796864","2197798911","DE" +"2197798912","2197815295","IR" +"2197880832","2197946367","IT" +"2197946368","2204172287","US" +"2204172288","2204237823","SE" +"2204237824","2204303359","US" +"2204303360","2204368895","DE" +"2204434432","2204499967","US" +"2204499968","2204565503","CH" +"2204565504","2204631039","US" +"2204631040","2204696575","CA" +"2204696576","2204893183","US" +"2204958720","2205089791","US" +"2205089792","2205155327","GB" +"2205155328","2205286399","JP" +"2205286400","2205351935","IT" +"2205351936","2205483007","SE" +"2205483008","2205515775","CH" +"2205515776","2205519871","AZ" +"2205519872","2205523967","DE" +"2205523968","2205526015","YE" +"2205526016","2205528063","GB" +"2205528064","2205530111","SE" +"2205530112","2205532159","GB" +"2205532160","2205534207","CZ" +"2205534208","2205536255","FR" +"2205536256","2205538303","CZ" +"2205538304","2205540351","RU" +"2205540352","2205548543","IQ" +"2205548544","2206269439","US" +"2206269440","2206334975","CA" +"2206334976","2206400511","AT" +"2206400512","2206466047","US" +"2206466048","2207121407","CA" +"2207121408","2207449087","US" +"2207449088","2207647487","CA" +"2207647488","2207647743","US" +"2207647744","2207648511","CA" +"2207648512","2207649791","US" +"2207649792","2207653631","CA" +"2207653632","2207653887","US" +"2207653888","2207659775","CA" +"2207659776","2207660031","US" +"2207660032","2207661567","CA" +"2207661568","2207661823","US" +"2207661824","2207666175","CA" +"2207666176","2207667199","US" +"2207667200","2207678975","CA" +"2207678976","2207679487","US" +"2207679488","2207694335","CA" +"2207694336","2207694591","US" +"2207694592","2207711231","CA" +"2207711232","2207776767","US" +"2207776768","2207842303","CH" +"2207842304","2207907839","US" +"2207907840","2207973375","IT" +"2207973376","2208038911","NL" +"2208038912","2208235519","US" +"2208235520","2208301055","DE" +"2208301056","2208366591","FI" +"2208432128","2208563199","CA" +"2208563200","2208759807","DK" +"2208759808","2208890879","US" +"2208890880","2208956415","DE" +"2208956416","2209021951","AU" +"2209021952","2209087487","US" +"2209087488","2209153023","AU" +"2209153024","2209218559","DE" +"2209218560","2209284095","NL" +"2209284096","2209349631","IT" +"2209349632","2209415167","US" +"2209415168","2209480703","FI" +"2209480704","2209546239","MX" +"2209546240","2209611775","US" +"2209611776","2209677311","NL" +"2209677312","2209742847","AU" +"2209742848","2209939455","US" +"2209939456","2210004991","AU" +"2210004992","2210136063","US" +"2210136064","2210201599","DE" +"2210201600","2210594815","US" +"2210594816","2210660351","CA" +"2210660352","2210725887","EU" +"2210725888","2211053567","US" +"2211053568","2211119103","CA" +"2211119104","2211184639","NZ" +"2211184640","2211250175","US" +"2211250176","2211315711","SE" +"2211315712","2211381247","JP" +"2211381248","2211446783","FI" +"2211446784","2211643391","US" +"2211643392","2211708927","NL" +"2211708928","2211774463","US" +"2211774464","2211839999","CA" +"2211840000","2212036607","US" +"2212036608","2212102143","AU" +"2212102144","2212233215","US" +"2212233216","2212298751","DE" +"2212364288","2212495359","US" +"2212495360","2212560895","NL" +"2212560896","2212691967","US" +"2212691968","2212757503","GB" +"2212757504","2212761599","FI" +"2212761600","2212762623","GB" +"2212762624","2212766719","FI" +"2212766720","2212767743","GB" +"2212767744","2212810751","FI" +"2212810752","2212811519","US" +"2212811520","2212823039","FI" +"2212823040","2212954111","US" +"2212954112","2213019647","GB" +"2213019648","2213085183","CA" +"2213085184","2213150719","US" +"2213150720","2213216255","DE" +"2213216256","2213281791","CA" +"2213281792","2213347327","AU" +"2213347328","2213412863","NL" +"2213412864","2213675007","US" +"2213675008","2213740543","AU" +"2213740544","2213806079","US" +"2213806080","2213937151","AU" +"2213937152","2214002687","DE" +"2214002688","2214068223","US" +"2214068224","2214133759","JP" +"2214133760","2214264831","US" +"2214264832","2214330367","GB" +"2214330368","2214397951","US" +"2214397952","2214398207","CA" +"2214398208","2214398975","US" +"2214398976","2214400767","CA" +"2214400768","2214401279","US" +"2214401280","2214408191","CA" +"2214408192","2214411519","US" +"2214411520","2214461439","CA" +"2214461440","2214526975","FR" +"2214592512","2218786815","US" +"2218786816","2219769855","IL" +"2219769856","2224160767","US" +"2224160768","2224226303","GB" +"2224226304","2224357375","US" +"2224357376","2224422911","FR" +"2224422912","2224488447","NO" +"2224488448","2224619519","US" +"2224619520","2224685055","GB" +"2224685056","2224750591","US" +"2224750592","2224816127","FI" +"2224816128","2224881663","CA" +"2224947200","2225405951","US" +"2225405952","2225733631","FR" +"2225733632","2225799167","US" +"2225799168","2225864703","FI" +"2225864704","2226126847","US" +"2226126848","2226192383","DE" +"2226192384","2226323455","US" +"2226323456","2226388991","JP" +"2226388992","2226454527","DE" +"2226454528","2226520063","NZ" +"2226520064","2226585599","JP" +"2226585600","2226651135","US" +"2226716672","2226782207","GB" +"2226782208","2226847743","ZA" +"2226847744","2226913279","DE" +"2226913280","2226921571","US" +"2226921572","2226921572","EU" +"2226921573","2227052543","US" +"2227052544","2227052609","EU" +"2227052610","2227052610","CH" +"2227052611","2227052799","EU" +"2227052800","2227109887","US" +"2227175424","2227372031","US" +"2227372032","2227437567","DE" +"2227437568","2227503103","SE" +"2227503104","2227634175","US" +"2227634176","2227699711","DE" +"2227699712","2227830783","US" +"2227830784","2229141503","CA" +"2229141504","2229207039","JP" +"2229207040","2229338111","US" +"2229338112","2229403647","CA" +"2229403648","2229469183","US" +"2229469184","2229534719","FR" +"2229534720","2229600255","US" +"2229600256","2229665791","NL" +"2229665792","2229796863","DE" +"2229796864","2229862399","GB" +"2229862400","2229927935","US" +"2229927936","2229993471","AU" +"2229993472","2230583295","US" +"2230583296","2230648831","GB" +"2230648832","2230714367","US" +"2230714368","2230779903","CA" +"2230779904","2230910975","MX" +"2230910976","2231042047","US" +"2231107584","2231173119","DE" +"2231173120","2231238655","US" +"2231238656","2231304191","MX" +"2231369728","2248146943","JP" +"2248146944","2248148991","IT" +"2248148992","2248151039","ES" +"2248151040","2248153087","GB" +"2248153088","2248155135","DE" +"2248155136","2248163327","AL" +"2248163328","2248165375","GB" +"2248165376","2248167423","US" +"2248167424","2248169471","IE" +"2248169472","2248171519","NL" +"2248171520","2248177663","RU" +"2248177664","2248179711","DE" +"2248179712","2248212479","OM" +"2248212480","2248409087","DE" +"2248409088","2248605695","US" +"2248605696","2248671231","AU" +"2248671232","2249261055","US" +"2249261056","2249326591","BY" +"2249326592","2249392127","AU" +"2249392128","2249424895","DE" +"2249424896","2249426943","RU" +"2249426944","2249428991","SK" +"2249428992","2249433087","RU" +"2249433088","2249435135","GB" +"2249435136","2249437183","IT" +"2249437184","2249441279","NL" +"2249441280","2249443327","FR" +"2249443328","2249445375","TR" +"2249445376","2249449471","AZ" +"2249449472","2249457663","GE" +"2249457664","2249523199","US" +"2249523200","2249588735","CH" +"2249588736","2249654271","CA" +"2249654272","2249724671","US" +"2249724672","2249724927","CA" +"2249724928","2249781247","US" +"2249781248","2249781255","FR" +"2249781256","2249785343","US" +"2249785344","2249850879","SE" +"2249850880","2249916415","US" +"2249916416","2249924863","NL" +"2249924864","2249925119","US" +"2249925120","2249928703","NL" +"2249928704","2249930751","US" +"2249930752","2249931775","NL" +"2249931776","2249932799","US" +"2249932800","2249932927","NL" +"2249932928","2249933055","BR" +"2249933056","2249981951","NL" +"2249981952","2250047487","DE" +"2250047488","2250113023","US" +"2250113024","2250178559","DE" +"2250178560","2250244095","CA" +"2250244096","2250375167","US" +"2250375168","2250440703","DE" +"2250440704","2250506239","US" +"2250506240","2250571775","GB" +"2250571776","2250637055","FI" +"2250637056","2250637311","EU" +"2250637312","2251227135","US" +"2251227136","2251292671","NO" +"2251292672","2251685887","US" +"2251685888","2251686143","EU" +"2251686144","2251751423","BE" +"2251751424","2251948031","US" +"2251948032","2252013567","BE" +"2252013568","2252079103","FR" +"2252079104","2252210175","DE" +"2252210176","2252931071","US" +"2252996608","2253062143","US" +"2253062144","2253127679","KR" +"2253127680","2253193215","DE" +"2253193216","2253455359","US" +"2253455360","2253520895","DE" +"2253520896","2253586431","US" +"2253586432","2253651967","GB" +"2253651968","2253848575","US" +"2253848576","2253914111","CA" +"2253914112","2254045183","US" +"2254045184","2254077951","GE" +"2254077952","2254079999","BA" +"2254080000","2254082047","FR" +"2254082048","2254084095","NO" +"2254084096","2254094335","RU" +"2254094336","2254096383","RO" +"2254096384","2254096895","GB" +"2254096896","2254098431","RO" +"2254098432","2254100479","RU" +"2254100480","2254102527","CH" +"2254102528","2254110719","IT" +"2254110720","2255421439","DE" +"2255421440","2255683583","US" +"2255683584","2255749119","AU" +"2255749120","2255814655","US" +"2255814656","2255880191","CA" +"2255880192","2255945727","US" +"2255945728","2256011263","NO" +"2256011264","2256666623","US" +"2256666624","2256732159","DE" +"2256732160","2257190911","US" +"2257190912","2257256447","SE" +"2257256448","2257453055","US" +"2257453056","2257518591","GB" +"2257518592","2257584127","NL" +"2257584128","2257649663","AU" +"2257649664","2257715199","NL" +"2257715200","2257715455","EU" +"2257715456","2257716735","NL" +"2257716736","2257716991","EU" +"2257716992","2257717503","NL" +"2257717504","2257717759","GB" +"2257717760","2257718015","FR" +"2257718016","2257765119","NL" +"2257765120","2257765375","EU" +"2257765376","2257771007","NL" +"2257771008","2257771263","NO" +"2257771264","2257776639","NL" +"2257776640","2257776895","IN" +"2257776896","2257780735","NL" +"2257780736","2257846271","DE" +"2257846272","2257911807","AU" +"2257911808","2257977343","US" +"2257977344","2258042879","CA" +"2258042880","2258108415","GB" +"2258108416","2258173951","US" +"2258173952","2258239487","CA" +"2258239488","2258305023","US" +"2258305024","2258370559","DE" +"2258370560","2258436095","US" +"2258436096","2258567167","FR" +"2258567168","2258567679","US" +"2258567680","2258567935","HK" +"2258567936","2258583551","US" +"2258583552","2258591743","GB" +"2258591744","2258593375","AU" +"2258593376","2258593535","HK" +"2258593536","2258594303","AU" +"2258594304","2258594559","HK" +"2258594560","2258594613","AP" +"2258594614","2258594614","HK" +"2258594615","2258594815","AP" +"2258594816","2258596095","AU" +"2258596096","2258596351","HK" +"2258596352","2258596863","AP" +"2258596864","2258597375","AU" +"2258597376","2258597439","HK" +"2258597440","2258598079","AU" +"2258598080","2258598087","TW" +"2258598088","2258598639","AU" +"2258598640","2258598655","TW" +"2258598656","2258601471","AU" +"2258601472","2258601983","JP" +"2258601984","2258602431","AU" +"2258602432","2258602447","HK" +"2258602448","2258602879","AU" +"2258602880","2258603007","HK" +"2258603008","2258604799","AU" +"2258604800","2258605055","AP" +"2258605056","2258606079","AU" +"2258606080","2258606335","HK" +"2258606336","2258607871","AU" +"2258607872","2258609151","HK" +"2258609152","2258609407","AU" +"2258609408","2258610303","HK" +"2258610304","2258610431","IN" +"2258610432","2258610943","HK" +"2258610944","2258611071","JP" +"2258611072","2258632703","HK" +"2258632704","2258698239","JP" +"2258698240","2259222527","US" +"2259222528","2259288063","DE" +"2259288064","2259353599","US" +"2259353600","2259419135","DE" +"2259419136","2259681279","US" +"2259681280","2259746815","DE" +"2259746816","2259812351","US" +"2259812352","2259877887","AU" +"2259877888","2259943423","US" +"2259943424","2260008959","JP" +"2260008960","2260140031","US" +"2260140032","2260205567","GB" +"2260205568","2260271103","BE" +"2260271104","2260467711","US" +"2260467712","2260533247","NL" +"2260533248","2260598783","US" +"2260598784","2260664319","CA" +"2260664320","2260729343","GB" +"2260729344","2260729599","IL" +"2260729600","2260729855","GB" +"2260729856","2260991999","US" +"2260992000","2261057535","CN" +"2261057536","2261188607","US" +"2261188608","2261254143","CA" +"2261254144","2261385215","US" +"2261385216","2261450751","PR" +"2261450752","2261516287","NL" +"2261516288","2261647359","US" +"2261647360","2261712895","FR" +"2261712896","2261778431","US" +"2261778432","2261843967","TW" +"2261843968","2261975039","US" +"2261975040","2262040575","AU" +"2262040576","2262106111","FR" +"2262106112","2262171647","IE" +"2262171648","2262237183","FR" +"2262237184","2262499327","US" +"2262499328","2262630399","GB" +"2262630400","2262724071","NL" +"2262724072","2262724073","IE" +"2262724074","2262761471","NL" +"2262761472","2262892543","US" +"2262892544","2262958079","GB" +"2262958080","2263023615","IE" +"2263023616","2263089151","FR" +"2263089152","2263678975","US" +"2263678976","2263744511","JP" +"2263744512","2263810047","US" +"2263810048","2263875583","GB" +"2263875584","2264203263","US" +"2264203264","2264268799","DE" +"2264268800","2264334335","FR" +"2264334336","2264399871","DE" +"2264399872","2264465407","US" +"2264465408","2264530943","UA" +"2264530944","2264858623","US" +"2264858624","2264891391","HU" +"2264891392","2264899583","RU" +"2264899584","2264905727","IT" +"2264905728","2264907775","ES" +"2264907776","2264924159","DE" +"2264924160","2264989695","CA" +"2264989696","2265710847","US" +"2265710848","2265776127","CA" +"2265776128","2266169343","US" +"2266169344","2266234879","CA" +"2266234880","2276786175","US" +"2276786176","2276851711","CA" +"2276851712","2277769215","US" +"2277769216","2277834751","GB" +"2277834752","2280998911","US" +"2280998912","2280999167","EU" +"2280999168","2281007103","US" +"2281007104","2281007359","IN" +"2281007360","2281023487","US" +"2281023488","2281023743","IN" +"2281023744","2282226019","US" +"2282226020","2282226020","AP" +"2282226021","2282226943","US" +"2282226944","2282227199","AP" +"2282227200","2282264063","US" +"2282264064","2282264319","EU" +"2282264320","2282264575","US" +"2282264576","2282264831","EU" +"2282264832","2291204095","US" +"2291204096","2291269631","PR" +"2291269632","2291400703","US" +"2291400704","2291466239","GB" +"2291466240","2291728383","US" +"2291728384","2291859455","AU" +"2291859456","2291924991","SE" +"2291924992","2291990527","GB" +"2291990528","2292056063","US" +"2292056064","2292121599","NO" +"2292121600","2292187135","CA" +"2292187136","2292383743","US" +"2292383744","2292449279","SE" +"2292449280","2292514815","NO" +"2292514816","2292776959","US" +"2292776960","2292809727","LV" +"2292809728","2292842495","RU" +"2292842496","2292908031","GB" +"2292908032","2292973567","US" +"2292973568","2293039103","DE" +"2293039104","2293080575","EU" +"2293080576","2293080831","BE" +"2293080832","2293104639","EU" +"2293104640","2293891071","US" +"2293891072","2293956607","AU" +"2293956608","2294022143","JP" +"2294022144","2294677503","US" +"2294677504","2294743039","JP" +"2294743040","2294808575","DE" +"2294808576","2294874111","US" +"2294874112","2294939647","IE" +"2294939648","2295201791","US" +"2295201792","2295267327","IE" +"2295267328","2296446975","US" +"2296446976","2296512511","SE" +"2296512512","2296774655","US" +"2296774656","2296840191","DE" +"2296840192","2296905727","NL" +"2296905728","2297167871","US" +"2297167872","2297233407","AU" +"2297233408","2297298943","US" +"2297298944","2297364479","CH" +"2297364480","2297626623","US" +"2297626624","2297692159","DE" +"2297692160","2299461631","US" +"2299461632","2299527167","CA" +"2299527168","2299592703","US" +"2299592704","2299658239","NL" +"2299658240","2300641279","US" +"2300641280","2300706815","FI" +"2300706816","2300772351","CH" +"2300772352","2301296639","US" +"2301296640","2301362175","IE" +"2301362176","2301427711","GB" +"2301427712","2301558783","US" +"2301558784","2301624319","NO" +"2301624320","2301755391","US" +"2301755392","2301820927","GB" +"2301820928","2302083071","US" +"2302083072","2302190381","NL" +"2302190382","2302190382","A1" +"2302190383","2302214143","NL" +"2302214144","2302279679","US" +"2302279680","2302345215","SE" +"2302345216","2302410751","EU" +"2302410752","2302541823","SE" +"2302541824","2302607359","CH" +"2302672896","2302935039","US" +"2302935040","2303000575","KR" +"2303000576","2303189557","US" +"2303189558","2303189558","IE" +"2303189559","2303190527","US" +"2303190528","2303190783","AP" +"2303190784","2303262719","US" +"2303262720","2303328255","GB" +"2303328256","2303393791","CA" +"2303393792","2303459327","US" +"2303459328","2303524863","AU" +"2303524864","2303852543","US" +"2303852544","2303918079","CA" +"2303918080","2304507903","US" +"2304507904","2304573439","AU" +"2304573440","2304638975","NO" +"2304638976","2304704511","CA" +"2304704512","2304770047","US" +"2304770048","2304835583","FI" +"2304835584","2305097727","US" +"2305097728","2305163263","PK" +"2305163264","2305359871","US" +"2305359872","2305425407","GB" +"2305425408","2305556479","US" +"2305556480","2305622015","GB" +"2305622016","2305687551","AU" +"2305687552","2305753087","US" +"2305753088","2305818623","AU" +"2305818624","2306342911","US" +"2306342912","2306408447","NL" +"2306408448","2306473983","FR" +"2306473984","2306539519","CA" +"2306539520","2306932735","US" +"2306932736","2306998271","FR" +"2306998272","2307129343","US" +"2307129344","2307194879","SG" +"2307194880","2307260415","NO" +"2307260416","2307522559","US" +"2307522560","2307588095","CH" +"2307588096","2308112383","US" +"2308112384","2308177919","AU" +"2308177920","2308243455","US" +"2308243456","2308308991","CA" +"2308308992","2308505599","US" +"2308505600","2308571135","JP" +"2308571136","2308636671","AU" +"2308636672","2308702207","US" +"2308702208","2308767743","CH" +"2308767744","2308833279","AU" +"2308833280","2308898815","ZA" +"2308898816","2309160959","US" +"2309160960","2309226495","FI" +"2309226496","2309357567","US" +"2309357568","2309423103","AU" +"2309423104","2309750783","US" +"2309750784","2309816319","AU" +"2309816320","2309881855","US" +"2309881856","2309947391","NL" +"2309947392","2310668287","US" +"2310668288","2310733823","CA" +"2310733824","2310864895","US" +"2310864896","2310930431","HK" +"2310930432","2310995967","US" +"2310995968","2311061503","IE" +"2311061504","2311127039","US" +"2311127040","2311192575","DE" +"2311192576","2311258111","FR" +"2311258112","2311323647","GB" +"2311323648","2311847935","US" +"2311847936","2311913471","IT" +"2311913472","2311979007","GB" +"2311979008","2312044543","US" +"2312044544","2312110079","CA" +"2312110080","2312175615","AT" +"2312175616","2312437759","US" +"2312437760","2312503295","GB" +"2312503296","2312634367","ZA" +"2312634368","2312699903","US" +"2312699904","2312765439","NO" +"2312765440","2312830975","GB" +"2312830976","2312896511","AU" +"2312896512","2312962047","US" +"2312962048","2313093119","GB" +"2313093120","2313158655","IE" +"2313158656","2313224191","NL" +"2313224192","2313289727","US" +"2313289728","2313355263","DE" +"2313355264","2314731519","US" +"2314731520","2314797055","DE" +"2314797056","2314862591","US" +"2314862592","2314993663","DE" +"2314993664","2315059199","US" +"2315059200","2315124735","GB" +"2315124736","2315190271","US" +"2315321344","2315452415","US" +"2315452416","2315517951","GB" +"2315517952","2315583487","ES" +"2315583488","2315649023","US" +"2315649024","2315714559","SE" +"2315714560","2315780095","AU" +"2315780096","2315911167","US" +"2315911168","2316042239","CA" +"2316042240","2316173311","US" +"2316173312","2316238847","SE" +"2316238848","2316500991","US" +"2316500992","2316566527","AU" +"2316566528","2316632063","US" +"2316632064","2316697599","FR" +"2316697600","2316763135","AT" +"2316763136","2316828671","US" +"2316828672","2316959743","AU" +"2316959744","2317221887","US" +"2317221888","2317287423","JP" +"2317287424","2317395967","US" +"2317395968","2317396223","NO" +"2317396224","2317398269","US" +"2317398270","2317398270","GB" +"2317398271","2317413375","US" +"2317413376","2317413631","ID" +"2317413632","2317414655","US" +"2317414656","2317414911","AU" +"2317414912","2317417983","US" +"2317417984","2317418239","AP" +"2317418240","2317484031","US" +"2317484032","2317487359","CA" +"2317487360","2317487615","US" +"2317487616","2317549567","CA" +"2317549568","2317615103","US" +"2317680640","2317811711","GB" +"2317811712","2317877247","US" +"2317877248","2317942783","GB" +"2317942784","2318008319","IT" +"2318008320","2318139391","US" +"2318139392","2318204927","AU" +"2318204928","2318401535","US" +"2318401536","2318467071","BE" +"2318467072","2318598143","US" +"2318598144","2318663679","CA" +"2318663680","2319319039","US" +"2319319040","2319384575","NO" +"2319384576","2319450111","FR" +"2319450112","2319581183","US" +"2319581184","2319646719","IT" +"2319646720","2319843327","US" +"2319843328","2319908863","IT" +"2319908864","2319974399","AU" +"2319974400","2320039935","US" +"2320039936","2320105471","CA" +"2320105472","2320171007","US" +"2320171008","2320236543","NZ" +"2320236544","2320302079","US" +"2320302080","2320367615","AU" +"2320367616","2320433151","US" +"2320433152","2320564223","AU" +"2320564224","2320629759","CH" +"2320629760","2320695295","CA" +"2320695296","2321547263","US" +"2321547264","2321612799","FR" +"2321678336","2321743871","US" +"2321809408","2321874943","ES" +"2321874944","2321940479","JP" +"2321940480","2322006015","FR" +"2322006016","2322071551","US" +"2322071552","2322137087","GB" +"2322137088","2322202623","US" +"2322202624","2322268159","SE" +"2322268160","2322333695","JP" +"2322333696","2322923519","US" +"2323054592","2323185663","CA" +"2323316736","2323382271","US" +"2323382272","2323447807","NO" +"2323447808","2323775487","US" +"2323775488","2323841023","AU" +"2323841024","2323906559","CH" +"2323906560","2323972095","IT" +"2323972096","2324037631","US" +"2324037632","2324103167","IL" +"2324103168","2327379967","US" +"2327511040","2327838719","CH" +"2327838720","2327969791","US" +"2327969792","2328035327","AU" +"2328035328","2328100863","FR" +"2328100864","2328231935","US" +"2328231936","2328297471","GB" +"2328297472","2328313855","EU" +"2328313856","2328317951","NL" +"2328317952","2328342527","EU" +"2328342528","2328342783","DE" +"2328342784","2328362751","EU" +"2328362752","2328494079","DE" +"2328494080","2328559615","US" +"2328559616","2328625151","BE" +"2328690688","2328756223","BE" +"2328756224","2328797439","CH" +"2328797440","2328797695","AU" +"2328797696","2328821759","CH" +"2328821760","2329083903","US" +"2329083904","2329149439","NZ" +"2329149440","2329214975","JP" +"2329280512","2329346047","CA" +"2329346048","2329411583","SE" +"2329411584","2329477119","FI" +"2329477120","2329542655","AU" +"2329542656","2329608191","CA" +"2329673728","2329739263","US" +"2329739264","2329804799","CH" +"2329804800","2329870335","DE" +"2329870336","2329935871","CH" +"2329935872","2330001407","DE" +"2330001408","2330066943","CH" +"2330066944","2330132479","US" +"2330132480","2330198015","SE" +"2330198016","2330263551","CH" +"2330263552","2330267647","US" +"2330329088","2330394623","US" +"2330394624","2330460159","FR" +"2330460160","2330525695","AT" +"2330525696","2330591231","SE" +"2330591232","2330656767","US" +"2330656768","2330722303","NZ" +"2330722304","2331049983","US" +"2331049984","2331115519","GB" +"2331115520","2331181055","US" +"2331181056","2331246591","JP" +"2331246592","2331443199","DE" +"2331443200","2331508735","US" +"2331508736","2331574271","GB" +"2331574272","2331639807","FI" +"2331639808","2331770879","GB" +"2331836416","2331901951","GB" +"2331901952","2331967487","US" +"2332033024","2332098559","ID" +"2332098560","2332360703","DE" +"2332360704","2332426239","EU" +"2332426240","2332622847","DE" +"2332622848","2332688383","CN" +"2332688384","2332753919","NL" +"2332753920","2333736959","DE" +"2333736960","2333802495","EU" +"2333802496","2333868031","DE" +"2333868032","2333933567","EU" +"2333933568","2334064639","DE" +"2334064640","2334916607","US" +"2334916608","2334982143","AU" +"2334982144","2335178751","US" +"2335178752","2335244287","CA" +"2335244288","2335309823","US" +"2335309824","2335375359","DE" +"2335375360","2335506431","US" +"2335506432","2335571967","ZA" +"2335571968","2335637503","FR" +"2335637504","2335768575","US" +"2335768576","2335834111","CA" +"2335834112","2335899647","SE" +"2335899648","2335965183","AU" +"2335965184","2336161791","US" +"2336161792","2336227327","NL" +"2336292864","2336358399","US" +"2336358400","2336423935","FI" +"2336423936","2336882687","US" +"2336882688","2336948223","FI" +"2336948224","2337013759","DE" +"2337013760","2337210367","US" +"2337210368","2337275903","CH" +"2337275904","2337341439","NZ" +"2337341440","2337406975","US" +"2337406976","2337472511","BR" +"2337472512","2337538047","PT" +"2337538048","2337669119","US" +"2337669120","2337734655","AU" +"2337734656","2337865727","US" +"2337865728","2337931263","DE" +"2337931264","2337996799","BE" +"2337996800","2338062335","GR" +"2338062336","2338075391","EU" +"2338075392","2338075647","IL" +"2338075648","2338084863","EU" +"2338084864","2338085375","IL" +"2338085376","2338085631","EU" +"2338085632","2338086143","IL" +"2338086144","2338087423","EU" +"2338087424","2338087679","IL" +"2338087680","2338108927","EU" +"2338108928","2338109951","IL" +"2338109952","2338115071","EU" +"2338115072","2338115839","IL" +"2338115840","2338126591","EU" +"2338126592","2338127615","IL" +"2338127616","2338127871","EU" +"2338127872","2338324479","US" +"2338324480","2338390015","SE" +"2338390016","2338455551","FI" +"2338455552","2338521087","NO" +"2338521088","2338586623","US" +"2338586624","2338652159","FR" +"2338652160","2338717695","JP" +"2338717696","2338783231","US" +"2338783232","2338848767","CA" +"2338848768","2338914303","US" +"2338914304","2339962879","NO" +"2339962880","2340028415","US" +"2340028416","2340093951","NL" +"2340093952","2340159487","FI" +"2340159488","2340225023","FR" +"2340225024","2340421631","US" +"2340421632","2340487167","IT" +"2340487168","2340552703","CN" +"2340552704","2340618239","AU" +"2340618240","2340683775","US" +"2340683776","2340749311","AU" +"2340749312","2340814847","GB" +"2340814848","2340880383","AU" +"2340880384","2341273599","US" +"2341273600","2341339135","KW" +"2341339136","2341404671","CA" +"2341404672","2341470207","GB" +"2341470208","2341535743","US" +"2341535744","2341601279","NO" +"2341601280","2341732351","US" +"2341732352","2341797887","CN" +"2341797888","2341863423","GB" +"2341863424","2341928959","KR" +"2341928960","2341994495","US" +"2341994496","2342060031","JP" +"2342060032","2342125567","GB" +"2342125568","2342191103","JP" +"2342191104","2342256639","CN" +"2342256640","2342322175","NL" +"2342322176","2342387711","FI" +"2342387712","2342453247","FR" +"2342453248","2342518783","CN" +"2342518784","2342584319","FR" +"2342584320","2342649855","US" +"2342649856","2342715391","NL" +"2342715392","2342780927","AU" +"2342780928","2342846463","NO" +"2342846464","2342911999","BE" +"2342912000","2342977535","GB" +"2342977536","2343043071","US" +"2343043072","2343108607","AU" +"2343108608","2343174143","US" +"2343174144","2343239679","CN" +"2343239680","2343370751","US" +"2343370752","2343436287","CA" +"2343436288","2343501823","DE" +"2343501824","2343567359","TW" +"2343567360","2343632895","CN" +"2343632896","2343698431","US" +"2343698432","2343763967","NL" +"2343763968","2343829503","TR" +"2343829504","2343924735","US" +"2343924736","2343925759","IL" +"2343925760","2343934975","US" +"2343934976","2343935999","IL" +"2343936000","2344026111","US" +"2344026112","2344091647","CN" +"2344091648","2344157183","GB" +"2344157184","2344222719","US" +"2344222720","2344288255","CN" +"2344288256","2344353791","US" +"2344353792","2344419327","AU" +"2344419328","2344484863","CN" +"2344484864","2344550399","PK" +"2344550400","2344615935","EU" +"2344615936","2344878079","ID" +"2344878080","2346188799","CN" +"2346188800","2346450943","AU" +"2346450944","2346582015","CN" +"2346582016","2346647551","GB" +"2346647552","2346713087","TW" +"2346713088","2346778623","CN" +"2346778624","2346844159","US" +"2346844160","2346975231","CN" +"2346975232","2347040767","ID" +"2347040768","2347106303","US" +"2347106304","2347171839","AU" +"2347171840","2348744703","US" +"2348744704","2348875775","ID" +"2348875776","2353725439","US" +"2353725440","2353790975","CN" +"2353790976","2353856511","US" +"2353856512","2353922047","FR" +"2353922048","2353987583","AT" +"2353987584","2354053119","AU" +"2354053120","2354118655","CA" +"2354184192","2354249727","US" +"2354249728","2354315263","AU" +"2354315264","2354380799","DE" +"2354380800","2354446335","NL" +"2354446336","2354511871","SE" +"2354511872","2354577407","CA" +"2354577408","2354839551","US" +"2354839552","2354905087","TW" +"2354905088","2355036159","FR" +"2355036160","2355101695","US" +"2355101696","2355167231","TW" +"2355167232","2355232767","GB" +"2355232768","2355305583","US" +"2355305584","2355305591","DK" +"2355305592","2355691519","US" +"2355691520","2355757055","IT" +"2355757056","2355953663","US" +"2355953664","2357919743","TW" +"2357919744","2358181887","US" +"2358181888","2358247423","CN" +"2358247424","2358509567","US" +"2358509568","2358575103","MX" +"2358575104","2358640639","TH" +"2358640640","2358706175","SE" +"2358706176","2358771711","FI" +"2358771712","2359230463","US" +"2359230464","2359295999","AU" +"2359296000","2359361535","US" +"2359361536","2359427071","CA" +"2359427072","2359558143","US" +"2359558144","2359623679","IT" +"2359623680","2359689215","US" +"2359689216","2359754751","SE" +"2359754752","2359820287","CA" +"2359820288","2359885823","AU" +"2359885824","2360215807","US" +"2360215808","2360216063","A1" +"2360216064","2360672255","US" +"2360672256","2360737791","DE" +"2360737792","2360868863","US" +"2360868864","2360934399","CA" +"2360934400","2361327615","US" +"2361327616","2361393151","AR" +"2361393152","2361458687","US" +"2361458688","2361524223","CA" +"2361524224","2361917439","US" +"2361917440","2361982975","NZ" +"2361982976","2362114047","US" +"2362114048","2362179583","IE" +"2362179584","2362245119","GB" +"2362245120","2362441727","CN" +"2362441728","2362572799","US" +"2362572800","2362638335","CN" +"2362638336","2362769407","US" +"2362769408","2362834943","ID" +"2362834944","2363490303","US" +"2363490304","2363555839","CN" +"2363555840","2363883519","US" +"2363883520","2363949055","CA" +"2363949056","2364342271","US" +"2364342272","2364407807","CN" +"2364407808","2364538879","US" +"2364538880","2364604415","CN" +"2364604416","2364671487","US" +"2364671488","2364671743","CN" +"2364671744","2364675839","US" +"2364675840","2364676095","CA" +"2364676096","2364676863","US" +"2364676864","2364676867","EU" +"2364676868","2364677119","GB" +"2364677120","2364681727","US" +"2364681728","2364681983","EU" +"2364681984","2364724735","US" +"2364724736","2364724991","AP" +"2364724992","2364727807","US" +"2364727808","2364728063","DE" +"2364728064","2364735487","US" +"2364735488","2364801023","CN" +"2364801024","2364932095","US" +"2364932096","2364997631","CN" +"2364997632","2365128703","US" +"2365128704","2365259775","CN" +"2365259776","2365390847","US" +"2365390848","2365456383","AU" +"2365456384","2365521919","US" +"2365521920","2365587455","CN" +"2365587456","2365589503","JO" +"2365589504","2365591551","A2" +"2365591552","2365593599","DE" +"2365593600","2365595647","NL" +"2365595648","2365603839","GB" +"2365603840","2365624319","NO" +"2365624320","2365630463","GB" +"2365630464","2365632511","NL" +"2365632512","2365634559","RU" +"2365634560","2365636607","FR" +"2365636608","2365638655","GB" +"2365638656","2365640703","FR" +"2365640704","2365644799","GB" +"2365644800","2365652991","NO" +"2365652992","2366032895","DE" +"2366032896","2366033151","GB" +"2366033152","2366111743","DE" +"2366111744","2366144511","MT" +"2366144512","2366149375","RU" +"2366149376","2366149407","DE" +"2366149408","2366149423","PL" +"2366149424","2366149439","SK" +"2366149440","2366149455","PT" +"2366149456","2366149471","ES" +"2366149472","2366149487","FR" +"2366149488","2366149495","MD" +"2366149496","2366149503","LT" +"2366149504","2366149511","LV" +"2366149512","2366149519","EE" +"2366149520","2366149527","BG" +"2366149528","2366149535","RS" +"2366149536","2366149543","UA" +"2366149544","2366149551","BY" +"2366149552","2366149559","KZ" +"2366149560","2366162943","RU" +"2366162944","2366164991","AL" +"2366164992","2366167039","GE" +"2366167040","2366169087","GB" +"2366169088","2366171135","CH" +"2366171136","2366308351","DE" +"2366308352","2366368255","GB" +"2366368256","2366368511","FR" +"2366368512","2366373887","GB" +"2366373888","2367487999","DE" +"2367488000","2367553535","SI" +"2367553536","2370579746","DE" +"2370579747","2370579747","A1" +"2370579748","2370895871","DE" +"2370895872","2370961407","SE" +"2370961408","2371158015","DE" +"2371158016","2371223551","RO" +"2371223552","2371289087","US" +"2371289088","2371616767","DE" +"2371616768","2371682303","GB" +"2371682304","2371747839","NL" +"2371747840","2371878911","GB" +"2371878912","2371944447","BE" +"2371944448","2372009983","GB" +"2372009984","2372075519","CH" +"2372075520","2372206591","DE" +"2372206592","2372214783","UA" +"2372214784","2372218879","DE" +"2372218880","2372220927","FR" +"2372220928","2372222975","KW" +"2372222976","2372239359","EU" +"2372239360","2372264447","RU" +"2372264448","2372266495","UA" +"2372266496","2372272127","RU" +"2372272128","2372337663","US" +"2372337664","2372403199","ID" +"2372403200","2372468735","US" +"2372468736","2372472831","NL" +"2372472832","2372474367","PL" +"2372474368","2372474623","US" +"2372474624","2372474879","GB" +"2372474880","2372483071","RU" +"2372483072","2372485119","JO" +"2372485120","2372485185","RU" +"2372485186","2372485246","NL" +"2372485247","2372485247","RU" +"2372485248","2372485375","IN" +"2372485376","2372485823","RU" +"2372485824","2372485887","NL" +"2372485888","2372487167","RU" +"2372487168","2372489215","FR" +"2372489216","2372493311","LB" +"2372493312","2372497407","ES" +"2372497408","2372499455","IE" +"2372499456","2372501503","NL" +"2372501504","2372505599","UA" +"2372505600","2372507647","NL" +"2372507648","2372509695","IT" +"2372509696","2372511743","AE" +"2372511744","2372511744","SI" +"2372511745","2372511998","BA" +"2372511999","2372512000","SI" +"2372512001","2372512254","BA" +"2372512255","2372512256","SI" +"2372512257","2372512510","BA" +"2372512511","2372512512","SI" +"2372512513","2372512766","BA" +"2372512767","2372512768","SI" +"2372512769","2372513022","BA" +"2372513023","2372513024","SI" +"2372513025","2372513278","BA" +"2372513279","2372513280","SI" +"2372513281","2372513534","BA" +"2372513535","2372513536","SI" +"2372513537","2372513790","BA" +"2372513791","2372513791","SI" +"2372513792","2372534271","GB" +"2372534272","2372665343","US" +"2372665344","2372730879","IT" +"2372730880","2372796415","CA" +"2372796416","2372993023","US" +"2372993024","2373025791","DE" +"2373025792","2373026047","SG" +"2373026048","2373058559","DE" +"2373058560","2373124095","US" +"2373124096","2373189631","FR" +"2373189632","2373255167","US" +"2373255168","2373451775","CA" +"2373451776","2373517311","AU" +"2373517312","2373582847","US" +"2373582848","2373623807","CH" +"2373623808","2373627903","AU" +"2373627904","2373648383","CH" +"2373648384","2373910527","US" +"2373910528","2373976063","FI" +"2373976064","2374107135","US" +"2374107136","2374172671","DE" +"2374172672","2374238207","US" +"2374238208","2374303743","AU" +"2374303744","2374369279","US" +"2374369280","2374500351","BE" +"2374500352","2374502399","LV" +"2374502400","2374504447","MK" +"2374504448","2374508543","RO" +"2374508544","2374512639","LT" +"2374512640","2374514687","SK" +"2374514688","2374516735","ES" +"2374516736","2374524927","AM" +"2374524928","2374525951","DE" +"2374525952","2374528767","FR" +"2374528768","2374529023","DE" +"2374529024","2374531071","RU" +"2374531072","2374533119","NL" +"2374533120","2374565887","HR" +"2374565888","2374631423","SE" +"2374631424","2374647807","HR" +"2374647808","2374651903","BE" +"2374651904","2374653951","IT" +"2374653952","2374655999","FR" +"2374656000","2374664191","UA" +"2374664192","2374666239","GB" +"2374666240","2374670335","NL" +"2374670336","2374672383","FR" +"2374672384","2374674431","PL" +"2374674432","2374676479","NL" +"2374676480","2374680575","LB" +"2374680576","2374684671","NL" +"2374684672","2374684839","GB" +"2374684840","2374684847","NO" +"2374684848","2374684863","FI" +"2374684864","2374684879","DK" +"2374684880","2374684991","GB" +"2374684992","2374685119","FI" +"2374685120","2374685135","DK" +"2374685136","2374685167","GB" +"2374685168","2374685175","NO" +"2374685176","2374685239","GB" +"2374685240","2374685247","DK" +"2374685248","2374685375","NO" +"2374685376","2374685423","GB" +"2374685424","2374685431","FI" +"2374685432","2374685487","GB" +"2374685488","2374685503","FI" +"2374685504","2374685631","DK" +"2374685632","2374685647","NO" +"2374685648","2374685743","GB" +"2374685744","2374685759","FI" +"2374685760","2374685855","NL" +"2374685856","2374685871","DK" +"2374685872","2374685887","NL" +"2374685888","2374686007","GB" +"2374686008","2374686015","FI" +"2374686016","2374686111","PL" +"2374686112","2374686127","DK" +"2374686128","2374686143","PL" +"2374686144","2374686271","GB" +"2374686272","2374686303","NL" +"2374686304","2374686367","GB" +"2374686368","2374686399","FI" +"2374686400","2374686415","DK" +"2374686416","2374686639","GB" +"2374686640","2374686655","DK" +"2374686656","2374686671","FI" +"2374686672","2374686719","GB" +"2374686720","2374688767","NL" +"2374688768","2374696959","GB" +"2374696960","2374959103","US" +"2374959104","2375024639","SE" +"2375024640","2375090175","DK" +"2375090176","2375155711","NO" +"2375155712","2375221247","US" +"2375221248","2375352319","SE" +"2375352320","2376269823","US" +"2376269824","2376335359","GB" +"2376335360","2376597503","US" +"2376597504","2376663039","AU" +"2376663040","2376728575","DE" +"2376728576","2376761343","GB" +"2376761344","2376777727","CZ" +"2376777728","2376781823","BA" +"2376781824","2376783871","ES" +"2376783872","2376785919","FR" +"2376785920","2376794111","UA" +"2376794112","2376859647","CH" +"2376859648","2376925183","FI" +"2376925184","2377056255","US" +"2377056256","2377121791","FR" +"2377121792","2377187327","NL" +"2377187328","2377252863","US" +"2377252864","2377318399","JP" +"2377318400","2377449471","US" +"2377449472","2377515007","FR" +"2377515008","2377842687","US" +"2377842688","2377908223","GB" +"2377908224","2378026239","US" +"2378026240","2378026495","EU" +"2378026496","2378170367","US" +"2378170368","2378235903","FI" +"2378235904","2378301439","US" +"2378301440","2378303231","FR" +"2378303232","2378303487","EU" +"2378303488","2378366975","FR" +"2378366976","2378432511","US" +"2378432512","2378498047","TR" +"2378498048","2378500607","US" +"2378500608","2378500863","GB" +"2378500864","2378501631","US" +"2378501632","2378501887","EU" +"2378501888","2378694655","US" +"2378694656","2378760191","DE" +"2378760192","2378825727","AT" +"2378825728","2378891263","US" +"2378891264","2378956799","AT" +"2378956800","2379218943","US" +"2379218944","2379284479","FI" +"2379284480","2380201983","US" +"2380201984","2380267519","KR" +"2380267520","2380398591","US" +"2380398592","2380464127","IL" +"2380464128","2380464896","FR" +"2380464897","2380464897","US" +"2380464898","2380465407","FR" +"2380465408","2380465663","AP" +"2380465664","2380529663","FR" +"2380529664","2380593663","GB" +"2380593664","2380593919","AP" +"2380593920","2380595199","GB" +"2380660736","2380726271","US" +"2380726272","2380791807","GB" +"2380791808","2381119487","US" +"2381119488","2381185023","GR" +"2381185024","2381381631","US" +"2381381632","2381447167","GB" +"2381447168","2381512703","US" +"2381512704","2381578239","AU" +"2381578240","2381643775","AT" +"2381643776","2381709311","GB" +"2381709312","2381905919","US" +"2381905920","2381971455","CH" +"2381971456","2382036991","IT" +"2382036992","2382102527","US" +"2382102528","2382168063","NL" +"2382168064","2382233599","BE" +"2382233600","2382299135","US" +"2382299136","2382331903","GR" +"2382331904","2382335999","FR" +"2382336000","2382340095","NL" +"2382340096","2382342143","CH" +"2382342144","2382344191","AT" +"2382344192","2382346239","NL" +"2382346240","2382348287","SE" +"2382348288","2382364671","SI" +"2382364672","2382368767","US" +"2382368768","2382372863","CA" +"2382372864","2382401535","US" +"2382401536","2382409727","CA" +"2382409728","2382422015","US" +"2382422016","2382426111","JM" +"2382426112","2382430207","US" +"2382430208","2382626815","CA" +"2382626816","2382659583","US" +"2382692352","2383085567","CA" +"2383085568","2383151103","US" +"2383151104","2385903615","CA" +"2385903616","2385915903","US" +"2385915904","2385919999","CA" +"2385920000","2385969151","US" +"2385969152","2386067455","CA" +"2386067456","2386083839","US" +"2386083840","2386624511","CA" +"2386624512","2386690047","US" +"2386690048","2386988287","CA" +"2386988288","2386988543","CH" +"2386988544","2386989055","CA" +"2386989056","2386989311","GB" +"2386989312","2387003391","CA" +"2387003392","2387003647","GB" +"2387003648","2387003903","CA" +"2387003904","2387004159","GB" +"2387004160","2387410943","CA" +"2387410944","2387476479","US" +"2387476480","2387542015","CA" +"2387542016","2387607551","US" +"2387607552","2388328447","CA" +"2388328448","2388393983","US" +"2388393984","2390818815","CA" +"2390884352","2390995455","CA" +"2390995456","2391015423","US" +"2391015424","2394947583","CA" +"2394947584","2395013119","US" +"2395013120","2395209727","CA" +"2395209728","2395340799","US" +"2395340800","2398748671","CA" +"2398748672","2398879743","US" +"2398945280","2399010815","CA" +"2399010816","2401036287","US" +"2401036288","2401036543","EU" +"2401036544","2401828863","US" +"2401828864","2401894399","GB" +"2401894400","2402222079","US" +"2402222080","2402287615","IE" +"2402287616","2402418687","US" +"2402418688","2402484223","AT" +"2402484224","2402549759","FI" +"2402549760","2402680831","GB" +"2402680832","2402746367","BR" +"2402746368","2402945023","US" +"2402945024","2402945279","GB" +"2402945280","2403401727","US" +"2403401728","2403467263","GB" +"2403467264","2404974591","US" +"2404974592","2405040127","HK" +"2405040128","2405105663","JP" +"2405105664","2405171199","US" +"2405171200","2405236735","AU" +"2405236736","2405302271","DE" +"2405302272","2405367807","JP" +"2405367808","2405433343","US" +"2405433344","2405498879","NZ" +"2405498880","2405564415","NO" +"2405564416","2405629951","US" +"2405629952","2405695487","CH" +"2405695488","2406088703","US" +"2406088704","2406285311","BR" +"2406285312","2406809599","US" +"2406809600","2406875135","GB" +"2406875136","2406940671","SE" +"2406940672","2407006207","AU" +"2407006208","2407071743","US" +"2407071744","2407137279","NL" +"2407137280","2407333887","US" +"2407333888","2407399423","JP" +"2407399424","2407464959","FR" +"2407464960","2407530495","US" +"2407530496","2407596031","ZA" +"2407596032","2407661567","BE" +"2407661568","2407727103","AT" +"2407727104","2408054783","US" +"2408054784","2408120319","JP" +"2408185856","2409627647","US" +"2409627648","2409693183","ZA" +"2409693184","2409758719","AT" +"2409758720","2409824255","US" +"2409824256","2409955327","DE" +"2409955328","2410086399","US" +"2410086400","2410151935","GB" +"2410151936","2410217471","US" +"2410217472","2410283007","BE" +"2410283008","2410348543","US" +"2410348544","2410414079","JP" +"2410414080","2410545151","US" +"2410545152","2410610687","AU" +"2410610688","2410676223","US" +"2410676224","2410938367","NL" +"2410938368","2411003903","CH" +"2411003904","2411462655","US" +"2411462656","2411593727","AU" +"2411593728","2411986943","US" +"2411986944","2412052479","FR" +"2412052480","2412576767","US" +"2412576768","2412642303","AT" +"2412642304","2412773375","US" +"2412838912","2412904447","US" +"2412904448","2412969983","GB" +"2412969984","2413297663","US" +"2413297664","2413363199","AU" +"2413363200","2413428735","SE" +"2413428736","2413494271","AU" +"2413494272","2413625343","US" +"2413625344","2413690879","JP" +"2413690880","2413821951","US" +"2413821952","2413887487","AT" +"2413887488","2413953023","IT" +"2413953024","2414411775","US" +"2414411776","2414477311","GR" +"2414477312","2414542847","GB" +"2414542848","2414673919","US" +"2414673920","2414739455","SE" +"2414739456","2414804991","AU" +"2414804992","2414870527","IE" +"2414870528","2415198207","US" +"2415198208","2415263743","AT" +"2415263744","2415394815","US" +"2415394816","2415460351","KR" +"2415460352","2415656959","US" +"2415656960","2415722495","GB" +"2415722496","2415788031","JP" +"2415788032","2415853567","US" +"2415919104","2415984639","CN" +"2416050176","2416115711","NL" +"2416115712","2416181247","US" +"2416181248","2416246783","FI" +"2416246784","2416312319","US" +"2416312320","2416377855","AU" +"2416377856","2416443391","CN" +"2416443392","2416705535","US" +"2416705536","2416771071","CN" +"2416771072","2416963583","US" +"2416963584","2416963839","EU" +"2416963840","2416967679","US" +"2416967680","2417033215","IN" +"2417033216","2417229823","US" +"2417229824","2417295359","ES" +"2417295360","2417360895","PT" +"2417360896","2417491967","CR" +"2417491968","2417557503","GR" +"2417557504","2417688575","US" +"2417688576","2417754111","SE" +"2417754112","2418016255","US" +"2418016256","2418081791","GB" +"2418081792","2418312959","US" +"2418312960","2418313215","IN" +"2418313216","2418323007","US" +"2418323008","2418323008","PH" +"2418323009","2418337023","US" +"2418337024","2418337279","IN" +"2418337280","2418338303","US" +"2418338304","2418338815","IN" +"2418338816","2418341887","US" +"2418341888","2418342143","IN" +"2418342144","2418606079","US" +"2418606080","2418671615","DE" +"2418671616","2418737151","US" +"2418737152","2418802687","NL" +"2418802688","2418868223","EU" +"2418868224","2419326975","US" +"2419326976","2419392511","CN" +"2419392512","2419458047","AU" +"2419458048","2419523583","NL" +"2419523584","2419589119","AU" +"2419589120","2419654655","FR" +"2419654656","2419720191","SE" +"2419720192","2420047871","US" +"2420047872","2420113407","SE" +"2420113408","2420178943","PT" +"2420178944","2420244479","AT" +"2420244480","2420310015","NZ" +"2420310016","2420899839","US" +"2420899840","2420965375","DE" +"2420965376","2421096447","US" +"2421161984","2421293055","US" +"2421293056","2421358591","GB" +"2421358592","2421424127","US" +"2421424128","2421489663","NO" +"2421489664","2421555199","CH" +"2421555200","2421620735","US" +"2421620736","2421686271","GB" +"2421686272","2422145023","US" +"2422145024","2422153215","NL" +"2422153216","2422153471","EU" +"2422153472","2422154239","NL" +"2422154240","2422155263","US" +"2422155264","2422155519","AP" +"2422155520","2422161407","NL" +"2422161408","2422163455","GB" +"2422163456","2422165503","US" +"2422165504","2422167551","HK" +"2422167552","2422210559","NL" +"2422210560","2422276095","US" +"2422276096","2422341631","AU" +"2422341632","2422407167","GB" +"2422407168","2423128063","US" +"2423128064","2423193599","AU" +"2423193600","2423717887","US" +"2423717888","2423783423","NL" +"2423783424","2423848959","FJ" +"2423848960","2423914495","US" +"2423914496","2423980031","TR" +"2423980032","2424045567","CN" +"2424045568","2424111103","GB" +"2424111104","2424242175","US" +"2424242176","2424307711","NO" +"2424307712","2424438783","US" +"2424438784","2425159679","AU" +"2425159680","2425421823","US" +"2425421824","2425487359","DE" +"2425487360","2426667007","US" +"2426667008","2426732543","NO" +"2426732544","2426798079","FR" +"2426798080","2426929151","US" +"2426929152","2426994687","EU" +"2426994688","2427207679","US" +"2427256832","2427322367","GB" +"2427322368","2427453439","US" +"2427453440","2427536895","NO" +"2427536896","2427537151","US" +"2427537152","2427544575","NO" +"2427544576","2427544831","AP" +"2427544832","2427584511","NO" +"2427584512","2427650047","GB" +"2427650048","2427846655","NO" +"2427846656","2428174335","US" +"2428174336","2428178431","GB" +"2428178432","2428183562","US" +"2428183563","2428183563","EU" +"2428183564","2428567551","US" +"2428567552","2428633087","NO" +"2428633088","2428696831","CA" +"2428696832","2428697087","EU" +"2428697088","2428698623","CA" +"2428698624","2428960767","US" +"2428960768","2429026303","MY" +"2429026304","2429091839","CH" +"2429091840","2429288447","US" +"2429288448","2429353983","FR" +"2429353984","2429419519","AU" +"2429419520","2429485055","RU" +"2429485056","2429616127","US" +"2429616128","2429681663","NL" +"2429681664","2429878271","US" +"2429878272","2429943807","JP" +"2429943808","2430009343","HK" +"2430009344","2432172031","US" +"2432172032","2432237567","BE" +"2432237568","2432630783","US" +"2432630784","2432696319","CN" +"2432696320","2433247231","NL" +"2433247232","2433247487","GB" +"2433247488","2433810431","NL" +"2433810432","2433875967","GB" +"2433875968","2436300799","NL" +"2436300800","2436366335","GB" +"2436366336","2436759551","NL" +"2436759552","2436767743","GB" +"2436767744","2436767874","EU" +"2436767875","2436767875","DE" +"2436767876","2436767999","EU" +"2436768000","2436825087","GB" +"2436825088","2446983167","NL" +"2446983168","2447015935","EU" +"2447015936","2447015939","DK" +"2447015940","2447015943","SE" +"2447015944","2447015947","GB" +"2447015948","2447015951","HK" +"2447015952","2447048703","EU" +"2447048704","2447376383","NL" +"2447376384","2447384632","GB" +"2447384633","2447384633","NL" +"2447384634","2447384634","FR" +"2447384635","2447384635","BE" +"2447384636","2447384636","DE" +"2447384637","2447413304","GB" +"2447413305","2447413305","NL" +"2447413306","2447413306","FR" +"2447413307","2447413307","BE" +"2447413308","2447413308","DE" +"2447413309","2447441919","GB" +"2447441920","2447507455","DE" +"2447507456","2447572991","FR" +"2447572992","2447638527","GB" +"2447638528","2447679819","DE" +"2447679820","2447679839","IT" +"2447679840","2447704063","DE" +"2447704064","2447769599","GB" +"2447769600","2447835135","DE" +"2447835136","2447900671","FR" +"2447900672","2447966207","CH" +"2447966208","2448031743","GB" +"2448031744","2448097279","CH" +"2448097280","2448162815","SE" +"2448162816","2448228351","HU" +"2448228352","2448293887","PL" +"2448293888","2448359423","FR" +"2448359424","2448424959","GB" +"2448424960","2448490495","FR" +"2448490496","2448556031","AT" +"2448556032","2448621567","FR" +"2448621568","2448687103","DE" +"2448687104","2448752639","AT" +"2448752640","2448818175","CH" +"2448818176","2448883711","GB" +"2448883712","2448922367","FI" +"2448922368","2448927487","NO" +"2448927488","2448949247","FI" +"2448949248","2449014783","FR" +"2449014784","2449080319","RU" +"2449080320","2449145855","CH" +"2449145856","2449211391","SE" +"2449211392","2449276927","CH" +"2449276928","2449407999","DE" +"2449408000","2449420287","RU" +"2449420288","2449422335","DE" +"2449422336","2449424383","DK" +"2449424384","2449440767","OM" +"2449440768","2449441023","NL" +"2449441024","2449442815","RO" +"2449442816","2449444863","RU" +"2449444864","2449448959","SK" +"2449448960","2449457151","KZ" +"2449457152","2449465343","BG" +"2449465344","2449467391","GB" +"2449467392","2449469439","RU" +"2449469440","2449471487","GB" +"2449471488","2449473535","RU" +"2449473536","2449477631","DE" +"2449477632","2449479679","AL" +"2449479680","2449481727","FR" +"2449481728","2449489919","RO" +"2449489920","2449491967","FR" +"2449491968","2449492096","NL" +"2449492097","2449492159","RU" +"2449492160","2449492223","NL" +"2449492224","2449492273","RU" +"2449492274","2449492341","NL" +"2449492342","2449492351","RU" +"2449492352","2449492735","NL" +"2449492736","2449492768","RU" +"2449492769","2449492805","NL" +"2449492806","2449492814","IN" +"2449492815","2449492864","NL" +"2449492865","2449492991","IN" +"2449492992","2449494015","NL" +"2449494016","2449496063","UA" +"2449496064","2449498111","FR" +"2449498112","2449506303","DE" +"2449506304","2449539071","RO" +"2449539072","2449604607","US" +"2449604608","2449670143","NO" +"2449670144","2449735679","LU" +"2449735680","2449801215","CH" +"2449801216","2450194431","US" +"2450194432","2450259967","AU" +"2450259968","2450718719","US" +"2450718720","2450784255","FR" +"2450784256","2450849791","US" +"2450849792","2450915327","SE" +"2450915328","2451031039","US" +"2451031040","2451031295","AP" +"2451031296","2451035135","US" +"2451035136","2451035391","EU" +"2451035392","2451986959","US" +"2451986960","2451986960","GB" +"2451986961","2452619263","US" +"2452619264","2452684799","IT" +"2452684800","2452750335","US" +"2452750336","2452815871","NL" +"2452815872","2452881407","JP" +"2452881408","2452946943","DE" +"2452946944","2453143551","US" +"2453143552","2453209087","JP" +"2453209088","2453340159","US" +"2453340160","2453405695","NO" +"2453405696","2453471231","DE" +"2453471232","2453536767","US" +"2453602304","2453667839","US" +"2453667840","2453733375","ZA" +"2453733376","2453798911","US" +"2453798912","2453800959","GB" +"2453800960","2453803007","RU" +"2453803008","2453805055","KZ" +"2453805056","2453807103","FI" +"2453807104","2453815295","GB" +"2453815296","2453831679","RO" +"2453831680","2453831807","IR" +"2453831808","2453831871","IQ" +"2453831872","2453832959","IR" +"2453832960","2453833727","IQ" +"2453833728","2453835775","ES" +"2453835776","2453837823","DE" +"2453837824","2453838591","LU" +"2453838592","2453838847","EU" +"2453838848","2453839359","SE" +"2453839360","2453839871","EU" +"2453839872","2453852159","RU" +"2453852160","2453856255","RO" +"2453856256","2453858303","DE" +"2453858304","2453860351","SE" +"2453860352","2453864447","ES" +"2453864448","2453929983","CH" +"2453929984","2454061055","US" +"2454061056","2454126591","GB" +"2454159360","2454192127","US" +"2454192128","2454257663","NO" +"2454257664","2454388735","US" +"2454388736","2454454271","SE" +"2454454272","2454519807","US" +"2454519808","2454585343","GB" +"2454585344","2454716415","US" +"2454716416","2454781951","GB" +"2454781952","2454847487","FI" +"2454847488","2454851583","US" +"2454851584","2454851839","DK" +"2454851840","2454852095","US" +"2454852096","2454852351","A1" +"2454852352","2454853119","US" +"2454853120","2454853375","DK" +"2454853376","2454885503","US" +"2454885504","2454885631","GB" +"2454885632","2454887423","US" +"2454887424","2454887679","DK" +"2454887680","2454904999","US" +"2454905000","2454905007","BR" +"2454905008","2454906943","US" +"2454906944","2454906951","CL" +"2454906952","2454913023","US" +"2454913024","2454978559","CL" +"2454978560","2455175167","US" +"2455175168","2455240703","GB" +"2455240704","2455371775","US" +"2455371776","2455437311","GB" +"2455437312","2455830527","US" +"2455830528","2455896063","GB" +"2455896064","2456027135","US" +"2456027136","2456092671","IT" +"2456092672","2456158207","GB" +"2456158208","2456223743","CZ" +"2456223744","2456289279","BE" +"2456289280","2456354815","NL" +"2456354816","2456420351","GB" +"2456420352","2456485887","EU" +"2456485888","2456551423","DE" +"2456551424","2456603135","AT" +"2456603136","2456603391","EU" +"2456603392","2456616959","AT" +"2456616960","2456682495","CH" +"2456682496","2456748031","HU" +"2456748032","2456813567","US" +"2456813568","2456879103","AT" +"2456879104","2457075711","US" +"2457075712","2457141247","AU" +"2457206784","2457272319","AU" +"2457272320","2457337855","FI" +"2457337856","2457360383","RU" +"2457360384","2457361151","UA" +"2457361152","2457361407","CZ" +"2457361408","2457366527","RU" +"2457366528","2457367551","GB" +"2457367552","2457372671","CZ" +"2457372672","2457376767","RU" +"2457376768","2457378815","DE" +"2457378816","2457393151","RU" +"2457393152","2457398271","CZ" +"2457398272","2457400319","UA" +"2457400320","2457403391","RU" +"2457403392","2457599999","US" +"2457600000","2457665535","GR" +"2457665536","2458058751","US" +"2458058752","2458124287","CA" +"2458124288","2458189823","US" +"2458189824","2458255359","IT" +"2458255360","2458320895","BR" +"2458320896","2458386431","US" +"2458386432","2458451967","CH" +"2458451968","2458648575","US" +"2458648576","2458714111","DE" +"2458714112","2458779647","ZA" +"2458779648","2458910719","US" +"2458976256","2458995511","US" +"2458995512","2458995519","PA" +"2458995520","2459191295","US" +"2459191296","2459191551","CH" +"2459191552","2459631615","US" +"2459631616","2459697151","CL" +"2459697152","2459828223","US" +"2459828224","2459860991","RU" +"2459860992","2459893759","RO" +"2459893760","2459959295","CH" +"2459959296","2460024831","US" +"2460024832","2460090367","FI" +"2460090368","2460155903","GB" +"2460155904","2460221439","US" +"2460221440","2460286975","BR" +"2460286976","2460549119","US" +"2460549120","2460614655","GB" +"2460614656","2460680191","US" +"2460680192","2460745727","NZ" +"2460745728","2460811263","NO" +"2460811264","2460876799","SE" +"2460876800","2460942335","US" +"2460942336","2461007871","BE" +"2461007872","2461138943","GB" +"2461138944","2461204479","AU" +"2461204480","2461270015","GB" +"2461270016","2461401087","US" +"2461401088","2461466623","ZA" +"2461466624","2461597695","US" +"2461597696","2461599743","CH" +"2461599744","2461601791","SE" +"2461601792","2461603762","GB" +"2461603763","2461603763","A1" +"2461603764","2461605887","GB" +"2461605888","2461607935","LB" +"2461607936","2461609983","FR" +"2461609984","2461610095","BE" +"2461610096","2461610111","NL" +"2461610112","2461610463","BE" +"2461610464","2461610479","NL" +"2461610480","2461610495","BE" +"2461610496","2461611519","NL" +"2461611520","2461611575","BE" +"2461611576","2461611583","NL" +"2461611584","2461612031","BE" +"2461612032","2461614079","IL" +"2461614080","2461630463","TR" +"2461630464","2461653503","RU" +"2461653504","2461654015","GB" +"2461654016","2461659135","RU" +"2461659136","2461659647","UA" +"2461659648","2461659903","RU" +"2461659904","2461659905","UA" +"2461659906","2461659913","RU" +"2461659914","2461660159","UA" +"2461660160","2461663231","RU" +"2461663232","2461794303","US" +"2461794304","2461859839","GB" +"2461859840","2461990911","US" +"2461990912","2462056447","GB" +"2462056448","2462121983","NO" +"2462121984","2462187519","PT" +"2462187520","2462253055","GB" +"2462253056","2462326783","AU" +"2462384128","2463236095","US" +"2463236096","2463301631","AT" +"2463301632","2463367167","FI" +"2463367168","2463432703","SI" +"2463432704","2463498239","NO" +"2463498240","2463629311","US" +"2463629312","2463694847","CH" +"2463694848","2463825919","US" +"2463825920","2463891455","ES" +"2463891456","2463911935","LU" +"2463911936","2463916031","FR" +"2463916032","2463956991","LU" +"2463956992","2464022527","AU" +"2464022528","2464153599","US" +"2464153600","2464219135","NO" +"2464219136","2464284671","US" +"2464284672","2464350207","VI" +"2464350208","2464415743","GB" +"2464415744","2464481279","CH" +"2464481280","2464546815","US" +"2464546816","2464743423","ZA" +"2464743424","2464808959","US" +"2464808960","2464874495","DE" +"2464874496","2465660927","US" +"2465660928","2465662975","RU" +"2465662976","2465665023","CH" +"2465665024","2465667071","IT" +"2465667072","2465669119","SI" +"2465669120","2465671167","RU" +"2465671168","2465673215","IE" +"2465673216","2465677311","GB" +"2465677312","2465679359","IT" +"2465679360","2465681407","NL" +"2465681408","2465683455","SE" +"2465683456","2465685503","FR" +"2465685504","2465690367","DE" +"2465690368","2465690431","US" +"2465690432","2465690623","IT" +"2465690624","2465690639","GB" +"2465690640","2465690879","IT" +"2465690880","2465690895","CH" +"2465690896","2465691135","IT" +"2465691136","2465691151","DE" +"2465691152","2465691391","IT" +"2465691392","2465691407","NL" +"2465691408","2465691647","IT" +"2465691648","2465691663","BR" +"2465691664","2465691903","IT" +"2465691904","2465691919","JP" +"2465691920","2465692159","IT" +"2465692160","2465692175","CN" +"2465692176","2465692415","IT" +"2465692416","2465692431","LT" +"2465692432","2465692671","IT" +"2465692672","2465692687","FR" +"2465692688","2465692927","IT" +"2465692928","2465692943","ID" +"2465692944","2465693183","IT" +"2465693184","2465693199","RU" +"2465693200","2465693439","IT" +"2465693440","2465693455","FR" +"2465693456","2465693695","IT" +"2465693696","2465719039","NO" +"2465719040","2465719167","FR" +"2465719168","2465719295","US" +"2465719296","2465719423","FR" +"2465719424","2465719551","US" +"2465719552","2465719679","FR" +"2465719680","2465719807","US" +"2465719808","2465719935","FR" +"2465719936","2465720063","US" +"2465720064","2465720191","FR" +"2465720192","2465720319","US" +"2465720320","2465720351","NO" +"2465720352","2465720383","DK" +"2465720384","2465720607","NO" +"2465720608","2465720639","DK" +"2465720640","2465720863","NO" +"2465720864","2465720895","DK" +"2465720896","2465721119","NO" +"2465721120","2465721151","DK" +"2465721152","2465721375","NO" +"2465721376","2465721407","DK" +"2465721408","2465726463","NO" +"2465726464","2465791999","CH" +"2465792000","2465857535","FR" +"2465857536","2465923071","US" +"2465923072","2465988607","SA" +"2465988608","2466054143","US" +"2466054144","2466119679","SE" +"2466119680","2466185215","DE" +"2466185216","2466189311","GB" +"2466189312","2466191359","ES" +"2466191360","2466193407","CZ" +"2466193408","2466199551","NL" +"2466199552","2466201599","AT" +"2466201600","2466209791","MK" +"2466209792","2466211839","ES" +"2466211840","2466213887","GB" +"2466213888","2466215935","CH" +"2466215936","2466217983","DE" +"2466217984","2466226175","BA" +"2466226176","2466228223","IT" +"2466228224","2466230271","FR" +"2466230272","2466232319","EE" +"2466232320","2466234367","ES" +"2466234368","2466242559","RU" +"2466242560","2466250751","GE" +"2466250752","2466643967","US" +"2466643968","2466709503","KR" +"2466709504","2466775039","HU" +"2466775040","2466840575","HK" +"2466840576","2466906111","US" +"2466906112","2466971647","AU" +"2466971648","2467037183","US" +"2467037184","2467102719","NL" +"2467102720","2467233791","SE" +"2467233792","2468020223","US" +"2468020224","2468085759","GR" +"2468085760","2468151295","US" +"2468151296","2468180479","DK" +"2468180480","2468180735","EU" +"2468180736","2468189663","DK" +"2468189664","2468189695","GB" +"2468189696","2468216831","DK" +"2468216832","2468282367","KZ" +"2468282368","2468347903","US" +"2468347904","2468478975","CZ" +"2468478976","2468937727","US" +"2468937728","2469003263","AU" +"2469003264","2469068799","US" +"2469068800","2469134335","KR" +"2469134336","2469199871","SE" +"2469199872","2469265407","RU" +"2469265408","2469396479","KR" +"2469396480","2469658623","US" +"2469658624","2469724159","GR" +"2469724160","2469789695","US" +"2469789696","2469855231","DE" +"2469855232","2470182911","US" +"2470182912","2470183167","CH" +"2470183168","2470183423","AP" +"2470183424","2470248447","CH" +"2470248448","2470510591","US" +"2470510592","2470576127","BR" +"2470576128","2470641663","AU" +"2470641664","2470707199","LU" +"2470707200","2470772735","GB" +"2470772736","2470838271","AU" +"2470838272","2471165951","US" +"2471165952","2471231487","CH" +"2471231488","2471297023","AU" +"2471297024","2471362559","GB" +"2471362560","2471428095","EU" +"2471428096","2471690239","US" +"2471690240","2471821311","ES" +"2471821312","2471886847","US" +"2471886848","2472083455","CH" +"2472083456","2472148991","GB" +"2472148992","2472214527","US" +"2472214528","2472280063","RS" +"2472280064","2472345599","US" +"2472345600","2472411135","BE" +"2472411136","2472476671","FR" +"2472476672","2472542207","GR" +"2472542208","2472607743","ES" +"2472607744","2472673279","US" +"2472673280","2472869887","FR" +"2472869888","2472935423","US" +"2472935424","2473000959","GR" +"2473000960","2473394175","US" +"2473394176","2473459711","AU" +"2473459712","2473525247","ZA" +"2473525248","2473656319","NO" +"2473656320","2473721855","US" +"2473721856","2473730559","GB" +"2473730560","2473731071","HK" +"2473731072","2473785599","GB" +"2473785600","2473785855","AP" +"2473785856","2473787391","GB" +"2473787392","2474049535","US" +"2474049536","2474115071","GB" +"2474115072","2474246143","US" +"2474246144","2474377215","IT" +"2474377216","2474442751","US" +"2474442752","2474508287","AT" +"2474508288","2474573823","US" +"2474573824","2474639359","FR" +"2474639360","2474901503","US" +"2474901504","2474967039","AU" +"2474967040","2475556863","US" +"2475556864","2475622399","DE" +"2475622400","2475687935","GB" +"2475687936","2475884543","US" +"2475884544","2476277759","GB" +"2476277760","2476474367","US" +"2476474368","2476539903","ES" +"2476539904","2476605439","JP" +"2476605440","2476670975","NZ" +"2476670976","2476802047","US" +"2476802048","2476867583","IL" +"2476867584","2476998655","IT" +"2476998656","2477195263","US" +"2477195264","2477260799","CH" +"2477260800","2477457407","US" +"2477457408","2477522943","FR" +"2477522944","2477588479","DE" +"2477588480","2477654015","FR" +"2477654016","2477719551","US" +"2477719552","2477785087","SK" +"2477785088","2477850623","JP" +"2477850624","2478047231","US" +"2478047232","2478112767","SE" +"2478112768","2478178303","NL" +"2478178304","2478229759","US" +"2478229760","2478230015","AP" +"2478230016","2478309375","US" +"2478309376","2478374911","GB" +"2478374912","2478440447","US" +"2478440448","2478505983","SE" +"2478505984","2478571519","US" +"2478571520","2478702591","GB" +"2478702592","2478899199","US" +"2478899200","2478964735","GB" +"2479030272","2479095807","US" +"2479095808","2479161343","FR" +"2479161344","2479226879","GB" +"2479226880","2479357951","US" +"2479357952","2479423487","AU" +"2479423488","2479489023","GB" +"2479489024","2479584767","US" +"2479584768","2479585023","A1" +"2479585024","2479586815","US" +"2479586816","2479587071","A1" +"2479587072","2479620095","US" +"2479620096","2479685631","DE" +"2479685632","2479947775","US" +"2479947776","2480013311","AU" +"2480013312","2480078847","FR" +"2480078848","2480144383","AU" +"2480209920","2480275455","SK" +"2480275456","2480340991","SE" +"2480340992","2480406527","FR" +"2480406528","2480668671","US" +"2480668672","2480734207","SE" +"2480734208","2481192959","US" +"2481192960","2481455103","CZ" +"2481455104","2481520639","SK" +"2481520640","2481848319","IL" +"2481848320","2482175999","US" +"2482176000","2482208767","FI" +"2482208768","2482216959","US" +"2482216960","2482225151","FI" +"2482225152","2482233343","SG" +"2482233344","2482241535","CN" +"2482241536","2482634751","US" +"2482634752","2482700287","FR" +"2482700288","2482765823","CZ" +"2482765824","2482831359","IE" +"2482831360","2482962431","US" +"2483093504","2483159039","US" +"2483159040","2483224575","SE" +"2483224576","2483290111","GB" +"2483290112","2483421183","US" +"2483421184","2483486719","HU" +"2483486720","2486566911","US" +"2486566912","2486632447","CH" +"2486632448","2486697983","US" +"2486697984","2486763519","AT" +"2486763520","2486960127","US" +"2486960128","2487025663","FR" +"2487025664","2487877631","US" +"2487877632","2487943167","A2" +"2487943168","2488205311","US" +"2488205312","2488270847","GB" +"2488270848","2488336383","US" +"2488336384","2488401919","PL" +"2488401920","2488532991","NO" +"2488532992","2488795135","US" +"2488795136","2488860671","GB" +"2488860672","2489995544","US" +"2489995545","2489995545","AP" +"2489995546","2490041599","US" +"2490041600","2490041855","AP" +"2490041856","2490043391","US" +"2490043392","2490043647","GB" +"2490043648","2490236927","US" +"2490236928","2490302463","LU" +"2490302464","2490695679","US" +"2490695680","2490761215","CA" +"2490761216","2491070463","NO" +"2491070464","2491070719","US" +"2491070720","2491154431","NO" +"2491154432","2491875327","US" +"2491875328","2492006399","SE" +"2492006400","2492071935","US" +"2492071936","2492137471","SE" +"2492137472","2492203007","US" +"2492203008","2492268543","NO" +"2492268544","2492399615","US" +"2492399616","2492465151","FR" +"2492465152","2492530687","US" +"2492530688","2492596223","AU" +"2492596224","2492727295","US" +"2492727296","2492792831","NL" +"2492792832","2492923903","US" +"2492923904","2492989439","OM" +"2492989440","2493513727","US" +"2493513728","2493579263","SE" +"2493579264","2493644799","JP" +"2493644800","2494103551","US" +"2494103552","2494169087","FR" +"2494169088","2494562303","US" +"2494562304","2494627839","GB" +"2494627840","2494660607","US" +"2494660608","2494661119","EU" +"2494661120","2494677247","US" +"2494677248","2494677503","AU" +"2494677504","2494683391","US" +"2494683392","2494683647","AP" +"2494683648","2494689791","US" +"2494689792","2494690047","IN" +"2494690048","2494889983","US" +"2494889984","2494955519","GB" +"2494955520","2495021055","AU" +"2495021056","2495152127","US" +"2495152128","2495217663","EU" +"2495217664","2495283199","US" +"2495283200","2495348735","CH" +"2495348736","2495351039","US" +"2495351040","2495351295","EU" +"2495351296","2495353143","US" +"2495353144","2495353144","EU" +"2495353145","2495412223","US" +"2495412224","2495412479","AP" +"2495412480","2495807487","US" +"2495807488","2495873023","AU" +"2495873024","2495938559","CH" +"2495938560","2496004095","GB" +"2496004096","2496069631","AT" +"2496069632","2496135167","US" +"2496135168","2496200703","NL" +"2496200704","2499110519","MX" +"2499110520","2499110527","NI" +"2499110528","2499128575","MX" +"2499128576","2499128831","US" +"2499128832","2499477503","MX" +"2499477504","2499543039","DE" +"2499543040","2499674111","GB" +"2499674112","2499739647","US" +"2499805184","2499870719","TR" +"2499870720","2500001791","US" +"2500001792","2500034559","GE" +"2500034560","2500038655","GB" +"2500038656","2500040703","IT" +"2500040704","2500042751","LB" +"2500042752","2500046847","SA" +"2500046848","2500047359","IT" +"2500047360","2500047615","DE" +"2500047616","2500048895","IT" +"2500048896","2500050943","MD" +"2500050944","2500067327","KZ" +"2500067328","2500141055","US" +"2500141056","2500141311","IE" +"2500141312","2500141471","US" +"2500141472","2500141503","IE" +"2500141504","2500141823","US" +"2500141824","2500142847","IE" +"2500142848","2500143103","US" +"2500143104","2500144127","IE" +"2500144128","2500161023","US" +"2500161024","2500161535","GB" +"2500161536","2500175871","US" +"2500175872","2500175879","RO" +"2500175880","2500199471","US" +"2500199472","2500199475","IE" +"2500199476","2500235775","US" +"2500235776","2500236031","GB" +"2500236032","2500238383","US" +"2500238384","2500238399","DE" +"2500238400","2500238463","US" +"2500238464","2500238527","DE" +"2500238528","2500276223","US" +"2500276224","2500276735","GB" +"2500276736","2500292735","US" +"2500292736","2500292799","DE" +"2500292800","2500392959","US" +"2500392960","2500393215","IN" +"2500393216","2500393983","US" +"2500393984","2500394239","GB" +"2500394240","2500616447","US" +"2500616448","2500616703","IT" +"2500616704","2500636735","US" +"2500636736","2500636799","GB" +"2500636800","2500646911","US" +"2500646912","2500647167","ES" +"2500647168","2500719615","US" +"2500719616","2500720639","IE" +"2500720640","2501574655","US" +"2501574656","2501640191","KZ" +"2501640192","2503016447","US" +"2503016448","2503081983","IL" +"2503081984","2503671807","US" +"2503671808","2503737343","NL" +"2503737344","2503868415","US" +"2503868416","2503876607","RU" +"2503876608","2503880703","ES" +"2503880704","2503882751","RU" +"2503882752","2503884799","DE" +"2503884800","2503901183","SI" +"2503901184","2503905279","IT" +"2503905280","2503907327","CZ" +"2503907328","2503909375","FR" +"2503909376","2503911343","RU" +"2503911344","2503911359","NL" +"2503911360","2503911423","RU" +"2503911424","2503915519","ES" +"2503915520","2503917567","IT" +"2503917568","2503933951","BG" +"2503933952","2506293247","US" +"2506293248","2506358783","CA" +"2506358784","2507124735","US" +"2507124736","2507124991","IN" +"2507124992","2508062719","US" +"2508062720","2508064767","CH" +"2508064768","2508066815","ES" +"2508066816","2508068863","RU" +"2508068864","2508070911","HU" +"2508070912","2508075007","ES" +"2508075008","2508077055","CH" +"2508077056","2508079103","BE" +"2508079104","2508081151","DE" +"2508081152","2508081407","NL" +"2508081408","2508081663","IL" +"2508081664","2508081919","SG" +"2508081920","2508083199","GB" +"2508083200","2508085247","IS" +"2508085248","2508087295","PS" +"2508087296","2508089343","RU" +"2508089344","2508091391","GB" +"2508091392","2508095487","AZ" +"2508095488","2508103679","SI" +"2508103680","2508105727","ES" +"2508105728","2508107775","RU" +"2508107776","2508109823","FI" +"2508109824","2508111871","DE" +"2508111872","2508128255","RU" +"2508128256","2508455935","US" +"2508455936","2508521471","IT" +"2508521472","2508587007","CH" +"2508587008","2508652543","BE" +"2508652544","2508718079","AU" +"2508718080","2508914687","US" +"2508914688","2508980223","IT" +"2508980224","2509045759","TR" +"2509045760","2509242367","US" +"2509242368","2509307903","AU" +"2509307904","2509373439","US" +"2509373440","2509438975","NL" +"2509438976","2509504511","KW" +"2509504512","2509570047","AT" +"2509570048","2509832191","US" +"2509832192","2509897727","IE" +"2509897728","2509914111","US" +"2509914112","2509916159","RU" +"2509916160","2509918207","DE" +"2509918208","2509920255","FR" +"2509920256","2509922303","IT" +"2509922304","2509924351","AT" +"2509924352","2509928447","RU" +"2509928448","2509930495","FI" +"2509930496","2509934591","RU" +"2509934592","2509936639","DE" +"2509936640","2509937681","AT" +"2509937682","2509937697","LI" +"2509937698","2509937713","AT" +"2509937714","2509937729","LI" +"2509937730","2509937919","AT" +"2509937920","2509938175","IT" +"2509938176","2509938431","US" +"2509938432","2509938557","DE" +"2509938558","2509938558","FR" +"2509938559","2509938559","NL" +"2509938560","2509938687","DE" +"2509938688","2509946879","UA" +"2509946880","2509963263","BE" +"2509963264","2510028799","GB" +"2510028800","2510094335","PL" +"2510094336","2510159871","IE" +"2510159872","2510749695","US" +"2510749696","2510815231","AU" +"2510815232","2510946303","US" +"2510946304","2511011839","GB" +"2511011840","2511077375","AU" +"2511077376","2511142911","DE" +"2511142912","2511339519","US" +"2511339520","2511405055","AU" +"2511405056","2512715775","GB" +"2512715776","2512781311","FI" +"2512781312","2512912383","US" +"2512912384","2512945151","HU" +"2512945152","2512977919","JO" +"2512977920","2513502207","DE" +"2513502208","2513567743","NO" +"2513567744","2513600511","GR" +"2513600512","2513633279","RO" +"2513633280","2513698815","DE" +"2513698816","2513764351","DK" +"2513764352","2514419711","DE" +"2514419712","2514485247","GB" +"2514485248","2514681599","DE" +"2514681600","2514681855","EU" +"2514681856","2515599359","DE" +"2515599360","2515664895","GB" +"2515664896","2516058111","DE" +"2516058112","2516123647","EU" +"2516123648","2516254719","DE" +"2516254720","2516320255","FR" +"2516320256","2516451327","US" +"2516451328","2516516863","GB" +"2516516864","2516520959","RU" +"2516520960","2516523007","SA" +"2516523008","2516525055","RU" +"2516525056","2516526335","US" +"2516526336","2516527103","NL" +"2516527104","2516529151","GB" +"2516529152","2516531199","CH" +"2516531200","2516533247","GB" +"2516533248","2516541439","CZ" +"2516541440","2516545535","GB" +"2516545536","2516547583","RU" +"2516547584","2516549631","GB" +"2516549632","2516551679","RU" +"2516551680","2516553727","FR" +"2516553728","2516557823","AZ" +"2516557824","2516559871","RU" +"2516559872","2516561919","GB" +"2516561920","2516563967","LI" +"2516563968","2516566015","GB" +"2516566016","2516582399","IQ" +"2516582400","2516647935","CN" +"2516647936","2521186303","JP" +"2521186304","2521194495","US" +"2521194496","2521206783","JP" +"2521206784","2521210879","US" +"2521210880","2521223167","JP" +"2521223168","2521227263","DE" +"2521227264","2523201535","JP" +"2523201536","2523267071","AU" +"2523267072","2523529215","US" +"2523529216","2523594751","NO" +"2523594752","2523660287","EU" +"2523660288","2524119039","US" +"2524119040","2524184575","CN" +"2524184576","2524315647","TW" +"2524315648","2524512255","US" +"2524512256","2524643327","CN" +"2524643328","2524963071","US" +"2524963072","2524963327","GB" +"2524963328","2524971007","US" +"2524971008","2525036543","ES" +"2525036544","2525102079","EU" +"2525102080","2525233151","US" +"2525233152","2525298687","SE" +"2525298688","2525626367","US" +"2525626368","2525757439","CN" +"2525757440","2525822975","GR" +"2525822976","2526085119","US" +"2526085120","2526216191","IT" +"2526216192","2526412799","US" +"2526412800","2526478335","KR" +"2526478336","2526543871","AU" +"2526543872","2526937087","US" +"2526937088","2527002623","BE" +"2527002624","2527133695","US" +"2527133696","2527461375","BR" +"2527461376","2527920127","US" +"2527920128","2527985663","AU" +"2527985664","2528051199","US" +"2528051200","2528116735","FR" +"2528116736","2528247807","US" +"2528247808","2528313343","IT" +"2528313344","2528575487","US" +"2528575488","2528641023","KR" +"2528641024","2528706559","US" +"2528706560","2529034239","VE" +"2529034240","2529099775","US" +"2529099776","2529165311","AU" +"2529165312","2529492991","US" +"2529492992","2529558527","KR" +"2529558528","2529886207","US" +"2529886208","2529951743","AU" +"2529951744","2530017279","GB" +"2530017280","2530082815","CH" +"2530082816","2530148351","NZ" +"2530148352","2530213887","AU" +"2530213888","2530541567","US" +"2530541568","2530607103","CH" +"2530607104","2530672639","ES" +"2530672640","2530803711","US" +"2530803712","2530869247","IT" +"2530869248","2531196927","US" +"2531196928","2531262463","CN" +"2531262464","2531459071","US" +"2531459072","2531524607","SE" +"2531524608","2531590143","US" +"2531590144","2531655679","AU" +"2531721216","2532048895","US" +"2532048896","2532114431","SE" +"2532114432","2532179967","GB" +"2532179968","2532376575","US" +"2532376576","2532442111","ES" +"2532442112","2532507647","EU" +"2532507648","2532573183","US" +"2532573184","2532638719","ES" +"2532638720","2533031935","US" +"2533031936","2533097471","BE" +"2533097472","2533228543","US" +"2533228544","2533294079","PL" +"2533294080","2533359615","CN" +"2533359616","2533375999","UA" +"2533376000","2533392383","HU" +"2533392384","2533425151","RO" +"2533425152","2539978751","IT" +"2539978752","2540240895","US" +"2540240896","2540306431","FI" +"2540306432","2540896255","US" +"2540896256","2540961791","GB" +"2540961792","2541223935","US" +"2541223936","2541289471","CH" +"2541289472","2541682687","US" +"2541682688","2541748223","CH" +"2541748224","2541813759","US" +"2541813760","2541879295","GB" +"2541879296","2541944831","AU" +"2541944832","2542075903","US" +"2542075904","2542141439","GB" +"2542141440","2542206975","US" +"2542206976","2542272511","TR" +"2542272512","2542338047","DE" +"2542338048","2543583231","US" +"2543583232","2543648767","SE" +"2543648768","2543714303","NO" +"2543714304","2543779839","JP" +"2543779840","2544500735","US" +"2544500736","2544566271","GB" +"2544566272","2544631807","US" +"2544697344","2544828415","US" +"2544828416","2544893951","EU" +"2544893952","2544959487","GB" +"2544959488","2545025023","SE" +"2545025024","2545090559","AU" +"2545090560","2545156095","US" +"2545156096","2545221631","GB" +"2545221632","2545287167","US" +"2545287168","2545352703","GB" +"2545352704","2545418239","CH" +"2545418240","2545483775","NL" +"2545483776","2545614847","US" +"2545614848","2545680383","NO" +"2545680384","2545745919","US" +"2545745920","2545811455","DE" +"2545811456","2546038783","US" +"2546038784","2546039039","EU" +"2546039040","2547187711","US" +"2547187712","2547318783","GB" +"2547318784","2547515391","US" +"2547515392","2547515399","DK" +"2547516416","2547517439","CH" +"2547519488","2547523583","CH" +"2547523584","2547527679","SE" +"2550136832","2554227967","US" +"2554227968","2554228223","EU" +"2554228224","2554462207","US" +"2554462208","2554527743","HU" +"2554527744","2554789887","US" +"2554789888","2554855423","GB" +"2554855424","2554888703","US" +"2554888704","2554888959","EU" +"2554888960","2554920959","US" +"2554920960","2554986495","DK" +"2554986496","2555052031","CL" +"2555052032","2555117567","US" +"2555117568","2555183103","AU" +"2555183104","2555248639","FR" +"2555248640","2555314175","GB" +"2555314176","2555445247","US" +"2555445248","2555510783","FR" +"2555510784","2555576319","US" +"2555576320","2555641855","AU" +"2555641856","2555707391","BR" +"2555707392","2555903999","US" +"2555904000","2555969535","CH" +"2555969536","2556035071","EU" +"2556035072","2556100607","NO" +"2556100608","2556166143","AU" +"2556166144","2556231679","BR" +"2556231680","2556362751","NO" +"2556362752","2556428287","DK" +"2556428288","2556493823","CH" +"2556493824","2556559359","US" +"2556559360","2556624895","AU" +"2556624896","2556690431","KR" +"2556690432","2556755967","US" +"2556755968","2556821503","HK" +"2556821504","2556887039","SG" +"2556887040","2557018111","HK" +"2557018112","2557083647","GB" +"2557083648","2557542399","ZA" +"2557542400","2557607935","US" +"2557607936","2557673471","GB" +"2557673472","2557739007","DK" +"2557739008","2557870079","US" +"2557870080","2557935615","ID" +"2557935616","2558918655","US" +"2558918656","2558984191","GB" +"2558984192","2559246335","US" +"2559246336","2559311871","CL" +"2559311872","2559508479","US" +"2559508480","2559574015","DE" +"2559574016","2559770623","US" +"2559770624","2559836159","AU" +"2559836160","2559901695","US" +"2559901696","2559967231","KR" +"2559967232","2560032767","GB" +"2560032768","2560098303","US" +"2560098304","2560163839","BE" +"2560163840","2560229375","NZ" +"2560229376","2560628479","US" +"2560628480","2560628735","CA" +"2560628736","2560644607","US" +"2560644608","2560644863","CA" +"2560644864","2561015807","US" +"2561671168","2564947967","US" +"2564947968","2565013503","SG" +"2565013504","2565210111","US" +"2566914048","2566979583","CN" +"2566979584","2567045119","FI" +"2567045120","2567110655","US" +"2567110656","2567176191","CN" +"2567176192","2567241727","US" +"2567241728","2567307263","SI" +"2567307264","2567897087","US" +"2567897088","2567962623","NO" +"2567962624","2568028159","US" +"2568028160","2568093695","DE" +"2568093696","2568159231","US" +"2568159232","2568224767","PL" +"2568224768","2568290303","SG" +"2568290304","2569142271","US" +"2569142272","2569404415","CN" +"2569404416","2569797631","US" +"2569797632","2569863167","NO" +"2569863168","2569994239","CH" +"2569994240","2569994495","EU" +"2569994496","2570125311","US" +"2570125312","2570190847","BE" +"2570190848","2572681215","US" +"2572681216","2572746751","SE" +"2572746752","2572943359","US" +"2572943360","2573402111","DE" +"2573402112","2573467647","CN" +"2573467648","2573533183","DE" +"2573533184","2573598719","CN" +"2573598720","2573926399","US" +"2573926400","2573991935","AU" +"2573991936","2574123007","CH" +"2574123008","2574188543","NO" +"2574188544","2574254079","NZ" +"2574254080","2574315007","SE" +"2574315008","2574315263","NO" +"2574315264","2574319615","SE" +"2574319616","2574647295","US" +"2574647296","2574778367","CN" +"2574778368","2583691263","JP" +"2583691264","2584018943","US" +"2584018944","2584084479","CA" +"2584084480","2584215551","US" +"2584215552","2584281087","GB" +"2584281088","2584346623","US" +"2584346624","2584412159","KR" +"2584412160","2584477695","CA" +"2584477696","2584608767","US" +"2584608768","2584739839","CH" +"2584739840","2584805375","EU" +"2584805376","2585001983","US" +"2585001984","2585067519","CA" +"2585067520","2585788415","US" +"2585788416","2585853951","GB" +"2585853952","2585985023","JP" +"2585985024","2587018239","US" +"2587018240","2587018495","IE" +"2587018496","2587951103","US" +"2600534016","2600665087","US" +"2600665088","2600730623","CA" +"2600730624","2600796159","NO" +"2600796160","2601123839","US" +"2601123840","2601189375","CA" +"2601320448","2601451519","US" +"2601451520","2601517055","CA" +"2601517056","2602565631","US" +"2602565632","2602631167","NZ" +"2602631168","2602774015","US" +"2602774016","2602774271","IN" +"2602774272","2602825727","US" +"2602825728","2602825983","AU" +"2602825984","2603417599","US" +"2603417600","2603483135","DE" +"2603483136","2604007423","US" +"2604007424","2604072959","ES" +"2604072960","2604138495","NO" +"2604138496","2604204031","DE" +"2604204032","2604243711","US" +"2604243712","2604243967","AP" +"2604243968","2604244991","US" +"2604244992","2604245247","EU" +"2604245248","2604335103","US" +"2604335104","2604400639","NZ" +"2604400640","2604466175","AU" +"2604466176","2604531711","US" +"2604531712","2604597247","CA" +"2604597248","2604793855","US" +"2604793856","2604859391","CH" +"2604859392","2604990463","US" +"2604990464","2605055999","SG" +"2605056000","2605121535","US" +"2605121536","2605187071","AU" +"2605187072","2605252607","US" +"2605252608","2605318143","AT" +"2605318144","2606301183","US" +"2606366720","2606448649","US" +"2606448650","2606448651","EU" +"2606448652","2606467071","US" +"2606467072","2606467327","AP" +"2606467328","2606563327","US" +"2606628864","2606646783","US" +"2606646784","2606647039","EU" +"2606647040","2606648831","US" +"2606648832","2606649087","IE" +"2606649088","2607349759","US" +"2607349760","2607415295","CH" +"2607415296","2608728063","US" +"2608728064","2608728319","AP" +"2608728320","2609053695","US" +"2609053696","2609119231","GB" +"2609119232","2609184767","FR" +"2609184768","2609250303","DE" +"2609250304","2609381375","US" +"2609381376","2609446911","GB" +"2609446912","2609512447","DK" +"2609512448","2609643519","US" +"2609643520","2609708799","GB" +"2609708800","2609709055","AP" +"2609709056","2609840127","US" +"2609840128","2609971199","AU" +"2609971200","2610036735","GB" +"2610036736","2610823167","US" +"2610823168","2610888703","PL" +"2610888704","2610954239","ZA" +"2610954240","2611019775","JP" +"2611019776","2612592639","US" +"2612592640","2612658175","IT" +"2612658176","2612723711","US" +"2612723712","2612789247","AU" +"2612789248","2613051391","US" +"2613051392","2613116927","GB" +"2613116928","2613182463","US" +"2613182464","2613247999","CA" +"2613248000","2613313535","US" +"2613379072","2613444607","US" +"2613444608","2613510143","GB" +"2613510144","2613650226","US" +"2613650227","2613650227","BM" +"2613650228","2613650242","US" +"2613650243","2613650243","MX" +"2613650244","2613706751","US" +"2613706752","2613772287","GB" +"2613772288","2613837823","US" +"2613837824","2613903359","NL" +"2613903360","2613968895","AU" +"2613968896","2614034431","US" +"2614034432","2614099967","GR" +"2614099968","2614164991","US" +"2614164992","2614165247","EU" +"2614165248","2614165503","US" +"2614165504","2614231039","NO" +"2614231040","2614296575","ES" +"2614296576","2614362111","BR" +"2614362112","2615083007","US" +"2615083008","2615148543","TR" +"2615148544","2615345151","US" +"2615345152","2615410687","NO" +"2615410688","2615476223","CH" +"2615476224","2615541759","US" +"2615541760","2615607295","KR" +"2615607296","2615672831","GB" +"2615672832","2616262655","ZA" +"2616262656","2616524799","US" +"2616524800","2616590335","GB" +"2616590336","2616770303","US" +"2616770304","2616770559","EU" +"2616770560","2616786943","US" +"2616786944","2616852479","GB" +"2616852480","2616918015","DE" +"2616983552","2617049087","US" +"2617049088","2617114623","IT" +"2617114624","2617180159","US" +"2617245696","2617769983","US" +"2617769984","2617835519","ZA" +"2617835520","2617901055","US" +"2617901056","2617966591","FI" +"2617966592","2618032127","CA" +"2618032128","2618097663","US" +"2618097664","2618163199","NZ" +"2618163200","2618228735","IT" +"2618228736","2618294271","US" +"2618359808","2618425343","PL" +"2618425344","2618490879","FR" +"2618490880","2618687487","US" +"2618687488","2618753023","AU" +"2618753024","2618884095","US" +"2618884096","2618949631","CH" +"2618949632","2619080703","US" +"2619080704","2619146239","FR" +"2619146240","2619277311","US" +"2619277312","2619342847","BN" +"2619342848","2619473919","US" +"2619473920","2619539455","CA" +"2619539456","2619604991","ES" +"2619604992","2619735295","US" +"2619735296","2619735551","EU" +"2619735552","2619736063","US" +"2619801600","2620063743","US" +"2620063744","2620129279","GB" +"2620129280","2620194815","CA" +"2620194816","2620315039","US" +"2620315040","2620315063","DE" +"2620315064","2620391423","US" +"2620391424","2620456959","GB" +"2620456960","2620522495","SE" +"2620522496","2620588031","AU" +"2620588032","2620653567","SE" +"2620653568","2620719103","NO" +"2620719104","2620784639","US" +"2620784640","2620850175","IT" +"2620850176","2620981247","US" +"2620981248","2621046783","CA" +"2621046784","2621112319","AT" +"2621112320","2621177855","NZ" +"2621177856","2621243391","US" +"2621243392","2621308927","GB" +"2621308928","2621374463","NZ" +"2621374464","2621636607","US" +"2621636608","2621702143","DE" +"2621702144","2621767679","US" +"2621767680","2621833215","NZ" +"2621833216","2622685183","US" +"2622685184","2622750719","NL" +"2622750720","2623602687","US" +"2623602688","2623668223","CL" +"2623668224","2624192511","US" +"2624192512","2624258047","CH" +"2624258048","2624266495","US" +"2624266496","2624266751","AP" +"2624266752","2624391696","US" +"2624391697","2624391697","EU" +"2624391698","2624393727","US" +"2624393728","2624393983","EU" +"2624393984","2624716799","US" +"2624716800","2624782335","NL" +"2624782336","2624847871","CH" +"2624847872","2624913407","NO" +"2624913408","2624978943","US" +"2624978944","2625044479","FR" +"2625044480","2625961983","US" +"2625961984","2626027519","LU" +"2626027520","2626093055","US" +"2626093056","2626158591","CH" +"2626158592","2626879487","US" +"2626879488","2626945023","KR" +"2626945024","2627010559","IT" +"2627010560","2627076095","NZ" +"2627076096","2627141631","NL" +"2627141632","2627469311","US" +"2634022912","2634088447","CN" +"2634088448","2635202559","JP" +"2635202560","2635268095","CN" +"2635268096","2635399167","JP" +"2635399168","2635530239","US" +"2635530240","2635595775","FR" +"2635595776","2635661311","FI" +"2635661312","2635726847","PL" +"2635726848","2635792383","CH" +"2635792384","2635988991","IT" +"2635988992","2636120063","US" +"2636120064","2637561855","ID" +"2637561856","2638020607","US" +"2638020608","2638086143","CN" +"2638086144","2638151679","US" +"2638151680","2639331327","JP" +"2639396864","2639462399","JP" +"2639462400","2639593471","GB" +"2639593472","2639659007","AU" +"2639659008","2639724543","BR" +"2639724544","2639790079","US" +"2639790080","2639855615","ES" +"2639855616","2640052223","US" +"2640052224","2640117759","AR" +"2640117760","2640183295","US" +"2640183296","2640248831","FI" +"2640248832","2640314367","US" +"2640314368","2640379903","SE" +"2640379904","2640445439","CA" +"2640445440","2640510975","US" +"2640510976","2640576511","FR" +"2640576512","2640642047","EC" +"2640642048","2641952767","JP" +"2641952768","2642018303","US" +"2642018304","2642083839","CN" +"2642083840","2642149375","US" +"2642149376","2642214911","FI" +"2642214912","2642280447","SE" +"2642280448","2642411519","US" +"2642411520","2642477055","AU" +"2642477056","2642542591","FI" +"2642542592","2642608127","US" +"2642673664","2642935807","US" +"2642935808","2643001343","FR" +"2643001344","2643066879","US" +"2643066880","2643132415","IT" +"2643132416","2643197951","US" +"2643197952","2643263487","GB" +"2643263488","2643460095","US" +"2643460096","2643525631","FI" +"2643525632","2643722239","US" +"2643722240","2643787775","CN" +"2643787776","2644180991","US" +"2644180992","2644246527","AU" +"2644246528","2644312063","CN" +"2644312064","2644377599","IS" +"2644377600","2644443135","PL" +"2644443136","2644508671","FR" +"2644508672","2644574207","US" +"2644574208","2644639743","CH" +"2644639744","2644770815","DE" +"2644770816","2644836351","BE" +"2644836352","2644956927","US" +"2644956928","2644957183","HK" +"2644957184","2644959231","GB" +"2644959232","2644967423","US" +"2644967424","2645032959","AT" +"2645032960","2645098495","CH" +"2645098496","2645164031","FR" +"2645164032","2645229567","US" +"2645229568","2645295103","SE" +"2645295104","2645360639","FR" +"2645360640","2645426175","GB" +"2645426176","2645622783","US" +"2645622784","2645688319","AT" +"2645688320","2645753855","US" +"2645753856","2645819391","TH" +"2645819392","2645884927","SE" +"2645884928","2645950463","HU" +"2645950464","2646212607","US" +"2646212608","2646278143","RU" +"2646278144","2646474751","US" +"2646474752","2646540287","IE" +"2646540288","2646605823","US" +"2646605824","2646671359","JP" +"2646671360","2646736895","BE" +"2646736896","2646933503","US" +"2646933504","2646999039","KR" +"2646999040","2647130111","US" +"2647130112","2647195647","FI" +"2647195648","2647326719","US" +"2647326720","2647392255","GB" +"2647392256","2647457791","US" +"2647457792","2647523327","JP" +"2647523328","2647851007","US" +"2647851008","2647916543","AU" +"2647916544","2648899583","US" +"2648899584","2648965119","IN" +"2648965120","2649030655","GB" +"2649030656","2649413631","US" +"2649413632","2649413887","AP" +"2649413888","2649489407","US" +"2649489408","2649554943","GB" +"2649554944","2649620479","NO" +"2649620480","2649948159","US" +"2649948160","2650013695","FR" +"2650013696","2650079231","CA" +"2650079232","2650210303","US" +"2650210304","2650275839","AT" +"2650275840","2650341375","US" +"2650341376","2650406911","NO" +"2650406912","2650603519","US" +"2650603520","2650669055","CO" +"2650669056","2650734591","US" +"2650734592","2650800127","CN" +"2650800128","2653089791","US" +"2653089792","2653090047","AP" +"2653090048","2653159423","US" +"2653159424","2653421567","NO" +"2653421568","2653487103","AU" +"2653487104","2653552639","GB" +"2653552640","2653618175","ES" +"2653618176","2653683711","GB" +"2653683712","2653749247","KR" +"2653749248","2653814783","AU" +"2653814784","2653880319","RU" +"2653880320","2653945855","IT" +"2653945856","2654011391","US" +"2654011392","2654076927","ES" +"2654076928","2654085119","FR" +"2654085120","2654089215","HK" +"2654089216","2654093311","FR" +"2654093312","2654097407","US" +"2654097408","2654142463","FR" +"2654208000","2654339071","US" +"2654339072","2654404607","AU" +"2654404608","2654601215","US" +"2654601216","2654605311","DE" +"2654605312","2654607359","AT" +"2654607360","2654633983","DE" +"2654633984","2654636031","RU" +"2654636032","2654638079","IT" +"2654638080","2654640127","DE" +"2654640128","2654642175","NO" +"2654642176","2654644223","GB" +"2654644224","2654646271","IT" +"2654646272","2654648319","FR" +"2654648320","2654648645","IR" +"2654648646","2654648646","SE" +"2654648647","2654648655","IR" +"2654648656","2654648656","SE" +"2654648657","2654648665","IR" +"2654648666","2654648666","SE" +"2654648667","2654650367","IR" +"2654650368","2654666751","BG" +"2654666752","2654994431","US" +"2654994432","2655059967","LU" +"2655059968","2655125503","US" +"2655125504","2655191039","PL" +"2655191040","2655256575","EU" +"2655256576","2655715327","US" +"2655715328","2655780863","PL" +"2655780864","2656632831","US" +"2656632832","2656698367","AU" +"2656698368","2656763903","FI" +"2656763904","2656829439","US" +"2656829440","2656894975","SE" +"2656894976","2656960511","US" +"2656960512","2657026047","GB" +"2657026048","2657157119","US" +"2657157120","2657222655","MX" +"2657222656","2657288191","US" +"2657288192","2657353727","ES" +"2657353728","2657484799","US" +"2657484800","2657550335","IT" +"2657550336","2657681407","US" +"2657681408","2657746943","SE" +"2657746944","2657878015","US" +"2657878016","2657943551","TH" +"2657943552","2658009087","ES" +"2658009088","2658074623","IT" +"2658074624","2658140159","US" +"2658140160","2658205695","NO" +"2658205696","2658459648","US" +"2658459649","2658459649","EU" +"2658459650","2658598911","US" +"2658598912","2658664447","GB" +"2658664448","2658926591","US" +"2658926592","2659057663","GB" +"2659057664","2659123199","SE" +"2659123200","2659188735","FI" +"2659188736","2659254271","CA" +"2659254272","2659319807","LT" +"2659319808","2659385343","US" +"2659385344","2659450879","FI" +"2659450880","2659516415","HK" +"2659516416","2659581951","CH" +"2659581952","2660040703","US" +"2660040704","2660106239","CA" +"2660106240","2660171775","US" +"2660171776","2660237311","GB" +"2660237312","2660302847","IN" +"2660302848","2660499455","US" +"2660499456","2660564991","IT" +"2660564992","2660696063","NO" +"2660696064","2660761599","US" +"2660761600","2660827135","GB" +"2660827136","2661023743","US" +"2661023744","2661089279","FR" +"2661089280","2661285887","US" +"2661285888","2661351423","VE" +"2661351424","2661416959","BN" +"2661416960","2661482495","PT" +"2661482496","2661548031","CA" +"2661548032","2661679103","US" +"2661679104","2661941247","LU" +"2661941248","2662006783","CL" +"2662006784","2662072319","US" +"2662072320","2662137855","ES" +"2662137856","2662203391","SE" +"2662203392","2662662143","GB" +"2662662144","2662670335","KG" +"2662670336","2662674431","AZ" +"2662674432","2662677503","DE" +"2662677504","2662678527","GB" +"2662678528","2662686719","DE" +"2662686720","2662694911","CH" +"2662694912","2662727679","KG" +"2662727680","2662793215","HK" +"2662793216","2663251967","US" +"2663251968","2663448575","FR" +"2663448576","2663514111","SK" +"2663514112","2663579647","CZ" +"2663579648","2663645183","SK" +"2663645184","2663710719","CZ" +"2663710720","2663776255","SK" +"2663776256","2664955903","JP" +"2664955904","2665021439","CH" +"2665021440","2665086975","JP" +"2665086976","2665152511","GB" +"2665152512","2665218047","US" +"2665218048","2665283583","CH" +"2665283584","2665381887","US" +"2665414656","2665480191","GB" +"2665480192","2665545727","US" +"2665545728","2665611263","DE" +"2665611264","2665676799","CH" +"2665676800","2665742335","ES" +"2665742336","2665873407","US" +"2665873408","2665938943","GB" +"2665938944","2666004479","FR" +"2666004480","2666070015","CH" +"2666070016","2666135551","FI" +"2666135552","2666201087","GB" +"2666201088","2667053055","US" +"2667053056","2667118591","SE" +"2667118592","2667184127","HU" +"2667184128","2667249663","RU" +"2667249664","2667315199","CL" +"2667315200","2667511807","US" +"2667511808","2667513855","RU" +"2667513856","2667515903","GB" +"2667515904","2667517951","CZ" +"2667517952","2667519103","SK" +"2667519104","2667519231","CZ" +"2667519232","2667519743","SK" +"2667519744","2667522047","CZ" +"2667522048","2667524095","GB" +"2667524096","2667526143","RU" +"2667526144","2667528191","LV" +"2667528192","2667532287","FR" +"2667532288","2667534335","RU" +"2667534336","2667536383","PL" +"2667536384","2667536527","FR" +"2667536528","2667544575","AT" +"2667544576","2667560959","RU" +"2667560960","2667565055","IT" +"2667565056","2667565311","HK" +"2667565312","2667566335","AT" +"2667566336","2667566591","US" +"2667566592","2667566847","DE" +"2667566848","2667567103","FR" +"2667567104","2667569151","SE" +"2667569152","2667571199","GB" +"2667571200","2667573247","ES" +"2667573248","2667575295","IT" +"2667575296","2667577343","SK" +"2667577344","2667642879","SA" +"2667642880","2667970559","US" +"2667970560","2668036095","CA" +"2668036096","2668101631","SE" +"2668101632","2668167167","CH" +"2668167168","2668363775","US" +"2668363776","2668429311","CH" +"2668429312","2668494847","AU" +"2668494848","2668560383","US" +"2668560384","2668625919","GB" +"2668625920","2668691455","MX" +"2668691456","2668756991","US" +"2668756992","2668822527","CA" +"2668822528","2668888063","US" +"2668888064","2668890111","DK" +"2668890112","2668892159","FR" +"2668892160","2668894207","BA" +"2668894208","2668896255","MT" +"2668896256","2668904447","GB" +"2668904448","2668912639","TR" +"2668912640","2668916735","IR" +"2668916736","2668918783","TR" +"2668918784","2668920831","ES" +"2668920832","2668953599","IT" +"2668953600","2669019135","US" +"2669019136","2669084671","CH" +"2669084672","2669150207","ES" +"2669150208","2669215743","US" +"2669215744","2669281279","DE" +"2669281280","2669477887","US" +"2669477888","2669543423","CH" +"2669543424","2669608959","GB" +"2669608960","2669674495","FR" +"2669674496","2669805567","CA" +"2669805568","2669871103","GB" +"2669871104","2670067711","US" +"2670067712","2670133247","SE" +"2670133248","2670591999","US" +"2670592000","2670657535","NL" +"2670657536","2670854143","US" +"2670854144","2670919679","FR" +"2670919680","2670980095","DE" +"2670980096","2670980351","EU" +"2670980352","2670985215","DE" +"2670985216","2671050751","AU" +"2671050752","2671181823","US" +"2671181824","2671247359","CA" +"2671247360","2671378431","US" +"2671378432","2671443967","NO" +"2671443968","2671509503","US" +"2671509504","2671575039","NL" +"2671575040","2671749119","US" +"2671749120","2671750143","CA" +"2671750144","2672295935","US" +"2672295936","2672361471","SE" +"2672361472","2672427007","AU" +"2672427008","2672820223","US" +"2672820224","2672885759","JP" +"2672885760","2672951295","NO" +"2672951296","2673082367","US" +"2673082368","2673147903","FR" +"2673147904","2673213439","US" +"2673213440","2673278975","GB" +"2673278976","2673410047","US" +"2673410048","2673475583","CA" +"2673475584","2673541119","VE" +"2673541120","2673606655","US" +"2673606656","2673672191","GB" +"2673672192","2673737727","RU" +"2673737728","2673803263","US" +"2673803264","2673868799","FR" +"2673868800","2674130943","US" +"2674130944","2674249727","GB" +"2674249728","2674251775","US" +"2674251776","2674262015","GB" +"2674262016","2674327551","US" +"2674327552","2674393087","CH" +"2674393088","2674458623","GB" +"2674458624","2674589695","US" +"2674589696","2674655231","SE" +"2674655232","2674720767","US" +"2674720768","2674786303","FR" +"2674786304","2674851839","US" +"2674851840","2674917375","AU" +"2674917376","2675048447","US" +"2675048448","2675113983","GB" +"2675113984","2675245055","US" +"2675245056","2675310591","NZ" +"2675310592","2675572735","US" +"2675572736","2675638271","CH" +"2675638272","2675965951","US" +"2675965952","2676031487","CA" +"2676031488","2676097023","US" +"2676097024","2676162559","NO" +"2676162560","2676359167","US" +"2676359168","2676424703","IE" +"2676424704","2677014527","US" +"2677014528","2677080063","CH" +"2677080064","2677145599","US" +"2677145600","2677178367","TR" +"2677178368","2677211135","UA" +"2677211136","2677276671","GB" +"2677276672","2677342207","LV" +"2677342208","2677407743","IT" +"2677407744","2677473279","US" +"2677473280","2677538815","FR" +"2677538816","2677604351","FI" +"2677604352","2677669887","US" +"2677669888","2677735423","DE" +"2677735424","2677800959","US" +"2677800960","2677866495","CH" +"2677866496","2677997567","US" +"2677997568","2678063103","CA" +"2678063104","2678128639","UA" +"2678128640","2678194175","US" +"2678194176","2678259711","NO" +"2678259712","2678521855","US" +"2678521856","2678587391","GB" +"2678587392","2678652927","CH" +"2678652928","2678718463","US" +"2678718464","2678783999","GB" +"2678784000","2678849535","NO" +"2678849536","2678851583","US" +"2678851584","2678851839","GB" +"2678851840","2678862847","US" +"2678862848","2678863103","BR" +"2678863104","2678872831","US" +"2678872832","2678873087","IN" +"2678873088","2678885375","US" +"2678885376","2678885631","GB" +"2678885632","2678885887","US" +"2678885888","2678886143","DE" +"2678886144","2678886399","NL" +"2678886400","2678886655","GB" +"2678886656","2678886911","IT" +"2678886912","2678893567","US" +"2678893568","2678893823","CL" +"2678893824","2678911231","US" +"2678911232","2678911487","NL" +"2678911488","2678911743","AU" +"2678911744","2678915071","US" +"2678915072","2678980607","FR" +"2678980608","2679046143","US" +"2679046144","2679111679","CA" +"2679111680","2679177215","US" +"2679177216","2679242751","CA" +"2679242752","2679308287","US" +"2679308288","2679373823","CH" +"2679373824","2679439359","GB" +"2679439360","2680029183","US" +"2680029184","2680094719","SE" +"2680094720","2680225791","US" +"2680225792","2680356863","SE" +"2680356864","2680422399","DK" +"2680422400","2680487935","AU" +"2680487936","2680553471","GB" +"2680553472","2680684543","US" +"2680684544","2680750079","SE" +"2680750080","2681012223","US" +"2681012224","2681077759","PL" +"2681077760","2681143295","CA" +"2681143296","2681208831","AU" +"2681208832","2681274367","CA" +"2681274368","2681339903","US" +"2681339904","2681405439","IT" +"2681405440","2681470975","JP" +"2681470976","2681536511","US" +"2681536512","2681602047","IT" +"2681602048","2681733119","US" +"2681733120","2681798655","NO" +"2681798656","2681864191","FR" +"2681864192","2681929727","US" +"2681929728","2681995263","GB" +"2681995264","2682257407","US" +"2682257408","2682322943","UA" +"2682322944","2682388479","US" +"2682388480","2682454015","CN" +"2682454016","2682519551","US" +"2682519552","2682585087","JP" +"2682585088","2682716159","US" +"2682716160","2682781695","CA" +"2682781696","2682847231","CH" +"2682847232","2683043839","US" +"2683043840","2683109375","GB" +"2683109376","2683174911","ES" +"2683174912","2683240447","US" +"2683240448","2683305983","GB" +"2683305984","2683371519","US" +"2683371520","2683437055","CH" +"2683437056","2683568127","US" +"2683568128","2683633663","GB" +"2683633664","2683637759","EU" +"2683637760","2683637859","NL" +"2683637860","2683637860","EU" +"2683637861","2683641855","NL" +"2683641856","2683645951","US" +"2683645952","2683646207","AP" +"2683646208","2683650047","SG" +"2683650048","2683699199","EU" +"2683699200","2683830271","US" +"2683830272","2683895807","AU" +"2683895808","2684157951","US" +"2684157952","2684158463","NL" +"2684158464","2684158719","BE" +"2684158720","2684159999","NL" +"2684160000","2684162047","NO" +"2684162048","2684164095","EE" +"2684164096","2684166143","SE" +"2684166144","2684170239","TR" +"2684170240","2684178431","GB" +"2684178432","2684180479","TR" +"2684180480","2684182527","DK" +"2684182528","2684184575","IT" +"2684184576","2684186623","SK" +"2684186624","2684188671","DE" +"2684188672","2684190719","RU" +"2684190720","2684190735","US" +"2684190736","2684190739","NL" +"2684190740","2684190743","TR" +"2684190744","2684190751","GB" +"2684190752","2684190831","US" +"2684190832","2684190847","HR" +"2684190848","2684190879","TR" +"2684190880","2684190911","SA" +"2684190912","2684190923","NL" +"2684190924","2684190927","TR" +"2684190928","2684190943","US" +"2684190944","2684190959","IN" +"2684190960","2684190967","US" +"2684190968","2684190971","IN" +"2684190972","2684190975","US" +"2684190976","2684191039","CY" +"2684191040","2684191103","NL" +"2684191104","2684191167","CY" +"2684191168","2684191231","NL" +"2684191232","2684191239","HR" +"2684191240","2684191247","IT" +"2684191248","2684191259","AU" +"2684191260","2684191263","US" +"2684191264","2684191271","GB" +"2684191272","2684191279","US" +"2684191280","2684191287","GB" +"2684191288","2684191295","EG" +"2684191296","2684191303","HR" +"2684191304","2684191307","EG" +"2684191308","2684191311","NL" +"2684191312","2684191319","US" +"2684191320","2684191327","CA" +"2684191328","2684191335","US" +"2684191336","2684191343","IE" +"2684191344","2684191351","HR" +"2684191352","2684191359","RU" +"2684191360","2684191367","SG" +"2684191368","2684191375","HR" +"2684191376","2684191383","AU" +"2684191384","2684191391","GB" +"2684191392","2684191399","NO" +"2684191400","2684191407","US" +"2684191408","2684191411","HK" +"2684191412","2684191415","ZA" +"2684191416","2684191423","US" +"2684191424","2684191439","AU" +"2684191440","2684191455","CN" +"2684191456","2684191615","US" +"2684191616","2684191743","DK" +"2684191744","2684191759","NL" +"2684191760","2684191807","US" +"2684191808","2684191815","KE" +"2684191816","2684191839","US" +"2684191840","2684191843","UG" +"2684191844","2684191847","CN" +"2684191848","2684191855","GB" +"2684191856","2684191859","US" +"2684191860","2684191863","AZ" +"2684191864","2684191871","US" +"2684191872","2684191873","TR" +"2684191874","2684191874","US" +"2684191875","2684191875","SA" +"2684191876","2684191879","TR" +"2684191880","2684191887","LT" +"2684191888","2684191899","IT" +"2684191900","2684191911","US" +"2684191912","2684191919","KW" +"2684191920","2684191927","TR" +"2684191928","2684191935","US" +"2684191936","2684191939","TR" +"2684191940","2684191943","US" +"2684191944","2684191951","ES" +"2684191952","2684191967","US" +"2684191968","2684191975","NL" +"2684191976","2684191999","US" +"2684192000","2684192007","ES" +"2684192008","2684192015","AE" +"2684192016","2684192031","CN" +"2684192032","2684192039","US" +"2684192040","2684192047","AL" +"2684192048","2684192055","US" +"2684192056","2684192063","IN" +"2684192064","2684192071","AL" +"2684192072","2684192079","US" +"2684192080","2684192087","IN" +"2684192088","2684192095","SG" +"2684192096","2684192103","CY" +"2684192104","2684192107","GB" +"2684192108","2684192109","NL" +"2684192110","2684192111","TR" +"2684192112","2684192119","CH" +"2684192120","2684192127","DO" +"2684192128","2684192135","IN" +"2684192136","2684192143","GB" +"2684192144","2684192159","US" +"2684192160","2684192163","HK" +"2684192164","2684192175","TR" +"2684192176","2684192191","JO" +"2684192192","2684192199","US" +"2684192200","2684192207","QA" +"2684192208","2684192215","US" +"2684192216","2684192223","CA" +"2684192224","2684192231","TR" +"2684192232","2684192239","US" +"2684192240","2684192247","IN" +"2684192248","2684192263","US" +"2684192264","2684192265","TR" +"2684192266","2684192266","EG" +"2684192267","2684192267","SA" +"2684192268","2684192271","GB" +"2684192272","2684192279","US" +"2684192280","2684192287","RU" +"2684192288","2684192295","DK" +"2684192296","2684192303","US" +"2684192304","2684192311","CA" +"2684192312","2684192327","US" +"2684192328","2684192335","AE" +"2684192336","2684192343","US" +"2684192344","2684192347","AE" +"2684192348","2684192351","SA" +"2684192352","2684192359","AE" +"2684192360","2684192371","US" +"2684192372","2684192375","GB" +"2684192376","2684192383","BM" +"2684192384","2684192387","CA" +"2684192388","2684192391","AE" +"2684192392","2684192399","US" +"2684192400","2684192407","AU" +"2684192408","2684192415","US" +"2684192416","2684192423","CA" +"2684192424","2684192427","CH" +"2684192428","2684192431","NL" +"2684192432","2684192439","BR" +"2684192440","2684192447","NL" +"2684192448","2684192459","TR" +"2684192460","2684192463","CN" +"2684192464","2684192471","US" +"2684192472","2684192479","CN" +"2684192480","2684192495","US" +"2684192496","2684192503","GB" +"2684192504","2684192507","HR" +"2684192508","2684192509","CA" +"2684192510","2684192510","BH" +"2684192511","2684192511","RU" +"2684192512","2684192545","US" +"2684192546","2684192547","EG" +"2684192548","2684192551","SA" +"2684192552","2684192559","GB" +"2684192560","2684192567","NL" +"2684192568","2684192583","US" +"2684192584","2684192591","DE" +"2684192592","2684192599","US" +"2684192600","2684192607","AE" +"2684192608","2684192611","US" +"2684192612","2684192615","ES" +"2684192616","2684192623","US" +"2684192624","2684192627","GB" +"2684192628","2684192631","US" +"2684192632","2684192639","SE" +"2684192640","2684192655","GR" +"2684192656","2684192663","GB" +"2684192664","2684192667","AE" +"2684192668","2684192671","RU" +"2684192672","2684192687","US" +"2684192688","2684192695","NL" +"2684192696","2684192703","IT" +"2684192704","2684192711","BE" +"2684192712","2684192715","AU" +"2684192716","2684192719","CA" +"2684192720","2684192727","NL" +"2684192728","2684192731","BE" +"2684192732","2684192735","IT" +"2684192736","2684192767","US" +"2684192768","2684192775","TR" +"2684192776","2684192799","US" +"2684192800","2684192807","GB" +"2684192808","2684192823","PL" +"2684192824","2684192831","CA" +"2684192832","2684192839","NO" +"2684192840","2684192855","SA" +"2684192856","2684192867","US" +"2684192868","2684192879","CN" +"2684192880","2684192895","US" +"2684192896","2684192927","LT" +"2684192928","2684192939","ES" +"2684192940","2684192951","US" +"2684192952","2684192959","CY" +"2684192960","2684192967","PL" +"2684192968","2684192971","GB" +"2684192972","2684192975","MA" +"2684192976","2684192983","SA" +"2684192984","2684192991","TR" +"2684192992","2684192999","BR" +"2684193000","2684193007","SA" +"2684193008","2684193015","GB" +"2684193016","2684193019","CN" +"2684193020","2684193020","BH" +"2684193021","2684193021","US" +"2684193022","2684193022","ES" +"2684193023","2684193023","IT" +"2684193024","2684193031","TR" +"2684193032","2684193039","GR" +"2684193040","2684193055","BR" +"2684193056","2684193059","TR" +"2684193060","2684193063","GB" +"2684193064","2684193071","US" +"2684193072","2684193079","EG" +"2684193080","2684193087","HR" +"2684193088","2684193119","GB" +"2684193120","2684193127","CN" +"2684193128","2684193147","US" +"2684193148","2684193151","GR" +"2684193152","2684193159","NZ" +"2684193160","2684193167","SA" +"2684193168","2684193175","US" +"2684193176","2684193183","BH" +"2684193184","2684193195","TR" +"2684193196","2684193199","CN" +"2684193200","2684193215","BE" +"2684193216","2684193223","US" +"2684193224","2684193231","BR" +"2684193232","2684193235","BM" +"2684193236","2684193239","AE" +"2684193240","2684193247","PK" +"2684193248","2684193255","NL" +"2684193256","2684193263","US" +"2684193264","2684193271","NO" +"2684193272","2684193287","US" +"2684193288","2684193295","SA" +"2684193296","2684193303","IT" +"2684193304","2684193311","HK" +"2684193312","2684193319","IN" +"2684193320","2684193327","AE" +"2684193328","2684193335","GR" +"2684193336","2684193375","US" +"2684193376","2684193383","LB" +"2684193384","2684193391","US" +"2684193392","2684193399","JO" +"2684193400","2684193407","PL" +"2684193408","2684193439","SA" +"2684193440","2684193447","US" +"2684193448","2684193455","HU" +"2684193456","2684193467","US" +"2684193468","2684193471","AE" +"2684193472","2684193479","MX" +"2684193480","2684193487","IN" +"2684193488","2684193511","US" +"2684193512","2684193519","AE" +"2684193520","2684193527","NL" +"2684193528","2684193535","GB" +"2684193536","2684193551","US" +"2684193552","2684193559","SA" +"2684193560","2684193567","CN" +"2684193568","2684193575","US" +"2684193576","2684193583","EG" +"2684193584","2684193591","RU" +"2684193592","2684193599","ES" +"2684193600","2684193607","IN" +"2684193608","2684193611","PT" +"2684193612","2684193615","CN" +"2684193616","2684193623","IN" +"2684193624","2684193631","GR" +"2684193632","2684193639","IN" +"2684193640","2684193647","TR" +"2684193648","2684193655","AU" +"2684193656","2684193659","ES" +"2684193660","2684193663","US" +"2684193664","2684193671","CH" +"2684193672","2684193679","US" +"2684193680","2684193687","DE" +"2684193688","2684193691","US" +"2684193692","2684193695","GR" +"2684193696","2684193711","GB" +"2684193712","2684193719","TR" +"2684193720","2684193727","CN" +"2684193728","2684193759","US" +"2684193760","2684193767","GB" +"2684193768","2684193775","AR" +"2684193776","2684193789","US" +"2684193790","2684193790","TR" +"2684193791","2684193791","CH" +"2684193792","2684193799","AE" +"2684193800","2684193807","FR" +"2684193808","2684193823","GB" +"2684193824","2684193831","ES" +"2684193832","2684193855","US" +"2684193856","2684193871","GB" +"2684193872","2684193911","US" +"2684193912","2684193919","AT" +"2684193920","2684193927","US" +"2684193928","2684193931","AT" +"2684193932","2684193935","GB" +"2684193936","2684193951","US" +"2684193952","2684193959","IN" +"2684193960","2684193963","CN" +"2684193964","2684193967","US" +"2684193968","2684193975","IL" +"2684193976","2684193983","DK" +"2684193984","2684193999","US" +"2684194000","2684194007","DK" +"2684194008","2684194039","US" +"2684194040","2684194047","MT" +"2684194048","2684194055","IT" +"2684194056","2684194087","US" +"2684194088","2684194095","GR" +"2684194096","2684194119","US" +"2684194120","2684194127","BG" +"2684194128","2684194135","GB" +"2684194136","2684194143","MX" +"2684194144","2684194151","US" +"2684194152","2684194159","EG" +"2684194160","2684194167","IN" +"2684194168","2684194171","US" +"2684194172","2684194175","IL" +"2684194176","2684194207","LT" +"2684194208","2684194215","AZ" +"2684194216","2684194223","IL" +"2684194224","2684194239","US" +"2684194240","2684194255","NL" +"2684194256","2684194271","US" +"2684194272","2684194279","GB" +"2684194280","2684194287","BZ" +"2684194288","2684194295","RU" +"2684194296","2684194303","CA" +"2684194304","2684194311","SE" +"2684194312","2684194319","IL" +"2684194320","2684194327","SA" +"2684194328","2684194335","TR" +"2684194336","2684194343","LV" +"2684194344","2684194351","IL" +"2684194352","2684194367","US" +"2684194368","2684194375","TW" +"2684194376","2684194383","JO" +"2684194384","2684194391","GB" +"2684194392","2684194399","US" +"2684194400","2684194407","GR" +"2684194408","2684194423","NZ" +"2684194424","2684194431","SA" +"2684194432","2684194463","SG" +"2684194464","2684194471","BR" +"2684194472","2684194479","TR" +"2684194480","2684194495","GB" +"2684194496","2684194503","NG" +"2684194504","2684194507","US" +"2684194508","2684194511","SE" +"2684194512","2684194519","GB" +"2684194520","2684194527","IT" +"2684194528","2684194535","US" +"2684194536","2684194539","NG" +"2684194540","2684194543","CN" +"2684194544","2684194551","US" +"2684194552","2684194559","IN" +"2684194560","2684194663","US" +"2684194664","2684194671","JO" +"2684194672","2684194679","US" +"2684194680","2684194687","NO" +"2684194688","2684194695","NL" +"2684194696","2684194703","DK" +"2684194704","2684194711","US" +"2684194712","2684194719","LV" +"2684194720","2684194723","BR" +"2684194724","2684194727","US" +"2684194728","2684194751","DK" +"2684194752","2684194767","US" +"2684194768","2684194815","DK" +"2684194816","2684194839","NL" +"2684194840","2684194847","US" +"2684194848","2684194855","SA" +"2684194856","2684194863","UG" +"2684194864","2684194871","US" +"2684194872","2684194879","SA" +"2684194880","2684194887","AE" +"2684194888","2684194895","ES" +"2684194896","2684194903","NL" +"2684194904","2684194907","TR" +"2684194908","2684194911","US" +"2684194912","2684194919","PT" +"2684194920","2684194927","NL" +"2684194928","2684194931","TR" +"2684194932","2684194935","BM" +"2684194936","2684194943","CN" +"2684194944","2684194951","NL" +"2684194952","2684194959","US" +"2684194960","2684194967","MA" +"2684194968","2684194975","PK" +"2684194976","2684194991","NL" +"2684194992","2684194999","US" +"2684195000","2684195007","DK" +"2684195008","2684195039","IN" +"2684195040","2684195047","BR" +"2684195048","2684195055","ES" +"2684195056","2684195063","DK" +"2684195064","2684195071","GR" +"2684195072","2684195079","US" +"2684195080","2684195087","ES" +"2684195088","2684195095","EG" +"2684195096","2684195111","US" +"2684195112","2684195119","SA" +"2684195120","2684195127","CA" +"2684195128","2684195135","GB" +"2684195136","2684195167","US" +"2684195168","2684195199","CY" +"2684195200","2684195295","US" +"2684195296","2684195303","DE" +"2684195304","2684195307","SE" +"2684195308","2684195311","US" +"2684195312","2684195319","NL" +"2684195320","2684195323","GB" +"2684195324","2684195327","US" +"2684195328","2684195335","NL" +"2684195336","2684195343","US" +"2684195344","2684195351","DE" +"2684195352","2684195359","ES" +"2684195360","2684195367","NL" +"2684195368","2684195371","ES" +"2684195372","2684195375","MA" +"2684195376","2684195383","BE" +"2684195384","2684195391","AE" +"2684195392","2684195407","US" +"2684195408","2684195415","GB" +"2684195416","2684195423","AE" +"2684195424","2684195427","IT" +"2684195428","2684195431","TR" +"2684195432","2684195439","GB" +"2684195440","2684195455","DK" +"2684195456","2684195487","CN" +"2684195488","2684195495","TW" +"2684195496","2684195503","UG" +"2684195504","2684195511","SA" +"2684195512","2684195519","US" +"2684195520","2684195527","IN" +"2684195528","2684195535","RO" +"2684195536","2684195543","US" +"2684195544","2684195551","NL" +"2684195552","2684195559","BA" +"2684195560","2684195567","CA" +"2684195568","2684195575","US" +"2684195576","2684195583","TR" +"2684195584","2684195647","US" +"2684195648","2684195655","BA" +"2684195656","2684195663","US" +"2684195664","2684195675","NL" +"2684195676","2684195679","US" +"2684195680","2684195683","AE" +"2684195684","2684195685","NL" +"2684195686","2684195686","US" +"2684195687","2684195687","SA" +"2684195688","2684195695","GB" +"2684195696","2684195703","US" +"2684195704","2684195711","CN" +"2684195712","2684195712","US" +"2684195713","2684195713","CN" +"2684195714","2684195715","UA" +"2684195716","2684195719","US" +"2684195720","2684195727","GB" +"2684195728","2684195735","US" +"2684195736","2684195743","CA" +"2684195744","2684195751","US" +"2684195752","2684195759","BE" +"2684195760","2684195767","US" +"2684195768","2684195775","KW" +"2684195776","2684195783","CN" +"2684195784","2684195791","EG" +"2684195792","2684195799","KW" +"2684195800","2684195807","AF" +"2684195808","2684195815","AR" +"2684195816","2684195823","GB" +"2684195824","2684195831","AF" +"2684195832","2684195839","HR" +"2684195840","2684195855","US" +"2684195856","2684195863","GB" +"2684195864","2684195867","UG" +"2684195868","2684195871","ES" +"2684195872","2684195879","AT" +"2684195880","2684195887","US" +"2684195888","2684195903","NL" +"2684195904","2684195911","IN" +"2684195912","2684195919","CN" +"2684195920","2684195935","HR" +"2684195936","2684195967","AF" +"2684195968","2684195975","CN" +"2684195976","2684195979","TR" +"2684195980","2684195983","US" +"2684195984","2684195991","BD" +"2684195992","2684195999","IE" +"2684196000","2684196007","US" +"2684196008","2684196015","FR" +"2684196016","2684196023","AU" +"2684196024","2684196031","US" +"2684196032","2684196047","MA" +"2684196048","2684196055","AT" +"2684196056","2684196063","ES" +"2684196064","2684196071","US" +"2684196072","2684196079","EG" +"2684196080","2684196087","CA" +"2684196088","2684196095","GB" +"2684196096","2684196159","US" +"2684196160","2684196191","AF" +"2684196192","2684196199","SA" +"2684196200","2684196207","ES" +"2684196208","2684196223","US" +"2684196224","2684196239","NL" +"2684196240","2684196255","TR" +"2684196256","2684196271","NL" +"2684196272","2684196279","EG" +"2684196280","2684196303","DK" +"2684196304","2684196311","BR" +"2684196312","2684196319","PA" +"2684196320","2684196335","US" +"2684196336","2684196343","CN" +"2684196344","2684196347","TR" +"2684196348","2684196383","US" +"2684196384","2684196391","GB" +"2684196392","2684196399","US" +"2684196400","2684196415","TR" +"2684196416","2684196431","US" +"2684196432","2684196439","CH" +"2684196440","2684196447","DK" +"2684196448","2684196463","EG" +"2684196464","2684196511","DK" +"2684196512","2684196527","US" +"2684196528","2684196535","DK" +"2684196536","2684196543","US" +"2684196544","2684196551","DK" +"2684196552","2684196575","NL" +"2684196576","2684196591","US" +"2684196592","2684196607","NL" +"2684196608","2684196639","US" +"2684196640","2684196671","GB" +"2684196672","2684196719","NL" +"2684196720","2684196767","US" +"2684196768","2684196775","CN" +"2684196776","2684196783","US" +"2684196784","2684196791","TR" +"2684196792","2684196799","US" +"2684196800","2684196831","TR" +"2684196832","2684196839","US" +"2684196840","2684196847","BR" +"2684196848","2684196859","US" +"2684196860","2684196863","NL" +"2684196864","2684196871","US" +"2684196872","2684196879","MX" +"2684196880","2684196881","GB" +"2684196882","2684196882","US" +"2684196883","2684196883","DE" +"2684196884","2684196885","SA" +"2684196886","2684196886","GB" +"2684196887","2684196887","UA" +"2684196888","2684196891","TR" +"2684196892","2684196893","SA" +"2684196894","2684196894","BR" +"2684196895","2684196895","MA" +"2684196896","2684196903","RU" +"2684196904","2684196905","US" +"2684196906","2684196906","EG" +"2684196907","2684196907","AU" +"2684196908","2684196908","UA" +"2684196909","2684196909","AU" +"2684196910","2684196910","GB" +"2684196911","2684196911","IT" +"2684196912","2684196927","US" +"2684196928","2684196959","NL" +"2684196960","2684196967","US" +"2684196968","2684196975","BR" +"2684196976","2684196983","NL" +"2684196984","2684196987","DK" +"2684196988","2684196999","US" +"2684197000","2684197007","IT" +"2684197008","2684197015","US" +"2684197016","2684197021","NL" +"2684197022","2684197022","RU" +"2684197023","2684197023","NL" +"2684197024","2684197031","EG" +"2684197032","2684197039","US" +"2684197040","2684197047","TH" +"2684197048","2684197055","IN" +"2684197056","2684197063","US" +"2684197064","2684197071","CN" +"2684197072","2684197079","MX" +"2684197080","2684197083","IT" +"2684197084","2684197087","NO" +"2684197088","2684197103","US" +"2684197104","2684197107","TR" +"2684197108","2684197111","AR" +"2684197112","2684197115","TR" +"2684197116","2684197119","US" +"2684197120","2684197120","NL" +"2684197121","2684197121","MA" +"2684197122","2684197123","SK" +"2684197124","2684197135","US" +"2684197136","2684197143","SA" +"2684197144","2684197151","GB" +"2684197152","2684197167","US" +"2684197168","2684197175","DK" +"2684197176","2684197179","TR" +"2684197180","2684197181","GB" +"2684197182","2684197182","MA" +"2684197183","2684197183","GB" +"2684197184","2684197191","DK" +"2684197192","2684197195","US" +"2684197196","2684197196","IT" +"2684197197","2684197197","NL" +"2684197198","2684197198","US" +"2684197199","2684197199","AU" +"2684197200","2684197207","SA" +"2684197208","2684197231","US" +"2684197232","2684197239","NL" +"2684197240","2684197247","GB" +"2684197248","2684197251","SA" +"2684197252","2684197263","US" +"2684197264","2684197267","SA" +"2684197268","2684197271","US" +"2684197272","2684197279","HR" +"2684197280","2684197283","US" +"2684197284","2684197287","TR" +"2684197288","2684197291","US" +"2684197292","2684197295","HK" +"2684197296","2684197303","HR" +"2684197304","2684197307","NL" +"2684197308","2684197319","US" +"2684197320","2684197327","SA" +"2684197328","2684197335","BR" +"2684197336","2684197336","PA" +"2684197337","2684197339","NL" +"2684197340","2684197343","US" +"2684197344","2684197351","UA" +"2684197352","2684197355","GB" +"2684197356","2684197356","TR" +"2684197357","2684197357","NL" +"2684197358","2684197358","RU" +"2684197359","2684197359","IN" +"2684197360","2684197368","TR" +"2684197369","2684197369","US" +"2684197370","2684197370","SA" +"2684197371","2684197371","AU" +"2684197372","2684197373","MA" +"2684197374","2684198911","NL" +"2684198912","2684199423","GB" +"2684199424","2684199679","EU" +"2684199680","2684200959","GB" +"2684200960","2684203007","RU" +"2684203008","2684205055","GB" +"2684205056","2684207103","IT" +"2684207104","2684213247","GB" +"2684213248","2684215295","MK" +"2684215296","2684217343","BE" +"2684217344","2684219391","CZ" +"2684219392","2684221439","PL" +"2684221440","2684223487","IL" +"2684223488","2684289023","GB" +"2684289024","2684297215","RU" +"2684297216","2684299263","IR" +"2684299264","2684301311","CY" +"2684301312","2684305407","PT" +"2684305408","2684321791","RU" +"2684321792","2684329983","IT" +"2684329984","2684332031","IQ" +"2684332032","2684334079","DE" +"2684334080","2684338175","PL" +"2684338176","2684338303","NL" +"2684338304","2684338367","ES" +"2684338368","2684338687","NL" +"2684338688","2684339103","ES" +"2684339104","2684339199","NL" +"2684339200","2684340223","ES" +"2684340224","2684344319","GB" +"2684344320","2684345343","NL" +"2684345344","2684345471","US" +"2684345472","2684345599","NL" +"2684345600","2684345855","US" +"2684345856","2684346367","NL" +"2684346368","2684354559","FI" +"2684354560","2684616703","US" +"2684616704","2684682239","NZ" +"2684682240","2684747775","GB" +"2684747776","2684813311","IE" +"2684813312","2684878847","US" +"2684878848","2684944383","SE" +"2684944384","2685009919","GB" +"2685009920","2685075455","US" +"2685075456","2686386175","JP" +"2686386176","2686844927","US" +"2686844928","2686910463","GB" +"2686910464","2686975999","US" +"2686976000","2687041535","GR" +"2687041536","2687238143","US" +"2687238144","2687297231","DE" +"2687297232","2687297239","GB" +"2687297240","2687297247","SE" +"2687297248","2687297824","DE" +"2687297825","2687297828","FR" +"2687297829","2687297832","DE" +"2687297833","2687297836","CH" +"2687297837","2687299119","DE" +"2687299120","2687299127","US" +"2687299128","2687299135","CN" +"2687299136","2687762431","DE" +"2687762432","2687827967","AT" +"2687827968","2687893503","CH" +"2687893504","2688221183","DE" +"2688221184","2688286719","CH" +"2688286720","2688352255","DE" +"2688352256","2688418825","CH" +"2688418826","2688418826","EU" +"2688418827","2688420351","CH" +"2688420352","2688420607","CN" +"2688420608","2688420863","CH" +"2688420864","2688421119","SG" +"2688421120","2688421375","AP" +"2688421376","2688421887","US" +"2688421888","2688548863","CH" +"2688548864","2688614399","AU" +"2688614400","2688679935","US" +"2688679936","2688745471","IT" +"2688745472","2688876543","NO" +"2688876544","2688942079","US" +"2688942080","2689007615","DE" +"2689007616","2689073151","FI" +"2689073152","2689138687","CA" +"2689138688","2689204223","US" +"2689204224","2689269759","JP" +"2689269760","2689335295","TR" +"2689335296","2689400831","US" +"2689466368","2689531903","IT" +"2689531904","2689535999","US" +"2689536000","2689536511","GB" +"2689536512","2689541631","US" +"2689541632","2689541887","GB" +"2689541888","2689545727","US" +"2689545728","2689546239","GB" +"2689546240","2689559807","US" +"2689559808","2689560063","GB" +"2689560064","2689566207","US" +"2689566208","2689566719","GB" +"2689566720","2689568255","US" +"2689568256","2689568767","GB" +"2689568768","2689581823","US" +"2689581824","2689582079","GB" +"2689582080","2689586687","US" +"2689586688","2689587199","GB" +"2689587200","2689593343","US" +"2689593344","2689593855","GB" +"2689593856","2689594111","US" +"2689594112","2689594879","GB" +"2689594880","2689597439","US" +"2689597440","2689662975","IT" +"2689662976","2689794047","US" +"2689794048","2689802239","DE" +"2689802240","2689810431","GB" +"2689810432","2689818623","US" +"2689818624","2689819135","IN" +"2689819136","2689826815","US" +"2689826816","2689835007","JP" +"2689835008","2689843199","AU" +"2689843200","2689925119","US" +"2689925120","2689990655","CH" +"2689990656","2690383871","US" +"2690383872","2690449407","FR" +"2690449408","2690646015","US" +"2690646016","2690711551","SG" +"2690711552","2690777087","IT" +"2690777088","2690842623","CH" +"2690842624","2690908159","RS" +"2690908160","2690973695","GB" +"2690973696","2691104767","US" +"2691104768","2691170303","FR" +"2691170304","2691235839","GB" +"2691301376","2691366911","CA" +"2691366912","2691760127","US" +"2691825664","2691891199","HU" +"2691891200","2692546559","ZA" +"2692546560","2694840319","US" +"2696151040","2696216575","IT" +"2696413184","2697789439","JP" +"2697789440","2697854975","US" +"2697854976","2697920511","AU" +"2697920512","2698117119","US" +"2698117120","2698182655","IS" +"2698182656","2698248191","DE" +"2698248192","2698313727","US" +"2698313728","2698342399","GB" +"2698342400","2698346495","DE" +"2698346496","2698375167","GB" +"2698375168","2698379263","DE" +"2698379264","2698444799","ES" +"2698444800","2698510335","JP" +"2698510336","2698706943","CZ" +"2698706944","2698772479","CH" +"2698772480","2698838015","IT" +"2698838016","2698903551","BE" +"2698903552","2698969087","AU" +"2698969088","2699034623","CA" +"2699231232","2699296767","US" +"2699296768","2699362303","FR" +"2699362304","2699624447","US" +"2699624448","2699689983","JP" +"2699755520","2700935167","JP" +"2700935168","2701066239","US" +"2701197312","2701262847","US" +"2701262848","2701328383","GB" +"2701328384","2701393919","FR" +"2701393920","2701459455","NO" +"2701459456","2701524991","AT" +"2701524992","2701656063","US" +"2701656064","2701721599","RU" +"2701721600","2701787135","TR" +"2701852672","2701918207","US" +"2701918208","2701983743","GB" +"2701983744","2702245887","US" +"2702245888","2702311423","GB" +"2702376960","2702442495","CA" +"2702442496","2702508031","CH" +"2702508032","2702573567","US" +"2702639104","2702704639","GB" +"2702704640","2702770175","BR" +"2702770176","2702835711","CL" +"2702835712","2702901247","US" +"2702901248","2702966783","IT" +"2702966784","2703032319","US" +"2703032320","2703097855","NZ" +"2703097856","2703163391","GB" +"2703163392","2703556607","US" +"2703556608","2703622143","ES" +"2703622144","2703818751","US" +"2703818752","2703884287","FI" +"2703884288","2703949823","DE" +"2703949824","2704015359","AU" +"2704015360","2704277503","US" +"2704277504","2704343039","FR" +"2704343040","2704408575","US" +"2704408576","2704474111","AU" +"2704474112","2704485119","US" +"2704485120","2704485375","AU" +"2704485376","2704539647","US" +"2704539648","2704605183","SE" +"2704605184","2704670719","HR" +"2704670720","2704736255","SE" +"2704736256","2704801791","US" +"2704867328","2704998399","US" +"2704998400","2705063935","BE" +"2705063936","2705195007","US" +"2705195008","2705260543","CH" +"2705260544","2705326079","US" +"2705326080","2705391615","MO" +"2705391616","2705522687","NZ" +"2705522688","2705588223","ES" +"2705588224","2705596159","US" +"2705596160","2705596415","CA" +"2705596416","2705784831","US" +"2705784832","2705850367","GB" +"2705850368","2705915903","ES" +"2705915904","2706046975","GB" +"2706046976","2706112511","JP" +"2706112512","2706178047","GB" +"2706178048","2706243583","US" +"2706243584","2706309119","CH" +"2706309120","2706374655","BR" +"2706374656","2706571263","US" +"2706571264","2706694143","NL" +"2706694144","2706702335","US" +"2706702336","2706960383","NL" +"2706960384","2706964479","US" +"2706964480","2707226623","NL" +"2707226624","2707488767","JP" +"2707488768","2707619839","US" +"2707619840","2707947519","GB" +"2707947520","2708144127","FR" +"2708144128","2708340735","US" +"2708340736","2708406271","AT" +"2708406272","2708471807","ES" +"2708471808","2708537343","GB" +"2708537344","2708635135","US" +"2708635136","2708635391","EU" +"2708635392","2708661247","US" +"2708661248","2708661503","AU" +"2708661504","2708733951","US" +"2708733952","2708799487","ES" +"2708799488","2708865023","AU" +"2708865024","2708930559","JP" +"2708930560","2709127167","US" +"2709127168","2709192703","KR" +"2709192704","2709258239","EU" +"2709258240","2709389311","US" +"2709389312","2709454847","SG" +"2709454848","2709716991","US" +"2709716992","2709782527","CL" +"2709782528","2709848063","PE" +"2709848064","2710175743","US" +"2710241280","2710306815","MY" +"2710372352","2710437887","CA" +"2710437888","2710503423","MY" +"2710503424","2710568959","AU" +"2710568960","2710700031","US" +"2710700032","2710765567","AU" +"2710765568","2710831103","IT" +"2710831104","2710896639","BR" +"2710896640","2711093247","US" +"2711093248","2711158783","AU" +"2711158784","2711486463","US" +"2711486464","2711551999","NL" +"2711552000","2711765247","US" +"2711765248","2711765503","EU" +"2711765504","2713190399","US" +"2713190400","2713255935","CA" +"2713255936","2713387007","US" +"2713387008","2713452543","CA" +"2713452544","2713583615","US" +"2713583616","2713649151","AR" +"2713649152","2713976831","US" +"2713976832","2714042367","VE" +"2714042368","2714238975","US" +"2714238976","2714304511","TH" +"2714304512","2714370047","US" +"2714370048","2714435583","CH" +"2714435584","2714697727","US" +"2714697728","2714763263","CN" +"2714763264","2715287551","US" +"2715287552","2715353087","CA" +"2715353088","2716139519","US" +"2716139520","2716205055","SG" +"2716205056","2716729343","US" +"2716729344","2716794879","CL" +"2716794880","2717253631","US" +"2717253632","2717319167","TH" +"2717319168","2717384703","US" +"2717384704","2717450239","JP" +"2717450240","2717646847","US" +"2717646848","2717712383","KW" +"2717712384","2717843455","US" +"2717908992","2718629887","US" +"2718629888","2718695423","GB" +"2718695424","2718760959","US" +"2718760960","2718826495","GB" +"2718826496","2719023103","US" +"2719088640","2719125247","US" +"2719125248","2719125503","EU" +"2719125504","2719285247","US" +"2719285248","2719350783","CH" +"2719350784","2719416319","US" +"2719416320","2719481855","CH" +"2719481856","2719547391","US" +"2719547392","2719612927","AT" +"2719612928","2719678463","CH" +"2719678464","2720399359","US" +"2720399360","2720464895","FR" +"2720464896","2721382399","US" +"2721382400","2721447935","CA" +"2721447936","2722627583","US" +"2722693120","2722758655","CA" +"2722758656","2723479551","US" +"2723479552","2723545087","CA" +"2723545088","2723610623","CH" +"2723610624","2723832575","US" +"2723832576","2723832831","GB" +"2723832832","2724724735","US" +"2724790272","2724855807","CN" +"2724855808","2724921343","CA" +"2724921344","2725249023","US" +"2725249024","2725314559","NZ" +"2725314560","2725543423","US" +"2725543424","2725543679","EU" +"2725543680","2725904383","US" +"2725904384","2725969919","VE" +"2725969920","2727018495","US" +"2727018496","2727084031","CA" +"2727084032","2727346175","US" +"2727346176","2727608319","AU" +"2727608320","2727870463","US" +"2728394752","2730491903","US" +"2734686208","2734751743","CN" +"2734751744","2734817279","GB" +"2734817280","2734882815","US" +"2734882816","2734948351","SE" +"2734948352","2735013887","US" +"2735013888","2735079423","FR" +"2735079424","2735144959","US" +"2735144960","2735210495","NZ" +"2735210496","2735276031","AU" +"2735276032","2735341567","FR" +"2735341568","2735407103","AR" +"2735407104","2735538175","US" +"2735538176","2736848895","TW" +"2736848896","2736914431","US" +"2736914432","2736979967","NO" +"2736979968","2737438719","US" +"2737438720","2738749439","JP" +"2738749440","2742353919","FR" +"2742353920","2742419455","ES" +"2742419456","2742484991","US" +"2742484992","2742550527","GB" +"2742550528","2742616063","US" +"2742616064","2742681599","EG" +"2742681600","2742747135","IN" +"2742747136","2742779903","CA" +"2742812672","2742878207","US" +"2742878208","2742943743","CN" +"2742943744","2743009279","US" +"2743140352","2743205887","US" +"2743205888","2743992319","JP" +"2743992320","2744057855","CN" +"2744057856","2744516607","JP" +"2744516608","2744647679","US" +"2744647680","2744713215","KR" +"2744713216","2744844287","US" +"2744844288","2744909823","CA" +"2744909824","2744975359","GB" +"2744975360","2745040383","SE" +"2745040384","2745040639","EU" +"2745040640","2745040895","SE" +"2745040896","2745106431","DE" +"2745106432","2745171967","SI" +"2745171968","2745237503","GB" +"2745237504","2745303039","CH" +"2745303040","2745368575","IT" +"2745368576","2745434111","BE" +"2745434112","2745499647","GB" +"2745499648","2745548799","BE" +"2745548800","2745565183","DE" +"2745565184","2745696255","GB" +"2745696256","2745761791","CH" +"2745761792","2746023935","GB" +"2746023936","2746089471","FR" +"2746089472","2746155007","NO" +"2746155008","2746220543","NL" +"2746220544","2746286079","US" +"2746286080","2746351615","CN" +"2746351616","2746417151","CR" +"2746417152","2746482687","CN" +"2746482688","2746548223","KR" +"2746548224","2747072511","US" +"2747072512","2747138047","AU" +"2747138048","2747465727","US" +"2747465728","2748055551","ZA" +"2748055552","2748121087","CN" +"2748121088","2748317695","US" +"2748317696","2748645375","JP" +"2748645376","2748710911","KR" +"2748710912","2749235199","JP" +"2749235200","2749300735","KR" +"2749300736","2749628415","JP" +"2749628416","2749693951","US" +"2749693952","2749759487","KR" +"2749759488","2749890559","US" +"2749890560","2750021631","AU" +"2750021632","2750349311","US" +"2750349312","2750414847","KR" +"2750414848","2750692863","US" +"2750692864","2750693375","EU" +"2750693376","2750873599","US" +"2750873600","2750939135","CL" +"2750939136","2751070207","US" +"2751070208","2751135743","CL" +"2751135744","2751397887","US" +"2751397888","2751463423","KR" +"2751463424","2751528959","KZ" +"2751528960","2751660031","FR" +"2751660032","2751716351","AT" +"2751716352","2751716607","US" +"2751716608","2751725567","AT" +"2751725568","2751791103","SE" +"2751791104","2751856639","FI" +"2751856640","2751922175","GB" +"2751922176","2751987711","FR" +"2751987712","2752053247","SI" +"2752053248","2752184319","SE" +"2752184320","2752315391","GB" +"2752315392","2752380927","FI" +"2752380928","2752446463","CH" +"2752446464","2752511999","BE" +"2752512000","2753757183","DE" +"2753757184","2753822719","BE" +"2753822720","2753888255","GB" +"2753888256","2753953791","SE" +"2753953792","2754084863","GB" +"2754084864","2754117631","KZ" +"2754117632","2754125823","NL" +"2754125824","2754127871","DE" +"2754127872","2754129919","SK" +"2754129920","2754131967","SE" +"2754131968","2754134015","PL" +"2754134016","2754138111","DE" +"2754138112","2754142207","GB" +"2754142208","2754144255","BA" +"2754144256","2754146303","DE" +"2754146304","2754148351","PL" +"2754148352","2754150399","MK" +"2754150400","2754215935","BR" +"2754215936","2754281471","PR" +"2754281472","2754347007","JP" +"2754347008","2754478079","US" +"2754478080","2754543615","JP" +"2754543616","2754609151","US" +"2754609152","2754674687","SE" +"2754674688","2754936831","US" +"2754936832","2755002367","AU" +"2755002368","2755330047","US" +"2755330048","2755395583","DE" +"2755395584","2755461119","FR" +"2755461120","2755514879","DE" +"2755514880","2755515135","EU" +"2755515136","2755526655","DE" +"2755526656","2755592191","US" +"2755592192","2755657727","GB" +"2755657728","2755985407","US" +"2755985408","2756182015","JP" +"2756182016","2756247551","US" +"2756247552","2756313087","UY" +"2756313088","2756378623","US" +"2756378624","2756444159","AU" +"2756444160","2756509695","US" +"2756509696","2756575231","CL" +"2756575232","2756640767","SG" +"2756640768","2756706303","US" +"2756706304","2756771839","AU" +"2756771840","2756837375","FR" +"2756837376","2757033983","US" +"2757033984","2757099519","BR" +"2757099520","2757230591","US" +"2757230592","2757296127","ZA" +"2757296128","2757754879","US" +"2757754880","2757820415","CL" +"2757820416","2757885951","AU" +"2757885952","2757951487","CL" +"2757951488","2758017023","US" +"2758017024","2758082559","IN" +"2758082560","2758148095","US" +"2758148096","2758213631","CA" +"2758213632","2758541311","US" +"2758541312","2758606847","AU" +"2758606848","2758803455","US" +"2758803456","2758868991","AU" +"2758868992","2759000063","US" +"2759000064","2759065599","TH" +"2759065600","2759589887","US" +"2759589888","2759720959","KR" +"2759720960","2759852031","PL" +"2759852032","2759883439","CH" +"2759883440","2759883443","LI" +"2759883444","2759883451","CH" +"2759883452","2759883455","LI" +"2759883456","2759884111","CH" +"2759884112","2759884115","GB" +"2759884116","2759894559","CH" +"2759894560","2759894563","LI" +"2759894564","2759917567","CH" +"2759917568","2759917823","FR" +"2759917824","2759918079","EU" +"2759918080","2759983103","FR" +"2759983104","2760048639","IT" +"2760048640","2760114175","FR" +"2760114176","2760179711","IT" +"2760179712","2760245247","DE" +"2760245248","2760310783","GB" +"2760310784","2760376319","SE" +"2760376320","2760507391","GB" +"2760507392","2760511487","RU" +"2760511488","2760513535","IR" +"2760513536","2760515583","NL" +"2760515584","2760517631","RU" +"2760517632","2760519679","KZ" +"2760519680","2760521727","IT" +"2760521728","2760523775","FR" +"2760523776","2760527871","CH" +"2760527872","2760529919","GB" +"2760529920","2760531967","RU" +"2760531968","2760534015","IR" +"2760534016","2760536063","BE" +"2760536064","2760540159","IL" +"2760540160","2760556543","RO" +"2760556544","2760558591","DE" +"2760558592","2760562687","ES" +"2760562688","2760564735","BG" +"2760564736","2760566783","GB" +"2760566784","2760568831","IQ" +"2760568832","2760570879","FR" +"2760570880","2760572927","NL" +"2760572928","2760638463","DE" +"2760638464","2760703999","NL" +"2760704000","2760769535","FI" +"2760769536","2760835071","IT" +"2760835072","2760898559","GB" +"2760898560","2760899583","US" +"2760899584","2760900607","GB" +"2760900608","2760932096","US" +"2760932097","2760932097","EU" +"2760932098","2761031679","US" +"2761031680","2761424895","ZA" +"2761424896","2761621503","US" +"2761621504","2761687039","ZA" +"2761687040","2761949183","US" +"2761949184","2762211327","JP" +"2762211328","2762276863","IN" +"2762276864","2762342399","US" +"2762342400","2762407935","CA" +"2762407936","2763063295","US" +"2763063296","2763096063","FR" +"2763096064","2763104255","GB" +"2763104256","2763108351","DE" +"2763108352","2763110399","RU" +"2763110400","2763112447","NL" +"2763112448","2763128831","BY" +"2763128832","2763194367","CA" +"2763194368","2765553663","US" +"2765553664","2765561855","CY" +"2765561856","2765562031","FI" +"2765562032","2765562047","SE" +"2765562048","2765562367","FI" +"2765562368","2765562383","RU" +"2765562384","2765563903","FI" +"2765563904","2765565951","IR" +"2765565952","2765567999","RU" +"2765568000","2765570047","IR" +"2765570048","2765578239","RU" +"2765578240","2765580287","AZ" +"2765580288","2765582335","GB" +"2765582336","2765586431","CZ" +"2765586432","2765619199","IR" +"2765619200","2768240639","US" +"2768306176","2768437247","US" +"2768437248","2768633855","ZA" +"2768633856","2768764927","US" +"2768764928","2769027071","ZA" +"2769027072","2769092607","AU" +"2769092608","2769158143","US" +"2769158144","2769223679","JP" +"2769485824","2769616895","US" +"2769616896","2769682431","SG" +"2769682432","2769747967","US" +"2769747968","2769813503","CA" +"2769813504","2769879039","US" +"2769879040","2769944575","ZA" +"2769944576","2770272255","US" +"2770272256","2770337791","AU" +"2770337792","2772631551","US" +"2772631552","2772697087","AU" +"2772697088","2772762623","US" +"2772762624","2772828159","AU" +"2772828160","2773010431","US" +"2773010432","2773010687","EU" +"2773010688","2773024767","US" +"2773090304","2773221375","US" +"2773221376","2773286911","JP" +"2773286912","2773352447","US" +"2773352448","2773417983","CA" +"2773417984","2773745663","US" +"2773745664","2773811199","NZ" +"2773811200","2773876735","US" +"2773876736","2773942271","AU" +"2773942272","2774335487","US" +"2774335488","2774401023","JP" +"2774401024","2774532095","US" +"2774532096","2774597631","JP" +"2774597632","2774663167","US" +"2774663168","2774728703","NI" +"2774728704","2774990847","JP" +"2774990848","2775318527","US" +"2775318528","2775384063","JP" +"2775384064","2775711743","US" +"2775711744","2775777279","NL" +"2775777280","2775842815","CA" +"2775842816","2775973887","US" +"2775973888","2776039423","AU" +"2776039424","2776478207","US" +"2776478208","2776478463","EU" +"2776478464","2776697614","US" +"2776697615","2776697615","EU" +"2776697616","2776891391","US" +"2776891392","2777022463","KR" +"2777022464","2777481215","US" +"2777481216","2777546751","KR" +"2777546752","2777612287","AU" +"2777612288","2778071039","ZA" +"2778071040","2778333183","US" +"2778333184","2778398719","CA" +"2778398720","2779054079","US" +"2779054080","2779070463","SZ" +"2779070464","2779119615","ZA" +"2779119616","2779906047","US" +"2779906048","2779971583","CA" +"2779971584","2780037119","US" +"2780037120","2780102655","ZA" +"2780102656","2780168191","US" +"2780168192","2780299263","CL" +"2780299264","2780364799","US" +"2780364800","2780430335","CA" +"2780430336","2780495871","KR" +"2780495872","2780561407","AU" +"2780561408","2780758015","US" +"2780758016","2780823551","AU" +"2780823552","2780904159","US" +"2780904160","2780904191","CA" +"2780904192","2780909887","US" +"2780909888","2780909903","CA" +"2780909904","2780921359","US" +"2780921360","2780921367","GB" +"2780921368","2780925951","US" +"2780925952","2780926207","GB" +"2780926208","2780926271","US" +"2780926272","2780926303","FR" +"2780926304","2780926319","IT" +"2780926320","2780926327","GB" +"2780926328","2780926335","US" +"2780926336","2780926367","GB" +"2780926368","2780926823","US" +"2780926824","2780926879","GB" +"2780926880","2780926975","US" +"2780926976","2780927487","GB" +"2780927488","2780927743","US" +"2780927744","2780928127","GB" +"2780928128","2780928287","US" +"2780928288","2780928303","GB" +"2780928304","2780928383","US" +"2780928384","2780928415","GB" +"2780928416","2780928447","US" +"2780928448","2780928455","GB" +"2780928456","2780928463","US" +"2780928464","2780928471","DE" +"2780928472","2780929023","US" +"2780929024","2780929279","GB" +"2780929280","2780929791","FR" +"2780929792","2780930047","US" +"2780930048","2780930559","GB" +"2780930560","2780930879","US" +"2780930880","2780930927","GB" +"2780930928","2780930943","US" +"2780930944","2780930959","GB" +"2780930960","2780930975","FR" +"2780930976","2780931007","US" +"2780931008","2780931039","GB" +"2780931040","2780931071","US" +"2780931072","2780932335","GB" +"2780932336","2780932607","US" +"2780932608","2780933119","GB" +"2780933120","2780933151","US" +"2780933152","2780933191","GB" +"2780933192","2780933247","US" +"2780933248","2780933631","GB" +"2780933632","2780933887","US" +"2780933888","2780934143","GB" +"2780934144","2780934167","PL" +"2780934168","2780940367","US" +"2780940368","2780940383","CA" +"2780940384","2780941055","US" +"2780941056","2780941087","GB" +"2780941088","2780941719","US" +"2780941720","2780941727","GB" +"2780941728","2780943575","US" +"2780943576","2780943583","BM" +"2780943584","2780945311","US" +"2780945312","2780945375","BM" +"2780945376","2780945663","US" +"2780945664","2780945695","BM" +"2780945696","2780946127","US" +"2780946128","2780946135","CA" +"2780946136","2780947903","US" +"2780947904","2780947967","MY" +"2780947968","2780948815","US" +"2780948816","2780948823","MY" +"2780948824","2780952967","US" +"2780952968","2780952975","GB" +"2780952976","2780954623","US" +"2780954624","2781020159","KR" +"2781020160","2781478911","US" +"2781478912","2781544447","HK" +"2781544448","2781629951","US" +"2781629952","2781630207","EU" +"2781630208","2781675519","US" +"2781675520","2781741055","NZ" +"2781741056","2781937663","US" +"2781937664","2782003199","TH" +"2782134272","2782199807","US" +"2782199808","2782265343","KR" +"2782265344","2782372863","US" +"2782372864","2782373887","GB" +"2782373888","2782658559","US" +"2782658560","2782724095","PH" +"2782724096","2782789631","US" +"2782789632","2782855167","CH" +"2782855168","2783182847","US" +"2783182848","2783248383","AU" +"2783248384","2783313919","KR" +"2783313920","2783379455","US" +"2783379456","2783444991","ZA" +"2783444992","2783510527","US" +"2783510528","2783576063","ZA" +"2783576064","2783969279","US" +"2783969280","2784034815","AU" +"2784034816","2784165887","JP" +"2784165888","2784296959","KR" +"2784296960","2784362495","US" +"2784362496","2784428031","KR" +"2784428032","2785542143","US" +"2785542144","2786066431","CH" +"2786066432","2788163583","US" +"2788229120","2788229935","US" +"2788229936","2788229943","GB" +"2788229944","2788230663","US" +"2788230664","2788230679","GB" +"2788230680","2788230703","US" +"2788230704","2788230719","GB" +"2788230720","2788230727","CH" +"2788230728","2788230735","GB" +"2788230736","2788231751","US" +"2788231752","2788231759","SG" +"2788231760","2788232583","US" +"2788232584","2788232591","SG" +"2788232592","2788232599","US" +"2788232600","2788232607","SG" +"2788232608","2788233263","US" +"2788233264","2788233271","GB" +"2788233272","2788234279","US" +"2788234280","2788234287","CA" +"2788234288","2788234767","US" +"2788234768","2788234775","GB" +"2788234776","2788235295","US" +"2788235296","2788235311","SG" +"2788235312","2788238847","US" +"2788238848","2788238855","GB" +"2788238856","2788238911","US" +"2788238912","2788238919","GB" +"2788238920","2788241447","US" +"2788241448","2788241455","GB" +"2788241456","2788243471","US" +"2788243472","2788243487","SG" +"2788243488","2788245007","US" +"2788245008","2788245023","CA" +"2788245024","2788247863","US" +"2788247864","2788247871","GB" +"2788247872","2788253183","US" +"2788253184","2788253191","JP" +"2788253192","2788261887","US" +"2788261888","2788294655","GB" +"2788294656","2789212159","US" +"2789212160","2789277695","AU" +"2789277696","2789343231","NZ" +"2789343232","2789933055","US" +"2789933056","2789998591","CL" +"2789998592","2790129663","US" +"2790195200","2790260735","KR" +"2790260736","2790326271","US" +"2790391808","2790410495","US" +"2790410496","2790410751","AQ" +"2790410752","2790457343","US" +"2790457344","2790522879","NZ" +"2790522880","2790588415","US" +"2790588416","2790653951","ZA" +"2790653952","2790719487","US" +"2790719488","2790785023","SA" +"2790785024","2791571455","US" +"2791571456","2791636991","JP" +"2791636992","2791768063","US" +"2791768064","2791899135","KR" +"2791899136","2791964671","US" +"2792030208","2792226815","US" +"2792226816","2792292351","CL" +"2792292352","2792357887","CN" +"2792357888","2792488959","US" +"2792488960","2792554495","BO" +"2792554496","2792751103","US" +"2792751104","2792882175","JP" +"2792882176","2792947711","AU" +"2792947712","2793013247","SG" +"2793013248","2793209855","US" +"2793209856","2793275391","KR" +"2793275392","2796748799","US" +"2796748800","2796814335","NZ" +"2796814336","2798838015","US" +"2798838016","2798838271","CO" +"2798838272","2802515967","US" +"2802515968","2802581503","CA" +"2802581504","2802909183","US" +"2802909184","2802974719","CA" +"2802974720","2803630079","US" +"2803630080","2803695615","CL" +"2803695616","2803761151","US" +"2803761152","2803826687","AU" +"2803826688","2803892223","US" +"2803892224","2805989375","CA" +"2805989376","2806644735","US" +"2806644736","2806710271","CA" +"2806710272","2807103487","US" +"2807103488","2807169023","NL" +"2807169024","2807236863","US" +"2807236864","2807237119","EU" +"2807237120","2807259647","US" +"2807259648","2807260159","AP" +"2807260160","2807824383","US" +"2807824384","2807889919","CA" +"2807889920","2808545279","US" +"2808545280","2808610815","AU" +"2808610816","2808872959","US" +"2808938496","2809069567","US" +"2809069568","2809135103","SA" +"2809135104","2809855999","US" +"2809856000","2809921535","AU" +"2809921536","2809987071","US" +"2809987072","2810052607","CA" +"2810052608","2810249215","US" +"2810249216","2810314751","CA" +"2810314752","2810380287","AU" +"2810380288","2810576895","US" +"2810576896","2810642431","VE" +"2810642432","2810904575","US" +"2810904576","2810970111","CN" +"2810970112","2811559935","US" +"2811559936","2811625471","CH" +"2811625472","2812084223","US" +"2812084224","2812149759","BO" +"2812149760","2812411903","US" +"2812411904","2812477439","AU" +"2812477440","2812753919","US" +"2812753920","2812755967","BR" +"2812755968","2812764159","US" +"2812764160","2812766207","GB" +"2812766208","2812774399","US" +"2812774400","2812776447","GB" +"2812776448","2812778495","DE" +"2812778496","2812779519","IT" +"2812779520","2812780543","FR" +"2812780544","2812781567","DK" +"2812781568","2812796927","US" +"2812796928","2812798975","AU" +"2812798976","2812801023","JP" +"2812801024","2812803071","US" +"2812803072","2812805119","SG" +"2812805120","2812870655","CH" +"2812870656","2812936191","JP" +"2812936192","2813067263","US" +"2813067264","2813120512","GB" +"2813120513","2813120513","US" +"2813120514","2813132799","GB" +"2813132800","2813263871","US" +"2813263872","2813329407","JP" +"2813329408","2813526015","US" +"2813526016","2813591551","NZ" +"2813591552","2814181375","US" +"2814181376","2814246911","AU" +"2814246912","2814377215","US" +"2814377216","2814377471","EU" +"2814377472","2815033343","US" +"2815033344","2815098879","NL" +"2815098880","2815111347","GB" +"2815111348","2815111348","US" +"2815111349","2815139327","GB" +"2815139328","2815139583","US" +"2815139584","2815164415","GB" +"2815164416","2815229951","US" +"2815229952","2815295487","ID" +"2815295488","2815986687","US" +"2815986688","2815986815","GB" +"2815986816","2815986831","US" +"2815986832","2815987215","GB" +"2815987216","2815987231","US" +"2815987232","2815987271","GB" +"2815987272","2815987327","US" +"2815987328","2815987391","GB" +"2815987392","2815987711","US" +"2815987712","2815988351","FR" +"2815988352","2815988383","GB" +"2815988384","2815988479","US" +"2815988480","2815988543","GB" +"2815988544","2816001151","US" +"2816001152","2816001183","DE" +"2816001184","2816004703","US" +"2816004704","2816004711","GB" +"2816004712","2816008191","US" +"2816008192","2816008207","IE" +"2816008208","2816159743","US" +"2816159744","2816159999","IN" +"2816160000","2816671743","US" +"2816671744","2816737279","CA" +"2816737280","2817059071","US" +"2817059072","2817059327","AP" +"2817059328","2817060863","US" +"2817060864","2817061119","EU" +"2817061120","2817062911","LU" +"2817062912","2817325055","US" +"2817325056","2817325311","EU" +"2817325312","2817933056","US" +"2817933057","2817933058","CA" +"2817933059","2817986303","US" +"2817986304","2817986559","AP" +"2817986560","2818038537","US" +"2818038538","2818038538","AP" +"2818038539","2818310143","US" +"2818310144","2818375679","AR" +"2818375680","2818572287","US" +"2818637824","2818703359","CH" +"2818703360","2823159807","US" +"2823159808","2823225343","HK" +"2823225344","2823553023","US" +"2823553024","2823618559","ZA" +"2823618560","2823684095","PA" +"2823684096","2823749631","KR" +"2823749632","2823815167","JP" +"2823815168","2823946239","ZA" +"2823946240","2824011775","US" +"2824011776","2824077311","AR" +"2824077312","2824404991","US" +"2824404992","2824470527","ZA" +"2824536064","2824798207","US" +"2824798208","2824863743","TW" +"2824863744","2824929279","AR" +"2824929280","2825191423","US" +"2825191424","2825256959","AR" +"2825256960","2825519103","US" +"2825519104","2825584639","HK" +"2825584640","2826108927","US" +"2826108928","2826174463","KR" +"2826174464","2826436607","US" +"2826436608","2826502143","TH" +"2826567680","2826633215","US" +"2826633216","2826698751","GU" +"2826698752","2826829823","US" +"2826829824","2826895359","KR" +"2826895360","2826960895","US" +"2826960896","2827026431","ZA" +"2827026432","2827091967","US" +"2827091968","2827157503","AU" +"2827157504","2827223039","KR" +"2827223040","2827288575","AU" +"2827288576","2827354111","US" +"2827354112","2827419647","AU" +"2827419648","2827681791","US" +"2827681792","2827747327","TR" +"2827747328","2827812863","AU" +"2827812864","2827878399","US" +"2827878400","2827943935","ZA" +"2827943936","2827972607","US" +"2827972608","2827973631","A1" +"2827973632","2827974015","US" +"2827974016","2827974143","A1" +"2827974144","2827974655","US" +"2827974656","2827974783","A1" +"2827974784","2827975487","US" +"2827975488","2827975551","A1" +"2827975552","2827991471","US" +"2827991472","2827991487","A1" +"2827991488","2827991503","US" +"2827991504","2827991519","A1" +"2827991520","2828009471","US" +"2828009472","2828075007","CA" +"2828075008","2828533759","US" +"2828533760","2828664831","AU" +"2828664832","2828730367","KR" +"2828730368","2828795903","ZA" +"2828795904","2829058047","US" +"2829058048","2829123583","CN" +"2829123584","2829148159","US" +"2829148160","2829148415","HK" +"2829148416","2829174783","US" +"2829174784","2829175807","GB" +"2829175808","2829176319","US" +"2829176320","2829176831","DE" +"2829176832","2829177343","JP" +"2829177344","2829177855","AU" +"2829177856","2829178367","HK" +"2829178368","2829178879","US" +"2829178880","2829179391","MX" +"2829179392","2829179903","BR" +"2829179904","2829180927","IN" +"2829180928","2829181951","CN" +"2829181952","2829182463","US" +"2829182464","2829182975","VE" +"2829182976","2829254655","US" +"2829254656","2829320191","CH" +"2829320192","2829385727","ZA" +"2829385728","2829451263","MX" +"2829451264","2829516799","US" +"2829516800","2829582335","BW" +"2829582336","2829591033","US" +"2829591034","2829591034","EU" +"2829591035","2829593343","US" +"2829593344","2829593599","EU" +"2829593600","2829844479","US" +"2829844480","2829910015","ZA" +"2829910016","2830066431","US" +"2830066432","2830066687","HK" +"2830066688","2830106623","US" +"2830106624","2830172159","CO" +"2830172160","2830434303","US" +"2830499840","2830586879","US" +"2830586880","2830587135","EU" +"2830587136","2830761983","US" +"2830761984","2830827519","AU" +"2830827520","2830830335","KW" +"2830830336","2830830591","US" +"2830830592","2830853887","KW" +"2830853888","2830854143","US" +"2830854144","2830855935","KW" +"2830855936","2830856191","US" +"2830856192","2830893055","KW" +"2830893056","2830958591","KR" +"2830958592","2831286271","US" +"2831548416","2831613951","AU" +"2831613952","2831810559","US" +"2831810560","2831876095","IT" +"2831876096","2832007167","US" +"2832072704","2832138239","ZA" +"2832138240","2832269311","US" +"2832269312","2832400383","ZA" +"2832465920","2832793599","US" +"2832793600","2832859135","AU" +"2832859136","2832924671","US" +"2832924672","2832990207","KR" +"2832990208","2833252621","US" +"2833252622","2833252622","GB" +"2833252623","2833293311","US" +"2833293312","2833293567","EU" +"2833293568","2833383423","US" +"2833383424","2833448959","AR" +"2833580032","2833707007","US" +"2833707008","2833707263","GB" +"2833707264","2833711103","US" +"2833711104","2833776639","CL" +"2833842176","2833907711","US" +"2833907712","2833973247","GT" +"2833973248","2833989631","US" +"2834038784","2834497535","US" +"2834497536","2834563071","SV" +"2834563072","2834825215","US" +"2834825216","2834956287","KR" +"2834956288","2835087359","US" +"2835087360","2835152895","AU" +"2835218432","2835283967","US" +"2835283968","2835349503","MX" +"2835349504","2837446655","US" +"2837446656","2839543807","CH" +"2839543808","2840015359","US" +"2840015360","2840015615","GB" +"2840015616","2843803647","US" +"2843803648","2843869183","ZA" +"2843869184","2844524543","US" +"2844524544","2844590079","KR" +"2844590080","2844783359","US" +"2844783360","2844783615","AU" +"2844783616","2844784639","DE" +"2844784640","2844902655","US" +"2844902656","2844902911","SG" +"2844902912","2844912639","US" +"2844912640","2844912895","JP" +"2844912896","2845704191","US" +"2845704192","2845755391","CU" +"2845755392","2845755647","EU" +"2845755648","2845769727","CU" +"2845835264","2848522239","US" +"2848522240","2848587775","AU" +"2848587776","2848653311","ZA" +"2848653312","2848980991","US" +"2848980992","2849964031","KR" +"2849964032","2850029567","HK" +"2850029568","2851995647","US" +"2852126720","2852716653","US" +"2852716654","2852716654","AU" +"2852716655","2853306367","US" +"2853306368","2853371903","CL" +"2853371904","2853765119","US" +"2853765120","2853830655","MX" +"2853830656","2854617087","US" +"2854617088","2854682623","MY" +"2854748160","2855469055","US" +"2855469056","2855481343","PY" +"2855481344","2855485439","AR" +"2855485440","2855501823","UY" +"2855501824","2855534591","AR" +"2855534592","2855706623","US" +"2855706624","2855706879","EU" +"2855706880","2856058879","US" +"2856058880","2856124415","CH" +"2856124416","2856452095","US" +"2856452096","2856517631","BR" +"2856517632","2856714239","US" +"2856714240","2856779775","MX" +"2856779776","2857369599","US" +"2857697280","2857766655","US" +"2857766656","2857766911","EU" +"2857766912","2859007999","US" +"2859008000","2859073535","JP" +"2859073536","2861850623","US" +"2861850624","2861850879","AP" +"2861850880","2861851391","HK" +"2861851392","2861851647","AP" +"2861851648","2861861375","HK" +"2861861376","2861957119","US" +"2862022656","2862284799","US" +"2862284800","2862350335","AR" +"2862350336","2862415871","US" +"2862415872","2862481407","AU" +"2862481408","2862751999","US" +"2862752000","2862752255","EU" +"2862752256","2863202303","US" +"2863202304","2863267839","MX" +"2863267840","2863595519","US" +"2863595520","2863661055","CA" +"2863661056","2863857663","US" +"2863857664","2863923199","SG" +"2863923200","2864844799","US" +"2864844800","2864845055","NL" +"2864845056","2864848895","US" +"2864848896","2864849151","GB" +"2864849152","2865417457","US" +"2865417458","2865417458","GB" +"2865417459","2865577983","US" +"2865577984","2865610751","BE" +"2865610752","2865889279","US" +"2865889280","2865954815","AR" +"2865954816","2867593215","US" +"2867593216","2867639295","CH" +"2867639296","2867639551","AT" +"2867639552","2867724287","CH" +"2867855360","2868117503","US" +"2868379648","2868605376","US" +"2868605377","2868605377","NO" +"2868605378","2868658175","US" +"2868658176","2868658431","GB" +"2868658432","2868660223","US" +"2868660224","2868660479","EU" +"2868660480","2868662271","US" +"2868662272","2868662527","EU" +"2868662528","2868676608","US" +"2868676609","2868676609","AU" +"2868676610","2868682752","US" +"2868682753","2868682753","AP" +"2868682754","2868772863","US" +"2868838400","2868903935","BE" +"2868903936","2869035007","SG" +"2869035008","2869166079","JP" +"2869166080","2869428223","TH" +"2869428224","2869952511","CN" +"2869952512","2870018047","FR" +"2870018048","2870083583","DE" +"2870083584","2870087935","FR" +"2870087936","2870088191","ES" +"2870088192","2870088959","FR" +"2870088960","2870088991","ES" +"2870088992","2870089727","FR" +"2870089728","2870091775","DE" +"2870091776","2870095871","FR" +"2870095872","2870096383","SG" +"2870096384","2870149119","FR" +"2870149120","2870214655","HU" +"2870214656","2870280191","DK" +"2870280192","2870345727","NL" +"2870345728","2870411263","GB" +"2870411264","2870476799","NO" +"2870476800","2870542335","DE" +"2870542336","2870575103","CH" +"2870575104","2870583295","SE" +"2870583296","2870584319","NO" +"2870584320","2870585343","RU" +"2870585344","2870587391","UA" +"2870587392","2870587647","CZ" +"2870587648","2870587903","RU" +"2870587904","2870588159","DE" +"2870588160","2870588415","NL" +"2870588416","2870588927","HU" +"2870588928","2870589439","PL" +"2870589440","2870590975","RU" +"2870590976","2870591231","LV" +"2870591232","2870591487","IT" +"2870591488","2870591743","PL" +"2870591744","2870591999","SE" +"2870592000","2870592511","RU" +"2870592512","2870593535","PL" +"2870593536","2870594047","GB" +"2870594048","2870594559","RU" +"2870594560","2870595583","UA" +"2870595584","2870596607","FR" +"2870596608","2870597631","RU" +"2870597632","2870597887","PL" +"2870597888","2870598143","BE" +"2870598144","2870598655","LV" +"2870598656","2870599423","CZ" +"2870599424","2870599679","RO" +"2870599680","2870599935","KW" +"2870599936","2870600191","DE" +"2870600192","2870600703","PL" +"2870600704","2870600959","DK" +"2870600960","2870601215","BE" +"2870601216","2870601727","PL" +"2870601728","2870602751","RU" +"2870602752","2870604287","UA" +"2870604288","2870607871","RU" +"2870607872","2870673407","BE" +"2870673408","2870738943","CH" +"2870738944","2870935551","GB" +"2870935552","2871001087","HU" +"2871001088","2871066623","SE" +"2871066624","2871083007","CH" +"2871083008","2871099391","RO" +"2871132160","2872049663","CN" +"2872049664","2873098239","IN" +"2873098240","2873884671","US" +"2873884672","2874146815","IN" +"2874146816","2875195391","CN" +"2875195392","2875719679","TH" +"2875719680","2877292543","CN" +"2877292544","2879336447","US" +"2879336448","2879336959","GB" +"2879336960","2879467519","US" +"2879467520","2879468031","AP" +"2879468032","2879469567","US" +"2879469568","2879470079","AP" +"2879470080","2882469887","US" +"2882469888","2882535423","SG" +"2882535424","2883583999","CN" +"2883584000","2885681151","VN" +"2894069760","2894921727","US" +"2894921728","2895118335","GB" +"2895118336","2895301887","US" +"2895301888","2895302143","AR" +"2895302144","2895642623","US" +"2895642624","2895708159","FR" +"2895708160","2896035839","US" +"2896035840","2896101375","DE" +"2896101376","2896166911","GB" +"2896166912","2897018879","US" +"2897018880","2897149951","DE" +"2897149952","2897215487","US" +"2897215488","2897739775","DE" +"2897739776","2898001919","FR" +"2898001920","2898132991","GB" +"2898132992","2898788351","US" +"2898788352","2899050495","GB" +"2899050496","2899116031","FR" +"2899116032","2899148799","VN" +"2899148800","2899181567","AU" +"2899181568","2899312639","GB" +"2899312640","2899378175","FR" +"2899378176","2899443711","GB" +"2899443712","2899574783","FR" +"2899574784","2899902463","GB" +"2899902464","2899967999","US" +"2899968000","2900099071","CA" +"2900099072","2900361215","US" +"2902458368","2902462463","A1" +"2902462464","2902470775","US" +"2902470776","2902470777","BD" +"2902470778","2902470936","US" +"2902470937","2902470938","LK" +"2902470939","2902470986","US" +"2902470987","2902470989","BD" +"2902470990","2902472018","US" +"2902472019","2902472021","AL" +"2902472022","2902472725","US" +"2902472726","2902472728","BD" +"2902472729","2902472788","US" +"2902472789","2902472790","LK" +"2902472791","2902472813","US" +"2902472814","2902472814","LK" +"2902472815","2902472834","US" +"2902472835","2902472836","BD" +"2902472837","2902473028","US" +"2902473029","2902473031","IN" +"2902473032","2902473107","US" +"2902473108","2902473109","BD" +"2902473110","2902473556","US" +"2902473557","2902473558","LK" +"2902473559","2902473649","US" +"2902473650","2902473650","BD" +"2902473651","2902473652","US" +"2902473653","2902473653","BD" +"2902473654","2902474023","US" +"2902474024","2902474032","RU" +"2902474033","2902474062","US" +"2902474063","2902474073","RU" +"2902474074","2902475263","US" +"2902475264","2902475327","CY" +"2902475328","2902475399","US" +"2902475400","2902475407","UY" +"2902475408","2902492671","US" +"2902492672","2902493183","IN" +"2902493184","2902507519","US" +"2902507520","2902515711","CA" +"2902515712","2904555519","US" +"2904555520","2904817663","CA" +"2904817664","2905350729","US" +"2905350730","2905350730","A1" +"2905350731","2905376119","US" +"2905376120","2905376127","MX" +"2905376128","2905376207","US" +"2905376208","2905376223","GB" +"2905376224","2905376391","US" +"2905376392","2905376399","PK" +"2905376400","2905376415","US" +"2905376416","2905376423","AZ" +"2905376424","2905376431","TW" +"2905376432","2905376447","US" +"2905376448","2905376455","HK" +"2905376456","2905376463","PK" +"2905376464","2905376471","HK" +"2905376472","2905376511","US" +"2905376512","2905376575","HK" +"2905376576","2905376607","CN" +"2905376608","2905376615","CA" +"2905376616","2905376767","US" +"2905376768","2905377535","CA" +"2905377536","2905378495","US" +"2905378496","2905378559","GB" +"2905378560","2905378815","CA" +"2905378816","2905379071","US" +"2905379072","2905379327","CA" +"2905379328","2905380607","US" +"2905380608","2905380863","CA" +"2905380864","2905384959","US" +"2905384960","2905385215","CA" +"2905385216","2905385911","US" +"2905385912","2905385919","VN" +"2905385920","2905385927","US" +"2905385928","2905385935","HK" +"2905385936","2905385943","PK" +"2905385944","2905385951","CN" +"2905385952","2905385983","CR" +"2905385984","2905390879","US" +"2905390880","2905390895","GB" +"2905390896","2905390903","CN" +"2905390904","2905390911","PK" +"2905390912","2905391327","US" +"2905391328","2905391335","CR" +"2905391336","2905391599","US" +"2905391600","2905391615","GB" +"2905391616","2905394175","US" +"2905394176","2905394687","CA" +"2905394688","2905407743","US" +"2905407744","2905407999","TW" +"2905408000","2905415679","US" +"2905415680","2905415935","GB" +"2905415936","2905432975","US" +"2905432976","2905432983","AE" +"2905432984","2905446655","US" +"2905446656","2905446911","DE" +"2905446912","2905449983","US" +"2905449984","2905451007","CA" +"2905451008","2905451327","US" +"2905451328","2905451391","CY" +"2905451392","2905451519","US" +"2905451520","2905451647","PA" +"2905451648","2905473023","US" +"2905473024","2905481215","CA" +"2905481216","2913992703","US" +"2913992704","2914516991","CA" +"2914516992","2915250175","US" +"2915250176","2915254271","CA" +"2915254272","2915274751","US" +"2915274752","2915274815","PL" +"2915274816","2915275007","US" +"2915275008","2915275071","PL" +"2915275072","2915275263","US" +"2915275264","2915275327","PL" +"2915275328","2915497759","US" +"2915497760","2915499807","A1" +"2915499808","2915516415","US" +"2915516416","2915516671","NL" +"2915516672","2915516927","CA" +"2915516928","2915517439","US" +"2915517440","2915518463","DK" +"2915518464","2915520511","GB" +"2915520512","2915521023","AU" +"2915521024","2915521279","JP" +"2915521280","2915521535","PL" +"2915521536","2915526911","US" +"2915526912","2915527167","DE" +"2915527168","2915527679","US" +"2915527680","2915528715","NL" +"2915528716","2915528719","US" +"2915528720","2915528783","NL" +"2915528784","2915765279","US" +"2915765280","2915765287","IN" +"2915765288","2915765367","US" +"2915765368","2915765375","ZA" +"2915765376","2915765431","US" +"2915765432","2915765439","MX" +"2915765440","2915765471","US" +"2915765472","2915765479","CA" +"2915765480","2915765671","US" +"2915765672","2915765679","AU" +"2915765680","2915766079","US" +"2915766080","2915766095","BR" +"2915766096","2915766447","US" +"2915766448","2915766463","GB" +"2915766464","2915766559","US" +"2915766560","2915766591","GB" +"2915766592","2915766623","US" +"2915766624","2915766655","CA" +"2915766656","2915766839","US" +"2915766840","2915766847","DE" +"2915766848","2915767055","US" +"2915767056","2915767063","GB" +"2915767064","2915767407","US" +"2915767408","2915767415","GB" +"2915767416","2915767663","US" +"2915767664","2915767679","NZ" +"2915767680","2915767695","GB" +"2915767696","2915767743","US" +"2915767744","2915767775","GB" +"2915767776","2915767831","US" +"2915767832","2915767839","CA" +"2915767840","2915767895","US" +"2915767896","2915767903","KW" +"2915767904","2915768191","US" +"2915768192","2915768199","GB" +"2915768200","2915768303","US" +"2915768304","2915768311","MX" +"2915768312","2915768359","US" +"2915768360","2915768367","GB" +"2915768368","2915768375","US" +"2915768376","2915768383","GB" +"2915768384","2915768431","US" +"2915768432","2915768439","IE" +"2915768440","2915768703","US" +"2915768704","2915768767","GB" +"2915768768","2915768903","US" +"2915768904","2915768911","GR" +"2915768912","2915769095","US" +"2915769096","2915769103","BB" +"2915769104","2915769111","US" +"2915769112","2915769119","BB" +"2915769120","2915769239","US" +"2915769240","2915769247","CA" +"2915769248","2915769295","US" +"2915769296","2915769303","BR" +"2915769304","2915770167","US" +"2915770168","2915770175","BR" +"2915770176","2915770255","US" +"2915770256","2915770263","CA" +"2915770264","2915770279","JE" +"2915770280","2915770311","US" +"2915770312","2915770319","MX" +"2915770320","2915771103","US" +"2915771104","2915771135","CA" +"2915771136","2915772671","US" +"2915772672","2915772679","IN" +"2915772680","2915772711","US" +"2915772712","2915772719","GB" +"2915772720","2915772751","US" +"2915772752","2915772759","DE" +"2915772760","2915773015","US" +"2915773016","2915773023","SG" +"2915773024","2915773039","IN" +"2915773040","2915773175","US" +"2915773176","2915773183","KW" +"2915773184","2915773791","US" +"2915773792","2915773807","CA" +"2915773808","2915773839","JE" +"2915773840","2915794959","US" +"2915794960","2915794975","MX" +"2915794976","2915795007","US" +"2915795008","2915795013","BR" +"2915795014","2915795014","MX" +"2915795015","2915795023","BR" +"2915795024","2915795263","US" +"2915795264","2915795279","NZ" +"2915795280","2915795343","US" +"2915795344","2915795359","NZ" +"2915795360","2915795535","US" +"2915795536","2915795551","CA" +"2915795552","2915795727","US" +"2915795728","2915795743","CA" +"2915795744","2915795967","US" +"2915795968","2915795975","GB" +"2915795976","2915795983","US" +"2915795984","2915795991","AE" +"2915795992","2915796039","US" +"2915796040","2915796047","MX" +"2915796048","2915796055","US" +"2915796056","2915796063","MX" +"2915796064","2915796135","US" +"2915796136","2915796143","CA" +"2915796144","2915796151","US" +"2915796152","2915796159","AR" +"2915796160","2915796199","US" +"2915796200","2915796207","IL" +"2915796208","2915796303","US" +"2915796304","2915796311","MX" +"2915796312","2915796351","US" +"2915796352","2915796359","CA" +"2915796360","2915796399","US" +"2915796400","2915796407","PE" +"2915796408","2915796431","US" +"2915796432","2915796439","AU" +"2915796440","2915796495","US" +"2915796496","2915796503","IL" +"2915796504","2915796631","US" +"2915796632","2915796639","BR" +"2915796640","2915796647","US" +"2915796648","2915796655","AU" +"2915796656","2915796711","US" +"2915796712","2915796719","GB" +"2915796720","2915796815","US" +"2915796816","2915796823","CA" +"2915796824","2915796919","US" +"2915796920","2915796927","BR" +"2915796928","2915796967","US" +"2915796968","2915796975","BR" +"2915796976","2915797151","US" +"2915797152","2915797159","MX" +"2915797160","2915797447","US" +"2915797448","2915797455","CA" +"2915797456","2915797463","MX" +"2915797464","2915797543","US" +"2915797544","2915797551","CA" +"2915797552","2915797559","IN" +"2915797560","2915797727","US" +"2915797728","2915797735","IL" +"2915797736","2915797767","US" +"2915797768","2915797775","MX" +"2915797776","2915797871","US" +"2915797872","2915797879","IN" +"2915797880","2915797895","US" +"2915797896","2915797903","MX" +"2915797904","2915798079","US" +"2915798080","2915798111","IN" +"2915798112","2915798687","US" +"2915798688","2915798719","BR" +"2915798720","2915798943","US" +"2915798944","2915798975","PH" +"2915798976","2915799007","US" +"2915799008","2915799039","CA" +"2915799040","2915799047","US" +"2915799048","2915799055","ES" +"2915799056","2915799167","US" +"2915799168","2915799175","GB" +"2915799176","2915799183","US" +"2915799184","2915799191","GB" +"2915799192","2915799199","JE" +"2915799200","2915799215","US" +"2915799216","2915799223","MX" +"2915799224","2915799327","US" +"2915799328","2915799335","TH" +"2915799336","2915799431","US" +"2915799432","2915799439","TH" +"2915799440","2915799535","US" +"2915799536","2915799543","JP" +"2915799544","2915799591","US" +"2915799592","2915799599","IN" +"2915799600","2915799775","US" +"2915799776","2915799791","PR" +"2915799792","2915799807","CA" +"2915799808","2915799903","US" +"2915799904","2915799911","CA" +"2915799912","2915799935","US" +"2915799936","2915799943","AR" +"2915799944","2915800055","US" +"2915800056","2915800063","NZ" +"2915800064","2915800231","US" +"2915800232","2915800239","AU" +"2915800240","2915800271","US" +"2915800272","2915800279","AU" +"2915800280","2915800415","US" +"2915800416","2915800423","GB" +"2915800424","2915800519","US" +"2915800520","2915800527","PH" +"2915800528","2915800543","US" +"2915800544","2915800551","IN" +"2915800552","2915800631","US" +"2915800632","2915800639","TH" +"2915800640","2915800663","US" +"2915800664","2915800679","BG" +"2915800680","2915800711","US" +"2915800712","2915800719","CA" +"2915800720","2915800735","US" +"2915800736","2915800743","CA" +"2915800744","2915800751","US" +"2915800752","2915800759","CL" +"2915800760","2915800903","US" +"2915800904","2915800911","IL" +"2915800912","2915800951","US" +"2915800952","2915800959","GB" +"2915800960","2915801079","US" +"2915801080","2915801087","IL" +"2915801088","2915801679","US" +"2915801680","2915801687","MX" +"2915801688","2915801871","US" +"2915801872","2915801879","BR" +"2915801880","2915801991","US" +"2915801992","2915801999","IL" +"2915802000","2915802319","US" +"2915802320","2915802327","AW" +"2915802328","2915802351","US" +"2915802352","2915802359","AW" +"2915802360","2915802375","US" +"2915802376","2915802383","CA" +"2915802384","2915802415","US" +"2915802416","2915802423","CA" +"2915802424","2915802551","US" +"2915802552","2915802559","AU" +"2915802560","2915802711","US" +"2915802712","2915802719","ZA" +"2915802720","2915802895","US" +"2915802896","2915802903","PH" +"2915802904","2915802999","US" +"2915803000","2915803007","RU" +"2915803008","2915803191","US" +"2915803192","2915803199","CA" +"2915803200","2915803207","GB" +"2915803208","2915803239","US" +"2915803240","2915803247","BR" +"2915803248","2915803295","US" +"2915803296","2915803311","CA" +"2915803312","2915803327","ID" +"2915803328","2915803783","US" +"2915803784","2915803791","CN" +"2915803792","2915803815","US" +"2915803816","2915803823","PE" +"2915803824","2915804375","US" +"2915804376","2915804383","BR" +"2915804384","2915804519","US" +"2915804520","2915804527","CN" +"2915804528","2915804591","US" +"2915804592","2915804599","CA" +"2915804600","2915804679","US" +"2915804680","2915804687","CA" +"2915804688","2915804759","US" +"2915804760","2915804767","NZ" +"2915804768","2915804791","US" +"2915804792","2915804799","GB" +"2915804800","2915804807","US" +"2915804808","2915804815","NZ" +"2915804816","2915804847","US" +"2915804848","2915804855","CO" +"2915804856","2915805055","US" +"2915805056","2915805063","GB" +"2915805064","2915805375","US" +"2915805376","2915805391","PH" +"2915805392","2915805439","US" +"2915805440","2915805455","BR" +"2915805456","2915806735","US" +"2915806736","2915806751","IT" +"2915806752","2915806823","US" +"2915806824","2915806831","IN" +"2915806832","2915806863","US" +"2915806864","2915806871","IN" +"2915806872","2915806895","US" +"2915806896","2915806903","CA" +"2915806904","2915806967","US" +"2915806968","2915806975","CA" +"2915806976","2915807271","US" +"2915807272","2915807279","GB" +"2915807280","2915807287","US" +"2915807288","2915807295","ZA" +"2915807296","2915807439","US" +"2915807440","2915807447","CA" +"2915807448","2915807455","US" +"2915807456","2915807463","PT" +"2915807464","2915807559","US" +"2915807560","2915807567","CA" +"2915807568","2915807607","US" +"2915807608","2915807615","IL" +"2915807616","2915808095","US" +"2915808096","2915808103","CA" +"2915808104","2915808183","US" +"2915808184","2915808191","CA" +"2915808192","2915808247","US" +"2915808248","2915808255","DE" +"2915808256","2915810335","US" +"2915810336","2915810343","GB" +"2915810344","2915810351","MX" +"2915810352","2915810431","US" +"2915810432","2915810439","AU" +"2915810440","2915810471","US" +"2915810472","2915810479","GB" +"2915810480","2915811135","US" +"2915811136","2915811199","IN" +"2915811200","2915821791","US" +"2915821792","2915821823","IL" +"2915821824","2915958783","US" +"2915958784","2916024319","CA" +"2916024320","2916101535","US" +"2916101536","2916101543","CA" +"2916101544","2916101615","US" +"2916101616","2916101623","CA" +"2916101624","2916104703","US" +"2916104704","2916104719","ZA" +"2916104720","2916110399","US" +"2916110400","2916110407","LK" +"2916110408","2916118223","US" +"2916118224","2916118231","LK" +"2916118232","2916120823","US" +"2916120824","2916120831","CA" +"2916120832","2916121367","US" +"2916121368","2916121375","CA" +"2916121376","2916140287","US" +"2916140288","2916140543","A1" +"2916140544","2916163583","US" +"2916163584","2916171775","CA" +"2916171776","2916184063","US" +"2916184064","2916196351","CA" +"2916196352","2916253695","US" +"2916253696","2916286463","CA" +"2916286464","2916319231","US" +"2916319232","2916335615","PR" +"2916335616","2916368383","US" +"2916368384","2916401151","CA" +"2916401152","2916434623","US" +"2916434624","2916434655","CA" +"2916434656","2916436487","US" +"2916436488","2916436495","CA" +"2916436496","2916436543","US" +"2916436544","2916436607","CA" +"2916436608","2916437039","US" +"2916437040","2916437047","DE" +"2916437048","2916437055","CN" +"2916437056","2916437207","US" +"2916437208","2916437215","TH" +"2916437216","2916437231","US" +"2916437232","2916437239","SG" +"2916437240","2916440143","US" +"2916440144","2916440159","CA" +"2916440160","2916440175","US" +"2916440176","2916440191","CA" +"2916440192","2916440287","US" +"2916440288","2916440295","CA" +"2916440296","2916441119","US" +"2916441120","2916441151","CA" +"2916441152","2916441343","US" +"2916441344","2916442111","CA" +"2916442112","2916443151","US" +"2916443152","2916443159","GB" +"2916443160","2916443614","US" +"2916443615","2916443647","CA" +"2916443648","2916515839","US" +"2916515840","2916519935","CA" +"2916519936","2916528690","US" +"2916528691","2916528715","CH" +"2916528716","2916544927","US" +"2916544928","2916544959","BZ" +"2916544960","2916547839","US" +"2916547840","2916547871","BZ" +"2916547872","2916581375","US" +"2916581376","2916614143","PR" +"2916614144","2917167679","US" +"2917167680","2917167743","BR" +"2917167744","2917167775","US" +"2917167776","2917167807","LT" +"2917167808","2917167839","US" +"2917167840","2917167871","TR" +"2917167872","2917167903","US" +"2917167904","2917167935","TR" +"2917167936","2917167967","US" +"2917167968","2917167999","GB" +"2917168000","2917168031","UA" +"2917168032","2917168095","US" +"2917168096","2917168127","NZ" +"2917168128","2917168223","US" +"2917168224","2917168255","BR" +"2917168256","2917168319","US" +"2917168320","2917168351","AR" +"2917168352","2917168383","DE" +"2917168384","2917168415","BR" +"2917168416","2917168447","US" +"2917168448","2917168479","BR" +"2917168480","2917168607","US" +"2917168608","2917168639","BR" +"2917168640","2917170015","US" +"2917170016","2917170047","UA" +"2917170048","2917170079","BR" +"2917170080","2917170111","US" +"2917170112","2917170143","TR" +"2917170144","2917170239","US" +"2917170240","2917170303","BR" +"2917170304","2917171112","US" +"2917171113","2917171114","CA" +"2917171115","2917171115","BR" +"2917171116","2917171120","US" +"2917171121","2917171121","DO" +"2917171122","2917171122","IN" +"2917171123","2917195775","US" +"2917195776","2917196031","A2" +"2917196032","2917196159","CA" +"2917196160","2917196287","A2" +"2917196288","2917196415","CA" +"2917196416","2917199871","A2" +"2917199872","2917203967","CA" +"2917203968","2917210335","US" +"2917210336","2917210367","CA" +"2917210368","2917257215","US" +"2917257216","2917261311","KY" +"2917261312","2917265407","US" +"2917265408","2917267775","JM" +"2917267776","2917267839","VG" +"2917267840","2917268223","JM" +"2917268224","2917268479","BB" +"2917268480","2917269503","JM" +"2917269504","2917449727","US" +"2917449728","2917466111","PR" +"2917466112","2917572607","US" +"2917572608","2917580799","CA" +"2917580800","2917591807","US" +"2917591808","2917591823","RO" +"2917591824","2917591855","US" +"2917591856","2917591903","RO" +"2917591904","2917597439","US" +"2917597440","2917597695","GB" +"2917597696","2917621759","US" +"2917621760","2917629951","CA" +"2917629952","2917646591","US" +"2917646592","2917647231","CN" +"2917647232","2917647359","US" +"2917647360","2917648511","CN" +"2917648512","2917648639","US" +"2917648640","2917649279","CN" +"2917649280","2917649407","US" +"2917649408","2917649535","RU" +"2917649536","2917649663","CN" +"2917649664","2917649791","GB" +"2917649792","2917649919","AZ" +"2917649920","2917650047","CN" +"2917650048","2917650175","US" +"2917650176","2917650303","CN" +"2917650304","2917650431","PA" +"2917650432","2917650559","CN" +"2917650560","2917651071","US" +"2917651072","2917651455","CN" +"2917651456","2917651711","US" +"2917651712","2917651839","CR" +"2917651840","2917652095","CN" +"2917652096","2917652223","IN" +"2917652224","2917652479","AU" +"2917652480","2917652735","CN" +"2917652736","2917652863","NZ" +"2917652864","2917653247","US" +"2917653248","2917653375","CN" +"2917653376","2917653503","PA" +"2917653504","2917654015","GB" +"2917654016","2917654143","FI" +"2917654144","2917654271","MY" +"2917654272","2917654527","CN" +"2917654528","2917654655","TH" +"2917654656","2917654783","MX" +"2917654784","2917655039","DE" +"2917655040","2917655167","US" +"2917655168","2917655295","SG" +"2917655296","2917655423","GB" +"2917655424","2917655807","CN" +"2917655808","2917655935","US" +"2917655936","2917656063","HU" +"2917656064","2917656447","CN" +"2917656448","2917656575","FR" +"2917656576","2917656703","US" +"2917656704","2917657087","CN" +"2917657088","2917657215","NO" +"2917657216","2917657471","US" +"2917657472","2917657599","CN" +"2917657600","2917657855","US" +"2917657856","2917657983","CN" +"2917657984","2917658367","US" +"2917658368","2917658495","CN" +"2917658496","2917659519","US" +"2917659520","2917659647","HK" +"2917659648","2917659775","US" +"2917659776","2917659903","CN" +"2917659904","2917660415","US" +"2917660416","2917660543","CA" +"2917660544","2917660671","GI" +"2917660672","2917661183","GB" +"2917661184","2917661311","CA" +"2917661312","2917661695","CN" +"2917661696","2917661823","ZA" +"2917661824","2917661951","PK" +"2917661952","2917662079","CN" +"2917662080","2917663231","US" +"2917663232","2917663487","CA" +"2917663488","2917672191","US" +"2917672192","2917672223","CA" +"2917672224","2917676031","US" +"2917676032","2917676287","CA" +"2917676288","2917699839","US" +"2917699840","2917700351","CA" +"2917700352","2917706239","US" +"2917706240","2917707007","CA" +"2917707008","2917707519","US" +"2917707520","2917707775","CA" +"2917707776","2917710079","US" +"2917710080","2917710847","CA" +"2917710848","2917713919","US" +"2917713920","2917714431","CA" +"2917714432","2917715967","US" +"2917715968","2917716223","DE" +"2917716224","2917718015","US" +"2917718016","2917718527","CA" +"2917718528","2917722367","US" +"2917722368","2917722623","CA" +"2917722624","2917724159","US" +"2917724160","2917724415","CA" +"2917724416","2917726207","US" +"2917726208","2917726463","CA" +"2917726464","2917726495","CR" +"2917726496","2917795951","US" +"2917795952","2917795959","CA" +"2917795960","2917796263","US" +"2917796264","2917796271","CA" +"2917796272","2917801983","US" +"2917801984","2917801991","CA" +"2917801992","2917802231","US" +"2917802232","2917802239","CA" +"2917802240","2917802295","US" +"2917802296","2917802303","CA" +"2917802304","2917802367","US" +"2917802368","2917802375","CA" +"2917802376","2917804527","US" +"2917804528","2917804535","LK" +"2917804536","2917804879","US" +"2917804880","2917804887","CA" +"2917804888","2917804911","US" +"2917804912","2917804919","CA" +"2917804920","2917804935","US" +"2917804936","2917804943","CA" +"2917804944","2917804951","US" +"2917804952","2917804959","CA" +"2917804960","2917805039","US" +"2917805040","2917805047","CA" +"2917805048","2917809231","US" +"2917809232","2917809239","CA" +"2917809240","2917809927","US" +"2917809928","2917809935","CA" +"2917809936","2917811511","US" +"2917811512","2917811519","LK" +"2917811520","2917811583","US" +"2917811584","2917811711","LK" +"2917811712","2917813679","US" +"2917813680","2917813687","LK" +"2917813688","2917815575","US" +"2917815576","2917815583","RO" +"2917815584","2917823871","US" +"2917823872","2917823887","CA" +"2917823888","2917823895","US" +"2917823896","2917823903","CA" +"2917823904","2917823975","US" +"2917823976","2917823991","CA" +"2917823992","2917829727","US" +"2917829728","2917829743","CA" +"2917829744","2917834143","US" +"2917834144","2917834151","CA" +"2917834152","2917835679","US" +"2917835680","2917835687","CA" +"2917835688","2917842175","US" +"2917842176","2917842431","CA" +"2917842432","2917847063","US" +"2917847064","2917847071","CA" +"2917847072","2917853471","US" +"2917853472","2917853495","CA" +"2917853496","2917853519","US" +"2917853520","2917853535","CA" +"2917853536","2917853567","US" +"2917853568","2917853575","CA" +"2917853576","2917853615","US" +"2917853616","2917853623","CA" +"2917853624","2917854591","US" +"2917854592","2917854719","LK" +"2917854720","2918014975","US" +"2918014976","2918023167","CA" +"2918023168","2918043647","US" +"2918043648","2918047743","CA" +"2918047744","2918051839","US" +"2918051840","2918121471","CA" +"2918121472","2918154239","US" +"2918154240","2918170623","CA" +"2918170624","2918199679","US" +"2918199680","2918199743","CA" +"2918199744","2918200287","US" +"2918200288","2918200303","CA" +"2918200304","2918201551","US" +"2918201552","2918201567","CA" +"2918201568","2918202223","US" +"2918202224","2918202239","CA" +"2918202240","2918232063","US" +"2918232064","2918236159","CA" +"2918236160","2918260735","US" +"2918260736","2918264831","CA" +"2918264832","2918277119","US" +"2918277120","2918281215","CA" +"2918281216","2918286335","US" +"2918286336","2918286719","CA" +"2918286720","2918286879","US" +"2918286880","2918286895","GB" +"2918286896","2918287103","US" +"2918287104","2918287359","CR" +"2918287360","2918289407","GB" +"2918289408","2918314216","US" +"2918314217","2918314217","GB" +"2918314218","2918371327","US" +"2918371328","2918375423","CA" +"2918375424","2918391807","US" +"2918391808","2918395903","CA" +"2918395904","2918404095","US" +"2918404096","2918406911","PR" +"2918406912","2918407423","US" +"2918407424","2918408191","PR" +"2918408192","2918412903","US" +"2918412904","2918412911","ES" +"2918412912","2918412927","US" +"2918412928","2918412935","ES" +"2918412936","2918416383","US" +"2918416384","2918420479","CA" +"2918420480","2918432767","US" +"2918432768","2918436863","CA" +"2918436864","2918469631","US" +"2918469632","2918471423","CA" +"2918471424","2918471679","US" +"2918471680","2918472703","CA" +"2918472704","2918473215","US" +"2918473216","2918473727","CA" +"2918473728","2918477823","US" +"2918477824","2918481919","CA" +"2918481920","2918502078","US" +"2918502079","2918502079","A1" +"2918502080","2918514943","US" +"2918514944","2918515079","CA" +"2918515080","2918515199","US" +"2918515200","2918515327","CA" +"2918515328","2918532111","US" +"2918532112","2918532119","CN" +"2918532120","2918532143","US" +"2918532144","2918532151","PK" +"2918532152","2918533119","US" +"2918533120","2918533127","CN" +"2918533128","2918533143","US" +"2918533144","2918533151","CN" +"2918533152","2918533159","US" +"2918533160","2918533167","CN" +"2918533168","2918533191","US" +"2918533192","2918533199","AU" +"2918533200","2918533215","CN" +"2918533216","2918534687","US" +"2918534688","2918534695","CN" +"2918534696","2918534703","US" +"2918534704","2918534719","CN" +"2918534720","2918534815","US" +"2918534816","2918534879","CN" +"2918534880","2918534943","US" +"2918534944","2918534975","CN" +"2918534976","2918534983","US" +"2918534984","2918534991","ID" +"2918534992","2918536191","US" +"2918536192","2918536703","A1" +"2918536704","2918536719","US" +"2918536720","2918536727","CA" +"2918536728","2918580223","US" +"2918580224","2918588415","CA" +"2918588416","2918596607","US" +"2918596608","2918604287","CA" +"2918604288","2918604543","US" +"2918604544","2918604799","CA" +"2918604800","2918699007","US" +"2918699008","2918703103","CA" +"2918703104","2918760447","US" +"2918760448","2918776831","CA" +"2918776832","2918815999","US" +"2918816000","2918817023","GB" +"2918817024","2918828031","US" +"2918828032","2918828543","UA" +"2918828544","2918829055","ES" +"2918829056","2918829183","US" +"2918829184","2918829311","PL" +"2918829312","2918829439","CA" +"2918829440","2918829567","JM" +"2918829568","2918829695","GR" +"2918829696","2918829823","DE" +"2918829824","2918830079","CN" +"2918830080","2918834175","CA" +"2918834176","2918842367","US" +"2918842368","2918875135","CA" +"2918875136","2918973439","US" +"2918973440","2918989823","CA" +"2918989824","2919010303","US" +"2919010304","2919010687","CA" +"2919010688","2919020543","US" +"2919020544","2919020575","CA" +"2919020576","2919020607","US" +"2919020608","2919020655","CA" +"2919020656","2919020711","US" +"2919020712","2919020719","CA" +"2919020720","2919020727","US" +"2919020728","2919020799","CA" +"2919020800","2919021327","US" +"2919021328","2919021335","CA" +"2919021336","2919021343","US" +"2919021344","2919021567","CA" +"2919021568","2919022079","US" +"2919022080","2919022207","CA" +"2919022208","2919022287","US" +"2919022288","2919022431","CA" +"2919022432","2919063551","US" +"2919063552","2919064063","MX" +"2919064064","2919067655","CN" +"2919067656","2919067695","US" +"2919067696","2919067703","PK" +"2919067704","2919067711","ES" +"2919067712","2919067719","CN" +"2919067720","2919067727","TR" +"2919067728","2919067735","IN" +"2919067736","2919067743","US" +"2919067744","2919067751","BR" +"2919067752","2919067759","IN" +"2919067760","2919067767","CA" +"2919067768","2919067775","US" +"2919067776","2919067783","AU" +"2919067784","2919067791","US" +"2919067792","2919067799","BR" +"2919067800","2919067823","US" +"2919067824","2919067831","BR" +"2919067832","2919067839","US" +"2919067840","2919067847","BR" +"2919067848","2919067863","US" +"2919067864","2919067871","ES" +"2919067872","2919067879","CA" +"2919067880","2919067887","TW" +"2919067888","2919067895","IE" +"2919067896","2919067903","CA" +"2919067904","2919067911","US" +"2919067912","2919067919","CN" +"2919067920","2919067927","US" +"2919067928","2919067935","RU" +"2919067936","2919067943","BR" +"2919067944","2919067951","PL" +"2919067952","2919067959","CN" +"2919067960","2919067967","IL" +"2919067968","2919067975","US" +"2919067976","2919067983","CA" +"2919067984","2919067999","CN" +"2919068000","2919068007","CM" +"2919068008","2919068015","BR" +"2919068016","2919068023","US" +"2919068024","2919068031","HK" +"2919068032","2919068039","US" +"2919068040","2919068047","IN" +"2919068048","2919068055","CA" +"2919068056","2919068087","US" +"2919068088","2919068095","TR" +"2919068096","2919068103","US" +"2919068104","2919068111","AE" +"2919068112","2919068119","US" +"2919068120","2919068127","CN" +"2919068128","2919068135","US" +"2919068136","2919068143","PK" +"2919068144","2919068151","IN" +"2919068152","2919068159","JM" +"2919068160","2919068167","US" +"2919068168","2919068175","CA" +"2919068176","2919068183","US" +"2919068184","2919068191","CA" +"2919068192","2919068199","PR" +"2919068200","2919068207","US" +"2919068208","2919068215","GB" +"2919068216","2919068223","CA" +"2919068224","2919068239","US" +"2919068240","2919068247","CN" +"2919068248","2919068255","AU" +"2919068256","2919068271","US" +"2919068272","2919068279","SG" +"2919068280","2919068287","US" +"2919068288","2919068295","CN" +"2919068296","2919068303","BR" +"2919068304","2919068311","RO" +"2919068312","2919068319","MY" +"2919068320","2919068335","US" +"2919068336","2919068343","RU" +"2919068344","2919068359","US" +"2919068360","2919068367","CM" +"2919068368","2919068375","CN" +"2919068376","2919068383","US" +"2919068384","2919068391","BR" +"2919068392","2919068415","US" +"2919068416","2919068423","BR" +"2919068424","2919068431","CN" +"2919068432","2919068495","US" +"2919068496","2919068503","BR" +"2919068504","2919068511","IN" +"2919068512","2919068519","CN" +"2919068520","2919068527","US" +"2919068528","2919068535","PL" +"2919068536","2919068551","IN" +"2919068552","2919068559","AU" +"2919068560","2919068567","CN" +"2919068568","2919068575","IN" +"2919068576","2919068583","US" +"2919068584","2919068591","CN" +"2919068592","2919068599","US" +"2919068600","2919068607","CM" +"2919068608","2919068615","MY" +"2919068616","2919068647","US" +"2919068648","2919068655","AU" +"2919068656","2919068663","CN" +"2919068664","2919068703","US" +"2919068704","2919068711","IN" +"2919068712","2919068719","JM" +"2919068720","2919068727","US" +"2919068728","2919068735","RU" +"2919068736","2919068743","NO" +"2919068744","2919068751","PR" +"2919068752","2919068775","US" +"2919068776","2919068783","HK" +"2919068784","2919068791","IN" +"2919068792","2919068799","CR" +"2919068800","2919068815","NO" +"2919068816","2919068823","US" +"2919068824","2919068831","CA" +"2919068832","2919068839","CN" +"2919068840","2919068871","US" +"2919068872","2919068879","CN" +"2919068880","2919068887","DO" +"2919068888","2919068895","SG" +"2919068896","2919068911","US" +"2919068912","2919068927","CN" +"2919068928","2919068935","US" +"2919068936","2919068943","ZA" +"2919068944","2919068967","US" +"2919068968","2919068975","RU" +"2919068976","2919068991","US" +"2919068992","2919068999","DO" +"2919069000","2919069015","US" +"2919069016","2919069031","CN" +"2919069032","2919069039","US" +"2919069040","2919069047","CN" +"2919069048","2919069055","US" +"2919069056","2919069063","CN" +"2919069064","2919069071","AF" +"2919069072","2919069079","CN" +"2919069080","2919069087","US" +"2919069088","2919069095","IN" +"2919069096","2919069103","BZ" +"2919069104","2919069111","US" +"2919069112","2919069119","CN" +"2919069120","2919069127","CA" +"2919069128","2919069135","US" +"2919069136","2919069143","CN" +"2919069144","2919069151","BR" +"2919069152","2919069159","US" +"2919069160","2919069167","JM" +"2919069168","2919069175","GB" +"2919069176","2919069183","US" +"2919069184","2919069191","PR" +"2919069192","2919069199","US" +"2919069200","2919069207","GB" +"2919069208","2919069215","BR" +"2919069216","2919069231","US" +"2919069232","2919069239","ES" +"2919069240","2919069255","GB" +"2919069256","2919069271","CN" +"2919069272","2919069295","US" +"2919069296","2919069303","BR" +"2919069304","2919069327","US" +"2919069328","2919069335","BR" +"2919069336","2919069343","TR" +"2919069344","2919069359","US" +"2919069360","2919069367","CN" +"2919069368","2919069375","AU" +"2919069376","2919069391","US" +"2919069392","2919069399","GB" +"2919069400","2919069407","US" +"2919069408","2919069415","VN" +"2919069416","2919069439","US" +"2919069440","2919069447","CA" +"2919069448","2919069455","US" +"2919069456","2919069463","CN" +"2919069464","2919069471","US" +"2919069472","2919069479","CA" +"2919069480","2919069487","CN" +"2919069488","2919069495","US" +"2919069496","2919069503","CN" +"2919069504","2919069511","AR" +"2919069512","2919069519","US" +"2919069520","2919069527","IN" +"2919069528","2919069535","TR" +"2919069536","2919069543","US" +"2919069544","2919069559","CN" +"2919069560","2919069567","AE" +"2919069568","2919069575","VN" +"2919069576","2919069583","CN" +"2919069584","2919069607","US" +"2919069608","2919069615","CN" +"2919069616","2919069623","QA" +"2919069624","2919069631","PK" +"2919069632","2919069639","TW" +"2919069640","2919069663","US" +"2919069664","2919069671","CA" +"2919069672","2919069679","US" +"2919069680","2919069687","CA" +"2919069688","2919069703","US" +"2919069704","2919069711","CN" +"2919069712","2919069719","UA" +"2919069720","2919069735","US" +"2919069736","2919069743","BR" +"2919069744","2919069775","US" +"2919069776","2919069791","CN" +"2919069792","2919069799","PK" +"2919069800","2919069807","US" +"2919069808","2919069815","PK" +"2919069816","2919069823","CN" +"2919069824","2919069831","IN" +"2919069832","2919069839","US" +"2919069840","2919069847","BR" +"2919069848","2919069855","US" +"2919069856","2919069863","GB" +"2919069864","2919069871","US" +"2919069872","2919069879","IN" +"2919069880","2919069895","US" +"2919069896","2919069903","BR" +"2919069904","2919069943","US" +"2919069944","2919069951","BR" +"2919069952","2919069975","US" +"2919069976","2919069983","IT" +"2919069984","2919069991","IN" +"2919069992","2919069999","SG" +"2919070000","2919070047","US" +"2919070048","2919070055","TR" +"2919070056","2919070071","US" +"2919070072","2919070079","AE" +"2919070080","2919070095","US" +"2919070096","2919070103","CN" +"2919070104","2919070111","AU" +"2919070112","2919070119","ES" +"2919070120","2919070127","JM" +"2919070128","2919070135","GB" +"2919070136","2919070159","US" +"2919070160","2919070167","GB" +"2919070168","2919070199","US" +"2919070200","2919070207","ES" +"2919070208","2919070223","US" +"2919070224","2919070231","CN" +"2919070232","2919070239","US" +"2919070240","2919070247","AF" +"2919070248","2919070255","CA" +"2919070256","2919070263","AF" +"2919070264","2919070271","CA" +"2919070272","2919070279","IN" +"2919070280","2919070295","US" +"2919070296","2919070303","CN" +"2919070304","2919070311","BR" +"2919070312","2919070319","NL" +"2919070320","2919070327","CN" +"2919070328","2919070335","BR" +"2919070336","2919070351","US" +"2919070352","2919070359","ZA" +"2919070360","2919070383","CN" +"2919070384","2919070391","US" +"2919070392","2919070399","DE" +"2919070400","2919070415","US" +"2919070416","2919070423","CA" +"2919070424","2919070431","US" +"2919070432","2919070439","NL" +"2919070440","2919070447","BR" +"2919070448","2919070463","US" +"2919070464","2919070471","IN" +"2919070472","2919070479","CN" +"2919070480","2919070487","PK" +"2919070488","2919070527","US" +"2919070528","2919070543","CA" +"2919070544","2919070551","CR" +"2919070552","2919070559","PR" +"2919070560","2919070567","US" +"2919070568","2919070575","CA" +"2919070576","2919070607","US" +"2919070608","2919070615","RO" +"2919070616","2919070631","US" +"2919070632","2919070639","TR" +"2919070640","2919070647","US" +"2919070648","2919070655","GB" +"2919070656","2919070663","US" +"2919070664","2919070671","GB" +"2919070672","2919070679","US" +"2919070680","2919070687","IN" +"2919070688","2919070695","BY" +"2919070696","2919070711","US" +"2919070712","2919070719","CN" +"2919070720","2919070727","GB" +"2919070728","2919070735","US" +"2919070736","2919070743","PL" +"2919070744","2919070751","CN" +"2919070752","2919070783","US" +"2919070784","2919070791","BR" +"2919070792","2919070799","US" +"2919070800","2919070807","NO" +"2919070808","2919070815","CN" +"2919070816","2919070831","US" +"2919070832","2919070839","IE" +"2919070840","2919070847","CN" +"2919070848","2919070879","US" +"2919070880","2919070887","IN" +"2919070888","2919070903","US" +"2919070904","2919070919","CN" +"2919070920","2919070927","CA" +"2919070928","2919070943","US" +"2919070944","2919070951","BR" +"2919070952","2919070975","US" +"2919070976","2919070983","TR" +"2919070984","2919070991","GB" +"2919070992","2919071031","US" +"2919071032","2919071039","IT" +"2919071040","2919071047","IN" +"2919071048","2919071055","US" +"2919071056","2919071063","CN" +"2919071064","2919071143","US" +"2919071144","2919071151","CN" +"2919071152","2919071159","US" +"2919071160","2919071167","CN" +"2919071168","2919071175","US" +"2919071176","2919071183","GB" +"2919071184","2919071199","CA" +"2919071200","2919071207","DK" +"2919071208","2919071215","MX" +"2919071216","2919153695","US" +"2919153696","2919153703","DE" +"2919153704","2919159873","US" +"2919159874","2919159877","A1" +"2919159878","2919170351","US" +"2919170352","2919170359","PE" +"2919170360","2919170399","US" +"2919170400","2919170407","TR" +"2919170408","2919170415","ES" +"2919170416","2919170431","US" +"2919170432","2919170439","JP" +"2919170440","2919170447","IN" +"2919170448","2919170487","US" +"2919170488","2919170495","NL" +"2919170496","2919170551","US" +"2919170552","2919170559","FR" +"2919170560","2919170615","US" +"2919170616","2919170623","CN" +"2919170624","2919170639","US" +"2919170640","2919170655","JP" +"2919170656","2919170671","US" +"2919170672","2919170679","JP" +"2919170680","2919170695","US" +"2919170696","2919170703","CN" +"2919170704","2919170727","US" +"2919170728","2919170735","IN" +"2919170736","2919170759","US" +"2919170760","2919170767","BR" +"2919170768","2919170775","AR" +"2919170776","2919170799","US" +"2919170800","2919170815","SG" +"2919170816","2919170903","US" +"2919170904","2919170911","GR" +"2919170912","2919170919","US" +"2919170920","2919170927","BR" +"2919170928","2919170935","US" +"2919170936","2919170943","PH" +"2919170944","2919170967","US" +"2919170968","2919170975","NZ" +"2919170976","2919171071","US" +"2919171072","2919171079","IN" +"2919171080","2919171087","US" +"2919171088","2919171095","TR" +"2919171096","2919171103","US" +"2919171104","2919171111","PL" +"2919171112","2919171143","US" +"2919171144","2919171151","TR" +"2919171152","2919171159","US" +"2919171160","2919171167","AU" +"2919171168","2919171183","US" +"2919171184","2919171191","ZA" +"2919171192","2919171343","US" +"2919171344","2919171351","BR" +"2919171352","2919171359","US" +"2919171360","2919171367","BR" +"2919171368","2919171399","US" +"2919171400","2919171407","IT" +"2919171408","2919171415","CN" +"2919171416","2919171455","US" +"2919171456","2919171463","BR" +"2919171464","2919171535","US" +"2919171536","2919171543","BR" +"2919171544","2919171575","US" +"2919171576","2919171583","BR" +"2919171584","2919171655","US" +"2919171656","2919171663","BR" +"2919171664","2919171695","US" +"2919171696","2919171703","BR" +"2919171704","2919174143","US" +"2919174144","2919178239","CA" +"2919178240","2919186431","US" +"2919186432","2919190527","CA" +"2919190528","2919202079","US" +"2919202080","2919202111","BE" +"2919202112","2919206911","US" +"2919206912","2919211007","CA" +"2919211008","2919211263","US" +"2919211264","2919211519","A1" +"2919211520","2919235583","US" +"2919235584","2919759871","CA" +"2919759872","2921496895","US" +"2921496896","2921496903","IN" +"2921496904","2921496967","US" +"2921496968","2921496975","IN" +"2921496976","2921497415","US" +"2921497416","2921497423","IN" +"2921497424","2921497471","US" +"2921497472","2921497599","IN" +"2921497600","2921497855","US" +"2921497856","2921497863","CA" +"2921497864","2921498031","US" +"2921498032","2921498039","CA" +"2921498040","2921498215","US" +"2921498216","2921498223","CA" +"2921498224","2921498383","US" +"2921498384","2921498391","ID" +"2921498392","2921498431","US" +"2921498432","2921498439","CA" +"2921498440","2921503695","US" +"2921503696","2921503703","ID" +"2921503704","2921504431","US" +"2921504432","2921504439","GB" +"2921504440","2921505951","US" +"2921505952","2921506015","IN" +"2921506016","2921506343","US" +"2921506344","2921506351","CA" +"2921506352","2921506431","US" +"2921506432","2921506463","IN" +"2921506464","2921508719","US" +"2921508720","2921508727","SE" +"2921508728","2921509351","US" +"2921509352","2921509367","CA" +"2921509368","2921511383","US" +"2921511384","2921511391","CA" +"2921511392","2921512703","US" +"2921512704","2921512959","CA" +"2921512960","2921528319","US" +"2921528320","2921528351","UA" +"2921528352","2921528575","US" +"2921528576","2921528607","UA" +"2921528608","2921528927","US" +"2921528928","2921528959","UA" +"2921528960","2921562111","US" +"2921562112","2921594879","CA" +"2921594880","2921658191","US" +"2921658192","2921658199","A1" +"2921658200","2925002751","US" +"2925002752","2925527039","CA" +"2925527040","2926575615","US" +"2926575616","2927099903","CA" +"2927099904","2927112031","US" +"2927112032","2927112039","CH" +"2927112040","2927152175","US" +"2927152176","2927152183","CH" +"2927152184","2927154847","US" +"2927154848","2927154855","CH" +"2927154856","2927242751","US" +"2927242752","2927243263","AE" +"2927243264","2927254527","US" +"2927254528","2927255039","AE" +"2927255040","2927606783","US" +"2927606784","2927607807","CA" +"2927607808","2927911183","US" +"2927911184","2927911191","CH" +"2927911192","2927939071","US" +"2927939072","2927939327","A1" +"2927939328","2928173223","US" +"2928173224","2928173231","JP" +"2928173232","2928173343","US" +"2928173344","2928173351","NL" +"2928173352","2928173551","US" +"2928173552","2928173559","CA" +"2928173560","2928173711","US" +"2928173712","2928173727","JP" +"2928173728","2928173903","US" +"2928173904","2928173919","NZ" +"2928173920","2928173959","US" +"2928173960","2928173967","CA" +"2928173968","2928174223","US" +"2928174224","2928174231","CA" +"2928174232","2928174423","US" +"2928174424","2928174431","CA" +"2928174432","2928174911","US" +"2928174912","2928174919","AU" +"2928174920","2928175167","US" +"2928175168","2928175175","RU" +"2928175176","2928175207","US" +"2928175208","2928175215","CA" +"2928175216","2928175303","US" +"2928175304","2928175311","CN" +"2928175312","2928175399","US" +"2928175400","2928175407","TR" +"2928175408","2928175471","US" +"2928175472","2928175479","JP" +"2928175480","2928175551","US" +"2928175552","2928175567","CA" +"2928175568","2928175775","US" +"2928175776","2928175791","PH" +"2928175792","2928175967","US" +"2928175968","2928175975","ZA" +"2928175976","2928176207","US" +"2928176208","2928176223","ZA" +"2928176224","2928176231","JP" +"2928176232","2928176327","US" +"2928176328","2928176335","RU" +"2928176336","2928176447","US" +"2928176448","2928176455","GB" +"2928176456","2928176519","US" +"2928176520","2928176527","NL" +"2928176528","2928177103","US" +"2928177104","2928177111","AR" +"2928177112","2928177151","US" +"2928177152","2928181247","CA" +"2928181248","2928186591","US" +"2928186592","2928186623","CA" +"2928186624","2928218127","US" +"2928218128","2928218143","CA" +"2928218144","2928218623","US" +"2928218624","2928219135","CA" +"2928219136","2928226303","US" +"2928226304","2928230399","CA" +"2928230400","2928252387","US" +"2928252388","2928252388","A1" +"2928252389","2928252611","US" +"2928252612","2928252612","A1" +"2928252613","2928252987","US" +"2928252988","2928252988","A1" +"2928252989","2928261375","US" +"2928261376","2928261887","CA" +"2928261888","2928263167","US" +"2928263168","2928263679","CA" +"2928263680","2928263687","US" +"2928263688","2928263791","CA" +"2928263792","2928263799","US" +"2928263800","2928263823","CA" +"2928263824","2928263831","US" +"2928263832","2928263855","CA" +"2928263856","2928263871","US" +"2928263872","2928263999","CA" +"2928264000","2928264007","US" +"2928264008","2928264015","CA" +"2928264016","2928264023","US" +"2928264024","2928264063","CA" +"2928264064","2928264095","US" +"2928264096","2928264159","CA" +"2928264160","2928264167","US" +"2928264168","2928264287","CA" +"2928264288","2928264303","US" +"2928264304","2928264327","CA" +"2928264328","2928264335","NL" +"2928264336","2928264359","CA" +"2928264360","2928264367","US" +"2928264368","2928264383","CA" +"2928264384","2928264391","US" +"2928264392","2928264399","CA" +"2928264400","2928264423","US" +"2928264424","2928264759","CA" +"2928264760","2928264775","US" +"2928264776","2928264783","CA" +"2928264784","2928264831","US" +"2928264832","2928264863","CA" +"2928264864","2928264871","US" +"2928264872","2928264879","CA" +"2928264880","2928264967","US" +"2928264968","2928264983","CA" +"2928264984","2928265007","US" +"2928265008","2928265055","CA" +"2928265056","2928265103","US" +"2928265104","2928265143","CA" +"2928265144","2928265215","US" +"2928265216","2928265471","CA" +"2928265472","2928265479","US" +"2928265480","2928265503","CA" +"2928265504","2928265527","US" +"2928265528","2928265559","CA" +"2928265560","2928265567","US" +"2928265568","2928265575","CA" +"2928265576","2928265623","US" +"2928265624","2928265631","CA" +"2928265632","2928265647","US" +"2928265648","2928265671","CA" +"2928265672","2928265687","US" +"2928265688","2928265703","CA" +"2928265704","2928265711","US" +"2928265712","2928265727","CA" +"2928265728","2928265735","US" +"2928265736","2928266023","CA" +"2928266024","2928266031","US" +"2928266032","2928266055","CA" +"2928266056","2928266063","US" +"2928266064","2928266111","CA" +"2928266112","2928266119","US" +"2928266120","2928266175","CA" +"2928266176","2928266191","US" +"2928266192","2928266255","CA" +"2928266256","2928266263","US" +"2928266264","2928266295","CA" +"2928266296","2928266311","US" +"2928266312","2928266359","CA" +"2928266360","2928266367","US" +"2928266368","2928266407","CA" +"2928266408","2928266415","US" +"2928266416","2928269759","CA" +"2928269760","2928269775","US" +"2928269776","2928269783","CA" +"2928269784","2928269807","US" +"2928269808","2928269975","CA" +"2928269976","2928269983","US" +"2928269984","2928269999","CA" +"2928270000","2928270007","US" +"2928270008","2928270063","CA" +"2928270064","2928270071","US" +"2928270072","2928270135","CA" +"2928270136","2928270143","US" +"2928270144","2928270175","CA" +"2928270176","2928270183","US" +"2928270184","2928270479","CA" +"2928270480","2928270487","NL" +"2928270488","2928270551","CA" +"2928270552","2928270559","US" +"2928270560","2928270583","CA" +"2928270584","2928270591","US" +"2928270592","2928270607","CA" +"2928270608","2928270615","US" +"2928270616","2928270623","CA" +"2928270624","2928270631","US" +"2928270632","2928270647","CA" +"2928270648","2928270655","US" +"2928270656","2928270727","CA" +"2928270728","2928270743","US" +"2928270744","2928270751","CA" +"2928270752","2928270767","US" +"2928270768","2928270791","CA" +"2928270792","2928270799","US" +"2928270800","2928271143","CA" +"2928271144","2928271151","US" +"2928271152","2928271183","CA" +"2928271184","2928271191","US" +"2928271192","2928271447","CA" +"2928271448","2928271455","US" +"2928271456","2928271767","CA" +"2928271768","2928271775","US" +"2928271776","2928271823","CA" +"2928271824","2928271871","US" +"2928271872","2928271943","CA" +"2928271944","2928271951","US" +"2928271952","2928272775","CA" +"2928272776","2928272783","US" +"2928272784","2928272839","CA" +"2928272840","2928272847","US" +"2928272848","2928272903","CA" +"2928272904","2928272919","US" +"2928272920","2928272951","CA" +"2928272952","2928273071","US" +"2928273072","2928273079","CA" +"2928273080","2928273183","US" +"2928273184","2928273191","CA" +"2928273192","2928273199","US" +"2928273200","2928273295","CA" +"2928273296","2928273303","US" +"2928273304","2928273311","CA" +"2928273312","2928273367","US" +"2928273368","2928273383","CA" +"2928273384","2928273439","US" +"2928273440","2928273447","CA" +"2928273448","2928273471","US" +"2928273472","2928273479","CA" +"2928273480","2928273591","US" +"2928273592","2928273599","CA" +"2928273600","2928273607","NL" +"2928273608","2928273639","CA" +"2928273640","2928273647","US" +"2928273648","2928273671","CA" +"2928273672","2928273703","US" +"2928273704","2928273735","CA" +"2928273736","2928273799","US" +"2928273800","2928273807","CA" +"2928273808","2928273919","US" +"2928273920","2928274175","CA" +"2928274176","2928274199","US" +"2928274200","2928274207","CA" +"2928274208","2928274247","US" +"2928274248","2928274263","CA" +"2928274264","2928274295","US" +"2928274296","2928274311","CA" +"2928274312","2928274319","US" +"2928274320","2928274335","CA" +"2928274336","2928274359","US" +"2928274360","2928274367","CA" +"2928274368","2928274391","US" +"2928274392","2928274495","CA" +"2928274496","2928274503","US" +"2928274504","2928274519","CA" +"2928274520","2928274527","US" +"2928274528","2928274575","CA" +"2928274576","2928274583","US" +"2928274584","2928274599","CA" +"2928274600","2928274607","US" +"2928274608","2928274615","CA" +"2928274616","2928274623","US" +"2928274624","2928274631","CA" +"2928274632","2928274639","US" +"2928274640","2928274703","CA" +"2928274704","2928274711","US" +"2928274712","2928274767","CA" +"2928274768","2928274775","US" +"2928274776","2928274847","CA" +"2928274848","2928274855","US" +"2928274856","2928274919","CA" +"2928274920","2928274927","US" +"2928274928","2928275055","CA" +"2928275056","2928275071","US" +"2928275072","2928275455","CA" +"2928275456","2928275463","US" +"2928275464","2928275479","CA" +"2928275480","2928275495","US" +"2928275496","2928275599","CA" +"2928275600","2928275607","US" +"2928275608","2928275719","CA" +"2928275720","2928275727","US" +"2928275728","2928275767","CA" +"2928275768","2928275775","US" +"2928275776","2928275815","CA" +"2928275816","2928275823","US" +"2928275824","2928276071","CA" +"2928276072","2928276079","US" +"2928276080","2928276191","CA" +"2928276192","2928276231","US" +"2928276232","2928276287","CA" +"2928276288","2928276319","US" +"2928276320","2928276367","CA" +"2928276368","2928276455","US" +"2928276456","2928276463","CA" +"2928276464","2928276535","US" +"2928276536","2928276543","CA" +"2928276544","2928276599","US" +"2928276600","2928276607","CA" +"2928276608","2928276679","US" +"2928276680","2928276695","CA" +"2928276696","2928276711","US" +"2928276712","2928276727","CA" +"2928276728","2928276735","US" +"2928276736","2928276743","CA" +"2928276744","2928276903","US" +"2928276904","2928276911","CA" +"2928276912","2928276919","US" +"2928276920","2928277167","CA" +"2928277168","2928277183","US" +"2928277184","2928277199","CA" +"2928277200","2928277215","US" +"2928277216","2928277279","CA" +"2928277280","2928277303","US" +"2928277304","2928277335","CA" +"2928277336","2928277343","US" +"2928277344","2928277671","CA" +"2928277672","2928277679","US" +"2928277680","2928277695","CA" +"2928277696","2928277703","US" +"2928277704","2928278279","CA" +"2928278280","2928278287","US" +"2928278288","2928278335","CA" +"2928278336","2928278343","US" +"2928278344","2928278367","CA" +"2928278368","2928278375","US" +"2928278376","2928278791","CA" +"2928278792","2928278799","US" +"2928278800","2928278879","CA" +"2928278880","2928278887","US" +"2928278888","2928278895","CA" +"2928278896","2928278911","US" +"2928278912","2928279015","CA" +"2928279016","2928279023","US" +"2928279024","2928279383","CA" +"2928279384","2928279391","US" +"2928279392","2928279551","CA" +"2928279552","2928312319","US" +"2928312320","2928316415","CA" +"2928316416","2928318719","US" +"2928318720","2928318975","DO" +"2928318976","2928320519","US" +"2928320520","2928320527","BR" +"2928320528","2928321063","US" +"2928321064","2928321071","AU" +"2928321072","2928321311","US" +"2928321312","2928321327","GB" +"2928321328","2928322639","US" +"2928322640","2928322655","RU" +"2928322656","2928323135","US" +"2928323136","2928323143","RU" +"2928323144","2928323175","US" +"2928323176","2928323183","AU" +"2928323184","2928323967","US" +"2928323968","2928323983","RU" +"2928323984","2928324519","US" +"2928324520","2928324527","TR" +"2928324528","2928328703","US" +"2928328704","2928336895","CA" +"2928336896","2928452223","US" +"2928452224","2928452351","A1" +"2928452352","2928455679","US" +"2928455680","2928459775","CA" +"2928459776","2928541695","US" +"2928541696","2928553303","CA" +"2928553304","2928553311","HU" +"2928553312","2928558943","CA" +"2928558944","2928558951","PE" +"2928558952","2928570671","CA" +"2928570672","2928570687","FR" +"2928570688","2928579543","CA" +"2928579544","2928579551","HU" +"2928579552","2928583735","CA" +"2928583736","2928583743","SY" +"2928583744","2928595959","CA" +"2928595960","2928595967","US" +"2928595968","2928607231","CA" +"2928607232","2928607287","US" +"2928607288","2928607303","NO" +"2928607304","2928607343","US" +"2928607344","2928607351","GB" +"2928607352","2928607567","US" +"2928607568","2928607575","CA" +"2928607576","2928607711","US" +"2928607712","2928607719","CA" +"2928607720","2928607815","US" +"2928607816","2928607823","CA" +"2928607824","2928608751","US" +"2928608752","2928608783","GB" +"2928608784","2928609471","US" +"2928609472","2928609983","BD" +"2928609984","2928610143","US" +"2928610144","2928610175","GB" +"2928610176","2928610383","US" +"2928610384","2928610391","VG" +"2928610392","2928610615","US" +"2928610616","2928610623","IL" +"2928610624","2928610655","US" +"2928610656","2928610663","MX" +"2928610664","2928610703","US" +"2928610704","2928610711","IN" +"2928610712","2928610823","US" +"2928610824","2928610831","CA" +"2928610832","2928610839","GB" +"2928610840","2928610935","US" +"2928610936","2928610943","GB" +"2928610944","2928611303","US" +"2928611304","2928611311","IL" +"2928611312","2928611351","US" +"2928611352","2928611359","ZA" +"2928611360","2928611375","US" +"2928611376","2928611383","ZA" +"2928611384","2928611591","US" +"2928611592","2928611599","CA" +"2928611600","2928611695","US" +"2928611696","2928611703","BB" +"2928611704","2928611791","US" +"2928611792","2928611807","GB" +"2928611808","2928611839","US" +"2928611840","2928611847","CA" +"2928611848","2928612135","US" +"2928612136","2928612143","AU" +"2928612144","2928612231","US" +"2928612232","2928612239","GB" +"2928612240","2928612279","US" +"2928612280","2928612287","GB" +"2928612288","2928612319","US" +"2928612320","2928612327","CA" +"2928612328","2928612343","US" +"2928612344","2928612351","CA" +"2928612352","2928612415","US" +"2928612416","2928612447","CA" +"2928612448","2928612735","US" +"2928612736","2928612799","CA" +"2928612800","2928615455","US" +"2928615456","2928615463","GB" +"2928615464","2928615735","US" +"2928615736","2928615743","GB" +"2928615744","2928615759","CA" +"2928615760","2928615871","US" +"2928615872","2928615879","MY" +"2928615880","2928615983","US" +"2928615984","2928615991","AU" +"2928615992","2928616863","US" +"2928616864","2928616879","ZA" +"2928616880","2928617023","US" +"2928617024","2928617039","IN" +"2928617040","2928617199","US" +"2928617200","2928617215","IL" +"2928617216","2928617359","US" +"2928617360","2928617375","CA" +"2928617376","2928617623","US" +"2928617624","2928617631","IN" +"2928617632","2928617639","US" +"2928617640","2928617647","JP" +"2928617648","2928617895","US" +"2928617896","2928617903","IN" +"2928617904","2928617951","US" +"2928617952","2928617959","GB" +"2928617960","2928618231","US" +"2928618232","2928618239","IL" +"2928618240","2928618247","US" +"2928618248","2928618255","GB" +"2928618256","2928618271","US" +"2928618272","2928618279","IL" +"2928618280","2928618367","US" +"2928618368","2928618375","GB" +"2928618376","2928618383","US" +"2928618384","2928618399","CA" +"2928618400","2928618479","US" +"2928618480","2928618487","CA" +"2928618488","2928618559","US" +"2928618560","2928618591","IN" +"2928618592","2928619071","US" +"2928619072","2928619103","BD" +"2928619104","2928619391","US" +"2928619392","2928619423","CA" +"2928619424","2928620135","US" +"2928620136","2928620143","IN" +"2928620144","2928620151","CA" +"2928620152","2928620183","US" +"2928620184","2928620191","FR" +"2928620192","2928620231","US" +"2928620232","2928620239","SE" +"2928620240","2928620303","US" +"2928620304","2928620311","GB" +"2928620312","2928620359","US" +"2928620360","2928620367","IN" +"2928620368","2928620439","US" +"2928620440","2928620447","NL" +"2928620448","2928620615","US" +"2928620616","2928620623","AU" +"2928620624","2928620855","US" +"2928620856","2928620863","ZA" +"2928620864","2928620991","US" +"2928620992","2928620999","GB" +"2928621000","2928621135","US" +"2928621136","2928621143","GB" +"2928621144","2928621215","US" +"2928621216","2928621223","GB" +"2928621224","2928621551","US" +"2928621552","2928621559","FR" +"2928621560","2928621567","GB" +"2928621568","2928621823","US" +"2928621824","2928621839","CA" +"2928621840","2928621903","US" +"2928621904","2928621911","AE" +"2928621912","2928621935","US" +"2928621936","2928621943","NZ" +"2928621944","2928621951","IN" +"2928621952","2928622047","US" +"2928622048","2928622055","CA" +"2928622056","2928622175","US" +"2928622176","2928622183","GB" +"2928622184","2928622231","US" +"2928622232","2928622239","AU" +"2928622240","2928622327","US" +"2928622328","2928622335","CN" +"2928622336","2928622623","US" +"2928622624","2928622639","NZ" +"2928622640","2928622703","US" +"2928622704","2928622719","GB" +"2928622720","2928622799","US" +"2928622800","2928622815","CA" +"2928622816","2928622927","US" +"2928622928","2928622959","CA" +"2928622960","2928623239","US" +"2928623240","2928623247","CA" +"2928623248","2928623263","US" +"2928623264","2928623271","MX" +"2928623272","2928623495","US" +"2928623496","2928623503","CA" +"2928623504","2928623807","US" +"2928623808","2928623815","AU" +"2928623816","2928623831","US" +"2928623832","2928623839","NO" +"2928623840","2928623855","US" +"2928623856","2928623863","NZ" +"2928623864","2928623999","US" +"2928624000","2928624007","CA" +"2928624008","2928624127","US" +"2928624128","2928624135","CY" +"2928624136","2928624143","CA" +"2928624144","2928624151","US" +"2928624152","2928624159","CA" +"2928624160","2928624303","US" +"2928624304","2928624311","NL" +"2928624312","2928624319","US" +"2928624320","2928624327","CA" +"2928624328","2928624479","US" +"2928624480","2928624487","MX" +"2928624488","2928624711","US" +"2928624712","2928624719","AU" +"2928624720","2928624791","US" +"2928624792","2928624799","AU" +"2928624800","2928625175","US" +"2928625176","2928625183","AU" +"2928625184","2928625231","US" +"2928625232","2928625239","CA" +"2928625240","2928626175","US" +"2928626176","2928626191","CA" +"2928626192","2928626431","US" +"2928626432","2928626447","HU" +"2928626448","2928626479","CA" +"2928626480","2928626607","US" +"2928626608","2928626623","IN" +"2928626624","2928626831","US" +"2928626832","2928626839","MX" +"2928626840","2928626871","US" +"2928626872","2928626879","AU" +"2928626880","2928626903","US" +"2928626904","2928626911","GB" +"2928626912","2928626975","US" +"2928626976","2928626983","CA" +"2928626984","2928627055","US" +"2928627056","2928627063","AU" +"2928627064","2928627071","GB" +"2928627072","2928627095","US" +"2928627096","2928627103","AU" +"2928627104","2928627167","US" +"2928627168","2928627175","GB" +"2928627176","2928627183","IE" +"2928627184","2928627383","US" +"2928627384","2928627391","AU" +"2928627392","2928627415","US" +"2928627416","2928627423","AU" +"2928627424","2928627431","IL" +"2928627432","2928627439","GB" +"2928627440","2928627463","US" +"2928627464","2928627471","TW" +"2928627472","2928627487","US" +"2928627488","2928627495","IN" +"2928627496","2928627543","US" +"2928627544","2928627551","GB" +"2928627552","2928628783","US" +"2928628784","2928628791","GB" +"2928628792","2928628799","US" +"2928628800","2928628807","CA" +"2928628808","2928628879","US" +"2928628880","2928628887","AU" +"2928628888","2928629007","US" +"2928629008","2928629015","CA" +"2928629016","2928629031","US" +"2928629032","2928629039","HK" +"2928629040","2928629183","US" +"2928629184","2928629191","GB" +"2928629192","2928629199","CA" +"2928629200","2928629207","US" +"2928629208","2928629215","IL" +"2928629216","2928629239","US" +"2928629240","2928629247","GB" +"2928629248","2928629511","US" +"2928629512","2928629519","MX" +"2928629520","2928629607","US" +"2928629608","2928629615","GB" +"2928629616","2928629655","US" +"2928629656","2928629663","IL" +"2928629664","2928629671","US" +"2928629672","2928629679","JP" +"2928629680","2928629695","US" +"2928629696","2928629703","CA" +"2928629704","2928629887","US" +"2928629888","2928629951","BD" +"2928629952","2928630527","US" +"2928630528","2928630559","CA" +"2928630560","2928630791","US" +"2928630792","2928630807","GB" +"2928630808","2928630895","US" +"2928630896","2928630903","MX" +"2928630904","2928630911","HU" +"2928630912","2928631079","US" +"2928631080","2928631087","GB" +"2928631088","2928631111","US" +"2928631112","2928631119","AU" +"2928631120","2928631135","US" +"2928631136","2928631143","CA" +"2928631144","2928631239","US" +"2928631240","2928631247","CA" +"2928631248","2928631311","US" +"2928631312","2928631319","CA" +"2928631320","2928631423","US" +"2928631424","2928631431","MX" +"2928631432","2928631551","US" +"2928631552","2928631559","SG" +"2928631560","2928631567","US" +"2928631568","2928631575","CA" +"2928631576","2928631743","US" +"2928631744","2928631751","MX" +"2928631752","2928631775","US" +"2928631776","2928631783","IL" +"2928631784","2928631855","US" +"2928631856","2928631863","CA" +"2928631864","2928631871","AU" +"2928631872","2928631887","US" +"2928631888","2928631895","FR" +"2928631896","2928631951","US" +"2928631952","2928631959","SG" +"2928631960","2928631975","US" +"2928631976","2928631983","IN" +"2928631984","2928632031","US" +"2928632032","2928632039","NO" +"2928632040","2928632055","US" +"2928632056","2928632063","MX" +"2928632064","2928632223","US" +"2928632224","2928632231","GB" +"2928632232","2928632367","US" +"2928632368","2928632375","IN" +"2928632376","2928632399","US" +"2928632400","2928632407","CA" +"2928632408","2928632519","US" +"2928632520","2928632527","IN" +"2928632528","2928633087","US" +"2928633088","2928633103","CA" +"2928633104","2928633119","US" +"2928633120","2928633135","CA" +"2928633136","2928633199","US" +"2928633200","2928633215","CA" +"2928633216","2928633423","US" +"2928633424","2928633439","IN" +"2928633440","2928633583","US" +"2928633584","2928633599","GB" +"2928633600","2928633879","US" +"2928633880","2928633887","IL" +"2928633888","2928633895","CA" +"2928633896","2928633959","US" +"2928633960","2928633967","GB" +"2928633968","2928634191","US" +"2928634192","2928634199","CH" +"2928634200","2928634247","US" +"2928634248","2928634255","CA" +"2928634256","2928634479","US" +"2928634480","2928634487","CA" +"2928634488","2928634495","US" +"2928634496","2928634503","CN" +"2928634504","2928634511","US" +"2928634512","2928634519","CA" +"2928634520","2928634543","US" +"2928634544","2928634551","IN" +"2928634552","2928634639","US" +"2928634640","2928634647","VG" +"2928634648","2928634655","US" +"2928634656","2928634663","IN" +"2928634664","2928634839","US" +"2928634840","2928634847","GB" +"2928634848","2928634903","US" +"2928634904","2928634911","MX" +"2928634912","2928634935","US" +"2928634936","2928634943","PH" +"2928634944","2928634959","US" +"2928634960","2928634967","CA" +"2928634968","2928635111","US" +"2928635112","2928635119","IN" +"2928635120","2928635127","US" +"2928635128","2928635135","IE" +"2928635136","2928635191","US" +"2928635192","2928635199","IN" +"2928635200","2928635207","US" +"2928635208","2928635215","IN" +"2928635216","2928635271","US" +"2928635272","2928635279","IL" +"2928635280","2928635303","US" +"2928635304","2928635311","CA" +"2928635312","2928635343","US" +"2928635344","2928635351","ZA" +"2928635352","2928635663","US" +"2928635664","2928635671","AU" +"2928635672","2928635815","US" +"2928635816","2928635823","BR" +"2928635824","2928635831","GB" +"2928635832","2928635863","US" +"2928635864","2928635871","AU" +"2928635872","2928636191","US" +"2928636192","2928636199","CA" +"2928636200","2928636375","US" +"2928636376","2928636383","CA" +"2928636384","2928636479","US" +"2928636480","2928636487","SE" +"2928636488","2928636527","US" +"2928636528","2928636535","CA" +"2928636536","2928636655","US" +"2928636656","2928636663","NZ" +"2928636664","2928636927","US" +"2928636928","2928636935","IL" +"2928636936","2928637007","US" +"2928637008","2928637015","BG" +"2928637016","2928637039","US" +"2928637040","2928637047","CA" +"2928637048","2928637487","US" +"2928637488","2928637495","CA" +"2928637496","2928637983","US" +"2928637984","2928637991","IN" +"2928637992","2928638047","US" +"2928638048","2928638055","BE" +"2928638056","2928638095","US" +"2928638096","2928638103","IN" +"2928638104","2928638119","US" +"2928638120","2928638127","IN" +"2928638128","2928638207","US" +"2928638208","2928638215","GB" +"2928638216","2928638359","US" +"2928638360","2928638367","CA" +"2928638368","2928638375","IN" +"2928638376","2928638455","US" +"2928638456","2928638463","MX" +"2928638464","2928638847","US" +"2928638848","2928638855","CA" +"2928638856","2928639527","US" +"2928639528","2928639535","GB" +"2928639536","2928639615","US" +"2928639616","2928639623","CA" +"2928639624","2928639679","US" +"2928639680","2928639687","GB" +"2928639688","2928639767","US" +"2928639768","2928639775","CA" +"2928639776","2928641087","US" +"2928641088","2928641151","CA" +"2928641152","2928641383","US" +"2928641384","2928641391","ID" +"2928641392","2928642599","US" +"2928642600","2928642607","IN" +"2928642608","2928648319","US" +"2928648320","2928648383","BD" +"2928648384","2928648415","US" +"2928648416","2928648447","BD" +"2928648448","2928648479","US" +"2928648480","2928648575","BD" +"2928648576","2928648607","US" +"2928648608","2928648639","BD" +"2928648640","2928649255","US" +"2928649256","2928649263","ZA" +"2928649264","2928649271","IL" +"2928649272","2928649287","US" +"2928649288","2928649295","RO" +"2928649296","2928649303","GR" +"2928649304","2928649311","IN" +"2928649312","2928649351","US" +"2928649352","2928649359","JP" +"2928649360","2928649375","US" +"2928649376","2928649383","IN" +"2928649384","2928649415","US" +"2928649416","2928649423","CA" +"2928649424","2928649447","US" +"2928649448","2928649455","GB" +"2928649456","2928649551","US" +"2928649552","2928649559","BO" +"2928649560","2928650087","US" +"2928650088","2928650095","CZ" +"2928650096","2928650111","US" +"2928650112","2928650119","IN" +"2928650120","2928650151","US" +"2928650152","2928650159","AU" +"2928650160","2928650207","US" +"2928650208","2928650215","IL" +"2928650216","2928655895","US" +"2928655896","2928655903","CA" +"2928655904","2928655927","US" +"2928655928","2928655935","NZ" +"2928655936","2928655943","US" +"2928655944","2928655951","NZ" +"2928655952","2928655983","US" +"2928655984","2928655991","GB" +"2928655992","2928656639","US" +"2928656640","2928656647","CA" +"2928656648","2928656655","US" +"2928656656","2928656663","PK" +"2928656664","2928656823","US" +"2928656824","2928656831","ZA" +"2928656832","2928656879","US" +"2928656880","2928656895","GB" +"2928656896","2928657983","US" +"2928657984","2928658015","NO" +"2928658016","2928662671","US" +"2928662672","2928662687","GB" +"2928662688","2928662879","US" +"2928662880","2928662895","IL" +"2928662896","2928662959","US" +"2928662960","2928662975","IN" +"2928662976","2928663103","US" +"2928663104","2928663119","MX" +"2928663120","2928663759","US" +"2928663760","2928663775","GB" +"2928663776","2928664159","US" +"2928664160","2928664175","GB" +"2928664176","2928664191","US" +"2928664192","2928664207","GB" +"2928664208","2928664527","US" +"2928664528","2928664543","CA" +"2928664544","2928664639","US" +"2928664640","2928664671","GB" +"2928664672","2928665471","US" +"2928665472","2928665503","GB" +"2928665504","2928665535","US" +"2928665536","2928665567","GB" +"2928665568","2928665855","US" +"2928665856","2928665871","GB" +"2928665872","2928666031","US" +"2928666032","2928666047","SG" +"2928666048","2928666159","US" +"2928666160","2928666175","GB" +"2928666176","2928666303","US" +"2928666304","2928666319","AU" +"2928666320","2928666335","US" +"2928666336","2928666351","GB" +"2928666352","2928666591","US" +"2928666592","2928666607","AU" +"2928666608","2936012799","US" +"2936012800","2937847807","CN" +"2937847808","2937848831","KH" +"2937848832","2937849855","JP" +"2937849856","2937850879","SG" +"2937850880","2937851903","MY" +"2937851904","2937855999","JP" +"2937856000","2937860095","KR" +"2937860096","2937864191","JP" +"2937864192","2937880575","SG" +"2937880576","2937913343","JP" +"2937913344","2937978879","BD" +"2937978880","2938109951","CN" +"2938109952","2938634239","AU" +"2938634240","2938699775","IN" +"2938699776","2938703871","KR" +"2938703872","2938707967","HK" +"2938707968","2938710015","JP" +"2938710016","2938712063","AU" +"2938712064","2938716159","TW" +"2938716160","2938732543","JP" +"2938732544","2938733823","SG" +"2938733824","2938734079","AP" +"2938734080","2938748927","SG" +"2938748928","2938765311","JP" +"2938765312","2938961919","CN" +"2938961920","2938978303","HK" +"2938978304","2938996735","AU" +"2938996736","2938998783","JP" +"2938998784","2939002879","AU" +"2939002880","2939004927","KR" +"2939004928","2939006975","JP" +"2939006976","2939007999","KP" +"2939009024","2939011071","ID" +"2939011072","2939027455","KR" +"2939027456","2942304255","CN" +"2942304256","2942566399","TW" +"2942566400","2942599167","KH" +"2942599168","2942608383","IN" +"2942608384","2942609407","HK" +"2942609408","2942615551","IN" +"2942615552","2942619647","HK" +"2942619648","2942631935","JP" +"2942631936","2942697471","IN" +"2942697472","2942763007","CN" +"2942763008","2942767103","JP" +"2942767104","2942771199","AU" +"2942771200","2942779391","ID" +"2942779392","2942795775","VN" +"2942795776","2942959615","JP" +"2942959616","2942960639","VN" +"2942961664","2942965759","ID" +"2942965760","2942967807","AU" +"2942967808","2942975999","AF" +"2942976000","2942992383","KR" +"2942992384","2943025151","CN" +"2943025152","2943041535","PK" +"2943041536","2943057919","KR" +"2943057920","2943074303","AU" +"2943074304","2943090687","PK" +"2943090688","2943221759","JP" +"2943221760","2943291391","PK" +"2943291392","2943295487","KR" +"2943295488","2943303679","TW" +"2943303680","2943309823","JP" +"2943309824","2943310847","ID" +"2943310848","2943311871","JP" +"2943311872","2943312895","HK" +"2943312896","2943313919","NZ" +"2943313920","2943314943","SG" +"2943315968","2943318015","ID" +"2943318016","2943320063","JP" +"2943320064","2943336447","PK" +"2943336448","2943352831","TW" +"2943352832","2944401407","KR" +"2944401408","2944925695","JP" +"2944925696","2945581055","MY" +"2945581056","2946236415","CN" +"2946236416","2946301951","SG" +"2946301952","2946367487","LK" +"2946367488","2946375679","KR" +"2946375680","2946383871","ID" +"2946383872","2946392063","IN" +"2946394112","2946396159","AU" +"2946396160","2946400255","JP" +"2946400256","2946416639","NC" +"2946416640","2946433023","PH" +"2946433024","2946498559","HK" +"2946498560","2947547135","CN" +"2947547136","2947579903","PH" +"2947579904","2947583999","KR" +"2947584000","2947586047","TO" +"2947588096","2947590143","ID" +"2947590144","2947592191","SG" +"2947596288","2947597311","IN" +"2947597312","2947598335","JP" +"2947598336","2947602431","AU" +"2947602432","2947603455","NZ" +"2947603456","2947604479","TH" +"2947604480","2947609855","HK" +"2947609856","2947610111","AF" +"2947610112","2947612671","HK" +"2947612672","2947678207","JP" +"2947678208","2947743743","CN" +"2947743744","2947809279","JP" +"2947809280","2948071423","TW" +"2948071424","2948104191","JP" +"2948104192","2948120575","CN" +"2948120576","2948128767","AU" +"2948128768","2948132863","ID" +"2948132864","2948134911","TW" +"2948134912","2948135935","ID" +"2948135936","2948136959","IN" +"2948136960","2948595711","CN" +"2948595712","2952790015","KR" +"2952790016","2953314303","DE" +"2953314304","2953379839","UA" +"2953379840","2953424959","DE" +"2953424960","2953424975","ES" +"2953424976","2953425183","DE" +"2953425184","2953425199","ES" +"2953425200","2953435071","DE" +"2953435072","2953435079","IT" +"2953435080","2953435855","DE" +"2953435856","2953435863","IT" +"2953435864","2953438191","DE" +"2953438192","2953438199","ES" +"2953438200","2953438231","DE" +"2953438232","2953438239","CH" +"2953438240","2953441263","DE" +"2953441264","2953441279","IT" +"2953441280","2953443031","DE" +"2953443032","2953443039","IT" +"2953443040","2953444183","DE" +"2953444184","2953444191","IT" +"2953444192","2953445375","DE" +"2953445376","2953453567","IT" +"2953453568","2953455615","IS" +"2953455616","2953457663","SK" +"2953457664","2953459711","DE" +"2953459712","2953461759","IT" +"2953461760","2953465855","ES" +"2953465856","2953465991","GB" +"2953465992","2953466111","EU" +"2953466112","2953466127","GB" +"2953466128","2953466367","EU" +"2953466368","2953467135","GB" +"2953467136","2953467391","US" +"2953467392","2953467903","EU" +"2953467904","2953469951","BE" +"2953469952","2953478143","CH" +"2953478144","2953503551","SE" +"2953503552","2953503559","NO" +"2953503560","2953503567","SE" +"2953503568","2953503583","NO" +"2953503584","2953510911","SE" +"2953510912","2953576447","NO" +"2953576448","2953592831","BG" +"2953592832","2953596927","IR" +"2953596928","2953598975","ES" +"2953598976","2953601023","IT" +"2953601024","2953603071","RU" +"2953603072","2953605119","GB" +"2953605120","2953609215","CZ" +"2953609216","2953707519","IL" +"2953707520","2953838591","RU" +"2953838592","2954100735","SA" +"2954100736","2954362879","DK" +"2954362880","2954625023","GB" +"2954625024","2954641407","DE" +"2954641408","2954643455","RU" +"2954643456","2954645503","IQ" +"2954645504","2954647551","AZ" +"2954647552","2954650543","ES" +"2954650544","2954650559","IT" +"2954650560","2954657791","ES" +"2954657792","2954756095","JO" +"2954756096","2954821631","TR" +"2954821632","2954821647","FR" +"2954821648","2954821651","ES" +"2954821652","2954821655","NL" +"2954821656","2954821703","FR" +"2954821704","2954821707","GB" +"2954821708","2954821715","DE" +"2954821716","2954821719","GB" +"2954821720","2954821723","PL" +"2954821724","2954821727","FR" +"2954821728","2954821775","IE" +"2954821776","2954821783","DE" +"2954821784","2954821787","ES" +"2954821788","2954821791","FR" +"2954821792","2954821823","ES" +"2954821824","2954821855","GB" +"2954821856","2954821887","IT" +"2954821888","2954821919","NL" +"2954821920","2954821951","FR" +"2954821952","2954821983","ES" +"2954821984","2954822015","GB" +"2954822016","2954822047","IT" +"2954822048","2954822079","DE" +"2954822080","2954822143","IE" +"2954822144","2954822175","FR" +"2954822176","2954822271","PL" +"2954822272","2954822287","FR" +"2954822288","2954822303","NL" +"2954822304","2954822335","FR" +"2954822336","2954822343","GB" +"2954822344","2954822347","ES" +"2954822348","2954822351","PL" +"2954822352","2954822367","FR" +"2954822368","2954822399","IT" +"2954822400","2954822431","PL" +"2954822432","2954822451","FR" +"2954822452","2954822463","ES" +"2954822464","2954822479","FR" +"2954822480","2954822483","DE" +"2954822484","2954822487","ES" +"2954822488","2954822491","FR" +"2954822492","2954822495","DE" +"2954822496","2954822527","FR" +"2954822528","2954822531","GB" +"2954822532","2954822535","FR" +"2954822536","2954822539","PL" +"2954822540","2954822547","IT" +"2954822548","2954822551","FR" +"2954822552","2954822559","PL" +"2954822560","2954822591","ES" +"2954822592","2954822599","GB" +"2954822600","2954822607","DE" +"2954822608","2954822655","FR" +"2954822656","2954822719","ES" +"2954822720","2954822751","DE" +"2954822752","2954822783","ES" +"2954822784","2954822791","NL" +"2954822792","2954822879","FR" +"2954822880","2954822887","ES" +"2954822888","2954822891","GB" +"2954822892","2954822895","IE" +"2954822896","2954822911","FR" +"2954822912","2954822915","DE" +"2954822916","2954822919","PL" +"2954822920","2954822923","PT" +"2954822924","2954822927","NL" +"2954822928","2954822931","LT" +"2954822932","2954822935","FR" +"2954822936","2954822939","IT" +"2954822940","2954822943","IE" +"2954822944","2954822947","GB" +"2954822948","2954822959","FR" +"2954822960","2954822963","FI" +"2954822964","2954822975","FR" +"2954822976","2954822991","PL" +"2954822992","2954823035","FR" +"2954823036","2954823039","IT" +"2954823040","2954823043","FR" +"2954823044","2954823047","DE" +"2954823048","2954823055","FR" +"2954823056","2954823071","IE" +"2954823072","2954823103","DE" +"2954823104","2954823167","FR" +"2954823168","2954823199","IE" +"2954823200","2954823203","DE" +"2954823204","2954823207","PL" +"2954823208","2954823211","GB" +"2954823212","2954823215","PL" +"2954823216","2954823223","IE" +"2954823224","2954823247","FR" +"2954823248","2954823251","ES" +"2954823252","2954823255","FR" +"2954823256","2954823259","ES" +"2954823260","2954823263","GB" +"2954823264","2954823295","ES" +"2954823296","2954823311","PL" +"2954823312","2954823327","IE" +"2954823328","2954823387","FR" +"2954823388","2954823391","DE" +"2954823392","2954823395","PT" +"2954823396","2954823399","GB" +"2954823400","2954823403","PT" +"2954823404","2954823407","GB" +"2954823408","2954823423","DE" +"2954823424","2954823551","IE" +"2954823552","2954823555","GB" +"2954823556","2954823559","FR" +"2954823560","2954823563","PL" +"2954823564","2954823599","FR" +"2954823600","2954823607","ES" +"2954823608","2954823611","CH" +"2954823612","2954823615","FR" +"2954823616","2954823619","GB" +"2954823620","2954823623","PL" +"2954823624","2954823627","FR" +"2954823628","2954823631","ES" +"2954823632","2954823643","FR" +"2954823644","2954823647","ES" +"2954823648","2954823695","FR" +"2954823696","2954823711","PT" +"2954823712","2954823715","FR" +"2954823716","2954823719","ES" +"2954823720","2954823727","FR" +"2954823728","2954823735","PT" +"2954823736","2954823743","NL" +"2954823744","2954823759","CZ" +"2954823760","2954823767","IT" +"2954823768","2954823771","GB" +"2954823772","2954823775","PL" +"2954823776","2954823779","FR" +"2954823780","2954823783","CZ" +"2954823784","2954823787","ES" +"2954823788","2954823791","NL" +"2954823792","2954823807","IE" +"2954823808","2954823887","PL" +"2954823888","2954823891","ES" +"2954823892","2954823895","NL" +"2954823896","2954823899","PL" +"2954823900","2954823903","ES" +"2954823904","2954823915","PL" +"2954823916","2954823919","FR" +"2954823920","2954823927","GB" +"2954823928","2954823935","PL" +"2954823936","2954823999","FR" +"2954824000","2954824031","GB" +"2954824032","2954824063","FR" +"2954824064","2954824071","GB" +"2954824072","2954824075","FI" +"2954824076","2954824079","FR" +"2954824080","2954824083","PL" +"2954824084","2954824087","NL" +"2954824088","2954824091","IE" +"2954824092","2954824095","PL" +"2954824096","2954824127","GB" +"2954824128","2954824131","PL" +"2954824132","2954824135","BE" +"2954824136","2954824139","IE" +"2954824140","2954824159","FR" +"2954824160","2954824175","IE" +"2954824176","2954824223","PL" +"2954824224","2954824271","FR" +"2954824272","2954824275","GB" +"2954824276","2954824279","FR" +"2954824280","2954824283","PL" +"2954824284","2954824287","FR" +"2954824288","2954824319","ES" +"2954824320","2954824367","FR" +"2954824368","2954824371","DE" +"2954824372","2954824431","FR" +"2954824432","2954824447","BE" +"2954824448","2954824451","FR" +"2954824452","2954824455","DE" +"2954824456","2954824463","NL" +"2954824464","2954824479","FR" +"2954824480","2954824511","BE" +"2954824512","2954824543","GB" +"2954824544","2954824607","FR" +"2954824608","2954824611","GB" +"2954824612","2954824623","FR" +"2954824624","2954824627","GB" +"2954824628","2954824631","PL" +"2954824632","2954824635","FR" +"2954824636","2954824639","PL" +"2954824640","2954824671","IT" +"2954824672","2954824703","ES" +"2954824704","2954824707","FR" +"2954824708","2954824711","IT" +"2954824712","2954824719","FR" +"2954824720","2954824767","IE" +"2954824768","2954824775","FR" +"2954824776","2954824779","NL" +"2954824780","2954824783","FI" +"2954824784","2954824799","FR" +"2954824800","2954824831","PT" +"2954824832","2954824863","PL" +"2954824864","2954824895","IE" +"2954824896","2954824903","GB" +"2954824904","2954824907","CH" +"2954824908","2954824911","BE" +"2954824912","2954824915","ES" +"2954824916","2954824919","BE" +"2954824920","2954824923","GB" +"2954824924","2954824927","ES" +"2954824928","2954824931","GB" +"2954824932","2954824943","ES" +"2954824944","2954824959","FR" +"2954824960","2954824975","IE" +"2954824976","2954825023","FR" +"2954825024","2954825031","DE" +"2954825032","2954825063","FR" +"2954825064","2954825067","ES" +"2954825068","2954825071","GB" +"2954825072","2954825087","BE" +"2954825088","2954825095","CZ" +"2954825096","2954825099","FR" +"2954825100","2954825103","PL" +"2954825104","2954825119","DE" +"2954825120","2954825151","PL" +"2954825152","2954825159","FR" +"2954825160","2954825163","DE" +"2954825164","2954825167","GB" +"2954825168","2954825171","DE" +"2954825172","2954825175","NL" +"2954825176","2954825179","IE" +"2954825180","2954825183","GB" +"2954825184","2954825187","DE" +"2954825188","2954825191","NL" +"2954825192","2954825195","FR" +"2954825196","2954825199","IE" +"2954825200","2954825203","FR" +"2954825204","2954825207","IT" +"2954825208","2954825211","GB" +"2954825212","2954825215","DE" +"2954825216","2954825231","FR" +"2954825232","2954825235","BE" +"2954825236","2954825239","PL" +"2954825240","2954825243","ES" +"2954825244","2954825247","CZ" +"2954825248","2954825263","GB" +"2954825264","2954825267","IT" +"2954825268","2954825271","GB" +"2954825272","2954825275","ES" +"2954825276","2954825311","FR" +"2954825312","2954825315","GB" +"2954825316","2954825319","DE" +"2954825320","2954825327","ES" +"2954825328","2954825331","GB" +"2954825332","2954825343","NL" +"2954825344","2954825351","FR" +"2954825352","2954825359","PT" +"2954825360","2954825375","DE" +"2954825376","2954825383","PT" +"2954825384","2954825387","PL" +"2954825388","2954825391","ES" +"2954825392","2954825395","NL" +"2954825396","2954825455","FR" +"2954825456","2954825459","GB" +"2954825460","2954825467","FR" +"2954825468","2954825471","NL" +"2954825472","2954825535","IE" +"2954825536","2954825539","PL" +"2954825540","2954825543","FI" +"2954825544","2954825547","BE" +"2954825548","2954825551","DE" +"2954825552","2954825599","FR" +"2954825600","2954825631","PL" +"2954825632","2954825639","IE" +"2954825640","2954825655","FR" +"2954825656","2954825659","PL" +"2954825660","2954825663","FR" +"2954825664","2954825727","GB" +"2954825728","2954825791","FR" +"2954825792","2954825823","NL" +"2954825824","2954825855","ES" +"2954825856","2954825887","FR" +"2954825888","2954825919","IT" +"2954825920","2954825923","CH" +"2954825924","2954825927","IT" +"2954825928","2954825931","PL" +"2954825932","2954825935","GB" +"2954825936","2954825939","BE" +"2954825940","2954825951","FR" +"2954825952","2954825967","PL" +"2954825968","2954825983","ES" +"2954825984","2954826015","FR" +"2954826016","2954826019","PT" +"2954826020","2954826023","PL" +"2954826024","2954826031","FR" +"2954826032","2954826035","PL" +"2954826036","2954826039","ES" +"2954826040","2954826043","PL" +"2954826044","2954826047","NL" +"2954826048","2954826063","FR" +"2954826064","2954826067","BE" +"2954826068","2954826071","NL" +"2954826072","2954826079","IE" +"2954826080","2954826147","FR" +"2954826148","2954826151","IE" +"2954826152","2954826159","ES" +"2954826160","2954826167","PL" +"2954826168","2954826239","FR" +"2954826240","2954826243","IT" +"2954826244","2954826247","GB" +"2954826248","2954826255","CH" +"2954826256","2954826259","GB" +"2954826260","2954826263","PL" +"2954826264","2954826267","FR" +"2954826268","2954826271","NL" +"2954826272","2954826279","FR" +"2954826280","2954826283","IT" +"2954826284","2954826287","GB" +"2954826288","2954826291","FI" +"2954826292","2954826295","DE" +"2954826296","2954826299","FR" +"2954826300","2954826303","GB" +"2954826304","2954826367","FR" +"2954826368","2954826371","DE" +"2954826372","2954826375","GB" +"2954826376","2954826383","FR" +"2954826384","2954826391","PL" +"2954826392","2954826403","FR" +"2954826404","2954826407","BE" +"2954826408","2954826411","ES" +"2954826412","2954826415","FR" +"2954826416","2954826419","GB" +"2954826420","2954826423","PT" +"2954826424","2954826427","PL" +"2954826428","2954826431","PT" +"2954826432","2954826447","IT" +"2954826448","2954826451","GB" +"2954826452","2954826471","FR" +"2954826472","2954826475","GB" +"2954826476","2954826483","FR" +"2954826484","2954826487","NL" +"2954826488","2954826491","LT" +"2954826492","2954826751","FR" +"2954826752","2954826755","CH" +"2954826756","2954826759","GB" +"2954826760","2954826763","PL" +"2954826764","2954826767","IE" +"2954826768","2954826771","GB" +"2954826772","2954826775","PL" +"2954826776","2954826779","FR" +"2954826780","2954826783","PL" +"2954826784","2954826795","FR" +"2954826796","2954826799","DE" +"2954826800","2954826807","NL" +"2954826808","2954826811","FR" +"2954826812","2954826815","IT" +"2954826816","2954826879","FR" +"2954826880","2954827263","DE" +"2954827264","2954827295","IE" +"2954827296","2954827391","DE" +"2954827392","2954827487","IE" +"2954827488","2954827519","GB" +"2954827520","2954827647","FR" +"2954827648","2954827775","GB" +"2954827776","2954827799","FR" +"2954827800","2954827807","DE" +"2954827808","2954827815","PL" +"2954827816","2954827819","FR" +"2954827820","2954827823","ES" +"2954827824","2954827827","DE" +"2954827828","2954827831","PT" +"2954827832","2954827835","IE" +"2954827836","2954827839","DE" +"2954827840","2954827855","BE" +"2954827856","2954827863","PT" +"2954827864","2954827883","FR" +"2954827884","2954827887","DE" +"2954827888","2954827939","FR" +"2954827940","2954827943","PT" +"2954827944","2954827947","NL" +"2954827948","2954827967","FR" +"2954827968","2954827971","CZ" +"2954827972","2954827975","CH" +"2954827976","2954827979","FR" +"2954827980","2954827983","IE" +"2954827984","2954827987","DE" +"2954827988","2954827999","PL" +"2954828000","2954828031","IE" +"2954828032","2954828287","FR" +"2954828288","2954828291","CZ" +"2954828292","2954828295","DE" +"2954828296","2954828299","CH" +"2954828300","2954828303","DE" +"2954828304","2954828307","PL" +"2954828308","2954828311","BE" +"2954828312","2954828315","FR" +"2954828316","2954828319","IE" +"2954828320","2954828335","FR" +"2954828336","2954828343","IE" +"2954828344","2954828347","FI" +"2954828348","2954828351","DE" +"2954828352","2954828415","FR" +"2954828416","2954828431","IT" +"2954828432","2954828439","IE" +"2954828440","2954828443","GB" +"2954828444","2954828447","ES" +"2954828448","2954828463","FR" +"2954828464","2954828467","FI" +"2954828468","2954828471","PL" +"2954828472","2954828479","FR" +"2954828480","2954828495","ES" +"2954828496","2954828511","IT" +"2954828512","2954828799","FR" +"2954828800","2954828815","NL" +"2954828816","2954828819","FR" +"2954828820","2954828823","GB" +"2954828824","2954828831","PT" +"2954828832","2954828835","ES" +"2954828836","2954828839","DE" +"2954828840","2954828863","GB" +"2954828864","2954828895","FR" +"2954828896","2954828927","BE" +"2954828928","2954828943","IE" +"2954828944","2954828955","FR" +"2954828956","2954828959","DE" +"2954828960","2954828975","FR" +"2954828976","2954828983","GB" +"2954828984","2954828991","PL" +"2954828992","2954828999","IT" +"2954829000","2954829007","LT" +"2954829008","2954829023","IE" +"2954829024","2954829119","FR" +"2954829120","2954829135","NL" +"2954829136","2954829139","FR" +"2954829140","2954829143","CZ" +"2954829144","2954829151","GB" +"2954829152","2954829167","CH" +"2954829168","2954829171","NL" +"2954829172","2954829175","IE" +"2954829176","2954829179","NL" +"2954829180","2954829183","GB" +"2954829184","2954829215","BE" +"2954829216","2954829247","NL" +"2954829248","2954829311","PT" +"2954829312","2954829319","ES" +"2954829320","2954829323","LT" +"2954829324","2954829327","BE" +"2954829328","2954829331","FR" +"2954829332","2954829335","CZ" +"2954829336","2954829343","GB" +"2954829344","2954829375","IT" +"2954829376","2954829383","GB" +"2954829384","2954829387","FR" +"2954829388","2954829391","IE" +"2954829392","2954829395","FR" +"2954829396","2954829399","LT" +"2954829400","2954829407","PL" +"2954829408","2954829423","IE" +"2954829424","2954829427","FR" +"2954829428","2954829431","PL" +"2954829432","2954829435","FR" +"2954829436","2954829439","DE" +"2954829440","2954829455","FR" +"2954829456","2954829471","GB" +"2954829472","2954829487","FR" +"2954829488","2954829495","IT" +"2954829496","2954829499","NL" +"2954829500","2954829503","IT" +"2954829504","2954829519","FR" +"2954829520","2954829535","GB" +"2954829536","2954829559","FR" +"2954829560","2954829563","BE" +"2954829564","2954829567","FI" +"2954829568","2954829603","FR" +"2954829604","2954829607","PT" +"2954829608","2954829615","NL" +"2954829616","2954829623","GB" +"2954829624","2954829631","ES" +"2954829632","2954829647","GB" +"2954829648","2954829695","FR" +"2954829696","2954829699","BE" +"2954829700","2954829703","ES" +"2954829704","2954829727","FR" +"2954829728","2954829731","PL" +"2954829732","2954829735","GB" +"2954829736","2954829739","FI" +"2954829740","2954829743","NL" +"2954829744","2954829751","FR" +"2954829752","2954829755","CH" +"2954829756","2954829823","FR" +"2954829824","2954829827","BE" +"2954829828","2954829831","NL" +"2954829832","2954829839","DE" +"2954829840","2954829875","FR" +"2954829876","2954829879","GB" +"2954829880","2954829887","FR" +"2954829888","2954829903","PL" +"2954829904","2954829919","GB" +"2954829920","2954829951","FR" +"2954829952","2954829959","ES" +"2954829960","2954829963","PT" +"2954829964","2954829967","PL" +"2954829968","2954829975","FR" +"2954829976","2954829983","NL" +"2954829984","2954830015","DE" +"2954830016","2954830079","GB" +"2954830080","2954830111","IT" +"2954830112","2954830143","FR" +"2954830144","2954830147","ES" +"2954830148","2954830151","PL" +"2954830152","2954830159","FR" +"2954830160","2954830163","GB" +"2954830164","2954830167","PT" +"2954830168","2954830175","DE" +"2954830176","2954830271","FR" +"2954830272","2954830279","DE" +"2954830280","2954830283","PL" +"2954830284","2954830287","DE" +"2954830288","2954830303","FR" +"2954830304","2954830367","DE" +"2954830368","2954830375","NL" +"2954830376","2954830383","ES" +"2954830384","2954830387","PL" +"2954830388","2954830391","BE" +"2954830392","2954830399","FR" +"2954830400","2954830415","IT" +"2954830416","2954830431","ES" +"2954830432","2954830447","FR" +"2954830448","2954830451","CZ" +"2954830452","2954830455","BE" +"2954830456","2954830463","CH" +"2954830464","2954830591","PL" +"2954830592","2954830847","GB" +"2954830848","2954830855","ES" +"2954830856","2954830859","FR" +"2954830860","2954830863","GB" +"2954830864","2954830879","FR" +"2954830880","2954830887","GB" +"2954830888","2954830891","FR" +"2954830892","2954830895","ES" +"2954830896","2954830931","FR" +"2954830932","2954830935","IE" +"2954830936","2954830975","FR" +"2954830976","2954831103","PL" +"2954831104","2954831167","PT" +"2954831168","2954831231","FR" +"2954831232","2954831263","DE" +"2954831264","2954831267","FR" +"2954831268","2954831271","PL" +"2954831272","2954831275","FR" +"2954831276","2954831279","IT" +"2954831280","2954831295","CH" +"2954831296","2954831327","FR" +"2954831328","2954831331","PL" +"2954831332","2954831335","FR" +"2954831336","2954831339","PL" +"2954831340","2954831343","GB" +"2954831344","2954831359","PL" +"2954831360","2954831391","FR" +"2954831392","2954831399","CZ" +"2954831400","2954831403","CH" +"2954831404","2954831407","DE" +"2954831408","2954831411","ES" +"2954831412","2954831423","DE" +"2954831424","2954831487","FR" +"2954831488","2954831519","DE" +"2954831520","2954831523","FI" +"2954831524","2954831527","DE" +"2954831528","2954831539","PT" +"2954831540","2954831543","GB" +"2954831544","2954831547","IT" +"2954831548","2954831551","PT" +"2954831552","2954831583","DE" +"2954831584","2954831599","ES" +"2954831600","2954831603","PT" +"2954831604","2954831607","BE" +"2954831608","2954831611","FR" +"2954831612","2954831615","ES" +"2954831616","2954831647","FR" +"2954831648","2954831651","GB" +"2954831652","2954831667","FR" +"2954831668","2954831671","PL" +"2954831672","2954831675","DE" +"2954831676","2954831711","FR" +"2954831712","2954831743","ES" +"2954831744","2954831747","FR" +"2954831748","2954831751","DE" +"2954831752","2954831759","FR" +"2954831760","2954831775","FI" +"2954831776","2954831779","CH" +"2954831780","2954831783","FR" +"2954831784","2954831787","DE" +"2954831788","2954831791","CZ" +"2954831792","2954831799","NL" +"2954831800","2954831807","FR" +"2954831808","2954831839","GB" +"2954831840","2954831919","FR" +"2954831920","2954831923","PL" +"2954831924","2954831927","PT" +"2954831928","2954831935","IE" +"2954831936","2954831983","FR" +"2954831984","2954831999","BE" +"2954832000","2954832003","PL" +"2954832004","2954832023","FR" +"2954832024","2954832063","PL" +"2954832064","2954832071","FR" +"2954832072","2954832079","IE" +"2954832080","2954832127","FR" +"2954832128","2954832135","GB" +"2954832136","2954832143","PL" +"2954832144","2954832159","FR" +"2954832160","2954832167","ES" +"2954832168","2954832175","IE" +"2954832176","2954832191","FR" +"2954832192","2954832207","PL" +"2954832208","2954832211","PT" +"2954832212","2954832215","FR" +"2954832216","2954832219","DE" +"2954832220","2954832223","FR" +"2954832224","2954832255","BE" +"2954832256","2954832335","FR" +"2954832336","2954832343","DE" +"2954832344","2954832347","FR" +"2954832348","2954832351","ES" +"2954832352","2954832383","FR" +"2954832384","2954832639","NL" +"2954832640","2954832643","DE" +"2954832644","2954832647","FR" +"2954832648","2954832651","ES" +"2954832652","2954832655","GB" +"2954832656","2954832671","FR" +"2954832672","2954832675","IE" +"2954832676","2954832679","FR" +"2954832680","2954832687","PL" +"2954832688","2954832691","GB" +"2954832692","2954832695","DE" +"2954832696","2954832699","GB" +"2954832700","2954832703","CH" +"2954832704","2954832775","FR" +"2954832776","2954832779","PL" +"2954832780","2954832783","NL" +"2954832784","2954832799","FR" +"2954832800","2954832815","ES" +"2954832816","2954832823","FR" +"2954832824","2954832831","ES" +"2954832832","2954832835","GB" +"2954832836","2954832839","LT" +"2954832840","2954832847","GB" +"2954832848","2954832851","IT" +"2954832852","2954832855","PL" +"2954832856","2954832859","DE" +"2954832860","2954832863","ES" +"2954832864","2954832887","FR" +"2954832888","2954832891","PL" +"2954832892","2954832959","FR" +"2954832960","2954832975","IT" +"2954832976","2954832991","FR" +"2954832992","2954833023","GB" +"2954833024","2954833047","FR" +"2954833048","2954833055","ES" +"2954833056","2954833071","FR" +"2954833072","2954833075","PT" +"2954833076","2954833079","ES" +"2954833080","2954833083","GB" +"2954833084","2954833087","PL" +"2954833088","2954833095","FR" +"2954833096","2954833099","GB" +"2954833100","2954833103","FR" +"2954833104","2954833111","CZ" +"2954833112","2954833119","FR" +"2954833120","2954833151","PL" +"2954833152","2954833183","FR" +"2954833184","2954833199","PL" +"2954833200","2954833207","FR" +"2954833208","2954833211","CH" +"2954833212","2954833215","FR" +"2954833216","2954833219","DE" +"2954833220","2954833223","IT" +"2954833224","2954833227","FR" +"2954833228","2954833231","CH" +"2954833232","2954833247","ES" +"2954833248","2954833255","FR" +"2954833256","2954833263","PL" +"2954833264","2954833271","FR" +"2954833272","2954833279","DE" +"2954833280","2954833283","PL" +"2954833284","2954833287","FR" +"2954833288","2954833295","IE" +"2954833296","2954833315","FR" +"2954833316","2954833319","CZ" +"2954833320","2954833343","FR" +"2954833344","2954833407","GB" +"2954833408","2954833415","FR" +"2954833416","2954833419","ES" +"2954833420","2954833423","IT" +"2954833424","2954833439","GB" +"2954833440","2954833443","FR" +"2954833444","2954833447","PL" +"2954833448","2954833451","GB" +"2954833452","2954833455","DE" +"2954833456","2954833471","ES" +"2954833472","2954833487","FR" +"2954833488","2954833503","BE" +"2954833504","2954833535","FR" +"2954833536","2954833539","PL" +"2954833540","2954833551","DE" +"2954833552","2954833555","FR" +"2954833556","2954833559","IE" +"2954833560","2954833563","IT" +"2954833564","2954833571","PL" +"2954833572","2954833575","FR" +"2954833576","2954833583","PL" +"2954833584","2954833587","FR" +"2954833588","2954833591","IT" +"2954833592","2954833595","GB" +"2954833596","2954833599","FR" +"2954833600","2954833603","FI" +"2954833604","2954833607","FR" +"2954833608","2954833611","PL" +"2954833612","2954833615","ES" +"2954833616","2954833631","GB" +"2954833632","2954833635","FR" +"2954833636","2954833639","CZ" +"2954833640","2954833647","CH" +"2954833648","2954833663","FI" +"2954833664","2954833695","IE" +"2954833696","2954833699","PL" +"2954833700","2954833703","BE" +"2954833704","2954833707","FR" +"2954833708","2954833711","FI" +"2954833712","2954833719","PL" +"2954833720","2954833723","DE" +"2954833724","2954833727","PL" +"2954833728","2954833731","DE" +"2954833732","2954833735","FR" +"2954833736","2954833743","PT" +"2954833744","2954833759","FR" +"2954833760","2954833791","BE" +"2954833792","2954833807","PL" +"2954833808","2954833811","ES" +"2954833812","2954833815","PL" +"2954833816","2954833823","PT" +"2954833824","2954833855","GB" +"2954833856","2954833919","FR" +"2954833920","2954833927","PL" +"2954833928","2954833931","ES" +"2954833932","2954833935","FR" +"2954833936","2954833951","NL" +"2954833952","2954833967","FR" +"2954833968","2954833983","ES" +"2954833984","2954833999","FR" +"2954834000","2954834003","PL" +"2954834004","2954834007","DE" +"2954834008","2954834011","PL" +"2954834012","2954834015","GB" +"2954834016","2954834047","PL" +"2954834048","2954834063","GB" +"2954834064","2954834067","PL" +"2954834068","2954834071","NL" +"2954834072","2954834079","PL" +"2954834080","2954834095","FR" +"2954834096","2954834099","PL" +"2954834100","2954834103","CH" +"2954834104","2954834107","PL" +"2954834108","2954834111","PT" +"2954834112","2954834143","FR" +"2954834144","2954834151","GB" +"2954834152","2954834431","FR" +"2954834432","2954834435","PL" +"2954834436","2954834439","IE" +"2954834440","2954834443","NL" +"2954834444","2954834447","LT" +"2954834448","2954834451","PL" +"2954834452","2954834459","IT" +"2954834460","2954834467","FR" +"2954834468","2954834479","ES" +"2954834480","2954834483","FR" +"2954834484","2954834491","ES" +"2954834492","2954834495","GB" +"2954834496","2954834527","IT" +"2954834528","2954834531","FR" +"2954834532","2954834535","PL" +"2954834536","2954834539","FR" +"2954834540","2954834575","PL" +"2954834576","2954834579","GB" +"2954834580","2954834583","IT" +"2954834584","2954834591","IE" +"2954834592","2954834607","FR" +"2954834608","2954834611","PT" +"2954834612","2954834615","ES" +"2954834616","2954834623","FR" +"2954834624","2954834627","PL" +"2954834628","2954834631","DE" +"2954834632","2954834635","IT" +"2954834636","2954834643","FR" +"2954834644","2954834647","GB" +"2954834648","2954834651","FR" +"2954834652","2954834655","NL" +"2954834656","2954834663","DE" +"2954834664","2954834671","ES" +"2954834672","2954834675","NL" +"2954834676","2954834679","FR" +"2954834680","2954834683","ES" +"2954834684","2954834687","GB" +"2954834688","2954834691","NL" +"2954834692","2954834695","PL" +"2954834696","2954834751","FR" +"2954834752","2954834755","PL" +"2954834756","2954834759","FR" +"2954834760","2954834763","PL" +"2954834764","2954834799","FR" +"2954834800","2954834803","GB" +"2954834804","2954834807","FR" +"2954834808","2954834811","GB" +"2954834812","2954834879","FR" +"2954834880","2954834911","PL" +"2954834912","2954835215","FR" +"2954835216","2954835223","IT" +"2954835224","2954835227","PT" +"2954835228","2954835231","PL" +"2954835232","2954835263","FR" +"2954835264","2954835279","DE" +"2954835280","2954835283","FR" +"2954835284","2954835287","ES" +"2954835288","2954835295","IT" +"2954835296","2954835299","FR" +"2954835300","2954835303","LT" +"2954835304","2954835307","ES" +"2954835308","2954835311","GB" +"2954835312","2954835327","FR" +"2954835328","2954835335","ES" +"2954835336","2954835359","IE" +"2954835360","2954835363","BE" +"2954835364","2954835367","NL" +"2954835368","2954835371","IT" +"2954835372","2954835375","FR" +"2954835376","2954835391","CH" +"2954835392","2954835399","DE" +"2954835400","2954835403","FR" +"2954835404","2954835407","ES" +"2954835408","2954835415","FR" +"2954835416","2954835419","CH" +"2954835420","2954835423","GB" +"2954835424","2954835487","DE" +"2954835488","2954835511","FR" +"2954835512","2954835519","ES" +"2954835520","2954835539","PL" +"2954835540","2954835543","FR" +"2954835544","2954835547","GB" +"2954835548","2954835551","PL" +"2954835552","2954835583","FR" +"2954835584","2954835599","PL" +"2954835600","2954835603","FR" +"2954835604","2954835611","DE" +"2954835612","2954835615","PL" +"2954835616","2954835619","CZ" +"2954835620","2954835623","ES" +"2954835624","2954835627","DE" +"2954835628","2954835635","ES" +"2954835636","2954835643","PT" +"2954835644","2954835655","ES" +"2954835656","2954835659","PT" +"2954835660","2954835663","FR" +"2954835664","2954835679","PL" +"2954835680","2954835687","DE" +"2954835688","2954835699","FR" +"2954835700","2954835711","ES" +"2954835712","2954836223","FR" +"2954836224","2954836287","DE" +"2954836288","2954836319","ES" +"2954836320","2954836335","FR" +"2954836336","2954836339","IT" +"2954836340","2954836343","FR" +"2954836344","2954836351","PL" +"2954836352","2954836367","FR" +"2954836368","2954836383","CZ" +"2954836384","2954836407","FR" +"2954836408","2954836415","GB" +"2954836416","2954836423","FR" +"2954836424","2954836431","GB" +"2954836432","2954836435","IT" +"2954836436","2954836439","CH" +"2954836440","2954836447","GB" +"2954836448","2954836479","DE" +"2954836480","2954836735","FR" +"2954836736","2954836743","ES" +"2954836744","2954836759","FR" +"2954836760","2954836767","CH" +"2954836768","2954836863","FR" +"2954836864","2954836875","ES" +"2954836876","2954836879","A1" +"2954836880","2954836895","IT" +"2954836896","2954836903","PL" +"2954836904","2954836927","FR" +"2954836928","2954836959","DE" +"2954836960","2954836975","CH" +"2954836976","2954836979","ES" +"2954836980","2954836983","NL" +"2954836984","2954836991","GB" +"2954836992","2954837023","PT" +"2954837024","2954837055","DE" +"2954837056","2954837071","IT" +"2954837072","2954837075","ES" +"2954837076","2954837079","FR" +"2954837080","2954837083","FI" +"2954837084","2954837087","GB" +"2954837088","2954837091","ES" +"2954837092","2954837095","FR" +"2954837096","2954837103","DE" +"2954837104","2954837123","FR" +"2954837124","2954837127","IE" +"2954837128","2954837131","DE" +"2954837132","2954837135","FI" +"2954837136","2954837151","PL" +"2954837152","2954837215","FR" +"2954837216","2954837247","PL" +"2954837248","2954837295","DE" +"2954837296","2954837311","FR" +"2954837312","2954837319","FI" +"2954837320","2954837327","NL" +"2954837328","2954837335","GB" +"2954837336","2954837343","LT" +"2954837344","2954837351","FR" +"2954837352","2954837355","PL" +"2954837356","2954837375","FR" +"2954837376","2954837383","LT" +"2954837384","2954837391","PL" +"2954837392","2954837407","FR" +"2954837408","2954837423","ES" +"2954837424","2954837427","FR" +"2954837428","2954837435","GB" +"2954837436","2954837439","FR" +"2954837440","2954837471","GB" +"2954837472","2954837483","ES" +"2954837484","2954837487","PL" +"2954837488","2954837495","CH" +"2954837496","2954837535","FR" +"2954837536","2954837543","GB" +"2954837544","2954837551","IT" +"2954837552","2954837555","LT" +"2954837556","2954837559","FR" +"2954837560","2954837563","GB" +"2954837564","2954837567","PT" +"2954837568","2954837571","FR" +"2954837572","2954837575","GB" +"2954837576","2954837579","NL" +"2954837580","2954837583","GB" +"2954837584","2954837591","IE" +"2954837592","2954837599","PL" +"2954837600","2954837631","DE" +"2954837632","2954837639","FR" +"2954837640","2954837643","PL" +"2954837644","2954837647","GB" +"2954837648","2954837651","NL" +"2954837652","2954837667","FR" +"2954837668","2954837671","CZ" +"2954837672","2954837679","BE" +"2954837680","2954837687","FR" +"2954837688","2954837695","NL" +"2954837696","2954837727","FR" +"2954837728","2954837743","GB" +"2954837744","2954837775","FR" +"2954837776","2954837791","DE" +"2954837792","2954837823","GB" +"2954837824","2954837827","FR" +"2954837828","2954837831","DE" +"2954837832","2954837839","PL" +"2954837840","2954837843","ES" +"2954837844","2954837851","FR" +"2954837852","2954837855","IT" +"2954837856","2954837887","DE" +"2954837888","2954837903","IT" +"2954837904","2954837919","FR" +"2954837920","2954837951","DE" +"2954837952","2954838015","FR" +"2954838016","2954838019","PL" +"2954838020","2954838047","FR" +"2954838048","2954838055","DE" +"2954838056","2954838071","FR" +"2954838072","2954838075","CH" +"2954838076","2954838079","PT" +"2954838080","2954838087","FR" +"2954838088","2954838091","IT" +"2954838092","2954838095","FR" +"2954838096","2954838099","ES" +"2954838100","2954838111","FR" +"2954838112","2954838115","CZ" +"2954838116","2954838119","GB" +"2954838120","2954838123","CZ" +"2954838124","2954838127","IT" +"2954838128","2954838131","GB" +"2954838132","2954838135","FR" +"2954838136","2954838139","ES" +"2954838140","2954838143","CH" +"2954838144","2954838151","FR" +"2954838152","2954838159","BE" +"2954838160","2954838163","FR" +"2954838164","2954838167","GB" +"2954838168","2954838171","NL" +"2954838172","2954838175","IT" +"2954838176","2954838179","GB" +"2954838180","2954838183","DE" +"2954838184","2954838191","IT" +"2954838192","2954838199","GB" +"2954838200","2954838211","ES" +"2954838212","2954838215","IE" +"2954838216","2954838219","GB" +"2954838220","2954838223","ES" +"2954838224","2954838239","FR" +"2954838240","2954838263","PL" +"2954838264","2954838271","IT" +"2954838272","2954838279","DE" +"2954838280","2954838287","IT" +"2954838288","2954838303","BE" +"2954838304","2954838351","FR" +"2954838352","2954838367","DE" +"2954838368","2954838375","FR" +"2954838376","2954838379","NL" +"2954838380","2954838383","PL" +"2954838384","2954838387","FR" +"2954838388","2954838391","CH" +"2954838392","2954838395","GB" +"2954838396","2954838399","IE" +"2954838400","2954838431","DE" +"2954838432","2954838435","CH" +"2954838436","2954838447","FR" +"2954838448","2954838455","NL" +"2954838456","2954838467","FR" +"2954838468","2954838475","PL" +"2954838476","2954838479","IT" +"2954838480","2954838511","FR" +"2954838512","2954838519","IT" +"2954838520","2954838523","DE" +"2954838524","2954838527","IE" +"2954838528","2954838531","IT" +"2954838532","2954838535","GB" +"2954838536","2954838539","PL" +"2954838540","2954838543","CH" +"2954838544","2954838559","PL" +"2954838560","2954838575","FR" +"2954838576","2954838583","IT" +"2954838584","2954838591","BE" +"2954838592","2954838599","DE" +"2954838600","2954838607","GB" +"2954838608","2954838615","NL" +"2954838616","2954838623","FR" +"2954838624","2954838639","IT" +"2954838640","2954838643","GB" +"2954838644","2954838647","DE" +"2954838648","2954838655","PL" +"2954838656","2954838719","IE" +"2954838720","2954838751","FR" +"2954838752","2954838767","BE" +"2954838768","2954838915","FR" +"2954838916","2954838927","GB" +"2954838928","2954838931","FR" +"2954838932","2954838935","GB" +"2954838936","2954838939","FR" +"2954838940","2954838943","IE" +"2954838944","2954838991","FR" +"2954838992","2954838995","DE" +"2954838996","2954838999","ES" +"2954839000","2954839007","GB" +"2954839008","2954839039","FR" +"2954839040","2954839107","GB" +"2954839108","2954839111","BE" +"2954839112","2954839119","ES" +"2954839120","2954839127","NL" +"2954839128","2954839135","GB" +"2954839136","2954839167","DE" +"2954839168","2954839199","PL" +"2954839200","2954839231","DE" +"2954839232","2954839247","IE" +"2954839248","2954839251","GB" +"2954839252","2954839263","FR" +"2954839264","2954839267","PL" +"2954839268","2954839271","FR" +"2954839272","2954839279","GB" +"2954839280","2954839303","FR" +"2954839304","2954839311","GB" +"2954839312","2954839319","PL" +"2954839320","2954839343","GB" +"2954839344","2954839347","ES" +"2954839348","2954839351","IT" +"2954839352","2954839355","NL" +"2954839356","2954839359","ES" +"2954839360","2954839367","FR" +"2954839368","2954839371","GB" +"2954839372","2954839375","FR" +"2954839376","2954839383","GB" +"2954839384","2954839391","FR" +"2954839392","2954839395","PL" +"2954839396","2954839399","GB" +"2954839400","2954839407","FR" +"2954839408","2954839423","IE" +"2954839424","2954839455","GB" +"2954839456","2954839471","PL" +"2954839472","2954839479","BE" +"2954839480","2954839483","DE" +"2954839484","2954839487","FR" +"2954839488","2954839519","ES" +"2954839520","2954839523","GB" +"2954839524","2954839527","PL" +"2954839528","2954839535","GB" +"2954839536","2954839543","FR" +"2954839544","2954839551","ES" +"2954839552","2954840063","DE" +"2954840064","2954840095","FR" +"2954840096","2954840103","ES" +"2954840104","2954840107","GB" +"2954840108","2954840111","ES" +"2954840112","2954840115","FR" +"2954840116","2954840119","PL" +"2954840120","2954840123","ES" +"2954840124","2954840127","PL" +"2954840128","2954840139","FR" +"2954840140","2954840143","PL" +"2954840144","2954840159","IE" +"2954840160","2954840179","FR" +"2954840180","2954840183","IT" +"2954840184","2954840187","DE" +"2954840188","2954840191","PL" +"2954840192","2954840223","FR" +"2954840224","2954840479","PL" +"2954840480","2954840495","FR" +"2954840496","2954840499","DE" +"2954840500","2954840503","ES" +"2954840504","2954840507","FR" +"2954840508","2954840519","PL" +"2954840520","2954840523","FR" +"2954840524","2954840527","ES" +"2954840528","2954840543","FR" +"2954840544","2954840575","ES" +"2954840576","2954840591","FI" +"2954840592","2954840607","ES" +"2954840608","2954840623","FR" +"2954840624","2954840631","NL" +"2954840632","2954840639","ES" +"2954840640","2954840647","FR" +"2954840648","2954840655","PL" +"2954840656","2954840663","FR" +"2954840664","2954840671","PL" +"2954840672","2954840703","IT" +"2954840704","2954840719","FR" +"2954840720","2954840727","GB" +"2954840728","2954840731","ES" +"2954840732","2954840743","DE" +"2954840744","2954840751","GB" +"2954840752","2954840755","FR" +"2954840756","2954840759","ES" +"2954840760","2954840763","GB" +"2954840764","2954840767","PL" +"2954840768","2954840775","GB" +"2954840776","2954840779","FR" +"2954840780","2954840783","NL" +"2954840784","2954840831","FR" +"2954840832","2954840847","NL" +"2954840848","2954840851","CH" +"2954840852","2954840855","BE" +"2954840856","2954840859","DE" +"2954840860","2954840863","ES" +"2954840864","2954840903","FR" +"2954840904","2954840907","PL" +"2954840908","2954840911","ES" +"2954840912","2954840919","DE" +"2954840920","2954840927","FR" +"2954840928","2954840931","IT" +"2954840932","2954840939","FR" +"2954840940","2954840943","ES" +"2954840944","2954840959","FR" +"2954840960","2954841023","IT" +"2954841024","2954841091","ES" +"2954841092","2954841095","PL" +"2954841096","2954841103","GB" +"2954841104","2954841111","ES" +"2954841112","2954841151","FR" +"2954841152","2954841183","ES" +"2954841184","2954841199","FR" +"2954841200","2954841203","CZ" +"2954841204","2954841215","PL" +"2954841216","2954841239","DE" +"2954841240","2954841247","GB" +"2954841248","2954841255","PL" +"2954841256","2954841259","ES" +"2954841260","2954841263","GB" +"2954841264","2954841271","FR" +"2954841272","2954841275","IT" +"2954841276","2954841295","FR" +"2954841296","2954841299","ES" +"2954841300","2954841307","PL" +"2954841308","2954841311","GB" +"2954841312","2954841471","FR" +"2954841472","2954841503","PL" +"2954841504","2954841507","DE" +"2954841508","2954841511","GB" +"2954841512","2954841519","FR" +"2954841520","2954841523","PL" +"2954841524","2954841527","DE" +"2954841528","2954841535","FR" +"2954841536","2954841543","GB" +"2954841544","2954841551","PL" +"2954841552","2954841555","FR" +"2954841556","2954841559","PL" +"2954841560","2954841563","FI" +"2954841564","2954841567","PL" +"2954841568","2954841591","ES" +"2954841592","2954841631","PL" +"2954841632","2954841643","FR" +"2954841644","2954841647","ES" +"2954841648","2954841655","FR" +"2954841656","2954841659","GB" +"2954841660","2954841663","FR" +"2954841664","2954841667","IE" +"2954841668","2954841671","NL" +"2954841672","2954841675","CH" +"2954841676","2954841679","FR" +"2954841680","2954841683","GB" +"2954841684","2954841687","PT" +"2954841688","2954841691","PL" +"2954841692","2954841695","FR" +"2954841696","2954841699","IT" +"2954841700","2954841703","FR" +"2954841704","2954841711","BE" +"2954841712","2954841715","FR" +"2954841716","2954841719","CZ" +"2954841720","2954841759","FR" +"2954841760","2954841783","PL" +"2954841784","2954841787","CZ" +"2954841788","2954841795","ES" +"2954841796","2954841799","FR" +"2954841800","2954841803","PL" +"2954841804","2954841807","DE" +"2954841808","2954841811","FR" +"2954841812","2954841815","GB" +"2954841816","2954841819","FR" +"2954841820","2954841823","GB" +"2954841824","2954841851","FR" +"2954841852","2954841855","ES" +"2954841856","2954841875","FR" +"2954841876","2954841879","NL" +"2954841880","2954841887","PL" +"2954841888","2954841907","FR" +"2954841908","2954841911","PL" +"2954841912","2954841919","NL" +"2954841920","2954841927","GB" +"2954841928","2954841931","PL" +"2954841932","2954841935","FI" +"2954841936","2954841939","BE" +"2954841940","2954841943","ES" +"2954841944","2954841951","DE" +"2954841952","2954841983","ES" +"2954841984","2954842015","FR" +"2954842016","2954842031","GB" +"2954842032","2954842035","CH" +"2954842036","2954842039","PL" +"2954842040","2954842043","FR" +"2954842044","2954842047","GB" +"2954842048","2954842067","FR" +"2954842068","2954842071","GB" +"2954842072","2954842075","FR" +"2954842076","2954842079","NL" +"2954842080","2954842095","FR" +"2954842096","2954842111","IE" +"2954842112","2954842239","FR" +"2954842240","2954842243","ES" +"2954842244","2954842247","FR" +"2954842248","2954842251","ES" +"2954842252","2954842255","GB" +"2954842256","2954842263","FR" +"2954842264","2954842267","CZ" +"2954842268","2954842271","FR" +"2954842272","2954842275","IE" +"2954842276","2954842279","FR" +"2954842280","2954842291","PL" +"2954842292","2954842295","CH" +"2954842296","2954842299","GB" +"2954842300","2954842367","ES" +"2954842368","2954842375","IE" +"2954842376","2954842403","FR" +"2954842404","2954842407","IT" +"2954842408","2954842411","DE" +"2954842412","2954842415","GB" +"2954842416","2954842419","NL" +"2954842420","2954842423","FR" +"2954842424","2954842427","ES" +"2954842428","2954842439","FR" +"2954842440","2954842443","IE" +"2954842444","2954842447","BE" +"2954842448","2954842451","GB" +"2954842452","2954842455","CZ" +"2954842456","2954842459","FR" +"2954842460","2954842463","IE" +"2954842464","2954842467","PL" +"2954842468","2954842471","FR" +"2954842472","2954842479","GB" +"2954842480","2954842483","IT" +"2954842484","2954842487","PL" +"2954842488","2954842491","CH" +"2954842492","2954842495","FR" +"2954842496","2954842559","GB" +"2954842560","2954842655","DE" +"2954842656","2954842659","ES" +"2954842660","2954842663","FI" +"2954842664","2954842667","FR" +"2954842668","2954842671","IE" +"2954842672","2954842703","FR" +"2954842704","2954842727","PL" +"2954842728","2954842731","ES" +"2954842732","2954842735","LT" +"2954842736","2954842743","NL" +"2954842744","2954842751","CH" +"2954842752","2954842767","PL" +"2954842768","2954842771","BE" +"2954842772","2954842775","GB" +"2954842776","2954842783","FR" +"2954842784","2954842791","PT" +"2954842792","2954842799","BE" +"2954842800","2954842807","ES" +"2954842808","2954842811","GB" +"2954842812","2954842815","FI" +"2954842816","2954842831","PL" +"2954842832","2954842855","FR" +"2954842856","2954842863","GB" +"2954842864","2954842879","FR" +"2954842880","2954842911","PL" +"2954842912","2954842919","IT" +"2954842920","2954842927","FR" +"2954842928","2954842935","BE" +"2954842936","2954842943","IE" +"2954842944","2954842951","CH" +"2954842952","2954842955","PL" +"2954842956","2954842959","IT" +"2954842960","2954842975","FR" +"2954842976","2954842991","ES" +"2954842992","2954843007","PL" +"2954843008","2954843015","GB" +"2954843016","2954843023","LT" +"2954843024","2954843027","PL" +"2954843028","2954843031","ES" +"2954843032","2954843039","IT" +"2954843040","2954843071","DE" +"2954843072","2954843103","FR" +"2954843104","2954843135","NL" +"2954843136","2954843183","FR" +"2954843184","2954843187","NL" +"2954843188","2954843191","GB" +"2954843192","2954843195","NL" +"2954843196","2954843199","ES" +"2954843200","2954843263","FR" +"2954843264","2954843271","CZ" +"2954843272","2954843275","GB" +"2954843276","2954843311","FR" +"2954843312","2954843315","ES" +"2954843316","2954843319","FR" +"2954843320","2954843323","DE" +"2954843324","2954843327","NL" +"2954843328","2954843335","IT" +"2954843336","2954843339","GB" +"2954843340","2954843343","NL" +"2954843344","2954843347","FR" +"2954843348","2954843351","GB" +"2954843352","2954843375","FR" +"2954843376","2954843391","ES" +"2954843392","2954843407","FR" +"2954843408","2954843415","CH" +"2954843416","2954843419","PL" +"2954843420","2954843423","FR" +"2954843424","2954843439","NL" +"2954843440","2954843459","FR" +"2954843460","2954843463","NL" +"2954843464","2954843471","FR" +"2954843472","2954843487","GB" +"2954843488","2954843519","DE" +"2954843520","2954843535","PL" +"2954843536","2954843595","FR" +"2954843596","2954843599","DE" +"2954843600","2954843603","IT" +"2954843604","2954843607","PL" +"2954843608","2954843631","FR" +"2954843632","2954843639","CH" +"2954843640","2954843643","IE" +"2954843644","2954843647","CZ" +"2954843648","2954843711","PL" +"2954843712","2954843715","FR" +"2954843716","2954843719","GB" +"2954843720","2954843723","BE" +"2954843724","2954843727","CZ" +"2954843728","2954843775","FR" +"2954843776","2954843783","PL" +"2954843784","2954843791","GB" +"2954843792","2954843807","IE" +"2954843808","2954843823","PL" +"2954843824","2954843839","GB" +"2954843840","2954843871","DE" +"2954843872","2954843887","PL" +"2954843888","2954843895","BE" +"2954843896","2954843899","PT" +"2954843900","2954843903","ES" +"2954843904","2954844031","FR" +"2954844032","2954844063","DE" +"2954844064","2954844095","BE" +"2954844096","2954844127","IT" +"2954844128","2954844143","FR" +"2954844144","2954844147","NL" +"2954844148","2954844175","FR" +"2954844176","2954844179","DE" +"2954844180","2954844183","NL" +"2954844184","2954844187","GB" +"2954844188","2954844191","ES" +"2954844192","2954844223","IE" +"2954844224","2954844263","FR" +"2954844264","2954844267","IE" +"2954844268","2954844275","FR" +"2954844276","2954844279","GB" +"2954844280","2954844287","PT" +"2954844288","2954844351","PL" +"2954844352","2954844415","FR" +"2954844416","2954844423","ES" +"2954844424","2954844431","FR" +"2954844432","2954844447","BE" +"2954844448","2954844455","CH" +"2954844456","2954844463","NL" +"2954844464","2954844467","ES" +"2954844468","2954844471","PL" +"2954844472","2954844479","NL" +"2954844480","2954844483","DE" +"2954844484","2954844487","GB" +"2954844488","2954844495","FR" +"2954844496","2954844499","CZ" +"2954844500","2954844503","PL" +"2954844504","2954844507","IE" +"2954844508","2954844511","DE" +"2954844512","2954844543","FR" +"2954844544","2954844575","PL" +"2954844576","2954844591","DE" +"2954844592","2954844599","ES" +"2954844600","2954844607","NL" +"2954844608","2954844671","PL" +"2954844672","2954844687","FR" +"2954844688","2954844703","CH" +"2954844704","2954844707","FR" +"2954844708","2954844711","PL" +"2954844712","2954844719","PT" +"2954844720","2954844723","ES" +"2954844724","2954844731","FR" +"2954844732","2954844735","IE" +"2954844736","2954844767","GB" +"2954844768","2954844799","FR" +"2954844800","2954844815","ES" +"2954844816","2954844819","BE" +"2954844820","2954844927","FR" +"2954844928","2954844931","PT" +"2954844932","2954844943","FR" +"2954844944","2954844947","GB" +"2954844948","2954844951","IT" +"2954844952","2954844959","IE" +"2954844960","2954844967","PL" +"2954844968","2954844971","BE" +"2954844972","2954844995","PL" +"2954844996","2954844999","FR" +"2954845000","2954845003","NL" +"2954845004","2954845023","FR" +"2954845024","2954845039","IE" +"2954845040","2954845047","IT" +"2954845048","2954845055","FI" +"2954845056","2954845059","PT" +"2954845060","2954845063","FR" +"2954845064","2954845071","PL" +"2954845072","2954845079","BE" +"2954845080","2954845083","DE" +"2954845084","2954845087","FR" +"2954845088","2954845091","FI" +"2954845092","2954845095","ES" +"2954845096","2954845099","IT" +"2954845100","2954845103","ES" +"2954845104","2954845111","IE" +"2954845112","2954845119","NL" +"2954845120","2954845135","PL" +"2954845136","2954845147","FR" +"2954845148","2954845151","GB" +"2954845152","2954845159","PL" +"2954845160","2954845167","GB" +"2954845168","2954845183","BE" +"2954845184","2954845199","PL" +"2954845200","2954845207","NL" +"2954845208","2954845211","ES" +"2954845212","2954845215","CH" +"2954845216","2954845223","FR" +"2954845224","2954845231","NL" +"2954845232","2954845239","DE" +"2954845240","2954845247","NL" +"2954845248","2954845263","CH" +"2954845264","2954845279","PL" +"2954845280","2954845283","CZ" +"2954845284","2954845291","GB" +"2954845292","2954845295","ES" +"2954845296","2954845299","IT" +"2954845300","2954845303","ES" +"2954845304","2954845311","PL" +"2954845312","2954845315","CH" +"2954845316","2954845319","BE" +"2954845320","2954845327","LT" +"2954845328","2954845343","FR" +"2954845344","2954845359","FI" +"2954845360","2954845363","FR" +"2954845364","2954845367","ES" +"2954845368","2954845371","NL" +"2954845372","2954845375","DE" +"2954845376","2954845407","PL" +"2954845408","2954845439","FR" +"2954845440","2954845695","GB" +"2954845696","2954845951","IT" +"2954845952","2954845967","ES" +"2954845968","2954845999","FR" +"2954846000","2954846015","PT" +"2954846016","2954846047","FR" +"2954846048","2954846051","CZ" +"2954846052","2954846055","CH" +"2954846056","2954846059","FR" +"2954846060","2954846063","GB" +"2954846064","2954846079","NL" +"2954846080","2954846111","DE" +"2954846112","2954846119","FR" +"2954846120","2954846123","IE" +"2954846124","2954846127","NL" +"2954846128","2954846135","FR" +"2954846136","2954846139","DE" +"2954846140","2954846143","GB" +"2954846144","2954846191","FR" +"2954846192","2954846207","FI" +"2954846208","2954854403","FR" +"2954854404","2954854407","IT" +"2954854408","2954854411","FR" +"2954854412","2954854415","PL" +"2954854416","2954854431","GB" +"2954854432","2954854463","FR" +"2954854464","2954854471","LT" +"2954854472","2954854475","FR" +"2954854476","2954854479","BE" +"2954854480","2954854495","FR" +"2954854496","2954854511","PL" +"2954854512","2954854527","ES" +"2954854528","2954854619","FR" +"2954854620","2954854623","ES" +"2954854624","2954854655","FR" +"2954854656","2954854659","PL" +"2954854660","2954854663","GB" +"2954854664","2954854667","FI" +"2954854668","2954854691","FR" +"2954854692","2954854695","IT" +"2954854696","2954854699","PL" +"2954854700","2954854703","ES" +"2954854704","2954854711","FR" +"2954854712","2954854719","DE" +"2954854720","2954854783","ES" +"2954854784","2954854799","FR" +"2954854800","2954854815","FI" +"2954854816","2954854847","FR" +"2954854848","2954854851","PL" +"2954854852","2954854855","GB" +"2954854856","2954854863","FR" +"2954854864","2954854867","PL" +"2954854868","2954854871","GB" +"2954854872","2954854879","ES" +"2954854880","2954854895","FR" +"2954854896","2954854903","PL" +"2954854904","2954854919","FR" +"2954854920","2954854927","PL" +"2954854928","2954854943","FI" +"2954854944","2954855023","FR" +"2954855024","2954855027","GB" +"2954855028","2954855031","PL" +"2954855032","2954855039","GB" +"2954855040","2954855043","FR" +"2954855044","2954855047","IE" +"2954855048","2954855051","PL" +"2954855052","2954855055","ES" +"2954855056","2954855059","FR" +"2954855060","2954855063","ES" +"2954855064","2954855067","BE" +"2954855068","2954855071","ES" +"2954855072","2954855075","FR" +"2954855076","2954855079","DE" +"2954855080","2954855087","GB" +"2954855088","2954855091","PL" +"2954855092","2954855095","IE" +"2954855096","2954855103","FR" +"2954855104","2954855167","IE" +"2954855168","2954855199","GB" +"2954855200","2954855207","FR" +"2954855208","2954855211","NL" +"2954855212","2954855215","CH" +"2954855216","2954855295","FR" +"2954855296","2954855359","BE" +"2954855360","2954855439","FR" +"2954855440","2954855455","LT" +"2954855456","2954855479","FR" +"2954855480","2954855487","IT" +"2954855488","2954855523","GB" +"2954855524","2954855527","DE" +"2954855528","2954855535","PT" +"2954855536","2954855551","FR" +"2954855552","2954855567","GB" +"2954855568","2954855571","FR" +"2954855572","2954855575","BE" +"2954855576","2954855579","FR" +"2954855580","2954855583","IT" +"2954855584","2954855615","FR" +"2954855616","2954855619","PL" +"2954855620","2954855623","FR" +"2954855624","2954855627","IT" +"2954855628","2954855635","GB" +"2954855636","2954855639","FR" +"2954855640","2954855643","PL" +"2954855644","2954855655","GB" +"2954855656","2954855659","CH" +"2954855660","2954855663","DE" +"2954855664","2954855695","NL" +"2954855696","2954855703","FR" +"2954855704","2954855707","ES" +"2954855708","2954855711","GB" +"2954855712","2954855743","PL" +"2954855744","2954855807","FR" +"2954855808","2954855871","IE" +"2954855872","2954855879","FR" +"2954855880","2954855887","ES" +"2954855888","2954855903","FR" +"2954855904","2954855919","PL" +"2954855920","2954855999","FR" +"2954856000","2954856071","PL" +"2954856072","2954856079","FR" +"2954856080","2954856083","DE" +"2954856084","2954856087","FR" +"2954856088","2954856095","ES" +"2954856096","2954856111","FR" +"2954856112","2954856115","IE" +"2954856116","2954856119","DE" +"2954856120","2954856123","PL" +"2954856124","2954856127","CZ" +"2954856128","2954856167","FR" +"2954856168","2954856175","ES" +"2954856176","2954856187","PL" +"2954856188","2954856447","FR" +"2954856448","2954856511","ES" +"2954856512","2954856551","FR" +"2954856552","2954856555","ES" +"2954856556","2954856559","BE" +"2954856560","2954856563","ES" +"2954856564","2954856567","LT" +"2954856568","2954856571","PL" +"2954856572","2954856575","BE" +"2954856576","2954856583","ES" +"2954856584","2954856587","FR" +"2954856588","2954856591","ES" +"2954856592","2954856607","FR" +"2954856608","2954856611","BE" +"2954856612","2954856615","FR" +"2954856616","2954856619","ES" +"2954856620","2954856623","GB" +"2954856624","2954856627","IT" +"2954856628","2954856631","FR" +"2954856632","2954856635","GB" +"2954856636","2954856639","DE" +"2954856640","2954856671","IT" +"2954856672","2954856675","PT" +"2954856676","2954856679","IT" +"2954856680","2954856683","FR" +"2954856684","2954856687","GB" +"2954856688","2954856691","BE" +"2954856692","2954856699","FR" +"2954856700","2954856959","PL" +"2954856960","2954856975","FR" +"2954856976","2954856979","PL" +"2954856980","2954856983","IE" +"2954856984","2954856987","BE" +"2954856988","2954856991","FR" +"2954856992","2954856995","PL" +"2954856996","2954856999","ES" +"2954857000","2954857007","PL" +"2954857008","2954857087","FR" +"2954857088","2954857091","PL" +"2954857092","2954857095","CZ" +"2954857096","2954857099","PL" +"2954857100","2954857103","IT" +"2954857104","2954857107","GB" +"2954857108","2954857111","FR" +"2954857112","2954857115","PL" +"2954857116","2954857119","IE" +"2954857120","2954857135","PT" +"2954857136","2954857143","LT" +"2954857144","2954857151","FR" +"2954857152","2954857215","IE" +"2954857216","2954857503","FR" +"2954857504","2954857519","IT" +"2954857520","2954857523","FR" +"2954857524","2954857527","DE" +"2954857528","2954857531","GB" +"2954857532","2954857535","NL" +"2954857536","2954857551","CH" +"2954857552","2954857567","IT" +"2954857568","2954857571","PL" +"2954857572","2954857575","PT" +"2954857576","2954857583","FR" +"2954857584","2954857599","ES" +"2954857600","2954857663","IE" +"2954857664","2954857695","FR" +"2954857696","2954857699","IE" +"2954857700","2954857703","ES" +"2954857704","2954857707","PL" +"2954857708","2954857711","ES" +"2954857712","2954857727","IE" +"2954857728","2954857751","FR" +"2954857752","2954857755","ES" +"2954857756","2954857759","PL" +"2954857760","2954857823","FR" +"2954857824","2954857855","ES" +"2954857856","2954857983","IE" +"2954857984","2954857999","IT" +"2954858000","2954858015","FR" +"2954858016","2954858023","PL" +"2954858024","2954858027","ES" +"2954858028","2954858031","IT" +"2954858032","2954858035","DE" +"2954858036","2954858039","PL" +"2954858040","2954858043","FR" +"2954858044","2954858047","PT" +"2954858048","2954858051","ES" +"2954858052","2954858059","FR" +"2954858060","2954858063","PL" +"2954858064","2954858079","IE" +"2954858080","2954858095","NL" +"2954858096","2954858111","ES" +"2954858112","2954858143","DE" +"2954858144","2954858175","ES" +"2954858176","2954858191","PL" +"2954858192","2954858207","GB" +"2954858208","2954858239","IT" +"2954858240","2954858271","NL" +"2954858272","2954858303","GB" +"2954858304","2954858335","DE" +"2954858336","2954858351","IE" +"2954858352","2954858383","PL" +"2954858384","2954858415","FR" +"2954858416","2954858423","ES" +"2954858424","2954858427","DE" +"2954858428","2954858431","FR" +"2954858432","2954858439","GB" +"2954858440","2954858443","FR" +"2954858444","2954858447","GB" +"2954858448","2954858463","IT" +"2954858464","2954858479","FR" +"2954858480","2954858483","NL" +"2954858484","2954858487","DE" +"2954858488","2954858491","IT" +"2954858492","2954858495","NL" +"2954858496","2954858751","ES" +"2954858752","2954858815","IE" +"2954858816","2954858819","ES" +"2954858820","2954858823","FR" +"2954858824","2954858831","GB" +"2954858832","2954858847","IE" +"2954858848","2954858895","FR" +"2954858896","2954858911","ES" +"2954858912","2954858943","DE" +"2954858944","2954858975","ES" +"2954858976","2954858991","FR" +"2954858992","2954859007","GB" +"2954859008","2954859023","FR" +"2954859024","2954859027","IT" +"2954859028","2954859031","PT" +"2954859032","2954859043","FR" +"2954859044","2954859047","DE" +"2954859048","2954859071","FR" +"2954859072","2954859079","PL" +"2954859080","2954859087","FR" +"2954859088","2954859103","BE" +"2954859104","2954859123","FR" +"2954859124","2954859127","NL" +"2954859128","2954859131","GB" +"2954859132","2954859135","BE" +"2954859136","2954859239","FR" +"2954859240","2954859243","ES" +"2954859244","2954859247","PL" +"2954859248","2954859267","FR" +"2954859268","2954859271","ES" +"2954859272","2954859275","PL" +"2954859276","2954859279","ES" +"2954859280","2954859311","FR" +"2954859312","2954859315","ES" +"2954859316","2954859323","FR" +"2954859324","2954859327","CZ" +"2954859328","2954859343","GB" +"2954859344","2954859391","FR" +"2954859392","2954859423","IT" +"2954859424","2954859455","GB" +"2954859456","2954859487","NL" +"2954859488","2954859495","FR" +"2954859496","2954859503","IT" +"2954859504","2954859519","GB" +"2954859520","2954859551","DE" +"2954859552","2954859559","FR" +"2954859560","2954859575","IT" +"2954859576","2954859583","DE" +"2954859584","2954859647","FR" +"2954859648","2954859655","ES" +"2954859656","2954859663","NL" +"2954859664","2954859679","FR" +"2954859680","2954859695","CH" +"2954859696","2954859703","FR" +"2954859704","2954859707","GB" +"2954859708","2954859711","DE" +"2954859712","2954859775","FR" +"2954859776","2954859807","PL" +"2954859808","2954859823","GB" +"2954859824","2954859831","DE" +"2954859832","2954859903","FR" +"2954859904","2954859935","DE" +"2954859936","2954859951","FR" +"2954859952","2954859955","PL" +"2954859956","2954859959","GB" +"2954859960","2954859963","ES" +"2954859964","2954860031","PL" +"2954860032","2954860063","DE" +"2954860064","2954860095","FR" +"2954860096","2954860103","GB" +"2954860104","2954860111","FR" +"2954860112","2954860127","GB" +"2954860128","2954860131","ES" +"2954860132","2954860135","FR" +"2954860136","2954860151","PL" +"2954860152","2954860167","IE" +"2954860168","2954860171","PL" +"2954860172","2954860175","BE" +"2954860176","2954860183","DE" +"2954860184","2954860187","FR" +"2954860188","2954860191","ES" +"2954860192","2954860227","FR" +"2954860228","2954860231","PL" +"2954860232","2954860239","BE" +"2954860240","2954860243","NL" +"2954860244","2954860247","ES" +"2954860248","2954860255","FR" +"2954860256","2954860271","IE" +"2954860272","2954860275","GB" +"2954860276","2954860319","FR" +"2954860320","2954860327","DE" +"2954860328","2954860335","FR" +"2954860336","2954860351","CH" +"2954860352","2954860415","FR" +"2954860416","2954860423","PL" +"2954860424","2954860427","FR" +"2954860428","2954860431","IE" +"2954860432","2954860439","FR" +"2954860440","2954860443","IT" +"2954860444","2954860447","FI" +"2954860448","2954860455","FR" +"2954860456","2954860459","IE" +"2954860460","2954860463","GB" +"2954860464","2954860479","DE" +"2954860480","2954860483","GB" +"2954860484","2954860487","FR" +"2954860488","2954860491","GB" +"2954860492","2954860535","FR" +"2954860536","2954860539","GB" +"2954860540","2954860543","ES" +"2954860544","2954860799","CZ" +"2954860800","2954860863","IE" +"2954860864","2954860991","FR" +"2954860992","2954861003","PL" +"2954861004","2954861023","FR" +"2954861024","2954861031","GB" +"2954861032","2954861035","NL" +"2954861036","2954861039","IT" +"2954861040","2954861055","PL" +"2954861056","2954861067","FR" +"2954861068","2954861071","GB" +"2954861072","2954861087","FR" +"2954861088","2954861119","CH" +"2954861120","2954861143","FR" +"2954861144","2954861147","DE" +"2954861148","2954861151","FR" +"2954861152","2954861159","GB" +"2954861160","2954861183","FR" +"2954861184","2954861191","IT" +"2954861192","2954861195","FR" +"2954861196","2954861199","CZ" +"2954861200","2954861215","GB" +"2954861216","2954861231","FR" +"2954861232","2954861239","PL" +"2954861240","2954861247","FR" +"2954861248","2954861311","PL" +"2954861312","2954861323","FR" +"2954861324","2954861327","IT" +"2954861328","2954861343","NL" +"2954861344","2954861359","FR" +"2954861360","2954861363","IE" +"2954861364","2954861367","FR" +"2954861368","2954861371","ES" +"2954861372","2954861375","PT" +"2954861376","2954861407","DE" +"2954861408","2954861423","FR" +"2954861424","2954861431","CH" +"2954861432","2954861439","GB" +"2954861440","2954861567","FR" +"2954861568","2954861571","IT" +"2954861572","2954861575","GB" +"2954861576","2954861599","FR" +"2954861600","2954861615","PL" +"2954861616","2954861623","FR" +"2954861624","2954861631","IT" +"2954861632","2954861635","NL" +"2954861636","2954861639","GB" +"2954861640","2954861647","PL" +"2954861648","2954861655","GB" +"2954861656","2954861663","FR" +"2954861664","2954861671","ES" +"2954861672","2954861675","NL" +"2954861676","2954861687","PL" +"2954861688","2954861691","GB" +"2954861692","2954861695","ES" +"2954861696","2954861763","GB" +"2954861764","2954861767","PL" +"2954861768","2954861775","FR" +"2954861776","2954861779","PT" +"2954861780","2954861783","DE" +"2954861784","2954861787","FR" +"2954861788","2954861791","PL" +"2954861792","2954861823","GB" +"2954861824","2954861827","PL" +"2954861828","2954861831","GB" +"2954861832","2954861835","DE" +"2954861836","2954861839","PL" +"2954861840","2954861843","GB" +"2954861844","2954861847","PL" +"2954861848","2954861863","FR" +"2954861864","2954861867","NL" +"2954861868","2954861871","FR" +"2954861872","2954861887","IE" +"2954861888","2954861919","DE" +"2954861920","2954861923","PL" +"2954861924","2954861927","ES" +"2954861928","2954861935","FR" +"2954861936","2954861943","DE" +"2954861944","2954861947","FR" +"2954861948","2954861951","GB" +"2954861952","2954861955","FR" +"2954861956","2954861967","GB" +"2954861968","2954861975","ES" +"2954861976","2954861983","DE" +"2954861984","2954861987","FR" +"2954861988","2954861991","BE" +"2954861992","2954861995","PL" +"2954861996","2954861999","DE" +"2954862000","2954862015","GB" +"2954862016","2954862047","FR" +"2954862048","2954862063","IT" +"2954862064","2954862079","FI" +"2954862080","2954862143","FR" +"2954862144","2954862207","ES" +"2954862208","2954862211","PL" +"2954862212","2954862215","PT" +"2954862216","2954862219","FR" +"2954862220","2954862223","DE" +"2954862224","2954862239","FR" +"2954862240","2954862247","IT" +"2954862248","2954862251","DE" +"2954862252","2954862255","CZ" +"2954862256","2954862271","FR" +"2954862272","2954862303","FI" +"2954862304","2954862335","FR" +"2954862336","2954862367","PL" +"2954862368","2954862371","FR" +"2954862372","2954862375","CH" +"2954862376","2954862399","FR" +"2954862400","2954862415","IE" +"2954862416","2954862431","DE" +"2954862432","2954862463","FR" +"2954862464","2954862467","GB" +"2954862468","2954862471","NL" +"2954862472","2954862479","DE" +"2954862480","2954862483","ES" +"2954862484","2954862487","FR" +"2954862488","2954862495","IT" +"2954862496","2954862511","ES" +"2954862512","2954862515","DE" +"2954862516","2954862519","PT" +"2954862520","2954862523","ES" +"2954862524","2954862527","IT" +"2954862528","2954862559","FR" +"2954862560","2954862567","ES" +"2954862568","2954862571","CZ" +"2954862572","2954862587","FR" +"2954862588","2954862591","ES" +"2954862592","2954870783","FR" +"2954870784","2954870787","DE" +"2954870788","2954870791","GB" +"2954870792","2954870795","FR" +"2954870796","2954870799","PL" +"2954870800","2954870831","FR" +"2954870832","2954870835","PL" +"2954870836","2954870839","GB" +"2954870840","2954870843","DE" +"2954870844","2954870847","FR" +"2954870848","2954870863","PL" +"2954870864","2954870867","GB" +"2954870868","2954870875","ES" +"2954870876","2954870879","PL" +"2954870880","2954870895","IE" +"2954870896","2954870903","FR" +"2954870904","2954870907","PL" +"2954870908","2954870911","ES" +"2954870912","2954871551","FR" +"2954871552","2954871583","DE" +"2954871584","2954871599","GB" +"2954871600","2954871603","FR" +"2954871604","2954871607","PL" +"2954871608","2954871611","BE" +"2954871612","2954871615","CZ" +"2954871616","2954871631","ES" +"2954871632","2954871635","BE" +"2954871636","2954871639","ES" +"2954871640","2954871643","FR" +"2954871644","2954871647","IT" +"2954871648","2954871671","FR" +"2954871672","2954871675","DE" +"2954871676","2954871695","FR" +"2954871696","2954871703","DE" +"2954871704","2954871707","CH" +"2954871708","2954871711","GB" +"2954871712","2954871807","FR" +"2954871808","2954871823","ES" +"2954871824","2954871831","FR" +"2954871832","2954871839","PL" +"2954871840","2954871887","FR" +"2954871888","2954871895","GB" +"2954871896","2954871903","FR" +"2954871904","2954871919","IE" +"2954871920","2954871923","ES" +"2954871924","2954871935","IE" +"2954871936","2954871939","PL" +"2954871940","2954871943","GB" +"2954871944","2954871947","ES" +"2954871948","2954871951","DE" +"2954871952","2954871955","ES" +"2954871956","2954871959","PT" +"2954871960","2954871967","FR" +"2954871968","2954871999","PL" +"2954872000","2954872323","FR" +"2954872324","2954872327","PL" +"2954872328","2954872335","DE" +"2954872336","2954872351","FR" +"2954872352","2954872383","DE" +"2954872384","2954872415","GB" +"2954872416","2954872419","ES" +"2954872420","2954872435","PL" +"2954872436","2954872439","ES" +"2954872440","2954872479","PL" +"2954872480","2954872543","DE" +"2954872544","2954872547","FR" +"2954872548","2954872551","CH" +"2954872552","2954872555","GB" +"2954872556","2954872559","CZ" +"2954872560","2954872563","DE" +"2954872564","2954872567","FR" +"2954872568","2954872571","IE" +"2954872572","2954872583","FR" +"2954872584","2954872587","FI" +"2954872588","2954872591","DE" +"2954872592","2954872607","IT" +"2954872608","2954872639","FR" +"2954872640","2954872671","BE" +"2954872672","2954872675","IE" +"2954872676","2954872679","ES" +"2954872680","2954872687","FR" +"2954872688","2954872703","GB" +"2954872704","2954872831","DE" +"2954872832","2954873343","FR" +"2954873344","2954873347","NL" +"2954873348","2954873351","PL" +"2954873352","2954873355","GB" +"2954873356","2954873359","IT" +"2954873360","2954873367","FR" +"2954873368","2954873375","PL" +"2954873376","2954873391","FR" +"2954873392","2954873407","PL" +"2954873408","2954873447","FR" +"2954873448","2954873459","PL" +"2954873460","2954873463","NL" +"2954873464","2954873467","PL" +"2954873468","2954873535","FR" +"2954873536","2954873567","DE" +"2954873568","2954873583","FR" +"2954873584","2954873591","ES" +"2954873592","2954873599","FR" +"2954873600","2954873631","DE" +"2954873632","2954873635","NL" +"2954873636","2954873639","PL" +"2954873640","2954873647","FR" +"2954873648","2954873663","PL" +"2954873664","2954873679","IT" +"2954873680","2954873695","FR" +"2954873696","2954873727","ES" +"2954873728","2954873759","FR" +"2954873760","2954873791","DE" +"2954873792","2954873799","FR" +"2954873800","2954873803","PL" +"2954873804","2954873807","NL" +"2954873808","2954873815","DE" +"2954873816","2954873819","FI" +"2954873820","2954873831","FR" +"2954873832","2954873835","IT" +"2954873836","2954873839","PL" +"2954873840","2954873847","IT" +"2954873848","2954873851","GB" +"2954873852","2954873855","PL" +"2954873856","2954874111","GB" +"2954874112","2954874367","FR" +"2954874368","2954874375","ES" +"2954874376","2954874379","FR" +"2954874380","2954874383","PL" +"2954874384","2954874387","FR" +"2954874388","2954874391","PL" +"2954874392","2954874415","IE" +"2954874416","2954874419","GB" +"2954874420","2954874423","FR" +"2954874424","2954874427","GB" +"2954874428","2954874495","FR" +"2954874496","2954874559","NL" +"2954874560","2954874567","GB" +"2954874568","2954874591","FR" +"2954874592","2954874623","PT" +"2954874624","2954874627","BE" +"2954874628","2954874631","FR" +"2954874632","2954874635","PL" +"2954874636","2954874639","NL" +"2954874640","2954874647","ES" +"2954874648","2954874651","FR" +"2954874652","2954874655","PL" +"2954874656","2954874671","FR" +"2954874672","2954874675","PL" +"2954874676","2954874679","CZ" +"2954874680","2954874687","FR" +"2954874688","2954874719","ES" +"2954874720","2954874751","FI" +"2954874752","2954874799","IE" +"2954874800","2954874815","GB" +"2954874816","2954874819","DE" +"2954874820","2954874823","ES" +"2954874824","2954874827","FR" +"2954874828","2954874831","PL" +"2954874832","2954874855","FR" +"2954874856","2954874859","DE" +"2954874860","2954874863","LT" +"2954874864","2954874867","FR" +"2954874868","2954874871","PL" +"2954874872","2954874911","FR" +"2954874912","2954874919","FI" +"2954874920","2954874923","PL" +"2954874924","2954874927","FR" +"2954874928","2954874943","PL" +"2954874944","2954874975","IE" +"2954874976","2954874979","PL" +"2954874980","2954874983","DE" +"2954874984","2954874987","GB" +"2954874988","2954874991","PL" +"2954874992","2954875007","IE" +"2954875008","2954875023","FR" +"2954875024","2954875027","ES" +"2954875028","2954875031","FR" +"2954875032","2954875047","PL" +"2954875048","2954875051","FR" +"2954875052","2954875055","NL" +"2954875056","2954875063","IT" +"2954875064","2954875067","DE" +"2954875068","2954875071","FI" +"2954875072","2954875075","NL" +"2954875076","2954875079","GB" +"2954875080","2954875095","FR" +"2954875096","2954875099","GB" +"2954875100","2954875103","PL" +"2954875104","2954875183","FR" +"2954875184","2954875191","GB" +"2954875192","2954875199","FR" +"2954875200","2954875203","PL" +"2954875204","2954875207","DE" +"2954875208","2954875215","NL" +"2954875216","2954875231","FR" +"2954875232","2954875247","ES" +"2954875248","2954875295","FR" +"2954875296","2954875311","PL" +"2954875312","2954875327","FR" +"2954875328","2954875359","PL" +"2954875360","2954875375","FR" +"2954875376","2954875379","PT" +"2954875380","2954875383","FI" +"2954875384","2954875391","GB" +"2954875392","2954875463","ES" +"2954875464","2954875467","NL" +"2954875468","2954875471","GB" +"2954875472","2954875475","NL" +"2954875476","2954875483","DE" +"2954875484","2954875487","ES" +"2954875488","2954875491","LT" +"2954875492","2954875495","ES" +"2954875496","2954875503","IT" +"2954875504","2954875519","FR" +"2954875520","2954875543","PL" +"2954875544","2954875551","FR" +"2954875552","2954875583","PL" +"2954875584","2954875587","ES" +"2954875588","2954875591","IT" +"2954875592","2954875599","FR" +"2954875600","2954875615","PT" +"2954875616","2954875623","PL" +"2954875624","2954875627","DE" +"2954875628","2954875631","ES" +"2954875632","2954875635","CH" +"2954875636","2954875639","FR" +"2954875640","2954875647","BE" +"2954875648","2954875651","ES" +"2954875652","2954875655","BE" +"2954875656","2954875659","FR" +"2954875660","2954875663","PT" +"2954875664","2954875671","ES" +"2954875672","2954875695","FR" +"2954875696","2954875703","ES" +"2954875704","2954875707","PL" +"2954875708","2954875711","ES" +"2954875712","2954875775","IE" +"2954875776","2954875807","FR" +"2954875808","2954875839","IT" +"2954875840","2954875871","PT" +"2954875872","2954875879","PL" +"2954875880","2954875883","DE" +"2954875884","2954875891","FR" +"2954875892","2954875895","ES" +"2954875896","2954875903","FR" +"2954875904","2954875907","IT" +"2954875908","2954875911","CH" +"2954875912","2954875919","ES" +"2954875920","2954875935","FR" +"2954875936","2954875951","PL" +"2954875952","2954875999","IE" +"2954876000","2954876031","GB" +"2954876032","2954876039","IT" +"2954876040","2954876043","FR" +"2954876044","2954876047","GB" +"2954876048","2954876051","ES" +"2954876052","2954876055","NL" +"2954876056","2954876059","PL" +"2954876060","2954876063","ES" +"2954876064","2954876079","FR" +"2954876080","2954876095","PL" +"2954876096","2954876111","FR" +"2954876112","2954876119","IE" +"2954876120","2954876123","FR" +"2954876124","2954876127","NL" +"2954876128","2954876147","FR" +"2954876148","2954876151","BE" +"2954876152","2954876191","FR" +"2954876192","2954876223","PT" +"2954876224","2954876231","FR" +"2954876232","2954876235","PL" +"2954876236","2954876239","IE" +"2954876240","2954876247","PL" +"2954876248","2954876287","ES" +"2954876288","2954876351","FR" +"2954876352","2954876383","ES" +"2954876384","2954876391","FR" +"2954876392","2954876395","DE" +"2954876396","2954876399","IE" +"2954876400","2954876403","GB" +"2954876404","2954876407","NL" +"2954876408","2954876411","LT" +"2954876412","2954876415","DE" +"2954876416","2954876423","IT" +"2954876424","2954876431","PL" +"2954876432","2954876435","PT" +"2954876436","2954876439","GB" +"2954876440","2954876447","FR" +"2954876448","2954876451","GB" +"2954876452","2954876455","FR" +"2954876456","2954876463","CZ" +"2954876464","2954876575","IT" +"2954876576","2954876579","ES" +"2954876580","2954876583","FR" +"2954876584","2954876587","GB" +"2954876588","2954876591","PL" +"2954876592","2954876639","IE" +"2954876640","2954876643","DE" +"2954876644","2954876647","IT" +"2954876648","2954876655","FR" +"2954876656","2954876671","BE" +"2954876672","2954876703","PT" +"2954876704","2954876719","FR" +"2954876720","2954876727","GB" +"2954876728","2954876731","PL" +"2954876732","2954876735","DE" +"2954876736","2954876767","IT" +"2954876768","2954876795","FR" +"2954876796","2954876799","DE" +"2954876800","2954876863","IE" +"2954876864","2954876895","DE" +"2954876896","2954876899","GB" +"2954876900","2954876903","IT" +"2954876904","2954876959","FR" +"2954876960","2954876975","DE" +"2954876976","2954876983","PL" +"2954876984","2954876987","FR" +"2954876988","2954876991","ES" +"2954876992","2954877007","PL" +"2954877008","2954877023","CZ" +"2954877024","2954877027","ES" +"2954877028","2954877031","PL" +"2954877032","2954877035","FR" +"2954877036","2954877039","GB" +"2954877040","2954877055","FR" +"2954877056","2954877059","PL" +"2954877060","2954877063","GB" +"2954877064","2954877071","DE" +"2954877072","2954877087","CH" +"2954877088","2954877103","DE" +"2954877104","2954877107","PL" +"2954877108","2954877119","FR" +"2954877120","2954877151","ES" +"2954877152","2954877159","NL" +"2954877160","2954877163","PL" +"2954877164","2954877167","FI" +"2954877168","2954877183","DE" +"2954877184","2954877455","FR" +"2954877456","2954877459","PT" +"2954877460","2954877463","FR" +"2954877464","2954877471","DE" +"2954877472","2954877503","FR" +"2954877504","2954877519","ES" +"2954877520","2954877523","BE" +"2954877524","2954877527","ES" +"2954877528","2954877535","PT" +"2954877536","2954877539","PL" +"2954877540","2954877547","FR" +"2954877548","2954877551","PL" +"2954877552","2954877583","FR" +"2954877584","2954877587","FI" +"2954877588","2954877591","PL" +"2954877592","2954877595","DE" +"2954877596","2954877599","PT" +"2954877600","2954877615","PL" +"2954877616","2954877631","NL" +"2954877632","2954877651","FR" +"2954877652","2954877655","CZ" +"2954877656","2954877663","FR" +"2954877664","2954877667","GB" +"2954877668","2954877671","PL" +"2954877672","2954877675","FR" +"2954877676","2954877679","PL" +"2954877680","2954877727","FR" +"2954877728","2954877743","IE" +"2954877744","2954877779","FR" +"2954877780","2954877783","A1" +"2954877784","2954877791","IT" +"2954877792","2954877811","FR" +"2954877812","2954877815","DE" +"2954877816","2954877819","FR" +"2954877820","2954877823","PL" +"2954877824","2954877963","FR" +"2954877964","2954877967","DE" +"2954877968","2954877983","PT" +"2954877984","2954877991","LT" +"2954877992","2954877995","ES" +"2954877996","2954877999","PL" +"2954878000","2954878007","FR" +"2954878008","2954878011","IT" +"2954878012","2954878015","GB" +"2954878016","2954878031","FR" +"2954878032","2954878035","NL" +"2954878036","2954878039","FR" +"2954878040","2954878047","DE" +"2954878048","2954878063","FR" +"2954878064","2954878079","IT" +"2954878080","2954878095","FR" +"2954878096","2954878111","ES" +"2954878112","2954878143","PT" +"2954878144","2954878207","FR" +"2954878208","2954878463","ES" +"2954878464","2954878471","CH" +"2954878472","2954878475","FR" +"2954878476","2954878479","GB" +"2954878480","2954878495","NL" +"2954878496","2954878499","GB" +"2954878500","2954878511","FR" +"2954878512","2954878527","CZ" +"2954878528","2954878551","PL" +"2954878552","2954878555","CH" +"2954878556","2954878559","PL" +"2954878560","2954878575","FR" +"2954878576","2954878579","GB" +"2954878580","2954878583","NL" +"2954878584","2954878591","GB" +"2954878592","2954878607","BE" +"2954878608","2954878623","FI" +"2954878624","2954878631","PL" +"2954878632","2954878635","IT" +"2954878636","2954878639","PL" +"2954878640","2954878655","IT" +"2954878656","2954878687","PL" +"2954878688","2954878695","FR" +"2954878696","2954878703","IE" +"2954878704","2954878707","IT" +"2954878708","2954878711","PL" +"2954878712","2954878719","ES" +"2954878720","2954878763","FR" +"2954878764","2954878767","GB" +"2954878768","2954878783","FR" +"2954878784","2954878847","IE" +"2954878848","2954878855","FR" +"2954878856","2954878863","IE" +"2954878864","2954878867","BE" +"2954878868","2954878871","FI" +"2954878872","2954878875","PL" +"2954878876","2954878879","IE" +"2954878880","2954878883","ES" +"2954878884","2954878887","PL" +"2954878888","2954878891","FR" +"2954878892","2954878895","GB" +"2954878896","2954878899","DE" +"2954878900","2954878903","GB" +"2954878904","2954878907","NL" +"2954878908","2954878911","PL" +"2954878912","2954878915","DE" +"2954878916","2954878919","PL" +"2954878920","2954878931","FR" +"2954878932","2954878939","GB" +"2954878940","2954878943","PL" +"2954878944","2954887167","FR" +"2954887168","2954891263","UA" +"2954891264","2954895359","IT" +"2954895360","2954897407","RU" +"2954897408","2954899455","DE" +"2954899456","2954901503","ES" +"2954901504","2954903551","IT" +"2954903552","2954905599","NL" +"2954905600","2954907647","IE" +"2954907648","2954909695","GB" +"2954909696","2954911743","DE" +"2954911744","2954919423","NL" +"2954919424","2954919935","IE" +"2954919936","2954928127","RU" +"2954928128","2954932223","PL" +"2954932224","2954936319","RU" +"2954936320","2954938367","AM" +"2954938368","2954940415","HU" +"2954940416","2954944511","DE" +"2954944512","2954946559","GB" +"2954946560","2954948095","DE" +"2954948096","2954948351","NL" +"2954948352","2954948607","DE" +"2954948608","2954950655","RU" +"2954950656","2954952703","ES" +"2954952704","2955018239","TR" +"2955018240","2955026431","FR" +"2955026432","2955034623","NL" +"2955034624","2955051007","IE" +"2955051008","2955067391","NL" +"2955067392","2955069439","IE" +"2955069440","2955071487","NL" +"2955071488","2955073535","IE" +"2955073536","2955075583","FR" +"2955075584","2955083775","NL" +"2955083776","2955149311","GB" +"2955149312","2955411455","UA" +"2955411456","2955673599","TR" +"2955673600","2955804671","SA" +"2955804672","2955837439","EE" +"2955837440","2955845631","IR" +"2955845632","2955853823","GB" +"2955853824","2955870207","CH" +"2955870208","2955935743","UA" +"2955935744","2956230655","RU" +"2956230656","2956238847","SI" +"2956238848","2956242943","ES" +"2956242944","2956244991","SE" +"2956244992","2956247039","FR" +"2956247040","2956251135","DE" +"2956251136","2956253183","GB" +"2956253184","2956255231","IE" +"2956255232","2956259327","FR" +"2956259328","2956261375","DE" +"2956261376","2956263423","ES" +"2956263424","2956279039","TR" +"2956279040","2956279295","BG" +"2956279296","2956293631","TR" +"2956293632","2956293887","SY" +"2956293888","2956296191","TR" +"2956296192","2956328959","RU" +"2956328960","2956460031","TR" +"2956460032","2956468223","RU" +"2956468224","2956470271","LV" +"2956470272","2956472319","NL" +"2956472320","2956474367","RU" +"2956474368","2956476415","GB" +"2956476416","2956492799","ES" +"2956492800","2956496895","CH" +"2956496896","2956500991","IR" +"2956500992","2956503039","NL" +"2956503040","2956504319","RU" +"2956504320","2956504447","NL" +"2956504448","2956504831","RU" +"2956504832","2956505087","GB" +"2956505088","2956506111","NL" +"2956506112","2956506623","GB" +"2956506624","2956506879","RU" +"2956506880","2956507135","DE" +"2956507136","2956508159","NL" +"2956508160","2956508415","RU" +"2956508416","2956508671","FR" +"2956508672","2956509183","NL" +"2956509184","2956517375","GB" +"2956517376","2956518095","NL" +"2956518096","2956518111","FI" +"2956518112","2956521471","NL" +"2956521472","2956525567","SE" +"2956525568","2956533759","JO" +"2956533760","2956535807","FR" +"2956535808","2956537855","LV" +"2956537856","2956541951","UA" +"2956541952","2956543999","FR" +"2956544000","2956546047","RU" +"2956546048","2956548095","FR" +"2956548096","2956550143","ME" +"2956550144","2956554239","ES" +"2956554240","2956558335","IT" +"2956558336","2956574719","DE" +"2956574720","2956576767","SE" +"2956576768","2956578815","ES" +"2956578816","2956582911","RU" +"2956582912","2956587007","CH" +"2956587008","2956589055","FR" +"2956589056","2956593151","GB" +"2956593152","2956595199","ES" +"2956595200","2956597247","PL" +"2956597248","2956599295","NL" +"2956599296","2956607487","RU" +"2956607488","2956611583","PS" +"2956611584","2956613631","IT" +"2956613632","2956613887","GB" +"2956613888","2956614143","NL" +"2956614144","2956614399","FR" +"2956614400","2956615679","EU" +"2956615680","2956623871","GB" +"2956623872","2956656639","GR" +"2956656640","2956722175","RU" +"2956722176","2956787711","BY" +"2956787712","2956820479","IE" +"2956820480","2956822527","NL" +"2956822528","2956823039","SE" +"2956823040","2956823167","GB" +"2956823168","2956823551","SE" +"2956823552","2956823676","US" +"2956823677","2956823677","A1" +"2956823678","2956824575","US" +"2956824576","2956826623","PT" +"2956826624","2956827647","US" +"2956827648","2956828671","DK" +"2956828672","2956832767","BA" +"2956832768","2956836863","AT" +"2956836864","2956853247","SK" +"2956853248","2956865535","HR" +"2956865536","2956869631","IT" +"2956869632","2956886015","RU" +"2956886016","2956888063","GB" +"2956888064","2956890111","BE" +"2956890112","2956892159","IR" +"2956892160","2956894207","IT" +"2956894208","2956897279","BE" +"2956897280","2956897535","NL" +"2956897536","2956898047","BE" +"2956898048","2956898303","NL" +"2956898304","2956902399","RU" +"2956902400","2956904447","NL" +"2956904448","2956906495","DK" +"2956906496","2956908543","GB" +"2956908544","2956910591","RU" +"2956910592","2956914687","CZ" +"2956914688","2956918783","RU" +"2956918784","2956984319","HU" +"2956984320","2957049855","SE" +"2957049856","2957058047","PS" +"2957058048","2957066239","RU" +"2957066240","2957068287","GB" +"2957068288","2957070335","LU" +"2957070336","2957074431","IT" +"2957074432","2957082623","RU" +"2957082624","2957088511","DE" +"2957088512","2957088767","AT" +"2957088768","2957093887","DE" +"2957093888","2957096959","CH" +"2957096960","2957105663","DE" +"2957105664","2957105919","GB" +"2957105920","2957106687","AT" +"2957106688","2957106936","GB" +"2957106937","2957106943","AT" +"2957106944","2957107192","DE" +"2957107193","2957107199","AT" +"2957107200","2957107448","DE" +"2957107449","2957107455","AT" +"2957107456","2957107704","DE" +"2957107705","2957107711","AT" +"2957107712","2957107960","DE" +"2957107961","2957107967","AT" +"2957107968","2957108216","DE" +"2957108217","2957108223","AT" +"2957108224","2957108472","DE" +"2957108473","2957108479","AT" +"2957108480","2957108728","DE" +"2957108729","2957108735","AT" +"2957108736","2957108984","DE" +"2957108985","2957108991","AT" +"2957108992","2957109240","DE" +"2957109241","2957109247","AT" +"2957109248","2957109496","DE" +"2957109497","2957109503","AT" +"2957109504","2957109752","DE" +"2957109753","2957109759","AT" +"2957109760","2957110008","DE" +"2957110009","2957110015","AT" +"2957110016","2957110264","DE" +"2957110265","2957110271","AT" +"2957110272","2957110520","DE" +"2957110521","2957110527","AT" +"2957110528","2957110776","DE" +"2957110777","2957110783","AT" +"2957110784","2957111032","DE" +"2957111033","2957111039","AT" +"2957111040","2957111288","DE" +"2957111289","2957111295","AT" +"2957111296","2957111544","DE" +"2957111545","2957111551","AT" +"2957111552","2957111800","DE" +"2957111801","2957111807","AT" +"2957111808","2957112056","DE" +"2957112057","2957112063","AT" +"2957112064","2957112312","DE" +"2957112313","2957112319","AT" +"2957112320","2957112568","DE" +"2957112569","2957112575","AT" +"2957112576","2957112824","DE" +"2957112825","2957112831","AT" +"2957112832","2957113080","DE" +"2957113081","2957113087","AT" +"2957113088","2957113336","DE" +"2957113337","2957113343","AT" +"2957113344","2957113592","DE" +"2957113593","2957113599","AT" +"2957113600","2957113848","DE" +"2957113849","2957113855","AT" +"2957113856","2957114104","DE" +"2957114105","2957114111","AT" +"2957114112","2957114360","DE" +"2957114361","2957114367","AT" +"2957114368","2957114616","DE" +"2957114617","2957114623","AT" +"2957114624","2957114872","DE" +"2957114873","2957114879","AT" +"2957114880","2957115128","DE" +"2957115129","2957180927","AT" +"2957180928","2957189119","UA" +"2957189120","2957193215","LV" +"2957193216","2957195263","RU" +"2957195264","2957197311","PS" +"2957197312","2957201407","IR" +"2957201408","2957202431","A1" +"2957202432","2957202463","GB" +"2957202464","2957202467","PL" +"2957202468","2957202471","KR" +"2957202472","2957202475","BR" +"2957202476","2957202479","EG" +"2957202480","2957202483","ZA" +"2957202484","2957202487","IS" +"2957202488","2957202491","CA" +"2957202492","2957202495","IL" +"2957202496","2957202499","DE" +"2957202500","2957202503","AR" +"2957202504","2957202507","NZ" +"2957202508","2957202511","DE" +"2957202512","2957202527","NO" +"2957202528","2957202543","SE" +"2957202544","2957202551","FI" +"2957202552","2957202559","EE" +"2957202560","2957202567","LV" +"2957202568","2957202575","LT" +"2957202576","2957202583","BY" +"2957202584","2957202591","UA" +"2957202592","2957202599","RO" +"2957202600","2957202607","BG" +"2957202608","2957202615","GR" +"2957202616","2957202623","TR" +"2957202624","2957202627","AT" +"2957202628","2957202631","IT" +"2957202632","2957202639","CH" +"2957202640","2957202643","LU" +"2957202644","2957202647","BE" +"2957202648","2957202651","NL" +"2957202652","2957202667","DK" +"2957202668","2957202671","FR" +"2957202672","2957202675","US" +"2957202676","2957202679","ES" +"2957202680","2957202683","PT" +"2957202684","2957202687","AU" +"2957202688","2957202691","RU" +"2957202692","2957202699","IE" +"2957202700","2957202703","JP" +"2957202704","2957202943","US" +"2957202944","2957203455","A1" +"2957203456","2957205503","FR" +"2957205504","2957213695","PS" +"2957213696","2957221887","FR" +"2957221888","2957228031","GB" +"2957228032","2957230079","DK" +"2957230080","2957238271","RS" +"2957238272","2957240319","CZ" +"2957240320","2957242367","BG" +"2957242368","2957244415","RU" +"2957244416","2957246463","HU" +"2957246464","2957311999","SE" +"2957312000","2957377535","RU" +"2957377536","2957508607","SE" +"2957508608","2957574143","FI" +"2957574144","2957639679","GE" +"2957639680","2957641727","GB" +"2957641728","2957643775","RU" +"2957643776","2957647871","GB" +"2957647872","2957649919","FR" +"2957649920","2957651967","CH" +"2957651968","2957654015","AE" +"2957654016","2957656063","DE" +"2957656064","2957672447","GE" +"2957672448","2957680639","CZ" +"2957680640","2957682435","GB" +"2957682436","2957682446","US" +"2957682447","2957688831","GB" +"2957688832","2957690879","SE" +"2957690880","2957692927","RU" +"2957692928","2957694975","NO" +"2957694976","2957697023","CZ" +"2957697024","2957705215","NL" +"2957705216","2957770751","NO" +"2957770752","2957836287","SI" +"2957836288","2957869055","RU" +"2957869056","2957901823","HU" +"2957901824","2958032895","PT" +"2958032896","2958557183","ES" +"2958557184","2958819327","TR" +"2958819328","2958884863","GR" +"2958884864","2958950399","FI" +"2958950400","2959081471","DE" +"2959081472","2959089663","RU" +"2959089664","2959093759","PL" +"2959093760","2959097855","RO" +"2959097856","2959099903","RU" +"2959099904","2959101951","UA" +"2959101952","2959103999","RU" +"2959104000","2959106047","RO" +"2959106048","2959114239","AT" +"2959114240","2959118335","RU" +"2959118336","2959120383","PL" +"2959120384","2959122431","AT" +"2959122432","2959126527","PL" +"2959126528","2959128575","RO" +"2959128576","2959130623","RU" +"2959130624","2959138815","UA" +"2959138816","2959147007","RU" +"2959147008","2959149055","UA" +"2959149056","2959151103","CZ" +"2959151104","2959155199","PL" +"2959155200","2959159295","RU" +"2959159296","2959161343","PL" +"2959161344","2959163391","RO" +"2959163392","2959167487","UA" +"2959167488","2959171583","PL" +"2959171584","2959175679","RU" +"2959175680","2959179775","UA" +"2959179776","2959181823","RU" +"2959181824","2959183871","PL" +"2959183872","2959187967","RO" +"2959187968","2959204351","RU" +"2959204352","2959208447","RO" +"2959208448","2959210495","CZ" +"2959210496","2959212543","PL" +"2959212544","2959220735","UA" +"2959220736","2959224831","RO" +"2959224832","2959226879","UA" +"2959226880","2959228927","RO" +"2959228928","2959237119","UA" +"2959237120","2959241215","CZ" +"2959241216","2959245311","PL" +"2959245312","2959253503","RU" +"2959253504","2959255551","DE" +"2959255552","2959261695","RU" +"2959261696","2959278079","KZ" +"2959278080","2959282175","RU" +"2959282176","2959290367","RO" +"2959290368","2959292415","PL" +"2959292416","2959343615","RU" +"2959343616","2959351807","UA" +"2959351808","2959353855","EU" +"2959353856","2959355903","RU" +"2959355904","2959357951","RO" +"2959357952","2959359999","UA" +"2959360000","2959384575","RU" +"2959384576","2959392767","UA" +"2959392768","2959394815","PL" +"2959394816","2959398911","ES" +"2959398912","2959400959","RU" +"2959400960","2959405055","ES" +"2959405056","2959409151","RU" +"2959409152","2959413247","UA" +"2959413248","2959417343","ES" +"2959417344","2959423487","IR" +"2959423488","2959427583","RU" +"2959427584","2959429631","ES" +"2959429632","2959431679","PL" +"2959431680","2959433727","RU" +"2959433728","2959441919","UA" +"2959441920","2959446015","PL" +"2959446016","2959450111","CZ" +"2959450112","2959452159","PL" +"2959452160","2959454207","RO" +"2959454208","2959456255","SK" +"2959456256","2959466495","UA" +"2959466496","2959474687","RU" +"2959474688","2959491071","UA" +"2959491072","2959493119","NL" +"2959493120","2959495167","CZ" +"2959495168","2959499263","PL" +"2959499264","2959505407","SK" +"2959505408","2959507455","RO" +"2959507456","2959515647","CZ" +"2959515648","2959517695","RU" +"2959517696","2959519743","DE" +"2959519744","2959523839","PL" +"2959523840","2959532031","UA" +"2959532032","2959540223","IR" +"2959540224","2959548415","UA" +"2959548416","2959552511","PL" +"2959552512","2959558655","UA" +"2959558656","2959560703","PL" +"2959560704","2959568895","RU" +"2959568896","2959570943","UA" +"2959570944","2959572991","RO" +"2959572992","2959581183","RU" +"2959581184","2959585279","PL" +"2959585280","2959591423","LV" +"2959591424","2959595519","UA" +"2959595520","2959597567","RS" +"2959597568","2959601663","UA" +"2959601664","2959603711","RO" +"2959603712","2959605759","IT" +"2959605760","2959632383","UA" +"2959632384","2959634431","RS" +"2959634432","2959636479","PL" +"2959636480","2959648767","RU" +"2959648768","2959650815","UA" +"2959650816","2959652863","PL" +"2959652864","2959654911","UA" +"2959654912","2959663103","RU" +"2959663104","2959704063","UA" +"2959704064","2959708159","PL" +"2959708160","2959712255","RO" +"2959712256","2959728639","UA" +"2959728640","2959736831","RO" +"2959736832","2959738879","UA" +"2959738880","2959745023","RU" +"2959745024","2959747071","PL" +"2959747072","2959749119","PS" +"2959749120","2959753215","LV" +"2959753216","2959761407","RU" +"2959761408","2959763455","LV" +"2959763456","2959765503","PL" +"2959765504","2959767551","RU" +"2959767552","2959769599","RS" +"2959769600","2959777791","RU" +"2959777792","2959783935","LV" +"2959783936","2959785983","SK" +"2959785984","2959794175","UA" +"2959794176","2959796223","IL" +"2959796224","2959804415","RU" +"2959804416","2959806463","RO" +"2959806464","2959810559","SK" +"2959810560","2959814655","PL" +"2959814656","2959818751","RU" +"2959818752","2959822847","RO" +"2959822848","2959824895","RU" +"2959824896","2959826943","UA" +"2959826944","2959828991","RU" +"2959828992","2959833087","PL" +"2959833088","2959835135","CZ" +"2959835136","2959843327","UA" +"2959843328","2959845375","RU" +"2959845376","2959847423","PL" +"2959847424","2959853567","UA" +"2959853568","2959867903","RU" +"2959867904","2959876095","UA" +"2959876096","2959880191","RS" +"2959880192","2959882239","RU" +"2959882240","2959884287","BA" +"2959884288","2959892479","KZ" +"2959892480","2959900671","UA" +"2959900672","2959902719","PL" +"2959902720","2959915007","RU" +"2959915008","2959917055","UA" +"2959917056","2959925247","RU" +"2959925248","2959927295","RO" +"2959927296","2959929343","UA" +"2959929344","2959935487","RU" +"2959935488","2959937535","UA" +"2959937536","2959945727","RU" +"2959945728","2959947775","PL" +"2959947776","2959949823","SK" +"2959949824","2959966207","RU" +"2959966208","2959968255","PL" +"2959968256","2959970303","RS" +"2959970304","2959974399","RU" +"2959974400","2959976447","PL" +"2959976448","2959998975","UA" +"2960031744","2960035839","RU" +"2960035840","2960039935","PL" +"2960039936","2960054271","RU" +"2960054272","2960056319","RO" +"2960056320","2960064511","RU" +"2960064512","2960066559","RO" +"2960066560","2960068607","RU" +"2960068608","2960072703","PL" +"2960072704","2960080895","UA" +"2960080896","2960084991","RU" +"2960084992","2960089087","UA" +"2960089088","2960091135","RU" +"2960091136","2960093183","PT" +"2960093184","2960105471","PL" +"2960105472","2960109567","RO" +"2960109568","2960113663","UA" +"2960113664","2960117759","NO" +"2960117760","2960119807","RU" +"2960119808","2960121855","CH" +"2960121856","2960125951","PL" +"2960125952","2960127999","UA" +"2960128000","2960130047","RU" +"2960130048","2960138239","UA" +"2960138240","2960148479","RU" +"2960148480","2960150527","PL" +"2960150528","2960152575","RO" +"2960152576","2960158719","RU" +"2960158720","2960160767","PL" +"2960160768","2960162815","UA" +"2960162816","2960171007","CZ" +"2960171008","2960175103","RU" +"2960175104","2960179199","SK" +"2960179200","2960205823","RU" +"2960205824","2960207871","RO" +"2960207872","2960211967","RU" +"2960211968","2960224255","RO" +"2960224256","2960228351","RU" +"2960228352","2960232447","TJ" +"2960232448","2960240639","UA" +"2960240640","2960244735","RO" +"2960244736","2960248831","PL" +"2960248832","2960265215","UA" +"2960265216","2960269311","RU" +"2960269312","2960273407","UA" +"2960273408","2960275455","RU" +"2960275456","2960277503","RO" +"2960277504","2960285695","RU" +"2960285696","2960289791","RO" +"2960289792","2960320511","RU" +"2960320512","2960322559","PL" +"2960322560","2960326655","CZ" +"2960326656","2960334847","PL" +"2960334848","2960347135","RU" +"2960347136","2960349183","PL" +"2960349184","2960351231","RU" +"2960351232","2960353279","UA" +"2960353280","2960367615","RU" +"2960367616","2960369663","DE" +"2960369664","2960371711","IT" +"2960371712","2960383999","RU" +"2960384000","2960388095","RO" +"2960388096","2960392191","PL" +"2960392192","2960400383","RU" +"2960400384","2960404479","RO" +"2960404480","2960408575","RU" +"2960408576","2960416767","UA" +"2960416768","2960424959","SK" +"2960424960","2960427007","RO" +"2960427008","2960429055","RU" +"2960433152","2960441343","RU" +"2960441344","2960443391","UA" +"2960443392","2960445439","PL" +"2960445440","2960449535","RU" +"2960449536","2960453631","RO" +"2960453632","2960472063","RU" +"2960472064","2960474111","NL" +"2960474112","2960482303","UA" +"2960482304","2960484351","TR" +"2960484352","2960486399","DE" +"2960486400","2960498687","RU" +"2960498688","2960506879","UA" +"2960506880","2960531455","RU" +"2960531456","2960533503","RO" +"2960533504","2960537599","UA" +"2960537600","2960539647","RO" +"2960539648","2960543743","RU" +"2960543744","2960547839","RO" +"2960547840","2960551935","SK" +"2960551936","2960558079","RU" +"2960558080","2960560127","PL" +"2960560128","2960562175","UA" +"2960562176","2960564223","BY" +"2960564224","2960576511","RO" +"2960576512","2960580607","CZ" +"2960580608","2960588799","RU" +"2960588800","2960592895","UA" +"2960592896","2960594943","RU" +"2960594944","2960596991","UA" +"2960596992","2960605183","PL" +"2960605184","2960621567","UA" +"2960621568","2960629759","CZ" +"2960629760","2960646143","RU" +"2960646144","2960648191","KZ" +"2960648192","2960650239","UA" +"2960650240","2960652287","CZ" +"2960652288","2960654335","PS" +"2960654336","2960658431","RU" +"2960658432","2960660479","US" +"2960660480","2960662527","RU" +"2960662528","2960670719","UA" +"2960670720","2960678911","RU" +"2960678912","2960685055","UA" +"2960685056","2960687103","PL" +"2960687104","2960695295","FR" +"2960695296","2960697343","RU" +"2960697344","2960699391","ES" +"2960699392","2960719871","RU" +"2960719872","2960723967","CZ" +"2960723968","2960726015","RU" +"2960726016","2960732159","RO" +"2960732160","2960736255","RU" +"2960736256","2960738303","ES" +"2960738304","2960740351","UA" +"2961178624","2965372927","FR" +"2965372928","2965766143","RU" +"2965766144","2965897215","DE" +"2965897216","2966028287","IT" +"2966028288","2966159359","QA" +"2966159360","2966290431","AE" +"2966290432","2966421503","IT" +"2966421504","2966945791","RU" +"2966945792","2967273471","TR" +"2967273472","2967277567","RU" +"2967277568","2967281663","IR" +"2967281664","2967283711","PT" +"2967283712","2967285759","DE" +"2967285760","2967287807","UA" +"2967287808","2967289855","GB" +"2967289856","2967291903","IR" +"2967291904","2967293951","RS" +"2967293952","2967295999","SE" +"2967296000","2967298047","NO" +"2967298048","2967306239","PL" +"2967306240","2967339007","GE" +"2967339008","2967343103","BG" +"2967343104","2967345151","RU" +"2967345152","2967347199","ES" +"2967347200","2967347455","HR" +"2967347456","2967347583","GB" +"2967347584","2967351295","HR" +"2967351296","2967355391","FR" +"2967355392","2967371775","RO" +"2967371776","2967388159","KZ" +"2967388160","2967392255","RU" +"2967392256","2967394303","FR" +"2967394304","2967396351","RU" +"2967396352","2967398399","CZ" +"2967398400","2967400447","DK" +"2967400448","2967404543","RU" +"2967404544","2967441407","RO" +"2967441408","2967445503","MD" +"2967445504","2967470079","RO" +"2967470080","2967601151","SA" +"2967601152","2967633919","HU" +"2967633920","2967666687","RU" +"2967666688","2967699455","TR" +"2967699456","2967703551","GB" +"2967703552","2967707647","ES" +"2967707648","2967709695","PL" +"2967709696","2967711743","IT" +"2967711744","2967715839","RU" +"2967715840","2967724031","GB" +"2967724032","2967728127","CY" +"2967728128","2967730175","GB" +"2967730176","2967732223","CZ" +"2967732224","2967994367","IL" +"2967994368","2968584191","TR" +"2968584192","2968600575","HU" +"2968600576","2968602623","IQ" +"2968602624","2968604671","PL" +"2968604672","2968608767","IQ" +"2968608768","2968610815","RU" +"2968610816","2968612863","UA" +"2968612864","2968614911","IL" +"2968614912","2968616959","FR" +"2968616960","2968625151","UA" +"2968625152","2968629247","DE" +"2968629248","2968631295","LB" +"2968631296","2968633343","SA" +"2968633344","2968643583","RU" +"2968643584","2968645631","NO" +"2968645632","2968647679","PL" +"2968647680","2968647728","FR" +"2968647729","2968647743","GB" +"2968647744","2968647823","FR" +"2968647824","2968647935","GB" +"2968647936","2968647984","FR" +"2968647985","2968647999","GB" +"2968648000","2968648079","FR" +"2968648080","2968648191","GB" +"2968648192","2968648223","FR" +"2968648224","2968648255","CH" +"2968648256","2968648287","GB" +"2968648288","2968648319","BE" +"2968648320","2968648384","FR" +"2968648385","2968648447","GB" +"2968648448","2968648479","FR" +"2968648480","2968648511","CH" +"2968648512","2968648543","GB" +"2968648544","2968648575","BE" +"2968648576","2968648640","FR" +"2968648641","2968649723","GB" +"2968649724","2968649727","FR" +"2968649728","2969042943","IT" +"2969042944","2969567231","GB" +"2969567232","2986344447","BR" +"2986344448","2987393023","DE" +"2987393024","2987397119","IM" +"2987397120","2987401215","LV" +"2987401216","2987405311","LT" +"2987405312","2987409407","DE" +"2987409408","2987413503","NO" +"2987413504","2987417599","UA" +"2987417600","2987425791","PL" +"2987425792","2987429887","BG" +"2987429888","2987433215","RU" +"2987433216","2987433287","KZ" +"2987433288","2987433291","RU" +"2987433292","2987433331","KZ" +"2987433332","2987433335","RU" +"2987433336","2987433339","KZ" +"2987433340","2987433347","RU" +"2987433348","2987433359","KZ" +"2987433360","2987433367","RU" +"2987433368","2987433379","KZ" +"2987433380","2987433383","RU" +"2987433384","2987433471","KZ" +"2987433472","2987433983","RU" +"2987433984","2987438079","FR" +"2987438080","2987442175","FI" +"2987442176","2987446271","IE" +"2987446272","2987450367","SE" +"2987450368","2987454463","GB" +"2987454464","2987458559","FR" +"2987458560","2987462655","CZ" +"2987462656","2987466751","RS" +"2987466752","2987470847","GB" +"2987470848","2987474431","IQ" +"2987474432","2987474943","US" +"2987474944","2987479039","GB" +"2987479040","2987487231","CZ" +"2987487232","2987491327","HR" +"2987491328","2987495423","RU" +"2987495424","2987499519","NO" +"2987499520","2987500511","MD" +"2987500512","2987500543","US" +"2987500544","2987500767","MD" +"2987500768","2987500799","US" +"2987500800","2987503615","MD" +"2987503616","2987511807","RU" +"2987511808","2987515903","JO" +"2987515904","2987519487","A2" +"2987519488","2987519743","KE" +"2987519744","2987519999","A2" +"2987520000","2987524095","GB" +"2987524096","2987528191","RU" +"2987528192","2987528447","US" +"2987528448","2987528703","A1" +"2987528704","2987529215","US" +"2987529216","2987532287","NL" +"2987532288","2987536383","MD" +"2987536384","2987540479","FR" +"2987540480","2987544575","SK" +"2987544576","2987548671","NL" +"2987548672","2987552767","RU" +"2987552768","2987556863","GB" +"2987556864","2987557247","NL" +"2987557248","2987557279","BE" +"2987557280","2987557312","NL" +"2987557313","2987557375","BE" +"2987557376","2987558431","NL" +"2987558432","2987558463","BE" +"2987558464","2987559936","NL" +"2987559937","2987559951","BE" +"2987559952","2987560959","NL" +"2987560960","2987562239","DE" +"2987562240","2987562263","CY" +"2987562264","2987562275","SE" +"2987562276","2987565055","DE" +"2987565056","2987569151","AT" +"2987569152","2987573247","FR" +"2987573248","2987577343","TR" +"2987577344","2987585535","RU" +"2987585536","2987585791","DE" +"2987585792","2987585799","PA" +"2987585800","2987585807","CZ" +"2987585808","2987585815","ES" +"2987585816","2987585823","IT" +"2987585824","2987585831","FR" +"2987585832","2987585839","US" +"2987585840","2987585847","DK" +"2987585848","2987585855","SE" +"2987585856","2987585863","RU" +"2987585864","2987585871","GB" +"2987585872","2987585879","MX" +"2987585880","2987585887","BR" +"2987585888","2987585895","PL" +"2987585896","2987587135","DE" +"2987587136","2987587143","CN" +"2987587144","2987589119","DE" +"2987589120","2987589631","US" +"2987589632","2987593727","FR" +"2987593728","2987597823","LT" +"2987597824","2987601919","ES" +"2987601920","2987606015","IS" +"2987606016","2987606527","US" +"2987606528","2987610111","DE" +"2987610112","2987614207","RU" +"2987614208","2987618303","PL" +"2987618304","2987622399","NL" +"2987622400","2987626495","FR" +"2987626496","2987634687","IT" +"2987634688","2987638783","PL" +"2987638784","2987642879","FO" +"2987642880","2987651071","DE" +"2987651072","2987655167","RU" +"2987655168","2987658367","DE" +"2987658368","2987658383","AT" +"2987658384","2987659263","DE" +"2987659264","2987661311","BA" +"2987661312","2987663359","GB" +"2987663360","2987665407","IT" +"2987665408","2987667455","RU" +"2987667456","2987669503","FR" +"2987669504","2987671551","NL" +"2987671552","2987673599","FR" +"2987673600","2987675647","IT" +"2987675648","2987677695","IE" +"2987677696","2987681791","DE" +"2987681792","2987683839","NO" +"2987683840","2987685887","IT" +"2987685888","2987687935","GR" +"2987687936","2987689983","RU" +"2987689984","2987692031","CZ" +"2987692032","2987694079","SA" +"2987694080","2987696127","UA" +"2987696128","2987698175","RS" +"2987698176","2987700223","NL" +"2987700224","2987702271","RU" +"2987702272","2987704319","JO" +"2987704320","2987706367","GB" +"2987706368","2987708415","RS" +"2987708416","2987710463","PT" +"2987710464","2987712511","DK" +"2987712512","2987714559","GB" +"2987714560","2987716607","RU" +"2987716608","2987718655","FR" +"2987718656","2987720703","NL" +"2987720704","2987722751","DE" +"2987722752","2987724799","RU" +"2987724800","2987726847","NL" +"2987726848","2987728895","RU" +"2987728896","2987730943","GB" +"2987730944","2987732991","IR" +"2987732992","2987735039","HU" +"2987735040","2987737087","ES" +"2987737088","2987739135","RU" +"2987739136","2987743231","SE" +"2987743232","2987745279","DK" +"2987745280","2987747327","IT" +"2987747328","2987749375","ES" +"2987749376","2987751423","NL" +"2987751424","2987753471","RO" +"2987753472","2987755519","NO" +"2987755520","2987757567","PL" +"2987757568","2987759615","DE" +"2987759616","2987761663","PL" +"2987761664","2987763711","IR" +"2987763712","2987765759","GR" +"2987765760","2987767807","FR" +"2987767808","2987769855","CZ" +"2987769856","2987771903","FI" +"2987771904","2987773951","IT" +"2987773952","2987775999","FR" +"2987776000","2987776663","NL" +"2987776664","2987776671","BE" +"2987776672","2987778047","NL" +"2987778048","2987780095","CH" +"2987780096","2987782143","GB" +"2987782144","2987784191","EE" +"2987784192","2987786239","DK" +"2987786240","2987788287","FR" +"2987788288","2987788543","GB" +"2987788544","2987788799","DE" +"2987788800","2987789055","US" +"2987789056","2987789311","GB" +"2987789312","2987790335","TR" +"2987790336","2987792383","GB" +"2987792384","2987794431","CH" +"2987794432","2987796479","IQ" +"2987796480","2987800575","RU" +"2987800576","2987802623","NL" +"2987802624","2987804671","CH" +"2987804672","2987806719","IR" +"2987806720","2987808767","NL" +"2987808768","2987810815","RU" +"2987810816","2987812863","NO" +"2987812864","2987814911","CH" +"2987814912","2987816959","CZ" +"2987816960","2987817983","NL" +"2987817984","2987819007","GB" +"2987819008","2987821055","FR" +"2987821056","2987823103","GB" +"2987823104","2987827199","FR" +"2987827200","2987829247","GB" +"2987829248","2987831295","KZ" +"2987831296","2987833343","FR" +"2987833344","2987835391","IT" +"2987835392","2987837439","RU" +"2987837440","2987839487","SE" +"2987839488","2987841535","GB" +"2987841536","2987843583","RS" +"2987843584","2987845631","HU" +"2987845632","2987847679","NL" +"2987847680","2987849727","FR" +"2987849728","2987851775","IT" +"2987851776","2987853823","RU" +"2987853824","2987855871","IT" +"2987855872","2987857919","QA" +"2987857920","2987859967","DE" +"2987859968","2987862015","FR" +"2987862016","2987864063","BE" +"2987864064","2987866111","DE" +"2987866112","2987868159","ES" +"2987868160","2987870207","RO" +"2987870208","2987872255","GR" +"2987872256","2987874303","AT" +"2987874304","2987876351","SK" +"2987876352","2987878399","NO" +"2987878400","2987880447","PL" +"2987880448","2987882495","EE" +"2987882496","2987884543","DE" +"2987884544","2987886591","GB" +"2987886592","2987888639","UA" +"2987888640","2987890687","RU" +"2987890688","2987892735","FR" +"2987892736","2987894783","GB" +"2987894784","2987896831","CH" +"2987896832","2987898879","DK" +"2987898880","2987900927","NL" +"2987900928","2987902975","PL" +"2987902976","2987905023","IT" +"2987905024","2987907071","ES" +"2987907072","2987909119","CZ" +"2987909120","2987911167","RU" +"2987911168","2987913215","CZ" +"2987913216","2987915263","DK" +"2987915264","2987917311","IT" +"2987917312","2988179455","DE" +"2988179456","2988441599","SE" +"2988441600","2988441603","CH" +"2988441604","2988441607","GB" +"2988441608","2988441615","CH" +"2988441616","2988441647","FR" +"2988441648","2988441663","DE" +"2988441664","2988441695","IT" +"2988441696","2988441791","FR" +"2988441792","2988441807","PL" +"2988441808","2988441815","FR" +"2988441816","2988441819","FI" +"2988441820","2988441839","FR" +"2988441840","2988441843","IE" +"2988441844","2988441847","BE" +"2988441848","2988441855","FR" +"2988441856","2988441887","IT" +"2988441888","2988441895","FR" +"2988441896","2988441903","PL" +"2988441904","2988441911","IT" +"2988441912","2988441919","ES" +"2988441920","2988441931","PL" +"2988441932","2988441935","BE" +"2988441936","2988441939","FR" +"2988441940","2988441943","ES" +"2988441944","2988441947","PT" +"2988441948","2988441951","FR" +"2988441952","2988441967","PL" +"2988441968","2988441971","NL" +"2988441972","2988441975","CH" +"2988441976","2988441979","DE" +"2988441980","2988441983","IT" +"2988441984","2988441991","GB" +"2988441992","2988441995","ES" +"2988441996","2988441999","PT" +"2988442000","2988442003","PL" +"2988442004","2988442007","ES" +"2988442008","2988442047","FR" +"2988442048","2988442063","GB" +"2988442064","2988442067","FR" +"2988442068","2988442071","BE" +"2988442072","2988442075","FR" +"2988442076","2988442083","GB" +"2988442084","2988442087","DE" +"2988442088","2988442095","FR" +"2988442096","2988442099","IT" +"2988442100","2988442431","FR" +"2988442432","2988442439","CZ" +"2988442440","2988442447","ES" +"2988442448","2988442463","GB" +"2988442464","2988442495","FR" +"2988442496","2988442503","PL" +"2988442504","2988442511","GB" +"2988442512","2988442519","ES" +"2988442520","2988442527","DE" +"2988442528","2988442559","FR" +"2988442560","2988442583","PL" +"2988442584","2988442587","FR" +"2988442588","2988442591","ES" +"2988442592","2988442623","DE" +"2988442624","2988442647","PL" +"2988442648","2988442651","DE" +"2988442652","2988442655","GB" +"2988442656","2988442671","PL" +"2988442672","2988442675","GB" +"2988442676","2988442687","FR" +"2988442688","2988442695","PL" +"2988442696","2988442703","PT" +"2988442704","2988442895","FR" +"2988442896","2988442899","PL" +"2988442900","2988442903","FR" +"2988442904","2988442907","IT" +"2988442908","2988442911","FR" +"2988442912","2988442915","NL" +"2988442916","2988442919","IT" +"2988442920","2988442923","LT" +"2988442924","2988442927","IE" +"2988442928","2988442975","FR" +"2988442976","2988442995","GB" +"2988442996","2988442999","IE" +"2988443000","2988443007","GB" +"2988443008","2988443023","PT" +"2988443024","2988443027","CZ" +"2988443028","2988443031","BE" +"2988443032","2988443035","GB" +"2988443036","2988443039","BE" +"2988443040","2988443055","PL" +"2988443056","2988443071","DE" +"2988443072","2988443087","ES" +"2988443088","2988443111","PL" +"2988443112","2988443119","ES" +"2988443120","2988443391","FR" +"2988443392","2988443407","DE" +"2988443408","2988443439","FR" +"2988443440","2988443443","CZ" +"2988443444","2988443447","DE" +"2988443448","2988443455","FR" +"2988443456","2988443487","BE" +"2988443488","2988443539","FR" +"2988443540","2988443547","ES" +"2988443548","2988443551","IT" +"2988443552","2988443555","CH" +"2988443556","2988443559","PL" +"2988443560","2988443563","GB" +"2988443564","2988443567","PL" +"2988443568","2988443583","FR" +"2988443584","2988443647","GB" +"2988443648","2988443903","FR" +"2988443904","2988443919","BE" +"2988443920","2988443923","FR" +"2988443924","2988443927","PL" +"2988443928","2988444167","FR" +"2988444168","2988444171","CZ" +"2988444172","2988444175","FR" +"2988444176","2988444191","PT" +"2988444192","2988444199","FR" +"2988444200","2988444203","FI" +"2988444204","2988444207","NL" +"2988444208","2988444415","FR" +"2988444416","2988444679","ES" +"2988444680","2988444687","FR" +"2988444688","2988444695","LT" +"2988444696","2988444703","FR" +"2988444704","2988444719","GB" +"2988444720","2988444735","ES" +"2988444736","2988444739","GB" +"2988444740","2988444755","BE" +"2988444756","2988444759","DE" +"2988444760","2988444771","IE" +"2988444772","2988444775","GB" +"2988444776","2988444783","CZ" +"2988444784","2988444791","FI" +"2988444792","2988444795","DE" +"2988444796","2988444927","ES" +"2988444928","2988444931","PL" +"2988444932","2988444943","DE" +"2988444944","2988444967","PL" +"2988444968","2988444975","FR" +"2988444976","2988444991","IE" +"2988444992","2988444999","FR" +"2988445000","2988445007","PL" +"2988445008","2988445023","FR" +"2988445024","2988445027","PL" +"2988445028","2988445031","FR" +"2988445032","2988445035","ES" +"2988445036","2988445039","PL" +"2988445040","2988445119","FR" +"2988445120","2988445127","ES" +"2988445128","2988445139","FR" +"2988445140","2988445143","GB" +"2988445144","2988445151","IT" +"2988445152","2988445167","FR" +"2988445168","2988445183","ES" +"2988445184","2988445951","DE" +"2988445952","2988445967","FR" +"2988445968","2988445983","GB" +"2988445984","2988446207","DE" +"2988446208","2988446271","PL" +"2988446272","2988446275","IT" +"2988446276","2988446279","FR" +"2988446280","2988446287","BE" +"2988446288","2988446291","FR" +"2988446292","2988446295","ES" +"2988446296","2988446299","GB" +"2988446300","2988446307","FR" +"2988446308","2988446319","PL" +"2988446320","2988446323","FR" +"2988446324","2988446327","LT" +"2988446328","2988446335","NL" +"2988446336","2988446399","PL" +"2988446400","2988446463","FR" +"2988446464","2988446719","PL" +"2988446720","2988446975","DE" +"2988446976","2988447103","IT" +"2988447104","2988447231","FR" +"2988447232","2988447871","DE" +"2988447872","2988447923","PL" +"2988447924","2988447927","IT" +"2988447928","2988447935","PL" +"2988447936","2988447943","DE" +"2988447944","2988447947","GB" +"2988447948","2988447959","FR" +"2988447960","2988447967","IT" +"2988447968","2988447999","BE" +"2988448000","2988448127","DE" +"2988448128","2988448255","ES" +"2988448256","2988448511","DE" +"2988448512","2988448515","GB" +"2988448516","2988448519","FR" +"2988448520","2988448543","PL" +"2988448544","2988448547","GB" +"2988448548","2988448551","FR" +"2988448552","2988448559","PL" +"2988448560","2988448563","DE" +"2988448564","2988448575","ES" +"2988448576","2988448607","FR" +"2988448608","2988448639","ES" +"2988448640","2988448671","GB" +"2988448672","2988448691","IT" +"2988448692","2988448695","DE" +"2988448696","2988448703","FR" +"2988448704","2988448767","GB" +"2988448768","2988448783","FR" +"2988448784","2988448815","PL" +"2988448816","2988448831","ES" +"2988448832","2988448895","FR" +"2988448896","2988448903","IE" +"2988448904","2988448907","ES" +"2988448908","2988449007","FR" +"2988449008","2988449023","GB" +"2988449024","2988449055","PL" +"2988449056","2988449071","IT" +"2988449072","2988449087","FR" +"2988449088","2988449103","PL" +"2988449104","2988449119","DE" +"2988449120","2988449123","FR" +"2988449124","2988449127","DE" +"2988449128","2988449135","ES" +"2988449136","2988449151","FR" +"2988449152","2988449167","PL" +"2988449168","2988449175","GB" +"2988449176","2988449183","FR" +"2988449184","2988449191","PL" +"2988449192","2988449199","CZ" +"2988449200","2988449203","FR" +"2988449204","2988449207","PL" +"2988449208","2988449215","ES" +"2988449216","2988449247","FR" +"2988449248","2988449535","GB" +"2988449536","2988449631","FR" +"2988449632","2988449639","ES" +"2988449640","2988449643","CH" +"2988449644","2988449647","CZ" +"2988449648","2988449663","FR" +"2988449664","2988449695","DE" +"2988449696","2988449727","IT" +"2988449728","2988449743","BE" +"2988449744","2988449759","GB" +"2988449760","2988449791","CH" +"2988449792","2988451839","FR" +"2988451840","2988453887","BE" +"2988453888","2988457983","GB" +"2988457984","2988457987","FR" +"2988457988","2988457991","PL" +"2988457992","2988457995","CH" +"2988457996","2988457999","FR" +"2988458000","2988458015","DE" +"2988458016","2988458031","FR" +"2988458032","2988458047","IT" +"2988458048","2988458055","PL" +"2988458056","2988458063","CH" +"2988458064","2988458067","ES" +"2988458068","2988458075","FR" +"2988458076","2988458111","PL" +"2988458112","2988458247","FR" +"2988458248","2988458251","PL" +"2988458252","2988458255","BE" +"2988458256","2988458271","IT" +"2988458272","2988458275","GB" +"2988458276","2988458279","FI" +"2988458280","2988458283","ES" +"2988458284","2988458287","FR" +"2988458288","2988458291","BE" +"2988458292","2988458295","DE" +"2988458296","2988458299","GB" +"2988458300","2988458303","ES" +"2988458304","2988458319","FR" +"2988458320","2988458323","CZ" +"2988458324","2988458331","FR" +"2988458332","2988458335","GB" +"2988458336","2988458367","DE" +"2988458368","2988458399","FR" +"2988458400","2988458431","PL" +"2988458432","2988458495","FR" +"2988458496","2988458751","GB" +"2988458752","2988458759","FR" +"2988458760","2988458763","NL" +"2988458764","2988458767","ES" +"2988458768","2988459007","FR" +"2988459008","2988459015","PL" +"2988459016","2988459019","FR" +"2988459020","2988459023","GB" +"2988459024","2988459039","IE" +"2988459040","2988459051","FR" +"2988459052","2988459055","ES" +"2988459056","2988459071","CH" +"2988459072","2988459075","GB" +"2988459076","2988459079","ES" +"2988459080","2988459083","DE" +"2988459084","2988459087","FR" +"2988459088","2988459103","GB" +"2988459104","2988459111","FR" +"2988459112","2988459119","ES" +"2988459120","2988459127","IT" +"2988459128","2988459151","PL" +"2988459152","2988459167","FR" +"2988459168","2988459171","IE" +"2988459172","2988459175","FR" +"2988459176","2988459179","PL" +"2988459180","2988459183","FR" +"2988459184","2988459199","PL" +"2988459200","2988459223","FR" +"2988459224","2988459231","DE" +"2988459232","2988459235","GB" +"2988459236","2988459239","PL" +"2988459240","2988459243","FR" +"2988459244","2988459247","ES" +"2988459248","2988459251","LT" +"2988459252","2988459255","GB" +"2988459256","2988459259","FR" +"2988459260","2988459263","PL" +"2988459264","2988459519","ES" +"2988459520","2988459535","FR" +"2988459536","2988459539","GB" +"2988459540","2988459543","PL" +"2988459544","2988459547","ES" +"2988459548","2988459551","PL" +"2988459552","2988459583","FR" +"2988459584","2988459599","ES" +"2988459600","2988459603","GB" +"2988459604","2988459615","FR" +"2988459616","2988459619","CZ" +"2988459620","2988459623","IE" +"2988459624","2988459631","NL" +"2988459632","2988459639","FR" +"2988459640","2988459643","IT" +"2988459644","2988459647","CH" +"2988459648","2988459679","GB" +"2988459680","2988459683","ES" +"2988459684","2988459687","DE" +"2988459688","2988459691","IT" +"2988459692","2988459695","PL" +"2988459696","2988459711","FR" +"2988459712","2988459715","ES" +"2988459716","2988459719","FR" +"2988459720","2988459727","DE" +"2988459728","2988459731","FR" +"2988459732","2988459735","ES" +"2988459736","2988459743","PL" +"2988459744","2988459747","ES" +"2988459748","2988459751","PL" +"2988459752","2988459759","FR" +"2988459760","2988459767","GB" +"2988459768","2988459771","NL" +"2988459772","2988459775","GB" +"2988459776","2988459839","FR" +"2988459840","2988459855","IT" +"2988459856","2988459859","GB" +"2988459860","2988459863","FR" +"2988459864","2988459871","ES" +"2988459872","2988459895","PL" +"2988459896","2988459967","FR" +"2988459968","2988459999","ES" +"2988460000","2988460015","NL" +"2988460016","2988460031","FR" +"2988460032","2988460063","DE" +"2988460064","2988460095","FR" +"2988460096","2988460107","PL" +"2988460108","2988460111","DE" +"2988460112","2988460119","FR" +"2988460120","2988460123","DE" +"2988460124","2988460127","FR" +"2988460128","2988460131","PL" +"2988460132","2988460135","CZ" +"2988460136","2988460143","FR" +"2988460144","2988460147","GB" +"2988460148","2988460159","ES" +"2988460160","2988460191","GB" +"2988460192","2988460195","FR" +"2988460196","2988460199","NL" +"2988460200","2988460207","LT" +"2988460208","2988460223","PL" +"2988460224","2988460239","FR" +"2988460240","2988460243","BE" +"2988460244","2988460247","PL" +"2988460248","2988460255","FR" +"2988460256","2988460271","ES" +"2988460272","2988460275","FR" +"2988460276","2988460279","NL" +"2988460280","2988460287","PL" +"2988460288","2988460323","FR" +"2988460324","2988460327","GB" +"2988460328","2988460335","PL" +"2988460336","2988460339","FR" +"2988460340","2988460343","GB" +"2988460344","2988460367","FR" +"2988460368","2988460375","PL" +"2988460376","2988460543","FR" +"2988460544","2988460547","GB" +"2988460548","2988460551","DE" +"2988460552","2988460575","PL" +"2988460576","2988460591","PT" +"2988460592","2988460615","GB" +"2988460616","2988460623","PT" +"2988460624","2988460679","FR" +"2988460680","2988460687","DE" +"2988460688","2988460755","FR" +"2988460756","2988460759","PT" +"2988460760","2988460767","FR" +"2988460768","2988460799","PL" +"2988460800","2988460863","DE" +"2988460864","2988460927","FR" +"2988460928","2988460931","ES" +"2988460932","2988460943","PL" +"2988460944","2988460959","ES" +"2988460960","2988460991","GB" +"2988460992","2988460999","NL" +"2988461000","2988461003","FR" +"2988461004","2988461007","NL" +"2988461008","2988461011","FR" +"2988461012","2988461015","PL" +"2988461016","2988461023","FR" +"2988461024","2988461027","NL" +"2988461028","2988461035","ES" +"2988461036","2988461055","FR" +"2988461056","2988461087","PL" +"2988461088","2988461103","DE" +"2988461104","2988461255","FR" +"2988461256","2988461259","IT" +"2988461260","2988461263","PT" +"2988461264","2988461279","PL" +"2988461280","2988461295","IT" +"2988461296","2988461299","PL" +"2988461300","2988461307","FR" +"2988461308","2988461311","PL" +"2988461312","2988461375","CH" +"2988461376","2988461391","FR" +"2988461392","2988461395","CH" +"2988461396","2988461399","DE" +"2988461400","2988461403","ES" +"2988461404","2988461407","GB" +"2988461408","2988461411","IT" +"2988461412","2988461415","NL" +"2988461416","2988461419","IE" +"2988461420","2988461423","FR" +"2988461424","2988461431","IT" +"2988461432","2988461435","PT" +"2988461436","2988461439","BE" +"2988461440","2988461471","FI" +"2988461472","2988461475","PL" +"2988461476","2988461479","IE" +"2988461480","2988461483","CZ" +"2988461484","2988461487","LT" +"2988461488","2988461491","FR" +"2988461492","2988461495","PL" +"2988461496","2988461499","ES" +"2988461500","2988461503","PT" +"2988461504","2988461519","PL" +"2988461520","2988461523","PT" +"2988461524","2988461559","FR" +"2988461560","2988461567","GB" +"2988461568","2988461583","FR" +"2988461584","2988461587","PL" +"2988461588","2988461591","IE" +"2988461592","2988461595","IT" +"2988461596","2988461599","GB" +"2988461600","2988461615","FR" +"2988461616","2988461623","IT" +"2988461624","2988461695","FR" +"2988461696","2988461699","DE" +"2988461700","2988461703","PL" +"2988461704","2988461707","NL" +"2988461708","2988461711","BE" +"2988461712","2988461719","FR" +"2988461720","2988461723","DE" +"2988461724","2988461727","FR" +"2988461728","2988461731","PL" +"2988461732","2988461735","DE" +"2988461736","2988461743","PL" +"2988461744","2988461747","ES" +"2988461748","2988461751","IT" +"2988461752","2988461755","FR" +"2988461756","2988461759","NL" +"2988461760","2988461799","PL" +"2988461800","2988461811","DE" +"2988461812","2988461815","FR" +"2988461816","2988461819","PL" +"2988461820","2988461823","GB" +"2988461824","2988461839","PL" +"2988461840","2988461851","FR" +"2988461852","2988461855","PL" +"2988461856","2988461871","DE" +"2988461872","2988461879","FR" +"2988461880","2988461883","ES" +"2988461884","2988461887","PL" +"2988461888","2988461907","FR" +"2988461908","2988461911","ES" +"2988461912","2988461915","IT" +"2988461916","2988461919","NL" +"2988461920","2988461935","FR" +"2988461936","2988461951","GB" +"2988461952","2988462079","PL" +"2988462080","2988462083","GB" +"2988462084","2988462087","PL" +"2988462088","2988462091","IT" +"2988462092","2988462095","PL" +"2988462096","2988462119","FR" +"2988462120","2988462123","PL" +"2988462124","2988462127","GB" +"2988462128","2988462131","ES" +"2988462132","2988462143","FR" +"2988462144","2988462151","PL" +"2988462152","2988462155","IT" +"2988462156","2988462159","NL" +"2988462160","2988462167","ES" +"2988462168","2988462171","PL" +"2988462172","2988462175","ES" +"2988462176","2988462191","PL" +"2988462192","2988462199","FR" +"2988462200","2988462203","PL" +"2988462204","2988462303","FR" +"2988462304","2988462307","DE" +"2988462308","2988462311","NL" +"2988462312","2988462319","FR" +"2988462320","2988462323","PL" +"2988462324","2988462327","DE" +"2988462328","2988462331","GB" +"2988462332","2988462335","FR" +"2988462336","2988462463","ES" +"2988462464","2988462495","GB" +"2988462496","2988462527","DE" +"2988462528","2988462559","NL" +"2988462560","2988462587","FR" +"2988462588","2988462591","DE" +"2988462592","2988462599","FR" +"2988462600","2988462603","IT" +"2988462604","2988462607","ES" +"2988462608","2988462735","FR" +"2988462736","2988462743","IT" +"2988462744","2988462751","FR" +"2988462752","2988462767","PL" +"2988462768","2988462775","GB" +"2988462776","2988462779","PL" +"2988462780","2988462787","FR" +"2988462788","2988462799","PL" +"2988462800","2988462815","FR" +"2988462816","2988462823","BE" +"2988462824","2988462847","FR" +"2988462848","2988463103","BE" +"2988463104","2988463107","IT" +"2988463108","2988463111","FR" +"2988463112","2988463119","ES" +"2988463120","2988463123","GB" +"2988463124","2988463127","ES" +"2988463128","2988463131","FR" +"2988463132","2988463135","PL" +"2988463136","2988463143","ES" +"2988463144","2988463147","FR" +"2988463148","2988463151","ES" +"2988463152","2988463159","FR" +"2988463160","2988463167","ES" +"2988463168","2988463199","NL" +"2988463200","2988463203","PL" +"2988463204","2988463207","DE" +"2988463208","2988463211","FR" +"2988463212","2988463223","GB" +"2988463224","2988463227","ES" +"2988463228","2988463231","CH" +"2988463232","2988463251","FR" +"2988463252","2988463255","PL" +"2988463256","2988463259","IE" +"2988463260","2988463263","CH" +"2988463264","2988463279","PL" +"2988463280","2988463283","GB" +"2988463284","2988463315","FR" +"2988463316","2988463319","PL" +"2988463320","2988463323","FR" +"2988463324","2988463331","DE" +"2988463332","2988463335","IT" +"2988463336","2988463339","PT" +"2988463340","2988463343","FR" +"2988463344","2988463359","BE" +"2988463360","2988463615","FR" +"2988463616","2988463623","DE" +"2988463624","2988463627","PL" +"2988463628","2988463631","DE" +"2988463632","2988463647","GB" +"2988463648","2988463651","PL" +"2988463652","2988463659","GB" +"2988463660","2988463663","FR" +"2988463664","2988463679","PL" +"2988463680","2988463711","DE" +"2988463712","2988463743","FR" +"2988463744","2988463747","BE" +"2988463748","2988463759","FR" +"2988463760","2988463775","DE" +"2988463776","2988463791","FR" +"2988463792","2988463803","GB" +"2988463804","2988463823","FR" +"2988463824","2988463827","DE" +"2988463828","2988463831","ES" +"2988463832","2988463835","DE" +"2988463836","2988463839","FR" +"2988463840","2988463871","PL" +"2988463872","2988463907","FR" +"2988463908","2988463915","PL" +"2988463916","2988463919","GB" +"2988463920","2988463939","FR" +"2988463940","2988463943","DE" +"2988463944","2988463947","FR" +"2988463948","2988463951","GB" +"2988463952","2988463999","FR" +"2988464000","2988464007","IE" +"2988464008","2988464015","LT" +"2988464016","2988464019","PT" +"2988464020","2988464023","IT" +"2988464024","2988464027","GB" +"2988464028","2988464031","PL" +"2988464032","2988464055","FR" +"2988464056","2988464059","ES" +"2988464060","2988464063","CZ" +"2988464064","2988464095","PL" +"2988464096","2988464271","FR" +"2988464272","2988464275","ES" +"2988464276","2988464279","PL" +"2988464280","2988464283","FR" +"2988464284","2988464287","PL" +"2988464288","2988464295","FR" +"2988464296","2988464299","DE" +"2988464300","2988464303","GB" +"2988464304","2988464307","IT" +"2988464308","2988464311","PL" +"2988464312","2988464351","FR" +"2988464352","2988464355","DE" +"2988464356","2988464359","FR" +"2988464360","2988464363","PL" +"2988464364","2988464367","GB" +"2988464368","2988464527","FR" +"2988464528","2988464543","DE" +"2988464544","2988464551","FR" +"2988464552","2988464555","IT" +"2988464556","2988464559","NL" +"2988464560","2988464575","ES" +"2988464576","2988464591","GB" +"2988464592","2988464607","FR" +"2988464608","2988464611","DE" +"2988464612","2988464619","PL" +"2988464620","2988464623","ES" +"2988464624","2988464627","FR" +"2988464628","2988464631","IT" +"2988464632","2988464779","FR" +"2988464780","2988464783","PL" +"2988464784","2988464787","IT" +"2988464788","2988464791","ES" +"2988464792","2988464795","FR" +"2988464796","2988464799","GB" +"2988464800","2988464815","DE" +"2988464816","2988464819","FR" +"2988464820","2988464823","GB" +"2988464824","2988464827","CZ" +"2988464828","2988464831","PL" +"2988464832","2988464895","FR" +"2988464896","2988464911","PL" +"2988464912","2988464915","NL" +"2988464916","2988464919","DE" +"2988464920","2988464923","FI" +"2988464924","2988464927","FR" +"2988464928","2988464943","ES" +"2988464944","2988464947","FR" +"2988464948","2988464951","CH" +"2988464952","2988464955","FR" +"2988464956","2988464959","GB" +"2988464960","2988464963","IT" +"2988464964","2988464967","LT" +"2988464968","2988464971","PT" +"2988464972","2988464975","PL" +"2988464976","2988465215","FR" +"2988465216","2988465219","ES" +"2988465220","2988465223","IE" +"2988465224","2988465235","FR" +"2988465236","2988465239","ES" +"2988465240","2988465279","FR" +"2988465280","2988465295","DE" +"2988465296","2988465299","IT" +"2988465300","2988465343","FR" +"2988465344","2988465363","DE" +"2988465364","2988465367","PL" +"2988465368","2988465375","FR" +"2988465376","2988465391","IT" +"2988465392","2988465395","ES" +"2988465396","2988465399","GB" +"2988465400","2988465403","PT" +"2988465404","2988465407","DE" +"2988465408","2988465423","CH" +"2988465424","2988465439","PT" +"2988465440","2988465455","GB" +"2988465456","2988465479","FR" +"2988465480","2988465483","NL" +"2988465484","2988465503","FR" +"2988465504","2988465507","DE" +"2988465508","2988465511","PL" +"2988465512","2988465515","PT" +"2988465516","2988465519","GB" +"2988465520","2988465523","IT" +"2988465524","2988465527","ES" +"2988465528","2988465531","FR" +"2988465532","2988465535","GB" +"2988465536","2988465539","FR" +"2988465540","2988465543","GB" +"2988465544","2988465547","CZ" +"2988465548","2988465551","IT" +"2988465552","2988465559","ES" +"2988465560","2988465567","GB" +"2988465568","2988465571","ES" +"2988465572","2988465575","GB" +"2988465576","2988465583","DE" +"2988465584","2988465587","PL" +"2988465588","2988465591","ES" +"2988465592","2988465599","FR" +"2988465600","2988465615","PL" +"2988465616","2988465619","FR" +"2988465620","2988465623","IT" +"2988465624","2988465631","FR" +"2988465632","2988465647","IT" +"2988465648","2988465655","CZ" +"2988465656","2988465663","GB" +"2988465664","2988466047","FR" +"2988466048","2988466111","PL" +"2988466112","2988466119","FR" +"2988466120","2988466127","NL" +"2988466128","2988466131","PL" +"2988466132","2988466139","FR" +"2988466140","2988466143","PL" +"2988466144","2988466159","NL" +"2988466160","2988476415","FR" +"2988476416","2988478463","IT" +"2988478464","2988478487","FR" +"2988478488","2988478491","NL" +"2988478492","2988478495","GB" +"2988478496","2988478499","IT" +"2988478500","2988478503","ES" +"2988478504","2988478507","FR" +"2988478508","2988478511","LT" +"2988478512","2988478543","FR" +"2988478544","2988478559","NL" +"2988478560","2988478563","ES" +"2988478564","2988478567","BE" +"2988478568","2988478571","PT" +"2988478572","2988478575","FR" +"2988478576","2988478579","PL" +"2988478580","2988478583","DE" +"2988478584","2988478587","ES" +"2988478588","2988478591","DE" +"2988478592","2988478623","FR" +"2988478624","2988478639","GB" +"2988478640","2988478643","CH" +"2988478644","2988478647","CZ" +"2988478648","2988478655","BE" +"2988478656","2988478671","DE" +"2988478672","2988478683","FR" +"2988478684","2988478687","CZ" +"2988478688","2988478751","FR" +"2988478752","2988478783","GB" +"2988478784","2988478787","CH" +"2988478788","2988478791","PL" +"2988478792","2988478795","FR" +"2988478796","2988478799","DE" +"2988478800","2988478803","NL" +"2988478804","2988478807","PL" +"2988478808","2988478811","DE" +"2988478812","2988478815","GB" +"2988478816","2988478847","PL" +"2988478848","2988478855","DE" +"2988478856","2988478859","LT" +"2988478860","2988478863","PL" +"2988478864","2988478867","CZ" +"2988478868","2988478871","DE" +"2988478872","2988478879","IT" +"2988478880","2988478911","IE" +"2988478912","2988478943","IT" +"2988478944","2988478947","FR" +"2988478948","2988478951","GB" +"2988478952","2988478955","ES" +"2988478956","2988478959","DE" +"2988478960","2988478975","NL" +"2988478976","2988478979","DE" +"2988478980","2988478983","PL" +"2988478984","2988478995","DE" +"2988478996","2988478999","IE" +"2988479000","2988479003","GB" +"2988479004","2988479007","PL" +"2988479008","2988479055","FR" +"2988479056","2988479071","PL" +"2988479072","2988479075","BE" +"2988479076","2988479079","FR" +"2988479080","2988479087","DE" +"2988479088","2988479103","FR" +"2988479104","2988479107","PL" +"2988479108","2988479119","FR" +"2988479120","2988479135","PT" +"2988479136","2988479247","FR" +"2988479248","2988479251","ES" +"2988479252","2988479255","FR" +"2988479256","2988479259","PL" +"2988479260","2988479311","FR" +"2988479312","2988479315","PT" +"2988479316","2988479319","IT" +"2988479320","2988479323","GB" +"2988479324","2988479327","IT" +"2988479328","2988479359","GB" +"2988479360","2988479363","ES" +"2988479364","2988479379","PL" +"2988479380","2988479383","IE" +"2988479384","2988479391","PL" +"2988479392","2988479407","IE" +"2988479408","2988479423","IT" +"2988479424","2988479439","ES" +"2988479440","2988479447","NL" +"2988479448","2988479451","GB" +"2988479452","2988479503","FR" +"2988479504","2988479511","NL" +"2988479512","2988479519","PL" +"2988479520","2988479551","FR" +"2988479552","2988479555","DE" +"2988479556","2988479559","FR" +"2988479560","2988479563","FI" +"2988479564","2988479575","FR" +"2988479576","2988479579","GB" +"2988479580","2988479583","PT" +"2988479584","2988479599","ES" +"2988479600","2988479603","PL" +"2988479604","2988479607","GB" +"2988479608","2988479743","FR" +"2988479744","2988479747","ES" +"2988479748","2988479751","FR" +"2988479752","2988479755","GB" +"2988479756","2988479783","FR" +"2988479784","2988479787","GB" +"2988479788","2988479791","ES" +"2988479792","2988479807","GB" +"2988479808","2988479839","BE" +"2988479840","2988479855","FR" +"2988479856","2988479863","PL" +"2988479864","2988479871","FR" +"2988479872","2988479999","BE" +"2988480000","2988480003","DE" +"2988480004","2988480007","GB" +"2988480008","2988480011","NL" +"2988480012","2988480015","GB" +"2988480016","2988480031","CH" +"2988480032","2988480047","IE" +"2988480048","2988480063","FR" +"2988480064","2988480127","ES" +"2988480128","2988480143","FR" +"2988480144","2988480147","GB" +"2988480148","2988480159","FR" +"2988480160","2988480175","IE" +"2988480176","2988480191","FR" +"2988480192","2988480207","IT" +"2988480208","2988480223","FR" +"2988480224","2988480227","IT" +"2988480228","2988480231","LT" +"2988480232","2988480235","FR" +"2988480236","2988480239","IT" +"2988480240","2988480263","FR" +"2988480264","2988480267","NL" +"2988480268","2988480271","FR" +"2988480272","2988480275","IE" +"2988480276","2988480279","ES" +"2988480280","2988480283","GB" +"2988480284","2988480287","PL" +"2988480288","2988480383","FR" +"2988480384","2988480415","PL" +"2988480416","2988480431","DE" +"2988480432","2988480435","FR" +"2988480436","2988480439","DE" +"2988480440","2988480443","NL" +"2988480444","2988480447","GB" +"2988480448","2988480467","FR" +"2988480468","2988480471","DE" +"2988480472","2988480475","FR" +"2988480476","2988480479","PT" +"2988480480","2988480487","FR" +"2988480488","2988480495","GB" +"2988480496","2988480499","NL" +"2988480500","2988480511","FR" +"2988480512","2988480767","GB" +"2988480768","2988480771","ES" +"2988480772","2988480775","IT" +"2988480776","2988480783","FR" +"2988480784","2988480799","GB" +"2988480800","2988480803","FR" +"2988480804","2988480807","PL" +"2988480808","2988480811","FR" +"2988480812","2988480815","PL" +"2988480816","2988480827","FR" +"2988480828","2988480831","ES" +"2988480832","2988480895","PL" +"2988480896","2988480903","NL" +"2988480904","2988480911","FR" +"2988480912","2988480915","BE" +"2988480916","2988480919","FR" +"2988480920","2988480923","FI" +"2988480924","2988480927","BE" +"2988480928","2988480959","ES" +"2988480960","2988480975","PL" +"2988480976","2988480991","CH" +"2988480992","2988481007","DE" +"2988481008","2988481023","FI" +"2988481024","2988481055","FR" +"2988481056","2988481059","PL" +"2988481060","2988481063","FI" +"2988481064","2988481071","FR" +"2988481072","2988481079","NL" +"2988481080","2988481119","FR" +"2988481120","2988481127","PL" +"2988481128","2988481131","NL" +"2988481132","2988481135","GB" +"2988481136","2988481151","LT" +"2988481152","2988481159","GB" +"2988481160","2988481163","PL" +"2988481164","2988481167","IE" +"2988481168","2988481179","FR" +"2988481180","2988481183","ES" +"2988481184","2988481187","DE" +"2988481188","2988481191","GB" +"2988481192","2988481195","ES" +"2988481196","2988481199","FR" +"2988481200","2988481203","PL" +"2988481204","2988481211","ES" +"2988481212","2988481215","FR" +"2988481216","2988481219","GB" +"2988481220","2988481223","FR" +"2988481224","2988481227","GB" +"2988481228","2988481231","BE" +"2988481232","2988481279","FR" +"2988481280","2988481535","GB" +"2988481536","2988481663","IE" +"2988481664","2988481667","FR" +"2988481668","2988481671","CH" +"2988481672","2988481675","FR" +"2988481676","2988481679","NL" +"2988481680","2988481695","PL" +"2988481696","2988481711","ES" +"2988481712","2988481719","PL" +"2988481720","2988481723","GB" +"2988481724","2988481727","PL" +"2988481728","2988481735","BE" +"2988481736","2988481739","FR" +"2988481740","2988481743","DE" +"2988481744","2988481759","ES" +"2988481760","2988481767","FR" +"2988481768","2988481771","GB" +"2988481772","2988481775","DE" +"2988481776","2988481783","BE" +"2988481784","2988481791","PL" +"2988481792","2988481855","FR" +"2988481856","2988481859","GB" +"2988481860","2988481863","ES" +"2988481864","2988481867","FR" +"2988481868","2988481871","IT" +"2988481872","2988481883","FR" +"2988481884","2988481887","ES" +"2988481888","2988481903","GB" +"2988481904","2988481919","BE" +"2988481920","2988481935","IT" +"2988481936","2988481983","FR" +"2988481984","2988481987","DE" +"2988481988","2988481991","CZ" +"2988481992","2988481995","FR" +"2988481996","2988481999","DE" +"2988482000","2988482007","ES" +"2988482008","2988482015","DE" +"2988482016","2988482023","IT" +"2988482024","2988482031","GB" +"2988482032","2988482043","FR" +"2988482044","2988482079","PL" +"2988482080","2988482095","BE" +"2988482096","2988482099","GB" +"2988482100","2988482103","FR" +"2988482104","2988482111","GB" +"2988482112","2988482143","DE" +"2988482144","2988482159","CH" +"2988482160","2988482163","ES" +"2988482164","2988482167","PL" +"2988482168","2988482175","ES" +"2988482176","2988482191","CH" +"2988482192","2988482195","ES" +"2988482196","2988482199","NL" +"2988482200","2988482203","CH" +"2988482204","2988482207","LT" +"2988482208","2988482235","FR" +"2988482236","2988482239","GB" +"2988482240","2988482255","ES" +"2988482256","2988482287","FR" +"2988482288","2988482291","DE" +"2988482292","2988482295","PL" +"2988482296","2988482307","FR" +"2988482308","2988482311","PT" +"2988482312","2988482315","GB" +"2988482316","2988482319","CZ" +"2988482320","2988482335","IT" +"2988482336","2988482351","ES" +"2988482352","2988482367","FR" +"2988482368","2988482399","ES" +"2988482400","2988482415","GB" +"2988482416","2988482431","ES" +"2988482432","2988482447","FR" +"2988482448","2988482455","CZ" +"2988482456","2988482463","FR" +"2988482464","2988482479","IE" +"2988482480","2988482487","PL" +"2988482488","2988482511","FR" +"2988482512","2988482515","DE" +"2988482516","2988482519","PL" +"2988482520","2988482527","FR" +"2988482528","2988482531","DE" +"2988482532","2988482543","FR" +"2988482544","2988482551","GB" +"2988482552","2988482559","CH" +"2988482560","2988482567","ES" +"2988482568","2988482579","FR" +"2988482580","2988482591","ES" +"2988482592","2988482607","PL" +"2988482608","2988482631","FR" +"2988482632","2988482639","PL" +"2988482640","2988482647","FR" +"2988482648","2988482651","CZ" +"2988482652","2988482655","GB" +"2988482656","2988482687","FR" +"2988482688","2988482695","ES" +"2988482696","2988482699","NL" +"2988482700","2988482763","FR" +"2988482764","2988482767","GB" +"2988482768","2988482775","PL" +"2988482776","2988482779","NL" +"2988482780","2988482783","PL" +"2988482784","2988482799","FR" +"2988482800","2988482807","ES" +"2988482808","2988482811","GB" +"2988482812","2988482815","FR" +"2988482816","2988482823","DE" +"2988482824","2988482831","PL" +"2988482832","2988482835","IE" +"2988482836","2988482839","PL" +"2988482840","2988482843","ES" +"2988482844","2988482847","NL" +"2988482848","2988482863","FR" +"2988482864","2988482871","ES" +"2988482872","2988482875","PT" +"2988482876","2988482879","CZ" +"2988482880","2988482887","PL" +"2988482888","2988482891","ES" +"2988482892","2988482895","PL" +"2988482896","2988482927","GB" +"2988482928","2988482931","FR" +"2988482932","2988482939","PL" +"2988482940","2988482943","LT" +"2988482944","2988482959","PL" +"2988482960","2988482975","CZ" +"2988482976","2988482979","DE" +"2988482980","2988482983","GB" +"2988482984","2988482987","DE" +"2988482988","2988482991","NL" +"2988482992","2988483031","FR" +"2988483032","2988483035","DE" +"2988483036","2988483039","LT" +"2988483040","2988483091","FR" +"2988483092","2988483095","BE" +"2988483096","2988483099","FR" +"2988483100","2988483103","PL" +"2988483104","2988483107","IE" +"2988483108","2988483111","PL" +"2988483112","2988483115","ES" +"2988483116","2988483119","PL" +"2988483120","2988483127","ES" +"2988483128","2988483135","PL" +"2988483136","2988483151","FR" +"2988483152","2988483155","PL" +"2988483156","2988483159","FR" +"2988483160","2988483167","ES" +"2988483168","2988483199","GB" +"2988483200","2988483231","FR" +"2988483232","2988483235","IE" +"2988483236","2988483263","PL" +"2988483264","2988483267","FR" +"2988483268","2988483271","NL" +"2988483272","2988483279","DE" +"2988483280","2988483283","ES" +"2988483284","2988483295","DE" +"2988483296","2988483299","FR" +"2988483300","2988483303","NL" +"2988483304","2988483311","FR" +"2988483312","2988483315","GB" +"2988483316","2988483319","NL" +"2988483320","2988483327","PL" +"2988483328","2988483335","BE" +"2988483336","2988483343","DE" +"2988483344","2988483351","GB" +"2988483352","2988483359","FR" +"2988483360","2988483367","ES" +"2988483368","2988483375","PL" +"2988483376","2988483379","GB" +"2988483380","2988483383","PL" +"2988483384","2988483427","FR" +"2988483428","2988483431","BE" +"2988483432","2988483447","FR" +"2988483448","2988483455","DE" +"2988483456","2988483711","FR" +"2988483712","2988483727","PL" +"2988483728","2988483735","FR" +"2988483736","2988483739","DE" +"2988483740","2988483743","FR" +"2988483744","2988483767","GB" +"2988483768","2988483775","FR" +"2988483776","2988483871","PL" +"2988483872","2988483879","DE" +"2988483880","2988483887","ES" +"2988483888","2988483895","GB" +"2988483896","2988483903","DE" +"2988483904","2988483935","PT" +"2988483936","2988483951","ES" +"2988483952","2988483963","IT" +"2988483964","2988483967","FR" +"2988483968","2988483983","IE" +"2988483984","2988483991","DE" +"2988483992","2988483995","FR" +"2988483996","2988483999","PT" +"2988484000","2988484003","DE" +"2988484004","2988484007","GB" +"2988484008","2988484011","FR" +"2988484012","2988484015","IE" +"2988484016","2988484019","FR" +"2988484020","2988484023","ES" +"2988484024","2988484031","FR" +"2988484032","2988484039","IT" +"2988484040","2988484047","NL" +"2988484048","2988484051","ES" +"2988484052","2988484055","GB" +"2988484056","2988484059","PT" +"2988484060","2988484063","PL" +"2988484064","2988484095","GB" +"2988484096","2988484111","DE" +"2988484112","2988484127","FR" +"2988484128","2988484131","PT" +"2988484132","2988484135","PL" +"2988484136","2988484139","FR" +"2988484140","2988484143","LT" +"2988484144","2988484163","FR" +"2988484164","2988484167","PT" +"2988484168","2988484175","ES" +"2988484176","2988484187","FR" +"2988484188","2988484191","PL" +"2988484192","2988484207","DE" +"2988484208","2988484223","FR" +"2988484224","2988484239","ES" +"2988484240","2988484243","PL" +"2988484244","2988484287","FR" +"2988484288","2988484351","PL" +"2988484352","2988484383","GB" +"2988484384","2988484391","CZ" +"2988484392","2988484395","PT" +"2988484396","2988484399","PL" +"2988484400","2988484403","PT" +"2988484404","2988484427","PL" +"2988484428","2988484431","GB" +"2988484432","2988484439","PL" +"2988484440","2988484443","ES" +"2988484444","2988484447","FR" +"2988484448","2988484463","SN" +"2988484464","2988484467","BE" +"2988484468","2988484471","CH" +"2988484472","2988484475","PL" +"2988484476","2988484479","FR" +"2988484480","2988484511","PL" +"2988484512","2988484543","IT" +"2988484544","2988484551","FR" +"2988484552","2988484559","PL" +"2988484560","2988484591","FR" +"2988484592","2988484607","PL" +"2988484608","2988484775","FR" +"2988484776","2988484783","PL" +"2988484784","2988484831","FR" +"2988484832","2988484847","PL" +"2988484848","2988484863","FR" +"2988484864","2988484879","NL" +"2988484880","2988484883","GB" +"2988484884","2988484887","PL" +"2988484888","2988484891","FR" +"2988484892","2988484895","GB" +"2988484896","2988484943","FR" +"2988484944","2988484951","PL" +"2988484952","2988484955","IT" +"2988484956","2988484967","FR" +"2988484968","2988484971","GB" +"2988484972","2988484991","FR" +"2988484992","2988485007","LT" +"2988485008","2988485023","PL" +"2988485024","2988485039","IE" +"2988485040","2988485055","PL" +"2988485056","2988485071","FR" +"2988485072","2988485087","IE" +"2988485088","2988485119","PL" +"2988485120","2988485135","FR" +"2988485136","2988485151","PL" +"2988485152","2988485167","IT" +"2988485168","2988485183","FR" +"2988485184","2988485247","BE" +"2988485248","2988485255","IT" +"2988485256","2988485263","NL" +"2988485264","2988485267","DE" +"2988485268","2988485271","CH" +"2988485272","2988485279","FR" +"2988485280","2988485311","PL" +"2988485312","2988485327","IT" +"2988485328","2988485335","FI" +"2988485336","2988485343","PT" +"2988485344","2988485347","ES" +"2988485348","2988485351","IT" +"2988485352","2988485355","GB" +"2988485356","2988485359","PL" +"2988485360","2988485439","FR" +"2988485440","2988485455","PL" +"2988485456","2988485471","ES" +"2988485472","2988485479","FR" +"2988485480","2988485487","IT" +"2988485488","2988485503","FR" +"2988485504","2988485519","GB" +"2988485520","2988485559","FR" +"2988485560","2988485567","NL" +"2988485568","2988485583","GB" +"2988485584","2988485587","IT" +"2988485588","2988485591","BE" +"2988485592","2988485599","FR" +"2988485600","2988485607","PL" +"2988485608","2988485611","FR" +"2988485612","2988485615","LT" +"2988485616","2988485631","IE" +"2988485632","2988485663","ES" +"2988485664","2988485671","PL" +"2988485672","2988485675","DE" +"2988485676","2988485679","GB" +"2988485680","2988485683","FR" +"2988485684","2988485687","PL" +"2988485688","2988485691","GB" +"2988485692","2988485695","PL" +"2988485696","2988485759","FR" +"2988485760","2988485767","GB" +"2988485768","2988485791","FR" +"2988485792","2988485795","PT" +"2988485796","2988485799","LT" +"2988485800","2988485803","PT" +"2988485804","2988485807","PL" +"2988485808","2988485823","NL" +"2988485824","2988485831","FR" +"2988485832","2988485835","NL" +"2988485836","2988485839","LT" +"2988485840","2988485855","BE" +"2988485856","2988485871","FR" +"2988485872","2988485875","PL" +"2988485876","2988485879","IE" +"2988485880","2988485887","FR" +"2988485888","2988485903","PL" +"2988485904","2988485911","GB" +"2988485912","2988485919","PT" +"2988485920","2988485951","FR" +"2988485952","2988485955","GB" +"2988485956","2988485959","CZ" +"2988485960","2988485967","FR" +"2988485968","2988485983","IE" +"2988485984","2988485999","FR" +"2988486000","2988486015","PL" +"2988486016","2988486031","FR" +"2988486032","2988486047","PL" +"2988486048","2988486063","GB" +"2988486064","2988486067","FR" +"2988486068","2988486071","ES" +"2988486072","2988486075","FR" +"2988486076","2988486079","ES" +"2988486080","2988486083","BE" +"2988486084","2988486087","IT" +"2988486088","2988486095","FR" +"2988486096","2988486099","GB" +"2988486100","2988486111","FR" +"2988486112","2988486135","PL" +"2988486136","2988486139","FR" +"2988486140","2988486143","GB" +"2988486144","2988486151","ES" +"2988486152","2988486155","PL" +"2988486156","2988486159","DE" +"2988486160","2988486175","IE" +"2988486176","2988486179","FR" +"2988486180","2988486183","DE" +"2988486184","2988486191","IE" +"2988486192","2988486195","IT" +"2988486196","2988486199","FR" +"2988486200","2988486207","PT" +"2988486208","2988486215","PL" +"2988486216","2988486219","ES" +"2988486220","2988486223","FR" +"2988486224","2988486231","BE" +"2988486232","2988486235","PL" +"2988486236","2988486239","ES" +"2988486240","2988486287","PL" +"2988486288","2988486291","FR" +"2988486292","2988486299","GB" +"2988486300","2988486303","PL" +"2988486304","2988486311","FR" +"2988486312","2988486319","CH" +"2988486320","2988486323","IT" +"2988486324","2988486327","PT" +"2988486328","2988486343","ES" +"2988486344","2988486347","FR" +"2988486348","2988486351","ES" +"2988486352","2988486375","FR" +"2988486376","2988486379","PL" +"2988486380","2988486399","FR" +"2988486400","2988486415","PL" +"2988486416","2988486423","FR" +"2988486424","2988486431","PT" +"2988486432","2988486447","FR" +"2988486448","2988486463","ES" +"2988486464","2988486471","BE" +"2988486472","2988486475","ES" +"2988486476","2988486479","PL" +"2988486480","2988486495","IE" +"2988486496","2988486503","DE" +"2988486504","2988486511","PL" +"2988486512","2988486515","DE" +"2988486516","2988486527","PL" +"2988486528","2988486575","FR" +"2988486576","2988486579","PL" +"2988486580","2988486583","GB" +"2988486584","2988486595","FR" +"2988486596","2988486599","GB" +"2988486600","2988486603","DE" +"2988486604","2988486607","FR" +"2988486608","2988486615","FI" +"2988486616","2988486623","ES" +"2988486624","2988486643","FR" +"2988486644","2988486647","GB" +"2988486648","2988486651","ES" +"2988486652","2988486655","PL" +"2988486656","2988486671","FR" +"2988486672","2988486675","DE" +"2988486676","2988486679","FR" +"2988486680","2988486687","ES" +"2988486688","2988486691","PL" +"2988486692","2988486695","IT" +"2988486696","2988486699","ES" +"2988486700","2988486711","PL" +"2988486712","2988486719","IT" +"2988486720","2988486735","FR" +"2988486736","2988486743","ES" +"2988486744","2988486747","FR" +"2988486748","2988486751","GB" +"2988486752","2988486759","FR" +"2988486760","2988486763","PL" +"2988486764","2988486767","FR" +"2988486768","2988486775","GB" +"2988486776","2988486783","BE" +"2988486784","2988486787","DE" +"2988486788","2988486795","FR" +"2988486796","2988486799","PL" +"2988486800","2988486807","FR" +"2988486808","2988486811","DE" +"2988486812","2988486823","FR" +"2988486824","2988486831","IT" +"2988486832","2988486847","PL" +"2988486848","2988486863","FR" +"2988486864","2988486879","BE" +"2988486880","2988486883","PL" +"2988486884","2988486887","FR" +"2988486888","2988486891","PT" +"2988486892","2988486903","GB" +"2988486904","2988486907","DE" +"2988486908","2988486911","LT" +"2988486912","2988487167","PL" +"2988487168","2988487423","FR" +"2988487424","2988487679","IE" +"2988487680","2988487935","DE" +"2988487936","2988487939","BE" +"2988487940","2988487947","FR" +"2988487948","2988487951","CH" +"2988487952","2988487979","FR" +"2988487980","2988487983","ES" +"2988487984","2988488011","FR" +"2988488012","2988488015","LT" +"2988488016","2988488031","FR" +"2988488032","2988488047","IE" +"2988488048","2988488051","IT" +"2988488052","2988488055","FR" +"2988488056","2988488063","DE" +"2988488064","2988488095","FR" +"2988488096","2988488099","DE" +"2988488100","2988488103","PT" +"2988488104","2988488111","FR" +"2988488112","2988488127","PL" +"2988488128","2988488175","FR" +"2988488176","2988488179","GB" +"2988488180","2988488183","FR" +"2988488184","2988488187","IE" +"2988488188","2988488191","DE" +"2988488192","2988488479","FR" +"2988488480","2988488487","PL" +"2988488488","2988488491","FR" +"2988488492","2988488495","ES" +"2988488496","2988488543","FR" +"2988488544","2988488555","GB" +"2988488556","2988488563","ES" +"2988488564","2988488567","FR" +"2988488568","2988488571","ES" +"2988488572","2988488575","GB" +"2988488576","2988488607","FR" +"2988488608","2988488639","DE" +"2988488640","2988488647","ES" +"2988488648","2988488655","IT" +"2988488656","2988488663","PL" +"2988488664","2988488959","FR" +"2988488960","2988488963","NL" +"2988488964","2988488967","FR" +"2988488968","2988488971","DE" +"2988488972","2988488975","FR" +"2988488976","2988488983","ES" +"2988488984","2988488987","FR" +"2988488988","2988488991","NL" +"2988488992","2988489023","ES" +"2988489024","2988489055","FR" +"2988489056","2988489071","DE" +"2988489072","2988489095","FR" +"2988489096","2988489103","GB" +"2988489104","2988489119","FI" +"2988489120","2988489123","ES" +"2988489124","2988489127","IE" +"2988489128","2988489131","IT" +"2988489132","2988489167","FR" +"2988489168","2988489175","PT" +"2988489176","2988489179","PL" +"2988489180","2988489183","GB" +"2988489184","2988489255","FR" +"2988489256","2988489259","GB" +"2988489260","2988489263","FR" +"2988489264","2988489279","IT" +"2988489280","2988489283","FI" +"2988489284","2988489287","FR" +"2988489288","2988489295","PL" +"2988489296","2988489311","FR" +"2988489312","2988489327","PL" +"2988489328","2988489331","DE" +"2988489332","2988489335","PL" +"2988489336","2988489339","DE" +"2988489340","2988489343","PL" +"2988489344","2988489347","DE" +"2988489348","2988489351","PL" +"2988489352","2988489355","FR" +"2988489356","2988489359","PT" +"2988489360","2988489375","FR" +"2988489376","2988489379","ES" +"2988489380","2988489383","GB" +"2988489384","2988489391","FR" +"2988489392","2988489399","NL" +"2988489400","2988489403","PL" +"2988489404","2988489407","IT" +"2988489408","2988489439","PT" +"2988489440","2988489455","GB" +"2988489456","2988489471","FR" +"2988489472","2988489475","ES" +"2988489476","2988489479","GB" +"2988489480","2988489483","PL" +"2988489484","2988489487","GB" +"2988489488","2988489503","FR" +"2988489504","2988489519","GB" +"2988489520","2988489527","ES" +"2988489528","2988489539","NL" +"2988489540","2988489543","CH" +"2988489544","2988489663","FR" +"2988489664","2988489667","DE" +"2988489668","2988489671","GB" +"2988489672","2988489675","ES" +"2988489676","2988489679","IE" +"2988489680","2988489695","FR" +"2988489696","2988489711","FI" +"2988489712","2988489719","FR" +"2988489720","2988489723","IT" +"2988489724","2988489727","ES" +"2988489728","2988489747","FR" +"2988489748","2988489751","IT" +"2988489752","2988489755","ES" +"2988489756","2988489759","FR" +"2988489760","2988489791","NL" +"2988489792","2988489887","PL" +"2988489888","2988489903","FR" +"2988489904","2988489919","IE" +"2988489920","2988489935","PL" +"2988489936","2988489943","ES" +"2988489944","2988489947","FR" +"2988489948","2988489951","GB" +"2988489952","2988489967","FR" +"2988489968","2988489983","GB" +"2988489984","2988490047","FR" +"2988490048","2988490051","ES" +"2988490052","2988490055","PL" +"2988490056","2988490059","LT" +"2988490060","2988490063","FR" +"2988490064","2988490079","GB" +"2988490080","2988490095","FR" +"2988490096","2988490103","PT" +"2988490104","2988490107","ES" +"2988490108","2988490111","FR" +"2988490112","2988490143","PL" +"2988490144","2988490175","ES" +"2988490176","2988490179","IE" +"2988490180","2988490183","PL" +"2988490184","2988490191","ES" +"2988490192","2988490195","GB" +"2988490196","2988490199","FR" +"2988490200","2988490203","DE" +"2988490204","2988490223","FR" +"2988490224","2988490227","DE" +"2988490228","2988490231","GB" +"2988490232","2988490235","ES" +"2988490236","2988490239","FR" +"2988490240","2988490247","PL" +"2988490248","2988490251","ES" +"2988490252","2988490255","GB" +"2988490256","2988490271","PL" +"2988490272","2988490287","ES" +"2988490288","2988490295","FR" +"2988490296","2988490303","DE" +"2988490304","2988490319","ES" +"2988490320","2988490351","FR" +"2988490352","2988490355","IE" +"2988490356","2988490367","DE" +"2988490368","2988490371","ES" +"2988490372","2988490375","NL" +"2988490376","2988490383","GB" +"2988490384","2988490399","FR" +"2988490400","2988490407","GB" +"2988490408","2988490411","NL" +"2988490412","2988490415","ES" +"2988490416","2988490419","FR" +"2988490420","2988490423","CH" +"2988490424","2988490463","FR" +"2988490464","2988490623","PL" +"2988490624","2988490751","ES" +"2988490752","2988491775","FR" +"2988491776","2988492031","TN" +"2988492032","2988492799","FR" +"2988492800","2988494847","PL" +"2988494848","2988498975","FR" +"2988498976","2988498983","ES" +"2988498984","2988498991","FR" +"2988498992","2988499007","PL" +"2988499008","2988499051","DE" +"2988499052","2988499055","FR" +"2988499056","2988499063","BE" +"2988499064","2988499067","DE" +"2988499068","2988499071","FR" +"2988499072","2988499103","PL" +"2988499104","2988499119","IE" +"2988499120","2988499135","FR" +"2988499136","2988499139","DE" +"2988499140","2988499143","FR" +"2988499144","2988499151","DE" +"2988499152","2988499167","FR" +"2988499168","2988499199","ES" +"2988499200","2988499343","FR" +"2988499344","2988499347","PL" +"2988499348","2988499351","GB" +"2988499352","2988499359","IT" +"2988499360","2988499367","PL" +"2988499368","2988499375","IT" +"2988499376","2988499379","PT" +"2988499380","2988499387","PL" +"2988499388","2988499407","FR" +"2988499408","2988499415","PL" +"2988499416","2988499423","DE" +"2988499424","2988499455","PL" +"2988499456","2988499463","NL" +"2988499464","2988499471","DE" +"2988499472","2988499487","FR" +"2988499488","2988499519","PL" +"2988499520","2988499551","ES" +"2988499552","2988499567","PL" +"2988499568","2988499575","IE" +"2988499576","2988499579","FR" +"2988499580","2988499583","CH" +"2988499584","2988499599","PL" +"2988499600","2988499615","FR" +"2988499616","2988499623","DE" +"2988499624","2988499631","ES" +"2988499632","2988499635","CH" +"2988499636","2988499639","DE" +"2988499640","2988499663","GB" +"2988499664","2988499671","DE" +"2988499672","2988499679","NL" +"2988499680","2988499683","FR" +"2988499684","2988499687","CZ" +"2988499688","2988499691","FI" +"2988499692","2988499695","IT" +"2988499696","2988499699","PT" +"2988499700","2988499703","GB" +"2988499704","2988499711","DE" +"2988499712","2988499731","GB" +"2988499732","2988499735","FR" +"2988499736","2988499743","NL" +"2988499744","2988499747","IE" +"2988499748","2988499751","LT" +"2988499752","2988499755","PL" +"2988499756","2988499759","ES" +"2988499760","2988499763","CH" +"2988499764","2988499775","PL" +"2988499776","2988499791","IT" +"2988499792","2988499795","GB" +"2988499796","2988499803","IT" +"2988499804","2988499807","DE" +"2988499808","2988499823","FR" +"2988499824","2988499831","PL" +"2988499832","2988499839","GB" +"2988499840","2988499847","BE" +"2988499848","2988499851","DE" +"2988499852","2988499855","PL" +"2988499856","2988499871","ES" +"2988499872","2988499903","IE" +"2988499904","2988499907","FR" +"2988499908","2988499911","BE" +"2988499912","2988499915","FR" +"2988499916","2988499919","LT" +"2988499920","2988499923","DE" +"2988499924","2988499927","BE" +"2988499928","2988499935","FR" +"2988499936","2988499967","IE" +"2988499968","2988500223","FR" +"2988500224","2988500255","ES" +"2988500256","2988500271","IT" +"2988500272","2988500287","BE" +"2988500288","2988500303","PL" +"2988500304","2988500307","FR" +"2988500308","2988500311","NL" +"2988500312","2988500315","ES" +"2988500316","2988500319","DE" +"2988500320","2988500335","BE" +"2988500336","2988500339","DE" +"2988500340","2988500347","IE" +"2988500348","2988500351","PL" +"2988500352","2988500383","GB" +"2988500384","2988500399","BE" +"2988500400","2988500415","DE" +"2988500416","2988500447","PL" +"2988500448","2988500479","ES" +"2988500480","2988500495","DE" +"2988500496","2988500499","PL" +"2988500500","2988500503","DE" +"2988500504","2988500511","PL" +"2988500512","2988500519","FR" +"2988500520","2988500523","ES" +"2988500524","2988500527","GB" +"2988500528","2988500543","BE" +"2988500544","2988500607","PL" +"2988500608","2988500639","FR" +"2988500640","2988500671","GB" +"2988500672","2988500679","IT" +"2988500680","2988500687","PL" +"2988500688","2988500703","NL" +"2988500704","2988500711","PL" +"2988500712","2988500767","FR" +"2988500768","2988500771","PT" +"2988500772","2988500775","ES" +"2988500776","2988500779","GB" +"2988500780","2988500787","PL" +"2988500788","2988500791","ES" +"2988500792","2988500799","PL" +"2988500800","2988500815","ES" +"2988500816","2988500831","FR" +"2988500832","2988500847","ES" +"2988500848","2988500851","FI" +"2988500852","2988500855","PL" +"2988500856","2988500859","IE" +"2988500860","2988500867","FR" +"2988500868","2988500871","DE" +"2988500872","2988500879","ES" +"2988500880","2988500883","BE" +"2988500884","2988500887","PL" +"2988500888","2988500919","FR" +"2988500920","2988500927","PL" +"2988500928","2988500935","FR" +"2988500936","2988500939","DE" +"2988500940","2988500943","FI" +"2988500944","2988500959","IT" +"2988500960","2988500975","IE" +"2988500976","2988500979","CZ" +"2988500980","2988500983","FR" +"2988500984","2988500987","DE" +"2988500988","2988500991","PL" +"2988500992","2988501119","FR" +"2988501120","2988501123","PL" +"2988501124","2988501131","FR" +"2988501132","2988501135","ES" +"2988501136","2988501183","FR" +"2988501184","2988501215","PL" +"2988501216","2988501219","DE" +"2988501220","2988501223","ES" +"2988501224","2988501227","PL" +"2988501228","2988501231","CZ" +"2988501232","2988501247","PL" +"2988501248","2988501327","FR" +"2988501328","2988501331","FI" +"2988501332","2988501335","GB" +"2988501336","2988501339","FR" +"2988501340","2988501359","PL" +"2988501360","2988501367","FR" +"2988501368","2988501375","ES" +"2988501376","2988501383","FR" +"2988501384","2988501391","PL" +"2988501392","2988501407","FR" +"2988501408","2988501411","LT" +"2988501412","2988501415","NL" +"2988501416","2988501419","DE" +"2988501420","2988501423","PL" +"2988501424","2988501439","NL" +"2988501440","2988501471","BE" +"2988501472","2988501475","PT" +"2988501476","2988501479","BE" +"2988501480","2988501483","DE" +"2988501484","2988501487","PL" +"2988501488","2988501567","FR" +"2988501568","2988501631","PL" +"2988501632","2988501663","DE" +"2988501664","2988501679","CH" +"2988501680","2988501683","PL" +"2988501684","2988501687","GB" +"2988501688","2988501691","FR" +"2988501692","2988501695","PL" +"2988501696","2988501727","FI" +"2988501728","2988501759","PL" +"2988501760","2988502039","FR" +"2988502040","2988502047","CZ" +"2988502048","2988502051","FR" +"2988502052","2988502055","FI" +"2988502056","2988502059","GB" +"2988502060","2988502063","IT" +"2988502064","2988502067","FR" +"2988502068","2988502071","GB" +"2988502072","2988502075","PL" +"2988502076","2988502079","ES" +"2988502080","2988502095","IE" +"2988502096","2988502099","FI" +"2988502100","2988502103","CZ" +"2988502104","2988502107","PL" +"2988502108","2988502111","GB" +"2988502112","2988502127","FR" +"2988502128","2988502143","PL" +"2988502144","2988502207","FR" +"2988502208","2988502223","GB" +"2988502224","2988502255","FR" +"2988502256","2988502263","DE" +"2988502264","2988502267","ES" +"2988502268","2988502271","DE" +"2988502272","2988502399","FR" +"2988502400","2988502407","NL" +"2988502408","2988502411","FR" +"2988502412","2988502419","GB" +"2988502420","2988502423","IE" +"2988502424","2988502431","FI" +"2988502432","2988502447","FR" +"2988502448","2988502451","IE" +"2988502452","2988502455","IT" +"2988502456","2988502459","ES" +"2988502460","2988502463","PT" +"2988502464","2988502479","IE" +"2988502480","2988502483","CH" +"2988502484","2988502487","PL" +"2988502488","2988502491","CH" +"2988502492","2988502495","PL" +"2988502496","2988502511","ES" +"2988502512","2988502519","FR" +"2988502520","2988502523","ES" +"2988502524","2988502543","PL" +"2988502544","2988502559","FR" +"2988502560","2988502591","PL" +"2988502592","2988502599","FR" +"2988502600","2988502603","DE" +"2988502604","2988502607","PL" +"2988502608","2988502631","FR" +"2988502632","2988502639","NL" +"2988502640","2988502655","FR" +"2988502656","2988502719","DE" +"2988502720","2988502723","ES" +"2988502724","2988502727","BE" +"2988502728","2988502731","GB" +"2988502732","2988502751","PL" +"2988502752","2988502783","ES" +"2988502784","2988502795","FR" +"2988502796","2988502799","DE" +"2988502800","2988502807","FR" +"2988502808","2988502831","GB" +"2988502832","2988502839","DE" +"2988502840","2988502847","NL" +"2988502848","2988502851","FR" +"2988502852","2988502855","CH" +"2988502856","2988502859","FI" +"2988502860","2988502863","BE" +"2988502864","2988502867","IE" +"2988502868","2988502871","LT" +"2988502872","2988502875","PL" +"2988502876","2988502879","ES" +"2988502880","2988502883","IT" +"2988502884","2988502887","CZ" +"2988502888","2988502891","NL" +"2988502892","2988502895","PL" +"2988502896","2988502911","FR" +"2988502912","2988502915","PL" +"2988502916","2988502919","CH" +"2988502920","2988502959","FR" +"2988502960","2988502975","IE" +"2988502976","2988502983","PL" +"2988502984","2988502991","ES" +"2988502992","2988503015","DE" +"2988503016","2988503019","PL" +"2988503020","2988503023","FR" +"2988503024","2988503031","GB" +"2988503032","2988503035","ES" +"2988503036","2988503039","GB" +"2988503040","2988503071","FR" +"2988503072","2988503075","DE" +"2988503076","2988503087","GB" +"2988503088","2988503103","FR" +"2988503104","2988503107","ES" +"2988503108","2988503111","NL" +"2988503112","2988503119","PL" +"2988503120","2988503127","DE" +"2988503128","2988503131","IT" +"2988503132","2988503151","PL" +"2988503152","2988503155","DE" +"2988503156","2988503159","LT" +"2988503160","2988503167","ES" +"2988503168","2988503171","PL" +"2988503172","2988503183","ES" +"2988503184","2988503199","NL" +"2988503200","2988503215","FR" +"2988503216","2988503231","PL" +"2988503232","2988503375","FR" +"2988503376","2988503383","PT" +"2988503384","2988503391","PL" +"2988503392","2988503395","ES" +"2988503396","2988503399","PL" +"2988503400","2988503415","FR" +"2988503416","2988503423","PL" +"2988503424","2988503471","FR" +"2988503472","2988503487","ES" +"2988503488","2988503495","IT" +"2988503496","2988503499","PL" +"2988503500","2988503519","FR" +"2988503520","2988503535","NL" +"2988503536","2988503539","ES" +"2988503540","2988503547","FR" +"2988503548","2988503551","PL" +"2988503552","2988503871","FR" +"2988503872","2988503903","DE" +"2988503904","2988503919","FR" +"2988503920","2988503927","ES" +"2988503928","2988503931","IT" +"2988503932","2988503935","NL" +"2988503936","2988503939","FR" +"2988503940","2988503943","CH" +"2988503944","2988503947","PL" +"2988503948","2988503951","IE" +"2988503952","2988503987","FR" +"2988503988","2988504007","PL" +"2988504008","2988504015","BE" +"2988504016","2988504019","FR" +"2988504020","2988504023","ES" +"2988504024","2988504031","FR" +"2988504032","2988504063","ES" +"2988504064","2988504127","IE" +"2988504128","2988504143","DE" +"2988504144","2988504159","FR" +"2988504160","2988504191","PL" +"2988504192","2988504223","FR" +"2988504224","2988504227","PT" +"2988504228","2988504231","DE" +"2988504232","2988504239","PL" +"2988504240","2988504255","GB" +"2988504256","2988504287","ES" +"2988504288","2988504303","GB" +"2988504304","2988504311","PL" +"2988504312","2988504315","FI" +"2988504316","2988504319","DE" +"2988504320","2988504323","FR" +"2988504324","2988504327","NL" +"2988504328","2988504335","DE" +"2988504336","2988504351","FR" +"2988504352","2988504355","GB" +"2988504356","2988504359","DE" +"2988504360","2988504363","GB" +"2988504364","2988504367","FI" +"2988504368","2988504371","IE" +"2988504372","2988504375","PL" +"2988504376","2988504379","PT" +"2988504380","2988504415","FR" +"2988504416","2988504419","PL" +"2988504420","2988504423","DE" +"2988504424","2988504427","ES" +"2988504428","2988504431","PT" +"2988504432","2988504435","FR" +"2988504436","2988504439","ES" +"2988504440","2988504443","FR" +"2988504444","2988504447","GB" +"2988504448","2988504451","BE" +"2988504452","2988504455","ES" +"2988504456","2988504459","PL" +"2988504460","2988504463","GB" +"2988504464","2988504467","DE" +"2988504468","2988504471","ES" +"2988504472","2988504479","PL" +"2988504480","2988504543","FR" +"2988504544","2988504559","PL" +"2988504560","2988504563","FR" +"2988504564","2988504567","PL" +"2988504568","2988504571","CH" +"2988504572","2988504603","PL" +"2988504604","2988504639","FR" +"2988504640","2988504643","DE" +"2988504644","2988504647","PT" +"2988504648","2988504655","GB" +"2988504656","2988504687","FR" +"2988504688","2988504703","PL" +"2988504704","2988504735","FR" +"2988504736","2988504743","PL" +"2988504744","2988504751","ES" +"2988504752","2988504755","PL" +"2988504756","2988504767","FR" +"2988504768","2988504799","ES" +"2988504800","2988504815","PL" +"2988504816","2988504819","BE" +"2988504820","2988504823","IE" +"2988504824","2988504827","IT" +"2988504828","2988504863","FR" +"2988504864","2988504879","PL" +"2988504880","2988504959","FR" +"2988504960","2988504963","PT" +"2988504964","2988504967","FR" +"2988504968","2988504975","BE" +"2988504976","2988504983","FR" +"2988504984","2988504987","ES" +"2988504988","2988504991","FR" +"2988504992","2988505023","CZ" +"2988505024","2988505087","FR" +"2988505088","2988505151","NL" +"2988505152","2988505183","FR" +"2988505184","2988505195","PL" +"2988505196","2988505199","DE" +"2988505200","2988505207","PL" +"2988505208","2988505211","ES" +"2988505212","2988505215","PT" +"2988505216","2988505247","FR" +"2988505248","2988505255","PL" +"2988505256","2988505263","FR" +"2988505264","2988505267","IT" +"2988505268","2988505271","FR" +"2988505272","2988505275","CZ" +"2988505276","2988505311","BE" +"2988505312","2988505315","DE" +"2988505316","2988505319","ES" +"2988505320","2988505323","PL" +"2988505324","2988505327","ES" +"2988505328","2988505343","PL" +"2988505344","2988505375","DE" +"2988505376","2988505391","FR" +"2988505392","2988505399","PL" +"2988505400","2988505403","ES" +"2988505404","2988505407","GB" +"2988505408","2988505439","FR" +"2988505440","2988505455","PL" +"2988505456","2988505459","FI" +"2988505460","2988505463","CH" +"2988505464","2988505471","IT" +"2988505472","2988505475","ES" +"2988505476","2988505479","NL" +"2988505480","2988505487","IE" +"2988505488","2988505503","PL" +"2988505504","2988505599","FR" +"2988505600","2988505603","DE" +"2988505604","2988505607","ES" +"2988505608","2988505615","FR" +"2988505616","2988505631","ES" +"2988505632","2988505663","FR" +"2988505664","2988505695","ES" +"2988505696","2988505699","FR" +"2988505700","2988505703","IT" +"2988505704","2988505711","PL" +"2988505712","2988505727","GB" +"2988505728","2988505735","PL" +"2988505736","2988505739","DE" +"2988505740","2988505743","ES" +"2988505744","2988505747","PT" +"2988505748","2988505751","DE" +"2988505752","2988505755","CH" +"2988505756","2988505759","PL" +"2988505760","2988505807","FR" +"2988505808","2988505811","PL" +"2988505812","2988505815","DE" +"2988505816","2988505819","GB" +"2988505820","2988505823","PL" +"2988505824","2988505839","FR" +"2988505840","2988505843","CH" +"2988505844","2988505847","FR" +"2988505848","2988505855","PL" +"2988505856","2988505919","IE" +"2988505920","2988505935","GB" +"2988505936","2988505943","ES" +"2988505944","2988505947","GB" +"2988505948","2988505951","FR" +"2988505952","2988505967","GB" +"2988505968","2988505971","BE" +"2988505972","2988505975","ES" +"2988505976","2988506111","FR" +"2988506112","2988506143","BE" +"2988506144","2988506151","ES" +"2988506152","2988506159","PL" +"2988506160","2988506191","FR" +"2988506192","2988506207","GB" +"2988506208","2988506239","ES" +"2988506240","2988506255","BE" +"2988506256","2988506271","CH" +"2988506272","2988506303","GB" +"2988506304","2988506335","DE" +"2988506336","2988506367","FR" +"2988506368","2988506375","IE" +"2988506376","2988506379","FR" +"2988506380","2988506383","DE" +"2988506384","2988506415","FR" +"2988506416","2988506431","BE" +"2988506432","2988506447","IT" +"2988506448","2988506451","ES" +"2988506452","2988506455","PT" +"2988506456","2988506459","BE" +"2988506460","2988506463","PL" +"2988506464","2988506495","FR" +"2988506496","2988506499","PL" +"2988506500","2988506503","IT" +"2988506504","2988506507","DE" +"2988506508","2988506511","ES" +"2988506512","2988506515","GB" +"2988506516","2988506519","FR" +"2988506520","2988506523","PL" +"2988506524","2988506527","IE" +"2988506528","2988506543","FR" +"2988506544","2988506551","DE" +"2988506552","2988506559","FR" +"2988506560","2988506563","NL" +"2988506564","2988506567","GB" +"2988506568","2988506571","PL" +"2988506572","2988506575","CH" +"2988506576","2988506591","FR" +"2988506592","2988506623","PT" +"2988506624","2988506687","PL" +"2988506688","2988506751","IE" +"2988506752","2988506763","ES" +"2988506764","2988506767","PL" +"2988506768","2988506783","ES" +"2988506784","2988506819","PL" +"2988506820","2988506831","FR" +"2988506832","2988506847","PL" +"2988506848","2988506863","FR" +"2988506864","2988506871","DE" +"2988506872","2988506875","ES" +"2988506876","2988506887","FR" +"2988506888","2988506891","ES" +"2988506892","2988507143","FR" +"2988507144","2988507147","BE" +"2988507148","2988507155","IT" +"2988507156","2988507159","PL" +"2988507160","2988507163","CH" +"2988507164","2988507167","GB" +"2988507168","2988507183","DE" +"2988507184","2988507199","FR" +"2988507200","2988507203","GB" +"2988507204","2988507207","DE" +"2988507208","2988507211","ES" +"2988507212","2988507215","PL" +"2988507216","2988507231","FR" +"2988507232","2988507239","ES" +"2988507240","2988507243","FR" +"2988507244","2988507247","GB" +"2988507248","2988507263","FR" +"2988507264","2988507279","PL" +"2988507280","2988507283","FR" +"2988507284","2988507287","ES" +"2988507288","2988507291","IE" +"2988507292","2988507295","GB" +"2988507296","2988507327","FR" +"2988507328","2988507335","DE" +"2988507336","2988507339","ES" +"2988507340","2988507343","NL" +"2988507344","2988507391","FR" +"2988507392","2988507423","CH" +"2988507424","2988507431","PL" +"2988507432","2988507439","DE" +"2988507440","2988507443","IT" +"2988507444","2988507447","NL" +"2988507448","2988507451","IT" +"2988507452","2988507455","PL" +"2988507456","2988507459","FR" +"2988507460","2988507463","BE" +"2988507464","2988507467","CH" +"2988507468","2988507471","ES" +"2988507472","2988507475","FR" +"2988507476","2988507479","GB" +"2988507480","2988507483","IE" +"2988507484","2988507487","IT" +"2988507488","2988507503","FR" +"2988507504","2988507519","IT" +"2988507520","2988507523","PL" +"2988507524","2988507531","FR" +"2988507532","2988507535","DE" +"2988507536","2988507539","FR" +"2988507540","2988507543","PL" +"2988507544","2988507547","FR" +"2988507548","2988507560","GB" +"2988507561","2988507561","FR" +"2988507562","2988507567","GB" +"2988507568","2988507583","IE" +"2988507584","2988507591","ES" +"2988507592","2988507595","FR" +"2988507596","2988507599","DE" +"2988507600","2988507603","ES" +"2988507604","2988507607","FR" +"2988507608","2988507611","ES" +"2988507612","2988507615","DE" +"2988507616","2988507623","IT" +"2988507624","2988507627","GB" +"2988507628","2988507631","PT" +"2988507632","2988507639","IT" +"2988507640","2988507643","FR" +"2988507644","2988507647","IT" +"2988507648","2988507711","DE" +"2988507712","2988507715","GB" +"2988507716","2988507719","FR" +"2988507720","2988507727","CH" +"2988507728","2988507731","FR" +"2988507732","2988507735","GB" +"2988507736","2988507739","ES" +"2988507740","2988507759","IE" +"2988507760","2988507767","FR" +"2988507768","2988507839","PL" +"2988507840","2988507855","FR" +"2988507856","2988507859","BE" +"2988507860","2988507867","PL" +"2988507868","2988507875","ES" +"2988507876","2988507879","FR" +"2988507880","2988507883","ES" +"2988507884","2988507887","GB" +"2988507888","2988507903","ES" +"2988507904","2988507919","PL" +"2988507920","2988507927","DE" +"2988507928","2988507935","BE" +"2988507936","2988507951","FR" +"2988507952","2988507955","DE" +"2988507956","2988507959","BE" +"2988507960","2988507967","PL" +"2988507968","2988507971","FR" +"2988507972","2988507975","PL" +"2988507976","2988507979","FR" +"2988507980","2988507983","DE" +"2988507984","2988507999","FR" +"2988508000","2988508031","NL" +"2988508032","2988508035","PL" +"2988508036","2988508039","CZ" +"2988508040","2988508047","FR" +"2988508048","2988508055","GB" +"2988508056","2988508059","FR" +"2988508060","2988508063","DE" +"2988508064","2988508067","ES" +"2988508068","2988508071","PL" +"2988508072","2988508079","FR" +"2988508080","2988508095","ES" +"2988508096","2988508103","FR" +"2988508104","2988508111","IT" +"2988508112","2988508127","BE" +"2988508128","2988508135","PL" +"2988508136","2988508143","GB" +"2988508144","2988508151","FR" +"2988508152","2988508159","ES" +"2988508160","2988508191","FR" +"2988508192","2988508207","PL" +"2988508208","2988508219","FR" +"2988508220","2988508223","DE" +"2988508224","2988508255","FR" +"2988508256","2988508259","BE" +"2988508260","2988508263","FR" +"2988508264","2988508271","ES" +"2988508272","2988508287","FR" +"2988508288","2988508303","PL" +"2988508304","2988508307","PT" +"2988508308","2988508311","ES" +"2988508312","2988508315","FR" +"2988508316","2988508319","ES" +"2988508320","2988508343","FR" +"2988508344","2988508351","GB" +"2988508352","2988508367","ES" +"2988508368","2988508383","FR" +"2988508384","2988508423","PL" +"2988508424","2988508427","CH" +"2988508428","2988508431","CZ" +"2988508432","2988508435","FR" +"2988508436","2988508439","DE" +"2988508440","2988508443","LT" +"2988508444","2988508455","PL" +"2988508456","2988508479","FR" +"2988508480","2988508543","PT" +"2988508544","2988508607","GB" +"2988508608","2988508671","IT" +"2988508672","2988508679","DE" +"2988508680","2988508683","LT" +"2988508684","2988508687","DE" +"2988508688","2988508703","PL" +"2988508704","2988508711","GB" +"2988508712","2988508719","DE" +"2988508720","2988508723","FR" +"2988508724","2988508735","GB" +"2988508736","2988508767","FR" +"2988508768","2988508771","ES" +"2988508772","2988508779","FR" +"2988508780","2988508783","LT" +"2988508784","2988508791","PT" +"2988508792","2988508799","ES" +"2988508800","2988508847","FR" +"2988508848","2988508855","GB" +"2988508856","2988508871","FR" +"2988508872","2988508875","IT" +"2988508876","2988508879","PT" +"2988508880","2988508895","DE" +"2988508896","2988508911","PL" +"2988508912","2988508919","IT" +"2988508920","2988508927","FR" +"2988508928","2988508931","IT" +"2988508932","2988508935","GB" +"2988508936","2988508939","IT" +"2988508940","2988508943","PL" +"2988508944","2988508947","DE" +"2988508948","2988508951","FR" +"2988508952","2988508959","ES" +"2988508960","2988508987","FR" +"2988508988","2988508991","PL" +"2988508992","2988509055","NL" +"2988509056","2988509119","FR" +"2988509120","2988509151","IT" +"2988509152","2988509183","PL" +"2988509184","2988509279","FR" +"2988509280","2988509283","DE" +"2988509284","2988509287","IT" +"2988509288","2988509291","BE" +"2988509292","2988509295","IT" +"2988509296","2988509311","DE" +"2988509312","2988509343","FR" +"2988509344","2988509351","BE" +"2988509352","2988509355","ES" +"2988509356","2988509359","DE" +"2988509360","2988509363","CH" +"2988509364","2988509367","IT" +"2988509368","2988509371","CH" +"2988509372","2988509375","PL" +"2988509376","2988509403","FR" +"2988509404","2988509407","GB" +"2988509408","2988509411","PL" +"2988509412","2988509415","DE" +"2988509416","2988509419","ES" +"2988509420","2988509443","FR" +"2988509444","2988509447","FI" +"2988509448","2988509451","GB" +"2988509452","2988509459","PL" +"2988509460","2988509463","FR" +"2988509464","2988509467","GB" +"2988509468","2988509471","NL" +"2988509472","2988509487","FR" +"2988509488","2988509491","IT" +"2988509492","2988509499","IE" +"2988509500","2988509503","FR" +"2988509504","2988509511","PL" +"2988509512","2988509515","GB" +"2988509516","2988509535","FR" +"2988509536","2988509543","ES" +"2988509544","2988509551","PL" +"2988509552","2988509575","FR" +"2988509576","2988509583","PL" +"2988509584","2988509619","FR" +"2988509620","2988509623","GB" +"2988509624","2988509627","CZ" +"2988509628","2988509631","IT" +"2988509632","2988509711","FR" +"2988509712","2988509715","IE" +"2988509716","2988509719","GB" +"2988509720","2988509723","ES" +"2988509724","2988509727","LT" +"2988509728","2988509751","FR" +"2988509752","2988509759","DE" +"2988509760","2988509767","PL" +"2988509768","2988509775","IT" +"2988509776","2988509779","ES" +"2988509780","2988509783","GB" +"2988509784","2988509787","FR" +"2988509788","2988509791","BE" +"2988509792","2988509823","NL" +"2988509824","2988509839","FR" +"2988509840","2988509855","ES" +"2988509856","2988509859","FR" +"2988509860","2988509863","DE" +"2988509864","2988509871","FR" +"2988509872","2988509875","DE" +"2988509876","2988509879","FR" +"2988509880","2988509883","PL" +"2988509884","2988509887","PT" +"2988509888","2988509903","FR" +"2988509904","2988509907","PL" +"2988509908","2988509919","IT" +"2988509920","2988509927","FR" +"2988509928","2988509935","PL" +"2988509936","2988509939","DE" +"2988509940","2988509943","IT" +"2988509944","2988509951","FR" +"2988509952","2988509955","IT" +"2988509956","2988509963","PL" +"2988509964","2988509967","GB" +"2988509968","2988509983","ES" +"2988509984","2988509987","DE" +"2988509988","2988509991","CZ" +"2988509992","2988509995","FR" +"2988509996","2988509999","DE" +"2988510000","2988510015","PL" +"2988510016","2988510023","ES" +"2988510024","2988510031","FR" +"2988510032","2988510079","PL" +"2988510080","2988510087","ES" +"2988510088","2988510091","PL" +"2988510092","2988510099","FR" +"2988510100","2988510103","GB" +"2988510104","2988510111","BE" +"2988510112","2988510143","CZ" +"2988510144","2988510175","NL" +"2988510176","2988510207","ES" +"2988510208","2988510211","GB" +"2988510212","2988510215","ES" +"2988510216","2988510239","FR" +"2988510240","2988510243","IT" +"2988510244","2988510247","FR" +"2988510248","2988510251","FI" +"2988510252","2988510255","LT" +"2988510256","2988510259","GB" +"2988510260","2988510263","FR" +"2988510264","2988510271","PL" +"2988510272","2988510287","FR" +"2988510288","2988510303","PL" +"2988510304","2988510307","ES" +"2988510308","2988510311","FR" +"2988510312","2988510319","GB" +"2988510320","2988510323","FR" +"2988510324","2988510327","GB" +"2988510328","2988510331","FR" +"2988510332","2988510335","IT" +"2988510336","2988510399","FR" +"2988510400","2988510403","DE" +"2988510404","2988510407","GB" +"2988510408","2988510415","PL" +"2988510416","2988510431","FR" +"2988510432","2988510435","IT" +"2988510436","2988510439","BE" +"2988510440","2988510463","FR" +"2988510464","2988510495","PL" +"2988510496","2988510507","FR" +"2988510508","2988510511","NL" +"2988510512","2988510515","GB" +"2988510516","2988510519","IE" +"2988510520","2988510523","PT" +"2988510524","2988510527","BE" +"2988510528","2988510559","FR" +"2988510560","2988510591","IT" +"2988510592","2988510623","BE" +"2988510624","2988510655","IE" +"2988510656","2988510687","PL" +"2988510688","2988510703","FR" +"2988510704","2988510719","PL" +"2988510720","2988510751","FR" +"2988510752","2988510759","PL" +"2988510760","2988510767","FR" +"2988510768","2988510771","ES" +"2988510772","2988510775","LT" +"2988510776","2988510847","FR" +"2988510848","2988510943","PL" +"2988510944","2988510975","GB" +"2988510976","2988510979","PL" +"2988510980","2988510983","IT" +"2988510984","2988510987","GB" +"2988510988","2988510991","PL" +"2988510992","2988511007","FR" +"2988511008","2988511015","PL" +"2988511016","2988511023","IT" +"2988511024","2988511071","FR" +"2988511072","2988511079","PL" +"2988511080","2988511083","FR" +"2988511084","2988511087","PL" +"2988511088","2988511103","FR" +"2988511104","2988511167","PL" +"2988511168","2988511171","IT" +"2988511172","2988511175","DE" +"2988511176","2988511179","GB" +"2988511180","2988511187","FR" +"2988511188","2988511191","GB" +"2988511192","2988511487","FR" +"2988511488","2988511551","PL" +"2988511552","2988511555","FR" +"2988511556","2988511559","CZ" +"2988511560","2988511575","FR" +"2988511576","2988511583","GB" +"2988511584","2988511663","FR" +"2988511664","2988511671","DE" +"2988511672","2988511675","PL" +"2988511676","2988511679","GB" +"2988511680","2988511683","NL" +"2988511684","2988511687","ES" +"2988511688","2988511691","DE" +"2988511692","2988511695","FR" +"2988511696","2988511699","BE" +"2988511700","2988511703","IT" +"2988511704","2988511711","PL" +"2988511712","2988511719","DE" +"2988511720","2988511727","FR" +"2988511728","2988511731","NL" +"2988511732","2988511739","DE" +"2988511740","2988511743","FR" +"2988511744","2988511747","PL" +"2988511748","2988511751","GB" +"2988511752","2988511759","IT" +"2988511760","2988511767","FR" +"2988511768","2988511771","PL" +"2988511772","2988511775","FR" +"2988511776","2988511807","GB" +"2988511808","2988511823","ES" +"2988511824","2988511831","DE" +"2988511832","2988511835","GB" +"2988511836","2988511855","FR" +"2988511856","2988511887","PL" +"2988511888","2988511903","FR" +"2988511904","2988511911","IT" +"2988511912","2988511915","FR" +"2988511916","2988511919","PL" +"2988511920","2988511923","GB" +"2988511924","2988511927","ES" +"2988511928","2988511931","IT" +"2988511932","2988511951","FR" +"2988511952","2988511967","GB" +"2988511968","2988511979","IT" +"2988511980","2988511983","FR" +"2988511984","2988511999","BE" +"2988512000","2988512031","PL" +"2988512032","2988512047","FR" +"2988512048","2988512055","ES" +"2988512056","2988512059","PL" +"2988512060","2988512063","FR" +"2988512064","2988512095","CH" +"2988512096","2988512127","IE" +"2988512128","2988512143","PL" +"2988512144","2988512151","GB" +"2988512152","2988512155","CH" +"2988512156","2988512159","FR" +"2988512160","2988512191","GB" +"2988512192","2988512195","FR" +"2988512196","2988512199","DE" +"2988512200","2988512207","ES" +"2988512208","2988512223","FR" +"2988512224","2988512227","BE" +"2988512228","2988512239","FR" +"2988512240","2988512247","LT" +"2988512248","2988512251","GB" +"2988512252","2988512255","ES" +"2988512256","2988512287","FR" +"2988512288","2988512303","PL" +"2988512304","2988512307","IT" +"2988512308","2988512311","GB" +"2988512312","2988512315","FR" +"2988512316","2988512319","DE" +"2988512320","2988512335","FR" +"2988512336","2988512339","PL" +"2988512340","2988512343","IT" +"2988512344","2988512351","FR" +"2988512352","2988512383","IT" +"2988512384","2988512399","FR" +"2988512400","2988512403","DE" +"2988512404","2988512415","FR" +"2988512416","2988512435","PL" +"2988512436","2988512439","FR" +"2988512440","2988512447","NL" +"2988512448","2988512455","PL" +"2988512456","2988512459","ES" +"2988512460","2988512467","FR" +"2988512468","2988512471","GB" +"2988512472","2988512479","FR" +"2988512480","2988512483","DE" +"2988512484","2988512523","FR" +"2988512524","2988512527","IT" +"2988512528","2988512543","FR" +"2988512544","2988512551","PL" +"2988512552","2988512575","FR" +"2988512576","2988512579","NL" +"2988512580","2988512583","ES" +"2988512584","2988512587","FR" +"2988512588","2988512591","PL" +"2988512592","2988512595","BE" +"2988512596","2988512599","ES" +"2988512600","2988512607","PT" +"2988512608","2988512631","GB" +"2988512632","2988512639","PL" +"2988512640","2988512647","GB" +"2988512648","2988512651","ES" +"2988512652","2988512655","DE" +"2988512656","2988512663","PT" +"2988512664","2988512667","FR" +"2988512668","2988512671","ES" +"2988512672","2988512687","FR" +"2988512688","2988512703","PL" +"2988512704","2988512767","FR" +"2988512768","2988512831","PL" +"2988512832","2988512835","FR" +"2988512836","2988512839","ES" +"2988512840","2988512847","DE" +"2988512848","2988512851","ES" +"2988512852","2988512855","DE" +"2988512856","2988512879","FR" +"2988512880","2988512895","DE" +"2988512896","2988512899","PL" +"2988512900","2988512911","ES" +"2988512912","2988512943","FR" +"2988512944","2988512951","ES" +"2988512952","2988512955","FR" +"2988512956","2988512959","LT" +"2988512960","2988512963","ES" +"2988512964","2988512967","PL" +"2988512968","2988512971","GB" +"2988512972","2988512975","NL" +"2988512976","2988512979","FI" +"2988512980","2988512983","DE" +"2988512984","2988512987","CH" +"2988512988","2988512991","CZ" +"2988512992","2988512995","FR" +"2988512996","2988512999","GB" +"2988513000","2988513003","FR" +"2988513004","2988513007","PL" +"2988513008","2988513015","IT" +"2988513016","2988513019","DE" +"2988513020","2988513023","NL" +"2988513024","2988513151","FR" +"2988513152","2988513183","ES" +"2988513184","2988513191","DE" +"2988513192","2988513195","FR" +"2988513196","2988513199","ES" +"2988513200","2988513207","PT" +"2988513208","2988513219","FR" +"2988513220","2988513223","NL" +"2988513224","2988513227","GB" +"2988513228","2988513235","FR" +"2988513236","2988513239","ES" +"2988513240","2988513271","FR" +"2988513272","2988513275","DE" +"2988513276","2988513279","CH" +"2988513280","2988513283","FR" +"2988513284","2988513287","ES" +"2988513288","2988513291","FR" +"2988513292","2988513295","PL" +"2988513296","2988513303","NL" +"2988513304","2988513307","FR" +"2988513308","2988513311","PL" +"2988513312","2988513327","PT" +"2988513328","2988513331","PL" +"2988513332","2988513343","FR" +"2988513344","2988513351","ES" +"2988513352","2988513359","IT" +"2988513360","2988513363","PT" +"2988513364","2988513379","FR" +"2988513380","2988513383","PT" +"2988513384","2988513387","FR" +"2988513388","2988513391","CH" +"2988513392","2988513407","FR" +"2988513408","2988513471","PL" +"2988513472","2988513503","FR" +"2988513504","2988513507","CH" +"2988513508","2988513511","DE" +"2988513512","2988513515","IE" +"2988513516","2988513519","DE" +"2988513520","2988513551","GB" +"2988513552","2988513555","IT" +"2988513556","2988513567","FR" +"2988513568","2988513575","GB" +"2988513576","2988513583","PL" +"2988513584","2988513599","IE" +"2988513600","2988513631","FR" +"2988513632","2988513647","ES" +"2988513648","2988513671","FR" +"2988513672","2988513675","PT" +"2988513676","2988513679","FR" +"2988513680","2988513683","ES" +"2988513684","2988513691","FR" +"2988513692","2988513695","DE" +"2988513696","2988513703","FR" +"2988513704","2988513707","DE" +"2988513708","2988513723","FR" +"2988513724","2988513727","DE" +"2988513728","2988513739","FR" +"2988513740","2988513743","ES" +"2988513744","2988513759","GB" +"2988513760","2988513879","FR" +"2988513880","2988513883","ES" +"2988513884","2988513895","FR" +"2988513896","2988513899","IT" +"2988513900","2988513903","PL" +"2988513904","2988513919","IT" +"2988513920","2988513951","FR" +"2988513952","2988513959","PL" +"2988513960","2988513963","NL" +"2988513964","2988513967","IE" +"2988513968","2988513983","DE" +"2988513984","2988513991","GB" +"2988513992","2988513999","IE" +"2988514000","2988514015","FR" +"2988514016","2988514023","ES" +"2988514024","2988514027","CH" +"2988514028","2988514031","PL" +"2988514032","2988514047","FR" +"2988514048","2988514079","GB" +"2988514080","2988514095","PL" +"2988514096","2988514099","DE" +"2988514100","2988514103","PL" +"2988514104","2988514111","FR" +"2988514112","2988514115","IE" +"2988514116","2988514127","FR" +"2988514128","2988514131","IE" +"2988514132","2988514135","IT" +"2988514136","2988514139","ES" +"2988514140","2988514143","PL" +"2988514144","2988514159","FR" +"2988514160","2988514163","IT" +"2988514164","2988514171","FR" +"2988514172","2988514175","DE" +"2988514176","2988514207","FR" +"2988514208","2988514211","ES" +"2988514212","2988514219","FR" +"2988514220","2988514227","GB" +"2988514228","2988514231","IE" +"2988514232","2988514239","ES" +"2988514240","2988514247","FR" +"2988514248","2988514251","GB" +"2988514252","2988514255","FR" +"2988514256","2988514271","ES" +"2988514272","2988514279","FR" +"2988514280","2988514287","PL" +"2988514288","2988514303","ES" +"2988514304","2988514335","FR" +"2988514336","2988514339","PL" +"2988514340","2988514343","FR" +"2988514344","2988514351","PL" +"2988514352","2988514359","FR" +"2988514360","2988514367","ES" +"2988514368","2988514399","FR" +"2988514400","2988514431","GB" +"2988514432","2988514447","FR" +"2988514448","2988514463","ES" +"2988514464","2988514543","FR" +"2988514544","2988514559","PL" +"2988514560","2988514623","FR" +"2988514624","2988514655","DE" +"2988514656","2988514671","FR" +"2988514672","2988514675","CH" +"2988514676","2988514679","IT" +"2988514680","2988514683","GB" +"2988514684","2988514687","DE" +"2988514688","2988514719","GB" +"2988514720","2988514735","ES" +"2988514736","2988514739","FR" +"2988514740","2988514743","ES" +"2988514744","2988514747","BE" +"2988514748","2988514751","GB" +"2988514752","2988514815","FI" +"2988514816","2988514823","FR" +"2988514824","2988514827","PL" +"2988514828","2988514831","FR" +"2988514832","2988514839","PL" +"2988514840","2988514879","ES" +"2988514880","2988514943","PL" +"2988514944","2988514959","ES" +"2988514960","2988514975","PL" +"2988514976","2988514979","DE" +"2988514980","2988514983","PL" +"2988514984","2988514991","IT" +"2988514992","2988514995","FR" +"2988514996","2988515007","PL" +"2988515008","2988515027","FR" +"2988515028","2988515031","DE" +"2988515032","2988515039","FR" +"2988515040","2988515071","GB" +"2988515072","2988515327","FR" +"2988515328","2988517375","DE" +"2988517376","2988519423","FR" +"2988519424","2988521471","PL" +"2988521472","2988523519","FR" +"2988523520","2988523523","GB" +"2988523524","2988523599","FR" +"2988523600","2988523603","ES" +"2988523604","2988523607","GB" +"2988523608","2988523615","PL" +"2988523616","2988523631","FR" +"2988523632","2988523651","PL" +"2988523652","2988523655","FR" +"2988523656","2988523663","FI" +"2988523664","2988523667","DE" +"2988523668","2988523679","FR" +"2988523680","2988523711","ES" +"2988523712","2988523727","FR" +"2988523728","2988523731","PL" +"2988523732","2988523735","IT" +"2988523736","2988523739","DE" +"2988523740","2988523743","FR" +"2988523744","2988523775","CH" +"2988523776","2988524031","FR" +"2988524032","2988524039","PL" +"2988524040","2988524047","ES" +"2988524048","2988524055","FR" +"2988524056","2988524063","CZ" +"2988524064","2988524067","PL" +"2988524068","2988524075","GB" +"2988524076","2988524079","ES" +"2988524080","2988524083","GB" +"2988524084","2988524087","IT" +"2988524088","2988524111","FR" +"2988524112","2988524127","IT" +"2988524128","2988524143","FR" +"2988524144","2988524147","GB" +"2988524148","2988524151","IT" +"2988524152","2988524155","PL" +"2988524156","2988524159","PT" +"2988524160","2988524163","ES" +"2988524164","2988524167","FR" +"2988524168","2988524175","ES" +"2988524176","2988524191","FR" +"2988524192","2988524195","FI" +"2988524196","2988524199","DE" +"2988524200","2988524203","IE" +"2988524204","2988524211","FR" +"2988524212","2988524215","FI" +"2988524216","2988524219","FR" +"2988524220","2988524223","ES" +"2988524224","2988524227","DE" +"2988524228","2988524231","PL" +"2988524232","2988524239","ES" +"2988524240","2988524255","FR" +"2988524256","2988524259","LT" +"2988524260","2988524263","PT" +"2988524264","2988524267","CZ" +"2988524268","2988524271","NL" +"2988524272","2988524287","DE" +"2988524288","2988524291","ES" +"2988524292","2988524295","IT" +"2988524296","2988524303","FR" +"2988524304","2988524307","IT" +"2988524308","2988524319","GB" +"2988524320","2988524351","FR" +"2988524352","2988524359","CH" +"2988524360","2988524363","ES" +"2988524364","2988524367","DE" +"2988524368","2988524383","GB" +"2988524384","2988524415","IE" +"2988524416","2988524447","FI" +"2988524448","2988524479","FR" +"2988524480","2988524483","CZ" +"2988524484","2988524487","IT" +"2988524488","2988524495","FR" +"2988524496","2988524543","PL" +"2988524544","2988524575","IE" +"2988524576","2988524591","FR" +"2988524592","2988524603","PL" +"2988524604","2988524607","ES" +"2988524608","2988524627","GB" +"2988524628","2988524631","ES" +"2988524632","2988524635","DE" +"2988524636","2988524639","FR" +"2988524640","2988524671","DE" +"2988524672","2988524735","FR" +"2988524736","2988524751","GB" +"2988524752","2988524799","FR" +"2988524800","2988525055","GB" +"2988525056","2988525567","PL" +"2988525568","2988525583","FR" +"2988525584","2988525647","PL" +"2988525648","2988525655","GB" +"2988525656","2988525659","FR" +"2988525660","2988525663","DE" +"2988525664","2988525775","FR" +"2988525776","2988525779","LT" +"2988525780","2988525783","FR" +"2988525784","2988525787","PL" +"2988525788","2988525791","FR" +"2988525792","2988525823","DE" +"2988525824","2988525843","FR" +"2988525844","2988525847","ES" +"2988525848","2988525851","IT" +"2988525852","2988525855","DE" +"2988525856","2988525887","FR" +"2988525888","2988525951","FI" +"2988525952","2988526079","ES" +"2988526080","2988526083","IE" +"2988526084","2988526087","FR" +"2988526088","2988526091","PT" +"2988526092","2988526095","GB" +"2988526096","2988526135","FR" +"2988526136","2988526143","GB" +"2988526144","2988526175","BE" +"2988526176","2988526239","ES" +"2988526240","2988526423","PL" +"2988526424","2988526427","BE" +"2988526428","2988526431","ES" +"2988526432","2988526435","NL" +"2988526436","2988526439","FR" +"2988526440","2988526443","CH" +"2988526444","2988526447","BE" +"2988526448","2988526451","GB" +"2988526452","2988526455","DE" +"2988526456","2988526463","ES" +"2988526464","2988526579","FR" +"2988526580","2988526583","ES" +"2988526584","2988526591","DE" +"2988526592","2988526607","FR" +"2988526608","2988526615","DE" +"2988526616","2988526655","FR" +"2988526656","2988526663","PL" +"2988526664","2988526671","FR" +"2988526672","2988526679","IE" +"2988526680","2988526683","ES" +"2988526684","2988526687","FR" +"2988526688","2988526703","ES" +"2988526704","2988526707","NL" +"2988526708","2988526711","PL" +"2988526712","2988526715","ES" +"2988526716","2988526719","GB" +"2988526720","2988526727","FR" +"2988526728","2988526735","DE" +"2988526736","2988526751","PL" +"2988526752","2988526783","GB" +"2988526784","2988526847","FR" +"2988526848","2988526863","PL" +"2988526864","2988526867","GB" +"2988526868","2988526871","FR" +"2988526872","2988526875","DE" +"2988526876","2988526879","PL" +"2988526880","2988526911","FR" +"2988526912","2988526927","GB" +"2988526928","2988526935","DE" +"2988526936","2988526943","PL" +"2988526944","2988526951","DE" +"2988526952","2988526955","FR" +"2988526956","2988526959","IT" +"2988526960","2988526975","FR" +"2988526976","2988526991","PL" +"2988526992","2988526995","DE" +"2988526996","2988527003","ES" +"2988527004","2988527055","FR" +"2988527056","2988527071","BE" +"2988527072","2988527087","IE" +"2988527088","2988527095","GB" +"2988527096","2988527103","PL" +"2988527104","2988527127","FR" +"2988527128","2988527167","PL" +"2988527168","2988527171","DE" +"2988527172","2988527175","ES" +"2988527176","2988527179","PT" +"2988527180","2988527183","PL" +"2988527184","2988527187","IT" +"2988527188","2988527191","ES" +"2988527192","2988527195","DE" +"2988527196","2988527199","FR" +"2988527200","2988527207","NL" +"2988527208","2988527211","DE" +"2988527212","2988527215","PT" +"2988527216","2988527359","FR" +"2988527360","2988527391","DE" +"2988527392","2988527399","PL" +"2988527400","2988527407","DE" +"2988527408","2988527411","FR" +"2988527412","2988527419","PL" +"2988527420","2988527423","GB" +"2988527424","2988527431","FR" +"2988527432","2988527439","IT" +"2988527440","2988527451","PL" +"2988527452","2988527455","PT" +"2988527456","2988527459","LT" +"2988527460","2988527463","IE" +"2988527464","2988527475","FR" +"2988527476","2988527479","ES" +"2988527480","2988527487","FR" +"2988527488","2988527503","GB" +"2988527504","2988527523","FR" +"2988527524","2988527527","PL" +"2988527528","2988527531","DE" +"2988527532","2988527551","FR" +"2988527552","2988527583","PL" +"2988527584","2988527591","GB" +"2988527592","2988527595","IE" +"2988527596","2988527599","DE" +"2988527600","2988527603","NL" +"2988527604","2988527607","FR" +"2988527608","2988527611","DE" +"2988527612","2988527615","PT" +"2988527616","2988527619","ES" +"2988527620","2988527623","PL" +"2988527624","2988527631","ES" +"2988527632","2988527667","FR" +"2988527668","2988527671","IE" +"2988527672","2988527675","ES" +"2988527676","2988527679","DE" +"2988527680","2988527683","ES" +"2988527684","2988527695","FR" +"2988527696","2988527711","GB" +"2988527712","2988527747","FR" +"2988527748","2988527751","ES" +"2988527752","2988527755","DE" +"2988527756","2988527759","PL" +"2988527760","2988527775","ES" +"2988527776","2988527823","FR" +"2988527824","2988527827","ES" +"2988527828","2988527831","DE" +"2988527832","2988527839","ES" +"2988527840","2988527843","PL" +"2988527844","2988527847","NL" +"2988527848","2988527851","LT" +"2988527852","2988527855","GB" +"2988527856","2988527871","FR" +"2988527872","2988527887","IE" +"2988527888","2988527895","PT" +"2988527896","2988527903","FR" +"2988527904","2988527935","ES" +"2988527936","2988527967","DE" +"2988527968","2988527983","PL" +"2988527984","2988527999","FR" +"2988528000","2988528007","IT" +"2988528008","2988528011","ES" +"2988528012","2988528015","PL" +"2988528016","2988528063","IE" +"2988528064","2988528071","GB" +"2988528072","2988528075","NL" +"2988528076","2988528079","BE" +"2988528080","2988528095","ES" +"2988528096","2988528127","FR" +"2988528128","2988528159","GB" +"2988528160","2988528179","ES" +"2988528180","2988528183","IT" +"2988528184","2988528187","PL" +"2988528188","2988528191","FR" +"2988528192","2988528207","IE" +"2988528208","2988528215","FR" +"2988528216","2988528219","IE" +"2988528220","2988528223","DE" +"2988528224","2988528227","FR" +"2988528228","2988528231","IE" +"2988528232","2988528235","GB" +"2988528236","2988528239","FR" +"2988528240","2988528263","GB" +"2988528264","2988528267","PL" +"2988528268","2988528271","FR" +"2988528272","2988528287","IE" +"2988528288","2988528303","GB" +"2988528304","2988528351","FR" +"2988528352","2988528383","DE" +"2988528384","2988528399","GB" +"2988528400","2988528419","FR" +"2988528420","2988528423","DE" +"2988528424","2988528431","NL" +"2988528432","2988528439","PL" +"2988528440","2988528447","GB" +"2988528448","2988528451","DE" +"2988528452","2988528455","IT" +"2988528456","2988528459","GB" +"2988528460","2988528463","ES" +"2988528464","2988528467","DE" +"2988528468","2988528471","GB" +"2988528472","2988528475","ES" +"2988528476","2988528479","DE" +"2988528480","2988528483","NL" +"2988528484","2988528487","ES" +"2988528488","2988528495","FR" +"2988528496","2988528511","IT" +"2988528512","2988528639","FR" +"2988528640","2988528643","BE" +"2988528644","2988528647","PL" +"2988528648","2988528671","FR" +"2988528672","2988528703","DE" +"2988528704","2988528735","IE" +"2988528736","2988528751","FR" +"2988528752","2988528755","CH" +"2988528756","2988528759","PL" +"2988528760","2988528767","GB" +"2988528768","2988528771","DE" +"2988528772","2988528783","FR" +"2988528784","2988528787","ES" +"2988528788","2988528791","FR" +"2988528792","2988528795","PL" +"2988528796","2988528799","GB" +"2988528800","2988528863","FR" +"2988528864","2988528867","DE" +"2988528868","2988528871","FR" +"2988528872","2988528879","GB" +"2988528880","2988528895","ES" +"2988528896","2988528911","FR" +"2988528912","2988528919","PL" +"2988528920","2988528923","CH" +"2988528924","2988528927","GB" +"2988528928","2988528975","FR" +"2988528976","2988528991","PL" +"2988528992","2988528995","FI" +"2988528996","2988528999","BE" +"2988529000","2988529003","GB" +"2988529004","2988529007","FR" +"2988529008","2988529023","IE" +"2988529024","2988529031","PL" +"2988529032","2988529047","FR" +"2988529048","2988529051","PL" +"2988529052","2988529055","PT" +"2988529056","2988529119","FR" +"2988529120","2988529151","NL" +"2988529152","2988529159","IT" +"2988529160","2988529163","PL" +"2988529164","2988529167","DE" +"2988529168","2988529171","IE" +"2988529172","2988529175","PT" +"2988529176","2988529179","ES" +"2988529180","2988529199","FR" +"2988529200","2988529207","PL" +"2988529208","2988529247","FR" +"2988529248","2988529251","GB" +"2988529252","2988529263","PL" +"2988529264","2988529267","BE" +"2988529268","2988529271","PL" +"2988529272","2988529275","IT" +"2988529276","2988529279","ES" +"2988529280","2988529295","LT" +"2988529296","2988529311","IT" +"2988529312","2988529315","PL" +"2988529316","2988529319","FR" +"2988529320","2988529323","ES" +"2988529324","2988529331","DE" +"2988529332","2988529339","GB" +"2988529340","2988529343","DE" +"2988529344","2988529351","PL" +"2988529352","2988529359","GB" +"2988529360","2988529375","IT" +"2988529376","2988529383","GB" +"2988529384","2988529387","DE" +"2988529388","2988529391","FR" +"2988529392","2988529407","PL" +"2988529408","2988529411","IT" +"2988529412","2988529415","NL" +"2988529416","2988529419","PT" +"2988529420","2988529423","CH" +"2988529424","2988529431","DE" +"2988529432","2988529439","GB" +"2988529440","2988529455","PL" +"2988529456","2988529535","FR" +"2988529536","2988529567","FI" +"2988529568","2988529583","FR" +"2988529584","2988529591","ES" +"2988529592","2988529595","FR" +"2988529596","2988529599","GB" +"2988529600","2988529607","IT" +"2988529608","2988529631","FR" +"2988529632","2988529647","LT" +"2988529648","2988529703","FR" +"2988529704","2988529707","DE" +"2988529708","2988529759","FR" +"2988529760","2988529767","PL" +"2988529768","2988529771","FR" +"2988529772","2988529775","DE" +"2988529776","2988529783","ES" +"2988529784","2988529787","FR" +"2988529788","2988529791","PL" +"2988529792","2988529799","ES" +"2988529800","2988529807","DE" +"2988529808","2988529823","FR" +"2988529824","2988529855","ES" +"2988529856","2988529887","FR" +"2988529888","2988529891","DE" +"2988529892","2988529895","PL" +"2988529896","2988529899","FR" +"2988529900","2988529903","PT" +"2988529904","2988529907","IT" +"2988529908","2988529911","PT" +"2988529912","2988529935","GB" +"2988529936","2988529939","CH" +"2988529940","2988529943","GB" +"2988529944","2988529947","ES" +"2988529948","2988529951","PT" +"2988529952","2988529955","GB" +"2988529956","2988529959","PL" +"2988529960","2988529967","GB" +"2988529968","2988529983","NL" +"2988529984","2988529999","GB" +"2988530000","2988530003","FR" +"2988530004","2988530007","GB" +"2988530008","2988530031","FR" +"2988530032","2988530035","CH" +"2988530036","2988530043","DE" +"2988530044","2988530047","FR" +"2988530048","2988530063","GB" +"2988530064","2988530079","IE" +"2988530080","2988530095","FR" +"2988530096","2988530099","PL" +"2988530100","2988530191","FR" +"2988530192","2988530207","NL" +"2988530208","2988530239","PL" +"2988530240","2988530271","FR" +"2988530272","2988530303","IE" +"2988530304","2988530307","DE" +"2988530308","2988530311","PL" +"2988530312","2988530323","FR" +"2988530324","2988530327","GB" +"2988530328","2988530367","FR" +"2988530368","2988530371","ES" +"2988530372","2988530379","FR" +"2988530380","2988530383","CH" +"2988530384","2988530391","FR" +"2988530392","2988530395","PT" +"2988530396","2988530399","GB" +"2988530400","2988530403","ES" +"2988530404","2988530407","PL" +"2988530408","2988530411","LT" +"2988530412","2988530415","CZ" +"2988530416","2988530423","PL" +"2988530424","2988530431","ES" +"2988530432","2988530687","DE" +"2988530688","2988530695","IT" +"2988530696","2988530703","PL" +"2988530704","2988530735","FR" +"2988530736","2988530739","IE" +"2988530740","2988530743","NL" +"2988530744","2988530751","PL" +"2988530752","2988530847","FR" +"2988530848","2988530851","DE" +"2988530852","2988530855","ES" +"2988530856","2988530863","PT" +"2988530864","2988530867","PL" +"2988530868","2988530871","FR" +"2988530872","2988530879","IT" +"2988530880","2988530887","PL" +"2988530888","2988530895","DE" +"2988530896","2988530927","FR" +"2988530928","2988530943","FI" +"2988530944","2988530975","FR" +"2988530976","2988531007","PL" +"2988531008","2988531015","DE" +"2988531016","2988531019","NL" +"2988531020","2988531023","IE" +"2988531024","2988531027","ES" +"2988531028","2988531031","FR" +"2988531032","2988531035","PL" +"2988531036","2988531039","DE" +"2988531040","2988531047","FR" +"2988531048","2988531051","GB" +"2988531052","2988531055","PL" +"2988531056","2988531075","FR" +"2988531076","2988531079","GB" +"2988531080","2988531083","FR" +"2988531084","2988531087","PL" +"2988531088","2988531103","FR" +"2988531104","2988531107","DE" +"2988531108","2988531151","FR" +"2988531152","2988531171","PL" +"2988531172","2988531175","BE" +"2988531176","2988531183","GB" +"2988531184","2988531187","ES" +"2988531188","2988531191","IE" +"2988531192","2988531199","FR" +"2988531200","2988531247","ES" +"2988531248","2988531259","PL" +"2988531260","2988531271","GB" +"2988531272","2988531279","ES" +"2988531280","2988531287","PT" +"2988531288","2988531291","FR" +"2988531292","2988531295","PL" +"2988531296","2988531311","IE" +"2988531312","2988531319","GB" +"2988531320","2988531323","PT" +"2988531324","2988531327","GB" +"2988531328","2988531343","IE" +"2988531344","2988531351","CH" +"2988531352","2988531359","PL" +"2988531360","2988531391","FR" +"2988531392","2988531399","PL" +"2988531400","2988531403","DE" +"2988531404","2988531427","PL" +"2988531428","2988531451","FR" +"2988531452","2988531455","GB" +"2988531456","2988535807","FR" +"2988535808","2988537855","ES" +"2988537856","2988539935","FR" +"2988539936","2988539967","GB" +"2988539968","2988539971","ES" +"2988539972","2988539975","IT" +"2988539976","2988539983","FR" +"2988539984","2988540003","PL" +"2988540004","2988540007","CZ" +"2988540008","2988540011","ES" +"2988540012","2988540015","DE" +"2988540016","2988540019","FR" +"2988540020","2988540023","GB" +"2988540024","2988540027","PL" +"2988540028","2988540031","ES" +"2988540032","2988540207","FR" +"2988540208","2988540211","GB" +"2988540212","2988540215","DE" +"2988540216","2988540219","FR" +"2988540220","2988540223","GB" +"2988540224","2988540231","NL" +"2988540232","2988540235","GB" +"2988540236","2988540239","ES" +"2988540240","2988540243","PL" +"2988540244","2988540247","IT" +"2988540248","2988540251","GB" +"2988540252","2988540255","FR" +"2988540256","2988540271","PL" +"2988540272","2988540275","DE" +"2988540276","2988540279","PL" +"2988540280","2988540287","FR" +"2988540288","2988540303","BE" +"2988540304","2988540363","FR" +"2988540364","2988540367","PL" +"2988540368","2988540375","FR" +"2988540376","2988540379","GB" +"2988540380","2988540415","FR" +"2988540416","2988540419","CZ" +"2988540420","2988540427","GB" +"2988540428","2988540431","NL" +"2988540432","2988540435","FR" +"2988540436","2988540439","DE" +"2988540440","2988540447","PL" +"2988540448","2988540451","IT" +"2988540452","2988540455","FR" +"2988540456","2988540459","DE" +"2988540460","2988540463","ES" +"2988540464","2988540471","PL" +"2988540472","2988540479","ES" +"2988540480","2988540483","FR" +"2988540484","2988540487","DE" +"2988540488","2988540491","ES" +"2988540492","2988540499","FR" +"2988540500","2988540503","CZ" +"2988540504","2988540507","DE" +"2988540508","2988540511","ES" +"2988540512","2988540543","FR" +"2988540544","2988540607","PL" +"2988540608","2988540623","BE" +"2988540624","2988540631","GB" +"2988540632","2988540635","DE" +"2988540636","2988540639","PT" +"2988540640","2988540647","PL" +"2988540648","2988540651","FR" +"2988540652","2988540667","PL" +"2988540668","2988540671","IT" +"2988540672","2988540683","PL" +"2988540684","2988540707","FR" +"2988540708","2988540711","DE" +"2988540712","2988540715","FR" +"2988540716","2988540719","PL" +"2988540720","2988540735","DE" +"2988540736","2988540751","ES" +"2988540752","2988540759","PL" +"2988540760","2988540763","ES" +"2988540764","2988540767","DE" +"2988540768","2988540775","PL" +"2988540776","2988540783","BE" +"2988540784","2988540787","ES" +"2988540788","2988540795","FR" +"2988540796","2988540799","GB" +"2988540800","2988540831","FR" +"2988540832","2988540839","PL" +"2988540840","2988540847","GB" +"2988540848","2988540851","FR" +"2988540852","2988540855","GB" +"2988540856","2988540863","IT" +"2988540864","2988540931","FR" +"2988540932","2988540935","DE" +"2988540936","2988540943","FR" +"2988540944","2988540959","ES" +"2988540960","2988540975","FR" +"2988540976","2988540991","GB" +"2988540992","2988541055","ES" +"2988541056","2988541087","FR" +"2988541088","2988541103","BE" +"2988541104","2988541111","ES" +"2988541112","2988541119","DE" +"2988541120","2988541131","FR" +"2988541132","2988541135","DE" +"2988541136","2988541143","GB" +"2988541144","2988541215","FR" +"2988541216","2988541231","FI" +"2988541232","2988541243","FR" +"2988541244","2988541247","GB" +"2988541248","2988541263","FR" +"2988541264","2988541279","IT" +"2988541280","2988541311","NL" +"2988541312","2988541315","ES" +"2988541316","2988541319","CH" +"2988541320","2988541327","FR" +"2988541328","2988541335","PL" +"2988541336","2988541343","FR" +"2988541344","2988541347","GB" +"2988541348","2988541351","IT" +"2988541352","2988541355","IE" +"2988541356","2988541359","GB" +"2988541360","2988541367","ES" +"2988541368","2988541371","PL" +"2988541372","2988541375","GB" +"2988541376","2988541391","BE" +"2988541392","2988541407","FR" +"2988541408","2988541423","BE" +"2988541424","2988541439","DE" +"2988541440","2988541443","IT" +"2988541444","2988541447","FR" +"2988541448","2988541455","IE" +"2988541456","2988541463","FR" +"2988541464","2988541467","ES" +"2988541468","2988541503","FR" +"2988541504","2988541519","CH" +"2988541520","2988541539","FR" +"2988541540","2988541543","PT" +"2988541544","2988541547","FR" +"2988541548","2988541551","ES" +"2988541552","2988541567","FR" +"2988541568","2988541587","ES" +"2988541588","2988541603","FR" +"2988541604","2988541607","NL" +"2988541608","2988541611","GB" +"2988541612","2988541615","IT" +"2988541616","2988541619","BE" +"2988541620","2988541623","CH" +"2988541624","2988541647","FR" +"2988541648","2988541651","IT" +"2988541652","2988541655","FR" +"2988541656","2988541659","ES" +"2988541660","2988541663","PL" +"2988541664","2988541679","FR" +"2988541680","2988541683","BE" +"2988541684","2988541687","DE" +"2988541688","2988541691","ES" +"2988541692","2988541695","IT" +"2988541696","2988541727","PL" +"2988541728","2988541731","NL" +"2988541732","2988541735","FR" +"2988541736","2988541739","GB" +"2988541740","2988541743","FR" +"2988541744","2988541747","DE" +"2988541748","2988541751","ES" +"2988541752","2988541759","PL" +"2988541760","2988541763","BE" +"2988541764","2988541767","DE" +"2988541768","2988541775","PL" +"2988541776","2988541779","CH" +"2988541780","2988541783","FR" +"2988541784","2988541787","ES" +"2988541788","2988541791","FR" +"2988541792","2988541807","ES" +"2988541808","2988541815","FR" +"2988541816","2988541819","ES" +"2988541820","2988541823","CZ" +"2988541824","2988541855","FR" +"2988541856","2988541867","PL" +"2988541868","2988541887","FR" +"2988541888","2988541895","DE" +"2988541896","2988541899","PL" +"2988541900","2988541903","BE" +"2988541904","2988541907","CZ" +"2988541908","2988541911","GB" +"2988541912","2988541935","PL" +"2988541936","2988541939","FR" +"2988541940","2988541943","FI" +"2988541944","2988541947","FR" +"2988541948","2988541951","ES" +"2988541952","2988541955","GB" +"2988541956","2988541959","DE" +"2988541960","2988541963","CH" +"2988541964","2988541967","DE" +"2988541968","2988541999","FR" +"2988542000","2988542003","PL" +"2988542004","2988542007","DE" +"2988542008","2988542011","FI" +"2988542012","2988542015","CH" +"2988542016","2988542019","GB" +"2988542020","2988542023","FR" +"2988542024","2988542027","NL" +"2988542028","2988542031","PL" +"2988542032","2988542047","FR" +"2988542048","2988542055","GB" +"2988542056","2988542063","FR" +"2988542064","2988542067","GB" +"2988542068","2988542071","ES" +"2988542072","2988542255","FR" +"2988542256","2988542271","IT" +"2988542272","2988542335","ES" +"2988542336","2988542367","DE" +"2988542368","2988542399","CZ" +"2988542400","2988542403","FI" +"2988542404","2988542407","PL" +"2988542408","2988542411","LT" +"2988542412","2988542415","PL" +"2988542416","2988542431","FR" +"2988542432","2988542439","PL" +"2988542440","2988542443","ES" +"2988542444","2988542447","FR" +"2988542448","2988542455","PL" +"2988542456","2988542459","FR" +"2988542460","2988542495","ES" +"2988542496","2988542527","FR" +"2988542528","2988542535","DE" +"2988542536","2988542539","NL" +"2988542540","2988542543","LT" +"2988542544","2988542551","DE" +"2988542552","2988542559","ES" +"2988542560","2988542591","FR" +"2988542592","2988542595","PT" +"2988542596","2988542599","FI" +"2988542600","2988542603","GB" +"2988542604","2988542611","FR" +"2988542612","2988542627","DE" +"2988542628","2988542631","FR" +"2988542632","2988542635","CZ" +"2988542636","2988542651","FR" +"2988542652","2988542655","PL" +"2988542656","2988542719","BE" +"2988542720","2988542783","CH" +"2988542784","2988542847","CZ" +"2988542848","2988542919","DE" +"2988542920","2988542923","PL" +"2988542924","2988542935","FR" +"2988542936","2988542939","IT" +"2988542940","2988542943","PL" +"2988542944","2988542959","DE" +"2988542960","2988542963","FR" +"2988542964","2988542967","CH" +"2988542968","2988542975","DE" +"2988542976","2988542983","CH" +"2988542984","2988542987","FR" +"2988542988","2988542991","PL" +"2988542992","2988543007","FR" +"2988543008","2988543011","PL" +"2988543012","2988543015","LT" +"2988543016","2988543039","DE" +"2988543040","2988543047","GB" +"2988543048","2988543051","FR" +"2988543052","2988543055","DE" +"2988543056","2988543067","FR" +"2988543068","2988543071","PL" +"2988543072","2988543103","FR" +"2988543104","2988543167","GB" +"2988543168","2988543171","PL" +"2988543172","2988543175","ES" +"2988543176","2988543179","GB" +"2988543180","2988543183","ES" +"2988543184","2988543191","CH" +"2988543192","2988543195","PL" +"2988543196","2988543203","GB" +"2988543204","2988543207","FR" +"2988543208","2988543211","PL" +"2988543212","2988543215","GB" +"2988543216","2988543231","FR" +"2988543232","2988543235","IT" +"2988543236","2988543243","FR" +"2988543244","2988543247","IT" +"2988543248","2988543251","FR" +"2988543252","2988543255","ES" +"2988543256","2988543263","PL" +"2988543264","2988543279","ES" +"2988543280","2988543295","DE" +"2988543296","2988543299","ES" +"2988543300","2988543303","FR" +"2988543304","2988543307","ES" +"2988543308","2988543311","PL" +"2988543312","2988543315","FR" +"2988543316","2988543319","IE" +"2988543320","2988543323","FI" +"2988543324","2988543327","PL" +"2988543328","2988543379","FR" +"2988543380","2988543383","PL" +"2988543384","2988543399","DE" +"2988543400","2988543403","GB" +"2988543404","2988543407","ES" +"2988543408","2988543411","PL" +"2988543412","2988543415","FR" +"2988543416","2988543419","ES" +"2988543420","2988543423","PL" +"2988543424","2988543431","DE" +"2988543432","2988543439","GB" +"2988543440","2988543447","FR" +"2988543448","2988543451","BE" +"2988543452","2988543455","PL" +"2988543456","2988543499","FR" +"2988543500","2988543503","PT" +"2988543504","2988543527","FR" +"2988543528","2988543535","GB" +"2988543536","2988543551","FR" +"2988543552","2988543555","CH" +"2988543556","2988543559","BE" +"2988543560","2988543563","PT" +"2988543564","2988543567","FR" +"2988543568","2988543579","PL" +"2988543580","2988543583","FR" +"2988543584","2988543615","DE" +"2988543616","2988543743","ES" +"2988543744","2988543935","FR" +"2988543936","2988543947","PL" +"2988543948","2988543959","BE" +"2988543960","2988543983","PL" +"2988543984","2988543999","PT" +"2988544000","2988544003","GB" +"2988544004","2988544007","PL" +"2988544008","2988544011","LT" +"2988544012","2988544015","PT" +"2988544016","2988544023","GB" +"2988544024","2988544031","DE" +"2988544032","2988544035","PL" +"2988544036","2988544039","FR" +"2988544040","2988544043","DE" +"2988544044","2988544047","GB" +"2988544048","2988544055","FR" +"2988544056","2988544063","FI" +"2988544064","2988544127","DE" +"2988544128","2988544159","GB" +"2988544160","2988544163","FR" +"2988544164","2988544167","PL" +"2988544168","2988544175","GB" +"2988544176","2988544179","CH" +"2988544180","2988544183","DE" +"2988544184","2988544187","PL" +"2988544188","2988544191","FR" +"2988544192","2988544227","ES" +"2988544228","2988544271","FR" +"2988544272","2988544275","PL" +"2988544276","2988544279","FR" +"2988544280","2988544283","GB" +"2988544284","2988544287","CZ" +"2988544288","2988544291","PL" +"2988544292","2988544295","GB" +"2988544296","2988544303","FR" +"2988544304","2988544307","IT" +"2988544308","2988544319","FR" +"2988544320","2988544323","PL" +"2988544324","2988544327","ES" +"2988544328","2988544331","PL" +"2988544332","2988544335","A1" +"2988544336","2988544351","FR" +"2988544352","2988544355","PL" +"2988544356","2988544359","DE" +"2988544360","2988544367","FR" +"2988544368","2988544371","ES" +"2988544372","2988544375","FR" +"2988544376","2988544383","ES" +"2988544384","2988544447","GB" +"2988544448","2988544463","FR" +"2988544464","2988544479","IT" +"2988544480","2988544511","PL" +"2988544512","2988544527","FR" +"2988544528","2988544535","ES" +"2988544536","2988544543","FR" +"2988544544","2988544639","ES" +"2988544640","2988544647","PL" +"2988544648","2988544655","FR" +"2988544656","2988544663","ES" +"2988544664","2988544667","DE" +"2988544668","2988544671","ES" +"2988544672","2988544687","GB" +"2988544688","2988544703","PL" +"2988544704","2988544719","GB" +"2988544720","2988544723","FR" +"2988544724","2988544727","DE" +"2988544728","2988544767","FR" +"2988544768","2988544775","ES" +"2988544776","2988544783","PT" +"2988544784","2988544787","DE" +"2988544788","2988544791","PL" +"2988544792","2988544799","PT" +"2988544800","2988544831","FI" +"2988544832","2988544863","FR" +"2988544864","2988544895","PL" +"2988544896","2988544927","FR" +"2988544928","2988544931","DE" +"2988544932","2988544935","FR" +"2988544936","2988544943","IT" +"2988544944","2988544951","PT" +"2988544952","2988544959","GB" +"2988544960","2988544979","ES" +"2988544980","2988544983","FR" +"2988544984","2988544995","PL" +"2988544996","2988544999","FR" +"2988545000","2988545007","DE" +"2988545008","2988545011","FR" +"2988545012","2988545019","DE" +"2988545020","2988545031","FR" +"2988545032","2988545039","PL" +"2988545040","2988545047","ES" +"2988545048","2988545051","FR" +"2988545052","2988545055","PL" +"2988545056","2988545063","FR" +"2988545064","2988545067","GB" +"2988545068","2988545071","ES" +"2988545072","2988545151","FR" +"2988545152","2988545167","PL" +"2988545168","2988545171","DE" +"2988545172","2988545175","FR" +"2988545176","2988545179","GB" +"2988545180","2988545183","PL" +"2988545184","2988545215","FR" +"2988545216","2988545223","PT" +"2988545224","2988545227","PL" +"2988545228","2988545247","FR" +"2988545248","2988545287","PL" +"2988545288","2988545291","FR" +"2988545292","2988545295","DE" +"2988545296","2988545331","FR" +"2988545332","2988545343","DE" +"2988545344","2988545367","FR" +"2988545368","2988545371","DE" +"2988545372","2988545375","GB" +"2988545376","2988545383","DE" +"2988545384","2988545387","ES" +"2988545388","2988545391","FR" +"2988545392","2988545395","DE" +"2988545396","2988545439","FR" +"2988545440","2988545443","DE" +"2988545444","2988545447","ES" +"2988545448","2988545455","PL" +"2988545456","2988545503","FR" +"2988545504","2988545511","DE" +"2988545512","2988545515","IT" +"2988545516","2988545523","PL" +"2988545524","2988545527","FR" +"2988545528","2988545531","PL" +"2988545532","2988545551","FR" +"2988545552","2988545555","ES" +"2988545556","2988545559","IT" +"2988545560","2988545563","FR" +"2988545564","2988545571","DE" +"2988545572","2988545579","FR" +"2988545580","2988545583","ES" +"2988545584","2988545599","FR" +"2988545600","2988545631","DE" +"2988545632","2988545663","FR" +"2988545664","2988545695","ES" +"2988545696","2988545727","DE" +"2988545728","2988545791","FR" +"2988545792","2988545807","DE" +"2988545808","2988545815","FR" +"2988545816","2988545823","NL" +"2988545824","2988545831","FR" +"2988545832","2988545835","GB" +"2988545836","2988545839","DE" +"2988545840","2988545855","FR" +"2988545856","2988545859","ES" +"2988545860","2988545863","FR" +"2988545864","2988545871","PL" +"2988545872","2988545919","FR" +"2988545920","2988545923","ES" +"2988545924","2988545927","PL" +"2988545928","2988545931","BE" +"2988545932","2988545935","DE" +"2988545936","2988545943","GB" +"2988545944","2988545947","CZ" +"2988545948","2988545967","FR" +"2988545968","2988545971","GB" +"2988545972","2988545975","DE" +"2988545976","2988545979","ES" +"2988545980","2988545983","DE" +"2988545984","2988545987","FR" +"2988545988","2988545991","PL" +"2988545992","2988545995","LT" +"2988545996","2988545999","FI" +"2988546000","2988546015","GB" +"2988546016","2988546031","FR" +"2988546032","2988546035","ES" +"2988546036","2988546039","BE" +"2988546040","2988546043","FR" +"2988546044","2988546047","ES" +"2988546048","2988546111","PL" +"2988546112","2988546115","ES" +"2988546116","2988546119","FR" +"2988546120","2988546123","IE" +"2988546124","2988546143","GB" +"2988546144","2988546159","PL" +"2988546160","2988546175","ES" +"2988546176","2988546239","GB" +"2988546240","2988546271","LT" +"2988546272","2988546279","IT" +"2988546280","2988546283","DE" +"2988546284","2988546287","BE" +"2988546288","2988546291","GB" +"2988546292","2988546295","ES" +"2988546296","2988546299","PL" +"2988546300","2988546307","ES" +"2988546308","2988546311","NL" +"2988546312","2988546319","FR" +"2988546320","2988546327","CH" +"2988546328","2988546335","ES" +"2988546336","2988546351","CH" +"2988546352","2988546367","ES" +"2988546368","2988546431","PT" +"2988546432","2988546439","FR" +"2988546440","2988546443","DE" +"2988546444","2988546447","FR" +"2988546448","2988546451","PL" +"2988546452","2988546463","ES" +"2988546464","2988546527","FR" +"2988546528","2988546535","BE" +"2988546536","2988546539","FR" +"2988546540","2988546543","DE" +"2988546544","2988546547","ES" +"2988546548","2988546551","FR" +"2988546552","2988546555","GB" +"2988546556","2988546559","BE" +"2988546560","2988546571","PL" +"2988546572","2988546575","DE" +"2988546576","2988546579","ES" +"2988546580","2988546583","GB" +"2988546584","2988546591","FR" +"2988546592","2988546599","DE" +"2988546600","2988546603","PT" +"2988546604","2988546607","GB" +"2988546608","2988546615","NL" +"2988546616","2988546619","FI" +"2988546620","2988546623","IT" +"2988546624","2988546687","FI" +"2988546688","2988546695","PL" +"2988546696","2988546699","FR" +"2988546700","2988546703","IT" +"2988546704","2988546719","BE" +"2988546720","2988546727","FR" +"2988546728","2988546731","PL" +"2988546732","2988546735","DE" +"2988546736","2988546815","FR" +"2988546816","2988546819","PT" +"2988546820","2988546823","NL" +"2988546824","2988546831","FR" +"2988546832","2988546835","DE" +"2988546836","2988546839","ES" +"2988546840","2988546847","IE" +"2988546848","2988546851","PT" +"2988546852","2988546855","IT" +"2988546856","2988546859","PL" +"2988546860","2988546863","IE" +"2988546864","2988546867","GB" +"2988546868","2988546871","FR" +"2988546872","2988546875","GB" +"2988546876","2988546879","IE" +"2988546880","2988546947","ES" +"2988546948","2988546951","DE" +"2988546952","2988546955","FR" +"2988546956","2988546959","DE" +"2988546960","2988546963","CH" +"2988546964","2988546967","IT" +"2988546968","2988546971","FR" +"2988546972","2988546975","BE" +"2988546976","2988546991","FI" +"2988546992","2988546995","DE" +"2988546996","2988546999","ES" +"2988547000","2988547003","IT" +"2988547004","2988547007","ES" +"2988547008","2988547015","FR" +"2988547016","2988547019","NL" +"2988547020","2988547023","ES" +"2988547024","2988547039","FR" +"2988547040","2988547047","ES" +"2988547048","2988547055","PL" +"2988547056","2988547059","IT" +"2988547060","2988547063","FR" +"2988547064","2988547067","GB" +"2988547068","2988547071","PL" +"2988547072","2988547087","GB" +"2988547088","2988547095","NL" +"2988547096","2988547099","DE" +"2988547100","2988547103","IE" +"2988547104","2988547111","DE" +"2988547112","2988547115","GB" +"2988547116","2988547123","FR" +"2988547124","2988547127","IT" +"2988547128","2988547135","FR" +"2988547136","2988547167","IT" +"2988547168","2988547183","IE" +"2988547184","2988547191","ES" +"2988547192","2988547195","DE" +"2988547196","2988547199","PL" +"2988547200","2988547207","IE" +"2988547208","2988547211","ES" +"2988547212","2988547215","GB" +"2988547216","2988547223","FR" +"2988547224","2988547227","GB" +"2988547228","2988547231","DE" +"2988547232","2988547239","FR" +"2988547240","2988547247","PL" +"2988547248","2988547255","NL" +"2988547256","2988547263","FR" +"2988547264","2988547267","GB" +"2988547268","2988547271","ES" +"2988547272","2988547311","FR" +"2988547312","2988547327","PL" +"2988547328","2988547423","FR" +"2988547424","2988547431","GB" +"2988547432","2988547435","ES" +"2988547436","2988547443","PL" +"2988547444","2988547447","DE" +"2988547448","2988547451","FR" +"2988547452","2988547455","PT" +"2988547456","2988547471","PL" +"2988547472","2988547475","LT" +"2988547476","2988547479","GB" +"2988547480","2988547487","FR" +"2988547488","2988547519","ES" +"2988547520","2988547523","NL" +"2988547524","2988547527","CZ" +"2988547528","2988547531","IT" +"2988547532","2988547535","ES" +"2988547536","2988547539","FR" +"2988547540","2988547543","DE" +"2988547544","2988547547","BE" +"2988547548","2988547567","FR" +"2988547568","2988547583","DE" +"2988547584","2988547599","ES" +"2988547600","2988547619","FR" +"2988547620","2988547623","PT" +"2988547624","2988547627","FR" +"2988547628","2988547631","PL" +"2988547632","2988547655","FR" +"2988547656","2988547663","PL" +"2988547664","2988547679","FR" +"2988547680","2988547683","PL" +"2988547684","2988547687","FR" +"2988547688","2988547691","PL" +"2988547692","2988547695","CZ" +"2988547696","2988547703","ES" +"2988547704","2988547711","IT" +"2988547712","2988547743","FR" +"2988547744","2988547751","PT" +"2988547752","2988547759","ES" +"2988547760","2988547775","FR" +"2988547776","2988547807","ES" +"2988547808","2988547815","GB" +"2988547816","2988547823","CH" +"2988547824","2988547831","FR" +"2988547832","2988547835","DE" +"2988547836","2988547839","BE" +"2988547840","2988547871","FR" +"2988547872","2988547903","GB" +"2988547904","2988547935","FR" +"2988547936","2988547967","LT" +"2988547968","2988547971","GB" +"2988547972","2988547975","DE" +"2988547976","2988547983","PL" +"2988547984","2988548015","FR" +"2988548016","2988548019","ES" +"2988548020","2988548023","LT" +"2988548024","2988548031","PT" +"2988548032","2988548047","FR" +"2988548048","2988548051","PL" +"2988548052","2988548055","ES" +"2988548056","2988548059","PL" +"2988548060","2988548063","IE" +"2988548064","2988550143","ES" +"2988550144","2988550159","GB" +"2988550160","2988550163","PT" +"2988550164","2988550167","GB" +"2988550168","2988550171","FR" +"2988550172","2988550175","CH" +"2988550176","2988550179","ES" +"2988550180","2988550191","FR" +"2988550192","2988550199","DE" +"2988550200","2988550203","FR" +"2988550204","2988550231","GB" +"2988550232","2988550239","PL" +"2988550240","2988550247","GB" +"2988550248","2988550251","DE" +"2988550252","2988550255","FR" +"2988550256","2988550259","ES" +"2988550260","2988550263","FR" +"2988550264","2988550271","NL" +"2988550272","2988550319","FR" +"2988550320","2988550335","PL" +"2988550336","2988550355","FR" +"2988550356","2988550363","GB" +"2988550364","2988550367","NL" +"2988550368","2988550399","IT" +"2988550400","2988550403","ES" +"2988550404","2988550407","NL" +"2988550408","2988550411","GB" +"2988550412","2988550415","FR" +"2988550416","2988550427","DE" +"2988550428","2988550431","FR" +"2988550432","2988550434","GB" +"2988550435","2988550435","A1" +"2988550436","2988550447","GB" +"2988550448","2988550451","CH" +"2988550452","2988550591","FR" +"2988550592","2988550595","DE" +"2988550596","2988550599","PT" +"2988550600","2988550603","PL" +"2988550604","2988550607","DE" +"2988550608","2988550615","CH" +"2988550616","2988550619","FR" +"2988550620","2988550623","LT" +"2988550624","2988550627","FR" +"2988550628","2988550631","CH" +"2988550632","2988550643","FR" +"2988550644","2988550647","ES" +"2988550648","2988550655","PL" +"2988550656","2988550911","DE" +"2988550912","2988551167","CH" +"2988551168","2988551171","PL" +"2988551172","2988551175","FI" +"2988551176","2988551179","ES" +"2988551180","2988551183","FR" +"2988551184","2988551199","ES" +"2988551200","2988551215","IT" +"2988551216","2988551223","NL" +"2988551224","2988551295","FR" +"2988551296","2988551299","PL" +"2988551300","2988551303","FR" +"2988551304","2988551307","NL" +"2988551308","2988551319","FR" +"2988551320","2988551323","PL" +"2988551324","2988551327","GB" +"2988551328","2988551335","NL" +"2988551336","2988551343","FR" +"2988551344","2988551359","DE" +"2988551360","2988551423","FR" +"2988551424","2988551427","LT" +"2988551428","2988551439","FR" +"2988551440","2988551443","GB" +"2988551444","2988551447","FR" +"2988551448","2988551451","ES" +"2988551452","2988551455","FR" +"2988551456","2988551471","IE" +"2988551472","2988551475","FR" +"2988551476","2988551487","IE" +"2988551488","2988551503","PL" +"2988551504","2988551519","FR" +"2988551520","2988551535","ES" +"2988551536","2988551543","FR" +"2988551544","2988551547","GB" +"2988551548","2988551551","DE" +"2988551552","2988551567","PL" +"2988551568","2988551583","IE" +"2988551584","2988551603","FR" +"2988551604","2988551607","NL" +"2988551608","2988551615","GB" +"2988551616","2988551631","ES" +"2988551632","2988551639","FR" +"2988551640","2988551643","GB" +"2988551644","2988551647","FR" +"2988551648","2988551651","PL" +"2988551652","2988551655","GB" +"2988551656","2988551663","ES" +"2988551664","2988551775","FR" +"2988551776","2988551807","PL" +"2988551808","2988551923","FR" +"2988551924","2988551927","ES" +"2988551928","2988551931","PL" +"2988551932","2988551935","FR" +"2988551936","2988552191","GB" +"2988552192","2988552319","NL" +"2988552320","2988552447","FR" +"2988552448","2988552479","GB" +"2988552480","2988552511","CH" +"2988552512","2988552551","BE" +"2988552552","2988552559","IE" +"2988552560","2988552563","FR" +"2988552564","2988552567","IE" +"2988552568","2988552575","FR" +"2988552576","2988552579","CH" +"2988552580","2988552583","DE" +"2988552584","2988552587","FR" +"2988552588","2988552591","PL" +"2988552592","2988552599","NL" +"2988552600","2988552603","FR" +"2988552604","2988552607","DE" +"2988552608","2988552611","GB" +"2988552612","2988552615","FR" +"2988552616","2988552619","GB" +"2988552620","2988552623","PL" +"2988552624","2988552627","FR" +"2988552628","2988552631","CZ" +"2988552632","2988552635","IE" +"2988552636","2988552639","FR" +"2988552640","2988552647","PL" +"2988552648","2988552651","PT" +"2988552652","2988552655","FR" +"2988552656","2988552659","CH" +"2988552660","2988552663","DE" +"2988552664","2988552703","FR" +"2988552704","2988552711","ES" +"2988552712","2988552715","PT" +"2988552716","2988552719","FR" +"2988552720","2988552735","DE" +"2988552736","2988552751","FR" +"2988552752","2988552767","ES" +"2988552768","2988552771","DE" +"2988552772","2988552779","FR" +"2988552780","2988552783","PL" +"2988552784","2988552787","GB" +"2988552788","2988552795","FR" +"2988552796","2988552799","PL" +"2988552800","2988552831","ES" +"2988552832","2988552839","BE" +"2988552840","2988552847","DE" +"2988552848","2988552863","FR" +"2988552864","2988552879","NL" +"2988552880","2988552887","FR" +"2988552888","2988552891","PL" +"2988552892","2988552895","FI" +"2988552896","2988552911","CZ" +"2988552912","2988552915","FR" +"2988552916","2988552919","DE" +"2988552920","2988552959","FR" +"2988552960","2988552975","ES" +"2988552976","2988552991","FR" +"2988552992","2988552995","ES" +"2988552996","2988552999","CH" +"2988553000","2988553003","FR" +"2988553004","2988553007","NL" +"2988553008","2988553023","IE" +"2988553024","2988553087","LT" +"2988553088","2988553119","PL" +"2988553120","2988553135","ES" +"2988553136","2988553151","FR" +"2988553152","2988553167","GB" +"2988553168","2988553175","FR" +"2988553176","2988553179","IT" +"2988553180","2988553215","FR" +"2988553216","2988553219","GB" +"2988553220","2988553223","IT" +"2988553224","2988553227","GB" +"2988553228","2988553231","DE" +"2988553232","2988553235","ES" +"2988553236","2988553239","IE" +"2988553240","2988553255","FR" +"2988553256","2988553263","CH" +"2988553264","2988553279","FR" +"2988553280","2988553295","PL" +"2988553296","2988553299","FR" +"2988553300","2988553303","PL" +"2988553304","2988553311","BE" +"2988553312","2988553315","FR" +"2988553316","2988553319","PL" +"2988553320","2988553323","CH" +"2988553324","2988553327","NL" +"2988553328","2988553343","GB" +"2988553344","2988553359","IE" +"2988553360","2988553367","FR" +"2988553368","2988553375","PL" +"2988553376","2988553399","FR" +"2988553400","2988553403","ES" +"2988553404","2988553407","GB" +"2988553408","2988553431","IE" +"2988553432","2988553471","FR" +"2988553472","2988553503","NL" +"2988553504","2988553507","ES" +"2988553508","2988553519","FR" +"2988553520","2988553527","GB" +"2988553528","2988553531","CH" +"2988553532","2988553551","FR" +"2988553552","2988553567","PL" +"2988553568","2988553583","PT" +"2988553584","2988553599","IE" +"2988553600","2988553611","GB" +"2988553612","2988553631","FR" +"2988553632","2988553639","PL" +"2988553640","2988553643","IE" +"2988553644","2988553647","FR" +"2988553648","2988553651","NL" +"2988553652","2988553655","PL" +"2988553656","2988553663","FR" +"2988553664","2988553679","LT" +"2988553680","2988553727","FR" +"2988553728","2988553735","PL" +"2988553736","2988553739","DE" +"2988553740","2988553743","PL" +"2988553744","2988553747","FR" +"2988553748","2988553751","LT" +"2988553752","2988553755","PL" +"2988553756","2988553759","ES" +"2988553760","2988553791","FR" +"2988553792","2988553823","IE" +"2988553824","2988553855","IT" +"2988553856","2988553919","BE" +"2988553920","2988553923","GB" +"2988553924","2988553927","ES" +"2988553928","2988553931","FR" +"2988553932","2988553935","PL" +"2988553936","2988553951","FR" +"2988553952","2988553955","ES" +"2988553956","2988553959","PL" +"2988553960","2988553967","FR" +"2988553968","2988553971","PL" +"2988553972","2988553975","FR" +"2988553976","2988554015","DE" +"2988554016","2988554035","FR" +"2988554036","2988554039","PL" +"2988554040","2988554043","BE" +"2988554044","2988554075","FR" +"2988554076","2988554079","CH" +"2988554080","2988554127","FR" +"2988554128","2988554131","GB" +"2988554132","2988554135","FR" +"2988554136","2988554139","DE" +"2988554140","2988554143","PL" +"2988554144","2988554167","FR" +"2988554168","2988554171","PL" +"2988554172","2988554175","DE" +"2988554176","2988554183","FR" +"2988554184","2988554191","CH" +"2988554192","2988554195","FR" +"2988554196","2988554199","DE" +"2988554200","2988554223","FR" +"2988554224","2988554239","IT" +"2988554240","2988554495","ES" +"2988554496","2988554499","FR" +"2988554500","2988554503","GB" +"2988554504","2988554507","FI" +"2988554508","2988554511","PL" +"2988554512","2988554519","BE" +"2988554520","2988554523","DE" +"2988554524","2988554527","FR" +"2988554528","2988554535","ES" +"2988554536","2988554539","DE" +"2988554540","2988554543","GB" +"2988554544","2988554555","FR" +"2988554556","2988554559","DE" +"2988554560","2988554623","IT" +"2988554624","2988554687","PL" +"2988554688","2988554751","FR" +"2988554752","2988554783","CH" +"2988554784","2988554787","DE" +"2988554788","2988554791","PL" +"2988554792","2988554795","FR" +"2988554796","2988554799","IT" +"2988554800","2988554807","GB" +"2988554808","2988554815","FR" +"2988554816","2988554879","GB" +"2988554880","2988554919","FR" +"2988554920","2988554923","PL" +"2988554924","2988554927","PT" +"2988554928","2988554931","DE" +"2988554932","2988554935","ES" +"2988554936","2988554943","FR" +"2988554944","2988555007","GB" +"2988555008","2988555055","FR" +"2988555056","2988555071","GB" +"2988555072","2988555075","PT" +"2988555076","2988555079","DE" +"2988555080","2988555083","IT" +"2988555084","2988555087","LT" +"2988555088","2988555091","FI" +"2988555092","2988555099","FR" +"2988555100","2988555103","IT" +"2988555104","2988555107","GB" +"2988555108","2988555111","IT" +"2988555112","2988555115","FR" +"2988555116","2988555119","PT" +"2988555120","2988555123","DE" +"2988555124","2988555131","ES" +"2988555132","2988555135","GB" +"2988555136","2988555151","FR" +"2988555152","2988555159","NL" +"2988555160","2988555163","PL" +"2988555164","2988555167","IE" +"2988555168","2988555183","DE" +"2988555184","2988555187","GB" +"2988555188","2988555191","NL" +"2988555192","2988555199","PL" +"2988555200","2988555203","NL" +"2988555204","2988555207","FR" +"2988555208","2988555211","NL" +"2988555212","2988555215","DE" +"2988555216","2988555519","FR" +"2988555520","2988555527","IE" +"2988555528","2988555531","ES" +"2988555532","2988555535","FR" +"2988555536","2988555543","ES" +"2988555544","2988555559","FR" +"2988555560","2988555563","DE" +"2988555564","2988555647","FR" +"2988555648","2988555711","GB" +"2988555712","2988555715","PL" +"2988555716","2988555719","ES" +"2988555720","2988555727","FR" +"2988555728","2988555731","GB" +"2988555732","2988555735","PL" +"2988555736","2988555743","ES" +"2988555744","2988556031","FR" +"2988556032","2988556095","DE" +"2988556096","2988556103","FR" +"2988556104","2988556107","DE" +"2988556108","2988556111","FR" +"2988556112","2988556115","PL" +"2988556116","2988556119","NL" +"2988556120","2988556123","FR" +"2988556124","2988556127","NL" +"2988556128","2988556159","FR" +"2988556160","2988556175","NL" +"2988556176","2988556179","DE" +"2988556180","2988556183","IT" +"2988556184","2988556187","GB" +"2988556188","2988556191","ES" +"2988556192","2988556195","NL" +"2988556196","2988556199","FR" +"2988556200","2988556203","CZ" +"2988556204","2988556207","FI" +"2988556208","2988556211","PT" +"2988556212","2988556215","FR" +"2988556216","2988556219","LT" +"2988556220","2988556223","FI" +"2988556224","2988556231","FR" +"2988556232","2988556235","DE" +"2988556236","2988556239","PL" +"2988556240","2988556251","FR" +"2988556252","2988556255","CZ" +"2988556256","2988556259","ES" +"2988556260","2988556271","GB" +"2988556272","2988556275","FR" +"2988556276","2988556279","LT" +"2988556280","2988556283","PL" +"2988556284","2988556287","GB" +"2988556288","2988556295","PL" +"2988556296","2988556303","FR" +"2988556304","2988556311","PL" +"2988556312","2988556315","FR" +"2988556316","2988556319","DE" +"2988556320","2988556351","GB" +"2988556352","2988556355","DE" +"2988556356","2988556359","PL" +"2988556360","2988556383","FR" +"2988556384","2988556415","DE" +"2988556416","2988556419","IT" +"2988556420","2988556423","FR" +"2988556424","2988556427","BE" +"2988556428","2988556431","ES" +"2988556432","2988556435","GB" +"2988556436","2988556439","FI" +"2988556440","2988556443","FR" +"2988556444","2988556447","PL" +"2988556448","2988556451","NL" +"2988556452","2988556463","FR" +"2988556464","2988556479","GB" +"2988556480","2988556487","IT" +"2988556488","2988556491","PL" +"2988556492","2988556495","DE" +"2988556496","2988556527","FR" +"2988556528","2988556535","PL" +"2988556536","2988556539","FR" +"2988556540","2988556543","DE" +"2988556544","2988556831","FR" +"2988556832","2988556839","DE" +"2988556840","2988556847","FR" +"2988556848","2988556855","ES" +"2988556856","2988556863","GB" +"2988556864","2988556871","PT" +"2988556872","2988556875","BE" +"2988556876","2988556879","FR" +"2988556880","2988556883","ES" +"2988556884","2988556887","DE" +"2988556888","2988556891","BE" +"2988556892","2988556895","FR" +"2988556896","2988556911","PL" +"2988556912","2988556919","NL" +"2988556920","2988556927","PL" +"2988556928","2988556943","FR" +"2988556944","2988556963","PL" +"2988556964","2988556967","FR" +"2988556968","2988556975","BE" +"2988556976","2988556979","FI" +"2988556980","2988556999","FR" +"2988557000","2988557003","BE" +"2988557004","2988557007","ES" +"2988557008","2988557023","FR" +"2988557024","2988557039","IE" +"2988557040","2988557043","PT" +"2988557044","2988557047","BE" +"2988557048","2988557055","PL" +"2988557056","2988557059","ES" +"2988557060","2988557063","FR" +"2988557064","2988557067","ES" +"2988557068","2988557071","PL" +"2988557072","2988557079","FR" +"2988557080","2988557087","FI" +"2988557088","2988557095","CH" +"2988557096","2988557103","ES" +"2988557104","2988557111","FR" +"2988557112","2988557115","LT" +"2988557116","2988557151","NL" +"2988557152","2988557215","FR" +"2988557216","2988557247","BE" +"2988557248","2988557251","FR" +"2988557252","2988557255","ES" +"2988557256","2988557259","FR" +"2988557260","2988557263","DE" +"2988557264","2988557279","GB" +"2988557280","2988557287","ES" +"2988557288","2988557291","PL" +"2988557292","2988557295","DE" +"2988557296","2988557299","BE" +"2988557300","2988557303","PL" +"2988557304","2988557311","CZ" +"2988557312","2988557327","DE" +"2988557328","2988557343","ES" +"2988557344","2988557379","FR" +"2988557380","2988557383","ES" +"2988557384","2988557387","GB" +"2988557388","2988557391","CZ" +"2988557392","2988557399","PL" +"2988557400","2988557403","ES" +"2988557404","2988557407","IT" +"2988557408","2988557427","ES" +"2988557428","2988557431","DE" +"2988557432","2988557439","PL" +"2988557440","2988557471","GB" +"2988557472","2988557487","PL" +"2988557488","2988557491","FI" +"2988557492","2988557495","FR" +"2988557496","2988557503","PL" +"2988557504","2988557535","FR" +"2988557536","2988557539","PL" +"2988557540","2988557599","FR" +"2988557600","2988557631","DE" +"2988557632","2988557635","GB" +"2988557636","2988557639","PT" +"2988557640","2988557643","IE" +"2988557644","2988557647","GB" +"2988557648","2988557651","NL" +"2988557652","2988557663","FR" +"2988557664","2988557695","PL" +"2988557696","2988557727","FR" +"2988557728","2988557759","PL" +"2988557760","2988557763","DE" +"2988557764","2988557767","ES" +"2988557768","2988557771","PL" +"2988557772","2988557775","FR" +"2988557776","2988557791","BE" +"2988557792","2988557951","FR" +"2988557952","2988557983","LT" +"2988557984","2988557999","FR" +"2988558000","2988558015","IE" +"2988558016","2988558047","FR" +"2988558048","2988558063","PL" +"2988558064","2988558067","DE" +"2988558068","2988558071","FI" +"2988558072","2988558075","DE" +"2988558076","2988558079","PL" +"2988558080","2988558083","FR" +"2988558084","2988558087","PL" +"2988558088","2988558095","FR" +"2988558096","2988558103","PL" +"2988558104","2988558107","NL" +"2988558108","2988558111","IT" +"2988558112","2988558115","IE" +"2988558116","2988558123","GB" +"2988558124","2988558127","FR" +"2988558128","2988558131","DE" +"2988558132","2988558135","PL" +"2988558136","2988558139","GB" +"2988558140","2988558143","DE" +"2988558144","2988558175","IT" +"2988558176","2988558203","FR" +"2988558204","2988558207","DE" +"2988558208","2988558271","ES" +"2988558272","2988558335","FI" +"2988558336","2988558399","IE" +"2988558400","2988558463","LT" +"2988558464","2988558527","NL" +"2988558528","2988558591","PL" +"2988558592","2988558655","GB" +"2988558656","2988558719","FR" +"2988558720","2988558727","PL" +"2988558728","2988558731","IT" +"2988558732","2988558735","PT" +"2988558736","2988558747","FR" +"2988558748","2988558751","GB" +"2988558752","2988558783","CH" +"2988558784","2988558799","FR" +"2988558800","2988558807","PT" +"2988558808","2988558831","FR" +"2988558832","2988558847","IT" +"2988558848","2988558883","FR" +"2988558884","2988558887","BE" +"2988558888","2988558891","GB" +"2988558892","2988558895","NL" +"2988558896","2988558899","CH" +"2988558900","2988558903","FR" +"2988558904","2988558907","NL" +"2988558908","2988558911","PL" +"2988558912","2988558927","LT" +"2988558928","2988558935","GB" +"2988558936","2988558939","DE" +"2988558940","2988558943","GB" +"2988558944","2988558975","FR" +"2988558976","2988559007","GB" +"2988559008","2988559011","BE" +"2988559012","2988559015","PL" +"2988559016","2988559055","FR" +"2988559056","2988559059","NL" +"2988559060","2988559063","LT" +"2988559064","2988559071","FR" +"2988559072","2988559103","ES" +"2988559104","2988559135","PL" +"2988559136","2988559139","DE" +"2988559140","2988559151","PL" +"2988559152","2988559263","FR" +"2988559264","2988559295","LT" +"2988559296","2988559359","PL" +"2988559360","2988559631","FR" +"2988559632","2988559663","IE" +"2988559664","2988559679","ES" +"2988559680","2988559691","FR" +"2988559692","2988559695","PL" +"2988559696","2988559703","FR" +"2988559704","2988559707","DE" +"2988559708","2988559711","PL" +"2988559712","2988559723","FR" +"2988559724","2988559727","IT" +"2988559728","2988559731","DE" +"2988559732","2988559735","PL" +"2988559736","2988559743","GB" +"2988559744","2988559807","FR" +"2988559808","2988559871","ES" +"2988559872","2988560383","IT" +"2988560384","2988560387","FR" +"2988560388","2988560391","ES" +"2988560392","2988560395","GB" +"2988560396","2988560399","FR" +"2988560400","2988560415","IE" +"2988560416","2988560439","FR" +"2988560440","2988560443","DE" +"2988560444","2988560447","PL" +"2988560448","2988560451","DE" +"2988560452","2988560455","PL" +"2988560456","2988560479","FR" +"2988560480","2988560515","ES" +"2988560516","2988560519","FI" +"2988560520","2988560523","DE" +"2988560524","2988560527","BE" +"2988560528","2988560535","ES" +"2988560536","2988560543","IE" +"2988560544","2988560591","GB" +"2988560592","2988560595","NL" +"2988560596","2988560599","IT" +"2988560600","2988560603","PL" +"2988560604","2988560623","FR" +"2988560624","2988560627","PL" +"2988560628","2988560639","FR" +"2988560640","2988560703","GB" +"2988560704","2988560711","DE" +"2988560712","2988560719","PL" +"2988560720","2988560735","FR" +"2988560736","2988560751","DE" +"2988560752","2988560759","GB" +"2988560760","2988560767","FI" +"2988560768","2988560783","FR" +"2988560784","2988560799","NL" +"2988560800","2988560815","DE" +"2988560816","2988560831","FR" +"2988560832","2988560863","GB" +"2988560864","2988560871","PL" +"2988560872","2988560895","GB" +"2988560896","2988560919","FR" +"2988560920","2988560923","DE" +"2988560924","2988560935","FR" +"2988560936","2988560939","CZ" +"2988560940","2988560951","FR" +"2988560952","2988560955","DE" +"2988560956","2988560959","PL" +"2988560960","2988560975","FR" +"2988560976","2988560991","ES" +"2988560992","2988560995","FR" +"2988560996","2988560999","DE" +"2988561000","2988561023","FR" +"2988561024","2988561027","BE" +"2988561028","2988561031","FR" +"2988561032","2988561039","ES" +"2988561040","2988561043","GB" +"2988561044","2988561047","DE" +"2988561048","2988561051","PL" +"2988561052","2988561055","GB" +"2988561056","2988561059","FR" +"2988561060","2988561071","PL" +"2988561072","2988561075","ES" +"2988561076","2988561079","LT" +"2988561080","2988561083","PL" +"2988561084","2988561087","GB" +"2988561088","2988561095","FR" +"2988561096","2988561099","PL" +"2988561100","2988561103","CZ" +"2988561104","2988561119","BE" +"2988561120","2988561171","FR" +"2988561172","2988561175","PL" +"2988561176","2988561179","ES" +"2988561180","2988561183","PL" +"2988561184","2988561187","GB" +"2988561188","2988561191","FR" +"2988561192","2988561195","CZ" +"2988561196","2988561199","LT" +"2988561200","2988561203","PL" +"2988561204","2988561207","GB" +"2988561208","2988561215","PL" +"2988561216","2988561231","FR" +"2988561232","2988561235","PT" +"2988561236","2988561239","GB" +"2988561240","2988561243","BE" +"2988561244","2988561247","PL" +"2988561248","2988561251","FI" +"2988561252","2988561255","CH" +"2988561256","2988561259","ES" +"2988561260","2988561283","FR" +"2988561284","2988561287","NL" +"2988561288","2988561291","ES" +"2988561292","2988561295","PT" +"2988561296","2988561303","PL" +"2988561304","2988561343","FR" +"2988561344","2988561375","PL" +"2988561376","2988561391","FR" +"2988561392","2988561403","ES" +"2988561404","2988561407","LT" +"2988561408","2988561539","FR" +"2988561540","2988561543","PL" +"2988561544","2988561547","NL" +"2988561548","2988561551","FR" +"2988561552","2988561567","DE" +"2988561568","2988561571","ES" +"2988561572","2988561583","FR" +"2988561584","2988561591","GB" +"2988561592","2988561595","FR" +"2988561596","2988561599","PL" +"2988561600","2988561631","NL" +"2988561632","2988561663","PL" +"2988561664","2988561667","GB" +"2988561668","2988561671","PL" +"2988561672","2988561675","NL" +"2988561676","2988561679","FI" +"2988561680","2988561683","FR" +"2988561684","2988561687","CZ" +"2988561688","2988561691","DE" +"2988561692","2988561695","LT" +"2988561696","2988561727","GB" +"2988561728","2988561743","PL" +"2988561744","2988561747","FR" +"2988561748","2988561751","PL" +"2988561752","2988561759","FR" +"2988561760","2988561763","PL" +"2988561764","2988561767","PT" +"2988561768","2988561775","PL" +"2988561776","2988561791","FR" +"2988561792","2988561823","PL" +"2988561824","2988561843","FR" +"2988561844","2988561847","IT" +"2988561848","2988561855","FR" +"2988561856","2988561871","IE" +"2988561872","2988561875","CH" +"2988561876","2988561879","A1" +"2988561880","2988561887","FR" +"2988561888","2988561903","PL" +"2988561904","2988561983","FR" +"2988561984","2988562015","DE" +"2988562016","2988562027","ES" +"2988562028","2988562031","LT" +"2988562032","2988562047","PL" +"2988562048","2988562079","DE" +"2988562080","2988562095","ES" +"2988562096","2988562111","IE" +"2988562112","2988562115","NL" +"2988562116","2988562127","FR" +"2988562128","2988562143","PL" +"2988562144","2988562151","FR" +"2988562152","2988562163","PL" +"2988562164","2988562167","DE" +"2988562168","2988562175","IT" +"2988562176","2988562431","NL" +"2988562432","2988562567","FR" +"2988562568","2988562583","CH" +"2988562584","2988562587","FR" +"2988562588","2988562591","IT" +"2988562592","2988562599","GB" +"2988562600","2988562607","FR" +"2988562608","2988562611","PT" +"2988562612","2988562623","PL" +"2988562624","2988562687","FI" +"2988562688","2988562703","GB" +"2988562704","2988562707","PL" +"2988562708","2988562711","DE" +"2988562712","2988562719","FR" +"2988562720","2988562815","BE" +"2988562816","2988562823","PL" +"2988562824","2988562831","PT" +"2988562832","2988562835","FR" +"2988562836","2988562839","NL" +"2988562840","2988562843","LT" +"2988562844","2988562847","PL" +"2988562848","2988562863","GB" +"2988562864","2988562911","FR" +"2988562912","2988562943","PL" +"2988562944","2988563011","FR" +"2988563012","2988563015","PT" +"2988563016","2988563023","GB" +"2988563024","2988563043","FR" +"2988563044","2988563047","ES" +"2988563048","2988563055","FR" +"2988563056","2988563059","NL" +"2988563060","2988563063","CH" +"2988563064","2988563067","FI" +"2988563068","2988563075","PT" +"2988563076","2988563079","GB" +"2988563080","2988563083","DE" +"2988563084","2988563087","LT" +"2988563088","2988563103","PL" +"2988563104","2988563135","FR" +"2988563136","2988563151","PL" +"2988563152","2988563183","FR" +"2988563184","2988563187","CZ" +"2988563188","2988563191","PL" +"2988563192","2988563199","FR" +"2988563200","2988563455","IE" +"2988563456","2988563487","FR" +"2988563488","2988563499","GB" +"2988563500","2988563503","FR" +"2988563504","2988563519","PL" +"2988563520","2988563523","CZ" +"2988563524","2988563527","FI" +"2988563528","2988563535","PL" +"2988563536","2988563555","FR" +"2988563556","2988563559","BE" +"2988563560","2988563567","FR" +"2988563568","2988563571","NL" +"2988563572","2988563583","GB" +"2988563584","2988563591","PT" +"2988563592","2988563599","GB" +"2988563600","2988563607","ES" +"2988563608","2988563615","DE" +"2988563616","2988563647","FR" +"2988563648","2988563663","LT" +"2988563664","2988563667","FR" +"2988563668","2988563671","PL" +"2988563672","2988563675","FR" +"2988563676","2988563679","NL" +"2988563680","2988563967","FR" +"2988563968","2988563999","BE" +"2988564000","2988564015","IE" +"2988564016","2988564019","FR" +"2988564020","2988564023","PL" +"2988564024","2988564031","FR" +"2988564032","2988564063","BE" +"2988564064","2988564143","FR" +"2988564144","2988564159","FI" +"2988564160","2988564175","FR" +"2988564176","2988564179","PL" +"2988564180","2988564183","GB" +"2988564184","2988564187","PL" +"2988564188","2988564191","GB" +"2988564192","2988564195","ES" +"2988564196","2988564199","LT" +"2988564200","2988564203","DE" +"2988564204","2988564215","FR" +"2988564216","2988564219","GB" +"2988564220","2988564223","IT" +"2988564224","2988564275","FR" +"2988564276","2988564279","BE" +"2988564280","2988564287","ES" +"2988564288","2988564303","FR" +"2988564304","2988564307","IT" +"2988564308","2988564311","PL" +"2988564312","2988564319","ES" +"2988564320","2988564351","FR" +"2988564352","2988564359","DE" +"2988564360","2988564367","GB" +"2988564368","2988564383","FR" +"2988564384","2988564387","IE" +"2988564388","2988564391","GB" +"2988564392","2988564395","NL" +"2988564396","2988564399","CH" +"2988564400","2988564403","DE" +"2988564404","2988564407","ES" +"2988564408","2988564471","FR" +"2988564472","2988564479","GB" +"2988564480","2988572671","FR" +"2988572672","2988703743","RU" +"2988703744","2988834815","PL" +"2988834816","2988965887","CH" +"2988965888","2989096959","SK" +"2989096960","2989228031","PL" +"2989228032","2989490175","RU" +"2989490176","2989555711","HU" +"2989555712","2989621247","RU" +"2989621248","2989752319","BE" +"2989752320","2989817855","SY" +"2989817856","2989883391","KW" +"2989883392","2989948927","UA" +"2989948928","2990014463","FI" +"2990014464","2990079999","PL" +"2990080000","2990145535","RU" +"2990145536","2990211071","SI" +"2990211072","2990276607","GR" +"2990276608","2990342143","ES" +"2990342144","2990407679","KW" +"2990407680","2990473215","RU" +"2990473216","2990500113","DE" +"2990500114","2990500115","PL" +"2990500116","2990515967","DE" +"2990515968","2990515983","IT" +"2990515984","2990517655","DE" +"2990517656","2990517663","IT" +"2990517664","2990518015","DE" +"2990518016","2990518079","IT" +"2990518080","2990518815","DE" +"2990518816","2990518823","IT" +"2990518824","2990528031","DE" +"2990528032","2990528039","IT" +"2990528040","2990528703","DE" +"2990528704","2990528735","RS" +"2990528736","2990534655","DE" +"2990534656","2990534687","EG" +"2990534688","2990535935","DE" +"2990535936","2990535967","PL" +"2990535968","2990538751","DE" +"2990538752","2991063039","RU" +"2991063040","2991067135","SE" +"2991067136","2991071231","DK" +"2991071232","2991079423","NO" +"2991079424","2991095807","RU" +"2991095808","2991112191","AM" +"2991112192","2991128575","CZ" +"2991128576","2991144959","PL" +"2991144960","2991161343","SA" +"2991161344","2991177727","FR" +"2991177728","2991178751","A1" +"2991178752","2991179263","SE" +"2991179264","2991179327","A1" +"2991179328","2991182591","SE" +"2991182592","2991182847","A1" +"2991182848","2991183871","SE" +"2991183872","2991185919","A1" +"2991185920","2991185951","GB" +"2991185952","2991185967","NL" +"2991185968","2991185983","DE" +"2991185984","2991185999","DK" +"2991186000","2991186015","ES" +"2991186016","2991186019","FR" +"2991186020","2991186175","SE" +"2991186176","2991186207","GB" +"2991186208","2991186223","NL" +"2991186224","2991186239","DE" +"2991186240","2991186255","DK" +"2991186256","2991186271","ES" +"2991186272","2991186275","FR" +"2991186276","2991186431","SE" +"2991186432","2991186463","GB" +"2991186464","2991186479","NL" +"2991186480","2991186495","DE" +"2991186496","2991186511","DK" +"2991186512","2991186527","ES" +"2991186528","2991186531","FR" +"2991186532","2991186687","SE" +"2991186688","2991186719","GB" +"2991186720","2991186735","NL" +"2991186736","2991186751","DE" +"2991186752","2991186767","DK" +"2991186768","2991186783","ES" +"2991186784","2991186787","FR" +"2991186788","2991186943","SE" +"2991186944","2991186975","GB" +"2991186976","2991186991","NL" +"2991186992","2991187007","DE" +"2991187008","2991187023","DK" +"2991187024","2991187039","ES" +"2991187040","2991187043","FR" +"2991187044","2991187199","SE" +"2991187200","2991187231","GB" +"2991187232","2991187247","NL" +"2991187248","2991187263","DE" +"2991187264","2991187279","DK" +"2991187280","2991187295","ES" +"2991187296","2991187299","FR" +"2991187300","2991187455","SE" +"2991187456","2991187487","GB" +"2991187488","2991187503","NL" +"2991187504","2991187519","DE" +"2991187520","2991187535","DK" +"2991187536","2991187551","ES" +"2991187552","2991187555","FR" +"2991187556","2991187711","SE" +"2991187712","2991187743","GB" +"2991187744","2991187759","NL" +"2991187760","2991187775","DE" +"2991187776","2991187791","DK" +"2991187792","2991187807","ES" +"2991187808","2991187811","FR" +"2991187812","2991187967","SE" +"2991187968","2991187999","GB" +"2991188000","2991188015","NL" +"2991188016","2991188031","DE" +"2991188032","2991188047","DK" +"2991188048","2991188063","ES" +"2991188064","2991188067","FR" +"2991188068","2991188223","SE" +"2991188224","2991188255","GB" +"2991188256","2991188271","NL" +"2991188272","2991188287","DE" +"2991188288","2991188303","DK" +"2991188304","2991188319","ES" +"2991188320","2991188323","FR" +"2991188324","2991188479","SE" +"2991188480","2991188511","GB" +"2991188512","2991188527","NL" +"2991188528","2991188543","DE" +"2991188544","2991188559","DK" +"2991188560","2991188575","ES" +"2991188576","2991188579","FR" +"2991188580","2991188735","SE" +"2991188736","2991188767","GB" +"2991188768","2991188783","NL" +"2991188784","2991188799","DE" +"2991188800","2991188815","DK" +"2991188816","2991188831","ES" +"2991188832","2991188835","FR" +"2991188836","2991188991","SE" +"2991188992","2991189023","GB" +"2991189024","2991189039","NL" +"2991189040","2991189055","DE" +"2991189056","2991189071","DK" +"2991189072","2991189087","ES" +"2991189088","2991189091","FR" +"2991189092","2991189247","SE" +"2991189248","2991189279","GB" +"2991189280","2991189295","NL" +"2991189296","2991189311","DE" +"2991189312","2991189327","DK" +"2991189328","2991189343","ES" +"2991189344","2991189347","FR" +"2991189348","2991189503","SE" +"2991189504","2991189535","GB" +"2991189536","2991189551","NL" +"2991189552","2991189567","DE" +"2991189568","2991189583","DK" +"2991189584","2991189599","ES" +"2991189600","2991189603","FR" +"2991189604","2991189759","SE" +"2991189760","2991189791","GB" +"2991189792","2991189807","NL" +"2991189808","2991189823","DE" +"2991189824","2991189839","DK" +"2991189840","2991189855","ES" +"2991189856","2991189859","FR" +"2991189860","2991190015","SE" +"2991190016","2991190047","GB" +"2991190048","2991190063","NL" +"2991190064","2991190079","DE" +"2991190080","2991190095","DK" +"2991190096","2991190111","ES" +"2991190112","2991190115","FR" +"2991190116","2991190271","SE" +"2991190272","2991190303","GB" +"2991190304","2991190319","NL" +"2991190320","2991190335","DE" +"2991190336","2991190351","DK" +"2991190352","2991190367","ES" +"2991190368","2991190371","FR" +"2991190372","2991190527","SE" +"2991190528","2991190559","GB" +"2991190560","2991190575","NL" +"2991190576","2991190591","DE" +"2991190592","2991190607","DK" +"2991190608","2991190623","ES" +"2991190624","2991190627","FR" +"2991190628","2991190783","SE" +"2991190784","2991190815","GB" +"2991190816","2991190831","NL" +"2991190832","2991190847","DE" +"2991190848","2991190863","DK" +"2991190864","2991190879","ES" +"2991190880","2991190883","FR" +"2991190884","2991191039","SE" +"2991191040","2991191071","GB" +"2991191072","2991191087","NL" +"2991191088","2991191103","DE" +"2991191104","2991191119","DK" +"2991191120","2991191135","ES" +"2991191136","2991191139","FR" +"2991191140","2991191295","SE" +"2991191296","2991191327","GB" +"2991191328","2991191343","NL" +"2991191344","2991191359","DE" +"2991191360","2991191375","DK" +"2991191376","2991191391","ES" +"2991191392","2991191395","FR" +"2991191396","2991191551","SE" +"2991191552","2991191583","GB" +"2991191584","2991191599","NL" +"2991191600","2991191615","DE" +"2991191616","2991191631","DK" +"2991191632","2991191647","ES" +"2991191648","2991191651","FR" +"2991191652","2991191807","SE" +"2991191808","2991192063","FI" +"2991192064","2991192255","DK" +"2991192256","2991192319","IT" +"2991192320","2991194111","SE" +"2991194112","2991210495","NO" +"2991210496","2991243263","RU" +"2991243264","2991259647","UA" +"2991259648","2991292415","RU" +"2991292416","2991308799","FI" +"2991308800","2991325183","BG" +"2991325184","2991341567","AZ" +"2991341568","2991357951","MD" +"2991357952","2991358207","DE" +"2991358208","2991358463","US" +"2991358464","2991361279","DE" +"2991361280","2991361535","US" +"2991361536","2991366143","DE" +"2991366144","2991366399","US" +"2991366400","2991374335","DE" +"2991374336","2991390719","RU" +"2991390720","2991407103","BA" +"2991407104","2991423487","DE" +"2991423488","2991439871","JO" +"2991439872","2991456255","CZ" +"2991456256","2991472639","RU" +"2991472640","2991489023","GB" +"2991489024","2991505407","AM" +"2991505408","2991521791","SE" +"2991521792","2991538175","RS" +"2991538176","2991554559","SI" +"2991554560","2991570943","GB" +"2991570944","2991571455","IT" +"2991571456","2991571967","GB" +"2991571968","2991572479","IT" +"2991572480","2991572991","IL" +"2991572992","2991573503","GB" +"2991573504","2991574015","ES" +"2991574016","2991574527","DE" +"2991574528","2991587327","IT" +"2991587328","2991718399","SA" +"2991718400","2991849471","CH" +"2991849472","2991980543","NL" +"2991980544","2991980807","UA" +"2991980808","2991980815","NA" +"2991980816","2991981495","UA" +"2991981496","2991981503","NA" +"2991981504","2991981839","UA" +"2991981840","2991981847","RU" +"2991981848","2991982535","UA" +"2991982536","2991982543","GL" +"2991982544","2991982592","UA" +"2991982593","2991982599","JP" +"2991982600","2991982607","UA" +"2991982608","2991982751","JP" +"2991982752","2991982759","UA" +"2991982760","2991982846","JP" +"2991982847","2991983103","UA" +"2991983104","2991983111","IN" +"2991983112","2991983367","UA" +"2991983368","2991983615","JP" +"2991983616","2991984383","UA" +"2991984384","2991984639","JP" +"2991984640","2991985951","UA" +"2991985952","2991985959","JP" +"2991985960","2991985983","UA" +"2991985984","2991986175","JP" +"2991986176","2991986487","UA" +"2991986488","2991986559","JP" +"2991986560","2991987799","UA" +"2991987800","2991987807","CA" +"2991987808","2992111615","UA" +"2992111616","2992373759","KZ" +"2992373760","2992635903","UA" +"2992635904","2993684479","GB" +"2993684480","2993946623","AT" +"2993946624","2994208767","BE" +"2994208768","2994733055","BY" +"2994733056","2994798591","GR" +"2994798592","2994929663","RU" +"2994929664","2994995199","IR" +"2994995200","2994997247","RU" +"2994997248","2994999295","BE" +"2994999296","2995003391","FR" +"2995003392","2995007487","BH" +"2995007488","2995009535","TR" +"2995009536","2995011583","ES" +"2995011584","2995013631","DE" +"2995013632","2995013887","MT" +"2995013888","2995015679","SE" +"2995015680","2995017727","BG" +"2995017728","2995019775","IT" +"2995019776","2995021823","RU" +"2995021824","2995023871","IT" +"2995023872","2995044351","MD" +"2995044352","2995046399","ES" +"2995046400","2995048447","RU" +"2995048448","2995050495","NL" +"2995050496","2995052543","AL" +"2995052544","2995056639","DK" +"2995056640","2995058687","DE" +"2995058688","2995060735","SE" +"2995060736","2995126271","UA" +"2995126272","2995191807","GE" +"2995191808","2995257343","LB" +"2995257344","2995388415","UA" +"2995388416","2995453951","RO" +"2995453952","2995519487","ES" +"2995519488","2995650559","RU" +"2995650560","2995716095","DE" +"2995716096","2995781631","SK" +"2995781632","2995912703","BE" +"2995912704","2996043775","GR" +"2996043776","2996174847","RS" +"2996174848","2996305919","UA" +"2996305920","2996436991","QA" +"2996436992","2996469759","BY" +"2996469760","2996502399","RU" +"2996502400","2996502431","TR" +"2996502432","2996535295","RU" +"2996535296","2996568063","DK" +"2996568064","2996600831","ES" +"2996600832","2996633599","RO" +"2996633600","2996649983","IR" +"2996649984","2996666367","RO" +"2996666368","2996682751","RU" +"2996682752","2996699135","DK" +"2996699136","2996764671","UA" +"2996764672","2996768767","NL" +"2996768768","2996772863","RU" +"2996772864","2996776959","UA" +"2996776960","2996781055","RU" +"2996781056","2996785151","RO" +"2996785152","2996789247","RU" +"2996789248","2996797439","UA" +"2996797440","2996801535","PL" +"2996801536","2996805631","RO" +"2996805632","2996809727","PL" +"2996809728","2996813823","UA" +"2996813824","2996817919","PL" +"2996817920","2996826111","UA" +"2996826112","2996830207","BY" +"2996830208","2996862975","HR" +"2996862976","2996895743","AM" +"2996895744","2996928511","KW" +"2996928512","2996994047","RU" +"2996994048","2996994943","DE" +"2996994944","2996995071","US" +"2996995072","2996995327","BZ" +"2996995328","2996995647","DE" +"2996995648","2996995711","BZ" +"2996995712","2996995775","BY" +"2996995776","2996995839","RU" +"2996995840","2996996073","DE" +"2996996074","2996996074","A1" +"2996996075","2996996287","DE" +"2996996288","2996996351","RU" +"2996996352","2996996383","DE" +"2996996384","2996996447","RU" +"2996996448","2996996575","UA" +"2996996576","2996996639","DE" +"2996996640","2996996767","UA" +"2996996768","2996996831","RU" +"2996996832","2996996863","DE" +"2996996864","2996997119","CN" +"2996997120","2996998143","DE" +"2996998144","2996998271","UA" +"2996998272","2996998527","DE" +"2996998528","2996998655","UA" +"2996998656","2996998719","DE" +"2996998720","2996998911","RU" +"2996998912","2996999359","DE" +"2996999360","2996999423","IL" +"2996999424","2996999551","IN" +"2996999552","2996999679","DE" +"2996999680","2996999935","GB" +"2996999936","2997000447","DE" +"2997000448","2997000703","RU" +"2997000704","2997001471","DE" +"2997001472","2997001727","BZ" +"2997001728","2997001983","TR" +"2997001984","2997003071","DE" +"2997003072","2997003135","RU" +"2997003136","2997003199","DE" +"2997003200","2997003263","RU" +"2997003264","2997003287","DE" +"2997003288","2997003295","NL" +"2997003296","2997003327","DE" +"2997003328","2997003391","RU" +"2997003392","2997004031","DE" +"2997004032","2997004287","BZ" +"2997004288","2997004543","CA" +"2997004544","2997004607","DE" +"2997004608","2997004671","RU" +"2997004672","2997004799","DE" +"2997004800","2997005055","BZ" +"2997005056","2997005183","GB" +"2997005184","2997005375","DE" +"2997005376","2997005439","GR" +"2997005440","2997005567","GB" +"2997005568","2997005823","BZ" +"2997005824","2997006335","DE" +"2997006336","2997006591","TR" +"2997006592","2997006655","DE" +"2997006656","2997006719","TR" +"2997006720","2997006847","RU" +"2997006848","2997008255","DE" +"2997008256","2997008383","LT" +"2997008384","2997008447","DE" +"2997008448","2997008511","RU" +"2997008512","2997008639","LT" +"2997008640","2997008959","DE" +"2997008960","2997009023","RU" +"2997009024","2997018623","DE" +"2997018624","2997019135","GB" +"2997019136","2997019391","TR" +"2997019392","2997019711","DE" +"2997019712","2997019903","US" +"2997019904","2997020719","DE" +"2997020720","2997020735","SE" +"2997020736","2997020799","DE" +"2997020800","2997020863","CA" +"2997020864","2997022079","DE" +"2997022080","2997022143","GB" +"2997022144","2997022239","DE" +"2997022240","2997022303","NL" +"2997022304","2997022367","SG" +"2997022368","2997022751","DE" +"2997022752","2997022783","TR" +"2997022784","2997022847","DE" +"2997022848","2997023231","BZ" +"2997023232","2997023295","DE" +"2997023296","2997023423","IN" +"2997023424","2997024255","DE" +"2997024256","2997024511","TR" +"2997024512","2997026815","DE" +"2997026816","2997059583","RU" +"2997059584","2997092351","BY" +"2997092352","2997125119","NO" +"2997125120","2997157887","HU" +"2997157888","2997190655","UA" +"2997190656","2997223423","AT" +"2997223424","2997256191","PT" +"2997256192","2997321727","RU" +"2997321728","2997354495","IE" +"2997354496","2997387263","MD" +"2997387264","2997420031","BY" +"2997420032","2997452799","RU" +"2997452800","2997485567","BG" +"2997485568","2997486847","FR" +"2997486848","2997486911","BH" +"2997486912","2997513345","FR" +"2997513346","2997513346","IT" +"2997513347","2997513347","ES" +"2997513348","2997513348","DE" +"2997513349","2997513349","PT" +"2997513350","2997513350","BE" +"2997513351","2997513351","LU" +"2997513352","2997513352","AT" +"2997513353","2997513353","NL" +"2997513354","2997513354","IE" +"2997513355","2997518335","FR" +"2997518336","2997528063","RU" +"2997528064","2997528319","UA" +"2997528320","2997583871","RU" +"2997583872","2997616639","SY" +"2997616640","2997649407","SI" +"2997649408","2997682175","BY" +"2997682176","2997714943","RU" +"2997714944","2997747711","IR" +"2997747712","2997748479","DE" +"2997748480","2997748735","AT" +"2997748736","2997748991","CH" +"2997748992","2997749119","GB" +"2997749120","2997749247","IE" +"2997749248","2997749375","FR" +"2997749376","2997749503","ES" +"2997749504","2997749631","PT" +"2997749632","2997749759","IT" +"2997749760","2997749887","PL" +"2997749888","2997750015","CZ" +"2997750016","2997750143","SK" +"2997750144","2997750271","RU" +"2997750272","2997750399","RO" +"2997750400","2997750527","HU" +"2997750528","2997750655","BA" +"2997750656","2997750783","HR" +"2997750784","2997750911","GR" +"2997750912","2997751039","TR" +"2997751040","2997751167","NO" +"2997751168","2997751295","FI" +"2997751296","2997751423","SE" +"2997751424","2997751551","DK" +"2997751552","2997751679","LI" +"2997751680","2997751807","BE" +"2997751808","2997751935","NL" +"2997751936","2997752063","LU" +"2997752064","2997752191","CA" +"2997752192","2997752319","MX" +"2997752320","2997752447","EE" +"2997752448","2997752575","LV" +"2997752576","2997752703","LT" +"2997752704","2997752831","CN" +"2997752832","2997752959","KR" +"2997752960","2997753087","JP" +"2997753088","2997753215","AU" +"2997753216","2997753343","NZ" +"2997753344","2997753471","VN" +"2997753472","2997753599","BR" +"2997753600","2997753727","TH" +"2997753728","2997753855","IN" +"2997753856","2997754655","US" +"2997754656","2997754879","DE" +"2997754880","2997754895","SG" +"2997754896","2997780479","DE" +"2997780480","2997813247","SE" +"2997813248","2997815295","AL" +"2997815296","2997846015","RS" +"2997846016","2997878783","MD" +"2997878784","2998140927","RU" +"2998140928","2998403071","PL" +"2998403072","2998665215","RU" +"2998665216","2998927359","AT" +"2998927360","2999451647","CH" +"2999451648","2999713791","DE" +"2999713792","2999975935","RU" +"2999975936","2999984127","FR" +"2999984128","2999985695","BE" +"2999985696","2999985711","GB" +"2999985712","2999985727","BE" +"2999985728","2999985743","CZ" +"2999985744","2999985759","NL" +"2999985760","2999988991","BE" +"2999988992","2999988999","FR" +"2999989000","2999989007","BE" +"2999989008","2999989119","NL" +"2999989120","2999989247","FR" +"2999989248","2999991039","BE" +"2999991040","2999992319","NL" +"2999992320","3000000511","RU" +"3000000512","3000008703","DE" +"3000008704","3000016895","RU" +"3000016896","3000020991","GB" +"3000020992","3000023039","US" +"3000023040","3000025087","GB" +"3000025088","3000033279","GI" +"3000033280","3000041471","RU" +"3000041472","3000049663","BA" +"3000049664","3000057855","CH" +"3000057856","3000066047","UA" +"3000066048","3000074239","RU" +"3000074240","3000082431","CZ" +"3000082432","3000090623","DK" +"3000090624","3000131583","RU" +"3000131584","3000139775","DE" +"3000139776","3000147967","UA" +"3000147968","3000156159","TR" +"3000156160","3000164351","UA" +"3000164352","3000172543","HU" +"3000172544","3000180735","RU" +"3000180736","3000188927","TR" +"3000188928","3000197119","IT" +"3000197120","3000213503","UA" +"3000213504","3000221695","RU" +"3000221696","3000229887","TR" +"3000229888","3000238079","CH" +"3000238080","3000240127","KZ" +"3000240128","3000242175","RU" +"3000242176","3000244223","AT" +"3000244224","3000246271","PL" +"3000246272","3000248319","RO" +"3000248320","3000252415","PL" +"3000252416","3000254463","RO" +"3000254464","3000256511","UA" +"3000256512","3000260607","RU" +"3000260608","3000262655","RS" +"3000262656","3000266751","UA" +"3000266752","3000268799","DE" +"3000268800","3000270847","PL" +"3000270848","3000272895","RU" +"3000272896","3000274943","IT" +"3000274944","3000283135","PL" +"3000283136","3000285183","RU" +"3000285184","3000287231","RO" +"3000287232","3000289279","UA" +"3000289280","3000291327","RO" +"3000291328","3000293375","RU" +"3000293376","3000295423","PL" +"3000295424","3000297471","RU" +"3000297472","3000301567","UA" +"3000301568","3000303615","RO" +"3000303616","3000305663","UA" +"3000305664","3000313855","RU" +"3000313856","3000315903","CZ" +"3000315904","3000317951","LV" +"3000317952","3000319999","PL" +"3000320000","3000322047","FR" +"3000322048","3000326143","RU" +"3000326144","3000330239","PL" +"3000330240","3000332287","UA" +"3000332288","3000334335","RU" +"3000334336","3000336383","PL" +"3000336384","3000338431","AM" +"3000338432","3000340479","PL" +"3000340480","3000342527","RU" +"3000342528","3000344575","CZ" +"3000344576","3000346623","PL" +"3000346624","3000348671","UA" +"3000348672","3000350719","RO" +"3000350720","3000352767","UA" +"3000352768","3000358911","RU" +"3000358912","3000360959","PL" +"3000360960","3000363007","RU" +"3000363008","3000365055","FI" +"3000365056","3000369151","RU" +"3000369152","3000377343","PL" +"3000377344","3000385535","RU" +"3000385536","3000393727","PS" +"3000393728","3000401919","NL" +"3000401920","3000410111","PL" +"3000410112","3000426495","UA" +"3000426496","3000434687","RU" +"3000434688","3000451071","IR" +"3000451072","3000467455","RU" +"3000467456","3000471551","GB" +"3000471552","3000475647","RU" +"3000475648","3000483839","UA" +"3000483840","3000487935","PL" +"3000487936","3000492031","PS" +"3000492032","3000506367","UA" +"3000506368","3000508415","PL" +"3000508416","3000510463","UA" +"3000510464","3000512511","PL" +"3000512512","3000514559","EE" +"3000514560","3000516607","SI" +"3000516608","3000520703","RU" +"3000520704","3000522751","CZ" +"3000522752","3000524799","PL" +"3000524800","3000526847","UA" +"3000526848","3000528895","PL" +"3000528896","3000530943","IE" +"3000530944","3000532991","UA" +"3000532992","3000535039","UZ" +"3000535040","3000537087","PL" +"3000537088","3000539135","CZ" +"3000539136","3000543231","RU" +"3000543232","3000545279","UA" +"3000545280","3000547327","RU" +"3000547328","3000549375","UA" +"3000549376","3000551423","SE" +"3000551424","3000553471","PL" +"3000553472","3000555519","KG" +"3000555520","3000557567","RU" +"3000557568","3000561663","UA" +"3000561664","3000563711","RO" +"3000563712","3000565759","CZ" +"3000565760","3000567807","RU" +"3000567808","3000569855","RS" +"3000569856","3000571903","BE" +"3000571904","3000573951","RU" +"3000573952","3000575999","PL" +"3000576000","3000586239","RU" +"3000586240","3000588287","NL" +"3000588288","3000590335","RO" +"3000590336","3000594431","RU" +"3000594432","3000596479","PL" +"3000596480","3000598527","RU" +"3000598528","3000600575","FI" +"3000600576","3000602623","PL" +"3000602624","3000604671","CZ" +"3000604672","3000606719","RU" +"3000606720","3000608767","UA" +"3000608768","3000610815","KG" +"3000610816","3000612863","RU" +"3000612864","3000616959","PL" +"3000616960","3000621055","UA" +"3000621056","3000623103","PL" +"3000623104","3000625151","RU" +"3000625152","3000627199","RO" +"3000627200","3000629247","CZ" +"3000629248","3000631295","PL" +"3000631296","3000647679","RU" +"3000647680","3000651775","UA" +"3000651776","3000664063","RU" +"3000664064","3000668159","RO" +"3000668160","3000672255","RU" +"3000672256","3000676351","HR" +"3000676352","3000684543","RO" +"3000684544","3000688639","RU" +"3000688640","3000692735","PL" +"3000692736","3000696831","UA" +"3000696832","3000700927","RS" +"3000700928","3000705023","PL" +"3000705024","3000709119","RU" +"3000709120","3000713215","AM" +"3000713216","3000717311","A2" +"3000717312","3000721407","UA" +"3000721408","3000733695","PL" +"3000733696","3000737791","RU" +"3000737792","3000741887","UA" +"3000741888","3000745983","RU" +"3000745984","3000750079","UA" +"3000750080","3000754175","RU" +"3000754176","3000758271","IR" +"3000758272","3000762367","UA" +"3000762368","3001024511","RS" +"3001024512","3001548799","NL" +"3001548800","3001614335","NO" +"3001614336","3001679871","TR" +"3001679872","3001745407","RU" +"3001745408","3001810943","PL" +"3001810944","3001815039","IE" +"3001815040","3001819135","RU" +"3001819136","3001823231","IR" +"3001823232","3001827327","GE" +"3001827328","3001827647","SE" +"3001827648","3001827743","GB" +"3001827744","3001827775","US" +"3001827776","3001828864","SE" +"3001828865","3001828896","US" +"3001828897","3001828927","SE" +"3001828928","3001828991","DE" +"3001828992","3001829055","GB" +"3001829056","3001829120","SE" +"3001829121","3001829152","US" +"3001829153","3001829183","SE" +"3001829184","3001829247","DE" +"3001829248","3001829311","GB" +"3001829312","3001830400","SE" +"3001830401","3001830432","GB" +"3001830433","3001830495","SE" +"3001830496","3001830527","GB" +"3001830528","3001830559","IT" +"3001830560","3001830591","FR" +"3001830592","3001830623","US" +"3001830624","3001830631","SE" +"3001830632","3001830639","IT" +"3001830640","3001830656","SE" +"3001830657","3001830688","GB" +"3001830689","3001830751","SE" +"3001830752","3001830783","GB" +"3001830784","3001830815","IT" +"3001830816","3001830847","FR" +"3001830848","3001830879","US" +"3001830880","3001830887","SE" +"3001830888","3001830895","IT" +"3001830896","3001830912","SE" +"3001830913","3001830944","GB" +"3001830945","3001831007","SE" +"3001831008","3001831039","GB" +"3001831040","3001831071","IT" +"3001831072","3001831103","FR" +"3001831104","3001831135","US" +"3001831136","3001831167","IT" +"3001831168","3001831199","GB" +"3001831200","3001831263","SE" +"3001831264","3001831295","GB" +"3001831296","3001831327","IT" +"3001831328","3001831359","FR" +"3001831360","3001831391","US" +"3001831392","3001831423","SE" +"3001831424","3001835519","BA" +"3001835520","3001839615","RU" +"3001839616","3001843711","ES" +"3001843712","3001846271","RU" +"3001846272","3001846783","GB" +"3001846784","3001847807","RU" +"3001847808","3001851903","GB" +"3001851904","3001855999","IT" +"3001856000","3001859071","NL" +"3001859072","3001860095","MD" +"3001860096","3001861119","LV" +"3001861120","3001862143","LT" +"3001862144","3001863167","EE" +"3001863168","3001864191","LT" +"3001864192","3001868287","RU" +"3001868288","3001868799","FR" +"3001868800","3001868803","US" +"3001868804","3001868807","CN" +"3001868808","3001868811","JP" +"3001868812","3001868815","DE" +"3001868816","3001868819","FR" +"3001868820","3001868823","GB" +"3001868824","3001868827","BR" +"3001868828","3001868831","IT" +"3001868832","3001868835","FR" +"3001868836","3001868839","IN" +"3001868840","3001868843","RU" +"3001868844","3001868847","ES" +"3001868848","3001868851","AU" +"3001868852","3001868855","MX" +"3001868856","3001868859","KR" +"3001868860","3001868863","FR" +"3001868864","3001868867","TR" +"3001868868","3001868871","ID" +"3001868872","3001868875","CH" +"3001868876","3001868879","PL" +"3001868880","3001868883","BE" +"3001868884","3001868887","SE" +"3001868888","3001868891","SA" +"3001868892","3001868895","TW" +"3001868896","3001868899","SJ" +"3001868900","3001868903","AT" +"3001868904","3001868907","AR" +"3001868908","3001868911","ZA" +"3001868912","3001868915","IR" +"3001868916","3001868919","TH" +"3001868920","3001868923","DK" +"3001868924","3001868927","GR" +"3001868928","3001868931","AE" +"3001868932","3001868935","VE" +"3001868936","3001868939","CD" +"3001868940","3001868943","FI" +"3001868944","3001868947","MY" +"3001868948","3001868951","PT" +"3001868952","3001868955","HK" +"3001868956","3001868959","SG" +"3001868960","3001868963","EG" +"3001868964","3001868967","NG" +"3001868968","3001868971","IL" +"3001868972","3001868975","IE" +"3001868976","3001868979","CL" +"3001868980","3001868983","CZ" +"3001868984","3001868987","PH" +"3001868988","3001868991","PK" +"3001868992","3001868995","RO" +"3001868996","3001868999","DZ" +"3001869000","3001869003","PE" +"3001869004","3001869007","NZ" +"3001869008","3001869011","KZ" +"3001869012","3001869015","UA" +"3001869016","3001869019","KW" +"3001869020","3001869023","QA" +"3001869024","3001869027","HU" +"3001869028","3001869031","BD" +"3001869032","3001869035","VN" +"3001869036","3001869039","MA" +"3001869040","3001869043","SK" +"3001869044","3001869047","AO" +"3001869048","3001869051","IQ" +"3001869052","3001869055","LY" +"3001869056","3001869311","RU" +"3001869312","3001869599","SA" +"3001869600","3001869600","FR" +"3001869601","3001869696","IR" +"3001869697","3001869823","YE" +"3001869824","3001869887","IR" +"3001869888","3001870079","FR" +"3001870080","3001870335","RU" +"3001870336","3001870591","IT" +"3001870592","3001870847","FR" +"3001870848","3001871103","DE" +"3001871104","3001871359","ES" +"3001871360","3001871615","GR" +"3001871616","3001871871","PL" +"3001871872","3001872127","PT" +"3001872128","3001872383","RO" +"3001872384","3001876479","RU" +"3001876480","3001880575","IT" +"3001880576","3001884671","RU" +"3001884672","3001884927","SE" +"3001884928","3001885055","NL" +"3001885056","3001885087","US" +"3001885088","3001885439","NL" +"3001885440","3001886463","BE" +"3001886464","3001886511","NL" +"3001886512","3001886527","US" +"3001886528","3001886543","IE" +"3001886544","3001886559","US" +"3001886560","3001886567","NL" +"3001886568","3001886575","CY" +"3001886576","3001886583","GE" +"3001886584","3001888767","NL" +"3001888768","3001892863","BH" +"3001892864","3001896959","AZ" +"3001896960","3001901055","CH" +"3001901056","3001905151","FR" +"3001905152","3001909247","GB" +"3001909248","3001917439","ES" +"3001917440","3001921535","GB" +"3001921536","3001929727","RU" +"3001929728","3001933823","RS" +"3001933824","3001937919","ES" +"3001937920","3001942015","RU" +"3001942016","3001946111","BY" +"3001946112","3001950207","RU" +"3001950208","3001954303","CZ" +"3001954304","3001958399","IT" +"3001958400","3001962495","KZ" +"3001962496","3001966591","GB" +"3001966592","3001970687","NL" +"3001970688","3001974783","RU" +"3001974784","3001982975","GB" +"3001982976","3001987071","CH" +"3001987072","3001991167","JO" +"3001991168","3001995263","IR" +"3001995264","3001999359","HU" +"3001999360","3002003455","DE" +"3002003456","3002011647","PL" +"3002011648","3002015743","BA" +"3002015744","3002019839","IT" +"3002019840","3002021567","NL" +"3002021568","3002021599","US" +"3002021600","3002021631","IN" +"3002021632","3002023935","NL" +"3002023936","3002028031","DE" +"3002028032","3002036223","GB" +"3002036224","3002040319","BG" +"3002040320","3002044415","PL" +"3002044416","3002048511","IR" +"3002048512","3002052607","GB" +"3002052608","3002056703","IT" +"3002056704","3002060799","FI" +"3002060800","3002064895","ES" +"3002064896","3002065407","BG" +"3002065408","3002065919","RS" +"3002065920","3002068991","BG" +"3002068992","3002073087","ES" +"3002073088","3002597375","TR" +"3002597376","3002599423","RU" +"3002599424","3002601471","CZ" +"3002601472","3002603519","IS" +"3002603520","3002605567","SE" +"3002605568","3002607615","GB" +"3002607616","3002609663","IR" +"3002609664","3002611711","IT" +"3002611712","3002613759","CZ" +"3002613760","3002615807","RU" +"3002615808","3002617855","PL" +"3002617856","3002619903","RU" +"3002619904","3002620023","IT" +"3002620024","3002620031","GB" +"3002620032","3002621951","IT" +"3002621952","3002623999","NO" +"3002624000","3002626551","GB" +"3002626552","3002626559","US" +"3002626560","3002628095","GB" +"3002628096","3002630143","NO" +"3002630144","3002632191","GB" +"3002632192","3002634239","EE" +"3002634240","3002636287","IT" +"3002636288","3002638335","NL" +"3002638336","3002640383","BE" +"3002640384","3002642431","NL" +"3002642432","3002644479","IT" +"3002644480","3002648575","FR" +"3002648576","3002650623","HU" +"3002650624","3002652671","FR" +"3002652672","3002654719","DE" +"3002654720","3002656767","NL" +"3002656768","3002658815","RU" +"3002658816","3002660863","DE" +"3002660864","3002662911","CZ" +"3002662912","3002664959","DE" +"3002664960","3002667007","ES" +"3002667008","3002669055","GE" +"3002669056","3002669199","DE" +"3002669200","3002669207","CH" +"3002669208","3002669951","DE" +"3002669952","3002669983","US" +"3002669984","3002671103","DE" +"3002671104","3002673151","LV" +"3002673152","3002675199","GB" +"3002675200","3002677247","DK" +"3002677248","3002683391","RU" +"3002683392","3002685439","DE" +"3002685440","3002687487","PL" +"3002687488","3002688511","GB" +"3002688512","3002689535","NL" +"3002689536","3002691583","IL" +"3002691584","3002693631","MK" +"3002693632","3002695679","NO" +"3002695680","3002697727","RU" +"3002697728","3002699775","DE" +"3002699776","3002701823","SE" +"3002701824","3002703871","NL" +"3002703872","3002705919","DE" +"3002705920","3002707967","MK" +"3002707968","3002710015","KW" +"3002710016","3002712063","IT" +"3002712064","3002714111","LU" +"3002714112","3002716159","IT" +"3002716160","3002718207","CZ" +"3002718208","3002724351","IT" +"3002724352","3002726399","RU" +"3002726400","3002728447","NL" +"3002728448","3002730495","FR" +"3002730496","3002732543","DE" +"3002732544","3002734591","NL" +"3002734592","3002736639","CH" +"3002736640","3002738687","LT" +"3002738688","3002740735","PL" +"3002740736","3002742783","GB" +"3002742784","3002742927","LI" +"3002742928","3002742943","CH" +"3002742944","3002743071","LI" +"3002743072","3002743103","US" +"3002743104","3002744831","LI" +"3002744832","3002746879","IT" +"3002746880","3002748927","GB" +"3002748928","3002750975","DE" +"3002750976","3002753023","TR" +"3002753024","3002755071","GB" +"3002755072","3002757119","FR" +"3002757120","3002759167","IE" +"3002759168","3002761215","DE" +"3002761216","3002763263","CH" +"3002763264","3002765311","RS" +"3002765312","3002767359","NL" +"3002767360","3002769407","RU" +"3002769408","3002771655","DE" +"3002771656","3002771663","NL" +"3002771664","3002771711","DE" +"3002771712","3002771719","NL" +"3002771720","3002773503","DE" +"3002773504","3002775551","GB" +"3002775552","3002777599","RO" +"3002777600","3002779647","NL" +"3002779648","3002781695","IT" +"3002781696","3002783743","FR" +"3002783744","3002785791","NO" +"3002785792","3002789887","DE" +"3002789888","3002791935","RU" +"3002791936","3002793983","AE" +"3002793984","3002796031","DK" +"3002796032","3002798079","DE" +"3002798080","3002800127","FR" +"3002800128","3002802175","NL" +"3002802176","3002804223","GB" +"3002804224","3002806015","TR" +"3002806016","3002808319","DE" +"3002808320","3002810367","FI" +"3002810368","3002812415","AT" +"3002812416","3002814463","IT" +"3002814464","3002816511","FR" +"3002816512","3002818559","DE" +"3002818560","3002820607","RU" +"3002820608","3002822655","UA" +"3002822656","3002824703","DE" +"3002824704","3002826751","NL" +"3002826752","3002828799","SE" +"3002828800","3002830847","RU" +"3002830848","3002834943","FI" +"3002834944","3002834975","CH" +"3002834976","3002835887","LU" +"3002835888","3002835903","US" +"3002835904","3002836383","LU" +"3002836384","3002836399","BE" +"3002836400","3002836991","LU" +"3002836992","3002841087","GB" +"3002841088","3002843135","CZ" +"3002843136","3002845183","NL" +"3002845184","3002847231","FR" +"3002847232","3002849279","IR" +"3002849280","3002851327","RU" +"3002851328","3002853375","DE" +"3002853376","3002855423","GB" +"3002855424","3002857471","SE" +"3002857472","3002859519","FR" +"3002859520","3002875903","PL" +"3002875904","3002892287","RU" +"3002892288","3002908671","IR" +"3002908672","3002925055","RU" +"3002925056","3002941439","IR" +"3002941440","3002957823","SY" +"3002957824","3002974207","SK" +"3002974208","3002990591","RS" +"3002990592","3003006975","DE" +"3003006976","3003023359","LU" +"3003023360","3003039743","RS" +"3003039744","3003056127","BG" +"3003056128","3003058175","DE" +"3003058176","3003058431","MT" +"3003058432","3003058687","FI" +"3003058688","3003058751","EE" +"3003058752","3003058943","PH" +"3003058944","3003059199","IL" +"3003059200","3003059711","EE" +"3003059712","3003059967","GI" +"3003059968","3003060223","EE" +"3003060224","3003062271","DE" +"3003062272","3003064319","NL" +"3003064320","3003066367","RO" +"3003066368","3003066895","PL" +"3003066896","3003066903","RU" +"3003066904","3003068415","PL" +"3003068416","3003070463","NL" +"3003070464","3003074559","GB" +"3003074560","3003076607","IT" +"3003076608","3003077663","GB" +"3003077664","3003077679","US" +"3003077680","3003077695","GB" +"3003077696","3003077711","US" +"3003077712","3003077887","GB" +"3003077888","3003077951","US" +"3003077952","3003080703","GB" +"3003080704","3003081150","FR" +"3003081151","3003081156","GB" +"3003081157","3003081157","ES" +"3003081158","3003082751","FR" +"3003082752","3003084799","ES" +"3003084800","3003086847","IT" +"3003086848","3003088895","RU" +"3003088896","3003090943","FR" +"3003090944","3003092991","DE" +"3003092992","3003095039","NO" +"3003095040","3003095567","AT" +"3003095568","3003095583","CZ" +"3003095584","3003095871","AT" +"3003095872","3003095935","IT" +"3003095936","3003096063","AT" +"3003096064","3003096079","CZ" +"3003096080","3003096367","AT" +"3003096368","3003096383","DE" +"3003096384","3003097087","AT" +"3003097088","3003099135","FR" +"3003099136","3003101183","CZ" +"3003101184","3003103231","UA" +"3003103232","3003105279","IT" +"3003105280","3003107327","NL" +"3003107328","3003109375","RU" +"3003109376","3003111423","FR" +"3003111424","3003113471","IT" +"3003113472","3003115519","ES" +"3003115520","3003117567","RU" +"3003117568","3003119615","IT" +"3003119616","3003121663","RU" +"3019898880","3024093183","JP" +"3024093184","3024617471","KR" +"3024617472","3024879615","MY" +"3024879616","3025141759","CN" +"3025141760","3025403903","KR" +"3025403904","3025600511","CN" +"3025600512","3025603839","IN" +"3025603840","3025604095","HK" +"3025604096","3025604381","IN" +"3025604382","3025604637","SG" +"3025604638","3025633535","IN" +"3025633536","3025633791","HK" +"3025633792","3025637375","IN" +"3025637376","3025637631","HK" +"3025637632","3025637887","MY" +"3025637888","3025638399","IN" +"3025638400","3025638655","SG" +"3025638656","3025649151","IN" +"3025649152","3025649663","HK" +"3025649664","3025666047","IN" +"3025666048","3025928191","CN" +"3025928192","3025932287","TW" +"3025932288","3025944575","JP" +"3025944576","3025960959","KR" +"3025960960","3025969151","PK" +"3025969152","3025973247","IN" +"3025973248","3025974271","AU" +"3025974272","3025975295","HK" +"3025975296","3025975551","SG" +"3025975552","3025975583","IN" +"3025975584","3025975807","SG" +"3025975808","3025975839","AU" +"3025975840","3025977343","SG" +"3025977344","3025979391","AU" +"3025979392","3025981439","IN" +"3025981440","3025982463","AU" +"3025982464","3025983487","ID" +"3025983488","3025985535","AU" +"3025985536","3025989631","BD" +"3025989632","3025993727","KR" +"3025993728","3026059263","VN" +"3026059264","3026067455","PH" +"3026068480","3026069503","PH" +"3026069504","3026071551","JP" +"3026071552","3026073599","HK" +"3026073600","3026075647","CN" +"3026075648","3026083839","AF" +"3026083840","3026087935","CN" +"3026087936","3026089983","AU" +"3026092032","3026108415","MO" +"3026108416","3026114559","JP" +"3026114560","3026115583","SG" +"3026115584","3026116607","AU" +"3026116608","3026118655","HK" +"3026118656","3026120703","AU" +"3026120704","3026124799","JP" +"3026124800","3026157567","AU" +"3026157568","3028287487","CN" +"3028287488","3028353023","TH" +"3028353024","3028385791","SG" +"3028385792","3028484095","CN" +"3028484096","3028500479","KR" +"3028500480","3028516863","JP" +"3028516864","3028518911","AU" +"3028518912","3028520959","JP" +"3028520960","3028521983","ID" +"3028521984","3028523007","LA" +"3028523008","3028525055","JP" +"3028525056","3028533247","HK" +"3028533248","3028537343","JP" +"3028537344","3028549631","US" +"3028549632","3028811775","KR" +"3028811776","3029336063","CN" +"3029336064","3029598207","JP" +"3029598208","3029600255","VN" +"3029600256","3029601279","AU" +"3029601280","3029602303","IN" +"3029602304","3029604351","CN" +"3029604352","3029605375","AU" +"3029605376","3029606399","JP" +"3029606400","3029614591","IN" +"3029614592","3029630975","AU" +"3029630976","3029635071","VN" +"3029635072","3029637119","JP" +"3029637120","3029639167","CN" +"3029639168","3029643263","JP" +"3029643264","3029644287","AU" +"3029644288","3029645311","KR" +"3029645312","3029651455","JP" +"3029651456","3029653503","BD" +"3029653504","3029663743","CN" +"3029663744","3029671935","BD" +"3029671936","3029680127","IN" +"3029680128","3029696511","MN" +"3029696512","3029704703","CN" +"3029704704","3029712895","JP" +"3029712896","3029714943","AU" +"3029714944","3029715199","JP" +"3029715200","3029715455","AU" +"3029715456","3029716991","JP" +"3029716992","3029721087","PK" +"3029721088","3029725183","AU" +"3029725184","3029727231","IN" +"3029727232","3029728255","AU" +"3029728256","3029729279","HK" +"3029729280","3029762047","AU" +"3029762048","3029770239","HK" +"3029770240","3029778431","CN" +"3029778432","3029788671","KR" +"3029788672","3029790719","ID" +"3029790720","3029791743","IN" +"3029791744","3029792767","ID" +"3029792768","3029793791","IN" +"3029793792","3029794815","PG" +"3029794816","3029860351","IN" +"3029860352","3031433215","CN" +"3031433216","3031564287","TW" +"3031564288","3031572479","IN" +"3031572480","3031580671","HK" +"3031580672","3031581695","AU" +"3031581696","3031582719","JP" +"3031582720","3031584767","SG" +"3031584768","3031587839","JP" +"3031587840","3031592959","ID" +"3031595008","3031596031","AU" +"3031596032","3031597055","KH" +"3031597056","3031613439","PK" +"3031613440","3031629823","CN" +"3031629824","3031695359","IN" +"3031695360","3031760895","TH" +"3031760896","3031826431","AU" +"3031826432","3031891967","KR" +"3031891968","3031957503","TH" +"3031957504","3032252415","CN" +"3032252416","3032271871","HK" +"3032271872","3032272895","AU" +"3032272896","3032276991","JP" +"3032276992","3032285183","IN" +"3032285184","3032301567","JP" +"3032301568","3032317951","KR" +"3032317952","3032319999","JP" +"3032320000","3032323071","AU" +"3032323072","3032324095","CN" +"3032324096","3032326143","AU" +"3032326144","3032330239","TL" +"3032330240","3032334335","KR" +"3032334336","3032342527","NZ" +"3032342528","3032350719","JP" +"3032350720","3032743935","PH" +"3032743936","3033038847","JP" +"3033038848","3033063423","AU" +"3033063424","3033065471","JP" +"3033065472","3033066495","MY" +"3033066496","3033067519","BD" +"3033067520","3033068543","IN" +"3033068544","3033069567","AU" +"3033069568","3033070591","JP" +"3033070592","3033268223","CN" +"3033268224","3033530367","TW" +"3033530368","3033661439","CN" +"3033661440","3033694207","KR" +"3033694208","3033710591","BD" +"3033710592","3033712639","KR" +"3033712640","3033714687","SG" +"3033714688","3033715711","NZ" +"3033716736","3033717759","TH" +"3033718784","3033726975","CN" +"3033726976","3033743359","KR" +"3033743360","3033745407","IN" +"3033745408","3033747455","JP" +"3033747456","3033748479","IN" +"3033748480","3033749503","JP" +"3033749504","3033751551","ID" +"3033751552","3033759743","IN" +"3033759744","3033792511","BD" +"3033792512","3033923583","CN" +"3033923584","3033939967","JP" +"3033939968","3033948159","AU" +"3033948160","3033956351","NC" +"3033956352","3033964543","IN" +"3033964544","3033966591","HK" +"3033966592","3033968639","AU" +"3033968640","3033972735","TW" +"3033972736","3033980927","TH" +"3033980928","3033982975","JP" +"3033982976","3033983999","ID" +"3033984000","3033985023","VN" +"3033985024","3033989119","ID" +"3033989120","3034054655","IN" +"3034054656","3034120191","AU" +"3034120192","3034251263","TW" +"3034251264","3034316799","HK" +"3034316800","3034447871","JP" +"3034447872","3034456063","AU" +"3034456064","3034464255","JP" +"3034464256","3034466303","NZ" +"3034466304","3034472447","JP" +"3034472448","3034478591","IN" +"3034478592","3034480639","JP" +"3034480640","3034482687","SG" +"3034482688","3034484735","AF" +"3034484736","3034488831","TH" +"3034488832","3034492927","AU" +"3034492928","3034497023","JP" +"3034497024","3034499071","AU" +"3034499072","3034500095","HK" +"3034500096","3034501119","TW" +"3034501120","3034502143","VU" +"3034502144","3034503167","IN" +"3034503168","3034504191","ID" +"3034504192","3034505215","KR" +"3034505216","3034578943","CN" +"3034578944","3035103231","KR" +"3035103232","3035168767","PH" +"3035168768","3035193343","CN" +"3035193344","3035197439","JP" +"3035197440","3035199487","HK" +"3035199488","3035200511","IN" +"3035200512","3035202559","AU" +"3035202560","3035205631","JP" +"3035205632","3035207679","MY" +"3035207680","3035209727","ID" +"3035209728","3035217919","HK" +"3035217920","3035234303","KR" +"3035234304","3035299839","BD" +"3035299840","3035316223","JP" +"3035316224","3035324415","CN" +"3035324416","3035326463","JP" +"3035326464","3035328511","AU" +"3035332608","3035333631","AU" +"3035333632","3035334655","HK" +"3035335680","3035337727","JP" +"3035337728","3035338751","ID" +"3035338752","3035339007","SG" +"3035339008","3035339263","IN" +"3035339264","3035339775","HK" +"3035339776","3035340799","AU" +"3035340800","3035348991","MN" +"3035348992","3035357183","AU" +"3035357184","3035365375","JP" +"3035365376","3035627519","KR" +"3035627520","3035660287","ID" +"3035660288","3035693055","SG" +"3035693056","3036610559","ID" +"3036610560","3036676095","SG" +"3036676096","3037790207","AR" +"3037790208","3037986815","VE" +"3037986816","3038248959","AR" +"3038511104","3038773247","AR" +"3039035392","3039166463","DO" +"3039297536","3039363071","PY" +"3039428608","3039494143","CL" +"3039690752","3039821823","AR" +"3039821824","3040346111","CO" +"3040870400","3041001471","PE" +"3041132544","3041263615","CO" +"3041394688","3041656831","CL" +"3041918976","3044016127","AR" +"3044016128","3044081663","EC" +"3044802560","3045064703","PY" +"3045064704","3047161855","CO" +"3047161856","3047292927","CL" +"3047424000","3047686143","AR" +"3047948288","3048079359","CL" +"3048210432","3048275967","PE" +"3048341504","3048472575","PA" +"3048472576","3048734719","VE" +"3048996864","3049029631","TT" +"3049062400","3049078783","CR" +"3049119744","3049127935","HN" +"3049193472","3049259007","PA" +"3053453312","3054501887","ID" +"3054501888","3054534655","HK" +"3054534656","3054537727","PH" +"3054537728","3054538751","SG" +"3054540800","3054541823","NZ" +"3054541824","3054542847","BD" +"3054542848","3054551039","ID" +"3054551040","3054559231","CN" +"3054559232","3054561279","JP" +"3054561280","3054562303","SG" +"3054562304","3054563327","JP" +"3054563328","3054567423","ID" +"3054567424","3054632959","TH" +"3054632960","3054665727","CN" +"3054665728","3054682111","IN" +"3054682112","3054698495","PH" +"3054698496","3054731263","IN" +"3054731264","3054764031","SG" +"3054764032","3054960639","JP" +"3054960640","3054993407","ID" +"3054993408","3054997503","IN" +"3054997504","3055001599","SG" +"3055001600","3055005695","ID" +"3055005696","3055007743","NZ" +"3055007744","3055009791","CN" +"3055009792","3055011839","AU" +"3055011840","3055013887","CN" +"3055013888","3055014911","JP" +"3055014912","3055015935","AU" +"3055015936","3055026175","JP" +"3055026176","3055484927","ID" +"3055484928","3055550463","KR" +"3055550464","3056599039","CN" +"3056599040","3056615423","JP" +"3056615424","3056623615","BD" +"3056623616","3056631807","CN" +"3056631808","3056639999","NZ" +"3056640000","3056648191","ID" +"3056648192","3056664575","IN" +"3056664576","3056734207","CN" +"3056734208","3056746495","KR" +"3056746496","3056747519","NP" +"3056748544","3056749567","WS" +"3056749568","3056750591","SG" +"3056750592","3056754687","TH" +"3056754688","3056758783","JP" +"3056758784","3056762879","CN" +"3056762880","3056771071","SG" +"3056771072","3056772095","NZ" +"3056772096","3056773119","JP" +"3056773120","3056774143","WS" +"3056774144","3056775167","JP" +"3056775168","3056779263","AF" +"3056779264","3056791551","JP" +"3056791552","3056795647","ID" +"3056795648","3056861183","CN" +"3056861184","3056992255","TH" +"3056992256","3057025023","CN" +"3057025024","3057033215","PH" +"3057033216","3057037311","NZ" +"3057037312","3057041407","JP" +"3057041408","3057049599","MY" +"3057049600","3057050623","AU" +"3057050624","3057051647","SG" +"3057051648","3057051903","AU" +"3057051904","3057052159","EU" +"3057052160","3057052415","AU" +"3057052416","3057052671","ES" +"3057052672","3057052927","IL" +"3057052928","3057053183","GB" +"3057053184","3057053695","AU" +"3057053696","3057054719","JP" +"3057054720","3057055743","HK" +"3057055744","3057057791","JP" +"3057057792","3057123327","SG" +"3057123328","3057451007","IN" +"3057451008","3057516543","CN" +"3057516544","3057647615","MY" +"3057647616","3058696191","IN" +"3058696192","3059548159","CN" +"3059548160","3059564543","MO" +"3059564544","3059572735","NP" +"3059572736","3059580927","JP" +"3059580928","3059613695","TH" +"3059613696","3059744767","IN" +"3059744768","3063414783","CN" +"3063414784","3063545855","HK" +"3063545856","3063611391","NZ" +"3063611392","3063676927","TW" +"3063676928","3063742463","IN" +"3063742464","3063807999","CN" +"3063808000","3063939071","JP" +"3063939072","3063955455","MN" +"3063955456","3063963647","CN" +"3063963648","3063971839","BD" +"3063971840","3063988223","AU" +"3063988224","3064004607","JP" +"3064004608","3064012799","LK" +"3064020992","3064023039","JP" +"3064023040","3064024063","SG" +"3064024064","3064025087","JP" +"3064025088","3064029183","VN" +"3064029184","3064135679","KR" +"3064135680","3064160255","JP" +"3064160256","3064168447","BD" +"3064168448","3064201215","KR" +"3064201216","3064725503","JP" +"3064725504","3064791039","KR" +"3064791040","3064807423","TW" +"3064807424","3064808447","IN" +"3064808448","3064809471","TW" +"3064809472","3064810495","MY" +"3064810496","3064811519","HK" +"3064811520","3064823807","KR" +"3064823808","3064831999","JP" +"3064832000","3064840191","KR" +"3064840192","3064856575","GU" +"3064856576","3064987647","CN" +"3064987648","3066036223","PK" +"3066036224","3066560511","KR" +"3066560512","3067084799","CN" +"3067084800","3068657663","KR" +"3068657664","3068723199","TH" +"3068723200","3068919807","TW" +"3068919808","3068948479","JP" +"3068948480","3068949503","VN" +"3068949504","3068950527","AU" +"3068950528","3068952575","NZ" +"3068952576","3068985343","CN" +"3068985344","3068986367","HK" +"3068986368","3068987391","AU" +"3068987392","3068990463","IN" +"3068990464","3068991487","VN" +"3068991488","3068992511","IN" +"3068992512","3068993535","PH" +"3068993536","3069018111","KR" +"3069018112","3069034495","IN" +"3069034496","3069050879","KR" +"3069050880","3069124607","CN" +"3069124608","3069126655","PH" +"3069126656","3069127679","MY" +"3069127680","3069128703","TW" +"3069128704","3069149183","HK" +"3069149184","3069181951","AU" +"3069181952","3069706239","CN" +"3069706240","3069968383","JP" +"3069968384","3069984767","KR" +"3069984768","3070001151","BD" +"3070001152","3070033919","KR" +"3070033920","3070099455","ID" +"3070099456","3070164991","CN" +"3070164992","3070167039","ID" +"3070167040","3070169087","TH" +"3070169088","3070170111","ID" +"3070170112","3070171135","MY" +"3070171136","3070172159","HK" +"3070172160","3070173183","AU" +"3070173184","3070181375","PH" +"3070181376","3070185471","JP" +"3070185472","3070197759","AU" +"3070197760","3070230527","KR" +"3070230528","3074949119","CN" +"3074949120","3075342335","JP" +"3075342336","3075375103","MY" +"3075375104","3075383295","KR" +"3075383296","3075385343","IN" +"3075385344","3075386367","MY" +"3075386368","3075387391","AU" +"3075388416","3075389439","CN" +"3075389440","3075390463","IN" +"3075390464","3075391487","JP" +"3075391488","3075407871","KR" +"3075407872","3075473407","JP" +"3075473408","3075571711","VN" +"3075571712","3075575807","FJ" +"3075575808","3075577855","AU" +"3075577856","3075579903","ID" +"3075579904","3075581951","MY" +"3075581952","3075582975","MN" +"3075584000","3075585023","JP" +"3075585024","3075586047","CN" +"3075586048","3075588095","KH" +"3075588096","3075604479","SG" +"3075604480","3075735551","IN" +"3075735552","3075866623","CN" +"3075866624","3075915775","JP" +"3075915776","3075932159","KR" +"3075932160","3075997695","IN" +"3075997696","3076128767","TH" +"3076128768","3076161535","SG" +"3076161536","3076169727","KR" +"3076169728","3076171775","VN" +"3076171776","3076173823","TH" +"3076173824","3076175871","JP" +"3076175872","3076177919","HK" +"3076177920","3076194303","JP" +"3076194304","3076202495","VN" +"3076202496","3076210687","HK" +"3076210688","3076218879","ID" +"3076218880","3076227071","JP" +"3076227072","3076228095","CN" +"3076228096","3076229119","NP" +"3076229120","3076235263","CN" +"3076235264","3076243455","VN" +"3076243456","3076259839","KR" +"3076259840","3076521983","CN" +"3076521984","3078619135","KR" +"3078619136","3081437183","CN" +"3081437184","3081502719","MY" +"3081502720","3081764863","CN" +"3081764864","3081846783","JP" +"3081846784","3081854975","HK" +"3081854976","3081859071","MN" +"3081859072","3081861119","PH" +"3081861120","3081862143","AU" +"3081862144","3081863167","IN" +"3081863168","3081895935","JP" +"3081895936","3082027007","HK" +"3082027008","3082158079","JP" +"3082158080","3082166271","CN" +"3082166272","3082174463","JP" +"3082174464","3082178559","PH" +"3082178560","3082179583","HK" +"3082179584","3082181631","IN" +"3082181632","3082182655","ID" +"3082182656","3082190847","LA" +"3082190848","3082289151","JP" +"3082289152","3087007743","CN" +"3087007744","3091202047","US" +"3091202048","3091726335","CA" +"3091726336","3091955711","US" +"3091955712","3091959807","CA" +"3091959808","3091976191","US" +"3091976192","3091980287","CA" +"3091980288","3093168127","US" +"3093168128","3093200895","CA" +"3093200896","3093213183","US" +"3093213184","3093217279","CA" +"3093217280","3093233663","US" +"3093233664","3093237759","PR" +"3093237760","3093241863","US" +"3093241864","3093241871","AU" +"3093241872","3093242287","US" +"3093242288","3093242295","AU" +"3093242296","3093242719","US" +"3093242720","3093242751","CN" +"3093242752","3093243223","US" +"3093243224","3093243231","AU" +"3093243232","3093245575","US" +"3093245576","3093245583","BR" +"3093245584","3093245719","US" +"3093245720","3093245727","AU" +"3093245728","3093245999","US" +"3093246000","3093246007","AU" +"3093246008","3093246431","US" +"3093246432","3093246439","AU" +"3093246440","3093247327","US" +"3093247328","3093247335","AU" +"3093247336","3093247431","US" +"3093247432","3093247439","CA" +"3093247440","3093247511","US" +"3093247512","3093247519","AU" +"3093247520","3093247967","US" +"3093247968","3093247983","CA" +"3093247984","3093248375","US" +"3093248376","3093248399","AU" +"3093248400","3093248415","US" +"3093248416","3093248431","AU" +"3093248432","3093248479","US" +"3093248480","3093248487","AU" +"3093248488","3093248727","US" +"3093248728","3093248735","AU" +"3093248736","3093248831","US" +"3093248832","3093248839","AU" +"3093248840","3093248887","US" +"3093248888","3093248895","AU" +"3093248896","3093249071","US" +"3093249072","3093249079","GB" +"3093249080","3093249599","US" +"3093249600","3093249623","AU" +"3093249624","3093249679","US" +"3093249680","3093249687","AU" +"3093249688","3093282815","US" +"3093282816","3093299199","CA" +"3093299200","3093835775","US" +"3093835776","3093838847","GB" +"3093838848","3093839871","US" +"3093839872","3093843455","NL" +"3093843456","3093850111","US" +"3093850112","3093855487","DE" +"3093855488","3093908991","US" +"3093908992","3093909247","PR" +"3093909248","3093954759","US" +"3093954760","3093954767","AR" +"3093954768","3093954975","US" +"3093954976","3093954983","AU" +"3093954984","3093955023","US" +"3093955024","3093955031","CA" +"3093955032","3093955079","US" +"3093955080","3093955087","CA" +"3093955088","3093955127","US" +"3093955128","3093955135","CA" +"3093955136","3093955175","US" +"3093955176","3093955183","AU" +"3093955184","3093955231","US" +"3093955232","3093955247","AU" +"3093955248","3093955359","US" +"3093955360","3093955367","GB" +"3093955368","3093955439","US" +"3093955440","3093955447","CA" +"3093955448","3093955455","GB" +"3093955456","3093955663","US" +"3093955664","3093955679","CA" +"3093955680","3093956479","US" +"3093956480","3093956495","IE" +"3093956496","3093956543","US" +"3093956544","3093956551","AU" +"3093956552","3093956567","US" +"3093956568","3093956575","MX" +"3093956576","3093956895","US" +"3093956896","3093956943","CA" +"3093956944","3093957103","US" +"3093957104","3093957119","CA" +"3093957120","3093957143","US" +"3093957144","3093957151","IL" +"3093957152","3093957703","US" +"3093957704","3093957711","BE" +"3093957712","3093957887","US" +"3093957888","3093957895","CA" +"3093957896","3093957903","US" +"3093957904","3093957911","CA" +"3093957912","3093958111","US" +"3093958112","3093958119","CA" +"3093958120","3093958175","US" +"3093958176","3093958183","GB" +"3093958184","3093958231","US" +"3093958232","3093958239","AU" +"3093958240","3093958503","US" +"3093958504","3093958511","CA" +"3093958512","3093958623","US" +"3093958624","3093958631","MX" +"3093958632","3093958663","US" +"3093958664","3093958667","MX" +"3093958668","3093958721","US" +"3093958722","3093958723","IL" +"3093958724","3093958745","US" +"3093958746","3093958747","FR" +"3093958748","3093959559","US" +"3093959560","3093959567","CA" +"3093959568","3093959751","US" +"3093959752","3093959759","GB" +"3093959760","3093959911","US" +"3093959912","3093959919","CA" +"3093959920","3093960063","US" +"3093960064","3093960095","CA" +"3093960096","3093960191","US" +"3093960192","3093960207","CA" +"3093960208","3093960351","US" +"3093960352","3093960383","CA" +"3093960384","3093960447","US" +"3093960448","3093960463","CA" +"3093960464","3093962259","US" +"3093962260","3093962263","CA" +"3093962264","3093962287","US" +"3093962288","3093962291","MX" +"3093962292","3093962375","US" +"3093962376","3093962379","CA" +"3093962380","3093962475","US" +"3093962476","3093962479","CA" +"3093962480","3093962559","US" +"3093962560","3093962575","GB" +"3093962576","3093962807","US" +"3093962808","3093962815","AU" +"3093962816","3093962943","US" +"3093962944","3093962951","GB" +"3093962952","3093963359","US" +"3093963360","3093963367","CA" +"3093963368","3093963487","US" +"3093963488","3093963495","IE" +"3093963496","3093963599","US" +"3093963600","3093963607","CA" +"3093963608","3093965039","US" +"3093965040","3093965055","GB" +"3093965056","3093965663","US" +"3093965664","3093965671","KW" +"3093965672","3093965879","US" +"3093965880","3093965881","CA" +"3093965882","3093965885","US" +"3093965886","3093965887","MX" +"3093965888","3093965903","US" +"3093965904","3093965905","CA" +"3093965906","3093965965","US" +"3093965966","3093965967","MX" +"3093965968","3093966319","US" +"3093966320","3093966323","AU" +"3093966324","3093967191","US" +"3093967192","3093967199","CA" +"3093967200","3093968911","US" +"3093968912","3093968927","CA" +"3093968928","3093968943","US" +"3093968944","3093968951","MX" +"3093968952","3093969007","US" +"3093969008","3093969015","IE" +"3093969016","3093969031","US" +"3093969032","3093969035","CA" +"3093969036","3093969131","US" +"3093969132","3093969135","MX" +"3093969136","3093970503","US" +"3093970504","3093970507","GB" +"3093970508","3093973583","US" +"3093973584","3093973599","BG" +"3093973600","3093977159","US" +"3093977160","3093977163","AU" +"3093977164","3093977167","IL" +"3093977168","3093977863","US" +"3093977864","3093977871","CO" +"3093977872","3093986367","US" +"3093986368","3093986431","DE" +"3093986432","3093986463","US" +"3093986464","3093986495","GB" +"3093986496","3094020095","US" +"3094020096","3094085631","CA" +"3094085632","3096444927","US" +"3096444928","3096969215","CA" +"3096969216","3097130139","US" +"3097130140","3097130140","A1" +"3097130141","3097493503","US" +"3097493504","3097755647","CA" +"3097755648","3098095615","US" +"3098095616","3098099711","CA" +"3098099712","3098099967","US" +"3098099968","3098100735","SE" +"3098100736","3098101247","SG" +"3098101248","3098103295","US" +"3098103296","3098103551","NL" +"3098103552","3098103807","DE" +"3098103808","3098104063","FR" +"3098104064","3098104319","GB" +"3098104320","3098104575","IL" +"3098104576","3098104831","AU" +"3098104832","3098105087","JP" +"3098105088","3098105855","ES" +"3098105856","3098106111","HK" +"3098106112","3098106623","IN" +"3098106624","3098106879","NL" +"3098106880","3098107135","DE" +"3098107136","3098107391","FR" +"3098107392","3098107647","EU" +"3098107648","3098107903","SE" +"3098107904","3098108159","ES" +"3098108160","3098108415","IL" +"3098108416","3098108671","US" +"3098108672","3098108927","SG" +"3098108928","3098109183","JP" +"3098109184","3098109439","AU" +"3098109440","3098109695","HK" +"3098109696","3098110719","QA" +"3098110720","3098111743","IT" +"3098111744","3098112767","US" +"3098112768","3098113791","AU" +"3098113792","3098148863","US" +"3098148864","3098165247","JM" +"3098165248","3098181631","US" +"3098181632","3098185727","CA" +"3098185728","3098255399","US" +"3098255400","3098255407","BR" +"3098255408","3098255903","US" +"3098255904","3098255911","MV" +"3098255912","3098263551","US" +"3098263552","3098271743","CA" +"3098271744","3098280591","US" +"3098280592","3098280599","PA" +"3098280600","3098281311","US" +"3098281312","3098281343","EG" +"3098281344","3098281503","US" +"3098281504","3098281511","PA" +"3098281512","3098281711","US" +"3098281712","3098281719","PA" +"3098281720","3098281943","US" +"3098281944","3098281951","AU" +"3098281952","3098282327","US" +"3098282328","3098282335","BR" +"3098282336","3098282415","US" +"3098282416","3098282431","BR" +"3098282432","3098282471","US" +"3098282472","3098282479","BR" +"3098282480","3098284311","US" +"3098284312","3098284319","BR" +"3098284320","3098285383","US" +"3098285384","3098285391","BR" +"3098285392","3098285495","US" +"3098285496","3098285503","BR" +"3098285504","3098286191","US" +"3098286192","3098286199","BR" +"3098286200","3098286287","US" +"3098286288","3098286295","IN" +"3098286296","3098286399","US" +"3098286400","3098286431","BR" +"3098286432","3098287711","US" +"3098287712","3098287719","AU" +"3098287720","3098288343","US" +"3098288344","3098288351","BR" +"3098288352","3098288775","US" +"3098288776","3098288783","BR" +"3098288784","3098289495","US" +"3098289496","3098289503","AU" +"3098289504","3098294719","US" +"3098294720","3098294775","BR" +"3098294776","3098296151","US" +"3098296152","3098296159","BR" +"3098296160","3098321663","US" +"3098321664","3098321695","IN" +"3098321696","3098322367","US" +"3098322368","3098322375","BD" +"3098322376","3098322383","US" +"3098322384","3098322391","BD" +"3098322392","3098322695","US" +"3098322696","3098322703","BD" +"3098322704","3098323679","US" +"3098323680","3098323711","EG" +"3098323712","3098326511","US" +"3098326512","3098326519","CN" +"3098326520","3098331151","US" +"3098331152","3098331159","HK" +"3098331160","3098331471","US" +"3098331472","3098331479","CL" +"3098331480","3098333951","US" +"3098333952","3098333959","BD" +"3098333960","3098335119","US" +"3098335120","3098335127","CA" +"3098335128","3098336303","US" +"3098336304","3098336311","MY" +"3098336312","3098364183","US" +"3098364184","3098364191","EG" +"3098364192","3098365535","US" +"3098365536","3098365551","IN" +"3098365552","3098365631","US" +"3098365632","3098365639","AU" +"3098365640","3098366559","US" +"3098366560","3098366575","BR" +"3098366576","3098366839","US" +"3098366840","3098366847","BR" +"3098366848","3098366863","US" +"3098366864","3098366879","BR" +"3098366880","3098366991","US" +"3098366992","3098367007","BR" +"3098367008","3098367023","US" +"3098367024","3098367063","BR" +"3098367064","3098367087","US" +"3098367088","3098367103","BR" +"3098367104","3098370895","US" +"3098370896","3098370903","BR" +"3098370904","3098371495","US" +"3098371496","3098371503","JO" +"3098371504","3098373351","US" +"3098373352","3098373359","BR" +"3098373360","3098373927","US" +"3098373928","3098373935","MX" +"3098373936","3098375583","US" +"3098375584","3098375615","BR" +"3098375616","3098376863","US" +"3098376864","3098376895","BR" +"3098376896","3098377727","US" +"3098377728","3098377759","AR" +"3098377760","3098380047","US" +"3098380048","3098380063","IN" +"3098380064","3098380527","US" +"3098380528","3098380535","IN" +"3098380536","3098381455","US" +"3098381456","3098381471","LT" +"3098381472","3098385727","US" +"3098385728","3098385791","AF" +"3098385792","3098387607","US" +"3098387608","3098387615","RO" +"3098387616","3098388175","US" +"3098388176","3098388183","SA" +"3098388184","3098390271","US" +"3098390272","3098390279","ES" +"3098390280","3098395407","US" +"3098395408","3098395415","BR" +"3098395416","3098402799","US" +"3098402800","3098402807","ES" +"3098402808","3098407295","US" +"3098407296","3098407303","MX" +"3098407304","3098408735","US" +"3098408736","3098408743","AR" +"3098408744","3098408927","US" +"3098408928","3098408935","ES" +"3098408936","3098476543","US" +"3098476544","3098492927","CA" +"3098492928","3098492991","US" +"3098492992","3098493023","CA" +"3098493024","3098494719","US" +"3098494720","3098495743","CA" +"3098495744","3098495999","US" +"3098496000","3098496255","CA" +"3098496256","3098503423","US" +"3098503424","3098503679","CA" +"3098503680","3098507263","US" +"3098507264","3098507519","CA" +"3098507520","3098507807","US" +"3098507808","3098507823","AU" +"3098507824","3098507903","US" +"3098507904","3098507919","AR" +"3098507920","3103784959","US" +"3103784960","3107979263","EU" +"3120562176","3120594943","CO" +"3120594944","3120599039","AR" +"3120599040","3120601087","EC" +"3120601088","3120602111","AR" +"3120602112","3120603135","BO" +"3120603136","3120610303","AR" +"3120610304","3120611327","PY" +"3120611328","3120627711","AR" +"3120627712","3120644095","NI" +"3120644096","3120660479","DO" +"3120660480","3120668671","PA" +"3120668672","3120676863","CO" +"3120676864","3120680959","HT" +"3120680960","3120691199","AR" +"3120691200","3120693247","CO" +"3120693248","3120726015","BO" +"3120726016","3120734207","HN" +"3120742400","3120758783","PY" +"3120758784","3120824319","EC" +"3120824320","3120840703","CR" +"3120840704","3120857087","AR" +"3120857088","3120922623","EC" +"3120922624","3120930815","PA" +"3120939008","3120949247","AR" +"3120949248","3120951295","CL" +"3120951296","3120955391","AR" +"3120955392","3121086463","DO" +"3121086464","3121151999","UY" +"3121152000","3121348607","CL" +"3121348608","3121479679","AR" +"3121479680","3121545215","VE" +"3121545216","3121610751","CR" +"3121610752","3121741823","PY" +"3121741824","3121872895","AR" +"3121872896","3122003967","CL" +"3122003968","3122135039","AR" +"3122135040","3122282495","VE" +"3122282496","3122286591","AR" +"3122286592","3122290687","US" +"3122290688","3122292735","AR" +"3122292736","3122294783","US" +"3122294784","3122298879","CR" +"3122298880","3122331647","VE" +"3122331648","3122364415","BO" +"3122364416","3122659327","CO" +"3122659328","3122675711","CR" +"3122675712","3122692095","SV" +"3122692096","3122700287","HN" +"3122700288","3122716671","CR" +"3122716672","3122720767","HN" +"3122720768","3122722815","GT" +"3122722816","3122724863","SV" +"3122724864","3122741247","AR" +"3122741248","3122757631","DO" +"3122757632","3122774015","EC" +"3122774016","3122790399","AR" +"3122790400","3123052543","CL" +"3123052544","3123183615","AR" +"3123183616","3123314687","CL" +"3123314688","3123380223","EC" +"3123380224","3123412991","CO" +"3123412992","3123429375","EC" +"3123445760","3123576831","TT" +"3123576832","3123707903","EC" +"3123707904","3124232191","UY" +"3124232192","3124760751","AR" +"3124760752","3124760759","MX" +"3124760760","3124781055","AR" +"3124789248","3124822015","CR" +"3124822016","3124838399","EC" +"3124838400","3124848639","AR" +"3124848640","3124849663","PA" +"3124849664","3124850687","AR" +"3124850688","3124854783","HN" +"3124854784","3124887551","CL" +"3124887552","3124953087","EC" +"3124953088","3125018623","CL" +"3125018624","3125280767","EC" +"3125280768","3125542911","PA" +"3125542912","3125673983","NI" +"3125673984","3125805055","CL" +"3125805056","3126329343","CO" +"3126329344","3126853631","VE" +"3126853632","3126870015","AR" +"3126870016","3126874111","VE" +"3126874112","3126878207","CR" +"3126878208","3126886399","PA" +"3126886400","3126918143","AR" +"3126918144","3126919167","HN" +"3126919168","3127115775","CO" +"3127115776","3127181311","AR" +"3127181312","3127246847","EC" +"3127246848","3127345151","CO" +"3127345152","3127640063","CL" +"3127640064","3127902207","AR" +"3127902208","3128426495","CO" +"3128426496","3128492031","DO" +"3128492032","3128524799","CO" +"3128524800","3128541183","AR" +"3128541184","3128557567","BO" +"3128557568","3129999359","AR" +"3129999360","3130261503","CO" +"3130261504","3130277887","CL" +"3130294272","3130302463","AR" +"3130302464","3130312703","PA" +"3130312704","3130314751","AR" +"3130314752","3130315775","CL" +"3130315776","3130316799","CR" +"3130316800","3130318847","AN" +"3130318848","3130327039","AR" +"3130327040","3130392575","DO" +"3130458112","3130523647","GT" +"3130523648","3130654719","AR" +"3130654720","3130785791","CO" +"3130785792","3130818559","CL" +"3130851328","3130982399","AR" +"3130982400","3131006975","CO" +"3131006976","3131011071","AN" +"3131011072","3131012095","CO" +"3131012096","3131013119","PA" +"3131013120","3131015167","AR" +"3131015168","3131047935","CR" +"3131047936","3131310079","PE" +"3131310080","3131572223","VE" +"3131572224","3131834367","CO" +"3131834368","3132096511","CL" +"3132096512","3132227583","CR" +"3132227584","3132293119","EC" +"3132358656","3132489727","CO" +"3132489728","3132555263","AR" +"3132620800","3132915711","VE" +"3132915712","3132948479","PA" +"3132948480","3133014015","AR" +"3133014016","3133046783","HT" +"3133046784","3133067263","AR" +"3133067264","3133073407","PA" +"3133073408","3133074431","AN" +"3133074432","3133075455","CL" +"3133075456","3133079551","AN" +"3133079552","3133145087","AR" +"3133145088","3145727999","BR" +"3145728000","3154116607","MX" +"3154116608","3154124799","RU" +"3154124800","3154126847","PL" +"3154126848","3154128895","RU" +"3154128896","3154132991","EE" +"3154132992","3154157567","UA" +"3154157568","3154173951","RU" +"3154173952","3154182143","MD" +"3154182144","3154247679","DE" +"3154247680","3154313215","RS" +"3154313216","3154378751","TR" +"3154378752","3154444287","GR" +"3154444288","3154509823","BE" +"3154509824","3154575359","HU" +"3154575360","3154640895","FR" +"3154640896","3155165183","IT" +"3155165184","3155427327","RU" +"3155427328","3155506331","AT" +"3155506332","3155506335","ES" +"3155506336","3155689471","AT" +"3155689472","3155951615","RO" +"3155951616","3156213759","GB" +"3156213760","3156279295","RU" +"3156279296","3156344831","PL" +"3156344832","3156410367","IR" +"3156410368","3156475903","RU" +"3156475904","3156539391","HU" +"3156539392","3156539647","RO" +"3156539648","3156541439","HU" +"3156541440","3156606975","PT" +"3156606976","3156672511","TR" +"3156672512","3156738047","GB" +"3156738048","3156759431","DE" +"3156759432","3156759432","GB" +"3156759433","3156791439","DE" +"3156791440","3156791455","NL" +"3156791456","3156793751","DE" +"3156793752","3156793759","IT" +"3156793760","3156803327","DE" +"3156803328","3156803359","CH" +"3156803360","3156803583","DE" +"3156803584","3156869119","TR" +"3156869120","3156901887","LU" +"3156901888","3156910079","SG" +"3156910080","3156918271","US" +"3156918272","3156934655","LU" +"3156934656","3157000191","RU" +"3157000192","3157008383","MK" +"3157008384","3157016575","RU" +"3157016576","3157024767","BE" +"3157024768","3157032959","RU" +"3157032960","3157065727","HU" +"3157065728","3157131263","AT" +"3157131264","3157196799","DE" +"3157196800","3157262335","PL" +"3157262336","3157786623","SA" +"3157786624","3158048767","TR" +"3158048768","3158310911","CH" +"3158310912","3158312959","FI" +"3158312960","3158315007","AZ" +"3158315008","3158317055","DE" +"3158317056","3158319103","SI" +"3158319104","3158321151","GB" +"3158321152","3158321407","DE" +"3158321408","3158321423","US" +"3158321424","3158322687","DE" +"3158322688","3158322879","NL" +"3158322880","3158322943","DE" +"3158322944","3158323071","NL" +"3158323072","3158323199","DE" +"3158323200","3158325247","BE" +"3158325248","3158327295","DE" +"3158327296","3158329343","NL" +"3158329344","3158331391","BE" +"3158331392","3158333439","PL" +"3158333440","3158335487","IT" +"3158335488","3158337535","IL" +"3158337536","3158339583","SI" +"3158339584","3158341631","RU" +"3158341632","3158343679","IT" +"3158343680","3158345727","RU" +"3158345728","3158347775","CY" +"3158347776","3158349823","RU" +"3158349824","3158351871","DK" +"3158351872","3158355967","RU" +"3158355968","3158358015","LV" +"3158358016","3158360063","GB" +"3158360064","3158362111","DE" +"3158362112","3158364159","IL" +"3158364160","3158366207","TR" +"3158366208","3158368255","RU" +"3158368256","3158370303","FR" +"3158370304","3158372351","BE" +"3158372352","3158374399","FR" +"3158374400","3158376447","DE" +"3158376448","3158378495","IT" +"3158378496","3158382591","RU" +"3158382592","3158384639","OM" +"3158384640","3158386687","GB" +"3158386688","3158388735","PL" +"3158388736","3158390783","RU" +"3158390784","3158392831","GB" +"3158392832","3158394879","RU" +"3158394880","3158395007","AT" +"3158395008","3158395135","GB" +"3158395136","3158395167","AT" +"3158395168","3158395175","DE" +"3158395176","3158395191","AT" +"3158395192","3158395199","DE" +"3158395200","3158395247","AT" +"3158395248","3158395295","DE" +"3158395296","3158395359","AT" +"3158395360","3158395367","DE" +"3158395368","3158395431","AT" +"3158395432","3158395439","DE" +"3158395440","3158395647","AT" +"3158395648","3158395663","DE" +"3158395664","3158395687","AT" +"3158395688","3158395695","DE" +"3158395696","3158395711","AT" +"3158395712","3158395743","DE" +"3158395744","3158396287","AT" +"3158396288","3158396327","DE" +"3158396328","3158396927","AT" +"3158396928","3158398975","IT" +"3158398976","3158401023","ES" +"3158401024","3158403071","GB" +"3158403072","3158405119","RU" +"3158405120","3158407167","GB" +"3158407168","3158407423","US" +"3158407424","3158409215","FR" +"3158409216","3158411263","RU" +"3158411264","3158413311","FI" +"3158413312","3158415359","DE" +"3158415360","3158417407","SE" +"3158417408","3158419455","NL" +"3158419456","3158421503","FR" +"3158421504","3158423551","GB" +"3158423552","3158424063","MT" +"3158424064","3158424095","NL" +"3158424096","3158424127","MT" +"3158424128","3158424159","IE" +"3158424160","3158425567","MT" +"3158425568","3158425599","IE" +"3158425600","3158427647","NL" +"3158427648","3158429695","DE" +"3158429696","3158431743","RU" +"3158431744","3158433791","BE" +"3158433792","3158435839","NL" +"3158435840","3158439935","RU" +"3158439936","3158441983","GB" +"3158441984","3158444031","EE" +"3158444032","3158446079","BE" +"3158446080","3158448127","NL" +"3158448128","3158452223","RU" +"3158452224","3158454271","DE" +"3158454272","3158458367","EU" +"3158458368","3158474751","GB" +"3158474752","3158507519","OM" +"3158507520","3158573055","FI" +"3158573056","3158638591","RU" +"3158638592","3158704127","LT" +"3158704128","3158835199","KW" +"3158835200","3158851583","IQ" +"3158851584","3158867967","RU" +"3158867968","3158884351","AZ" +"3158884352","3158884607","DE" +"3158884608","3158884863","BE" +"3158884864","3158885119","GB" +"3158885120","3158885887","TR" +"3158885888","3158886143","HK" +"3158886144","3158886175","DE" +"3158886176","3158886207","BZ" +"3158886208","3158886271","DE" +"3158886272","3158886335","RO" +"3158886336","3158887167","DE" +"3158887168","3158887423","CA" +"3158887424","3158889983","DE" +"3158889984","3158890239","HK" +"3158890240","3158891263","DE" +"3158891264","3158891519","CA" +"3158891520","3158891551","DE" +"3158891552","3158891583","GB" +"3158891584","3158891647","RU" +"3158891648","3158891711","DE" +"3158891712","3158891775","RU" +"3158891776","3158892031","PL" +"3158892032","3158892415","DE" +"3158892416","3158892543","GB" +"3158892544","3158892671","DE" +"3158892672","3158892799","RU" +"3158892800","3158893567","DE" +"3158893568","3158893823","GB" +"3158893824","3158895167","DE" +"3158895168","3158895231","RU" +"3158895232","3158895423","DE" +"3158895424","3158895487","RU" +"3158895488","3158895551","MK" +"3158895552","3158895615","AE" +"3158895616","3158896255","DE" +"3158896256","3158896383","IN" +"3158896384","3158897503","DE" +"3158897504","3158897567","RU" +"3158897568","3158897631","DE" +"3158897632","3158897663","BZ" +"3158897664","3158897727","DE" +"3158897728","3158897791","RU" +"3158897792","3158897855","DE" +"3158897856","3158897919","UA" +"3158897920","3158898207","DE" +"3158898208","3158898271","CZ" +"3158898272","3158898335","RU" +"3158898336","3158898431","DE" +"3158898432","3158898687","US" +"3158898688","3158898815","DE" +"3158898816","3158898943","BZ" +"3158898944","3158899199","ES" +"3158899200","3158899455","DE" +"3158899456","3158899711","CA" +"3158899712","3158900735","DE" +"3158900736","3158917119","FR" +"3158917120","3158933503","DE" +"3158933504","3158949887","RU" +"3158949888","3158966271","GR" +"3158966272","3158966687","DE" +"3158966688","3158966719","US" +"3158966720","3158967327","DE" +"3158967328","3158967359","US" +"3158967360","3158967551","DE" +"3158967552","3158967583","US" +"3158967584","3158967807","DE" +"3158967808","3158967839","US" +"3158967840","3158970495","DE" +"3158970496","3158970623","US" +"3158970624","3158970751","DE" +"3158970752","3158970879","US" +"3158970880","3158970975","DE" +"3158970976","3158971135","US" +"3158971136","3158971231","DE" +"3158971232","3158971391","US" +"3158971392","3158971487","DE" +"3158971488","3158971647","US" +"3158971648","3158971775","DE" +"3158971776","3158971903","US" +"3158971904","3158972031","DE" +"3158972032","3158972159","US" +"3158972160","3158972287","DE" +"3158972288","3158972415","US" +"3158972416","3158972543","DE" +"3158972544","3158972671","US" +"3158972672","3158972799","DE" +"3158972800","3158972927","US" +"3158972928","3158973055","DE" +"3158973056","3158973183","US" +"3158973184","3158973311","DE" +"3158973312","3158973439","US" +"3158973440","3158973567","DE" +"3158973568","3158973695","US" +"3158973696","3158973823","DE" +"3158973824","3158973951","US" +"3158973952","3158974079","DE" +"3158974080","3158974207","US" +"3158974208","3158974239","DE" +"3158974240","3158974271","US" +"3158974272","3158974335","DE" +"3158974336","3158974463","US" +"3158974464","3158982655","DE" +"3158982656","3158999039","GB" +"3158999040","3159031807","RO" +"3159031808","3159048191","RU" +"3159048192","3159064575","IR" +"3159064576","3159080959","CZ" +"3159080960","3159097343","RU" +"3159097344","3159359487","ES" +"3159359488","3159621631","PT" +"3159621632","3159883775","ES" +"3159883776","3160145919","NL" +"3160145920","3160147967","RU" +"3160147968","3160150015","CZ" +"3160150016","3160152063","LV" +"3160152064","3160154111","IT" +"3160154112","3160156159","DE" +"3160156160","3160158207","CZ" +"3160158208","3160160255","CH" +"3160160256","3160162303","NL" +"3160162304","3160164351","FR" +"3160164352","3160166399","LV" +"3160166400","3160168447","NO" +"3160168448","3160170495","GB" +"3160170496","3160172543","IT" +"3160172544","3160174591","RU" +"3160174592","3160176639","DE" +"3160176640","3160178687","IT" +"3160178688","3160180735","DE" +"3160180736","3160182783","GB" +"3160182784","3160184831","CH" +"3160184832","3160186879","NL" +"3160186880","3160188927","EE" +"3160188928","3160190975","SE" +"3160190976","3160193023","RU" +"3160193024","3160193279","A2" +"3160193280","3160193535","IT" +"3160193536","3160194543","A2" +"3160194544","3160194551","IT" +"3160194552","3160194687","A2" +"3160194688","3160194815","IT" +"3160194816","3160195071","A2" +"3160195072","3160197119","RU" +"3160197120","3160199167","DE" +"3160199168","3160201215","GE" +"3160201216","3160203263","RU" +"3160203264","3160203775","CH" +"3160203776","3160203783","DE" +"3160203784","3160203807","CH" +"3160203808","3160203815","FR" +"3160203816","3160205311","CH" +"3160205312","3160207359","GB" +"3160207360","3160209407","RU" +"3160209408","3160211455","SE" +"3160211456","3160213503","IE" +"3160213504","3160215551","DE" +"3160215552","3160219647","RU" +"3160219648","3160221695","ES" +"3160221696","3160223743","FR" +"3160223744","3160227839","RU" +"3160227840","3160229887","IR" +"3160229888","3160231935","ES" +"3160231936","3160233983","BE" +"3160233984","3160235519","GE" +"3160235520","3160235775","DE" +"3160235776","3160236031","GE" +"3160236032","3160238079","BE" +"3160238080","3160240127","RU" +"3160240128","3160242175","BE" +"3160242176","3160244223","RS" +"3160244224","3160246271","RU" +"3160246272","3160248319","IT" +"3160248320","3160250367","NL" +"3160250368","3160252415","BE" +"3160252416","3160254463","PL" +"3160254464","3160256511","LU" +"3160256512","3160258559","GB" +"3160258560","3160260607","NO" +"3160260608","3160262655","PT" +"3160262656","3160264703","HU" +"3160264704","3160266751","RU" +"3160266752","3160268799","DE" +"3160268800","3160271615","PT" +"3160271616","3160271935","ES" +"3160271936","3160271951","PT" +"3160271952","3160272895","ES" +"3160272896","3160274943","RU" +"3160274944","3160276991","AT" +"3160276992","3160279039","FR" +"3160279040","3160281087","ES" +"3160281088","3160283135","GB" +"3160283136","3160285183","DE" +"3160285184","3160287231","RU" +"3160287232","3160289279","GB" +"3160289280","3160291327","RU" +"3160291328","3160293375","ES" +"3160293376","3160295423","FI" +"3160295424","3160297471","GB" +"3160297472","3160299519","MD" +"3160299520","3160301567","RU" +"3160301568","3160303615","DE" +"3160303616","3160305663","GB" +"3160305664","3160307711","DE" +"3160307712","3160309759","IT" +"3160309760","3160311807","GB" +"3160311808","3160313855","HU" +"3160313856","3160315903","IT" +"3160315904","3160317951","KZ" +"3160317952","3160322047","RU" +"3160322048","3160324095","CH" +"3160324096","3160328191","IT" +"3160328192","3160330239","FR" +"3160330240","3160332287","RU" +"3160332288","3160332751","NO" +"3160332752","3160332759","SE" +"3160332760","3160332767","AU" +"3160332768","3160333055","NO" +"3160333056","3160333087","CO" +"3160333088","3160333167","NO" +"3160333168","3160333183","PA" +"3160333184","3160334063","NO" +"3160334064","3160334071","PA" +"3160334072","3160334335","NO" +"3160334336","3160336383","RU" +"3160336384","3160338431","CZ" +"3160338432","3160340479","GB" +"3160340480","3160346623","DE" +"3160346624","3160348671","IT" +"3160348672","3160350719","PL" +"3160350720","3160352767","SE" +"3160352768","3160354815","GB" +"3160354816","3160356863","NL" +"3160356864","3160358911","CZ" +"3160358912","3160360959","JO" +"3160360960","3160363007","IT" +"3160363008","3160365055","GB" +"3160365056","3160369151","NL" +"3160369152","3160371199","RU" +"3160371200","3160373247","ES" +"3160373248","3160375295","CZ" +"3160375296","3160377343","GB" +"3160377344","3160379391","NL" +"3160379392","3160381439","TR" +"3160381440","3160382543","UA" +"3160382544","3160382559","DE" +"3160382560","3160383487","UA" +"3160383488","3160385535","SA" +"3160385536","3160387583","NL" +"3160387584","3160389631","RS" +"3160389632","3160391679","RU" +"3160391680","3160395775","GB" +"3160395776","3160397823","EE" +"3160397824","3160399871","ES" +"3160399872","3160401919","SE" +"3160401920","3160403967","DE" +"3160403968","3160406015","NO" +"3160406016","3160408063","ES" +"3160408064","3161456639","DE" +"3161456640","3161473023","PL" +"3161473024","3161489407","SK" +"3161489408","3161505791","LV" +"3161505792","3161538559","RU" +"3161538560","3161554943","NO" +"3161554944","3161571327","RU" +"3161571328","3161587711","UZ" +"3161587712","3161620479","RU" +"3161620480","3161636863","DK" +"3161636864","3161653247","RU" +"3161653248","3161669631","LU" +"3161669632","3161686015","FR" +"3161686016","3161702399","UA" +"3161702400","3161718783","AM" +"3161718784","3161735167","PL" +"3161735168","3161751551","CZ" +"3161751552","3161767935","RU" +"3161767936","3161784319","BH" +"3161784320","3161800703","FI" +"3161800704","3161817087","SA" +"3161817088","3161833471","PL" +"3161833472","3161837567","MK" +"3161837568","3161837695","AT" +"3161837696","3161847551","MK" +"3161847552","3161849855","AT" +"3161849856","3161866239","BE" +"3161866240","3161882623","IR" +"3161882624","3161899007","DE" +"3161899008","3161915391","AT" +"3161915392","3161931775","TR" +"3161931776","3161948159","SA" +"3161948160","3161964543","RO" +"3161964544","3161980927","ES" +"3161980928","3161989119","SK" +"3161989120","3161997311","RU" +"3161997312","3162005503","DK" +"3162005504","3162013695","RS" +"3162013696","3162021887","IL" +"3162021888","3162030079","SE" +"3162030080","3162038271","CZ" +"3162038272","3162046463","RU" +"3162046464","3162054655","PL" +"3162054656","3162062847","NL" +"3162062848","3162071039","SE" +"3162071040","3162087423","IR" +"3162087424","3162095615","SK" +"3162095616","3162103807","GE" +"3162103808","3162104831","FR" +"3162104832","3162110975","NL" +"3162110976","3162111231","FR" +"3162111232","3162111999","NL" +"3162112000","3162120191","PL" +"3162120192","3162128383","GB" +"3162128384","3162129407","NL" +"3162129408","3162129919","DE" +"3162129920","3162136575","NL" +"3162136576","3162144767","ES" +"3162144768","3162152959","SE" +"3162152960","3162161151","RU" +"3162161152","3162169343","CZ" +"3162169344","3162177535","RU" +"3162177536","3162185727","FI" +"3162185728","3162193919","RU" +"3162193920","3162202111","FR" +"3162202112","3162210303","SK" +"3162210304","3162218495","GE" +"3162218496","3162226687","JO" +"3162226688","3162234879","PL" +"3162234880","3162243071","RU" +"3162243072","3162251263","TR" +"3162251264","3162259455","RU" +"3162259456","3162267647","BG" +"3162267648","3162275839","RU" +"3162275840","3162284031","NO" +"3162284032","3162292223","PL" +"3162292224","3162300415","BA" +"3162300416","3162308607","RU" +"3162308608","3162316799","HR" +"3162316800","3162324991","PL" +"3162324992","3162327039","IE" +"3162327040","3162329087","CH" +"3162329088","3162331135","IE" +"3162331136","3162332671","GB" +"3162332672","3162332927","NL" +"3162332928","3162333183","DE" +"3162333184","3162341375","IT" +"3162341376","3162349567","PL" +"3162349568","3162357759","TR" +"3162357760","3162365951","PT" +"3162365952","3162374143","PL" +"3162374144","3162382335","BG" +"3162382336","3162390527","RU" +"3162390528","3162394623","SE" +"3162394624","3162398719","A1" +"3162398720","3162406911","BE" +"3162406912","3162415103","IR" +"3162415104","3162423295","DE" +"3162423296","3162431487","NO" +"3162431488","3162439679","SE" +"3162439680","3162447871","PL" +"3162447872","3162456063","RU" +"3162456064","3162464255","BG" +"3162464256","3162472447","BA" +"3162472448","3162480639","HU" +"3162480640","3162488831","ES" +"3162488832","3162497023","FI" +"3162497024","3162504511","RU" +"3162504512","3162504543","PL" +"3162504544","3162537983","RU" +"3162537984","3162570751","PL" +"3162570752","3162603519","HR" +"3162603520","3162636287","GE" +"3162636288","3162669055","FR" +"3162669056","3162681343","RU" +"3162681344","3162682367","UA" +"3162682368","3162682879","RU" +"3162682880","3162683391","LV" +"3162683392","3162685439","RU" +"3162685440","3162693631","UA" +"3162693632","3162700031","RU" +"3162700032","3162700287","UZ" +"3162700288","3162700291","AL" +"3162700292","3162700295","AG" +"3162700296","3162700299","AR" +"3162700300","3162700303","AM" +"3162700304","3162700307","AU" +"3162700308","3162700311","BS" +"3162700312","3162700315","BY" +"3162700316","3162700319","BZ" +"3162700320","3162700323","BM" +"3162700324","3162700327","BA" +"3162700328","3162700331","BR" +"3162700332","3162700335","VG" +"3162700336","3162700339","BN" +"3162700340","3162700343","BG" +"3162700344","3162700347","CA" +"3162700348","3162700351","KY" +"3162700352","3162700355","CL" +"3162700356","3162700359","CO" +"3162700360","3162700363","CR" +"3162700364","3162700367","HR" +"3162700368","3162700371","CY" +"3162700372","3162700375","DK" +"3162700376","3162700379","EG" +"3162700380","3162700383","FR" +"3162700384","3162700387","DE" +"3162700388","3162700391","GR" +"3162700392","3162700395","HK" +"3162700396","3162700399","HU" +"3162700400","3162700403","IN" +"3162700404","3162700407","ID" +"3162700408","3162700411","IL" +"3162700412","3162700415","IT" +"3162700416","3162700419","JP" +"3162700420","3162700423","KR" +"3162700424","3162700427","LV" +"3162700428","3162700431","LB" +"3162700432","3162700435","LI" +"3162700436","3162700439","MY" +"3162700440","3162700443","MT" +"3162700444","3162700447","MX" +"3162700448","3162700451","NZ" +"3162700452","3162700455","NO" +"3162700456","3162700459","PK" +"3162700460","3162700463","PA" +"3162700464","3162700467","PE" +"3162700468","3162700471","PH" +"3162700472","3162700475","RO" +"3162700476","3162700479","RU" +"3162700480","3162700483","RS" +"3162700484","3162700487","SG" +"3162700488","3162700491","SK" +"3162700492","3162700495","ZA" +"3162700496","3162700499","ES" +"3162700500","3162700503","KN" +"3162700504","3162700507","CH" +"3162700508","3162700511","TW" +"3162700512","3162700515","TH" +"3162700516","3162700519","TR" +"3162700520","3162700523","UA" +"3162700524","3162700527","GB" +"3162700528","3162700531","US" +"3162700532","3162700535","UY" +"3162700536","3162700539","UZ" +"3162700540","3162700543","VE" +"3162700544","3162700799","UA" +"3162700800","3162701823","RU" +"3162701824","3162734591","MD" +"3162734592","3162767359","RU" +"3162767360","3162800127","SA" +"3162800128","3162832895","TR" +"3162832896","3162865663","GR" +"3162865664","3162931199","RU" +"3162931200","3162963967","CZ" +"3162963968","3162996735","OM" +"3162996736","3163029503","IT" +"3163029504","3163062271","DE" +"3163062272","3163095039","IR" +"3163095040","3163127807","PL" +"3163127808","3163160575","BH" +"3163160576","3163161599","DE" +"3163161600","3163161631","IN" +"3163161632","3163161663","DK" +"3163161664","3163161695","US" +"3163161696","3163161727","BG" +"3163161728","3163161759","IN" +"3163161760","3163161823","BR" +"3163161824","3163161855","US" +"3163161856","3163161887","BR" +"3163161888","3163161951","US" +"3163161952","3163162015","DE" +"3163162016","3163162047","US" +"3163162048","3163162079","NL" +"3163162080","3163162111","RU" +"3163162112","3163162143","TR" +"3163162144","3163162207","DE" +"3163162208","3163162239","UA" +"3163162240","3163162271","MA" +"3163162272","3163162303","NL" +"3163162304","3163162335","TH" +"3163162336","3163162367","RU" +"3163162368","3163162399","DE" +"3163162400","3163162431","MA" +"3163162432","3163162463","CY" +"3163162464","3163162495","DE" +"3163162496","3163162527","BR" +"3163162528","3163162559","DE" +"3163162560","3163162623","US" +"3163162624","3163163263","DE" +"3163163264","3163163265","TW" +"3163163266","3163163268","LT" +"3163163269","3163163327","DE" +"3163163328","3163163328","RU" +"3163163329","3163163330","DE" +"3163163331","3163163331","CA" +"3163163332","3163163334","DE" +"3163163335","3163163335","PL" +"3163163336","3163163336","DE" +"3163163337","3163163337","RU" +"3163163338","3163163338","BR" +"3163163339","3163163339","TR" +"3163163340","3163163342","DE" +"3163163343","3163163343","IR" +"3163163344","3163163647","DE" +"3163163648","3163163679","DK" +"3163163680","3163163711","RU" +"3163163712","3163163743","BR" +"3163163744","3163163807","US" +"3163163808","3163163839","CY" +"3163163840","3163163871","PL" +"3163163872","3163163903","RU" +"3163163904","3163163935","GR" +"3163163936","3163163967","BR" +"3163163968","3163163999","US" +"3163164000","3163164031","MA" +"3163164032","3163164063","US" +"3163164064","3163164095","AM" +"3163164096","3163164127","RU" +"3163164128","3163164159","MA" +"3163164160","3163164191","US" +"3163164192","3163164223","DE" +"3163164224","3163164255","LT" +"3163164256","3163164287","DE" +"3163164288","3163164319","CL" +"3163164320","3163164351","RU" +"3163164352","3163164383","DE" +"3163164384","3163164415","US" +"3163164416","3163164447","PL" +"3163164448","3163164479","US" +"3163164480","3163164511","DE" +"3163164512","3163164543","HU" +"3163164544","3163164575","RU" +"3163164576","3163164607","DE" +"3163164608","3163164639","ES" +"3163164640","3163164671","US" +"3163164672","3163165695","DE" +"3163165696","3163165727","US" +"3163165728","3163165759","RU" +"3163165760","3163165791","PL" +"3163165792","3163165823","RU" +"3163165824","3163165855","BR" +"3163165856","3163165887","DE" +"3163165888","3163165919","AR" +"3163165920","3163165983","DE" +"3163165984","3163166015","AR" +"3163166016","3163166047","US" +"3163166048","3163166079","BR" +"3163166080","3163166111","MA" +"3163166112","3163166121","AR" +"3163166122","3163166122","DE" +"3163166123","3163166143","AR" +"3163166144","3163166175","DE" +"3163166176","3163166207","RU" +"3163166208","3163166239","TR" +"3163166240","3163166271","IT" +"3163166272","3163166335","DE" +"3163166336","3163166399","US" +"3163166400","3163166431","DE" +"3163166432","3163166495","BR" +"3163166496","3163166527","RO" +"3163166528","3163166559","DE" +"3163166560","3163166591","HU" +"3163166592","3163166623","IN" +"3163166624","3163166655","AR" +"3163166656","3163166687","DE" +"3163166688","3163166719","RU" +"3163166720","3163167743","DE" +"3163167744","3163167775","RU" +"3163167776","3163167807","GR" +"3163167808","3163167839","US" +"3163167840","3163167871","BR" +"3163167872","3163167903","DE" +"3163167904","3163167935","UA" +"3163167936","3163167967","US" +"3163167968","3163167999","TR" +"3163168000","3163168031","BR" +"3163168032","3163168095","RU" +"3163168096","3163168127","TR" +"3163168128","3163168159","DE" +"3163168160","3163168191","BR" +"3163168192","3163168223","AT" +"3163168224","3163168255","DE" +"3163168256","3163168287","US" +"3163168288","3163168319","BR" +"3163168320","3163168351","DK" +"3163168352","3163168383","RU" +"3163168384","3163168415","TR" +"3163168416","3163168479","DE" +"3163168480","3163168511","US" +"3163168512","3163168543","TR" +"3163168544","3163168575","DE" +"3163168576","3163168607","US" +"3163168608","3163168639","MA" +"3163168640","3163168671","DE" +"3163168672","3163168703","US" +"3163168704","3163168735","GR" +"3163168736","3163169823","DE" +"3163169824","3163169855","RU" +"3163169856","3163169887","US" +"3163169888","3163169951","DE" +"3163169952","3163169983","HR" +"3163169984","3163170015","DE" +"3163170016","3163170047","ES" +"3163170048","3163170079","RU" +"3163170080","3163170111","DE" +"3163170112","3163170143","CZ" +"3163170144","3163170175","ZA" +"3163170176","3163170207","DE" +"3163170208","3163170239","RU" +"3163170240","3163170271","DE" +"3163170272","3163170303","US" +"3163170304","3163170335","IT" +"3163170336","3163170367","RO" +"3163170368","3163170399","US" +"3163170400","3163170431","BR" +"3163170432","3163170463","DE" +"3163170464","3163170495","US" +"3163170496","3163170527","BG" +"3163170528","3163170559","HR" +"3163170560","3163170591","DE" +"3163170592","3163170623","BR" +"3163170624","3163170655","GR" +"3163170656","3163170687","BR" +"3163170688","3163170719","DE" +"3163170720","3163170751","MA" +"3163170752","3163170783","CH" +"3163170784","3163170815","US" +"3163170816","3163171839","DE" +"3163171840","3163171871","NL" +"3163171872","3163171903","RO" +"3163171904","3163171935","BR" +"3163171936","3163171967","DE" +"3163171968","3163171999","US" +"3163172000","3163172031","BR" +"3163172032","3163172063","LT" +"3163172064","3163172127","BR" +"3163172128","3163172159","US" +"3163172160","3163172191","TR" +"3163172192","3163172223","LT" +"3163172224","3163172255","DE" +"3163172256","3163172287","US" +"3163172288","3163172319","DE" +"3163172320","3163172351","NL" +"3163172352","3163172383","FR" +"3163172384","3163172415","GB" +"3163172416","3163172447","DE" +"3163172448","3163172479","US" +"3163172480","3163172511","MA" +"3163172512","3163172543","RU" +"3163172544","3163172575","AR" +"3163172576","3163172607","MA" +"3163172608","3163172639","DK" +"3163172640","3163172671","LV" +"3163172672","3163172703","BR" +"3163172704","3163172735","DE" +"3163172736","3163172767","GR" +"3163172768","3163172799","US" +"3163172800","3163172831","RU" +"3163172832","3163172863","BR" +"3163172864","3163173951","DE" +"3163173952","3163173983","IN" +"3163173984","3163174015","GB" +"3163174016","3163174047","RU" +"3163174048","3163174079","DK" +"3163174080","3163174111","BR" +"3163174112","3163174143","BE" +"3163174144","3163174175","BD" +"3163174176","3163174207","MA" +"3163174208","3163174239","RU" +"3163174240","3163174271","MA" +"3163174272","3163174303","DE" +"3163174304","3163174335","US" +"3163174336","3163174367","RU" +"3163174368","3163174431","DE" +"3163174432","3163174463","BR" +"3163174464","3163174495","DE" +"3163174496","3163174527","US" +"3163174528","3163174559","BD" +"3163174560","3163174591","PL" +"3163174592","3163174623","SE" +"3163174624","3163174655","GB" +"3163174656","3163174687","RU" +"3163174688","3163174719","DE" +"3163174720","3163174751","NL" +"3163174752","3163174783","BR" +"3163174784","3163174815","TW" +"3163174816","3163174847","CA" +"3163174848","3163174879","TR" +"3163174880","3163174911","RU" +"3163174912","3163175967","DE" +"3163175968","3163176031","US" +"3163176032","3163176063","DE" +"3163176064","3163176095","RU" +"3163176096","3163176127","CY" +"3163176128","3163176159","US" +"3163176160","3163176191","DE" +"3163176192","3163176223","US" +"3163176224","3163176255","DE" +"3163176256","3163176287","UG" +"3163176288","3163176319","RU" +"3163176320","3163176351","HU" +"3163176352","3163176383","BR" +"3163176384","3163176415","IN" +"3163176416","3163176479","DE" +"3163176480","3163176511","FR" +"3163176512","3163176543","RU" +"3163176544","3163176575","UG" +"3163176576","3163176607","GR" +"3163176608","3163176671","MA" +"3163176672","3163176735","BR" +"3163176736","3163176767","DE" +"3163176768","3163176799","PL" +"3163176800","3163176831","EG" +"3163176832","3163176895","BR" +"3163176896","3163176927","SE" +"3163176928","3163176959","TH" +"3163176960","3163181831","DE" +"3163181832","3163181833","TR" +"3163181834","3163181840","DE" +"3163181841","3163181841","GB" +"3163181842","3163181842","AL" +"3163181843","3163181853","DE" +"3163181854","3163181854","BD" +"3163181855","3163181855","DK" +"3163181856","3163181856","TR" +"3163181857","3163181858","IN" +"3163181859","3163181861","TR" +"3163181862","3163181862","GB" +"3163181863","3163181865","US" +"3163181866","3163181866","IN" +"3163181867","3163181870","DE" +"3163181871","3163181871","IN" +"3163181872","3163181873","TR" +"3163181874","3163181874","US" +"3163181875","3163181875","TR" +"3163181876","3163181877","DE" +"3163181878","3163181879","IN" +"3163181880","3163181882","CH" +"3163181883","3163181883","IN" +"3163181884","3163181884","US" +"3163181885","3163181885","TR" +"3163181886","3163181888","CY" +"3163181889","3163181890","AL" +"3163181891","3163181892","DE" +"3163181893","3163181893","GB" +"3163181894","3163181894","BD" +"3163181895","3163181896","IN" +"3163181897","3163181897","US" +"3163181898","3163181903","DE" +"3163181904","3163181905","BD" +"3163181906","3163181908","BR" +"3163181909","3163181909","DE" +"3163181910","3163181915","BR" +"3163181916","3163181916","US" +"3163181917","3163181917","IT" +"3163181918","3163181923","DE" +"3163181924","3163181924","TR" +"3163181925","3163181928","DE" +"3163181929","3163181929","TR" +"3163181930","3163181930","IN" +"3163181931","3163181931","MX" +"3163181932","3163181932","TR" +"3163181933","3163181934","DE" +"3163181935","3163181935","UA" +"3163181936","3163181936","IT" +"3163181937","3163182353","DE" +"3163182354","3163182354","RU" +"3163182355","3163182355","DE" +"3163182356","3163182360","RU" +"3163182361","3163182361","DE" +"3163182362","3163182398","RU" +"3163182399","3163182405","DE" +"3163182406","3163182409","RU" +"3163182410","3163182427","DE" +"3163182428","3163182428","RU" +"3163182429","3163182433","DE" +"3163182434","3163182437","RU" +"3163182438","3163182448","DE" +"3163182449","3163182462","RU" +"3163182463","3163182490","DE" +"3163182491","3163182492","RU" +"3163182493","3163182500","DE" +"3163182501","3163182501","RU" +"3163182502","3163182502","DE" +"3163182503","3163182505","RU" +"3163182506","3163182507","DE" +"3163182508","3163182525","RU" +"3163182526","3163182526","BG" +"3163182527","3163182531","DE" +"3163182532","3163182532","RU" +"3163182533","3163182557","DE" +"3163182558","3163182559","RU" +"3163182560","3163182560","BG" +"3163182561","3163182561","RU" +"3163182562","3163182562","BG" +"3163182563","3163182563","RU" +"3163182564","3163182564","BG" +"3163182565","3163182565","RU" +"3163182566","3163182566","BG" +"3163182567","3163182567","RU" +"3163182568","3163182575","BG" +"3163182576","3163182590","RU" +"3163182591","3163184457","DE" +"3163184458","3163184458","PL" +"3163184459","3163184471","DE" +"3163184472","3163184472","BE" +"3163184473","3163184489","DE" +"3163184490","3163184490","US" +"3163184491","3163184496","DE" +"3163184497","3163184499","RU" +"3163184500","3163184500","NL" +"3163184501","3163184501","NO" +"3163184502","3163184502","DE" +"3163184503","3163184503","RU" +"3163184504","3163184505","DE" +"3163184506","3163184506","PL" +"3163184507","3163184509","GR" +"3163184510","3163188804","DE" +"3163188805","3163188806","AR" +"3163188807","3163188807","DE" +"3163188808","3163188810","AR" +"3163188811","3163188812","DE" +"3163188813","3163188813","HU" +"3163188814","3163188834","DE" +"3163188835","3163188835","GB" +"3163188836","3163188844","DE" +"3163188845","3163188845","NL" +"3163188846","3163188847","DE" +"3163188848","3163188848","FR" +"3163188849","3163188849","FI" +"3163188850","3163188851","LK" +"3163188852","3163188853","DE" +"3163188854","3163188854","GB" +"3163188855","3163188855","PL" +"3163188856","3163188860","DE" +"3163188861","3163188862","IN" +"3163188863","3163190553","DE" +"3163190554","3163190554","HU" +"3163190555","3163191246","DE" +"3163191247","3163191247","BR" +"3163191248","3163191248","IT" +"3163191249","3163191250","DE" +"3163191251","3163191252","GB" +"3163191253","3163191256","DE" +"3163191257","3163191257","IN" +"3163191258","3163191259","DE" +"3163191260","3163191262","EE" +"3163191263","3163192192","DE" +"3163192193","3163192193","HU" +"3163192194","3163192194","DE" +"3163192195","3163192196","TW" +"3163192197","3163192198","HU" +"3163192199","3163192201","DE" +"3163192202","3163192202","TR" +"3163192203","3163192205","DE" +"3163192206","3163192207","SG" +"3163192208","3163192208","DE" +"3163192209","3163192210","MX" +"3163192211","3163192211","DE" +"3163192212","3163192212","US" +"3163192213","3163192216","DE" +"3163192217","3163192218","GR" +"3163192219","3163192219","DE" +"3163192220","3163192222","US" +"3163192223","3163192224","DE" +"3163192225","3163192225","TH" +"3163192226","3163192228","DE" +"3163192229","3163192229","AF" +"3163192230","3163192232","DE" +"3163192233","3163192234","AF" +"3163192235","3163192235","DE" +"3163192236","3163192236","HU" +"3163192237","3163192237","VE" +"3163192238","3163192238","DE" +"3163192239","3163192241","US" +"3163192242","3163192242","RU" +"3163192243","3163192245","DE" +"3163192246","3163192246","TW" +"3163192247","3163192249","DE" +"3163192250","3163192250","RU" +"3163192251","3163192251","DE" +"3163192252","3163192255","TR" +"3163192256","3163193281","DE" +"3163193282","3163193283","UA" +"3163193284","3163193314","DE" +"3163193315","3163193315","KR" +"3163193316","3163193319","DE" +"3163193320","3163193320","HR" +"3163193321","3163193343","DE" +"3163193344","3163226111","MD" +"3163226112","3163258879","SA" +"3163258880","3163291647","SY" +"3163291648","3163324415","PT" +"3163324416","3163357183","OM" +"3163357184","3163389951","IE" +"3163389952","3163422719","FR" +"3163422720","3163455487","NL" +"3163455488","3163521023","HU" +"3163521024","3163553791","RU" +"3163553792","3163684863","DE" +"3163684864","3163815935","PL" +"3163815936","3164078079","NO" +"3164078080","3164209151","IT" +"3164209152","3164340223","CH" +"3164340224","3164471295","HU" +"3164471296","3164602367","IR" +"3164602368","3164667903","SY" +"3164667904","3164733439","PS" +"3164733440","3164798975","RU" +"3164798976","3164864511","UA" +"3164930048","3164932095","IE" +"3164932096","3164934143","FR" +"3164934144","3164936191","PL" +"3164936192","3164938239","LT" +"3164938240","3164946431","FR" +"3164946432","3164946435","PL" +"3164946436","3164946439","PT" +"3164946440","3164946447","ES" +"3164946448","3164946479","FR" +"3164946480","3164946483","ES" +"3164946484","3164946495","PL" +"3164946496","3164946499","IT" +"3164946500","3164946503","GB" +"3164946504","3164946507","BE" +"3164946508","3164946511","CZ" +"3164946512","3164946527","ES" +"3164946528","3164946559","GB" +"3164946560","3164946783","FR" +"3164946784","3164946799","BE" +"3164946800","3164947039","FR" +"3164947040","3164947043","ES" +"3164947044","3164947047","GB" +"3164947048","3164947063","FR" +"3164947064","3164947067","NL" +"3164947068","3164947071","IT" +"3164947072","3164947199","DE" +"3164947200","3164947455","FR" +"3164947456","3164947519","PL" +"3164947520","3164947551","ES" +"3164947552","3164947583","DE" +"3164947584","3164947587","FR" +"3164947588","3164947591","DE" +"3164947592","3164947599","GB" +"3164947600","3164947619","FR" +"3164947620","3164947623","ES" +"3164947624","3164947627","GB" +"3164947628","3164947635","ES" +"3164947636","3164947639","DE" +"3164947640","3164947647","FR" +"3164947648","3164947651","CZ" +"3164947652","3164947655","PL" +"3164947656","3164947743","FR" +"3164947744","3164947747","ES" +"3164947748","3164947751","BE" +"3164947752","3164947759","PL" +"3164947760","3164947839","FR" +"3164947840","3164947967","GB" +"3164947968","3164948479","BE" +"3164948480","3164948735","FR" +"3164948736","3164948739","DE" +"3164948740","3164948743","CZ" +"3164948744","3164948747","GB" +"3164948748","3164948787","FR" +"3164948788","3164948791","ES" +"3164948792","3164948795","DE" +"3164948796","3164948799","PL" +"3164948800","3164948839","FR" +"3164948840","3164948843","GB" +"3164948844","3164948847","PL" +"3164948848","3164948851","PT" +"3164948852","3164948855","DE" +"3164948856","3164948863","FR" +"3164948864","3164948927","GB" +"3164948928","3164948943","FR" +"3164948944","3164948991","IE" +"3164948992","3164949087","GB" +"3164949088","3164949095","FR" +"3164949096","3164949103","IT" +"3164949104","3164949107","DE" +"3164949108","3164949111","PL" +"3164949112","3164949119","FR" +"3164949120","3164949123","PT" +"3164949124","3164949131","DE" +"3164949132","3164949135","CZ" +"3164949136","3164949151","FR" +"3164949152","3164949155","NL" +"3164949156","3164949159","DE" +"3164949160","3164949163","PL" +"3164949164","3164949167","FR" +"3164949168","3164949171","IT" +"3164949172","3164949175","FR" +"3164949176","3164949179","ES" +"3164949180","3164949183","FR" +"3164949184","3164949191","PT" +"3164949192","3164949195","DE" +"3164949196","3164949199","NL" +"3164949200","3164949215","FR" +"3164949216","3164949219","PL" +"3164949220","3164949223","FR" +"3164949224","3164949231","PL" +"3164949232","3164949247","BE" +"3164949248","3164949263","FR" +"3164949264","3164949271","PL" +"3164949272","3164949275","GB" +"3164949276","3164949279","CH" +"3164949280","3164949295","BE" +"3164949296","3164949327","FR" +"3164949328","3164949335","PL" +"3164949336","3164949339","IT" +"3164949340","3164949343","GB" +"3164949344","3164949363","FR" +"3164949364","3164949367","DE" +"3164949368","3164949371","NL" +"3164949372","3164949375","GB" +"3164949376","3164949391","FR" +"3164949392","3164949395","GB" +"3164949396","3164949439","FR" +"3164949440","3164949455","GB" +"3164949456","3164949471","PL" +"3164949472","3164949503","FR" +"3164949504","3164950015","BE" +"3164950016","3164950271","GB" +"3164950272","3164950399","DE" +"3164950400","3164950407","ES" +"3164950408","3164950411","FR" +"3164950412","3164950435","PL" +"3164950436","3164950439","ES" +"3164950440","3164950447","FR" +"3164950448","3164950451","ES" +"3164950452","3164950455","CZ" +"3164950456","3164950463","PL" +"3164950464","3164950479","ES" +"3164950480","3164950487","IT" +"3164950488","3164950495","PL" +"3164950496","3164950511","ES" +"3164950512","3164950515","GB" +"3164950516","3164950519","ES" +"3164950520","3164950523","FR" +"3164950524","3164950527","ES" +"3164950528","3164950543","BE" +"3164950544","3164950559","IE" +"3164950560","3164950591","NL" +"3164950592","3164950623","FR" +"3164950624","3164950655","GB" +"3164950656","3164950687","FR" +"3164950688","3164950703","ES" +"3164950704","3164950711","PL" +"3164950712","3164950715","FI" +"3164950716","3164950723","GB" +"3164950724","3164950735","FR" +"3164950736","3164950751","ES" +"3164950752","3164950759","GB" +"3164950760","3164950783","ES" +"3164950784","3164951039","FR" +"3164951040","3164951231","DE" +"3164951232","3164951239","GB" +"3164951240","3164951263","FR" +"3164951264","3164951295","DE" +"3164951296","3164951471","PL" +"3164951472","3164951487","FR" +"3164951488","3164951519","PL" +"3164951520","3164951523","ES" +"3164951524","3164951527","IT" +"3164951528","3164951535","FR" +"3164951536","3164951543","BE" +"3164951544","3164951547","NL" +"3164951548","3164951559","FR" +"3164951560","3164951567","PL" +"3164951568","3164951571","BE" +"3164951572","3164951575","CZ" +"3164951576","3164951583","NL" +"3164951584","3164951591","GB" +"3164951592","3164951595","DE" +"3164951596","3164951615","FR" +"3164951616","3164951663","GB" +"3164951664","3164951671","PL" +"3164951672","3164951675","FR" +"3164951676","3164951683","ES" +"3164951684","3164951687","GB" +"3164951688","3164951691","FR" +"3164951692","3164951695","CH" +"3164951696","3164951711","PL" +"3164951712","3164951743","FR" +"3164951744","3164951775","PL" +"3164951776","3164951807","DE" +"3164951808","3164952191","FR" +"3164952192","3164952207","ES" +"3164952208","3164952215","FR" +"3164952216","3164952219","NL" +"3164952220","3164952223","FR" +"3164952224","3164952239","GB" +"3164952240","3164952243","DE" +"3164952244","3164952247","BE" +"3164952248","3164952255","FR" +"3164952256","3164952319","DE" +"3164952320","3164952575","ES" +"3164952576","3164952831","FR" +"3164952832","3164952959","IT" +"3164952960","3164952975","GB" +"3164952976","3164953007","FR" +"3164953008","3164953023","ES" +"3164953024","3164953087","FR" +"3164953088","3164953151","LT" +"3164953152","3164953215","PL" +"3164953216","3164953247","FR" +"3164953248","3164953255","CH" +"3164953256","3164953263","CZ" +"3164953264","3164953327","FR" +"3164953328","3164953375","PL" +"3164953376","3164953379","NL" +"3164953380","3164953383","GB" +"3164953384","3164953391","PL" +"3164953392","3164953395","IT" +"3164953396","3164953399","NL" +"3164953400","3164953403","BE" +"3164953404","3164953407","PL" +"3164953408","3164953423","BE" +"3164953424","3164953439","FR" +"3164953440","3164953443","PL" +"3164953444","3164953447","DE" +"3164953448","3164953455","ES" +"3164953456","3164953459","FR" +"3164953460","3164953463","GB" +"3164953464","3164953467","FR" +"3164953468","3164953471","GB" +"3164953472","3164953503","PL" +"3164953504","3164953511","FR" +"3164953512","3164953515","PL" +"3164953516","3164953519","IE" +"3164953520","3164953535","FR" +"3164953536","3164953551","PL" +"3164953552","3164953567","IE" +"3164953568","3164953571","FR" +"3164953572","3164953575","GB" +"3164953576","3164953583","IT" +"3164953584","3164954111","ES" +"3164954112","3164954143","FR" +"3164954144","3164954207","NL" +"3164954208","3164954215","FR" +"3164954216","3164954219","IT" +"3164954220","3164954263","FR" +"3164954264","3164954271","DE" +"3164954272","3164954275","IT" +"3164954276","3164954279","GB" +"3164954280","3164954287","FR" +"3164954288","3164954303","ES" +"3164954304","3164954367","DE" +"3164954368","3164954399","FR" +"3164954400","3164954407","PL" +"3164954408","3164954415","CH" +"3164954416","3164954423","ES" +"3164954424","3164954431","PL" +"3164954432","3164954439","ES" +"3164954440","3164954443","NL" +"3164954444","3164954447","PL" +"3164954448","3164954479","FR" +"3164954480","3164954495","GB" +"3164954496","3164954499","PL" +"3164954500","3164954507","FR" +"3164954508","3164954511","ES" +"3164954512","3164954515","PL" +"3164954516","3164954519","IT" +"3164954520","3164954543","GB" +"3164954544","3164954559","LT" +"3164954560","3164954567","PT" +"3164954568","3164954571","FR" +"3164954572","3164954575","CH" +"3164954576","3164954583","FR" +"3164954584","3164954591","DE" +"3164954592","3164954623","PL" +"3164954624","3164956383","FR" +"3164956384","3164956399","DE" +"3164956400","3164956479","FR" +"3164956480","3164956543","GB" +"3164956544","3164958847","FR" +"3164958848","3164958911","IT" +"3164958912","3164958927","CH" +"3164958928","3164958955","FR" +"3164958956","3164958959","GB" +"3164958960","3164959007","FR" +"3164959008","3164959023","PL" +"3164959024","3164959039","FR" +"3164959040","3164959135","DE" +"3164959136","3164959231","ES" +"3164959232","3164959247","FR" +"3164959248","3164959255","ES" +"3164959256","3164959263","PL" +"3164959264","3164959295","GB" +"3164959296","3164959303","IT" +"3164959304","3164959307","FR" +"3164959308","3164959311","IT" +"3164959312","3164959327","ES" +"3164959328","3164959343","BE" +"3164959344","3164959359","PL" +"3164959360","3164959371","FR" +"3164959372","3164959375","IE" +"3164959376","3164959383","DE" +"3164959384","3164959387","PL" +"3164959388","3164959455","FR" +"3164959456","3164959463","DE" +"3164959464","3164959471","GB" +"3164959472","3164959487","NL" +"3164959488","3164959743","ES" +"3164959744","3164959763","FR" +"3164959764","3164959767","PL" +"3164959768","3164959775","FR" +"3164959776","3164959807","DE" +"3164959808","3164959823","IE" +"3164959824","3164959839","FI" +"3164959840","3164959855","BE" +"3164959856","3164959887","FR" +"3164959888","3164959891","CH" +"3164959892","3164959895","LT" +"3164959896","3164959903","PL" +"3164959904","3164959919","DE" +"3164959920","3164959927","FR" +"3164959928","3164959931","GB" +"3164959932","3164959935","IE" +"3164959936","3164959999","FR" +"3164960000","3164960259","DE" +"3164960260","3164960263","FR" +"3164960264","3164960267","LT" +"3164960268","3164960271","NL" +"3164960272","3164960295","FR" +"3164960296","3164960299","IT" +"3164960300","3164960303","GB" +"3164960304","3164960319","FR" +"3164960320","3164960323","ES" +"3164960324","3164960327","IT" +"3164960328","3164960331","CZ" +"3164960332","3164960335","LT" +"3164960336","3164960339","PL" +"3164960340","3164960359","FR" +"3164960360","3164960363","PT" +"3164960364","3164960367","PL" +"3164960368","3164960383","GB" +"3164960384","3164960387","DE" +"3164960388","3164960391","PL" +"3164960392","3164960395","GB" +"3164960396","3164960399","DE" +"3164960400","3164960415","PL" +"3164960416","3164960435","FR" +"3164960436","3164960439","PL" +"3164960440","3164960443","CH" +"3164960444","3164960447","IT" +"3164960448","3164960463","PL" +"3164960464","3164960467","NL" +"3164960468","3164960471","GB" +"3164960472","3164960479","FR" +"3164960480","3164960511","DE" +"3164960512","3164960575","PL" +"3164960576","3164960591","DE" +"3164960592","3164960599","ES" +"3164960600","3164960623","DE" +"3164960624","3164960627","FR" +"3164960628","3164960639","PL" +"3164960640","3164960643","LT" +"3164960644","3164960647","FR" +"3164960648","3164960651","CH" +"3164960652","3164960659","IT" +"3164960660","3164960671","PL" +"3164960672","3164960675","ES" +"3164960676","3164960679","GB" +"3164960680","3164960687","FR" +"3164960688","3164960695","PL" +"3164960696","3164960699","FR" +"3164960700","3164960703","ES" +"3164960704","3164960719","IE" +"3164960720","3164960723","CH" +"3164960724","3164960727","FR" +"3164960728","3164960735","PL" +"3164960736","3164960767","ES" +"3164960768","3164960799","GB" +"3164960800","3164960831","ES" +"3164960832","3164960911","FR" +"3164960912","3164960919","PL" +"3164960920","3164960927","FR" +"3164960928","3164960931","ES" +"3164960932","3164960935","FR" +"3164960936","3164960939","CH" +"3164960940","3164960943","DE" +"3164960944","3164960959","PL" +"3164960960","3164960963","ES" +"3164960964","3164960967","PT" +"3164960968","3164960975","PL" +"3164960976","3164960991","GB" +"3164960992","3164961003","FR" +"3164961004","3164961007","DE" +"3164961008","3164961023","PL" +"3164961024","3164961151","FR" +"3164961152","3164961167","DE" +"3164961168","3164961175","PL" +"3164961176","3164961279","FR" +"3164961280","3164961311","DE" +"3164961312","3164961319","FR" +"3164961320","3164961327","PL" +"3164961328","3164961331","CZ" +"3164961332","3164961363","FR" +"3164961364","3164961367","ES" +"3164961368","3164961375","GB" +"3164961376","3164961379","DE" +"3164961380","3164961387","IT" +"3164961388","3164961471","FR" +"3164961472","3164961503","DE" +"3164961504","3164961519","GB" +"3164961520","3164961527","IT" +"3164961528","3164961535","PL" +"3164961536","3164961551","ES" +"3164961552","3164961559","FR" +"3164961560","3164961563","DE" +"3164961564","3164961583","FR" +"3164961584","3164961599","DE" +"3164961600","3164961631","BE" +"3164961632","3164961647","IT" +"3164961648","3164961655","NL" +"3164961656","3164961663","ES" +"3164961664","3164961695","DE" +"3164961696","3164961727","GB" +"3164961728","3164961731","ES" +"3164961732","3164961735","IT" +"3164961736","3164961739","FR" +"3164961740","3164961743","GB" +"3164961744","3164961763","PL" +"3164961764","3164961767","IT" +"3164961768","3164961775","BE" +"3164961776","3164961783","PL" +"3164961784","3164961791","ES" +"3164961792","3164961807","PL" +"3164961808","3164961815","FR" +"3164961816","3164961819","CZ" +"3164961820","3164961823","DE" +"3164961824","3164961827","ES" +"3164961828","3164961855","FR" +"3164961856","3164961859","PL" +"3164961860","3164961863","ES" +"3164961864","3164961871","FR" +"3164961872","3164961887","IE" +"3164961888","3164961903","ES" +"3164961904","3164961919","GB" +"3164961920","3164961951","IT" +"3164961952","3164961967","ES" +"3164961968","3164961971","IE" +"3164961972","3164961975","ES" +"3164961976","3164961979","FR" +"3164961980","3164961999","DE" +"3164962000","3164962007","BE" +"3164962008","3164962011","DE" +"3164962012","3164962015","PT" +"3164962016","3164962031","FR" +"3164962032","3164962047","NL" +"3164962048","3164962079","FR" +"3164962080","3164962095","ES" +"3164962096","3164962111","FR" +"3164962112","3164962143","GB" +"3164962144","3164962151","ES" +"3164962152","3164962159","DE" +"3164962160","3164962191","FR" +"3164962192","3164962199","DE" +"3164962200","3164962203","GB" +"3164962204","3164962207","PT" +"3164962208","3164962211","FI" +"3164962212","3164962239","FR" +"3164962240","3164962247","PL" +"3164962248","3164962251","FR" +"3164962252","3164962255","DE" +"3164962256","3164962259","NL" +"3164962260","3164962263","DE" +"3164962264","3164962279","ES" +"3164962280","3164962283","DE" +"3164962284","3164962287","ES" +"3164962288","3164962291","FR" +"3164962292","3164962295","ES" +"3164962296","3164962303","PL" +"3164962304","3164962319","NL" +"3164962320","3164962335","FR" +"3164962336","3164962367","DE" +"3164962368","3164962431","PL" +"3164962432","3164962439","GB" +"3164962440","3164962447","PL" +"3164962448","3164962451","PT" +"3164962452","3164962455","FR" +"3164962456","3164962459","IE" +"3164962460","3164962527","FR" +"3164962528","3164962535","PL" +"3164962536","3164962539","CH" +"3164962540","3164962543","CZ" +"3164962544","3164962623","FR" +"3164962624","3164962627","BE" +"3164962628","3164962631","PL" +"3164962632","3164962639","FR" +"3164962640","3164962647","ES" +"3164962648","3164962655","PT" +"3164962656","3164962671","GB" +"3164962672","3164962687","FR" +"3164962688","3164962703","PL" +"3164962704","3164962715","FR" +"3164962716","3164962719","NL" +"3164962720","3164962723","FR" +"3164962724","3164962727","ES" +"3164962728","3164962751","FR" +"3164962752","3164964863","ES" +"3164964864","3164966911","FI" +"3164966912","3164967039","FR" +"3164967040","3164967071","GB" +"3164967072","3164967087","FR" +"3164967088","3164967095","IT" +"3164967096","3164967103","PL" +"3164967104","3164967135","ES" +"3164967136","3164967155","FR" +"3164967156","3164967159","PL" +"3164967160","3164967167","FR" +"3164967168","3164967295","ES" +"3164967296","3164967303","NL" +"3164967304","3164967307","PT" +"3164967308","3164967311","DE" +"3164967312","3164967343","IT" +"3164967344","3164967351","ES" +"3164967352","3164967359","PL" +"3164967360","3164967375","FR" +"3164967376","3164967391","GB" +"3164967392","3164967423","IE" +"3164967424","3164967679","ES" +"3164967680","3164967935","FR" +"3164967936","3164967967","DE" +"3164967968","3164967971","FR" +"3164967972","3164967975","DE" +"3164967976","3164967983","FR" +"3164967984","3164967999","PL" +"3164968000","3164968015","GB" +"3164968016","3164968191","FR" +"3164968192","3164968703","PL" +"3164968704","3164968831","FR" +"3164968832","3164968835","PL" +"3164968836","3164968839","NL" +"3164968840","3164968843","ES" +"3164968844","3164968847","IT" +"3164968848","3164968851","GB" +"3164968852","3164968855","FR" +"3164968856","3164968859","IE" +"3164968860","3164968863","LT" +"3164968864","3164968895","DE" +"3164968896","3164968899","PT" +"3164968900","3164968903","CZ" +"3164968904","3164968907","PL" +"3164968908","3164968911","GB" +"3164968912","3164968927","DE" +"3164968928","3164968947","FR" +"3164968948","3164968951","PL" +"3164968952","3164968955","CZ" +"3164968956","3164968959","DE" +"3164968960","3164968991","GB" +"3164968992","3164969007","IE" +"3164969008","3164969015","PT" +"3164969016","3164969019","NL" +"3164969020","3164969023","BE" +"3164969024","3164969055","PL" +"3164969056","3164969071","PT" +"3164969072","3164969079","FR" +"3164969080","3164969083","PL" +"3164969084","3164969095","ES" +"3164969096","3164969099","PL" +"3164969100","3164969103","DE" +"3164969104","3164969135","FR" +"3164969136","3164969143","ES" +"3164969144","3164969147","FR" +"3164969148","3164969183","GB" +"3164969184","3164969199","FR" +"3164969200","3164969203","LT" +"3164969204","3164969207","ES" +"3164969208","3164969211","PL" +"3164969212","3164969215","DE" +"3164969216","3164969471","FR" +"3164969472","3164969727","PL" +"3164969728","3164969743","DE" +"3164969744","3164969759","FR" +"3164969760","3164969775","IE" +"3164969776","3164969823","FR" +"3164969824","3164969855","DE" +"3164969856","3164969875","FR" +"3164969876","3164969879","DE" +"3164969880","3164969883","ES" +"3164969884","3164969887","PL" +"3164969888","3164969903","IE" +"3164969904","3164969983","FR" +"3164969984","3164970047","IE" +"3164970048","3164970079","GB" +"3164970080","3164970111","DE" +"3164970112","3164970215","FR" +"3164970216","3164970219","PL" +"3164970220","3164970223","FR" +"3164970224","3164970239","GB" +"3164970240","3164970271","IE" +"3164970272","3164970287","BE" +"3164970288","3164970291","PL" +"3164970292","3164970295","DE" +"3164970296","3164970299","ES" +"3164970300","3164970303","DE" +"3164970304","3164970335","ES" +"3164970336","3164970339","NL" +"3164970340","3164970343","BE" +"3164970344","3164970347","FI" +"3164970348","3164970351","GB" +"3164970352","3164970359","FR" +"3164970360","3164970363","DE" +"3164970364","3164970367","ES" +"3164970368","3164970371","PL" +"3164970372","3164970375","ES" +"3164970376","3164970379","FR" +"3164970380","3164970383","PL" +"3164970384","3164970399","IT" +"3164970400","3164970403","FR" +"3164970404","3164970407","CH" +"3164970408","3164970411","IT" +"3164970412","3164970415","GB" +"3164970416","3164970423","FR" +"3164970424","3164970427","IE" +"3164970428","3164970431","PT" +"3164970432","3164970463","FR" +"3164970464","3164970495","GB" +"3164970496","3164970559","PL" +"3164970560","3164970567","FR" +"3164970568","3164970571","GB" +"3164970572","3164970575","LT" +"3164970576","3164970607","FR" +"3164970608","3164970615","ES" +"3164970616","3164970639","FR" +"3164970640","3164970647","ES" +"3164970648","3164970651","GB" +"3164970652","3164970655","FR" +"3164970656","3164970687","NL" +"3164970688","3164970691","GB" +"3164970692","3164970695","FR" +"3164970696","3164970719","PL" +"3164970720","3164970783","FR" +"3164970784","3164970791","PL" +"3164970792","3164970823","FR" +"3164970824","3164970827","BE" +"3164970828","3164970831","CH" +"3164970832","3164970835","IT" +"3164970836","3164970839","PL" +"3164970840","3164970847","GB" +"3164970848","3164970867","FR" +"3164970868","3164970871","NL" +"3164970872","3164970875","BE" +"3164970876","3164970879","NL" +"3164970880","3164970887","FR" +"3164970888","3164970891","GB" +"3164970892","3164970911","FR" +"3164970912","3164970915","NL" +"3164970916","3164970919","FR" +"3164970920","3164970923","GB" +"3164970924","3164970927","LT" +"3164970928","3164970991","FR" +"3164970992","3164971007","BE" +"3164971008","3164971011","IT" +"3164971012","3164971015","IE" +"3164971016","3164971023","PL" +"3164971024","3164971071","FR" +"3164971072","3164971135","DE" +"3164971136","3164971263","GB" +"3164971264","3164971455","DE" +"3164971456","3164971459","FR" +"3164971460","3164971463","IT" +"3164971464","3164971467","CH" +"3164971468","3164971471","DE" +"3164971472","3164971479","NL" +"3164971480","3164971483","FI" +"3164971484","3164971487","PL" +"3164971488","3164971503","ES" +"3164971504","3164971511","PL" +"3164971512","3164971519","CZ" +"3164971520","3164971775","ES" +"3164971776","3164971795","FR" +"3164971796","3164971799","IT" +"3164971800","3164971803","DE" +"3164971804","3164971807","FR" +"3164971808","3164971903","BE" +"3164971904","3164971967","DE" +"3164971968","3164971983","FR" +"3164971984","3164971999","ES" +"3164972000","3164972015","CH" +"3164972016","3164972019","ES" +"3164972020","3164972023","FR" +"3164972024","3164972027","IT" +"3164972028","3164972031","CH" +"3164972032","3164972287","GB" +"3164972288","3164972319","FR" +"3164972320","3164972351","DE" +"3164972352","3164972415","NL" +"3164972416","3164972479","BE" +"3164972480","3164972495","FR" +"3164972496","3164972511","DE" +"3164972512","3164972527","PL" +"3164972528","3164972531","DE" +"3164972532","3164972535","FR" +"3164972536","3164972539","NL" +"3164972540","3164972559","FR" +"3164972560","3164972575","IT" +"3164972576","3164972579","CZ" +"3164972580","3164972583","GB" +"3164972584","3164972587","NL" +"3164972588","3164972591","FR" +"3164972592","3164972595","IE" +"3164972596","3164972599","PL" +"3164972600","3164972607","FR" +"3164972608","3164972639","PL" +"3164972640","3164972655","IT" +"3164972656","3164972671","FR" +"3164972672","3164972679","PL" +"3164972680","3164972691","FR" +"3164972692","3164972695","FI" +"3164972696","3164972699","FR" +"3164972700","3164972703","DE" +"3164972704","3164972735","FR" +"3164972736","3164972767","GB" +"3164972768","3164972799","IT" +"3164972800","3164973311","ES" +"3164973312","3164973407","DE" +"3164973408","3164973415","GB" +"3164973416","3164973419","FR" +"3164973420","3164973423","ES" +"3164973424","3164973439","DE" +"3164973440","3164973503","PL" +"3164973504","3164973511","FR" +"3164973512","3164973515","ES" +"3164973516","3164973519","DE" +"3164973520","3164973551","PL" +"3164973552","3164973555","GB" +"3164973556","3164973559","FR" +"3164973560","3164973563","BE" +"3164973564","3164973575","CZ" +"3164973576","3164973583","PL" +"3164973584","3164973599","CH" +"3164973600","3164973615","IE" +"3164973616","3164973623","BE" +"3164973624","3164973627","PL" +"3164973628","3164973631","CH" +"3164973632","3164973663","IE" +"3164973664","3164973695","ES" +"3164973696","3164973727","DE" +"3164973728","3164973743","GB" +"3164973744","3164973791","FR" +"3164973792","3164973807","DE" +"3164973808","3164973815","GB" +"3164973816","3164973823","FR" +"3164973824","3164973855","DE" +"3164973856","3164973863","PL" +"3164973864","3164973867","FR" +"3164973868","3164973871","ES" +"3164973872","3164973875","PL" +"3164973876","3164973879","GB" +"3164973880","3164973883","IT" +"3164973884","3164973887","DE" +"3164973888","3164973903","GB" +"3164973904","3164973911","FR" +"3164973912","3164973915","DE" +"3164973916","3164973935","FR" +"3164973936","3164973939","GB" +"3164973940","3164973943","BE" +"3164973944","3164973951","PL" +"3164973952","3164974591","FR" +"3164974592","3164974623","PL" +"3164974624","3164974643","FR" +"3164974644","3164974647","PL" +"3164974648","3164974651","PT" +"3164974652","3164974655","DE" +"3164974656","3164974659","FR" +"3164974660","3164974667","GB" +"3164974668","3164974671","DE" +"3164974672","3164974675","FR" +"3164974676","3164974719","PL" +"3164974720","3164974727","FR" +"3164974728","3164974731","PL" +"3164974732","3164974735","IT" +"3164974736","3164974751","PL" +"3164974752","3164974783","FR" +"3164974784","3164974815","GB" +"3164974816","3164974847","FR" +"3164974848","3164975103","GB" +"3164975104","3164975167","CH" +"3164975168","3164975231","GB" +"3164975232","3164975295","IT" +"3164975296","3164975299","BE" +"3164975300","3164975343","ES" +"3164975344","3164975351","GB" +"3164975352","3164975355","NL" +"3164975356","3164975359","FR" +"3164975360","3164975615","ES" +"3164975616","3164975651","FR" +"3164975652","3164975655","PL" +"3164975656","3164975663","FR" +"3164975664","3164975679","PL" +"3164975680","3164975695","GB" +"3164975696","3164975699","PL" +"3164975700","3164975703","DE" +"3164975704","3164975719","PL" +"3164975720","3164975731","ES" +"3164975732","3164975735","PT" +"3164975736","3164975739","BE" +"3164975740","3164975751","PL" +"3164975752","3164975755","NL" +"3164975756","3164975759","ES" +"3164975760","3164975775","PL" +"3164975776","3164975807","FR" +"3164975808","3164975823","PL" +"3164975824","3164975839","ES" +"3164975840","3164975843","DE" +"3164975844","3164975847","PL" +"3164975848","3164975851","ES" +"3164975852","3164975871","PL" +"3164975872","3164975935","FR" +"3164975936","3164975939","ES" +"3164975940","3164975943","PT" +"3164975944","3164975947","PL" +"3164975948","3164975951","NL" +"3164975952","3164975967","GB" +"3164975968","3164975983","NL" +"3164975984","3164975991","DE" +"3164975992","3164976011","PL" +"3164976012","3164976015","ES" +"3164976016","3164976023","PL" +"3164976024","3164976031","ES" +"3164976032","3164976063","FR" +"3164976064","3164976095","PT" +"3164976096","3164976127","PL" +"3164976128","3164976131","NL" +"3164976132","3164976135","GB" +"3164976136","3164976139","FR" +"3164976140","3164976143","GB" +"3164976144","3164976159","FR" +"3164976160","3164976191","GB" +"3164976192","3164976215","FR" +"3164976216","3164976223","PL" +"3164976224","3164976231","FR" +"3164976232","3164976239","ES" +"3164976240","3164976255","IE" +"3164976256","3164976259","GB" +"3164976260","3164976263","DE" +"3164976264","3164976271","PT" +"3164976272","3164976279","FI" +"3164976280","3164976287","PL" +"3164976288","3164976291","FR" +"3164976292","3164976295","CH" +"3164976296","3164976303","IT" +"3164976304","3164976307","FR" +"3164976308","3164976311","IT" +"3164976312","3164976315","GB" +"3164976316","3164976319","FR" +"3164976320","3164976327","DE" +"3164976328","3164976331","FR" +"3164976332","3164976335","PL" +"3164976336","3164976343","FR" +"3164976344","3164976347","PL" +"3164976348","3164976351","ES" +"3164976352","3164976367","DE" +"3164976368","3164976383","PL" +"3164976384","3164976399","FR" +"3164976400","3164976403","ES" +"3164976404","3164976407","FR" +"3164976408","3164976415","DE" +"3164976416","3164976431","IT" +"3164976432","3164976447","PT" +"3164976448","3164976459","FR" +"3164976460","3164976463","DE" +"3164976464","3164976479","ES" +"3164976480","3164976511","PL" +"3164976512","3164976687","FR" +"3164976688","3164976703","PL" +"3164976704","3164976767","FR" +"3164976768","3164976783","DE" +"3164976784","3164976799","CZ" +"3164976800","3164976815","PT" +"3164976816","3164976831","CZ" +"3164976832","3164976835","IT" +"3164976836","3164976839","ES" +"3164976840","3164976847","FR" +"3164976848","3164976863","CH" +"3164976864","3164976895","CZ" +"3164976896","3164977151","FR" +"3164977152","3164977215","PL" +"3164977216","3164977247","DE" +"3164977248","3164977279","ES" +"3164977280","3164977407","FR" +"3164977408","3164977663","PL" +"3164977664","3164977695","GB" +"3164977696","3164977727","IT" +"3164977728","3164977743","LT" +"3164977744","3164977759","PT" +"3164977760","3164977775","NL" +"3164977776","3164977791","PL" +"3164977792","3164977823","FR" +"3164977824","3164977839","GB" +"3164977840","3164977871","FR" +"3164977872","3164977875","GB" +"3164977876","3164977879","NL" +"3164977880","3164977883","DE" +"3164977884","3164977887","GB" +"3164977888","3164977903","IT" +"3164977904","3164977907","DE" +"3164977908","3164977911","BE" +"3164977912","3164977915","CH" +"3164977916","3164977919","CZ" +"3164977920","3164978047","DE" +"3164978048","3164978055","FR" +"3164978056","3164978063","DE" +"3164978064","3164978067","BE" +"3164978068","3164978079","ES" +"3164978080","3164978127","GB" +"3164978128","3164978147","FR" +"3164978148","3164978151","ES" +"3164978152","3164978155","GB" +"3164978156","3164978159","DE" +"3164978160","3164978175","FR" +"3164978176","3164978431","IT" +"3164978432","3164978559","FR" +"3164978560","3164978563","PT" +"3164978564","3164978567","PL" +"3164978568","3164978571","GB" +"3164978572","3164978575","IT" +"3164978576","3164978591","ES" +"3164978592","3164978607","FR" +"3164978608","3164978623","IE" +"3164978624","3164978655","ES" +"3164978656","3164978659","IT" +"3164978660","3164978663","FI" +"3164978664","3164978667","PL" +"3164978668","3164978671","FR" +"3164978672","3164978679","PT" +"3164978680","3164978943","PL" +"3164978944","3164978951","PT" +"3164978952","3164978955","PL" +"3164978956","3164978975","FR" +"3164978976","3164978983","ES" +"3164978984","3164978999","PL" +"3164979000","3164979003","FR" +"3164979004","3164979007","DE" +"3164979008","3164979047","FR" +"3164979048","3164979051","BE" +"3164979052","3164979103","FR" +"3164979104","3164979107","PL" +"3164979108","3164979111","GB" +"3164979112","3164979119","PL" +"3164979120","3164979135","NL" +"3164979136","3164979151","FR" +"3164979152","3164979155","PT" +"3164979156","3164979159","FR" +"3164979160","3164979167","PL" +"3164979168","3164979175","DE" +"3164979176","3164979183","FR" +"3164979184","3164979199","DE" +"3164979200","3164995583","FR" +"3164995584","3165061119","RU" +"3165061120","3165126655","SK" +"3165126656","3165192191","RU" +"3165192192","3165257727","GE" +"3165257728","3165323263","RO" +"3165323264","3165388799","ES" +"3165388800","3165519871","RO" +"3165519872","3165585407","DE" +"3165585408","3165650943","CZ" +"3165650944","3166175231","DK" +"3166175232","3166306303","CH" +"3166306304","3166437375","RU" +"3166437376","3166568447","BE" +"3166568448","3166601215","UA" +"3166601216","3166609407","RU" +"3166609408","3166633983","UA" +"3166633984","3166638079","RU" +"3166638080","3166646271","UA" +"3166646272","3166650367","CZ" +"3166650368","3166654463","UA" +"3166654464","3166658559","RU" +"3166658560","3166662655","UA" +"3166662656","3166666751","RU" +"3166666752","3166670847","RO" +"3166670848","3166672895","UA" +"3166672896","3166674943","GB" +"3166674944","3166679039","RU" +"3166679040","3166681087","IR" +"3166681088","3166685183","RU" +"3166685184","3166687231","PL" +"3166687232","3166689279","MD" +"3166689280","3166691327","PL" +"3166691328","3166693375","RU" +"3166693376","3166695423","UA" +"3166695424","3166697471","RU" +"3166697472","3166699519","RO" +"3166699520","3166961663","DE" +"3166961664","3167223807","SI" +"3167223808","3167594831","NL" +"3167594832","3167594839","A2" +"3167594840","3167748095","NL" +"3167748096","3167875071","RO" +"3167875072","3167879167","MD" +"3167879168","3167940095","RO" +"3167940096","3167940351","CY" +"3167940352","3168096255","RO" +"3168096256","3168100351","MD" +"3168100352","3168195583","RO" +"3168195584","3168196095","DE" +"3168196096","3168207103","RO" +"3168207104","3168207359","CY" +"3168207360","3168214527","RO" +"3168214528","3168214783","CY" +"3168214784","3168223743","RO" +"3168223744","3168224255","MD" +"3168224256","3168272383","RO" +"3168272384","3168534527","IT" +"3168534528","3168796671","GB" +"3168796672","3168829439","FR" +"3168829440","3168862207","RO" +"3168862208","3168894975","RU" +"3168894976","3168898303","IL" +"3168898304","3168907263","PS" +"3168907264","3168909055","IL" +"3168909056","3168909311","PS" +"3168909312","3168909823","IL" +"3168909824","3168910591","PS" +"3168910592","3168911871","IL" +"3168911872","3168913919","PS" +"3168913920","3168914175","IL" +"3168914176","3168919807","PS" +"3168919808","3168920063","IL" +"3168920064","3168927743","PS" +"3168927744","3169026047","RU" +"3169026048","3169034239","CZ" +"3169034240","3169042431","GB" +"3169042432","3169042943","GR" +"3169042944","3169043455","BG" +"3169043456","3169044479","GR" +"3169044480","3169046527","NL" +"3169046528","3169050623","AZ" +"3169050624","3169052671","HU" +"3169052672","3169054719","PS" +"3169054720","3169056767","GB" +"3169056768","3169058815","EE" +"3169058816","3169079183","DK" +"3169079184","3169079191","NO" +"3169079192","3169087375","DK" +"3169087376","3169087383","NO" +"3169087384","3169091583","DK" +"3169091584","3169124351","IT" +"3169124352","3169157119","RO" +"3169157120","3169189887","SY" +"3169189888","3169222655","UA" +"3169222656","3169255423","SI" +"3169255424","3169264127","KW" +"3169264128","3169264383","US" +"3169264384","3169264895","KW" +"3169264896","3169264927","OM" +"3169264928","3169265167","KW" +"3169265168","3169265175","IQ" +"3169265176","3169265183","SA" +"3169265184","3169265223","KW" +"3169265224","3169265231","IQ" +"3169265232","3169265295","SA" +"3169265296","3169265303","SD" +"3169265304","3169265311","SA" +"3169265312","3169265567","KW" +"3169265568","3169265583","IQ" +"3169265584","3169278991","KW" +"3169278992","3169279007","SA" +"3169279008","3169279231","KW" +"3169279232","3169279239","IQ" +"3169279240","3169279255","SA" +"3169279256","3169279263","KW" +"3169279264","3169279295","SA" +"3169279296","3169279303","KW" +"3169279304","3169279311","SA" +"3169279312","3169279319","SD" +"3169279320","3169279743","KW" +"3169279744","3169279759","IQ" +"3169279760","3169281023","KW" +"3169281024","3169281279","US" +"3169281280","3169288191","KW" +"3169288192","3169320959","UA" +"3169320960","3169583103","RU" +"3169583104","3169648639","KW" +"3169648640","3169714175","MD" +"3169714176","3169779711","FI" +"3169779712","3169845247","UA" +"3169845248","3169863679","RO" +"3169863680","3169864703","MD" +"3169864704","3169867775","RO" +"3169867776","3169868031","DE" +"3169868032","3169873919","RO" +"3169873920","3169878015","MD" +"3169878016","3169905151","RO" +"3169905152","3169905407","GB" +"3169905408","3169920767","RO" +"3169920768","3169921023","SE" +"3169921024","3169976319","RO" +"3169976320","3170111487","RU" +"3170111488","3170115583","MD" +"3170115584","3170119679","RU" +"3170119680","3170123775","CZ" +"3170123776","3170127871","DK" +"3170127872","3170131967","ES" +"3170131968","3170136063","JO" +"3170136064","3170140159","GB" +"3170140160","3170172927","RU" +"3170172928","3170238463","IR" +"3170238464","3170246655","DE" +"3170246656","3170254847","RS" +"3170254848","3170263039","BA" +"3170263040","3170271231","CZ" +"3170271232","3170279423","PL" +"3170279424","3170287615","RU" +"3170287616","3170289151","GB" +"3170289152","3170289167","BA" +"3170289168","3170295807","GB" +"3170295808","3170303999","RU" +"3170304000","3170312191","SY" +"3170312192","3170320383","RU" +"3170320384","3170328575","JO" +"3170328576","3170336767","UA" +"3170336768","3170363391","RO" +"3170363392","3170363647","SK" +"3170363648","3170369535","RO" +"3170369536","3170500607","SA" +"3170500608","3170631679","PT" +"3170631680","3170664447","PL" +"3170664448","3170697215","HR" +"3170697216","3170729983","IR" +"3170729984","3170762751","AZ" +"3170762752","3170795519","RU" +"3170795520","3170828287","BG" +"3170828288","3170861055","RU" +"3170861056","3170893823","RS" +"3170893824","3179282431","BR" +"3179282432","3187671039","MX" +"3187671040","3187687423","CO" +"3187687424","3187695615","DO" +"3187695616","3187703807","AR" +"3187703808","3187711999","UY" +"3187712000","3187720191","AR" +"3187720192","3187728383","GT" +"3187728384","3187730431","CR" +"3187730432","3187732479","AR" +"3187732480","3187734527","CO" +"3187734528","3187736575","BO" +"3187736576","3187752959","AR" +"3187752960","3187761151","CO" +"3187761152","3187769343","AR" +"3187769344","3187802111","CO" +"3187802112","3187818495","AR" +"3187822592","3187824639","AR" +"3187824640","3187826687","CL" +"3187826688","3187834879","AR" +"3187834880","3187851263","AN" +"3187851264","3187855359","PY" +"3187855360","3187857407","PA" +"3187857408","3187859455","CR" +"3187859456","3187863551","PA" +"3187863552","3187908607","AR" +"3187908608","3187910655","CO" +"3187910656","3187914751","CL" +"3187914752","3187916799","BO" +"3187916800","3187933183","CO" +"3187933184","3187949567","GT" +"3187949568","3187953663","AN" +"3187953664","3187955711","CL" +"3187955712","3187957759","CR" +"3187957760","3187961855","CL" +"3187961856","3187965951","AR" +"3187965952","3187982335","AN" +"3187982336","3187998719","CL" +"3187998720","3188006911","AR" +"3188006912","3188015103","CL" +"3188015104","3188031487","HN" +"3188031488","3188039679","SV" +"3188047872","3188051967","CO" +"3188056064","3188064255","PA" +"3188064256","3188080639","VE" +"3188080640","3188088831","CU" +"3188088832","3188097023","AR" +"3188097024","3188105215","DO" +"3188105216","3188113407","CO" +"3188113408","3188117503","HN" +"3188117504","3188121599","AR" +"3188121600","3188125695","TT" +"3188125696","3188146175","AR" +"3188146176","3188170751","CO" +"3188170752","3188174847","CR" +"3188174848","3188178943","AR" +"3188178944","3188187135","CR" +"3188187136","3188203519","AR" +"3188203520","3188207615","DO" +"3188207616","3188211711","AR" +"3188211712","3188228095","CL" +"3188228096","3188236287","PE" +"3188236288","3188237311","PA" +"3188237312","3188239359","VE" +"3188240384","3188241407","CO" +"3188241408","3188242431","EC" +"3188242432","3188244479","AR" +"3188244480","3188260863","CO" +"3188260864","3188269055","AR" +"3188269056","3188269439","VE" +"3188269440","3188269567","CO" +"3188269568","3188273151","VE" +"3188273152","3188275199","PA" +"3188275200","3188277247","CL" +"3188277248","3188293631","CO" +"3188293632","3188301823","VE" +"3188301824","3188310015","EC" +"3188310016","3188326399","CO" +"3188326400","3188359167","CR" +"3188359168","3188400127","EC" +"3188400128","3188408319","AR" +"3188408320","3188416511","BO" +"3188416512","3188445183","AR" +"3188445184","3188449279","PE" +"3188449280","3188453375","HN" +"3188453376","3188473855","EC" +"3188473856","3188482047","PE" +"3188482048","3188490239","AR" +"3188490240","3188498431","CO" +"3188498432","3188517119","AR" +"3188517120","3188517247","US" +"3188517248","3188523007","AR" +"3188523008","3188539391","CO" +"3188539392","3188543487","CL" +"3188543488","3188545535","PA" +"3188545536","3188547583","AR" +"3188547584","3188551679","CO" +"3188551680","3188552703","AR" +"3188552704","3188553727","CL" +"3188553728","3188555775","AN" +"3188555776","3188572159","CL" +"3188572160","3188576255","CO" +"3188576256","3188597759","AR" +"3188597760","3188598783","PA" +"3188598784","3188600831","AR" +"3188600832","3188604927","CL" +"3188621312","3188625407","GT" +"3188625408","3188627455","AR" +"3188627456","3188628479","CR" +"3188628480","3188637695","AR" +"3188637696","3188645887","PA" +"3188645888","3188662271","CO" +"3188670464","3188674559","HN" +"3188674560","3188686847","AR" +"3188686848","3188690943","EC" +"3188690944","3188695039","CU" +"3188695040","3188703231","VE" +"3188703232","3188981759","AR" +"3188981760","3189178367","CL" +"3189178368","3189211135","PY" +"3189243904","3189637119","CO" +"3189637120","3189768191","AR" +"3189768192","3190030335","PA" +"3190030336","3190292479","VE" +"3190292480","3190554623","PE" +"3190554624","3190816767","CL" +"3190816768","3191078911","AR" +"3191078912","3191087103","CO" +"3191087104","3191091199","AR" +"3191091200","3191093247","BO" +"3191093248","3191095295","AR" +"3191095296","3191099391","EC" +"3191099392","3191103487","AR" +"3191107584","3191111679","PE" +"3191111680","3191128063","PY" +"3191128064","3191132159","EC" +"3191132160","3191136255","AR" +"3191136256","3191144447","DO" +"3191144448","3191156735","SV" +"3191156736","3191169023","HN" +"3191169024","3191193599","SV" +"3191193600","3191209983","HN" +"3191209984","3191275519","CL" +"3191275520","3191341055","AR" +"3191341056","3191406591","GT" +"3191406592","3191439359","SV" +"3191439360","3191455743","EC" +"3191455744","3191472127","AR" +"3191472128","3191603199","TT" +"3191603200","3191607807","CO" +"3191607808","3191608319","CL" +"3191608320","3191611391","CO" +"3191611392","3191619583","VE" +"3191619584","3191734271","CO" +"3191734272","3191799807","SV" +"3191799808","3191865343","EC" +"3191865344","3191930879","UY" +"3191930880","3192389631","CO" +"3192389632","3192913919","VE" +"3192913920","3192946687","GY" +"3192946688","3192979455","DO" +"3192979456","3193044991","PE" +"3193044992","3193110527","CL" +"3193143296","3193176063","TT" +"3193176064","3193307135","CO" +"3193307136","3193438207","SV" +"3193438208","3193569279","AN" +"3193569280","3193634815","CO" +"3193634816","3193700351","CL" +"3193700352","3193733119","HN" +"3193733120","3193765887","AR" +"3193765888","3193774079","TT" +"3193774080","3193775103","PA" +"3193775104","3193776127","GY" +"3193776128","3193777151","AR" +"3193777152","3193778175","VE" +"3193778176","3193782271","AR" +"3193782272","3193798655","TT" +"3193798656","3193806847","CO" +"3193806848","3193810943","CR" +"3193810944","3193815039","PY" +"3193815040","3193823231","AR" +"3193823232","3193827327","CL" +"3193827328","3193831423","CR" +"3193831424","3193864191","DO" +"3193864192","3193872383","EC" +"3193872384","3193880575","AR" +"3193880576","3193896959","VE" +"3193896960","3193929727","CL" +"3193929728","3193962495","EC" +"3193962496","3193987071","CL" +"3193987072","3193991167","EC" +"3193991168","3193995263","AR" +"3193995264","3194028031","CO" +"3194028032","3194044415","AR" +"3194044416","3194052607","CO" +"3194052608","3194056703","TT" +"3194056704","3194058751","AN" +"3194058752","3194060799","AR" +"3194060800","3194068991","CO" +"3194068992","3194071039","PA" +"3194071040","3194073087","CL" +"3194073088","3194077183","HN" +"3194077184","3194085375","CO" +"3194085376","3194093567","VE" +"3194093568","3194126335","SR" +"3194126336","3194130431","AR" +"3194130432","3194134527","BR" +"3194134528","3194140671","AR" +"3194140672","3194142719","CR" +"3194142720","3194159103","CL" +"3194159104","3194165247","HN" +"3194165248","3194175487","SV" +"3194175488","3194177535","AR" +"3194177536","3194179583","EC" +"3194179584","3194181631","AR" +"3194181632","3194182655","CL" +"3194182656","3194183679","BO" +"3194183680","3194187775","UY" +"3194191872","3194224639","CO" +"3194224640","3194355711","CL" +"3194355712","3194363903","AN" +"3194363904","3194367999","CR" +"3194368000","3194370047","BO" +"3194370048","3194372095","PA" +"3194372096","3194380287","HT" +"3194380288","3194388479","BZ" +"3194388480","3194396671","PE" +"3194396672","3194413055","CO" +"3194413056","3194421247","CL" +"3194421248","3194428415","AR" +"3194428416","3194437631","VE" +"3194437632","3194441727","BO" +"3194441728","3194445823","AR" +"3194445824","3194454015","CO" +"3194454016","3194458111","AR" +"3194458112","3194462207","CL" +"3194466304","3194467327","AR" +"3194467328","3194468351","DO" +"3194468352","3194469375","US" +"3194469376","3194470399","CR" +"3194470400","3194486783","AR" +"3194486784","3194494975","BO" +"3194494976","3194507263","AR" +"3194511360","3194515455","AW" +"3194515456","3194519551","GT" +"3194519552","3194535935","PY" +"3194535936","3194585087","AR" +"3194585088","3194589183","HN" +"3194589184","3194591231","AR" +"3194591232","3194592255","PA" +"3194592256","3194593279","GY" +"3194593280","3194595327","AR" +"3194595328","3194596351","PA" +"3194596352","3194597375","HT" +"3194597376","3194601471","AR" +"3194601472","3194602495","AN" +"3194602496","3194605567","AR" +"3194609664","3194613759","AR" +"3194613760","3194617855","PE" +"3194617856","3194626047","NI" +"3194626048","3194630143","AR" +"3194630144","3194634239","NI" +"3194634240","3194638335","CR" +"3194638336","3194640383","AR" +"3194640384","3194642431","BZ" +"3194642432","3194646527","AR" +"3194646528","3194648575","DO" +"3194648576","3194659839","AR" +"3194659840","3194660095","US" +"3194660096","3194663167","AR" +"3194663168","3194663423","US" +"3194663424","3194665983","AR" +"3194665984","3194666239","US" +"3194666240","3194667007","AR" +"3194667008","3194675199","GT" +"3194675200","3194679295","PA" +"3194679296","3194683391","BO" +"3194683392","3194687487","CU" +"3194687488","3194691583","CO" +"3194691584","3194699775","BO" +"3194699776","3194705919","EC" +"3194705920","3194707967","CR" +"3194707968","3194716159","AR" +"3194716160","3194724351","HN" +"3194724352","3194728447","PA" +"3194728448","3194729471","CL" +"3194729472","3194730495","PE" +"3194730496","3194732543","AR" +"3194740736","3194742783","CL" +"3194742784","3194744831","EC" +"3194744832","3194746879","AR" +"3194746880","3194748927","AN" +"3194748928","3194757119","UY" +"3194757120","3194765311","AR" +"3194765312","3194767359","EC" +"3194767360","3194768383","CR" +"3194768384","3194769407","AR" +"3194769408","3194773503","PE" +"3194781696","3194798079","CL" +"3194798080","3194799103","AR" +"3194799104","3194802175","GY" +"3194806272","3194830847","AR" +"3194830848","3194839039","PA" +"3194839040","3194863615","CO" +"3194863616","3194871807","HN" +"3194880000","3194896383","DO" +"3194896384","3194904575","CO" +"3194904576","3194908671","CL" +"3194912768","3194925055","CL" +"3194925056","3194929151","AR" +"3194929152","3194937343","EC" +"3194937344","3194945535","AR" +"3194945536","3194953727","GT" +"3194953728","3194961919","AR" +"3194961920","3194970111","EC" +"3194970112","3194974207","PA" +"3194974208","3194976255","AR" +"3194976256","3194977279","VE" +"3194977280","3194978303","AR" +"3194978304","3194994687","PA" +"3194994688","3195011071","AR" +"3195019264","3195023359","AR" +"3195023360","3195024383","CL" +"3195024384","3195025407","UY" +"3195025408","3195043839","AR" +"3195043840","3195060223","CO" +"3195060224","3195064319","UY" +"3195068416","3195076607","AN" +"3195076608","3195084799","CL" +"3195092992","3195097087","AR" +"3195101184","3195109375","CR" +"3195109376","3195125759","AR" +"3195125760","3195133951","PE" +"3195138048","3195139071","DO" +"3195139072","3195140095","CL" +"3195140096","3195142143","CR" +"3195142144","3195150335","VE" +"3195158528","3195199487","AR" +"3195199488","3195201535","PY" +"3195203584","3195205631","VE" +"3195205632","3195206655","PE" +"3195206656","3195207679","CL" +"3195207680","3195211775","GT" +"3195215872","3195224063","AR" +"3195224064","3195232255","PA" +"3195240448","3195256831","HT" +"3195256832","3195265023","AR" +"3195273216","3195535359","PE" +"3195535360","3195543551","SV" +"3195547648","3195551743","AR" +"3195551744","3195559935","EC" +"3195559936","3195568127","AR" +"3195568128","3195572223","CO" +"3195572224","3195576319","AR" +"3195576320","3195580415","CL" +"3195584512","3195592703","HT" +"3195592704","3195596799","PA" +"3195600896","3195633663","CL" +"3195633664","3195641855","CO" +"3195641856","3195645951","PY" +"3195650048","3195654143","GT" +"3195658240","3195662335","VE" +"3195662336","3195666431","AN" +"3195666432","3195686911","AR" +"3195691008","3195699199","DO" +"3195699200","3195703295","AR" +"3195707392","3195711487","PA" +"3195715584","3195731967","AR" +"3195731968","3195736063","EC" +"3195740160","3195744255","PA" +"3195744256","3195748351","EC" +"3195748352","3195752447","CL" +"3195756544","3195763711","AR" +"3195763712","3195764735","BO" +"3195764736","3195768831","CR" +"3195772928","3195781119","VE" +"3195781120","3195797503","PA" +"3195797504","3195801599","AR" +"3195805696","3195807743","NI" +"3195807744","3195809791","BZ" +"3195809792","3195811839","PE" +"3195811840","3195813887","AR" +"3195813888","3195822079","DO" +"3195822080","3195830271","CO" +"3195830272","3195838463","AR" +"3195838464","3195840511","HN" +"3195846656","3195852799","AR" +"3195852800","3195853823","AN" +"3195853824","3195854847","GY" +"3195854848","3195859967","AR" +"3195859968","3195862015","CR" +"3195862016","3195863039","AR" +"3195863040","3196092415","CO" +"3196092416","3196125183","PY" +"3196125184","3196190719","BO" +"3196190720","3196207103","HN" +"3196207104","3196223487","CO" +"3196223488","3196305407","EC" +"3196305408","3196321791","CO" +"3196321792","3196583935","UY" +"3196583936","3196846079","AR" +"3196846080","3196977151","PA" +"3196977152","3197042687","VE" +"3197042688","3197075455","CO" +"3197075456","3197108223","GT" +"3197108224","3197370367","CO" +"3197370368","3197501439","GT" +"3197501440","3197566975","SV" +"3197566976","3197599743","CL" +"3197599744","3197600767","GT" +"3197600768","3197601791","CR" +"3197601792","3197612031","AR" +"3197612032","3197616127","SV" +"3197616128","3197632511","CO" +"3197632512","3197698047","EC" +"3197698048","3197730815","VE" +"3197730816","3197763583","CL" +"3197763584","3197894655","EC" +"3197894656","3198156799","CO" +"3198156800","3198484479","CL" +"3198484480","3198550015","CO" +"3198550016","3198681087","DO" +"3198681088","3198877695","VE" +"3198877696","3198894079","CR" +"3198910464","3198926847","CL" +"3198926848","3198943231","BO" +"3198943232","3199467519","AR" +"3199504384","3199505407","AR" +"3199533056","3199549439","BO" +"3199549440","3199565823","AR" +"3199565824","3199582207","NI" +"3199582208","3199598591","HN" +"3199598592","3199631359","CO" +"3199631360","3199729663","AR" +"3199729664","3199762431","NI" +"3199762432","3199778815","CO" +"3199778816","3199779839","AR" +"3199779840","3199780863","CR" +"3199780864","3199782911","CO" +"3199782912","3199784959","AR" +"3199784960","3199785983","EC" +"3199785984","3199795199","AR" +"3199795200","3199819775","AN" +"3199819776","3199820799","CR" +"3199820800","3199822847","AR" +"3199822848","3199827967","HN" +"3199827968","3199860735","AR" +"3199860736","3199926271","BO" +"3199926272","3199991807","PE" +"3199991808","3200516095","AR" +"3200516096","3200565247","CL" +"3200565248","3200569343","HT" +"3200569344","3200573439","CL" +"3200573440","3200577535","AR" +"3200581632","3200614399","BZ" +"3200614400","3200647167","AR" +"3200647168","3201302527","VE" +"3201302528","3201433599","CL" +"3201433600","3201499135","AR" +"3201499136","3201515519","CL" +"3201515520","3201522687","AR" +"3201522688","3201531903","CR" +"3201531904","3201533951","AR" +"3201533952","3201534975","HN" +"3201534976","3201535999","CO" +"3201536000","3201540095","AR" +"3201540096","3201544191","CL" +"3201548288","3201556479","AR" +"3201556480","3201560575","BO" +"3201560576","3201561599","PY" +"3201561600","3201562623","AR" +"3201562624","3201563647","CL" +"3201563648","3201564671","PA" +"3201564672","3201630207","NI" +"3201630208","3201695743","TT" +"3201695744","3201761279","EC" +"3201761280","3201826815","CL" +"3201826816","3201884159","AR" +"3201884160","3201888255","VE" +"3201888256","3201925119","AR" +"3201925120","3201957887","CL" +"3201957888","3202088959","PA" +"3202088960","3202220031","AR" +"3202220032","3202351103","PE" +"3202351104","3202875391","AR" +"3202875392","3203399679","PE" +"3203399680","3203465215","CO" +"3203465216","3203530751","CR" +"3203530752","3203531519","CO" +"3203531520","3203531775","PA" +"3203531776","3203532287","CO" +"3203532288","3203532543","PA" +"3203532544","3203532799","CO" +"3203532800","3203534847","PA" +"3203534848","3203535103","AN" +"3203535104","3203535359","CO" +"3203535360","3203535615","AN" +"3203535616","3203535871","CO" +"3203535872","3203536383","PA" +"3203536384","3203537919","CO" +"3203537920","3203538431","GT" +"3203538432","3203538943","CO" +"3203538944","3203539967","BZ" +"3203539968","3203547135","CO" +"3203547136","3203549183","PA" +"3203549184","3203661823","CO" +"3203661824","3203923967","AR" +"3203923968","3204448255","CO" +"3221233664","3221237759","US" +"3221291008","3221422079","US" +"3221487616","3221560319","US" +"3221560320","3221561343","GB" +"3221561344","3221562367","US" +"3221562368","3221562623","SE" +"3221562624","3221565951","US" +"3221565952","3221566207","SE" +"3221566464","3221567743","US" +"3221568256","3221568511","FR" +"3221568768","3221569279","FR" +"3221569280","3221576191","US" +"3221576192","3221576447","KR" +"3221576448","3221577727","US" +"3221577728","3221577983","CA" +"3221577984","3221578239","IT" +"3221578240","3221589503","US" +"3221589504","3221589759","FR" +"3221589760","3221590015","US" +"3221590016","3221590271","CA" +"3221590272","3221590527","DE" +"3221590528","3221594623","US" +"3221594624","3221594879","AT" +"3221594880","3221605375","US" +"3221605376","3221605887","CA" +"3221605888","3221608447","US" +"3221608448","3221608703","JP" +"3221608704","3221614335","US" +"3221614336","3221614591","GB" +"3221614592","3221614847","AU" +"3221615104","3221616269","US" +"3221616270","3221616270","AP" +"3221616271","3221618175","US" +"3221618176","3221618431","GB" +"3221618688","3221618943","GB" +"3221618944","3221633791","US" +"3221633792","3221634047","FR" +"3221634048","3221640191","US" +"3221640192","3221640447","NL" +"3221640448","3221647103","US" +"3221647104","3221647359","FR" +"3221647360","3221656831","US" +"3221656832","3221657087","AU" +"3221657088","3221664255","US" +"3221664256","3221664511","EU" +"3221664512","3221801983","US" +"3221801984","3221802239","IN" +"3221802240","3221803775","US" +"3221803776","3221804031","IN" +"3221804032","3221806079","US" +"3221806080","3221806335","IN" +"3221806336","3221806591","US" +"3221806592","3221806847","IN" +"3221806848","3221843967","US" +"3221843968","3221844223","EU" +"3221844224","3221993727","US" +"3221993728","3221993983","EU" +"3221993984","3222003967","US" +"3222003968","3222004223","AP" +"3222004224","3222011903","US" +"3222012160","3222012415","GB" +"3222012672","3222023423","US" +"3222023936","3222024191","IT" +"3222024192","3222025727","US" +"3222025728","3222025983","NL" +"3222026240","3222027775","US" +"3222027776","3222028031","CA" +"3222028032","3222030335","US" +"3222030336","3222030847","GB" +"3222030848","3222031359","US" +"3222031360","3222031615","AU" +"3222031616","3222031871","IT" +"3222031872","3222032639","US" +"3222032640","3222032895","DE" +"3222032896","3222036479","US" +"3222036480","3222036735","FR" +"3222036736","3222036991","US" +"3222036992","3222037247","CA" +"3222037248","3222037503","GB" +"3222037504","3222038527","US" +"3222039552","3222044671","US" +"3222044928","3222045183","CA" +"3222045184","3222055935","US" +"3222056192","3222056447","US" +"3222056448","3222059007","CA" +"3222059008","3222061055","US" +"3222061056","3222061823","IT" +"3222061824","3222066943","US" +"3222066944","3222067199","CA" +"3222067200","3222067455","US" +"3222067456","3222067967","CH" +"3222068224","3222071039","US" +"3222071040","3222071295","GB" +"3222071296","3222071551","PT" +"3222071552","3222072063","US" +"3222072064","3222072319","SE" +"3222072320","3222075135","US" +"3222075136","3222075391","CH" +"3222075392","3222274047","US" +"3222290432","3222305535","US" +"3222305536","3222309119","SE" +"3222309120","3222309375","DE" +"3222309376","3222313727","SE" +"3222313728","3222316799","CH" +"3222316800","3222319615","US" +"3222319616","3222320127","JP" +"3222320128","3222320383","AU" +"3222320384","3222320895","US" +"3222320896","3222326015","NL" +"3222326016","3222326527","US" +"3222326528","3222339583","CA" +"3222339584","3222405375","US" +"3222405376","3222405631","GB" +"3222405632","3222406143","US" +"3222406144","3222406399","EU" +"3222406400","3222407167","US" +"3222407168","3222407423","EU" +"3222407424","3222409471","US" +"3222409472","3222409727","AP" +"3222409728","3222455039","US" +"3222455040","3222455295","GB" +"3222455296","3222466559","US" +"3222466560","3222466815","EU" +"3222466816","3222599167","US" +"3222599168","3222599423","AP" +"3222599424","3222600447","US" +"3222600448","3222600703","AP" +"3222600704","3222741759","US" +"3222741760","3222742015","AP" +"3222742016","3222775807","US" +"3222775808","3222776063","AP" +"3222776064","3222868735","US" +"3222868736","3222868991","EU" +"3222868992","3222869503","US" +"3222869504","3222869759","GB" +"3222869760","3222872319","US" +"3222872320","3222872575","CA" +"3222872576","3222874623","US" +"3222874624","3222874848","AP" +"3222874849","3222874849","MY" +"3222874850","3222874879","AP" +"3222874880","3222876159","US" +"3222876160","3222876415","AP" +"3222876416","3222890751","US" +"3222890752","3222891007","CA" +"3222891008","3222936575","US" +"3222936576","3222940927","CH" +"3222940928","3222941183","GB" +"3222941184","3222941695","CH" +"3222941696","3222952703","US" +"3222952704","3222952959","JP" +"3222952960","3222953215","US" +"3222953216","3222953727","JP" +"3222953728","3222953983","US" +"3222953984","3222954239","JP" +"3222954240","3222954495","US" +"3222955008","3222956031","US" +"3222956032","3222964223","FI" +"3222964224","3222964479","US" +"3222966272","3222968831","US" +"3222968832","3222973951","NL" +"3222973952","3222979071","DE" +"3222979072","3222983167","US" +"3222983168","3222983935","CA" +"3222983936","3222984447","US" +"3222984704","3222988543","AU" +"3222988544","3222988799","PT" +"3222988800","3222989055","AU" +"3222989056","3222989311","US" +"3222989312","3222989567","GB" +"3222989568","3222989823","CA" +"3222989824","3222990079","PT" +"3222990080","3222990591","AT" +"3222990592","3222990847","PT" +"3222990848","3223077119","US" +"3223077120","3223077375","EU" +"3223077376","3223191551","US" +"3223199744","3223207935","US" +"3223214848","3223215103","US" +"3223215104","3223215359","AU" +"3223215360","3223215871","US" +"3223216128","3223224319","US" +"3223227904","3223228159","CA" +"3223229184","3223229695","US" +"3223229696","3223229951","CA" +"3223240448","3223240703","US" +"3223242752","3223243007","US" +"3223243264","3223243519","CA" +"3223244288","3223245311","US" +"3223249408","3223249663","CA" +"3223252992","3223258623","US" +"3223258624","3223258879","CA" +"3223258880","3223260671","US" +"3223260672","3223260927","DE" +"3223261184","3223262975","US" +"3223262976","3223263231","BE" +"3223263232","3223263743","US" +"3223263744","3223263999","GB" +"3223264000","3223264255","FR" +"3223264256","3223265023","US" +"3223265024","3223265279","GB" +"3223265280","3223266559","US" +"3223266560","3223266815","AU" +"3223266816","3223267327","US" +"3223267328","3223267583","BE" +"3223267584","3223269631","US" +"3223272960","3223273215","GB" +"3223273216","3223283199","US" +"3223283200","3223283455","DE" +"3223283712","3223286783","US" +"3223286784","3223289855","JP" +"3223293952","3223299327","US" +"3223299584","3223301119","NL" +"3223301120","3223303167","US" +"3223303168","3223303423","CA" +"3223303424","3223303679","US" +"3223305984","3223307519","US" +"3223307520","3223310079","JP" +"3223310080","3223310335","US" +"3223310592","3223311103","US" +"3223311104","3223311359","FR" +"3223311360","3223314431","US" +"3223314432","3223314687","CA" +"3223314688","3223315455","US" +"3223315712","3223316223","US" +"3223316224","3223316479","NL" +"3223316480","3223321599","US" +"3223321600","3223321855","FR" +"3223321856","3223322367","US" +"3223322624","3223390719","US" +"3223390720","3223390975","ZA" +"3223391232","3223391999","US" +"3223392000","3223392255","FR" +"3223392256","3223392511","GB" +"3223393024","3223394303","US" +"3223396352","3223397375","US" +"3223397376","3223397631","NL" +"3223397632","3223410431","US" +"3223410432","3223416831","CH" +"3223416832","3223417087","US" +"3223417088","3223417599","FR" +"3223417600","3223418367","US" +"3223418368","3223420927","CH" +"3223420928","3223421439","US" +"3223421440","3223421695","GB" +"3223421696","3223421951","NL" +"3223422464","3223422719","US" +"3223422720","3223422975","JP" +"3223422976","3223424767","US" +"3223424768","3223435007","FR" +"3223435008","3223437311","US" +"3223437312","3223447551","CH" +"3223447552","3223447807","US" +"3223447808","3223448063","NL" +"3223448064","3223449087","US" +"3223449088","3223449599","EU" +"3223449600","3223452671","US" +"3223452928","3223453183","US" +"3223453184","3223453439","DE" +"3223458560","3223458815","GB" +"3223460096","3223460351","US" +"3223462656","3223462911","US" +"3223466496","3223466751","GB" +"3223471616","3223471871","CA" +"3223471872","3223472383","US" +"3223476736","3223476991","US" +"3223481088","3223481343","SE" +"3223483392","3223483647","NL" +"3223490816","3223491071","US" +"3223496960","3223497215","US" +"3223499520","3223499775","FI" +"3223499776","3223504895","CA" +"3223507968","3223508991","US" +"3223511040","3223519231","US" +"3223519232","3223523583","DE" +"3223523584","3223523615","EU" +"3223523616","3223524351","DE" +"3223524352","3223528233","US" +"3223528234","3223528234","GB" +"3223528235","3223534335","US" +"3223534336","3223534591","AU" +"3223534592","3223534847","US" +"3223535104","3223535359","US" +"3223535360","3223537919","DE" +"3223537920","3223542271","US" +"3223542272","3223542527","DE" +"3223542528","3223543295","US" +"3223543296","3223543551","GB" +"3223543552","3223546879","US" +"3223546880","3223547135","GB" +"3223547136","3223552511","US" +"3223552512","3223553535","NL" +"3223553536","3223554559","US" +"3223554560","3223554815","GB" +"3223555072","3223556095","US" +"3223556096","3223556351","CA" +"3223556352","3223556607","US" +"3223556608","3223556863","IT" +"3223556864","3223557375","US" +"3223557376","3223558655","DE" +"3223558656","3223563263","US" +"3223563264","3223563519","GB" +"3223563520","3223565567","US" +"3223565824","3223566079","US" +"3223566080","3223568639","NL" +"3223568640","3223569663","US" +"3223569664","3223570175","GB" +"3223571456","3223571711","US" +"3223571712","3223572223","GB" +"3223572224","3223572479","IE" +"3223572480","3223577855","US" +"3223577856","3223578111","DE" +"3223578112","3223580671","US" +"3223580672","3223581951","AT" +"3223581952","3223582207","US" +"3223582208","3223582463","PT" +"3223582464","3223582719","NL" +"3223582720","3223582975","AU" +"3223583488","3223584767","US" +"3223584768","3223585023","GB" +"3223585024","3223585791","SE" +"3223585792","3223586047","GB" +"3223586048","3223586303","SE" +"3223586304","3223586559","GB" +"3223586560","3223589119","SE" +"3223589120","3223589375","US" +"3223589376","3223601663","SE" +"3223601664","3223602175","GB" +"3223602176","3223606527","SE" +"3223606528","3223606783","GB" +"3223606784","3223607551","SE" +"3223607552","3223607807","GB" +"3223607808","3223610367","SE" +"3223610368","3223610623","IT" +"3223610624","3223610879","SE" +"3223610880","3223611135","NO" +"3223611136","3223611647","SE" +"3223611648","3223611903","GB" +"3223611904","3223615743","SE" +"3223615744","3223616767","GB" +"3223616768","3223617535","SE" +"3223617536","3223617791","NO" +"3223617792","3223620863","SE" +"3223620864","3223621119","DK" +"3223621120","3223621375","GB" +"3223621376","3223627775","SE" +"3223627776","3223628031","DE" +"3223628032","3223628287","SE" +"3223628288","3223628543","ES" +"3223628544","3223630591","SE" +"3223630592","3223630847","GB" +"3223630848","3223634431","SE" +"3223634432","3223634687","US" +"3223634688","3223634943","SE" +"3223634944","3223635455","GB" +"3223635456","3223637247","SE" +"3223637248","3223637503","GB" +"3223637504","3223638271","SE" +"3223638272","3223638527","GB" +"3223638528","3223640831","SE" +"3223640832","3223641087","GB" +"3223641088","3223646207","SE" +"3223646208","3223646463","IT" +"3223646464","3223646975","SE" +"3223646976","3223647231","IT" +"3223647232","3223648511","SE" +"3223648512","3223648767","GB" +"3223648768","3223650047","SE" +"3223650048","3223650303","GB" +"3223650304","3223715839","CH" +"3223715840","3223781375","DK" +"3223781376","3223823871","US" +"3223823872","3223824127","AT" +"3223824128","3223863295","US" +"3223863552","3223863807","US" +"3223864576","3223864831","AE" +"3223864832","3223865343","HR" +"3223865344","3223867391","FI" +"3223867392","3223867647","GB" +"3223871488","3223887871","US" +"3223898368","3223898623","US" +"3223902464","3223902719","CA" +"3223905280","3223905535","FI" +"3223909376","3223910911","US" +"3223911936","3223912191","CA" +"3223912448","3223938559","US" +"3223938816","3223946239","GB" +"3223946240","3223947519","CH" +"3223947520","3223947775","US" +"3223948288","3223948543","NL" +"3223948544","3223949823","CH" +"3223949824","3223950079","AU" +"3223950080","3223950335","DE" +"3223950336","3223950591","CA" +"3223950592","3223953663","CH" +"3223953664","3223955967","US" +"3223955968","3223956223","TH" +"3223956224","3223957759","US" +"3223958016","3223963135","JP" +"3223963136","3223963647","US" +"3223963904","3223964159","CA" +"3223964160","3223964415","US" +"3223964416","3223964671","AU" +"3223964672","3223965183","US" +"3223965184","3223965439","ID" +"3223965440","3223966207","US" +"3223966208","3223966463","GB" +"3223966464","3223967743","US" +"3223967744","3223967999","FR" +"3223968000","3223968255","US" +"3223968256","3223968511","IT" +"3223968512","3223970303","US" +"3223970560","3223970815","DE" +"3223970816","3223977983","US" +"3223978240","3223978495","DE" +"3223978752","3223979263","US" +"3223979264","3223979775","CA" +"3223979776","3223988735","US" +"3223988736","3223990271","CH" +"3223990272","3223991295","US" +"3223991552","3223991807","GB" +"3223991808","3223992063","CA" +"3223992064","3223993343","US" +"3223993344","3223994111","AU" +"3223994112","3223994623","DE" +"3223994624","3223994879","NO" +"3223994880","3223995391","US" +"3223995392","3223995647","CA" +"3223995648","3223996159","US" +"3223996416","3223999487","US" +"3224000256","3224000511","GB" +"3224000512","3224001023","US" +"3224001024","3224001279","CA" +"3224001280","3224002559","US" +"3224002816","3224003327","US" +"3224003328","3224003583","ZA" +"3224003584","3224003839","GB" +"3224003840","3224004095","US" +"3224004096","3224004351","FR" +"3224004352","3224005631","JP" +"3224005632","3224006655","US" +"3224006656","3224012031","NL" +"3224012032","3224014591","US" +"3224014592","3224014847","DE" +"3224014848","3224016639","US" +"3224016640","3224016895","AU" +"3224016896","3224023039","US" +"3224023808","3224024063","US" +"3224024064","3224029695","CH" +"3224029696","3224030463","CA" +"3224030720","3224030975","CA" +"3224030976","3224038655","US" +"3224038656","3224038911","JP" +"3224038912","3224042751","US" +"3224042752","3224043007","DE" +"3224043008","3224043263","US" +"3224043520","3224084991","US" +"3224084992","3224087551","SE" +"3224087552","3224090879","US" +"3224090880","3224091135","AU" +"3224091648","3224092671","US" +"3224092672","3224093951","CH" +"3224093952","3224094207","US" +"3224094208","3224094463","AU" +"3224094464","3224096255","US" +"3224096512","3224097279","AU" +"3224097280","3224097535","NL" +"3224097536","3224097791","US" +"3224097792","3224098047","NL" +"3224098048","3224098559","US" +"3224098816","3224099583","US" +"3224099584","3224099839","CA" +"3224099840","3224100863","US" +"3224101120","3224101375","US" +"3224101376","3224102399","AU" +"3224103424","3224103679","GB" +"3224103680","3224104447","US" +"3224104704","3224104959","AU" +"3224104960","3224109055","US" +"3224109056","3224119551","DE" +"3224119552","3224129791","FR" +"3224129792","3224132351","DE" +"3224132352","3224170495","US" +"3224170496","3224173567","SE" +"3224173568","3224258047","US" +"3224258048","3224258303","FI" +"3224258304","3224258559","BE" +"3224258560","3224288255","US" +"3224288256","3224289023","DE" +"3224289024","3224302335","US" +"3224302336","3224302591","CA" +"3224302592","3224305663","US" +"3224305664","3224367615","JP" +"3224367616","3224368127","US" +"3224368128","3224369663","CH" +"3224369664","3224373247","US" +"3224373248","3224373248","AU" +"3224373249","3224379135","US" +"3224379136","3224379391","DE" +"3224379392","3224398079","US" +"3224398336","3224398591","US" +"3224398592","3224398847","DE" +"3224398848","3224399103","US" +"3224399104","3224399615","AU" +"3224399616","3224407039","US" +"3224407296","3224407551","CA" +"3224407808","3224408319","US" +"3224408320","3224408575","DE" +"3224408576","3224428543","US" +"3224428544","3224428799","DE" +"3224428800","3224430079","US" +"3224430336","3224430591","DE" +"3224430592","3224430847","US" +"3224431104","3224431359","CA" +"3224431360","3224431615","US" +"3224432128","3224432383","US" +"3224432640","3224435967","US" +"3224435968","3224436223","ZA" +"3224436224","3224436479","US" +"3224436736","3224502271","FI" +"3224502272","3224567807","JP" +"3224567808","3224571903","NO" +"3224571904","3224633343","JP" +"3224633344","3224646399","DE" +"3224646400","3224651775","US" +"3224651776","3224652287","AU" +"3224652800","3224660991","US" +"3224660992","3224661247","CA" +"3224661504","3224664063","US" +"3224672000","3224672255","US" +"3224672256","3224672511","NL" +"3224672512","3224673791","US" +"3224674048","3224674559","DE" +"3224674560","3224674815","GB" +"3224675072","3224675839","US" +"3224676864","3224677119","US" +"3224677120","3224678655","AU" +"3224678656","3224681471","US" +"3224682496","3224689919","US" +"3224689920","3224690687","NL" +"3224690688","3224692735","US" +"3224692736","3224692991","DZ" +"3224692992","3224694527","US" +"3224694528","3224694783","CA" +"3224694784","3224697343","US" +"3224697856","3224698111","US" +"3224698112","3224698367","GB" +"3224698368","3224698623","FR" +"3224698880","3224699135","US" +"3224699136","3224699647","BE" +"3224699648","3224725247","US" +"3224725248","3224725503","DE" +"3224725504","3224725759","CH" +"3224725760","3224739071","US" +"3224739072","3224739327","FI" +"3224739328","3224772351","US" +"3224772352","3224785151","DE" +"3224785152","3224791039","US" +"3224791040","3224791295","DE" +"3224791296","3224791807","AU" +"3224791808","3224793343","US" +"3224793344","3224793599","DE" +"3224793600","3224793855","US" +"3224793856","3224795391","DK" +"3224795392","3224795647","CA" +"3224795648","3224795903","CH" +"3224796160","3224796415","US" +"3224796416","3224797439","DE" +"3224797440","3224797695","US" +"3224797696","3224797951","NZ" +"3224797952","3224798207","US" +"3224798208","3224798463","CH" +"3224798464","3224798975","US" +"3224798976","3224799231","AU" +"3224799744","3224799999","US" +"3224800000","3224800255","DE" +"3224800256","3224816639","FR" +"3224816640","3224816895","IL" +"3224816896","3224820735","FR" +"3224820736","3224820991","PL" +"3224820992","3224821247","DE" +"3224821248","3224822015","US" +"3224822016","3224822271","SE" +"3224822272","3224822527","US" +"3224822784","3224826367","US" +"3224826368","3224826531","CA" +"3224826532","3224826535","A1" +"3224826536","3224826623","CA" +"3224826624","3224826879","US" +"3224826880","3224827135","CH" +"3224827136","3224827391","GB" +"3224827392","3224827647","US" +"3224827904","3224828671","US" +"3224828672","3224828927","AU" +"3224829184","3224829439","US" +"3224829440","3224829695","DE" +"3224829952","3224834047","US" +"3224834048","3224834303","SG" +"3224834304","3224834559","US" +"3224834560","3224834815","TH" +"3224834816","3224839423","US" +"3224839424","3224839679","EU" +"3224839680","3224851455","US" +"3224851456","3224851711","DE" +"3224851968","3224852735","US" +"3224852736","3224852991","DE" +"3224852992","3224854527","US" +"3224854784","3224855039","US" +"3224855040","3224855551","AU" +"3224855552","3224855807","US" +"3224855808","3224856063","IT" +"3224856064","3224856575","US" +"3224856832","3224857087","NL" +"3224857088","3224857855","US" +"3224857856","3224858111","PL" +"3224858368","3224858623","US" +"3224858624","3224858879","AU" +"3224858880","3224859391","US" +"3224859392","3224859647","NL" +"3224859648","3224860159","US" +"3224860160","3224860415","JP" +"3224860672","3224862719","US" +"3224862976","3224863231","NL" +"3224863488","3224863743","US" +"3224863744","3224863999","GB" +"3224864000","3224870143","US" +"3224870144","3224870399","EU" +"3224870400","3224870655","US" +"3224870656","3224870911","IT" +"3224870912","3224878079","US" +"3224878080","3224878335","DE" +"3224878336","3224878591","US" +"3224878592","3224878847","AU" +"3224879360","3224879615","GB" +"3224879616","3224879871","CA" +"3224879872","3224880383","US" +"3224880384","3224880639","DE" +"3224880640","3224880895","AU" +"3224880896","3224882431","US" +"3224882688","3224882943","CA" +"3224882944","3224884223","US" +"3224884224","3224884479","GB" +"3224884480","3224884991","US" +"3224885248","3224885503","CA" +"3224885760","3224886015","US" +"3224886016","3224886271","AU" +"3224886272","3224886527","JP" +"3224886528","3224887295","US" +"3224887296","3224887551","CA" +"3224887808","3224889343","US" +"3224889344","3224889599","AU" +"3224889600","3224891647","US" +"3224892160","3224892415","CA" +"3224892416","3224892671","DE" +"3224892928","3224893183","US" +"3224893440","3224893951","US" +"3224895488","3224899071","US" +"3224899072","3224899327","AT" +"3224899328","3224908543","US" +"3224908544","3224908799","CA" +"3224908800","3224921087","US" +"3224921088","3224921343","FI" +"3224921344","3224928255","US" +"3224928256","3224928511","FI" +"3224928512","3224933887","US" +"3224933888","3224934143","DE" +"3224934144","3224957951","US" +"3224957952","3224958207","CA" +"3224958208","3225028863","US" +"3225028864","3225031423","JP" +"3225031424","3225033727","US" +"3225033728","3225033983","LU" +"3225033984","3225034239","AE" +"3225034240","3225034751","FI" +"3225034752","3225035775","BG" +"3225035776","3225037055","US" +"3225037056","3225051135","FI" +"3225051136","3225057535","US" +"3225057536","3225057791","CA" +"3225057792","3225060351","US" +"3225060352","3225061631","AU" +"3225063424","3225076991","US" +"3225076992","3225077247","SE" +"3225077504","3225081087","US" +"3225081088","3225081343","CA" +"3225081600","3225082367","US" +"3225082368","3225082623","IT" +"3225082880","3225084671","US" +"3225084672","3225085183","NL" +"3225085184","3225085439","ES" +"3225085440","3225089279","US" +"3225089280","3225089535","CA" +"3225089536","3225090047","US" +"3225090048","3225090303","AP" +"3225090304","3225091071","US" +"3225091584","3225091839","US" +"3225092096","3225314303","US" +"3225314304","3225314559","GB" +"3225314560","3225419775","US" +"3225420032","3225420287","US" +"3225423872","3225424383","US" +"3225426944","3225427199","AT" +"3225429504","3225429759","CA" +"3225431040","3225431551","RU" +"3225431552","3225433087","US" +"3225436160","3225444607","US" +"3225445376","3225446399","BE" +"3225451776","3225452031","SE" +"3225459968","3225460479","US" +"3225460480","3225462783","CA" +"3225470464","3225470719","US" +"3225471488","3225471743","DE" +"3225471744","3225472511","US" +"3225477120","3225481215","US" +"3225485312","3225498111","US" +"3225498368","3225503487","NL" +"3225503488","3225506047","US" +"3225506304","3225508863","AU" +"3225508864","3225509631","CH" +"3225509632","3225509887","US" +"3225509888","3225510143","NL" +"3225510144","3225518591","US" +"3225518592","3225518847","AU" +"3225518848","3225519103","IT" +"3225519104","3225519359","GB" +"3225519872","3225520639","US" +"3225520896","3225521151","DE" +"3225521152","3225522175","US" +"3225522176","3225522943","GB" +"3225522944","3225524223","US" +"3225524224","3225524479","VE" +"3225524480","3225524735","GB" +"3225528320","3225530367","US" +"3225530368","3225530623","PR" +"3225530624","3225530879","US" +"3225531136","3225531647","US" +"3225531904","3225532159","AU" +"3225532160","3225535999","CH" +"3225536000","3225540863","US" +"3225540864","3225541119","AU" +"3225541120","3225541375","US" +"3225541376","3225544703","GB" +"3225546752","3225550847","US" +"3225550848","3225616383","DK" +"3225617152","3225617407","IE" +"3225617408","3225617663","GB" +"3225617920","3225618175","US" +"3225618432","3225618687","US" +"3225618688","3225618943","CA" +"3225619200","3225619455","US" +"3225619456","3225619711","AU" +"3225619712","3225622527","US" +"3225626368","3225626623","GB" +"3225626880","3225627391","US" +"3225627392","3225627647","GB" +"3225627648","3225627903","US" +"3225627904","3225628159","CA" +"3225628160","3225628415","US" +"3225628416","3225628671","GB" +"3225628672","3225629183","US" +"3225629184","3225629439","GB" +"3225629440","3225629695","US" +"3225629696","3225629951","GB" +"3225629952","3225630207","US" +"3225630464","3225630719","DE" +"3225630720","3225631231","US" +"3225631232","3225631487","SE" +"3225631488","3225635839","US" +"3225635840","3225636095","PT" +"3225636096","3225636607","US" +"3225636608","3225636863","ES" +"3225636864","3225637887","US" +"3225637888","3225638143","AU" +"3225638400","3225638655","US" +"3225638656","3225638911","GB" +"3225639424","3225640447","US" +"3225640448","3225640703","GB" +"3225640704","3225641983","US" +"3225641984","3225643263","GB" +"3225643264","3225643775","CA" +"3225643776","3225650943","US" +"3225650944","3225651199","GB" +"3225651200","3225657343","US" +"3225658624","3225659135","US" +"3225659136","3225659391","DE" +"3225659904","3225660159","DE" +"3225660160","3225660415","AU" +"3225660416","3225664511","US" +"3225664512","3225669887","DE" +"3225669888","3225671935","US" +"3225672192","3225672447","DE" +"3225672448","3225672703","US" +"3225672704","3225673215","NL" +"3225673472","3225673727","IE" +"3225673728","3225679871","US" +"3225679872","3225680127","AU" +"3225680128","3225680383","GR" +"3225680640","3225681919","US" +"3225681920","3225682943","DE" +"3225682944","3225683199","AT" +"3225683200","3225687039","DE" +"3225687040","3225687807","US" +"3225687808","3225688063","GB" +"3225688064","3225689343","US" +"3225689600","3225689855","US" +"3225689856","3225694975","NL" +"3225694976","3225695231","PL" +"3225695232","3225695487","US" +"3225695488","3225701119","CA" +"3225701120","3225701375","US" +"3225701376","3225709567","NO" +"3225709568","3225710079","US" +"3225710592","3225714687","US" +"3225715456","3225715711","CA" +"3225715712","3225715967","AU" +"3225715968","3225716991","US" +"3225716992","3225717247","CA" +"3225717248","3225717503","TN" +"3225717760","3225720063","US" +"3225720576","3225721343","GB" +"3225721344","3225723903","US" +"3225723904","3225725439","DE" +"3225725440","3225725695","GB" +"3225725696","3225726207","AU" +"3225726208","3225726463","US" +"3225726464","3225726719","GB" +"3225726720","3225726975","US" +"3225726976","3225727231","IT" +"3225727232","3225727487","US" +"3225728000","3225728511","US" +"3225728512","3225728767","NL" +"3225728768","3225729023","US" +"3225729024","3225729279","CA" +"3225729280","3225729535","US" +"3225729536","3225729791","PT" +"3225729792","3225735167","US" +"3225735424","3225735679","PT" +"3225735680","3225735935","US" +"3225735936","3225737215","DE" +"3225737216","3225737471","PT" +"3225737472","3225738495","US" +"3225738496","3225738751","PT" +"3225738752","3225739263","US" +"3225739264","3225739519","PT" +"3225739520","3225740543","US" +"3225740544","3225740799","CA" +"3225740800","3225741055","NL" +"3225741056","3225741823","US" +"3225742080","3225745919","JP" +"3225745920","3225746687","NL" +"3225746688","3225746943","US" +"3225746944","3225747199","DE" +"3225747456","3225763839","US" +"3225763840","3225764095","BE" +"3225766400","3225766655","CA" +"3225767936","3225769983","US" +"3225773312","3225773567","CA" +"3225776128","3225776383","US" +"3225777152","3225777407","AU" +"3225777408","3225777663","US" +"3225780224","3225784319","US" +"3225784320","3225788415","CA" +"3225796096","3225796351","US" +"3225805824","3225806847","US" +"3225807360","3225807615","DE" +"3225810688","3225810943","US" +"3225812992","3225827071","FR" +"3225827072","3225827327","US" +"3225827328","3225843711","FR" +"3225843712","3225847039","US" +"3225847040","3225847551","TR" +"3225847552","3225847807","AU" +"3225847808","3225848063","IT" +"3225848064","3225848831","US" +"3225848832","3225853951","DE" +"3225853952","3225857023","US" +"3225857024","3225857279","CA" +"3225857280","3225857535","US" +"3225857536","3225857791","AU" +"3225857792","3225858047","US" +"3225858048","3225858559","CA" +"3225858560","3225858815","US" +"3225858816","3225859583","JP" +"3225860096","3225868287","US" +"3225868288","3225868543","AU" +"3225868544","3225869055","US" +"3225869056","3225869311","AU" +"3225869312","3225870335","US" +"3225870336","3225870591","CA" +"3225870592","3225873663","US" +"3225873664","3225873919","ZA" +"3225873920","3225874943","US" +"3225874944","3225875199","GB" +"3225875456","3225875967","US" +"3225876480","3225878527","US" +"3225878528","3225880319","SE" +"3225880320","3225880575","US" +"3225880576","3225881343","SE" +"3225881344","3225881599","IT" +"3225881600","3225887999","SE" +"3225888000","3225888255","GB" +"3225888256","3225905407","SE" +"3225905408","3225905663","IT" +"3225905664","3225913855","SE" +"3225913856","3225914111","DE" +"3225914112","3225915135","SE" +"3225915136","3225915391","DK" +"3225915392","3225918463","SE" +"3225918464","3225918719","GB" +"3225918720","3225920767","SE" +"3225920768","3225921023","GB" +"3225921024","3225921791","SE" +"3225921792","3225922047","GB" +"3225922048","3225923327","SE" +"3225923328","3225923583","IN" +"3225923584","3225923839","SE" +"3225923840","3225924095","GB" +"3225924096","3225930239","SE" +"3225930240","3225930495","FR" +"3225930496","3225932799","SE" +"3225932800","3225933055","IT" +"3225933056","3225935359","SE" +"3225935360","3225935615","US" +"3225935616","3225937407","SE" +"3225937408","3225937663","US" +"3225937664","3225938431","SE" +"3225938432","3225938687","US" +"3225938688","3225941247","SE" +"3225941248","3225941503","IT" +"3225941504","3225944063","SE" +"3225944064","3226008831","TW" +"3226008832","3226009343","US" +"3226009600","3226010879","US" +"3226010880","3226011135","CA" +"3226011136","3226012671","US" +"3226012672","3226012927","AU" +"3226012928","3226014207","US" +"3226014464","3226014975","GB" +"3226014976","3226015231","NZ" +"3226015232","3226015487","AU" +"3226015744","3226016255","ID" +"3226016256","3226018303","US" +"3226018304","3226018559","DE" +"3226018560","3226021119","CH" +"3226021120","3226026495","US" +"3226026496","3226026751","AU" +"3226026752","3226067455","US" +"3226067456","3226067711","BE" +"3226067712","3226068223","US" +"3226068224","3226068479","GB" +"3226068480","3226068991","US" +"3226075136","3226107903","US" +"3226110208","3226110719","US" +"3226110720","3226128639","AU" +"3226128640","3226131455","US" +"3226140672","3226157567","CA" +"3226157568","3226157823","US" +"3226157824","3226189823","CA" +"3226191360","3226191615","US" +"3226191872","3226201855","CA" +"3226201856","3226202111","US" +"3226202112","3226206207","CA" +"3226206208","3226215423","GB" +"3226215424","3226236927","US" +"3226237184","3226237439","US" +"3226237440","3226237695","AU" +"3226237696","3226241535","DE" +"3226241536","3226241791","LI" +"3226241792","3226250495","DE" +"3226250496","3226251263","US" +"3226251264","3226251519","DE" +"3226251520","3226267903","US" +"3226267904","3226268159","DE" +"3226268160","3226268415","PT" +"3226268416","3226268927","AT" +"3226268928","3226269951","DE" +"3226269952","3226270719","US" +"3226271744","3226273791","US" +"3226274048","3226274559","US" +"3226274560","3226274815","CH" +"3226274816","3226283519","US" +"3226283520","3226291199","CA" +"3226291200","3226300927","US" +"3226300928","3226301439","DE" +"3226301440","3226302463","US" +"3226302464","3226303487","FI" +"3226303488","3226305535","US" +"3226305536","3226307327","GB" +"3226307328","3226307583","US" +"3226307584","3226308095","ES" +"3226308096","3226365439","US" +"3226365440","3226365951","DE" +"3226365952","3226366975","US" +"3226366976","3226367231","CA" +"3226367232","3226374143","US" +"3226374144","3226375423","DE" +"3226375424","3226376703","US" +"3226376704","3226376959","AT" +"3226376960","3226384639","US" +"3226384640","3226385407","BE" +"3226385408","3226393599","US" +"3226393600","3226393855","DE" +"3226393856","3226397695","US" +"3226397696","3226400255","DE" +"3226400256","3226468351","US" +"3226470400","3226473471","US" +"3226473472","3226473983","PT" +"3226473984","3226474495","US" +"3226474496","3226474751","CL" +"3226475264","3226475519","US" +"3226475776","3226476287","US" +"3226476288","3226479359","CH" +"3226479360","3226479871","US" +"3226480128","3226480383","GB" +"3226480384","3226481407","US" +"3226481408","3226481663","DE" +"3226481664","3226492927","US" +"3226521344","3226521855","US" +"3226521856","3226522111","BR" +"3226522112","3226533887","US" +"3226535936","3226536191","US" +"3226546176","3226546431","US" +"3226548992","3226549247","BE" +"3226549248","3226550271","GB" +"3226550272","3226554367","US" +"3226555648","3226555903","CA" +"3226556416","3226556671","US" +"3226558720","3226558975","US" +"3226561792","3226562047","NO" +"3226563072","3226563327","US" +"3226564864","3226565119","DE" +"3226565376","3226565631","FI" +"3226569984","3226570239","US" +"3226574848","3226575103","FI" +"3226576384","3226576639","US" +"3226580480","3226581247","FI" +"3226582528","3226582783","US" +"3226583040","3226583295","US" +"3226583552","3226583807","SE" +"3226592768","3226593023","DE" +"3226593792","3226594047","GB" +"3226598400","3226598911","US" +"3226599424","3226626047","US" +"3226626048","3226626303","CA" +"3226626304","3226629375","US" +"3226629376","3226629631","CA" +"3226629632","3226630399","US" +"3226630400","3226630655","GB" +"3226630912","3226631167","US" +"3226631168","3226631423","CH" +"3226631424","3226631935","US" +"3226631936","3226632191","PT" +"3226632192","3226633215","CA" +"3226635008","3226635263","US" +"3226635264","3226635519","AU" +"3226635520","3226635775","US" +"3226635776","3226636031","ZA" +"3226636032","3226636287","AU" +"3226637056","3226637823","US" +"3226637824","3226638079","CA" +"3226638080","3226638335","US" +"3226638592","3226638847","GB" +"3226638848","3226639615","US" +"3226639616","3226640127","AT" +"3226640128","3226640639","US" +"3226640640","3226640895","AU" +"3226640896","3226654207","US" +"3226654208","3226654463","PT" +"3226654464","3226655743","US" +"3226655744","3226656255","IT" +"3226656256","3226656511","AU" +"3226656512","3226661119","US" +"3226661120","3226661375","DE" +"3226661888","3226662143","US" +"3226664960","3226690815","FI" +"3226690816","3226691071","CA" +"3226691072","3226691327","GB" +"3226691584","3226693631","US" +"3226694144","3226695167","US" +"3226695168","3226695679","AU" +"3226695680","3226695935","US" +"3226695936","3226696191","CA" +"3226696448","3226696703","AU" +"3226705408","3226705919","US" +"3226705920","3226706175","FR" +"3226706176","3226706943","US" +"3226707200","3226707455","PL" +"3226707456","3226715391","TW" +"3226715392","3226715647","US" +"3226715648","3226715903","AU" +"3226715904","3226716159","US" +"3226716160","3226716415","GB" +"3226716672","3226716927","GB" +"3226716928","3226717439","US" +"3226717696","3226717951","US" +"3226717952","3226720511","GB" +"3226720768","3226721279","JP" +"3226721280","3226721791","US" +"3226722048","3226722303","CH" +"3226722304","3226722559","AU" +"3226722560","3226723583","US" +"3226723584","3226723839","DE" +"3226723840","3226724095","US" +"3226724096","3226724351","AU" +"3226724352","3226725631","US" +"3226725632","3226726143","AU" +"3226726144","3226728191","US" +"3226728192","3226728447","CA" +"3226728448","3226730495","US" +"3226731008","3226731519","US" +"3226731776","3226732031","GB" +"3226732288","3226733567","US" +"3226733568","3226733823","MX" +"3226733824","3226734079","PT" +"3226734080","3226734335","US" +"3226734336","3226734591","PT" +"3226734592","3226737407","US" +"3226737408","3226737663","AT" +"3226737664","3226738175","US" +"3226738176","3226738431","NL" +"3226738432","3226738687","US" +"3226738688","3226739199","NO" +"3226740736","3226742783","US" +"3226744576","3226746367","US" +"3226746368","3226746623","PT" +"3226746624","3226748927","US" +"3226749440","3226749695","US" +"3226749696","3226752255","GB" +"3226752256","3226752767","US" +"3226752768","3226753023","IT" +"3226753024","3226753279","US" +"3226753280","3226753535","AU" +"3226753536","3226753791","SI" +"3226753792","3226754303","HR" +"3226754304","3226757375","SI" +"3226757376","3226757887","HR" +"3226757888","3226758655","SI" +"3226758912","3226762751","US" +"3226763008","3226770687","IT" +"3226770688","3226772991","US" +"3226772992","3226773247","CH" +"3226773248","3226774783","US" +"3226774784","3226775039","GB" +"3226775040","3226775295","US" +"3226775552","3226783743","FI" +"3226783744","3226784767","US" +"3226784768","3226785023","GB" +"3226785024","3226786559","US" +"3226786560","3226786815","AU" +"3226786816","3226787071","DE" +"3226787072","3226787327","AT" +"3226787328","3226788095","US" +"3226788352","3226789375","HU" +"3226789376","3226789631","AU" +"3226789632","3226791167","US" +"3226791168","3226791679","AU" +"3226791680","3226792191","US" +"3226792448","3226792703","AU" +"3226792704","3226792959","US" +"3226792960","3226793215","ZA" +"3226793216","3226793983","DE" +"3226793984","3226795263","US" +"3226795264","3226795519","NZ" +"3226795520","3226795775","US" +"3226796032","3226800127","US" +"3226800128","3226800639","DE" +"3226800640","3226811391","US" +"3226811392","3226811647","DE" +"3226811648","3226824191","US" +"3226824192","3226824447","EU" +"3226824448","3226861567","US" +"3226861824","3226862079","CA" +"3226862080","3226864383","US" +"3226864384","3226864639","RU" +"3226864896","3226865151","US" +"3226865152","3226865407","PL" +"3226865408","3226866175","US" +"3226866176","3226866431","GB" +"3226866432","3226867967","US" +"3226867968","3226868223","IL" +"3226868224","3226868479","US" +"3226868480","3226868735","GB" +"3226868736","3226884351","US" +"3226884352","3226884607","IL" +"3226884608","3226893567","US" +"3226893568","3226894079","NL" +"3226894080","3226894335","GB" +"3226894336","3226895359","US" +"3226895872","3226896127","GB" +"3226896128","3226896639","US" +"3226896640","3226896895","GB" +"3226896896","3226897151","PT" +"3226897152","3226902527","US" +"3226903040","3226903295","US" +"3226903296","3226903551","DE" +"3226903552","3226903807","US" +"3226903808","3226904063","AU" +"3226904064","3226904319","CH" +"3226904320","3226904575","FR" +"3226904576","3226904831","US" +"3226904832","3226905087","GB" +"3226905088","3226926591","US" +"3226926592","3226926847","SE" +"3226927104","3226992639","NL" +"3226992896","3226993151","CH" +"3226993152","3226993663","US" +"3226993664","3226993919","DE" +"3226993920","3226994175","US" +"3226994176","3226994687","AU" +"3226994688","3226994943","US" +"3226994944","3226995455","GB" +"3226995456","3226996735","US" +"3226996992","3226997247","PT" +"3226998016","3226998527","US" +"3226998528","3226999039","AT" +"3226999040","3227013119","US" +"3227013376","3227013887","US" +"3227013888","3227014399","GB" +"3227014400","3227014655","NZ" +"3227014656","3227014911","FI" +"3227014912","3227017215","US" +"3227017472","3227017983","DE" +"3227019008","3227020287","US" +"3227020288","3227020543","DE" +"3227020800","3227022847","US" +"3227022848","3227023103","GB" +"3227023360","3227023615","US" +"3227023872","3227024127","US" +"3227024128","3227024383","PT" +"3227024384","3227024895","US" +"3227025408","3227025663","GB" +"3227025664","3227025919","US" +"3227025920","3227026175","GB" +"3227026176","3227026687","US" +"3227026688","3227026943","GB" +"3227027456","3227035135","US" +"3227035136","3227035391","EU" +"3227035392","3227035647","AP" +"3227035648","3227038207","US" +"3227039744","3227040255","US" +"3227040512","3227040767","AU" +"3227040768","3227041279","US" +"3227041280","3227041535","NZ" +"3227041536","3227042815","US" +"3227042816","3227043071","IT" +"3227043072","3227043327","US" +"3227043584","3227044863","US" +"3227044864","3227045119","PL" +"3227045120","3227051519","US" +"3227051520","3227051775","AP" +"3227051776","3227053567","US" +"3227053568","3227053823","GB" +"3227053824","3227054079","DE" +"3227054080","3227056639","US" +"3227056640","3227058175","PT" +"3227058176","3227083519","FI" +"3227083520","3227083775","ES" +"3227083776","3227123199","FI" +"3227123200","3227123455","AX" +"3227123456","3227123711","FI" +"3227123712","3227204617","US" +"3227204618","3227204619","EU" +"3227204620","3227225087","US" +"3227225088","3227225599","LU" +"3227225600","3227234559","US" +"3227234560","3227234815","PT" +"3227234816","3227235071","US" +"3227235072","3227235327","AU" +"3227235328","3227236607","US" +"3227236608","3227236863","AU" +"3227236864","3227237119","RU" +"3227237120","3227237631","US" +"3227237632","3227237887","NO" +"3227237888","3227238143","US" +"3227238144","3227238399","GB" +"3227238400","3227239935","US" +"3227240192","3227240447","GB" +"3227240448","3227240703","BE" +"3227240704","3227240959","GB" +"3227240960","3227243007","US" +"3227243008","3227243263","CA" +"3227243264","3227243519","GB" +"3227243520","3227243775","US" +"3227244032","3227249151","SE" +"3227249408","3227249663","US" +"3227249664","3227252735","CH" +"3227252736","3227273983","US" +"3227273984","3227274239","FI" +"3227274240","3227274495","US" +"3227274496","3227274751","NL" +"3227274752","3227276543","US" +"3227276800","3227277055","FR" +"3227277312","3227278847","US" +"3227278848","3227279103","EU" +"3227279104","3227281407","US" +"3227281408","3227282175","IT" +"3227282176","3227282431","US" +"3227282432","3227282687","NL" +"3227282688","3227282943","GB" +"3227282944","3227284479","US" +"3227284480","3227284735","FI" +"3227284992","3227286783","US" +"3227286784","3227287039","AT" +"3227287040","3227287295","IT" +"3227287296","3227287551","NL" +"3227287552","3227287807","CH" +"3227287808","3227288063","BG" +"3227288064","3227288319","BE" +"3227288320","3227288831","NL" +"3227288832","3227289087","PT" +"3227289088","3227289343","NL" +"3227289344","3227289599","PT" +"3227289600","3227290111","NL" +"3227290112","3227290367","AT" +"3227290368","3227290623","CH" +"3227290880","3227291135","AT" +"3227291136","3227294463","PT" +"3227294464","3227294975","GR" +"3227295232","3227305983","US" +"3227309824","3227310079","US" +"3227310080","3227310335","NO" +"3227310336","3227312127","US" +"3227312128","3227312383","DK" +"3227312384","3227315199","US" +"3227320320","3227361791","FR" +"3227361792","3227362303","US" +"3227362304","3227362559","GB" +"3227362560","3227385855","FR" +"3227385856","3227391999","US" +"3227392000","3227392255","PT" +"3227392256","3227393023","US" +"3227393024","3227393279","AT" +"3227393280","3227393791","US" +"3227393792","3227394047","EU" +"3227394048","3227396351","US" +"3227396352","3227396607","AU" +"3227396608","3227400447","US" +"3227400448","3227400703","AT" +"3227400704","3227400959","GB" +"3227400960","3227401471","US" +"3227401472","3227401727","ZA" +"3227401728","3227402495","AU" +"3227402496","3227403007","US" +"3227403008","3227403519","GR" +"3227403520","3227403775","US" +"3227404288","3227405311","US" +"3227405312","3227405567","DE" +"3227405568","3227414015","US" +"3227414272","3227415551","GB" +"3227415552","3227415807","US" +"3227415808","3227416063","GB" +"3227416064","3227417087","US" +"3227417088","3227417343","BN" +"3227417344","3227417599","US" +"3227417856","3227418111","US" +"3227418112","3227418367","CA" +"3227418368","3227425791","US" +"3227425792","3227427583","DK" +"3227427584","3227427839","ES" +"3227427840","3227429119","US" +"3227429120","3227429375","NZ" +"3227429376","3227429887","US" +"3227429888","3227430143","GB" +"3227430144","3227430399","US" +"3227430400","3227430655","HK" +"3227430656","3227437055","FR" +"3227437056","3227439103","US" +"3227439104","3227439615","AU" +"3227439616","3227439871","ZA" +"3227439872","3227440127","US" +"3227440128","3227440383","IT" +"3227440384","3227442175","US" +"3227442432","3227442687","RU" +"3227442688","3227443711","US" +"3227443712","3227443967","AT" +"3227443968","3227444223","AU" +"3227444224","3227445503","US" +"3227445504","3227445759","RU" +"3227445760","3227446015","US" +"3227446016","3227446271","GB" +"3227446272","3227446783","US" +"3227447040","3227447295","AT" +"3227447296","3227448063","ZA" +"3227448064","3227448575","AU" +"3227448576","3227448831","US" +"3227448832","3227449087","ZA" +"3227449088","3227450367","US" +"3227468032","3227468287","US" +"3227516928","3227582463","ZA" +"3227582464","3227638271","US" +"3227638272","3227638527","CA" +"3227638528","3227647999","US" +"3227648000","3227659775","FI" +"3227659776","3227660031","JP" +"3227660032","3227660543","FI" +"3227660544","3227660799","EE" +"3227660800","3227713535","FI" +"3227779328","3227779583","ZA" +"3227779584","3227779839","KR" +"3227779840","3227783679","US" +"3227783680","3227783935","FR" +"3227783936","3227784703","US" +"3227784704","3227784959","AU" +"3227784960","3227785727","AT" +"3227785728","3227792383","US" +"3227792384","3227792639","GB" +"3227792640","3227792895","NZ" +"3227792896","3227794687","US" +"3227794688","3227794943","GB" +"3227794944","3227795199","US" +"3227795200","3227795455","NO" +"3227795456","3227797503","US" +"3227798528","3227798783","US" +"3227798784","3227799039","TH" +"3227799040","3227799295","GB" +"3227799296","3227799551","US" +"3227799552","3227799807","AU" +"3227799808","3227800063","US" +"3227800320","3227803647","US" +"3227803648","3227804415","DE" +"3227804416","3227804671","GB" +"3227804672","3227804927","US" +"3227804928","3227805183","CA" +"3227805184","3227805695","FI" +"3227805696","3227806463","US" +"3227806464","3227806495","FI" +"3227806496","3227806527","GB" +"3227806528","3227806719","FI" +"3227806720","3227806975","US" +"3227806976","3227807039","SG" +"3227807040","3227807743","US" +"3227807744","3227809023","FI" +"3227809024","3227809279","IN" +"3227809280","3227812351","FI" +"3227812352","3227812607","EU" +"3227812608","3227813375","FI" +"3227813376","3227813631","US" +"3227813632","3227813887","MY" +"3227813888","3227815167","GB" +"3227815168","3227815935","US" +"3227815936","3227816191","GB" +"3227816192","3227818495","US" +"3227818496","3227818751","GB" +"3227818752","3227844607","MX" +"3227844864","3227845119","ES" +"3227845120","3227845631","US" +"3227845632","3227845887","RU" +"3227846144","3227846655","US" +"3227846656","3227846911","ES" +"3227847424","3227847679","GB" +"3227847680","3227848703","US" +"3227848704","3227848959","NZ" +"3227848960","3227851775","US" +"3227851776","3227852031","DE" +"3227852032","3227853055","US" +"3227853312","3227853567","GB" +"3227853568","3227860991","US" +"3227863808","3227864063","DE" +"3227864064","3227865343","US" +"3227865344","3227867903","NL" +"3227867904","3227868159","TH" +"3227868160","3227873023","US" +"3227873024","3227874047","NL" +"3227874048","3227874815","US" +"3227874816","3227875071","PT" +"3227875072","3227878911","US" +"3227878912","3227879167","AU" +"3227879168","3227879679","US" +"3227879680","3227879935","GB" +"3227880192","3227880959","US" +"3227880960","3227881215","EG" +"3227881216","3227885567","US" +"3227885568","3227887871","ES" +"3227887872","3227888127","PR" +"3227888128","3227888383","BE" +"3227888384","3227889663","US" +"3227889664","3227889919","CH" +"3227889920","3227890431","US" +"3227890432","3227890943","DE" +"3227890944","3227891455","US" +"3227891456","3227891711","AU" +"3227891712","3227893759","US" +"3227893760","3227894015","FI" +"3227894016","3227895039","US" +"3227895040","3227895551","DE" +"3227895552","3227909631","US" +"3227909632","3227909887","AU" +"3227910400","3227910655","AT" +"3227910656","3227911679","US" +"3227911680","3227912191","UA" +"3227912192","3227912447","GB" +"3227912448","3227912703","ZA" +"3227912704","3227912959","US" +"3227912960","3227913215","CA" +"3227913216","3227914495","US" +"3227914496","3227914751","AT" +"3227914752","3227918591","FI" +"3227918592","3227918847","US" +"3227918848","3227931135","FI" +"3227931136","3227931391","US" +"3227931392","3227931647","TH" +"3227931648","3227931903","PE" +"3227932672","3227932927","US" +"3227932928","3227933183","DE" +"3227933184","3227933695","US" +"3227933696","3227933951","NZ" +"3227933952","3227934463","US" +"3227934464","3227934719","CH" +"3227934720","3227947519","US" +"3227947520","3227955711","DE" +"3227955712","3227964927","US" +"3227964928","3227965183","GB" +"3227965184","3227967487","US" +"3227967488","3227967743","FR" +"3227967744","3227967999","PL" +"3227968000","3227968255","US" +"3227968256","3227968767","GB" +"3227968768","3227969023","RU" +"3227969024","3227971327","US" +"3227971328","3227971583","AU" +"3227971584","3227974143","US" +"3227974144","3227974655","AU" +"3227974656","3227975167","US" +"3227975936","3227976191","US" +"3227976192","3227976447","LU" +"3227976448","3227977471","US" +"3227977472","3227977727","FR" +"3227977728","3227978751","US" +"3227979008","3227979263","US" +"3227979264","3227979519","AE" +"3227979520","3227980799","US" +"3227980800","3227981055","GR" +"3227981056","3227981567","US" +"3227981568","3227981823","DE" +"3227981824","3227982591","US" +"3227982592","3227982847","DE" +"3227982848","3227985919","GB" +"3227985920","3227986175","DE" +"3227986176","3227986431","US" +"3227986688","3227997439","US" +"3227997440","3228005631","FI" +"3228005632","3228008959","US" +"3228008960","3228009215","AU" +"3228009472","3228010751","US" +"3228010752","3228011519","GB" +"3228011520","3228013311","US" +"3228013312","3228013567","PT" +"3228013568","3228045055","US" +"3228045056","3228045311","KR" +"3228045312","3228046335","US" +"3228046592","3228047103","US" +"3228047104","3228047359","IT" +"3228047360","3228048383","US" +"3228048384","3228048895","GB" +"3228048896","3228050175","US" +"3228050176","3228050943","PT" +"3228051200","3228051455","US" +"3228051712","3228051967","CH" +"3228051968","3228052223","US" +"3228052224","3228052991","AU" +"3228052992","3228053503","US" +"3228053504","3228053759","PT" +"3228054016","3228054783","US" +"3228054784","3228055039","GB" +"3228055040","3228055295","US" +"3228055296","3228055807","NL" +"3228055808","3228056319","NO" +"3228056320","3228059647","US" +"3228059648","3228059903","CH" +"3228060160","3228060927","US" +"3228060928","3228061183","DE" +"3228061184","3228061695","US" +"3228061952","3228062207","US" +"3228062208","3228062463","GB" +"3228062464","3228069887","US" +"3228076032","3228077055","US" +"3228077056","3228077311","NL" +"3228077312","3228077567","US" +"3228077568","3228077823","NL" +"3228077824","3228078847","US" +"3228078848","3228079103","GR" +"3228079104","3228080639","US" +"3228080640","3228080895","IE" +"3228080896","3228081151","FR" +"3228081152","3228082175","US" +"3228082944","3228083967","US" +"3228083968","3228084479","BE" +"3228084480","3228085247","US" +"3228085248","3228085503","JP" +"3228085504","3228100607","US" +"3228100608","3228101119","JP" +"3228101120","3228102143","US" +"3228102144","3228102399","GB" +"3228102400","3228103935","US" +"3228103936","3228104191","FR" +"3228104192","3228104703","JP" +"3228104704","3228104959","DK" +"3228104960","3228105471","US" +"3228105472","3228105727","CH" +"3228105728","3228109311","US" +"3228109312","3228109567","NZ" +"3228109568","3228125951","US" +"3228125952","3228126207","RU" +"3228126208","3228133375","US" +"3228133376","3228134655","CA" +"3228134656","3228150271","US" +"3228150272","3228150527","FI" +"3228150528","3228156671","US" +"3228156672","3228156927","BE" +"3228156928","3228171775","US" +"3228171776","3228172031","GB" +"3228172032","3228172287","US" +"3228172288","3228237823","IT" +"3228238080","3228238335","NO" +"3228238336","3228238591","GB" +"3228238592","3228238847","US" +"3228238848","3228239359","GB" +"3228239616","3228240127","US" +"3228240128","3228240383","AU" +"3228240640","3228241407","GB" +"3228241408","3228250367","US" +"3228250624","3228250879","US" +"3228250880","3228263679","IT" +"3228263680","3228263935","AU" +"3228263936","3228264447","US" +"3228264448","3228264703","NI" +"3228264704","3228265983","US" +"3228265984","3228266239","IE" +"3228266752","3228267007","NZ" +"3228267008","3228267263","NO" +"3228267264","3228268543","US" +"3228269056","3228269311","PT" +"3228269312","3228269567","DE" +"3228269568","3228270079","AT" +"3228270080","3228271103","GB" +"3228271104","3228271359","US" +"3228271360","3228271615","CA" +"3228271616","3228271871","DE" +"3228272128","3228272383","US" +"3228274688","3228280831","US" +"3228280832","3228281087","GB" +"3228281088","3228281599","US" +"3228281600","3228282111","NZ" +"3228282112","3228282367","US" +"3228282368","3228282623","GB" +"3228282624","3228283135","US" +"3228283136","3228283391","GR" +"3228283392","3228283647","GB" +"3228283648","3228285695","US" +"3228285696","3228285951","SE" +"3228285952","3228289023","US" +"3228289024","3228297215","FI" +"3228297216","3228297727","AT" +"3228297728","3228297983","US" +"3228297984","3228298495","DE" +"3228298496","3228309247","US" +"3228309248","3228327167","DE" +"3228327168","3228328703","US" +"3228328704","3228328959","AU" +"3228328960","3228329471","NO" +"3228329472","3228330751","US" +"3228330752","3228331263","SE" +"3228331264","3228332287","US" +"3228332544","3228332799","GR" +"3228332800","3228334079","FR" +"3228334080","3228334335","GB" +"3228334336","3228334591","AT" +"3228334592","3228335359","US" +"3228335360","3228335615","SK" +"3228335616","3228335871","CZ" +"3228336128","3228336639","CZ" +"3228336640","3228337663","SK" +"3228337664","3228338431","CZ" +"3228338432","3228340735","SK" +"3228340736","3228341247","CZ" +"3228341248","3228341759","SK" +"3228341760","3228342271","CZ" +"3228342272","3228342783","SK" +"3228342784","3228343039","CZ" +"3228343040","3228343295","SK" +"3228343296","3228343551","CZ" +"3228343552","3228344063","SK" +"3228344064","3228344575","CZ" +"3228344576","3228347135","SK" +"3228347136","3228347391","CZ" +"3228347392","3228348159","SK" +"3228348160","3228353279","US" +"3228353280","3228358399","SE" +"3228358400","3228362239","US" +"3228362240","3228362495","TH" +"3228362496","3228362751","US" +"3228363008","3228363263","US" +"3228363264","3228363519","CH" +"3228363520","3228364287","US" +"3228364288","3228364543","AT" +"3228364800","3228368895","US" +"3228368896","3228404735","DE" +"3228404736","3228405247","FR" +"3228405248","3228405503","KR" +"3228405504","3228405759","SG" +"3228405760","3228406015","IN" +"3228406016","3228406271","US" +"3228406272","3228407039","FR" +"3228407040","3228413183","DE" +"3228413184","3228413439","SG" +"3228413440","3228417791","DE" +"3228417792","3228418559","AT" +"3228418560","3228418815","IN" +"3228418816","3228421119","DE" +"3228421120","3228421375","BE" +"3228421376","3228423679","DE" +"3228423680","3228424191","CH" +"3228424192","3228434431","DE" +"3228434432","3228456191","US" +"3228456192","3228456447","CA" +"3228456448","3228457471","US" +"3228457472","3228457727","CA" +"3228457728","3228461567","US" +"3228461568","3228461823","CA" +"3228461824","3228464127","US" +"3228464128","3228464383","CA" +"3228464384","3228483583","US" +"3228491520","3228496127","US" +"3228496128","3228496383","GB" +"3228496384","3228508159","US" +"3228508160","3228508415","AU" +"3228508416","3228508671","NO" +"3228508672","3228509439","US" +"3228509952","3228510207","IE" +"3228510208","3228511231","US" +"3228511232","3228511487","CZ" +"3228511488","3228511999","US" +"3228512000","3228512255","DE" +"3228512256","3228512511","CH" +"3228512512","3228513791","US" +"3228521984","3228522495","US" +"3228522496","3228522751","GB" +"3228522752","3228525823","US" +"3228525824","3228526079","PT" +"3228526080","3228526335","NZ" +"3228526336","3228526591","CH" +"3228526592","3228526847","AT" +"3228526848","3228527103","AU" +"3228527104","3228531711","US" +"3228531712","3228532223","NO" +"3228532224","3228532479","US" +"3228532480","3228532735","DE" +"3228540928","3228558591","US" +"3228558592","3228559103","BR" +"3228559104","3228564479","US" +"3228564480","3228564735","AT" +"3228564736","3228565247","US" +"3228565504","3228572927","US" +"3228573184","3228573951","PT" +"3228573952","3228574463","US" +"3228574720","3228577023","US" +"3228577024","3228577279","PT" +"3228577280","3228578047","US" +"3228578048","3228578303","GB" +"3228578304","3228581119","US" +"3228581120","3228581375","AT" +"3228581376","3228583167","US" +"3228583424","3228585983","ES" +"3228585984","3228590591","US" +"3228590592","3228590847","GB" +"3228590848","3228591103","DK" +"3228591104","3228591359","GB" +"3228591360","3228617727","US" +"3228617728","3228617983","FI" +"3228617984","3228618239","US" +"3228618240","3228618495","SE" +"3228618496","3228618751","US" +"3228618752","3228619007","DE" +"3228619008","3228620031","US" +"3228620032","3228620287","DE" +"3228620288","3228620543","CH" +"3228620544","3228620799","AU" +"3228620800","3228628735","US" +"3228628736","3228628991","ES" +"3228628992","3228630527","US" +"3228630528","3228630783","CH" +"3228631040","3228696575","NL" +"3228696576","3228745183","IL" +"3228745184","3228745187","A2" +"3228745188","3228826371","IL" +"3228826372","3228826372","US" +"3228826373","3228827647","IL" +"3228827648","3228828159","PS" +"3228828160","3228829183","IL" +"3228829184","3228829695","PS" +"3228829696","3228830207","IL" +"3228830208","3228833791","PS" +"3228833792","3228846335","IL" +"3228846336","3228846591","A2" +"3228846592","3228849407","IL" +"3228849408","3228849663","A2" +"3228849664","3228850175","IL" +"3228850176","3228850431","A2" +"3228850432","3228858111","IL" +"3228858112","3228858367","A2" +"3228858368","3228864255","IL" +"3228864256","3228864511","A2" +"3228864512","3228887011","IL" +"3228887012","3228887015","A2" +"3228887016","3229024255","IL" +"3229024256","3229092095","US" +"3229092096","3229093887","AU" +"3229093888","3229101823","US" +"3229101824","3229102591","FI" +"3229102592","3229104895","US" +"3229104896","3229105151","ES" +"3229105152","3229120511","US" +"3229120512","3229120767","SE" +"3229120768","3229151487","US" +"3229151488","3229151743","SE" +"3229151744","3229155327","US" +"3229155328","3229155583","GB" +"3229155584","3229155839","SE" +"3229155840","3229156095","ES" +"3229156096","3229161727","SE" +"3229161728","3229161983","GB" +"3229161984","3229164543","SE" +"3229164544","3229165055","GB" +"3229165056","3229168895","SE" +"3229168896","3229169151","JP" +"3229169152","3229171455","SE" +"3229171456","3229171711","MT" +"3229171712","3229172223","GB" +"3229172224","3229182463","SE" +"3229182464","3229182975","GB" +"3229182976","3229189119","SE" +"3229189120","3229189375","GB" +"3229189376","3229191167","SE" +"3229191168","3229191423","GB" +"3229191424","3229192191","SE" +"3229192192","3229192447","FI" +"3229192448","3229200383","SE" +"3229200384","3229200895","GB" +"3229200896","3229201151","DE" +"3229201152","3229201663","SE" +"3229201664","3229201919","DK" +"3229201920","3229203199","SE" +"3229203200","3229203967","GB" +"3229203968","3229205503","SE" +"3229205504","3229206015","GB" +"3229206016","3229219583","SE" +"3229219584","3229219839","EE" +"3229219840","3229220863","SE" +"3229220864","3229245439","GB" +"3229245440","3229246719","US" +"3229246720","3229250815","GB" +"3229250816","3229251071","US" +"3229251072","3229254399","GB" +"3229254400","3229256959","SG" +"3229256960","3229258495","GB" +"3229258496","3229259007","US" +"3229259520","3229264639","GB" +"3229264640","3229264895","NZ" +"3229264896","3229265919","US" +"3229265920","3229266175","AU" +"3229266176","3229266943","US" +"3229266944","3229267199","NZ" +"3229267200","3229275647","US" +"3229275648","3229275903","GB" +"3229276160","3229281023","IE" +"3229281024","3229281791","US" +"3229281792","3229283071","PT" +"3229283072","3229285887","US" +"3229285888","3229286143","NO" +"3229286400","3229354495","US" +"3229354496","3229355775","AU" +"3229355776","3229358079","US" +"3229358080","3229359359","DE" +"3229359872","3229360127","US" +"3229360128","3229360383","AT" +"3229360384","3229361919","US" +"3229361920","3229362175","BE" +"3229362176","3229363199","US" +"3229363456","3229363711","US" +"3229363712","3229363967","GB" +"3229363968","3229380607","US" +"3229380608","3229380863","DE" +"3229380864","3229381375","US" +"3229381376","3229381631","DE" +"3229381632","3229381887","PL" +"3229381888","3229382143","AU" +"3229382144","3229382399","US" +"3229382656","3229390847","US" +"3229390848","3229391103","AU" +"3229391104","3229391359","US" +"3229391360","3229391615","CN" +"3229391616","3229391871","AT" +"3229391872","3229392895","US" +"3229392896","3229393151","NZ" +"3229393152","3229394175","US" +"3229394944","3229408255","RU" +"3229408256","3229412095","US" +"3229412096","3229483007","DE" +"3229483008","3229499647","FI" +"3229499648","3229500671","US" +"3229548544","3229614847","US" +"3229614848","3229615103","GB" +"3229615104","3229679103","US" +"3229679104","3229679359","EU" +"3229679360","3229679615","US" +"3229679872","3229680383","DE" +"3229680384","3229680895","RO" +"3229680896","3229695487","DE" +"3229695488","3229700095","US" +"3229700096","3229700351","AT" +"3229700352","3229701887","US" +"3229701888","3229702143","TR" +"3229702144","3229704703","US" +"3229704704","3229704959","DE" +"3229705216","3229708287","US" +"3229745152","3229749759","FI" +"3229749760","3229750015","BE" +"3229750016","3229810687","FI" +"3229810688","3229814015","US" +"3229814016","3229814271","AU" +"3229814272","3229815807","US" +"3229815808","3229816063","DE" +"3229816320","3229817087","US" +"3229817088","3229817599","SE" +"3229817600","3229818623","AU" +"3229818624","3229830911","US" +"3229830912","3229831167","GB" +"3229831168","3229833215","US" +"3229833472","3229833727","GB" +"3229833728","3229834495","AU" +"3229834496","3229834751","US" +"3229834752","3229835007","CA" +"3229835008","3229835263","US" +"3229835264","3229835519","FI" +"3229835520","3229835775","CA" +"3229835776","3229838335","US" +"3229838336","3229838591","GB" +"3229838592","3229838847","US" +"3229839104","3229844479","US" +"3229844480","3229844735","BE" +"3229844736","3229844991","US" +"3229845248","3229845503","US" +"3229845504","3229847295","CA" +"3229847296","3229864703","US" +"3229864704","3229864959","AP" +"3229864960","3229874943","US" +"3229874944","3229875455","AU" +"3229875456","3229875967","US" +"3229876224","3229878271","US" +"3229878528","3229878783","GB" +"3229878784","3229879039","IT" +"3229879040","3229879295","NO" +"3229879296","3229880063","US" +"3229880064","3229880319","KR" +"3229880320","3229881087","US" +"3229881088","3229881343","CA" +"3229881344","3229883391","US" +"3229883648","3229883903","US" +"3229884160","3229884415","JP" +"3229884928","3229885183","IT" +"3229885184","3229885439","BR" +"3229885440","3229886719","US" +"3229886720","3229886975","AU" +"3229886976","3229889791","US" +"3229889792","3229890047","PT" +"3229890048","3229890303","US" +"3229890304","3229890559","PT" +"3229890560","3229891583","US" +"3229891584","3229891839","CA" +"3229892608","3229900031","US" +"3229900032","3229900287","AU" +"3229900288","3229901567","US" +"3229901568","3229901823","GB" +"3229901824","3229937407","US" +"3229937408","3229937663","GB" +"3229937664","3229937919","US" +"3229937920","3229938175","CA" +"3229938176","3229938431","US" +"3229938688","3229938943","IL" +"3229938944","3229939199","AT" +"3229939200","3229939455","US" +"3229939456","3229940735","KR" +"3229940736","3229940991","CH" +"3229940992","3229941247","AU" +"3229941248","3229941503","US" +"3229941760","3229945343","US" +"3229945600","3229945855","PT" +"3229945856","3229947135","US" +"3229947136","3229947391","AU" +"3229947392","3229948927","US" +"3229948928","3229949183","IT" +"3229949184","3229949695","US" +"3229949696","3229949951","NZ" +"3229949952","3229950207","NO" +"3229950208","3229950975","US" +"3229950976","3229951231","IL" +"3229951232","3229952255","US" +"3229952256","3229952511","AU" +"3229952512","3229955327","US" +"3229955328","3229955583","NL" +"3229955584","3229956095","PT" +"3229956096","3229956607","US" +"3229956608","3229956863","GB" +"3229956864","3229958143","US" +"3229958144","3229958399","NO" +"3229958400","3229958655","US" +"3229958912","3229959167","SG" +"3229959168","3229961215","US" +"3229962240","3229967615","US" +"3229967872","3229968127","US" +"3229968128","3229968383","BE" +"3229968384","3229968895","US" +"3229969408","3229969663","PT" +"3229969664","3229969919","AT" +"3229969920","3229970431","FI" +"3229971456","3229972735","US" +"3229972736","3229972991","SE" +"3229972992","3229975295","US" +"3229975296","3229975551","GB" +"3229975552","3229976575","US" +"3229978624","3230004223","US" +"3230004224","3230004479","GB" +"3230004480","3230004991","US" +"3230005760","3230006015","ZA" +"3230006016","3230007295","US" +"3230007296","3230072831","FR" +"3230072832","3230074623","US" +"3230074624","3230074879","DE" +"3230074880","3230082559","IT" +"3230082560","3230082815","US" +"3230083072","3230084607","US" +"3230084608","3230084863","NO" +"3230084864","3230085119","US" +"3230085120","3230085375","CA" +"3230085376","3230085631","US" +"3230085888","3230086143","DE" +"3230086144","3230086655","GB" +"3230088960","3230089215","AT" +"3230089216","3230089727","US" +"3230089728","3230089983","GB" +"3230089984","3230090239","US" +"3230090240","3230090495","GB" +"3230090496","3230092543","US" +"3230092544","3230092799","CA" +"3230092800","3230093823","US" +"3230093824","3230094079","NL" +"3230094080","3230094335","CA" +"3230094336","3230095615","US" +"3230095616","3230095871","JP" +"3230096384","3230101503","JP" +"3230101504","3230105855","US" +"3230105856","3230106111","PT" +"3230106112","3230106879","US" +"3230106880","3230107135","AT" +"3230107136","3230109439","US" +"3230109440","3230109695","NO" +"3230109696","3230109951","US" +"3230109952","3230115071","CH" +"3230115072","3230115327","IT" +"3230115328","3230115583","GR" +"3230115584","3230116095","BE" +"3230116096","3230117631","US" +"3230117632","3230117887","FR" +"3230117888","3230120191","US" +"3230120192","3230120447","BE" +"3230120448","3230120703","US" +"3230120704","3230120959","PT" +"3230120960","3230124031","US" +"3230125312","3230125567","US" +"3230125824","3230126335","AU" +"3230126336","3230126591","US" +"3230126848","3230128639","US" +"3230128896","3230129151","PT" +"3230129152","3230129663","US" +"3230129664","3230129919","JP" +"3230130176","3230130431","US" +"3230130432","3230130687","IE" +"3230130688","3230131967","US" +"3230131968","3230132991","GB" +"3230132992","3230137599","US" +"3230137600","3230137855","NO" +"3230137856","3230138111","PL" +"3230138368","3230140159","US" +"3230140160","3230140415","MT" +"3230140416","3230140671","US" +"3230140672","3230140927","FI" +"3230140928","3230142975","US" +"3230142976","3230143231","GB" +"3230143232","3230143487","BE" +"3230143488","3230144255","US" +"3230144256","3230144511","NL" +"3230144512","3230145279","US" +"3230145280","3230145535","CA" +"3230145536","3230145791","US" +"3230145792","3230146047","GB" +"3230146048","3230146303","FR" +"3230146304","3230146559","PT" +"3230146560","3230147583","US" +"3230147840","3230148351","US" +"3230148352","3230148607","AU" +"3230148608","3230148863","GB" +"3230148864","3230149119","CH" +"3230149120","3230150655","NI" +"3230150656","3230150911","US" +"3230150912","3230151167","PT" +"3230151168","3230151423","US" +"3230151424","3230151679","NL" +"3230151680","3230151935","PT" +"3230152192","3230152447","FR" +"3230152448","3230153215","BF" +"3230153216","3230153471","FR" +"3230153472","3230153727","PF" +"3230153728","3230153983","US" +"3230153984","3230154239","RU" +"3230154240","3230156543","US" +"3230156544","3230164991","FI" +"3230164992","3230167295","US" +"3230167552","3230168063","CA" +"3230168832","3230177791","US" +"3230177792","3230178303","GB" +"3230178304","3230178559","CH" +"3230203904","3230210047","US" +"3230210048","3230210303","CA" +"3230210304","3230211839","US" +"3230211840","3230212095","CN" +"3230212096","3230214911","US" +"3230214912","3230215167","PR" +"3230215168","3230219775","US" +"3230219776","3230220031","NL" +"3230220032","3230220287","US" +"3230220288","3230222847","NL" +"3230222848","3230223103","ES" +"3230223104","3230223359","GB" +"3230223360","3230223615","CH" +"3230223616","3230225919","LU" +"3230225920","3230226175","AU" +"3230226176","3230226431","ES" +"3230226432","3230226687","US" +"3230226688","3230226943","NO" +"3230226944","3230228223","GB" +"3230228224","3230228479","ES" +"3230228480","3230228735","AU" +"3230228736","3230228991","US" +"3230228992","3230229247","GB" +"3230229248","3230229503","US" +"3230229504","3230229759","ES" +"3230229760","3230230015","DE" +"3230230016","3230236159","US" +"3230236160","3230236415","AU" +"3230236416","3230236671","GB" +"3230236672","3230236927","CA" +"3230236928","3230240767","US" +"3230240768","3230241023","DK" +"3230241024","3230241791","GB" +"3230241792","3230242303","CH" +"3230242304","3230243839","US" +"3230243840","3230244095","HK" +"3230244096","3230244351","US" +"3230244352","3230244607","CA" +"3230244608","3230245119","FR" +"3230245120","3230246143","SE" +"3230246144","3230246911","US" +"3230246912","3230247167","CH" +"3230247168","3230247935","US" +"3230247936","3230248191","AU" +"3230248192","3230251007","US" +"3230251008","3230251263","CH" +"3230251264","3230251519","MX" +"3230251520","3230252031","CH" +"3230252032","3230254847","US" +"3230254848","3230255359","SE" +"3230255360","3230255615","ES" +"3230255616","3230256127","US" +"3230256128","3230256383","GB" +"3230256384","3230257919","US" +"3230257920","3230259199","CH" +"3230259200","3230263807","US" +"3230263808","3230264063","SE" +"3230264064","3230264319","NL" +"3230264320","3230266111","CH" +"3230266112","3230267135","US" +"3230267136","3230267903","CA" +"3230267904","3230269439","US" +"3230269440","3230273535","GB" +"3230275584","3230291455","US" +"3230291456","3230291711","PT" +"3230291712","3230295039","US" +"3230295040","3230295295","AU" +"3230295296","3230296319","US" +"3230296320","3230297343","NO" +"3230297344","3230300159","SE" +"3230301696","3230302207","US" +"3230302208","3230302975","CA" +"3230302976","3230309119","US" +"3230309120","3230309375","NO" +"3230309376","3230310143","GB" +"3230310144","3230316287","US" +"3230316288","3230316543","IT" +"3230316544","3230316799","US" +"3230316800","3230317311","CA" +"3230317312","3230318591","US" +"3230318592","3230318847","GB" +"3230318848","3230321663","US" +"3230321664","3230321919","PT" +"3230321920","3230322175","US" +"3230322432","3230327807","US" +"3230327808","3230328063","AT" +"3230328064","3230328319","GB" +"3230328320","3230329087","CH" +"3230329088","3230332927","US" +"3230332928","3230333183","GB" +"3230333184","3230333695","US" +"3230333696","3230333951","NZ" +"3230333952","3230334975","US" +"3230334976","3230354943","CA" +"3230354944","3230355199","FR" +"3230355200","3230365183","CA" +"3230365184","3230365439","US" +"3230365440","3230368767","CA" +"3230368768","3230370303","US" +"3230370304","3230370559","CA" +"3230370816","3230400511","CA" +"3230400512","3230681599","EU" +"3230681600","3230681855","FR" +"3230682112","3230682623","FR" +"3230682624","3230793727","EU" +"3230793728","3230823679","US" +"3230823680","3230823935","DK" +"3230824192","3230824447","FR" +"3230824448","3230825215","US" +"3230825216","3230825471","GB" +"3230825472","3230826239","ES" +"3230826240","3230827007","US" +"3230827520","3230827775","AT" +"3230827776","3230828031","NZ" +"3230828032","3230828543","HU" +"3230828544","3230829055","GB" +"3230829056","3230829567","RO" +"3230829568","3230830079","RU" +"3230830080","3230832127","US" +"3230832128","3230832383","NZ" +"3230832384","3230832639","US" +"3230832640","3230832895","FI" +"3230832896","3230833663","US" +"3230833664","3230833919","CA" +"3230833920","3230834175","BR" +"3230834176","3230835455","US" +"3230835456","3230837503","NO" +"3230837504","3230837759","US" +"3230837760","3230838015","ES" +"3230838016","3230840319","IT" +"3230840320","3230840575","FR" +"3230840576","3230840831","US" +"3230840832","3230841087","JP" +"3230841088","3230841343","DE" +"3230841600","3230841855","ES" +"3230841856","3230843135","US" +"3230843136","3230843391","NO" +"3230843392","3230844927","US" +"3230844928","3230845183","AU" +"3230845184","3230845951","US" +"3230845952","3230846207","CZ" +"3230846208","3230849535","US" +"3230849536","3230850047","NZ" +"3230850048","3230851839","US" +"3230851840","3230852095","NO" +"3230852096","3230852351","GB" +"3230852352","3230852607","BR" +"3230853376","3230853887","FR" +"3230853888","3230854399","US" +"3230854400","3230854655","UY" +"3230854656","3230855167","NO" +"3230855168","3230855679","US" +"3230855680","3230855935","IT" +"3230855936","3230857983","US" +"3230857984","3230858751","AU" +"3230858752","3230859007","US" +"3230859264","3230865151","US" +"3230865152","3230865407","GB" +"3230865408","3230867967","US" +"3230867968","3230868223","IS" +"3230868224","3230868479","US" +"3230868480","3230868735","GB" +"3230868992","3230870015","US" +"3230870016","3230870271","PL" +"3230870272","3230873343","US" +"3230873344","3230873599","HK" +"3230873600","3230878719","US" +"3230878720","3230879487","PT" +"3230879488","3230879743","FR" +"3230879744","3230888447","US" +"3230888448","3230888703","AU" +"3230888704","3230895359","US" +"3230895360","3230895615","PL" +"3230895616","3230897151","US" +"3230897408","3230897663","US" +"3230897664","3230897919","GB" +"3230898688","3230898943","US" +"3230898944","3230899199","PT" +"3230899200","3230913023","US" +"3230913024","3230913279","BR" +"3230913280","3230913535","US" +"3230913536","3230913791","GB" +"3230913792","3230914047","CA" +"3230914048","3230914303","US" +"3230914304","3230914815","FI" +"3230914816","3230915071","GB" +"3230915072","3230915327","BR" +"3230915328","3230915583","GB" +"3230915584","3230917631","US" +"3230917632","3230917887","GB" +"3230917888","3230918399","US" +"3230918656","3230919423","US" +"3230919424","3230919679","AU" +"3230919680","3230922239","US" +"3230922240","3230922495","AU" +"3230922496","3230922751","IT" +"3230922752","3230923519","US" +"3230923520","3230923775","EU" +"3230923776","3230933247","US" +"3230933248","3230948607","SE" +"3230948608","3230951167","US" +"3230951168","3230951423","PT" +"3230951424","3230953471","US" +"3230953472","3230967295","AU" +"3230967296","3230967551","RU" +"3230967552","3230967807","ES" +"3230967808","3230969087","US" +"3230969344","3230969599","US" +"3230969600","3230969855","MX" +"3230969856","3230970111","US" +"3230970112","3230972671","GB" +"3230972672","3230973951","US" +"3230973952","3230974207","NL" +"3230974208","3230974463","IT" +"3230974464","3230974719","GB" +"3230974720","3230975487","US" +"3230975488","3230975999","GB" +"3230976000","3230976255","NL" +"3230976256","3230980095","ES" +"3230980096","3230980351","GB" +"3230980352","3230980607","CA" +"3230980608","3230980863","US" +"3230981120","3230981375","IT" +"3230981376","3230981631","NZ" +"3230981632","3230981887","US" +"3230981888","3230983935","AU" +"3230983936","3230990335","US" +"3230990592","3230991103","US" +"3230991104","3230991359","PL" +"3230991360","3230991615","US" +"3230991616","3230991871","FI" +"3230991872","3230994175","US" +"3230994176","3230994431","GB" +"3230994432","3230994687","US" +"3230994944","3230995199","US" +"3230995200","3230995455","ES" +"3230995456","3230995711","AU" +"3230995712","3230996223","US" +"3230996480","3230997247","US" +"3230997248","3230997503","AT" +"3230997504","3230997759","US" +"3230997760","3230998015","SE" +"3230998016","3230999039","NL" +"3230999040","3230999295","US" +"3230999296","3230999551","NL" +"3230999552","3230999807","AU" +"3230999808","3231000319","US" +"3231000576","3231000831","US" +"3231000832","3231001087","FR" +"3231001088","3231003903","US" +"3231003904","3231004159","CA" +"3231004160","3231004415","AU" +"3231004416","3231004927","US" +"3231004928","3231005183","GB" +"3231005440","3231005695","FR" +"3231005696","3231005951","GB" +"3231005952","3231007743","US" +"3231009280","3231009791","US" +"3231010048","3231010303","FR" +"3231010304","3231010815","NO" +"3231010816","3231011071","CA" +"3231011072","3231014911","US" +"3231015168","3231015423","US" +"3231015424","3231015679","CA" +"3231015680","3231015935","US" +"3231015936","3231016191","NO" +"3231016192","3231016447","US" +"3231016448","3231016703","NO" +"3231016704","3231018495","US" +"3231018496","3231018751","IT" +"3231018752","3231019007","GB" +"3231019008","3231020287","US" +"3231020288","3231020543","GB" +"3231020544","3231020799","NL" +"3231020800","3231021567","GB" +"3231021568","3231021823","US" +"3231021824","3231022079","CA" +"3231022080","3231022591","US" +"3231022592","3231022847","DE" +"3231022848","3231042047","US" +"3231042048","3231042303","GU" +"3231042304","3231043839","US" +"3231043840","3231044095","JP" +"3231044352","3231048447","US" +"3231048448","3231048703","NL" +"3231048704","3231049727","US" +"3231049728","3231049983","AT" +"3231049984","3231050239","US" +"3231050496","3231051263","US" +"3231051264","3231051519","GB" +"3231051776","3231057919","US" +"3231057920","3231058175","EU" +"3231058176","3231060991","US" +"3231060992","3231061247","EU" +"3231061248","3231070463","US" +"3231070720","3231077119","SE" +"3231077120","3231077375","PL" +"3231077376","3231077631","SE" +"3231078144","3231078655","US" +"3231078656","3231078911","GB" +"3231078912","3231079423","CA" +"3231079424","3231079679","GB" +"3231079680","3231079935","US" +"3231079936","3231080191","NL" +"3231080192","3231082495","US" +"3231082496","3231082751","PL" +"3231082752","3231083007","US" +"3231083008","3231083263","GB" +"3231083520","3231087615","US" +"3231087616","3231087871","NO" +"3231087872","3231088127","US" +"3231088128","3231088383","GT" +"3231088384","3231088895","US" +"3231088896","3231091711","AU" +"3231091712","3231091967","GB" +"3231091968","3231092223","US" +"3231092480","3231092735","US" +"3231092992","3231093247","US" +"3231093248","3231093503","IT" +"3231093504","3231094783","US" +"3231096832","3231101183","US" +"3231101184","3231103231","GB" +"3231103488","3231103999","US" +"3231104000","3231104255","NO" +"3231104256","3231104767","DE" +"3231104768","3231105023","US" +"3231105024","3231105535","PT" +"3231105536","3231106303","IT" +"3231106304","3231106559","NO" +"3231106560","3231106815","GB" +"3231106816","3231107071","US" +"3231107328","3231107583","US" +"3231107584","3231107839","AU" +"3231107840","3231108095","AT" +"3231108096","3231108351","GB" +"3231108352","3231108607","RU" +"3231108608","3231108863","US" +"3231109120","3231109375","GB" +"3231109376","3231109631","NO" +"3231109632","3231109887","US" +"3231110144","3231110399","US" +"3231111168","3231111679","US" +"3231111680","3231112191","NZ" +"3231112448","3231112959","US" +"3231112960","3231113215","NO" +"3231113216","3231113983","US" +"3231113984","3231115775","GB" +"3231115776","3231116799","AU" +"3231116800","3231117055","HU" +"3231117056","3231118335","US" +"3231118592","3231118847","US" +"3231118848","3231119103","AU" +"3231119104","3231119359","US" +"3231119360","3231119615","GB" +"3231119616","3231120383","TH" +"3231120384","3231120639","NO" +"3231120640","3231120895","US" +"3231120896","3231121151","NO" +"3231121408","3231149311","US" +"3231149312","3231149567","CA" +"3231149568","3231154431","US" +"3231186944","3231188479","US" +"3231188480","3231188735","NO" +"3231188736","3231190527","US" +"3231190528","3231190783","GB" +"3231190784","3231191295","US" +"3231191296","3231191551","GB" +"3231191552","3231192575","US" +"3231193600","3231194111","DE" +"3231194112","3231197695","US" +"3231197696","3231197951","FR" +"3231197952","3231198207","US" +"3231198208","3231198463","GB" +"3231198464","3231198975","US" +"3231198976","3231199231","PT" +"3231199232","3231199487","GB" +"3231199488","3231200255","NL" +"3231200256","3231200767","US" +"3231200768","3231201023","AT" +"3231201024","3231202559","US" +"3231202560","3231203071","GB" +"3231203072","3231203327","AT" +"3231203328","3231204351","US" +"3231204352","3231204607","FI" +"3231204608","3231204863","JP" +"3231204864","3231207935","US" +"3231207936","3231208191","DE" +"3231208192","3231208959","US" +"3231209472","3231211775","US" +"3231211776","3231212031","CA" +"3231212032","3231212287","CH" +"3231212288","3231214335","US" +"3231214336","3231214591","CA" +"3231214592","3231215103","US" +"3231215360","3231215615","NO" +"3231215616","3231215871","GB" +"3231215872","3231217151","US" +"3231217408","3231217663","AU" +"3231217664","3231218175","US" +"3231218176","3231218431","GB" +"3231218432","3231218687","US" +"3231218688","3231218943","BE" +"3231218944","3231223039","US" +"3231223040","3231223295","IT" +"3231223296","3231225599","US" +"3231225600","3231225855","DE" +"3231226368","3231226879","US" +"3231226880","3231227135","GB" +"3231227648","3231228927","US" +"3231228928","3231229183","PR" +"3231229184","3231229439","CA" +"3231229440","3231229695","IT" +"3231229696","3231229951","FR" +"3231229952","3231231487","US" +"3231231488","3231231743","PT" +"3231231744","3231234047","US" +"3231234048","3231235071","GB" +"3231235072","3231236095","US" +"3231236608","3231236863","US" +"3231236864","3231237119","CA" +"3231237120","3231241215","US" +"3231241216","3231241471","JP" +"3231241984","3231248639","US" +"3231248640","3231248895","GB" +"3231248896","3231249407","US" +"3231249408","3231249663","GB" +"3231249664","3231250431","US" +"3231250432","3231250687","CA" +"3231250688","3231251711","US" +"3231251712","3231251967","GB" +"3231251968","3231252223","AT" +"3231252736","3231252991","US" +"3231252992","3231253503","GB" +"3231253504","3231255551","US" +"3231255552","3231255807","GB" +"3231255808","3231256063","PT" +"3231256064","3231257087","US" +"3231257088","3231257599","HU" +"3231257600","3231275007","US" +"3231275008","3231275263","BR" +"3231275264","3231275519","CH" +"3231275520","3231276287","US" +"3231276288","3231276543","AU" +"3231276544","3231276799","US" +"3231276800","3231281919","JP" +"3231281920","3231282175","US" +"3231282176","3231282431","HU" +"3231282432","3231282943","US" +"3231282944","3231283199","CL" +"3231283200","3231283455","BR" +"3231283456","3231284991","US" +"3231284992","3231285247","PL" +"3231285248","3231291647","US" +"3231291648","3231291903","GB" +"3231291904","3231292159","US" +"3231292160","3231292415","BR" +"3231292416","3231292927","US" +"3231292928","3231293183","AU" +"3231293184","3231294975","US" +"3231294976","3231295231","GB" +"3231295232","3231295487","CR" +"3231295488","3231295743","BE" +"3231295744","3231296255","US" +"3231296256","3231296511","RU" +"3231296512","3231296767","US" +"3231296768","3231299327","AT" +"3231299328","3231299583","US" +"3231300352","3231300607","US" +"3231300608","3231300863","SE" +"3231300864","3231301119","GB" +"3231301120","3231302143","US" +"3231302144","3231302399","NO" +"3231302400","3231302655","US" +"3231302656","3231303167","AU" +"3231303168","3231307007","US" +"3231307008","3231307263","GB" +"3231307264","3231308031","US" +"3231308032","3231308287","CA" +"3231308288","3231308799","US" +"3231308800","3231309055","CA" +"3231309824","3231316735","US" +"3231316736","3231316991","NZ" +"3231316992","3231322111","US" +"3231322112","3231326207","SG" +"3231326208","3231351807","US" +"3231383552","3231385599","NO" +"3231385600","3231401983","US" +"3231416320","3231424511","US" +"3231449088","3231482879","US" +"3231482880","3231483135","BE" +"3231483136","3231484927","US" +"3231484928","3231490047","JP" +"3231490048","3231490559","US" +"3231490560","3231490815","GB" +"3231490816","3231491071","US" +"3231491328","3231491583","NZ" +"3231491584","3231491839","US" +"3231491840","3231492095","GB" +"3231492096","3231493631","US" +"3231493632","3231493887","CH" +"3231493888","3231499263","US" +"3231499520","3231500031","US" +"3231500032","3231500287","BM" +"3231500288","3231502079","US" +"3231502080","3231502335","AU" +"3231502592","3231502847","US" +"3231502848","3231503103","PT" +"3231503104","3231503615","US" +"3231503616","3231503871","IT" +"3231503872","3231504383","US" +"3231504640","3231504895","RU" +"3231504896","3231506687","US" +"3231506688","3231506943","NZ" +"3231506944","3231507199","US" +"3231507200","3231507455","BE" +"3231507456","3231508479","US" +"3231508992","3231509247","US" +"3231510272","3231510527","GB" +"3231510528","3231511551","US" +"3231512576","3231512831","LU" +"3231513088","3231513343","US" +"3231513600","3231514623","US" +"3231514624","3231515647","NO" +"3231515648","3231516159","US" +"3231516672","3231519231","SE" +"3231522560","3231524863","US" +"3231531008","3231535103","US" +"3231547392","3231547647","US" +"3231547648","3231547903","NO" +"3231547904","3231549951","US" +"3231549952","3231550207","JP" +"3231550208","3231550719","DE" +"3231550720","3231550975","GB" +"3231550976","3231551231","US" +"3231551232","3231551999","CA" +"3231552000","3231553023","US" +"3231553024","3231553791","JP" +"3231553792","3231554047","CH" +"3231554048","3231555327","DE" +"3231555328","3231556095","CA" +"3231556352","3231556863","US" +"3231556864","3231557119","AT" +"3231557120","3231557887","US" +"3231557888","3231558399","GB" +"3231558400","3231558655","DE" +"3231558656","3231558911","GB" +"3231558912","3231559167","CA" +"3231559168","3231559423","GB" +"3231559424","3231559679","US" +"3231559680","3231559935","GB" +"3231559936","3231561983","US" +"3231561984","3231562239","IT" +"3231562240","3231562495","US" +"3231562496","3231562751","GB" +"3231562752","3231563007","US" +"3231563008","3231563263","CH" +"3231563264","3231563519","ZA" +"3231580160","3231588863","US" +"3231588864","3231589119","GB" +"3231589120","3231591679","US" +"3231591680","3231591935","AU" +"3231591936","3231594239","US" +"3231594240","3231594495","GB" +"3231594496","3231649791","US" +"3231649792","3231653887","SG" +"3231653888","3231655935","US" +"3231663616","3231663871","FI" +"3231663872","3231664127","CA" +"3231664128","3231664383","US" +"3231664384","3231664639","GB" +"3231664640","3231665407","US" +"3231665408","3231665663","IT" +"3231665664","3231667199","US" +"3231667200","3231667711","ES" +"3231667712","3231668735","US" +"3231668736","3231668991","BE" +"3231669248","3231669503","US" +"3231669760","3231670015","CA" +"3231670016","3231670271","DE" +"3231670272","3231671039","US" +"3231671040","3231672319","GB" +"3231672320","3231672575","US" +"3231672576","3231672831","NL" +"3231672832","3231673343","US" +"3231673344","3231673599","NO" +"3231673600","3231673855","IE" +"3231673856","3231674111","US" +"3231674112","3231674367","CA" +"3231674368","3231675391","US" +"3231675392","3231675903","BR" +"3231675904","3231676159","IE" +"3231676672","3231676927","FR" +"3231676928","3231677183","FI" +"3231678464","3231682559","US" +"3231711232","3231713023","US" +"3231713024","3231713279","CA" +"3231713280","3231713791","US" +"3231713792","3231714047","GB" +"3231714048","3231715071","US" +"3231715072","3231715327","SI" +"3231715328","3231715583","AU" +"3231715584","3231716095","US" +"3231716096","3231716351","AU" +"3231716352","3231716607","US" +"3231716608","3231716863","TR" +"3231716864","3231717119","LU" +"3231717120","3231717375","NO" +"3231717632","3231718143","US" +"3231718144","3231718399","IT" +"3231718400","3231719679","US" +"3231719680","3231719935","ES" +"3231720192","3231720703","US" +"3231720704","3231720959","IT" +"3231720960","3231722751","US" +"3231722752","3231723007","BR" +"3231723008","3231723519","US" +"3231723776","3231724031","US" +"3231724032","3231724287","BR" +"3231724288","3231727871","US" +"3231727872","3231728127","DE" +"3231728384","3231728639","AT" +"3231728640","3231729407","US" +"3231729408","3231729663","AU" +"3231729664","3231735551","US" +"3231735552","3231736063","CH" +"3231736064","3231738367","US" +"3231738368","3231738623","NL" +"3231738624","3231739135","US" +"3231739136","3231739391","GB" +"3231739392","3231739647","PL" +"3231739648","3231739903","BR" +"3231739904","3231742719","US" +"3231742720","3231742975","FR" +"3231742976","3231743487","US" +"3231743488","3231743743","NO" +"3231743744","3231743999","US" +"3231744000","3231744255","BR" +"3231744256","3231747583","US" +"3231747584","3231747839","DE" +"3231747840","3231748095","GB" +"3231748096","3231750143","US" +"3231750144","3231750399","NL" +"3231750400","3231750911","US" +"3231751168","3231751423","IT" +"3231751424","3231752191","US" +"3231752192","3231752447","IT" +"3231752448","3231752703","JP" +"3231752704","3231753983","US" +"3231753984","3231754239","CA" +"3231754240","3231754495","US" +"3231754496","3231755263","AU" +"3231755264","3231755519","HU" +"3231755520","3231755775","US" +"3231755776","3231756543","PR" +"3231756544","3231757311","GB" +"3231757312","3231759359","US" +"3231759360","3231759615","BR" +"3231759616","3231760895","US" +"3231760896","3231761407","GB" +"3231761408","3231763711","US" +"3231763712","3231763967","AU" +"3231763968","3231768575","US" +"3231768576","3231768831","RU" +"3231768832","3231769087","NO" +"3231769344","3231769855","US" +"3231769856","3231770111","AU" +"3231770112","3231770367","US" +"3231770368","3231770879","AT" +"3231770880","3231771135","RU" +"3231771136","3231773951","US" +"3231773952","3231775743","PT" +"3231775744","3231775999","IL" +"3231776000","3231776511","US" +"3231776768","3231793151","US" +"3231793152","3231793663","BE" +"3231809536","3231810047","NZ" +"3231842304","3231843327","RU" +"3231843328","3231844351","NO" +"3231844352","3231845375","RU" +"3231845376","3231846399","ES" +"3231846400","3231846655","RO" +"3231846656","3231846911","PT" +"3231846912","3231847167","GB" +"3231847168","3231847423","UA" +"3231847424","3231848447","RU" +"3231848448","3231849471","ES" +"3231849472","3231850495","RO" +"3231850496","3231851519","UA" +"3231851520","3231853567","RU" +"3231853568","3231855615","PL" +"3231855616","3231856639","RS" +"3231856640","3231857663","RU" +"3231857664","3231858687","PL" +"3231858688","3231859711","RU" +"3231859712","3231860735","FR" +"3231860736","3231861759","SA" +"3231861760","3231863807","UA" +"3231863808","3231864831","DE" +"3231864832","3231865855","RU" +"3231865856","3231866879","PL" +"3231866880","3231867903","CZ" +"3231867904","3231868927","RU" +"3231868928","3231869951","LV" +"3231869952","3231873023","UA" +"3231873024","3231875071","RU" +"3231875072","3231876095","PL" +"3231876096","3231877119","UA" +"3231877120","3231878143","NL" +"3231878144","3231879167","UA" +"3231879168","3231881215","PL" +"3231881216","3231882239","UA" +"3231882240","3231883263","RU" +"3231883264","3231884287","UA" +"3231884288","3231885311","PL" +"3231885312","3231886335","DE" +"3231886336","3231888383","PL" +"3231888384","3231889407","RU" +"3231889408","3231890431","RO" +"3231890432","3231893503","RU" +"3231893504","3231894527","UA" +"3231894528","3231895551","RU" +"3231895552","3231896575","UA" +"3231896576","3231897599","RU" +"3231897600","3231898623","IE" +"3231898624","3231899647","SE" +"3231899648","3231900671","UA" +"3231900672","3231901439","DE" +"3231901440","3231901695","BG" +"3231901696","3231903743","UA" +"3231903744","3231905791","RU" +"3231905792","3231906047","PL" +"3231906048","3231907839","RU" +"3231907840","3231912959","US" +"3231912960","3231913215","AP" +"3231916032","3231948799","FI" +"3231973376","3232038911","AT" +"3232038912","3232039167","SE" +"3232039168","3232039423","DK" +"3232039424","3232039679","IT" +"3232039680","3232047359","SE" +"3232047360","3232048639","GB" +"3232048640","3232049151","SE" +"3232049152","3232049407","GB" +"3232049408","3232051967","SE" +"3232051968","3232052991","GB" +"3232052992","3232060415","SE" +"3232060416","3232060671","IE" +"3232060672","3232065791","SE" +"3232065792","3232066303","GB" +"3232066304","3232066559","SE" +"3232066560","3232066815","NO" +"3232066816","3232079871","SE" +"3232079872","3232080895","GB" +"3232080896","3232082687","SE" +"3232082688","3232083199","GB" +"3232083200","3232083455","SE" +"3232083456","3232083711","DE" +"3232083712","3232086271","SE" +"3232086272","3232087039","GB" +"3232087040","3232089087","SE" +"3232089088","3232089343","ES" +"3232089344","3232090367","SE" +"3232090368","3232090623","IT" +"3232090624","3232092671","SE" +"3232092672","3232093183","GB" +"3232093184","3232093439","US" +"3232093440","3232093695","GB" +"3232093696","3232093951","AP" +"3232093952","3232094207","GB" +"3232094208","3232094719","CH" +"3232094720","3232095231","US" +"3232095232","3232096255","GB" +"3232096256","3232097279","SE" +"3232097280","3232097535","IT" +"3232097536","3232098047","SE" +"3232098048","3232098303","FR" +"3232098304","3232100095","SE" +"3232100096","3232100351","IE" +"3232100352","3232101119","GB" +"3232101120","3232104447","SE" +"3232104448","3232107519","DE" +"3232107520","3232108543","RU" +"3232108544","3232129023","DE" +"3232129024","3232130047","RO" +"3232130048","3232131071","UA" +"3232131072","3232133119","DE" +"3232133120","3232133631","UA" +"3232133632","3232134143","DE" +"3232134144","3232135167","RU" +"3232135168","3232135679","PL" +"3232135680","3232135935","RO" +"3232135936","3232137215","RU" +"3232137216","3232139263","UA" +"3232139264","3232140287","GB" +"3232140288","3232141311","FR" +"3232141312","3232141823","UA" +"3232141824","3232142335","DE" +"3232142336","3232143359","ES" +"3232143360","3232156159","DE" +"3232156160","3232156671","PL" +"3232156672","3232159743","DE" +"3232159744","3232160767","PL" +"3232160768","3232163839","DE" +"3232163840","3232165887","RU" +"3232165888","3232169727","DE" +"3232169728","3232169983","PL" +"3232169984","3232235519","IT" +"3232301056","3232309247","US" +"3232309248","3232313343","SG" +"3232317440","3232317951","US" +"3232366592","3232432127","US" +"3232432128","3232433663","EU" +"3232433920","3232436735","US" +"3232448512","3232464895","US" +"3232464896","3232497663","GB" +"3232497664","3232555007","US" +"3232555264","3232555640","US" +"3232555641","3232555641","A1" +"3232555642","3232555775","US" +"3232555776","3232560127","JP" +"3232560384","3232560895","JP" +"3232560896","3232561663","US" +"3232561664","3232561919","CA" +"3232561920","3232562431","US" +"3232562432","3232562687","LU" +"3232562688","3232562943","CA" +"3232563200","3232565247","GB" +"3232565248","3232567295","US" +"3232567296","3232571391","NZ" +"3232571392","3232579583","US" +"3232595968","3232598015","GB" +"3232628736","3232645119","US" +"3232645120","3232647167","AT" +"3232661504","3232694271","JP" +"3232694272","3232702463","US" +"3232702464","3232703743","FI" +"3232703744","3232703999","FR" +"3232704000","3232704511","CH" +"3232704512","3232705535","GB" +"3232705536","3232706559","FI" +"3232706560","3232706815","US" +"3232710656","3232718847","US" +"3232727040","3232759807","US" +"3232759808","3232774911","SE" +"3232774912","3232775167","IE" +"3232775168","3232794879","SE" +"3232794880","3232795135","DE" +"3232795136","3232802559","SE" +"3232802560","3232802815","DK" +"3232802816","3232803071","SE" +"3232803072","3232803327","IE" +"3232803328","3232804607","SE" +"3232804608","3232804863","IT" +"3232804864","3232812031","SE" +"3232812032","3232812543","GB" +"3232812544","3232812799","SE" +"3232812800","3232813055","ES" +"3232813056","3232820223","SE" +"3232820224","3232820479","IE" +"3232820480","3232825343","SE" +"3233285120","3233285375","US" +"3233480704","3233484799","US" +"3233484800","3233488895","ES" +"3233488896","3233505279","US" +"3233513472","3233548287","US" +"3233548800","3233549055","PT" +"3233549056","3233549311","BR" +"3233549312","3233557247","US" +"3233557248","3233557503","NZ" +"3233557504","3233561855","EC" +"3233561856","3233562367","US" +"3233562368","3233562879","GB" +"3233562880","3233563135","FR" +"3233563136","3233563903","US" +"3233563904","3233564159","GB" +"3233564160","3233564415","US" +"3233564416","3233564671","NZ" +"3233564672","3233564927","US" +"3233564928","3233570047","JP" +"3233570048","3233570559","US" +"3233570816","3233571071","GB" +"3233571072","3233572095","US" +"3233572096","3233572351","AU" +"3233572352","3233573119","US" +"3233573120","3233573375","NO" +"3233573376","3233573631","US" +"3233573632","3233573887","AU" +"3233573888","3233575679","US" +"3233575680","3233575935","AU" +"3233575936","3233576191","RU" +"3233576192","3233576447","GB" +"3233576448","3233577215","US" +"3233577216","3233577471","AT" +"3233577472","3233577727","GB" +"3233577984","3233578239","US" +"3233578240","3233578495","GB" +"3233578496","3233578751","US" +"3233578752","3233579007","IE" +"3233579264","3233579519","GB" +"3233579520","3233580031","US" +"3233580032","3233580287","GB" +"3233580288","3233581055","US" +"3233581056","3233581311","DE" +"3233581312","3233583359","US" +"3233583360","3233583615","GB" +"3233583616","3233584895","US" +"3233584896","3233585151","AU" +"3233585152","3233586431","US" +"3233586432","3233586943","GB" +"3233586944","3233588223","US" +"3233588224","3233589247","GA" +"3233589248","3233589759","CA" +"3233589760","3233590015","CN" +"3233590528","3233590783","PR" +"3233590784","3233591039","PH" +"3233591040","3233591295","ID" +"3233591296","3233593599","US" +"3233593600","3233593855","NZ" +"3233593856","3233594111","AU" +"3233594112","3233594367","RU" +"3233594368","3233594623","US" +"3233594624","3233594879","RU" +"3233594880","3233595903","US" +"3233595904","3233596927","EC" +"3233596928","3233605887","US" +"3233605888","3233607167","PL" +"3233607168","3233607935","US" +"3233607936","3233608191","NZ" +"3233608192","3233609727","HU" +"3233609728","3233609983","BE" +"3233609984","3233610495","US" +"3233610752","3233611775","US" +"3233612032","3233612287","GB" +"3233612544","3233613823","US" +"3233613824","3233614847","GB" +"3233615104","3233615359","US" +"3233615360","3233615615","DE" +"3233615616","3233617151","US" +"3233617408","3233617663","CA" +"3233617664","3233617919","GB" +"3233617920","3233618175","JP" +"3233619456","3233620479","US" +"3233620480","3233620735","NZ" +"3233620736","3233620991","US" +"3233622272","3233622527","GB" +"3233622528","3233624831","US" +"3233624832","3233625087","AT" +"3233625088","3233625343","GB" +"3233625344","3233625599","US" +"3233625600","3233625855","AU" +"3233625856","3233626111","GB" +"3233626112","3233628671","US" +"3233628672","3233628927","FR" +"3233628928","3233629439","CA" +"3233629440","3233629695","GB" +"3233629696","3233629951","IL" +"3233629952","3233630463","US" +"3233630464","3233630719","NL" +"3233630720","3233630975","US" +"3233630976","3233631231","ZA" +"3233631232","3233631487","DE" +"3233631488","3233631743","US" +"3233632000","3233642239","US" +"3233642240","3233642495","GB" +"3233642496","3233646591","US" +"3233646592","3233646847","AU" +"3233646848","3233647359","US" +"3233647360","3233647871","GA" +"3233647872","3233649663","US" +"3233649664","3233649919","AU" +"3233649920","3233650431","US" +"3233650432","3233650687","DE" +"3233651200","3233651455","IT" +"3233651456","3233651967","US" +"3233651968","3233652223","GB" +"3233652224","3233652479","US" +"3233652736","3233652991","GB" +"3233652992","3233654271","US" +"3233654272","3233655551","GB" +"3233655552","3233662975","US" +"3233663488","3233663999","GB" +"3233664000","3233665023","US" +"3233665024","3233666047","AU" +"3233666048","3233668863","US" +"3233668864","3233669119","PH" +"3233669120","3233670399","US" +"3233670400","3233670655","AU" +"3233671168","3233675263","US" +"3233675520","3233676031","US" +"3233676032","3233676287","DE" +"3233676288","3233684991","US" +"3233684992","3233685503","BR" +"3233685504","3233688063","US" +"3233688576","3233688831","GB" +"3233688832","3233692159","US" +"3233692160","3233692671","NO" +"3233692672","3233692927","US" +"3233692928","3233693183","AU" +"3233693184","3233693695","US" +"3233693696","3233693951","GB" +"3233693952","3233694207","US" +"3233694208","3233694463","AU" +"3233694464","3233694719","GB" +"3233694720","3233694975","US" +"3233694976","3233695231","FR" +"3233695232","3233696511","US" +"3233696512","3233696767","CA" +"3233696768","3233697791","US" +"3233701632","3233701887","NO" +"3233701888","3233704959","US" +"3233704960","3233705215","NZ" +"3233705216","3233710335","US" +"3233710336","3233711359","FR" +"3233711360","3233721599","US" +"3233721600","3233721855","HU" +"3233721856","3233722111","PT" +"3233722112","3233723391","US" +"3233723392","3233723903","AU" +"3233723904","3233724415","GB" +"3233724416","3233725439","US" +"3233725952","3233726975","NO" +"3233726976","3233728767","US" +"3233728768","3233729279","GB" +"3233729280","3233729535","US" +"3233729536","3233730047","SG" +"3233730560","3233732607","AU" +"3233732608","3233733631","US" +"3233734656","3233736959","US" +"3233736960","3233737983","FR" +"3233737984","3233738751","US" +"3233738752","3233739007","GB" +"3233739008","3233739263","US" +"3233739264","3233739519","FR" +"3233739520","3233740543","US" +"3233740544","3233741311","GB" +"3233741312","3233743359","US" +"3233743360","3233743615","CA" +"3233743616","3233744383","US" +"3233744384","3233744639","PR" +"3233744640","3233745663","US" +"3233745664","3233745919","CA" +"3233745920","3233746943","US" +"3233746944","3233747199","PR" +"3233747200","3233748735","US" +"3233748736","3233748991","PR" +"3233748992","3233749503","US" +"3233749504","3233750015","CA" +"3233750016","3233752831","US" +"3233752832","3233753087","PR" +"3233753088","3233763071","US" +"3233763072","3233763327","CA" +"3233763328","3233765887","US" +"3233765888","3233766143","CA" +"3233766144","3233768447","US" +"3233768448","3233768703","CA" +"3233768704","3233768959","PR" +"3233768960","3233778175","US" +"3233778176","3233778431","CA" +"3233778432","3233779455","US" +"3233779456","3233779711","CA" +"3233779712","3233781503","US" +"3233781504","3233781759","PR" +"3233781760","3233783807","US" +"3233783808","3233784063","PR" +"3233784064","3233784319","CA" +"3233784320","3233786111","US" +"3233786112","3233786367","PR" +"3233786368","3233790207","US" +"3233790208","3233790463","PR" +"3233790464","3233790719","CA" +"3233790720","3233790975","PR" +"3233790976","3233791231","CA" +"3233791232","3233791487","PR" +"3233791488","3233793023","US" +"3233793024","3233793279","PR" +"3233793280","3233794047","US" +"3233794048","3233794303","CA" +"3233794304","3233800447","US" +"3233800448","3233800703","CA" +"3233800704","3233800959","US" +"3233800960","3233801215","CA" +"3233801216","3233801983","US" +"3233801984","3233802239","CA" +"3233802240","3233802495","US" +"3233802496","3233802751","CA" +"3233802752","3233803007","US" +"3233803008","3233803263","CA" +"3233803264","3233808383","US" +"3233808384","3233873919","TW" +"3233873920","3233907711","US" +"3233907712","3233907967","AP" +"3233907968","3233914879","US" +"3233914880","3233915135","AP" +"3233915136","3233915903","US" +"3233915904","3233916159","AP" +"3233916160","3233926294","US" +"3233926295","3233926295","MX" +"3233926296","3233936639","US" +"3233936640","3233936895","EU" +"3233936896","3233939455","US" +"3233939456","3233980671","FI" +"3233980672","3233980927","GB" +"3233980928","3233991167","FI" +"3233991168","3233991423","DE" +"3233991424","3234004991","FI" +"3234005248","3234005503","GB" +"3234006528","3234007039","US" +"3234007040","3234007295","RU" +"3234007296","3234007551","US" +"3234007808","3234008063","US" +"3234008064","3234008831","NZ" +"3234008832","3234013183","US" +"3234013440","3234013695","US" +"3234013696","3234013951","AU" +"3234013952","3234014207","US" +"3234014464","3234014975","US" +"3234014976","3234015487","KR" +"3234015488","3234015743","US" +"3234015744","3234015999","IE" +"3234016000","3234016255","GB" +"3234016256","3234019327","AU" +"3234019328","3234023423","US" +"3234023424","3234023679","PL" +"3234023680","3234024703","US" +"3234025472","3234030079","US" +"3234030080","3234030335","DE" +"3234030336","3234031103","US" +"3234031104","3234031359","AU" +"3234031360","3234031871","US" +"3234031872","3234032127","GB" +"3234032128","3234032383","PL" +"3234032384","3234032895","US" +"3234033152","3234033407","IT" +"3234033408","3234033663","US" +"3234033664","3234033919","AU" +"3234033920","3234034687","US" +"3234034688","3234035455","GB" +"3234035456","3234039295","US" +"3234039296","3234043135","SE" +"3234043136","3234043903","US" +"3234043904","3234044159","AU" +"3234044160","3234048511","US" +"3234048512","3234048767","AU" +"3234048768","3234051839","US" +"3234051840","3234052095","NL" +"3234052096","3234052351","DE" +"3234052352","3234052607","US" +"3234052864","3234054911","US" +"3234054912","3234055167","PT" +"3234055168","3234055423","US" +"3234055424","3234055679","AU" +"3234055680","3234061055","US" +"3234061056","3234061311","NZ" +"3234061312","3234065407","US" +"3234065408","3234065663","GB" +"3234065664","3234065919","BR" +"3234065920","3234070527","US" +"3234070528","3234136063","FR" +"3234136064","3234163455","CA" +"3234163456","3234163711","US" +"3234163712","3234172927","CA" +"3234172928","3234173951","US" +"3234173952","3234175999","CA" +"3234176000","3234177279","US" +"3234177280","3234187007","CA" +"3234187008","3234187519","US" +"3234187520","3234192383","CA" +"3234192384","3234193663","US" +"3234193664","3234201599","CA" +"3234202624","3234203647","US" +"3234203648","3234205695","BR" +"3234205696","3234222079","US" +"3234234368","3234239327","US" +"3234239328","3234239329","MY" +"3234239330","3234240255","US" +"3234240256","3234240383","EU" +"3234240384","3234240387","IE" +"3234240388","3234240511","EU" +"3234240512","3234240607","US" +"3234240608","3234240611","IL" +"3234240612","3234250751","US" +"3234267136","3234271231","US" +"3234271232","3234275327","PT" +"3234275328","3234279423","AU" +"3234283520","3234316287","US" +"3234332672","3234349055","US" +"3234349056","3234353151","NZ" +"3234365440","3234367487","US" +"3234398208","3234400679","US" +"3234400680","3234400687","NA" +"3234400688","3234401511","US" +"3234401512","3234401519","NA" +"3234401520","3234549759","US" +"3234549760","3234550015","RU" +"3234553856","3234554367","US" +"3234555904","3234556415","US" +"3234556416","3234556927","CA" +"3234556928","3234557439","FI" +"3234557440","3234564607","US" +"3234564608","3234566911","KR" +"3234566912","3234568703","US" +"3234568704","3234568959","NZ" +"3234568960","3234569215","US" +"3234569728","3234569983","CL" +"3234569984","3234574335","US" +"3234574336","3234574591","AU" +"3234574592","3234574847","MX" +"3234574848","3234579711","US" +"3234579712","3234579967","CA" +"3234579968","3234581247","US" +"3234581248","3234581503","CA" +"3234581504","3234582527","US" +"3234583040","3234583807","US" +"3234583808","3234584063","AU" +"3234584064","3234584575","US" +"3234584576","3234584831","NZ" +"3234584832","3234585343","US" +"3234585600","3234587391","US" +"3234587392","3234587647","SA" +"3234587648","3234588671","US" +"3234588672","3234588927","MO" +"3234588928","3234589439","US" +"3234589440","3234589695","AU" +"3234589696","3234592511","US" +"3234592512","3234592767","TH" +"3234592768","3234611199","US" +"3234611200","3234615295","A1" +"3234615296","3234725887","US" +"3234726144","3234726399","CA" +"3234726400","3234726911","US" +"3234727936","3234733055","US" +"3234733056","3234733311","CA" +"3234733312","3234744319","US" +"3234744832","3234745599","US" +"3234745600","3234746879","GB" +"3234746880","3234747903","US" +"3234747904","3234748159","IL" +"3234748160","3234749439","US" +"3234749440","3234750463","CA" +"3234750464","3234762751","US" +"3234762752","3234764799","CA" +"3234764800","3234766335","NZ" +"3234766336","3234772223","US" +"3234772224","3234772479","CA" +"3234772480","3234772735","US" +"3234772992","3234781439","US" +"3234781440","3234781951","CA" +"3234781952","3234782719","US" +"3234782720","3234783999","IL" +"3234784000","3234794495","US" +"3234794752","3234795007","US" +"3234795008","3234795263","GB" +"3234795264","3234799359","US" +"3234799360","3234799615","NL" +"3234799616","3234799871","US" +"3234799872","3234800127","AU" +"3234800640","3234800895","AU" +"3234800896","3234801663","US" +"3234801664","3234802431","EC" +"3234802432","3234803711","US" +"3234803712","3234803967","PR" +"3234804224","3234807807","US" +"3234807808","3234808063","TH" +"3234808064","3234809087","EC" +"3234809088","3234810879","US" +"3234810880","3234811135","CA" +"3234811136","3234814719","US" +"3234814720","3234814975","HK" +"3234814976","3234815999","US" +"3234816000","3234816767","AU" +"3234816768","3234820351","US" +"3234820352","3234820607","AU" +"3234820608","3234821887","US" +"3234821888","3234822655","AU" +"3234822656","3234826751","US" +"3234826752","3234827007","CA" +"3234827008","3234827519","US" +"3234827520","3234827775","GB" +"3234827776","3234828031","LU" +"3234828032","3234828287","NZ" +"3234828288","3234828799","US" +"3234828800","3234829055","CL" +"3234829056","3234830079","US" +"3234830080","3234830847","AU" +"3234831360","3234832127","AU" +"3234832128","3234832639","US" +"3234832640","3234832895","AU" +"3234832896","3234833663","US" +"3234833664","3234833919","AU" +"3234833920","3234838271","US" +"3234838272","3234838527","GT" +"3234838528","3234839295","US" +"3234839296","3234839551","AU" +"3234839552","3234841087","US" +"3234841088","3234841599","BR" +"3234841600","3234841855","PT" +"3234841856","3234842367","AU" +"3234842368","3234842623","US" +"3234842624","3234844415","BR" +"3234844416","3234853375","US" +"3234853376","3234853631","TH" +"3234853632","3234853887","US" +"3234853888","3234854143","EC" +"3234854144","3234854911","US" +"3234854912","3234855167","AU" +"3234855168","3234855935","US" +"3234856192","3234856447","US" +"3234856960","3234861055","CA" +"3234861056","3234897919","US" +"3234922496","3234988031","US" +"3234988032","3234992127","CA" +"3234996224","3235000319","US" +"3235004416","3235020799","CA" +"3235053568","3235086335","US" +"3235119104","3235184639","US" +"3235184640","3235184895","CA" +"3235184896","3235389439","US" +"3235389440","3235389951","VE" +"3235389952","3235417215","US" +"3235417216","3235417223","BR" +"3235417224","3235512319","US" +"3235512320","3235577855","JP" +"3235577856","3235643391","CA" +"3235643392","3235774463","US" +"3235774464","3235778559","CA" +"3235778560","3235807231","US" +"3235840000","3235856383","US" +"3235856384","3235872767","BR" +"3235872768","3235876607","US" +"3235876608","3235876863","AP" +"3235876864","3235906303","US" +"3235906304","3235906559","CA" +"3235906560","3235908863","US" +"3235908864","3235909119","CA" +"3235909120","3235912447","US" +"3235912448","3235912703","CA" +"3235912704","3235914495","US" +"3235914496","3235914751","CA" +"3235914752","3235916543","US" +"3235916544","3235916799","VI" +"3235916800","3235917567","US" +"3235917568","3235917823","CA" +"3235917824","3235919359","US" +"3235919360","3235919615","CA" +"3235919616","3235921151","US" +"3235921152","3235921407","PR" +"3235921408","3235926271","US" +"3235926272","3235926527","CA" +"3235926528","3235927295","US" +"3235927296","3235927807","CA" +"3235927808","3235928319","US" +"3235928320","3235929343","CA" +"3235929344","3235929599","US" +"3235929600","3235929855","CA" +"3235929856","3235932159","US" +"3235932160","3235932415","CA" +"3235932416","3235932671","US" +"3235932672","3235932927","CA" +"3235932928","3235937023","US" +"3235937024","3235937535","CA" +"3235937536","3235937791","US" +"3235937792","3235938047","CA" +"3235938048","3235941631","US" +"3235941632","3235941887","CA" +"3235941888","3235945983","US" +"3235945984","3235946239","CA" +"3235946240","3235946751","US" +"3235946752","3235947007","CA" +"3235947008","3235949311","US" +"3235949312","3235950335","CA" +"3235950336","3235950591","US" +"3235950592","3235950847","CA" +"3235950848","3235951871","US" +"3235951872","3235952127","CA" +"3235952128","3235957247","US" +"3235957248","3235957503","PR" +"3235957504","3235957759","US" +"3235957760","3235958015","DE" +"3235958016","3235959551","US" +"3235959552","3235959807","CA" +"3235959808","3235960319","US" +"3235960320","3235960575","CA" +"3235960576","3235962111","US" +"3235962112","3235962367","CA" +"3235962368","3235963647","US" +"3235963648","3235963903","CA" +"3235963904","3235966975","US" +"3235966976","3235967231","PR" +"3235967232","3235967743","US" +"3235967744","3235967999","CA" +"3235968000","3235968511","US" +"3235968512","3235968767","CA" +"3235968768","3235970559","US" +"3235970560","3235970815","CA" +"3235970816","3236044799","US" +"3236044800","3236052991","CA" +"3236052992","3236069375","US" +"3236102144","3236106239","PH" +"3236106240","3236134911","US" +"3236167680","3236172543","CA" +"3236172544","3236172799","US" +"3236172800","3236175871","CA" +"3236175872","3236192255","US" +"3236200448","3236233215","MY" +"3236233216","3236237567","US" +"3236237568","3236237936","EU" +"3236237937","3236238591","US" +"3236241408","3236249599","US" +"3236298752","3236302847","US" +"3236364288","3236368127","US" +"3236368128","3236368383","NZ" +"3236368384","3236372991","US" +"3236372992","3236373247","AU" +"3236373504","3236379391","US" +"3236379392","3236379647","AU" +"3236379648","3236380927","US" +"3236381184","3236381439","CA" +"3236381440","3236381695","AT" +"3236381696","3236385279","US" +"3236385280","3236385535","DE" +"3236385536","3236385791","US" +"3236386304","3236387071","US" +"3236387072","3236387327","CA" +"3236387328","3236387839","US" +"3236387840","3236389375","PR" +"3236389376","3236392447","US" +"3236392448","3236392703","CL" +"3236392704","3236393471","US" +"3236393472","3236395519","BR" +"3236395520","3236396799","US" +"3236396800","3236397055","AU" +"3236397056","3236398591","US" +"3236398848","3236399359","AU" +"3236399616","3236400127","US" +"3236400128","3236400383","CL" +"3236400384","3236406783","US" +"3236406784","3236407551","AU" +"3236407552","3236408063","SG" +"3236408064","3236408319","US" +"3236408320","3236409087","CA" +"3236409088","3236409599","BR" +"3236409600","3236413695","US" +"3236413696","3236413951","AU" +"3236413952","3236416255","US" +"3236416256","3236416511","AU" +"3236416512","3236418559","US" +"3236418560","3236418815","AU" +"3236418816","3236427519","US" +"3236427520","3236427775","CA" +"3236428800","3236429311","US" +"3236429312","3236429567","ZA" +"3236429824","3236438015","US" +"3236446208","3236447487","US" +"3236447488","3236447743","AP" +"3236447744","3236450047","US" +"3236450048","3236450303","EU" +"3236450304","3236462591","US" +"3236462592","3236470783","AU" +"3236495360","3236566783","US" +"3236566784","3236567039","CA" +"3236567040","3236585983","US" +"3236585984","3236586239","CA" +"3236586240","3236604671","US" +"3236604672","3236604927","CA" +"3236604928","3236617471","US" +"3236617728","3236617983","US" +"3236617984","3236619775","CA" +"3236619776","3236620031","US" +"3236620288","3236623615","US" +"3236623616","3236623871","AU" +"3236623872","3236625919","US" +"3236625920","3236626175","CA" +"3236626432","3236642815","US" +"3236691968","3236708351","US" +"3236757504","3236765695","CA" +"3236765696","3236774911","US" +"3236774912","3236775423","HK" +"3236775424","3236775679","NL" +"3236775680","3236776191","CA" +"3236776192","3236776447","DE" +"3236776448","3236776959","US" +"3236776960","3236777215","CA" +"3236777216","3236777983","US" +"3236777984","3236778239","DE" +"3236778240","3236778751","GB" +"3236778752","3236780287","US" +"3236780288","3236780543","FR" +"3236780544","3236780799","CH" +"3236780800","3236781599","US" +"3236781600","3236781615","NL" +"3236781616","3236781727","US" +"3236781728","3236781759","NL" +"3236781760","3236781823","US" +"3236781824","3236782335","ES" +"3236782336","3236782719","US" +"3236782720","3236782751","BE" +"3236782752","3236782847","US" +"3236782848","3236782911","LU" +"3236782912","3236784383","US" +"3236784384","3236784895","IT" +"3236784896","3236785663","US" +"3236785664","3236785919","DE" +"3236785920","3236786175","ZA" +"3236786176","3236786431","US" +"3236786432","3236786687","FR" +"3236786688","3236787199","CA" +"3236787200","3236787967","US" +"3236787968","3236788223","JP" +"3236788224","3236788479","US" +"3236788480","3236789503","GB" +"3236789504","3236790271","US" +"3236823040","3236827135","CH" +"3236827136","3236829183","US" +"3236831232","3236855807","US" +"3236888576","3236958207","US" +"3236958208","3236962303","AU" +"3236962304","3236966399","US" +"3236970496","3236978687","US" +"3236986880","3236995071","US" +"3237019648","3237036031","US" +"3237085184","3237154815","US" +"3237154816","3237155839","ES" +"3237155840","3237156863","AU" +"3237158912","3237160959","US" +"3237183488","3237216255","US" +"3237216256","3237281791","JP" +"3237281792","3237285119","US" +"3237285120","3237285631","AU" +"3237285632","3237287935","US" +"3237287936","3237288191","CA" +"3237288192","3237290495","US" +"3237291008","3237291263","NZ" +"3237291264","3237294847","US" +"3237294848","3237295103","CA" +"3237295104","3237296639","US" +"3237296640","3237297151","SG" +"3237297152","3237297407","CL" +"3237297408","3237305087","US" +"3237305088","3237305343","CA" +"3237305344","3237308671","US" +"3237308672","3237310719","AU" +"3237310720","3237312767","US" +"3237312768","3237313023","BO" +"3237313024","3237319679","US" +"3237319680","3237319935","DZ" +"3237319936","3237320703","US" +"3237320704","3237320959","UA" +"3237320960","3237321471","US" +"3237321728","3237321983","US" +"3237322752","3237325055","US" +"3237325056","3237325311","PL" +"3237325312","3237325823","US" +"3237325824","3237326079","CA" +"3237326080","3237328127","US" +"3237328384","3237328639","US" +"3237328640","3237328895","CA" +"3237328896","3237329151","US" +"3237329152","3237329407","NZ" +"3237329408","3237330943","US" +"3237330944","3237331199","AU" +"3237331456","3237331967","US" +"3237331968","3237332223","HK" +"3237332224","3237335039","US" +"3237335040","3237335295","HK" +"3237335296","3237335551","US" +"3237335552","3237337599","AU" +"3237337600","3237337855","US" +"3237338112","3237339391","US" +"3237339392","3237339647","GB" +"3237339648","3237340159","US" +"3237340160","3237340415","CA" +"3237340416","3237345535","US" +"3237345536","3237346303","KR" +"3237346304","3237349119","US" +"3237349120","3237349375","AU" +"3237349376","3237366015","US" +"3237366016","3237366271","AU" +"3237366272","3237412863","US" +"3237412864","3237416959","GB" +"3237416960","3237437439","US" +"3237445632","3237478399","US" +"3237478400","3237511167","LK" +"3237511168","3237548031","US" +"3237548032","3237552127","KR" +"3237552128","3237553154","US" +"3237553155","3237553155","GB" +"3237553156","3237553922","US" +"3237553923","3237553923","EU" +"3237553924","3237554434","US" +"3237554435","3237554435","AP" +"3237554436","3237557247","US" +"3237609472","3237613567","US" +"3237615104","3237615615","US" +"3237615616","3237616895","CA" +"3237617152","3237622015","US" +"3237622016","3237622271","AP" +"3237622272","3237634309","US" +"3237634310","3237634310","GB" +"3237634311","3237647103","US" +"3237647104","3237647359","AU" +"3237647360","3237658623","US" +"3237675008","3237681663","US" +"3237681664","3237682943","CA" +"3237682944","3237684991","US" +"3237684992","3237685247","CL" +"3237685248","3237688319","US" +"3237688320","3237689343","CA" +"3237689344","3237690623","US" +"3237690624","3237691903","SA" +"3237691904","3237698303","US" +"3237698304","3237698559","CA" +"3237698560","3237716991","US" +"3237716992","3237717247","CA" +"3237717248","3237717503","US" +"3237717504","3237717759","CA" +"3237717760","3237724927","US" +"3237724928","3237725183","AU" +"3237725184","3237725439","CA" +"3237725440","3237725695","US" +"3237726720","3237726975","GH" +"3237726976","3237727231","US" +"3237727232","3237728255","AU" +"3237728256","3237732863","US" +"3237732864","3237733068","DE" +"3237733069","3237733070","A1" +"3237733071","3237733119","DE" +"3237734144","3237734399","CA" +"3237734400","3237736447","US" +"3237740544","3238002687","US" +"3238002688","3238006783","NL" +"3238006784","3238007039","GB" +"3238007040","3238008831","NL" +"3238008832","3238010879","SI" +"3238010880","3238017023","CH" +"3238017024","3238018303","DK" +"3238018304","3238018559","UA" +"3238018560","3238018815","FR" +"3238018816","3238019071","DE" +"3238019072","3238035711","PL" +"3238035712","3238037503","RU" +"3238037504","3238039039","LV" +"3238039040","3238039551","UA" +"3238039552","3238039807","PL" +"3238039808","3238042623","RU" +"3238042624","3238042879","IR" +"3238042880","3238043135","IT" +"3238043136","3238043647","GB" +"3238043648","3238043903","NL" +"3238043904","3238044159","DK" +"3238044160","3238044671","KZ" +"3238044672","3238045695","DE" +"3238045696","3238047743","RU" +"3238047744","3238048255","GB" +"3238048256","3238048767","RU" +"3238048768","3238049791","CH" +"3238049792","3238050303","RU" +"3238050304","3238050815","DE" +"3238050816","3238051071","AT" +"3238051072","3238051583","RO" +"3238051584","3238051839","GB" +"3238051840","3238053375","PL" +"3238053376","3238053631","RU" +"3238053632","3238053887","DE" +"3238053888","3238054911","RU" +"3238054912","3238055935","UA" +"3238055936","3238056959","PL" +"3238056960","3238057215","MD" +"3238057216","3238057471","BG" +"3238057472","3238057983","RU" +"3238057984","3238059519","UA" +"3238059520","3238059775","NO" +"3238059776","3238060031","UA" +"3238060032","3238060287","CH" +"3238060288","3238060543","RO" +"3238060544","3238060799","HU" +"3238060800","3238061311","UA" +"3238061312","3238061567","GB" +"3238061568","3238061823","AT" +"3238061824","3238062079","CZ" +"3238062080","3238062591","CH" +"3238062592","3238062847","GB" +"3238062848","3238063103","SE" +"3238063104","3238063359","PL" +"3238063360","3238063615","CH" +"3238063616","3238063871","EU" +"3238063872","3238064127","GB" +"3238064128","3238064383","UA" +"3238064384","3238064639","ES" +"3238064640","3238064895","PL" +"3238064896","3238065151","DK" +"3238065152","3238065407","SI" +"3238065408","3238065663","FR" +"3238065664","3238065919","DE" +"3238065920","3238066175","UA" +"3238066176","3238066431","DE" +"3238066432","3238066687","GB" +"3238066688","3238066943","DE" +"3238066944","3238067199","LT" +"3238067200","3238067455","NO" +"3238067456","3238067711","SE" +"3238067712","3238067967","AT" +"3238067968","3238068223","GB" +"3238068224","3238133759","IE" +"3238133760","3238199295","SI" +"3238199296","3238201599","DK" +"3238201600","3238202367","US" +"3238202368","3238264831","DK" +"3238264832","3238330367","IS" +"3238330368","3238337023","CH" +"3238337024","3238337535","LI" +"3238337536","3238395903","CH" +"3238395904","3238461439","HU" +"3238461440","3238502399","DE" +"3238502400","3238504447","RU" +"3238504448","3238526975","DE" +"3238526976","3238527231","RU" +"3238527232","3238535167","CH" +"3238535168","3238536191","SE" +"3238536192","3238537215","DK" +"3238537216","3238538495","CH" +"3238538496","3238538751","PL" +"3238538752","3238539263","RU" +"3238539264","3238541567","CH" +"3238541568","3238541823","PL" +"3238541824","3238542591","CH" +"3238542592","3238542847","PL" +"3238542848","3238545919","CH" +"3238545920","3238546431","RU" +"3238546432","3238546943","CH" +"3238546944","3238547455","UA" +"3238547456","3238548991","CH" +"3238548992","3238549503","CZ" +"3238549504","3238559231","CH" +"3238559232","3238559487","SE" +"3238559488","3238562559","CH" +"3238562560","3238562815","IR" +"3238562816","3238573567","CH" +"3238573568","3238574079","PL" +"3238574080","3238578431","CH" +"3238578432","3238578687","UA" +"3238578688","3238578943","CH" +"3238578944","3238579199","RU" +"3238579200","3238589951","CH" +"3238589952","3238590207","LT" +"3238590208","3238590975","CH" +"3238590976","3238591231","SA" +"3238591232","3238592511","CH" +"3238592512","3238594559","GB" +"3238594560","3238595583","BE" +"3238595584","3238595839","SI" +"3238595840","3238596095","EU" +"3238596096","3238596607","GB" +"3238596608","3238596863","BG" +"3238596864","3238597119","RU" +"3238597120","3238597375","DE" +"3238597376","3238597631","SI" +"3238597632","3238597887","GB" +"3238597888","3238598143","SI" +"3238598144","3238598399","RU" +"3238598400","3238598655","NL" +"3238598656","3238598911","CH" +"3238598912","3238599167","PL" +"3238599168","3238599679","HU" +"3238599680","3238599935","UA" +"3238599936","3238600703","HU" +"3238600704","3238604799","DE" +"3238604800","3238606335","NL" +"3238606336","3238606591","SE" +"3238606592","3238607359","NL" +"3238607360","3238607871","SE" +"3238607872","3238608895","NL" +"3238608896","3238621183","SE" +"3238621184","3238621439","FI" +"3238621440","3238621695","FR" +"3238621696","3238621951","IT" +"3238621952","3238622207","NL" +"3238622208","3238622463","NO" +"3238622464","3238622719","SE" +"3238622720","3238622975","DK" +"3238622976","3238623231","GB" +"3238623232","3238623487","LV" +"3238623488","3238623743","PL" +"3238623744","3238623999","CH" +"3238624000","3238624255","PL" +"3238624256","3238625279","HU" +"3238625280","3238630399","EU" +"3238630400","3238631423","GR" +"3238631424","3238632959","GB" +"3238632960","3238633215","UA" +"3238633216","3238653951","DK" +"3238653952","3238655999","RU" +"3238656000","3238656255","GB" +"3238656256","3238656511","RU" +"3238656512","3238657023","UA" +"3238657024","3238657535","AT" +"3238657536","3238657791","GB" +"3238657792","3238658047","AT" +"3238658048","3238675455","SE" +"3238675456","3238675711","DK" +"3238675712","3238723071","SE" +"3238723072","3238723327","DK" +"3238723328","3238795263","SE" +"3238795264","3238795775","IT" +"3238795776","3238801279","SE" +"3238801280","3238801343","GB" +"3238801344","3239051263","SE" +"3239051264","3239051519","CH" +"3239051520","3239062271","DE" +"3239062272","3239062527","ES" +"3239062528","3239062783","CH" +"3239062784","3239063039","UA" +"3239063040","3239063295","HU" +"3239063296","3239063551","UA" +"3239063552","3239075839","DE" +"3239075840","3239076095","MT" +"3239076096","3239076607","DE" +"3239076608","3239076863","PL" +"3239076864","3239077119","NL" +"3239077120","3239077375","UA" +"3239077376","3239077631","BG" +"3239077632","3239077887","PT" +"3239077888","3239078143","CZ" +"3239078144","3239078399","UA" +"3239078400","3239078655","RU" +"3239078656","3239078911","PL" +"3239078912","3239079167","GB" +"3239079168","3239079423","SI" +"3239079424","3239079679","FR" +"3239079680","3239079935","MD" +"3239079936","3239088127","DE" +"3239088128","3239088639","GB" +"3239088640","3239088895","DK" +"3239088896","3239089151","IL" +"3239089152","3239089407","RO" +"3239089408","3239089919","GB" +"3239089920","3239090175","DE" +"3239090176","3239090431","SI" +"3239090432","3239090687","ES" +"3239090688","3239090943","NL" +"3239090944","3239091199","AT" +"3239091200","3239091455","FR" +"3239091456","3239091711","BG" +"3239091712","3239091967","UA" +"3239091968","3239092223","FR" +"3239092224","3239104511","DE" +"3239104512","3239105279","RU" +"3239105280","3239105535","CH" +"3239105536","3239105791","DE" +"3239105792","3239106047","RO" +"3239106048","3239106559","AT" +"3239106560","3239106815","ES" +"3239106816","3239107071","CH" +"3239107072","3239107327","RO" +"3239107328","3239107583","GR" +"3239107584","3239107839","CH" +"3239107840","3239108095","RO" +"3239108096","3239109887","DE" +"3239109888","3239110143","PL" +"3239110144","3239110655","DE" +"3239110656","3239110911","RU" +"3239110912","3239111167","UA" +"3239111168","3239111423","NL" +"3239111424","3239111935","DE" +"3239111936","3239112191","AT" +"3239112192","3239112447","IL" +"3239112448","3239112959","PL" +"3239112960","3239113215","CH" +"3239113216","3239113471","AT" +"3239113472","3239113727","ES" +"3239113728","3239113983","AT" +"3239113984","3239114239","DE" +"3239114240","3239114495","BG" +"3239114496","3239114751","UA" +"3239114752","3239116543","DE" +"3239116544","3239116799","PL" +"3239116800","3239117055","PT" +"3239117056","3239117311","SI" +"3239117312","3239119871","DE" +"3239119872","3239120127","GB" +"3239120128","3239120383","CZ" +"3239120384","3239120639","PL" +"3239120640","3239120895","FR" +"3239120896","3239121663","DE" +"3239121664","3239121919","FR" +"3239121920","3239127039","DE" +"3239127040","3239127295","PT" +"3239127296","3239127551","PL" +"3239127552","3239127807","IL" +"3239127808","3239128063","RU" +"3239128064","3239128319","UA" +"3239128320","3239128575","IT" +"3239128576","3239128831","UA" +"3239128832","3239129087","CZ" +"3239129088","3239130111","DE" +"3239130112","3239130367","RU" +"3239130368","3239130623","JO" +"3239130624","3239131135","PL" +"3239131136","3239133183","DE" +"3239133184","3239133439","CH" +"3239133440","3239133695","GB" +"3239133696","3239133951","ES" +"3239133952","3239134207","SE" +"3239134208","3239134463","IL" +"3239134464","3239134719","UA" +"3239134720","3239134975","RO" +"3239134976","3239135231","PL" +"3239135232","3239135487","SE" +"3239135488","3239135743","FR" +"3239135744","3239135999","IL" +"3239136000","3239136255","UA" +"3239136256","3239136511","CH" +"3239136512","3239136767","DE" +"3239136768","3239137023","MD" +"3239137024","3239137279","LI" +"3239137280","3239138303","DE" +"3239138304","3239138559","PL" +"3239138560","3239138815","CH" +"3239138816","3239149567","DE" +"3239149568","3239160319","GB" +"3239160320","3239160575","RU" +"3239160576","3239160831","DE" +"3239160832","3239161087","PL" +"3239161088","3239161343","BY" +"3239161344","3239161599","PL" +"3239161600","3239161855","HU" +"3239161856","3239162623","DE" +"3239162624","3239162879","BE" +"3239162880","3239163903","DE" +"3239163904","3239164159","PL" +"3239164160","3239164671","DE" +"3239164672","3239164927","GB" +"3239164928","3239165183","DK" +"3239165184","3239165951","DE" +"3239165952","3239166207","FR" +"3239166208","3239166463","DE" +"3239166464","3239166719","CH" +"3239166720","3239166975","RO" +"3239166976","3239167231","FR" +"3239167232","3239167487","DE" +"3239167488","3239167743","FR" +"3239167744","3239167999","CH" +"3239168000","3239168255","PL" +"3239168256","3239168511","CH" +"3239168512","3239168767","SE" +"3239168768","3239169023","PL" +"3239169024","3239169535","DE" +"3239169536","3239169791","DK" +"3239169792","3239170047","SE" +"3239170048","3239170303","UA" +"3239170304","3239170559","FR" +"3239170560","3239170815","GB" +"3239170816","3239171071","SE" +"3239171072","3239171327","PL" +"3239171328","3239171583","UA" +"3239171584","3239171839","PL" +"3239171840","3239172095","CM" +"3239172096","3239172607","UA" +"3239172608","3239172863","SE" +"3239172864","3239173119","DE" +"3239173120","3239173375","RO" +"3239173376","3239173631","DE" +"3239173632","3239173887","AT" +"3239173888","3239174143","PL" +"3239174144","3239174399","DE" +"3239174400","3239174655","RO" +"3239174656","3239174911","GB" +"3239174912","3239175167","SI" +"3239175168","3239175423","UA" +"3239175424","3239175679","BG" +"3239175680","3239175935","DE" +"3239175936","3239176191","FI" +"3239176192","3239180287","DE" +"3239180288","3239181311","CZ" +"3239181312","3239181567","AT" +"3239181568","3239181823","UA" +"3239181824","3239205887","DE" +"3239205888","3239206143","US" +"3239206144","3239264255","DE" +"3239264256","3239264767","NO" +"3239264768","3239266303","RU" +"3239266304","3239266815","PL" +"3239266816","3239267327","UA" +"3239267328","3239267839","FR" +"3239267840","3239268351","DE" +"3239268352","3239268863","SE" +"3239268864","3239269375","RU" +"3239269376","3239270399","UA" +"3239270400","3239270911","GB" +"3239270912","3239271423","SA" +"3239271424","3239271935","AT" +"3239271936","3239272447","CH" +"3239272448","3239272959","UA" +"3239272960","3239273471","GB" +"3239273472","3239273983","UA" +"3239273984","3239274495","RU" +"3239274496","3239275007","PL" +"3239275008","3239275519","RO" +"3239275520","3239276543","UA" +"3239276544","3239277055","LU" +"3239277056","3239277567","DE" +"3239277568","3239278079","RU" +"3239278080","3239278591","UA" +"3239278592","3239279103","RU" +"3239279104","3239280127","PL" +"3239280128","3239280639","RU" +"3239280640","3239281663","IR" +"3239281664","3239282687","UA" +"3239282688","3239283711","FI" +"3239283712","3239284735","PL" +"3239284736","3239285247","IR" +"3239285248","3239285503","SE" +"3239285504","3239285759","BG" +"3239285760","3239286783","KW" +"3239286784","3239287807","UA" +"3239287808","3239288831","GB" +"3239288832","3239289855","DE" +"3239289856","3239290879","PL" +"3239290880","3239291903","RU" +"3239291904","3239292927","BG" +"3239292928","3239293951","CZ" +"3239293952","3239294975","DE" +"3239294976","3239295999","UA" +"3239296000","3239296511","GB" +"3239296512","3239296767","LB" +"3239296768","3239297023","GB" +"3239297024","3239298047","RO" +"3239298048","3239299071","GB" +"3239299072","3239301119","UA" +"3239301120","3239302143","FR" +"3239302144","3239303167","PL" +"3239303168","3239304191","FR" +"3239304192","3239305215","SI" +"3239305216","3239306239","NL" +"3239306240","3239307263","UA" +"3239307264","3239308287","EG" +"3239308288","3239309311","DE" +"3239309312","3239311359","UA" +"3239311360","3239312383","FR" +"3239312384","3239313407","UA" +"3239313408","3239445759","DE" +"3239445760","3239446015","PL" +"3239446016","3239446271","RU" +"3239446272","3239446527","FR" +"3239446528","3239451647","DE" +"3239451648","3239451903","PL" +"3239451904","3239452159","DE" +"3239452160","3239452415","CY" +"3239452416","3239452671","HR" +"3239452672","3239464959","DE" +"3239464960","3239465215","IL" +"3239465216","3239465471","PL" +"3239465472","3239465727","AT" +"3239465728","3239465983","PL" +"3239465984","3239466239","UA" +"3239466240","3239466495","AT" +"3239466496","3239466751","FI" +"3239466752","3239467007","GB" +"3239467008","3239467263","RU" +"3239467264","3239467519","GB" +"3239467520","3239467775","IT" +"3239467776","3239468031","PL" +"3239468032","3239468287","FR" +"3239468288","3239468543","RO" +"3239468544","3239468799","NO" +"3239468800","3239469055","RO" +"3239469056","3239470591","DE" +"3239470592","3239470847","CH" +"3239470848","3239471103","BG" +"3239471104","3239471871","DE" +"3239471872","3239472127","FR" +"3239472128","3239474943","DE" +"3239474944","3239475199","ES" +"3239475200","3239479807","DE" +"3239479808","3239480063","UA" +"3239480064","3239480319","FR" +"3239480320","3239480575","UA" +"3239480576","3239480831","RO" +"3239480832","3239481087","CH" +"3239481088","3239481343","FR" +"3239481344","3239486719","DE" +"3239486720","3239486975","ES" +"3239486976","3239487487","DE" +"3239487488","3239487743","GB" +"3239487744","3239487999","PL" +"3239488000","3239488255","AT" +"3239488256","3239488511","CH" +"3239488512","3239488767","KW" +"3239488768","3239489023","RO" +"3239489024","3239489279","DE" +"3239489280","3239489535","PL" +"3239489536","3239496959","DE" +"3239496960","3239497215","EU" +"3239497216","3239501823","DE" +"3239501824","3239505919","BE" +"3239505920","3239506431","DE" +"3239506432","3239506687","RU" +"3239506688","3239507455","GB" +"3239507456","3239507967","DE" +"3239507968","3239508223","BG" +"3239508224","3239508479","SA" +"3239508480","3239508735","NO" +"3239508736","3239508991","DE" +"3239508992","3239509247","PL" +"3239509248","3239509503","DE" +"3239509504","3239509759","CH" +"3239509760","3239510015","DE" +"3239510016","3239510271","UA" +"3239510272","3239521023","DE" +"3239521024","3239521279","AP" +"3239521280","3239522303","DE" +"3239522304","3239522559","PL" +"3239522560","3239522815","SI" +"3239522816","3239523071","LT" +"3239523072","3239523327","PL" +"3239523328","3239523583","BG" +"3239523584","3239523839","UA" +"3239523840","3239524095","PL" +"3239524096","3239524351","SE" +"3239524352","3239524607","DE" +"3239524608","3239524863","SE" +"3239524864","3239525119","UA" +"3239525120","3239525375","LT" +"3239525376","3239525631","UA" +"3239525632","3239525887","PL" +"3239525888","3239526143","SI" +"3239526144","3239526399","PL" +"3239526400","3239538687","DE" +"3239538688","3239539199","NL" +"3239539200","3239539455","IT" +"3239539456","3239539711","BE" +"3239539712","3239539967","GB" +"3239539968","3239540223","SE" +"3239540224","3239540479","GR" +"3239540480","3239540735","DE" +"3239540736","3239540991","GB" +"3239540992","3239541247","FR" +"3239541248","3239541503","UA" +"3239541504","3239541759","FR" +"3239541760","3239542015","GB" +"3239542016","3239542271","PL" +"3239542272","3239542527","RU" +"3239542528","3239542783","FR" +"3239542784","3239544831","DE" +"3239544832","3239545087","GB" +"3239545088","3239545343","SI" +"3239545344","3239545855","HU" +"3239545856","3239546111","UA" +"3239546112","3239546367","GB" +"3239546368","3239546623","RU" +"3239546624","3239546879","NL" +"3239546880","3239549951","DE" +"3239549952","3239550207","TR" +"3239550208","3239550463","UA" +"3239550464","3239550719","FR" +"3239550720","3239550975","NO" +"3239550976","3239554047","DE" +"3239554048","3239554303","SE" +"3239554304","3239554559","DK" +"3239554560","3239554815","PL" +"3239554816","3239555071","UA" +"3239555072","3239556095","DE" +"3239556096","3239556351","SA" +"3239556352","3239556607","UA" +"3239556608","3239556863","HR" +"3239556864","3239557119","UA" +"3239557120","3239565055","DE" +"3239565056","3239565311","US" +"3239565312","3239567359","DE" +"3239567360","3239567615","GB" +"3239567616","3239567871","UA" +"3239567872","3239568127","DE" +"3239568128","3239568383","FR" +"3239568384","3239568639","SE" +"3239568640","3239568895","NO" +"3239568896","3239575295","DE" +"3239575296","3239575551","DK" +"3239575552","3239575807","RO" +"3239575808","3239579135","DE" +"3239579136","3239579391","PL" +"3239579392","3239581695","DE" +"3239581696","3239581951","PL" +"3239581952","3239582207","UA" +"3239582208","3239582463","GB" +"3239582464","3239582719","DE" +"3239582720","3239582975","GB" +"3239582976","3239583231","IT" +"3239583232","3239583487","UA" +"3239583488","3239583743","RO" +"3239583744","3239591935","DE" +"3239591936","3239592447","FI" +"3239592448","3239592703","US" +"3239592704","3239592959","FI" +"3239592960","3239593215","EU" +"3239593216","3239593983","FI" +"3239593984","3239624703","DE" +"3239624704","3239625727","CH" +"3239625728","3239626751","RU" +"3239626752","3239628799","PL" +"3239628800","3239629823","DE" +"3239629824","3239630847","FR" +"3239630848","3239631871","DE" +"3239631872","3239632895","UA" +"3239632896","3239633919","DE" +"3239633920","3239634943","FR" +"3239634944","3239635967","RU" +"3239635968","3239636991","DE" +"3239636992","3239638015","BG" +"3239638016","3239639039","PL" +"3239639040","3239640063","SI" +"3239640064","3239641087","DE" +"3239641088","3239643135","PL" +"3239643136","3239645183","RU" +"3239645184","3239665663","DE" +"3239665664","3239666175","BE" +"3239666176","3239666687","AT" +"3239666688","3239667199","SE" +"3239667200","3239667711","CH" +"3239667712","3239668223","RO" +"3239668224","3239668735","UA" +"3239668736","3239669247","PL" +"3239669248","3239670271","RO" +"3239670272","3239670783","DE" +"3239670784","3239671295","GB" +"3239671296","3239671807","DE" +"3239671808","3239672319","UA" +"3239672320","3239672831","DE" +"3239672832","3239673343","TR" +"3239673344","3239673855","SE" +"3239673856","3239682047","DE" +"3239682048","3239682559","PL" +"3239682560","3239683071","BG" +"3239683072","3239683583","PT" +"3239683584","3239684607","PL" +"3239684608","3239686143","DE" +"3239686144","3239686655","UA" +"3239686656","3239687167","IT" +"3239687168","3239687679","UA" +"3239687680","3239688191","DE" +"3239688192","3239688703","PL" +"3239688704","3239689727","GB" +"3239689728","3239690239","RU" +"3239690240","3239690495","ES" +"3239690496","3239690751","PL" +"3239690752","3239691263","FR" +"3239691264","3239691519","IT" +"3239691520","3239691775","FR" +"3239691776","3239692031","EU" +"3239692032","3239692287","AT" +"3239692288","3239697407","DE" +"3239697408","3239697663","HR" +"3239697664","3239697919","RU" +"3239697920","3239698431","PL" +"3239698432","3239706367","DE" +"3239706368","3239706623","UA" +"3239706624","3239706879","RU" +"3239706880","3239707135","NL" +"3239707136","3239707391","RU" +"3239707392","3239707647","UA" +"3239707648","3239707903","CH" +"3239707904","3239708159","DE" +"3239708160","3239708415","SE" +"3239708416","3239708671","RO" +"3239708672","3239708927","AT" +"3239708928","3239709183","NL" +"3239709184","3239709439","RO" +"3239709440","3239709695","FR" +"3239709696","3239709951","DE" +"3239709952","3239710207","UA" +"3239710208","3239710463","BG" +"3239710464","3239710719","DE" +"3239710720","3239710975","RU" +"3239710976","3239711231","SE" +"3239711232","3239711487","BY" +"3239711488","3239711743","RU" +"3239711744","3239711999","UA" +"3239712000","3239712255","PL" +"3239712256","3239712511","DE" +"3239712512","3239712767","GB" +"3239712768","3239713023","DE" +"3239713024","3239713279","PL" +"3239713280","3239713535","SI" +"3239713536","3239713791","UA" +"3239713792","3239714047","DE" +"3239714048","3239714303","FR" +"3239714304","3239714559","SE" +"3239714560","3239714815","HU" +"3239714816","3239723007","DE" +"3239723008","3239731199","GB" +"3239731200","3239739391","DE" +"3239739392","3239739647","IT" +"3239739648","3239739903","RO" +"3239739904","3239740159","CH" +"3239740160","3239740415","PL" +"3239740416","3239740671","DK" +"3239740672","3239740927","GB" +"3239740928","3239741183","UA" +"3239741184","3239741439","RU" +"3239741440","3239759871","DE" +"3239759872","3239760127","RU" +"3239760128","3239760383","UA" +"3239760384","3239760895","PL" +"3239760896","3239761151","RU" +"3239761152","3239761407","GB" +"3239761408","3239761663","RU" +"3239761664","3239761919","PL" +"3239761920","3239762175","BG" +"3239762176","3239762431","RU" +"3239762432","3239762687","DK" +"3239762688","3239762943","RO" +"3239762944","3239763199","SI" +"3239763200","3239763455","SE" +"3239763456","3239763967","GB" +"3239763968","3239772159","DE" +"3239772160","3239772415","NL" +"3239772416","3239772671","GB" +"3239772672","3239773183","DK" +"3239773184","3239773439","FR" +"3239773440","3239773951","PL" +"3239773952","3239774207","SA" +"3239774208","3239774463","PL" +"3239774464","3239774719","ES" +"3239774720","3239774975","FR" +"3239774976","3239775231","PT" +"3239775232","3239782399","DE" +"3239782400","3239782655","AT" +"3239782656","3239782911","RU" +"3239782912","3239783167","GB" +"3239783168","3239783423","CH" +"3239783424","3239783679","DK" +"3239783680","3239783935","CH" +"3239783936","3239784191","DE" +"3239784192","3239784447","FR" +"3239784448","3239788543","DE" +"3239788544","3239789055","EU" +"3239789056","3239789567","DE" +"3239789568","3239790079","FR" +"3239790080","3239790591","RO" +"3239790592","3239791103","LV" +"3239791104","3239792127","CH" +"3239792128","3239792639","FR" +"3239792640","3239793151","UA" +"3239793152","3239793663","PL" +"3239793664","3239794175","RO" +"3239794176","3239794687","NL" +"3239794688","3239795199","GB" +"3239795200","3239795711","PL" +"3239795712","3239796223","IL" +"3239796224","3239796735","NO" +"3239796736","3239821311","DE" +"3239821312","3239821823","SE" +"3239821824","3239822335","FR" +"3239822336","3239822847","UA" +"3239822848","3239823359","PL" +"3239823360","3239823871","SE" +"3239823872","3239824383","IT" +"3239824384","3239824895","PL" +"3239824896","3239825407","UZ" +"3239825408","3239825919","UA" +"3239825920","3239826431","PL" +"3239826432","3239826943","GB" +"3239826944","3239827455","RU" +"3239827456","3239827967","DK" +"3239827968","3239828479","CH" +"3239828480","3239828735","EU" +"3239828736","3239828991","DE" +"3239828992","3239830015","RU" +"3239830016","3239830527","CH" +"3239830528","3239831039","SE" +"3239831040","3239832063","RU" +"3239832064","3239832575","UA" +"3239832576","3239834111","RU" +"3239834112","3239834623","UA" +"3239834624","3239835135","AT" +"3239835136","3239836159","RU" +"3239836160","3239836671","DK" +"3239836672","3239837183","DE" +"3239837184","3239837695","SE" +"3239837696","3239837951","PL" +"3239837952","3239839231","DE" +"3239839232","3239839487","RU" +"3239839488","3239839743","DE" +"3239839744","3239839999","SK" +"3239840000","3239840511","SA" +"3239840512","3239840767","DE" +"3239840768","3239841023","AT" +"3239841024","3239841279","NL" +"3239841280","3239848447","DE" +"3239848448","3239848703","CH" +"3239848704","3239848959","SE" +"3239848960","3239849215","RU" +"3239849216","3239849471","GB" +"3239849472","3239849727","RU" +"3239849728","3239849983","NL" +"3239849984","3239859199","DE" +"3239859200","3239859455","PL" +"3239859456","3239859711","UA" +"3239859712","3239859967","HU" +"3239859968","3239860223","CA" +"3239860224","3239860479","DE" +"3239860480","3239860735","FI" +"3239860736","3239860991","DE" +"3239860992","3239861247","AT" +"3239861248","3239861503","UA" +"3239861504","3239861759","PL" +"3239861760","3239862015","SA" +"3239862016","3239862271","IT" +"3239862272","3239874559","DE" +"3239874560","3239874815","NL" +"3239874816","3239875071","DE" +"3239875072","3239875327","SI" +"3239875328","3239875583","DK" +"3239875584","3239875839","PL" +"3239875840","3239876095","DK" +"3239876096","3239876351","DE" +"3239876352","3239876607","RO" +"3239876608","3239876863","NL" +"3239876864","3239877119","DE" +"3239877120","3239877375","GB" +"3239877376","3239877631","IL" +"3239877632","3239877887","UA" +"3239877888","3239878143","IT" +"3239878144","3239878399","PL" +"3239878400","3239878655","SE" +"3239878656","3239882751","DE" +"3239882752","3239883007","GB" +"3239883008","3239883263","UA" +"3239883264","3239883316","EU" +"3239883317","3239883317","GB" +"3239883318","3239883519","EU" +"3239883520","3239883775","RU" +"3239883776","3239884031","DE" +"3239884032","3239884287","IR" +"3239884288","3239884543","GB" +"3239884544","3239884799","FR" +"3239884800","3239885055","UA" +"3239885056","3239885311","CH" +"3239885312","3239885567","UA" +"3239885568","3239885823","PL" +"3239885824","3239886079","CH" +"3239886080","3239886335","PL" +"3239886336","3239886591","RU" +"3239886592","3239886847","FR" +"3239886848","3239888895","DE" +"3239888896","3239889151","UA" +"3239889152","3239889407","GB" +"3239889408","3239889663","CZ" +"3239889664","3239889919","FI" +"3239889920","3239890175","AT" +"3239890176","3239890431","FR" +"3239890432","3239890687","NL" +"3239890688","3239895039","DE" +"3239895040","3239895295","DK" +"3239895296","3239895551","TR" +"3239895552","3239895807","PL" +"3239895808","3239896063","DK" +"3239896064","3239896319","DE" +"3239896320","3239896575","AT" +"3239896576","3239896831","PL" +"3239896832","3239897087","HU" +"3239897088","3239897343","GB" +"3239897344","3239897599","FR" +"3239897600","3239897855","RU" +"3239897856","3239898111","FR" +"3239898112","3239898367","NO" +"3239898368","3239898623","GB" +"3239898624","3239898879","DE" +"3239898880","3239899135","RU" +"3239899136","3239901695","DE" +"3239901696","3239901951","BG" +"3239901952","3239902207","DE" +"3239902208","3239902463","PL" +"3239902464","3239902719","RU" +"3239902720","3239902975","EE" +"3239902976","3239903231","GB" +"3239903232","3239907327","DE" +"3239907328","3239907583","UA" +"3239907584","3239913215","DE" +"3239913216","3239913471","LT" +"3239913472","3239915519","DE" +"3239915520","3239915775","PL" +"3239915776","3239916031","HU" +"3239916032","3239916287","SA" +"3239916288","3239916543","PL" +"3239916544","3239916799","FR" +"3239916800","3239917055","KZ" +"3239917056","3239917311","DE" +"3239917312","3239917567","BG" +"3239917568","3239935999","DE" +"3239936000","3239936255","UA" +"3239936256","3239936511","FR" +"3239936512","3239938815","DE" +"3239938816","3239939071","NL" +"3239939072","3239951103","DE" +"3239951104","3239951359","AT" +"3239951360","3239954431","DE" +"3239954432","3239954687","UA" +"3239954688","3239954943","DK" +"3239954944","3239955199","ES" +"3239955200","3239955711","UA" +"3239955712","3239955967","PL" +"3239955968","3239956223","CZ" +"3239956224","3239956479","PL" +"3239956480","3239959551","DE" +"3239959552","3239959807","UA" +"3239959808","3239960063","BE" +"3239960064","3239960319","FR" +"3239960320","3239960575","GB" +"3239960576","3239968511","DE" +"3239968512","3239968767","PL" +"3239968768","3239969023","NO" +"3239969024","3239974911","DE" +"3239974912","3239975935","GB" +"3239975936","3239976191","RO" +"3239976192","3239976447","DE" +"3239976448","3239976959","NL" +"3239976960","3239978751","DE" +"3239978752","3239979007","RU" +"3239979008","3239979263","UA" +"3239979264","3239979519","GB" +"3239979520","3239979775","DE" +"3239979776","3239980031","SI" +"3239980032","3239996415","DE" +"3239996416","3239996671","GB" +"3239996672","3239996927","PL" +"3239996928","3239997183","BE" +"3239997184","3239997439","GB" +"3239997440","3240004863","DE" +"3240004864","3240005119","FR" +"3240005120","3240005375","SE" +"3240005376","3240005631","NL" +"3240005632","3240009727","DE" +"3240009728","3240009983","PL" +"3240009984","3240010239","IL" +"3240010240","3240010495","GB" +"3240010496","3240010751","AT" +"3240010752","3240011007","HU" +"3240011008","3240011263","DE" +"3240011264","3240011519","GB" +"3240011520","3240011775","CH" +"3240011776","3240026111","DE" +"3240026112","3240027135","FR" +"3240027136","3240028159","BG" +"3240028160","3240029183","GB" +"3240029184","3240030207","RU" +"3240030208","3240032255","UA" +"3240032256","3240033279","RS" +"3240033280","3240034303","DE" +"3240034304","3240034559","RU" +"3240034560","3240037887","DE" +"3240037888","3240038143","AT" +"3240038144","3240038399","DK" +"3240038400","3240098815","DE" +"3240098816","3240099327","CH" +"3240099328","3240099839","DE" +"3240099840","3240100690","GB" +"3240100691","3240100691","EU" +"3240100692","3240102911","GB" +"3240102912","3240103935","UA" +"3240103936","3240104703","GB" +"3240104704","3240104959","NL" +"3240104960","3240105215","RU" +"3240105216","3240105471","UA" +"3240105472","3240109055","GB" +"3240109056","3240109567","PL" +"3240109568","3240112639","GB" +"3240120320","3240125439","GB" +"3240125440","3240125695","RO" +"3240125696","3240165375","GB" +"3240165376","3240165887","PL" +"3240165888","3240166399","ES" +"3240166400","3240166911","PL" +"3240166912","3240167423","RO" +"3240167424","3240167935","PL" +"3240167936","3240168447","RU" +"3240168448","3240168959","FR" +"3240168960","3240169471","CZ" +"3240169472","3240169983","IL" +"3240169984","3240170495","IT" +"3240170496","3240171007","DE" +"3240171008","3240171519","CZ" +"3240171520","3240172031","RO" +"3240172032","3240173055","RU" +"3240173056","3240173567","CH" +"3240173568","3240174079","RO" +"3240174080","3240174591","PL" +"3240174592","3240175103","FR" +"3240175104","3240176127","RU" +"3240176128","3240176639","PL" +"3240176640","3240177151","UA" +"3240177152","3240177663","FR" +"3240177664","3240178175","UA" +"3240178176","3240178687","NL" +"3240178688","3240179199","BE" +"3240179200","3240179711","UA" +"3240179712","3240180223","FR" +"3240180224","3240180735","PL" +"3240180736","3240181247","NL" +"3240181248","3240181759","RU" +"3240181760","3240182271","UA" +"3240182272","3240182783","RO" +"3240182784","3240183295","RU" +"3240183296","3240183807","NL" +"3240183808","3240184319","GB" +"3240184320","3240184831","RU" +"3240184832","3240185343","GB" +"3240185344","3240185855","FR" +"3240185856","3240187391","RU" +"3240187392","3240187903","UA" +"3240187904","3240188415","RU" +"3240188416","3240188927","RO" +"3240188928","3240189439","MD" +"3240189440","3240189951","RO" +"3240189952","3240190463","DE" +"3240190464","3240190975","IT" +"3240190976","3240191487","RU" +"3240191488","3240191999","AE" +"3240192000","3240192511","UA" +"3240192512","3240193023","RO" +"3240193024","3240193535","GB" +"3240193536","3240194047","PL" +"3240194048","3240194559","GB" +"3240194560","3240195071","AT" +"3240195072","3240195583","GB" +"3240195584","3240196095","RO" +"3240196096","3240197119","RU" +"3240197120","3240197631","PL" +"3240197632","3240198143","CZ" +"3240198144","3240198655","CH" +"3240198656","3240199167","RO" +"3240199680","3240200191","NL" +"3240200192","3240200703","RO" +"3240200704","3240201215","GB" +"3240201216","3240201727","RO" +"3240201728","3240202239","CH" +"3240202240","3240202751","RU" +"3240202752","3240203263","GB" +"3240203264","3240203775","DK" +"3240203776","3240204287","AT" +"3240204288","3240204799","SE" +"3240204800","3240205311","RO" +"3240205312","3240205823","GB" +"3240205824","3240206335","DE" +"3240206336","3240206847","RU" +"3240206848","3240207871","RO" +"3240207872","3240208127","RU" +"3240208128","3240208895","FR" +"3240208896","3240209407","GB" +"3240209408","3240209919","AE" +"3240209920","3240210943","PL" +"3240210944","3240211455","GB" +"3240211456","3240211967","NL" +"3240211968","3240212479","BE" +"3240212480","3240212991","RU" +"3240212992","3240213503","GB" +"3240213504","3240214015","SE" +"3240214016","3240214527","DK" +"3240214528","3240215551","RU" +"3240215552","3240216063","UA" +"3240216064","3240216575","GB" +"3240216576","3240217087","RO" +"3240217088","3240217599","UA" +"3240217600","3240218111","RU" +"3240218112","3240218623","UA" +"3240218624","3240219135","NL" +"3240219136","3240219647","AT" +"3240219648","3240220159","UA" +"3240220160","3240220671","NL" +"3240220672","3240221183","AT" +"3240221184","3240221695","SE" +"3240221696","3240222207","NL" +"3240222208","3240222719","FR" +"3240222720","3240223231","KW" +"3240223232","3240223743","RU" +"3240223744","3240224255","MT" +"3240224256","3240225279","RU" +"3240225280","3240225791","IL" +"3240225792","3240226303","UA" +"3240226304","3240226815","CH" +"3240226816","3240227839","RU" +"3240227840","3240228351","GB" +"3240228352","3240228863","SE" +"3240228864","3240229375","GB" +"3240229376","3240230399","RO" +"3240230400","3240230911","GB" +"3240230912","3240231935","PL" +"3240231936","3240232959","NL" +"3240232960","3240235007","RU" +"3240235008","3240236031","FR" +"3240236032","3240237055","UA" +"3240237056","3240239103","DE" +"3240239104","3240240127","FR" +"3240240128","3240241151","US" +"3240241152","3240241407","EU" +"3240241408","3240242175","FI" +"3240242176","3240243199","PL" +"3240243200","3240244223","DE" +"3240244224","3240245247","PL" +"3240245248","3240246271","IL" +"3240246272","3240247295","UA" +"3240247296","3240248319","RS" +"3240248320","3240249343","DE" +"3240249344","3240251391","UA" +"3240251392","3240252415","IE" +"3240252416","3240253439","LT" +"3240253440","3240254463","BE" +"3240254464","3240256511","UA" +"3240256512","3240256767","EU" +"3240256768","3240257535","DE" +"3240257536","3240258559","FO" +"3240258560","3240259583","RO" +"3240259584","3240260607","PL" +"3240260608","3240262655","DE" +"3240262656","3240263679","RU" +"3240263680","3240264191","UA" +"3240264192","3240264703","FR" +"3240264704","3240265215","TR" +"3240265216","3240265727","HU" +"3240265728","3240266239","CH" +"3240266240","3240266751","PL" +"3240266752","3240267263","UA" +"3240267264","3240267775","RS" +"3240267776","3240268287","DE" +"3240268288","3240269311","GB" +"3240269312","3240269823","NL" +"3240269824","3240270335","SE" +"3240270336","3240270847","UA" +"3240270848","3240271359","RO" +"3240271360","3240271871","PL" +"3240271872","3240272383","RU" +"3240272384","3240272895","PL" +"3240272896","3240273407","RU" +"3240273408","3240273919","NL" +"3240273920","3240274431","UA" +"3240274432","3240274943","GB" +"3240274944","3240275455","UA" +"3240275456","3240275967","RO" +"3240275968","3240276479","GR" +"3240276480","3240276991","PL" +"3240276992","3240278015","RO" +"3240278016","3240278527","RU" +"3240278528","3240279039","GB" +"3240279040","3240279551","CH" +"3240279552","3240280063","RU" +"3240280064","3240280191","DE" +"3240280192","3240280319","SE" +"3240280320","3240280447","PL" +"3240280448","3240280575","UA" +"3240280576","3240280703","GB" +"3240280704","3240280831","RU" +"3240280832","3240280959","GB" +"3240280960","3240281215","PL" +"3240281216","3240281343","FR" +"3240281344","3240281471","PL" +"3240281472","3240281599","IR" +"3240281600","3240281727","JO" +"3240281728","3240281855","PL" +"3240281856","3240281983","NL" +"3240281984","3240282111","NO" +"3240282112","3240282239","DE" +"3240282240","3240282367","UA" +"3240282368","3240282495","RO" +"3240282496","3240282623","RU" +"3240282624","3240282879","SE" +"3240282880","3240283007","UA" +"3240283008","3240283391","PL" +"3240283392","3240283647","TR" +"3240283648","3240283903","AT" +"3240283904","3240284159","DE" +"3240284160","3240285183","RU" +"3240285184","3240286207","PL" +"3240286208","3240287231","UA" +"3240287232","3240288255","PL" +"3240288256","3240296447","GB" +"3240296448","3240296703","RO" +"3240296704","3240302847","GB" +"3240302848","3240303103","UA" +"3240303104","3240304639","GB" +"3240304640","3240305663","RU" +"3240305664","3240305919","PL" +"3240305920","3240306175","EU" +"3240306176","3240306687","RU" +"3240306688","3240306943","BG" +"3240306944","3240307199","PL" +"3240307200","3240307711","RU" +"3240307712","3240308223","ES" +"3240308224","3240308479","BG" +"3240308480","3240308735","PL" +"3240308736","3240309759","CZ" +"3240309760","3240310783","NO" +"3240310784","3240311807","GB" +"3240312064","3240312319","RU" +"3240312320","3240312575","IR" +"3240312576","3240312831","RU" +"3240312832","3240321023","GB" +"3240321024","3240321791","RU" +"3240321792","3240322047","PL" +"3240322048","3240322559","RU" +"3240322560","3240324095","CZ" +"3240324096","3240324351","RO" +"3240324352","3240324607","RU" +"3240324608","3240324863","PL" +"3240324864","3240325119","SI" +"3240325120","3240361983","GB" +"3240361984","3240362239","TR" +"3240362240","3240370175","GB" +"3240370176","3240370431","CH" +"3240370432","3240370687","DE" +"3240370688","3240370943","GB" +"3240370944","3240371199","RU" +"3240371200","3240371455","CH" +"3240371456","3240371711","RO" +"3240371712","3240371967","RU" +"3240371968","3240372223","TR" +"3240372224","3240372479","SI" +"3240372480","3240372991","RU" +"3240372992","3240373247","IE" +"3240373248","3240373503","RO" +"3240373504","3240373759","FR" +"3240373760","3240374015","DE" +"3240374016","3240407039","GB" +"3240407040","3240407295","IL" +"3240407296","3240407551","NL" +"3240407552","3240407807","NO" +"3240407808","3240408063","NL" +"3240408064","3240408319","DE" +"3240408320","3240408575","CH" +"3240408576","3240408831","FR" +"3240408832","3240409087","PL" +"3240409088","3240409343","TR" +"3240409344","3240409599","GB" +"3240409600","3240409855","NL" +"3240409856","3240410367","DE" +"3240410368","3240410623","AT" +"3240410624","3240410879","PT" +"3240410880","3240411135","NO" +"3240419328","3240419839","GB" +"3240419840","3240420095","AT" +"3240420096","3240420351","DE" +"3240420352","3240420607","RO" +"3240420608","3240420863","NL" +"3240420864","3240460287","GB" +"3240460288","3240461055","IL" +"3240461056","3240461567","DE" +"3240461568","3240461823","UA" +"3240461824","3240462079","EU" +"3240462080","3240462335","TR" +"3240462336","3240462591","RO" +"3240462592","3240462847","RU" +"3240462848","3240463103","RO" +"3240463104","3240463615","PL" +"3240463616","3240463871","UA" +"3240463872","3240464127","GB" +"3240464128","3240464383","SA" +"3240464384","3240464639","AT" +"3240464640","3240464895","FR" +"3240464896","3240465151","GB" +"3240465152","3240465407","CH" +"3240465408","3240465919","DE" +"3240465920","3240466175","FR" +"3240466176","3240466687","DE" +"3240466688","3240466943","AO" +"3240466944","3240467199","TR" +"3240467200","3240467455","NL" +"3240467456","3240467711","UA" +"3240467712","3240467967","RU" +"3240467968","3240468223","GB" +"3240468224","3240468479","CH" +"3240468480","3240487935","GB" +"3240487936","3240488191","CH" +"3240488192","3240488447","GB" +"3240488448","3240488703","BG" +"3240488704","3240488959","NL" +"3240488960","3240493055","GB" +"3240493056","3240501247","SE" +"3240501248","3240505343","GB" +"3240505344","3240505599","PL" +"3240505600","3240536640","GB" +"3240536641","3240536641","US" +"3240536642","3240575487","GB" +"3240575488","3240575743","RO" +"3240575744","3240575999","GB" +"3240576000","3240576255","DE" +"3240576256","3240576511","UA" +"3240576512","3240576767","FR" +"3240576768","3240577023","PL" +"3240577024","3240577279","UA" +"3240577280","3240577535","RO" +"3240577536","3240577791","DE" +"3240577792","3240578559","UA" +"3240578560","3240578815","RU" +"3240578816","3240579071","IL" +"3240579072","3240587263","GB" +"3240587264","3240587519","NL" +"3240587520","3240587775","RU" +"3240587776","3240588031","UA" +"3240588032","3240588287","DE" +"3240588288","3240588543","RU" +"3240588544","3240588799","RO" +"3240588800","3240589055","UA" +"3240589056","3240589311","RO" +"3240589312","3240593407","SE" +"3240593408","3240594175","GB" +"3240594176","3240594431","DK" +"3240594432","3240609791","GB" +"3240609792","3240611839","DE" +"3240611840","3240622079","GB" +"3240622080","3240622591","RU" +"3240622592","3240624127","GB" +"3240624128","3240689663","EE" +"3240689664","3240690175","GB" +"3240690176","3240690687","TR" +"3240690688","3240691199","UA" +"3240691200","3240691711","IT" +"3240691712","3240692735","DE" +"3240692736","3240693247","DK" +"3240693248","3240693759","ES" +"3240693760","3240695807","BE" +"3240695808","3240697855","ES" +"3240697856","3240698111","SE" +"3240698112","3240698367","LV" +"3240698368","3240698623","GB" +"3240698624","3240699135","SI" +"3240699136","3240699391","DE" +"3240699392","3240699647","UA" +"3240699648","3240699903","NO" +"3240699904","3240700159","LT" +"3240700160","3240700415","AT" +"3240700416","3240700671","BE" +"3240700672","3240700927","ES" +"3240700928","3240701183","FR" +"3240701184","3240701439","LV" +"3240701440","3240701695","ES" +"3240701696","3240701951","FR" +"3240701952","3240702975","UA" +"3240702976","3240703999","DE" +"3240704000","3240705023","GR" +"3240705024","3240706047","UA" +"3240706048","3240707071","BG" +"3240707072","3240707839","NL" +"3240707840","3240709119","FR" +"3240709120","3240710143","RU" +"3240710144","3240710399","UA" +"3240710400","3240710655","LT" +"3240710656","3240710911","DE" +"3240710912","3240711167","FR" +"3240711168","3240711679","IT" +"3240711680","3240711935","RU" +"3240711936","3240712191","DE" +"3240712192","3240712447","UA" +"3240712448","3240712703","SI" +"3240712704","3240712959","CH" +"3240712960","3240713215","IT" +"3240713216","3240713471","GB" +"3240713472","3240713727","RU" +"3240713728","3240713983","AT" +"3240713984","3240714239","FR" +"3240714240","3240716287","GB" +"3240716288","3240718335","CH" +"3240718336","3240718847","PL" +"3240718848","3240719359","PT" +"3240719360","3240719871","DE" +"3240719872","3240720383","SE" +"3240720384","3240720895","DE" +"3240720896","3240721407","RO" +"3240721408","3240721919","DE" +"3240721920","3240722431","RO" +"3240722432","3240723455","UA" +"3240723456","3240724479","DE" +"3240724480","3240724991","CH" +"3240724992","3240725503","AT" +"3240725504","3240726527","RU" +"3240726528","3240727039","DE" +"3240727040","3240727551","DZ" +"3240727552","3240728063","CH" +"3240728064","3240728575","GR" +"3240728576","3240729599","GB" +"3240729600","3240730111","DK" +"3240730112","3240730623","BE" +"3240730624","3240731647","ES" +"3240731648","3240732671","GB" +"3240732672","3240733695","SE" +"3240733696","3240734719","PL" +"3240734720","3240735743","IT" +"3240735744","3240736255","FR" +"3240736256","3240736767","BG" +"3240736768","3240737791","UA" +"3240737792","3240738815","BG" +"3240738816","3240739071","UA" +"3240739072","3240739327","CH" +"3240739328","3240739583","FR" +"3240739584","3240739839","LV" +"3240739840","3240740095","US" +"3240740096","3240740351","LT" +"3240740352","3240740607","IT" +"3240740608","3240741119","DE" +"3240741120","3240741375","AT" +"3240741376","3240741631","IL" +"3240741632","3240741887","RU" +"3240741888","3240742143","LV" +"3240742144","3240742399","IT" +"3240742400","3240742655","RO" +"3240742656","3240742911","AT" +"3240742912","3240743423","IL" +"3240743424","3240743935","PL" +"3240743936","3240744447","DE" +"3240744448","3240744959","SE" +"3240744960","3240745471","RO" +"3240745472","3240745983","UA" +"3240745984","3240746495","GB" +"3240746496","3240747007","FR" +"3240747008","3240747263","SE" +"3240747264","3240747519","TR" +"3240747520","3240747775","RU" +"3240747776","3240748031","ES" +"3240748032","3240748287","AT" +"3240748288","3240748543","GR" +"3240748544","3240749055","PL" +"3240749056","3240749311","AT" +"3240749312","3240749567","BE" +"3240749568","3240749823","ES" +"3240749824","3240750335","IT" +"3240750336","3240750591","LU" +"3240750592","3240750847","FR" +"3240750848","3240751103","UA" +"3240751104","3240752127","ES" +"3240752128","3240754175","RO" +"3240754176","3240755199","DE" +"3240755200","3240755455","IE" +"3240755456","3240791551","IT" +"3240791552","3240791807","RU" +"3240791808","3240792063","ES" +"3240792064","3240792319","GB" +"3240792320","3240792575","RU" +"3240792576","3240792831","CH" +"3240792832","3240793087","PL" +"3240793088","3240793343","UA" +"3240793344","3240793599","RU" +"3240793600","3240794111","FR" +"3240794112","3240794367","GB" +"3240794368","3240794879","PL" +"3240794880","3240795135","DE" +"3240795136","3240795647","UA" +"3240795648","3240795903","CH" +"3240795904","3240796159","SE" +"3240796160","3240808959","IT" +"3240808960","3240809215","GB" +"3240809216","3240809471","PL" +"3240809472","3240809727","NL" +"3240809728","3240809983","FR" +"3240809984","3240810239","GR" +"3240810240","3240810495","SE" +"3240810496","3240810751","TR" +"3240810752","3240811007","GB" +"3240811008","3240811263","PL" +"3240811264","3240811519","FR" +"3240811520","3240811775","SA" +"3240811776","3240812031","DE" +"3240812032","3240812287","HU" +"3240812288","3240812543","KW" +"3240812544","3240813567","IT" +"3240813568","3240814591","PL" +"3240814592","3240818687","IT" +"3240818688","3240820735","NL" +"3240820800","3240820863","GB" +"3240820864","3240820991","PL" +"3240820992","3240823807","IT" +"3240823808","3240824319","PL" +"3240824320","3240827135","IT" +"3240827136","3240827391","FR" +"3240827392","3240827647","BG" +"3240827648","3240827903","CH" +"3240827904","3240828159","IT" +"3240828160","3240828415","DE" +"3240828416","3240837119","IT" +"3240837120","3240837375","GB" +"3240837376","3240840447","IT" +"3240840448","3240840703","PL" +"3240840704","3240840959","RU" +"3240840960","3240841215","GB" +"3240841216","3240843263","IT" +"3240843264","3240843775","NL" +"3240843776","3240844031","PL" +"3240844032","3240844543","NL" +"3240844544","3240844799","CH" +"3240844800","3240845055","GB" +"3240845056","3240845311","UA" +"3240845312","3240846847","IT" +"3240846848","3240847359","VA" +"3240847360","3240852735","IT" +"3240852736","3240852991","GB" +"3240852992","3240853247","IT" +"3240853248","3240853503","RU" +"3240853504","3240854527","VA" +"3240854528","3240855039","IT" +"3240855040","3240855295","RU" +"3240855296","3240857599","IT" +"3240857600","3240857855","PL" +"3240857856","3240858623","IT" +"3240858624","3240858879","PL" +"3240858880","3240859135","IT" +"3240859136","3240859391","NL" +"3240859392","3240859647","SE" +"3240859648","3240861183","CH" +"3240861184","3240861695","AT" +"3240861696","3240866815","IT" +"3240866816","3240867071","RU" +"3240867072","3240867327","PL" +"3240867328","3240867583","RU" +"3240867584","3240867839","CH" +"3240867840","3240873983","IT" +"3240873984","3240874495","RU" +"3240874496","3240875007","UA" +"3240875008","3240875519","AT" +"3240875520","3240876031","FR" +"3240876032","3240876543","DK" +"3240876544","3240877055","GR" +"3240877056","3240877567","DE" +"3240877568","3240879103","UA" +"3240879104","3240880127","PL" +"3240880128","3240881151","RU" +"3240881152","3240882175","EU" +"3240882176","3240883199","PL" +"3240883200","3240884223","IL" +"3240884224","3240886271","UA" +"3240886272","3240952071","SE" +"3240952072","3240952079","IE" +"3240952080","3240952095","SE" +"3240952096","3240952127","US" +"3240952128","3240954495","SE" +"3240954496","3240954623","DE" +"3240954624","3240955647","SE" +"3240955648","3240955903","GB" +"3240955904","3240961791","SE" +"3240961792","3240961799","FI" +"3240961800","3240968703","SE" +"3240968704","3240968959","GB" +"3240968960","3240988159","SE" +"3240988160","3240988167","PL" +"3240988168","3241017343","SE" +"3241017344","3241017855","AT" +"3241017856","3241018111","RU" +"3241018112","3241029119","AT" +"3241029120","3241029375","UA" +"3241029376","3241029631","PL" +"3241029632","3241032703","AT" +"3241032704","3241032959","RU" +"3241032960","3241033215","GB" +"3241033216","3241033727","DE" +"3241033728","3241033983","IL" +"3241033984","3241034239","RU" +"3241034240","3241034495","UA" +"3241034496","3241034751","DE" +"3241034752","3241035007","PL" +"3241035008","3241035263","DK" +"3241035264","3241035519","RO" +"3241035520","3241035775","SI" +"3241035776","3241036031","GB" +"3241036032","3241036287","CH" +"3241036288","3241036543","RU" +"3241036544","3241036799","SI" +"3241036800","3241037055","GB" +"3241037056","3241037311","RU" +"3241037312","3241037567","BE" +"3241037568","3241037823","DK" +"3241037824","3241038079","NL" +"3241038080","3241038335","UA" +"3241038336","3241038591","DE" +"3241038592","3241039103","LT" +"3241039104","3241039359","FR" +"3241039360","3241039615","UA" +"3241039616","3241039871","GB" +"3241039872","3241040127","CH" +"3241040128","3241040383","UA" +"3241040384","3241040639","GB" +"3241040640","3241040895","RO" +"3241040896","3241063423","AT" +"3241063424","3241063679","IT" +"3241063680","3241063935","PL" +"3241063936","3241064191","DE" +"3241064192","3241064447","GB" +"3241064448","3241064703","DE" +"3241064704","3241065471","PL" +"3241065472","3241068543","AT" +"3241068544","3241068799","GB" +"3241068800","3241069311","UA" +"3241069312","3241069567","FR" +"3241069568","3241070079","GB" +"3241070080","3241070335","FR" +"3241070336","3241070847","RU" +"3241070848","3241071103","AT" +"3241071104","3241071359","UA" +"3241071360","3241071615","RU" +"3241071616","3241071871","PL" +"3241071872","3241072127","RU" +"3241072128","3241072383","BE" +"3241072384","3241072639","DE" +"3241072640","3241073919","AT" +"3241073920","3241074175","GB" +"3241074176","3241076735","AT" +"3241076736","3241076991","GR" +"3241076992","3241077759","AT" +"3241077760","3241078015","LV" +"3241078016","3241078271","PL" +"3241078272","3241078527","ES" +"3241078528","3241078783","DE" +"3241078784","3241082879","AT" +"3241082880","3241083135","FR" +"3241083136","3241084927","CH" +"3241084928","3241085183","AP" +"3241085184","3241100799","CH" +"3241100800","3241101055","UA" +"3241101056","3241101311","DK" +"3241101312","3241101567","RO" +"3241101568","3241101823","DE" +"3241101824","3241102079","BG" +"3241102080","3241102335","RO" +"3241102336","3241102591","ES" +"3241102592","3241102847","DE" +"3241102848","3241103359","NL" +"3241103360","3241103615","FR" +"3241103616","3241103871","DK" +"3241103872","3241104127","DE" +"3241104128","3241104383","GB" +"3241104384","3241104639","ES" +"3241104640","3241104895","UA" +"3241104896","3241105151","ES" +"3241105152","3241105407","RU" +"3241105408","3241108223","CH" +"3241108224","3241108735","DE" +"3241108736","3241108991","RO" +"3241108992","3241109247","SA" +"3241109248","3241117695","CH" +"3241117696","3241117951","SI" +"3241117952","3241118207","UA" +"3241118208","3241118463","AT" +"3241118464","3241118719","FR" +"3241118720","3241118975","CH" +"3241118976","3241119231","FR" +"3241119232","3241119487","DK" +"3241119488","3241119743","EU" +"3241119744","3241119999","RO" +"3241120000","3241120255","ES" +"3241120256","3241120511","RU" +"3241120512","3241120767","GB" +"3241120768","3241121023","RU" +"3241121024","3241121279","CH" +"3241121280","3241121535","FR" +"3241121536","3241121791","PL" +"3241121792","3241122047","DE" +"3241122048","3241122303","CH" +"3241122304","3241122559","RU" +"3241122560","3241123327","AT" +"3241123328","3241124095","PL" +"3241124096","3241124351","DE" +"3241124352","3241124607","RO" +"3241124608","3241124863","PL" +"3241124864","3241125119","ES" +"3241125120","3241125375","IL" +"3241125376","3241125631","UA" +"3241125632","3241125887","SE" +"3241125888","3241129983","CH" +"3241129984","3241130239","FR" +"3241130240","3241130495","PT" +"3241130496","3241130751","DK" +"3241130752","3241131007","DE" +"3241131008","3241131263","NL" +"3241131264","3241131519","UA" +"3241131520","3241131775","CH" +"3241131776","3241132031","DK" +"3241132032","3241145855","CH" +"3241145856","3241146111","HR" +"3241146112","3241146367","PL" +"3241146368","3241146623","IL" +"3241146624","3241146879","RO" +"3241146880","3241148415","CH" +"3241148416","3241476095","FR" +"3241476096","3241476351","CH" +"3241476352","3241481727","BE" +"3241481728","3241481983","PT" +"3241481984","3241482239","DE" +"3241482240","3241484799","SE" +"3241484800","3241485311","BE" +"3241485312","3241485567","GB" +"3241485568","3241496575","BE" +"3241496576","3241496831","AT" +"3241496832","3241497343","BE" +"3241497344","3241497599","UA" +"3241497600","3241497855","SE" +"3241497856","3241498111","DK" +"3241498112","3241498367","BE" +"3241498368","3241498623","RO" +"3241498624","3241498879","NO" +"3241498880","3241499135","UA" +"3241499136","3241499903","BE" +"3241499904","3241500159","DE" +"3241500160","3241500671","GB" +"3241500672","3241501439","BE" +"3241501440","3241501951","EU" +"3241501952","3241502975","BE" +"3241502976","3241503231","GR" +"3241503232","3241503487","RS" +"3241503488","3241508095","BE" +"3241508096","3241508351","NL" +"3241508352","3241541375","BE" +"3241541376","3241541631","PL" +"3241541632","3241724415","FR" +"3241724416","3241724671","RU" +"3241724672","3241803775","FR" +"3241803824","3241803831","EU" +"3241803832","3241803839","GB" +"3241804032","3241820159","BE" +"3241820160","3241821695","GB" +"3241821696","3241822207","GR" +"3241822208","3241824255","CZ" +"3241824256","3241843455","BE" +"3241843456","3241843711","CH" +"3241843712","3241848063","BE" +"3241848064","3241851391","CH" +"3241851392","3241851903","GR" +"3241851904","3241852927","GB" +"3241852928","3241854463","SK" +"3241854464","3241854975","GB" +"3241854976","3241855999","DE" +"3241856000","3241857279","NL" +"3241857280","3241857535","CH" +"3241857536","3241859071","AT" +"3241859072","3241861119","US" +"3241861120","3241863167","BE" +"3241863168","3241863423","PL" +"3241863424","3241863679","FR" +"3241863680","3241863935","GR" +"3241863936","3241864191","GB" +"3241864192","3241864447","TR" +"3241864448","3241864703","RU" +"3241864704","3241864959","SE" +"3241864960","3241865215","IT" +"3241865216","3241865471","DE" +"3241865472","3241865727","NO" +"3241865728","3241865983","CH" +"3241865984","3241866239","RO" +"3241866240","3241866751","DE" +"3241866752","3241867007","UA" +"3241867008","3241867263","FR" +"3241867264","3241867519","UA" +"3241867520","3241867775","PL" +"3241867776","3241868031","NO" +"3241868032","3241868287","RU" +"3241868288","3241868543","HR" +"3241868544","3241868799","DE" +"3241868800","3241869055","UA" +"3241869056","3241869311","BY" +"3241869312","3241934847","PL" +"3241934848","3242196991","GB" +"3242196992","3242393599","FI" +"3242393600","3242394471","NL" +"3242394472","3242394479","DE" +"3242394480","3242419967","NL" +"3242419968","3242420223","EU" +"3242420224","3242426113","NL" +"3242426114","3242426114","EU" +"3242426115","3242459135","NL" +"3242459136","3242467327","BG" +"3242467328","3242475519","HU" +"3242475520","3242483711","LV" +"3242483712","3242493029","BG" +"3242493030","3242493030","A1" +"3242493031","3242524671","BG" +"3242524672","3242590207","NO" +"3242590208","3242655743","IT" +"3242655744","3242721279","NO" +"3242721280","3242852351","CH" +"3242852352","3242911231","BE" +"3242911232","3242911743","NL" +"3242911744","3242917887","BE" +"3242917888","3242950655","NO" +"3242950656","3242983423","BE" +"3242983424","3243048959","IT" +"3243048960","3243114495","SI" +"3243114496","3243150847","NL" +"3243150848","3243151103","IT" +"3243151104","3243216823","NL" +"3243216824","3243216831","GB" +"3243216832","3243223615","NL" +"3243223616","3243223623","NO" +"3243223624","3243223695","NL" +"3243223696","3243223703","PT" +"3243223704","3243245567","NL" +"3243245568","3243297791","AT" +"3243297792","3243298047","SI" +"3243298048","3243376639","AT" +"3243376640","3243441919","GB" +"3243441920","3243442175","MT" +"3243442176","3243444167","AT" +"3243444168","3243444183","NL" +"3243444184","3243507711","AT" +"3243507712","3243507967","GB" +"3243507968","3243509759","CZ" +"3243509760","3243510015","RU" +"3243510016","3243510271","NL" +"3243510272","3243511807","CZ" +"3243511808","3243512063","GB" +"3243512064","3243512319","UA" +"3243512320","3243512575","FR" +"3243512576","3243512831","UA" +"3243512832","3243513087","DE" +"3243513088","3243513343","GR" +"3243513344","3243513855","UA" +"3243513856","3243514111","BE" +"3243514112","3243514367","CH" +"3243514368","3243514623","IE" +"3243514624","3243514879","DK" +"3243514880","3243515135","AT" +"3243515136","3243515391","CH" +"3243515392","3243515647","DE" +"3243515648","3243515903","RU" +"3243515904","3243520511","CZ" +"3243520512","3243520767","UA" +"3243520768","3243521023","GB" +"3243521024","3243521279","AT" +"3243521280","3243521535","CZ" +"3243521536","3243521791","DE" +"3243521792","3243524095","CZ" +"3243524096","3243524351","RO" +"3243524352","3243524607","AT" +"3243524608","3243524863","DE" +"3243524864","3243525119","NL" +"3243525120","3243525375","CZ" +"3243525376","3243525631","RO" +"3243525632","3243525887","CZ" +"3243525888","3243526143","PL" +"3243526144","3243526399","UA" +"3243526400","3243526655","FR" +"3243526656","3243526911","PL" +"3243526912","3243527167","SE" +"3243527168","3243527679","UA" +"3243527680","3243527935","GB" +"3243527936","3243528191","PL" +"3243528192","3243529215","CZ" +"3243529216","3243529471","BE" +"3243529472","3243529727","GB" +"3243529728","3243529983","BG" +"3243529984","3243530239","GB" +"3243530240","3243530495","RU" +"3243530496","3243530751","FR" +"3243530752","3243531007","UA" +"3243531008","3243531263","DE" +"3243531264","3243531775","CZ" +"3243531776","3243532031","AT" +"3243532032","3243532287","DE" +"3243532288","3243536383","CZ" +"3243536384","3243536639","AT" +"3243536640","3243536895","CH" +"3243536896","3243537151","CZ" +"3243537152","3243537407","RO" +"3243537408","3243544063","CZ" +"3243544064","3243544319","GB" +"3243544320","3243544575","NL" +"3243544576","3243552767","CZ" +"3243552768","3243553023","NL" +"3243553024","3243553279","FR" +"3243553280","3243553535","DE" +"3243553536","3243553791","PL" +"3243553792","3243554303","DE" +"3243554304","3243554559","PL" +"3243554560","3243554815","MD" +"3243554816","3243555071","LV" +"3243555072","3243555327","RO" +"3243555328","3243555583","CZ" +"3243555584","3243555839","FR" +"3243555840","3243565055","CZ" +"3243565056","3243569151","GB" +"3243569152","3243570687","CZ" +"3243570688","3243570943","PL" +"3243570944","3243571711","CZ" +"3243571712","3243571967","GB" +"3243571968","3243572223","GR" +"3243572224","3243572991","CZ" +"3243572992","3243573247","RU" +"3243573248","3243704319","CZ" +"3243704320","3243769855","SK" +"3243769856","3243900927","DK" +"3243900928","3243966463","NO" +"3243966464","3243974655","PL" +"3243974656","3243978751","LU" +"3243978752","3243982847","NL" +"3243982848","3243991039","HU" +"3243991040","3243999231","BE" +"3243999232","3244031999","NO" +"3244032000","3244034047","GR" +"3244034048","3244035071","CY" +"3244035072","3244097535","GR" +"3244097536","3244098559","DE" +"3244098560","3244099583","GB" +"3244099584","3244100607","FR" +"3244100608","3244102655","UA" +"3244102656","3244103679","CH" +"3244103680","3244104703","BG" +"3244104704","3244105727","DE" +"3244105728","3244107775","GB" +"3244107776","3244108799","RO" +"3244108800","3244109823","GB" +"3244109824","3244111871","UA" +"3244111872","3244112895","KZ" +"3244112896","3244113919","RU" +"3244113920","3244114943","CH" +"3244114944","3244115967","PL" +"3244115968","3244116991","SK" +"3244116992","3244118015","UA" +"3244118016","3244120063","GB" +"3244120064","3244122111","PL" +"3244122112","3244123135","A2" +"3244123136","3244124159","UA" +"3244124160","3244125183","PL" +"3244125184","3244126207","UA" +"3244126208","3244127231","BE" +"3244127232","3244128255","UA" +"3244128256","3244129279","RU" +"3244129280","3244130303","FR" +"3244130304","3244131327","NO" +"3244131328","3244133375","FI" +"3244133376","3244134399","RO" +"3244134400","3244135423","PL" +"3244135424","3244137471","GB" +"3244137472","3244138495","PL" +"3244138496","3244139519","UA" +"3244139520","3244140543","GR" +"3244140544","3244141567","UA" +"3244141568","3244142591","NL" +"3244142592","3244143615","DE" +"3244143616","3244144639","FR" +"3244144640","3244146687","UA" +"3244146688","3244147711","RU" +"3244147712","3244149759","GB" +"3244149760","3244150783","PL" +"3244150784","3244151807","CH" +"3244151808","3244152831","KZ" +"3244152832","3244153855","UA" +"3244153856","3244154879","NO" +"3244154880","3244155903","GB" +"3244155904","3244156927","UA" +"3244156928","3244158975","RU" +"3244158976","3244159999","DE" +"3244160000","3244161023","RU" +"3244161024","3244163071","NO" +"3244163072","3244228607","FI" +"3244228608","3244261375","TN" +"3244261376","3244265823","IE" +"3244265824","3244265831","ES" +"3244265832","3244268031","IE" +"3244268032","3244268159","LU" +"3244268160","3244272575","IE" +"3244272576","3244272639","US" +"3244272640","3244273687","IE" +"3244273688","3244273695","US" +"3244273696","3244273727","IE" +"3244273728","3244273735","GB" +"3244273736","3244274215","IE" +"3244274216","3244274223","GB" +"3244274224","3244274279","IE" +"3244274280","3244274287","US" +"3244274288","3244277359","IE" +"3244277360","3244277367","GB" +"3244277368","3244277631","IE" +"3244277632","3244277695","US" +"3244277696","3244277759","IE" +"3244277760","3244294143","SI" +"3244294144","3244343807","DE" +"3244343808","3244344063","EU" +"3244344064","3244408575","DE" +"3244408576","3244408831","GB" +"3244408832","3244452863","DE" +"3244452864","3244453119","EU" +"3244453120","3244545279","DE" +"3244545280","3244545535","EU" +"3244545536","3244592127","DE" +"3244592128","3244592639","CH" +"3244592640","3244794367","DE" +"3244794368","3244794879","CA" +"3244794880","3244813311","DE" +"3244813312","3244813823","CA" +"3244813824","3244818431","DE" +"3244818432","3244818687","ES" +"3244818688","3244818943","AT" +"3244818944","3244819199","PL" +"3244819200","3244819455","DE" +"3244819456","3244819711","GB" +"3244819712","3244819967","RO" +"3244819968","3244820223","NL" +"3244820224","3244820479","UA" +"3244820480","3244820735","BE" +"3244820736","3244820991","DE" +"3244820992","3244821247","SI" +"3244821248","3244821503","RU" +"3244821504","3244821759","PA" +"3244821760","3244822015","TR" +"3244822016","3244822271","RU" +"3244822272","3244822527","GB" +"3244822528","3244822783","UA" +"3244822784","3244823039","CZ" +"3244823040","3244823295","DE" +"3244823296","3244823551","FR" +"3244823552","3244823807","GE" +"3244823808","3244824063","RO" +"3244824064","3244824319","IR" +"3244824320","3244824575","SI" +"3244824576","3244824831","RU" +"3244824832","3244825087","GB" +"3244825088","3244825343","DE" +"3244825344","3244826111","RU" +"3244826112","3244826367","RO" +"3244826368","3244826623","CH" +"3244826624","3244826879","DE" +"3244826880","3244827135","MK" +"3244827136","3244827391","AT" +"3244827392","3244827647","GB" +"3244827648","3244827903","FR" +"3244827904","3244828159","BE" +"3244828160","3244828415","FI" +"3244828416","3244828671","FR" +"3244828672","3244828927","SA" +"3244828928","3244829183","MD" +"3244829184","3244829439","CH" +"3244829440","3244829695","DK" +"3244829696","3244829951","IL" +"3244829952","3244830463","PL" +"3244830464","3244830719","CH" +"3244830720","3244830975","FR" +"3244830976","3244831231","DE" +"3244831232","3244831487","PL" +"3244831488","3244831743","ES" +"3244831744","3244831999","PT" +"3244832000","3244832255","HU" +"3244832256","3244832511","FR" +"3244832512","3244832767","AT" +"3244832768","3244833023","FR" +"3244833024","3244833279","RU" +"3244833280","3244833535","UA" +"3244833536","3244833791","RU" +"3244833792","3244834047","FR" +"3244834048","3244834303","CH" +"3244834304","3244834559","IL" +"3244834560","3244834815","GB" +"3244834816","3244835071","RU" +"3244835072","3244835327","AT" +"3244835328","3244835583","DE" +"3244835584","3244835839","UA" +"3244835840","3244836095","RS" +"3244836096","3244836607","RU" +"3244836608","3244836863","PL" +"3244836864","3244837119","FR" +"3244837120","3244837375","RO" +"3244837376","3244837887","RU" +"3244837888","3244838143","CY" +"3244838144","3244838399","IL" +"3244838400","3244838655","GB" +"3244838656","3244838911","BG" +"3244838912","3244839167","TR" +"3244839168","3244839423","GB" +"3244839424","3244839679","AT" +"3244839680","3244839935","DK" +"3244839936","3244840191","DE" +"3244840192","3244840447","UA" +"3244840448","3244840703","IT" +"3244840704","3244840959","RU" +"3244840960","3244841215","PL" +"3244841216","3244841471","GB" +"3244841472","3244841727","DE" +"3244841728","3244842495","GB" +"3244842496","3244842751","RU" +"3244842752","3244843007","DE" +"3244843008","3244843263","UA" +"3244843264","3244843519","RU" +"3244843520","3244843775","NL" +"3244843776","3244844031","PL" +"3244844032","3244844287","SE" +"3244844288","3244844543","GB" +"3244844544","3244844799","RU" +"3244844800","3244845055","GB" +"3244845056","3244845311","NL" +"3244845312","3244845567","NO" +"3244845568","3244845823","RO" +"3244845824","3244846335","GB" +"3244846336","3244846591","TR" +"3244846592","3244846847","CZ" +"3244846848","3244847103","NL" +"3244847104","3244847359","SE" +"3244847360","3244847615","A1" +"3244847616","3244847871","DK" +"3244847872","3244848127","IL" +"3244848128","3244848383","CH" +"3244848384","3244848639","IL" +"3244848640","3244848895","DE" +"3244848896","3244849151","IL" +"3244849152","3244849407","AT" +"3244849408","3244849663","RO" +"3244849664","3244849919","SE" +"3244849920","3244850175","RO" +"3244850176","3244850431","TR" +"3244850432","3244850687","AT" +"3244850688","3244850943","GB" +"3244850944","3244851455","RU" +"3244851456","3244851711","NL" +"3244851712","3244851967","TR" +"3244851968","3244852223","GB" +"3244852224","3244852479","CH" +"3244852480","3244852735","UA" +"3244852736","3244852991","SI" +"3244852992","3244853247","DK" +"3244853248","3244853503","IE" +"3244853504","3244853759","IT" +"3244853760","3244854015","TR" +"3244854016","3244854271","NL" +"3244854272","3244854527","GB" +"3244854784","3244855295","RU" +"3244855296","3244855551","GB" +"3244855552","3244855807","UA" +"3244855808","3244856063","DE" +"3244856064","3244856319","IL" +"3244856320","3244856575","CH" +"3244856576","3244856831","RU" +"3244856832","3244857087","RO" +"3244857088","3244857343","IT" +"3244857344","3244857599","GB" +"3244857600","3244857855","EU" +"3244857856","3244858111","PL" +"3244858112","3244858367","DE" +"3244858368","3244858623","PL" +"3244858624","3244858879","RU" +"3244858880","3244859135","FR" +"3244859136","3244859391","BE" +"3244859392","3244859647","SE" +"3244859648","3244859903","PL" +"3244859904","3244860159","FR" +"3244860160","3244860415","PL" +"3244860416","3244860671","GB" +"3244860672","3244860927","BG" +"3244860928","3244861183","PL" +"3244861184","3244861439","CH" +"3244861440","3244861951","GB" +"3244861952","3244862207","RU" +"3244862208","3244862463","DK" +"3244862464","3244862719","CZ" +"3244862720","3244862975","RO" +"3244862976","3244863231","DE" +"3244863232","3244863487","GB" +"3244863488","3244863743","KZ" +"3244863744","3244863999","RU" +"3244864000","3244864255","UA" +"3244864256","3244864511","GB" +"3244864512","3244864767","RO" +"3244864768","3244865023","RU" +"3244865024","3244865535","UA" +"3244865536","3244865791","PL" +"3244865792","3244866047","CH" +"3244866048","3244866559","NL" +"3244866560","3244866815","FI" +"3244866816","3244867071","UA" +"3244867072","3244867583","RU" +"3244867584","3244868095","NL" +"3244868096","3244868351","DE" +"3244868352","3244868607","RU" +"3244868608","3244868863","FI" +"3244868864","3244869119","RU" +"3244869120","3244869375","GB" +"3244869376","3244869631","FR" +"3244869632","3244869887","GR" +"3244869888","3244870143","TR" +"3244870144","3244870399","DK" +"3244870400","3244870655","UA" +"3244870656","3244870911","SA" +"3244870912","3244871167","FR" +"3244871168","3244871423","LT" +"3244871424","3244871679","RU" +"3244871680","3244872447","UA" +"3244872448","3244872703","CH" +"3244872704","3244872959","IR" +"3244872960","3244873215","UA" +"3244873216","3244873471","SE" +"3244873472","3244873727","EU" +"3244873728","3244873983","DE" +"3244873984","3244874239","FI" +"3244874240","3244874495","ES" +"3244874496","3244874751","FR" +"3244874752","3244875007","DE" +"3244875008","3244875263","PL" +"3244875264","3244875519","LI" +"3244875520","3244875775","IT" +"3244875776","3244876799","RU" +"3244876800","3244877055","GB" +"3244877056","3244877311","JO" +"3244877312","3244877567","RU" +"3244877568","3244877823","FR" +"3244877824","3244878079","AT" +"3244878080","3244878335","GB" +"3244878336","3244878591","RU" +"3244878592","3244878847","PL" +"3244878848","3244879103","SI" +"3244879104","3244879359","RU" +"3244879360","3244879615","CH" +"3244879616","3244879871","PL" +"3244879872","3244880127","SI" +"3244880128","3244880383","RU" +"3244880384","3244880639","UA" +"3244880896","3244881151","PL" +"3244881152","3244881407","RU" +"3244881408","3244881663","DK" +"3244881664","3244881919","RO" +"3244881920","3244882175","RU" +"3244882176","3244882431","UA" +"3244882432","3244882687","IT" +"3244882688","3244882943","PL" +"3244882944","3244883199","NL" +"3244883200","3244883455","KZ" +"3244883456","3244883711","CZ" +"3244883712","3244883967","NL" +"3244883968","3244884223","DE" +"3244884224","3244884479","FR" +"3244884480","3244884735","IR" +"3244884736","3244884991","NL" +"3244884992","3244885247","GR" +"3244885248","3244885503","CH" +"3244885504","3244885759","IR" +"3244885760","3244886015","UA" +"3244886016","3244886271","LB" +"3244886272","3244886527","CH" +"3244886528","3244886783","DK" +"3244886784","3244887039","RU" +"3244887040","3244887295","NL" +"3244887296","3244887551","GB" +"3244887552","3244887807","RU" +"3244887808","3244888063","BE" +"3244888064","3244888319","PL" +"3244888320","3244888575","DE" +"3244888576","3244888831","FR" +"3244888832","3244889087","DE" +"3244889088","3244889343","PL" +"3244889344","3244889599","RO" +"3244889600","3244889855","SI" +"3244889856","3244890111","HR" +"3244890112","3244890367","PL" +"3244890368","3244890623","NL" +"3244890624","3244890879","FR" +"3244890880","3244891135","RU" +"3244891136","3244891391","RO" +"3244891392","3244891647","PL" +"3244891648","3244891903","UA" +"3244891904","3244892159","RO" +"3244892160","3244892415","PL" +"3244892416","3244892671","NL" +"3244892672","3244892927","ES" +"3244892928","3244893183","PL" +"3244893184","3244893439","BE" +"3244893440","3244893695","RU" +"3244893696","3244893951","DE" +"3244893952","3244894463","RU" +"3244894464","3244894719","UA" +"3244894720","3244894975","GR" +"3244894976","3244895231","FR" +"3244895232","3244895487","DK" +"3244895488","3244895743","PL" +"3244895744","3244895999","DE" +"3244896000","3244896511","GB" +"3244896512","3244896767","LT" +"3244896768","3244897023","NL" +"3244897024","3244897279","GB" +"3244897280","3244897535","DE" +"3244897536","3244897791","RU" +"3244897792","3244898047","GB" +"3244898048","3244898303","DE" +"3244898304","3244898559","UA" +"3244898560","3244898815","GI" +"3244898816","3244899071","RO" +"3244899072","3244899327","RU" +"3244899328","3244899583","BG" +"3244899584","3244899839","GB" +"3244899840","3244900095","UA" +"3244900096","3244900351","PL" +"3244900352","3244900607","RO" +"3244900608","3244900863","RU" +"3244900864","3244901119","PL" +"3244901120","3244901375","SI" +"3244901376","3244901631","DE" +"3244901632","3244901887","GB" +"3244901888","3244902143","UA" +"3244902144","3244902655","RU" +"3244902656","3244902911","BE" +"3244902912","3244903167","IM" +"3244903168","3244903423","PL" +"3244903424","3244903679","FI" +"3244903680","3244903935","NO" +"3244903936","3244904191","RO" +"3244904192","3244904447","IT" +"3244904448","3244904703","GR" +"3244904704","3244904959","FR" +"3244904960","3244905215","BY" +"3244905216","3244905471","MD" +"3244905472","3244905727","GB" +"3244905728","3244905983","GR" +"3244905984","3244906239","AT" +"3244906240","3244906751","DE" +"3244906752","3244907007","SA" +"3244907008","3244907263","FR" +"3244907264","3244907519","RO" +"3244907520","3244907775","UA" +"3244907776","3244908287","RU" +"3244908288","3244908543","NL" +"3244908544","3244908799","RU" +"3244908800","3244909055","FI" +"3244909056","3244909311","GB" +"3244909312","3244909567","IL" +"3244909568","3244909823","RU" +"3244909824","3244910335","NL" +"3244910336","3244910591","DE" +"3244910592","3244910847","GB" +"3244910848","3244911103","DE" +"3244911104","3244911359","BE" +"3244911360","3244911615","RU" +"3244911616","3244911871","GB" +"3244911872","3244912127","GR" +"3244912128","3244912383","PL" +"3244912384","3244912639","NL" +"3244912640","3244912895","NO" +"3244912896","3244913151","SE" +"3244913152","3244913407","RU" +"3244913408","3244913663","SI" +"3244913664","3244913919","DK" +"3244913920","3244914431","RU" +"3244914432","3244914687","SA" +"3244914688","3244914943","GB" +"3244914944","3244915199","UA" +"3244915200","3244915455","PL" +"3244915456","3244915711","FI" +"3244915712","3244915967","UA" +"3244915968","3244916223","PL" +"3244916224","3244916479","RU" +"3244916480","3244916735","SI" +"3244916736","3244916991","FR" +"3244916992","3244917247","PL" +"3244917248","3244917503","SE" +"3244917504","3244917759","AT" +"3244917760","3244918015","RU" +"3244918016","3244918271","BE" +"3244918272","3244918527","SE" +"3244918528","3244918783","UA" +"3244918784","3244919039","CH" +"3244919040","3244919295","DE" +"3244919296","3244919551","SE" +"3244919552","3244919807","DE" +"3244919808","3244920063","RO" +"3244920064","3244920319","RU" +"3244920320","3244920575","SK" +"3244920576","3244920831","PL" +"3244920832","3244921087","NL" +"3244921088","3244921343","IE" +"3244921344","3244921599","LT" +"3244921600","3244921855","DE" +"3244921856","3244922111","BG" +"3244922112","3244922367","DK" +"3244922368","3244922623","NL" +"3244922624","3244922879","BG" +"3244922880","3244923135","UA" +"3244923136","3244923391","AT" +"3244923392","3244923647","EU" +"3244923648","3244923903","LV" +"3244923904","3244924159","RU" +"3244924160","3244924927","CZ" +"3244924928","3244925183","FI" +"3244925184","3244925439","CH" +"3244925440","3244925695","GB" +"3244925696","3244925951","RS" +"3244925952","3244926207","UA" +"3244926208","3244926463","NL" +"3244926464","3244926719","LV" +"3244926720","3244926975","PL" +"3244926976","3244927231","DE" +"3244927232","3244927487","UA" +"3244927488","3244927743","GB" +"3244927744","3244927999","US" +"3244928000","3244928255","GB" +"3244928256","3244928511","NL" +"3244928512","3244929023","RU" +"3244929024","3244929535","RO" +"3244929536","3244929791","PL" +"3244929792","3244930047","RU" +"3244930048","3244930303","PL" +"3244930304","3244930559","AT" +"3244930560","3244930815","GB" +"3244930816","3244931071","NL" +"3244931072","3244931327","RU" +"3244931328","3244931583","RO" +"3244931584","3244931839","FR" +"3244931840","3244932095","NL" +"3244932096","3244932351","GB" +"3244932352","3244932607","UA" +"3244932608","3244932863","DK" +"3244932864","3244933375","PL" +"3244933376","3244933631","HR" +"3244933632","3244933887","GB" +"3244933888","3244934143","AT" +"3244934144","3244934399","BG" +"3244934400","3244934655","FR" +"3244934656","3244934911","RU" +"3244934912","3244935167","IL" +"3244935168","3244935423","NL" +"3244935424","3244935679","UA" +"3244935680","3244935935","PL" +"3244935936","3244936191","IL" +"3244936192","3244936959","AT" +"3244936960","3244937215","KZ" +"3244937216","3244937471","TR" +"3244937472","3244937727","GB" +"3244937728","3244937983","UA" +"3244937984","3244938239","TR" +"3244938240","3244938495","GB" +"3244938496","3244938751","RU" +"3244938752","3244939007","AT" +"3244939008","3244939263","RO" +"3244939264","3244939519","UA" +"3244939520","3244939775","FR" +"3244939776","3244940031","GB" +"3244940032","3244940287","UA" +"3244940288","3244940543","DK" +"3244940544","3244940799","PL" +"3244940800","3244941055","RU" +"3244941056","3244941311","DE" +"3244941312","3244941567","CY" +"3244941568","3244941823","FR" +"3244941824","3244942079","SE" +"3244942080","3244942335","PL" +"3244942336","3244942591","IT" +"3244942592","3244942847","PL" +"3244942848","3244943103","DE" +"3244943104","3244943359","GB" +"3244943360","3244943615","FR" +"3244943616","3244943871","NL" +"3244943872","3244944127","TR" +"3244944128","3244944639","RU" +"3244944640","3244944895","GE" +"3244944896","3244945151","FR" +"3244945152","3244945407","RO" +"3244945408","3244945663","LV" +"3244945664","3244945919","NL" +"3244945920","3244946175","PL" +"3244946176","3244946431","TR" +"3244946432","3244946687","RO" +"3244946688","3244946943","RU" +"3244946944","3244947455","DE" +"3244947456","3244947711","PL" +"3244947712","3244947967","UA" +"3244947968","3244948223","DE" +"3244948224","3244948479","PL" +"3244948480","3244948735","FR" +"3244948736","3244948991","IE" +"3244948992","3244949247","UA" +"3244949248","3244951551","RU" +"3244951552","3244952575","FI" +"3244952576","3244953599","GB" +"3244953600","3244954623","DE" +"3244954624","3244955647","PL" +"3244955648","3244957695","UA" +"3244957696","3244958719","EU" +"3244958720","3244959743","FR" +"3244959744","3244960767","RU" +"3244960768","3244961791","RO" +"3244961792","3244962815","KG" +"3244962816","3244963839","IL" +"3244963840","3244966911","UA" +"3244966912","3244968959","RU" +"3244968960","3244969983","PL" +"3244969984","3244971007","UA" +"3244971008","3244972031","PL" +"3244972032","3244975103","RU" +"3244975104","3244977151","PL" +"3244977152","3244978175","RU" +"3244978176","3244979199","GB" +"3244979200","3244980223","FR" +"3244980224","3244981247","DK" +"3244981248","3244982271","RO" +"3244982272","3244983295","PL" +"3244983296","3244984319","RU" +"3244984320","3244985343","UA" +"3244985344","3244986367","DE" +"3244986368","3244987391","UA" +"3244987392","3244988415","RU" +"3244988416","3244990463","PL" +"3244990464","3244991487","UA" +"3244991488","3244992511","DK" +"3244992512","3244994559","RU" +"3244994560","3244995583","ES" +"3244995584","3244996607","IT" +"3244996608","3244997631","UA" +"3244997632","3244998655","RO" +"3244998656","3244999679","PL" +"3244999680","3245000703","IQ" +"3245000704","3245001727","UA" +"3245001728","3245002751","IL" +"3245002752","3245003263","PL" +"3245003264","3245003519","SE" +"3245003520","3245003775","UA" +"3245003776","3245004799","RU" +"3245004800","3245005823","PL" +"3245005824","3245006847","UA" +"3245006848","3245007871","DE" +"3245007872","3245008895","PL" +"3245008896","3245009919","RU" +"3245009920","3245010431","UA" +"3245010432","3245010687","PL" +"3245010688","3245010943","FR" +"3245010944","3245011967","RU" +"3245011968","3245012991","PL" +"3245012992","3245014015","UA" +"3245014016","3245015039","GR" +"3245015040","3245016063","RU" +"3245016064","3245017087","RS" +"3245017088","3245018111","PL" +"3245018112","3245021183","RU" +"3245021184","3245022207","UA" +"3245022208","3245023231","NO" +"3245023232","3245024255","PL" +"3245024256","3245025279","BG" +"3245025280","3245026303","UA" +"3245026304","3245027327","GB" +"3245027328","3245029375","RU" +"3245029376","3245030399","FR" +"3245030400","3245032447","RU" +"3245032448","3245033471","BG" +"3245033472","3245034495","UA" +"3245034496","3245035519","SE" +"3245035520","3245036543","UA" +"3245036544","3245037567","IS" +"3245037568","3245038591","PL" +"3245038592","3245039615","RU" +"3245039616","3245040639","MD" +"3245040640","3245041663","RU" +"3245041664","3245044735","UA" +"3245044736","3245045759","GB" +"3245045760","3245046783","DE" +"3245046784","3245047807","FR" +"3245047808","3245050879","UA" +"3245050880","3245051903","RU" +"3245051904","3245052927","DE" +"3245052928","3245054975","RU" +"3245054976","3245055999","AT" +"3245056000","3245057023","CZ" +"3245057024","3245058047","PL" +"3245058048","3245061119","UA" +"3245061120","3245062143","RU" +"3245062144","3245063167","UA" +"3245063168","3245065215","RU" +"3245065216","3245066239","PL" +"3245066240","3245067263","UA" +"3245067264","3245068287","GB" +"3245068288","3245069311","UA" +"3245069312","3245070335","PL" +"3245070336","3245071359","RU" +"3245071360","3245072383","NL" +"3245072384","3245073407","UA" +"3245073408","3245076479","RU" +"3245076480","3245077503","FR" +"3245077504","3245078527","UA" +"3245078528","3245079551","PL" +"3245079552","3245080575","CZ" +"3245080576","3245082623","SE" +"3245082624","3245084927","DE" +"3245084928","3245085183","BE" +"3245085184","3245085439","GB" +"3245085440","3245085695","DE" +"3245085696","3245086207","FR" +"3245086208","3245086463","AT" +"3245086464","3245086719","GH" +"3245086720","3245086975","BG" +"3245086976","3245087231","IT" +"3245087232","3245087487","CH" +"3245087488","3245087743","NL" +"3245087744","3245087999","GH" +"3245088000","3245088255","LV" +"3245088256","3245088511","KW" +"3245088512","3245088767","FR" +"3245088768","3245089279","BG" +"3245089280","3245089791","PL" +"3245089792","3245090303","GB" +"3245090304","3245090815","UA" +"3245090816","3245091327","AT" +"3245091328","3245091839","SE" +"3245091840","3245093887","UA" +"3245093888","3245094911","RO" +"3245094912","3245095935","UA" +"3245095936","3245096959","IT" +"3245096960","3245099007","EU" +"3245099008","3245103103","GB" +"3245103104","3245105151","EU" +"3245105152","3245105663","GB" +"3245105664","3245106175","NL" +"3245106176","3245106687","AT" +"3245106688","3245107711","UA" +"3245107712","3245108735","CZ" +"3245108736","3245109247","FR" +"3245109248","3245112319","UA" +"3245112320","3245113343","PL" +"3245113344","3245113855","UA" +"3245113856","3245114367","RU" +"3245114368","3245114879","SK" +"3245114880","3245115391","JO" +"3245115392","3245115903","CH" +"3245115904","3245116415","AT" +"3245116416","3245116927","FR" +"3245116928","3245117439","KW" +"3245117440","3245118463","LV" +"3245118464","3245119487","GB" +"3245119488","3245120511","EU" +"3245120512","3245121093","GB" +"3245121094","3245121095","US" +"3245121096","3245121535","GB" +"3245121536","3245122047","GR" +"3245122048","3245122559","UA" +"3245122560","3245123071","DE" +"3245123072","3245123583","FR" +"3245123584","3245124095","GB" +"3245124096","3245124607","UA" +"3245124608","3245125119","DE" +"3245125120","3245125631","ES" +"3245125632","3245125887","DE" +"3245125888","3245126143","PL" +"3245126144","3245126399","FR" +"3245126400","3245126655","DE" +"3245126656","3245126911","FR" +"3245126912","3245127167","DE" +"3245127168","3245127423","RU" +"3245127424","3245127679","AT" +"3245127680","3245127935","DE" +"3245127936","3245128191","LV" +"3245128192","3245128447","IT" +"3245128448","3245128703","CH" +"3245128704","3245129471","DK" +"3245129472","3245129983","GB" +"3245129984","3245130239","DE" +"3245130240","3245130495","PL" +"3245130496","3245130751","IL" +"3245130752","3245131007","SE" +"3245131008","3245131519","FR" +"3245131520","3245132031","GB" +"3245132032","3245132287","BE" +"3245132288","3245132543","PL" +"3245132544","3245132799","FR" +"3245132800","3245133311","IT" +"3245133312","3245133567","PL" +"3245133568","3245133823","RU" +"3245133824","3245134079","NO" +"3245134080","3245134335","UA" +"3245134336","3245134591","NL" +"3245134592","3245134847","IL" +"3245134848","3245135103","AT" +"3245135104","3245135359","TR" +"3245135360","3245135615","UG" +"3245135616","3245135871","BE" +"3245135872","3245136127","FR" +"3245136128","3245136383","DE" +"3245136384","3245136639","GB" +"3245136640","3245136895","RU" +"3245136896","3245137151","PL" +"3245137152","3245137407","GB" +"3245137408","3245137663","DE" +"3245137664","3245137919","SE" +"3245137920","3245138431","DK" +"3245138432","3245138943","UA" +"3245138944","3245139455","PL" +"3245139456","3245139967","RU" +"3245139968","3245140479","CH" +"3245140480","3245140991","RO" +"3245140992","3245141503","UA" +"3245141504","3245142015","RO" +"3245142016","3245143039","UA" +"3245143040","3245144063","GB" +"3245144064","3245145087","UA" +"3245145088","3245146111","UG" +"3245146112","3245147135","FR" +"3245147136","3245148159","DE" +"3245148160","3245149183","UA" +"3245149184","3245150207","RU" +"3245150208","3245154303","IS" +"3245154304","3245158399","IT" +"3245158400","3245158911","CH" +"3245158912","3245159423","GB" +"3245159424","3245159935","CH" +"3245159936","3245160447","BG" +"3245160448","3245160959","DK" +"3245160960","3245161471","PL" +"3245161472","3245161983","SE" +"3245161984","3245162495","BE" +"3245162496","3245163007","DE" +"3245163008","3245163519","KE" +"3245163520","3245164543","RU" +"3245164544","3245165055","BE" +"3245165056","3245165567","AT" +"3245165568","3245166079","RU" +"3245166080","3245166591","TZ" +"3245166592","3245166847","UA" +"3245166848","3245167103","GB" +"3245167104","3245167359","IL" +"3245167360","3245167615","GB" +"3245167616","3245167871","UA" +"3245167872","3245168127","LV" +"3245168128","3245168383","SE" +"3245168384","3245168639","FR" +"3245168640","3245168895","AT" +"3245168896","3245169151","RU" +"3245169152","3245169407","IT" +"3245169408","3245169919","PL" +"3245169920","3245170175","PT" +"3245170176","3245170431","GB" +"3245170432","3245170687","CH" +"3245170688","3245171711","DE" +"3245171712","3245172735","UA" +"3245172736","3245173759","IT" +"3245173760","3245174783","UA" +"3245174784","3245175039","IT" +"3245175040","3245175295","DE" +"3245175296","3245175551","RU" +"3245175552","3245175807","PL" +"3245175808","3245176063","GB" +"3245176064","3245176319","SK" +"3245176320","3245176575","UA" +"3245176576","3245176831","FR" +"3245176832","3245177343","ES" +"3245177344","3245177599","NL" +"3245177600","3245177855","PL" +"3245177856","3245178111","SI" +"3245178112","3245178623","BE" +"3245178624","3245178879","PL" +"3245178880","3245179391","UA" +"3245179392","3245179903","LU" +"3245179904","3245180415","DE" +"3245180416","3245180927","TR" +"3245180928","3245181439","NL" +"3245181440","3245181951","DE" +"3245181952","3245182463","AT" +"3245182464","3245182975","FR" +"3245182976","3245183999","UA" +"3245184000","3245187071","AT" +"3245187072","3245190143","UA" +"3245190144","3245191167","ES" +"3245191168","3245193215","CZ" +"3245193216","3245195263","BE" +"3245195264","3245197311","GB" +"3245197312","3245199359","IT" +"3245199360","3245199615","LU" +"3245199616","3245199871","SE" +"3245199872","3245200127","NO" +"3245200128","3245200383","LV" +"3245200384","3245200639","PL" +"3245200640","3245200895","GR" +"3245200896","3245201151","DE" +"3245201152","3245201407","KW" +"3245201408","3245201663","UA" +"3245201664","3245201919","NO" +"3245201920","3245202175","SA" +"3245202176","3245202687","GB" +"3245202688","3245203455","DE" +"3245203456","3245203711","FR" +"3245203712","3245204223","PL" +"3245204224","3245204479","SI" +"3245204480","3245204735","BE" +"3245204736","3245205247","ES" +"3245205248","3245205503","DE" +"3245205504","3245205759","AT" +"3245205760","3245206015","IT" +"3245206016","3245206271","BE" +"3245206272","3245206527","LT" +"3245206528","3245207551","DE" +"3245207552","3245208063","UA" +"3245208064","3245208575","DE" +"3245208576","3245209087","PL" +"3245209088","3245209599","VG" +"3245209600","3245210111","UA" +"3245210112","3245210623","FR" +"3245210624","3245211135","HU" +"3245211136","3245211647","GB" +"3245211648","3245212159","RU" +"3245212160","3245212671","NG" +"3245212672","3245213183","GB" +"3245213184","3245213695","DE" +"3245213696","3245214207","LV" +"3245214208","3245214719","AT" +"3245214720","3245215231","SE" +"3245215232","3245215743","SI" +"3245215744","3245217791","UA" +"3245217792","3245218815","DE" +"3245218816","3245219839","AT" +"3245219840","3245221887","FI" +"3245221888","3245223935","DE" +"3245223936","3245225471","IL" +"3245225472","3245225727","EU" +"3245225728","3245225983","IL" +"3245225984","3245228031","HU" +"3245228032","3245229055","FI" +"3245229056","3245230079","DE" +"3245230080","3245232127","UA" +"3245232128","3245232383","PL" +"3245232384","3245232639","BE" +"3245232640","3245232895","BG" +"3245232896","3245233151","IT" +"3245233152","3245233407","DK" +"3245233408","3245233663","CH" +"3245233664","3245233919","GR" +"3245233920","3245234175","DK" +"3245234176","3245234431","GB" +"3245234432","3245234687","UA" +"3245234688","3245234943","DE" +"3245234944","3245235199","RU" +"3245235200","3245235455","BE" +"3245235456","3245235711","GB" +"3245235712","3245235967","AT" +"3245235968","3245236223","CH" +"3245236224","3245237247","PL" +"3245237248","3245237759","UA" +"3245237760","3245238271","DE" +"3245238272","3245238783","CD" +"3245238784","3245239295","UA" +"3245239296","3245240319","FI" +"3245240320","3245241343","UA" +"3245241344","3245242367","DE" +"3245242368","3245243391","PL" +"3245243392","3245244415","UA" +"3245244416","3245244671","ES" +"3245244672","3245244927","AT" +"3245244928","3245245183","BE" +"3245245184","3245245439","CH" +"3245245440","3245245695","BG" +"3245245696","3245245951","DE" +"3245245952","3245246207","UA" +"3245246208","3245246463","GB" +"3245246464","3245246719","AT" +"3245246720","3245246975","PL" +"3245246976","3245247231","GB" +"3245247232","3245247487","DE" +"3245247488","3245247999","FR" +"3245248000","3245248255","PL" +"3245248256","3245248511","GB" +"3245248512","3245248767","UA" +"3245248768","3245249023","SI" +"3245249024","3245249279","FR" +"3245249280","3245249535","NL" +"3245249536","3245249791","FR" +"3245249792","3245250047","GB" +"3245250048","3245250303","DE" +"3245250304","3245250559","IT" +"3245250560","3245250815","FR" +"3245250816","3245251071","DE" +"3245251072","3245251327","ES" +"3245251328","3245251583","MT" +"3245251584","3245251839","UA" +"3245251840","3245252095","NL" +"3245252096","3245252351","BE" +"3245252352","3245252607","BG" +"3245252608","3245253631","UA" +"3245253632","3245254143","LV" +"3245254144","3245254655","DK" +"3245254656","3245255167","UA" +"3245255168","3245255679","TR" +"3245255680","3245257215","UA" +"3245257216","3245257727","DE" +"3245257728","3245258239","GB" +"3245258240","3245258751","AT" +"3245258752","3245259263","UA" +"3245259264","3245259775","SK" +"3245259776","3245260287","UA" +"3245260288","3245260799","BE" +"3245260800","3245261823","DE" +"3245261824","3245262847","DK" +"3245262848","3245263871","IT" +"3245263872","3245264895","DE" +"3245264896","3245266943","TR" +"3245266944","3245268991","BG" +"3245268992","3245270015","FI" +"3245270016","3245271039","PL" +"3245271040","3245272063","NL" +"3245272064","3245273087","RU" +"3245273088","3245275135","GB" +"3245275136","3245277183","BE" +"3245277184","3245277695","UA" +"3245277696","3245278207","RU" +"3245278208","3245278719","GB" +"3245278720","3245279743","UA" +"3245279744","3245280255","TJ" +"3245280256","3245280767","BE" +"3245280768","3245281279","FR" +"3245281280","3245281791","RO" +"3245281792","3245282303","ES" +"3245282304","3245282815","IT" +"3245282816","3245283327","PL" +"3245283328","3245283839","GB" +"3245283840","3245284351","PL" +"3245284352","3245284863","GB" +"3245284864","3245285375","PL" +"3245285376","3245285631","NL" +"3245285632","3245285887","GB" +"3245285888","3245286143","DE" +"3245286144","3245286399","GB" +"3245286400","3245287423","PL" +"3245287424","3245287679","DE" +"3245287680","3245287935","PL" +"3245287936","3245288191","PT" +"3245288192","3245288703","DE" +"3245288704","3245288959","FI" +"3245288960","3245289215","IT" +"3245289216","3245289471","AT" +"3245289472","3245290495","UA" +"3245290496","3245291519","LU" +"3245291520","3245292543","DE" +"3245292544","3245293567","UA" +"3245293568","3245294079","FI" +"3245294080","3245294591","ES" +"3245294592","3245295103","RO" +"3245295104","3245296127","IT" +"3245296128","3245296639","GB" +"3245296640","3245297151","TJ" +"3245297152","3245297663","IT" +"3245297664","3245297919","FR" +"3245297920","3245298175","NL" +"3245298176","3245298431","GB" +"3245298432","3245298687","UA" +"3245298688","3245298943","GB" +"3245298944","3245299199","UA" +"3245299200","3245299455","GB" +"3245299456","3245299711","AT" +"3245299712","3245299967","DE" +"3245299968","3245300223","BG" +"3245300224","3245300479","FR" +"3245300480","3245300991","RU" +"3245300992","3245301247","FI" +"3245301248","3245301503","DK" +"3245301504","3245301759","BE" +"3245301760","3245302783","SK" +"3245302784","3245303807","DE" +"3245303808","3245304831","SE" +"3245304832","3245306367","DE" +"3245306368","3245306879","UA" +"3245306880","3245307391","RU" +"3245307392","3245307903","FI" +"3245307904","3245308415","RO" +"3245308416","3245308927","ES" +"3245308928","3245309439","SE" +"3245309440","3245309951","UA" +"3245309952","3245311999","CZ" +"3245312000","3245314047","GB" +"3245314048","3245315071","PL" +"3245315072","3245316095","IT" +"3245316096","3245317119","SE" +"3245317120","3245318143","UA" +"3245318144","3245318399","IT" +"3245318400","3245318655","RO" +"3245318656","3245318911","DK" +"3245318912","3245319167","DE" +"3245319168","3245319423","HR" +"3245319424","3245319679","SE" +"3245319680","3245319935","PL" +"3245319936","3245320191","DE" +"3245320192","3245320447","GB" +"3245320448","3245320959","DE" +"3245320960","3245321215","IE" +"3245321216","3245321471","NL" +"3245321472","3245321727","UA" +"3245321728","3245321983","PL" +"3245321984","3245322239","DE" +"3245322240","3245323263","RU" +"3245323264","3245325311","GB" +"3245325312","3245326335","UA" +"3245326336","3245326847","SI" +"3245326848","3245327359","BG" +"3245327360","3245327871","CH" +"3245327872","3245328383","DE" +"3245328384","3245328895","GB" +"3245328896","3245329407","CH" +"3245329408","3245329919","UA" +"3245329920","3245333503","DE" +"3245333504","3245334527","SI" +"3245334528","3245334783","HU" +"3245334784","3245335039","BE" +"3245335040","3245335551","GB" +"3245335552","3245335807","BE" +"3245335808","3245336063","RO" +"3245336064","3245336575","GB" +"3245336576","3245336831","RO" +"3245336832","3245337087","DE" +"3245337088","3245337343","GB" +"3245337344","3245337599","BE" +"3245337600","3245337855","PL" +"3245337856","3245338367","DE" +"3245338368","3245339647","UA" +"3245339648","3245340671","LV" +"3245340672","3245341695","UA" +"3245341696","3245342719","RU" +"3245342720","3245867007","GB" +"3245867008","3245868543","IE" +"3245868544","3245868575","GB" +"3245868576","3245878303","IE" +"3245878304","3245878335","US" +"3245878336","3245888703","IE" +"3245888704","3245888767","US" +"3245888768","3245892639","IE" +"3245892640","3245892647","US" +"3245892648","3245892719","IE" +"3245892720","3245892727","US" +"3245892728","3245894391","IE" +"3245894392","3245894399","GB" +"3245894400","3245894719","IE" +"3245894720","3245894751","US" +"3245894752","3245895399","IE" +"3245895400","3245895407","US" +"3245895408","3245896311","IE" +"3245896312","3245896319","GB" +"3245896320","3245896991","IE" +"3245896992","3245897007","US" +"3245897008","3245898951","IE" +"3245898952","3245898959","GB" +"3245898960","3245898967","IE" +"3245898968","3245898975","GB" +"3245898976","3245899343","IE" +"3245899344","3245899351","GB" +"3245899352","3245901831","IE" +"3245901832","3245901839","GB" +"3245901840","3245902127","IE" +"3245902128","3245902135","GB" +"3245902136","3245902887","IE" +"3245902888","3245902895","GB" +"3245902896","3245902903","IE" +"3245902904","3245902911","GB" +"3245902912","3245903031","IE" +"3245903032","3245903039","GB" +"3245903040","3245903959","IE" +"3245903960","3245903967","FR" +"3245903968","3245904087","IE" +"3245904088","3245904095","GB" +"3245904096","3245904199","IE" +"3245904200","3245904207","GB" +"3245904208","3245906367","IE" +"3245906368","3245906431","GB" +"3245906432","3245909567","IE" +"3245909568","3245909631","US" +"3245909632","3245910831","IE" +"3245910832","3245910847","GB" +"3245910848","3245914879","IE" +"3245914880","3245915135","LU" +"3245915136","3245917951","IE" +"3245917952","3245918207","LU" +"3245918208","3245919456","IE" +"3245919457","3245919462","IN" +"3245919463","3245921279","IE" +"3245921280","3245921535","BE" +"3245921536","3245922959","IE" +"3245922960","3245922975","US" +"3245922976","3245924647","IE" +"3245924648","3245924655","GB" +"3245924656","3245924671","IE" +"3245924672","3245924679","GB" +"3245924680","3245924687","IE" +"3245924688","3245924695","GB" +"3245924696","3245924751","IE" +"3245924752","3245924767","GB" +"3245924768","3245927583","IE" +"3245927584","3245927647","GB" +"3245927648","3245927959","IE" +"3245927960","3245927967","US" +"3245927968","3245931263","IE" +"3245931264","3245931519","GB" +"3245931520","3245932543","IE" +"3245932544","3245998079","BE" +"3245998080","3246100351","GB" +"3246100352","3246100367","DE" +"3246100368","3246129151","GB" +"3246129152","3246141439","RU" +"3246141440","3246141695","UA" +"3246141696","3246142975","RU" +"3246142976","3246143231","UA" +"3246143232","3246147839","RU" +"3246147840","3246148095","UA" +"3246148096","3246260223","RU" +"3246260224","3246325759","PT" +"3246325760","3246328831","ES" +"3246328832","3246329087","EU" +"3246329088","3246329855","ES" +"3246329856","3246350847","EU" +"3246350848","3246351103","ES" +"3246351104","3246351615","EU" +"3246351616","3246352639","ES" +"3246352640","3246375159","EU" +"3246375160","3246375423","GB" +"3246375424","3246378495","EU" +"3246378496","3246379007","ES" +"3246379008","3246381055","GB" +"3246381056","3246391295","EU" +"3246391296","3246417959","GB" +"3246417960","3246417967","LV" +"3246417968","3246418887","GB" +"3246418888","3246418895","SE" +"3246418896","3246537887","GB" +"3246537888","3246537903","A2" +"3246537904","3246547199","GB" +"3246547200","3246547455","EU" +"3246547456","3246613503","GB" +"3246613504","3246614527","HU" +"3246614528","3246744543","GB" +"3246744544","3246744559","NG" +"3246744560","3246784511","GB" +"3246784512","3246915583","CH" +"3246915584","3247046655","PT" +"3247046656","3247046911","AT" +"3247046912","3247048191","SI" +"3247048192","3247048703","NO" +"3247048704","3247048959","EE" +"3247048960","3247049215","SI" +"3247049216","3247054079","DE" +"3247054080","3247054335","CH" +"3247054336","3247054591","LT" +"3247054592","3247054847","DE" +"3247054848","3247063039","SI" +"3247063040","3247063295","FR" +"3247063552","3247063807","DE" +"3247063808","3247064063","BG" +"3247064064","3247064319","DE" +"3247064320","3247064575","CH" +"3247064576","3247064831","RU" +"3247064832","3247065087","SE" +"3247065088","3247065343","US" +"3247065344","3247065599","CH" +"3247065600","3247065855","SE" +"3247065856","3247066111","GB" +"3247066112","3247066367","DK" +"3247066368","3247066623","LV" +"3247066624","3247066879","CZ" +"3247066880","3247067135","RU" +"3247067136","3247067647","DE" +"3247067648","3247067903","RU" +"3247067904","3247068159","CH" +"3247068160","3247068415","UA" +"3247068416","3247068671","RO" +"3247068672","3247068927","GB" +"3247068928","3247069183","UA" +"3247069184","3247069439","DE" +"3247069440","3247069695","RU" +"3247069696","3247069951","FR" +"3247069952","3247070207","DE" +"3247070208","3247070463","IL" +"3247070464","3247070719","UA" +"3247070720","3247070975","AT" +"3247070976","3247071231","GB" +"3247071232","3247071487","DE" +"3247071488","3247072255","RO" +"3247072256","3247072511","IE" +"3247072512","3247072767","BE" +"3247072768","3247073023","SE" +"3247073024","3247073279","RO" +"3247073280","3247073535","DE" +"3247073536","3247073791","AT" +"3247073792","3247074047","CZ" +"3247074048","3247074303","GB" +"3247074304","3247074559","DE" +"3247074560","3247074815","SE" +"3247074816","3247075071","PL" +"3247075072","3247075327","IE" +"3247075328","3247076095","DE" +"3247076096","3247076351","DK" +"3247076352","3247076607","RU" +"3247076608","3247076863","DE" +"3247076864","3247077119","PL" +"3247077120","3247077375","DE" +"3247077376","3247077631","GB" +"3247077632","3247077887","NL" +"3247077888","3247078143","UA" +"3247078144","3247078399","AT" +"3247078400","3247078655","DK" +"3247078656","3247078911","HU" +"3247078912","3247079167","FI" +"3247079168","3247079423","HU" +"3247079424","3247080447","RU" +"3247080448","3247081471","UA" +"3247081472","3247083519","PL" +"3247083520","3247084543","UA" +"3247084544","3247085567","RU" +"3247085568","3247086591","CZ" +"3247086592","3247087615","DE" +"3247087616","3247088639","IT" +"3247088640","3247089663","DE" +"3247089664","3247090687","RO" +"3247090688","3247091711","LV" +"3247091712","3247092735","RU" +"3247092736","3247093759","DE" +"3247093760","3247094783","UA" +"3247094784","3247095807","LV" +"3247095808","3247097855","RO" +"3247097856","3247098879","FI" +"3247098880","3247099903","NL" +"3247099904","3247100927","PL" +"3247100928","3247101951","CH" +"3247101952","3247102975","SE" +"3247102976","3247106047","NL" +"3247106048","3247107071","RU" +"3247107072","3247108095","UA" +"3247108096","3247109119","PL" +"3247109120","3247110143","UA" +"3247110144","3247111167","NL" +"3247111168","3247112191","DE" +"3247112192","3247177727","FR" +"3247177728","3247243263","TR" +"3247243264","3247244287","DE" +"3247244288","3247244351","NL" +"3247244352","3247244359","DE" +"3247244360","3247244367","NL" +"3247244368","3247244375","DE" +"3247244376","3247244927","NL" +"3247244928","3247244935","DE" +"3247244936","3247245959","NL" +"3247245960","3247245967","DE" +"3247245968","3247246015","NL" +"3247246016","3247246023","DE" +"3247246024","3247246039","NL" +"3247246040","3247246047","DE" +"3247246048","3247246967","NL" +"3247246968","3247246975","DE" +"3247246976","3247247111","NL" +"3247247112","3247247119","DE" +"3247247120","3247247175","NL" +"3247247176","3247247183","DE" +"3247247184","3247247543","NL" +"3247247544","3247247551","DE" +"3247247552","3247247671","NL" +"3247247672","3247247679","DE" +"3247247680","3247247879","NL" +"3247247880","3247247887","DE" +"3247247888","3247247999","NL" +"3247248000","3247248015","DE" +"3247248016","3247248095","NL" +"3247248096","3247248103","DE" +"3247248104","3247248159","NL" +"3247248160","3247248167","DE" +"3247248168","3247248175","NL" +"3247248176","3247248183","DE" +"3247248184","3247248359","NL" +"3247248360","3247248367","DE" +"3247248368","3247248383","NL" +"3247248384","3247250431","DE" +"3247250432","3247252959","NL" +"3247252960","3247252967","DE" +"3247252968","3247252999","NL" +"3247253000","3247253007","DE" +"3247253008","3247253111","NL" +"3247253112","3247253119","DE" +"3247253120","3247253503","NL" +"3247253504","3247255295","DE" +"3247255296","3247255655","NL" +"3247255656","3247255663","DE" +"3247255664","3247255711","NL" +"3247255712","3247255719","DE" +"3247255720","3247256623","NL" +"3247256624","3247256631","DE" +"3247256632","3247256831","NL" +"3247256832","3247260671","DE" +"3247260672","3247260879","NL" +"3247260880","3247260887","DE" +"3247260888","3247260983","NL" +"3247260984","3247260991","DE" +"3247260992","3247261215","NL" +"3247261216","3247261223","DE" +"3247261224","3247261935","NL" +"3247261936","3247261943","DE" +"3247261944","3247261951","NL" +"3247261952","3247261959","DE" +"3247261960","3247262151","NL" +"3247262152","3247262159","DE" +"3247262160","3247262439","NL" +"3247262440","3247262447","DE" +"3247262448","3247262663","NL" +"3247262664","3247262671","DE" +"3247262672","3247263335","NL" +"3247263336","3247263343","DE" +"3247263344","3247263599","NL" +"3247263600","3247263607","DE" +"3247263608","3247263623","NL" +"3247263624","3247263631","DE" +"3247263632","3247263911","NL" +"3247263912","3247263919","DE" +"3247263920","3247263927","NL" +"3247263928","3247263935","DE" +"3247263936","3247265095","NL" +"3247265096","3247265103","DE" +"3247265104","3247265239","NL" +"3247265240","3247265247","DE" +"3247265248","3247265663","NL" +"3247265664","3247265671","DE" +"3247265672","3247266287","NL" +"3247266288","3247266295","DE" +"3247266296","3247266359","NL" +"3247266360","3247266367","DE" +"3247266368","3247266559","NL" +"3247266560","3247271679","DE" +"3247271680","3247272375","NL" +"3247272376","3247272383","DE" +"3247272384","3247272671","NL" +"3247272672","3247272679","DE" +"3247272680","3247273063","NL" +"3247273064","3247273071","DE" +"3247273072","3247273751","NL" +"3247273752","3247273759","DE" +"3247273760","3247274239","NL" +"3247274240","3247274495","DE" +"3247274496","3247274519","NL" +"3247274520","3247274535","DE" +"3247274536","3247274567","NL" +"3247274568","3247274575","DE" +"3247274576","3247274863","NL" +"3247274864","3247274871","DE" +"3247274872","3247275263","NL" +"3247275264","3247276031","DE" +"3247276032","3247276615","NL" +"3247276616","3247276631","DE" +"3247276632","3247276871","NL" +"3247276872","3247276879","DE" +"3247276880","3247276927","NL" +"3247276928","3247276935","DE" +"3247276936","3247276951","NL" +"3247276952","3247276959","DE" +"3247276960","3247278103","NL" +"3247278104","3247278111","DE" +"3247278112","3247278847","NL" +"3247278848","3247280127","DE" +"3247280128","3247280255","NL" +"3247280256","3247280263","DE" +"3247280264","3247280279","NL" +"3247280280","3247280287","DE" +"3247280288","3247280807","NL" +"3247280808","3247280815","DE" +"3247280816","3247281447","NL" +"3247281448","3247281455","DE" +"3247281456","3247281527","NL" +"3247281528","3247281535","DE" +"3247281536","3247281567","NL" +"3247281568","3247281575","DE" +"3247281576","3247281663","NL" +"3247281664","3247281671","DE" +"3247281672","3247281855","NL" +"3247281856","3247281863","DE" +"3247281864","3247282311","NL" +"3247282312","3247282319","DE" +"3247282320","3247282999","NL" +"3247283000","3247283007","DE" +"3247283008","3247283263","NL" +"3247283264","3247283271","DE" +"3247283272","3247283311","NL" +"3247283312","3247283319","DE" +"3247283320","3247283759","NL" +"3247283760","3247283767","DE" +"3247283768","3247283927","NL" +"3247283928","3247283935","DE" +"3247283936","3247283991","NL" +"3247283992","3247283999","DE" +"3247284000","3247284015","NL" +"3247284016","3247284023","DE" +"3247284024","3247284263","NL" +"3247284264","3247284271","DE" +"3247284272","3247284319","NL" +"3247284320","3247284327","DE" +"3247284328","3247285471","NL" +"3247285472","3247285479","DE" +"3247285480","3247286087","NL" +"3247286088","3247286095","DE" +"3247286096","3247286455","NL" +"3247286456","3247286463","DE" +"3247286464","3247286983","NL" +"3247286984","3247286991","DE" +"3247286992","3247287895","NL" +"3247287896","3247287903","DE" +"3247287904","3247288319","NL" +"3247288320","3247302655","DE" +"3247302656","3247302791","NL" +"3247302792","3247302799","DE" +"3247302800","3247303343","NL" +"3247303344","3247303351","DE" +"3247303352","3247303615","NL" +"3247303616","3247303623","DE" +"3247303624","3247304007","NL" +"3247304008","3247304015","DE" +"3247304016","3247304351","NL" +"3247304352","3247304359","DE" +"3247304360","3247305583","NL" +"3247305584","3247305591","DE" +"3247305592","3247305623","NL" +"3247305624","3247305631","DE" +"3247305632","3247305959","NL" +"3247305960","3247305975","DE" +"3247305976","3247305999","NL" +"3247306000","3247306007","DE" +"3247306008","3247306199","NL" +"3247306200","3247306207","DE" +"3247306208","3247306295","NL" +"3247306296","3247306303","DE" +"3247306304","3247306311","NL" +"3247306312","3247306327","DE" +"3247306328","3247306423","NL" +"3247306424","3247306431","DE" +"3247306432","3247306447","NL" +"3247306448","3247306455","DE" +"3247306456","3247306583","NL" +"3247306584","3247306599","DE" +"3247306600","3247306671","NL" +"3247306672","3247306679","DE" +"3247306680","3247306783","NL" +"3247306784","3247306791","DE" +"3247306792","3247306799","NL" +"3247306800","3247306807","DE" +"3247306808","3247306895","NL" +"3247306896","3247306903","DE" +"3247306904","3247306919","NL" +"3247306920","3247306943","DE" +"3247306944","3247306959","NL" +"3247306960","3247306967","DE" +"3247306968","3247306999","NL" +"3247307000","3247307007","DE" +"3247307008","3247307071","NL" +"3247307072","3247307079","DE" +"3247307080","3247307303","NL" +"3247307304","3247307311","DE" +"3247307312","3247307375","NL" +"3247307376","3247307383","DE" +"3247307384","3247307415","NL" +"3247307416","3247307423","DE" +"3247307424","3247307543","NL" +"3247307544","3247307551","DE" +"3247307552","3247307575","NL" +"3247307576","3247307583","DE" +"3247307584","3247307591","NL" +"3247307592","3247307599","DE" +"3247307600","3247307871","NL" +"3247307872","3247307879","DE" +"3247307880","3247307959","NL" +"3247307960","3247307967","DE" +"3247307968","3247307991","NL" +"3247307992","3247307999","DE" +"3247308000","3247308111","NL" +"3247308112","3247308119","DE" +"3247308120","3247308415","NL" +"3247308416","3247308423","DE" +"3247308424","3247308479","NL" +"3247308480","3247308487","DE" +"3247308488","3247308727","NL" +"3247308728","3247308735","DE" +"3247308736","3247308799","NL" +"3247308800","3247309055","BG" +"3247309056","3247313663","FI" +"3247313664","3247313919","AM" +"3247313920","3247316479","FI" +"3247316480","3247316735","NO" +"3247316736","3247316991","RU" +"3247316992","3247322367","FI" +"3247322368","3247322623","DE" +"3247322624","3247323135","FI" +"3247323136","3247323647","RU" +"3247323648","3247324415","FI" +"3247324416","3247324671","AT" +"3247324672","3247324927","CH" +"3247324928","3247333631","FI" +"3247333632","3247333887","DE" +"3247333888","3247334399","FI" +"3247334400","3247334655","NO" +"3247334656","3247335167","FI" +"3247335168","3247335423","DK" +"3247335424","3247336447","FI" +"3247336448","3247337215","NO" +"3247337216","3247337471","CH" +"3247337472","3247337983","PL" +"3247337984","3247338239","UA" +"3247338240","3247338495","PL" +"3247338496","3247338751","SI" +"3247338752","3247339519","GB" +"3247339520","3247340543","FI" +"3247340544","3247340799","UA" +"3247340800","3247341055","CH" +"3247341056","3247341311","FI" +"3247341312","3247341567","DE" +"3247341568","3247345919","FI" +"3247345920","3247346175","HU" +"3247346176","3247346943","FI" +"3247346944","3247347199","SI" +"3247347200","3247347455","FI" +"3247347456","3247347711","IL" +"3247347712","3247347967","FI" +"3247347968","3247348223","HU" +"3247348224","3247348991","FI" +"3247348992","3247349247","DE" +"3247349248","3247349503","FR" +"3247349504","3247349759","UA" +"3247349760","3247353855","SE" +"3247353856","3247362047","FI" +"3247362048","3247362303","RO" +"3247362304","3247362559","HU" +"3247362560","3247362815","PL" +"3247362816","3247363071","DK" +"3247363072","3247363327","GB" +"3247363328","3247363583","UA" +"3247363584","3247363839","HU" +"3247363840","3247364095","NL" +"3247364096","3247364351","GB" +"3247364352","3247364607","ES" +"3247364608","3247365119","UA" +"3247365120","3247365375","GB" +"3247365376","3247365631","UA" +"3247365632","3247365887","SA" +"3247365888","3247366143","DE" +"3247366144","3247371007","FI" +"3247371008","3247371263","PL" +"3247371264","3247371519","SE" +"3247371520","3247371775","GB" +"3247371776","3247372031","RU" +"3247372032","3247372287","FI" +"3247372288","3247372543","RO" +"3247372544","3247372799","RU" +"3247372800","3247373055","RO" +"3247373056","3247374335","FI" +"3247374336","3247374591","RU" +"3247374592","3247382527","FI" +"3247382528","3247382783","EU" +"3247382784","3247394047","FI" +"3247394048","3247394303","PL" +"3247394304","3247397887","FI" +"3247397888","3247398143","RU" +"3247398144","3247399423","FI" +"3247399424","3247399679","RU" +"3247399680","3247404799","FI" +"3247404800","3247405055","RU" +"3247405056","3247405311","RO" +"3247405312","3247405567","PL" +"3247405568","3247405823","DE" +"3247405824","3247432191","FI" +"3247432192","3247432447","TR" +"3247432448","3247438079","FI" +"3247438080","3247438335","IT" +"3247438336","3247439871","FI" +"3247439872","3247702015","ES" +"3247702016","3247702271","RO" +"3247702272","3247703551","ES" +"3247703552","3247704063","FR" +"3247704064","3247704831","ES" +"3247704832","3247705087","GB" +"3247705088","3247705855","ES" +"3247705856","3247706111","RU" +"3247706112","3247711743","ES" +"3247711744","3247712255","IT" +"3247712256","3247713279","ES" +"3247713280","3247713535","RU" +"3247713536","3247713791","BE" +"3247713792","3247714047","SK" +"3247714048","3247714303","RU" +"3247714304","3247716351","CH" +"3247716352","3247717887","ES" +"3247717888","3247718399","CH" +"3247718400","3247742975","ES" +"3247742976","3247751167","DE" +"3247751168","3247769599","ES" +"3247769600","3247771647","DE" +"3247771648","3247775743","ES" +"3247775744","3247779647","DE" +"3247779648","3247779839","IE" +"3247779840","3247783935","DE" +"3247783936","3247792127","GB" +"3247792128","3247800319","FR" +"3247800320","3247816703","DK" +"3247816704","3247817471","BE" +"3247817472","3247817727","CH" +"3247817728","3247820799","BE" +"3247820800","3247822335","CH" +"3247822336","3247823103","DE" +"3247823104","3247823871","AT" +"3247823872","3247825151","BE" +"3247825152","3247825919","CH" +"3247825920","3247826943","BE" +"3247826944","3247828991","CH" +"3247828992","3247833087","BE" +"3247833088","3247833599","RU" +"3247833600","3247834111","PL" +"3247834112","3247834623","DE" +"3247834624","3247835135","UA" +"3247835136","3247836159","GB" +"3247836160","3247837183","CZ" +"3247837184","3247838207","ES" +"3247838720","3247839231","NO" +"3247839232","3247839743","CZ" +"3247839744","3247840255","GB" +"3247840256","3247841279","UA" +"3247841280","3247841791","RU" +"3247841792","3247842047","GB" +"3247842048","3247842303","CZ" +"3247842304","3247842815","PL" +"3247842816","3247843327","CZ" +"3247843328","3247843583","LT" +"3247843584","3247845376","PL" +"3247845377","3247845631","CH" +"3247845632","3247845887","UA" +"3247845888","3247846399","PL" +"3247846400","3247847423","RU" +"3247847424","3247848447","UA" +"3247848448","3247849471","IT" +"3247849472","3247849727","DE" +"3247849728","3247849983","RU" +"3247849984","3247850239","GB" +"3247850240","3247850495","BG" +"3247850496","3247850751","RU" +"3247850752","3247851007","PL" +"3247851008","3247851519","RU" +"3247851520","3247852543","SK" +"3247852544","3247853567","PL" +"3247853568","3247854591","RU" +"3247854592","3247855615","DK" +"3247855616","3247856127","UA" +"3247856128","3247856639","ES" +"3247856640","3247857663","RU" +"3247857664","3247858175","UA" +"3247858176","3247858687","EU" +"3247858688","3247859711","RU" +"3247859712","3247859967","SE" +"3247859968","3247861759","RU" +"3247861760","3247862015","IT" +"3247862016","3247862271","UA" +"3247862272","3247864063","RU" +"3247864064","3247864319","NO" +"3247864320","3247864575","UA" +"3247864576","3247864831","PL" +"3247864832","3247865343","RU" +"3247865344","3247865599","MT" +"3247865600","3247865855","IL" +"3247865856","3247871999","GB" +"3247872000","3247875327","NL" +"3247875328","3247875583","PL" +"3247875584","3247876095","DE" +"3247876096","3247876351","PL" +"3247876352","3247876607","FR" +"3247876608","3247876863","ES" +"3247876864","3247877119","DE" +"3247877120","3247877631","GR" +"3247877632","3247879167","AT" +"3247879168","3247882239","GB" +"3247882240","3247898623","SE" +"3247898624","3247899647","RU" +"3247899648","3247900671","DE" +"3247900672","3247901695","PL" +"3247901696","3247902719","UA" +"3247902720","3247903743","GB" +"3247903744","3247904767","BG" +"3247904768","3247905791","RU" +"3247905792","3247906815","RO" +"3247906816","3247907839","DE" +"3247907840","3247908863","PL" +"3247908864","3247909887","BY" +"3247909888","3247910911","DE" +"3247910912","3247912959","PL" +"3247912960","3247913983","UA" +"3247913984","3247915007","AT" +"3247915008","3247917055","PL" +"3247917056","3247918079","NL" +"3247918080","3247919103","PL" +"3247919104","3247920127","BG" +"3247920128","3247921151","FR" +"3247921152","3247922175","UA" +"3247922176","3247923199","SE" +"3247923200","3247925247","PL" +"3247925248","3247926271","UA" +"3247926272","3247927295","RU" +"3247927296","3247928319","PL" +"3247928320","3247929343","HU" +"3247929344","3247931391","GB" +"3247931392","3247960063","FR" +"3247960064","3247962111","UA" +"3247962112","3247963135","DE" +"3247963136","3247964159","UA" +"3247964160","3248095231","ES" +"3248095232","3248095823","AT" +"3248095824","3248095831","HU" +"3248095832","3248160767","AT" +"3248160768","3248221215","DE" +"3248221216","3248221223","PL" +"3248221224","3248226303","DE" +"3248226304","3248235007","NO" +"3248235008","3248235263","PK" +"3248235264","3248357375","NO" +"3248357376","3248464895","DE" +"3248464896","3248465407","US" +"3248465408","3248481791","DE" +"3248481792","3248482047","US" +"3248482048","3248482175","DE" +"3248482176","3248482303","US" +"3248482304","3248488447","DE" +"3248488448","3248488703","FR" +"3248488704","3248491519","NO" +"3248491520","3248492031","RU" +"3248492032","3248496895","NO" +"3248496896","3248497151","US" +"3248497152","3248498431","NO" +"3248498432","3248498687","DE" +"3248498688","3248513279","NO" +"3248513280","3248513535","UA" +"3248513536","3248514047","AT" +"3248514048","3248521983","NO" +"3248521984","3248522239","RU" +"3248522240","3248525311","NO" +"3248525312","3248525567","DE" +"3248525568","3248525823","DK" +"3248525824","3248528895","NO" +"3248528896","3248529151","RU" +"3248529152","3248529407","BG" +"3248529408","3248540671","NO" +"3248540672","3248541183","RU" +"3248541184","3248545791","NO" +"3248545792","3248546815","UA" +"3248546816","3248547839","RU" +"3248547840","3248553727","NO" +"3248553728","3248553983","RU" +"3248553984","3248554239","RO" +"3248554240","3248557055","NO" +"3248557056","3248558079","UA" +"3248558080","3248575487","NO" +"3248575488","3248576511","CZ" +"3248576512","3248603135","NO" +"3248603136","3248603391","BG" +"3248603392","3248603647","RU" +"3248603648","3248619263","NO" +"3248619264","3248619519","UA" +"3248619520","3248638463","DK" +"3248638464","3248638719","GB" +"3248638720","3248719871","DK" +"3248719872","3248720127","EU" +"3248720128","3248748543","DK" +"3248748544","3248748799","EU" +"3248748800","3248750591","DK" +"3248750592","3248750847","PT" +"3248750848","3248752383","PL" +"3248752384","3248752639","NL" +"3248752640","3248752895","DE" +"3248752896","3248753151","TR" +"3248753152","3248753663","GB" +"3248753664","3248753919","FR" +"3248753920","3248754431","GB" +"3248754432","3248754687","AT" +"3248754688","3248758783","PL" +"3248758784","3248774143","SE" +"3248774144","3248775167","UA" +"3248775168","3248783615","GB" +"3248783616","3248783871","PL" +"3248783872","3248784127","UA" +"3248784128","3248785407","DE" +"3248785408","3248785663","RO" +"3248785664","3248786943","SI" +"3248786944","3248787199","PL" +"3248787200","3248787455","GB" +"3248787456","3248787711","NL" +"3248787712","3248787967","CH" +"3248787968","3248788223","RU" +"3248788224","3248788479","ES" +"3248788480","3248788735","FR" +"3248788736","3248788991","UA" +"3248788992","3248789503","FR" +"3248789504","3248789759","RO" +"3248789760","3248790015","FR" +"3248790016","3248790271","DE" +"3248790272","3248790527","DK" +"3248790528","3248790783","FR" +"3248790784","3248791039","PL" +"3248791040","3248791295","BE" +"3248791296","3248791551","DE" +"3248791552","3248792575","GB" +"3248792576","3248796607","EU" +"3248796608","3248796863","GB" +"3248796864","3248798975","EU" +"3248798976","3248799231","GB" +"3248799232","3248799735","EU" +"3248799736","3248799743","GB" +"3248799744","3248800255","NL" +"3248800256","3248800767","RU" +"3248800768","3248801279","FR" +"3248801280","3248801791","RO" +"3248801792","3248802303","RU" +"3248802304","3248802815","FR" +"3248802816","3248803327","RU" +"3248803328","3248804351","GB" +"3248804352","3248804863","EU" +"3248804864","3248805375","DE" +"3248805376","3248805887","RU" +"3248805888","3248806399","NL" +"3248806400","3248806911","CZ" +"3248806912","3248807423","US" +"3248807424","3248807935","BG" +"3248807936","3248808447","AT" +"3248808448","3248808959","GR" +"3248808960","3248810079","FR" +"3248810080","3248810111","UA" +"3248810112","3248810143","RU" +"3248810176","3248810207","FR" +"3248810208","3248810239","GB" +"3248810240","3248810495","CH" +"3248810496","3248812543","AT" +"3248812544","3248813055","GB" +"3248813056","3248813567","CH" +"3248813568","3248814079","DE" +"3248814080","3248815103","DK" +"3248815104","3248815615","GB" +"3248815616","3248816127","PL" +"3248816128","3248881663","CZ" +"3248881664","3249012735","FI" +"3249012736","3249012991","DE" +"3249012992","3249014271","LU" +"3249014272","3249014783","DE" +"3249014784","3249025535","LU" +"3249025536","3249025791","FR" +"3249025792","3249026559","LU" +"3249026560","3249026815","PL" +"3249026816","3249045503","LU" +"3249045504","3249078271","DE" +"3249078272","3249078783","RU" +"3249078784","3249079295","CH" +"3249079296","3249079807","RU" +"3249079808","3249080831","RO" +"3249080832","3249081343","DE" +"3249081344","3249081855","LV" +"3249081856","3249082367","GB" +"3249082368","3249082879","HU" +"3249082880","3249083391","PL" +"3249083392","3249083903","RO" +"3249083904","3249085951","RU" +"3249085952","3249086463","GI" +"3249086464","3249088511","RU" +"3249088512","3249089023","NL" +"3249089024","3249089535","NO" +"3249089536","3249090047","RU" +"3249090048","3249090559","FR" +"3249090560","3249091071","SI" +"3249091072","3249091327","TR" +"3249091328","3249091583","NL" +"3249091584","3249092095","RU" +"3249092096","3249092607","DE" +"3249092608","3249093119","IT" +"3249093120","3249093631","GB" +"3249093632","3249094655","RU" +"3249094656","3249095679","FR" +"3249095680","3249096191","NL" +"3249096192","3249096703","IL" +"3249096704","3249097215","DE" +"3249097216","3249097727","DK" +"3249097728","3249098239","DE" +"3249098240","3249098751","PL" +"3249098752","3249099263","UA" +"3249099264","3249099775","CH" +"3249099776","3249100287","FI" +"3249100288","3249100799","UA" +"3249100800","3249101311","IL" +"3249101312","3249101823","GB" +"3249101824","3249102335","RU" +"3249102336","3249102847","DE" +"3249102848","3249103359","RU" +"3249103360","3249103871","DE" +"3249103872","3249104383","FI" +"3249104384","3249104895","RU" +"3249104896","3249105407","IL" +"3249105408","3249105919","RU" +"3249105920","3249106431","NL" +"3249106432","3249106943","RU" +"3249106944","3249108479","PL" +"3249108480","3249108991","RU" +"3249108992","3249109503","GB" +"3249109504","3249110015","RU" +"3249110016","3249111039","UA" +"3249111040","3249111551","RU" +"3249111552","3249112063","KW" +"3249112064","3249113087","UA" +"3249113088","3249113599","RO" +"3249113600","3249114111","NL" +"3249114112","3249114623","GB" +"3249114624","3249115647","RO" +"3249115648","3249116159","UA" +"3249116160","3249116671","PL" +"3249116672","3249117183","IT" +"3249117184","3249117695","CH" +"3249117696","3249118207","DK" +"3249118208","3249118719","RO" +"3249118720","3249119231","LU" +"3249119232","3249119743","RU" +"3249119744","3249120255","IT" +"3249120256","3249120767","SE" +"3249120768","3249121279","LV" +"3249121280","3249121791","DE" +"3249121792","3249122303","RO" +"3249122304","3249124351","RU" +"3249124352","3249124863","DE" +"3249124864","3249125375","CZ" +"3249125376","3249125887","DE" +"3249125888","3249126399","CH" +"3249126400","3249126911","UA" +"3249126912","3249127423","SA" +"3249127424","3249127935","GB" +"3249127936","3249128447","LV" +"3249128448","3249128959","DE" +"3249128960","3249129471","BG" +"3249129472","3249130495","RU" +"3249130496","3249131007","DE" +"3249131008","3249131519","GB" +"3249131520","3249132031","DK" +"3249132032","3249132543","RU" +"3249132544","3249133055","DE" +"3249133056","3249133567","UA" +"3249133568","3249134079","GB" +"3249134080","3249134591","UA" +"3249134592","3249135615","RU" +"3249135616","3249136127","GB" +"3249136128","3249137151","RU" +"3249137152","3249137663","FR" +"3249137664","3249138175","PL" +"3249138176","3249138687","RU" +"3249138688","3249139199","GB" +"3249139200","3249139711","RU" +"3249139712","3249140223","UA" +"3249140224","3249140735","IT" +"3249140736","3249141247","UA" +"3249141248","3249141759","IL" +"3249141760","3249142783","RU" +"3249142784","3249143295","UA" +"3249143296","3249143807","GB" +"3249143808","3249274879","AT" +"3249274880","3249277759","NL" +"3249277760","3249277775","BG" +"3249277776","3249279743","NL" +"3249279744","3249279999","EU" +"3249280000","3249290143","NL" +"3249290144","3249290159","BG" +"3249290160","3249313279","NL" +"3249313280","3249313535","EU" +"3249313536","3249330111","NL" +"3249330112","3249330143","BG" +"3249330144","3249350095","NL" +"3249350096","3249350111","BG" +"3249350112","3249369855","NL" +"3249369856","3249370111","EU" +"3249370112","3249405951","NL" +"3249405952","3249406975","DE" +"3249406976","3249407231","IT" +"3249407232","3249521279","DE" +"3249521280","3249521343","UA" +"3249521344","3249537023","DE" +"3249537024","3249537279","PT" +"3249537280","3249537791","NL" +"3249537792","3249538047","GB" +"3249538048","3249551359","NL" +"3249551360","3249552639","GB" +"3249552640","3249574143","NL" +"3249574144","3249574399","RU" +"3249574400","3249574655","SE" +"3249574656","3249574911","UA" +"3249574912","3249590527","NL" +"3249590528","3249590783","FR" +"3249590784","3249600255","NL" +"3249600256","3249600511","AT" +"3249600512","3249601535","UA" +"3249601536","3249601791","RU" +"3249601792","3249668095","NL" +"3249668096","3249676287","IE" +"3249676288","3249676543","GB" +"3249676544","3249676799","IE" +"3249676800","3249677055","UA" +"3249677056","3249677311","SE" +"3249677312","3249679103","IE" +"3249679104","3249679359","CH" +"3249679360","3249683455","IE" +"3249683456","3249684479","SE" +"3249684480","3249698047","IE" +"3249698048","3249698303","PL" +"3249698304","3249698559","RU" +"3249698560","3249698815","HU" +"3249698816","3249699839","GB" +"3249699840","3249700863","UA" +"3249700864","3249701631","SE" +"3249701632","3249701887","RU" +"3249701888","3249702143","PL" +"3249702144","3249702399","FI" +"3249702400","3249702655","FR" +"3249702656","3249702911","RU" +"3249702912","3249703679","FR" +"3249703680","3249703935","GB" +"3249703936","3249704191","FR" +"3249704192","3249704447","RO" +"3249704448","3249704703","DE" +"3249704704","3249704959","PL" +"3249704960","3249705983","UA" +"3249705984","3249706495","AT" +"3249706496","3249707007","LV" +"3249707008","3249707519","BG" +"3249707520","3249708031","FR" +"3249708032","3249708543","CH" +"3249708544","3249709055","RU" +"3249709056","3249709311","AT" +"3249709312","3249709567","PL" +"3249709568","3249709823","UA" +"3249709824","3249710079","DE" +"3249710080","3249710335","PL" +"3249710336","3249710591","RO" +"3249710592","3249710847","BG" +"3249710848","3249711103","PL" +"3249711104","3249711359","HU" +"3249711360","3249711871","DE" +"3249711872","3249712127","AT" +"3249712128","3249712383","UA" +"3249712384","3249712639","GB" +"3249712640","3249712895","BE" +"3249712896","3249713151","DK" +"3249713152","3249715199","LV" +"3249715200","3249715455","AT" +"3249715456","3249715711","DE" +"3249715712","3249715967","NL" +"3249715968","3249716223","UA" +"3249716224","3249716479","SI" +"3249716480","3249716735","NL" +"3249716736","3249717247","UA" +"3249717248","3249718271","LV" +"3249718272","3249719295","DE" +"3249719296","3249720319","IR" +"3249720320","3249721343","IT" +"3249721344","3249721599","AT" +"3249721600","3249721855","BE" +"3249721856","3249722623","FR" +"3249722624","3249723135","PL" +"3249723136","3249723391","RU" +"3249723392","3249723647","IT" +"3249723648","3249723903","GB" +"3249723904","3249724159","TR" +"3249724160","3249724415","LU" +"3249724416","3249724671","IL" +"3249724672","3249724927","SE" +"3249724928","3249725183","BG" +"3249725184","3249725439","GB" +"3249725440","3249725951","RO" +"3249725952","3249726463","DE" +"3249726464","3249726975","UA" +"3249726976","3249727487","IT" +"3249727488","3249727999","LV" +"3249728000","3249728511","IT" +"3249728512","3249729023","UA" +"3249729024","3249729535","GB" +"3249729536","3249730559","PL" +"3249730560","3249731583","IT" +"3249731584","3249732607","UA" +"3249732608","3249733631","IT" +"3249733632","3249799167","CZ" +"3249799168","3249802239","SE" +"3249802240","3249802751","DE" +"3249802752","3249828607","SE" +"3249828608","3249828863","AT" +"3249828864","3249829375","DE" +"3249829376","3249829631","AT" +"3249829632","3249829887","SE" +"3249829888","3249830143","GB" +"3249830144","3249830399","SE" +"3249830400","3249830655","IT" +"3249830656","3249844479","SE" +"3249844480","3249844735","AT" +"3249844736","3249844991","AU" +"3249844992","3249845759","SE" +"3249845760","3249846271","DE" +"3249846272","3249850623","SE" +"3249850624","3249850879","GB" +"3249850880","3249859583","SE" +"3249859584","3249860095","DE" +"3249860096","3249861375","SE" +"3249861376","3249861631","BE" +"3249861632","3249862143","DE" +"3249862144","3249862399","BE" +"3249862400","3249862655","SE" +"3249862656","3249863167","DE" +"3249863168","3249863423","BE" +"3249863424","3249863679","SE" +"3249863680","3249863935","ES" +"3249863936","3249865471","SE" +"3249865472","3249866751","GB" +"3249866752","3249868543","SE" +"3249868544","3249868799","DE" +"3249868800","3249871103","SE" +"3249871104","3249871359","NO" +"3249871360","3249871615","SE" +"3249871616","3249871871","NO" +"3249871872","3249872383","SE" +"3249872384","3249872639","GB" +"3249872640","3249910783","SE" +"3249910784","3249912319","GB" +"3249912320","3249926143","SE" +"3249926144","3249926399","AU" +"3249926400","3249926655","SE" +"3249926656","3249926911","AU" +"3249926912","3249929471","SE" +"3249929472","3249929983","CA" +"3249929984","3249931007","SE" +"3249931008","3249931263","GB" +"3249931264","3249932031","SE" +"3249932032","3249932287","GB" +"3249932288","3249934335","US" +"3249934336","3249960447","SE" +"3249960448","3249960959","DE" +"3249960960","3249961215","CA" +"3249961216","3249961471","SE" +"3249961472","3249961727","NL" +"3249961728","3249967615","SE" +"3249967616","3249967871","GB" +"3249967872","3249968127","SE" +"3249968128","3249969151","FR" +"3249969152","3249969663","SE" +"3249969664","3249970175","DE" +"3249970176","3249971199","SE" +"3249971200","3249971455","IT" +"3249971456","3249971711","SE" +"3249971712","3249972735","DE" +"3249972736","3249974527","SE" +"3249974528","3249974783","ES" +"3249974784","3249976063","SE" +"3249976064","3249976319","FR" +"3249976320","3249976831","SE" +"3249976832","3249977087","GB" +"3249977088","3249991679","SE" +"3249991680","3249991935","US" +"3249991936","3249993215","SE" +"3249993216","3249993471","NL" +"3249993472","3249993727","SE" +"3249993728","3249994239","DE" +"3249994240","3249994495","CH" +"3249994496","3249995263","SE" +"3249995264","3249995519","GB" +"3249995520","3249997055","SE" +"3249997056","3249997311","US" +"3249997312","3250000127","SE" +"3250000128","3250000383","GB" +"3250000384","3250007295","SE" +"3250007296","3250007551","GB" +"3250007552","3250010367","SE" +"3250010368","3250010879","CH" +"3250010880","3250030335","SE" +"3250030336","3250030591","DK" +"3250030592","3250031103","DE" +"3250031104","3250031359","DK" +"3250031360","3250031615","US" +"3250031616","3250032639","SE" +"3250032640","3250032895","AP" +"3250032896","3250035455","SE" +"3250035456","3250035711","US" +"3250035712","3250038271","SE" +"3250038272","3250039295","ES" +"3250039296","3250042623","SE" +"3250042624","3250043135","FR" +"3250043136","3250061311","SE" +"3250061312","3250183199","FI" +"3250183200","3250183215","SE" +"3250183216","3250187583","FI" +"3250187584","3250187647","SE" +"3250187648","3250192383","FI" +"3250192384","3250192639","AT" +"3250192640","3250192895","RU" +"3250192896","3250193151","IL" +"3250193152","3250193407","DE" +"3250193408","3250193663","PL" +"3250193664","3250194175","AT" +"3250194176","3250194431","DE" +"3250194432","3250194687","FR" +"3250194688","3250194943","UA" +"3250194944","3250195455","RO" +"3250195456","3250195711","DE" +"3250195712","3250196223","GB" +"3250196224","3250196479","UA" +"3250196480","3250200575","AT" +"3250200576","3250200831","HU" +"3250200832","3250201087","RO" +"3250201088","3250201343","RU" +"3250201344","3250201599","DK" +"3250201600","3250202111","NL" +"3250202112","3250202367","BG" +"3250202368","3250202623","PL" +"3250202624","3250233855","AT" +"3250233856","3250234111","GB" +"3250234112","3250234367","GR" +"3250234368","3250245631","AT" +"3250245632","3250245887","TR" +"3250245888","3250246143","AT" +"3250246144","3250246399","GB" +"3250246400","3250256895","AT" +"3250256896","3250257151","CH" +"3250257152","3250257663","AT" +"3250257664","3250257919","PL" +"3250257920","3250258175","EU" +"3250258176","3250323199","AT" +"3250323200","3250323455","RU" +"3250323456","3250323711","PL" +"3250323712","3250324479","SA" +"3250324480","3250324991","GB" +"3250324992","3250325247","AE" +"3250325248","3250325503","MA" +"3250325504","3250326527","OM" +"3250326528","3250327039","BH" +"3250327040","3250331647","SA" +"3250331648","3250335743","MT" +"3250335744","3250339839","KW" +"3250339840","3250348031","JO" +"3250348032","3250356223","BH" +"3250356224","3250357247","LB" +"3250357248","3250357823","GB" +"3250357824","3250357855","FR" +"3250357856","3250357871","EE" +"3250357872","3250357879","CH" +"3250357880","3250357887","SE" +"3250357888","3250357895","DK" +"3250357904","3250357919","FR" +"3250357920","3250357927","PL" +"3250357952","3250358015","GB" +"3250358016","3250358527","LB" +"3250358528","3250358783","HU" +"3250358784","3250359295","LB" +"3250359296","3250359807","HU" +"3250359808","3250362879","KW" +"3250362880","3250363391","DE" +"3250363392","3250363903","SE" +"3250363904","3250364415","DE" +"3250364416","3250372607","KW" +"3250372608","3250373375","HU" +"3250373376","3250373631","GB" +"3250373632","3250374143","DE" +"3250374144","3250374655","PL" +"3250374656","3250374911","SA" +"3250374912","3250375679","SE" +"3250375680","3250376703","GB" +"3250376704","3250377983","AT" +"3250377984","3250378239","AP" +"3250378240","3250380799","AT" +"3250380800","3250386943","CH" +"3250386944","3250387199","SE" +"3250387200","3250387455","FR" +"3250387456","3250387711","DE" +"3250387712","3250387967","FR" +"3250387968","3250388223","JO" +"3250388224","3250388479","PL" +"3250388480","3250388735","UA" +"3250388736","3250388991","FR" +"3250388992","3250405887","NG" +"3250405888","3250406399","IE" +"3250406400","3250406911","RU" +"3250406912","3250407423","RO" +"3250407424","3250407935","PL" +"3250407936","3250408447","GB" +"3250408448","3250408959","PL" +"3250408960","3250409471","DE" +"3250409472","3250409983","GB" +"3250409984","3250410495","DE" +"3250410496","3250411007","AT" +"3250411008","3250411519","LT" +"3250411520","3250412031","RU" +"3250412032","3250412543","FR" +"3250412544","3250413055","DK" +"3250413056","3250413567","DE" +"3250413568","3250414079","UA" +"3250414080","3250414591","RO" +"3250414592","3250415103","DE" +"3250415104","3250415615","NL" +"3250415616","3250416127","FR" +"3250416128","3250417663","DE" +"3250417664","3250418175","IT" +"3250418176","3250418687","DE" +"3250418688","3250419199","PL" +"3250419200","3250419711","NO" +"3250419712","3250420223","RU" +"3250420224","3250420735","IR" +"3250420736","3250421247","FR" +"3250421248","3250421759","UA" +"3250421760","3250422015","NG" +"3250422016","3250423295","GB" +"3250423296","3250423551","NL" +"3250423552","3250423807","BE" +"3250423808","3250424063","AT" +"3250424064","3250424319","DE" +"3250424320","3250424831","NL" +"3250424832","3250425343","GB" +"3250425344","3250425599","TR" +"3250425600","3250425855","FR" +"3250425856","3250426111","LT" +"3250426112","3250426367","NO" +"3250426368","3250426623","AT" +"3250426624","3250426879","BE" +"3250426880","3250427135","JO" +"3250427136","3250427391","NL" +"3250427392","3250429951","DE" +"3250429952","3250434335","SI" +"3250434336","3250434351","AT" +"3250434352","3250438143","SI" +"3250438144","3250443519","CH" +"3250443520","3250443527","DE" +"3250443528","3250446335","CH" +"3250446336","3250451583","DE" +"3250451584","3250451599","AT" +"3250451600","3250454527","DE" +"3250454528","3250585599","BE" +"3250585600","3250585855","NL" +"3250585856","3250588671","PT" +"3250588672","3250588799","IE" +"3250588800","3250588927","AT" +"3250588928","3250589183","GB" +"3250589184","3250589439","DE" +"3250589440","3250589471","IE" +"3250589472","3250589503","NL" +"3250589504","3250589567","HR" +"3250589568","3250589631","RU" +"3250589632","3250589695","NO" +"3250589696","3250593791","CH" +"3250593792","3250594815","GB" +"3250594816","3250595327","UA" +"3250595328","3250595839","GR" +"3250595840","3250596351","DE" +"3250596352","3250597887","RO" +"3250597888","3250598399","BG" +"3250598400","3250598911","GB" +"3250598912","3250599423","RO" +"3250599424","3250599935","SE" +"3250599936","3250600447","BG" +"3250600448","3250601471","DE" +"3250601472","3250601983","PL" +"3250601984","3250610175","GB" +"3250610176","3250618367","TR" +"3250618368","3250626559","RU" +"3250626560","3250633983","PL" +"3250633984","3250634239","US" +"3250634240","3250634751","PL" +"3250634752","3250642943","GB" +"3250642944","3250651135","CH" +"3250651136","3250659327","IT" +"3250659328","3250667519","EU" +"3250667520","3250675711","PL" +"3250675712","3250683903","GB" +"3250683904","3250692095","CH" +"3250692096","3250692351","NO" +"3250692352","3250692607","NL" +"3250692608","3250693375","BG" +"3250693376","3250693631","NL" +"3250693632","3250694143","DE" +"3250694144","3250694399","PL" +"3250694400","3250694655","GB" +"3250694656","3250694911","SK" +"3250694912","3250695167","NL" +"3250695168","3250695679","IT" +"3250695680","3250697471","DE" +"3250697472","3250697727","PL" +"3250697728","3250697983","BG" +"3250697984","3250698239","IT" +"3250698240","3250698751","GR" +"3250698752","3250699263","RU" +"3250699264","3250699775","GB" +"3250699776","3250700287","DE" +"3250700288","3250708479","UA" +"3250708480","3250716671","KZ" +"3250716672","3250716927","RO" +"3250716928","3250718207","MA" +"3250718208","3250720767","DE" +"3250720768","3250722047","IT" +"3250722048","3250722303","RO" +"3250722304","3250724863","GB" +"3250724864","3250733055","MA" +"3250733056","3250741247","DZ" +"3250741248","3250742783","RU" +"3250742784","3250743551","AT" +"3250743552","3250743807","CY" +"3250743808","3250746367","UA" +"3250746368","3250747391","NL" +"3250747392","3250747903","SI" +"3250747904","3250748159","SA" +"3250748160","3250748415","PL" +"3250748416","3250749439","UA" +"3250749440","3250749695","GH" +"3250749696","3250749951","EU" +"3250749952","3250750463","RO" +"3250750464","3250751487","FR" +"3250751488","3250751999","DE" +"3250752000","3250752511","CH" +"3250752512","3250753023","BG" +"3250753024","3250754047","DE" +"3250754048","3250754303","AT" +"3250754304","3250754559","GB" +"3250754560","3250755071","DE" +"3250755072","3250755583","GB" +"3250755584","3250755839","FR" +"3250755840","3250756351","RU" +"3250756352","3250756607","PT" +"3250756608","3250756863","BG" +"3250756864","3250757119","DE" +"3250757120","3250757375","BE" +"3250757376","3250757631","HU" +"3250757632","3250765823","GH" +"3250765824","3250782207","SE" +"3250782208","3250847743","GB" +"3250847744","3250978815","DE" +"3250978816","3251044351","HR" +"3251044352","3251109887","FI" +"3251109888","3251110143","SI" +"3251110144","3251110655","BG" +"3251110656","3251110911","IT" +"3251110912","3251111167","FR" +"3251111168","3251111423","CH" +"3251111424","3251111679","AT" +"3251111680","3251111935","ES" +"3251111936","3251112191","BG" +"3251112192","3251112447","SK" +"3251112448","3251112703","RU" +"3251112704","3251112959","SE" +"3251112960","3251113215","BG" +"3251113216","3251113471","VG" +"3251113472","3251114495","BG" +"3251114496","3251114751","RU" +"3251114752","3251115007","RO" +"3251115008","3251115263","PL" +"3251115264","3251115519","RU" +"3251115520","3251115775","UA" +"3251115776","3251116031","BE" +"3251116032","3251116287","BG" +"3251116288","3251116543","GB" +"3251116544","3251116799","DK" +"3251116800","3251117055","GB" +"3251117056","3251117311","BG" +"3251117312","3251117567","FR" +"3251117568","3251117823","IL" +"3251117824","3251118079","SE" +"3251118080","3251118591","UA" +"3251118592","3251119103","RU" +"3251119104","3251120127","UA" +"3251120128","3251120639","KW" +"3251120640","3251121151","FR" +"3251121152","3251121663","DK" +"3251121664","3251122175","PL" +"3251122176","3251122687","CH" +"3251122688","3251123199","PL" +"3251123200","3251123711","FR" +"3251123712","3251124223","RU" +"3251124224","3251124735","NL" +"3251124736","3251125247","FR" +"3251125248","3251125759","BE" +"3251125760","3251126271","RU" +"3251126272","3251126783","UA" +"3251126784","3251127295","PL" +"3251127296","3251127807","UA" +"3251127808","3251128319","NL" +"3251128320","3251128831","DE" +"3251128832","3251129343","SE" +"3251129344","3251129855","UA" +"3251129856","3251130367","CH" +"3251130368","3251130879","GB" +"3251130880","3251131391","PL" +"3251131392","3251131903","UA" +"3251131904","3251132415","SE" +"3251132416","3251132927","RU" +"3251132928","3251133439","DK" +"3251133440","3251133951","NO" +"3251133952","3251134463","RU" +"3251134464","3251134975","DE" +"3251134976","3251135999","GB" +"3251136000","3251136511","RO" +"3251136512","3251137023","DK" +"3251137024","3251137535","DE" +"3251137536","3251138047","PL" +"3251138048","3251138559","FR" +"3251138560","3251139071","AT" +"3251139072","3251139583","GB" +"3251139584","3251140095","FR" +"3251140096","3251141631","PL" +"3251141632","3251142143","LT" +"3251142144","3251142655","RO" +"3251142656","3251142911","DE" +"3251142912","3251143167","RU" +"3251143168","3251143423","AM" +"3251143424","3251143679","LV" +"3251143680","3251143935","NL" +"3251143936","3251144191","PL" +"3251144192","3251144447","TR" +"3251144448","3251144703","BE" +"3251144704","3251144959","HU" +"3251144960","3251145471","DE" +"3251145472","3251145727","FR" +"3251145728","3251145983","NL" +"3251145984","3251146239","RO" +"3251146240","3251146495","AT" +"3251146496","3251146751","SK" +"3251146752","3251147007","CH" +"3251147008","3251147263","GB" +"3251147264","3251147519","PL" +"3251147520","3251147775","NL" +"3251147776","3251148031","SE" +"3251148032","3251148287","RU" +"3251148288","3251148543","A1" +"3251148544","3251148799","UA" +"3251148800","3251149055","HU" +"3251149056","3251149311","NL" +"3251149312","3251149567","DE" +"3251149568","3251149823","IE" +"3251149824","3251150079","DE" +"3251150080","3251150335","CH" +"3251150336","3251150591","GB" +"3251150592","3251150847","CH" +"3251150848","3251151103","DE" +"3251151104","3251151359","UA" +"3251151360","3251151615","DE" +"3251151616","3251151871","PL" +"3251151872","3251152127","NL" +"3251152128","3251152639","RO" +"3251152640","3251152895","UA" +"3251152896","3251153151","RU" +"3251153152","3251153407","UA" +"3251153408","3251153663","TR" +"3251153664","3251153919","FR" +"3251153920","3251154175","DE" +"3251154176","3251154431","UA" +"3251154432","3251154687","NL" +"3251154688","3251154943","UA" +"3251154944","3251155455","GB" +"3251155456","3251155711","NL" +"3251155712","3251155967","UA" +"3251155968","3251156223","TR" +"3251156224","3251156735","FR" +"3251156736","3251156991","UA" +"3251156992","3251157247","FR" +"3251157248","3251157503","BE" +"3251157504","3251158015","PL" +"3251158016","3251158271","TR" +"3251158272","3251158527","RU" +"3251158528","3251158783","UA" +"3251158784","3251159295","GB" +"3251159296","3251159551","DE" +"3251159552","3251159807","ES" +"3251159808","3251160063","DE" +"3251160064","3251160319","JO" +"3251160320","3251160575","PL" +"3251160576","3251160831","NL" +"3251160832","3251161087","RU" +"3251161088","3251161343","RO" +"3251161344","3251161599","LV" +"3251161600","3251161855","SE" +"3251161856","3251162111","HR" +"3251162112","3251162367","DK" +"3251162368","3251162623","UA" +"3251162624","3251162879","DE" +"3251162880","3251163135","SI" +"3251163136","3251163391","SE" +"3251163392","3251163647","UA" +"3251163648","3251163903","DE" +"3251163904","3251164159","RU" +"3251164160","3251164415","UA" +"3251164416","3251164671","IT" +"3251164672","3251164927","NL" +"3251164928","3251165439","PL" +"3251165440","3251165695","CH" +"3251165696","3251165951","DE" +"3251165952","3251166207","UA" +"3251166208","3251166463","CH" +"3251166464","3251166719","RU" +"3251166720","3251166975","FR" +"3251166976","3251167231","CH" +"3251167232","3251167487","LV" +"3251167488","3251167743","DK" +"3251167744","3251168255","PL" +"3251168256","3251168511","AT" +"3251168512","3251168767","UA" +"3251168768","3251169023","DE" +"3251169024","3251169279","FR" +"3251169280","3251170047","PL" +"3251170048","3251170303","NO" +"3251170304","3251170559","CH" +"3251170816","3251171327","RU" +"3251171328","3251171839","DE" +"3251171840","3251172095","RO" +"3251172096","3251172351","ES" +"3251172352","3251172607","RO" +"3251172608","3251172863","GB" +"3251172864","3251173119","UA" +"3251173120","3251173375","SA" +"3251173376","3251173631","UA" +"3251173632","3251173887","DE" +"3251173888","3251174143","DK" +"3251174144","3251174399","RU" +"3251174400","3251174655","RO" +"3251174656","3251174911","DE" +"3251174912","3251175167","RO" +"3251175168","3251175423","UA" +"3251175424","3251177471","IT" +"3251177472","3251179519","DE" +"3251179520","3251180031","SE" +"3251180032","3251180543","PL" +"3251180544","3251181055","RO" +"3251181056","3251181567","GR" +"3251181568","3251182079","DE" +"3251182080","3251182591","FR" +"3251182592","3251183103","IT" +"3251183104","3251183615","RU" +"3251183616","3251183871","LT" +"3251183872","3251184127","CH" +"3251184128","3251184383","PL" +"3251184384","3251184639","DK" +"3251184640","3251184895","PL" +"3251184896","3251185407","DE" +"3251185408","3251185663","DK" +"3251185664","3251185919","IT" +"3251185920","3251186175","AT" +"3251186176","3251186431","GB" +"3251186432","3251186687","SE" +"3251186688","3251186943","RO" +"3251186944","3251187199","SI" +"3251187200","3251187455","GR" +"3251187456","3251187711","GB" +"3251187712","3251188735","NL" +"3251188736","3251189759","DE" +"3251189760","3251190783","IT" +"3251190784","3251191807","UA" +"3251191808","3251192319","GB" +"3251192320","3251192831","LV" +"3251192832","3251193343","BE" +"3251193344","3251193855","GB" +"3251193856","3251194367","DE" +"3251194368","3251194879","NO" +"3251194880","3251195391","FR" +"3251195392","3251195903","CZ" +"3251195904","3251196927","UA" +"3251196928","3251197951","CH" +"3251197952","3251198975","RU" +"3251198976","3251199999","DE" +"3251200000","3251200511","SE" +"3251200512","3251201279","UA" +"3251201280","3251201535","SI" +"3251201536","3251201791","AT" +"3251201792","3251202047","FR" +"3251202048","3251202303","NL" +"3251202304","3251202559","UA" +"3251202560","3251202815","AT" +"3251202816","3251203327","ES" +"3251203328","3251203583","SI" +"3251203584","3251203839","CZ" +"3251203840","3251204095","RU" +"3251204096","3251204607","DE" +"3251204608","3251205119","BG" +"3251205120","3251205631","UA" +"3251205632","3251206143","RU" +"3251206144","3251206655","GB" +"3251206656","3251207167","CH" +"3251207168","3251207679","GB" +"3251207680","3251208191","RU" +"3251208192","3251209215","CY" +"3251209216","3251210239","GB" +"3251210240","3251211263","PL" +"3251211264","3251212287","UA" +"3251212288","3251212415","PL" +"3251212416","3251212671","FI" +"3251212672","3251212799","SE" +"3251212800","3251212927","FR" +"3251212928","3251213055","RO" +"3251213056","3251213119","SE" +"3251213120","3251213151","NL" +"3251213152","3251213183","FR" +"3251213184","3251213215","UA" +"3251213248","3251213311","GB" +"3251213376","3251213439","DE" +"3251213440","3251213503","GB" +"3251213504","3251213567","NL" +"3251213568","3251213631","FR" +"3251213632","3251213695","PL" +"3251213696","3251213759","LV" +"3251213824","3251213887","GB" +"3251214016","3251214079","UA" +"3251214080","3251214143","FR" +"3251214144","3251214207","AF" +"3251214208","3251214271","RU" +"3251214272","3251214335","DE" +"3251214336","3251214463","RU" +"3251214464","3251214591","UA" +"3251214592","3251214975","GB" +"3251214976","3251215103","RO" +"3251215104","3251215231","SI" +"3251215232","3251215359","IL" +"3251215360","3251215487","UA" +"3251215488","3251215615","SE" +"3251215744","3251215871","GB" +"3251215872","3251216127","RO" +"3251216128","3251216255","FI" +"3251216256","3251216383","RU" +"3251216384","3251216639","GB" +"3251216640","3251216895","RO" +"3251216896","3251217151","BE" +"3251217152","3251217407","GB" +"3251217408","3251217663","PL" +"3251217664","3251217919","SI" +"3251217920","3251218175","GR" +"3251218176","3251218431","PL" +"3251218432","3251219199","DE" +"3251219200","3251219455","IT" +"3251219456","3251219711","BG" +"3251219712","3251220223","AT" +"3251220224","3251220479","UA" +"3251220480","3251222527","DE" +"3251222528","3251224575","GB" +"3251224576","3251225087","UA" +"3251225088","3251225599","FR" +"3251225600","3251226111","GB" +"3251226112","3251226623","UA" +"3251226624","3251227135","GB" +"3251227136","3251227647","DE" +"3251227648","3251228159","GB" +"3251228160","3251229695","UA" +"3251229696","3251230719","SI" +"3251230720","3251231743","UA" +"3251231744","3251232767","NO" +"3251232768","3251233791","UA" +"3251233792","3251234815","RU" +"3251234816","3251235839","RO" +"3251235840","3251236863","DE" +"3251236864","3251237887","BG" +"3251237888","3251238911","DK" +"3251238912","3251239935","FR" +"3251239936","3251240959","US" +"3251240960","3251241215","DE" +"3251241216","3251243007","GB" +"3251243008","3251245055","BE" +"3251245056","3251245311","DE" +"3251245312","3251245567","BE" +"3251245568","3251245823","TR" +"3251245824","3251246079","UA" +"3251246080","3251246335","DE" +"3251246336","3251246591","UA" +"3251246592","3251246847","RO" +"3251246848","3251247103","NL" +"3251247104","3251248895","DE" +"3251248896","3251249151","GB" +"3251249152","3251251199","NL" +"3251251200","3251252735","EU" +"3251252736","3251256831","CH" +"3251256832","3251257343","GB" +"3251257344","3251259903","BE" +"3251259904","3251261439","FR" +"3251261440","3251264255","CH" +"3251264256","3251264266","FR" +"3251264267","3251264267","EU" +"3251264268","3251265535","FR" +"3251265536","3251267839","NL" +"3251267840","3251268351","GB" +"3251268352","3251268607","NL" +"3251268608","3251268863","BG" +"3251268864","3251269119","NL" +"3251269120","3251269215","DK" +"3251269216","3251269270","NL" +"3251269271","3251269271","DK" +"3251269272","3251269887","NL" +"3251269888","3251270143","GB" +"3251270144","3251270399","PL" +"3251270400","3251270655","NO" +"3251270656","3251270911","DE" +"3251270912","3251271167","PL" +"3251271168","3251271423","UA" +"3251271424","3251271679","DE" +"3251271680","3251271935","TR" +"3251271936","3251272191","FR" +"3251272192","3251272447","NL" +"3251272448","3251272703","AT" +"3251272704","3251272959","DE" +"3251272960","3251273471","FR" +"3251273472","3251290111","DE" +"3251290112","3251302399","GB" +"3251302400","3251306239","LI" +"3251306240","3251306495","EU" +"3251306496","3251306751","AT" +"3251306752","3251307007","MK" +"3251307008","3251307519","RS" +"3251307520","3251307775","MK" +"3251307776","3251308031","GB" +"3251308032","3251308543","RS" +"3251308544","3251310591","US" +"3251310592","3251311103","SI" +"3251311104","3251311615","RS" +"3251311616","3251312127","GB" +"3251312128","3251312383","RS" +"3251312384","3251312639","CH" +"3251312640","3251314175","RS" +"3251314176","3251314687","CH" +"3251314688","3251315711","FR" +"3251315712","3251317759","RU" +"3251317760","3251318783","PL" +"3251318784","3251319807","UA" +"3251319808","3251320831","HU" +"3251320832","3251321855","PL" +"3251321856","3251322879","RU" +"3251322880","3251329727","GB" +"3251329728","3251329791","FR" +"3251329792","3251331071","GB" +"3251331072","3251331583","FR" +"3251331584","3251332095","PL" +"3251332096","3251333119","RU" +"3251333120","3251333631","CH" +"3251333632","3251334143","PT" +"3251334144","3251334655","FR" +"3251334656","3251335167","UA" +"3251335168","3251335679","RU" +"3251335680","3251336191","RO" +"3251336192","3251336703","GB" +"3251336704","3251337215","ES" +"3251337216","3251337727","CH" +"3251337728","3251338239","DE" +"3251338240","3251339263","RU" +"3251339264","3251347455","IE" +"3251347456","3251355647","DE" +"3251355648","3251356159","GB" +"3251356160","3251356671","AT" +"3251356672","3251357183","EE" +"3251357184","3251357695","BG" +"3251357696","3251358207","ES" +"3251358208","3251358719","RU" +"3251358720","3251359231","RO" +"3251359232","3251360255","PL" +"3251360256","3251360767","GB" +"3251360768","3251361279","FR" +"3251361280","3251361791","RO" +"3251361792","3251362303","AT" +"3251362304","3251362815","UA" +"3251362816","3251363327","NL" +"3251363328","3251363839","PL" +"3251363840","3251364095","MK" +"3251364096","3251364607","NL" +"3251364608","3251364863","RO" +"3251364864","3251366911","IT" +"3251366912","3251367423","UA" +"3251367424","3251367935","DE" +"3251367936","3251372031","GB" +"3251372032","3251604447","IT" +"3251604448","3251604455","CH" +"3251604456","3251634175","IT" +"3251634176","3251661311","FI" +"3251661312","3251661567","NO" +"3251661568","3251672575","FI" +"3251672576","3251672831","NL" +"3251672832","3251674879","FI" +"3251674880","3251675135","BE" +"3251675136","3251705343","FI" +"3251705344","3251705599","DK" +"3251705600","3251707391","FI" +"3251707392","3251707647","SE" +"3251707648","3251710207","FI" +"3251710208","3251710215","NL" +"3251710216","3251710223","FI" +"3251710224","3251710239","NL" +"3251710240","3251734271","FI" +"3251734272","3251734527","CH" +"3251734528","3251734783","NL" +"3251734784","3251765247","FI" +"3251765248","3251765503","NL" +"3251765504","3251774207","FI" +"3251774208","3251774463","DE" +"3251774464","3251783423","FI" +"3251783424","3251783679","GB" +"3251783680","3251795455","FI" +"3251795456","3251795711","GB" +"3251795712","3251802879","FI" +"3251802880","3251803135","BE" +"3251803136","3251806207","FI" +"3251806208","3251815167","BE" +"3251815168","3251815679","LU" +"3251815680","3251818495","BE" +"3251818496","3251850495","FI" +"3251850496","3251850751","FR" +"3251850752","3251851007","CH" +"3251851008","3251896319","FI" +"3251896320","3251927767","NO" +"3251927768","3251927775","SE" +"3251927776","3251927991","NO" +"3251927992","3251927999","NL" +"3251928000","3252015687","NO" +"3252015688","3252015695","SE" +"3252015696","3252168191","NO" +"3252168192","3252174847","SE" +"3252174848","3252177151","NO" +"3252177152","3252177407","SE" +"3252177408","3252178431","NO" +"3252178432","3252178943","SE" +"3252178944","3252179199","NO" +"3252179200","3252189183","SE" +"3252189184","3252189695","NO" +"3252189696","3252190975","SE" +"3252190976","3252191231","NO" +"3252191232","3252197119","SE" +"3252197120","3252197375","NO" +"3252197376","3252205567","SE" +"3252205568","3252205823","NO" +"3252205824","3252211967","SE" +"3252211968","3252212223","NO" +"3252212224","3252213759","SE" +"3252213760","3252214527","NO" +"3252214528","3252218879","SE" +"3252218880","3252219135","NO" +"3252219136","3252220927","SE" +"3252220928","3252221183","NO" +"3252221184","3252222463","SE" +"3252222464","3252223231","NO" +"3252223232","3252223743","SE" +"3252223744","3252223999","NO" +"3252224000","3252232191","NL" +"3252232192","3252233215","SE" +"3252233216","3252248575","NO" +"3252248576","3252256767","SE" +"3252256768","3252273151","NO" +"3252273152","3252276223","SE" +"3252276224","3252277759","NO" +"3252277760","3252279295","SE" +"3252279296","3252279807","NO" +"3252279808","3252286463","SE" +"3252286464","3252286975","NO" +"3252286976","3252289535","SE" +"3252289536","3252289791","BG" +"3252289792","3252291327","GR" +"3252291328","3252291583","SK" +"3252291584","3252293631","FR" +"3252293632","3252297983","DE" +"3252297984","3252313599","GR" +"3252313600","3252313855","SI" +"3252313856","3252314111","DE" +"3252314112","3252314623","GR" +"3252314624","3252314879","HU" +"3252314880","3252315135","GB" +"3252315136","3252316415","CH" +"3252316416","3252316671","FR" +"3252316672","3252318463","GR" +"3252318464","3252318719","TR" +"3252318720","3252318975","MQ" +"3252318976","3252319231","PL" +"3252319232","3252319743","AT" +"3252319744","3252319999","UA" +"3252320000","3252320255","GR" +"3252320256","3252320511","CZ" +"3252320512","3252321791","GR" +"3252321792","3252322303","PL" +"3252322304","3252323327","NO" +"3252323328","3252324351","PL" +"3252324352","3252326399","RU" +"3252326400","3252327423","UA" +"3252327424","3252329471","PL" +"3252329472","3252330495","UA" +"3252330496","3252334591","GB" +"3252334592","3252335615","PL" +"3252335616","3252336639","RU" +"3252336640","3252337663","UA" +"3252337664","3252338687","RU" +"3252338688","3252340735","BE" +"3252340736","3252340991","TR" +"3252340992","3252341247","GR" +"3252341248","3252341503","DE" +"3252341504","3252342015","GR" +"3252342016","3252342079","GB" +"3252342080","3252342143","IR" +"3252342208","3252342239","GB" +"3252342240","3252342271","CH" +"3252342272","3252342527","SE" +"3252342528","3252342543","NO" +"3252342544","3252342591","DE" +"3252342592","3252342607","IE" +"3252342656","3252342783","IL" +"3252342784","3252346367","DE" +"3252346368","3252346623","GB" +"3252346624","3252355071","GR" +"3252355072","3252355327","GB" +"3252355328","3252358911","LT" +"3252358912","3252359167","DE" +"3252359168","3252362239","DK" +"3252362240","3252362495","PL" +"3252362496","3252362751","IT" +"3252362752","3252363263","DK" +"3252363264","3252379647","LT" +"3252379648","3252379903","ES" +"3252379904","3252380159","GB" +"3252380160","3252380415","BE" +"3252380416","3252380671","UA" +"3252380672","3252380927","SI" +"3252380928","3252381183","RU" +"3252381184","3252381439","IT" +"3252381440","3252381695","ES" +"3252381696","3252381951","RU" +"3252381952","3252382207","DE" +"3252382208","3252382463","SI" +"3252382464","3252382719","PL" +"3252382720","3252382975","GB" +"3252382976","3252383231","IT" +"3252383232","3252383743","GB" +"3252383744","3252383999","SE" +"3252384000","3252384511","PL" +"3252384512","3252384767","GB" +"3252384768","3252385023","NL" +"3252385024","3252385279","RO" +"3252385280","3252385535","GB" +"3252385536","3252385791","RO" +"3252385792","3252386047","GB" +"3252386048","3252386303","SI" +"3252386304","3252386559","GB" +"3252386560","3252386815","BE" +"3252386816","3252387071","UA" +"3252387072","3252387327","RU" +"3252387328","3252387583","PL" +"3252387584","3252387839","RU" +"3252387840","3252404223","LT" +"3252404224","3252406783","NO" +"3252406784","3252407295","LT" +"3252407296","3252407711","NO" +"3252407712","3252407743","NG" +"3252407744","3252407759","NO" +"3252407760","3252407775","CD" +"3252407776","3252408319","NO" +"3252408320","3252408327","MW" +"3252408328","3252408335","LT" +"3252408336","3252408343","GN" +"3252408344","3252408351","LT" +"3252408352","3252408367","GN" +"3252408368","3252408375","LT" +"3252408376","3252408383","GN" +"3252408384","3252408391","BI" +"3252408392","3252408415","LT" +"3252408416","3252408479","NO" +"3252408480","3252408511","LT" +"3252408512","3252408527","AF" +"3252408528","3252408575","LT" +"3252408576","3252408607","GQ" +"3252408608","3252408639","LT" +"3252408640","3252408671","CF" +"3252408672","3252408703","SO" +"3252408704","3252408735","NG" +"3252408736","3252408751","SO" +"3252408752","3252408767","NG" +"3252408768","3252408799","LT" +"3252408800","3252408831","SO" +"3252408832","3252408839","NG" +"3252408840","3252408847","KE" +"3252408848","3252408855","LR" +"3252408856","3252408863","CM" +"3252408864","3252408871","LR" +"3252408872","3252408879","CI" +"3252408880","3252409023","LT" +"3252409024","3252409039","TZ" +"3252409040","3252409047","MR" +"3252409048","3252409151","LT" +"3252409152","3252409167","KE" +"3252409168","3252409175","UG" +"3252409176","3252409183","LT" +"3252409184","3252409191","UG" +"3252409192","3252409199","LT" +"3252409200","3252409215","TZ" +"3252409216","3252409223","BW" +"3252409224","3252409231","LT" +"3252409232","3252409247","UG" +"3252409248","3252409263","CD" +"3252409264","3252409279","LT" +"3252409280","3252409295","SO" +"3252409296","3252409303","LT" +"3252409304","3252409343","SO" +"3252409344","3252409375","TD" +"3252409376","3252409407","LT" +"3252409408","3252409471","BI" +"3252409472","3252409503","MR" +"3252409504","3252409511","GH" +"3252409512","3252409519","BF" +"3252409520","3252409535","CD" +"3252409536","3252409599","LT" +"3252409600","3252409615","MA" +"3252409616","3252409631","LT" +"3252409632","3252409647","AO" +"3252409648","3252409727","LT" +"3252409728","3252409735","LR" +"3252409736","3252409751","NG" +"3252409752","3252409759","BJ" +"3252409760","3252409775","BI" +"3252409776","3252409791","LT" +"3252409792","3252409823","BI" +"3252409824","3252409855","LT" +"3252409856","3252409919","SO" +"3252409920","3252410367","LT" +"3252410368","3252410383","NG" +"3252410384","3252410391","BW" +"3252410392","3252410399","LT" +"3252410400","3252410431","BJ" +"3252410432","3252410463","BI" +"3252410464","3252410495","LT" +"3252410496","3252410623","BI" +"3252410624","3252410751","ZW" +"3252410752","3252410783","SL" +"3252410784","3252411327","LT" +"3252411328","3252411367","CD" +"3252411368","3252411375","LT" +"3252411376","3252411391","CD" +"3252411392","3252411647","LT" +"3252411648","3252411679","BI" +"3252411680","3252411711","LT" +"3252411712","3252411743","NG" +"3252411744","3252411775","LT" +"3252411776","3252411783","GH" +"3252411784","3252411807","LT" +"3252411808","3252411823","NG" +"3252411824","3252411839","SO" +"3252411840","3252411863","MR" +"3252411864","3252411879","LT" +"3252411880","3252411887","CD" +"3252411888","3252411895","LT" +"3252411896","3252411903","CD" +"3252411904","3252411967","GN" +"3252411968","3252412159","LT" +"3252412160","3252412415","GN" +"3252412416","3252414463","LT" +"3252414464","3252414471","GH" +"3252414472","3252414479","LT" +"3252414480","3252414487","TZ" +"3252414488","3252414495","LT" +"3252414496","3252414511","ML" +"3252414512","3252414527","MR" +"3252414528","3252414591","LT" +"3252414592","3252414599","GH" +"3252414600","3252414607","LT" +"3252414608","3252414623","ER" +"3252414624","3252414639","TZ" +"3252414640","3252414647","GH" +"3252414648","3252414655","NE" +"3252414656","3252414975","LT" +"3252414976","3252415143","IQ" +"3252415144","3252415151","LT" +"3252415152","3252415159","IQ" +"3252415160","3252415167","BE" +"3252415168","3252415231","IQ" +"3252415232","3252415487","LT" +"3252415488","3252415743","US" +"3252415744","3252415967","LT" +"3252415968","3252415999","CM" +"3252416000","3252416895","LT" +"3252416896","3252416927","GN" +"3252416928","3252416959","LT" +"3252416960","3252417023","GN" +"3252417024","3252417279","LT" +"3252417280","3252417287","IQ" +"3252417288","3252417439","AF" +"3252417440","3252417447","LT" +"3252417448","3252417463","AF" +"3252417464","3252417471","LT" +"3252417472","3252417519","AF" +"3252417520","3252417935","LT" +"3252417936","3252417951","ZM" +"3252417952","3252418239","LT" +"3252418240","3252418303","JO" +"3252418304","3252418559","LT" +"3252418560","3252418623","JO" +"3252418624","3252418687","LT" +"3252418688","3252418719","JO" +"3252418720","3252418815","LT" +"3252418816","3252418847","KE" +"3252418848","3252419071","LT" +"3252419072","3252419087","ZM" +"3252419088","3252419103","LT" +"3252419104","3252419119","SL" +"3252419120","3252419127","GH" +"3252419128","3252419135","LT" +"3252419136","3252419167","SL" +"3252419168","3252419199","CD" +"3252419200","3252419215","LT" +"3252419216","3252419247","GN" +"3252419248","3252419311","LT" +"3252419312","3252419327","ZM" +"3252419328","3252419359","LT" +"3252419360","3252419423","GH" +"3252419424","3252419839","LT" +"3252419840","3252419879","IQ" +"3252419880","3252419919","LT" +"3252419920","3252419927","IQ" +"3252419928","3252419935","LT" +"3252419936","3252419943","IQ" +"3252419944","3252420031","LT" +"3252420032","3252420055","IQ" +"3252420056","3252420063","LT" +"3252420064","3252420071","IQ" +"3252420072","3252420095","LT" +"3252420096","3252420111","IQ" +"3252420112","3252420119","GB" +"3252420120","3252420143","IQ" +"3252420144","3252420191","LT" +"3252420192","3252420223","IQ" +"3252420224","3252420351","LT" +"3252420352","3252420415","IQ" +"3252420416","3252420431","GB" +"3252420432","3252420455","LT" +"3252420456","3252420463","IQ" +"3252420464","3252420471","AF" +"3252420472","3252420583","LT" +"3252420584","3252420591","IQ" +"3252420592","3252421119","LT" +"3252421120","3252423679","NO" +"3252423680","3252424703","LT" +"3252424704","3252424719","GN" +"3252424720","3252424735","LT" +"3252424736","3252424751","GA" +"3252424752","3252425023","LT" +"3252425024","3252425215","SO" +"3252425216","3252425343","TD" +"3252425344","3252425471","LT" +"3252425472","3252425543","AO" +"3252425544","3252425551","LT" +"3252425552","3252425567","AO" +"3252425568","3252425727","LT" +"3252425728","3252425983","A2" +"3252425984","3252426751","LT" +"3252426752","3252427263","MZ" +"3252427264","3252427775","LT" +"3252427776","3252428287","MW" +"3252428288","3252428303","AO" +"3252428304","3252428319","LT" +"3252428320","3252428335","AO" +"3252428336","3252428351","LT" +"3252428352","3252428383","AO" +"3252428384","3252428407","LT" +"3252428408","3252428415","AO" +"3252428416","3252428447","KE" +"3252428448","3252428479","LT" +"3252428480","3252428799","NG" +"3252428800","3252430079","LT" +"3252430080","3252430335","BJ" +"3252430336","3252430463","NE" +"3252430464","3252430479","BJ" +"3252430480","3252430511","LT" +"3252430512","3252430519","BF" +"3252430520","3252430535","LT" +"3252430536","3252430543","BF" +"3252430544","3252430559","BJ" +"3252430560","3252430591","LT" +"3252430592","3252430847","GN" +"3252430848","3252431359","MW" +"3252431360","3252431871","LT" +"3252431872","3252432127","SO" +"3252432128","3252432383","LR" +"3252432384","3252432399","MW" +"3252432400","3252432447","LT" +"3252432448","3252432463","MW" +"3252432464","3252432575","LT" +"3252432576","3252432591","MW" +"3252432592","3252433663","LT" +"3252433664","3252433919","SO" +"3252433920","3252434175","MZ" +"3252434176","3252434687","LT" +"3252434688","3252434703","GH" +"3252434704","3252434711","TZ" +"3252434712","3252434719","LT" +"3252434720","3252434743","GH" +"3252434744","3252434751","ML" +"3252434752","3252434759","GN" +"3252434760","3252434767","SL" +"3252434768","3252434775","BF" +"3252434776","3252434783","SL" +"3252434784","3252434791","ZM" +"3252434792","3252435199","LT" +"3252435200","3252435231","TZ" +"3252435232","3252435247","LT" +"3252435248","3252435263","BW" +"3252435264","3252435279","ML" +"3252435280","3252435287","GN" +"3252435288","3252435295","GH" +"3252435296","3252435303","TZ" +"3252435304","3252435311","SN" +"3252435312","3252435319","CF" +"3252435320","3252435327","MZ" +"3252435328","3252435343","CD" +"3252435344","3252435375","BF" +"3252435376","3252435415","GN" +"3252435416","3252435455","CD" +"3252435456","3252435711","TZ" +"3252435712","3252435855","GH" +"3252435856","3252435871","MR" +"3252435872","3252435887","GH" +"3252435888","3252435903","CD" +"3252435904","3252435919","BW" +"3252435920","3252435935","BF" +"3252435936","3252435967","CD" +"3252435968","3252436223","TZ" +"3252436224","3252436239","GN" +"3252436240","3252436271","ML" +"3252436272","3252436287","BF" +"3252436288","3252436303","LT" +"3252436304","3252436319","ZM" +"3252436320","3252436335","LT" +"3252436336","3252436351","ZM" +"3252436352","3252436383","GN" +"3252436384","3252436399","LR" +"3252436400","3252436415","SL" +"3252436416","3252436447","LT" +"3252436448","3252436479","ER" +"3252436480","3252436991","LT" +"3252436992","3252437503","NG" +"3252437504","3252438527","LT" +"3252438528","3252438783","CM" +"3252438784","3252439263","LT" +"3252439264","3252439271","SN" +"3252439272","3252439287","LT" +"3252439288","3252439295","SN" +"3252439296","3252439391","SO" +"3252439392","3252439551","LT" +"3252439552","3252439615","SO" +"3252439616","3252439807","LT" +"3252439808","3252439871","SO" +"3252439872","3252444287","LT" +"3252444288","3252444351","TZ" +"3252444352","3252445183","LT" +"3252445184","3252445263","GN" +"3252445264","3252446711","LT" +"3252446712","3252446719","NO" +"3252446720","3252447231","LT" +"3252447232","3252448255","NO" +"3252448256","3252448511","SE" +"3252448512","3252448767","NO" +"3252448768","3252449279","SE" +"3252449280","3252449535","CN" +"3252449536","3252449615","CH" +"3252449616","3252449623","DK" +"3252449624","3252449791","LT" +"3252449792","3252450047","DK" +"3252450048","3252450303","LT" +"3252450304","3252450815","NO" +"3252450816","3252450823","ET" +"3252450824","3252450847","LT" +"3252450848","3252450863","IQ" +"3252450864","3252450879","LT" +"3252450880","3252450911","NO" +"3252450912","3252450943","LT" +"3252450944","3252450959","CH" +"3252450960","3252451071","LT" +"3252451072","3252451327","CH" +"3252451328","3252451583","LT" +"3252451584","3252451607","GM" +"3252451608","3252451631","GW" +"3252451632","3252451655","GN" +"3252451656","3252451679","SL" +"3252451680","3252451695","LR" +"3252451696","3252451967","LT" +"3252451968","3252451999","NO" +"3252452000","3252452095","LT" +"3252452096","3252452127","NO" +"3252452128","3252452135","LT" +"3252452136","3252452143","NO" +"3252452144","3252452159","GB" +"3252452160","3252452175","LT" +"3252452176","3252452191","NO" +"3252452192","3252452223","LT" +"3252452224","3252452227","NL" +"3252452228","3252452271","LT" +"3252452272","3252452351","NO" +"3252452352","3252452487","LT" +"3252452488","3252452495","MW" +"3252452496","3252452503","ZM" +"3252452504","3252452511","SD" +"3252452512","3252452607","LT" +"3252452608","3252452735","TD" +"3252452736","3252453263","LT" +"3252453264","3252453271","NG" +"3252453272","3252454655","LT" +"3252454656","3252454911","IQ" +"3252454912","3252455679","LT" +"3252455680","3252455807","BI" +"3252455808","3252460799","LT" +"3252460800","3252460831","AF" +"3252460832","3252460847","US" +"3252460848","3252460863","LT" +"3252460864","3252460927","IQ" +"3252460928","3252461055","LT" +"3252461056","3252461567","NO" +"3252461568","3252464383","LT" +"3252464384","3252465663","NO" +"3252465664","3252473855","LT" +"3252473856","3252474879","SO" +"3252474880","3252481023","LT" +"3252481024","3252481535","MZ" +"3252481536","3252486143","LT" +"3252486144","3252490239","BE" +"3252490240","3252496127","SE" +"3252496128","3252496383","AU" +"3252496384","3252500223","SE" +"3252500224","3252500479","GB" +"3252500480","3252501247","SE" +"3252501248","3252501503","EU" +"3252501504","3252505343","SE" +"3252505344","3252505599","US" +"3252505600","3252507135","SE" +"3252507136","3252507647","RO" +"3252507648","3252509183","GB" +"3252509184","3252509439","AP" +"3252509440","3252509951","GB" +"3252509952","3252510719","CH" +"3252510720","3252514815","FR" +"3252514816","3252515071","SI" +"3252515072","3252515327","GB" +"3252515328","3252515583","NL" +"3252515584","3252515839","SI" +"3252515840","3252516095","CH" +"3252516096","3252516351","FR" +"3252516352","3252516607","GB" +"3252516608","3252516863","SE" +"3252516864","3252517119","FR" +"3252517120","3252517375","EU" +"3252517376","3252517631","PL" +"3252517632","3252517887","BE" +"3252517888","3252518143","DK" +"3252518144","3252518399","NL" +"3252518400","3252518655","PL" +"3252518656","3252518911","DE" +"3252518912","3252527103","NL" +"3252527104","3252535295","BE" +"3252535296","3252539391","GB" +"3252539392","3252540415","IE" +"3252540416","3252541951","NL" +"3252541952","3252542207","CI" +"3252542208","3252551679","BE" +"3252551680","3252563967","CH" +"3252563968","3252564991","RO" +"3252564992","3252566015","UA" +"3252566016","3252566271","DE" +"3252566272","3252566527","RO" +"3252566528","3252566783","RU" +"3252566784","3252567295","CH" +"3252567296","3252567551","GB" +"3252567552","3252567807","RU" +"3252567808","3252568063","RO" +"3252568064","3252579327","CH" +"3252579328","3252579583","FR" +"3252579584","3252579839","RU" +"3252579840","3252580095","SE" +"3252580096","3252580351","UA" +"3252580352","3252584447","LI" +"3252584448","3252584703","FR" +"3252584704","3252584959","IL" +"3252584960","3252585215","CZ" +"3252585216","3252585471","PL" +"3252585472","3252585727","NL" +"3252585728","3252585983","FI" +"3252585984","3252586239","FR" +"3252586240","3252586495","PL" +"3252586496","3252586751","IT" +"3252586752","3252587007","NL" +"3252587008","3252587263","CH" +"3252587264","3252587519","AT" +"3252587520","3252587775","UA" +"3252587776","3252588031","SE" +"3252588032","3252600319","CH" +"3252600320","3252600575","NL" +"3252600576","3252600831","RU" +"3252600832","3252616703","CH" +"3252616704","3252616959","ES" +"3252616960","3252617215","CH" +"3252617216","3252617471","PL" +"3252617472","3252634623","CH" +"3252634624","3252634879","RU" +"3252634880","3252636671","CH" +"3252636672","3252636927","TR" +"3252636928","3252637183","DE" +"3252637184","3252637695","GB" +"3252637696","3252642303","CH" +"3252642304","3252642559","UA" +"3252642560","3252642815","DK" +"3252642816","3252643071","NL" +"3252643072","3252643327","RO" +"3252643328","3252643583","CH" +"3252643584","3252643839","AT" +"3252643840","3252682751","CH" +"3252682752","3252813823","HU" +"3252813824","3252830207","RO" +"3252830208","3252832255","MD" +"3252832256","3252832767","RO" +"3252832768","3252834303","MD" +"3252834304","3252862975","RO" +"3252862976","3252879359","HU" +"3252879360","3252895743","EG" +"3252895744","3252903935","IT" +"3252903936","3252904447","UA" +"3252904448","3252904703","RU" +"3252904704","3252904959","DE" +"3252904960","3252905215","PL" +"3252905216","3252905471","CH" +"3252905472","3252905727","LT" +"3252905728","3252905983","BE" +"3252905984","3252906239","IT" +"3252906240","3252906495","PL" +"3252906496","3252906751","GB" +"3252906752","3252907007","FR" +"3252907008","3252907263","AT" +"3252907264","3252907775","RO" +"3252907776","3252908031","GB" +"3252908032","3252908287","PL" +"3252908288","3252908543","AT" +"3252908544","3252908799","MT" +"3252908800","3252909055","UA" +"3252909056","3252909311","PL" +"3252909312","3252909567","DE" +"3252909568","3252909823","GB" +"3252909824","3252910335","UA" +"3252910336","3252910591","NL" +"3252910592","3252910847","CH" +"3252910848","3252911103","PL" +"3252911104","3252911359","DE" +"3252911360","3252911615","RU" +"3252911616","3252911871","SE" +"3252911872","3252912127","SA" +"3252912128","3252912383","EG" +"3252912384","3252912639","HU" +"3252912640","3252912895","FR" +"3252912896","3252913151","PL" +"3252913152","3252913407","ES" +"3252913408","3252913663","FR" +"3252913664","3252913919","RU" +"3252913920","3252914175","NO" +"3252914176","3252916223","FR" +"3252916224","3252920319","DE" +"3252920320","3252928511","LB" +"3252928512","3252929535","DE" +"3252929536","3252930559","HU" +"3252930560","3252931071","GB" +"3252931072","3252931583","DE" +"3252931584","3252932095","NO" +"3252932096","3252933631","UA" +"3252933632","3252934655","IT" +"3252934656","3252936703","PL" +"3252936704","3252937215","CH" +"3252937216","3252937727","RO" +"3252937728","3252938239","FR" +"3252938240","3252938751","UA" +"3252938752","3252939263","RU" +"3252939264","3252939775","EU" +"3252939776","3252940287","RO" +"3252940288","3252940799","PT" +"3252940800","3252941311","RU" +"3252941312","3252941823","RO" +"3252941824","3252942847","GB" +"3252942848","3252943359","FR" +"3252943360","3252943871","UA" +"3252943872","3252944383","RU" +"3252944384","3252944895","DE" +"3252944896","3252945151","AT" +"3252945152","3252945407","GB" +"3252945408","3252945663","UA" +"3252945664","3252980735","AT" +"3252980736","3252980991","PL" +"3252980992","3252981247","GB" +"3252981248","3252981503","RU" +"3252981504","3252981759","SE" +"3252981760","3252982015","DE" +"3252982016","3252982271","RO" +"3252982272","3252982527","DE" +"3252982528","3252982783","FR" +"3252982784","3252983039","UA" +"3252983040","3252983551","DE" +"3252983552","3252983807","SI" +"3252983808","3252984063","BG" +"3252984064","3252984319","RO" +"3252984320","3252984575","AT" +"3252984576","3252984831","GB" +"3252984832","3252985087","FR" +"3252985088","3252985343","SE" +"3252985344","3252985855","RU" +"3252985856","3252989439","AT" +"3252989440","3252989695","PL" +"3252989696","3253004799","AT" +"3253004800","3253005055","CZ" +"3253005056","3253010431","AT" +"3253010432","3253075967","FI" +"3253075968","3253207039","RO" +"3253207040","3253223679","RU" +"3253223680","3253223935","UA" +"3253223936","3253230591","RU" +"3253230592","3253230847","BY" +"3253230848","3253247999","RU" +"3253248000","3253248255","DE" +"3253248256","3253265407","RU" +"3253265408","3253265919","AM" +"3253265920","3253270527","RU" +"3253270528","3253271551","BY" +"3253271552","3253338111","RU" +"3253338112","3253338367","PL" +"3253338368","3253380863","SE" +"3253380864","3253381119","IT" +"3253381120","3253383935","SE" +"3253383936","3253384191","NO" +"3253384192","3253388287","SE" +"3253388288","3253388799","FR" +"3253388800","3253389055","SE" +"3253389056","3253389823","FR" +"3253389824","3253398271","SE" +"3253398272","3253398783","FR" +"3253398784","3253399039","SE" +"3253399040","3253399295","FR" +"3253399296","3253399551","IT" +"3253399552","3253400575","SE" +"3253400576","3253401087","IT" +"3253401088","3253401343","SE" +"3253401344","3253401599","EU" +"3253401600","3253402111","SE" +"3253402112","3253402367","IT" +"3253402368","3253402623","JP" +"3253402624","3253403647","SE" +"3253403648","3253403903","PL" +"3253403904","3253409791","SE" +"3253409792","3253410047","GB" +"3253410048","3253411327","SE" +"3253411328","3253411583","NO" +"3253411584","3253412351","SE" +"3253412352","3253412607","US" +"3253412608","3253416447","SE" +"3253416448","3253416959","GB" +"3253416960","3253428223","SE" +"3253428224","3253428479","DE" +"3253428480","3253429247","SE" +"3253429248","3253429759","JP" +"3253429760","3253430015","ES" +"3253430016","3253433087","SE" +"3253433088","3253433343","DE" +"3253433344","3253434111","SE" +"3253434112","3253434367","GB" +"3253434368","3253434623","IT" +"3253434624","3253434879","SE" +"3253434880","3253435135","IT" +"3253435136","3253435903","SE" +"3253435904","3253436159","NL" +"3253436160","3253436415","NO" +"3253436416","3253440511","SE" +"3253440512","3253440767","FR" +"3253440768","3253443839","SE" +"3253443840","3253444351","NO" +"3253444352","3253453311","SE" +"3253453312","3253453567","NO" +"3253453568","3253454079","SE" +"3253454080","3253454335","GB" +"3253454336","3253454591","EU" +"3253454592","3253455615","SE" +"3253455616","3253455871","US" +"3253455872","3253456383","SE" +"3253456384","3253456639","US" +"3253456640","3253460735","SE" +"3253460736","3253460991","IT" +"3253460992","3253461247","US" +"3253461248","3253461759","SE" +"3253461760","3253462015","PL" +"3253462016","3253462527","SE" +"3253462528","3253463039","US" +"3253463040","3253464063","GB" +"3253464064","3253469183","SE" +"3253469184","3253471231","AO" +"3253471232","3253534719","PT" +"3253534720","3253600255","GB" +"3253600256","3253601279","RO" +"3253601280","3253602303","FI" +"3253602304","3253603327","DE" +"3253603328","3253605375","PL" +"3253605376","3253606399","UA" +"3253606400","3253606655","PL" +"3253606656","3253606911","TR" +"3253606912","3253607167","DE" +"3253607424","3253608447","NG" +"3253608448","3253610495","UA" +"3253610496","3253611519","PL" +"3253611520","3253612543","UA" +"3253612544","3253613567","RU" +"3253613568","3253614591","ES" +"3253614592","3253615615","RO" +"3253615616","3253616639","DE" +"3253616640","3253617663","PL" +"3253617664","3253618687","GB" +"3253618688","3253619711","UA" +"3253619712","3253620735","IT" +"3253620736","3253622783","GB" +"3253622784","3253623807","DE" +"3253623808","3253624831","PL" +"3253624832","3253625855","UA" +"3253625856","3253626879","IT" +"3253626880","3253627903","DE" +"3253627904","3253628927","UA" +"3253628928","3253629951","GR" +"3253629952","3253630975","UA" +"3253630976","3253631999","RU" +"3253632000","3253633023","DE" +"3253633024","3253635071","RU" +"3253635072","3253636095","IT" +"3253636096","3253637119","CH" +"3253637120","3253638143","ES" +"3253638144","3253639167","FR" +"3253639168","3253640191","UA" +"3253640192","3253641215","AT" +"3253641216","3253642239","NL" +"3253642240","3253643263","GB" +"3253643264","3253645311","PL" +"3253645312","3253646335","RU" +"3253646336","3253647359","PL" +"3253647360","3253648383","DK" +"3253648384","3253649407","IL" +"3253649408","3253650431","UA" +"3253650432","3253651455","DE" +"3253651456","3253652479","PL" +"3253652480","3253653503","LI" +"3253653504","3253654527","IL" +"3253654528","3253657599","LV" +"3253657600","3253658623","UA" +"3253658624","3253659647","DE" +"3253659648","3253660671","GB" +"3253660672","3253661695","NO" +"3253661696","3253662719","NL" +"3253662720","3253663743","RO" +"3253663744","3253664767","NL" +"3253664768","3253665791","DE" +"3253665792","3253666815","CZ" +"3253666816","3253667839","EU" +"3253667840","3253668863","GB" +"3253668864","3253669887","ES" +"3253669888","3253670911","DE" +"3253670912","3253671935","CH" +"3253671936","3253672959","UA" +"3253672960","3253673983","DE" +"3253673984","3253675007","GB" +"3253675008","3253676031","PL" +"3253676032","3253677055","AT" +"3253677056","3253678079","PL" +"3253678080","3253679103","DK" +"3253679104","3253680127","IT" +"3253680128","3253682175","PL" +"3253682176","3253683199","RO" +"3253683200","3253685247","UA" +"3253685248","3253686271","FR" +"3253686272","3253687295","PL" +"3253687296","3253688319","RU" +"3253688320","3253690367","NL" +"3253690368","3253691391","DK" +"3253691392","3253692415","PL" +"3253692416","3253693439","DE" +"3253693440","3253694463","IL" +"3253694464","3253695487","GB" +"3253695488","3253696511","NL" +"3253696512","3253697535","FR" +"3253697536","3253698559","PL" +"3253698560","3253699071","UA" +"3253699072","3253699583","RO" +"3253699584","3253699839","NL" +"3253699840","3253700095","RU" +"3253700096","3253700607","RO" +"3253700608","3253701119","PL" +"3253701120","3253702143","RO" +"3253702144","3253702655","UA" +"3253702656","3253703167","PL" +"3253703168","3253703679","RO" +"3253703680","3253704191","HU" +"3253704192","3253704703","RU" +"3253704704","3253705215","UA" +"3253705216","3253705727","NO" +"3253705728","3253706239","DE" +"3253706240","3253706751","RO" +"3253706752","3253707263","GB" +"3253707264","3253708287","DE" +"3253708288","3253708799","RO" +"3253708800","3253709311","DK" +"3253709312","3253709823","UA" +"3253709824","3253710335","RO" +"3253710336","3253710847","GB" +"3253710848","3253711359","DK" +"3253711360","3253712383","UA" +"3253712384","3253712895","MD" +"3253713408","3253713919","NL" +"3253713920","3253714431","AT" +"3253714432","3253714943","RO" +"3253714944","3253715455","FR" +"3253715456","3253715967","RO" +"3253715968","3253716479","DE" +"3253716480","3253716991","FR" +"3253716992","3253717503","CH" +"3253717504","3253718015","NL" +"3253718016","3253719551","PL" +"3253719552","3253720063","BE" +"3253720064","3253720575","RO" +"3253720576","3253721087","GR" +"3253721088","3253721599","UA" +"3253721600","3253722111","RO" +"3253722112","3253722623","CH" +"3253722624","3253723135","NL" +"3253723136","3253723647","PL" +"3253723648","3253724159","AT" +"3253724160","3253724671","UA" +"3253724672","3253725183","RO" +"3253725696","3253726207","UA" +"3253726208","3253726719","RO" +"3253726720","3253727231","UA" +"3253727232","3253727743","FR" +"3253727744","3253728255","RU" +"3253728256","3253728767","PL" +"3253728768","3253729279","RO" +"3253729280","3253729791","AT" +"3253729792","3253730303","UA" +"3253730304","3253730815","RO" +"3253730816","3253731327","UA" +"3253731328","3253796863","GB" +"3253796864","3253862399","SE" +"3253862400","3253862655","GB" +"3253862656","3253882879","FR" +"3253882880","3253886975","NL" +"3253886976","3253887231","GB" +"3253887232","3253887487","NL" +"3253887488","3253887743","ES" +"3253887744","3253887999","GB" +"3253888000","3253888255","PL" +"3253888256","3253888511","BE" +"3253888512","3253888767","GB" +"3253888768","3253889023","SE" +"3253889024","3253889279","RO" +"3253889280","3253889535","CH" +"3253889536","3253889791","DE" +"3253889792","3253890047","DK" +"3253890048","3253890303","NL" +"3253890304","3253890559","SE" +"3253890560","3253890815","GB" +"3253890816","3253891071","IE" +"3253891072","3253891327","DE" +"3253891328","3253891583","GB" +"3253891584","3253891839","UA" +"3253891840","3253892351","GB" +"3253892352","3253892607","NL" +"3253892608","3253892863","AT" +"3253892864","3253893119","NL" +"3253893120","3253893375","RO" +"3253893376","3253893631","DE" +"3253893632","3253893887","SE" +"3253893888","3253894143","RU" +"3253894144","3253894399","PT" +"3253894400","3253894655","NL" +"3253894656","3253894911","FI" +"3253894912","3253896703","RU" +"3253896704","3253896959","AT" +"3253896960","3253897215","RU" +"3253897216","3253898239","PL" +"3253898240","3253898495","GB" +"3253898496","3253898751","HR" +"3253898752","3253899263","PL" +"3253899264","3253899519","MD" +"3253899520","3253899775","RU" +"3253899776","3253900287","PL" +"3253900288","3253901311","RU" +"3253901312","3253901567","PL" +"3253901568","3253901823","RU" +"3253901824","3253902079","SI" +"3253902080","3253902335","DK" +"3253902336","3253904383","UA" +"3253904384","3253904895","GB" +"3253904896","3253905151","UA" +"3253905152","3253905407","RU" +"3253905408","3253905919","PL" +"3253905920","3253906431","RU" +"3253906432","3253906687","PL" +"3253906688","3253906943","RU" +"3253906944","3253907455","FR" +"3253907456","3253908479","RU" +"3253908480","3253908991","CZ" +"3253908992","3253909247","SE" +"3253909248","3253909503","NL" +"3253909504","3253910527","SE" +"3253910528","3253911039","ES" +"3253911040","3253911551","RU" +"3253911552","3253911807","FR" +"3253911808","3253912063","RU" +"3253912064","3253912575","IR" +"3253912576","3253913599","RO" +"3253913600","3253915647","RU" +"3253915648","3253916159","IR" +"3253916160","3253916671","DE" +"3253916672","3253917183","PL" +"3253917184","3253917439","CY" +"3253917440","3253917695","PL" +"3253917696","3253918207","RU" +"3253918208","3253918719","CH" +"3253918720","3253919743","IL" +"3253919744","3253923839","GB" +"3253923840","3253927935","GR" +"3253927936","3253961727","GB" +"3253961728","3253962239","MD" +"3253962240","3253962751","SE" +"3253962752","3253963263","BE" +"3253963264","3253963775","RU" +"3253963776","3253964287","SI" +"3253964288","3253964799","PL" +"3253964800","3253965311","SE" +"3253965312","3253966335","PL" +"3253966336","3253966847","DE" +"3253966848","3253968895","UA" +"3253968896","3253969407","DE" +"3253969408","3253969919","AT" +"3253969920","3253970431","NL" +"3253970432","3253970687","RU" +"3253970688","3253970943","UA" +"3253970944","3253971967","RS" +"3253971968","3253972991","RU" +"3253972992","3253974783","GB" +"3253974784","3253974847","NO" +"3253974848","3253974911","SE" +"3253974912","3253974975","IL" +"3253974976","3253975039","SE" +"3253975040","3253977087","DE" +"3253977088","3253985279","TR" +"3253985280","3253993471","GB" +"3253993472","3254124543","BE" +"3254124544","3254156799","CH" +"3254156800","3254157055","LI" +"3254157056","3254177279","CH" +"3254177280","3254177535","LI" +"3254177536","3254255615","CH" +"3254255616","3254485503","FR" +"3254485504","3254485799","CI" +"3254485800","3254485807","FR" +"3254485808","3254485819","CI" +"3254485820","3254485820","FR" +"3254485821","3254485821","CI" +"3254485822","3254485822","FR" +"3254485823","3254485855","CI" +"3254485856","3254485859","FR" +"3254485860","3254485887","CI" +"3254485888","3254486527","FR" +"3254486528","3254486543","CH" +"3254486544","3254486559","US" +"3254486560","3254486591","GB" +"3254486592","3254486655","FR" +"3254486656","3254486671","CH" +"3254486672","3254486687","FR" +"3254486688","3254486719","CH" +"3254486720","3254486735","FR" +"3254486736","3254486767","US" +"3254486768","3254486783","HK" +"3254486784","3254487039","A2" +"3254487040","3254487199","KM" +"3254487200","3254487263","FR" +"3254487264","3254487295","KM" +"3254487296","3254487419","CF" +"3254487420","3254487551","FR" +"3254487552","3254487803","CI" +"3254487804","3254487807","FR" +"3254487808","3254487855","LB" +"3254487856","3254487863","FR" +"3254487864","3254488063","LB" +"3254488064","3254488431","FR" +"3254488432","3254488447","MG" +"3254488448","3254488831","FR" +"3254488832","3254489087","US" +"3254489088","3254489343","DZ" +"3254489344","3254489365","FR" +"3254489366","3254489367","MR" +"3254489368","3254489369","FR" +"3254489370","3254489370","MR" +"3254489371","3254489373","FR" +"3254489374","3254489375","MR" +"3254489376","3254489407","FR" +"3254489408","3254489439","MR" +"3254489440","3254489443","FR" +"3254489444","3254489455","MR" +"3254489456","3254489463","FR" +"3254489464","3254489519","MR" +"3254489520","3254489535","FR" +"3254489536","3254489567","MR" +"3254489568","3254489599","FR" +"3254489600","3254489855","MR" +"3254489856","3254490111","TD" +"3254490112","3254490367","FR" +"3254490368","3254490623","CF" +"3254490624","3254491135","FR" +"3254491136","3254491391","DZ" +"3254491392","3254491647","GQ" +"3254491648","3254491903","FR" +"3254491904","3254492031","CM" +"3254492032","3254492159","FR" +"3254492160","3254492671","LB" +"3254492672","3254492927","FR" +"3254492928","3254493183","CI" +"3254493184","3254493323","GP" +"3254493324","3254493327","FR" +"3254493328","3254493335","GP" +"3254493336","3254493343","FR" +"3254493344","3254493439","GP" +"3254493440","3254493695","CI" +"3254493696","3254494527","GP" +"3254494528","3254494719","FR" +"3254494720","3254494735","LB" +"3254494736","3254494743","FR" +"3254494744","3254494803","LB" +"3254494804","3254494807","FR" +"3254494808","3254494975","LB" +"3254494976","3254495087","DJ" +"3254495088","3254495231","FR" +"3254495232","3254495487","CI" +"3254495488","3254495743","DZ" +"3254495744","3254496255","LB" +"3254496256","3254496511","FR" +"3254496512","3254496527","CI" +"3254496528","3254496767","FR" +"3254496768","3254497247","DZ" +"3254497248","3254508031","FR" +"3254508032","3254508543","GQ" +"3254508544","3254508799","NE" +"3254508800","3254508831","MQ" +"3254508832","3254509055","FR" +"3254509056","3254509567","GQ" +"3254509568","3254509783","DJ" +"3254509784","3254510339","FR" +"3254510340","3254510359","NE" +"3254510360","3254510375","FR" +"3254510376","3254510407","NE" +"3254510408","3254510420","FR" +"3254510421","3254510421","NE" +"3254510422","3254510431","FR" +"3254510432","3254510432","NE" +"3254510433","3254510440","FR" +"3254510441","3254510441","NE" +"3254510442","3254510443","FR" +"3254510444","3254510451","NE" +"3254510452","3254510455","FR" +"3254510456","3254510519","NE" +"3254510520","3254510527","FR" +"3254510528","3254510559","NE" +"3254510560","3254510563","FR" +"3254510564","3254510847","NE" +"3254510848","3254521855","FR" +"3254521856","3254522367","GB" +"3254522368","3254523739","FR" +"3254523740","3254523740","UG" +"3254523741","3254523741","CH" +"3254523742","3254523742","RO" +"3254523743","3254550527","FR" +"3254550528","3254550783","US" +"3254550784","3254551039","IR" +"3254551040","3254551295","US" +"3254551296","3254551551","IR" +"3254551552","3254551807","US" +"3254551808","3254552063","FR" +"3254552064","3254552319","US" +"3254552320","3254552831","IR" +"3254552832","3254553087","HK" +"3254553088","3254553343","FR" +"3254553344","3254553599","HK" +"3254553600","3254554879","FR" +"3254554880","3254555135","HK" +"3254555136","3254555391","FR" +"3254555392","3254555647","HK" +"3254555648","3254557439","FR" +"3254557440","3254557695","AT" +"3254557696","3254576383","FR" +"3254576384","3254576543","DO" +"3254576544","3254623743","FR" +"3254623744","3254624255","US" +"3254624256","3254648831","FR" +"3254648832","3254648895","DK" +"3254648896","3254649087","GB" +"3254649088","3254649855","AL" +"3254649856","3254650879","SE" +"3254650880","3254653439","CH" +"3254653440","3254654847","DE" +"3254654848","3254654975","DK" +"3254654976","3254655743","IT" +"3254655744","3254656255","GB" +"3254656256","3254656511","BG" +"3254656512","3254656767","DE" +"3254656768","3254657023","GB" +"3254657024","3254665215","RO" +"3254665216","3254681599","EU" +"3254681600","3254697983","DE" +"3254697984","3254698495","SE" +"3254698496","3254699007","GB" +"3254699008","3254699519","UA" +"3254699520","3254700031","US" +"3254700032","3254700543","GR" +"3254700544","3254701055","DE" +"3254701056","3254701567","RU" +"3254701568","3254702079","IL" +"3254702080","3254702591","RU" +"3254702592","3254703103","GB" +"3254703104","3254703615","DE" +"3254703616","3254704127","NL" +"3254704128","3254705663","UA" +"3254705664","3254706175","GR" +"3254706176","3254707199","RU" +"3254707200","3254707711","TR" +"3254707712","3254708223","RO" +"3254708224","3254708735","UA" +"3254708736","3254709247","RO" +"3254709248","3254709759","DE" +"3254709760","3254710271","PL" +"3254710272","3254710783","IT" +"3254710784","3254711295","RO" +"3254711296","3254711807","FR" +"3254711808","3254712319","PL" +"3254712320","3254712831","RU" +"3254712832","3254713343","KZ" +"3254713344","3254713855","TR" +"3254713856","3254714367","NL" +"3254714368","3254779903","TR" +"3254779904","3254780159","DE" +"3254780160","3254780671","GB" +"3254780672","3254780927","LT" +"3254780928","3254781183","GR" +"3254781184","3254781439","NL" +"3254781440","3254781951","BE" +"3254781952","3254782207","LV" +"3254782208","3254782463","FR" +"3254782464","3254782719","AT" +"3254782720","3254782975","DE" +"3254782976","3254783743","CZ" +"3254783744","3254783999","SA" +"3254784000","3254784255","IT" +"3254784256","3254784511","CH" +"3254784512","3254785279","LT" +"3254785280","3254785535","KZ" +"3254785536","3254785791","DK" +"3254785792","3254786047","LU" +"3254786048","3254786815","AT" +"3254786816","3254787071","SM" +"3254787072","3254788095","NL" +"3254788096","3254788351","BG" +"3254788352","3254789119","ES" +"3254789120","3254789375","FR" +"3254789376","3254789631","BE" +"3254789632","3254790655","TK" +"3254790656","3254790911","LU" +"3254790912","3254791423","BE" +"3254791424","3254791679","SK" +"3254791680","3254792191","DK" +"3254792192","3254793215","LV" +"3254796288","3254797311","SE" +"3254797312","3254798335","RU" +"3254798336","3254799359","AT" +"3254799360","3254800383","IE" +"3254800384","3254801407","FI" +"3254801408","3254802431","HR" +"3254802432","3254803455","UA" +"3254803456","3254804479","DE" +"3254804480","3254806527","PL" +"3254806528","3254807551","UA" +"3254807552","3254808575","KZ" +"3254808576","3254809599","RU" +"3254809600","3254810623","UA" +"3254810624","3254811647","RU" +"3254811648","3254812671","RO" +"3254812672","3254812927","PL" +"3254812928","3254813183","RO" +"3254813184","3254813439","TR" +"3254813440","3254813695","UA" +"3254813696","3254813951","DK" +"3254813952","3254814207","IT" +"3254814208","3254814463","SE" +"3254814464","3254814719","DE" +"3254814720","3254814975","RU" +"3254814976","3254815231","CH" +"3254815232","3254815487","UA" +"3254815488","3254815743","GB" +"3254815744","3254815999","IT" +"3254816000","3254816255","RU" +"3254816256","3254816511","TR" +"3254816512","3254816767","DE" +"3254816768","3254817279","RU" +"3254817280","3254817535","CY" +"3254817536","3254817791","GB" +"3254817792","3254818047","UA" +"3254818048","3254818303","DE" +"3254818304","3254818559","UA" +"3254818560","3254818815","DE" +"3254818816","3254819327","FR" +"3254819328","3254819583","PL" +"3254819584","3254819839","DK" +"3254819840","3254820095","GB" +"3254820096","3254820351","UA" +"3254820352","3254820863","GB" +"3254820864","3254821119","LT" +"3254821120","3254821375","DK" +"3254821376","3254821631","RU" +"3254821632","3254821887","DE" +"3254821888","3254822143","HU" +"3254822144","3254822399","DE" +"3254822400","3254822655","FR" +"3254822656","3254822911","PL" +"3254822912","3254823167","CH" +"3254823168","3254823423","NO" +"3254823424","3254823679","NL" +"3254823680","3254823935","PL" +"3254823936","3254824191","CH" +"3254824192","3254824447","RO" +"3254824448","3254824959","SI" +"3254824960","3254825215","FR" +"3254825216","3254825471","RO" +"3254825472","3254825727","TR" +"3254825728","3254825983","FR" +"3254825984","3254826239","DE" +"3254826240","3254826495","PL" +"3254826496","3254827263","DE" +"3254827264","3254827519","GR" +"3254827520","3254827775","PL" +"3254827776","3254828031","UA" +"3254828032","3254828287","DE" +"3254828288","3254828799","RO" +"3254828800","3254829055","SI" +"3254829056","3254829311","NO" +"3254829312","3254829567","GB" +"3254829568","3254829823","NL" +"3254829824","3254830079","FR" +"3254830080","3254830335","IE" +"3254830336","3254830591","NL" +"3254830592","3254830847","CH" +"3254830848","3254831103","PL" +"3254831104","3254831359","UA" +"3254831360","3254831615","DE" +"3254831616","3254831871","TR" +"3254831872","3254832127","LT" +"3254832128","3254832383","RO" +"3254832384","3254832639","BE" +"3254832640","3254832895","UA" +"3254832896","3254833151","LV" +"3254833152","3254833407","DE" +"3254833408","3254833663","RU" +"3254833664","3254833919","GB" +"3254833920","3254834175","PL" +"3254834176","3254834431","CH" +"3254834432","3254834687","FR" +"3254834688","3254834943","GB" +"3254834944","3254835199","NO" +"3254835200","3254835455","DE" +"3254835456","3254835711","SE" +"3254835712","3254835967","UA" +"3254835968","3254836223","GB" +"3254836224","3254836479","PL" +"3254836480","3254836735","MD" +"3254836736","3254836991","AT" +"3254836992","3254837247","GB" +"3254837248","3254837503","HR" +"3254837504","3254837759","RU" +"3254837760","3254838015","IE" +"3254838016","3254838271","GE" +"3254838272","3254838527","DE" +"3254838528","3254838783","CH" +"3254838784","3254839039","AT" +"3254839040","3254839295","RU" +"3254839296","3254839551","DE" +"3254839552","3254839807","PL" +"3254839808","3254840063","BE" +"3254840064","3254840319","BG" +"3254840320","3254840575","DK" +"3254840576","3254840831","UA" +"3254840832","3254841343","GB" +"3254841344","3254841599","PL" +"3254841600","3254841855","IE" +"3254841856","3254842111","LV" +"3254842112","3254842367","GB" +"3254842368","3254842623","PL" +"3254842624","3254842879","RU" +"3254842880","3254843135","SE" +"3254843136","3254843647","DE" +"3254843648","3254843903","FR" +"3254843904","3254844159","NL" +"3254844160","3254844415","PL" +"3254844416","3254844671","GB" +"3254844672","3254844927","RO" +"3254844928","3254845183","DE" +"3254845184","3254845439","FR" +"3254845440","3254882303","SK" +"3254882304","3254882559","PL" +"3254882560","3254882815","IL" +"3254882816","3254883071","PL" +"3254883072","3254883583","GB" +"3254883584","3254883839","AL" +"3254883840","3254884351","GB" +"3254884352","3254884607","RU" +"3254884608","3254884863","PL" +"3254884864","3254885119","SE" +"3254885120","3254885375","DE" +"3254885376","3254885631","RU" +"3254885632","3254885887","SK" +"3254885888","3254886143","AT" +"3254886144","3254886399","UA" +"3254886400","3254886655","IT" +"3254886656","3254886911","RU" +"3254886912","3254887423","CH" +"3254887424","3254888191","GB" +"3254888192","3254888447","RO" +"3254888448","3254888703","RU" +"3254888704","3254888959","RO" +"3254888960","3254889471","RU" +"3254889472","3254890495","SK" +"3254890496","3254890751","DE" +"3254890752","3254891007","UA" +"3254891008","3254891519","RO" +"3254891520","3254891775","GB" +"3254891776","3254892031","DE" +"3254892032","3254892287","GB" +"3254892288","3254892543","BE" +"3254892544","3254892799","RU" +"3254892800","3254893567","SK" +"3254893568","3254894079","CZ" +"3254894080","3254894335","CH" +"3254894336","3254894591","SK" +"3254894592","3254894847","DK" +"3254894848","3254895103","UA" +"3254895104","3254895359","GB" +"3254895360","3254895615","UA" +"3254895616","3254895871","PL" +"3254895872","3254896127","SE" +"3254896128","3254896383","RU" +"3254896384","3254896639","PL" +"3254896640","3254896895","DK" +"3254896896","3254897151","PL" +"3254897152","3254897407","RU" +"3254897408","3254897663","FR" +"3254897664","3254897919","NL" +"3254897920","3254898175","BE" +"3254898176","3254898431","AT" +"3254898432","3254898687","DE" +"3254898688","3254898943","IT" +"3254898944","3254899199","EE" +"3254899200","3254899455","GB" +"3254899456","3254899967","SE" +"3254899968","3254900479","RU" +"3254900480","3254900991","SK" +"3254900992","3254901247","PL" +"3254901248","3254901503","SK" +"3254901504","3254901759","DK" +"3254901760","3254902271","UA" +"3254902272","3254904831","SK" +"3254904832","3254907903","RU" +"3254907904","3254908159","SK" +"3254908160","3254908415","CH" +"3254908416","3254908671","PL" +"3254908672","3254908927","MT" +"3254908928","3254909951","RU" +"3254909952","3254910719","PL" +"3254910720","3254910975","HR" +"3254910976","3254926279","FR" +"3254926280","3254926287","GB" +"3254926288","3254937999","FR" +"3254938000","3254938007","GB" +"3254938008","3254959623","FR" +"3254959624","3254959631","A2" +"3254959632","3254994734","FR" +"3254994735","3254994735","BE" +"3254994736","3255000053","FR" +"3255000054","3255000054","A2" +"3255000055","3255006719","FR" +"3255006720","3255006975","A2" +"3255006976","3255017648","FR" +"3255017649","3255017649","LB" +"3255017650","3255120639","FR" +"3255120640","3255120895","DE" +"3255120896","3255123711","FR" +"3255123712","3255123967","DE" +"3255123968","3255129855","FR" +"3255129856","3255130111","HR" +"3255130112","3255172351","FR" +"3255172352","3255172607","DE" +"3255172608","3255173119","FR" +"3255173120","3255173631","SH" +"3255173632","3255173647","EU" +"3255173648","3255173711","GB" +"3255173712","3255173759","EU" +"3255173760","3255173823","GB" +"3255173824","3255173839","EU" +"3255173840","3255174151","GB" +"3255174152","3255174159","EU" +"3255174160","3255174167","GB" +"3255174168","3255174199","EU" +"3255174200","3255174207","GB" +"3255174208","3255174215","EU" +"3255174216","3255174247","GB" +"3255174248","3255174271","EU" +"3255174272","3255174279","GB" +"3255174280","3255174311","EU" +"3255174312","3255174319","GB" +"3255174320","3255174327","EU" +"3255174328","3255174335","GB" +"3255174336","3255174375","EU" +"3255174376","3255174383","GB" +"3255174384","3255174399","EU" +"3255174400","3255175167","GB" +"3255175168","3255175199","EU" +"3255175200","3255175231","GB" +"3255175232","3255175247","EU" +"3255175248","3255175263","GB" +"3255175264","3255175279","EU" +"3255175280","3255175295","GB" +"3255175296","3255175311","EU" +"3255175312","3255175327","GB" +"3255175328","3255175431","EU" +"3255175432","3255175447","GB" +"3255175448","3255175455","EU" +"3255175456","3255175503","GB" +"3255175504","3255175511","EU" +"3255175512","3255175535","GB" +"3255175536","3255175551","EU" +"3255175552","3255175559","GB" +"3255175560","3255175591","EU" +"3255175592","3255175607","GB" +"3255175608","3255175679","EU" +"3255175680","3255175935","GB" +"3255175936","3255176191","EU" +"3255176192","3255177215","GB" +"3255177216","3255177471","EU" +"3255177472","3255177855","GB" +"3255177856","3255177983","EU" +"3255177984","3255187199","GB" +"3255187200","3255187455","DE" +"3255187456","3255187711","GB" +"3255187712","3255188479","EU" +"3255188480","3255191807","GB" +"3255191808","3255192319","EU" +"3255192320","3255193863","GB" +"3255193864","3255193887","EU" +"3255193888","3255193959","GB" +"3255193960","3255193967","EU" +"3255193968","3255193975","GB" +"3255193976","3255193983","GI" +"3255193984","3255193999","GB" +"3255194000","3255194015","EU" +"3255194016","3255194039","GB" +"3255194040","3255194055","EU" +"3255194056","3255194063","GB" +"3255194064","3255194071","EU" +"3255194072","3255194431","GB" +"3255194432","3255194495","EU" +"3255194496","3255194559","GB" +"3255194560","3255194623","EU" +"3255194624","3255194703","GB" +"3255194704","3255194719","EU" +"3255194720","3255194815","GB" +"3255194816","3255194879","EU" +"3255194880","3255205887","GB" +"3255205888","3255214079","FR" +"3255214080","3255222271","CH" +"3255222272","3255223295","DE" +"3255223296","3255224319","RU" +"3255224320","3255225343","RO" +"3255225344","3255226367","PL" +"3255226368","3255227391","DE" +"3255227392","3255228415","RO" +"3255228416","3255230463","RU" +"3255230464","3255230719","MA" +"3255230720","3255230975","PS" +"3255230976","3255231231","DE" +"3255231232","3255231487","BE" +"3255231488","3255231743","DE" +"3255231744","3255231999","PT" +"3255232000","3255232255","RO" +"3255232256","3255233023","UA" +"3255233024","3255233279","DE" +"3255233280","3255233535","GB" +"3255233536","3255233791","SE" +"3255233792","3255234047","SI" +"3255234048","3255234303","NO" +"3255234304","3255234559","DE" +"3255234560","3255234815","FR" +"3255234816","3255235071","PL" +"3255235072","3255235327","SI" +"3255235328","3255235583","SE" +"3255235584","3255235839","GB" +"3255235840","3255236351","PL" +"3255236352","3255236607","IT" +"3255236608","3255236863","GB" +"3255236864","3255237119","DE" +"3255237120","3255237375","AT" +"3255237376","3255237887","SE" +"3255237888","3255238143","ES" +"3255238144","3255238399","GB" +"3255238400","3255238655","QA" +"3255238656","3255243679","BE" +"3255243680","3255243711","LU" +"3255243712","3255245599","BE" +"3255245600","3255245631","LU" +"3255245632","3255245655","BE" +"3255245656","3255245663","LU" +"3255245664","3255245687","BE" +"3255245688","3255245695","LU" +"3255245696","3255246591","BE" +"3255246592","3255246623","LU" +"3255246624","3255247455","BE" +"3255247456","3255247487","LU" +"3255247488","3255247615","BE" +"3255247616","3255247631","LU" +"3255247632","3255247647","BE" +"3255247648","3255247663","LU" +"3255247664","3255248127","BE" +"3255248128","3255248383","LU" +"3255248384","3255249295","BE" +"3255249296","3255249311","LU" +"3255249312","3255249935","BE" +"3255249936","3255249951","LU" +"3255249952","3255250079","BE" +"3255250080","3255250111","LU" +"3255250112","3255250815","BE" +"3255250816","3255250879","LU" +"3255250880","3255252487","BE" +"3255252488","3255252495","FR" +"3255252496","3255252527","BE" +"3255252528","3255252543","LU" +"3255252544","3255252799","BE" +"3255252800","3255252863","LU" +"3255252864","3255254847","BE" +"3255254848","3255254879","LU" +"3255254880","3255255751","BE" +"3255255752","3255255759","DK" +"3255255760","3255256319","BE" +"3255256320","3255256575","LU" +"3255256576","3255259199","BE" +"3255259200","3255259215","LU" +"3255259216","3255259327","BE" +"3255259328","3255259359","LU" +"3255259360","3255259919","BE" +"3255259920","3255259927","LU" +"3255259928","3255260095","BE" +"3255260096","3255260127","LU" +"3255260128","3255260319","BE" +"3255260320","3255260335","LU" +"3255260336","3255260343","BE" +"3255260344","3255260347","LU" +"3255260348","3255261471","BE" +"3255261472","3255261535","LU" +"3255261536","3255262799","BE" +"3255262800","3255262815","LU" +"3255262816","3255263295","BE" +"3255263296","3255263327","US" +"3255263328","3255264543","BE" +"3255264544","3255264575","LU" +"3255264576","3255264703","BE" +"3255264704","3255264735","LU" +"3255264736","3255265007","BE" +"3255265008","3255265023","LU" +"3255265024","3255270431","BE" +"3255270432","3255270463","FR" +"3255270464","3255271807","BE" +"3255271808","3255271839","LU" +"3255271840","3255273855","BE" +"3255273856","3255273887","LU" +"3255273888","3255274207","BE" +"3255274208","3255274239","LU" +"3255274240","3255274335","BE" +"3255274336","3255274367","LU" +"3255274368","3255274847","BE" +"3255274848","3255274879","LU" +"3255274880","3255274911","BE" +"3255274912","3255274943","LU" +"3255274944","3255276223","BE" +"3255276224","3255276255","FR" +"3255276256","3255276575","BE" +"3255276576","3255276607","LU" +"3255276608","3255276671","BE" +"3255276672","3255276703","LU" +"3255276704","3255276783","BE" +"3255276784","3255276799","LU" +"3255276800","3255277247","BE" +"3255277248","3255277255","LU" +"3255277256","3255277955","BE" +"3255277956","3255277959","LU" +"3255277960","3255278047","BE" +"3255278048","3255278063","LU" +"3255278064","3255278607","BE" +"3255278608","3255278623","LU" +"3255278624","3255279007","BE" +"3255279008","3255279039","LU" +"3255279040","3255279087","BE" +"3255279088","3255279103","LU" +"3255279104","3255279639","BE" +"3255279640","3255279647","LU" +"3255279648","3255280031","BE" +"3255280032","3255280039","LU" +"3255280040","3255280047","BE" +"3255280048","3255280055","LU" +"3255280056","3255281407","BE" +"3255281408","3255281439","LU" +"3255281440","3255281759","BE" +"3255281760","3255281791","LU" +"3255281792","3255283415","BE" +"3255283416","3255283423","LU" +"3255283424","3255283927","BE" +"3255283928","3255283931","LU" +"3255283932","3255284239","BE" +"3255284240","3255284255","LU" +"3255284256","3255285535","BE" +"3255285536","3255285567","LU" +"3255285568","3255286095","BE" +"3255286096","3255286103","DK" +"3255286104","3255286111","LU" +"3255286112","3255286279","BE" +"3255286280","3255286287","LU" +"3255286288","3255288735","BE" +"3255288736","3255288799","LU" +"3255288800","3255288831","BE" +"3255288832","3255289087","LU" +"3255289088","3255290143","BE" +"3255290144","3255290175","LU" +"3255290176","3255290271","BE" +"3255290272","3255290287","LU" +"3255290288","3255290879","BE" +"3255290880","3255291391","LU" +"3255291392","3255291399","BE" +"3255291400","3255291423","LU" +"3255291424","3255291615","BE" +"3255291616","3255291623","LU" +"3255291624","3255291983","BE" +"3255291984","3255291999","LU" +"3255292000","3255292311","BE" +"3255292312","3255292319","LU" +"3255292320","3255297015","BE" +"3255297016","3255297023","HU" +"3255297024","3255300803","BE" +"3255300804","3255300807","LU" +"3255300808","3255304191","BE" +"3255304192","3255304447","DE" +"3255304448","3255305215","LV" +"3255305216","3255305471","BG" +"3255305472","3255307775","LV" +"3255307776","3255308031","PL" +"3255308032","3255308287","CH" +"3255308288","3255311359","LV" +"3255311360","3255311615","GB" +"3255311616","3255311871","SE" +"3255311872","3255312127","PT" +"3255312128","3255312383","SE" +"3255312384","3255315711","LV" +"3255315712","3255316223","PL" +"3255316224","3255316479","RU" +"3255316480","3255316735","GB" +"3255316736","3255316991","EU" +"3255316992","3255317247","FR" +"3255317248","3255317503","UA" +"3255317504","3255317759","BE" +"3255317760","3255318015","BG" +"3255318016","3255318271","GB" +"3255318272","3255318527","RU" +"3255318528","3255318783","UA" +"3255318784","3255319295","DE" +"3255319296","3255319551","UA" +"3255319552","3255319807","BG" +"3255319808","3255320063","AT" +"3255320064","3255320319","BE" +"3255320320","3255320575","AT" +"3255320576","3255321087","UA" +"3255321088","3255322111","PL" +"3255322112","3255323135","RU" +"3255323136","3255323647","GB" +"3255323648","3255324159","IL" +"3255324160","3255324671","CH" +"3255324672","3255325695","RO" +"3255325696","3255326207","RU" +"3255326208","3255326719","DE" +"3255326720","3255327231","IL" +"3255327232","3255327743","DE" +"3255327744","3255328255","GB" +"3255328256","3255328767","SI" +"3255328768","3255336959","DE" +"3255336960","3255341055","RU" +"3255341056","3255342079","UA" +"3255342080","3255343103","FR" +"3255343104","3255344127","RU" +"3255344128","3255345151","UA" +"3255345152","3255353343","RU" +"3255353344","3255361535","DE" +"3255361536","3255362047","RU" +"3255362048","3255362559","FI" +"3255362560","3255364607","RU" +"3255364608","3255365119","NL" +"3255365120","3255365631","SK" +"3255365632","3255366143","UA" +"3255366144","3255367167","DK" +"3255367168","3255367679","RU" +"3255367680","3255368191","UA" +"3255368192","3255368703","FR" +"3255368704","3255369215","CZ" +"3255369216","3255369727","GB" +"3255369728","3255370239","LU" +"3255370240","3255370751","RU" +"3255370752","3255371263","DE" +"3255371264","3255371775","BG" +"3255371776","3255372287","SE" +"3255372288","3255372799","DE" +"3255372800","3255373311","MC" +"3255373312","3255373823","UA" +"3255373824","3255374335","PL" +"3255374336","3255374847","RU" +"3255374848","3255375359","CY" +"3255375360","3255375871","RO" +"3255375872","3255376383","PL" +"3255376384","3255376895","UA" +"3255376896","3255377407","GB" +"3255377408","3255377919","KZ" +"3255377920","3255378431","GB" +"3255378432","3255378943","CH" +"3255378944","3255379455","UA" +"3255379456","3255379967","RU" +"3255379968","3255380479","GB" +"3255380480","3255380991","NL" +"3255380992","3255381503","CH" +"3255381504","3255382015","PL" +"3255382016","3255382527","NL" +"3255382528","3255383039","UA" +"3255383040","3255383551","PL" +"3255383552","3255384063","CH" +"3255384064","3255384575","RO" +"3255384576","3255385087","AT" +"3255385088","3255385599","RO" +"3255385600","3255386111","FR" +"3255386112","3255386623","KE" +"3255386624","3255387391","PL" +"3255387392","3255387647","RU" +"3255387648","3255388159","UA" +"3255388160","3255388671","DE" +"3255388672","3255389183","SE" +"3255389184","3255389695","GB" +"3255389696","3255390207","PL" +"3255390208","3255390719","GB" +"3255390720","3255391231","KE" +"3255391232","3255391743","NL" +"3255391744","3255392767","DE" +"3255392768","3255393791","RO" +"3255393792","3255399679","SE" +"3255399680","3255400447","DE" +"3255400448","3255400703","CH" +"3255400704","3255400959","EU" +"3255400960","3255401471","CH" +"3255401472","3255412479","DE" +"3255412480","3255412735","RO" +"3255412736","3255413247","DE" +"3255413248","3255413503","LV" +"3255413504","3255413759","UZ" +"3255413760","3255414271","GB" +"3255414272","3255414527","TR" +"3255414528","3255414783","LV" +"3255414784","3255415807","BE" +"3255415808","3255416319","AT" +"3255416320","3255416831","DE" +"3255416832","3255417855","FR" +"3255417856","3255418879","GB" +"3255418880","3255422975","DE" +"3255422976","3255423999","RO" +"3255424000","3255425023","LV" +"3255425024","3255426047","RO" +"3255426048","3255426559","IT" +"3255426560","3255426815","FR" +"3255426816","3255427071","PL" +"3255427072","3255431167","RU" +"3255431168","3255436543","GB" +"3255436544","3255436799","NL" +"3255436800","3255437055","DE" +"3255437056","3255437311","GB" +"3255437312","3255446527","EU" +"3255446528","3255446783","GB" +"3255446784","3255449599","EU" +"3255449600","3255450111","BE" +"3255450112","3255450367","GB" +"3255450368","3255450623","FR" +"3255450624","3255451135","DE" +"3255451136","3255452671","FR" +"3255452672","3255468031","EU" +"3255468032","3255468543","GB" +"3255468544","3255469055","EU" +"3255469056","3255469567","GB" +"3255469568","3255469823","DE" +"3255469824","3255470079","DK" +"3255470080","3255470591","AT" +"3255470592","3255470847","DE" +"3255470848","3255471103","HU" +"3255471104","3255471359","BE" +"3255471360","3255471615","EU" +"3255471616","3255471871","GB" +"3255471872","3255472127","BE" +"3255472128","3255472383","GB" +"3255472384","3255472639","BE" +"3255472640","3255472895","NL" +"3255472896","3255473151","BE" +"3255473152","3255473407","GB" +"3255473408","3255473663","CH" +"3255473664","3255473919","BE" +"3255473920","3255474175","NO" +"3255474176","3255476735","GB" +"3255476736","3255476991","IE" +"3255476992","3255477247","NL" +"3255477248","3255477503","GB" +"3255477504","3255477759","CH" +"3255477760","3255478271","GB" +"3255478272","3255482367","EU" +"3255482368","3255482623","GB" +"3255482624","3255482815","BE" +"3255482816","3255482831","FR" +"3255482832","3255482839","BE" +"3255482840","3255482847","FR" +"3255482848","3255482871","BE" +"3255482872","3255482879","EU" +"3255482880","3255483135","GB" +"3255483136","3255484415","DE" +"3255484416","3255484671","PL" +"3255484672","3255484927","NL" +"3255484928","3255485183","CH" +"3255485184","3255485439","AT" +"3255485440","3255486463","FR" +"3255486464","3255486719","BE" +"3255486720","3255486975","EU" +"3255486976","3255487487","GB" +"3255487488","3255487743","BE" +"3255487744","3255487999","GB" +"3255488000","3255488255","BE" +"3255488256","3255488511","GB" +"3255488512","3255489535","AT" +"3255489536","3255489887","DE" +"3255489888","3255490047","GB" +"3255490048","3255490559","DE" +"3255490560","3255492607","EU" +"3255492608","3255496703","GB" +"3255496704","3255497727","EU" +"3255497728","3255497983","BE" +"3255497984","3255498239","DE" +"3255498240","3255498495","FR" +"3255498496","3255498751","GB" +"3255498752","3255500799","FR" +"3255500800","3255504895","CH" +"3255504896","3255505151","RU" +"3255505152","3255505919","GB" +"3255505920","3255506431","RU" +"3255506432","3255506687","PL" +"3255506688","3255506943","PT" +"3255506944","3255507199","PL" +"3255507200","3255507455","PT" +"3255507456","3255507711","FR" +"3255507712","3255507967","AT" +"3255507968","3255508223","UA" +"3255508224","3255508479","RU" +"3255508480","3255521023","CH" +"3255521024","3255521279","EU" +"3255521280","3255544319","CH" +"3255544320","3255544575","DE" +"3255544576","3255544831","AT" +"3255544832","3255558143","CH" +"3255558144","3255558399","BE" +"3255558400","3255558655","UA" +"3255558656","3255564031","CH" +"3255564032","3255564287","RU" +"3255564288","3255566335","CH" +"3255566336","3255574527","SE" +"3255574528","3255578623","CZ" +"3255578624","3255582719","SE" +"3255582720","3255599103","UA" +"3255599104","3255615487","CH" +"3255615488","3255623679","DE" +"3255623680","3255631871","BG" +"3255631872","3255660287","NL" +"3255660288","3255660543","GR" +"3255660544","3255666431","NL" +"3255666432","3255666687","DE" +"3255666688","3255697407","NL" +"3255697408","3255698687","SE" +"3255698688","3255698943","GB" +"3255698944","3255710719","SE" +"3255710720","3255710975","ES" +"3255710976","3255724543","SE" +"3255724544","3255725055","US" +"3255725056","3255725311","ES" +"3255725312","3255730943","SE" +"3255730944","3255731199","GB" +"3255731200","3255739647","SE" +"3255739648","3255739903","GB" +"3255739904","3255742719","SE" +"3255742720","3255742975","SG" +"3255742976","3255743231","SE" +"3255743232","3255743487","IT" +"3255743488","3255743743","DE" +"3255743744","3255743999","US" +"3255744000","3255745535","SE" +"3255745536","3255746047","DK" +"3255746048","3255762943","SE" +"3255762944","3255791615","DE" +"3255791616","3255792639","UA" +"3255792640","3255793663","RU" +"3255793664","3255794943","PL" +"3255794944","3255795199","RU" +"3255795200","3255795711","UA" +"3255795712","3255799039","DE" +"3255799040","3255799295","SE" +"3255799296","3255800575","DE" +"3255800576","3255800831","UA" +"3255800832","3255817215","DE" +"3255817216","3255817471","SE" +"3255817472","3255817727","ES" +"3255817728","3255821311","DE" +"3255821312","3255821823","CH" +"3255821824","3255822079","DE" +"3255822080","3255822335","CH" +"3255822336","3255828479","DE" +"3255828480","3255851311","SE" +"3255851312","3255851315","DK" +"3255851316","3255909183","SE" +"3255909184","3255909191","DK" +"3255909192","3255947484","SE" +"3255947485","3255947485","EU" +"3255947486","3256025087","SE" +"3256025088","3256057855","NO" +"3256057856","3256076287","DK" +"3256076288","3256076799","SE" +"3256076800","3256082431","DK" +"3256082432","3256088063","LV" +"3256088064","3256088095","RU" +"3256088096","3256088103","LV" +"3256088104","3256088319","RU" +"3256088320","3256090623","LV" +"3256090624","3256164863","IT" +"3256164864","3256165375","SE" +"3256165376","3256187391","IT" +"3256187392","3256187647","SM" +"3256187648","3256221695","IT" +"3256221696","3256222207","SE" +"3256222208","3256222463","NL" +"3256222464","3256223743","SE" +"3256223744","3256226047","NL" +"3256226048","3256229887","SE" +"3256229888","3256233983","DE" +"3256233984","3256238079","SE" +"3256238080","3256246271","NO" +"3256246272","3256352767","SE" +"3256352768","3256353279","CH" +"3256353280","3256353535","EU" +"3256353536","3256385535","CH" +"3256385536","3256393727","AT" +"3256393728","3256394239","DE" +"3256394240","3256394751","UA" +"3256394752","3256395263","PL" +"3256395264","3256395775","GB" +"3256395776","3256396287","TR" +"3256396288","3256396799","GR" +"3256396800","3256397311","DE" +"3256397312","3256397823","PL" +"3256397824","3256398847","RO" +"3256398848","3256399359","PL" +"3256399360","3256400895","UA" +"3256400896","3256401407","GB" +"3256401408","3256401919","UA" +"3256401920","3256410111","DE" +"3256410112","3256410623","TR" +"3256410624","3256411135","GR" +"3256411136","3256411647","FR" +"3256411648","3256412159","DE" +"3256412160","3256412671","GB" +"3256412672","3256413183","RO" +"3256413184","3256413695","UA" +"3256413696","3256414207","PL" +"3256414208","3256414719","RU" +"3256414720","3256415231","DE" +"3256415232","3256415743","PL" +"3256415744","3256416255","UA" +"3256416256","3256416767","RS" +"3256416768","3256417279","GB" +"3256417280","3256417791","NO" +"3256417792","3256418303","GB" +"3256418304","3256444415","DE" +"3256444416","3256444671","EU" +"3256444672","3256446855","DE" +"3256446856","3256446863","US" +"3256446864","3256448575","DE" +"3256448576","3256448591","ES" +"3256448592","3256448935","DE" +"3256448936","3256448943","IT" +"3256448944","3256483839","DE" +"3256483840","3256489471","NL" +"3256489472","3256489983","GR" +"3256489984","3256490239","BE" +"3256490240","3256490495","DE" +"3256490496","3256513023","NL" +"3256513024","3256513279","GB" +"3256513280","3256513791","NL" +"3256513792","3256514047","GB" +"3256514048","3256524287","NL" +"3256524288","3256524799","DE" +"3256524800","3256528895","NL" +"3256528896","3256530943","DE" +"3256530944","3256549375","NL" +"3256549376","3256614911","TR" +"3256614912","3256615935","FI" +"3256615936","3256616959","UA" +"3256616960","3256617983","GB" +"3256617984","3256619007","PL" +"3256619008","3256620031","UA" +"3256620032","3256621055","RU" +"3256621056","3256622079","DK" +"3256622080","3256623103","RU" +"3256623104","3256624127","PL" +"3256624128","3256625151","UA" +"3256625152","3256626175","PL" +"3256626176","3256627199","UA" +"3256627200","3256628223","PL" +"3256628224","3256629247","UA" +"3256629248","3256630271","RU" +"3256630272","3256633343","UA" +"3256633344","3256634367","RU" +"3256634368","3256635391","MD" +"3256635392","3256636415","PL" +"3256636416","3256638463","UA" +"3256638464","3256640511","RU" +"3256640512","3256641535","UA" +"3256641536","3256642559","PL" +"3256642560","3256643583","SI" +"3256643584","3256644607","MD" +"3256644608","3256645631","IT" +"3256645632","3256646655","SE" +"3256646656","3256647679","GB" +"3256647680","3256648703","RS" +"3256648704","3256649727","UA" +"3256649728","3256650751","GB" +"3256650752","3256652799","UA" +"3256652800","3256653823","DE" +"3256653824","3256654847","RU" +"3256654848","3256655871","GB" +"3256655872","3256656895","RU" +"3256656896","3256657919","GB" +"3256657920","3256658943","PL" +"3256658944","3256662015","UA" +"3256662016","3256663039","RU" +"3256663040","3256664063","PL" +"3256664064","3256665087","RU" +"3256665088","3256666111","UA" +"3256666112","3256667135","PL" +"3256667136","3256671231","RU" +"3256671232","3256672255","PL" +"3256672256","3256673279","RU" +"3256673280","3256674303","PL" +"3256674304","3256675327","RO" +"3256675328","3256677375","RU" +"3256677376","3256678399","GB" +"3256678400","3256680447","DK" +"3256680448","3256688639","CH" +"3256688640","3256692735","IL" +"3256692736","3256693759","GR" +"3256693760","3256694783","IT" +"3256694784","3256695807","CH" +"3256695808","3256696831","UA" +"3256696832","3256697087","BE" +"3256697088","3256697599","EU" +"3256697600","3256697855","GB" +"3256697856","3256698367","IT" +"3256698368","3256698623","NL" +"3256698624","3256698879","GB" +"3256698880","3256699135","DE" +"3256699136","3256699391","NL" +"3256699392","3256700415","GB" +"3256700416","3256700671","NL" +"3256700672","3256700927","EU" +"3256700928","3256701183","DE" +"3256701184","3256701439","BE" +"3256701440","3256701951","GB" +"3256701952","3256705023","EU" +"3256705024","3256705279","IE" +"3256705280","3256705791","BE" +"3256705792","3256706047","AT" +"3256706048","3256706559","GR" +"3256706560","3256709631","EU" +"3256709632","3256709887","AT" +"3256709888","3256710143","EU" +"3256710144","3256710655","AT" +"3256710656","3256711167","SE" +"3256711168","3256711423","DE" +"3256711424","3256713215","EU" +"3256713216","3256727551","PL" +"3256727552","3256727807","DE" +"3256727808","3256728063","HU" +"3256728064","3256728575","RU" +"3256728576","3256729599","DE" +"3256729600","3256731647","FI" +"3256731648","3256732671","NO" +"3256732672","3256732927","IT" +"3256732928","3256733183","UA" +"3256733184","3256733439","FR" +"3256733440","3256733695","DK" +"3256733696","3256735743","TR" +"3256735744","3256737791","GB" +"3256737792","3256745983","DE" +"3256745984","3256778751","ES" +"3256778752","3256786943","CY" +"3256786944","3256787199","NL" +"3256787200","3256787455","RO" +"3256787456","3256787711","DE" +"3256787712","3256787967","UA" +"3256787968","3256788223","PL" +"3256788224","3256788479","RU" +"3256788480","3256788735","GB" +"3256788736","3256788991","DE" +"3256788992","3256789247","RO" +"3256789248","3256789503","SE" +"3256789504","3256789759","UA" +"3256789760","3256790015","GB" +"3256790016","3256790271","UA" +"3256790272","3256790783","DE" +"3256790784","3256791039","NL" +"3256791040","3256791295","CH" +"3256791296","3256791551","RO" +"3256791552","3256791807","GR" +"3256791808","3256792063","PL" +"3256792064","3256792319","DE" +"3256792320","3256792575","CH" +"3256792576","3256792831","NL" +"3256792832","3256793087","DE" +"3256793088","3256793343","GB" +"3256793344","3256793599","DE" +"3256793600","3256793855","GB" +"3256793856","3256794111","SK" +"3256794112","3256794367","NL" +"3256794368","3256794623","DK" +"3256794624","3256794879","RU" +"3256794880","3256795135","AT" +"3256795136","3256811519","GR" +"3256811520","3256819711","DE" +"3256819712","3256821503","PL" +"3256821504","3256821759","NO" +"3256821760","3256822271","PL" +"3256822272","3256822527","MD" +"3256822528","3256822783","PL" +"3256822784","3256823807","UA" +"3256823808","3256824319","PL" +"3256824320","3256824831","GB" +"3256824832","3256826111","RO" +"3256826112","3256826367","KW" +"3256826368","3256826623","IL" +"3256826624","3256826879","RU" +"3256826880","3256827135","PL" +"3256827136","3256827391","IS" +"3256827392","3256827647","GB" +"3256827648","3256827903","PL" +"3256827904","3256864511","DE" +"3256864512","3256864767","CH" +"3256864768","3256870911","DE" +"3256870912","3256871167","RU" +"3256871168","3256875007","DE" +"3256875008","3256875519","UA" +"3256875520","3256876031","RU" +"3256876032","3256876287","PL" +"3256876288","3256876543","RU" +"3256876544","3256877055","CH" +"3256877056","3256898559","GB" +"3256898560","3256899071","TR" +"3256899072","3256899583","RU" +"3256899584","3256915455","GB" +"3256915456","3256915967","SE" +"3256915968","3256945663","GB" +"3256945920","3256946175","GB" +"3256946176","3256946431","RO" +"3256946432","3256946687","UA" +"3256946688","3256946943","GB" +"3256946944","3256947199","EU" +"3256947200","3256947711","DE" +"3256947712","3256958975","GB" +"3256958976","3256959999","RO" +"3256960000","3256960255","SA" +"3256960256","3256960511","HU" +"3256960512","3256961023","SA" +"3256961024","3256962559","PL" +"3256962560","3256962815","FR" +"3256962816","3256963071","RU" +"3256963072","3256963327","SE" +"3256963328","3256963839","RU" +"3256963840","3256964095","PL" +"3256964096","3256965119","RU" +"3256965120","3256966143","RO" +"3256966144","3256967167","RU" +"3256967168","3256967423","NL" +"3256967424","3256967679","RU" +"3256967680","3256968191","CH" +"3256968192","3256969215","RO" +"3256969216","3256970239","IR" +"3256970240","3256970495","AT" +"3256970496","3256970751","GB" +"3256970752","3256971007","RU" +"3256971264","3256971775","NL" +"3256971776","3256972031","RU" +"3256972032","3256972287","DE" +"3256972288","3256973311","PL" +"3256973312","3256973823","DE" +"3256973824","3256975359","IR" +"3256975360","3256988671","GB" +"3256988672","3256988927","RU" +"3256988928","3256989183","UA" +"3256989184","3256989439","FR" +"3256989440","3256989695","GB" +"3256989696","3256989951","HU" +"3256989952","3256990207","PL" +"3256990208","3256990463","CH" +"3256990464","3256990719","PL" +"3256990720","3256991231","UA" +"3256991232","3256991487","SE" +"3256991488","3256991743","RU" +"3256991744","3257011199","GB" +"3257011200","3257011455","BG" +"3257011456","3257058815","GB" +"3257058816","3257059071","PL" +"3257059072","3257139199","GB" +"3257139200","3257139455","DK" +"3257139456","3257143295","GB" +"3257143296","3257143807","RU" +"3257143808","3257144063","DE" +"3257144064","3257144319","RU" +"3257144320","3257144575","AT" +"3257144576","3257144831","GB" +"3257144832","3257145087","FR" +"3257145088","3257180159","GB" +"3257180160","3257180415","TR" +"3257180416","3257180671","RU" +"3257180672","3257180927","EE" +"3257180928","3257181183","GB" +"3257181184","3257181439","SA" +"3257181440","3257181695","PL" +"3257181696","3257181951","FR" +"3257181952","3257182207","BG" +"3257182208","3257182463","PL" +"3257182464","3257196543","GB" +"3257196544","3257200639","LU" +"3257200640","3257204735","GB" +"3257204736","3257268223","AT" +"3257268224","3257268479","UA" +"3257268480","3257268735","SE" +"3257268736","3257269247","AT" +"3257269248","3257269503","IT" +"3257269504","3257270015","AT" +"3257270016","3257270271","DE" +"3257270272","3257286655","SE" +"3257286656","3257294847","CH" +"3257294848","3257303039","HU" +"3257303040","3257311231","PT" +"3257311232","3257311903","CH" +"3257311904","3257311911","ES" +"3257311912","3257335807","CH" +"3257335808","3257357311","DE" +"3257357312","3257357567","PT" +"3257357568","3257357823","SI" +"3257357824","3257371903","DE" +"3257371904","3257372159","EU" +"3257372160","3257372671","GB" +"3257372672","3257383679","DE" +"3257383680","3257383935","CH" +"3257383936","3257388799","DE" +"3257388800","3257389055","FR" +"3257389056","3257391615","DE" +"3257391616","3257391871","EU" +"3257391872","3257401343","DE" +"3257401344","3257453567","CH" +"3257453568","3257454591","RO" +"3257454592","3257455103","IT" +"3257455104","3257455359","RO" +"3257455360","3257455615","SI" +"3257455616","3257466879","CH" +"3257466880","3257467135","DE" +"3257467136","3257467391","GB" +"3257467392","3257467903","SE" +"3257467904","3257468927","IT" +"3257468928","3257469183","EU" +"3257469184","3257469439","IT" +"3257469440","3257469951","GB" +"3257469952","3257470975","PL" +"3257470976","3257475071","FI" +"3257475072","3257475327","ES" +"3257475328","3257475583","FI" +"3257475584","3257477119","DE" +"3257477120","3257477375","NL" +"3257477376","3257477887","SE" +"3257477888","3257480447","GB" +"3257480448","3257480959","NL" +"3257480960","3257481215","SE" +"3257481216","3257481471","GB" +"3257481472","3257481727","DE" +"3257481728","3257481983","FI" +"3257481984","3257482239","FR" +"3257482240","3257482751","RO" +"3257482752","3257483007","NL" +"3257483008","3257491455","CH" +"3257491456","3257495551","BE" +"3257495552","3257497855","CH" +"3257497856","3257499647","NL" +"3257499648","3257532415","CH" +"3257532416","3257542655","CY" +"3257542656","3257542911","PL" +"3257542912","3257543423","IT" +"3257543424","3257543679","PT" +"3257543680","3257544191","RO" +"3257544192","3257544447","DE" +"3257544448","3257544575","DK" +"3257544576","3257544703","DE" +"3257544704","3257544959","CH" +"3257544960","3257545215","DK" +"3257545216","3257546495","GR" +"3257546496","3257546527","DE" +"3257546528","3257546623","CH" +"3257546656","3257546687","SE" +"3257546688","3257546719","DE" +"3257546720","3257546751","DK" +"3257546752","3257548799","IE" +"3257548800","3257549823","GB" +"3257549824","3257550079","US" +"3257550080","3257550847","GB" +"3257550848","3257551103","HK" +"3257551104","3257556991","GB" +"3257556992","3257557503","MW" +"3257557504","3257558015","LU" +"3257558016","3257559551","RO" +"3257559552","3257560063","UA" +"3257560064","3257560575","DE" +"3257560576","3257561087","PL" +"3257561088","3257561599","UA" +"3257561600","3257562111","DE" +"3257562112","3257563647","PL" +"3257563648","3257564159","NL" +"3257564160","3257564671","GB" +"3257564672","3257565183","RO" +"3257565184","3257570303","CY" +"3257570304","3257570307","GR" +"3257570308","3257570311","CY" +"3257570312","3257570327","GR" +"3257570328","3257570367","CY" +"3257570368","3257570431","GR" +"3257570432","3257570495","CY" +"3257570496","3257570527","GR" +"3257570528","3257573375","CY" +"3257573376","3257574015","CH" +"3257574016","3257574143","BE" +"3257574144","3257574399","GB" +"3257574400","3257574655","IT" +"3257574656","3257576191","BE" +"3257576192","3257577471","AT" +"3257577472","3257581567","DE" +"3257581568","3257585663","UA" +"3257585664","3257586175","BE" +"3257586176","3257586687","NL" +"3257586688","3257586943","LU" +"3257586944","3257587455","ES" +"3257587456","3257587711","GB" +"3257587712","3257587967","US" +"3257587968","3257588223","FR" +"3257588224","3257588735","BE" +"3257588736","3257589759","NL" +"3257589760","3257663487","GB" +"3257663488","3257729023","UA" +"3257729024","3257731071","DE" +"3257731072","3257731567","NL" +"3257731568","3257731575","DE" +"3257731576","3257732095","NL" +"3257732096","3257732607","DE" +"3257732608","3257732727","NL" +"3257732728","3257732735","DE" +"3257732736","3257734143","NL" +"3257734144","3257736191","DE" +"3257736192","3257737119","NL" +"3257737120","3257737127","DE" +"3257737128","3257737471","NL" +"3257737472","3257743615","DE" +"3257743616","3257743623","NL" +"3257743624","3257743631","DE" +"3257743632","3257743951","NL" +"3257743952","3257743959","DE" +"3257743960","3257744111","NL" +"3257744112","3257744119","DE" +"3257744120","3257744671","NL" +"3257744672","3257744679","DE" +"3257744680","3257744871","NL" +"3257744872","3257744879","DE" +"3257744880","3257745119","NL" +"3257745120","3257745127","DE" +"3257745128","3257746527","NL" +"3257746528","3257746535","DE" +"3257746536","3257746647","NL" +"3257746648","3257746655","DE" +"3257746656","3257746671","NL" +"3257746672","3257746679","DE" +"3257746680","3257746919","NL" +"3257746920","3257746927","DE" +"3257746928","3257746943","NL" +"3257746944","3257747455","DE" +"3257747456","3257747471","NL" +"3257747472","3257747479","DE" +"3257747480","3257747607","NL" +"3257747608","3257747615","DE" +"3257747616","3257747655","NL" +"3257747656","3257747663","DE" +"3257747664","3257747847","NL" +"3257747848","3257747855","DE" +"3257747856","3257748015","NL" +"3257748016","3257748023","DE" +"3257748024","3257748063","NL" +"3257748064","3257748071","DE" +"3257748072","3257748455","NL" +"3257748456","3257748463","DE" +"3257748464","3257748479","NL" +"3257748480","3257749503","DE" +"3257749504","3257749663","NL" +"3257749664","3257749687","DE" +"3257749688","3257749743","NL" +"3257749744","3257749751","DE" +"3257749752","3257749759","NL" +"3257749760","3257749767","DE" +"3257749768","3257749783","NL" +"3257749784","3257749791","DE" +"3257749792","3257749863","NL" +"3257749864","3257749871","DE" +"3257749872","3257749943","NL" +"3257749944","3257749951","DE" +"3257749952","3257750015","NL" +"3257750016","3257750023","DE" +"3257750024","3257750071","NL" +"3257750072","3257750079","DE" +"3257750080","3257750151","NL" +"3257750152","3257750159","DE" +"3257750160","3257750231","NL" +"3257750232","3257750239","DE" +"3257750240","3257750359","NL" +"3257750360","3257750367","DE" +"3257750368","3257750471","NL" +"3257750472","3257750479","DE" +"3257750480","3257750615","NL" +"3257750616","3257750623","DE" +"3257750624","3257750631","NL" +"3257750632","3257750639","DE" +"3257750640","3257750655","NL" +"3257750656","3257750663","DE" +"3257750664","3257750671","NL" +"3257750672","3257750679","DE" +"3257750680","3257750735","NL" +"3257750736","3257750743","DE" +"3257750744","3257750759","NL" +"3257750760","3257750767","DE" +"3257750768","3257750919","NL" +"3257750920","3257750935","DE" +"3257750936","3257751031","NL" +"3257751032","3257751039","DE" +"3257751040","3257751199","NL" +"3257751200","3257751207","DE" +"3257751208","3257751215","NL" +"3257751216","3257751223","DE" +"3257751224","3257751247","NL" +"3257751248","3257751263","DE" +"3257751264","3257751279","NL" +"3257751280","3257751287","DE" +"3257751288","3257751351","NL" +"3257751352","3257751359","DE" +"3257751360","3257751623","NL" +"3257751624","3257751631","DE" +"3257751632","3257751639","NL" +"3257751640","3257751647","DE" +"3257751648","3257751711","NL" +"3257751712","3257751719","DE" +"3257751720","3257751823","NL" +"3257751824","3257751831","DE" +"3257751832","3257751871","NL" +"3257751872","3257751887","DE" +"3257751888","3257751903","NL" +"3257751904","3257751911","DE" +"3257751912","3257751975","NL" +"3257751976","3257751983","DE" +"3257751984","3257752023","NL" +"3257752024","3257752031","DE" +"3257752032","3257752071","NL" +"3257752072","3257752079","DE" +"3257752080","3257752103","NL" +"3257752104","3257752111","DE" +"3257752112","3257752135","NL" +"3257752136","3257752143","DE" +"3257752144","3257752167","NL" +"3257752168","3257752183","DE" +"3257752184","3257752399","NL" +"3257752400","3257752407","DE" +"3257752408","3257752495","NL" +"3257752496","3257752503","DE" +"3257752504","3257752527","NL" +"3257752528","3257752543","DE" +"3257752544","3257752583","NL" +"3257752584","3257752591","DE" +"3257752592","3257752607","NL" +"3257752608","3257752615","DE" +"3257752616","3257752623","NL" +"3257752624","3257752631","DE" +"3257752632","3257752727","NL" +"3257752728","3257752735","DE" +"3257752736","3257752783","NL" +"3257752784","3257752791","DE" +"3257752792","3257752799","NL" +"3257752800","3257752807","DE" +"3257752808","3257752919","NL" +"3257752920","3257752935","DE" +"3257752936","3257753087","NL" +"3257753088","3257756671","DE" +"3257756672","3257756735","NL" +"3257756736","3257756743","DE" +"3257756744","3257756807","NL" +"3257756808","3257756823","DE" +"3257756824","3257756887","NL" +"3257756888","3257756895","DE" +"3257756896","3257756919","NL" +"3257756920","3257756927","DE" +"3257756928","3257757007","NL" +"3257757008","3257757015","DE" +"3257757016","3257757343","NL" +"3257757344","3257757351","DE" +"3257757352","3257757375","NL" +"3257757376","3257757383","DE" +"3257757384","3257757407","NL" +"3257757408","3257757423","DE" +"3257757424","3257757511","NL" +"3257757512","3257757519","DE" +"3257757520","3257757639","NL" +"3257757640","3257757647","DE" +"3257757648","3257757735","NL" +"3257757736","3257757751","DE" +"3257757752","3257757799","NL" +"3257757800","3257757807","DE" +"3257757808","3257757815","NL" +"3257757816","3257757831","DE" +"3257757832","3257757919","NL" +"3257757920","3257757935","DE" +"3257757936","3257758143","NL" +"3257758144","3257758151","DE" +"3257758152","3257758239","NL" +"3257758240","3257758247","DE" +"3257758248","3257758271","NL" +"3257758272","3257758279","DE" +"3257758280","3257758335","NL" +"3257758336","3257758343","DE" +"3257758344","3257758375","NL" +"3257758376","3257758383","DE" +"3257758384","3257758423","NL" +"3257758424","3257758431","DE" +"3257758432","3257758511","NL" +"3257758512","3257758519","DE" +"3257758520","3257758567","NL" +"3257758568","3257758575","DE" +"3257758576","3257758623","NL" +"3257758624","3257758639","DE" +"3257758640","3257758647","NL" +"3257758648","3257758655","DE" +"3257758656","3257758855","NL" +"3257758856","3257758863","DE" +"3257758864","3257758879","NL" +"3257758880","3257758887","DE" +"3257758888","3257758927","NL" +"3257758928","3257758935","DE" +"3257758936","3257759087","NL" +"3257759088","3257759095","DE" +"3257759096","3257759135","NL" +"3257759136","3257759151","DE" +"3257759152","3257759159","NL" +"3257759160","3257759167","DE" +"3257759168","3257759255","NL" +"3257759256","3257759263","DE" +"3257759264","3257759271","NL" +"3257759272","3257759279","DE" +"3257759280","3257759287","NL" +"3257759288","3257759295","DE" +"3257759296","3257759415","NL" +"3257759416","3257759423","DE" +"3257759424","3257759647","NL" +"3257759648","3257759671","DE" +"3257759672","3257759735","NL" +"3257759736","3257759743","DE" +"3257759744","3257759791","NL" +"3257759792","3257759799","DE" +"3257759800","3257759847","NL" +"3257759848","3257759863","DE" +"3257759864","3257759871","NL" +"3257759872","3257759879","DE" +"3257759880","3257759887","NL" +"3257759888","3257759903","DE" +"3257759904","3257759975","NL" +"3257759976","3257759983","DE" +"3257759984","3257760015","NL" +"3257760016","3257760023","DE" +"3257760024","3257760039","NL" +"3257760040","3257760047","DE" +"3257760048","3257760095","NL" +"3257760096","3257760103","DE" +"3257760104","3257760167","NL" +"3257760168","3257760175","DE" +"3257760176","3257760231","NL" +"3257760232","3257760239","DE" +"3257760240","3257760263","NL" +"3257760264","3257760271","DE" +"3257760272","3257760303","NL" +"3257760304","3257760311","DE" +"3257760312","3257760359","NL" +"3257760360","3257760367","DE" +"3257760368","3257760431","NL" +"3257760432","3257760439","DE" +"3257760440","3257760495","NL" +"3257760496","3257760503","DE" +"3257760504","3257760559","NL" +"3257760560","3257760567","DE" +"3257760568","3257760655","NL" +"3257760656","3257760663","DE" +"3257760664","3257760791","NL" +"3257760792","3257760799","DE" +"3257760800","3257760839","NL" +"3257760840","3257760847","DE" +"3257760848","3257760863","NL" +"3257760864","3257760871","DE" +"3257760872","3257760927","NL" +"3257760928","3257760935","DE" +"3257760936","3257760959","NL" +"3257760960","3257760967","DE" +"3257760968","3257761055","NL" +"3257761056","3257761071","DE" +"3257761072","3257761151","NL" +"3257761152","3257761159","DE" +"3257761160","3257761279","NL" +"3257761280","3257761791","DE" +"3257761792","3257761839","NL" +"3257761840","3257761847","DE" +"3257761848","3257761879","NL" +"3257761880","3257761887","DE" +"3257761888","3257761903","NL" +"3257761904","3257761919","DE" +"3257761920","3257761951","NL" +"3257761952","3257761959","DE" +"3257761960","3257762023","NL" +"3257762024","3257762031","DE" +"3257762032","3257762175","NL" +"3257762176","3257762183","DE" +"3257762184","3257762215","NL" +"3257762216","3257762223","DE" +"3257762224","3257762247","NL" +"3257762248","3257762263","DE" +"3257762264","3257762359","NL" +"3257762360","3257762367","DE" +"3257762368","3257762391","NL" +"3257762392","3257762399","DE" +"3257762400","3257762407","NL" +"3257762408","3257762415","DE" +"3257762416","3257762447","NL" +"3257762448","3257762455","DE" +"3257762456","3257762591","NL" +"3257762592","3257762599","DE" +"3257762600","3257762655","NL" +"3257762656","3257762663","DE" +"3257762664","3257762679","NL" +"3257762680","3257762695","DE" +"3257762696","3257762711","NL" +"3257762712","3257762719","DE" +"3257762720","3257762807","NL" +"3257762808","3257762815","DE" +"3257762816","3257762863","NL" +"3257762864","3257762871","DE" +"3257762872","3257762951","NL" +"3257762952","3257762959","DE" +"3257762960","3257763055","NL" +"3257763056","3257763063","DE" +"3257763064","3257763151","NL" +"3257763152","3257763159","DE" +"3257763160","3257763247","NL" +"3257763248","3257763255","DE" +"3257763256","3257763327","NL" +"3257763328","3257763839","DE" +"3257763840","3257763855","NL" +"3257763856","3257763871","DE" +"3257763872","3257763927","NL" +"3257763928","3257763935","DE" +"3257763936","3257763943","NL" +"3257763944","3257763951","DE" +"3257763952","3257763999","NL" +"3257764000","3257764007","DE" +"3257764008","3257764247","NL" +"3257764248","3257764255","DE" +"3257764256","3257764287","NL" +"3257764288","3257764295","DE" +"3257764296","3257764487","NL" +"3257764488","3257764511","DE" +"3257764512","3257764543","NL" +"3257764544","3257764551","DE" +"3257764552","3257764591","NL" +"3257764592","3257764599","DE" +"3257764600","3257764647","NL" +"3257764648","3257764655","DE" +"3257764656","3257764799","NL" +"3257764800","3257764807","DE" +"3257764808","3257764879","NL" +"3257764880","3257764887","DE" +"3257764888","3257764927","NL" +"3257764928","3257764935","DE" +"3257764936","3257764983","NL" +"3257764984","3257764991","DE" +"3257764992","3257765055","NL" +"3257765056","3257765063","DE" +"3257765064","3257765263","NL" +"3257765264","3257765279","DE" +"3257765280","3257765375","NL" +"3257765376","3257768959","DE" +"3257768960","3257769071","NL" +"3257769072","3257769079","DE" +"3257769080","3257769215","NL" +"3257769216","3257769223","DE" +"3257769224","3257769543","NL" +"3257769544","3257769551","DE" +"3257769552","3257769567","NL" +"3257769568","3257769575","DE" +"3257769576","3257769703","NL" +"3257769704","3257769711","DE" +"3257769712","3257769719","NL" +"3257769720","3257769727","DE" +"3257769728","3257770023","NL" +"3257770024","3257770031","DE" +"3257770032","3257770039","NL" +"3257770040","3257770047","DE" +"3257770048","3257770071","NL" +"3257770072","3257770079","DE" +"3257770080","3257770095","NL" +"3257770096","3257770103","DE" +"3257770104","3257770151","NL" +"3257770152","3257770159","DE" +"3257770160","3257770295","NL" +"3257770296","3257770303","DE" +"3257770304","3257770359","NL" +"3257770360","3257770367","DE" +"3257770368","3257770455","NL" +"3257770456","3257770463","DE" +"3257770464","3257770511","NL" +"3257770512","3257770519","DE" +"3257770520","3257770599","NL" +"3257770600","3257770607","DE" +"3257770608","3257770623","NL" +"3257770624","3257770631","DE" +"3257770632","3257770823","NL" +"3257770824","3257770831","DE" +"3257770832","3257770911","NL" +"3257770912","3257770919","DE" +"3257770920","3257771007","NL" +"3257771008","3257772543","DE" +"3257772544","3257772631","NL" +"3257772632","3257772639","DE" +"3257772640","3257772735","NL" +"3257772736","3257772743","DE" +"3257772744","3257772783","NL" +"3257772784","3257772791","DE" +"3257772792","3257772815","NL" +"3257772816","3257772831","DE" +"3257772832","3257772847","NL" +"3257772848","3257772855","DE" +"3257772856","3257772895","NL" +"3257772896","3257772903","DE" +"3257772904","3257772991","NL" +"3257772992","3257772999","DE" +"3257773000","3257773095","NL" +"3257773096","3257773103","DE" +"3257773104","3257773199","NL" +"3257773200","3257773223","DE" +"3257773224","3257773303","NL" +"3257773304","3257773311","DE" +"3257773312","3257773391","NL" +"3257773392","3257773399","DE" +"3257773400","3257773415","NL" +"3257773416","3257773423","DE" +"3257773424","3257773439","NL" +"3257773440","3257773447","DE" +"3257773448","3257773767","NL" +"3257773768","3257773775","DE" +"3257773776","3257773799","NL" +"3257773800","3257773807","DE" +"3257773808","3257773831","NL" +"3257773832","3257773839","DE" +"3257773840","3257773847","NL" +"3257773848","3257773855","DE" +"3257773856","3257773903","NL" +"3257773904","3257773919","DE" +"3257773920","3257773951","NL" +"3257773952","3257773959","DE" +"3257773960","3257774007","NL" +"3257774008","3257774015","DE" +"3257774016","3257774055","NL" +"3257774056","3257774063","DE" +"3257774064","3257774287","NL" +"3257774288","3257774295","DE" +"3257774296","3257774335","NL" +"3257774336","3257774343","DE" +"3257774344","3257774359","NL" +"3257774360","3257774367","DE" +"3257774368","3257774375","NL" +"3257774376","3257774383","DE" +"3257774384","3257774487","NL" +"3257774488","3257774495","DE" +"3257774496","3257774775","NL" +"3257774776","3257774791","DE" +"3257774792","3257774871","NL" +"3257774872","3257774879","DE" +"3257774880","3257774951","NL" +"3257774952","3257774959","DE" +"3257774960","3257774983","NL" +"3257774984","3257774999","DE" +"3257775000","3257775047","NL" +"3257775048","3257775055","DE" +"3257775056","3257775103","NL" +"3257775104","3257776639","DE" +"3257776640","3257776663","NL" +"3257776664","3257776671","DE" +"3257776672","3257776727","NL" +"3257776728","3257776735","DE" +"3257776736","3257776767","NL" +"3257776768","3257776775","DE" +"3257776776","3257776983","NL" +"3257776984","3257776991","DE" +"3257776992","3257777047","NL" +"3257777048","3257777055","DE" +"3257777056","3257777111","NL" +"3257777112","3257777119","DE" +"3257777120","3257777151","NL" +"3257777152","3257777159","DE" +"3257777160","3257777223","NL" +"3257777224","3257777231","DE" +"3257777232","3257777335","NL" +"3257777336","3257777343","DE" +"3257777344","3257777487","NL" +"3257777488","3257777495","DE" +"3257777496","3257777551","NL" +"3257777552","3257777559","DE" +"3257777560","3257777575","NL" +"3257777576","3257777583","DE" +"3257777584","3257777751","NL" +"3257777752","3257777767","DE" +"3257777768","3257777799","NL" +"3257777800","3257777807","DE" +"3257777808","3257777935","NL" +"3257777936","3257777943","DE" +"3257777944","3257777991","NL" +"3257777992","3257777999","DE" +"3257778000","3257778023","NL" +"3257778024","3257778031","DE" +"3257778032","3257778047","NL" +"3257778048","3257778055","DE" +"3257778056","3257778071","NL" +"3257778072","3257778079","DE" +"3257778080","3257778087","NL" +"3257778088","3257778095","DE" +"3257778096","3257778159","NL" +"3257778160","3257778167","DE" +"3257778168","3257778439","NL" +"3257778440","3257778447","DE" +"3257778448","3257778479","NL" +"3257778480","3257778487","DE" +"3257778488","3257778503","NL" +"3257778504","3257778511","DE" +"3257778512","3257778583","NL" +"3257778584","3257778591","DE" +"3257778592","3257778663","NL" +"3257778664","3257778671","DE" +"3257778672","3257778815","NL" +"3257778816","3257778823","DE" +"3257778824","3257778895","NL" +"3257778896","3257778903","DE" +"3257778904","3257778943","NL" +"3257778944","3257778951","DE" +"3257778952","3257778959","NL" +"3257778960","3257778975","DE" +"3257778976","3257779055","NL" +"3257779056","3257779063","DE" +"3257779064","3257779079","NL" +"3257779080","3257779087","DE" +"3257779088","3257779111","NL" +"3257779112","3257779127","DE" +"3257779128","3257779199","NL" +"3257779200","3257780735","DE" +"3257780736","3257780743","NL" +"3257780744","3257780751","DE" +"3257780752","3257780775","NL" +"3257780776","3257780783","DE" +"3257780784","3257780967","NL" +"3257780968","3257780983","DE" +"3257780984","3257781111","NL" +"3257781112","3257781119","DE" +"3257781120","3257781135","NL" +"3257781136","3257781143","DE" +"3257781144","3257781255","NL" +"3257781256","3257781263","DE" +"3257781264","3257781279","NL" +"3257781280","3257781287","DE" +"3257781288","3257781391","NL" +"3257781392","3257781399","DE" +"3257781400","3257781479","NL" +"3257781480","3257781487","DE" +"3257781488","3257781567","NL" +"3257781568","3257781575","DE" +"3257781576","3257781615","NL" +"3257781616","3257781623","DE" +"3257781624","3257781639","NL" +"3257781640","3257781647","DE" +"3257781648","3257781711","NL" +"3257781712","3257781719","DE" +"3257781720","3257781791","NL" +"3257781792","3257781799","DE" +"3257781800","3257781839","NL" +"3257781840","3257781847","DE" +"3257781848","3257781895","NL" +"3257781896","3257781903","DE" +"3257781904","3257781919","NL" +"3257781920","3257781927","DE" +"3257781928","3257781943","NL" +"3257781944","3257781951","DE" +"3257781952","3257781975","NL" +"3257781976","3257781999","DE" +"3257782000","3257782015","NL" +"3257782016","3257782023","DE" +"3257782024","3257782031","NL" +"3257782032","3257782039","DE" +"3257782040","3257782103","NL" +"3257782104","3257782111","DE" +"3257782112","3257782191","NL" +"3257782192","3257782207","DE" +"3257782208","3257782239","NL" +"3257782240","3257782247","DE" +"3257782248","3257782271","NL" +"3257782272","3257784831","DE" +"3257784832","3257785087","NL" +"3257785088","3257785095","DE" +"3257785096","3257785151","NL" +"3257785152","3257785159","DE" +"3257785160","3257785183","NL" +"3257785184","3257785191","DE" +"3257785192","3257785343","NL" +"3257785344","3257785359","DE" +"3257785360","3257785375","NL" +"3257785376","3257785383","DE" +"3257785384","3257785415","NL" +"3257785416","3257785431","DE" +"3257785432","3257785663","NL" +"3257785664","3257785671","DE" +"3257785672","3257785679","NL" +"3257785680","3257785695","DE" +"3257785696","3257785719","NL" +"3257785720","3257785727","DE" +"3257785728","3257785735","NL" +"3257785736","3257785743","DE" +"3257785744","3257785807","NL" +"3257785808","3257785815","DE" +"3257785816","3257786079","NL" +"3257786080","3257786087","DE" +"3257786088","3257786271","NL" +"3257786272","3257786279","DE" +"3257786280","3257786335","NL" +"3257786336","3257786343","DE" +"3257786344","3257786359","NL" +"3257786360","3257786367","DE" +"3257786368","3257786383","NL" +"3257786384","3257786391","DE" +"3257786392","3257786415","NL" +"3257786416","3257786423","DE" +"3257786424","3257786431","NL" +"3257786432","3257786439","DE" +"3257786440","3257786559","NL" +"3257786560","3257786567","DE" +"3257786568","3257786623","NL" +"3257786624","3257786631","DE" +"3257786632","3257786647","NL" +"3257786648","3257786655","DE" +"3257786656","3257786703","NL" +"3257786704","3257786711","DE" +"3257786712","3257786807","NL" +"3257786808","3257786823","DE" +"3257786824","3257786839","NL" +"3257786840","3257786847","DE" +"3257786848","3257786863","NL" +"3257786864","3257786871","DE" +"3257786872","3257786879","NL" +"3257786880","3257787391","DE" +"3257787392","3257787503","NL" +"3257787504","3257787511","DE" +"3257787512","3257787695","NL" +"3257787696","3257787703","DE" +"3257787704","3257787727","NL" +"3257787728","3257787735","DE" +"3257787736","3257787751","NL" +"3257787752","3257787759","DE" +"3257787760","3257787879","NL" +"3257787880","3257787887","DE" +"3257787888","3257787911","NL" +"3257787912","3257787919","DE" +"3257787920","3257787967","NL" +"3257787968","3257787975","DE" +"3257787976","3257787999","NL" +"3257788000","3257788015","DE" +"3257788016","3257788071","NL" +"3257788072","3257788079","DE" +"3257788080","3257788095","NL" +"3257788096","3257788103","DE" +"3257788104","3257788119","NL" +"3257788120","3257788127","DE" +"3257788128","3257788175","NL" +"3257788176","3257788183","DE" +"3257788184","3257788231","NL" +"3257788232","3257788239","DE" +"3257788240","3257788247","NL" +"3257788248","3257788255","DE" +"3257788256","3257788415","NL" +"3257788416","3257789951","DE" +"3257789952","3257789975","NL" +"3257789976","3257789983","DE" +"3257789984","3257789999","NL" +"3257790000","3257790007","DE" +"3257790008","3257790039","NL" +"3257790040","3257790047","DE" +"3257790048","3257790159","NL" +"3257790160","3257790167","DE" +"3257790168","3257790191","NL" +"3257790192","3257790199","DE" +"3257790200","3257790239","NL" +"3257790240","3257790247","DE" +"3257790248","3257790255","NL" +"3257790256","3257790263","DE" +"3257790264","3257790319","NL" +"3257790320","3257790327","DE" +"3257790328","3257790391","NL" +"3257790392","3257790407","DE" +"3257790408","3257790479","NL" +"3257790480","3257790503","DE" +"3257790504","3257790623","NL" +"3257790624","3257790639","DE" +"3257790640","3257790663","NL" +"3257790664","3257790671","DE" +"3257790672","3257790711","NL" +"3257790712","3257790719","DE" +"3257790720","3257790847","NL" +"3257790848","3257790855","DE" +"3257790856","3257790903","NL" +"3257790904","3257790919","DE" +"3257790920","3257790975","NL" +"3257790976","3257790991","DE" +"3257790992","3257790999","NL" +"3257791000","3257791007","DE" +"3257791008","3257791015","NL" +"3257791016","3257791023","DE" +"3257791024","3257791047","NL" +"3257791048","3257791055","DE" +"3257791056","3257791151","NL" +"3257791152","3257791159","DE" +"3257791160","3257791223","NL" +"3257791224","3257791231","DE" +"3257791232","3257791255","NL" +"3257791256","3257791263","DE" +"3257791264","3257791271","NL" +"3257791272","3257791287","DE" +"3257791288","3257791327","NL" +"3257791328","3257791335","DE" +"3257791336","3257791359","NL" +"3257791360","3257791375","DE" +"3257791376","3257791503","NL" +"3257791504","3257791511","DE" +"3257791512","3257791527","NL" +"3257791528","3257791535","DE" +"3257791536","3257791623","NL" +"3257791624","3257791631","DE" +"3257791632","3257791703","NL" +"3257791704","3257791711","DE" +"3257791712","3257791727","NL" +"3257791728","3257791743","DE" +"3257791744","3257791831","NL" +"3257791832","3257791839","DE" +"3257791840","3257791863","NL" +"3257791864","3257791871","DE" +"3257791872","3257791879","NL" +"3257791880","3257791887","DE" +"3257791888","3257791895","NL" +"3257791896","3257791903","DE" +"3257791904","3257791951","NL" +"3257791952","3257791959","DE" +"3257791960","3257792095","NL" +"3257792096","3257792103","DE" +"3257792104","3257792127","NL" +"3257792128","3257792135","DE" +"3257792136","3257792143","NL" +"3257792144","3257792159","DE" +"3257792160","3257792191","NL" +"3257792192","3257792199","DE" +"3257792200","3257792207","NL" +"3257792208","3257792215","DE" +"3257792216","3257792383","NL" +"3257792384","3257792391","DE" +"3257792392","3257792399","NL" +"3257792400","3257792407","DE" +"3257792408","3257792487","NL" +"3257792488","3257792495","DE" +"3257792496","3257792503","NL" +"3257792504","3257792511","DE" +"3257792512","3257792607","NL" +"3257792608","3257792615","DE" +"3257792616","3257792719","NL" +"3257792720","3257792727","DE" +"3257792728","3257792783","NL" +"3257792784","3257792791","DE" +"3257792792","3257792927","NL" +"3257792928","3257792935","DE" +"3257792936","3257793087","NL" +"3257793088","3257793095","DE" +"3257793096","3257793167","NL" +"3257793168","3257793175","DE" +"3257793176","3257793215","NL" +"3257793216","3257793223","DE" +"3257793224","3257793391","NL" +"3257793392","3257793399","DE" +"3257793400","3257793415","NL" +"3257793416","3257793431","DE" +"3257793432","3257793439","NL" +"3257793440","3257793447","DE" +"3257793448","3257793519","NL" +"3257793520","3257793527","DE" +"3257793528","3257793551","NL" +"3257793552","3257793559","DE" +"3257793560","3257793839","NL" +"3257793840","3257793847","DE" +"3257793848","3257793919","NL" +"3257793920","3257793927","DE" +"3257793928","3257793951","NL" +"3257793952","3257793959","DE" +"3257793960","3257794095","NL" +"3257794096","3257794103","DE" +"3257794104","3257794135","NL" +"3257794136","3257794143","DE" +"3257794144","3257794351","NL" +"3257794352","3257794359","DE" +"3257794360","3257794511","NL" +"3257794512","3257794519","DE" +"3257794520","3257794559","NL" +"3257794560","3257827327","GB" +"3257827328","3257827839","IE" +"3257827840","3257829375","GB" +"3257829376","3257830399","IE" +"3257830400","3257835519","GB" +"3257835520","3257860095","IE" +"3257860096","3257925631","SE" +"3257925632","3257925887","AT" +"3257925888","3257926143","SE" +"3257926144","3257970431","AT" +"3257970432","3257970687","UA" +"3257970688","3257977855","AT" +"3257977856","3257978111","GB" +"3257978112","3257978367","SE" +"3257978368","3257978623","BG" +"3257978624","3257978879","ES" +"3257978880","3257979135","FR" +"3257979136","3257979391","UA" +"3257979392","3257979647","GB" +"3257979648","3257979903","DE" +"3257979904","3257980159","UA" +"3257980160","3257980415","SE" +"3257980416","3257980671","NL" +"3257980672","3257980927","CH" +"3257980928","3257981183","PL" +"3257981184","3257981439","GB" +"3257981440","3257981695","RU" +"3257981696","3257981951","PL" +"3257981952","3257987327","AT" +"3257987328","3257987583","CZ" +"3257987584","3257991167","AT" +"3257991168","3258003967","DE" +"3258003968","3258004479","RU" +"3258004480","3258021887","DE" +"3258021888","3258022911","RU" +"3258022912","3258023167","PL" +"3258023168","3258023423","DE" +"3258023680","3258023935","RU" +"3258023936","3258056703","DE" +"3258056704","3258056959","UA" +"3258056960","3258058239","CZ" +"3258058240","3258058495","RU" +"3258058496","3258059007","RO" +"3258059008","3258059263","UA" +"3258059264","3258059519","RU" +"3258059520","3258059775","RO" +"3258059776","3258062847","CZ" +"3258062848","3258063103","RU" +"3258063104","3258063871","CZ" +"3258063872","3258064127","AT" +"3258064128","3258064383","FR" +"3258064384","3258065151","GB" +"3258065152","3258065407","DE" +"3258065408","3258065663","LI" +"3258065664","3258065919","SA" +"3258065920","3258066175","DE" +"3258066176","3258066431","PL" +"3258066432","3258066943","FR" +"3258066944","3258067199","DK" +"3258067200","3258067455","GB" +"3258067456","3258067967","GR" +"3258067968","3258068223","RO" +"3258068224","3258068479","CH" +"3258068480","3258068735","GB" +"3258068736","3258068991","DE" +"3258068992","3258069247","NL" +"3258069248","3258069503","PL" +"3258069504","3258069759","RO" +"3258069760","3258070015","UA" +"3258070016","3258070271","GB" +"3258070272","3258070527","PL" +"3258070528","3258071295","GB" +"3258071296","3258071551","DK" +"3258071552","3258071807","DE" +"3258071808","3258072063","GB" +"3258072064","3258072319","FR" +"3258072320","3258072575","PL" +"3258072576","3258072831","BE" +"3258072832","3258073087","RO" +"3258073088","3258074111","CZ" +"3258074112","3258074879","DE" +"3258074880","3258075135","IL" +"3258075136","3258075391","RO" +"3258075392","3258075647","BG" +"3258075648","3258075903","FR" +"3258075904","3258076159","PL" +"3258076160","3258076415","BG" +"3258076416","3258076927","FR" +"3258076928","3258077183","UA" +"3258077184","3258077439","GB" +"3258077440","3258077695","UA" +"3258077696","3258077951","NL" +"3258077952","3258078207","PL" +"3258078208","3258078463","TR" +"3258078464","3258078719","UA" +"3258078720","3258078975","GB" +"3258078976","3258079231","RU" +"3258079232","3258079487","GB" +"3258079488","3258079743","PL" +"3258079744","3258079999","GB" +"3258080000","3258080255","BE" +"3258080256","3258080511","FR" +"3258080512","3258080767","DE" +"3258080768","3258081023","GB" +"3258081024","3258081279","FR" +"3258081280","3258081535","NL" +"3258081536","3258081791","BE" +"3258081792","3258082047","UA" +"3258082048","3258082303","NL" +"3258082304","3258082559","CZ" +"3258082560","3258082815","HU" +"3258082816","3258083071","NL" +"3258083072","3258083583","RU" +"3258083584","3258083839","LV" +"3258083840","3258084351","SE" +"3258084352","3258084607","GB" +"3258084608","3258084863","AT" +"3258084864","3258085119","PL" +"3258085120","3258085375","LT" +"3258085376","3258085631","NL" +"3258085632","3258085887","DE" +"3258085888","3258086143","UA" +"3258086144","3258086399","AT" +"3258086400","3258086655","RU" +"3258086656","3258086911","PL" +"3258086912","3258087167","GB" +"3258087168","3258087423","UA" +"3258087424","3258087679","RU" +"3258087680","3258087935","GB" +"3258087936","3258088191","BG" +"3258088192","3258088447","PL" +"3258088448","3258088703","BE" +"3258088704","3258088959","UA" +"3258088960","3258089215","RO" +"3258089216","3258089471","FR" +"3258089472","3258090495","RU" +"3258090496","3258091519","PL" +"3258091520","3258092287","SI" +"3258092288","3258092543","RU" +"3258092544","3258092799","SE" +"3258092800","3258093567","RU" +"3258093568","3258094591","UA" +"3258094592","3258095359","RU" +"3258095360","3258095615","AT" +"3258095616","3258095871","RU" +"3258095872","3258096383","GB" +"3258096384","3258097663","PL" +"3258097664","3258097919","DE" +"3258097920","3258098175","UA" +"3258098176","3258098431","DE" +"3258098432","3258098687","NL" +"3258098688","3258098943","DE" +"3258098944","3258099199","GB" +"3258099200","3258099455","SI" +"3258099456","3258099711","UA" +"3258099712","3258099967","FI" +"3258099968","3258100223","UA" +"3258100224","3258100479","RO" +"3258100480","3258100735","DK" +"3258100736","3258100991","CH" +"3258100992","3258101247","AT" +"3258101248","3258101503","RO" +"3258101504","3258101759","IL" +"3258101760","3258102015","CH" +"3258102016","3258102271","BE" +"3258102272","3258102527","CH" +"3258102528","3258102783","TR" +"3258102784","3258103039","PL" +"3258103040","3258103295","SE" +"3258103296","3258103551","DE" +"3258103552","3258103807","AE" +"3258103808","3258104063","SE" +"3258104064","3258104319","GB" +"3258104320","3258104575","PL" +"3258104576","3258104831","DE" +"3258104832","3258105599","CZ" +"3258105600","3258105855","DE" +"3258105856","3258109951","CZ" +"3258109952","3258110207","DK" +"3258110208","3258111487","CZ" +"3258111488","3258111743","PL" +"3258111744","3258118399","CZ" +"3258118400","3258118655","UA" +"3258118656","3258121215","CZ" +"3258121216","3258121471","PL" +"3258121472","3258121727","AT" +"3258121728","3258121983","UA" +"3258121984","3258122239","RU" +"3258122240","3258128895","FR" +"3258128896","3258129151","MC" +"3258129152","3258163967","FR" +"3258163968","3258164223","BJ" +"3258164224","3258167551","FR" +"3258167552","3258167807","ES" +"3258167808","3258187775","FR" +"3258187776","3258231551","SE" +"3258231552","3258232831","NO" +"3258232832","3258250495","SE" +"3258250496","3258250751","NO" +"3258250752","3258251007","SE" +"3258251008","3258251775","NO" +"3258251776","3258253311","SE" +"3258253312","3258272767","NL" +"3258272768","3258273791","FR" +"3258273792","3258297343","NL" +"3258297344","3258297599","BE" +"3258297600","3258298111","NL" +"3258298112","3258298367","GB" +"3258298368","3258318847","NL" +"3258318848","3258320895","DE" +"3258320896","3258321919","GB" +"3258321920","3258322943","RU" +"3258322944","3258326015","PL" +"3258326016","3258327039","SE" +"3258327040","3258335231","TR" +"3258335232","3258336255","RU" +"3258336256","3258337279","NO" +"3258337280","3258338303","DE" +"3258338304","3258340351","UA" +"3258340352","3258341375","PL" +"3258341376","3258342399","UA" +"3258342400","3258343423","DE" +"3258343424","3258351615","NO" +"3258351616","3258352639","RO" +"3258352640","3258353663","RU" +"3258353664","3258354687","NO" +"3258354688","3258355711","BG" +"3258355712","3258356735","NL" +"3258356736","3258357759","RU" +"3258357760","3258360831","UA" +"3258360832","3258361855","SE" +"3258361856","3258362879","IL" +"3258362880","3258363903","IM" +"3258363904","3258364927","RU" +"3258364928","3258365951","RS" +"3258365952","3258366975","UA" +"3258366976","3258367999","PL" +"3258368000","3258379263","KW" +"3258379264","3258379519","US" +"3258379520","3258384383","KW" +"3258384384","3258427647","DE" +"3258427648","3258427903","RO" +"3258427904","3258449919","DE" +"3258449920","3258503935","CH" +"3258503936","3258504191","PL" +"3258504192","3258504703","CH" +"3258504704","3258504959","DE" +"3258504960","3258505215","IL" +"3258505216","3258506495","CH" +"3258506496","3258506751","DE" +"3258506752","3258515455","CH" +"3258515456","3258580991","FR" +"3258580992","3258646527","RU" +"3258646528","3258690559","DE" +"3258690560","3258690815","EU" +"3258690816","3258691583","DE" +"3258691584","3258691839","RU" +"3258691840","3258692351","AT" +"3258692352","3258692607","DE" +"3258692608","3258692863","FR" +"3258692864","3258693119","DE" +"3258693120","3258693375","SI" +"3258693376","3258693631","DE" +"3258693632","3258693887","RU" +"3258693888","3258694143","SI" +"3258694144","3258694399","RU" +"3258694400","3258694655","DE" +"3258694656","3258694911","GB" +"3258694912","3258712063","DE" +"3258712064","3258728447","GB" +"3258728448","3258729471","FR" +"3258729472","3258729727","DE" +"3258729728","3258729983","UA" +"3258729984","3258730239","CH" +"3258730240","3258730495","NL" +"3258730496","3258730751","RO" +"3258730752","3258731007","TR" +"3258731008","3258731263","SI" +"3258731264","3258731519","NO" +"3258731520","3258731775","ES" +"3258731776","3258732031","UA" +"3258732032","3258732287","DE" +"3258732288","3258732543","PL" +"3258732544","3258732799","SE" +"3258732800","3258733055","CH" +"3258733056","3258733311","RO" +"3258733312","3258746879","GB" +"3258746880","3258748927","DE" +"3258748928","3258764287","GB" +"3258764288","3258764543","DE" +"3258764544","3258764799","RU" +"3258764800","3258765055","BE" +"3258765056","3258765311","NL" +"3258765312","3258767615","GB" +"3258767616","3258767871","CH" +"3258767872","3258769919","GB" +"3258769920","3258770431","PL" +"3258770432","3258771455","IR" +"3258771456","3258772479","KZ" +"3258772480","3258773503","RU" +"3258773504","3258774015","FR" +"3258774016","3258774271","MD" +"3258774272","3258774527","DK" +"3258774528","3258776063","RU" +"3258776064","3258776319","GE" +"3258776320","3258776575","PL" +"3258776576","3258777599","UA" +"3258777600","3258789887","GB" +"3258789888","3258790911","CZ" +"3258790912","3258792191","RU" +"3258792192","3258792447","PL" +"3258792448","3258792703","MK" +"3258792704","3258792959","NL" +"3258792960","3258793983","RU" +"3258793984","3258794495","NL" +"3258794496","3258794751","PL" +"3258794752","3258795007","RU" +"3258795008","3258796031","PL" +"3258796032","3258802175","GB" +"3258802176","3258806271","LU" +"3258806272","3258818047","GB" +"3258818048","3258818303","SE" +"3258818304","3258843135","GB" +"3258843136","3258843391","RU" +"3258843392","3258848767","GB" +"3258848768","3258849023","RO" +"3258849024","3258849279","DE" +"3258849280","3258859519","GB" +"3258859520","3258859775","BY" +"3258859776","3258902783","GB" +"3258902784","3258903039","RU" +"3258903040","3258903295","FR" +"3258903296","3258903551","GB" +"3258903552","3258903807","DE" +"3258903808","3258904063","AT" +"3258904064","3258941439","GB" +"3258941440","3258943487","PL" +"3258943488","3258944511","BG" +"3258944512","3258946559","RU" +"3258946560","3258947583","CH" +"3258947584","3258948607","RO" +"3258948608","3258949631","RU" +"3258949632","3258972159","GR" +"3258972160","3258974207","NO" +"3258974208","3259006079","DE" +"3259006080","3259006111","BE" +"3259006112","3259023103","DE" +"3259023104","3259023107","ES" +"3259023108","3259031655","DE" +"3259031656","3259031659","ES" +"3259031660","3259031895","DE" +"3259031896","3259031899","ES" +"3259031900","3259032151","DE" +"3259032152","3259032159","GB" +"3259032160","3259032199","DE" +"3259032200","3259032203","ES" +"3259032204","3259032439","DE" +"3259032440","3259032443","ES" +"3259032444","3259032551","DE" +"3259032552","3259032559","IT" +"3259032560","3259034319","DE" +"3259034320","3259034327","GB" +"3259034328","3259035447","DE" +"3259035448","3259035455","IT" +"3259035456","3259035535","DE" +"3259035536","3259035551","FR" +"3259035552","3259036031","DE" +"3259036032","3259036035","ES" +"3259036036","3259039743","DE" +"3259039744","3259105279","PT" +"3259105280","3259170815","GB" +"3259170816","3259219967","RU" +"3259219968","3259220479","BY" +"3259220480","3259223295","RU" +"3259223296","3259223807","TM" +"3259223808","3259224831","KZ" +"3259224832","3259225343","TJ" +"3259225344","3259226111","AZ" +"3259226112","3259226623","UZ" +"3259226624","3259227135","AM" +"3259227136","3259227391","RU" +"3259227392","3259227903","KZ" +"3259227904","3259228159","DE" +"3259228160","3259236351","RU" +"3259236352","3259236863","SE" +"3259236864","3259237119","CH" +"3259237120","3259237887","SE" +"3259237888","3259238143","FR" +"3259238144","3259243519","SE" +"3259243520","3259244543","US" +"3259244544","3259248127","SE" +"3259248128","3259248383","GB" +"3259248384","3259250722","SE" +"3259250723","3259250723","EU" +"3259250724","3259252479","SE" +"3259252480","3259252735","EU" +"3259252736","3259258623","SE" +"3259258624","3259258879","ES" +"3259258880","3259262719","SE" +"3259262720","3259262975","DK" +"3259262976","3259266047","SE" +"3259266048","3259266303","SG" +"3259266304","3259269375","SE" +"3259269376","3259269631","FR" +"3259269632","3259276287","SE" +"3259276288","3259276543","ES" +"3259276544","3259279615","SE" +"3259279616","3259279871","JP" +"3259279872","3259280639","SE" +"3259280640","3259280895","US" +"3259280896","3259281407","SE" +"3259281408","3259282431","US" +"3259282432","3259282687","SE" +"3259282688","3259282943","JP" +"3259282944","3259283711","SE" +"3259283712","3259283967","US" +"3259283968","3259284479","SE" +"3259284480","3259284735","US" +"3259284736","3259285759","SE" +"3259285760","3259286015","GB" +"3259286016","3259290879","SE" +"3259290880","3259291135","US" +"3259291136","3259292415","SE" +"3259292416","3259292671","IT" +"3259292672","3259297535","SE" +"3259297536","3259297791","GB" +"3259297792","3259301887","SE" +"3259301888","3259302143","DE" +"3259302144","3259302399","AE" +"3259302400","3259303423","CH" +"3259303424","3259305983","SE" +"3259305984","3259310079","NL" +"3259310080","3259310335","FR" +"3259310336","3259311103","DK" +"3259311104","3259311615","DE" +"3259311616","3259312639","EU" +"3259312640","3259313151","GB" +"3259313152","3259317247","EU" +"3259317248","3259318271","CH" +"3259318272","3259318311","GB" +"3259318312","3259318319","BE" +"3259318320","3259318343","GB" +"3259318344","3259318351","FR" +"3259318352","3259318367","GB" +"3259318368","3259318399","BE" +"3259318400","3259318503","GB" +"3259318504","3259318511","BE" +"3259318512","3259318527","GB" +"3259318528","3259318591","CH" +"3259318592","3259318599","GB" +"3259318600","3259318607","AT" +"3259318608","3259318663","GB" +"3259318664","3259318671","DK" +"3259318672","3259318679","GB" +"3259318680","3259318687","IT" +"3259318688","3259318727","GB" +"3259318728","3259318735","FR" +"3259318736","3259319055","GB" +"3259319056","3259319071","IT" +"3259319072","3259319087","GB" +"3259319088","3259319095","SE" +"3259319096","3259319103","DK" +"3259319104","3259319111","FR" +"3259319112","3259319199","GB" +"3259319200","3259319215","DE" +"3259319216","3259319255","GB" +"3259319256","3259319263","DK" +"3259319264","3259319287","GB" +"3259319288","3259319295","BE" +"3259319296","3259319303","GB" +"3259319304","3259319311","BE" +"3259319312","3259319319","DK" +"3259319320","3259319367","GB" +"3259319368","3259319375","BE" +"3259319376","3259319407","GB" +"3259319408","3259319423","LU" +"3259319424","3259319439","GB" +"3259319440","3259319447","CH" +"3259319448","3259319463","GB" +"3259319464","3259319471","DK" +"3259319472","3259319587","GB" +"3259319588","3259319591","NL" +"3259319592","3259319663","GB" +"3259319664","3259319667","FR" +"3259319668","3259319823","GB" +"3259319824","3259319831","FR" +"3259319832","3259319879","GB" +"3259319880","3259319887","BY" +"3259319888","3259319987","GB" +"3259319988","3259319991","NL" +"3259319992","3259320011","GB" +"3259320012","3259320015","BE" +"3259320016","3259320055","GB" +"3259320056","3259320063","AT" +"3259320064","3259320575","GB" +"3259320576","3259320583","FR" +"3259320584","3259320743","GB" +"3259320744","3259320751","NL" +"3259320752","3259334655","GB" +"3259334656","3259338751","DE" +"3259338752","3259339263","GB" +"3259339264","3259339519","EU" +"3259339520","3259339775","JP" +"3259339776","3259340031","US" +"3259340032","3259342847","GB" +"3259342848","3259344895","CH" +"3259344896","3259345151","GB" +"3259345152","3259345407","IE" +"3259345408","3259345663","CH" +"3259345664","3259346943","EU" +"3259346944","3259347199","SE" +"3259347200","3259347455","DE" +"3259347456","3259347967","CH" +"3259347968","3259348223","SE" +"3259348224","3259348991","CH" +"3259348992","3259351039","NL" +"3259351040","3259351551","IT" +"3259351552","3259352063","FR" +"3259352064","3259352575","CH" +"3259352576","3259353087","IE" +"3259353088","3259353855","NO" +"3259353856","3259354111","GB" +"3259354112","3259354367","NL" +"3259354368","3259354623","DE" +"3259354624","3259354879","TR" +"3259354880","3259355135","PL" +"3259355136","3259359231","NO" +"3259359232","3259367423","ES" +"3259367424","3259432959","GB" +"3259432960","3259435263","SE" +"3259435264","3259435519","IT" +"3259435520","3259438079","SE" +"3259438080","3259438335","ES" +"3259438336","3259454719","SE" +"3259454720","3259454975","EU" +"3259454976","3259457279","SE" +"3259457280","3259457535","IT" +"3259457536","3259460351","SE" +"3259460352","3259460607","DE" +"3259460608","3259461375","SE" +"3259461376","3259461631","GB" +"3259461632","3259465215","SE" +"3259465216","3259465471","KH" +"3259465472","3259470847","SE" +"3259470848","3259471871","US" +"3259471872","3259479807","SE" +"3259479808","3259480063","DK" +"3259480064","3259480831","SE" +"3259480832","3259481087","ES" +"3259481088","3259492351","SE" +"3259492352","3259493375","GB" +"3259493376","3259498495","SE" +"3259498496","3259506943","GB" +"3259506944","3259507199","ES" +"3259507200","3259507711","GB" +"3259507712","3259507967","CH" +"3259507968","3259508223","GB" +"3259508224","3259508479","ES" +"3259508480","3259511807","GB" +"3259511808","3259512063","IM" +"3259512064","3259515647","GB" +"3259515648","3259515903","ES" +"3259515904","3259518207","GB" +"3259518208","3259518463","ES" +"3259518464","3259518719","GB" +"3259518720","3259518975","ES" +"3259518976","3259521023","GB" +"3259521024","3259521535","NL" +"3259521536","3259541503","GB" +"3259541504","3259543551","NL" +"3259543552","3259545599","GB" +"3259545600","3259546111","LB" +"3259546112","3259555839","GB" +"3259555840","3259556095","ES" +"3259556096","3259562495","GB" +"3259562496","3259562751","ES" +"3259562752","3259576351","GB" +"3259576352","3259576359","ES" +"3259576360","3259576799","GB" +"3259576800","3259576831","ES" +"3259576832","3259581439","GB" +"3259581440","3259581951","ES" +"3259581952","3259587583","GB" +"3259587584","3259588095","ES" +"3259588096","3259588607","IT" +"3259588608","3259596799","GB" +"3259596800","3259597055","ES" +"3259597056","3259599359","GB" +"3259599360","3259599615","FR" +"3259599616","3259600639","GB" +"3259600640","3259600895","IM" +"3259600896","3259601151","GB" +"3259601152","3259601407","IE" +"3259601408","3259614463","GB" +"3259614464","3259614719","DE" +"3259614720","3259614975","GB" +"3259614976","3259615231","DE" +"3259615232","3259615743","GB" +"3259615744","3259615999","FR" +"3259616000","3259620095","GB" +"3259620096","3259620351","DE" +"3259620352","3259628031","GB" +"3259628032","3259628543","CH" +"3259628544","3259630335","GB" +"3259630336","3259630591","ES" +"3259630592","3259632127","GB" +"3259632128","3259632383","IM" +"3259632384","3259633407","GB" +"3259633408","3259633663","DE" +"3259633664","3259635711","GB" +"3259635712","3259635967","ES" +"3259635968","3259637759","GB" +"3259637760","3259638015","ES" +"3259638016","3259638783","GB" +"3259638784","3259639039","BE" +"3259639040","3259639551","GB" +"3259639552","3259639807","DE" +"3259639808","3259640319","GB" +"3259640320","3259640575","ES" +"3259640576","3259640831","GB" +"3259640832","3259641343","ES" +"3259641344","3259642367","GB" +"3259642368","3259642623","BE" +"3259642624","3259650047","GB" +"3259650048","3259650559","NL" +"3259650560","3259650815","GB" +"3259650816","3259652095","NL" +"3259652096","3259656959","GB" +"3259656960","3259657215","BE" +"3259657216","3259657727","GB" +"3259657728","3259657887","BE" +"3259657888","3259657919","GB" +"3259657920","3259657983","BE" +"3259657984","3259660543","GB" +"3259660544","3259660799","CH" +"3259660800","3259695871","GB" +"3259695872","3259695903","ES" +"3259695904","3259696639","GB" +"3259696640","3259696895","ES" +"3259696896","3259701759","GB" +"3259701760","3259702303","DE" +"3259702304","3259709999","GB" +"3259710000","3259710007","JE" +"3259710008","3259752191","GB" +"3259752192","3259752447","FR" +"3259752448","3259760639","GB" +"3259760640","3259814399","DE" +"3259814400","3259814655","AT" +"3259814656","3259821823","DE" +"3259821824","3259822079","AT" +"3259822080","3259823103","DE" +"3259823104","3259823615","RO" +"3259823616","3259823871","NO" +"3259823872","3259824127","IE" +"3259824128","3259851823","DE" +"3259851824","3259851831","GB" +"3259851832","3259891711","DE" +"3259891712","3259893503","BE" +"3259893504","3259893759","EU" +"3259893760","3259957247","BE" +"3259957248","3259958271","DE" +"3259958272","3259959295","RU" +"3259959296","3259960319","UA" +"3259960320","3259961343","BG" +"3259961344","3259962367","FI" +"3259962368","3259963391","UA" +"3259963392","3259964415","PL" +"3259964416","3259965439","GB" +"3259965440","3259966463","RU" +"3259966464","3259967487","DE" +"3259967488","3259968511","RS" +"3259968512","3259969535","RU" +"3259969536","3259970559","FR" +"3259970560","3259971583","CZ" +"3259971584","3259972607","IT" +"3259972608","3259973631","UA" +"3259973632","3259981823","PT" +"3259981824","3259990015","EG" +"3259990016","3259995647","FR" +"3259995648","3259995903","MC" +"3259995904","3260006399","FR" +"3260006400","3260014591","IT" +"3260014592","3260018687","NL" +"3260018688","3260019711","GB" +"3260019712","3260021247","DE" +"3260021248","3260021759","RU" +"3260021760","3260022271","GR" +"3260022272","3260022783","NL" +"3260022784","3260284927","GB" +"3260284928","3260288767","RU" +"3260288768","3260289023","KZ" +"3260289024","3260303935","RU" +"3260303936","3260304127","BY" +"3260304128","3260322047","RU" +"3260322048","3260322303","BY" +"3260322304","3260353535","RU" +"3260353536","3260353791","AZ" +"3260353792","3260415487","RU" +"3260415488","3260415999","BY" +"3260416000","3260481535","FI" +"3260481536","3260547071","RU" +"3260547072","3260547327","DE" +"3260547328","3260547583","UA" +"3260547584","3260547839","NL" +"3260547840","3260548095","PL" +"3260548096","3260548351","IE" +"3260548352","3260548607","DK" +"3260548608","3260548863","RO" +"3260548864","3260549119","CH" +"3260549120","3260549375","AT" +"3260549376","3260549631","CH" +"3260549632","3260549887","DE" +"3260549888","3260550143","RU" +"3260550144","3260550399","PL" +"3260550400","3260550655","DE" +"3260550656","3260550911","RU" +"3260550912","3260551167","ES" +"3260551168","3260553983","DE" +"3260553984","3260554239","GB" +"3260554240","3260555263","SE" +"3260555264","3260559615","HU" +"3260559616","3260559647","RO" +"3260559648","3260559711","HU" +"3260559712","3260559719","RO" +"3260559720","3260563455","HU" +"3260563456","3260571647","GB" +"3260571648","3260579839","BE" +"3260579840","3260580351","PL" +"3260580352","3260580863","HU" +"3260580864","3260581375","GB" +"3260581376","3260581887","RO" +"3260581888","3260582399","IL" +"3260582400","3260583423","RU" +"3260583424","3260583935","PT" +"3260583936","3260584447","NO" +"3260584448","3260585471","RO" +"3260585472","3260586495","UA" +"3260586496","3260587007","PL" +"3260587008","3260587519","FR" +"3260587520","3260588031","PL" +"3260588032","3260596223","DE" +"3260596224","3260596735","CH" +"3260596736","3260597247","SK" +"3260597248","3260597759","CH" +"3260597760","3260598271","DE" +"3260598272","3260598783","RU" +"3260598784","3260599295","RO" +"3260599296","3260599807","RU" +"3260599808","3260600319","UA" +"3260600320","3260601343","RU" +"3260601344","3260601855","CH" +"3260601856","3260602367","PL" +"3260602368","3260602879","DK" +"3260602880","3260603903","UA" +"3260603904","3260604415","FR" +"3260604416","3260604927","PL" +"3260604928","3260605439","RO" +"3260605440","3260605951","BG" +"3260605952","3260606463","NL" +"3260606464","3260607487","SE" +"3260607488","3260607999","NL" +"3260608000","3260608511","RO" +"3260608512","3260609023","IE" +"3260609024","3260609535","GB" +"3260609536","3260610047","PL" +"3260610048","3260610559","FR" +"3260610560","3260611071","RO" +"3260611072","3260611583","BG" +"3260611584","3260612095","RU" +"3260612096","3260612607","SE" +"3260612608","3260613631","FI" +"3260613632","3260613887","DE" +"3260613888","3260614143","DK" +"3260614144","3260626175","FI" +"3260626176","3260626431","ES" +"3260626432","3260668415","FI" +"3260668416","3260668671","ES" +"3260668672","3260668927","GB" +"3260668928","3260669183","FI" +"3260669184","3260669695","DE" +"3260669696","3260669951","IT" +"3260669952","3260678143","FI" +"3260678144","3260743679","IL" +"3260743680","3260800255","IT" +"3260800256","3260800271","BE" +"3260800272","3260809215","IT" +"3260809216","3260874751","PL" +"3260874752","3260893439","DK" +"3260893440","3260894207","SE" +"3260894208","3260895231","AT" +"3260895232","3260898303","SE" +"3260898304","3260899327","ES" +"3260899328","3260900095","CH" +"3260900096","3260900351","RU" +"3260900352","3260900607","RO" +"3260900608","3260901119","NL" +"3260901120","3260903423","DE" +"3260903424","3260906239","CH" +"3260906240","3260906495","DE" +"3260906496","3260907519","PL" +"3260907520","3260915711","GB" +"3260915712","3260923903","UA" +"3260923904","3260938751","DE" +"3260938752","3260939007","US" +"3260939008","3261071359","DE" +"3261071360","3261136895","AT" +"3261136896","3261150143","DE" +"3261150144","3261150207","US" +"3261150208","3261170687","DE" +"3261170688","3261170943","CH" +"3261170944","3261173987","DE" +"3261173988","3261173991","AT" +"3261173992","3261174007","DE" +"3261174008","3261174015","AT" +"3261174016","3261202431","DE" +"3261202432","3261205503","FR" +"3261205504","3261205759","EU" +"3261205760","3261212671","FR" +"3261212672","3261212927","EU" +"3261212928","3261213202","FR" +"3261213203","3261213203","EU" +"3261213204","3261213439","FR" +"3261213440","3261213695","AF" +"3261213696","3261267967","FR" +"3261267968","3261297663","DE" +"3261297664","3261297919","RU" +"3261297920","3261298175","PL" +"3261298176","3261333503","DE" +"3261333504","3261399039","FI" +"3261399040","3261472767","GB" +"3261472768","3261503487","RO" +"3261503488","3261503935","MD" +"3261503936","3261530111","RO" +"3261530112","3261531903","SE" +"3261531904","3261532159","GB" +"3261532160","3261532671","SE" +"3261532672","3261532927","US" +"3261532928","3261533439","SE" +"3261533440","3261533695","US" +"3261533696","3261539327","SE" +"3261539328","3261540351","SG" +"3261540352","3261570303","SE" +"3261570304","3261570559","IT" +"3261570560","3261595647","SE" +"3261595648","3261661183","NL" +"3261661184","3261669375","RO" +"3261669376","3261673471","MT" +"3261673472","3261675519","IT" +"3261675520","3261675775","LV" +"3261675776","3261676031","IT" +"3261676032","3261676287","GB" +"3261676288","3261676543","IT" +"3261676544","3261676799","DK" +"3261676800","3261677055","IT" +"3261677056","3261685759","GB" +"3261685760","3261687807","DE" +"3261687808","3261689855","RO" +"3261689856","3261691903","GB" +"3261691904","3261692997","EU" +"3261692998","3261692998","US" +"3261692999","3261693951","EU" +"3261693952","3261694463","NL" +"3261694464","3261694975","RU" +"3261694976","3261695487","PL" +"3261695488","3261695999","GB" +"3261696000","3261696511","UA" +"3261696512","3261697023","NL" +"3261697024","3261698047","RO" +"3261698048","3261698559","UA" +"3261698560","3261699071","DE" +"3261699072","3261699327","RU" +"3261699328","3261699583","GB" +"3261699584","3261700095","NL" +"3261700096","3261700607","FR" +"3261700608","3261701119","GB" +"3261701120","3261701631","RU" +"3261701632","3261702143","CH" +"3261702144","3261710335","GB" +"3261710336","3261718527","RU" +"3261718528","3261726719","IS" +"3261726720","3261734911","ES" +"3261734912","3261743103","GB" +"3261743104","3261751295","MT" +"3261751296","3261759487","EE" +"3261759488","3261767679","IE" +"3261767680","3261775871","RS" +"3261775872","3261776383","PL" +"3261776384","3261777407","RU" +"3261777408","3261777663","IR" +"3261777664","3261777919","GB" +"3261777920","3261778431","PL" +"3261778432","3261778943","RU" +"3261778944","3261779455","RO" +"3261779456","3261779967","DE" +"3261779968","3261780479","UA" +"3261780480","3261780991","PL" +"3261780992","3261781503","RO" +"3261781504","3261782015","PL" +"3261782016","3261783039","UA" +"3261783040","3261784063","GB" +"3261784064","3261796351","AT" +"3261796352","3261796607","GB" +"3261796608","3261796863","RU" +"3261796864","3261797119","PL" +"3261797120","3261797375","KR" +"3261797376","3261797631","AT" +"3261797632","3261797887","RU" +"3261797888","3261798143","TR" +"3261798144","3261798399","RU" +"3261798400","3261812735","AT" +"3261812736","3261812991","RU" +"3261812992","3261816575","AT" +"3261816576","3261816831","DE" +"3261816832","3261820927","AT" +"3261820928","3261821183","RO" +"3261821184","3261821439","AT" +"3261821440","3261821695","NL" +"3261821696","3261821951","UA" +"3261821952","3261822207","RU" +"3261822208","3261822463","UA" +"3261822464","3261822719","GB" +"3261822720","3261822975","SE" +"3261822976","3261823231","PL" +"3261823232","3261823487","NL" +"3261823488","3261823743","RO" +"3261823744","3261823999","BE" +"3261824000","3261824255","PL" +"3261824256","3261824511","RU" +"3261824512","3261824767","FR" +"3261824768","3261825023","PT" +"3261825024","3261857791","AT" +"3261857792","3261923327","CZ" +"3261923328","3261988863","NL" +"3261988864","3261989119","SE" +"3261989120","3261990399","FI" +"3261990400","3261990655","UA" +"3261990656","3261993471","FI" +"3261993472","3261993727","RU" +"3261993728","3261995263","FI" +"3261995264","3261995519","DE" +"3261995520","3261995775","PL" +"3261995776","3261996031","FI" +"3261996032","3261996287","NL" +"3261996288","3262005247","FI" +"3262005248","3262005759","PL" +"3262005760","3262006015","RU" +"3262006016","3262006271","NL" +"3262006272","3262006527","RO" +"3262006528","3262006783","FR" +"3262006784","3262007039","SE" +"3262007040","3262007295","IT" +"3262007296","3262007551","SA" +"3262007552","3262007807","GR" +"3262007808","3262008063","RO" +"3262008064","3262008319","GB" +"3262008320","3262008575","PT" +"3262008576","3262008831","PL" +"3262008832","3262009087","AT" +"3262009088","3262009343","UA" +"3262009344","3262013439","FI" +"3262013440","3262017535","SE" +"3262017536","3262018559","FI" +"3262018560","3262018815","PL" +"3262018816","3262021119","FI" +"3262021120","3262021375","UA" +"3262021376","3262021631","PL" +"3262021632","3262021887","CH" +"3262021888","3262022143","UA" +"3262022144","3262022911","FI" +"3262022912","3262023167","DE" +"3262023168","3262023679","FI" +"3262023680","3262023935","DK" +"3262023936","3262027263","FI" +"3262027264","3262027519","TR" +"3262027520","3262027775","BE" +"3262027776","3262028287","RU" +"3262028288","3262028543","FR" +"3262028544","3262028799","AE" +"3262028800","3262029823","DE" +"3262029824","3262030847","US" +"3262030848","3262031871","FR" +"3262031872","3262034111","FI" +"3262034112","3262034119","AX" +"3262034120","3262034123","FI" +"3262034124","3262034127","AX" +"3262034128","3262034143","FI" +"3262034144","3262034191","AX" +"3262034192","3262034239","FI" +"3262034240","3262034287","AX" +"3262034288","3262034455","FI" +"3262034456","3262034463","AX" +"3262034464","3262034527","FI" +"3262034528","3262034567","AX" +"3262034568","3262034575","FI" +"3262034576","3262034591","AX" +"3262034592","3262034687","FI" +"3262034688","3262034723","AX" +"3262034724","3262034799","FI" +"3262034800","3262034807","AX" +"3262034808","3262034815","FI" +"3262034816","3262034831","AX" +"3262034832","3262034943","FI" +"3262034944","3262035455","AX" +"3262035456","3262035487","FI" +"3262035488","3262035519","AX" +"3262035520","3262035711","FI" +"3262035712","3262035967","AX" +"3262035968","3262036127","FI" +"3262036128","3262036139","AX" +"3262036140","3262036141","FI" +"3262036142","3262036151","AX" +"3262036152","3262036287","FI" +"3262036288","3262036307","AX" +"3262036308","3262036311","FI" +"3262036312","3262036335","AX" +"3262036336","3262036367","FI" +"3262036368","3262036383","AX" +"3262036384","3262036415","FI" +"3262036416","3262036431","AX" +"3262036432","3262036463","FI" +"3262036464","3262036479","AX" +"3262036480","3262036607","FI" +"3262036608","3262036623","AX" +"3262036624","3262036655","FI" +"3262036656","3262036659","AX" +"3262036660","3262036663","FI" +"3262036664","3262036671","AX" +"3262036672","3262036719","FI" +"3262036720","3262038015","AX" +"3262038016","3262038271","FR" +"3262038272","3262038527","RU" +"3262038528","3262038783","GB" +"3262038784","3262039039","NO" +"3262039040","3262039295","DE" +"3262039296","3262039551","GB" +"3262039552","3262039807","GR" +"3262039808","3262040063","SI" +"3262040064","3262040319","PL" +"3262040320","3262040575","ES" +"3262040576","3262040831","RU" +"3262040832","3262041343","GB" +"3262041344","3262041599","BG" +"3262041600","3262041855","DK" +"3262041856","3262042367","FR" +"3262042368","3262042623","GB" +"3262042624","3262042879","UA" +"3262042880","3262043135","NL" +"3262043136","3262043391","RO" +"3262043392","3262043647","TR" +"3262043648","3262043903","NL" +"3262043904","3262044159","GB" +"3262044160","3262044415","RS" +"3262044416","3262044671","DE" +"3262044672","3262044927","GR" +"3262044928","3262045183","UA" +"3262045184","3262045439","LT" +"3262045440","3262045695","NL" +"3262045696","3262045951","SI" +"3262045952","3262046207","RU" +"3262046208","3262049279","FI" +"3262049280","3262049535","JO" +"3262049536","3262049791","GB" +"3262049792","3262050559","PL" +"3262050560","3262050815","GB" +"3262050816","3262051071","CH" +"3262051072","3262051583","GB" +"3262051584","3262051839","FR" +"3262051840","3262052351","DE" +"3262052352","3262052607","UA" +"3262052608","3262052863","IL" +"3262052864","3262053119","GB" +"3262053120","3262053375","RU" +"3262053376","3262053631","UA" +"3262053632","3262053887","RU" +"3262053888","3262054143","UA" +"3262054144","3262054399","RU" +"3262054400","3262096127","FI" +"3262096128","3262096383","AX" +"3262096384","3262099199","FI" +"3262099200","3262099455","NL" +"3262099456","3262108671","FI" +"3262108672","3262108927","RU" +"3262108928","3262114047","FI" +"3262114048","3262114303","SE" +"3262114304","3262115071","FI" +"3262115072","3262115327","RU" +"3262115328","3262119935","FI" +"3262119936","3262120447","AX" +"3262120448","3262120703","FI" +"3262120704","3262121599","AX" +"3262121600","3262121663","FI" +"3262121664","3262122007","AX" +"3262122008","3262122015","FI" +"3262122016","3262122031","AX" +"3262122032","3262122039","FI" +"3262122040","3262122047","AX" +"3262122048","3262122143","FI" +"3262122144","3262122159","AX" +"3262122160","3262122167","FI" +"3262122168","3262122183","AX" +"3262122184","3262122199","FI" +"3262122200","3262122207","AX" +"3262122208","3262122239","FI" +"3262122240","3262122367","AX" +"3262122368","3262122431","FI" +"3262122432","3262122623","AX" +"3262122624","3262122631","FI" +"3262122632","3262122655","AX" +"3262122656","3262122751","FI" +"3262122752","3262123007","AX" +"3262123008","3262123263","FI" +"3262123264","3262123295","AX" +"3262123296","3262123311","FI" +"3262123312","3262123327","AX" +"3262123328","3262123391","FI" +"3262123392","3262123519","AX" +"3262123520","3262123527","FI" +"3262123528","3262123775","AX" +"3262123776","3262124031","FI" +"3262124032","3262128127","DE" +"3262128128","3262136319","GB" +"3262136320","3262137599","EU" +"3262137600","3262137855","DE" +"3262137856","3262139391","EU" +"3262139392","3262140415","GB" +"3262140416","3262140671","DE" +"3262140672","3262141183","EU" +"3262141184","3262141439","DE" +"3262141440","3262142463","ES" +"3262142464","3262142719","DE" +"3262142720","3262143487","EU" +"3262143488","3262143743","GB" +"3262143744","3262143999","EU" +"3262144000","3262144047","DE" +"3262144048","3262145023","EU" +"3262145024","3262145279","DE" +"3262145280","3262145551","EU" +"3262145552","3262145567","DE" +"3262145568","3262145615","EU" +"3262145616","3262145631","DE" +"3262145632","3262145663","EU" +"3262145664","3262145791","DE" +"3262145792","3262146047","EU" +"3262146048","3262146815","DE" +"3262146816","3262147583","EU" +"3262147584","3262147839","DE" +"3262147840","3262148607","EU" +"3262148608","3262148863","DE" +"3262148864","3262148879","EU" +"3262148880","3262148919","DE" +"3262148920","3262148927","EU" +"3262148928","3262149119","DE" +"3262149120","3262149151","FR" +"3262149152","3262149159","DE" +"3262149160","3262149375","FR" +"3262149376","3262149631","EU" +"3262149632","3262149887","DE" +"3262149888","3262150911","EU" +"3262150912","3262151047","DE" +"3262151048","3262151071","EU" +"3262151072","3262151103","DE" +"3262151104","3262151135","EU" +"3262151136","3262151151","DE" +"3262151152","3262151167","EU" +"3262151168","3262151423","DE" +"3262151424","3262151935","EU" +"3262151936","3262152191","DE" +"3262152192","3262152663","EU" +"3262152664","3262152671","DE" +"3262152672","3262152703","EU" +"3262152704","3262185471","AT" +"3262185472","3262200575","DE" +"3262200576","3262200831","EU" +"3262200832","3262224895","DE" +"3262224896","3262225151","AT" +"3262225152","3262227711","DE" +"3262227712","3262227967","RO" +"3262227968","3262283775","DE" +"3262283776","3262284799","RU" +"3262284800","3262286847","UA" +"3262286848","3262287871","SE" +"3262287872","3262288127","MD" +"3262288128","3262288383","FR" +"3262288384","3262288895","IL" +"3262288896","3262289919","PL" +"3262289920","3262316543","SE" +"3262316544","3262348799","DE" +"3262348800","3262349055","NL" +"3262349056","3262382079","DE" +"3262382080","3262414847","IT" +"3262414848","3262415359","DE" +"3262415360","3262416895","PL" +"3262416896","3262417407","RO" +"3262417408","3262417919","PL" +"3262417920","3262418431","RU" +"3262418432","3262419455","FR" +"3262419456","3262419967","NL" +"3262419968","3262420479","FR" +"3262420480","3262420991","CH" +"3262420992","3262421503","ES" +"3262421504","3262422015","DE" +"3262422016","3262422527","SE" +"3262422528","3262423039","AT" +"3262423040","3262423551","GB" +"3262423552","3262424063","UA" +"3262424064","3262424575","IT" +"3262424576","3262424831","PL" +"3262424832","3262425087","GB" +"3262425088","3262425343","GR" +"3262425344","3262425599","RU" +"3262425600","3262426111","UA" +"3262426112","3262426623","DE" +"3262426624","3262427135","GB" +"3262427136","3262427647","FR" +"3262427648","3262428159","DK" +"3262428160","3262428671","CH" +"3262428672","3262429183","PL" +"3262429184","3262429695","ES" +"3262429696","3262430207","DE" +"3262430208","3262430719","EE" +"3262430720","3262431231","RO" +"3262431232","3262431743","PL" +"3262431744","3262432255","UA" +"3262432256","3262432767","CH" +"3262432768","3262433279","GB" +"3262433280","3262433791","RO" +"3262433792","3262434303","FR" +"3262434304","3262434815","SI" +"3262434816","3262435839","DE" +"3262435840","3262436351","CH" +"3262436352","3262436863","SE" +"3262436864","3262437375","GB" +"3262437376","3262437887","RO" +"3262437888","3262438399","FR" +"3262438400","3262438911","NL" +"3262438912","3262439423","DK" +"3262439424","3262439935","AT" +"3262439936","3262440447","IL" +"3262440448","3262440959","UA" +"3262440960","3262441471","IL" +"3262441472","3262441983","UA" +"3262441984","3262442495","DE" +"3262442496","3262443007","RO" +"3262443008","3262443519","UA" +"3262443520","3262444031","ES" +"3262444032","3262444543","AT" +"3262444544","3262445055","UA" +"3262445056","3262445567","RO" +"3262445568","3262447103","PL" +"3262447104","3262447615","GB" +"3262447616","3262460415","PT" +"3262460416","3262460543","UA" +"3262460544","3262460671","RU" +"3262460672","3262460927","AE" +"3262461056","3262461183","DK" +"3262461184","3262461311","SN" +"3262461312","3262461439","NO" +"3262461440","3262461567","DE" +"3262461568","3262461695","GB" +"3262461696","3262461823","UA" +"3262461824","3262461951","RO" +"3262461952","3262463999","IQ" +"3262464000","3262472191","RU" +"3262472192","3262472207","DE" +"3262472208","3262472211","FR" +"3262472212","3262472215","DE" +"3262472216","3262472219","NL" +"3262472220","3262472223","AT" +"3262472224","3262472231","DE" +"3262472232","3262472235","AT" +"3262472236","3262472247","DE" +"3262472248","3262472251","IT" +"3262472252","3262472267","DE" +"3262472268","3262472271","AT" +"3262472272","3262472275","IT" +"3262472276","3262472279","BE" +"3262472280","3262472291","DE" +"3262472292","3262472295","FR" +"3262472296","3262472311","DE" +"3262472312","3262472315","NL" +"3262472316","3262472335","DE" +"3262472336","3262472339","US" +"3262472340","3262472351","DE" +"3262472352","3262472355","NL" +"3262472356","3262472359","CH" +"3262472360","3262472363","NL" +"3262472364","3262472367","GB" +"3262472368","3262472371","NL" +"3262472372","3262472375","FR" +"3262472376","3262472379","GB" +"3262472380","3262472387","DE" +"3262472388","3262472391","FR" +"3262472392","3262472395","GB" +"3262472396","3262472399","DE" +"3262472400","3262472403","NL" +"3262472404","3262472407","DE" +"3262472408","3262472411","US" +"3262472412","3262472415","DE" +"3262472416","3262472419","ES" +"3262472420","3262472423","DE" +"3262472424","3262472427","BE" +"3262472428","3262472431","CH" +"3262472432","3262472435","AE" +"3262472436","3262472443","DE" +"3262472444","3262472447","LU" +"3262472448","3262472459","DE" +"3262472460","3262472463","CH" +"3262472464","3262472467","DE" +"3262472468","3262472471","FR" +"3262472472","3262472479","DE" +"3262472480","3262472483","IT" +"3262472484","3262472495","DE" +"3262472496","3262472499","CH" +"3262472500","3262472511","DE" +"3262472512","3262472515","CA" +"3262472516","3262472519","GB" +"3262472520","3262472527","DE" +"3262472528","3262472531","CH" +"3262472532","3262472539","DE" +"3262472540","3262472543","US" +"3262472544","3262472547","DE" +"3262472548","3262472551","NL" +"3262472552","3262472555","HU" +"3262472556","3262472563","DE" +"3262472564","3262472567","DK" +"3262472568","3262472575","DE" +"3262472576","3262472579","CA" +"3262472580","3262472583","AT" +"3262472584","3262472591","US" +"3262472592","3262472595","DE" +"3262472596","3262472599","CH" +"3262472600","3262472603","FR" +"3262472604","3262472607","CH" +"3262472608","3262472615","US" +"3262472616","3262472619","CA" +"3262472620","3262472623","TR" +"3262472624","3262472631","DE" +"3262472632","3262472635","ES" +"3262472636","3262472655","DE" +"3262472656","3262472659","GB" +"3262472660","3262472663","IT" +"3262472664","3262472667","ES" +"3262472668","3262472675","DE" +"3262472676","3262472679","FR" +"3262472680","3262472683","CL" +"3262472684","3262472691","US" +"3262472692","3262472695","DE" +"3262472696","3262472699","IT" +"3262472700","3262472703","AT" +"3262472704","3262472707","US" +"3262472708","3262472711","DE" +"3262472712","3262472715","US" +"3262472716","3262472727","NL" +"3262472728","3262472735","DE" +"3262472736","3262472739","IT" +"3262472740","3262472743","PT" +"3262472744","3262472747","DE" +"3262472748","3262472751","GB" +"3262472752","3262472763","DE" +"3262472764","3262472767","CA" +"3262472768","3262472771","DE" +"3262472772","3262472775","US" +"3262472776","3262472779","DE" +"3262472780","3262472783","US" +"3262472784","3262472791","DE" +"3262472792","3262472795","GB" +"3262472796","3262472799","AT" +"3262472800","3262472807","DE" +"3262472808","3262472811","CH" +"3262472812","3262472819","DE" +"3262472820","3262472823","CH" +"3262472824","3262472827","US" +"3262472828","3262472835","DE" +"3262472836","3262472839","DK" +"3262472840","3262472843","DE" +"3262472844","3262472847","AT" +"3262472848","3262472851","DE" +"3262472852","3262472855","IT" +"3262472856","3262472859","FR" +"3262472860","3262472863","US" +"3262472864","3262472867","FR" +"3262472868","3262472871","GB" +"3262472872","3262472875","DE" +"3262472876","3262472879","FR" +"3262472880","3262472883","DE" +"3262472884","3262472891","CA" +"3262472892","3262472899","DE" +"3262472900","3262472903","AT" +"3262472904","3262472907","US" +"3262472908","3262472911","DE" +"3262472912","3262472915","IT" +"3262472916","3262472923","DE" +"3262472924","3262472927","IT" +"3262472928","3262472931","NL" +"3262472932","3262472935","LB" +"3262472936","3262472939","DE" +"3262472940","3262472943","CH" +"3262472944","3262472947","PT" +"3262472948","3262472951","LU" +"3262472952","3262472955","DE" +"3262472956","3262472959","CA" +"3262472960","3262472963","DE" +"3262472964","3262472967","AT" +"3262472968","3262472975","DE" +"3262472976","3262472979","LU" +"3262472980","3262472983","AT" +"3262472984","3262472987","PT" +"3262472988","3262472991","US" +"3262472992","3262472995","DE" +"3262472996","3262472999","FR" +"3262473000","3262473003","HU" +"3262473004","3262473007","DE" +"3262473008","3262473011","US" +"3262473012","3262473015","DE" +"3262473016","3262473019","AR" +"3262473020","3262473023","US" +"3262473024","3262473027","ES" +"3262473028","3262473031","BM" +"3262473032","3262473035","DE" +"3262473036","3262473039","IT" +"3262473040","3262473043","GB" +"3262473044","3262473047","US" +"3262473048","3262473051","DE" +"3262473052","3262473055","AT" +"3262473056","3262473075","DE" +"3262473076","3262473079","GB" +"3262473080","3262473083","DE" +"3262473084","3262473087","US" +"3262473088","3262473091","NL" +"3262473092","3262473099","DE" +"3262473100","3262473103","BE" +"3262473104","3262473107","DE" +"3262473108","3262473115","ES" +"3262473116","3262473119","DE" +"3262473120","3262473127","FR" +"3262473128","3262473135","DE" +"3262473136","3262473139","US" +"3262473140","3262473143","ES" +"3262473144","3262473151","DE" +"3262473152","3262473155","FR" +"3262473156","3262473159","IT" +"3262473160","3262473163","NL" +"3262473164","3262473167","CH" +"3262473168","3262473171","DE" +"3262473172","3262473175","US" +"3262473176","3262473195","DE" +"3262473196","3262473199","AT" +"3262473200","3262473203","ES" +"3262473204","3262473207","US" +"3262473208","3262473211","DE" +"3262473212","3262473215","FR" +"3262473216","3262473323","JP" +"3262473324","3262473327","KR" +"3262473328","3262473471","JP" +"3262473472","3262473473","DE" +"3262473474","3262473478","US" +"3262473479","3262473480","CA" +"3262473481","3262473483","US" +"3262473484","3262473484","VE" +"3262473485","3262473485","US" +"3262473486","3262473486","CA" +"3262473487","3262473516","US" +"3262473517","3262473517","CN" +"3262473518","3262473526","US" +"3262473527","3262473527","CN" +"3262473528","3262473538","US" +"3262473539","3262473539","DE" +"3262473540","3262473540","US" +"3262473541","3262473541","DE" +"3262473542","3262473543","US" +"3262473544","3262473544","CA" +"3262473545","3262473548","US" +"3262473549","3262473549","CA" +"3262473550","3262473557","US" +"3262473558","3262473558","DE" +"3262473559","3262473567","US" +"3262473568","3262473568","CA" +"3262473569","3262473570","US" +"3262473571","3262473571","DE" +"3262473572","3262473582","US" +"3262473583","3262473583","CA" +"3262473584","3262473586","US" +"3262473587","3262473587","CA" +"3262473588","3262473658","US" +"3262473659","3262473659","DE" +"3262473660","3262473663","US" +"3262473664","3262473664","CA" +"3262473665","3262473688","US" +"3262473689","3262473689","CA" +"3262473690","3262473691","AR" +"3262473692","3262473692","CA" +"3262473693","3262473729","DE" +"3262473730","3262473735","US" +"3262473736","3262473736","CA" +"3262473737","3262473771","US" +"3262473772","3262473772","DE" +"3262473773","3262473785","US" +"3262473786","3262473855","DE" +"3262473856","3262473859","US" +"3262473860","3262473903","DE" +"3262473904","3262473907","US" +"3262473908","3262473931","DE" +"3262473932","3262473935","US" +"3262473936","3262473963","DE" +"3262473964","3262473967","US" +"3262473968","3262473971","DE" +"3262473972","3262473983","US" +"3262473984","3262473985","DE" +"3262473986","3262473986","TW" +"3262473987","3262473987","IN" +"3262473988","3262473988","SG" +"3262473989","3262473989","IN" +"3262473990","3262473990","SG" +"3262473991","3262473991","DE" +"3262473992","3262473992","SG" +"3262473993","3262473993","IN" +"3262473994","3262473995","TW" +"3262473996","3262473996","MY" +"3262473997","3262473998","ID" +"3262473999","3262473999","TW" +"3262474000","3262474000","SG" +"3262474001","3262474001","TW" +"3262474002","3262474002","MY" +"3262474003","3262474003","TW" +"3262474004","3262474004","SG" +"3262474005","3262474005","TW" +"3262474006","3262474007","SG" +"3262474008","3262474009","TW" +"3262474010","3262474010","SG" +"3262474011","3262474011","ID" +"3262474012","3262474013","SG" +"3262474014","3262474014","HK" +"3262474015","3262474016","SG" +"3262474017","3262474018","MY" +"3262474019","3262474026","SG" +"3262474027","3262474027","CN" +"3262474028","3262474030","SG" +"3262474031","3262474031","IN" +"3262474032","3262474032","MY" +"3262474033","3262474033","SG" +"3262474034","3262474034","MY" +"3262474035","3262474035","SG" +"3262474036","3262474036","MY" +"3262474037","3262474037","SG" +"3262474038","3262474038","MY" +"3262474039","3262474039","TW" +"3262474040","3262474041","MY" +"3262474042","3262474042","CN" +"3262474043","3262474043","SG" +"3262474044","3262474044","GB" +"3262474045","3262474048","SG" +"3262474049","3262474049","IN" +"3262474050","3262474061","SG" +"3262474062","3262474063","CN" +"3262474064","3262474064","TW" +"3262474065","3262474065","IN" +"3262474066","3262474066","SG" +"3262474067","3262474067","MY" +"3262474068","3262474068","SG" +"3262474069","3262474069","MY" +"3262474070","3262474070","SG" +"3262474071","3262474071","TW" +"3262474072","3262474072","IN" +"3262474073","3262474075","SG" +"3262474076","3262474076","MY" +"3262474077","3262474077","SG" +"3262474078","3262474078","IN" +"3262474079","3262474079","MY" +"3262474080","3262474083","SG" +"3262474084","3262474084","TW" +"3262474085","3262474087","SG" +"3262474088","3262474088","MY" +"3262474089","3262474089","SG" +"3262474090","3262474091","MY" +"3262474092","3262474094","SG" +"3262474095","3262474095","HK" +"3262474096","3262474097","SG" +"3262474098","3262474098","MY" +"3262474099","3262474102","SG" +"3262474103","3262474103","MY" +"3262474104","3262474104","CN" +"3262474105","3262474105","IN" +"3262474106","3262474106","MY" +"3262474107","3262474107","CN" +"3262474108","3262474108","HK" +"3262474109","3262474110","MY" +"3262474111","3262474111","TH" +"3262474112","3262474112","SG" +"3262474113","3262474113","PH" +"3262474114","3262474114","IN" +"3262474115","3262474115","SG" +"3262474116","3262474116","TW" +"3262474117","3262474117","IN" +"3262474118","3262474118","TH" +"3262474119","3262474119","TW" +"3262474120","3262474120","BN" +"3262474121","3262474121","TW" +"3262474122","3262474122","SG" +"3262474123","3262474125","MY" +"3262474126","3262474126","IN" +"3262474127","3262474128","SG" +"3262474129","3262474130","MY" +"3262474131","3262474131","IN" +"3262474132","3262474133","MY" +"3262474134","3262474134","CN" +"3262474135","3262474136","SG" +"3262474137","3262474137","TW" +"3262474138","3262474139","CN" +"3262474140","3262474140","TW" +"3262474141","3262474142","SG" +"3262474143","3262474143","PH" +"3262474144","3262474150","SG" +"3262474151","3262474151","MY" +"3262474152","3262474152","SG" +"3262474153","3262474153","IN" +"3262474154","3262474154","SG" +"3262474155","3262474155","MY" +"3262474156","3262474156","IN" +"3262474157","3262474157","SG" +"3262474158","3262474159","MY" +"3262474160","3262474162","SG" +"3262474163","3262474163","MY" +"3262474164","3262474164","IN" +"3262474165","3262474165","CN" +"3262474166","3262474166","SG" +"3262474167","3262474167","HK" +"3262474168","3262474168","TW" +"3262474169","3262474169","DE" +"3262474170","3262474170","SG" +"3262474171","3262474171","MY" +"3262474172","3262474172","SG" +"3262474173","3262474173","CN" +"3262474174","3262474174","TW" +"3262474175","3262474175","SG" +"3262474176","3262474176","MY" +"3262474177","3262474177","SG" +"3262474178","3262474178","TW" +"3262474179","3262474179","CN" +"3262474180","3262474180","MY" +"3262474181","3262474181","SG" +"3262474182","3262474182","MY" +"3262474183","3262474185","SG" +"3262474186","3262474186","MY" +"3262474187","3262474187","SG" +"3262474188","3262474188","MY" +"3262474189","3262474189","SG" +"3262474190","3262474190","CN" +"3262474191","3262474192","SG" +"3262474193","3262474193","PH" +"3262474194","3262474194","SG" +"3262474195","3262474195","MY" +"3262474196","3262474196","IN" +"3262474197","3262474198","SG" +"3262474199","3262474199","CN" +"3262474200","3262474200","MY" +"3262474201","3262474201","SG" +"3262474202","3262474203","CN" +"3262474204","3262474204","IN" +"3262474205","3262474205","SG" +"3262474206","3262474206","IN" +"3262474207","3262474207","MY" +"3262474208","3262474208","SG" +"3262474209","3262474209","MY" +"3262474210","3262474210","TW" +"3262474211","3262474211","SG" +"3262474212","3262474212","MY" +"3262474213","3262474213","SG" +"3262474214","3262474214","CN" +"3262474215","3262474215","IN" +"3262474216","3262474216","SG" +"3262474217","3262474217","MY" +"3262474218","3262474218","SG" +"3262474219","3262474219","MY" +"3262474220","3262474222","IN" +"3262474223","3262474223","SG" +"3262474224","3262474224","MY" +"3262474225","3262474225","SG" +"3262474226","3262474226","MY" +"3262474227","3262474227","IN" +"3262474228","3262474228","SG" +"3262474229","3262474230","IN" +"3262474231","3262474231","SG" +"3262474232","3262474234","IN" +"3262474235","3262474236","MY" +"3262474237","3262474238","SG" +"3262474239","3262474239","DE" +"3262474240","3262474255","AU" +"3262474256","3262474259","NZ" +"3262474260","3262474263","AU" +"3262474264","3262474267","NZ" +"3262474268","3262474271","AU" +"3262474272","3262474275","NZ" +"3262474276","3262474367","AU" +"3262474368","3262474371","NZ" +"3262474372","3262474395","AU" +"3262474396","3262474399","NZ" +"3262474400","3262474463","AU" +"3262474464","3262474467","NZ" +"3262474468","3262474495","AU" +"3262474496","3262474631","DE" +"3262474632","3262474635","DK" +"3262474636","3262474791","DE" +"3262474792","3262474815","JP" +"3262474816","3262474895","DE" +"3262474896","3262475007","JP" +"3262475008","3262475009","DE" +"3262475010","3262475023","US" +"3262475024","3262475024","CO" +"3262475025","3262475025","US" +"3262475026","3262475027","DE" +"3262475028","3262475029","US" +"3262475030","3262475033","DE" +"3262475034","3262475036","US" +"3262475037","3262475037","DE" +"3262475038","3262475042","US" +"3262475043","3262475043","DE" +"3262475044","3262475044","US" +"3262475045","3262475045","BR" +"3262475046","3262475065","US" +"3262475066","3262475068","MX" +"3262475069","3262475072","US" +"3262475073","3262475075","BR" +"3262475076","3262475076","US" +"3262475077","3262475077","BR" +"3262475078","3262475079","US" +"3262475080","3262475080","CA" +"3262475081","3262475081","US" +"3262475082","3262475082","BR" +"3262475083","3262475083","US" +"3262475084","3262475084","MX" +"3262475085","3262475085","BR" +"3262475086","3262475087","US" +"3262475088","3262475088","BR" +"3262475089","3262475090","US" +"3262475091","3262475092","DE" +"3262475093","3262475094","BR" +"3262475095","3262475095","MX" +"3262475096","3262475140","US" +"3262475141","3262475141","BR" +"3262475142","3262475167","US" +"3262475168","3262475168","DE" +"3262475169","3262475174","US" +"3262475175","3262475175","DE" +"3262475176","3262475185","US" +"3262475186","3262475186","DE" +"3262475187","3262475189","US" +"3262475190","3262475190","MX" +"3262475191","3262475191","BR" +"3262475192","3262475192","MX" +"3262475193","3262475201","US" +"3262475202","3262475205","BR" +"3262475206","3262475209","US" +"3262475210","3262475210","BR" +"3262475211","3262475213","US" +"3262475214","3262475214","DE" +"3262475215","3262475222","US" +"3262475223","3262475263","DE" +"3262475264","3262475267","MU" +"3262475268","3262475271","US" +"3262475272","3262475275","IT" +"3262475276","3262475279","US" +"3262475280","3262475283","DE" +"3262475284","3262475287","NL" +"3262475288","3262475295","DE" +"3262475296","3262475303","NL" +"3262475304","3262475307","FR" +"3262475308","3262475311","AR" +"3262475312","3262475315","FR" +"3262475316","3262475319","SE" +"3262475320","3262475323","DE" +"3262475324","3262475327","MX" +"3262475328","3262475331","US" +"3262475332","3262475335","BR" +"3262475336","3262475339","DE" +"3262475340","3262475343","FR" +"3262475344","3262475347","CH" +"3262475348","3262475351","DE" +"3262475352","3262475355","ES" +"3262475356","3262475359","DE" +"3262475360","3262475363","IT" +"3262475364","3262475367","DE" +"3262475368","3262475371","FR" +"3262475372","3262475375","NL" +"3262475376","3262475383","DE" +"3262475384","3262475387","US" +"3262475388","3262475395","AT" +"3262475396","3262475399","NL" +"3262475400","3262475403","US" +"3262475404","3262475407","SE" +"3262475408","3262475415","DE" +"3262475416","3262475419","CH" +"3262475420","3262475423","DE" +"3262475424","3262475427","US" +"3262475428","3262475431","ES" +"3262475432","3262475435","IT" +"3262475436","3262475439","GB" +"3262475440","3262475443","DE" +"3262475444","3262475447","US" +"3262475448","3262475451","FR" +"3262475452","3262475459","DE" +"3262475460","3262475463","FR" +"3262475464","3262475467","DE" +"3262475468","3262475471","ES" +"3262475472","3262475479","DE" +"3262475480","3262475483","US" +"3262475484","3262475487","IT" +"3262475488","3262475491","MX" +"3262475492","3262475495","CH" +"3262475496","3262475499","NL" +"3262475500","3262475503","DE" +"3262475504","3262475507","FR" +"3262475508","3262475511","DE" +"3262475512","3262475515","US" +"3262475516","3262475519","DE" +"3262475520","3262475527","US" +"3262475528","3262475531","DE" +"3262475532","3262475559","US" +"3262475560","3262475575","DE" +"3262475576","3262475591","US" +"3262475592","3262475595","BR" +"3262475596","3262475607","US" +"3262475608","3262475611","IE" +"3262475612","3262475631","DE" +"3262475632","3262475635","US" +"3262475636","3262475639","DE" +"3262475640","3262475683","US" +"3262475684","3262475687","BR" +"3262475688","3262475691","DE" +"3262475692","3262475695","BR" +"3262475696","3262475715","US" +"3262475716","3262475719","DE" +"3262475720","3262475723","BR" +"3262475724","3262475775","US" +"3262475776","3262475783","DE" +"3262475784","3262475787","BE" +"3262475788","3262475791","DE" +"3262475792","3262475807","AE" +"3262475808","3262475811","US" +"3262475812","3262475815","IE" +"3262475816","3262475819","FR" +"3262475820","3262475823","DE" +"3262475824","3262475839","RO" +"3262475840","3262475855","DE" +"3262475856","3262475871","TR" +"3262475872","3262475875","BE" +"3262475876","3262475879","NL" +"3262475880","3262475883","PL" +"3262475884","3262475887","BE" +"3262475888","3262475891","DE" +"3262475892","3262475895","SA" +"3262475896","3262475903","CY" +"3262475904","3262475919","GR" +"3262475920","3262475935","DE" +"3262475936","3262475951","FR" +"3262475952","3262475963","US" +"3262475964","3262475967","HU" +"3262475968","3262475975","DE" +"3262475976","3262475983","BG" +"3262475984","3262475991","SG" +"3262475992","3262476015","DE" +"3262476016","3262476019","ES" +"3262476020","3262476023","FR" +"3262476024","3262476027","DE" +"3262476028","3262476031","FR" +"3262476032","3262476039","DE" +"3262476040","3262476043","CH" +"3262476044","3262476047","DE" +"3262476048","3262476055","IL" +"3262476056","3262476059","PE" +"3262476060","3262476063","US" +"3262476064","3262476067","DE" +"3262476068","3262476071","PL" +"3262476072","3262476075","US" +"3262476076","3262476079","DE" +"3262476080","3262476083","FR" +"3262476084","3262476087","DE" +"3262476088","3262476091","DK" +"3262476092","3262476095","NL" +"3262476096","3262476103","US" +"3262476104","3262476107","DE" +"3262476108","3262476111","BE" +"3262476112","3262476115","NL" +"3262476116","3262476119","DE" +"3262476120","3262476123","FR" +"3262476124","3262476127","DE" +"3262476128","3262476131","GB" +"3262476132","3262476135","AR" +"3262476136","3262476139","US" +"3262476140","3262476143","BE" +"3262476144","3262476147","CH" +"3262476148","3262476155","US" +"3262476156","3262476159","BE" +"3262476160","3262476163","GR" +"3262476164","3262476171","DE" +"3262476172","3262476175","GB" +"3262476176","3262476179","ES" +"3262476180","3262476183","DE" +"3262476184","3262476187","AT" +"3262476188","3262476191","PT" +"3262476192","3262476195","DE" +"3262476196","3262476199","US" +"3262476200","3262476203","GB" +"3262476204","3262476207","NA" +"3262476208","3262476211","US" +"3262476212","3262476215","CL" +"3262476216","3262476223","FR" +"3262476224","3262476227","GR" +"3262476228","3262476231","SE" +"3262476232","3262476235","FR" +"3262476236","3262476239","US" +"3262476240","3262476243","IT" +"3262476244","3262476247","ES" +"3262476248","3262476251","NL" +"3262476252","3262476255","DE" +"3262476256","3262476259","US" +"3262476260","3262476267","DE" +"3262476268","3262476271","US" +"3262476272","3262476275","DE" +"3262476276","3262476279","CA" +"3262476280","3262476283","BE" +"3262476284","3262476291","DE" +"3262476292","3262476295","ZA" +"3262476296","3262476299","US" +"3262476300","3262476303","DO" +"3262476304","3262476307","US" +"3262476308","3262476315","DE" +"3262476316","3262476319","BE" +"3262476320","3262476323","DE" +"3262476324","3262476327","IT" +"3262476328","3262476331","NL" +"3262476332","3262476339","DE" +"3262476340","3262476343","ES" +"3262476344","3262476351","DE" +"3262476352","3262476355","AR" +"3262476356","3262476363","US" +"3262476364","3262476367","PT" +"3262476368","3262476371","US" +"3262476372","3262476375","DE" +"3262476376","3262476387","US" +"3262476388","3262476391","SK" +"3262476392","3262476395","DE" +"3262476396","3262476399","AT" +"3262476400","3262476403","ES" +"3262476404","3262476411","DE" +"3262476412","3262476415","US" +"3262476416","3262476419","DE" +"3262476420","3262476423","CH" +"3262476424","3262476427","ES" +"3262476428","3262476431","US" +"3262476432","3262476435","IT" +"3262476436","3262476439","AT" +"3262476440","3262476443","DE" +"3262476444","3262476447","AT" +"3262476448","3262476455","DE" +"3262476456","3262476459","CA" +"3262476460","3262476463","DK" +"3262476464","3262476467","SK" +"3262476468","3262476471","DE" +"3262476472","3262476475","CA" +"3262476476","3262476483","US" +"3262476484","3262476487","DE" +"3262476488","3262476491","US" +"3262476492","3262476495","BE" +"3262476496","3262476499","US" +"3262476500","3262476503","DE" +"3262476504","3262476507","CH" +"3262476508","3262476511","DE" +"3262476512","3262476515","US" +"3262476516","3262476519","DE" +"3262476520","3262476523","GB" +"3262476524","3262476527","MX" +"3262476528","3262476531","DE" +"3262476532","3262476535","IL" +"3262476536","3262476539","US" +"3262476540","3262476543","DE" +"3262476544","3262476547","DK" +"3262476548","3262476551","AR" +"3262476552","3262476555","IT" +"3262476556","3262476559","FR" +"3262476560","3262476567","DE" +"3262476568","3262476571","US" +"3262476572","3262476575","DE" +"3262476576","3262476587","US" +"3262476588","3262476591","ES" +"3262476592","3262476595","GB" +"3262476596","3262476603","DE" +"3262476604","3262476607","NL" +"3262476608","3262476611","SK" +"3262476612","3262476615","GB" +"3262476616","3262476619","TR" +"3262476620","3262476623","NL" +"3262476624","3262476627","US" +"3262476628","3262476635","DE" +"3262476636","3262476639","DK" +"3262476640","3262476643","DE" +"3262476644","3262476647","ZA" +"3262476648","3262476651","US" +"3262476652","3262476655","FR" +"3262476656","3262476667","US" +"3262476668","3262476671","GB" +"3262476672","3262476675","SE" +"3262476676","3262476679","DE" +"3262476680","3262476683","NL" +"3262476684","3262476687","IT" +"3262476688","3262476691","DE" +"3262476692","3262476695","FR" +"3262476696","3262476699","ES" +"3262476700","3262476707","DE" +"3262476708","3262476715","US" +"3262476716","3262476719","FR" +"3262476720","3262476723","IT" +"3262476724","3262476727","FR" +"3262476728","3262476731","US" +"3262476732","3262476735","DE" +"3262476736","3262476739","CA" +"3262476740","3262476743","DE" +"3262476744","3262476747","CH" +"3262476748","3262476751","BE" +"3262476752","3262476755","ES" +"3262476756","3262476759","DE" +"3262476760","3262476763","US" +"3262476764","3262476767","ES" +"3262476768","3262476771","DK" +"3262476772","3262476779","US" +"3262476780","3262476783","DE" +"3262476784","3262476787","IT" +"3262476788","3262476791","US" +"3262476792","3262476795","ES" +"3262476796","3262476799","DE" +"3262476800","3262476803","CA" +"3262476804","3262476807","TR" +"3262476808","3262476827","DE" +"3262476828","3262476831","LU" +"3262476832","3262476839","DE" +"3262476840","3262476843","IT" +"3262476844","3262476847","DE" +"3262476848","3262476851","CH" +"3262476852","3262476855","US" +"3262476856","3262476859","ES" +"3262476860","3262476863","DE" +"3262476864","3262476867","US" +"3262476868","3262476883","DE" +"3262476884","3262476887","FR" +"3262476888","3262476891","DE" +"3262476892","3262476895","HU" +"3262476896","3262476899","SK" +"3262476900","3262476903","FR" +"3262476904","3262476907","DE" +"3262476908","3262476911","NL" +"3262476912","3262476915","CH" +"3262476916","3262476919","DE" +"3262476920","3262476923","US" +"3262476924","3262476927","AT" +"3262476928","3262476935","DE" +"3262476936","3262476939","AT" +"3262476940","3262476951","DE" +"3262476952","3262476955","NL" +"3262476956","3262476971","DE" +"3262476972","3262476975","US" +"3262476976","3262476979","BE" +"3262476980","3262476983","DE" +"3262476984","3262476987","FR" +"3262476988","3262476995","DE" +"3262476996","3262476999","IT" +"3262477000","3262477003","GB" +"3262477004","3262477007","DE" +"3262477008","3262477011","CA" +"3262477012","3262477015","DE" +"3262477016","3262477019","CH" +"3262477020","3262477023","DE" +"3262477024","3262477035","FR" +"3262477036","3262477039","DK" +"3262477040","3262477043","US" +"3262477044","3262477047","GB" +"3262477048","3262477059","DE" +"3262477060","3262477063","US" +"3262477064","3262477067","DE" +"3262477068","3262477071","AT" +"3262477072","3262477075","PT" +"3262477076","3262477083","FR" +"3262477084","3262477087","NL" +"3262477088","3262477091","DE" +"3262477092","3262477095","BE" +"3262477096","3262477107","DE" +"3262477108","3262477111","ES" +"3262477112","3262477131","DE" +"3262477132","3262477135","SK" +"3262477136","3262477147","DE" +"3262477148","3262477151","FR" +"3262477152","3262477155","CH" +"3262477156","3262477159","ES" +"3262477160","3262477163","US" +"3262477164","3262477167","FR" +"3262477168","3262477171","NL" +"3262477172","3262477175","DE" +"3262477176","3262477187","US" +"3262477188","3262477191","IT" +"3262477192","3262477195","GB" +"3262477196","3262477199","PL" +"3262477200","3262477203","GB" +"3262477204","3262477207","US" +"3262477208","3262477211","ES" +"3262477212","3262477215","AT" +"3262477216","3262477219","US" +"3262477220","3262477223","KW" +"3262477224","3262477227","BE" +"3262477228","3262477231","GB" +"3262477232","3262477239","DE" +"3262477240","3262477243","CA" +"3262477244","3262477247","US" +"3262477248","3262477251","AR" +"3262477252","3262477255","ES" +"3262477256","3262477259","DE" +"3262477260","3262477263","GB" +"3262477264","3262477267","GR" +"3262477268","3262477271","NL" +"3262477272","3262477275","US" +"3262477276","3262477279","NL" +"3262477280","3262477283","DE" +"3262477284","3262477287","FR" +"3262477288","3262477291","BM" +"3262477292","3262477295","US" +"3262477296","3262477299","DK" +"3262477300","3262477303","IT" +"3262477304","3262477307","FR" +"3262477308","3262477311","DE" +"3262477312","3262477315","ES" +"3262477316","3262477319","HU" +"3262477320","3262477327","US" +"3262477328","3262477331","HU" +"3262477332","3262477335","DE" +"3262477336","3262477339","CA" +"3262477340","3262477343","US" +"3262477344","3262477347","CH" +"3262477348","3262477355","DE" +"3262477356","3262477359","PL" +"3262477360","3262477363","LU" +"3262477364","3262477367","ES" +"3262477368","3262477371","US" +"3262477372","3262477375","FR" +"3262477376","3262477379","AT" +"3262477380","3262477383","US" +"3262477384","3262477387","FR" +"3262477388","3262477399","DE" +"3262477400","3262477403","CH" +"3262477404","3262477407","DE" +"3262477408","3262477411","US" +"3262477412","3262477415","SA" +"3262477416","3262477419","DK" +"3262477420","3262477427","DE" +"3262477428","3262477431","US" +"3262477432","3262477439","DE" +"3262477440","3262477443","CH" +"3262477444","3262477447","BE" +"3262477448","3262477451","AR" +"3262477452","3262477455","PT" +"3262477456","3262477467","DE" +"3262477468","3262477471","AT" +"3262477472","3262477475","HU" +"3262477476","3262477479","FR" +"3262477480","3262477483","SE" +"3262477484","3262477487","NL" +"3262477488","3262477499","DE" +"3262477500","3262477503","ES" +"3262477504","3262477507","FR" +"3262477508","3262477511","CH" +"3262477512","3262477519","US" +"3262477520","3262477523","DE" +"3262477524","3262477527","IT" +"3262477528","3262477543","DE" +"3262477544","3262477547","US" +"3262477548","3262477551","DE" +"3262477552","3262477555","BR" +"3262477556","3262477559","US" +"3262477560","3262477563","CA" +"3262477564","3262477571","BE" +"3262477572","3262477575","NL" +"3262477576","3262477579","DE" +"3262477580","3262477583","NO" +"3262477584","3262477587","CA" +"3262477588","3262477591","FR" +"3262477592","3262477595","GB" +"3262477596","3262477599","CH" +"3262477600","3262477603","NL" +"3262477604","3262477607","IT" +"3262477608","3262477611","DE" +"3262477612","3262477615","US" +"3262477616","3262477619","IT" +"3262477620","3262477623","DE" +"3262477624","3262477627","FR" +"3262477628","3262477631","CH" +"3262477632","3262477635","AT" +"3262477636","3262477639","VE" +"3262477640","3262477643","DE" +"3262477644","3262477647","GB" +"3262477648","3262477655","DE" +"3262477656","3262477659","NL" +"3262477660","3262477671","US" +"3262477672","3262477675","NL" +"3262477676","3262477687","DE" +"3262477688","3262477691","FR" +"3262477692","3262477695","DE" +"3262477696","3262477699","NL" +"3262477700","3262477703","FR" +"3262477704","3262477707","IT" +"3262477708","3262477711","GB" +"3262477712","3262477727","DE" +"3262477728","3262477731","AT" +"3262477732","3262477735","NL" +"3262477736","3262477739","BR" +"3262477740","3262477743","NL" +"3262477744","3262477751","CH" +"3262477752","3262477759","DE" +"3262477760","3262477763","US" +"3262477764","3262477767","VE" +"3262477768","3262477771","DE" +"3262477772","3262477775","CA" +"3262477776","3262477779","CZ" +"3262477780","3262477783","GB" +"3262477784","3262477787","DE" +"3262477788","3262477791","US" +"3262477792","3262477795","GB" +"3262477796","3262477799","FR" +"3262477800","3262477803","BE" +"3262477804","3262477807","CH" +"3262477808","3262477811","CA" +"3262477812","3262477819","US" +"3262477820","3262477823","DE" +"3262477824","3262477827","GB" +"3262477828","3262477831","US" +"3262477832","3262477835","CH" +"3262477836","3262477839","ES" +"3262477840","3262477843","GB" +"3262477844","3262477847","DE" +"3262477848","3262477851","GB" +"3262477852","3262477855","DE" +"3262477856","3262477859","CA" +"3262477860","3262477863","US" +"3262477864","3262477867","TR" +"3262477868","3262477871","HU" +"3262477872","3262477883","DE" +"3262477884","3262477891","US" +"3262477892","3262477895","IT" +"3262477896","3262477899","US" +"3262477900","3262477903","DE" +"3262477904","3262477907","GB" +"3262477908","3262477911","CH" +"3262477912","3262477915","US" +"3262477916","3262477919","DE" +"3262477920","3262477923","US" +"3262477924","3262477927","HU" +"3262477928","3262477931","DE" +"3262477932","3262477935","US" +"3262477936","3262477939","DE" +"3262477940","3262477943","CA" +"3262477944","3262477955","DE" +"3262477956","3262477959","US" +"3262477960","3262477963","CA" +"3262477964","3262477967","DE" +"3262477968","3262477971","IT" +"3262477972","3262477987","DE" +"3262477988","3262477991","NL" +"3262477992","3262477999","DE" +"3262478000","3262478003","US" +"3262478004","3262478007","FR" +"3262478008","3262478011","IT" +"3262478012","3262478015","PE" +"3262478016","3262478019","CH" +"3262478020","3262478027","DE" +"3262478028","3262478031","SE" +"3262478032","3262478035","AT" +"3262478036","3262478039","DE" +"3262478040","3262478043","NL" +"3262478044","3262478047","IS" +"3262478048","3262478055","DE" +"3262478056","3262478063","CH" +"3262478064","3262478067","DE" +"3262478068","3262478071","KE" +"3262478072","3262478081","DE" +"3262478082","3262478082","ES" +"3262478083","3262478083","SA" +"3262478084","3262478084","TR" +"3262478085","3262478085","FR" +"3262478086","3262478088","DE" +"3262478089","3262478089","AT" +"3262478090","3262478090","DE" +"3262478091","3262478091","HU" +"3262478092","3262478092","PT" +"3262478093","3262478093","SA" +"3262478094","3262478094","PT" +"3262478095","3262478095","DE" +"3262478096","3262478096","PL" +"3262478097","3262478097","KE" +"3262478098","3262478098","TR" +"3262478099","3262478099","DE" +"3262478100","3262478100","TR" +"3262478101","3262478101","ZW" +"3262478102","3262478102","TR" +"3262478103","3262478103","DE" +"3262478104","3262478104","TR" +"3262478105","3262478105","PL" +"3262478106","3262478106","IT" +"3262478107","3262478107","TR" +"3262478108","3262478108","DE" +"3262478109","3262478109","AE" +"3262478110","3262478113","DE" +"3262478114","3262478114","TR" +"3262478115","3262478115","DE" +"3262478116","3262478116","NO" +"3262478117","3262478117","NA" +"3262478118","3262478118","DE" +"3262478119","3262478119","SA" +"3262478120","3262478120","NA" +"3262478121","3262478121","AO" +"3262478122","3262478122","NA" +"3262478123","3262478123","CY" +"3262478124","3262478124","DE" +"3262478125","3262478125","PT" +"3262478126","3262478126","CY" +"3262478127","3262478127","GR" +"3262478128","3262478128","CH" +"3262478129","3262478129","HU" +"3262478130","3262478130","FR" +"3262478131","3262478131","SK" +"3262478132","3262478132","ES" +"3262478133","3262478133","TR" +"3262478134","3262478134","ES" +"3262478135","3262478135","TR" +"3262478136","3262478137","HU" +"3262478138","3262478138","TR" +"3262478139","3262478139","DE" +"3262478140","3262478140","FR" +"3262478141","3262478143","TR" +"3262478144","3262478145","DE" +"3262478146","3262478146","GR" +"3262478147","3262478147","FR" +"3262478148","3262478148","KZ" +"3262478149","3262478149","UA" +"3262478150","3262478151","DE" +"3262478152","3262478152","PL" +"3262478153","3262478153","TR" +"3262478154","3262478154","DE" +"3262478155","3262478155","CU" +"3262478156","3262478156","TR" +"3262478157","3262478157","DE" +"3262478158","3262478158","IT" +"3262478159","3262478159","IL" +"3262478160","3262478160","TR" +"3262478161","3262478161","ZW" +"3262478162","3262478162","SA" +"3262478163","3262478163","FR" +"3262478164","3262478164","ZW" +"3262478165","3262478165","SK" +"3262478166","3262478166","TR" +"3262478167","3262478167","KZ" +"3262478168","3262478168","ES" +"3262478169","3262478169","PL" +"3262478170","3262478171","FR" +"3262478172","3262478172","GR" +"3262478173","3262478174","TR" +"3262478175","3262478175","DE" +"3262478176","3262478176","TR" +"3262478177","3262478177","DE" +"3262478178","3262478178","MZ" +"3262478179","3262478180","TR" +"3262478181","3262478181","CN" +"3262478182","3262478182","ES" +"3262478183","3262478183","PL" +"3262478184","3262478184","MZ" +"3262478185","3262478185","PL" +"3262478186","3262478186","ES" +"3262478187","3262478187","PT" +"3262478188","3262478188","TR" +"3262478189","3262478189","NA" +"3262478190","3262478190","DE" +"3262478191","3262478192","ZA" +"3262478193","3262478194","NA" +"3262478195","3262478207","DE" +"3262478208","3262478211","ES" +"3262478212","3262478215","NL" +"3262478216","3262478219","FR" +"3262478220","3262478223","SE" +"3262478224","3262478227","GB" +"3262478228","3262478231","ES" +"3262478232","3262478235","FR" +"3262478236","3262478239","IT" +"3262478240","3262478243","FR" +"3262478244","3262478247","DE" +"3262478248","3262478251","IT" +"3262478252","3262478255","CH" +"3262478256","3262478259","ES" +"3262478260","3262478263","DE" +"3262478264","3262478267","IT" +"3262478268","3262478271","ES" +"3262478272","3262478275","CH" +"3262478276","3262478299","DE" +"3262478300","3262478303","ES" +"3262478304","3262478307","PT" +"3262478308","3262478311","ES" +"3262478312","3262478319","DE" +"3262478320","3262478323","GB" +"3262478324","3262478327","BE" +"3262478328","3262478331","ES" +"3262478332","3262478335","GB" +"3262478336","3262478337","DE" +"3262478338","3262478338","PL" +"3262478339","3262478343","DE" +"3262478344","3262478344","IT" +"3262478345","3262478345","CH" +"3262478346","3262478346","PT" +"3262478347","3262478347","DE" +"3262478348","3262478348","DK" +"3262478349","3262478349","BE" +"3262478350","3262478350","AT" +"3262478351","3262478351","TR" +"3262478352","3262478352","CH" +"3262478353","3262478353","DK" +"3262478354","3262478354","FR" +"3262478355","3262478355","DE" +"3262478356","3262478356","FR" +"3262478357","3262478358","DE" +"3262478359","3262478360","FR" +"3262478361","3262478361","DE" +"3262478362","3262478362","FR" +"3262478363","3262478363","CH" +"3262478364","3262478364","PT" +"3262478365","3262478366","DE" +"3262478367","3262478367","HU" +"3262478368","3262478368","DE" +"3262478369","3262478369","NO" +"3262478370","3262478370","CH" +"3262478371","3262478371","DE" +"3262478372","3262478373","CH" +"3262478374","3262478374","PT" +"3262478375","3262478376","FR" +"3262478377","3262478377","DE" +"3262478378","3262478378","CH" +"3262478379","3262478379","DE" +"3262478380","3262478381","FR" +"3262478382","3262478382","AE" +"3262478383","3262478383","DE" +"3262478384","3262478384","AE" +"3262478385","3262478385","ZA" +"3262478386","3262478386","DE" +"3262478387","3262478387","IT" +"3262478388","3262478388","DE" +"3262478389","3262478389","CH" +"3262478390","3262478390","ES" +"3262478391","3262478391","HU" +"3262478392","3262478393","DE" +"3262478394","3262478394","IT" +"3262478395","3262478396","DE" +"3262478397","3262478397","PT" +"3262478398","3262478398","HU" +"3262478399","3262478399","DE" +"3262478400","3262478400","GB" +"3262478401","3262478401","DE" +"3262478402","3262478402","IT" +"3262478403","3262478403","CZ" +"3262478404","3262478404","FI" +"3262478405","3262478406","GB" +"3262478407","3262478412","DE" +"3262478413","3262478413","ES" +"3262478414","3262478414","PL" +"3262478415","3262478415","SE" +"3262478416","3262478416","SA" +"3262478417","3262478417","DE" +"3262478418","3262478418","AT" +"3262478419","3262478419","FR" +"3262478420","3262478421","DE" +"3262478422","3262478422","CH" +"3262478423","3262478423","SA" +"3262478424","3262478424","FR" +"3262478425","3262478425","IT" +"3262478426","3262478426","NO" +"3262478427","3262478428","FR" +"3262478429","3262478429","PT" +"3262478430","3262478430","CH" +"3262478431","3262478431","HU" +"3262478432","3262478432","RE" +"3262478433","3262478433","AT" +"3262478434","3262478434","PT" +"3262478435","3262478435","IT" +"3262478436","3262478437","DE" +"3262478438","3262478438","ZA" +"3262478439","3262478439","DE" +"3262478440","3262478440","SE" +"3262478441","3262478441","FR" +"3262478442","3262478442","IT" +"3262478443","3262478443","DE" +"3262478444","3262478444","AT" +"3262478445","3262478445","PT" +"3262478446","3262478449","DE" +"3262478450","3262478450","TR" +"3262478451","3262478451","FR" +"3262478452","3262478452","IL" +"3262478453","3262478453","DE" +"3262478454","3262478454","SE" +"3262478455","3262478455","IT" +"3262478456","3262478456","DE" +"3262478457","3262478457","GB" +"3262478458","3262478458","HU" +"3262478459","3262478459","ES" +"3262478460","3262478460","CY" +"3262478461","3262478465","DE" +"3262478466","3262478466","FR" +"3262478467","3262478467","HU" +"3262478468","3262478468","DE" +"3262478469","3262478469","FR" +"3262478470","3262478470","DE" +"3262478471","3262478471","ES" +"3262478472","3262478472","DE" +"3262478473","3262478473","FR" +"3262478474","3262478474","HU" +"3262478475","3262478476","DE" +"3262478477","3262478478","CH" +"3262478479","3262478479","DK" +"3262478480","3262478480","DE" +"3262478481","3262478481","DK" +"3262478482","3262478482","IT" +"3262478483","3262478483","FR" +"3262478484","3262478484","DE" +"3262478485","3262478485","CH" +"3262478486","3262478487","FR" +"3262478488","3262478488","HU" +"3262478489","3262478489","HR" +"3262478490","3262478490","SE" +"3262478491","3262478491","DE" +"3262478492","3262478492","CH" +"3262478493","3262478493","DE" +"3262478494","3262478494","FR" +"3262478495","3262478495","DE" +"3262478496","3262478496","PT" +"3262478497","3262478500","DE" +"3262478501","3262478501","CH" +"3262478502","3262478502","SE" +"3262478503","3262478503","ZA" +"3262478504","3262478504","FR" +"3262478505","3262478505","IT" +"3262478506","3262478506","PT" +"3262478507","3262478507","IT" +"3262478508","3262478508","PT" +"3262478509","3262478509","NL" +"3262478510","3262478513","DE" +"3262478514","3262478514","SE" +"3262478515","3262478515","PT" +"3262478516","3262478519","DE" +"3262478520","3262478520","CH" +"3262478521","3262478521","NL" +"3262478522","3262478522","QA" +"3262478523","3262478523","FR" +"3262478524","3262478524","ES" +"3262478525","3262478526","DE" +"3262478527","3262478527","ES" +"3262478528","3262478528","NL" +"3262478529","3262478529","ES" +"3262478530","3262478530","DE" +"3262478531","3262478531","FR" +"3262478532","3262478536","DE" +"3262478537","3262478537","HU" +"3262478538","3262478538","DE" +"3262478539","3262478539","FI" +"3262478540","3262478540","HU" +"3262478541","3262478542","DE" +"3262478543","3262478543","AT" +"3262478544","3262478544","NL" +"3262478545","3262478546","DE" +"3262478547","3262478547","FR" +"3262478548","3262478548","ES" +"3262478549","3262478549","FR" +"3262478550","3262478550","DE" +"3262478551","3262478551","PL" +"3262478552","3262478552","HU" +"3262478553","3262478553","PL" +"3262478554","3262478554","SE" +"3262478555","3262478555","DE" +"3262478556","3262478556","GB" +"3262478557","3262478557","DE" +"3262478558","3262478558","IT" +"3262478559","3262478560","DE" +"3262478561","3262478562","FR" +"3262478563","3262478563","DK" +"3262478564","3262478564","RU" +"3262478565","3262478566","FR" +"3262478567","3262478567","HU" +"3262478568","3262478568","DE" +"3262478569","3262478569","TR" +"3262478570","3262478570","FR" +"3262478571","3262478594","DE" +"3262478595","3262478595","CH" +"3262478596","3262478596","PT" +"3262478597","3262478597","SE" +"3262478598","3262478599","DE" +"3262478600","3262478600","IT" +"3262478601","3262478601","KW" +"3262478602","3262478602","FR" +"3262478603","3262478604","DE" +"3262478605","3262478605","ES" +"3262478606","3262478606","FI" +"3262478607","3262478607","GR" +"3262478608","3262478608","DE" +"3262478609","3262478609","IT" +"3262478610","3262478610","ES" +"3262478611","3262478611","HU" +"3262478612","3262478620","DE" +"3262478621","3262478621","SE" +"3262478622","3262478622","TR" +"3262478623","3262478623","ES" +"3262478624","3262478624","FR" +"3262478625","3262478625","DE" +"3262478626","3262478626","HU" +"3262478627","3262478627","DE" +"3262478628","3262478628","HU" +"3262478629","3262478629","DE" +"3262478630","3262478630","FR" +"3262478631","3262478631","PL" +"3262478632","3262478632","AN" +"3262478633","3262478633","AT" +"3262478634","3262478634","ES" +"3262478635","3262478635","SA" +"3262478636","3262478636","CH" +"3262478637","3262478637","GB" +"3262478638","3262478639","DE" +"3262478640","3262478640","PT" +"3262478641","3262478641","DE" +"3262478642","3262478642","CH" +"3262478643","3262478643","DE" +"3262478644","3262478644","ES" +"3262478645","3262478645","DE" +"3262478646","3262478646","AT" +"3262478647","3262478647","FR" +"3262478648","3262478648","PT" +"3262478649","3262478649","CZ" +"3262478650","3262478650","ES" +"3262478651","3262478651","FR" +"3262478652","3262478653","ES" +"3262478654","3262478655","DE" +"3262478656","3262478656","PL" +"3262478657","3262478657","DE" +"3262478658","3262478658","ES" +"3262478659","3262478659","DE" +"3262478660","3262478660","SK" +"3262478661","3262478661","BE" +"3262478662","3262478662","TR" +"3262478663","3262478663","AT" +"3262478664","3262478664","ES" +"3262478665","3262478665","DE" +"3262478666","3262478666","AT" +"3262478667","3262478667","DE" +"3262478668","3262478668","IT" +"3262478669","3262478670","DE" +"3262478671","3262478671","FR" +"3262478672","3262478673","DE" +"3262478674","3262478674","SK" +"3262478675","3262478675","PL" +"3262478676","3262478676","CH" +"3262478677","3262478677","HU" +"3262478678","3262478678","IT" +"3262478679","3262478679","FR" +"3262478680","3262478680","GB" +"3262478681","3262478681","ES" +"3262478682","3262478682","CH" +"3262478683","3262478683","IT" +"3262478684","3262478684","BE" +"3262478685","3262478685","DE" +"3262478686","3262478686","FR" +"3262478687","3262478687","ES" +"3262478688","3262478688","TR" +"3262478689","3262478689","GB" +"3262478690","3262478690","AT" +"3262478691","3262478691","CH" +"3262478692","3262478692","PL" +"3262478693","3262478693","TR" +"3262478694","3262478694","CH" +"3262478695","3262478695","DE" +"3262478696","3262478696","LI" +"3262478697","3262478697","ES" +"3262478698","3262478698","IT" +"3262478699","3262478699","ES" +"3262478700","3262478700","IT" +"3262478701","3262478701","DE" +"3262478702","3262478702","CH" +"3262478703","3262478703","FR" +"3262478704","3262478704","IT" +"3262478705","3262478706","PT" +"3262478707","3262478707","ES" +"3262478708","3262478721","DE" +"3262478722","3262478722","FR" +"3262478723","3262478724","DE" +"3262478725","3262478725","IT" +"3262478726","3262478726","FR" +"3262478727","3262478727","AT" +"3262478728","3262478728","NL" +"3262478729","3262478729","SK" +"3262478730","3262478730","IT" +"3262478731","3262478731","PT" +"3262478732","3262478732","PL" +"3262478733","3262478733","SK" +"3262478734","3262478735","DE" +"3262478736","3262478736","HU" +"3262478737","3262478737","ES" +"3262478738","3262478738","SK" +"3262478739","3262478739","SE" +"3262478740","3262478740","FR" +"3262478741","3262478741","DK" +"3262478742","3262478742","CH" +"3262478743","3262478743","FR" +"3262478744","3262478744","GR" +"3262478745","3262478745","IT" +"3262478746","3262478746","SE" +"3262478747","3262478747","FR" +"3262478748","3262478748","DE" +"3262478749","3262478751","FR" +"3262478752","3262478752","PT" +"3262478753","3262478753","IE" +"3262478754","3262478754","DE" +"3262478755","3262478755","DK" +"3262478756","3262478756","DE" +"3262478757","3262478757","AT" +"3262478758","3262478758","FR" +"3262478759","3262478759","CH" +"3262478760","3262478760","TR" +"3262478761","3262478761","HU" +"3262478762","3262478762","CY" +"3262478763","3262478763","ES" +"3262478764","3262478764","DE" +"3262478765","3262478766","ES" +"3262478767","3262478767","PT" +"3262478768","3262478768","PL" +"3262478769","3262478769","ES" +"3262478770","3262478770","IT" +"3262478771","3262478771","SK" +"3262478772","3262478772","FR" +"3262478773","3262478773","CZ" +"3262478774","3262478774","DE" +"3262478775","3262478775","CH" +"3262478776","3262478776","ES" +"3262478777","3262478778","IT" +"3262478779","3262478779","ES" +"3262478780","3262478780","PT" +"3262478781","3262478781","PL" +"3262478782","3262478782","MA" +"3262478783","3262478783","ES" +"3262478784","3262478785","TR" +"3262478786","3262478786","DE" +"3262478787","3262478787","PT" +"3262478788","3262478788","NO" +"3262478789","3262478789","GR" +"3262478790","3262478790","DE" +"3262478791","3262478791","GB" +"3262478792","3262478792","PT" +"3262478793","3262478793","FR" +"3262478794","3262478794","PT" +"3262478795","3262478795","PL" +"3262478796","3262478796","HU" +"3262478797","3262478797","CY" +"3262478798","3262478798","IT" +"3262478799","3262478799","HU" +"3262478800","3262478800","PL" +"3262478801","3262478801","DE" +"3262478802","3262478802","IT" +"3262478803","3262478803","ES" +"3262478804","3262478804","DE" +"3262478805","3262478806","GR" +"3262478807","3262478807","CH" +"3262478808","3262478808","HU" +"3262478809","3262478809","TR" +"3262478810","3262478810","CH" +"3262478811","3262478811","FR" +"3262478812","3262478812","PL" +"3262478813","3262478813","LB" +"3262478814","3262478851","DE" +"3262478852","3262478853","CH" +"3262478854","3262478855","DE" +"3262478856","3262478856","FR" +"3262478857","3262478857","LI" +"3262478858","3262478860","DE" +"3262478861","3262478861","FR" +"3262478862","3262478862","DE" +"3262478863","3262478863","AT" +"3262478864","3262478864","NL" +"3262478865","3262478865","DE" +"3262478866","3262478866","CH" +"3262478867","3262478867","GB" +"3262478868","3262478868","IT" +"3262478869","3262478870","FR" +"3262478871","3262478872","DE" +"3262478873","3262478873","NL" +"3262478874","3262478874","AT" +"3262478875","3262478875","DE" +"3262478876","3262478876","GB" +"3262478877","3262478877","DE" +"3262478878","3262478878","AT" +"3262478879","3262478881","DE" +"3262478882","3262478882","GR" +"3262478883","3262478886","DE" +"3262478887","3262478887","NL" +"3262478888","3262478888","DK" +"3262478889","3262478890","FR" +"3262478891","3262478893","DE" +"3262478894","3262478894","AT" +"3262478895","3262478895","DE" +"3262478896","3262478896","NL" +"3262478897","3262478897","FR" +"3262478898","3262478898","GB" +"3262478899","3262478899","SE" +"3262478900","3262478900","GB" +"3262478901","3262478901","DE" +"3262478902","3262478902","IT" +"3262478903","3262478904","DE" +"3262478905","3262478905","SE" +"3262478906","3262478909","DE" +"3262478910","3262478910","DK" +"3262478911","3262478911","BH" +"3262478912","3262478912","NL" +"3262478913","3262478913","FR" +"3262478914","3262478914","DE" +"3262478915","3262478915","NL" +"3262478916","3262478920","DE" +"3262478921","3262478921","AT" +"3262478922","3262478924","DE" +"3262478925","3262478925","NL" +"3262478926","3262478926","AT" +"3262478927","3262478927","DE" +"3262478928","3262478928","DK" +"3262478929","3262478929","GB" +"3262478930","3262478931","DE" +"3262478932","3262478932","CH" +"3262478933","3262478935","DE" +"3262478936","3262478937","CH" +"3262478938","3262478938","NL" +"3262478939","3262478939","GB" +"3262478940","3262478940","NL" +"3262478941","3262478941","DE" +"3262478942","3262478942","BE" +"3262478943","3262478943","SI" +"3262478944","3262478945","DE" +"3262478946","3262478946","IE" +"3262478947","3262478947","DE" +"3262478948","3262478948","IT" +"3262478949","3262478949","SE" +"3262478950","3262478954","DE" +"3262478955","3262478955","FR" +"3262478956","3262478956","DE" +"3262478957","3262478957","PT" +"3262478958","3262478958","SE" +"3262478959","3262478961","NL" +"3262478962","3262478963","DE" +"3262478964","3262478964","CH" +"3262478965","3262478966","DE" +"3262478967","3262478967","NL" +"3262478968","3262478968","ES" +"3262478969","3262478969","DE" +"3262478970","3262478970","BE" +"3262478971","3262478971","DE" +"3262478972","3262478972","NO" +"3262478973","3262478973","CH" +"3262478974","3262478974","GB" +"3262478975","3262478980","DE" +"3262478981","3262478981","IT" +"3262478982","3262478982","DE" +"3262478983","3262478983","NL" +"3262478984","3262478984","CH" +"3262478985","3262478985","PT" +"3262478986","3262478986","DE" +"3262478987","3262478987","GB" +"3262478988","3262478988","IE" +"3262478989","3262478989","NL" +"3262478990","3262478990","DE" +"3262478991","3262478992","FR" +"3262478993","3262478993","NL" +"3262478994","3262478997","DE" +"3262478998","3262478998","GB" +"3262478999","3262478999","AT" +"3262479000","3262479000","CH" +"3262479001","3262479001","AT" +"3262479002","3262479002","DE" +"3262479003","3262479003","FR" +"3262479004","3262479007","DE" +"3262479008","3262479008","NL" +"3262479009","3262479009","NO" +"3262479010","3262479011","NL" +"3262479012","3262479012","DE" +"3262479013","3262479013","NL" +"3262479014","3262479014","ES" +"3262479015","3262479015","CH" +"3262479016","3262479016","SE" +"3262479017","3262479017","DK" +"3262479018","3262479018","IT" +"3262479019","3262479019","DE" +"3262479020","3262479022","CH" +"3262479023","3262479024","DE" +"3262479025","3262479025","NL" +"3262479026","3262479027","DE" +"3262479028","3262479028","CH" +"3262479029","3262479029","DE" +"3262479030","3262479030","ES" +"3262479031","3262479031","AT" +"3262479032","3262479036","DE" +"3262479037","3262479037","AT" +"3262479038","3262479038","DK" +"3262479039","3262479039","DE" +"3262479040","3262479040","NL" +"3262479041","3262479041","CH" +"3262479042","3262479042","DK" +"3262479043","3262479043","FR" +"3262479044","3262479044","DE" +"3262479045","3262479045","IT" +"3262479046","3262479046","DE" +"3262479047","3262479047","AT" +"3262479048","3262479048","NL" +"3262479049","3262479050","DE" +"3262479051","3262479051","GB" +"3262479052","3262479052","DE" +"3262479053","3262479053","NL" +"3262479054","3262479056","DE" +"3262479057","3262479057","GB" +"3262479058","3262479058","FR" +"3262479059","3262479059","IT" +"3262479060","3262479062","DE" +"3262479063","3262479063","CH" +"3262479064","3262479064","FR" +"3262479065","3262479065","DE" +"3262479066","3262479066","IT" +"3262479067","3262479067","DE" +"3262479068","3262479068","ES" +"3262479069","3262479069","FR" +"3262479070","3262479070","ES" +"3262479071","3262479074","DE" +"3262479075","3262479075","CH" +"3262479076","3262479076","BE" +"3262479077","3262479077","DE" +"3262479078","3262479078","IT" +"3262479079","3262479079","ES" +"3262479080","3262479080","LU" +"3262479081","3262479081","CH" +"3262479082","3262479082","IT" +"3262479083","3262479083","NL" +"3262479084","3262479084","CH" +"3262479085","3262479085","IT" +"3262479086","3262479086","FR" +"3262479087","3262479088","DE" +"3262479089","3262479089","CH" +"3262479090","3262479090","FR" +"3262479091","3262479091","DE" +"3262479092","3262479092","IT" +"3262479093","3262479093","FR" +"3262479094","3262479095","GB" +"3262479096","3262479096","ES" +"3262479097","3262479097","FR" +"3262479098","3262479098","GB" +"3262479099","3262479099","DE" +"3262479100","3262479100","DK" +"3262479101","3262479101","CH" +"3262479102","3262479102","IT" +"3262479103","3262479105","DE" +"3262479106","3262479106","ES" +"3262479107","3262479107","IT" +"3262479108","3262479108","AT" +"3262479109","3262479109","FR" +"3262479110","3262479110","DE" +"3262479111","3262479111","LU" +"3262479112","3262479115","DE" +"3262479116","3262479116","IT" +"3262479117","3262479117","CH" +"3262479118","3262479118","GR" +"3262479119","3262479120","DE" +"3262479121","3262479121","ES" +"3262479122","3262479122","FR" +"3262479123","3262479123","DE" +"3262479124","3262479124","FR" +"3262479125","3262479125","IL" +"3262479126","3262479130","DE" +"3262479131","3262479131","NL" +"3262479132","3262479132","AT" +"3262479133","3262479133","NL" +"3262479134","3262479134","ES" +"3262479135","3262479139","DE" +"3262479140","3262479140","NL" +"3262479141","3262479142","DE" +"3262479143","3262479143","GB" +"3262479144","3262479144","CH" +"3262479145","3262479145","NO" +"3262479146","3262479146","DE" +"3262479147","3262479147","IT" +"3262479148","3262479149","ES" +"3262479150","3262479151","DE" +"3262479152","3262479152","NL" +"3262479153","3262479153","DE" +"3262479154","3262479154","FR" +"3262479155","3262479155","NL" +"3262479156","3262479156","DE" +"3262479157","3262479157","ES" +"3262479158","3262479158","DE" +"3262479159","3262479159","FR" +"3262479160","3262479160","DE" +"3262479161","3262479161","FR" +"3262479162","3262479162","DE" +"3262479163","3262479163","FR" +"3262479164","3262479164","DE" +"3262479165","3262479167","CH" +"3262479168","3262479168","DE" +"3262479169","3262479169","IT" +"3262479170","3262479170","CH" +"3262479171","3262479171","ES" +"3262479172","3262479174","DE" +"3262479175","3262479175","FR" +"3262479176","3262479178","DE" +"3262479179","3262479179","AT" +"3262479180","3262479180","NL" +"3262479181","3262479181","DE" +"3262479182","3262479182","LU" +"3262479183","3262479183","DK" +"3262479184","3262479184","CH" +"3262479185","3262479185","IT" +"3262479186","3262479186","ES" +"3262479187","3262479187","DE" +"3262479188","3262479188","CH" +"3262479189","3262479189","ES" +"3262479190","3262479191","IT" +"3262479192","3262479192","FR" +"3262479193","3262479193","GB" +"3262479194","3262479194","DE" +"3262479195","3262479195","BE" +"3262479196","3262479196","DE" +"3262479197","3262479197","GB" +"3262479198","3262479199","DE" +"3262479200","3262479200","NL" +"3262479201","3262479201","HU" +"3262479202","3262479202","FR" +"3262479203","3262479208","DE" +"3262479209","3262479209","ES" +"3262479210","3262479212","DE" +"3262479213","3262479213","NO" +"3262479214","3262479214","DE" +"3262479215","3262479215","IT" +"3262479216","3262479219","DE" +"3262479220","3262479220","NL" +"3262479221","3262479223","DE" +"3262479224","3262479224","BE" +"3262479225","3262479225","FR" +"3262479226","3262479226","DE" +"3262479227","3262479227","NL" +"3262479228","3262479228","DK" +"3262479229","3262479233","DE" +"3262479234","3262479234","GB" +"3262479235","3262479236","DE" +"3262479237","3262479238","NL" +"3262479239","3262479239","FR" +"3262479240","3262479240","DE" +"3262479241","3262479242","FR" +"3262479243","3262479243","NL" +"3262479244","3262479244","IT" +"3262479245","3262479249","DE" +"3262479250","3262479250","AT" +"3262479251","3262479252","DE" +"3262479253","3262479253","NL" +"3262479254","3262479254","FR" +"3262479255","3262479255","DE" +"3262479256","3262479256","IT" +"3262479257","3262479257","US" +"3262479258","3262479261","DE" +"3262479262","3262479262","CH" +"3262479263","3262479264","DE" +"3262479265","3262479265","CH" +"3262479266","3262479266","FR" +"3262479267","3262479267","DE" +"3262479268","3262479268","NL" +"3262479269","3262479269","DE" +"3262479270","3262479271","DK" +"3262479272","3262479272","IT" +"3262479273","3262479273","DE" +"3262479274","3262479274","ES" +"3262479275","3262479275","IT" +"3262479276","3262479276","DE" +"3262479277","3262479277","NL" +"3262479278","3262479278","DE" +"3262479279","3262479279","ES" +"3262479280","3262479280","DE" +"3262479281","3262479281","FR" +"3262479282","3262479282","DE" +"3262479283","3262479283","IT" +"3262479284","3262479284","NO" +"3262479285","3262479289","DE" +"3262479290","3262479290","BE" +"3262479291","3262479293","DE" +"3262479294","3262479294","FR" +"3262479295","3262479295","DE" +"3262479296","3262479296","IT" +"3262479297","3262479298","DE" +"3262479299","3262479299","ES" +"3262479300","3262479300","DE" +"3262479301","3262479301","ES" +"3262479302","3262479303","DE" +"3262479304","3262479304","AT" +"3262479305","3262479307","DE" +"3262479308","3262479308","DK" +"3262479309","3262479309","SE" +"3262479310","3262479312","DE" +"3262479313","3262479313","FR" +"3262479314","3262479318","DE" +"3262479319","3262479319","DK" +"3262479320","3262479320","DE" +"3262479321","3262479321","GR" +"3262479322","3262479323","CH" +"3262479324","3262479324","NL" +"3262479325","3262479325","ES" +"3262479326","3262479327","DE" +"3262479328","3262479328","DK" +"3262479329","3262479329","ES" +"3262479330","3262479330","NL" +"3262479331","3262479332","FR" +"3262479333","3262479333","HU" +"3262479334","3262479334","NL" +"3262479335","3262479335","DE" +"3262479336","3262479336","FR" +"3262479337","3262479337","ES" +"3262479338","3262479338","DE" +"3262479339","3262479339","NL" +"3262479340","3262479340","CH" +"3262479341","3262479341","DE" +"3262479342","3262479342","PT" +"3262479343","3262479343","NO" +"3262479344","3262479344","NL" +"3262479345","3262479345","DE" +"3262479346","3262479346","DK" +"3262479347","3262479347","NO" +"3262479348","3262479350","IT" +"3262479351","3262479351","DE" +"3262479352","3262479352","IT" +"3262479353","3262479353","CH" +"3262479354","3262479355","DE" +"3262479356","3262479356","CH" +"3262479357","3262479357","FR" +"3262479358","3262479361","DE" +"3262479362","3262479362","PT" +"3262479363","3262479366","DE" +"3262479367","3262479367","CH" +"3262479368","3262479368","DE" +"3262479369","3262479369","FR" +"3262479370","3262479370","CH" +"3262479371","3262479371","GB" +"3262479372","3262479372","DE" +"3262479373","3262479373","IT" +"3262479374","3262479374","DE" +"3262479375","3262479375","NL" +"3262479376","3262479377","FR" +"3262479378","3262479378","DE" +"3262479379","3262479379","CH" +"3262479380","3262479380","AT" +"3262479381","3262479381","FR" +"3262479382","3262479385","DE" +"3262479386","3262479386","NL" +"3262479387","3262479387","DK" +"3262479388","3262479389","DE" +"3262479390","3262479390","DK" +"3262479391","3262479391","NO" +"3262479392","3262479393","DE" +"3262479394","3262479394","FR" +"3262479395","3262479395","NL" +"3262479396","3262479396","CH" +"3262479397","3262479397","IT" +"3262479398","3262479399","DE" +"3262479400","3262479400","NL" +"3262479401","3262479402","DE" +"3262479403","3262479403","GB" +"3262479404","3262479404","DE" +"3262479405","3262479405","IE" +"3262479406","3262479406","GB" +"3262479407","3262479410","DE" +"3262479411","3262479411","ES" +"3262479412","3262479413","DE" +"3262479414","3262479414","CH" +"3262479415","3262479415","DE" +"3262479416","3262479416","DK" +"3262479417","3262479419","DE" +"3262479420","3262479420","ES" +"3262479421","3262479421","DE" +"3262479422","3262479422","SE" +"3262479423","3262479426","DE" +"3262479427","3262479427","IT" +"3262479428","3262479429","FR" +"3262479430","3262479430","GB" +"3262479431","3262479433","DE" +"3262479434","3262479434","IT" +"3262479435","3262479437","DE" +"3262479438","3262479438","IT" +"3262479439","3262479439","DE" +"3262479440","3262479440","AT" +"3262479441","3262479441","DK" +"3262479442","3262479442","IT" +"3262479443","3262479443","GR" +"3262479444","3262479444","ES" +"3262479445","3262479445","DE" +"3262479446","3262479446","IT" +"3262479447","3262479448","DE" +"3262479449","3262479449","GB" +"3262479450","3262479452","DE" +"3262479453","3262479453","CH" +"3262479454","3262479455","DE" +"3262479456","3262479456","IT" +"3262479457","3262479462","DE" +"3262479463","3262479463","IT" +"3262479464","3262479464","NL" +"3262479465","3262479465","DE" +"3262479466","3262479466","GB" +"3262479467","3262479467","CH" +"3262479468","3262479469","DE" +"3262479470","3262479471","GB" +"3262479472","3262479472","DE" +"3262479473","3262479473","CH" +"3262479474","3262479474","BE" +"3262479475","3262479475","CH" +"3262479476","3262479476","GB" +"3262479477","3262479477","BE" +"3262479478","3262479478","IT" +"3262479479","3262479480","DE" +"3262479481","3262479481","LI" +"3262479482","3262479482","IT" +"3262479483","3262479483","DE" +"3262479484","3262479484","AT" +"3262479485","3262479489","DE" +"3262479490","3262479490","IT" +"3262479491","3262479492","DE" +"3262479493","3262479493","CH" +"3262479494","3262479494","DE" +"3262479495","3262479495","BE" +"3262479496","3262479498","DE" +"3262479499","3262479499","ES" +"3262479500","3262479502","IT" +"3262479503","3262479503","DE" +"3262479504","3262479504","GB" +"3262479505","3262479507","DE" +"3262479508","3262479508","HU" +"3262479509","3262479509","FR" +"3262479510","3262479513","DE" +"3262479514","3262479514","FR" +"3262479515","3262479515","ES" +"3262479516","3262479517","DE" +"3262479518","3262479518","GB" +"3262479519","3262479519","GR" +"3262479520","3262479521","DE" +"3262479522","3262479522","CH" +"3262479523","3262479526","DE" +"3262479527","3262479528","NL" +"3262479529","3262479529","DE" +"3262479530","3262479530","BE" +"3262479531","3262479535","DE" +"3262479536","3262479536","GB" +"3262479537","3262479538","DE" +"3262479539","3262479539","IT" +"3262479540","3262479540","DE" +"3262479541","3262479541","CH" +"3262479542","3262479543","DE" +"3262479544","3262479544","IT" +"3262479545","3262479545","BE" +"3262479546","3262479546","GB" +"3262479547","3262479547","AT" +"3262479548","3262479548","CH" +"3262479549","3262479549","IT" +"3262479550","3262479552","DE" +"3262479553","3262479553","IL" +"3262479554","3262479554","DK" +"3262479555","3262479555","FR" +"3262479556","3262479556","IE" +"3262479557","3262479558","DE" +"3262479559","3262479559","SE" +"3262479560","3262479560","DE" +"3262479561","3262479561","BE" +"3262479562","3262479562","GB" +"3262479563","3262479563","DE" +"3262479564","3262479564","GB" +"3262479565","3262479565","SE" +"3262479566","3262479566","NL" +"3262479567","3262479567","CH" +"3262479568","3262479568","NO" +"3262479569","3262479573","DE" +"3262479574","3262479574","CH" +"3262479575","3262479575","DE" +"3262479576","3262479576","NL" +"3262479577","3262479577","FR" +"3262479578","3262479578","DE" +"3262479579","3262479579","ZA" +"3262479580","3262479580","DE" +"3262479581","3262479581","IT" +"3262479582","3262479583","DE" +"3262479584","3262479584","NL" +"3262479585","3262479585","DE" +"3262479586","3262479586","GR" +"3262479587","3262479588","DE" +"3262479589","3262479589","IT" +"3262479590","3262479590","GB" +"3262479591","3262479591","NL" +"3262479592","3262479592","DE" +"3262479593","3262479593","FR" +"3262479594","3262479594","DE" +"3262479595","3262479596","FR" +"3262479597","3262479598","DE" +"3262479599","3262479600","IT" +"3262479601","3262479601","DE" +"3262479602","3262479602","GB" +"3262479603","3262479604","DE" +"3262479605","3262479605","SE" +"3262479606","3262479606","FR" +"3262479607","3262479607","NL" +"3262479608","3262479609","DE" +"3262479610","3262479610","SI" +"3262479611","3262479611","DE" +"3262479612","3262479612","ES" +"3262479613","3262479613","NL" +"3262479614","3262479617","DE" +"3262479618","3262479618","NO" +"3262479619","3262479619","ES" +"3262479620","3262479620","GB" +"3262479621","3262479622","DE" +"3262479623","3262479623","CH" +"3262479624","3262479624","ES" +"3262479625","3262479625","NL" +"3262479626","3262479626","AT" +"3262479627","3262479628","DE" +"3262479629","3262479629","SI" +"3262479630","3262479630","NL" +"3262479631","3262479631","HU" +"3262479632","3262479632","DE" +"3262479633","3262479633","LU" +"3262479634","3262479634","DE" +"3262479635","3262479636","GB" +"3262479637","3262479637","ES" +"3262479638","3262479638","DE" +"3262479639","3262479639","AT" +"3262479640","3262479640","FR" +"3262479641","3262479641","IT" +"3262479642","3262479642","GB" +"3262479643","3262479643","DE" +"3262479644","3262479644","NL" +"3262479645","3262479645","DE" +"3262479646","3262479646","GB" +"3262479647","3262479647","DE" +"3262479648","3262479648","NO" +"3262479649","3262479653","DE" +"3262479654","3262479654","ES" +"3262479655","3262479655","NL" +"3262479656","3262479656","CH" +"3262479657","3262479657","NL" +"3262479658","3262479658","DE" +"3262479659","3262479659","NL" +"3262479660","3262479660","PT" +"3262479661","3262479662","FR" +"3262479663","3262479664","DE" +"3262479665","3262479665","DK" +"3262479666","3262479667","DE" +"3262479668","3262479668","NL" +"3262479669","3262479669","IT" +"3262479670","3262479670","DK" +"3262479671","3262479671","IT" +"3262479672","3262479673","DE" +"3262479674","3262479674","BE" +"3262479675","3262479676","DE" +"3262479677","3262479677","ES" +"3262479678","3262479678","IT" +"3262479679","3262479679","AT" +"3262479680","3262479680","IT" +"3262479681","3262479681","DE" +"3262479682","3262479682","IT" +"3262479683","3262479683","HU" +"3262479684","3262479685","DE" +"3262479686","3262479687","FR" +"3262479688","3262479688","DE" +"3262479689","3262479689","NL" +"3262479690","3262479690","LU" +"3262479691","3262479691","DE" +"3262479692","3262479692","LU" +"3262479693","3262479693","DE" +"3262479694","3262479694","CH" +"3262479695","3262479695","ES" +"3262479696","3262479696","CH" +"3262479697","3262479697","GB" +"3262479698","3262479698","FR" +"3262479699","3262479701","NL" +"3262479702","3262479702","AT" +"3262479703","3262479703","FR" +"3262479704","3262479707","DE" +"3262479708","3262479708","CH" +"3262479709","3262479709","NL" +"3262479710","3262479711","DE" +"3262479712","3262479712","GB" +"3262479713","3262479713","DE" +"3262479714","3262479714","AT" +"3262479715","3262479715","ES" +"3262479716","3262479716","DE" +"3262479717","3262479717","BE" +"3262479718","3262479720","DE" +"3262479721","3262479721","AT" +"3262479722","3262479724","DE" +"3262479725","3262479725","AT" +"3262479726","3262479727","DE" +"3262479728","3262479728","BE" +"3262479729","3262479730","ES" +"3262479731","3262479731","CH" +"3262479732","3262479732","IT" +"3262479733","3262479734","DE" +"3262479735","3262479736","CH" +"3262479737","3262479737","DE" +"3262479738","3262479738","AT" +"3262479739","3262479739","DK" +"3262479740","3262479740","DE" +"3262479741","3262479741","NL" +"3262479742","3262479742","FR" +"3262479743","3262479745","DE" +"3262479746","3262479746","GB" +"3262479747","3262479747","CH" +"3262479748","3262479748","DE" +"3262479749","3262479749","FR" +"3262479750","3262479750","AT" +"3262479751","3262479751","DE" +"3262479752","3262479752","CH" +"3262479753","3262479753","DE" +"3262479754","3262479754","FR" +"3262479755","3262479755","NL" +"3262479756","3262479756","FR" +"3262479757","3262479757","SE" +"3262479758","3262479762","DE" +"3262479763","3262479763","NO" +"3262479764","3262479764","FR" +"3262479765","3262479765","DE" +"3262479766","3262479766","CH" +"3262479767","3262479770","DE" +"3262479771","3262479771","IT" +"3262479772","3262479775","DE" +"3262479776","3262479776","IT" +"3262479777","3262479777","BE" +"3262479778","3262479778","NL" +"3262479779","3262479782","DE" +"3262479783","3262479783","GB" +"3262479784","3262479784","AT" +"3262479785","3262479785","FR" +"3262479786","3262479786","CH" +"3262479787","3262479788","DE" +"3262479789","3262479789","IT" +"3262479790","3262479790","DE" +"3262479791","3262479792","IT" +"3262479793","3262479793","DE" +"3262479794","3262479794","FR" +"3262479795","3262479795","CH" +"3262479796","3262479797","AT" +"3262479798","3262479799","GB" +"3262479800","3262479808","DE" +"3262479809","3262479809","FR" +"3262479810","3262479810","NL" +"3262479811","3262479811","ES" +"3262479812","3262479816","DE" +"3262479817","3262479817","HU" +"3262479818","3262479818","DE" +"3262479819","3262479819","NL" +"3262479820","3262479820","DE" +"3262479821","3262479822","NL" +"3262479823","3262479823","ES" +"3262479824","3262479824","GB" +"3262479825","3262479825","DE" +"3262479826","3262479826","BE" +"3262479827","3262479827","DE" +"3262479828","3262479829","CH" +"3262479830","3262479830","GB" +"3262479831","3262479832","DE" +"3262479833","3262479833","ES" +"3262479834","3262479834","DE" +"3262479835","3262479835","AT" +"3262479836","3262479836","NL" +"3262479837","3262479837","HU" +"3262479838","3262479838","CH" +"3262479839","3262479839","NL" +"3262479840","3262479840","DE" +"3262479841","3262479841","FR" +"3262479842","3262479842","DK" +"3262479843","3262479843","GB" +"3262479844","3262479844","DE" +"3262479845","3262479845","CH" +"3262479846","3262479846","DE" +"3262479847","3262479847","LU" +"3262479848","3262479852","DE" +"3262479853","3262479853","IS" +"3262479854","3262479855","DE" +"3262479856","3262479856","CH" +"3262479857","3262479859","DE" +"3262479860","3262479860","NL" +"3262479861","3262479861","NO" +"3262479862","3262479862","BE" +"3262479863","3262479863","NL" +"3262479864","3262479864","DE" +"3262479865","3262479865","FR" +"3262479866","3262479866","DE" +"3262479867","3262479867","SE" +"3262479868","3262479868","DE" +"3262479869","3262479869","GB" +"3262479870","3262479871","DE" +"3262479872","3262479881","EU" +"3262479882","3262479882","DE" +"3262479883","3262480127","EU" +"3262480128","3262480133","DE" +"3262480134","3262480134","AT" +"3262480135","3262480135","NL" +"3262480136","3262480136","FR" +"3262480137","3262480139","DE" +"3262480140","3262480140","FR" +"3262480141","3262480141","AT" +"3262480142","3262480146","DE" +"3262480147","3262480147","IT" +"3262480148","3262480148","GB" +"3262480149","3262480150","DE" +"3262480151","3262480151","GB" +"3262480152","3262480154","DE" +"3262480155","3262480155","ES" +"3262480156","3262480158","DE" +"3262480159","3262480159","IT" +"3262480160","3262480161","DE" +"3262480162","3262480162","NO" +"3262480163","3262480164","DE" +"3262480165","3262480165","FR" +"3262480166","3262480172","DE" +"3262480173","3262480173","NL" +"3262480174","3262480174","DE" +"3262480175","3262480175","NL" +"3262480176","3262480176","DE" +"3262480177","3262480177","CH" +"3262480178","3262480178","IT" +"3262480179","3262480179","DE" +"3262480180","3262480180","FR" +"3262480181","3262480181","ES" +"3262480182","3262480184","DE" +"3262480185","3262480185","FR" +"3262480186","3262480186","PT" +"3262480187","3262480187","DE" +"3262480188","3262480188","FI" +"3262480189","3262480189","CH" +"3262480190","3262480190","DE" +"3262480191","3262480191","NO" +"3262480192","3262480193","DE" +"3262480194","3262480194","NL" +"3262480195","3262480195","GB" +"3262480196","3262480197","DE" +"3262480198","3262480198","NL" +"3262480199","3262480199","GB" +"3262480200","3262480201","DE" +"3262480202","3262480202","GB" +"3262480203","3262480205","DE" +"3262480206","3262480206","CH" +"3262480207","3262480212","DE" +"3262480213","3262480213","FR" +"3262480214","3262480215","DE" +"3262480216","3262480216","HU" +"3262480217","3262480218","DE" +"3262480219","3262480219","ES" +"3262480220","3262480220","NL" +"3262480221","3262480221","BE" +"3262480222","3262480226","DE" +"3262480227","3262480227","IE" +"3262480228","3262480229","DE" +"3262480230","3262480230","SE" +"3262480231","3262480232","DE" +"3262480233","3262480233","SE" +"3262480234","3262480234","DE" +"3262480235","3262480235","HU" +"3262480236","3262480236","DE" +"3262480237","3262480237","PL" +"3262480238","3262480238","DE" +"3262480239","3262480239","NL" +"3262480240","3262480243","DE" +"3262480244","3262480244","CH" +"3262480245","3262480246","DE" +"3262480247","3262480247","NL" +"3262480248","3262480248","DE" +"3262480249","3262480249","NL" +"3262480250","3262480250","DE" +"3262480251","3262480251","NL" +"3262480252","3262480253","DE" +"3262480254","3262480254","CH" +"3262480255","3262480260","DE" +"3262480261","3262480261","BE" +"3262480262","3262480264","DE" +"3262480265","3262480265","GB" +"3262480266","3262480267","DE" +"3262480268","3262480268","FR" +"3262480269","3262480269","NL" +"3262480270","3262480270","DE" +"3262480271","3262480271","CH" +"3262480272","3262480272","DK" +"3262480273","3262480273","DE" +"3262480274","3262480274","IT" +"3262480275","3262480275","BE" +"3262480276","3262480276","ES" +"3262480277","3262480277","DE" +"3262480278","3262480278","CH" +"3262480279","3262480282","DE" +"3262480283","3262480283","GB" +"3262480284","3262480285","DE" +"3262480286","3262480286","CH" +"3262480287","3262480293","DE" +"3262480294","3262480294","FR" +"3262480295","3262480295","CH" +"3262480296","3262480296","NO" +"3262480297","3262480300","DE" +"3262480301","3262480301","LU" +"3262480302","3262480302","DE" +"3262480303","3262480304","IT" +"3262480305","3262480305","DE" +"3262480306","3262480306","AT" +"3262480307","3262480311","DE" +"3262480312","3262480312","NL" +"3262480313","3262480313","FR" +"3262480314","3262480314","NL" +"3262480315","3262480315","DE" +"3262480316","3262480316","IT" +"3262480317","3262480317","NL" +"3262480318","3262480318","IT" +"3262480319","3262480319","AT" +"3262480320","3262480320","DK" +"3262480321","3262480321","DE" +"3262480322","3262480322","GB" +"3262480323","3262480324","DE" +"3262480325","3262480325","ES" +"3262480326","3262480329","DE" +"3262480330","3262480330","FR" +"3262480331","3262480331","IT" +"3262480332","3262480332","DE" +"3262480333","3262480333","CH" +"3262480334","3262480334","DE" +"3262480335","3262480335","GB" +"3262480336","3262480336","DE" +"3262480337","3262480337","NL" +"3262480338","3262480340","DE" +"3262480341","3262480341","CH" +"3262480342","3262480342","DE" +"3262480343","3262480343","DK" +"3262480344","3262480344","DE" +"3262480345","3262480345","CH" +"3262480346","3262480346","DE" +"3262480347","3262480347","NL" +"3262480348","3262480348","IS" +"3262480349","3262480349","AT" +"3262480350","3262480352","DE" +"3262480353","3262480353","CH" +"3262480354","3262480354","DE" +"3262480355","3262480355","GB" +"3262480356","3262480356","DE" +"3262480357","3262480357","GB" +"3262480358","3262480359","CH" +"3262480360","3262480363","DE" +"3262480364","3262480364","ES" +"3262480365","3262480365","DE" +"3262480366","3262480366","AT" +"3262480367","3262480367","DE" +"3262480368","3262480368","GB" +"3262480369","3262480369","FR" +"3262480370","3262480370","ES" +"3262480371","3262480371","GB" +"3262480372","3262480372","DE" +"3262480373","3262480373","AT" +"3262480374","3262480374","ES" +"3262480375","3262480375","NL" +"3262480376","3262480376","DE" +"3262480377","3262480378","IT" +"3262480379","3262480379","CH" +"3262480380","3262480380","GB" +"3262480381","3262480381","IT" +"3262480382","3262480382","ES" +"3262480383","3262480383","DE" +"3262480384","3262488575","GB" +"3262488576","3262496767","SE" +"3262496768","3262504959","FR" +"3262504960","3262505471","DE" +"3262505472","3262505983","GB" +"3262505984","3262506495","PL" +"3262506496","3262507007","RO" +"3262507008","3262507519","DK" +"3262507520","3262509055","RO" +"3262509056","3262509567","PL" +"3262509568","3262510079","RO" +"3262510080","3262511103","FR" +"3262511104","3262511615","GB" +"3262511616","3262512127","DE" +"3262512128","3262512639","UA" +"3262512640","3262513151","DE" +"3262513152","3262578687","AT" +"3262578688","3262611455","FR" +"3262611456","3262627839","GB" +"3262627840","3262636031","IT" +"3262636032","3262644223","BE" +"3262644224","3262648319","NL" +"3262648320","3262648575","EU" +"3262648576","3262648831","DE" +"3262648832","3262649855","NL" +"3262649856","3262650623","DE" +"3262650624","3262654463","NL" +"3262654464","3262654719","DE" +"3262654720","3262655231","NL" +"3262655232","3262655487","DE" +"3262655488","3262658303","NL" +"3262658304","3262658559","DE" +"3262658560","3262661119","NL" +"3262661120","3262661375","DE" +"3262661376","3262664703","NL" +"3262664704","3262665727","DE" +"3262665728","3262665983","EU" +"3262665984","3262666751","DE" +"3262666752","3262667007","EU" +"3262667008","3262671359","DE" +"3262671360","3262672127","NL" +"3262672128","3262672895","DE" +"3262672896","3262673919","NL" +"3262673920","3262674175","DE" +"3262674176","3262674687","NL" +"3262674688","3262674943","DE" +"3262674944","3262676479","NL" +"3262676480","3262676735","DE" +"3262676736","3262678271","NL" +"3262678272","3262678527","DE" +"3262678528","3262681087","NL" +"3262681088","3262681343","DE" +"3262681344","3262682623","NL" +"3262682624","3262682879","DE" +"3262682880","3262685951","NL" +"3262685952","3262686463","DE" +"3262686464","3262687743","NL" +"3262687744","3262688255","DE" +"3262688256","3262688511","NL" +"3262688512","3262688767","DE" +"3262688768","3262690815","NL" +"3262690816","3262691583","DE" +"3262691584","3262692607","NL" +"3262692608","3262692863","DE" +"3262692864","3262693375","NL" +"3262693376","3262701567","DE" +"3262701568","3262703103","NL" +"3262703104","3262703615","DE" +"3262703616","3262704127","NL" +"3262704128","3262704383","DE" +"3262704384","3262707807","NL" +"3262707808","3262707839","DE" +"3262707840","3262707967","NL" +"3262707968","3262708223","DE" +"3262708224","3262709759","NL" +"3262709760","3262710015","DE" +"3262710016","3262710271","NL" +"3262710272","3262710527","DE" +"3262710528","3262712575","NL" +"3262712576","3262712831","DE" +"3262712832","3262715135","NL" +"3262715136","3262715391","DE" +"3262715392","3262716415","NL" +"3262716416","3262716671","DE" +"3262716672","3262721535","NL" +"3262721536","3262721791","DE" +"3262721792","3262722047","NL" +"3262722048","3262723071","DE" +"3262723072","3262724095","NL" +"3262724096","3262724351","DE" +"3262724352","3262724863","NL" +"3262724864","3262725119","DE" +"3262725120","3262725631","NL" +"3262725632","3262726143","DE" +"3262726144","3262726655","NL" +"3262726656","3262726911","DE" +"3262726912","3262732799","NL" +"3262732800","3262733055","DE" +"3262733056","3262736383","NL" +"3262736384","3262736895","DE" +"3262736896","3262741247","NL" +"3262741248","3262741503","DE" +"3262741504","3262753791","NL" +"3262753792","3262754815","DE" +"3262754816","3262761727","NL" +"3262761728","3262761983","DE" +"3262761984","3262766079","NL" +"3262766080","3262766087","DE" +"3262766088","3262774783","NL" +"3262774784","3262775295","DE" +"3262775296","3262794815","NL" +"3262794816","3262795007","DE" +"3262795008","3262796799","NL" +"3262796800","3262797055","DE" +"3262797056","3262808831","NL" +"3262808832","3262809087","DE" +"3262809088","3262832639","NL" +"3262832640","3262840319","DE" +"3262840320","3262842624","NL" +"3262842625","3262842625","DE" +"3262842626","3262872063","NL" +"3262872064","3262872127","DE" +"3262872128","3262872159","NL" +"3262872160","3262872191","DE" +"3262872192","3262872255","NL" +"3262872256","3262872271","DE" +"3262872272","3262872275","NL" +"3262872276","3262872279","DE" +"3262872280","3262872307","NL" +"3262872308","3262872308","DE" +"3262872309","3262872309","NL" +"3262872310","3262872313","DE" +"3262872314","3262882815","NL" +"3262882816","3262883071","DE" +"3262883072","3262906367","NL" +"3262906368","3262964991","CH" +"3262964992","3262965247","DE" +"3262965248","3262971903","CH" +"3262971904","3263029247","IE" +"3263029248","3263030271","UA" +"3263030272","3263031295","GB" +"3263031296","3263032319","TR" +"3263032320","3263033343","RU" +"3263033344","3263033855","LV" +"3263033856","3263034367","IT" +"3263034368","3263034879","UA" +"3263034880","3263035391","GB" +"3263035392","3263035903","UA" +"3263035904","3263036415","CH" +"3263036416","3263036927","GR" +"3263036928","3263037439","RU" +"3263037440","3263045631","LB" +"3263045632","3263046847","KW" +"3263046848","3263046911","IQ" +"3263046912","3263047935","KW" +"3263047936","3263048191","LB" +"3263048192","3263053823","KW" +"3263053824","3263062015","GB" +"3263062016","3263070207","EE" +"3263070208","3263070719","FR" +"3263070720","3263070975","NL" +"3263070976","3263071487","DE" +"3263071488","3263072255","NL" +"3263072256","3263074303","LB" +"3263074304","3263074815","CH" +"3263074816","3263075327","RO" +"3263075328","3263075839","IT" +"3263075840","3263076351","SE" +"3263076352","3263076863","RO" +"3263076864","3263077375","IT" +"3263077376","3263077887","FR" +"3263077888","3263078399","DE" +"3263078400","3263079423","RO" +"3263079424","3263080447","PL" +"3263080448","3263081471","RU" +"3263081472","3263082495","NL" +"3263082496","3263083519","RO" +"3263083520","3263084543","UA" +"3263084544","3263085567","RO" +"3263085568","3263086591","CH" +"3263086592","3263086847","DK" +"3263086848","3263087103","NL" +"3263087104","3263087871","DE" +"3263087872","3263088127","SI" +"3263088128","3263088383","DE" +"3263088640","3263089151","CH" +"3263089152","3263089407","RO" +"3263089408","3263089663","RU" +"3263089664","3263089919","UA" +"3263089920","3263090175","RO" +"3263090176","3263090431","DE" +"3263090432","3263090687","PL" +"3263090688","3263090943","DE" +"3263090944","3263091199","GB" +"3263091200","3263091455","PL" +"3263091456","3263091711","NO" +"3263091712","3263091967","FI" +"3263091968","3263092479","HR" +"3263092480","3263092735","ES" +"3263092736","3263092991","PL" +"3263092992","3263093247","FR" +"3263093248","3263093503","CH" +"3263093504","3263093759","RU" +"3263093760","3263094015","RO" +"3263094016","3263094527","PL" +"3263094528","3263094783","DK" +"3263094784","3263095039","UA" +"3263095040","3263095295","ES" +"3263095296","3263095551","EU" +"3263095552","3263095807","RO" +"3263095808","3263096063","DE" +"3263096064","3263096319","PL" +"3263096320","3263096575","TR" +"3263096576","3263096831","SA" +"3263096832","3263097087","PL" +"3263097088","3263097343","FR" +"3263097344","3263097599","DK" +"3263097600","3263097855","NL" +"3263097856","3263098111","FR" +"3263098112","3263098367","DE" +"3263098368","3263098623","PL" +"3263098624","3263098879","DE" +"3263098880","3263099135","GB" +"3263099136","3263099391","NL" +"3263099392","3263099903","DE" +"3263099904","3263100159","RO" +"3263100160","3263100415","FR" +"3263100416","3263100671","DE" +"3263100672","3263100927","GB" +"3263100928","3263101183","AT" +"3263101184","3263101439","SE" +"3263101440","3263101695","DK" +"3263101696","3263101951","RU" +"3263101952","3263102207","LT" +"3263102208","3263102463","RO" +"3263102464","3263102719","PL" +"3263102720","3263102975","GR" +"3263102976","3263121407","DE" +"3263121408","3263121420","EU" +"3263121421","3263121421","BE" +"3263121422","3263121663","EU" +"3263121664","3263137791","DE" +"3263137792","3263138303","PL" +"3263138304","3263138551","DE" +"3263138552","3263138815","AT" +"3263138816","3263168511","DE" +"3263168512","3263430655","GB" +"3263430656","3263436543","SE" +"3263436544","3263436799","ES" +"3263436800","3263437311","GB" +"3263437312","3263458047","SE" +"3263458048","3263458303","DE" +"3263458304","3263459583","SE" +"3263459584","3263459839","FR" +"3263459840","3263461631","SE" +"3263461632","3263461887","AE" +"3263461888","3263469567","SE" +"3263469568","3263470591","SG" +"3263470592","3263472127","SE" +"3263472128","3263472383","SG" +"3263472384","3263475711","SE" +"3263475712","3263476735","JP" +"3263476736","3263477759","SE" +"3263477760","3263478015","JP" +"3263478016","3263478271","AU" +"3263478272","3263478527","SE" +"3263478528","3263478783","ES" +"3263478784","3263480831","SE" +"3263480832","3263481855","JP" +"3263481856","3263496191","SE" +"3263496192","3263497983","EU" +"3263497984","3263498239","GB" +"3263498240","3263498751","EU" +"3263498752","3263498879","US" +"3263498880","3263498943","GB" +"3263498944","3263498959","EU" +"3263498960","3263499007","GB" +"3263499008","3263499775","EU" +"3263499776","3263500031","FR" +"3263500032","3263500287","GB" +"3263500288","3263501311","EU" +"3263501312","3263501341","GB" +"3263501342","3263501343","EU" +"3263501344","3263501439","GB" +"3263501440","3263501503","US" +"3263501504","3263501519","GB" +"3263501520","3263501527","IE" +"3263501528","3263501535","GB" +"3263501536","3263501551","DE" +"3263501552","3263501823","GB" +"3263501824","3263503135","EU" +"3263503136","3263503167","DE" +"3263503168","3263503199","EU" +"3263503200","3263503267","DE" +"3263503268","3263503271","EU" +"3263503272","3263503279","DE" +"3263503280","3263503295","EU" +"3263503296","3263503359","DE" +"3263503360","3263504127","EU" +"3263504128","3263504255","EG" +"3263504256","3263506687","EU" +"3263506688","3263506815","DE" +"3263506816","3263506943","US" +"3263506944","3263507199","EU" +"3263507200","3263507455","US" +"3263507456","3263509759","EU" +"3263509760","3263509791","GB" +"3263509792","3263509807","IE" +"3263509808","3263509831","GB" +"3263509832","3263509839","FR" +"3263509840","3263509847","GB" +"3263509848","3263509887","US" +"3263509888","3263510023","GB" +"3263510024","3263510031","BE" +"3263510032","3263510063","GB" +"3263510064","3263510079","US" +"3263510080","3263510271","GB" +"3263510272","3263511295","EU" +"3263511296","3263511551","GB" +"3263511552","3263512063","EU" +"3263512064","3263512311","GB" +"3263512312","3263513343","EU" +"3263513344","3263513599","US" +"3263513600","3263516671","EU" +"3263516672","3263516927","US" +"3263516928","3263517183","GB" +"3263517184","3263517695","EU" +"3263517696","3263517951","US" +"3263517952","3263518463","GB" +"3263518464","3263518719","FR" +"3263518720","3263518751","IE" +"3263518752","3263519743","EU" +"3263519744","3263519759","GB" +"3263519760","3263520255","EU" +"3263520256","3263520511","FR" +"3263520512","3263520767","US" +"3263520768","3263523071","EU" +"3263523072","3263523583","DE" +"3263523584","3263525759","EU" +"3263525760","3263525887","DE" +"3263525888","3263526143","ZA" +"3263526144","3263527423","EU" +"3263527424","3263527679","ZW" +"3263527680","3263527935","DE" +"3263527936","3263528191","EU" +"3263528192","3263528447","FR" +"3263528448","3263530495","EU" +"3263530496","3263530751","GB" +"3263530752","3263531519","EU" +"3263531520","3263531535","DE" +"3263531536","3263531551","EU" +"3263531552","3263531775","DE" +"3263531776","3263538175","EU" +"3263538176","3263538431","TR" +"3263538432","3263540223","EU" +"3263540224","3263540479","TR" +"3263540480","3263540735","GB" +"3263540736","3263541503","EU" +"3263541504","3263541535","GB" +"3263541536","3263557631","EU" +"3263557632","3263557887","TR" +"3263557888","3263558655","EU" +"3263558656","3263558911","TR" +"3263558912","3263559679","GB" +"3263559680","3263560447","EU" +"3263560448","3263560703","TR" +"3263560704","3263561215","EU" +"3263561216","3263561231","TR" +"3263561232","3263561727","EU" +"3263561728","3263627263","NL" +"3263627264","3263692799","RU" +"3263692800","3263760127","FI" +"3263760128","3263760383","SE" +"3263760384","3263764991","FI" +"3263764992","3263765503","BE" +"3263765504","3263766975","FI" +"3263766976","3263767039","RU" +"3263767040","3263773951","FI" +"3263773952","3263774207","BE" +"3263774208","3263774463","FI" +"3263774464","3263774719","BE" +"3263774720","3263792351","FI" +"3263792352","3263792367","SE" +"3263792368","3263793151","FI" +"3263793152","3263793407","BE" +"3263793408","3263816703","FI" +"3263816704","3263816959","ES" +"3263816960","3263817215","NL" +"3263817216","3263823871","FI" +"3263823872","3263826943","DE" +"3263826944","3263827199","AT" +"3263827200","3263833903","DE" +"3263833904","3263833919","EU" +"3263833920","3263878145","DE" +"3263878146","3263878146","US" +"3263878147","3263886079","DE" +"3263886080","3263886335","SG" +"3263886336","3263915007","DE" +"3263915008","3263915263","US" +"3263915264","3263954943","DE" +"3263954944","3263979519","ES" +"3263979520","3263987711","DE" +"3263987712","3264004095","ES" +"3264004096","3264012287","HU" +"3264012288","3264012543","AT" +"3264012544","3264012799","FR" +"3264012800","3264013055","GB" +"3264013056","3264013311","TR" +"3264013312","3264013567","UA" +"3264013568","3264013823","RU" +"3264013824","3264014079","NL" +"3264014080","3264014335","DE" +"3264014336","3264014591","PT" +"3264014592","3264014847","PL" +"3264014848","3264015103","IE" +"3264015104","3264015359","RO" +"3264015360","3264015615","DK" +"3264015616","3264015871","UA" +"3264015872","3264016127","PT" +"3264016128","3264016383","UA" +"3264016384","3264016639","SE" +"3264016640","3264016895","PL" +"3264016896","3264017151","GB" +"3264017152","3264017663","SE" +"3264017664","3264017919","RO" +"3264017920","3264018175","NL" +"3264018176","3264018431","FR" +"3264018432","3264018687","HU" +"3264018688","3264018943","GB" +"3264018944","3264019199","PL" +"3264019200","3264019967","GB" +"3264019968","3264020223","AT" +"3264020224","3264020479","PL" +"3264020480","3264086015","BG" +"3264086016","3264099839","FI" +"3264099840","3264100095","GB" +"3264100096","3264124927","FI" +"3264124928","3264125183","DE" +"3264125184","3264125439","NL" +"3264125440","3264125695","FI" +"3264125696","3264125951","BE" +"3264125952","3264133375","FI" +"3264133376","3264133631","SE" +"3264133632","3264151551","FI" +"3264151552","3264184319","NO" +"3264184320","3264184831","MD" +"3264184832","3264185343","NL" +"3264185344","3264185855","FR" +"3264185856","3264186367","DE" +"3264186368","3264186879","UA" +"3264186880","3264187391","RU" +"3264187392","3264187903","IR" +"3264187904","3264188415","IT" +"3264188416","3264189439","UA" +"3264189440","3264190463","RU" +"3264190464","3264190975","LV" +"3264190976","3264191487","GB" +"3264191488","3264191999","DE" +"3264192000","3264200703","GB" +"3264200704","3264208895","ES" +"3264208896","3264217087","HU" +"3264217088","3264282623","IS" +"3264282624","3264290815","GB" +"3264290816","3264296191","FI" +"3264296192","3264297727","FR" +"3264297728","3264298751","PT" +"3264298752","3264299007","BG" +"3264299008","3264307199","DE" +"3264307200","3264311295","PL" +"3264311296","3264311551","FR" +"3264311552","3264311807","IT" +"3264311808","3264312063","DE" +"3264312064","3264312319","EU" +"3264312320","3264312575","PL" +"3264312576","3264312831","UA" +"3264312832","3264313087","DE" +"3264313088","3264313343","NL" +"3264313344","3264313599","RO" +"3264313600","3264313855","PT" +"3264313856","3264314623","DE" +"3264314624","3264314879","SE" +"3264314880","3264315135","GB" +"3264315136","3264315391","GR" +"3264315392","3264317439","IE" +"3264317440","3264318463","SK" +"3264318464","3264318975","ES" +"3264318976","3264319487","DE" +"3264319488","3264319743","FR" +"3264319744","3264319999","SE" +"3264320000","3264320255","DE" +"3264320256","3264321023","GB" +"3264321024","3264321535","DE" +"3264321536","3264321791","GB" +"3264321792","3264322047","RS" +"3264322048","3264322303","FR" +"3264322304","3264322559","RO" +"3264322560","3264322815","HU" +"3264322816","3264323071","CH" +"3264323072","3264323327","RU" +"3264323328","3264323583","RO" +"3264323584","3264324607","BG" +"3264324608","3264325631","SE" +"3264325632","3264326655","RU" +"3264326656","3264327679","SE" +"3264327680","3264328703","AT" +"3264328704","3264329727","CZ" +"3264329728","3264330751","PL" +"3264330752","3264331775","GB" +"3264331776","3264332287","DE" +"3264332288","3264332799","NL" +"3264332800","3264333311","GB" +"3264333312","3264333823","UA" +"3264333824","3264334335","NL" +"3264334336","3264334847","UA" +"3264334848","3264335359","PL" +"3264335360","3264335871","SK" +"3264335872","3264336895","GB" +"3264336896","3264337407","RU" +"3264337408","3264338431","UA" +"3264338432","3264338943","DE" +"3264338944","3264339455","UA" +"3264339456","3264339967","GB" +"3264339968","3264340223","DE" +"3264340224","3264340479","PL" +"3264340480","3264340735","DE" +"3264340736","3264340991","UA" +"3264340992","3264341503","PL" +"3264341504","3264341759","DE" +"3264341760","3264342015","IT" +"3264342016","3264342783","DE" +"3264342784","3264343039","FR" +"3264343040","3264343295","DE" +"3264343296","3264343551","GB" +"3264343552","3264343807","RO" +"3264343808","3264344063","DE" +"3264344064","3264345087","GB" +"3264345088","3264346111","NL" +"3264346112","3264347135","SE" +"3264347136","3264348159","DE" +"3264348160","3264372223","FR" +"3264372224","3264372735","GB" +"3264372736","3264375039","FR" +"3264375040","3264376063","SE" +"3264376064","3264376319","HR" +"3264376320","3264376575","UA" +"3264376576","3264376831","CH" +"3264376832","3264377087","UA" +"3264377088","3264377343","RU" +"3264377344","3264377599","IT" +"3264377600","3264378111","RU" +"3264378112","3264378367","SE" +"3264378368","3264378623","DE" +"3264378624","3264378879","RU" +"3264378880","3264379135","PL" +"3264379136","3264379391","BE" +"3264379392","3264379647","RU" +"3264379648","3264379903","PL" +"3264379904","3264380159","DE" +"3264380160","3264380415","RO" +"3264380416","3264380671","CH" +"3264380672","3264380927","NL" +"3264380928","3264381951","PL" +"3264381952","3264385023","UA" +"3264385024","3264386047","DE" +"3264386048","3264387071","IR" +"3264387072","3264388095","LB" +"3264388096","3264389119","UA" +"3264389120","3264390143","RU" +"3264390144","3264391167","IR" +"3264391168","3264392191","SE" +"3264392192","3264393215","FR" +"3264393216","3264394239","DE" +"3264394240","3264395263","UA" +"3264395264","3264396287","AT" +"3264396288","3264397311","UA" +"3264397312","3264398335","GB" +"3264398336","3264399359","UA" +"3264399360","3264400383","RU" +"3264400384","3264401407","PA" +"3264401408","3264402431","DE" +"3264402432","3264403455","CH" +"3264403456","3264404479","PL" +"3264404480","3264405503","UA" +"3264405504","3264406527","FR" +"3264406528","3264407551","UA" +"3264407552","3264408575","BG" +"3264408576","3264409599","AE" +"3264409600","3264410623","RU" +"3264410624","3264411647","NO" +"3264411648","3264413695","PL" +"3264413696","3264431103","CH" +"3264431104","3264431615","LI" +"3264431616","3264441343","CH" +"3264441344","3264441599","PL" +"3264441600","3264446207","CH" +"3264446208","3264446463","FR" +"3264446464","3264447743","CH" +"3264447744","3264447999","DE" +"3264448000","3264463871","CH" +"3264463872","3264466943","LI" +"3264466944","3264476671","CH" +"3264476672","3264477183","RU" +"3264477184","3264477439","PL" +"3264477440","3264477695","RU" +"3264477696","3264483071","CH" +"3264483072","3264483327","LI" +"3264483328","3264486527","CH" +"3264486528","3264486559","LI" +"3264486560","3264494079","CH" +"3264494080","3264494335","US" +"3264494336","3264544767","CH" +"3264544768","3264561151","HU" +"3264561152","3264563199","RU" +"3264563200","3264564223","ES" +"3264564224","3264565247","IE" +"3264565248","3264567295","NL" +"3264567296","3264567551","PL" +"3264567552","3264567807","GB" +"3264567808","3264568319","RU" +"3264568320","3264568575","UA" +"3264568576","3264568831","RU" +"3264568832","3264569087","FR" +"3264569088","3264569343","RU" +"3264569344","3264577535","CZ" +"3264577536","3264585727","MK" +"3264585728","3264593919","FR" +"3264593920","3264602111","ES" +"3264602112","3264603135","RU" +"3264603136","3264604159","PL" +"3264604160","3264604671","IT" +"3264604672","3264605183","RU" +"3264605184","3264605695","GR" +"3264605696","3264606207","DK" +"3264606208","3264606463","PL" +"3264606464","3264606719","DE" +"3264606720","3264606975","FR" +"3264606976","3264607231","BE" +"3264607232","3264607487","IT" +"3264607488","3264610303","DE" +"3264610304","3264612351","GB" +"3264612352","3264612599","FR" +"3264612600","3264612607","GB" +"3264612608","3264613199","FR" +"3264613200","3264613247","GB" +"3264613248","3264613311","FR" +"3264613312","3264613375","GB" +"3264613376","3264613887","NL" +"3264613888","3264613895","GB" +"3264613896","3264613919","NL" +"3264613920","3264613935","GB" +"3264613936","3264613943","NL" +"3264613944","3264613951","GB" +"3264613952","3264614063","NL" +"3264614064","3264614399","GB" +"3264614400","3264614655","NL" +"3264614656","3264615423","SE" +"3264615424","3264615735","CH" +"3264615736","3264615743","GB" +"3264615744","3264615775","CH" +"3264615776","3264615807","GB" +"3264615808","3264615823","CH" +"3264615824","3264615839","GB" +"3264615840","3264615871","CH" +"3264615872","3264615879","GB" +"3264615880","3264615935","CH" +"3264615936","3264616191","GB" +"3264616192","3264616447","CH" +"3264616448","3264616479","DE" +"3264616480","3264616503","GB" +"3264616504","3264616511","DE" +"3264616512","3264616575","GB" +"3264616576","3264616703","DE" +"3264616704","3264616959","GB" +"3264616960","3264617471","DE" +"3264617472","3264617727","US" +"3264617728","3264618239","GB" +"3264618240","3264618495","US" +"3264618496","3264618751","PL" +"3264618752","3264619007","GB" +"3264619008","3264619311","BE" +"3264619312","3264619327","GB" +"3264619328","3264619359","BE" +"3264619360","3264620543","GB" +"3264620544","3264620607","FR" +"3264620608","3264620631","GB" +"3264620632","3264620679","FR" +"3264620680","3264620687","ES" +"3264620688","3264620751","FR" +"3264620752","3264620799","GB" +"3264620800","3264621567","FR" +"3264621568","3264621679","DE" +"3264621680","3264621695","GB" +"3264621696","3264622079","DE" +"3264622080","3264622335","GB" +"3264622336","3264622591","DE" +"3264622592","3264622847","GB" +"3264622848","3264623103","FR" +"3264623104","3264623615","BG" +"3264623616","3264623871","BE" +"3264623872","3264624127","GB" +"3264624128","3264624143","GI" +"3264624144","3264624383","GB" +"3264624384","3264624639","MT" +"3264624640","3264624671","NL" +"3264624672","3264624895","GB" +"3264624896","3264625151","NL" +"3264625152","3264626431","GB" +"3264626432","3264626687","NL" +"3264626688","3264627711","EE" +"3264627712","3264628735","GR" +"3264628736","3264630783","UA" +"3264630784","3264631807","DE" +"3264631808","3264632831","RO" +"3264632832","3264633855","RU" +"3264633856","3264634879","UA" +"3264634880","3264636927","PL" +"3264636928","3264637951","RU" +"3264637952","3264639999","DK" +"3264640000","3264641023","BG" +"3264641024","3264642047","GB" +"3264642048","3264651263","RU" +"3264651264","3264651775","CH" +"3264651776","3264652287","IT" +"3264652288","3264652799","RU" +"3264652800","3264653311","PL" +"3264653312","3264653823","EU" +"3264653824","3264654335","PL" +"3264654336","3264654847","DE" +"3264654848","3264655359","UA" +"3264655360","3264655871","GB" +"3264655872","3264656383","RU" +"3264656384","3264656895","BG" +"3264656896","3264657407","GB" +"3264657408","3264657919","PL" +"3264657920","3264658431","RO" +"3264658432","3264659455","DE" +"3264659456","3264659967","UA" +"3264659968","3264660479","GB" +"3264660480","3264660991","PL" +"3264660992","3264661503","CH" +"3264661504","3264662015","GB" +"3264662016","3264662527","RU" +"3264662528","3264663039","UA" +"3264663040","3264663551","PL" +"3264663552","3264664063","NL" +"3264664064","3264664575","DE" +"3264664576","3264665087","NO" +"3264665088","3264665599","SE" +"3264665600","3264666111","RO" +"3264666112","3264666623","IL" +"3264666624","3264667135","UA" +"3264667136","3264667647","RU" +"3264667648","3264668159","BE" +"3264668160","3264669183","DE" +"3264669184","3264669695","PL" +"3264669696","3264670207","UA" +"3264670208","3264670719","RU" +"3264670720","3264671231","FR" +"3264671232","3264671743","PL" +"3264671744","3264672255","DE" +"3264672256","3264672767","RO" +"3264672768","3264673279","CH" +"3264673280","3264673791","PL" +"3264673792","3264674303","CH" +"3264674304","3264674815","PL" +"3264674816","3264675327","GB" +"3264675328","3264675839","RU" +"3264675840","3264695039","NL" +"3264695040","3264695295","EU" +"3264695296","3264697924","NL" +"3264697925","3264697925","EU" +"3264697926","3264741375","NL" +"3264741376","3264749567","SI" +"3264749568","3264750079","LV" +"3264750080","3264750591","RU" +"3264750592","3264751103","KG" +"3264751104","3264751615","DK" +"3264751616","3264752127","GB" +"3264752128","3264752639","RO" +"3264752640","3264753151","AE" +"3264753152","3264753663","PL" +"3264753664","3264754175","IT" +"3264754176","3264754687","PL" +"3264755200","3264755711","DE" +"3264755712","3264756223","PL" +"3264756224","3264756735","FI" +"3264756736","3264757247","PL" +"3264757248","3264757759","RU" +"3264757760","3264765951","GB" +"3264765952","3264774143","AT" +"3264774144","3264782335","HU" +"3264782336","3264790527","AT" +"3264790528","3264806911","HR" +"3264806912","3264815103","GB" +"3264815104","3264825343","SE" +"3264825344","3264825599","NO" +"3264825600","3264825855","IT" +"3264825856","3264826879","GB" +"3264826880","3264827135","NL" +"3264827136","3264827391","LV" +"3264827392","3264827647","FR" +"3264827648","3264828159","GR" +"3264828160","3264828415","EU" +"3264828416","3264828671","SE" +"3264828672","3264828927","MT" +"3264828928","3264829439","DE" +"3264829440","3264830207","FR" +"3264830208","3264830463","SE" +"3264830464","3264830719","FR" +"3264830720","3264830975","AT" +"3264830976","3264831231","CH" +"3264831232","3264831487","PL" +"3264831488","3264831743","CH" +"3264831744","3264831999","FR" +"3264832000","3264832255","IE" +"3264832256","3264832511","IT" +"3264832512","3264832767","DE" +"3264832768","3264833023","IL" +"3264833024","3264833535","IT" +"3264833536","3264834047","DE" +"3264834048","3264834303","GB" +"3264834560","3264835327","FR" +"3264835328","3264835583","AT" +"3264835584","3264835839","RU" +"3264835840","3264836351","DE" +"3264836352","3264836607","PL" +"3264836608","3264836863","DE" +"3264836864","3264837119","NL" +"3264837120","3264837375","BG" +"3264837376","3264837631","PL" +"3264837632","3264839679","AT" +"3264839680","3264840191","UA" +"3264840192","3264840447","DE" +"3264840448","3264840703","IT" +"3264840704","3264840959","PT" +"3264840960","3264841471","PL" +"3264841472","3264841727","LV" +"3264841728","3264844031","GB" +"3264844032","3264844287","BG" +"3264844288","3264844799","DE" +"3264844800","3264845311","UA" +"3264845312","3264845951","DE" +"3264845952","3264846079","GB" +"3264846080","3264846207","UG" +"3264846208","3264846335","AE" +"3264846336","3264846463","GB" +"3264846464","3264846591","NO" +"3264846592","3264846719","US" +"3264846720","3264846847","RU" +"3264846848","3264846911","DK" +"3264847104","3264847135","FR" +"3264847136","3264847167","ES" +"3264847168","3264847199","IE" +"3264847200","3264847231","NO" +"3264847232","3264847263","CH" +"3264847264","3264847295","LI" +"3264847360","3264847487","FR" +"3264847488","3264847615","RU" +"3264847616","3264847679","PL" +"3264847680","3264847743","FI" +"3264847744","3264847807","BE" +"3264847808","3264847871","SE" +"3264847872","3264849919","DE" +"3264849920","3264850431","GB" +"3264850432","3264850687","PL" +"3264850688","3264850943","LV" +"3264850944","3264851967","IT" +"3264851968","3264854015","CH" +"3264854016","3264854271","GB" +"3264854272","3264854527","DE" +"3264854528","3264854783","EU" +"3264854784","3264855039","IT" +"3264855040","3264855551","CH" +"3264855552","3264856063","DE" +"3264856064","3264861695","IT" +"3264861696","3264862207","FR" +"3264862208","3264862463","PL" +"3264862464","3264862719","AT" +"3264862720","3264862975","GB" +"3264862976","3264863231","DE" +"3264863232","3264864255","AT" +"3264864256","3264872447","RO" +"3264872448","3264888831","GB" +"3264888832","3264897023","RU" +"3264897024","3264905215","GB" +"3264905216","3264908799","CY" +"3264908800","3264909055","GB" +"3264909056","3264913407","CY" +"3264913408","3264921599","GB" +"3264921600","3264922303","LU" +"3264922304","3264922319","SA" +"3264922320","3264929791","LU" +"3264929792","3264937983","SK" +"3264937984","3265003519","GB" +"3265003520","3265015807","DE" +"3265015808","3265016063","EU" +"3265016064","3265045759","DE" +"3265045760","3265046015","TR" +"3265046016","3265055231","DE" +"3265055232","3265055743","FR" +"3265055744","3265069055","DE" +"3265069056","3265134591","FI" +"3265134592","3265142783","CH" +"3265142784","3265150975","MT" +"3265150976","3265159167","AD" +"3265159168","3265167359","FR" +"3265167360","3265175551","AT" +"3265175552","3265183743","NL" +"3265183744","3265191935","BY" +"3265191936","3265200127","CH" +"3265200128","3265216767","GB" +"3265216768","3265217023","FR" +"3265217024","3265218559","GB" +"3265218560","3265219071","NL" +"3265219072","3265257471","GB" +"3265257472","3265259519","NL" +"3265259520","3265265663","GB" +"3265265664","3265331199","SK" +"3265331200","3265340415","GB" +"3265340416","3265340671","DE" +"3265340672","3265340927","GB" +"3265340928","3265341183","CH" +"3265341184","3265341279","AT" +"3265341280","3265341311","EU" +"3265341312","3265341439","FR" +"3265341440","3265341695","GB" +"3265341696","3265341951","DE" +"3265341952","3265343487","GB" +"3265343488","3265347583","DE" +"3265347584","3265352703","FR" +"3265352704","3265352959","BE" +"3265352960","3265353215","FR" +"3265353216","3265355263","DE" +"3265355264","3265355775","FR" +"3265355776","3265357055","BE" +"3265357056","3265357311","FR" +"3265357312","3265357567","DE" +"3265357568","3265357823","BE" +"3265357824","3265358847","NL" +"3265358848","3265359103","BE" +"3265359104","3265359871","NL" +"3265359872","3265360127","CH" +"3265360128","3265360383","GB" +"3265360384","3265360895","CH" +"3265360896","3265361919","GB" +"3265361920","3265363967","IT" +"3265363968","3265366015","ES" +"3265366016","3265366079","EU" +"3265366080","3265366271","BE" +"3265366272","3265366527","HU" +"3265366528","3265367039","DK" +"3265367040","3265367295","AT" +"3265367296","3265367551","ES" +"3265367552","3265367807","SE" +"3265367808","3265369343","DK" +"3265369344","3265369599","IL" +"3265369600","3265369855","SE" +"3265369856","3265370111","DE" +"3265370112","3265370623","DK" +"3265370624","3265370879","GB" +"3265370880","3265376255","DE" +"3265376256","3265376511","IT" +"3265376512","3265378303","GB" +"3265378304","3265380095","NL" +"3265380096","3265382399","GB" +"3265382400","3265382911","CH" +"3265382912","3265384447","GB" +"3265384448","3265386495","DE" +"3265386496","3265386751","NL" +"3265386752","3265387007","EU" +"3265387008","3265387263","NL" +"3265387264","3265388543","EU" +"3265388544","3265396735","GB" +"3265396736","3265464847","DE" +"3265464848","3265464863","AT" +"3265464864","3265465343","DE" +"3265465344","3265465599","AT" +"3265465600","3265467519","DE" +"3265467520","3265467523","ES" +"3265467524","3265527055","DE" +"3265527056","3265527059","ES" +"3265527060","3265527063","DE" +"3265527064","3265527071","SE" +"3265527072","3265527087","DE" +"3265527088","3265527095","SE" +"3265527096","3265527807","DE" +"3265527808","3265569279","GB" +"3265569280","3265569791","AE" +"3265569792","3265582335","GB" +"3265582336","3265582476","A2" +"3265582477","3265582477","LB" +"3265582478","3265582591","A2" +"3265582592","3265593343","GB" +"3265593344","3265594367","RU" +"3265594368","3265595391","UA" +"3265595392","3265595903","PL" +"3265595904","3265596415","RU" +"3265596416","3265596927","GB" +"3265596928","3265597439","FR" +"3265597440","3265599999","RU" +"3265600000","3265600511","HU" +"3265600512","3265601023","GB" +"3265601024","3265601535","RU" +"3265601536","3265601791","SE" +"3265601792","3265602047","CH" +"3265602048","3265602559","NL" +"3265602560","3265602815","IT" +"3265602816","3265603071","IE" +"3265603072","3265603327","DK" +"3265603328","3265603583","MD" +"3265603584","3265603839","DE" +"3265603840","3265604095","PL" +"3265604096","3265604351","GB" +"3265604352","3265604607","FR" +"3265604608","3265604863","CH" +"3265604864","3265605119","RU" +"3265605120","3265605375","UA" +"3265605376","3265605631","CZ" +"3265605632","3265605887","PL" +"3265605888","3265606143","FR" +"3265606144","3265606399","RU" +"3265606400","3265606655","NL" +"3265606656","3265606911","AT" +"3265606912","3265607167","RU" +"3265607168","3265607423","PL" +"3265607424","3265607935","DK" +"3265607936","3265608191","CZ" +"3265608192","3265608447","RU" +"3265608448","3265608703","SE" +"3265608704","3265608959","GB" +"3265608960","3265609215","RU" +"3265609216","3265609727","UA" +"3265609728","3265617919","NL" +"3265617920","3265626111","SI" +"3265626112","3265634303","JO" +"3265634304","3265642287","IE" +"3265642288","3265642303","US" +"3265642304","3265642495","IE" +"3265642496","3265650687","GB" +"3265650688","3265658879","SE" +"3265658880","3265724415","AT" +"3265724416","3265789951","FR" +"3265789952","3265824767","GB" +"3265824768","3265825023","US" +"3265825024","3265887487","GB" +"3265887488","3265887743","PT" +"3265887744","3265888255","PL" +"3265888256","3265902335","GB" +"3265902336","3265902591","FR" +"3265902592","3265904383","GB" +"3265904384","3265904639","RO" +"3265904640","3265904895","DE" +"3265904896","3265905151","UA" +"3265905152","3265905663","GB" +"3265905664","3265905919","IE" +"3265905920","3265906175","GB" +"3265906176","3265906431","DE" +"3265906432","3265906687","CH" +"3265906688","3265906943","AT" +"3265906944","3265907199","ES" +"3265907200","3265907455","DE" +"3265907456","3265907711","FR" +"3265907712","3265908735","UA" +"3265908736","3265908991","NL" +"3265908992","3265909247","RO" +"3265909248","3265909503","UA" +"3265909504","3265909759","DE" +"3265909760","3265910015","RO" +"3265910016","3265910271","PL" +"3265910272","3265910527","FR" +"3265910528","3265910783","PT" +"3265910784","3265911039","DE" +"3265911040","3265911551","GB" +"3265911552","3265911807","CH" +"3265911808","3265912063","PL" +"3265912064","3265912319","GB" +"3265912320","3265912575","DE" +"3265912576","3265912831","RO" +"3265912832","3265913087","CZ" +"3265913088","3265913343","SE" +"3265913344","3265914367","PL" +"3265914368","3265914623","RU" +"3265914624","3265914879","BG" +"3265914880","3265915135","GR" +"3265915136","3265915391","RO" +"3265915392","3265915647","GB" +"3265915648","3265915903","RO" +"3265915904","3265916415","PL" +"3265916416","3265916671","UA" +"3265916672","3265916927","DE" +"3265916928","3265917183","FR" +"3265917184","3265917439","PL" +"3265917440","3265917695","RU" +"3265917696","3265917951","SE" +"3265917952","3265918207","GB" +"3265918208","3265918463","EU" +"3265918464","3265918719","AT" +"3265918720","3265918975","RU" +"3265918976","3265919231","NL" +"3265919232","3265919487","FR" +"3265919488","3265919743","RU" +"3265919744","3265919999","DE" +"3265920000","3265920255","CZ" +"3265920256","3265920511","TR" +"3265920512","3265921023","GB" +"3265921024","3265986559","AE" +"3265986560","3266052095","NL" +"3266052096","3266073823","DE" +"3266073824","3266073839","GB" +"3266073840","3266122751","DE" +"3266122752","3266123007","EU" +"3266123008","3266199807","DE" +"3266199808","3266200063","EU" +"3266200064","3266310911","DE" +"3266310912","3266311167","EU" +"3266311168","3266322431","DE" +"3266322432","3266330623","LT" +"3266330624","3266338815","GB" +"3266338816","3266339071","RU" +"3266339072","3266339327","UA" +"3266339328","3266339583","ES" +"3266339584","3266339839","GB" +"3266339840","3266340095","RU" +"3266340096","3266340607","PL" +"3266340608","3266340863","FI" +"3266340864","3266341119","CH" +"3266341120","3266341375","GB" +"3266341376","3266341631","DE" +"3266341632","3266341887","GB" +"3266341888","3266342143","KW" +"3266342144","3266342399","CH" +"3266342400","3266342655","BE" +"3266342656","3266342911","KG" +"3266342912","3266343167","SI" +"3266343168","3266343423","GR" +"3266343424","3266343679","RU" +"3266343680","3266343935","RO" +"3266343936","3266344191","CH" +"3266344192","3266344447","UA" +"3266344448","3266344703","RU" +"3266344704","3266344959","ES" +"3266344960","3266345727","DE" +"3266345728","3266345983","DK" +"3266345984","3266346495","GB" +"3266346496","3266346751","IT" +"3266346752","3266347007","FR" +"3266347008","3266347263","GB" +"3266347264","3266351359","EU" +"3266351360","3266352623","GB" +"3266352624","3266352895","EU" +"3266352896","3266353567","GB" +"3266353568","3266353583","EU" +"3266353584","3266353591","GB" +"3266353592","3266353663","EU" +"3266353664","3266353671","GB" +"3266353672","3266353679","EU" +"3266353680","3266353687","GB" +"3266353688","3266353775","EU" +"3266353776","3266353783","US" +"3266353784","3266353855","EU" +"3266353856","3266353863","GB" +"3266353864","3266353879","EU" +"3266353880","3266353887","GB" +"3266353888","3266353895","EU" +"3266353896","3266353903","GB" +"3266353904","3266353919","EU" +"3266353920","3266355199","GB" +"3266355200","3266363391","RO" +"3266363392","3266371583","GB" +"3266371584","3266379775","HU" +"3266379776","3266380799","UA" +"3266380800","3266381823","PL" +"3266381824","3266382847","FR" +"3266382848","3266383871","RU" +"3266383872","3266384895","IL" +"3266384896","3266385919","RU" +"3266385920","3266386943","UA" +"3266386944","3266387967","PL" +"3266387968","3266388375","FR" +"3266388376","3266388378","NL" +"3266388379","3266389247","FR" +"3266389248","3266389327","LU" +"3266389328","3266395135","FR" +"3266395136","3266395647","NL" +"3266395648","3266396159","FR" +"3266396160","3266412543","IT" +"3266412544","3266420735","AT" +"3266420736","3266428927","GB" +"3266428928","3266437119","GR" +"3266437120","3266445311","GL" +"3266445312","3266473807","NL" +"3266473808","3266473823","GB" +"3266473824","3266510847","NL" +"3266510848","3266543615","ES" +"3266543616","3266576383","IT" +"3266576384","3266617327","DE" +"3266617328","3266617343","GB" +"3266617344","3266634391","DE" +"3266634392","3266634399","EE" +"3266634400","3266641919","DE" +"3266641920","3266707455","PL" +"3266707456","3266772991","DK" +"3266772992","3266781183","IT" +"3266781184","3266789375","PL" +"3266789376","3266796543","SM" +"3266796544","3266796799","IT" +"3266796800","3266797567","SM" +"3266797568","3266797823","ES" +"3266797824","3266798591","GB" +"3266798592","3266798847","CZ" +"3266798848","3266799103","GB" +"3266799104","3266799615","NL" +"3266799616","3266801487","GB" +"3266801488","3266801503","NL" +"3266801504","3266801663","GB" +"3266801664","3266801919","BG" +"3266801920","3266802687","GB" +"3266802688","3266802943","FR" +"3266802944","3266803815","GB" +"3266803816","3266803823","NL" +"3266803824","3266804223","GB" +"3266804224","3266804479","NL" +"3266804480","3266804735","GB" +"3266804736","3266804991","DK" +"3266804992","3266805759","GB" +"3266805760","3266813951","AT" +"3266813952","3266822143","UA" +"3266822144","3266830335","FR" +"3266830336","3266835151","BE" +"3266835152","3266835159","FR" +"3266835160","3266836479","BE" +"3266836480","3266837503","LU" +"3266837504","3266838527","BE" +"3266838528","3266969599","IT" +"3266969600","3267008767","RU" +"3267008768","3267009023","UA" +"3267009024","3267030095","RU" +"3267030096","3267030103","KZ" +"3267030104","3267032575","RU" +"3267032576","3267032831","KZ" +"3267032832","3267035135","RU" +"3267035136","3267039231","NO" +"3267039232","3267040255","DE" +"3267040256","3267041279","RO" +"3267041280","3267043327","UA" +"3267043328","3267044351","GB" +"3267044352","3267045375","RU" +"3267045376","3267046399","PL" +"3267046400","3267047423","NL" +"3267047424","3267048447","UA" +"3267048448","3267049471","PL" +"3267049472","3267050495","GB" +"3267050496","3267051519","SE" +"3267051520","3267052543","DE" +"3267052544","3267053567","LV" +"3267053568","3267054591","PL" +"3267054592","3267055615","NL" +"3267055616","3267056639","PS" +"3267056640","3267057663","IL" +"3267057664","3267058687","CH" +"3267058688","3267059711","AT" +"3267059712","3267060735","NL" +"3267060736","3267061759","LV" +"3267061760","3267063807","UA" +"3267063808","3267064831","BE" +"3267064832","3267065855","PL" +"3267065856","3267066879","RO" +"3267066880","3267067903","IT" +"3267067904","3267068927","UA" +"3267068928","3267069951","BG" +"3267069952","3267070975","RO" +"3267070976","3267071999","DE" +"3267072000","3267073023","PL" +"3267073024","3267075071","UA" +"3267075072","3267076095","CH" +"3267076096","3267078143","DE" +"3267078144","3267079167","PL" +"3267079168","3267080191","IT" +"3267080192","3267081215","AT" +"3267081216","3267082239","PL" +"3267082240","3267083263","DE" +"3267083264","3267084287","RO" +"3267084288","3267085311","FR" +"3267085312","3267086335","RU" +"3267086336","3267087359","PL" +"3267087360","3267088383","RU" +"3267088384","3267089407","UA" +"3267089408","3267090431","FI" +"3267090432","3267091455","UA" +"3267091456","3267092479","DE" +"3267092480","3267093503","FR" +"3267093504","3267094527","UA" +"3267094528","3267095551","GB" +"3267095552","3267096575","PL" +"3267096576","3267097599","DE" +"3267097600","3267098623","KZ" +"3267098624","3267099647","GB" +"3267099648","3267100671","IT" +"3267100672","3267117311","FI" +"3267117312","3267118079","AX" +"3267118080","3267166207","FI" +"3267166208","3267231743","GB" +"3267231744","3267297279","RU" +"3267297280","3267362815","CH" +"3267362816","3267368480","DK" +"3267368481","3267368481","EU" +"3267368482","3267426879","DK" +"3267426880","3267426943","CH" +"3267426944","3267428351","DK" +"3267428352","3267493887","GB" +"3267493888","3267494143","DE" +"3267494144","3267498239","GB" +"3267498240","3267498495","IE" +"3267498496","3267498751","DE" +"3267498752","3267504383","GB" +"3267504384","3267504639","AT" +"3267504640","3267505151","FR" +"3267505152","3267507711","DE" +"3267507712","3267507743","GB" +"3267507744","3267507775","DE" +"3267507776","3267507807","GB" +"3267507808","3267507839","ZA" +"3267507840","3267508223","GB" +"3267508224","3267508735","DE" +"3267508736","3267508991","IL" +"3267508992","3267509247","GB" +"3267509248","3267509503","AT" +"3267509504","3267509695","CH" +"3267509696","3267509727","EU" +"3267509728","3267509759","CH" +"3267509760","3267510271","GB" +"3267510272","3267512831","FR" +"3267512832","3267513343","GB" +"3267513344","3267514367","FR" +"3267514368","3267517951","DE" +"3267517952","3267518463","GB" +"3267518464","3267524607","DE" +"3267524608","3267526655","EU" +"3267526656","3267527679","DE" +"3267527680","3267529215","FR" +"3267529216","3267529471","GB" +"3267529472","3267529727","FR" +"3267529728","3267530751","AT" +"3267530752","3267534335","FR" +"3267534336","3267534527","RS" +"3267534528","3267534559","EU" +"3267534560","3267534575","FR" +"3267534576","3267534591","AT" +"3267534592","3267538943","FR" +"3267538944","3267540223","NL" +"3267540224","3267540479","GB" +"3267540480","3267541759","NL" +"3267541760","3267542527","GB" +"3267542528","3267542783","CH" +"3267542784","3267543039","DE" +"3267543040","3267543295","IT" +"3267543296","3267543551","AT" +"3267543552","3267544319","GB" +"3267544320","3267544575","DE" +"3267544576","3267544703","IT" +"3267544704","3267544831","DE" +"3267544832","3267545087","FR" +"3267545088","3267545855","ES" +"3267545856","3267546111","DE" +"3267546112","3267546623","ES" +"3267546624","3267547135","FR" +"3267547136","3267547391","BE" +"3267547392","3267547647","DE" +"3267547648","3267549183","GB" +"3267549184","3267550463","DK" +"3267550464","3267550719","NL" +"3267550720","3267551231","DK" +"3267551232","3267551743","AT" +"3267551744","3267551999","SE" +"3267552000","3267552255","NO" +"3267552256","3267553023","AT" +"3267553024","3267553279","NL" +"3267553280","3267554303","DK" +"3267554304","3267554815","DE" +"3267554816","3267555071","FR" +"3267555072","3267555199","EU" +"3267555200","3267555327","ZA" +"3267555328","3267555583","FI" +"3267555584","3267556095","GB" +"3267556096","3267556351","NO" +"3267556352","3267556607","GB" +"3267556608","3267556863","NO" +"3267556864","3267557375","IL" +"3267557376","3267557631","NO" +"3267557632","3267557887","AT" +"3267557888","3267558399","IL" +"3267558400","3267558911","CH" +"3267558912","3267559423","AT" +"3267559424","3267561727","DE" +"3267561728","3267561759","GB" +"3267561760","3267622527","DE" +"3267622528","3267622559","GB" +"3267622560","3267624959","DE" +"3267624960","3267625471","GB" +"3267625472","3267625727","FR" +"3267625728","3267625983","BE" +"3267625984","3267626239","NL" +"3267626240","3267626495","BE" +"3267626496","3267626751","ES" +"3267626752","3267627007","RU" +"3267627008","3267627263","EU" +"3267627264","3267627347","DE" +"3267627348","3267627351","EU" +"3267627352","3267627391","DE" +"3267627392","3267627423","EU" +"3267627424","3267627519","DE" +"3267627520","3267627775","EU" +"3267627776","3267627807","DE" +"3267627808","3267627871","EU" +"3267627872","3267628031","DE" +"3267628032","3267628287","IT" +"3267628288","3267628543","EU" +"3267628544","3267628799","IT" +"3267628800","3267629055","HU" +"3267629056","3267629311","CZ" +"3267629312","3267629567","DK" +"3267629568","3267629711","BE" +"3267629712","3267629719","EU" +"3267629720","3267629759","BE" +"3267629760","3267629791","EU" +"3267629792","3267629823","BE" +"3267629824","3267630079","GR" +"3267630080","3267630591","GB" +"3267630592","3267630847","SK" +"3267630848","3267630863","IT" +"3267630864","3267630943","FR" +"3267630944","3267630959","EU" +"3267630960","3267631055","IT" +"3267631056","3267631071","GB" +"3267631072","3267631087","EU" +"3267631088","3267631103","IT" +"3267631104","3267631615","GB" +"3267631616","3267632127","DE" +"3267632128","3267632383","EU" +"3267632384","3267632511","BE" +"3267632512","3267632639","EU" +"3267632640","3267632895","IT" +"3267632896","3267633151","BE" +"3267633152","3267633679","NO" +"3267633680","3267633727","EU" +"3267633728","3267633855","NO" +"3267633856","3267634175","EU" +"3267634176","3267634687","GB" +"3267634688","3267634943","EU" +"3267634944","3267635711","GB" +"3267635712","3267635967","EU" +"3267635968","3267636223","BE" +"3267636224","3267636735","EU" +"3267636736","3267636783","ZA" +"3267636784","3267636799","EU" +"3267636800","3267636815","ZA" +"3267636816","3267636831","EU" +"3267636832","3267636991","ZA" +"3267636992","3267637247","AT" +"3267637248","3267637503","EU" +"3267637504","3267637719","IT" +"3267637720","3267637759","EU" +"3267637760","3267637823","ES" +"3267637824","3267638015","EU" +"3267638016","3267638271","ES" +"3267638272","3267638527","BE" +"3267638528","3267638783","DK" +"3267638784","3267639295","CZ" +"3267639296","3267639551","NL" +"3267639552","3267639807","GB" +"3267639808","3267640063","CH" +"3267640064","3267640319","GB" +"3267640320","3267640575","CH" +"3267640576","3267640831","IT" +"3267640832","3267641087","GR" +"3267641088","3267641343","EU" +"3267641344","3267641599","IE" +"3267641600","3267641855","EU" +"3267641856","3267642111","GB" +"3267642112","3267642367","SE" +"3267642368","3267642623","GB" +"3267642624","3267642879","NO" +"3267642880","3267643135","SI" +"3267643136","3267643391","BE" +"3267643392","3267643407","RU" +"3267643408","3267643423","EU" +"3267643424","3267643439","RU" +"3267643440","3267643455","EU" +"3267643456","3267643487","RU" +"3267643488","3267643519","EU" +"3267643520","3267643647","RU" +"3267643648","3267643903","GB" +"3267643904","3267644159","EU" +"3267644160","3267644415","BE" +"3267644416","3267644671","DE" +"3267644672","3267644927","SI" +"3267644928","3267644935","EU" +"3267644936","3267644943","BE" +"3267644944","3267644951","EU" +"3267644952","3267644959","BE" +"3267644960","3267644975","FR" +"3267644976","3267644983","GB" +"3267644984","3267645055","BE" +"3267645056","3267645439","EU" +"3267645440","3267645695","GB" +"3267645696","3267645951","DE" +"3267645952","3267647487","EU" +"3267647488","3267647743","GB" +"3267647744","3267647999","SI" +"3267648000","3267648255","DE" +"3267648256","3267648319","GB" +"3267648320","3267648383","EU" +"3267648384","3267648399","BG" +"3267648400","3267648415","GB" +"3267648416","3267648431","EU" +"3267648432","3267648447","BE" +"3267648448","3267648479","FR" +"3267648480","3267648511","GB" +"3267648512","3267648767","DE" +"3267648768","3267649023","NL" +"3267649024","3267649279","RU" +"3267649280","3267649407","DE" +"3267649408","3267649471","EU" +"3267649472","3267649527","DE" +"3267649528","3267649791","EU" +"3267649792","3267650303","NL" +"3267650304","3267650319","EU" +"3267650320","3267650367","AT" +"3267650368","3267650463","EU" +"3267650464","3267650495","AT" +"3267650496","3267650527","EU" +"3267650528","3267650559","AT" +"3267650560","3267651071","GB" +"3267651072","3267651327","DE" +"3267651328","3267651583","EU" +"3267651584","3267651839","FR" +"3267651840","3267652095","EU" +"3267652096","3267652351","GB" +"3267652352","3267652607","EU" +"3267652608","3267652863","DE" +"3267652864","3267653119","PT" +"3267653120","3267653375","GB" +"3267653376","3267653887","EU" +"3267653888","3267654143","GB" +"3267654144","3267654911","EU" +"3267654912","3267655167","SK" +"3267655168","3267655679","GB" +"3267655680","3267656191","IT" +"3267656192","3267656447","DK" +"3267656448","3267657215","EU" +"3267657216","3267657471","HU" +"3267657472","3267657487","RO" +"3267657488","3267657503","EU" +"3267657504","3267657567","RO" +"3267657568","3267657663","EU" +"3267657664","3267657695","RO" +"3267657696","3267657983","EU" +"3267657984","3267658239","GB" +"3267658240","3267658495","IT" +"3267658496","3267658751","EU" +"3267658752","3267659263","CH" +"3267659264","3267659519","EU" +"3267659520","3267659775","IT" +"3267659776","3267660287","EU" +"3267660288","3267660543","CH" +"3267660544","3267660671","ES" +"3267660672","3267661311","EU" +"3267661312","3267661567","SK" +"3267661568","3267661823","GB" +"3267661824","3267661851","ES" +"3267661852","3267661855","EU" +"3267661856","3267661887","ES" +"3267661888","3267662015","EU" +"3267662016","3267662039","ES" +"3267662040","3267662047","EU" +"3267662048","3267662079","ES" +"3267662080","3267662847","EU" +"3267662848","3267662879","IE" +"3267662880","3267662887","EU" +"3267662888","3267662895","GB" +"3267662896","3267662911","EU" +"3267662912","3267662951","IE" +"3267662952","3267662959","GB" +"3267662960","3267662991","IE" +"3267662992","3267663007","EU" +"3267663008","3267663103","IE" +"3267663104","3267663327","IT" +"3267663328","3267663359","EU" +"3267663360","3267663871","GB" +"3267663872","3267664127","DE" +"3267664128","3267664383","EU" +"3267664384","3267664639","GB" +"3267664640","3267664671","SK" +"3267664672","3267664799","EU" +"3267664800","3267664815","SK" +"3267664816","3267664831","EU" +"3267664832","3267664879","SK" +"3267664880","3267664887","EU" +"3267664888","3267664895","SK" +"3267664896","3267665919","EU" +"3267665920","3267666175","GB" +"3267666176","3267666191","EU" +"3267666192","3267666207","GR" +"3267666208","3267666255","EU" +"3267666256","3267666263","GR" +"3267666264","3267666271","EU" +"3267666272","3267666431","GR" +"3267666432","3267666455","GB" +"3267666456","3267666463","EU" +"3267666464","3267667199","GB" +"3267667200","3267667455","NL" +"3267667456","3267667767","GB" +"3267667768","3267667775","EU" +"3267667776","3267667967","GB" +"3267667968","3267670015","EU" +"3267670016","3267671551","ZA" +"3267671552","3267671583","DE" +"3267671584","3267671615","EU" +"3267671616","3267671807","DE" +"3267671808","3267672063","NO" +"3267672064","3267672223","DE" +"3267672224","3267672255","EU" +"3267672256","3267672319","DE" +"3267672320","3267672575","EU" +"3267672576","3267672831","AT" +"3267672832","3267672847","FR" +"3267672848","3267672855","EU" +"3267672856","3267672935","FR" +"3267672936","3267672943","EU" +"3267672944","3267673015","FR" +"3267673016","3267673023","EU" +"3267673024","3267673087","FR" +"3267673088","3267673439","DE" +"3267673440","3267673471","EU" +"3267673472","3267673487","DE" +"3267673488","3267673495","EU" +"3267673496","3267673503","DE" +"3267673504","3267673599","EU" +"3267673600","3267673759","DE" +"3267673760","3267673807","EU" +"3267673808","3267673855","DE" +"3267673856","3267674111","EU" +"3267674112","3267674127","NL" +"3267674128","3267674143","EU" +"3267674144","3267674159","GB" +"3267674160","3267674167","BE" +"3267674168","3267674175","EU" +"3267674176","3267674207","BE" +"3267674208","3267674239","GB" +"3267674240","3267674303","BE" +"3267674304","3267674335","EU" +"3267674336","3267674367","GB" +"3267674368","3267674879","BE" +"3267674880","3267675135","EU" +"3267675136","3267675391","AT" +"3267675392","3267675619","CH" +"3267675620","3267675623","EU" +"3267675624","3267675647","CH" +"3267675648","3267675775","CY" +"3267675776","3267675903","CH" +"3267675904","3267676159","EU" +"3267676160","3267676415","GB" +"3267676416","3267676671","EU" +"3267676672","3267676679","HU" +"3267676680","3267676687","EU" +"3267676688","3267676711","HU" +"3267676712","3267676735","EU" +"3267676736","3267676767","HU" +"3267676768","3267676783","EU" +"3267676784","3267676799","HU" +"3267676800","3267676863","EU" +"3267676864","3267676879","HU" +"3267676880","3267676927","EU" +"3267676928","3267677367","GB" +"3267677368","3267677375","EU" +"3267677376","3267677695","GB" +"3267677696","3267678207","EU" +"3267678208","3267678719","FR" +"3267678720","3267678975","EU" +"3267678976","3267679231","NL" +"3267679232","3267679487","EU" +"3267679488","3267679743","BE" +"3267679744","3267679999","EU" +"3267680000","3267680255","CZ" +"3267680256","3267680767","SK" +"3267680768","3267681279","EU" +"3267681280","3267681311","FR" +"3267681312","3267681327","EU" +"3267681328","3267681503","FR" +"3267681504","3267681511","EU" +"3267681512","3267681535","FR" +"3267681536","3267681791","EU" +"3267681792","3267681887","FR" +"3267681888","3267681903","EU" +"3267681904","3267681975","FR" +"3267681976","3267682015","EU" +"3267682016","3267682047","FR" +"3267682048","3267682303","EU" +"3267682304","3267682559","BE" +"3267682560","3267683335","EU" +"3267683336","3267683359","PL" +"3267683360","3267683391","EU" +"3267683392","3267683463","PL" +"3267683464","3267683519","EU" +"3267683520","3267683527","PL" +"3267683528","3267683535","EU" +"3267683536","3267683551","PL" +"3267683552","3267683567","EU" +"3267683568","3267683575","PL" +"3267683576","3267683919","EU" +"3267683920","3267683935","PL" +"3267683936","3267684383","EU" +"3267684384","3267685119","GB" +"3267685120","3267685375","DE" +"3267685376","3267685887","NL" +"3267685888","3267686399","CH" +"3267686400","3267687935","EU" +"3267687936","3267687999","IE" +"3267688000","3267688063","EU" +"3267688064","3267688191","IE" +"3267688192","3267688703","DE" +"3267688704","3267688959","SE" +"3267688960","3267689215","EU" +"3267689216","3267689247","CZ" +"3267689248","3267689327","EU" +"3267689328","3267689471","CZ" +"3267689472","3267689727","EU" +"3267689728","3267689983","GB" +"3267689984","3267690239","FR" +"3267690240","3267690271","EU" +"3267690272","3267690495","FR" +"3267690496","3267691519","FI" +"3267691520","3267692543","SE" +"3267692544","3267710959","FI" +"3267710960","3267710963","LV" +"3267710964","3267710967","NO" +"3267710968","3267710971","DK" +"3267710972","3267710975","SE" +"3267710976","3267711999","FI" +"3267712000","3267712255","SE" +"3267712256","3267741439","FI" +"3267741440","3267741695","BE" +"3267741696","3267741759","FI" +"3267741760","3267741791","SE" +"3267741792","3267741855","FI" +"3267741856","3267741919","SE" +"3267741920","3267743743","FI" +"3267743744","3267743999","AX" +"3267744000","3267744255","DE" +"3267744256","3267744511","BE" +"3267744512","3267746303","FI" +"3267746304","3267746559","NL" +"3267746560","3267756031","FI" +"3267756032","3267760639","SE" +"3267760640","3267761151","NO" +"3267761152","3267761919","SE" +"3267761920","3267762175","NO" +"3267762176","3267763711","SE" +"3267763712","3267763967","NO" +"3267763968","3267764223","SE" +"3267764224","3267764479","NO" +"3267764480","3267765775","SE" +"3267765776","3267765791","NO" +"3267765792","3267765823","SE" +"3267765824","3267765855","NO" +"3267765856","3267766031","SE" +"3267766032","3267766047","NO" +"3267766048","3267766303","SE" +"3267766304","3267766319","NO" +"3267766320","3267766351","SE" +"3267766352","3267766367","NO" +"3267766368","3267766383","SE" +"3267766384","3267766415","NO" +"3267766416","3267787007","SE" +"3267787008","3267787263","NO" +"3267787264","3267787519","SE" +"3267787520","3267787775","NO" +"3267787776","3267793919","SE" +"3267793920","3267794175","DK" +"3267794176","3267821567","SE" +"3267821568","3267845375","FR" +"3267845376","3267845631","GP" +"3267845632","3267846655","FR" +"3267846656","3267846911","MQ" +"3267846912","3267887103","FR" +"3267887104","3268017407","GB" +"3268017408","3268017663","KE" +"3268017664","3268078591","GB" +"3268078592","3268078847","EU" +"3268078848","3268149247","GB" +"3268149248","3268165631","EE" +"3268165632","3268173823","CH" +"3268173824","3268182015","MT" +"3268182016","3268198399","PL" +"3268198400","3268214783","MA" +"3268214784","3268215583","EU" +"3268215584","3268215615","GB" +"3268215616","3268215647","EU" +"3268215648","3268215679","GB" +"3268215680","3268215711","EU" +"3268215712","3268215743","GB" +"3268215744","3268215807","EU" +"3268215808","3268216063","GB" +"3268216064","3268218111","EU" +"3268218112","3268218367","GB" +"3268218368","3268219807","EU" +"3268219808","3268219823","GB" +"3268219824","3268221439","EU" +"3268221440","3268221471","GB" +"3268221472","3268221503","EU" +"3268221504","3268221599","GB" +"3268221600","3268221695","EU" +"3268221696","3268221951","GB" +"3268221952","3268222975","EU" +"3268222976","3268223167","GB" +"3268223168","3268223199","EU" +"3268223200","3268223231","GB" +"3268223232","3268224767","EU" +"3268224768","3268225023","US" +"3268225024","3268226367","EU" +"3268226368","3268226815","GB" +"3268226816","3268227327","EU" +"3268227328","3268227391","GB" +"3268227392","3268227519","EU" +"3268227520","3268227615","GB" +"3268227616","3268229631","EU" +"3268229632","3268229887","GB" +"3268229888","3268231167","EU" +"3268231168","3268231199","GB" +"3268231200","3268231319","EU" +"3268231320","3268231359","GB" +"3268231360","3268231391","EU" +"3268231392","3268231423","GB" +"3268231424","3268231647","EU" +"3268231648","3268231679","GB" +"3268231680","3268231743","EU" +"3268231744","3268231807","GB" +"3268231808","3268232223","EU" +"3268232224","3268232243","GB" +"3268232244","3268232351","EU" +"3268232352","3268232367","GB" +"3268232368","3268232383","EU" +"3268232384","3268232415","GB" +"3268232416","3268232479","EU" +"3268232480","3268232575","GB" +"3268232576","3268232959","EU" +"3268232960","3268233087","GB" +"3268233088","3268233983","EU" +"3268233984","3268234047","GB" +"3268234048","3268234175","EU" +"3268234176","3268234239","GB" +"3268234240","3268234559","EU" +"3268234560","3268234623","GB" +"3268234624","3268235007","EU" +"3268235008","3268235263","GB" +"3268235264","3268235519","DE" +"3268235520","3268235775","GB" +"3268235776","3268235935","EU" +"3268235936","3268236031","GB" +"3268236032","3268236191","EU" +"3268236192","3268236207","GB" +"3268236208","3268236543","EU" +"3268236544","3268236607","GB" +"3268236608","3268236671","EU" +"3268236672","3268236799","GB" +"3268236800","3268237823","EU" +"3268237824","3268237839","GB" +"3268237840","3268237855","EU" +"3268237856","3268237887","GB" +"3268237888","3268238335","EU" +"3268238336","3268238359","GB" +"3268238360","3268238367","DE" +"3268238368","3268238463","GB" +"3268238464","3268238471","DE" +"3268238472","3268238847","GB" +"3268238848","3268239103","EU" +"3268239104","3268239359","GB" +"3268239360","3268239583","EU" +"3268239584","3268240127","GB" +"3268240128","3268240159","EU" +"3268240160","3268240191","GB" +"3268240192","3268240383","EU" +"3268240384","3268240399","GB" +"3268240400","3268240479","EU" +"3268240480","3268240487","GB" +"3268240488","3268240687","EU" +"3268240688","3268240695","GB" +"3268240696","3268240711","EU" +"3268240712","3268240735","GB" +"3268240736","3268240743","EU" +"3268240744","3268240751","GB" +"3268240752","3268240975","EU" +"3268240976","3268240991","GB" +"3268240992","3268241007","EU" +"3268241008","3268241023","GB" +"3268241024","3268241543","EU" +"3268241544","3268241551","GB" +"3268241552","3268241639","EU" +"3268241640","3268241655","GB" +"3268241656","3268242495","EU" +"3268242496","3268242523","GB" +"3268242524","3268242879","EU" +"3268242880","3268243071","GB" +"3268243072","3268243327","EU" +"3268243328","3268243391","GB" +"3268243392","3268243743","EU" +"3268243744","3268243775","GB" +"3268243776","3268243967","EU" +"3268243968","3268244031","GB" +"3268244032","3268244775","EU" +"3268244776","3268244783","GB" +"3268244784","3268244791","EU" +"3268244792","3268244799","GB" +"3268244800","3268245503","EU" +"3268245504","3268245759","GB" +"3268245760","3268246271","EU" +"3268246272","3268246783","GB" +"3268246784","3268246791","EU" +"3268246792","3268246807","GB" +"3268246808","3268246975","EU" +"3268246976","3268246991","GB" +"3268246992","3268248319","EU" +"3268248320","3268248447","GB" +"3268248448","3268248511","EU" +"3268248512","3268248543","GB" +"3268248544","3268249599","EU" +"3268249600","3268251311","GB" +"3268251312","3268251327","IE" +"3268251328","3268251583","GB" +"3268251584","3268251615","DE" +"3268251616","3268251631","CH" +"3268251632","3268251647","GB" +"3268251648","3268254463","EU" +"3268254464","3268254543","GB" +"3268254544","3268254591","EU" +"3268254592","3268254607","GB" +"3268254608","3268254623","EU" +"3268254624","3268254639","GB" +"3268254640","3268254895","EU" +"3268254896","3268254903","GB" +"3268254904","3268255823","EU" +"3268255824","3268255863","GB" +"3268255864","3268255871","EU" +"3268255872","3268255887","GB" +"3268255888","3268255895","EU" +"3268255896","3268255919","GB" +"3268255920","3268255951","EU" +"3268255952","3268255983","GB" +"3268255984","3268256895","EU" +"3268256896","3268256959","GB" +"3268256960","3268257023","EU" +"3268257024","3268257055","GB" +"3268257056","3268257087","EU" +"3268257088","3268257119","GB" +"3268257120","3268257263","EU" +"3268257264","3268257271","GB" +"3268257272","3268257415","EU" +"3268257416","3268257419","GB" +"3268257420","3268257431","EU" +"3268257432","3268257439","IT" +"3268257440","3268257455","EU" +"3268257456","3268257471","GB" +"3268257472","3268257487","EU" +"3268257488","3268257527","GB" +"3268257528","3268258559","EU" +"3268258560","3268258623","GB" +"3268258624","3268258687","EU" +"3268258688","3268258751","GB" +"3268258752","3268259263","EU" +"3268259264","3268259327","GB" +"3268259328","3268259519","EU" +"3268259520","3268259527","GB" +"3268259528","3268259543","EU" +"3268259544","3268259551","GB" +"3268259552","3268259559","EU" +"3268259560","3268259575","GB" +"3268259576","3268259807","EU" +"3268259808","3268259823","GB" +"3268259824","3268259831","EU" +"3268259832","3268260095","GB" +"3268260096","3268260351","EU" +"3268260352","3268260383","GB" +"3268260384","3268260415","EU" +"3268260416","3268260447","GB" +"3268260448","3268260511","EU" +"3268260512","3268260607","GB" +"3268260608","3268260639","EU" +"3268260640","3268260647","GB" +"3268260648","3268260655","EU" +"3268260656","3268260671","GB" +"3268260672","3268261935","EU" +"3268261936","3268261951","GB" +"3268261952","3268262767","EU" +"3268262768","3268262783","GB" +"3268262784","3268262879","EU" +"3268262880","3268262887","GB" +"3268262888","3268263231","EU" +"3268263232","3268263263","GB" +"3268263264","3268263775","EU" +"3268263776","3268263783","GB" +"3268263784","3268264735","EU" +"3268264736","3268264767","GB" +"3268264768","3268265415","EU" +"3268265416","3268265431","GB" +"3268265432","3268265983","EU" +"3268265984","3268266495","GB" +"3268266496","3268266983","EU" +"3268266984","3268266991","GB" +"3268266992","3268267535","EU" +"3268267536","3268267551","GB" +"3268267552","3268267583","EU" +"3268267584","3268267599","GB" +"3268267600","3268267615","EU" +"3268267616","3268267647","GB" +"3268267648","3268267743","EU" +"3268267744","3268267775","GB" +"3268267776","3268267951","EU" +"3268267952","3268267959","GB" +"3268267960","3268268543","EU" +"3268268544","3268268799","GB" +"3268268800","3268270351","EU" +"3268270352","3268270367","GB" +"3268270368","3268270495","EU" +"3268270496","3268270511","GB" +"3268270512","3268270847","EU" +"3268270848","3268271359","GB" +"3268271360","3268271911","EU" +"3268271912","3268271919","GB" +"3268271920","3268271927","EU" +"3268271928","3268271935","GB" +"3268271936","3268272703","EU" +"3268272704","3268272711","GB" +"3268272712","3268272727","EU" +"3268272728","3268272735","GB" +"3268272736","3268273023","EU" +"3268273024","3268273151","GB" +"3268273152","3268274111","EU" +"3268274112","3268274175","GB" +"3268274176","3268274455","EU" +"3268274456","3268274459","GB" +"3268274460","3268274527","EU" +"3268274528","3268274543","GB" +"3268274544","3268274559","EU" +"3268274560","3268274591","GB" +"3268274592","3268275983","EU" +"3268275984","3268275999","GB" +"3268276000","3268276639","EU" +"3268276640","3268276655","GB" +"3268276656","3268276671","EU" +"3268276672","3268276687","GB" +"3268276688","3268276767","EU" +"3268276768","3268276799","GB" +"3268276800","3268276863","EU" +"3268276864","3268276895","GB" +"3268276896","3268277055","EU" +"3268277056","3268277119","GB" +"3268277120","3268277759","EU" +"3268277760","3268278015","GB" +"3268278016","3268278463","EU" +"3268278464","3268278495","GB" +"3268278496","3268280063","EU" +"3268280064","3268280319","GB" +"3268280320","3268335615","FR" +"3268335616","3268335871","CH" +"3268335872","3268345855","FR" +"3268345856","3268411391","GB" +"3268411392","3268424959","AT" +"3268424960","3268425727","CH" +"3268425728","3268426495","AT" +"3268426496","3268428031","CH" +"3268428032","3268428287","AT" +"3268428288","3268428543","CH" +"3268428544","3268429055","AT" +"3268429056","3268429311","CH" +"3268429312","3268429567","AT" +"3268429568","3268430079","CH" +"3268430080","3268464127","AT" +"3268464128","3268464383","LI" +"3268464384","3268476927","AT" +"3268476928","3268537087","CH" +"3268537088","3268537343","US" +"3268537344","3268542463","CH" +"3268542464","3268607999","PT" +"3268608000","3268673535","FI" +"3268673536","3268703799","CZ" +"3268703800","3268703807","CR" +"3268703808","3268728287","CZ" +"3268728288","3268728299","CR" +"3268728300","3268739071","CZ" +"3268739072","3268739327","DE" +"3268739328","3268739583","PL" +"3268739584","3268739839","DE" +"3268739840","3268740095","GB" +"3268740096","3268740351","IL" +"3268740352","3268740607","DE" +"3268740608","3268740863","RO" +"3268740864","3268741119","CH" +"3268741120","3268741375","FR" +"3268741376","3268741887","LV" +"3268741888","3268742143","AT" +"3268742144","3268742399","RU" +"3268742400","3268742655","CZ" +"3268742656","3268742911","BE" +"3268742912","3268743167","NL" +"3268743168","3268743423","RO" +"3268743424","3268743679","PL" +"3268743680","3268743935","GR" +"3268743936","3268744191","ES" +"3268744192","3268744447","DE" +"3268744448","3268744703","RU" +"3268744704","3268744959","PL" +"3268744960","3268745215","UA" +"3268745216","3268745471","KZ" +"3268745472","3268745727","RU" +"3268745728","3268745983","PL" +"3268745984","3268746239","DE" +"3268746240","3268746495","GB" +"3268746496","3268746751","IE" +"3268746752","3268747007","FR" +"3268747008","3268747263","DE" +"3268747264","3268755455","CZ" +"3268755456","3268763647","SE" +"3268763648","3268764159","RU" +"3268764160","3268764671","DE" +"3268764672","3268765183","LV" +"3268765184","3268765695","RU" +"3268765696","3268766719","UA" +"3268766720","3268767231","IL" +"3268767232","3268767743","RU" +"3268767744","3268768255","NL" +"3268768256","3268768767","BE" +"3268768768","3268769279","RU" +"3268769280","3268769791","SE" +"3268769792","3268770303","UA" +"3268770304","3268770815","RU" +"3268770816","3268771327","FR" +"3268771328","3268771839","NL" +"3268771840","3268788223","NO" +"3268788224","3268804607","CZ" +"3268804608","3268869375","FR" +"3268869376","3268870143","PF" +"3268870144","3268876063","FI" +"3268876064","3268876127","SE" +"3268876128","3268876191","FI" +"3268876192","3268876223","SE" +"3268876224","3268881151","FI" +"3268881152","3268881407","SE" +"3268881408","3268881919","FI" +"3268881920","3268882175","SE" +"3268882176","3268916223","FI" +"3268916224","3268916479","GB" +"3268916480","3268920575","FI" +"3268920576","3268920831","SE" +"3268920832","3268932351","FI" +"3268932352","3268932607","RU" +"3268932608","3268935679","FI" +"3268935680","3269057535","GB" +"3269057536","3269058047","NL" +"3269058048","3269066751","GB" +"3269066752","3269118087","SE" +"3269118088","3269118091","GB" +"3269118092","3269122343","SE" +"3269122344","3269122351","GB" +"3269122352","3269131555","SE" +"3269131556","3269131559","NO" +"3269131560","3269132287","SE" +"3269132288","3269197823","GR" +"3269197824","3269263359","RU" +"3269263360","3269264639","EU" +"3269264640","3269264895","DE" +"3269264896","3269265855","EU" +"3269265856","3269265919","DE" +"3269265920","3269266175","GB" +"3269266176","3269266687","EU" +"3269266688","3269266943","DE" +"3269266944","3269267455","GB" +"3269267456","3269272575","EU" +"3269272576","3269272583","DE" +"3269272584","3269272703","EU" +"3269272704","3269272831","DE" +"3269272832","3269272847","GB" +"3269272848","3269272863","NL" +"3269272864","3269272887","GB" +"3269272888","3269272895","EU" +"3269272896","3269273087","NL" +"3269273088","3269273343","DE" +"3269273344","3269273599","EU" +"3269273600","3269273855","GB" +"3269273856","3269275647","DE" +"3269275648","3269275903","EU" +"3269275904","3269276159","DE" +"3269276160","3269276415","GB" +"3269276416","3269277183","EU" +"3269277184","3269277695","FR" +"3269277696","3269277759","GB" +"3269277760","3269278719","NL" +"3269278720","3269279231","EU" +"3269279232","3269279487","NL" +"3269279488","3269279671","EU" +"3269279672","3269279679","CH" +"3269279680","3269279743","EU" +"3269279744","3269280127","GB" +"3269280128","3269280767","NL" +"3269280768","3269281023","GB" +"3269281024","3269281279","DE" +"3269281280","3269281343","FR" +"3269281344","3269282047","EU" +"3269282048","3269282303","DE" +"3269282304","3269282559","GB" +"3269282560","3269282815","FR" +"3269282816","3269283327","EU" +"3269283328","3269283583","DE" +"3269283584","3269283871","EU" +"3269283872","3269283903","DE" +"3269283904","3269284095","EU" +"3269284096","3269284351","GB" +"3269284352","3269284863","EU" +"3269284864","3269285055","FR" +"3269285056","3269285087","EU" +"3269285088","3269285135","DE" +"3269285136","3269285151","GB" +"3269285152","3269285215","DE" +"3269285216","3269285311","EU" +"3269285312","3269285327","DE" +"3269285328","3269285343","FR" +"3269285344","3269285631","GB" +"3269285632","3269285887","DE" +"3269285888","3269286399","EU" +"3269286400","3269286463","DE" +"3269286464","3269288687","EU" +"3269288688","3269288959","DE" +"3269288960","3269290559","EU" +"3269290560","3269290575","DE" +"3269290576","3269290591","EU" +"3269290592","3269290687","DE" +"3269290688","3269290735","EU" +"3269290736","3269290743","DE" +"3269290744","3269291263","EU" +"3269291264","3269291519","DE" +"3269291520","3269291567","GB" +"3269291568","3269291583","EU" +"3269291584","3269291647","GB" +"3269291648","3269291775","EU" +"3269291776","3269292287","ES" +"3269292288","3269293119","EU" +"3269293120","3269293151","DE" +"3269293152","3269293207","EU" +"3269293208","3269293215","DE" +"3269293216","3269293247","EU" +"3269293248","3269293279","DE" +"3269293280","3269293375","EU" +"3269293376","3269293391","DE" +"3269293392","3269293855","EU" +"3269293856","3269293887","DE" +"3269293888","3269293919","EU" +"3269293920","3269293951","DE" +"3269293952","3269296231","EU" +"3269296232","3269296235","DE" +"3269296236","3269296367","EU" +"3269296368","3269296375","DE" +"3269296376","3269297151","EU" +"3269297152","3269297663","GB" +"3269297664","3269298663","EU" +"3269298664","3269298671","DE" +"3269298672","3269303039","EU" +"3269303040","3269303295","DE" +"3269303296","3269303423","GB" +"3269303424","3269303551","EU" +"3269303552","3269303679","DE" +"3269303680","3269305343","EU" +"3269305344","3269305351","DE" +"3269305352","3269305855","EU" +"3269305856","3269306879","DE" +"3269306880","3269307647","EU" +"3269307648","3269307903","DE" +"3269307904","3269310655","EU" +"3269310656","3269310671","DE" +"3269310672","3269310975","EU" +"3269310976","3269311231","DE" +"3269311232","3269311871","EU" +"3269311872","3269311999","DE" +"3269312000","3269313791","EU" +"3269313792","3269314175","DE" +"3269314176","3269314191","EU" +"3269314192","3269314199","DE" +"3269314200","3269315583","EU" +"3269315584","3269315591","DE" +"3269315592","3269317631","EU" +"3269317632","3269317663","GB" +"3269317664","3269317671","IE" +"3269317672","3269317887","GB" +"3269317888","3269318399","DE" +"3269318400","3269318655","GB" +"3269318656","3269318983","DE" +"3269318984","3269319007","EU" +"3269319008","3269319047","DE" +"3269319048","3269319055","EU" +"3269319056","3269319071","DE" +"3269319072","3269319135","EU" +"3269319136","3269320447","DE" +"3269320448","3269320703","EU" +"3269320704","3269321727","GB" +"3269321728","3269322239","EU" +"3269322240","3269322495","DE" +"3269322496","3269322655","EU" +"3269322656","3269322671","DE" +"3269322672","3269322751","EU" +"3269322752","3269323263","DE" +"3269323264","3269326847","EU" +"3269326848","3269326855","DE" +"3269326856","3269326959","EU" +"3269326960","3269326971","DE" +"3269326972","3269326991","EU" +"3269326992","3269326999","DE" +"3269327000","3269327023","EU" +"3269327024","3269327039","DE" +"3269327040","3269327055","EU" +"3269327056","3269327103","DE" +"3269327104","3269327759","EU" +"3269327760","3269327767","DE" +"3269327768","3269327863","EU" +"3269327864","3269328383","DE" +"3269328384","3269328895","EU" +"3269328896","3269459967","GB" +"3269459968","3269525503","ES" +"3269525504","3269556223","IR" +"3269556224","3269556479","AE" +"3269556480","3269591039","IR" +"3269591040","3269621759","RU" +"3269621760","3269623551","BY" +"3269623552","3269656575","RU" +"3269656576","3269722111","GB" +"3269722112","3269750799","CZ" +"3269750800","3269750815","CR" +"3269750816","3269771007","CZ" +"3269771008","3269771263","GB" +"3269771264","3269787647","CZ" +"3269787648","3269853183","NL" +"3269853184","3269918719","CH" +"3269918720","3269936063","DE" +"3269936064","3269936079","NL" +"3269936080","3269984255","DE" +"3269984256","3270049791","AT" +"3270049792","3270062191","DE" +"3270062192","3270062195","ES" +"3270062196","3270078391","DE" +"3270078392","3270078395","ES" +"3270078396","3270100735","DE" +"3270100736","3270100767","GB" +"3270100768","3270115327","DE" +"3270115328","3270117503","EU" +"3270117504","3270117631","DK" +"3270117632","3270122239","EU" +"3270122240","3270122495","DK" +"3270122496","3270123715","EU" +"3270123716","3270123719","DK" +"3270123720","3270123775","EU" +"3270123776","3270124031","DK" +"3270124032","3270124543","EU" +"3270124544","3270124799","DK" +"3270124800","3270125055","EU" +"3270125056","3270125567","DK" +"3270125568","3270126079","EU" +"3270126080","3270126335","DK" +"3270126336","3270126623","EU" +"3270126624","3270126655","DK" +"3270126656","3270131967","EU" +"3270131968","3270132223","NO" +"3270132224","3270132991","EU" +"3270132992","3270133023","NO" +"3270133024","3270136927","EU" +"3270136928","3270136959","NO" +"3270136960","3270136991","EU" +"3270136992","3270137055","NO" +"3270137056","3270140927","EU" +"3270140928","3270141439","NO" +"3270141440","3270142207","EU" +"3270142208","3270142463","NO" +"3270142464","3270143999","EU" +"3270144000","3270144767","NO" +"3270144768","3270146815","EU" +"3270146816","3270147327","NO" +"3270147328","3270147583","EU" +"3270147584","3270148095","NO" +"3270148096","3270151423","FI" +"3270151424","3270151935","EU" +"3270151936","3270154527","FI" +"3270154528","3270155007","EU" +"3270155008","3270155775","FI" +"3270155776","3270156287","EU" +"3270156288","3270156799","DK" +"3270156800","3270159615","EU" +"3270159616","3270159871","DK" +"3270159872","3270164991","EU" +"3270164992","3270165247","NO" +"3270165248","3270166527","EU" +"3270166528","3270167807","NO" +"3270167808","3270169087","EU" +"3270169088","3270169343","NO" +"3270169344","3270170111","EU" +"3270170112","3270170623","NO" +"3270170624","3270174719","EU" +"3270174720","3270174975","NO" +"3270174976","3270175743","EU" +"3270175744","3270175999","NO" +"3270176000","3270181119","EU" +"3270181120","3270181375","CH" +"3270181376","3270181631","EU" +"3270181632","3270181887","CH" +"3270181888","3270182143","EU" +"3270182144","3270182399","CH" +"3270182400","3270182655","EU" +"3270182656","3270183679","CH" +"3270183680","3270189055","EU" +"3270189056","3270189311","BE" +"3270189312","3270190079","EU" +"3270190080","3270190591","IT" +"3270190592","3270191103","CH" +"3270191104","3270191935","EU" +"3270191936","3270192047","CH" +"3270192048","3270196991","EU" +"3270196992","3270197247","CH" +"3270197248","3270200063","EU" +"3270200064","3270200319","NL" +"3270200320","3270201343","EU" +"3270201344","3270201599","NL" +"3270201600","3270202879","EU" +"3270202880","3270203135","NL" +"3270203136","3270205439","EU" +"3270205440","3270205695","NL" +"3270205696","3270205983","EU" +"3270205984","3270205999","ES" +"3270206000","3270206063","EU" +"3270206064","3270206079","ES" +"3270206080","3270206975","EU" +"3270206976","3270207231","ES" +"3270207232","3270207487","CH" +"3270207488","3270207743","EU" +"3270207744","3270207903","IT" +"3270207904","3270207999","EU" +"3270208000","3270208255","CH" +"3270208256","3270208511","LU" +"3270208512","3270208767","EU" +"3270208768","3270209023","RO" +"3270209024","3270209279","NL" +"3270209280","3270212351","EU" +"3270212352","3270212863","NL" +"3270212864","3270213119","EU" +"3270213120","3270213375","NL" +"3270213376","3270213887","EU" +"3270213888","3270214279","PT" +"3270214280","3270214287","US" +"3270214288","3270214303","PT" +"3270214304","3270214319","EU" +"3270214320","3270215439","PT" +"3270215440","3270215519","EU" +"3270215520","3270215935","PT" +"3270215936","3270216191","EU" +"3270216192","3270216351","PT" +"3270216352","3270216383","EU" +"3270216384","3270216703","PT" +"3270216704","3270216735","EU" +"3270216736","3270216751","IT" +"3270216752","3270216799","EU" +"3270216800","3270216815","IT" +"3270216816","3270216831","EU" +"3270216832","3270216879","IT" +"3270216880","3270217471","EU" +"3270217472","3270217727","CH" +"3270217728","3270218495","EU" +"3270218496","3270218751","CH" +"3270218752","3270224639","EU" +"3270224640","3270224895","CH" +"3270224896","3270230271","EU" +"3270230272","3270230783","LU" +"3270230784","3270231295","EU" +"3270231296","3270231647","LU" +"3270231648","3270232575","EU" +"3270232576","3270232831","LU" +"3270232832","3270234111","EU" +"3270234112","3270234367","LU" +"3270234368","3270234623","NL" +"3270234624","3270235135","EU" +"3270235136","3270236159","NL" +"3270236160","3270238207","EU" +"3270238208","3270238719","NL" +"3270238720","3270238975","EU" +"3270238976","3270239487","CH" +"3270239488","3270241791","EU" +"3270241792","3270242559","RO" +"3270242560","3270243327","EU" +"3270243328","3270243839","RO" +"3270243840","3270244095","EU" +"3270244096","3270244351","NL" +"3270244352","3270244863","CH" +"3270244864","3270245887","EU" +"3270245888","3270246143","RO" +"3270246144","3270246399","CH" +"3270246400","3270247951","SE" +"3270247952","3270247955","NO" +"3270247956","3270348287","SE" +"3270348288","3270348543","EU" +"3270348544","3270369919","SE" +"3270369920","3270369927","NO" +"3270369928","3270377471","SE" +"3270377472","3270443007","GB" +"3270443008","3270508543","DK" +"3270508544","3270522367","FI" +"3270522368","3270522623","AX" +"3270522624","3270639615","FI" +"3270639616","3270640127","PL" +"3270640128","3270642175","RU" +"3270642176","3270642687","NO" +"3270642688","3270643199","DE" +"3270643200","3270643711","RU" +"3270643712","3270644223","AT" +"3270644224","3270644735","NL" +"3270644736","3270645247","DE" +"3270645248","3270645759","PL" +"3270645760","3270646271","IL" +"3270646272","3270647807","RU" +"3270647808","3270648063","TR" +"3270648064","3270648319","RU" +"3270648320","3270648575","CH" +"3270648576","3270648831","AT" +"3270648832","3270649087","SI" +"3270649088","3270649343","AT" +"3270649344","3270649599","DK" +"3270649600","3270649855","PL" +"3270649856","3270650111","DK" +"3270650112","3270650367","AT" +"3270650368","3270650623","DK" +"3270650624","3270651391","FR" +"3270651392","3270651647","DE" +"3270651648","3270651903","FR" +"3270651904","3270652415","IT" +"3270652416","3270652671","DK" +"3270652672","3270652927","CH" +"3270652928","3270653183","PL" +"3270653184","3270653439","UA" +"3270653440","3270653695","NL" +"3270653696","3270653951","GB" +"3270653952","3270654207","ES" +"3270654208","3270654463","RO" +"3270654464","3270654719","BE" +"3270654720","3270655231","UA" +"3270655232","3270655487","IT" +"3270655488","3270655743","PL" +"3270655744","3270655999","CH" +"3270656000","3270664191","NL" +"3270664192","3270666239","UA" +"3270666240","3270667263","PL" +"3270667264","3270668287","SE" +"3270668288","3270669311","FR" +"3270669312","3270670335","UA" +"3270670336","3270672383","RU" +"3270672384","3270680575","GB" +"3270680576","3270688767","FR" +"3270688768","3270772079","IT" +"3270772080","3270772087","NL" +"3270772088","3270781343","IT" +"3270781344","3270781359","RO" +"3270781360","3270808127","IT" +"3270808128","3270808159","LU" +"3270808160","3270836223","IT" +"3270836224","3270901759","DE" +"3270901760","3270905855","IT" +"3270905856","3270906111","EU" +"3270906112","3270909951","IT" +"3270909952","3270911839","DE" +"3270911840","3270911871","PL" +"3270911872","3270911935","DE" +"3270911936","3270911967","PL" +"3270911968","3270911999","NL" +"3270912000","3270913535","DE" +"3270913536","3270913791","EU" +"3270913792","3270920703","DE" +"3270920704","3270921215","UA" +"3270921216","3270921471","DK" +"3270921472","3270921727","UA" +"3270921728","3270922239","GB" +"3270922240","3270926335","DE" +"3270926336","3270926591","US" +"3270926592","3270926847","CH" +"3270926848","3270927103","PL" +"3270927104","3270927359","UA" +"3270927360","3270927615","CH" +"3270927616","3270927871","FR" +"3270927872","3270928127","HU" +"3270928128","3270928383","RO" +"3270928384","3270928895","UA" +"3270928896","3270929407","PL" +"3270929408","3270929919","GB" +"3270929920","3270930431","BG" +"3270930432","3270931455","RU" +"3270931456","3270931967","UA" +"3270931968","3270932479","CH" +"3270932480","3270932991","UA" +"3270932992","3270933503","DE" +"3270933504","3270934015","PL" +"3270934016","3270934527","IT" +"3270934528","3270967295","DE" +"3270967296","3270968319","PL" +"3270968320","3270968831","DE" +"3270968832","3270969343","SE" +"3270969344","3270969855","CH" +"3270969856","3270970367","AT" +"3270970368","3270970879","UA" +"3270970880","3270971391","RU" +"3270971392","3270972415","UA" +"3270972416","3270973951","RU" +"3270973952","3270974463","FR" +"3270974464","3270974975","IT" +"3270974976","3270975487","NL" +"3270975488","3270975743","RU" +"3270975744","3270975999","UA" +"3270976000","3270976255","FR" +"3270976256","3270976511","UA" +"3270976512","3270976767","HU" +"3270976768","3270977023","UA" +"3270977024","3270977279","NL" +"3270977280","3270977535","RS" +"3270977536","3270977791","RU" +"3270977792","3270978047","PL" +"3270978048","3270978303","UA" +"3270978304","3270979071","FI" +"3270979072","3270979327","PL" +"3270979328","3270979583","AT" +"3270979584","3270979839","NO" +"3270979840","3270980095","GB" +"3270980096","3270980351","AM" +"3270980352","3270980607","RU" +"3270980608","3270980863","MD" +"3270980864","3270981631","RU" +"3270981632","3270981887","IT" +"3270981888","3270982143","AT" +"3270982144","3270982399","RU" +"3270982400","3270982655","TR" +"3270982656","3270982911","UA" +"3270982912","3270983167","DK" +"3270983168","3270983423","PL" +"3270983424","3270983679","NL" +"3270983680","3270991871","GB" +"3270991872","3271000063","NL" +"3271000064","3271008255","RU" +"3271008256","3271008767","BE" +"3271008768","3271009279","SI" +"3271009280","3271009791","MD" +"3271009792","3271010303","IL" +"3271010304","3271010815","RU" +"3271010816","3271011327","GB" +"3271011328","3271013375","UA" +"3271013376","3271013887","FR" +"3271013888","3271014399","UA" +"3271014400","3271014911","RU" +"3271014912","3271015423","RO" +"3271015424","3271015935","DK" +"3271015936","3271016447","RU" +"3271016448","3271024447","RS" +"3271024448","3271024451","BA" +"3271024452","3271024639","RS" +"3271024640","3271032831","GB" +"3271032832","3271098367","NO" +"3271098368","3271163903","SI" +"3271163904","3271200767","FR" +"3271200768","3271200775","GB" +"3271200776","3271229439","FR" +"3271229440","3271247867","FI" +"3271247868","3271247871","AX" +"3271247872","3271249919","FI" +"3271249920","3271250175","SE" +"3271250176","3271280351","FI" +"3271280352","3271280383","RU" +"3271280384","3271280687","FI" +"3271280688","3271280703","SE" +"3271280704","3271280719","FI" +"3271280720","3271280735","SE" +"3271280736","3271290623","FI" +"3271290624","3271290879","BE" +"3271290880","3271301631","FI" +"3271301632","3271302143","AX" +"3271302144","3271310079","FI" +"3271310080","3271310335","DE" +"3271310336","3271360511","FI" +"3271360512","3271363407","GB" +"3271363408","3271363415","AT" +"3271363416","3271363423","GB" +"3271363424","3271363455","IT" +"3271363456","3271363471","GB" +"3271363472","3271363487","ZA" +"3271363488","3271363519","IT" +"3271363520","3271363551","EU" +"3271363552","3271363583","FR" +"3271363584","3271365887","GB" +"3271365888","3271366143","DE" +"3271366144","3271366399","GB" +"3271366400","3271366655","NL" +"3271366656","3271371263","GB" +"3271371264","3271371519","IE" +"3271371520","3271371679","ZA" +"3271371680","3271371711","DE" +"3271371712","3271371775","CH" +"3271371776","3271372031","GB" +"3271372032","3271372287","BE" +"3271372288","3271372799","FR" +"3271372800","3271373055","SE" +"3271373056","3271373311","BE" +"3271373312","3271373567","GB" +"3271373568","3271373823","FR" +"3271373824","3271374079","DE" +"3271374080","3271374335","BE" +"3271374336","3271374847","DE" +"3271374848","3271375359","GB" +"3271375360","3271375871","CH" +"3271375872","3271376383","BE" +"3271376384","3271376447","GB" +"3271376448","3271376463","FR" +"3271376464","3271376479","IT" +"3271376480","3271376511","FR" +"3271376512","3271376639","DE" +"3271376640","3271376895","AT" +"3271376896","3271377407","ES" +"3271377408","3271377919","NL" +"3271377920","3271378687","BE" +"3271378688","3271378943","SE" +"3271378944","3271380991","GB" +"3271380992","3271381247","BE" +"3271381248","3271381503","NO" +"3271381504","3271381759","SE" +"3271381760","3271382527","IT" +"3271382528","3271383039","IL" +"3271383040","3271383295","CH" +"3271383296","3271383551","BE" +"3271383552","3271384063","GB" +"3271384064","3271384319","CH" +"3271384320","3271384575","BE" +"3271384576","3271384831","GB" +"3271384832","3271385087","BE" +"3271385088","3271385159","DE" +"3271385160","3271385183","GB" +"3271385184","3271385215","ES" +"3271385216","3271385343","NL" +"3271385344","3271391231","DE" +"3271391232","3271391743","NL" +"3271391744","3271391999","NO" +"3271392000","3271392255","DE" +"3271392256","3271392511","FR" +"3271392512","3271392767","BE" +"3271392768","3271393279","FR" +"3271393280","3271393791","AT" +"3271393792","3271394047","DK" +"3271394048","3271394303","DE" +"3271394304","3271394559","BE" +"3271394560","3271394815","GB" +"3271394816","3271395071","DE" +"3271395072","3271395327","GB" +"3271395328","3271396863","IT" +"3271396864","3271397119","GB" +"3271397120","3271397375","NL" +"3271397376","3271397887","CH" +"3271397888","3271397951","FR" +"3271397952","3271397983","IT" +"3271397984","3271397999","NL" +"3271398000","3271398015","FR" +"3271398016","3271398047","NL" +"3271398048","3271398079","ZA" +"3271398080","3271398143","GB" +"3271398144","3271398303","NL" +"3271398304","3271398335","DE" +"3271398336","3271398399","IT" +"3271398400","3271398911","DE" +"3271398912","3271399167","GB" +"3271399168","3271400959","BE" +"3271400960","3271401215","CH" +"3271401216","3271401471","DE" +"3271401472","3271403263","DK" +"3271403264","3271403519","DE" +"3271403520","3271403775","NL" +"3271403776","3271403903","ZA" +"3271403904","3271403919","GB" +"3271403920","3271403935","IE" +"3271403936","3271403967","GB" +"3271403968","3271403983","ZA" +"3271403984","3271403991","GB" +"3271403992","3271403999","ZA" +"3271404000","3271404031","DE" +"3271404032","3271405311","NL" +"3271405312","3271405567","FR" +"3271405568","3271405823","ES" +"3271405824","3271406079","AT" +"3271406080","3271406335","ZA" +"3271406336","3271406591","RO" +"3271406592","3271406847","GB" +"3271406848","3271407615","AT" +"3271407616","3271407871","DE" +"3271407872","3271408127","AT" +"3271408128","3271408383","DE" +"3271408384","3271408639","FR" +"3271408640","3271408895","BE" +"3271408896","3271409151","ES" +"3271409152","3271409407","IT" +"3271409408","3271409663","GB" +"3271409664","3271417855","BE" +"3271417856","3271424071","FR" +"3271424072","3271424079","IT" +"3271424080","3271424095","IE" +"3271424096","3271424111","GB" +"3271424112","3271424127","BE" +"3271424128","3271424191","GB" +"3271424192","3271424511","FR" +"3271424512","3271425023","GB" +"3271425024","3271425279","DE" +"3271425280","3271425535","DK" +"3271425536","3271426047","DE" +"3271426048","3271426303","PF" +"3271426304","3271491583","FR" +"3271491584","3271495679","DK" +"3271495680","3271495807","SE" +"3271495808","3271497087","DK" +"3271497088","3271497215","SE" +"3271497216","3271501567","DK" +"3271501568","3271501575","SE" +"3271501576","3271501663","DK" +"3271501664","3271501679","DE" +"3271501680","3271501695","SE" +"3271501696","3271501783","DK" +"3271501784","3271501791","SE" +"3271501792","3271513343","DK" +"3271513344","3271513599","EU" +"3271513600","3271557119","DK" +"3271557120","3271589887","BE" +"3271589888","3271688191","NO" +"3271688192","3271691775","EU" +"3271691776","3271692031","US" +"3271692032","3271692287","GB" +"3271692288","3271694591","EU" +"3271694592","3271695103","GB" +"3271695104","3271696383","EU" +"3271696384","3271698431","GB" +"3271698432","3271704575","EU" +"3271704576","3271712767","RU" +"3271712768","3271716863","LV" +"3271716864","3271717119","RU" +"3271717120","3271720959","LV" +"3271720960","3271729151","GB" +"3271729152","3271737343","DE" +"3271737344","3271738367","RU" +"3271738368","3271738879","RO" +"3271738880","3271739391","RU" +"3271739392","3271739903","AT" +"3271739904","3271740415","IE" +"3271740416","3271740927","UA" +"3271740928","3271741439","RU" +"3271741440","3271741951","PL" +"3271741952","3271743999","RU" +"3271744000","3271744511","RO" +"3271744512","3271745023","AT" +"3271745024","3271745535","PL" +"3271745536","3271746047","GB" +"3271746048","3271746559","RU" +"3271746560","3271747071","CH" +"3271747072","3271747583","KZ" +"3271747584","3271748095","RU" +"3271748096","3271748607","GR" +"3271748608","3271749119","UA" +"3271749120","3271750143","RU" +"3271750144","3271750655","UA" +"3271750656","3271751167","GB" +"3271751168","3271751679","RO" +"3271751680","3271752191","NL" +"3271752192","3271752703","GB" +"3271752704","3271753215","RU" +"3271753216","3271753727","PL" +"3271753728","3271770111","FR" +"3271770112","3271786495","AT" +"3271786496","3271788543","UA" +"3271788544","3271789567","GB" +"3271789568","3271790591","RU" +"3271790592","3271791615","LV" +"3271791616","3271792639","UA" +"3271792640","3271793663","PL" +"3271793664","3271794687","UA" +"3271794688","3271795711","IT" +"3271795712","3271796735","NL" +"3271796736","3271797759","SK" +"3271797760","3271798783","GB" +"3271798784","3271799807","NL" +"3271799808","3271800831","RU" +"3271800832","3271801855","GB" +"3271801856","3271802879","PS" +"3271802880","3271803903","DE" +"3271803904","3271804927","UA" +"3271804928","3271805951","PL" +"3271805952","3271806975","UA" +"3271806976","3271807999","EU" +"3271808000","3271810047","DE" +"3271810048","3271811071","PL" +"3271811072","3271812095","UA" +"3271812096","3271813119","ES" +"3271813120","3271814143","PL" +"3271814144","3271815167","UA" +"3271815168","3271816191","RU" +"3271816192","3271817215","UA" +"3271817216","3271818239","DE" +"3271818240","3271819263","RU" +"3271819264","3271821246","DE" +"3271821247","3271821247","AT" +"3271821248","3271884799","DE" +"3271884800","3271901183","UA" +"3271901184","3271909375","ES" +"3271909376","3271909887","RO" +"3271909888","3271910399","DE" +"3271910400","3271910911","DK" +"3271910912","3271911423","LV" +"3271911424","3271911935","LI" +"3271911936","3271912959","UA" +"3271912960","3271913215","SK" +"3271913216","3271913471","SE" +"3271913472","3271913983","NO" +"3271913984","3271914495","RO" +"3271914496","3271915007","ES" +"3271915008","3271915519","SE" +"3271915520","3271916031","NL" +"3271916032","3271916543","GB" +"3271916544","3271917311","UA" +"3271917312","3271925759","RU" +"3271925760","3271926015","DE" +"3271926016","3271926271","MD" +"3271926272","3271926527","RU" +"3271926528","3271926783","NL" +"3271926784","3271927295","SI" +"3271927296","3271927551","NO" +"3271927552","3271927807","GB" +"3271927808","3271928063","TR" +"3271928064","3271928319","GB" +"3271928320","3271928575","RU" +"3271928576","3271928831","CH" +"3271928832","3271929087","IE" +"3271929088","3271929343","LB" +"3271929344","3271929599","NO" +"3271929600","3271929855","GB" +"3271929856","3271930111","PL" +"3271930112","3271930367","HU" +"3271930368","3271930623","RU" +"3271930624","3271930879","GE" +"3271930880","3271931135","CH" +"3271931136","3271931647","PL" +"3271931648","3271931903","NO" +"3271931904","3271932159","UA" +"3271932160","3271932415","SE" +"3271932416","3271932671","CZ" +"3271932672","3271932927","DE" +"3271932928","3271933183","PL" +"3271933184","3271933439","GB" +"3271933440","3271933695","SE" +"3271933696","3271933951","DE" +"3271933952","3271977533","FR" +"3271977534","3271977534","US" +"3271977535","3272015871","FR" +"3272015872","3272019967","RO" +"3272019968","3272020991","IT" +"3272020992","3272024063","DK" +"3272024064","3272032255","IE" +"3272032256","3272040447","SE" +"3272040448","3272048639","FR" +"3272048640","3272056831","NL" +"3272056832","3272065023","RU" +"3272065024","3272065631","GB" +"3272065632","3272065663","NL" +"3272065664","3272069503","GB" +"3272069504","3272069567","NL" +"3272069568","3272070143","GB" +"3272070144","3272070175","NL" +"3272070176","3272070239","GB" +"3272070240","3272070255","NL" +"3272070256","3272081407","GB" +"3272081408","3272081919","PT" +"3272081920","3272082687","CV" +"3272082688","3272083455","PT" +"3272083456","3272083711","ST" +"3272083712","3272084025","PT" +"3272084026","3272084026","AO" +"3272084027","3272084735","PT" +"3272084736","3272084991","CV" +"3272084992","3272085503","PT" +"3272085504","3272086015","AO" +"3272086016","3272086527","ST" +"3272086528","3272086655","AO" +"3272086656","3272086783","PT" +"3272086784","3272086799","GH" +"3272086800","3272086807","PT" +"3272086808","3272086815","RO" +"3272086816","3272086831","NI" +"3272086832","3272086879","AO" +"3272086880","3272086975","PT" +"3272086976","3272087039","AN" +"3272087040","3272087295","PT" +"3272087296","3272087551","AO" +"3272087552","3272089343","PT" +"3272089344","3272089479","ST" +"3272089480","3272089535","PT" +"3272089536","3272089551","ST" +"3272089552","3272089599","PT" +"3272089600","3272090111","NO" +"3272090112","3272091647","RU" +"3272091648","3272092671","UA" +"3272092672","3272093183","RU" +"3272093184","3272094207","RO" +"3272094208","3272094719","AM" +"3272094720","3272095231","PL" +"3272095232","3272095743","FI" +"3272095744","3272096255","UA" +"3272096256","3272096767","PT" +"3272096768","3272097279","FI" +"3272097280","3272097791","RU" +"3272097792","3272098519","GB" +"3272098520","3272098527","FR" +"3272098528","3272106239","GB" +"3272106240","3272106495","PL" +"3272106496","3272106751","SE" +"3272106752","3272107007","PL" +"3272107008","3272107263","GB" +"3272107264","3272107519","PL" +"3272107520","3272107775","RU" +"3272107776","3272108031","GB" +"3272108032","3272108287","DE" +"3272108288","3272108543","RO" +"3272108544","3272109055","PL" +"3272109056","3272109311","CH" +"3272109312","3272109567","TR" +"3272109568","3272109823","GB" +"3272109824","3272110079","FR" +"3272110080","3272110335","SE" +"3272110336","3272110591","CH" +"3272110592","3272110847","AT" +"3272110848","3272111103","LV" +"3272111104","3272111871","GB" +"3272111872","3272112383","RO" +"3272112384","3272113151","DE" +"3272113152","3272113407","FR" +"3272113408","3272113919","GB" +"3272113920","3272114175","AT" +"3272114176","3272122367","PL" +"3272122368","3272131071","GB" +"3272131072","3272131583","RO" +"3272131584","3272132095","GB" +"3272132096","3272132607","CH" +"3272132608","3272133119","UA" +"3272133120","3272133631","GB" +"3272133632","3272134143","EE" +"3272134144","3272134655","RO" +"3272134656","3272135167","NL" +"3272135168","3272135679","CH" +"3272135680","3272136191","AT" +"3272136192","3272136703","FR" +"3272136704","3272137215","PL" +"3272137216","3272137727","LT" +"3272137728","3272138239","PL" +"3272138240","3272138751","BG" +"3272138752","3272146943","DE" +"3272146944","3272212479","RU" +"3272212480","3272212991","GB" +"3272212992","3272213375","ES" +"3272213376","3272213391","IT" +"3272213392","3272213399","GB" +"3272213400","3272213407","ES" +"3272213408","3272213415","NL" +"3272213416","3272213423","ES" +"3272213424","3272213431","NL" +"3272213432","3272213439","GB" +"3272213440","3272213471","ES" +"3272213472","3272213487","CY" +"3272213488","3272213495","GB" +"3272213496","3272213503","ES" +"3272213504","3272213567","IT" +"3272213568","3272213575","GB" +"3272213576","3272213583","IE" +"3272213584","3272213599","DE" +"3272213600","3272213631","EU" +"3272213632","3272213639","NL" +"3272213640","3272213655","EU" +"3272213656","3272213663","IT" +"3272213664","3272213671","EU" +"3272213672","3272213679","IT" +"3272213680","3272213695","EU" +"3272213696","3272213735","IT" +"3272213736","3272213751","EU" +"3272213752","3272213759","IT" +"3272213760","3272213823","NL" +"3272213824","3272213831","DE" +"3272213832","3272213839","NL" +"3272213840","3272213855","RU" +"3272213856","3272213887","EU" +"3272213888","3272214015","GB" +"3272214016","3272214271","ES" +"3272214272","3272214351","GB" +"3272214352","3272214407","FR" +"3272214408","3272214431","EU" +"3272214432","3272214463","SE" +"3272214464","3272214527","EU" +"3272214528","3272215039","FR" +"3272215040","3272215295","ES" +"3272215296","3272215551","NL" +"3272215552","3272215807","CH" +"3272215808","3272215823","NL" +"3272215824","3272215871","EU" +"3272215872","3272215879","BE" +"3272215880","3272215883","EU" +"3272215884","3272215919","CH" +"3272215920","3272215935","NL" +"3272215936","3272215999","GB" +"3272216000","3272216015","EU" +"3272216016","3272216031","DE" +"3272216032","3272216039","EU" +"3272216040","3272216047","GB" +"3272216048","3272216191","EU" +"3272216192","3272216207","BE" +"3272216208","3272216215","EU" +"3272216216","3272216223","FR" +"3272216224","3272216231","DE" +"3272216232","3272216239","EU" +"3272216240","3272216255","NL" +"3272216256","3272216287","CH" +"3272216288","3272216303","EU" +"3272216304","3272216311","ES" +"3272216312","3272216319","EU" +"3272216320","3272216351","NL" +"3272216352","3272216383","DE" +"3272216384","3272216447","CH" +"3272216448","3272216451","EU" +"3272216452","3272216455","NL" +"3272216456","3272216463","EU" +"3272216464","3272216479","FR" +"3272216480","3272216495","IR" +"3272216496","3272216511","EU" +"3272216512","3272216575","IT" +"3272216576","3272216895","GB" +"3272216896","3272216911","FR" +"3272216912","3272216927","DE" +"3272216928","3272216959","EU" +"3272216960","3272217007","GB" +"3272217008","3272217087","EU" +"3272217088","3272217151","GB" +"3272217152","3272217215","EU" +"3272217216","3272217279","BE" +"3272217280","3272217303","DE" +"3272217304","3272217311","BE" +"3272217312","3272217599","EU" +"3272217600","3272217631","CH" +"3272217632","3272217855","EU" +"3272217856","3272217875","ES" +"3272217876","3272217879","EU" +"3272217880","3272217895","IT" +"3272217896","3272217911","ES" +"3272217912","3272217919","EU" +"3272217920","3272217983","DE" +"3272217984","3272218079","ES" +"3272218080","3272218111","EU" +"3272218112","3272218623","GB" +"3272218624","3272218639","RU" +"3272218640","3272218671","DE" +"3272218672","3272218687","EU" +"3272218688","3272218719","DE" +"3272218720","3272218879","EU" +"3272218880","3272219135","BE" +"3272219136","3272219391","NL" +"3272219392","3272219647","EU" +"3272219648","3272219903","FR" +"3272219904","3272220159","DE" +"3272220160","3272220415","FR" +"3272220416","3272221183","GB" +"3272221184","3272221439","NL" +"3272221440","3272221447","SE" +"3272221448","3272221455","NO" +"3272221456","3272221463","SE" +"3272221464","3272221695","EU" +"3272221696","3272221951","NL" +"3272221952","3272222207","GB" +"3272222208","3272222463","ES" +"3272222464","3272222719","NL" +"3272222720","3272222975","DE" +"3272222976","3272223015","GB" +"3272223016","3272223023","EU" +"3272223024","3272223039","GB" +"3272223040","3272223231","EU" +"3272223232","3272223487","NL" +"3272223488","3272223743","GB" +"3272223744","3272223775","GI" +"3272223776","3272223807","EU" +"3272223808","3272223815","CY" +"3272223816","3272223823","EU" +"3272223824","3272223839","GB" +"3272223840","3272223999","EU" +"3272224000","3272224255","GB" +"3272224256","3272224383","GI" +"3272224384","3272224511","EU" +"3272224512","3272225279","GB" +"3272225280","3272225535","IT" +"3272225536","3272225791","GB" +"3272225792","3272226047","EU" +"3272226048","3272226815","FR" +"3272226816","3272227071","GB" +"3272227072","3272227327","FR" +"3272227328","3272227359","US" +"3272227360","3272227511","GB" +"3272227512","3272227519","EU" +"3272227520","3272227583","GB" +"3272227584","3272227839","FR" +"3272227840","3272228095","ES" +"3272228096","3272228223","GB" +"3272228224","3272228351","ES" +"3272228352","3272228607","FR" +"3272228608","3272228623","NL" +"3272228624","3272228631","CY" +"3272228632","3272228639","NL" +"3272228640","3272228671","IT" +"3272228672","3272228703","DE" +"3272228704","3272228735","FR" +"3272228736","3272228799","NL" +"3272228800","3272228863","CH" +"3272228864","3272237055","LU" +"3272237056","3272238919","GB" +"3272238920","3272238975","IM" +"3272238976","3272239039","GB" +"3272239040","3272239103","IM" +"3272239104","3272239687","GB" +"3272239688","3272239695","IM" +"3272239696","3272239703","GB" +"3272239704","3272239711","IM" +"3272239712","3272239775","GB" +"3272239776","3272239799","IM" +"3272239800","3272240127","GB" +"3272240128","3272240367","IM" +"3272240368","3272240575","GB" +"3272240576","3272240639","GH" +"3272240640","3272241215","GB" +"3272241216","3272241247","IM" +"3272241248","3272241279","GB" +"3272241280","3272241295","IM" +"3272241296","3272241303","GB" +"3272241304","3272241311","IM" +"3272241312","3272241335","GB" +"3272241336","3272241343","IM" +"3272241344","3272241375","GB" +"3272241376","3272241407","IM" +"3272241408","3272241518","GB" +"3272241519","3272241599","IM" +"3272241600","3272241663","GB" +"3272241664","3272241855","IM" +"3272241856","3272242215","GB" +"3272242216","3272242223","IM" +"3272242224","3272242239","GB" +"3272242240","3272242591","IM" +"3272242592","3272242607","GB" +"3272242608","3272242623","IM" +"3272242624","3272242655","GB" +"3272242656","3272242719","IM" +"3272242720","3272242735","GB" +"3272242736","3272242751","IM" +"3272242752","3272242783","GB" +"3272242784","3272242943","IM" +"3272242944","3272243207","GB" +"3272243208","3272243215","IM" +"3272243216","3272243231","GB" +"3272243232","3272243263","IM" +"3272243264","3272243327","GB" +"3272243328","3272243455","IM" +"3272243456","3272244015","GB" +"3272244016","3272244031","IM" +"3272244032","3272244039","GB" +"3272244040","3272244047","IM" +"3272244048","3272244071","GB" +"3272244072","3272244079","IM" +"3272244080","3272244111","GB" +"3272244112","3272244127","IM" +"3272244128","3272244151","GB" +"3272244152","3272244159","IM" +"3272244160","3272244175","GB" +"3272244176","3272244215","IM" +"3272244216","3272245247","GB" +"3272245248","3272261631","FI" +"3272261632","3272261887","MT" +"3272261888","3272262143","BG" +"3272262144","3272262399","IL" +"3272262400","3272262655","DE" +"3272262656","3272262911","NO" +"3272262912","3272263167","SA" +"3272263168","3272263423","RU" +"3272263424","3272263935","GB" +"3272263936","3272264191","ES" +"3272264192","3272264447","NL" +"3272264448","3272264703","DE" +"3272264704","3272264959","LV" +"3272264960","3272265215","RU" +"3272265216","3272265471","AT" +"3272265472","3272265727","DK" +"3272265728","3272265983","DE" +"3272265984","3272266239","GB" +"3272266240","3272266495","UA" +"3272266496","3272266751","SE" +"3272266752","3272267007","NL" +"3272267008","3272267263","GB" +"3272267264","3272267519","SE" +"3272267520","3272267775","GB" +"3272267776","3272268031","LV" +"3272268032","3272268287","MT" +"3272268288","3272268543","UA" +"3272268544","3272268799","RO" +"3272268800","3272269055","IL" +"3272269056","3272269311","GB" +"3272269312","3272269567","IL" +"3272269568","3272335359","GB" +"3272335360","3272343551","NL" +"3272343552","3272351743","GB" +"3272351744","3272352767","PL" +"3272352768","3272353791","UA" +"3272353792","3272355839","CH" +"3272355840","3272356863","GB" +"3272356864","3272357887","RO" +"3272357888","3272358911","UA" +"3272358912","3272359935","NL" +"3272359936","3272368127","RU" +"3272368128","3272376319","KZ" +"3272376320","3272376447","SK" +"3272376448","3272376479","SR" +"3272376480","3272376495","SK" +"3272376496","3272376527","SR" +"3272376528","3272376535","SK" +"3272376536","3272376543","SR" +"3272376544","3272376607","SK" +"3272376608","3272376639","SR" +"3272376640","3272376735","SK" +"3272376736","3272376751","SR" +"3272376752","3272376767","SK" +"3272376768","3272376831","SR" +"3272376832","3272378183","SK" +"3272378184","3272378201","SR" +"3272378202","3272384511","SK" +"3272384512","3272392703","LT" +"3272392704","3272400895","AT" +"3272400896","3272400911","EU" +"3272400912","3272400927","GB" +"3272400928","3272401023","EU" +"3272401024","3272401087","GB" +"3272401088","3272401215","EU" +"3272401216","3272401247","PL" +"3272401248","3272401279","EU" +"3272401280","3272401407","NL" +"3272401408","3272401951","EU" +"3272401952","3272401967","SE" +"3272401968","3272401983","GB" +"3272401984","3272402031","DE" +"3272402032","3272402039","GB" +"3272402040","3272402047","US" +"3272402048","3272402079","EU" +"3272402080","3272402111","SE" +"3272402112","3272402175","EU" +"3272402176","3272402191","GB" +"3272402192","3272402303","EU" +"3272402304","3272402431","FR" +"3272402432","3272402447","EU" +"3272402448","3272402455","FR" +"3272402456","3272402559","EU" +"3272402560","3272402623","GB" +"3272402624","3272402687","EU" +"3272402688","3272402815","SE" +"3272402816","3272403007","EU" +"3272403008","3272403023","FR" +"3272403024","3272403039","EU" +"3272403040","3272403055","DE" +"3272403056","3272403071","NL" +"3272403072","3272403199","FR" +"3272403200","3272403455","SE" +"3272403456","3272404991","FR" +"3272404992","3272406015","DE" +"3272406016","3272407039","NL" +"3272407040","3272409087","EU" +"3272409088","3272417279","BE" +"3272417280","3272418687","FR" +"3272418688","3272419327","PL" +"3272419328","3272420863","DE" +"3272420864","3272420991","PL" +"3272420992","3272421119","DK" +"3272421120","3272421375","UA" +"3272421376","3272421887","RO" +"3272421888","3272422143","RU" +"3272422144","3272422399","GB" +"3272422400","3272422911","CH" +"3272422912","3272423423","SE" +"3272423424","3272423935","BE" +"3272423936","3272424447","FR" +"3272424448","3272425471","DE" +"3272425472","3272426655","GB" +"3272426656","3272426671","IL" +"3272426672","3272441855","GB" +"3272441856","3272474623","LV" +"3272474624","3272474879","FR" +"3272474880","3272475135","NL" +"3272475136","3272475391","RU" +"3272475392","3272475903","PL" +"3272475904","3272476159","FR" +"3272476160","3272476671","RO" +"3272476672","3272476927","DE" +"3272476928","3272477183","GR" +"3272477184","3272477439","GB" +"3272477440","3272477695","PL" +"3272477696","3272477951","RU" +"3272477952","3272478207","RO" +"3272478208","3272478463","DK" +"3272478464","3272478719","FI" +"3272478720","3272478975","GB" +"3272478976","3272479231","UA" +"3272479232","3272479487","GB" +"3272479488","3272479743","SA" +"3272479744","3272480255","SE" +"3272480256","3272480511","FR" +"3272480512","3272480767","GB" +"3272480768","3272481023","DE" +"3272481024","3272481279","SE" +"3272481280","3272481535","CH" +"3272481536","3272481791","FR" +"3272481792","3272482047","IT" +"3272482048","3272482303","NL" +"3272482304","3272482559","PL" +"3272482560","3272482815","BE" +"3272482816","3272491007","RU" +"3272491008","3272499199","GB" +"3272499200","3272499711","RU" +"3272499712","3272500223","NL" +"3272500224","3272500735","RU" +"3272500736","3272501247","IT" +"3272501248","3272502783","RU" +"3272502784","3272503295","KW" +"3272503296","3272503807","UA" +"3272503808","3272504319","RU" +"3272504320","3272504831","PL" +"3272504832","3272505343","RU" +"3272505344","3272505855","AT" +"3272505856","3272506879","UA" +"3272506880","3272507391","CH" +"3272507392","3272515583","CY" +"3272515584","3272523775","LT" +"3272523776","3272540159","DE" +"3272540160","3272546559","CH" +"3272546560","3272546815","FR" +"3272546816","3272547387","CH" +"3272547388","3272547391","FR" +"3272547392","3272552735","CH" +"3272552736","3272552743","FR" +"3272552744","3272552879","CH" +"3272552880","3272552887","FR" +"3272552888","3272553471","CH" +"3272553472","3272553487","FR" +"3272553488","3272554779","CH" +"3272554780","3272554783","FR" +"3272554784","3272555247","CH" +"3272555248","3272555255","FR" +"3272555256","3272555407","CH" +"3272555408","3272555423","FR" +"3272555424","3272556599","CH" +"3272556600","3272556607","FR" +"3272556608","3272568079","CH" +"3272568080","3272568095","FR" +"3272568096","3272572879","CH" +"3272572880","3272572895","FR" +"3272572896","3272605695","CH" +"3272605696","3272613887","BE" +"3272613888","3272622079","RU" +"3272622080","3272623103","RO" +"3272623104","3272624127","DE" +"3272624128","3272625151","RU" +"3272625152","3272626175","UA" +"3272626176","3272627199","DE" +"3272627200","3272628223","NL" +"3272628224","3272629247","UA" +"3272629248","3272633983","RU" +"3272633984","3272634047","KZ" +"3272634048","3272638463","RU" +"3272638464","3272646655","ES" +"3272646656","3272646784","DE" +"3272646785","3272646911","GB" +"3272646912","3272647423","DE" +"3272647424","3272649215","GB" +"3272649216","3272649471","IE" +"3272649472","3272649727","SA" +"3272649728","3272650623","GB" +"3272650624","3272650639","FR" +"3272650640","3272650655","GB" +"3272650656","3272650751","DE" +"3272650752","3272651135","GB" +"3272651136","3272651151","CH" +"3272651152","3272651183","GB" +"3272651184","3272651191","NL" +"3272651192","3272651231","GB" +"3272651232","3272651239","UZ" +"3272651240","3272652287","GB" +"3272652288","3272652799","FR" +"3272652800","3272653055","GB" +"3272653056","3272653087","CH" +"3272653088","3272653247","GB" +"3272653248","3272653279","FR" +"3272653280","3272653311","GB" +"3272653312","3272653439","SE" +"3272653440","3272653447","GB" +"3272653448","3272653455","IE" +"3272653456","3272653463","DE" +"3272653464","3272653543","GB" +"3272653544","3272653551","NL" +"3272653552","3272653567","GB" +"3272653568","3272653631","SE" +"3272653632","3272653663","FR" +"3272653664","3272653695","DE" +"3272653696","3272653727","IT" +"3272653728","3272653759","NL" +"3272653760","3272653791","DK" +"3272653792","3272653823","GB" +"3272653824","3272653951","FR" +"3272653952","3272654207","DE" +"3272654208","3272654335","FR" +"3272654336","3272654463","ES" +"3272654464","3272654591","GB" +"3272654592","3272654719","NO" +"3272654720","3272654783","IT" +"3272654784","3272654847","NL" +"3272654848","3272663039","FI" +"3272663040","3272671231","AT" +"3272671232","3272704255","SE" +"3272704256","3272705279","IE" +"3272705280","3272705535","SE" +"3272705536","3272707071","IE" +"3272707072","3272707327","SE" +"3272707328","3272707583","IE" +"3272707584","3272712191","SE" +"3272712192","3272712447","GB" +"3272712448","3272712703","SE" +"3272712704","3272712959","GB" +"3272712960","3272713215","SE" +"3272713216","3272713983","GB" +"3272713984","3272714495","SE" +"3272714496","3272714751","GB" +"3272714752","3272715015","SE" +"3272715016","3272715023","GB" +"3272715024","3272715135","SE" +"3272715136","3272715263","GB" +"3272715264","3272733983","SE" +"3272733984","3272733991","RU" +"3272733992","3272736767","SE" +"3272736768","3272737791","IT" +"3272737792","3272738815","GB" +"3272738816","3272739839","IL" +"3272739840","3272741887","UA" +"3272741888","3272743935","RU" +"3272743936","3272744959","UA" +"3272744960","3272753151","RU" +"3272753152","3272769535","NL" +"3272769536","3272802303","NO" +"3272802304","3272867839","RU" +"3272867840","3272868863","PL" +"3272868864","3272869887","UA" +"3272869888","3272870911","NL" +"3272870912","3272871935","FR" +"3272871936","3272872959","FI" +"3272872960","3272875007","BG" +"3272875008","3272876031","UA" +"3272876032","3272884223","NL" +"3272884224","3272892415","DE" +"3272892416","3272892927","UA" +"3272892928","3272893439","DE" +"3272893440","3272893951","SE" +"3272893952","3272894463","UA" +"3272894464","3272894975","FR" +"3272894976","3272895487","RO" +"3272895488","3272895999","GB" +"3272896000","3272896511","PL" +"3272896512","3272897535","DE" +"3272897536","3272898047","FI" +"3272898048","3272898559","UA" +"3272898560","3272899327","DE" +"3272899328","3272899583","PL" +"3272899584","3272900095","UA" +"3272900096","3272900607","LV" +"3272900608","3272900863","RU" +"3272900864","3272901119","AT" +"3272901120","3272901375","UA" +"3272901376","3272901631","PL" +"3272901632","3272901887","AT" +"3272901888","3272902143","DE" +"3272902144","3272902399","PL" +"3272902400","3272902655","RU" +"3272902656","3272902911","IR" +"3272902912","3272903167","RU" +"3272903168","3272903423","PL" +"3272903424","3272903679","AT" +"3272903680","3272903935","RU" +"3272903936","3272904191","GB" +"3272904192","3272904447","SI" +"3272904448","3272904703","BE" +"3272904704","3272904959","NL" +"3272904960","3272905215","RO" +"3272905216","3272905727","CH" +"3272905728","3272905983","UA" +"3272905984","3272906239","FI" +"3272906240","3272906495","PL" +"3272906496","3272906751","EE" +"3272906752","3272907007","HU" +"3272907008","3272907263","HR" +"3272907264","3272907519","UA" +"3272907520","3272907775","GB" +"3272907776","3272908031","RO" +"3272908032","3272908287","CH" +"3272908288","3272908543","AT" +"3272908544","3272908799","DE" +"3272908800","3272910847","SK" +"3272910848","3272911359","NL" +"3272911360","3272911871","SK" +"3272911872","3272912383","CZ" +"3272912384","3272916991","SK" +"3272916992","3272917503","MC" +"3272917504","3272918527","RU" +"3272918528","3272919039","FR" +"3272919040","3272919551","GB" +"3272919552","3272920063","RO" +"3272920064","3272920575","NL" +"3272920576","3272921087","SE" +"3272921088","3272921599","CH" +"3272921600","3272922111","DE" +"3272922112","3272922623","PL" +"3272922624","3272923135","GB" +"3272923136","3272923647","ES" +"3272923648","3272924159","PL" +"3272924160","3272924671","DE" +"3272924672","3272925183","GB" +"3272925184","3272931135","DE" +"3272931136","3272931151","GB" +"3272931152","3272933375","DE" +"3272933376","3272934399","FI" +"3272934400","3272940287","GB" +"3272940288","3272940543","DE" +"3272940544","3272998911","GB" +"3272998912","3273007103","PT" +"3273007104","3273015295","CZ" +"3273015296","3273023487","SE" +"3273023488","3273024511","PL" +"3273024512","3273025535","NL" +"3273025536","3273026559","RU" +"3273026560","3273028607","UA" +"3273028608","3273029631","PL" +"3273029632","3273029887","CH" +"3273029888","3273030143","GB" +"3273030144","3273030655","RU" +"3273030656","3273031679","PL" +"3273031680","3273032191","GB" +"3273032192","3273033215","UA" +"3273033216","3273033727","GB" +"3273033728","3273034239","DE" +"3273034240","3273034751","BE" +"3273034752","3273035263","UA" +"3273035264","3273035775","DE" +"3273035776","3273036287","FR" +"3273036288","3273036799","BG" +"3273036800","3273037311","IL" +"3273037312","3273037823","GB" +"3273037824","3273038335","UA" +"3273038336","3273038847","GR" +"3273038848","3273039871","GB" +"3273039872","3273048063","LT" +"3273048064","3273048319","IT" +"3273048320","3273048575","GR" +"3273048576","3273048831","IT" +"3273048832","3273049087","US" +"3273049088","3273049855","IT" +"3273049856","3273050111","US" +"3273050112","3273050783","IT" +"3273050784","3273050879","GR" +"3273050880","3273051647","IT" +"3273051648","3273051903","US" +"3273051904","3273051967","IE" +"3273051968","3273052039","IT" +"3273052040","3273052047","NL" +"3273052048","3273052063","GR" +"3273052064","3273052087","IT" +"3273052088","3273052095","DE" +"3273052096","3273052127","GR" +"3273052128","3273052415","IT" +"3273052416","3273052671","GB" +"3273052672","3273052927","FR" +"3273052928","3273053183","DE" +"3273053184","3273053439","CH" +"3273053440","3273053695","NL" +"3273053696","3273053951","BE" +"3273053952","3273053983","AT" +"3273053984","3273053991","CZ" +"3273053992","3273054207","AT" +"3273054208","3273054463","US" +"3273054464","3273054719","ES" +"3273054720","3273054975","IT" +"3273054976","3273055231","BR" +"3273055232","3273055487","AR" +"3273055488","3273055743","CL" +"3273055744","3273055999","US" +"3273056000","3273056127","IT" +"3273056128","3273056255","HK" +"3273056256","3273064447","MD" +"3273064448","3273129983","PT" +"3273129984","3273138175","DK" +"3273138176","3273146367","BG" +"3273146368","3273148415","RU" +"3273148416","3273150463","LU" +"3273150464","3273152511","DZ" +"3273152512","3273154559","BG" +"3273154560","3273162751","DE" +"3273162752","3273170943","UA" +"3273170944","3273179135","SE" +"3273179136","3273187327","CM" +"3273187328","3273187839","SE" +"3273187840","3273188351","DK" +"3273188352","3273188863","RU" +"3273188864","3273189887","GB" +"3273189888","3273190399","UA" +"3273190400","3273191935","RO" +"3273191936","3273192447","UA" +"3273192448","3273192959","DK" +"3273192960","3273193471","FR" +"3273193472","3273193983","PL" +"3273193984","3273194495","EU" +"3273194496","3273195007","UA" +"3273195008","3273195519","RU" +"3273195520","3273230983","FR" +"3273230984","3273230991","DE" +"3273230992","3273240119","FR" +"3273240120","3273240127","DE" +"3273240128","3273240223","FR" +"3273240224","3273240231","MC" +"3273240232","3273261055","FR" +"3273261056","3273261567","NO" +"3273261568","3273262079","BE" +"3273262080","3273262591","LU" +"3273262592","3273263103","RU" +"3273263104","3273263615","FR" +"3273263616","3273264127","SE" +"3273264128","3273264639","PL" +"3273264640","3273265151","AT" +"3273265152","3273266175","UA" +"3273266176","3273266687","LV" +"3273266688","3273267455","PL" +"3273267456","3273267711","CZ" +"3273267712","3273268223","GB" +"3273268224","3273268735","SE" +"3273268736","3273269247","RU" +"3273269248","3273276119","GB" +"3273276120","3273276127","US" +"3273276128","3273277439","GB" +"3273277440","3273278463","UA" +"3273278464","3273279487","RU" +"3273279488","3273281535","PL" +"3273281536","3273283583","UA" +"3273283584","3273284607","GB" +"3273284608","3273285631","UA" +"3273285632","3273293823","GB" +"3273293824","3273302015","MK" +"3273302016","3273310207","RU" +"3273310208","3273318399","AT" +"3273318400","3273326591","GB" +"3273326592","3273326847","IE" +"3273326848","3273326983","EU" +"3273326984","3273326987","DE" +"3273326988","3273326991","EU" +"3273326992","3273327047","DE" +"3273327048","3273327263","EU" +"3273327264","3273327287","DE" +"3273327288","3273327359","EU" +"3273327360","3273327423","IE" +"3273327424","3273327511","GB" +"3273327512","3273327519","EU" +"3273327520","3273327551","IE" +"3273327552","3273327583","GB" +"3273327584","3273327615","IE" +"3273327616","3273328511","EU" +"3273328512","3273328639","DE" +"3273328640","3273329191","GB" +"3273329192","3273329199","EU" +"3273329200","3273329215","DE" +"3273329216","3273329279","GB" +"3273329280","3273329311","EU" +"3273329312","3273329327","GB" +"3273329328","3273329407","EU" +"3273329408","3273329423","GB" +"3273329424","3273329439","DE" +"3273329440","3273330175","GB" +"3273330176","3273330183","IR" +"3273330184","3273330191","IE" +"3273330192","3273330199","GB" +"3273330200","3273330223","IE" +"3273330224","3273330271","GB" +"3273330272","3273330295","IE" +"3273330296","3273330303","GB" +"3273330304","3273330431","IE" +"3273330432","3273331199","GB" +"3273331200","3273331711","EU" +"3273331712","3273331967","GB" +"3273331968","3273332031","DE" +"3273332032","3273332095","GB" +"3273332096","3273332223","DE" +"3273332224","3273332479","GB" +"3273332480","3273332543","EU" +"3273332544","3273332575","DE" +"3273332576","3273332607","EU" +"3273332608","3273332671","DE" +"3273332672","3273333055","EU" +"3273333056","3273333119","DE" +"3273333120","3273334271","EU" +"3273334272","3273334783","DE" +"3273334784","3273335039","EU" +"3273335040","3273335295","DE" +"3273335296","3273335807","GB" +"3273335808","3273335935","EU" +"3273335936","3273335999","DE" +"3273336000","3273336847","EU" +"3273336848","3273336863","DE" +"3273336864","3273336871","GB" +"3273336872","3273336895","DE" +"3273336896","3273336959","EU" +"3273336960","3273337087","DE" +"3273337088","3273337855","EU" +"3273337856","3273338111","DE" +"3273338112","3273338623","EU" +"3273338624","3273338879","DE" +"3273338880","3273339135","EU" +"3273339136","3273339903","DE" +"3273339904","3273339919","GB" +"3273339920","3273339943","DE" +"3273339944","3273339955","GB" +"3273339956","3273339959","DE" +"3273339960","3273340095","GB" +"3273340096","3273340111","GI" +"3273340112","3273340415","GB" +"3273340416","3273340927","EU" +"3273340928","3273341695","FR" +"3273341696","3273341951","DE" +"3273341952","3273342463","EU" +"3273342464","3273342975","DE" +"3273342976","3273343999","GB" +"3273344000","3273344767","DE" +"3273344768","3273345023","EU" +"3273345024","3273345279","DE" +"3273345280","3273346815","EU" +"3273346816","3273347071","DE" +"3273347072","3273347839","EU" +"3273347840","3273348351","DE" +"3273348352","3273349119","EU" +"3273349120","3273349631","DE" +"3273349632","3273350271","EU" +"3273350272","3273350287","DE" +"3273350288","3273350335","EU" +"3273350336","3273350351","DE" +"3273350352","3273351423","EU" +"3273351424","3273351455","DE" +"3273351456","3273351503","EU" +"3273351504","3273351519","DE" +"3273351520","3273351871","EU" +"3273351872","3273351903","DE" +"3273351904","3273351935","EU" +"3273351936","3273352191","DE" +"3273352192","3273352927","EU" +"3273352928","3273352959","DE" +"3273352960","3273352991","EU" +"3273352992","3273353023","DE" +"3273353024","3273355519","EU" +"3273355520","3273356287","DE" +"3273356288","3273359887","EU" +"3273359888","3273359903","DE" +"3273359904","3273360015","EU" +"3273360016","3273360079","DE" +"3273360080","3273361471","EU" +"3273361472","3273361535","DE" +"3273361536","3273361631","EU" +"3273361632","3273361663","DE" +"3273361664","3273361791","EU" +"3273361792","3273361823","DE" +"3273361824","3273361855","EU" +"3273361856","3273361919","DE" +"3273361920","3273362047","EU" +"3273362048","3273362175","DE" +"3273362176","3273362239","EU" +"3273362240","3273362255","DE" +"3273362256","3273363207","EU" +"3273363208","3273363211","DE" +"3273363212","3273363327","EU" +"3273363328","3273363391","DE" +"3273363392","3273364607","EU" +"3273364608","3273364735","DE" +"3273364736","3273364991","EU" +"3273364992","3273365247","DE" +"3273365248","3273365503","EU" +"3273365504","3273365519","NL" +"3273365520","3273365543","GB" +"3273365544","3273365759","NL" +"3273365760","3273365767","GB" +"3273365768","3273365887","EU" +"3273365888","3273366015","FR" +"3273366016","3273366527","DE" +"3273366528","3273367295","EU" +"3273367296","3273367423","DE" +"3273367424","3273367551","EU" +"3273367552","3273367567","DE" +"3273367568","3273368063","EU" +"3273368064","3273368575","DE" +"3273368576","3273369343","EU" +"3273369344","3273369855","DE" +"3273369856","3273370623","EU" +"3273370624","3273371135","DE" +"3273371136","3273371711","EU" +"3273371712","3273371743","DE" +"3273371744","3273371759","EU" +"3273371760","3273371775","DE" +"3273371776","3273371807","EU" +"3273371808","3273371823","DE" +"3273371824","3273371871","EU" +"3273371872","3273371875","DE" +"3273371876","3273371999","EU" +"3273372000","3273372055","DE" +"3273372056","3273372671","EU" +"3273372672","3273372927","GB" +"3273372928","3273373183","NL" +"3273373184","3273373455","GB" +"3273373456","3273373567","DE" +"3273373568","3273373695","GB" +"3273373696","3273375231","EU" +"3273375232","3273375551","DE" +"3273375552","3273375743","EU" +"3273375744","3273375871","DE" +"3273375872","3273375999","EU" +"3273376000","3273376255","DE" +"3273376256","3273376535","EU" +"3273376536","3273376543","DE" +"3273376544","3273377791","EU" +"3273377792","3273378095","DE" +"3273378096","3273378559","EU" +"3273378560","3273378815","DE" +"3273378816","3273381887","EU" +"3273381888","3273382143","DE" +"3273382144","3273382399","GB" +"3273382400","3273382463","DE" +"3273382464","3273382479","EU" +"3273382480","3273382591","DE" +"3273382592","3273382639","EU" +"3273382640","3273382687","DE" +"3273382688","3273384191","EU" +"3273384192","3273384703","DE" +"3273384704","3273384959","EU" +"3273384960","3273385215","DE" +"3273385216","3273385279","EU" +"3273385280","3273385343","DE" +"3273385344","3273385471","EU" +"3273385472","3273385727","DE" +"3273385728","3273385759","EU" +"3273385760","3273385791","DE" +"3273385792","3273385855","EU" +"3273385856","3273385919","DE" +"3273385920","3273387055","EU" +"3273387056","3273387071","DE" +"3273387072","3273387215","EU" +"3273387216","3273387231","DE" +"3273387232","3273387263","EU" +"3273387264","3273387519","DE" +"3273387520","3273387551","EU" +"3273387552","3273387583","DE" +"3273387584","3273388159","EU" +"3273388160","3273388223","DE" +"3273388224","3273388543","EU" +"3273388544","3273388807","DE" +"3273388808","3273388815","EU" +"3273388816","3273388863","DE" +"3273388864","3273388871","EU" +"3273388872","3273388879","DE" +"3273388880","3273388903","EU" +"3273388904","3273388911","DE" +"3273388912","3273388927","GB" +"3273388928","3273389055","DE" +"3273389056","3273390079","EU" +"3273390080","3273390207","DE" +"3273390208","3273390335","EU" +"3273390336","3273390463","DE" +"3273390464","3273391103","EU" +"3273391104","3273391359","DE" +"3273391360","3273391871","EU" +"3273391872","3273392127","DE" +"3273392128","3273392639","PL" +"3273392640","3273393663","RO" +"3273393664","3273394175","BG" +"3273394176","3273394687","RO" +"3273394688","3273395199","RU" +"3273395200","3273395711","DE" +"3273395712","3273396223","RU" +"3273396224","3273396735","PL" +"3273396736","3273397247","RO" +"3273397248","3273397759","RU" +"3273397760","3273398271","NL" +"3273398272","3273398783","RO" +"3273398784","3273399295","LV" +"3273399296","3273399807","SE" +"3273399808","3273400319","UA" +"3273400320","3273408511","RU" +"3273408512","3273433087","SK" +"3273433088","3273433599","LU" +"3273433600","3273434111","RO" +"3273434112","3273434623","BE" +"3273434624","3273435135","IL" +"3273435136","3273435647","GB" +"3273435648","3273436159","PL" +"3273436160","3273436671","NO" +"3273436672","3273437183","DE" +"3273437184","3273437695","RO" +"3273437696","3273438207","PL" +"3273438208","3273438719","IL" +"3273438720","3273439231","RU" +"3273439232","3273439743","RO" +"3273439744","3273440255","DE" +"3273440256","3273440767","RO" +"3273440768","3273441279","AT" +"3273441280","3273443327","GB" +"3273443328","3273444095","FR" +"3273444096","3273449471","GB" +"3273449472","3273457663","CH" +"3273457664","3273523199","HR" +"3273523200","3273588735","DE" +"3273588736","3273687039","IT" +"3273687040","3273719807","DE" +"3273719808","3273720831","GB" +"3273720832","3273720847","IE" +"3273720848","3273727071","GB" +"3273727072","3273727079","DK" +"3273727080","3273727087","FR" +"3273727088","3273727095","ES" +"3273727096","3273727103","DE" +"3273727104","3273727119","GB" +"3273727120","3273727127","PT" +"3273727128","3273727135","FI" +"3273727136","3273727143","NO" +"3273727144","3273727151","CZ" +"3273727152","3273727999","GB" +"3273728000","3273728255","NL" +"3273728256","3273728511","GB" +"3273728512","3273732095","NL" +"3273732096","3273736191","GB" +"3273736192","3273743359","FR" +"3273743360","3273743615","JO" +"3273743616","3273744383","FR" +"3273744384","3273746943","GB" +"3273746944","3273747199","EU" +"3273747200","3273752575","GB" +"3273752576","3273752831","NL" +"3273752832","3273753087","EU" +"3273753088","3273753343","NL" +"3273753344","3273753599","EU" +"3273753600","3273755647","NL" +"3273755648","3273755903","EU" +"3273755904","3273760767","NL" +"3273760768","3273762303","DE" +"3273762304","3273762559","EU" +"3273762560","3273768959","DE" +"3273768960","3273785343","TR" +"3273785344","3273801727","RU" +"3273801728","3273802239","DE" +"3273802240","3273802751","RO" +"3273802752","3273803263","SA" +"3273803264","3273803775","ES" +"3273803776","3273804287","CH" +"3273804288","3273804799","UA" +"3273804800","3273805311","RO" +"3273805312","3273805823","GI" +"3273805824","3273806335","PL" +"3273806336","3273806847","DE" +"3273806848","3273807359","SE" +"3273807360","3273807871","LU" +"3273807872","3273808383","CH" +"3273808384","3273808895","UA" +"3273808896","3273809407","GB" +"3273809408","3273809919","UA" +"3273809920","3273818111","BG" +"3273818112","3273826303","AT" +"3273826304","3273831231","DE" +"3273831232","3273831247","PL" +"3273831248","3273831263","LV" +"3273831264","3273834495","DE" +"3273834496","3273835519","RU" +"3273835520","3273838591","UA" +"3273838592","3273839615","PL" +"3273839616","3273840639","LT" +"3273840640","3273841663","PL" +"3273841664","3273842687","AT" +"3273842688","3273850879","RU" +"3273850880","3273867263","DE" +"3273867264","3273867519","BE" +"3273867520","3273867775","UA" +"3273867776","3273868031","PT" +"3273868032","3273868287","GB" +"3273868288","3273869311","RU" +"3273869312","3273871359","DE" +"3273871360","3273871615","PL" +"3273871616","3273871871","LU" +"3273871872","3273872383","SE" +"3273872384","3273872639","BG" +"3273872640","3273872895","PS" +"3273872896","3273873151","SE" +"3273873152","3273873919","DE" +"3273873920","3273874431","GB" +"3273874432","3273875455","GR" +"3273875456","3273875711","PT" +"3273875712","3273875967","SE" +"3273875968","3273876223","DE" +"3273876224","3273876479","IT" +"3273876480","3273876991","SE" +"3273876992","3273877247","CH" +"3273877248","3273877503","DE" +"3273877504","3273877535","GB" +"3273877536","3273877567","AT" +"3273877568","3273877759","IT" +"3273877760","3273878015","GR" +"3273878016","3273878271","FR" +"3273878272","3273878527","LV" +"3273878528","3273879039","DE" +"3273879040","3273879551","BE" +"3273879552","3273880063","GB" +"3273880064","3273880575","NL" +"3273880576","3273881087","RU" +"3273881088","3273881343","RO" +"3273881344","3273881599","CH" +"3273881600","3273881855","GB" +"3273881856","3273882111","CH" +"3273882112","3273882367","SI" +"3273882368","3273883135","GB" +"3273883136","3273883391","GR" +"3273883392","3273883647","DE" +"3273883648","3273916415","NL" +"3273916416","3273932799","IT" +"3273932800","3273949183","DE" +"3273949184","3273981951","FR" +"3273981952","3274047487","DE" +"3274047488","3274049535","SE" +"3274049536","3274050559","DE" +"3274050560","3274051583","PL" +"3274051584","3274052351","UA" +"3274052352","3274052607","GB" +"3274052608","3274052863","DE" +"3274052864","3274053119","GB" +"3274053120","3274053375","KZ" +"3274053376","3274053631","RU" +"3274053632","3274054655","DE" +"3274054656","3274055167","GB" +"3274055168","3274055423","MT" +"3274055424","3274055679","PL" +"3274055680","3274063871","RU" +"3274063872","3274072063","GB" +"3274072064","3274080255","HU" +"3274080256","3274088447","DE" +"3274088448","3274096639","KG" +"3274096640","3274113023","NL" +"3274113024","3274145791","CZ" +"3274145792","3274150911","KW" +"3274150912","3274151167","US" +"3274151168","3274152447","KW" +"3274152448","3274152703","US" +"3274152704","3274162175","KW" +"3274162176","3274162687","GB" +"3274162688","3274163199","DE" +"3274163200","3274163711","UA" +"3274163712","3274164223","BG" +"3274164224","3274164735","AT" +"3274164736","3274165759","GB" +"3274165760","3274166271","RU" +"3274166272","3274166783","RO" +"3274166784","3274167295","UA" +"3274167296","3274167807","BG" +"3274167808","3274168319","UA" +"3274168320","3274168831","PL" +"3274168832","3274169343","DZ" +"3274169344","3274170367","DE" +"3274170368","3274170879","TR" +"3274170880","3274171391","DE" +"3274171392","3274171903","RU" +"3274171904","3274172415","DE" +"3274172416","3274172927","UA" +"3274172928","3274173439","DE" +"3274173440","3274173951","GR" +"3274173952","3274174207","GB" +"3274174208","3274174463","CZ" +"3274174464","3274175487","UA" +"3274175488","3274175999","BE" +"3274176000","3274176511","DE" +"3274176512","3274177023","UA" +"3274177024","3274177535","FR" +"3274177536","3274178047","UA" +"3274178048","3274178559","NL" +"3274178560","3274204063","GB" +"3274204064","3274204095","FR" +"3274204096","3274227199","GB" +"3274227200","3274227455","A2" +"3274227456","3274244095","GB" +"3274244096","3274309631","DK" +"3274309632","3274326015","FR" +"3274326016","3274334719","RU" +"3274334720","3274335231","PL" +"3274335232","3274335743","DE" +"3274335744","3274336255","NL" +"3274336256","3274336767","SE" +"3274336768","3274337279","AT" +"3274337280","3274337791","DE" +"3274337792","3274338303","SE" +"3274338304","3274338815","PL" +"3274338816","3274339327","DE" +"3274339328","3274339839","RO" +"3274339840","3274340351","RU" +"3274340352","3274340863","IE" +"3274340864","3274341375","RU" +"3274341376","3274341887","FR" +"3274341888","3274342399","UA" +"3274342400","3274342911","RO" +"3274342912","3274343423","UA" +"3274343424","3274343935","US" +"3274343936","3274344447","NL" +"3274344448","3274344959","UA" +"3274344960","3274345471","RO" +"3274345472","3274345983","PL" +"3274345984","3274346495","DE" +"3274346496","3274347007","FR" +"3274347008","3274347519","RU" +"3274347520","3274348031","FR" +"3274348032","3274348543","DK" +"3274348544","3274349055","PL" +"3274349056","3274358783","RU" +"3274358784","3274366975","SE" +"3274366976","3274368511","NL" +"3274368512","3274368767","AT" +"3274368768","3274369023","FR" +"3274369024","3274370047","DE" +"3274370048","3274371071","GB" +"3274371072","3274373375","NL" +"3274373376","3274373631","PL" +"3274373632","3274374143","FR" +"3274374144","3274375167","DE" +"3274375168","3274383359","EG" +"3274383360","3274384383","RU" +"3274384384","3274385407","SE" +"3274385408","3274386431","UA" +"3274386432","3274388479","GB" +"3274388480","3274389503","DE" +"3274389504","3274390527","CH" +"3274390528","3274391551","NO" +"3274391552","3274392063","FR" +"3274392064","3274392575","PL" +"3274392576","3274393087","RU" +"3274393088","3274393599","UA" +"3274393600","3274394111","PL" +"3274394112","3274394623","AM" +"3274394624","3274395135","CZ" +"3274395136","3274395647","DK" +"3274395648","3274396671","LV" +"3274396672","3274397183","PL" +"3274397184","3274397695","EE" +"3274397696","3274398207","DE" +"3274398208","3274399231","RU" +"3274399232","3274399743","SC" +"3274399744","3274407935","LU" +"3274407936","3274408191","RU" +"3274408192","3274408447","IT" +"3274408448","3274408703","NL" +"3274408704","3274408959","SI" +"3274408960","3274409215","GR" +"3274409216","3274409471","SI" +"3274409472","3274409727","CH" +"3274409728","3274409983","RU" +"3274409984","3274410239","LT" +"3274410240","3274410495","SA" +"3274410496","3274410751","NL" +"3274410752","3274411007","AT" +"3274411008","3274411263","CH" +"3274411264","3274411519","LI" +"3274411520","3274412031","PL" +"3274412032","3274412287","RU" +"3274412288","3274412543","NO" +"3274412544","3274412799","UA" +"3274412800","3274413055","RU" +"3274413056","3274413311","UA" +"3274413312","3274413567","AT" +"3274413568","3274413823","FR" +"3274413824","3274414079","SE" +"3274414080","3274414335","AT" +"3274414336","3274414591","CH" +"3274414592","3274414847","NL" +"3274414848","3274415103","IE" +"3274415104","3274415359","PL" +"3274415360","3274415615","GB" +"3274415616","3274415871","NL" +"3274415872","3274416127","SI" +"3274416128","3274424319","IT" +"3274424320","3274435711","SE" +"3274435712","3274435839","US" +"3274435840","3274440703","SE" +"3274440704","3274442751","EU" +"3274442752","3274443263","GB" +"3274443264","3274443519","EU" +"3274443520","3274443647","GB" +"3274443648","3274443711","EU" +"3274443712","3274443775","GB" +"3274443776","3274443807","EU" +"3274443808","3274444031","GB" +"3274444032","3274446335","EU" +"3274446336","3274447871","GB" +"3274447872","3274448383","EU" +"3274448384","3274448639","GB" +"3274448640","3274448895","EU" +"3274448896","3274449663","GB" +"3274449664","3274449919","EU" +"3274449920","3274450231","GB" +"3274450232","3274450247","EU" +"3274450248","3274450367","GB" +"3274450368","3274450375","EU" +"3274450376","3274450391","GB" +"3274450392","3274450407","EU" +"3274450408","3274450415","GB" +"3274450416","3274450431","EU" +"3274450432","3274450623","GB" +"3274450624","3274450655","EU" +"3274450656","3274450687","GB" +"3274450688","3274451199","EU" +"3274451200","3274452255","GB" +"3274452256","3274452263","EU" +"3274452264","3274452311","GB" +"3274452312","3274452319","EU" +"3274452320","3274452335","GB" +"3274452336","3274452343","EU" +"3274452344","3274452367","GB" +"3274452368","3274452383","EU" +"3274452384","3274452391","GB" +"3274452392","3274452399","EU" +"3274452400","3274452423","GB" +"3274452424","3274452431","EU" +"3274452432","3274452439","GB" +"3274452440","3274452447","EU" +"3274452448","3274452455","GB" +"3274452456","3274452463","EU" +"3274452464","3274452471","GB" +"3274452472","3274452495","EU" +"3274452496","3274452543","GB" +"3274452544","3274452559","EU" +"3274452560","3274452575","GB" +"3274452576","3274452655","EU" +"3274452656","3274452703","GB" +"3274452704","3274452735","EU" +"3274452736","3274452927","GB" +"3274452928","3274452991","EU" +"3274452992","3274453767","GB" +"3274453768","3274453783","EU" +"3274453784","3274453791","GB" +"3274453792","3274453799","EU" +"3274453800","3274453847","GB" +"3274453848","3274453863","EU" +"3274453864","3274453871","GB" +"3274453872","3274453887","EU" +"3274453888","3274453903","GB" +"3274453904","3274453919","EU" +"3274453920","3274453935","GB" +"3274453936","3274453943","EU" +"3274453944","3274453951","GB" +"3274453952","3274453959","EU" +"3274453960","3274453975","GB" +"3274453976","3274453983","EU" +"3274453984","3274453991","GB" +"3274453992","3274453999","EU" +"3274454000","3274454271","GB" +"3274454272","3274454655","EU" +"3274454656","3274455311","GB" +"3274455312","3274455327","EU" +"3274455328","3274455335","GB" +"3274455336","3274455343","EU" +"3274455344","3274455351","GB" +"3274455352","3274455359","EU" +"3274455360","3274455375","GB" +"3274455376","3274455383","EU" +"3274455384","3274455391","GB" +"3274455392","3274455399","EU" +"3274455400","3274455423","GB" +"3274455424","3274455431","EU" +"3274455432","3274455439","GB" +"3274455440","3274455447","EU" +"3274455448","3274455503","GB" +"3274455504","3274455519","EU" +"3274455520","3274455535","GB" +"3274455536","3274455743","EU" +"3274455744","3274455807","GB" +"3274455808","3274455871","EU" +"3274455872","3274455935","GB" +"3274455936","3274455967","EU" +"3274455968","3274456359","GB" +"3274456360","3274456367","EU" +"3274456368","3274456375","GB" +"3274456376","3274456383","EU" +"3274456384","3274456391","GB" +"3274456392","3274456399","EU" +"3274456400","3274456407","GB" +"3274456408","3274456415","EU" +"3274456416","3274456447","GB" +"3274456448","3274456455","EU" +"3274456456","3274456511","GB" +"3274456512","3274456527","EU" +"3274456528","3274456535","GB" +"3274456536","3274456543","EU" +"3274456544","3274456559","GB" +"3274456560","3274456567","EU" +"3274456568","3274460223","GB" +"3274460224","3274460415","EU" +"3274460416","3274462207","GB" +"3274462208","3274462463","EU" +"3274462464","3274465023","GB" +"3274465024","3274465151","EU" +"3274465152","3274466351","GB" +"3274466352","3274466367","EU" +"3274466368","3274466399","GB" +"3274466400","3274466415","EU" +"3274466416","3274466463","GB" +"3274466464","3274466559","EU" +"3274466560","3274466735","GB" +"3274466736","3274466743","EU" +"3274466744","3274466763","GB" +"3274466764","3274466767","EU" +"3274466768","3274466783","GB" +"3274466784","3274466815","EU" +"3274466816","3274467099","GB" +"3274467100","3274467103","EU" +"3274467104","3274467307","GB" +"3274467308","3274467327","EU" +"3274467328","3274470383","GB" +"3274470384","3274470399","EU" +"3274470400","3274470535","GB" +"3274470536","3274470655","EU" +"3274470656","3274471423","GB" +"3274471424","3274471535","EU" +"3274471536","3274471615","GB" +"3274471616","3274471679","EU" +"3274471680","3274471935","GB" +"3274471936","3274472959","EU" +"3274472960","3274483711","GB" +"3274483712","3274489599","EU" +"3274489600","3274489855","GB" +"3274489856","3274490175","EU" +"3274490176","3274490895","GB" +"3274490896","3274490911","EU" +"3274490912","3274491247","GB" +"3274491248","3274491255","EU" +"3274491256","3274491295","GB" +"3274491296","3274491303","EU" +"3274491304","3274491319","GB" +"3274491320","3274491327","EU" +"3274491328","3274491383","GB" +"3274491384","3274491391","EU" +"3274491392","3274504447","GB" +"3274504448","3274505727","EU" +"3274505728","3274505791","GB" +"3274505792","3274505792","EU" +"3274505793","3274505855","GB" +"3274505856","3274506239","EU" +"3274506240","3274571775","IT" +"3274571776","3274579967","GR" +"3274579968","3274580991","UA" +"3274580992","3274581503","PL" +"3274581504","3274581759","NL" +"3274581760","3274582015","RU" +"3274582016","3274583039","PL" +"3274583040","3274584063","DE" +"3274584064","3274585087","GB" +"3274585088","3274586111","RS" +"3274586112","3274587135","UA" +"3274587136","3274588159","GB" +"3274588160","3274596351","SK" +"3274596352","3274604543","RU" +"3274604544","3274612735","TR" +"3274612736","3274620927","RU" +"3274620928","3274629119","FR" +"3274629120","3274637175","LU" +"3274637176","3274637183","A2" +"3274637184","3274637311","LU" +"3274637312","3274670079","CZ" +"3274670080","3274686463","DK" +"3274686464","3274686719","RU" +"3274686720","3274686975","BG" +"3274686976","3274687231","RO" +"3274687232","3274687487","DE" +"3274687488","3274687743","RU" +"3274687744","3274687999","SI" +"3274688000","3274688255","GB" +"3274688256","3274688511","IT" +"3274688512","3274688767","PT" +"3274688768","3274689023","PL" +"3274689024","3274689279","UA" +"3274689280","3274689535","PL" +"3274689536","3274689791","RU" +"3274689792","3274690047","SE" +"3274690048","3274690303","ES" +"3274690304","3274690559","GB" +"3274690560","3274690815","GR" +"3274690816","3274691071","ES" +"3274691072","3274691327","DK" +"3274691328","3274691583","SI" +"3274691584","3274691839","UA" +"3274691840","3274692095","SI" +"3274692096","3274692351","RO" +"3274692352","3274692607","BE" +"3274692608","3274692863","DK" +"3274692864","3274693119","AT" +"3274693120","3274693375","LT" +"3274693376","3274693631","UA" +"3274693632","3274693887","KZ" +"3274693888","3274694143","IT" +"3274694144","3274694399","DK" +"3274694400","3274694655","GB" +"3274694656","3274694911","SI" +"3274694912","3274695167","GB" +"3274695168","3274695423","SI" +"3274695424","3274695679","PL" +"3274695680","3274695935","SI" +"3274695936","3274696191","DE" +"3274696192","3274696447","DK" +"3274696448","3274696703","CH" +"3274696704","3274696959","IT" +"3274696960","3274697215","GR" +"3274697216","3274697471","SA" +"3274697472","3274697727","CZ" +"3274697728","3274697983","ES" +"3274697984","3274698239","GB" +"3274698240","3274698495","SE" +"3274698496","3274698751","PL" +"3274698752","3274699007","GB" +"3274699008","3274699263","FR" +"3274699264","3274699519","RO" +"3274699520","3274699775","SI" +"3274699776","3274700031","GB" +"3274700032","3274700287","CH" +"3274700288","3274700543","PL" +"3274700544","3274700799","DK" +"3274700800","3274701055","UA" +"3274701056","3274701311","DE" +"3274701312","3274701567","TJ" +"3274701568","3274701823","IT" +"3274701824","3274702079","IL" +"3274702080","3274702335","UA" +"3274702336","3274702591","SE" +"3274702592","3274702847","KZ" +"3274702848","3274801151","CH" +"3274801152","3274802175","UA" +"3274802176","3274803199","FR" +"3274803200","3274804223","DE" +"3274804224","3274805247","FR" +"3274805248","3274806271","GB" +"3274806272","3274807295","UA" +"3274807296","3274809343","DE" +"3274809344","3274810367","SE" +"3274810368","3274811391","UA" +"3274811392","3274812415","RU" +"3274812416","3274813439","SE" +"3274813440","3274814463","ES" +"3274814464","3274815487","GB" +"3274815488","3274816511","RU" +"3274816512","3274817535","SK" +"3274817536","3274819583","RU" +"3274819584","3274821631","UA" +"3274821632","3274823679","KZ" +"3274823680","3274825727","TR" +"3274825728","3274827775","DE" +"3274827776","3274829823","RO" +"3274829824","3274831871","SE" +"3274831872","3274833919","RO" +"3274833920","3274842111","BY" +"3274842112","3274850303","DK" +"3274850304","3274866687","GB" +"3274866688","3274883071","DE" +"3274883072","3274891263","EE" +"3274891264","3274892287","CH" +"3274899456","3274902399","DE" +"3274902400","3274902423","AT" +"3274902424","3274902527","EU" +"3274902528","3274909695","DE" +"3274909696","3274910207","EU" +"3274910208","3274910975","DE" +"3274910976","3274911231","EU" +"3274911232","3274911743","DE" +"3274911744","3274911999","FR" +"3274912000","3274912031","GB" +"3274912032","3274912063","DE" +"3274912064","3274912191","FR" +"3274912192","3274912287","DE" +"3274912288","3274912295","LU" +"3274912296","3274912303","GB" +"3274912304","3274912447","FR" +"3274912448","3274912511","NL" +"3274912512","3274912767","FR" +"3274912768","3274912799","DE" +"3274912800","3274912831","IT" +"3274912832","3274912895","FR" +"3274912896","3274913023","RO" +"3274913024","3274913279","FR" +"3274913280","3274914815","DE" +"3274914816","3274915071","EU" +"3274915072","3274915839","DE" +"3274915840","3274916735","NL" +"3274916736","3274916863","DE" +"3274916864","3274917215","NL" +"3274917216","3274917311","GB" +"3274917312","3274917327","ZA" +"3274917328","3274917335","CH" +"3274917336","3274917343","GB" +"3274917344","3274917375","SE" +"3274917376","3274917887","NL" +"3274917888","3274918911","BE" +"3274918912","3274919359","CH" +"3274919360","3274919391","EU" +"3274919392","3274919423","CH" +"3274919424","3274919935","GB" +"3274919936","3274921983","BE" +"3274921984","3274922847","ZA" +"3274922848","3274922863","BE" +"3274922864","3274922871","GB" +"3274922872","3274922879","IT" +"3274922880","3274922943","ZA" +"3274922944","3274923007","NL" +"3274923008","3274923263","EU" +"3274923264","3274924031","NL" +"3274924032","3274928127","FR" +"3274928128","3274928511","ES" +"3274928512","3274928575","RU" +"3274928576","3274928639","GB" +"3274928640","3274929151","ES" +"3274929152","3274929407","EU" +"3274929408","3274929663","FR" +"3274929664","3274930175","BE" +"3274930176","3274932223","IT" +"3274932224","3274932991","GB" +"3274932992","3274933151","DE" +"3274933152","3274933183","CH" +"3274933184","3274933215","ZA" +"3274933216","3274933247","BE" +"3274933248","3274936063","GB" +"3274936064","3274936159","SE" +"3274936160","3274936175","GB" +"3274936176","3274936191","EU" +"3274936192","3274936863","GB" +"3274936864","3274936871","BE" +"3274936872","3274936879","CH" +"3274936880","3274936895","SE" +"3274936896","3274938367","GB" +"3274938368","3274938495","EU" +"3274938496","3274938535","GB" +"3274938536","3274938543","FR" +"3274938544","3274938559","GB" +"3274938560","3274938623","EU" +"3274938624","3274938879","GB" +"3274938880","3274939135","DE" +"3274939136","3274939391","IT" +"3274939392","3274940415","ZA" +"3274940416","3274941055","DE" +"3274941056","3274941087","NL" +"3274941088","3274941095","DE" +"3274941096","3274941103","IT" +"3274941104","3274942463","DE" +"3274942464","3274944511","FR" +"3274944512","3274948607","NL" +"3274948608","3274952447","DK" +"3274952448","3274952479","SE" +"3274952480","3274952511","FR" +"3274952512","3274952527","GB" +"3274952528","3274952543","BE" +"3274952544","3274952575","GB" +"3274952576","3274952703","IT" +"3274952704","3274954239","AT" +"3274954240","3274954399","NL" +"3274954400","3274954415","BE" +"3274954416","3274954431","GB" +"3274954432","3274954495","PT" +"3274954496","3274954623","AT" +"3274954624","3274954751","NL" +"3274954752","3274955007","SE" +"3274955008","3274955263","EU" +"3274955264","3274956287","SE" +"3274956288","3274956543","GB" +"3274956544","3274956615","BE" +"3274956616","3274956623","AT" +"3274956624","3274956639","DE" +"3274956640","3274956655","GB" +"3274956656","3274956671","FR" +"3274956672","3274956735","DE" +"3274956736","3274956767","DK" +"3274956768","3274956799","SE" +"3274956800","3274957055","CH" +"3274957056","3274957567","AT" +"3274957568","3274957823","CH" +"3274957824","3274957831","GR" +"3274957832","3274957951","EU" +"3274957952","3274957959","BE" +"3274957960","3274957967","EU" +"3274957968","3274957983","FR" +"3274957984","3274957999","BE" +"3274958000","3274958007","GB" +"3274958008","3274958015","BE" +"3274958016","3274958079","EU" +"3274958080","3274958279","IE" +"3274958280","3274958287","EU" +"3274958288","3274958335","IE" +"3274958336","3274959231","AT" +"3274959232","3274959247","IT" +"3274959248","3274959255","GB" +"3274959256","3274959263","ZA" +"3274959264","3274959271","EU" +"3274959272","3274959279","GB" +"3274959280","3274959287","DE" +"3274959288","3274959295","GB" +"3274959296","3274959327","ES" +"3274959328","3274959615","DE" +"3274959616","3274960383","EU" +"3274960384","3274960447","BE" +"3274960448","3274960511","ES" +"3274960512","3274960575","GB" +"3274960576","3274960639","IT" +"3274960640","3274961407","AT" +"3274961408","3274961503","CH" +"3274961504","3274961535","DK" +"3274961536","3274961559","CH" +"3274961560","3274961567","EU" +"3274961568","3274961663","CH" +"3274961664","3274961727","BY" +"3274961728","3274961919","EU" +"3274961920","3274962111","AT" +"3274962112","3274962175","GB" +"3274962176","3274962431","ZA" +"3274962432","3274962687","BE" +"3274962688","3274962879","GR" +"3274962880","3274963167","GB" +"3274963168","3274963183","IE" +"3274963184","3274963191","GB" +"3274963192","3274963199","NL" +"3274963200","3274963455","DE" +"3274963456","3274963711","CH" +"3274963712","3274963743","DE" +"3274963744","3274963775","FR" +"3274963776","3274963783","GB" +"3274963784","3274963791","BE" +"3274963792","3274963807","NL" +"3274963808","3274963839","IT" +"3274963840","3274963967","DE" +"3274963968","3274964223","FR" +"3274964224","3274964735","BE" +"3274964736","3274964863","GB" +"3274964864","3274964879","HU" +"3274964880","3274964895","FR" +"3274964896","3274964927","NL" +"3274964928","3274964991","GB" +"3274964992","3275030527","DE" +"3275030528","3275096063","ES" +"3275096064","3275104767","RU" +"3275104768","3275105279","DE" +"3275105280","3275105791","GB" +"3275105792","3275106303","NL" +"3275106304","3275106815","RU" +"3275106816","3275107327","UA" +"3275107328","3275107839","BG" +"3275107840","3275108351","PL" +"3275108352","3275108863","FR" +"3275108864","3275109375","PL" +"3275109376","3275109887","UA" +"3275109888","3275110399","RO" +"3275110400","3275110911","NL" +"3275110912","3275111423","GB" +"3275111424","3275111935","IT" +"3275111936","3275112447","FR" +"3275112448","3275117581","DK" +"3275117582","3275117582","EU" +"3275117583","3275120639","DK" +"3275120640","3275136639","SE" +"3275136640","3275136767","DK" +"3275136768","3275137023","SE" +"3275137024","3275137535","DE" +"3275137536","3275138047","UA" +"3275138048","3275138559","DE" +"3275138560","3275139071","UA" +"3275139072","3275139583","PT" +"3275139584","3275140095","MD" +"3275140096","3275140607","AT" +"3275140608","3275141119","NL" +"3275141120","3275141631","RU" +"3275141632","3275142143","GE" +"3275142144","3275142655","KG" +"3275142656","3275143167","SE" +"3275143168","3275144703","PL" +"3275144704","3275145215","HR" +"3275145216","3275153407","RU" +"3275153408","3275161599","GB" +"3275161600","3275227135","ES" +"3275227136","3275246847","HU" +"3275246848","3275247103","EU" +"3275247104","3275262975","HU" +"3275262976","3275263231","EU" +"3275263232","3275292671","HU" +"3275292672","3275358207","ES" +"3275358208","3275371775","RU" +"3275371776","3275372031","TJ" +"3275372032","3275374591","RU" +"3275374592","3275382783","GB" +"3275382784","3275382887","SE" +"3275382888","3275382891","NO" +"3275382892","3275390975","SE" +"3275390976","3275399167","GB" +"3275399168","3275407359","AT" +"3275407360","3275415551","GB" +"3275415552","3275423743","UA" +"3275423744","3275423751","GB" +"3275423752","3275423775","EU" +"3275423776","3275423807","GB" +"3275423808","3275423871","EU" +"3275423872","3275425327","GB" +"3275425328","3275425791","EU" +"3275425792","3275428351","GB" +"3275428352","3275428367","EU" +"3275428368","3275428407","GB" +"3275428408","3275428415","EU" +"3275428416","3275428447","GB" +"3275428448","3275429887","EU" +"3275429888","3275430143","GB" +"3275430144","3275430271","EU" +"3275430272","3275430399","GB" +"3275430400","3275430591","EU" +"3275430592","3275430631","GB" +"3275430632","3275430655","EU" +"3275430656","3275430911","GB" +"3275430912","3275431935","EU" +"3275431936","3275432831","GB" +"3275432832","3275433983","EU" +"3275433984","3275439999","GB" +"3275440000","3275440127","EU" +"3275440128","3275440639","GB" +"3275440640","3275442175","EU" +"3275442176","3275442719","GB" +"3275442720","3275444223","EU" +"3275444224","3275444735","GB" +"3275444736","3275446271","EU" +"3275446272","3275447151","GB" +"3275447152","3275448319","EU" +"3275448320","3275449519","GB" +"3275449520","3275449527","FR" +"3275449528","3275449919","GB" +"3275449920","3275449927","EU" +"3275449928","3275450879","GB" +"3275450880","3275451231","EU" +"3275451232","3275451263","GB" +"3275451264","3275452415","EU" +"3275452416","3275452927","GB" +"3275452928","3275452943","EU" +"3275452944","3275454127","GB" +"3275454128","3275454143","EU" +"3275454144","3275457023","GB" +"3275457024","3275457791","FK" +"3275457792","3275458559","GB" +"3275458560","3275460095","IE" +"3275460096","3275460223","GB" +"3275460224","3275460607","EU" +"3275460608","3275460863","HK" +"3275460864","3275463523","GB" +"3275463524","3275463527","EU" +"3275463528","3275464031","GB" +"3275464032","3275464047","IE" +"3275464048","3275468655","GB" +"3275468656","3275468671","IE" +"3275468672","3275468735","GB" +"3275468736","3275468751","IE" +"3275468752","3275468767","GB" +"3275468768","3275468799","IE" +"3275468800","3275469071","GB" +"3275469072","3275469087","IE" +"3275469088","3275474927","GB" +"3275474928","3275474943","EU" +"3275474944","3275475043","GB" +"3275475044","3275475047","EU" +"3275475048","3275475399","GB" +"3275475400","3275476991","EU" +"3275476992","3275477487","GB" +"3275477488","3275477503","EU" +"3275477504","3275477567","GB" +"3275477568","3275478015","EU" +"3275478016","3275481087","GB" +"3275481088","3275489279","EU" +"3275489280","3275497471","GB" +"3275497472","3275505663","DE" +"3275505664","3275506175","PL" +"3275506176","3275506687","UA" +"3275506688","3275507199","SE" +"3275507200","3275507711","UA" +"3275507712","3275509759","RO" +"3275509760","3275509855","IT" +"3275509856","3275509887","PL" +"3275509888","3275509919","AM" +"3275509920","3275509951","PL" +"3275509952","3275509983","GB" +"3275509984","3275510015","PT" +"3275510016","3275510079","SE" +"3275510080","3275510143","ES" +"3275510144","3275510207","FI" +"3275510336","3275510399","IE" +"3275510400","3275510463","NL" +"3275510464","3275510527","GB" +"3275510528","3275510559","PL" +"3275510560","3275510591","DE" +"3275510624","3275510655","EE" +"3275510656","3275510687","FR" +"3275510720","3275510751","GB" +"3275510752","3275510783","NL" +"3275510912","3275511167","GB" +"3275511168","3275511295","LV" +"3275511296","3275511551","GB" +"3275511552","3275511679","NL" +"3275511808","3275511935","CH" +"3275511936","3275512063","FR" +"3275512064","3275512191","CZ" +"3275512192","3275512319","IT" +"3275512320","3275512447","FI" +"3275512448","3275512575","DK" +"3275512576","3275512703","BE" +"3275512704","3275512831","PL" +"3275512832","3275512895","SE" +"3275512896","3275512959","AT" +"3275512960","3275513023","PL" +"3275513024","3275513087","UA" +"3275513152","3275513215","ES" +"3275513216","3275513279","CH" +"3275513280","3275513343","DK" +"3275513344","3275513471","PL" +"3275513472","3275513599","FR" +"3275513728","3275513855","GB" +"3275513856","3275522047","DE" +"3275522048","3275530239","IT" +"3275530240","3275530751","DK" +"3275530752","3275531263","AT" +"3275531264","3275531775","GB" +"3275531776","3275532287","IE" +"3275532288","3275532799","UA" +"3275532800","3275533823","GB" +"3275533824","3275534335","UA" +"3275534336","3275534847","IL" +"3275534848","3275535359","RO" +"3275535360","3275535871","DE" +"3275535872","3275536383","SE" +"3275536384","3275536895","UA" +"3275536896","3275537407","DE" +"3275537408","3275537919","FR" +"3275537920","3275538431","IT" +"3275538432","3275539455","CH" +"3275539456","3275540479","GB" +"3275540480","3275542527","UA" +"3275542528","3275543551","DE" +"3275543552","3275544575","NL" +"3275544576","3275545599","PL" +"3275545600","3275546623","RU" +"3275546624","3275548671","UA" +"3275548672","3275549695","IL" +"3275549696","3275550719","SY" +"3275550720","3275551743","PL" +"3275551744","3275552767","RU" +"3275552768","3275553791","LV" +"3275553792","3275554815","FI" +"3275554816","3275555391","EU" +"3275555392","3275555455","ES" +"3275555456","3275555591","EU" +"3275555592","3275555647","ES" +"3275555648","3275555743","EU" +"3275555744","3275555759","ES" +"3275555760","3275555767","EU" +"3275555768","3275555776","ES" +"3275555777","3275560959","EU" +"3275560960","3275561215","ES" +"3275561216","3275561471","EU" +"3275561472","3275561727","ES" +"3275561728","3275562495","EU" +"3275562496","3275562751","ES" +"3275562752","3275563007","EU" +"3275563008","3275563519","CH" +"3275563520","3275563583","EU" +"3275563584","3275563647","CH" +"3275563648","3275563775","DE" +"3275563776","3275564031","CH" +"3275564032","3275564415","EU" +"3275564416","3275564495","CH" +"3275564496","3275564799","EU" +"3275564800","3275565055","CH" +"3275565056","3275565311","EU" +"3275565312","3275565567","CH" +"3275565568","3275565823","EU" +"3275565824","3275566079","CH" +"3275566080","3275566847","EU" +"3275566848","3275567359","CH" +"3275567360","3275567615","EU" +"3275567616","3275568127","CH" +"3275568128","3275568383","EU" +"3275568384","3275569407","CH" +"3275569408","3275569919","EU" +"3275569920","3275570687","CH" +"3275570688","3275571199","EU" +"3275571200","3275571455","PT" +"3275571456","3275571967","EU" +"3275571968","3275572095","PT" +"3275572096","3275572767","EU" +"3275572768","3275572863","PT" +"3275572864","3275572991","EU" +"3275572992","3275573055","PT" +"3275573056","3275573119","EU" +"3275573120","3275574015","PT" +"3275574016","3275574031","EU" +"3275574032","3275574047","PT" +"3275574048","3275574143","EU" +"3275574144","3275574147","PT" +"3275574148","3275574151","EU" +"3275574152","3275574159","PT" +"3275574160","3275574175","EU" +"3275574176","3275574191","PT" +"3275574192","3275574783","EU" +"3275574784","3275575103","PT" +"3275575104","3275575167","EU" +"3275575168","3275575231","PT" +"3275575232","3275575423","EU" +"3275575424","3275575727","PT" +"3275575728","3275575871","EU" +"3275575872","3275575935","PT" +"3275575936","3275576063","EU" +"3275576064","3275576319","PT" +"3275576320","3275577343","EU" +"3275577344","3275577407","PT" +"3275577408","3275577471","EU" +"3275577472","3275577495","PT" +"3275577496","3275577519","EU" +"3275577520","3275577567","PT" +"3275577568","3275577599","EU" +"3275577600","3275577727","PT" +"3275577728","3275577791","EU" +"3275577792","3275577807","PT" +"3275577808","3275577839","EU" +"3275577840","3275578623","PT" +"3275578624","3275579135","EU" +"3275579136","3275579391","PT" +"3275579392","3275579519","FR" +"3275579520","3275579583","NL" +"3275579584","3275579599","EU" +"3275579600","3275579615","NL" +"3275579616","3275579647","EU" +"3275579648","3275579703","NL" +"3275579704","3275579903","EU" +"3275579904","3275580159","NL" +"3275580160","3275580927","EU" +"3275580928","3275580948","NL" +"3275580949","3275580949","EU" +"3275580950","3275581311","NL" +"3275581312","3275581535","EU" +"3275581536","3275581671","NL" +"3275581672","3275581679","EU" +"3275581680","3275581695","NL" +"3275581696","3275582223","EU" +"3275582224","3275582247","NL" +"3275582248","3275582279","EU" +"3275582280","3275582287","NL" +"3275582288","3275582655","EU" +"3275582656","3275582719","NL" +"3275582720","3275582975","EU" +"3275582976","3275583231","NL" +"3275583232","3275584255","EU" +"3275584256","3275584287","NL" +"3275584288","3275584511","EU" +"3275584512","3275584527","NL" +"3275584528","3275585023","EU" +"3275585024","3275585279","NL" +"3275585280","3275587583","EU" +"3275587584","3275587855","BE" +"3275587856","3275588095","EU" +"3275588096","3275588287","BE" +"3275588288","3275588319","NL" +"3275588320","3275588351","EU" +"3275588352","3275588607","BE" +"3275588608","3275588639","EU" +"3275588640","3275588655","BE" +"3275588656","3275588711","EU" +"3275588712","3275588719","CH" +"3275588720","3275588735","EU" +"3275588736","3275588799","BE" +"3275588800","3275588847","EU" +"3275588848","3275588855","BE" +"3275588856","3275588863","EU" +"3275588864","3275589119","IT" +"3275589120","3275589271","EU" +"3275589272","3275589279","BE" +"3275589280","3275589375","EU" +"3275589376","3275589471","BE" +"3275589472","3275589887","EU" +"3275589888","3275590655","BE" +"3275590656","3275590911","EU" +"3275590912","3275591167","BE" +"3275591168","3275591423","EU" +"3275591424","3275591679","BE" +"3275591680","3275592063","RO" +"3275592064","3275592447","EU" +"3275592448","3275592959","RO" +"3275592960","3275593343","EU" +"3275593344","3275593855","RO" +"3275593856","3275593983","EU" +"3275593984","3275595007","RO" +"3275595008","3275595039","BE" +"3275595040","3275595263","EU" +"3275595264","3275595519","US" +"3275595520","3275596167","EU" +"3275596168","3275596175","AT" +"3275596176","3275599103","EU" +"3275599104","3275599231","AT" +"3275599232","3275599871","EU" +"3275599872","3275600127","AT" +"3275600128","3275603967","EU" +"3275603968","3275604735","IT" +"3275604736","3275604767","IL" +"3275604768","3275604991","EU" +"3275604992","3275605759","IT" +"3275605760","3275606015","EU" +"3275606016","3275606271","IT" +"3275606272","3275606527","EU" +"3275606528","3275606783","IT" +"3275606784","3275608831","EU" +"3275608832","3275610063","IT" +"3275610064","3275610111","EU" +"3275610112","3275610623","IT" +"3275610624","3275612159","EU" +"3275612160","3275612287","LU" +"3275612288","3275612927","EU" +"3275612928","3275613951","LU" +"3275613952","3275620351","EU" +"3275620352","3275622399","RU" +"3275622400","3275623423","GB" +"3275623424","3275623935","PL" +"3275623936","3275624447","UA" +"3275624448","3275624959","SK" +"3275624960","3275625471","IL" +"3275625472","3275625983","DE" +"3275625984","3275626495","BG" +"3275626496","3275627007","UA" +"3275627008","3275627519","AT" +"3275627520","3275628031","GB" +"3275628032","3275628543","IL" +"3275628544","3275629311","RU" +"3275629312","3275629567","TR" +"3275629568","3275630079","UA" +"3275630080","3275630591","RU" +"3275630592","3275631103","PL" +"3275631104","3275631615","FR" +"3275631616","3275632127","DE" +"3275632128","3275633151","RU" +"3275633152","3275633663","FR" +"3275633664","3275634687","RU" +"3275634688","3275635199","RO" +"3275635200","3275636735","RU" +"3275636736","3275637247","PL" +"3275637248","3275637759","SE" +"3275637760","3275638271","BE" +"3275638272","3275638783","RU" +"3275638784","3275639807","FR" +"3275639808","3275640319","SE" +"3275640320","3275640831","RU" +"3275640832","3275641343","DE" +"3275641344","3275641855","NL" +"3275641856","3275642367","AT" +"3275642368","3275642879","RU" +"3275642880","3275643391","RO" +"3275643392","3275643903","BE" +"3275643904","3275644415","RU" +"3275644416","3275644927","RO" +"3275644928","3275653119","DE" +"3275653120","3275661311","LV" +"3275661312","3275669503","IT" +"3275669504","3275677695","GB" +"3275677696","3275685887","IT" +"3275685888","3275751423","DE" +"3275751424","3275751679","AT" +"3275751680","3275751935","EU" +"3275751936","3275759615","AT" +"3275759616","3275775999","NL" +"3275776000","3275784191","DE" +"3275784192","3275784703","RO" +"3275784704","3275785215","PL" +"3275785216","3275785727","RO" +"3275785728","3275786239","CH" +"3275786240","3275786751","UA" +"3275786752","3275787263","CH" +"3275787264","3275787775","RU" +"3275787776","3275788287","UA" +"3275788288","3275788799","SE" +"3275788800","3275789311","AT" +"3275789312","3275789823","UA" +"3275789824","3275790335","PL" +"3275790336","3275790847","MD" +"3275790848","3275791359","UA" +"3275791360","3275791871","RU" +"3275791872","3275792383","PL" +"3275792384","3275792895","BG" +"3275792896","3275793407","UA" +"3275793408","3275793919","FR" +"3275793920","3275794431","UA" +"3275794432","3275794943","EU" +"3275794944","3275795455","RS" +"3275795456","3275795967","GR" +"3275795968","3275796479","PL" +"3275796480","3275796991","DE" +"3275796992","3275797503","RO" +"3275797504","3275798015","DE" +"3275798016","3275799039","UA" +"3275799040","3275799551","ES" +"3275799552","3275800063","IT" +"3275800064","3275800575","UA" +"3275800576","3275808767","RU" +"3275808768","3275816959","UA" +"3275816960","3275818207","CH" +"3275818208","3275818215","DE" +"3275818216","3275839231","CH" +"3275839232","3275839487","EU" +"3275839488","3275874559","CH" +"3275874560","3275874815","EU" +"3275874816","3275882495","CH" +"3275882496","3275884543","DE" +"3275884544","3275886591","IT" +"3275886592","3275888639","PL" +"3275888640","3275890687","GB" +"3275890688","3275898879","SE" +"3275898880","3275899135","LV" +"3275899136","3275899647","UA" +"3275899648","3275900159","PL" +"3275900160","3275900415","SI" +"3275900416","3275900671","DE" +"3275900672","3275901183","RU" +"3275901184","3275901439","PL" +"3275901440","3275901695","DE" +"3275901696","3275901951","IE" +"3275901952","3275902207","DE" +"3275902208","3275902719","RU" +"3275902720","3275902975","UA" +"3275902976","3275903231","FR" +"3275903232","3275903487","GB" +"3275903488","3275903743","FR" +"3275903744","3275903999","DE" +"3275904000","3275904255","RU" +"3275904256","3275904511","CH" +"3275904512","3275904767","PL" +"3275904768","3275905023","RU" +"3275905024","3275905279","PL" +"3275905280","3275905535","RU" +"3275905536","3275905791","NL" +"3275905792","3275906303","AT" +"3275906304","3275906559","UA" +"3275906560","3275907071","SE" +"3275907072","3275907327","RU" +"3275907328","3275907583","CH" +"3275907584","3275907839","PL" +"3275907840","3275908095","DE" +"3275908096","3275908351","SA" +"3275908352","3275908607","SE" +"3275908608","3275908863","US" +"3275908864","3275909119","PL" +"3275909120","3275909375","RU" +"3275909376","3275909631","UA" +"3275909632","3275909887","EE" +"3275909888","3275910143","SI" +"3275910144","3275910399","RU" +"3275910400","3275910655","DK" +"3275910656","3275910911","UA" +"3275910912","3275911167","DE" +"3275911168","3275911423","FR" +"3275911424","3275911679","RO" +"3275911680","3275911935","UA" +"3275911936","3275912191","BE" +"3275912192","3275912447","PL" +"3275912448","3275912703","RU" +"3275912704","3275912959","IL" +"3275912960","3275913215","FR" +"3275913216","3275913471","UA" +"3275913472","3275913983","DE" +"3275913984","3275914239","CH" +"3275914240","3275914495","RO" +"3275914496","3275914751","BG" +"3275914752","3275915007","RU" +"3275915008","3275915263","PT" +"3275915264","3275915775","SA" +"3275915776","3275916287","SE" +"3275916288","3275916799","US" +"3275916800","3275917311","NL" +"3275917312","3275918847","UA" +"3275918848","3275919359","RO" +"3275919360","3275919871","PL" +"3275919872","3275920383","UA" +"3275920384","3275920895","GB" +"3275920896","3275921407","ES" +"3275921408","3275921919","UA" +"3275921920","3275922431","DE" +"3275922432","3275922943","UA" +"3275922944","3275923455","GR" +"3275923456","3275931647","ME" +"3275931648","3275939839","UA" +"3275939840","3275948031","GB" +"3275948032","3276013567","SE" +"3276013568","3276014087","FR" +"3276014088","3276014095","GB" +"3276014096","3276014151","FR" +"3276014152","3276014159","GB" +"3276014160","3276014191","FR" +"3276014192","3276014207","GB" +"3276014208","3276014255","FR" +"3276014256","3276014263","GB" +"3276014264","3276014471","FR" +"3276014472","3276014479","GB" +"3276014480","3276014511","FR" +"3276014512","3276014519","GB" +"3276014520","3276014919","FR" +"3276014920","3276014927","GB" +"3276014928","3276015103","FR" +"3276015104","3276015119","GB" +"3276015120","3276015199","FR" +"3276015200","3276015231","GB" +"3276015232","3276015247","FR" +"3276015248","3276015263","GB" +"3276015264","3276015295","FR" +"3276015296","3276015327","GB" +"3276015328","3276015415","FR" +"3276015416","3276015423","GB" +"3276015424","3276015559","FR" +"3276015560","3276015599","GB" +"3276015600","3276015879","FR" +"3276015880","3276015887","GB" +"3276015888","3276016391","FR" +"3276016392","3276016399","GB" +"3276016400","3276016415","FR" +"3276016416","3276016463","GB" +"3276016464","3276016511","FR" +"3276016512","3276016591","GB" +"3276016592","3276016703","FR" +"3276016704","3276016735","GB" +"3276016736","3276016767","FR" +"3276016768","3276016783","GB" +"3276016784","3276016799","FR" +"3276016800","3276016815","GB" +"3276016816","3276016831","FR" +"3276016832","3276016847","GB" +"3276016848","3276016863","FR" +"3276016864","3276016879","GB" +"3276016880","3276016943","FR" +"3276016944","3276016959","GB" +"3276016960","3276016975","FR" +"3276016976","3276016991","GB" +"3276016992","3276017039","FR" +"3276017040","3276017043","GB" +"3276017044","3276017047","FR" +"3276017048","3276017055","GB" +"3276017056","3276017119","FR" +"3276017120","3276017151","GB" +"3276017152","3276017327","FR" +"3276017328","3276017343","GB" +"3276017344","3276017551","FR" +"3276017552","3276017567","GB" +"3276017568","3276017607","FR" +"3276017608","3276017663","GB" +"3276017664","3276018015","FR" +"3276018016","3276018031","GB" +"3276018032","3276018047","FR" +"3276018048","3276018063","GB" +"3276018064","3276018095","FR" +"3276018096","3276018127","GB" +"3276018128","3276018143","FR" +"3276018144","3276018159","GB" +"3276018160","3276018239","FR" +"3276018240","3276018271","GB" +"3276018272","3276018375","FR" +"3276018376","3276018383","GB" +"3276018384","3276018423","FR" +"3276018424","3276018447","GB" +"3276018448","3276018495","FR" +"3276018496","3276018527","GB" +"3276018528","3276018543","FR" +"3276018544","3276018623","GB" +"3276018624","3276018943","FR" +"3276018944","3276018975","GB" +"3276018976","3276018985","FR" +"3276018986","3276019007","GB" +"3276019008","3276019023","FR" +"3276019024","3276019071","GB" +"3276019072","3276019135","FR" +"3276019136","3276019151","GB" +"3276019152","3276019535","FR" +"3276019536","3276019543","GB" +"3276019544","3276019559","FR" +"3276019560","3276019599","GB" +"3276019600","3276019639","FR" +"3276019640","3276019671","GB" +"3276019672","3276019679","FR" +"3276019680","3276019687","GB" +"3276019688","3276019695","FR" +"3276019696","3276019703","GB" +"3276019704","3276019719","FR" +"3276019720","3276019743","GB" +"3276019744","3276019823","FR" +"3276019824","3276019831","GB" +"3276019832","3276019839","FR" +"3276019840","3276019855","GB" +"3276019856","3276019863","FR" +"3276019864","3276019871","GB" +"3276019872","3276019919","FR" +"3276019920","3276019927","GB" +"3276019928","3276019959","FR" +"3276019960","3276019967","GB" +"3276019968","3276020503","FR" +"3276020504","3276020511","GB" +"3276020512","3276020623","FR" +"3276020624","3276020631","GB" +"3276020632","3276020679","FR" +"3276020680","3276020687","GB" +"3276020688","3276021591","FR" +"3276021592","3276021599","GB" +"3276021600","3276021639","FR" +"3276021640","3276021647","GB" +"3276021648","3276022127","FR" +"3276022128","3276022143","GB" +"3276022144","3276022215","FR" +"3276022216","3276022223","GB" +"3276022224","3276022255","FR" +"3276022256","3276022271","GB" +"3276022272","3276022455","FR" +"3276022456","3276022463","GB" +"3276022464","3276022479","FR" +"3276022480","3276022495","GB" +"3276022496","3276022575","FR" +"3276022576","3276022639","GB" +"3276022640","3276022655","FR" +"3276022656","3276022687","GB" +"3276022688","3276022751","FR" +"3276022752","3276022783","GB" +"3276022784","3276022791","FR" +"3276022792","3276022799","GB" +"3276022800","3276022967","FR" +"3276022968","3276022975","GB" +"3276022976","3276022983","FR" +"3276022984","3276022991","GB" +"3276022992","3276023031","FR" +"3276023032","3276023039","GB" +"3276023040","3276023071","FR" +"3276023072","3276023079","GB" +"3276023080","3276023087","FR" +"3276023088","3276023263","GB" +"3276023264","3276023727","FR" +"3276023728","3276023743","GB" +"3276023744","3276023759","FR" +"3276023760","3276023767","GB" +"3276023768","3276023871","FR" +"3276023872","3276023887","GB" +"3276023888","3276023943","FR" +"3276023944","3276023951","GB" +"3276023952","3276023959","FR" +"3276023960","3276023967","GB" +"3276023968","3276024719","FR" +"3276024720","3276024767","GB" +"3276024768","3276025111","FR" +"3276025112","3276025135","GB" +"3276025136","3276025151","FR" +"3276025152","3276025159","GB" +"3276025160","3276025167","FR" +"3276025168","3276025175","GB" +"3276025176","3276025183","FR" +"3276025184","3276025191","GB" +"3276025192","3276025207","FR" +"3276025208","3276025215","GB" +"3276025216","3276025295","FR" +"3276025296","3276025335","GB" +"3276025336","3276026167","FR" +"3276026168","3276026175","GB" +"3276026176","3276026191","FR" +"3276026192","3276026199","GB" +"3276026200","3276026215","FR" +"3276026216","3276026223","GB" +"3276026224","3276026319","FR" +"3276026320","3276026351","GB" +"3276026352","3276026423","FR" +"3276026424","3276026447","GB" +"3276026448","3276026527","FR" +"3276026528","3276026535","GB" +"3276026536","3276026543","FR" +"3276026544","3276026575","GB" +"3276026576","3276026591","FR" +"3276026592","3276026607","GB" +"3276026608","3276026703","FR" +"3276026704","3276026719","GB" +"3276026720","3276026727","FR" +"3276026728","3276026783","GB" +"3276026784","3276026815","FR" +"3276026816","3276026823","GB" +"3276026824","3276026847","FR" +"3276026848","3276026927","GB" +"3276026928","3276026943","FR" +"3276026944","3276026991","GB" +"3276026992","3276027311","FR" +"3276027312","3276027327","GB" +"3276027328","3276027503","FR" +"3276027504","3276027519","GB" +"3276027520","3276027551","FR" +"3276027552","3276027583","GB" +"3276027584","3276027695","FR" +"3276027696","3276027743","GB" +"3276027744","3276027791","FR" +"3276027792","3276027807","GB" +"3276027808","3276027855","FR" +"3276027856","3276027871","GB" +"3276027872","3276027951","FR" +"3276027952","3276027967","GB" +"3276027968","3276028047","FR" +"3276028048","3276028063","GB" +"3276028064","3276028079","FR" +"3276028080","3276028111","GB" +"3276028112","3276028127","FR" +"3276028128","3276028143","GB" +"3276028144","3276028159","FR" +"3276028160","3276028231","GB" +"3276028232","3276028247","FR" +"3276028248","3276028255","GB" +"3276028256","3276028263","FR" +"3276028264","3276028287","GB" +"3276028288","3276028479","FR" +"3276028480","3276028511","GB" +"3276028512","3276028743","FR" +"3276028744","3276028751","GB" +"3276028752","3276028759","FR" +"3276028760","3276028767","GB" +"3276028768","3276028791","FR" +"3276028792","3276028799","GB" +"3276028800","3276028807","FR" +"3276028808","3276028815","GB" +"3276028816","3276028863","FR" +"3276028864","3276028871","GB" +"3276028872","3276028879","FR" +"3276028880","3276028887","GB" +"3276028888","3276028895","FR" +"3276028896","3276028927","GB" +"3276028928","3276029183","FR" +"3276029184","3276029199","GB" +"3276029200","3276029343","FR" +"3276029344","3276029359","GB" +"3276029360","3276029375","FR" +"3276029376","3276029407","GB" +"3276029408","3276029423","FR" +"3276029424","3276029439","GB" +"3276029440","3276029583","FR" +"3276029584","3276029599","GB" +"3276029600","3276029727","FR" +"3276029728","3276029791","GB" +"3276029792","3276029855","FR" +"3276029856","3276029887","GB" +"3276029888","3276029919","FR" +"3276029920","3276029951","GB" +"3276029952","3276029983","FR" +"3276029984","3276029999","GB" +"3276030000","3276030079","FR" +"3276030080","3276030095","GB" +"3276030096","3276030191","FR" +"3276030192","3276030207","GB" +"3276030208","3276030215","FR" +"3276030216","3276030239","GB" +"3276030240","3276030255","FR" +"3276030256","3276030263","GB" +"3276030264","3276030271","FR" +"3276030272","3276030303","GB" +"3276030304","3276030319","FR" +"3276030320","3276030335","GB" +"3276030336","3276030407","FR" +"3276030408","3276030415","GB" +"3276030416","3276030463","FR" +"3276030464","3276030495","GB" +"3276030496","3276030543","FR" +"3276030544","3276030559","GB" +"3276030560","3276030719","FR" +"3276030720","3276030975","GB" +"3276030976","3276031255","FR" +"3276031256","3276031263","GB" +"3276031264","3276031375","FR" +"3276031376","3276031383","GB" +"3276031384","3276031423","FR" +"3276031424","3276031439","GB" +"3276031440","3276031519","FR" +"3276031520","3276031551","GB" +"3276031552","3276031559","FR" +"3276031560","3276031591","GB" +"3276031592","3276031631","FR" +"3276031632","3276031679","GB" +"3276031680","3276031719","FR" +"3276031720","3276031743","GB" +"3276031744","3276032007","FR" +"3276032008","3276032015","GB" +"3276032016","3276032023","FR" +"3276032024","3276032047","GB" +"3276032048","3276032055","FR" +"3276032056","3276032063","GB" +"3276032064","3276032103","FR" +"3276032104","3276032111","GB" +"3276032112","3276032191","FR" +"3276032192","3276032207","GB" +"3276032208","3276032223","FR" +"3276032224","3276032255","GB" +"3276032256","3276032263","FR" +"3276032264","3276032303","GB" +"3276032304","3276032319","FR" +"3276032320","3276032343","GB" +"3276032344","3276032367","FR" +"3276032368","3276032415","GB" +"3276032416","3276032431","FR" +"3276032432","3276032479","GB" +"3276032480","3276032543","FR" +"3276032544","3276032559","GB" +"3276032560","3276032591","FR" +"3276032592","3276032607","GB" +"3276032608","3276032719","FR" +"3276032720","3276032735","GB" +"3276032736","3276033039","FR" +"3276033040","3276033119","GB" +"3276033120","3276033151","FR" +"3276033152","3276033167","GB" +"3276033168","3276033215","FR" +"3276033216","3276033231","GB" +"3276033232","3276033247","FR" +"3276033248","3276033279","GB" +"3276033280","3276033535","FR" +"3276033536","3276033655","GB" +"3276033656","3276033663","FR" +"3276033664","3276033695","GB" +"3276033696","3276033791","FR" +"3276033792","3276033823","GB" +"3276033824","3276033839","FR" +"3276033840","3276033855","GB" +"3276033856","3276033863","FR" +"3276033864","3276033871","GB" +"3276033872","3276033879","FR" +"3276033880","3276033887","GB" +"3276033888","3276033927","FR" +"3276033928","3276033951","GB" +"3276033952","3276036095","FR" +"3276036096","3276036103","GB" +"3276036104","3276036151","FR" +"3276036152","3276036159","GB" +"3276036160","3276036247","FR" +"3276036248","3276036255","GB" +"3276036256","3276036271","FR" +"3276036272","3276036279","DE" +"3276036280","3276036383","FR" +"3276036384","3276036415","GB" +"3276036416","3276036671","FR" +"3276036672","3276036863","GB" +"3276036864","3276037127","FR" +"3276037128","3276037151","GB" +"3276037152","3276037199","FR" +"3276037200","3276037215","GB" +"3276037216","3276037359","FR" +"3276037360","3276037375","GB" +"3276037376","3276037703","FR" +"3276037704","3276037759","GB" +"3276037760","3276037887","FR" +"3276037888","3276037903","GB" +"3276037904","3276037959","FR" +"3276037960","3276037983","GB" +"3276037984","3276038047","FR" +"3276038048","3276038111","GB" +"3276038112","3276038159","FR" +"3276038160","3276038399","GB" +"3276038400","3276038663","FR" +"3276038664","3276038671","GB" +"3276038672","3276038703","FR" +"3276038704","3276038719","GB" +"3276038720","3276038735","FR" +"3276038736","3276038767","GB" +"3276038768","3276038799","FR" +"3276038800","3276038815","GB" +"3276038816","3276038847","FR" +"3276038848","3276038911","GB" +"3276038912","3276038919","FR" +"3276038920","3276039167","GB" +"3276039168","3276039207","FR" +"3276039208","3276039247","GB" +"3276039248","3276039279","FR" +"3276039280","3276039295","GB" +"3276039296","3276039327","FR" +"3276039328","3276039343","GB" +"3276039344","3276039391","FR" +"3276039392","3276039423","GB" +"3276039424","3276039967","FR" +"3276039968","3276040031","GB" +"3276040032","3276040063","FR" +"3276040064","3276040095","GB" +"3276040096","3276040159","FR" +"3276040160","3276040175","GB" +"3276040176","3276040231","FR" +"3276040232","3276040239","GB" +"3276040240","3276040319","FR" +"3276040320","3276040327","GB" +"3276040328","3276040439","FR" +"3276040440","3276040495","GB" +"3276040496","3276040543","FR" +"3276040544","3276040575","GB" +"3276040576","3276040591","FR" +"3276040592","3276040607","GB" +"3276040608","3276040639","FR" +"3276040640","3276040671","GB" +"3276040672","3276040879","FR" +"3276040880","3276040895","GB" +"3276040896","3276040975","FR" +"3276040976","3276041007","GB" +"3276041008","3276041071","FR" +"3276041072","3276041087","GB" +"3276041088","3276041199","FR" +"3276041200","3276041215","GB" +"3276041216","3276041279","FR" +"3276041280","3276041311","GB" +"3276041312","3276041391","FR" +"3276041392","3276041407","GB" +"3276041408","3276041495","FR" +"3276041496","3276041503","GB" +"3276041504","3276041519","FR" +"3276041520","3276041535","GB" +"3276041536","3276041551","FR" +"3276041552","3276041599","GB" +"3276041600","3276041759","FR" +"3276041760","3276041775","GB" +"3276041776","3276041839","FR" +"3276041840","3276041887","GB" +"3276041888","3276041919","FR" +"3276041920","3276041951","GB" +"3276041952","3276041967","FR" +"3276041968","3276041983","GB" +"3276041984","3276042063","FR" +"3276042064","3276042143","GB" +"3276042144","3276042175","FR" +"3276042176","3276042191","GB" +"3276042192","3276042207","FR" +"3276042208","3276042239","GB" +"3276042240","3276042775","FR" +"3276042776","3276042815","GB" +"3276042816","3276042831","FR" +"3276042832","3276042847","GB" +"3276042848","3276044311","FR" +"3276044312","3276044319","GB" +"3276044320","3276044351","FR" +"3276044352","3276044359","GB" +"3276044360","3276044367","FR" +"3276044368","3276044383","GB" +"3276044384","3276044479","FR" +"3276044480","3276044495","GB" +"3276044496","3276044511","FR" +"3276044512","3276044543","GB" +"3276044544","3276044551","FR" +"3276044552","3276044575","GB" +"3276044576","3276044607","FR" +"3276044608","3276044639","GB" +"3276044640","3276044671","FR" +"3276044672","3276044703","GB" +"3276044704","3276044735","FR" +"3276044736","3276044799","GB" +"3276044800","3276044815","FR" +"3276044816","3276044831","GB" +"3276044832","3276044863","FR" +"3276044864","3276044879","GB" +"3276044880","3276044927","FR" +"3276044928","3276044943","GB" +"3276044944","3276044959","FR" +"3276044960","3276044967","GB" +"3276044968","3276044991","FR" +"3276044992","3276044999","GB" +"3276045000","3276045023","FR" +"3276045024","3276045039","GB" +"3276045040","3276045191","FR" +"3276045192","3276045199","GB" +"3276045200","3276045223","FR" +"3276045224","3276045239","GB" +"3276045240","3276045255","FR" +"3276045256","3276045271","GB" +"3276045272","3276045287","FR" +"3276045288","3276045311","GB" +"3276045312","3276045351","FR" +"3276045352","3276045359","GB" +"3276045360","3276045391","FR" +"3276045392","3276045407","GB" +"3276045408","3276045455","FR" +"3276045456","3276045463","GB" +"3276045464","3276045479","FR" +"3276045480","3276045487","GB" +"3276045488","3276045543","FR" +"3276045544","3276045551","GB" +"3276045552","3276045583","FR" +"3276045584","3276045607","GB" +"3276045608","3276045631","FR" +"3276045632","3276045647","GB" +"3276045648","3276045767","FR" +"3276045768","3276045783","GB" +"3276045784","3276045815","FR" +"3276045816","3276045855","GB" +"3276045856","3276045919","FR" +"3276045920","3276045951","GB" +"3276045952","3276046335","FR" +"3276046336","3276062719","RU" +"3276062720","3276063231","PL" +"3276063232","3276063743","FR" +"3276063744","3276064255","UA" +"3276064256","3276064767","DE" +"3276064768","3276065279","BG" +"3276065280","3276065791","UA" +"3276065792","3276066303","DE" +"3276066304","3276066815","GB" +"3276066816","3276067327","PS" +"3276067328","3276067839","UA" +"3276067840","3276068351","AT" +"3276068352","3276068863","BG" +"3276068864","3276069887","UA" +"3276069888","3276070399","GB" +"3276070400","3276070911","UA" +"3276070912","3276071423","GB" +"3276071424","3276071935","PL" +"3276071936","3276072447","GB" +"3276072448","3276072959","SK" +"3276072960","3276073471","PL" +"3276073472","3276073983","SK" +"3276073984","3276074495","DE" +"3276074496","3276075007","GB" +"3276075008","3276075519","RU" +"3276075520","3276076031","DE" +"3276076032","3276076287","NL" +"3276076288","3276076543","RU" +"3276076544","3276077055","DE" +"3276077056","3276077567","UA" +"3276077568","3276078079","FR" +"3276078080","3276078591","RU" +"3276078592","3276079103","GB" +"3276079104","3276095487","NO" +"3276095488","3276096511","RU" +"3276096512","3276097535","IT" +"3276097536","3276098559","NL" +"3276098560","3276099583","UA" +"3276099584","3276100607","PL" +"3276100608","3276101631","UA" +"3276101632","3276102655","LV" +"3276102656","3276103679","GB" +"3276103680","3276104703","SI" +"3276104704","3276105727","RU" +"3276105728","3276106751","AT" +"3276106752","3276107775","BG" +"3276107776","3276108799","DE" +"3276108800","3276109823","SE" +"3276109824","3276110847","BG" +"3276110848","3276111871","PL" +"3276111872","3276112895","DK" +"3276112896","3276114943","UA" +"3276114944","3276115967","KW" +"3276115968","3276116991","NL" +"3276116992","3276118015","RU" +"3276118016","3276119039","GB" +"3276119040","3276120063","RU" +"3276120064","3276121087","GB" +"3276121088","3276122111","BG" +"3276122112","3276123135","RU" +"3276123136","3276124159","AT" +"3276124160","3276125183","UA" +"3276125184","3276126207","AT" +"3276126208","3276127231","UA" +"3276127232","3276128255","UZ" +"3276128256","3276129279","AT" +"3276129280","3276131327","UA" +"3276131328","3276132351","RU" +"3276132352","3276133375","LB" +"3276133376","3276134399","GB" +"3276134400","3276135423","RU" +"3276135424","3276136447","UA" +"3276136448","3276137471","NL" +"3276137472","3276138495","PL" +"3276138496","3276139519","NL" +"3276139520","3276140543","RU" +"3276140544","3276141567","DE" +"3276141568","3276143615","UA" +"3276143616","3276144639","GB" +"3276144640","3276152831","CH" +"3276152832","3276161023","HU" +"3276161024","3276169215","GB" +"3276169216","3276177407","AT" +"3276177408","3276185599","CZ" +"3276185600","3276193791","NO" +"3276193792","3276201983","RU" +"3276201984","3276210175","AT" +"3276210176","3276234303","DE" +"3276234304","3276234367","GB" +"3276234368","3276241759","DE" +"3276241760","3276241767","FR" +"3276241768","3276244447","DE" +"3276244448","3276244479","RO" +"3276244480","3276249279","DE" +"3276249280","3276249287","FR" +"3276249288","3276249855","DE" +"3276249856","3276249983","GB" +"3276249984","3276250079","DE" +"3276250080","3276250095","FR" +"3276250096","3276275711","DE" +"3276275712","3276283903","SK" +"3276283904","3276292095","GB" +"3276292096","3276294655","BE" +"3276294656","3276294663","LU" +"3276294664","3276300287","BE" +"3276300288","3276304383","DE" +"3276304384","3276304639","BG" +"3276304640","3276305407","GB" +"3276305408","3276308479","IL" +"3276308480","3276309503","GB" +"3276309504","3276310527","AT" +"3276310528","3276311551","PT" +"3276311552","3276312575","RU" +"3276312576","3276313599","UA" +"3276313600","3276314623","PL" +"3276314624","3276315647","FR" +"3276315648","3276316671","UA" +"3276316672","3276324863","GB" +"3276324864","3276333055","IT" +"3276333056","3276341247","RU" +"3276341248","3276341271","NL" +"3276341272","3276341279","DE" +"3276341280","3276341535","NL" +"3276341536","3276341543","DE" +"3276341544","3276341655","NL" +"3276341656","3276341663","DE" +"3276341664","3276341679","NL" +"3276341680","3276341695","DE" +"3276341696","3276341735","NL" +"3276341736","3276341743","DE" +"3276341744","3276341767","NL" +"3276341768","3276341775","DE" +"3276341776","3276341823","NL" +"3276341824","3276341831","DE" +"3276341832","3276341879","NL" +"3276341880","3276341887","DE" +"3276341888","3276341975","NL" +"3276341976","3276341983","DE" +"3276341984","3276342119","NL" +"3276342120","3276342127","DE" +"3276342128","3276342191","NL" +"3276342192","3276342199","DE" +"3276342200","3276342247","NL" +"3276342248","3276342255","DE" +"3276342256","3276342383","NL" +"3276342384","3276342391","DE" +"3276342392","3276342495","NL" +"3276342496","3276342503","DE" +"3276342504","3276342535","NL" +"3276342536","3276342551","DE" +"3276342552","3276342583","NL" +"3276342584","3276342591","DE" +"3276342592","3276342671","NL" +"3276342672","3276342679","DE" +"3276342680","3276342703","NL" +"3276342704","3276342719","DE" +"3276342720","3276342767","NL" +"3276342768","3276342783","DE" +"3276342784","3276342831","NL" +"3276342832","3276342839","DE" +"3276342840","3276342847","NL" +"3276342848","3276342863","DE" +"3276342864","3276342991","NL" +"3276342992","3276342999","DE" +"3276343000","3276343039","NL" +"3276343040","3276343047","DE" +"3276343048","3276343055","NL" +"3276343056","3276343063","DE" +"3276343064","3276343071","NL" +"3276343072","3276343079","DE" +"3276343080","3276343087","NL" +"3276343088","3276343095","DE" +"3276343096","3276343231","NL" +"3276343232","3276343239","DE" +"3276343240","3276343247","NL" +"3276343248","3276343255","DE" +"3276343256","3276343287","NL" +"3276343288","3276343295","DE" +"3276343296","3276343359","NL" +"3276343360","3276343367","DE" +"3276343368","3276343391","NL" +"3276343392","3276343399","DE" +"3276343400","3276343423","NL" +"3276343424","3276343447","DE" +"3276343448","3276343463","NL" +"3276343464","3276343479","DE" +"3276343480","3276343487","NL" +"3276343488","3276343495","DE" +"3276343496","3276343511","NL" +"3276343512","3276343519","DE" +"3276343520","3276343551","NL" +"3276343552","3276343815","DE" +"3276343816","3276343831","NL" +"3276343832","3276343839","DE" +"3276343840","3276343871","NL" +"3276343872","3276343879","DE" +"3276343880","3276343903","NL" +"3276343904","3276343911","DE" +"3276343912","3276344047","NL" +"3276344048","3276344055","DE" +"3276344056","3276344063","NL" +"3276344064","3276344071","DE" +"3276344072","3276344111","NL" +"3276344112","3276344119","DE" +"3276344120","3276344215","NL" +"3276344216","3276344223","DE" +"3276344224","3276344303","NL" +"3276344304","3276344319","DE" +"3276344320","3276344391","NL" +"3276344392","3276344399","DE" +"3276344400","3276344415","NL" +"3276344416","3276344423","DE" +"3276344424","3276344471","NL" +"3276344472","3276344479","DE" +"3276344480","3276344551","NL" +"3276344552","3276344559","DE" +"3276344560","3276344575","NL" +"3276344576","3276344583","DE" +"3276344584","3276344623","NL" +"3276344624","3276344631","DE" +"3276344632","3276344663","NL" +"3276344664","3276344671","DE" +"3276344672","3276344711","NL" +"3276344712","3276344719","DE" +"3276344720","3276344727","NL" +"3276344728","3276344759","DE" +"3276344760","3276344799","NL" +"3276344800","3276344807","DE" +"3276344808","3276344895","NL" +"3276344896","3276344903","DE" +"3276344904","3276344983","NL" +"3276344984","3276344991","DE" +"3276344992","3276345007","NL" +"3276345008","3276345015","DE" +"3276345016","3276345063","NL" +"3276345064","3276345071","DE" +"3276345072","3276345223","NL" +"3276345224","3276345231","DE" +"3276345232","3276345295","NL" +"3276345296","3276345303","DE" +"3276345304","3276345327","NL" +"3276345328","3276345335","DE" +"3276345336","3276345343","NL" +"3276345344","3276345359","DE" +"3276345360","3276345415","NL" +"3276345416","3276345423","DE" +"3276345424","3276345647","NL" +"3276345648","3276345655","DE" +"3276345656","3276345727","NL" +"3276345728","3276345735","DE" +"3276345736","3276345767","NL" +"3276345768","3276345783","DE" +"3276345784","3276345823","NL" +"3276345824","3276345831","DE" +"3276345832","3276345839","NL" +"3276345840","3276345847","DE" +"3276345848","3276345863","NL" +"3276345864","3276345871","DE" +"3276345872","3276345927","NL" +"3276345928","3276345935","DE" +"3276345936","3276346167","NL" +"3276346168","3276346175","DE" +"3276346176","3276346207","NL" +"3276346208","3276346215","DE" +"3276346216","3276346223","NL" +"3276346224","3276346231","DE" +"3276346232","3276346295","NL" +"3276346296","3276346303","DE" +"3276346304","3276346359","NL" +"3276346360","3276346375","DE" +"3276346376","3276346655","NL" +"3276346656","3276346663","DE" +"3276346664","3276346703","NL" +"3276346704","3276346711","DE" +"3276346712","3276346727","NL" +"3276346728","3276346735","DE" +"3276346736","3276346839","NL" +"3276346840","3276346847","DE" +"3276346848","3276346879","NL" +"3276346880","3276346887","DE" +"3276346888","3276346951","NL" +"3276346952","3276346959","DE" +"3276346960","3276347039","NL" +"3276347040","3276347047","DE" +"3276347048","3276347111","NL" +"3276347112","3276347127","DE" +"3276347128","3276347135","NL" +"3276347136","3276347143","DE" +"3276347144","3276347159","NL" +"3276347160","3276347167","DE" +"3276347168","3276347207","NL" +"3276347208","3276347215","DE" +"3276347216","3276347327","NL" +"3276347328","3276347335","DE" +"3276347336","3276347391","NL" +"3276347392","3276347399","DE" +"3276347400","3276347543","NL" +"3276347544","3276347551","DE" +"3276347552","3276347655","NL" +"3276347656","3276347663","DE" +"3276347664","3276347759","NL" +"3276347760","3276347767","DE" +"3276347768","3276347847","NL" +"3276347848","3276347855","DE" +"3276347856","3276347903","NL" +"3276347904","3276347911","DE" +"3276347912","3276347959","NL" +"3276347960","3276347967","DE" +"3276347968","3276347991","NL" +"3276347992","3276347999","DE" +"3276348000","3276348015","NL" +"3276348016","3276348023","DE" +"3276348024","3276348063","NL" +"3276348064","3276348071","DE" +"3276348072","3276348111","NL" +"3276348112","3276348119","DE" +"3276348120","3276348127","NL" +"3276348128","3276348135","DE" +"3276348136","3276348151","NL" +"3276348152","3276348167","DE" +"3276348168","3276348183","NL" +"3276348184","3276348191","DE" +"3276348192","3276348199","NL" +"3276348200","3276348223","DE" +"3276348224","3276348231","NL" +"3276348232","3276348239","DE" +"3276348240","3276348295","NL" +"3276348296","3276348303","DE" +"3276348304","3276348319","NL" +"3276348320","3276348327","DE" +"3276348328","3276348343","NL" +"3276348344","3276348351","DE" +"3276348352","3276348431","NL" +"3276348432","3276348439","DE" +"3276348440","3276348455","NL" +"3276348456","3276348463","DE" +"3276348464","3276348511","NL" +"3276348512","3276348519","DE" +"3276348520","3276348623","NL" +"3276348624","3276348631","DE" +"3276348632","3276348679","NL" +"3276348680","3276348687","DE" +"3276348688","3276348719","NL" +"3276348720","3276348751","DE" +"3276348752","3276348767","NL" +"3276348768","3276348775","DE" +"3276348776","3276348839","NL" +"3276348840","3276348847","DE" +"3276348848","3276349063","NL" +"3276349064","3276349071","DE" +"3276349072","3276349135","NL" +"3276349136","3276349143","DE" +"3276349144","3276349167","NL" +"3276349168","3276349175","DE" +"3276349176","3276349199","NL" +"3276349200","3276349207","DE" +"3276349208","3276349215","NL" +"3276349216","3276349223","DE" +"3276349224","3276349679","NL" +"3276349680","3276349687","DE" +"3276349688","3276349831","NL" +"3276349832","3276349839","DE" +"3276349840","3276349871","NL" +"3276349872","3276349879","DE" +"3276349880","3276349903","NL" +"3276349904","3276349911","DE" +"3276349912","3276349991","NL" +"3276349992","3276349999","DE" +"3276350000","3276350031","NL" +"3276350032","3276350047","DE" +"3276350048","3276350191","NL" +"3276350192","3276350199","DE" +"3276350200","3276350207","NL" +"3276350208","3276350215","DE" +"3276350216","3276350239","NL" +"3276350240","3276350247","DE" +"3276350248","3276350287","NL" +"3276350288","3276350295","DE" +"3276350296","3276350455","NL" +"3276350456","3276350463","DE" +"3276350464","3276350519","NL" +"3276350520","3276350527","DE" +"3276350528","3276350639","NL" +"3276350640","3276350647","DE" +"3276350648","3276350671","NL" +"3276350672","3276350679","DE" +"3276350680","3276350687","NL" +"3276350688","3276350695","DE" +"3276350696","3276350959","NL" +"3276350960","3276350967","DE" +"3276350968","3276350975","NL" +"3276350976","3276350983","DE" +"3276350984","3276351007","NL" +"3276351008","3276351015","DE" +"3276351016","3276351095","NL" +"3276351096","3276351103","DE" +"3276351104","3276351119","NL" +"3276351120","3276351135","DE" +"3276351136","3276351191","NL" +"3276351192","3276351199","DE" +"3276351200","3276351215","NL" +"3276351216","3276351223","DE" +"3276351224","3276351311","NL" +"3276351312","3276351319","DE" +"3276351320","3276351383","NL" +"3276351384","3276351391","DE" +"3276351392","3276351535","NL" +"3276351536","3276351543","DE" +"3276351544","3276351559","NL" +"3276351560","3276351567","DE" +"3276351568","3276351575","NL" +"3276351576","3276351583","DE" +"3276351584","3276351591","NL" +"3276351592","3276351599","DE" +"3276351600","3276351607","NL" +"3276351608","3276351623","DE" +"3276351624","3276351647","NL" +"3276351648","3276351655","DE" +"3276351656","3276351679","NL" +"3276351680","3276351687","DE" +"3276351688","3276351703","NL" +"3276351704","3276351711","DE" +"3276351712","3276351727","NL" +"3276351728","3276351735","DE" +"3276351736","3276351775","NL" +"3276351776","3276351783","DE" +"3276351784","3276351791","NL" +"3276351792","3276351799","DE" +"3276351800","3276351807","NL" +"3276351808","3276351815","DE" +"3276351816","3276351879","NL" +"3276351880","3276351887","DE" +"3276351888","3276351967","NL" +"3276351968","3276351975","DE" +"3276351976","3276352167","NL" +"3276352168","3276352175","DE" +"3276352176","3276352279","NL" +"3276352280","3276352287","DE" +"3276352288","3276352335","NL" +"3276352336","3276352343","DE" +"3276352344","3276352399","NL" +"3276352400","3276352407","DE" +"3276352408","3276352511","NL" +"3276352512","3276352519","DE" +"3276352520","3276352655","NL" +"3276352656","3276352663","DE" +"3276352664","3276352695","NL" +"3276352696","3276352703","DE" +"3276352704","3276352767","NL" +"3276352768","3276352775","DE" +"3276352776","3276352783","NL" +"3276352784","3276352791","DE" +"3276352792","3276352831","NL" +"3276352832","3276352839","DE" +"3276352840","3276352911","NL" +"3276352912","3276352935","DE" +"3276352936","3276352943","NL" +"3276352944","3276352951","DE" +"3276352952","3276352959","NL" +"3276352960","3276352967","DE" +"3276352968","3276353039","NL" +"3276353040","3276353047","DE" +"3276353048","3276353079","NL" +"3276353080","3276353087","DE" +"3276353088","3276353143","NL" +"3276353144","3276353151","DE" +"3276353152","3276353207","NL" +"3276353208","3276353215","DE" +"3276353216","3276353295","NL" +"3276353296","3276353303","DE" +"3276353304","3276353343","NL" +"3276353344","3276353351","DE" +"3276353352","3276353359","NL" +"3276353360","3276353367","DE" +"3276353368","3276353655","NL" +"3276353656","3276353663","DE" +"3276353664","3276353687","NL" +"3276353688","3276353695","DE" +"3276353696","3276353711","NL" +"3276353712","3276353719","DE" +"3276353720","3276353799","NL" +"3276353800","3276353807","DE" +"3276353808","3276353927","NL" +"3276353928","3276353935","DE" +"3276353936","3276354095","NL" +"3276354096","3276354103","DE" +"3276354104","3276354183","NL" +"3276354184","3276354191","DE" +"3276354192","3276354207","NL" +"3276354208","3276354223","DE" +"3276354224","3276354255","NL" +"3276354256","3276354263","DE" +"3276354264","3276354327","NL" +"3276354328","3276354335","DE" +"3276354336","3276354343","NL" +"3276354344","3276354351","DE" +"3276354352","3276354415","NL" +"3276354416","3276354423","DE" +"3276354424","3276354623","NL" +"3276354624","3276354639","DE" +"3276354640","3276354647","NL" +"3276354648","3276354655","DE" +"3276354656","3276354735","NL" +"3276354736","3276354743","DE" +"3276354744","3276354831","NL" +"3276354832","3276354847","DE" +"3276354848","3276354855","NL" +"3276354856","3276354879","DE" +"3276354880","3276354887","NL" +"3276354888","3276354895","DE" +"3276354896","3276354903","NL" +"3276354904","3276354911","DE" +"3276354912","3276354967","NL" +"3276354968","3276354975","DE" +"3276354976","3276354999","NL" +"3276355000","3276355007","DE" +"3276355008","3276355063","NL" +"3276355064","3276355071","DE" +"3276355072","3276355183","NL" +"3276355184","3276355191","DE" +"3276355192","3276355263","NL" +"3276355264","3276355271","DE" +"3276355272","3276355367","NL" +"3276355368","3276355383","DE" +"3276355384","3276355399","NL" +"3276355400","3276355407","DE" +"3276355408","3276355439","NL" +"3276355440","3276355447","DE" +"3276355448","3276355543","NL" +"3276355544","3276355559","DE" +"3276355560","3276355647","NL" +"3276355648","3276355655","DE" +"3276355656","3276355663","NL" +"3276355664","3276355671","DE" +"3276355672","3276355783","NL" +"3276355784","3276355791","DE" +"3276355792","3276355847","NL" +"3276355848","3276355855","DE" +"3276355856","3276356063","NL" +"3276356064","3276356071","DE" +"3276356072","3276356135","NL" +"3276356136","3276356143","DE" +"3276356144","3276356207","NL" +"3276356208","3276356215","DE" +"3276356216","3276356279","NL" +"3276356280","3276356295","DE" +"3276356296","3276356311","NL" +"3276356312","3276356319","DE" +"3276356320","3276356351","NL" +"3276356352","3276356607","DE" +"3276356608","3276356623","NL" +"3276356624","3276356631","DE" +"3276356632","3276356647","NL" +"3276356648","3276356655","DE" +"3276356656","3276356775","NL" +"3276356776","3276356783","DE" +"3276356784","3276356799","NL" +"3276356800","3276356807","DE" +"3276356808","3276356911","NL" +"3276356912","3276356927","DE" +"3276356928","3276356935","NL" +"3276356936","3276356943","DE" +"3276356944","3276357015","NL" +"3276357016","3276357023","DE" +"3276357024","3276357175","NL" +"3276357176","3276357183","DE" +"3276357184","3276357279","NL" +"3276357280","3276357287","DE" +"3276357288","3276357295","NL" +"3276357296","3276357303","DE" +"3276357304","3276357319","NL" +"3276357320","3276357327","DE" +"3276357328","3276357343","NL" +"3276357344","3276357351","DE" +"3276357352","3276357383","NL" +"3276357384","3276357391","DE" +"3276357392","3276357415","NL" +"3276357416","3276357423","DE" +"3276357424","3276357447","NL" +"3276357448","3276357455","DE" +"3276357456","3276357503","NL" +"3276357504","3276357519","DE" +"3276357520","3276357543","NL" +"3276357544","3276357551","DE" +"3276357552","3276357655","NL" +"3276357656","3276357663","DE" +"3276357664","3276357671","NL" +"3276357672","3276357679","DE" +"3276357680","3276357783","NL" +"3276357784","3276357791","DE" +"3276357792","3276357831","NL" +"3276357832","3276357847","DE" +"3276357848","3276357903","NL" +"3276357904","3276357911","DE" +"3276357912","3276357927","NL" +"3276357928","3276357935","DE" +"3276357936","3276358111","NL" +"3276358112","3276358127","DE" +"3276358128","3276358199","NL" +"3276358200","3276358207","DE" +"3276358208","3276358215","NL" +"3276358216","3276358223","DE" +"3276358224","3276358239","NL" +"3276358240","3276358247","DE" +"3276358248","3276358279","NL" +"3276358280","3276358295","DE" +"3276358296","3276358335","NL" +"3276358336","3276358343","DE" +"3276358344","3276358471","NL" +"3276358472","3276358479","DE" +"3276358480","3276358495","NL" +"3276358496","3276358503","DE" +"3276358504","3276358591","NL" +"3276358592","3276358599","DE" +"3276358600","3276358607","NL" +"3276358608","3276358615","DE" +"3276358616","3276358631","NL" +"3276358632","3276358647","DE" +"3276358648","3276358743","NL" +"3276358744","3276358759","DE" +"3276358760","3276358775","NL" +"3276358776","3276358783","DE" +"3276358784","3276358791","NL" +"3276358792","3276358807","DE" +"3276358808","3276358903","NL" +"3276358904","3276358911","DE" +"3276358912","3276358927","NL" +"3276358928","3276358935","DE" +"3276358936","3276358951","NL" +"3276358952","3276358959","DE" +"3276358960","3276359047","NL" +"3276359048","3276359055","DE" +"3276359056","3276359135","NL" +"3276359136","3276359143","DE" +"3276359144","3276359167","NL" +"3276359168","3276359175","DE" +"3276359176","3276359383","NL" +"3276359384","3276359391","DE" +"3276359392","3276359439","NL" +"3276359440","3276359447","DE" +"3276359448","3276359511","NL" +"3276359512","3276359519","DE" +"3276359520","3276359607","NL" +"3276359608","3276359615","DE" +"3276359616","3276359703","NL" +"3276359704","3276359711","DE" +"3276359712","3276359727","NL" +"3276359728","3276359735","DE" +"3276359736","3276359751","NL" +"3276359752","3276359759","DE" +"3276359760","3276359767","NL" +"3276359768","3276359775","DE" +"3276359776","3276359783","NL" +"3276359784","3276359791","DE" +"3276359792","3276359807","NL" +"3276359808","3276359815","DE" +"3276359816","3276359839","NL" +"3276359840","3276359847","DE" +"3276359848","3276359919","NL" +"3276359920","3276359927","DE" +"3276359928","3276360007","NL" +"3276360008","3276360015","DE" +"3276360016","3276360055","NL" +"3276360056","3276360063","DE" +"3276360064","3276360087","NL" +"3276360088","3276360095","DE" +"3276360096","3276360111","NL" +"3276360112","3276360119","DE" +"3276360120","3276360175","NL" +"3276360176","3276360183","DE" +"3276360184","3276360199","NL" +"3276360200","3276360207","DE" +"3276360208","3276360223","NL" +"3276360224","3276360239","DE" +"3276360240","3276360271","NL" +"3276360272","3276360279","DE" +"3276360280","3276360327","NL" +"3276360328","3276360335","DE" +"3276360336","3276360351","NL" +"3276360352","3276360359","DE" +"3276360360","3276360375","NL" +"3276360376","3276360383","DE" +"3276360384","3276360399","NL" +"3276360400","3276360407","DE" +"3276360408","3276360495","NL" +"3276360496","3276360503","DE" +"3276360504","3276360519","NL" +"3276360520","3276360527","DE" +"3276360528","3276360559","NL" +"3276360560","3276360567","DE" +"3276360568","3276360583","NL" +"3276360584","3276360591","DE" +"3276360592","3276360615","NL" +"3276360616","3276360623","DE" +"3276360624","3276360687","NL" +"3276360688","3276360703","DE" +"3276360704","3276360743","NL" +"3276360744","3276360751","DE" +"3276360752","3276360847","NL" +"3276360848","3276360863","DE" +"3276360864","3276360999","NL" +"3276361000","3276361007","DE" +"3276361008","3276361015","NL" +"3276361016","3276361023","DE" +"3276361024","3276361063","NL" +"3276361064","3276361071","DE" +"3276361072","3276361239","NL" +"3276361240","3276361247","DE" +"3276361248","3276361255","NL" +"3276361256","3276361271","DE" +"3276361272","3276361303","NL" +"3276361304","3276361311","DE" +"3276361312","3276361343","NL" +"3276361344","3276361351","DE" +"3276361352","3276361383","NL" +"3276361384","3276361391","DE" +"3276361392","3276361399","NL" +"3276361400","3276361407","DE" +"3276361408","3276361519","NL" +"3276361520","3276361527","DE" +"3276361528","3276361599","NL" +"3276361600","3276361607","DE" +"3276361608","3276361655","NL" +"3276361656","3276361663","DE" +"3276361664","3276361679","NL" +"3276361680","3276361687","DE" +"3276361688","3276361751","NL" +"3276361752","3276361767","DE" +"3276361768","3276362047","NL" +"3276362048","3276362055","DE" +"3276362056","3276362071","NL" +"3276362072","3276362079","DE" +"3276362080","3276362143","NL" +"3276362144","3276362151","DE" +"3276362152","3276362311","NL" +"3276362312","3276362319","DE" +"3276362320","3276362599","NL" +"3276362600","3276362607","DE" +"3276362608","3276362695","NL" +"3276362696","3276362703","DE" +"3276362704","3276362759","NL" +"3276362760","3276362767","DE" +"3276362768","3276362775","NL" +"3276362776","3276362783","DE" +"3276362784","3276362791","NL" +"3276362792","3276362799","DE" +"3276362800","3276362967","NL" +"3276362968","3276362975","DE" +"3276362976","3276362983","NL" +"3276362984","3276362991","DE" +"3276362992","3276363047","NL" +"3276363048","3276363055","DE" +"3276363056","3276363071","NL" +"3276363072","3276363079","DE" +"3276363080","3276363223","NL" +"3276363224","3276363231","DE" +"3276363232","3276363295","NL" +"3276363296","3276363303","DE" +"3276363304","3276363335","NL" +"3276363336","3276363343","DE" +"3276363344","3276363375","NL" +"3276363376","3276363383","DE" +"3276363384","3276363503","NL" +"3276363504","3276363511","DE" +"3276363512","3276363583","NL" +"3276363584","3276363591","DE" +"3276363592","3276363607","NL" +"3276363608","3276363615","DE" +"3276363616","3276363623","NL" +"3276363624","3276363631","DE" +"3276363632","3276363655","NL" +"3276363656","3276363679","DE" +"3276363680","3276363703","NL" +"3276363704","3276363711","DE" +"3276363712","3276363823","NL" +"3276363824","3276363831","DE" +"3276363832","3276363855","NL" +"3276363856","3276363863","DE" +"3276363864","3276363951","NL" +"3276363952","3276363967","DE" +"3276363968","3276363975","NL" +"3276363976","3276363991","DE" +"3276363992","3276364183","NL" +"3276364184","3276364191","DE" +"3276364192","3276364295","NL" +"3276364296","3276364303","DE" +"3276364304","3276364311","NL" +"3276364312","3276364319","DE" +"3276364320","3276364383","NL" +"3276364384","3276364391","DE" +"3276364392","3276364431","NL" +"3276364432","3276364439","DE" +"3276364440","3276364543","NL" +"3276364544","3276364551","DE" +"3276364552","3276364639","NL" +"3276364640","3276364655","DE" +"3276364656","3276364807","NL" +"3276364808","3276364815","DE" +"3276364816","3276364855","NL" +"3276364856","3276364863","DE" +"3276364864","3276364935","NL" +"3276364936","3276364943","DE" +"3276364944","3276364959","NL" +"3276364960","3276364967","DE" +"3276364968","3276364991","NL" +"3276364992","3276365007","DE" +"3276365008","3276365215","NL" +"3276365216","3276365223","DE" +"3276365224","3276365247","NL" +"3276365248","3276365255","DE" +"3276365256","3276365303","NL" +"3276365304","3276365311","DE" +"3276365312","3276365327","NL" +"3276365328","3276365335","DE" +"3276365336","3276365375","NL" +"3276365376","3276365391","DE" +"3276365392","3276365415","NL" +"3276365416","3276365423","DE" +"3276365424","3276365495","NL" +"3276365496","3276365519","DE" +"3276365520","3276365543","NL" +"3276365544","3276365551","DE" +"3276365552","3276365623","NL" +"3276365624","3276365631","DE" +"3276365632","3276365647","NL" +"3276365648","3276365655","DE" +"3276365656","3276365743","NL" +"3276365744","3276365751","DE" +"3276365752","3276365999","NL" +"3276366000","3276366007","DE" +"3276366008","3276366039","NL" +"3276366040","3276366047","DE" +"3276366048","3276366055","NL" +"3276366056","3276366063","DE" +"3276366064","3276366119","NL" +"3276366120","3276366127","DE" +"3276366128","3276366143","NL" +"3276366144","3276366151","DE" +"3276366152","3276366255","NL" +"3276366256","3276366263","DE" +"3276366264","3276366319","NL" +"3276366320","3276366335","DE" +"3276366336","3276366455","NL" +"3276366456","3276366471","DE" +"3276366472","3276366591","NL" +"3276366592","3276366599","DE" +"3276366600","3276366639","NL" +"3276366640","3276366647","DE" +"3276366648","3276366679","NL" +"3276366680","3276366695","DE" +"3276366696","3276366727","NL" +"3276366728","3276366735","DE" +"3276366736","3276366751","NL" +"3276366752","3276366767","DE" +"3276366768","3276366775","NL" +"3276366776","3276366783","DE" +"3276366784","3276366855","NL" +"3276366856","3276366863","DE" +"3276366864","3276366887","NL" +"3276366888","3276366895","DE" +"3276366896","3276366919","NL" +"3276366920","3276366927","DE" +"3276366928","3276367063","NL" +"3276367064","3276367071","DE" +"3276367072","3276367079","NL" +"3276367080","3276367087","DE" +"3276367088","3276367119","NL" +"3276367120","3276367127","DE" +"3276367128","3276367159","NL" +"3276367160","3276367175","DE" +"3276367176","3276367271","NL" +"3276367272","3276367279","DE" +"3276367280","3276367455","NL" +"3276367456","3276367463","DE" +"3276367464","3276367607","NL" +"3276367608","3276367615","DE" +"3276367616","3276367623","NL" +"3276367624","3276367631","DE" +"3276367632","3276367679","NL" +"3276367680","3276367687","DE" +"3276367688","3276367711","NL" +"3276367712","3276367719","DE" +"3276367720","3276367743","NL" +"3276367744","3276367751","DE" +"3276367752","3276367783","NL" +"3276367784","3276367791","DE" +"3276367792","3276367855","NL" +"3276367856","3276367863","DE" +"3276367864","3276368079","NL" +"3276368080","3276368087","DE" +"3276368088","3276368103","NL" +"3276368104","3276368111","DE" +"3276368112","3276368191","NL" +"3276368192","3276368199","DE" +"3276368200","3276368271","NL" +"3276368272","3276368279","DE" +"3276368280","3276368343","NL" +"3276368344","3276368351","DE" +"3276368352","3276368431","NL" +"3276368432","3276368439","DE" +"3276368440","3276368527","NL" +"3276368528","3276368535","DE" +"3276368536","3276368615","NL" +"3276368616","3276368623","DE" +"3276368624","3276368631","NL" +"3276368632","3276368639","DE" +"3276368640","3276368655","NL" +"3276368656","3276368663","DE" +"3276368664","3276368703","NL" +"3276368704","3276368711","DE" +"3276368712","3276368727","NL" +"3276368728","3276368735","DE" +"3276368736","3276368751","NL" +"3276368752","3276368759","DE" +"3276368760","3276368815","NL" +"3276368816","3276368823","DE" +"3276368824","3276368871","NL" +"3276368872","3276368879","DE" +"3276368880","3276369031","NL" +"3276369032","3276369047","DE" +"3276369048","3276369079","NL" +"3276369080","3276369087","DE" +"3276369088","3276369167","NL" +"3276369168","3276369183","DE" +"3276369184","3276369263","NL" +"3276369264","3276369271","DE" +"3276369272","3276369431","NL" +"3276369432","3276369439","DE" +"3276369440","3276369527","NL" +"3276369528","3276369543","DE" +"3276369544","3276369551","NL" +"3276369552","3276369559","DE" +"3276369560","3276369599","NL" +"3276369600","3276369607","DE" +"3276369608","3276369623","NL" +"3276369624","3276369631","DE" +"3276369632","3276369639","NL" +"3276369640","3276369647","DE" +"3276369648","3276369703","NL" +"3276369704","3276369711","DE" +"3276369712","3276369735","NL" +"3276369736","3276369743","DE" +"3276369744","3276369751","NL" +"3276369752","3276369759","DE" +"3276369760","3276369855","NL" +"3276369856","3276369863","DE" +"3276369864","3276369871","NL" +"3276369872","3276369879","DE" +"3276369880","3276369919","NL" +"3276369920","3276369927","DE" +"3276369928","3276369999","NL" +"3276370000","3276370015","DE" +"3276370016","3276370063","NL" +"3276370064","3276370071","DE" +"3276370072","3276370119","NL" +"3276370120","3276370143","DE" +"3276370144","3276370183","NL" +"3276370184","3276370191","DE" +"3276370192","3276370335","NL" +"3276370336","3276370343","DE" +"3276370344","3276370375","NL" +"3276370376","3276370383","DE" +"3276370384","3276370551","NL" +"3276370552","3276370567","DE" +"3276370568","3276370599","NL" +"3276370600","3276370607","DE" +"3276370608","3276370831","NL" +"3276370832","3276370839","DE" +"3276370840","3276370919","NL" +"3276370920","3276370927","DE" +"3276370928","3276370959","NL" +"3276370960","3276370967","DE" +"3276370968","3276370999","NL" +"3276371000","3276371007","DE" +"3276371008","3276371039","NL" +"3276371040","3276371055","DE" +"3276371056","3276371167","NL" +"3276371168","3276371175","DE" +"3276371176","3276371239","NL" +"3276371240","3276371247","DE" +"3276371248","3276371255","NL" +"3276371256","3276371271","DE" +"3276371272","3276371327","NL" +"3276371328","3276371335","DE" +"3276371336","3276371343","NL" +"3276371344","3276371351","DE" +"3276371352","3276371367","NL" +"3276371368","3276371375","DE" +"3276371376","3276371407","NL" +"3276371408","3276371415","DE" +"3276371416","3276371431","NL" +"3276371432","3276371439","DE" +"3276371440","3276371455","NL" +"3276371456","3276371463","DE" +"3276371464","3276371511","NL" +"3276371512","3276371527","DE" +"3276371528","3276371727","NL" +"3276371728","3276371735","DE" +"3276371736","3276371815","NL" +"3276371816","3276371823","DE" +"3276371824","3276371831","NL" +"3276371832","3276371839","DE" +"3276371840","3276371863","NL" +"3276371864","3276371871","DE" +"3276371872","3276371879","NL" +"3276371880","3276371887","DE" +"3276371888","3276371903","NL" +"3276371904","3276371911","DE" +"3276371912","3276371951","NL" +"3276371952","3276371959","DE" +"3276371960","3276372023","NL" +"3276372024","3276372031","DE" +"3276372032","3276372095","NL" +"3276372096","3276372111","DE" +"3276372112","3276372135","NL" +"3276372136","3276372143","DE" +"3276372144","3276372303","NL" +"3276372304","3276372311","DE" +"3276372312","3276372343","NL" +"3276372344","3276372351","DE" +"3276372352","3276372679","NL" +"3276372680","3276372687","DE" +"3276372688","3276372807","NL" +"3276372808","3276372815","DE" +"3276372816","3276372911","NL" +"3276372912","3276372919","DE" +"3276372920","3276372943","NL" +"3276372944","3276372951","DE" +"3276372952","3276373015","NL" +"3276373016","3276373023","DE" +"3276373024","3276373039","NL" +"3276373040","3276373047","DE" +"3276373048","3276373063","NL" +"3276373064","3276373071","DE" +"3276373072","3276373119","NL" +"3276373120","3276373127","DE" +"3276373128","3276373167","NL" +"3276373168","3276373175","DE" +"3276373176","3276373207","NL" +"3276373208","3276373215","DE" +"3276373216","3276373223","NL" +"3276373224","3276373231","DE" +"3276373232","3276373343","NL" +"3276373344","3276373351","DE" +"3276373352","3276373431","NL" +"3276373432","3276373439","DE" +"3276373440","3276373447","NL" +"3276373448","3276373455","DE" +"3276373456","3276373519","NL" +"3276373520","3276373527","DE" +"3276373528","3276373551","NL" +"3276373552","3276373559","DE" +"3276373560","3276373727","NL" +"3276373728","3276373735","DE" +"3276373736","3276373751","NL" +"3276373752","3276373759","DE" +"3276373760","3276373863","NL" +"3276373864","3276373871","DE" +"3276373872","3276373911","NL" +"3276373912","3276373919","DE" +"3276373920","3276373927","NL" +"3276373928","3276373943","DE" +"3276373944","3276374063","NL" +"3276374064","3276374071","DE" +"3276374072","3276374143","NL" +"3276374144","3276374151","DE" +"3276374152","3276374159","NL" +"3276374160","3276374167","DE" +"3276374168","3276374327","NL" +"3276374328","3276374335","DE" +"3276374336","3276374399","NL" +"3276374400","3276374407","DE" +"3276374408","3276374439","NL" +"3276374440","3276374447","DE" +"3276374448","3276374479","NL" +"3276374480","3276374487","DE" +"3276374488","3276374527","NL" +"3276374528","3276374535","DE" +"3276374536","3276374575","NL" +"3276374576","3276374583","DE" +"3276374584","3276374679","NL" +"3276374680","3276374687","DE" +"3276374688","3276374703","NL" +"3276374704","3276374711","DE" +"3276374712","3276374727","NL" +"3276374728","3276374735","DE" +"3276374736","3276374751","NL" +"3276374752","3276374767","DE" +"3276374768","3276374775","NL" +"3276374776","3276374783","DE" +"3276374784","3276374807","NL" +"3276374808","3276374815","DE" +"3276374816","3276374823","NL" +"3276374824","3276374831","DE" +"3276374832","3276374999","NL" +"3276375000","3276375007","DE" +"3276375008","3276375103","NL" +"3276375104","3276375119","DE" +"3276375120","3276375183","NL" +"3276375184","3276375191","DE" +"3276375192","3276375223","NL" +"3276375224","3276375231","DE" +"3276375232","3276375335","NL" +"3276375336","3276375359","DE" +"3276375360","3276375423","NL" +"3276375424","3276375439","DE" +"3276375440","3276375607","NL" +"3276375608","3276375615","DE" +"3276375616","3276375679","NL" +"3276375680","3276375687","DE" +"3276375688","3276375727","NL" +"3276375728","3276375735","DE" +"3276375736","3276375783","NL" +"3276375784","3276375791","DE" +"3276375792","3276375911","NL" +"3276375912","3276375919","DE" +"3276375920","3276376015","NL" +"3276376016","3276376023","DE" +"3276376024","3276376055","NL" +"3276376056","3276376063","DE" +"3276376064","3276376095","NL" +"3276376096","3276376103","DE" +"3276376104","3276376143","NL" +"3276376144","3276376151","DE" +"3276376152","3276376191","NL" +"3276376192","3276376199","DE" +"3276376200","3276376311","NL" +"3276376312","3276376319","DE" +"3276376320","3276376359","NL" +"3276376360","3276376367","DE" +"3276376368","3276376375","NL" +"3276376376","3276376383","DE" +"3276376384","3276376471","NL" +"3276376472","3276376479","DE" +"3276376480","3276376503","NL" +"3276376504","3276376511","DE" +"3276376512","3276376599","NL" +"3276376600","3276376607","DE" +"3276376608","3276376679","NL" +"3276376680","3276376687","DE" +"3276376688","3276376767","NL" +"3276376768","3276376775","DE" +"3276376776","3276376871","NL" +"3276376872","3276376879","DE" +"3276376880","3276376927","NL" +"3276376928","3276376935","DE" +"3276376936","3276377031","NL" +"3276377032","3276377039","DE" +"3276377040","3276377087","NL" +"3276377088","3276377095","DE" +"3276377096","3276377335","NL" +"3276377336","3276377351","DE" +"3276377352","3276377359","NL" +"3276377360","3276377367","DE" +"3276377368","3276377407","NL" +"3276377408","3276377415","DE" +"3276377416","3276377447","NL" +"3276377448","3276377455","DE" +"3276377456","3276377631","NL" +"3276377632","3276377639","DE" +"3276377640","3276377687","NL" +"3276377688","3276377695","DE" +"3276377696","3276377807","NL" +"3276377808","3276377815","DE" +"3276377816","3276377831","NL" +"3276377832","3276377847","DE" +"3276377848","3276377887","NL" +"3276377888","3276377895","DE" +"3276377896","3276377983","NL" +"3276377984","3276377991","DE" +"3276377992","3276378063","NL" +"3276378064","3276378071","DE" +"3276378072","3276378103","NL" +"3276378104","3276378111","DE" +"3276378112","3276378143","NL" +"3276378144","3276378151","DE" +"3276378152","3276378231","NL" +"3276378232","3276378239","DE" +"3276378240","3276378311","NL" +"3276378312","3276378319","DE" +"3276378320","3276378351","NL" +"3276378352","3276378359","DE" +"3276378360","3276378567","NL" +"3276378568","3276378591","DE" +"3276378592","3276378607","NL" +"3276378608","3276378615","DE" +"3276378616","3276378631","NL" +"3276378632","3276378639","DE" +"3276378640","3276378735","NL" +"3276378736","3276378743","DE" +"3276378744","3276378839","NL" +"3276378840","3276378847","DE" +"3276378848","3276378871","NL" +"3276378872","3276378879","DE" +"3276378880","3276378911","NL" +"3276378912","3276378919","DE" +"3276378920","3276378935","NL" +"3276378936","3276378943","DE" +"3276378944","3276378951","NL" +"3276378952","3276378959","DE" +"3276378960","3276378983","NL" +"3276378984","3276378991","DE" +"3276378992","3276379047","NL" +"3276379048","3276379055","DE" +"3276379056","3276379071","NL" +"3276379072","3276379079","DE" +"3276379080","3276379167","NL" +"3276379168","3276379175","DE" +"3276379176","3276379215","NL" +"3276379216","3276379223","DE" +"3276379224","3276379279","NL" +"3276379280","3276379287","DE" +"3276379288","3276379295","NL" +"3276379296","3276379303","DE" +"3276379304","3276379463","NL" +"3276379464","3276379471","DE" +"3276379472","3276379503","NL" +"3276379504","3276379511","DE" +"3276379512","3276379583","NL" +"3276379584","3276379591","DE" +"3276379592","3276379607","NL" +"3276379608","3276379615","DE" +"3276379616","3276379703","NL" +"3276379704","3276379711","DE" +"3276379712","3276379727","NL" +"3276379728","3276379735","DE" +"3276379736","3276379767","NL" +"3276379768","3276379775","DE" +"3276379776","3276379815","NL" +"3276379816","3276379823","DE" +"3276379824","3276379943","NL" +"3276379944","3276379951","DE" +"3276379952","3276379959","NL" +"3276379960","3276379967","DE" +"3276379968","3276380023","NL" +"3276380024","3276380031","DE" +"3276380032","3276380199","NL" +"3276380200","3276380215","DE" +"3276380216","3276380295","NL" +"3276380296","3276380303","DE" +"3276380304","3276380351","NL" +"3276380352","3276380359","DE" +"3276380360","3276380471","NL" +"3276380472","3276380479","DE" +"3276380480","3276380687","NL" +"3276380688","3276380695","DE" +"3276380696","3276380879","NL" +"3276380880","3276380887","DE" +"3276380888","3276380919","NL" +"3276380920","3276380927","DE" +"3276380928","3276381103","NL" +"3276381104","3276381111","DE" +"3276381112","3276381127","NL" +"3276381128","3276381135","DE" +"3276381136","3276381167","NL" +"3276381168","3276381175","DE" +"3276381176","3276381247","NL" +"3276381248","3276381263","DE" +"3276381264","3276381279","NL" +"3276381280","3276381287","DE" +"3276381288","3276381295","NL" +"3276381296","3276381303","DE" +"3276381304","3276381311","NL" +"3276381312","3276381319","DE" +"3276381320","3276381327","NL" +"3276381328","3276381335","DE" +"3276381336","3276381359","NL" +"3276381360","3276381367","DE" +"3276381368","3276381415","NL" +"3276381416","3276381431","DE" +"3276381432","3276381583","NL" +"3276381584","3276381599","DE" +"3276381600","3276381607","NL" +"3276381608","3276381615","DE" +"3276381616","3276381671","NL" +"3276381672","3276381679","DE" +"3276381680","3276381775","NL" +"3276381776","3276381783","DE" +"3276381784","3276381967","NL" +"3276381968","3276381975","DE" +"3276381976","3276382055","NL" +"3276382056","3276382063","DE" +"3276382064","3276382103","NL" +"3276382104","3276382111","DE" +"3276382112","3276382119","NL" +"3276382120","3276382135","DE" +"3276382136","3276382175","NL" +"3276382176","3276382183","DE" +"3276382184","3276382287","NL" +"3276382288","3276382295","DE" +"3276382296","3276382383","NL" +"3276382384","3276382399","DE" +"3276382400","3276382495","NL" +"3276382496","3276382511","DE" +"3276382512","3276382575","NL" +"3276382576","3276382583","DE" +"3276382584","3276382663","NL" +"3276382664","3276382671","DE" +"3276382672","3276382711","NL" +"3276382712","3276382719","DE" +"3276382720","3276382863","NL" +"3276382864","3276382871","DE" +"3276382872","3276382887","NL" +"3276382888","3276382895","DE" +"3276382896","3276383039","NL" +"3276383040","3276383047","DE" +"3276383048","3276383063","NL" +"3276383064","3276383071","DE" +"3276383072","3276383079","NL" +"3276383080","3276383087","DE" +"3276383088","3276383095","NL" +"3276383096","3276383111","DE" +"3276383112","3276383119","NL" +"3276383120","3276383127","DE" +"3276383128","3276383207","NL" +"3276383208","3276383215","DE" +"3276383216","3276383247","NL" +"3276383248","3276383255","DE" +"3276383256","3276383311","NL" +"3276383312","3276383327","DE" +"3276383328","3276383359","NL" +"3276383360","3276383367","DE" +"3276383368","3276383479","NL" +"3276383480","3276383487","DE" +"3276383488","3276383527","NL" +"3276383528","3276383559","DE" +"3276383560","3276383615","NL" +"3276383616","3276383623","DE" +"3276383624","3276383671","NL" +"3276383672","3276383687","DE" +"3276383688","3276383703","NL" +"3276383704","3276383711","DE" +"3276383712","3276383783","NL" +"3276383784","3276383791","DE" +"3276383792","3276383887","NL" +"3276383888","3276383895","DE" +"3276383896","3276384063","NL" +"3276384064","3276384071","DE" +"3276384072","3276384111","NL" +"3276384112","3276384119","DE" +"3276384120","3276384199","NL" +"3276384200","3276384207","DE" +"3276384208","3276384263","NL" +"3276384264","3276384271","DE" +"3276384272","3276384279","NL" +"3276384280","3276384287","DE" +"3276384288","3276384335","NL" +"3276384336","3276384343","DE" +"3276384344","3276384367","NL" +"3276384368","3276384375","DE" +"3276384376","3276384383","NL" +"3276384384","3276384391","DE" +"3276384392","3276384399","NL" +"3276384400","3276384407","DE" +"3276384408","3276384415","NL" +"3276384416","3276384423","DE" +"3276384424","3276384439","NL" +"3276384440","3276384447","DE" +"3276384448","3276384551","NL" +"3276384552","3276384559","DE" +"3276384560","3276384567","NL" +"3276384568","3276384575","DE" +"3276384576","3276384647","NL" +"3276384648","3276384655","DE" +"3276384656","3276384727","NL" +"3276384728","3276384735","DE" +"3276384736","3276384823","NL" +"3276384824","3276384839","DE" +"3276384840","3276384879","NL" +"3276384880","3276384887","DE" +"3276384888","3276384895","NL" +"3276384896","3276384903","DE" +"3276384904","3276385031","NL" +"3276385032","3276385039","DE" +"3276385040","3276385047","NL" +"3276385048","3276385055","DE" +"3276385056","3276385079","NL" +"3276385080","3276385087","DE" +"3276385088","3276385111","NL" +"3276385112","3276385119","DE" +"3276385120","3276385135","NL" +"3276385136","3276385143","DE" +"3276385144","3276385175","NL" +"3276385176","3276385183","DE" +"3276385184","3276385191","NL" +"3276385192","3276385199","DE" +"3276385200","3276385215","NL" +"3276385216","3276385223","DE" +"3276385224","3276385247","NL" +"3276385248","3276385255","DE" +"3276385256","3276385295","NL" +"3276385296","3276385303","DE" +"3276385304","3276385383","NL" +"3276385384","3276385399","DE" +"3276385400","3276385575","NL" +"3276385576","3276385583","DE" +"3276385584","3276385679","NL" +"3276385680","3276385687","DE" +"3276385688","3276385695","NL" +"3276385696","3276385703","DE" +"3276385704","3276385751","NL" +"3276385752","3276385759","DE" +"3276385760","3276385799","NL" +"3276385800","3276385807","DE" +"3276385808","3276385903","NL" +"3276385904","3276385911","DE" +"3276385912","3276385919","NL" +"3276385920","3276385927","DE" +"3276385928","3276385935","NL" +"3276385936","3276385943","DE" +"3276385944","3276385959","NL" +"3276385960","3276385967","DE" +"3276385968","3276386047","NL" +"3276386048","3276386055","DE" +"3276386056","3276386087","NL" +"3276386088","3276386095","DE" +"3276386096","3276386199","NL" +"3276386200","3276386207","DE" +"3276386208","3276386231","NL" +"3276386232","3276386239","DE" +"3276386240","3276386359","NL" +"3276386360","3276386367","DE" +"3276386368","3276386375","NL" +"3276386376","3276386383","DE" +"3276386384","3276386399","NL" +"3276386400","3276386407","DE" +"3276386408","3276386415","NL" +"3276386416","3276386423","DE" +"3276386424","3276386431","NL" +"3276386432","3276386439","DE" +"3276386440","3276386503","NL" +"3276386504","3276386511","DE" +"3276386512","3276386559","NL" +"3276386560","3276386567","DE" +"3276386568","3276386575","NL" +"3276386576","3276386583","DE" +"3276386584","3276386599","NL" +"3276386600","3276386607","DE" +"3276386608","3276386615","NL" +"3276386616","3276386623","DE" +"3276386624","3276386655","NL" +"3276386656","3276386663","DE" +"3276386664","3276386727","NL" +"3276386728","3276386735","DE" +"3276386736","3276386743","NL" +"3276386744","3276386751","DE" +"3276386752","3276386759","NL" +"3276386760","3276386767","DE" +"3276386768","3276386831","NL" +"3276386832","3276386839","DE" +"3276386840","3276386847","NL" +"3276386848","3276386855","DE" +"3276386856","3276386863","NL" +"3276386864","3276386871","DE" +"3276386872","3276386879","NL" +"3276386880","3276386887","DE" +"3276386888","3276386895","NL" +"3276386896","3276386903","DE" +"3276386904","3276386927","NL" +"3276386928","3276386935","DE" +"3276386936","3276386951","NL" +"3276386952","3276386959","DE" +"3276386960","3276386975","NL" +"3276386976","3276386983","DE" +"3276386984","3276387007","NL" +"3276387008","3276387015","DE" +"3276387016","3276387071","NL" +"3276387072","3276387079","DE" +"3276387080","3276387199","NL" +"3276387200","3276387207","DE" +"3276387208","3276387231","NL" +"3276387232","3276387239","DE" +"3276387240","3276387247","NL" +"3276387248","3276387255","DE" +"3276387256","3276387263","NL" +"3276387264","3276387271","DE" +"3276387272","3276387311","NL" +"3276387312","3276387319","DE" +"3276387320","3276387383","NL" +"3276387384","3276387391","DE" +"3276387392","3276387399","NL" +"3276387400","3276387415","DE" +"3276387416","3276387423","NL" +"3276387424","3276387431","DE" +"3276387432","3276387439","NL" +"3276387440","3276387455","DE" +"3276387456","3276387471","NL" +"3276387472","3276387487","DE" +"3276387488","3276387511","NL" +"3276387512","3276387519","DE" +"3276387520","3276387559","NL" +"3276387560","3276387567","DE" +"3276387568","3276387575","NL" +"3276387576","3276387591","DE" +"3276387592","3276387599","NL" +"3276387600","3276387615","DE" +"3276387616","3276387639","NL" +"3276387640","3276387647","DE" +"3276387648","3276387671","NL" +"3276387672","3276387679","DE" +"3276387680","3276387887","NL" +"3276387888","3276387895","DE" +"3276387896","3276387911","NL" +"3276387912","3276387927","DE" +"3276387928","3276387983","NL" +"3276387984","3276387991","DE" +"3276387992","3276388015","NL" +"3276388016","3276388023","DE" +"3276388024","3276388191","NL" +"3276388192","3276388199","DE" +"3276388200","3276388207","NL" +"3276388208","3276388215","DE" +"3276388216","3276388223","NL" +"3276388224","3276388231","DE" +"3276388232","3276388239","NL" +"3276388240","3276388255","DE" +"3276388256","3276388279","NL" +"3276388280","3276388287","DE" +"3276388288","3276388303","NL" +"3276388304","3276388311","DE" +"3276388312","3276388319","NL" +"3276388320","3276388327","DE" +"3276388328","3276388375","NL" +"3276388376","3276388383","DE" +"3276388384","3276388519","NL" +"3276388520","3276388527","DE" +"3276388528","3276388783","NL" +"3276388784","3276388791","DE" +"3276388792","3276388815","NL" +"3276388816","3276388831","DE" +"3276388832","3276388879","NL" +"3276388880","3276388887","DE" +"3276388888","3276388975","NL" +"3276388976","3276388983","DE" +"3276388984","3276389055","NL" +"3276389056","3276389063","DE" +"3276389064","3276389159","NL" +"3276389160","3276389167","DE" +"3276389168","3276389199","NL" +"3276389200","3276389207","DE" +"3276389208","3276389231","NL" +"3276389232","3276389239","DE" +"3276389240","3276389303","NL" +"3276389304","3276389311","DE" +"3276389312","3276389335","NL" +"3276389336","3276389343","DE" +"3276389344","3276389351","NL" +"3276389352","3276389359","DE" +"3276389360","3276389391","NL" +"3276389392","3276389399","DE" +"3276389400","3276389407","NL" +"3276389408","3276389415","DE" +"3276389416","3276389431","NL" +"3276389432","3276389439","DE" +"3276389440","3276389447","NL" +"3276389448","3276389455","DE" +"3276389456","3276389575","NL" +"3276389576","3276389607","DE" +"3276389608","3276389615","NL" +"3276389616","3276389623","DE" +"3276389624","3276389695","NL" +"3276389696","3276389703","DE" +"3276389704","3276389711","NL" +"3276389712","3276389727","DE" +"3276389728","3276389791","NL" +"3276389792","3276389815","DE" +"3276389816","3276389887","NL" +"3276389888","3276389903","DE" +"3276389904","3276389951","NL" +"3276389952","3276389967","DE" +"3276389968","3276390231","NL" +"3276390232","3276390239","DE" +"3276390240","3276390295","NL" +"3276390296","3276390303","DE" +"3276390304","3276390351","NL" +"3276390352","3276390359","DE" +"3276390360","3276390383","NL" +"3276390384","3276390391","DE" +"3276390392","3276390407","NL" +"3276390408","3276390423","DE" +"3276390424","3276390431","NL" +"3276390432","3276390439","DE" +"3276390440","3276390463","NL" +"3276390464","3276390471","DE" +"3276390472","3276390527","NL" +"3276390528","3276390535","DE" +"3276390536","3276390591","NL" +"3276390592","3276390599","DE" +"3276390600","3276390687","NL" +"3276390688","3276390695","DE" +"3276390696","3276390711","NL" +"3276390712","3276390719","DE" +"3276390720","3276390727","NL" +"3276390728","3276390735","DE" +"3276390736","3276390807","NL" +"3276390808","3276390815","DE" +"3276390816","3276390911","NL" +"3276390912","3276390919","DE" +"3276390920","3276390927","NL" +"3276390928","3276390943","DE" +"3276390944","3276390959","NL" +"3276390960","3276390967","DE" +"3276390968","3276390983","NL" +"3276390984","3276390991","DE" +"3276390992","3276391023","NL" +"3276391024","3276391047","DE" +"3276391048","3276391111","NL" +"3276391112","3276391119","DE" +"3276391120","3276391191","NL" +"3276391192","3276391207","DE" +"3276391208","3276391215","NL" +"3276391216","3276391223","DE" +"3276391224","3276391343","NL" +"3276391344","3276391351","DE" +"3276391352","3276391407","NL" +"3276391408","3276391415","DE" +"3276391416","3276391439","NL" +"3276391440","3276391447","DE" +"3276391448","3276391495","NL" +"3276391496","3276391503","DE" +"3276391504","3276391535","NL" +"3276391536","3276391543","DE" +"3276391544","3276391591","NL" +"3276391592","3276391599","DE" +"3276391600","3276391719","NL" +"3276391720","3276391727","DE" +"3276391728","3276391791","NL" +"3276391792","3276391799","DE" +"3276391800","3276391815","NL" +"3276391816","3276391823","DE" +"3276391824","3276391895","NL" +"3276391896","3276391903","DE" +"3276391904","3276391935","NL" +"3276391936","3276391943","DE" +"3276391944","3276392079","NL" +"3276392080","3276392087","DE" +"3276392088","3276392119","NL" +"3276392120","3276392127","DE" +"3276392128","3276392143","NL" +"3276392144","3276392151","DE" +"3276392152","3276392239","NL" +"3276392240","3276392247","DE" +"3276392248","3276392255","NL" +"3276392256","3276392263","DE" +"3276392264","3276392279","NL" +"3276392280","3276392287","DE" +"3276392288","3276392319","NL" +"3276392320","3276392327","DE" +"3276392328","3276392351","NL" +"3276392352","3276392359","DE" +"3276392360","3276392423","NL" +"3276392424","3276392431","DE" +"3276392432","3276392519","NL" +"3276392520","3276392527","DE" +"3276392528","3276392615","NL" +"3276392616","3276392631","DE" +"3276392632","3276392679","NL" +"3276392680","3276392687","DE" +"3276392688","3276392751","NL" +"3276392752","3276392759","DE" +"3276392760","3276392903","NL" +"3276392904","3276392911","DE" +"3276392912","3276392935","NL" +"3276392936","3276392943","DE" +"3276392944","3276392959","NL" +"3276392960","3276392967","DE" +"3276392968","3276392991","NL" +"3276392992","3276392999","DE" +"3276393000","3276393007","NL" +"3276393008","3276393023","DE" +"3276393024","3276393159","NL" +"3276393160","3276393167","DE" +"3276393168","3276393399","NL" +"3276393400","3276393407","DE" +"3276393408","3276393423","NL" +"3276393424","3276393431","DE" +"3276393432","3276393447","NL" +"3276393448","3276393455","DE" +"3276393456","3276393463","NL" +"3276393464","3276393479","DE" +"3276393480","3276393511","NL" +"3276393512","3276393519","DE" +"3276393520","3276393599","NL" +"3276393600","3276393615","DE" +"3276393616","3276393695","NL" +"3276393696","3276393703","DE" +"3276393704","3276393783","NL" +"3276393784","3276393791","DE" +"3276393792","3276393799","NL" +"3276393800","3276393815","DE" +"3276393816","3276393823","NL" +"3276393824","3276393831","DE" +"3276393832","3276393871","NL" +"3276393872","3276393879","DE" +"3276393880","3276393903","NL" +"3276393904","3276393911","DE" +"3276393912","3276393983","NL" +"3276393984","3276393999","DE" +"3276394000","3276394015","NL" +"3276394016","3276394023","DE" +"3276394024","3276394063","NL" +"3276394064","3276394071","DE" +"3276394072","3276394191","NL" +"3276394192","3276394199","DE" +"3276394200","3276394215","NL" +"3276394216","3276394223","DE" +"3276394224","3276394279","NL" +"3276394280","3276394287","DE" +"3276394288","3276394327","NL" +"3276394328","3276394335","DE" +"3276394336","3276394351","NL" +"3276394352","3276394359","DE" +"3276394360","3276394471","NL" +"3276394472","3276394487","DE" +"3276394488","3276394495","NL" +"3276394496","3276394511","DE" +"3276394512","3276394575","NL" +"3276394576","3276394591","DE" +"3276394592","3276394671","NL" +"3276394672","3276394687","DE" +"3276394688","3276394695","NL" +"3276394696","3276394703","DE" +"3276394704","3276394775","NL" +"3276394776","3276394783","DE" +"3276394784","3276394815","NL" +"3276394816","3276394823","DE" +"3276394824","3276394871","NL" +"3276394872","3276394879","DE" +"3276394880","3276394919","NL" +"3276394920","3276394927","DE" +"3276394928","3276394951","NL" +"3276394952","3276394959","DE" +"3276394960","3276395047","NL" +"3276395048","3276395055","DE" +"3276395056","3276395063","NL" +"3276395064","3276395071","DE" +"3276395072","3276395095","NL" +"3276395096","3276395103","DE" +"3276395104","3276395175","NL" +"3276395176","3276395183","DE" +"3276395184","3276395191","NL" +"3276395192","3276395199","DE" +"3276395200","3276395295","NL" +"3276395296","3276395303","DE" +"3276395304","3276395319","NL" +"3276395320","3276395327","DE" +"3276395328","3276395423","NL" +"3276395424","3276395439","DE" +"3276395440","3276395487","NL" +"3276395488","3276395495","DE" +"3276395496","3276395543","NL" +"3276395544","3276395551","DE" +"3276395552","3276395567","NL" +"3276395568","3276395575","DE" +"3276395576","3276395599","NL" +"3276395600","3276395607","DE" +"3276395608","3276395647","NL" +"3276395648","3276395655","DE" +"3276395656","3276395687","NL" +"3276395688","3276395695","DE" +"3276395696","3276395743","NL" +"3276395744","3276395751","DE" +"3276395752","3276395759","NL" +"3276395760","3276395767","DE" +"3276395768","3276395807","NL" +"3276395808","3276395815","DE" +"3276395816","3276395831","NL" +"3276395832","3276395839","DE" +"3276395840","3276395871","NL" +"3276395872","3276395879","DE" +"3276395880","3276395959","NL" +"3276395960","3276395975","DE" +"3276395976","3276396007","NL" +"3276396008","3276396023","DE" +"3276396024","3276396047","NL" +"3276396048","3276396055","DE" +"3276396056","3276396095","NL" +"3276396096","3276396103","DE" +"3276396104","3276396111","NL" +"3276396112","3276396119","DE" +"3276396120","3276396207","NL" +"3276396208","3276396223","DE" +"3276396224","3276396287","NL" +"3276396288","3276396295","DE" +"3276396296","3276396319","NL" +"3276396320","3276396327","DE" +"3276396328","3276396351","NL" +"3276396352","3276396359","DE" +"3276396360","3276396399","NL" +"3276396400","3276396415","DE" +"3276396416","3276396431","NL" +"3276396432","3276396439","DE" +"3276396440","3276396471","NL" +"3276396472","3276396495","DE" +"3276396496","3276396527","NL" +"3276396528","3276396535","DE" +"3276396536","3276396583","NL" +"3276396584","3276396591","DE" +"3276396592","3276396599","NL" +"3276396600","3276396607","DE" +"3276396608","3276396615","NL" +"3276396616","3276396623","DE" +"3276396624","3276396655","NL" +"3276396656","3276396663","DE" +"3276396664","3276396719","NL" +"3276396720","3276396735","DE" +"3276396736","3276396751","NL" +"3276396752","3276396767","DE" +"3276396768","3276396783","NL" +"3276396784","3276396791","DE" +"3276396792","3276396991","NL" +"3276396992","3276397007","DE" +"3276397008","3276397031","NL" +"3276397032","3276397039","DE" +"3276397040","3276397055","NL" +"3276397056","3276397063","DE" +"3276397064","3276397215","NL" +"3276397216","3276397223","DE" +"3276397224","3276397327","NL" +"3276397328","3276397335","DE" +"3276397336","3276397343","NL" +"3276397344","3276397351","DE" +"3276397352","3276397479","NL" +"3276397480","3276397487","DE" +"3276397488","3276397535","NL" +"3276397536","3276397543","DE" +"3276397544","3276397559","NL" +"3276397560","3276397567","DE" +"3276397568","3276397743","NL" +"3276397744","3276397751","DE" +"3276397752","3276397791","NL" +"3276397792","3276397815","DE" +"3276397816","3276397871","NL" +"3276397872","3276397879","DE" +"3276397880","3276397895","NL" +"3276397896","3276397911","DE" +"3276397912","3276397935","NL" +"3276397936","3276397943","DE" +"3276397944","3276397967","NL" +"3276397968","3276397975","DE" +"3276397976","3276397983","NL" +"3276397984","3276397991","DE" +"3276397992","3276398047","NL" +"3276398048","3276398055","DE" +"3276398056","3276398071","NL" +"3276398072","3276398079","DE" +"3276398080","3276398199","NL" +"3276398200","3276398207","DE" +"3276398208","3276398255","NL" +"3276398256","3276398271","DE" +"3276398272","3276398287","NL" +"3276398288","3276398295","DE" +"3276398296","3276398311","NL" +"3276398312","3276398319","DE" +"3276398320","3276398351","NL" +"3276398352","3276398359","DE" +"3276398360","3276398367","NL" +"3276398368","3276398375","DE" +"3276398376","3276398423","NL" +"3276398424","3276398447","DE" +"3276398448","3276398455","NL" +"3276398456","3276398463","DE" +"3276398464","3276398511","NL" +"3276398512","3276398519","DE" +"3276398520","3276398559","NL" +"3276398560","3276398567","DE" +"3276398568","3276398575","NL" +"3276398576","3276398583","DE" +"3276398584","3276398591","NL" +"3276398592","3276398607","DE" +"3276398608","3276398623","NL" +"3276398624","3276398631","DE" +"3276398632","3276398679","NL" +"3276398680","3276398687","DE" +"3276398688","3276398783","NL" +"3276398784","3276398807","DE" +"3276398808","3276398839","NL" +"3276398840","3276398855","DE" +"3276398856","3276398927","NL" +"3276398928","3276398935","DE" +"3276398936","3276398959","NL" +"3276398960","3276398967","DE" +"3276398968","3276398983","NL" +"3276398984","3276398991","DE" +"3276398992","3276399015","NL" +"3276399016","3276399023","DE" +"3276399024","3276399031","NL" +"3276399032","3276399039","DE" +"3276399040","3276399079","NL" +"3276399080","3276399087","DE" +"3276399088","3276399191","NL" +"3276399192","3276399199","DE" +"3276399200","3276399279","NL" +"3276399280","3276399287","DE" +"3276399288","3276399319","NL" +"3276399320","3276399327","DE" +"3276399328","3276399495","NL" +"3276399496","3276399503","DE" +"3276399504","3276399511","NL" +"3276399512","3276399519","DE" +"3276399520","3276399527","NL" +"3276399528","3276399535","DE" +"3276399536","3276399583","NL" +"3276399584","3276399615","DE" +"3276399616","3276399679","NL" +"3276399680","3276399687","DE" +"3276399688","3276399807","NL" +"3276399808","3276399823","DE" +"3276399824","3276399895","NL" +"3276399896","3276399903","DE" +"3276399904","3276399935","NL" +"3276399936","3276399951","DE" +"3276399952","3276399983","NL" +"3276399984","3276399991","DE" +"3276399992","3276400007","NL" +"3276400008","3276400015","DE" +"3276400016","3276400023","NL" +"3276400024","3276400031","DE" +"3276400032","3276400087","NL" +"3276400088","3276400095","DE" +"3276400096","3276400151","NL" +"3276400152","3276400159","DE" +"3276400160","3276400223","NL" +"3276400224","3276400231","DE" +"3276400232","3276400239","NL" +"3276400240","3276400247","DE" +"3276400248","3276400295","NL" +"3276400296","3276400303","DE" +"3276400304","3276400343","NL" +"3276400344","3276400351","DE" +"3276400352","3276400487","NL" +"3276400488","3276400495","DE" +"3276400496","3276400503","NL" +"3276400504","3276400519","DE" +"3276400520","3276400527","NL" +"3276400528","3276400535","DE" +"3276400536","3276400543","NL" +"3276400544","3276400551","DE" +"3276400552","3276400639","NL" +"3276400640","3276400647","DE" +"3276400648","3276400839","NL" +"3276400840","3276400847","DE" +"3276400848","3276400855","NL" +"3276400856","3276400863","DE" +"3276400864","3276400895","NL" +"3276400896","3276400911","DE" +"3276400912","3276401023","NL" +"3276401024","3276401031","DE" +"3276401032","3276401063","NL" +"3276401064","3276401071","DE" +"3276401072","3276401087","NL" +"3276401088","3276401095","DE" +"3276401096","3276401111","NL" +"3276401112","3276401119","DE" +"3276401120","3276401167","NL" +"3276401168","3276401175","DE" +"3276401176","3276401215","NL" +"3276401216","3276401223","DE" +"3276401224","3276401239","NL" +"3276401240","3276401247","DE" +"3276401248","3276401279","NL" +"3276401280","3276401287","DE" +"3276401288","3276401327","NL" +"3276401328","3276401335","DE" +"3276401336","3276401391","NL" +"3276401392","3276401399","DE" +"3276401400","3276401455","NL" +"3276401456","3276401463","DE" +"3276401464","3276401535","NL" +"3276401536","3276401543","DE" +"3276401544","3276401583","NL" +"3276401584","3276401591","DE" +"3276401592","3276401615","NL" +"3276401616","3276401623","DE" +"3276401624","3276401703","NL" +"3276401704","3276401711","DE" +"3276401712","3276401727","NL" +"3276401728","3276401735","DE" +"3276401736","3276401743","NL" +"3276401744","3276401759","DE" +"3276401760","3276401775","NL" +"3276401776","3276401783","DE" +"3276401784","3276401855","NL" +"3276401856","3276401863","DE" +"3276401864","3276401919","NL" +"3276401920","3276401927","DE" +"3276401928","3276401943","NL" +"3276401944","3276401959","DE" +"3276401960","3276401975","NL" +"3276401976","3276401983","DE" +"3276401984","3276401991","NL" +"3276401992","3276402007","DE" +"3276402008","3276402055","NL" +"3276402056","3276402063","DE" +"3276402064","3276402271","NL" +"3276402272","3276402279","DE" +"3276402280","3276402303","NL" +"3276402304","3276402311","DE" +"3276402312","3276402327","NL" +"3276402328","3276402351","DE" +"3276402352","3276402383","NL" +"3276402384","3276402391","DE" +"3276402392","3276402415","NL" +"3276402416","3276402423","DE" +"3276402424","3276402439","NL" +"3276402440","3276402447","DE" +"3276402448","3276402503","NL" +"3276402504","3276402511","DE" +"3276402512","3276402519","NL" +"3276402520","3276402527","DE" +"3276402528","3276402591","NL" +"3276402592","3276402599","DE" +"3276402600","3276402607","NL" +"3276402608","3276402615","DE" +"3276402616","3276402639","NL" +"3276402640","3276402647","DE" +"3276402648","3276402655","NL" +"3276402656","3276402671","DE" +"3276402672","3276402711","NL" +"3276402712","3276402719","DE" +"3276402720","3276402735","NL" +"3276402736","3276402743","DE" +"3276402744","3276402759","NL" +"3276402760","3276402767","DE" +"3276402768","3276402783","NL" +"3276402784","3276402791","DE" +"3276402792","3276402847","NL" +"3276402848","3276402855","DE" +"3276402856","3276402959","NL" +"3276402960","3276402967","DE" +"3276402968","3276402975","NL" +"3276402976","3276402983","DE" +"3276402984","3276403007","NL" +"3276403008","3276403015","DE" +"3276403016","3276403023","NL" +"3276403024","3276403031","DE" +"3276403032","3276403047","NL" +"3276403048","3276403055","DE" +"3276403056","3276403135","NL" +"3276403136","3276403143","DE" +"3276403144","3276403151","NL" +"3276403152","3276403159","DE" +"3276403160","3276403167","NL" +"3276403168","3276403191","DE" +"3276403192","3276403239","NL" +"3276403240","3276403247","DE" +"3276403248","3276403271","NL" +"3276403272","3276403279","DE" +"3276403280","3276403287","NL" +"3276403288","3276403295","DE" +"3276403296","3276403343","NL" +"3276403344","3276403351","DE" +"3276403352","3276403367","NL" +"3276403368","3276403375","DE" +"3276403376","3276403399","NL" +"3276403400","3276403407","DE" +"3276403408","3276403479","NL" +"3276403480","3276403487","DE" +"3276403488","3276403495","NL" +"3276403496","3276403503","DE" +"3276403504","3276403511","NL" +"3276403512","3276403519","DE" +"3276403520","3276403527","NL" +"3276403528","3276403535","DE" +"3276403536","3276403567","NL" +"3276403568","3276403583","DE" +"3276403584","3276403679","NL" +"3276403680","3276403687","DE" +"3276403688","3276403799","NL" +"3276403800","3276403807","DE" +"3276403808","3276403839","NL" +"3276403840","3276403847","DE" +"3276403848","3276403967","NL" +"3276403968","3276403975","DE" +"3276403976","3276403983","NL" +"3276403984","3276403991","DE" +"3276403992","3276404023","NL" +"3276404024","3276404031","DE" +"3276404032","3276404047","NL" +"3276404048","3276404055","DE" +"3276404056","3276404079","NL" +"3276404080","3276404087","DE" +"3276404088","3276404119","NL" +"3276404120","3276404127","DE" +"3276404128","3276404399","NL" +"3276404400","3276404407","DE" +"3276404408","3276404447","NL" +"3276404448","3276404455","DE" +"3276404456","3276404479","NL" +"3276404480","3276404487","DE" +"3276404488","3276404639","NL" +"3276404640","3276404647","DE" +"3276404648","3276404719","NL" +"3276404720","3276404743","DE" +"3276404744","3276404903","NL" +"3276404904","3276404911","DE" +"3276404912","3276404935","NL" +"3276404936","3276404943","DE" +"3276404944","3276405023","NL" +"3276405024","3276405031","DE" +"3276405032","3276405063","NL" +"3276405064","3276405079","DE" +"3276405080","3276405263","NL" +"3276405264","3276405271","DE" +"3276405272","3276405327","NL" +"3276405328","3276405335","DE" +"3276405336","3276405391","NL" +"3276405392","3276405399","DE" +"3276405400","3276405679","NL" +"3276405680","3276405687","DE" +"3276405688","3276405719","NL" +"3276405720","3276405735","DE" +"3276405736","3276405759","NL" +"3276405760","3276405767","DE" +"3276405768","3276405775","NL" +"3276405776","3276405783","DE" +"3276405784","3276405943","NL" +"3276405944","3276405951","DE" +"3276405952","3276406159","NL" +"3276406160","3276406167","DE" +"3276406168","3276406175","NL" +"3276406176","3276406183","DE" +"3276406184","3276406207","NL" +"3276406208","3276406215","DE" +"3276406216","3276406287","NL" +"3276406288","3276406295","DE" +"3276406296","3276406375","NL" +"3276406376","3276406383","DE" +"3276406384","3276406407","NL" +"3276406408","3276406415","DE" +"3276406416","3276406511","NL" +"3276406512","3276406519","DE" +"3276406520","3276406559","NL" +"3276406560","3276406567","DE" +"3276406568","3276406639","NL" +"3276406640","3276406647","DE" +"3276406648","3276406759","NL" +"3276406760","3276406767","DE" +"3276406768","3276406783","NL" +"3276406784","3276414975","FI" +"3276414976","3276415999","DK" +"3276416000","3276417023","SE" +"3276417024","3276419071","DE" +"3276419072","3276420095","PL" +"3276420096","3276421119","GB" +"3276421120","3276422143","PL" +"3276422144","3276422655","GB" +"3276422656","3276423167","RU" +"3276423168","3276423423","PL" +"3276423424","3276423679","NL" +"3276423680","3276423935","SE" +"3276423936","3276424191","UA" +"3276424192","3276424447","GB" +"3276424448","3276424703","PL" +"3276424704","3276424959","DE" +"3276424960","3276425215","RO" +"3276425216","3276425471","UA" +"3276425472","3276425727","DE" +"3276425728","3276425983","RU" +"3276425984","3276426239","IT" +"3276426240","3276426495","CZ" +"3276426496","3276426751","DK" +"3276426752","3276427007","RO" +"3276427008","3276427263","PL" +"3276427264","3276427519","FR" +"3276427520","3276427775","IT" +"3276427776","3276428031","RU" +"3276428032","3276428287","GB" +"3276428288","3276428543","RU" +"3276428544","3276428799","BG" +"3276428800","3276429055","DE" +"3276429056","3276429311","NL" +"3276429312","3276430079","RU" +"3276430080","3276430591","PL" +"3276430592","3276430847","GB" +"3276430848","3276431103","DE" +"3276431104","3276431359","RU" +"3276431360","3276447743","GB" +"3276447744","3276451583","DE" +"3276451584","3276455935","EU" +"3276455936","3276464127","BE" +"3276464128","3276472319","GR" +"3276472320","3276472575","EU" +"3276472576","3276472831","AT" +"3276472832","3276472863","EU" +"3276472864","3276472879","AT" +"3276472880","3276473103","EU" +"3276473104","3276473111","AT" +"3276473112","3276473119","EU" +"3276473120","3276473135","AT" +"3276473136","3276473143","EU" +"3276473144","3276473199","AT" +"3276473200","3276473215","EU" +"3276473216","3276473279","AT" +"3276473280","3276473295","EU" +"3276473296","3276473311","AT" +"3276473312","3276473343","EU" +"3276473344","3276473855","AT" +"3276473856","3276474271","EU" +"3276474272","3276474295","AT" +"3276474296","3276474319","EU" +"3276474320","3276474367","AT" +"3276474368","3276474623","EU" +"3276474624","3276474879","GB" +"3276474880","3276475007","EU" +"3276475008","3276475023","IT" +"3276475024","3276475039","FR" +"3276475040","3276475055","EU" +"3276475056","3276475071","IT" +"3276475072","3276475903","EU" +"3276475904","3276476111","IT" +"3276476112","3276476119","GB" +"3276476120","3276476159","IT" +"3276476160","3276476415","EU" +"3276476416","3276476671","CH" +"3276476672","3276477439","EU" +"3276477440","3276477983","CH" +"3276477984","3276478319","EU" +"3276478320","3276478335","CH" +"3276478336","3276478463","EU" +"3276478464","3276479167","FR" +"3276479168","3276479199","EU" +"3276479200","3276479215","FR" +"3276479216","3276479223","EU" +"3276479224","3276479279","FR" +"3276479280","3276479343","EU" +"3276479344","3276479351","GB" +"3276479352","3276479359","EU" +"3276479360","3276479615","FR" +"3276479616","3276479647","EU" +"3276479648","3276479743","FR" +"3276479744","3276479999","EU" +"3276480000","3276480143","FR" +"3276480144","3276480151","EU" +"3276480152","3276480159","FR" +"3276480160","3276480191","EU" +"3276480192","3276480319","FR" +"3276480320","3276480335","EU" +"3276480336","3276480375","FR" +"3276480376","3276480399","EU" +"3276480400","3276480439","FR" +"3276480440","3276480455","EU" +"3276480456","3276480479","FR" +"3276480480","3276480511","EU" +"3276480512","3276480767","RU" +"3276480768","3276481023","EU" +"3276481024","3276481535","RU" +"3276481536","3276482559","EU" +"3276482560","3276482815","GR" +"3276482816","3276483071","EU" +"3276483072","3276483359","GR" +"3276483360","3276483391","EU" +"3276483392","3276483519","GR" +"3276483520","3276483583","EU" +"3276483584","3276483711","GR" +"3276483712","3276483839","EU" +"3276483840","3276484351","GR" +"3276484352","3276484383","EU" +"3276484384","3276484479","GR" +"3276484480","3276484607","EU" +"3276484608","3276484863","SK" +"3276484864","3276485631","EU" +"3276485632","3276486655","GB" +"3276486656","3276486911","EU" +"3276486912","3276487167","GR" +"3276487168","3276488959","EU" +"3276488960","3276489215","CZ" +"3276489216","3276490751","EU" +"3276490752","3276491263","NL" +"3276491264","3276491327","CZ" +"3276491328","3276491359","EU" +"3276491360","3276491391","NO" +"3276491392","3276491775","CZ" +"3276491776","3276491847","GB" +"3276491848","3276491855","EU" +"3276491856","3276492047","GB" +"3276492048","3276492063","EU" +"3276492064","3276492127","GB" +"3276492128","3276492143","EU" +"3276492144","3276492151","GB" +"3276492152","3276492287","EU" +"3276492288","3276492831","GB" +"3276492832","3276492839","EU" +"3276492840","3276493135","GB" +"3276493136","3276493151","EU" +"3276493152","3276493215","GB" +"3276493216","3276493247","EU" +"3276493248","3276494367","GB" +"3276494368","3276494415","EU" +"3276494416","3276494471","GB" +"3276494472","3276494479","EU" +"3276494480","3276495439","GB" +"3276495440","3276495455","EU" +"3276495456","3276495503","GB" +"3276495504","3276495519","EU" +"3276495520","3276495543","GB" +"3276495544","3276495551","EU" +"3276495552","3276495763","GB" +"3276495764","3276495767","EU" +"3276495768","3276495831","GB" +"3276495832","3276495839","EU" +"3276495840","3276496639","GB" +"3276496640","3276496895","EU" +"3276496896","3276497279","DE" +"3276497280","3276497295","EU" +"3276497296","3276497311","DE" +"3276497312","3276497343","EU" +"3276497344","3276497375","DE" +"3276497376","3276497407","EU" +"3276497408","3276497599","DE" +"3276497600","3276497607","EU" +"3276497608","3276497647","DE" +"3276497648","3276497663","EU" +"3276497664","3276497919","DE" +"3276497920","3276498047","GB" +"3276498048","3276498175","EU" +"3276498176","3276498431","GB" +"3276498432","3276499199","DE" +"3276499200","3276499455","EU" +"3276499456","3276499503","DE" +"3276499504","3276499519","EU" +"3276499520","3276499615","DE" +"3276499616","3276499679","EU" +"3276499680","3276499759","DE" +"3276499760","3276499791","EU" +"3276499792","3276499823","DE" +"3276499824","3276499839","EU" +"3276499840","3276499999","DE" +"3276500000","3276500031","CH" +"3276500032","3276500095","DE" +"3276500096","3276500127","EU" +"3276500128","3276500223","DE" +"3276500224","3276500479","EU" +"3276500480","3276500735","DE" +"3276500736","3276500991","EU" +"3276500992","3276501023","DE" +"3276501024","3276501055","FR" +"3276501056","3276501119","EU" +"3276501120","3276501151","DE" +"3276501152","3276501167","EU" +"3276501168","3276501183","DE" +"3276501184","3276501247","EU" +"3276501248","3276501503","DE" +"3276501504","3276502271","EU" +"3276502272","3276505087","DE" +"3276505088","3276505231","ZA" +"3276505232","3276505247","EU" +"3276505248","3276505599","ZA" +"3276505600","3276505855","EU" +"3276505856","3276505887","ZA" +"3276505888","3276505903","EU" +"3276505904","3276505919","ZA" +"3276505920","3276505983","EU" +"3276505984","3276506047","ZA" +"3276506048","3276506071","EU" +"3276506072","3276506079","ZA" +"3276506080","3276506095","EU" +"3276506096","3276506159","ZA" +"3276506160","3276506175","EU" +"3276506176","3276506191","ZA" +"3276506192","3276506207","EU" +"3276506208","3276506367","ZA" +"3276506368","3276506623","EU" +"3276506624","3276507135","ZA" +"3276507136","3276507231","CH" +"3276507232","3276507391","EU" +"3276507392","3276507647","CH" +"3276507648","3276508159","EU" +"3276508160","3276508327","GB" +"3276508328","3276508351","EU" +"3276508352","3276508415","FR" +"3276508416","3276508671","GB" +"3276508672","3276508679","EU" +"3276508680","3276508927","GB" +"3276508928","3276509183","EU" +"3276509184","3276510207","IT" +"3276510208","3276510719","EU" +"3276510720","3276510751","IT" +"3276510752","3276510783","EU" +"3276510784","3276510815","IT" +"3276510816","3276510847","EU" +"3276510848","3276510911","GB" +"3276510912","3276511487","EU" +"3276511488","3276511775","ZA" +"3276511776","3276511823","EU" +"3276511824","3276511839","ZA" +"3276511840","3276511871","EU" +"3276511872","3276511919","ZA" +"3276511920","3276511935","EU" +"3276511936","3276511951","ZA" +"3276511952","3276511967","EU" +"3276511968","3276512191","ZA" +"3276512192","3276512199","EU" +"3276512200","3276512207","ZA" +"3276512208","3276512255","EU" +"3276512256","3276513023","ZA" +"3276513024","3276513535","EU" +"3276513536","3276513551","CH" +"3276513552","3276513559","EU" +"3276513560","3276513567","CH" +"3276513568","3276514335","EU" +"3276514336","3276514367","CH" +"3276514368","3276514559","EU" +"3276514560","3276514815","CH" +"3276514816","3276515327","EU" +"3276515328","3276515583","ES" +"3276515584","3276517375","EU" +"3276517376","3276517503","NL" +"3276517504","3276517631","EU" +"3276517632","3276517647","NL" +"3276517648","3276517655","EU" +"3276517656","3276517759","NL" +"3276517760","3276517791","EU" +"3276517792","3276517887","NL" +"3276517888","3276517903","EU" +"3276517904","3276517951","NL" +"3276517952","3276518015","EU" +"3276518016","3276518023","NL" +"3276518024","3276518095","EU" +"3276518096","3276518111","NL" +"3276518112","3276518127","EU" +"3276518128","3276518191","NL" +"3276518192","3276518207","EU" +"3276518208","3276518271","NL" +"3276518272","3276518303","EU" +"3276518304","3276518335","NL" +"3276518336","3276518351","EU" +"3276518352","3276518367","NL" +"3276518368","3276518911","EU" +"3276518912","3276519423","BE" +"3276519424","3276519679","EU" +"3276519680","3276520191","DK" +"3276520192","3276520223","BE" +"3276520224","3276520255","GB" +"3276520256","3276520407","BE" +"3276520408","3276520423","EU" +"3276520424","3276520447","BE" +"3276520448","3276520463","EU" +"3276520464","3276520591","SE" +"3276520592","3276520607","EU" +"3276520608","3276520623","SE" +"3276520624","3276520639","EU" +"3276520640","3276520703","SE" +"3276520704","3276520767","EU" +"3276520768","3276520815","SE" +"3276520816","3276520831","EU" +"3276520832","3276520927","SE" +"3276520928","3276520943","EU" +"3276520944","3276521215","SE" +"3276521216","3276521471","EU" +"3276521472","3276521487","RO" +"3276521488","3276521983","EU" +"3276521984","3276523519","NL" +"3276523520","3276523791","EU" +"3276523792","3276523911","NO" +"3276523912","3276523919","EU" +"3276523920","3276523951","NO" +"3276523952","3276523967","EU" +"3276523968","3276524031","NO" +"3276524032","3276524063","EU" +"3276524064","3276524095","TR" +"3276524096","3276524191","EU" +"3276524192","3276524287","TR" +"3276524288","3276524543","EU" +"3276524544","3276524799","GB" +"3276524800","3276524855","PT" +"3276524856","3276525039","EU" +"3276525040","3276525055","PT" +"3276525056","3276525311","FI" +"3276525312","3276525503","EU" +"3276525504","3276525527","HR" +"3276525528","3276525535","PL" +"3276525536","3276525567","HR" +"3276525568","3276526079","EU" +"3276526080","3276526087","CH" +"3276526088","3276526095","EU" +"3276526096","3276526111","CH" +"3276526112","3276526143","EU" +"3276526144","3276526159","CH" +"3276526160","3276526335","EU" +"3276526336","3276526591","CH" +"3276526592","3276527103","EU" +"3276527104","3276527135","SI" +"3276527136","3276527167","EU" +"3276527168","3276527199","SI" +"3276527200","3276527215","EU" +"3276527216","3276527231","SI" +"3276527232","3276527359","EU" +"3276527360","3276527615","SI" +"3276527616","3276527743","PK" +"3276527744","3276527871","EU" +"3276527872","3276527999","PK" +"3276528000","3276528127","EU" +"3276528128","3276528223","BE" +"3276528224","3276528239","GB" +"3276528240","3276528247","BE" +"3276528248","3276528255","GB" +"3276528256","3276528351","BE" +"3276528352","3276528359","GB" +"3276528360","3276528367","FR" +"3276528368","3276528399","BE" +"3276528400","3276528447","EU" +"3276528448","3276528503","BE" +"3276528504","3276528511","EU" +"3276528512","3276528519","BE" +"3276528520","3276528527","EU" +"3276528528","3276528543","BE" +"3276528544","3276528559","EU" +"3276528560","3276528567","BE" +"3276528568","3276528575","EU" +"3276528576","3276528719","BE" +"3276528720","3276528727","EU" +"3276528728","3276528735","BE" +"3276528736","3276528767","EU" +"3276528768","3276528799","BE" +"3276528800","3276528815","GB" +"3276528816","3276528831","EU" +"3276528832","3276528895","BE" +"3276528896","3276528927","IE" +"3276528928","3276528935","EU" +"3276528936","3276529151","IE" +"3276529152","3276529167","TR" +"3276529168","3276529183","EU" +"3276529184","3276529279","TR" +"3276529280","3276529327","EU" +"3276529328","3276529351","TR" +"3276529352","3276529359","EU" +"3276529360","3276529375","TR" +"3276529376","3276529391","EU" +"3276529392","3276529407","TR" +"3276529408","3276529663","EU" +"3276529664","3276530439","NL" +"3276530440","3276530447","EU" +"3276530448","3276530495","NL" +"3276530496","3276530559","EU" +"3276530560","3276532639","NL" +"3276532640","3276532640","EU" +"3276532641","3276532735","NL" +"3276532736","3276532775","TR" +"3276532776","3276532783","EU" +"3276532784","3276532791","TR" +"3276532792","3276532855","EU" +"3276532856","3276532991","TR" +"3276532992","3276533023","HU" +"3276533024","3276533071","EU" +"3276533072","3276533087","HU" +"3276533088","3276533119","EU" +"3276533120","3276533183","HU" +"3276533184","3276533247","EU" +"3276533248","3276533375","TR" +"3276533376","3276533775","EU" +"3276533776","3276533791","GB" +"3276533792","3276533823","EU" +"3276533824","3276533887","IE" +"3276533888","3276533927","EU" +"3276533928","3276533951","IE" +"3276533952","3276533983","EU" +"3276533984","3276534015","IE" +"3276534016","3276534271","EU" +"3276534272","3276534415","GB" +"3276534416","3276534431","NL" +"3276534432","3276534463","GB" +"3276534464","3276534495","FR" +"3276534496","3276534543","EU" +"3276534544","3276534591","NL" +"3276534592","3276534623","EU" +"3276534624","3276534655","NL" +"3276534656","3276534687","EU" +"3276534688","3276534719","NL" +"3276534720","3276534783","EU" +"3276534784","3276534879","NL" +"3276534880","3276534887","EU" +"3276534888","3276534895","NL" +"3276534896","3276534911","EU" +"3276534912","3276534919","NL" +"3276534920","3276535015","EU" +"3276535016","3276535039","GB" +"3276535040","3276535063","RU" +"3276535064","3276535071","LV" +"3276535072","3276535103","RU" +"3276535104","3276535311","EU" +"3276535312","3276535319","FI" +"3276535320","3276535335","EU" +"3276535336","3276535343","FI" +"3276535344","3276535351","EU" +"3276535352","3276535359","FI" +"3276535360","3276535375","EU" +"3276535376","3276535455","FI" +"3276535456","3276535551","EU" +"3276535552","3276535807","PK" +"3276535808","3276536063","FI" +"3276536064","3276536319","EU" +"3276536320","3276536430","ES" +"3276536431","3276536431","EU" +"3276536432","3276536511","ES" +"3276536512","3276536583","EU" +"3276536584","3276536591","HR" +"3276536592","3276536639","EU" +"3276536640","3276536675","HU" +"3276536676","3276536687","EU" +"3276536688","3276536711","HU" +"3276536712","3276536735","EU" +"3276536736","3276536743","HU" +"3276536744","3276536831","EU" +"3276536832","3276536895","ES" +"3276536896","3276536959","EU" +"3276536960","3276537007","ES" +"3276537008","3276537151","EU" +"3276537152","3276537215","AT" +"3276537216","3276537343","EU" +"3276537344","3276537599","AT" +"3276537600","3276537663","GR" +"3276537664","3276537855","EU" +"3276537856","3276668927","ES" +"3276668928","3276677119","MC" +"3276677120","3276678143","HR" +"3276678144","3276678655","SE" +"3276678656","3276679167","UA" +"3276679168","3276679679","DE" +"3276679680","3276680191","RO" +"3276680192","3276680703","SK" +"3276680704","3276681215","AT" +"3276681216","3276681727","PL" +"3276681728","3276682239","BE" +"3276682240","3276682751","AT" +"3276682752","3276683263","GB" +"3276683264","3276684287","UA" +"3276684288","3276684799","RU" +"3276684800","3276685311","DE" +"3276685312","3276685823","RO" +"3276685824","3276686335","PL" +"3276686336","3276686847","UA" +"3276686848","3276687359","FI" +"3276687360","3276687871","RU" +"3276687872","3276688383","KW" +"3276688384","3276688895","DE" +"3276688896","3276689407","ES" +"3276689408","3276690431","GB" +"3276690432","3276690943","NL" +"3276690944","3276691455","GR" +"3276691456","3276691967","RO" +"3276691968","3276692479","RU" +"3276692480","3276692991","UA" +"3276692992","3276693503","GB" +"3276693504","3276694015","UA" +"3276694016","3276694527","AT" +"3276694528","3276695039","UA" +"3276695040","3276695551","RU" +"3276695552","3276696063","UA" +"3276696064","3276696575","RO" +"3276696576","3276697087","EU" +"3276697088","3276697599","GB" +"3276697600","3276698111","UA" +"3276698112","3276699647","RU" +"3276699648","3276700159","NL" +"3276700160","3276700671","CZ" +"3276700672","3276701183","RO" +"3276701184","3276701695","RU" +"3276701696","3276709887","SE" +"3276709888","3276718079","DE" +"3276718080","3276726271","IT" +"3276726272","3276727295","SE" +"3276727296","3276728319","ES" +"3276728320","3276729343","UA" +"3276729344","3276730367","PL" +"3276730368","3276731391","DE" +"3276731392","3276732415","UA" +"3276732416","3276733439","DE" +"3276733440","3276734463","UA" +"3276734464","3276734735","AT" +"3276734736","3276734751","DK" +"3276734752","3276734815","AT" +"3276734816","3276734847","DE" +"3276734848","3276734879","EU" +"3276734880","3276734895","GB" +"3276734896","3276734911","NL" +"3276734912","3276734943","FR" +"3276734944","3276735455","AT" +"3276735456","3276735487","NL" +"3276735488","3276735871","AT" +"3276735872","3276735935","EU" +"3276735936","3276735999","ES" +"3276736000","3276736511","AT" +"3276736512","3276736575","IT" +"3276736576","3276736735","GB" +"3276736736","3276736767","EU" +"3276736768","3276736799","IT" +"3276736800","3276736815","DE" +"3276736816","3276736831","CZ" +"3276736832","3276736863","NL" +"3276736864","3276736871","DE" +"3276736872","3276736879","NL" +"3276736880","3276736959","DK" +"3276736960","3276736991","CH" +"3276736992","3276737015","GB" +"3276737016","3276737023","BE" +"3276737024","3276737343","IT" +"3276737344","3276737407","DE" +"3276737408","3276737535","ES" +"3276737536","3276737615","IT" +"3276737616","3276737631","DE" +"3276737632","3276737791","RU" +"3276737792","3276737935","NL" +"3276737936","3276737943","DE" +"3276737944","3276737991","GB" +"3276737992","3276737999","IT" +"3276738000","3276738015","GB" +"3276738016","3276738047","BE" +"3276738048","3276738079","GB" +"3276738080","3276738111","ES" +"3276738112","3276738143","GB" +"3276738144","3276738175","IT" +"3276738176","3276738559","GB" +"3276738560","3276738847","CH" +"3276738848","3276739071","EU" +"3276739072","3276739151","CH" +"3276739152","3276739167","EU" +"3276739168","3276740127","CH" +"3276740128","3276740167","GB" +"3276740168","3276740175","DE" +"3276740176","3276740191","NL" +"3276740192","3276740223","EU" +"3276740224","3276740351","CH" +"3276740352","3276740703","FR" +"3276740704","3276740719","IT" +"3276740720","3276740735","CZ" +"3276740736","3276740799","PT" +"3276740800","3276740815","SI" +"3276740816","3276740831","SK" +"3276740832","3276740863","DE" +"3276740864","3276741375","FR" +"3276741376","3276741631","EU" +"3276741632","3276742655","FR" +"3276742656","3276742735","RU" +"3276742736","3276742751","NL" +"3276742752","3276742783","GR" +"3276742784","3276742911","HU" +"3276742912","3276743071","AT" +"3276743072","3276743103","DE" +"3276743104","3276743135","HU" +"3276743136","3276743167","NL" +"3276743168","3276743423","EU" +"3276743424","3276743903","AT" +"3276743904","3276743935","BE" +"3276743936","3276744191","AT" +"3276744192","3276744703","BE" +"3276744704","3276744959","IT" +"3276744960","3276745215","GR" +"3276745216","3276745295","DK" +"3276745296","3276745311","NL" +"3276745312","3276745343","DK" +"3276745344","3276745407","DE" +"3276745408","3276745655","DK" +"3276745656","3276745663","EU" +"3276745664","3276745727","DK" +"3276745728","3276746047","GB" +"3276746048","3276746111","DE" +"3276746112","3276746239","IT" +"3276746240","3276746335","GB" +"3276746336","3276746351","BE" +"3276746352","3276746367","NL" +"3276746368","3276746751","GB" +"3276746752","3276748287","CH" +"3276748288","3276748799","GB" +"3276748800","3276748951","AT" +"3276748952","3276748959","GB" +"3276748960","3276749023","AT" +"3276749024","3276749055","IT" +"3276749056","3276749087","AT" +"3276749088","3276749103","FR" +"3276749104","3276749119","EU" +"3276749120","3276749183","NL" +"3276749184","3276749311","DE" +"3276749312","3276749343","BE" +"3276749344","3276749375","DE" +"3276749376","3276749823","BE" +"3276749824","3276750151","NL" +"3276750152","3276750159","GB" +"3276750160","3276750175","FR" +"3276750176","3276750207","BE" +"3276750208","3276750335","FR" +"3276750336","3276750431","GB" +"3276750432","3276750463","EU" +"3276750464","3276751039","GB" +"3276751040","3276751071","FR" +"3276751072","3276751087","GB" +"3276751088","3276751103","NL" +"3276751104","3276751175","GB" +"3276751176","3276751199","SE" +"3276751200","3276751231","EU" +"3276751232","3276751295","IL" +"3276751296","3276751359","AT" +"3276751360","3276753055","GB" +"3276753056","3276753071","NO" +"3276753072","3276753119","GB" +"3276753120","3276753151","IT" +"3276753152","3276753375","GB" +"3276753376","3276753407","FI" +"3276753408","3276753951","GB" +"3276753952","3276753983","HU" +"3276753984","3276754991","GB" +"3276754992","3276755007","DE" +"3276755008","3276755071","HU" +"3276755072","3276755199","DE" +"3276755200","3276755775","GB" +"3276755776","3276755791","NO" +"3276755792","3276755807","RU" +"3276755808","3276755839","GB" +"3276755840","3276755967","ES" +"3276755968","3276756031","GB" +"3276756032","3276756063","NL" +"3276756064","3276756095","BE" +"3276756096","3276756287","GB" +"3276756288","3276756319","SE" +"3276756320","3276756351","FR" +"3276756352","3276756671","GB" +"3276756672","3276756735","DE" +"3276756736","3276757119","GB" +"3276757120","3276757135","NO" +"3276757136","3276757151","NL" +"3276757152","3276757183","GB" +"3276757184","3276757247","EU" +"3276757248","3276757503","GB" +"3276757504","3276757759","EU" +"3276757760","3276757823","GB" +"3276757824","3276757839","DE" +"3276757840","3276757855","ES" +"3276757856","3276757887","CH" +"3276757888","3276759039","GB" +"3276759040","3276759695","DE" +"3276759696","3276759711","NL" +"3276759712","3276759743","DE" +"3276759744","3276759775","CH" +"3276759776","3276759807","EU" +"3276759808","3276761215","DE" +"3276761216","3276761279","ES" +"3276761280","3276761919","DE" +"3276761920","3276761983","GB" +"3276761984","3276762015","DK" +"3276762016","3276762111","FR" +"3276762112","3276762623","DE" +"3276762624","3276762879","EU" +"3276762880","3276762943","DE" +"3276762944","3276762959","GB" +"3276762960","3276762975","IT" +"3276762976","3276763007","NO" +"3276763008","3276763327","DE" +"3276763328","3276763391","SE" +"3276763392","3276763519","DE" +"3276763520","3276763551","IT" +"3276763552","3276763567","CH" +"3276763568","3276763583","GR" +"3276763584","3276763647","GB" +"3276763648","3276763967","DE" +"3276763968","3276763983","DK" +"3276763984","3276763991","GB" +"3276763992","3276763999","BE" +"3276764000","3276764031","IT" +"3276764032","3276764159","EU" +"3276764160","3276765183","DE" +"3276765184","3276766975","GB" +"3276766976","3276766983","FR" +"3276766984","3276766991","EU" +"3276766992","3276767015","FR" +"3276767016","3276767023","DK" +"3276767024","3276767039","BE" +"3276767040","3276767079","FR" +"3276767080","3276767087","GB" +"3276767088","3276767103","NL" +"3276767104","3276767231","FR" +"3276767232","3276767743","ZA" +"3276767744","3276767807","NL" +"3276767808","3276767871","DK" +"3276767872","3276767935","NL" +"3276767936","3276767967","FR" +"3276767968","3276767999","AT" +"3276768000","3276768511","NL" +"3276768512","3276768767","DE" +"3276768768","3276768863","ES" +"3276768864","3276768895","AT" +"3276768896","3276769023","HU" +"3276769024","3276769279","DE" +"3276769280","3276769295","ES" +"3276769296","3276769311","DE" +"3276769312","3276769343","CH" +"3276769344","3276769407","NL" +"3276769408","3276769919","ES" +"3276769920","3276769983","EU" +"3276769984","3276770015","AT" +"3276770016","3276770031","IT" +"3276770032","3276770047","CH" +"3276770048","3276770143","ES" +"3276770144","3276770175","FI" +"3276770176","3276770239","ES" +"3276770240","3276770303","DK" +"3276770304","3276770815","ES" +"3276770816","3276770943","EU" +"3276770944","3276771135","ES" +"3276771136","3276771199","EU" +"3276771200","3276771327","ES" +"3276771328","3276771455","NL" +"3276771456","3276771583","GB" +"3276771584","3276772287","NL" +"3276772288","3276772351","AT" +"3276772352","3276772567","BE" +"3276772568","3276772575","EU" +"3276772576","3276773375","BE" +"3276773376","3276774047","DK" +"3276774048","3276774079","FI" +"3276774080","3276774095","DK" +"3276774096","3276774111","EU" +"3276774112","3276774143","IE" +"3276774144","3276774271","DK" +"3276774272","3276774303","DE" +"3276774304","3276774335","FR" +"3276774336","3276774399","GB" +"3276774400","3276774543","SE" +"3276774544","3276774559","GB" +"3276774560","3276774591","DE" +"3276774592","3276774655","CH" +"3276774656","3276775103","SE" +"3276775104","3276775167","NL" +"3276775168","3276775295","SE" +"3276775296","3276775359","FR" +"3276775360","3276775391","DK" +"3276775392","3276775423","DE" +"3276775424","3276781151","NL" +"3276781152","3276781247","FR" +"3276781248","3276781311","BE" +"3276781312","3276781503","NL" +"3276781504","3276781567","FR" +"3276781568","3276782719","BE" +"3276782720","3276782783","EU" +"3276782784","3276782799","FR" +"3276782800","3276782815","CZ" +"3276782816","3276782847","ES" +"3276782848","3276782975","BE" +"3276782976","3276783039","GR" +"3276783040","3276783055","DK" +"3276783056","3276783071","GB" +"3276783072","3276783087","PT" +"3276783088","3276783103","CH" +"3276783104","3276783615","IT" +"3276783616","3276784383","FR" +"3276784384","3276784639","EU" +"3276784640","3276784895","FR" +"3276784896","3276785151","NO" +"3276785152","3276785407","IE" +"3276785408","3276785439","PT" +"3276785440","3276785455","GR" +"3276785456","3276785463","GB" +"3276785464","3276785471","IE" +"3276785472","3276785535","PT" +"3276785536","3276785567","BE" +"3276785568","3276785599","PT" +"3276785600","3276785607","TR" +"3276785608","3276785615","PL" +"3276785616","3276785631","CZ" +"3276785632","3276785663","IT" +"3276785664","3276785791","IL" +"3276785792","3276785823","NL" +"3276785824","3276785855","EU" +"3276785856","3276785919","GB" +"3276785920","3276786175","AT" +"3276786176","3276786431","NO" +"3276786432","3276786687","EU" +"3276786688","3276786815","HU" +"3276786816","3276786879","SE" +"3276786880","3276786911","TR" +"3276786912","3276786943","BE" +"3276786944","3276787359","AT" +"3276787360","3276787391","DE" +"3276787392","3276787455","BE" +"3276787456","3276787775","FR" +"3276787776","3276787967","EU" +"3276787968","3276788735","FR" +"3276788736","3276788863","IE" +"3276788864","3276788895","DE" +"3276788896","3276788927","EU" +"3276788928","3276788991","NL" +"3276788992","3276789247","NO" +"3276789248","3276789439","FI" +"3276789440","3276789503","EU" +"3276789504","3276789567","FR" +"3276789568","3276789583","ES" +"3276789584","3276789599","FR" +"3276789600","3276789615","ES" +"3276789616","3276789631","NL" +"3276789632","3276789759","FR" +"3276789760","3276790015","IT" +"3276790016","3276790111","ES" +"3276790112","3276790127","FR" +"3276790128","3276790143","NL" +"3276790144","3276790175","IT" +"3276790176","3276790199","NL" +"3276790200","3276790207","DE" +"3276790208","3276790223","NL" +"3276790224","3276790271","GB" +"3276790272","3276790527","IE" +"3276790528","3276790783","HU" +"3276790784","3276790943","PK" +"3276790944","3276791007","IT" +"3276791008","3276791039","NL" +"3276791040","3276791295","GB" +"3276791296","3276791327","PT" +"3276791328","3276791551","EU" +"3276791552","3276792831","GB" +"3276792832","3276793087","FR" +"3276793088","3276793279","GB" +"3276793280","3276793343","IE" +"3276793344","3276793735","FR" +"3276793736","3276793743","NL" +"3276793744","3276793751","BE" +"3276793752","3276793759","FR" +"3276793760","3276793791","PL" +"3276793792","3276793855","FR" +"3276793856","3276794111","EU" +"3276794112","3276794255","NL" +"3276794256","3276794271","DE" +"3276794272","3276794303","EU" +"3276794304","3276794335","DK" +"3276794336","3276794367","NL" +"3276794368","3276795903","BE" +"3276795904","3276797951","AT" +"3276797952","3276799103","EU" +"3276799104","3276799231","GB" +"3276799232","3276799295","EU" +"3276799296","3276799359","GB" +"3276799360","3276799391","NL" +"3276799392","3276799455","AT" +"3276799456","3276799471","PL" +"3276799472","3276799487","NL" +"3276799488","3276799743","DE" +"3276799744","3276799775","NL" +"3276799776","3276799807","GB" +"3276799808","3276799839","FR" +"3276799840","3276799871","ES" +"3276799872","3276799999","NL" +"3276800000","3276824575","GB" +"3276824576","3276832767","EE" +"3276832768","3276834815","PL" +"3276834816","3276835839","RU" +"3276835840","3276836351","UA" +"3276836352","3276836863","RO" +"3276836864","3276837887","RU" +"3276837888","3276838911","PL" +"3276838912","3276840959","FR" +"3276840960","3276849151","SK" +"3276849152","3276857343","DE" +"3276857344","3276857599","RU" +"3276857600","3276857855","SI" +"3276857856","3276858111","NL" +"3276858112","3276858367","KW" +"3276858368","3276858623","RU" +"3276858624","3276858879","PL" +"3276858880","3276859135","DE" +"3276859136","3276859647","UA" +"3276859648","3276859903","CH" +"3276859904","3276860159","AT" +"3276860160","3276860415","EU" +"3276860416","3276860927","PL" +"3276860928","3276861183","BE" +"3276861184","3276861439","DE" +"3276861440","3276865535","DK" +"3276865536","3276866303","NL" +"3276866304","3276866559","EU" +"3276866560","3276866815","IT" +"3276866816","3276867071","EU" +"3276867072","3276868606","IT" +"3276868607","3276868607","GB" +"3276868608","3276868863","NL" +"3276868864","3276869119","IT" +"3276869120","3276869631","GB" +"3276869632","3276869695","IT" +"3276869696","3276869727","GB" +"3276869728","3276869855","IT" +"3276869856","3276869887","GB" +"3276869888","3276870143","NL" +"3276870144","3276871679","IT" +"3276871680","3276872255","DE" +"3276872256","3276872319","CZ" +"3276872320","3276872479","DE" +"3276872480","3276872511","GB" +"3276872512","3276872703","DE" +"3276872704","3276873727","GB" +"3276873728","3276874367","ES" +"3276874368","3276874383","GB" +"3276874384","3276874423","ES" +"3276874424","3276874431","GB" +"3276874432","3276874447","ES" +"3276874448","3276874495","GB" +"3276874496","3276874559","ES" +"3276874560","3276874751","GB" +"3276874752","3276875007","NL" +"3276875008","3276875263","CH" +"3276875264","3276875775","NL" +"3276875776","3276876031","GB" +"3276876032","3276876287","DK" +"3276876288","3276876415","NL" +"3276876416","3276876431","GB" +"3276876432","3276876541","NL" +"3276876542","3276877535","GB" +"3276877536","3276877551","AT" +"3276877552","3276877567","GB" +"3276877568","3276877823","AT" +"3276877824","3276878079","GB" +"3276878080","3276878335","BG" +"3276878336","3276878399","GB" +"3276878400","3276878431","FR" +"3276878432","3276878463","ES" +"3276878464","3276878559","FR" +"3276878560","3276878591","GB" +"3276878592","3276878847","FR" +"3276878848","3276879359","ES" +"3276879360","3276879423","TR" +"3276879424","3276879615","GB" +"3276879616","3276879871","TR" +"3276879872","3276880895","DK" +"3276880896","3276881215","DE" +"3276881216","3276881279","GB" +"3276881280","3276881407","DE" +"3276881408","3276881919","FR" +"3276881920","3276883327","IT" +"3276883328","3276883391","GB" +"3276883392","3276883967","IT" +"3276883968","3276884519","PL" +"3276884520","3276884735","GB" +"3276884736","3276884991","PL" +"3276884992","3276886015","GB" +"3276886016","3276886271","RO" +"3276886272","3276886943","DE" +"3276886944","3276886959","GB" +"3276886960","3276886991","DE" +"3276886992","3276887047","GB" +"3276887048","3276888063","DE" +"3276888064","3276888575","GB" +"3276888576","3276889215","IT" +"3276889216","3276890111","GB" +"3276890112","3276890135","US" +"3276890136","3276890143","GB" +"3276890144","3276890223","US" +"3276890224","3276890367","GB" +"3276890368","3276890623","US" +"3276890624","3276891135","IT" +"3276891136","3276891391","BE" +"3276891392","3276892159","US" +"3276892160","3276893950","IT" +"3276893951","3276893951","GB" +"3276893952","3276895999","IT" +"3276896000","3276896255","CZ" +"3276896256","3276896767","BE" +"3276896768","3276896775","GB" +"3276896776","3276896831","BE" +"3276896832","3276896847","SE" +"3276896848","3276896863","BE" +"3276896864","3276896879","GB" +"3276896880","3276896927","BE" +"3276896928","3276897023","GB" +"3276897024","3276897663","BE" +"3276897664","3276897727","GB" +"3276897728","3276897759","BE" +"3276897760","3276897919","GB" +"3276897920","3276898303","CZ" +"3276898304","3276898383","CH" +"3276898384","3276898407","GB" +"3276898408","3276898447","CH" +"3276898448","3276898479","GB" +"3276898480","3276898527","CH" +"3276898528","3276898559","GB" +"3276898560","3276898655","CH" +"3276898656","3276898671","GB" +"3276898672","3276898687","CH" +"3276898688","3276898703","GB" +"3276898704","3276898775","CH" +"3276898776","3276898783","GB" +"3276898784","3276898799","CH" +"3276898800","3276898815","GB" +"3276898816","3276900039","CH" +"3276900040","3276900047","GB" +"3276900048","3276900351","CH" +"3276900352","3276900607","GB" +"3276900608","3276901503","CH" +"3276901504","3276901519","ES" +"3276901520","3276901551","CH" +"3276901552","3276901559","GB" +"3276901560","3276901623","CH" +"3276901624","3276901631","GB" +"3276901632","3276902151","CH" +"3276902152","3276902159","GB" +"3276902160","3276902399","CH" +"3276902400","3276902583","SE" +"3276902584","3276902615","GB" +"3276902616","3276902639","SE" +"3276902640","3276902655","GB" +"3276902656","3276903319","SE" +"3276903320","3276903327","GB" +"3276903328","3276903359","NO" +"3276903360","3276903935","SE" +"3276903936","3276903999","GB" +"3276904000","3276904079","SE" +"3276904080","3276904095","GB" +"3276904096","3276904143","SE" +"3276904144","3276904159","GB" +"3276904160","3276904447","SE" +"3276904448","3276905311","GB" +"3276905312","3276905319","ES" +"3276905320","3276905327","BE" +"3276905328","3276905335","NL" +"3276905336","3276905471","GB" +"3276905472","3276905727","SE" +"3276905728","3276905983","BE" +"3276905984","3276905999","GB" +"3276906000","3276906003","BE" +"3276906004","3276906239","GB" +"3276906240","3276906279","SE" +"3276906280","3276906287","GB" +"3276906288","3276906295","SE" +"3276906296","3276906303","GB" +"3276906304","3276906319","SE" +"3276906320","3276906335","GB" +"3276906336","3276906391","SE" +"3276906392","3276906399","GB" +"3276906400","3276906415","SE" +"3276906416","3276906495","GB" +"3276906496","3276906623","NL" +"3276906624","3276906751","GB" +"3276906752","3276906823","NL" +"3276906824","3276906831","CH" +"3276906832","3276906839","GB" +"3276906840","3276906847","NL" +"3276906848","3276906863","GB" +"3276906864","3276907339","NL" +"3276907340","3276907343","GB" +"3276907344","3276907551","NL" +"3276907552","3276907567","BE" +"3276907568","3276907643","NL" +"3276907644","3276907647","GB" +"3276907648","3276907663","NL" +"3276907664","3276907679","BE" +"3276907680","3276907687","GB" +"3276907688","3276908159","NL" +"3276908160","3276908175","CH" +"3276908176","3276908183","NL" +"3276908184","3276908191","GB" +"3276908192","3276908607","NL" +"3276908608","3276908639","DE" +"3276908640","3276908646","NL" +"3276908647","3276908671","GB" +"3276908672","3276908687","NL" +"3276908688","3276908711","GB" +"3276908712","3276908735","SE" +"3276908736","3276908751","NL" +"3276908752","3276908799","GB" +"3276908800","3276909055","NL" +"3276909056","3276909567","GB" +"3276909568","3276910591","NL" +"3276910592","3276910951","IT" +"3276910952","3276910959","GB" +"3276910960","3276910975","IT" +"3276910976","3276911007","GB" +"3276911008","3276911359","IT" +"3276911360","3276911615","GB" +"3276911616","3276912615","IT" +"3276912616","3276912623","GB" +"3276912624","3276913279","IT" +"3276913280","3276913295","GB" +"3276913296","3276913359","IT" +"3276913360","3276913360","GB" +"3276913361","3276913374","IT" +"3276913375","3276913375","GB" +"3276913376","3276913919","IT" +"3276913920","3276913983","US" +"3276913984","3276914079","IT" +"3276914080","3276914095","GB" +"3276914096","3276914687","IT" +"3276914688","3276915567","ES" +"3276915568","3276915583","NL" +"3276915584","3276915711","GB" +"3276915712","3276916047","ES" +"3276916048","3276916055","GB" +"3276916056","3276916087","ES" +"3276916088","3276916095","GB" +"3276916096","3276916167","ES" +"3276916168","3276916183","GB" +"3276916184","3276917119","ES" +"3276917120","3276917183","GB" +"3276917184","3276917231","ES" +"3276917232","3276917247","FR" +"3276917248","3276917279","ES" +"3276917280","3276917287","GB" +"3276917288","3276917327","ES" +"3276917328","3276917343","GB" +"3276917344","3276918783","ES" +"3276918784","3276919367","DE" +"3276919368","3276919375","GB" +"3276919376","3276920447","DE" +"3276920448","3276920479","GB" +"3276920480","3276920551","DE" +"3276920552","3276920559","GB" +"3276920560","3276921183","DE" +"3276921184","3276921187","GB" +"3276921188","3276921239","DE" +"3276921240","3276921247","GB" +"3276921248","3276921279","DE" +"3276921280","3276921303","GB" +"3276921304","3276921343","DE" +"3276921344","3276921399","GB" +"3276921400","3276921403","DK" +"3276921404","3276921599","GB" +"3276921600","3276922623","DE" +"3276922624","3276923431","FR" +"3276923432","3276923439","GB" +"3276923440","3276923447","FR" +"3276923448","3276923455","DE" +"3276923456","3276926847","FR" +"3276926848","3276931071","GB" +"3276931072","3276939263","KZ" +"3276939264","3276955647","DE" +"3276955648","3276963839","GB" +"3276963840","3276964351","IL" +"3276964352","3276965375","RO" +"3276965376","3276966399","RU" +"3276966400","3276966911","BH" +"3276966912","3276968959","RU" +"3276968960","3276969471","RO" +"3276969472","3276969983","UA" +"3276969984","3276970495","NL" +"3276970496","3276971519","RU" +"3276971520","3276972031","DE" +"3276972032","3276980223","PL" +"3276980224","3276988415","DK" +"3276988416","3276996607","AT" +"3276996608","3277062143","FR" +"3277062144","3277127679","SE" +"3277127680","3277160447","DK" +"3277160448","3277176831","NL" +"3277176832","3277177087","SI" +"3277177088","3277177343","GB" +"3277177344","3277177599","RO" +"3277177600","3277178111","PL" +"3277178112","3277178623","UA" +"3277178624","3277178879","PL" +"3277178880","3277179135","ES" +"3277179136","3277179391","RO" +"3277179392","3277179647","DE" +"3277179648","3277180159","BE" +"3277180160","3277180415","NL" +"3277180416","3277180671","RU" +"3277180672","3277180927","FR" +"3277180928","3277181183","UA" +"3277181184","3277181439","PL" +"3277181440","3277181695","DE" +"3277181696","3277181951","RO" +"3277181952","3277182207","IT" +"3277182208","3277182463","RU" +"3277182464","3277182719","UA" +"3277182720","3277182975","BG" +"3277182976","3277183231","UA" +"3277183232","3277183487","DE" +"3277183488","3277183743","DK" +"3277183744","3277183999","UA" +"3277184000","3277184255","DE" +"3277184256","3277184511","PT" +"3277184512","3277184767","DE" +"3277184768","3277185023","UA" +"3277185024","3277185279","SA" +"3277185280","3277185535","RU" +"3277185536","3277185791","DE" +"3277185792","3277186047","PL" +"3277186048","3277186303","IT" +"3277186304","3277186559","DE" +"3277186560","3277186815","PL" +"3277186816","3277187071","RU" +"3277187072","3277187327","GB" +"3277187328","3277187583","UA" +"3277187584","3277188351","RU" +"3277188352","3277188607","DE" +"3277188608","3277188863","RU" +"3277188864","3277189119","RO" +"3277189120","3277189375","DE" +"3277189376","3277189631","PL" +"3277189632","3277189887","TR" +"3277189888","3277190143","PL" +"3277190144","3277190399","SE" +"3277190400","3277190655","GB" +"3277190656","3277190911","BE" +"3277190912","3277191167","FR" +"3277191168","3277191423","DK" +"3277191424","3277191679","PL" +"3277191680","3277191935","UA" +"3277191936","3277192191","DK" +"3277192192","3277192447","PL" +"3277192448","3277192703","DK" +"3277192704","3277192959","GG" +"3277192960","3277193215","TR" +"3277193216","3277254727","NL" +"3277254728","3277254735","DE" +"3277254736","3277258751","NL" +"3277258752","3277324287","TR" +"3277324288","3277325311","RU" +"3277325312","3277326335","IT" +"3277326336","3277326847","GB" +"3277326848","3277327359","AT" +"3277327360","3277327871","RS" +"3277327872","3277328383","UA" +"3277328384","3277328895","RU" +"3277328896","3277329407","NL" +"3277329408","3277329919","GB" +"3277329920","3277330431","RU" +"3277330432","3277330943","RO" +"3277330944","3277331455","UA" +"3277331456","3277332479","PL" +"3277332480","3277332991","NL" +"3277332992","3277333503","AT" +"3277333504","3277334015","DK" +"3277334016","3277334527","RO" +"3277334528","3277335039","RU" +"3277335040","3277335551","UA" +"3277335552","3277336063","DE" +"3277336064","3277336575","HR" +"3277336576","3277337087","AT" +"3277337088","3277337599","PL" +"3277337600","3277338111","UA" +"3277338112","3277338623","NO" +"3277338624","3277339647","RU" +"3277339648","3277340159","RO" +"3277340160","3277340671","RU" +"3277340672","3277341183","RO" +"3277341184","3277341695","AM" +"3277341696","3277342207","RU" +"3277342208","3277342719","GB" +"3277342720","3277343231","UA" +"3277343232","3277343743","BG" +"3277343744","3277344767","UA" +"3277344768","3277345279","RO" +"3277345280","3277345791","SI" +"3277345792","3277346303","FR" +"3277346304","3277346815","GB" +"3277346816","3277347327","DE" +"3277347328","3277347839","PL" +"3277347840","3277348351","RU" +"3277348352","3277348863","FR" +"3277348864","3277349887","RO" +"3277349888","3277350399","GB" +"3277350400","3277351423","RU" +"3277351424","3277351935","NO" +"3277351936","3277352447","DE" +"3277352448","3277352959","SE" +"3277352960","3277353471","UA" +"3277353472","3277353983","PL" +"3277353984","3277354495","DE" +"3277354496","3277355007","GB" +"3277355008","3277355519","RU" +"3277355520","3277356031","MK" +"3277356032","3277356543","UA" +"3277356544","3277357055","RU" +"3277357056","3277357567","PL" +"3277357568","3277358079","SE" +"3277358080","3277359103","RU" +"3277359104","3277359615","NL" +"3277359616","3277360127","UA" +"3277360128","3277360639","BG" +"3277360640","3277361151","CZ" +"3277361152","3277361663","PL" +"3277361664","3277362175","RU" +"3277362176","3277362687","ES" +"3277362688","3277363199","IE" +"3277363200","3277363711","ES" +"3277363712","3277364223","RU" +"3277364224","3277364735","NL" +"3277364736","3277365247","UA" +"3277365248","3277365759","NL" +"3277365760","3277366271","GR" +"3277366272","3277366783","CZ" +"3277366784","3277367295","AT" +"3277367296","3277367807","PL" +"3277367808","3277368319","RU" +"3277368320","3277369343","RO" +"3277369344","3277369855","CY" +"3277369856","3277370367","RU" +"3277370368","3277370623","PL" +"3277370624","3277370879","RU" +"3277370880","3277371391","RO" +"3277371392","3277371903","RU" +"3277371904","3277372415","PL" +"3277372416","3277372927","IR" +"3277372928","3277373951","RU" +"3277373952","3277374463","FR" +"3277374464","3277375999","RU" +"3277376000","3277376511","NL" +"3277376512","3277377023","RO" +"3277377024","3277378559","RU" +"3277378560","3277379071","HR" +"3277379072","3277379583","UZ" +"3277379584","3277380095","RS" +"3277380096","3277380607","RO" +"3277380608","3277381119","RU" +"3277381120","3277381631","KW" +"3277381632","3277382143","RU" +"3277382144","3277382655","MD" +"3277382656","3277383167","GB" +"3277383168","3277383679","UA" +"3277383680","3277384191","PL" +"3277384192","3277384703","IL" +"3277384704","3277385215","GB" +"3277385216","3277385727","AT" +"3277385728","3277386239","RU" +"3277386240","3277386751","UA" +"3277386752","3277387263","SA" +"3277387264","3277388287","RU" +"3277388288","3277388543","RO" +"3277388544","3277388799","HU" +"3277388800","3277389311","RU" +"3277389312","3277389823","AM" +"3277389824","3277394943","GB" +"3277394944","3277395455","US" +"3277395456","3277452639","GB" +"3277452640","3277452647","IE" +"3277452648","3277452655","DK" +"3277452656","3277455359","GB" +"3277455360","3277456895","DE" +"3277456896","3277457151","CH" +"3277457152","3277463551","DE" +"3277463552","3277463807","GB" +"3277463808","3277464063","US" +"3277464064","3277464575","FR" +"3277464576","3277464831","BE" +"3277464832","3277467471","US" +"3277467472","3277467551","CA" +"3277467552","3277471743","US" +"3277471744","3277472607","NL" +"3277472608","3277472623","IL" +"3277472624","3277474815","NL" +"3277474816","3277475711","BE" +"3277475712","3277476607","NL" +"3277476608","3277477631","BE" +"3277477632","3277479935","NL" +"3277479936","3277480959","GB" +"3277480960","3277481471","DK" +"3277481472","3277481983","PL" +"3277481984","3277482495","SE" +"3277482496","3277483007","PL" +"3277483008","3277483519","IT" +"3277483520","3277484031","RO" +"3277484032","3277484543","CH" +"3277484544","3277485055","RO" +"3277485056","3277485567","CH" +"3277485568","3277486591","GB" +"3277486592","3277487103","UA" +"3277487104","3277487615","RO" +"3277487616","3277488127","PL" +"3277488128","3277504511","RU" +"3277504512","3277520895","DE" +"3277520896","3277553663","SK" +"3277553664","3277586431","RU" +"3277586432","3277666815","GB" +"3277666816","3277667327","US" +"3277667328","3277676543","DE" +"3277676544","3277680639","FR" +"3277680640","3277684735","US" +"3277684736","3277685247","RU" +"3277685248","3277685759","DE" +"3277685760","3277686271","IE" +"3277686272","3277686783","PL" +"3277686784","3277687295","RO" +"3277687296","3277687807","UA" +"3277687808","3277688319","RO" +"3277688320","3277688831","PL" +"3277688832","3277689343","RU" +"3277689344","3277689855","AT" +"3277689856","3277690879","RU" +"3277690880","3277691391","KZ" +"3277691392","3277691903","UA" +"3277691904","3277692415","GB" +"3277692416","3277692927","DE" +"3277692928","3277693439","UA" +"3277693440","3277693951","PL" +"3277693952","3277694463","RU" +"3277694464","3277694975","DE" +"3277694976","3277695487","IT" +"3277695488","3277695999","ES" +"3277696000","3277696511","UA" +"3277696512","3277697023","AT" +"3277697024","3277697535","RO" +"3277697536","3277698047","PL" +"3277698048","3277698559","RU" +"3277698560","3277699071","DE" +"3277699072","3277699583","UA" +"3277699584","3277700607","RU" +"3277700608","3277701119","UA" +"3277701120","3277701631","DK" +"3277701632","3277702143","AT" +"3277702144","3277702655","EU" +"3277702656","3277703679","DE" +"3277703680","3277704191","PL" +"3277704192","3277704703","UA" +"3277704704","3277705215","RU" +"3277705216","3277705727","KZ" +"3277705728","3277706239","ES" +"3277706240","3277707263","UA" +"3277707264","3277707775","CZ" +"3277707776","3277708287","MD" +"3277708288","3277708799","AT" +"3277708800","3277709311","PL" +"3277709312","3277709823","NL" +"3277709824","3277710335","GB" +"3277710336","3277710847","RU" +"3277710848","3277711359","PL" +"3277711360","3277711871","NO" +"3277711872","3277712383","IL" +"3277712384","3277712895","PL" +"3277712896","3277713407","NL" +"3277713408","3277713919","RU" +"3277713920","3277714943","DE" +"3277714944","3277715967","RU" +"3277715968","3277716479","PL" +"3277716480","3277716991","SE" +"3277716992","3277717503","IT" +"3277717504","3277725695","YE" +"3277725696","3277733887","CH" +"3277733888","3277742079","DE" +"3277742080","3277750271","FI" +"3277750272","3277766655","IT" +"3277766656","3277774847","PL" +"3277774848","3277783039","RU" +"3277783040","3277815807","BE" +"3277815808","3277816063","RO" +"3277816064","3277816319","PL" +"3277816320","3277816575","CM" +"3277816576","3277816831","GB" +"3277816832","3277817087","CH" +"3277817088","3277817343","GB" +"3277817344","3277817855","FR" +"3277817856","3277818111","BE" +"3277818112","3277818367","DE" +"3277818368","3277818623","CY" +"3277818624","3277818879","UA" +"3277818880","3277819135","SE" +"3277819136","3277819391","CH" +"3277819392","3277819647","IT" +"3277819648","3277819903","GB" +"3277819904","3277820159","PL" +"3277820160","3277820415","RO" +"3277820416","3277820671","DE" +"3277820672","3277820927","UA" +"3277820928","3277821183","CH" +"3277821184","3277821439","TR" +"3277821440","3277821695","GB" +"3277821696","3277821951","UA" +"3277821952","3277822207","RO" +"3277822208","3277822463","ES" +"3277822464","3277822719","PL" +"3277822720","3277822975","RU" +"3277822976","3277823231","SG" +"3277823232","3277823487","UA" +"3277823488","3277823743","SI" +"3277823744","3277823999","UA" +"3277824000","3277824255","TR" +"3277824256","3277824511","SI" +"3277824512","3277825023","AT" +"3277825024","3277825279","PL" +"3277825280","3277825535","UA" +"3277825536","3277826047","RO" +"3277826048","3277826303","FR" +"3277826304","3277826815","PL" +"3277826816","3277827071","UA" +"3277827072","3277827327","DK" +"3277827328","3277827583","SI" +"3277827584","3277828095","NL" +"3277828096","3277828351","AT" +"3277828352","3277828607","NL" +"3277828608","3277828863","RO" +"3277828864","3277829119","TR" +"3277829120","3277829375","RO" +"3277829376","3277829631","DK" +"3277829632","3277829887","PL" +"3277829888","3277830143","IL" +"3277830144","3277830399","SE" +"3277830400","3277830655","UA" +"3277830656","3277830911","PL" +"3277830912","3277831167","GB" +"3277831168","3277831423","PL" +"3277831424","3277831679","UA" +"3277831680","3277832191","IE" +"3277832192","3277833215","EU" +"3277833216","3277833727","BE" +"3277833728","3277834239","NL" +"3277834240","3277834751","RU" +"3277834752","3277835263","UA" +"3277835264","3277835775","SK" +"3277835776","3277836287","UA" +"3277836288","3277836799","FI" +"3277836800","3277837311","UA" +"3277837312","3277839103","RU" +"3277839104","3277839359","CH" +"3277839360","3277839871","DE" +"3277839872","3277840383","UA" +"3277840384","3277840895","FR" +"3277840896","3277841407","GR" +"3277841408","3277841919","RO" +"3277841920","3277842431","IT" +"3277842432","3277842943","UA" +"3277842944","3277843455","PL" +"3277843456","3277843967","PT" +"3277843968","3277845503","DK" +"3277845504","3277847039","NL" +"3277847040","3277847551","DK" +"3277847552","3277848063","RU" +"3277848064","3277848575","RO" +"3277848576","3277856767","AT" +"3277856768","3277864959","DE" +"3277864960","3277873151","RU" +"3277873152","3277881343","NL" +"3277881344","3277881375","A2" +"3277881376","3277881407","IT" +"3277881408","3277884175","A2" +"3277884176","3277884191","IR" +"3277884192","3277885439","A2" +"3277885440","3277885695","IQ" +"3277885696","3277885727","LB" +"3277885728","3277885951","A2" +"3277885952","3277886463","LB" +"3277886464","3277887487","IQ" +"3277887488","3277888255","A2" +"3277888256","3277888767","LB" +"3277888768","3277889023","A2" +"3277889024","3277889279","IQ" +"3277889280","3277889535","A2" +"3277889536","3277897727","RU" +"3277897728","3277905919","IT" +"3277905920","3277914111","BG" +"3277914112","3277946879","GR" +"3277946880","3277963263","DK" +"3277963264","3277979647","GB" +"3277979648","3277987839","SK" +"3277987840","3278004223","RU" +"3278004224","3278012415","FR" +"3278012416","3278020607","SK" +"3278020608","3278028799","RU" +"3278028800","3278036991","DE" +"3278036992","3278045183","FR" +"3278045184","3278054911","GB" +"3278054912","3278055423","NL" +"3278055424","3278061567","GB" +"3278061568","3278065663","NL" +"3278065664","3278103039","GB" +"3278103040","3278103295","FR" +"3278103296","3278110719","GB" +"3278110720","3278110751","SE" +"3278110752","3278110767","ES" +"3278110768","3278115327","SE" +"3278115328","3278116607","ES" +"3278116608","3278116863","SE" +"3278116864","3278118399","ES" +"3278118400","3278118911","SE" +"3278118912","3278118975","NL" +"3278118976","3278119935","SE" +"3278119936","3278119943","DE" +"3278119944","3278120151","SE" +"3278120152","3278120159","DE" +"3278120160","3278125055","SE" +"3278125056","3278125567","NL" +"3278125568","3278161631","SE" +"3278161632","3278161647","DE" +"3278161648","3278168111","SE" +"3278168112","3278168119","DK" +"3278168120","3278168175","SE" +"3278168176","3278168191","DK" +"3278168192","3278176255","SE" +"3278176256","3278220799","FR" +"3278220800","3278221055","GB" +"3278221056","3278221087","FR" +"3278221088","3278221119","GB" +"3278221120","3278232511","FR" +"3278232512","3278232575","MC" +"3278232576","3278241791","FR" +"3278241792","3278307327","GB" +"3278307328","3278372863","IT" +"3278372864","3278635007","GB" +"3278635008","3278635263","NL" +"3278635264","3278635519","EU" +"3278635520","3278744791","NL" +"3278744792","3278744799","A2" +"3278744800","3278766079","NL" +"3278766080","3278766591","RO" +"3278766592","3278767103","RU" +"3278767104","3278767615","RO" +"3278767616","3278768127","UA" +"3278768128","3278769151","GB" +"3278769152","3278769663","FR" +"3278769664","3278770175","DE" +"3278770176","3278770687","DK" +"3278770688","3278771711","DE" +"3278771712","3278772223","NL" +"3278772224","3278772735","BG" +"3278772736","3278773247","DE" +"3278773248","3278773759","NO" +"3278773760","3278774271","GB" +"3278774272","3278774783","RU" +"3278774784","3278775295","FR" +"3278775296","3278775807","GB" +"3278775808","3278776319","IR" +"3278776320","3278776831","IL" +"3278776832","3278777343","ES" +"3278777344","3278777855","SE" +"3278777856","3278778367","RU" +"3278778368","3278779391","PL" +"3278779392","3278779903","RU" +"3278779904","3278780415","BE" +"3278780416","3278780927","UA" +"3278780928","3278781439","LT" +"3278781440","3278781951","DE" +"3278781952","3278782463","RU" +"3278782464","3278782975","GB" +"3278782976","3278783231","DE" +"3278783232","3278784703","GB" +"3278784704","3278784735","NL" +"3278784736","3278786911","GB" +"3278786912","3278786943","LU" +"3278786944","3278787567","GB" +"3278787568","3278787583","FR" +"3278787584","3278788095","GB" +"3278788096","3278788223","US" +"3278788224","3278789935","GB" +"3278789936","3278789951","US" +"3278789952","3278790095","GB" +"3278790096","3278790111","ES" +"3278790112","3278790655","GB" +"3278790656","3278807039","IT" +"3278807040","3278815231","GB" +"3278815232","3278823423","AT" +"3278823424","3278831615","FR" +"3278831616","3278865663","HU" +"3278865664","3278865919","SK" +"3278865920","3278897151","HU" +"3278897152","3278913535","GB" +"3278913536","3278921727","CH" +"3278921728","3278929919","RU" +"3278929920","3278938111","TR" +"3278938112","3278938119","DE" +"3278938120","3278938123","DK" +"3278938124","3278938127","DE" +"3278938128","3278938131","TR" +"3278938132","3278938151","DE" +"3278938152","3278938155","GB" +"3278938156","3278938159","DE" +"3278938160","3278938163","ES" +"3278938164","3278938167","CH" +"3278938168","3278938171","DE" +"3278938172","3278938175","NL" +"3278938176","3278938179","FR" +"3278938180","3278938183","NL" +"3278938184","3278938187","DE" +"3278938188","3278938191","PT" +"3278938192","3278938195","ES" +"3278938196","3278938199","NL" +"3278938200","3278938203","CH" +"3278938204","3278938207","DE" +"3278938208","3278938219","IT" +"3278938220","3278938223","FR" +"3278938224","3278938227","DE" +"3278938228","3278938231","FR" +"3278938232","3278938235","DE" +"3278938236","3278938239","FR" +"3278938240","3278938243","LI" +"3278938244","3278938247","IT" +"3278938248","3278938251","AT" +"3278938252","3278938255","GR" +"3278938256","3278938263","CH" +"3278938264","3278938267","PL" +"3278938268","3278938275","FR" +"3278938276","3278938279","NL" +"3278938280","3278938283","AT" +"3278938284","3278938287","FR" +"3278938288","3278938291","ES" +"3278938292","3278938299","DE" +"3278938300","3278938303","ES" +"3278938304","3278938307","DE" +"3278938308","3278938311","GB" +"3278938312","3278938315","DE" +"3278938316","3278938323","FR" +"3278938324","3278938335","DE" +"3278938336","3278938339","CH" +"3278938340","3278938343","DE" +"3278938344","3278938347","NL" +"3278938348","3278938351","FR" +"3278938352","3278938355","DE" +"3278938356","3278938359","ES" +"3278938360","3278938363","DK" +"3278938364","3278938367","BH" +"3278938368","3278938375","FR" +"3278938376","3278938379","DE" +"3278938380","3278938383","FR" +"3278938384","3278938399","DE" +"3278938400","3278938403","AT" +"3278938404","3278938407","GB" +"3278938408","3278938411","CH" +"3278938412","3278938415","DE" +"3278938416","3278938419","CH" +"3278938420","3278938423","GB" +"3278938424","3278938427","DE" +"3278938428","3278938431","FR" +"3278938432","3278938435","SI" +"3278938436","3278938439","DE" +"3278938440","3278938443","IT" +"3278938444","3278938447","DE" +"3278938448","3278938451","IT" +"3278938452","3278938455","GB" +"3278938456","3278938459","ES" +"3278938460","3278938463","FR" +"3278938464","3278938467","DE" +"3278938468","3278938471","NL" +"3278938472","3278938479","DE" +"3278938480","3278938483","CH" +"3278938484","3278938487","DE" +"3278938488","3278938491","NL" +"3278938492","3278938495","ES" +"3278938496","3278938499","NL" +"3278938500","3278938503","DE" +"3278938504","3278938507","SE" +"3278938508","3278938511","IT" +"3278938512","3278938515","DE" +"3278938516","3278938523","NL" +"3278938524","3278938527","FR" +"3278938528","3278938531","NO" +"3278938532","3278938535","DK" +"3278938536","3278938555","DE" +"3278938556","3278938559","HU" +"3278938560","3278938563","CY" +"3278938564","3278938567","FR" +"3278938568","3278938575","DE" +"3278938576","3278938579","CZ" +"3278938580","3278938583","DE" +"3278938584","3278938587","GB" +"3278938588","3278938591","CH" +"3278938592","3278938595","DE" +"3278938596","3278938599","DK" +"3278938600","3278938603","DE" +"3278938604","3278938607","IT" +"3278938608","3278938611","AT" +"3278938612","3278938615","NL" +"3278938616","3278938619","DK" +"3278938620","3278938627","FR" +"3278938628","3278938631","DE" +"3278938632","3278938635","NL" +"3278938636","3278938639","GB" +"3278938640","3278938643","DE" +"3278938644","3278938647","GB" +"3278938648","3278938659","DE" +"3278938660","3278938663","CH" +"3278938664","3278938667","GB" +"3278938668","3278938671","AT" +"3278938672","3278938675","IT" +"3278938676","3278938679","FR" +"3278938680","3278938683","NO" +"3278938684","3278938687","DE" +"3278938688","3278938691","CH" +"3278938692","3278938695","DE" +"3278938696","3278938699","IT" +"3278938700","3278938703","ES" +"3278938704","3278938707","FR" +"3278938708","3278938715","DE" +"3278938716","3278938719","CH" +"3278938720","3278938723","NL" +"3278938724","3278938727","BE" +"3278938728","3278938731","ES" +"3278938732","3278938735","CH" +"3278938736","3278938739","IT" +"3278938740","3278938743","FR" +"3278938744","3278938751","DE" +"3278938752","3278938755","CH" +"3278938756","3278938759","DE" +"3278938760","3278938763","GB" +"3278938764","3278938767","FR" +"3278938768","3278938771","GB" +"3278938772","3278938775","SE" +"3278938776","3278938779","GB" +"3278938780","3278938783","IT" +"3278938784","3278938787","BE" +"3278938788","3278938791","ES" +"3278938792","3278938795","DE" +"3278938796","3278938799","GR" +"3278938800","3278938803","DE" +"3278938804","3278938807","IT" +"3278938808","3278938815","GB" +"3278938816","3278938819","ES" +"3278938820","3278938827","DE" +"3278938828","3278938831","GB" +"3278938832","3278938835","IT" +"3278938836","3278938839","FR" +"3278938840","3278938843","DE" +"3278938844","3278938847","HU" +"3278938848","3278938851","CH" +"3278938852","3278938855","DE" +"3278938856","3278938859","PT" +"3278938860","3278938863","DE" +"3278938864","3278938871","IT" +"3278938872","3278938875","DE" +"3278938876","3278938879","NL" +"3278938880","3278938887","FR" +"3278938888","3278938891","ES" +"3278938892","3278938895","DE" +"3278938896","3278938903","FR" +"3278938904","3278938911","GB" +"3278938912","3278938919","DE" +"3278938920","3278938923","SK" +"3278938924","3278938927","DE" +"3278938928","3278938935","GB" +"3278938936","3278938939","CH" +"3278938940","3278938943","GR" +"3278938944","3278938947","IT" +"3278938948","3278938951","DE" +"3278938952","3278938955","FR" +"3278938956","3278938959","GB" +"3278938960","3278938967","DE" +"3278938968","3278938971","BE" +"3278938972","3278938975","DE" +"3278938976","3278938979","NL" +"3278938980","3278938987","FR" +"3278938988","3278938991","AT" +"3278938992","3278938995","FR" +"3278938996","3278938999","DE" +"3278939000","3278939003","ES" +"3278939004","3278939007","NL" +"3278939008","3278939011","IE" +"3278939012","3278939015","RU" +"3278939016","3278939019","ES" +"3278939020","3278939023","NL" +"3278939024","3278939027","IT" +"3278939028","3278939031","CY" +"3278939032","3278939035","DE" +"3278939036","3278939039","HU" +"3278939040","3278939047","DE" +"3278939048","3278939055","FR" +"3278939056","3278939063","DE" +"3278939064","3278939067","ES" +"3278939068","3278939075","DE" +"3278939076","3278939079","CH" +"3278939080","3278939083","DE" +"3278939084","3278939087","IT" +"3278939088","3278939091","IS" +"3278939092","3278939095","DE" +"3278939096","3278939099","IT" +"3278939100","3278939103","DE" +"3278939104","3278939107","CH" +"3278939108","3278939111","FR" +"3278939112","3278939115","DE" +"3278939116","3278939119","NL" +"3278939120","3278939131","DE" +"3278939132","3278939135","NL" +"3278939136","3278939147","US" +"3278939148","3278939151","AR" +"3278939152","3278939155","ES" +"3278939156","3278939195","US" +"3278939196","3278939199","CL" +"3278939200","3278939259","US" +"3278939260","3278939263","BR" +"3278939264","3278939271","AR" +"3278939272","3278939279","US" +"3278939280","3278939283","CO" +"3278939284","3278939291","US" +"3278939292","3278939295","AR" +"3278939296","3278939307","US" +"3278939308","3278939311","MX" +"3278939312","3278939315","US" +"3278939316","3278939319","AR" +"3278939320","3278939323","US" +"3278939324","3278939327","CA" +"3278939328","3278939331","US" +"3278939332","3278939335","BR" +"3278939336","3278939339","CA" +"3278939340","3278939351","US" +"3278939352","3278939355","BR" +"3278939356","3278939379","US" +"3278939380","3278939383","BR" +"3278939384","3278939391","US" +"3278939392","3278939395","DE" +"3278939396","3278939399","GB" +"3278939400","3278939403","DE" +"3278939404","3278939407","CH" +"3278939408","3278939415","DE" +"3278939416","3278939419","ZW" +"3278939420","3278939423","IE" +"3278939424","3278939427","GB" +"3278939428","3278939439","DE" +"3278939440","3278939443","IT" +"3278939444","3278939447","DE" +"3278939448","3278939451","PL" +"3278939452","3278939459","DE" +"3278939460","3278939463","DK" +"3278939464","3278939467","CY" +"3278939468","3278939471","DE" +"3278939472","3278939475","PL" +"3278939476","3278939479","BE" +"3278939480","3278939483","IT" +"3278939484","3278939491","NL" +"3278939492","3278939495","DE" +"3278939496","3278939499","CH" +"3278939500","3278939503","ES" +"3278939504","3278939511","DE" +"3278939512","3278939515","LU" +"3278939516","3278939523","NL" +"3278939524","3278939527","LU" +"3278939528","3278939531","FR" +"3278939532","3278939535","DE" +"3278939536","3278939539","BE" +"3278939540","3278939555","DE" +"3278939556","3278939559","IT" +"3278939560","3278939563","DE" +"3278939564","3278939567","FR" +"3278939568","3278939571","PT" +"3278939572","3278939575","ES" +"3278939576","3278939579","DE" +"3278939580","3278939583","NL" +"3278939584","3278939587","IT" +"3278939588","3278939591","LU" +"3278939592","3278939595","AO" +"3278939596","3278939599","NL" +"3278939600","3278939603","GB" +"3278939604","3278939607","DE" +"3278939608","3278939611","DK" +"3278939612","3278939615","FR" +"3278939616","3278939631","DE" +"3278939632","3278939635","GB" +"3278939636","3278939639","DK" +"3278939640","3278939643","DE" +"3278939644","3278939647","UA" +"3278939648","3278939651","FR" +"3278939652","3278939655","DE" +"3278939656","3278939659","FR" +"3278939660","3278939663","TR" +"3278939664","3278939667","IT" +"3278939668","3278939671","GB" +"3278939672","3278939679","FR" +"3278939680","3278939683","GR" +"3278939684","3278939687","FR" +"3278939688","3278939691","DE" +"3278939692","3278939695","FR" +"3278939696","3278939699","GR" +"3278939700","3278939703","TR" +"3278939704","3278939707","KE" +"3278939708","3278939711","TR" +"3278939712","3278939715","CY" +"3278939716","3278939723","TR" +"3278939724","3278939727","MC" +"3278939728","3278939731","DE" +"3278939732","3278939735","AT" +"3278939736","3278939739","RU" +"3278939740","3278939743","HU" +"3278939744","3278939747","GB" +"3278939748","3278939751","ES" +"3278939752","3278939755","GR" +"3278939756","3278939759","DE" +"3278939760","3278939763","FR" +"3278939764","3278939767","DE" +"3278939768","3278939771","ES" +"3278939772","3278939775","IT" +"3278939776","3278939779","DE" +"3278939780","3278939783","FR" +"3278939784","3278939787","BE" +"3278939788","3278939791","DE" +"3278939792","3278939795","ES" +"3278939796","3278939799","DE" +"3278939800","3278939803","ES" +"3278939804","3278939807","GB" +"3278939808","3278939815","DE" +"3278939816","3278939819","NL" +"3278939820","3278939823","DE" +"3278939824","3278939827","HU" +"3278939828","3278939835","DE" +"3278939836","3278939839","FR" +"3278939840","3278939843","IT" +"3278939844","3278939847","BE" +"3278939848","3278939851","CH" +"3278939852","3278939855","DE" +"3278939856","3278939859","FR" +"3278939860","3278939863","GB" +"3278939864","3278939867","IT" +"3278939868","3278939871","CH" +"3278939872","3278939875","ES" +"3278939876","3278939879","IT" +"3278939880","3278939883","ES" +"3278939884","3278939887","DE" +"3278939888","3278939891","PL" +"3278939892","3278939899","ES" +"3278939900","3278939903","IT" +"3278939904","3278939907","HK" +"3278939908","3278939911","MY" +"3278939912","3278939915","TH" +"3278939916","3278939923","SG" +"3278939924","3278939927","CN" +"3278939928","3278939931","SG" +"3278939932","3278939935","IN" +"3278939936","3278939939","MY" +"3278939940","3278939943","SG" +"3278939944","3278939947","TW" +"3278939948","3278939951","SG" +"3278939952","3278939955","MY" +"3278939956","3278939959","SG" +"3278939960","3278939963","CN" +"3278939964","3278939967","MY" +"3278939968","3278939971","TW" +"3278939972","3278939979","MY" +"3278939980","3278939983","TH" +"3278939984","3278939987","DE" +"3278939988","3278939991","CN" +"3278939992","3278939995","SG" +"3278939996","3278939999","MY" +"3278940000","3278940011","SG" +"3278940012","3278940015","ID" +"3278940016","3278940059","SG" +"3278940060","3278940067","CN" +"3278940068","3278940071","TW" +"3278940072","3278940083","SG" +"3278940084","3278940091","MY" +"3278940092","3278940095","SG" +"3278940096","3278940099","IN" +"3278940100","3278940103","SG" +"3278940104","3278940107","MY" +"3278940108","3278940127","SG" +"3278940128","3278940131","TW" +"3278940132","3278940135","BD" +"3278940136","3278940139","SG" +"3278940140","3278940143","IN" +"3278940144","3278940151","MY" +"3278940152","3278940155","IN" +"3278940156","3278940159","PH" +"3278940160","3278940163","GR" +"3278940164","3278940167","CH" +"3278940168","3278940171","DK" +"3278940172","3278940175","FR" +"3278940176","3278940179","GB" +"3278940180","3278940183","CH" +"3278940184","3278940187","DE" +"3278940188","3278940195","GB" +"3278940196","3278940211","DE" +"3278940212","3278940215","PT" +"3278940216","3278940219","NL" +"3278940220","3278940223","GB" +"3278940224","3278940227","CH" +"3278940228","3278940231","DE" +"3278940232","3278940235","CH" +"3278940236","3278940239","ES" +"3278940240","3278940243","CY" +"3278940244","3278940247","DE" +"3278940248","3278940251","FR" +"3278940252","3278940255","IT" +"3278940256","3278940259","BE" +"3278940260","3278940263","DE" +"3278940264","3278940267","ES" +"3278940268","3278940275","DE" +"3278940276","3278940279","GB" +"3278940280","3278940283","CH" +"3278940284","3278940291","NL" +"3278940292","3278940295","DE" +"3278940296","3278940299","IT" +"3278940300","3278940303","FR" +"3278940304","3278940307","DE" +"3278940308","3278940311","CH" +"3278940312","3278940315","IT" +"3278940316","3278940319","DE" +"3278940320","3278940323","NL" +"3278940324","3278940327","ES" +"3278940328","3278940335","DE" +"3278940336","3278940339","NL" +"3278940340","3278940347","DE" +"3278940348","3278940355","GB" +"3278940356","3278940359","NL" +"3278940360","3278940363","GR" +"3278940364","3278940367","IT" +"3278940368","3278940371","FR" +"3278940372","3278940375","GB" +"3278940376","3278940379","PT" +"3278940380","3278940383","FR" +"3278940384","3278940387","NL" +"3278940388","3278940391","IE" +"3278940392","3278940395","FR" +"3278940396","3278940399","NL" +"3278940400","3278940403","DE" +"3278940404","3278940407","FR" +"3278940408","3278940411","IT" +"3278940412","3278940412","CH" +"3278940413","3278940415","DE" +"3278940416","3278940419","BE" +"3278940420","3278940423","DE" +"3278940424","3278940427","CH" +"3278940428","3278940431","DE" +"3278940432","3278940443","CH" +"3278940444","3278940447","DE" +"3278940448","3278940451","GB" +"3278940452","3278940455","DE" +"3278940456","3278940459","GB" +"3278940460","3278940463","DE" +"3278940464","3278940467","FR" +"3278940468","3278940471","DE" +"3278940472","3278940475","ES" +"3278940476","3278940479","FR" +"3278940480","3278940483","CH" +"3278940484","3278940487","FR" +"3278940488","3278940491","ES" +"3278940492","3278940495","IT" +"3278940496","3278940499","NL" +"3278940500","3278940503","FR" +"3278940504","3278940507","DK" +"3278940508","3278940511","FR" +"3278940512","3278940515","DE" +"3278940516","3278940523","CH" +"3278940524","3278940531","ES" +"3278940532","3278940535","DE" +"3278940536","3278940539","CH" +"3278940540","3278940543","ES" +"3278940544","3278940551","DE" +"3278940552","3278940555","GB" +"3278940556","3278940559","DE" +"3278940560","3278940563","AT" +"3278940564","3278940571","FR" +"3278940572","3278940579","CH" +"3278940580","3278940587","DE" +"3278940588","3278940591","IT" +"3278940592","3278940595","FR" +"3278940596","3278940599","BE" +"3278940600","3278940603","DE" +"3278940604","3278940607","FR" +"3278940608","3278940611","ES" +"3278940612","3278940615","PT" +"3278940616","3278940619","IT" +"3278940620","3278940623","DE" +"3278940624","3278940631","IT" +"3278940632","3278940635","GB" +"3278940636","3278940639","BE" +"3278940640","3278940643","CH" +"3278940644","3278940647","IT" +"3278940648","3278940651","DE" +"3278940652","3278940655","FR" +"3278940656","3278940663","IT" +"3278940664","3278940671","FR" +"3278940672","3278940679","DE" +"3278940680","3278940683","CH" +"3278940684","3278940691","NL" +"3278940692","3278940695","SE" +"3278940696","3278940707","DE" +"3278940708","3278940711","ES" +"3278940712","3278940715","BE" +"3278940716","3278940723","ES" +"3278940724","3278940727","FR" +"3278940728","3278940731","DE" +"3278940732","3278940739","FR" +"3278940740","3278940743","GB" +"3278940744","3278940747","ES" +"3278940748","3278940751","DE" +"3278940752","3278940759","FR" +"3278940760","3278940763","NL" +"3278940764","3278940767","DE" +"3278940768","3278940771","GB" +"3278940772","3278940783","DE" +"3278940784","3278940787","CH" +"3278940788","3278940791","GB" +"3278940792","3278940795","NL" +"3278940796","3278940803","DE" +"3278940804","3278940807","DK" +"3278940808","3278940815","DE" +"3278940816","3278940819","IT" +"3278940820","3278940823","DE" +"3278940824","3278940827","IT" +"3278940828","3278940831","DE" +"3278940832","3278940835","CH" +"3278940836","3278940839","IT" +"3278940840","3278940847","DE" +"3278940848","3278940851","CH" +"3278940852","3278940855","DE" +"3278940856","3278940859","PT" +"3278940860","3278940863","NL" +"3278940864","3278940867","CH" +"3278940868","3278940871","GB" +"3278940872","3278940875","DE" +"3278940876","3278940879","IT" +"3278940880","3278940883","CH" +"3278940884","3278940887","ES" +"3278940888","3278940891","BE" +"3278940892","3278940895","DE" +"3278940896","3278940899","IT" +"3278940900","3278940903","FR" +"3278940904","3278940911","ES" +"3278940912","3278940915","IT" +"3278940916","3278940919","DE" +"3278940920","3278940923","PT" +"3278940924","3278940931","DE" +"3278940932","3278940935","NL" +"3278940936","3278940939","ES" +"3278940940","3278940943","FR" +"3278940944","3278940947","NL" +"3278940948","3278940951","FR" +"3278940952","3278940955","IT" +"3278940956","3278940959","DK" +"3278940960","3278940963","FR" +"3278940964","3278940967","IT" +"3278940968","3278940971","FR" +"3278940972","3278940983","DE" +"3278940984","3278940987","IT" +"3278940988","3278940991","NL" +"3278940992","3278940995","PT" +"3278940996","3278940999","DE" +"3278941000","3278941003","NL" +"3278941004","3278941007","CH" +"3278941008","3278941011","ES" +"3278941012","3278941015","GB" +"3278941016","3278941023","DE" +"3278941024","3278941027","IT" +"3278941028","3278941031","FR" +"3278941032","3278941035","DE" +"3278941036","3278941039","IT" +"3278941040","3278941043","DE" +"3278941044","3278941047","FR" +"3278941048","3278941051","ES" +"3278941052","3278941059","DE" +"3278941060","3278941063","GB" +"3278941064","3278941067","IT" +"3278941068","3278941071","ES" +"3278941072","3278941075","IT" +"3278941076","3278941083","DE" +"3278941084","3278941087","GB" +"3278941088","3278941091","BE" +"3278941092","3278941095","DK" +"3278941096","3278941099","FR" +"3278941100","3278941107","DE" +"3278941108","3278941111","DK" +"3278941112","3278941119","FR" +"3278941120","3278941127","DE" +"3278941128","3278941131","BE" +"3278941132","3278941135","NL" +"3278941136","3278941139","GB" +"3278941140","3278941143","DE" +"3278941144","3278941151","IT" +"3278941152","3278941155","DE" +"3278941156","3278941159","SE" +"3278941160","3278941167","DE" +"3278941168","3278941171","GB" +"3278941172","3278941175","AT" +"3278941176","3278941179","IT" +"3278941180","3278941183","FR" +"3278941184","3278941191","US" +"3278941192","3278941195","BR" +"3278941196","3278941215","US" +"3278941216","3278941219","BR" +"3278941220","3278941243","US" +"3278941244","3278941247","CO" +"3278941248","3278941255","US" +"3278941256","3278941259","MX" +"3278941260","3278941279","US" +"3278941280","3278941283","BR" +"3278941284","3278941287","AR" +"3278941288","3278941303","US" +"3278941304","3278941307","CO" +"3278941308","3278941319","US" +"3278941320","3278941323","CA" +"3278941324","3278941331","US" +"3278941332","3278941335","BR" +"3278941336","3278941343","US" +"3278941344","3278941347","AR" +"3278941348","3278941371","US" +"3278941372","3278941375","CA" +"3278941376","3278941399","US" +"3278941400","3278941403","VE" +"3278941404","3278941407","BR" +"3278941408","3278941419","US" +"3278941420","3278941423","DE" +"3278941424","3278941427","CL" +"3278941428","3278941431","PE" +"3278941432","3278941439","US" +"3278941440","3278941443","AR" +"3278941444","3278941455","US" +"3278941456","3278941459","JM" +"3278941460","3278941475","US" +"3278941476","3278941479","BR" +"3278941480","3278941491","US" +"3278941492","3278941495","MX" +"3278941496","3278941499","US" +"3278941500","3278941503","CA" +"3278941504","3278941587","US" +"3278941588","3278941591","DE" +"3278941592","3278941595","US" +"3278941596","3278941599","PE" +"3278941600","3278941615","US" +"3278941616","3278941619","CA" +"3278941620","3278941639","US" +"3278941640","3278941643","BR" +"3278941644","3278941651","US" +"3278941652","3278941655","VE" +"3278941656","3278941659","US" +"3278941660","3278941663","BR" +"3278941664","3278941667","CA" +"3278941668","3278941671","US" +"3278941672","3278941675","VE" +"3278941676","3278941691","US" +"3278941692","3278941695","MX" +"3278941696","3278941735","US" +"3278941736","3278941739","CA" +"3278941740","3278941743","US" +"3278941744","3278941747","CA" +"3278941748","3278941819","US" +"3278941820","3278941823","CL" +"3278941824","3278941847","US" +"3278941848","3278941855","AR" +"3278941856","3278941891","US" +"3278941892","3278941895","CA" +"3278941896","3278941911","US" +"3278941912","3278941915","MX" +"3278941916","3278941943","US" +"3278941944","3278941947","CO" +"3278941948","3278941951","US" +"3278941952","3278941955","GB" +"3278941956","3278941959","FR" +"3278941960","3278941963","DE" +"3278941964","3278941971","GB" +"3278941972","3278941979","DE" +"3278941980","3278941987","ES" +"3278941988","3278941995","FR" +"3278941996","3278941999","ES" +"3278942000","3278942003","DE" +"3278942004","3278942011","IT" +"3278942012","3278942015","DE" +"3278942016","3278942019","FR" +"3278942020","3278942023","DE" +"3278942024","3278942027","FR" +"3278942028","3278942031","CH" +"3278942032","3278942035","GR" +"3278942036","3278942039","CH" +"3278942040","3278942043","ES" +"3278942044","3278942047","FR" +"3278942048","3278942051","DE" +"3278942052","3278942055","CH" +"3278942056","3278942059","ES" +"3278942060","3278942063","DE" +"3278942064","3278942071","ES" +"3278942072","3278942075","FR" +"3278942076","3278942079","DE" +"3278942080","3278942083","ES" +"3278942084","3278942087","BE" +"3278942088","3278942091","ES" +"3278942092","3278942095","BE" +"3278942096","3278942099","PL" +"3278942100","3278942103","GB" +"3278942104","3278942107","CH" +"3278942108","3278942111","DE" +"3278942112","3278942115","FR" +"3278942116","3278942119","DE" +"3278942120","3278942123","GB" +"3278942124","3278942127","AT" +"3278942128","3278942131","DE" +"3278942132","3278942135","GB" +"3278942136","3278942139","UA" +"3278942140","3278942143","NL" +"3278942144","3278942147","GB" +"3278942148","3278942155","DE" +"3278942156","3278942159","FR" +"3278942160","3278942163","DE" +"3278942164","3278942167","IT" +"3278942168","3278942171","CH" +"3278942172","3278942175","GB" +"3278942176","3278942179","DE" +"3278942180","3278942183","FR" +"3278942184","3278942187","DK" +"3278942188","3278942191","IT" +"3278942192","3278942203","DE" +"3278942204","3278942207","CH" +"3278942208","3278942211","TW" +"3278942212","3278942227","AU" +"3278942228","3278942231","NZ" +"3278942232","3278942243","AU" +"3278942244","3278942247","NZ" +"3278942248","3278942255","AU" +"3278942256","3278942259","NZ" +"3278942260","3278942271","AU" +"3278942272","3278942275","NZ" +"3278942276","3278942291","AU" +"3278942292","3278942295","NZ" +"3278942296","3278942299","PG" +"3278942300","3278942355","AU" +"3278942356","3278942359","NZ" +"3278942360","3278942383","AU" +"3278942384","3278942387","NZ" +"3278942388","3278942399","AU" +"3278942400","3278942403","NZ" +"3278942404","3278942435","AU" +"3278942436","3278942439","DE" +"3278942440","3278942443","AU" +"3278942444","3278942447","NZ" +"3278942448","3278942455","AU" +"3278942456","3278942463","DE" +"3278942464","3278942467","SG" +"3278942468","3278942471","MY" +"3278942472","3278942475","IN" +"3278942476","3278942483","SG" +"3278942484","3278942487","CN" +"3278942488","3278942491","IN" +"3278942492","3278942495","MY" +"3278942496","3278942499","CN" +"3278942500","3278942507","MY" +"3278942508","3278942511","TH" +"3278942512","3278942515","SG" +"3278942516","3278942519","PH" +"3278942520","3278942539","IN" +"3278942540","3278942543","TW" +"3278942544","3278942547","PK" +"3278942548","3278942551","MY" +"3278942552","3278942555","TW" +"3278942556","3278942559","IN" +"3278942560","3278942571","MY" +"3278942572","3278942575","IN" +"3278942576","3278942579","MY" +"3278942580","3278942583","TW" +"3278942584","3278942587","SG" +"3278942588","3278942591","CN" +"3278942592","3278942595","TW" +"3278942596","3278942599","IN" +"3278942600","3278942603","SG" +"3278942604","3278942607","TW" +"3278942608","3278942611","TH" +"3278942612","3278942615","PH" +"3278942616","3278942627","SG" +"3278942628","3278942635","MY" +"3278942636","3278942643","SG" +"3278942644","3278942647","MY" +"3278942648","3278942651","IN" +"3278942652","3278942655","MY" +"3278942656","3278942667","SG" +"3278942668","3278942671","MY" +"3278942672","3278942675","SG" +"3278942676","3278942679","HK" +"3278942680","3278942683","TW" +"3278942684","3278942687","DE" +"3278942688","3278942691","SG" +"3278942692","3278942695","IN" +"3278942696","3278942699","SG" +"3278942700","3278942703","TW" +"3278942704","3278942707","MY" +"3278942708","3278942719","SG" +"3278942720","3278942721","DE" +"3278942722","3278942722","GB" +"3278942723","3278942724","DE" +"3278942725","3278942725","GB" +"3278942726","3278942726","IT" +"3278942727","3278942727","DE" +"3278942728","3278942728","CH" +"3278942729","3278942730","BE" +"3278942731","3278942731","DE" +"3278942732","3278942732","ES" +"3278942733","3278942733","LU" +"3278942734","3278942734","GB" +"3278942735","3278942735","DE" +"3278942736","3278942736","IT" +"3278942737","3278942737","GB" +"3278942738","3278942739","DE" +"3278942740","3278942740","NL" +"3278942741","3278942741","GB" +"3278942742","3278942742","DE" +"3278942743","3278942743","ES" +"3278942744","3278942748","DE" +"3278942749","3278942749","GB" +"3278942750","3278942750","IT" +"3278942751","3278942751","FR" +"3278942752","3278942753","CH" +"3278942754","3278942754","DE" +"3278942755","3278942755","GB" +"3278942756","3278942756","DE" +"3278942757","3278942757","GB" +"3278942758","3278942759","IT" +"3278942760","3278942761","DE" +"3278942762","3278942762","GB" +"3278942763","3278942763","NL" +"3278942764","3278942764","FR" +"3278942765","3278942765","CH" +"3278942766","3278942766","PL" +"3278942767","3278942767","FR" +"3278942768","3278942768","NO" +"3278942769","3278942769","GB" +"3278942770","3278942771","DE" +"3278942772","3278942772","BE" +"3278942773","3278942773","DE" +"3278942774","3278942774","CH" +"3278942775","3278942775","FR" +"3278942776","3278942776","DE" +"3278942777","3278942778","GB" +"3278942779","3278942779","SE" +"3278942780","3278942781","DE" +"3278942782","3278942782","ES" +"3278942783","3278942784","DE" +"3278942785","3278942785","GR" +"3278942786","3278942786","SI" +"3278942787","3278942787","IT" +"3278942788","3278942789","DE" +"3278942790","3278942790","ES" +"3278942791","3278942791","IT" +"3278942792","3278942792","US" +"3278942793","3278942793","CH" +"3278942794","3278942794","DE" +"3278942795","3278942795","GB" +"3278942796","3278942796","IT" +"3278942797","3278942797","GB" +"3278942798","3278942798","DE" +"3278942799","3278942799","IT" +"3278942800","3278942800","FR" +"3278942801","3278942801","GB" +"3278942802","3278942803","DE" +"3278942804","3278942804","IT" +"3278942805","3278942805","DE" +"3278942806","3278942806","BE" +"3278942807","3278942807","AT" +"3278942808","3278942809","DE" +"3278942810","3278942810","ES" +"3278942811","3278942811","NL" +"3278942812","3278942813","DE" +"3278942814","3278942814","CH" +"3278942815","3278942815","DE" +"3278942816","3278942816","AT" +"3278942817","3278942817","FR" +"3278942818","3278942818","DK" +"3278942819","3278942819","DE" +"3278942820","3278942820","IT" +"3278942821","3278942821","NL" +"3278942822","3278942824","DE" +"3278942825","3278942825","NL" +"3278942826","3278942826","RU" +"3278942827","3278942827","FR" +"3278942828","3278942828","ES" +"3278942829","3278942829","NL" +"3278942830","3278942830","IT" +"3278942831","3278942831","CH" +"3278942832","3278942832","IT" +"3278942833","3278942833","DE" +"3278942834","3278942834","NL" +"3278942835","3278942835","AT" +"3278942836","3278942837","DE" +"3278942838","3278942838","ES" +"3278942839","3278942839","FR" +"3278942840","3278942843","DE" +"3278942844","3278942844","ES" +"3278942845","3278942850","DE" +"3278942851","3278942851","HU" +"3278942852","3278942852","DE" +"3278942853","3278942853","ES" +"3278942854","3278942854","GB" +"3278942855","3278942855","ES" +"3278942856","3278942856","NO" +"3278942857","3278942857","DE" +"3278942858","3278942858","IT" +"3278942859","3278942859","DE" +"3278942860","3278942860","IT" +"3278942861","3278942861","FR" +"3278942862","3278942863","DE" +"3278942864","3278942864","ES" +"3278942865","3278942865","GB" +"3278942866","3278942867","NL" +"3278942868","3278942868","DE" +"3278942869","3278942869","IT" +"3278942870","3278942870","CH" +"3278942871","3278942871","IS" +"3278942872","3278942872","ES" +"3278942873","3278942873","IT" +"3278942874","3278942875","DE" +"3278942876","3278942876","PL" +"3278942877","3278942877","DE" +"3278942878","3278942878","NL" +"3278942879","3278942879","DK" +"3278942880","3278942881","DE" +"3278942882","3278942882","CH" +"3278942883","3278942883","GB" +"3278942884","3278942884","DE" +"3278942885","3278942885","NL" +"3278942886","3278942886","DE" +"3278942887","3278942887","IT" +"3278942888","3278942889","DE" +"3278942890","3278942890","ES" +"3278942891","3278942894","DE" +"3278942895","3278942895","NL" +"3278942896","3278942896","GB" +"3278942897","3278942897","CH" +"3278942898","3278942899","NL" +"3278942900","3278942903","DE" +"3278942904","3278942904","BE" +"3278942905","3278942905","IE" +"3278942906","3278942907","DE" +"3278942908","3278942908","GB" +"3278942909","3278942910","DE" +"3278942911","3278942911","IT" +"3278942912","3278942913","DE" +"3278942914","3278942914","CH" +"3278942915","3278942915","DE" +"3278942916","3278942916","CH" +"3278942917","3278942922","DE" +"3278942923","3278942923","NL" +"3278942924","3278942924","DE" +"3278942925","3278942925","GB" +"3278942926","3278942930","DE" +"3278942931","3278942931","CH" +"3278942932","3278942932","NL" +"3278942933","3278942933","BE" +"3278942934","3278942934","IT" +"3278942935","3278942936","NL" +"3278942937","3278942937","DE" +"3278942938","3278942938","CH" +"3278942939","3278942939","ES" +"3278942940","3278942940","DE" +"3278942941","3278942941","IT" +"3278942942","3278942942","DE" +"3278942943","3278942944","NL" +"3278942945","3278942946","DE" +"3278942947","3278942947","BE" +"3278942948","3278942948","AT" +"3278942949","3278942949","CH" +"3278942950","3278942950","DE" +"3278942951","3278942951","IT" +"3278942952","3278942953","DE" +"3278942954","3278942954","AT" +"3278942955","3278942955","DE" +"3278942956","3278942956","IT" +"3278942957","3278942957","DE" +"3278942958","3278942958","CH" +"3278942959","3278942959","DE" +"3278942960","3278942960","FR" +"3278942961","3278942961","PT" +"3278942962","3278942963","NL" +"3278942964","3278942966","DE" +"3278942967","3278942967","NO" +"3278942968","3278942968","NL" +"3278942969","3278942969","AT" +"3278942970","3278942970","ES" +"3278942971","3278942972","IT" +"3278942973","3278942977","DE" +"3278942978","3278942978","BE" +"3278942979","3278942979","FR" +"3278942980","3278942980","IT" +"3278942981","3278942983","DE" +"3278942984","3278942984","IT" +"3278942985","3278942985","ES" +"3278942986","3278942986","CH" +"3278942987","3278942987","BE" +"3278942988","3278942990","CH" +"3278942991","3278942991","GB" +"3278942992","3278942992","DE" +"3278942993","3278942993","GB" +"3278942994","3278942994","CH" +"3278942995","3278942997","DE" +"3278942998","3278942998","CH" +"3278942999","3278942999","GB" +"3278943000","3278943002","DE" +"3278943003","3278943003","CH" +"3278943004","3278943005","DE" +"3278943006","3278943006","FR" +"3278943007","3278943007","DE" +"3278943008","3278943008","IT" +"3278943009","3278943009","DE" +"3278943010","3278943010","NL" +"3278943011","3278943011","DE" +"3278943012","3278943012","CZ" +"3278943013","3278943013","IT" +"3278943014","3278943014","DE" +"3278943015","3278943016","ES" +"3278943017","3278943017","FR" +"3278943018","3278943018","CH" +"3278943019","3278943019","DE" +"3278943020","3278943020","CH" +"3278943021","3278943021","BE" +"3278943022","3278943022","ES" +"3278943023","3278943023","BE" +"3278943024","3278943024","FR" +"3278943025","3278943025","DE" +"3278943026","3278943026","DK" +"3278943027","3278943027","DE" +"3278943028","3278943029","GB" +"3278943030","3278943030","ES" +"3278943031","3278943031","NL" +"3278943032","3278943032","FR" +"3278943033","3278943033","IT" +"3278943034","3278943034","DE" +"3278943035","3278943035","ES" +"3278943036","3278943036","DE" +"3278943037","3278943037","FR" +"3278943038","3278943038","DE" +"3278943039","3278943039","CH" +"3278943040","3278943040","IT" +"3278943041","3278943041","DE" +"3278943042","3278943042","BE" +"3278943043","3278943043","SI" +"3278943044","3278943044","FR" +"3278943045","3278943048","DE" +"3278943049","3278943049","GB" +"3278943050","3278943050","IT" +"3278943051","3278943051","AT" +"3278943052","3278943052","DE" +"3278943053","3278943053","IT" +"3278943054","3278943056","DE" +"3278943057","3278943057","CH" +"3278943058","3278943058","FR" +"3278943059","3278943059","CH" +"3278943060","3278943065","DE" +"3278943066","3278943066","GB" +"3278943067","3278943069","DE" +"3278943070","3278943070","PL" +"3278943071","3278943072","DE" +"3278943073","3278943073","AT" +"3278943074","3278943074","ES" +"3278943075","3278943076","FR" +"3278943077","3278943077","DE" +"3278943078","3278943079","CH" +"3278943080","3278943080","BE" +"3278943081","3278943081","FR" +"3278943082","3278943082","CH" +"3278943083","3278943084","DE" +"3278943085","3278943085","NL" +"3278943086","3278943087","DE" +"3278943088","3278943088","NL" +"3278943089","3278943090","DE" +"3278943091","3278943091","IT" +"3278943092","3278943092","ES" +"3278943093","3278943096","DE" +"3278943097","3278943097","BE" +"3278943098","3278943098","DE" +"3278943099","3278943099","AT" +"3278943100","3278943100","SE" +"3278943101","3278943101","AT" +"3278943102","3278943102","ZA" +"3278943103","3278943105","DE" +"3278943106","3278943106","FR" +"3278943107","3278943107","DE" +"3278943108","3278943108","FR" +"3278943109","3278943109","IT" +"3278943110","3278943110","DK" +"3278943111","3278943111","GB" +"3278943112","3278943112","PT" +"3278943113","3278943113","ES" +"3278943114","3278943114","CH" +"3278943115","3278943115","PT" +"3278943116","3278943116","CH" +"3278943117","3278943117","DE" +"3278943118","3278943119","IT" +"3278943120","3278943120","FR" +"3278943121","3278943121","AT" +"3278943122","3278943122","GB" +"3278943123","3278943123","FR" +"3278943124","3278943124","BE" +"3278943125","3278943125","CH" +"3278943126","3278943126","IT" +"3278943127","3278943127","DE" +"3278943128","3278943128","GB" +"3278943129","3278943130","DE" +"3278943131","3278943131","BE" +"3278943132","3278943132","FR" +"3278943133","3278943133","IT" +"3278943134","3278943135","NL" +"3278943136","3278943136","FR" +"3278943137","3278943137","CH" +"3278943138","3278943138","BE" +"3278943139","3278943139","IT" +"3278943140","3278943140","ES" +"3278943141","3278943141","NL" +"3278943142","3278943142","FR" +"3278943143","3278943143","ES" +"3278943144","3278943145","DE" +"3278943146","3278943146","CH" +"3278943147","3278943147","NL" +"3278943148","3278943148","FR" +"3278943149","3278943149","BE" +"3278943150","3278943150","DE" +"3278943151","3278943151","NL" +"3278943152","3278943153","DE" +"3278943154","3278943154","SE" +"3278943155","3278943159","DE" +"3278943160","3278943160","ES" +"3278943161","3278943161","BE" +"3278943162","3278943162","ES" +"3278943163","3278943163","DE" +"3278943164","3278943164","NL" +"3278943165","3278943165","SE" +"3278943166","3278943168","DE" +"3278943169","3278943169","BE" +"3278943170","3278943172","FR" +"3278943173","3278943173","NL" +"3278943174","3278943174","DE" +"3278943175","3278943177","ES" +"3278943178","3278943178","DE" +"3278943179","3278943179","CH" +"3278943180","3278943181","DE" +"3278943182","3278943182","SE" +"3278943183","3278943183","FR" +"3278943184","3278943184","DE" +"3278943185","3278943185","BE" +"3278943186","3278943186","NL" +"3278943187","3278943187","DE" +"3278943188","3278943188","GB" +"3278943189","3278943191","DE" +"3278943192","3278943192","LU" +"3278943193","3278943193","DE" +"3278943194","3278943194","IT" +"3278943195","3278943195","DE" +"3278943196","3278943196","CH" +"3278943197","3278943197","NL" +"3278943198","3278943198","GR" +"3278943199","3278943199","GB" +"3278943200","3278943200","DE" +"3278943201","3278943202","CH" +"3278943203","3278943203","SE" +"3278943204","3278943206","DE" +"3278943207","3278943207","IT" +"3278943208","3278943208","DE" +"3278943209","3278943209","ES" +"3278943210","3278943212","IT" +"3278943213","3278943213","DE" +"3278943214","3278943214","IT" +"3278943215","3278943215","GB" +"3278943216","3278943216","CH" +"3278943217","3278943217","GB" +"3278943218","3278943218","IT" +"3278943219","3278943220","DE" +"3278943221","3278943221","CH" +"3278943222","3278943222","DE" +"3278943223","3278943223","NL" +"3278943224","3278943225","DE" +"3278943226","3278943226","FR" +"3278943227","3278943227","GB" +"3278943228","3278943228","ES" +"3278943229","3278943235","DE" +"3278943236","3278943236","ES" +"3278943237","3278943237","FR" +"3278943238","3278943239","DE" +"3278943240","3278943240","NL" +"3278943241","3278943242","DE" +"3278943243","3278943243","ES" +"3278943244","3278943244","FR" +"3278943245","3278943245","DE" +"3278943246","3278943246","NL" +"3278943247","3278943247","CH" +"3278943248","3278943248","DE" +"3278943249","3278943249","ES" +"3278943250","3278943251","FR" +"3278943252","3278943252","IT" +"3278943253","3278943253","DE" +"3278943254","3278943254","DK" +"3278943255","3278943255","DE" +"3278943256","3278943256","FR" +"3278943257","3278943257","IT" +"3278943258","3278943260","DE" +"3278943261","3278943261","ES" +"3278943262","3278943262","NL" +"3278943263","3278943263","FR" +"3278943264","3278943265","DE" +"3278943266","3278943266","FR" +"3278943267","3278943267","NL" +"3278943268","3278943268","DE" +"3278943269","3278943270","CH" +"3278943271","3278943271","ES" +"3278943272","3278943274","DE" +"3278943275","3278943275","IT" +"3278943276","3278943277","DE" +"3278943278","3278943278","GB" +"3278943279","3278943279","DE" +"3278943280","3278943280","FR" +"3278943281","3278943281","IT" +"3278943282","3278943283","DE" +"3278943284","3278943284","IT" +"3278943285","3278943287","DE" +"3278943288","3278943288","FR" +"3278943289","3278943289","DE" +"3278943290","3278943290","IT" +"3278943291","3278943292","DE" +"3278943293","3278943293","GB" +"3278943294","3278943294","IT" +"3278943295","3278943296","ES" +"3278943297","3278943297","IT" +"3278943298","3278943298","PT" +"3278943299","3278943299","DK" +"3278943300","3278943300","GB" +"3278943301","3278943301","CH" +"3278943302","3278943302","BE" +"3278943303","3278943303","DK" +"3278943304","3278943304","FR" +"3278943305","3278943305","LU" +"3278943306","3278943306","AT" +"3278943307","3278943308","DE" +"3278943309","3278943309","PT" +"3278943310","3278943310","ES" +"3278943311","3278943311","BE" +"3278943312","3278943314","DE" +"3278943315","3278943316","FR" +"3278943317","3278943318","DE" +"3278943319","3278943319","NL" +"3278943320","3278943320","BE" +"3278943321","3278943321","DE" +"3278943322","3278943322","NL" +"3278943323","3278943323","FR" +"3278943324","3278943324","GB" +"3278943325","3278943326","DE" +"3278943327","3278943328","IT" +"3278943329","3278943329","DE" +"3278943330","3278943330","ES" +"3278943331","3278943331","PL" +"3278943332","3278943333","DE" +"3278943334","3278943334","FR" +"3278943335","3278943335","AT" +"3278943336","3278943337","IT" +"3278943338","3278943338","DE" +"3278943339","3278943339","PT" +"3278943340","3278943340","ES" +"3278943341","3278943341","CH" +"3278943342","3278943343","DE" +"3278943344","3278943344","GB" +"3278943345","3278943345","DE" +"3278943346","3278943346","FR" +"3278943347","3278943347","DE" +"3278943348","3278943349","GB" +"3278943350","3278943351","DE" +"3278943352","3278943352","NL" +"3278943353","3278943353","DE" +"3278943354","3278943355","ES" +"3278943356","3278943356","FR" +"3278943357","3278943357","ES" +"3278943358","3278943358","FR" +"3278943359","3278943359","ES" +"3278943360","3278943360","CH" +"3278943361","3278943361","DE" +"3278943362","3278943362","IT" +"3278943363","3278943363","DE" +"3278943364","3278943364","IT" +"3278943365","3278943366","DE" +"3278943367","3278943367","FR" +"3278943368","3278943369","DE" +"3278943370","3278943370","FR" +"3278943371","3278943371","DE" +"3278943372","3278943372","CH" +"3278943373","3278943374","GR" +"3278943375","3278943375","ES" +"3278943376","3278943376","NO" +"3278943377","3278943377","IT" +"3278943378","3278943378","DE" +"3278943379","3278943379","CH" +"3278943380","3278943380","ES" +"3278943381","3278943381","GB" +"3278943382","3278943382","ES" +"3278943383","3278943383","PL" +"3278943384","3278943384","IT" +"3278943385","3278943385","DE" +"3278943386","3278943387","FR" +"3278943388","3278943388","ES" +"3278943389","3278943389","BE" +"3278943390","3278943390","ES" +"3278943391","3278943391","DE" +"3278943392","3278943392","PL" +"3278943393","3278943393","CH" +"3278943394","3278943394","FR" +"3278943395","3278943395","IT" +"3278943396","3278943396","NL" +"3278943397","3278943399","DE" +"3278943400","3278943400","FR" +"3278943401","3278943401","DE" +"3278943402","3278943402","FR" +"3278943403","3278943403","GB" +"3278943404","3278943404","DE" +"3278943405","3278943405","GB" +"3278943406","3278943406","AT" +"3278943407","3278943407","DE" +"3278943408","3278943408","FR" +"3278943409","3278943409","IT" +"3278943410","3278943410","NL" +"3278943411","3278943411","ES" +"3278943412","3278943412","GB" +"3278943413","3278943413","NL" +"3278943414","3278943414","ES" +"3278943415","3278943415","UA" +"3278943416","3278943416","NL" +"3278943417","3278943417","DE" +"3278943418","3278943418","GB" +"3278943419","3278943419","ES" +"3278943420","3278943420","BE" +"3278943421","3278943422","DE" +"3278943423","3278943423","IT" +"3278943424","3278943424","DE" +"3278943425","3278943425","GB" +"3278943426","3278943426","DE" +"3278943427","3278943427","AT" +"3278943428","3278943428","DE" +"3278943429","3278943430","IT" +"3278943431","3278943431","CH" +"3278943432","3278943432","DE" +"3278943433","3278943433","GB" +"3278943434","3278943435","DE" +"3278943436","3278943436","ES" +"3278943437","3278943437","FR" +"3278943438","3278943438","DE" +"3278943439","3278943439","SE" +"3278943440","3278943440","DK" +"3278943441","3278943441","IT" +"3278943442","3278943442","FR" +"3278943443","3278943445","DE" +"3278943446","3278943446","CH" +"3278943447","3278943447","DE" +"3278943448","3278943448","FR" +"3278943449","3278943449","DE" +"3278943450","3278943450","CH" +"3278943451","3278943451","AT" +"3278943452","3278943452","DE" +"3278943453","3278943453","PT" +"3278943454","3278943455","DE" +"3278943456","3278943456","IT" +"3278943457","3278943457","GB" +"3278943458","3278943459","DE" +"3278943460","3278943460","FR" +"3278943461","3278943464","DE" +"3278943465","3278943465","ES" +"3278943466","3278943466","DE" +"3278943467","3278943467","ES" +"3278943468","3278943468","DE" +"3278943469","3278943469","NL" +"3278943470","3278943471","ES" +"3278943472","3278943472","BE" +"3278943473","3278943473","DE" +"3278943474","3278943474","BE" +"3278943475","3278943477","DE" +"3278943478","3278943478","NL" +"3278943479","3278943481","DE" +"3278943482","3278943482","IT" +"3278943483","3278943489","DE" +"3278943490","3278943490","BE" +"3278943491","3278943491","DE" +"3278943492","3278943492","CH" +"3278943493","3278943494","DE" +"3278943495","3278943495","FR" +"3278943496","3278943496","GB" +"3278943497","3278943497","AT" +"3278943498","3278943499","DE" +"3278943500","3278943500","IT" +"3278943501","3278943501","FR" +"3278943502","3278943504","DE" +"3278943505","3278943505","LI" +"3278943506","3278943506","AT" +"3278943507","3278943507","FR" +"3278943508","3278943509","IT" +"3278943510","3278943510","DE" +"3278943511","3278943512","IT" +"3278943513","3278943513","ES" +"3278943514","3278943514","BE" +"3278943515","3278943515","DE" +"3278943516","3278943517","ES" +"3278943518","3278943518","FR" +"3278943519","3278943519","HU" +"3278943520","3278943520","AT" +"3278943521","3278943521","ES" +"3278943522","3278943523","DE" +"3278943524","3278943524","AT" +"3278943525","3278943525","BE" +"3278943526","3278943526","FR" +"3278943527","3278943527","DE" +"3278943528","3278943528","CH" +"3278943529","3278943529","DE" +"3278943530","3278943530","AT" +"3278943531","3278943531","DE" +"3278943532","3278943532","NL" +"3278943533","3278943533","ES" +"3278943534","3278943534","GB" +"3278943535","3278943535","BR" +"3278943536","3278943537","ES" +"3278943538","3278943538","RE" +"3278943539","3278943539","IT" +"3278943540","3278943540","ES" +"3278943541","3278943542","DE" +"3278943543","3278943543","IT" +"3278943544","3278943545","DE" +"3278943546","3278943546","NL" +"3278943547","3278943547","CH" +"3278943548","3278943548","GB" +"3278943549","3278943549","IL" +"3278943550","3278943550","IT" +"3278943551","3278943551","DE" +"3278943552","3278943552","IT" +"3278943553","3278943553","DE" +"3278943554","3278943554","FR" +"3278943555","3278943555","DE" +"3278943556","3278943556","FR" +"3278943557","3278943557","DE" +"3278943558","3278943558","AT" +"3278943559","3278943560","DE" +"3278943561","3278943561","FR" +"3278943562","3278943564","DE" +"3278943565","3278943565","GB" +"3278943566","3278943566","BE" +"3278943567","3278943567","AE" +"3278943568","3278943568","NL" +"3278943569","3278943569","ES" +"3278943570","3278943570","DE" +"3278943571","3278943571","BE" +"3278943572","3278943572","GB" +"3278943573","3278943573","DE" +"3278943574","3278943574","DK" +"3278943575","3278943575","BE" +"3278943576","3278943576","NL" +"3278943577","3278943577","FR" +"3278943578","3278943578","DE" +"3278943579","3278943579","BE" +"3278943580","3278943580","IT" +"3278943581","3278943581","CH" +"3278943582","3278943582","DE" +"3278943583","3278943583","NL" +"3278943584","3278943585","DE" +"3278943586","3278943586","NL" +"3278943587","3278943587","ES" +"3278943588","3278943588","DE" +"3278943589","3278943589","IT" +"3278943590","3278943590","DE" +"3278943591","3278943591","NL" +"3278943592","3278943592","DE" +"3278943593","3278943593","PL" +"3278943594","3278943594","ES" +"3278943595","3278943595","GB" +"3278943596","3278943596","GR" +"3278943597","3278943598","DE" +"3278943599","3278943599","ES" +"3278943600","3278943601","DE" +"3278943602","3278943602","PL" +"3278943603","3278943603","FR" +"3278943604","3278943604","ES" +"3278943605","3278943605","DE" +"3278943606","3278943606","AT" +"3278943607","3278943607","DE" +"3278943608","3278943608","ES" +"3278943609","3278943609","DE" +"3278943610","3278943610","BE" +"3278943611","3278943611","NL" +"3278943612","3278943613","DE" +"3278943614","3278943614","IT" +"3278943615","3278943615","CH" +"3278943616","3278943616","DE" +"3278943617","3278943617","ES" +"3278943618","3278943619","DE" +"3278943620","3278943620","IT" +"3278943621","3278943621","CH" +"3278943622","3278943622","IT" +"3278943623","3278943623","DK" +"3278943624","3278943624","DE" +"3278943625","3278943625","FR" +"3278943626","3278943628","DE" +"3278943629","3278943630","FR" +"3278943631","3278943632","DE" +"3278943633","3278943633","GB" +"3278943634","3278943634","DE" +"3278943635","3278943635","IT" +"3278943636","3278943636","CH" +"3278943637","3278943638","IT" +"3278943639","3278943639","HU" +"3278943640","3278943641","DE" +"3278943642","3278943642","FR" +"3278943643","3278943643","NL" +"3278943644","3278943645","FR" +"3278943646","3278943646","IT" +"3278943647","3278943647","DE" +"3278943648","3278943648","DK" +"3278943649","3278943649","DE" +"3278943650","3278943650","ES" +"3278943651","3278943651","FR" +"3278943652","3278943653","IT" +"3278943654","3278943654","BE" +"3278943655","3278943655","FR" +"3278943656","3278943656","AT" +"3278943657","3278943658","DE" +"3278943659","3278943659","NL" +"3278943660","3278943660","CY" +"3278943661","3278943661","DE" +"3278943662","3278943662","ES" +"3278943663","3278943663","CH" +"3278943664","3278943666","ES" +"3278943667","3278943667","IT" +"3278943668","3278943669","DE" +"3278943670","3278943670","IT" +"3278943671","3278943672","DE" +"3278943673","3278943673","ES" +"3278943674","3278943675","DE" +"3278943676","3278943676","LU" +"3278943677","3278943677","IT" +"3278943678","3278943678","BE" +"3278943679","3278943679","FR" +"3278943680","3278943680","GB" +"3278943681","3278943681","CH" +"3278943682","3278943682","DE" +"3278943683","3278943683","PT" +"3278943684","3278943684","AD" +"3278943685","3278943686","DE" +"3278943687","3278943687","CH" +"3278943688","3278943689","IT" +"3278943690","3278943690","ES" +"3278943691","3278943692","DE" +"3278943693","3278943693","PL" +"3278943694","3278943694","GB" +"3278943695","3278943695","DE" +"3278943696","3278943696","GB" +"3278943697","3278943697","AT" +"3278943698","3278943698","IT" +"3278943699","3278943699","FR" +"3278943700","3278943700","CH" +"3278943701","3278943701","AT" +"3278943702","3278943702","FR" +"3278943703","3278943703","PL" +"3278943704","3278943705","DE" +"3278943706","3278943706","ES" +"3278943707","3278943707","CH" +"3278943708","3278943710","DE" +"3278943711","3278943711","IT" +"3278943712","3278943713","DE" +"3278943714","3278943714","ES" +"3278943715","3278943715","DE" +"3278943716","3278943716","ES" +"3278943717","3278943719","DE" +"3278943720","3278943720","CH" +"3278943721","3278943726","DE" +"3278943727","3278943727","PL" +"3278943728","3278943729","DE" +"3278943730","3278943730","FR" +"3278943731","3278943731","DK" +"3278943732","3278943733","CH" +"3278943734","3278943734","DE" +"3278943735","3278943735","AD" +"3278943736","3278943736","DE" +"3278943737","3278943737","ES" +"3278943738","3278943740","DE" +"3278943741","3278943741","PT" +"3278943742","3278943742","IL" +"3278943743","3278943745","DE" +"3278943746","3278943746","CH" +"3278943747","3278943747","DE" +"3278943748","3278943749","ES" +"3278943750","3278943751","DE" +"3278943752","3278943752","GR" +"3278943753","3278943753","DE" +"3278943754","3278943754","FR" +"3278943755","3278943755","SL" +"3278943756","3278943756","DE" +"3278943757","3278943757","FR" +"3278943758","3278943758","DE" +"3278943759","3278943759","NL" +"3278943760","3278943761","DE" +"3278943762","3278943762","CY" +"3278943763","3278943763","DE" +"3278943764","3278943764","FR" +"3278943765","3278943765","CH" +"3278943766","3278943766","BE" +"3278943767","3278943767","ES" +"3278943768","3278943768","DE" +"3278943769","3278943769","CZ" +"3278943770","3278943770","FR" +"3278943771","3278943771","CH" +"3278943772","3278943772","ES" +"3278943773","3278943773","IT" +"3278943774","3278943774","DE" +"3278943775","3278943776","PT" +"3278943777","3278943777","FR" +"3278943778","3278943778","CH" +"3278943779","3278943780","DE" +"3278943781","3278943781","GB" +"3278943782","3278943782","IT" +"3278943783","3278943786","DE" +"3278943787","3278943787","IT" +"3278943788","3278943788","DE" +"3278943789","3278943789","ES" +"3278943790","3278943790","DE" +"3278943791","3278943791","IT" +"3278943792","3278943792","FR" +"3278943793","3278943793","IT" +"3278943794","3278943794","HU" +"3278943795","3278943796","DE" +"3278943797","3278943797","ES" +"3278943798","3278943798","DE" +"3278943799","3278943799","IE" +"3278943800","3278943800","DE" +"3278943801","3278943801","LU" +"3278943802","3278943802","DE" +"3278943803","3278943803","GB" +"3278943804","3278943804","DE" +"3278943805","3278943805","DK" +"3278943806","3278943806","ES" +"3278943807","3278943807","DE" +"3278943808","3278943808","IT" +"3278943809","3278943809","FR" +"3278943810","3278943810","DE" +"3278943811","3278943811","GR" +"3278943812","3278943812","IT" +"3278943813","3278943813","IN" +"3278943814","3278943814","ES" +"3278943815","3278943815","MA" +"3278943816","3278943816","GB" +"3278943817","3278943817","FR" +"3278943818","3278943818","DE" +"3278943819","3278943819","AT" +"3278943820","3278943820","DE" +"3278943821","3278943821","SM" +"3278943822","3278943822","PL" +"3278943823","3278943823","DE" +"3278943824","3278943824","CH" +"3278943825","3278943826","DE" +"3278943827","3278943827","AT" +"3278943828","3278943828","ES" +"3278943829","3278943829","CH" +"3278943830","3278943830","ES" +"3278943831","3278943831","US" +"3278943832","3278943832","BE" +"3278943833","3278943833","IT" +"3278943834","3278943835","GB" +"3278943836","3278943836","DE" +"3278943837","3278943837","ES" +"3278943838","3278943838","DE" +"3278943839","3278943839","IT" +"3278943840","3278943845","DE" +"3278943846","3278943846","GB" +"3278943847","3278943847","FR" +"3278943848","3278943848","IT" +"3278943849","3278943849","DE" +"3278943850","3278943851","FR" +"3278943852","3278943852","BE" +"3278943853","3278943853","GB" +"3278943854","3278943854","ES" +"3278943855","3278943855","BE" +"3278943856","3278943856","DE" +"3278943857","3278943857","PL" +"3278943858","3278943858","NL" +"3278943859","3278943859","DE" +"3278943860","3278943860","FR" +"3278943861","3278943862","DE" +"3278943863","3278943863","IT" +"3278943864","3278943864","DK" +"3278943865","3278943865","GB" +"3278943866","3278943866","IT" +"3278943867","3278943867","ES" +"3278943868","3278943868","IT" +"3278943869","3278943869","IE" +"3278943870","3278943870","NL" +"3278943871","3278943871","FR" +"3278943872","3278943872","DE" +"3278943873","3278943873","IT" +"3278943874","3278943874","CH" +"3278943875","3278943875","IL" +"3278943876","3278943881","DE" +"3278943882","3278943882","PL" +"3278943883","3278943883","CH" +"3278943884","3278943884","DE" +"3278943885","3278943885","IT" +"3278943886","3278943888","DE" +"3278943889","3278943889","BE" +"3278943890","3278943890","NL" +"3278943891","3278943891","ES" +"3278943892","3278943893","DE" +"3278943894","3278943894","IT" +"3278943895","3278943895","DE" +"3278943896","3278943896","PL" +"3278943897","3278943897","ES" +"3278943898","3278943898","IT" +"3278943899","3278943899","GB" +"3278943900","3278943900","ES" +"3278943901","3278943901","DE" +"3278943902","3278943902","GB" +"3278943903","3278943903","IT" +"3278943904","3278943904","DE" +"3278943905","3278943905","FR" +"3278943906","3278943907","IT" +"3278943908","3278943908","GB" +"3278943909","3278943909","HU" +"3278943910","3278943910","FR" +"3278943911","3278943911","DE" +"3278943912","3278943913","IT" +"3278943914","3278943914","DE" +"3278943915","3278943915","PL" +"3278943916","3278943916","DE" +"3278943917","3278943917","FR" +"3278943918","3278943918","ES" +"3278943919","3278943920","FR" +"3278943921","3278943921","DE" +"3278943922","3278943922","ES" +"3278943923","3278943923","DE" +"3278943924","3278943924","IT" +"3278943925","3278943926","ES" +"3278943927","3278943927","GB" +"3278943928","3278943928","DE" +"3278943929","3278943929","PT" +"3278943930","3278943930","IT" +"3278943931","3278943932","DE" +"3278943933","3278943933","ES" +"3278943934","3278943934","DE" +"3278943935","3278943935","GR" +"3278943936","3278943939","DE" +"3278943940","3278943940","DK" +"3278943941","3278943941","GB" +"3278943942","3278943942","NL" +"3278943943","3278943943","AT" +"3278943944","3278943944","IT" +"3278943945","3278943945","NL" +"3278943946","3278943946","LU" +"3278943947","3278943947","DE" +"3278943948","3278943948","ES" +"3278943949","3278943949","DE" +"3278943950","3278943950","BE" +"3278943951","3278943951","LU" +"3278943952","3278943953","DE" +"3278943954","3278943954","FR" +"3278943955","3278943956","DE" +"3278943957","3278943957","GB" +"3278943958","3278943958","DK" +"3278943959","3278943959","DE" +"3278943960","3278943960","FR" +"3278943961","3278943964","DE" +"3278943965","3278943965","CH" +"3278943966","3278943967","DE" +"3278943968","3278943968","ES" +"3278943969","3278943969","PL" +"3278943970","3278943970","ES" +"3278943971","3278943971","BE" +"3278943972","3278943972","IT" +"3278943973","3278943973","DE" +"3278943974","3278943974","GR" +"3278943975","3278943975","CH" +"3278943976","3278943976","DE" +"3278943977","3278943977","DK" +"3278943978","3278943978","DE" +"3278943979","3278943979","ES" +"3278943980","3278943980","GB" +"3278943981","3278943981","DE" +"3278943982","3278943982","ES" +"3278943983","3278943983","DE" +"3278943984","3278943984","AT" +"3278943985","3278943985","NL" +"3278943986","3278943987","IT" +"3278943988","3278943988","ES" +"3278943989","3278943990","DE" +"3278943991","3278943991","NL" +"3278943992","3278943992","IT" +"3278943993","3278943993","AT" +"3278943994","3278943995","DE" +"3278943996","3278943997","CH" +"3278943998","3278943998","FR" +"3278943999","3278944001","DE" +"3278944002","3278944002","GB" +"3278944003","3278944003","LU" +"3278944004","3278944006","DE" +"3278944007","3278944007","NL" +"3278944008","3278944008","IT" +"3278944009","3278944009","CH" +"3278944010","3278944010","NL" +"3278944011","3278944012","DE" +"3278944013","3278944013","DK" +"3278944014","3278944014","IT" +"3278944015","3278944015","IS" +"3278944016","3278944016","PL" +"3278944017","3278944017","DE" +"3278944018","3278944018","BE" +"3278944019","3278944020","DE" +"3278944021","3278944021","IT" +"3278944022","3278944022","FR" +"3278944023","3278944023","AT" +"3278944024","3278944025","CH" +"3278944026","3278944027","FR" +"3278944028","3278944028","DE" +"3278944029","3278944029","IT" +"3278944030","3278944030","DE" +"3278944031","3278944031","FR" +"3278944032","3278944033","DE" +"3278944034","3278944034","GR" +"3278944035","3278944035","FR" +"3278944036","3278944036","US" +"3278944037","3278944037","FR" +"3278944038","3278944038","GB" +"3278944039","3278944039","DE" +"3278944040","3278944040","FR" +"3278944041","3278944041","DE" +"3278944042","3278944042","FR" +"3278944043","3278944043","DE" +"3278944044","3278944045","FR" +"3278944046","3278944046","NL" +"3278944047","3278944047","GB" +"3278944048","3278944048","BE" +"3278944049","3278944049","IT" +"3278944050","3278944050","DE" +"3278944051","3278944051","BE" +"3278944052","3278944052","AT" +"3278944053","3278944053","IT" +"3278944054","3278944054","DE" +"3278944055","3278944055","IT" +"3278944056","3278944058","DE" +"3278944059","3278944059","ES" +"3278944060","3278944060","BE" +"3278944061","3278944061","FR" +"3278944062","3278944063","DE" +"3278944064","3278944064","FR" +"3278944065","3278944065","IT" +"3278944066","3278944066","GB" +"3278944067","3278944067","DE" +"3278944068","3278944068","ES" +"3278944069","3278944069","PL" +"3278944070","3278944070","DE" +"3278944071","3278944071","DK" +"3278944072","3278944072","AT" +"3278944073","3278944073","FR" +"3278944074","3278944075","ES" +"3278944076","3278944076","DE" +"3278944077","3278944077","GB" +"3278944078","3278944078","DE" +"3278944079","3278944079","GB" +"3278944080","3278944080","DE" +"3278944081","3278944081","GB" +"3278944082","3278944082","IT" +"3278944083","3278944084","ES" +"3278944085","3278944085","PT" +"3278944086","3278944086","NL" +"3278944087","3278944087","CH" +"3278944088","3278944088","IT" +"3278944089","3278944089","DE" +"3278944090","3278944090","IT" +"3278944091","3278944091","MA" +"3278944092","3278944092","GR" +"3278944093","3278944094","DE" +"3278944095","3278944095","AT" +"3278944096","3278944096","GB" +"3278944097","3278944097","DE" +"3278944098","3278944098","SE" +"3278944099","3278944099","GB" +"3278944100","3278944102","DE" +"3278944103","3278944104","IT" +"3278944105","3278944105","FR" +"3278944106","3278944106","AT" +"3278944107","3278944108","DE" +"3278944109","3278944109","ES" +"3278944110","3278944111","DE" +"3278944112","3278944112","NL" +"3278944113","3278944113","DE" +"3278944114","3278944114","IT" +"3278944115","3278944116","ES" +"3278944117","3278944118","IT" +"3278944119","3278944119","ES" +"3278944120","3278944121","DE" +"3278944122","3278944122","FR" +"3278944123","3278944123","IT" +"3278944124","3278944124","DE" +"3278944125","3278944125","SE" +"3278944126","3278944126","ES" +"3278944127","3278944127","IT" +"3278944128","3278944128","PT" +"3278944129","3278944129","BE" +"3278944130","3278944130","DE" +"3278944131","3278944131","FR" +"3278944132","3278944132","IE" +"3278944133","3278944133","IT" +"3278944134","3278944134","ES" +"3278944135","3278944135","NL" +"3278944136","3278944137","DE" +"3278944138","3278944138","GB" +"3278944139","3278944139","FR" +"3278944140","3278944140","PT" +"3278944141","3278944141","FR" +"3278944142","3278944142","GB" +"3278944143","3278944143","AT" +"3278944144","3278944144","DE" +"3278944145","3278944145","SE" +"3278944146","3278944147","DE" +"3278944148","3278944148","ES" +"3278944149","3278944149","DE" +"3278944150","3278944150","IE" +"3278944151","3278944151","IT" +"3278944152","3278944152","IS" +"3278944153","3278944158","DE" +"3278944159","3278944159","CH" +"3278944160","3278944160","FR" +"3278944161","3278944161","DE" +"3278944162","3278944162","GB" +"3278944163","3278944163","HU" +"3278944164","3278944164","IT" +"3278944165","3278944166","DE" +"3278944167","3278944167","IT" +"3278944168","3278944168","CH" +"3278944169","3278944169","DE" +"3278944170","3278944171","CH" +"3278944172","3278944172","DE" +"3278944173","3278944173","FR" +"3278944174","3278944174","GB" +"3278944175","3278944175","DE" +"3278944176","3278944176","ES" +"3278944177","3278944177","LU" +"3278944178","3278944179","DE" +"3278944180","3278944180","GB" +"3278944181","3278944181","IT" +"3278944182","3278944182","FR" +"3278944183","3278944184","ES" +"3278944185","3278944185","NL" +"3278944186","3278944192","DE" +"3278944193","3278944193","FR" +"3278944194","3278944194","GB" +"3278944195","3278944195","IT" +"3278944196","3278944197","DE" +"3278944198","3278944198","IT" +"3278944199","3278944199","AT" +"3278944200","3278944200","DE" +"3278944201","3278944201","SE" +"3278944202","3278944202","NO" +"3278944203","3278944203","NL" +"3278944204","3278944207","DE" +"3278944208","3278944208","NL" +"3278944209","3278944209","PL" +"3278944210","3278944210","AT" +"3278944211","3278944211","DE" +"3278944212","3278944212","FR" +"3278944213","3278944213","DK" +"3278944214","3278944214","GB" +"3278944215","3278944215","IT" +"3278944216","3278944216","DE" +"3278944217","3278944217","IT" +"3278944218","3278944219","DE" +"3278944220","3278944220","GB" +"3278944221","3278944221","GR" +"3278944222","3278944222","IT" +"3278944223","3278944224","DE" +"3278944225","3278944225","NL" +"3278944226","3278944226","RU" +"3278944227","3278944227","IT" +"3278944228","3278944230","DE" +"3278944231","3278944231","CH" +"3278944232","3278944232","NL" +"3278944233","3278944233","GB" +"3278944234","3278944234","AT" +"3278944235","3278944235","DE" +"3278944236","3278944236","IT" +"3278944237","3278944238","DE" +"3278944239","3278944239","SE" +"3278944240","3278944240","FR" +"3278944241","3278944241","IT" +"3278944242","3278944242","ES" +"3278944243","3278944243","DE" +"3278944244","3278944244","ES" +"3278944245","3278944245","BE" +"3278944246","3278944246","NL" +"3278944247","3278944247","ES" +"3278944248","3278944248","NL" +"3278944249","3278944249","ES" +"3278944250","3278944250","IT" +"3278944251","3278944251","AT" +"3278944252","3278944252","IT" +"3278944253","3278944254","GB" +"3278944255","3278944256","DE" +"3278944257","3278944272","US" +"3278944273","3278944273","CA" +"3278944274","3278944274","US" +"3278944275","3278944275","CA" +"3278944276","3278944277","US" +"3278944278","3278944278","VE" +"3278944279","3278944279","DE" +"3278944280","3278944284","US" +"3278944285","3278944285","DE" +"3278944286","3278944286","US" +"3278944287","3278944288","CA" +"3278944289","3278944293","US" +"3278944294","3278944294","CA" +"3278944295","3278944346","US" +"3278944347","3278944347","AR" +"3278944348","3278944360","US" +"3278944361","3278944361","AR" +"3278944362","3278944365","US" +"3278944366","3278944366","MX" +"3278944367","3278944367","US" +"3278944368","3278944368","CA" +"3278944369","3278944379","US" +"3278944380","3278944380","DE" +"3278944381","3278944385","US" +"3278944386","3278944386","DE" +"3278944387","3278944388","US" +"3278944389","3278944389","CA" +"3278944390","3278944390","AR" +"3278944391","3278944391","CA" +"3278944392","3278944395","US" +"3278944396","3278944396","CA" +"3278944397","3278944399","US" +"3278944400","3278944400","BR" +"3278944401","3278944401","US" +"3278944402","3278944402","CA" +"3278944403","3278944412","US" +"3278944413","3278944413","CA" +"3278944414","3278944418","US" +"3278944419","3278944419","DE" +"3278944420","3278944420","CA" +"3278944421","3278944421","DE" +"3278944422","3278944432","US" +"3278944433","3278944433","DE" +"3278944434","3278944444","US" +"3278944445","3278944449","DE" +"3278944450","3278944451","CA" +"3278944452","3278944460","DE" +"3278944461","3278944461","US" +"3278944462","3278944470","DE" +"3278944471","3278944471","US" +"3278944472","3278944513","DE" +"3278944514","3278944517","US" +"3278944518","3278944518","DE" +"3278944519","3278944520","US" +"3278944521","3278944521","CA" +"3278944522","3278944522","US" +"3278944523","3278944523","CA" +"3278944524","3278944524","US" +"3278944525","3278944525","CL" +"3278944526","3278944526","US" +"3278944527","3278944527","CA" +"3278944528","3278944528","US" +"3278944529","3278944529","CA" +"3278944530","3278944537","US" +"3278944538","3278944538","AR" +"3278944539","3278944544","US" +"3278944545","3278944545","CA" +"3278944546","3278944555","US" +"3278944556","3278944556","CL" +"3278944557","3278944559","US" +"3278944560","3278944560","AR" +"3278944561","3278944561","US" +"3278944562","3278944562","CA" +"3278944563","3278944563","US" +"3278944564","3278944564","CA" +"3278944565","3278944569","US" +"3278944570","3278944570","DE" +"3278944571","3278944572","US" +"3278944573","3278944573","DE" +"3278944574","3278944574","US" +"3278944575","3278944575","DE" +"3278944576","3278944578","US" +"3278944579","3278944579","DE" +"3278944580","3278944580","AR" +"3278944581","3278944581","US" +"3278944582","3278944583","DE" +"3278944584","3278944588","US" +"3278944589","3278944589","DE" +"3278944590","3278944599","US" +"3278944600","3278944600","SA" +"3278944601","3278944606","US" +"3278944607","3278944608","DE" +"3278944609","3278944611","US" +"3278944612","3278944612","DE" +"3278944613","3278944626","US" +"3278944627","3278944627","DE" +"3278944628","3278944633","US" +"3278944634","3278944634","DE" +"3278944635","3278944638","US" +"3278944639","3278944640","DE" +"3278944641","3278944642","US" +"3278944643","3278944643","CL" +"3278944644","3278944650","US" +"3278944651","3278944651","DE" +"3278944652","3278944654","US" +"3278944655","3278944657","AR" +"3278944658","3278944659","US" +"3278944660","3278944660","AR" +"3278944661","3278944661","US" +"3278944662","3278944663","DE" +"3278944664","3278944665","AR" +"3278944666","3278944667","US" +"3278944668","3278944668","AR" +"3278944669","3278944670","US" +"3278944671","3278944671","CL" +"3278944672","3278944672","DE" +"3278944673","3278944673","PE" +"3278944674","3278944674","DE" +"3278944675","3278944677","US" +"3278944678","3278944678","CA" +"3278944679","3278944679","US" +"3278944680","3278944680","CA" +"3278944681","3278944683","US" +"3278944684","3278944686","DE" +"3278944687","3278944687","US" +"3278944688","3278944688","AR" +"3278944689","3278944693","US" +"3278944694","3278944695","DE" +"3278944696","3278944696","US" +"3278944697","3278944697","CA" +"3278944698","3278944706","US" +"3278944707","3278944707","DE" +"3278944708","3278944708","PE" +"3278944709","3278944709","US" +"3278944710","3278944710","DE" +"3278944711","3278944712","CL" +"3278944713","3278944713","DE" +"3278944714","3278944714","JM" +"3278944715","3278944715","CA" +"3278944716","3278944716","DE" +"3278944717","3278944718","US" +"3278944719","3278944719","CA" +"3278944720","3278944720","US" +"3278944721","3278944721","CA" +"3278944722","3278944727","US" +"3278944728","3278944728","DE" +"3278944729","3278944730","US" +"3278944731","3278944731","DE" +"3278944732","3278944734","US" +"3278944735","3278944735","DE" +"3278944736","3278944736","AR" +"3278944737","3278944739","US" +"3278944740","3278944740","CA" +"3278944741","3278944741","DE" +"3278944742","3278944743","US" +"3278944744","3278944745","DE" +"3278944746","3278944749","US" +"3278944750","3278944750","DE" +"3278944751","3278944751","US" +"3278944752","3278944752","DE" +"3278944753","3278944753","US" +"3278944754","3278944754","BR" +"3278944755","3278944755","AR" +"3278944756","3278944758","US" +"3278944759","3278944760","DE" +"3278944761","3278944761","UY" +"3278944762","3278944763","DE" +"3278944764","3278944764","AR" +"3278944765","3278944765","US" +"3278944766","3278944767","DE" +"3278944768","3278944771","DO" +"3278944772","3278944819","US" +"3278944820","3278944823","AR" +"3278944824","3278944827","BR" +"3278944828","3278944851","US" +"3278944852","3278944855","CA" +"3278944856","3278944863","US" +"3278944864","3278944867","MX" +"3278944868","3278944871","US" +"3278944872","3278944875","DE" +"3278944876","3278944887","US" +"3278944888","3278944891","CO" +"3278944892","3278944903","US" +"3278944904","3278944907","BR" +"3278944908","3278944919","US" +"3278944920","3278944923","CO" +"3278944924","3278944935","US" +"3278944936","3278944939","BR" +"3278944940","3278944947","US" +"3278944948","3278944951","CO" +"3278944952","3278944963","US" +"3278944964","3278944971","CA" +"3278944972","3278944975","US" +"3278944976","3278944995","CA" +"3278944996","3278944999","CO" +"3278945000","3278945007","US" +"3278945008","3278945011","CO" +"3278945012","3278945015","PE" +"3278945016","3278945023","US" +"3278945024","3278945027","BR" +"3278945028","3278945031","AN" +"3278945032","3278945087","US" +"3278945088","3278945091","BR" +"3278945092","3278945099","US" +"3278945100","3278945107","BR" +"3278945108","3278945111","DO" +"3278945112","3278945127","US" +"3278945128","3278945131","AR" +"3278945132","3278945135","BR" +"3278945136","3278945151","US" +"3278945152","3278945155","CA" +"3278945156","3278945159","BR" +"3278945160","3278945171","US" +"3278945172","3278945175","AR" +"3278945176","3278945191","US" +"3278945192","3278945199","CA" +"3278945200","3278945203","US" +"3278945204","3278945207","AR" +"3278945208","3278945227","US" +"3278945228","3278945235","CA" +"3278945236","3278945247","US" +"3278945248","3278945255","CA" +"3278945256","3278945267","US" +"3278945268","3278945271","AR" +"3278945272","3278945275","US" +"3278945276","3278945279","CL" +"3278945280","3278945283","CA" +"3278945284","3278945299","US" +"3278945300","3278945303","DE" +"3278945304","3278945307","CO" +"3278945308","3278945311","CA" +"3278945312","3278945319","US" +"3278945320","3278945323","MX" +"3278945324","3278945327","AR" +"3278945328","3278945331","CA" +"3278945332","3278945335","US" +"3278945336","3278945339","CA" +"3278945340","3278945343","US" +"3278945344","3278945347","BR" +"3278945348","3278945363","US" +"3278945364","3278945367","PR" +"3278945368","3278945395","US" +"3278945396","3278945399","AR" +"3278945400","3278945403","MX" +"3278945404","3278945427","US" +"3278945428","3278945431","CA" +"3278945432","3278945435","AR" +"3278945436","3278945439","MX" +"3278945440","3278945451","US" +"3278945452","3278945455","BR" +"3278945456","3278945459","US" +"3278945460","3278945463","MX" +"3278945464","3278945479","US" +"3278945480","3278945483","CL" +"3278945484","3278945491","BR" +"3278945492","3278945503","US" +"3278945504","3278945507","MX" +"3278945508","3278945515","AR" +"3278945516","3278945519","BR" +"3278945520","3278945523","US" +"3278945524","3278945527","CA" +"3278945528","3278945531","US" +"3278945532","3278945535","AN" +"3278945536","3278945539","AR" +"3278945540","3278945579","US" +"3278945580","3278945583","AR" +"3278945584","3278945587","US" +"3278945588","3278945591","DO" +"3278945592","3278945659","US" +"3278945660","3278945663","AR" +"3278945664","3278945667","US" +"3278945668","3278945671","UY" +"3278945672","3278945675","DE" +"3278945676","3278945687","US" +"3278945688","3278945691","BR" +"3278945692","3278945699","US" +"3278945700","3278945703","AR" +"3278945704","3278945715","US" +"3278945716","3278945719","CO" +"3278945720","3278945723","US" +"3278945724","3278945727","AR" +"3278945728","3278945743","US" +"3278945744","3278945747","MX" +"3278945748","3278945763","US" +"3278945764","3278945767","MX" +"3278945768","3278945771","CO" +"3278945772","3278945779","US" +"3278945780","3278945783","PE" +"3278945784","3278945791","US" +"3278945792","3278945794","DE" +"3278945795","3278945795","CH" +"3278945796","3278945796","DE" +"3278945797","3278945797","BE" +"3278945798","3278945798","NL" +"3278945799","3278945799","LU" +"3278945800","3278945800","DE" +"3278945801","3278945801","NL" +"3278945802","3278945802","PT" +"3278945803","3278945803","GB" +"3278945804","3278945804","DE" +"3278945805","3278945805","DK" +"3278945806","3278945806","FR" +"3278945807","3278945807","DE" +"3278945808","3278945808","RU" +"3278945809","3278945809","DE" +"3278945810","3278945810","CH" +"3278945811","3278945815","DE" +"3278945816","3278945816","GB" +"3278945817","3278945821","DE" +"3278945822","3278945822","GR" +"3278945823","3278945823","CH" +"3278945824","3278945826","DE" +"3278945827","3278945827","DK" +"3278945828","3278945828","FR" +"3278945829","3278945829","DE" +"3278945830","3278945831","NL" +"3278945832","3278945832","DE" +"3278945833","3278945833","GB" +"3278945834","3278945834","NL" +"3278945835","3278945835","CH" +"3278945836","3278945840","DE" +"3278945841","3278945841","CH" +"3278945842","3278945844","DE" +"3278945845","3278945845","ES" +"3278945846","3278945846","CH" +"3278945847","3278945847","DE" +"3278945848","3278945848","GB" +"3278945849","3278945849","DE" +"3278945850","3278945850","NL" +"3278945851","3278945852","DE" +"3278945853","3278945853","CH" +"3278945854","3278945854","FR" +"3278945855","3278945855","DE" +"3278945856","3278945856","DK" +"3278945857","3278945858","DE" +"3278945859","3278945859","GB" +"3278945860","3278945860","FR" +"3278945861","3278945861","IT" +"3278945862","3278945862","BE" +"3278945863","3278945863","ES" +"3278945864","3278945864","IE" +"3278945865","3278945866","DE" +"3278945867","3278945867","FR" +"3278945868","3278945868","NO" +"3278945869","3278945870","DE" +"3278945871","3278945871","IT" +"3278945872","3278945872","FR" +"3278945873","3278945873","DE" +"3278945874","3278945874","IT" +"3278945875","3278945875","ES" +"3278945876","3278945876","NL" +"3278945877","3278945877","SE" +"3278945878","3278945878","FR" +"3278945879","3278945880","DE" +"3278945881","3278945881","BE" +"3278945882","3278945886","DE" +"3278945887","3278945888","IT" +"3278945889","3278945890","DE" +"3278945891","3278945891","CH" +"3278945892","3278945892","BE" +"3278945893","3278945893","DE" +"3278945894","3278945894","AT" +"3278945895","3278945895","ES" +"3278945896","3278945896","GB" +"3278945897","3278945897","IT" +"3278945898","3278945898","ES" +"3278945899","3278945899","DE" +"3278945900","3278945900","FR" +"3278945901","3278945904","DE" +"3278945905","3278945905","PT" +"3278945906","3278945906","FR" +"3278945907","3278945907","GB" +"3278945908","3278945908","DE" +"3278945909","3278945909","FR" +"3278945910","3278945910","DE" +"3278945911","3278945911","NL" +"3278945912","3278945917","DE" +"3278945918","3278945918","IT" +"3278945919","3278946049","DE" +"3278946050","3278946054","US" +"3278946055","3278946055","CA" +"3278946056","3278946059","US" +"3278946060","3278946060","CN" +"3278946061","3278946061","US" +"3278946062","3278946062","DE" +"3278946063","3278946067","US" +"3278946068","3278946068","DE" +"3278946069","3278946084","US" +"3278946085","3278946085","DE" +"3278946086","3278946091","US" +"3278946092","3278946092","DE" +"3278946093","3278946108","US" +"3278946109","3278946109","GB" +"3278946110","3278946142","US" +"3278946143","3278946143","DE" +"3278946144","3278946166","US" +"3278946167","3278946167","DE" +"3278946168","3278946208","US" +"3278946209","3278946213","DE" +"3278946214","3278946214","US" +"3278946215","3278946221","DE" +"3278946222","3278946222","US" +"3278946223","3278946224","DE" +"3278946225","3278946225","US" +"3278946226","3278946229","DE" +"3278946230","3278946231","US" +"3278946232","3278946239","DE" +"3278946240","3278946263","US" +"3278946264","3278946267","DE" +"3278946268","3278946271","US" +"3278946272","3278946275","SV" +"3278946276","3278946279","DO" +"3278946280","3278946283","DE" +"3278946284","3278946287","US" +"3278946288","3278946291","DE" +"3278946292","3278946299","US" +"3278946300","3278946303","DE" +"3278946304","3278954495","LB" +"3278954496","3278962687","RU" +"3278962688","3279028223","CZ" +"3279028224","3279028735","PL" +"3279028736","3279029247","RU" +"3279029248","3279030271","UA" +"3279030272","3279030783","RU" +"3279030784","3279031295","DE" +"3279031296","3279031807","NL" +"3279031808","3279032319","RO" +"3279032320","3279032831","HU" +"3279032832","3279033343","FR" +"3279033344","3279033855","RU" +"3279033856","3279034367","DE" +"3279034368","3279035391","FR" +"3279035392","3279035903","PS" +"3279035904","3279036415","UA" +"3279036416","3279044607","LV" +"3279044608","3279050455","FR" +"3279050456","3279050463","A2" +"3279050464","3279052799","FR" +"3279052800","3279053311","UA" +"3279053312","3279053823","DE" +"3279053824","3279054335","NL" +"3279054336","3279054847","GB" +"3279054848","3279055359","RU" +"3279055360","3279055871","SA" +"3279055872","3279056383","TR" +"3279056384","3279056895","GB" +"3279056896","3279057407","BG" +"3279057408","3279057919","FR" +"3279057920","3279058431","RO" +"3279058432","3279058943","RU" +"3279058944","3279059455","UA" +"3279059456","3279060479","RU" +"3279060480","3279060991","PL" +"3279060992","3279069183","UA" +"3279069184","3279077375","PL" +"3279077376","3279078399","ES" +"3279078400","3279078655","IT" +"3279078656","3279078911","FR" +"3279078912","3279084543","ES" +"3279084544","3279085567","IT" +"3279085568","3279089663","NL" +"3279089664","3279093759","KG" +"3279093760","3279103103","FR" +"3279103104","3279103135","GB" +"3279103136","3279119295","FR" +"3279119296","3279119327","GB" +"3279119328","3279123455","FR" +"3279123456","3279123711","RE" +"3279123712","3279159295","FR" +"3279159296","3279290367","PL" +"3279290368","3279291391","NL" +"3279291392","3279291647","GB" +"3279291648","3279294463","NL" +"3279294464","3279294719","EU" +"3279294720","3279294975","IE" +"3279294976","3279295231","SE" +"3279295232","3279295487","ES" +"3279295488","3279295743","PT" +"3279295744","3279295999","IL" +"3279296000","3279296511","ZA" +"3279296512","3279297279","ES" +"3279297280","3279297535","ZA" +"3279297536","3279298047","SE" +"3279298048","3279298559","ZA" +"3279298560","3279305471","DE" +"3279305472","3279305487","EU" +"3279305488","3279305503","DE" +"3279305504","3279305535","GB" +"3279305536","3279305631","DE" +"3279305632","3279305663","GB" +"3279305664","3279305727","ES" +"3279305728","3279306751","DE" +"3279306752","3279310847","FR" +"3279310848","3279311871","DE" +"3279311872","3279312895","EU" +"3279312896","3279313415","DE" +"3279313416","3279313423","EU" +"3279313424","3279313919","DE" +"3279313920","3279314943","GB" +"3279314944","3279315711","CH" +"3279315712","3279315967","BE" +"3279315968","3279316223","DE" +"3279316224","3279316479","BE" +"3279316480","3279317759","IT" +"3279317760","3279317887","DE" +"3279317888","3279317951","IT" +"3279317952","3279317967","DE" +"3279317968","3279317983","IT" +"3279317984","3279318015","NL" +"3279318016","3279318271","DE" +"3279318272","3279318527","GB" +"3279318528","3279318559","CZ" +"3279318560","3279318655","FR" +"3279318656","3279318687","CZ" +"3279318688","3279318719","FR" +"3279318720","3279318751","ZA" +"3279318752","3279318783","GB" +"3279318784","3279319039","NL" +"3279319040","3279320063","AT" +"3279320064","3279321087","FR" +"3279321088","3279322623","DK" +"3279322624","3279322663","NL" +"3279322664","3279322671","AT" +"3279322672","3279322687","GB" +"3279322688","3279322879","DE" +"3279322880","3279322975","NL" +"3279322976","3279323071","DE" +"3279323072","3279330079","GB" +"3279330080","3279330111","DK" +"3279330112","3279330815","GB" +"3279330816","3279331071","EU" +"3279331072","3279335295","GB" +"3279335296","3279335423","BE" +"3279335424","3279339519","GB" +"3279339520","3279340031","ES" +"3279340032","3279340543","IT" +"3279340544","3279340671","FR" +"3279340672","3279340799","EU" +"3279340800","3279341055","FR" +"3279341056","3279341567","IT" +"3279341568","3279341823","SE" +"3279341824","3279342079","ZA" +"3279342080","3279342335","IT" +"3279342336","3279342591","ZA" +"3279342592","3279342847","SE" +"3279342848","3279343103","HR" +"3279343104","3279343359","SI" +"3279343360","3279343615","ZA" +"3279343616","3279345151","BE" +"3279345152","3279345663","SE" +"3279345664","3279346943","GB" +"3279346944","3279347711","FR" +"3279347712","3279348223","SE" +"3279348224","3279348735","IT" +"3279348736","3279348991","GB" +"3279348992","3279349247","ES" +"3279349248","3279349503","IT" +"3279349504","3279349759","FR" +"3279349760","3279351039","DE" +"3279351040","3279351295","FR" +"3279351296","3279351807","GB" +"3279351808","3279352319","DK" +"3279352320","3279352575","GB" +"3279352576","3279352831","BE" +"3279352832","3279352855","SE" +"3279352856","3279353087","EU" +"3279353088","3279353343","GB" +"3279353344","3279354879","DK" +"3279354880","3279355647","AT" +"3279355648","3279355903","BE" +"3279355904","3279356039","EU" +"3279356040","3279356047","NO" +"3279356048","3279356063","EU" +"3279356064","3279356127","NO" +"3279356128","3279356159","EU" +"3279356160","3279356415","NO" +"3279356416","3279356927","EU" +"3279356928","3279357439","NO" +"3279357440","3279372287","EU" +"3279372288","3279372799","FI" +"3279372800","3279373055","EU" +"3279373056","3279375359","FI" +"3279375360","3279380479","EU" +"3279380480","3279380991","CH" +"3279380992","3279382783","EU" +"3279382784","3279383807","CH" +"3279383808","3279384063","EU" +"3279384064","3279385343","CH" +"3279385344","3279386367","EU" +"3279386368","3279386495","CH" +"3279386496","3279387135","EU" +"3279387136","3279387391","CH" +"3279387392","3279388671","EU" +"3279388672","3279388927","GR" +"3279388928","3279389183","EU" +"3279389184","3279389243","GR" +"3279389244","3279389247","EU" +"3279389248","3279389255","GR" +"3279389256","3279389259","EU" +"3279389260","3279389275","GR" +"3279389276","3279389279","EU" +"3279389280","3279389359","GR" +"3279389360","3279389363","EU" +"3279389364","3279389379","GR" +"3279389380","3279389383","EU" +"3279389384","3279389439","GR" +"3279389440","3279389711","EU" +"3279389712","3279389727","GR" +"3279389728","3279390015","EU" +"3279390016","3279390143","GR" +"3279390144","3279393791","EU" +"3279393792","3279394047","GR" +"3279394048","3279394303","EU" +"3279394304","3279394559","GR" +"3279394560","3279402751","EU" +"3279402752","3279403007","CZ" +"3279403008","3279403263","EU" +"3279403264","3279403903","CZ" +"3279403904","3279404287","EU" +"3279404288","3279404415","CZ" +"3279404416","3279404799","EU" +"3279404800","3279405055","CZ" +"3279405056","3279421439","EU" +"3279421440","3279486975","IT" +"3279486976","3279552511","NL" +"3279552512","3279560703","LV" +"3279560704","3279568895","GB" +"3279568896","3279577087","IT" +"3279577088","3279585279","BE" +"3279585280","3279585919","DE" +"3279585920","3279585951","GB" +"3279585952","3279585991","DE" +"3279585992","3279585999","GB" +"3279586000","3279586303","DE" +"3279586304","3279586559","GB" +"3279586560","3279588095","DE" +"3279588096","3279588255","GB" +"3279588256","3279588287","DE" +"3279588288","3279588607","GB" +"3279588608","3279588863","DE" +"3279588864","3279589375","GB" +"3279589376","3279589887","DE" +"3279589888","3279590655","GB" +"3279590656","3279590935","DE" +"3279590936","3279591167","GB" +"3279591168","3279591935","DE" +"3279591936","3279592959","GB" +"3279592960","3279593215","DE" +"3279593216","3279593247","GB" +"3279593248","3279593267","DE" +"3279593268","3279593271","GB" +"3279593272","3279593275","DE" +"3279593276","3279593407","GB" +"3279593408","3279593440","DE" +"3279593441","3279593471","GB" +"3279593472","3279593487","DE" +"3279593488","3279593535","GB" +"3279593536","3279593567","DE" +"3279593568","3279593599","GB" +"3279593600","3279594495","DE" +"3279594496","3279595775","GB" +"3279595776","3279595839","DE" +"3279595840","3279595903","GB" +"3279595904","3279595999","DE" +"3279596000","3279596023","GB" +"3279596024","3279596031","DE" +"3279596032","3279596543","GB" +"3279596544","3279597311","DE" +"3279597312","3279598591","GB" +"3279598592","3279599615","DE" +"3279599616","3279600383","GB" +"3279600384","3279600479","DE" +"3279600480","3279600487","GB" +"3279600488","3279600639","DE" +"3279600640","3279601663","GB" +"3279601664","3279609855","CZ" +"3279609856","3279618047","RU" +"3279618048","3279683583","UA" +"3279683584","3279688191","DE" +"3279688192","3279688447","EU" +"3279688448","3279723215","DE" +"3279723216","3279723223","A2" +"3279723224","3279744391","DE" +"3279744392","3279744399","PL" +"3279744400","3279752959","DE" +"3279752960","3279753215","CH" +"3279753216","3279789439","DE" +"3279789440","3279789455","PL" +"3279789456","3279895295","DE" +"3279895296","3279895551","EU" +"3279895552","3279897583","DE" +"3279897584","3279897591","GB" +"3279897592","3279946751","DE" +"3279946752","3279947775","SE" +"3279947776","3279948799","NL" +"3279948800","3279949823","GB" +"3279949824","3279950847","UA" +"3279950848","3279951871","DE" +"3279951872","3279952895","IQ" +"3279952896","3279953919","PL" +"3279953920","3279955967","TR" +"3279955968","3279958015","DE" +"3279958016","3279972351","RU" +"3279972352","3279974399","AT" +"3279974400","3279976447","PL" +"3279976448","3279978495","RU" +"3279978496","3279978751","SI" +"3279978752","3279979007","NL" +"3279979008","3279979263","RO" +"3279979264","3279979519","SA" +"3279979520","3279979775","BG" +"3279979776","3279980031","RU" +"3279980032","3279980287","BG" +"3279980288","3279980543","PL" +"3279980544","3279980799","RO" +"3279980800","3279981055","RU" +"3279981056","3279981311","GB" +"3279981312","3279981567","UA" +"3279981568","3279981823","PL" +"3279981824","3279982079","SI" +"3279982080","3279982335","PL" +"3279982336","3279982591","FR" +"3279982592","3279982847","DE" +"3279982848","3279983103","IL" +"3279983104","3279983615","FR" +"3279983616","3279983871","PL" +"3279983872","3279984127","FR" +"3279984128","3279984383","AT" +"3279984384","3279984639","RO" +"3279984640","3279985151","RU" +"3279985152","3279985407","PL" +"3279985408","3279985663","CZ" +"3279985664","3279985919","DE" +"3279985920","3279986687","RU" +"3279986688","3279987199","NL" +"3279987200","3279987711","RU" +"3279987712","3279988223","RO" +"3279988224","3279988735","AM" +"3279988736","3279989247","RO" +"3279989248","3279989759","AT" +"3279989760","3279990271","PL" +"3279990272","3279990783","DK" +"3279990784","3279991295","IL" +"3279991296","3279991807","UA" +"3279991808","3279992319","PL" +"3279992320","3279992831","UA" +"3279992832","3279993855","NL" +"3279993856","3279994367","RO" +"3279994368","3279994879","GB" +"3279994880","3280003071","CZ" +"3280003072","3280003583","BG" +"3280003584","3280004095","UA" +"3280004096","3280004607","PL" +"3280004608","3280005119","UA" +"3280005120","3280005631","HU" +"3280005632","3280006143","IT" +"3280006144","3280006655","DK" +"3280006656","3280007167","GB" +"3280007168","3280007679","SE" +"3280007680","3280008191","PL" +"3280008192","3280009215","RU" +"3280009216","3280009727","UA" +"3280009728","3280010239","GB" +"3280010240","3280010751","UA" +"3280010752","3280011263","TR" +"3280011264","3280011327","DE" +"3280011328","3280011391","NL" +"3280011392","3280011407","EU" +"3280011408","3280011415","GB" +"3280011416","3280011551","EU" +"3280011552","3280011567","GB" +"3280011568","3280011647","EU" +"3280011648","3280011775","IT" +"3280011776","3280011783","NL" +"3280011784","3280011791","BE" +"3280011792","3280011903","EU" +"3280011904","3280011951","BE" +"3280011952","3280015103","EU" +"3280015104","3280015359","GB" +"3280015360","3280015871","EU" +"3280015872","3280016383","GB" +"3280016384","3280016447","EU" +"3280016448","3280016463","BE" +"3280016464","3280016543","EU" +"3280016544","3280016559","BE" +"3280016560","3280016575","GR" +"3280016576","3280016607","NO" +"3280016608","3280016623","CH" +"3280016624","3280016959","EU" +"3280016960","3280016991","BE" +"3280016992","3280017023","FR" +"3280017024","3280017055","IT" +"3280017056","3280017087","EU" +"3280017088","3280017151","IE" +"3280017152","3280017919","EU" +"3280017920","3280018431","IT" +"3280018432","3280019455","GB" +"3280019456","3280019711","EU" +"3280019712","3280020479","CH" +"3280020480","3280020735","IE" +"3280020736","3280020991","BE" +"3280020992","3280021087","GB" +"3280021088","3280021119","EU" +"3280021120","3280021183","NL" +"3280021184","3280021247","EU" +"3280021248","3280021503","CH" +"3280021504","3280021759","EU" +"3280021760","3280021823","BE" +"3280021824","3280022783","EU" +"3280022784","3280023039","IT" +"3280023040","3280023551","EU" +"3280023552","3280024575","IT" +"3280024576","3280024831","SE" +"3280024832","3280027647","EU" +"3280027648","3280027903","CH" +"3280027904","3280028159","EU" +"3280028160","3280028415","IT" +"3280028416","3280028671","BE" +"3280028672","3280030207","EU" +"3280030208","3280030463","CH" +"3280030464","3280031743","EU" +"3280031744","3280031999","IE" +"3280032000","3280032127","EU" +"3280032128","3280032255","CH" +"3280032256","3280035327","EU" +"3280035328","3280035583","CH" +"3280035584","3280036607","EU" +"3280036608","3280036863","CH" +"3280036864","3280037887","EU" +"3280037888","3280038399","CH" +"3280038400","3280041471","EU" +"3280041472","3280041727","CH" +"3280041728","3280076799","EU" +"3280076800","3280084991","GB" +"3280084992","3280093183","BA" +"3280093184","3280109567","GR" +"3280109568","3280117759","BE" +"3280117760","3280125951","CH" +"3280125952","3280126207","DE" +"3280126208","3280126463","IS" +"3280126464","3280126719","SI" +"3280126720","3280126975","IT" +"3280126976","3280127231","CH" +"3280127232","3280127487","PL" +"3280127488","3280127743","AT" +"3280127744","3280127999","NL" +"3280128000","3280128255","SE" +"3280128256","3280128511","GB" +"3280128512","3280129023","HU" +"3280129024","3280129279","RU" +"3280129280","3280129535","LV" +"3280129536","3280129791","SA" +"3280129792","3280130047","FR" +"3280130048","3280130559","RU" +"3280130560","3280130815","GB" +"3280130816","3280131071","IS" +"3280131072","3280131327","PL" +"3280131328","3280131583","IT" +"3280131584","3280131839","RU" +"3280131840","3280132095","RO" +"3280132096","3280132351","RU" +"3280132352","3280132607","GB" +"3280132608","3280132863","CH" +"3280132864","3280133119","UA" +"3280133120","3280133375","IT" +"3280133376","3280133631","DE" +"3280133632","3280133887","FR" +"3280133888","3280134143","NL" +"3280134144","3280142335","IT" +"3280142336","3280144815","RU" +"3280144816","3280144823","RO" +"3280144824","3280207871","RU" +"3280207872","3280273407","FR" +"3280273408","3280338943","RU" +"3280338944","3280347135","GB" +"3280347136","3280355327","NO" +"3280355328","3280371711","GR" +"3280371712","3280379903","CH" +"3280379904","3280381951","FR" +"3280381952","3280383999","NL" +"3280384000","3280386047","IT" +"3280386048","3280388095","SA" +"3280388096","3280390719","GB" +"3280390720","3280390751","FR" +"3280390752","3280392703","GB" +"3280392704","3280392831","FR" +"3280392832","3280395263","GB" +"3280395264","3280395519","FR" +"3280395520","3280396287","GB" +"3280396288","3280404479","FI" +"3280404480","3280437247","IT" +"3280437248","3280453631","DE" +"3280453632","3280454655","RO" +"3280454656","3280455679","UA" +"3280455680","3280456703","IT" +"3280456704","3280457727","RU" +"3280457728","3280458751","GB" +"3280458752","3280459775","RU" +"3280459776","3280460799","DK" +"3280460800","3280462847","DE" +"3280462848","3280463871","PL" +"3280463872","3280466943","RU" +"3280466944","3280467967","UA" +"3280467968","3280468991","ES" +"3280468992","3280470015","CY" +"3280470016","3280535551","PL" +"3280535552","3280568319","GB" +"3280568320","3280576511","IT" +"3280576512","3280576767","BY" +"3280576768","3280577279","PL" +"3280577280","3280577535","DE" +"3280577536","3280577791","IL" +"3280577792","3280578047","NL" +"3280578048","3280578303","RO" +"3280578304","3280578559","UA" +"3280578560","3280578815","PL" +"3280578816","3280579071","NL" +"3280579072","3280579327","DE" +"3280579328","3280579583","RU" +"3280579584","3280579839","CH" +"3280579840","3280580095","HR" +"3280580096","3280580351","KW" +"3280580352","3280580607","CH" +"3280580608","3280580863","GB" +"3280580864","3280581119","DE" +"3280581120","3280581375","DK" +"3280581376","3280581631","EE" +"3280581632","3280581887","BY" +"3280581888","3280582143","FR" +"3280582144","3280582399","CZ" +"3280582400","3280582655","DK" +"3280582656","3280582911","FR" +"3280582912","3280583167","UA" +"3280583168","3280583423","RO" +"3280583424","3280583679","RU" +"3280583680","3280583935","PS" +"3280583936","3280584191","PL" +"3280584192","3280584447","KW" +"3280584448","3280584703","DE" +"3280584704","3280585215","UA" +"3280585216","3280585727","DK" +"3280585728","3280586239","UA" +"3280586240","3280586751","DE" +"3280586752","3280587263","RU" +"3280587264","3280587775","UA" +"3280587776","3280588287","RO" +"3280588288","3280588799","UA" +"3280588800","3280589311","PL" +"3280589312","3280590335","DE" +"3280590336","3280590847","NL" +"3280590848","3280591359","DE" +"3280591360","3280591871","UA" +"3280591872","3280592383","US" +"3280592384","3280592895","TR" +"3280592896","3280593407","DE" +"3280593408","3280593919","UA" +"3280593920","3280594431","LU" +"3280594432","3280594687","NL" +"3280594688","3280594943","EU" +"3280594944","3280595455","UA" +"3280595456","3280595967","DE" +"3280595968","3280596479","DK" +"3280596480","3280596991","AT" +"3280596992","3280597503","UA" +"3280597504","3280597759","NL" +"3280597760","3280598015","BE" +"3280598016","3280598527","UA" +"3280598528","3280599039","PL" +"3280599040","3280599551","FR" +"3280599552","3280600063","UA" +"3280600064","3280600575","BG" +"3280600576","3280601087","UA" +"3280601088","3280609279","PT" +"3280609280","3280617471","DE" +"3280617472","3280625663","UA" +"3280625664","3280633855","MD" +"3280633856","3280635807","BG" +"3280635808","3280635815","DE" +"3280635816","3280642047","BG" +"3280642048","3280650239","UA" +"3280650240","3280650495","RO" +"3280650496","3280650751","UA" +"3280650752","3280651263","GB" +"3280651264","3280651519","SI" +"3280651520","3280651775","FR" +"3280651776","3280652031","UA" +"3280652032","3280652287","NO" +"3280652288","3280652543","PL" +"3280652544","3280652799","SI" +"3280652800","3280653055","FR" +"3280653056","3280653311","CH" +"3280653312","3280653823","GB" +"3280653824","3280654079","RU" +"3280654080","3280654591","PL" +"3280654592","3280654847","ES" +"3280654848","3280655103","RU" +"3280655104","3280655359","PL" +"3280655360","3280655615","SE" +"3280655616","3280655871","FI" +"3280655872","3280656127","RO" +"3280656128","3280656639","CH" +"3280656640","3280657407","UA" +"3280657408","3280657663","RU" +"3280657664","3280657919","SE" +"3280657920","3280658175","RO" +"3280658176","3280658431","DE" +"3280658432","3280666623","GB" +"3280666624","3280732159","NO" +"3280732160","3280764927","DE" +"3280764928","3280765951","TJ" +"3280765952","3280766975","DK" +"3280766976","3280767999","AT" +"3280768000","3280769023","FR" +"3280769024","3280770047","NL" +"3280770048","3280771071","FR" +"3280771072","3280772095","PL" +"3280772096","3280773119","ES" +"3280773120","3280774143","UA" +"3280774144","3280775167","ME" +"3280775168","3280776191","UA" +"3280776192","3280777215","SE" +"3280777216","3280778239","UA" +"3280778240","3280779263","RU" +"3280779264","3280780287","DE" +"3280780288","3280781311","PL" +"3280781312","3280782335","FI" +"3280782336","3280783359","TR" +"3280783360","3280784383","SE" +"3280784384","3280785407","RU" +"3280785408","3280787455","DE" +"3280787456","3280788479","GB" +"3280788480","3280789503","PL" +"3280789504","3280791551","UA" +"3280791552","3280792575","DE" +"3280792576","3280793599","PL" +"3280793600","3280794623","NL" +"3280794624","3280795647","UA" +"3280795648","3280796671","MZ" +"3280796672","3280797695","CZ" +"3280797696","3280810783","CH" +"3280810784","3280810799","DE" +"3280810800","3280863231","CH" +"3280863232","3280928767","TR" +"3280928768","3280928831","RU" +"3280928832","3280930303","GB" +"3280930304","3280930559","DE" +"3280930560","3280930959","GB" +"3280930960","3280930975","DE" +"3280930976","3280933175","GB" +"3280933176","3280933183","DE" +"3280933184","3280933359","GB" +"3280933360","3280933375","DE" +"3280933376","3280933631","GB" +"3280933632","3280934399","DE" +"3280934400","3280936191","GB" +"3280936192","3280936319","DE" +"3280936320","3280938767","GB" +"3280938768","3280938783","DE" +"3280938784","3280938799","GB" +"3280938800","3280938815","DE" +"3280938816","3280950655","GB" +"3280950656","3280950687","DE" +"3280950688","3280951039","GB" +"3280951040","3280951295","DE" +"3280951296","3280951807","GB" +"3280951808","3280952323","DE" +"3280952324","3280952327","GB" +"3280952328","3280952343","DE" +"3280952344","3280952351","GB" +"3280952352","3280952375","DE" +"3280952376","3280952383","GB" +"3280952384","3280952455","DE" +"3280952456","3280952463","GB" +"3280952464","3280952575","DE" +"3280952576","3280952615","GB" +"3280952616","3280952623","DE" +"3280952624","3280952631","GB" +"3280952632","3280952643","DE" +"3280952644","3280952671","GB" +"3280952672","3280952687","DE" +"3280952688","3280952695","GB" +"3280952696","3280952767","DE" +"3280952768","3280952783","GB" +"3280952784","3280952791","DE" +"3280952792","3280952799","GB" +"3280952800","3280952831","DE" +"3280952832","3280955407","GB" +"3280955408","3280955419","DE" +"3280955420","3280955503","GB" +"3280955504","3280955791","DE" +"3280955792","3280955799","GB" +"3280955800","3280955999","DE" +"3280956000","3280956007","GB" +"3280956008","3280956015","DE" +"3280956016","3280956023","GB" +"3280956024","3280956039","DE" +"3280956040","3280956047","GB" +"3280956048","3280956095","DE" +"3280956096","3280956103","GB" +"3280956104","3280956143","DE" +"3280956144","3280956415","GB" +"3280956416","3280956927","DE" +"3280956928","3280957255","GB" +"3280957256","3280957263","DE" +"3280957264","3280957311","GB" +"3280957312","3280957503","DE" +"3280957504","3280957831","GB" +"3280957832","3280957839","DE" +"3280957840","3280958463","GB" +"3280958464","3280958807","DE" +"3280958808","3280958863","GB" +"3280958864","3280958871","DE" +"3280958872","3280958879","GB" +"3280958880","3280958911","DE" +"3280958912","3280958919","GB" +"3280958920","3280959111","DE" +"3280959112","3280959119","GB" +"3280959120","3280959279","DE" +"3280959280","3280959743","GB" +"3280959744","3280959775","DE" +"3280959776","3280960015","GB" +"3280960016","3280960023","DE" +"3280960024","3280960031","GB" +"3280960032","3280960039","DE" +"3280960040","3280962815","GB" +"3280962816","3280962831","DE" +"3280962832","3280963343","GB" +"3280963344","3280963367","DE" +"3280963368","3280963375","GB" +"3280963376","3280963391","DE" +"3280963392","3280963407","GB" +"3280963408","3280963423","DE" +"3280963424","3280963487","GB" +"3280963488","3280963495","DE" +"3280963496","3280963519","GB" +"3280963520","3280963527","DE" +"3280963528","3280963535","GB" +"3280963536","3280963551","DE" +"3280963552","3280968447","GB" +"3280968448","3280968703","DE" +"3280968704","3280970239","GB" +"3280970240","3280970495","DE" +"3280970496","3280971039","GB" +"3280971040","3280971055","DE" +"3280971056","3280974079","GB" +"3280974080","3280974335","DE" +"3280974336","3280974399","GB" +"3280974400","3280974415","DE" +"3280974416","3280974591","GB" +"3280974592","3280974847","DE" +"3280974848","3280976911","GB" +"3280976912","3280976927","DE" +"3280976928","3280976935","GB" +"3280976936","3280976951","DE" +"3280976952","3280976991","GB" +"3280976992","3280977023","DE" +"3280977024","3280977031","GB" +"3280977032","3280977111","DE" +"3280977112","3280977119","GB" +"3280977120","3280977407","DE" +"3280977408","3280977951","GB" +"3280977952","3280977955","DE" +"3280977956","3280977999","GB" +"3280978000","3280978007","DE" +"3280978008","3280978191","GB" +"3280978192","3280978195","DE" +"3280978196","3280978231","GB" +"3280978232","3280978239","DE" +"3280978240","3280978335","GB" +"3280978336","3280978367","DE" +"3280978368","3280978383","GB" +"3280978384","3280978399","DE" +"3280978400","3280978495","GB" +"3280978496","3280978499","DE" +"3280978500","3280978623","GB" +"3280978624","3280978631","DE" +"3280978632","3280979023","GB" +"3280979024","3280979039","DE" +"3280979040","3280979103","GB" +"3280979104","3280979111","DE" +"3280979112","3280979151","GB" +"3280979152","3280979159","DE" +"3280979160","3280979167","GB" +"3280979168","3280979183","DE" +"3280979184","3280979311","GB" +"3280979312","3280979327","DE" +"3280979328","3280979555","GB" +"3280979556","3280979559","DE" +"3280979560","3280979576","GB" +"3280979577","3280979577","DE" +"3280979578","3280979839","GB" +"3280979840","3280979975","DE" +"3280979976","3280980080","GB" +"3280980081","3280980081","DE" +"3280980082","3280980351","GB" +"3280980352","3280980367","DE" +"3280980368","3280980423","GB" +"3280980424","3280980431","DE" +"3280980432","3280980471","GB" +"3280980472","3280980479","DE" +"3280980480","3280981039","GB" +"3280981040","3280981055","DE" +"3280981056","3280981215","GB" +"3280981216","3280981231","DE" +"3280981232","3280981487","GB" +"3280981488","3280981503","DE" +"3280981504","3280981607","GB" +"3280981608","3280981615","DE" +"3280981616","3280981839","GB" +"3280981840","3280981847","DE" +"3280981848","3280981983","GB" +"3280981984","3280981999","DE" +"3280982000","3280982015","GB" +"3280982016","3280982023","DE" +"3280982024","3280982255","GB" +"3280982256","3280982263","DE" +"3280982264","3280982607","GB" +"3280982608","3280982623","DE" +"3280982624","3280982655","GB" +"3280982656","3280982671","DE" +"3280982672","3280982951","GB" +"3280982952","3280982959","DE" +"3280982960","3280983112","GB" +"3280983113","3280983113","DE" +"3280983114","3280983119","GB" +"3280983120","3280983167","DE" +"3280983168","3280983359","GB" +"3280983360","3280983375","DE" +"3280983376","3280983423","GB" +"3280983424","3280983431","DE" +"3280983432","3280983887","GB" +"3280983888","3280983895","DE" +"3280983896","3280984495","GB" +"3280984496","3280984503","DE" +"3280984504","3280985639","GB" +"3280985640","3280985647","DE" +"3280985648","3280986263","GB" +"3280986264","3280986267","DE" +"3280986268","3280987135","GB" +"3280987136","3280987391","CH" +"3280987392","3280987647","NL" +"3280987648","3280987983","GB" +"3280987984","3280987999","DE" +"3280988000","3280988303","GB" +"3280988304","3280988311","DE" +"3280988312","3280988383","GB" +"3280988384","3280988391","DE" +"3280988392","3280988399","GB" +"3280988400","3280988431","DE" +"3280988432","3280988815","GB" +"3280988816","3280988831","DE" +"3280988832","3280988855","GB" +"3280988856","3280988863","DE" +"3280988864","3280989015","GB" +"3280989016","3280989039","DE" +"3280989040","3280989063","GB" +"3280989064","3280989067","DE" +"3280989068","3280989335","GB" +"3280989336","3280989343","DE" +"3280989344","3280989375","GB" +"3280989376","3280989391","DE" +"3280989392","3280989463","GB" +"3280989464","3280989471","DE" +"3280989472","3280989535","GB" +"3280989536","3280989551","DE" +"3280989552","3280989631","GB" +"3280989632","3280989647","DE" +"3280989648","3280989820","GB" +"3280989821","3280989821","DE" +"3280989822","3280990047","GB" +"3280990048","3280990063","DE" +"3280990064","3280990191","GB" +"3280990192","3280990223","DE" +"3280990224","3280990231","GB" +"3280990232","3280990239","DE" +"3280990240","3280990271","GB" +"3280990272","3280990287","DE" +"3280990288","3280990479","GB" +"3280990480","3280990487","DE" +"3280990488","3280990575","GB" +"3280990576","3280990591","DE" +"3280990592","3280990703","GB" +"3280990704","3280990719","DE" +"3280990720","3280990863","GB" +"3280990864","3280990871","DE" +"3280990872","3280991231","GB" +"3280991232","3280991743","DE" +"3280991744","3280992231","GB" +"3280992232","3280992239","DE" +"3280992240","3280992399","GB" +"3280992400","3280992415","DE" +"3280992416","3280992799","GB" +"3280992800","3280992815","DE" +"3280992816","3280992847","GB" +"3280992848","3280992863","DE" +"3280992864","3280993535","GB" +"3280993536","3280993791","DE" +"3280993792","3280994559","GB" +"3280994560","3280994815","RU" +"3280994816","3280995071","NL" +"3280995072","3280995327","DE" +"3280995328","3280995583","SE" +"3280995584","3280995839","GB" +"3280995840","3280996095","RU" +"3280996096","3280996351","CH" +"3280996352","3280996607","GB" +"3280996608","3280996863","PL" +"3280996864","3280997119","NL" +"3280997120","3280997375","FR" +"3280997376","3280997631","PL" +"3280997632","3280997887","SE" +"3280997888","3280998143","UA" +"3280998144","3280998399","DE" +"3280998400","3280998655","GR" +"3280998656","3280999423","GB" +"3280999424","3280999679","HU" +"3280999680","3280999935","UA" +"3280999936","3281000447","DE" +"3281000448","3281000703","FR" +"3281000704","3281000959","UA" +"3281000960","3281001215","SI" +"3281001216","3281001471","RO" +"3281001472","3281001727","UA" +"3281001728","3281001983","RU" +"3281001984","3281002239","CH" +"3281002240","3281002495","DE" +"3281002496","3281010687","CH" +"3281010688","3281018879","BE" +"3281018880","3281027071","CZ" +"3281027072","3281027079","EU" +"3281027080","3281027087","GB" +"3281027088","3281027135","EU" +"3281027136","3281027151","GB" +"3281027152","3281027199","EU" +"3281027200","3281027215","GB" +"3281027216","3281027279","EU" +"3281027280","3281027287","GB" +"3281027288","3281027303","EU" +"3281027304","3281027311","GB" +"3281027312","3281027319","EU" +"3281027320","3281027327","GB" +"3281027328","3281027583","EU" +"3281027584","3281027615","GB" +"3281027616","3281027631","EU" +"3281027632","3281027679","GB" +"3281027680","3281027695","EU" +"3281027696","3281027743","GB" +"3281027744","3281027775","EU" +"3281027776","3281027807","GB" +"3281027808","3281027839","EU" +"3281027840","3281027903","GB" +"3281027904","3281028063","EU" +"3281028064","3281028159","GB" +"3281028160","3281028991","EU" +"3281028992","3281029055","GB" +"3281029056","3281030399","EU" +"3281030400","3281035263","GB" +"3281035264","3281043455","CH" +"3281043456","3281059839","RU" +"3281059840","3281062911","DE" +"3281062912","3281063167","EU" +"3281063168","3281074671","DE" +"3281074672","3281074679","ES" +"3281074680","3281094399","DE" +"3281094400","3281094655","US" +"3281094656","3281103935","DE" +"3281103936","3281103943","AT" +"3281103944","3281104127","DE" +"3281104128","3281104383","FR" +"3281104384","3281113703","DE" +"3281113704","3281113711","BE" +"3281113712","3281125375","DE" +"3281125376","3281133567","SK" +"3281133568","3281141759","IR" +"3281141760","3281149951","RU" +"3281149952","3281158143","CZ" +"3281158144","3281166335","SK" +"3281166336","3281174527","GB" +"3281174528","3281190911","FR" +"3281190912","3281256447","GB" +"3281256448","3281321983","FI" +"3281321984","3281338367","GB" +"3281338368","3281338623","PL" +"3281338624","3281338879","SA" +"3281338880","3281339135","FR" +"3281339136","3281339391","RO" +"3281339392","3281339647","PL" +"3281339648","3281339903","GB" +"3281339904","3281340159","UA" +"3281340160","3281340415","BG" +"3281340416","3281340927","RO" +"3281340928","3281341183","DE" +"3281341184","3281341439","AT" +"3281341440","3281341695","DE" +"3281341696","3281341951","PL" +"3281341952","3281342207","DK" +"3281342208","3281343231","DE" +"3281343232","3281343487","FI" +"3281343488","3281343743","GB" +"3281343744","3281343999","TR" +"3281344000","3281344255","FR" +"3281344256","3281344511","RU" +"3281344512","3281344767","UA" +"3281344768","3281345279","RU" +"3281345280","3281345535","SA" +"3281345536","3281345791","CH" +"3281345792","3281346047","RU" +"3281346048","3281346303","SI" +"3281346304","3281346559","PL" +"3281346560","3281346815","UA" +"3281346816","3281347071","DE" +"3281347072","3281347327","PL" +"3281347328","3281347583","DE" +"3281347584","3281347839","PL" +"3281347840","3281348095","SE" +"3281348096","3281348351","DE" +"3281348352","3281348607","GB" +"3281348608","3281349119","RU" +"3281349120","3281349375","UA" +"3281349376","3281349631","NL" +"3281349632","3281350143","UA" +"3281350144","3281350655","RU" +"3281350656","3281350911","UA" +"3281350912","3281351167","ES" +"3281351168","3281351423","UA" +"3281351424","3281351679","AT" +"3281351680","3281351935","TR" +"3281351936","3281352191","UA" +"3281352192","3281352447","PL" +"3281352448","3281352703","RO" +"3281352704","3281352959","EU" +"3281352960","3281353215","GB" +"3281353216","3281353471","DE" +"3281353472","3281353727","SE" +"3281353728","3281353983","PL" +"3281353984","3281354239","UA" +"3281354240","3281354751","GB" +"3281354752","3281359071","SE" +"3281359072","3281359103","AN" +"3281359104","3281371135","SE" +"3281371136","3281372159","RS" +"3281372160","3281372671","RU" +"3281372672","3281373183","PL" +"3281373184","3281375231","RU" +"3281375232","3281377279","ES" +"3281377280","3281379327","AT" +"3281379328","3281383423","PL" +"3281383424","3281385471","AT" +"3281385472","3281387519","BG" +"3281387520","3281453055","PL" +"3281453056","3281470975","RU" +"3281470976","3281471231","UZ" +"3281471232","3281518591","RU" +"3281518592","3281578431","GB" +"3281578432","3281578447","IE" +"3281578448","3281640959","GB" +"3281640960","3281640983","SE" +"3281640984","3281641023","GB" +"3281641024","3281641039","SE" +"3281641040","3281641087","GB" +"3281641088","3281641119","SE" +"3281641120","3281649663","GB" +"3281649664","3281699999","FR" +"3281700000","3281700031","US" +"3281700032","3281703551","FR" +"3281703552","3281703615","US" +"3281703616","3281710799","FR" +"3281710800","3281710815","US" +"3281710816","3281711487","FR" +"3281711488","3281711519","BE" +"3281711520","3281712127","FR" +"3281712128","3281712159","US" +"3281712160","3281712191","FR" +"3281712192","3281712255","US" +"3281712256","3281715199","FR" +"3281715200","3281780735","TR" +"3281780736","3281836543","FI" +"3281836544","3281836799","AX" +"3281836800","3281846271","FI" +"3281846272","3281861407","GB" +"3281861408","3281861423","FR" +"3281861424","3281868271","GB" +"3281868272","3281868287","FR" +"3281868288","3281880191","GB" +"3281880192","3281880223","FR" +"3281880224","3281886207","GB" +"3281886208","3281886335","FR" +"3281886336","3281911807","GB" +"3281911808","3281919999","UZ" +"3281920000","3281928191","DE" +"3281928192","3281944575","MT" +"3281944576","3281960959","DE" +"3281960960","3281969151","JO" +"3281969152","3281969663","RU" +"3281969664","3281970175","PL" +"3281970176","3281970687","RU" +"3281970688","3281971199","LI" +"3281971200","3281971711","RU" +"3281971712","3281972223","RO" +"3281972224","3281972735","DE" +"3281972736","3281973247","RU" +"3281973248","3281973759","FR" +"3281973760","3281974271","DK" +"3281974272","3281974783","RU" +"3281974784","3281975295","PL" +"3281975296","3281976319","RU" +"3281976320","3281976831","DE" +"3281976832","3281977343","RU" +"3281977344","3282042879","NO" +"3282042880","3282083839","CH" +"3282083840","3282084351","DE" +"3282084352","3282084863","RO" +"3282084864","3282085375","RU" +"3282085376","3282085887","BE" +"3282085888","3282086399","DE" +"3282086400","3282086911","LV" +"3282086912","3282087423","DE" +"3282087424","3282087935","PL" +"3282087936","3282088447","SE" +"3282088448","3282089471","PL" +"3282089472","3282089983","SK" +"3282089984","3282090495","PL" +"3282090496","3282091007","GB" +"3282091008","3282091519","FR" +"3282091520","3282092031","CH" +"3282092032","3282093055","UA" +"3282093056","3282095103","DE" +"3282095104","3282096127","UA" +"3282096128","3282097151","IT" +"3282097152","3282098175","GB" +"3282098176","3282099199","NL" +"3282099200","3282100223","UA" +"3282100224","3282101247","ES" +"3282101248","3282102271","DE" +"3282102272","3282103295","UA" +"3282103296","3282104319","GB" +"3282104320","3282105343","IL" +"3282105344","3282106367","RU" +"3282106368","3282107391","DE" +"3282107392","3282108415","EU" +"3282108416","3282119423","RU" +"3282119424","3282119679","KZ" +"3282119680","3282149455","RU" +"3282149456","3282149471","KG" +"3282149472","3282173951","RU" +"3282173952","3282174463","UA" +"3282174464","3282174975","GB" +"3282174976","3282175487","DE" +"3282175488","3282177023","RU" +"3282177024","3282177535","GB" +"3282177536","3282178047","KZ" +"3282178048","3282178559","PL" +"3282178560","3282179071","ES" +"3282179072","3282179583","GB" +"3282179584","3282180095","RU" +"3282180096","3282180607","PL" +"3282180608","3282181119","KZ" +"3282181120","3282181631","GB" +"3282181632","3282182143","DE" +"3282182144","3282190335","RU" +"3282190336","3282190847","UA" +"3282190848","3282191359","IL" +"3282191360","3282191871","RU" +"3282191872","3282192383","UA" +"3282192384","3282192895","BG" +"3282192896","3282193407","UA" +"3282193408","3282193919","PL" +"3282193920","3282194431","RU" +"3282194432","3282195455","UA" +"3282195456","3282196479","IE" +"3282196480","3282197503","UA" +"3282197504","3282198527","RU" +"3282198528","3282206719","GB" +"3282206720","3282223103","CH" +"3282223104","3282231295","BE" +"3282231296","3282239487","DE" +"3282239488","3282284559","SE" +"3282284560","3282284579","FI" +"3282284580","3282284591","SE" +"3282284592","3282284595","FI" +"3282284596","3282284599","SE" +"3282284600","3282284603","FI" +"3282284604","3282284735","SE" +"3282284736","3282284783","FI" +"3282284784","3282287615","SE" +"3282287616","3282287759","FI" +"3282287760","3282305023","SE" +"3282305024","3282370559","PL" +"3282370560","3282388175","FI" +"3282388176","3282388191","SE" +"3282388192","3282390015","FI" +"3282390016","3282390271","NL" +"3282390272","3282416383","FI" +"3282416384","3282416511","RU" +"3282416512","3282429279","FI" +"3282429280","3282429311","SE" +"3282429312","3282429343","NO" +"3282429344","3282436095","FI" +"3282436096","3282444159","GB" +"3282444160","3282444223","US" +"3282444224","3282449023","GB" +"3282449024","3282449151","NL" +"3282449152","3282452479","GB" +"3282452480","3282452735","DE" +"3282452736","3282456023","GB" +"3282456024","3282456031","IT" +"3282456032","3282461439","GB" +"3282461440","3282461695","CH" +"3282461696","3282464767","GB" +"3282464768","3282465023","SE" +"3282465024","3282465279","DE" +"3282465280","3282465535","IT" +"3282465536","3282466047","GB" +"3282466048","3282466111","US" +"3282466112","3282466643","GB" +"3282466644","3282466655","IT" +"3282466656","3282466687","GB" +"3282466688","3282466727","IT" +"3282466728","3282466815","GB" +"3282466816","3282467071","US" +"3282467072","3282467327","GB" +"3282467328","3282467359","DE" +"3282467360","3282477055","GB" +"3282477056","3282485247","RU" +"3282485248","3282493439","GI" +"3282493440","3282501631","NG" +"3282501632","3282534399","GR" +"3282534400","3282550783","GB" +"3282550784","3282554879","FR" +"3282554880","3282558975","DE" +"3282558976","3282563071","FR" +"3282563072","3282567167","GB" +"3282567168","3282632703","SK" +"3282632704","3282698239","NL" +"3282698240","3282706431","GR" +"3282706432","3282714623","RU" +"3282714624","3282722815","AT" +"3282722816","3282731007","DE" +"3282731008","3282739199","FI" +"3282739200","3282739455","CH" +"3282739456","3282739711","RO" +"3282739712","3282739967","FR" +"3282739968","3282740223","IR" +"3282740224","3282740479","FR" +"3282740480","3282740735","AT" +"3282740736","3282740991","BG" +"3282740992","3282741247","DE" +"3282741248","3282741503","PT" +"3282741504","3282741759","GB" +"3282741760","3282742015","ES" +"3282742016","3282742527","RO" +"3282742528","3282742783","GB" +"3282742784","3282743039","RU" +"3282743040","3282743295","CH" +"3282743296","3282743551","CY" +"3282743552","3282743807","SI" +"3282743808","3282744063","BG" +"3282744064","3282744319","UA" +"3282744320","3282744575","SA" +"3282744576","3282744831","LT" +"3282744832","3282745087","PL" +"3282745088","3282745343","RS" +"3282745344","3282745599","HU" +"3282745600","3282746111","DE" +"3282746112","3282746367","SE" +"3282746368","3282746623","PL" +"3282746624","3282746879","SE" +"3282746880","3282747135","RO" +"3282747136","3282747391","PL" +"3282747392","3282763775","RU" +"3282763776","3282772991","GB" +"3282772992","3282773247","EU" +"3282773248","3282844855","GB" +"3282844856","3282844863","A2" +"3282844864","3282942210","GB" +"3282942211","3282942211","US" +"3282942212","3282952191","GB" +"3282952192","3282960383","NL" +"3282960384","3283091455","TR" +"3283091456","3283111935","CH" +"3283111936","3283113471","LI" +"3283113472","3283156991","CH" +"3283156992","3283158215","DE" +"3283158216","3283158219","EE" +"3283158220","3283173375","DE" +"3283173376","3283174399","PL" +"3283174400","3283176447","UA" +"3283176448","3283177471","GB" +"3283177472","3283178495","BE" +"3283178496","3283179519","PL" +"3283179520","3283180543","LU" +"3283180544","3283181567","UA" +"3283181568","3283182591","NO" +"3283182592","3283183615","PL" +"3283183616","3283184639","RU" +"3283184640","3283185663","IL" +"3283185664","3283187711","UA" +"3283187712","3283188735","RU" +"3283188736","3283189759","UA" +"3283189760","3283206143","DE" +"3283206144","3283206655","GB" +"3283206656","3283207167","SA" +"3283207168","3283207679","PL" +"3283207680","3283208191","AT" +"3283208192","3283208703","DE" +"3283208704","3283209215","NO" +"3283209216","3283209727","RU" +"3283209728","3283210239","TR" +"3283210240","3283210751","UA" +"3283210752","3283211263","PL" +"3283211264","3283211488","GB" +"3283211489","3283211489","EU" +"3283211490","3283211775","GB" +"3283211776","3283212287","NL" +"3283212288","3283212799","PL" +"3283212800","3283213311","BG" +"3283213312","3283213823","ES" +"3283213824","3283214335","UA" +"3283214336","3283214847","RO" +"3283214848","3283215359","RU" +"3283215360","3283215871","AT" +"3283215872","3283216383","TR" +"3283216384","3283216895","DE" +"3283216896","3283217407","CH" +"3283217408","3283218943","UA" +"3283218944","3283219455","NL" +"3283219456","3283219967","GB" +"3283219968","3283220479","BE" +"3283220480","3283220991","BG" +"3283220992","3283221503","AT" +"3283221504","3283222015","GB" +"3283222016","3283223039","DE" +"3283223040","3283223551","RU" +"3283223552","3283224063","NL" +"3283224064","3283224575","EU" +"3283224576","3283225087","BG" +"3283225088","3283225599","UA" +"3283225600","3283226111","RU" +"3283226112","3283226623","DK" +"3283226624","3283227135","RU" +"3283227136","3283227647","UA" +"3283227648","3283229183","RU" +"3283229184","3283229695","PL" +"3283229696","3283230207","IT" +"3283230208","3283230719","UA" +"3283230720","3283238911","RS" +"3283238912","3283247103","CZ" +"3283247104","3283247615","LV" +"3283247616","3283248127","BG" +"3283248128","3283248639","DE" +"3283248640","3283249151","RO" +"3283249152","3283249663","UA" +"3283249664","3283249919","MD" +"3283249920","3283250175","RO" +"3283250176","3283250687","RU" +"3283250688","3283251199","RO" +"3283251200","3283251711","FR" +"3283251712","3283252223","PL" +"3283252224","3283252735","BG" +"3283252736","3283253247","SI" +"3283253248","3283253759","RO" +"3283253760","3283254271","PL" +"3283254272","3283255295","RO" +"3283255296","3283263487","UA" +"3283263488","3283271679","SE" +"3283271680","3283279871","RU" +"3283279872","3283288063","SE" +"3283288064","3283288575","DE" +"3283288576","3283288579","BE" +"3283288580","3283291487","DE" +"3283291488","3283291491","ES" +"3283291492","3283304919","DE" +"3283304920","3283304923","ES" +"3283304924","3283304959","DE" +"3283304960","3283305023","GB" +"3283305024","3283305087","DE" +"3283305088","3283305127","FR" +"3283305128","3283305711","DE" +"3283305712","3283305715","ES" +"3283305716","3283318687","DE" +"3283318688","3283318691","ES" +"3283318692","3283318975","DE" +"3283318976","3283318991","NL" +"3283318992","3283318999","ES" +"3283319000","3283319167","DE" +"3283319168","3283319171","ES" +"3283319172","3283321087","DE" +"3283321088","3283321119","GB" +"3283321120","3283321151","DE" +"3283321152","3283321155","ES" +"3283321156","3283321711","DE" +"3283321712","3283321715","ES" +"3283321716","3283321871","DE" +"3283321872","3283321875","ES" +"3283321876","3283329923","DE" +"3283329924","3283329927","ES" +"3283329928","3283419135","DE" +"3283419136","3283484671","DK" +"3283484672","3283484927","UA" +"3283484928","3283485183","NL" +"3283485184","3283485439","DE" +"3283485696","3283485951","GB" +"3283485952","3283486128","US" +"3283486129","3283486129","SE" +"3283486130","3283486207","US" +"3283486208","3283486463","AT" +"3283486464","3283486719","UA" +"3283486720","3283486975","RU" +"3283486976","3283487231","PL" +"3283487232","3283487487","FR" +"3283487488","3283487743","DE" +"3283487744","3283487999","CH" +"3283488000","3283488255","NL" +"3283488256","3283488511","PL" +"3283488512","3283488767","RU" +"3283488768","3283489279","FR" +"3283489280","3283489535","DE" +"3283489536","3283489791","PL" +"3283489792","3283490047","RU" +"3283490048","3283490559","UA" +"3283490560","3283490815","PL" +"3283490816","3283491071","CH" +"3283491072","3283491327","TR" +"3283491328","3283491583","AT" +"3283491584","3283491839","RO" +"3283491840","3283492095","RU" +"3283492096","3283492351","AT" +"3283492352","3283492607","ES" +"3283492608","3283492863","SA" +"3283492864","3283493119","DK" +"3283493120","3283493375","IL" +"3283493376","3283493887","PL" +"3283493888","3283494143","DK" +"3283494144","3283494399","GB" +"3283494400","3283494655","PL" +"3283494656","3283494911","DK" +"3283494912","3283495167","PL" +"3283495168","3283495423","BG" +"3283495424","3283495679","TR" +"3283495680","3283495935","NL" +"3283495936","3283496191","BG" +"3283496192","3283496447","DE" +"3283496448","3283496703","HR" +"3283496704","3283496959","LV" +"3283496960","3283497215","DE" +"3283497216","3283497471","PL" +"3283497472","3283497727","DE" +"3283497728","3283498239","PL" +"3283498240","3283498495","CH" +"3283498496","3283498751","PL" +"3283498752","3283499007","AT" +"3283499008","3283499263","DE" +"3283499264","3283499519","RU" +"3283499520","3283499775","DE" +"3283499776","3283500031","GB" +"3283500032","3283500287","DE" +"3283500288","3283500543","SI" +"3283500544","3283500799","GB" +"3283500800","3283501055","UA" +"3283501056","3283509247","LT" +"3283509248","3283517439","DE" +"3283517440","3283525631","RU" +"3283525632","3283533823","GB" +"3283533824","3283534847","UA" +"3283534848","3283535359","DE" +"3283535360","3283535871","RO" +"3283535872","3283536383","GI" +"3283536384","3283536895","UA" +"3283536896","3283537407","DK" +"3283537408","3283537919","PL" +"3283537920","3283538431","RO" +"3283538432","3283538943","IT" +"3283538944","3283539455","RO" +"3283539456","3283539967","RS" +"3283539968","3283540479","DK" +"3283540480","3283540991","PL" +"3283540992","3283541503","RO" +"3283541504","3283542015","CH" +"3283542016","3283550207","IT" +"3283550208","3283550287","EU" +"3283550288","3283550319","AT" +"3283550320","3283550463","EU" +"3283550464","3283550623","AT" +"3283550624","3283550655","FR" +"3283550656","3283550719","GB" +"3283550720","3283552255","AT" +"3283552256","3283552319","IT" +"3283552320","3283552351","EU" +"3283552352","3283552575","IT" +"3283552576","3283552639","DE" +"3283552640","3283552671","IT" +"3283552672","3283552703","CH" +"3283552704","3283552735","DE" +"3283552736","3283552751","FR" +"3283552752","3283553047","IT" +"3283553048","3283553055","GB" +"3283553056","3283553071","ZA" +"3283553072","3283553079","SE" +"3283553080","3283553119","DE" +"3283553120","3283553151","GR" +"3283553152","3283553279","GB" +"3283553280","3283553535","IT" +"3283553536","3283553791","EU" +"3283553792","3283554047","GB" +"3283554048","3283554079","IT" +"3283554080","3283554095","ES" +"3283554096","3283554111","NL" +"3283554112","3283554175","IT" +"3283554176","3283554239","FR" +"3283554240","3283554255","ZA" +"3283554256","3283554271","RU" +"3283554272","3283554303","GB" +"3283554304","3283554327","CH" +"3283554328","3283554335","EU" +"3283554336","3283554367","CH" +"3283554368","3283554431","EU" +"3283554432","3283555743","CH" +"3283555744","3283555759","SE" +"3283555760","3283555775","DE" +"3283555776","3283555807","NL" +"3283555808","3283555839","DE" +"3283555840","3283556351","CH" +"3283556352","3283556391","FR" +"3283556392","3283556399","EU" +"3283556400","3283556623","FR" +"3283556624","3283556671","EU" +"3283556672","3283556735","FR" +"3283556736","3283556863","EU" +"3283556864","3283558303","FR" +"3283558304","3283558335","DE" +"3283558336","3283558367","IT" +"3283558368","3283558383","ZA" +"3283558384","3283558399","GB" +"3283558400","3283558431","RU" +"3283558432","3283558463","DE" +"3283558464","3283558535","RU" +"3283558536","3283558655","EU" +"3283558656","3283558751","FR" +"3283558752","3283558783","BE" +"3283558784","3283558799","GB" +"3283558800","3283558815","BE" +"3283558816","3283558847","NL" +"3283558848","3283558863","ZA" +"3283558864","3283558871","GB" +"3283558872","3283558879","ZA" +"3283558880","3283558895","GB" +"3283558896","3283558911","BE" +"3283558912","3283559039","DE" +"3283559040","3283559167","IE" +"3283559168","3283559231","DE" +"3283559232","3283559263","GB" +"3283559264","3283559295","ZA" +"3283559296","3283559423","DE" +"3283559424","3283559679","NL" +"3283559680","3283559935","IT" +"3283559936","3283560191","GB" +"3283560192","3283560447","NO" +"3283560448","3283560703","EU" +"3283560704","3283560847","ZA" +"3283560848","3283560863","EU" +"3283560864","3283560895","SE" +"3283560896","3283560959","GB" +"3283560960","3283561215","BE" +"3283561216","3283561375","EU" +"3283561376","3283561407","GB" +"3283561408","3283561471","ES" +"3283561472","3283562495","GB" +"3283562496","3283562751","DE" +"3283562752","3283562895","GB" +"3283562896","3283562903","NL" +"3283562904","3283562911","CH" +"3283562912","3283562943","DE" +"3283562944","3283563007","IT" +"3283563008","3283566015","GB" +"3283566016","3283566079","ZA" +"3283566080","3283566591","GB" +"3283566592","3283566719","PL" +"3283566720","3283566847","EU" +"3283566848","3283567103","NO" +"3283567104","3283567423","GB" +"3283567424","3283567455","DE" +"3283567456","3283567471","GB" +"3283567472","3283567487","ES" +"3283567488","3283567615","ZA" +"3283567616","3283567967","GB" +"3283567968","3283567999","IT" +"3283568000","3283568031","GB" +"3283568032","3283568063","DE" +"3283568064","3283568079","NL" +"3283568080","3283568095","ZA" +"3283568096","3283568127","DK" +"3283568128","3283569991","GB" +"3283569992","3283570015","SE" +"3283570016","3283570047","DK" +"3283570048","3283570175","DE" +"3283570176","3283570439","GB" +"3283570440","3283570447","SE" +"3283570448","3283570463","IT" +"3283570464","3283570495","GB" +"3283570496","3283570559","DE" +"3283570560","3283570623","FR" +"3283570624","3283571167","GB" +"3283571168","3283571199","DE" +"3283571200","3283571711","GB" +"3283571712","3283571719","HU" +"3283571720","3283571743","EU" +"3283571744","3283571775","DE" +"3283571776","3283571839","GB" +"3283571840","3283571903","SE" +"3283571904","3283571967","DE" +"3283571968","3283572111","GB" +"3283572112","3283572127","BE" +"3283572128","3283572159","SE" +"3283572160","3283572175","GB" +"3283572176","3283572191","ZA" +"3283572192","3283572223","CH" +"3283572224","3283572615","GB" +"3283572616","3283572623","FR" +"3283572624","3283572631","GB" +"3283572632","3283572639","CH" +"3283572640","3283572671","GB" +"3283572672","3283572735","DE" +"3283572736","3283573247","EU" +"3283573248","3283574527","GB" +"3283574528","3283574591","EU" +"3283574592","3283574607","GB" +"3283574608","3283574615","NL" +"3283574616","3283574623","GB" +"3283574624","3283574639","ZA" +"3283574640","3283574655","GB" +"3283574656","3283575071","DE" +"3283575072","3283575087","NL" +"3283575088","3283576415","DE" +"3283576416","3283576447","ZA" +"3283576448","3283580159","DE" +"3283580160","3283580415","EU" +"3283580416","3283580455","DE" +"3283580456","3283580463","EU" +"3283580464","3283582975","DE" +"3283582976","3283583007","EU" +"3283583008","3283583359","ZA" +"3283583360","3283583487","EU" +"3283583488","3283583503","ZA" +"3283583504","3283583519","EU" +"3283583520","3283583615","ZA" +"3283583616","3283583743","EU" +"3283583744","3283583839","ZA" +"3283583840","3283583847","IT" +"3283583848","3283583871","GB" +"3283583872","3283583999","BE" +"3283584000","3283584031","ZA" +"3283584032","3283584063","DE" +"3283584064","3283584127","IE" +"3283584128","3283585023","ZA" +"3283585024","3283585279","ES" +"3283585280","3283585535","ZA" +"3283585536","3283585679","ES" +"3283585680","3283585695","IE" +"3283585696","3283585727","FR" +"3283585728","3283585791","ES" +"3283585792","3283586047","IE" +"3283586048","3283586351","ES" +"3283586352","3283586367","EU" +"3283586368","3283586407","ES" +"3283586408","3283586415","EU" +"3283586416","3283586503","ES" +"3283586504","3283586559","EU" +"3283586560","3283586815","FR" +"3283586816","3283587071","DE" +"3283587072","3283587199","EU" +"3283587200","3283587231","NL" +"3283587232","3283587263","EU" +"3283587264","3283587335","NL" +"3283587336","3283587343","GB" +"3283587344","3283587359","NL" +"3283587360","3283587391","SE" +"3283587392","3283587423","NL" +"3283587424","3283587431","SE" +"3283587432","3283587439","EU" +"3283587440","3283587447","GB" +"3283587448","3283587455","DE" +"3283587456","3283587487","CH" +"3283587488","3283587519","EU" +"3283587520","3283587551","CH" +"3283587552","3283587583","EU" +"3283587584","3283587647","NL" +"3283587648","3283587679","DE" +"3283587680","3283587711","CH" +"3283587712","3283587839","DE" +"3283587840","3283587871","NL" +"3283587872","3283587887","ZA" +"3283587888","3283587895","SE" +"3283587896","3283587903","CH" +"3283587904","3283587967","IE" +"3283587968","3283588095","DE" +"3283588096","3283588191","BE" +"3283588192","3283588223","EU" +"3283588224","3283588479","BE" +"3283588480","3283588543","AT" +"3283588544","3283588607","GB" +"3283588608","3283589119","BE" +"3283589120","3283589791","DK" +"3283589792","3283589823","DE" +"3283589824","3283589839","EU" +"3283589840","3283589887","DE" +"3283589888","3283590143","DK" +"3283590144","3283590175","EU" +"3283590176","3283590207","SE" +"3283590208","3283590271","EU" +"3283590272","3283590319","SE" +"3283590320","3283590335","EU" +"3283590336","3283590359","SE" +"3283590360","3283590367","EU" +"3283590368","3283590527","SE" +"3283590528","3283590543","ZA" +"3283590544","3283590591","DE" +"3283590592","3283590623","CH" +"3283590624","3283590655","GB" +"3283590656","3283590847","SE" +"3283590848","3283590879","ZA" +"3283590880","3283590911","DE" +"3283590912","3283591167","SE" +"3283591168","3283591359","DE" +"3283591360","3283591367","GB" +"3283591368","3283591375","ZA" +"3283591376","3283591423","CH" +"3283591424","3283592191","DE" +"3283592192","3283592847","CH" +"3283592848","3283592863","GB" +"3283592864","3283592895","DE" +"3283592896","3283592903","SE" +"3283592904","3283592911","GB" +"3283592912","3283592927","ZA" +"3283592928","3283593023","CH" +"3283593024","3283593055","BE" +"3283593056","3283593087","IT" +"3283593088","3283593215","CH" +"3283593216","3283595263","IT" +"3283595264","3283595775","DE" +"3283595776","3283596287","EU" +"3283596288","3283598127","GB" +"3283598128","3283598143","EU" +"3283598144","3283598175","DE" +"3283598176","3283598207","EU" +"3283598208","3283598335","DE" +"3283598336","3283598639","GB" +"3283598640","3283598655","CH" +"3283598656","3283598687","IE" +"3283598688","3283598719","SE" +"3283598720","3283598735","DE" +"3283598736","3283598743","DK" +"3283598744","3283598847","DE" +"3283598848","3283598879","GB" +"3283598880","3283598911","CH" +"3283598912","3283598975","GB" +"3283598976","3283599103","DK" +"3283599104","3283599295","GB" +"3283599296","3283599311","DE" +"3283599312","3283599327","NL" +"3283599328","3283599359","GB" +"3283599360","3283599615","SE" +"3283599616","3283599871","IE" +"3283599872","3283600527","ZA" +"3283600528","3283600543","FR" +"3283600544","3283600575","DE" +"3283600576","3283600607","IT" +"3283600608","3283600639","EU" +"3283600640","3283600671","ZA" +"3283600672","3283600703","DE" +"3283600704","3283600767","IT" +"3283600768","3283600895","ZA" +"3283600896","3283601343","AT" +"3283601344","3283601375","IT" +"3283601376","3283601391","IE" +"3283601392","3283601399","NL" +"3283601400","3283601919","AT" +"3283601920","3283602239","ZA" +"3283602240","3283602271","GB" +"3283602272","3283602287","IT" +"3283602288","3283602303","ZA" +"3283602304","3283602367","GB" +"3283602368","3283602431","BE" +"3283602432","3283602943","ZA" +"3283602944","3283603007","CH" +"3283603008","3283603071","IT" +"3283603072","3283603199","CH" +"3283603200","3283603455","EU" +"3283603456","3283604479","GB" +"3283604480","3283604735","EU" +"3283604736","3283605503","GB" +"3283605504","3283606783","DE" +"3283606784","3283607359","BE" +"3283607360","3283607423","NO" +"3283607424","3283607551","AT" +"3283607552","3283608575","BE" +"3283608576","3283608831","DE" +"3283608832","3283608895","EU" +"3283608896","3283608959","DE" +"3283608960","3283609087","IT" +"3283609088","3283610783","DE" +"3283610784","3283610815","CH" +"3283610816","3283610879","TR" +"3283610880","3283611903","DE" +"3283611904","3283613247","IT" +"3283613248","3283613311","DE" +"3283613312","3283613695","IT" +"3283613696","3283614079","CH" +"3283614080","3283614207","FR" +"3283614208","3283614975","CH" +"3283614976","3283615231","EU" +"3283615232","3283615743","CH" +"3283615744","3283623935","HU" +"3283623936","3283632127","DK" +"3283632128","3283632639","NL" +"3283632640","3283633151","GB" +"3283633152","3283633663","SE" +"3283633664","3283634175","UA" +"3283634176","3283635199","RU" +"3283635200","3283635711","GB" +"3283635712","3283636223","RU" +"3283636224","3283636735","UA" +"3283636736","3283637759","PL" +"3283637760","3283638271","UA" +"3283638272","3283638783","PL" +"3283638784","3283639295","RU" +"3283639296","3283639807","CH" +"3283639808","3283640319","DE" +"3283640320","3283648511","DK" +"3283648512","3283649023","BE" +"3283649024","3283649535","GB" +"3283649536","3283649791","DE" +"3283649792","3283650047","FR" +"3283650048","3283650559","DE" +"3283650560","3283650687","SE" +"3283650688","3283650815","CH" +"3283650816","3283650879","SE" +"3283650880","3283650911","GB" +"3283650912","3283650927","SE" +"3283650928","3283650943","GB" +"3283650944","3283650959","RU" +"3283650960","3283650975","CH" +"3283650976","3283651071","GB" +"3283651072","3283651135","IT" +"3283651136","3283651167","BE" +"3283651168","3283651183","ES" +"3283651184","3283651199","BE" +"3283651200","3283651263","HU" +"3283651264","3283651327","ZA" +"3283651328","3283651423","BE" +"3283651424","3283651439","DE" +"3283651440","3283651463","BE" +"3283651464","3283651471","DE" +"3283651472","3283651487","BE" +"3283651488","3283651519","FR" +"3283651520","3283651583","IL" +"3283651584","3283651591","GB" +"3283651592","3283651599","BE" +"3283651600","3283651615","DE" +"3283651616","3283651647","BE" +"3283651648","3283651663","SE" +"3283651664","3283651671","RO" +"3283651672","3283651687","BE" +"3283651688","3283651695","IT" +"3283651696","3283651711","GB" +"3283651712","3283651727","CH" +"3283651728","3283651735","FR" +"3283651736","3283651743","CH" +"3283651744","3283651775","FR" +"3283651776","3283651839","SE" +"3283651840","3283651967","NL" +"3283651968","3283652031","DK" +"3283652032","3283652063","DE" +"3283652064","3283652071","BE" +"3283652072","3283652079","GB" +"3283652080","3283652095","BE" +"3283652096","3283652351","GB" +"3283652352","3283652479","IT" +"3283652480","3283652519","BE" +"3283652520","3283652527","SE" +"3283652528","3283652543","BE" +"3283652544","3283652575","FR" +"3283652576","3283652607","DE" +"3283652608","3283652863","NO" +"3283652864","3283653247","BE" +"3283653248","3283653311","NO" +"3283653312","3283653503","BE" +"3283653504","3283653631","GB" +"3283653632","3283653887","FR" +"3283653888","3283654015","SE" +"3283654016","3283654143","FR" +"3283654144","3283654399","DE" +"3283654400","3283654655","CH" +"3283654656","3283654911","DK" +"3283654912","3283655039","BE" +"3283655040","3283655167","DK" +"3283655168","3283655295","DE" +"3283655296","3283655423","BE" +"3283655424","3283655679","FR" +"3283655680","3283655935","ES" +"3283655936","3283656191","ZA" +"3283656192","3283656223","GB" +"3283656224","3283656255","BE" +"3283656256","3283656271","GB" +"3283656272","3283656303","BE" +"3283656304","3283656311","GB" +"3283656312","3283656447","BE" +"3283656448","3283656559","ES" +"3283656560","3283656575","FR" +"3283656576","3283656591","BE" +"3283656592","3283656599","FR" +"3283656600","3283656703","BE" +"3283656704","3283664895","HU" +"3283664896","3283673087","UA" +"3283673088","3283681279","GB" +"3283681280","3283729023","DE" +"3283729024","3283729151","US" +"3283729152","3283746815","DE" +"3283746816","3283812351","CH" +"3283812352","3283877887","PL" +"3283877888","3283943423","GB" +"3283943424","3283944447","CZ" +"3283944448","3283945471","AT" +"3283945472","3283946495","UA" +"3283946496","3283947519","GB" +"3283947520","3283948543","UA" +"3283948544","3283949567","NL" +"3283949568","3283950591","SE" +"3283950592","3283951615","KZ" +"3283951616","3283952639","PL" +"3283952640","3283953663","UA" +"3283953664","3283954687","PL" +"3283954688","3283956735","UA" +"3283956736","3283957759","PL" +"3283957760","3283958783","GR" +"3283958784","3283959807","UA" +"3283959808","3283960831","FR" +"3283960832","3283961855","KZ" +"3283961856","3283962879","RU" +"3283962880","3283963903","PL" +"3283963904","3283964927","BG" +"3283964928","3283966975","PL" +"3283966976","3283967999","DE" +"3283968000","3283969023","UA" +"3283969024","3283970047","RU" +"3283970048","3283971071","UA" +"3283971072","3283972095","RU" +"3283972096","3283973119","SE" +"3283973120","3283974143","NL" +"3283974144","3283975167","RU" +"3283975168","3283976191","NL" +"3283976192","3283976703","IE" +"3283976704","3283977215","DK" +"3283977216","3283977727","UA" +"3283977728","3283978751","RU" +"3283978752","3283979263","RO" +"3283979264","3283979775","IL" +"3283979776","3283980287","NO" +"3283980288","3283980799","RO" +"3283980800","3283981823","CH" +"3283981824","3283983359","RO" +"3283983360","3283983871","CY" +"3283983872","3283984383","GB" +"3283984384","3283984895","SE" +"3283984896","3283985407","GR" +"3283985408","3283985919","RO" +"3283985920","3283986431","AT" +"3283986432","3283986943","RU" +"3283986944","3283987455","AT" +"3283987456","3283987967","GB" +"3283987968","3283988991","RO" +"3283988992","3283989503","FR" +"3283989504","3283990015","RU" +"3283990016","3283990527","SE" +"3283990528","3283991551","RO" +"3283991552","3283992063","SE" +"3283992064","3283992575","RO" +"3283992576","3283993087","IL" +"3283993088","3283993599","RO" +"3283993600","3283994111","UA" +"3283994112","3283994623","AT" +"3283994624","3283995135","UA" +"3283995136","3283995647","BE" +"3283995648","3283996159","CH" +"3283996160","3283996671","MK" +"3283996672","3283997183","RO" +"3283997184","3283997695","PS" +"3283997696","3283998207","SA" +"3283998208","3283998719","UA" +"3283998720","3283999231","NL" +"3283999232","3283999743","RU" +"3283999744","3284000255","GB" +"3284000256","3284000767","RU" +"3284000768","3284001279","BG" +"3284001280","3284002303","UA" +"3284002304","3284002815","PL" +"3284002816","3284003327","DK" +"3284003328","3284003839","UA" +"3284003840","3284004351","DE" +"3284004352","3284004863","RU" +"3284004864","3284005375","UA" +"3284005376","3284005887","PA" +"3284005888","3284006399","DE" +"3284006400","3284007423","UA" +"3284007424","3284007935","RO" +"3284007936","3284008447","CH" +"3284008448","3284008959","NO" +"3284008960","3284009215","NL" +"3284009216","3284009471","PL" +"3284009472","3284009727","DE" +"3284009728","3284009983","FR" +"3284009984","3284010239","CH" +"3284010240","3284010751","FR" +"3284010752","3284011519","DE" +"3284011520","3284011775","HR" +"3284011776","3284012031","DE" +"3284012032","3284012287","RU" +"3284012288","3284012543","UA" +"3284012544","3284012799","RU" +"3284012800","3284013311","AT" +"3284013312","3284013567","PL" +"3284013568","3284013823","DK" +"3284013824","3284014079","IL" +"3284014080","3284014335","TR" +"3284014336","3284014591","IT" +"3284014592","3284014847","GB" +"3284014848","3284015103","IL" +"3284015104","3284015359","US" +"3284015360","3284015615","DK" +"3284015616","3284015871","AT" +"3284015872","3284016127","FR" +"3284016128","3284016383","NL" +"3284016384","3284016639","CH" +"3284016640","3284017151","DK" +"3284017152","3284025343","GR" +"3284025344","3284025439","GB" +"3284025440","3284025471","DE" +"3284025472","3284027327","GB" +"3284027328","3284027343","DE" +"3284027344","3284028415","GB" +"3284028416","3284028671","DE" +"3284028672","3284028879","GB" +"3284028880","3284028895","DE" +"3284028896","3284031743","GB" +"3284031744","3284031999","DE" +"3284032000","3284032063","GB" +"3284032064","3284032095","DE" +"3284032096","3284032159","GB" +"3284032160","3284032191","DE" +"3284032192","3284032671","GB" +"3284032672","3284032703","DE" +"3284032704","3284033535","GB" +"3284033536","3284041727","RU" +"3284041728","3284041983","DK" +"3284041984","3284042239","SI" +"3284042240","3284042495","GB" +"3284042496","3284042751","AT" +"3284042752","3284043007","RU" +"3284043008","3284043263","DE" +"3284043264","3284043519","EE" +"3284043520","3284043775","DE" +"3284043776","3284044031","HR" +"3284044032","3284044287","FR" +"3284044288","3284044799","DE" +"3284044800","3284045055","CZ" +"3284045056","3284045311","EE" +"3284045312","3284045567","DE" +"3284045568","3284045823","AT" +"3284045824","3284046079","UA" +"3284046080","3284046335","DE" +"3284046336","3284046591","NL" +"3284046592","3284046847","SE" +"3284046848","3284047103","DE" +"3284047104","3284047359","DK" +"3284047360","3284047615","EU" +"3284047616","3284047871","NL" +"3284047872","3284048127","UA" +"3284048128","3284048383","DK" +"3284048384","3284048639","GB" +"3284048640","3284049151","FR" +"3284049152","3284049407","UA" +"3284049408","3284049663","SI" +"3284049664","3284049919","RO" +"3284049920","3284058111","CH" +"3284058112","3284066303","SE" +"3284066304","3284075007","NL" +"3284075008","3284075519","DE" +"3284075520","3284076031","RU" +"3284076032","3284076543","SA" +"3284076544","3284077055","PL" +"3284077056","3284077567","RU" +"3284077568","3284078079","UA" +"3284078080","3284078591","DE" +"3284078592","3284079103","NL" +"3284079104","3284079615","RU" +"3284079616","3284080127","DE" +"3284080128","3284080639","BE" +"3284080640","3284081151","UA" +"3284081152","3284081663","DE" +"3284081664","3284082175","IE" +"3284082176","3284082687","NO" +"3284082688","3284083199","RU" +"3284083200","3284083711","BG" +"3284083712","3284084223","RU" +"3284084224","3284084735","UA" +"3284084736","3284085247","RU" +"3284085248","3284085759","DE" +"3284085760","3284086783","RO" +"3284086784","3284087295","CZ" +"3284087296","3284087807","RU" +"3284087808","3284088319","IL" +"3284088320","3284088831","LV" +"3284088832","3284089855","UA" +"3284089856","3284090367","BG" +"3284090368","3284090879","PL" +"3284090880","3284091391","RU" +"3284091392","3284091903","GB" +"3284091904","3284092415","DE" +"3284092416","3284092927","GB" +"3284092928","3284093439","UA" +"3284093440","3284093951","IR" +"3284093952","3284094975","RU" +"3284094976","3284095487","UA" +"3284095488","3284095999","RU" +"3284096000","3284096511","IT" +"3284096512","3284097023","GB" +"3284097024","3284097535","RU" +"3284097536","3284098047","UA" +"3284098048","3284098559","DE" +"3284098560","3284099071","BG" +"3284099072","3284099583","RO" +"3284099584","3284100095","GR" +"3284100096","3284100607","AM" +"3284100608","3284101119","EU" +"3284101120","3284101631","UA" +"3284101632","3284102143","GB" +"3284102144","3284102399","DK" +"3284102400","3284102655","EU" +"3284102656","3284103167","AT" +"3284103168","3284103679","NL" +"3284103680","3284104191","DE" +"3284104192","3284104703","NO" +"3284104704","3284105215","TR" +"3284105216","3284105727","NL" +"3284105728","3284106239","FI" +"3284106240","3284106751","RO" +"3284106752","3284107263","UA" +"3284107264","3284107775","DE" +"3284107776","3284108287","RU" +"3284108288","3284108799","CH" +"3284108800","3284109311","FR" +"3284109312","3284109823","RU" +"3284109824","3284110335","UA" +"3284110336","3284110847","RU" +"3284110848","3284111359","DK" +"3284111360","3284111871","SE" +"3284111872","3284112383","RU" +"3284112384","3284112895","BG" +"3284112896","3284113919","NL" +"3284113920","3284114431","AM" +"3284114432","3284114943","GB" +"3284114944","3284115455","RU" +"3284115456","3284115967","RO" +"3284115968","3284116479","PL" +"3284116480","3284116991","NL" +"3284116992","3284117503","RU" +"3284117504","3284118015","UA" +"3284118016","3284118527","PL" +"3284118528","3284119039","FR" +"3284119040","3284120063","RU" +"3284120064","3284120575","UA" +"3284120576","3284121087","PL" +"3284121088","3284121599","RU" +"3284121600","3284122111","PL" +"3284122112","3284122623","AM" +"3284122624","3284123135","CH" +"3284123136","3284124159","RU" +"3284124160","3284124671","UA" +"3284124672","3284125183","DE" +"3284125184","3284125695","RO" +"3284125696","3284126207","UA" +"3284126208","3284127231","CZ" +"3284127232","3284127743","HK" +"3284127744","3284128255","RU" +"3284128256","3284128767","GB" +"3284128768","3284129279","SE" +"3284129280","3284129791","UA" +"3284129792","3284130303","DE" +"3284130304","3284130815","GB" +"3284130816","3284131327","RU" +"3284131328","3284131839","HU" +"3284131840","3284132351","DE" +"3284132352","3284132863","UA" +"3284132864","3284133375","HU" +"3284133376","3284133887","TM" +"3284133888","3284134399","PL" +"3284134400","3284134911","UA" +"3284134912","3284135935","RU" +"3284135936","3284136447","CH" +"3284136448","3284136959","RU" +"3284136960","3284137471","FR" +"3284137472","3284137983","UA" +"3284137984","3284138495","PL" +"3284138496","3284139007","RU" +"3284139008","3284140031","AT" +"3284140032","3284205567","DK" +"3284205568","3284206335","NL" +"3284206336","3284206591","EU" +"3284206592","3284257535","NL" +"3284257536","3284257791","GB" +"3284257792","3284271103","NL" +"3284271104","3284402175","GB" +"3284402176","3284467711","SE" +"3284467712","3284531775","FI" +"3284531776","3284531779","NL" +"3284531780","3284533247","FI" +"3284533248","3284598783","SE" +"3284598784","3284664319","HU" +"3284664320","3284672511","GB" +"3284672512","3284680703","DE" +"3284680704","3284681215","UA" +"3284681216","3284681727","RO" +"3284681728","3284682239","FI" +"3284682240","3284682751","DE" +"3284682752","3284683263","SE" +"3284683264","3284683775","KZ" +"3284683776","3284684287","GB" +"3284684288","3284684799","FR" +"3284684800","3284685311","DE" +"3284685312","3284685823","NL" +"3284685824","3284686335","DE" +"3284686336","3284686847","RO" +"3284686848","3284687359","PL" +"3284687360","3284687871","UA" +"3284687872","3284688383","NG" +"3284688384","3284688895","IT" +"3284688896","3284697087","FR" +"3284697088","3284697215","GB" +"3284697216","3284697279","FR" +"3284697280","3284705279","GB" +"3284705280","3284713471","FR" +"3284713472","3284713727","DE" +"3284713728","3284713983","GR" +"3284713984","3284714239","DE" +"3284714240","3284714495","FR" +"3284714496","3284714751","UA" +"3284714752","3284715007","AT" +"3284715008","3284715263","GB" +"3284715264","3284715519","PL" +"3284715520","3284715775","SI" +"3284715776","3284715816","BE" +"3284715817","3284715817","EU" +"3284715818","3284716031","BE" +"3284716032","3284716287","IT" +"3284716288","3284716543","RU" +"3284716544","3284716799","GR" +"3284716800","3284717055","IL" +"3284717056","3284717311","PL" +"3284717312","3284717567","DE" +"3284717568","3284717823","FR" +"3284717824","3284718079","RU" +"3284718080","3284718591","GB" +"3284718592","3284718847","PL" +"3284718848","3284719103","RU" +"3284719104","3284719359","PL" +"3284719360","3284719615","DE" +"3284719616","3284719871","RU" +"3284719872","3284720127","FR" +"3284720128","3284720383","CH" +"3284720384","3284720895","SE" +"3284720896","3284721151","UA" +"3284721152","3284721407","TR" +"3284721408","3284721663","NL" +"3284721664","3284722175","BE" +"3284722176","3284722687","RU" +"3284722688","3284723199","FR" +"3284723200","3284723711","GB" +"3284723712","3284724223","RU" +"3284724224","3284724735","PL" +"3284724736","3284725247","RU" +"3284725248","3284725759","GR" +"3284725760","3284726271","LU" +"3284726272","3284726783","DE" +"3284726784","3284727295","UA" +"3284727296","3284727807","MK" +"3284727808","3284728319","RU" +"3284728320","3284728831","UA" +"3284728832","3284729343","PT" +"3284729344","3284729855","FR" +"3284729856","3284795391","RU" +"3284795392","3284803583","FR" +"3284803584","3284811775","DE" +"3284811776","3284819967","KE" +"3284819968","3284825343","GB" +"3284825344","3284825359","DE" +"3284825360","3284828159","GB" +"3284828160","3284844543","AT" +"3284844544","3284860927","CH" +"3284860928","3284863743","DE" +"3284863744","3284863999","FR" +"3284864000","3284868863","DE" +"3284868864","3284869375","FR" +"3284869376","3284869631","DE" +"3284869632","3284869887","IT" +"3284869888","3284872959","DE" +"3284872960","3284873471","IT" +"3284873472","3284913919","DE" +"3284913920","3284914175","GB" +"3284914176","3284926463","DE" +"3284926464","3284991999","NO" +"3284992000","3285057535","PL" +"3285057536","3285065727","IT" +"3285065728","3285073919","RU" +"3285073920","3285074687","GB" +"3285074688","3285076479","NL" +"3285076480","3285076735","EU" +"3285076736","3285076767","BE" +"3285076768","3285078111","NL" +"3285078112","3285078143","GB" +"3285078144","3285078175","NL" +"3285078176","3285078191","GB" +"3285078192","3285079423","NL" +"3285079424","3285079551","DE" +"3285079552","3285079967","NL" +"3285079968","3285079999","DE" +"3285080000","3285082111","NL" +"3285082112","3285084159","AT" +"3285084160","3285085183","LU" +"3285085184","3285086207","GB" +"3285086208","3285088255","PL" +"3285088256","3285088511","RO" +"3285088512","3285088767","DK" +"3285088768","3285089279","RU" +"3285089280","3285090303","PL" +"3285090304","3285098495","DE" +"3285098496","3285114879","GB" +"3285114880","3285115903","RU" +"3285115904","3285116415","PL" +"3285116416","3285116927","RU" +"3285116928","3285117439","UA" +"3285117440","3285117951","RU" +"3285117952","3285118463","FR" +"3285118464","3285118975","UA" +"3285118976","3285119487","RU" +"3285119488","3285119999","RO" +"3285120000","3285120511","RU" +"3285120512","3285121023","RO" +"3285121024","3285121535","SE" +"3285121536","3285122047","CY" +"3285122048","3285123071","RU" +"3285123072","3285158639","BE" +"3285158640","3285158647","FR" +"3285158648","3285164367","BE" +"3285164368","3285164375","NL" +"3285164376","3285188607","BE" +"3285188608","3285265999","RU" +"3285266000","3285266007","CH" +"3285266008","3285319679","RU" +"3285319680","3285320191","HU" +"3285320192","3285320703","RU" +"3285320704","3285321215","RO" +"3285321216","3285321727","DE" +"3285321728","3285322239","RU" +"3285322240","3285322751","DE" +"3285322752","3285323263","PL" +"3285323264","3285323775","CZ" +"3285323776","3285324287","CH" +"3285324288","3285324799","DK" +"3285324800","3285325311","RU" +"3285325312","3285325823","GB" +"3285325824","3285326335","PL" +"3285326336","3285326847","DE" +"3285326848","3285327359","SK" +"3285327360","3285328383","RU" +"3285328384","3285328895","PL" +"3285328896","3285329407","SE" +"3285329408","3285329919","GB" +"3285329920","3285330431","RO" +"3285330432","3285330943","FR" +"3285330944","3285331455","RO" +"3285331456","3285331967","KZ" +"3285331968","3285332991","DE" +"3285332992","3285333503","SE" +"3285333504","3285334015","GB" +"3285334016","3285334527","NL" +"3285334528","3285335039","DE" +"3285335040","3285335551","PL" +"3285335552","3285336063","SE" +"3285336064","3285352447","IT" +"3285352448","3285368831","RU" +"3285368832","3285385215","SI" +"3285385216","3285386239","PL" +"3285386240","3285387263","RU" +"3285387264","3285388287","PL" +"3285388288","3285389311","CH" +"3285389312","3285390335","FI" +"3285390336","3285393407","RU" +"3285393408","3285394431","AT" +"3285394432","3285396479","RU" +"3285396480","3285397503","IR" +"3285397504","3285398527","NL" +"3285398528","3285399551","RU" +"3285399552","3285400575","NL" +"3285400576","3285401599","UA" +"3285401600","3285402623","RU" +"3285402624","3285403647","IL" +"3285403648","3285404671","NL" +"3285404672","3285406719","RU" +"3285406720","3285407743","UA" +"3285407744","3285408767","RU" +"3285408768","3285409791","GB" +"3285409792","3285410815","UA" +"3285410816","3285412863","RU" +"3285412864","3285413887","UA" +"3285413888","3285414911","RU" +"3285414912","3285415935","UA" +"3285415936","3285419007","RU" +"3285419008","3285420031","SE" +"3285420032","3285424127","UA" +"3285424128","3285425151","RO" +"3285425152","3285426175","LV" +"3285426176","3285427199","UA" +"3285427200","3285428223","GB" +"3285428224","3285429247","RU" +"3285429248","3285430271","UA" +"3285430272","3285431295","DK" +"3285431296","3285432319","UZ" +"3285432320","3285434367","UA" +"3285434368","3285436415","RU" +"3285436416","3285437439","GR" +"3285437440","3285438463","RU" +"3285438464","3285440511","UA" +"3285440512","3285442559","RU" +"3285442560","3285443583","IE" +"3285443584","3285444607","UA" +"3285444608","3285446655","RU" +"3285446656","3285447679","UA" +"3285447680","3285449727","RU" +"3285449728","3285450751","UA" +"3285450752","3285453055","GB" +"3285453056","3285453119","EU" +"3285453120","3285454847","GB" +"3285454848","3285455103","EU" +"3285455104","3285455743","DE" +"3285455744","3285455871","EU" +"3285455872","3285455887","DE" +"3285455888","3285455895","EU" +"3285455896","3285455903","GB" +"3285455904","3285455935","EU" +"3285455936","3285456255","DE" +"3285456256","3285456287","EU" +"3285456288","3285456351","DE" +"3285456352","3285456383","EU" +"3285456384","3285456639","DE" +"3285456640","3285456703","DK" +"3285456704","3285456735","EU" +"3285456736","3285456767","DK" +"3285456768","3285456831","EU" +"3285456832","3285456871","DK" +"3285456872","3285456879","EU" +"3285456880","3285456895","DK" +"3285456896","3285456959","GB" +"3285456960","3285456975","EU" +"3285456976","3285457151","GB" +"3285457152","3285457167","EU" +"3285457168","3285457183","SE" +"3285457184","3285457231","EU" +"3285457232","3285457247","SE" +"3285457248","3285457279","EU" +"3285457280","3285457407","SE" +"3285457408","3285457663","GB" +"3285457664","3285457759","IT" +"3285457760","3285457791","EU" +"3285457792","3285457919","IT" +"3285457920","3285458167","GB" +"3285458168","3285458431","EU" +"3285458432","3285458943","GB" +"3285458944","3285458975","DK" +"3285458976","3285459007","EU" +"3285459008","3285459079","DK" +"3285459080","3285459119","EU" +"3285459120","3285459327","DK" +"3285459328","3285459391","EU" +"3285459392","3285459535","DK" +"3285459536","3285459543","EU" +"3285459544","3285459711","DK" +"3285459712","3285459967","NO" +"3285459968","3285460479","FI" +"3285460480","3285460991","DK" +"3285460992","3285461015","NL" +"3285461016","3285461055","EU" +"3285461056","3285461111","NL" +"3285461112","3285461119","EU" +"3285461120","3285461263","NL" +"3285461264","3285461279","BE" +"3285461280","3285461311","EU" +"3285461312","3285461375","CH" +"3285461376","3285461415","NL" +"3285461416","3285461423","EU" +"3285461424","3285461447","NL" +"3285461448","3285461455","DE" +"3285461456","3285461535","NL" +"3285461536","3285461567","EU" +"3285461568","3285461791","NL" +"3285461792","3285461799","EU" +"3285461800","3285461807","NL" +"3285461808","3285461855","EU" +"3285461856","3285461877","NL" +"3285461878","3285461879","EU" +"3285461880","3285461967","NL" +"3285461968","3285461975","EU" +"3285461976","3285461991","NL" +"3285461992","3285461999","GB" +"3285462000","3285462007","NL" +"3285462008","3285462015","EU" +"3285462016","3285462207","DE" +"3285462208","3285462223","GB" +"3285462224","3285462383","DE" +"3285462384","3285462399","EU" +"3285462400","3285462527","DE" +"3285462528","3285462543","EU" +"3285462544","3285462655","DE" +"3285462656","3285462783","EU" +"3285462784","3285462831","AT" +"3285462832","3285462951","EU" +"3285462952","3285462959","AT" +"3285462960","3285463007","EU" +"3285463008","3285463039","AT" +"3285463040","3285463087","LU" +"3285463088","3285463103","EU" +"3285463104","3285463135","LU" +"3285463136","3285463295","EU" +"3285463296","3285463311","FR" +"3285463312","3285463319","BE" +"3285463320","3285463359","EU" +"3285463360","3285463455","BE" +"3285463456","3285463487","EU" +"3285463488","3285463503","GB" +"3285463504","3285463519","EU" +"3285463520","3285463615","BE" +"3285463616","3285463647","FR" +"3285463648","3285463663","BE" +"3285463664","3285463671","EU" +"3285463672","3285463743","BE" +"3285463744","3285463775","EU" +"3285463776","3285463807","BE" +"3285463808","3285464071","EU" +"3285464072","3285464095","BE" +"3285464096","3285464127","GB" +"3285464128","3285464319","EU" +"3285464320","3285464383","BE" +"3285464384","3285464415","GB" +"3285464416","3285464431","BE" +"3285464432","3285464447","DE" +"3285464448","3285465087","BE" +"3285465088","3285465103","DK" +"3285465104","3285465151","EU" +"3285465152","3285465175","DK" +"3285465176","3285465215","EU" +"3285465216","3285465231","DK" +"3285465232","3285465247","EU" +"3285465248","3285465343","DK" +"3285465344","3285465631","EU" +"3285465632","3285465727","DE" +"3285465728","3285465855","EU" +"3285465856","3285465951","DE" +"3285465952","3285465983","EU" +"3285465984","3285466367","DE" +"3285466368","3285466447","CH" +"3285466448","3285466455","EU" +"3285466456","3285466463","CH" +"3285466464","3285466527","EU" +"3285466528","3285466559","CH" +"3285466560","3285466623","EU" +"3285466624","3285466879","AT" +"3285466880","3285466895","BG" +"3285466896","3285466911","EU" +"3285466912","3285466959","BG" +"3285466960","3285466975","EU" +"3285466976","3285467007","BG" +"3285467008","3285467015","EU" +"3285467016","3285467023","BG" +"3285467024","3285467135","EU" +"3285467136","3285467391","DE" +"3285467392","3285467663","EU" +"3285467664","3285467679","DE" +"3285467680","3285467711","EU" +"3285467712","3285467823","DE" +"3285467824","3285467831","EU" +"3285467832","3285467839","DE" +"3285467840","3285467871","EU" +"3285467872","3285467903","DE" +"3285467904","3285467935","EU" +"3285467936","3285467951","DE" +"3285467952","3285467959","GB" +"3285467960","3285467967","EU" +"3285467968","3285468511","DE" +"3285468512","3285468575","EU" +"3285468576","3285468599","DE" +"3285468600","3285468607","EU" +"3285468608","3285468615","DE" +"3285468616","3285468623","EU" +"3285468624","3285469695","DE" +"3285469696","3285469727","EU" +"3285469728","3285471007","DE" +"3285471008","3285471039","EU" +"3285471040","3285471071","DE" +"3285471072","3285471103","EU" +"3285471104","3285471743","DE" +"3285471744","3285471807","EU" +"3285471808","3285471871","DE" +"3285471872","3285471935","EU" +"3285471936","3285472127","DE" +"3285472128","3285472159","EU" +"3285472160","3285472175","DE" +"3285472176","3285472183","EU" +"3285472184","3285472223","DE" +"3285472224","3285472255","EU" +"3285472256","3285472511","US" +"3285472512","3285473327","EU" +"3285473328","3285473343","DE" +"3285473344","3285473439","EU" +"3285473440","3285473583","DE" +"3285473584","3285473591","GB" +"3285473592","3285473599","DE" +"3285473600","3285473631","EU" +"3285473632","3285473663","DE" +"3285473664","3285473791","EU" +"3285473792","3285474047","DE" +"3285474048","3285474095","EU" +"3285474096","3285474111","DE" +"3285474112","3285474175","EU" +"3285474176","3285474271","DE" +"3285474272","3285474303","EU" +"3285474304","3285474319","DE" +"3285474320","3285474335","EU" +"3285474336","3285474367","DE" +"3285474368","3285474383","EU" +"3285474384","3285474559","DE" +"3285474560","3285475071","EU" +"3285475072","3285475135","DE" +"3285475136","3285475143","EU" +"3285475144","3285475167","DE" +"3285475168","3285475199","EU" +"3285475200","3285475207","DE" +"3285475208","3285475215","EU" +"3285475216","3285475327","DE" +"3285475328","3285475623","EU" +"3285475624","3285475647","AT" +"3285475648","3285475703","EU" +"3285475704","3285475711","AT" +"3285475712","3285475775","EU" +"3285475776","3285475783","AT" +"3285475784","3285475807","EU" +"3285475808","3285475823","AT" +"3285475824","3285475903","EU" +"3285475904","3285475951","AT" +"3285475952","3285475967","EU" +"3285475968","3285476031","AT" +"3285476032","3285476351","EU" +"3285476352","3285476607","DE" +"3285476608","3285476735","EU" +"3285476736","3285476863","GB" +"3285476864","3285476895","AT" +"3285476896","3285477023","EU" +"3285477024","3285477087","AT" +"3285477088","3285477151","EU" +"3285477152","3285477343","IT" +"3285477344","3285477359","EU" +"3285477360","3285477375","IT" +"3285477376","3285477919","FR" +"3285477920","3285477951","EU" +"3285477952","3285477983","FR" +"3285477984","3285477999","EU" +"3285478000","3285478655","FR" +"3285478656","3285478911","EU" +"3285478912","3285479391","FR" +"3285479392","3285479399","EU" +"3285479400","3285479407","GB" +"3285479408","3285479423","EU" +"3285479424","3285479807","CH" +"3285479808","3285480447","EU" +"3285480448","3285480575","CH" +"3285480576","3285480719","EU" +"3285480720","3285480767","CH" +"3285480768","3285480775","EU" +"3285480776","3285480895","CH" +"3285480896","3285480959","EU" +"3285480960","3285481215","CH" +"3285481216","3285481471","EU" +"3285481472","3285481727","IT" +"3285481728","3285481743","CH" +"3285481744","3285481751","EU" +"3285481752","3285481791","CH" +"3285481792","3285481983","EU" +"3285481984","3285481999","FR" +"3285482000","3285482007","CY" +"3285482008","3285482087","FR" +"3285482088","3285482095","EU" +"3285482096","3285482239","FR" +"3285482240","3285482495","EU" +"3285482496","3285482527","CH" +"3285482528","3285482751","EU" +"3285482752","3285482783","CH" +"3285482784","3285483007","EU" +"3285483008","3285483519","CH" +"3285483520","3285484543","EU" +"3285484544","3285485055","IE" +"3285485056","3285485103","EU" +"3285485104","3285485119","SK" +"3285485120","3285485639","EU" +"3285485640","3285485647","SK" +"3285485648","3285485727","EU" +"3285485728","3285485743","SK" +"3285485744","3285485751","EU" +"3285485752","3285485759","SK" +"3285485760","3285485799","EU" +"3285485800","3285485815","SK" +"3285485816","3285486591","EU" +"3285486592","3285487103","IT" +"3285487104","3285487359","HU" +"3285487360","3285487375","NL" +"3285487376","3285487423","EU" +"3285487424","3285487487","GB" +"3285487488","3285487615","EU" +"3285487616","3285487679","NL" +"3285487680","3285487743","EU" +"3285487744","3285488127","NL" +"3285488128","3285488639","EU" +"3285488640","3285489663","GB" +"3285489664","3285490175","EU" +"3285490176","3285490319","RU" +"3285490320","3285490335","EU" +"3285490336","3285490463","RU" +"3285490464","3285490495","EU" +"3285490496","3285490519","RU" +"3285490520","3285490527","LT" +"3285490528","3285490535","LV" +"3285490536","3285490543","RU" +"3285490544","3285490559","EU" +"3285490560","3285490687","RU" +"3285490688","3285490943","EU" +"3285490944","3285491007","RU" +"3285491008","3285491455","EU" +"3285491456","3285491711","RU" +"3285491712","3285492223","EU" +"3285492224","3285492479","FR" +"3285492480","3285492687","GB" +"3285492688","3285492695","EU" +"3285492696","3285492735","GB" +"3285492736","3285493759","EU" +"3285493760","3285493775","ES" +"3285493776","3285493791","EU" +"3285493792","3285493887","ES" +"3285493888","3285493951","EU" +"3285493952","3285493983","ES" +"3285493984","3285493999","EU" +"3285494000","3285494015","ES" +"3285494016","3285494079","IT" +"3285494080","3285494111","EU" +"3285494112","3285494783","IT" +"3285494784","3285495807","EU" +"3285495808","3285496319","DE" +"3285496320","3285496383","ES" +"3285496384","3285496447","EU" +"3285496448","3285496471","ES" +"3285496472","3285496495","EU" +"3285496496","3285496527","FR" +"3285496528","3285496543","ES" +"3285496544","3285496575","FR" +"3285496576","3285496607","GB" +"3285496608","3285497855","DE" +"3285497856","3285497887","EU" +"3285497888","3285498079","DE" +"3285498080","3285498095","EU" +"3285498096","3285498111","DE" +"3285498112","3285498367","IT" +"3285498368","3285498623","DE" +"3285498624","3285498655","CH" +"3285498656","3285498663","CY" +"3285498664","3285498671","EU" +"3285498672","3285498687","CH" +"3285498688","3285499391","EU" +"3285499392","3285499455","FR" +"3285499456","3285499487","EU" +"3285499488","3285499647","FR" +"3285499648","3285499903","DE" +"3285499904","3285500159","CZ" +"3285500160","3285500287","EU" +"3285500288","3285500415","CZ" +"3285500416","3285500927","GB" +"3285500928","3285501183","DK" +"3285501184","3285501327","CZ" +"3285501328","3285501335","EU" +"3285501336","3285501343","CZ" +"3285501344","3285501375","GB" +"3285501376","3285501407","CZ" +"3285501408","3285501439","EU" +"3285501440","3285501567","CZ" +"3285501568","3285501727","EU" +"3285501728","3285501759","GB" +"3285501760","3285501775","CZ" +"3285501776","3285502207","EU" +"3285502208","3285502463","CZ" +"3285502464","3285502495","IL" +"3285502496","3285502503","CY" +"3285502504","3285502511","IL" +"3285502512","3285502527","CY" +"3285502528","3285502591","BY" +"3285502592","3285502655","GB" +"3285502656","3285502719","IL" +"3285502720","3285503391","EU" +"3285503392","3285503423","CZ" +"3285503424","3285503487","EU" +"3285503488","3285503551","ES" +"3285503552","3285503743","EU" +"3285503744","3285503999","FI" +"3285504000","3285504511","EU" +"3285504512","3285504607","CZ" +"3285504608","3285505215","EU" +"3285505216","3285505279","CZ" +"3285505280","3285505439","EU" +"3285505440","3285505471","CZ" +"3285505472","3285506047","EU" +"3285506048","3285506079","CZ" +"3285506080","3285507327","EU" +"3285507328","3285507391","GR" +"3285507392","3285507663","EU" +"3285507664","3285507711","CZ" +"3285507712","3285507839","EU" +"3285507840","3285508095","CZ" +"3285508096","3285508607","DE" +"3285508608","3285508623","RU" +"3285508624","3285508639","EU" +"3285508640","3285508671","RU" +"3285508672","3285508735","EU" +"3285508736","3285508863","RU" +"3285508864","3285508871","EU" +"3285508872","3285508927","PT" +"3285508928","3285509119","EU" +"3285509120","3285509247","SE" +"3285509248","3285509279","EU" +"3285509280","3285509311","SE" +"3285509312","3285510015","EU" +"3285510016","3285510047","HU" +"3285510048","3285510111","EU" +"3285510112","3285510143","HU" +"3285510144","3285512191","GB" +"3285512192","3285512319","GR" +"3285512320","3285512383","EU" +"3285512384","3285512511","GR" +"3285512512","3285512575","EU" +"3285512576","3285512719","GR" +"3285512720","3285512767","EU" +"3285512768","3285512831","GR" +"3285512832","3285513215","EU" +"3285513216","3285513223","GB" +"3285513224","3285513231","EU" +"3285513232","3285513247","GR" +"3285513248","3285513279","EU" +"3285513280","3285513343","GR" +"3285513344","3285513727","EU" +"3285513728","3285514239","GR" +"3285514240","3285515263","EU" +"3285515264","3285515519","AT" +"3285515520","3285515791","EU" +"3285515792","3285515803","GR" +"3285515804","3285516159","EU" +"3285516160","3285516191","GR" +"3285516192","3285516223","EU" +"3285516224","3285516287","GR" +"3285516288","3285516543","DK" +"3285516544","3285516671","NO" +"3285516672","3285516687","BE" +"3285516688","3285516691","NL" +"3285516692","3285516695","IT" +"3285516696","3285516703","NL" +"3285516704","3285516719","GB" +"3285516720","3285516735","IL" +"3285516736","3285516799","DE" +"3285516800","3285516927","GB" +"3285516928","3285516991","PL" +"3285516992","3285517023","BE" +"3285517024","3285517055","SE" +"3285517056","3285517215","GB" +"3285517216","3285517247","AT" +"3285517248","3285518335","GB" +"3285518336","3285518351","NL" +"3285518352","3285518367","ES" +"3285518368","3285518463","BE" +"3285518464","3285518591","ES" +"3285518592","3285518847","CH" +"3285518848","3285519103","BE" +"3285519104","3285519359","FR" +"3285519360","3285519615","DE" +"3285519616","3285520127","GB" +"3285520128","3285520383","NL" +"3285520384","3285520527","GB" +"3285520528","3285520543","CH" +"3285520544","3285520575","GB" +"3285520576","3285520639","DE" +"3285520640","3285520767","NL" +"3285520768","3285520895","GB" +"3285520896","3285521167","BE" +"3285521168","3285521407","GB" +"3285521408","3285521695","BE" +"3285521696","3285521791","GB" +"3285521792","3285522175","BE" +"3285522176","3285523071","GB" +"3285523072","3285523079","BE" +"3285523080","3285523087","ES" +"3285523088","3285523199","CH" +"3285523200","3285523231","ZA" +"3285523232","3285523327","BE" +"3285523328","3285523335","FI" +"3285523336","3285523359","BE" +"3285523360","3285523391","GB" +"3285523392","3285523711","FR" +"3285523712","3285523967","CH" +"3285523968","3285524063","GB" +"3285524064","3285524095","LU" +"3285524096","3285524159","ZA" +"3285524160","3285524175","GB" +"3285524176","3285524191","CH" +"3285524192","3285524223","BE" +"3285524224","3285524351","GB" +"3285524352","3285524479","BE" +"3285524480","3285524735","DK" +"3285524736","3285524863","GB" +"3285524864","3285524895","BE" +"3285524896","3285524927","ES" +"3285524928","3285524991","GB" +"3285524992","3285525247","BE" +"3285525248","3285525503","CH" +"3285525504","3285526015","BE" +"3285526016","3285526023","IL" +"3285526024","3285526035","BE" +"3285526036","3285526039","FR" +"3285526040","3285526047","BE" +"3285526048","3285526079","CZ" +"3285526080","3285526143","BE" +"3285526144","3285526175","HU" +"3285526176","3285526383","BE" +"3285526384","3285526399","PT" +"3285526400","3285526527","CH" +"3285526528","3285526783","ES" +"3285526784","3285526815","CH" +"3285526816","3285526847","BE" +"3285526848","3285526911","CH" +"3285526912","3285527295","GB" +"3285527296","3285527423","BE" +"3285527424","3285527427","GB" +"3285527428","3285527431","BE" +"3285527432","3285527439","FR" +"3285527440","3285527455","LU" +"3285527456","3285527487","IL" +"3285527488","3285527495","BE" +"3285527496","3285527503","DE" +"3285527504","3285527519","JP" +"3285527520","3285527551","BE" +"3285527552","3285527615","IL" +"3285527616","3285527679","GB" +"3285527680","3285527807","BE" +"3285527808","3285527811","GB" +"3285527812","3285527815","PL" +"3285527816","3285527855","BE" +"3285527856","3285527871","FR" +"3285527872","3285527967","BE" +"3285527968","3285527999","DE" +"3285528000","3285528319","BE" +"3285528320","3285528447","DE" +"3285528448","3285528575","FR" +"3285528576","3285528799","BE" +"3285528800","3285528831","GB" +"3285528832","3285528847","BE" +"3285528848","3285528863","ZA" +"3285528864","3285528883","BE" +"3285528884","3285528887","FR" +"3285528888","3285528895","BE" +"3285528896","3285528911","GB" +"3285528912","3285528931","BE" +"3285528932","3285528935","FR" +"3285528936","3285528943","BE" +"3285528944","3285529071","GB" +"3285529072","3285529151","BE" +"3285529152","3285529183","DE" +"3285529184","3285529199","NL" +"3285529200","3285529215","IL" +"3285529216","3285529247","CH" +"3285529248","3285529263","GB" +"3285529264","3285529343","BE" +"3285529344","3285529599","IT" +"3285529600","3285529631","NO" +"3285529632","3285529663","IE" +"3285529664","3285529679","LI" +"3285529680","3285529687","FI" +"3285529688","3285529695","IT" +"3285529696","3285529727","BE" +"3285529728","3285529855","GB" +"3285529856","3285529951","LU" +"3285529952","3285529983","GR" +"3285529984","3285529999","CZ" +"3285530000","3285530143","BE" +"3285530144","3285530175","GB" +"3285530176","3285530183","NL" +"3285530184","3285530215","BE" +"3285530216","3285530223","GB" +"3285530224","3285530271","FR" +"3285530272","3285530399","BE" +"3285530400","3285530431","NL" +"3285530432","3285530463","IT" +"3285530464","3285530495","DE" +"3285530496","3285530559","AT" +"3285530560","3285530575","BE" +"3285530576","3285530583","GB" +"3285530584","3285530591","BE" +"3285530592","3285530607","GB" +"3285530608","3285530655","BE" +"3285530656","3285530687","ZA" +"3285530688","3285530719","GB" +"3285530720","3285530723","BE" +"3285530724","3285530727","GB" +"3285530728","3285530735","DE" +"3285530736","3285530739","GB" +"3285530740","3285530743","BE" +"3285530744","3285530751","GB" +"3285530752","3285530767","IT" +"3285530768","3285530783","DE" +"3285530784","3285530815","BE" +"3285530816","3285530831","GB" +"3285530832","3285530879","BE" +"3285530880","3285530911","CH" +"3285530912","3285530975","GB" +"3285530976","3285530983","BE" +"3285530984","3285530991","IE" +"3285530992","3285531007","GB" +"3285531008","3285531023","FR" +"3285531024","3285531039","LU" +"3285531040","3285531071","ES" +"3285531072","3285531103","NL" +"3285531104","3285531119","FR" +"3285531120","3285531263","BE" +"3285531264","3285531311","GB" +"3285531312","3285531327","DK" +"3285531328","3285531343","BE" +"3285531344","3285531351","GB" +"3285531352","3285531355","FR" +"3285531356","3285531359","ES" +"3285531360","3285531367","BE" +"3285531368","3285531375","DE" +"3285531376","3285531383","BE" +"3285531384","3285531391","DE" +"3285531392","3285531423","BE" +"3285531424","3285531455","DE" +"3285531456","3285531495","BE" +"3285531496","3285531503","NL" +"3285531504","3285531519","FR" +"3285531520","3285531535","BE" +"3285531536","3285531551","DE" +"3285531552","3285531567","IL" +"3285531568","3285531615","BE" +"3285531616","3285531647","NL" +"3285531648","3285531903","BE" +"3285531904","3285532159","GB" +"3285532160","3285532223","BE" +"3285532224","3285532231","ES" +"3285532232","3285532415","BE" +"3285532416","3285532687","IT" +"3285532688","3285532703","DE" +"3285532704","3285532711","BE" +"3285532712","3285532719","RU" +"3285532720","3285532735","IT" +"3285532736","3285532799","CH" +"3285532800","3285532831","DE" +"3285532832","3285532847","FI" +"3285532848","3285532863","IT" +"3285532864","3285532895","BE" +"3285532896","3285532959","IT" +"3285532960","3285533039","BE" +"3285533040","3285533047","NL" +"3285533048","3285533055","BE" +"3285533056","3285533059","NL" +"3285533060","3285533087","BE" +"3285533088","3285533103","IT" +"3285533104","3285533119","LU" +"3285533120","3285533127","BE" +"3285533128","3285533135","SE" +"3285533136","3285533151","GB" +"3285533152","3285533183","FR" +"3285533184","3285533311","IT" +"3285533312","3285533343","SE" +"3285533344","3285533367","BE" +"3285533368","3285533375","CH" +"3285533376","3285533471","GB" +"3285533472","3285533503","BE" +"3285533504","3285533519","GB" +"3285533520","3285533535","SE" +"3285533536","3285533543","BE" +"3285533544","3285533551","DE" +"3285533552","3285533567","GB" +"3285533568","3285533951","IT" +"3285533952","3285534079","IL" +"3285534080","3285534095","IT" +"3285534096","3285534111","TR" +"3285534112","3285534143","BE" +"3285534144","3285534207","IT" +"3285534208","3285534463","PT" +"3285534464","3285534479","NL" +"3285534480","3285534527","BE" +"3285534528","3285534559","FR" +"3285534560","3285534591","IT" +"3285534592","3285534627","GB" +"3285534628","3285534639","BE" +"3285534640","3285534655","GB" +"3285534656","3285534719","IT" +"3285534720","3285534751","GB" +"3285534752","3285534767","BE" +"3285534768","3285534783","GB" +"3285534784","3285534799","DK" +"3285534800","3285534815","ES" +"3285534816","3285534831","HU" +"3285534832","3285534927","IE" +"3285534928","3285534943","GB" +"3285534944","3285534975","BE" +"3285534976","3285535103","IT" +"3285535104","3285535123","BE" +"3285535124","3285535127","ES" +"3285535128","3285535131","BE" +"3285535132","3285535135","NL" +"3285535136","3285535139","FR" +"3285535140","3285535143","BE" +"3285535144","3285535147","GR" +"3285535148","3285535151","CZ" +"3285535152","3285535155","SE" +"3285535156","3285535231","BE" +"3285535232","3285535743","NO" +"3285535744","3285535871","IT" +"3285535872","3285535903","FR" +"3285535904","3285535907","DK" +"3285535908","3285535911","NO" +"3285535912","3285535919","BE" +"3285535920","3285535927","NL" +"3285535928","3285535951","BE" +"3285535952","3285535967","GB" +"3285535968","3285535999","BE" +"3285536000","3285536063","GB" +"3285536064","3285536079","BE" +"3285536080","3285536095","IT" +"3285536096","3285536111","GB" +"3285536112","3285536255","BE" +"3285536256","3285536511","GB" +"3285536512","3285536543","LU" +"3285536544","3285536575","DE" +"3285536576","3285536607","IL" +"3285536608","3285536703","BE" +"3285536704","3285536735","GB" +"3285536736","3285536739","IT" +"3285536740","3285536743","GB" +"3285536744","3285536747","DE" +"3285536748","3285536751","AT" +"3285536752","3285536755","BE" +"3285536756","3285536759","IL" +"3285536760","3285536767","BE" +"3285536768","3285536959","DK" +"3285536960","3285536991","ES" +"3285536992","3285537023","GB" +"3285537024","3285537087","IL" +"3285537088","3285537127","GB" +"3285537128","3285537135","BE" +"3285537136","3285537143","DK" +"3285537144","3285537151","GB" +"3285537152","3285537167","DK" +"3285537168","3285537175","CH" +"3285537176","3285537183","BE" +"3285537184","3285537215","DE" +"3285537216","3285537231","GB" +"3285537232","3285537535","BE" +"3285537536","3285537599","RU" +"3285537600","3285537615","FR" +"3285537616","3285537631","BE" +"3285537632","3285537663","SE" +"3285537664","3285537727","DE" +"3285537728","3285537759","IT" +"3285537760","3285537791","LU" +"3285537792","3285537919","NL" +"3285537920","3285538047","LU" +"3285538048","3285538175","NL" +"3285538176","3285538183","DE" +"3285538184","3285538187","LU" +"3285538188","3285538207","BE" +"3285538208","3285538239","LU" +"3285538240","3285538271","NO" +"3285538272","3285538287","FI" +"3285538288","3285538295","CH" +"3285538296","3285538299","BE" +"3285538300","3285538319","GB" +"3285538320","3285538327","LU" +"3285538328","3285538335","BE" +"3285538336","3285538351","GB" +"3285538352","3285538367","LU" +"3285538368","3285538375","BE" +"3285538376","3285538383","AT" +"3285538384","3285538399","BE" +"3285538400","3285538431","DK" +"3285538432","3285538623","BE" +"3285538624","3285538687","LU" +"3285538688","3285538719","BE" +"3285538720","3285538751","DE" +"3285538752","3285538755","IT" +"3285538756","3285538759","FR" +"3285538760","3285538763","IE" +"3285538764","3285538767","BE" +"3285538768","3285538783","CZ" +"3285538784","3285538815","BE" +"3285538816","3285538847","CH" +"3285538848","3285538879","BE" +"3285538880","3285539071","ES" +"3285539072","3285539327","NL" +"3285539328","3285539583","BE" +"3285539584","3285539711","IE" +"3285539712","3285539839","GB" +"3285539840","3285539967","IT" +"3285539968","3285540031","GB" +"3285540032","3285540095","ZA" +"3285540096","3285540103","GB" +"3285540104","3285540107","IT" +"3285540108","3285540111","BE" +"3285540112","3285540127","IL" +"3285540128","3285540159","ZA" +"3285540160","3285540191","FI" +"3285540192","3285540207","CH" +"3285540208","3285540215","IE" +"3285540216","3285540219","BE" +"3285540220","3285540223","ZA" +"3285540224","3285540351","CZ" +"3285540352","3285540415","PT" +"3285540416","3285540423","ZA" +"3285540424","3285540447","BE" +"3285540448","3285540479","DE" +"3285540480","3285540607","NL" +"3285540608","3285540671","BE" +"3285540672","3285540735","DE" +"3285540736","3285540863","BE" +"3285540864","3285540871","FR" +"3285540872","3285540879","BE" +"3285540880","3285541375","FR" +"3285541376","3285541391","GB" +"3285541392","3285541439","FR" +"3285541440","3285541519","GB" +"3285541520","3285541527","BG" +"3285541528","3285541535","BE" +"3285541536","3285541551","FR" +"3285541552","3285541567","BE" +"3285541568","3285541599","GB" +"3285541600","3285541631","BE" +"3285541632","3285541663","ES" +"3285541664","3285541695","FR" +"3285541696","3285541759","BE" +"3285541760","3285541887","FR" +"3285541888","3285541919","GB" +"3285541920","3285541951","FR" +"3285541952","3285542079","DE" +"3285542080","3285542143","FR" +"3285542144","3285542399","BE" +"3285542400","3285542655","GB" +"3285542656","3285542911","ZA" +"3285542912","3285543167","IT" +"3285543168","3285543423","NL" +"3285543424","3285543679","SE" +"3285543680","3285543743","AT" +"3285543744","3285543759","FR" +"3285543760","3285543775","BE" +"3285543776","3285543791","IT" +"3285543792","3285543795","ES" +"3285543796","3285543799","BE" +"3285543800","3285543807","FR" +"3285543808","3285543871","NL" +"3285543872","3285543935","FR" +"3285543936","3285544191","BE" +"3285544192","3285544255","IL" +"3285544256","3285544319","DE" +"3285544320","3285544335","ES" +"3285544336","3285544351","NL" +"3285544352","3285544383","BE" +"3285544384","3285544479","FR" +"3285544480","3285544511","ES" +"3285544512","3285544639","FR" +"3285544640","3285544703","BE" +"3285544704","3285544959","FR" +"3285544960","3285545215","EU" +"3285545216","3285545343","BE" +"3285545344","3285545379","GB" +"3285545380","3285545471","BE" +"3285545472","3285545727","SE" +"3285545728","3285545983","FI" +"3285545984","3285545999","IT" +"3285546000","3285546007","BE" +"3285546008","3285546015","IT" +"3285546016","3285546063","ES" +"3285546064","3285546071","IT" +"3285546072","3285546111","ES" +"3285546112","3285546239","AT" +"3285546240","3285546367","ZA" +"3285546368","3285546495","FR" +"3285546496","3285546559","NL" +"3285546560","3285546623","BE" +"3285546624","3285546671","FR" +"3285546672","3285546687","SE" +"3285546688","3285546751","GB" +"3285546752","3285547007","DK" +"3285547008","3285547023","AT" +"3285547024","3285547039","FR" +"3285547040","3285547071","AT" +"3285547072","3285547135","AU" +"3285547136","3285547167","RU" +"3285547168","3285547199","LU" +"3285547200","3285547263","SE" +"3285547264","3285547519","LU" +"3285547520","3285547775","NL" +"3285547776","3285547903","ES" +"3285547904","3285548031","BE" +"3285548032","3285548287","FR" +"3285548288","3285548543","DE" +"3285548544","3285548607","FR" +"3285548608","3285548639","LI" +"3285548640","3285548647","BE" +"3285548648","3285548655","LI" +"3285548656","3285548735","GB" +"3285548736","3285548767","BE" +"3285548768","3285548799","LU" +"3285548800","3285548831","IT" +"3285548832","3285548839","GB" +"3285548840","3285548847","IL" +"3285548848","3285548959","IT" +"3285548960","3285549023","FR" +"3285549024","3285549039","PT" +"3285549040","3285549055","FR" +"3285549056","3285549183","DE" +"3285549184","3285549215","BE" +"3285549216","3285549247","CH" +"3285549248","3285549279","DE" +"3285549280","3285549311","GB" +"3285549312","3285549695","DE" +"3285549696","3285549719","BE" +"3285549720","3285549727","GB" +"3285549728","3285549735","SE" +"3285549736","3285549767","BE" +"3285549768","3285549775","FI" +"3285549776","3285549791","DE" +"3285549792","3285549823","LU" +"3285549824","3285549871","DE" +"3285549872","3285549887","DK" +"3285549888","3285549951","DE" +"3285549952","3285550335","BE" +"3285550336","3285550463","GB" +"3285550464","3285550527","DE" +"3285550528","3285550591","IT" +"3285550592","3285550847","FR" +"3285550848","3285550943","IT" +"3285550944","3285550975","NL" +"3285550976","3285551007","BE" +"3285551008","3285551039","CH" +"3285551040","3285551071","DE" +"3285551072","3285551103","BE" +"3285551104","3285551359","DE" +"3285551360","3285551391","BE" +"3285551392","3285551423","DE" +"3285551424","3285551487","DK" +"3285551488","3285551551","BE" +"3285551552","3285551615","DE" +"3285551616","3285551647","GB" +"3285551648","3285551679","FR" +"3285551680","3285551807","GB" +"3285551808","3285551839","RU" +"3285551840","3285552127","BE" +"3285552128","3285552191","DE" +"3285552192","3285552255","ZA" +"3285552256","3285552287","CZ" +"3285552288","3285552319","HU" +"3285552320","3285552383","GB" +"3285552384","3285552511","DE" +"3285552512","3285552639","GB" +"3285552640","3285552927","DE" +"3285552928","3285552959","BE" +"3285552960","3285553023","FR" +"3285553024","3285553039","BE" +"3285553040","3285553055","EG" +"3285553056","3285553087","BE" +"3285553088","3285553151","IT" +"3285553152","3285553215","DE" +"3285553216","3285553247","BE" +"3285553248","3285553263","PL" +"3285553264","3285553727","DE" +"3285553728","3285553759","CH" +"3285553760","3285553767","GB" +"3285553768","3285553775","ZA" +"3285553776","3285553791","FR" +"3285553792","3285553855","BE" +"3285553856","3285553887","ZA" +"3285553888","3285553919","DE" +"3285553920","3285554047","CH" +"3285554048","3285554127","DE" +"3285554128","3285554143","BE" +"3285554144","3285554175","GB" +"3285554176","3285554431","AT" +"3285554432","3285554687","BE" +"3285554688","3285554703","DE" +"3285554704","3285554719","BE" +"3285554720","3285554751","FR" +"3285554752","3285554815","BE" +"3285554816","3285554943","CH" +"3285554944","3285555199","LU" +"3285555200","3285555231","AT" +"3285555232","3285555263","NL" +"3285555264","3285555327","FR" +"3285555328","3285555455","IL" +"3285555456","3285555711","BE" +"3285555712","3285555967","LU" +"3285555968","3285556223","IT" +"3285556224","3285556479","BE" +"3285556480","3285556735","DE" +"3285556736","3285556767","CH" +"3285556768","3285556775","BE" +"3285556776","3285556779","NL" +"3285556780","3285556799","BE" +"3285556800","3285556863","DE" +"3285556864","3285556991","BE" +"3285556992","3285557055","GB" +"3285557056","3285557119","NL" +"3285557120","3285557247","DE" +"3285557248","3285557363","NL" +"3285557364","3285557375","BE" +"3285557376","3285557519","NL" +"3285557520","3285557535","FI" +"3285557536","3285557575","NL" +"3285557576","3285557579","SE" +"3285557580","3285557583","BE" +"3285557584","3285557599","NL" +"3285557600","3285557631","BE" +"3285557632","3285557791","NL" +"3285557792","3285557823","NO" +"3285557824","3285557887","SE" +"3285557888","3285557911","CH" +"3285557912","3285557919","CZ" +"3285557920","3285557951","FR" +"3285557952","3285558015","DE" +"3285558016","3285558271","NL" +"3285558272","3285558463","BE" +"3285558464","3285558591","NL" +"3285558592","3285558655","BE" +"3285558656","3285558783","IT" +"3285558784","3285559039","GB" +"3285559040","3285559167","BE" +"3285559168","3285559231","NL" +"3285559232","3285559295","BE" +"3285559296","3285559807","SE" +"3285559808","3285559839","IE" +"3285559840","3285559871","CH" +"3285559872","3285559887","BE" +"3285559888","3285559903","SE" +"3285559904","3285559919","NL" +"3285559920","3285559935","SE" +"3285559936","3285560063","NO" +"3285560064","3285560351","SE" +"3285560352","3285560383","ES" +"3285560384","3285560447","SE" +"3285560448","3285560479","LI" +"3285560480","3285560511","CH" +"3285560512","3285560575","BE" +"3285560576","3285560831","DE" +"3285560832","3285561215","SE" +"3285561216","3285561343","NO" +"3285561344","3285561407","GB" +"3285561408","3285561471","PL" +"3285561472","3285561599","DK" +"3285561600","3285561619","NO" +"3285561620","3285561623","DE" +"3285561624","3285561647","BE" +"3285561648","3285561663","NO" +"3285561664","3285561727","BE" +"3285561728","3285561791","NO" +"3285561792","3285561919","BE" +"3285561920","3285561951","CH" +"3285561952","3285561967","NO" +"3285561968","3285561983","BE" +"3285561984","3285562111","FI" +"3285562112","3285562367","NO" +"3285562368","3285562751","FI" +"3285562752","3285562783","NL" +"3285562784","3285562815","BE" +"3285562816","3285562879","IT" +"3285562880","3285562911","FI" +"3285562912","3285562943","BE" +"3285562944","3285562975","DE" +"3285562976","3285562991","FI" +"3285562992","3285562999","BE" +"3285563000","3285563007","GB" +"3285563008","3285563135","SE" +"3285563136","3285563391","FI" +"3285563392","3285563455","BE" +"3285563456","3285563471","NL" +"3285563472","3285563487","BE" +"3285563488","3285563519","SE" +"3285563520","3285563647","PL" +"3285563648","3285563903","CH" +"3285563904","3285564031","SE" +"3285564032","3285564159","FI" +"3285564160","3285564415","GB" +"3285564416","3285564511","CH" +"3285564512","3285564543","NO" +"3285564544","3285564671","BE" +"3285564672","3285564735","CH" +"3285564736","3285564751","FR" +"3285564752","3285564767","BE" +"3285564768","3285564799","SE" +"3285564800","3285564927","BE" +"3285564928","3285565183","FR" +"3285565184","3285565439","NL" +"3285565440","3285565951","GB" +"3285565952","3285566015","FR" +"3285566016","3285566031","IT" +"3285566032","3285566047","BE" +"3285566048","3285566079","CH" +"3285566080","3285566143","FR" +"3285566144","3285566207","BE" +"3285566208","3285566495","RU" +"3285566496","3285566511","SE" +"3285566512","3285566527","FI" +"3285566528","3285566559","CH" +"3285566560","3285566575","BE" +"3285566576","3285566591","CH" +"3285566592","3285566655","NL" +"3285566656","3285566847","BE" +"3285566848","3285566975","FR" +"3285566976","3285567231","GB" +"3285567232","3285567487","PT" +"3285567488","3285568511","NL" +"3285568512","3285568671","DE" +"3285568672","3285568703","CH" +"3285568704","3285568751","BE" +"3285568752","3285569023","DE" +"3285569024","3285569407","BE" +"3285569408","3285569535","GB" +"3285569536","3285569791","DE" +"3285569792","3285570047","FI" +"3285570048","3285570175","FR" +"3285570176","3285570207","BE" +"3285570208","3285570223","PL" +"3285570224","3285570239","NL" +"3285570240","3285570559","BE" +"3285570560","3285570815","SE" +"3285570816","3285571071","IT" +"3285571072","3285571327","DE" +"3285571328","3285571583","FI" +"3285571584","3285571711","FR" +"3285571712","3285571775","SE" +"3285571776","3285571807","BE" +"3285571808","3285571839","DE" +"3285571840","3285571903","BE" +"3285571904","3285571967","SE" +"3285571968","3285572095","BE" +"3285572096","3285572223","DE" +"3285572224","3285572335","BE" +"3285572336","3285572351","ES" +"3285572352","3285572367","IR" +"3285572368","3285572383","ES" +"3285572384","3285572447","BE" +"3285572448","3285572479","CH" +"3285572480","3285572607","FR" +"3285572608","3285572863","DK" +"3285572864","3285573119","IT" +"3285573120","3285573375","SE" +"3285573376","3285573535","BE" +"3285573536","3285573567","CH" +"3285573568","3285573631","FR" +"3285573632","3285573887","NL" +"3285573888","3285573951","IL" +"3285573952","3285574143","BE" +"3285574144","3285574399","RU" +"3285574400","3285574655","IL" +"3285574656","3285574911","GB" +"3285574912","3285575167","EU" +"3285575168","3285575423","ES" +"3285575424","3285575679","IL" +"3285575680","3285575935","BE" +"3285575936","3285575999","DK" +"3285576000","3285576063","BE" +"3285576064","3285576127","FR" +"3285576128","3285576159","BE" +"3285576160","3285576191","DK" +"3285576192","3285576447","BE" +"3285576448","3285576703","CZ" +"3285576704","3285576959","HU" +"3285576960","3285577215","BE" +"3285577216","3285577471","ZA" +"3285577472","3285577599","IT" +"3285577600","3285577983","BE" +"3285577984","3285578111","IT" +"3285578112","3285578239","DE" +"3285578240","3285578367","BE" +"3285578368","3285578431","FR" +"3285578432","3285578495","BE" +"3285578496","3285578751","DE" +"3285578752","3285579007","BE" +"3285579008","3285579519","ES" +"3285579520","3285579775","FR" +"3285579776","3285580031","US" +"3285580032","3285580287","HU" +"3285580288","3285580415","DE" +"3285580416","3285580543","BE" +"3285580544","3285580547","NL" +"3285580548","3285580651","BE" +"3285580652","3285580655","SE" +"3285580656","3285580799","BE" +"3285580800","3285580831","SE" +"3285580832","3285580847","PL" +"3285580848","3285580927","BE" +"3285580928","3285581055","ZA" +"3285581056","3285581503","BE" +"3285581504","3285581567","AT" +"3285581568","3285581599","FR" +"3285581600","3285581615","GB" +"3285581616","3285581695","FR" +"3285581696","3285581759","LV" +"3285581760","3285581823","FR" +"3285581824","3285595135","DE" +"3285595136","3285595167","CZ" +"3285595168","3285595175","US" +"3285595176","3285595263","DE" +"3285595264","3285595423","US" +"3285595424","3285596159","DE" +"3285596160","3285596191","US" +"3285596192","3285596223","DE" +"3285596224","3285596255","US" +"3285596256","3285596287","DE" +"3285596288","3285596319","US" +"3285596320","3285596351","DE" +"3285596352","3285596383","FR" +"3285596384","3285597183","DE" +"3285597184","3285597215","US" +"3285597216","3285606399","DE" +"3285606400","3285614591","GB" +"3285614592","3285630975","TR" +"3285630976","3285633023","UA" +"3285633024","3285635071","NO" +"3285635072","3285637119","UA" +"3285637120","3285638143","DE" +"3285638144","3285639167","UA" +"3285639168","3285641215","FR" +"3285641216","3285642239","RU" +"3285642240","3285643263","UA" +"3285643264","3285645311","FR" +"3285645312","3285647359","BG" +"3285647360","3285712895","DK" +"3285712896","3285721087","GB" +"3285721088","3285729279","SE" +"3285729280","3285734143","CH" +"3285734144","3285734159","GB" +"3285734160","3285734335","CH" +"3285734336","3285734351","LI" +"3285734352","3285734399","CH" +"3285734400","3285734655","LI" +"3285734656","3285737471","CH" +"3285737472","3285745663","PL" +"3285745664","3285753855","IT" +"3285753856","3285762047","LV" +"3285762048","3285762559","FR" +"3285762560","3285763071","RU" +"3285763072","3285763583","GB" +"3285763584","3285764095","DE" +"3285764096","3285765119","RU" +"3285765120","3285766143","UA" +"3285766144","3285766655","DE" +"3285766656","3285767679","UA" +"3285767680","3285768191","FR" +"3285768192","3285768703","RU" +"3285768704","3285768959","RO" +"3285768960","3285769215","PL" +"3285769216","3285769727","DE" +"3285769728","3285770239","RO" +"3285770240","3285770495","NL" +"3285770496","3285770751","US" +"3285770752","3285771007","UA" +"3285771008","3285771263","CH" +"3285771264","3285771519","BG" +"3285771520","3285771775","AT" +"3285771776","3285772031","RO" +"3285772032","3285772287","SE" +"3285772288","3285772543","TR" +"3285772544","3285772799","LT" +"3285772800","3285773055","MT" +"3285773056","3285773311","DE" +"3285773312","3285773567","LV" +"3285773568","3285773823","KG" +"3285773824","3285774079","RU" +"3285774080","3285774335","RO" +"3285774336","3285774591","CZ" +"3285774592","3285774847","RU" +"3285774848","3285775103","FR" +"3285775104","3285775359","GB" +"3285775360","3285775615","RU" +"3285775616","3285775871","NG" +"3285775872","3285776127","NL" +"3285776128","3285776383","RO" +"3285776384","3285776639","UA" +"3285776640","3285776895","FR" +"3285776896","3285777151","PL" +"3285777152","3285777407","HU" +"3285777408","3285777663","IL" +"3285777664","3285777919","SI" +"3285777920","3285778175","PL" +"3285778176","3285778431","DE" +"3285778432","3285843967","GB" +"3285843968","3285852159","LU" +"3285852160","3285860351","GB" +"3285860352","3285868543","FI" +"3285868544","3285876735","IE" +"3285876736","3285909503","RU" +"3285909504","3285910271","GB" +"3285910272","3285910303","ES" +"3285910304","3285910335","GB" +"3285910336","3285910399","ES" +"3285910400","3285910407","IT" +"3285910408","3285910431","GB" +"3285910432","3285910463","NG" +"3285910464","3285910527","ES" +"3285910528","3285911551","GB" +"3285911552","3285912575","EU" +"3285912576","3285913087","GB" +"3285913088","3285913215","ES" +"3285913216","3285913279","GB" +"3285913280","3285913343","ES" +"3285913344","3285913599","GB" +"3285913600","3285915647","EU" +"3285915648","3285915903","GB" +"3285915904","3285916159","AT" +"3285916160","3285916415","FR" +"3285916416","3285916671","YE" +"3285916672","3285916703","BH" +"3285916704","3285916711","DE" +"3285916712","3285916719","CY" +"3285916720","3285916735","ES" +"3285916736","3285916831","GB" +"3285916832","3285916845","DE" +"3285916846","3285916847","EU" +"3285916848","3285916855","IT" +"3285916856","3285916863","GB" +"3285916864","3285916927","EU" +"3285916928","3285917183","GB" +"3285917184","3285917439","ES" +"3285917440","3285917695","YE" +"3285917696","3285918719","EU" +"3285918720","3285918975","SE" +"3285918976","3285919231","YE" +"3285919232","3285919487","GB" +"3285919488","3285919743","UA" +"3285919744","3285921791","QA" +"3285921792","3285921823","CZ" +"3285921824","3285922111","GB" +"3285922112","3285922175","FR" +"3285922176","3285922183","GB" +"3285922184","3285922191","RU" +"3285922192","3285922207","DE" +"3285922208","3285922239","ES" +"3285922240","3285922303","RU" +"3285922304","3285922559","DE" +"3285922560","3285922815","GB" +"3285922816","3285923327","KW" +"3285923328","3285924415","ES" +"3285924416","3285924431","DE" +"3285924432","3285924479","GB" +"3285924480","3285924863","ES" +"3285924864","3285925887","EU" +"3285925888","3285926143","NL" +"3285926144","3285926399","YE" +"3285926400","3285926407","GB" +"3285926408","3285926415","ES" +"3285926416","3285926431","GB" +"3285926432","3285926463","CH" +"3285926464","3285926527","GB" +"3285926528","3285926591","EU" +"3285926592","3285926623","FR" +"3285926624","3285926631","US" +"3285926632","3285926687","GB" +"3285926688","3285926719","IN" +"3285926720","3285926783","EU" +"3285926784","3285926911","GB" +"3285926912","3285927423","DE" +"3285927424","3285927679","GB" +"3285927680","3285927935","IR" +"3285927936","3285927975","GB" +"3285927976","3285927983","EU" +"3285927984","3285927999","GB" +"3285928000","3285928063","EU" +"3285928064","3285928191","ES" +"3285928192","3285928207","PL" +"3285928208","3285928223","GB" +"3285928224","3285928255","DE" +"3285928256","3285928271","GB" +"3285928272","3285928287","DE" +"3285928288","3285928351","GB" +"3285928352","3285928447","EU" +"3285928448","3285928959","ES" +"3285928960","3285929983","EU" +"3285929984","3285930559","GB" +"3285930560","3285930575","ES" +"3285930576","3285930623","GB" +"3285930624","3285930631","BE" +"3285930632","3285930639","GB" +"3285930640","3285930655","ES" +"3285930656","3285930671","NL" +"3285930672","3285930679","BE" +"3285930680","3285930687","DE" +"3285930688","3285931007","GB" +"3285931008","3285932031","EU" +"3285932032","3285932287","NL" +"3285932288","3285932799","GB" +"3285932800","3285933055","ES" +"3285933056","3285933311","DE" +"3285933312","3285933567","ES" +"3285933568","3285934079","DE" +"3285934080","3285934591","GB" +"3285934592","3285934847","ES" +"3285934848","3285935647","GB" +"3285935648","3285935871","EU" +"3285935872","3285936127","GB" +"3285936128","3285938175","EU" +"3285938176","3285938431","ES" +"3285938432","3285938463","GB" +"3285938464","3285938559","EU" +"3285938560","3285938607","GB" +"3285938608","3285938623","FR" +"3285938624","3285938631","NG" +"3285938632","3285938639","ES" +"3285938640","3285938655","GB" +"3285938656","3285938687","DE" +"3285938688","3285938943","ES" +"3285938944","3285938951","NG" +"3285938952","3285938959","NL" +"3285938960","3285938975","US" +"3285938976","3285939071","ES" +"3285939072","3285939087","GB" +"3285939088","3285939103","FR" +"3285939104","3285939199","EU" +"3285939200","3285939711","ES" +"3285939712","3285939743","GB" +"3285939744","3285940223","EU" +"3285940224","3285940479","ES" +"3285940480","3285941247","GB" +"3285941248","3285941759","EU" +"3285941760","3285942287","GB" +"3285942288","3285942303","NL" +"3285942304","3285942527","EU" +"3285942528","3285942783","PT" +"3285942784","3285943039","ES" +"3285943040","3285943295","SE" +"3285943296","3285943551","ES" +"3285943552","3285943567","GB" +"3285943568","3285943575","ES" +"3285943576","3285943583","DE" +"3285943584","3285943647","GB" +"3285943648","3285943679","NG" +"3285943680","3285944319","GB" +"3285944320","3285944831","US" +"3285944832","3285945343","DK" +"3285945344","3285945599","ES" +"3285945600","3285945631","GB" +"3285945632","3285945663","EU" +"3285945664","3285945695","FR" +"3285945696","3285945759","GB" +"3285945760","3285945855","EU" +"3285945856","3285946111","GB" +"3285946112","3285946367","ES" +"3285946368","3285946879","GB" +"3285946880","3285947391","NL" +"3285947392","3285947647","DE" +"3285947648","3285947903","ES" +"3285947904","3285948159","NL" +"3285948160","3285948671","GB" +"3285948672","3285948927","SA" +"3285948928","3285949183","NG" +"3285949184","3285949439","ES" +"3285949440","3285949695","DE" +"3285949696","3285949823","ES" +"3285949824","3285949855","EU" +"3285949856","3285949887","ES" +"3285949888","3285949919","GB" +"3285949920","3285949951","EU" +"3285949952","3285950463","ES" +"3285950464","3285950719","GB" +"3285950720","3285950783","US" +"3285950784","3285950815","GB" +"3285950816","3285950943","EU" +"3285950944","3285950975","GB" +"3285950976","3285951231","NL" +"3285951232","3285951487","IT" +"3285951488","3285951519","GB" +"3285951520","3285951615","EU" +"3285951616","3285951647","GB" +"3285951648","3285951679","ES" +"3285951680","3285951711","GB" +"3285951712","3285951743","EU" +"3285951744","3285951999","GB" +"3285952000","3285952255","IT" +"3285952256","3285952511","SA" +"3285952512","3285953535","CA" +"3285953536","3285954047","PK" +"3285954048","3285954559","GB" +"3285954560","3285954815","SA" +"3285954816","3285955583","GB" +"3285955584","3285955839","DE" +"3285955840","3285956095","ES" +"3285956096","3285956351","FR" +"3285956352","3285956607","DE" +"3285956608","3285956863","GB" +"3285956864","3285957631","PT" +"3285957632","3285957887","PL" +"3285957888","3285958143","GB" +"3285958144","3285958399","DE" +"3285958400","3285958655","NL" +"3285958656","3285958687","GB" +"3285958688","3285958783","EU" +"3285958784","3285958815","GB" +"3285958816","3285958847","EU" +"3285958848","3285958895","NL" +"3285958896","3285959039","GB" +"3285959040","3285959167","DE" +"3285959168","3285959423","NL" +"3285959424","3285959935","GB" +"3285959936","3285960191","ES" +"3285960192","3285960447","FR" +"3285960448","3285960703","GB" +"3285960704","3285961727","CA" +"3285961728","3285961983","NL" +"3285961984","3285962495","ES" +"3285962496","3285963775","DE" +"3285963776","3285964287","GB" +"3285964288","3285964799","FR" +"3285964800","3285966335","GB" +"3285966336","3285966847","EU" +"3285966848","3285967103","FR" +"3285967104","3285967359","PL" +"3285967360","3285967615","ES" +"3285967616","3285968383","BE" +"3285968384","3285968639","ES" +"3285968640","3285968895","PL" +"3285968896","3285970943","CA" +"3285970944","3285971007","EU" +"3285971008","3285971039","GB" +"3285971040","3285971167","EU" +"3285971168","3285971199","GB" +"3285971200","3285971455","FR" +"3285971456","3285971711","DE" +"3285971712","3285971967","GB" +"3285971968","3285972223","ES" +"3285972224","3285972479","GB" +"3285972480","3285972735","PL" +"3285972736","3285972991","FR" +"3285972992","3285973095","GB" +"3285973096","3285973247","EU" +"3285973248","3285973767","GB" +"3285973768","3285973791","EU" +"3285973792","3285973823","GB" +"3285973824","3285974015","EU" +"3285974016","3285975039","GB" +"3285975040","3286013695","FR" +"3286013696","3286013951","RE" +"3286013952","3286106111","FR" +"3286106112","3286106687","EE" +"3286106688","3286106689","FI" +"3286106690","3286114303","EE" +"3286114304","3286122495","BA" +"3286122496","3286130687","BY" +"3286130688","3286131711","RS" +"3286131712","3286132735","PL" +"3286132736","3286133759","RO" +"3286133760","3286134783","IE" +"3286134784","3286135807","PL" +"3286135808","3286136831","NL" +"3286136832","3286137855","AT" +"3286137856","3286138879","UA" +"3286138880","3286155263","RU" +"3286155264","3286171647","DE" +"3286171648","3286237183","IT" +"3286237184","3286243583","GB" +"3286243584","3286243839","US" +"3286243840","3286245887","GB" +"3286245888","3286246143","US" +"3286246144","3286254167","GB" +"3286254168","3286254175","NL" +"3286254176","3286264879","GB" +"3286264880","3286264895","NL" +"3286264896","3286279423","GB" +"3286279424","3286279679","US" +"3286279680","3286291807","GB" +"3286291808","3286291823","US" +"3286291824","3286302719","GB" +"3286302720","3286310911","NO" +"3286310912","3286311423","CH" +"3286311424","3286311935","NL" +"3286311936","3286312447","PL" +"3286312448","3286312959","RU" +"3286312960","3286313983","RO" +"3286313984","3286314495","CH" +"3286314496","3286315007","IL" +"3286315008","3286315519","UA" +"3286315520","3286315775","SI" +"3286315776","3286316031","BG" +"3286316032","3286316543","UA" +"3286316544","3286317055","NL" +"3286317056","3286317567","RU" +"3286317568","3286318079","RO" +"3286318080","3286318591","CH" +"3286318592","3286319103","A2" +"3286319104","3286320127","RO" +"3286320128","3286321151","PL" +"3286321152","3286322175","CZ" +"3286322176","3286323199","PL" +"3286323200","3286324223","GB" +"3286324224","3286325247","RO" +"3286325248","3286326271","DK" +"3286326272","3286327295","PL" +"3286327296","3286329343","NL" +"3286329344","3286330367","DE" +"3286331392","3286332415","UA" +"3286332416","3286333439","CH" +"3286333440","3286334463","PL" +"3286334464","3286335487","BG" +"3286335488","3286336511","RU" +"3286336512","3286337535","DE" +"3286337536","3286338559","PL" +"3286338560","3286339583","RO" +"3286339584","3286340607","UA" +"3286340608","3286342655","DE" +"3286342656","3286343679","UA" +"3286343680","3286344703","RU" +"3286344704","3286345727","BE" +"3286345728","3286346751","IT" +"3286346752","3286347775","UA" +"3286347776","3286348799","PA" +"3286348800","3286349823","PL" +"3286349824","3286350847","SE" +"3286350848","3286351871","GB" +"3286351872","3286352895","CH" +"3286352896","3286353919","DE" +"3286353920","3286354943","LI" +"3286354944","3286355967","FR" +"3286355968","3286356991","DE" +"3286356992","3286358015","PL" +"3286358016","3286359039","GB" +"3286359040","3286360063","PT" +"3286360064","3286361087","IT" +"3286361088","3286362111","UA" +"3286362112","3286363135","RU" +"3286363136","3286364159","AT" +"3286364160","3286365183","DE" +"3286365184","3286367231","PL" +"3286367232","3286368255","BG" +"3286368256","3286376447","CH" +"3286376448","3286384639","GB" +"3286384640","3286397607","DE" +"3286397608","3286397615","A2" +"3286397616","3286401023","DE" +"3286401024","3286409215","GB" +"3286409216","3286417407","DE" +"3286417408","3286417663","UA" +"3286417664","3286417919","IT" +"3286417920","3286418175","DE" +"3286418176","3286418431","AT" +"3286418432","3286418687","TR" +"3286418688","3286418943","UA" +"3286418944","3286419199","PL" +"3286419200","3286419455","DK" +"3286419456","3286419711","DE" +"3286419712","3286419967","GB" +"3286419968","3286420223","FI" +"3286420224","3286420735","RU" +"3286420736","3286420991","NL" +"3286420992","3286421247","RO" +"3286421248","3286421503","PL" +"3286421504","3286421759","KZ" +"3286421760","3286422015","RU" +"3286422016","3286422271","MD" +"3286422272","3286422527","FR" +"3286422528","3286422783","RO" +"3286422784","3286423039","UA" +"3286423040","3286423295","RO" +"3286423296","3286423551","UA" +"3286423552","3286423807","RU" +"3286423808","3286424063","CZ" +"3286424064","3286424319","LV" +"3286424320","3286424575","FR" +"3286424576","3286424831","RU" +"3286424832","3286425087","TR" +"3286425088","3286425343","RU" +"3286425344","3286425599","IT" +"3286425600","3286426367","KW" +"3286426368","3286426623","US" +"3286426624","3286433791","KW" +"3286433792","3286499327","DE" +"3286499328","3286519039","HU" +"3286519040","3286519295","RO" +"3286519296","3286564863","HU" +"3286564864","3286566143","AE" +"3286566144","3286566271","TZ" +"3286566272","3286566655","AE" +"3286566656","3286566911","KW" +"3286566912","3286567167","US" +"3286567168","3286567423","KW" +"3286567424","3286568191","AE" +"3286568192","3286568703","US" +"3286568704","3286571007","AE" +"3286571008","3286571263","KW" +"3286571264","3286571519","US" +"3286571520","3286571775","KW" +"3286571776","3286630399","AE" +"3286630400","3286638591","BG" +"3286638592","3286646783","AT" +"3286646784","3286654975","RU" +"3286654976","3286655231","UA" +"3286655232","3286655487","KZ" +"3286655488","3286655743","LT" +"3286655744","3286655999","RU" +"3286656000","3286656255","CH" +"3286656256","3286656511","RU" +"3286656512","3286656767","GR" +"3286656768","3286657023","UA" +"3286657024","3286657279","BE" +"3286657280","3286657535","ES" +"3286657536","3286657791","HU" +"3286657792","3286658047","RU" +"3286658048","3286658303","US" +"3286658304","3286658559","RU" +"3286658560","3286658815","NL" +"3286658816","3286659071","RU" +"3286659072","3286659327","UA" +"3286659328","3286659583","PL" +"3286659584","3286659839","DE" +"3286659840","3286660095","UA" +"3286660096","3286660351","DE" +"3286660352","3286660607","CH" +"3286660608","3286660863","GB" +"3286660864","3286661119","UA" +"3286661120","3286661375","PL" +"3286661376","3286661631","SI" +"3286661632","3286661887","GB" +"3286661888","3286662143","RU" +"3286662144","3286662399","SK" +"3286662400","3286662655","UA" +"3286662656","3286662911","DE" +"3286662912","3286671359","UA" +"3286671360","3286679551","AT" +"3286679552","3286681631","IT" +"3286681632","3286681647","DE" +"3286681648","3286681651","IT" +"3286681652","3286681655","TN" +"3286681656","3286681659","IT" +"3286681660","3286681663","ES" +"3286681664","3286681695","FR" +"3286681696","3286681699","ES" +"3286681700","3286681711","IT" +"3286681712","3286681727","CH" +"3286681728","3286681743","HK" +"3286681744","3286681751","ES" +"3286681752","3286681767","IT" +"3286681768","3286681775","DE" +"3286681776","3286681815","IT" +"3286681816","3286681823","FR" +"3286681824","3286682463","IT" +"3286682464","3286682495","RO" +"3286682496","3286682623","IT" +"3286682624","3286682879","SM" +"3286682880","3286695935","IT" +"3286695936","3286761471","DK" +"3286761472","3286761727","DE" +"3286761728","3286769663","GB" +"3286769664","3286769919","DE" +"3286769920","3286773759","GB" +"3286773760","3286777855","DE" +"3286777856","3286781951","FR" +"3286781952","3286782207","GB" +"3286782208","3286782463","DE" +"3286782464","3286782535","GB" +"3286782536","3286782543","FR" +"3286782544","3286782575","GB" +"3286782576","3286782583","DE" +"3286782584","3286783599","GB" +"3286783600","3286783615","CH" +"3286783616","3286783679","DE" +"3286783680","3286784511","GB" +"3286784512","3286784767","CH" +"3286784768","3286785023","DE" +"3286785024","3286787071","GB" +"3286787072","3286787327","FR" +"3286787328","3286787583","DE" +"3286787584","3286788095","GB" +"3286788096","3286788351","DE" +"3286788352","3286788607","FR" +"3286788608","3286789119","GB" +"3286789120","3286789631","DE" +"3286789632","3286790143","FR" +"3286790144","3286790655","GB" +"3286790656","3286790911","DE" +"3286790912","3286791679","GB" +"3286791680","3286791935","AT" +"3286791936","3286794239","GB" +"3286794240","3286888447","DE" +"3286888448","3286889471","IE" +"3286889472","3286892543","DE" +"3286892544","3286893055","LI" +"3286893056","3286893567","RU" +"3286893568","3286894591","UA" +"3286894592","3286895103","PL" +"3286895104","3286895615","GB" +"3286895616","3286896127","DE" +"3286896128","3286896639","SE" +"3286896640","3286897151","PL" +"3286897152","3286897663","AT" +"3286897664","3286898175","PL" +"3286898176","3286898687","HR" +"3286898688","3286899199","EU" +"3286899200","3286899711","IL" +"3286899712","3286900223","DE" +"3286900224","3286900735","RO" +"3286900736","3286900991","BE" +"3286900992","3286901503","DE" +"3286901504","3286902015","FR" +"3286902016","3286902527","CH" +"3286902528","3286902783","GB" +"3286902784","3286903039","PL" +"3286903040","3286903551","FR" +"3286903552","3286903807","CH" +"3286903808","3286904063","AT" +"3286904064","3286904319","BE" +"3286904320","3286904575","FR" +"3286904576","3286904831","PT" +"3286904832","3286905087","GB" +"3286905088","3286905343","GR" +"3286905344","3286905599","DE" +"3286905600","3286905855","MT" +"3286905856","3286906111","TR" +"3286906112","3286906367","BE" +"3286906368","3286906879","RO" +"3286906880","3286907135","RU" +"3286907136","3286907391","SE" +"3286907392","3286907647","AT" +"3286907648","3286907903","ES" +"3286907904","3286908159","CH" +"3286908160","3286908415","ES" +"3286908416","3286908671","FR" +"3286908672","3286908927","PL" +"3286908928","3286909951","CH" +"3286909952","3286913023","UA" +"3286913024","3286914047","DE" +"3286914048","3286915071","BG" +"3286915072","3286916095","FR" +"3286916096","3286917119","DE" +"3286917120","3286918143","RU" +"3286918144","3286919167","AT" +"3286919168","3286920191","DE" +"3286920192","3286921215","RU" +"3286921216","3286922239","UA" +"3286922240","3286923263","GB" +"3286923264","3286924287","CM" +"3286924288","3286925311","UA" +"3286925312","3286925567","DE" +"3286925568","3286925823","CH" +"3286925824","3286926079","RO" +"3286926080","3286926335","LV" +"3286926336","3286926591","UA" +"3286926592","3286926847","DE" +"3286926848","3286927103","PT" +"3286927104","3286927359","FI" +"3286927360","3286927615","DE" +"3286927616","3286927871","SI" +"3286927872","3286928383","DE" +"3286928384","3286928639","ES" +"3286928640","3286928895","PL" +"3286928896","3286929151","FI" +"3286929152","3286929407","DE" +"3286929408","3286929663","LV" +"3286929664","3286929919","BE" +"3286929920","3286930175","SE" +"3286930176","3286930431","RU" +"3286930432","3286930687","UA" +"3286930688","3286930943","DE" +"3286930944","3286931199","SE" +"3286931200","3286931455","AT" +"3286931456","3286931711","DE" +"3286931712","3286931967","GB" +"3286931968","3286932223","FR" +"3286932224","3286932479","DK" +"3286932480","3286932735","GB" +"3286932736","3286932991","AT" +"3286932992","3286933503","IL" +"3286933504","3286933759","DK" +"3286933760","3286934015","RO" +"3286934016","3286934271","BE" +"3286934272","3286934527","CH" +"3286934528","3286934783","PL" +"3286934784","3286935039","TR" +"3286935040","3286935551","ES" +"3286935552","3286935807","EG" +"3286935808","3286936063","RO" +"3286936064","3286936319","RU" +"3286936320","3286936575","IT" +"3286936576","3286936831","RO" +"3286936832","3286937087","NL" +"3286937088","3286937343","UA" +"3286937344","3286937599","GB" +"3286937600","3286937855","CH" +"3286937856","3286938111","RO" +"3286938112","3286938367","DE" +"3286938368","3286938623","ES" +"3286938624","3286938879","CH" +"3286938880","3286939391","RO" +"3286939392","3286939647","DE" +"3286939648","3286939903","BE" +"3286939904","3286940159","EG" +"3286940160","3286940415","BE" +"3286940416","3286940671","NL" +"3286940672","3286940927","RO" +"3286940928","3286941183","PL" +"3286941184","3286941439","RU" +"3286941440","3286941695","RO" +"3286941696","3286942719","DE" +"3286942720","3286943743","FI" +"3286943744","3286944767","UA" +"3286944768","3286945791","CZ" +"3286945792","3286946815","RU" +"3286946816","3286947839","UA" +"3286947840","3286948863","DE" +"3286948864","3286949887","UA" +"3286949888","3286950911","CH" +"3286950912","3286951935","DE" +"3286951936","3286952959","IT" +"3286952960","3286953983","BG" +"3286953984","3286955007","GB" +"3286955008","3286956031","DE" +"3286956032","3286957055","A2" +"3286957056","3286958079","EG" +"3286958080","3287023615","ES" +"3287023616","3287097343","FI" +"3287097344","3287097599","AX" +"3287097600","3287154687","FI" +"3287154688","3287162879","BE" +"3287162880","3287164927","US" +"3287164928","3287165183","DE" +"3287165184","3287165439","US" +"3287165440","3287165695","SA" +"3287165696","3287165951","US" +"3287165952","3287166207","SA" +"3287166208","3287166975","US" +"3287166976","3287167743","SA" +"3287167744","3287168511","US" +"3287168512","3287168767","EU" +"3287168768","3287169279","SA" +"3287169280","3287169535","US" +"3287169536","3287169791","SA" +"3287169792","3287170303","US" +"3287170304","3287170559","DE" +"3287170560","3287170815","US" +"3287170816","3287171071","GB" +"3287171072","3287171583","LT" +"3287171584","3287172095","PL" +"3287172096","3287172607","DE" +"3287172608","3287173119","PL" +"3287173120","3287173631","RU" +"3287173632","3287174143","NL" +"3287174144","3287174655","SE" +"3287174656","3287175167","GB" +"3287175168","3287176191","RO" +"3287176192","3287176703","BG" +"3287176704","3287177215","NL" +"3287177216","3287178239","RO" +"3287178240","3287178751","UA" +"3287178752","3287179263","RO" +"3287179264","3287180287","FR" +"3287180288","3287181311","RU" +"3287181312","3287182335","UZ" +"3287182336","3287185407","UA" +"3287185408","3287186431","SE" +"3287186432","3287187455","FI" +"3287187456","3287196671","DE" +"3287196672","3287198719","PL" +"3287198720","3287199743","GB" +"3287199744","3287201791","UA" +"3287201792","3287202815","PL" +"3287202816","3287203839","UA" +"3287203840","3287204895","FI" +"3287204896","3287204951","EE" +"3287204952","3287204959","FI" +"3287204960","3287204991","EE" +"3287204992","3287212031","FI" +"3287212032","3287212543","DE" +"3287212544","3287212799","FR" +"3287212800","3287213311","PL" +"3287213312","3287213567","FR" +"3287213568","3287214079","RU" +"3287214080","3287214335","GB" +"3287214336","3287214591","DE" +"3287214592","3287214847","NO" +"3287214848","3287215103","IT" +"3287215104","3287215359","PL" +"3287215360","3287215615","GB" +"3287215616","3287215871","DE" +"3287215872","3287216127","RU" +"3287216128","3287216639","GB" +"3287216640","3287216895","MD" +"3287216896","3287217151","GB" +"3287217152","3287217407","NL" +"3287217408","3287217663","PL" +"3287217664","3287217919","RU" +"3287217920","3287218175","PL" +"3287218176","3287218431","DE" +"3287218432","3287218687","GB" +"3287218688","3287218943","RU" +"3287218944","3287219199","FR" +"3287219200","3287219455","DE" +"3287219456","3287219711","CH" +"3287219712","3287220223","SE" +"3287220224","3287259375","RU" +"3287259376","3287259383","DK" +"3287259384","3287271119","RU" +"3287271120","3287271127","UZ" +"3287271128","3287285759","RU" +"3287285760","3287416831","NL" +"3287416832","3287425023","RU" +"3287425024","3287427759","SE" +"3287427760","3287427775","GB" +"3287427776","3287433215","SE" +"3287433216","3287433727","PL" +"3287433728","3287434239","DE" +"3287434240","3287434751","PL" +"3287434752","3287435263","GB" +"3287435264","3287435775","NL" +"3287435776","3287436287","GB" +"3287436288","3287436799","RS" +"3287436800","3287437311","RO" +"3287437312","3287437823","UA" +"3287437824","3287438335","RU" +"3287438336","3287438847","CH" +"3287438848","3287439359","GB" +"3287439360","3287439871","RO" +"3287439872","3287440895","PL" +"3287440896","3287441407","UA" +"3287441408","3287442431","NL" +"3287442432","3287442943","PL" +"3287442944","3287443967","DE" +"3287443968","3287444479","BG" +"3287444480","3287444991","PL" +"3287444992","3287445503","DE" +"3287445504","3287446015","GB" +"3287446016","3287446527","UA" +"3287446528","3287447039","PL" +"3287447040","3287447551","IL" +"3287447552","3287448063","DK" +"3287448064","3287448575","GB" +"3287448576","3287449087","PL" +"3287449088","3287449599","BG" +"3287449600","3287450111","PL" +"3287450112","3287450623","DK" +"3287450624","3287451135","SE" +"3287451136","3287451647","PL" +"3287451648","3287452159","ES" +"3287452160","3287452671","PL" +"3287452672","3287453183","CH" +"3287453184","3287454207","RU" +"3287454208","3287454719","SE" +"3287454720","3287455743","UA" +"3287455744","3287456255","NL" +"3287456256","3287457279","GB" +"3287457280","3287457791","RO" +"3287457792","3287458047","NL" +"3287458048","3287458303","UA" +"3287458304","3287458559","DE" +"3287458560","3287459327","CH" +"3287459328","3287459583","AT" +"3287459584","3287459839","DE" +"3287459840","3287460095","AT" +"3287460096","3287460351","ME" +"3287460352","3287460607","CY" +"3287460608","3287460863","NL" +"3287460864","3287461119","BE" +"3287461120","3287461375","DE" +"3287461376","3287461631","CH" +"3287461632","3287461887","AT" +"3287461888","3287462143","PL" +"3287462144","3287462399","SA" +"3287462400","3287462655","BE" +"3287462656","3287462911","UA" +"3287462912","3287463167","FR" +"3287463168","3287463423","IT" +"3287463424","3287463679","RO" +"3287463680","3287463935","PL" +"3287463936","3287464191","AT" +"3287464192","3287464447","SK" +"3287464448","3287464703","PL" +"3287464704","3287464959","NL" +"3287464960","3287465215","SA" +"3287465216","3287465471","SE" +"3287465472","3287465727","DE" +"3287465728","3287465983","FR" +"3287465984","3287467007","DK" +"3287467008","3287468031","SA" +"3287468032","3287469055","UA" +"3287469056","3287471103","DE" +"3287471104","3287472127","GB" +"3287472128","3287472639","RU" +"3287472640","3287473151","UA" +"3287473152","3287474175","GB" +"3287474176","3287476223","DE" +"3287476224","3287477247","PL" +"3287477248","3287478271","GB" +"3287478272","3287479295","BG" +"3287479296","3287480319","RO" +"3287480320","3287481343","AT" +"3287481344","3287482367","PL" +"3287482368","3287499439","DE" +"3287499440","3287499471","GB" +"3287499472","3287499487","DE" +"3287499488","3287499503","GB" +"3287499504","3287507983","DE" +"3287507984","3287507991","FR" +"3287507992","3287515375","DE" +"3287515376","3287515383","CZ" +"3287515384","3287534807","DE" +"3287534808","3287534815","IT" +"3287534816","3287542815","DE" +"3287542816","3287542831","US" +"3287542832","3287548927","DE" +"3287548928","3287549439","UA" +"3287549440","3287549951","SE" +"3287549952","3287550463","UA" +"3287550464","3287550975","DE" +"3287550976","3287551487","LT" +"3287551488","3287551999","RO" +"3287552000","3287552511","GB" +"3287552512","3287553023","RO" +"3287553024","3287553535","FR" +"3287553536","3287554047","IL" +"3287554048","3287554559","RU" +"3287554560","3287555071","PL" +"3287555072","3287555583","GB" +"3287555584","3287556095","FR" +"3287556096","3287564287","TR" +"3287564288","3287572479","FI" +"3287572480","3287578863","DE" +"3287578864","3287578879","LI" +"3287578880","3287580575","DE" +"3287580576","3287580607","LI" +"3287580608","3287580671","DE" +"3287580672","3287588863","LV" +"3287588864","3287597055","BE" +"3287597056","3287605247","GI" +"3287605248","3287630335","DE" +"3287630336","3287631359","PL" +"3287631360","3287631871","IR" +"3287631872","3287632383","RU" +"3287632384","3287632895","SE" +"3287632896","3287633407","RU" +"3287633408","3287633919","SK" +"3287633920","3287634431","GB" +"3287634432","3287634943","RO" +"3287634944","3287635455","PL" +"3287635456","3287635967","DE" +"3287635968","3287636479","RO" +"3287636480","3287636991","IE" +"3287636992","3287637503","AT" +"3287637504","3287638015","PL" +"3287638016","3287638527","UA" +"3287638528","3287639039","DE" +"3287639040","3287639551","GB" +"3287639552","3287640063","RU" +"3287640064","3287640575","PL" +"3287640576","3287641087","SI" +"3287641088","3287641599","A2" +"3287641600","3287642111","FI" +"3287642112","3287642623","UA" +"3287642624","3287643135","BE" +"3287643136","3287643647","IT" +"3287643648","3287644671","UA" +"3287644672","3287645183","NL" +"3287645184","3287646207","EU" +"3287646208","3287662591","PT" +"3287662592","3287662847","DE" +"3287662848","3287663103","DK" +"3287663104","3287663359","LV" +"3287663360","3287663615","GB" +"3287663616","3287663871","ES" +"3287663872","3287664127","PT" +"3287664128","3287664383","PL" +"3287664384","3287664639","NL" +"3287664640","3287664895","UA" +"3287664896","3287665151","GB" +"3287665152","3287665407","NO" +"3287665408","3287665919","PL" +"3287665920","3287666431","RU" +"3287666432","3287666687","DK" +"3287666688","3287666943","SI" +"3287666944","3287667199","CZ" +"3287667200","3287667455","DK" +"3287667456","3287667711","RU" +"3287667712","3287667967","ES" +"3287667968","3287668223","PL" +"3287668224","3287668479","RU" +"3287668480","3287668735","UA" +"3287668736","3287668991","SI" +"3287668992","3287669247","PL" +"3287669248","3287669503","LI" +"3287669504","3287669759","MD" +"3287669760","3287670015","RO" +"3287670016","3287670271","UA" +"3287670272","3287670527","PL" +"3287670528","3287670783","US" +"3287670784","3287671039","PL" +"3287671040","3287671295","AT" +"3287671296","3287671551","PL" +"3287671552","3287671807","TR" +"3287671808","3287672063","CH" +"3287672064","3287672319","LT" +"3287672320","3287672575","DE" +"3287672576","3287672831","NL" +"3287672832","3287673087","RU" +"3287673088","3287673343","SK" +"3287673344","3287673599","PT" +"3287673600","3287673855","GB" +"3287673856","3287674111","NL" +"3287674112","3287674367","CH" +"3287674368","3287674623","DE" +"3287674624","3287674879","RO" +"3287674880","3287675135","SE" +"3287675136","3287675391","GB" +"3287675392","3287675647","SE" +"3287675648","3287675903","DE" +"3287675904","3287676159","BE" +"3287676160","3287676415","DE" +"3287676416","3287676671","RU" +"3287676672","3287676927","GB" +"3287676928","3287677183","ES" +"3287677184","3287677439","RU" +"3287677440","3287677695","SI" +"3287677696","3287677951","RO" +"3287677952","3287678207","GB" +"3287678208","3287678463","UA" +"3287678464","3287678719","DE" +"3287678720","3287678975","HR" +"3287678976","3287687167","SI" +"3287687168","3287695359","EG" +"3287695360","3287703551","CH" +"3287703552","3287704063","CZ" +"3287704064","3287704575","NL" +"3287704576","3287705087","LU" +"3287705088","3287705599","TJ" +"3287705600","3287706111","SA" +"3287706112","3287706623","RU" +"3287706624","3287707135","GB" +"3287707136","3287707647","FR" +"3287707648","3287708159","BE" +"3287708160","3287708671","NL" +"3287708672","3287709183","EU" +"3287709184","3287709695","RU" +"3287709696","3287710207","SE" +"3287710208","3287710719","RU" +"3287710720","3287711231","UA" +"3287711232","3287711743","PL" +"3287711744","3287718911","GB" +"3287718912","3287719167","FR" +"3287719168","3287719423","GB" +"3287719424","3287719679","FR" +"3287719680","3287719935","GB" +"3287719936","3287728127","DE" +"3287728128","3287729407","IT" +"3287729408","3287729663","SE" +"3287729664","3287729919","DK" +"3287729920","3287730175","HU" +"3287730176","3287730431","PL" +"3287730432","3287730687","GB" +"3287730688","3287732223","DE" +"3287732224","3287734271","IT" +"3287734272","3287734527","PL" +"3287734528","3287734783","UA" +"3287734784","3287735039","RU" +"3287735040","3287735295","SE" +"3287735296","3287736319","IT" +"3287736320","3287736831","PL" +"3287736832","3287737343","LV" +"3287737344","3287737855","GB" +"3287737856","3287738367","FR" +"3287738368","3287738879","CH" +"3287738880","3287739391","DE" +"3287739392","3287739903","NL" +"3287739904","3287740415","PT" +"3287740416","3287740927","BG" +"3287740928","3287741439","RO" +"3287741440","3287741951","CH" +"3287741952","3287742463","RO" +"3287742464","3287742975","RU" +"3287742976","3287743487","RO" +"3287743488","3287743999","DE" +"3287744000","3287744511","FR" +"3287744512","3287810047","DE" +"3287810048","3287818239","FR" +"3287818240","3287826431","AT" +"3287826432","3287826687","LV" +"3287826688","3287826943","RO" +"3287826944","3287827199","RU" +"3287827200","3287827455","DE" +"3287827456","3287827711","SI" +"3287827712","3287827967","RU" +"3287827968","3287828223","GB" +"3287828224","3287828479","DE" +"3287828480","3287828735","PL" +"3287828736","3287828991","AT" +"3287828992","3287829247","DE" +"3287829248","3287829503","GB" +"3287829504","3287829759","RO" +"3287829760","3287830015","NL" +"3287830016","3287830271","NO" +"3287830272","3287830527","RO" +"3287830528","3287830783","IE" +"3287830784","3287831039","GB" +"3287831040","3287831295","RU" +"3287831296","3287831551","CH" +"3287831552","3287831807","RO" +"3287831808","3287832063","AT" +"3287832064","3287832319","FI" +"3287832320","3287832575","NL" +"3287832576","3287832831","PL" +"3287832832","3287833087","DE" +"3287833088","3287833343","GB" +"3287833344","3287833855","CH" +"3287833856","3287834111","UA" +"3287834112","3287834367","RU" +"3287834368","3287834623","HU" +"3287834624","3287842815","GB" +"3287842816","3287851007","DE" +"3287851008","3287859199","UA" +"3287859200","3287859455","GB" +"3287859456","3287859711","FK" +"3287859712","3287859967","EU" +"3287859968","3287860479","GB" +"3287860480","3287861247","EU" +"3287861248","3287862015","GB" +"3287862016","3287863807","EU" +"3287863808","3287864063","GB" +"3287864064","3287866383","EU" +"3287866384","3287866439","GB" +"3287866440","3287866495","EU" +"3287866496","3287866591","GB" +"3287866592","3287866607","EU" +"3287866608","3287866623","GB" +"3287866624","3287867391","EU" +"3287867392","3287867903","UA" +"3287867904","3287868415","PL" +"3287868416","3287868927","RO" +"3287868928","3287869439","ES" +"3287869440","3287869951","RU" +"3287869952","3287870463","UA" +"3287870464","3287870975","RU" +"3287870976","3287871487","NL" +"3287871488","3287871999","PL" +"3287872000","3287872511","RU" +"3287872512","3287873023","GB" +"3287873024","3287873535","PL" +"3287873536","3287874047","RU" +"3287874048","3287874559","FR" +"3287874560","3287875071","DE" +"3287875072","3287875583","PL" +"3287875584","3287941119","DK" +"3287941120","3287949311","IT" +"3287949312","3287949567","AT" +"3287949568","3287949823","IL" +"3287949824","3287950079","IT" +"3287950080","3287950335","DE" +"3287950336","3287950591","UA" +"3287950592","3287951103","PL" +"3287951104","3287951359","HU" +"3287951360","3287951615","FR" +"3287951616","3287951871","CH" +"3287951872","3287952127","RU" +"3287952128","3287952383","UA" +"3287952384","3287953151","CH" +"3287953152","3287953407","UA" +"3287953408","3287953663","DE" +"3287953664","3287953919","GB" +"3287953920","3287954175","DE" +"3287954176","3287954431","RU" +"3287954432","3287954687","CH" +"3287954688","3287954943","RO" +"3287954944","3287955199","PL" +"3287955200","3287955711","RU" +"3287955712","3287955967","DE" +"3287955968","3287956223","SI" +"3287956224","3287956479","RO" +"3287956480","3287956735","BG" +"3287956736","3287956991","SE" +"3287956992","3287957247","UA" +"3287957248","3287957503","GB" +"3287957504","3287965695","AM" +"3287965696","3287973887","RS" +"3287973888","3287982079","CZ" +"3287982080","3287990271","EE" +"3287990272","3287998463","SI" +"3287998464","3288006655","IT" +"3288006656","3288072191","GR" +"3288072192","3288088575","SE" +"3288088576","3288102543","RS" +"3288102544","3288102551","DK" +"3288102552","3288104959","RS" +"3288104960","3288143615","DE" +"3288143616","3288143871","CH" +"3288143872","3288145663","DE" +"3288145664","3288146175","CH" +"3288146176","3288150015","DE" +"3288150016","3288150103","NL" +"3288150104","3288150271","DE" +"3288150272","3288150359","NL" +"3288150360","3288150495","DE" +"3288150496","3288150591","NL" +"3288150592","3288150783","DE" +"3288150784","3288150871","NL" +"3288150872","3288150911","DE" +"3288150912","3288150975","NL" +"3288150976","3288151039","DE" +"3288151040","3288151551","NL" +"3288151552","3288236031","DE" +"3288236032","3288236543","LI" +"3288236544","3288237055","FR" +"3288237056","3288238591","RO" +"3288238592","3288239103","PL" +"3288239104","3288239615","RO" +"3288239616","3288240127","UA" +"3288240128","3288240639","CH" +"3288240640","3288241151","FR" +"3288241152","3288241663","ES" +"3288241664","3288242175","UA" +"3288242176","3288242687","RO" +"3288242688","3288243199","FR" +"3288243200","3288243711","PL" +"3288243712","3288244735","FR" +"3288244736","3288245247","DE" +"3288245248","3288245759","GB" +"3288245760","3288246271","RO" +"3288246272","3288246783","DK" +"3288246784","3288247295","KW" +"3288247296","3288247807","NO" +"3288247808","3288248831","PL" +"3288248832","3288249855","GB" +"3288249856","3288250367","RO" +"3288250368","3288250879","PL" +"3288250880","3288251903","RU" +"3288251904","3288252415","AT" +"3288252416","3288260607","NO" +"3288260608","3288268799","IT" +"3288268800","3288334335","FI" +"3288334336","3288399871","UG" +"3288399872","3288400127","MU" +"3288400128","3288400383","IN" +"3288400384","3288400639","PR" +"3288400640","3288400895","SA" +"3288400896","3288401151","KE" +"3288401152","3288401407","RU" +"3288401408","3288401663","SA" +"3288401664","3288401919","MU" +"3288401920","3288406527","ZA" +"3288406528","3288407039","KE" +"3288407040","3288408063","NA" +"3288408064","3288413183","ZA" +"3288413184","3288414207","TZ" +"3288414208","3288416255","ZA" +"3288416256","3288417279","SA" +"3288417280","3288417535","IN" +"3288417536","3288418047","KW" +"3288418048","3288418303","ZA" +"3288418304","3288418815","US" +"3288418816","3288423423","ZA" +"3288423424","3288425727","SN" +"3288425728","3288426495","ZA" +"3288426496","3288427263","IN" +"3288427264","3288427519","BM" +"3288427520","3288428543","IN" +"3288428544","3288428799","CU" +"3288428800","3288429311","IN" +"3288429312","3288429567","ZA" +"3288429568","3288430335","GH" +"3288430336","3288430591","EG" +"3288430592","3288432639","SC" +"3288432640","3288433407","ZA" +"3288433408","3288433919","KE" +"3288433920","3288434175","NG" +"3288434176","3288434431","IN" +"3288434432","3288434687","CU" +"3288434688","3288435711","JM" +"3288435712","3288435967","US" +"3288435968","3288436223","PR" +"3288436224","3288436479","US" +"3288436480","3288436735","EG" +"3288436736","3288440831","ZA" +"3288440832","3288441343","VC" +"3288441344","3288442879","BB" +"3288442880","3288443135","KN" +"3288443136","3288443647","VC" +"3288443648","3288444927","BB" +"3288444928","3288449023","NG" +"3288449024","3288465407","SD" +"3288465408","3288465919","JM" +"3288465920","3288466175","BW" +"3288466176","3288466431","MU" +"3288466432","3288467455","SY" +"3288467456","3288469503","BI" +"3288469504","3288481791","ZA" +"3288481792","3288482303","ZW" +"3288482304","3288485631","ZA" +"3288485632","3288485887","ZW" +"3288485888","3288489983","MA" +"3288489984","3288514559","ZA" +"3288514560","3288522751","EG" +"3288530944","3288532991","JM" +"3288532992","3288534527","PR" +"3288534528","3288535039","MG" +"3288535040","3288539135","AN" +"3288539136","3288543487","US" +"3288543488","3288543743","AP" +"3288543744","3288543996","US" +"3288543997","3288543997","EU" +"3288543998","3288543998","CH" +"3288543999","3288544498","US" +"3288544499","3288544499","EU" +"3288544500","3288544767","US" +"3288544768","3288545023","MX" +"3288545024","3288545279","FR" +"3288545280","3288545379","US" +"3288545380","3288545380","AU" +"3288545381","3288545535","US" +"3288545536","3288545791","ZA" +"3288545792","3288546303","KE" +"3288546304","3288547327","NG" +"3288547328","3288547583","GH" +"3288547584","3288547839","IN" +"3288547840","3288548095","SA" +"3288548096","3288549375","AE" +"3288549376","3288549631","PK" +"3288549632","3288549887","GD" +"3288549888","3288553983","DO" +"3288553984","3288554239","CM" +"3288554240","3288554495","IR" +"3288554496","3288555007","ZA" +"3288555008","3288555263","NA" +"3288555264","3288555519","JM" +"3288555520","3288557567","MZ" +"3288557568","3288557823","JM" +"3288557824","3288558079","ZA" +"3288558080","3288558335","DO" +"3288558336","3288558847","ZA" +"3288558848","3288559103","MU" +"3288559104","3288564735","ZA" +"3288564736","3288568831","TT" +"3288568832","3288569855","ZA" +"3288569856","3288570111","CU" +"3288570112","3288570367","JM" +"3288570368","3288577023","ZA" +"3288577024","3288578047","NG" +"3288578048","3288580095","JM" +"3288580096","3288588287","BB" +"3288588288","3288608255","ZA" +"3288608256","3288614655","US" +"3288614656","3288616959","ZA" +"3288616960","3288617215","ZW" +"3288617216","3288661759","ZA" +"3288661760","3288662015","LS" +"3288662016","3288727551","ZA" +"3288727552","3288727807","MU" +"3288727808","3289063423","ZA" +"3289069568","3289070335","ZA" +"3289070336","3289070591","ZW" +"3289070592","3289070847","NA" +"3289070848","3289071103","ZA" +"3289071616","3289086975","ZA" +"3289086976","3289087231","SZ" +"3289087232","3289120767","ZA" +"3289120768","3289123327","PR" +"3289123328","3289123583","NA" +"3289123584","3289123839","EG" +"3289123840","3289124863","ZM" +"3289124864","3289128959","ZA" +"3289128960","3289137151","IN" +"3289137152","3289153535","BM" +"3289153536","3289161727","RW" +"3289161728","3289169631","PR" +"3289169632","3289169663","US" +"3289169664","3289169919","PR" +"3289169920","3289186303","MA" +"3289186304","3289229311","ZA" +"3289229312","3289229567","SZ" +"3289229824","3289230591","ZA" +"3289233408","3289319423","ZA" +"3289319424","3289319679","A2" +"3289319680","3289319935","ZA" +"3289319936","3289320447","A2" +"3289320448","3289321471","ZA" +"3289321472","3289325567","IN" +"3289325568","3289333759","SA" +"3289333760","3289645055","ZA" +"3289645056","3289653247","NA" +"3289653248","3289661439","EG" +"3289661440","3289677823","DZ" +"3289677824","3289710591","MU" +"3289710592","3289777407","ZA" +"3289777408","3289777663","EG" +"3289777664","3289777919","NG" +"3289777920","3289778175","EG" +"3289778176","3289779199","CD" +"3289779200","3289780223","GW" +"3289780224","3289788415","ZA" +"3289788416","3289792511","MZ" +"3289792512","3289809407","ZA" +"3289809408","3289809663","EG" +"3289809664","3289809919","KE" +"3289809920","3289812991","ZA" +"3289812992","3289817087","MU" +"3289817088","3289907199","ZA" +"3289907200","3289908223","LS" +"3289908224","3289923583","ZA" +"3289923584","3289924607","SZ" +"3289924608","3290031103","ZA" +"3290031104","3290031359","LS" +"3290031360","3290060287","ZA" +"3290060288","3290060543","SZ" +"3290060544","3290103807","ZA" +"3290103808","3290104319","JO" +"3290104320","3290104831","EG" +"3290104832","3290106879","VE" +"3290106880","3290107135","CL" +"3290107136","3290107151","CA" +"3290107152","3290107167","US" +"3290107168","3290107231","CA" +"3290107232","3290107263","US" +"3290107264","3290107311","CA" +"3290107312","3290107343","US" +"3290107344","3290107359","CA" +"3290107360","3290107375","US" +"3290107376","3290107383","CA" +"3290107384","3290107391","US" +"3290107392","3290107647","CA" +"3290107648","3290108415","US" +"3290108416","3290108671","CA" +"3290108672","3290108927","US" +"3290108928","3290109183","GH" +"3290109184","3290109439","MU" +"3290109440","3290109695","ET" +"3290109696","3290110207","PR" +"3290110208","3290110463","US" +"3290110464","3290110719","ES" +"3290110720","3290110975","DO" +"3290110976","3290111487","US" +"3290111488","3290111743","MX" +"3290111744","3290111999","US" +"3290112000","3290112143","CA" +"3290112144","3290116095","US" +"3290116096","3290118399","PE" +"3290118400","3290120191","US" +"3290120192","3290128383","MU" +"3290128384","3290136575","ZW" +"3290136576","3290169343","NG" +"3290169344","3290171135","ZA" +"3290171136","3290171391","SZ" +"3290171392","3290171647","ZA" +"3290171904","3290172159","NG" +"3290172160","3290172415","KE" +"3290172416","3290181631","ZA" +"3290181632","3290181951","PR" +"3290181952","3290181959","US" +"3290181960","3290181967","PR" +"3290181968","3290182031","US" +"3290182032","3290182032","PR" +"3290182033","3290182047","US" +"3290182048","3290182078","PR" +"3290182079","3290182143","US" +"3290182144","3290182335","PR" +"3290182336","3290182399","US" +"3290182400","3290183167","PR" +"3290183168","3290183199","US" +"3290183200","3290183230","PR" +"3290183231","3290183294","US" +"3290183295","3290183326","PR" +"3290183327","3290183423","US" +"3290183424","3290185727","PR" +"3290185728","3290226687","ZA" +"3290226688","3290230783","MZ" +"3290230784","3290234879","BF" +"3290234880","3290243071","ZA" +"3290243072","3290245119","ZW" +"3290245120","3290246143","DZ" +"3290247168","3290249215","A2" +"3290251264","3290259455","TT" +"3290259456","3290267647","GH" +"3290267648","3290275839","ZA" +"3290275840","3290284031","SD" +"3290284032","3290288127","AO" +"3290288128","3290292223","NG" +"3290292224","3290296319","GH" +"3290296320","3290431487","ZA" +"3290431488","3290433535","JM" +"3290439680","3290447871","TT" +"3290447872","3290456063","AR" +"3290456064","3290460159","MZ" +"3290460160","3290464255","ML" +"3290464256","3290471487","PR" +"3290471488","3290471551","DO" +"3290471552","3290472447","PR" +"3290472448","3290480639","ZA" +"3290480640","3290482687","AO" +"3290482688","3290484735","CF" +"3290484736","3290486783","ZA" +"3290486784","3290488831","SC" +"3290488832","3290489343","NG" +"3290489344","3290489855","KE" +"3290489856","3290490367","EG" +"3290490368","3290492927","ZA" +"3290492928","3290494975","TZ" +"3290497024","3290718975","ZA" +"3290718976","3290719231","SZ" +"3290719232","3290955775","ZA" +"3290955776","3290980351","CR" +"3290980352","3290984447","ZA" +"3290988544","3290992639","KE" +"3291004928","3291021311","NG" +"3291021312","3291029503","ZA" +"3291029504","3291033343","TZ" +"3291033344","3291033599","KE" +"3291033600","3291037695","TZ" +"3291045888","3291078655","ZA" +"3291078656","3291086847","DZ" +"3291086848","3291103231","PR" +"3291152384","3291168767","ZA" +"3291168768","3291176959","TZ" +"3291176960","3291185151","ZW" +"3291185152","3291201535","UG" +"3291201536","3291201791","KE" +"3291201792","3291202047","ZM" +"3291202048","3291202303","GH" +"3291202304","3291202559","ZA" +"3291202560","3291202815","GH" +"3291202816","3291203071","AO" +"3291203072","3291203327","EG" +"3291203328","3291203583","ZW" +"3291203584","3291203839","ZA" +"3291203840","3291204095","EG" +"3291204096","3291204351","KE" +"3291204352","3291204863","ZA" +"3291204864","3291205119","KE" +"3291205120","3291205631","GH" +"3291205632","3291206143","ZA" +"3291206144","3291206399","AO" +"3291206400","3291206911","KE" +"3291207168","3291207423","MG" +"3291207424","3291207679","NG" +"3291207680","3291207935","BW" +"3291207936","3291208447","KE" +"3291208448","3291208703","EG" +"3291208704","3291208959","KE" +"3291208960","3291209215","TZ" +"3291209216","3291209471","KE" +"3291209472","3291209727","AO" +"3291209728","3291209983","NG" +"3291209984","3291210239","GH" +"3291210240","3291210495","UG" +"3291210496","3291210751","ZA" +"3291210752","3291211007","KE" +"3291211008","3291211263","SL" +"3291211264","3291211519","TZ" +"3291211520","3291211775","ZA" +"3291211776","3291212287","NG" +"3291212288","3291212543","MZ" +"3291212544","3291212799","NG" +"3291212800","3291213055","MA" +"3291213056","3291213311","EG" +"3291213312","3291213567","NG" +"3291216896","3291217919","MU" +"3291217920","3291230207","ZA" +"3291230208","3291234303","GH" +"3291234304","3291242495","ZA" +"3291242496","3291250687","GH" +"3291250688","3291258879","NA" +"3291258880","3291262975","TZ" +"3291262976","3291267071","ZW" +"3291267072","3291279359","ZA" +"3291279360","3291283455","RW" +"3291283456","3291287551","NA" +"3291287552","3291291647","ZA" +"3291291648","3291293375","TZ" +"3291293376","3291293439","NG" +"3291293440","3291293951","TZ" +"3291293952","3291294079","KE" +"3291294080","3291295743","TZ" +"3291295744","3291299839","NG" +"3291299840","3291316223","ZA" +"3291316224","3291324415","TZ" +"3291324416","3291325439","AO" +"3291325440","3291326463","BW" +"3291326464","3291330559","ZA" +"3291330560","3291331583","TZ" +"3291331584","3291332607","MW" +"3291332608","3291332615","ZA" +"3291332616","3291332863","NG" +"3291332864","3291348991","ZA" +"3291348992","3291353087","MZ" +"3291353088","3291353343","KE" +"3291353344","3291353599","EG" +"3291353600","3291354111","ZM" +"3291354112","3291354367","NG" +"3291354368","3291354623","AO" +"3291354624","3291354879","EG" +"3291354880","3291355135","ZA" +"3291355136","3291355391","EG" +"3291355392","3291355647","ZA" +"3291355648","3291355903","EG" +"3291355904","3291356159","NG" +"3291356160","3291356415","NA" +"3291356416","3291356671","EG" +"3291356672","3291357183","ZA" +"3291357184","3291365375","MU" +"3291365376","3291367423","ZA" +"3291367424","3291369471","AO" +"3291369472","3291373567","GH" +"3291373568","3291377663","TZ" +"3291377664","3291378687","CD" +"3291378688","3291379711","ZA" +"3291379712","3291380735","TZ" +"3291380736","3291381759","ZM" +"3291381760","3291383807","TZ" +"3291383808","3291385855","ZA" +"3291385856","3291386879","NG" +"3291386880","3291387903","SC" +"3291387904","3291388927","BJ" +"3291388928","3291389951","GA" +"3291389952","3291397119","ZA" +"3291397120","3291398143","EG" +"3291398144","3291406335","ZM" +"3291406336","3291408383","ZA" +"3291408384","3291410431","GM" +"3291410432","3291412479","NG" +"3291412480","3291414527","DZ" +"3291414528","3291431423","ZA" +"3291431424","3291431551","NA" +"3291431552","3291432191","ZA" +"3291432192","3291432447","NA" +"3291432448","3291432703","ZA" +"3291432704","3291432959","NA" +"3291432960","3291433471","ZA" +"3291433472","3291433727","NA" +"3291433728","3291434239","ZA" +"3291434240","3291434751","A2" +"3291434752","3291435007","ZA" +"3291435008","3291439103","A2" +"3291447296","3291463679","CI" +"3291480064","3292528639","ZA" +"3300917248","3300921343","MU" +"3300925440","3300929535","MG" +"3300933632","3300950015","MU" +"3301441536","3301441567","ZA" +"3301441568","3301441575","NG" +"3301441576","3301441655","ZA" +"3301441656","3301441663","NG" +"3301441664","3301441815","ZA" +"3301441816","3301441823","NG" +"3301441824","3301441879","ZA" +"3301441880","3301441887","NG" +"3301441888","3301441911","ZA" +"3301441912","3301441919","NG" +"3301441920","3301441999","ZA" +"3301442000","3301442007","NG" +"3301442008","3301442351","ZA" +"3301442352","3301442359","NG" +"3301442360","3301442391","ZA" +"3301442392","3301442399","NG" +"3301442400","3301442415","ZA" +"3301442416","3301442423","NG" +"3301442424","3301442599","ZA" +"3301442600","3301442607","NG" +"3301442608","3301442679","ZA" +"3301442680","3301442687","NG" +"3301442688","3301442727","ZA" +"3301442728","3301442735","NG" +"3301442736","3301442823","ZA" +"3301442824","3301442831","NG" +"3301442832","3301443007","ZA" +"3301443008","3301443015","NG" +"3301443016","3301443295","ZA" +"3301443296","3301443303","NG" +"3301443304","3301443519","ZA" +"3301443520","3301443527","NG" +"3301443528","3301443591","ZA" +"3301443592","3301443599","NG" +"3301443600","3301443655","ZA" +"3301443656","3301443663","NG" +"3301443664","3301443695","ZA" +"3301443696","3301443703","NG" +"3301443704","3301443847","ZA" +"3301443848","3301443855","NG" +"3301443856","3301444383","ZA" +"3301444384","3301444391","NG" +"3301444392","3301444415","ZA" +"3301444416","3301444431","NG" +"3301444432","3301444599","ZA" +"3301444600","3301444607","NG" +"3301444608","3301445047","ZA" +"3301445048","3301445055","NG" +"3301445056","3301445063","ZA" +"3301445064","3301445071","NG" +"3301445072","3301445175","ZA" +"3301445176","3301445183","NG" +"3301445184","3301445255","ZA" +"3301445256","3301445263","NG" +"3301445264","3301445631","ZA" +"3301445632","3301453823","KE" +"3301453824","3301457919","ML" +"3301457920","3301462015","NG" +"3301462016","3301466111","ML" +"3301466112","3301470207","ER" +"3301470208","3301471231","NG" +"3301471232","3301471487","GH" +"3301471488","3301474047","NG" +"3301474048","3301474303","GH" +"3301474304","3301490687","MA" +"3301494784","3301498879","TZ" +"3301507328","3301507583","ZW" +"3301507584","3301507839","GH" +"3301507840","3301508095","EG" +"3301508096","3301508607","MW" +"3301508608","3301509119","ZA" +"3301510144","3301511167","MW" +"3301511168","3301513215","ZW" +"3301513216","3301515263","EG" +"3301515264","3301523455","GH" +"3301523456","3301531647","CI" +"3301539840","3301540863","KE" +"3301540864","3301541119","A2" +"3301541120","3301541631","KE" +"3301541632","3301541887","A2" +"3301541888","3301544959","KE" +"3301544960","3301545215","A2" +"3301545216","3301548031","KE" +"3301548032","3301556223","GH" +"3301556224","3301557759","DJ" +"3301557760","3301558271","US" +"3301558272","3301560319","DJ" +"3301560320","3301566463","KE" +"3301568512","3301570559","EG" +"3301570560","3301572607","KE" +"3301572608","3301605375","EG" +"3301605376","3301613567","SD" +"3301621760","3301629951","KE" +"3301632000","3301634047","CM" +"3301634048","3301636095","LS" +"3301636096","3301637119","ZA" +"3301637120","3301638143","AO" +"3301638144","3301703679","TN" +"3301703680","3301834751","EG" +"3301834752","3301900287","MA" +"3301900288","3301902663","NG" +"3301902664","3301902671","CM" +"3301902672","3301904383","NG" +"3301904384","3301908479","KE" +"3301908480","3301912575","ZA" +"3301912576","3301916671","MU" +"3301949440","3301965823","SN" +"3301965824","3302490111","ZA" +"3302490368","3302490623","US" +"3302490624","3302491135","MU" +"3302492160","3302494207","MW" +"3302494208","3302496255","ZA" +"3302498304","3302502399","NA" +"3302502400","3302505471","AO" +"3302505472","3302506495","NA" +"3302506496","3302514687","KE" +"3302522880","3302523903","KE" +"3302525952","3302526975","EG" +"3302526976","3302529023","NG" +"3302529024","3302530047","ZA" +"3302530048","3302531071","TN" +"3302531072","3302531327","CF" +"3302531328","3302531583","AO" +"3302531584","3302531839","TZ" +"3302531840","3302532095","BW" +"3302532096","3302533119","NA" +"3302533120","3302533631","MU" +"3302533632","3302533887","ZA" +"3302533888","3302534143","MU" +"3302534144","3302535167","ZA" +"3302535168","3302536191","UG" +"3302536192","3302537215","GH" +"3302537216","3302538239","NG" +"3302538240","3302539263","GH" +"3302539264","3302540287","ZA" +"3302540288","3302540799","UG" +"3302540800","3302541311","AO" +"3302541312","3302542335","NG" +"3302550528","3302551039","ZA" +"3302551040","3302551551","MU" +"3302551552","3302552063","EG" +"3302552064","3302552575","KE" +"3302552576","3302552831","TZ" +"3302552832","3302553087","KE" +"3302553088","3302553343","EG" +"3302553344","3302553599","TZ" +"3302553600","3302554111","AO" +"3302554112","3302554367","ZA" +"3302554368","3302554623","NG" +"3302554624","3302554879","EG" +"3302554880","3302555135","NG" +"3302555136","3302555391","MU" +"3302555392","3302555647","NG" +"3302555648","3302621183","MA" +"3302621184","3302684671","EG" +"3302684672","3302686719","JO" +"3302686720","3302752255","EG" +"3302752256","3302753359","NG" +"3302753360","3302753363","CM" +"3302753364","3302753607","NG" +"3302753608","3302753615","GH" +"3302753616","3302760447","NG" +"3302760448","3302762495","ZA" +"3302762496","3302766591","US" +"3302766592","3302768639","ZA" +"3302768640","3302776831","NG" +"3302776832","3302785023","ZW" +"3302801408","3302805503","NG" +"3302805504","3302809599","MW" +"3302809600","3302817791","NG" +"3302817792","3302883327","EG" +"3302883328","3302948863","NG" +"3302948864","3302949119","MU" +"3302949120","3302949375","AO" +"3302949376","3302949631","ZM" +"3302949632","3302949887","BI" +"3302949888","3302950143","CI" +"3302950144","3302950655","TZ" +"3302950656","3302950911","EG" +"3302950912","3302951423","ZA" +"3302951424","3302951679","SL" +"3302951680","3302951935","KE" +"3302951936","3302952191","RW" +"3302952192","3302952447","AO" +"3302952448","3302952959","ZA" +"3302952960","3302953471","EG" +"3302953472","3302953727","NA" +"3302953728","3302953983","AO" +"3302953984","3302954239","SD" +"3302954240","3302954495","KE" +"3302954496","3302955007","ZA" +"3302955008","3302955263","LS" +"3302955264","3302955519","UG" +"3302955520","3302955775","ZW" +"3302955776","3302956031","MW" +"3302956032","3302956287","CD" +"3305111552","3307208703","TN" +"3307208704","3309305855","EG" +"3309305856","3312451583","ZA" +"3312451584","3312975871","DZ" +"3312975872","3313500159","EG" +"3313500160","3313762303","MA" +"3313762304","3314024447","EG" +"3314024448","3314286591","KE" +"3314286592","3314548735","DZ" +"3314548736","3314810879","MA" +"3314876416","3314892799","MG" +"3314892800","3314909183","NG" +"3314909184","3314910207","TD" +"3314910208","3314911231","NG" +"3314911232","3314912255","CG" +"3314912256","3314913279","BI" +"3314925568","3314941951","GN" +"3314941952","3315073023","EG" +"3315073024","3315138559","TZ" +"3315138560","3315204095","MA" +"3315204096","3315269631","ET" +"3315335168","3315351551","ZA" +"3315351552","3315367935","ET" +"3315367936","3315384319","KE" +"3315384320","3315400703","NG" +"3315400704","3315417087","UG" +"3315417088","3315425279","ZA" +"3315425280","3315433471","SC" +"3315433472","3315449855","RW" +"3315449856","3315450879","BI" +"3315450880","3315451903","AO" +"3315451904","3315452927","LS" +"3315452928","3315453951","ZW" +"3315453952","3315454975","CD" +"3315454976","3315455999","RW" +"3315456000","3315457023","NG" +"3315457024","3315458047","ZA" +"3315458048","3315459071","SL" +"3315459072","3315460095","KE" +"3315460096","3315461119","SL" +"3315461120","3315462143","TZ" +"3315462144","3315463167","ZA" +"3315463168","3315464191","SO" +"3315464192","3315465215","CD" +"3315465216","3315466239","MU" +"3315466240","3315482623","MZ" +"3315482624","3315499007","MG" +"3315499008","3315515391","ZM" +"3315515392","3315531775","SC" +"3315531776","3315539967","CM" +"3315539968","3315548159","ZA" +"3315548160","3315552255","NG" +"3315552256","3315556351","GW" +"3315556352","3315560447","KE" +"3315560448","3315564543","TZ" +"3315564544","3315568639","GH" +"3315568640","3315572735","MG" +"3315572736","3315580927","ST" +"3315580928","3315589119","CI" +"3315589120","3315597311","CM" +"3315597312","3316121599","EG" +"3316121600","3316645887","ZA" +"3316645888","3317170175","KE" +"3317694464","3318218751","EG" +"3318218752","3318743039","DZ" +"3319267328","3319398399","AO" +"3319398400","3319529471","MZ" +"3319529472","3319537663","ZM" +"3319537664","3319545855","MW" +"3319545856","3319554047","SO" +"3319554048","3319562239","KE" +"3319562240","3319570431","LS" +"3319570432","3319578623","GH" +"3319578624","3319595007","ZM" +"3319595008","3319611391","ZA" +"3319611392","3319619583","GH" +"3319619584","3319627775","ZA" +"3319627776","3319635967","UG" +"3319635968","3319644159","ZA" +"3319644160","3319652351","TZ" +"3319652352","3319660543","ZW" +"3319660544","3319791615","EG" +"3319791616","3320053759","MU" +"3320578048","3320643583","ZA" +"3320643584","3320709119","KE" +"3320709120","3320774655","ZA" +"3320840192","3320905727","NG" +"3320905728","3320938495","DJ" +"3320938496","3320971263","AO" +"3320971264","3320979455","GA" +"3320979456","3320995839","ZA" +"3320995840","3321004031","NG" +"3321004032","3321008127","GM" +"3321008128","3321012223","ZA" +"3321012224","3321016319","MZ" +"3321016320","3321018367","CF" +"3321018368","3321020415","MU" +"3321020416","3321022463","TZ" +"3321022464","3321024511","ZA" +"3321024512","3321028607","KE" +"3321032704","3321036799","NG" +"3321036800","3321069567","RW" +"3321069568","3321102335","NA" +"3321102336","3321167871","NG" +"3321167872","3321233407","ZA" +"3321233408","3321298943","EG" +"3321298944","3321364479","MA" +"3321364480","3321430015","KE" +"3321430016","3321495551","MZ" +"3321495552","3321561087","TZ" +"3321561088","3321593855","SD" +"3321593856","3321626623","GH" +"3321626624","3321692159","SD" +"3321692160","3321708543","NG" +"3321708544","3321724927","GH" +"3321724928","3321757695","MA" +"3321757696","3321790463","KE" +"3321790464","3321806847","LS" +"3321806848","3321823231","SD" +"3321823232","3321839615","NG" +"3321839616","3321855999","MU" +"3321856000","3321860095","CV" +"3321860096","3321864191","ZA" +"3321864192","3321868287","NG" +"3321868288","3321872383","CG" +"3321872384","3321876479","GM" +"3321876480","3321880575","NG" +"3321880576","3321884671","KM" +"3321884672","3321885695","ZA" +"3321885696","3321886719","NG" +"3321954304","3321970687","US" +"3322019840","3322023935","US" +"3322023936","3322028031","CL" +"3322085376","3322167551","US" +"3322167552","3322167807","GB" +"3322167808","3322202111","US" +"3322202112","3322203135","GB" +"3322203136","3322250975","US" +"3322250976","3322251007","IL" +"3322251008","3322251335","US" +"3322251336","3322251343","IL" +"3322251344","3322254719","US" +"3322254720","3322254783","CA" +"3322254784","3322339583","US" +"3322339584","3322339839","GB" +"3322339840","3322609663","US" +"3322609664","3322610687","SA" +"3322610688","3322611711","US" +"3322613760","3322642431","US" +"3322675200","3322683391","US" +"3322683392","3322691583","BR" +"3322740736","3322773503","US" +"3322806272","3322871807","US" +"3322873856","3322875903","US" +"3322880000","3322888191","AU" +"3322937344","3322938367","US" +"3322939392","3322940671","US" +"3322940672","3322940927","AP" +"3322940928","3322945535","US" +"3323003136","3323003391","JP" +"3323003392","3323003647","US" +"3323003904","3323013631","US" +"3323013888","3323014143","CA" +"3323014144","3323017727","US" +"3323017728","3323017983","CA" +"3323017984","3323018239","US" +"3323018752","3323020799","US" +"3323020800","3323021055","AP" +"3323021056","3323022591","US" +"3323022592","3323022847","GB" +"3323022848","3323031551","US" +"3323032576","3323032831","US" +"3323032832","3323033087","IT" +"3323033088","3323033343","JP" +"3323033600","3323034111","BR" +"3323034112","3323038719","US" +"3323038720","3323038975","CA" +"3323038976","3323048959","US" +"3323048960","3323049727","NL" +"3323049728","3323061247","US" +"3323061504","3323062015","US" +"3323062016","3323062527","BR" +"3323062784","3323068415","US" +"3323201536","3323203583","CA" +"3323203584","3323207679","US" +"3323207680","3323215871","CA" +"3323267072","3323270420","US" +"3323270421","3323270421","CH" +"3323270422","3323289599","US" +"3323330816","3323331071","US" +"3323331072","3323331839","CA" +"3323331840","3323342335","US" +"3323342592","3323342847","AU" +"3323343616","3323343871","DE" +"3323343872","3323345919","US" +"3323346176","3323346431","AU" +"3323346432","3323354111","US" +"3323354112","3323354367","GB" +"3323354368","3323355647","DE" +"3323355904","3323356671","US" +"3323356672","3323356927","CA" +"3323356928","3323378687","US" +"3323378688","3323378943","CA" +"3323378944","3323391231","US" +"3323391232","3323391487","CA" +"3323391488","3323394559","US" +"3323394560","3323395071","CL" +"3323395072","3323412479","US" +"3323461632","3323462655","US" +"3323462656","3323463167","BR" +"3323463168","3323464191","US" +"3323465728","3323469823","US" +"3323527168","3323659263","US" +"3323659264","3323660543","NZ" +"3323662336","3323674623","US" +"3323723776","3324011007","US" +"3324011008","3324011263","KN" +"3324011264","3324030463","US" +"3324030464","3324030719","KN" +"3324030720","3324033791","US" +"3324033792","3324034047","KN" +"3324034048","3324035583","US" +"3324035584","3324035839","KN" +"3324035840","3324036351","US" +"3324036352","3324036607","KN" +"3324036608","3324040191","US" +"3324040192","3324040447","AU" +"3324040448","3324051455","US" +"3324051456","3324182527","CA" +"3324182528","3324256255","US" +"3324256256","3324259327","SA" +"3324259328","3324259583","US" +"3324259584","3324259839","SA" +"3324259840","3324260095","US" +"3324264448","3324266495","US" +"3324266496","3324266751","AP" +"3324266752","3324270079","US" +"3324270080","3324270591","EU" +"3324270592","3324379135","US" +"3324379136","3324380159","CA" +"3324380160","3324403711","US" +"3324411904","3324470271","US" +"3324470272","3324474367","GB" +"3324474368","3324579839","US" +"3324583936","3324588031","CL" +"3324588032","3324600319","US" +"3324641280","3324642303","US" +"3324642304","3324642559","CA" +"3324642560","3324645887","US" +"3324645888","3324646143","CA" +"3324646144","3324647679","US" +"3324647680","3324647935","CA" +"3324647936","3324650495","US" +"3324650496","3324650751","CA" +"3324650752","3324653311","US" +"3324653312","3324653567","CA" +"3324653568","3324655871","US" +"3324655872","3324656127","CA" +"3324656128","3324659967","US" +"3324659968","3324660223","CA" +"3324660224","3324660479","US" +"3324660480","3324660735","CA" +"3324660736","3324662015","US" +"3324662016","3324662271","CA" +"3324662272","3324662527","US" +"3324662528","3324662783","CA" +"3324662784","3324664319","US" +"3324664320","3324664575","CA" +"3324664576","3324665855","US" +"3324665856","3324666367","CA" +"3324666368","3324668415","US" +"3324668416","3324668671","CA" +"3324668672","3324672767","US" +"3324672768","3324673023","CA" +"3324673024","3324674815","US" +"3324674816","3324675327","CA" +"3324675328","3324676351","US" +"3324676352","3324676863","CA" +"3324676864","3324678911","US" +"3324678912","3324679167","CA" +"3324679168","3324679423","US" +"3324679424","3324679935","CA" +"3324679936","3324681215","US" +"3324681216","3324681471","CA" +"3324681472","3324682495","US" +"3324682496","3324682751","CA" +"3324682752","3324684799","US" +"3324684800","3324685055","CA" +"3324685056","3324686335","US" +"3324686336","3324686591","CA" +"3324686592","3324690687","US" +"3324690688","3324690943","CA" +"3324690944","3324692991","US" +"3324692992","3324693247","CA" +"3324693248","3324693503","US" +"3324693504","3324693759","CA" +"3324693760","3324694527","US" +"3324694528","3324695039","CA" +"3324695040","3324695551","US" +"3324695552","3324695807","CA" +"3324695808","3324696063","US" +"3324696064","3324696575","CA" +"3324696576","3324696831","US" +"3324696832","3324697087","CA" +"3324697088","3324698623","US" +"3324698624","3324699135","CA" +"3324699136","3324699391","US" +"3324699392","3324699647","CA" +"3324699648","3324701183","US" +"3324701184","3324701695","CA" +"3324701696","3324701951","US" +"3324701952","3324702207","CA" +"3324702208","3324703999","US" +"3324704000","3324704255","CA" +"3324704256","3324706303","US" +"3324706304","3324706559","CA" +"3324706560","3324732415","US" +"3324732416","3324732671","EU" +"3324732672","3324772351","US" +"3324837888","3324844543","US" +"3324844544","3324844799","EU" +"3324844800","3324870655","US" +"3324903424","3325034495","US" +"3325034496","3325035519","NZ" +"3325035520","3325059071","US" +"3325100032","3325116415","US" +"3325120512","3325128703","US" +"3325128704","3325129215","TH" +"3325129216","3325131775","US" +"3325131776","3325132031","AU" +"3325132032","3325132799","US" +"3325132800","3325134335","BR" +"3325134336","3325134591","US" +"3325134848","3325135359","US" +"3325136128","3325136383","CA" +"3325136384","3325136639","US" +"3325136896","3325142015","US" +"3325142016","3325142271","CR" +"3325142272","3325144831","US" +"3325144832","3325145087","CA" +"3325145088","3325169663","US" +"3325169664","3325171711","BR" +"3325173760","3325190143","US" +"3325231104","3325232127","US" +"3325233152","3325234175","US" +"3325234176","3325234431","SA" +"3325234432","3325249279","US" +"3325249280","3325249535","CO" +"3325249536","3325259775","US" +"3325259776","3325261311","CA" +"3325261312","3325264895","US" +"3325267200","3325267711","US" +"3325267712","3325268735","SY" +"3325268736","3325269759","US" +"3325269760","3325270015","CA" +"3325270016","3325271039","US" +"3325271040","3325271295","CA" +"3325271296","3325271551","US" +"3325271808","3325281023","US" +"3325281024","3325281279","NZ" +"3325281280","3325284863","US" +"3325284864","3325285119","AU" +"3325285376","3325304831","US" +"3325304832","3325307647","CA" +"3325307648","3325307903","BB" +"3325307904","3325308927","CA" +"3325313024","3325321215","US" +"3325362176","3325427711","CA" +"3325427712","3325460479","ZA" +"3325463808","3325464063","ZA" +"3325464064","3325465087","NA" +"3325465088","3325493247","ZA" +"3325493248","3325497343","US" +"3325497344","3325501439","PR" +"3325501440","3325505535","US" +"3325509632","3325517823","US" +"3325526016","3325591551","US" +"3325624320","3325640703","US" +"3325640704","3325644799","CA" +"3325689856","3325690367","JM" +"3325690368","3325691903","US" +"3325691904","3325693951","BR" +"3325693952","3325700095","US" +"3325706240","3325708287","US" +"3325755392","3325956095","US" +"3325956096","3325960191","CA" +"3325960192","3325976063","US" +"3325976064","3325976319","CA" +"3325976320","3325980671","US" +"3325980672","3325980927","CA" +"3325980928","3325992447","US" +"3325992448","3325992959","CA" +"3325992960","3325996799","US" +"3325996800","3325997055","CA" +"3325997056","3326189567","US" +"3326189568","3326189823","A1" +"3326189824","3326190591","US" +"3326190592","3326190719","A1" +"3326190720","3326190847","US" +"3326190848","3326190975","A1" +"3326190976","3326191295","US" +"3326191296","3326191359","A1" +"3326191360","3326191551","US" +"3326191552","3326191583","A1" +"3326191584","3326349823","US" +"3326349824","3326350335","EC" +"3326350336","3326390527","US" +"3326390528","3326390535","CA" +"3326390536","3326402111","US" +"3326402112","3326402119","PR" +"3326402120","3326406655","US" +"3326406656","3326408703","CO" +"3326408704","3326413823","US" +"3326413824","3326414335","YE" +"3326414336","3326420991","US" +"3326420992","3326423039","PR" +"3326423040","3326476495","US" +"3326476496","3326476503","GE" +"3326476504","3326492239","US" +"3326492240","3326492255","CA" +"3326492256","3326526463","US" +"3326526464","3326526719","CA" +"3326526720","3326574591","US" +"3326607360","3326640127","US" +"3326680832","3326682623","CA" +"3326682624","3326682879","US" +"3326682880","3326713343","CA" +"3326713344","3326714111","US" +"3326714112","3326716927","CA" +"3326716928","3326717951","US" +"3326717952","3326729215","CA" +"3326729216","3326729471","JP" +"3326729472","3326729727","CA" +"3326729728","3326734335","US" +"3326734336","3326737663","CA" +"3326737664","3326737919","US" +"3326737920","3326738175","CA" +"3326738432","3326952191","US" +"3326952192","3326952447","AS" +"3326952448","3326953983","US" +"3326953984","3326954495","AS" +"3326954496","3327144959","US" +"3327144960","3327145983","CA" +"3327145984","3327162367","US" +"3327162368","3327162623","GB" +"3327162624","3327162879","US" +"3327162880","3327163391","GB" +"3327163392","3327172863","US" +"3327172864","3327173119","AP" +"3327173120","3327197183","US" +"3327197184","3327198207","JP" +"3327198208","3327199231","US" +"3327199232","3327200255","BR" +"3327200256","3327256831","US" +"3327256832","3327257087","GU" +"3327257088","3327591237","US" +"3327591238","3327591238","A1" +"3327591239","3327723519","US" +"3327723520","3327725567","CA" +"3327725568","3327746047","US" +"3327754240","3327803647","US" +"3327803648","3327803903","AP" +"3327803904","3327805695","US" +"3327807488","3327811583","CA" +"3327819776","3327885311","US" +"3327918080","3327995903","US" +"3327995904","3327996927","AN" +"3327996928","3328028671","US" +"3328028672","3328030719","AN" +"3328030720","3328180223","US" +"3328180224","3328214783","CA" +"3328214784","3328215295","GB" +"3328215296","3328235007","CA" +"3328235008","3328235263","US" +"3328235520","3328241663","CA" +"3328241664","3328242943","US" +"3328242944","3328243199","GB" +"3328243200","3328245759","CA" +"3328245760","3328394239","US" +"3328394240","3328394495","GB" +"3328394496","3328414719","US" +"3328414720","3328414975","CH" +"3328414976","3328420351","US" +"3328420352","3328420607","CA" +"3328420608","3328421119","US" +"3328421120","3328421375","HK" +"3328421376","3328432639","US" +"3328432640","3328433663","CA" +"3328433664","3328433919","CH" +"3328433920","3328475135","US" +"3328475136","3328477183","CA" +"3328507904","3328617983","US" +"3328617984","3328618239","CA" +"3328618240","3328629503","US" +"3328629504","3328629759","EU" +"3328629760","3328630783","US" +"3328630784","3328631807","CA" +"3328631808","3328638975","US" +"3328638976","3328704511","CA" +"3328704512","3328774399","US" +"3328774400","3328775935","CA" +"3328775936","3328776703","US" +"3328778240","3328782335","US" +"3328786432","3328788479","US" +"3328788480","3328789503","FR" +"3328789504","3328790015","AP" +"3328790016","3328790527","US" +"3328802816","3329230335","US" +"3329230336","3329230591","JP" +"3329230592","3329497343","US" +"3329497344","3329497599","KE" +"3329497600","3329498623","US" +"3329498624","3329498879","ES" +"3329498880","3330613247","US" +"3330613248","3330614783","CA" +"3330614784","3330617087","US" +"3330617088","3330617343","CA" +"3330617344","3330621183","US" +"3330621184","3330623743","CA" +"3330623744","3330624255","US" +"3330624512","3330625535","US" +"3330625536","3330627071","GB" +"3330627072","3330640895","US" +"3330640896","3330641151","CH" +"3330641152","3330641663","US" +"3330641920","3330646527","US" +"3330646528","3330647295","CA" +"3330647296","3330647807","US" +"3330648064","3330649343","US" +"3330649600","3330649855","CA" +"3330649856","3330662911","US" +"3330662912","3330663167","GB" +"3330663168","3330664191","US" +"3330664192","3330664447","CA" +"3330664448","3330714367","US" +"3330714368","3330714623","CA" +"3330714624","3330726655","US" +"3330726656","3330726911","CA" +"3330726912","3330754559","US" +"3330754560","3330754815","CA" +"3330754816","3330755071","US" +"3330755328","3330763519","US" +"3330763520","3330763775","CA" +"3330763776","3330765823","US" +"3330765824","3330766335","CA" +"3330766336","3330771199","US" +"3330771200","3330771711","CH" +"3330771712","3330778879","US" +"3330778880","3330779135","GB" +"3330779136","3330791423","US" +"3330791424","3330791679","CA" +"3330791680","3330815743","US" +"3330815744","3330815999","CA" +"3330816000","3330883583","US" +"3330883584","3330884351","NL" +"3330884352","3330884863","US" +"3330884864","3330885119","GB" +"3330885120","3330888063","US" +"3330888064","3330888127","NL" +"3330888128","3330888191","US" +"3330888192","3330888703","AU" +"3330888704","3330888959","US" +"3330888960","3330889215","CH" +"3330889216","3330889471","GB" +"3330889472","3330890239","JP" +"3330890240","3330890751","BE" +"3330890752","3330891263","GB" +"3330891264","3330892287","US" +"3330892288","3330892543","FR" +"3330892544","3330893567","US" +"3330893568","3330893823","NL" +"3330893824","3330894079","CA" +"3330894080","3330894591","GB" +"3330894592","3330894847","DE" +"3330894848","3330897919","US" +"3330897920","3330898175","CA" +"3330898176","3330898431","DE" +"3330898432","3330898943","FR" +"3330898944","3331102463","US" +"3331102464","3331102719","CA" +"3331102720","3331194879","US" +"3331194880","3331260415","AU" +"3331260416","3331362815","US" +"3331362816","3331366911","CA" +"3331366912","3331371279","US" +"3331371280","3331371295","SE" +"3331371296","3331371327","US" +"3331371328","3331371343","SE" +"3331371344","3331371375","US" +"3331371376","3331371391","SE" +"3331371392","3331563519","US" +"3331563520","3331563775","CH" +"3331563776","3331633407","US" +"3331633408","3331633919","CH" +"3331633920","3331647231","US" +"3331647232","3331647487","CA" +"3331647488","3331649279","US" +"3331649280","3331649535","CA" +"3331649536","3331798271","US" +"3331798272","3331798527","AU" +"3331798528","3331818495","US" +"3331818496","3331818751","MX" +"3331818752","3331853823","US" +"3331853824","3331854079","AP" +"3331854080","3331868161","US" +"3331868162","3331868162","EU" +"3331868163","3332001791","US" +"3332001792","3332005887","CA" +"3332005888","3332030463","US" +"3332046848","3332083967","US" +"3332083968","3332084223","AP" +"3332084224","3332095231","US" +"3332095232","3332095487","EU" +"3332095488","3332440063","US" +"3332440064","3332460543","CA" +"3332460544","3332460799","US" +"3332460800","3332461311","CA" +"3332461568","3332503039","CA" +"3332503040","3332503551","US" +"3332503552","3332554751","CA" +"3332554752","3332558847","US" +"3332558848","3332562943","CA" +"3332562944","3332563455","US" +"3332563456","3332590079","CA" +"3332590080","3332590591","US" +"3332590592","3332616191","CA" +"3332616192","3332616959","US" +"3332616960","3332617471","CA" +"3332618240","3332624383","US" +"3332624384","3332724735","CA" +"3332724736","3332726783","PM" +"3332726784","3332737023","CA" +"3332737024","3332738047","PM" +"3332738048","3332744191","CA" +"3332744192","3332745215","PM" +"3332745216","3332752127","CA" +"3332752128","3332752383","PM" +"3332752384","3332906495","CA" +"3332906496","3332909567","US" +"3332909568","3332947967","CA" +"3332947968","3332948223","US" +"3332948224","3332966143","CA" +"3332966144","3332966399","US" +"3332966400","3333012479","CA" +"3333012480","3333012991","US" +"3333012992","3333029887","CA" +"3333029888","3333212415","US" +"3333212416","3333212927","A1" +"3333212928","3333213055","US" +"3333213056","3333213439","A1" +"3333213440","3333213695","US" +"3333213696","3333214079","A1" +"3333214080","3333246505","US" +"3333246506","3333246506","A1" +"3333246507","3333385983","US" +"3333385984","3333386239","JP" +"3333386240","3333427967","US" +"3333427968","3333428007","GB" +"3333428008","3333428008","EU" +"3333428009","3333428223","GB" +"3333428224","3333429759","US" +"3333431296","3333480191","US" +"3333480192","3333481471","DE" +"3333481472","3333603328","US" +"3333603329","3333603329","EU" +"3333603330","3333609733","US" +"3333609734","3333609734","AU" +"3333609735","3333701887","US" +"3333701888","3333702143","GB" +"3333702144","3333702399","US" +"3333702400","3333702655","CH" +"3333702656","3333705727","US" +"3333705728","3333709567","GB" +"3333709568","3333710335","US" +"3333710336","3333710591","DE" +"3333710592","3333710847","IT" +"3333710848","3333711359","GB" +"3333711360","3333712127","DE" +"3333712128","3333712383","CH" +"3333712384","3333712639","DE" +"3333712640","3333716223","US" +"3333716224","3333716735","CA" +"3333716736","3333716991","GB" +"3333716992","3333717247","AU" +"3333717248","3333717503","FR" +"3333717504","3333717759","SG" +"3333717760","3333718015","NL" +"3333718016","3333825791","US" +"3333825792","3333826047","EU" +"3333826048","3333859839","US" +"3333859840","3333860095","BM" +"3333860096","3333988607","US" +"3333988608","3333988863","BR" +"3333988864","3333997823","US" +"3333997824","3333998079","CA" +"3333998080","3334006781","US" +"3334006782","3334006782","NL" +"3334006783","3334007551","US" +"3334007552","3334007807","EU" +"3334007808","3334138623","US" +"3334138624","3334138879","BM" +"3334138880","3334187775","US" +"3334187776","3334188031","BM" +"3334188032","3334995967","US" +"3334995968","3335000063","PH" +"3335000064","3335004159","US" +"3335028736","3335251967","US" +"3335252224","3335252735","US" +"3335252736","3335252991","CA" +"3335252992","3335276287","US" +"3335276288","3335276799","PR" +"3335276800","3335439615","US" +"3335439616","3335439871","CH" +"3335439872","3335440383","US" +"3335440384","3335441151","CH" +"3335441152","3335458815","US" +"3335458816","3335460863","BM" +"3335462912","3335475199","US" +"3335475200","3335475455","DE" +"3335475456","3335480191","US" +"3335480192","3335480319","IT" +"3335480320","3335524572","US" +"3335524573","3335524573","AU" +"3335524574","3335573759","US" +"3335573760","3335574015","IN" +"3335574016","3335581695","US" +"3335581696","3335581951","EU" +"3335581952","3335582463","US" +"3335582464","3335582719","EU" +"3335582720","3335860991","US" +"3335860992","3335861247","MX" +"3335861248","3336854015","US" +"3336854016","3336854271","CO" +"3336854272","3336991231","US" +"3336991232","3336991487","CA" +"3336991488","3336993023","US" +"3336993024","3336993535","CA" +"3336993536","3337044479","US" +"3337044480","3337044735","CA" +"3337044736","3337044991","US" +"3337044992","3337046015","CA" +"3337046016","3337046527","US" +"3337046528","3337047551","CA" +"3337047552","3337050111","US" +"3337050112","3337051647","CA" +"3337051648","3337051903","US" +"3337051904","3337052159","CA" +"3337052160","3337053183","US" +"3337053184","3337053695","CA" +"3337053696","3337055231","US" +"3337055232","3337060351","CA" +"3337060352","3337289727","US" +"3337289728","3337297919","CA" +"3337297920","3337302015","US" +"3337302016","3337304319","CA" +"3337304320","3337305599","US" +"3337305600","3337335295","CA" +"3337335296","3337335807","US" +"3337335808","3337355263","CA" +"3337355264","3337650175","US" +"3337650176","3337650250","GB" +"3337650251","3337650251","EU" +"3337650252","3337650687","GB" +"3337650688","3337650943","US" +"3337650944","3337651199","HK" +"3337651200","3337651455","CH" +"3337651456","3337651711","SG" +"3337651712","3337653503","CH" +"3337653504","3337653759","JP" +"3337653760","3337654783","CH" +"3337654784","3337655039","AU" +"3337655040","3337682943","CH" +"3337682944","3337957375","US" +"3337957376","3337961471","CA" +"3337977856","3337980671","US" +"3337980672","3337980927","PR" +"3337980928","3337986047","US" +"3337986048","3337986303","BB" +"3337986304","3338069247","US" +"3338069248","3338069759","BB" +"3338069760","3338207487","US" +"3338207488","3338207743","CA" +"3338207744","3338208511","US" +"3338208512","3338208767","CA" +"3338208768","3338211583","US" +"3338211584","3338212095","CA" +"3338212096","3338215423","US" +"3338215424","3338215935","CA" +"3338215936","3338216447","US" +"3338216448","3338216703","CA" +"3338216704","3338217215","US" +"3338217216","3338217471","CA" +"3338217472","3338220543","US" +"3338220544","3338221055","CA" +"3338221056","3338222847","US" +"3338222848","3338223359","CA" +"3338223360","3338228735","US" +"3338228736","3338228991","CA" +"3338228992","3338229759","US" +"3338229760","3338230015","CA" +"3338230016","3338230527","US" +"3338230528","3338230783","CA" +"3338230784","3338231807","US" +"3338231808","3338232063","CA" +"3338232064","3338233599","US" +"3338233600","3338233855","VG" +"3338233856","3338235135","US" +"3338235136","3338235391","CA" +"3338235392","3338235647","US" +"3338235648","3338235903","CA" +"3338235904","3338236671","US" +"3338236672","3338236927","CA" +"3338236928","3338238975","US" +"3338238976","3338239231","CA" +"3338239232","3338239999","US" +"3338240000","3338240255","CA" +"3338240256","3338241535","US" +"3338241536","3338242047","CA" +"3338242048","3338246143","US" +"3338246144","3338246399","CA" +"3338246400","3338246655","US" +"3338246656","3338247167","CA" +"3338247168","3338247423","US" +"3338247424","3338247679","CA" +"3338247680","3338247935","US" +"3338247936","3338249215","CA" +"3338249216","3338249727","US" +"3338249728","3338249983","CA" +"3338249984","3338250751","US" +"3338250752","3338251775","CA" +"3338251776","3338252543","US" +"3338252544","3338252799","CA" +"3338252800","3338253311","US" +"3338253312","3338253567","CA" +"3338253568","3338254079","US" +"3338254080","3338254335","CA" +"3338254336","3338255615","US" +"3338255616","3338255871","CA" +"3338255872","3338257407","US" +"3338257408","3338257663","CA" +"3338257664","3338257919","US" +"3338257920","3338258175","CA" +"3338258176","3338258431","US" +"3338258432","3338258687","CA" +"3338258688","3338259455","US" +"3338259456","3338259711","CA" +"3338259712","3338260735","US" +"3338260736","3338261759","CA" +"3338261760","3338262527","US" +"3338262528","3338263039","CA" +"3338263040","3338264063","US" +"3338264064","3338264575","CA" +"3338264576","3338265855","US" +"3338265856","3338266623","CA" +"3338266624","3338267647","US" +"3338267648","3338268159","CA" +"3338268160","3338269183","US" +"3338269184","3338270207","CA" +"3338270208","3338270719","US" +"3338270720","3338271231","CA" +"3338271232","3338271487","US" +"3338271488","3338271743","CA" +"3338271744","3338271999","US" +"3338272000","3338272255","CA" +"3338272256","3338348543","US" +"3338350592","3338354687","CA" +"3338371072","3338403839","CA" +"3338403840","3338551295","US" +"3338567680","3338600447","CA" +"3338665984","3338686463","US" +"3338686464","3338688511","AW" +"3338688512","3338770431","US" +"3338770432","3338772479","PR" +"3338772480","3338825727","US" +"3338825728","3338827775","AW" +"3338827776","3338912767","US" +"3338912768","3338913023","EC" +"3338913024","3338916351","US" +"3338916352","3338916479","CN" +"3338916480","3339059629","US" +"3339059630","3339059885","NL" +"3339059886","3339075583","US" +"3339075584","3339076863","GB" +"3339076864","3339077631","JP" +"3339077632","3339077887","SG" +"3339077888","3339079167","US" +"3339079168","3339079423","DK" +"3339079424","3339079679","CA" +"3339079680","3339080703","IT" +"3339080704","3339080959","FR" +"3339080960","3339081727","HK" +"3339081728","3339081983","NL" +"3339081984","3339082751","FR" +"3339082752","3339086335","US" +"3339086336","3339086591","JP" +"3339086592","3339091967","US" +"3339091968","3339092991","NL" +"3339092992","3339093503","US" +"3339093504","3339094015","NL" +"3339094016","3339142655","US" +"3339142656","3339142911","NL" +"3339142912","3339146239","US" +"3339146496","3339147007","US" +"3339147008","3339147775","CA" +"3339147776","3339148031","MS" +"3339148032","3339153407","US" +"3339153408","3339155455","BB" +"3339155456","3339159551","US" +"3339159552","3339160575","CA" +"3339160576","3339164671","US" +"3339164672","3339165695","CA" +"3339165696","3339167743","US" +"3339167744","3339168767","PR" +"3339168768","3339177983","US" +"3339177984","3339178495","PR" +"3339178496","3339178751","DO" +"3339178752","3339179007","PR" +"3339179008","3339180031","US" +"3339180032","3339181055","CA" +"3339181056","3339184127","US" +"3339184128","3339184639","CA" +"3339184640","3339184895","US" +"3339184896","3339186175","CA" +"3339186176","3339327999","US" +"3339328512","3339329535","CA" +"3339329536","3339337727","US" +"3339337984","3339338239","US" +"3339338240","3339338495","CA" +"3339338496","3339669503","US" +"3339669504","3339671807","CA" +"3339672576","3339678721","US" +"3339678722","3339678782","CN" +"3339678783","3339678785","US" +"3339678786","3339678846","CN" +"3339678847","3339679487","US" +"3339679488","3339679743","CN" +"3339679744","3339727343","US" +"3339727344","3339727351","CA" +"3339727352","3339728319","US" +"3339728320","3339728351","IN" +"3339728352","3339728591","US" +"3339728592","3339728599","IN" +"3339728600","3339728895","US" +"3339728896","3339729919","AG" +"3339729920","3339743231","US" +"3339743232","3339744255","CA" +"3339744256","3339747327","US" +"3339747328","3339747583","CA" +"3339747584","3339747839","FR" +"3339747840","3339748351","CA" +"3339748352","3339753471","US" +"3339753472","3339754495","CA" +"3339754496","3339760639","US" +"3339760640","3339761663","CA" +"3339761664","3339923455","US" +"3339923456","3339927551","CA" +"3339927552","3339934719","US" +"3339934720","3339935743","CA" +"3339935744","3339941650","US" +"3339941651","3339941651","BR" +"3339941652","3339941664","US" +"3339941665","3339941665","BR" +"3339941666","3339941790","US" +"3339941791","3339941791","BR" +"3339941792","3339952127","US" +"3339952128","3339956223","CA" +"3339956224","3339965439","US" +"3339965440","3339968511","CA" +"3339968512","3340071679","US" +"3340071680","3340071743","ES" +"3340071744","3340080127","US" +"3340080128","3340081151","CA" +"3340081152","3340084223","US" +"3340084224","3340085247","KN" +"3340085248","3340088319","US" +"3340088320","3340089343","CA" +"3340089344","3340097535","US" +"3340097536","3340098559","CA" +"3340098560","3340107775","US" +"3340107776","3340369919","CA" +"3340369920","3340386559","US" +"3340387328","3340388351","CA" +"3340388352","3340390399","US" +"3340390400","3340391423","CA" +"3340391424","3340391777","US" +"3340391778","3340391793","EG" +"3340391794","3340391825","US" +"3340391826","3340391833","EG" +"3340391834","3340391841","VE" +"3340391842","3340391849","IN" +"3340391850","3340429823","US" +"3340429824","3340430079","PA" +"3340430080","3340460031","US" +"3340460032","3340462079","PR" +"3340462080","3340466175","US" +"3340466176","3340467199","A2" +"3340467200","3340481535","US" +"3340481536","3340482559","CA" +"3340482560","3340490751","US" +"3340490752","3340492799","CA" +"3340492800","3340493567","US" +"3340493568","3340493823","HK" +"3340493824","3340584703","US" +"3340584704","3340584959","KW" +"3340584960","3340664831","US" +"3340664832","3340665855","CA" +"3340665856","3340677119","US" +"3340677120","3340679167","CA" +"3340679168","3340694783","US" +"3340694784","3340695039","CA" +"3340695040","3340845567","US" +"3340846080","3340846111","US" +"3340846112","3340846119","CA" +"3340846120","3340846127","GB" +"3340846128","3340846131","MX" +"3340846132","3340846139","BR" +"3340846140","3340857343","US" +"3340857344","3340857599","CA" +"3340857600","3340898047","US" +"3340898048","3340898303","CA" +"3340898304","3340925071","US" +"3340925072","3340925079","CA" +"3340925080","3340925247","US" +"3340925248","3340925255","AR" +"3340925256","3340925279","US" +"3340925280","3340925287","CA" +"3340925288","3340925303","US" +"3340925304","3340925311","SE" +"3340925312","3340925375","US" +"3340925376","3340925383","RU" +"3340925384","3340925471","US" +"3340925472","3340925479","CH" +"3340925480","3340925535","US" +"3340925536","3340925543","RU" +"3340925544","3340925607","US" +"3340925608","3340925615","AU" +"3340925616","3340925631","US" +"3340925632","3340925639","BR" +"3340925640","3340925647","CO" +"3340925648","3340925703","US" +"3340925704","3340925711","FR" +"3340925712","3340925719","US" +"3340925720","3340925727","CA" +"3340925728","3340925735","BR" +"3340925736","3340925743","UA" +"3340925744","3340925823","US" +"3340925824","3340925887","GB" +"3340925888","3340925895","CA" +"3340925896","3340925919","US" +"3340925920","3340925927","PT" +"3340925928","3340925935","US" +"3340925936","3340925943","DE" +"3340925944","3340925999","US" +"3340926000","3340926007","RU" +"3340926008","3340926015","US" +"3340926016","3340926023","RU" +"3340926024","3340926095","US" +"3340926096","3340926103","AU" +"3340926104","3340926111","CA" +"3340926112","3340926143","US" +"3340926144","3340926151","BR" +"3340926152","3340926159","CN" +"3340926160","3340926175","AR" +"3340926176","3340926199","US" +"3340926200","3340926207","DE" +"3340926208","3340926223","US" +"3340926224","3340926231","PT" +"3340926232","3340926247","CA" +"3340926248","3340926255","AR" +"3340926256","3340926263","AU" +"3340926264","3340926287","US" +"3340926288","3340926295","CA" +"3340926296","3340926319","US" +"3340926320","3340926327","RU" +"3340926328","3340926343","US" +"3340926344","3340926351","GB" +"3340926352","3340926407","US" +"3340926408","3340926415","GB" +"3340926416","3340926439","US" +"3340926440","3340926447","NO" +"3340926448","3340926455","DE" +"3340926456","3340926463","US" +"3340926464","3340926479","MX" +"3340926480","3340926495","US" +"3340926496","3340926503","DE" +"3340926504","3340926511","MX" +"3340926512","3340926543","US" +"3340926544","3340926559","GB" +"3340926560","3340926599","US" +"3340926600","3340926607","CA" +"3340926608","3340926615","RU" +"3340926616","3340926623","US" +"3340926624","3340926655","GB" +"3340926656","3340926663","BE" +"3340926664","3340926671","GB" +"3340926672","3340926679","US" +"3340926680","3340926687","CL" +"3340926688","3340926791","US" +"3340926792","3340926799","GB" +"3340926800","3340926815","US" +"3340926816","3340926823","CA" +"3340926824","3340926903","US" +"3340926904","3340926911","IL" +"3340926912","3340926927","US" +"3340926928","3340926935","ES" +"3340926936","3341056079","US" +"3341056080","3341056095","CH" +"3341056096","3341056223","IN" +"3341056224","3341056239","AU" +"3341056240","3341056255","US" +"3341056256","3341056271","IN" +"3341056272","3341056287","US" +"3341056288","3341056415","IN" +"3341056416","3341056767","US" +"3341056768","3341056895","CA" +"3341056896","3341082623","US" +"3341082624","3341084671","CA" +"3341084672","3341180927","US" +"3341180928","3341182975","CA" +"3341182976","3341205503","US" +"3341205504","3341207551","VC" +"3341207552","3341216255","US" +"3341216256","3341216511","JP" +"3341216512","3341216767","US" +"3341216768","3341217791","CA" +"3341217792","3341217807","US" +"3341217808","3341217823","IN" +"3341217824","3341217839","PH" +"3341217840","3341217847","US" +"3341217848","3341217855","PH" +"3341217856","3341217863","US" +"3341217864","3341217871","AU" +"3341217872","3341217887","PH" +"3341217888","3341217935","US" +"3341217936","3341217951","AU" +"3341217952","3341217967","NL" +"3341217968","3341218015","IN" +"3341218016","3341218023","PH" +"3341218024","3341218039","US" +"3341218040","3341218047","PH" +"3341218048","3341218055","JP" +"3341218056","3341218063","US" +"3341218064","3341218071","SG" +"3341218072","3341218151","US" +"3341218152","3341218167","PH" +"3341218168","3341218223","US" +"3341218224","3341218231","AU" +"3341218232","3341218247","US" +"3341218248","3341218255","PH" +"3341218256","3341218271","US" +"3341218272","3341218287","IN" +"3341218288","3341218319","US" +"3341218320","3341218335","SG" +"3341218336","3341218351","US" +"3341218352","3341218367","PH" +"3341218368","3341218431","US" +"3341218432","3341218559","IN" +"3341218560","3341218591","US" +"3341218592","3341218719","IN" +"3341218720","3341218815","US" +"3341218816","3341219007","CA" +"3341219008","3341219071","US" +"3341219072","3341219103","IN" +"3341219104","3341219167","US" +"3341219168","3341219263","IN" +"3341219264","3341219583","US" +"3341219584","3341219615","IN" +"3341219616","3341219647","US" +"3341219648","3341219711","CA" +"3341219712","3341339647","US" +"3341339648","3341339903","AP" +"3341339904","3341340159","US" +"3341340160","3341340415","AP" +"3341340416","3341439200","US" +"3341439201","3341439201","CA" +"3341439202","3341444863","US" +"3341444864","3341445631","DE" +"3341445632","3341464575","US" +"3341464576","3341464831","GB" +"3341464832","3341470207","US" +"3341470208","3341470463","GB" +"3341470464","3341479935","US" +"3341479936","3341480447","DE" +"3341480448","3341484287","US" +"3341484288","3341485055","CA" +"3341485056","3341488895","US" +"3341488896","3341489151","AP" +"3341489152","3341511679","US" +"3341511680","3341517823","CA" +"3341517824","3341518847","US" +"3341518848","3341520895","CA" +"3341520896","3341521663","US" +"3341521664","3341531135","CA" +"3341531136","3341534207","US" +"3341534976","3341537279","CA" +"3341537280","3341546239","US" +"3341546240","3341547007","CA" +"3341547008","3341547519","CH" +"3341547520","3341549567","CA" +"3341549568","3341631999","US" +"3341632000","3341632767","CA" +"3341632768","3341634815","US" +"3341634816","3341635071","CA" +"3341635072","3341641727","US" +"3341641728","3341643007","CA" +"3341643008","3341643519","US" +"3341643520","3341643775","CA" +"3341643776","3341644287","US" +"3341644288","3341644799","CA" +"3341644800","3341645055","US" +"3341645056","3341645567","CA" +"3341645568","3341646079","US" +"3341646080","3341646591","CA" +"3341646592","3341709311","US" +"3341709312","3341710335","CA" +"3341710336","3341712639","US" +"3341712640","3341712767","CN" +"3341712768","3341712847","US" +"3341712848","3341712855","CN" +"3341712856","3341713063","US" +"3341713064","3341713071","CN" +"3341713072","3341758463","US" +"3341758464","3341759487","CA" +"3341759488","3341760511","BB" +"3341760512","3341762559","CA" +"3341762560","3341777919","US" +"3341777920","3341778943","CA" +"3341778944","3341796863","US" +"3341796864","3341797375","JP" +"3341797376","3341807615","US" +"3341807616","3341808639","CA" +"3341808640","3341828095","US" +"3341828096","3341829119","CA" +"3341829120","3341837311","US" +"3341837312","3341838335","CA" +"3341838336","3341849375","US" +"3341849376","3341853471","A1" +"3341853472","3341854551","US" +"3341854552","3341854559","SG" +"3341854560","3341863963","US" +"3341863964","3341864959","AG" +"3341864960","3341867007","US" +"3341867008","3341869055","CA" +"3341869056","3341873151","US" +"3341873152","3341875199","A1" +"3341875200","3342139391","US" +"3342139392","3342204927","CH" +"3342204928","3342487551","US" +"3342487552","3342488575","CA" +"3342488576","3342488639","US" +"3342488640","3342488703","GB" +"3342488704","3342488831","SC" +"3342488832","3342488863","GB" +"3342488864","3342488896","US" +"3342488897","3342488904","GB" +"3342488905","3342488959","US" +"3342488960","3342489215","SC" +"3342489216","3342489279","GB" +"3342489280","3342489301","US" +"3342489302","3342489311","AR" +"3342489312","3342493759","US" +"3342493760","3342493791","CA" +"3342493792","3342496767","US" +"3342496768","3342497791","CA" +"3342497792","3342499839","GD" +"3342499840","3342505983","US" +"3342505984","3342507007","BB" +"3342507008","3342510079","US" +"3342510080","3342512127","CA" +"3342512128","3342516223","US" +"3342516224","3342517247","CA" +"3342517248","3342526463","US" +"3342526464","3342528511","CA" +"3342528512","3342548167","US" +"3342548168","3342548175","GB" +"3342548176","3342548183","US" +"3342548184","3342548191","TN" +"3342548192","3342548575","US" +"3342548576","3342548607","GB" +"3342548608","3342552063","US" +"3342552064","3342553087","CA" +"3342553088","3342556127","US" +"3342556128","3342556159","CA" +"3342556160","3342556207","US" +"3342556208","3342556223","CA" +"3342556224","3342565375","US" +"3342565376","3342567423","CA" +"3342567424","3342579711","US" +"3342579712","3342581759","CA" +"3342581760","3342595071","US" +"3342595072","3342595839","CA" +"3342595840","3342596095","FR" +"3342596096","3342598143","US" +"3342598144","3342603263","CA" +"3342603264","3342604799","US" +"3342604800","3342605311","CA" +"3342605312","3342605567","US" +"3342605568","3342663679","CA" +"3342663680","3342795007","US" +"3342795008","3342795263","AP" +"3342795264","3342831103","US" +"3342831104","3342831359","IN" +"3342831360","3342878971","US" +"3342878972","3342878972","EU" +"3342878973","3343013887","US" +"3343013888","3343015935","CA" +"3343015936","3343046919","US" +"3343046920","3343046923","IT" +"3343046924","3343046939","US" +"3343046940","3343046943","RU" +"3343046944","3343046955","US" +"3343046956","3343046959","IT" +"3343046960","3343046963","BE" +"3343046964","3343046967","US" +"3343046968","3343046971","NL" +"3343046972","3343046987","US" +"3343046988","3343046991","CA" +"3343046992","3343047111","US" +"3343047112","3343047127","SG" +"3343047128","3343047143","US" +"3343047144","3343047151","IT" +"3343047152","3343047327","US" +"3343047328","3343047343","IT" +"3343047344","3343047423","US" +"3343047424","3343047439","RU" +"3343047440","3343047455","UA" +"3343047456","3343047519","US" +"3343047520","3343047535","IN" +"3343047536","3343047751","US" +"3343047752","3343047759","BR" +"3343047760","3343047791","US" +"3343047792","3343047799","PL" +"3343047800","3343047847","US" +"3343047848","3343047855","IT" +"3343047856","3343047863","US" +"3343047864","3343047871","RU" +"3343047872","3343047935","US" +"3343047936","3343047967","CA" +"3343047968","3343055871","US" +"3343055872","3343056895","CA" +"3343056896","3343108863","US" +"3343108864","3343109375","GB" +"3343109376","3343153151","US" +"3343153152","3343153167","CA" +"3343153168","3343153175","US" +"3343153176","3343155199","CA" +"3343155200","3343167487","US" +"3343167488","3343169535","CA" +"3343169536","3343171583","US" +"3343171584","3343172607","BM" +"3343172608","3343319295","US" +"3343319296","3343346175","CA" +"3343346176","3343346687","US" +"3343346688","3343355391","CA" +"3343355392","3343355903","US" +"3343355904","3343364095","CA" +"3343364096","3343365631","US" +"3343365632","3343372543","CA" +"3343372800","3343378431","US" +"3343378432","3343378447","BR" +"3343378448","3343380479","US" +"3343380480","3343384575","CA" +"3343384576","3343465471","US" +"3343465472","3343466495","JM" +"3343466496","3343858687","US" +"3343858688","3343859711","VG" +"3343859712","3343922975","US" +"3343922976","3343923007","PA" +"3343923008","3343923071","US" +"3343923072","3343923199","HK" +"3343923200","3344126975","US" +"3344126976","3344127999","CA" +"3344128000","3344138751","US" +"3344138752","3344139007","GB" +"3344139008","3344140287","US" +"3344140288","3344141311","CA" +"3344141312","3344144383","US" +"3344144384","3344146431","CA" +"3344146432","3344154623","US" +"3344154624","3344156671","GD" +"3344156672","3344158719","CA" +"3344158720","3344165631","US" +"3344165632","3344165663","MX" +"3344165664","3344166911","US" +"3344166912","3344168959","CA" +"3344168960","3344171007","US" +"3344171008","3344255999","CA" +"3344256000","3344261119","US" +"3344261120","3344268543","CA" +"3344268544","3344269311","US" +"3344269312","3344288767","CA" +"3344288768","3344289791","PR" +"3344289792","3344292863","US" +"3344292864","3344296447","CA" +"3344296960","3344297983","GD" +"3344297984","3344299007","US" +"3344299264","3344299519","CA" +"3344299520","3344299775","US" +"3344299776","3344300543","CA" +"3344300544","3344300799","US" +"3344300800","3344302079","CA" +"3344302080","3344379903","US" +"3344379904","3344380927","CA" +"3344380928","3344381015","US" +"3344381016","3344381023","GB" +"3344381024","3344381047","US" +"3344381048","3344381055","BR" +"3344381056","3344381087","US" +"3344381088","3344381095","CA" +"3344381096","3344381151","US" +"3344381152","3344381159","MX" +"3344381160","3344381199","US" +"3344381200","3344381207","AU" +"3344381208","3344381215","US" +"3344381216","3344381223","NG" +"3344381224","3344406527","US" +"3344406528","3344408575","CA" +"3344408576","3344415679","US" +"3344415680","3344415743","AR" +"3344415744","3344415999","ES" +"3344416000","3344429055","US" +"3344429056","3344429343","CA" +"3344429344","3344429375","US" +"3344429376","3344431103","CA" +"3344431104","3344486399","US" +"3344486400","3344488447","NL" +"3344488448","3344552959","US" +"3344552960","3344553215","GB" +"3344553216","3344633855","US" +"3344633856","3344637951","CH" +"3344637952","3344649215","US" +"3344649216","3344650239","PR" +"3344650240","3344652287","CA" +"3344652288","3344658431","US" +"3344658432","3344660479","CA" +"3344660480","3344670719","US" +"3344670720","3344671743","GP" +"3344671744","3344673983","US" +"3344673984","3344673991","SC" +"3344673992","3344676863","US" +"3344676864","3344678911","CA" +"3344678912","3344681983","US" +"3344681984","3344685055","CA" +"3344685056","3344694271","US" +"3344694272","3344695295","CA" +"3344695296","3344937471","US" +"3344937472","3344937983","EG" +"3344937984","3344938239","US" +"3344938240","3344938495","UZ" +"3344938496","3344955391","US" +"3344955392","3344955647","GB" +"3344955648","3344964607","US" +"3344964608","3344965631","CA" +"3344965632","3344973823","US" +"3344973824","3344974847","BM" +"3344974848","3344979839","US" +"3344979840","3344979967","A1" +"3344979968","3344982015","CA" +"3344982016","3345007615","US" +"3345007616","3345008639","CA" +"3345008640","3345010687","US" +"3345010688","3345011711","CA" +"3345011712","3345299455","US" +"3345299456","3345301503","CA" +"3345301504","3345310783","US" +"3345310784","3345310799","BR" +"3345310800","3345318943","US" +"3345318944","3345318975","HK" +"3345318976","3345321471","US" +"3345321472","3345321727","CA" +"3345321728","3345327103","US" +"3345327104","3345328127","CA" +"3345328128","3345333247","US" +"3345333248","3345334271","MF" +"3345334272","3345339391","US" +"3345339392","3345340415","CA" +"3345340416","3345375231","US" +"3345375232","3345377279","CA" +"3345377280","3345383423","US" +"3345383424","3345384447","CA" +"3345384448","3345390591","US" +"3345390592","3345391615","CA" +"3345391616","3345393151","US" +"3345393152","3345393279","AU" +"3345393280","3345393407","US" +"3345393408","3345393535","AU" +"3345393536","3345398783","US" +"3345398784","3345399807","BS" +"3345399808","3345401855","PR" +"3345401856","3345403903","CA" +"3345403904","3345408005","US" +"3345408006","3345408009","CZ" +"3345408010","3345408017","US" +"3345408018","3345408021","GB" +"3345408022","3345408092","US" +"3345408093","3345408094","GB" +"3345408095","3345408098","VE" +"3345408099","3345408110","US" +"3345408111","3345408114","AU" +"3345408115","3345408161","US" +"3345408162","3345408165","CA" +"3345408166","3345408189","US" +"3345408190","3345408193","AR" +"3345408194","3345408197","US" +"3345408198","3345408225","IN" +"3345408226","3345408227","GB" +"3345408228","3345408235","US" +"3345408236","3345408239","CN" +"3345408240","3345408319","US" +"3345408320","3345408323","GB" +"3345408324","3345408386","US" +"3345408387","3345408394","GB" +"3345408395","3345408415","US" +"3345408416","3345408420","AU" +"3345408421","3345408424","US" +"3345408425","3345408428","GB" +"3345408429","3345408460","US" +"3345408461","3345408464","IN" +"3345408465","3345408534","US" +"3345408535","3345408538","AU" +"3345408539","3345408542","CA" +"3345408543","3345408569","US" +"3345408570","3345408573","CA" +"3345408574","3345408577","US" +"3345408578","3345408589","GB" +"3345408590","3345408634","US" +"3345408635","3345408639","CA" +"3345408640","3345408651","US" +"3345408652","3345408655","CA" +"3345408656","3345408667","US" +"3345408668","3345408671","CA" +"3345408672","3345408697","US" +"3345408698","3345408701","GB" +"3345408702","3345408784","US" +"3345408785","3345408788","CA" +"3345408789","3345408888","US" +"3345408889","3345408892","MX" +"3345408893","3345408903","US" +"3345408904","3345408907","GB" +"3345408908","3345408949","US" +"3345408950","3345408993","IN" +"3345408994","3345409033","US" +"3345409034","3345409037","CA" +"3345409038","3345409085","US" +"3345409086","3345409089","CA" +"3345409090","3345409093","US" +"3345409094","3345409097","CA" +"3345409098","3345409175","US" +"3345409176","3345409179","CN" +"3345409180","3345409204","US" +"3345409205","3345409212","AU" +"3345409213","3345409217","US" +"3345409218","3345409221","AU" +"3345409222","3345409245","US" +"3345409246","3345409255","GB" +"3345409256","3345409558","US" +"3345409559","3345409562","CA" +"3345409563","3345409576","US" +"3345409577","3345409580","GB" +"3345409581","3345409706","US" +"3345409707","3345409718","IN" +"3345409719","3345409782","US" +"3345409783","3345409786","SG" +"3345409787","3345409816","US" +"3345409817","3345409820","GB" +"3345409821","3345409887","US" +"3345409888","3345409891","GB" +"3345409892","3345409899","US" +"3345409900","3345409903","CA" +"3345409904","3345409911","US" +"3345409912","3345409915","CA" +"3345409916","3345409919","AU" +"3345409920","3345409945","US" +"3345409946","3345409949","SG" +"3345409950","3345410032","US" +"3345410033","3345410036","GB" +"3345410037","3345418239","US" +"3345418240","3345419519","NL" +"3345419520","3345422847","US" +"3345423360","3345424383","TC" +"3345424384","3345430527","US" +"3345430528","3345432575","CA" +"3345432576","3345433599","GB" +"3345433600","3345433855","SG" +"3345433856","3345434879","US" +"3345434880","3345435135","ES" +"3345435136","3345435391","LU" +"3345435392","3345436671","DE" +"3345436672","3345436927","US" +"3345436928","3345437183","ES" +"3345437184","3345437695","GB" +"3345437696","3345437951","NL" +"3345438208","3345438463","GB" +"3345438464","3345438975","FR" +"3345439232","3345439743","US" +"3345439744","3345439999","FR" +"3345440000","3345440255","DE" +"3345440256","3345440767","US" +"3345440768","3345441791","DE" +"3345442304","3345442559","CL" +"3345442560","3345442815","JP" +"3345442816","3345443327","AT" +"3345443328","3345443583","CH" +"3345443584","3345443839","DE" +"3345444096","3345444607","US" +"3345444608","3345444676","CH" +"3345444677","3345444678","US" +"3345444679","3345445119","CH" +"3345445120","3345445375","US" +"3345445376","3345446399","GB" +"3345446656","3345446911","IT" +"3345446912","3345447679","US" +"3345447680","3345448447","FR" +"3345448448","3345448703","BE" +"3345448704","3345448959","DE" +"3345448960","3345666567","US" +"3345666568","3345666591","IN" +"3345666592","3345666639","NO" +"3345666640","3345667103","US" +"3345667104","3345667119","IN" +"3345667120","3346193919","US" +"3346193920","3346194431","A1" +"3346194432","3346196479","US" +"3346196480","3346197503","CA" +"3346197504","3346201599","US" +"3346201600","3346202623","CA" +"3346202624","3346219007","US" +"3346219008","3346221055","CA" +"3346221056","3346225151","US" +"3346225152","3346227199","CA" +"3346227200","3346234367","US" +"3346234368","3346235391","CA" +"3346235392","3346241535","US" +"3346241536","3346243583","CA" +"3346243584","3346282495","US" +"3346282496","3346284543","PR" +"3346284544","3346323455","US" +"3346323456","3346325503","CA" +"3346325504","3346327551","US" +"3346327552","3346328575","CA" +"3346328576","3346497535","US" +"3346497536","3346498559","CA" +"3346498560","3346499583","US" +"3346499584","3346501631","VI" +"3346501632","3346505783","US" +"3346505784","3346505791","GB" +"3346505792","3346505895","US" +"3346505896","3346505903","AU" +"3346505904","3346505951","US" +"3346505952","3346505959","CA" +"3346505960","3346506007","US" +"3346506008","3346506015","EG" +"3346506016","3346506023","US" +"3346506024","3346506031","CA" +"3346506032","3346506039","US" +"3346506040","3346506047","CA" +"3346506048","3346506111","US" +"3346506112","3346506119","JM" +"3346506120","3346506127","MX" +"3346506128","3346506159","US" +"3346506160","3346506167","VE" +"3346506168","3346506271","US" +"3346506272","3346506279","GB" +"3346506280","3346506287","CA" +"3346506288","3346506311","US" +"3346506312","3346506319","CO" +"3346506320","3346506391","US" +"3346506392","3346506399","GB" +"3346506400","3346506415","US" +"3346506416","3346506423","IN" +"3346506424","3346506447","US" +"3346506448","3346506455","CA" +"3346506456","3346506487","US" +"3346506488","3346506495","CA" +"3346506496","3346506527","US" +"3346506528","3346506535","GB" +"3346506536","3346506559","US" +"3346506560","3346506567","CA" +"3346506568","3346506575","TR" +"3346506576","3346506743","US" +"3346506744","3346506751","GB" +"3346506752","3346520063","US" +"3346520064","3346521087","CA" +"3346521088","3346522347","US" +"3346522348","3346522350","BD" +"3346522351","3346522401","US" +"3346522402","3346522404","IN" +"3346522405","3346522411","US" +"3346522412","3346522413","AE" +"3346522414","3346523113","US" +"3346523114","3346523121","TH" +"3346523122","3346523135","US" +"3346523136","3346523391","BO" +"3346523392","3346523647","RU" +"3346523648","3346523903","US" +"3346523904","3346524159","FR" +"3346524160","3346525183","CA" +"3346525184","3346528255","US" +"3346528256","3346529279","PR" +"3346529280","3346530303","CA" +"3346530304","3346691071","US" +"3346691072","3346692095","CA" +"3346692096","3346923519","US" +"3346923520","3346989055","CA" +"3346989056","3347014255","US" +"3347014256","3347014271","CY" +"3347014272","3347014367","US" +"3347014368","3347014399","CA" +"3347014400","3347015615","US" +"3347015616","3347015631","AE" +"3347015632","3347015647","RU" +"3347015648","3347016703","US" +"3347016704","3347017727","CA" +"3347017728","3347021823","US" +"3347021824","3347022847","CA" +"3347022848","3347030527","US" +"3347030528","3347030783","IN" +"3347030784","3347033087","US" +"3347033088","3347034111","CA" +"3347034112","3347039231","US" +"3347039232","3347040255","DM" +"3347040256","3347044351","US" +"3347044352","3347044607","IN" +"3347044608","3349268479","US" +"3349268480","3349268991","CA" +"3349268992","3349273087","US" +"3349273088","3349273343","CA" +"3349273344","3349341695","US" +"3349341696","3349341951","CA" +"3349341952","3349446911","US" +"3349446912","3349447167","CA" +"3349447168","3349532671","US" +"3349532672","3349533695","GB" +"3349533696","3349544959","US" +"3349544960","3349551103","CA" +"3349551104","3349553663","US" +"3349553664","3349608447","CA" +"3349608448","3349609215","US" +"3349609216","3349610495","CA" +"3349610496","3349614591","US" +"3349614592","3349617663","CA" +"3349617664","3349637119","US" +"3349637120","3349639167","CA" +"3349639168","3349640191","US" +"3349640192","3349641215","CA" +"3349641216","3349643263","US" +"3349643264","3349643487","CA" +"3349643488","3349643503","US" +"3349643504","3349644287","CA" +"3349644288","3349644656","US" +"3349644657","3349644672","GB" +"3349644673","3349645215","US" +"3349645216","3349645231","ID" +"3349645232","3349645311","US" +"3349645312","3349647359","CA" +"3349647360","3349649407","US" +"3349649408","3349653503","CA" +"3349653504","3349691903","US" +"3349691904","3349692031","CZ" +"3349692032","3349723260","US" +"3349723261","3349723265","CA" +"3349723266","3349723360","US" +"3349723361","3349723367","CA" +"3349723368","3349723996","US" +"3349723997","3349724000","LK" +"3349724001","3349724985","US" +"3349724986","3349724999","PK" +"3349725000","3349731327","US" +"3349731328","3349733375","CA" +"3349733376","3349739519","US" +"3349739520","3349739551","CA" +"3349739552","3349739559","US" +"3349739560","3349740543","CA" +"3349740544","3349987327","US" +"3349987328","3349996543","BM" +"3349996544","3349997055","KY" +"3349997056","3350003711","BM" +"3350003712","3350042879","US" +"3350042880","3350043135","KW" +"3350043136","3350134783","US" +"3350134784","3350146047","CA" +"3350146048","3350150143","US" +"3350150144","3350181887","CA" +"3350181888","3350182911","US" +"3350182912","3350200319","CA" +"3350200320","3350469119","US" +"3350469632","3350470655","CA" +"3350470656","3350475775","US" +"3350475776","3350476799","CA" +"3350476800","3350487039","US" +"3350487040","3350488063","CA" +"3350488064","3350495577","US" +"3350495578","3350495585","GB" +"3350495586","3350495602","US" +"3350495603","3350495604","BD" +"3350495605","3350495873","US" +"3350495874","3350495874","IN" +"3350495875","3350495881","US" +"3350495882","3350495882","IN" +"3350495883","3350496305","US" +"3350496306","3350496317","PT" +"3350496318","3350496447","US" +"3350496448","3350496455","PT" +"3350496456","3350496532","US" +"3350496533","3350496533","IN" +"3350496534","3350496721","US" +"3350496722","3350496723","IN" +"3350496724","3350514639","US" +"3350514640","3350514655","GB" +"3350514656","3350515135","US" +"3350515136","3350515167","GB" +"3350515168","3350561279","US" +"3350561280","3350561535","AP" +"3350561536","3350593535","US" +"3350593536","3350605823","CA" +"3350605824","3350606847","US" +"3350606848","3350607871","CA" +"3350607872","3350618111","US" +"3350618112","3350619135","CA" +"3350619136","3350623231","US" +"3350623232","3350624255","CA" +"3350624256","3350626303","US" +"3350626304","3350628351","CA" +"3350628352","3350642687","US" +"3350642688","3350643711","TC" +"3350643712","3350645759","US" +"3350645760","3350646783","CA" +"3350646784","3350648831","US" +"3350648832","3350650879","CA" +"3350650880","3350790399","US" +"3350790400","3350825727","CA" +"3350825728","3350825983","GB" +"3350825984","3350855679","CA" +"3350855680","3350862079","US" +"3350862080","3350864639","CL" +"3350864640","3350952495","US" +"3350952496","3350952511","PE" +"3350952512","3350952583","US" +"3350952584","3350952591","BA" +"3350952592","3350952767","US" +"3350952768","3350952831","GB" +"3350952832","3350953615","US" +"3350953616","3350953623","AR" +"3350953624","3350953631","NZ" +"3350953632","3350970367","US" +"3350970368","3350971391","CA" +"3350971392","3350979583","US" +"3350979584","3350980607","CA" +"3350980608","3350994943","US" +"3350994944","3350998015","CA" +"3350998016","3351002111","US" +"3351002112","3351003135","CA" +"3351003136","3351004159","US" +"3351004160","3351005183","CA" +"3351005184","3351015423","US" +"3351015424","3351016447","CA" +"3351016448","3351030783","US" +"3351030784","3351031807","CA" +"3351031808","3351034879","US" +"3351034880","3351035903","CA" +"3351035904","3351036927","US" +"3351036928","3351037951","CA" +"3351037952","3351043071","US" +"3351043072","3351043327","FR" +"3351043328","3351044095","CA" +"3351044096","3351045311","US" +"3351045312","3351045343","RU" +"3351045344","3351045439","US" +"3351045440","3351045471","CA" +"3351045472","3351045631","US" +"3351045632","3351045695","TW" +"3351045696","3351071743","US" +"3351071744","3351072767","CA" +"3351072768","3351074815","US" +"3351074816","3351076863","CA" +"3351076864","3351080959","US" +"3351080960","3351081983","AG" +"3351081984","3351086079","US" +"3351086080","3351087103","CA" +"3351087104","3351103487","US" +"3351103488","3351104511","CA" +"3351104512","3351104639","JP" +"3351104640","3351104703","SI" +"3351104704","3351104767","CH" +"3351104768","3351104831","US" +"3351104832","3351104895","GB" +"3351104896","3351104959","NL" +"3351104960","3351105023","SG" +"3351105024","3351105151","CA" +"3351105152","3351112703","US" +"3351112704","3351113727","CA" +"3351113728","3351232511","US" +"3351232512","3351232767","IL" +"3351232768","3351275519","US" +"3351275520","3351276543","CA" +"3351276544","3351293951","US" +"3351293952","3351294975","CA" +"3351294976","3351295999","US" +"3351296000","3351298047","CA" +"3351298048","3351303167","US" +"3351303168","3351304191","CA" +"3351304192","3351306239","US" +"3351306240","3351307263","VC" +"3351307264","3351307295","US" +"3351307296","3351307311","MX" +"3351307312","3351308287","US" +"3351308288","3351310335","CA" +"3351310336","3351326719","US" +"3351326720","3351328767","CA" +"3351328768","3351336959","US" +"3351336960","3351339007","CA" +"3351339008","3351357439","US" +"3351357440","3351359487","CA" +"3351359488","3351364607","US" +"3351364608","3351365119","AU" +"3351365120","3351372799","US" +"3351372800","3351373823","BM" +"3351373824","3351380223","US" +"3351380224","3351380479","CA" +"3351380480","3351380735","US" +"3351380736","3351381759","CA" +"3351381760","3351382271","US" +"3351382272","3351382527","CA" +"3351382528","3351383039","US" +"3351383040","3351383295","CA" +"3351383296","3351384319","US" +"3351384320","3351384575","CA" +"3351384576","3351385343","US" +"3351385344","3351385599","CA" +"3351385600","3351386111","US" +"3351386112","3351386367","PR" +"3351386368","3351386623","US" +"3351386624","3351386879","CA" +"3351386880","3351387135","US" +"3351387136","3351387391","CA" +"3351387392","3351387903","US" +"3351387904","3351388159","CA" +"3351388160","3351388927","US" +"3351388928","3351389439","CA" +"3351389440","3351390463","US" +"3351390464","3351390975","CA" +"3351390976","3351394815","US" +"3351394816","3351395071","CA" +"3351395072","3351396095","US" +"3351396096","3351396351","CA" +"3351396352","3351397375","US" +"3351397376","3351397631","CA" +"3351397632","3351397887","US" +"3351397888","3351398143","CA" +"3351398144","3351398399","US" +"3351398400","3351398655","CA" +"3351398656","3351398911","US" +"3351398912","3351399167","CA" +"3351399168","3351399423","US" +"3351399424","3351399935","CA" +"3351399936","3351400191","US" +"3351400192","3351400447","CA" +"3351400448","3351400959","US" +"3351400960","3351401215","CA" +"3351401216","3351401983","US" +"3351401984","3351402239","CA" +"3351402240","3351402495","US" +"3351402496","3351403775","CA" +"3351403776","3351404031","US" +"3351404032","3351404287","CA" +"3351404288","3351405311","US" +"3351405312","3351405567","CA" +"3351405568","3351405823","US" +"3351405824","3351406079","CA" +"3351406080","3351407103","US" +"3351407104","3351407359","CA" +"3351407360","3351407615","US" +"3351407616","3351407871","CA" +"3351407872","3351408895","US" +"3351408896","3351409407","CA" +"3351409408","3351410687","US" +"3351410688","3351410943","CA" +"3351410944","3351411711","US" +"3351411712","3351411967","CA" +"3351411968","3351412223","US" +"3351412224","3351412479","CA" +"3351412480","3351412735","US" +"3351412736","3351413247","CA" +"3351413248","3351413503","US" +"3351413504","3351413759","CA" +"3351413760","3351414271","US" +"3351414272","3351414783","CA" +"3351414784","3351415039","US" +"3351415040","3351415551","CA" +"3351415552","3351415807","US" +"3351415808","3351416063","CA" +"3351416064","3351417087","US" +"3351417088","3351417599","CA" +"3351417600","3351419647","US" +"3351419648","3351419903","CA" +"3351419904","3351423743","US" +"3351423744","3351423999","PR" +"3351424000","3351428351","US" +"3351428352","3351428607","CA" +"3351428608","3351436031","US" +"3351436032","3351436287","CA" +"3351436288","3351436543","US" +"3351436544","3351436799","PR" +"3351436800","3351437055","US" +"3351437056","3351437311","CA" +"3351437312","3351437567","US" +"3351437568","3351437823","CA" +"3351437824","3351438079","US" +"3351438080","3351438335","CA" +"3351438336","3351438591","US" +"3351438592","3351439103","CA" +"3351439104","3351441151","US" +"3351441152","3351441407","CA" +"3351441408","3351441919","US" +"3351441920","3351442175","CA" +"3351442176","3351483391","US" +"3351483392","3351484415","CA" +"3351484416","3351485439","US" +"3351485440","3351488511","CA" +"3351488512","3351497727","US" +"3351497728","3351498751","CA" +"3351498752","3351501823","US" +"3351501824","3351502847","JM" +"3351502848","3351503871","US" +"3351503872","3351504895","CA" +"3351504896","3351508991","US" +"3351508992","3351511039","CA" +"3351511040","3351524095","US" +"3351524096","3351524351","GB" +"3351524352","3351642111","US" +"3351642112","3351695871","CA" +"3351696384","3351696639","CA" +"3351696640","3351696895","US" +"3351697408","3351698431","CA" +"3351698432","3351850239","US" +"3351850240","3351850495","AP" +"3351850496","3351860223","US" +"3351860224","3351861247","KY" +"3351861248","3351869439","US" +"3351869440","3351871487","CA" +"3351871488","3351895551","US" +"3351895552","3351895807","CA" +"3351895808","3351904255","US" +"3351912448","3351927551","CA" +"3351927552","3351927807","US" +"3351927808","3351959551","CA" +"3351959552","3351961599","US" +"3351961600","3351969791","CA" +"3351969792","3352035327","IL" +"3352035328","3352036351","CA" +"3352036352","3352046591","US" +"3352046592","3352049663","CA" +"3352049664","3352051711","US" +"3352051712","3352055807","CA" +"3352055808","3352066047","US" +"3352066048","3352067071","CA" +"3352067072","3352068095","US" +"3352068096","3352069119","CA" +"3352069120","3352069919","US" +"3352069920","3352069935","CO" +"3352069936","3352069943","US" +"3352069944","3352069951","BD" +"3352069952","3352082431","US" +"3352082432","3352083455","JM" +"3352083456","3352088575","US" +"3352088576","3352090623","CA" +"3352090624","3352094719","US" +"3352094720","3352096767","VG" +"3352096768","3352559871","US" +"3352559872","3352563199","CA" +"3352563200","3352563455","US" +"3352563456","3352573951","CA" +"3352573952","3352574207","US" +"3352574208","3352583935","CA" +"3352583936","3352584191","US" +"3352584192","3352591359","CA" +"3352591360","3352591615","US" +"3352591616","3352615423","CA" +"3352615424","3352616959","US" +"3352616960","3352887295","CA" +"3352887296","3352918015","US" +"3352918016","3352919039","CA" +"3352919040","3353653503","US" +"3353653504","3353653759","GB" +"3353653760","3353722367","US" +"3353722368","3353722623","GB" +"3353722624","3353729023","US" +"3353729024","3353729279","HK" +"3353729280","3353730047","US" +"3353730048","3353731071","CA" +"3353731072","3353752581","US" +"3353752582","3353752585","FR" +"3353752586","3353752589","BE" +"3353752590","3353752677","US" +"3353752678","3353752681","ES" +"3353752682","3353752716","US" +"3353752717","3353752720","IT" +"3353752721","3353752828","US" +"3353752829","3353752830","FR" +"3353752831","3353752987","US" +"3353752988","3353752991","GB" +"3353752992","3353753055","US" +"3353753056","3353753059","BR" +"3353753060","3353780223","US" +"3353780224","3353780479","GB" +"3353780480","3353942527","US" +"3353942528","3353943039","CA" +"3353943040","3353979647","US" +"3353979648","3353979903","CA" +"3353979904","3353982719","US" +"3353982720","3353983231","CA" +"3353983232","3353993215","US" +"3354001408","3354066943","US" +"3354066944","3354132479","CA" +"3354132480","3354591231","US" +"3354591232","3354656767","CA" +"3354656768","3354731018","US" +"3354731019","3354731019","EU" +"3354731020","3354731519","US" +"3354731520","3354731775","AP" +"3354731776","3354770687","US" +"3354770688","3354770943","CA" +"3354770944","3354788095","US" +"3354788096","3354806399","CA" +"3354806400","3354806463","US" +"3354806464","3354807551","CA" +"3354807552","3354810367","US" +"3354810368","3354814975","CA" +"3354814976","3354815231","US" +"3354815232","3354823423","CA" +"3354823424","3354823679","US" +"3354823680","3354853119","CA" +"3354853120","3354853375","US" +"3354853376","3354918911","CA" +"3354918912","3354955775","US" +"3354955776","3354956031","AR" +"3354956032","3355013119","US" +"3355013120","3355017215","CA" +"3355017216","3355052287","US" +"3355052288","3355053311","CA" +"3355053312","3355053567","US" +"3355054080","3355260927","US" +"3355260928","3355262719","CA" +"3355262720","3355272189","US" +"3355272190","3355272190","EU" +"3355272191","3355310591","US" +"3355310592","3355311103","CA" +"3355311104","3355319295","US" +"3355319296","3355320319","CA" +"3355320320","3355324415","US" +"3355324416","3355328511","CA" +"3355328512","3355336703","US" +"3355344896","3355351039","US" +"3355351040","3355351295","CA" +"3355351296","3355372287","US" +"3355372288","3355372543","CA" +"3355372544","3355384095","US" +"3355384096","3355384127","AR" +"3355384128","3355384831","US" +"3355384832","3355385855","CA" +"3355385856","3355407359","US" +"3355407360","3355408383","PR" +"3355408384","3355412479","US" +"3355412480","3355412991","BE" +"3355412992","3355430911","US" +"3355430912","3355432959","A1" +"3355432960","3355443199","US" +"3355443200","3355445247","CO" +"3355445248","3355447295","BR" +"3355447296","3355447551","CU" +"3355447552","3355447807","AR" +"3355447808","3355448063","HT" +"3355448064","3355448319","AR" +"3355448320","3355449343","AN" +"3355449344","3355450367","CU" +"3355450368","3355451391","EC" +"3355451392","3355459071","BR" +"3355459328","3355459583","EC" +"3355459584","3355459839","PA" +"3355459840","3355460095","VE" +"3355460096","3355460351","CL" +"3355460352","3355461887","BR" +"3355461888","3355463423","EC" +"3355463424","3355463935","AR" +"3355463936","3355464191","BR" +"3355464192","3355464447","CL" +"3355464448","3355464959","MX" +"3355464960","3355465727","BR" +"3355465728","3355465983","UY" +"3355465984","3355467263","BR" +"3355467264","3355467519","US" +"3355467520","3355467775","MX" +"3355467776","3355468799","AR" +"3355468800","3355469567","BR" +"3355469568","3355470591","MX" +"3355470592","3355470847","PE" +"3355470848","3355471103","CL" +"3355471104","3355471359","MX" +"3355471360","3355471615","PE" +"3355471616","3355472383","MX" +"3355472384","3355472639","BR" +"3355472640","3355473407","CL" +"3355473408","3355473919","PE" +"3355473920","3355475199","CL" +"3355475200","3355478015","MX" +"3355478016","3355478271","PE" +"3355478272","3355478783","US" +"3355478784","3355479039","VE" +"3355479040","3355479551","CL" +"3355479552","3355479807","PE" +"3355479808","3355480063","MX" +"3355480064","3355485183","CL" +"3355485184","3355487743","PE" +"3355487744","3355487999","CL" +"3355488000","3355488255","AR" +"3355488256","3355488767","GT" +"3355488768","3355489023","PA" +"3355489024","3355489279","CR" +"3355489280","3355489535","SV" +"3355489536","3355491071","AR" +"3355491072","3355491327","CO" +"3355491328","3355494655","AR" +"3355494656","3355494911","CO" +"3355494912","3355495423","PA" +"3355495424","3355496447","UY" +"3355496448","3355498495","AR" +"3355498496","3355500543","US" +"3355500544","3355508735","AR" +"3355508736","3355510271","VE" +"3355510272","3355510527","EC" +"3355510528","3355510783","AR" +"3355510784","3355512831","VE" +"3355512832","3355516927","CL" +"3355516928","3355525119","AR" +"3355525120","3355535359","CO" +"3355535360","3355537407","TT" +"3355537664","3355537919","AR" +"3355537920","3355538175","NI" +"3355538176","3355538431","CL" +"3355538432","3355539199","AR" +"3355539200","3355539455","VE" +"3355539456","3355540479","CL" +"3355540480","3355540735","CO" +"3355540736","3355540991","BZ" +"3355540992","3355541503","CO" +"3355541504","3355545599","CL" +"3355545600","3355547647","VE" +"3355547648","3355547903","NI" +"3355547904","3355548159","GT" +"3355548160","3355548671","DO" +"3355548672","3355549695","SR" +"3355549696","3355549951","BM" +"3355549952","3355550207","EC" +"3355550208","3355552767","VE" +"3355552768","3355553023","EC" +"3355553024","3355553279","CO" +"3355553280","3355553535","CL" +"3355553536","3355553791","CO" +"3355553792","3355555839","PE" +"3355555840","3355557887","VE" +"3355557888","3355559935","CO" +"3355559936","3355561983","PY" +"3355561984","3355564031","SR" +"3355566080","3355574271","AR" +"3355574272","3355576319","CL" +"3355576320","3355578367","VE" +"3355578368","3355582463","CL" +"3355582464","3355590655","UY" +"3355590656","3355592703","CO" +"3355592704","3355604991","CL" +"3355604992","3355607039","AR" +"3355607040","3355615231","HT" +"3355615232","3355623423","SR" +"3355623424","3355639807","CL" +"3355639808","3355642367","VE" +"3355642368","3355642879","PA" +"3355642880","3355643903","UY" +"3355643904","3355647999","BR" +"3355648000","3355668991","AR" +"3355668992","3355669247","PE" +"3355669248","3355672575","AR" +"3355672576","3355677183","CO" +"3355677184","3355677439","GT" +"3355677440","3355682815","CO" +"3355682816","3355684863","AR" +"3355684864","3355686911","TT" +"3355686912","3355688959","AR" +"3355688960","3355689471","CO" +"3355689472","3355689727","HN" +"3355689728","3355689983","AR" +"3355689984","3355693055","PA" +"3355693056","3355695103","CL" +"3355695104","3355697151","AR" +"3355697152","3355701503","HN" +"3355701504","3355702015","PE" +"3355702016","3355702271","AR" +"3355702272","3355703295","CO" +"3355703296","3355705343","PY" +"3355705344","3355709439","MX" +"3355709440","3355713535","CO" +"3355713536","3355720447","MX" +"3355720448","3355720703","AR" +"3355720704","3355722751","MX" +"3355722752","3355723263","AR" +"3355723264","3355746303","MX" +"3355746304","3355754495","HT" +"3355754496","3355770879","PE" +"3355770880","3355773183","PR" +"3355773184","3355773439","BR" +"3355773440","3355773695","AR" +"3355773696","3355773951","PR" +"3355773952","3355774975","CU" +"3355774976","3355779071","VE" +"3355781120","3355783167","VE" +"3355783168","3355785215","AR" +"3355787264","3355803647","AR" +"3355803648","3355820031","VE" +"3355820032","3355836415","AR" +"3355836416","3355841023","EC" +"3355841024","3355841279","CL" +"3355841280","3355843327","EC" +"3355843328","3355843583","VE" +"3355843584","3355844863","EC" +"3355844864","3355845119","CL" +"3355845120","3355845375","EC" +"3355845376","3355848959","BR" +"3355849216","3355849727","AR" +"3355849728","3355849983","PA" +"3355849984","3355850495","CL" +"3355850496","3355850751","NI" +"3355850752","3355852799","AN" +"3355852800","3355856639","CL" +"3355856640","3355856895","PA" +"3355856896","3355858943","EC" +"3355860992","3355869183","CL" +"3355869184","3355870719","BR" +"3355870720","3355871231","CR" +"3355873280","3355875327","AN" +"3355875328","3355877375","VE" +"3355877376","3355885567","CO" +"3355885568","3355901951","GT" +"3355901952","3355902975","BR" +"3355902976","3355903999","CL" +"3355904000","3355905535","BR" +"3355905536","3355905791","PY" +"3355905792","3355906047","AR" +"3355906048","3355910143","CL" +"3355910144","3355918335","AN" +"3355918336","3355923455","EC" +"3355923456","3355924479","UY" +"3355924480","3355926527","TT" +"3355934720","3355938815","AR" +"3355942912","3355947007","BO" +"3355947008","3355949055","AR" +"3355949056","3355951103","AN" +"3355951104","3355967487","EC" +"3355967488","3356033023","VE" +"3356033024","3356033791","BR" +"3356033792","3356034047","CL" +"3356034048","3356035071","PY" +"3356035072","3356037119","MX" +"3356037120","3356041215","CO" +"3356041216","3356049407","CR" +"3356049408","3356049663","CL" +"3356049664","3356051455","BR" +"3356051456","3356051711","CO" +"3356051712","3356051967","CL" +"3356051968","3356052223","GT" +"3356052224","3356052479","AR" +"3356052480","3356052991","BR" +"3356053248","3356054015","CL" +"3356054016","3356054527","US" +"3356054528","3356057599","BR" +"3356057600","3356057855","EC" +"3356057856","3356059135","CL" +"3356059136","3356060671","BR" +"3356060672","3356061695","CL" +"3356061696","3356062463","BR" +"3356062464","3356062719","JM" +"3356062720","3356064255","BR" +"3356064256","3356064511","CL" +"3356064512","3356065791","BR" +"3356065792","3356066047","CL" +"3356066048","3356069119","BR" +"3356069120","3356069631","CL" +"3356069632","3356070143","BR" +"3356070144","3356070655","CL" +"3356070656","3356070911","AR" +"3356070912","3356071423","BR" +"3356071424","3356072447","CL" +"3356072448","3356073215","CR" +"3356073216","3356073471","AR" +"3356073472","3356075263","BR" +"3356075264","3356076287","BO" +"3356076288","3356078079","BR" +"3356078080","3356078335","EC" +"3356078336","3356079359","CL" +"3356079360","3356080895","BR" +"3356080896","3356082431","NI" +"3356082432","3356082687","CL" +"3356082688","3356082943","AR" +"3356082944","3356083967","CL" +"3356083968","3356084479","BR" +"3356084480","3356084735","CL" +"3356084736","3356085247","BR" +"3356085248","3356085759","CL" +"3356085760","3356086271","BR" +"3356086272","3356086527","AR" +"3356086528","3356087295","CR" +"3356087296","3356087807","AR" +"3356087808","3356088063","BR" +"3356088064","3356088319","CL" +"3356088320","3356089087","TT" +"3356089088","3356089343","AR" +"3356089344","3356090623","BR" +"3356090624","3356090879","CL" +"3356090880","3356091135","BR" +"3356091136","3356091391","AR" +"3356091392","3356091647","CL" +"3356091648","3356091903","BR" +"3356091904","3356092927","CL" +"3356092928","3356093183","BR" +"3356093184","3356093951","AR" +"3356093952","3356094975","CL" +"3356094976","3356096255","AR" +"3356096256","3356096511","CL" +"3356096512","3356096767","EC" +"3356096768","3356097791","BR" +"3356097792","3356098303","AR" +"3356098304","3356098559","GT" +"3356098560","3356099583","CL" +"3356099584","3356100607","BR" +"3356100608","3356102399","CL" +"3356102400","3356102655","PA" +"3356102656","3356105727","CL" +"3356105728","3356106751","SV" +"3356106752","3356113919","BR" +"3356113920","3356114943","UY" +"3356114944","3356123135","PE" +"3356123136","3356131839","AR" +"3356131840","3356132351","PE" +"3356132352","3356134143","BR" +"3356134144","3356134655","AR" +"3356134656","3356134911","BR" +"3356134912","3356135167","DO" +"3356135168","3356135423","MX" +"3356135424","3356135679","BR" +"3356135680","3356135935","CR" +"3356135936","3356136191","BR" +"3356136192","3356137471","EC" +"3356137472","3356137727","JM" +"3356137728","3356138239","BR" +"3356138240","3356138495","US" +"3356138496","3356139519","BR" +"3356139520","3356139775","US" +"3356139776","3356140031","AR" +"3356140032","3356140287","DO" +"3356140288","3356140799","BR" +"3356140800","3356141311","BM" +"3356141312","3356142847","CL" +"3356142848","3356145151","BR" +"3356145152","3356145407","CL" +"3356145408","3356145663","BR" +"3356145664","3356145919","CL" +"3356145920","3356146175","BR" +"3356146176","3356146431","AR" +"3356146432","3356146687","BR" +"3356146688","3356146943","PE" +"3356146944","3356147199","BR" +"3356147200","3356147455","CL" +"3356147456","3356148223","BR" +"3356148224","3356148479","BZ" +"3356148480","3356148735","CL" +"3356148736","3356148991","AR" +"3356148992","3356149503","MX" +"3356149504","3356149759","AR" +"3356149760","3356150015","MX" +"3356150016","3356150527","AR" +"3356150528","3356150783","PA" +"3356150784","3356151039","AR" +"3356151040","3356151295","NI" +"3356151296","3356151807","AR" +"3356151808","3356152063","CL" +"3356152064","3356152575","BR" +"3356152576","3356152831","CL" +"3356152832","3356154623","MX" +"3356154624","3356154879","AR" +"3356154880","3356156671","CL" +"3356156672","3356156927","BR" +"3356156928","3356157951","PY" +"3356157952","3356158207","CL" +"3356158208","3356158463","MX" +"3356158464","3356158719","CL" +"3356158976","3356159999","CL" +"3356160000","3356160255","MX" +"3356160256","3356160511","GT" +"3356160512","3356160767","CL" +"3356160768","3356161279","MX" +"3356161280","3356161535","BR" +"3356161536","3356162559","MX" +"3356162560","3356162815","PE" +"3356162816","3356163583","CL" +"3356163584","3356163839","VE" +"3356163840","3356164095","CL" +"3356164096","3356171519","BR" +"3356171520","3356171775","AR" +"3356171776","3356172031","NI" +"3356172032","3356172287","SV" +"3356172288","3356172543","PE" +"3356172544","3356172799","AR" +"3356172800","3356174335","PE" +"3356174336","3356176383","CO" +"3356176384","3356180479","PE" +"3356180480","3356190719","CL" +"3356190720","3356192767","DO" +"3356192768","3356194815","AR" +"3356196864","3356229631","VE" +"3356229632","3356233727","BR" +"3356233728","3356237823","CL" +"3356237824","3356246015","GT" +"3356246016","3356262655","MX" +"3356262656","3356263167","CL" +"3356263168","3356263423","BR" +"3356263424","3356263679","CL" +"3356263680","3356265215","AR" +"3356265216","3356265471","BR" +"3356265472","3356267007","CL" +"3356267008","3356267263","PY" +"3356267264","3356268799","CL" +"3356268800","3356269055","PA" +"3356269056","3356269311","AR" +"3356269312","3356269823","UY" +"3356269824","3356270079","BR" +"3356270080","3356272383","MX" +"3356272384","3356272639","CR" +"3356272640","3356272895","US" +"3356272896","3356273151","EC" +"3356273152","3356273407","CO" +"3356273408","3356273663","CL" +"3356273664","3356274431","SV" +"3356274432","3356278783","CO" +"3356278784","3356279039","AR" +"3356279040","3356279295","VE" +"3356279296","3356279807","CL" +"3356279808","3356280831","EC" +"3356280832","3356282879","AR" +"3356282880","3356284927","PA" +"3356284928","3356286975","AR" +"3356286976","3356286991","US" +"3356286992","3356287007","GT" +"3356287008","3356287023","HN" +"3356287024","3356287039","GT" +"3356287040","3356287047","US" +"3356287048","3356287071","GT" +"3356287072","3356287087","SV" +"3356287088","3356287103","US" +"3356287104","3356287151","GT" +"3356287152","3356287359","US" +"3356287360","3356287367","GT" +"3356287368","3356287487","US" +"3356287488","3356287743","SV" +"3356287744","3356288255","HN" +"3356288256","3356288767","SV" +"3356288768","3356289023","GT" +"3356289024","3356289791","SV" +"3356289792","3356289799","US" +"3356289800","3356289807","GT" +"3356289808","3356289823","SV" +"3356289824","3356289887","US" +"3356289888","3356289919","SV" +"3356289920","3356289951","US" +"3356289952","3356289983","GT" +"3356289984","3356290303","US" +"3356290304","3356290559","SV" +"3356290560","3356291071","CR" +"3356291072","3356293119","TT" +"3356293120","3356295167","AW" +"3356295168","3356297215","CL" +"3356297216","3356299263","BR" +"3356299264","3356305663","MX" +"3356305664","3356307455","AR" +"3356307456","3356316415","MX" +"3356316416","3356317695","AR" +"3356317696","3356328959","MX" +"3356328960","3356329983","HN" +"3356329984","3356332031","GF" +"3356332032","3356334079","CU" +"3356334080","3356336127","BO" +"3356336128","3356337151","SV" +"3356337152","3356337663","HN" +"3356337664","3356337919","SV" +"3356337920","3356338175","HN" +"3356338176","3356340223","SV" +"3356340224","3356340991","HN" +"3356340992","3356341759","SV" +"3356341760","3356342015","HN" +"3356342016","3356343295","SV" +"3356343296","3356343551","HN" +"3356343552","3356344319","SV" +"3356344320","3356360703","CO" +"3356360704","3356362751","CL" +"3356362752","3356364799","VE" +"3356364800","3356368895","MX" +"3356368896","3356369407","BR" +"3356369408","3356369663","EC" +"3356369664","3356370175","BR" +"3356370176","3356370943","AR" +"3356370944","3356372991","CO" +"3356372992","3356375039","CU" +"3356377088","3356379647","CL" +"3356379648","3356380159","AR" +"3356380160","3356380927","CL" +"3356380928","3356381183","DO" +"3356381184","3356381439","CL" +"3356381440","3356381695","PA" +"3356381696","3356381951","CL" +"3356381952","3356382207","EC" +"3356382208","3356389375","CL" +"3356389376","3356389887","CO" +"3356389888","3356390399","CL" +"3356390400","3356390655","AR" +"3356390656","3356391167","CL" +"3356391168","3356391423","PA" +"3356393472","3356426239","CL" +"3356426240","3356491775","US" +"3356491776","3356493823","PE" +"3356493824","3356495871","ZA" +"3356495872","3356499967","AR" +"3356499968","3356508159","MX" +"3356508160","3356508671","AR" +"3356508672","3356509183","CR" +"3356509184","3356510207","VE" +"3356510208","3356511999","AR" +"3356512000","3356512255","CO" +"3356512256","3356514303","AR" +"3356514304","3356514559","US" +"3356514560","3356514815","AR" +"3356514816","3356515327","DO" +"3356515328","3356515839","AN" +"3356515840","3356516095","EC" +"3356516096","3356516351","VE" +"3356516352","3356520447","AR" +"3356520448","3356521471","CL" +"3356521472","3356521727","AR" +"3356521728","3356522495","CO" +"3356522496","3356557311","AR" +"3356557312","3356819455","BR" +"3356819456","3356884991","CO" +"3356884992","3356950527","CL" +"3356950528","3357016063","MX" +"3357016064","3357048831","CO" +"3357057024","3357065215","PE" +"3357065216","3357073407","EC" +"3357073408","3357077503","CL" +"3357077504","3357081599","AR" +"3357081600","3357114367","CO" +"3357114368","3357138943","EC" +"3357138944","3357147135","CO" +"3357147136","3357179903","AR" +"3357179904","3357188095","CO" +"3357188096","3357190143","VE" +"3357190144","3357192191","DO" +"3357192192","3357194239","PY" +"3357194240","3357196287","AR" +"3357196288","3357212671","AN" +"3357212672","3357368319","CL" +"3357368320","3357376511","CO" +"3357376512","3357403135","CL" +"3357403136","3357405183","CO" +"3357405184","3357407231","EC" +"3357407232","3357409279","AR" +"3357409280","3357411327","BR" +"3357411328","3357412351","VE" +"3357412352","3357412863","PE" +"3357412864","3357413119","US" +"3357413120","3357413375","FR" +"3357413376","3357414399","US" +"3357414400","3357415679","PR" +"3357415680","3357416447","MX" +"3357416448","3357417215","VE" +"3357417216","3357417471","US" +"3357417472","3357418495","CL" +"3357418496","3357418751","NI" +"3357418752","3357419007","PR" +"3357419008","3357419519","GT" +"3357419520","3357420031","SZ" +"3357420032","3357421055","CO" +"3357421056","3357421311","CL" +"3357421312","3357421567","CO" +"3357421568","3357422847","NI" +"3357422848","3357423103","PR" +"3357423104","3357423359","CO" +"3357423360","3357424639","VE" +"3357424640","3357425663","CL" +"3357425664","3357442047","CO" +"3357442048","3357442303","NI" +"3357442304","3357442319","GT" +"3357442320","3357442327","HN" +"3357442328","3357442335","GT" +"3357442336","3357442343","HN" +"3357442344","3357442391","GT" +"3357442392","3357442395","HN" +"3357442396","3357442559","GT" +"3357442560","3357442815","NI" +"3357442816","3357442847","GT" +"3357442848","3357442879","SV" +"3357442880","3357442959","GT" +"3357442960","3357442967","SV" +"3357442968","3357443007","GT" +"3357443008","3357443071","SV" +"3357443072","3357443583","GT" +"3357443584","3357444351","HN" +"3357444352","3357444479","GT" +"3357444480","3357444487","HN" +"3357444488","3357444623","GT" +"3357444624","3357444631","SV" +"3357444632","3357444647","GT" +"3357444648","3357444655","SV" +"3357444656","3357444663","GT" +"3357444664","3357444671","SV" +"3357444672","3357448407","GT" +"3357448408","3357448415","SV" +"3357448416","3357448447","GT" +"3357448448","3357448703","SV" +"3357448704","3357448959","GT" +"3357448960","3357449487","HN" +"3357449488","3357449695","GT" +"3357449696","3357449703","HN" +"3357449704","3357450751","GT" +"3357450752","3357451007","SV" +"3357451008","3357451119","GT" +"3357451120","3357451127","HN" +"3357451128","3357451143","GT" +"3357451144","3357451151","HN" +"3357451152","3357451343","GT" +"3357451344","3357451351","HN" +"3357451352","3357451503","GT" +"3357451504","3357451519","HN" +"3357451520","3357451575","GT" +"3357451576","3357451583","NI" +"3357451584","3357452287","GT" +"3357452288","3357452799","HN" +"3357452800","3357453055","NI" +"3357453056","3357453311","GT" +"3357453312","3357453567","HN" +"3357453568","3357454847","GT" +"3357454848","3357455103","HN" +"3357455104","3357455359","SV" +"3357455360","3357458431","GT" +"3357458432","3357474815","CL" +"3357474816","3357475887","AR" +"3357475888","3357475903","VE" +"3357475904","3357475999","AR" +"3357476000","3357476015","VE" +"3357476016","3357476031","AR" +"3357476032","3357476047","VE" +"3357476048","3357476287","AR" +"3357476288","3357476351","VE" +"3357476352","3357476479","AR" +"3357476480","3357476607","EC" +"3357476608","3357476735","AR" +"3357476736","3357476799","US" +"3357476800","3357477247","AR" +"3357477248","3357477375","EC" +"3357477376","3357477423","AR" +"3357477424","3357477431","EC" +"3357477432","3357477887","AR" +"3357477888","3357478911","CO" +"3357478912","3357479135","AR" +"3357479136","3357479151","CO" +"3357479152","3357479551","AR" +"3357479552","3357479679","CO" +"3357479680","3357479871","AR" +"3357479872","3357479879","CO" +"3357479880","3357480335","AR" +"3357480336","3357480343","CO" +"3357480344","3357480359","AR" +"3357480360","3357480367","CO" +"3357480368","3357480463","AR" +"3357480464","3357480479","CO" +"3357480480","3357480959","AR" +"3357480960","3357483007","EC" +"3357483008","3357491199","CL" +"3357491200","3357499391","CO" +"3357499392","3357507583","PE" +"3357507584","3357515775","VE" +"3357515776","3357523967","SV" +"3357523968","3357532159","CO" +"3357532160","3357536255","AR" +"3357540352","3357556735","AR" +"3357556736","3357556991","VE" +"3357556992","3357557759","AR" +"3357557760","3357558783","EC" +"3357558784","3357559167","AR" +"3357559168","3357559295","EC" +"3357559296","3357559551","CA" +"3357559552","3357559935","AR" +"3357559936","3357560063","VE" +"3357560064","3357560247","AR" +"3357560248","3357560255","VE" +"3357560256","3357560263","AR" +"3357560264","3357560271","VE" +"3357560272","3357560319","AR" +"3357560320","3357560575","MX" +"3357560576","3357560831","US" +"3357560832","3357561855","CO" +"3357561856","3357581311","AR" +"3357581312","3357589503","CL" +"3357589504","3357605887","BZ" +"3357605888","3357736959","MX" +"3357736960","3357745151","VE" +"3357745152","3357753343","CO" +"3357753344","3357757487","VE" +"3357757488","3357757495","BO" +"3357757496","3357773823","VE" +"3357773824","3357775871","PA" +"3357775872","3357776895","UY" +"3357777920","3357786111","GT" +"3357786112","3357802495","VE" +"3357802496","3357868031","MX" +"3357868032","3357933567","PE" +"3357933568","3358064639","MX" +"3358064640","3358130175","UY" +"3358130176","3358131199","EC" +"3358131200","3358131327","AR" +"3358131328","3358131455","CO" +"3358131456","3358131983","AR" +"3358131984","3358131999","CO" +"3358132000","3358133439","AR" +"3358133440","3358133471","VE" +"3358133472","3358133631","AR" +"3358133632","3358133759","VE" +"3358133760","3358142975","AR" +"3358142976","3358143231","CO" +"3358143232","3358143487","AR" +"3358143488","3358143999","US" +"3358144000","3358144255","AR" +"3358144256","3358144511","CL" +"3358144512","3358145023","VE" +"3358145024","3358149719","AR" +"3358149720","3358149727","CO" +"3358149728","3358150015","AR" +"3358150016","3358150143","CO" +"3358150144","3358150423","AR" +"3358150424","3358150431","CO" +"3358150432","3358150495","AR" +"3358150496","3358150527","CO" +"3358150528","3358150655","AR" +"3358150656","3358150783","EC" +"3358150784","3358151263","AR" +"3358151264","3358151271","EC" +"3358151272","3358151423","AR" +"3358151424","3358151551","EC" +"3358151552","3358151679","AR" +"3358151680","3358151807","PE" +"3358151808","3358151935","AR" +"3358151936","3358152191","PE" +"3358152192","3358152559","AR" +"3358152560","3358152575","PE" +"3358152576","3358152703","AR" +"3358152704","3358152959","US" +"3358152960","3358153279","AR" +"3358153280","3358153311","US" +"3358153312","3358153471","AR" +"3358153472","3358153535","US" +"3358153536","3358153599","AR" +"3358153600","3358153663","PR" +"3358153664","3358153855","AR" +"3358153856","3358153983","EC" +"3358153984","3358154239","US" +"3358154240","3358154751","CL" +"3358154752","3358158847","PE" +"3358158848","3358159159","AR" +"3358159160","3358159167","US" +"3358159168","3358159487","AR" +"3358159488","3358159615","EC" +"3358159616","3358159871","US" +"3358159872","3358160895","VE" +"3358160896","3358236671","AR" +"3358236672","3358244863","CL" +"3358244864","3358261247","DO" +"3358261248","3358264063","AR" +"3358264064","3358264319","PY" +"3358264320","3358326783","AR" +"3358326784","3358392319","VE" +"3358392320","3358457855","AR" +"3358457856","3358523391","PA" +"3358523392","3358543871","AR" +"3358543872","3358544127","MX" +"3358544128","3358558463","AR" +"3358558464","3358558591","PY" +"3358558592","3358559231","AR" +"3358559232","3358560255","VE" +"3358560256","3358561791","AR" +"3358561792","3358562303","VE" +"3358562304","3358563327","PE" +"3358563328","3358563839","CO" +"3358563840","3358563967","AR" +"3358563968","3358564095","CO" +"3358564096","3358564351","MX" +"3358564352","3358567423","AR" +"3358567424","3358568959","CO" +"3358568960","3358569471","AR" +"3358569472","3358570495","VE" +"3358570496","3358570751","MX" +"3358570752","3358571263","PE" +"3358571264","3358571775","MX" +"3358571776","3358577151","AR" +"3358577152","3358577407","PE" +"3358577408","3358578431","AR" +"3358578432","3358578687","VE" +"3358578688","3358579967","CO" +"3358579968","3358580223","AR" +"3358580224","3358580735","MX" +"3358580736","3358588927","AR" +"3358588928","3358654463","PE" +"3358654464","3358658559","AR" +"3358658560","3358660607","CL" +"3358660608","3358662655","AR" +"3358666752","3358695423","AR" +"3358695424","3358703615","GT" +"3358703616","3358715903","AR" +"3358715904","3358717951","EC" +"3358717952","3358719999","US" +"3358720000","3358720075","PR" +"3358720076","3358720083","DO" +"3358720084","3358728191","PR" +"3358728192","3358736383","CL" +"3358736384","3358737111","BB" +"3358737112","3358737119","CA" +"3358737120","3358738175","BB" +"3358738176","3358738687","GD" +"3358738688","3358739711","BB" +"3358739712","3358739967","KN" +"3358739968","3358744575","BB" +"3358744576","3358752767","CL" +"3358752768","3358756863","BB" +"3358756864","3358760959","CL" +"3358760960","3358769151","AR" +"3358769152","3358777343","HT" +"3358777344","3358779391","CR" +"3358779392","3358781439","EC" +"3358781440","3358851071","AR" +"3358851072","3358982143","MX" +"3358982144","3359047679","CL" +"3359047680","3359080447","AR" +"3359080448","3359096831","CU" +"3359096832","3359105023","CL" +"3359105024","3359109119","EC" +"3359109120","3359111167","AR" +"3359111168","3359113215","EC" +"3359113216","3359244287","MX" +"3359244288","3359248383","US" +"3359248384","3359248399","BR" +"3359248400","3359249679","US" +"3359249680","3359249695","AR" +"3359249696","3359249727","BR" +"3359249728","3359249759","US" +"3359249760","3359249791","BR" +"3359249792","3359249887","AR" +"3359249888","3359250431","US" +"3359250432","3359250815","AR" +"3359250816","3359250879","US" +"3359250880","3359250943","AR" +"3359250944","3359251455","US" +"3359251456","3359251711","AR" +"3359251712","3359251967","US" +"3359251968","3359252031","AR" +"3359252032","3359252039","US" +"3359252040","3359252047","IT" +"3359252048","3359252063","US" +"3359252064","3359252095","AR" +"3359252096","3359252159","US" +"3359252160","3359252223","AR" +"3359252224","3359256575","US" +"3359256576","3359256639","BR" +"3359256640","3359257087","US" +"3359257088","3359257103","BR" +"3359257104","3359257127","AR" +"3359257128","3359257135","BR" +"3359257136","3359257151","US" +"3359257152","3359257183","BR" +"3359257184","3359257215","US" +"3359257216","3359257247","AR" +"3359257248","3359257263","BR" +"3359257264","3359257279","US" +"3359257280","3359257311","AR" +"3359257312","3359260671","US" +"3359260672","3359268863","BO" +"3359268864","3359277055","AR" +"3359277056","3359285247","UY" +"3359285248","3359293439","BO" +"3359293440","3359305727","CO" +"3359305728","3359307775","DO" +"3359309824","3359313919","AR" +"3359313920","3359315967","CR" +"3359315968","3359318015","HN" +"3359318016","3359356927","AR" +"3359356928","3359358975","VE" +"3359358976","3359375359","AR" +"3359375360","3359440895","PE" +"3359440896","3359461951","AR" +"3359461952","3359462015","HN" +"3359462016","3359462271","AR" +"3359462272","3359462335","UY" +"3359462336","3359463399","AR" +"3359463400","3359463407","CO" +"3359463408","3359463679","AR" +"3359463680","3359463743","HN" +"3359463744","3359498239","AR" +"3359498240","3359502335","PY" +"3359502336","3359505407","AR" +"3359505408","3359505663","VE" +"3359505664","3359505919","AN" +"3359505920","3359506431","AR" +"3359506432","3359508479","US" +"3359508480","3359514623","VE" +"3359514624","3359514879","CL" +"3359514880","3359516671","US" +"3359516672","3359516927","VG" +"3359516928","3359517183","US" +"3359517184","3359517439","VG" +"3359517440","3359517695","US" +"3359517696","3359517951","VG" +"3359517952","3359520255","US" +"3359520256","3359520767","AR" +"3359520768","3359522815","US" +"3359522816","3359539199","NI" +"3359539200","3359571967","PE" +"3359571968","3359582207","AR" +"3359582208","3359584255","PA" +"3359584256","3359586303","AR" +"3359586304","3359588351","CL" +"3359588352","3359596543","AR" +"3359596544","3359598591","CL" +"3359600640","3359621119","AR" +"3359621120","3359637503","EC" +"3359637504","3359789583","MX" +"3359789584","3359789599","US" +"3359789600","3359797247","MX" +"3359801344","3359899647","MX" +"3359899648","3359916031","CL" +"3359916032","3359932415","AR" +"3359948800","3359989759","AR" +"3359989760","3359997951","CO" +"3359997952","3360006143","AR" +"3360006144","3360014335","EC" +"3360014336","3360096255","AR" +"3360096256","3360104447","UY" +"3360104448","3360116735","CO" +"3360116736","3360118783","BO" +"3360118784","3360120831","AR" +"3360120832","3360124927","CO" +"3360129024","3360145407","VE" +"3360145408","3360153599","CL" +"3360153600","3360157695","AR" +"3360157696","3360159743","VE" +"3360159744","3360161791","AN" +"3360161792","3360251903","CL" +"3360251904","3360253951","BO" +"3360253952","3360255999","SV" +"3360258048","3360260095","CL" +"3360260096","3360276479","AR" +"3360276480","3360278527","VE" +"3360278528","3360280575","EC" +"3360280576","3360282623","CL" +"3360282624","3360284671","CO" +"3360284672","3360325631","CL" +"3360325632","3360333823","CO" +"3360333824","3360342015","CL" +"3360342016","3360354303","VE" +"3360354304","3360356351","PA" +"3360356352","3360358399","CR" +"3360358400","3360358911","CL" +"3360358912","3360358919","CO" +"3360358920","3360366591","CL" +"3360366592","3360382975","CO" +"3360382976","3360399359","VE" +"3360399360","3360403455","BO" +"3360407552","3360423935","PA" +"3360423936","3360686079","MX" +"3360686080","3360710655","AR" +"3360710656","3360718847","HT" +"3360718848","3360760575","AR" +"3360760576","3360760831","UY" +"3360760832","3360763903","AR" +"3360763904","3360765951","GT" +"3360765952","3360767999","CO" +"3360768000","3360788479","AR" +"3360788480","3360790527","CL" +"3360792576","3360849919","AR" +"3360849920","3360882687","VE" +"3360882688","3360948223","CL" +"3360948224","3361013759","VE" +"3361013760","3361021695","SV" +"3361021696","3361021951","HN" +"3361021952","3361030143","PY" +"3361030144","3361034239","VE" +"3361034240","3361036287","EC" +"3361036288","3361046527","AR" +"3361046528","3361052671","BO" +"3361052672","3361054719","AR" +"3361054720","3361058815","NI" +"3361058816","3361062911","AR" +"3361062912","3361071103","CL" +"3361071104","3361079295","CO" +"3361079296","3361144831","CL" +"3361144832","3361210367","BO" +"3361210368","3361275903","DO" +"3361275904","3361284095","PE" +"3361284096","3361296383","CL" +"3361296384","3361298431","SV" +"3361298432","3361300479","DO" +"3361300480","3361308671","CO" +"3361308672","3361325055","AR" +"3361325056","3361341439","CO" +"3361341440","3361374207","VE" +"3361374208","3361378303","PA" +"3361378304","3361380351","BO" +"3361380352","3361382399","EC" +"3361382400","3361415167","CL" +"3361415168","3361417215","AR" +"3361417216","3361419263","CL" +"3361419264","3361423359","AR" +"3361423360","3361456127","CR" +"3361456128","3361472511","CO" +"3361472512","3361538047","MX" +"3361538048","3361570815","VE" +"3361570816","3361587199","CO" +"3361587200","3361599487","EC" +"3361599488","3361601535","UY" +"3361601536","3361603583","EC" +"3361603584","3361734655","MX" +"3361734656","3362258943","BR" +"3362258944","3362324479","CL" +"3362324480","3362324735","AR" +"3362324736","3362324991","US" +"3362324992","3362328063","AR" +"3362328064","3362328319","US" +"3362328320","3362336767","AR" +"3362336768","3362338047","US" +"3362338048","3362342143","AR" +"3362342144","3362342399","PA" +"3362342400","3362344447","AR" +"3362344448","3362344703","US" +"3362344704","3362344959","AR" +"3362344960","3362347007","US" +"3362347008","3362348799","AR" +"3362348800","3362349055","US" +"3362349056","3362351103","CR" +"3362351104","3362353151","AR" +"3362353152","3362355199","EC" +"3362355200","3362357247","AR" +"3362357248","3362381823","BO" +"3362381824","3362390015","EC" +"3362390016","3362422783","PE" +"3362422784","3362426879","CO" +"3362426880","3362428927","PA" +"3362428928","3362430975","CL" +"3362430976","3362447359","CO" +"3362447360","3362448383","SV" +"3362448384","3362448895","HN" +"3362448896","3362451455","SV" +"3362451456","3362452479","AR" +"3362452480","3362452991","BO" +"3362452992","3362453247","HN" +"3362453248","3362453503","NI" +"3362453504","3362455551","AR" +"3362455552","3362471935","EC" +"3362471936","3362476031","CL" +"3362476032","3362476287","HN" +"3362476288","3362476543","AR" +"3362476544","3362477055","CR" +"3362477056","3362478079","AN" +"3362478080","3362480127","AR" +"3362484224","3362486271","AR" +"3362486272","3362488319","HN" +"3362488320","3362504703","PE" +"3362504704","3362506751","VE" +"3362506752","3362508799","AR" +"3362508800","3362510847","HN" +"3362512896","3362514943","AR" +"3362514944","3362516991","HN" +"3362516992","3362519039","BO" +"3362519040","3362521087","EC" +"3362521088","3362529279","TT" +"3362529280","3362537471","PA" +"3362537472","3362545663","AR" +"3362545664","3362549759","PE" +"3362549760","3362553855","AR" +"3362553856","3362557951","PY" +"3362570240","3362586623","UY" +"3362586624","3362652159","VE" +"3362652160","3362664447","PE" +"3362664448","3362668543","BO" +"3362668544","3362684927","EC" +"3362684928","3362686975","AR" +"3362686976","3362687263","CO" +"3362687264","3362687304","AR" +"3362687305","3362689279","CO" +"3362689280","3362689311","AR" +"3362689312","3362690367","CO" +"3362690368","3362690431","AR" +"3362690432","3362691071","CO" +"3362691072","3362692095","PA" +"3362692096","3362692223","AR" +"3362692224","3362692351","CO" +"3362692352","3362692607","MX" +"3362692608","3362692863","CO" +"3362692864","3362695167","AR" +"3362695168","3362697215","CO" +"3362697216","3362711551","AR" +"3362711552","3362713599","EC" +"3362713600","3362714623","GT" +"3362714624","3362714879","HN" +"3362714880","3362717695","GT" +"3362717696","3362815999","CL" +"3362816000","3362832383","AR" +"3362836480","3362838527","CO" +"3362840576","3362897919","CL" +"3362897920","3362914303","HT" +"3362914304","3362930687","CO" +"3362934784","3362936831","AR" +"3362936832","3362938879","CL" +"3362938880","3362942975","AR" +"3362942976","3362945023","GT" +"3362945024","3362983935","AR" +"3362988032","3362992127","EC" +"3362996224","3363000319","UY" +"3363012608","3363024895","PA" +"3363024896","3363025151","HN" +"3363025152","3363025407","PA" +"3363025408","3363025663","CO" +"3363025664","3363025919","AN" +"3363025920","3363026175","CO" +"3363028992","3363045375","AR" +"3363045376","3363110911","CO" +"3363110912","3363176447","AR" +"3363176448","3363274751","CO" +"3363274752","3363291135","GT" +"3363291136","3363299327","BO" +"3363299328","3363373055","CL" +"3363373056","3363438591","PE" +"3363438592","3363471359","AR" +"3363471360","3363487743","CR" +"3363487744","3363504127","CO" +"3363504128","3363512319","PE" +"3363512320","3363554047","AR" +"3363554048","3363554175","US" +"3363554176","3363557375","AR" +"3363569664","3363577855","PA" +"3363577856","3363586047","CL" +"3363594240","3363600383","AR" +"3363600384","3363600639","PY" +"3363600640","3363600895","VE" +"3363600896","3363601407","AR" +"3363601408","3363601919","CO" +"3363601920","3363602175","AR" +"3363602176","3363602431","PA" +"3363602432","3363610623","AN" +"3363618816","3363627007","UY" +"3363627008","3363635199","EC" +"3363635200","3363651583","UY" +"3363651584","3363667967","AR" +"3363667968","3363676159","EC" +"3363676160","3363678207","TT" +"3363678208","3363680255","NI" +"3363680256","3363682303","GT" +"3363682304","3363684351","VE" +"3363684352","3363708927","EC" +"3363708928","3363713023","CL" +"3363717120","3363733503","CL" +"3363733504","3363831807","AR" +"3363831808","3378511871","BR" +"3378511872","3383754751","MX" +"3383754752","3384147967","AR" +"3384147968","3384213503","PA" +"3384213504","3384279039","EC" +"3384279040","3384410111","CO" +"3384410112","3384672255","CL" +"3384672256","3384688639","HN" +"3384688640","3384705023","CO" +"3384705024","3384721407","PA" +"3384721408","3384725503","US" +"3384725504","3384737791","PA" +"3384737792","3385851903","CR" +"3385851904","3386114047","VE" +"3386114048","3386245119","AR" +"3386245120","3386376191","CL" +"3386376192","3386392575","CO" +"3386392576","3386408959","AN" +"3386408960","3386425343","GT" +"3386425344","3386441727","AR" +"3386441728","3386458111","PY" +"3386458112","3386474495","EC" +"3386474496","3386490879","UY" +"3386490880","3386499071","CO" +"3386499072","3386503167","AR" +"3386503168","3386504191","PE" +"3386504192","3386505215","AR" +"3386505216","3386507263","CL" +"3386507264","3386523647","EC" +"3386523648","3386540031","PA" +"3386540032","3386548223","CL" +"3386548224","3386556415","CR" +"3386556416","3386562047","PA" +"3386562048","3386562303","PE" +"3386562304","3386572799","PA" +"3386572800","3386589183","EC" +"3386589184","3386601471","AR" +"3386601472","3386605567","CO" +"3386605568","3386613759","CL" +"3386613760","3386621951","AR" +"3386621952","3386630143","CO" +"3386630144","3386632191","UY" +"3386638336","3386642431","AN" +"3386646528","3386662911","CO" +"3386662912","3386671103","CL" +"3386671104","3386675199","HN" +"3386679296","3386687487","AR" +"3386687488","3386695679","CU" +"3386695680","3386703871","CL" +"3386703872","3386720255","UY" +"3386720256","3386728447","TT" +"3386728448","3386732543","AR" +"3386732544","3386734591","CL" +"3386736640","3386753023","CO" +"3386753024","3386761215","CL" +"3386761216","3386769407","PA" +"3386769408","3386773503","VE" +"3386777600","3386781695","AN" +"3386785792","3386802175","BO" +"3386802176","3386900479","CL" +"3386900480","3387162623","PA" +"3387162624","3387228159","CO" +"3387228160","3387260927","AW" +"3387260928","3387293695","DO" +"3387293696","3387359231","PE" +"3387359232","3387424767","AR" +"3387424768","3387555839","CO" +"3387555840","3387572095","AR" +"3387572096","3387572223","PE" +"3387572224","3387600895","AR" +"3387600896","3387604991","CO" +"3387604992","3387608319","AR" +"3387608320","3387608447","EC" +"3387608448","3387608575","AR" +"3387608576","3387608703","EC" +"3387608704","3387609087","AR" +"3387609088","3387613183","EC" +"3387613184","3387614079","AR" +"3387614080","3387614207","VE" +"3387614208","3387614591","AR" +"3387614592","3387614719","VE" +"3387614720","3387617439","AR" +"3387617440","3387617447","CO" +"3387617448","3387618175","AR" +"3387618176","3387618303","CO" +"3387618304","3387686911","AR" +"3387686912","3387736063","CL" +"3387736064","3387752447","CO" +"3387752448","3387817983","CR" +"3387817984","3387834367","VE" +"3387834368","3387850751","TT" +"3387850752","3387867135","EC" +"3387867136","3387949055","CL" +"3387949056","3388014591","PE" +"3388014592","3388080127","CL" +"3388080128","3388211199","VE" +"3388211200","3388342271","CO" +"3388342272","3388407807","CL" +"3388407808","3388473343","SV" +"3388473344","3388604415","VE" +"3388604416","3388997631","AR" +"3388997632","3389001727","AU" +"3389001728","3389005823","PH" +"3389005824","3389014015","NZ" +"3389014016","3389014271","AU" +"3389014272","3389014783","JP" +"3389014784","3389015807","AU" +"3389015808","3389016063","SG" +"3389016064","3389016575","JP" +"3389016576","3389017087","AU" +"3389017088","3389017343","JP" +"3389017344","3389017599","HK" +"3389017600","3389017855","AU" +"3389017856","3389018111","VN" +"3389018112","3389018367","PG" +"3389018368","3389019135","AU" +"3389019136","3389019391","NZ" +"3389019392","3389020159","AU" +"3389020160","3389020671","ID" +"3389020672","3389020927","AU" +"3389020928","3389021183","PH" +"3389021184","3389021695","ID" +"3389021952","3389023231","AU" +"3389023232","3389023743","CN" +"3389023744","3389023999","AU" +"3389024000","3389024255","IN" +"3389024256","3389024511","SG" +"3389024512","3389025023","AU" +"3389025024","3389025279","ID" +"3389025280","3389025535","AU" +"3389025536","3389025791","IN" +"3389025792","3389026047","PK" +"3389026048","3389026303","TH" +"3389026304","3389026559","IN" +"3389026560","3389027071","AU" +"3389027072","3389027583","IN" +"3389027584","3389028607","TH" +"3389028608","3389028863","NZ" +"3389028864","3389029375","CN" +"3389029376","3389029887","NZ" +"3389029888","3389030399","SG" +"3389030400","3389034495","HK" +"3389034496","3389035519","PH" +"3389035776","3389036031","SG" +"3389036288","3389036543","NZ" +"3389037056","3389037567","AU" +"3389037568","3389038591","NC" +"3389038592","3389042687","HK" +"3389042688","3389043711","CN" +"3389043712","3389044735","HK" +"3389044736","3389046783","AU" +"3389046784","3389063167","US" +"3389063168","3389063679","AU" +"3389063680","3389063935","HK" +"3389063936","3389064191","AU" +"3389064192","3389064447","IN" +"3389064448","3389064703","SG" +"3389064704","3389065215","HK" +"3389065216","3389067263","NZ" +"3389067264","3389071359","AU" +"3389071360","3389079551","PG" +"3389079552","3389087743","SG" +"3389087744","3389087999","HK" +"3389088000","3389092351","SG" +"3389092352","3389092863","PH" +"3389092864","3389093887","AU" +"3389093888","3389095935","IN" +"3389095936","3389104127","SG" +"3389104128","3389112319","SB" +"3389112320","3389116415","MV" +"3389116416","3389120511","JP" +"3389122560","3389122815","HK" +"3389122816","3389123583","AU" +"3389123584","3389123839","ID" +"3389123840","3389124351","AU" +"3389124352","3389124607","SG" +"3389124608","3389128703","PG" +"3389128704","3389129727","AU" +"3389129728","3389132799","NZ" +"3389132800","3389136895","AU" +"3389136896","3389142015","HK" +"3389142016","3389143039","TW" +"3389143040","3389145087","AU" +"3389145088","3389151231","HK" +"3389151232","3389152255","JP" +"3389152256","3389153279","AU" +"3389153280","3389161471","TV" +"3389161472","3389194239","JP" +"3389194240","3389195775","AU" +"3389195776","3389196287","HK" +"3389196288","3389198335","AU" +"3389198336","3389202431","KR" +"3389202432","3389210623","NZ" +"3389210624","3389210879","IN" +"3389210880","3389211135","AU" +"3389211136","3389211391","IN" +"3389211392","3389211647","AU" +"3389211648","3389212671","TH" +"3389212672","3389213439","AU" +"3389213440","3389214207","IN" +"3389214208","3389214463","SG" +"3389214464","3389214719","AU" +"3389214720","3389218815","NZ" +"3389218816","3389222911","AU" +"3389222912","3389227007","IN" +"3389227008","3389227519","CN" +"3389227520","3389228031","PK" +"3389228032","3389228799","AU" +"3389228800","3389229055","SG" +"3389229056","3389229311","JP" +"3389229312","3389229567","AU" +"3389229568","3389230079","SG" +"3389230080","3389235199","JP" +"3389235200","3389243391","TW" +"3389243392","3389247487","AU" +"3389247488","3389251583","ID" +"3389251584","3389259775","PF" +"3389259776","3389263871","PH" +"3389263872","3389266175","NZ" +"3389266176","3389266431","IN" +"3389266432","3389266943","HK" +"3389266944","3389267967","AU" +"3389267968","3389276159","WS" +"3389276160","3389284351","AU" +"3389284352","3389292543","BD" +"3389292544","3389300735","CN" +"3389300736","3389301247","ID" +"3389301248","3389301759","AU" +"3389301760","3389302015","IN" +"3389302016","3389302527","AU" +"3389302528","3389302783","PK" +"3389302784","3389303039","VN" +"3389303040","3389303295","TW" +"3389303296","3389303807","ID" +"3389303808","3389304063","IN" +"3389304064","3389304319","BD" +"3389304320","3389304575","PH" +"3389304576","3389304831","AU" +"3389304832","3389305087","VN" +"3389305088","3389305599","IN" +"3389305600","3389305855","ID" +"3389305856","3389306111","IN" +"3389306112","3389306367","AU" +"3389306368","3389306623","IN" +"3389306624","3389306879","AU" +"3389306880","3389307135","FJ" +"3389307136","3389307647","ID" +"3389307648","3389307903","JP" +"3389307904","3389308159","AU" +"3389308160","3389308415","KH" +"3389308416","3389308671","AU" +"3389308672","3389308927","PH" +"3389308928","3389317119","HK" +"3389317120","3389322239","AU" +"3389322240","3389324031","JP" +"3389324032","3389324287","VU" +"3389324288","3389325311","CN" +"3389325312","3389326335","AU" +"3389326336","3389326847","TW" +"3389326848","3389327359","AU" +"3389327360","3389329407","TW" +"3389329408","3389333503","PH" +"3389333504","3389341695","BD" +"3389341696","3389345791","JP" +"3389345792","3389349887","TH" +"3389349888","3389358079","AU" +"3389358080","3389366271","PK" +"3389366272","3389370177","AU" +"3389370178","3389370178","PG" +"3389370179","3389374463","AU" +"3389374464","3389378559","MN" +"3389382656","3389390847","TW" +"3389390848","3389391359","HK" +"3389391360","3389391615","VN" +"3389391616","3389392127","AU" +"3389392128","3389392383","NZ" +"3389392384","3389392895","CN" +"3389392896","3389394943","JP" +"3389394944","3389399039","TH" +"3389399040","3389407743","AU" +"3389407744","3389408255","CN" +"3389408256","3389409279","JP" +"3389409280","3389409791","CN" +"3389409792","3389411327","AU" +"3389411328","3389411583","IN" +"3389411584","3389412351","AU" +"3389412352","3389412607","NZ" +"3389412608","3389412863","PH" +"3389412864","3389413119","AU" +"3389413120","3389413887","CN" +"3389413888","3389414143","TH" +"3389414144","3389414399","AU" +"3389414400","3389414911","CN" +"3389414912","3389415167","HK" +"3389415168","3389415423","KR" +"3389415424","3389415935","VN" +"3389415936","3389416191","JP" +"3389416192","3389416447","IN" +"3389416448","3389416959","TH" +"3389416960","3389417215","SG" +"3389417216","3389417471","CN" +"3389417472","3389417983","TW" +"3389417984","3389418239","AU" +"3389418240","3389418495","TH" +"3389418496","3389418751","CN" +"3389418752","3389419007","NZ" +"3389419008","3389419519","CN" +"3389419520","3389420031","AU" +"3389420032","3389420287","CN" +"3389420288","3389420543","AU" +"3389420544","3389421055","NZ" +"3389421056","3389421311","AU" +"3389421312","3389421567","JP" +"3389421568","3389422591","KI" +"3389422592","3389431807","AU" +"3389431808","3389435903","SG" +"3389435904","3389439999","CN" +"3389440000","3389444095","HK" +"3389444096","3389452287","ID" +"3389452288","3389453311","SG" +"3389453312","3389454335","JP" +"3389454336","3389455359","AU" +"3389455360","3389456383","JP" +"3389456384","3389456895","NZ" +"3389456896","3389457407","AU" +"3389457408","3389458431","NZ" +"3389458432","3389460479","AU" +"3389460480","3389464575","JP" +"3389464576","3389469695","NZ" +"3389469696","3389471743","IN" +"3389471744","3389472767","NZ" +"3389472768","3389480959","AU" +"3389480960","3389489151","JP" +"3389489152","3389493247","HK" +"3389493248","3389521919","AU" +"3389521920","3389522175","CN" +"3389522176","3389522431","SG" +"3389522432","3389523455","CN" +"3389523456","3389523967","JP" +"3389523968","3389524991","AU" +"3389524992","3389525247","CN" +"3389525248","3389525503","NZ" +"3389525504","3389526015","TW" +"3389526016","3389528063","JP" +"3389528064","3389528319","CN" +"3389528320","3389528575","TH" +"3389528576","3389528831","JP" +"3389528832","3389529087","AP" +"3389529088","3389529599","ID" +"3389529600","3389529855","PH" +"3389529856","3389530111","HK" +"3389530112","3389532159","AU" +"3389532160","3389533183","SG" +"3389533184","3389534207","NZ" +"3389534208","3389538303","JP" +"3389538304","3389538559","AU" +"3389538560","3389540351","TH" +"3389540352","3389541375","KH" +"3389541376","3389541631","AU" +"3389541632","3389541887","CN" +"3389541888","3389542399","TH" +"3389542400","3389543423","JP" +"3389543424","3389544447","TH" +"3389544448","3389545471","HK" +"3389545472","3389545727","AU" +"3389545728","3389545983","HK" +"3389545984","3389546495","SG" +"3389554688","3389562879","CN" +"3389562880","3389571071","KR" +"3389571072","3389575167","CN" +"3389575168","3389579263","JP" +"3389579264","3389587455","PH" +"3389587456","3389595647","AU" +"3389595648","3389595903","CN" +"3389595904","3389596159","AU" +"3389596160","3389596671","CN" +"3389596672","3389597695","MY" +"3389597696","3389599743","MN" +"3389599744","3389600255","CN" +"3389600256","3389600511","AU" +"3389600512","3389601791","CN" +"3389601792","3389602047","AU" +"3389602048","3389602815","CN" +"3389603840","3389604351","AU" +"3389604352","3389604863","SG" +"3389604864","3389605119","HK" +"3389605120","3389605375","ID" +"3389605376","3389605887","AU" +"3389605888","3389606399","ID" +"3389606400","3389606655","AU" +"3389606656","3389606911","IN" +"3389606912","3389607423","LA" +"3389607424","3389607679","AU" +"3389607680","3389608191","VN" +"3389608192","3389608447","TH" +"3389608448","3389608703","HK" +"3389608704","3389608959","AU" +"3389608960","3389609215","VN" +"3389609216","3389609471","ID" +"3389609472","3389609727","SG" +"3389609728","3389609983","AU" +"3389609984","3389610239","NZ" +"3389610240","3389610495","IN" +"3389610496","3389610751","HK" +"3389610752","3389611519","IN" +"3389611520","3389612031","AU" +"3389612032","3389616127","MY" +"3389620224","3389640703","IN" +"3389640704","3389644799","JP" +"3389644800","3389652991","NZ" +"3389652992","3389661183","AU" +"3389661184","3389669375","IN" +"3389669376","3389673471","CN" +"3389673472","3389677567","AU" +"3389677568","3389681663","JP" +"3389685760","3389718527","AU" +"3389718528","3389784063","JP" +"3389784064","3389784319","NZ" +"3389784320","3389784831","CN" +"3389784832","3389785087","NZ" +"3389785088","3389786111","HK" +"3389786112","3389788159","JP" +"3389788160","3389788415","IN" +"3389788416","3389789183","CN" +"3389789184","3389789695","TH" +"3389789696","3389790719","AU" +"3389790720","3389790975","BN" +"3389790976","3389791231","JP" +"3389791232","3389791743","AU" +"3389791744","3389791999","JP" +"3389792000","3389800447","AU" +"3389800448","3389801471","JP" +"3389801472","3389801983","AU" +"3389801984","3389802239","NZ" +"3389802240","3389802495","AU" +"3389802496","3389802751","CN" +"3389802752","3389803263","TH" +"3389803264","3389803519","ID" +"3389804544","3389805567","IN" +"3389805568","3389806079","CN" +"3389806080","3389807359","AU" +"3389807360","3389807615","NZ" +"3389807616","3389808127","AU" +"3389808128","3389808639","SG" +"3389808640","3389808895","CN" +"3389808896","3389809151","TH" +"3389809152","3389809663","CN" +"3389809664","3389809919","AU" +"3389809920","3389810175","IN" +"3389810176","3389810431","AU" +"3389810432","3389810687","IN" +"3389810688","3389811199","NZ" +"3389811200","3389811455","CN" +"3389811456","3389811711","AU" +"3389811712","3389811967","NZ" +"3389811968","3389812479","AU" +"3389812480","3389812735","CN" +"3389812736","3389813759","AU" +"3389813760","3389814015","CN" +"3389814016","3389814527","TH" +"3389814528","3389846271","AU" +"3389846272","3389847551","JP" +"3389847552","3389849599","NZ" +"3389849600","3389915135","JP" +"3389915136","3389916159","AU" +"3389917184","3389919231","SG" +"3389919232","3389931519","NZ" +"3389931520","3389932031","CN" +"3389932032","3389932287","AU" +"3389932288","3389932799","HK" +"3389932800","3389933055","CN" +"3389933056","3389933567","PK" +"3389933568","3389933823","IN" +"3389933824","3389934847","CN" +"3389934848","3389935103","AU" +"3389935104","3389935615","CN" +"3389935616","3389935871","HK" +"3389935872","3389936127","AU" +"3389936128","3389936895","NZ" +"3389936896","3389937663","PH" +"3389937664","3389937919","CN" +"3389937920","3389938175","AU" +"3389938176","3389938687","KR" +"3389938688","3389939199","ID" +"3389939200","3389939711","AU" +"3389939712","3389939967","NZ" +"3389939968","3389940223","CN" +"3389940224","3389940479","AU" +"3389940480","3389940991","NZ" +"3389940992","3389941247","AU" +"3389941248","3389941503","NZ" +"3389941504","3389941759","KR" +"3389941760","3389942271","CN" +"3389942272","3389942783","NZ" +"3389942784","3389943295","CN" +"3389943296","3389943551","AU" +"3389943552","3389943807","CN" +"3389943808","3389944319","AU" +"3389944320","3389944831","CN" +"3389944832","3389945087","AU" +"3389945088","3389945343","TH" +"3389945344","3389945855","CN" +"3389946880","3389947391","CN" +"3389947392","3389947647","AU" +"3389947648","3389947903","CN" +"3389947904","3389948159","AU" +"3389948160","3389948415","CN" +"3389948416","3389949695","AU" +"3389949696","3389950207","CN" +"3389950208","3389950975","AU" +"3389950976","3389951743","NZ" +"3389951744","3389953279","AU" +"3389953280","3389953535","CN" +"3389953536","3389953791","AU" +"3389953792","3389954047","CN" +"3389954048","3389954303","AU" +"3389954304","3389954815","SG" +"3389954816","3389955327","AU" +"3389955328","3389956095","CN" +"3389956096","3389957119","IN" +"3389957120","3389957375","TH" +"3389957376","3389957631","KR" +"3389957632","3389957887","AU" +"3389957888","3389958399","NZ" +"3389958400","3389959167","CN" +"3389960192","3389960447","CN" +"3389960448","3389962239","AU" +"3389962240","3389962751","CN" +"3389962752","3389963007","AU" +"3389963264","3389966335","AU" +"3389966336","3389968383","SG" +"3389968384","3389968895","CN" +"3389968896","3389969663","AU" +"3389969664","3389969919","CN" +"3389969920","3389970431","AU" +"3389970432","3389971199","NZ" +"3389971200","3389971711","CN" +"3389971712","3389971967","AU" +"3389971968","3389972479","CN" +"3389972480","3389972735","IN" +"3389972736","3389973503","CN" +"3389973504","3389973759","NZ" +"3389973760","3389974271","AU" +"3389974272","3389974527","CN" +"3389974528","3389975295","AU" +"3389975296","3389976575","CN" +"3389976576","3389978111","AU" +"3389978112","3389978367","CN" +"3389978368","3389979391","AU" +"3389979392","3389979647","CN" +"3389979648","3389980415","NZ" +"3389980416","3389980671","ID" +"3389980672","3390308351","JP" +"3390308352","3390310399","NZ" +"3390310400","3390316543","AU" +"3390316544","3390325247","NZ" +"3390325248","3390325503","CN" +"3390325504","3390327807","AU" +"3390327808","3390328575","NZ" +"3390328576","3390328831","CN" +"3390328832","3390329087","NZ" +"3390329088","3390329343","AU" +"3390329344","3390330623","KR" +"3390330624","3390331647","CN" +"3390331648","3390332415","NZ" +"3390332416","3390332927","CN" +"3390332928","3390333439","NZ" +"3390333440","3390333695","HK" +"3390333696","3390333951","KR" +"3390333952","3390334463","HK" +"3390334464","3390335231","NZ" +"3390335232","3390335487","TH" +"3390335488","3390336511","ID" +"3390336512","3390336767","JP" +"3390336768","3390337023","CH" +"3390337024","3390337279","GU" +"3390337280","3390337535","NZ" +"3390337536","3390337791","CN" +"3390337792","3390338303","SG" +"3390338304","3390338559","CN" +"3390338560","3390338815","HK" +"3390338816","3390339071","KR" +"3390339072","3390339327","CN" +"3390339328","3390339839","NZ" +"3390339840","3390340351","JP" +"3390340352","3390340607","CN" +"3390340608","3390340863","IN" +"3390340864","3390341119","CN" +"3390341120","3390375935","KR" +"3390375936","3390377983","AU" +"3390377984","3390382079","NZ" +"3390382080","3390384127","LK" +"3390390272","3390398463","NZ" +"3390398464","3390406655","MN" +"3390406656","3390406911","NZ" +"3390406912","3390407167","SG" +"3390407168","3390407423","NZ" +"3390407424","3390407935","CN" +"3390407936","3390408191","NZ" +"3390408192","3390408703","IN" +"3390408704","3390409727","NZ" +"3390409728","3390409983","TH" +"3390409984","3390410495","CN" +"3390410496","3390410751","NZ" +"3390410752","3390411007","TH" +"3390411008","3390411519","SG" +"3390411520","3390412031","CN" +"3390412032","3390412287","TH" +"3390412288","3390413567","CN" +"3390413568","3390413823","NZ" +"3390413824","3390414079","CN" +"3390414080","3390414335","NZ" +"3390414336","3390414847","SG" +"3390414848","3390418943","JP" +"3390418944","3390423039","MV" +"3390423040","3390423807","SG" +"3390423808","3390424063","AP" +"3390424064","3390439423","SG" +"3390439424","3390441471","NZ" +"3390441472","3390443519","TH" +"3390443520","3390447359","NZ" +"3390447360","3390447615","ID" +"3390447616","3390455807","KR" +"3390455808","3390472191","JP" +"3390472192","3390480383","NC" +"3390480384","3390484479","AU" +"3390484480","3390488575","GU" +"3390488576","3390492671","BD" +"3390492672","3390496767","JP" +"3390496768","3390500863","NC" +"3390500864","3390502911","HK" +"3390502912","3390504959","CN" +"3390504960","3390767103","JP" +"3390767104","3390769407","NZ" +"3390769408","3390769663","IN" +"3390769664","3390770175","TH" +"3390770176","3390771199","AU" +"3390771200","3390790399","NZ" +"3390790400","3390790655","AU" +"3390790656","3390801919","NZ" +"3390801920","3390802431","CN" +"3390802432","3390832639","NZ" +"3390832640","3390963711","TH" +"3390963712","3391094783","KR" +"3391094784","3391166463","JP" +"3391166464","3391166719","US" +"3391166720","3391170047","JP" +"3391170048","3391170303","US" +"3391170304","3391187967","JP" +"3391187968","3391188479","US" +"3391188480","3391192063","JP" +"3391192064","3391192319","AP" +"3391192320","3391197951","JP" +"3391197952","3391198207","US" +"3391198208","3391356927","JP" +"3391356928","3391441407","NZ" +"3391441408","3391441663","PH" +"3391441664","3391444479","NZ" +"3391444480","3391444991","VN" +"3391444992","3391453183","NZ" +"3391453184","3391453439","ID" +"3391453440","3391487999","NZ" +"3391488000","3391489023","CN" +"3391489024","3391490047","NP" +"3391490048","3391492095","CN" +"3391492096","3391496191","HK" +"3391496192","3391500287","SG" +"3391500288","3391523583","CN" +"3391523584","3391523839","AU" +"3391523840","3391524863","CN" +"3391524864","3391525375","AU" +"3391525376","3391525887","CN" +"3391525888","3391526143","AU" +"3391526144","3391528191","CN" +"3391528192","3391528447","AU" +"3391528448","3391529471","CN" +"3391529472","3391529983","AU" +"3391529984","3391532031","CN" +"3391532032","3391533055","IN" +"3391533056","3391533567","CN" +"3391533568","3391534079","HK" +"3391534080","3391535103","IN" +"3391535104","3391553535","CN" +"3391553536","3391619071","TW" +"3391619072","3391620095","AU" +"3391620096","3391620607","CN" +"3391620608","3391620863","IN" +"3391620864","3391621119","CN" +"3391621120","3391622911","HK" +"3391622912","3391623167","CN" +"3391623168","3391653631","HK" +"3391653632","3391654143","CN" +"3391654144","3391654911","HK" +"3391654912","3391655167","CN" +"3391655168","3391655679","HK" +"3391655680","3391656447","CN" +"3391656448","3391657471","HK" +"3391657472","3391657727","CN" +"3391657728","3391658751","HK" +"3391658752","3391659263","CN" +"3391659264","3391659519","HK" +"3391659520","3391660031","CN" +"3391660032","3391660543","HK" +"3391660544","3391660799","CN" +"3391660800","3391662079","AU" +"3391662080","3391663103","HK" +"3391663104","3391664127","PH" +"3391664128","3391668223","BD" +"3391668224","3391676415","HK" +"3391676416","3391684607","SG" +"3391684608","3391685631","IN" +"3391685632","3391686655","AU" +"3391686656","3391687167","CN" +"3391687168","3391687423","IN" +"3391687424","3391688191","CN" +"3391688192","3391688703","AU" +"3391688704","3391717375","IN" +"3391717376","3391717631","CN" +"3391717632","3391717887","IN" +"3391717888","3391718399","CN" +"3391718400","3391718911","IN" +"3391718912","3391719423","JP" +"3391719424","3391721471","NZ" +"3391721472","3391721983","AU" +"3391721984","3391722239","TW" +"3391722240","3391722495","PH" +"3391722496","3391723519","IN" +"3391723520","3391725567","CN" +"3391725568","3391733759","TH" +"3391733760","3391734015","CN" +"3391734016","3391734783","AU" +"3391735808","3391736831","JP" +"3391736832","3391737855","IN" +"3391737856","3391741951","JP" +"3391741952","3391746047","HK" +"3391746048","3391750143","CN" +"3391750144","3391766783","SG" +"3391766784","3391767039","AP" +"3391767040","3391810047","SG" +"3391810048","3391810303","AP" +"3391810304","3391815679","SG" +"3391815680","3391817727","AU" +"3391817728","3391819775","TO" +"3391819776","3391823871","JP" +"3391823872","3391827967","TH" +"3391827968","3391832063","KR" +"3391832064","3391832575","ID" +"3391832576","3391832831","AU" +"3391832832","3391833087","IN" +"3391833088","3391834111","JP" +"3391834112","3391835135","ID" +"3391835136","3391836159","CN" +"3391836160","3391836671","AU" +"3391836672","3391837183","HK" +"3391837184","3391838207","AU" +"3391838208","3391838719","ID" +"3391838720","3391838975","IN" +"3391838976","3391839231","AU" +"3391839232","3391840255","ID" +"3391840256","3391841279","JP" +"3391841280","3391842303","MY" +"3391842304","3391843327","JP" +"3391843328","3391844351","VN" +"3391844352","3391845887","ID" +"3391845888","3391846399","PK" +"3391847424","3391848447","PK" +"3391848448","3391851007","AU" +"3391851008","3391851263","AP" +"3391851264","3391852543","AU" +"3391852544","3391856639","CN" +"3391856640","3391864831","ID" +"3391864832","3391873023","HK" +"3391873024","3391877119","AU" +"3391877120","3391879167","JP" +"3391879168","3391881215","ID" +"3391881216","3391885311","TH" +"3391885312","3391889407","CN" +"3391889408","3391893503","TH" +"3391894528","3391895551","TH" +"3391895552","3391896575","IN" +"3391896576","3391897599","NZ" +"3391897600","3391898367","TH" +"3391898368","3391898623","CN" +"3391898624","3391900159","TH" +"3391900160","3391900415","CN" +"3391900416","3391901695","AU" +"3391901696","3391905791","PK" +"3391905792","3391906047","TH" +"3391906304","3391906815","AU" +"3391906816","3391907839","PH" +"3391907840","3391909887","BD" +"3391909888","3391910911","IO" +"3391910912","3391911935","AU" +"3391911936","3391913983","HK" +"3391913984","3391914239","TH" +"3391914240","3391914495","CN" +"3391914496","3391915007","TH" +"3391915008","3391915519","CN" +"3391915520","3391915775","AU" +"3391915776","3391916287","TH" +"3391916288","3391916543","VN" +"3391916544","3391918591","TH" +"3391918592","3391919103","CN" +"3391919104","3391920127","TH" +"3391920128","3391930367","AU" +"3391930368","3391946751","TH" +"3391946752","3391947519","CN" +"3391947520","3391947775","AU" +"3391947776","3391948287","HK" +"3391948288","3391948799","IN" +"3391948800","3391949311","HK" +"3391949312","3391949823","IN" +"3391949824","3391950079","JP" +"3391950080","3391950335","AU" +"3391950336","3391950591","HK" +"3391950592","3391954943","CN" +"3391954944","3391971327","HK" +"3391971328","3391979519","AU" +"3391979520","3391979775","HK" +"3391979776","3391979955","JP" +"3391979956","3391979957","AP" +"3391979958","3391980031","JP" +"3391980032","3391980543","HK" +"3391980544","3391983615","MY" +"3391983616","3391984639","NP" +"3391984640","3391984895","HK" +"3391984896","3391985151","ID" +"3391985152","3391986687","AU" +"3391986688","3391987199","PK" +"3391987200","3391987455","AU" +"3391987456","3391987711","BD" +"3391987712","3391991807","JP" +"3391991808","3392012287","HK" +"3392012288","3392016383","ID" +"3392016384","3392017151","CN" +"3392017152","3392017407","IN" +"3392017408","3392017919","CN" +"3392017920","3392018431","IN" +"3392018432","3392020479","ID" +"3392020480","3392028671","CN" +"3392028672","3392040959","ID" +"3392040960","3392045055","MY" +"3392045056","3392045311","CN" +"3392045312","3392046079","ID" +"3392046080","3392049151","AU" +"3392049152","3392053247","ID" +"3392053248","3392061439","NZ" +"3392061440","3392069631","IN" +"3392069632","3392073727","CN" +"3392073728","3392077823","ID" +"3392077824","3392079871","AU" +"3392079872","3392086015","JP" +"3392086016","3392094207","AU" +"3392094208","3392098559","ID" +"3392098560","3392098815","AU" +"3392098816","3392099327","CN" +"3392099328","3392100095","AU" +"3392100096","3392100351","VN" +"3392100352","3392100607","ID" +"3392100608","3392100863","SG" +"3392100864","3392101887","ID" +"3392101888","3392102143","PK" +"3392102144","3392102399","AU" +"3392102400","3392106495","KH" +"3392106496","3392108543","IN" +"3392108544","3392109567","AU" +"3392109568","3392109823","IN" +"3392109824","3392110079","PH" +"3392110080","3392110335","CN" +"3392110336","3392110591","IN" +"3392110592","3392110847","CN" +"3392110848","3392111103","PH" +"3392111104","3392111615","CN" +"3392111616","3392112127","PH" +"3392112128","3392112639","AU" +"3392112640","3392113663","JP" +"3392113664","3392114175","PH" +"3392114176","3392114431","VN" +"3392114432","3392114687","KR" +"3392114688","3392118783","GU" +"3392118784","3392126975","MY" +"3392126976","3392135167","HK" +"3392135168","3392143359","TH" +"3392143360","3392208895","JP" +"3392208896","3392286975","NZ" +"3392286976","3392287231","AP" +"3392287232","3392287743","NZ" +"3392287744","3392288767","NP" +"3392288768","3392324607","NZ" +"3392324608","3392325119","AU" +"3392325120","3392325631","NZ" +"3392325632","3392326655","ID" +"3392326656","3392339967","NZ" +"3392339968","3392340991","NP" +"3392340992","3392344063","JP" +"3392344064","3392348159","ID" +"3392348160","3392354303","JP" +"3392354304","3392356351","ID" +"3392356352","3392364543","NP" +"3392364544","3392372735","ID" +"3392372736","3392380927","HK" +"3392380928","3392385023","AU" +"3392385024","3392389119","BD" +"3392389120","3392401407","ID" +"3392401408","3392403455","SG" +"3392403456","3392404479","AU" +"3392404480","3392405503","ID" +"3392405504","3392406015","NP" +"3392406016","3392406527","IN" +"3392406528","3392407551","TH" +"3392407552","3392409599","ID" +"3392409600","3392413695","JP" +"3392413696","3392413951","PK" +"3392414208","3392414463","PH" +"3392414464","3392414719","HK" +"3392414720","3392415231","AU" +"3392415232","3392415487","JP" +"3392415488","3392415743","VN" +"3392415744","3392415999","IN" +"3392416000","3392416255","AU" +"3392416256","3392416767","HK" +"3392416768","3392417023","IN" +"3392417024","3392417535","AU" +"3392417536","3392417791","HK" +"3392417792","3392418559","ID" +"3392418560","3392418815","SG" +"3392418816","3392419071","ID" +"3392419072","3392419327","IN" +"3392419328","3392419839","PH" +"3392419840","3392420351","IN" +"3392420352","3392420863","ID" +"3392420864","3392421119","AU" +"3392421120","3392421375","MY" +"3392421376","3392421887","IN" +"3392421888","3392438271","SG" +"3392438272","3392438527","IN" +"3392438528","3392438783","AU" +"3392438784","3392439039","IN" +"3392439040","3392439551","ID" +"3392439552","3392439807","PG" +"3392439808","3392440063","IN" +"3392440064","3392440319","AU" +"3392440320","3392440575","HK" +"3392440576","3392440831","ID" +"3392440832","3392441343","BD" +"3392441344","3392441855","ID" +"3392441856","3392442111","AU" +"3392442368","3392442623","HK" +"3392442624","3392442879","AU" +"3392442880","3392443391","ID" +"3392443392","3392443647","IN" +"3392443648","3392443903","MY" +"3392443904","3392444159","IN" +"3392444160","3392444415","JP" +"3392444416","3392444671","NZ" +"3392444672","3392444927","IN" +"3392444928","3392445183","JP" +"3392445184","3392445439","NZ" +"3392445440","3392445695","ID" +"3392445696","3392445951","IN" +"3392445952","3392446463","AU" +"3392446464","3392450559","PH" +"3392450560","3392454655","JP" +"3392454656","3392462847","HK" +"3392462848","3392472063","NP" +"3392472064","3392473087","AU" +"3392473088","3392475135","IN" +"3392475136","3392479231","JP" +"3392479232","3392487423","AU" +"3392487424","3392499711","IN" +"3392499712","3392503807","JP" +"3392503808","3392511999","HK" +"3392512000","3392516095","BD" +"3392516096","3392520191","NZ" +"3392520192","3392524287","AU" +"3392524288","3392528383","JP" +"3392528384","3392536575","ID" +"3392536576","3392602111","IN" +"3392602112","3392618495","HK" +"3392618496","3392626687","SG" +"3392626688","3392630783","NZ" +"3392630784","3392634879","JP" +"3392634880","3392635903","PK" +"3392635904","3392636927","VN" +"3392636928","3392637951","JP" +"3392637952","3392638975","TH" +"3392638976","3392643071","AU" +"3392643072","3392647167","ID" +"3392647168","3392651263","MN" +"3392651264","3392659455","JP" +"3392659456","3392667647","TW" +"3392667648","3392668671","IN" +"3392668672","3392669695","BD" +"3392669696","3392671743","HK" +"3392671744","3392675839","JP" +"3392675840","3392681983","NZ" +"3392681984","3392682239","SG" +"3392682240","3392682495","VN" +"3392682496","3392683007","IN" +"3392683008","3392684031","AU" +"3392684032","3392688127","JP" +"3392688128","3392692223","MY" +"3392692224","3392700415","IN" +"3392700416","3392708607","SG" +"3392708608","3392712703","ID" +"3392712704","3392716799","AF" +"3392716800","3392734207","IN" +"3392734208","3392741375","ID" +"3392741376","3392765951","PH" +"3392765952","3392782335","TH" +"3392789504","3392790527","HK" +"3392790528","3392794623","JP" +"3392794624","3392798975","CN" +"3392798976","3392799231","JP" +"3392799232","3392799487","PH" +"3392799488","3392799743","AU" +"3392799744","3392800767","JP" +"3392800768","3392802815","SG" +"3392802816","3392806911","JP" +"3392806912","3392815103","AU" +"3392815104","3392819199","ID" +"3392819200","3392823295","MY" +"3392823296","3392824319","KH" +"3392824320","3392824831","AU" +"3392824832","3392825343","IN" +"3392825344","3392826367","JP" +"3392828416","3392829439","JP" +"3392829440","3392830463","IN" +"3392830464","3392830719","ID" +"3392830720","3392830975","IN" +"3392830976","3392831231","TH" +"3392831232","3392831487","IN" +"3392831488","3392832511","PG" +"3392832512","3392833535","IN" +"3392833536","3392835583","AU" +"3392835584","3392839679","JP" +"3392839680","3392845823","ID" +"3392845824","3392847871","HK" +"3392847872","3392856063","ID" +"3392856064","3392857087","AU" +"3392857088","3392857343","IN" +"3392857344","3392858111","AU" +"3392858112","3392858623","IN" +"3392858624","3392858879","JP" +"3392858880","3392859135","AU" +"3392859136","3392859647","PH" +"3392859648","3392860159","ID" +"3392860160","3392860415","AU" +"3392860416","3392860671","PH" +"3392860672","3392861183","ID" +"3392861184","3392861439","TH" +"3392861440","3392861695","VN" +"3392861696","3392861951","PH" +"3392861952","3392862207","AU" +"3392864256","3392864511","CN" +"3392864512","3392864767","AU" +"3392864768","3392865279","IN" +"3392865280","3392866303","NU" +"3392866304","3392880639","AU" +"3392880640","3392888831","PK" +"3392888832","3392892927","AU" +"3392892928","3392897023","JP" +"3392897024","3392901119","BD" +"3392901120","3392903167","JP" +"3392903168","3392905215","HK" +"3392905216","3392909311","ID" +"3392909312","3392913407","JP" +"3392913408","3392917503","ID" +"3392917504","3392918527","BD" +"3392918528","3392919551","CN" +"3392919552","3392921599","KR" +"3392921600","3392921855","NZ" +"3392921856","3392922623","AU" +"3392922624","3392922879","IN" +"3392922880","3392923135","AU" +"3392923136","3392923391","BN" +"3392923392","3392923647","IN" +"3392923648","3392924159","CN" +"3392924160","3392924671","JP" +"3392924672","3392924927","CN" +"3392924928","3392925183","AU" +"3392925184","3392925695","VN" +"3392925696","3392926719","AU" +"3392926720","3392927231","IN" +"3392927232","3392927743","AU" +"3392927744","3392927999","IN" +"3392928000","3392928255","HK" +"3392928256","3392928767","TW" +"3392928768","3392929279","VN" +"3392929280","3392929535","PK" +"3392929536","3392929791","ID" +"3392929792","3392931839","MU" +"3392931840","3392933887","PH" +"3392933888","3392942079","JP" +"3392942080","3392944127","CN" +"3392944128","3392945151","MY" +"3392945152","3392946175","IN" +"3392946176","3392946719","AU" +"3392946720","3392946720","A1" +"3392946721","3392954367","AU" +"3392954368","3392956415","CN" +"3392956416","3392958463","VN" +"3392958464","3392962559","CN" +"3392962560","3392963583","IN" +"3392963584","3392970751","CN" +"3392970752","3392978943","JP" +"3392978944","3392983039","TH" +"3392983040","3392987135","IN" +"3392987136","3392995327","HK" +"3392995328","3392995583","PG" +"3392995584","3392995839","JP" +"3392995840","3392996351","NZ" +"3392996352","3392997375","AU" +"3392997376","3392998399","IN" +"3392998400","3392999423","AU" +"3392999424","3393003519","JP" +"3393003520","3393011711","PK" +"3393019904","3393020159","ID" +"3393020160","3393020415","MN" +"3393020416","3393021439","ID" +"3393021440","3393021695","IN" +"3393021696","3393021951","HK" +"3393021952","3393022463","ID" +"3393022464","3393022975","SG" +"3393022976","3393023231","PH" +"3393023232","3393023487","AU" +"3393023488","3393023743","SG" +"3393023744","3393023999","IN" +"3393024000","3393024511","ID" +"3393024512","3393025023","NZ" +"3393025024","3393025279","AU" +"3393025280","3393025535","IN" +"3393025536","3393025791","PH" +"3393025792","3393026047","AU" +"3393026560","3393026815","AU" +"3393027072","3393028095","ID" +"3393028096","3393060863","AU" +"3393060864","3393062911","FJ" +"3393062912","3393069055","ID" +"3393069056","3393077247","AU" +"3393077248","3393085439","IN" +"3393085440","3393089535","LA" +"3393089536","3393090559","CN" +"3393090560","3393091071","IN" +"3393091072","3393093631","FJ" +"3393093632","3393101823","AU" +"3393101824","3393110015","JP" +"3393110016","3393118207","HK" +"3393118208","3393122303","IN" +"3393122304","3393123327","AU" +"3393123328","3393123583","IN" +"3393123584","3393123839","NZ" +"3393123840","3393124351","IN" +"3393124352","3393125631","CN" +"3393125632","3393125887","JP" +"3393125888","3393126143","AU" +"3393126144","3393126399","CN" +"3393126400","3393134591","HK" +"3393134592","3393146879","AU" +"3393146880","3393147135","PK" +"3393147136","3393150975","CN" +"3393150976","3393159167","IN" +"3393159168","3393163263","HK" +"3393163264","3393163519","SG" +"3393163520","3393167359","HK" +"3393167360","3393175551","CN" +"3393175552","3393183743","PK" +"3393183744","3393183999","ID" +"3393184000","3393184255","AP" +"3393184256","3393184767","PK" +"3393184768","3393187839","SG" +"3393187840","3393189887","NP" +"3393189888","3393190911","CN" +"3393190912","3393191167","IN" +"3393191424","3393191935","SB" +"3393191936","3393257471","HK" +"3393257472","3393260031","CN" +"3393260032","3393260543","BD" +"3393260544","3393265663","AU" +"3393265664","3393273855","CK" +"3393273856","3393282047","AU" +"3393282048","3393286143","HK" +"3393286144","3393290239","ID" +"3393290240","3393298431","IN" +"3393298432","3393300479","NZ" +"3393300480","3393302527","BD" +"3393302528","3393306623","PH" +"3393306624","3393314815","HK" +"3393314816","3393318911","ID" +"3393318912","3393320959","SG" +"3393320960","3393388543","HK" +"3393388544","3393389567","CN" +"3393389568","3393390591","IN" +"3393390592","3393392639","ID" +"3393392640","3393396735","JP" +"3393396736","3393400831","ID" +"3393400832","3393404927","JP" +"3393404928","3393421311","AU" +"3393421312","3393470463","HK" +"3393470464","3393474559","AU" +"3393474560","3393478655","NZ" +"3393478656","3393486847","AU" +"3393486848","3393495039","IN" +"3393495040","3393499135","AU" +"3393499136","3393503231","SG" +"3393503232","3393507327","HK" +"3393507328","3393511423","SG" +"3393511424","3393519615","KR" +"3393519616","3393520639","HK" +"3393520640","3393521663","CN" +"3393521664","3393523711","PK" +"3393523712","3393527807","CN" +"3393527808","3393535999","PK" +"3393536000","3393544191","HK" +"3393544192","3393548287","ID" +"3393548288","3393552383","JP" +"3393552384","3393553407","HK" +"3393553408","3393554431","AU" +"3393554432","3393556479","TH" +"3393556480","3393560575","SG" +"3393560576","3393568767","PH" +"3393568768","3393572863","LK" +"3393572864","3393576959","AU" +"3393576960","3393581055","JP" +"3393581056","3393585151","HK" +"3393585152","3393593343","CN" +"3393593344","3393597439","MN" +"3393597440","3393601535","ID" +"3393601536","3393609727","NP" +"3393609728","3393613823","CN" +"3393613824","3393617919","AS" +"3393617920","3393618431","AU" +"3393618432","3393618687","NZ" +"3393618688","3393618943","IN" +"3393618944","3393620223","ID" +"3393620224","3393620479","AU" +"3393620480","3393620735","ID" +"3393620736","3393620991","AU" +"3393620992","3393621247","JP" +"3393621248","3393622015","AU" +"3393622016","3393626111","PK" +"3393626112","3393630207","HK" +"3393630208","3393634303","JP" +"3393634304","3393638399","CN" +"3393638400","3393650687","JP" +"3393650688","3393658879","IN" +"3393658880","3393662975","KH" +"3393662976","3393675263","JP" +"3393675264","3393679359","MY" +"3393679360","3393683455","TH" +"3393683456","3393691647","IN" +"3393691648","3393695743","AU" +"3393695744","3393699839","PH" +"3393699840","3393724415","HK" +"3393724416","3393726463","AU" +"3393726464","3393728511","CN" +"3393728512","3393736703","JP" +"3393736704","3393740799","CN" +"3393740800","3393741567","US" +"3393741568","3393741823","MG" +"3393741824","3393742847","US" +"3393742848","3393743185","AP" +"3393743186","3393743186","AU" +"3393743187","3393743615","AP" +"3393743616","3393744895","US" +"3393744896","3393748991","PH" +"3393748992","3393765375","AU" +"3393765376","3393773567","ID" +"3393775616","3393777663","BD" +"3393777664","3393779711","MN" +"3393779712","3393780735","IN" +"3393780736","3393782783","HK" +"3393782784","3393783807","BD" +"3393783808","3393785855","MY" +"3393785856","3393789951","ID" +"3393789952","3393798143","SG" +"3393798144","3393806335","JP" +"3393806336","3393814527","ID" +"3393814528","3393815551","CN" +"3393815552","3393816575","KR" +"3393816576","3393818623","JP" +"3393818624","3393822719","AU" +"3393822720","3393830911","PH" +"3393830912","3393835007","NZ" +"3393835008","3393839103","JP" +"3393839104","3393843199","ID" +"3393843200","3393848319","HK" +"3393848320","3393849343","JP" +"3393849344","3393851391","CN" +"3393851392","3393855487","JP" +"3393855488","3393855743","AU" +"3393855744","3393855999","NZ" +"3393856000","3393856255","AU" +"3393856256","3393856511","HK" +"3393856768","3393857023","SG" +"3393857024","3393857535","NZ" +"3393857536","3393858047","HK" +"3393858048","3393858559","ID" +"3393858560","3393858815","AU" +"3393858816","3393859071","ID" +"3393859072","3393859327","AU" +"3393859328","3393859583","JP" +"3393859584","3393860095","AU" +"3393860096","3393860607","HK" +"3393860608","3393861631","IN" +"3393861632","3393861887","VN" +"3393861888","3393862143","AU" +"3393862144","3393862655","VN" +"3393862656","3393862911","NZ" +"3393862912","3393863167","AU" +"3393863168","3393863679","HK" +"3393863680","3393865727","AU" +"3393865728","3393867775","ID" +"3393867776","3393871871","CN" +"3393871872","3393878015","HK" +"3393878016","3393878271","IN" +"3393878272","3393880063","HK" +"3393880064","3393896447","AU" +"3393896448","3393906687","NZ" +"3393908736","3393910783","BD" +"3393910784","3393911807","PH" +"3393911808","3393912063","AU" +"3393912064","3393912319","JP" +"3393912320","3393912831","CN" +"3393912832","3393913855","HK" +"3393913856","3393914879","MY" +"3393914880","3393916927","JP" +"3393916928","3393921023","ID" +"3393921024","3393929215","MY" +"3393929216","3393937407","HK" +"3393937408","3393941503","ID" +"3393941504","3393945599","JP" +"3393945600","3393961983","MY" +"3393961984","3393966079","IN" +"3393966080","3393970175","CN" +"3393970176","3393974271","JP" +"3393974272","3393976319","MY" +"3393976320","3393977343","MO" +"3393977344","3393978367","CN" +"3393978368","3394011135","HK" +"3394011136","3394027519","AU" +"3394027520","3394035711","JP" +"3394035712","3394039807","MY" +"3394039808","3394040063","CN" +"3394040064","3394040319","SG" +"3394040320","3394040831","IN" +"3394040832","3394041087","KR" +"3394041088","3394041855","SG" +"3394041856","3394042879","AU" +"3394042880","3394043903","CN" +"3394043904","3394060287","HK" +"3394060288","3394064383","ID" +"3394064384","3394066431","CN" +"3394066432","3394067455","AU" +"3394067456","3394068479","CN" +"3394068480","3394076671","ID" +"3394076672","3394078719","HK" +"3394078720","3394078975","AU" +"3394078976","3394079231","IN" +"3394079232","3394079743","PH" +"3394079744","3394092543","HK" +"3394092544","3394092799","AP" +"3394092800","3394111487","HK" +"3394111488","3394113535","CN" +"3394113536","3394113791","AP" +"3394113792","3394117631","SG" +"3394117632","3394121727","AU" +"3394121728","3394125823","SG" +"3394125824","3394142207","PH" +"3394142208","3394150399","NZ" +"3394150400","3394154495","IN" +"3394154496","3394158591","JP" +"3394158592","3394162687","ID" +"3394162688","3394166783","JP" +"3394166784","3394168831","VN" +"3394168832","3394170879","IN" +"3394170880","3394172927","NZ" +"3394172928","3394173695","JP" +"3394173696","3394173951","IN" +"3394173952","3394174975","HK" +"3394174976","3394179071","JP" +"3394179072","3394181119","BD" +"3394181120","3394183167","KH" +"3394183168","3394191359","NP" +"3394191360","3394207743","SG" +"3394207744","3394215935","JP" +"3394215936","3394220031","AU" +"3394220032","3394226943","SG" +"3394226944","3394227199","AP" +"3394227200","3394232319","SG" +"3394232320","3394234367","CN" +"3394234368","3394236415","VN" +"3394236416","3394238463","JP" +"3394238464","3394239487","CN" +"3394239488","3394248703","HK" +"3394248704","3394252799","VU" +"3394252800","3394256895","IN" +"3394256896","3394265087","AU" +"3394265088","3394267135","JP" +"3394267136","3394269183","TW" +"3394269184","3394273279","ID" +"3394273280","3394277375","HK" +"3394277376","3394279423","AU" +"3394279424","3394281471","PH" +"3394281472","3394282239","SG" +"3394282240","3394282495","US" +"3394282496","3394285567","SG" +"3394285568","3394289663","AU" +"3394289664","3394293759","CN" +"3394293760","3394297855","ID" +"3394297856","3394306047","TH" +"3394306048","3394307071","CN" +"3394307072","3394308095","SG" +"3394308096","3394310143","JP" +"3394310144","3394314239","AU" +"3394314240","3394322431","ID" +"3394322432","3394326527","AU" +"3394326528","3394330623","JP" +"3394330624","3394338815","AU" +"3394338816","3394347007","IN" +"3394347008","3394351103","PH" +"3394355200","3394359295","IN" +"3394359296","3394363391","AU" +"3394363392","3394418431","HK" +"3394418432","3394418687","AP" +"3394418688","3394441215","HK" +"3394441216","3394453503","IN" +"3394453504","3394461695","AU" +"3394461696","3394465791","SG" +"3394465792","3394467839","AU" +"3394469888","3394478079","JP" +"3394478080","3394482175","PK" +"3394482176","3394484223","AU" +"3394484224","3394486271","JP" +"3394486272","3394494463","HK" +"3394494464","3394498559","JP" +"3394498560","3394500607","HK" +"3394500608","3394501631","SG" +"3394501632","3394502655","CN" +"3394502656","3394503679","HK" +"3394503680","3394506751","CN" +"3394506752","3394507263","HK" +"3394507264","3394507775","JP" +"3394508544","3394508799","PH" +"3394508800","3394510847","CN" +"3394510848","3394514943","BD" +"3394514944","3394519039","JP" +"3394519040","3394521087","BD" +"3394521088","3394523135","KH" +"3394523136","3394527231","JP" +"3394527232","3394535423","PH" +"3394535424","3394544895","HK" +"3394544896","3394545151","AP" +"3394545152","3394621439","HK" +"3394621440","3394625535","CN" +"3394625536","3394629631","HK" +"3394629632","3394631679","AU" +"3394631680","3394634751","HK" +"3394634752","3394635775","IN" +"3394635776","3394637823","KR" +"3394637824","3394641919","AF" +"3394641920","3394648063","AU" +"3394648064","3394650111","JP" +"3394650112","3394658303","HK" +"3394658304","3394662399","NZ" +"3394662400","3394664447","AU" +"3394664448","3394666495","JP" +"3394666496","3394682879","MO" +"3394682880","3394686975","PH" +"3394686976","3394689023","AU" +"3394689024","3394691071","BD" +"3394691072","3394697215","JP" +"3394697216","3394697471","SG" +"3394697472","3394697727","CN" +"3394697728","3394697983","AU" +"3394697984","3394698239","IN" +"3394698240","3394699263","CN" +"3394699264","3394700287","HK" +"3394700288","3394707455","AU" +"3394707456","3394715647","IN" +"3394715648","3394719743","JP" +"3394719744","3394723839","CN" +"3394723840","3394732031","MY" +"3394732032","3394740223","NC" +"3394740224","3394744319","AU" +"3394744320","3394752511","ID" +"3394752512","3394753535","WS" +"3394753536","3394754559","VN" +"3394754560","3394756607","MY" +"3394756608","3394760703","JP" +"3394760704","3394764799","ID" +"3394764800","3394772991","HK" +"3394772992","3394777087","PK" +"3394777088","3394781183","JP" +"3394781184","3394789375","MP" +"3394789376","3394797567","HK" +"3394797568","3394813951","IN" +"3394813952","3394815999","JP" +"3394816000","3394818047","HK" +"3394818048","3394830335","IN" +"3394830336","3394831359","HK" +"3394831360","3394832383","NZ" +"3394832384","3394834431","CN" +"3394834432","3394835967","HK" +"3394835968","3394836223","AP" +"3394836224","3394836479","HK" +"3394836480","3394838527","BT" +"3394838528","3394846719","NZ" +"3394846720","3394850815","IN" +"3394850816","3394854911","JP" +"3394855936","3394856959","AU" +"3394856960","3394859007","IN" +"3394859008","3394860031","JP" +"3394860032","3394860543","ID" +"3394860544","3394861055","IN" +"3394861056","3394862079","HK" +"3394862080","3394863103","KR" +"3394863104","3394871295","NZ" +"3394871296","3394879487","AU" +"3394879488","3394883583","PH" +"3394883584","3394887679","ID" +"3394887680","3394893823","JP" +"3394893824","3394894847","KR" +"3394894848","3394895871","HK" +"3394895872","3394896895","CN" +"3394896896","3394897919","TH" +"3394897920","3394899967","JP" +"3394904064","3394904319","AU" +"3394904320","3394904575","IN" +"3394904576","3394905087","AU" +"3394905088","3394905343","BN" +"3394905344","3394906111","AU" +"3394906112","3394906367","IN" +"3394906368","3394906623","AU" +"3394906624","3394907135","IN" +"3394907136","3394909183","NZ" +"3394909184","3394910207","AU" +"3394910208","3394912255","NZ" +"3394912256","3394920447","PF" +"3394920448","3394924543","IN" +"3394924544","3394928639","CN" +"3394928640","3394936831","PH" +"3394936832","3394940927","AU" +"3394940928","3394945023","JP" +"3394945024","3394945279","IN" +"3394945536","3394946047","ID" +"3394946048","3394946303","CN" +"3394946304","3394946559","AU" +"3394946560","3394947071","ID" +"3394947072","3394948095","BD" +"3394948096","3394948351","IN" +"3394948352","3394948607","PH" +"3394948608","3394949119","AU" +"3394949120","3394953215","JP" +"3394953216","3394957311","CN" +"3394957312","3394959359","AU" +"3394959360","3394960383","HK" +"3394960384","3394961407","PH" +"3394961408","3394962431","CN" +"3394962432","3394963455","AU" +"3394963456","3394965503","ID" +"3394965504","3394967551","TH" +"3394967552","3394969599","ID" +"3394969600","3394973695","SG" +"3394973696","3394977791","JP" +"3394977792","3394985983","IN" +"3394985984","3394990079","CN" +"3394990080","3394994175","JP" +"3394994176","3394995199","CN" +"3394995200","3394998271","IN" +"3394998272","3395002367","JP" +"3395002368","3395006463","PH" +"3395006464","3395010559","CN" +"3395010560","3395014655","AU" +"3395014656","3395018751","JP" +"3395018752","3395027967","CN" +"3395027968","3395028991","VN" +"3395028992","3395031039","CN" +"3395031040","3395035135","PK" +"3395035136","3395039231","AU" +"3395039232","3395043327","CN" +"3395043328","3395059711","AU" +"3395059712","3395067903","PH" +"3395067904","3395076095","HK" +"3395076096","3395080191","ID" +"3395080192","3395084287","AU" +"3395084288","3395088383","IN" +"3395088384","3395091455","AU" +"3395091456","3395093503","CN" +"3395093504","3395094015","AU" +"3395094016","3395094527","KR" +"3395094528","3395096575","KH" +"3395096576","3395104767","ID" +"3395104768","3395108863","TH" +"3395108864","3395117055","JP" +"3395117056","3395121151","AU" +"3395121152","3395129343","ID" +"3395129344","3395131391","JP" +"3395131392","3395131647","AU" +"3395131648","3395131903","KH" +"3395131904","3395132159","IN" +"3395132160","3395132415","AU" +"3395132416","3395133439","VN" +"3395133440","3395141631","AU" +"3395141632","3395145727","HK" +"3395145728","3395149823","BN" +"3395149824","3395155967","ID" +"3395155968","3395156991","AU" +"3395156992","3395158015","CN" +"3395166208","3395170303","AU" +"3395170304","3395174399","JP" +"3395174400","3395174911","AU" +"3395174912","3395175167","NP" +"3395175168","3395175679","IN" +"3395175680","3395175935","AU" +"3395175936","3395176191","SG" +"3395176192","3395176703","AU" +"3395176704","3395176959","TH" +"3395176960","3395177215","IN" +"3395177216","3395177471","HK" +"3395177472","3395177983","TH" +"3395177984","3395178495","AU" +"3395178496","3395178751","ID" +"3395179008","3395179263","VN" +"3395179264","3395180031","ID" +"3395180032","3395180287","JP" +"3395180288","3395180543","HK" +"3395180544","3395181055","VN" +"3395181056","3395181567","HK" +"3395181568","3395182591","CN" +"3395182592","3395182847","AP" +"3395182848","3395190783","SG" +"3395190784","3395195135","JP" +"3395195136","3395195391","US" +"3395195392","3395198975","JP" +"3395198976","3395203071","MY" +"3395203072","3395215359","JP" +"3395215360","3395219455","HK" +"3395219456","3395223551","TH" +"3395223552","3395231743","CN" +"3395231744","3395239935","JP" +"3395239936","3395243007","SG" +"3395243008","3395243263","AP" +"3395243264","3395254783","SG" +"3395254784","3395255039","IN" +"3395255040","3395256319","SG" +"3395256320","3395264511","ID" +"3395264512","3395272703","JP" +"3395272704","3395276799","PG" +"3395276800","3395280895","JP" +"3395280896","3395284991","PH" +"3395284992","3395287039","CN" +"3395287040","3395287551","JP" +"3395287552","3395287807","NZ" +"3395287808","3395288063","IN" +"3395288064","3396995071","CN" +"3396995072","3396997119","ID" +"3396997120","3396999167","IN" +"3396999168","3397001215","JP" +"3397001216","3397003263","CN" +"3397003264","3397005311","TH" +"3397005312","3397009407","JP" +"3397009408","3397017599","CN" +"3397017600","3397021695","HK" +"3397021696","3397026047","CN" +"3397026048","3397026303","AU" +"3397026304","3397026815","TH" +"3397026816","3397027071","CN" +"3397027072","3397027327","PH" +"3397027328","3397027839","IN" +"3397027840","3397029887","JP" +"3397029888","3397031423","MY" +"3397031424","3397031679","AP" +"3397031680","3397033983","MY" +"3397033984","3397038079","ID" +"3397038080","3397058559","JP" +"3397058560","3397066751","MU" +"3397066752","3397070847","IN" +"3397070848","3397074943","PH" +"3397074944","3397083135","HK" +"3397083136","3397087231","CN" +"3397091328","3397099519","GU" +"3397099520","3397103615","HK" +"3397103616","3397105663","LA" +"3397105664","3397107711","JP" +"3397107712","3397115903","HK" +"3397115904","3397119999","ID" +"3397120000","3397124095","PK" +"3397124096","3397128191","JP" +"3397128192","3397131263","CN" +"3397131264","3397132287","HK" +"3397132288","3397136383","AU" +"3397136384","3397140479","JP" +"3397140480","3397148671","AU" +"3397148672","3397156863","NZ" +"3397156864","3397165055","PH" +"3397165056","3397173247","LK" +"3397173248","3397173503","AU" +"3397173504","3397173759","PH" +"3397173760","3397174015","IN" +"3397174016","3397174271","AU" +"3397174272","3397175295","ID" +"3397175296","3397175807","AU" +"3397175808","3397176063","IN" +"3397176064","3397176319","ID" +"3397176320","3397176575","VN" +"3397176576","3397176831","ID" +"3397176832","3397177343","AU" +"3397177344","3397181439","JP" +"3397181440","3397185535","PW" +"3397185536","3397187583","AU" +"3397187584","3397189631","IN" +"3397189632","3397201919","AU" +"3397201920","3397206015","JP" +"3397206016","3397210111","BD" +"3397210112","3397211135","ID" +"3397211136","3397211647","TH" +"3397211648","3397212159","AU" +"3397212160","3397212671","ID" +"3397212672","3397213183","HK" +"3397213184","3397213439","IN" +"3397213440","3397213695","AU" +"3397213696","3397214207","ID" +"3397214208","3397214719","AP" +"3397214720","3397215231","AU" +"3397215232","3397215743","ID" +"3397215744","3397216255","PH" +"3397216256","3397216767","AU" +"3397216768","3397217023","IN" +"3397217024","3397217279","SG" +"3397217280","3397217791","AU" +"3397217792","3397218047","NZ" +"3397218048","3397218303","AU" +"3397218304","3397222399","CN" +"3397222400","3397230591","PK" +"3397230592","3397234687","AU" +"3397234688","3397238783","CN" +"3397238784","3397255167","HK" +"3397255168","3397259263","SG" +"3397259264","3397263359","JP" +"3397263360","3397267455","PH" +"3397267456","3397271551","HK" +"3397271552","3397275647","TW" +"3397275648","3397277695","NZ" +"3397277696","3397279743","MN" +"3397279744","3397283839","AU" +"3397283840","3397285887","KR" +"3397285888","3397287935","BD" +"3397287936","3397304319","HK" +"3397304320","3397308415","NZ" +"3397308416","3397312511","HK" +"3397312512","3397320703","JP" +"3397320704","3397322751","CN" +"3397322752","3397323775","NZ" +"3397323776","3397328895","CN" +"3397328896","3397330943","ID" +"3397330944","3397337087","CN" +"3397337088","3397341183","HK" +"3397341184","3397345279","JP" +"3397345280","3397349375","ID" +"3397349376","3397363711","CN" +"3397363712","3397365759","HK" +"3397365760","3397369855","JP" +"3397369856","3397374463","CN" +"3397374464","3397374975","AU" +"3397374976","3397386239","CN" +"3397386240","3397394431","GU" +"3397394432","3397402623","PH" +"3397402624","3397410815","GU" +"3397410816","3397411327","AU" +"3397411328","3397411583","SG" +"3397411584","3397411839","HK" +"3397411840","3397412351","KR" +"3397412352","3397412863","AU" +"3397412864","3397413375","HK" +"3397413376","3397413631","AU" +"3397413632","3397413887","IN" +"3397413888","3397414399","NZ" +"3397414400","3397414911","IN" +"3397414912","3397419007","AU" +"3397419008","3397427199","HK" +"3397427200","3397443583","SG" +"3397443584","3397451775","HK" +"3397451776","3397468159","TH" +"3397468160","3397492735","AU" +"3397492736","3397496831","MY" +"3397496832","3397498879","JP" +"3397498880","3397500927","ID" +"3397500928","3397501951","BD" +"3397501952","3397503999","IN" +"3397504000","3397505023","TH" +"3397505024","3397506559","IN" +"3397506560","3397506815","AU" +"3397506816","3397507071","IN" +"3397507072","3397507583","ID" +"3397507584","3397507839","AU" +"3397507840","3397508095","IN" +"3397508096","3397509119","PH" +"3397509120","3397510143","ID" +"3397510144","3397511167","FJ" +"3397511168","3397512191","LK" +"3397512192","3397512447","KH" +"3397512448","3397512703","AU" +"3397512704","3397512959","PH" +"3397512960","3397513727","IN" +"3397513728","3397514239","SG" +"3397514240","3397515263","AU" +"3397515264","3397516287","NP" +"3397516288","3397516543","AU" +"3397516544","3397516799","NZ" +"3397516800","3397517055","JP" +"3397517056","3397517311","AU" +"3397517312","3397525503","CN" +"3397525504","3397526527","AU" +"3397526528","3397527039","VN" +"3397527040","3397527295","AU" +"3397527552","3397528575","IN" +"3397528576","3397530623","AU" +"3397530624","3397531647","ID" +"3397531648","3397532671","SG" +"3397532672","3397533695","JP" +"3397533696","3397551359","HK" +"3397551360","3397551615","AP" +"3397551616","3397557247","HK" +"3397557248","3397557503","AP" +"3397557504","3397566463","HK" +"3397566464","3397574655","AU" +"3397574656","3397582847","CN" +"3397582848","3397584895","MN" +"3397584896","3397586943","JP" +"3397586944","3397588991","CN" +"3397588992","3397591039","KR" +"3397591040","3397595135","HK" +"3397595136","3397599231","CN" +"3397599232","3397603327","HK" +"3397603328","3397605375","KH" +"3397605376","3397607423","AU" +"3397607424","3397623807","IN" +"3397623808","3397631999","GU" +"3397632000","3397636095","JP" +"3397636096","3397640191","CN" +"3397640192","3397648383","MN" +"3397648384","3397713919","TW" +"3397713920","3397715967","ID" +"3397715968","3397718015","HK" +"3397718016","3397722111","KR" +"3397722112","3397726207","CN" +"3397726208","3397730303","IN" +"3397738496","3397742591","MY" +"3397742592","3397746687","JP" +"3397746688","3397763071","TH" +"3397763072","3397771263","PH" +"3397771264","3397779455","TW" +"3397779456","3397781503","ID" +"3397781504","3397783551","BD" +"3397783552","3397785599","VN" +"3397785600","3397787647","TO" +"3397787648","3397791743","AU" +"3397791744","3397791999","NZ" +"3397792000","3397792767","AU" +"3397792768","3397793023","IN" +"3397793024","3397793279","NZ" +"3397793280","3397793535","VN" +"3397793536","3397793791","HK" +"3397793792","3397794303","PH" +"3397794304","3397794559","CN" +"3397794560","3397794815","IN" +"3397794816","3397812223","HK" +"3397812224","3397816319","CN" +"3397816320","3397832703","IN" +"3397832704","3397836799","JP" +"3397836800","3397844991","AU" +"3397844992","3397869823","JP" +"3397869824","3397870079","AU" +"3397870080","3397910527","JP" +"3397910528","3397914111","SG" +"3397914112","3397914367","AP" +"3397914368","3397918719","SG" +"3397918720","3397922815","AU" +"3397922816","3397926911","CN" +"3397935104","3397939199","AU" +"3397939200","3397951487","KR" +"3397951488","3397959679","SG" +"3397959680","3397963775","JP" +"3397963776","3397971967","CN" +"3397971968","3397974015","LA" +"3397975040","3397976063","AU" +"3397976064","3397984255","ID" +"3397984256","3397992447","JP" +"3397992448","3398004735","AU" +"3398004736","3398008831","PH" +"3398008832","3398017023","LA" +"3398017024","3398021119","AU" +"3398021120","3398023167","FJ" +"3398023168","3398025215","JP" +"3398025216","3398029311","AU" +"3398029312","3398033407","IN" +"3398033408","3398033663","NZ" +"3398033664","3398033919","ID" +"3398033920","3398034943","IN" +"3398034944","3398035199","ID" +"3398035200","3398035455","CN" +"3398035456","3398037503","IN" +"3398037504","3398039551","NZ" +"3398039552","3398040575","IN" +"3398040576","3398041599","MY" +"3398041600","3398062079","AU" +"3398062080","3398066175","JP" +"3398066176","3398074367","IN" +"3398074368","3398090751","PH" +"3398090752","3398098943","AU" +"3398098944","3398107135","ID" +"3398107136","3398156287","AU" +"3398156288","3398164479","TH" +"3398164480","3398172671","AU" +"3398172672","3398180863","JP" +"3398180864","3398189055","IN" +"3398189056","3398205439","HK" +"3398207488","3398208511","IN" +"3398213632","3398221823","TW" +"3398221824","3398230015","JP" +"3398230016","3398238207","AU" +"3398238208","3398279167","IN" +"3398279168","3398287359","CN" +"3398287360","3398291455","JP" +"3398291456","3398295551","AU" +"3398295552","3398303743","PK" +"3398303744","3398305791","IN" +"3398305792","3398307839","JP" +"3398307840","3398311935","CN" +"3398311936","3398320127","AU" +"3398320128","3398336511","IN" +"3398336512","3398340607","AU" +"3398340608","3398352895","PK" +"3398352896","3398361087","TH" +"3398361088","3398369279","JP" +"3398369280","3398369791","IN" +"3398369792","3398370303","JP" +"3398370304","3398371327","CN" +"3398371328","3398373375","JP" +"3398373376","3398381567","CN" +"3398381568","3398383615","AU" +"3398383616","3398385663","CN" +"3398385664","3398393855","JP" +"3398397952","3398402047","PK" +"3398402048","3398418431","TH" +"3398418432","3398434815","JP" +"3398434816","3398467583","IN" +"3398467584","3398475775","BT" +"3398475776","3398481919","AU" +"3398481920","3398483967","LA" +"3398483968","3398488063","MY" +"3398488064","3398492159","TW" +"3398492160","3398500351","JP" +"3398500352","3398504447","ID" +"3398504448","3398508543","JP" +"3398508544","3398565887","TW" +"3398565888","3398567423","ID" +"3398567424","3398569983","AU" +"3398569984","3398572031","JP" +"3398572032","3398574079","AU" +"3398574080","3398582271","ID" +"3398582272","3398590463","MY" +"3398590464","3398598655","HK" +"3398598656","3398606847","ID" +"3398606848","3398610943","CN" +"3398610944","3398612991","ID" +"3398612992","3398613503","PH" +"3398613760","3398614015","AU" +"3398614016","3398615039","CN" +"3398615040","3398616063","IN" +"3398616064","3398619135","CN" +"3398619136","3398621183","AU" +"3398621184","3398623231","HK" +"3398623232","3398631423","ID" +"3398631424","3398637823","JP" +"3398637824","3398638079","PH" +"3398638080","3398647807","JP" +"3398647808","3398668287","AU" +"3398668288","3398672383","CN" +"3398672384","3398680575","PK" +"3398680576","3398684671","ID" +"3398684672","3398688767","JP" +"3398688768","3398705151","ID" +"3398705152","3398709247","CN" +"3398709248","3398711295","AU" +"3398713344","3398729727","CN" +"3398729728","3398737919","AU" +"3398737920","3398742015","SG" +"3398742016","3398746111","TH" +"3398746112","3398750207","IN" +"3398750208","3398754303","TW" +"3398754304","3398758399","AU" +"3398758400","3398768639","JP" +"3398768640","3398770687","TH" +"3398770688","3398778879","CN" +"3398778880","3398787071","ID" +"3398787072","3398795263","TH" +"3398795264","3398803455","ID" +"3398803456","3398811647","CN" +"3398811648","3398819839","IN" +"3398819840","3398828031","CN" +"3398828032","3398829055","KH" +"3398829056","3398830079","IN" +"3398830080","3398831103","KH" +"3398831104","3398831359","JP" +"3398831360","3398831615","HK" +"3398831616","3398832127","JP" +"3398832128","3398840319","CN" +"3398840320","3398842367","JP" +"3398842368","3398843391","CN" +"3398843392","3398844415","AU" +"3398844416","3398852607","ID" +"3398852608","3398860799","NZ" +"3398860800","3398873087","ID" +"3398873088","3398877183","KR" +"3398877184","3398881279","CN" +"3398881280","3398885375","SG" +"3398885376","3398894591","CN" +"3398894592","3398895615","TH" +"3398895616","3398897663","ID" +"3398897664","3398901759","FJ" +"3398901760","3398902015","AU" +"3398902016","3398902271","HK" +"3398902272","3398902783","PH" +"3398902784","3398903807","AU" +"3398903808","3398905855","TH" +"3398905856","3398909951","TW" +"3398909952","3398918143","GU" +"3398918144","3398926335","JP" +"3398926336","3398934527","CN" +"3398934528","3398938623","VN" +"3398938624","3398942719","TH" +"3398942720","3398959103","MY" +"3398959104","3398975487","ID" +"3398975488","3398983679","BN" +"3398983680","3398991871","JP" +"3398991872","3399004159","ID" +"3399004160","3399008255","CN" +"3399008256","3399012351","ID" +"3399012352","3399016447","JP" +"3399016448","3399024639","ID" +"3399024640","3399025663","CN" +"3399026176","3399026431","SG" +"3399026432","3399026687","AU" +"3399026688","3399028735","HK" +"3399028736","3399032831","ID" +"3399032832","3399036927","IN" +"3399036928","3399041023","CN" +"3399041024","3399045119","AU" +"3399045120","3399047167","MV" +"3399047168","3399057407","HK" +"3399057408","3399065599","ID" +"3399065600","3399077887","TW" +"3399077888","3399081983","AU" +"3399081984","3399106559","ID" +"3399106560","3399122943","AU" +"3399122944","3399131135","NZ" +"3399131136","3399135231","IN" +"3399135232","3399139327","ID" +"3399139328","3399147519","TW" +"3399147520","3399155711","PK" +"3399155712","3399196671","ID" +"3399196672","3399204863","AU" +"3399204864","3399221247","HK" +"3399221248","3399286783","SG" +"3399286784","3399303167","JP" +"3399303168","3399311359","IN" +"3399311360","3399319551","JP" +"3399319552","3399335935","SG" +"3399335936","3399344127","CN" +"3399344128","3399352319","JP" +"3399352320","3399389183","ID" +"3399389184","3399393279","KR" +"3399393280","3399401471","CN" +"3399401472","3399409663","AU" +"3399409664","3399413759","JP" +"3399413760","3399414015","SG" +"3399414016","3399414271","AU" +"3399414528","3399414783","AU" +"3399414784","3399415807","VN" +"3399415808","3399416831","SG" +"3399416832","3399417087","ID" +"3399417088","3399417855","AU" +"3399417856","3399450623","ID" +"3399450624","3399467007","AU" +"3399467008","3399483391","IN" +"3399483392","3399495679","BN" +"3399495680","3399499775","NZ" +"3399499776","3399507967","TW" +"3399507968","3399512063","AU" +"3399512064","3399514111","NZ" +"3399514112","3399515135","SG" +"3399515136","3399515647","VN" +"3399515648","3399516159","AU" +"3399524352","3399528447","IN" +"3399528448","3399532543","CN" +"3399532544","3399548927","SG" +"3399548928","3399557119","AU" +"3399557120","3399565311","SG" +"3399565312","3399581695","AU" +"3399581696","3399593983","HK" +"3399593984","3399598079","BD" +"3399598080","3399614463","JP" +"3399614464","3399622655","MY" +"3399622656","3399626751","ID" +"3399626752","3399630847","IN" +"3399630848","3399631615","AU" +"3399631616","3399631871","CN" +"3399631872","3399632895","SG" +"3399632896","3399633407","NZ" +"3399633408","3399633663","AU" +"3399633664","3399633919","CN" +"3399633920","3399634943","TH" +"3399634944","3399639039","JP" +"3399639040","3399643135","AU" +"3399643136","3399655423","JP" +"3399655424","3399659519","PH" +"3399659520","3399661567","NZ" +"3399661568","3399662591","HK" +"3399662592","3399663615","IN" +"3399663616","3399671807","ID" +"3399671808","3399679999","IN" +"3399680000","3399688191","HK" +"3399688192","3399696383","SG" +"3399696384","3399712767","PK" +"3399712768","3399720959","KR" +"3399720960","3399729151","JP" +"3399729152","3399745535","PH" +"3399745536","3399749631","CN" +"3399749632","3399751679","AU" +"3399751680","3399751935","IN" +"3399751936","3399752191","CN" +"3399752192","3399752447","AU" +"3399752448","3399752703","HK" +"3399752704","3399753727","NZ" +"3399753728","3399761919","IN" +"3399761920","3399770111","JP" +"3399770112","3399778303","CN" +"3399778304","3399786495","IN" +"3399786496","3399794687","PH" +"3399794688","3399798783","AU" +"3399798784","3399800831","BD" +"3399800832","3399802879","ID" +"3399802880","3399811071","JP" +"3399811072","3399819263","MY" +"3399819264","3399823359","ID" +"3399823360","3399825407","JP" +"3399825408","3399826431","KR" +"3399826432","3399826943","PH" +"3399826944","3399827455","IN" +"3399827456","3399835647","AU" +"3399835648","3399839743","CN" +"3399839744","3399841791","JP" +"3399841792","3399852031","TW" +"3399852032","3399856127","JP" +"3399856128","3399860223","CN" +"3399860224","3399864319","PG" +"3399864320","3399868415","CN" +"3399868416","3399872255","PK" +"3399872256","3399873023","CN" +"3399873024","3399873279","PK" +"3399873280","3399873535","CN" +"3399873536","3399873791","PK" +"3399873792","3399874047","CN" +"3399874048","3399875327","PK" +"3399875328","3399876607","CN" +"3399876608","3399917567","SG" +"3399917568","3399921663","PK" +"3399921664","3399923711","NC" +"3399923712","3399923967","IN" +"3399923968","3399924223","JP" +"3399924224","3399924735","AU" +"3399924736","3399925759","PH" +"3399925760","3399933951","NP" +"3399933952","3399942143","CN" +"3399942144","3399945983","HK" +"3399945984","3399946239","AU" +"3399946240","3399950335","HK" +"3399950336","3399958527","MY" +"3399958528","3399974911","US" +"3399974912","3399995391","MY" +"3399995392","3399999487","KR" +"3399999488","3400004671","SG" +"3400004672","3400004703","AU" +"3400004704","3400006143","SG" +"3400006144","3400006399","HK" +"3400006400","3400006911","SG" +"3400006912","3400006927","AU" +"3400006928","3400007679","SG" +"3400007680","3400024063","AU" +"3400024064","3400028159","MY" +"3400030208","3400031231","IN" +"3400031232","3400031743","SG" +"3400031744","3400031999","IN" +"3400032000","3400032255","HK" +"3400032256","3400040447","AU" +"3400048640","3400056831","CN" +"3400056832","3400060927","TW" +"3400060928","3400062975","HK" +"3400062976","3400065023","JP" +"3400065024","3400073215","BD" +"3400073216","3400077311","HK" +"3400077312","3400079359","AU" +"3400079360","3400081407","MY" +"3400081408","3400089599","ID" +"3400089600","3400097791","JP" +"3400097792","3400105983","AU" +"3400105984","3400114175","JP" +"3400114176","3400118271","TW" +"3400118272","3400120319","AU" +"3400120320","3400122367","JP" +"3400122368","3400130559","NZ" +"3400130560","3400138751","ID" +"3400138752","3400146943","HK" +"3400146944","3400151039","FJ" +"3400151040","3400155135","MY" +"3400155136","3400163327","MN" +"3400163328","3400167423","JP" +"3400167424","3400171519","TH" +"3400171520","3400179711","CN" +"3400179712","3400183807","NZ" +"3400183808","3400187903","JP" +"3400187904","3400189951","AU" +"3400192000","3400194047","JP" +"3400194048","3400204287","CN" +"3400204288","3400212479","ID" +"3400212480","3400220671","MY" +"3400220672","3400224767","NC" +"3400224768","3400228863","JP" +"3400228864","3400232959","AU" +"3400232960","3400245247","JP" +"3400245248","3400253439","AU" +"3400253440","3400257535","MY" +"3400257536","3400259583","HK" +"3400259584","3400261631","CN" +"3400261632","3400263679","JP" +"3400263680","3400263935","AU" +"3400263936","3400264191","ID" +"3400264192","3400264447","IN" +"3400264448","3400264703","CN" +"3400264704","3400265215","ID" +"3400265216","3400265471","AU" +"3400265472","3400265727","IN" +"3400265728","3400267775","PG" +"3400267776","3400268799","KR" +"3400268800","3400269823","MO" +"3400269824","3400270847","CN" +"3400270848","3400271359","VN" +"3400271360","3400271615","AU" +"3400271616","3400271871","IN" +"3400271872","3400273919","AU" +"3400273920","3400275967","TH" +"3400275968","3400278015","JP" +"3400278016","3400286207","SG" +"3400286208","3400294399","JP" +"3400294400","3400310783","AU" +"3400310784","3400335359","SG" +"3400335360","3400336383","CN" +"3400336384","3400336639","PH" +"3400336640","3400336895","JP" +"3400337152","3400337407","PH" +"3400337408","3400339455","CN" +"3400339456","3400341503","ID" +"3400341504","3400343551","AU" +"3400343552","3400351743","TW" +"3400351744","3400359935","ID" +"3400359936","3400364031","JP" +"3400368128","3400388607","AU" +"3400388608","3400392703","TH" +"3400392704","3400400895","CN" +"3400400896","3400401919","MO" +"3400401920","3400402175","TW" +"3400402176","3400402431","IN" +"3400402432","3400402943","NZ" +"3400402944","3400404991","HK" +"3400404992","3400409087","TW" +"3400409088","3400413183","AU" +"3400413184","3400417279","JP" +"3400417280","3400421375","CN" +"3400421376","3400423423","AU" +"3400423424","3400424447","KR" +"3400424448","3400425471","IN" +"3400425472","3400429567","AU" +"3400429568","3400431615","NZ" +"3400431616","3400431871","IN" +"3400431872","3400432127","HK" +"3400432128","3400432639","IN" +"3400433664","3400435711","HK" +"3400435712","3400436223","BD" +"3400436224","3400438201","HK" +"3400438202","3400438202","US" +"3400438203","3400438527","HK" +"3400438528","3400438783","AF" +"3400438784","3400441599","HK" +"3400441600","3400441855","AU" +"3400441856","3400450047","NZ" +"3400450048","3400458239","JP" +"3400458240","3400466431","AU" +"3400466432","3400499199","MO" +"3400499200","3400503295","NZ" +"3400503296","3400507391","JP" +"3400507392","3400515583","MO" +"3400515584","3400531967","PH" +"3400534016","3400535039","JP" +"3400535040","3400535551","MY" +"3400535552","3400536063","AU" +"3400536064","3400548351","JP" +"3400548352","3400581119","TH" +"3400581120","3400589311","SG" +"3400589312","3400597503","CN" +"3400597504","3400605695","HK" +"3400605696","3400607743","JP" +"3400607744","3400608767","AU" +"3400608768","3400609791","IN" +"3400609792","3400630271","JP" +"3400630272","3400646655","IN" +"3400646656","3400650239","SG" +"3400650240","3400650495","AU" +"3400650496","3400652543","SG" +"3400652544","3400652799","AU" +"3400652800","3400654103","SG" +"3400654104","3400654111","AU" +"3400654112","3400654591","SG" +"3400654592","3400654847","AU" +"3400654848","3400663039","IN" +"3400663040","3400683519","MY" +"3400683520","3400691711","JP" +"3400691712","3400695807","KH" +"3400695808","3400728575","TW" +"3400728576","3400736767","MN" +"3400736768","3400744959","JP" +"3400744960","3400753151","IN" +"3400753152","3400753407","MY" +"3400753408","3400753663","AP" +"3400753664","3400761343","MY" +"3400773632","3400775679","KR" +"3400775680","3400777727","ID" +"3400777728","3400790015","JP" +"3400790016","3400794111","CN" +"3400794112","3400802303","ID" +"3400802304","3400806399","JP" +"3400806400","3400808447","ID" +"3400808448","3400810495","JP" +"3400810496","3400826879","NZ" +"3400826880","3400835071","CN" +"3400835072","3400839167","HK" +"3400839168","3400847359","JP" +"3400847360","3400849407","CN" +"3400849408","3400851455","MN" +"3400851456","3400859647","AU" +"3400867840","3400884223","AU" +"3400884224","3400888319","JP" +"3400888320","3400892415","CN" +"3400892416","3400925183","HK" +"3400925184","3400933375","TH" +"3400933376","3400937471","CN" +"3400937472","3400941567","ID" +"3400941568","3400966143","AU" +"3400966144","3400974335","ID" +"3400974336","3400982527","CN" +"3400982528","3400990719","HK" +"3400990720","3400998911","ID" +"3400998912","3401003007","PH" +"3401003008","3401007103","JP" +"3401007104","3401011199","IN" +"3401011200","3401015295","JP" +"3401015296","3401023487","AU" +"3401023488","3401056255","TH" +"3401056256","3401383935","MY" +"3401383936","3401400319","CN" +"3401400320","3401404415","AU" +"3401404416","3401408511","CN" +"3401408512","3401416703","HK" +"3401416704","3401420799","KR" +"3401420800","3401424895","JP" +"3401424896","3401428991","NZ" +"3401428992","3401431039","JP" +"3401431040","3401433087","CN" +"3401433088","3401441279","JP" +"3401441280","3401449471","IN" +"3401449472","3401515007","MY" +"3401515008","3401515263","CN" +"3401515264","3401515519","AU" +"3401515520","3401516031","ID" +"3401516032","3401519103","AU" +"3401519104","3401523199","JP" +"3401523200","3401527295","NZ" +"3401527296","3401529343","AU" +"3401529344","3401530367","VN" +"3401530368","3401531391","AU" +"3401531392","3401532415","IN" +"3401532416","3401539583","CN" +"3401539584","3401543679","AU" +"3401543680","3401545727","JP" +"3401545728","3401547775","BD" +"3401547776","3401580543","IN" +"3401580544","3402629119","CN" +"3402629120","3403184127","JP" +"3403184128","3403186175","US" +"3403186176","3403858175","JP" +"3403858176","3403859967","US" +"3403859968","3404506879","JP" +"3404506880","3404507135","US" +"3404507136","3404694271","JP" +"3404694272","3404694527","US" +"3404694528","3404696319","JP" +"3404696320","3404696831","US" +"3404696832","3404857954","JP" +"3404857955","3404857955","ID" +"3404857956","3404857966","JP" +"3404857967","3404857967","IN" +"3404857968","3405774847","JP" +"3405774848","3405775871","AU" +"3405775872","3405776895","CN" +"3405776896","3405777407","AU" +"3405777408","3405777919","CN" +"3405777920","3405779455","AU" +"3405779456","3405779711","CN" +"3405779712","3405780991","AU" +"3405780992","3405781247","CN" +"3405781248","3405785599","AU" +"3405785600","3405786111","CN" +"3405786112","3405786367","AU" +"3405786368","3405787135","CN" +"3405787136","3405795583","AU" +"3405795584","3405796351","CN" +"3405796352","3405797887","AU" +"3405797888","3405798399","CN" +"3405798400","3405799423","AU" +"3405799424","3405799935","CN" +"3405799936","3405801471","AU" +"3405801472","3405803519","CN" +"3405803520","3405803775","AU" +"3405804032","3405804543","CN" +"3405804544","3405806079","AU" +"3405806080","3405806335","CN" +"3405806336","3405807615","AU" +"3405807616","3405807871","CN" +"3405807872","3405808127","AU" +"3405808128","3405809663","CN" +"3405809664","3405809919","AU" +"3405809920","3405810175","CN" +"3405810176","3405811199","AU" +"3405811200","3405811455","CN" +"3405811456","3405811711","AU" +"3405811712","3405811967","CN" +"3405811968","3405812223","AU" +"3405812224","3405812479","CN" +"3405812480","3405812735","AU" +"3405812736","3405812991","CN" +"3405812992","3405813247","AU" +"3405813248","3405814015","CN" +"3405814016","3405820159","AU" +"3405820160","3405820415","CN" +"3405820416","3405832191","AU" +"3405832192","3405832447","CN" +"3405832448","3405841407","AU" +"3405841408","3405842431","CN" +"3405842432","3405844991","AU" +"3405844992","3405845247","CN" +"3405845248","3405846783","AU" +"3405846784","3405847039","ID" +"3405847040","3405847551","CN" +"3405847552","3405857023","AU" +"3405857024","3405857791","CN" +"3405857792","3405858303","AU" +"3405858304","3405858815","CN" +"3405858816","3405859839","AU" +"3405859840","3405860351","CN" +"3405860352","3405863423","AU" +"3405863424","3405863679","CN" +"3405863680","3405865215","AU" +"3405865216","3405867007","CN" +"3405867008","3405868031","AU" +"3405868032","3405868287","CN" +"3405868288","3405905151","AU" +"3405905152","3405905663","CN" +"3405905664","3405922303","AU" +"3405922304","3405924351","CN" +"3405924352","3405924607","AU" +"3405924608","3405924863","CN" +"3405924864","3405934591","AU" +"3405934592","3405936639","CN" +"3405936640","3405938175","AU" +"3405938176","3405938687","CN" +"3405938688","3405941759","AU" +"3405941760","3405942015","CN" +"3405942016","3405944319","AU" +"3405944320","3405944575","CN" +"3405944576","3405944831","AU" +"3405944832","3405946367","CN" +"3405946368","3405946879","AU" +"3405946880","3405948927","CN" +"3405948928","3405951999","AU" +"3405952000","3405952511","CN" +"3405952512","3405956095","AU" +"3405956096","3405956607","CN" +"3405956608","3405959423","AU" +"3405959424","3405959679","CN" +"3405959680","3405960703","AU" +"3405960704","3405961215","CN" +"3405961216","3405963775","AU" +"3405963776","3405964287","CN" +"3405964288","3405964543","AU" +"3405964544","3405964799","CN" +"3405964800","3405966335","AU" +"3405966336","3405966847","CN" +"3405966848","3405988863","AU" +"3405988864","3405989119","CN" +"3405989120","3405989887","AU" +"3405989888","3405990399","CN" +"3405990400","3405990655","AU" +"3405990656","3405990911","CN" +"3405990912","3405991935","AU" +"3405991936","3405993983","CN" +"3405993984","3405996031","AU" +"3405996032","3405997055","CN" +"3405997056","3405998335","AU" +"3405998336","3405998591","CN" +"3405998592","3406000127","AU" +"3406000128","3406002431","CN" +"3406002432","3406002943","AU" +"3406002944","3406003199","CN" +"3406003200","3406005247","AU" +"3406005248","3406005503","HK" +"3406005504","3406006015","AU" +"3406006016","3406006271","CN" +"3406006272","3406007039","AU" +"3406007040","3406007295","CN" +"3406007296","3406008063","AU" +"3406008064","3406008319","CN" +"3406008320","3406070783","AU" +"3406070784","3406071551","CN" +"3406071552","3406075647","AU" +"3406075648","3406076927","CN" +"3406076928","3406077951","AU" +"3406077952","3406078207","TH" +"3406078208","3406081535","AU" +"3406081536","3406082047","CN" +"3406082048","3406083071","AU" +"3406083072","3406083327","CN" +"3406083328","3406084607","AU" +"3406084608","3406084863","CN" +"3406084864","3406089471","AU" +"3406089472","3406089727","CN" +"3406089728","3406090239","AU" +"3406090240","3406091263","CN" +"3406091264","3406095103","AU" +"3406095104","3406095359","CN" +"3406095360","3406095871","AU" +"3406095872","3406096383","CN" +"3406096384","3406103551","AU" +"3406103552","3406104063","CN" +"3406104064","3406104319","AU" +"3406104320","3406105087","CN" +"3406105088","3406105343","AU" +"3406105344","3406105599","CN" +"3406105600","3406107903","AU" +"3406107904","3406108415","CN" +"3406108416","3406109695","AU" +"3406109696","3406109951","NZ" +"3406109952","3406113791","AU" +"3406113792","3406114047","CN" +"3406114048","3406114303","AU" +"3406114304","3406114815","CN" +"3406114816","3406115839","AU" +"3406115840","3406117375","CN" +"3406117376","3406117887","AU" +"3406117888","3406118399","CN" +"3406118400","3406131711","AU" +"3406131712","3406132223","CN" +"3406132224","3406132735","AU" +"3406132736","3406132991","CN" +"3406132992","3406133247","AU" +"3406133248","3406133503","CN" +"3406133504","3406146559","AU" +"3406146560","3406146815","CN" +"3406146816","3406148607","AU" +"3406148608","3406149375","CN" +"3406149376","3406149887","AU" +"3406149888","3406150399","CN" +"3406150400","3406150655","AU" +"3406150656","3406151423","CN" +"3406151424","3406152447","AU" +"3406152448","3406152703","CN" +"3406152704","3406157311","AU" +"3406157312","3406157823","CN" +"3406157824","3406158335","AU" +"3406158336","3406158847","CN" +"3406158848","3406201599","AU" +"3406201600","3406201855","CN" +"3406201856","3406202879","AU" +"3406202880","3406203135","CN" +"3406203136","3406203391","AU" +"3406203392","3406203903","CN" +"3406203904","3406204415","AU" +"3406204416","3406204671","CN" +"3406204672","3406205951","AU" +"3406205952","3406206463","ID" +"3406206464","3406206975","CN" +"3406206976","3406208255","AU" +"3406208256","3406208511","CN" +"3406208512","3406208767","AU" +"3406208768","3406209023","CN" +"3406209024","3406221311","AU" +"3406221312","3406223359","IN" +"3406223360","3406225407","AU" +"3406225408","3406229503","CN" +"3406229504","3406231039","AU" +"3406231040","3406231295","NZ" +"3406231296","3406231551","AU" +"3406231552","3406232063","CN" +"3406232064","3406266623","AU" +"3406266624","3406266879","CN" +"3406266880","3406268927","AU" +"3406268928","3406269439","CN" +"3406269440","3406271231","AU" +"3406271232","3406271487","CN" +"3406271488","3406271999","AU" +"3406272000","3406272511","CN" +"3406272512","3406274047","AU" +"3406274048","3406274303","CN" +"3406274304","3406274559","AU" +"3406274560","3406276607","HK" +"3406276608","3406277375","AU" +"3406277376","3406277631","ID" +"3406277632","3406282751","AU" +"3406282752","3406283263","CN" +"3406283264","3406284799","AU" +"3406284800","3406285055","CN" +"3406285056","3406299135","AU" +"3406299136","3406299391","CN" +"3406299392","3406301183","AU" +"3406301184","3406301439","CN" +"3406301440","3406305023","AU" +"3406305024","3406307327","CN" +"3406307328","3406317055","AU" +"3406317056","3406317311","CN" +"3406317312","3406320127","AU" +"3406320128","3406320383","CN" +"3406320384","3406321151","AU" +"3406321152","3406321663","CN" +"3406321664","3406322431","AU" +"3406322432","3406322687","CN" +"3406322688","3406327039","AU" +"3406327040","3406327295","IN" +"3406327296","3406327807","CN" +"3406327808","3406328575","AU" +"3406328576","3406328831","CN" +"3406328832","3406329343","IN" +"3406329344","3406331647","AU" +"3406331648","3406331903","VN" +"3406331904","3406341631","AU" +"3406341632","3406342143","CN" +"3406342144","3406342399","AU" +"3406342400","3406342655","CN" +"3406342656","3406343167","AU" +"3406343168","3406343423","VN" +"3406343424","3406343679","CN" +"3406343680","3406346239","AU" +"3406346240","3406346495","CN" +"3406346496","3406346751","AU" +"3406346752","3406347263","CN" +"3406347264","3406347775","AU" +"3406347776","3406348543","CN" +"3406348544","3406349567","AU" +"3406349568","3406350335","CN" +"3406350336","3406350591","AU" +"3406350592","3406350847","IN" +"3406350848","3406351103","AU" +"3406351104","3406351359","CN" +"3406351360","3406352639","AU" +"3406352640","3406354431","CN" +"3406354432","3406354687","AU" +"3406354688","3406354943","CN" +"3406354944","3406355455","AU" +"3406355456","3406355711","CN" +"3406355712","3406372863","AU" +"3406372864","3406373119","CN" +"3406373120","3406373887","AU" +"3406373888","3406374399","CN" +"3406374400","3406379263","AU" +"3406379264","3406379519","CN" +"3406379520","3406380799","AU" +"3406380800","3406381055","CN" +"3406381056","3406381311","AU" +"3406381312","3406381567","CN" +"3406381568","3406382591","AU" +"3406382592","3406383359","CN" +"3406383360","3406383871","AU" +"3406383872","3406384639","CN" +"3406384640","3406384895","AP" +"3406384896","3406385151","SG" +"3406385152","3406389247","AU" +"3406389248","3406390783","CN" +"3406390784","3406392319","AU" +"3406392320","3406392575","CN" +"3406392576","3406405119","AU" +"3406405120","3406405375","CN" +"3406405376","3406409727","AU" +"3406409728","3406411775","NZ" +"3406411776","3406434303","AU" +"3406434304","3406436351","MY" +"3406436352","3406438911","AU" +"3406438912","3406439167","CN" +"3406439168","3406444543","AU" +"3406444544","3406444799","CN" +"3406444800","3406445055","AU" +"3406445056","3406445311","MY" +"3406445312","3406449151","AU" +"3406449152","3406449663","CN" +"3406449664","3406451711","AU" +"3406451712","3406452991","CN" +"3406452992","3406454527","AU" +"3406454528","3406454783","CN" +"3406454784","3406462207","AU" +"3406462208","3406462463","CN" +"3406462464","3406512383","AU" +"3406512384","3406512639","IN" +"3406512640","3406513663","AU" +"3406513664","3406513919","CN" +"3406513920","3406514687","AU" +"3406514688","3406514943","TH" +"3406514944","3406515199","AU" +"3406515200","3406516223","CN" +"3406516224","3406516735","AU" +"3406516736","3406516991","CN" +"3406516992","3406517247","AU" +"3406517248","3406518271","CN" +"3406518272","3406521343","AU" +"3406521344","3406522367","CN" +"3406522368","3406523647","AU" +"3406523648","3406523903","CN" +"3406523904","3406525695","AU" +"3406525696","3406525951","CN" +"3406525952","3406526975","AU" +"3406526976","3406527231","CN" +"3406527232","3406527999","AU" +"3406528000","3406528255","CN" +"3406528256","3406528511","AU" +"3406528512","3406528767","AP" +"3406528768","3406530559","AU" +"3406530560","3406531583","CN" +"3406531584","3406531839","AU" +"3406531840","3406532607","CN" +"3406532608","3406541823","AU" +"3406541824","3406542847","CN" +"3406542848","3406543103","AP" +"3406543104","3406548991","AU" +"3406548992","3406550015","CN" +"3406550016","3406565375","AU" +"3406565376","3406565631","CN" +"3406565632","3406565887","AU" +"3406565888","3406566143","PH" +"3406566144","3406566399","CN" +"3406566400","3406566911","ID" +"3406566912","3406567423","AU" +"3406567424","3406567679","CN" +"3406567680","3406575871","AU" +"3406575872","3406576127","CN" +"3406576128","3406577919","AU" +"3406577920","3406578431","CN" +"3406578432","3406579199","AU" +"3406579200","3406579711","CN" +"3406579712","3406583551","AU" +"3406583552","3406585855","CN" +"3406585856","3406586879","AU" +"3406586880","3406587391","CN" +"3406587392","3406587647","AU" +"3406587648","3406587903","CN" +"3406587904","3406590463","AU" +"3406590464","3406590719","CN" +"3406590720","3406591487","AU" +"3406591488","3406591743","CN" +"3406591744","3406594559","AU" +"3406594560","3406594815","CN" +"3406594816","3406596351","AU" +"3406596352","3406596607","CN" +"3406596608","3406611455","AU" +"3406611456","3406614527","CN" +"3406614528","3406615295","AU" +"3406615296","3406615551","CN" +"3406615552","3406617343","AU" +"3406617344","3406617599","CN" +"3406617600","3406617855","MY" +"3406617856","3406618111","AU" +"3406618112","3406618623","IN" +"3406618624","3406619135","AU" +"3406619136","3406619391","CN" +"3406619392","3406622719","AU" +"3406622720","3406623743","CN" +"3406623744","3406625023","AU" +"3406625024","3406625279","NF" +"3406625280","3406631423","AU" +"3406631424","3406631679","CN" +"3406631680","3406632959","AU" +"3406632960","3406633215","CN" +"3406633216","3406637055","AU" +"3406637056","3406637311","IN" +"3406637312","3406638079","AU" +"3406638080","3406638591","CN" +"3406638592","3406647295","AU" +"3406647296","3406649855","CN" +"3406649856","3406650367","AU" +"3406650368","3406651391","CN" +"3406651392","3406669823","AU" +"3406669824","3406670847","IN" +"3406670848","3406671103","AU" +"3406671104","3406671359","CN" +"3406671360","3406684159","AU" +"3406684160","3406684671","CN" +"3406684672","3406684927","AU" +"3406684928","3406685183","CN" +"3406685184","3406686463","AU" +"3406686464","3406686719","CN" +"3406686720","3406696959","AU" +"3406696960","3406697215","IN" +"3406697216","3406698495","AU" +"3406698496","3406699519","CN" +"3406699520","3406700799","AU" +"3406700800","3406701055","CN" +"3406701056","3406706687","AU" +"3406706688","3406706943","CN" +"3406706944","3406707967","AU" +"3406707968","3406708479","CN" +"3406708480","3406718975","AU" +"3406718976","3406719231","CN" +"3406719232","3406721535","AU" +"3406721536","3406722047","CN" +"3406722048","3406722559","AU" +"3406722560","3406722815","CN" +"3406722816","3406733823","AU" +"3406733824","3406734079","CN" +"3406734080","3406734847","AU" +"3406734848","3406735103","HK" +"3406735104","3406737407","AU" +"3406737408","3406737663","ID" +"3406737664","3406739199","AU" +"3406739200","3406739455","ID" +"3406739456","3406741759","CN" +"3406741760","3406742015","AU" +"3406742016","3406742527","CN" +"3406742528","3406746623","AU" +"3406746624","3406746879","JP" +"3406746880","3406747135","AU" +"3406747136","3406747391","CN" +"3406747392","3406751487","AU" +"3406751488","3406751743","CN" +"3406751744","3406755327","AU" +"3406755328","3406755583","CN" +"3406755584","3406757887","AU" +"3406757888","3406761983","CN" +"3406761984","3406763007","AU" +"3406763008","3406763775","CN" +"3406763776","3406780159","AU" +"3406780160","3406780927","CN" +"3406780928","3406784767","AU" +"3406784768","3406785023","CN" +"3406785024","3406786559","AU" +"3406786560","3406788607","CN" +"3406788608","3406791167","AU" +"3406791168","3406791679","CN" +"3406791680","3406796031","AU" +"3406796032","3406796287","CN" +"3406796288","3406796543","AU" +"3406796544","3406796799","CN" +"3406796800","3406797823","AU" +"3406797824","3406798847","CN" +"3406798848","3406802431","AU" +"3406802432","3406802687","CN" +"3406802688","3406815999","AU" +"3406816000","3406816255","CN" +"3406816256","3406817279","AU" +"3406817280","3406819839","CN" +"3406819840","3406820863","AU" +"3406820864","3406821119","CN" +"3406821120","3406825983","AU" +"3406825984","3406826239","CN" +"3406826496","3406827007","CN" +"3406827008","3406827519","AU" +"3406827520","3406829567","CN" +"3406829568","3406830335","AU" +"3406830336","3406830591","CN" +"3406830592","3406832127","AU" +"3406832128","3406832383","PK" +"3406832384","3406833151","AU" +"3406833152","3406833407","CN" +"3406833408","3406835967","AU" +"3406835968","3406836735","CN" +"3406836736","3406838271","AU" +"3406838272","3406838527","CN" +"3406838528","3406857471","AU" +"3406857472","3406857727","CN" +"3406857728","3406864639","AU" +"3406864640","3406865151","CN" +"3406865152","3406865663","AU" +"3406865664","3406865919","IN" +"3406865920","3406871039","AU" +"3406871040","3406871551","CN" +"3406871552","3406881791","AU" +"3406881792","3406882047","CN" +"3406882048","3406884351","AU" +"3406884352","3406884607","CN" +"3406884608","3406884863","HK" +"3406884864","3406885119","CN" +"3406885120","3406886143","AU" +"3406886144","3406886399","CN" +"3406886400","3406889471","AU" +"3406889472","3406889727","CN" +"3406889728","3406893567","AU" +"3406893568","3406893823","CN" +"3406893824","3406894335","AU" +"3406894336","3406894591","ID" +"3406894592","3406896127","AU" +"3406896128","3406896383","CN" +"3406896384","3406896895","AU" +"3406896896","3406897151","IN" +"3406897152","3406898943","AU" +"3406898944","3406899199","CN" +"3406899200","3406903295","AU" +"3406903296","3406903551","CN" +"3406903552","3406907903","AU" +"3406907904","3406908415","CN" +"3406908416","3406911487","AU" +"3406911488","3406911999","CN" +"3406912000","3406923775","AU" +"3406923776","3406924031","CN" +"3406924032","3406930943","AU" +"3406930944","3406931199","CN" +"3406931200","3406936831","AU" +"3406936832","3406937087","CN" +"3406937088","3406937599","AU" +"3406937600","3406938111","CN" +"3406938112","3406938623","AU" +"3406938624","3406938879","IN" +"3406938880","3406946815","AU" +"3406946816","3406947071","KR" +"3406947072","3406948095","AU" +"3406948096","3406948351","CN" +"3406948352","3406948607","AU" +"3406948608","3406948863","CN" +"3406948864","3406950399","AU" +"3406950400","3406951423","NF" +"3406951424","3406952447","AU" +"3406952448","3406952703","CN" +"3406952704","3406952959","PH" +"3406952960","3406954239","AU" +"3406954240","3406954495","CN" +"3406954496","3406955007","AU" +"3406955008","3406955775","CN" +"3406955776","3406956287","AU" +"3406956288","3406956543","CN" +"3406956544","3406961151","AU" +"3406961152","3406961407","IN" +"3406961408","3406962431","AU" +"3406962432","3406962687","CN" +"3406962688","3406963967","AU" +"3406963968","3406964223","CN" +"3406964224","3406966783","AU" +"3406966784","3406967551","CN" +"3406967552","3406967807","IN" +"3406967808","3406968063","CN" +"3406968064","3406972927","AU" +"3406972928","3406973951","CN" +"3406973952","3406974975","AU" +"3406974976","3406975487","CN" +"3406975488","3406976767","AU" +"3406976768","3406977023","CN" +"3406977024","3406980095","AU" +"3406980096","3406980607","CN" +"3406980608","3406981375","AU" +"3406981376","3406981631","CN" +"3406981632","3406981887","AU" +"3406981888","3406982143","CN" +"3406982144","3406982655","AU" +"3406982656","3406982911","CN" +"3406983168","3406987519","AU" +"3406987520","3406987775","CN" +"3406987776","3406988031","AU" +"3406988032","3406988799","CN" +"3406988800","3406989567","AU" +"3406989568","3406989823","IN" +"3406989824","3406991359","AU" +"3406991360","3406991615","CN" +"3406991616","3406993663","AU" +"3406993664","3406993919","CN" +"3406993920","3406994431","AU" +"3406995456","3407005439","AU" +"3407005440","3407005695","CN" +"3407005696","3407007743","AU" +"3407007744","3407007999","CN" +"3407008000","3407008511","AU" +"3407008512","3407008767","CN" +"3407008768","3407009535","AU" +"3407009536","3407009791","CN" +"3407009792","3407020287","AU" +"3407020544","3407020799","AU" +"3407020800","3407021055","IN" +"3407021056","3407021311","ID" +"3407021312","3407024639","AU" +"3407024640","3407024895","CN" +"3407024896","3407026175","AU" +"3407026176","3407026431","CN" +"3407026432","3407027711","AU" +"3407027712","3407027967","CN" +"3407027968","3407028223","AU" +"3407028224","3407030271","CN" +"3407030272","3407030527","AU" +"3407030528","3407030783","CN" +"3407030784","3407031295","AU" +"3407031296","3407032063","CN" +"3407032064","3407034879","AU" +"3407034880","3407035135","CN" +"3407035136","3407035391","AU" +"3407035392","3407035903","CN" +"3407035904","3407036415","AU" +"3407036416","3407036671","CN" +"3407036672","3407037439","AU" +"3407037440","3407037695","CN" +"3407037696","3407038463","AU" +"3407038464","3407038719","CN" +"3407038720","3407045887","AU" +"3407045888","3407046143","CN" +"3407046144","3407048447","AU" +"3407048448","3407048703","CN" +"3407048704","3407053567","AU" +"3407053568","3407053823","CN" +"3407053824","3407054079","AU" +"3407054080","3407054335","CN" +"3407054336","3407056895","AU" +"3407056896","3407057151","CN" +"3407057152","3407057663","AU" +"3407057920","3407058175","AU" +"3407058176","3407058431","CN" +"3407058432","3407059967","AU" +"3407059968","3407060223","CN" +"3407060224","3407065087","AU" +"3407065088","3407065343","CN" +"3407065344","3407065599","AU" +"3407065600","3407066111","CN" +"3407066112","3407073279","AU" +"3407073280","3407073535","CN" +"3407073536","3407078399","AU" +"3407078400","3407079423","CN" +"3407079424","3407079679","AU" +"3407079680","3407079935","CN" +"3407079936","3407081471","AU" +"3407081728","3407081983","AU" +"3407081984","3407082239","CN" +"3407082240","3407083519","AU" +"3407083520","3407084031","CN" +"3407084032","3407085311","AU" +"3407085312","3407085567","CN" +"3407085568","3407089919","AU" +"3407089920","3407090175","CN" +"3407090176","3407095807","AU" +"3407095808","3407096319","CN" +"3407096320","3407097855","AU" +"3407097856","3407098111","CN" +"3407098112","3407101183","AU" +"3407101184","3407101439","CN" +"3407101440","3407101695","AU" +"3407101952","3407102207","AU" +"3407102208","3407102463","CN" +"3407102464","3407107071","AU" +"3407107072","3407107583","CN" +"3407107584","3407108351","AU" +"3407108352","3407108607","CN" +"3407108608","3407112447","AU" +"3407112448","3407112703","AP" +"3407112704","3407113215","CN" +"3407113216","3407115007","AU" +"3407115008","3407115263","CN" +"3407115264","3407115519","AU" +"3407115520","3407116287","CN" +"3407116288","3407116799","AU" +"3407116800","3407117055","CN" +"3407117056","3407117823","AU" +"3407117824","3407118335","CN" +"3407118336","3407120127","AU" +"3407120128","3407122431","CN" +"3407122432","3407123967","AU" +"3407123968","3407124223","CN" +"3407124224","3407144447","AU" +"3407144448","3407144703","CN" +"3407144704","3407144959","AU" +"3407144960","3407145215","CN" +"3407145216","3407145983","AU" +"3407145984","3407146239","CN" +"3407146240","3407147263","AU" +"3407147264","3407147519","NZ" +"3407147520","3407151103","AU" +"3407151104","3407151871","CN" +"3407151872","3407152895","AU" +"3407152896","3407153151","IN" +"3407153152","3407153407","CN" +"3407153408","3407153663","AU" +"3407153664","3407153919","CN" +"3407153920","3407155711","AU" +"3407155712","3407155967","CN" +"3407155968","3407159551","AU" +"3407159552","3407160063","CN" +"3407160064","3407161599","AU" +"3407161600","3407161855","CN" +"3407161856","3407162367","TH" +"3407162368","3407162623","CN" +"3407162624","3407168511","AU" +"3407168512","3407168767","CN" +"3407168768","3407170047","AU" +"3407170048","3407170559","ID" +"3407170560","3407172095","AU" +"3407172096","3407172351","CN" +"3407172352","3407175679","AU" +"3407175680","3407176703","CN" +"3407176704","3407182847","AU" +"3407182848","3407183103","CN" +"3407183104","3407185919","AU" +"3407185920","3407186431","CN" +"3407186432","3407188223","AU" +"3407188224","3407188479","CN" +"3407188480","3407203839","AU" +"3407203840","3407204095","CN" +"3407204096","3407222783","AU" +"3407222784","3407223039","CN" +"3407223040","3407223807","AU" +"3407223808","3407224319","CN" +"3407224320","3407224575","AU" +"3407224576","3407224831","CN" +"3407224832","3407234047","AU" +"3407234048","3407234303","CN" +"3407234304","3407236095","AU" +"3407236096","3407236351","CN" +"3407236352","3407236607","AU" +"3407236608","3407236863","CN" +"3407236864","3407238143","AU" +"3407238144","3407238399","CN" +"3407238400","3407238911","AU" +"3407238912","3407239167","CN" +"3407239168","3407240191","AU" +"3407240192","3407241215","CN" +"3407241216","3407241983","AU" +"3407241984","3407242239","CN" +"3407242240","3407243775","AU" +"3407243776","3407244031","CN" +"3407244032","3407247871","AU" +"3407247872","3407248383","CN" +"3407248384","3407250175","AU" +"3407250176","3407250431","CN" +"3407250432","3407258367","AU" +"3407258368","3407258623","CN" +"3407258624","3407259135","AU" +"3407259136","3407259391","CN" +"3407259392","3407260159","AU" +"3407260160","3407260415","CN" +"3407260416","3407261695","AU" +"3407261696","3407263743","CN" +"3407263744","3407266303","AU" +"3407266304","3407266559","CN" +"3407266560","3407278591","AU" +"3407278592","3407279103","CN" +"3407279104","3407279359","AU" +"3407279360","3407279871","CN" +"3407279872","3407281151","AU" +"3407281152","3407281663","CN" +"3407281664","3407282175","AU" +"3407282176","3407282431","CN" +"3407282688","3407294207","AU" +"3407294208","3407294463","CN" +"3407294464","3407297791","AU" +"3407297792","3407298559","CN" +"3407298560","3407300863","AU" +"3407300864","3407301119","CN" +"3407301120","3407303935","AU" +"3407303936","3407304191","CN" +"3407304192","3407305727","AU" +"3407305728","3407306751","CN" +"3407306752","3407307263","AU" +"3407307264","3407307519","CN" +"3407307520","3407309567","AU" +"3407309568","3407309823","CN" +"3407309824","3407310847","AU" +"3407310848","3407311103","CN" +"3407311104","3407315455","AU" +"3407315456","3407315711","CN" +"3407315712","3407318015","AU" +"3407318016","3407318527","CN" +"3407318528","3407326207","AU" +"3407326208","3407326463","CN" +"3407326464","3407328767","AU" +"3407328768","3407329023","CN" +"3407329024","3407329791","AU" +"3407329792","3407330303","CN" +"3407330304","3407331327","AU" +"3407331328","3407331583","CN" +"3407331584","3407332607","AU" +"3407332608","3407333119","CN" +"3407333120","3407334399","AU" +"3407334400","3407335423","CN" +"3407335424","3407339519","AU" +"3407339520","3407339775","CN" +"3407339776","3407340543","AU" +"3407340544","3407341567","CN" +"3407341568","3407345919","AU" +"3407345920","3407346175","CN" +"3407346176","3407346431","AU" +"3407346432","3407346687","CN" +"3407346688","3407351039","AU" +"3407351040","3407351295","CN" +"3407351296","3407352319","AU" +"3407352320","3407352575","CN" +"3407352576","3407354623","AU" +"3407354624","3407354879","CN" +"3407354880","3407358719","AU" +"3407358720","3407358975","CN" +"3407358976","3407360511","AU" +"3407360512","3407361023","ID" +"3407361024","3407362047","AU" +"3407362048","3407362303","CN" +"3407362304","3407362559","AU" +"3407362560","3407362815","CN" +"3407362816","3407364863","AU" +"3407364864","3407365119","CN" +"3407365120","3407366655","AU" +"3407366656","3407366911","CN" +"3407366912","3407367167","AU" +"3407367168","3407367679","ID" +"3407367680","3407367935","AU" +"3407367936","3407368703","CN" +"3407368704","3407369215","AU" +"3407369216","3407369983","CN" +"3407369984","3407370239","IN" +"3407370240","3407370751","AU" +"3407370752","3407371007","CN" +"3407371008","3407376127","AU" +"3407376128","3407376639","CN" +"3407376640","3407377407","AU" +"3407377408","3407377663","CN" +"3407377664","3407378943","AU" +"3407378944","3407379455","CN" +"3407379456","3407384831","AU" +"3407384832","3407385087","CN" +"3407385088","3407386623","AU" +"3407386624","3407387135","CN" +"3407387136","3407387903","AU" +"3407387904","3407388159","CN" +"3407388160","3407388927","AU" +"3407388928","3407389183","CN" +"3407389184","3407390463","AU" +"3407390464","3407390719","CN" +"3407390720","3407395327","AU" +"3407395328","3407395839","CN" +"3407395840","3407398655","AU" +"3407398656","3407398911","CN" +"3407398912","3407399423","AU" +"3407399424","3407399679","CN" +"3407399680","3407401983","AU" +"3407401984","3407402495","CN" +"3407402496","3407403263","AU" +"3407403264","3407403519","CN" +"3407403520","3407403775","AU" +"3407403776","3407404031","CN" +"3407404032","3407410175","AU" +"3407410176","3407410431","CN" +"3407410432","3407418111","AU" +"3407418112","3407418879","CN" +"3407418880","3407425023","AU" +"3407425024","3407425279","CN" +"3407425280","3407425535","AU" +"3407425536","3407427583","CN" +"3407427584","3407429631","AU" +"3407429632","3407430143","CN" +"3407430144","3407436543","AU" +"3407436544","3407436799","CN" +"3407436800","3407438591","AU" +"3407438592","3407439103","CN" +"3407439104","3407440383","AU" +"3407440384","3407440639","CN" +"3407440640","3407446783","AU" +"3407446784","3407447039","CN" +"3407447040","3407447807","AU" +"3407447808","3407448063","CN" +"3407448320","3407448575","AU" +"3407448576","3407448831","CN" +"3407448832","3407450879","AU" +"3407450880","3407451135","CN" +"3407451136","3407452415","AU" +"3407452416","3407453183","CN" +"3407453184","3407455231","AU" +"3407455232","3407455487","CN" +"3407455488","3407455743","AU" +"3407455744","3407455999","CN" +"3407456000","3407457791","AU" +"3407457792","3407458303","CN" +"3407458304","3407459327","AU" +"3407459328","3407459583","CN" +"3407459584","3407459839","AU" +"3407459840","3407460095","CN" +"3407460096","3407462143","AU" +"3407462144","3407462399","CN" +"3407462400","3407464191","AU" +"3407464192","3407464703","CN" +"3407464704","3407464959","AU" +"3407464960","3407465471","CN" +"3407465472","3407466495","AU" +"3407466496","3407470591","CN" +"3407470592","3407471871","AU" +"3407471872","3407472127","CN" +"3407472128","3407473407","AU" +"3407473408","3407473919","CN" +"3407473920","3407475199","AU" +"3407475200","3407475455","CN" +"3407475456","3407481855","AU" +"3407481856","3407482111","CN" +"3407482112","3407487487","AU" +"3407487488","3407487743","CN" +"3407487744","3407491327","AU" +"3407491328","3407491839","CN" +"3407491840","3407492863","AU" +"3407492864","3407493631","CN" +"3407493632","3407494143","AU" +"3407494144","3407494399","CN" +"3407494400","3407495423","AU" +"3407495424","3407495679","CN" +"3407495680","3407496191","AU" +"3407496192","3407496447","CN" +"3407496448","3407498239","AU" +"3407498240","3407498495","CN" +"3407498496","3407498751","PK" +"3407498752","3407499263","AU" +"3407499264","3407499519","CN" +"3407499520","3407500287","AU" +"3407500288","3407500543","CN" +"3407500544","3407503615","AU" +"3407503616","3407503871","CN" +"3407503872","3407504895","AU" +"3407504896","3407505407","CN" +"3407505408","3407508223","AU" +"3407508224","3407508735","CN" +"3407508736","3407511807","AU" +"3407511808","3407512063","CN" +"3407512064","3407515391","AU" +"3407515392","3407515903","CN" +"3407515904","3407516671","AU" +"3407516672","3407517183","CN" +"3407517184","3407518207","AU" +"3407518208","3407518463","CN" +"3407518464","3407519231","AU" +"3407519232","3407519743","CN" +"3407519744","3407522303","AU" +"3407522304","3407522559","CN" +"3407522560","3407523071","AU" +"3407523072","3407523327","CN" +"3407523328","3407523839","AU" +"3407523840","3407524095","CN" +"3407524096","3407526143","AU" +"3407526144","3407526399","CN" +"3407526400","3407530495","AU" +"3407530496","3407531007","CN" +"3407531008","3407532543","AU" +"3407532544","3407532799","CN" +"3407532800","3407533567","AU" +"3407533568","3407533823","CN" +"3407533824","3407535615","AU" +"3407535616","3407535871","CN" +"3407535872","3407536127","AU" +"3407536128","3407536383","CN" +"3407536384","3407537151","AU" +"3407537152","3407537407","CN" +"3407537408","3407538175","AU" +"3407538176","3407538431","CN" +"3407538432","3407544319","AU" +"3407544320","3407544575","CN" +"3407544576","3407545855","AU" +"3407545856","3407546367","ID" +"3407546368","3407546879","AU" +"3407546880","3407547135","CN" +"3407547136","3407548159","AU" +"3407548160","3407548671","CN" +"3407548672","3407549439","AU" +"3407549440","3407549695","CN" +"3407549696","3407549951","AU" +"3407549952","3407550463","CN" +"3407550464","3407554559","AU" +"3407554560","3407554815","CN" +"3407554816","3407555839","AU" +"3407555840","3407556095","CN" +"3407556096","3407557887","AU" +"3407557888","3407558143","CN" +"3407558144","3407560959","AU" +"3407560960","3407561471","CN" +"3407561472","3407561727","NZ" +"3407561728","3407565055","AU" +"3407565056","3407565311","CN" +"3407565312","3407566847","AU" +"3407566848","3407567103","CN" +"3407567104","3407570431","AU" +"3407570432","3407570687","CN" +"3407570688","3407572223","AU" +"3407572224","3407572479","CN" +"3407572480","3407574271","AU" +"3407574272","3407574527","CN" +"3407574528","3407575295","AU" +"3407575296","3407576063","CN" +"3407576064","3407576319","AU" +"3407576320","3407576575","CN" +"3407576576","3407595519","AU" +"3407595520","3407595775","CN" +"3407595776","3407596031","AU" +"3407596032","3407596287","CN" +"3407596288","3407603967","AU" +"3407603968","3407604223","CN" +"3407604224","3407604479","AU" +"3407604480","3407604735","IN" +"3407604736","3407606015","AU" +"3407606016","3407606271","CN" +"3407606272","3407608319","AU" +"3407608320","3407608575","CN" +"3407608576","3407612415","AU" +"3407612416","3407612671","CN" +"3407612672","3407612927","AU" +"3407612928","3407613183","CN" +"3407613184","3407618303","AU" +"3407618304","3407619071","CN" +"3407619072","3407620863","AU" +"3407620864","3407621375","CN" +"3407621376","3407623679","AU" +"3407623680","3407623935","CN" +"3407623936","3407624191","AU" +"3407624192","3407624447","CN" +"3407624448","3407628543","AU" +"3407628544","3407629055","CN" +"3407629056","3407629311","AU" +"3407629312","3407629567","CN" +"3407629568","3407631871","AU" +"3407631872","3407632127","CN" +"3407632128","3407632383","AU" +"3407632384","3407632639","CN" +"3407632640","3407638527","AU" +"3407638528","3407638783","CN" +"3407638784","3407642623","AU" +"3407642624","3407643135","TH" +"3407643136","3407643391","AU" +"3407643392","3407643647","CN" +"3407643648","3407644671","AU" +"3407644672","3407644927","CN" +"3407644928","3407645695","AU" +"3407645696","3407645951","CN" +"3407645952","3407646975","AU" +"3407646976","3407647231","CN" +"3407647232","3407652095","AU" +"3407652096","3407652351","CN" +"3407652352","3407653119","AU" +"3407653120","3407653631","CN" +"3407653632","3407655423","AU" +"3407655424","3407655935","CN" +"3407655936","3407657215","AU" +"3407657216","3407657471","CN" +"3407657472","3407657727","AU" +"3407657728","3407657983","CN" +"3407657984","3407660031","AU" +"3407660032","3407660287","CN" +"3407660288","3407667711","AU" +"3407667712","3407668223","CN" +"3407668224","3407671039","AU" +"3407671040","3407671295","CN" +"3407671296","3407675903","AU" +"3407675904","3407676159","CN" +"3407676160","3407677439","AU" +"3407677440","3407677951","CN" +"3407677952","3407678719","AU" +"3407678720","3407679231","CN" +"3407679232","3407682047","AU" +"3407682048","3407682559","ID" +"3407682560","3407682815","CN" +"3407682816","3407687167","AU" +"3407687168","3407687423","CN" +"3407687424","3407689983","AU" +"3407689984","3407690239","CN" +"3407690240","3407691007","AU" +"3407691008","3407691263","CN" +"3407691264","3407691519","AU" +"3407691520","3407691775","CN" +"3407691776","3407693055","AU" +"3407693056","3407693311","CN" +"3407693312","3407694079","AU" +"3407694080","3407694335","CN" +"3407694336","3407696127","AU" +"3407696128","3407696383","CN" +"3407696384","3407698431","AU" +"3407698432","3407698687","CN" +"3407698688","3407699711","AU" +"3407699712","3407699967","CN" +"3407699968","3407700991","AU" +"3407700992","3407701247","CN" +"3407701248","3407701759","AU" +"3407701760","3407702015","CN" +"3407702016","3407704063","AU" +"3407704064","3407704319","CN" +"3407704320","3407706111","AU" +"3407706112","3407707135","CN" +"3407707136","3407721983","AU" +"3407721984","3407722495","CN" +"3407722496","3407723263","AU" +"3407723264","3407723519","CN" +"3407723520","3407723775","AU" +"3407723776","3407724287","CN" +"3407724288","3407727871","AU" +"3407727872","3407728127","CN" +"3407728128","3407729151","AU" +"3407729152","3407729407","CN" +"3407729408","3407730943","AU" +"3407730944","3407731199","CN" +"3407731200","3407732223","AU" +"3407732224","3407732479","HK" +"3407732480","3407733503","AU" +"3407733504","3407733759","CN" +"3407733760","3407734527","AU" +"3407734528","3407734783","CN" +"3407734784","3407735039","AU" +"3407735040","3407735551","CN" +"3407735552","3407738879","AU" +"3407738880","3407739135","CN" +"3407739136","3407740415","AU" +"3407740416","3407740927","CN" +"3407740928","3407745023","AU" +"3407745024","3407745535","CN" +"3407745536","3407747327","AU" +"3407747328","3407747583","CN" +"3407747584","3407747839","AU" +"3407747840","3407748095","CN" +"3407748096","3407748351","AU" +"3407748352","3407748607","CN" +"3407748608","3407750655","AU" +"3407750656","3407751167","SG" +"3407751168","3407753215","AU" +"3407753216","3407753727","SG" +"3407753728","3407757823","AU" +"3407757824","3407758079","CN" +"3407758080","3407761663","AU" +"3407761664","3407761919","CN" +"3407761920","3407763199","AU" +"3407763200","3407763455","CN" +"3407763456","3407769343","AU" +"3407769344","3407769599","CN" +"3407769600","3407771903","AU" +"3407771904","3407772159","CN" +"3407772160","3407772415","AU" +"3407772416","3407772671","CN" +"3407772672","3407779839","AU" +"3407779840","3407780095","CN" +"3407780096","3407780863","AU" +"3407780864","3407781119","CN" +"3407781120","3407782399","AU" +"3407782400","3407782655","CN" +"3407782656","3407785215","AU" +"3407785216","3407785471","CN" +"3407785472","3407785727","NZ" +"3407785728","3407785983","CN" +"3407785984","3407788799","AU" +"3407788800","3407789055","CN" +"3407789056","3407790591","AU" +"3407790592","3407790847","CN" +"3407790848","3407796479","AU" +"3407796480","3407796735","CN" +"3407796736","3407797247","AU" +"3407797248","3407797503","CN" +"3407797760","3407798015","CN" +"3407798016","3407800319","AU" +"3407800320","3407800831","CN" +"3407800832","3407801087","AU" +"3407801088","3407801343","CN" +"3407801344","3407801855","ID" +"3407801856","3407802367","AU" +"3407802368","3407802879","CN" +"3407802880","3407803903","AU" +"3407803904","3407804159","CN" +"3407804160","3407804927","AU" +"3407804928","3407805439","CN" +"3407805440","3407805951","AU" +"3407805952","3407806463","ID" +"3407806464","3407808511","AU" +"3407808512","3407809023","IN" +"3407809024","3407814655","AU" +"3407814656","3407815167","HK" +"3407815168","3407817983","AU" +"3407817984","3407818495","CN" +"3407818496","3407819007","AU" +"3407819008","3407819263","CN" +"3407819264","3407819519","AU" +"3407819520","3407819775","CN" +"3407819776","3407820287","AU" +"3407820288","3407820799","CN" +"3407820800","3407824127","AU" +"3407824128","3407824383","CN" +"3407824384","3407824895","AU" +"3407824896","3407825151","CN" +"3407825152","3407826943","AU" +"3407826944","3407827199","CN" +"3407827200","3407828223","AU" +"3407828224","3407828479","CN" +"3407828480","3407831295","AU" +"3407831296","3407831551","CN" +"3407831552","3407833343","AU" +"3407833344","3407833855","CN" +"3407833856","3407834111","AU" +"3407834112","3407834623","CN" +"3407834624","3407838207","AU" +"3407838208","3407838463","CN" +"3407838464","3407847935","AU" +"3407847936","3407848191","CN" +"3407848192","3407848447","AU" +"3407848448","3407848959","ID" +"3407848960","3407851007","AU" +"3407851008","3407851263","CN" +"3407851264","3407851775","AU" +"3407851776","3407852031","CN" +"3407852032","3407852799","AU" +"3407852800","3407853055","CN" +"3407853056","3407854335","AU" +"3407854336","3407854591","CN" +"3407854592","3407854847","AU" +"3407854848","3407855103","CN" +"3407855104","3407858687","AU" +"3407858688","3407858943","CN" +"3407858944","3407862783","AU" +"3407862784","3407863039","CN" +"3407863040","3407863295","AU" +"3407863296","3407863807","CN" +"3407863808","3407864063","AU" +"3407864064","3407864319","CN" +"3407864320","3407865087","AU" +"3407865088","3407865343","CN" +"3407865344","3407866367","AU" +"3407866368","3407866623","GB" +"3407866624","3407869951","AU" +"3407869952","3407870463","CN" +"3407870464","3407871231","AU" +"3407871232","3407871487","CN" +"3407871488","3407873023","AU" +"3407873024","3407873535","IN" +"3407873536","3407877119","AU" +"3407877120","3407877375","CN" +"3407877376","3407884287","AU" +"3407884288","3407884799","CN" +"3407884800","3407886335","AU" +"3407886336","3407886591","CN" +"3407886592","3407887359","AU" +"3407887360","3407887615","CN" +"3407887616","3407887871","AU" +"3407887872","3407888127","CN" +"3407888128","3407889407","AU" +"3407889408","3407889919","CN" +"3407889920","3407891455","AU" +"3407891456","3407891711","CN" +"3407891712","3407892735","AU" +"3407892736","3407892991","CN" +"3407892992","3407893503","AU" +"3407893504","3407894015","CN" +"3407894528","3407896319","AU" +"3407896320","3407896575","CN" +"3407896576","3407898111","AU" +"3407898112","3407898367","CN" +"3407898368","3407898879","AU" +"3407898880","3407899135","CN" +"3407899136","3407905279","AU" +"3407905280","3407905535","CN" +"3407905536","3407906047","AU" +"3407906048","3407906303","CN" +"3407906304","3407907839","AU" +"3407907840","3407908095","CN" +"3407908096","3407910911","AU" +"3407910912","3407911167","CN" +"3407911168","3407919615","AU" +"3407919616","3407920127","CN" +"3407920128","3407921151","AU" +"3407921152","3407921407","CN" +"3407921408","3407922175","AU" +"3407922176","3407922431","CN" +"3407922432","3407923967","AU" +"3407923968","3407924735","CN" +"3407924736","3407926271","AU" +"3407926272","3407926527","CN" +"3407926528","3407928575","AU" +"3407928576","3407928831","IN" +"3407928832","3407938559","AU" +"3407938560","3407938815","CN" +"3407938816","3407939327","AU" +"3407939328","3407941631","CN" +"3407941632","3407942911","AU" +"3407942912","3407943167","CN" +"3407943168","3407944191","AU" +"3407944192","3407944447","CN" +"3407944448","3407945727","AU" +"3407945728","3407945983","CN" +"3407945984","3407953663","AU" +"3407953664","3407954175","CN" +"3407954176","3407954687","AU" +"3407954688","3407955199","CN" +"3407955200","3407956223","AU" +"3407956224","3407956479","CN" +"3407956480","3407957759","AU" +"3407957760","3407958015","CN" +"3407958016","3407963135","AU" +"3407963136","3407963391","CN" +"3407963392","3407968767","AU" +"3407968768","3407969023","CN" +"3407969024","3407970559","AU" +"3407970560","3407970815","CN" +"3407970816","3407971071","AU" +"3407971072","3407971327","CN" +"3407971328","3407974655","AU" +"3407974656","3407974911","CN" +"3407974912","3407977471","AU" +"3407977472","3407977727","CN" +"3407977728","3407977983","AU" +"3407977984","3407978495","CN" +"3407978496","3407982079","AU" +"3407982080","3407982335","CN" +"3407982336","3407984895","AU" +"3407984896","3407985151","CN" +"3407985152","3407985919","AU" +"3407985920","3407986175","KH" +"3407986176","3407987711","AU" +"3407987712","3407987967","PH" +"3407987968","3407988223","AU" +"3407988224","3407988735","IN" +"3407988736","3407988991","CN" +"3407988992","3407989247","AU" +"3407989248","3407990015","CN" +"3407990016","3407990271","AU" +"3407990272","3407990783","CN" +"3407990784","3407992319","AU" +"3407992320","3407992831","CN" +"3407992832","3407994879","AU" +"3407994880","3407995647","CN" +"3407995648","3407997183","AU" +"3407997184","3407997439","CN" +"3407997440","3407998975","AU" +"3407998976","3407999231","TH" +"3407999232","3407999743","AU" +"3407999744","3407999999","CN" +"3408000000","3408001535","AU" +"3408001536","3408001791","CN" +"3408001792","3408004095","AU" +"3408004096","3408004351","CN" +"3408004352","3408008447","AU" +"3408008448","3408008703","CN" +"3408008704","3408009983","AU" +"3408009984","3408010239","CN" +"3408010240","3408012543","AU" +"3408012544","3408012799","MN" +"3408012800","3408013055","AU" +"3408013056","3408013311","CN" +"3408013312","3408015359","AU" +"3408015360","3408015871","CN" +"3408015872","3408016895","AU" +"3408016896","3408017151","CN" +"3408017152","3408017407","AU" +"3408017408","3408017919","CN" +"3408017920","3408020223","AU" +"3408020224","3408020479","CN" +"3408020480","3408020735","AU" +"3408020736","3408020991","CN" +"3408020992","3408022527","AU" +"3408022528","3408022783","CN" +"3408022784","3408023807","AU" +"3408023808","3408024063","JP" +"3408024320","3408026623","AU" +"3408026624","3408026879","CN" +"3408026880","3408030207","AU" +"3408030208","3408030463","CN" +"3408030464","3408031999","AU" +"3408032000","3408032255","CN" +"3408032256","3408032767","AU" +"3408032768","3408033023","LK" +"3408033024","3408033279","IN" +"3408033280","3408033791","ID" +"3408033792","3408039935","AU" +"3408039936","3408040191","VN" +"3408040192","3408040703","AU" +"3408040704","3408040959","CN" +"3408040960","3408041471","AU" +"3408041472","3408041727","CN" +"3408041728","3408041983","AU" +"3408041984","3408042495","CN" +"3408042496","3408042751","HK" +"3408042752","3408044287","AU" +"3408044288","3408044799","CN" +"3408044800","3408050943","AU" +"3408050944","3408051199","CN" +"3408051200","3408052223","AU" +"3408052224","3408054271","CN" +"3408054272","3408055295","AU" +"3408055296","3408056319","CN" +"3408056320","3408062463","AU" +"3408062464","3408062719","CN" +"3408062720","3408064511","AU" +"3408064512","3408064767","CN" +"3408065024","3408065279","CN" +"3408065280","3408065791","AU" +"3408065792","3408066047","CN" +"3408066048","3408066303","PH" +"3408066304","3408067327","AU" +"3408067328","3408067583","CN" +"3408067584","3409379839","AU" +"3409379840","3409380607","CN" +"3409380608","3409381887","AU" +"3409381888","3409382143","CN" +"3409382144","3409382655","AU" +"3409382656","3409382911","CN" +"3409382912","3409384959","AU" +"3409384960","3409385215","CN" +"3409385216","3409387007","AU" +"3409387008","3409387263","CN" +"3409387264","3409396479","AU" +"3409396480","3409396735","PH" +"3409396736","3409403135","AU" +"3409403136","3409403391","CN" +"3409403392","3409405183","AU" +"3409405184","3409405439","CN" +"3409405440","3409407231","AU" +"3409407232","3409407743","CN" +"3409407744","3409409023","AU" +"3409409024","3409409535","CN" +"3409409536","3409409791","AU" +"3409409792","3409410047","CN" +"3409410048","3409412095","AU" +"3409412096","3409412607","CN" +"3409412608","3409416703","AU" +"3409416704","3409417215","CN" +"3409417216","3409420287","AU" +"3409420288","3409420543","IN" +"3409420544","3409423615","AU" +"3409423616","3409423871","IN" +"3409423872","3409428479","AU" +"3409428480","3409428735","CN" +"3409428736","3409429503","AU" +"3409429504","3409429759","CN" +"3409429760","3409435135","AU" +"3409435136","3409435647","CN" +"3409435648","3409435903","AU" +"3409435904","3409436159","CN" +"3409436160","3409436671","AU" +"3409436672","3409436927","CN" +"3409436928","3409438563","AU" +"3409438564","3409438564","A1" +"3409438565","3409445119","AU" +"3409445120","3409445375","CN" +"3409445376","3409445887","AU" +"3409445888","3409446143","CN" +"3409446144","3409447935","AU" +"3409447936","3409448191","CN" +"3409448192","3409451007","AU" +"3409451008","3409451263","CN" +"3409451264","3409453055","AU" +"3409453056","3409453567","NZ" +"3409453568","3409454591","AU" +"3409454592","3409454847","CN" +"3409454848","3409455103","AU" +"3409455104","3409455359","CN" +"3409455360","3409456639","AU" +"3409456640","3409456895","CN" +"3409456896","3409457151","AU" +"3409457152","3409459199","CN" +"3409459200","3409462271","AU" +"3409462272","3409462783","CN" +"3409462784","3409465855","AU" +"3409465856","3409466879","CN" +"3409466880","3409469183","AU" +"3409469184","3409469439","CN" +"3409469440","3409473023","AU" +"3409473024","3409473279","CN" +"3409473280","3409475839","AU" +"3409475840","3409476095","CN" +"3409476096","3409486079","AU" +"3409486080","3409486335","CN" +"3409486336","3409488127","AU" +"3409488128","3409488383","CN" +"3409488384","3409488895","AU" +"3409488896","3409489407","CN" +"3409489408","3409489663","AU" +"3409489664","3409489919","CN" +"3409489920","3409491711","AU" +"3409491712","3409491967","CN" +"3409491968","3409492223","AU" +"3409492224","3409492479","CN" +"3409492480","3409492735","AU" +"3409492736","3409492991","CN" +"3409492992","3409494015","AU" +"3409494016","3409494271","CN" +"3409494272","3409495551","AU" +"3409495552","3409495807","CN" +"3409495808","3409496319","AU" +"3409496320","3409496575","CN" +"3409496576","3409498111","AU" +"3409498112","3409498879","CN" +"3409498880","3409499647","AU" +"3409499648","3409499903","CN" +"3409499904","3409500159","AU" +"3409500160","3409500415","CN" +"3409500416","3409502975","AU" +"3409502976","3409503487","CN" +"3409503488","3409503999","AU" +"3409504256","3409504511","CN" +"3409504512","3409506303","AU" +"3409506304","3409506559","CN" +"3409506560","3409506815","PH" +"3409506816","3409509375","AU" +"3409509376","3409509631","CN" +"3409509632","3409509887","HK" +"3409509888","3409510143","CN" +"3409510144","3409511679","AU" +"3409511680","3409512191","CN" +"3409512192","3409513471","AU" +"3409513472","3409513983","CN" +"3409513984","3409516543","AU" +"3409516544","3409517055","ID" +"3409517056","3409517567","AU" +"3409517568","3409517823","CN" +"3409517824","3409520383","AU" +"3409520384","3409520639","CN" +"3409520640","3409522175","AU" +"3409522176","3409522431","CN" +"3409522432","3409525247","AU" +"3409525248","3409525503","CN" +"3409525504","3409526015","AU" +"3409526016","3409526271","CN" +"3409526272","3409527295","AU" +"3409527296","3409527551","CN" +"3409527552","3409528063","AU" +"3409528064","3409528831","CN" +"3409528832","3409529087","AU" +"3409529088","3409529343","CN" +"3409529344","3409533439","AU" +"3409533440","3409533695","CN" +"3409533696","3409536255","AU" +"3409536256","3409536511","CN" +"3409536512","3409538303","AU" +"3409538304","3409538559","CN" +"3409538560","3409541887","AU" +"3409541888","3409542143","CN" +"3409542144","3409547519","AU" +"3409547520","3409547775","NZ" +"3409547776","3409550591","AU" +"3409550592","3409550847","CN" +"3409550848","3409561599","AU" +"3409561600","3409561855","CN" +"3409561856","3409562111","AU" +"3409562112","3409562367","CN" +"3409562368","3409563135","AU" +"3409563136","3409563391","CN" +"3409563392","3409567231","AU" +"3409567232","3409567487","CN" +"3409567488","3409567743","AU" +"3409567744","3409571839","CN" +"3409571840","3409573375","AU" +"3409573376","3409573887","CN" +"3409573888","3409574143","AU" +"3409574144","3409574399","CN" +"3409574400","3409575167","AU" +"3409575168","3409575935","CN" +"3409575936","3409838335","AU" +"3409838336","3409838591","MY" +"3409838592","3409838847","CN" +"3409838848","3409871615","AU" +"3409871616","3409871871","CN" +"3409871872","3409873663","AU" +"3409873664","3409873919","CN" +"3409873920","3409876991","AU" +"3409876992","3409878015","TH" +"3409878016","3409879295","AU" +"3409879296","3409879551","CN" +"3409879552","3409882111","AU" +"3409882112","3409883135","IN" +"3409883136","3409887999","AU" +"3409888000","3409888255","SG" +"3409888256","3409888511","AU" +"3409888512","3409888767","CN" +"3409888768","3409896447","AU" +"3409896448","3409897471","CN" +"3409897472","3409897983","AU" +"3409897984","3409898239","CN" +"3409898240","3409901055","AU" +"3409901056","3409901311","CN" +"3409901312","3409969151","AU" +"3409969152","3410755583","TW" +"3410755584","3410771967","AU" +"3410771968","3410780159","JP" +"3410780160","3410788351","BD" +"3410788352","3410792447","IN" +"3410792448","3410796543","BD" +"3410796544","3410797567","CN" +"3410797568","3410798591","JP" +"3410798592","3410799615","CN" +"3410799616","3410800639","SG" +"3410800640","3410804735","IN" +"3410804736","3410808831","PH" +"3410821120","3410853887","TW" +"3410853888","3410862079","HK" +"3410862080","3410866175","AU" +"3410866176","3410866431","KR" +"3410866432","3410866687","IN" +"3410866688","3410866943","VN" +"3410866944","3410867199","AU" +"3410867200","3410868223","CN" +"3410868224","3410870271","JP" +"3410870272","3410874367","IN" +"3410874368","3410886655","ID" +"3410886656","3410887679","TW" +"3410887680","3410887935","IN" +"3410887936","3410888703","HK" +"3410888704","3410890751","SG" +"3410890752","3410894847","AU" +"3410894848","3410898943","HK" +"3410898944","3410903039","CN" +"3410903040","3410911231","HK" +"3410911232","3410915327","TH" +"3410915328","3410919423","ID" +"3410919424","3410927615","IN" +"3410927616","3410931711","NP" +"3410931712","3410935807","TW" +"3410935808","3410939903","MY" +"3410939904","3410943999","IN" +"3410944000","3410952191","JP" +"3410952192","3410956287","CN" +"3410956288","3410958335","AU" +"3410958336","3410958847","IN" +"3410958848","3410959359","ID" +"3410959360","3410959615","VN" +"3410959616","3410959871","ID" +"3410959872","3410960383","AU" +"3410960384","3410964479","CN" +"3410964480","3410968575","JP" +"3410968576","3410984959","NZ" +"3410984960","3411017727","TW" +"3411017728","3411018751","HK" +"3411018752","3411019263","CN" +"3411019264","3411019775","JP" +"3411019776","3411021823","ID" +"3411021824","3411023871","MY" +"3411023872","3411025919","JP" +"3411025920","3411030015","CN" +"3411030016","3411032063","NC" +"3411032064","3411032319","TH" +"3411032320","3411032575","CN" +"3411032576","3411033087","AU" +"3411033088","3411034111","NZ" +"3411034112","3411050495","HK" +"3411050496","3411051519","PK" +"3411051520","3411058687","CN" +"3411058688","3411062783","AU" +"3411062784","3411064831","HK" +"3411064832","3411065087","BD" +"3411065088","3411083263","HK" +"3411083264","3411085311","CN" +"3411085312","3411086335","KR" +"3411086336","3411087359","JP" +"3411087360","3411091455","CN" +"3411091456","3411099647","SG" +"3411099648","3411107839","MM" +"3411107840","3411111935","LK" +"3411111936","3411116031","JP" +"3411116032","3411124223","KR" +"3411124224","3411128319","MM" +"3411128320","3411130367","HK" +"3411130368","3411132415","ID" +"3411132416","3411144703","PK" +"3411146752","3411147775","ID" +"3411147776","3411148799","HK" +"3411148800","3411149311","CN" +"3411149312","3411149823","MV" +"3411149824","3411150847","IN" +"3411150848","3411152895","HK" +"3411152896","3411154943","CN" +"3411156992","3411161087","PH" +"3411161088","3411165183","PK" +"3411165184","3411173375","MY" +"3411173376","3411177471","AU" +"3411181056","3411181311","US" +"3411181568","3411189759","SG" +"3411189760","3411197951","AU" +"3411197952","3411202047","BD" +"3411202048","3411204607","AU" +"3411204608","3411204863","IN" +"3411204864","3411205631","KR" +"3411205632","3411206143","HK" +"3411206144","3411210239","KH" +"3411210240","3411212287","KR" +"3411212288","3411213311","IN" +"3411213312","3411214335","HK" +"3411214336","3411215359","CN" +"3411215360","3411216383","AU" +"3411218432","3411220479","PG" +"3411220480","3411226623","ID" +"3411226624","3411227135","US" +"3411227136","3411228671","IO" +"3411228672","3411230719","CN" +"3411230720","3411247103","HK" +"3411247104","3411255295","KR" +"3411255296","3411263487","BD" +"3411263488","3411269631","AU" +"3411269632","3411270143","HK" +"3411270144","3411270399","NZ" +"3411270400","3411270655","AU" +"3411270656","3411271679","SG" +"3411271680","3411275775","CN" +"3411275776","3411277823","JP" +"3411277824","3411278335","IN" +"3411278336","3411278591","SG" +"3411278592","3411278847","FJ" +"3411278848","3411296255","HK" +"3411296256","3411312639","AU" +"3411312640","3411313151","HK" +"3411313152","3411313663","TW" +"3411313664","3411313919","AU" +"3411313920","3411314175","HK" +"3411314176","3411314687","NZ" +"3411314688","3411316735","ID" +"3411316736","3411318783","TW" +"3411318784","3411320831","ID" +"3411320832","3411329023","PH" +"3411329024","3411335167","HK" +"3411335168","3411335679","AU" +"3411335680","3411337215","HK" +"3411337216","3411341311","AU" +"3411341312","3411345407","KR" +"3411345408","3411410943","HK" +"3411410944","3411443711","CN" +"3411443712","3411460095","HK" +"3411460096","3411464191","NZ" +"3411464192","3411468287","AU" +"3411468288","3411470335","JP" +"3411470336","3411472383","HK" +"3411472384","3411474943","JP" +"3411475200","3411475455","AU" +"3411475456","3411475967","HK" +"3411475968","3411476479","CN" +"3411476480","3411509247","AU" +"3411509248","3411542015","PH" +"3411542016","3411550207","IN" +"3411550208","3411558399","CN" +"3411558400","3411561727","HK" +"3411561728","3411561983","AU" +"3411561984","3411565257","HK" +"3411565258","3411565258","US" +"3411565259","3411566591","HK" +"3411566592","3411570687","BD" +"3411570688","3411574783","AU" +"3411574784","3411582975","IN" +"3411582976","3411587071","HK" +"3411587072","3411591167","JP" +"3411591168","3411599359","CN" +"3411599360","3411607551","AU" +"3411607552","3411608575","CN" +"3411608576","3411608831","IN" +"3411608832","3411609087","AU" +"3411609088","3411609599","HK" +"3411609600","3411611647","CN" +"3411611648","3411615743","ID" +"3411615744","3411623935","JP" +"3411623936","3411640319","AU" +"3411640320","3411641343","JP" +"3411641344","3411641599","IN" +"3411641600","3411641855","HK" +"3411641856","3411642367","IN" +"3411642368","3411643391","CN" +"3411643392","3411644415","VN" +"3411644416","3411644927","AU" +"3411644928","3411645951","ID" +"3411645952","3411646207","SG" +"3411646208","3411647487","IN" +"3411647488","3411648511","AU" +"3411648512","3411656703","NZ" +"3411656704","3411673087","AU" +"3411673088","3411674111","CN" +"3411674112","3411674623","IN" +"3411674624","3411675135","HK" +"3411675136","3411676159","CN" +"3411677184","3411679231","JP" +"3411679232","3411681279","AU" +"3411681280","3411689471","KR" +"3411689472","3411705855","IN" +"3411705856","3411730431","CN" +"3411730432","3411738623","HK" +"3411738624","3411746815","TW" +"3411746816","3411755007","CN" +"3411755008","3411763199","AU" +"3411763200","3411767295","CN" +"3411767296","3411769343","MN" +"3411769344","3411771391","CN" +"3411771392","3411773183","HK" +"3411773184","3411773439","US" +"3411773440","3411773951","HK" +"3411773952","3411774207","BD" +"3411774208","3411775487","HK" +"3411775488","3411775743","US" +"3411775744","3411775811","HK" +"3411775812","3411775813","US" +"3411775814","3411777023","HK" +"3411777024","3411777279","ID" +"3411777280","3411779327","HK" +"3411779328","3411779583","ID" +"3411779584","3411787775","JP" +"3411787776","3411795967","IN" +"3411795968","3411804159","AU" +"3411804160","3411805183","CN" +"3411805184","3411805695","PK" +"3411805696","3411805951","JP" +"3411805952","3411806207","AU" +"3411806208","3411808255","PH" +"3411808256","3411810303","JP" +"3411810304","3411810559","MN" +"3411810560","3411810815","NZ" +"3411810816","3411812351","AU" +"3411812352","3411820543","IN" +"3411820544","3411836927","SG" +"3411836928","3411845119","MY" +"3411845120","3411853311","CN" +"3411853312","3411857407","IN" +"3411857408","3411859249","JP" +"3411859250","3411859251","AU" +"3411859252","3411861503","JP" +"3411861504","3411869695","AU" +"3411869696","3411943423","CN" +"3411943424","3411951615","AU" +"3411951616","3411967999","LK" +"3411968000","3411984383","AU" +"3411984384","3412000767","IN" +"3412000768","3412002815","CN" +"3412002816","3412004863","GU" +"3412004864","3412017151","JP" +"3412017152","3412025343","SG" +"3412025344","3412066303","CN" +"3412066304","3412213759","NZ" +"3412213760","3412221951","AU" +"3412221952","3412230143","IN" +"3412230144","3412246527","HK" +"3412246528","3412254719","AU" +"3412254720","3412262911","NR" +"3412262912","3412264959","JP" +"3412264960","3412271103","CN" +"3412271104","3412273151","NZ" +"3412273152","3412275199","IN" +"3412275200","3412279295","PK" +"3412279296","3412281343","NZ" +"3412281344","3412283391","JP" +"3412283392","3412287487","CN" +"3412287488","3412295679","ID" +"3412295680","3412296191","NZ" +"3412296192","3412296703","ID" +"3412296704","3412297727","NZ" +"3412297728","3412298239","SC" +"3412298240","3412298751","MY" +"3412299264","3412299519","AU" +"3412299520","3412299775","HK" +"3412299776","3412302847","AU" +"3412302848","3412303871","WS" +"3412303872","3412312063","PK" +"3412312064","3412320255","IN" +"3412320256","3412322303","JP" +"3412322304","3412324351","PH" +"3412324352","3412326399","JP" +"3412326400","3412327423","VN" +"3412327424","3412327935","TH" +"3412327936","3412328191","HK" +"3412328192","3412328447","WS" +"3412328448","3412336639","AU" +"3412336640","3412342783","CN" +"3412342784","3412343039","AU" +"3412343040","3412343295","IN" +"3412343296","3412343807","AU" +"3412344064","3412344319","AU" +"3412344320","3412344575","SG" +"3412344576","3412344831","CN" +"3412344832","3412348927","IN" +"3412348928","3412361215","CN" +"3412361216","3412369407","HK" +"3412369408","3412377599","KR" +"3412377600","3412381695","CN" +"3412381696","3412385791","NZ" +"3412385792","3412393983","AU" +"3412393984","3412426751","IN" +"3412426752","3412434943","HK" +"3412434944","3412443135","PK" +"3412443136","3412451327","SG" +"3412451328","3412526079","AU" +"3412526080","3412526335","ID" +"3412526336","3412594687","AU" +"3412594688","3412596735","IN" +"3412596736","3412598783","MV" +"3412598784","3412602879","CN" +"3412602880","3412606975","NC" +"3412606976","3412615167","PH" +"3412615168","3412656127","JP" +"3412656128","3412672511","HK" +"3412672512","3412675071","JP" +"3412675072","3412675327","US" +"3412675328","3412679167","JP" +"3412679168","3412680703","US" +"3412680704","3412697087","CN" +"3412697088","3412705279","IN" +"3412705280","3412713471","AU" +"3412713472","3412721663","TW" +"3412721664","3412787199","MY" +"3412787200","3412819967","CN" +"3412819968","3412852735","TH" +"3412852736","3412918271","AU" +"3412918272","3412926463","KR" +"3412926464","3412934655","MY" +"3412934656","3412951039","IN" +"3412951040","3413000191","NZ" +"3413000192","3413004287","LA" +"3413004288","3413008383","IN" +"3413008384","3413016575","JP" +"3413016576","3413024767","AU" +"3413024768","3413032959","CN" +"3413032960","3413037055","AU" +"3413037056","3413041151","CN" +"3413041152","3413043199","JP" +"3413043200","3413043967","CN" +"3413043968","3413044223","AU" +"3413044224","3413045247","HK" +"3413045248","3413047295","IN" +"3413047296","3413098495","AU" +"3413098496","3413102591","JP" +"3413102592","3413106687","TW" +"3413106688","3413110783","PH" +"3413110784","3413112831","JP" +"3413112832","3413113855","IN" +"3413113856","3413133311","JP" +"3413133312","3413135359","BD" +"3413135360","3413135615","AP" +"3413135616","3413135871","HK" +"3413135872","3413136127","AP" +"3413136128","3413136383","HK" +"3413136384","3413136639","AP" +"3413136640","3413139455","HK" +"3413139456","3413147647","AU" +"3413147648","3413155839","IN" +"3413155840","3413164031","SG" +"3413164032","3413172223","BD" +"3413172224","3413180415","HK" +"3413180416","3413213183","TH" +"3413213184","3413229567","VN" +"3413229568","3413245951","AU" +"3413245952","3413262335","SG" +"3413262336","3413270527","PH" +"3413270528","3413278719","TH" +"3413278720","3413295103","NZ" +"3413295104","3413303295","JP" +"3413303296","3413304319","ID" +"3413304320","3413305343","JP" +"3413305344","3413306367","IN" +"3413306368","3413307391","PH" +"3413307392","3413308415","IN" +"3413308416","3413309439","CN" +"3413309440","3413310463","JP" +"3413310464","3413311487","HK" +"3413311488","3413327871","LK" +"3413327872","3413344255","IN" +"3413344256","3413360639","PH" +"3413360640","3413377023","MY" +"3413377024","3413387519","SG" +"3413387520","3413387775","AP" +"3413387776","3413437951","SG" +"3413437952","3413438207","AP" +"3413438208","3413524479","SG" +"3413524480","3413540863","TH" +"3413540864","3413557247","NZ" +"3413557248","3413565439","CN" +"3413565440","3413569535","TW" +"3413569536","3413569791","SG" +"3413569792","3413570047","CN" +"3413570048","3413570303","KH" +"3413570304","3413570559","AU" +"3413570560","3413571583","PH" +"3413571584","3413572607","CN" +"3413572608","3413573631","JP" +"3413573632","3413573887","AU" +"3413573888","3413574143","JP" +"3413574144","3413574399","HK" +"3413574400","3413574655","TW" +"3413574656","3413575679","PH" +"3413575680","3413576703","VN" +"3413576704","3413576959","AU" +"3413576960","3413577215","ID" +"3413577216","3413577727","AU" +"3413577728","3413578751","JP" +"3413578752","3413579007","PK" +"3413579008","3413579263","AU" +"3413579264","3413579775","JP" +"3413579776","3413582847","CN" +"3413582848","3413583871","VN" +"3413583872","3413584127","JP" +"3413584128","3413584383","ID" +"3413584384","3413584895","AU" +"3413584896","3413585919","VN" +"3413585920","3413586175","ID" +"3413586176","3413586687","IN" +"3413586688","3413586943","FJ" +"3413586944","3413587967","ID" +"3413587968","3413588223","NZ" +"3413588224","3413588479","MY" +"3413588480","3413593087","VN" +"3413593088","3413593599","AU" +"3413593600","3413593855","SG" +"3413593856","3413594111","KH" +"3413594112","3413595135","CN" +"3413595136","3413595391","NZ" +"3413595392","3413595647","CN" +"3413595648","3413595903","AU" +"3413595904","3413596159","HK" +"3413596160","3413597183","NP" +"3413597184","3413597695","AU" +"3413597696","3413597951","TW" +"3413597952","3413602303","AU" +"3413602304","3413602559","ID" +"3413602560","3413639167","CN" +"3413639168","3413704703","SG" +"3413704704","3413737471","MY" +"3413737472","3413753855","TH" +"3413753856","3413762047","AU" +"3413762048","3413770239","TW" +"3413770240","3413786623","IN" +"3413786624","3413835775","AU" +"3413835776","3413843967","SG" +"3413843968","3413848063","IN" +"3413848064","3413850111","SG" +"3413850112","3413850879","JP" +"3413850880","3413851135","AU" +"3413851136","3413852159","ID" +"3413852160","3413868543","AU" +"3413868544","3413884927","IN" +"3413884928","3413893119","KR" +"3413893120","3413901311","ID" +"3413901312","3413902847","SG" +"3413902848","3413903359","JP" +"3413903360","3413905407","HK" +"3413905408","3413907455","IN" +"3413907456","3413917695","PK" +"3413917696","3413925887","JP" +"3413925888","3413934079","SG" +"3413934080","3413946367","IN" +"3413946368","3413950463","AU" +"3413950464","3413966847","IN" +"3413966848","3414040063","SG" +"3414040064","3414040319","AP" +"3414040320","3414067199","SG" +"3414067200","3414067455","AP" +"3414067456","3414163455","SG" +"3414163456","3414171647","PK" +"3414171648","3414179839","CN" +"3414179840","3414188031","ID" +"3414188032","3414196223","CN" +"3414196224","3414204415","AU" +"3414204416","3414220799","KR" +"3414220800","3414222847","CN" +"3414222848","3414223871","AU" +"3414223872","3414224895","KR" +"3414224896","3414226943","VN" +"3414226944","3414227967","ID" +"3414227968","3414230015","PK" +"3414230016","3414230527","PH" +"3414230528","3414231039","KR" +"3414231040","3414233087","CN" +"3414233088","3414245375","AU" +"3414245376","3414253567","HK" +"3414253568","3414261759","JP" +"3414261760","3414269951","AU" +"3414269952","3414278143","JP" +"3414278144","3414294527","IN" +"3414294528","3414302719","PK" +"3414302720","3414310911","CN" +"3414310912","3414327295","KR" +"3414327296","3414335487","TH" +"3414335488","3414339583","AU" +"3414339584","3414343679","KR" +"3414343680","3414360063","ID" +"3414360064","3414376447","AU" +"3414376448","3414409215","PH" +"3414409216","3414413311","JP" +"3414413312","3414417407","TH" +"3414417408","3414425599","HK" +"3414425600","3414433791","AU" +"3414433792","3414441983","CN" +"3414441984","3414450175","AU" +"3414450176","3414458367","JP" +"3414458368","3414466559","IN" +"3414466560","3414474751","KR" +"3414474752","3414478847","HK" +"3414478848","3414482943","IN" +"3414482944","3414491135","AU" +"3414491136","3414523903","TW" +"3414523904","3414532095","JP" +"3414532096","3414540287","KR" +"3414540288","3414555647","JP" +"3414555648","3414556671","PK" +"3414556672","3414605823","AU" +"3414605824","3414616063","IN" +"3414616064","3414618111","ID" +"3414618112","3414620159","CN" +"3414620672","3414621183","IN" +"3414621184","3414638591","PK" +"3414638592","3414646783","TW" +"3414646784","3414654975","CN" +"3414654976","3414663167","HK" +"3414663168","3414667263","CN" +"3414667264","3414669311","ID" +"3414669312","3414670335","AU" +"3414670336","3414670591","IN" +"3414670592","3414670847","SG" +"3414670848","3414671359","MY" +"3414671360","3415080959","JP" +"3415080960","3415083007","SG" +"3415083008","3415083519","AU" +"3415083520","3415084031","SG" +"3415084032","3415084159","CN" +"3415084160","3415089151","SG" +"3415089152","3415097343","MY" +"3415097344","3415103487","ID" +"3415103488","3415113727","HK" +"3415113728","3415121919","AU" +"3415121920","3415130111","KR" +"3415130112","3415136255","JP" +"3415136256","3415136767","KR" +"3415136768","3415137023","AU" +"3415137280","3415137535","IN" +"3415137536","3415137791","NF" +"3415137792","3415138303","AU" +"3415138304","3415146495","CN" +"3415146496","3415162879","LK" +"3415162880","3415171071","AU" +"3415171072","3415179263","JP" +"3415179264","3415187455","SG" +"3415187456","3415191551","AU" +"3415191552","3415195647","IN" +"3415195648","3415220223","AU" +"3415220224","3415224319","NZ" +"3415224320","3415228415","US" +"3415228416","3415236607","KH" +"3415236608","3415244799","CN" +"3415244800","3415277567","TH" +"3415277568","3415285759","CN" +"3415285760","3415293951","AU" +"3415293952","3415302143","HK" +"3415302144","3415306239","JP" +"3415306240","3415308287","TH" +"3415308288","3415310335","JP" +"3415310336","3415326719","IN" +"3415326720","3415334911","TW" +"3415334912","3415343103","JP" +"3415343104","3415425023","TH" +"3415425024","3415431167","NC" +"3415431168","3415432191","IN" +"3415432192","3415435263","AU" +"3415435264","3415436287","PH" +"3415436288","3415436799","AU" +"3415436800","3415437311","HK" +"3415437312","3415441407","JP" +"3415441408","3415474175","AU" +"3415474176","3415495679","CN" +"3415495680","3415496191","ID" +"3415496192","3415496703","CN" +"3415496704","3415497727","MY" +"3415497728","3415497983","TW" +"3415497984","3415498751","AU" +"3415498752","3415506943","JP" +"3415506944","3415556095","TH" +"3415556096","3415563263","AU" +"3415563264","3415564287","CN" +"3415564288","3415568383","JP" +"3415568384","3415572479","KR" +"3415572480","3415605247","SG" +"3415605248","3415736319","TH" +"3415736320","3415752703","SG" +"3415752704","3415760895","CN" +"3415760896","3415769087","NZ" +"3415769088","3415777279","CN" +"3415777280","3415785471","KR" +"3415785472","3415793663","JP" +"3415793664","3415801855","AU" +"3415801856","3415802879","CN" +"3415802880","3415803391","HK" +"3415803392","3415805951","PH" +"3415805952","3415807999","MY" +"3415808000","3415810047","ID" +"3415810048","3415814399","IN" +"3415814400","3415814655","ID" +"3415814656","3415815167","TH" +"3415815168","3415816191","IN" +"3415816192","3415817215","JP" +"3415817216","3415817727","ID" +"3415818240","3415822335","JP" +"3415822336","3415826431","MY" +"3415826432","3415834623","ID" +"3415834624","3415838719","TH" +"3415838720","3415842815","KR" +"3415842816","3415851007","TH" +"3415851008","3415855103","AU" +"3415855104","3415855615","HK" +"3415855616","3415856127","IN" +"3415856128","3415858175","ID" +"3415858176","3415859199","LK" +"3415859200","3415867391","AU" +"3415867392","3416047615","TH" +"3416047616","3416063999","CN" +"3416064000","3416131583","TH" +"3416131584","3416133631","PH" +"3416133632","3416135679","CN" +"3416135680","3416137727","MY" +"3416137728","3416145919","AU" +"3416145920","3416154111","IN" +"3416154112","3416260607","TH" +"3416260608","3416261119","VN" +"3416261120","3416261631","AU" +"3416261632","3416262655","TH" +"3416262656","3416264703","AU" +"3416264704","3416268799","JP" +"3416268800","3416272895","HK" +"3416272896","3416274943","MN" +"3416274944","3416276991","ID" +"3416276992","3416285183","HK" +"3416285184","3416287231","VN" +"3416287232","3416289279","CN" +"3416289280","3416293375","NZ" +"3416293376","3416293631","ID" +"3416293632","3416293887","CN" +"3416293888","3416294399","PH" +"3416295424","3416295679","IN" +"3416295680","3416295935","TH" +"3416295936","3416296447","IN" +"3416296448","3416297471","KR" +"3416297472","3416301567","TW" +"3416301568","3416309759","PH" +"3416309760","3416317951","CN" +"3416317952","3416326143","TW" +"3416326144","3416327167","CN" +"3416327168","3416328191","HK" +"3416328192","3416330239","AU" +"3416330240","3416334335","ID" +"3416334336","3416342527","MY" +"3416342528","3416371199","AU" +"3416371200","3416371711","PH" +"3416371712","3416371967","VN" +"3416371968","3416372223","IN" +"3416372224","3416372479","CN" +"3416372480","3416372735","AP" +"3416372736","3416372991","AU" +"3416373248","3416373503","AU" +"3416373504","3416373759","SG" +"3416373760","3416374271","AU" +"3416374272","3416374527","PH" +"3416374528","3416374783","IN" +"3416374784","3416375295","ID" +"3416375296","3416383487","CN" +"3416383488","3416391679","HK" +"3416391680","3416457215","VN" +"3416457216","3416489471","JP" +"3416489472","3416489727","AU" +"3416489728","3416489983","JP" +"3416489984","3416506367","VN" +"3416506368","3416514559","TW" +"3416514560","3416522751","IN" +"3416522752","3416588287","AU" +"3416588288","3416653823","JP" +"3416653824","3416686591","AU" +"3416686592","3416694783","SG" +"3416694784","3416702975","CN" +"3416702976","3416707071","ID" +"3416707072","3416709119","KR" +"3416709120","3416709375","AU" +"3416709376","3416709631","ID" +"3416709632","3416710143","AU" +"3416710144","3416711167","HK" +"3416711168","3416719359","AU" +"3416719360","3416727551","PH" +"3416727552","3416735743","JP" +"3416735744","3416752127","PH" +"3416752128","3416784895","NZ" +"3416784896","3416793087","CN" +"3416793088","3416801279","AU" +"3416801280","3416817663","JP" +"3416817664","3416850431","HK" +"3416850432","3416851455","PH" +"3416851456","3416851967","KR" +"3416851968","3416852479","SG" +"3416852480","3416854527","JP" +"3416854528","3416856575","AU" +"3416856576","3416858623","BD" +"3416858624","3416862719","HK" +"3416862720","3416864767","MN" +"3416864768","3416866815","HK" +"3416866816","3416883199","SG" +"3416883200","3416915967","HK" +"3416915968","3416920063","AU" +"3416920064","3416921087","TH" +"3416921088","3416922111","PH" +"3416922112","3416922367","AU" +"3416922368","3416922623","IN" +"3416922624","3416923135","VN" +"3416923136","3416924159","HK" +"3416924160","3416928255","JP" +"3416928256","3416928511","IN" +"3416928512","3416928767","HK" +"3416928768","3416929279","TH" +"3416929280","3416930303","JP" +"3416930304","3416930559","NZ" +"3416930560","3416930815","AU" +"3416930816","3416931327","CN" +"3416931328","3416932351","IN" +"3416932352","3416936447","PK" +"3416936448","3416938495","AU" +"3416939008","3416939519","HK" +"3416939520","3416940543","AU" +"3416940544","3416948735","KR" +"3416948736","3416981503","TH" +"3416981504","3416982527","CN" +"3416982528","3416982783","NZ" +"3416982784","3416983039","AU" +"3416983040","3416983551","PH" +"3416983552","3416985599","JP" +"3416985600","3416989695","VN" +"3416989696","3416997887","NZ" +"3416997888","3417014271","AU" +"3417014272","3417022463","JP" +"3417022464","3417030655","KR" +"3417030656","3417034751","AU" +"3417034752","3417035007","NZ" +"3417035008","3417035775","IN" +"3417035776","3417036799","JP" +"3417036800","3417037823","ID" +"3417037824","3417038079","AU" +"3417038080","3417038335","ID" +"3417038336","3417038591","IN" +"3417038592","3417038847","NZ" +"3417038848","3417042943","CN" +"3417042944","3417044991","IN" +"3417044992","3417047039","AU" +"3417047040","3417055231","PH" +"3417055232","3417112575","TH" +"3417112576","3417128959","AU" +"3417128960","3417135103","JP" +"3417135104","3417137151","ID" +"3417137152","3417145343","KR" +"3417145344","3417178111","NZ" +"3417178112","3417179135","PH" +"3417179136","3417179391","CN" +"3417179392","3417179647","ID" +"3417179648","3417179903","IN" +"3417179904","3417180159","CN" +"3417180160","3417182207","ID" +"3417182208","3417184767","AU" +"3417184768","3417185023","NZ" +"3417185024","3417185279","AF" +"3417185280","3417185791","SG" +"3417185792","3417186303","NZ" +"3417186304","3417194495","HK" +"3417194496","3417198591","JP" +"3417198592","3417200639","SG" +"3417200640","3417202687","JP" +"3417202688","3417210879","CN" +"3417210880","3417227263","AU" +"3417227264","3417243647","JP" +"3417243648","3417244671","PH" +"3417244672","3417245695","IN" +"3417245696","3417247743","BT" +"3417247744","3417251839","JP" +"3417251840","3417260031","KR" +"3417260032","3417264127","PK" +"3417264128","3417268223","JP" +"3417272320","3417274367","NZ" +"3417274368","3417275391","AU" +"3417275392","3417276415","PH" +"3417276416","3417284607","CN" +"3417284608","3417288703","SG" +"3417288704","3417289215","IN" +"3417289216","3417289727","AU" +"3417289728","3417291263","IN" +"3417291264","3417291775","AU" +"3417291776","3417292799","KR" +"3417292800","3417333759","CN" +"3417333760","3417337855","AU" +"3417337856","3417338367","IN" +"3417338368","3417338879","HK" +"3417338880","3417339903","PH" +"3417339904","3417340415","AU" +"3417340416","3417341951","NZ" +"3417341952","3417346047","KH" +"3417346048","3417348095","MY" +"3417348096","3417348351","AU" +"3417348352","3417348607","IN" +"3417348608","3417349119","NZ" +"3417349120","3417349631","IN" +"3417349632","3417350143","AU" +"3417350144","3417352191","VN" +"3417352192","3417354239","CN" +"3417354240","3417356287","ID" +"3417356288","3417357311","AU" +"3417357312","3417357567","NZ" +"3417357568","3417357823","AU" +"3417357824","3417358335","PK" +"3417358336","3417374719","HK" +"3417374720","3417440255","PH" +"3417440256","3417665023","JP" +"3417665024","3417665279","US" +"3417665280","3417668095","JP" +"3417668096","3417668351","US" +"3417668352","3417833471","JP" +"3417833472","3417849855","NZ" +"3417849856","3417853951","AU" +"3417853952","3417858047","CN" +"3417858048","3417866239","JP" +"3417866240","3417915391","HK" +"3417915392","3417939967","TH" +"3417939968","3417946111","PF" +"3417946112","3417947135","AU" +"3417947136","3417947391","IN" +"3417947392","3417947647","HK" +"3417947648","3417947903","AU" +"3417947904","3417948159","IN" +"3417948160","3417964543","AU" +"3417964544","3418030079","HK" +"3418030080","3418062847","TW" +"3418062848","3418071039","US" +"3418071040","3418079231","CN" +"3418079232","3418095615","IN" +"3418095616","3418111999","TH" +"3418112000","3418128383","HK" +"3418128384","3418136575","AU" +"3418136576","3418144767","BD" +"3418144768","3418148863","TW" +"3418148864","3418150911","JP" +"3418150912","3418152959","AU" +"3418152960","3418155007","IN" +"3418155008","3418157055","MY" +"3418157056","3418161151","BD" +"3418161152","3418161663","CN" +"3418161664","3418162431","AU" +"3418162432","3418162687","IN" +"3418162688","3418163199","CN" +"3418163200","3418165247","PH" +"3418165248","3418167295","MY" +"3418167296","3418167551","IN" +"3418167552","3418167807","AU" +"3418167808","3418168319","HK" +"3418168320","3418169343","VN" +"3418169344","3418177535","JP" +"3418177536","3418181631","LK" +"3418181632","3418183679","AU" +"3418183680","3418184191","ID" +"3418184192","3418184959","IN" +"3418184960","3418185727","AU" +"3418185728","3418189823","JP" +"3418189824","3418190847","CN" +"3418190848","3418191871","TH" +"3418191872","3418192895","ID" +"3418192896","3418193919","AU" +"3418193920","3418202111","KH" +"3418202112","3418206207","HK" +"3418206208","3418208255","IN" +"3418208256","3418210303","LK" +"3418210304","3418218495","CN" +"3418218496","3418220543","BD" +"3418226688","3418227711","BD" +"3418227712","3418228735","KR" +"3418228736","3418230783","BD" +"3418230784","3418232831","TW" +"3418232832","3418233343","AU" +"3418233344","3418233855","KR" +"3418233856","3418234879","JP" +"3418235904","3418236415","ID" +"3418236416","3418236927","HK" +"3418236928","3418241023","ID" +"3418241024","3418243071","JP" +"3418243072","3418251263","HK" +"3418251264","3418255359","CN" +"3418255360","3418257407","ID" +"3418257408","3418259455","HK" +"3418259456","3418267647","IN" +"3418267648","3418271743","VN" +"3418271744","3418273791","SG" +"3418273792","3418275839","ID" +"3418275840","3418279935","AU" +"3418279936","3418281983","NZ" +"3418281984","3418282239","IN" +"3418282240","3418282495","AU" +"3418282496","3418283519","PH" +"3418283520","3418284031","AU" +"3418284032","3418288127","SG" +"3418288128","3418290175","ID" +"3418290176","3418290431","IN" +"3418290432","3418290687","CN" +"3418290688","3418291199","TH" +"3418291200","3418291711","AU" +"3418291712","3418292223","BD" +"3418292224","3418292735","CN" +"3418292736","3418292991","AU" +"3418292992","3418293503","HK" +"3418293504","3418293759","IN" +"3418293760","3418294015","AU" +"3418294272","3418296319","VN" +"3418296320","3418300415","CN" +"3418300416","3418300927","BD" +"3418300928","3418301439","IN" +"3418301440","3418302463","AU" +"3418302464","3418304511","ID" +"3418304512","3418306559","VN" +"3418306560","3418308607","MN" +"3418308608","3418324991","CN" +"3418324992","3418326015","VU" +"3418326016","3418326527","AU" +"3418326528","3418327039","PH" +"3418327040","3418329087","JP" +"3418329088","3418333183","CN" +"3418333184","3418345471","AU" +"3418345472","3418357759","JP" +"3418357760","3418365951","CN" +"3418365952","3418374143","TH" +"3418374144","3418382335","AU" +"3418382336","3418390527","JP" +"3418390528","3418392575","AU" +"3418392576","3418399231","AP" +"3418399232","3418399247","PH" +"3418399248","3418406911","AP" +"3418406912","3418423295","IN" +"3418423296","3418444091","HK" +"3418444092","3418444095","CN" +"3418444096","3418448639","HK" +"3418448640","3418448895","SG" +"3418448896","3418456063","HK" +"3418456064","3418472447","IN" +"3418472448","3418480639","AU" +"3418480640","3418488831","CN" +"3418488832","3418505215","AU" +"3418505216","3418513407","JP" +"3418513408","3418517503","IN" +"3418517504","3418519551","MN" +"3418519552","3418521599","CN" +"3418521600","3418554367","HK" +"3418554368","3418570751","VN" +"3418570752","3418578943","CN" +"3418578944","3418583039","TH" +"3418583040","3418585087","CN" +"3418585088","3418586111","SG" +"3418586112","3418586367","AU" +"3418586368","3418586879","SG" +"3418586880","3418587135","AU" +"3418587136","3418623999","CN" +"3418624000","3418626047","JP" +"3418626048","3418628095","KI" +"3418628096","3418636287","AU" +"3418636288","3418642943","JP" +"3418642944","3418643199","ID" +"3418643200","3418643455","JP" +"3418643456","3418644479","AU" +"3418644480","3418649343","JP" +"3418649344","3418649599","AP" +"3418649600","3418652671","JP" +"3418652672","3418750975","IN" +"3418750976","3418816511","HK" +"3418816512","3418947583","IN" +"3418947584","3418955775","AU" +"3418955776","3418959871","TW" +"3418959872","3418960383","BD" +"3418960384","3418960895","ID" +"3418960896","3418961919","JP" +"3418961920","3418962943","VN" +"3418962944","3418963967","IN" +"3418963968","3418988543","AU" +"3418988544","3418992639","ID" +"3418992640","3418993663","SG" +"3418993664","3418993919","PH" +"3418994432","3418994687","AU" +"3418994688","3418995711","MY" +"3418995712","3418996735","JP" +"3418996736","3419013119","IN" +"3419013120","3419062271","AU" +"3419062272","3419070463","JP" +"3419070464","3419072511","HK" +"3419073024","3419073279","SG" +"3419073280","3419073535","FJ" +"3419073536","3419074559","CN" +"3419074560","3419078655","BD" +"3419078656","3419209727","TW" +"3419209728","3419226111","VN" +"3419226112","3419234303","CN" +"3419234304","3419238399","JP" +"3419238400","3419242495","US" +"3419242496","3419275263","CN" +"3419275264","3419340799","AU" +"3419340800","3419344895","TW" +"3419344896","3419348991","KR" +"3419348992","3419353087","TW" +"3419353088","3419354111","JP" +"3419354112","3419356159","ID" +"3419356160","3419356671","NZ" +"3419356672","3419357183","IN" +"3419357184","3419411455","CN" +"3419411456","3419411711","HK" +"3419411712","3419411967","NZ" +"3419411968","3419412223","PH" +"3419412224","3419412479","JP" +"3419412480","3419414527","PH" +"3419414528","3419422719","CN" +"3419422720","3419439103","AU" +"3419439104","3419459407","SG" +"3419459408","3419459423","GB" +"3419459424","3419459551","SG" +"3419459552","3419459583","HK" +"3419459584","3419470591","SG" +"3419470592","3419470847","AP" +"3419470848","3419471871","SG" +"3419471872","3419504639","TH" +"3419504640","3419508735","HK" +"3419508736","3419512831","JP" +"3419512832","3419516927","AU" +"3419516928","3419517951","JP" +"3419517952","3419518975","VN" +"3419518976","3419519999","JP" +"3419520000","3419520767","ID" +"3419520768","3419521023","TH" +"3419521024","3419529215","AU" +"3419529216","3419537407","CN" +"3419537408","3419541503","HK" +"3419541504","3419553791","KR" +"3419553792","3419557631","AU" +"3419557632","3419557887","AP" +"3419557888","3419558399","ID" +"3419558400","3419558655","AU" +"3419558656","3419559935","ID" +"3419559936","3419560959","JP" +"3419560960","3419561983","IN" +"3419561984","3419570175","AU" +"3419570176","3419602943","VN" +"3419602944","3419611135","TW" +"3419611136","3419617279","JP" +"3419617280","3419618303","AU" +"3419618304","3419619327","SG" +"3419619328","3419635711","NZ" +"3419635712","3419643903","SG" +"3419643904","3419668479","JP" +"3419668480","3419672575","CN" +"3419672576","3419674623","AU" +"3419674624","3419675647","IN" +"3419675648","3419676671","MN" +"3419676672","3419684863","JP" +"3419684864","3419688959","IN" +"3419688960","3419693055","CN" +"3419693056","3419701247","KR" +"3419701248","3419709439","AU" +"3419709440","3419717631","KR" +"3419717632","3419734015","IN" +"3419734016","3419774975","AU" +"3419774976","3419783167","JP" +"3419783168","3419791359","PH" +"3419791360","3419873279","AU" +"3419873280","3419877375","AF" +"3419877376","3419877631","ID" +"3419877632","3419877887","KH" +"3419877888","3419878143","ID" +"3419878144","3419878399","IN" +"3419878400","3419879423","GU" +"3419879424","3419880447","JP" +"3419880448","3419881471","MM" +"3419881472","3419897855","PH" +"3419897856","3419899903","JP" +"3419899904","3419900159","FR" +"3419900160","3419900415","BE" +"3419900416","3419901439","AU" +"3419901440","3419901951","NZ" +"3419901952","3419902207","AU" +"3419902208","3419902463","HK" +"3419902464","3419902719","CN" +"3419902720","3419902975","HK" +"3419902976","3419903231","AU" +"3419903232","3419903487","JP" +"3419903488","3419906047","AU" +"3419906048","3419914239","PK" +"3419914240","3419922431","KR" +"3419922432","3419924479","JP" +"3419924480","3419926527","CN" +"3419926528","3419930623","HK" +"3419930624","3419971583","JP" +"3419971584","3419979775","KR" +"3419979776","3419996159","JP" +"3419996160","3420020735","AU" +"3420020736","3420028927","TW" +"3420028928","3420029951","MY" +"3420029952","3420030975","ID" +"3420030976","3420031999","IN" +"3420032000","3420032255","ID" +"3420032256","3420032511","AU" +"3420032512","3420033023","NZ" +"3420033024","3420034047","IN" +"3420034048","3420036095","AU" +"3420036096","3420037119","JP" +"3420037120","3420038143","AU" +"3420039168","3420040191","KH" +"3420040192","3420040703","ID" +"3420040704","3420040959","IN" +"3420040960","3420041215","HK" +"3420041216","3420042239","MY" +"3420042240","3420043263","JP" +"3420043264","3420044287","SG" +"3420044288","3420045311","ID" +"3420045312","3420061695","KR" +"3420061696","3420127231","HK" +"3420127232","3420323839","AU" +"3420323840","3420332031","TW" +"3420332032","3420367359","AU" +"3420367360","3420367615","AP" +"3420367616","3420369007","AU" +"3420369008","3420369023","HK" +"3420369024","3420372991","AU" +"3420372992","3420374527","CN" +"3420374528","3420374783","ID" +"3420374784","3420375551","CN" +"3420375552","3420375807","ID" +"3420375808","3420377087","CN" +"3420377088","3420389375","JP" +"3420389376","3420395519","CN" +"3420395520","3420397567","JP" +"3420397568","3420401663","KH" +"3420401664","3420411903","JP" +"3420411904","3420412415","TH" +"3420412416","3420412927","ID" +"3420412928","3420413951","BD" +"3420413952","3420422143","KR" +"3420422144","3420430335","MY" +"3420430336","3420434431","PK" +"3420434432","3420434687","IN" +"3420434688","3420434943","KR" +"3420434944","3420435199","HK" +"3420435200","3420435455","AU" +"3420435456","3420436479","JP" +"3420436480","3420437503","AU" +"3420437504","3420438527","IN" +"3420438528","3420454911","HK" +"3420454912","3422552063","KR" +"3422552064","3422717439","US" +"3422717440","3422717695","A1" +"3422717696","3422848511","US" +"3422848512","3422848767","GB" +"3422848768","3422955519","US" +"3422955520","3422956799","FR" +"3422956800","3423092735","US" +"3423092736","3423092767","VI" +"3423092768","3423092783","US" +"3423092784","3423092831","VI" +"3423092832","3423092847","US" +"3423092848","3423093759","VI" +"3423093760","3423094783","US" +"3423094784","3423095807","CA" +"3423095808","3423143935","US" +"3423143936","3423145983","CA" +"3423145984","3423161031","US" +"3423161032","3423161039","CA" +"3423161040","3423161613","US" +"3423161614","3423161621","CA" +"3423161622","3423162159","US" +"3423162160","3423162167","MX" +"3423162168","3423162367","US" +"3423162368","3423163391","CA" +"3423163392","3423182847","US" +"3423182848","3423183199","CA" +"3423183200","3423183231","BM" +"3423183232","3423183263","CA" +"3423183264","3423183279","EE" +"3423183280","3423183743","CA" +"3423183744","3423183871","EE" +"3423183872","3423183935","CA" +"3423183936","3423183967","EE" +"3423183968","3423184175","CA" +"3423184176","3423184191","US" +"3423184192","3423184207","CA" +"3423184208","3423184215","EE" +"3423184216","3423184287","CA" +"3423184288","3423184319","AU" +"3423184320","3423184895","CA" +"3423184896","3423204095","US" +"3423204096","3423204351","CA" +"3423204352","3423221759","US" +"3423221760","3423222783","CA" +"3423222784","3423235543","US" +"3423235544","3423235551","TR" +"3423235552","3423235559","US" +"3423235560","3423235563","TR" +"3423235564","3423235711","US" +"3423235712","3423235743","CA" +"3423235744","3423235807","US" +"3423235808","3423235823","IN" +"3423235824","3423235975","US" +"3423235976","3423235983","IL" +"3423235984","3423236095","US" +"3423236096","3423238143","JM" +"3423238144","3423258623","US" +"3423258624","3423260671","CA" +"3423260672","3423264831","US" +"3423264832","3423264863","NG" +"3423264864","3423265025","US" +"3423265026","3423265026","A2" +"3423265027","3423265247","US" +"3423265248","3423265263","EC" +"3423265264","3423266815","US" +"3423268864","3423269887","CA" +"3423269888","3423285247","US" +"3423285248","3423285535","CA" +"3423285536","3423285543","JP" +"3423285544","3423285551","CA" +"3423285552","3423285559","US" +"3423285560","3423285583","CA" +"3423285584","3423285591","US" +"3423285592","3423285647","CA" +"3423285648","3423285655","US" +"3423285656","3423285671","CA" +"3423285672","3423285679","JP" +"3423285680","3423285703","CA" +"3423285704","3423285711","TL" +"3423285712","3423285791","CA" +"3423285792","3423285807","CR" +"3423285808","3423286175","CA" +"3423286176","3423286207","US" +"3423286208","3423287295","CA" +"3423287296","3423291983","US" +"3423291984","3423291991","IL" +"3423291992","3423303679","US" +"3423303680","3423304703","CA" +"3423304704","3423311871","US" +"3423311872","3423313151","VI" +"3423313152","3423313407","US" +"3423313408","3423313919","VI" +"3423313920","3423329567","US" +"3423329568","3423329599","IL" +"3423329600","3423329607","US" +"3423329608","3423329615","IL" +"3423329616","3423338527","US" +"3423338528","3423338535","AE" +"3423338536","3423338927","US" +"3423338928","3423338943","DE" +"3423338944","3423339375","US" +"3423339376","3423339383","DE" +"3423339384","3423340399","US" +"3423340400","3423340407","AU" +"3423340408","3423341015","US" +"3423341016","3423341023","CA" +"3423341024","3423341511","US" +"3423341512","3423341519","PE" +"3423341520","3423341543","US" +"3423341544","3423341551","GB" +"3423341552","3423341567","US" +"3423341568","3423341599","GB" +"3423341600","3423342279","US" +"3423342280","3423342287","IL" +"3423342288","3423342631","US" +"3423342632","3423342639","IN" +"3423342640","3423342759","US" +"3423342760","3423342775","GB" +"3423342776","3423342967","US" +"3423342968","3423342975","AU" +"3423342976","3423343039","US" +"3423343040","3423343055","IN" +"3423343056","3423343135","US" +"3423343136","3423343151","PK" +"3423343152","3423343167","RO" +"3423343168","3423343327","US" +"3423343328","3423343343","AU" +"3423343344","3423344007","US" +"3423344008","3423344023","CA" +"3423344024","3423344767","US" +"3423344768","3423344791","PK" +"3423344792","3423344807","CA" +"3423344808","3423344991","US" +"3423344992","3423344999","IE" +"3423345000","3423345087","US" +"3423345088","3423345095","CA" +"3423345096","3423345111","US" +"3423345112","3423345119","IE" +"3423345120","3423345399","US" +"3423345400","3423345407","IE" +"3423345408","3423345431","US" +"3423345432","3423345439","GT" +"3423345440","3423345503","US" +"3423345504","3423345535","AU" +"3423345536","3423345551","CA" +"3423345552","3423345583","US" +"3423345584","3423345591","JO" +"3423345592","3423345623","US" +"3423345624","3423345631","GB" +"3423345632","3423345695","US" +"3423345696","3423345719","CA" +"3423345720","3423346127","US" +"3423346128","3423346143","CA" +"3423346144","3423346319","US" +"3423346320","3423346327","DK" +"3423346328","3423346431","US" +"3423346432","3423346447","GB" +"3423346448","3423346487","US" +"3423346488","3423346495","AE" +"3423346496","3423346503","SA" +"3423346504","3423346831","US" +"3423346832","3423346847","IM" +"3423346848","3423346943","US" +"3423346944","3423346951","CA" +"3423346952","3423346983","US" +"3423346984","3423346991","AE" +"3423346992","3423346999","AU" +"3423347000","3423347207","US" +"3423347208","3423347231","CA" +"3423347232","3423347447","US" +"3423347448","3423347455","CA" +"3423347456","3423347503","US" +"3423347504","3423347519","DE" +"3423347520","3423347639","US" +"3423347640","3423347663","GB" +"3423347664","3423347783","US" +"3423347784","3423347791","SA" +"3423347792","3423347823","US" +"3423347824","3423347831","FR" +"3423347832","3423347879","US" +"3423347880","3423347903","CA" +"3423347904","3423347919","US" +"3423347920","3423347927","AU" +"3423347928","3423347951","US" +"3423347952","3423347959","TH" +"3423347960","3423348007","US" +"3423348008","3423348023","GB" +"3423348024","3423348071","US" +"3423348072","3423348095","AU" +"3423348096","3423349119","US" +"3423349120","3423349135","IT" +"3423349136","3423349247","US" +"3423349248","3423349263","AU" +"3423349264","3423349295","US" +"3423349296","3423349303","AU" +"3423349304","3423349327","US" +"3423349328","3423349335","DE" +"3423349336","3423349359","US" +"3423349360","3423349383","DE" +"3423349384","3423349679","US" +"3423349680","3423349687","IL" +"3423349688","3423350663","US" +"3423350664","3423350671","AU" +"3423350672","3423350719","US" +"3423350720","3423350727","CA" +"3423350728","3423350735","US" +"3423350736","3423350743","SA" +"3423350744","3423351551","US" +"3423351552","3423351615","PR" +"3423351616","3423351831","US" +"3423351832","3423351839","AU" +"3423351840","3423352023","US" +"3423352024","3423352047","CA" +"3423352048","3423352063","GB" +"3423352064","3423352071","US" +"3423352072","3423352079","CA" +"3423352080","3423352255","US" +"3423352256","3423352271","CA" +"3423352272","3423352439","US" +"3423352440","3423352447","IL" +"3423352448","3423352495","US" +"3423352496","3423352503","CA" +"3423352504","3423352511","IL" +"3423352512","3423352679","US" +"3423352680","3423352687","NL" +"3423352688","3423352695","US" +"3423352696","3423352703","MX" +"3423352704","3423352711","BR" +"3423352712","3423353031","US" +"3423353032","3423353039","AU" +"3423353040","3423353143","US" +"3423353144","3423353151","KH" +"3423353152","3423353295","US" +"3423353296","3423353303","BR" +"3423353304","3423353351","US" +"3423353352","3423353367","PA" +"3423353368","3423353471","US" +"3423353472","3423353479","KH" +"3423353480","3423353503","US" +"3423353504","3423353511","GB" +"3423353512","3423353543","US" +"3423353544","3423353551","IN" +"3423353552","3423353791","US" +"3423353792","3423353807","GB" +"3423353808","3423353855","US" +"3423353856","3423353871","CA" +"3423353872","3423353919","US" +"3423353920","3423353927","BB" +"3423353928","3423354031","US" +"3423354032","3423354039","IL" +"3423354040","3423354047","PT" +"3423354048","3423354063","PK" +"3423354064","3423354095","US" +"3423354096","3423354103","CA" +"3423354104","3423354143","US" +"3423354144","3423354207","CA" +"3423354208","3423354335","US" +"3423354336","3423354359","PE" +"3423354360","3423354583","US" +"3423354584","3423354591","AU" +"3423354592","3423354623","GB" +"3423354624","3423354655","US" +"3423354656","3423354663","AE" +"3423354664","3423354719","US" +"3423354720","3423354727","BR" +"3423354728","3423354783","US" +"3423354784","3423354791","PA" +"3423354792","3423356087","US" +"3423356088","3423356119","BR" +"3423356120","3423356287","US" +"3423356288","3423356319","CA" +"3423356320","3423356383","US" +"3423356384","3423356399","IN" +"3423356400","3423357111","US" +"3423357112","3423357127","AE" +"3423357128","3423357511","US" +"3423357512","3423357519","DE" +"3423357520","3423357839","US" +"3423357840","3423357855","IN" +"3423357856","3423357863","US" +"3423357864","3423357871","AE" +"3423357872","3423361023","US" +"3423361024","3423361279","AU" +"3423361280","3423363463","US" +"3423363464","3423363471","AU" +"3423363472","3423363487","CA" +"3423363488","3423363511","US" +"3423363512","3423363519","MX" +"3423363520","3423363567","US" +"3423363568","3423363583","ZA" +"3423363584","3423363615","US" +"3423363616","3423363631","AU" +"3423363632","3423365775","US" +"3423365776","3423365783","CA" +"3423365784","3423365903","US" +"3423365904","3423365911","AE" +"3423365912","3423366127","US" +"3423366128","3423366135","SA" +"3423366136","3423366223","US" +"3423366224","3423366239","AU" +"3423366240","3423366295","US" +"3423366296","3423366303","CA" +"3423366304","3423366351","US" +"3423366352","3423366367","AU" +"3423366368","3423366479","US" +"3423366480","3423366495","IT" +"3423366496","3423366703","US" +"3423366704","3423366711","GB" +"3423366712","3423366855","US" +"3423366856","3423366871","BR" +"3423366872","3423366991","US" +"3423366992","3423366999","CA" +"3423367000","3423367223","US" +"3423367224","3423367231","AU" +"3423367232","3423367279","US" +"3423367280","3423367303","BR" +"3423367304","3423367311","AU" +"3423367312","3423367343","US" +"3423367344","3423367359","NL" +"3423367360","3423367367","US" +"3423367368","3423367375","GB" +"3423367376","3423367807","US" +"3423367808","3423367823","IT" +"3423367824","3423367831","US" +"3423367832","3423367847","MX" +"3423367848","3423367903","US" +"3423367904","3423367919","IL" +"3423367920","3423367983","US" +"3423367984","3423368007","CA" +"3423368008","3423368103","US" +"3423368104","3423368111","CA" +"3423368112","3423368143","US" +"3423368144","3423368167","IL" +"3423368168","3423368255","US" +"3423368256","3423368287","CA" +"3423368288","3423368319","US" +"3423368320","3423368327","CA" +"3423368328","3423369071","US" +"3423369072","3423369159","CA" +"3423369160","3423369327","US" +"3423369328","3423369343","BR" +"3423369344","3423369591","US" +"3423369592","3423369599","BR" +"3423369600","3423369719","US" +"3423369720","3423369727","AU" +"3423369728","3423369991","US" +"3423369992","3423369999","CA" +"3423370000","3423370015","US" +"3423370016","3423370031","CA" +"3423370032","3423370303","US" +"3423370304","3423370319","IL" +"3423370320","3423370551","US" +"3423370552","3423370559","IE" +"3423370560","3423370719","US" +"3423370720","3423370727","VG" +"3423370728","3423370855","US" +"3423370856","3423370863","BR" +"3423370864","3423370871","US" +"3423370872","3423370879","VG" +"3423370880","3423371263","US" +"3423371264","3423375359","ZA" +"3423375360","3423377151","CA" +"3423377152","3423377407","US" +"3423377408","3423378175","CA" +"3423378176","3423378303","US" +"3423378304","3423378431","CA" +"3423378432","3423378943","US" +"3423378944","3423379455","CA" +"3423379456","3423393903","US" +"3423393904","3423393911","RU" +"3423393912","3423396487","US" +"3423396488","3423396495","RU" +"3423396496","3423398839","US" +"3423398840","3423398847","RU" +"3423398848","3423400855","US" +"3423400856","3423400871","RU" +"3423400872","3423401079","US" +"3423401080","3423401087","RU" +"3423401088","3423401151","US" +"3423401152","3423401159","RU" +"3423401160","3423401183","US" +"3423401184","3423401191","RU" +"3423401192","3423402943","US" +"3423402944","3423402951","RU" +"3423402952","3423416319","US" +"3423416320","3423417343","CA" +"3423417344","3423462655","US" +"3423462656","3423462671","CA" +"3423462672","3423473663","US" +"3423473664","3423474655","CA" +"3423474656","3423474671","CY" +"3423474672","3423474687","CA" +"3423474688","3423479807","US" +"3423479808","3423480831","A2" +"3423480832","3423480987","NG" +"3423480988","3423480988","US" +"3423480989","3423481343","NG" +"3423481344","3423481855","A2" +"3423481856","3423493631","US" +"3423493632","3423493887","RU" +"3423493888","3423493903","ID" +"3423493904","3423493911","US" +"3423493912","3423493919","TT" +"3423493920","3423493967","US" +"3423493968","3423493975","AT" +"3423493976","3423533055","US" +"3423533056","3423535103","AI" +"3423535104","3423540087","US" +"3423540088","3423540095","HN" +"3423540096","3423540175","US" +"3423540176","3423540183","HN" +"3423540184","3423543295","US" +"3423543296","3423544495","CA" +"3423544496","3423544511","US" +"3423544512","3423545343","CA" +"3423545344","3423554183","US" +"3423554184","3423554191","CA" +"3423554192","3423554271","US" +"3423554272","3423554279","GB" +"3423554280","3423554759","US" +"3423554760","3423554767","CA" +"3423554768","3423571967","US" +"3423571968","3423574015","PR" +"3423574016","3423582207","US" +"3423582208","3423584271","CA" +"3423584272","3423584279","US" +"3423584280","3423584335","CA" +"3423584336","3423584351","US" +"3423584352","3423584359","AU" +"3423584360","3423584367","CA" +"3423584368","3423584375","US" +"3423584376","3423584407","CA" +"3423584408","3423584415","US" +"3423584416","3423584423","CA" +"3423584424","3423584431","US" +"3423584432","3423584447","CA" +"3423584448","3423584455","US" +"3423584456","3423584719","CA" +"3423584720","3423584735","US" +"3423584736","3423584751","CA" +"3423584752","3423584767","US" +"3423584768","3423585535","CA" +"3423585536","3423585551","MY" +"3423585552","3423585775","CA" +"3423585776","3423585791","MY" +"3423585792","3423585911","CA" +"3423585912","3423585919","ES" +"3423585920","3423585927","CA" +"3423585928","3423585935","NZ" +"3423585936","3423585999","CA" +"3423586000","3423586007","US" +"3423586008","3423586015","NZ" +"3423586016","3423586031","US" +"3423586032","3423586039","NZ" +"3423586040","3423586159","CA" +"3423586160","3423586167","MY" +"3423586168","3423586303","CA" +"3423586304","3423589151","US" +"3423589152","3423589159","GB" +"3423589160","3423590871","US" +"3423590872","3423590879","HT" +"3423590880","3423591143","US" +"3423591144","3423591151","HN" +"3423591152","3423592599","US" +"3423592600","3423592607","ES" +"3423592608","3423592687","US" +"3423592688","3423592703","CA" +"3423592704","3423592739","US" +"3423592740","3423592755","CA" +"3423592756","3423592895","US" +"3423592896","3423592911","IL" +"3423592912","3423602687","US" +"3423602688","3423603711","KN" +"3423603712","3423604967","US" +"3423604968","3423604975","BZ" +"3423604976","3423605759","US" +"3423606784","3423626239","US" +"3423626240","3423627263","CA" +"3423627264","3423629311","US" +"3423632384","3423633407","A2" +"3423633408","3423637503","US" +"3423637504","3423639551","CA" +"3423639552","3423651839","US" +"3423651840","3423651967","CA" +"3423651968","3423651999","US" +"3423652000","3423653887","CA" +"3423653888","3423705599","US" +"3423705600","3423705855","CA" +"3423705856","3423797503","US" +"3423797504","3423801087","CA" +"3423801088","3423801343","US" +"3423801344","3423823359","CA" +"3423823360","3423823871","US" +"3423823872","3423827711","CA" +"3423827712","3423827967","US" +"3423827968","3423830271","CA" +"3423830272","3423830527","US" +"3423830528","3423838719","CA" +"3423838720","3423838975","US" +"3423838976","3423848447","CA" +"3423848448","3423849471","KN" +"3423849472","3423849983","US" +"3423849984","3423850495","CA" +"3423850496","3423850751","US" +"3423850752","3423854335","CA" +"3423854336","3423854591","US" +"3423854592","3423858175","CA" +"3423858176","3423858687","US" +"3423858688","3423858943","CA" +"3423858944","3423859455","US" +"3423859456","3423859711","CA" +"3423859712","3423859967","US" +"3423859968","3423862527","CA" +"3423862528","3424334847","US" +"3424334848","3424335871","CA" +"3424335872","3424378879","US" +"3424378880","3424379135","PR" +"3424379136","3424412415","US" +"3424412416","3424412671","CA" +"3424412672","3424493823","US" +"3424493824","3424494079","CA" +"3424494080","3424507135","US" +"3424507136","3424507391","CA" +"3424507392","3425173503","US" +"3425173504","3425304575","CA" +"3425304576","3425529504","US" +"3425529505","3425529510","A1" +"3425529511","3425564159","US" +"3425564160","3425564415","A1" +"3425564416","3425697791","US" +"3425697792","3425699839","CA" +"3425699840","3425714175","US" +"3425714176","3425722367","CA" +"3425722368","3425828863","US" +"3425828864","3425830815","CA" +"3425830816","3425830831","US" +"3425830832","3425846783","CA" +"3425846784","3425847039","EU" +"3425847040","3425850519","CA" +"3425850520","3425850527","US" +"3425850528","3425864583","CA" +"3425864584","3425864591","US" +"3425864592","3425864711","CA" +"3425864712","3425864719","US" +"3425864720","3425865327","CA" +"3425865328","3425865335","US" +"3425865336","3425869167","CA" +"3425869168","3425869183","US" +"3425869184","3425875391","CA" +"3425875392","3425875407","US" +"3425875408","3425894399","CA" +"3425894400","3425911967","US" +"3425911968","3425911983","IL" +"3425911984","3425911999","US" +"3425912000","3425912031","CA" +"3425912032","3425912815","US" +"3425912816","3425912831","DO" +"3425912832","3425912847","US" +"3425912848","3425912863","BB" +"3425912864","3425914159","US" +"3425914160","3425914239","A2" +"3425914240","3425915807","US" +"3425915808","3425915823","NI" +"3425915824","3425916479","US" +"3425916480","3425916543","DK" +"3425916544","3426007807","US" +"3426007808","3426008063","EU" +"3426008064","3426013183","US" +"3426013184","3426013439","IL" +"3426013440","3426369023","US" +"3426369024","3426369535","CA" +"3426369536","3426387967","US" +"3426387968","3426388991","MX" +"3426388992","3426400255","US" +"3426400256","3426400511","CA" +"3426400512","3426617855","US" +"3426617856","3426618367","CA" +"3426618368","3426618439","US" +"3426618440","3426618463","NZ" +"3426618464","3426618551","US" +"3426618552","3426618591","NZ" +"3426618592","3426618687","US" +"3426618688","3426618703","NZ" +"3426618704","3426618735","US" +"3426618736","3426618751","NZ" +"3426618752","3426618871","US" +"3426618872","3426618879","NZ" +"3426618880","3426618911","US" +"3426618912","3426619071","NZ" +"3426619072","3426619103","US" +"3426619104","3426619135","NZ" +"3426619136","3426619167","US" +"3426619168","3426619247","NZ" +"3426619248","3426619263","US" +"3426619264","3426619295","NZ" +"3426619296","3426619335","US" +"3426619336","3426619359","NZ" +"3426619360","3426679039","US" +"3426679040","3426679295","ES" +"3426679296","3426729471","US" +"3426729472","3426729983","CA" +"3426729984","3426744319","US" +"3426744320","3426746367","CA" +"3426746368","3427117055","US" +"3427117056","3427117311","CA" +"3427117312","3427127295","US" +"3427127296","3427127551","CA" +"3427127552","3427132927","US" +"3427132928","3427133183","EU" +"3427133184","3427426303","US" +"3427426304","3427426559","HK" +"3427426560","3427428863","US" +"3427428864","3427429119","GB" +"3427429120","3427487743","US" +"3427487744","3427487999","GB" +"3427488000","3427618303","US" +"3427618304","3427618559","CA" +"3427618560","3427647999","US" +"3427648000","3427648511","CA" +"3427648512","3427651071","US" +"3427651072","3427651327","CA" +"3427651328","3427729407","US" +"3427729408","3427729663","CA" +"3427729664","3427730431","US" +"3427730432","3427730687","BE" +"3427730688","3427730943","DE" +"3427730944","3427731967","US" +"3427731968","3427732223","DE" +"3427732224","3427732479","US" +"3427732480","3427732735","CH" +"3427732736","3427735039","IE" +"3427735040","3427735295","US" +"3427735296","3427736063","HK" +"3427736064","3427736319","GB" +"3427736320","3427741951","US" +"3427741952","3427742463","DE" +"3427742464","3427742719","AT" +"3427742720","3427742975","CH" +"3427742976","3427743487","GB" +"3427743488","3427743743","DE" +"3427743744","3427743999","CA" +"3427744000","3427744255","SE" +"3427744256","3427745279","DE" +"3427745280","3427745791","TW" +"3427745792","3427746047","GB" +"3427746048","3427746303","DK" +"3427746304","3427746559","US" +"3427746560","3427746815","JP" +"3427746816","3427747071","DE" +"3427747072","3427747327","US" +"3427747328","3427747583","DE" +"3427747584","3427747839","US" +"3427747840","3427748095","NO" +"3427748096","3427748351","CH" +"3427748352","3427748607","JP" +"3427748608","3427749631","DE" +"3427749632","3427749887","NL" +"3427749888","3427750655","DE" +"3427750656","3427750911","GB" +"3427750912","3427751423","US" +"3427751424","3427751519","BE" +"3427751520","3427752447","US" +"3427752448","3427752703","EU" +"3427752704","3427752959","GB" +"3427752960","3427753215","US" +"3427753216","3427753471","JP" +"3427753472","3427753727","FI" +"3427753728","3427753983","IT" +"3427753984","3427754239","CH" +"3427754240","3427754495","GB" +"3427754496","3427754751","DE" +"3427754752","3427755007","CA" +"3427755008","3427755263","IT" +"3427755264","3427755519","US" +"3427755520","3427755775","DE" +"3427755776","3427756287","BE" +"3427756288","3427756543","AU" +"3427756544","3427756799","DE" +"3427756800","3427757055","US" +"3427757056","3427757311","GR" +"3427757312","3427757567","FR" +"3427757568","3427757823","JP" +"3427757824","3427758079","DE" +"3427758080","3427758335","BE" +"3427758336","3427758591","US" +"3427758592","3427758847","IT" +"3427758848","3427759103","US" +"3427759104","3427759359","BE" +"3427759360","3427759871","GB" +"3427759872","3427760127","US" +"3427760128","3427760895","CA" +"3427760896","3427761663","US" +"3427761664","3427761919","JP" +"3427761920","3427762175","US" +"3427762176","3427762431","DE" +"3427762432","3427762687","CA" +"3427762688","3427763455","IT" +"3427763456","3427763711","AU" +"3427763712","3427763967","GB" +"3427763968","3427764223","US" +"3427764224","3427764479","FR" +"3427764480","3427765117","US" +"3427765118","3427765118","IE" +"3427765119","3427765503","US" +"3427765504","3427765759","GB" +"3427765760","3427766271","US" +"3427766272","3427766783","GB" +"3427766784","3427767039","SE" +"3427767040","3427767807","DE" +"3427767808","3427769599","US" +"3427769600","3427770111","JP" +"3427770112","3427770367","NO" +"3427770368","3427770623","GB" +"3427770624","3427771391","CH" +"3427771392","3427771647","US" +"3427771648","3427771903","CA" +"3427771904","3427772415","CH" +"3427772416","3427772671","DE" +"3427772672","3427772927","HK" +"3427772928","3427773183","BE" +"3427773184","3427773439","DE" +"3427773440","3427773695","US" +"3427773696","3427773951","FR" +"3427773952","3427774719","US" +"3427774720","3427775231","DE" +"3427775232","3427776511","US" +"3427776512","3427776767","CZ" +"3427776768","3427777023","US" +"3427777024","3427777279","NL" +"3427777280","3427777535","DE" +"3427777536","3427777791","US" +"3427777792","3427778047","HK" +"3427778048","3427778303","US" +"3427778304","3427778559","SE" +"3427778560","3427779071","NO" +"3427779072","3427779327","GB" +"3427779328","3427780095","US" +"3427780096","3427780351","GB" +"3427780352","3427780863","DE" +"3427780864","3427781375","US" +"3427781376","3427781631","GB" +"3427781632","3427781887","BE" +"3427781888","3427782399","US" +"3427782400","3427782655","GB" +"3427782656","3427783423","FR" +"3427783424","3427783679","GB" +"3427783680","3427783935","US" +"3427783936","3427784703","GB" +"3427784704","3427785215","US" +"3427785216","3427785471","JP" +"3427785472","3427785727","NO" +"3427785728","3427786751","US" +"3427786752","3427787263","LU" +"3427787264","3427787775","US" +"3427787776","3427788031","FR" +"3427788032","3427788287","CH" +"3427788288","3427788799","GB" +"3427788800","3427789567","NO" +"3427789568","3427790079","DE" +"3427790080","3427790847","US" +"3427790848","3427791103","IT" +"3427791104","3427791615","DE" +"3427791616","3427791871","GB" +"3427791872","3427792383","CA" +"3427792384","3427792639","NL" +"3427792640","3427793407","SG" +"3427793408","3427793919","HK" +"3427793920","3427794175","US" +"3427794176","3427794943","NL" +"3427794944","3427796991","CA" +"3427796992","3427831551","US" +"3427831552","3427831807","MX" +"3427831808","3427860479","US" +"3427860480","3428025343","CA" +"3428025344","3428025855","US" +"3428025856","3428057087","CA" +"3428057088","3428286719","US" +"3428286720","3428286975","CA" +"3428286976","3428296959","US" +"3428296960","3428297215","CL" +"3428297216","3428299519","US" +"3428299520","3428299775","ZA" +"3428299776","3428302079","US" +"3428302080","3428302335","CA" +"3428302336","3428318975","US" +"3428318976","3428319231","CA" +"3428319232","3428399359","US" +"3428399360","3428399615","CA" +"3428399616","3428433919","US" +"3428433920","3428434175","CA" +"3428434176","3428434943","US" +"3428434944","3428435199","CA" +"3428435200","3428437503","US" +"3428437504","3428437759","MX" +"3428437760","3428496639","US" +"3428496640","3428497151","NL" +"3428497152","3428581375","US" +"3428581376","3428581567","CA" +"3428581568","3428581695","US" +"3428581696","3428581759","CA" +"3428581760","3428581823","US" +"3428581824","3428581887","CA" +"3428581888","3428581951","US" +"3428581952","3428582231","CA" +"3428582232","3428582239","US" +"3428582240","3428582279","CA" +"3428582280","3428582287","DK" +"3428582288","3428582303","CA" +"3428582304","3428582311","US" +"3428582312","3428582319","CA" +"3428582320","3428582327","US" +"3428582328","3428582399","CA" +"3428582400","3428582655","US" +"3428582656","3428582911","CA" +"3428582912","3428583167","US" +"3428583168","3428583231","CA" +"3428583232","3428583359","US" +"3428583360","3428583455","CA" +"3428583456","3428583487","US" +"3428583488","3428583551","CA" +"3428583552","3428583583","US" +"3428583584","3428583743","CA" +"3428583744","3428583871","US" +"3428583872","3428583935","CA" +"3428583936","3428584127","US" +"3428584128","3428584191","CA" +"3428584192","3428584511","US" +"3428584512","3428584703","CA" +"3428584704","3428584767","US" +"3428584768","3428584895","CA" +"3428584896","3428584959","US" +"3428584960","3428585471","CA" +"3428585472","3428585599","US" +"3428585600","3428585727","CA" +"3428585728","3428585983","US" +"3428585984","3428586495","CA" +"3428586496","3428586751","US" +"3428586752","3428586879","CA" +"3428586880","3428587007","US" +"3428587008","3428587519","CA" +"3428587520","3428587775","US" +"3428587776","3428588287","CA" +"3428588288","3428588543","US" +"3428588544","3428589055","CA" +"3428589056","3428589311","US" +"3428589312","3428589567","CA" +"3428589568","3428591623","US" +"3428591624","3428591663","CA" +"3428591664","3428591679","US" +"3428591680","3428591695","CA" +"3428591696","3428591831","US" +"3428591832","3428591847","CA" +"3428591848","3428591871","US" +"3428591872","3428592135","CA" +"3428592136","3428592151","US" +"3428592152","3428592191","CA" +"3428592192","3428592207","US" +"3428592208","3428592247","CA" +"3428592248","3428592255","US" +"3428592256","3428592271","CA" +"3428592272","3428592343","US" +"3428592344","3428592359","CA" +"3428592360","3428592367","US" +"3428592368","3428593663","CA" +"3428593664","3428593919","US" +"3428593920","3428594303","CA" +"3428594304","3428594431","US" +"3428594432","3428594495","CA" +"3428594496","3428594623","US" +"3428594624","3428595199","CA" +"3428595200","3428595215","US" +"3428595216","3428595247","CA" +"3428595248","3428595455","US" +"3428595456","3428595743","CA" +"3428595744","3428595807","US" +"3428595808","3428595871","CA" +"3428595872","3428595903","US" +"3428595904","3428595967","CA" +"3428595968","3428596095","US" +"3428596096","3428596783","CA" +"3428596784","3428596791","US" +"3428596792","3428596799","CA" +"3428596800","3428596815","US" +"3428596816","3428596823","CA" +"3428596824","3428596831","US" +"3428596832","3428596839","CA" +"3428596840","3428596847","US" +"3428596848","3428596887","CA" +"3428596888","3428596895","US" +"3428596896","3428596991","CA" +"3428596992","3428597247","US" +"3428597248","3428597511","CA" +"3428597512","3428597519","US" +"3428597520","3428597551","CA" +"3428597552","3428597559","US" +"3428597560","3428597575","CA" +"3428597576","3428597583","US" +"3428597584","3428597623","CA" +"3428597624","3428597631","US" +"3428597632","3428597655","CA" +"3428597656","3428597663","US" +"3428597664","3428597727","CA" +"3428597728","3428597759","US" +"3428597760","3428598271","CA" +"3428598272","3428598527","US" +"3428598528","3428598687","CA" +"3428598688","3428598719","US" +"3428598720","3428598751","CA" +"3428598752","3428598783","US" +"3428598784","3428599103","CA" +"3428599104","3428599231","US" +"3428599232","3428599295","CA" +"3428599296","3428599551","US" +"3428599552","3428601599","CA" +"3428601600","3428602111","US" +"3428602112","3428602367","CA" +"3428602368","3428602623","US" +"3428602624","3428602687","CA" +"3428602688","3428602719","US" +"3428602720","3428602847","CA" +"3428602848","3428603135","US" +"3428603136","3428603199","CA" +"3428603200","3428603263","US" +"3428603264","3428603327","CA" +"3428603328","3428603391","US" +"3428603392","3428603519","CA" +"3428603520","3428603903","US" +"3428603904","3428605183","CA" +"3428605184","3428605695","US" +"3428605696","3428605823","CA" +"3428605824","3428605855","US" +"3428605856","3428606023","CA" +"3428606024","3428606031","US" +"3428606032","3428606039","CA" +"3428606040","3428606111","US" +"3428606112","3428606119","CA" +"3428606120","3428606207","US" +"3428606208","3428606271","CA" +"3428606272","3428606367","US" +"3428606368","3428606383","CA" +"3428606384","3428606415","US" +"3428606416","3428606431","CA" +"3428606432","3428606463","US" +"3428606464","3428606591","CA" +"3428606592","3428606655","US" +"3428606656","3428606687","CA" +"3428606688","3428606911","US" +"3428606912","3428606975","IS" +"3428606976","3428607743","US" +"3428607744","3428607871","CA" +"3428607872","3428607999","US" +"3428608000","3428609023","CA" +"3428609024","3428610047","US" +"3428610048","3428611071","CA" +"3428611072","3428612607","US" +"3428612608","3428613887","CA" +"3428613888","3428614143","US" +"3428614144","3428620095","CA" +"3428620096","3428620287","US" +"3428620288","3428621887","CA" +"3428621888","3428622047","US" +"3428622048","3428622095","CA" +"3428622096","3428622335","US" +"3428622336","3428623615","CA" +"3428623616","3428623871","US" +"3428623872","3428624639","CA" +"3428624640","3428625407","US" +"3428625408","3428628223","CA" +"3428628224","3428630015","US" +"3428630016","3428634623","CA" +"3428634624","3428634879","US" +"3428634880","3428635135","CA" +"3428635136","3428635391","US" +"3428635392","3428635679","CA" +"3428635680","3428635711","US" +"3428635712","3428635775","CA" +"3428635776","3428635871","US" +"3428635872","3428636927","CA" +"3428636928","3428636991","US" +"3428636992","3428637055","CA" +"3428637056","3428637119","US" +"3428637120","3428637215","CA" +"3428637216","3428637247","US" +"3428637248","3428637375","CA" +"3428637376","3428637407","US" +"3428637408","3428638015","CA" +"3428638016","3428638079","US" +"3428638080","3428638143","CA" +"3428638144","3428638207","US" +"3428638208","3428638591","CA" +"3428638592","3428638719","US" +"3428638720","3428639487","CA" +"3428639488","3428640255","US" +"3428640256","3428640511","CA" +"3428640512","3428640767","US" +"3428640768","3428643327","CA" +"3428643328","3428643583","US" +"3428643584","3428643855","CA" +"3428643856","3428643871","US" +"3428643872","3428643903","CA" +"3428643904","3428643919","US" +"3428643920","3428643935","CA" +"3428643936","3428643951","US" +"3428643952","3428644015","CA" +"3428644016","3428644047","US" +"3428644048","3428644063","CA" +"3428644064","3428644351","US" +"3428644352","3428645631","CA" +"3428645632","3428645695","US" +"3428645696","3428645759","CA" +"3428645760","3428645791","US" +"3428645792","3428645855","CA" +"3428645856","3428645887","US" +"3428645888","3428645951","CA" +"3428645952","3428646015","US" +"3428646016","3428646079","CA" +"3428646080","3428646143","US" +"3428646144","3428646911","CA" +"3428646912","3428661247","US" +"3428661248","3428661503","CA" +"3428661504","3428671487","US" +"3428679680","3428689646","US" +"3428689647","3428689647","A1" +"3428689648","3428743167","US" +"3428743168","3428744191","CA" +"3428744192","3428752383","US" +"3428752384","3428753407","GH" +"3428753408","3428756479","US" +"3428756480","3428756487","SE" +"3428756488","3428818727","US" +"3428818728","3428818735","GB" +"3428818736","3428894039","US" +"3428894040","3428894047","CA" +"3428894048","3428958207","US" +"3428958208","3428962303","CO" +"3428962304","3429171199","US" +"3429171200","3429235007","CA" +"3429235008","3429235039","BM" +"3429235040","3429236735","CA" +"3429236736","3429381887","US" +"3429381888","3429382143","GB" +"3429382144","3429382399","DE" +"3429382400","3429396223","US" +"3429396224","3429396479","DE" +"3429396480","3429408511","US" +"3429408512","3429408767","DE" +"3429408768","3429411583","US" +"3429411584","3429411839","DE" +"3429411840","3429500927","US" +"3429500928","3429502975","A2" +"3429502976","3429774599","US" +"3429774600","3429774607","BD" +"3429774608","3429775359","US" +"3429775360","3429777407","TC" +"3429777408","3429892095","US" +"3429892096","3429957631","CA" +"3429957632","3430073343","US" +"3430073344","3430073354","AP" +"3430073355","3430073355","AU" +"3430073356","3430073599","AP" +"3430073600","3430291295","US" +"3430291296","3430291327","IS" +"3430291328","3430313967","US" +"3430313968","3430313983","CA" +"3430313984","3430319135","US" +"3430319136","3430319143","SE" +"3430319144","3430328831","US" +"3430328832","3430329087","GH" +"3430329088","3430354943","US" +"3430354944","3430356991","PR" +"3430356992","3430468607","US" +"3430468608","3430468863","AQ" +"3430468864","3430701055","US" +"3430701056","3430702079","CA" +"3430702080","3430703871","US" +"3430703872","3430704127","PR" +"3430704128","3430705151","US" +"3430705152","3430706175","MX" +"3430706176","3430722303","US" +"3430722304","3430722559","CA" +"3430722560","3430729244","US" +"3430729245","3430729245","GB" +"3430729246","3430729471","US" +"3430729472","3430729727","GB" +"3430729728","3430747903","US" +"3430747904","3430748159","CA" +"3430748160","3430749951","US" +"3430749952","3430750207","CA" +"3430750208","3430767615","US" +"3430767616","3430768127","CA" +"3430768128","3430768895","US" +"3430768896","3430769151","CA" +"3430769152","3430769407","US" +"3430769408","3430769663","CA" +"3430769664","3430770943","US" +"3430770944","3430771199","CA" +"3430771200","3430771711","US" +"3430771712","3430772223","CA" +"3430772224","3430773247","US" +"3430773248","3430773503","CA" +"3430773504","3430774271","US" +"3430774272","3430774527","CA" +"3430774528","3430777343","US" +"3430777344","3430777599","CA" +"3430777600","3430777855","US" +"3430777856","3430778111","CA" +"3430778112","3430778623","US" +"3430778624","3430778879","CA" +"3430778880","3430779903","US" +"3430779904","3430780159","CA" +"3430780160","3430780671","US" +"3430780672","3430780927","CA" +"3430780928","3430782463","US" +"3430782464","3430782719","CA" +"3430782720","3430793983","US" +"3430793984","3430794239","PR" +"3430794240","3430795007","US" +"3430795008","3430795263","CA" +"3430795264","3430805759","US" +"3430805760","3430806015","CA" +"3430806016","3430807295","US" +"3430807296","3430807551","CA" +"3430807552","3430809087","US" +"3430809088","3430809343","CA" +"3430809344","3430812671","US" +"3430812672","3430813183","MX" +"3430813184","3430842367","US" +"3430842368","3430842879","DO" +"3430842880","3430845439","US" +"3430845440","3430845951","MX" +"3430845952","3430849535","US" +"3430849536","3430850047","CA" +"3430850048","3431114495","US" +"3431114496","3431114751","CA" +"3431114752","3431468031","US" +"3431468032","3431469055","CA" +"3431469056","3431520767","US" +"3431520768","3431521023","AP" +"3431521024","3431526921","US" +"3431526922","3431526922","EU" +"3431526923","3431596287","US" +"3431596288","3431602687","CA" +"3431602688","3431602943","US" +"3431602944","3431613439","CA" +"3431613440","3431613695","US" +"3431613696","3431620095","CA" +"3431620096","3431620351","US" +"3431620352","3431621375","CA" +"3431621376","3431622399","US" +"3431622400","3431622655","CA" +"3431622656","3431622911","US" +"3431622912","3431624703","CA" +"3431624704","3431624959","US" +"3431624960","3431638783","CA" +"3431638784","3431639039","US" +"3431639040","3431641855","CA" +"3431641856","3431642623","US" +"3431642624","3431657471","CA" +"3431657472","3431658495","US" +"3431658496","3431661311","CA" +"3431661312","3431731199","US" +"3431731200","3431731207","ES" +"3431731208","3431731211","CO" +"3431731212","3431731215","US" +"3431731216","3431731231","CO" +"3431731232","3431731247","US" +"3431731248","3431731263","CO" +"3431731264","3431732755","US" +"3431732756","3431732759","BE" +"3431732760","3431732803","US" +"3431732804","3431732807","RO" +"3431732808","3431732895","US" +"3431732896","3431732927","RO" +"3431732928","3431732991","US" +"3431732992","3431733247","CA" +"3431733248","3431745023","US" +"3431745024","3431745279","BE" +"3431745280","3431745791","US" +"3431745792","3431746047","GB" +"3431746048","3431746559","US" +"3431746560","3431746815","DE" +"3431746816","3431747071","US" +"3431747072","3431747327","LU" +"3431747328","3431748607","US" +"3431748608","3431749119","FR" +"3431749120","3431751423","US" +"3431751424","3431752703","IT" +"3431752704","3431753215","US" +"3431753216","3431753471","SG" +"3431753472","3431753727","US" +"3431753728","3431755007","CA" +"3431755008","3431755775","NL" +"3431755776","3431759615","CA" +"3431759616","3431759871","DE" +"3431759872","3431783431","US" +"3431783432","3431783435","NL" +"3431783436","3432004607","US" +"3432004608","3432005631","CA" +"3432005632","3432009215","US" +"3432009216","3432009471","PR" +"3432009472","3432106239","US" +"3432106240","3432106495","MX" +"3432106496","3432113407","US" +"3432113408","3432113663","CA" +"3432113664","3432133887","US" +"3432133888","3432134143","GB" +"3432134144","3432205311","US" +"3432205312","3432206335","CA" +"3432206336","3432253439","US" +"3432253440","3432253951","CA" +"3432253952","3432265983","US" +"3432265984","3432267263","DE" +"3432267264","3432280063","US" +"3432280064","3432280319","GB" +"3432280320","3432324607","US" +"3432324608","3432324863","CA" +"3432324864","3432329215","US" +"3432329216","3432330239","DE" +"3432330240","3432361983","US" +"3432361984","3432366079","DE" +"3432366080","3432476415","US" +"3432476416","3432476671","DE" +"3432476672","3432493823","US" +"3432493824","3432495103","DE" +"3432495104","3432517119","US" +"3432517120","3432517631","NA" +"3432517632","3432520703","US" +"3432520704","3432520959","GB" +"3432520960","3432571647","US" +"3432571648","3432571903","CA" +"3432571904","3432572799","US" +"3432572800","3432572927","DO" +"3432572928","3432585215","US" +"3432585216","3432585727","MX" +"3432585728","3432613631","US" +"3432613632","3432613887","CA" +"3432613888","3432634111","US" +"3432634112","3432634367","CA" +"3432634368","3432660991","US" +"3432660992","3432662527","DE" +"3432662528","3432662531","PT" +"3432662532","3432663039","DE" +"3432663040","3432689151","US" +"3432689152","3432689663","CA" +"3432689664","3432807423","US" +"3432807424","3432808447","CA" +"3432808448","3433581312","US" +"3433581313","3433581567","CA" +"3433581568","3433824511","US" +"3433824512","3433824767","DE" +"3433824768","3433955583","US" +"3433955584","3433964799","CA" +"3433964800","3433965055","US" +"3433965056","3433967359","CA" +"3433967360","3433967615","US" +"3433967616","3433981951","CA" +"3433981952","3433983999","US" +"3433984000","3434012671","CA" +"3434012672","3434012927","US" +"3434012928","3434014719","CA" +"3434014720","3434015231","US" +"3434015232","3434020607","CA" +"3434020608","3434096063","US" +"3434096064","3434096079","AU" +"3434096080","3434097919","US" +"3434097920","3434097983","GB" +"3434097984","3434108639","US" +"3434108640","3434108671","IL" +"3434108672","3434112239","US" +"3434112240","3434112255","IN" +"3434112256","3434117631","US" +"3434117632","3434117695","CA" +"3434117696","3434133551","US" +"3434133552","3434133567","IL" +"3434133568","3434133759","US" +"3434133760","3434133791","IL" +"3434133792","3434134015","US" +"3434134016","3434134079","CA" +"3434134080","3434299391","US" +"3434299392","3434303487","VE" +"3434303488","3434423295","US" +"3434423296","3434423303","CA" +"3434423304","3434427391","US" +"3434427392","3434428415","HR" +"3434428416","3434433279","US" +"3434433280","3434433535","PR" +"3434433536","3434553343","US" +"3434553344","3434553599","ES" +"3434553600","3434571775","US" +"3434571776","3434573823","CO" +"3434573824","3434575359","US" +"3434575360","3434575615","BR" +"3434575616","3434583039","US" +"3434583040","3434584063","NL" +"3434584064","3434807551","US" +"3434807552","3434810111","CA" +"3434810112","3434810367","US" +"3434810368","3434810670","CA" +"3434810671","3434810673","US" +"3434810674","3434810879","CA" +"3434810880","3434810895","GB" +"3434810896","3434810911","US" +"3434810912","3434810943","CA" +"3434810944","3434810959","US" +"3434810960","3434810975","AE" +"3434810976","3434811007","CA" +"3434811008","3434811023","US" +"3434811024","3434811039","ZA" +"3434811040","3434811071","US" +"3434811072","3434811135","CA" +"3434811136","3434811151","US" +"3434811152","3434811167","CA" +"3434811168","3434811199","US" +"3434811200","3434811215","AU" +"3434811216","3434811311","US" +"3434811312","3434811327","GB" +"3434811328","3434811359","US" +"3434811360","3434811375","CA" +"3434811376","3434811383","US" +"3434811384","3434831359","CA" +"3434831360","3434831615","US" +"3434831616","3434872575","CA" +"3434872576","3434907647","US" +"3434907648","3434909695","PA" +"3434909696","3434913791","US" +"3434913792","3434914047","AG" +"3434914048","3434914303","DM" +"3434914304","3434914559","VG" +"3434914560","3434914815","AG" +"3434914816","3434915327","VG" +"3434915328","3434915583","DM" +"3434915584","3434915839","KN" +"3434915840","3434916095","LC" +"3434916096","3434916351","AG" +"3434916352","3434916607","DM" +"3434916608","3434917119","AG" +"3434917120","3434917375","LC" +"3434917376","3434917887","AG" +"3434917888","3435069439","US" +"3435069440","3435134975","CA" +"3435134976","3435271423","US" +"3435271424","3435271679","CA" +"3435271680","3435507711","US" +"3435507712","3435511807","CA" +"3435511808","3435518463","US" +"3435518464","3435518527","GI" +"3435518528","3436249343","US" +"3436249344","3436255743","CA" +"3436255744","3436256255","US" +"3436256256","3436278271","CA" +"3436278272","3436278527","US" +"3436278528","3436282367","CA" +"3436282368","3436282623","US" +"3436282624","3436289791","CA" +"3436289792","3436290047","US" +"3436290048","3436314367","CA" +"3436314368","3436476415","US" +"3436476416","3436478463","AW" +"3436478464","3436492799","US" +"3436492800","3436493055","NL" +"3436493056","3436697087","US" +"3436697088","3436697343","VE" +"3436697344","3437232383","US" +"3437232384","3437232639","CA" +"3437232640","3437242879","US" +"3437242880","3437243135","CA" +"3437243136","3437249279","US" +"3437249280","3437249535","CA" +"3437249536","3437259775","US" +"3437259776","3437260031","CA" +"3437260032","3437262079","US" +"3437262080","3437262335","CA" +"3437262336","3437263615","US" +"3437263616","3437263871","CA" +"3437263872","3437266431","US" +"3437266432","3437266687","CA" +"3437266688","3437279487","US" +"3437279488","3437279743","CA" +"3437279744","3437281279","US" +"3437281280","3437281535","CA" +"3437281536","3437292799","US" +"3437292800","3437293055","CA" +"3437293056","3437297919","US" +"3437297920","3437307391","CA" +"3437307392","3437307903","US" +"3437307904","3437310975","CA" +"3437310976","3437311487","US" +"3437311488","3437331711","CA" +"3437331712","3437331967","US" +"3437331968","3437332479","CA" +"3437332480","3437332735","US" +"3437332736","3437334015","CA" +"3437334016","3437334271","US" +"3437334272","3437334783","CA" +"3437334784","3437335551","US" +"3437335552","3437336063","CA" +"3437336064","3437336319","US" +"3437336320","3437341695","CA" +"3437341696","3437341951","US" +"3437341952","3437343231","CA" +"3437343232","3437343487","US" +"3437343488","3437350911","CA" +"3437350912","3437351423","US" +"3437351424","3437358847","CA" +"3437358848","3437359103","US" +"3437359104","3437428735","CA" +"3437428736","3437691391","US" +"3437691392","3437691647","HK" +"3437691648","3437691903","JP" +"3437691904","3437692415","FR" +"3437692416","3437692671","US" +"3437692672","3437693439","CA" +"3437693440","3437693695","HK" +"3437693696","3437693951","NO" +"3437693952","3437694207","ES" +"3437694208","3437695231","AT" +"3437695232","3437695999","HK" +"3437696000","3437696767","NL" +"3437696768","3437702911","US" +"3437702912","3437703167","HK" +"3437703168","3437703423","US" +"3437703424","3437703679","NL" +"3437703680","3437703935","ES" +"3437703936","3437704191","US" +"3437704192","3437704703","CH" +"3437704704","3437706495","US" +"3437706496","3437706751","CH" +"3437706752","3437707263","US" +"3437707264","3437707519","DE" +"3437707520","3437707775","US" +"3437707776","3437708031","FR" +"3437708032","3437708287","US" +"3437708288","3437708799","FI" +"3437708800","3437709311","CA" +"3437709312","3437710079","US" +"3437710080","3437710335","GB" +"3437710336","3437712639","US" +"3437712640","3437713663","GB" +"3437713664","3437715199","US" +"3437715200","3437715455","DE" +"3437715456","3437715711","JP" +"3437715712","3437715967","IT" +"3437715968","3437716991","DE" +"3437716992","3437717247","US" +"3437717248","3437718527","BE" +"3437718528","3437720063","US" +"3437720064","3437723135","SG" +"3437723136","3437725183","US" +"3437725184","3437725695","MN" +"3437725696","3437726207","DE" +"3437726208","3437726463","US" +"3437726464","3437726975","GB" +"3437726976","3437731583","US" +"3437731584","3437731615","AF" +"3437731616","3437734399","US" +"3437734400","3437734655","SG" +"3437734656","3437736447","US" +"3437736448","3437737471","CL" +"3437737472","3437748223","US" +"3437748224","3437748479","GB" +"3437748480","3437748991","NL" +"3437748992","3437749247","US" +"3437749248","3437749503","DE" +"3437749504","3437749759","US" +"3437749760","3437750015","JP" +"3437750016","3437750271","BE" +"3437750272","3437750527","GB" +"3437750528","3437751551","US" +"3437751552","3437751807","IT" +"3437751808","3437752063","GB" +"3437752064","3437752319","ES" +"3437752320","3437752575","IE" +"3437752576","3437755135","US" +"3437755136","3437755647","JP" +"3437755648","3437755903","GB" +"3437755904","3437756159","US" +"3437756160","3437756415","IE" +"3437756416","3437772799","US" +"3437772800","3437776895","CA" +"3437776896","3437789847","US" +"3437789848","3437789855","IN" +"3437789856","3437789863","US" +"3437789864","3437789871","AU" +"3437789872","3437790143","US" +"3437790144","3437790159","CA" +"3437790160","3437790215","US" +"3437790216","3437790223","AU" +"3437790224","3437790615","US" +"3437790616","3437790623","GB" +"3437790624","3437790735","US" +"3437790736","3437790743","SE" +"3437790744","3437791199","US" +"3437791200","3437791207","CO" +"3437791208","3437791647","US" +"3437791648","3437791663","CA" +"3437791664","3437791935","US" +"3437791936","3437791999","AU" +"3437792000","3437792031","US" +"3437792032","3437792063","AU" +"3437792064","3437792279","US" +"3437792280","3437792287","SE" +"3437792288","3437792415","US" +"3437792416","3437792423","AU" +"3437792424","3437792527","US" +"3437792528","3437792535","MX" +"3437792536","3437792735","US" +"3437792736","3437792743","CA" +"3437792744","3437792775","US" +"3437792776","3437792783","CA" +"3437792784","3437793279","US" +"3437793280","3437793535","BD" +"3437793536","3437793727","US" +"3437793728","3437793791","BD" +"3437793792","3437794647","US" +"3437794648","3437794655","GB" +"3437794656","3437794831","US" +"3437794832","3437794839","ID" +"3437794840","3437794879","US" +"3437794880","3437794887","CA" +"3437794888","3437795103","US" +"3437795104","3437795111","IN" +"3437795112","3437795247","US" +"3437795248","3437795255","CA" +"3437795256","3437795303","US" +"3437795304","3437795311","BD" +"3437795312","3437795807","US" +"3437795808","3437795815","AR" +"3437795816","3437795919","US" +"3437795920","3437795927","TH" +"3437795928","3437796919","US" +"3437796920","3437796935","ES" +"3437796936","3437799303","US" +"3437799304","3437799311","CA" +"3437799312","3437799359","US" +"3437799360","3437799367","IN" +"3437799368","3437799439","US" +"3437799440","3437799447","CA" +"3437799448","3437799471","US" +"3437799472","3437799479","CA" +"3437799480","3437799599","US" +"3437799600","3437799607","MX" +"3437799608","3437799663","US" +"3437799664","3437799671","GB" +"3437799672","3437799775","US" +"3437799776","3437799783","CA" +"3437799784","3437799791","US" +"3437799792","3437799799","IN" +"3437799800","3437799871","US" +"3437799872","3437799879","CA" +"3437799880","3437800031","US" +"3437800032","3437800039","AU" +"3437800040","3437800215","US" +"3437800216","3437800223","CN" +"3437800224","3437800231","US" +"3437800232","3437800239","CA" +"3437800240","3437800831","US" +"3437800832","3437800847","PH" +"3437800848","3437800959","US" +"3437800960","3437800975","FR" +"3437800976","3437801695","US" +"3437801696","3437801703","AU" +"3437801704","3437801727","US" +"3437801728","3437801735","CO" +"3437801736","3437801743","CA" +"3437801744","3437802039","US" +"3437802040","3437802047","BR" +"3437802048","3437802207","US" +"3437802208","3437802223","BR" +"3437802224","3437802495","US" +"3437802496","3437802503","GB" +"3437802504","3437802559","US" +"3437802560","3437802567","SA" +"3437802568","3437802727","US" +"3437802728","3437802735","AR" +"3437802736","3437802743","GB" +"3437802744","3437802791","US" +"3437802792","3437802799","CA" +"3437802800","3437802823","GB" +"3437802824","3437802879","US" +"3437802880","3437802887","GB" +"3437802888","3437803055","US" +"3437803056","3437803071","EC" +"3437803072","3437803383","US" +"3437803384","3437803391","BR" +"3437803392","3437803535","US" +"3437803536","3437803543","GB" +"3437803544","3437803647","US" +"3437803648","3437803655","AU" +"3437803656","3437803759","US" +"3437803760","3437803767","CA" +"3437803768","3437803783","US" +"3437803784","3437803791","CA" +"3437803792","3437803887","US" +"3437803888","3437803895","CA" +"3437803896","3437803919","US" +"3437803920","3437803927","CA" +"3437803928","3437803967","US" +"3437803968","3437803975","FR" +"3437803976","3437804063","US" +"3437804064","3437804071","IL" +"3437804072","3437804159","US" +"3437804160","3437804167","GB" +"3437804168","3437804175","NZ" +"3437804176","3437804335","US" +"3437804336","3437804351","PE" +"3437804352","3437804447","US" +"3437804448","3437804455","CA" +"3437804456","3437804471","US" +"3437804472","3437804487","IN" +"3437804488","3437804671","US" +"3437804672","3437804703","CA" +"3437804704","3437804767","US" +"3437804768","3437804799","PH" +"3437804800","3437804807","US" +"3437804808","3437804815","CA" +"3437804816","3437804903","US" +"3437804904","3437804911","CA" +"3437804912","3437805159","US" +"3437805160","3437805167","MX" +"3437805168","3437805175","US" +"3437805176","3437805183","CA" +"3437805184","3437805191","GB" +"3437805192","3437805207","US" +"3437805208","3437805215","GB" +"3437805216","3437805231","US" +"3437805232","3437805239","FR" +"3437805240","3437805271","US" +"3437805272","3437805279","IL" +"3437805280","3437814623","US" +"3437814624","3437814631","CA" +"3437814632","3437815807","US" +"3437815808","3437815815","IN" +"3437815816","3437815991","US" +"3437815992","3437815999","CA" +"3437816000","3437816007","AU" +"3437816008","3437816095","US" +"3437816096","3437816103","IT" +"3437816104","3437816159","US" +"3437816160","3437816167","IL" +"3437816168","3437816183","US" +"3437816184","3437816191","BR" +"3437816192","3437816263","US" +"3437816264","3437816271","GB" +"3437816272","3437816431","US" +"3437816432","3437816439","CA" +"3437816440","3437817375","US" +"3437817376","3437817383","IL" +"3437817384","3437817391","US" +"3437817392","3437817399","SG" +"3437817400","3437817647","US" +"3437817648","3437817663","FR" +"3437817664","3437817855","US" +"3437817856","3437817983","BD" +"3437817984","3437819471","US" +"3437819472","3437819479","IL" +"3437819480","3437819871","US" +"3437819872","3437819887","FR" +"3437819888","3437821823","US" +"3437821824","3437821887","BD" +"3437821888","3437961215","US" +"3437961216","3437964287","ZA" +"3437964288","3438006271","US" +"3438006272","3438010367","CA" +"3438010368","3438034943","US" +"3438034944","3438051327","BS" +"3438051328","3438084095","US" +"3438084096","3438116863","CA" +"3438116864","3438215423","US" +"3438215424","3438215935","CA" +"3438215936","3438216191","US" +"3438216192","3438217983","CA" +"3438217984","3438218239","US" +"3438218240","3438218751","CA" +"3438218752","3438219263","US" +"3438219264","3438219519","CA" +"3438219520","3438219775","US" +"3438219776","3438246911","CA" +"3438246912","3438247167","US" +"3438247168","3438252543","CA" +"3438252544","3438252799","US" +"3438252800","3438261759","CA" +"3438261760","3438262015","US" +"3438262016","3438280703","CA" +"3438280704","3438542847","US" +"3438542848","3438544943","CA" +"3438544944","3438544959","TC" +"3438544960","3438545423","CA" +"3438545424","3438545431","US" +"3438545432","3438545471","CA" +"3438545472","3438545479","US" +"3438545480","3438546175","CA" +"3438546176","3438546183","US" +"3438546184","3438550071","CA" +"3438550072","3438550079","US" +"3438550080","3438550447","CA" +"3438550448","3438550463","US" +"3438550464","3438552271","CA" +"3438552272","3438552287","US" +"3438552288","3438558575","CA" +"3438558576","3438558583","US" +"3438558584","3438559647","CA" +"3438559648","3438559679","US" +"3438559680","3438569215","CA" +"3438569216","3438569343","US" +"3438569344","3438570031","CA" +"3438570032","3438570039","MY" +"3438570040","3438570495","CA" +"3438570496","3438570527","US" +"3438570528","3438590975","CA" +"3438590976","3438591231","TC" +"3438591232","3438592255","CA" +"3438592256","3438592263","US" +"3438592264","3438592527","CA" +"3438592528","3438592535","US" +"3438592536","3438600319","CA" +"3438600320","3438600351","US" +"3438600352","3438608383","CA" +"3438608384","3438614607","US" +"3438614608","3438614615","BR" +"3438614616","3438813183","US" +"3438813184","3438814207","GH" +"3438814208","3438895103","US" +"3438895104","3438896895","HN" +"3438896896","3439059711","US" +"3439059712","3439059967","PR" +"3439059968","3439070975","US" +"3439070976","3439071135","MX" +"3439071136","3439183359","US" +"3439183360","3439183871","HT" +"3439183872","3439219967","US" +"3439219968","3439220079","CL" +"3439220080","3439220087","US" +"3439220088","3439220159","CL" +"3439220160","3439220175","US" +"3439220176","3439220191","CL" +"3439220192","3448159471","US" +"3448159472","3448159487","AG" +"3448159488","3448168831","US" +"3448168832","3448168839","IN" +"3448168840","3448169263","US" +"3448169264","3448169279","AE" +"3448169280","3448170511","US" +"3448170512","3448170527","UY" +"3448170528","3448170551","US" +"3448170552","3448170559","CA" +"3448170560","3448172927","US" +"3448172928","3448173055","CA" +"3448173056","3448173439","US" +"3448173440","3448173567","CA" +"3448173568","3448173647","US" +"3448173648","3448173655","CA" +"3448173656","3448173855","US" +"3448173856","3448173863","CA" +"3448173864","3448173919","US" +"3448173920","3448173935","UY" +"3448173936","3448263423","US" +"3448263424","3448263431","AG" +"3448263432","3448263439","KN" +"3448263440","3448263447","AG" +"3448263448","3448263471","KN" +"3448263472","3448263487","AG" +"3448263488","3448263551","AI" +"3448263552","3448263655","AG" +"3448263656","3448263663","MS" +"3448263664","3448263743","AG" +"3448263744","3448263871","VG" +"3448263872","3448263935","AG" +"3448263936","3448303103","US" +"3448303104","3448303871","KY" +"3448303872","3448338687","US" +"3448338688","3448339455","GB" +"3448339456","3448377343","US" +"3448377344","3448377855","AG" +"3448377856","3448379415","US" +"3448379416","3448379423","IL" +"3448379424","3448379439","US" +"3448379440","3448379447","SG" +"3448379448","3448379519","US" +"3448379520","3448379647","IN" +"3448379648","3448379903","SG" +"3448379904","3448380063","US" +"3448380064","3448380079","SG" +"3448380080","3448380095","US" +"3448380096","3448380239","SG" +"3448380240","3448380255","US" +"3448380256","3448380287","SG" +"3448380288","3448380415","US" +"3448380416","3448380719","SG" +"3448380720","3448380735","US" +"3448380736","3448380775","SG" +"3448380776","3448380783","AE" +"3448380784","3448380799","SG" +"3448380800","3448380839","US" +"3448380840","3448380847","SG" +"3448380848","3448380927","US" +"3448380928","3448380959","SG" +"3448380960","3448380975","US" +"3448380976","3448380991","AU" +"3448380992","3448381183","US" +"3448381184","3448381439","SG" +"3448381440","3448381695","GB" +"3448381696","3448382343","US" +"3448382344","3448382351","IE" +"3448382352","3448382367","GB" +"3448382368","3448382415","US" +"3448382416","3448382447","GB" +"3448382448","3448382567","US" +"3448382568","3448382583","GB" +"3448382584","3448397887","US" +"3448397888","3448397967","CA" +"3448397968","3448398335","US" +"3448398336","3448399103","CA" +"3448399104","3448399359","US" +"3448399360","3448399871","CA" +"3448399872","3448411391","US" +"3448411392","3448411455","CA" +"3448411456","3448414271","US" +"3448414272","3448414295","JP" +"3448414296","3448414303","US" +"3448414304","3448414335","JP" +"3448414336","3448461311","US" +"3448461312","3448461391","GB" +"3448461392","3448461415","US" +"3448461416","3448461423","SG" +"3448461424","3448461431","US" +"3448461432","3448461439","GB" +"3448461440","3448461543","US" +"3448461544","3448461551","GB" +"3448461552","3448461559","US" +"3448461560","3448461567","GB" +"3448461568","3448461599","SG" +"3448461600","3448461631","US" +"3448461632","3448461695","SG" +"3448461696","3448461735","US" +"3448461736","3448461743","GB" +"3448461744","3448462111","US" +"3448462112","3448462127","SG" +"3448462128","3448462143","US" +"3448462144","3448462223","SG" +"3448462224","3448462239","GB" +"3448462240","3448462255","US" +"3448462256","3448462271","GB" +"3448462272","3448500479","US" +"3448500480","3448500735","SG" +"3448500736","3448545599","US" +"3448545600","3448545679","AU" +"3448545680","3448545695","US" +"3448545696","3448545727","AU" +"3448545728","3448545791","US" +"3448545792","3448545823","SG" +"3448545824","3448545855","AU" +"3448545856","3448545879","US" +"3448545880","3448545919","SG" +"3448545920","3448545951","US" +"3448545952","3448545967","SG" +"3448545968","3448545975","MY" +"3448545976","3448546007","AU" +"3448546008","3448546047","US" +"3448546048","3448546079","MY" +"3448546080","3448546119","SG" +"3448546120","3448546175","US" +"3448546176","3448546207","SG" +"3448546208","3448546431","US" +"3448546432","3448546455","AU" +"3448546456","3448547583","US" +"3448547584","3448547599","SG" +"3448547600","3448547615","US" +"3448547616","3448547639","SG" +"3448547640","3448547711","US" +"3448547712","3448547743","SG" +"3448547744","3448556671","US" +"3448556672","3448556735","GB" +"3448556736","3448556799","US" +"3448556800","3448556815","GB" +"3448556816","3448558911","US" +"3448558912","3448558919","GB" +"3448558920","3448559103","US" +"3448559104","3448559359","GB" +"3448559360","3448563015","US" +"3448563016","3448563031","GB" +"3448563032","3448569055","US" +"3448569056","3448569087","MX" +"3448569088","3448569735","US" +"3448569736","3448569743","GB" +"3448569744","3448838143","US" +"3448838144","3448838399","CA" +"3448838400","3448983807","US" +"3448983808","3448983871","GB" +"3448983872","3448985599","US" +"3448987648","3449001245","US" +"3449001246","3449001246","MC" +"3449001247","3449159679","US" +"3449159680","3449160703","CA" +"3449160704","3449161471","US" +"3449161472","3449163519","CA" +"3449163520","3449163775","US" +"3449163776","3449165055","CA" +"3449165056","3449165311","US" +"3449165312","3449165567","CA" +"3449165568","3449166079","US" +"3449166080","3449168639","CA" +"3449168640","3449168895","US" +"3449168896","3449169151","CA" +"3449169152","3449169663","US" +"3449169664","3449171199","CA" +"3449171200","3449171711","US" +"3449171712","3449172991","CA" +"3449172992","3449173247","US" +"3449173248","3449174783","CA" +"3449174784","3449175039","US" +"3449175040","3449175295","CA" +"3449175296","3449175551","US" +"3449175552","3449175807","CA" +"3449175808","3449176063","US" +"3449176064","3449177087","CA" +"3449177088","3449177103","US" +"3449177104","3449178367","CA" +"3449178368","3449178623","US" +"3449178624","3449179967","CA" +"3449179968","3449180031","US" +"3449180032","3449180095","CA" +"3449180096","3449180671","US" +"3449180672","3449181951","CA" +"3449181952","3449181967","US" +"3449181968","3449181999","CA" +"3449182000","3449182015","US" +"3449182016","3449182031","CA" +"3449182032","3449182047","US" +"3449182048","3449182063","CA" +"3449182064","3449182079","US" +"3449182080","3449182095","CA" +"3449182096","3449182111","US" +"3449182112","3449182159","CA" +"3449182160","3449182207","US" +"3449182208","3449186303","CA" +"3449186304","3449186559","US" +"3449186560","3449186815","CA" +"3449186816","3449187071","US" +"3449187072","3449187647","CA" +"3449187648","3449187711","US" +"3449187712","3449188159","CA" +"3449188160","3449188223","US" +"3449188224","3449188831","CA" +"3449188832","3449188863","US" +"3449188864","3449189599","CA" +"3449189600","3449189631","US" +"3449189632","3449189647","CA" +"3449189648","3449189663","US" +"3449189664","3449189679","CA" +"3449189680","3449189711","US" +"3449189712","3449189759","CA" +"3449189760","3449189775","US" +"3449189776","3449189791","CA" +"3449189792","3449189839","US" +"3449189840","3449190655","CA" +"3449190656","3449190911","US" +"3449190912","3449191175","CA" +"3449191176","3449191183","US" +"3449191184","3449191255","CA" +"3449191256","3449191263","US" +"3449191264","3449191303","CA" +"3449191304","3449191311","US" +"3449191312","3449191319","CA" +"3449191320","3449191327","US" +"3449191328","3449191343","CA" +"3449191344","3449191351","GB" +"3449191352","3449191367","CA" +"3449191368","3449191375","US" +"3449191376","3449191679","CA" +"3449191680","3449191743","US" +"3449191744","3449195775","CA" +"3449195776","3449196031","US" +"3449196032","3449196287","CA" +"3449196288","3449198687","US" +"3449198688","3449198783","CA" +"3449198784","3449198879","US" +"3449198880","3449199103","CA" +"3449199104","3449199647","US" +"3449199648","3449199695","CA" +"3449199696","3449199711","US" +"3449199712","3449199871","CA" +"3449199872","3449202767","US" +"3449202768","3449202847","CA" +"3449202848","3449202863","US" +"3449202864","3449202911","CA" +"3449202912","3449202943","US" +"3449202944","3449202959","CA" +"3449202960","3449202967","US" +"3449202968","3449203023","CA" +"3449203024","3449203031","US" +"3449203032","3449203039","CA" +"3449203040","3449203047","US" +"3449203048","3449203095","CA" +"3449203096","3449203103","US" +"3449203104","3449203119","CA" +"3449203120","3449203127","US" +"3449203128","3449203263","CA" +"3449203264","3449203295","US" +"3449203296","3449203479","CA" +"3449203480","3449203487","US" +"3449203488","3449203527","CA" +"3449203528","3449203543","US" +"3449203544","3449203599","CA" +"3449203600","3449203607","US" +"3449203608","3449203623","CA" +"3449203624","3449203631","US" +"3449203632","3449203655","CA" +"3449203656","3449203663","US" +"3449203664","3449203687","CA" +"3449203688","3449203695","US" +"3449203696","3449203775","CA" +"3449203776","3449203839","GB" +"3449203840","3449203903","US" +"3449203904","3449203967","CA" +"3449203968","3449204031","US" +"3449204032","3449204479","CA" +"3449204480","3449204735","US" +"3449204736","3449205759","CA" +"3449205760","3449206271","US" +"3449206272","3449206335","CA" +"3449206336","3449206367","US" +"3449206368","3449206591","CA" +"3449206592","3449206655","US" +"3449206656","3449206879","CA" +"3449206880","3449206911","US" +"3449206912","3449207007","CA" +"3449207008","3449208575","US" +"3449208576","3449208767","CA" +"3449208768","3449208831","US" +"3449208832","3449208879","CA" +"3449208880","3449208895","US" +"3449208896","3449208975","CA" +"3449208976","3449209007","US" +"3449209008","3449209023","CA" +"3449209024","3449209039","US" +"3449209040","3449209599","CA" +"3449209600","3449209855","US" +"3449209856","3449209983","CA" +"3449209984","3449210015","US" +"3449210016","3449210111","CA" +"3449210112","3449210367","US" +"3449210368","3449212415","CA" +"3449212416","3449212671","US" +"3449212672","3449212927","CA" +"3449212928","3449213183","US" +"3449213184","3449213695","CA" +"3449213696","3449213951","US" +"3449213952","3449214079","CA" +"3449214080","3449214143","US" +"3449214144","3449214575","CA" +"3449214576","3449214583","US" +"3449214584","3449214591","SE" +"3449214592","3449214623","CA" +"3449214624","3449214647","US" +"3449214648","3449214719","CA" +"3449214720","3449214735","US" +"3449214736","3449214815","CA" +"3449214816","3449214831","US" +"3449214832","3449214847","CA" +"3449214848","3449214863","US" +"3449214864","3449215999","CA" +"3449216000","3449220351","US" +"3449220352","3449221375","CA" +"3449221376","3449222655","US" +"3449222656","3449224959","CA" +"3449224960","3449225471","US" +"3449225472","3449254143","CA" +"3449254144","3449254911","US" +"3449254912","3449273599","CA" +"3449273600","3449273855","US" +"3449273856","3449278975","CA" +"3449278976","3449279487","US" +"3449279488","3449290495","CA" +"3449290496","3449582848","US" +"3449582849","3449582849","EU" +"3449582850","3449598207","US" +"3449598208","3449598463","GB" +"3449598464","3449638911","US" +"3449638912","3449639359","GB" +"3449639360","3449639361","US" +"3449639362","3449639362","BE" +"3449639363","3449639363","CH" +"3449639364","3449639364","CZ" +"3449639365","3449639365","US" +"3449639366","3449639366","ES" +"3449639367","3449639367","FR" +"3449639368","3449639368","US" +"3449639369","3449639369","IE" +"3449639370","3449639370","IT" +"3449639371","3449639371","NL" +"3449639372","3449639372","PL" +"3449639373","3449639373","RO" +"3449639374","3449639423","US" +"3449639424","3449639679","GB" +"3449639680","3449639935","US" +"3449639936","3449640191","GB" +"3449640192","3449640447","NL" +"3449640448","3449640959","GB" +"3449640960","3449641215","NL" +"3449641216","3449641471","GB" +"3449641472","3449769727","US" +"3449769728","3449769983","ZA" +"3449769984","3449823231","US" +"3449823232","3449824255","CO" +"3449824256","3449835519","US" +"3449835520","3449836543","ES" +"3449836544","3449843199","US" +"3449843200","3449843711","YE" +"3449843712","3449874687","US" +"3449874688","3449874943","AG" +"3449874944","3449910719","US" +"3449910720","3449910783","CA" +"3449910784","3449923583","US" +"3449923584","3449923839","ES" +"3449923840","3449960127","US" +"3449960128","3449960159","CA" +"3449960160","3449974783","US" +"3449974784","3449976831","CA" +"3449976832","3449980159","US" +"3449980160","3449980415","AN" +"3449980416","3449994239","US" +"3449994240","3449994495","MX" +"3449994496","3450078463","US" +"3450078464","3450079487","A1" +"3450079488","3450213887","US" +"3450213888","3450214143","CA" +"3450214144","3450217215","US" +"3450217216","3450217471","LC" +"3450217472","3450254079","US" +"3450254080","3450254335","CA" +"3450254336","3450272511","US" +"3450272512","3450272767","MX" +"3450272768","3450275601","US" +"3450275602","3450275602","FR" +"3450275603","3450345231","US" +"3450345232","3450345247","FR" +"3450345248","3450345263","IT" +"3450345264","3450345279","US" +"3450345280","3450345311","NE" +"3450345312","3450345327","GE" +"3450345328","3450345343","DE" +"3450345344","3450345391","US" +"3450345392","3450345399","BG" +"3450345400","3450345407","GE" +"3450345408","3450345439","US" +"3450345440","3450345471","GE" +"3450345472","3450612479","US" +"3450612480","3450612735","CA" +"3450612736","3450685183","US" +"3450685184","3450685439","CA" +"3450685440","3450699007","US" +"3450699008","3450699263","CA" +"3450699776","3450731519","US" +"3450731520","3450732543","CA" +"3450732544","3450773503","US" +"3450773504","3450774783","CA" +"3450774784","3450775039","US" +"3450775040","3450777599","CA" +"3450777600","3450849791","US" +"3450849792","3450850047","EU" +"3450850048","3450935295","US" +"3450935296","3450935551","MY" +"3450935552","3450935807","AP" +"3450935808","3450936319","MY" +"3450936320","3450936351","HK" +"3450936352","3450940415","US" +"3450940416","3450941439","SG" +"3450941440","3450942463","US" +"3450942464","3450944511","SG" +"3450944512","3450947583","US" +"3450947584","3450947839","A2" +"3450947840","3450949375","US" +"3450949376","3450949631","A2" +"3450949632","3450950655","US" +"3450950656","3450951679","JP" +"3450951680","3450953727","US" +"3450953728","3450957823","DE" +"3450957824","3450974255","US" +"3450974256","3450974271","GB" +"3450974272","3450975231","US" +"3450975232","3450975743","LB" +"3450975744","3450982399","US" +"3450982400","3450984447","TW" +"3450984448","3450986495","PH" +"3450986496","3450986751","HK" +"3450986752","3451170303","US" +"3451170304","3451170559","VE" +"3451170560","3451187967","US" +"3451187968","3451188223","AU" +"3451188224","3451207423","US" +"3451207424","3451207679","CH" +"3451207680","3451236351","US" +"3451236352","3451236607","HU" +"3451236608","3451371519","US" +"3451371520","3451371775","GB" +"3451371776","3451506687","US" +"3451506688","3451507711","BR" +"3451507712","3451715839","US" +"3451715840","3451724543","CA" +"3451724544","3451724799","US" +"3451725312","3451725567","US" +"3451725568","3451737343","CA" +"3451737344","3451737599","US" +"3451737600","3451740927","CA" +"3451740928","3451741183","US" +"3451741184","3451741695","CA" +"3451741696","3451742207","US" +"3451742208","3451744255","CA" +"3451744256","3451745535","US" +"3451745536","3451766783","CA" +"3451766784","3451767295","US" +"3451767296","3451767551","CA" +"3451767552","3451767807","US" +"3451767808","3451780863","CA" +"3451780864","3451783935","US" +"3451783936","3451784191","CA" +"3451784192","3451786751","US" +"3451786752","3451787007","CA" +"3451787008","3451788031","US" +"3451788032","3451788287","CA" +"3451788288","3451798783","US" +"3451798784","3451799039","CA" +"3451799040","3451800063","US" +"3451800064","3451800319","CA" +"3451800320","3451807231","US" +"3451807232","3451807487","CA" +"3451807488","3451808511","US" +"3451808512","3451808767","CA" +"3451808768","3451810815","US" +"3451810816","3451811327","CA" +"3451811328","3451821567","US" +"3451821568","3451821823","PR" +"3451821824","3451824127","US" +"3451824128","3451824383","CA" +"3451824384","3451827455","US" +"3451827456","3451827711","PR" +"3451827712","3451828991","US" +"3451828992","3451829247","CA" +"3451829248","3451835903","US" +"3451835904","3451836159","CA" +"3451836160","3451836415","US" +"3451836416","3451836671","CA" +"3451836672","3451836927","US" +"3451836928","3451837183","CA" +"3451837184","3451837695","US" +"3451837696","3451837951","CA" +"3451837952","3451840255","US" +"3451840256","3451840767","CA" +"3451840768","3451879423","US" +"3451879424","3451879935","DE" +"3451879936","3451884287","US" +"3451884288","3451884543","DE" +"3451884544","3451890431","US" +"3451890432","3451890687","AU" +"3451890688","3451896319","US" +"3451896320","3451896575","DE" +"3451896576","3451912191","US" +"3451912192","3452174335","CA" +"3452174336","3452436479","US" +"3452436480","3452502015","CA" +"3452502016","3452678143","US" +"3452678144","3452678399","EU" +"3452678400","3452682239","BE" +"3452682240","3452715007","US" +"3452715008","3452723199","CA" +"3452723200","3452764159","US" +"3452764160","3452764439","CA" +"3452764440","3452764447","US" +"3452764448","3452764487","CA" +"3452764488","3452764495","US" +"3452764496","3452764615","CA" +"3452764616","3452764623","US" +"3452764624","3452764639","CA" +"3452764640","3452764647","US" +"3452764648","3452764655","CA" +"3452764656","3452764663","US" +"3452764664","3452768399","CA" +"3452768400","3452768431","US" +"3452768432","3452768751","CA" +"3452768752","3452768767","US" +"3452768768","3452770591","CA" +"3452770592","3452770607","US" +"3452770608","3452770783","CA" +"3452770784","3452770799","US" +"3452770800","3452771647","CA" +"3452771648","3452771711","US" +"3452771712","3452776895","CA" +"3452776896","3452776959","US" +"3452776960","3452785399","CA" +"3452785400","3452785407","US" +"3452785408","3452787519","CA" +"3452787520","3452787583","US" +"3452787584","3452791039","CA" +"3452791040","3452791055","US" +"3452791056","3452793215","CA" +"3452793216","3452793343","US" +"3452793344","3452798951","CA" +"3452798952","3452798959","US" +"3452798960","3452810239","CA" +"3452810240","3452810751","US" +"3452810752","3452818527","CA" +"3452818528","3452818535","US" +"3452818536","3452818599","CA" +"3452818600","3452818615","US" +"3452818616","3452818639","CA" +"3452818640","3452818647","US" +"3452818648","3452824575","CA" +"3452824576","3452824607","US" +"3452824608","3452895231","CA" +"3452895232","3452895487","US" +"3452895488","3452902399","CA" +"3452902400","3452902655","US" +"3452902656","3452914175","CA" +"3452914176","3452914431","US" +"3452914432","3452919551","CA" +"3452919552","3452919807","US" +"3452919808","3452920831","CA" +"3452920832","3452923391","US" +"3452923392","3452931327","CA" +"3452931328","3452931583","US" +"3452931584","3452934911","CA" +"3452934912","3452936191","US" +"3452936192","3452942847","CA" +"3452942848","3452943103","US" +"3452943104","3452953087","CA" +"3452953088","3452953343","US" +"3452953344","3452960511","CA" +"3452960512","3453026559","US" +"3453026560","3453028095","CA" +"3453028096","3453028351","US" +"3453028352","3453028607","CA" +"3453028608","3453028863","US" +"3453028864","3453029375","CA" +"3453029376","3453039167","US" +"3453039168","3453039183","AU" +"3453039184","3453039199","US" +"3453039200","3453039215","CA" +"3453039216","3453039623","US" +"3453039624","3453039631","AU" +"3453039632","3453039919","US" +"3453039920","3453039935","AU" +"3453039936","3453092095","US" +"3453092096","3453101055","CA" +"3453101056","3453101311","US" +"3453101312","3453123839","CA" +"3453123840","3453124095","US" +"3453124096","3453128959","CA" +"3453128960","3453129215","US" +"3453129216","3453129983","CA" +"3453129984","3453130239","US" +"3453130240","3453139455","CA" +"3453139456","3453140991","US" +"3453140992","3453149183","CA" +"3453149184","3453149439","US" +"3453149440","3453151743","CA" +"3453151744","3453151999","US" +"3453152000","3453155327","CA" +"3453155328","3453155583","US" +"3453155584","3453157119","CA" +"3453157120","3453157631","US" +"3453157632","3453159423","CA" +"3453159424","3453159935","BM" +"3453159936","3453163519","CA" +"3453163520","3453164031","US" +"3453164032","3453180671","CA" +"3453180672","3453180927","US" +"3453180928","3453195263","CA" +"3453195264","3453195519","US" +"3453195520","3453206527","CA" +"3453206528","3453207551","HN" +"3453207552","3453207807","NI" +"3453207808","3453208575","HN" +"3453208576","3453208831","NI" +"3453208832","3453209599","HN" +"3453209600","3453209855","US" +"3453209856","3453210367","HN" +"3453210368","3453210623","SV" +"3453210624","3453213183","CR" +"3453213184","3453214719","HN" +"3453214720","3453215231","GT" +"3453215232","3453215999","SV" +"3453216000","3453217023","CR" +"3453217024","3453217791","SV" +"3453217792","3453219327","CR" +"3453219328","3453219583","US" +"3453219584","3453219839","SV" +"3453219840","3453220607","US" +"3453220608","3453222911","HN" +"3453222912","3453241343","US" +"3453241344","3453243391","A1" +"3453243392","3453370583","US" +"3453370584","3453370607","CA" +"3453370608","3453370703","US" +"3453370704","3453370719","CA" +"3453370720","3453371191","US" +"3453371192","3453371199","CA" +"3453371200","3453371215","US" +"3453371216","3453371223","MY" +"3453371224","3453371639","US" +"3453371640","3453371663","CA" +"3453371664","3453371671","US" +"3453371672","3453371679","CA" +"3453371680","3453371767","US" +"3453371768","3453371783","SA" +"3453371784","3453371807","US" +"3453371808","3453371815","SA" +"3453371816","3453371831","US" +"3453371832","3453371839","JP" +"3453371840","3453371967","US" +"3453371968","3453371975","AT" +"3453371976","3453371983","CA" +"3453371984","3453372047","US" +"3453372048","3453372063","SA" +"3453372064","3453372183","US" +"3453372184","3453372191","JP" +"3453372192","3453372199","CH" +"3453372200","3453372415","US" +"3453372416","3453372439","UA" +"3453372440","3453372535","US" +"3453372536","3453372543","HK" +"3453372544","3453372551","LB" +"3453372552","3453372711","US" +"3453372712","3453372727","SA" +"3453372728","3453372735","OM" +"3453372736","3453372767","US" +"3453372768","3453372775","AE" +"3453372776","3453372783","US" +"3453372784","3453372791","LB" +"3453372792","3453372951","US" +"3453372952","3453372967","IN" +"3453372968","3453372975","US" +"3453372976","3453372991","IN" +"3453372992","3453373007","US" +"3453373008","3453373023","IN" +"3453373024","3453373095","US" +"3453373096","3453373127","SA" +"3453373128","3453374583","US" +"3453374584","3453374591","CY" +"3453374592","3453374871","US" +"3453374872","3453374879","UA" +"3453374880","3453375023","US" +"3453375024","3453375047","SA" +"3453375048","3453375095","US" +"3453375096","3453375135","SA" +"3453375136","3453375143","TH" +"3453375144","3453375167","US" +"3453375168","3453375191","SA" +"3453375192","3453375215","US" +"3453375216","3453375231","GB" +"3453375232","3453375255","US" +"3453375256","3453375263","IN" +"3453375264","3453375279","GB" +"3453375280","3453375319","TK" +"3453375320","3453375343","US" +"3453375344","3453375375","GB" +"3453375376","3453375383","US" +"3453375384","3453375407","SA" +"3453375408","3453375415","GB" +"3453375416","3453375447","FR" +"3453375448","3453375575","US" +"3453375576","3453375583","RU" +"3453375584","3453375807","US" +"3453375808","3453375887","SA" +"3453375888","3453375999","US" +"3453376000","3453376255","CA" +"3453376256","3453376719","US" +"3453376720","3453376727","GB" +"3453376728","3453376743","US" +"3453376744","3453376751","GB" +"3453376752","3453376759","UA" +"3453376760","3453376847","US" +"3453376848","3453376887","KW" +"3453376888","3453376919","US" +"3453376920","3453376927","GB" +"3453376928","3453376951","US" +"3453376952","3453376959","GB" +"3453376960","3453376975","US" +"3453376976","3453376983","SA" +"3453376984","3453377159","US" +"3453377160","3453377167","GB" +"3453377168","3453377319","US" +"3453377320","3453377327","GB" +"3453377328","3453377895","US" +"3453377896","3453377903","CA" +"3453377904","3453377999","US" +"3453378000","3453378007","SA" +"3453378008","3453378015","US" +"3453378016","3453378023","GB" +"3453378024","3453378143","US" +"3453378144","3453378151","SA" +"3453378152","3453378271","US" +"3453378272","3453378279","DK" +"3453378280","3453378503","US" +"3453378504","3453378511","BE" +"3453378512","3453403135","US" +"3453403136","3453405951","BB" +"3453405952","3453406207","KN" +"3453406208","3453406463","TC" +"3453406464","3453406975","VC" +"3453406976","3453407231","GD" +"3453407232","3453407743","BB" +"3453407744","3453408255","GD" +"3453408256","3453409023","BB" +"3453409024","3453409535","KN" +"3453409536","3453411327","BB" +"3453411328","3453551839","US" +"3453551840","3453551879","GB" +"3453551880","3453551895","US" +"3453551896","3453551903","GB" +"3453551904","3453551935","US" +"3453551936","3453551967","GB" +"3453551968","3453552039","US" +"3453552040","3453552047","GB" +"3453552048","3453552399","US" +"3453552400","3453552407","GB" +"3453552408","3453552455","US" +"3453552456","3453552463","IE" +"3453552464","3453552471","GB" +"3453552472","3453552511","US" +"3453552512","3453552639","IE" +"3453552640","3453552895","GB" +"3453552896","3453553151","US" +"3453553152","3453553407","GB" +"3453553408","3453553631","US" +"3453553632","3453553639","GB" +"3453553640","3453553919","US" +"3453553920","3453553983","GB" +"3453553984","3453554063","US" +"3453554064","3453554095","GB" +"3453554096","3453554207","US" +"3453554208","3453554215","GB" +"3453554216","3453554239","US" +"3453554240","3453554255","GB" +"3453554256","3453554431","US" +"3453554432","3453554687","GB" +"3453554688","3453554863","US" +"3453554864","3453554879","NL" +"3453554880","3453555711","US" +"3453555712","3453555767","GB" +"3453555768","3453583615","US" +"3453583616","3453583695","SG" +"3453583696","3453595527","US" +"3453595528","3453595551","CA" +"3453595552","3453595583","US" +"3453595584","3453595623","CA" +"3453595624","3453595775","US" +"3453595776","3453595807","CA" +"3453595808","3453599999","US" +"3453600000","3453600767","GB" +"3453600768","3453601863","US" +"3453601864","3453601871","GB" +"3453601872","3453601879","CH" +"3453601880","3453602175","US" +"3453602176","3453602183","GB" +"3453602184","3453602207","US" +"3453602208","3453602223","GB" +"3453602224","3453607935","US" +"3453607936","3453608959","KN" +"3453608960","3453609983","LC" +"3453609984","3453610495","AG" +"3453610496","3453610751","MS" +"3453610752","3453611007","AG" +"3453611008","3453611263","MS" +"3453611264","3453612543","DM" +"3453612544","3453613055","KN" +"3453613056","3453614591","AG" +"3453614592","3453615103","DM" +"3453615104","3453615359","AG" +"3453615360","3453615615","KN" +"3453615616","3453616127","AG" +"3453616128","3453681943","US" +"3453681944","3453681951","IN" +"3453681952","3454003013","US" +"3454003014","3454003014","ES" +"3454003015","3454004997","US" +"3454004998","3454004998","GB" +"3454004999","3454292479","US" +"3454292480","3454292735","GB" +"3454292736","3454436351","US" +"3454436352","3454436607","GU" +"3454436608","3454497791","US" +"3454497792","3454498815","MX" +"3454498816","3454563623","US" +"3454563624","3454563631","NC" +"3454563632","3454599423","US" +"3454599424","3454601215","CA" +"3454601216","3454603007","US" +"3454603008","3454603519","CA" +"3454603520","3454604031","US" +"3454604032","3454604799","CA" +"3454604800","3454606335","US" +"3454606336","3454606591","CA" +"3454606592","3454607359","US" +"3454607360","3454608127","CA" +"3454608128","3454608383","US" +"3454608384","3454609151","CA" +"3454609152","3454611455","US" +"3454611456","3454617343","CA" +"3454617344","3454617599","US" +"3454617600","3454617855","CA" +"3454617856","3454618111","US" +"3454618112","3454618367","CA" +"3454618368","3454619647","US" +"3454619648","3454634751","CA" +"3454634752","3454636031","US" +"3454636032","3454636799","CA" +"3454636800","3454637055","US" +"3454637056","3454652159","CA" +"3454652160","3454652415","US" +"3454652416","3454661631","CA" +"3454661632","3454662655","US" +"3454662656","3454664447","CA" +"3454664448","3454672895","US" +"3454672896","3454681087","CA" +"3454681088","3454698823","US" +"3454698824","3454698839","CA" +"3454698840","3454698887","US" +"3454698888","3454698895","HK" +"3454698896","3454703135","US" +"3454703136","3454703143","IN" +"3454703144","3454703255","US" +"3454703256","3454703263","CA" +"3454703264","3454703647","US" +"3454703648","3454703663","CA" +"3454703664","3454703951","US" +"3454703952","3454703959","AF" +"3454703960","3454704047","US" +"3454704048","3454704055","CA" +"3454704056","3454704063","US" +"3454704064","3454704079","CA" +"3454704080","3454704087","AE" +"3454704088","3454704103","US" +"3454704104","3454704111","GB" +"3454704112","3454705151","US" +"3454705152","3454705215","GB" +"3454705216","3454705439","US" +"3454705440","3454705447","GB" +"3454705448","3454705511","US" +"3454705512","3454705519","CA" +"3454705520","3454708353","US" +"3454708354","3454708355","GB" +"3454708356","3454708927","US" +"3454708928","3454708991","IN" +"3454708992","3454710551","US" +"3454710552","3454710559","SO" +"3454710560","3454710671","US" +"3454710672","3454710679","IN" +"3454710680","3454711487","US" +"3454711488","3454711519","HK" +"3454711520","3454716735","US" +"3454716736","3454716743","CR" +"3454716744","3454717551","US" +"3454717552","3454717559","CA" +"3454717560","3454718623","US" +"3454718624","3454718655","HK" +"3454718656","3454718767","US" +"3454718768","3454718775","EG" +"3454718776","3454718783","BE" +"3454718784","3454718959","US" +"3454718960","3454718967","TR" +"3454718968","3454721183","US" +"3454721184","3454721191","EG" +"3454721192","3454725759","US" +"3454725760","3454725767","DE" +"3454725768","3454727799","US" +"3454727800","3454727807","CA" +"3454727808","3454730239","US" +"3454730240","3454732287","EC" +"3454732288","3454796031","US" +"3454796032","3454808831","CA" +"3454808832","3454809087","US" +"3454809088","3454810111","CA" +"3454810112","3454810367","US" +"3454810368","3454814975","CA" +"3454814976","3454815231","US" +"3454815232","3454815743","CA" +"3454815744","3454816255","US" +"3454816256","3454816511","CA" +"3454816512","3454816767","US" +"3454816768","3454828287","CA" +"3454828288","3454828543","US" +"3454828544","3454861055","CA" +"3454861056","3454861567","US" +"3454861568","3454867711","CA" +"3454867712","3454867967","US" +"3454867968","3454881535","CA" +"3454881536","3454881791","US" +"3454881792","3454883839","CA" +"3454883840","3454915071","US" +"3454915072","3454926591","CA" +"3454926592","3455042565","US" +"3455042566","3455042566","CA" +"3455042567","3455096831","US" +"3455096832","3455097855","EC" +"3455097856","3455109119","US" +"3455109120","3455111167","HN" +"3455111168","3455115263","SR" +"3455115264","3455122879","US" +"3455122880","3455122887","PR" +"3455122888","3455126527","US" +"3455126528","3455126783","MX" +"3455126784","3455132159","US" +"3455132160","3455133695","BO" +"3455133696","3455242407","US" +"3455242408","3455242415","CA" +"3455242416","3455244847","US" +"3455244848","3455244855","CA" +"3455244856","3455320063","US" +"3455320064","3455322111","FR" +"3455322112","3455328255","US" +"3455328256","3455329279","DO" +"3455329280","3455330815","US" +"3455330816","3455331327","ES" +"3455331328","3455333887","US" +"3455333888","3455334399","NL" +"3455334400","3455359231","US" +"3455359232","3455359487","ES" +"3455359488","3455418367","US" +"3455418368","3455418879","KY" +"3455418880","3455421439","US" +"3455421440","3455421951","BE" +"3455421952","3455453439","US" +"3455453440","3455453695","HT" +"3455453696","3455551999","US" +"3455552000","3455552255","EC" +"3455552256","3455566079","US" +"3455566080","3455566335","EC" +"3455566336","3455582207","US" +"3455582208","3455583743","SG" +"3455583744","3455584255","NL" +"3455584256","3455584767","GB" +"3455584768","3455588351","US" +"3455588352","3455588863","BE" +"3455588864","3455589119","FR" +"3455589120","3455589375","US" +"3455589376","3455589631","BE" +"3455589632","3455592191","US" +"3455592192","3455592447","IE" +"3455592448","3455592703","KR" +"3455592704","3455594239","US" +"3455594240","3455594495","DE" +"3455594496","3455594751","TW" +"3455594752","3455595519","US" +"3455595520","3455595775","KR" +"3455595776","3455596031","FR" +"3455596032","3455596543","CH" +"3455596544","3455596799","NL" +"3455596800","3455597311","US" +"3455597312","3455597567","FR" +"3455597568","3455598847","US" +"3455598848","3455599103","NO" +"3455599104","3455599359","US" +"3455599360","3455599615","MX" +"3455599616","3455600127","TW" +"3455600128","3455600639","GB" +"3455600640","3455600895","US" +"3455600896","3455601151","GB" +"3455601152","3455601407","US" +"3455601408","3455601919","GB" +"3455601920","3455602175","US" +"3455602176","3455602687","GB" +"3455602688","3455616511","US" +"3455616512","3455616767","CA" +"3455616768","3455617279","US" +"3455617280","3455619071","GB" +"3455619072","3455619263","US" +"3455619264","3455619327","AR" +"3455619328","3455619839","US" +"3455619840","3455620095","GB" +"3455620096","3455620287","US" +"3455620288","3455620351","VE" +"3455620352","3455621631","US" +"3455621632","3455622143","GB" +"3455622144","3455624191","US" +"3455624192","3455624447","FR" +"3455624448","3455627519","US" +"3455627520","3455628287","DK" +"3455628288","3455628543","BE" +"3455628544","3455628799","CA" +"3455628800","3455630847","GB" +"3455630848","3455631103","US" +"3455631104","3455631359","GB" +"3455631360","3455632639","ES" +"3455632640","3455632895","US" +"3455632896","3455633407","GB" +"3455633408","3455634431","US" +"3455634432","3455635455","DE" +"3455635456","3455635711","US" +"3455635712","3455635967","FR" +"3455635968","3455636223","DE" +"3455636224","3455636479","CA" +"3455636480","3455637759","US" +"3455637760","3455638271","GB" +"3455638272","3455638527","BE" +"3455638528","3455639551","US" +"3455639552","3455639807","IT" +"3455639808","3455640063","US" +"3455640064","3455640319","CA" +"3455640320","3455640575","GB" +"3455640576","3455640831","US" +"3455640832","3455641087","GB" +"3455641088","3455641343","NL" +"3455641344","3455641599","GB" +"3455641600","3455642879","US" +"3455642880","3455643135","FR" +"3455643136","3455644159","US" +"3455644160","3455644415","HK" +"3455644416","3455644927","US" +"3455644928","3455645439","GB" +"3455645440","3455645695","JP" +"3455645696","3455645951","BE" +"3455645952","3455646719","FR" +"3455646720","3455646975","SE" +"3455646976","3455647231","GB" +"3455647232","3455647487","HK" +"3455647488","3455647743","IT" +"3455647744","3455713279","US" +"3455713280","3455778815","CA" +"3455778816","3455797375","US" +"3455797376","3455797407","FR" +"3455797408","3455864831","US" +"3455864832","3455866879","TW" +"3455866880","3455871999","US" +"3455872000","3455872255","ZM" +"3455872256","3455873023","GB" +"3455873024","3455887359","US" +"3455887360","3455889407","MY" +"3455889408","3456303103","US" +"3456303104","3456311295","JP" +"3456311296","3456892927","US" +"3456892928","3456958463","CA" +"3456958464","3457246367","US" +"3457246368","3457246383","SE" +"3457246384","3457312191","US" +"3457312192","3457312255","IE" +"3457312256","3457551871","US" +"3457551872","3457552127","CA" +"3457552128","3457553151","US" +"3457553152","3457553663","CA" +"3457553664","3457554175","US" +"3457554176","3457554431","CA" +"3457554432","3457555711","US" +"3457555712","3457555967","CA" +"3457555968","3457564927","US" +"3457564928","3457565183","CA" +"3457565184","3457575167","US" +"3457575168","3457575423","CA" +"3457575424","3457577727","US" +"3457577728","3457578239","CA" +"3457578240","3457580543","US" +"3457580544","3457580799","CA" +"3457580800","3457582591","US" +"3457582592","3457582847","CA" +"3457582848","3457592319","US" +"3457592320","3457592575","CA" +"3457592576","3457595391","US" +"3457595392","3457595903","CA" +"3457595904","3457596671","US" +"3457596672","3457597695","CA" +"3457597696","3457598207","US" +"3457598208","3457598463","CA" +"3457598464","3457600511","US" +"3457600512","3457600767","CA" +"3457600768","3457683967","US" +"3457683968","3457684991","CA" +"3457684992","3457723535","US" +"3457723536","3457723551","GB" +"3457723552","3457859839","US" +"3457859840","3457860095","CA" +"3457860096","3457862847","US" +"3457862848","3457862911","CA" +"3457862912","3457892351","US" +"3457892352","3457892623","IN" +"3457892624","3458084927","US" +"3458084928","3458084935","CA" +"3458084936","3458141631","US" +"3458141632","3458141655","GB" +"3458141656","3458143863","US" +"3458143864","3458143871","AE" +"3458143872","3458143919","US" +"3458143920","3458143935","AE" +"3458143936","3458143999","US" +"3458144000","3458144015","DE" +"3458144016","3458144031","US" +"3458144032","3458144047","DE" +"3458144048","3458144111","US" +"3458144112","3458144119","CA" +"3458144120","3458144415","US" +"3458144416","3458144423","DE" +"3458144424","3458145727","US" +"3458145728","3458145735","DE" +"3458145736","3458145743","US" +"3458145744","3458145759","DE" +"3458145760","3458195455","US" +"3458195456","3458196479","SG" +"3458196480","3458765631","US" +"3458765632","3458765695","CA" +"3458765696","3458811903","US" +"3458813952","3458818047","CA" +"3458818048","3458820095","US" +"3458822144","3458823559","US" +"3458823560","3458823575","LB" +"3458823576","3458823583","US" +"3458823584","3458823591","MY" +"3458823592","3458823701","US" +"3458823702","3458823717","GB" +"3458823718","3458823725","US" +"3458823726","3458823733","GR" +"3458823734","3458823765","US" +"3458823766","3458823781","RU" +"3458823782","3458823789","US" +"3458823790","3458823813","IL" +"3458823814","3458823846","US" +"3458823847","3458823862","GB" +"3458823863","3458823903","US" +"3458823904","3458823919","JP" +"3458823920","3458823935","US" +"3458823936","3458823967","CA" +"3458823968","3458823983","JP" +"3458823984","3458824087","US" +"3458824088","3458824111","GB" +"3458824112","3458824159","US" +"3458824160","3458824183","ID" +"3458824184","3458824191","GB" +"3458824192","3459055615","US" +"3459055616","3459121151","CA" +"3459121152","3459186687","US" +"3459186688","3459252223","CA" +"3459252224","3459253247","BS" +"3459253248","3459256831","US" +"3459256832","3459257087","CO" +"3459257088","3459257343","US" +"3459257344","3459258367","AW" +"3459258368","3459259391","CL" +"3459259392","3459264767","US" +"3459264768","3459265023","VE" +"3459265024","3459266559","US" +"3459266560","3459266623","AG" +"3459266624","3459266655","KN" +"3459266656","3459267327","AG" +"3459267328","3459267583","AI" +"3459267584","3459267839","AG" +"3459267840","3459268095","DM" +"3459268096","3459268607","AG" +"3459268608","3459273727","US" +"3459273728","3459274751","CL" +"3459274752","3459277823","US" +"3459277824","3459278847","AW" +"3459278848","3459285247","US" +"3459285248","3459285311","CL" +"3459285312","3459285375","US" +"3459285376","3459286271","CL" +"3459286272","3459287807","US" +"3459287808","3459288063","CL" +"3459288064","3459290111","US" +"3459290112","3459290623","CL" +"3459290624","3459295231","US" +"3459295232","3459296255","KR" +"3459296256","3459310591","US" +"3459310592","3459310847","KY" +"3459310848","3459312639","US" +"3459312640","3459312687","MX" +"3459312688","3459312767","US" +"3459312768","3459312895","MX" +"3459312896","3459325951","US" +"3459325952","3459326207","VE" +"3459326208","3459326463","SZ" +"3459326464","3459327487","CA" +"3459327488","3459327999","CO" +"3459328000","3459329023","CL" +"3459329024","3459330047","VE" +"3459330048","3459330559","CL" +"3459330560","3459331071","US" +"3459331072","3459331583","MX" +"3459331584","3459332607","PA" +"3459332608","3459333119","US" +"3459333120","3459333631","PW" +"3459333632","3459333887","MR" +"3459333888","3459334399","US" +"3459334400","3459334655","CA" +"3459334656","3459335423","US" +"3459335424","3459335679","VE" +"3459335680","3459335935","DO" +"3459335936","3459336191","VE" +"3459336192","3459336447","MX" +"3459336448","3459336703","US" +"3459336704","3459336959","LK" +"3459336960","3459337215","AW" +"3459337216","3459337471","CO" +"3459337472","3459337727","VE" +"3459337728","3459337983","MX" +"3459337984","3459338239","US" +"3459338240","3459338495","SV" +"3459338496","3459339263","PH" +"3459339264","3459339519","ID" +"3459339520","3459339775","US" +"3459339776","3459340031","ID" +"3459340032","3459340287","VE" +"3459340288","3459340543","MX" +"3459340544","3459340799","FM" +"3459340800","3459341055","SK" +"3459341056","3459341311","MX" +"3459341312","3459341567","TW" +"3459341568","3459341823","US" +"3459341824","3459342079","IL" +"3459342080","3459342335","LK" +"3459342336","3459342591","VE" +"3459342592","3459342847","BY" +"3459342848","3459343103","VE" +"3459343104","3459343359","BR" +"3459343360","3459343439","CA" +"3459343440","3459343455","US" +"3459343456","3459343591","CA" +"3459343592","3459343599","US" +"3459343600","3459343615","CA" +"3459343616","3459344127","OM" +"3459344128","3459345663","US" +"3459345664","3459345919","OM" +"3459345920","3459346431","US" +"3459346432","3459346687","LK" +"3459346688","3459346943","US" +"3459346944","3459348223","PR" +"3459348224","3459348479","AG" +"3459348480","3459348735","CO" +"3459348736","3459348991","BW" +"3459348992","3459349503","IT" +"3459349504","3459350527","US" +"3459350528","3459352575","VE" +"3459352576","3459352831","US" +"3459352832","3459353087","FM" +"3459353088","3459353343","US" +"3459353344","3459354623","CO" +"3459354624","3459357183","NI" +"3459357184","3459357439","VE" +"3459357440","3459357695","HT" +"3459357696","3459357951","SV" +"3459357952","3459358207","TG" +"3459358208","3459358719","PR" +"3459358720","3459358975","VE" +"3459358976","3459359999","US" +"3459360000","3459360511","VE" +"3459360512","3459362815","US" +"3459362816","3459364863","CO" +"3459364864","3459366911","AR" +"3459366912","3459367167","VE" +"3459367168","3459367423","US" +"3459367424","3459367455","VE" +"3459367456","3459367535","VN" +"3459367536","3459367551","VE" +"3459367552","3459367647","VN" +"3459367648","3459367935","VE" +"3459367936","3459367999","VN" +"3459368000","3459368063","VE" +"3459368064","3459368095","VN" +"3459368096","3459368703","VE" +"3459368704","3459368959","US" +"3459368960","3459371007","MX" +"3459371008","3459373055","PE" +"3459373056","3459373311","US" +"3459373312","3459375103","CL" +"3459375104","3459376127","VE" +"3459376128","3459448831","US" +"3459448832","3459449087","PR" +"3459449088","3459450623","CA" +"3459450624","3459450879","US" +"3459450880","3459455487","CA" +"3459455488","3459455743","US" +"3459455744","3459456511","CA" +"3459456512","3459456767","US" +"3459456768","3459457279","CA" +"3459457280","3459457535","US" +"3459457536","3459457791","CA" +"3459457792","3459458047","PR" +"3459458048","3459512319","US" +"3459512320","3459513855","CA" +"3459513856","3459592191","US" +"3459592192","3459596287","CA" +"3459596288","3459614719","US" +"3459616768","3459617791","US" +"3459617792","3459617999","AP" +"3459618000","3459618000","ID" +"3459618001","3459618047","AP" +"3459618048","3459618815","US" +"3459618816","3459619071","AP" +"3459619072","3459622911","US" +"3459624960","3459629055","BM" +"3459629056","3459731455","US" +"3459731456","3459735551","CA" +"3459735552","3459745535","US" +"3459745536","3459745791","IT" +"3459745792","3459848959","US" +"3459848960","3459849215","FR" +"3459849216","3459850431","US" +"3459850432","3459850495","CA" +"3459850496","3459852991","US" +"3459852992","3459853007","CA" +"3459853008","3459873807","US" +"3459873808","3459873823","IT" +"3459873824","3460104703","US" +"3460104704","3460105215","MX" +"3460105216","3460108895","US" +"3460108896","3460108903","FI" +"3460108904","3460111871","US" +"3460111872","3460111887","CA" +"3460111888","3460114431","US" +"3460114432","3460116479","SR" +"3460116480","3460161535","US" +"3460161536","3460165631","PR" +"3460165632","3460374527","US" +"3460374528","3460375551","MX" +"3460375552","3460453631","US" +"3460453632","3460453887","BS" +"3460453888","3460507647","US" +"3460507648","3460507903","MX" +"3460507904","3460854831","US" +"3460854832","3460854847","VE" +"3460854848","3460854911","US" +"3460854912","3460854943","GB" +"3460854944","3460855015","US" +"3460855016","3460855031","AU" +"3460855032","3460855195","US" +"3460855196","3460855199","AU" +"3460855200","3460855255","US" +"3460855256","3460855263","VE" +"3460855264","3460855271","US" +"3460855272","3460855279","GB" +"3460855280","3460855287","CA" +"3460855288","3460855311","US" +"3460855312","3460855319","NL" +"3460855320","3460855463","US" +"3460855464","3460855471","SA" +"3460855472","3460855535","US" +"3460855536","3460855543","MX" +"3460855544","3460855551","AU" +"3460855552","3460855631","US" +"3460855632","3460855647","CA" +"3460855648","3460855703","US" +"3460855704","3460855711","AU" +"3460855712","3460855743","US" +"3460855744","3460855775","CA" +"3460855776","3460855807","US" +"3460855808","3460855815","GB" +"3460855816","3460855855","US" +"3460855856","3460855863","GB" +"3460855864","3460855871","US" +"3460855872","3460855879","GB" +"3460855880","3460855887","GU" +"3460855888","3460855991","US" +"3460855992","3460855999","GB" +"3460856000","3460856007","US" +"3460856008","3460856015","CA" +"3460856016","3460856119","US" +"3460856120","3460856127","GB" +"3460856128","3460856135","JP" +"3460856136","3460856191","US" +"3460856192","3460856199","ZA" +"3460856200","3460856215","US" +"3460856216","3460856223","GB" +"3460856224","3460856287","US" +"3460856288","3460856295","IN" +"3460856296","3460856351","US" +"3460856352","3460856355","TZ" +"3460856356","3460856383","US" +"3460856384","3460856399","GB" +"3460856400","3460856447","US" +"3460856448","3460856495","GB" +"3460856496","3460856559","US" +"3460856560","3460856575","CA" +"3460856576","3460856623","US" +"3460856624","3460856639","NZ" +"3460856640","3460856815","US" +"3460856816","3460856831","NZ" +"3460856832","3460857055","US" +"3460857056","3460857087","NZ" +"3460857088","3460857151","US" +"3460857152","3460857183","CA" +"3460857184","3460857343","US" +"3460857344","3460857359","CA" +"3460857360","3460857367","US" +"3460857368","3460857375","PL" +"3460857376","3460857383","GB" +"3460857384","3460857431","US" +"3460857432","3460857439","VE" +"3460857440","3460857599","US" +"3460857600","3460857855","AU" +"3460857856","3460878335","US" +"3460878336","3460878591","CA" +"3460878592","3460878847","US" +"3460882432","3460891135","US" +"3460891136","3460891199","CL" +"3460891200","3460891967","US" +"3460891968","3460891999","BR" +"3460892000","3460892031","CO" +"3460892032","3460892095","VE" +"3460892096","3460892127","BR" +"3460892128","3460892159","US" +"3460892160","3460892223","FR" +"3460892224","3460892271","BR" +"3460892272","3460892287","US" +"3460892288","3460892415","FR" +"3460892416","3460893439","US" +"3460893440","3460893695","IT" +"3460893696","3460894223","US" +"3460894224","3460894239","MX" +"3460894240","3460894335","US" +"3460894336","3460894367","MX" +"3460894368","3460894463","US" +"3460894464","3460894719","JP" +"3460894720","3460894735","NL" +"3460894736","3460894751","CA" +"3460894752","3460894783","US" +"3460894784","3460894975","NL" +"3460894976","3460895231","DK" +"3460895232","3460895487","BE" +"3460895488","3460896255","US" +"3460896256","3460896511","ZA" +"3460896512","3460896767","ES" +"3460896768","3460897023","FR" +"3460897024","3460897279","GB" +"3460897280","3460899327","US" +"3460899328","3460899583","ZA" +"3460899584","3460900607","US" +"3460900608","3460900671","PE" +"3460900672","3460900735","US" +"3460900736","3460900799","PR" +"3460900800","3460900831","EC" +"3460900832","3460901375","US" +"3460901376","3460901631","SE" +"3460901632","3460902143","US" +"3460902144","3460902271","IN" +"3460902272","3460903215","US" +"3460903216","3460903231","AR" +"3460903232","3460903239","BR" +"3460903240","3460903263","US" +"3460903264","3460903295","VE" +"3460903296","3460903359","US" +"3460903360","3460903423","MX" +"3460903424","3460903807","US" +"3460903808","3460903871","BO" +"3460903872","3460903935","US" +"3460903936","3460904063","VE" +"3460904064","3460904079","MX" +"3460904080","3460904191","US" +"3460904192","3460904223","FI" +"3460904224","3460904255","US" +"3460904256","3460904319","DE" +"3460904320","3460904447","US" +"3460904448","3460904479","FI" +"3460904480","3460904591","US" +"3460904592","3460904607","CA" +"3460904608","3460904639","US" +"3460904640","3460904703","BR" +"3460904704","3460904735","US" +"3460904736","3460904751","CA" +"3460904752","3460905255","US" +"3460905256","3460905263","MX" +"3460905264","3460905295","US" +"3460905296","3460905311","BR" +"3460905312","3460905407","US" +"3460905408","3460905471","BR" +"3460905472","3460905743","US" +"3460905744","3460905759","BR" +"3460905760","3460905791","US" +"3460905792","3460905823","BR" +"3460905824","3460906047","US" +"3460906048","3460906079","ID" +"3460906080","3460906111","CN" +"3460906112","3460906143","HK" +"3460906144","3460906495","US" +"3460906496","3460906559","ID" +"3460906560","3460907263","US" +"3460907264","3460907519","SG" +"3460907520","3460908159","US" +"3460908160","3460908191","CN" +"3460908192","3460908287","US" +"3460908288","3460908543","FI" +"3460908544","3460908799","US" +"3460908800","3460910335","IE" +"3460910336","3460910591","US" +"3460910592","3460910847","IE" +"3460910848","3460911167","US" +"3460911168","3460911199","ID" +"3460911200","3460912127","US" +"3460912128","3460912383","IT" +"3460912384","3460912639","FR" +"3460912640","3460912895","ES" +"3460912896","3460913407","US" +"3460913408","3460913439","FR" +"3460913440","3460913471","US" +"3460913472","3460913663","FR" +"3460913664","3460913951","US" +"3460913952","3460914015","CN" +"3460914016","3460914047","US" +"3460914048","3460914111","DE" +"3460914112","3460916223","US" +"3460916224","3460916479","CH" +"3460916480","3460916735","GB" +"3460916736","3460916991","AR" +"3460916992","3460917023","CA" +"3460917024","3460917135","US" +"3460917136","3460917151","MX" +"3460917152","3460917183","PR" +"3460917184","3460917279","US" +"3460917280","3460917311","CA" +"3460917312","3460917343","US" +"3460917344","3460917359","CA" +"3460917360","3460917423","US" +"3460917424","3460917439","MX" +"3460917440","3460917759","US" +"3460917760","3460918015","CA" +"3460918016","3460918207","US" +"3460918208","3460918239","AR" +"3460918240","3460918271","US" +"3460918272","3460918527","NL" +"3460918528","3460918687","US" +"3460918688","3460918719","MX" +"3460918720","3460918783","US" +"3460918784","3460919039","JP" +"3460919040","3460919295","NL" +"3460919296","3460919535","US" +"3460919536","3460919543","AR" +"3460919544","3460919551","CO" +"3460919552","3460920319","US" +"3460920320","3460920575","IT" +"3460920576","3460920831","BE" +"3460920832","3460921343","US" +"3460921344","3460921599","DE" +"3460921600","3460921855","AU" +"3460921856","3460923391","US" +"3460923392","3460923647","MX" +"3460923648","3460923679","US" +"3460923680","3460923711","FR" +"3460923712","3460923743","DE" +"3460923744","3460923775","CH" +"3460923776","3460923807","SE" +"3460923808","3460923839","GB" +"3460923840","3460923871","AT" +"3460923872","3460924159","US" +"3460924160","3460924175","GB" +"3460924176","3460924223","US" +"3460924224","3460924287","GB" +"3460924288","3460924415","DE" +"3460924416","3460924607","GB" +"3460924608","3460924671","US" +"3460924672","3460925183","GB" +"3460925184","3460925695","US" +"3460925696","3460925951","ES" +"3460925952","3460926207","US" +"3460926208","3460926463","GB" +"3460926464","3460926719","US" +"3460926720","3460926975","DE" +"3460926976","3460927103","US" +"3460927104","3460927231","ES" +"3460927232","3460929023","BE" +"3460929024","3460929279","US" +"3460929280","3460929535","DE" +"3460929536","3460929791","GB" +"3460929792","3460930047","DK" +"3460930048","3460931007","US" +"3460931008","3460931071","IT" +"3460931072","3460931199","GR" +"3460931200","3460931247","US" +"3460931248","3460931327","BE" +"3460931328","3460931583","US" +"3460931584","3460931839","SE" +"3460931840","3460932095","DE" +"3460932096","3460932351","GB" +"3460932352","3460932607","FR" +"3460932608","3460932863","US" +"3460932864","3460933119","GB" +"3460933120","3460933375","US" +"3460933376","3460933439","DE" +"3460933440","3460933679","US" +"3460933680","3460933695","SE" +"3460933696","3460933823","US" +"3460933824","3460933887","IL" +"3460933888","3460934143","DE" +"3460934144","3460934655","US" +"3460934656","3460934783","CH" +"3460934784","3460934911","IT" +"3460934912","3460935167","SG" +"3460935168","3460935199","US" +"3460935200","3460935231","ES" +"3460935232","3460935295","US" +"3460935296","3460935423","HU" +"3460935424","3460935679","FR" +"3460935680","3460935935","FI" +"3460935936","3460936191","FR" +"3460936192","3460936447","US" +"3460936448","3460936703","GB" +"3460936704","3460936959","IT" +"3460936960","3460937215","DE" +"3460937216","3460937471","FR" +"3460937472","3460937727","US" +"3460937728","3460937983","DK" +"3460937984","3460938239","IE" +"3460938240","3460938495","DE" +"3460938496","3460939039","US" +"3460939040","3460939071","BE" +"3460939072","3460939103","IT" +"3460939104","3460939263","US" +"3460939264","3460939519","HK" +"3460939520","3460939711","US" +"3460939712","3460939775","CH" +"3460939776","3460939903","US" +"3460939904","3460939935","AU" +"3460939936","3460939967","SG" +"3460939968","3460940287","US" +"3460940288","3460940351","MX" +"3460940352","3460940415","ID" +"3460940416","3460940479","US" +"3460940480","3460940511","HK" +"3460940512","3460940543","TH" +"3460940544","3460940559","US" +"3460940560","3460940567","GB" +"3460940568","3460940607","US" +"3460940608","3460940639","CN" +"3460940640","3460941311","US" +"3460941312","3460941375","MY" +"3460941376","3460941439","US" +"3460941440","3460941567","TW" +"3460941568","3460941823","AU" +"3460941824","3460942079","US" +"3460942080","3460942335","GB" +"3460942336","3460943359","US" +"3460943360","3460943615","ID" +"3460943616","3460943871","HK" +"3460943872","3460944127","US" +"3460944128","3460944383","AU" +"3460944384","3460944447","KR" +"3460944448","3460944479","US" +"3460944480","3460944511","CN" +"3460944512","3460944543","TH" +"3460944544","3460944575","JP" +"3460944576","3460944671","KR" +"3460944672","3460944767","US" +"3460944768","3460944895","TH" +"3460944896","3460945151","DE" +"3460945152","3460945663","US" +"3460945664","3460945919","GB" +"3460945920","3460946687","US" +"3460946688","3460946943","DE" +"3460946944","3460946975","CH" +"3460946976","3460947455","US" +"3460947456","3460947711","DE" +"3460947712","3460947967","SE" +"3460947968","3460948095","US" +"3460948096","3460948159","KR" +"3460948160","3460948735","US" +"3460948736","3460948799","PH" +"3460948800","3460948863","CN" +"3460948864","3460948927","US" +"3460948928","3460948959","ID" +"3460948960","3460949015","US" +"3460949016","3460949023","CN" +"3460949024","3460949055","JP" +"3460949056","3460949183","ID" +"3460949184","3460950271","US" +"3460950272","3460950527","DE" +"3460950528","3460950559","HK" +"3460950560","3460950671","US" +"3460950672","3460950687","JP" +"3460950688","3460950991","US" +"3460950992","3460951007","JP" +"3460951008","3460951295","US" +"3460951296","3460951551","GB" +"3460951552","3460951559","JP" +"3460951560","3460951567","US" +"3460951568","3460951583","HK" +"3460951584","3460951743","US" +"3460951744","3460951751","HK" +"3460951752","3460951759","ID" +"3460951760","3460951823","US" +"3460951824","3460951831","CA" +"3460951832","3460951855","US" +"3460951856","3460951871","JP" +"3460951872","3460951887","CH" +"3460951888","3460951935","US" +"3460951936","3460951951","MX" +"3460951952","3460952007","US" +"3460952008","3460952015","CA" +"3460952016","3460952255","US" +"3460952256","3460952287","CA" +"3460952288","3460952319","US" +"3460952320","3460952575","GB" +"3460952576","3460952831","ES" +"3460952832","3460952895","US" +"3460952896","3460952927","BR" +"3460952928","3460952959","US" +"3460952960","3460953023","CA" +"3460953024","3460953111","US" +"3460953112","3460953119","TW" +"3460953120","3460953135","MX" +"3460953136","3460953151","US" +"3460953152","3460953167","TH" +"3460953168","3460953183","JP" +"3460953184","3460953199","MX" +"3460953200","3460953231","US" +"3460953232","3460953247","ID" +"3460953248","3460953279","US" +"3460953280","3460953343","CA" +"3460953344","3460953599","US" +"3460953600","3460953615","BR" +"3460953616","3460953623","US" +"3460953624","3460953631","SG" +"3460953632","3460953647","CN" +"3460953648","3460953663","SG" +"3460953664","3460953727","US" +"3460953728","3460953855","HK" +"3460953856","3460954111","GB" +"3460954112","3460954191","US" +"3460954192","3460954207","SG" +"3460954208","3460954367","US" +"3460954368","3460954431","DO" +"3460954432","3460954463","US" +"3460954464","3460954479","MY" +"3460954480","3460954527","US" +"3460954528","3460954559","KR" +"3460954560","3460954623","US" +"3460954624","3460954879","DE" +"3460954880","3460955135","LU" +"3460955136","3460955391","US" +"3460955392","3460955423","JP" +"3460955424","3460955455","US" +"3460955456","3460955487","BR" +"3460955488","3460955519","CO" +"3460955520","3460955583","BR" +"3460955584","3461021695","US" +"3461021696","3461031935","CA" +"3461031936","3461032191","US" +"3461032192","3461087231","CA" +"3461087232","3461285887","US" +"3461285888","3461285975","GB" +"3461285976","3461286143","US" +"3461286144","3461286335","FR" +"3461286336","3461286399","US" +"3461286400","3461286463","FR" +"3461286464","3461286471","GB" +"3461286472","3461286503","US" +"3461286504","3461286511","GB" +"3461286512","3461286519","US" +"3461286520","3461286543","GB" +"3461286544","3461330943","US" +"3461330944","3461331199","SG" +"3461331200","3461331247","US" +"3461331248","3461331263","SG" +"3461331264","3461331295","US" +"3461331296","3461331311","SG" +"3461331312","3461331327","US" +"3461331328","3461331551","SG" +"3461331552","3461331567","US" +"3461331568","3461331583","SG" +"3461331584","3461331711","US" +"3461331712","3461331967","SG" +"3461331968","3461332223","US" +"3461332224","3461332559","SG" +"3461332560","3461332735","US" +"3461332736","3461332991","SG" +"3461332992","3461408767","US" +"3461410816","3461414911","CA" +"3461414912","3461513215","US" +"3461513216","3461513727","CA" +"3461513728","3461513983","BF" +"3461513984","3461514495","CA" +"3461514496","3461514751","QA" +"3461514752","3461516287","CA" +"3461516288","3461516543","IL" +"3461516544","3461517055","CA" +"3461517056","3461554175","US" +"3461554176","3461556223","CA" +"3461558272","3461597887","US" +"3461597888","3461597951","CO" +"3461597952","3461598015","US" +"3461598016","3461598079","CO" +"3461598080","3461808127","US" +"3461808128","3461873663","CA" +"3461873664","3461897727","US" +"3461897728","3461897983","CA" +"3461897984","3461905407","US" +"3461905408","3461905663","CA" +"3461905664","3461940735","US" +"3461940736","3461940991","CA" +"3461940992","3461948159","US" +"3461948160","3461948415","CA" +"3461948416","3461948927","US" +"3461948928","3461949183","CA" +"3461949184","3461949695","US" +"3461949696","3461950207","CA" +"3461950208","3461950719","US" +"3461950720","3461951231","CA" +"3461951232","3461953535","US" +"3461953536","3461953791","CA" +"3461953792","3461968127","US" +"3461968128","3461968383","CA" +"3461968384","3461970431","US" +"3461970432","3461970687","CA" +"3461970688","3461972223","US" +"3461972224","3461972479","CA" +"3461972480","3461977855","US" +"3461977856","3461978111","CA" +"3461978112","3461992703","US" +"3461992704","3461992959","CA" +"3461992960","3461999871","US" +"3461999872","3462000127","PR" +"3462000128","3462000895","US" +"3462000896","3462001151","CA" +"3462001152","3462001919","US" +"3462001920","3462002431","CA" +"3462002432","3462148607","US" +"3462148608","3462148863","CA" +"3462148864","3462160895","US" +"3462160896","3462161151","PR" +"3462161152","3462163967","US" +"3462163968","3462164223","CA" +"3462164224","3462168319","US" +"3462168320","3462168575","CA" +"3462168576","3462169599","US" +"3462169600","3462169855","CA" +"3462169856","3462170623","US" +"3462170624","3462171135","CA" +"3462171136","3462171391","US" +"3462171392","3462171647","CA" +"3462171648","3462173695","US" +"3462173696","3462173951","CA" +"3462173952","3462174463","US" +"3462174464","3462174719","CA" +"3462174720","3462179839","US" +"3462179840","3462180095","CA" +"3462180096","3462181375","US" +"3462181376","3462181887","CA" +"3462181888","3462191871","US" +"3462191872","3462192127","PR" +"3462192128","3462194175","US" +"3462194176","3462194431","CA" +"3462194432","3462231039","US" +"3462231040","3462231295","CA" +"3462231296","3462231807","US" +"3462231808","3462232063","CA" +"3462232064","3462268415","US" +"3462268416","3462268671","CA" +"3462268672","3462290175","US" +"3462290176","3462290431","CA" +"3462290432","3462314239","US" +"3462314240","3462314495","CA" +"3462314496","3462321407","US" +"3462321408","3462321663","CA" +"3462321664","3462321919","US" +"3462321920","3462322175","CA" +"3462322176","3462323711","US" +"3462323712","3462323967","CA" +"3462323968","3462339071","US" +"3462339072","3462339583","CA" +"3462339584","3462340607","US" +"3462340608","3462340863","CA" +"3462340864","3462350847","US" +"3462350848","3462351103","CA" +"3462351104","3462593791","US" +"3462593792","3462594559","GN" +"3462594560","3462633471","US" +"3462633472","3462633727","SG" +"3462633728","3462633799","BV" +"3462633800","3462633823","US" +"3462633824","3462633855","SG" +"3462633856","3462633983","US" +"3462633984","3462634239","SG" +"3462634240","3462634247","US" +"3462634248","3462634271","SG" +"3462634272","3462634367","AE" +"3462634368","3462634495","SG" +"3462634496","3462634751","US" +"3462634752","3462635007","SG" +"3462635008","3462635263","US" +"3462635264","3462635519","SG" +"3462635520","3462889479","US" +"3462889480","3462889487","GB" +"3462889488","3462991183","US" +"3462991184","3462991191","CA" +"3462991192","3463004159","US" +"3463004160","3463006207","CO" +"3463006208","3463032319","US" +"3463032320","3463032831","PR" +"3463032832","3463043071","US" +"3463043072","3463044095","ES" +"3463044096","3463089151","US" +"3463089152","3463090175","CA" +"3463090176","3463116799","US" +"3463116800","3463118847","CO" +"3463118848","3463156735","US" +"3463156736","3463157759","BO" +"3463157760","3463176191","US" +"3463176192","3463176703","AN" +"3463176704","3463184383","US" +"3463184384","3463194623","CA" +"3463194624","3463198719","US" +"3463198720","3463213311","CA" +"3463213312","3463213567","US" +"3463214080","3463215103","US" +"3463215104","3463229327","CA" +"3463229328","3463229335","US" +"3463229336","3463243775","CA" +"3463243776","3463245055","US" +"3463245056","3463249919","CA" +"3463249920","3463480063","US" +"3463480064","3463480319","CA" +"3463480320","3463502335","US" +"3463502336","3463502399","GB" +"3463502400","3463518207","US" +"3463518208","3463520255","NL" +"3463520256","3463536895","US" +"3463536896","3463537151","NG" +"3463537152","3463583567","US" +"3463583568","3463583583","UM" +"3463583584","3463602687","US" +"3463602688","3463602943","PH" +"3463602944","3463632383","US" +"3463632384","3463632391","CA" +"3463632392","3463632399","US" +"3463632400","3463632415","CA" +"3463632416","3463708671","US" +"3463708672","3463774207","CA" +"3463774208","3464108031","US" +"3464108032","3464108287","DE" +"3464108288","3464127999","US" +"3464128000","3464128255","DE" +"3464128256","3464129535","US" +"3464129536","3464130047","DE" +"3464130048","3464167679","US" +"3464167680","3464169215","CA" +"3464169216","3464169471","US" +"3464169472","3464171775","CA" +"3464171776","3464172031","US" +"3464172032","3464180735","CA" +"3464180736","3464184487","US" +"3464184488","3464184495","GB" +"3464184496","3464184511","CA" +"3464184512","3464190463","US" +"3464190464","3464190719","CA" +"3464190720","3464191799","US" +"3464191800","3464191807","AF" +"3464191808","3464191911","US" +"3464191912","3464191919","ES" +"3464191920","3464195543","US" +"3464195544","3464195551","IT" +"3464195552","3464195943","US" +"3464195944","3464195951","AU" +"3464195952","3464195959","IT" +"3464195960","3464196151","US" +"3464196152","3464196159","AU" +"3464196160","3464196175","US" +"3464196176","3464196183","AU" +"3464196184","3464196191","IT" +"3464196192","3464196490","US" +"3464196491","3464196491","ZA" +"3464196492","3464200191","US" +"3464208384","3464216575","CA" +"3464216576","3464309903","US" +"3464309904","3464309911","CA" +"3464309912","3464310463","US" +"3464310464","3464310495","AU" +"3464310496","3464310591","US" +"3464310592","3464310655","AU" +"3464310656","3464340479","US" +"3464340480","3464341503","CA" +"3464341504","3464341759","US" +"3464341760","3464341775","JP" +"3464341776","3464341783","AU" +"3464341784","3464341799","US" +"3464341800","3464341807","CA" +"3464341808","3464341815","JP" +"3464341816","3464341823","US" +"3464341824","3464341831","PT" +"3464341832","3464341895","US" +"3464341896","3464341903","ID" +"3464341904","3464341911","US" +"3464341912","3464341919","IE" +"3464341920","3464341927","US" +"3464341928","3464341935","CV" +"3464341936","3464342007","US" +"3464342008","3464342015","PL" +"3464342016","3464342351","US" +"3464342352","3464342359","TR" +"3464342360","3464342879","US" +"3464342880","3464342887","GB" +"3464342888","3464343159","US" +"3464343160","3464343167","MQ" +"3464343168","3464343271","US" +"3464343272","3464343279","CA" +"3464343280","3464343423","US" +"3464343424","3464343431","SG" +"3464343432","3464382463","US" +"3464384512","3464388607","CA" +"3464388608","3464394751","US" +"3464394752","3464396799","LC" +"3464396800","3464548351","US" +"3464548352","3464548607","AG" +"3464548608","3464548863","LC" +"3464548864","3464549119","KN" +"3464549120","3464549375","VG" +"3464549376","3464549439","AG" +"3464549440","3464549503","MS" +"3464549504","3464549727","AG" +"3464549728","3464549759","KN" +"3464549760","3464550143","AG" +"3464550144","3464550399","LC" +"3464550400","3464626175","US" +"3464626432","3464626687","CA" +"3464626688","3464627199","US" +"3464627968","3464630271","CA" +"3464630272","3464631295","US" +"3464631296","3464650751","CA" +"3464650752","3464664063","US" +"3464664064","3464691711","CA" +"3464691712","3464766143","US" +"3464766144","3464766207","IN" +"3464766208","3464768607","US" +"3464768608","3464768623","IT" +"3464768624","3464768767","US" +"3464768768","3464768895","CA" +"3464768896","3464769535","US" +"3464769536","3464773631","CA" +"3464773632","3464774079","US" +"3464774080","3464774111","ES" +"3464774112","3464802303","US" +"3464802304","3464806399","CA" +"3464806400","3465154559","US" +"3465154560","3465158655","BS" +"3465158656","3465177087","US" +"3465177088","3465179135","PE" +"3465179136","3465412607","US" +"3465412608","3465412871","HK" +"3465412872","3465412895","GB" +"3465412896","3465412927","US" +"3465412928","3465413055","HK" +"3465413056","3465413119","US" +"3465413120","3465413127","HK" +"3465413128","3465413375","US" +"3465413376","3465413383","HK" +"3465413384","3465462783","US" +"3465462784","3465463039","GB" +"3465463040","3465463279","US" +"3465463280","3465463295","GB" +"3465463296","3465466687","US" +"3465466688","3465466703","GB" +"3465466704","3465466879","US" +"3465466880","3465466975","GB" +"3465466976","3465467071","US" +"3465467072","3465467079","GB" +"3465467080","3465468079","US" +"3465468080","3465468087","GB" +"3465468088","3465468351","US" +"3465468352","3465468367","FI" +"3465468368","3465468383","US" +"3465468384","3465468399","GB" +"3465468400","3465468879","US" +"3465468880","3465468911","SG" +"3465468912","3465468935","US" +"3465468936","3465468943","SG" +"3465468944","3465469183","US" +"3465469184","3465469215","GB" +"3465469216","3465469503","US" +"3465469504","3465469519","GB" +"3465469520","3465510911","US" +"3465510912","3465543679","JP" +"3465543680","3465953503","US" +"3465953504","3465953535","CA" +"3465953536","3465954175","US" +"3465954176","3465954303","CA" +"3465954304","3465954495","US" +"3465954496","3465954511","CA" +"3465954512","3465954559","US" +"3465954560","3465954575","CA" +"3465954576","3465961607","US" +"3465961608","3465961615","CA" +"3465961616","3465961631","US" +"3465961632","3465961663","CA" +"3465961664","3465961783","US" +"3465961784","3465961791","CA" +"3465961792","3465961983","US" +"3465961984","3465962015","CA" +"3465962016","3465982991","US" +"3465982992","3465983007","GB" +"3465983008","3465983023","US" +"3465983024","3465983127","GB" +"3465983128","3465983167","US" +"3465983168","3465983199","GB" +"3465983200","3465983207","ZA" +"3465983208","3465983263","GB" +"3465983264","3465983271","US" +"3465983272","3465983311","GB" +"3465983312","3465983463","US" +"3465983464","3465983487","GB" +"3465983488","3466044903","US" +"3466044904","3466044911","PH" +"3466044912","3466067967","US" +"3466067968","3466068247","CA" +"3466068248","3466158079","US" +"3466158080","3466166271","PA" +"3466166272","3466282111","US" +"3466282112","3466282119","GB" +"3466282120","3466282727","US" +"3466282728","3466282743","CA" +"3466282744","3466283327","US" +"3466283328","3466283391","CA" +"3466283392","3466286103","US" +"3466286104","3466286111","DE" +"3466286112","3466290687","US" +"3466290688","3466290943","CH" +"3466290944","3466294271","US" +"3466294272","3466294319","CA" +"3466294320","3466295263","US" +"3466295264","3466295279","CA" +"3466295280","3466295647","US" +"3466295648","3466295679","CA" +"3466295680","3466313727","US" +"3466313728","3466317823","CA" +"3466317824","3466489855","US" +"3466489856","3466490111","CA" +"3466490112","3466555199","US" +"3466555200","3466555215","CA" +"3466555216","3466558207","US" +"3466558208","3466558463","EC" +"3466558464","3466560255","US" +"3466560256","3466560511","GH" +"3466560512","3466627007","US" +"3466627008","3466627039","PR" +"3466627040","3466661887","US" +"3466661888","3466663935","TW" +"3466663936","3466683135","US" +"3466683136","3466683391","A2" +"3466683392","3466688511","US" +"3466688512","3466688767","A2" +"3466688768","3466734847","US" +"3466734848","3466735103","RU" +"3466735104","3466756095","US" +"3466756096","3466772479","CA" +"3466772480","3466846207","US" +"3466846208","3466854399","CA" +"3466854400","3466903551","US" +"3466903552","3466904063","CH" +"3466904064","3466929407","US" +"3466929408","3466929663","IT" +"3466929664","3466938444","US" +"3466938445","3466938448","HK" +"3466938449","3466958079","US" +"3466958080","3466958335","CA" +"3466958336","3466976767","US" +"3466976768","3466977023","A1" +"3466977024","3467051007","US" +"3467051008","3467116543","CA" +"3467116544","3467145351","US" +"3467145352","3467145359","DE" +"3467145360","3467145743","US" +"3467145744","3467145751","DE" +"3467145752","3467145815","US" +"3467145816","3467145823","DE" +"3467145824","3467145831","CH" +"3467145832","3467145839","US" +"3467145840","3467145847","HK" +"3467145848","3467145855","DE" +"3467145856","3467146495","US" +"3467146496","3467146559","CO" +"3467146560","3467146591","DE" +"3467146592","3467146655","US" +"3467146656","3467146671","CN" +"3467146672","3467378687","US" +"3467378688","3467444223","CA" +"3467444224","3467554815","US" +"3467554816","3467567103","CA" +"3467567104","3467619935","US" +"3467619936","3467619967","CA" +"3467619968","3467706367","US" +"3467706368","3467902975","CA" +"3467902976","3467964415","US" +"3467964416","3467968511","CA" +"3467968512","3468034047","US" +"3468034048","3468036095","GB" +"3468036096","3468036351","BE" +"3468036352","3468036607","DE" +"3468036608","3468036863","ES" +"3468036864","3468037375","DE" +"3468037376","3468037887","US" +"3468037888","3468038143","IE" +"3468038144","3468038655","FR" +"3468038656","3468038911","NL" +"3468038912","3468039167","SE" +"3468039168","3468039423","FR" +"3468039424","3468041215","US" +"3468041216","3468041471","FI" +"3468041472","3468041727","US" +"3468041728","3468041983","TW" +"3468041984","3468042367","US" +"3468042368","3468042431","IT" +"3468042432","3468042495","US" +"3468042496","3468042751","AT" +"3468042752","3468043135","US" +"3468043136","3468043263","DK" +"3468043264","3468044543","US" +"3468044544","3468044799","ES" +"3468044800","3468044927","GB" +"3468044928","3468045055","DK" +"3468045056","3468045311","DE" +"3468045312","3468045695","US" +"3468045696","3468045823","ZA" +"3468045824","3468046079","NO" +"3468046080","3468046335","ZA" +"3468046336","3468046591","FR" +"3468046592","3468046719","US" +"3468046720","3468046847","DE" +"3468046848","3468047103","IT" +"3468047104","3468047359","US" +"3468047360","3468047615","DE" +"3468047616","3468047743","US" +"3468047744","3468047807","LU" +"3468047808","3468047871","US" +"3468047872","3468047887","ES" +"3468047888","3468047999","US" +"3468048000","3468048127","DE" +"3468048128","3468048383","US" +"3468048384","3468048639","FR" +"3468048640","3468049407","US" +"3468049408","3468049663","GB" +"3468049664","3468049919","US" +"3468049920","3468050175","IT" +"3468050176","3468050431","US" +"3468050432","3468050687","SE" +"3468050688","3468050943","US" +"3468050944","3468051007","IT" +"3468051008","3468051231","US" +"3468051232","3468051263","DK" +"3468051264","3468051327","AT" +"3468051328","3468052479","US" +"3468052480","3468052735","ES" +"3468052736","3468052991","GB" +"3468052992","3468053247","ES" +"3468053248","3468053503","ZA" +"3468053504","3468053759","AU" +"3468053760","3468054015","CH" +"3468054016","3468054271","DE" +"3468054272","3468055295","US" +"3468055296","3468055551","BE" +"3468055552","3468055807","IT" +"3468055808","3468056063","NL" +"3468056064","3468056319","FR" +"3468056320","3468056575","CH" +"3468056576","3468056831","NO" +"3468056832","3468056959","DK" +"3468056960","3468057023","IN" +"3468057024","3468057087","US" +"3468057088","3468057215","LU" +"3468057216","3468057375","GB" +"3468057376","3468057599","US" +"3468057600","3468057855","IL" +"3468057856","3468058111","US" +"3468058112","3468058175","BE" +"3468058176","3468058239","CH" +"3468058240","3468058367","GB" +"3468058368","3468058368","US" +"3468058369","3468058432","IT" +"3468058433","3468058559","US" +"3468058560","3468058623","SG" +"3468058624","3468058687","US" +"3468058688","3468058719","ES" +"3468058720","3468059647","US" +"3468059648","3468059903","FR" +"3468059904","3468060159","DE" +"3468060160","3468060671","FR" +"3468060672","3468060927","US" +"3468060928","3468060991","FR" +"3468060992","3468061119","US" +"3468061120","3468061183","CH" +"3468061184","3468061695","US" +"3468061696","3468061951","JP" +"3468061952","3468062079","US" +"3468062080","3468062143","GB" +"3468062144","3468062335","US" +"3468062336","3468062399","TW" +"3468062400","3468062463","DE" +"3468062464","3468062719","AT" +"3468062720","3468063231","NL" +"3468063232","3468063359","US" +"3468063360","3468063423","RO" +"3468063424","3468063487","US" +"3468063488","3468063743","BE" +"3468063744","3468063999","US" +"3468064000","3468064255","HK" +"3468064256","3468064511","US" +"3468064512","3468064527","BE" +"3468064528","3468064543","US" +"3468064544","3468064575","NO" +"3468064576","3468064639","US" +"3468064640","3468064703","LU" +"3468064704","3468064735","US" +"3468064736","3468064767","CH" +"3468064768","3468065023","DE" +"3468065024","3468065279","US" +"3468065280","3468065535","DE" +"3468065536","3468065791","US" +"3468065792","3468065919","IT" +"3468065920","3468065951","GB" +"3468065952","3468065983","LU" +"3468065984","3468065999","CZ" +"3468066000","3468066015","BE" +"3468066016","3468066047","DE" +"3468066048","3468066239","US" +"3468066240","3468066271","IE" +"3468066272","3468066319","US" +"3468066320","3468066327","FR" +"3468066328","3468066463","US" +"3468066464","3468066495","SE" +"3468066496","3468066527","CH" +"3468066528","3468066559","US" +"3468066560","3468066623","IT" +"3468066624","3468067199","US" +"3468067200","3468067231","CA" +"3468067232","3468067263","US" +"3468067264","3468067295","IL" +"3468067296","3468067327","US" +"3468067328","3468067359","BR" +"3468067360","3468067391","US" +"3468067392","3468067399","BR" +"3468067400","3468067551","US" +"3468067552","3468067567","GB" +"3468067568","3468067759","US" +"3468067760","3468067775","AR" +"3468067776","3468068095","US" +"3468068096","3468068351","MC" +"3468068352","3468068527","US" +"3468068528","3468068543","MX" +"3468068544","3468068863","US" +"3468068864","3468069631","CA" +"3468069632","3468071791","US" +"3468071792","3468071807","MX" +"3468071808","3468071871","US" +"3468071872","3468071887","MX" +"3468071888","3468072351","US" +"3468072352","3468072383","CA" +"3468072384","3468073183","US" +"3468073184","3468073215","MX" +"3468073216","3468073727","US" +"3468073728","3468073791","CA" +"3468073792","3468073855","US" +"3468073856","3468073919","CA" +"3468073920","3468074463","US" +"3468074464","3468074479","GB" +"3468074480","3468075919","US" +"3468075920","3468075935","BR" +"3468075936","3468075967","US" +"3468075968","3468075999","MX" +"3468076000","3468076031","PH" +"3468076032","3468076191","US" +"3468076192","3468076207","BR" +"3468076208","3468076223","US" +"3468076224","3468076287","GB" +"3468076288","3468077631","US" +"3468077632","3468077663","AR" +"3468077664","3468079327","US" +"3468079328","3468079359","BR" +"3468079360","3468079487","US" +"3468079488","3468079551","JP" +"3468079552","3468081407","US" +"3468081408","3468081663","DE" +"3468081664","3468081919","AT" +"3468081920","3468082431","US" +"3468082432","3468082687","NO" +"3468082688","3468083311","US" +"3468083312","3468083327","IN" +"3468083328","3468083663","US" +"3468083664","3468083679","ID" +"3468083680","3468083967","US" +"3468083968","3468084223","AU" +"3468084224","3468084735","US" +"3468084736","3468084991","SG" +"3468084992","3468085055","CA" +"3468085056","3468085119","US" +"3468085120","3468085183","CA" +"3468085184","3468085191","JP" +"3468085192","3468085199","PH" +"3468085200","3468085207","CN" +"3468085208","3468085247","US" +"3468085248","3468085279","BR" +"3468085280","3468085311","US" +"3468085312","3468085375","BR" +"3468085376","3468085439","CN" +"3468085440","3468085503","BR" +"3468085504","3468085535","JP" +"3468085536","3468085567","US" +"3468085568","3468085599","HK" +"3468085600","3468085607","US" +"3468085608","3468085623","HK" +"3468085624","3468085663","US" +"3468085664","3468085695","ID" +"3468085696","3468085759","US" +"3468085760","3468086015","ID" +"3468086016","3468086143","US" +"3468086144","3468086271","SG" +"3468086272","3468086783","US" +"3468086784","3468086799","HK" +"3468086800","3468086879","US" +"3468086880","3468086911","SG" +"3468086912","3468087807","US" +"3468087808","3468088063","SG" +"3468088064","3468088191","US" +"3468088192","3468088207","HK" +"3468088208","3468088223","US" +"3468088224","3468088231","HK" +"3468088232","3468088335","US" +"3468088336","3468088351","JP" +"3468088352","3468088383","ID" +"3468088384","3468088415","US" +"3468088416","3468088431","TW" +"3468088432","3468088959","US" +"3468088960","3468088991","JP" +"3468088992","3468089023","US" +"3468089024","3468089055","HK" +"3468089056","3468089663","US" +"3468089664","3468089695","JP" +"3468089696","3468089823","US" +"3468089824","3468089855","SG" +"3468089856","3468090623","US" +"3468090624","3468090687","IT" +"3468090688","3468090719","MY" +"3468090720","3468090727","US" +"3468090728","3468090735","JP" +"3468090736","3468090751","CN" +"3468090752","3468090815","US" +"3468090816","3468090879","CN" +"3468090880","3468091135","US" +"3468091136","3468091199","JP" +"3468091200","3468091391","US" +"3468091392","3468091647","NL" +"3468091648","3468091903","US" +"3468091904","3468091935","KR" +"3468091936","3468092031","US" +"3468092032","3468092063","TH" +"3468092064","3468092127","US" +"3468092128","3468092159","SG" +"3468092160","3468093247","US" +"3468093248","3468093263","JP" +"3468093264","3468093279","US" +"3468093280","3468093287","JP" +"3468093288","3468093343","US" +"3468093344","3468093375","HK" +"3468093376","3468093391","SG" +"3468093392","3468093407","ID" +"3468093408","3468093439","AU" +"3468093440","3468093695","US" +"3468093696","3468093951","DE" +"3468093952","3468094207","US" +"3468094208","3468094223","HK" +"3468094224","3468094271","US" +"3468094272","3468094303","KR" +"3468094304","3468094335","ID" +"3468094336","3468095135","US" +"3468095136","3468095167","JP" +"3468095168","3468095231","US" +"3468095232","3468095487","SE" +"3468095488","3468096255","US" +"3468096256","3468096383","CA" +"3468096384","3468096447","TW" +"3468096448","3468096479","US" +"3468096480","3468096511","MY" +"3468096512","3468096767","NO" +"3468096768","3468096895","PH" +"3468096896","3468097023","AU" +"3468097024","3468098047","US" +"3468098048","3468098079","JP" +"3468098080","3468098111","SG" +"3468098112","3468098239","US" +"3468098240","3468098271","SG" +"3468098272","3468099327","US" +"3468099328","3468099583","FR" +"3468099584","3468127999","US" +"3468128000","3468128255","IN" +"3468128256","3468296191","US" +"3468296192","3468361727","CA" +"3468361728","3468427359","US" +"3468427360","3468427375","IL" +"3468427376","3468427935","US" +"3468427936","3468427967","AU" +"3468427968","3468428191","US" +"3468428192","3468428207","BG" +"3468428208","3468428415","US" +"3468428416","3468428447","GR" +"3468428448","3468428543","US" +"3468428544","3468428559","CA" +"3468428560","3468428607","US" +"3468428608","3468428671","CA" +"3468428672","3468428927","US" +"3468428928","3468428991","SE" +"3468428992","3468429343","US" +"3468429344","3468429359","QA" +"3468429360","3468430495","US" +"3468430496","3468430527","CA" +"3468430528","3468431999","US" +"3468432000","3468432063","CA" +"3468432064","3468432671","US" +"3468432672","3468432687","ES" +"3468432688","3468433167","US" +"3468433168","3468433183","CA" +"3468433184","3468433215","US" +"3468433216","3468433279","SE" +"3468433280","3468433439","US" +"3468433440","3468433455","AU" +"3468433456","3468433663","US" +"3468433664","3468433919","AU" +"3468433920","3468435359","US" +"3468435360","3468435423","AU" +"3468435424","3468443647","US" +"3468443648","3468460031","CA" +"3468460032","3468468223","BM" +"3468468224","3468545791","US" +"3468545792","3468546047","SG" +"3468546048","3468619007","US" +"3468619008","3468619263","CA" +"3468619264","3468623871","US" +"3468623872","3468624527","CA" +"3468624528","3468624543","US" +"3468624544","3468625727","CA" +"3468625728","3468625743","US" +"3468625744","3468627015","CA" +"3468627016","3468627023","US" +"3468627024","3468627087","CA" +"3468627088","3468627103","US" +"3468627104","3468627247","CA" +"3468627248","3468627263","US" +"3468627264","3468627663","CA" +"3468627664","3468627679","US" +"3468627680","3468628119","CA" +"3468628120","3468628127","GB" +"3468628128","3468628143","CA" +"3468628144","3468628159","US" +"3468628160","3468628183","CA" +"3468628184","3468628191","US" +"3468628192","3468628511","CA" +"3468628512","3468628607","US" +"3468628608","3468628927","CA" +"3468628928","3468628991","US" +"3468628992","3468631583","CA" +"3468631584","3468631615","US" +"3468631616","3468631679","CA" +"3468631680","3468631695","US" +"3468631696","3468632143","CA" +"3468632144","3468632159","US" +"3468632160","3468632735","CA" +"3468632736","3468632743","US" +"3468632744","3468632975","CA" +"3468632976","3468632991","US" +"3468632992","3468633759","CA" +"3468633760","3468633791","US" +"3468633792","3468634383","CA" +"3468634384","3468634391","US" +"3468634392","3468634559","CA" +"3468634560","3468634591","US" +"3468634592","3468635583","CA" +"3468635584","3468635647","US" +"3468635648","3468635919","CA" +"3468635920","3468635935","US" +"3468635936","3468637839","CA" +"3468637840","3468637847","SK" +"3468637848","3468638143","CA" +"3468638144","3468638159","US" +"3468638160","3468639935","CA" +"3468639936","3468639967","US" +"3468639968","3468656639","CA" +"3468656640","3468978131","US" +"3468978132","3468978133","A1" +"3468978134","3469032191","US" +"3469032192","3469032447","AP" +"3469032448","3469055743","US" +"3469055744","3469055999","CA" +"3469056000","3469176319","US" +"3469176320","3469176575","MX" +"3469176576","3469186303","US" +"3469186304","3469186559","MX" +"3469186560","3469893631","US" +"3469893632","3469901823","CA" +"3469901824","3470131199","US" +"3470131200","3470135295","AG" +"3470135296","3470137343","LC" +"3470137344","3470139391","VG" +"3470139392","3470148095","US" +"3470148096","3470148351","CA" +"3470148352","3470148607","US" +"3470148608","3470149119","CA" +"3470149120","3470151295","US" +"3470151296","3470151359","CA" +"3470151360","3470151679","US" +"3470151680","3470152703","CA" +"3470152704","3470152959","US" +"3470152960","3470152975","CA" +"3470152976","3470153727","US" +"3470153728","3470153983","CA" +"3470153984","3470184454","US" +"3470184455","3470184458","LK" +"3470184459","3470184476","US" +"3470184477","3470184480","CN" +"3470184481","3470184484","US" +"3470184485","3470184488","IN" +"3470184489","3470184492","US" +"3470184493","3470184496","ID" +"3470184497","3470184512","US" +"3470184513","3470184516","TH" +"3470184517","3470184528","US" +"3470184529","3470184532","CA" +"3470184533","3470184540","US" +"3470184541","3470184544","ID" +"3470184545","3470184545","MY" +"3470184546","3470184549","CA" +"3470184550","3470184553","SI" +"3470184554","3470184557","IN" +"3470184558","3470184561","US" +"3470184562","3470184565","IN" +"3470184566","3470184574","US" +"3470184575","3470184575","BE" +"3470184576","3470184577","CA" +"3470184578","3470184581","MX" +"3470184582","3470184585","CA" +"3470184586","3470184593","US" +"3470184594","3470184597","JP" +"3470184598","3470184613","US" +"3470184614","3470184617","IN" +"3470184618","3470184619","NZ" +"3470184620","3470184639","US" +"3470184640","3470184643","TW" +"3470184644","3470184671","US" +"3470184672","3470184675","MY" +"3470184676","3470184683","US" +"3470184684","3470184687","BR" +"3470184688","3470184691","CA" +"3470184692","3470184699","US" +"3470184700","3470184701","AU" +"3470184702","3470184722","US" +"3470184723","3470184723","MY" +"3470184724","3470184731","US" +"3470184732","3470184733","NZ" +"3470184734","3470184737","US" +"3470184738","3470184741","SG" +"3470184742","3470184746","US" +"3470184747","3470184750","MY" +"3470184751","3470184769","US" +"3470184770","3470184773","ID" +"3470184774","3470184785","US" +"3470184786","3470184789","NZ" +"3470184790","3470184801","US" +"3470184802","3470184805","TW" +"3470184806","3470184809","US" +"3470184810","3470184813","MY" +"3470184814","3470184817","CA" +"3470184818","3470184821","US" +"3470184822","3470184825","AU" +"3470184826","3470184829","US" +"3470184830","3470184833","JP" +"3470184834","3470184837","US" +"3470184838","3470184841","GB" +"3470184842","3470184849","US" +"3470184850","3470184853","JP" +"3470184854","3470184857","SG" +"3470184858","3470184861","RO" +"3470184862","3470184865","US" +"3470184866","3470184869","AU" +"3470184870","3470184873","HK" +"3470184874","3470184881","US" +"3470184882","3470184884","AU" +"3470184885","3470184905","US" +"3470184906","3470184907","SG" +"3470184908","3470184919","US" +"3470184920","3470184923","MX" +"3470184924","3470184929","US" +"3470184930","3470184933","AU" +"3470184934","3470184957","US" +"3470184958","3470184958","LK" +"3470184959","3470184975","US" +"3470184976","3470184976","MY" +"3470184977","3470184990","US" +"3470184991","3470184994","NZ" +"3470184995","3470185010","US" +"3470185011","3470185014","GB" +"3470185015","3470185016","AU" +"3470185017","3470185020","US" +"3470185021","3470185021","BE" +"3470185022","3470185050","US" +"3470185051","3470185054","IN" +"3470185055","3470185062","US" +"3470185063","3470185066","BR" +"3470185067","3470185070","PL" +"3470185071","3470185082","US" +"3470185083","3470185086","AU" +"3470185087","3470185090","IN" +"3470185091","3470185138","US" +"3470185139","3470185142","ID" +"3470185143","3470185146","US" +"3470185147","3470185150","AR" +"3470185151","3470185154","AU" +"3470185155","3470185166","US" +"3470185167","3470185170","CN" +"3470185171","3470185199","US" +"3470185200","3470185203","ID" +"3470185204","3470185207","GB" +"3470185208","3470185213","US" +"3470185214","3470185214","LK" +"3470185215","3470185234","US" +"3470185235","3470185238","AE" +"3470185239","3470185242","NL" +"3470185243","3470185250","US" +"3470185251","3470185254","CA" +"3470185255","3470185258","SG" +"3470185259","3470185262","AU" +"3470185263","3470185270","US" +"3470185271","3470185274","ID" +"3470185275","3470185278","AU" +"3470185279","3470185282","CA" +"3470185283","3470185286","US" +"3470185287","3470185290","CN" +"3470185291","3470185294","US" +"3470185295","3470185295","MY" +"3470185296","3470185312","US" +"3470185313","3470185316","TW" +"3470185317","3470185336","US" +"3470185337","3470185340","AU" +"3470185341","3470185344","US" +"3470185345","3470185348","EC" +"3470185349","3470185352","US" +"3470185353","3470185353","NZ" +"3470185354","3470185365","US" +"3470185366","3470185367","AU" +"3470185368","3470185371","PH" +"3470185372","3470185379","US" +"3470185380","3470185383","AU" +"3470185384","3470185399","US" +"3470185400","3470185403","ID" +"3470185404","3470185415","US" +"3470185416","3470185419","BE" +"3470185420","3470185423","NL" +"3470185424","3470185427","CA" +"3470185428","3470185431","US" +"3470185432","3470185435","CN" +"3470185436","3470185451","US" +"3470185452","3470185455","VE" +"3470185456","3470185463","US" +"3470185464","3470185467","NZ" +"3470185468","3470185468","US" +"3470185469","3470185469","LK" +"3470185470","3470186003","US" +"3470186004","3470186007","MX" +"3470186008","3470186011","CA" +"3470186012","3470186012","A1" +"3470186013","3470186015","CA" +"3470186016","3470186019","AU" +"3470186020","3470186060","US" +"3470186061","3470186064","CN" +"3470186065","3470186068","AU" +"3470186069","3470186072","US" +"3470186073","3470186076","IN" +"3470186077","3470186084","US" +"3470186085","3470186085","BE" +"3470186086","3470186089","US" +"3470186090","3470186093","SG" +"3470186094","3470186097","CA" +"3470186098","3470186113","US" +"3470186114","3470186117","AU" +"3470186118","3470186251","US" +"3470186252","3470186255","CN" +"3470186256","3470186267","US" +"3470186268","3470186271","MX" +"3470186272","3470186275","SG" +"3470186276","3470186283","US" +"3470186284","3470186287","CA" +"3470186288","3470186306","US" +"3470186307","3470186310","MY" +"3470186311","3470186314","TH" +"3470186315","3470186318","AU" +"3470186319","3470186324","US" +"3470186325","3470186328","CN" +"3470186329","3470186329","NZ" +"3470186330","3470186338","US" +"3470186339","3470186342","UA" +"3470186343","3470186513","US" +"3470186514","3470186517","CA" +"3470186518","3470186525","US" +"3470186526","3470186529","ID" +"3470186530","3470186537","GB" +"3470186538","3470186573","US" +"3470186574","3470186577","CH" +"3470186578","3470186593","US" +"3470186594","3470186597","CA" +"3470186598","3470186601","TR" +"3470186602","3470186605","US" +"3470186606","3470186609","CA" +"3470186610","3470186613","ES" +"3470186614","3470186617","US" +"3470186618","3470186621","RO" +"3470186622","3470186625","BR" +"3470186626","3470186637","US" +"3470186638","3470186641","BR" +"3470186642","3470186669","US" +"3470186670","3470186673","AU" +"3470186674","3470186677","US" +"3470186678","3470186681","CA" +"3470186682","3470186685","US" +"3470186686","3470186689","IL" +"3470186690","3470186693","IN" +"3470186694","3470186697","ES" +"3470186698","3470186701","CA" +"3470186702","3470186705","AU" +"3470186706","3470186721","US" +"3470186722","3470186725","IN" +"3470186726","3470186729","US" +"3470186730","3470186733","IN" +"3470186734","3470186737","US" +"3470186738","3470186741","CA" +"3470186742","3470186745","IL" +"3470186746","3470186757","US" +"3470186758","3470186761","CA" +"3470186762","3470186765","US" +"3470186766","3470186769","HU" +"3470186770","3470186785","US" +"3470186786","3470186789","GB" +"3470186790","3470186805","US" +"3470186806","3470186809","IN" +"3470186810","3470186813","US" +"3470186814","3470186817","EE" +"3470186818","3470186825","US" +"3470186826","3470186829","GB" +"3470186830","3470186833","IN" +"3470186834","3470186837","US" +"3470186838","3470186841","AR" +"3470186842","3470186845","CA" +"3470186846","3470186849","EG" +"3470186850","3470186853","US" +"3470186854","3470186857","KW" +"3470186858","3470186861","US" +"3470186862","3470186865","AR" +"3470186866","3470186873","US" +"3470186874","3470186877","AE" +"3470186878","3470186881","CA" +"3470186882","3470186885","US" +"3470186886","3470186889","FR" +"3470186890","3470186891","CA" +"3470186892","3470186895","FR" +"3470186896","3470186899","AU" +"3470186900","3470186903","US" +"3470186904","3470186907","IN" +"3470186908","3470186933","US" +"3470186934","3470186935","BR" +"3470186936","3470186943","US" +"3470186944","3470186947","CA" +"3470186948","3470186963","US" +"3470186964","3470186967","TR" +"3470186968","3470186989","US" +"3470186990","3470186993","PE" +"3470186994","3470186997","US" +"3470186998","3470187001","GB" +"3470187002","3470187041","US" +"3470187042","3470187045","GB" +"3470187046","3470187057","US" +"3470187058","3470187061","MY" +"3470187062","3470187073","US" +"3470187074","3470187077","IT" +"3470187078","3470187081","CA" +"3470187082","3470187085","CZ" +"3470187086","3470187089","US" +"3470187090","3470187093","TR" +"3470187094","3470187097","GB" +"3470187098","3470187101","IN" +"3470187102","3470187109","US" +"3470187110","3470187113","BR" +"3470187114","3470187117","VN" +"3470187118","3470187125","US" +"3470187126","3470187129","GB" +"3470187130","3470187133","AR" +"3470187134","3470187137","BA" +"3470187138","3470187141","US" +"3470187142","3470187145","CA" +"3470187146","3470187153","IN" +"3470187154","3470187157","ID" +"3470187158","3470187161","US" +"3470187162","3470187165","AU" +"3470187166","3470187169","NO" +"3470187170","3470187181","US" +"3470187182","3470187185","GR" +"3470187186","3470187229","US" +"3470187230","3470187231","CA" +"3470187232","3470187235","GB" +"3470187236","3470187247","US" +"3470187248","3470187251","GB" +"3470187252","3470187255","US" +"3470187256","3470187259","ES" +"3470187260","3470187269","US" +"3470187270","3470187273","AU" +"3470187274","3470187309","US" +"3470187310","3470187313","ES" +"3470187314","3470187335","US" +"3470187336","3470187339","CA" +"3470187340","3470187343","GR" +"3470187344","3470187356","US" +"3470187357","3470187360","GB" +"3470187361","3470187364","BG" +"3470187365","3470187368","US" +"3470187369","3470187372","GR" +"3470187373","3470187380","US" +"3470187381","3470187384","AR" +"3470187385","3470187388","US" +"3470187389","3470187392","GB" +"3470187393","3470187396","IN" +"3470187397","3470187400","RU" +"3470187401","3470187404","GB" +"3470187405","3470187408","DO" +"3470187409","3470187416","US" +"3470187417","3470187420","IN" +"3470187421","3470187429","US" +"3470187430","3470187431","RU" +"3470187432","3470187437","US" +"3470187438","3470187441","PH" +"3470187442","3470187446","US" +"3470187447","3470187450","CA" +"3470187451","3470187454","US" +"3470187455","3470187458","IT" +"3470187459","3470187470","US" +"3470187471","3470187474","PT" +"3470187475","3470187502","US" +"3470187503","3470187503","JP" +"3470187504","3470187511","US" +"3470187512","3470187515","UA" +"3470187516","3470187525","US" +"3470187526","3470187529","EC" +"3470187530","3470187557","US" +"3470187558","3470187561","AE" +"3470187562","3470187569","US" +"3470187570","3470187573","IN" +"3470187574","3470187577","US" +"3470187578","3470187581","GB" +"3470187582","3470187589","US" +"3470187590","3470187593","IT" +"3470187594","3470187606","US" +"3470187607","3470187610","IL" +"3470187611","3470187614","PL" +"3470187615","3470187618","US" +"3470187619","3470187622","IT" +"3470187623","3470187634","US" +"3470187635","3470187638","SG" +"3470187639","3470187646","US" +"3470187647","3470187650","IT" +"3470187651","3470187654","AR" +"3470187655","3470187666","US" +"3470187667","3470187670","IN" +"3470187671","3470187674","RS" +"3470187675","3470187678","US" +"3470187679","3470187682","PT" +"3470187683","3470187686","US" +"3470187687","3470187690","JP" +"3470187691","3470187702","US" +"3470187703","3470187706","GB" +"3470187707","3470187725","US" +"3470187726","3470187729","GB" +"3470187730","3470187741","US" +"3470187742","3470187745","VN" +"3470187746","3470187755","US" +"3470187756","3470187759","PH" +"3470187760","3470187763","ZA" +"3470187764","3470187781","US" +"3470187782","3470187785","SI" +"3470187786","3470187801","US" +"3470187802","3470187805","IN" +"3470187806","3470187813","US" +"3470187814","3470187817","HK" +"3470187818","3470187825","US" +"3470187826","3470187829","CA" +"3470187830","3470187841","US" +"3470187842","3470187845","TR" +"3470187846","3470187857","US" +"3470187858","3470187861","MX" +"3470187862","3470187867","US" +"3470187868","3470187871","IL" +"3470187872","3470187885","US" +"3470187886","3470187889","IN" +"3470187890","3470187940","US" +"3470187941","3470187944","SA" +"3470187945","3470187952","US" +"3470187953","3470187956","NO" +"3470187957","3470187960","US" +"3470187961","3470187964","IN" +"3470187965","3470187976","US" +"3470187977","3470187980","ES" +"3470187981","3470187988","US" +"3470187989","3470187992","CA" +"3470187993","3470188004","US" +"3470188005","3470188008","AU" +"3470188009","3470188016","SE" +"3470188017","3470188024","US" +"3470188025","3470188028","GB" +"3470188029","3470188041","US" +"3470188042","3470188045","TH" +"3470188046","3470188049","GB" +"3470188050","3470188069","US" +"3470188070","3470188073","NZ" +"3470188074","3470188095","US" +"3470188096","3470188099","GB" +"3470188100","3470188103","US" +"3470188104","3470188107","CA" +"3470188108","3470188111","US" +"3470188112","3470188115","CA" +"3470188116","3470188131","US" +"3470188132","3470188135","AU" +"3470188136","3470188151","US" +"3470188152","3470188155","KW" +"3470188156","3470188163","US" +"3470188164","3470188167","ID" +"3470188168","3470188171","US" +"3470188172","3470188175","NL" +"3470188176","3470188199","US" +"3470188200","3470188203","AR" +"3470188204","3470188207","US" +"3470188208","3470188211","ES" +"3470188212","3470188215","TR" +"3470188216","3470188227","US" +"3470188228","3470188231","GB" +"3470188232","3470188247","US" +"3470188248","3470188251","BE" +"3470188252","3470188255","US" +"3470188256","3470188259","CA" +"3470188260","3470188275","US" +"3470188276","3470188279","IN" +"3470188280","3470188283","GR" +"3470188284","3470188293","US" +"3470188294","3470188295","RU" +"3470188296","3470188347","US" +"3470188348","3470188351","HU" +"3470188352","3470188393","US" +"3470188394","3470188397","GB" +"3470188398","3470188405","US" +"3470188406","3470188409","GR" +"3470188410","3470188425","US" +"3470188426","3470188433","ES" +"3470188434","3470188437","AR" +"3470188438","3470188483","US" +"3470188484","3470188487","PH" +"3470188488","3470188491","ID" +"3470188492","3470188503","US" +"3470188504","3470188507","CA" +"3470188508","3470188509","US" +"3470188510","3470188510","IL" +"3470188511","3470188521","US" +"3470188522","3470188541","HK" +"3470188542","3470192639","US" +"3470192640","3470196735","CA" +"3470196736","3470360623","US" +"3470360624","3470360631","CA" +"3470360632","3470360687","US" +"3470360688","3470360695","AF" +"3470360696","3470360799","US" +"3470360800","3470360807","CA" +"3470360808","3470360895","US" +"3470360896","3470360911","CA" +"3470360912","3470360927","US" +"3470360928","3470360935","CA" +"3470360936","3470361039","US" +"3470361040","3470361055","SE" +"3470361056","3470361471","US" +"3470361472","3470361479","JP" +"3470361480","3470361663","US" +"3470361664","3470361671","CA" +"3470361672","3470361703","US" +"3470361704","3470361711","AF" +"3470361712","3470361771","US" +"3470361772","3470361775","AE" +"3470361776","3470362099","US" +"3470362100","3470362103","AE" +"3470362104","3470362119","US" +"3470362120","3470362127","AU" +"3470362128","3470362159","US" +"3470362160","3470362167","AF" +"3470362168","3470362263","US" +"3470362264","3470362271","NZ" +"3470362272","3470362355","US" +"3470362356","3470362359","AU" +"3470362360","3470362543","US" +"3470362544","3470362559","SE" +"3470362560","3470362623","CA" +"3470362624","3470362731","US" +"3470362732","3470362735","AE" +"3470362736","3470362895","US" +"3470362896","3470362911","AU" +"3470362912","3470363535","US" +"3470363536","3470363543","CA" +"3470363544","3470363551","US" +"3470363552","3470363555","AF" +"3470363556","3470363615","US" +"3470363616","3470363631","ES" +"3470363632","3470363759","US" +"3470363760","3470363767","CA" +"3470363768","3470363903","US" +"3470363904","3470363919","CA" +"3470363920","3470363967","US" +"3470363968","3470363983","CA" +"3470363984","3470364095","US" +"3470364096","3470364103","AU" +"3470364104","3470364255","US" +"3470364256","3470364287","IN" +"3470364288","3470364415","US" +"3470364416","3470364479","CA" +"3470364480","3470364559","US" +"3470364560","3470364575","HN" +"3470364576","3470458879","US" +"3470458880","3470475263","KR" +"3470475264","3470509311","US" +"3470509312","3470509567","CA" +"3470509568","3470558207","US" +"3470558208","3470559231","HK" +"3470559232","3470573567","US" +"3470573568","3470575615","CA" +"3470575616","3470610431","US" +"3470610432","3470614527","BR" +"3470614528","3470643615","US" +"3470643616","3470643631","CA" +"3470643632","3470643647","US" +"3470643648","3470643711","CA" +"3470643712","3470645511","US" +"3470645512","3470645519","GB" +"3470645520","3470645527","FR" +"3470645528","3470645567","US" +"3470645568","3470645575","CA" +"3470645576","3470645583","US" +"3470645584","3470645591","FR" +"3470645592","3470645623","US" +"3470645624","3470645631","BR" +"3470645632","3470645655","US" +"3470645656","3470645663","RU" +"3470645664","3470645687","US" +"3470645688","3470645695","ES" +"3470645696","3470645703","NL" +"3470645704","3470645731","US" +"3470645732","3470645735","AU" +"3470645736","3470645739","CN" +"3470645740","3470645743","US" +"3470645744","3470645747","ES" +"3470645748","3470645751","US" +"3470645752","3470645759","BR" +"3470645760","3470645791","US" +"3470645792","3470645799","CN" +"3470645800","3470646015","US" +"3470646016","3470646019","BR" +"3470646020","3470646055","US" +"3470646056","3470646063","ES" +"3470646064","3470646087","US" +"3470646088","3470646095","ES" +"3470646096","3470646103","US" +"3470646104","3470646119","BR" +"3470646120","3470646135","US" +"3470646136","3470646143","AU" +"3470646144","3470646151","CA" +"3470646152","3470646159","AU" +"3470646160","3470646167","US" +"3470646168","3470646175","BR" +"3470646176","3470646215","US" +"3470646216","3470646223","BR" +"3470646224","3470646231","IL" +"3470646232","3470646239","US" +"3470646240","3470646247","IL" +"3470646248","3470646255","DE" +"3470646256","3470646263","AU" +"3470646264","3470646271","AR" +"3470646272","3470646359","US" +"3470646360","3470646367","ZA" +"3470646368","3470646375","US" +"3470646376","3470646383","BR" +"3470646384","3470646415","US" +"3470646416","3470646423","CA" +"3470646424","3470646431","FR" +"3470646432","3470646487","US" +"3470646488","3470646495","PL" +"3470646496","3470646503","BR" +"3470646504","3470646511","US" +"3470646512","3470646519","BR" +"3470646520","3470646527","US" +"3470646528","3470646543","FR" +"3470646544","3470646567","US" +"3470646568","3470646575","BR" +"3470646576","3470646583","US" +"3470646584","3470646591","LK" +"3470646592","3470646599","CN" +"3470646600","3470646607","US" +"3470646608","3470646623","ZA" +"3470646624","3470646631","DE" +"3470646632","3470646639","BR" +"3470646640","3470646703","US" +"3470646704","3470646711","CN" +"3470646712","3470646719","UY" +"3470646720","3470646727","US" +"3470646728","3470646735","GB" +"3470646736","3470646743","US" +"3470646744","3470646751","BR" +"3470646752","3470646767","FR" +"3470646768","3470646775","US" +"3470646776","3470646783","IT" +"3470646784","3470646791","US" +"3470646792","3470646799","CZ" +"3470646800","3470646807","BR" +"3470646808","3470646831","US" +"3470646832","3470646847","IL" +"3470646848","3470646983","US" +"3470646984","3470646991","AR" +"3470646992","3470646999","CN" +"3470647000","3470651391","US" +"3470651392","3470655487","CA" +"3470655488","3470656063","US" +"3470656064","3470656095","IL" +"3470656096","3470656383","US" +"3470656384","3470656415","IL" +"3470656416","3470657095","US" +"3470657096","3470657103","IN" +"3470657104","3470657695","US" +"3470657696","3470657711","RU" +"3470657712","3470658599","US" +"3470658600","3470658607","JP" +"3470658608","3470658615","US" +"3470658616","3470658623","ZA" +"3470658624","3470658751","US" +"3470658752","3470658759","IE" +"3470658760","3470659183","US" +"3470659184","3470659191","BE" +"3470659192","3470659199","US" +"3470659200","3470659207","TR" +"3470659208","3470659471","US" +"3470659472","3470659487","ES" +"3470659488","3470659519","IL" +"3470659520","3470659567","US" +"3470659568","3470659575","BR" +"3470659576","3470659735","US" +"3470659736","3470659743","AU" +"3470659744","3470659951","US" +"3470659952","3470659959","MY" +"3470659960","3470659967","IN" +"3470659968","3470660079","US" +"3470660080","3470660087","CA" +"3470660088","3470660103","US" +"3470660104","3470660111","HK" +"3470660112","3470660223","US" +"3470660224","3470660255","PH" +"3470660256","3470660647","US" +"3470660648","3470660655","IE" +"3470660656","3470661167","US" +"3470661168","3470661175","IE" +"3470661176","3470661191","US" +"3470661192","3470661207","CA" +"3470661208","3470661215","US" +"3470661216","3470661223","IN" +"3470661224","3470661231","US" +"3470661232","3470661239","ES" +"3470661240","3470661319","US" +"3470661320","3470661327","BD" +"3470661328","3470661727","US" +"3470661728","3470661735","AU" +"3470661736","3470662167","US" +"3470662168","3470662175","IL" +"3470662176","3470662183","CN" +"3470662184","3470662663","US" +"3470662664","3470662671","AE" +"3470662672","3470662863","US" +"3470662864","3470662871","IN" +"3470662872","3470662911","US" +"3470662912","3470662919","GB" +"3470662920","3470663055","US" +"3470663056","3470663063","NL" +"3470663064","3470663095","US" +"3470663096","3470663103","GB" +"3470663104","3470663119","US" +"3470663120","3470663127","VE" +"3470663128","3470663287","US" +"3470663288","3470663295","TH" +"3470663296","3470663311","IE" +"3470663312","3470671871","US" +"3470671872","3470680063","CA" +"3470680064","3470744063","US" +"3470744064","3470744575","CA" +"3470744576","3470745855","US" +"3470745856","3470746111","CA" +"3470746112","3470749951","US" +"3470749952","3470750207","CA" +"3470750208","3470752767","US" +"3470752768","3470753023","CO" +"3470753024","3470754303","US" +"3470754304","3470754559","PE" +"3470754560","3470755839","US" +"3470755840","3470756095","ZA" +"3470756096","3470761983","US" +"3470761984","3470762751","CA" +"3470762752","3470762759","NL" +"3470762760","3470767871","CA" +"3470767872","3470768127","IE" +"3470768128","3470770175","CA" +"3470770176","3470778367","US" +"3470778368","3470786559","CA" +"3470786560","3470794751","US" +"3470794752","3470802943","PA" +"3470802944","3470873288","US" +"3470873289","3470873296","MX" +"3470873297","3470875817","US" +"3470875818","3470875827","JP" +"3470875828","3470876402","US" +"3470876403","3470876410","IN" +"3470876411","3470884863","US" +"3470884864","3470885887","HK" +"3470885888","3471057919","US" +"3471057920","3471058943","VE" +"3471058944","3471059455","US" +"3471059456","3471060223","ES" +"3471060224","3471060991","US" +"3471060992","3471061247","NL" +"3471061248","3471061503","US" +"3471061504","3471061759","NL" +"3471061760","3471262719","US" +"3471262720","3471263743","EC" +"3471263744","3471265791","CO" +"3471265792","3471529215","US" +"3471529216","3471529983","CA" +"3471529984","3471558655","US" +"3471558656","3471560703","CA" +"3471560704","3471570943","US" +"3471570944","3471572991","CA" +"3471572992","3472375807","US" +"3472375808","3472392191","PR" +"3472392192","3472408575","CA" +"3472408576","3472990207","US" +"3472990208","3472990463","AS" +"3472990464","3473039359","US" +"3473039360","3473040639","BM" +"3473040640","3473040895","US" +"3473040896","3473041407","BM" +"3473041408","3473096192","US" +"3473096193","3473096447","PH" +"3473096448","3473276927","US" +"3473276928","3473342463","CA" +"3473342464","3473375495","US" +"3473375496","3473375503","NZ" +"3473375504","3473381311","US" +"3473381312","3473381343","DE" +"3473381344","3473703551","US" +"3473703552","3473703679","CA" +"3473703680","3473755391","US" +"3473755392","3473755647","HN" +"3473755648","3473765887","US" +"3473765888","3473766399","EC" +"3473766400","3473786111","US" +"3473786112","3473786127","PR" +"3473786128","3473813567","US" +"3473813568","3473813599","CA" +"3473813600","3473901055","US" +"3473901056","3473901311","EC" +"3473901312","3473917439","US" +"3473917440","3473917695","PR" +"3473917696","3474046463","US" +"3474046464","3474046975","MX" +"3474046976","3474053119","US" +"3474053120","3474055167","PE" +"3474055168","3474193407","US" +"3474193408","3474193663","PH" +"3474193664","3474193919","US" +"3474193920","3474194431","PH" +"3474194432","3474362783","US" +"3474362784","3474362815","AU" +"3474362816","3474363647","US" +"3474363648","3474363687","GB" +"3474363688","3474363695","US" +"3474363696","3474363711","GB" +"3474363712","3474391039","US" +"3474391040","3474456575","CA" +"3474456576","3474463071","US" +"3474463072","3474463087","GB" +"3474463088","3474463183","US" +"3474463184","3474463199","GB" +"3474463200","3474463231","US" +"3474463232","3474463487","GB" +"3474463488","3474463791","US" +"3474463792","3474463807","GB" +"3474463808","3474463855","US" +"3474463856","3474463871","GB" +"3474463872","3474463903","US" +"3474463904","3474463919","GB" +"3474463920","3474464255","US" +"3474464256","3474464767","GB" +"3474464768","3474548223","US" +"3474548224","3474548479","JP" +"3474548480","3474623599","US" +"3474623600","3474623615","CA" +"3474623616","3475112191","US" +"3475112192","3475113215","CA" +"3475113216","3475115007","US" +"3475115008","3475120127","CA" +"3475120128","3475124223","US" +"3475124224","3475243007","CA" +"3475243008","3475296461","US" +"3475296462","3475296462","AE" +"3475296463","3475406527","US" +"3475406528","3475406591","BR" +"3475406592","3475589887","US" +"3475589888","3475590143","EC" +"3475590144","3475670015","US" +"3475670016","3475670047","AG" +"3475670048","3475670079","KN" +"3475670080","3475670175","AG" +"3475670176","3475670207","KN" +"3475670208","3475670271","AG" +"3475670272","3475670527","AI" +"3475670528","3475670783","LC" +"3475670784","3475670847","DM" +"3475670848","3475671039","AG" +"3475671040","3475681279","US" +"3475681280","3475685375","HN" +"3475685376","3475719231","US" +"3475719232","3475719295","PR" +"3475719296","3475745503","US" +"3475745504","3475745535","CA" +"3475745536","3475752703","US" +"3475752704","3475752959","AN" +"3475752960","3475813423","US" +"3475813424","3475813679","A1" +"3475813680","3475881983","US" +"3475881984","3475883007","CA" +"3475883008","3475883039","US" +"3475883040","3475883487","CA" +"3475883488","3475883519","US" +"3475883520","3475884031","CA" +"3475884032","3475884287","US" +"3475884288","3475884319","CA" +"3475884320","3475884327","US" +"3475884328","3475885119","CA" +"3475885120","3475885135","US" +"3475885136","3475888127","CA" +"3475888128","3475888383","US" +"3475888384","3475890175","CA" +"3475890176","3475896319","US" +"3475896320","3475896575","FR" +"3475896576","3475896831","EU" +"3475896832","3475897471","US" +"3475897472","3475897503","FR" +"3475897504","3475911167","US" +"3475911168","3475911237","AP" +"3475911238","3475911239","IN" +"3475911240","3475911423","AP" +"3475911424","3475912447","US" +"3475912448","3475912703","IN" +"3475912704","3475921151","US" +"3475921152","3475921407","JP" +"3475921408","3475996671","US" +"3475996672","3476029439","CA" +"3476029440","3476041567","US" +"3476041568","3476041583","MX" +"3476041584","3476076319","US" +"3476076320","3476076351","JO" +"3476076352","3476111359","US" +"3476111360","3476111871","CA" +"3476111872","3476265855","US" +"3476265856","3476265919","EG" +"3476265920","3476348927","US" +"3476348928","3476349183","CA" +"3476349184","3476421631","US" +"3476421632","3476421887","AZ" +"3476421888","3476422143","US" +"3476422144","3476422655","AZ" +"3476422656","3476447231","US" +"3476447232","3476451343","CA" +"3476451344","3476451375","US" +"3476451376","3476455423","CA" +"3476455424","3476718616","US" +"3476718617","3476718617","IN" +"3476718618","3476720125","US" +"3476720126","3476720126","GB" +"3476720127","3476720363","US" +"3476720364","3476720367","LV" +"3476720368","3476721159","US" +"3476721160","3476721167","IT" +"3476721168","3476721319","US" +"3476721320","3476721327","GB" +"3476721328","3476721679","US" +"3476721680","3476721687","IT" +"3476721688","3476721743","US" +"3476721744","3476721759","CA" +"3476721760","3476721823","US" +"3476721824","3476721831","GB" +"3476721832","3476721895","US" +"3476721896","3476721903","CA" +"3476721904","3476721911","AU" +"3476721912","3476722191","US" +"3476722192","3476722207","BE" +"3476722208","3476722239","IT" +"3476722240","3476722255","SA" +"3476722256","3476722287","US" +"3476722288","3476722319","IT" +"3476722320","3476722495","US" +"3476722496","3476722511","AU" +"3476722512","3476722527","US" +"3476722528","3476722543","AU" +"3476722544","3476722591","US" +"3476722592","3476722607","GB" +"3476722608","3476722719","US" +"3476722720","3476722727","CO" +"3476722728","3476722759","US" +"3476722760","3476722767","IN" +"3476722768","3476723263","US" +"3476723264","3476723271","NL" +"3476723272","3476723670","US" +"3476723671","3476723674","GB" +"3476723675","3476725183","US" +"3476725184","3476725215","ZA" +"3476725216","3476725247","US" +"3476725248","3476725255","CA" +"3476725256","3476725295","US" +"3476725296","3476725303","CA" +"3476725304","3476725351","US" +"3476725352","3476725359","NL" +"3476725360","3476725367","US" +"3476725368","3476725375","CA" +"3476725376","3476725399","US" +"3476725400","3476725415","CA" +"3476725416","3476725423","US" +"3476725424","3476725431","GB" +"3476725432","3476731909","US" +"3476731910","3476731913","IN" +"3476731914","3476732049","US" +"3476732050","3476732053","IN" +"3476732054","3476732073","US" +"3476732074","3476732077","IN" +"3476732078","3476732113","US" +"3476732114","3476732117","IN" +"3476732118","3476881407","US" +"3476881408","3476946943","CA" +"3476946944","3477161503","US" +"3477161504","3477161519","TN" +"3477161520","3477161551","US" +"3477161552","3477161567","TN" +"3477161568","3477161615","US" +"3477161616","3477161623","TN" +"3477161624","3477311871","US" +"3477311872","3477312255","A1" +"3477312256","3477312511","US" +"3477312512","3477313023","A1" +"3477313024","3477313279","US" +"3477313280","3477313535","A1" +"3477313536","3478114303","US" +"3478114304","3478118399","PE" +"3478118400","3478192127","US" +"3478192128","3478257663","CA" +"3478257664","3478261855","US" +"3478261856","3478261887","SG" +"3478261888","3478261903","US" +"3478261904","3478261935","SG" +"3478261936","3478262271","US" +"3478262272","3478262279","SG" +"3478262280","3478262655","US" +"3478262656","3478262671","SG" +"3478262672","3478294527","US" +"3478294528","3478294543","GB" +"3478294544","3478323391","US" +"3478323392","3478323399","CA" +"3478323400","3478331519","US" +"3478331520","3478331647","GB" +"3478331648","3478332991","US" +"3478332992","3478332999","CA" +"3478333000","3478347903","US" +"3478347904","3478348031","MX" +"3478348032","3478351951","US" +"3478351952","3478351967","GB" +"3478351968","3478352111","US" +"3478352112","3478352119","GB" +"3478352120","3478364159","US" +"3478364160","3478364167","BR" +"3478364168","3478364191","US" +"3478364192","3478364223","BR" +"3478364224","3478364255","US" +"3478364256","3478364271","BR" +"3478364272","3478372351","US" +"3478372352","3478380543","MX" +"3478380544","3479207935","US" +"3479207936","3479240703","CA" +"3479240704","3479289919","US" +"3479289920","3479289951","BD" +"3479289952","3479290063","US" +"3479290064","3479290071","MX" +"3479290072","3479290087","US" +"3479290088","3479290095","LC" +"3479290096","3479290207","US" +"3479290208","3479290239","BD" +"3479290240","3479290351","US" +"3479290352","3479290359","IN" +"3479290360","3479290367","US" +"3479290368","3479290431","BD" +"3479290432","3479290487","US" +"3479290488","3479290495","GB" +"3479290496","3479290631","US" +"3479290632","3479290639","GB" +"3479290640","3479290743","US" +"3479290744","3479290751","EC" +"3479290752","3479290767","US" +"3479290768","3479290783","CA" +"3479290784","3479290869","US" +"3479290870","3479290871","CA" +"3479290872","3479291071","US" +"3479291072","3479291087","CA" +"3479291088","3479291263","US" +"3479291264","3479291287","CA" +"3479291288","3479291671","US" +"3479291672","3479291679","CA" +"3479291680","3479291687","AU" +"3479291688","3479291695","US" +"3479291696","3479291703","AU" +"3479291704","3479291831","US" +"3479291832","3479291847","AU" +"3479291848","3479291855","JM" +"3479291856","3479291871","US" +"3479291872","3479291879","CA" +"3479291880","3479292007","US" +"3479292008","3479292015","CA" +"3479292016","3479292223","US" +"3479292224","3479292231","UY" +"3479292232","3479292239","IN" +"3479292240","3479292671","US" +"3479292672","3479292687","AU" +"3479292688","3479292735","US" +"3479292736","3479292751","BD" +"3479292752","3479292815","US" +"3479292816","3479292823","IL" +"3479292824","3479293007","US" +"3479293008","3479293023","AU" +"3479293024","3479293311","US" +"3479293312","3479293319","CA" +"3479293320","3479293583","US" +"3479293584","3479293591","GB" +"3479293592","3479294031","US" +"3479294032","3479294039","BD" +"3479294040","3479294223","US" +"3479294224","3479294231","TH" +"3479294232","3479294401","US" +"3479294402","3479294403","BG" +"3479294404","3479294419","US" +"3479294420","3479294423","CA" +"3479294424","3479294425","US" +"3479294426","3479294427","CA" +"3479294428","3479294487","US" +"3479294488","3479294495","MX" +"3479294496","3479294527","US" +"3479294528","3479294543","BD" +"3479294544","3479294663","US" +"3479294664","3479294671","AU" +"3479294672","3479294775","US" +"3479294776","3479294783","CA" +"3479294784","3479295015","US" +"3479295016","3479295023","MY" +"3479295024","3479295071","US" +"3479295072","3479295079","CR" +"3479295080","3479295103","US" +"3479295104","3479295111","CA" +"3479295112","3479295359","US" +"3479295360","3479295367","AU" +"3479295368","3479295519","US" +"3479295520","3479295527","CA" +"3479295528","3479295583","US" +"3479295584","3479295591","NL" +"3479295592","3479295703","US" +"3479295704","3479295735","MY" +"3479295736","3479295767","US" +"3479295768","3479295775","MY" +"3479295776","3479296007","US" +"3479296008","3479296015","CA" +"3479296016","3479296079","US" +"3479296080","3479296095","MY" +"3479296096","3479296319","US" +"3479296320","3479296335","BD" +"3479296336","3479296607","US" +"3479296608","3479296615","BM" +"3479296616","3479296631","US" +"3479296632","3479296639","JP" +"3479296640","3479296671","US" +"3479296672","3479296679","NL" +"3479296680","3479296759","US" +"3479296760","3479296763","IL" +"3479296764","3479297615","US" +"3479297616","3479297623","CA" +"3479297624","3479298047","US" +"3479298048","3479298063","IS" +"3479298064","3479298079","GB" +"3479298080","3479298103","US" +"3479298104","3479298111","BM" +"3479298112","3479298199","US" +"3479298200","3479298207","BM" +"3479298208","3479298319","US" +"3479298320","3479298327","IN" +"3479298328","3479298399","US" +"3479298400","3479298407","IN" +"3479298408","3479298463","US" +"3479298464","3479298471","CA" +"3479298472","3479298591","US" +"3479298592","3479298599","AU" +"3479298600","3479298759","US" +"3479298760","3479298767","CA" +"3479298768","3479301127","US" +"3479301128","3479301135","GB" +"3479301136","3479301183","US" +"3479301184","3479301191","GB" +"3479301192","3479301287","US" +"3479301288","3479301295","IL" +"3479301296","3479301455","US" +"3479301456","3479301463","IN" +"3479301464","3479301519","US" +"3479301520","3479301535","TH" +"3479301536","3479301551","CA" +"3479301552","3479301579","US" +"3479301580","3479301583","IN" +"3479301584","3479301663","US" +"3479301664","3479301679","NL" +"3479301680","3479301687","US" +"3479301688","3479301695","NZ" +"3479301696","3479301775","US" +"3479301776","3479301783","IN" +"3479301784","3479303759","US" +"3479303760","3479303767","ZA" +"3479303768","3479303951","US" +"3479303952","3479303959","NL" +"3479303960","3479303967","US" +"3479303968","3479303975","NL" +"3479303976","3479303983","US" +"3479303984","3479303991","CA" +"3479303992","3479304319","US" +"3479304320","3479304327","JM" +"3479304328","3479304447","US" +"3479304448","3479304455","IL" +"3479304456","3479304463","MX" +"3479304464","3479304863","US" +"3479304864","3479304871","PK" +"3479304872","3479305175","US" +"3479305176","3479305183","BM" +"3479305184","3479305215","US" +"3479305216","3479305231","EG" +"3479305232","3479305271","US" +"3479305272","3479305279","IN" +"3479305280","3479305583","US" +"3479305584","3479305599","BD" +"3479305600","3479305983","US" +"3479305984","3479306015","CA" +"3479306016","3479306031","US" +"3479306032","3479306039","PK" +"3479306040","3479306079","US" +"3479306080","3479306087","BD" +"3479306088","3479568383","US" +"3479568384","3479633919","CA" +"3479633920","3479789343","US" +"3479789344","3479789360","UY" +"3479789361","3479896063","US" +"3479896064","3479956479","CA" +"3479956480","3479956735","US" +"3479956736","3479961599","CA" +"3479961600","3480223743","US" +"3480223744","3480226415","CA" +"3480226416","3480226423","US" +"3480226424","3480226959","CA" +"3480226960","3480226967","US" +"3480226968","3480227455","CA" +"3480227456","3480227463","US" +"3480227464","3480251007","CA" +"3480251008","3480251071","US" +"3480251072","3480256511","CA" +"3480256512","3480284159","US" +"3480284160","3480284671","CA" +"3480284672","3480444927","US" +"3480444928","3480446231","CA" +"3480446232","3480446239","US" +"3480446240","3480446335","CA" +"3480446336","3480446463","US" +"3480446464","3480446575","CA" +"3480446576","3480446583","ES" +"3480446584","3480449023","CA" +"3480449024","3480551423","US" +"3480551424","3480551679","JP" +"3480551680","3480551935","DE" +"3480551936","3480552191","GB" +"3480552192","3480552447","US" +"3480552448","3480552703","CH" +"3480552704","3480552959","US" +"3480552960","3480553215","AT" +"3480553216","3480553343","US" +"3480553344","3480553470","MX" +"3480553471","3480553471","US" +"3480553472","3480553727","SG" +"3480553728","3480553983","HK" +"3480553984","3480554239","US" +"3480554240","3480554495","GB" +"3480554496","3480554751","SG" +"3480554752","3480555263","US" +"3480555264","3480555519","NO" +"3480555520","3480555775","FR" +"3480555776","3480556287","SG" +"3480556288","3480556543","HK" +"3480556544","3480557055","US" +"3480557056","3480557311","HK" +"3480557312","3480557567","US" +"3480557568","3480557823","JP" +"3480557824","3480558079","CA" +"3480558080","3480558591","US" +"3480558592","3480558847","DO" +"3480558848","3480559359","US" +"3480559360","3480559615","IT" +"3480559616","3480560895","US" +"3480560896","3480561151","BR" +"3480561152","3480561919","US" +"3480561920","3480562175","JP" +"3480562176","3480562751","US" +"3480562752","3480562815","PR" +"3480562816","3480564735","US" +"3480564736","3480564991","DE" +"3480564992","3480567039","US" +"3480567040","3480567551","GB" +"3480567552","3480568319","US" +"3480568320","3480568575","HK" +"3480568576","3480568671","IT" +"3480568672","3480568703","GB" +"3480568704","3480568831","FR" +"3480568832","3480569599","US" +"3480569600","3480569855","HK" +"3480569856","3480570111","US" +"3480570112","3480570367","FR" +"3480570368","3480570623","ES" +"3480570624","3480570879","JP" +"3480570880","3480571391","CH" +"3480571392","3480571647","BE" +"3480571648","3480571775","FI" +"3480571776","3480573567","US" +"3480573568","3480573631","IT" +"3480573632","3480573695","DE" +"3480573696","3480574527","US" +"3480574528","3480574591","NL" +"3480574592","3480575231","US" +"3480575232","3480575487","IL" +"3480575488","3480575743","US" +"3480575744","3480577023","IT" +"3480577024","3480579711","US" +"3480579712","3480579775","BG" +"3480579776","3480579839","AU" +"3480579840","3480580607","US" +"3480580608","3480580863","SE" +"3480580864","3480581119","DK" +"3480581120","3480581247","US" +"3480581248","3480581375","NL" +"3480581376","3480581631","US" +"3480581632","3480581887","CL" +"3480581888","3480582143","NO" +"3480582144","3480582399","US" +"3480582400","3480582655","RU" +"3480582656","3480583423","MX" +"3480583424","3480585599","US" +"3480585600","3480585663","ES" +"3480585664","3480587647","US" +"3480587648","3480587775","PT" +"3480587776","3480588799","US" +"3480588800","3480589055","SE" +"3480589056","3480590463","US" +"3480590464","3480590591","FR" +"3480590592","3480591103","US" +"3480591104","3480591359","ZA" +"3480591360","3480591423","US" +"3480591424","3480591487","GR" +"3480591488","3480591615","US" +"3480591616","3480592127","ID" +"3480592128","3480592383","NO" +"3480592384","3480592639","CH" +"3480592640","3480592895","IE" +"3480592896","3480593151","SG" +"3480593152","3480593407","DK" +"3480593408","3480593663","SG" +"3480593664","3480593919","CN" +"3480593920","3480594175","ZA" +"3480594176","3480594431","BE" +"3480594432","3480595711","US" +"3480595712","3480595967","TH" +"3480595968","3480596991","SG" +"3480596992","3480597247","US" +"3480597248","3480598271","AU" +"3480598272","3480598527","FR" +"3480598528","3480599039","AU" +"3480599040","3480599295","JP" +"3480599296","3480599551","CA" +"3480599552","3480599807","SG" +"3480599808","3480600575","US" +"3480600576","3480601087","DE" +"3480601088","3480601343","BE" +"3480601344","3480601599","AU" +"3480601600","3480601855","GB" +"3480601856","3480602111","FR" +"3480602112","3480602879","US" +"3480602880","3480603647","IT" +"3480603648","3480603903","BE" +"3480603904","3480604159","HK" +"3480604160","3480604671","ES" +"3480604672","3480604927","IL" +"3480604928","3480605183","GB" +"3480605184","3480605439","MX" +"3480605440","3480605695","PH" +"3480605696","3480605951","MX" +"3480605952","3480606207","PH" +"3480606208","3480606463","MX" +"3480606464","3480606719","BE" +"3480606720","3480606975","GR" +"3480606976","3480607231","US" +"3480607232","3480607487","IT" +"3480607488","3480610303","US" +"3480610304","3480610559","ES" +"3480610560","3480610815","US" +"3480610816","3480610943","AU" +"3480610944","3480611071","HU" +"3480611072","3480611327","US" +"3480611328","3480611583","JP" +"3480611584","3480611839","MX" +"3480611840","3480612095","BR" +"3480612096","3480612351","LU" +"3480612352","3480613631","DE" +"3480613632","3480839423","US" +"3480839424","3480839935","GB" +"3480839936","3480907263","US" +"3480907264","3480907775","FR" +"3480907776","3480968191","US" +"3480968192","3480968447","AU" +"3480968448","3481182503","US" +"3481182504","3481182511","CA" +"3481182512","3481665535","US" +"3481665536","3481731071","CA" +"3481731072","3481812991","US" +"3481812992","3481822063","CA" +"3481822064","3481822079","US" +"3481822080","3481829375","CA" +"3481829376","3481951395","US" +"3481951396","3481951399","GB" +"3481951400","3481964575","US" +"3481964576","3481964579","IE" +"3481964580","3481993215","US" +"3481993216","3481993783","CA" +"3481993784","3481993791","US" +"3481993792","3481995279","CA" +"3481995280","3481995287","US" +"3481995288","3481995303","CA" +"3481995304","3481995311","US" +"3481995312","3481995519","CA" +"3481995520","3481995527","US" +"3481995528","3481995543","CA" +"3481995544","3481995551","US" +"3481995552","3481998591","CA" +"3481998592","3481998847","AG" +"3481998848","3482014079","CA" +"3482014080","3482014207","AG" +"3482014208","3482018815","CA" +"3482018816","3482019071","US" +"3482019072","3482022783","CA" +"3482022784","3482022847","US" +"3482022848","3482043735","CA" +"3482043736","3482043743","US" +"3482043744","3482048191","CA" +"3482048192","3482048255","US" +"3482048256","3482058751","CA" +"3482058752","3482583039","US" +"3482583040","3482632191","CA" +"3482632192","3482775551","US" +"3482775552","3482778375","PR" +"3482778376","3482778383","US" +"3482778384","3482779647","PR" +"3482779648","3482910719","US" +"3482910720","3482927103","CA" +"3482927104","3483239423","US" +"3483239424","3483239679","A1" +"3483239680","3483240703","US" +"3483240704","3483240959","A1" +"3483240960","3483247359","US" +"3483247360","3483247871","A1" +"3483247872","3483296004","US" +"3483296005","3483296005","BE" +"3483296006","3483435007","US" +"3483435008","3483533311","CA" +"3483533312","3483552511","US" +"3483552512","3483552607","GB" +"3483552608","3483631615","US" +"3483631616","3483697151","CA" +"3483697152","3483791375","US" +"3483791376","3483791407","PR" +"3483791408","3483791423","US" +"3483791424","3483791431","PR" +"3483791432","3483791471","US" +"3483791472","3483791479","PR" +"3483791480","3483791495","US" +"3483791496","3483791503","PR" +"3483791504","3483791511","US" +"3483791512","3483791519","PR" +"3483791520","3483791535","US" +"3483791536","3483791543","PR" +"3483791544","3483791551","US" +"3483791552","3483791599","PR" +"3483791600","3483791607","US" +"3483791608","3483791623","PR" +"3483791624","3483791631","US" +"3483791632","3483791639","PR" +"3483791640","3483791647","US" +"3483791648","3483791663","PR" +"3483791664","3483791679","US" +"3483791680","3483791695","PR" +"3483791696","3483791743","US" +"3483791744","3483791751","PR" +"3483791752","3483791767","US" +"3483791768","3483791799","PR" +"3483791800","3483791823","US" +"3483791824","3483791831","PR" +"3483791832","3483791855","US" +"3483791856","3483791887","PR" +"3483791888","3483791895","US" +"3483791896","3483791951","PR" +"3483791952","3483791967","US" +"3483791968","3483791983","PR" +"3483791984","3483791999","US" +"3483792000","3483792015","PR" +"3483792016","3483792031","IL" +"3483792032","3483792047","PR" +"3483792048","3483792079","US" +"3483792080","3483792111","PR" +"3483792112","3483792119","US" +"3483792120","3483795455","PR" +"3483795456","3483828223","US" +"3483828224","3483836415","CA" +"3483836416","3483877375","US" +"3483877376","3483893759","CA" +"3483893760","3484006911","US" +"3484006912","3484007167","AU" +"3484007168","3484013055","US" +"3484013056","3484013567","DE" +"3484013568","3484319743","US" +"3484320256","3484320511","US" +"3484321792","3484322047","PR" +"3484322048","3484323839","US" +"3484326912","3484327423","US" +"3484327936","3484419583","US" +"3484419584","3484419839","A2" +"3484419840","3484419847","DM" +"3484419848","3484419855","US" +"3484419856","3484419967","DM" +"3484419968","3484419983","US" +"3484419984","3484420031","DM" +"3484420032","3484424255","US" +"3484424256","3484424287","DM" +"3484424288","3484424319","US" +"3484424320","3484424447","DM" +"3484424448","3484437503","US" +"3484437504","3484442623","GB" +"3484442624","3484450815","US" +"3484450816","3484451839","CA" +"3484451840","3484451871","US" +"3484451872","3484453695","CA" +"3484453696","3484453759","US" +"3484453760","3484455263","CA" +"3484455264","3484455295","US" +"3484455296","3484455807","CA" +"3484455808","3484455871","US" +"3484455872","3484456191","CA" +"3484456192","3484456703","US" +"3484456704","3484457727","CA" +"3484457728","3484457983","US" +"3484457984","3484458783","CA" +"3484458784","3484458791","US" +"3484458792","3484458807","CA" +"3484458808","3484458815","US" +"3484458816","3484458887","CA" +"3484458888","3484458903","US" +"3484458904","3484458911","CA" +"3484458912","3484458919","US" +"3484458920","3484458959","CA" +"3484458960","3484458967","US" +"3484458968","3484459791","CA" +"3484459792","3484459807","US" +"3484459808","3484459823","CA" +"3484459824","3484459839","US" +"3484459840","3484459855","CA" +"3484459856","3484459871","US" +"3484459872","3484459887","CA" +"3484459888","3484459919","US" +"3484459920","3484459967","CA" +"3484459968","3484459999","US" +"3484460000","3484460015","CA" +"3484460016","3484460031","US" +"3484460032","3484460287","CA" +"3484460288","3484460543","US" +"3484460544","3484460575","CA" +"3484460576","3484460591","US" +"3484460592","3484460703","CA" +"3484460704","3484460719","US" +"3484460720","3484460783","CA" +"3484460784","3484460799","US" +"3484460800","3484461079","CA" +"3484461080","3484461095","US" +"3484461096","3484461103","CA" +"3484461104","3484461111","US" +"3484461112","3484461119","CA" +"3484461120","3484461135","US" +"3484461136","3484461143","CA" +"3484461144","3484461199","US" +"3484461200","3484461231","CA" +"3484461232","3484461263","US" +"3484461264","3484461271","CA" +"3484461272","3484461279","US" +"3484461280","3484461375","CA" +"3484461376","3484461439","US" +"3484461440","3484461503","CA" +"3484461504","3484461631","US" +"3484461632","3484461759","CA" +"3484461760","3484461823","US" +"3484461824","3484462103","CA" +"3484462104","3484462143","US" +"3484462144","3484462159","CA" +"3484462160","3484462175","US" +"3484462176","3484462207","CA" +"3484462208","3484462215","US" +"3484462216","3484462279","CA" +"3484462280","3484462295","US" +"3484462296","3484462975","CA" +"3484462976","3484463039","US" +"3484463040","3484463151","CA" +"3484463152","3484463183","US" +"3484463184","3484464143","CA" +"3484464144","3484464159","US" +"3484464160","3484464175","CA" +"3484464176","3484464191","US" +"3484464192","3484464223","CA" +"3484464224","3484464287","US" +"3484464288","3484464303","CA" +"3484464304","3484464319","US" +"3484464320","3484464335","CA" +"3484464336","3484464383","US" +"3484464384","3484464703","CA" +"3484464704","3484464735","US" +"3484464736","3484465151","CA" +"3484465152","3484465407","US" +"3484465408","3484466431","CA" +"3484466432","3484466687","US" +"3484466688","3484468287","CA" +"3484468288","3484468479","US" +"3484468480","3484469119","CA" +"3484469120","3484469247","US" +"3484469248","3484469759","CA" +"3484469760","3484469791","US" +"3484469792","3484469887","CA" +"3484469888","3484469951","US" +"3484469952","3484470527","CA" +"3484470528","3484471295","US" +"3484471296","3484471551","CA" +"3484471552","3484471807","US" +"3484471808","3484472135","CA" +"3484472136","3484472167","US" +"3484472168","3484472183","CA" +"3484472184","3484472199","US" +"3484472200","3484472223","CA" +"3484472224","3484472279","US" +"3484472280","3484472839","CA" +"3484472840","3484472855","US" +"3484472856","3484473007","CA" +"3484473008","3484473015","US" +"3484473016","3484473023","CA" +"3484473024","3484473031","US" +"3484473032","3484473047","CA" +"3484473048","3484473055","US" +"3484473056","3484473087","CA" +"3484473088","3484473151","US" +"3484473152","3484473599","CA" +"3484473600","3484473727","US" +"3484473728","3484473791","CA" +"3484473792","3484473855","US" +"3484473856","3484477183","CA" +"3484477184","3484477695","US" +"3484477696","3484478207","CA" +"3484478208","3484478719","US" +"3484478720","3484478975","CA" +"3484478976","3484479231","US" +"3484479232","3484479487","CA" +"3484479488","3484479743","US" +"3484479744","3484479999","CA" +"3484480000","3484480255","US" +"3484480256","3484481279","CA" +"3484481280","3484481343","US" +"3484481344","3484482047","CA" +"3484482048","3484482559","US" +"3484482560","3484483583","CA" +"3484483584","3484604039","US" +"3484604040","3484604047","AU" +"3484604048","3484647423","US" +"3484647424","3484663807","CA" +"3484663808","3484746815","US" +"3484746816","3484746943","GB" +"3484746944","3484762111","US" +"3484762112","3484775743","CA" +"3484775744","3484775775","US" +"3484775776","3484777663","CA" +"3484777664","3484777695","US" +"3484777696","3484778495","CA" +"3484778496","3484884991","US" +"3484884992","3484893183","CA" +"3484893184","3484937103","US" +"3484937104","3484937111","SE" +"3484937112","3485220863","US" +"3485220864","3485229055","CA" +"3485229056","3485290463","US" +"3485290464","3485290479","GB" +"3485290480","3485327359","US" +"3485327360","3485335551","CA" +"3485335552","3485458847","US" +"3485458848","3485458863","FR" +"3485458864","3485460559","US" +"3485460560","3485460575","IN" +"3485460576","3485462527","US" +"3485462528","3485464575","VC" +"3485464576","3485466623","LC" +"3485466624","3485597695","US" +"3485597696","3485671583","CA" +"3485671584","3485671615","US" +"3485671616","3485672543","CA" +"3485672544","3485672551","US" +"3485672552","3485695999","CA" +"3485696000","3485721056","US" +"3485721057","3485721057","AE" +"3485721058","3485724671","US" +"3485724672","3485728767","A1" +"3485728768","3485885127","US" +"3485885128","3485885141","CA" +"3485885142","3485886917","US" +"3485886918","3485886931","IN" +"3485886932","3485887747","US" +"3485887748","3485887777","AU" +"3485887778","3486023679","US" +"3486023680","3486031871","CA" +"3486031872","3486269439","US" +"3486269440","3486285823","JM" +"3486285824","3486302207","PR" +"3486302208","3486310399","CA" +"3486310400","3486501951","US" +"3486501952","3486501967","DE" +"3486501968","3486580735","US" +"3486580736","3486580991","GB" +"3486580992","3486581503","DE" +"3486581504","3486581759","TW" +"3486581760","3486582015","GB" +"3486582016","3486582271","NO" +"3486582272","3486582527","BE" +"3486582528","3486582783","AU" +"3486582784","3486583039","DE" +"3486583040","3486583295","CH" +"3486583296","3486583807","US" +"3486583808","3486584063","KR" +"3486584064","3486584319","US" +"3486584320","3486584831","CA" +"3486584832","3486585343","US" +"3486585344","3486585599","PT" +"3486585600","3486586367","FR" +"3486586368","3486586623","NZ" +"3486586624","3486586879","US" +"3486586880","3486587135","AU" +"3486587136","3486587391","FR" +"3486587392","3486587647","NL" +"3486587648","3486587903","CL" +"3486587904","3486588415","GB" +"3486588416","3486588671","FR" +"3486588672","3486589119","US" +"3486589120","3486589151","NL" +"3486589152","3486589247","US" +"3486589248","3486589279","ZA" +"3486589280","3486589951","US" +"3486589952","3486590207","IT" +"3486590208","3486590463","US" +"3486590464","3486591743","GB" +"3486591744","3486591999","CH" +"3486592000","3486592063","FI" +"3486592064","3486592255","US" +"3486592256","3486592511","NL" +"3486592512","3486593023","NO" +"3486593024","3486593279","NL" +"3486593280","3486593791","DE" +"3486593792","3486594047","FR" +"3486594048","3486594303","DE" +"3486594304","3486594559","BE" +"3486594560","3486594719","US" +"3486594720","3486594751","LU" +"3486594752","3486594783","GB" +"3486594784","3486594815","US" +"3486594816","3486594943","AR" +"3486594944","3486595071","US" +"3486595072","3486595327","DK" +"3486595328","3486595583","ID" +"3486595584","3486595839","PR" +"3486595840","3486596095","DK" +"3486596096","3486596351","NL" +"3486596352","3486596607","NO" +"3486596608","3486596735","US" +"3486596736","3486596799","CH" +"3486596800","3486596863","FR" +"3486596864","3486597119","GB" +"3486597120","3486597375","IE" +"3486597376","3486597631","IT" +"3486597632","3486597887","GB" +"3486597888","3486598591","US" +"3486598592","3486598655","FR" +"3486598656","3486598911","BR" +"3486598912","3486599167","NO" +"3486599168","3486599423","SE" +"3486599424","3486599679","BR" +"3486599680","3486599935","US" +"3486599936","3486600447","BR" +"3486600448","3486601215","US" +"3486601216","3486601471","BE" +"3486601472","3486601535","TR" +"3486601536","3486601727","US" +"3486601728","3486601983","BE" +"3486601984","3486602239","NZ" +"3486602240","3486602431","US" +"3486602432","3486602495","CO" +"3486602496","3486603007","US" +"3486603008","3486603263","SG" +"3486603264","3486603295","US" +"3486603296","3486603327","BR" +"3486603328","3486603391","CL" +"3486603392","3486603407","US" +"3486603408","3486603423","AR" +"3486603424","3486603455","US" +"3486603456","3486603519","AR" +"3486603520","3486603775","JP" +"3486603776","3486604287","US" +"3486604288","3486604543","BE" +"3486604544","3486604575","US" +"3486604576","3486604607","SG" +"3486604608","3486604615","MY" +"3486604616","3486604671","US" +"3486604672","3486604735","CO" +"3486604736","3486605055","US" +"3486605056","3486605311","ES" +"3486605312","3486605567","NL" +"3486605568","3486606079","US" +"3486606080","3486606335","MY" +"3486606336","3486606591","US" +"3486606592","3486606847","FI" +"3486606848","3486607359","US" +"3486607360","3486607615","JP" +"3486607616","3486607871","US" +"3486607872","3486608127","PH" +"3486608128","3486608383","GB" +"3486608384","3486609151","US" +"3486609152","3486609663","HK" +"3486609664","3486609919","AU" +"3486609920","3486610175","SG" +"3486610176","3486610431","US" +"3486610432","3486610687","SE" +"3486610688","3486610943","NL" +"3486610944","3486611199","US" +"3486611200","3486611215","BR" +"3486611216","3486611455","US" +"3486611456","3486611711","SG" +"3486611712","3486611775","EC" +"3486611776","3486611967","US" +"3486611968","3486612223","HK" +"3486612224","3486612479","SG" +"3486612480","3486612607","US" +"3486612608","3486612735","FR" +"3486612736","3486612991","DE" +"3486612992","3486613247","US" +"3486613248","3486613759","GB" +"3486613760","3486614015","ES" +"3486614016","3486614271","US" +"3486614272","3486614527","GB" +"3486614528","3486614783","US" +"3486614784","3486615039","FR" +"3486615040","3486615295","BE" +"3486615296","3486615551","PH" +"3486615552","3486615871","US" +"3486615872","3486615903","LU" +"3486615904","3486615935","US" +"3486615936","3486615967","CH" +"3486615968","3486616319","US" +"3486616320","3486616831","NO" +"3486616832","3486617215","US" +"3486617216","3486617343","SE" +"3486617344","3486617599","US" +"3486617600","3486617855","CH" +"3486617856","3486618111","AU" +"3486618112","3486618367","NO" +"3486618368","3486618623","ES" +"3486618624","3486618879","BE" +"3486618880","3486619135","FR" +"3486619136","3486619391","SG" +"3486619392","3486619647","BE" +"3486619648","3486619903","CA" +"3486619904","3486620159","US" +"3486620160","3486620415","SE" +"3486620416","3486620671","HK" +"3486620672","3486620927","US" +"3486620928","3486621183","NL" +"3486621184","3486621439","US" +"3486621440","3486621695","NL" +"3486621696","3486621951","FI" +"3486621952","3486622207","ES" +"3486622208","3486622463","ZA" +"3486622464","3486622719","GB" +"3486622720","3486622975","MX" +"3486622976","3486623231","DE" +"3486623232","3486623487","JP" +"3486623488","3486623743","DE" +"3486623744","3486623999","US" +"3486624000","3486624255","PH" +"3486624256","3486624511","SG" +"3486624512","3486624767","SE" +"3486624768","3486625023","ES" +"3486625024","3486625055","US" +"3486625056","3486625087","MX" +"3486625088","3486625151","US" +"3486625152","3486625183","MX" +"3486625184","3486625279","US" +"3486625280","3486625535","SE" +"3486625536","3486625791","NO" +"3486625792","3486626047","NL" +"3486626048","3486626303","FI" +"3486626304","3486626559","IL" +"3486626560","3486626567","CH" +"3486626568","3486626591","US" +"3486626592","3486626623","FI" +"3486626624","3486627071","US" +"3486627072","3486627327","JP" +"3486627328","3486627583","US" +"3486627584","3486627839","BE" +"3486627840","3486628095","BW" +"3486628096","3486628351","ZA" +"3486628352","3486628607","US" +"3486628608","3486628863","NO" +"3486628864","3486629375","PT" +"3486629376","3486629631","US" +"3486629632","3486629887","CL" +"3486629888","3486630143","SE" +"3486630144","3486631679","JP" +"3486631680","3486631935","ID" +"3486631936","3486632447","JP" +"3486632448","3486632703","US" +"3486632704","3486632959","JP" +"3486632960","3486633215","IT" +"3486633216","3486633471","GB" +"3486633472","3486633599","US" +"3486633600","3486633727","CN" +"3486633728","3486633983","US" +"3486633984","3486634239","HK" +"3486634240","3486634495","US" +"3486634496","3486634751","KR" +"3486634752","3486635007","CH" +"3486635008","3486635263","DK" +"3486635264","3486635519","FR" +"3486635520","3486635775","ES" +"3486635776","3486636031","IL" +"3486636032","3486636287","ES" +"3486636288","3486636543","NL" +"3486636544","3486636799","TW" +"3486636800","3486637055","DE" +"3486637056","3486637311","US" +"3486637312","3486637823","BE" +"3486637824","3486638335","SE" +"3486638336","3486638591","FR" +"3486638592","3486638623","US" +"3486638624","3486638639","CN" +"3486638640","3486638847","US" +"3486638848","3486639103","DK" +"3486639104","3486639359","BE" +"3486639360","3486639615","SG" +"3486639616","3486640127","US" +"3486640128","3486640383","BE" +"3486640384","3486640639","GB" +"3486640640","3486642175","US" +"3486642176","3486642431","BR" +"3486642432","3486642687","PT" +"3486642688","3486642943","DK" +"3486642944","3486646015","US" +"3486646016","3486646143","JP" +"3486646144","3486646271","US" +"3486646272","3486662655","CA" +"3486662656","3486677055","US" +"3486677056","3486677071","CA" +"3486677072","3486688255","US" +"3486688256","3486688511","GB" +"3486688512","3486699519","US" +"3486699520","3486699775","CA" +"3486699776","3486700399","US" +"3486700400","3486700407","CA" +"3486700408","3486700439","US" +"3486700440","3486700447","IT" +"3486700448","3486701311","US" +"3486701312","3486701567","CA" +"3486701568","3486707519","US" +"3486707520","3486707535","SE" +"3486707536","3486707559","US" +"3486707560","3486707567","HN" +"3486707568","3486711551","US" +"3486711552","3486711807","CA" +"3486711808","3487039487","US" +"3487039488","3487105023","CA" +"3487105024","3487181359","US" +"3487181360","3487181375","GB" +"3487181376","3487189247","US" +"3487189248","3487189503","DK" +"3487189504","3487197183","US" +"3487197184","3487197439","DK" +"3487197440","3487216383","US" +"3487216384","3487216639","SE" +"3487216640","3487236095","US" +"3487236096","3487238023","CA" +"3487238024","3487238024","A1" +"3487238025","3487301631","CA" +"3487301632","3487507327","US" +"3487507328","3487507335","CA" +"3487507336","3487507343","US" +"3487507344","3487507359","CA" +"3487507360","3487507375","US" +"3487507376","3487507391","CA" +"3487507392","3487559719","US" +"3487559720","3487559727","AU" +"3487559728","3487559839","US" +"3487559840","3487559871","AU" +"3487559872","3487560167","US" +"3487560168","3487560183","AU" +"3487560184","3487561471","US" +"3487561472","3487561727","AU" +"3487561728","3487703039","US" +"3487703040","3487703073","DE" +"3487703074","3487703074","A2" +"3487703075","3487704849","DE" +"3487704850","3487704850","NG" +"3487704851","3487704851","DE" +"3487704852","3487704853","NG" +"3487704854","3487705855","DE" +"3487705856","3487706367","A2" +"3487706368","3487706623","RU" +"3487706624","3487707135","A2" +"3487707136","3487725567","US" +"3487725568","3487727615","TW" +"3487727616","3487766527","US" +"3487766528","3487768575","CA" +"3487768576","3487842303","US" +"3487842304","3487858687","CA" +"3487858688","3487859199","KY" +"3487859200","3487861759","BM" +"3487861760","3487862015","KY" +"3487862016","3487875071","BM" +"3487875072","3487891455","US" +"3487891456","3487907839","CA" +"3487907840","3487912959","US" +"3487912960","3487913215","CA" +"3487913216","3487969791","US" +"3487969792","3487970047","KW" +"3487970048","3488014335","US" +"3488014336","3488022527","CA" +"3488022528","3488071679","US" +"3488071680","3488072703","CA" +"3488072704","3488079871","US" +"3488079872","3488083967","CA" +"3488083968","3488088063","US" +"3488088064","3488104447","IL" +"3488104448","3488112639","US" +"3488112640","3488113839","CA" +"3488113840","3488113847","US" +"3488113848","3488116863","CA" +"3488116864","3488116871","US" +"3488116872","3488118559","CA" +"3488118560","3488118567","US" +"3488118568","3488120831","CA" +"3488120832","3488300287","US" +"3488300288","3488300543","A2" +"3488300544","3488350207","US" +"3488350208","3488361215","CA" +"3488361216","3488361471","US" +"3488361472","3488415743","CA" +"3488415744","3488615935","US" +"3488615936","3488616191","AU" +"3488616192","3488718847","US" +"3488718848","3488719615","A2" +"3488719616","3488719871","US" +"3488719872","3488719999","A2" +"3488720000","3488720063","US" +"3488720064","3488720095","BG" +"3488720096","3488720111","BY" +"3488720112","3488720639","A2" +"3488720640","3488720895","US" +"3488720896","3488721151","AL" +"3488721152","3488721407","A2" +"3488721408","3488722175","BA" +"3488722176","3488722431","RO" +"3488722432","3488722687","AL" +"3488722688","3488723199","JM" +"3488723200","3488727039","A2" +"3488727040","3488901887","US" +"3488901888","3488902143","CA" +"3488902144","3488940031","US" +"3488940032","3488956415","CA" +"3488956416","3488989183","US" +"3488989184","3489005567","CA" +"3489005568","3489136639","US" +"3489136640","3489267711","MX" +"3489267712","3489341439","US" +"3489341440","3489345535","CA" +"3489345536","3489398783","US" +"3489398784","3489399039","IT" +"3489399040","3489464319","US" +"3489464320","3489529855","CA" +"3489529856","3489562623","US" +"3489562624","3489566719","JM" +"3489566720","3489575423","US" +"3489575424","3489575551","CN" +"3489575552","3489575679","US" +"3489575680","3489575807","CN" +"3489575808","3489575935","US" +"3489575936","3489577008","CN" +"3489577009","3489577215","US" +"3489577216","3489578239","CN" +"3489578240","3489673471","US" +"3489673472","3489673727","PR" +"3489673728","3489717759","US" +"3489717760","3489718015","PR" +"3489718016","3489718271","US" +"3489718272","3489718527","DM" +"3489718528","3489719039","LC" +"3489719040","3489719191","AG" +"3489719192","3489719199","VG" +"3489719200","3489719551","AG" +"3489719552","3489719807","VG" +"3489719808","3489720063","DM" +"3489720064","3489720319","LC" +"3489720320","3489738751","US" +"3489738752","3489740799","PH" +"3489740800","3489741783","US" +"3489741784","3489741791","CA" +"3489741792","3489749503","US" +"3489749504","3489749519","CA" +"3489749520","3489756119","US" +"3489756120","3489756127","DE" +"3489756128","3489761743","US" +"3489761744","3489761759","CA" +"3489761760","3489774831","US" +"3489774832","3489774839","GB" +"3489774840","3489775103","US" +"3489775104","3489775359","BO" +"3489775360","3489969151","US" +"3489969152","3489969663","PR" +"3489969664","3490041503","US" +"3490041504","3490041535","CA" +"3490041536","3490228735","US" +"3490228736","3490229247","CO" +"3490229248","3490263039","US" +"3490263040","3490265087","CO" +"3490265088","3490265343","EC" +"3490265344","3490267135","CO" +"3490267136","3490488319","US" +"3490488320","3490489343","PR" +"3490489344","3490653871","US" +"3490653872","3490653887","CA" +"3490653888","3490702847","US" +"3490702848","3490703103","AS" +"3490703104","3490703615","US" +"3490703616","3490703871","PR" +"3490703872","3490732431","US" +"3490732432","3490732447","CA" +"3490732448","3490786047","US" +"3490786048","3490786303","PR" +"3490786304","3490879231","US" +"3490879232","3490879487","PR" +"3490879488","3490974719","US" +"3490974720","3490975743","PR" +"3490975744","3491219183","US" +"3491219184","3491219191","PR" +"3491219192","3491226687","US" +"3491226688","3491226719","CA" +"3491226720","3491231807","US" +"3491231808","3491231823","PR" +"3491231824","3491351455","US" +"3491351456","3491351463","HR" +"3491351464","3491358183","US" +"3491358184","3491358191","PR" +"3491358192","3491381247","US" +"3491381248","3491389439","BM" +"3491389440","3491476991","US" +"3491476992","3491478527","VI" +"3491478528","3491478591","US" +"3491478592","3491478599","PR" +"3491478600","3491506631","US" +"3491506632","3491506639","DK" +"3491506640","3491508223","US" +"3491508224","3491512319","CA" +"3491512320","3491637247","US" +"3491637248","3491637759","CO" +"3491637760","3491639807","US" +"3491639808","3491639823","DK" +"3491639824","3491651583","US" +"3491651584","3491659775","VI" +"3491659776","3491712927","US" +"3491712928","3491712959","TW" +"3491712960","3491736063","US" +"3491736064","3491736319","PR" +"3491736320","3491743743","US" +"3491743744","3491745791","CO" +"3491745792","3491764783","US" +"3491764784","3491764791","PR" +"3491764792","3491826687","US" +"3491826688","3491826943","AN" +"3491826944","3491907591","US" +"3491907592","3491907592","A1" +"3491907593","3491921663","US" +"3491921664","3491921919","PR" +"3491921920","3491951495","US" +"3491951496","3491951503","GB" +"3491951504","3491951519","US" +"3491951520","3491951527","GB" +"3491951528","3491968423","US" +"3491968424","3491968431","PR" +"3491968432","3491968447","AF" +"3491968448","3491969023","US" +"3491969024","3491970047","PR" +"3491970048","3491971607","US" +"3491971608","3491971615","IT" +"3491971616","3491971751","US" +"3491971752","3491971759","AU" +"3491971760","3491971951","US" +"3491971952","3491971967","HK" +"3491971968","3491973151","US" +"3491973152","3491973159","VE" +"3491973160","3492005375","US" +"3492005376","3492005391","DK" +"3492005392","3492005439","US" +"3492005440","3492005447","DK" +"3492005448","3492005463","US" +"3492005464","3492005487","AU" +"3492005488","3492151295","US" +"3492151296","3492167679","CA" +"3492167680","3492188799","US" +"3492188800","3492188831","CH" +"3492188832","3492472039","US" +"3492472040","3492472047","GB" +"3492472048","3492576143","US" +"3492576144","3492576151","CN" +"3492576152","3492646623","US" +"3492646624","3492646639","IL" +"3492646640","3492669695","US" +"3492669696","3492671487","PA" +"3492671488","3492730415","US" +"3492730416","3492730431","CA" +"3492730432","3492795775","US" +"3492795776","3492795903","AR" +"3492795904","3492827391","US" +"3492827392","3492827423","CA" +"3492827424","3492827431","US" +"3492827432","3492827439","DE" +"3492827440","3492827455","AU" +"3492827456","3492827519","US" +"3492827520","3492827647","AU" +"3492827648","3492827903","US" +"3492827904","3492827967","AU" +"3492827968","3492869631","US" +"3492869632","3492869887","BR" +"3492869888","3492894975","US" +"3492894976","3492895231","BE" +"3492895232","3492906495","US" +"3492906496","3492906751","EU" +"3492906752","3492912127","US" +"3492912128","3492912151","GB" +"3492912152","3492912159","US" +"3492912160","3492912383","GB" +"3492912384","3492917247","US" +"3492917248","3492917503","VI" +"3492917504","3492924991","US" +"3492924992","3492925007","DE" +"3492925008","3492926079","US" +"3492926080","3492926095","EU" +"3492926096","3492934111","US" +"3492934112","3492934143","GB" +"3492934144","3492947087","US" +"3492947088","3492947103","DE" +"3492947104","3492950863","US" +"3492950864","3492950879","DE" +"3492950880","3492963087","US" +"3492963088","3492963103","FR" +"3492963104","3492996127","US" +"3492996128","3492996136","GB" +"3492996137","3493014627","US" +"3493014628","3493014628","GB" +"3493014629","3493018639","US" +"3493018640","3493018655","AE" +"3493018656","3493029341","US" +"3493029342","3493029342","GB" +"3493029343","3493039359","US" +"3493039360","3493039615","AR" +"3493039616","3493061119","US" +"3493061120","3493061375","BR" +"3493061376","3493069055","US" +"3493069056","3493069311","A2" +"3493069312","3493070847","US" +"3493070848","3493071871","HT" +"3493071872","3493073151","US" +"3493073152","3493073407","BO" +"3493073408","3493073663","US" +"3493073664","3493073919","BO" +"3493073920","3493074175","US" +"3493074176","3493074431","BO" +"3493074432","3493078527","HT" +"3493078528","3493079039","US" +"3493079040","3493081087","HT" +"3493081088","3493081599","US" +"3493081600","3493082623","PY" +"3493082624","3493089023","US" +"3493089024","3493089279","CM" +"3493089280","3493136639","US" +"3493136640","3493136895","GB" +"3493136896","3493137663","US" +"3493137664","3493137919","CH" +"3493137920","3493139455","US" +"3493139456","3493139711","AU" +"3493139712","3493139967","US" +"3493139968","3493140223","JM" +"3493140224","3493140479","DE" +"3493140480","3493141503","US" +"3493141504","3493141759","GB" +"3493141760","3493142271","US" +"3493142272","3493142527","ID" +"3493142528","3493174877","US" +"3493174878","3493174878","A1" +"3493174879","3493244927","US" +"3493244928","3493249023","PR" +"3493249024","3493866495","US" +"3493866496","3493867519","VG" +"3493867520","3493874687","US" +"3493874688","3493875711","BM" +"3493875712","3493881855","US" +"3493881856","3493882879","CA" +"3493882880","3493886715","US" +"3493886716","3493886719","BZ" +"3493886720","3493901023","US" +"3493901024","3493901031","HK" +"3493901032","3493901311","US" +"3493901312","3493901567","AE" +"3493901568","3493901579","US" +"3493901580","3493901583","TT" +"3493901584","3493901599","VG" +"3493901600","3493901759","US" +"3493901760","3493901767","AE" +"3493901768","3493901791","US" +"3493901792","3493901823","AE" +"3493901824","3493901847","US" +"3493901848","3493901851","CA" +"3493901852","3493901951","US" +"3493901952","3493901983","CA" +"3493901984","3493902215","US" +"3493902216","3493902223","CA" +"3493902224","3493902295","US" +"3493902296","3493902303","NG" +"3493902304","3493903551","US" +"3493903552","3493903567","KW" +"3493903568","3493914239","US" +"3493914240","3493914367","CA" +"3493914368","3493916671","US" +"3493918720","3493936127","US" +"3493936128","3493937151","CA" +"3493937152","3493980159","US" +"3493980160","3493980447","CA" +"3493980448","3493980455","US" +"3493980456","3493981183","CA" +"3493981184","3493982207","US" +"3493982208","3493984255","CA" +"3493984256","3493986303","US" +"3493986304","3493986623","CA" +"3493986624","3493986687","US" +"3493986688","3493987327","CA" +"3493987328","3493990399","US" +"3493990400","3493991423","CA" +"3493991424","3493998591","US" +"3493998592","3494000639","AI" +"3494000640","3494003711","US" +"3494003712","3494004735","CA" +"3494004736","3494009855","US" +"3494009856","3494010879","CA" +"3494010880","3494011231","US" +"3494011232","3494011247","HK" +"3494011248","3494014975","US" +"3494014976","3494017023","CA" +"3494017024","3494044671","US" +"3494044672","3494045695","CA" +"3494045696","3494049791","US" +"3494049792","3494051839","CA" +"3494051840","3494075391","US" +"3494075392","3494076415","CA" +"3494076416","3494088703","US" +"3494088704","3494090751","CA" +"3494090752","3494094847","US" +"3494094848","3494095871","CA" +"3494095872","3494101319","US" +"3494101320","3494101327","GB" +"3494101328","3494101377","US" +"3494101378","3494101385","JM" +"3494101386","3494101407","US" +"3494101408","3494101415","CO" +"3494101416","3494101429","US" +"3494101430","3494101437","GB" +"3494101438","3494102481","US" +"3494102482","3494102489","CA" +"3494102490","3494102623","US" +"3494102624","3494102639","SB" +"3494102640","3494102687","US" +"3494102688","3494102701","PE" +"3494102702","3494102735","US" +"3494102736","3494102743","VI" +"3494102744","3494109925","US" +"3494109926","3494109942","CA" +"3494109943","3494110091","US" +"3494110092","3494110109","CA" +"3494110110","3494110145","US" +"3494110146","3494110161","CA" +"3494110162","3494115471","US" +"3494115472","3494115487","AU" +"3494115488","3494115495","US" +"3494115496","3494115503","CA" +"3494115504","3494115983","US" +"3494115984","3494115991","AU" +"3494115992","3494116007","US" +"3494116008","3494116015","GB" +"3494116016","3494116375","US" +"3494116376","3494116383","GB" +"3494116384","3494116407","US" +"3494116408","3494116415","CA" +"3494116416","3494116431","US" +"3494116432","3494116439","GB" +"3494116440","3494116511","US" +"3494116512","3494116519","NL" +"3494116520","3494121471","US" +"3494121472","3494122495","CA" +"3494122496","3494135807","US" +"3494135808","3494136831","CA" +"3494136832","3494139903","US" +"3494139904","3494141951","CA" +"3494141952","3494143999","US" +"3494144000","3494145023","CA" +"3494145024","3494159039","US" +"3494159040","3494159071","CH" +"3494159072","3494168575","US" +"3494168576","3494170623","CA" +"3494170624","3494181631","US" +"3494181632","3494181887","SN" +"3494181888","3494184959","US" +"3494184960","3494187007","CA" +"3494187008","3494191359","US" +"3494191360","3494191615","DE" +"3494191616","3494191871","GB" +"3494191872","3494192127","NL" +"3494192128","3494197247","US" +"3494197248","3494197391","CA" +"3494197392","3494197412","FR" +"3494197413","3494197448","CA" +"3494197449","3494197456","AE" +"3494197457","3494197493","CA" +"3494197494","3494197502","FR" +"3494197503","3494197536","CA" +"3494197537","3494197560","AE" +"3494197561","3494197569","FR" +"3494197570","3494197604","CA" +"3494197605","3494197614","US" +"3494197615","3494197760","CA" +"3494197761","3494197777","AE" +"3494197778","3494197953","CA" +"3494197954","3494197967","US" +"3494197968","3494198259","CA" +"3494198260","3494198260","US" +"3494198261","3494198271","CA" +"3494198272","3494206847","US" +"3494206848","3494206887","CA" +"3494206888","3494206911","US" +"3494206912","3494206943","CA" +"3494206944","3494228031","US" +"3494228032","3494228095","AU" +"3494228096","3494228319","US" +"3494228320","3494228335","RU" +"3494228336","3494228863","US" +"3494228864","3494228927","IN" +"3494228928","3494229375","US" +"3494229376","3494229407","BZ" +"3494229408","3494229999","US" +"3494230000","3494230015","CA" +"3494230016","3494241927","US" +"3494241928","3494241935","AU" +"3494241936","3494241951","US" +"3494241952","3494241959","IN" +"3494241960","3494242247","US" +"3494242248","3494242255","CO" +"3494242256","3494244351","US" +"3494244352","3494246399","CA" +"3494246400","3494247423","US" +"3494247424","3494250495","CA" +"3494250496","3494262783","US" +"3494262784","3494264831","CA" +"3494264832","3494267007","US" +"3494267008","3494267023","AE" +"3494267024","3494267087","US" +"3494267088","3494267103","PK" +"3494267104","3494267423","US" +"3494267424","3494267439","GB" +"3494267440","3494268287","US" +"3494268288","3494268319","TH" +"3494268320","3494268335","UA" +"3494268336","3494268815","US" +"3494268816","3494268831","UA" +"3494268832","3494271999","US" +"3494272000","3494273023","KN" +"3494273024","3494275071","US" +"3494275072","3494277119","CA" +"3494277120","3494291743","US" +"3494291744","3494291751","GB" +"3494291752","3494299663","US" +"3494299664","3494299679","TH" +"3494299680","3494299687","US" +"3494299688","3494299695","SC" +"3494299696","3494299727","US" +"3494299728","3494299735","SC" +"3494299736","3494300367","US" +"3494300368","3494300383","TW" +"3494300384","3494301247","US" +"3494301248","3494301311","SG" +"3494301312","3494301439","US" +"3494301440","3494301695","TW" +"3494301696","3494302719","US" +"3494302720","3494303743","CA" +"3494303744","3494310911","US" +"3494310912","3494311935","CA" +"3494311936","3494313135","US" +"3494313136","3494313143","GB" +"3494313144","3494313327","US" +"3494313328","3494313343","CO" +"3494313344","3494313359","US" +"3494313360","3494313375","MX" +"3494313376","3494316031","US" +"3494316032","3494317055","CA" +"3494317056","3494336511","US" +"3494336512","3494337023","CA" +"3494337024","3494337087","US" +"3494337088","3494337135","CA" +"3494337136","3494337151","US" +"3494337152","3494337535","CA" +"3494337536","3494342655","US" +"3494342656","3494344703","CA" +"3494344704","3494349223","US" +"3494349224","3494349231","GB" +"3494349232","3494350095","US" +"3494350096","3494350103","CA" +"3494350104","3494359039","US" +"3494359040","3494360063","CA" +"3494360064","3494361087","US" +"3494361088","3494362111","CA" +"3494362112","3494380543","US" +"3494380544","3494381567","CA" +"3494381568","3494402559","US" +"3494402560","3494402815","GB" +"3494402816","3494410239","US" +"3494410240","3494412287","CA" +"3494412288","3494420415","US" +"3494420416","3494420447","CA" +"3494420448","3494422527","US" +"3494422528","3494425599","CA" +"3494425600","3494427199","US" +"3494427200","3494427215","CA" +"3494427216","3494428223","US" +"3494428224","3494428239","CA" +"3494428240","3494432767","US" +"3494432768","3494433791","CA" +"3494433792","3494437887","US" +"3494437888","3494437983","GP" +"3494437984","3494437999","KN" +"3494438000","3494438023","GP" +"3494438024","3494438031","KN" +"3494438032","3494438063","GP" +"3494438064","3494438071","KN" +"3494438072","3494438143","GP" +"3494438144","3494438399","DM" +"3494438400","3494438655","KN" +"3494438656","3494438911","DM" +"3494438912","3494449151","US" +"3494449152","3494451199","CA" +"3494451200","3494455295","US" +"3494455296","3494456319","CA" +"3494456320","3494457779","US" +"3494457780","3494457787","GB" +"3494457788","3494459391","US" +"3494459392","3494460415","CA" +"3494460416","3494464511","US" +"3494464512","3494465535","CA" +"3494465536","3494501023","US" +"3494501024","3494501039","AU" +"3494501040","3494510591","US" +"3494510592","3494512639","CA" +"3494512640","3494512895","US" +"3494512896","3494513151","NO" +"3494513152","3494516735","US" +"3494516736","3494517759","CA" +"3494517760","3494539263","US" +"3494539264","3494540031","A2" +"3494540032","3494540287","UG" +"3494540288","3494554453","US" +"3494554454","3494554461","ES" +"3494554462","3494554554","US" +"3494554555","3494554562","ES" +"3494554563","3494554655","US" +"3494554656","3494554687","TR" +"3494554688","3494555167","US" +"3494555168","3494555199","TR" +"3494555200","3494555263","US" +"3494555264","3494555295","TR" +"3494555296","3494555392","US" +"3494555393","3494555423","CN" +"3494555424","3494563839","US" +"3494563840","3494565887","CA" +"3494565888","3494594559","US" +"3494594560","3494595583","CA" +"3494595584","3494605823","US" +"3494605824","3494606847","CA" +"3494606848","3494610943","US" +"3494610944","3494611967","CA" +"3494611968","3494624255","US" +"3494624256","3494625279","CA" +"3494625280","3494627327","US" +"3494627328","3494628351","BM" +"3494628352","3494651903","US" +"3494651904","3494652927","CA" +"3494652928","3494655807","US" +"3494655808","3494655871","GB" +"3494655872","3494660095","US" +"3494660096","3494661119","CA" +"3494661120","3494668287","US" +"3494668288","3494669375","CA" +"3494669376","3494669439","US" +"3494669440","3494670207","CA" +"3494670208","3494670215","US" +"3494670216","3494670335","CA" +"3494670336","3494700031","US" +"3494700032","3494701055","CA" +"3494701056","3494705319","US" +"3494705320","3494705327","MX" +"3494705328","3494712319","US" +"3494712320","3494712575","CA" +"3494712576","3494713091","US" +"3494713092","3494713092","A1" +"3494713093","3494727679","US" +"3494727680","3494729727","CA" +"3494729728","3494730751","US" +"3494730752","3494731775","CA" +"3494731776","3494743039","US" +"3494743040","3494744063","CA" +"3494744064","3494744399","US" +"3494744400","3494744407","AU" +"3494744408","3494744703","US" +"3494744704","3494744711","DE" +"3494744712","3494745151","US" +"3494745152","3494745159","AU" +"3494745160","3494745303","US" +"3494745304","3494745311","AU" +"3494745312","3494745951","US" +"3494745952","3494745959","GB" +"3494745960","3494746019","US" +"3494746020","3494746023","AU" +"3494746024","3494747135","US" +"3494747136","3494748159","CA" +"3494748160","3494757375","US" +"3494757376","3494758399","CA" +"3494758400","3494763047","US" +"3494763048","3494763055","JP" +"3494763056","3494763063","AU" +"3494763064","3494763071","MX" +"3494763072","3494763119","US" +"3494763120","3494763127","DE" +"3494763128","3494763199","US" +"3494763200","3494763207","KY" +"3494763208","3494763903","US" +"3494763904","3494763919","AU" +"3494763920","3494763983","US" +"3494763984","3494763999","AU" +"3494764000","3494764295","US" +"3494764296","3494764303","CA" +"3494764304","3494764343","US" +"3494764344","3494764351","GB" +"3494764352","3494764375","US" +"3494764376","3494764383","AU" +"3494764384","3494764447","US" +"3494764448","3494764455","GB" +"3494764456","3494764527","US" +"3494764528","3494764535","ES" +"3494764536","3494776831","US" +"3494776832","3494777855","CA" +"3494777856","3494785023","US" +"3494785024","3494787071","MF" +"3494787072","3494787199","A2" +"3494787200","3494787231","GB" +"3494787232","3494787327","A2" +"3494787328","3494787583","NG" +"3494787584","3494788095","A2" +"3494788096","3494788351","NG" +"3494788352","3494788607","LY" +"3494788608","3494789119","A2" +"3494789120","3494852607","US" +"3494852608","3494854655","CA" +"3494854656","3494861087","US" +"3494861088","3494861095","CA" +"3494861096","3494861407","US" +"3494861408","3494861415","CN" +"3494861416","3494861575","US" +"3494861576","3494861583","CH" +"3494861584","3494861615","US" +"3494861616","3494861623","AU" +"3494861624","3494861991","US" +"3494861992","3494861999","GB" +"3494862000","3494862007","CA" +"3494862008","3494862095","US" +"3494862096","3494862103","DO" +"3494862104","3494862143","US" +"3494862144","3494862151","FR" +"3494862152","3494862639","US" +"3494862640","3494862647","JP" +"3494862648","3494862847","US" +"3494862848","3494863871","DM" +"3494863872","3494866943","US" +"3494866944","3494867967","CA" +"3494867968","3494874111","US" +"3494874112","3494874367","ES" +"3494874368","3494874879","US" +"3494874880","3494874911","ES" +"3494874912","3494893567","US" +"3494893568","3494894591","CA" +"3494894592","3494906455","US" +"3494906456","3494906463","GB" +"3494906464","3494917119","US" +"3494917120","3494917631","CA" +"3494917632","3494928383","US" +"3494928384","3494930431","CA" +"3494930432","3494935684","US" +"3494935685","3494935685","AU" +"3494935686","3494935746","US" +"3494935747","3494935747","GB" +"3494935748","3494935940","US" +"3494935941","3494935941","AU" +"3494935942","3494936002","US" +"3494936003","3494936003","GB" +"3494936004","3494936196","US" +"3494936197","3494936197","AU" +"3494936198","3494936258","US" +"3494936259","3494936259","GB" +"3494936260","3494936452","US" +"3494936453","3494936453","AU" +"3494936454","3494936514","US" +"3494936515","3494936515","GB" +"3494936516","3494938623","US" +"3494938624","3494939647","CA" +"3494939648","3494949889","US" +"3494949890","3494950142","GB" +"3494950143","3494950655","US" +"3494950656","3494950911","PH" +"3494950912","3494964223","US" +"3494964224","3494965247","PR" +"3494965248","3494968319","US" +"3494968320","3494972415","CA" +"3494972416","3494979583","US" +"3494979584","3494981631","CA" +"3494981632","3495000063","US" +"3495000064","3495001087","CA" +"3495001088","3495006207","US" +"3495006208","3495007231","CA" +"3495007232","3495010303","US" +"3495010304","3495011327","KN" +"3495011328","3495012351","US" +"3495012352","3495014399","PR" +"3495014400","3495014448","US" +"3495014449","3495014456","SG" +"3495014457","3495023615","US" +"3495023616","3495024639","CA" +"3495024640","3495057407","US" +"3495057408","3495059455","CA" +"3495059456","3495065599","US" +"3495065600","3495066623","CA" +"3495066624","3495068031","US" +"3495068032","3495068047","PL" +"3495068048","3495068223","US" +"3495068224","3495068239","PL" +"3495068240","3495068655","US" +"3495068656","3495068671","PL" +"3495068672","3495076863","US" +"3495076864","3495077887","BM" +"3495077888","3495090175","US" +"3495090176","3495091199","KY" +"3495091200","3495098367","US" +"3495098368","3495100415","CA" +"3495100416","3495120895","US" +"3495120896","3495122943","AG" +"3495122944","3495123423","US" +"3495123424","3495123439","IN" +"3495123440","3495123455","US" +"3495123456","3495123967","GB" +"3495123968","3495127615","US" +"3495127616","3495127647","CA" +"3495127648","3495128991","US" +"3495128992","3495129007","AE" +"3495129008","3495136471","US" +"3495136472","3495136479","AR" +"3495136480","3495136495","US" +"3495136496","3495136503","IN" +"3495136504","3495136847","US" +"3495136848","3495136855","PR" +"3495136856","3495153663","US" +"3495153664","3495155711","CA" +"3495155712","3495157039","US" +"3495157040","3495157047","SE" +"3495157048","3495164191","US" +"3495164192","3495164199","CA" +"3495164200","3495164239","US" +"3495164240","3495164247","CA" +"3495164248","3495164335","US" +"3495164336","3495164343","CO" +"3495164344","3495187199","US" +"3495187200","3495187455","IM" +"3495187456","3495192575","US" +"3495192576","3495193599","CA" +"3495193600","3495215103","US" +"3495215104","3495217151","VI" +"3495217152","3495219199","VC" +"3495219200","3495251967","US" +"3495251968","3495254015","CA" +"3495254016","3495260159","US" +"3495260160","3495261183","CA" +"3495261184","3495276287","US" +"3495276288","3495276351","IN" +"3495276352","3495286783","US" +"3495286784","3495288831","CA" +"3495288832","3495308447","US" +"3495308448","3495308463","HK" +"3495308464","3495308607","US" +"3495308608","3495308671","IL" +"3495308672","3495331839","US" +"3495331840","3495332863","A2" +"3495332864","3495333887","CA" +"3495333888","3495349247","US" +"3495349248","3495350271","CA" +"3495350272","3495358463","US" +"3495358464","3495359487","CA" +"3495359488","3495361023","US" +"3495361024","3495361055","CA" +"3495361056","3495362623","US" +"3495362624","3495362631","BD" +"3495362632","3495362639","AR" +"3495362640","3495362711","US" +"3495362712","3495362719","AR" +"3495362720","3495362727","US" +"3495362728","3495362735","A2" +"3495362736","3495362751","SG" +"3495362752","3495363019","US" +"3495363020","3495363023","AR" +"3495363024","3495363399","US" +"3495363400","3495363407","BD" +"3495363408","3495363439","US" +"3495363440","3495363455","BD" +"3495363456","3495367679","US" +"3495367680","3495368703","CA" +"3495368704","3495370239","US" +"3495370240","3495370495","CA" +"3495370496","3495370751","US" +"3495370752","3495372799","BS" +"3495372800","3495375871","US" +"3495375872","3495376895","CA" +"3495376896","3495399423","US" +"3495399424","3495400447","KN" +"3495400448","3495401471","US" +"3495403520","3495412735","US" +"3495412736","3495413759","CA" +"3495413760","3495424033","US" +"3495424034","3495424042","IN" +"3495424043","3495424286","US" +"3495424287","3495424308","IN" +"3495424309","3495424321","US" +"3495424322","3495424346","IN" +"3495424347","3495424355","US" +"3495424356","3495424381","IN" +"3495424382","3495424629","US" +"3495424630","3495424637","IN" +"3495424638","3495424789","US" +"3495424790","3495424797","IN" +"3495424798","3495424865","US" +"3495424866","3495424878","IN" +"3495424879","3495424913","US" +"3495424914","3495424919","IN" +"3495424920","3495429119","US" +"3495429120","3495430143","CA" +"3495430144","3495440799","US" +"3495440800","3495440815","PL" +"3495440816","3495440831","US" +"3495440832","3495440847","IN" +"3495440848","3495440895","US" +"3495440896","3495440911","PL" +"3495440912","3495441151","US" +"3495441152","3495441167","PL" +"3495441168","3495441407","US" +"3495441408","3495441423","PL" +"3495441424","3495441663","US" +"3495441664","3495441679","PL" +"3495441680","3495441919","US" +"3495441920","3495441935","PL" +"3495441936","3495442319","US" +"3495442320","3495442335","PL" +"3495442336","3495455743","US" +"3495455744","3495456767","CA" +"3495456768","3495463935","US" +"3495463936","3495464959","CA" +"3495464960","3495475199","US" +"3495475200","3495475711","CA" +"3495475712","3495476223","EE" +"3495476224","3495477247","CA" +"3495477248","3495478271","US" +"3495478272","3495479295","CA" +"3495479296","3495485599","US" +"3495485600","3495485615","GB" +"3495485616","3495485631","US" +"3495485632","3495485663","VG" +"3495485664","3495486079","US" +"3495486080","3495486143","PA" +"3495486144","3495486207","US" +"3495486208","3495486239","AI" +"3495486240","3495486335","US" +"3495486336","3495486399","VG" +"3495486400","3495505919","US" +"3495505920","3495507967","CA" +"3495507968","3495515135","US" +"3495515136","3495516159","CA" +"3495516160","3495520375","US" +"3495520376","3495520379","SG" +"3495520380","3495520571","US" +"3495520572","3495520579","KE" +"3495520580","3495520667","US" +"3495520668","3495520706","BR" +"3495520707","3495526399","US" +"3495526400","3495527423","CA" +"3495527424","3495542783","US" +"3495542784","3495544063","A2" +"3495544064","3495544319","NG" +"3495544320","3495544831","A2" +"3495544832","3495547092","US" +"3495547093","3495547093","BD" +"3495547094","3495547102","US" +"3495547103","3495547103","BD" +"3495547104","3495547426","US" +"3495547427","3495547427","BD" +"3495547428","3495547445","US" +"3495547446","3495547447","BD" +"3495547448","3495547605","US" +"3495547606","3495547606","BD" +"3495547607","3495547633","US" +"3495547634","3495547635","CO" +"3495547636","3495548126","US" +"3495548127","3495548129","NO" +"3495548130","3495548205","US" +"3495548206","3495548207","ID" +"3495548208","3495548437","US" +"3495548438","3495548438","ES" +"3495548439","3495548544","US" +"3495548545","3495548545","BD" +"3495548546","3495548548","US" +"3495548549","3495548549","ES" +"3495548550","3495548550","BD" +"3495548551","3495548558","US" +"3495548559","3495548559","ES" +"3495548560","3495548586","US" +"3495548587","3495548588","LK" +"3495548589","3495548635","US" +"3495548636","3495548637","BD" +"3495548638","3495548640","US" +"3495548641","3495548648","BD" +"3495548649","3495549809","US" +"3495549810","3495549813","IN" +"3495549814","3495549917","US" +"3495549918","3495549923","CA" +"3495549924","3495550207","US" +"3495550208","3495550463","CA" +"3495550464","3495551999","US" +"3495552000","3495553023","BM" +"3495553024","3495579647","US" +"3495579648","3495581695","CA" +"3495581696","3495583743","US" +"3495583744","3495585791","CA" +"3495585792","3495587839","US" +"3495587840","3495588863","MS" +"3495588864","3495618559","US" +"3495618560","3495619583","CA" +"3495619584","3495620607","US" +"3495620608","3495622655","CA" +"3495622656","3495653375","US" +"3495653376","3495654399","CA" +"3495654400","3495657551","US" +"3495657552","3495657567","GB" +"3495657568","3495658527","US" +"3495658528","3495658559","FR" +"3495658560","3495673855","US" +"3495673856","3495674623","GP" +"3495674624","3495674879","MF" +"3495674880","3495675903","VG" +"3495675904","3495688191","US" +"3495688192","3495689215","CA" +"3495689216","3495694335","US" +"3495694336","3495696383","CA" +"3495698432","3495703551","US" +"3495703552","3495704063","GB" +"3495704064","3495704575","CA" +"3495704576","3495718911","US" +"3495718912","3495719151","A2" +"3495719152","3495719423","CA" +"3495719424","3495720959","A2" +"3495720960","3495724031","US" +"3495724032","3495724735","CA" +"3495724736","3495724799","US" +"3495724800","3495727103","CA" +"3495727104","3495740415","US" +"3495740416","3495741439","CA" +"3495741440","3495749631","US" +"3495749632","3495749767","CA" +"3495749768","3495749773","US" +"3495749774","3495749837","CA" +"3495749838","3495749841","IT" +"3495749842","3495749846","CA" +"3495749847","3495749856","US" +"3495749857","3495749861","RU" +"3495749862","3495749862","CA" +"3495749863","3495749867","HK" +"3495749868","3495749908","CA" +"3495749909","3495749918","US" +"3495749919","3495749939","CA" +"3495749940","3495749944","US" +"3495749945","3495749954","CA" +"3495749955","3495749959","US" +"3495749960","3495750026","CA" +"3495750027","3495750051","US" +"3495750052","3495750102","CA" +"3495750103","3495750127","GB" +"3495750128","3495750189","CA" +"3495750190","3495750204","PA" +"3495750205","3495750262","CA" +"3495750263","3495750277","US" +"3495750278","3495750278","CA" +"3495750279","3495750283","ZA" +"3495750284","3495750343","CA" +"3495750344","3495750378","AU" +"3495750379","3495750404","CA" +"3495750405","3495750408","US" +"3495750409","3495750434","CA" +"3495750435","3495750444","AU" +"3495750445","3495750450","CA" +"3495750451","3495750455","US" +"3495750456","3495750494","CA" +"3495750495","3495750499","BR" +"3495750500","3495750655","CA" +"3495750656","3495781311","US" +"3495781312","3495781375","CA" +"3495781376","3495815167","US" +"3495815168","3495815407","CA" +"3495815408","3495815411","US" +"3495815412","3495815615","CA" +"3495815616","3495815619","US" +"3495815620","3495817215","CA" +"3495817216","3495828479","US" +"3495828480","3495829503","CA" +"3495829504","3495837695","US" +"3495837696","3495838463","CA" +"3495838464","3495847935","US" +"3495847936","3495849983","CA" +"3495849984","3495859332","US" +"3495859333","3495859333","AU" +"3495859334","3495859394","US" +"3495859395","3495859395","GB" +"3495859396","3495859588","US" +"3495859589","3495859589","AU" +"3495859590","3495859650","US" +"3495859651","3495859651","GB" +"3495859652","3495862271","US" +"3495862272","3495864319","CA" +"3495864320","3495864831","DM" +"3495864832","3495865343","MF" +"3495865344","3495865439","CA" +"3495865440","3495865471","BD" +"3495865472","3495866047","CA" +"3495866048","3495866079","US" +"3495866080","3495866359","CA" +"3495866360","3495866363","US" +"3495866364","3495866367","CA" +"3495866368","3495868415","LC" +"3495868416","3495871487","US" +"3495871488","3495872511","CA" +"3495872512","3495881119","US" +"3495881120","3495881151","PA" +"3495881152","3495881471","US" +"3495881472","3495881727","PA" +"3495881728","3495896063","US" +"3495896064","3495897087","PR" +"3495897088","3495916287","US" +"3495916288","3495916543","SL" +"3495916544","3495930879","US" +"3495930880","3495931903","CA" +"3495931904","3495968767","US" +"3495968768","3495985151","CA" +"3495985152","3495988223","NI" +"3495988224","3495989247","GT" +"3495989248","3496034303","US" +"3496034304","3496050687","CA" +"3496050688","3496132607","US" +"3496132608","3496145951","CA" +"3496145952","3496145983","US" +"3496145984","3496148991","CA" +"3496148992","3496181759","US" +"3496181760","3496189951","CA" +"3496189952","3496190463","US" +"3496190464","3496190975","CA" +"3496190976","3496202239","US" +"3496202240","3496202303","CA" +"3496202304","3496205839","US" +"3496205840","3496205855","ID" +"3496205856","3496205871","CA" +"3496205872","3496221014","US" +"3496221015","3496221016","GB" +"3496221017","3496296447","US" +"3496296448","3496312831","CA" +"3496312832","3496468479","US" +"3496468480","3496476671","CA" +"3496476672","3496873983","US" +"3496873984","3496875263","A2" +"3496875264","3496875519","BD" +"3496875520","3496878079","A2" +"3496878080","3496882175","CA" +"3496882176","3496886399","US" +"3496886400","3496886407","TR" +"3496886408","3496886423","US" +"3496886424","3496886463","TR" +"3496886464","3496886495","US" +"3496886496","3496886503","CA" +"3496886504","3496886615","US" +"3496886616","3496886623","CA" +"3496886624","3496886655","US" +"3496886656","3496886671","IN" +"3496886672","3496886711","US" +"3496886712","3496886727","AU" +"3496886728","3496886823","US" +"3496886824","3496886831","IN" +"3496886832","3496886935","US" +"3496886936","3496886943","PK" +"3496886944","3496887135","US" +"3496887136","3496887167","AU" +"3496887168","3496887399","US" +"3496887400","3496887407","PK" +"3496887408","3496887471","US" +"3496887472","3496887503","AU" +"3496887504","3496887511","US" +"3496887512","3496887519","CA" +"3496887520","3496887527","AU" +"3496887528","3496887535","US" +"3496887536","3496887543","PK" +"3496887544","3496887551","US" +"3496887552","3496887559","TR" +"3496887560","3496887575","US" +"3496887576","3496887583","AU" +"3496887584","3496887631","US" +"3496887632","3496887639","RU" +"3496887640","3496887655","US" +"3496887656","3496887663","AU" +"3496887664","3496887703","US" +"3496887704","3496887727","AU" +"3496887728","3496887807","US" +"3496887808","3496887935","AU" +"3496887936","3496887975","US" +"3496887976","3496887983","AU" +"3496887984","3496888063","US" +"3496888064","3496888095","AU" +"3496888096","3496888127","US" +"3496888128","3496888159","TR" +"3496888160","3496888207","US" +"3496888208","3496888223","AU" +"3496888224","3496888231","US" +"3496888232","3496888239","BR" +"3496888240","3496888319","US" +"3496888320","3496888335","AU" +"3496888336","3496888343","US" +"3496888344","3496888351","AU" +"3496888352","3496888367","US" +"3496888368","3496888383","AU" +"3496888384","3496888399","US" +"3496888400","3496888415","AU" +"3496888416","3496888431","US" +"3496888432","3496888439","AU" +"3496888440","3496888583","US" +"3496888584","3496888591","AU" +"3496888592","3496888599","US" +"3496888600","3496888607","PK" +"3496888608","3496888623","US" +"3496888624","3496888655","AU" +"3496888656","3496888671","US" +"3496888672","3496888679","NO" +"3496888680","3496893695","US" +"3496893696","3496893703","RU" +"3496893704","3496893991","US" +"3496893992","3496893999","TR" +"3496894000","3496894463","US" +"3496894464","3496902655","CA" +"3496902656","3496946175","US" +"3496946176","3496946431","HK" +"3496946432","3496946943","US" +"3496946944","3496947199","IN" +"3496947200","3496947711","US" +"3496947712","3496951807","JP" +"3496951808","3496959999","CA" +"3496960000","3497001247","US" +"3497001248","3497001263","AU" +"3497001264","3497001327","US" +"3497001328","3497001343","DE" +"3497001344","3497005887","US" +"3497005888","3497005951","CA" +"3497005952","3497008071","US" +"3497008072","3497008079","CA" +"3497008080","3497008671","US" +"3497008672","3497008687","CA" +"3497008688","3497009399","US" +"3497009400","3497009407","AE" +"3497009408","3497010703","US" +"3497010704","3497010711","PK" +"3497010712","3497010719","US" +"3497010720","3497010727","AE" +"3497010728","3497010735","US" +"3497010736","3497010751","CA" +"3497010752","3497014687","US" +"3497014688","3497014695","GB" +"3497014696","3497017343","US" +"3497017344","3497017375","GB" +"3497017376","3497017399","US" +"3497017400","3497017439","GB" +"3497017440","3497018599","US" +"3497018600","3497018607","IL" +"3497018608","3497019231","US" +"3497019232","3497019247","PK" +"3497019248","3497020415","US" +"3497020416","3497020671","IL" +"3497020672","3497020943","US" +"3497020944","3497020959","CA" +"3497020960","3497022367","US" +"3497022368","3497022399","AU" +"3497022400","3497023447","US" +"3497023448","3497023455","CA" +"3497023456","3497024639","US" +"3497024640","3497024655","AU" +"3497024656","3497024735","US" +"3497024736","3497024751","GB" +"3497024752","3497024991","US" +"3497024992","3497025007","JP" +"3497025008","3497025127","US" +"3497025128","3497025135","PK" +"3497025136","3497026815","US" +"3497026816","3497026847","ES" +"3497026848","3497026919","US" +"3497026920","3497026927","CA" +"3497026928","3497027375","US" +"3497027376","3497027383","AE" +"3497027384","3497028383","US" +"3497028384","3497028391","MX" +"3497028392","3497028431","US" +"3497028432","3497028439","MX" +"3497028440","3497028479","US" +"3497028480","3497028495","AE" +"3497028496","3497028983","US" +"3497028984","3497029055","CA" +"3497029056","3497029071","US" +"3497029072","3497029087","TH" +"3497029088","3497029095","GB" +"3497029096","3497029151","US" +"3497029152","3497029167","TH" +"3497029168","3497029231","US" +"3497029232","3497029239","GB" +"3497029240","3497030415","US" +"3497030416","3497030423","IN" +"3497030424","3497030495","US" +"3497030496","3497030511","AU" +"3497030512","3497030767","US" +"3497030768","3497030775","CH" +"3497030776","3497030911","US" +"3497030912","3497030943","CH" +"3497030944","3497031071","US" +"3497031072","3497031079","CA" +"3497031080","3497032111","US" +"3497032112","3497032119","CA" +"3497032120","3497033383","US" +"3497033384","3497033391","CH" +"3497033392","3497033439","US" +"3497033440","3497033447","PK" +"3497033448","3497066495","US" +"3497066496","3497082879","CA" +"3497082880","3497156863","US" +"3497156864","3497156879","NL" +"3497156880","3497156983","US" +"3497156984","3497157006","DZ" +"3497157007","3497157375","US" +"3497157376","3497158655","A2" +"3497158656","3497160191","US" +"3497160192","3497160351","NL" +"3497160352","3497161215","US" +"3497161216","3497161343","HK" +"3497161344","3497161375","US" +"3497161376","3497161407","HK" +"3497161408","3497161607","US" +"3497161608","3497161615","NO" +"3497161616","3497161703","US" +"3497161704","3497161711","GB" +"3497161712","3497161735","US" +"3497161736","3497161743","MT" +"3497161744","3497161751","US" +"3497161752","3497161759","GB" +"3497161760","3497161767","PT" +"3497161768","3497161775","MT" +"3497161776","3497161895","US" +"3497161896","3497161903","MT" +"3497161904","3497161911","US" +"3497161912","3497161919","TN" +"3497161920","3497161927","US" +"3497161928","3497161935","GB" +"3497161936","3497161943","MT" +"3497161944","3497162495","US" +"3497162496","3497162751","GB" +"3497162752","3497163007","NL" +"3497163008","3497163039","US" +"3497163040","3497163047","ES" +"3497163048","3497163103","US" +"3497163104","3497163111","NO" +"3497163112","3497163167","US" +"3497163168","3497163175","GB" +"3497163176","3497163311","US" +"3497163312","3497163319","NO" +"3497163320","3497163351","US" +"3497163352","3497163359","ES" +"3497163360","3497163383","GB" +"3497163384","3497163399","US" +"3497163400","3497163407","NO" +"3497163408","3497163447","US" +"3497163448","3497163455","ES" +"3497163456","3497163463","US" +"3497163464","3497163471","ES" +"3497163472","3497163519","US" +"3497163520","3497163655","DK" +"3497163656","3497163663","NO" +"3497163664","3497163679","DK" +"3497163680","3497163695","US" +"3497163696","3497163703","DK" +"3497163704","3497163711","ES" +"3497163712","3497164287","US" +"3497164288","3497164295","GB" +"3497164296","3497164463","US" +"3497164464","3497164479","ES" +"3497164480","3497164487","US" +"3497164488","3497164495","ES" +"3497164496","3497164799","US" +"3497164800","3497181183","CA" +"3497181184","3497226295","US" +"3497226296","3497226303","SG" +"3497226304","3497226391","US" +"3497226392","3497226399","IR" +"3497226400","3497226687","US" +"3497226688","3497226719","GB" +"3497226720","3497226943","US" +"3497226944","3497226975","CA" +"3497226976","3497227311","US" +"3497227312","3497227327","CA" +"3497227328","3497227599","US" +"3497227600","3497227615","CA" +"3497227616","3497233407","US" +"3497233408","3497233663","CN" +"3497233664","3497251915","US" +"3497251916","3497251916","A1" +"3497251917","3497263815","US" +"3497263816","3497263823","GB" +"3497263824","3497264127","US" +"3497264128","3497264159","CA" +"3497264160","3497264913","US" +"3497264914","3497264950","GB" +"3497264951","3497266527","US" +"3497266528","3497266535","GB" +"3497266536","3497268223","US" +"3497268224","3497268287","GB" +"3497268288","3497268703","US" +"3497268704","3497268719","CA" +"3497268720","3497268815","US" +"3497268816","3497268831","CA" +"3497268832","3497273919","US" +"3497273920","3497273927","CA" +"3497273928","3497274175","US" +"3497274176","3497274207","CA" +"3497274208","3497410559","US" +"3497410560","3497431039","CA" +"3497431040","3497447423","US" +"3497447424","3497451519","CA" +"3497451520","3497452719","US" +"3497452720","3497452735","GB" +"3497452736","3497453119","US" +"3497453120","3497453135","GB" +"3497453136","3497453695","US" +"3497453696","3497453711","GB" +"3497453712","3497453919","US" +"3497453920","3497454079","GB" +"3497454080","3497454143","US" +"3497454144","3497454175","GB" +"3497454176","3497713415","US" +"3497713416","3497713423","EC" +"3497713424","3497717759","US" +"3497717760","3497719807","A2" +"3497719808","3497719839","MR" +"3497719840","3497721343","A2" +"3497721344","3497721599","NG" +"3497721600","3497721855","A2" +"3497721856","3497739679","US" +"3497739680","3497739687","CA" +"3497739688","3497820159","US" +"3497820160","3497852927","CA" +"3497852928","3498254335","US" +"3498254336","3498254367","JM" +"3498254368","3498254431","US" +"3498254432","3498254447","JM" +"3498254448","3498254591","US" +"3498254592","3498254847","JM" +"3498254848","3498287103","US" +"3498287104","3498292543","JM" +"3498292544","3498292551","US" +"3498292552","3498295295","JM" +"3498295296","3498428415","US" +"3498428416","3498429439","CR" +"3498429440","3498429951","US" +"3498429952","3498430207","CR" +"3498430208","3498505343","US" +"3498505344","3498505375","SG" +"3498505376","3498509055","US" +"3498509056","3498510335","PR" +"3498510336","3498513151","US" +"3498513152","3498513407","CL" +"3498513408","3498513919","US" +"3498513920","3498514431","CL" +"3498514432","3498587135","US" +"3498587136","3498588159","NL" +"3498588160","3498599935","US" +"3498599936","3498600191","WS" +"3498600192","3498708991","US" +"3498708992","3498717183","JM" +"3498717184","3498760191","US" +"3498760192","3498762239","PR" +"3498762240","3498812415","US" +"3498812416","3498812671","PF" +"3498812672","3499186591","US" +"3499186592","3499186623","MX" +"3499186624","3499299327","US" +"3499299328","3499299583","WS" +"3499299584","3499403263","US" +"3499403264","3499403775","MW" +"3499403776","3499436031","US" +"3499436032","3499436287","DE" +"3499436288","3499437055","US" +"3499437056","3499437151","DE" +"3499437152","3499437423","US" +"3499437424","3499437431","IT" +"3499437432","3499450367","US" +"3499450368","3499451391","IN" +"3499451392","3499705343","US" +"3499705344","3499705855","TZ" +"3499705856","3499706367","MG" +"3499706368","3499986943","US" +"3499986944","3499988991","KY" +"3499988992","3500015615","US" +"3500015616","3500016383","AG" +"3500016384","3500016639","KN" +"3500016640","3500016895","AG" +"3500016896","3500017151","DM" +"3500017152","3500017407","AG" +"3500017408","3500017663","VG" +"3500017664","3500018943","AG" +"3500018944","3500019199","LC" +"3500019200","3500019455","AG" +"3500019456","3500019711","LC" +"3500019712","3500076415","US" +"3500076416","3500076543","SG" +"3500076544","3500126207","US" +"3500126208","3500126463","SE" +"3500126464","3500126719","GB" +"3500126720","3500144639","US" +"3500144640","3500144895","IT" +"3500144896","3500274175","US" +"3500274176","3500274239","IE" +"3500274240","3500351487","US" +"3500351488","3500352315","JM" +"3500352316","3500352319","US" +"3500352320","3500352327","JM" +"3500352328","3500352331","US" +"3500352332","3500352427","JM" +"3500352428","3500352431","US" +"3500352432","3500359679","JM" +"3500359680","3500371583","US" +"3500371584","3500371599","GB" +"3500371600","3500396831","US" +"3500396832","3500396863","GB" +"3500396864","3500486655","US" +"3500486656","3500490751","CR" +"3500490752","3500613631","US" +"3500613632","3500614655","MZ" +"3500614656","3500664262","US" +"3500664263","3500664263","A1" +"3500664264","3500664575","US" +"3500664576","3500664831","A1" +"3500664832","3500664870","US" +"3500664871","3500664871","CA" +"3500664872","3500666751","US" +"3500666752","3500666879","A1" +"3500666880","3500689407","US" +"3500689408","3500689919","CL" +"3500689920","3500707327","US" +"3500707328","3500707839","CA" +"3500707840","3500724991","US" +"3500724992","3500725503","EC" +"3500725504","3500725759","HT" +"3500725760","3500726015","EC" +"3500726016","3500726271","HT" +"3500726272","3500728319","US" +"3500728320","3500736511","KY" +"3500736512","3500752895","US" +"3500752896","3500761087","KY" +"3500761088","3500809991","US" +"3500809992","3500809999","CA" +"3500810000","3500810247","US" +"3500810248","3500810255","CA" +"3500810256","3500811567","US" +"3500811568","3500811583","AU" +"3500811584","3500811591","US" +"3500811592","3500811631","AU" +"3500811632","3500812175","US" +"3500812176","3500812183","GB" +"3500812184","3500921279","US" +"3500921280","3500921311","AU" +"3500921312","3501146951","US" +"3501146952","3501146959","CA" +"3501146960","3501146975","GB" +"3501146976","3501147039","US" +"3501147040","3501147071","CA" +"3501147072","3501181703","US" +"3501181704","3501181711","AU" +"3501181712","3501181727","KR" +"3501181728","3501181743","US" +"3501181744","3501181791","JP" +"3501181792","3501182975","US" +"3501182976","3501183007","SG" +"3501183008","3501183023","US" +"3501183024","3501183047","SG" +"3501183048","3501183167","US" +"3501183168","3501183231","SG" +"3501183232","3501183487","US" +"3501183488","3501183743","GB" +"3501183744","3501183959","US" +"3501183960","3501183967","IL" +"3501183968","3501183999","SG" +"3501184000","3501368831","US" +"3501368832","3501369087","NL" +"3501369088","3501376147","US" +"3501376148","3501376151","NL" +"3501376152","3501378047","US" +"3501378048","3501378303","DE" +"3501378304","3501522943","US" +"3501522944","3501588479","CA" +"3501588480","3501721187","US" +"3501721188","3501721188","A1" +"3501721189","3501728831","US" +"3501728832","3501728863","AU" +"3501728864","3501732071","US" +"3501732072","3501732087","AU" +"3501732088","3501747967","US" +"3501747968","3501748031","CA" +"3501748032","3501789442","US" +"3501789443","3501789443","A1" +"3501789444","3501809151","US" +"3501809152","3501809407","CA" +"3501809408","3501817983","US" +"3501817984","3501818015","HK" +"3501818016","3502439167","US" +"3502439168","3502439423","PK" +"3502439424","3502470143","US" +"3502470144","3502471167","MX" +"3502471168","3502518783","US" +"3502518784","3502519295","LK" +"3502519296","3502541055","US" +"3502541056","3502541311","CA" +"3502541312","3502545663","US" +"3502545664","3502545919","BS" +"3502545920","3502683135","US" +"3502683136","3502683391","MC" +"3502683392","3502993407","US" +"3502993408","3502993919","NL" +"3502993920","3503027327","US" +"3503027328","3503027359","GB" +"3503027360","3503058431","US" +"3503058432","3503058447","CA" +"3503058448","3503206399","US" +"3503206400","3503206911","CR" +"3503206912","3503215623","US" +"3503215624","3503215639","NL" +"3503215640","3503222695","US" +"3503222696","3503222703","CA" +"3503222704","3503227391","US" +"3503227392","3503227407","CA" +"3503227408","3503250431","US" +"3503250432","3503250943","PK" +"3503250944","3503323135","US" +"3503323136","3503323647","KE" +"3503323648","3503386111","US" +"3503386112","3503386367","CH" +"3503386368","3503454719","US" +"3503454720","3503454975","AZ" +"3503454976","3503478783","US" +"3503478784","3503479039","DE" +"3503479040","3503738879","US" +"3503738880","3503740927","CO" +"3503740928","3503826087","US" +"3503826088","3503826095","PR" +"3503826096","3503890431","US" +"3503890432","3503894527","CO" +"3503894528","3503990783","US" +"3503990784","3503992831","AE" +"3503992832","3504086015","US" +"3504086016","3504086527","LI" +"3504086528","3504136191","US" +"3504136192","3504138239","AZ" +"3504138240","3504193535","US" +"3504193536","3504194559","EC" +"3504194560","3504207871","US" +"3504207872","3504208127","CA" +"3504208128","3504223743","US" +"3504223744","3504223999","RO" +"3504224000","3504889343","US" +"3504889344","3504889855","PK" +"3504889856","3504922623","US" +"3504922624","3504923391","PH" +"3504923392","3504928687","US" +"3504928688","3504928695","IT" +"3504928696","3504932351","US" +"3504932352","3504932863","BD" +"3504932864","3505004543","US" +"3505004544","3505005823","PR" +"3505005824","3505006079","DO" +"3505006080","3505012735","PR" +"3505012736","3505112063","US" +"3505112064","3505112319","EC" +"3505112320","3505112335","US" +"3505112336","3505113087","EC" +"3505113088","3505119231","US" +"3505119232","3505119487","PH" +"3505119488","3505121023","US" +"3505121024","3505121279","PH" +"3505121280","3505201151","US" +"3505201152","3505201407","JO" +"3505201408","3505220351","US" +"3505220352","3505220479","CA" +"3505220480","3505227247","US" +"3505227248","3505227255","GB" +"3505227256","3505270271","US" +"3505270272","3505270527","JM" +"3505270528","3505270783","HT" +"3505270784","3505416703","US" +"3505416704","3505417471","MX" +"3505417472","3505424383","US" +"3505424384","3505425407","PK" +"3505425408","3505432159","US" +"3505432160","3505432191","A2" +"3505432192","3505446271","US" +"3505446272","3505446399","CA" +"3505446400","3505474559","US" +"3505474560","3505474815","GU" +"3505474816","3505511679","US" +"3505511680","3505511935","RO" +"3505511936","3505661951","US" +"3505661952","3505662463","JM" +"3505662464","3505664799","US" +"3505664800","3505664831","UA" +"3505664832","3505818623","US" +"3505818624","3505819647","BS" +"3505819648","3505999359","US" +"3505999360","3506000127","PR" +"3506000128","3506043135","US" +"3506043136","3506044927","PA" +"3506044928","3506052543","US" +"3506052544","3506052559","DE" +"3506052560","3506058815","US" +"3506058816","3506058823","AF" +"3506058824","3506135263","US" +"3506135264","3506135295","GB" +"3506135296","3506161975","US" +"3506161976","3506161983","AF" +"3506161984","3506192639","US" +"3506192640","3506192895","A2" +"3506192896","3506194535","US" +"3506194536","3506194543","AU" +"3506194544","3506198007","US" +"3506198008","3506198015","NO" +"3506198016","3506214159","US" +"3506214160","3506214175","CA" +"3506214176","3506231807","US" +"3506231808","3506232063","IN" +"3506232064","3506307631","US" +"3506307632","3506307647","GB" +"3506307648","3506383999","US" +"3506384000","3506384031","CA" +"3506384032","3506421983","US" +"3506421984","3506422015","PR" +"3506422016","3506580863","US" +"3506580864","3506580927","PL" +"3506580928","3506765823","US" +"3506765824","3506794503","CA" +"3506794504","3506794511","US" +"3506794512","3506806719","CA" +"3506806720","3506806727","US" +"3506806728","3506831359","CA" +"3506831360","3506964479","US" +"3506964480","3506966527","TW" +"3506966528","3506972927","US" +"3506972928","3506973183","A2" +"3506973184","3506977791","US" +"3506977792","3506978815","NL" +"3506978816","3506986751","US" +"3506986752","3506987007","DE" +"3506987008","3507013631","US" +"3507013632","3507015679","DE" +"3507015680","3507019775","US" +"3507019776","3507021823","GB" +"3507021824","3507022079","US" +"3507022080","3507022335","A2" +"3507022336","3507023871","US" +"3507023872","3507024383","GB" +"3507024384","3507024639","AU" +"3507024640","3507025919","GB" +"3507025920","3507038207","US" +"3507038208","3507040255","TW" +"3507040256","3507101919","US" +"3507101920","3507101935","IL" +"3507101936","3507290111","US" +"3507290112","3507355647","AR" +"3507355648","3507470335","US" +"3507470336","3507486719","CA" +"3507486720","3507540015","US" +"3507540016","3507540031","IN" +"3507540032","3507585023","US" +"3507585024","3507598911","CA" +"3507598912","3507598943","US" +"3507598944","3507601407","CA" +"3507601408","3507634335","US" +"3507634336","3507634351","IQ" +"3507634352","3507634383","US" +"3507634384","3507634399","ES" +"3507634400","3507634623","US" +"3507634624","3507634655","CA" +"3507634656","3507635391","US" +"3507635392","3507635407","AU" +"3507635408","3507636959","US" +"3507636960","3507636975","CA" +"3507636976","3507637551","US" +"3507637552","3507637567","IL" +"3507637568","3507639189","US" +"3507639190","3507639199","IT" +"3507639200","3507639385","US" +"3507639386","3507639395","BE" +"3507639396","3507639671","US" +"3507639672","3507639681","SY" +"3507639682","3507639711","US" +"3507639712","3507639721","BE" +"3507639722","3507639741","US" +"3507639742","3507639751","NZ" +"3507639752","3507642527","US" +"3507642528","3507642559","IL" +"3507642560","3507642591","CA" +"3507642592","3507643007","US" +"3507643008","3507643039","GB" +"3507643040","3507643175","US" +"3507643176","3507643185","FR" +"3507643186","3507643265","US" +"3507643266","3507643275","IQ" +"3507643276","3507643285","US" +"3507643286","3507643295","ES" +"3507643296","3507643315","US" +"3507643316","3507643325","JP" +"3507643326","3507643461","US" +"3507643462","3507643471","AU" +"3507643472","3507643601","US" +"3507643602","3507643611","IT" +"3507643612","3507644031","US" +"3507644032","3507644063","IL" +"3507644064","3507644127","US" +"3507644128","3507644159","FR" +"3507644160","3507644511","US" +"3507644512","3507644543","NO" +"3507644544","3507644591","US" +"3507644592","3507644607","GB" +"3507644608","3507645017","US" +"3507645018","3507645027","AU" +"3507645028","3507645037","UA" +"3507645038","3507645117","US" +"3507645118","3507645127","NZ" +"3507645128","3507645193","US" +"3507645194","3507645203","NZ" +"3507645204","3507645223","US" +"3507645224","3507645233","AU" +"3507645234","3507645333","US" +"3507645334","3507645343","IR" +"3507645344","3507645353","UA" +"3507645354","3507645423","US" +"3507645424","3507645433","GB" +"3507645434","3507645479","US" +"3507645480","3507645489","GR" +"3507645490","3507646127","US" +"3507646128","3507646143","ES" +"3507646144","3507647807","US" +"3507647808","3507647871","AU" +"3507647872","3507649263","US" +"3507649264","3507649279","QA" +"3507649280","3507650047","US" +"3507650048","3507650111","BV" +"3507650112","3507650335","US" +"3507650336","3507650367","PA" +"3507650368","3507650431","US" +"3507650432","3507650495","AU" +"3507650496","3507748863","US" +"3507748864","3507749375","CA" +"3507749376","3507749631","US" +"3507749632","3507765247","CA" +"3507765248","3507809279","US" +"3507809280","3507809535","BG" +"3507809536","3508110015","US" +"3508110016","3508110047","CA" +"3508110048","3508110207","US" +"3508110208","3508110239","ES" +"3508110240","3508111359","US" +"3508111360","3508111615","CA" +"3508111616","3508114431","US" +"3508114432","3508114687","ID" +"3508114688","3508115807","US" +"3508115808","3508115839","RU" +"3508115840","3508117439","US" +"3508117440","3508117503","CA" +"3508117504","3508118527","US" +"3508118528","3508118559","AU" +"3508118560","3508118911","US" +"3508118912","3508118943","CA" +"3508118944","3508123935","US" +"3508123936","3508123951","CA" +"3508123952","3508126239","US" +"3508126240","3508126255","GB" +"3508126256","3508130815","US" +"3508130816","3508130831","RU" +"3508130832","3508131135","US" +"3508131136","3508131199","CA" +"3508131200","3508133119","US" +"3508133120","3508133247","GB" +"3508133248","3508137631","US" +"3508137632","3508137647","SK" +"3508137648","3508137695","US" +"3508137696","3508137711","ID" +"3508137712","3508219903","US" +"3508219904","3508220927","CA" +"3508220928","3508221951","KY" +"3508221952","3508222975","US" +"3508222976","3508223999","KY" +"3508224000","3508224255","BM" +"3508224256","3508243967","US" +"3508243968","3508244223","BM" +"3508244224","3508273407","US" +"3508273408","3508273663","MX" +"3508273664","3508274719","US" +"3508274720","3508274751","AR" +"3508274752","3508275199","US" +"3508275200","3508275327","IT" +"3508275328","3508275455","US" +"3508275456","3508275487","ZA" +"3508275488","3508276991","US" +"3508276992","3508277247","MX" +"3508277248","3508277343","US" +"3508277344","3508277375","CA" +"3508277376","3508277487","US" +"3508277488","3508277503","PR" +"3508277504","3508278527","US" +"3508278528","3508278783","AU" +"3508278784","3508279039","US" +"3508279040","3508279295","VE" +"3508279296","3508279551","US" +"3508279552","3508279807","CO" +"3508279808","3508280063","JP" +"3508280064","3508280319","TH" +"3508280320","3508280575","JP" +"3508280576","3508280831","TW" +"3508280832","3508281087","JP" +"3508281088","3508281343","KR" +"3508281344","3508281599","PH" +"3508281600","3508281855","NZ" +"3508281856","3508282047","US" +"3508282048","3508282111","SG" +"3508282112","3508282367","HK" +"3508282368","3508282591","US" +"3508282592","3508282623","IT" +"3508282624","3508282879","AU" +"3508282880","3508282887","KP" +"3508282888","3508283135","US" +"3508283136","3508283391","HK" +"3508283392","3508283647","US" +"3508283648","3508283903","AU" +"3508283904","3508284159","MY" +"3508284160","3508284415","SG" +"3508284416","3508284671","AU" +"3508284672","3508284735","JP" +"3508284736","3508284927","US" +"3508284928","3508284991","ES" +"3508284992","3508285087","US" +"3508285088","3508285095","ES" +"3508285096","3508285119","US" +"3508285120","3508285151","ES" +"3508285152","3508285823","US" +"3508285824","3508285855","ES" +"3508285856","3508285887","US" +"3508285888","3508285951","GB" +"3508285952","3508286015","NL" +"3508286016","3508286079","US" +"3508286080","3508286111","NL" +"3508286112","3508286207","US" +"3508286208","3508286463","SE" +"3508286464","3508286719","HK" +"3508286720","3508286847","US" +"3508286848","3508286863","TW" +"3508286864","3508286911","US" +"3508286912","3508286927","PH" +"3508286928","3508286943","US" +"3508286944","3508286975","ID" +"3508286976","3508287039","TH" +"3508287040","3508287055","US" +"3508287056","3508287063","TH" +"3508287064","3508287103","US" +"3508287104","3508287167","HK" +"3508287168","3508287231","US" +"3508287232","3508287263","HK" +"3508287264","3508287295","US" +"3508287296","3508287359","HK" +"3508287360","3508287999","US" +"3508288000","3508288127","MY" +"3508288128","3508288255","SG" +"3508288256","3508288511","JP" +"3508288512","3508288767","US" +"3508288768","3508289023","BR" +"3508289024","3508289279","AU" +"3508289280","3508289343","BR" +"3508289344","3508289407","US" +"3508289408","3508289471","BR" +"3508289472","3508289535","US" +"3508289536","3508289791","CA" +"3508289792","3508290847","US" +"3508290848","3508290879","MX" +"3508290880","3508290895","US" +"3508290896","3508290911","BR" +"3508290912","3508290927","US" +"3508290928","3508290943","BR" +"3508290944","3508291263","US" +"3508291264","3508291327","IT" +"3508291328","3508292095","GB" +"3508292096","3508292351","CH" +"3508292352","3508292415","US" +"3508292416","3508292447","CL" +"3508292448","3508292863","US" +"3508292864","3508294143","DE" +"3508294144","3508295439","US" +"3508295440","3508295487","BR" +"3508295488","3508295519","GB" +"3508295520","3508295551","US" +"3508295552","3508295615","BR" +"3508295616","3508295631","ES" +"3508295632","3508295679","US" +"3508295680","3508295935","GB" +"3508295936","3508295999","US" +"3508296000","3508296015","BR" +"3508296016","3508296095","US" +"3508296096","3508296127","BR" +"3508296128","3508296191","US" +"3508296192","3508296319","GB" +"3508296320","3508296447","US" +"3508296448","3508296479","GB" +"3508296480","3508296495","BE" +"3508296496","3508296543","US" +"3508296544","3508296559","SE" +"3508296560","3508296671","US" +"3508296672","3508296703","GB" +"3508296704","3508296767","FR" +"3508296768","3508296831","US" +"3508296832","3508296959","NO" +"3508296960","3508297215","CH" +"3508297216","3508297407","GB" +"3508297408","3508297471","SG" +"3508297472","3508297727","IT" +"3508297728","3508297791","CH" +"3508297792","3508298047","US" +"3508298048","3508298079","BE" +"3508298080","3508298111","US" +"3508298112","3508298159","BE" +"3508298160","3508298207","US" +"3508298208","3508298223","BE" +"3508298224","3508298239","US" +"3508298240","3508298495","DE" +"3508298496","3508298559","DK" +"3508298560","3508298623","US" +"3508298624","3508298655","DK" +"3508298656","3508298687","US" +"3508298688","3508298751","DK" +"3508298752","3508299007","ES" +"3508299008","3508299263","BE" +"3508299264","3508299519","GB" +"3508299520","3508299647","US" +"3508299648","3508299679","CH" +"3508299680","3508299775","US" +"3508299776","3508300031","SE" +"3508300032","3508300287","DE" +"3508300288","3508300543","US" +"3508300544","3508300799","FR" +"3508300800","3508300863","US" +"3508300864","3508300879","GB" +"3508300880","3508300895","US" +"3508300896","3508300911","GB" +"3508300912","3508301631","US" +"3508301632","3508301663","BR" +"3508301664","3508301823","US" +"3508301824","3508301951","GB" +"3508301952","3508301983","DK" +"3508301984","3508301999","IT" +"3508302000","3508302079","US" +"3508302080","3508302111","DE" +"3508302112","3508302207","US" +"3508302208","3508302223","DE" +"3508302224","3508302239","US" +"3508302240","3508302255","GB" +"3508302256","3508302335","US" +"3508302336","3508302463","SG" +"3508302464","3508302527","BE" +"3508302528","3508302623","US" +"3508302624","3508302687","BE" +"3508302688","3508303359","US" +"3508303360","3508303391","BE" +"3508303392","3508303423","US" +"3508303424","3508303439","BE" +"3508303440","3508303455","US" +"3508303456","3508303471","BE" +"3508303472","3508303487","US" +"3508303488","3508303551","ES" +"3508303552","3508303615","US" +"3508303616","3508303871","DE" +"3508303872","3508303903","US" +"3508303904","3508303935","CL" +"3508303936","3508303951","US" +"3508303952","3508303967","CO" +"3508303968","3508303983","US" +"3508303984","3508303999","BR" +"3508304000","3508304383","US" +"3508304384","3508304639","DE" +"3508304640","3508304703","IR" +"3508304704","3508304927","US" +"3508304928","3508304943","DE" +"3508304944","3508305151","US" +"3508305152","3508305215","NL" +"3508305216","3508305247","US" +"3508305248","3508305263","NL" +"3508305264","3508305791","US" +"3508305792","3508305823","CO" +"3508305824","3508305855","US" +"3508305856","3508305871","BE" +"3508305872","3508306431","US" +"3508306432","3508306687","EC" +"3508306688","3508306943","US" +"3508306944","3508307199","CH" +"3508307200","3508307455","US" +"3508307456","3508307711","AR" +"3508307712","3508308991","US" +"3508308992","3508309247","BE" +"3508309248","3508310527","SE" +"3508310528","3508310783","DE" +"3508310784","3508311039","BE" +"3508311040","3508311295","NL" +"3508311296","3508311807","IE" +"3508311808","3508311967","US" +"3508311968","3508311983","DE" +"3508311984","3508312063","US" +"3508312064","3508312319","NL" +"3508312320","3508312575","CH" +"3508312576","3508312591","ES" +"3508312592","3508312831","US" +"3508312832","3508313343","DE" +"3508313344","3508313599","SE" +"3508313600","3508313855","DK" +"3508313856","3508314367","GB" +"3508314368","3508314623","IT" +"3508314624","3508314879","DK" +"3508314880","3508314911","US" +"3508314912","3508314927","FR" +"3508314928","3508314943","US" +"3508314944","3508314959","CH" +"3508314960","3508314975","PT" +"3508314976","3508315135","US" +"3508315136","3508315391","NO" +"3508315392","3508315647","US" +"3508315648","3508315903","FR" +"3508315904","3508316159","US" +"3508316160","3508316415","PT" +"3508316416","3508316671","GB" +"3508316672","3508316927","RU" +"3508316928","3508317183","SE" +"3508317184","3508317199","US" +"3508317200","3508317207","RU" +"3508317208","3508317231","US" +"3508317232","3508317247","AT" +"3508317248","3508317375","US" +"3508317376","3508317439","FR" +"3508317440","3508317695","DE" +"3508317696","3508317951","US" +"3508317952","3508318463","FI" +"3508318464","3508318719","LU" +"3508318720","3508318975","IT" +"3508318976","3508319487","IL" +"3508319488","3508319743","RU" +"3508319744","3508319999","CH" +"3508320000","3508320255","SE" +"3508320256","3508320383","PT" +"3508320384","3508320511","US" +"3508320512","3508320527","DE" +"3508320528","3508320543","PT" +"3508320544","3508320767","US" +"3508320768","3508321791","BE" +"3508321792","3508321823","NL" +"3508321824","3508321855","ZA" +"3508321856","3508321871","FR" +"3508321872","3508321887","SE" +"3508321888","3508322111","US" +"3508322112","3508322143","PL" +"3508322144","3508322175","US" +"3508322176","3508322191","CH" +"3508322192","3508322239","US" +"3508322240","3508322303","CH" +"3508322304","3508322559","GB" +"3508322560","3508322815","FI" +"3508322816","3508323071","NO" +"3508323072","3508323135","DE" +"3508323136","3508323327","US" +"3508323328","3508323583","NO" +"3508323584","3508323839","DE" +"3508323840","3508324095","FI" +"3508324096","3508324351","IT" +"3508324352","3508324607","CH" +"3508324608","3508324863","NO" +"3508324864","3508325119","GB" +"3508325120","3508325375","DE" +"3508325376","3508325471","GR" +"3508325472","3508325503","US" +"3508325504","3508325567","GB" +"3508325568","3508325631","US" +"3508325632","3508325887","ZA" +"3508325888","3508326399","SE" +"3508326400","3508326655","GB" +"3508326656","3508326911","ZA" +"3508326912","3508327167","IT" +"3508327168","3508327679","ES" +"3508327680","3508327935","US" +"3508327936","3508328447","NE" +"3508328448","3508328703","BE" +"3508328704","3508329471","IL" +"3508329472","3508329727","NL" +"3508329728","3508329983","FR" +"3508329984","3508330495","SE" +"3508330496","3508331263","GB" +"3508331264","3508331519","BE" +"3508331520","3508331583","FR" +"3508331584","3508331711","US" +"3508331712","3508331743","FR" +"3508331744","3508331775","US" +"3508331776","3508331807","IT" +"3508331808","3508331839","US" +"3508331840","3508331871","AT" +"3508331872","3508332031","US" +"3508332032","3508332287","GB" +"3508332288","3508332543","GR" +"3508332544","3508332799","IE" +"3508332800","3508333055","NO" +"3508333056","3508333183","GB" +"3508333184","3508333311","US" +"3508333312","3508333823","CH" +"3508333824","3508333951","GB" +"3508333952","3508334079","US" +"3508334080","3508334207","GB" +"3508334208","3508334335","US" +"3508334336","3508334463","DE" +"3508334464","3508334527","GB" +"3508334528","3508334591","US" +"3508334592","3508334847","AU" +"3508334848","3508335103","SG" +"3508335104","3508335359","MY" +"3508335360","3508335615","AU" +"3508335616","3508336127","JP" +"3508336128","3508336383","SG" +"3508336384","3508336639","HK" +"3508336640","3508336895","AU" +"3508336896","3508337151","JP" +"3508337152","3508337663","PH" +"3508337664","3508337919","KR" +"3508337920","3508338175","JP" +"3508338176","3508338303","HK" +"3508338304","3508338335","ID" +"3508338336","3508338367","US" +"3508338368","3508338399","SG" +"3508338400","3508338431","US" +"3508338432","3508338687","KR" +"3508338688","3508404223","CA" +"3508404224","3508690943","US" +"3508690944","3508695039","CA" +"3508695040","3508729935","US" +"3508729936","3508729951","GB" +"3508729952","3508761120","US" +"3508761121","3508761136","BE" +"3508761137","3508761184","US" +"3508761185","3508761200","BE" +"3508761201","3508780079","US" +"3508780080","3508780111","NL" +"3508780112","3508780623","US" +"3508780624","3508780639","IT" +"3508780640","3509151375","US" +"3509151376","3509151391","CA" +"3509151392","3509151407","US" +"3509151408","3509151423","CA" +"3509151424","3509151439","US" +"3509151440","3509151455","CA" +"3509151456","3509151663","US" +"3509151664","3509151679","PA" +"3509151680","3509151695","US" +"3509151696","3509151727","MX" +"3509151728","3509157887","US" +"3509157888","3509166079","CA" +"3509166080","3509215231","US" +"3509215232","3509223423","CA" +"3509223424","3509305599","US" +"3509305600","3509305615","GB" +"3509305616","3509326079","US" +"3509326080","3509326087","CA" +"3509326088","3509327695","US" +"3509327696","3509327711","CA" +"3509327712","3509327807","US" +"3509327808","3509327871","CA" +"3509327872","3509346303","US" +"3509346304","3509347615","CA" +"3509347616","3509347623","A1" +"3509347624","3509350711","CA" +"3509350712","3509350719","US" +"3509350720","3509354495","CA" +"3509354496","3509387263","US" +"3509387264","3509420031","PE" +"3509420032","3509518591","US" +"3509518592","3509518815","CA" +"3509518816","3509518831","US" +"3509518832","3509519359","CA" +"3509519360","3509519423","US" +"3509519424","3509519647","CA" +"3509519648","3509519679","US" +"3509519680","3509519711","CA" +"3509519712","3509519727","US" +"3509519728","3509520511","CA" +"3509520512","3509520639","US" +"3509520640","3509520831","CA" +"3509520832","3509520895","US" +"3509520896","3509521151","CA" +"3509521152","3509521407","US" +"3509521408","3509521791","CA" +"3509521792","3509521919","US" +"3509521920","3509522431","CA" +"3509522432","3509522687","KW" +"3509522688","3509523071","CA" +"3509523072","3509523199","US" +"3509523200","3509523327","CA" +"3509523328","3509523391","US" +"3509523392","3509523455","CA" +"3509523456","3509523471","US" +"3509523472","3509523775","CA" +"3509523776","3509523839","US" +"3509523840","3509523903","CA" +"3509523904","3509524223","US" +"3509524224","3509524735","CA" +"3509524736","3509524991","US" +"3509524992","3509525823","CA" +"3509525824","3509525887","US" +"3509525888","3509526815","CA" +"3509526816","3509526879","US" +"3509526880","3509527071","CA" +"3509527072","3509527119","US" +"3509527120","3509527199","CA" +"3509527200","3509527215","US" +"3509527216","3509527551","CA" +"3509527552","3509527807","US" +"3509527808","3509528207","CA" +"3509528208","3509528223","US" +"3509528224","3509528319","CA" +"3509528320","3509528831","US" +"3509528832","3509529343","CA" +"3509529344","3509529599","US" +"3509529600","3509529727","CA" +"3509529728","3509529823","US" +"3509529824","3509529887","CA" +"3509529888","3509529951","US" +"3509529952","3509530239","CA" +"3509530240","3509530367","US" +"3509530368","3509530559","CA" +"3509530560","3509530623","US" +"3509530624","3509532671","CA" +"3509532672","3509532927","US" +"3509532928","3509533471","CA" +"3509533472","3509533535","US" +"3509533536","3509533567","CA" +"3509533568","3509533599","US" +"3509533600","3509533823","CA" +"3509533824","3509534335","US" +"3509534336","3509534367","CA" +"3509534368","3509534719","US" +"3509534720","3509535535","CA" +"3509535536","3509535551","US" +"3509535552","3509535663","CA" +"3509535664","3509535679","US" +"3509535680","3509536895","CA" +"3509536896","3509537023","US" +"3509537024","3509538335","CA" +"3509538336","3509538351","US" +"3509538352","3509538399","CA" +"3509538400","3509538415","US" +"3509538416","3509538447","CA" +"3509538448","3509538463","NO" +"3509538464","3509538815","CA" +"3509538816","3509539071","US" +"3509539072","3509539327","CA" +"3509539328","3509539583","US" +"3509539584","3509539679","CA" +"3509539680","3509539695","US" +"3509539696","3509539727","CA" +"3509539728","3509539743","US" +"3509539744","3509539823","CA" +"3509539824","3509539839","US" +"3509539840","3509539903","CA" +"3509539904","3509539967","US" +"3509539968","3509540095","CA" +"3509540096","3509540127","US" +"3509540128","3509540351","CA" +"3509540352","3509540607","US" +"3509540608","3509541663","CA" +"3509541664","3509541695","US" +"3509541696","3509541951","CA" +"3509541952","3509541999","US" +"3509542000","3509542063","CA" +"3509542064","3509542079","US" +"3509542080","3509542399","CA" +"3509542400","3509542655","US" +"3509542656","3509544447","CA" +"3509544448","3509544703","US" +"3509544704","3509545151","CA" +"3509545152","3509545471","US" +"3509545472","3509545999","CA" +"3509546000","3509546015","US" +"3509546016","3509546031","CA" +"3509546032","3509546063","US" +"3509546064","3509546159","CA" +"3509546160","3509546175","US" +"3509546176","3509546207","CA" +"3509546208","3509546223","US" +"3509546224","3509549823","CA" +"3509549824","3509550079","US" +"3509550080","3509553151","CA" +"3509553152","3509553407","US" +"3509553408","3509553855","CA" +"3509553856","3509553919","US" +"3509553920","3509554047","CA" +"3509554048","3509554111","US" +"3509554112","3509555119","CA" +"3509555120","3509555135","US" +"3509555136","3509557439","CA" +"3509557440","3509557759","US" +"3509557760","3509558367","CA" +"3509558368","3509558399","US" +"3509558400","3509558463","CA" +"3509558464","3509558495","US" +"3509558496","3509558527","CA" +"3509558528","3509558559","US" +"3509558560","3509558783","CA" +"3509558784","3509559039","US" +"3509559040","3509559295","KW" +"3509559296","3509560319","CA" +"3509560320","3509560703","US" +"3509560704","3509561215","CA" +"3509561216","3509561279","US" +"3509561280","3509562623","CA" +"3509562624","3509562751","US" +"3509562752","3509562879","CA" +"3509562880","3509563167","US" +"3509563168","3509565087","CA" +"3509565088","3509565119","US" +"3509565120","3509566799","CA" +"3509566800","3509566815","US" +"3509566816","3509566847","CA" +"3509566848","3509566863","US" +"3509566864","3509566927","CA" +"3509566928","3509566943","US" +"3509566944","3509567151","CA" +"3509567152","3509567167","US" +"3509567168","3509567199","CA" +"3509567200","3509567231","US" +"3509567232","3509569023","CA" +"3509569024","3509569535","US" +"3509569536","3509569663","CA" +"3509569664","3509569791","US" +"3509569792","3509569919","CA" +"3509569920","3509570047","US" +"3509570048","3509570079","CA" +"3509570080","3509570111","US" +"3509570112","3509570431","CA" +"3509570432","3509570687","US" +"3509570688","3509571327","CA" +"3509571328","3509571647","US" +"3509571648","3509571663","CA" +"3509571664","3509571839","US" +"3509571840","3509572095","CA" +"3509572096","3509572223","US" +"3509572224","3509573487","CA" +"3509573488","3509573503","US" +"3509573504","3509573887","CA" +"3509573888","3509573919","US" +"3509573920","3509575695","CA" +"3509575696","3509575999","US" +"3509576000","3509576063","CA" +"3509576064","3509576191","US" +"3509576192","3509576255","CA" +"3509576256","3509576271","US" +"3509576272","3509576703","CA" +"3509576704","3509576959","US" +"3509576960","3509577407","CA" +"3509577408","3509577471","US" +"3509577472","3509577535","CA" +"3509577536","3509577551","US" +"3509577552","3509577631","CA" +"3509577632","3509577647","US" +"3509577648","3509577695","CA" +"3509577696","3509577711","US" +"3509577712","3509577727","CA" +"3509577728","3509577983","US" +"3509577984","3509578367","CA" +"3509578368","3509578495","US" +"3509578496","3509579263","CA" +"3509579264","3509579327","US" +"3509579328","3509579455","CA" +"3509579456","3509579519","US" +"3509579520","3509579775","CA" +"3509579776","3509580031","US" +"3509580032","3509580287","CA" +"3509580288","3509580671","US" +"3509580672","3509581087","CA" +"3509581088","3509581119","US" +"3509581120","3509581199","CA" +"3509581200","3509581215","US" +"3509581216","3509581231","CA" +"3509581232","3509581247","US" +"3509581248","3509581263","CA" +"3509581264","3509581279","US" +"3509581280","3509581375","CA" +"3509581376","3509581407","US" +"3509581408","3509581503","CA" +"3509581504","3509581567","US" +"3509581568","3509581823","CA" +"3509581824","3509582335","US" +"3509582336","3509582847","CA" +"3509582848","3509583615","US" +"3509583616","3509583871","CA" +"3509583872","3509731327","US" +"3509731328","3509739519","CA" +"3509739520","3509773991","US" +"3509773992","3509774003","GR" +"3509774004","3509774013","US" +"3509774014","3509774033","GB" +"3509774034","3509774120","US" +"3509774121","3509774135","GB" +"3509774136","3509774138","US" +"3509774139","3509774163","GB" +"3509774164","3509774263","US" +"3509774264","3509774295","HR" +"3509774296","3509774575","US" +"3509774576","3509774591","GR" +"3509774592","3509775104","US" +"3509775105","3509775120","CA" +"3509775121","3509775296","US" +"3509775297","3509775312","GB" +"3509775313","3509775444","US" +"3509775445","3509775454","TH" +"3509775455","3509775477","US" +"3509775478","3509775492","CA" +"3509775493","3509775504","US" +"3509775505","3509775520","NL" +"3509775521","3509775536","US" +"3509775537","3509775552","DK" +"3509775553","3509775584","US" +"3509775585","3509775614","DE" +"3509775615","3509775616","US" +"3509775617","3509775648","DE" +"3509775649","3509775664","CA" +"3509775665","3509775792","US" +"3509775793","3509775870","CA" +"3509775871","3509775903","US" +"3509775904","3509775919","AU" +"3509775920","3509775943","US" +"3509775944","3509775951","IT" +"3509775952","3509776023","US" +"3509776024","3509776031","CA" +"3509776032","3509776047","US" +"3509776048","3509776055","SA" +"3509776056","3509776095","US" +"3509776096","3509776103","AU" +"3509776104","3509776111","US" +"3509776112","3509776119","IT" +"3509776120","3509777159","US" +"3509777160","3509777167","CN" +"3509777168","3509777175","RU" +"3509777176","3509777215","US" +"3509777216","3509777223","TH" +"3509777224","3509777271","US" +"3509777272","3509777279","IT" +"3509777280","3509777449","US" +"3509777450","3509777545","ID" +"3509777546","3509777584","US" +"3509777585","3509777648","ID" +"3509777649","3509778239","US" +"3509778240","3509778271","IN" +"3509778272","3509778703","US" +"3509778704","3509778711","CA" +"3509778712","3509778847","US" +"3509778848","3509778855","CO" +"3509778856","3509778903","US" +"3509778904","3509778911","RU" +"3509778912","3509778919","US" +"3509778920","3509778927","GB" +"3509778928","3509779007","US" +"3509779008","3509779039","IN" +"3509779040","3509822335","US" +"3509822336","3509822351","DE" +"3509822352","3509829503","US" +"3509829504","3509829535","GB" +"3509829536","3509830287","US" +"3509830288","3509830295","BE" +"3509830296","3509830407","US" +"3509830408","3509830415","GB" +"3509830416","3509830943","US" +"3509830944","3509830951","BE" +"3509830952","3509831135","US" +"3509831136","3509831143","IN" +"3509831144","3509831535","US" +"3509831536","3509831551","LB" +"3509831552","3509831615","US" +"3509831616","3509831647","IL" +"3509831648","3509831735","US" +"3509831736","3509831743","AT" +"3509831744","3509831807","US" +"3509831808","3509831815","IN" +"3509831816","3509831823","CA" +"3509831824","3509833103","US" +"3509833104","3509833111","IN" +"3509833112","3509833535","US" +"3509833536","3509833543","CA" +"3509833544","3509833551","IN" +"3509833552","3509833703","US" +"3509833704","3509833711","ZA" +"3509833712","3509834111","US" +"3509834112","3509834143","IL" +"3509834144","3509834495","US" +"3509834496","3509834503","NO" +"3509834504","3509834519","US" +"3509834520","3509834527","BD" +"3509834528","3509834591","US" +"3509834592","3509834599","IN" +"3509834600","3509834831","US" +"3509834832","3509834847","CO" +"3509834848","3509835103","US" +"3509835104","3509835111","GB" +"3509835112","3509837167","US" +"3509837168","3509837175","GB" +"3509837176","3509837623","US" +"3509837624","3509837639","GB" +"3509837640","3509837751","US" +"3509837752","3509837759","GB" +"3509837760","3509846015","US" +"3509846016","3509977087","CA" +"3509977088","3509988864","US" +"3509988865","3509989119","IN" +"3509989120","3509989120","US" +"3509989121","3509989375","IN" +"3509989376","3509993471","US" +"3509993472","3509997567","CA" +"3509997568","3510005759","US" +"3510005760","3510009855","CA" +"3510009856","3510010311","US" +"3510010312","3510010319","CA" +"3510010320","3510239231","US" +"3510239232","3510240607","CA" +"3510240608","3510240639","US" +"3510240640","3510240703","CA" +"3510240704","3510240735","AM" +"3510240736","3510240767","CA" +"3510240768","3510241023","US" +"3510241024","3510241063","CA" +"3510241064","3510241071","US" +"3510241072","3510242303","CA" +"3510242304","3510242559","OM" +"3510242560","3510245375","CA" +"3510245376","3510245631","BD" +"3510245632","3510246728","CA" +"3510246729","3510246729","US" +"3510246730","3510246735","CA" +"3510246736","3510246775","US" +"3510246776","3510249471","CA" +"3510249472","3510249983","QA" +"3510249984","3510251519","CA" +"3510251520","3510252799","DO" +"3510252800","3510253311","CA" +"3510253312","3510253567","NC" +"3510253568","3510253631","US" +"3510253632","3510253759","CA" +"3510253760","3510253775","US" +"3510253776","3510255423","CA" +"3510255424","3510255447","US" +"3510255448","3510261503","CA" +"3510261504","3510261759","ZM" +"3510261760","3510262783","CA" +"3510262784","3510263039","US" +"3510263040","3510264063","CA" +"3510264064","3510264319","UG" +"3510264320","3510268671","CA" +"3510268672","3510268927","SY" +"3510268928","3510269823","CA" +"3510269824","3510269951","CO" +"3510269952","3510270719","LY" +"3510270720","3510270975","SY" +"3510270976","3510271999","CA" +"3510272000","3510284423","US" +"3510284424","3510284431","CA" +"3510284432","3510312959","US" +"3510312960","3510321151","A1" +"3510321152","3510321663","VG" +"3510321664","3510321919","AG" +"3510321920","3510322175","KN" +"3510322176","3510323199","AG" +"3510323200","3510324223","KN" +"3510324224","3510325247","AI" +"3510325248","3510326271","AG" +"3510326272","3510327295","VG" +"3510327296","3510328319","AG" +"3510328320","3510328575","KN" +"3510328576","3510328831","MS" +"3510328832","3510329279","AG" +"3510329280","3510329295","MS" +"3510329296","3510329303","AG" +"3510329304","3510329311","MS" +"3510329312","3510329599","AG" +"3510329600","3510329855","MS" +"3510329856","3510331391","AG" +"3510331392","3510332415","DM" +"3510332416","3510332927","KN" +"3510332928","3510333183","LC" +"3510333184","3510333439","MS" +"3510333440","3510333951","KN" +"3510333952","3510334975","AG" +"3510334976","3510335231","KN" +"3510335232","3510335743","AI" +"3510335744","3510335999","VG" +"3510336000","3510337279","AG" +"3510337280","3510337535","LC" +"3510337536","3510468631","US" +"3510468632","3510468639","GB" +"3510468640","3510468719","US" +"3510468720","3510468727","MX" +"3510468728","3510468847","US" +"3510468848","3510468855","MX" +"3510468856","3510468895","US" +"3510468896","3510468903","CA" +"3510468904","3510468911","ID" +"3510468912","3510469023","US" +"3510469024","3510469039","AG" +"3510469040","3510469055","US" +"3510469056","3510469063","CA" +"3510469064","3510469071","US" +"3510469072","3510469087","AU" +"3510469088","3510469095","RU" +"3510469096","3510469103","CA" +"3510469104","3510469119","BS" +"3510469120","3510469167","US" +"3510469168","3510469175","FR" +"3510469176","3510469183","BE" +"3510469184","3510469191","US" +"3510469192","3510469199","AU" +"3510469200","3510469223","US" +"3510469224","3510469231","AU" +"3510469232","3510469247","US" +"3510469248","3510469263","ID" +"3510469264","3510469279","US" +"3510469280","3510469295","MY" +"3510469296","3510469343","US" +"3510469344","3510469351","GB" +"3510469352","3510469359","US" +"3510469360","3510469367","CH" +"3510469368","3510469375","GR" +"3510469376","3510469399","US" +"3510469400","3510469407","BE" +"3510469408","3510469487","US" +"3510469488","3510469495","CA" +"3510469496","3510469519","US" +"3510469520","3510469527","IN" +"3510469528","3510469599","US" +"3510469600","3510469607","CA" +"3510469608","3510469615","VG" +"3510469616","3510469623","US" +"3510469624","3510469631","DE" +"3510469632","3510469719","US" +"3510469720","3510469727","CA" +"3510469728","3510469743","AU" +"3510469744","3510469751","CH" +"3510469752","3510469767","US" +"3510469768","3510469775","IN" +"3510469776","3510469815","US" +"3510469816","3510469831","CA" +"3510469832","3510469855","US" +"3510469856","3510469863","UM" +"3510469864","3510469871","CA" +"3510469872","3510469887","IN" +"3510469888","3510469895","US" +"3510469896","3510469903","IN" +"3510469904","3510469919","US" +"3510469920","3510469927","GB" +"3510469928","3510469975","US" +"3510469976","3510469983","IN" +"3510469984","3510469991","CA" +"3510469992","3510469999","GB" +"3510470000","3510470031","US" +"3510470032","3510470039","CA" +"3510470040","3510470047","RU" +"3510470048","3510470055","CA" +"3510470056","3510470063","MX" +"3510470064","3510470143","US" +"3510470144","3510470151","DK" +"3510470152","3510470159","US" +"3510470160","3510470175","DK" +"3510470176","3510470183","CA" +"3510470184","3510470295","US" +"3510470296","3510470319","CA" +"3510470320","3510470327","TW" +"3510470328","3510470359","US" +"3510470360","3510470367","TH" +"3510470368","3510470375","US" +"3510470376","3510470383","CH" +"3510470384","3510470455","US" +"3510470456","3510470463","GB" +"3510470464","3510470471","NL" +"3510470472","3510470623","US" +"3510470624","3510470631","BR" +"3510470632","3510470647","US" +"3510470648","3510470655","IN" +"3510470656","3510470775","US" +"3510470776","3510470783","GR" +"3510470784","3510470799","US" +"3510470800","3510470807","GB" +"3510470808","3510470815","US" +"3510470816","3510470831","GB" +"3510470832","3510470855","US" +"3510470856","3510470863","FR" +"3510470864","3510470871","US" +"3510470872","3510470879","AR" +"3510470880","3510470927","US" +"3510470928","3510470935","IL" +"3510470936","3510470959","US" +"3510470960","3510470975","IN" +"3510470976","3510470999","US" +"3510471000","3510471007","CH" +"3510471008","3510471039","BH" +"3510471040","3510471119","US" +"3510471120","3510471135","GB" +"3510471136","3510471183","US" +"3510471184","3510471199","CA" +"3510471200","3510471223","US" +"3510471224","3510471231","DE" +"3510471232","3510471311","US" +"3510471312","3510471319","IE" +"3510471320","3510471407","US" +"3510471408","3510471415","GR" +"3510471416","3510471431","US" +"3510471432","3510471439","AU" +"3510471440","3510471455","US" +"3510471456","3510471487","FR" +"3510471488","3510471511","US" +"3510471512","3510471519","HK" +"3510471520","3510471535","FR" +"3510471536","3510471607","US" +"3510471608","3510471615","DE" +"3510471616","3510471639","US" +"3510471640","3510471647","IN" +"3510471648","3510471703","US" +"3510471704","3510471711","JP" +"3510471712","3510471751","US" +"3510471752","3510471759","CA" +"3510471760","3510471791","US" +"3510471792","3510471799","IN" +"3510471800","3510471839","US" +"3510471840","3510471847","MX" +"3510471848","3510471871","US" +"3510471872","3510471887","VE" +"3510471888","3510471911","US" +"3510471912","3510471919","IN" +"3510471920","3510471951","US" +"3510471952","3510471959","ID" +"3510471960","3510471991","US" +"3510471992","3510471999","AR" +"3510472000","3510472007","IN" +"3510472008","3510472111","US" +"3510472112","3510472119","GB" +"3510472120","3510472191","US" +"3510472192","3510472207","IN" +"3510472208","3510472215","FR" +"3510472216","3510472223","CA" +"3510472224","3510472231","IT" +"3510472232","3510472239","SG" +"3510472240","3510472295","US" +"3510472296","3510472303","AE" +"3510472304","3510472447","US" +"3510472448","3510472463","IN" +"3510472464","3510472471","US" +"3510472472","3510472479","EG" +"3510472480","3510472511","US" +"3510472512","3510472575","AG" +"3510472576","3510472735","US" +"3510472736","3510472743","AR" +"3510472744","3510472751","US" +"3510472752","3510472767","AR" +"3510472768","3510472800","US" +"3510472801","3510472831","DE" +"3510472832","3510472919","US" +"3510472920","3510472927","NL" +"3510472928","3510473087","US" +"3510473088","3510473095","TR" +"3510473096","3510473103","US" +"3510473104","3510473119","VE" +"3510473120","3510473135","US" +"3510473136","3510473143","NZ" +"3510473144","3510473151","US" +"3510473152","3510473159","DE" +"3510473160","3510473175","US" +"3510473176","3510473183","FR" +"3510473184","3510473199","IE" +"3510473200","3510473215","US" +"3510473216","3510473223","IN" +"3510473224","3510473231","US" +"3510473232","3510473239","FR" +"3510473240","3510473343","US" +"3510473344","3510473383","DE" +"3510473384","3510473407","US" +"3510473408","3510473447","DE" +"3510473448","3510473463","US" +"3510473464","3510473471","NL" +"3510473472","3510473511","DE" +"3510473512","3510473607","US" +"3510473608","3510473615","ID" +"3510473616","3510473623","AU" +"3510473624","3510474431","US" +"3510474432","3510474447","TC" +"3510474448","3510474479","US" +"3510474480","3510474495","AU" +"3510474496","3510475151","US" +"3510475152","3510475159","AU" +"3510475160","3510475167","SE" +"3510475168","3510477063","US" +"3510477064","3510477071","GB" +"3510477072","3510477087","US" +"3510477088","3510477111","GB" +"3510477112","3510477311","US" +"3510477312","3510477319","IN" +"3510477320","3510477327","US" +"3510477328","3510477335","GB" +"3510477336","3510477343","MO" +"3510477344","3510477375","AG" +"3510477376","3510477487","US" +"3510477488","3510477495","IN" +"3510477496","3510477503","US" +"3510477504","3510477519","GB" +"3510477520","3510477535","US" +"3510477536","3510477543","GB" +"3510477544","3510477815","US" +"3510477816","3510477823","GB" +"3510477824","3510477903","US" +"3510477904","3510477911","IT" +"3510477912","3510477919","US" +"3510477920","3510477927","NL" +"3510477928","3510477975","US" +"3510477976","3510477983","AR" +"3510477984","3510478007","US" +"3510478008","3510478015","IN" +"3510478016","3510478023","CA" +"3510478024","3510478127","US" +"3510478128","3510478135","GB" +"3510478136","3510478143","US" +"3510478144","3510478175","FI" +"3510478176","3510478231","US" +"3510478232","3510478239","IN" +"3510478240","3510478271","US" +"3510478272","3510478279","MT" +"3510478280","3510478311","US" +"3510478312","3510478319","FI" +"3510478320","3510478495","US" +"3510478496","3510478527","FR" +"3510478528","3510478535","US" +"3510478536","3510478543","GB" +"3510478544","3510478551","US" +"3510478552","3510478559","VE" +"3510478560","3510478567","NL" +"3510478568","3510478591","US" +"3510478592","3510478599","MX" +"3510478600","3510478631","US" +"3510478632","3510478639","GB" +"3510478640","3510478655","US" +"3510478656","3510478663","GB" +"3510478664","3510478671","US" +"3510478672","3510478719","AU" +"3510478720","3510478735","US" +"3510478736","3510478751","LB" +"3510478752","3510478775","US" +"3510478776","3510478783","CR" +"3510478784","3510478855","US" +"3510478856","3510478863","IN" +"3510478864","3510478903","US" +"3510478904","3510478919","GB" +"3510478920","3510478943","US" +"3510478944","3510478951","IN" +"3510478952","3510479095","US" +"3510479096","3510479103","GB" +"3510479104","3510479359","GU" +"3510479360","3510479407","US" +"3510479408","3510479415","CA" +"3510479416","3510479439","US" +"3510479440","3510479447","CA" +"3510479448","3510479455","GI" +"3510479456","3510479503","US" +"3510479504","3510479511","AU" +"3510479512","3510479519","US" +"3510479520","3510479535","LB" +"3510479536","3510479575","US" +"3510479576","3510479583","GI" +"3510479584","3510479791","US" +"3510479792","3510479799","IE" +"3510479800","3510479831","US" +"3510479832","3510479839","DE" +"3510479840","3510479855","US" +"3510479856","3510479863","DE" +"3510479864","3510479879","US" +"3510479880","3510479887","DE" +"3510479888","3510479903","US" +"3510479904","3510479919","ES" +"3510479920","3510479935","US" +"3510479936","3510479943","MY" +"3510479944","3510479951","US" +"3510479952","3510479959","AU" +"3510479960","3510479967","US" +"3510479968","3510479975","AE" +"3510479976","3510479991","US" +"3510479992","3510479999","SG" +"3510480000","3510480047","US" +"3510480048","3510480055","FR" +"3510480056","3510480103","US" +"3510480104","3510480111","CA" +"3510480112","3510480119","MX" +"3510480120","3510480415","US" +"3510480416","3510480423","GB" +"3510480424","3510480431","VE" +"3510480432","3510480439","US" +"3510480440","3510480447","BZ" +"3510480448","3510480527","US" +"3510480528","3510480535","GB" +"3510480536","3510480543","US" +"3510480544","3510480560","AT" +"3510480561","3510480561","US" +"3510480562","3510480575","AT" +"3510480576","3510480655","US" +"3510480656","3510480663","IN" +"3510480664","3510480671","US" +"3510480672","3510480735","AU" +"3510480736","3510480815","US" +"3510480816","3510480823","IN" +"3510480824","3510480839","US" +"3510480840","3510480847","IN" +"3510480848","3510480959","US" +"3510480960","3510480967","GB" +"3510480968","3510480991","US" +"3510480992","3510481023","CR" +"3510481024","3510481191","US" +"3510481192","3510481199","GB" +"3510481200","3510481215","US" +"3510481216","3510481231","CA" +"3510481232","3510481295","US" +"3510481296","3510481311","AU" +"3510481312","3510481319","FR" +"3510481320","3510481359","US" +"3510481360","3510481375","ES" +"3510481376","3510481407","US" +"3510481408","3510481415","MY" +"3510481416","3510481679","US" +"3510481680","3510481687","AU" +"3510481688","3510481711","US" +"3510481712","3510481719","CA" +"3510481720","3510481727","JP" +"3510481728","3510481743","AU" +"3510481744","3510481863","US" +"3510481864","3510481871","CA" +"3510481872","3510481919","US" +"3510481920","3510481927","MX" +"3510481928","3510482111","US" +"3510482112","3510482143","CA" +"3510482144","3510482151","AR" +"3510482152","3510788447","US" +"3510788448","3510788479","GB" +"3510788480","3510831527","US" +"3510831528","3510831535","GB" +"3510831536","3510833423","US" +"3510833424","3510833439","CA" +"3510833440","3510836671","US" +"3510836672","3510836687","CA" +"3510836688","3510839135","US" +"3510839136","3510839151","GB" +"3510839152","3510839215","US" +"3510839216","3510839231","GB" +"3510839232","3510839311","US" +"3510839312","3510839327","IN" +"3510839328","3510843087","US" +"3510843088","3510843095","CA" +"3510843096","3510843103","GB" +"3510843104","3510844415","US" +"3510844416","3510844927","CA" +"3510844928","3510846527","US" +"3510846528","3510846559","CA" +"3510846560","3510897442","US" +"3510897443","3510897443","IE" +"3510897444","3510935551","US" +"3510935552","3510943743","CA" +"3510943744","3511129087","US" +"3511129088","3511131135","CA" +"3511131136","3511140351","US" +"3511140352","3511156735","CA" +"3511156736","3511331199","US" +"3511331200","3511331231","CA" +"3511331232","3511335231","US" +"3511335232","3511335263","RU" +"3511335264","3511335295","US" +"3511335296","3511335423","RU" +"3511335424","3511419951","US" +"3511419952","3511419959","UA" +"3511419960","3511812095","US" +"3511812096","3511844863","CA" +"3511844864","3512011311","US" +"3512011312","3512011327","UM" +"3512011328","3512011359","US" +"3512011360","3512011375","TR" +"3512011376","3512011807","US" +"3512011808","3512011823","TW" +"3512011824","3512011855","US" +"3512011856","3512011871","SE" +"3512011872","3512012095","US" +"3512012096","3512012159","GB" +"3512012160","3512012175","MX" +"3512012176","3512012255","US" +"3512012256","3512012287","GB" +"3512012288","3512013583","US" +"3512013584","3512013599","CA" +"3512013600","3512013647","US" +"3512013648","3512013663","CA" +"3512013664","3512013679","US" +"3512013680","3512013695","GR" +"3512013696","3512016543","US" +"3512016544","3512016559","IT" +"3512016560","3512016575","US" +"3512016576","3512016591","TW" +"3512016592","3512016607","US" +"3512016608","3512016623","CA" +"3512016624","3512016767","GB" +"3512016768","3512016831","US" +"3512016832","3512016895","JO" +"3512016896","3512017183","US" +"3512017184","3512017199","AR" +"3512017200","3512017231","US" +"3512017232","3512017247","ES" +"3512017248","3512017263","MX" +"3512017264","3512017279","GB" +"3512017280","3512017359","US" +"3512017360","3512017375","RU" +"3512017376","3512017407","GB" +"3512017408","3512017663","BR" +"3512017664","3512017695","CA" +"3512017696","3512017727","RU" +"3512017728","3512017743","US" +"3512017744","3512017759","IT" +"3512017760","3512017791","US" +"3512017792","3512017807","LT" +"3512017808","3512017823","US" +"3512017824","3512017855","JO" +"3512017856","3512019071","US" +"3512019072","3512019135","GB" +"3512019136","3512019151","MX" +"3512019152","3512019199","US" +"3512019200","3512019263","ES" +"3512019264","3512019295","US" +"3512019296","3512019311","CA" +"3512019312","3512019327","US" +"3512019328","3512019359","CA" +"3512019360","3512020095","US" +"3512020096","3512020223","ES" +"3512020224","3512020479","US" +"3512020480","3512020511","GB" +"3512020512","3512021503","US" +"3512021504","3512021759","GB" +"3512021760","3512022335","US" +"3512022336","3512022399","ES" +"3512022400","3512022431","US" +"3512022432","3512022447","IN" +"3512022448","3512022463","GB" +"3512022464","3512023807","US" +"3512023808","3512023839","CA" +"3512023840","3512023855","GB" +"3512023856","3512023887","US" +"3512023888","3512023903","MX" +"3512023904","3512023999","US" +"3512024000","3512024063","BR" +"3512024064","3512024319","US" +"3512024320","3512024575","AU" +"3512024576","3512024591","CA" +"3512024592","3512025087","US" +"3512025088","3512025103","CA" +"3512025104","3512025183","US" +"3512025184","3512025215","CA" +"3512025216","3512025343","US" +"3512025344","3512025359","CA" +"3512025360","3512027391","US" +"3512027392","3512027519","AU" +"3512027520","3512028271","US" +"3512028272","3512028287","GB" +"3512028288","3512029119","US" +"3512029120","3512029135","CA" +"3512029136","3512029263","US" +"3512029264","3512029279","CA" +"3512029280","3512031295","US" +"3512031296","3512031359","JO" +"3512031360","3512031375","CA" +"3512031376","3512031535","US" +"3512031536","3512031551","CA" +"3512031552","3512031759","US" +"3512031760","3512031775","CA" +"3512031776","3512037247","US" +"3512037248","3512037311","AU" +"3512037312","3512038863","US" +"3512038864","3512038879","CA" +"3512038880","3512040143","US" +"3512040144","3512040159","CA" +"3512040160","3512043519","US" +"3512043520","3512043775","FI" +"3512043776","3512045055","US" +"3512045056","3512045311","IE" +"3512045312","3512052735","US" +"3512052736","3512052991","FI" +"3512052992","3512053247","US" +"3512053248","3512053503","MY" +"3512053504","3512066559","US" +"3512066560","3512066815","BE" +"3512066816","3512067071","US" +"3512067072","3512067327","BE" +"3512067328","3512139775","US" +"3512139776","3512156159","CA" +"3512156160","3512172543","US" +"3512172544","3512176639","CA" +"3512176640","3512197119","US" +"3512197120","3512205311","CA" +"3512205312","3512205567","US" +"3512205568","3512205823","CL" +"3512205824","3512206079","AW" +"3512206080","3512206335","CL" +"3512206336","3512207103","HN" +"3512207104","3512207231","NI" +"3512207232","3512207359","US" +"3512207360","3512209407","CO" +"3512209408","3512210943","US" +"3512210944","3512211199","CL" +"3512211200","3512211455","AR" +"3512211456","3512221439","US" +"3512221440","3512221471","CO" +"3512221472","3512221695","US" +"3512221696","3512221759","AG" +"3512221760","3512221791","GP" +"3512221792","3512221951","AG" +"3512221952","3512222207","VG" +"3512222208","3512222239","AG" +"3512222240","3512222271","VG" +"3512222272","3512222335","KN" +"3512222336","3512222463","AG" +"3512222464","3512222975","AI" +"3512222976","3512223743","AG" +"3512223744","3512225791","ZA" +"3512225792","3512227839","PR" +"3512227840","3512229887","ZW" +"3512229888","3512230143","VE" +"3512230144","3512230271","US" +"3512230272","3512230287","CA" +"3512230288","3512230399","US" +"3512230400","3512230431","CO" +"3512230432","3512230911","US" +"3512230912","3512231167","CL" +"3512231168","3512231199","VE" +"3512231200","3512231295","US" +"3512231296","3512231423","VE" +"3512231424","3512231679","CL" +"3512231680","3512231935","VE" +"3512231936","3512231967","CO" +"3512231968","3512232063","US" +"3512232064","3512232127","CO" +"3512232128","3512232191","US" +"3512232192","3512232223","CO" +"3512232224","3512232319","US" +"3512232320","3512232351","CO" +"3512232352","3512233215","US" +"3512233216","3512233471","CL" +"3512233472","3512233503","VE" +"3512233504","3512233599","US" +"3512233600","3512233631","CO" +"3512233632","3512233727","US" +"3512233728","3512233983","HN" +"3512233984","3512236031","ZA" +"3512236032","3512236287","US" +"3512236288","3512237311","MR" +"3512237312","3512237823","US" +"3512237824","3512238079","HN" +"3512238080","3512240127","AW" +"3512240128","3512241663","BS" +"3512241664","3512242175","CO" +"3512242176","3512242431","CL" +"3512242432","3512242687","VE" +"3512242688","3512244991","EG" +"3512244992","3512246015","IL" +"3512246016","3512246783","CL" +"3512246784","3512247039","US" +"3512247040","3512247295","NG" +"3512247296","3512248319","US" +"3512248320","3512248863","CO" +"3512248864","3512248927","US" +"3512248928","3512248959","CO" +"3512248960","3512249023","US" +"3512249024","3512249055","CO" +"3512249056","3512249087","US" +"3512249088","3512249343","CO" +"3512249344","3512256511","IL" +"3512256512","3512258559","CL" +"3512258560","3512260607","US" +"3512260608","3512261631","GU" +"3512261632","3512262655","US" +"3512262656","3512263679","GT" +"3512263680","3512264703","VE" +"3512264704","3512267263","US" +"3512267264","3512268031","TG" +"3512268032","3512268543","US" +"3512268544","3512268799","PR" +"3512268800","3512269055","US" +"3512269056","3512269311","PR" +"3512269312","3512269567","US" +"3512269568","3512269823","HN" +"3512269824","3512270847","US" +"3512270848","3512336383","CA" +"3512336384","3512369151","US" +"3512369152","3512371343","CA" +"3512371344","3512371351","US" +"3512371352","3512377231","CA" +"3512377232","3512377239","US" +"3512377240","3512378435","CA" +"3512378436","3512378436","US" +"3512378437","3512378983","CA" +"3512378984","3512378991","US" +"3512378992","3512381311","CA" +"3512381312","3512381319","US" +"3512381320","3512381583","CA" +"3512381584","3512381591","US" +"3512381592","3512385535","CA" +"3512385536","3512397823","US" +"3512397824","3512399375","CA" +"3512399376","3512399383","US" +"3512399384","3512401919","CA" +"3512401920","3512418303","US" +"3512418304","3512451071","CA" +"3512451072","3512467455","PR" +"3512467456","3512534015","US" +"3512534016","3512534079","BR" +"3512534080","3512535679","US" +"3512535680","3512535743","CA" +"3512535744","3512535935","US" +"3512535936","3512536063","DE" +"3512536064","3512536191","US" +"3512536192","3512536319","HK" +"3512536320","3512536383","CO" +"3512536384","3512536447","US" +"3512536448","3512536511","ES" +"3512536512","3512536575","US" +"3512536576","3512536703","MX" +"3512536704","3512537087","US" +"3512537088","3512537151","CL" +"3512537152","3512537215","DK" +"3512537216","3512537599","US" +"3512537600","3512537855","CA" +"3512537856","3512537983","US" +"3512537984","3512538111","BR" +"3512538112","3512538495","US" +"3512538496","3512538623","VE" +"3512538624","3512539007","US" +"3512539008","3512539135","ID" +"3512539136","3512539327","US" +"3512539328","3512539391","CO" +"3512539392","3512539903","US" +"3512539904","3512540031","MX" +"3512540032","3512540287","US" +"3512540288","3512540295","TH" +"3512540296","3512540351","US" +"3512540352","3512540415","CO" +"3512540416","3512541055","US" +"3512541056","3512541119","CO" +"3512541120","3512541231","US" +"3512541232","3512541247","SE" +"3512541248","3512541279","US" +"3512541280","3512541295","IT" +"3512541296","3512541439","US" +"3512541440","3512541583","IT" +"3512541584","3512541599","US" +"3512541600","3512541615","IT" +"3512541616","3512541631","US" +"3512541632","3512541695","IT" +"3512541696","3512541921","NO" +"3512541922","3512542207","US" +"3512542208","3512542239","SE" +"3512542240","3512542719","US" +"3512542720","3512542751","DE" +"3512542752","3512542975","US" +"3512542976","3512543023","IL" +"3512543024","3512543743","US" +"3512543744","3512543903","FI" +"3512543904","3512543999","US" +"3512544000","3512544063","DE" +"3512544064","3512544071","ID" +"3512544072","3512544079","TW" +"3512544080","3512544087","MY" +"3512544088","3512544095","US" +"3512544096","3512544103","HK" +"3512544104","3512544111","JP" +"3512544112","3512544255","US" +"3512544256","3512544335","GB" +"3512544336","3512544383","US" +"3512544384","3512544447","GB" +"3512544448","3512544511","US" +"3512544512","3512544527","DE" +"3512544528","3512544575","US" +"3512544576","3512544639","DE" +"3512544640","3512544767","US" +"3512544768","3512544799","NO" +"3512544800","3512544831","US" +"3512544832","3512544911","NO" +"3512544912","3512545023","US" +"3512545024","3512545151","TW" +"3512545152","3512545407","US" +"3512545408","3512545439","GB" +"3512545440","3512545471","US" +"3512545472","3512545663","GB" +"3512545664","3512545759","US" +"3512545760","3512545791","GB" +"3512545792","3512545935","IT" +"3512545936","3512545983","US" +"3512545984","3512546047","IT" +"3512546048","3512546175","GB" +"3512546176","3512546303","US" +"3512546304","3512546463","FR" +"3512546464","3512546559","US" +"3512546560","3512546591","IT" +"3512546592","3512546607","SG" +"3512546608","3512546623","JP" +"3512546624","3512546631","KR" +"3512546632","3512546687","US" +"3512546688","3512546815","BE" +"3512546816","3512546879","DE" +"3512546880","3512546943","US" +"3512546944","3512547071","DE" +"3512547072","3512547103","LU" +"3512547104","3512547231","BE" +"3512547232","3512547263","US" +"3512547264","3512547327","ES" +"3512547328","3512547359","SE" +"3512547360","3512547391","US" +"3512547392","3512547455","ZA" +"3512547456","3512547839","US" +"3512547840","3512547871","PT" +"3512547872","3512548095","US" +"3512548096","3512548143","CH" +"3512548144","3512548671","US" +"3512548672","3512548703","NL" +"3512548704","3512548735","US" +"3512548736","3512548863","NL" +"3512548864","3512548991","CH" +"3512548992","3512549087","US" +"3512549088","3512549119","GR" +"3512549120","3512549247","FR" +"3512549248","3512549311","US" +"3512549312","3512549375","FR" +"3512549376","3512549567","US" +"3512549568","3512549631","BE" +"3512549632","3512549695","DE" +"3512549696","3512549727","TW" +"3512549728","3512549759","US" +"3512549760","3512549887","TH" +"3512549888","3512550015","US" +"3512550016","3512550031","DE" +"3512550032","3512550143","US" +"3512550144","3512550175","AT" +"3512550176","3512550255","US" +"3512550256","3512550271","AT" +"3512550272","3512550399","US" +"3512550400","3512550415","CH" +"3512550416","3512550911","US" +"3512550912","3512551167","GB" +"3512551168","3512551423","DE" +"3512551424","3512551551","IL" +"3512551552","3512552191","US" +"3512552192","3512552447","NL" +"3512552448","3512552559","US" +"3512552560","3512552703","DE" +"3512552704","3512552959","US" +"3512552960","3512553111","GR" +"3512553112","3512553471","US" +"3512553472","3512553663","AT" +"3512553664","3512553727","US" +"3512553728","3512553855","CH" +"3512553856","3512553983","US" +"3512553984","3512554751","GB" +"3512554752","3512554767","DK" +"3512554768","3512555775","US" +"3512555776","3512556287","IE" +"3512556288","3512556415","SE" +"3512556416","3512556479","DE" +"3512556480","3512556543","US" +"3512556544","3512556799","FR" +"3512556800","3512556831","US" +"3512556832","3512556847","BE" +"3512556848","3512556863","US" +"3512556864","3512556927","BE" +"3512556928","3512557055","US" +"3512557056","3512557311","DE" +"3512557312","3512557567","GB" +"3512557568","3512557911","US" +"3512557912","3512557919","JP" +"3512557920","3512557951","US" +"3512557952","3512558015","ID" +"3512558016","3512558079","HK" +"3512558080","3512558591","US" +"3512558592","3512558719","JP" +"3512558720","3512558783","MY" +"3512558784","3512558847","US" +"3512558848","3512558911","JP" +"3512558912","3512558959","SG" +"3512558960","3512558975","US" +"3512558976","3512559039","JP" +"3512559040","3512559071","AU" +"3512559072","3512559103","US" +"3512559104","3512559135","SG" +"3512559136","3512559231","US" +"3512559232","3512559359","ID" +"3512559360","3512560127","US" +"3512560128","3512560257","TH" +"3512560258","3512560383","US" +"3512560384","3512560511","JP" +"3512560512","3512561151","US" +"3512561152","3512561279","CN" +"3512561280","3512561407","US" +"3512561408","3512561535","HK" +"3512561536","3512561663","US" +"3512561664","3512561727","AU" +"3512561728","3512561791","JP" +"3512561792","3512561919","CN" +"3512561920","3512562175","JP" +"3512562176","3512562239","CH" +"3512562240","3512562271","HK" +"3512562272","3512562303","US" +"3512562304","3512562367","CN" +"3512562368","3512562431","HK" +"3512562432","3512562463","TH" +"3512562464","3512562543","US" +"3512562544","3512562559","TH" +"3512562560","3512562943","US" +"3512562944","3512563071","PH" +"3512563072","3512563135","US" +"3512563136","3512563199","SG" +"3512563200","3512563391","US" +"3512563392","3512563455","ID" +"3512563456","3512563711","US" +"3512563712","3512563727","MY" +"3512563728","3512563743","US" +"3512563744","3512563775","AU" +"3512563776","3512563807","JP" +"3512563808","3512563967","US" +"3512563968","3512564095","PH" +"3512564096","3512564223","US" +"3512564224","3512564479","SG" +"3512564480","3512565119","US" +"3512565120","3512565247","HK" +"3512565248","3512565503","PH" +"3512565504","3512566527","US" +"3512566528","3512566655","BR" +"3512566656","3512567199","US" +"3512567200","3512567231","CA" +"3512567232","3512567295","US" +"3512567296","3512567423","GB" +"3512567424","3512567935","US" +"3512567936","3512568063","BR" +"3512568064","3512569087","US" +"3512569088","3512569215","CA" +"3512569216","3512569983","US" +"3512569984","3512569999","VE" +"3512570000","3512570015","CA" +"3512570016","3512570239","US" +"3512570240","3512570367","MX" +"3512570368","3512571775","US" +"3512571776","3512571903","CL" +"3512571904","3512571967","VE" +"3512571968","3512572927","US" +"3512572928","3512573055","MX" +"3512573056","3512573151","US" +"3512573152","3512573183","BR" +"3512573184","3512573311","US" +"3512573312","3512573375","CL" +"3512573376","3512573439","US" +"3512573440","3512573695","CL" +"3512573696","3512573727","KR" +"3512573728","3512573759","HK" +"3512573760","3512573791","TW" +"3512573792","3512573823","ID" +"3512573824","3512573855","SG" +"3512573856","3512573887","US" +"3512573888","3512574207","ID" +"3512574208","3512574719","US" +"3512574720","3512574975","SG" +"3512574976","3512575551","US" +"3512575552","3512575615","MY" +"3512575616","3512575743","JP" +"3512575744","3512575999","US" +"3512576000","3512576031","KR" +"3512576032","3512576063","US" +"3512576064","3512576127","KR" +"3512576128","3512576255","US" +"3512576256","3512576511","HK" +"3512576512","3512576767","US" +"3512576768","3512576895","KR" +"3512576896","3512577023","US" +"3512577024","3512577087","JP" +"3512577088","3512577279","US" +"3512577280","3512577343","TW" +"3512577344","3512577407","SG" +"3512577408","3512577439","TH" +"3512577440","3512577535","US" +"3512577536","3512577599","AU" +"3512577600","3512577631","PH" +"3512577632","3512577663","US" +"3512577664","3512577727","TH" +"3512577728","3512577791","US" +"3512577792","3512577855","JP" +"3512577856","3512578047","US" +"3512578048","3512578111","KR" +"3512578112","3512578559","US" +"3512578560","3512578720","CN" +"3512578721","3512578815","US" +"3512578816","3512578943","TH" +"3512578944","3512579071","US" +"3512579072","3512579199","ID" +"3512579200","3512579327","HK" +"3512579328","3512579455","KR" +"3512579456","3512579583","NZ" +"3512579584","3512579839","ID" +"3512579840","3512579967","SG" +"3512579968","3512580031","KR" +"3512580032","3512580095","TW" +"3512580096","3512580223","JP" +"3512580224","3512580287","US" +"3512580288","3512580351","CN" +"3512580352","3512580367","CH" +"3512580368","3512580415","US" +"3512580416","3512580479","SG" +"3512580480","3512580863","HK" +"3512580864","3512580991","ID" +"3512580992","3512581055","SG" +"3512581056","3512581119","KR" +"3512581120","3512581247","NZ" +"3512581248","3512581375","TW" +"3512581376","3512582143","CN" +"3512582144","3512582207","US" +"3512582208","3512582223","BR" +"3512582224","3512582463","US" +"3512582464","3512582527","BR" +"3512582528","3512582655","PE" +"3512582656","3512582719","BR" +"3512582720","3512582783","CN" +"3512582784","3512582911","BR" +"3512582912","3512583295","US" +"3512583296","3512583679","BR" +"3512583680","3512584447","US" +"3512584448","3512584479","BR" +"3512584480","3512585407","US" +"3512585408","3512585439","BR" +"3512585440","3512585887","US" +"3512585888","3512585919","PE" +"3512585920","3512585983","CO" +"3512585984","3512586175","US" +"3512586176","3512586239","VE" +"3512586240","3512586495","US" +"3512586496","3512586687","BR" +"3512586688","3512586751","AR" +"3512586752","3512587295","US" +"3512587296","3512587327","CH" +"3512587328","3512587647","US" +"3512587648","3512587775","CO" +"3512587776","3512587903","US" +"3512587904","3512588031","CO" +"3512588032","3512588159","US" +"3512588160","3512588191","PE" +"3512588192","3512588223","US" +"3512588224","3512588287","BR" +"3512588288","3512588415","US" +"3512588416","3512588543","MX" +"3512588544","3512589407","US" +"3512589408","3512589567","BR" +"3512589568","3512589887","US" +"3512589888","3512589951","CO" +"3512589952","3512590015","US" +"3512590016","3512590079","CO" +"3512590080","3512590143","MX" +"3512590144","3512590207","CH" +"3512590208","3512590847","US" +"3512590848","3512590975","TH" +"3512590976","3512591103","PH" +"3512591104","3512591359","JP" +"3512591360","3512592383","US" +"3512592384","3512592895","GB" +"3512592896","3512593151","PH" +"3512593152","3512593279","GB" +"3512593280","3512593407","SG" +"3512593408","3512593471","TH" +"3512593472","3512593511","US" +"3512593512","3512593519","CN" +"3512593520","3512593663","US" +"3512593664","3512593791","JP" +"3512593792","3512593887","US" +"3512593888","3512593919","DE" +"3512593920","3512594175","AP" +"3512594176","3512594431","MY" +"3512594432","3512594495","HK" +"3512594496","3512594559","US" +"3512594560","3512594687","CN" +"3512594688","3512594943","US" +"3512594944","3512595007","TH" +"3512595008","3512595199","US" +"3512595200","3512595455","TW" +"3512595456","3512595711","US" +"3512595712","3512595743","KR" +"3512595744","3512595775","US" +"3512595776","3512595839","KR" +"3512595840","3512596223","US" +"3512596224","3512596479","JP" +"3512596480","3512596991","US" +"3512596992","3512597247","TH" +"3512597248","3512597759","US" +"3512597760","3512598015","JP" +"3512598016","3512598079","KR" +"3512598080","3512598143","US" +"3512598144","3512598271","TH" +"3512598272","3512598527","PH" +"3512598528","3512647679","US" +"3512647680","3512655871","TT" +"3512655872","3512690591","US" +"3512690592","3512690623","IN" +"3512690624","3512695839","US" +"3512695840","3512695871","GB" +"3512695872","3512696831","US" +"3512696832","3512699647","SE" +"3512699648","3512699903","US" +"3512699904","3512705023","SE" +"3512705024","3512844287","US" +"3512844288","3512852479","CA" +"3512852480","3512891135","US" +"3512891136","3512891167","BE" +"3512891168","3512891199","AU" +"3512891200","3512891231","FR" +"3512891232","3512891263","KW" +"3512891264","3512891327","US" +"3512891328","3512891359","CA" +"3512891360","3512926975","US" +"3512926976","3512927231","A1" +"3512927232","3512940799","US" +"3512940800","3512941055","A1" +"3512941056","3512983551","US" +"3512983552","3512987647","AR" +"3512987648","3513188351","US" +"3513188352","3513204735","CA" +"3513204736","3513270271","US" +"3513270272","3513286655","CA" +"3513286656","3513294847","US" +"3513294848","3513303039","CA" +"3513303040","3513368575","US" +"3513368576","3513376767","CA" +"3513376768","3513475071","US" +"3513475072","3513483263","CA" +"3513483264","3513501183","US" +"3513501184","3513501439","PH" +"3513501440","3513501567","US" +"3513501568","3513501631","AZ" +"3513501632","3513502719","US" +"3513502720","3513502975","A1" +"3513502976","3513506047","US" +"3513506048","3513506303","A1" +"3513506304","3513506559","US" +"3513506560","3513506815","CA" +"3513506816","3513670911","US" +"3513670912","3513671167","A2" +"3513671168","3513778175","US" +"3513778176","3513794559","CA" +"3513794560","3514007551","US" +"3514007552","3514040319","CA" +"3514040320","3514367999","US" +"3514368000","3514433535","CA" +"3514433536","3514583535","US" +"3514583536","3514583543","JE" +"3514583544","3514585359","US" +"3514585360","3514585375","GB" +"3514585376","3514589439","US" +"3514589440","3514589695","GT" +"3514589696","3514590207","SV" +"3514590208","3514590719","NI" +"3514590720","3514591103","SV" +"3514591104","3514591487","US" +"3514591488","3514592255","NI" +"3514592256","3514593279","SV" +"3514593280","3514596863","US" +"3514596864","3514597375","SV" +"3514597376","3514826751","US" +"3514826752","3514843135","CA" +"3514843136","3514993919","US" +"3514993920","3514994049","GB" +"3514994050","3514994050","EU" +"3514994051","3514994175","GB" +"3514994176","3515001869","US" +"3515001870","3515001873","GB" +"3515001874","3515007869","US" +"3515007870","3515007870","GB" +"3515007871","3515114247","US" +"3515114248","3515114255","AU" +"3515114256","3515149567","US" +"3515149568","3515149583","AU" +"3515149584","3515170991","US" +"3515170992","3515170999","KR" +"3515171000","3515301887","US" +"3515301888","3515318271","CA" +"3515318272","3515358975","US" +"3515358976","3515359231","MX" +"3515359232","3515452639","US" +"3515452640","3515452655","KR" +"3515452656","3515453055","US" +"3515453056","3515453071","JP" +"3515453072","3515453679","US" +"3515453680","3515453687","JP" +"3515453688","3515454143","US" +"3515454144","3515454207","JP" +"3515454208","3515454399","US" +"3515454400","3515454463","JP" +"3515454464","3515455311","US" +"3515455312","3515455319","JP" +"3515455320","3515455999","US" +"3515456000","3515456015","JP" +"3515456016","3515456703","US" +"3515456704","3515456767","JP" +"3515456768","3515596799","US" +"3515596800","3515613183","CA" +"3515613184","3515711487","US" +"3515711488","3515731967","CA" +"3515731968","3515793351","US" +"3515793352","3515793359","MO" +"3515793360","3515860351","US" +"3515860352","3515860431","IN" +"3515860432","3515867151","US" +"3515867152","3515867167","AU" +"3515867168","3515867391","US" +"3515867392","3515867519","AU" +"3515867520","3515868463","US" +"3515868464","3515868479","IT" +"3515868480","3515882319","US" +"3515882320","3515882327","MX" +"3515882328","3515882375","US" +"3515882376","3515882383","AU" +"3515882384","3515882391","US" +"3515882392","3515882399","GB" +"3515882400","3515913631","US" +"3515913632","3515913663","CA" +"3515913664","3515916519","US" +"3515916520","3515916527","AU" +"3515916528","3515932895","US" +"3515932896","3515932903","CA" +"3515932904","3515955375","US" +"3515955376","3515955391","GB" +"3515955392","3515955551","US" +"3515955552","3515955567","ES" +"3515955568","3515956319","US" +"3515956320","3515956335","NL" +"3515956336","3515965439","US" +"3515965440","3515973631","CA" +"3515973632","3515990015","US" +"3515990016","3516006399","CA" +"3516006400","3516039167","US" +"3516039168","3516071935","CA" +"3516071936","3516139007","US" +"3516139008","3516139263","GB" +"3516139264","3516153855","US" +"3516162048","3516170239","US" +"3516170240","3516193943","CA" +"3516193944","3516193951","US" +"3516193952","3516203007","CA" +"3516203008","3516334079","US" +"3516334080","3516342271","CA" +"3516342272","3516351055","US" +"3516351056","3516351087","TR" +"3516351088","3516351095","US" +"3516351096","3516351103","MY" +"3516351104","3516351255","US" +"3516351256","3516351271","AE" +"3516351272","3516355663","US" +"3516355664","3516355679","CA" +"3516355680","3516357631","US" +"3516357632","3516357887","MY" +"3516357888","3516358143","CA" +"3516358144","3516366847","US" +"3516366848","3516370943","CA" +"3516370944","3516394239","US" +"3516394240","3516394247","IS" +"3516394248","3516514303","US" +"3516514304","3516530687","CA" +"3516530688","3516899327","US" +"3516899328","3516899839","A2" +"3516899840","3516900095","NG" +"3516900096","3516900351","A2" +"3516900352","3516900607","NG" +"3516900608","3516900863","A2" +"3516900864","3516901119","NG" +"3516901120","3516902399","US" +"3516902400","3516902655","A2" +"3516902656","3516902911","NG" +"3516902912","3516903167","A2" +"3516903168","3516903423","NG" +"3516903424","3516907519","CA" +"3516907520","3517019135","US" +"3517019136","3517019391","HN" +"3517019392","3517021439","US" +"3517021440","3517021695","NI" +"3517021696","3517038591","US" +"3517038592","3517054975","CA" +"3517054976","3517095935","US" +"3517095936","3517100031","CA" +"3517100032","3517100213","US" +"3517100214","3517100223","NZ" +"3517100224","3517100720","US" +"3517100721","3517100730","CA" +"3517100731","3517103316","US" +"3517103317","3517103330","NZ" +"3517103331","3517112319","US" +"3517112320","3517116159","CA" +"3517116160","3517116415","US" +"3517116416","3517120511","CA" +"3517120512","3517233151","US" +"3517233152","3517235199","GU" +"3517235200","3517382655","US" +"3517382656","3517384703","CA" +"3517384704","3517385215","US" +"3517385216","3517385311","CA" +"3517385312","3517385375","US" +"3517385376","3517387775","CA" +"3517387776","3517388031","US" +"3517388032","3517388223","CA" +"3517388224","3517388239","US" +"3517388240","3517388255","CA" +"3517388256","3517388271","US" +"3517388272","3517388799","CA" +"3517388800","3517389311","US" +"3517389312","3517389567","CA" +"3517389568","3517389823","US" +"3517389824","3517390335","CA" +"3517390336","3517390591","US" +"3517390592","3517391471","CA" +"3517391472","3517391487","US" +"3517391488","3517391535","CA" +"3517391536","3517391551","US" +"3517391552","3517392127","CA" +"3517392128","3517392383","US" +"3517392384","3517392639","CA" +"3517392640","3517392655","US" +"3517392656","3517392719","CA" +"3517392720","3517392735","US" +"3517392736","3517392815","CA" +"3517392816","3517392831","US" +"3517392832","3517392847","CA" +"3517392848","3517392879","US" +"3517392880","3517393407","CA" +"3517393408","3517393439","US" +"3517393440","3517393471","CA" +"3517393472","3517393503","US" +"3517393504","3517395663","CA" +"3517395664","3517395679","US" +"3517395680","3517395695","CA" +"3517395696","3517395743","US" +"3517395744","3517395807","CA" +"3517395808","3517395839","US" +"3517395840","3517395871","CA" +"3517395872","3517395903","US" +"3517395904","3517396095","CA" +"3517396096","3517396111","US" +"3517396112","3517396127","CA" +"3517396128","3517396175","US" +"3517396176","3517396911","CA" +"3517396912","3517396927","US" +"3517396928","3517397503","CA" +"3517397504","3517397759","US" +"3517397760","3517398015","CA" +"3517398016","3517398527","US" +"3517398528","3517399551","CA" +"3517399552","3517399807","US" +"3517399808","3517399871","CA" +"3517399872","3517399935","IL" +"3517399936","3517400831","CA" +"3517400832","3517400847","US" +"3517400848","3517401183","CA" +"3517401184","3517401199","US" +"3517401200","3517401279","CA" +"3517401280","3517401343","US" +"3517401344","3517401599","CA" +"3517401600","3517401855","US" +"3517401856","3517402879","CA" +"3517402880","3517403391","US" +"3517403392","3517403455","CA" +"3517403456","3517403519","US" +"3517403520","3517404159","CA" +"3517404160","3517404415","US" +"3517404416","3517404927","CA" +"3517404928","3517405183","US" +"3517405184","3517406751","CA" +"3517406752","3517406783","US" +"3517406784","3517407359","CA" +"3517407360","3517407487","US" +"3517407488","3517407999","CA" +"3517408000","3517408255","US" +"3517408256","3517408583","CA" +"3517408584","3517408591","US" +"3517408592","3517408703","CA" +"3517408704","3517408711","US" +"3517408712","3517408727","CA" +"3517408728","3517408735","US" +"3517408736","3517408743","CA" +"3517408744","3517408767","US" +"3517408768","3517408799","CA" +"3517408800","3517408815","US" +"3517408816","3517408895","CA" +"3517408896","3517408911","US" +"3517408912","3517408991","CA" +"3517408992","3517409007","US" +"3517409008","3517409279","CA" +"3517409280","3517409791","US" +"3517409792","3517411071","CA" +"3517411072","3517411327","US" +"3517411328","3517414463","CA" +"3517414464","3517414495","US" +"3517414496","3517415983","CA" +"3517415984","3517415999","GB" +"3517416000","3517416063","CA" +"3517416064","3517416079","US" +"3517416080","3517416111","CA" +"3517416112","3517416127","US" +"3517416128","3517416143","CA" +"3517416144","3517416159","US" +"3517416160","3517416591","CA" +"3517416592","3517416607","US" +"3517416608","3517416711","CA" +"3517416712","3517416727","US" +"3517416728","3517416735","CA" +"3517416736","3517416743","US" +"3517416744","3517416767","CA" +"3517416768","3517416783","US" +"3517416784","3517416791","CA" +"3517416792","3517416799","US" +"3517416800","3517416823","CA" +"3517416824","3517416839","US" +"3517416840","3517416871","CA" +"3517416872","3517416879","US" +"3517416880","3517417535","CA" +"3517417536","3517417567","US" +"3517417568","3517417631","CA" +"3517417632","3517417663","US" +"3517417664","3517417695","CA" +"3517417696","3517417855","US" +"3517417856","3517418367","CA" +"3517418368","3517418399","US" +"3517418400","3517419103","CA" +"3517419104","3517419135","US" +"3517419136","3517420159","CA" +"3517420160","3517420287","US" +"3517420288","3517420303","CA" +"3517420304","3517420311","US" +"3517420312","3517420327","CA" +"3517420328","3517420335","US" +"3517420336","3517420351","CA" +"3517420352","3517420359","US" +"3517420360","3517420383","CA" +"3517420384","3517420399","US" +"3517420400","3517420407","CA" +"3517420408","3517420431","US" +"3517420432","3517420439","CA" +"3517420440","3517420447","US" +"3517420448","3517420471","CA" +"3517420472","3517420479","US" +"3517420480","3517420487","CA" +"3517420488","3517420495","US" +"3517420496","3517422591","CA" +"3517422592","3517422599","US" +"3517422600","3517422663","CA" +"3517422664","3517422687","US" +"3517422688","3517422695","CA" +"3517422696","3517422703","US" +"3517422704","3517422719","CA" +"3517422720","3517422759","US" +"3517422760","3517422783","CA" +"3517422784","3517422791","US" +"3517422792","3517424319","CA" +"3517424320","3517424335","SE" +"3517424336","3517424511","CA" +"3517424512","3517424543","US" +"3517424544","3517424623","CA" +"3517424624","3517424639","US" +"3517424640","3517425023","CA" +"3517425024","3517425087","US" +"3517425088","3517426047","CA" +"3517426048","3517426111","US" +"3517426112","3517426687","CA" +"3517426688","3517426751","US" +"3517426752","3517427711","CA" +"3517427712","3517427727","US" +"3517427728","3517428063","CA" +"3517428064","3517428095","US" +"3517428096","3517428431","CA" +"3517428432","3517428447","US" +"3517428448","3517429759","CA" +"3517429760","3517429791","US" +"3517429792","3517430015","CA" +"3517430016","3517430031","US" +"3517430032","3517430127","CA" +"3517430128","3517430143","US" +"3517430144","3517430175","CA" +"3517430176","3517430191","US" +"3517430192","3517430207","CA" +"3517430208","3517430223","US" +"3517430224","3517430239","CA" +"3517430240","3517430255","US" +"3517430256","3517430783","CA" +"3517430784","3517431039","US" +"3517431040","3517431599","CA" +"3517431600","3517431615","US" +"3517431616","3517431663","CA" +"3517431664","3517431679","US" +"3517431680","3517431695","CA" +"3517431696","3517431711","NL" +"3517431712","3517431727","CA" +"3517431728","3517431743","US" +"3517431744","3517431759","CA" +"3517431760","3517431775","US" +"3517431776","3517431807","CA" +"3517431808","3517431823","US" +"3517431824","3517431919","CA" +"3517431920","3517431951","US" +"3517431952","3517431967","CA" +"3517431968","3517431983","US" +"3517431984","3517432191","CA" +"3517432192","3517432319","US" +"3517432320","3517433919","CA" +"3517433920","3517433983","US" +"3517433984","3517434367","CA" +"3517434368","3517434375","US" +"3517434376","3517434503","CA" +"3517434504","3517434527","US" +"3517434528","3517434567","CA" +"3517434568","3517434583","US" +"3517434584","3517434599","CA" +"3517434600","3517434615","US" +"3517434616","3517435007","CA" +"3517435008","3517435135","US" +"3517435136","3517436935","CA" +"3517436936","3517436943","US" +"3517436944","3517436975","CA" +"3517436976","3517436983","US" +"3517436984","3517436991","CA" +"3517436992","3517436999","US" +"3517437000","3517437007","CA" +"3517437008","3517437015","US" +"3517437016","3517437039","CA" +"3517437040","3517437055","US" +"3517437056","3517437071","CA" +"3517437072","3517437079","US" +"3517437080","3517437087","CA" +"3517437088","3517437095","NO" +"3517437096","3517437135","CA" +"3517437136","3517437143","US" +"3517437144","3517437151","CA" +"3517437152","3517437175","US" +"3517437176","3517438143","CA" +"3517438144","3517438207","US" +"3517438208","3517438463","CA" +"3517438464","3517438527","US" +"3517438528","3517438591","CA" +"3517438592","3517438655","US" +"3517438656","3517438751","CA" +"3517438752","3517438783","US" +"3517438784","3517438879","CA" +"3517438880","3517438911","KW" +"3517438912","3517439487","CA" +"3517439488","3517439615","US" +"3517439616","3517442239","CA" +"3517442240","3517442303","US" +"3517442304","3517442319","CA" +"3517442320","3517442335","US" +"3517442336","3517442383","CA" +"3517442384","3517442399","US" +"3517442400","3517442431","CA" +"3517442432","3517442447","US" +"3517442448","3517443647","CA" +"3517443648","3517443679","US" +"3517443680","3517444223","CA" +"3517444224","3517444351","US" +"3517444352","3517444671","CA" +"3517444672","3517444735","US" +"3517444736","3517444799","CA" +"3517444800","3517444863","US" +"3517444864","3517445199","CA" +"3517445200","3517445375","US" +"3517445376","3517445503","CA" +"3517445504","3517445567","US" +"3517445568","3517445887","CA" +"3517445888","3517446015","US" +"3517446016","3517446911","CA" +"3517446912","3517447167","US" +"3517447168","3517447727","CA" +"3517447728","3517447743","US" +"3517447744","3517447783","CA" +"3517447784","3517447791","US" +"3517447792","3517447847","CA" +"3517447848","3517447863","US" +"3517447864","3517448191","CA" +"3517448192","3517523167","US" +"3517523168","3517523183","BS" +"3517523184","3517523671","US" +"3517523672","3517523679","KY" +"3517523680","3517524183","US" +"3517524184","3517524191","VI" +"3517524192","3517546495","US" +"3517546496","3517562879","CA" +"3517562880","3517595647","US" +"3517595648","3517596671","SE" +"3517596672","3517596927","US" +"3517596928","3517597183","IE" +"3517597184","3517597695","US" +"3517597696","3517597951","IE" +"3517597952","3517598207","DE" +"3517598208","3517598463","IE" +"3517598464","3517598527","SE" +"3517598528","3517598559","FR" +"3517598560","3517598591","SE" +"3517598592","3517598719","US" +"3517598720","3517599359","SE" +"3517599360","3517599487","US" +"3517599488","3517600767","SE" +"3517600768","3517601279","US" +"3517601280","3517602047","SE" +"3517602048","3517602303","DE" +"3517602304","3517602559","US" +"3517602560","3517602575","SE" +"3517602576","3517602591","US" +"3517602592","3517602687","SE" +"3517602688","3517602815","US" +"3517602816","3517603071","SE" +"3517603072","3517603615","US" +"3517603616","3517603647","DE" +"3517603648","3517603711","US" +"3517603712","3517603967","SE" +"3517603968","3517604031","DE" +"3517604032","3517604095","SE" +"3517604096","3517604351","US" +"3517604352","3517605119","SE" +"3517605120","3517605375","US" +"3517605376","3517605775","SE" +"3517605776","3517605791","US" +"3517605792","3517605887","SE" +"3517605888","3517606143","US" +"3517606144","3517606271","SE" +"3517606272","3517606399","US" +"3517606400","3517606911","SE" +"3517606912","3517607935","US" +"3517607936","3517608191","DE" +"3517608192","3517608447","US" +"3517608448","3517608703","GB" +"3517608704","3517609743","US" +"3517609744","3517609759","SE" +"3517609760","3517609791","US" +"3517609792","3517609855","SE" +"3517609856","3517610015","US" +"3517610016","3517610111","SE" +"3517610112","3517610143","NO" +"3517610144","3517610175","SE" +"3517610176","3517610183","US" +"3517610184","3517610191","SE" +"3517610192","3517610199","US" +"3517610200","3517610495","SE" +"3517610496","3517611263","IE" +"3517611264","3517611295","SE" +"3517611296","3517611303","DE" +"3517611304","3517611311","CA" +"3517611312","3517611367","SE" +"3517611368","3517611383","US" +"3517611384","3517611463","SE" +"3517611464","3517611471","IL" +"3517611472","3517612031","SE" +"3517612032","3517644799","US" +"3517644800","3517710335","CA" +"3517710336","3517718527","US" +"3517718528","3517726719","CA" +"3517726720","3517838927","US" +"3517838928","3517838938","LB" +"3517838939","3517979103","US" +"3517979104","3517979111","CA" +"3517979112","3517989487","US" +"3517989488","3517989503","CA" +"3517989504","3517989695","US" +"3517989696","3517989727","CA" +"3517989728","3517990023","US" +"3517990024","3517990031","CA" +"3517990032","3517990911","US" +"3517990912","3517991423","CA" +"3517991424","3518062591","US" +"3518062592","3518066687","CA" +"3518066688","3518075455","US" +"3518075456","3518075519","AR" +"3518075520","3518075583","US" +"3518075584","3518075647","MX" +"3518075648","3518075903","AU" +"3518075904","3518076079","US" +"3518076080","3518076087","AU" +"3518076088","3518076671","US" +"3518076672","3518076927","PA" +"3518076928","3518374719","US" +"3518374720","3518374783","IN" +"3518374784","3518380223","US" +"3518380224","3518380287","DE" +"3518380288","3518381055","US" +"3518381056","3518381311","IN" +"3518381312","3518381439","US" +"3518381440","3518381567","IN" +"3518381568","3518381631","DE" +"3518381632","3518431231","US" +"3518431232","3518439423","CA" +"3518439424","3518463999","US" +"3518464000","3518472191","CA" +"3518472192","3518759407","US" +"3518759408","3518759423","CY" +"3518759424","3518760511","US" +"3518760512","3518760575","AU" +"3518760576","3518762495","US" +"3518762496","3518762751","GB" +"3518762752","3518764671","US" +"3518764672","3518764703","NL" +"3518764704","3518765311","US" +"3518765312","3518765567","CA" +"3518765568","3518766879","US" +"3518766880","3518766911","TH" +"3518766912","3518892415","US" +"3518892416","3518892423","GB" +"3518892424","3518894439","US" +"3518894440","3518894447","TR" +"3518894448","3518895783","US" +"3518895784","3518895791","TH" +"3518895792","3518896215","US" +"3518896216","3518896223","CA" +"3518896224","3518896231","US" +"3518896232","3518896239","CN" +"3518896240","3518897119","US" +"3518897120","3518897127","IT" +"3518897128","3518903191","US" +"3518903192","3518903199","JP" +"3518903200","3518905599","US" +"3518905600","3518905855","GB" +"3518905856","3518911743","US" +"3518911744","3518911999","GB" +"3518912000","3518912511","US" +"3518912512","3518912767","IN" +"3518912768","3518929535","US" +"3518929536","3518929599","CA" +"3518929600","3518995695","US" +"3518995696","3518995703","GB" +"3518995704","3519234047","US" +"3519234048","3519250431","CA" +"3519250432","3519320975","US" +"3519320976","3519320983","GR" +"3519320984","3519340543","US" +"3519340544","3519344639","CA" +"3519344640","3519350079","US" +"3519350080","3519350087","NL" +"3519350088","3519350271","US" +"3519350272","3519350399","A1" +"3519350400","3519351327","US" +"3519351328","3519351359","GB" +"3519351360","3519351423","US" +"3519351424","3519351455","GB" +"3519351456","3519351551","US" +"3519351552","3519351807","GB" +"3519351808","3519352831","US" +"3519352832","3519352959","A1" +"3519352960","3519354047","US" +"3519354048","3519354111","A1" +"3519354112","3519355391","US" +"3519355392","3519355519","A1" +"3519355520","3519381503","US" +"3519381504","3519397887","CA" +"3519397888","3519406079","US" +"3519406080","3519406143","IT" +"3519406144","3519406255","US" +"3519406256","3519406263","SA" +"3519406264","3519406375","US" +"3519406376","3519406383","IT" +"3519406384","3519406391","IN" +"3519406392","3519406407","GB" +"3519406408","3519406503","US" +"3519406504","3519406511","CA" +"3519406512","3519406695","US" +"3519406696","3519406831","SA" +"3519406832","3519407151","US" +"3519407152","3519407199","MY" +"3519407200","3519407215","US" +"3519407216","3519407351","AE" +"3519407352","3519407591","US" +"3519407592","3519407599","AE" +"3519407600","3519407607","US" +"3519407608","3519407615","RU" +"3519407616","3519409111","US" +"3519409112","3519409119","MY" +"3519409120","3519409135","OM" +"3519409136","3519409295","US" +"3519409296","3519409303","CA" +"3519409304","3519409407","US" +"3519409408","3519409423","AE" +"3519409424","3519409455","US" +"3519409456","3519409599","MY" +"3519409600","3519409807","US" +"3519409808","3519409815","GB" +"3519409816","3519409927","US" +"3519409928","3519409943","MY" +"3519409944","3519409951","US" +"3519409952","3519410175","MY" +"3519410176","3519410279","US" +"3519410280","3519410287","AU" +"3519410288","3519411327","US" +"3519411328","3519411391","RU" +"3519411392","3519412519","US" +"3519412520","3519412527","RU" +"3519412528","3519412735","US" +"3519412736","3519412751","RU" +"3519412752","3519412799","US" +"3519412800","3519412815","RU" +"3519412816","3519412999","US" +"3519413000","3519413007","CY" +"3519413008","3519417087","US" +"3519417088","3519417151","IT" +"3519417152","3519465247","US" +"3519465248","3519465263","CO" +"3519465264","3519466895","US" +"3519466896","3519466911","SZ" +"3519466912","3519467519","US" +"3519469568","3519475711","US" +"3519475712","3519476223","BH" +"3519476224","3519477759","A2" +"3519477760","3519554047","US" +"3519554048","3519554175","A1" +"3519554176","3519578367","US" +"3519578368","3519578623","NA" +"3519578624","3519578879","US" +"3519578880","3519579135","CA" +"3519579136","3519579967","US" +"3519579968","3519579983","CY" +"3519579984","3519586303","US" +"3519586304","3519586559","GB" +"3519586560","3519587039","US" +"3519587040","3519587071","AG" +"3519587072","3519588639","US" +"3519588640","3519588671","GB" +"3519588672","3519590655","US" +"3519590656","3519590911","CA" +"3519590912","3519603204","US" +"3519603205","3519603212","VN" +"3519603213","3519603271","US" +"3519603272","3519603286","CA" +"3519603287","3519603772","US" +"3519603773","3519603781","IN" +"3519603782","3519676415","US" +"3519676416","3519700559","CA" +"3519700560","3519700567","US" +"3519700568","3519700575","CA" +"3519700576","3519700607","US" +"3519700608","3519702319","CA" +"3519702320","3519702327","US" +"3519702328","3519709183","CA" +"3519709184","3519712447","US" +"3519712448","3519712511","CA" +"3519712512","3519715295","US" +"3519715296","3519715327","GB" +"3519715328","3519716863","US" +"3519716864","3519716999","CA" +"3519717000","3519723519","US" +"3519723520","3519724031","CA" +"3519724032","3519741951","US" +"3519741952","3519758335","ZA" +"3519758336","3519799871","US" +"3519799872","3519799903","IN" +"3519799904","3519805119","US" +"3519805120","3519805183","GB" +"3519805184","3519873023","US" +"3519873024","3519877295","CA" +"3519877296","3519877311","US" +"3519877312","3519879679","CA" +"3519879680","3519879687","US" +"3519879688","3519879767","CA" +"3519879768","3519879775","US" +"3519879776","3519879807","CA" +"3519879808","3519879815","US" +"3519879816","3519880767","CA" +"3519880768","3519880831","DE" +"3519880832","3519881375","CA" +"3519881376","3519881407","US" +"3519881408","3519881567","CA" +"3519881568","3519881599","US" +"3519881600","3519901695","CA" +"3519901696","3519934463","US" +"3519934464","3519938559","CA" +"3519938560","3520020479","US" +"3520020480","3520020559","CA" +"3520020560","3520020567","US" +"3520020568","3520020655","CA" +"3520020656","3520020663","US" +"3520020664","3520020719","CA" +"3520020720","3520020727","US" +"3520020728","3520020991","CA" +"3520020992","3520021015","US" +"3520021016","3520021055","CA" +"3520021056","3520021071","US" +"3520021072","3520021183","CA" +"3520021184","3520021191","US" +"3520021192","3520021319","CA" +"3520021320","3520021359","US" +"3520021360","3520021383","CA" +"3520021384","3520021415","US" +"3520021416","3520021471","CA" +"3520021472","3520021479","US" +"3520021480","3520021495","CA" +"3520021496","3520021503","US" +"3520021504","3520021687","CA" +"3520021688","3520021695","US" +"3520021696","3520021839","CA" +"3520021840","3520021847","US" +"3520021848","3520021895","CA" +"3520021896","3520021903","US" +"3520021904","3520021911","CA" +"3520021912","3520021919","US" +"3520021920","3520021927","CA" +"3520021928","3520021935","US" +"3520021936","3520021967","CA" +"3520021968","3520021975","US" +"3520021976","3520021983","CA" +"3520021984","3520021991","US" +"3520021992","3520021999","CA" +"3520022000","3520022007","US" +"3520022008","3520022015","CA" +"3520022016","3520022023","US" +"3520022024","3520022071","CA" +"3520022072","3520022087","US" +"3520022088","3520022143","CA" +"3520022144","3520022151","US" +"3520022152","3520022207","CA" +"3520022208","3520022215","US" +"3520022216","3520022271","CA" +"3520022272","3520022279","US" +"3520022280","3520022375","CA" +"3520022376","3520022383","US" +"3520022384","3520022391","CA" +"3520022392","3520022399","US" +"3520022400","3520022863","CA" +"3520022864","3520022871","US" +"3520022872","3520022927","CA" +"3520022928","3520022935","US" +"3520022936","3520023047","CA" +"3520023048","3520023063","US" +"3520023064","3520023087","CA" +"3520023088","3520023103","US" +"3520023104","3520023111","CA" +"3520023112","3520023119","US" +"3520023120","3520023127","CA" +"3520023128","3520023135","US" +"3520023136","3520023151","CA" +"3520023152","3520023159","US" +"3520023160","3520023383","CA" +"3520023384","3520023415","US" +"3520023416","3520023879","CA" +"3520023880","3520023887","US" +"3520023888","3520023911","CA" +"3520023912","3520023919","US" +"3520023920","3520024487","CA" +"3520024488","3520024495","US" +"3520024496","3520024807","CA" +"3520024808","3520024815","US" +"3520024816","3520025191","CA" +"3520025192","3520025199","US" +"3520025200","3520025295","CA" +"3520025296","3520025303","US" +"3520025304","3520025503","CA" +"3520025504","3520025511","US" +"3520025512","3520025591","CA" +"3520025592","3520025599","NL" +"3520025600","3520025623","CA" +"3520025624","3520025631","US" +"3520025632","3520025639","CA" +"3520025640","3520025647","US" +"3520025648","3520025791","CA" +"3520025792","3520025799","US" +"3520025800","3520026671","CA" +"3520026672","3520026679","US" +"3520026680","3520026703","CA" +"3520026704","3520026711","US" +"3520026712","3520026783","CA" +"3520026784","3520026791","US" +"3520026792","3520026991","CA" +"3520026992","3520026999","US" +"3520027000","3520027047","CA" +"3520027048","3520027055","US" +"3520027056","3520027111","CA" +"3520027112","3520027119","US" +"3520027120","3520027231","CA" +"3520027232","3520027239","US" +"3520027240","3520027271","CA" +"3520027272","3520027279","US" +"3520027280","3520027439","CA" +"3520027440","3520027447","US" +"3520027448","3520027711","CA" +"3520027712","3520027727","US" +"3520027728","3520027815","CA" +"3520027816","3520027823","US" +"3520027824","3520027839","CA" +"3520027840","3520027887","US" +"3520027888","3520027951","CA" +"3520027952","3520027991","US" +"3520027992","3520028047","CA" +"3520028048","3520028055","US" +"3520028056","3520028095","CA" +"3520028096","3520028103","US" +"3520028104","3520028191","CA" +"3520028192","3520028199","US" +"3520028200","3520028487","CA" +"3520028488","3520028535","US" +"3520028536","3520028543","CA" +"3520028544","3520028551","US" +"3520028552","3520028655","CA" +"3520028656","3520028671","US" +"3520028672","3520028695","CA" +"3520028696","3520028711","US" +"3520028712","3520029167","CA" +"3520029168","3520029175","IL" +"3520029176","3520030799","CA" +"3520030800","3520030807","US" +"3520030808","3520030951","CA" +"3520030952","3520030959","US" +"3520030960","3520030975","CA" +"3520030976","3520030983","NL" +"3520030984","3520031143","CA" +"3520031144","3520031151","US" +"3520031152","3520031527","CA" +"3520031528","3520031535","US" +"3520031536","3520031543","CA" +"3520031544","3520031551","US" +"3520031552","3520031607","CA" +"3520031608","3520031655","US" +"3520031656","3520032039","CA" +"3520032040","3520032087","US" +"3520032088","3520032103","CA" +"3520032104","3520032111","US" +"3520032112","3520032119","CA" +"3520032120","3520032127","US" +"3520032128","3520032159","CA" +"3520032160","3520032191","US" +"3520032192","3520032199","CA" +"3520032200","3520032223","US" +"3520032224","3520032303","CA" +"3520032304","3520032311","US" +"3520032312","3520032399","CA" +"3520032400","3520032407","US" +"3520032408","3520032591","CA" +"3520032592","3520032599","US" +"3520032600","3520032687","CA" +"3520032688","3520032711","US" +"3520032712","3520032735","CA" +"3520032736","3520032759","US" +"3520032760","3520032767","CA" +"3520032768","3520032791","US" +"3520032792","3520032807","CA" +"3520032808","3520032847","US" +"3520032848","3520032855","CA" +"3520032856","3520032863","US" +"3520032864","3520033031","CA" +"3520033032","3520033047","US" +"3520033048","3520033055","CA" +"3520033056","3520033063","US" +"3520033064","3520033135","CA" +"3520033136","3520033159","US" +"3520033160","3520033391","CA" +"3520033392","3520033407","US" +"3520033408","3520033583","CA" +"3520033584","3520033591","US" +"3520033592","3520033631","CA" +"3520033632","3520033639","US" +"3520033640","3520033671","CA" +"3520033672","3520033679","US" +"3520033680","3520033695","CA" +"3520033696","3520033703","US" +"3520033704","3520033759","CA" +"3520033760","3520033767","US" +"3520033768","3520034151","CA" +"3520034152","3520034159","US" +"3520034160","3520034167","CA" +"3520034168","3520034175","US" +"3520034176","3520034263","CA" +"3520034264","3520034271","US" +"3520034272","3520034487","CA" +"3520034488","3520034495","US" +"3520034496","3520034559","CA" +"3520034560","3520034567","US" +"3520034568","3520034639","CA" +"3520034640","3520034647","GH" +"3520034648","3520034775","CA" +"3520034776","3520034791","US" +"3520034792","3520034951","CA" +"3520034952","3520034959","US" +"3520034960","3520035055","CA" +"3520035056","3520035071","US" +"3520035072","3520035135","CA" +"3520035136","3520035263","US" +"3520035264","3520035279","CA" +"3520035280","3520035287","US" +"3520035288","3520035327","CA" +"3520035328","3520035335","US" +"3520035336","3520035495","CA" +"3520035496","3520035503","US" +"3520035504","3520035519","CA" +"3520035520","3520035543","US" +"3520035544","3520036191","CA" +"3520036192","3520036199","US" +"3520036200","3520036287","CA" +"3520036288","3520036295","US" +"3520036296","3520036327","CA" +"3520036328","3520036343","US" +"3520036344","3520036351","CA" +"3520036352","3520036359","US" +"3520036360","3520036863","CA" +"3520036864","3520072751","US" +"3520072752","3520072767","AR" +"3520072768","3520073039","US" +"3520073040","3520073055","CA" +"3520073056","3520074671","US" +"3520074672","3520074687","GB" +"3520074688","3520074783","US" +"3520074784","3520074815","NL" +"3520074816","3520074847","US" +"3520074848","3520074863","GB" +"3520074864","3520075311","US" +"3520075312","3520075327","BR" +"3520075328","3520075455","US" +"3520075456","3520075471","CA" +"3520075472","3520075743","US" +"3520075744","3520075775","NL" +"3520075776","3520078031","US" +"3520078032","3520078047","BS" +"3520078048","3520078911","US" +"3520078912","3520078927","AU" +"3520078928","3520078943","EC" +"3520078944","3520081455","US" +"3520081456","3520081471","BR" +"3520081472","3520082151","US" +"3520082152","3520082167","CA" +"3520082168","3520086271","US" +"3520086272","3520086527","CA" +"3520086528","3520086959","US" +"3520086960","3520086975","CA" +"3520086976","3520087327","US" +"3520087328","3520087359","DE" +"3520087360","3520088447","US" +"3520088448","3520088463","ES" +"3520088464","3520095455","US" +"3520095456","3520095471","NL" +"3520095472","3520097135","US" +"3520097136","3520097151","CA" +"3520097152","3520097791","US" +"3520097792","3520098047","CA" +"3520098048","3520100031","US" +"3520100032","3520100039","LB" +"3520100040","3520101839","US" +"3520101840","3520101855","CA" +"3520101856","3520101919","US" +"3520101920","3520101927","BR" +"3520101928","3520112975","US" +"3520112976","3520112991","ES" +"3520112992","3520114399","US" +"3520114400","3520114407","VG" +"3520114408","3520121519","US" +"3520121520","3520121535","GB" +"3520121536","3520356351","US" +"3520356352","3520364543","ZA" +"3520364544","3520369096","US" +"3520369097","3520369097","A1" +"3520369098","3520450943","US" +"3520450944","3520450959","GB" +"3520450960","3520454655","US" +"3520454656","3520462847","CA" +"3520462848","3520527871","US" +"3520527872","3520528383","A2" +"3520528384","3520626687","US" +"3520626688","3520634879","CA" +"3520634880","3520644607","US" +"3520644608","3520644863","A1" +"3520644864","3520652287","US" +"3520652288","3520652543","A1" +"3520652544","3520656383","US" +"3520656384","3520656639","A1" +"3520656640","3520675839","US" +"3520675840","3520675991","CA" +"3520675992","3520675999","US" +"3520676000","3520676919","CA" +"3520676920","3520676927","US" +"3520676928","3520679439","CA" +"3520679440","3520679447","US" +"3520679448","3520683247","CA" +"3520683248","3520683263","US" +"3520683264","3520683743","CA" +"3520683744","3520683759","US" +"3520683760","3520688399","CA" +"3520688400","3520688431","US" +"3520688432","3520689799","CA" +"3520689800","3520689807","US" +"3520689808","3520691583","CA" +"3520691584","3520691591","US" +"3520691592","3520691807","CA" +"3520691808","3520691839","US" +"3520691840","3520692223","CA" +"3520692224","3520749871","US" +"3520749872","3520749879","CA" +"3520749880","3520937983","US" +"3520937984","3520954367","CA" +"3520954368","3520956155","US" +"3520956156","3520956159","CH" +"3520956160","3520978943","US" +"3520978944","3520979711","BZ" +"3520979712","3520980735","GB" +"3520980736","3520981247","NL" +"3520981248","3520987903","US" +"3520987904","3520987935","A1" +"3520987936","3520994815","US" +"3520994816","3520995327","ES" +"3520995328","3520999423","US" +"3520999424","3521003519","CA" +"3521003520","3521028095","US" +"3521028096","3521032191","CA" +"3521032192","3521044479","US" +"3521044480","3521048575","CA" +"3521048576","3521049599","US" +"3521052672","3521074687","US" +"3521074688","3521074695","CA" +"3521074696","3521074735","US" +"3521074736","3521074751","AU" +"3521074752","3521086207","US" +"3521086208","3521086463","AU" +"3521086464","3521098551","US" +"3521098552","3521098559","MX" +"3521098560","3521103231","US" +"3521103232","3521103263","CA" +"3521103264","3521106527","US" +"3521106528","3521106543","CA" +"3521106544","3521186623","US" +"3521186624","3521186687","AR" +"3521186688","3521192703","US" +"3521192704","3521192735","FR" +"3521192736","3521196287","US" +"3521196288","3521196543","AR" +"3521196544","3521199103","US" +"3521199104","3521199167","CA" +"3521199168","3521199215","US" +"3521199216","3521199223","CA" +"3521199224","3521199231","US" +"3521199232","3521199239","CA" +"3521199240","3521249279","US" +"3521249280","3521314815","CA" +"3521314816","3521364735","US" +"3521364736","3521364815","IT" +"3521364816","3521366783","US" +"3521366784","3521367039","CY" +"3521367040","3521371423","US" +"3521371424","3521371455","IT" +"3521371456","3521371463","US" +"3521371464","3521371495","IT" +"3521371496","3521371647","US" +"3521371648","3521371679","CA" +"3521371680","3521371711","US" +"3521371712","3521371759","CA" +"3521371760","3521371903","US" +"3521371904","3521371911","IT" +"3521371912","3521371919","US" +"3521371920","3521371983","IT" +"3521371984","3521371999","US" +"3521372000","3521372031","IT" +"3521372032","3521372063","US" +"3521372064","3521372079","IN" +"3521372080","3521372095","IT" +"3521372096","3521372159","CA" +"3521372160","3521377407","US" +"3521377408","3521377439","IT" +"3521377440","3521835903","US" +"3521835904","3521835967","CA" +"3521835968","3521904639","US" +"3521904640","3521921023","JM" +"3521921024","3521933321","US" +"3521933322","3521933329","PK" +"3521933330","3521933345","MA" +"3521933346","3521933357","US" +"3521933358","3521933365","VE" +"3521933366","3521933389","US" +"3521933390","3521933397","AE" +"3521933398","3521933405","US" +"3521933406","3521933413","VE" +"3521933414","3521933421","IN" +"3521933422","3521933429","US" +"3521933430","3521933437","EG" +"3521933438","3521933445","VE" +"3521933446","3521933497","US" +"3521933498","3521933505","EG" +"3521933506","3521933537","GB" +"3521933538","3521933577","US" +"3521933578","3521933585","EG" +"3521933586","3521933605","US" +"3521933606","3521933613","AE" +"3521933614","3521933621","US" +"3521933622","3521933629","IN" +"3521933630","3521933725","US" +"3521933726","3521933733","GB" +"3521933734","3521933741","US" +"3521933742","3521933785","GB" +"3521933786","3521933833","US" +"3521933834","3521933841","EG" +"3521933842","3521933929","US" +"3521933930","3521933937","IN" +"3521933938","3521933945","US" +"3521933946","3521933953","EG" +"3521933954","3521933981","US" +"3521933982","3521933989","IN" +"3521933990","3521933997","EG" +"3521933998","3521934061","US" +"3521934062","3521934069","EG" +"3521934070","3521934089","US" +"3521934090","3521934097","EG" +"3521934098","3521934113","US" +"3521934114","3521934121","EG" +"3521934122","3521934129","ID" +"3521934130","3521934137","US" +"3521934138","3521934145","GR" +"3521934146","3521934161","ID" +"3521934162","3521934185","US" +"3521934186","3521934201","LK" +"3521934202","3521934233","US" +"3521934234","3521934241","ID" +"3521934242","3521934289","US" +"3521934290","3521934297","EG" +"3521934298","3521934314","US" +"3521934315","3521934322","EG" +"3521934323","3521934421","US" +"3521934422","3521934429","EG" +"3521934430","3521934437","US" +"3521934438","3521934445","IN" +"3521934446","3521934509","US" +"3521934510","3521934517","IN" +"3521934518","3521934727","US" +"3521934728","3521934743","EG" +"3521934744","3521934768","US" +"3521934769","3521934776","MA" +"3521934777","3521935310","US" +"3521935311","3521935318","EG" +"3521935319","3521935553","US" +"3521935554","3521935561","VE" +"3521935562","3521935685","US" +"3521935686","3521935693","EG" +"3521935694","3521935709","US" +"3521935710","3521935725","IN" +"3521935726","3521935741","US" +"3521935742","3521935749","VE" +"3521935750","3521935993","US" +"3521935994","3521936025","EG" +"3521936026","3521936243","US" +"3521936244","3521936251","IN" +"3521936252","3521936291","US" +"3521936292","3521936299","IN" +"3521936300","3521936393","US" +"3521936394","3521936412","EG" +"3521936413","3521936413","US" +"3521936414","3521936425","EG" +"3521936426","3521936739","US" +"3521936740","3521936747","ID" +"3521936748","3521936758","US" +"3521936759","3521936766","IN" +"3521936767","3521936827","US" +"3521936828","3521936860","EG" +"3521936861","3521936874","US" +"3521936875","3521936882","IN" +"3521936883","3521936993","US" +"3521936994","3521937001","LK" +"3521937002","3521937017","US" +"3521937018","3521937025","SG" +"3521937026","3521937161","US" +"3521937162","3521937252","EG" +"3521937253","3521937260","US" +"3521937261","3521937406","EG" +"3521937407","3521965055","US" +"3521965056","3521966079","DE" +"3521966080","3521989631","US" +"3521989632","3521989887","A2" +"3521989888","3522029439","US" +"3522029440","3522029503","FI" +"3522029504","3522029567","CA" +"3522029568","3522034447","US" +"3522034448","3522034463","GB" +"3522034464","3522101247","US" +"3522101248","3522109439","CA" +"3522109440","3522118143","US" +"3522118144","3522119679","GB" +"3522119680","3522119935","US" +"3522119936","3522120191","LY" +"3522120192","3522120447","US" +"3522120448","3522121215","LY" +"3522121216","3522121471","US" +"3522121472","3522121983","LY" +"3522121984","3522122239","AW" +"3522122240","3522123519","US" +"3522123520","3522123775","GB" +"3522123776","3522125055","US" +"3522125056","3522125311","GB" +"3522125312","3522130252","US" +"3522130253","3522130253","BR" +"3522130254","3522130276","US" +"3522130277","3522130277","EC" +"3522130278","3522130289","US" +"3522130290","3522130290","AR" +"3522130291","3522130291","BR" +"3522130292","3522130293","US" +"3522130294","3522130294","GT" +"3522130295","3522130296","US" +"3522130297","3522130297","CA" +"3522130298","3522130298","US" +"3522130299","3522130299","CA" +"3522130300","3522130308","US" +"3522130309","3522130309","AZ" +"3522130310","3522130312","CA" +"3522130313","3522130313","US" +"3522130314","3522130314","BR" +"3522130315","3522130325","US" +"3522130326","3522130326","EE" +"3522130327","3522130329","US" +"3522130330","3522130330","EC" +"3522130331","3522130331","BR" +"3522130332","3522130339","US" +"3522130340","3522130341","DO" +"3522130342","3522130342","PK" +"3522130343","3522130345","TH" +"3522130346","3522130346","US" +"3522130347","3522130348","CA" +"3522130349","3522131455","US" +"3522131456","3522131487","CY" +"3522131488","3522131519","DE" +"3522131520","3522131615","US" +"3522131616","3522131647","BR" +"3522131648","3522131711","US" +"3522131712","3522131743","GB" +"3522131744","3522131775","US" +"3522131776","3522131807","TR" +"3522131808","3522131855","US" +"3522131856","3522131857","DO" +"3522131858","3522131886","US" +"3522131887","3522131891","BR" +"3522131892","3522131892","AU" +"3522131893","3522131897","US" +"3522131898","3522131898","RU" +"3522131899","3522131899","BD" +"3522131900","3522131901","BR" +"3522131902","3522131904","US" +"3522131905","3522131905","BR" +"3522131906","3522131906","PK" +"3522131907","3522131907","DE" +"3522131908","3522131909","US" +"3522131910","3522131911","DE" +"3522131912","3522131913","IN" +"3522131914","3522131916","US" +"3522131917","3522131917","RO" +"3522131918","3522131919","GB" +"3522131920","3522131922","US" +"3522131923","3522131923","GB" +"3522131924","3522131926","BR" +"3522131927","3522132575","US" +"3522132576","3522132607","BR" +"3522132608","3522132639","CA" +"3522132640","3522132671","BO" +"3522132672","3522132703","BR" +"3522132704","3522132735","LK" +"3522132736","3522133023","US" +"3522133024","3522133055","BR" +"3522133056","3522133535","US" +"3522133536","3522133567","TR" +"3522133568","3522133599","BR" +"3522133600","3522133639","US" +"3522133640","3522133647","DE" +"3522133648","3522133663","US" +"3522133664","3522133695","DE" +"3522133696","3522133759","US" +"3522133760","3522133791","TR" +"3522133792","3522174975","US" +"3522174976","3522179071","BM" +"3522179072","3522195455","US" +"3522195456","3522199551","CA" +"3522199552","3522759591","US" +"3522759592","3522759599","CA" +"3522759600","3522773503","US" +"3522773504","3522773759","A1" +"3522773760","3522854911","US" +"3522854912","3522859999","CA" +"3522860000","3522860031","IN" +"3522860032","3522861279","CA" +"3522861280","3522861287","US" +"3522861288","3522871295","CA" +"3522871296","3522902015","US" +"3522902016","3522903039","CA" +"3522903040","3522937855","US" +"3522937856","3522938367","GB" +"3522938368","3523215359","US" +"3523215360","3523223551","AU" +"3523223552","3523231743","KR" +"3523231744","3523248127","AU" +"3523248128","3523280895","HK" +"3523280896","3523297279","TH" +"3523297280","3523298047","PH" +"3523298048","3523298303","US" +"3523298304","3523317759","PH" +"3523317760","3523330047","JP" +"3523330048","3523338239","AU" +"3523338240","3523340287","MY" +"3523340288","3523341311","AU" +"3523341312","3523342335","JP" +"3523342336","3523346431","BD" +"3523346432","3523354623","CN" +"3523354624","3523362815","KR" +"3523362816","3523379199","VN" +"3523379200","3523395583","PK" +"3523395584","3523411967","JP" +"3523411968","3523477503","HK" +"3523477504","3523493887","PH" +"3523493888","3523497983","BD" +"3523497984","3523500031","AU" +"3523500032","3523502079","KR" +"3523502080","3523510271","PH" +"3523510272","3523518463","TH" +"3523518464","3523526655","JP" +"3523526656","3523530751","US" +"3523530752","3523532799","NZ" +"3523532800","3523534847","KR" +"3523534848","3523538943","AU" +"3523538944","3523543039","JP" +"3523543040","3523551231","CN" +"3523551232","3523553279","AU" +"3523553280","3523555327","MY" +"3523555328","3523557375","NZ" +"3523557376","3523559423","CN" +"3523559424","3523575807","PH" +"3523575808","3523583999","CN" +"3523584000","3523592495","HK" +"3523592496","3523592503","IQ" +"3523592504","3523592703","HK" +"3523592704","3523592959","US" +"3523592960","3523593237","HK" +"3523593238","3523593238","US" +"3523593239","3523599615","HK" +"3523599616","3523600383","US" +"3523600384","3523601663","HK" +"3523601664","3523601919","SA" +"3523601920","3523603199","HK" +"3523603200","3523603711","US" +"3523603712","3523603967","EU" +"3523603968","3523604991","HK" +"3523604992","3523605247","US" +"3523605248","3523674111","HK" +"3523674112","3523682303","FJ" +"3523682304","3523686399","NZ" +"3523686400","3523690495","AU" +"3523690496","3523698687","IN" +"3523698688","3523699199","JP" +"3523699200","3523699711","US" +"3523699712","3523709183","JP" +"3523709184","3523709951","CN" +"3523709952","3523713279","JP" +"3523713280","3523713535","NL" +"3523713536","3523739647","JP" +"3523739648","3524001791","AU" +"3524001792","3524132863","CN" +"3524132864","3524145151","PH" +"3524145152","3524149247","JP" +"3524149248","3524157439","CN" +"3524157440","3524161535","AU" +"3524161536","3524247551","CN" +"3524247552","3524263935","AU" +"3524263936","3524280319","PH" +"3524296704","3524313087","CN" +"3524313088","3524329471","KR" +"3524329472","3524362239","TW" +"3524362240","3524395007","HK" +"3524395008","3524444159","IN" +"3524444160","3524460543","AU" +"3524460544","3524526079","MY" +"3524526080","3524591615","JP" +"3524591616","3524722687","CN" +"3524722688","3524730879","SG" +"3524730880","3524739071","CN" +"3524739072","3524743167","ID" +"3524743168","3524747263","MP" +"3524747264","3524755455","PH" +"3524755456","3524763647","SG" +"3524763648","3524788223","PH" +"3524788224","3524853759","SG" +"3524853760","3526361087","CN" +"3526361088","3526393855","NZ" +"3526393856","3526395903","JP" +"3526395904","3526397951","CN" +"3526397952","3526402047","MY" +"3526402048","3526410239","NZ" +"3526410240","3526414335","MY" +"3526414336","3526416383","AU" +"3526416384","3526418431","MY" +"3526418432","3526426623","JP" +"3526426624","3526557695","AU" +"3526557696","3526651135","CN" +"3526651136","3526651391","KP" +"3526651392","3526754303","CN" +"3526754304","3526885375","NZ" +"3526885376","3526893567","PK" +"3526893568","3526897663","NZ" +"3526897664","3526901759","HK" +"3526901760","3526909951","AU" +"3526909952","3526918143","IN" +"3526918144","3526922239","SG" +"3526922240","3526924287","IN" +"3526924288","3526926335","AU" +"3526926336","3526934527","JP" +"3526934528","3526942719","CN" +"3526942720","3526950911","AU" +"3526950912","3526955904","HK" +"3526955905","3526955905","JP" +"3526955906","3526967295","HK" +"3526967296","3526983679","JP" +"3526983680","3527004159","HK" +"3527004160","3527008255","ID" +"3527008256","3527016447","KR" +"3527016448","3527933951","TW" +"3527933952","3528392703","CN" +"3528392704","3528396799","JP" +"3528396800","3528400895","AU" +"3528400896","3528404991","JP" +"3528404992","3528407039","NZ" +"3528407040","3528409087","AU" +"3528409088","3528425471","CN" +"3528425472","3528441855","US" +"3528441856","3528445951","JP" +"3528445952","3528450047","ID" +"3528450048","3528458239","CN" +"3528458240","3528474623","AF" +"3528474624","3528482815","TW" +"3528482816","3528491007","KR" +"3528491008","3528507391","AU" +"3528507392","3528510975","JP" +"3528510976","3528511231","US" +"3528511232","3528513535","JP" +"3528513536","3528514559","US" +"3528514560","3528576767","JP" +"3528576768","3528577023","AP" +"3528577024","3528589311","JP" +"3528589312","3528720383","CN" +"3528720384","3528785919","AU" +"3528785920","3528851455","TW" +"3528851456","3528884223","NZ" +"3528884224","3528908799","TH" +"3528908800","3528912895","VN" +"3528912896","3528933375","AU" +"3528949760","3528966143","CN" +"3528966144","3528974335","KR" +"3528974336","3528978431","JP" +"3528978432","3528982527","HK" +"3528982528","3529056255","JP" +"3529056256","3529064447","IN" +"3529064448","3529072639","HK" +"3529072640","3529080831","JP" +"3529080832","3529089023","AU" +"3529089024","3529097215","KR" +"3529097216","3529113599","JP" +"3529113600","3531603967","KR" +"3531603968","3532792831","JP" +"3532792832","3532793087","US" +"3532793088","3532929279","JP" +"3532929280","3532929535","AP" +"3532929536","3534002943","JP" +"3534002944","3534003199","US" +"3534003200","3534749695","JP" +"3534749696","3534763775","HK" +"3534763776","3534764031","AP" +"3534764032","3534867711","HK" +"3534867712","3534867967","AP" +"3534867968","3534880767","HK" +"3534880768","3535273983","KR" +"3535273984","3535339519","HK" +"3535339520","3535355903","NZ" +"3535355904","3535372287","AU" +"3535372288","3535380479","JP" +"3535380480","3535388671","PH" +"3535388672","3535405055","CN" +"3535405056","3535536127","MY" +"3535536128","3535798271","JP" +"3535798272","3535814655","TW" +"3535814656","3535822847","KR" +"3535822848","3535831039","CN" +"3535831040","3535863807","TW" +"3535863808","3535880191","SG" +"3535880192","3535896575","JP" +"3535896576","3535929343","AU" +"3535929344","3535994879","JP" +"3535994880","3536060415","MY" +"3536060416","3536151295","JP" +"3536151296","3536151551","US" +"3536151552","3536322559","JP" +"3536322560","3536551935","TW" +"3536551936","3536568319","TH" +"3536568320","3536584703","JP" +"3536584704","3536846847","KR" +"3536846848","3536928767","TW" +"3536928768","3536945151","HK" +"3536945152","3536977919","TW" +"3536977920","3537010687","IN" +"3537010688","3537027071","ID" +"3537027072","3537047551","KR" +"3537047552","3537049599","ID" +"3537049600","3537051647","HK" +"3537051648","3537059839","JP" +"3537059840","3537068031","KR" +"3537068032","3537076223","VN" +"3537076224","3537174527","IN" +"3537174528","3537190911","TH" +"3537190912","3537240063","PH" +"3537240064","3537305599","IN" +"3537305600","3537325567","AU" +"3537325568","3537325823","AP" +"3537325824","3537371135","AU" +"3537371136","3537895423","KR" +"3537895424","3538534911","JP" +"3538534912","3538540543","US" +"3538540544","3538943999","JP" +"3538944000","3539271679","TW" +"3539271680","3539304447","VN" +"3539304448","3539337215","HK" +"3539337216","3539353599","NZ" +"3539353600","3539402751","TH" +"3539402752","3539435519","JP" +"3539435520","3539464191","AU" +"3539464192","3539468287","ID" +"3539468288","3539510271","JP" +"3539510272","3539510527","AP" +"3539510528","3541303295","JP" +"3541303296","3541565439","TW" +"3541565440","3541696511","MY" +"3541696512","3542089727","AU" +"3542089728","3544186879","KR" +"3544186880","3544711167","CN" +"3544711168","3545235455","TW" +"3545235456","3546808319","CN" +"3546808320","3547856895","KR" +"3547856896","3547917567","JP" +"3547917568","3547917823","US" +"3547917824","3548905471","JP" +"3548905472","3551002623","CN" +"3551002624","3556769791","KR" +"3556769792","3556774399","DE" +"3556774400","3556786175","EU" +"3556786176","3556794367","RU" +"3556794368","3556797767","ES" +"3556797768","3556797775","GB" +"3556797776","3556797839","ES" +"3556797840","3556797847","PT" +"3556797848","3556800079","ES" +"3556800080","3556800087","FR" +"3556800088","3556800799","ES" +"3556800800","3556800807","FR" +"3556800808","3556802559","ES" +"3556802560","3556810751","SD" +"3556810752","3556818943","PT" +"3556818944","3556827135","MD" +"3556827136","3556837887","NL" +"3556837888","3556838143","EU" +"3556838144","3556843519","NL" +"3556843520","3556847935","DE" +"3556847936","3556847967","US" +"3556847968","3556851711","DE" +"3556851712","3556868095","UA" +"3556868096","3556876287","GB" +"3556876288","3556884479","NL" +"3556884480","3556886527","IR" +"3556886528","3556888575","GB" +"3556888576","3556890623","US" +"3556890624","3556892671","GB" +"3556892672","3556900863","RU" +"3556900864","3556909055","GB" +"3556909056","3556925439","DE" +"3556925440","3556933631","PL" +"3556933632","3556941823","UA" +"3556941824","3556950015","IE" +"3556950016","3556958207","TR" +"3556958208","3556966399","KG" +"3556966400","3556974591","SE" +"3556974592","3556982783","ES" +"3556982784","3556984623","DE" +"3556984624","3556984639","FR" +"3556984640","3556984647","DE" +"3556984648","3556984651","FR" +"3556984652","3556984655","DE" +"3556984656","3556984743","FR" +"3556984744","3556984747","DE" +"3556984748","3556984751","FR" +"3556984752","3556985119","DE" +"3556985120","3556985135","ES" +"3556985136","3556985143","DE" +"3556985144","3556985151","ES" +"3556985152","3556985155","DE" +"3556985156","3556985159","ES" +"3556985160","3556985207","DE" +"3556985208","3556985215","ES" +"3556985216","3556985663","DE" +"3556985664","3556985671","HU" +"3556985672","3556986143","DE" +"3556986144","3556986155","DK" +"3556986156","3556990975","DE" +"3556990976","3556999167","UA" +"3556999168","3557007359","RU" +"3557007360","3557015551","IT" +"3557015552","3557023743","DE" +"3557023744","3557023879","BE" +"3557023880","3557023903","GB" +"3557023904","3557023999","BE" +"3557024000","3557024255","GB" +"3557024256","3557024767","BE" +"3557024768","3557025791","GB" +"3557025792","3557026047","BE" +"3557026048","3557026303","GB" +"3557026304","3557026815","BE" +"3557026816","3557027071","GB" +"3557027072","3557027839","BE" +"3557027840","3557027863","GB" +"3557027864","3557027871","BE" +"3557027872","3557027887","GB" +"3557027888","3557028031","BE" +"3557028032","3557028063","GB" +"3557028064","3557028095","BE" +"3557028096","3557028351","GB" +"3557028352","3557028735","BE" +"3557028736","3557028799","GB" +"3557028800","3557028911","BE" +"3557028912","3557028927","GB" +"3557028928","3557029059","BE" +"3557029060","3557029071","GB" +"3557029072","3557029887","BE" +"3557029888","3557029951","GB" +"3557029952","3557030079","BE" +"3557030080","3557030143","GB" +"3557030144","3557030719","BE" +"3557030720","3557030751","GB" +"3557030752","3557030767","BE" +"3557030768","3557030783","GB" +"3557030784","3557031807","BE" +"3557031808","3557031935","GB" +"3557031936","3557033575","IT" +"3557033576","3557033583","GB" +"3557033584","3557040127","IT" +"3557040128","3557048319","NO" +"3557048320","3557056511","CH" +"3557056512","3557064703","ES" +"3557064704","3557072895","CZ" +"3557072896","3557081087","DE" +"3557081088","3557086015","NL" +"3557086016","3557086047","DE" +"3557086048","3557086079","GB" +"3557086080","3557086719","NL" +"3557086720","3557086783","CH" +"3557086784","3557086847","IT" +"3557086848","3557089279","NL" +"3557089280","3557105663","DE" +"3557105664","3557113855","BG" +"3557113856","3557130239","RU" +"3557130240","3557138431","BG" +"3557138432","3557146623","RU" +"3557146624","3557154815","SK" +"3557154816","3557171199","RU" +"3557171200","3557172479","A2" +"3557172480","3557172991","IR" +"3557172992","3557173503","IQ" +"3557173504","3557173631","IR" +"3557173632","3557173695","IQ" +"3557173696","3557173703","AE" +"3557173704","3557173759","A2" +"3557173760","3557174015","IR" +"3557174016","3557174527","A2" +"3557174528","3557174783","IR" +"3557174784","3557175039","AE" +"3557175040","3557176063","IR" +"3557176064","3557176575","A2" +"3557176576","3557176619","NE" +"3557176620","3557176831","A2" +"3557176832","3557177023","IQ" +"3557177024","3557177343","A2" +"3557177344","3557177599","IT" +"3557177600","3557179135","A2" +"3557179136","3557179391","IT" +"3557179392","3557213351","DE" +"3557213352","3557213359","US" +"3557213360","3557228543","DE" +"3557228544","3557236735","EE" +"3557236736","3557244927","ES" +"3557244928","3557253119","IT" +"3557253120","3557261311","RU" +"3557261312","3557277695","DE" +"3557277696","3557278710","NL" +"3557278711","3557278714","CH" +"3557278715","3557280334","NL" +"3557280335","3557280336","IN" +"3557280337","3557285887","NL" +"3557285888","3557294079","RU" +"3557294080","3557302271","DE" +"3557302272","3557310463","UA" +"3557310464","3557326847","ES" +"3557326848","3557335039","DE" +"3557335040","3557335311","BE" +"3557335312","3557335327","EU" +"3557335328","3557335391","BE" +"3557335392","3557335455","EU" +"3557335456","3557335519","BE" +"3557335520","3557335535","EU" +"3557335536","3557335807","BE" +"3557335808","3557336127","EU" +"3557336128","3557336191","BE" +"3557336192","3557336255","EU" +"3557336256","3557336319","BE" +"3557336320","3557336575","EU" +"3557336576","3557336647","BE" +"3557336648","3557336655","EU" +"3557336656","3557336831","BE" +"3557336832","3557338111","EU" +"3557338112","3557338367","BE" +"3557338368","3557338495","EU" +"3557338496","3557338615","BE" +"3557338616","3557338879","EU" +"3557338880","3557339175","BE" +"3557339176","3557339183","EU" +"3557339184","3557339191","BE" +"3557339192","3557339215","EU" +"3557339216","3557339223","BE" +"3557339224","3557339239","EU" +"3557339240","3557339247","BE" +"3557339248","3557339259","EU" +"3557339260","3557339267","BE" +"3557339268","3557339271","EU" +"3557339272","3557340159","BE" +"3557340160","3557340191","EU" +"3557340192","3557340927","BE" +"3557340928","3557341183","EU" +"3557341184","3557341527","BE" +"3557341528","3557341535","EU" +"3557341536","3557341551","BE" +"3557341552","3557341559","EU" +"3557341560","3557341567","BE" +"3557341568","3557341663","EU" +"3557341664","3557341695","BE" +"3557341696","3557341951","EU" +"3557341952","3557342503","BE" +"3557342504","3557342559","EU" +"3557342560","3557342623","BE" +"3557342624","3557342719","EU" +"3557342720","3557343231","BE" +"3557343232","3557351423","DE" +"3557351424","3557359615","RU" +"3557359616","3557359655","JE" +"3557359656","3557359671","GB" +"3557359672","3557359695","JE" +"3557359696","3557359703","GB" +"3557359704","3557359871","JE" +"3557359872","3557360035","GB" +"3557360036","3557360039","JE" +"3557360040","3557360045","GB" +"3557360046","3557360047","JE" +"3557360048","3557360055","GB" +"3557360056","3557360063","JE" +"3557360064","3557360231","GB" +"3557360232","3557360247","JE" +"3557360248","3557360391","GB" +"3557360392","3557360439","JE" +"3557360440","3557360455","GB" +"3557360456","3557360463","JE" +"3557360464","3557360471","GB" +"3557360472","3557360543","JE" +"3557360544","3557360559","GB" +"3557360560","3557360575","JE" +"3557360576","3557360680","GB" +"3557360681","3557360687","JE" +"3557360688","3557360927","GB" +"3557360928","3557360943","JE" +"3557360944","3557360959","GB" +"3557360960","3557360967","JE" +"3557360968","3557361055","GB" +"3557361056","3557361087","JE" +"3557361088","3557361159","GB" +"3557361160","3557361279","JE" +"3557361280","3557361295","GB" +"3557361296","3557361311","JE" +"3557361312","3557361343","GB" +"3557361344","3557361359","JE" +"3557361360","3557361375","GB" +"3557361376","3557361391","JE" +"3557361392","3557361415","GB" +"3557361416","3557361423","JE" +"3557361424","3557361479","GB" +"3557361480","3557361487","JE" +"3557361488","3557361607","GB" +"3557361608","3557361615","JE" +"3557361616","3557361663","GB" +"3557361664","3557361983","JE" +"3557361984","3557362047","GB" +"3557362048","3557362431","JE" +"3557362432","3557362439","GB" +"3557362440","3557363455","JE" +"3557363456","3557363471","GB" +"3557363472","3557363479","JE" +"3557363480","3557363655","GB" +"3557363656","3557363663","JE" +"3557363664","3557363671","GB" +"3557363672","3557363679","JE" +"3557363680","3557363711","GB" +"3557363712","3557364095","JE" +"3557364096","3557364103","GB" +"3557364104","3557364107","JE" +"3557364108","3557364187","GB" +"3557364188","3557364199","JE" +"3557364200","3557364223","GB" +"3557364224","3557364495","JE" +"3557364496","3557364527","GB" +"3557364528","3557364551","JE" +"3557364552","3557364559","GB" +"3557364560","3557364615","JE" +"3557364616","3557364631","GB" +"3557364632","3557364655","JE" +"3557364656","3557364671","GB" +"3557364672","3557364735","JE" +"3557364736","3557364751","GB" +"3557364752","3557364759","JE" +"3557364760","3557364791","GB" +"3557364792","3557364847","JE" +"3557364848","3557364895","GB" +"3557364896","3557364927","JE" +"3557364928","3557364959","GB" +"3557364960","3557364991","JE" +"3557364992","3557365087","GB" +"3557365088","3557365103","JE" +"3557365104","3557365111","GB" +"3557365112","3557365119","JE" +"3557365120","3557365183","GB" +"3557365184","3557365375","JE" +"3557365376","3557365415","GB" +"3557365416","3557365503","JE" +"3557365504","3557365511","GB" +"3557365512","3557365519","JE" +"3557365520","3557365535","GB" +"3557365536","3557365567","JE" +"3557365568","3557365631","GB" +"3557365632","3557365695","JE" +"3557365696","3557365807","GB" +"3557365808","3557365823","JE" +"3557365824","3557365847","GB" +"3557365848","3557365871","JE" +"3557365872","3557365887","GB" +"3557365888","3557365895","JE" +"3557365896","3557365911","GB" +"3557365912","3557365919","JE" +"3557365920","3557365927","GB" +"3557365928","3557366015","JE" +"3557366016","3557366055","GB" +"3557366056","3557366063","JE" +"3557366064","3557366263","GB" +"3557366264","3557366271","JE" +"3557366272","3557366527","GB" +"3557366528","3557367807","JE" +"3557367808","3557375999","DE" +"3557376000","3557384191","ES" +"3557384192","3557392383","GB" +"3557392384","3557400575","AT" +"3557400576","3557404703","DE" +"3557404704","3557404719","CH" +"3557404720","3557404735","DE" +"3557404736","3557404799","CH" +"3557404800","3557408767","DE" +"3557408768","3557416959","GB" +"3557416960","3557425151","UA" +"3557425152","3557490687","DK" +"3557490688","3557497431","FR" +"3557497432","3557497439","A2" +"3557497440","3557507071","FR" +"3557507072","3557515263","GB" +"3557515264","3557523455","CZ" +"3557523456","3557531647","RU" +"3557531648","3557539839","SA" +"3557539840","3557548031","SY" +"3557548032","3557556223","DE" +"3557556224","3557564415","RU" +"3557564416","3557570319","DE" +"3557570320","3557570335","ES" +"3557570336","3557571295","DE" +"3557571296","3557571315","GB" +"3557571316","3557572607","DE" +"3557572608","3557580799","RU" +"3557580800","3557584287","DE" +"3557584288","3557584319","GB" +"3557584320","3557585151","DE" +"3557585152","3557585279","CH" +"3557585280","3557585695","DE" +"3557585696","3557585711","CH" +"3557585712","3557585887","DE" +"3557585888","3557585903","CH" +"3557585904","3557588991","DE" +"3557588992","3557597183","TR" +"3557597184","3557597711","SA" +"3557597712","3557597719","AS" +"3557597720","3557605375","SA" +"3557605376","3557613567","LT" +"3557613568","3557621759","EG" +"3557621760","3557629951","RU" +"3557629952","3557638143","PT" +"3557638144","3557646335","MK" +"3557646336","3557654527","RU" +"3557654528","3557670911","KZ" +"3557670912","3557679103","GB" +"3557679104","3557687295","SI" +"3557687296","3557703679","PL" +"3557703680","3557711871","DE" +"3557711872","3557720063","ES" +"3557720064","3557728255","IT" +"3557728256","3557744639","RU" +"3557744640","3557752831","PS" +"3557752832","3557761023","TR" +"3557761024","3557769215","RU" +"3557769216","3557777407","GB" +"3557777408","3557785599","RU" +"3557785600","3557793791","UA" +"3557793792","3557801983","HR" +"3557801984","3557810175","DE" +"3557810176","3557818367","ES" +"3557818368","3557826559","RU" +"3557826560","3557834751","AT" +"3557834752","3557836287","GB" +"3557836288","3557836543","IR" +"3557836544","3557837055","GB" +"3557837056","3557842943","IR" +"3557842944","3557851135","FI" +"3557851136","3557859327","HU" +"3557859328","3557859839","SE" +"3557859840","3557860095","NO" +"3557860096","3557860159","SE" +"3557860160","3557860167","DK" +"3557860168","3557860607","SE" +"3557860608","3557860623","FI" +"3557860624","3557860831","SE" +"3557860832","3557860847","FI" +"3557860848","3557860863","SE" +"3557860864","3557861119","NO" +"3557861120","3557861943","SE" +"3557861944","3557861947","FI" +"3557861948","3557862015","SE" +"3557862016","3557862031","BE" +"3557862032","3557862399","SE" +"3557862400","3557862911","FI" +"3557862912","3557863295","SE" +"3557863296","3557863327","FI" +"3557863328","3557863351","SE" +"3557863352","3557863359","FI" +"3557863360","3557863391","SE" +"3557863392","3557863399","FI" +"3557863400","3557863487","SE" +"3557863488","3557863503","NO" +"3557863504","3557863519","DK" +"3557863520","3557863887","SE" +"3557863888","3557863903","NO" +"3557863904","3557863919","FI" +"3557863920","3557864287","SE" +"3557864288","3557864303","DK" +"3557864304","3557864311","SE" +"3557864312","3557864319","FI" +"3557864320","3557864799","SE" +"3557864800","3557864831","FI" +"3557864832","3557867519","SE" +"3557867520","3557875711","RU" +"3557875712","3557883903","DE" +"3557883904","3557892095","RU" +"3557892096","3557900287","IE" +"3557900288","3557916671","AT" +"3557916672","3557920055","NO" +"3557920056","3557920056","DK" +"3557920057","3557924863","NO" +"3557924864","3557933055","FI" +"3557933056","3557941247","IT" +"3557941248","3557945183","DE" +"3557945184","3557945199","GB" +"3557945200","3557957631","DE" +"3557957632","3557965823","SI" +"3557965824","3557969407","DE" +"3557969408","3557969663","EU" +"3557969664","3557974015","DE" +"3557974016","3557982207","CH" +"3557982208","3557990399","NO" +"3557990400","3557998591","PT" +"3557998592","3558006783","DE" +"3558006784","3558014975","GB" +"3558014976","3558023167","RU" +"3558023168","3558023199","GB" +"3558023200","3558023343","DE" +"3558023344","3558023359","GB" +"3558023360","3558024383","DE" +"3558024384","3558024415","GB" +"3558024416","3558028063","DE" +"3558028064","3558028071","CH" +"3558028072","3558030655","DE" +"3558030656","3558030659","CH" +"3558030660","3558031359","DE" +"3558031360","3558039551","GB" +"3558039552","3558047743","IT" +"3558047744","3558055935","KZ" +"3558055936","3558064127","FR" +"3558064128","3558067839","NL" +"3558067840","3558067855","US" +"3558067856","3558080511","NL" +"3558080512","3558096895","RU" +"3558096896","3558113279","CZ" +"3558113280","3558122767","DE" +"3558122768","3558122783","CH" +"3558122784","3558129663","DE" +"3558129664","3558137855","NO" +"3558137856","3558146047","GB" +"3558146048","3558154239","RU" +"3558154240","3558154367","NG" +"3558154368","3558154495","SD" +"3558154496","3558154623","MZ" +"3558154624","3558154751","CI" +"3558154752","3558154879","CM" +"3558154880","3558155007","SD" +"3558155008","3558155263","US" +"3558155264","3558155391","ET" +"3558155392","3558155399","A2" +"3558155400","3558155407","KE" +"3558155408","3558155423","A2" +"3558155424","3558155431","MM" +"3558155432","3558155487","A2" +"3558155488","3558155503","SO" +"3558155504","3558155511","A2" +"3558155512","3558155515","DE" +"3558155516","3558155519","A2" +"3558155520","3558156031","SD" +"3558156032","3558156287","KG" +"3558156288","3558156375","GB" +"3558156376","3558156383","AF" +"3558156384","3558156391","A2" +"3558156392","3558156399","DK" +"3558156400","3558156455","AF" +"3558156456","3558156471","KE" +"3558156472","3558156479","A2" +"3558156480","3558156511","GB" +"3558156512","3558156527","NP" +"3558156528","3558156543","A2" +"3558156544","3558156671","KN" +"3558156672","3558156927","SM" +"3558156928","3558157183","AF" +"3558157184","3558157311","SM" +"3558157312","3558157319","A2" +"3558157320","3558157327","DE" +"3558157328","3558157335","SL" +"3558157336","3558157375","A2" +"3558157376","3558157391","UG" +"3558157392","3558157407","AF" +"3558157408","3558157439","SD" +"3558157440","3558157567","SZ" +"3558157568","3558157583","A2" +"3558157584","3558157599","MM" +"3558157600","3558157727","SD" +"3558157728","3558157759","SO" +"3558157760","3558157791","A2" +"3558157792","3558158079","SL" +"3558158080","3558158207","GB" +"3558158208","3558158239","SC" +"3558158240","3558158327","A2" +"3558158328","3558158331","SC" +"3558158332","3558158335","A2" +"3558158336","3558158847","SE" +"3558158848","3558159359","DE" +"3558159360","3558159615","US" +"3558159616","3558159747","A2" +"3558159748","3558159748","US" +"3558159749","3558159807","A2" +"3558159808","3558159839","DE" +"3558159840","3558159871","A2" +"3558159872","3558160127","SL" +"3558160128","3558160383","DE" +"3558160384","3558161151","A2" +"3558161152","3558161407","AF" +"3558161408","3558162143","A2" +"3558162144","3558162175","SO" +"3558162176","3558162207","BI" +"3558162208","3558162303","A2" +"3558162304","3558162431","BI" +"3558162432","3558170623","DE" +"3558170624","3558178815","GB" +"3558178816","3558187007","BG" +"3558187008","3558195199","DE" +"3558195200","3558195455","BE" +"3558195456","3558196031","ES" +"3558196032","3558196035","IT" +"3558196036","3558196039","ES" +"3558196040","3558196047","IT" +"3558196048","3558196119","ES" +"3558196120","3558196127","IT" +"3558196128","3558196159","ES" +"3558196160","3558196167","IT" +"3558196168","3558196175","ES" +"3558196176","3558196191","IT" +"3558196192","3558196199","ES" +"3558196200","3558196271","IT" +"3558196272","3558196351","ES" +"3558196352","3558196359","IT" +"3558196360","3558196367","ES" +"3558196368","3558196415","IT" +"3558196416","3558196543","ES" +"3558196544","3558196599","IT" +"3558196600","3558196735","ES" +"3558196736","3558199039","US" +"3558199040","3558199295","ES" +"3558199296","3558203391","US" +"3558203392","3558211583","ES" +"3558211584","3558219775","GB" +"3558219776","3558227967","ES" +"3558227968","3558236159","RU" +"3558236160","3558244351","GB" +"3558244352","3558252543","IT" +"3558252544","3558260735","KE" +"3558260736","3558268927","UA" +"3558268928","3558277119","GI" +"3558277120","3558285567","GB" +"3558285568","3558285823","DE" +"3558285824","3558285951","GB" +"3558285952","3558286079","DE" +"3558286080","3558286591","GB" +"3558286592","3558286655","FR" +"3558286656","3558286719","GB" +"3558286720","3558286847","FR" +"3558286848","3558287679","GB" +"3558287680","3558287743","BE" +"3558287744","3558287871","NL" +"3558287872","3558287935","FR" +"3558287936","3558287999","IT" +"3558288000","3558288063","DE" +"3558288064","3558288127","ES" +"3558288128","3558288191","AT" +"3558288192","3558288255","SE" +"3558288256","3558288319","US" +"3558288320","3558288383","CH" +"3558288384","3558288423","US" +"3558288424","3558288447","GB" +"3558288448","3558288483","US" +"3558288484","3558288487","GB" +"3558288488","3558288639","US" +"3558288640","3558288895","EU" +"3558288896","3558289103","FR" +"3558289104","3558289111","IT" +"3558289112","3558289119","GB" +"3558289120","3558289151","FR" +"3558289152","3558289407","GB" +"3558289408","3558289503","NL" +"3558289504","3558289535","GB" +"3558289536","3558289663","NL" +"3558289664","3558289747","IT" +"3558289748","3558289751","GB" +"3558289752","3558289775","IT" +"3558289776","3558289783","GB" +"3558289784","3558289919","IT" +"3558289920","3558290175","CZ" +"3558290176","3558290431","GB" +"3558290432","3558290575","BE" +"3558290576","3558290591","GB" +"3558290592","3558290599","BE" +"3558290600","3558290615","GB" +"3558290616","3558290663","BE" +"3558290664","3558290679","GB" +"3558290680","3558290687","BE" +"3558290688","3558290871","ES" +"3558290872","3558290879","GB" +"3558290880","3558290911","ES" +"3558290912","3558290943","GB" +"3558290944","3558290959","DE" +"3558290960","3558290967","NL" +"3558290968","3558290975","GB" +"3558290976","3558290991","NL" +"3558290992","3558291023","DE" +"3558291024","3558291031","SE" +"3558291032","3558291135","DE" +"3558291136","3558291215","GB" +"3558291216","3558291231","AT" +"3558291232","3558291239","CH" +"3558291240","3558291247","GB" +"3558291248","3558291263","CH" +"3558291264","3558291279","AT" +"3558291280","3558291295","GB" +"3558291296","3558291455","CH" +"3558291456","3558291459","DE" +"3558291460","3558291463","GB" +"3558291464","3558291471","DE" +"3558291472","3558292223","GB" +"3558292224","3558292287","SE" +"3558292288","3558292479","NL" +"3558292480","3558292735","EU" +"3558292736","3558292863","GB" +"3558292864","3558292871","CH" +"3558292872","3558292879","GB" +"3558292880","3558293119","NL" +"3558293120","3558293143","CH" +"3558293144","3558293151","GB" +"3558293152","3558293247","NL" +"3558293248","3558293503","GB" +"3558293504","3558301695","RU" +"3558301696","3558310319","DE" +"3558310320","3558310327","CH" +"3558310328","3558310511","DE" +"3558310512","3558310519","CH" +"3558310520","3558312791","DE" +"3558312792","3558312799","CH" +"3558312800","3558318079","DE" +"3558318080","3558319889","FR" +"3558319890","3558319891","ES" +"3558319892","3558334463","FR" +"3558334464","3558334935","CH" +"3558334936","3558334943","FR" +"3558334944","3558335499","CH" +"3558335500","3558335503","DE" +"3558335504","3558335511","CH" +"3558335512","3558335519","DE" +"3558335520","3558337515","CH" +"3558337516","3558337519","ES" +"3558337520","3558337783","CH" +"3558337784","3558337787","DE" +"3558337788","3558337789","CH" +"3558337790","3558337790","GB" +"3558337791","3558339359","CH" +"3558339360","3558339367","ES" +"3558339368","3558339699","CH" +"3558339700","3558339703","DE" +"3558339704","3558340039","CH" +"3558340040","3558340043","DE" +"3558340044","3558340655","CH" +"3558340656","3558340663","CG" +"3558340664","3558342655","CH" +"3558342656","3558350847","IT" +"3558350848","3558359039","RU" +"3558359040","3558367231","GB" +"3558367232","3558367271","AT" +"3558367272","3558367279","GI" +"3558367280","3558368015","AT" +"3558368016","3558368031","AR" +"3558368032","3558368063","CL" +"3558368064","3558368079","ES" +"3558368080","3558368095","DE" +"3558368096","3558368111","US" +"3558368112","3558368127","GB" +"3558368128","3558368159","AT" +"3558368160","3558368191","DE" +"3558368192","3558368207","US" +"3558368208","3558368223","GB" +"3558368224","3558368239","ES" +"3558368240","3558368255","AR" +"3558368256","3558368271","AT" +"3558368272","3558368287","GB" +"3558368288","3558368319","CL" +"3558368320","3558368383","AR" +"3558368384","3558368447","AT" +"3558368448","3558368479","DE" +"3558368480","3558368495","ES" +"3558368496","3558368511","US" +"3558368512","3558369487","AT" +"3558369488","3558369503","CH" +"3558369504","3558369519","FR" +"3558369520","3558372351","AT" +"3558372352","3558372607","BG" +"3558372608","3558372735","AT" +"3558372736","3558372863","ES" +"3558372864","3558375423","AT" +"3558375424","3558383615","CZ" +"3558383616","3558391807","HU" +"3558391808","3558399999","LU" +"3558400000","3558408191","SA" +"3558408192","3558412095","CH" +"3558412096","3558412103","GB" +"3558412104","3558416383","CH" +"3558416384","3558424575","BG" +"3558424576","3558440959","IL" +"3558440960","3558449151","SE" +"3558449152","3558457343","IT" +"3558457344","3558457407","BE" +"3558457408","3558457599","GB" +"3558457600","3558457727","FR" +"3558457728","3558465535","NL" +"3558465536","3558468607","GB" +"3558468608","3558469119","US" +"3558469120","3558473727","GB" +"3558473728","3558506495","SA" +"3558506496","3558514687","UA" +"3558514688","3558522879","SK" +"3558522880","3558531071","NL" +"3558531072","3558539263","RU" +"3558539264","3558547455","DK" +"3558547456","3558555647","FR" +"3558555648","3558572031","AT" +"3558572032","3558580223","DE" +"3558580224","3558581423","CH" +"3558581424","3558581439","DE" +"3558581440","3558588415","CH" +"3558588416","3558596607","CZ" +"3558596608","3558604799","EE" +"3558604800","3558612991","GB" +"3558612992","3558621183","DE" +"3558621184","3558629375","MD" +"3558629376","3558637567","DE" +"3558637568","3558645759","CH" +"3558645760","3558653951","IT" +"3558653952","3558662143","SE" +"3558662144","3558670335","LB" +"3558670336","3558686719","DE" +"3558686720","3558703103","TR" +"3558703104","3558711295","IT" +"3558711296","3558717695","NL" +"3558717696","3558717951","EU" +"3558717952","3558718207","NL" +"3558718208","3558718463","EU" +"3558718464","3558719487","NL" +"3558719488","3558735871","IL" +"3558735872","3558736127","GB" +"3558736128","3558736639","GG" +"3558736640","3558737055","GB" +"3558737056","3558737151","GG" +"3558737152","3558737279","GB" +"3558737280","3558737919","GG" +"3558737920","3558738751","GB" +"3558738752","3558738943","GG" +"3558738944","3558738991","GB" +"3558738992","3558739007","GG" +"3558739008","3558739039","GB" +"3558739040","3558739055","GG" +"3558739056","3558739199","GB" +"3558739200","3558739231","GG" +"3558739232","3558739295","GB" +"3558739296","3558739711","GG" +"3558739712","3558739975","GB" +"3558739976","3558739983","GG" +"3558739984","3558740015","GB" +"3558740016","3558740023","GG" +"3558740024","3558740031","GB" +"3558740032","3558740039","GG" +"3558740040","3558740063","GB" +"3558740064","3558740079","GG" +"3558740080","3558740087","GB" +"3558740088","3558740095","GG" +"3558740096","3558740183","GB" +"3558740184","3558740199","GG" +"3558740200","3558740207","GB" +"3558740208","3558740215","GG" +"3558740216","3558740222","GB" +"3558740223","3558740223","GG" +"3558740224","3558740255","GB" +"3558740256","3558740271","GG" +"3558740272","3558740287","GB" +"3558740288","3558740295","GG" +"3558740296","3558740343","GB" +"3558740344","3558740351","GG" +"3558740352","3558740359","GB" +"3558740360","3558740367","GG" +"3558740368","3558740383","GB" +"3558740384","3558740607","GG" +"3558740608","3558740687","GB" +"3558740688","3558741255","GG" +"3558741256","3558741271","GB" +"3558741272","3558741279","GG" +"3558741280","3558741287","GB" +"3558741288","3558741295","GG" +"3558741296","3558741311","GB" +"3558741312","3558741335","GG" +"3558741336","3558741359","GB" +"3558741360","3558741367","GG" +"3558741368","3558741391","GB" +"3558741392","3558741399","GG" +"3558741400","3558741423","GB" +"3558741424","3558741431","GG" +"3558741432","3558741439","GB" +"3558741440","3558741447","GG" +"3558741448","3558741471","GB" +"3558741472","3558741487","GG" +"3558741488","3558741503","GB" +"3558741504","3558742015","GG" +"3558742016","3558742039","GB" +"3558742040","3558742047","GG" +"3558742048","3558742055","GB" +"3558742056","3558742071","GG" +"3558742072","3558742079","GB" +"3558742080","3558742087","GG" +"3558742088","3558742103","GB" +"3558742104","3558742135","GG" +"3558742136","3558742159","GB" +"3558742160","3558742191","GG" +"3558742192","3558742215","GB" +"3558742216","3558742223","GG" +"3558742224","3558742239","GB" +"3558742240","3558742247","GG" +"3558742248","3558742255","GB" +"3558742256","3558742527","GG" +"3558742528","3558742543","GB" +"3558742544","3558742551","GG" +"3558742552","3558742567","GB" +"3558742568","3558742583","GG" +"3558742584","3558742623","GB" +"3558742624","3558742631","GG" +"3558742632","3558742655","GB" +"3558742656","3558742663","GG" +"3558742664","3558742679","GB" +"3558742680","3558742695","GG" +"3558742696","3558742727","GB" +"3558742728","3558742735","GG" +"3558742736","3558742743","GB" +"3558742744","3558742751","GG" +"3558742752","3558742775","GB" +"3558742776","3558743039","GG" +"3558743040","3558743047","GB" +"3558743048","3558743051","GG" +"3558743052","3558743075","GB" +"3558743076","3558743091","GG" +"3558743092","3558743107","GB" +"3558743108","3558743111","GG" +"3558743112","3558743115","GB" +"3558743116","3558743119","GG" +"3558743120","3558743131","GB" +"3558743132","3558743135","GG" +"3558743136","3558743147","GB" +"3558743148","3558743151","GG" +"3558743152","3558743167","GB" +"3558743168","3558743171","GG" +"3558743172","3558743183","GB" +"3558743184","3558743191","GG" +"3558743192","3558743203","GB" +"3558743204","3558743207","GG" +"3558743208","3558743219","GB" +"3558743220","3558743223","GG" +"3558743224","3558743235","GB" +"3558743236","3558743239","GG" +"3558743240","3558743243","GB" +"3558743244","3558743255","GG" +"3558743256","3558743263","GB" +"3558743264","3558743295","GG" +"3558743296","3558743303","GB" +"3558743304","3558743311","GG" +"3558743312","3558743319","GB" +"3558743320","3558743327","GG" +"3558743328","3558743351","GB" +"3558743352","3558743359","GG" +"3558743360","3558743383","GB" +"3558743384","3558743391","GG" +"3558743392","3558743399","GB" +"3558743400","3558743407","GG" +"3558743408","3558743439","GB" +"3558743440","3558743447","GG" +"3558743448","3558743463","GB" +"3558743464","3558743495","GG" +"3558743496","3558743507","GB" +"3558743508","3558743511","GG" +"3558743512","3558743535","GB" +"3558743536","3558743551","GG" +"3558743552","3558743839","GB" +"3558743840","3558744063","GG" +"3558744064","3558752255","LB" +"3558752256","3558760447","SI" +"3558760448","3558768639","FR" +"3558768640","3558785023","RU" +"3558785024","3558801407","IS" +"3558801408","3558809599","TR" +"3558809600","3558817791","ES" +"3558817792","3558825983","AT" +"3558825984","3558827807","CY" +"3558827808","3558827815","A2" +"3558827816","3558828287","CY" +"3558828288","3558828303","A2" +"3558828304","3558832383","CY" +"3558832384","3558832639","LB" +"3558832640","3558834175","CY" +"3558834176","3558842367","FR" +"3558842368","3558850559","SE" +"3558850560","3558850815","ES" +"3558850816","3558851327","US" +"3558851328","3558851471","ES" +"3558851472","3558851479","NO" +"3558851480","3558853119","ES" +"3558853120","3558853375","BE" +"3558853376","3558853399","ES" +"3558853400","3558853407","DE" +"3558853408","3558853439","ES" +"3558853440","3558853455","DE" +"3558853456","3558853463","ES" +"3558853464","3558853467","DE" +"3558853468","3558853503","ES" +"3558853504","3558853511","DE" +"3558853512","3558853535","ES" +"3558853536","3558853547","DE" +"3558853548","3558854655","ES" +"3558854656","3558854911","US" +"3558854912","3558854975","ES" +"3558854976","3558855039","US" +"3558855040","3558855167","GB" +"3558855168","3558855183","US" +"3558855184","3558855423","ES" +"3558855424","3558855431","NL" +"3558855432","3558855935","ES" +"3558855936","3558856191","US" +"3558856192","3558856575","GB" +"3558856576","3558856639","ES" +"3558856640","3558856703","NL" +"3558856704","3558858751","US" +"3558858752","3558864695","IT" +"3558864696","3558864703","GB" +"3558864704","3558866943","IT" +"3558866944","3558899711","GB" +"3558899712","3558916095","SE" +"3558916096","3558924287","RU" +"3558924288","3558932479","NL" +"3558932480","3558940671","RU" +"3558940672","3558948863","AT" +"3558948864","3558957055","PL" +"3558957056","3558965247","PS" +"3558965248","3558973439","NO" +"3558973440","3558981631","SA" +"3558981632","3558989823","IR" +"3558989824","3558998015","RU" +"3558998016","3559006207","JO" +"3559006208","3559014399","RU" +"3559014400","3559016191","DE" +"3559016192","3559016207","GB" +"3559016208","3559016215","JP" +"3559016216","3559022591","DE" +"3559022592","3559030783","RU" +"3559030784","3559038720","ES" +"3559038721","3559038975","US" +"3559038976","3559047167","DE" +"3559047168","3559055359","IT" +"3559055360","3559063551","AM" +"3559063552","3559079935","CH" +"3559079936","3559088127","JO" +"3559088128","3559088263","BE" +"3559088264","3559088267","GB" +"3559088268","3559088307","BE" +"3559088308","3559088311","GB" +"3559088312","3559088343","BE" +"3559088344","3559088347","GB" +"3559088348","3559088367","BE" +"3559088368","3559088371","GB" +"3559088372","3559088375","BE" +"3559088376","3559088379","GB" +"3559088380","3559088631","BE" +"3559088632","3559088639","DE" +"3559088640","3559089023","BE" +"3559089024","3559089027","GB" +"3559089028","3559089079","BE" +"3559089080","3559089087","GB" +"3559089088","3559089351","BE" +"3559089352","3559089359","GB" +"3559089360","3559089407","BE" +"3559089408","3559089411","GB" +"3559089412","3559089439","BE" +"3559089440","3559089443","GB" +"3559089444","3559089447","BE" +"3559089448","3559089451","GB" +"3559089452","3559089463","BE" +"3559089464","3559089467","GB" +"3559089468","3559089535","BE" +"3559089536","3559089543","GB" +"3559089544","3559089547","BE" +"3559089548","3559089551","GB" +"3559089552","3559089607","BE" +"3559089608","3559089611","GB" +"3559089612","3559089623","BE" +"3559089624","3559089627","GB" +"3559089628","3559089639","BE" +"3559089640","3559089643","GB" +"3559089644","3559089655","BE" +"3559089656","3559089659","GB" +"3559089660","3559090071","BE" +"3559090072","3559090079","NL" +"3559090080","3559090439","BE" +"3559090440","3559090443","GB" +"3559090444","3559090463","BE" +"3559090464","3559090467","GB" +"3559090468","3559090483","BE" +"3559090484","3559090487","GB" +"3559090488","3559090587","BE" +"3559090588","3559090591","GB" +"3559090592","3559090775","BE" +"3559090776","3559090779","GB" +"3559090780","3559090803","BE" +"3559090804","3559090807","GB" +"3559090808","3559090863","BE" +"3559090864","3559090879","GB" +"3559090880","3559090887","BE" +"3559090888","3559090899","GB" +"3559090900","3559090903","BE" +"3559090904","3559090907","GB" +"3559090908","3559090923","BE" +"3559090924","3559090927","GB" +"3559090928","3559091011","BE" +"3559091012","3559091015","GB" +"3559091016","3559091087","BE" +"3559091088","3559091091","GB" +"3559091092","3559091175","BE" +"3559091176","3559091183","GB" +"3559091184","3559091203","BE" +"3559091204","3559091207","GB" +"3559091208","3559091211","BE" +"3559091212","3559091215","GB" +"3559091216","3559091223","BE" +"3559091224","3559091231","GB" +"3559091232","3559091423","BE" +"3559091424","3559091427","GB" +"3559091428","3559091439","BE" +"3559091440","3559091447","ES" +"3559091448","3559091455","BE" +"3559091456","3559091487","DE" +"3559091488","3559091495","BE" +"3559091496","3559091503","GB" +"3559091504","3559091507","BE" +"3559091508","3559091511","GB" +"3559091512","3559091527","BE" +"3559091528","3559091543","GB" +"3559091544","3559091571","BE" +"3559091572","3559091575","GB" +"3559091576","3559091591","BE" +"3559091592","3559091615","GB" +"3559091616","3559091631","BE" +"3559091632","3559091639","LU" +"3559091640","3559091815","BE" +"3559091816","3559091823","GB" +"3559091824","3559091935","BE" +"3559091936","3559091951","GB" +"3559091952","3559092159","BE" +"3559092160","3559092160","GB" +"3559092161","3559092222","BE" +"3559092223","3559092223","GB" +"3559092224","3559092239","BE" +"3559092240","3559092247","GB" +"3559092248","3559092359","BE" +"3559092360","3559092367","GB" +"3559092368","3559092407","BE" +"3559092408","3559092415","GB" +"3559092416","3559092735","BE" +"3559092736","3559092739","GB" +"3559092740","3559092799","BE" +"3559092800","3559092803","GB" +"3559092804","3559092847","BE" +"3559092848","3559092863","GB" +"3559092864","3559092871","BE" +"3559092872","3559092895","GB" +"3559092896","3559092939","BE" +"3559092940","3559092943","GB" +"3559092944","3559092959","BE" +"3559092960","3559092975","GB" +"3559092976","3559092995","BE" +"3559092996","3559092999","GB" +"3559093000","3559093007","BE" +"3559093008","3559093015","GB" +"3559093016","3559093023","FR" +"3559093024","3559093031","BE" +"3559093032","3559093039","GB" +"3559093040","3559093047","BE" +"3559093048","3559093055","GB" +"3559093056","3559093063","BE" +"3559093064","3559093071","FR" +"3559093072","3559093075","BE" +"3559093076","3559093079","GB" +"3559093080","3559093083","BE" +"3559093084","3559093087","GB" +"3559093088","3559093103","BE" +"3559093104","3559093119","FR" +"3559093120","3559093135","BE" +"3559093136","3559093159","FR" +"3559093160","3559093163","GB" +"3559093164","3559093167","BE" +"3559093168","3559093171","GB" +"3559093172","3559093195","BE" +"3559093196","3559093203","GB" +"3559093204","3559093215","BE" +"3559093216","3559093219","GB" +"3559093220","3559093239","BE" +"3559093240","3559093243","GB" +"3559093244","3559093519","BE" +"3559093520","3559093535","GB" +"3559093536","3559093663","BE" +"3559093664","3559093671","GB" +"3559093672","3559093687","BE" +"3559093688","3559093699","GB" +"3559093700","3559093703","BE" +"3559093704","3559093711","GB" +"3559093712","3559093743","BE" +"3559093744","3559093759","GB" +"3559093760","3559093975","BE" +"3559093976","3559093983","GB" +"3559093984","3559094019","BE" +"3559094020","3559094023","GB" +"3559094024","3559094031","BE" +"3559094032","3559094039","FR" +"3559094040","3559094047","BE" +"3559094048","3559094055","FR" +"3559094056","3559094083","BE" +"3559094084","3559094087","GB" +"3559094088","3559094095","FR" +"3559094096","3559094099","GB" +"3559094100","3559094103","BE" +"3559094104","3559094111","GB" +"3559094112","3559094143","BE" +"3559094144","3559094147","GB" +"3559094148","3559094151","BE" +"3559094152","3559094159","GB" +"3559094160","3559094175","BE" +"3559094176","3559094179","GB" +"3559094180","3559094183","BE" +"3559094184","3559094191","GB" +"3559094192","3559094211","BE" +"3559094212","3559094215","GB" +"3559094216","3559094219","BE" +"3559094220","3559094223","GB" +"3559094224","3559094231","BE" +"3559094232","3559094235","GB" +"3559094236","3559094239","BE" +"3559094240","3559094243","GB" +"3559094244","3559094247","BE" +"3559094248","3559094251","GB" +"3559094252","3559094319","BE" +"3559094320","3559094335","GB" +"3559094336","3559094423","BE" +"3559094424","3559094447","GB" +"3559094448","3559094455","ES" +"3559094456","3559094527","BE" +"3559094528","3559095039","GB" +"3559095040","3559095055","BE" +"3559095056","3559095063","GB" +"3559095064","3559095167","BE" +"3559095168","3559095231","GB" +"3559095232","3559095263","BE" +"3559095264","3559095303","GB" +"3559095304","3559095359","BE" +"3559095360","3559095423","GB" +"3559095424","3559095439","BE" +"3559095440","3559095455","GB" +"3559095456","3559095487","BE" +"3559095488","3559095551","GB" +"3559095552","3559095591","BE" +"3559095592","3559095623","GB" +"3559095624","3559095631","BE" +"3559095632","3559095647","GB" +"3559095648","3559095871","BE" +"3559095872","3559095887","GB" +"3559095888","3559095919","BE" +"3559095920","3559095927","GB" +"3559095928","3559095935","BE" +"3559095936","3559095999","GB" +"3559096000","3559096047","BE" +"3559096048","3559096063","GB" +"3559096064","3559096123","BE" +"3559096124","3559096127","GB" +"3559096128","3559096199","BE" +"3559096200","3559096207","DE" +"3559096208","3559096215","BE" +"3559096216","3559096223","NL" +"3559096224","3559096247","BE" +"3559096248","3559096255","GB" +"3559096256","3559096319","BE" +"3559096320","3559103231","RO" +"3559103232","3559103487","GB" +"3559103488","3559104511","RO" +"3559104512","3559112703","RU" +"3559112704","3559120895","IT" +"3559120896","3559129087","GB" +"3559129088","3559137279","BG" +"3559137280","3559145471","GB" +"3559145472","3559153663","ES" +"3559153664","3559161855","GB" +"3559161856","3559161887","FR" +"3559161888","3559162047","GB" +"3559162048","3559162079","BE" +"3559162080","3559163903","GB" +"3559163904","3559163935","FR" +"3559163936","3559163999","GB" +"3559164000","3559164031","NL" +"3559164032","3559164151","GB" +"3559164152","3559164159","IT" +"3559164160","3559166335","GB" +"3559166336","3559166351","CH" +"3559166352","3559169023","GB" +"3559169024","3559169055","CH" +"3559169056","3559174703","GB" +"3559174704","3559174711","IT" +"3559174712","3559174743","GB" +"3559174744","3559174751","DE" +"3559174752","3559174767","GB" +"3559174768","3559174775","DE" +"3559174776","3559174783","GB" +"3559174784","3559174791","DK" +"3559174792","3559174799","GB" +"3559174800","3559174807","NO" +"3559174808","3559174943","GB" +"3559174944","3559174951","IT" +"3559174952","3559174975","GB" +"3559174976","3559174983","DE" +"3559174984","3559175079","GB" +"3559175080","3559175095","FR" +"3559175096","3559175127","GB" +"3559175128","3559175135","DE" +"3559175136","3559175143","FR" +"3559175144","3559175151","GB" +"3559175152","3559175167","FR" +"3559175168","3559177215","GB" +"3559177216","3559177471","DE" +"3559177472","3559177727","GB" +"3559177728","3559178239","DE" +"3559178240","3559186431","LB" +"3559186432","3559194623","RU" +"3559194624","3559202815","SE" +"3559202816","3559211007","DE" +"3559211008","3559219199","SK" +"3559219200","3559227391","SE" +"3559227392","3559235583","DK" +"3559235584","3559243775","DE" +"3559243776","3559251967","FR" +"3559251968","3559260159","NO" +"3559260160","3559268351","DE" +"3559268352","3559276543","IT" +"3559276544","3559284735","GB" +"3559284736","3559284895","RU" +"3559284896","3559284911","UA" +"3559284912","3559288175","RU" +"3559288176","3559288191","UA" +"3559288192","3559288207","AZ" +"3559288208","3559288831","RU" +"3559288832","3559289855","AZ" +"3559289856","3559291391","RU" +"3559291392","3559291647","AZ" +"3559291648","3559292927","RU" +"3559292928","3559301119","JO" +"3559301120","3559303167","DE" +"3559303168","3559309311","US" +"3559309312","3559317503","PL" +"3559317504","3559325695","FI" +"3559325696","3559333887","IT" +"3559333888","3559336447","SE" +"3559336448","3559336703","US" +"3559336704","3559342079","SE" +"3559342080","3559350271","BG" +"3559350272","3559358463","BA" +"3559358464","3559366655","FR" +"3559366656","3559368959","GB" +"3559368960","3559369215","AO" +"3559369216","3559374847","GB" +"3559374848","3559383039","AT" +"3559383040","3559391231","GB" +"3559391232","3559399423","CH" +"3559399424","3559407615","UA" +"3559407616","3559423999","HU" +"3559424000","3559432191","LB" +"3559432192","3559440383","DE" +"3559440384","3559448575","RU" +"3559448576","3559456767","ES" +"3559456768","3559473151","RU" +"3559473152","3559489535","CH" +"3559489536","3559490591","NL" +"3559490592","3559490623","DE" +"3559490624","3559490687","NL" +"3559490688","3559490719","ES" +"3559490720","3559490751","NL" +"3559490752","3559490783","ES" +"3559490784","3559490791","NL" +"3559490792","3559490799","BE" +"3559490800","3559490815","NL" +"3559490816","3559491071","ES" +"3559491072","3559491135","NL" +"3559491136","3559491167","ES" +"3559491168","3559491439","NL" +"3559491440","3559491455","ES" +"3559491456","3559491647","NL" +"3559491648","3559491711","ES" +"3559491712","3559491871","NL" +"3559491872","3559491903","GB" +"3559491904","3559491935","BE" +"3559491936","3559491999","ES" +"3559492000","3559492013","NL" +"3559492014","3559492015","ES" +"3559492016","3559492023","NL" +"3559492024","3559492031","ES" +"3559492032","3559493247","NL" +"3559493248","3559493279","ES" +"3559493280","3559493311","GB" +"3559493312","3559493349","NL" +"3559493350","3559493359","ES" +"3559493360","3559497727","NL" +"3559497728","3559505919","GB" +"3559505920","3559514111","CH" +"3559514112","3559522303","AT" +"3559522304","3559530495","GB" +"3559530496","3559538687","RU" +"3559538688","3559546879","UA" +"3559546880","3559555071","KG" +"3559555072","3559563263","CH" +"3559563264","3559571455","GB" +"3559571456","3559579647","AM" +"3559579648","3559586271","DE" +"3559586272","3559586303","US" +"3559586304","3559587839","DE" +"3559587840","3559596031","KW" +"3559596032","3559604223","BG" +"3559604224","3559607983","DE" +"3559607984","3559607999","LU" +"3559608000","3559608079","DE" +"3559608080","3559608095","LU" +"3559608096","3559608135","DE" +"3559608136","3559608143","LU" +"3559608144","3559611135","DE" +"3559611136","3559611391","GB" +"3559611392","3559611583","DE" +"3559611584","3559611647","LU" +"3559611648","3559611731","DE" +"3559611732","3559611735","NL" +"3559611736","3559612415","DE" +"3559612416","3559620607","IT" +"3559620608","3559628799","CH" +"3559628800","3559636991","GB" +"3559636992","3559653375","FR" +"3559653376","3559669759","GB" +"3559669760","3559677951","RU" +"3559677952","3559686143","SI" +"3559686144","3559694335","RU" +"3559694336","3559702655","DE" +"3559702656","3559702719","RU" +"3559702720","3559710719","DE" +"3559710720","3559718911","FR" +"3559718912","3559727103","RU" +"3559727104","3559735295","NL" +"3559735296","3559743487","BG" +"3559743488","3559745535","IT" +"3559745536","3559746099","DE" +"3559746100","3559746103","GB" +"3559746104","3559747583","DE" +"3559747584","3559751679","DK" +"3559751680","3559759871","IT" +"3559759872","3559768063","NO" +"3559768064","3559776255","CH" +"3559776256","3559792639","RU" +"3559792640","3559800831","SA" +"3559800832","3559809023","IT" +"3559809024","3559815427","DE" +"3559815428","3559815431","AT" +"3559815432","3559815595","DE" +"3559815596","3559815599","NL" +"3559815600","3559817215","DE" +"3559817216","3559825407","GB" +"3559825408","3559833599","IT" +"3559833600","3559849983","RU" +"3559849984","3559858175","CZ" +"3559858176","3559866367","IT" +"3559866368","3559874559","GB" +"3559874560","3559877951","LT" +"3559877952","3559877967","CH" +"3559877968","3559882751","LT" +"3559882752","3559890943","AZ" +"3559890944","3559899135","CH" +"3559899136","3559899487","UA" +"3559899488","3559899519","EE" +"3559899520","3559900275","UA" +"3559900276","3559900279","EE" +"3559900280","3559900431","UA" +"3559900432","3559900432","EE" +"3559900433","3559900439","UA" +"3559900440","3559900447","EE" +"3559900448","3559900483","UA" +"3559900484","3559900487","EE" +"3559900488","3559900492","UA" +"3559900493","3559900493","EE" +"3559900494","3559900503","UA" +"3559900504","3559900511","EE" +"3559900512","3559900611","UA" +"3559900612","3559900624","EE" +"3559900625","3559900671","UA" +"3559900672","3559900951","EE" +"3559900952","3559900959","DE" +"3559900960","3559900975","SE" +"3559900976","3559900983","PL" +"3559900984","3559900991","GB" +"3559900992","3559901007","RU" +"3559901008","3559901183","UA" +"3559901184","3559902011","EE" +"3559902012","3559902015","UA" +"3559902016","3559902031","EE" +"3559902032","3559902047","UA" +"3559902048","3559902055","EE" +"3559902056","3559902071","UA" +"3559902072","3559902079","EE" +"3559902080","3559902151","UA" +"3559902152","3559902159","EE" +"3559902160","3559902175","UA" +"3559902176","3559902215","EE" +"3559902216","3559902223","UA" +"3559902224","3559902271","EE" +"3559902272","3559902399","UA" +"3559902400","3559902591","EE" +"3559902592","3559902975","UA" +"3559902976","3559904003","EE" +"3559904004","3559904007","UA" +"3559904008","3559904043","EE" +"3559904044","3559904047","UA" +"3559904048","3559904775","EE" +"3559904776","3559904799","UA" +"3559904800","3559904815","EE" +"3559904816","3559904831","UA" +"3559904832","3559905027","EE" +"3559905028","3559905029","UA" +"3559905030","3559905051","EE" +"3559905052","3559905055","UA" +"3559905056","3559905139","EE" +"3559905140","3559905143","DE" +"3559905144","3559905151","UA" +"3559905152","3559905155","EE" +"3559905156","3559905159","UA" +"3559905160","3559905225","EE" +"3559905226","3559905231","UA" +"3559905232","3559905247","EE" +"3559905248","3559905255","UA" +"3559905256","3559905263","EE" +"3559905264","3559905271","UA" +"3559905272","3559905297","EE" +"3559905298","3559905299","UA" +"3559905300","3559905317","EE" +"3559905318","3559905319","LT" +"3559905320","3559905323","UA" +"3559905324","3559905331","EE" +"3559905332","3559905347","UA" +"3559905348","3559905349","EE" +"3559905350","3559905535","UA" +"3559905536","3559906257","EE" +"3559906258","3559906263","UA" +"3559906264","3559906267","EE" +"3559906268","3559906271","UA" +"3559906272","3559906815","EE" +"3559906816","3559907071","UA" +"3559907072","3559907327","EE" +"3559907328","3559915519","FR" +"3559915520","3559923711","IT" +"3559923712","3559931903","RU" +"3559931904","3559940095","IL" +"3559940096","3559945471","DE" +"3559945472","3559945727","US" +"3559945728","3559948287","DE" +"3559948288","3559956479","RU" +"3559956480","3559957567","IT" +"3559957568","3559957599","NL" +"3559957600","3559964159","IT" +"3559964160","3559964415","HU" +"3559964416","3559964671","IT" +"3559964672","3559981055","RU" +"3559981056","3559989247","EE" +"3559989248","3559997439","PL" +"3559997440","3560005631","KE" +"3560005632","3560013823","RU" +"3560013824","3560030207","ES" +"3560030208","3560046591","GB" +"3560046592","3560054783","BG" +"3560054784","3560062975","TR" +"3560062976","3560071167","BG" +"3560071168","3560079359","CY" +"3560079360","3560087551","FI" +"3560087552","3560095743","GB" +"3560095744","3560103935","FI" +"3560103936","3560112127","IR" +"3560112128","3560120319","DE" +"3560120320","3560128511","ES" +"3560128512","3560144895","HU" +"3560144896","3560153087","CH" +"3560153088","3560161279","FR" +"3560161280","3560169471","PL" +"3560169472","3560177663","AT" +"3560177664","3560185855","NL" +"3560185856","3560194047","LT" +"3560194048","3560210431","IT" +"3560210432","3560218623","BF" +"3560218624","3560226815","HU" +"3560226816","3560235007","AT" +"3560235008","3560243199","DE" +"3560243200","3560247295","BE" +"3560247296","3560251391","NL" +"3560251392","3560252159","RU" +"3560252160","3560252415","CZ" +"3560252416","3560253439","RU" +"3560253440","3560253695","CZ" +"3560253696","3560259583","RU" +"3560259584","3560267775","GB" +"3560267776","3560275967","CH" +"3560275968","3560308735","DE" +"3560308736","3560316927","FI" +"3560316928","3560325119","NL" +"3560325120","3560333311","DK" +"3560333312","3560341503","RO" +"3560341504","3560345599","GB" +"3560345600","3560346111","US" +"3560346112","3560357887","GB" +"3560357888","3560366079","GR" +"3560366080","3560366687","CH" +"3560366688","3560366695","IT" +"3560366696","3560366703","CH" +"3560366704","3560366719","IT" +"3560366720","3560374271","CH" +"3560374272","3560382463","ES" +"3560382464","3560387103","FO" +"3560387104","3560387111","DK" +"3560387112","3560390655","FO" +"3560390656","3560407039","RU" +"3560407040","3560423423","PT" +"3560423424","3560431615","CH" +"3560431616","3560439807","SK" +"3560439808","3560447999","BG" +"3560448000","3560449791","GB" +"3560449792","3560450047","US" +"3560450048","3560472575","GB" +"3560472576","3560480767","MT" +"3560480768","3560488959","IT" +"3560488960","3560497151","MD" +"3560497152","3560501247","LU" +"3560501248","3560501503","EU" +"3560501504","3560502527","DE" +"3560502528","3560502783","LU" +"3560502784","3560503039","DE" +"3560503040","3560505343","LU" +"3560505344","3560513535","TR" +"3560513536","3560515583","SK" +"3560515584","3560517631","RS" +"3560517632","3560521727","NL" +"3560521728","3560529919","PT" +"3560529920","3560554495","RU" +"3560554496","3560562687","SA" +"3560562688","3560570879","GB" +"3560570880","3560579071","TR" +"3560579072","3560587263","GB" +"3560587264","3560595455","DE" +"3560595456","3560603647","GE" +"3560603648","3560611839","GB" +"3560611840","3560620031","UA" +"3560620032","3560628223","RU" +"3560628224","3560632207","GB" +"3560632208","3560632215","NL" +"3560632216","3560636415","GB" +"3560636416","3560644607","LT" +"3560644608","3560652799","DE" +"3560652800","3560660991","GB" +"3560660992","3560669183","RU" +"3560669184","3560685567","CH" +"3560685568","3560693759","ES" +"3560693760","3560701951","PL" +"3560701952","3560710143","DE" +"3560710144","3560718335","CH" +"3560718336","3560726527","GM" +"3560726528","3560734719","DK" +"3560734720","3560742911","DE" +"3560742912","3560751103","AT" +"3560751104","3560761856","DE" +"3560761857","3560761857","A2" +"3560761858","3560767487","DE" +"3560767488","3560832791","NL" +"3560832792","3560832799","BE" +"3560832800","3560833023","NL" +"3560833024","3560841215","GB" +"3560841216","3560849407","RS" +"3560849408","3560849663","DE" +"3560849664","3560849727","NL" +"3560849728","3560852959","DE" +"3560852960","3560852967","GB" +"3560852968","3560857599","DE" +"3560857600","3560865791","SA" +"3560865792","3560882175","FR" +"3560882176","3560890367","DE" +"3560890368","3560898559","NO" +"3560898560","3560906751","FI" +"3560906752","3560916383","DE" +"3560916384","3560916391","CH" +"3560916392","3560919047","DE" +"3560919048","3560919055","CH" +"3560919056","3560923135","DE" +"3560923136","3560931327","ES" +"3560931328","3560939523","DE" +"3560939524","3560939527","AT" +"3560939528","3560939535","DE" +"3560939536","3560939539","PT" +"3560939540","3560939543","IT" +"3560939544","3560939555","DE" +"3560939556","3560939559","ES" +"3560939560","3560939567","DE" +"3560939568","3560939571","NL" +"3560939572","3560939579","ES" +"3560939580","3560939583","BE" +"3560939584","3560939587","DE" +"3560939588","3560939591","BE" +"3560939592","3560939607","DE" +"3560939608","3560939611","IT" +"3560939612","3560939643","DE" +"3560939644","3560939647","BE" +"3560939648","3560939655","DE" +"3560939656","3560939659","CH" +"3560939660","3560939663","DE" +"3560939664","3560939667","DK" +"3560939668","3560939679","DE" +"3560939680","3560939683","IT" +"3560939684","3560939687","AT" +"3560939688","3560939691","ES" +"3560939692","3560939695","FR" +"3560939696","3560939703","DE" +"3560939704","3560939707","ES" +"3560939708","3560939719","DE" +"3560939720","3560939727","GR" +"3560939728","3560939735","NL" +"3560939736","3560939751","FR" +"3560939752","3560939755","IT" +"3560939756","3560939759","DE" +"3560939760","3560939763","IT" +"3560939764","3560939767","DE" +"3560939768","3560939771","IE" +"3560939772","3560939775","CZ" +"3560939776","3560939779","BE" +"3560939780","3560939791","DE" +"3560939792","3560939795","FR" +"3560939796","3560939799","GB" +"3560939800","3560939803","DE" +"3560939804","3560939807","IT" +"3560939808","3560939811","FR" +"3560939812","3560939815","DE" +"3560939816","3560939819","CH" +"3560939820","3560939823","DE" +"3560939824","3560939827","LI" +"3560939828","3560939831","FR" +"3560939832","3560939839","DE" +"3560939840","3560939843","GB" +"3560939844","3560939847","ES" +"3560939848","3560939851","BE" +"3560939852","3560939855","ES" +"3560939856","3560939859","FR" +"3560939860","3560939863","HU" +"3560939864","3560939867","ES" +"3560939868","3560939875","DE" +"3560939876","3560939879","CH" +"3560939880","3560939887","DE" +"3560939888","3560939891","CH" +"3560939892","3560939895","DE" +"3560939896","3560939899","ES" +"3560939900","3560939903","GB" +"3560939904","3560939907","BR" +"3560939908","3560939911","NL" +"3560939912","3560939915","RE" +"3560939916","3560939919","ES" +"3560939920","3560939927","DE" +"3560939928","3560939931","NL" +"3560939932","3560939935","IT" +"3560939936","3560939939","DE" +"3560939940","3560939943","AT" +"3560939944","3560939951","FR" +"3560939952","3560939955","DE" +"3560939956","3560939959","AT" +"3560939960","3560939967","DE" +"3560939968","3560939971","ES" +"3560939972","3560939975","DE" +"3560939976","3560939983","BE" +"3560939984","3560939987","FR" +"3560939988","3560939991","ES" +"3560939992","3560939995","IT" +"3560939996","3560939999","DE" +"3560940000","3560940007","ES" +"3560940008","3560940015","DE" +"3560940016","3560940019","BE" +"3560940020","3560940023","GB" +"3560940024","3560940027","GR" +"3560940028","3560940043","DE" +"3560940044","3560940047","GB" +"3560940048","3560940051","ES" +"3560940052","3560940055","BE" +"3560940056","3560940059","NL" +"3560940060","3560940063","LU" +"3560940064","3560940067","CH" +"3560940068","3560940071","FR" +"3560940072","3560940075","DE" +"3560940076","3560940079","ES" +"3560940080","3560940087","DE" +"3560940088","3560940091","IT" +"3560940092","3560940095","CH" +"3560940096","3560940099","IT" +"3560940100","3560940103","FR" +"3560940104","3560940115","DE" +"3560940116","3560940119","FR" +"3560940120","3560940123","GB" +"3560940124","3560940127","DE" +"3560940128","3560940135","IT" +"3560940136","3560940139","AT" +"3560940140","3560940143","HU" +"3560940144","3560940147","DE" +"3560940148","3560940151","IT" +"3560940152","3560940155","FR" +"3560940156","3560940159","ES" +"3560940160","3560940163","IT" +"3560940164","3560940171","FR" +"3560940172","3560940175","DE" +"3560940176","3560940179","FR" +"3560940180","3560940183","BE" +"3560940184","3560940187","FR" +"3560940188","3560940191","IT" +"3560940192","3560940195","AT" +"3560940196","3560940199","DE" +"3560940200","3560940203","CY" +"3560940204","3560940207","DE" +"3560940208","3560940211","ES" +"3560940212","3560940215","FR" +"3560940216","3560940219","IE" +"3560940220","3560940227","DE" +"3560940228","3560940231","CH" +"3560940232","3560940235","IT" +"3560940236","3560940239","DE" +"3560940240","3560940243","PT" +"3560940244","3560940247","GB" +"3560940248","3560940251","DE" +"3560940252","3560940255","CH" +"3560940256","3560940263","DE" +"3560940264","3560940267","AT" +"3560940268","3560940275","GB" +"3560940276","3560940279","FR" +"3560940280","3560940283","AT" +"3560940284","3560940287","DE" +"3560940288","3560940291","FR" +"3560940292","3560940307","DE" +"3560940308","3560940311","BE" +"3560940312","3560940327","DE" +"3560940328","3560940331","ES" +"3560940332","3560940339","DE" +"3560940340","3560940343","CH" +"3560940344","3560940347","NL" +"3560940348","3560940367","DE" +"3560940368","3560940371","FR" +"3560940372","3560940379","CH" +"3560940380","3560940387","DE" +"3560940388","3560940391","ES" +"3560940392","3560940395","DE" +"3560940396","3560940399","IL" +"3560940400","3560940403","CH" +"3560940404","3560940407","DE" +"3560940408","3560940411","IT" +"3560940412","3560940419","DE" +"3560940420","3560940423","GR" +"3560940424","3560940431","DE" +"3560940432","3560940435","FR" +"3560940436","3560940439","DE" +"3560940440","3560940443","BE" +"3560940444","3560940447","SL" +"3560940448","3560940451","DE" +"3560940452","3560940455","NL" +"3560940456","3560940459","DE" +"3560940460","3560940463","HU" +"3560940464","3560940467","CY" +"3560940468","3560940471","DE" +"3560940472","3560940475","FR" +"3560940476","3560940479","CH" +"3560940480","3560940487","ES" +"3560940488","3560940491","CZ" +"3560940492","3560940495","ES" +"3560940496","3560940499","IT" +"3560940500","3560940503","DE" +"3560940504","3560940507","GB" +"3560940508","3560940511","IT" +"3560940512","3560940523","DE" +"3560940524","3560940527","FR" +"3560940528","3560940531","DE" +"3560940532","3560940535","FR" +"3560940536","3560940539","HU" +"3560940540","3560940543","IT" +"3560940544","3560940547","DE" +"3560940548","3560940551","IE" +"3560940552","3560940563","DE" +"3560940564","3560940567","GB" +"3560940568","3560940571","DE" +"3560940572","3560940575","DK" +"3560940576","3560940579","ES" +"3560940580","3560940583","IT" +"3560940584","3560940587","FR" +"3560940588","3560940591","IT" +"3560940592","3560940595","GR" +"3560940596","3560940599","CH" +"3560940600","3560940603","MA" +"3560940604","3560940607","GB" +"3560940608","3560940611","FR" +"3560940612","3560940615","CH" +"3560940616","3560940619","DE" +"3560940620","3560940623","AT" +"3560940624","3560940627","SM" +"3560940628","3560940631","PL" +"3560940632","3560940635","AT" +"3560940636","3560940639","DE" +"3560940640","3560940647","GB" +"3560940648","3560940655","DE" +"3560940656","3560940663","IT" +"3560940664","3560940683","DE" +"3560940684","3560940687","DK" +"3560940688","3560940691","IT" +"3560940692","3560940695","NO" +"3560940696","3560940699","FR" +"3560940700","3560940703","GB" +"3560940704","3560940707","ES" +"3560940708","3560940711","BE" +"3560940712","3560940715","DE" +"3560940716","3560940719","ES" +"3560940720","3560940723","PL" +"3560940724","3560940727","DE" +"3560940728","3560940731","FR" +"3560940732","3560940735","DE" +"3560940736","3560940739","DK" +"3560940740","3560940743","IT" +"3560940744","3560940751","DE" +"3560940752","3560940755","IE" +"3560940756","3560940763","FR" +"3560940764","3560940767","CH" +"3560940768","3560940779","DE" +"3560940780","3560940783","IT" +"3560940784","3560940787","NL" +"3560940788","3560940791","GB" +"3560940792","3560940799","ES" +"3560940800","3560940803","DE" +"3560940804","3560940807","GB" +"3560940808","3560940811","IT" +"3560940812","3560940815","DE" +"3560940816","3560940819","FR" +"3560940820","3560940823","NL" +"3560940824","3560940827","IT" +"3560940828","3560940831","ES" +"3560940832","3560940839","DE" +"3560940840","3560940843","IT" +"3560940844","3560940851","ES" +"3560940852","3560940859","DE" +"3560940860","3560940863","PT" +"3560940864","3560940867","IT" +"3560940868","3560940875","DE" +"3560940876","3560940879","FR" +"3560940880","3560940883","IT" +"3560940884","3560940887","NL" +"3560940888","3560940891","LU" +"3560940892","3560940895","ES" +"3560940896","3560940899","DE" +"3560940900","3560940903","NL" +"3560940904","3560940907","DE" +"3560940908","3560940915","GB" +"3560940916","3560940923","DE" +"3560940924","3560940927","ES" +"3560940928","3560940931","GR" +"3560940932","3560940935","CH" +"3560940936","3560940939","IT" +"3560940940","3560940951","DE" +"3560940952","3560940955","AT" +"3560940956","3560940963","NL" +"3560940964","3560940967","DE" +"3560940968","3560940971","NL" +"3560940972","3560940975","DE" +"3560940976","3560940979","FR" +"3560940980","3560940983","LU" +"3560940984","3560940987","IT" +"3560940988","3560940995","DE" +"3560940996","3560940999","DK" +"3560941000","3560941003","ES" +"3560941004","3560941007","PL" +"3560941008","3560941019","DE" +"3560941020","3560941023","IT" +"3560941024","3560941027","FR" +"3560941028","3560941031","CH" +"3560941032","3560941035","FR" +"3560941036","3560941039","DE" +"3560941040","3560941043","FR" +"3560941044","3560941047","DE" +"3560941048","3560941051","GR" +"3560941052","3560941059","FR" +"3560941060","3560941063","GB" +"3560941064","3560941071","FR" +"3560941072","3560941075","NL" +"3560941076","3560941079","GB" +"3560941080","3560941083","BE" +"3560941084","3560941087","IT" +"3560941088","3560941091","DE" +"3560941092","3560941095","BE" +"3560941096","3560941099","AT" +"3560941100","3560941103","IT" +"3560941104","3560941107","FR" +"3560941108","3560941119","DE" +"3560941120","3560941123","BE" +"3560941124","3560941127","FR" +"3560941128","3560941131","DE" +"3560941132","3560941135","GB" +"3560941136","3560941147","DE" +"3560941148","3560941151","IT" +"3560941152","3560941155","DK" +"3560941156","3560941159","ES" +"3560941160","3560941163","IT" +"3560941164","3560941167","DE" +"3560941168","3560941171","NL" +"3560941172","3560941175","DE" +"3560941176","3560941179","ES" +"3560941180","3560941183","GB" +"3560941184","3560941187","IT" +"3560941188","3560941191","ES" +"3560941192","3560941195","CH" +"3560941196","3560941199","FR" +"3560941200","3560941203","DE" +"3560941204","3560941207","IT" +"3560941208","3560941211","MA" +"3560941212","3560941215","DE" +"3560941216","3560941219","NL" +"3560941220","3560941223","GB" +"3560941224","3560941227","DE" +"3560941228","3560941231","SE" +"3560941232","3560941235","FR" +"3560941236","3560941243","DE" +"3560941244","3560941251","IT" +"3560941252","3560941255","FR" +"3560941256","3560941259","AT" +"3560941260","3560941263","GB" +"3560941264","3560941271","ES" +"3560941272","3560941275","DK" +"3560941276","3560941279","GR" +"3560941280","3560941283","NL" +"3560941284","3560941287","DE" +"3560941288","3560941291","ES" +"3560941292","3560941295","DE" +"3560941296","3560941303","IT" +"3560941304","3560941307","FR" +"3560941308","3560941315","DE" +"3560941316","3560941319","SE" +"3560941320","3560941323","ES" +"3560941324","3560941331","IT" +"3560941332","3560941335","PT" +"3560941336","3560941339","BE" +"3560941340","3560941343","GB" +"3560941344","3560941347","FR" +"3560941348","3560941351","IE" +"3560941352","3560941355","NL" +"3560941356","3560941359","ES" +"3560941360","3560941367","DE" +"3560941368","3560941371","DK" +"3560941372","3560941379","DE" +"3560941380","3560941383","CH" +"3560941384","3560941387","IE" +"3560941388","3560941391","SE" +"3560941392","3560941395","DK" +"3560941396","3560941399","IS" +"3560941400","3560941407","DE" +"3560941408","3560941411","CH" +"3560941412","3560941415","IT" +"3560941416","3560941419","DE" +"3560941420","3560941423","FR" +"3560941424","3560941427","DE" +"3560941428","3560941431","FR" +"3560941432","3560941435","DE" +"3560941436","3560941439","IN" +"3560941440","3560941443","DE" +"3560941444","3560941447","ES" +"3560941448","3560941459","GB" +"3560941460","3560941467","DE" +"3560941468","3560941471","CH" +"3560941472","3560941475","BE" +"3560941476","3560941479","ES" +"3560941480","3560941483","DE" +"3560941484","3560941487","ES" +"3560941488","3560941491","DE" +"3560941492","3560941495","GB" +"3560941496","3560941499","FR" +"3560941500","3560941503","ES" +"3560941504","3560941507","DE" +"3560941508","3560941511","IT" +"3560941512","3560941515","AT" +"3560941516","3560941519","SE" +"3560941520","3560941523","NO" +"3560941524","3560941535","DE" +"3560941536","3560941539","DK" +"3560941540","3560941543","FR" +"3560941544","3560941547","GB" +"3560941548","3560941551","DE" +"3560941552","3560941555","IT" +"3560941556","3560941559","DE" +"3560941560","3560941563","GB" +"3560941564","3560941567","GR" +"3560941568","3560941587","DE" +"3560941588","3560941591","ES" +"3560941592","3560941599","DE" +"3560941600","3560941603","FR" +"3560941604","3560941607","CH" +"3560941608","3560941611","GB" +"3560941612","3560941623","DE" +"3560941624","3560941627","GB" +"3560941628","3560941631","ES" +"3560941632","3560941635","NL" +"3560941636","3560941639","BE" +"3560941640","3560941643","GB" +"3560941644","3560941647","BE" +"3560941648","3560941651","NO" +"3560941652","3560941655","DE" +"3560941656","3560941659","GB" +"3560941660","3560941663","NL" +"3560941664","3560941671","DE" +"3560941672","3560941679","FR" +"3560941680","3560941683","GB" +"3560941684","3560941687","IT" +"3560941688","3560941691","DE" +"3560941692","3560941695","IT" +"3560941696","3560941699","FR" +"3560941700","3560941703","GB" +"3560941704","3560941711","DE" +"3560941712","3560941715","FR" +"3560941716","3560941723","DE" +"3560941724","3560941727","FR" +"3560941728","3560941735","DE" +"3560941736","3560941739","NL" +"3560941740","3560941743","NO" +"3560941744","3560941747","FR" +"3560941748","3560941751","ES" +"3560941752","3560941755","BE" +"3560941756","3560941771","DE" +"3560941772","3560941787","GB" +"3560941788","3560941791","DE" +"3560941792","3560941795","ES" +"3560941796","3560941799","FR" +"3560941800","3560941803","NL" +"3560941804","3560941807","ES" +"3560941808","3560941811","FR" +"3560941812","3560941815","NO" +"3560941816","3560941819","FR" +"3560941820","3560941823","NL" +"3560941824","3560941827","DE" +"3560941828","3560941831","ES" +"3560941832","3560941835","GB" +"3560941836","3560941843","DE" +"3560941844","3560941847","IT" +"3560941848","3560941851","BE" +"3560941852","3560941855","CH" +"3560941856","3560941859","BE" +"3560941860","3560941867","DE" +"3560941868","3560941871","AT" +"3560941872","3560941875","GB" +"3560941876","3560941879","NL" +"3560941880","3560941883","BG" +"3560941884","3560941887","DE" +"3560941888","3560941891","ES" +"3560941892","3560941895","IT" +"3560941896","3560941899","ES" +"3560941900","3560941903","DE" +"3560941904","3560941907","GB" +"3560941908","3560941911","DE" +"3560941912","3560941919","FR" +"3560941920","3560941931","DE" +"3560941932","3560941935","CH" +"3560941936","3560941947","DE" +"3560941948","3560941951","DK" +"3560941952","3560941955","IT" +"3560941956","3560941959","DE" +"3560941960","3560941963","LU" +"3560941964","3560941967","FR" +"3560941968","3560941971","DE" +"3560941972","3560941975","DK" +"3560941976","3560941983","DE" +"3560941984","3560941987","NL" +"3560941988","3560941991","DE" +"3560941992","3560941995","GB" +"3560941996","3560941999","BE" +"3560942000","3560942003","FR" +"3560942004","3560942007","GB" +"3560942008","3560942011","IT" +"3560942012","3560942015","DE" +"3560942016","3560942019","NL" +"3560942020","3560942023","ES" +"3560942024","3560942027","CH" +"3560942028","3560942035","DE" +"3560942036","3560942039","GB" +"3560942040","3560942047","DE" +"3560942048","3560942051","IT" +"3560942052","3560942055","DE" +"3560942056","3560942059","IS" +"3560942060","3560942063","GB" +"3560942064","3560942067","ES" +"3560942068","3560942071","BE" +"3560942072","3560942083","DE" +"3560942084","3560942087","FR" +"3560942088","3560942095","DE" +"3560942096","3560942099","FR" +"3560942100","3560942103","DE" +"3560942104","3560942107","NL" +"3560942108","3560942115","DE" +"3560942116","3560942119","HU" +"3560942120","3560942123","AT" +"3560942124","3560942127","BE" +"3560942128","3560942131","DE" +"3560942132","3560942135","ES" +"3560942136","3560942143","DE" +"3560942144","3560942147","GB" +"3560942148","3560942151","DE" +"3560942152","3560942155","IT" +"3560942156","3560942159","ES" +"3560942160","3560942163","DE" +"3560942164","3560942171","ES" +"3560942172","3560942175","SE" +"3560942176","3560942179","BE" +"3560942180","3560942183","ES" +"3560942184","3560942191","DE" +"3560942192","3560942195","HU" +"3560942196","3560942199","ES" +"3560942200","3560942203","FR" +"3560942204","3560942211","DE" +"3560942212","3560942219","IT" +"3560942220","3560942227","FR" +"3560942228","3560942231","IT" +"3560942232","3560942243","DE" +"3560942244","3560942247","IT" +"3560942248","3560942251","TR" +"3560942252","3560942255","GB" +"3560942256","3560942259","DE" +"3560942260","3560942263","ES" +"3560942264","3560942267","NL" +"3560942268","3560942271","DE" +"3560942272","3560942275","PL" +"3560942276","3560942279","IT" +"3560942280","3560942283","NL" +"3560942284","3560942287","DK" +"3560942288","3560942291","FR" +"3560942292","3560942295","BH" +"3560942296","3560942299","MA" +"3560942300","3560942307","DE" +"3560942308","3560942319","ES" +"3560942320","3560942323","DE" +"3560942324","3560942327","IT" +"3560942328","3560942339","PT" +"3560942340","3560942343","DE" +"3560942344","3560942347","FR" +"3560942348","3560942351","DE" +"3560942352","3560942355","ES" +"3560942356","3560942359","IT" +"3560942360","3560942363","AT" +"3560942364","3560942367","DE" +"3560942368","3560942375","FR" +"3560942376","3560942379","DE" +"3560942380","3560942383","GB" +"3560942384","3560942387","DE" +"3560942388","3560942391","IT" +"3560942392","3560942407","DE" +"3560942408","3560942411","GB" +"3560942412","3560942415","DE" +"3560942416","3560942419","IT" +"3560942420","3560942423","FR" +"3560942424","3560942427","NO" +"3560942428","3560942447","DE" +"3560942448","3560942455","CH" +"3560942456","3560942459","ES" +"3560942460","3560942463","RU" +"3560942464","3560942467","BE" +"3560942468","3560942471","ES" +"3560942472","3560942475","DE" +"3560942476","3560942479","CH" +"3560942480","3560942483","ES" +"3560942484","3560942487","HU" +"3560942488","3560942495","FR" +"3560942496","3560942499","ES" +"3560942500","3560942503","DE" +"3560942504","3560942511","ES" +"3560942512","3560942515","IT" +"3560942516","3560942523","DE" +"3560942524","3560942527","NL" +"3560942528","3560942535","DE" +"3560942536","3560942539","FR" +"3560942540","3560942543","DE" +"3560942544","3560942547","CH" +"3560942548","3560942551","DK" +"3560942552","3560942555","DE" +"3560942556","3560942559","FR" +"3560942560","3560942563","IT" +"3560942564","3560942567","ES" +"3560942568","3560942571","DE" +"3560942572","3560942579","FR" +"3560942580","3560942583","DE" +"3560942584","3560942587","GB" +"3560942588","3560942590","ES" +"3560942591","3560942599","DE" +"3560942600","3560942603","DK" +"3560942604","3560942619","DE" +"3560942620","3560942623","BE" +"3560942624","3560942627","IT" +"3560942628","3560942631","GB" +"3560942632","3560942635","FR" +"3560942636","3560942643","DE" +"3560942644","3560942647","FR" +"3560942648","3560942651","DE" +"3560942652","3560942655","GR" +"3560942656","3560942663","ES" +"3560942664","3560942667","NL" +"3560942668","3560942675","IT" +"3560942676","3560942679","BE" +"3560942680","3560942683","DE" +"3560942684","3560942687","BE" +"3560942688","3560942691","NL" +"3560942692","3560942695","LU" +"3560942696","3560942699","DE" +"3560942700","3560942703","ES" +"3560942704","3560942707","DE" +"3560942708","3560942711","IT" +"3560942712","3560942715","LU" +"3560942716","3560942719","BE" +"3560942720","3560942727","IT" +"3560942728","3560942731","GB" +"3560942732","3560942735","DE" +"3560942736","3560942739","CH" +"3560942740","3560942743","ES" +"3560942744","3560942751","GB" +"3560942752","3560942763","DE" +"3560942764","3560942767","FR" +"3560942768","3560942779","DE" +"3560942780","3560942783","CH" +"3560942784","3560942787","DE" +"3560942788","3560942791","HU" +"3560942792","3560942795","DE" +"3560942796","3560942799","FR" +"3560942800","3560942803","AT" +"3560942804","3560942807","TR" +"3560942808","3560942811","AT" +"3560942812","3560942815","FR" +"3560942816","3560942819","TR" +"3560942820","3560942823","ES" +"3560942824","3560942827","GB" +"3560942828","3560942831","AT" +"3560942832","3560942835","IT" +"3560942836","3560942839","CH" +"3560942840","3560942843","BE" +"3560942844","3560942847","ES" +"3560942848","3560942851","IT" +"3560942852","3560942855","ES" +"3560942856","3560942859","DE" +"3560942860","3560942863","IT" +"3560942864","3560942871","DE" +"3560942872","3560942875","IT" +"3560942876","3560942879","PL" +"3560942880","3560942883","GB" +"3560942884","3560942887","DE" +"3560942888","3560942891","FR" +"3560942892","3560942895","DE" +"3560942896","3560942899","ES" +"3560942900","3560942903","DE" +"3560942904","3560942907","CH" +"3560942908","3560942915","DE" +"3560942916","3560942919","BE" +"3560942920","3560942923","DE" +"3560942924","3560942927","IT" +"3560942928","3560942931","SE" +"3560942932","3560942935","AT" +"3560942936","3560942939","DE" +"3560942940","3560942943","AE" +"3560942944","3560942951","DE" +"3560942952","3560942955","ES" +"3560942956","3560942959","DE" +"3560942960","3560942963","GB" +"3560942964","3560942983","DE" +"3560942984","3560942987","BE" +"3560942988","3560942999","IT" +"3560943000","3560943003","PL" +"3560943004","3560943007","DK" +"3560943008","3560943011","CH" +"3560943012","3560943015","IT" +"3560943016","3560943019","ES" +"3560943020","3560943023","DE" +"3560943024","3560943027","GR" +"3560943028","3560943031","DE" +"3560943032","3560943035","FR" +"3560943036","3560943039","PL" +"3560943040","3560943043","NO" +"3560943044","3560943047","ES" +"3560943048","3560943051","HR" +"3560943052","3560943055","CY" +"3560943056","3560943059","BE" +"3560943060","3560943075","DE" +"3560943076","3560943079","ES" +"3560943080","3560943095","DE" +"3560943096","3560943099","PL" +"3560943100","3560943110","DE" +"3560943111","3560943111","ES" +"3560943112","3560943113","DE" +"3560943114","3560943115","ES" +"3560943116","3560943116","DK" +"3560943117","3560943117","IL" +"3560943118","3560943118","DE" +"3560943119","3560943119","IT" +"3560943120","3560943120","DE" +"3560943121","3560943121","CH" +"3560943122","3560943122","ES" +"3560943123","3560943125","DE" +"3560943126","3560943126","FR" +"3560943127","3560943127","HU" +"3560943128","3560943129","DE" +"3560943130","3560943130","BE" +"3560943131","3560943131","RU" +"3560943132","3560943132","BE" +"3560943133","3560943133","ES" +"3560943134","3560943136","DE" +"3560943137","3560943137","ES" +"3560943138","3560943138","CH" +"3560943139","3560943139","DE" +"3560943140","3560943140","ES" +"3560943141","3560943141","CH" +"3560943142","3560943142","DE" +"3560943143","3560943145","HU" +"3560943146","3560943146","IE" +"3560943147","3560943147","CH" +"3560943148","3560943149","DE" +"3560943150","3560943150","ES" +"3560943151","3560943151","IT" +"3560943152","3560943152","HU" +"3560943153","3560943154","DE" +"3560943155","3560943155","FR" +"3560943156","3560943157","DE" +"3560943158","3560943158","FR" +"3560943159","3560943159","IT" +"3560943160","3560943160","NO" +"3560943161","3560943161","BE" +"3560943162","3560943162","GR" +"3560943163","3560943163","DE" +"3560943164","3560943164","PL" +"3560943165","3560943165","FR" +"3560943166","3560943166","GB" +"3560943167","3560943167","FR" +"3560943168","3560943168","ES" +"3560943169","3560943169","DE" +"3560943170","3560943170","ES" +"3560943171","3560943171","IT" +"3560943172","3560943172","ES" +"3560943173","3560943173","BE" +"3560943174","3560943175","DE" +"3560943176","3560943177","CH" +"3560943178","3560943178","IT" +"3560943179","3560943179","PL" +"3560943180","3560943180","GB" +"3560943181","3560943181","DE" +"3560943182","3560943183","ES" +"3560943184","3560943184","IT" +"3560943185","3560943185","DK" +"3560943186","3560943186","ES" +"3560943187","3560943187","PT" +"3560943188","3560943188","IT" +"3560943189","3560943192","DE" +"3560943193","3560943193","ES" +"3560943194","3560943194","AT" +"3560943195","3560943195","DE" +"3560943196","3560943197","IT" +"3560943198","3560943198","DE" +"3560943199","3560943199","PT" +"3560943200","3560943200","AT" +"3560943201","3560943201","IT" +"3560943202","3560943202","IL" +"3560943203","3560943204","DE" +"3560943205","3560943205","IT" +"3560943206","3560943207","DE" +"3560943208","3560943208","AT" +"3560943209","3560943210","ES" +"3560943211","3560943211","FR" +"3560943212","3560943212","DE" +"3560943213","3560943213","FR" +"3560943214","3560943214","PL" +"3560943215","3560943218","DE" +"3560943219","3560943219","ES" +"3560943220","3560943221","DE" +"3560943222","3560943222","ES" +"3560943223","3560943223","FR" +"3560943224","3560943224","DE" +"3560943225","3560943226","GR" +"3560943227","3560943227","DE" +"3560943228","3560943230","NL" +"3560943231","3560943232","FR" +"3560943233","3560943233","PL" +"3560943234","3560943234","EE" +"3560943235","3560943235","CH" +"3560943236","3560943237","NL" +"3560943238","3560943238","ES" +"3560943239","3560943239","FR" +"3560943240","3560943240","GB" +"3560943241","3560943241","FR" +"3560943242","3560943242","DE" +"3560943243","3560943243","FR" +"3560943244","3560943244","PL" +"3560943245","3560943245","CH" +"3560943246","3560943247","DE" +"3560943248","3560943248","GR" +"3560943249","3560943249","CH" +"3560943250","3560943250","AT" +"3560943251","3560943251","GB" +"3560943252","3560943252","BE" +"3560943253","3560943253","DE" +"3560943254","3560943254","ES" +"3560943255","3560943255","GB" +"3560943256","3560943256","DE" +"3560943257","3560943257","ES" +"3560943258","3560943258","FR" +"3560943259","3560943259","DE" +"3560943260","3560943260","ES" +"3560943261","3560943261","IE" +"3560943262","3560943262","DE" +"3560943263","3560943263","IT" +"3560943264","3560943264","CZ" +"3560943265","3560943265","DE" +"3560943266","3560943266","GB" +"3560943267","3560943267","DE" +"3560943268","3560943269","IT" +"3560943270","3560943270","GB" +"3560943271","3560943271","IT" +"3560943272","3560943272","ES" +"3560943273","3560943273","FR" +"3560943274","3560943274","GB" +"3560943275","3560943275","DE" +"3560943276","3560943276","FR" +"3560943277","3560943277","IT" +"3560943278","3560943278","DE" +"3560943279","3560943279","FR" +"3560943280","3560943280","DE" +"3560943281","3560943281","ES" +"3560943282","3560943282","FR" +"3560943283","3560943283","ES" +"3560943284","3560943286","DE" +"3560943287","3560943287","NL" +"3560943288","3560943290","FR" +"3560943291","3560943292","IT" +"3560943293","3560943293","ES" +"3560943294","3560943294","IT" +"3560943295","3560943295","DE" +"3560943296","3560943296","RU" +"3560943297","3560943297","ES" +"3560943298","3560943298","FR" +"3560943299","3560943299","GB" +"3560943300","3560943300","DE" +"3560943301","3560943301","FR" +"3560943302","3560943302","ES" +"3560943303","3560943303","IT" +"3560943304","3560943304","FR" +"3560943305","3560943306","DE" +"3560943307","3560943307","ES" +"3560943308","3560943309","DE" +"3560943310","3560943311","IT" +"3560943312","3560943312","PL" +"3560943313","3560943313","DE" +"3560943314","3560943314","ES" +"3560943315","3560943315","IT" +"3560943316","3560943316","GB" +"3560943317","3560943317","IT" +"3560943318","3560943318","CH" +"3560943319","3560943319","ES" +"3560943320","3560943320","IT" +"3560943321","3560943321","GB" +"3560943322","3560943322","DE" +"3560943323","3560943323","NL" +"3560943324","3560943324","DE" +"3560943325","3560943325","CH" +"3560943326","3560943326","RU" +"3560943327","3560943329","DE" +"3560943330","3560943331","IT" +"3560943332","3560943335","DE" +"3560943336","3560943336","ES" +"3560943337","3560943337","IT" +"3560943338","3560943338","BE" +"3560943339","3560943339","NL" +"3560943340","3560943341","DE" +"3560943342","3560943342","ES" +"3560943343","3560943343","FR" +"3560943344","3560943344","NL" +"3560943345","3560943345","CH" +"3560943346","3560943346","IT" +"3560943347","3560943347","ES" +"3560943348","3560943348","FR" +"3560943349","3560943349","DE" +"3560943350","3560943350","BE" +"3560943351","3560943351","SE" +"3560943352","3560943352","IT" +"3560943353","3560943354","DE" +"3560943355","3560943355","IT" +"3560943356","3560943356","DE" +"3560943357","3560943357","ES" +"3560943358","3560943358","BE" +"3560943359","3560943361","DE" +"3560943362","3560943362","GB" +"3560943363","3560943365","DE" +"3560943366","3560943367","IT" +"3560943368","3560943368","DE" +"3560943369","3560943369","GR" +"3560943370","3560943370","DE" +"3560943371","3560943371","AT" +"3560943372","3560943372","FR" +"3560943373","3560943375","DE" +"3560943376","3560943376","ES" +"3560943377","3560943377","GB" +"3560943378","3560943378","DE" +"3560943379","3560943380","ES" +"3560943381","3560943383","DE" +"3560943384","3560943384","FR" +"3560943385","3560943385","ES" +"3560943386","3560943386","CH" +"3560943387","3560943387","GB" +"3560943388","3560943391","DE" +"3560943392","3560943392","GB" +"3560943393","3560943393","DE" +"3560943394","3560943394","ES" +"3560943395","3560943395","NL" +"3560943396","3560943396","BE" +"3560943397","3560943397","DE" +"3560943398","3560943398","BE" +"3560943399","3560943399","CH" +"3560943400","3560943400","IT" +"3560943401","3560943401","DE" +"3560943402","3560943402","NL" +"3560943403","3560943403","DE" +"3560943404","3560943404","BE" +"3560943405","3560943405","DE" +"3560943406","3560943407","ES" +"3560943408","3560943408","IT" +"3560943409","3560943409","ES" +"3560943410","3560943410","NL" +"3560943411","3560943411","DE" +"3560943412","3560943412","IT" +"3560943413","3560943413","ES" +"3560943414","3560943415","DE" +"3560943416","3560943416","FR" +"3560943417","3560943417","DE" +"3560943418","3560943418","GB" +"3560943419","3560943419","FR" +"3560943420","3560943420","DE" +"3560943421","3560943421","HU" +"3560943422","3560943422","DE" +"3560943423","3560943423","FR" +"3560943424","3560943424","DE" +"3560943425","3560943425","ES" +"3560943426","3560943426","IT" +"3560943427","3560943427","FR" +"3560943428","3560943428","NO" +"3560943429","3560943430","NL" +"3560943431","3560943432","DE" +"3560943433","3560943433","GB" +"3560943434","3560943434","SE" +"3560943435","3560943435","DE" +"3560943436","3560943436","FR" +"3560943437","3560943437","ES" +"3560943438","3560943438","FR" +"3560943439","3560943439","NO" +"3560943440","3560943440","FR" +"3560943441","3560943441","DE" +"3560943442","3560943442","ES" +"3560943443","3560943443","BE" +"3560943444","3560943444","CH" +"3560943445","3560943445","PT" +"3560943446","3560943446","DE" +"3560943447","3560943447","GB" +"3560943448","3560943450","DE" +"3560943451","3560943451","PL" +"3560943452","3560943452","GB" +"3560943453","3560943454","DE" +"3560943455","3560943456","GB" +"3560943457","3560943457","ES" +"3560943458","3560943459","IT" +"3560943460","3560943460","ES" +"3560943461","3560943461","CH" +"3560943462","3560943462","FR" +"3560943463","3560943463","NL" +"3560943464","3560943464","ES" +"3560943465","3560943465","FR" +"3560943466","3560943466","NO" +"3560943467","3560943467","IT" +"3560943468","3560943468","CH" +"3560943469","3560943469","IT" +"3560943470","3560943471","DE" +"3560943472","3560943472","BE" +"3560943473","3560943473","AT" +"3560943474","3560943474","CH" +"3560943475","3560943475","ES" +"3560943476","3560943476","BE" +"3560943477","3560943477","DE" +"3560943478","3560943478","IT" +"3560943479","3560943479","GB" +"3560943480","3560943480","NL" +"3560943481","3560943481","BG" +"3560943482","3560943482","DE" +"3560943483","3560943486","ES" +"3560943487","3560943487","DE" +"3560943488","3560943488","ES" +"3560943489","3560943489","DE" +"3560943490","3560943490","GB" +"3560943491","3560943491","DE" +"3560943492","3560943493","FR" +"3560943494","3560943494","GB" +"3560943495","3560943495","IT" +"3560943496","3560943499","DE" +"3560943500","3560943500","CH" +"3560943501","3560943501","ES" +"3560943502","3560943507","DE" +"3560943508","3560943508","DK" +"3560943509","3560943510","DE" +"3560943511","3560943511","IT" +"3560943512","3560943512","DE" +"3560943513","3560943513","LU" +"3560943514","3560943515","ES" +"3560943516","3560943517","DE" +"3560943518","3560943518","LU" +"3560943519","3560943519","DE" +"3560943520","3560943520","DK" +"3560943521","3560943521","DE" +"3560943522","3560943522","GB" +"3560943523","3560943524","DE" +"3560943525","3560943525","NL" +"3560943526","3560943526","IT" +"3560943527","3560943527","DE" +"3560943528","3560943528","FR" +"3560943529","3560943529","DE" +"3560943530","3560943530","CH" +"3560943531","3560943532","DE" +"3560943533","3560943533","HU" +"3560943534","3560943534","BY" +"3560943535","3560943535","FR" +"3560943536","3560943536","BE" +"3560943537","3560943537","DE" +"3560943538","3560943538","GB" +"3560943539","3560943539","DE" +"3560943540","3560943540","BE" +"3560943541","3560943541","NL" +"3560943542","3560943542","DE" +"3560943543","3560943543","NL" +"3560943544","3560943544","ES" +"3560943545","3560943546","DE" +"3560943547","3560943547","SI" +"3560943548","3560943548","GB" +"3560943549","3560943549","DE" +"3560943550","3560943550","HU" +"3560943551","3560943551","FR" +"3560943552","3560943552","IT" +"3560943553","3560943553","DE" +"3560943554","3560943554","IS" +"3560943555","3560943555","FR" +"3560943556","3560943556","DE" +"3560943557","3560943557","ES" +"3560943558","3560943558","DE" +"3560943559","3560943559","GB" +"3560943560","3560943562","IT" +"3560943563","3560943563","HU" +"3560943564","3560943564","DE" +"3560943565","3560943565","GB" +"3560943566","3560943566","DE" +"3560943567","3560943567","FR" +"3560943568","3560943568","GB" +"3560943569","3560943570","FR" +"3560943571","3560943572","DE" +"3560943573","3560943573","FR" +"3560943574","3560943574","NO" +"3560943575","3560943575","BE" +"3560943576","3560943576","IT" +"3560943577","3560943577","DK" +"3560943578","3560943578","ES" +"3560943579","3560943580","DE" +"3560943581","3560943581","NL" +"3560943582","3560943582","DE" +"3560943583","3560943583","ES" +"3560943584","3560943584","IT" +"3560943585","3560943585","FR" +"3560943586","3560943586","ES" +"3560943587","3560943587","DE" +"3560943588","3560943588","IT" +"3560943589","3560943589","NL" +"3560943590","3560943590","HU" +"3560943591","3560943591","AT" +"3560943592","3560943592","SK" +"3560943593","3560943593","PL" +"3560943594","3560943594","FR" +"3560943595","3560943596","ES" +"3560943597","3560943599","DE" +"3560943600","3560943600","AT" +"3560943601","3560943602","IT" +"3560943603","3560943603","CH" +"3560943604","3560943604","ES" +"3560943605","3560943605","GB" +"3560943606","3560943607","DE" +"3560943608","3560943608","IT" +"3560943609","3560943610","DE" +"3560943611","3560943611","FR" +"3560943612","3560943612","DE" +"3560943613","3560943613","ES" +"3560943614","3560943617","DE" +"3560943618","3560943618","FR" +"3560943619","3560943620","ES" +"3560943621","3560943621","SE" +"3560943622","3560943622","BE" +"3560943623","3560943623","DE" +"3560943624","3560943624","ES" +"3560943625","3560943625","DE" +"3560943626","3560943626","ES" +"3560943627","3560943627","DK" +"3560943628","3560943628","DE" +"3560943629","3560943629","IT" +"3560943630","3560943630","DE" +"3560943631","3560943631","HU" +"3560943632","3560943632","CH" +"3560943633","3560943633","ES" +"3560943634","3560943634","FR" +"3560943635","3560943635","ES" +"3560943636","3560943636","DE" +"3560943637","3560943637","PL" +"3560943638","3560943638","IT" +"3560943639","3560943639","ES" +"3560943640","3560943640","FR" +"3560943641","3560943641","DE" +"3560943642","3560943643","IT" +"3560943644","3560943644","DE" +"3560943645","3560943645","GB" +"3560943646","3560943646","DE" +"3560943647","3560943647","ES" +"3560943648","3560943648","DE" +"3560943649","3560943649","NL" +"3560943650","3560943651","DE" +"3560943652","3560943652","AT" +"3560943653","3560943653","DE" +"3560943654","3560943654","IT" +"3560943655","3560943655","DE" +"3560943656","3560943656","IT" +"3560943657","3560943657","DE" +"3560943658","3560943658","GB" +"3560943659","3560943659","DE" +"3560943660","3560943660","PT" +"3560943661","3560943661","DK" +"3560943662","3560943662","DE" +"3560943663","3560943664","NL" +"3560943665","3560943666","DE" +"3560943667","3560943667","PL" +"3560943668","3560943668","DK" +"3560943669","3560943669","FR" +"3560943670","3560943671","DE" +"3560943672","3560943672","BH" +"3560943673","3560943673","SE" +"3560943674","3560943674","MA" +"3560943675","3560943675","FR" +"3560943676","3560943677","DE" +"3560943678","3560943680","ES" +"3560943681","3560943682","DE" +"3560943683","3560943683","GR" +"3560943684","3560943684","NL" +"3560943685","3560943685","IT" +"3560943686","3560943686","FR" +"3560943687","3560943687","PT" +"3560943688","3560943688","DE" +"3560943689","3560943689","PT" +"3560943690","3560943690","IT" +"3560943691","3560943691","DE" +"3560943692","3560943692","SE" +"3560943693","3560943693","DE" +"3560943694","3560943694","FR" +"3560943695","3560943695","DE" +"3560943696","3560943697","CH" +"3560943698","3560943698","DE" +"3560943699","3560943699","IT" +"3560943700","3560943700","DE" +"3560943701","3560943701","AT" +"3560943702","3560943702","DE" +"3560943703","3560943703","FR" +"3560943704","3560943704","DE" +"3560943705","3560943705","CH" +"3560943706","3560943706","LI" +"3560943707","3560943709","DE" +"3560943710","3560943710","NL" +"3560943711","3560943711","DE" +"3560943712","3560943712","IT" +"3560943713","3560943713","PL" +"3560943714","3560943714","NL" +"3560943715","3560943715","DE" +"3560943716","3560943716","GB" +"3560943717","3560943717","FR" +"3560943718","3560943719","DE" +"3560943720","3560943721","IT" +"3560943722","3560943726","DE" +"3560943727","3560943727","ES" +"3560943728","3560943728","GB" +"3560943729","3560943729","DE" +"3560943730","3560943730","NL" +"3560943731","3560943731","IT" +"3560943732","3560943732","FR" +"3560943733","3560943733","NO" +"3560943734","3560943736","DE" +"3560943737","3560943737","GR" +"3560943738","3560943738","PT" +"3560943739","3560943740","DE" +"3560943741","3560943741","FR" +"3560943742","3560943742","DE" +"3560943743","3560943743","PL" +"3560943744","3560943744","DE" +"3560943745","3560943745","PL" +"3560943746","3560943748","DE" +"3560943749","3560943749","GB" +"3560943750","3560943750","DE" +"3560943751","3560943751","IT" +"3560943752","3560943752","DE" +"3560943753","3560943753","ES" +"3560943754","3560943754","HU" +"3560943755","3560943755","BE" +"3560943756","3560943756","IT" +"3560943757","3560943757","DE" +"3560943758","3560943758","CZ" +"3560943759","3560943759","IE" +"3560943760","3560943760","NO" +"3560943761","3560943761","GB" +"3560943762","3560943762","IT" +"3560943763","3560943763","FR" +"3560943764","3560943764","DE" +"3560943765","3560943765","SE" +"3560943766","3560943766","CY" +"3560943767","3560943768","DE" +"3560943769","3560943769","FR" +"3560943770","3560943770","NL" +"3560943771","3560943771","IT" +"3560943772","3560943774","DE" +"3560943775","3560943775","FR" +"3560943776","3560943780","DE" +"3560943781","3560943781","ES" +"3560943782","3560943782","DE" +"3560943783","3560943783","BE" +"3560943784","3560943786","DE" +"3560943787","3560943787","ES" +"3560943788","3560943788","DK" +"3560943789","3560943789","IT" +"3560943790","3560943790","DE" +"3560943791","3560943791","IT" +"3560943792","3560943793","DE" +"3560943794","3560943794","FR" +"3560943795","3560943795","DE" +"3560943796","3560943796","IT" +"3560943797","3560943797","DE" +"3560943798","3560943798","DK" +"3560943799","3560943799","DE" +"3560943800","3560943800","CH" +"3560943801","3560943801","FR" +"3560943802","3560943802","IT" +"3560943803","3560943803","HU" +"3560943804","3560943804","ES" +"3560943805","3560943805","DE" +"3560943806","3560943806","ES" +"3560943807","3560943807","DK" +"3560943808","3560943810","DE" +"3560943811","3560943811","ES" +"3560943812","3560943812","IT" +"3560943813","3560943813","CH" +"3560943814","3560943814","DE" +"3560943815","3560943815","IT" +"3560943816","3560943817","FR" +"3560943818","3560943818","PT" +"3560943819","3560943819","DE" +"3560943820","3560943820","FR" +"3560943821","3560943821","IT" +"3560943822","3560943822","DE" +"3560943823","3560943823","GR" +"3560943824","3560943827","DE" +"3560943828","3560943828","ES" +"3560943829","3560943829","NL" +"3560943830","3560943830","DK" +"3560943831","3560943833","FR" +"3560943834","3560943836","DE" +"3560943837","3560943837","CH" +"3560943838","3560943838","DE" +"3560943839","3560943839","NO" +"3560943840","3560943840","DE" +"3560943841","3560943841","GB" +"3560943842","3560943842","DE" +"3560943843","3560943843","GB" +"3560943844","3560943844","BE" +"3560943845","3560943845","CZ" +"3560943846","3560943846","LU" +"3560943847","3560943847","CZ" +"3560943848","3560943848","FR" +"3560943849","3560943849","DE" +"3560943850","3560943850","NL" +"3560943851","3560943857","DE" +"3560943858","3560943858","GB" +"3560943859","3560943859","DE" +"3560943860","3560943860","GB" +"3560943861","3560943865","DE" +"3560943866","3560943866","BE" +"3560943867","3560943867","ES" +"3560943868","3560943868","DE" +"3560943869","3560943869","LU" +"3560943870","3560943871","DE" +"3560943872","3560943875","BR" +"3560943876","3560943879","DE" +"3560943880","3560943887","US" +"3560943888","3560943891","CA" +"3560943892","3560943895","DE" +"3560943896","3560943899","CL" +"3560943900","3560943903","DE" +"3560943904","3560943915","US" +"3560943916","3560943919","CA" +"3560943920","3560943923","US" +"3560943924","3560943927","MX" +"3560943928","3560943935","US" +"3560943936","3560943939","PE" +"3560943940","3560943943","DE" +"3560943944","3560943947","US" +"3560943948","3560943975","DE" +"3560943976","3560943979","US" +"3560943980","3560943983","DE" +"3560943984","3560943987","US" +"3560943988","3560943991","DE" +"3560943992","3560943999","US" +"3560944000","3560944023","DE" +"3560944024","3560944031","US" +"3560944032","3560944035","MX" +"3560944036","3560944039","US" +"3560944040","3560944043","MX" +"3560944044","3560944059","DE" +"3560944060","3560944063","US" +"3560944064","3560944067","DE" +"3560944068","3560944071","US" +"3560944072","3560944079","DE" +"3560944080","3560944083","US" +"3560944084","3560944087","CL" +"3560944088","3560944103","DE" +"3560944104","3560944107","US" +"3560944108","3560944119","DE" +"3560944120","3560944135","US" +"3560944136","3560944139","DE" +"3560944140","3560944143","US" +"3560944144","3560944147","DE" +"3560944148","3560944159","US" +"3560944160","3560944163","MX" +"3560944164","3560944167","AR" +"3560944168","3560944175","US" +"3560944176","3560944179","BR" +"3560944180","3560944183","PA" +"3560944184","3560944187","US" +"3560944188","3560944191","CA" +"3560944192","3560944195","US" +"3560944196","3560944199","DE" +"3560944200","3560944203","BO" +"3560944204","3560944207","DE" +"3560944208","3560944211","CA" +"3560944212","3560944215","DE" +"3560944216","3560944219","BR" +"3560944220","3560944227","US" +"3560944228","3560944231","IT" +"3560944232","3560944235","US" +"3560944236","3560944239","CA" +"3560944240","3560944243","US" +"3560944244","3560944247","MX" +"3560944248","3560944267","US" +"3560944268","3560944271","CO" +"3560944272","3560944275","BR" +"3560944276","3560944279","PE" +"3560944280","3560944283","DE" +"3560944284","3560944295","US" +"3560944296","3560944299","CO" +"3560944300","3560944307","US" +"3560944308","3560944311","MX" +"3560944312","3560944315","US" +"3560944316","3560944323","AR" +"3560944324","3560944339","US" +"3560944340","3560944343","CO" +"3560944344","3560944351","US" +"3560944352","3560944355","GT" +"3560944356","3560944359","CA" +"3560944360","3560944363","DO" +"3560944364","3560944367","AR" +"3560944368","3560944371","BR" +"3560944372","3560944375","DE" +"3560944376","3560944379","AR" +"3560944380","3560944383","DE" +"3560944384","3560944395","US" +"3560944396","3560944399","PR" +"3560944400","3560944403","CA" +"3560944404","3560944411","DE" +"3560944412","3560944415","US" +"3560944416","3560944419","SG" +"3560944420","3560944431","US" +"3560944432","3560944435","DE" +"3560944436","3560944447","US" +"3560944448","3560944451","DE" +"3560944452","3560944459","US" +"3560944460","3560944460","AR" +"3560944461","3560944463","DE" +"3560944464","3560944467","CA" +"3560944468","3560944471","BR" +"3560944472","3560944475","US" +"3560944476","3560944479","AR" +"3560944480","3560944487","US" +"3560944488","3560944491","CA" +"3560944492","3560944519","US" +"3560944520","3560944523","DE" +"3560944524","3560944531","US" +"3560944532","3560944535","MX" +"3560944536","3560944551","US" +"3560944552","3560944555","BR" +"3560944556","3560944559","MX" +"3560944560","3560944563","US" +"3560944564","3560944567","ES" +"3560944568","3560944575","US" +"3560944576","3560944579","BR" +"3560944580","3560944603","US" +"3560944604","3560944607","CA" +"3560944608","3560944615","US" +"3560944616","3560944619","EC" +"3560944620","3560944623","US" +"3560944624","3560944627","CL" +"3560944628","3560944631","DE" +"3560944632","3560944635","CA" +"3560944636","3560944639","DE" +"3560944640","3560944643","TR" +"3560944644","3560944647","ES" +"3560944648","3560944651","TR" +"3560944652","3560944655","HU" +"3560944656","3560944659","TR" +"3560944660","3560944663","DE" +"3560944664","3560944667","FR" +"3560944668","3560944671","TR" +"3560944672","3560944675","KZ" +"3560944676","3560944679","GR" +"3560944680","3560944687","TR" +"3560944688","3560944695","DE" +"3560944696","3560944699","TR" +"3560944700","3560944703","CU" +"3560944704","3560944707","ZW" +"3560944708","3560944711","TR" +"3560944712","3560944715","IL" +"3560944716","3560944719","ZW" +"3560944720","3560944723","SK" +"3560944724","3560944727","TR" +"3560944728","3560944731","KZ" +"3560944732","3560944735","TR" +"3560944736","3560944743","FR" +"3560944744","3560944747","GR" +"3560944748","3560944755","TR" +"3560944756","3560944759","MZ" +"3560944760","3560944767","TR" +"3560944768","3560944771","MZ" +"3560944772","3560944779","DE" +"3560944780","3560944783","ES" +"3560944784","3560944787","FR" +"3560944788","3560944791","NL" +"3560944792","3560944795","ES" +"3560944796","3560944799","GB" +"3560944800","3560944803","ES" +"3560944804","3560944807","FR" +"3560944808","3560944811","DE" +"3560944812","3560944815","ES" +"3560944816","3560944823","IT" +"3560944824","3560944827","DE" +"3560944828","3560944831","IE" +"3560944832","3560944835","DE" +"3560944836","3560944839","IT" +"3560944840","3560944843","TR" +"3560944844","3560944847","DE" +"3560944848","3560944855","FR" +"3560944856","3560944859","NL" +"3560944860","3560944863","DK" +"3560944864","3560944871","FR" +"3560944872","3560944875","DE" +"3560944876","3560944879","ES" +"3560944880","3560944883","SA" +"3560944884","3560944887","ES" +"3560944888","3560944891","CH" +"3560944892","3560944895","DE" +"3560944896","3560944899","TW" +"3560944900","3560944903","SG" +"3560944904","3560944907","MY" +"3560944908","3560944919","SG" +"3560944920","3560944923","MY" +"3560944924","3560944927","CN" +"3560944928","3560944931","MY" +"3560944932","3560944935","SG" +"3560944936","3560944943","CN" +"3560944944","3560944947","MY" +"3560944948","3560944951","SG" +"3560944952","3560944955","TW" +"3560944956","3560944959","SG" +"3560944960","3560944963","IN" +"3560944964","3560944967","MY" +"3560944968","3560944971","SG" +"3560944972","3560944975","CN" +"3560944976","3560944987","IN" +"3560944988","3560944991","SG" +"3560944992","3560944995","MY" +"3560944996","3560944999","SG" +"3560945000","3560945003","MY" +"3560945004","3560945007","IN" +"3560945008","3560945011","SG" +"3560945012","3560945015","DE" +"3560945016","3560945027","IN" +"3560945028","3560945031","MY" +"3560945032","3560945035","IN" +"3560945036","3560945039","CN" +"3560945040","3560945043","SG" +"3560945044","3560945047","TW" +"3560945048","3560945059","IN" +"3560945060","3560945063","SG" +"3560945064","3560945067","MY" +"3560945068","3560945075","IN" +"3560945076","3560945083","CN" +"3560945084","3560945087","IN" +"3560945088","3560945091","DE" +"3560945092","3560945095","SG" +"3560945096","3560945099","CN" +"3560945100","3560945103","SG" +"3560945104","3560945107","MY" +"3560945108","3560945111","TW" +"3560945112","3560945115","SG" +"3560945116","3560945119","IN" +"3560945120","3560945123","CN" +"3560945124","3560945131","SG" +"3560945132","3560945135","TW" +"3560945136","3560945139","MY" +"3560945140","3560945143","SG" +"3560945144","3560945147","IN" +"3560945148","3560945151","SG" +"3560945152","3560945153","DE" +"3560945154","3560945156","AU" +"3560945157","3560945157","NZ" +"3560945158","3560945167","AU" +"3560945168","3560945168","DE" +"3560945169","3560945169","AU" +"3560945170","3560945191","DE" +"3560945192","3560945192","AU" +"3560945193","3560945194","DE" +"3560945195","3560945195","AU" +"3560945196","3560945204","DE" +"3560945205","3560945205","AU" +"3560945206","3560945206","IN" +"3560945207","3560945209","AU" +"3560945210","3560945227","DE" +"3560945228","3560945231","IN" +"3560945232","3560945267","DE" +"3560945268","3560945271","AU" +"3560945272","3560945275","DE" +"3560945276","3560945279","AU" +"3560945280","3560945355","JP" +"3560945356","3560945359","TH" +"3560945360","3560945403","JP" +"3560945404","3560945407","TH" +"3560945408","3560945409","DE" +"3560945410","3560945410","MY" +"3560945411","3560945411","TW" +"3560945412","3560945412","CN" +"3560945413","3560945413","SG" +"3560945414","3560945414","IN" +"3560945415","3560945416","SG" +"3560945417","3560945418","CN" +"3560945419","3560945419","MY" +"3560945420","3560945420","DE" +"3560945421","3560945422","SG" +"3560945423","3560945423","CN" +"3560945424","3560945424","MY" +"3560945425","3560945425","IN" +"3560945426","3560945426","MY" +"3560945427","3560945427","CN" +"3560945428","3560945428","SG" +"3560945429","3560945429","TW" +"3560945430","3560945430","MY" +"3560945431","3560945431","CN" +"3560945432","3560945433","IN" +"3560945434","3560945434","TW" +"3560945435","3560945435","MY" +"3560945436","3560945436","CN" +"3560945437","3560945437","SG" +"3560945438","3560945438","TW" +"3560945439","3560945439","SG" +"3560945440","3560945440","ID" +"3560945441","3560945441","SG" +"3560945442","3560945443","IN" +"3560945444","3560945447","SG" +"3560945448","3560945448","DE" +"3560945449","3560945449","IN" +"3560945450","3560945450","SG" +"3560945451","3560945451","IN" +"3560945452","3560945452","DE" +"3560945453","3560945453","IN" +"3560945454","3560945458","SG" +"3560945459","3560945459","TW" +"3560945460","3560945461","SG" +"3560945462","3560945462","IN" +"3560945463","3560945465","SG" +"3560945466","3560945466","CN" +"3560945467","3560945467","MY" +"3560945468","3560945469","SG" +"3560945470","3560945470","CN" +"3560945471","3560945471","SG" +"3560945472","3560945472","CN" +"3560945473","3560945473","TW" +"3560945474","3560945475","SG" +"3560945476","3560945476","CN" +"3560945477","3560945477","TW" +"3560945478","3560945478","IN" +"3560945479","3560945479","SG" +"3560945480","3560945481","IN" +"3560945482","3560945482","DE" +"3560945483","3560945485","MY" +"3560945486","3560945487","IN" +"3560945488","3560945488","DE" +"3560945489","3560945489","MY" +"3560945490","3560945490","TH" +"3560945491","3560945492","IN" +"3560945493","3560945495","DE" +"3560945496","3560945496","IN" +"3560945497","3560945497","DE" +"3560945498","3560945499","IN" +"3560945500","3560945500","SG" +"3560945501","3560945501","US" +"3560945502","3560945502","IN" +"3560945503","3560945539","DE" +"3560945540","3560945543","SG" +"3560945544","3560945551","IN" +"3560945552","3560945555","DE" +"3560945556","3560945559","IN" +"3560945560","3560945563","DE" +"3560945564","3560945567","SG" +"3560945568","3560945571","DE" +"3560945572","3560945575","IN" +"3560945576","3560945579","SG" +"3560945580","3560945583","MY" +"3560945584","3560945587","SG" +"3560945588","3560945591","TW" +"3560945592","3560945603","SG" +"3560945604","3560945607","US" +"3560945608","3560945611","IN" +"3560945612","3560945619","SG" +"3560945620","3560945627","CN" +"3560945628","3560945635","SG" +"3560945636","3560945639","CN" +"3560945640","3560945643","SG" +"3560945644","3560945647","MY" +"3560945648","3560945651","IN" +"3560945652","3560945659","DE" +"3560945660","3560945663","IN" +"3560945664","3560945667","US" +"3560945668","3560945671","BR" +"3560945672","3560945675","US" +"3560945676","3560945679","PE" +"3560945680","3560945683","BR" +"3560945684","3560945691","CO" +"3560945692","3560945699","US" +"3560945700","3560945703","CO" +"3560945704","3560945707","US" +"3560945708","3560945711","CO" +"3560945712","3560945727","US" +"3560945728","3560945731","AR" +"3560945732","3560945739","US" +"3560945740","3560945743","BR" +"3560945744","3560945747","US" +"3560945748","3560945751","AR" +"3560945752","3560945763","US" +"3560945764","3560945767","AR" +"3560945768","3560945771","BR" +"3560945772","3560945775","CA" +"3560945776","3560945787","US" +"3560945788","3560945791","CO" +"3560945792","3560945795","AR" +"3560945796","3560945799","US" +"3560945800","3560945803","BR" +"3560945804","3560945807","US" +"3560945808","3560945811","CO" +"3560945812","3560945815","US" +"3560945816","3560945819","AR" +"3560945820","3560945823","US" +"3560945824","3560945827","BR" +"3560945828","3560945835","US" +"3560945836","3560945839","CL" +"3560945840","3560945843","BR" +"3560945844","3560945851","US" +"3560945852","3560945855","DE" +"3560945856","3560945859","US" +"3560945860","3560945863","DE" +"3560945864","3560945867","US" +"3560945868","3560945871","DE" +"3560945872","3560945875","CA" +"3560945876","3560945911","US" +"3560945912","3560945915","CA" +"3560945916","3560945919","US" +"3560945920","3560946017","DE" +"3560946018","3560946018","FI" +"3560946019","3560946019","CZ" +"3560946020","3560946176","DE" +"3560946177","3560946189","US" +"3560946190","3560946190","AR" +"3560946191","3560946194","US" +"3560946195","3560946195","PE" +"3560946196","3560946196","CA" +"3560946197","3560946197","US" +"3560946198","3560946198","CA" +"3560946199","3560946199","AR" +"3560946200","3560946200","US" +"3560946201","3560946201","CA" +"3560946202","3560946202","DE" +"3560946203","3560946203","CA" +"3560946204","3560946204","US" +"3560946205","3560946205","PE" +"3560946206","3560946208","US" +"3560946209","3560946209","CA" +"3560946210","3560946212","US" +"3560946213","3560946213","CO" +"3560946214","3560946214","CA" +"3560946215","3560946215","PE" +"3560946216","3560946229","US" +"3560946230","3560946230","AR" +"3560946231","3560946231","US" +"3560946232","3560946232","CA" +"3560946233","3560946234","US" +"3560946235","3560946235","CL" +"3560946236","3560946237","US" +"3560946238","3560946238","AR" +"3560946239","3560946253","US" +"3560946254","3560946254","SG" +"3560946255","3560946256","US" +"3560946257","3560946257","MX" +"3560946258","3560946259","US" +"3560946260","3560946260","AR" +"3560946261","3560946262","US" +"3560946263","3560946263","AR" +"3560946264","3560946266","US" +"3560946267","3560946267","CA" +"3560946268","3560946271","US" +"3560946272","3560946272","DE" +"3560946273","3560946273","CA" +"3560946274","3560946279","US" +"3560946280","3560946280","ES" +"3560946281","3560946282","US" +"3560946283","3560946283","CL" +"3560946284","3560946284","US" +"3560946285","3560946285","CO" +"3560946286","3560946290","US" +"3560946291","3560946291","CA" +"3560946292","3560946295","US" +"3560946296","3560946296","CL" +"3560946297","3560946297","DE" +"3560946298","3560946298","US" +"3560946299","3560946299","DE" +"3560946300","3560946300","CL" +"3560946301","3560946311","DE" +"3560946312","3560946312","US" +"3560946313","3560946317","DE" +"3560946318","3560946319","US" +"3560946320","3560946320","DE" +"3560946321","3560946326","US" +"3560946327","3560946327","CA" +"3560946328","3560946328","US" +"3560946329","3560946329","DO" +"3560946330","3560946330","US" +"3560946331","3560946331","DO" +"3560946332","3560946333","CA" +"3560946334","3560946335","US" +"3560946336","3560946336","CA" +"3560946337","3560946337","DE" +"3560946338","3560946338","CA" +"3560946339","3560946339","US" +"3560946340","3560946340","CL" +"3560946341","3560946342","CA" +"3560946343","3560946343","DO" +"3560946344","3560946344","AR" +"3560946345","3560946345","US" +"3560946346","3560946346","PE" +"3560946347","3560946347","US" +"3560946348","3560946361","DE" +"3560946362","3560946363","US" +"3560946364","3560946367","DE" +"3560946368","3560946368","US" +"3560946369","3560946372","DE" +"3560946373","3560946373","US" +"3560946374","3560946374","DE" +"3560946375","3560946375","US" +"3560946376","3560946398","DE" +"3560946399","3560946399","US" +"3560946400","3560946408","DE" +"3560946409","3560946409","US" +"3560946410","3560946419","DE" +"3560946420","3560946420","US" +"3560946421","3560946431","DE" +"3560946432","3560946443","US" +"3560946444","3560946447","BR" +"3560946448","3560946451","DE" +"3560946452","3560946455","BO" +"3560946456","3560946467","US" +"3560946468","3560946471","BR" +"3560946472","3560946483","US" +"3560946484","3560946487","MX" +"3560946488","3560946491","US" +"3560946492","3560946495","BR" +"3560946496","3560946499","VE" +"3560946500","3560946503","AR" +"3560946504","3560946507","US" +"3560946508","3560946511","MX" +"3560946512","3560946523","US" +"3560946524","3560946527","MX" +"3560946528","3560946531","US" +"3560946532","3560946535","CA" +"3560946536","3560946539","PE" +"3560946540","3560946543","US" +"3560946544","3560946547","CA" +"3560946548","3560946551","US" +"3560946552","3560946555","PE" +"3560946556","3560946559","US" +"3560946560","3560946563","BR" +"3560946564","3560946567","US" +"3560946568","3560946571","BR" +"3560946572","3560946579","US" +"3560946580","3560946583","CA" +"3560946584","3560946587","US" +"3560946588","3560946591","AR" +"3560946592","3560946603","US" +"3560946604","3560946607","AR" +"3560946608","3560946611","BR" +"3560946612","3560946623","US" +"3560946624","3560946635","MX" +"3560946636","3560946643","US" +"3560946644","3560946647","AR" +"3560946648","3560946651","MX" +"3560946652","3560946655","CL" +"3560946656","3560946659","BR" +"3560946660","3560946663","MX" +"3560946664","3560946667","US" +"3560946668","3560946671","MX" +"3560946672","3560946679","BR" +"3560946680","3560946687","US" +"3560946688","3560946689","DE" +"3560946690","3560946695","US" +"3560946696","3560946696","BR" +"3560946697","3560946698","US" +"3560946699","3560946700","DE" +"3560946701","3560946701","CO" +"3560946702","3560946706","US" +"3560946707","3560946707","VE" +"3560946708","3560946708","BR" +"3560946709","3560946710","VE" +"3560946711","3560946711","US" +"3560946712","3560946712","VE" +"3560946713","3560946714","US" +"3560946715","3560946715","CO" +"3560946716","3560946716","US" +"3560946717","3560946717","AR" +"3560946718","3560946718","US" +"3560946719","3560946720","BR" +"3560946721","3560946723","CO" +"3560946724","3560946724","MX" +"3560946725","3560946729","US" +"3560946730","3560946730","MX" +"3560946731","3560946733","US" +"3560946734","3560946734","PR" +"3560946735","3560946747","US" +"3560946748","3560946748","DE" +"3560946749","3560946760","US" +"3560946761","3560946761","DE" +"3560946762","3560946767","US" +"3560946768","3560946768","CA" +"3560946769","3560946769","US" +"3560946770","3560946825","DE" +"3560946826","3560946826","US" +"3560946827","3560946835","DE" +"3560946836","3560946836","US" +"3560946837","3560946839","DE" +"3560946840","3560946840","US" +"3560946841","3560946943","DE" +"3560946944","3560946947","US" +"3560946948","3560946951","BR" +"3560946952","3560946955","MX" +"3560946956","3560946959","CO" +"3560946960","3560946963","MX" +"3560946964","3560946967","AR" +"3560946968","3560946979","US" +"3560946980","3560946987","DE" +"3560946988","3560946991","US" +"3560946992","3560946995","DE" +"3560946996","3560946999","UY" +"3560947000","3560947015","US" +"3560947016","3560947019","AR" +"3560947020","3560947027","US" +"3560947028","3560947031","CO" +"3560947032","3560947039","US" +"3560947040","3560947043","BR" +"3560947044","3560947067","US" +"3560947068","3560947071","AR" +"3560947072","3560947075","BR" +"3560947076","3560947095","US" +"3560947096","3560947099","MX" +"3560947100","3560947107","US" +"3560947108","3560947111","DE" +"3560947112","3560947123","US" +"3560947124","3560947127","CO" +"3560947128","3560947143","US" +"3560947144","3560947147","DE" +"3560947148","3560947159","US" +"3560947160","3560947163","PR" +"3560947164","3560947191","US" +"3560947192","3560947195","VE" +"3560947196","3560947199","DE" +"3560947200","3560947203","CA" +"3560947204","3560947207","US" +"3560947208","3560947211","DE" +"3560947212","3560947231","US" +"3560947232","3560947235","CA" +"3560947236","3560947239","CO" +"3560947240","3560947247","US" +"3560947248","3560947251","CA" +"3560947252","3560947267","US" +"3560947268","3560947271","CO" +"3560947272","3560947275","US" +"3560947276","3560947279","AR" +"3560947280","3560947283","MX" +"3560947284","3560947287","US" +"3560947288","3560947291","BR" +"3560947292","3560947331","US" +"3560947332","3560947335","MX" +"3560947336","3560947343","US" +"3560947344","3560947347","MX" +"3560947348","3560947351","CO" +"3560947352","3560947355","US" +"3560947356","3560947359","AN" +"3560947360","3560947363","US" +"3560947364","3560947367","HN" +"3560947368","3560947371","BR" +"3560947372","3560947375","CA" +"3560947376","3560947383","US" +"3560947384","3560947391","CO" +"3560947392","3560947395","MX" +"3560947396","3560947399","US" +"3560947400","3560947407","AR" +"3560947408","3560947411","US" +"3560947412","3560947415","AR" +"3560947416","3560947431","US" +"3560947432","3560947435","MX" +"3560947436","3560947439","DE" +"3560947440","3560947443","BR" +"3560947444","3560947455","US" +"3560947456","3560947495","JP" +"3560947496","3560947499","KR" +"3560947500","3560947663","JP" +"3560947664","3560947667","DE" +"3560947668","3560947686","JP" +"3560947687","3560947687","DE" +"3560947688","3560947711","JP" +"3560947712","3560950839","SE" +"3560950840","3560950843","CZ" +"3560950844","3560950847","FI" +"3560950848","3560950863","SE" +"3560950864","3560950867","DK" +"3560950868","3560950871","ES" +"3560950872","3560950956","SE" +"3560950957","3560950958","PL" +"3560950959","3560951027","SE" +"3560951028","3560951031","DK" +"3560951032","3560951039","SE" +"3560951040","3560951043","NO" +"3560951044","3560951083","SE" +"3560951084","3560951087","DK" +"3560951088","3560951088","SE" +"3560951089","3560951090","PL" +"3560951091","3560951091","SE" +"3560951092","3560951095","IT" +"3560951096","3560951103","SE" +"3560951104","3560951107","DE" +"3560951108","3560951111","DK" +"3560951112","3560951115","FR" +"3560951116","3560951119","SE" +"3560951120","3560951123","CZ" +"3560951124","3560951127","GB" +"3560951128","3560951131","SE" +"3560951132","3560951135","ES" +"3560951136","3560951143","SE" +"3560951144","3560951147","BR" +"3560951148","3560951155","SE" +"3560951156","3560951159","US" +"3560951160","3560951195","SE" +"3560951196","3560951199","DK" +"3560951200","3560951203","SE" +"3560951204","3560951207","AE" +"3560951208","3560951211","DK" +"3560951212","3560951215","IT" +"3560951216","3560951307","SE" +"3560951308","3560951311","IT" +"3560951312","3560951376","SE" +"3560951377","3560951378","PL" +"3560951379","3560951380","SE" +"3560951381","3560951382","FI" +"3560951383","3560951383","SE" +"3560951384","3560951387","NO" +"3560951388","3560951388","SE" +"3560951389","3560951390","PT" +"3560951391","3560951391","SE" +"3560951392","3560951395","IT" +"3560951396","3560951399","DE" +"3560951400","3560951403","SE" +"3560951404","3560951407","NO" +"3560951408","3560951423","SE" +"3560951424","3560951427","NL" +"3560951428","3560951431","DK" +"3560951432","3560951435","SE" +"3560951436","3560951439","DK" +"3560951440","3560951440","SE" +"3560951441","3560951442","JP" +"3560951443","3560951444","SE" +"3560951445","3560951446","HU" +"3560951447","3560951447","SE" +"3560951448","3560951451","FR" +"3560951452","3560951459","SE" +"3560951460","3560951463","FI" +"3560951464","3560951551","SE" +"3560951552","3560951555","ES" +"3560951556","3560951559","NO" +"3560951560","3560951583","SE" +"3560951584","3560951587","FI" +"3560951588","3560951591","SE" +"3560951592","3560951595","NO" +"3560951596","3560951599","CZ" +"3560951600","3560951679","SE" +"3560951680","3560951683","DE" +"3560951684","3560951759","SE" +"3560951760","3560951763","DK" +"3560951764","3560951767","HU" +"3560951768","3560951807","SE" +"3560951808","3560951811","US" +"3560951812","3560951816","SE" +"3560951817","3560951818","ES" +"3560951819","3560951820","SE" +"3560951821","3560951822","IT" +"3560951823","3560951831","SE" +"3560951832","3560951835","DE" +"3560951836","3560951915","SE" +"3560951916","3560951919","PL" +"3560951920","3560951935","SE" +"3560951936","3560951939","NL" +"3560951940","3560951943","SE" +"3560951944","3560951947","NO" +"3560951948","3560951995","SE" +"3560951996","3560951999","US" +"3560952000","3560952039","SE" +"3560952040","3560952043","FI" +"3560952044","3560952223","SE" +"3560952224","3560952227","CZ" +"3560952228","3560952231","SE" +"3560952232","3560952235","US" +"3560952236","3560952239","PT" +"3560952240","3560952255","SE" +"3560952256","3560952259","PL" +"3560952260","3560952295","SE" +"3560952296","3560952299","NL" +"3560952300","3560952431","SE" +"3560952432","3560952435","DK" +"3560952436","3560953103","SE" +"3560953104","3560953119","JP" +"3560953120","3560955903","SE" +"3560955904","3560964095","BE" +"3560964096","3560996863","NL" +"3560996864","3561005055","GB" +"3561005056","3561013247","ES" +"3561013248","3561021439","TR" +"3561021440","3561021695","EU" +"3561021696","3561022463","DE" +"3561022464","3561022719","EU" +"3561022720","3561022975","AT" +"3561022976","3561037823","DE" +"3561037824","3561039231","BE" +"3561039232","3561039263","NL" +"3561039264","3561039327","BE" +"3561039328","3561039330","NL" +"3561039331","3561046015","BE" +"3561046016","3561054207","RU" +"3561054208","3561062399","MT" +"3561062400","3561070591","TR" +"3561070592","3561070847","DE" +"3561070848","3561078783","CH" +"3561078784","3561095167","CZ" +"3561095168","3561103359","DE" +"3561103360","3561111551","UA" +"3561111552","3561113855","LU" +"3561113856","3561114111","EU" +"3561114112","3561119743","LU" +"3561119744","3561127935","IT" +"3561127936","3561136127","DE" +"3561136128","3561144319","ES" +"3561144320","3561152511","FI" +"3561152512","3561160703","IT" +"3561160704","3561168895","RU" +"3561168896","3561177087","FR" +"3561177088","3561185279","CZ" +"3561185280","3561193471","GB" +"3561193472","3561201663","PL" +"3561201664","3561206655","NL" +"3561206656","3561206663","BE" +"3561206664","3561209855","NL" +"3561209856","3561214975","GB" +"3561214976","3561215231","ES" +"3561215232","3561218047","GB" +"3561218048","3561226239","AT" +"3561226240","3561234431","FI" +"3561234432","3561242623","TR" +"3561242624","3561259007","DE" +"3561259008","3561267199","IL" +"3561267200","3561275391","UA" +"3561275392","3561291775","BE" +"3561291776","3561299967","RS" +"3561299968","3561308159","GB" +"3561308160","3561316351","PL" +"3561316352","3561324543","RU" +"3561324544","3561332735","IT" +"3561332736","3561340927","AT" +"3561340928","3561357311","GB" +"3561357312","3561365503","DK" +"3561365504","3561373695","SA" +"3561373696","3561381887","GB" +"3561381888","3561382479","AT" +"3561382480","3561382495","DE" +"3561382496","3561390079","AT" +"3561390080","3561395455","BG" +"3561395456","3561395711","GR" +"3561395712","3561396223","BG" +"3561396224","3561396480","MK" +"3561396481","3561398271","BG" +"3561398272","3561406463","LV" +"3561406464","3561414655","GR" +"3561414656","3561422847","IT" +"3561422848","3561427207","BE" +"3561427208","3561427211","NL" +"3561427212","3561428135","BE" +"3561428136","3561428143","NL" +"3561428144","3561429279","BE" +"3561429280","3561429287","NL" +"3561429288","3561431039","BE" +"3561431040","3561439231","SA" +"3561439232","3561447423","NO" +"3561447424","3561455615","CH" +"3561455616","3561471999","CZ" +"3561472000","3561480191","DE" +"3561480192","3561488383","GB" +"3561488384","3561496575","OM" +"3561496576","3561496831","NL" +"3561496832","3561496887","GB" +"3561496888","3561496891","NL" +"3561496892","3561496955","GB" +"3561496956","3561496959","NL" +"3561496960","3561497087","GB" +"3561497088","3561497119","NL" +"3561497120","3561497215","GB" +"3561497216","3561497311","NL" +"3561497312","3561497327","GB" +"3561497328","3561497423","NL" +"3561497424","3561497471","GB" +"3561497472","3561497535","NL" +"3561497536","3561497599","GB" +"3561497600","3561498111","NL" +"3561498112","3561498399","GB" +"3561498400","3561498431","NL" +"3561498432","3561498487","GB" +"3561498488","3561498491","NL" +"3561498492","3561498495","GB" +"3561498496","3561498559","NL" +"3561498560","3561498607","GB" +"3561498608","3561498615","NL" +"3561498616","3561498623","GB" +"3561498624","3561500415","NL" +"3561500416","3561500671","GB" +"3561500672","3561500703","NL" +"3561500704","3561500719","GB" +"3561500720","3561500751","NL" +"3561500752","3561500763","GB" +"3561500764","3561500767","NL" +"3561500768","3561500775","GB" +"3561500776","3561501311","NL" +"3561501312","3561501343","GB" +"3561501344","3561501375","NL" +"3561501376","3561501407","GB" +"3561501408","3561501443","NL" +"3561501444","3561501487","GB" +"3561501488","3561501503","NL" +"3561501504","3561501535","GB" +"3561501536","3561501631","NL" +"3561501632","3561501695","GB" +"3561501696","3561502047","NL" +"3561502048","3561502079","GB" +"3561502080","3561502143","NL" +"3561502144","3561502207","GB" +"3561502208","3561502631","NL" +"3561502632","3561502655","GB" +"3561502656","3561504255","NL" +"3561504256","3561504383","GB" +"3561504384","3561504767","NL" +"3561504768","3561512959","DE" +"3561512960","3561521151","SI" +"3561521152","3561529343","GE" +"3561529344","3561534559","DE" +"3561534560","3561534575","US" +"3561534576","3561537535","DE" +"3561537536","3561545727","BG" +"3561545728","3561553919","NL" +"3561553920","3561562111","SE" +"3561562112","3561570303","ES" +"3561570304","3561578495","AM" +"3561578496","3561586687","RU" +"3561586688","3561590591","BG" +"3561590592","3561590623","CY" +"3561590624","3561594879","BG" +"3561594880","3561594935","SE" +"3561594936","3561594939","DK" +"3561594940","3561594975","SE" +"3561594976","3561595007","DK" +"3561595008","3561603071","SE" +"3561603072","3561603263","FR" +"3561603264","3561603295","GB" +"3561603296","3561604607","FR" +"3561604608","3561604895","GB" +"3561604896","3561604911","FR" +"3561604912","3561605119","GB" +"3561605120","3561607231","FR" +"3561607232","3561607235","GB" +"3561607236","3561607239","FR" +"3561607240","3561607247","GB" +"3561607248","3561607343","FR" +"3561607344","3561607359","GB" +"3561607360","3561607679","FR" +"3561607680","3561607711","GB" +"3561607712","3561607759","FR" +"3561607760","3561607775","GB" +"3561607776","3561610239","FR" +"3561610240","3561610495","US" +"3561610496","3561610527","FR" +"3561610528","3561610559","GB" +"3561610560","3561610575","FR" +"3561610576","3561610591","GB" +"3561610592","3561610655","FR" +"3561610656","3561610719","GB" +"3561610720","3561611311","FR" +"3561611312","3561611559","GB" +"3561611560","3561611567","FR" +"3561611568","3561612287","GB" +"3561612288","3561612415","FR" +"3561612416","3561613311","GB" +"3561613312","3561613319","FR" +"3561613320","3561613343","GB" +"3561613344","3561613407","FR" +"3561613408","3561613439","GB" +"3561613440","3561613471","FR" +"3561613472","3561614175","GB" +"3561614176","3561614199","FR" +"3561614200","3561614335","GB" +"3561614336","3561614591","FR" +"3561614592","3561615359","GB" +"3561615360","3561615615","FR" +"3561615616","3561615871","IT" +"3561615872","3561616431","FR" +"3561616432","3561616495","GB" +"3561616496","3561616543","FR" +"3561616544","3561616559","GB" +"3561616560","3561616575","FR" +"3561616576","3561616895","GB" +"3561616896","3561616959","FR" +"3561616960","3561617151","GB" +"3561617152","3561617407","FR" +"3561617408","3561617663","FI" +"3561617664","3561617919","LU" +"3561617920","3561618175","SE" +"3561618176","3561618431","IE" +"3561618432","3561618687","DK" +"3561618688","3561618815","FR" +"3561618816","3561618943","PL" +"3561618944","3561619455","ES" +"3561619456","3561640575","GB" +"3561640576","3561640831","FR" +"3561640832","3561641450","GB" +"3561641451","3561641451","FR" +"3561641452","3561652223","GB" +"3561652224","3561668607","CH" +"3561668608","3561679359","RU" +"3561679360","3561679615","UA" +"3561679616","3561684991","RU" +"3561684992","3561693183","BG" +"3561693184","3561694487","DE" +"3561694488","3561694495","CH" +"3561694496","3561701375","DE" +"3561701376","3561706031","SE" +"3561706032","3561706047","DK" +"3561706048","3561709567","SE" +"3561709568","3561717759","PL" +"3561717760","3561725951","RU" +"3561725952","3561734143","ES" +"3561734144","3561750527","RU" +"3561750528","3561758719","KZ" +"3561758720","3561766911","PL" +"3561766912","3561775103","SA" +"3561775104","3561783295","IL" +"3561783296","3561799679","RU" +"3561799680","3561807871","DE" +"3561807872","3561816063","BE" +"3561816064","3561823999","VA" +"3561824000","3561824255","IT" +"3561824256","3561832447","LI" +"3561832448","3561840639","IT" +"3561840640","3561848831","PL" +"3561848832","3561857023","RU" +"3561857024","3561865215","DE" +"3561865216","3561873407","QA" +"3561873408","3561881599","DE" +"3561881600","3561889791","IT" +"3561889792","3561897983","FR" +"3561897984","3561906175","GB" +"3561906176","3561907759","DE" +"3561907760","3561907763","GB" +"3561907764","3561909891","DE" +"3561909892","3561909895","GB" +"3561909896","3561910207","DE" +"3561910208","3561910223","GB" +"3561910224","3561914367","DE" +"3561914368","3561922559","ES" +"3561922560","3561922815","NL" +"3561922816","3561922847","GB" +"3561922848","3561922863","NL" +"3561922864","3561922871","FR" +"3561922872","3561922927","GB" +"3561922928","3561922975","NL" +"3561922976","3561922991","GB" +"3561922992","3561923015","NL" +"3561923016","3561923063","GB" +"3561923064","3561923067","NL" +"3561923068","3561923071","GB" +"3561923072","3561923327","NL" +"3561923328","3561923403","GB" +"3561923404","3561923407","NL" +"3561923408","3561923423","GB" +"3561923424","3561923551","NL" +"3561923552","3561923647","GB" +"3561923648","3561923679","NL" +"3561923680","3561923839","GB" +"3561923840","3561924351","NL" +"3561924352","3561924607","GB" +"3561924608","3561924639","NL" +"3561924640","3561924655","GB" +"3561924656","3561924663","NL" +"3561924664","3561924679","GB" +"3561924680","3561924687","NL" +"3561924688","3561924703","GB" +"3561924704","3561924719","NL" +"3561924720","3561924895","GB" +"3561924896","3561924903","FR" +"3561924904","3561924911","GB" +"3561924912","3561924927","NL" +"3561924928","3561924943","GB" +"3561924944","3561925039","NL" +"3561925040","3561925087","GB" +"3561925088","3561925191","NL" +"3561925192","3561925375","GB" +"3561925376","3561925631","NL" +"3561925632","3561926943","GB" +"3561926944","3561926975","NL" +"3561926976","3561926983","GB" +"3561926984","3561926999","NL" +"3561927000","3561927015","GB" +"3561927016","3561927039","NL" +"3561927040","3561927103","GB" +"3561927104","3561927167","NL" +"3561927168","3561927551","GB" +"3561927552","3561927647","NL" +"3561927648","3561927663","GB" +"3561927664","3561929727","NL" +"3561929728","3561929743","GB" +"3561929744","3561929823","NL" +"3561929824","3561929855","CH" +"3561929856","3561929879","GB" +"3561929880","3561929919","NL" +"3561929920","3561929967","GB" +"3561929968","3561930239","NL" +"3561930240","3561930495","GB" +"3561930496","3561930511","NL" +"3561930512","3561930519","BE" +"3561930520","3561930527","FR" +"3561930528","3561930535","CH" +"3561930536","3561930543","GB" +"3561930544","3561930551","FR" +"3561930552","3561930575","NL" +"3561930576","3561930583","DE" +"3561930584","3561930599","NL" +"3561930600","3561930615","GB" +"3561930616","3561930671","NL" +"3561930672","3561930679","GB" +"3561930680","3561930719","NL" +"3561930720","3561930727","GB" +"3561930728","3561938943","NL" +"3561938944","3561939832","IE" +"3561939833","3561939835","GB" +"3561939836","3561940991","IE" +"3561940992","3561942015","GB" +"3561942016","3561942847","IE" +"3561942848","3561942911","GB" +"3561942912","3561947135","IE" +"3561947136","3561963519","DE" +"3561963520","3561971711","BE" +"3561971712","3561975807","CZ" +"3561975808","3561979903","UA" +"3561979904","3561988095","ES" +"3561988096","3562004479","DE" +"3562004480","3562010495","NL" +"3562010496","3562010623","DE" +"3562010624","3562012671","NL" +"3562012672","3562020095","IR" +"3562020096","3562020351","AE" +"3562020352","3562020863","IR" +"3562020864","3562029055","UA" +"3562029056","3562037247","CZ" +"3562037248","3562045439","CH" +"3562045440","3562056711","ES" +"3562056712","3562056719","NL" +"3562056720","3562056911","ES" +"3562056912","3562056927","FR" +"3562056928","3562057215","ES" +"3562057216","3562057247","NL" +"3562057248","3562057263","BE" +"3562057264","3562057471","ES" +"3562057472","3562057727","DE" +"3562057728","3562057975","ES" +"3562057976","3562057983","FR" +"3562057984","3562058303","ES" +"3562058304","3562058367","IT" +"3562058368","3562059327","ES" +"3562059328","3562059335","CH" +"3562059336","3562059391","ES" +"3562059392","3562059775","CH" +"3562059776","3562061823","ES" +"3562061824","3562070015","IT" +"3562070016","3562078207","DE" +"3562078208","3562086399","SK" +"3562086400","3562087423","SE" +"3562087424","3562088447","GB" +"3562088448","3562094591","SE" +"3562094592","3562095607","GB" +"3562095608","3562095615","FR" +"3562095616","3562096063","GB" +"3562096064","3562096127","FR" +"3562096128","3562098367","GB" +"3562098368","3562098375","FR" +"3562098376","3562101471","GB" +"3562101472","3562101479","FR" +"3562101480","3562101631","GB" +"3562101632","3562101639","FR" +"3562101640","3562104991","GB" +"3562104992","3562104999","FR" +"3562105000","3562105599","GB" +"3562105600","3562105855","FR" +"3562105856","3562106879","GB" +"3562106880","3562106911","FR" +"3562106912","3562106943","GB" +"3562106944","3562106959","FR" +"3562106960","3562107071","GB" +"3562107072","3562107103","FR" +"3562107104","3562107231","GB" +"3562107232","3562107263","FR" +"3562107264","3562107519","GB" +"3562107520","3562107583","FR" +"3562107584","3562108959","GB" +"3562108960","3562108975","FR" +"3562108976","3562109567","GB" +"3562109568","3562109583","FR" +"3562109584","3562110399","GB" +"3562110400","3562110431","FR" +"3562110432","3562110463","GB" +"3562110464","3562110719","FR" +"3562110720","3562110975","GB" +"3562110976","3562143743","ES" +"3562143744","3562151935","GB" +"3562151936","3562160127","DE" +"3562160128","3562161151","GB" +"3562161152","3562161183","NL" +"3562161184","3562169343","GB" +"3562169344","3562170367","CH" +"3562170368","3562172415","IE" +"3562172416","3562173951","CH" +"3562173952","3562174463","GB" +"3562174464","3562176511","CH" +"3562176512","3562184703","FR" +"3562184704","3562192895","DE" +"3562192896","3562201087","UA" +"3562201088","3562209279","DE" +"3562209280","3562217471","RU" +"3562217472","3562225151","DE" +"3562225152","3562225159","CH" +"3562225160","3562225663","DE" +"3562225664","3562233855","NL" +"3562233856","3562242047","FI" +"3562242048","3562258431","FR" +"3562258432","3562263975","NL" +"3562263976","3562263983","BE" +"3562263984","3562283007","NL" +"3562283008","3562285055","IT" +"3562285056","3562287103","IE" +"3562287104","3562289151","IT" +"3562289152","3562291199","FR" +"3562291200","3562307583","GB" +"3562307584","3562315775","NL" +"3562315776","3562321231","GB" +"3562321232","3562321239","BE" +"3562321240","3562322743","GB" +"3562322744","3562322751","GG" +"3562322752","3562323135","GB" +"3562323136","3562323143","BE" +"3562323144","3562323951","GB" +"3562323952","3562323959","GG" +"3562323960","3562323967","GB" +"3562323968","3562340351","DE" +"3562340352","3562348543","GB" +"3562348544","3562356735","ES" +"3562356736","3562364927","SE" +"3562364928","3562373119","PL" +"3562373120","3562381311","FR" +"3562381312","3562389503","SI" +"3562389504","3562395647","GH" +"3562395648","3562395903","BR" +"3562395904","3562396159","TZ" +"3562396160","3562396927","SZ" +"3562396928","3562397183","GH" +"3562397184","3562397695","SZ" +"3562397696","3562405887","GB" +"3562405888","3562414079","FI" +"3562414080","3562422271","DE" +"3562422272","3562430463","IR" +"3562430464","3562438655","UA" +"3562438656","3562463231","DE" +"3562463232","3562471423","UA" +"3562471424","3562479615","PL" +"3562479616","3562487807","DE" +"3562487808","3562495999","GB" +"3562496000","3562504191","BE" +"3562504192","3562512383","DE" +"3562512384","3562520575","UA" +"3562520576","3562528767","ES" +"3562528768","3562536959","PL" +"3562536960","3562545151","AT" +"3562545152","3562553343","GB" +"3562553344","3562561535","DK" +"3562561536","3562569727","UG" +"3562569728","3562572223","DE" +"3562572224","3562572239","US" +"3562572240","3562572543","DE" +"3562572544","3562572799","LU" +"3562572800","3562577919","DE" +"3562577920","3562586111","AT" +"3562586112","3562594303","DE" +"3562594304","3562595423","BE" +"3562595424","3562595455","LU" +"3562595456","3562598207","BE" +"3562598208","3562598223","LU" +"3562598224","3562602495","BE" +"3562602496","3562610687","ES" +"3562610688","3562618879","NO" +"3562618880","3562627071","GB" +"3562627072","3562643455","DE" +"3562643456","3562651647","AT" +"3562651648","3562659839","DE" +"3562659840","3562668031","SK" +"3562668032","3562676223","IT" +"3562676224","3562684415","UA" +"3562684416","3562692607","FI" +"3562692608","3562700799","UA" +"3562700800","3562708991","DE" +"3562708992","3562717183","UA" +"3562717184","3562725375","CH" +"3562725376","3562733567","CZ" +"3562733568","3562741759","PL" +"3562741760","3562758143","IT" +"3562758144","3562766335","HR" +"3562766336","3562774527","SE" +"3562774528","3562782719","BG" +"3562782720","3562790911","RU" +"3562790912","3562797951","DE" +"3562797952","3562797967","CH" +"3562797968","3562799103","DE" +"3562799104","3562803471","HU" +"3562803472","3562803479","UA" +"3562803480","3562807295","HU" +"3562807296","3562815487","ES" +"3562815488","3562823679","NL" +"3562823680","3562848255","RU" +"3562848256","3562856447","HR" +"3562856448","3562864639","UA" +"3562864640","3562872831","DE" +"3562872832","3562881023","DK" +"3562881024","3562889215","GB" +"3562889216","3562897407","LV" +"3562897408","3562905599","RO" +"3562905600","3562921983","SA" +"3562921984","3562930175","SI" +"3562930176","3562938367","RU" +"3562938368","3562946559","CH" +"3562946560","3562954751","FI" +"3562954752","3562962943","RU" +"3562962944","3562971135","IT" +"3562971136","3562987519","FR" +"3562987520","3562995711","DE" +"3562995712","3563003903","AT" +"3563003904","3563005183","DE" +"3563005184","3563005311","KZ" +"3563005312","3563005439","DE" +"3563005440","3563005695","TR" +"3563005696","3563005951","DE" +"3563005952","3563006463","TR" +"3563006464","3563006591","DE" +"3563006592","3563006719","CA" +"3563006720","3563007487","DE" +"3563007488","3563007999","TR" +"3563008000","3563008255","DE" +"3563008256","3563008511","PL" +"3563008512","3563009279","DE" +"3563009280","3563009535","LT" +"3563009536","3563009791","DE" +"3563009792","3563010047","HK" +"3563010048","3563010815","DE" +"3563010816","3563011071","PL" +"3563011072","3563011583","DE" +"3563011584","3563011839","ES" +"3563011840","3563012095","DE" +"3563012096","3563020287","FR" +"3563020288","3563028479","DE" +"3563028480","3563036671","IR" +"3563036672","3563044863","BG" +"3563044864","3563053055","ES" +"3563053056","3563061247","GB" +"3563061248","3563065343","GH" +"3563065344","3563067391","NG" +"3563067392","3563068415","MZ" +"3563068416","3563069439","NG" +"3563069440","3563077631","HU" +"3563077632","3563085823","KZ" +"3563085824","3563094015","RU" +"3563094016","3563096255","DE" +"3563096256","3563096287","GB" +"3563096288","3563097087","DE" +"3563097088","3563097119","GB" +"3563097120","3563097151","DE" +"3563097152","3563097183","GB" +"3563097184","3563097215","DE" +"3563097216","3563097247","GB" +"3563097248","3563097311","DE" +"3563097312","3563097343","GB" +"3563097344","3563102207","DE" +"3563102208","3563110399","CZ" +"3563110400","3563118591","RU" +"3563118592","3563126783","PL" +"3563126784","3563134975","KG" +"3563134976","3563143167","IT" +"3563143168","3563151359","GB" +"3563151360","3563159551","DE" +"3563159552","3563163647","DK" +"3563163648","3563164159","SE" +"3563164160","3563167743","DK" +"3563167744","3563175935","ES" +"3563175936","3563192319","DK" +"3563192320","3563200511","TR" +"3563200512","3563208703","CH" +"3563208704","3563210751","DK" +"3563210752","3563211007","DE" +"3563211008","3563220123","DK" +"3563220124","3563220127","A2" +"3563220128","3563225087","DK" +"3563225088","3563233279","LB" +"3563233280","3563241471","BY" +"3563241472","3563257855","TR" +"3563257856","3563290623","FR" +"3563290624","3563315199","DE" +"3563315200","3563323391","DK" +"3563323392","3563329791","GB" +"3563329792","3563331583","EU" +"3563331584","3563339775","DE" +"3563339776","3563347967","NG" +"3563347968","3563356159","GB" +"3563356160","3563364351","RU" +"3563364352","3563372543","BE" +"3563372544","3563380735","SA" +"3563380736","3563382583","GB" +"3563382584","3563382587","AT" +"3563382588","3563382589","DE" +"3563382590","3563382767","GB" +"3563382768","3563382775","IE" +"3563382776","3563388927","GB" +"3563388928","3563397119","CH" +"3563397120","3563405311","DE" +"3563405312","3563407871","ES" +"3563407872","3563407903","US" +"3563407904","3563413503","ES" +"3563413504","3563421695","TR" +"3563421696","3563438079","SI" +"3563438080","3563446271","DE" +"3563446272","3563454463","LB" +"3563454464","3563462655","SA" +"3563462656","3563479039","IT" +"3563479040","3563487231","GB" +"3563487232","3563495423","RS" +"3563495424","3563503615","DE" +"3563503616","3563511807","GB" +"3563511808","3563519999","DE" +"3563520000","3563528191","FR" +"3563528192","3563536383","DE" +"3563536384","3563539087","CH" +"3563539088","3563539095","US" +"3563539096","3563539119","CH" +"3563539120","3563539135","DE" +"3563539136","3563544575","CH" +"3563544576","3563552767","RU" +"3563552768","3563560959","SI" +"3563560960","3563569151","EG" +"3563569152","3563577343","IT" +"3563577344","3563585535","GB" +"3563585536","3563601919","IT" +"3563601920","3563610111","RU" +"3563610112","3563618303","BG" +"3563618304","3563626495","GB" +"3563626496","3563634687","ES" +"3563634688","3563651071","NL" +"3563651072","3563683839","SE" +"3563683840","3563692031","BE" +"3563692032","3563700223","GB" +"3563700224","3563708415","DE" +"3563708416","3563716607","HU" +"3563716608","3563724799","PL" +"3563724800","3563732991","RU" +"3563732992","3563741183","PS" +"3563741184","3563749375","GB" +"3563749376","3563765759","PL" +"3563765760","3563782143","ES" +"3563782144","3563790335","GR" +"3563790336","3563798527","EE" +"3563798528","3563800447","FR" +"3563800448","3563800463","GB" +"3563800464","3563800495","FR" +"3563800496","3563800511","GB" +"3563800512","3563800607","FR" +"3563800608","3563800623","GB" +"3563800624","3563800767","FR" +"3563800768","3563800783","GB" +"3563800784","3563800911","FR" +"3563800912","3563800927","GB" +"3563800928","3563800943","FR" +"3563800944","3563800991","GB" +"3563800992","3563801135","FR" +"3563801136","3563801151","DE" +"3563801152","3563801183","FR" +"3563801184","3563801199","DE" +"3563801200","3563801279","FR" +"3563801280","3563801295","NL" +"3563801296","3563801375","FR" +"3563801376","3563801391","GB" +"3563801392","3563801407","IT" +"3563801408","3563801423","DE" +"3563801424","3563801455","FR" +"3563801456","3563801519","GB" +"3563801520","3563801551","FR" +"3563801552","3563801567","GB" +"3563801568","3563801599","FR" +"3563801600","3563801631","GB" +"3563801632","3563801647","FR" +"3563801648","3563801743","GB" +"3563801744","3563801775","FR" +"3563801776","3563801791","BE" +"3563801792","3563801839","FR" +"3563801840","3563801855","GB" +"3563801856","3563801871","FR" +"3563801872","3563801887","GB" +"3563801888","3563801922","FR" +"3563801923","3563801935","GB" +"3563801936","3563802015","FR" +"3563802016","3563802031","BE" +"3563802032","3563802047","FR" +"3563802048","3563802063","IT" +"3563802064","3563802207","FR" +"3563802208","3563802223","GB" +"3563802224","3563802255","FR" +"3563802256","3563802271","GB" +"3563802272","3563802303","FR" +"3563802304","3563802319","IT" +"3563802320","3563802447","FR" +"3563802448","3563802463","GB" +"3563802464","3563802623","FR" +"3563802624","3563802655","GB" +"3563802656","3563802735","FR" +"3563802736","3563802751","US" +"3563802752","3563802783","GB" +"3563802784","3563803007","FR" +"3563803008","3563803023","GB" +"3563803024","3563803039","FR" +"3563803040","3563803055","GB" +"3563803056","3563803119","FR" +"3563803120","3563803135","NL" +"3563803136","3563803151","FR" +"3563803152","3563803167","GB" +"3563803168","3563803183","FR" +"3563803184","3563803215","GB" +"3563803216","3563803247","FR" +"3563803248","3563803263","GB" +"3563803264","3563803279","FR" +"3563803280","3563803295","GB" +"3563803296","3563803311","FR" +"3563803312","3563803327","GB" +"3563803328","3563803359","FR" +"3563803360","3563803423","GB" +"3563803424","3563803439","FR" +"3563803440","3563803455","DE" +"3563803456","3563803487","GB" +"3563803488","3563803503","US" +"3563803504","3563803519","GB" +"3563803520","3563803631","FR" +"3563803632","3563803647","GB" +"3563803648","3563803967","FR" +"3563803968","3563803983","BE" +"3563803984","3563804695","FR" +"3563804696","3563804703","GB" +"3563804704","3563804719","FR" +"3563804720","3563804727","GB" +"3563804728","3563806543","FR" +"3563806544","3563806559","DE" +"3563806560","3563806687","FR" +"3563806688","3563806703","DE" +"3563806704","3563806719","FR" +"3563806720","3563814911","SA" +"3563814912","3563823103","SE" +"3563823104","3563831295","DE" +"3563831296","3563847679","RU" +"3563847680","3563848231","NL" +"3563848232","3563848239","GB" +"3563848240","3563848319","NL" +"3563848320","3563848327","ES" +"3563848328","3563848383","NL" +"3563848384","3563848447","ES" +"3563848448","3563848575","NL" +"3563848576","3563848583","ES" +"3563848584","3563848671","NL" +"3563848672","3563848703","ES" +"3563848704","3563848979","NL" +"3563848980","3563848983","ES" +"3563848984","3563848987","NL" +"3563848988","3563848991","ES" +"3563848992","3563849151","NL" +"3563849152","3563849183","ES" +"3563849184","3563849191","NL" +"3563849192","3563849215","ES" +"3563849216","3563849727","GB" +"3563849728","3563849999","NL" +"3563850000","3563850007","FI" +"3563850008","3563850047","NL" +"3563850048","3563850111","ES" +"3563850112","3563850239","NL" +"3563850240","3563850751","GB" +"3563850752","3563852031","NL" +"3563852032","3563852071","ES" +"3563852072","3563852079","NL" +"3563852080","3563852095","ES" +"3563852096","3563852191","NL" +"3563852192","3563852207","GB" +"3563852208","3563852216","NL" +"3563852217","3563852223","ES" +"3563852224","3563852543","NL" +"3563852544","3563852799","ES" +"3563852800","3563853319","NL" +"3563853320","3563853327","ES" +"3563853328","3563853567","NL" +"3563853568","3563854079","ES" +"3563854080","3563854095","NL" +"3563854096","3563854103","ES" +"3563854104","3563854191","NL" +"3563854192","3563854239","ES" +"3563854240","3563854259","NL" +"3563854260","3563854591","ES" +"3563854592","3563854847","NL" +"3563854848","3563855359","ES" +"3563855360","3563855487","NL" +"3563855488","3563855551","ES" +"3563855552","3563855583","NL" +"3563855584","3563855615","ES" +"3563855616","3563855871","US" +"3563855872","3563864063","AT" +"3563864064","3563872255","GB" +"3563872256","3563880447","RU" +"3563880448","3563880703","TR" +"3563880704","3563884651","CY" +"3563884652","3563884652","TR" +"3563884653","3563888639","CY" +"3563888640","3563896831","DE" +"3563896832","3563899903","HU" +"3563899904","3563900159","SK" +"3563900160","3563900415","HU" +"3563900416","3563900671","SK" +"3563900672","3563913215","HU" +"3563913216","3563921407","RU" +"3563921408","3563929599","UA" +"3563929600","3563937791","CH" +"3563937792","3563945983","TR" +"3563945984","3563956223","PL" +"3563956224","3563958271","RU" +"3563958272","3563962367","CZ" +"3563962368","3563970559","RU" +"3563970560","3563978751","TR" +"3563978752","3563995135","IT" +"3563995136","3564003327","MK" +"3564003328","3564008191","DE" +"3564008192","3564008223","CH" +"3564008224","3564011519","DE" +"3564011520","3564019711","UA" +"3564019712","3564021247","GB" +"3564021248","3564021279","IT" +"3564021280","3564024095","GB" +"3564024096","3564024103","IT" +"3564024104","3564024135","GB" +"3564024136","3564024143","IT" +"3564024144","3564027903","GB" +"3564027904","3564036351","DE" +"3564036352","3564039423","A2" +"3564039424","3564039679","DE" +"3564039680","3564041215","A2" +"3564041216","3564041727","RU" +"3564041728","3564043263","A2" +"3564043264","3564043519","DE" +"3564043520","3564044287","A2" +"3564044288","3564052479","CZ" +"3564052480","3564060671","GB" +"3564060672","3564068863","RU" +"3564068864","3564077055","ES" +"3564077056","3564093439","GB" +"3564093440","3564101631","UA" +"3564101632","3564103743","DE" +"3564103744","3564103759","A2" +"3564103760","3564109823","DE" +"3564109824","3564126207","SE" +"3564126208","3564128287","IT" +"3564128288","3564128303","BG" +"3564128304","3564129727","IT" +"3564129728","3564129743","PH" +"3564129744","3564130655","IT" +"3564130656","3564130671","IN" +"3564130672","3564134399","IT" +"3564134400","3564142591","KG" +"3564142592","3564146175","DE" +"3564146176","3564150783","DK" +"3564150784","3564152607","SE" +"3564152608","3564152639","NO" +"3564152640","3564153087","SE" +"3564153088","3564153151","NO" +"3564153152","3564153199","SE" +"3564153200","3564153207","NL" +"3564153208","3564155695","SE" +"3564155696","3564155711","FI" +"3564155712","3564156415","SE" +"3564156416","3564156419","NO" +"3564156420","3564156919","SE" +"3564156920","3564156927","FI" +"3564156928","3564157207","SE" +"3564157208","3564157215","NO" +"3564157216","3564158831","SE" +"3564158832","3564158839","FI" +"3564158840","3564158951","SE" +"3564158952","3564158955","NO" +"3564158956","3564158975","SE" +"3564158976","3564161855","DE" +"3564161856","3564161891","NL" +"3564161892","3564165119","DE" +"3564165120","3564165439","NL" +"3564165440","3564175359","DE" +"3564175360","3564183551","GB" +"3564183552","3564185087","UA" +"3564185088","3564185343","DE" +"3564185344","3564191743","UA" +"3564191744","3564199935","BE" +"3564199936","3564208127","RU" +"3564208128","3564212735","GB" +"3564212736","3564213007","IE" +"3564213008","3564216319","GB" +"3564216320","3564224511","PT" +"3564224512","3564232703","GB" +"3564232704","3564240895","RU" +"3564240896","3564241407","TJ" +"3564241408","3564249087","RU" +"3564249088","3564260735","DE" +"3564260736","3564260863","NL" +"3564260864","3564265471","DE" +"3564265472","3564273663","NL" +"3564273664","3564292151","DE" +"3564292152","3564292159","AT" +"3564292160","3564302655","DE" +"3564302656","3564302687","BE" +"3564302688","3564306431","DE" +"3564306432","3564314623","TR" +"3564314624","3564322815","GB" +"3564322816","3564331007","IT" +"3564331008","3564339199","ES" +"3564339200","3564339991","GB" +"3564339992","3564339999","NL" +"3564340000","3564344031","GB" +"3564344032","3564344047","NL" +"3564344048","3564345143","GB" +"3564345144","3564345151","NL" +"3564345152","3564349615","GB" +"3564349616","3564349631","NL" +"3564349632","3564350399","GB" +"3564350400","3564350431","NL" +"3564350432","3564351551","GB" +"3564351552","3564351615","NL" +"3564351616","3564353207","GB" +"3564353208","3564353215","NL" +"3564353216","3564355583","GB" +"3564355584","3564363775","NL" +"3564363776","3564371967","UA" +"3564371968","3564380159","DE" +"3564380160","3564388351","FI" +"3564388352","3564396543","SE" +"3564396544","3564404735","RU" +"3564404736","3564412927","BG" +"3564412928","3564421119","IL" +"3564421120","3564428185","SA" +"3564428186","3564428186","A2" +"3564428187","3564429311","SA" +"3564429312","3564431567","KZ" +"3564431568","3564431583","AF" +"3564431584","3564437503","KZ" +"3564437504","3564445695","LT" +"3564445696","3564453887","BG" +"3564453888","3564462079","DE" +"3564462080","3564470271","CH" +"3564470272","3564473439","IL" +"3564473440","3564473455","A2" +"3564473456","3564478463","IL" +"3564478464","3564486655","LU" +"3564486656","3564494847","CH" +"3564494848","3564494907","GB" +"3564494908","3564494911","FR" +"3564494912","3564495103","GB" +"3564495104","3564495167","DE" +"3564495168","3564495203","GB" +"3564495204","3564495615","EU" +"3564495616","3564495743","GB" +"3564495744","3564495871","EU" +"3564495872","3564495927","GB" +"3564495928","3564495935","EU" +"3564495936","3564496111","GB" +"3564496112","3564496127","EU" +"3564496128","3564496175","GB" +"3564496176","3564496183","EU" +"3564496184","3564496199","GB" +"3564496200","3564496207","EU" +"3564496208","3564496215","GB" +"3564496216","3564496223","EU" +"3564496224","3564496263","GB" +"3564496264","3564496271","EU" +"3564496272","3564496319","GB" +"3564496320","3564496327","FR" +"3564496328","3564496335","EU" +"3564496336","3564496607","GB" +"3564496608","3564496639","EU" +"3564496640","3564496655","GB" +"3564496656","3564496671","EU" +"3564496672","3564496847","GB" +"3564496848","3564496863","FR" +"3564496864","3564496895","GB" +"3564496896","3564498943","EU" +"3564498944","3564499007","NL" +"3564499008","3564499055","GB" +"3564499056","3564499199","EU" +"3564499200","3564499215","NL" +"3564499216","3564499231","DK" +"3564499232","3564499239","NL" +"3564499240","3564499247","EU" +"3564499248","3564499335","GB" +"3564499336","3564499455","EU" +"3564499456","3564499551","NL" +"3564499552","3564499711","GB" +"3564499712","3564500991","EU" +"3564500992","3564500999","SE" +"3564501000","3564501247","EU" +"3564501248","3564501263","DE" +"3564501264","3564501279","SE" +"3564501280","3564501311","GB" +"3564501312","3564501503","EU" +"3564501504","3564501507","SE" +"3564501508","3564501511","DE" +"3564501512","3564501759","EU" +"3564501760","3564501887","DE" +"3564501888","3564502527","EU" +"3564502528","3564502559","DE" +"3564502560","3564502591","GB" +"3564502592","3564503039","EU" +"3564503040","3564511231","JO" +"3564511232","3564519423","RU" +"3564519424","3564527615","SI" +"3564527616","3564543999","SA" +"3564544000","3564560383","DE" +"3564560384","3564560391","US" +"3564560392","3564560399","CA" +"3564560400","3564560455","US" +"3564560456","3564560463","GB" +"3564560464","3564560479","US" +"3564560480","3564560511","GB" +"3564560512","3564560527","US" +"3564560528","3564560575","GB" +"3564560576","3564560607","US" +"3564560608","3564560895","GB" +"3564560896","3564560903","US" +"3564560904","3564561151","GB" +"3564561152","3564561407","US" +"3564561408","3564561663","GB" +"3564561664","3564561671","US" +"3564561672","3564561679","GB" +"3564561680","3564561687","US" +"3564561688","3564561695","GB" +"3564561696","3564561919","US" +"3564561920","3564562431","CH" +"3564562432","3564562687","A1" +"3564562688","3564562831","US" +"3564562832","3564562847","GB" +"3564562848","3564562943","US" +"3564562944","3564563711","GB" +"3564563712","3564563967","A1" +"3564563968","3564564223","GB" +"3564564224","3564564239","US" +"3564564240","3564564351","GB" +"3564564352","3564564415","US" +"3564564416","3564564419","GB" +"3564564420","3564564427","US" +"3564564428","3564565231","GB" +"3564565232","3564565239","US" +"3564565240","3564565247","GB" +"3564565248","3564565279","US" +"3564565280","3564565327","GB" +"3564565328","3564565384","US" +"3564565385","3564565385","GB" +"3564565386","3564565439","US" +"3564565440","3564565567","GB" +"3564565568","3564565631","US" +"3564565632","3564565663","GB" +"3564565664","3564565679","US" +"3564565680","3564565695","GB" +"3564565696","3564565711","US" +"3564565712","3564566047","GB" +"3564566048","3564566079","US" +"3564566080","3564566143","GB" +"3564566144","3564566175","US" +"3564566176","3564566239","GB" +"3564566240","3564566527","US" +"3564566528","3564567047","GB" +"3564567048","3564567055","US" +"3564567056","3564567079","GB" +"3564567080","3564567095","US" +"3564567096","3564567143","GB" +"3564567144","3564567151","US" +"3564567152","3564567183","GB" +"3564567184","3564567199","US" +"3564567200","3564567247","GB" +"3564567248","3564567255","US" +"3564567256","3564567295","GB" +"3564567296","3564567551","US" +"3564567552","3564567807","GB" +"3564567808","3564567935","US" +"3564567936","3564568039","GB" +"3564568040","3564568063","US" +"3564568064","3564568223","GB" +"3564568224","3564568231","US" +"3564568232","3564568255","GB" +"3564568256","3564568319","US" +"3564568320","3564571055","GB" +"3564571056","3564571071","DE" +"3564571072","3564571135","GB" +"3564571136","3564571455","FR" +"3564571456","3564571479","GB" +"3564571480","3564571487","FR" +"3564571488","3564571511","GB" +"3564571512","3564571519","FR" +"3564571520","3564571567","GB" +"3564571568","3564571583","FR" +"3564571584","3564571591","GB" +"3564571592","3564571599","FR" +"3564571600","3564572271","GB" +"3564572272","3564572287","DE" +"3564572288","3564572415","GB" +"3564572416","3564572543","DE" +"3564572544","3564573695","GB" +"3564573696","3564574079","DE" +"3564574080","3564576767","GB" +"3564576768","3564584959","RU" +"3564584960","3564593151","SA" +"3564593152","3564601343","RU" +"3564601344","3564609535","AT" +"3564609536","3564634111","RU" +"3564634112","3564642303","MK" +"3564642304","3564650495","CH" +"3564650496","3564666879","NL" +"3564666880","3564668927","IE" +"3564668928","3564669183","EU" +"3564669184","3564669407","IE" +"3564669408","3564669439","GB" +"3564669440","3564670207","IE" +"3564670208","3564670239","GB" +"3564670240","3564673023","IE" +"3564673024","3564673055","GB" +"3564673056","3564673135","IE" +"3564673136","3564673215","GB" +"3564673216","3564673535","IE" +"3564673536","3564673663","GB" +"3564673664","3564673791","IE" +"3564673792","3564673807","GB" +"3564673808","3564673823","IE" +"3564673824","3564673839","GB" +"3564673840","3564674047","IE" +"3564674048","3564674431","GB" +"3564674432","3564675071","IE" +"3564675072","3564683263","RU" +"3564683264","3564691455","IR" +"3564691456","3564699647","GI" +"3564699648","3564716031","GB" +"3564716032","3564724223","IT" +"3564724224","3564732415","NL" +"3564732416","3564733183","DE" +"3564733184","3564733439","GB" +"3564733440","3564734207","DE" +"3564734208","3564734463","EU" +"3564734464","3564734815","DE" +"3564734816","3564734823","GB" +"3564734824","3564734847","DE" +"3564734848","3564734975","GB" +"3564734976","3564736511","DE" +"3564736512","3564736527","GB" +"3564736528","3564736583","DE" +"3564736584","3564736603","GB" +"3564736604","3564736607","DE" +"3564736608","3564736611","GB" +"3564736612","3564736623","DE" +"3564736624","3564736631","GB" +"3564736632","3564736871","DE" +"3564736872","3564736887","GB" +"3564736888","3564736895","DE" +"3564736896","3564736903","GB" +"3564736904","3564736927","DE" +"3564736928","3564736959","GB" +"3564736960","3564736967","DE" +"3564736968","3564736975","GB" +"3564736976","3564736991","DE" +"3564736992","3564737023","GB" +"3564737024","3564739335","DE" +"3564739336","3564739343","GB" +"3564739344","3564739383","DE" +"3564739384","3564739391","ES" +"3564739392","3564739495","DE" +"3564739496","3564739503","GB" +"3564739504","3564739519","AT" +"3564739520","3564739807","GB" +"3564739808","3564739815","DE" +"3564739816","3564739823","GB" +"3564739824","3564740351","DE" +"3564740352","3564740383","GB" +"3564740384","3564740455","DE" +"3564740456","3564740459","GB" +"3564740460","3564740479","DE" +"3564740480","3564740495","GB" +"3564740496","3564740503","DE" +"3564740504","3564740527","GB" +"3564740528","3564740591","DE" +"3564740592","3564740595","GB" +"3564740596","3564740599","DE" +"3564740600","3564740603","GB" +"3564740604","3564740607","DE" +"3564740608","3564748799","FR" +"3564748800","3564756991","GB" +"3564756992","3564765183","ES" +"3564765184","3564773375","RU" +"3564773376","3564781567","DE" +"3564781568","3564789759","LT" +"3564789760","3564797951","ES" +"3564797952","3564806143","DE" +"3564806144","3564814335","BG" +"3564814336","3564822527","PL" +"3564822528","3564830719","EG" +"3564830720","3564831487","BE" +"3564831488","3564831743","EU" +"3564831744","3564832511","BE" +"3564832512","3564832767","EU" +"3564832768","3564838911","BE" +"3564838912","3564847103","DE" +"3564847104","3564855295","IT" +"3564855296","3564862863","DE" +"3564862864","3564862871","AE" +"3564862872","3564863487","DE" +"3564863488","3564880927","NL" +"3564880928","3564880943","GB" +"3564880944","3564880951","NL" +"3564880952","3564880967","FR" +"3564880968","3564880975","NL" +"3564880976","3564880991","GB" +"3564880992","3564881007","NL" +"3564881008","3564881103","GB" +"3564881104","3564881159","NL" +"3564881160","3564881199","GB" +"3564881200","3564881203","FR" +"3564881204","3564881231","GB" +"3564881232","3564881247","NL" +"3564881248","3564881343","GB" +"3564881344","3564881359","NL" +"3564881360","3564881391","GB" +"3564881392","3564881439","NL" +"3564881440","3564881455","GB" +"3564881456","3564881463","NL" +"3564881464","3564881471","GB" +"3564881472","3564881551","NL" +"3564881552","3564881599","GB" +"3564881600","3564881615","NL" +"3564881616","3564881663","GB" +"3564881664","3564881727","NL" +"3564881728","3564881935","GB" +"3564881936","3564881939","NL" +"3564881940","3564881999","GB" +"3564882000","3564882079","NL" +"3564882080","3564882095","GB" +"3564882096","3564882119","NL" +"3564882120","3564882143","GB" +"3564882144","3564882239","NL" +"3564882240","3564882431","GB" +"3564882432","3564882687","EU" +"3564882688","3564883007","GB" +"3564883008","3564883039","NL" +"3564883040","3564883071","GB" +"3564883072","3564883087","NL" +"3564883088","3564883199","GB" +"3564883200","3564883711","NL" +"3564883712","3564884223","GB" +"3564884224","3564884255","NL" +"3564884256","3564884303","GB" +"3564884304","3564884319","NL" +"3564884320","3564884335","GB" +"3564884336","3564884343","NL" +"3564884344","3564884359","GB" +"3564884360","3564884367","NL" +"3564884368","3564884407","GB" +"3564884408","3564884415","NL" +"3564884416","3564884431","GB" +"3564884432","3564884439","NL" +"3564884440","3564884487","GB" +"3564884488","3564884519","NL" +"3564884520","3564884527","FR" +"3564884528","3564884552","NL" +"3564884553","3564884559","GB" +"3564884560","3564884567","NL" +"3564884568","3564884735","GB" +"3564884736","3564885039","NL" +"3564885040","3564885215","GB" +"3564885216","3564885343","NL" +"3564885344","3564885359","GB" +"3564885360","3564885367","NL" +"3564885368","3564885487","GB" +"3564885488","3564885495","NL" +"3564885496","3564885503","GB" +"3564885504","3564885543","NL" +"3564885544","3564885551","BE" +"3564885552","3564885559","NL" +"3564885560","3564885567","GB" +"3564885568","3564885599","NL" +"3564885600","3564885615","GB" +"3564885616","3564885631","NL" +"3564885632","3564885647","GB" +"3564885648","3564885663","NL" +"3564885664","3564885727","FR" +"3564885728","3564885743","NL" +"3564885744","3564885759","GB" +"3564885760","3564885775","NL" +"3564885776","3564885791","GB" +"3564885792","3564885799","NL" +"3564885800","3564885839","GB" +"3564885840","3564885855","NL" +"3564885856","3564885871","GB" +"3564885872","3564885887","NL" +"3564885888","3564885919","GB" +"3564885920","3564885935","NL" +"3564885936","3564885951","GB" +"3564885952","3564885967","NL" +"3564885968","3564885999","GB" +"3564886000","3564886031","NL" +"3564886032","3564886063","GB" +"3564886064","3564886079","NL" +"3564886080","3564886127","GB" +"3564886128","3564886143","NL" +"3564886144","3564886175","GB" +"3564886176","3564886207","NL" +"3564886208","3564886271","GB" +"3564886272","3564886279","NL" +"3564886280","3564886287","GB" +"3564886288","3564886295","NL" +"3564886296","3564886303","GB" +"3564886304","3564886367","NL" +"3564886368","3564886383","GB" +"3564886384","3564886415","NL" +"3564886416","3564886431","GB" +"3564886432","3564886527","NL" +"3564886528","3564886655","GB" +"3564886656","3564886751","NL" +"3564886752","3564886943","GB" +"3564886944","3564886951","NL" +"3564886952","3564887039","GB" +"3564887040","3564888063","NL" +"3564888064","3564888079","GB" +"3564888080","3564888095","CH" +"3564888096","3564888207","NL" +"3564888208","3564888223","GB" +"3564888224","3564888327","NL" +"3564888328","3564888335","GB" +"3564888336","3564888367","NL" +"3564888368","3564888383","FR" +"3564888384","3564888463","NL" +"3564888464","3564888479","DE" +"3564888480","3564888503","NL" +"3564888504","3564888511","GB" +"3564888512","3564888527","DE" +"3564888528","3564888591","NL" +"3564888592","3564888607","GB" +"3564888608","3564888655","NL" +"3564888656","3564888663","BE" +"3564888664","3564888671","NL" +"3564888672","3564888735","BE" +"3564888736","3564888815","NL" +"3564888816","3564888823","GB" +"3564888824","3564888959","NL" +"3564888960","3564888991","GB" +"3564888992","3564889023","FR" +"3564889024","3564889087","NL" +"3564889088","3564889119","GB" +"3564889120","3564889167","NL" +"3564889168","3564889215","GB" +"3564889216","3564889311","NL" +"3564889312","3564889375","GB" +"3564889376","3564889615","NL" +"3564889616","3564889623","DE" +"3564889624","3564889639","NL" +"3564889640","3564889647","GB" +"3564889648","3564889695","NL" +"3564889696","3564889727","DE" +"3564889728","3564889791","NL" +"3564889792","3564889807","GB" +"3564889808","3564889839","BE" +"3564889840","3564889847","NL" +"3564889848","3564889855","GB" +"3564889856","3564889919","NL" +"3564889920","3564889983","GB" +"3564889984","3564890111","NL" +"3564890112","3564890143","GB" +"3564890144","3564890151","NL" +"3564890152","3564890159","GB" +"3564890160","3564890183","BE" +"3564890184","3564890191","GB" +"3564890192","3564890207","NL" +"3564890208","3564890231","GB" +"3564890232","3564890271","NL" +"3564890272","3564890303","GB" +"3564890304","3564890367","NL" +"3564890368","3564890399","FR" +"3564890400","3564890527","NL" +"3564890528","3564890535","BE" +"3564890536","3564890579","NL" +"3564890580","3564890591","GB" +"3564890592","3564890623","NL" +"3564890624","3564890639","BE" +"3564890640","3564890655","NL" +"3564890656","3564890663","IE" +"3564890664","3564890703","NL" +"3564890704","3564890735","GB" +"3564890736","3564890783","NL" +"3564890784","3564890799","GB" +"3564890800","3564890831","NL" +"3564890832","3564890847","BE" +"3564890848","3564890863","GB" +"3564890864","3564890879","BE" +"3564890880","3564890943","NL" +"3564890944","3564890991","BE" +"3564890992","3564891023","NL" +"3564891024","3564891391","GB" +"3564891392","3564891903","NL" +"3564891904","3564892415","GB" +"3564892416","3564892543","NL" +"3564892544","3564892575","GB" +"3564892576","3564892711","NL" +"3564892712","3564892735","GB" +"3564892736","3564892751","NL" +"3564892752","3564892767","GB" +"3564892768","3564892799","NL" +"3564892800","3564893039","GB" +"3564893040","3564893055","NL" +"3564893056","3564893375","GB" +"3564893376","3564893759","NL" +"3564893760","3564893951","GB" +"3564893952","3564895743","NL" +"3564895744","3564896255","GB" +"3564896256","3564904447","RU" +"3564904448","3564912639","DE" +"3564912640","3564920831","BG" +"3564920832","3564921855","ES" +"3564921856","3564929023","US" +"3564929024","3564937215","AT" +"3564937216","3564945407","RS" +"3564945408","3564947175","GB" +"3564947176","3564947183","FR" +"3564947184","3564948063","GB" +"3564948064","3564948071","IE" +"3564948072","3564948319","GB" +"3564948320","3564948351","IE" +"3564948352","3564953647","GB" +"3564953648","3564953651","CH" +"3564953652","3564953727","GB" +"3564953728","3564953743","AT" +"3564953744","3564953744","GB" +"3564953745","3564953759","AT" +"3564953760","3564953791","GB" +"3564953792","3564953919","AT" +"3564953920","3564954111","GB" +"3564954112","3564954131","AT" +"3564954132","3564954139","GB" +"3564954140","3564954143","AT" +"3564954144","3564954155","GB" +"3564954156","3564954159","AT" +"3564954160","3564954175","DE" +"3564954176","3564954183","AT" +"3564954184","3564954191","CH" +"3564954192","3564954211","AT" +"3564954212","3564954231","GB" +"3564954232","3564954239","AT" +"3564954240","3564954303","GB" +"3564954304","3564954311","AT" +"3564954312","3564954367","GB" +"3564954368","3564954383","AT" +"3564954384","3564954415","GB" +"3564954416","3564954431","DE" +"3564954432","3564956160","GB" +"3564956161","3564956671","AT" +"3564956672","3564956687","GB" +"3564956688","3564956719","AT" +"3564956720","3564956735","GB" +"3564956736","3564956751","AT" +"3564956752","3564956767","US" +"3564956768","3564956831","AT" +"3564956832","3564956839","GB" +"3564956840","3564956855","AT" +"3564956856","3564956903","GB" +"3564956904","3564956907","AT" +"3564956908","3564956911","CH" +"3564956912","3564956927","AT" +"3564956928","3564956967","GB" +"3564956968","3564956971","CH" +"3564956972","3564956975","US" +"3564956976","3564956979","GB" +"3564956980","3564956991","AT" +"3564956992","3564956999","GB" +"3564957000","3564957007","AT" +"3564957008","3564957023","GB" +"3564957024","3564957039","AT" +"3564957040","3564957087","GB" +"3564957088","3564957255","AT" +"3564957256","3564957263","GB" +"3564957264","3564957439","AT" +"3564957440","3564957447","GB" +"3564957448","3564957455","CH" +"3564957456","3564957459","AT" +"3564957460","3564957471","GB" +"3564957472","3564957499","AT" +"3564957500","3564957503","GB" +"3564957504","3564957507","AT" +"3564957508","3564957511","GB" +"3564957512","3564957519","AT" +"3564957520","3564957527","GB" +"3564957528","3564957531","AT" +"3564957532","3564957547","GB" +"3564957548","3564957551","AT" +"3564957552","3564957559","GB" +"3564957560","3564957591","AT" +"3564957592","3564957595","GB" +"3564957596","3564957599","AT" +"3564957600","3564957607","GB" +"3564957608","3564957615","AT" +"3564957616","3564957619","GB" +"3564957620","3564957631","AT" +"3564957632","3564957663","GB" +"3564957664","3564957671","AT" +"3564957672","3564957679","GB" +"3564957680","3564957695","AT" +"3564957696","3564957855","GB" +"3564957856","3564957859","ES" +"3564957860","3564957863","AT" +"3564957864","3564957867","IT" +"3564957868","3564957871","AT" +"3564957872","3564957891","GB" +"3564957892","3564957903","AT" +"3564957904","3564957911","GB" +"3564957912","3564957919","AT" +"3564957920","3564957951","GB" +"3564957952","3564957967","AT" +"3564957968","3564957987","GB" +"3564957988","3564958015","AT" +"3564958016","3564958111","GB" +"3564958112","3564958143","AT" +"3564958144","3564958147","GB" +"3564958148","3564958155","AT" +"3564958156","3564958159","GB" +"3564958160","3564958179","AT" +"3564958180","3564958183","US" +"3564958184","3564958191","AT" +"3564958192","3564958207","GB" +"3564958208","3564958463","AT" +"3564958464","3564958487","GB" +"3564958488","3564958591","AT" +"3564958592","3564958719","GB" +"3564958720","3564958799","AT" +"3564958800","3564958807","GB" +"3564958808","3564958847","AT" +"3564958848","3564958911","GB" +"3564958912","3564958975","AT" +"3564958976","3564959007","NL" +"3564959008","3564959055","AT" +"3564959056","3564959075","GB" +"3564959076","3564959091","AT" +"3564959092","3564959095","GB" +"3564959096","3564959103","AT" +"3564959104","3564959119","GB" +"3564959120","3564959127","AT" +"3564959128","3564959135","GB" +"3564959136","3564959155","AT" +"3564959156","3564959191","GB" +"3564959192","3564959195","AT" +"3564959196","3564959199","GB" +"3564959200","3564959227","AT" +"3564959228","3564959231","GB" +"3564959232","3564959359","AT" +"3564959360","3564959383","GB" +"3564959384","3564959391","AT" +"3564959392","3564959399","SA" +"3564959400","3564959407","AT" +"3564959408","3564959423","CH" +"3564959424","3564959443","GB" +"3564959444","3564959451","AT" +"3564959452","3564959455","FR" +"3564959456","3564959471","GB" +"3564959472","3564959479","AT" +"3564959480","3564959487","GB" +"3564959488","3564959495","AT" +"3564959496","3564959499","GB" +"3564959500","3564959519","AT" +"3564959520","3564959535","GB" +"3564959536","3564959551","AT" +"3564959552","3564959567","GB" +"3564959568","3564959579","AT" +"3564959580","3564959583","GB" +"3564959584","3564959615","AT" +"3564959616","3564959623","GB" +"3564959624","3564959639","AT" +"3564959640","3564959655","GB" +"3564959656","3564959663","CH" +"3564959664","3564959679","AT" +"3564959680","3564959695","GB" +"3564959696","3564959711","AT" +"3564959712","3564959755","GB" +"3564959756","3564959759","AT" +"3564959760","3564959775","GB" +"3564959776","3564959807","AT" +"3564959808","3564959839","GB" +"3564959840","3564959903","AT" +"3564959904","3564959904","GB" +"3564959905","3564959967","AT" +"3564959968","3564959999","GB" +"3564960000","3564960127","AT" +"3564960128","3564960135","DE" +"3564960136","3564960159","GB" +"3564960160","3564960195","AT" +"3564960196","3564960211","GB" +"3564960212","3564960223","AT" +"3564960224","3564960231","GB" +"3564960232","3564960511","AT" +"3564960512","3564960543","GB" +"3564960544","3564960559","AT" +"3564960560","3564960615","GB" +"3564960616","3564960623","FR" +"3564960624","3564960631","GB" +"3564960632","3564960639","AT" +"3564960640","3564960767","GB" +"3564960768","3564960879","AT" +"3564960880","3564960927","GB" +"3564960928","3564960959","AT" +"3564960960","3564960991","GB" +"3564960992","3564961007","AT" +"3564961008","3564961023","GB" +"3564961024","3564961079","AT" +"3564961080","3564961151","GB" +"3564961152","3564961311","AT" +"3564961312","3564961319","GB" +"3564961320","3564961791","AT" +"3564961792","3564969983","TR" +"3564969984","3564972607","DE" +"3564972608","3564972623","AT" +"3564972624","3564972631","DE" +"3564972632","3564972639","LI" +"3564972640","3564978175","DE" +"3564978176","3564986367","GB" +"3564986368","3564994559","DE" +"3564994560","3565002751","NL" +"3565002752","3565007247","NO" +"3565007248","3565007251","SE" +"3565007252","3565012663","NO" +"3565012664","3565012667","SE" +"3565012668","3565027327","NO" +"3565027328","3565035519","PL" +"3565035520","3565036287","IE" +"3565036288","3565036543","GB" +"3565036544","3565037119","IE" +"3565037120","3565037135","GB" +"3565037136","3565037311","IE" +"3565037312","3565037567","GB" +"3565037568","3565037823","IE" +"3565037824","3565038591","GB" +"3565038592","3565038663","IE" +"3565038664","3565038687","GB" +"3565038688","3565038719","IE" +"3565038720","3565038727","GB" +"3565038728","3565038859","IE" +"3565038860","3565038863","GB" +"3565038864","3565038943","IE" +"3565038944","3565039615","GB" +"3565039616","3565042191","IE" +"3565042192","3565043711","GB" +"3565043712","3565045263","AT" +"3565045264","3565045279","SK" +"3565045280","3565047807","AT" +"3565047808","3565048063","LI" +"3565048064","3565051903","AT" +"3565051904","3565060095","IQ" +"3565060096","3565068287","GB" +"3565068288","3565076479","CH" +"3565076480","3565084671","DE" +"3565084672","3565092863","IS" +"3565092864","3565096759","GB" +"3565096760","3565096767","IE" +"3565096768","3565097151","GB" +"3565097152","3565097167","TZ" +"3565097168","3565101055","GB" +"3565101056","3565109247","DE" +"3565109248","3565117439","PL" +"3565117440","3565125631","TR" +"3565125632","3565158399","NL" +"3565158400","3565223935","ES" +"3565223936","3565240319","FR" +"3565240320","3565248511","IE" +"3565248512","3565256703","RU" +"3565256704","3565289471","NL" +"3565289472","3565355007","DK" +"3565355008","3565420543","IT" +"3565420544","3565486079","GB" +"3565486080","3565486335","IE" +"3565486336","3565486975","FR" +"3565486976","3565487615","NL" +"3565487616","3565487871","SE" +"3565487872","3565488127","SK" +"3565488128","3565488383","GB" +"3565488384","3565488639","ES" +"3565488640","3565488895","GB" +"3565488896","3565489535","DE" +"3565489536","3565489791","GB" +"3565489792","3565489823","DE" +"3565489824","3565490175","GB" +"3565490176","3565490431","NL" +"3565490432","3565491199","GB" +"3565491200","3565491215","FR" +"3565491216","3565491455","GB" +"3565491456","3565491711","IT" +"3565491712","3565491839","GB" +"3565491840","3565491903","IT" +"3565491904","3565491967","NL" +"3565491968","3565492295","GB" +"3565492296","3565492303","IE" +"3565492304","3565492319","GB" +"3565492320","3565492327","DE" +"3565492328","3565492335","GB" +"3565492336","3565492351","FR" +"3565492352","3565492479","GB" +"3565492480","3565492607","NL" +"3565492608","3565492639","GB" +"3565492640","3565492655","FR" +"3565492656","3565492671","GB" +"3565492672","3565492735","IT" +"3565492736","3565492991","CH" +"3565492992","3565493247","NL" +"3565493248","3565493583","GB" +"3565493584","3565493591","DE" +"3565493592","3565493679","GB" +"3565493680","3565493687","FR" +"3565493688","3565493759","GB" +"3565493760","3565493775","NL" +"3565493776","3565493983","GB" +"3565493984","3565494055","DE" +"3565494056","3565494063","GB" +"3565494064","3565494079","NL" +"3565494080","3565494143","GB" +"3565494144","3565494271","DE" +"3565494272","3565494527","IS" +"3565494528","3565494543","GB" +"3565494544","3565494551","IT" +"3565494552","3565494559","DE" +"3565494560","3565494591","GB" +"3565494592","3565494655","FR" +"3565494656","3565494671","SE" +"3565494672","3565494687","DE" +"3565494688","3565494703","SE" +"3565494704","3565494719","DK" +"3565494720","3565494735","GB" +"3565494736","3565494743","CA" +"3565494744","3565495295","GB" +"3565495296","3565496447","FR" +"3565496448","3565496511","DE" +"3565496512","3565496575","US" +"3565496576","3565496831","GB" +"3565496832","3565497087","IT" +"3565497088","3565497103","GB" +"3565497104","3565497119","IE" +"3565497120","3565497151","DE" +"3565497152","3565497159","IE" +"3565497160","3565497167","US" +"3565497168","3565497199","GB" +"3565497200","3565497207","IT" +"3565497208","3565497215","GB" +"3565497216","3565497279","CZ" +"3565497280","3565497287","NL" +"3565497288","3565497343","GB" +"3565497344","3565497599","US" +"3565497600","3565497871","GB" +"3565497872","3565497887","DE" +"3565497888","3565497903","GB" +"3565497904","3565497911","IE" +"3565497912","3565497919","DE" +"3565497920","3565497927","PR" +"3565497928","3565497951","GB" +"3565497952","3565497967","US" +"3565497968","3565498111","GB" +"3565498112","3565498367","NL" +"3565498368","3565498431","FR" +"3565498432","3565498479","US" +"3565498480","3565498519","GB" +"3565498520","3565498527","ZA" +"3565498528","3565499815","GB" +"3565499816","3565499823","FR" +"3565499824","3565500479","GB" +"3565500480","3565500543","DE" +"3565500544","3565500567","GB" +"3565500568","3565500575","IE" +"3565500576","3565500591","GB" +"3565500592","3565500599","DE" +"3565500600","3565500607","GB" +"3565500608","3565500623","FR" +"3565500624","3565501095","GB" +"3565501096","3565501103","FR" +"3565501104","3565501119","FI" +"3565501120","3565501231","GB" +"3565501232","3565501247","DE" +"3565501248","3565501311","GB" +"3565501312","3565501439","DE" +"3565501440","3565501679","GB" +"3565501680","3565501695","IE" +"3565501696","3565502207","GB" +"3565502208","3565502239","IT" +"3565502240","3565502463","GB" +"3565502464","3565503487","NL" +"3565503488","3565503999","GB" +"3565504000","3565504511","NL" +"3565504512","3565510655","GB" +"3565510656","3565511679","NL" +"3565511680","3565512191","CH" +"3565512192","3565512703","DE" +"3565512704","3565512767","GB" +"3565512768","3565512959","DE" +"3565512960","3565514111","GB" +"3565514112","3565514239","DE" +"3565514240","3565514495","DK" +"3565514496","3565518847","GB" +"3565518848","3565551615","TR" +"3565551616","3565578495","GB" +"3565578496","3565578751","CA" +"3565578752","3565641487","GB" +"3565641488","3565641503","DE" +"3565641504","3565682687","GB" +"3565682688","3565688063","NL" +"3565688064","3565688319","GB" +"3565688320","3565748223","NL" +"3565748224","3565752839","GB" +"3565752840","3565752855","EU" +"3565752856","3565752879","GB" +"3565752880","3565752887","EU" +"3565752888","3565752983","GB" +"3565752984","3565752991","EU" +"3565752992","3565752999","GB" +"3565753000","3565753015","EU" +"3565753016","3565753031","GB" +"3565753032","3565753039","EU" +"3565753040","3565753071","GB" +"3565753072","3565753079","EU" +"3565753080","3565753183","GB" +"3565753184","3565753247","EU" +"3565753248","3565753279","GB" +"3565753280","3565753343","EU" +"3565753344","3565753791","GB" +"3565753792","3565753799","EU" +"3565753800","3565753815","GB" +"3565753816","3565753823","EU" +"3565753824","3565753831","GB" +"3565753832","3565753839","EU" +"3565753840","3565753847","GB" +"3565753848","3565753983","EU" +"3565753984","3565754367","GB" +"3565754368","3565754495","EU" +"3565754496","3565754511","GB" +"3565754512","3565754623","EU" +"3565754624","3565755263","GB" +"3565755264","3565755279","EU" +"3565755280","3565755359","GB" +"3565755360","3565755375","EU" +"3565755376","3565755583","GB" +"3565755584","3565755647","EU" +"3565755648","3565755695","GB" +"3565755696","3565755703","EU" +"3565755704","3565755727","GB" +"3565755728","3565755735","EU" +"3565755736","3565755831","GB" +"3565755832","3565755839","EU" +"3565755840","3565755847","GB" +"3565755848","3565755855","EU" +"3565755856","3565755871","GB" +"3565755872","3565755879","EU" +"3565755880","3565755919","GB" +"3565755920","3565755927","EU" +"3565755928","3565755935","GB" +"3565755936","3565755943","EU" +"3565755944","3565755959","GB" +"3565755960","3565755967","EU" +"3565755968","3565755999","GB" +"3565756000","3565756007","EU" +"3565756008","3565756063","GB" +"3565756064","3565756071","EU" +"3565756072","3565756087","GB" +"3565756088","3565756095","EU" +"3565756096","3565756119","GB" +"3565756120","3565756135","EU" +"3565756136","3565756159","GB" +"3565756160","3565756287","EU" +"3565756288","3565760783","GB" +"3565760784","3565760791","EU" +"3565760792","3565760799","GB" +"3565760800","3565760807","EU" +"3565760808","3565760823","GB" +"3565760824","3565760831","EU" +"3565760832","3565760855","GB" +"3565760856","3565760863","EU" +"3565760864","3565760935","GB" +"3565760936","3565760943","EU" +"3565760944","3565760967","GB" +"3565760968","3565760975","EU" +"3565760976","3565761007","GB" +"3565761008","3565761015","EU" +"3565761016","3565761279","GB" +"3565761280","3565761343","EU" +"3565761344","3565761535","GB" +"3565761536","3565761543","EU" +"3565761544","3565761599","GB" +"3565761600","3565761615","EU" +"3565761616","3565761631","GB" +"3565761632","3565761639","EU" +"3565761640","3565761647","GB" +"3565761648","3565761655","EU" +"3565761656","3565761687","GB" +"3565761688","3565761703","EU" +"3565761704","3565761727","GB" +"3565761728","3565761751","EU" +"3565761752","3565761783","GB" +"3565761784","3565761791","EU" +"3565761792","3565762047","GB" +"3565762048","3565762303","ZA" +"3565762304","3565762559","EU" +"3565762560","3565762815","GB" +"3565762816","3565763071","EU" +"3565763072","3565763455","GB" +"3565763456","3565763487","EU" +"3565763488","3565763599","GB" +"3565763600","3565763615","EU" +"3565763616","3565763671","GB" +"3565763672","3565763679","EU" +"3565763680","3565763703","GB" +"3565763704","3565763719","EU" +"3565763720","3565763735","GB" +"3565763736","3565763743","EU" +"3565763744","3565763751","GB" +"3565763752","3565763759","EU" +"3565763760","3565763799","GB" +"3565763800","3565763807","EU" +"3565763808","3565763815","GB" +"3565763816","3565763831","EU" +"3565763832","3565763839","GB" +"3565763840","3565763883","EU" +"3565763884","3565763891","GB" +"3565763892","3565764095","EU" +"3565764096","3565764183","GB" +"3565764184","3565764191","EU" +"3565764192","3565764207","GB" +"3565764208","3565764255","EU" +"3565764256","3565764367","GB" +"3565764368","3565764375","EU" +"3565764376","3565764439","GB" +"3565764440","3565764447","EU" +"3565764448","3565764455","GB" +"3565764456","3565764463","EU" +"3565764464","3565764551","GB" +"3565764552","3565764575","EU" +"3565764576","3565766655","GB" +"3565766656","3565766911","EU" +"3565766912","3565767167","GB" +"3565767168","3565767175","EU" +"3565767176","3565767255","GB" +"3565767256","3565767271","EU" +"3565767272","3565767287","GB" +"3565767288","3565767295","EU" +"3565767296","3565767351","GB" +"3565767352","3565767359","EU" +"3565767360","3565767399","GB" +"3565767400","3565767407","EU" +"3565767408","3565767439","GB" +"3565767440","3565767455","EU" +"3565767456","3565767487","GB" +"3565767488","3565767503","EU" +"3565767504","3565767599","GB" +"3565767600","3565767615","EU" +"3565767616","3565767631","GB" +"3565767632","3565767679","EU" +"3565767680","3565767999","GB" +"3565768000","3565768207","EU" +"3565768208","3565768271","GB" +"3565768272","3565768279","EU" +"3565768280","3565768295","GB" +"3565768296","3565768311","EU" +"3565768312","3565768335","GB" +"3565768336","3565768447","EU" +"3565768448","3565768575","GB" +"3565768576","3565768703","EU" +"3565768704","3565768983","GB" +"3565768984","3565769215","EU" +"3565769216","3565769471","GB" +"3565769472","3565777919","EU" +"3565777920","3565813759","GB" +"3565813760","3565879295","SA" +"3565879296","3566010367","GB" +"3566010368","3566075903","IT" +"3566075904","3566092287","NL" +"3566092288","3566108671","LV" +"3566108672","3566141439","ES" +"3566141440","3566206975","IL" +"3566206976","3566272511","DE" +"3566272512","3566338047","ES" +"3566338048","3566354431","FI" +"3566354432","3566370815","RO" +"3566370816","3566403583","TR" +"3566403584","3566436351","CH" +"3566436352","3566438546","IE" +"3566438547","3566438547","EU" +"3566438548","3566439615","IE" +"3566439616","3566439631","GB" +"3566439632","3566469119","IE" +"3566469120","3566534655","GB" +"3566534656","3566551039","DE" +"3566551040","3566574747","FI" +"3566574748","3566574751","SE" +"3566574752","3566600191","FI" +"3566600192","3566607359","IL" +"3566607360","3566607615","GN" +"3566607616","3566647403","IL" +"3566647404","3566647404","A1" +"3566647405","3566665727","IL" +"3566665728","3566723071","SE" +"3566723072","3566723327","RU" +"3566723328","3566739455","SE" +"3566739456","3566747647","RU" +"3566747648","3566764031","GR" +"3566764032","3566796799","AT" +"3566796800","3566816511","NL" +"3566816512","3566816767","US" +"3566816768","3566862335","NL" +"3566862336","3566895103","TR" +"3566895104","3566927871","KZ" +"3566927872","3566976767","FR" +"3566976768","3566977023","EU" +"3566977024","3566993407","FR" +"3566993408","3567058943","TR" +"3567058944","3567103047","FR" +"3567103048","3567103055","IT" +"3567103056","3567124479","FR" +"3567124480","3567124991","EU" +"3567124992","3567125023","GB" +"3567125024","3567125247","EU" +"3567125248","3567125503","GB" +"3567125504","3567126687","EU" +"3567126688","3567126759","GB" +"3567126760","3567127551","EU" +"3567127552","3567127807","GB" +"3567127808","3567129855","EU" +"3567129856","3567129887","GB" +"3567129888","3567130015","EU" +"3567130016","3567130079","GB" +"3567130080","3567131383","EU" +"3567131384","3567131647","GB" +"3567131648","3567133215","EU" +"3567133216","3567133247","GB" +"3567133248","3567133367","EU" +"3567133368","3567133375","GB" +"3567133376","3567134207","EU" +"3567134208","3567134335","GB" +"3567134336","3567134847","EU" +"3567134848","3567134975","GB" +"3567134976","3567135999","EU" +"3567136000","3567136255","GB" +"3567136256","3567136511","EU" +"3567136512","3567136575","GB" +"3567136576","3567136639","EU" +"3567136640","3567136671","GB" +"3567136672","3567136767","EU" +"3567136768","3567136895","GB" +"3567136896","3567137023","EU" +"3567137024","3567137279","GB" +"3567137280","3567137599","EU" +"3567137600","3567137663","GB" +"3567137664","3567137987","EU" +"3567137988","3567137991","GB" +"3567137992","3567137999","EU" +"3567138000","3567138003","GB" +"3567138004","3567138039","EU" +"3567138040","3567138047","GB" +"3567138048","3567140095","EU" +"3567140096","3567140351","GB" +"3567140352","3567140863","EU" +"3567140864","3567140927","GB" +"3567140928","3567141631","EU" +"3567141632","3567141887","GB" +"3567141888","3567142271","EU" +"3567142272","3567142399","GB" +"3567142400","3567143431","EU" +"3567143432","3567143439","GB" +"3567143440","3567143519","EU" +"3567143520","3567143551","GB" +"3567143552","3567143679","EU" +"3567143680","3567143687","GB" +"3567143688","3567143871","EU" +"3567143872","3567143935","GB" +"3567143936","3567143951","EU" +"3567143952","3567143967","GB" +"3567143968","3567144171","EU" +"3567144172","3567144175","GB" +"3567144176","3567144319","EU" +"3567144320","3567144447","GB" +"3567144448","3567144767","EU" +"3567144768","3567144831","GB" +"3567144832","3567147527","EU" +"3567147528","3567147535","GB" +"3567147536","3567147551","EU" +"3567147552","3567147559","GB" +"3567147560","3567148519","EU" +"3567148520","3567148527","GB" +"3567148528","3567148799","EU" +"3567148800","3567149055","GB" +"3567149056","3567149087","EU" +"3567149088","3567149119","GB" +"3567149120","3567149903","EU" +"3567149904","3567149911","GB" +"3567149912","3567149919","EU" +"3567149920","3567149935","GB" +"3567149936","3567151135","EU" +"3567151136","3567151199","GB" +"3567151200","3567151231","EU" +"3567151232","3567151263","GB" +"3567151264","3567151999","EU" +"3567152000","3567152127","GB" +"3567152128","3567152159","EU" +"3567152160","3567152191","GB" +"3567152192","3567152255","EU" +"3567152256","3567152383","GB" +"3567152384","3567152391","EU" +"3567152392","3567152407","GB" +"3567152408","3567152639","EU" +"3567152640","3567152647","GB" +"3567152648","3567152663","EU" +"3567152664","3567152671","GB" +"3567152672","3567152743","EU" +"3567152744","3567152751","GB" +"3567152752","3567152831","EU" +"3567152832","3567152863","GB" +"3567152864","3567152959","EU" +"3567152960","3567152991","GB" +"3567152992","3567153023","EU" +"3567153024","3567153055","GB" +"3567153056","3567153599","EU" +"3567153600","3567153607","GB" +"3567153608","3567153615","EU" +"3567153616","3567153623","GB" +"3567153624","3567153647","EU" +"3567153648","3567153663","GB" +"3567153664","3567153687","EU" +"3567153688","3567153703","GB" +"3567153704","3567153719","EU" +"3567153720","3567153727","GB" +"3567153728","3567153823","EU" +"3567153824","3567153847","GB" +"3567153848","3567154303","EU" +"3567154304","3567154367","GB" +"3567154368","3567155199","EU" +"3567155200","3567155967","GB" +"3567155968","3567156415","EU" +"3567156416","3567156607","GB" +"3567156608","3567157247","EU" +"3567157248","3567165439","CZ" +"3567165440","3567169535","RU" +"3567169536","3567173631","MK" +"3567173632","3567239167","GB" +"3567239168","3567241215","NL" +"3567241216","3567241471","EU" +"3567241472","3567255551","NL" +"3567255552","3567321087","PL" +"3567321088","3567323007","GB" +"3567323008","3567323023","CH" +"3567323024","3567323135","GB" +"3567323136","3567323391","IE" +"3567323392","3567324479","GB" +"3567324480","3567324543","ES" +"3567324544","3567324559","GB" +"3567324560","3567324575","ES" +"3567324576","3567324607","GB" +"3567324608","3567324671","ES" +"3567324672","3567325119","GB" +"3567325120","3567325135","ES" +"3567325136","3567329711","GB" +"3567329712","3567329727","IE" +"3567329728","3567331743","GB" +"3567331744","3567331775","IE" +"3567331776","3567350807","GB" +"3567350808","3567350815","US" +"3567350816","3567350839","GB" +"3567350840","3567350847","CH" +"3567350848","3567350935","GB" +"3567350936","3567350943","CH" +"3567350944","3567352479","GB" +"3567352480","3567352487","NL" +"3567352488","3567352511","GB" +"3567352512","3567352519","FR" +"3567352520","3567352759","GB" +"3567352760","3567352767","NL" +"3567352768","3567353855","GB" +"3567353856","3567386623","CH" +"3567386624","3567386671","GB" +"3567386672","3567386687","DE" +"3567386688","3567386751","GB" +"3567386752","3567386815","DE" +"3567386816","3567386879","GB" +"3567386880","3567386883","DE" +"3567386884","3567386975","GB" +"3567386976","3567387007","DE" +"3567387008","3567387071","GB" +"3567387072","3567387391","DE" +"3567387392","3567387439","GB" +"3567387440","3567387455","DE" +"3567387456","3567387487","GB" +"3567387488","3567387539","DE" +"3567387540","3567387543","GB" +"3567387544","3567387547","DE" +"3567387548","3567387583","GB" +"3567387584","3567388031","DE" +"3567388032","3567388159","GB" +"3567388160","3567388399","DE" +"3567388400","3567388415","GB" +"3567388416","3567388607","DE" +"3567388608","3567388639","GB" +"3567388640","3567388647","DE" +"3567388648","3567388671","GB" +"3567388672","3567388927","CZ" +"3567388928","3567389183","DE" +"3567389184","3567389311","GB" +"3567389312","3567389375","DE" +"3567389376","3567389695","GB" +"3567389696","3567390975","DE" +"3567390976","3567391107","GB" +"3567391108","3567391111","DE" +"3567391112","3567391147","GB" +"3567391148","3567391151","DE" +"3567391152","3567391231","GB" +"3567391232","3567391743","DE" +"3567391744","3567391767","PL" +"3567391768","3567391807","GB" +"3567391808","3567391839","DE" +"3567391840","3567392767","GB" +"3567392768","3567393023","DE" +"3567393024","3567393279","FR" +"3567393280","3567393535","HU" +"3567393536","3567393791","GB" +"3567393792","3567394047","SI" +"3567394048","3567394175","HR" +"3567394176","3567394975","GB" +"3567394976","3567395007","DE" +"3567395008","3567395071","GB" +"3567395072","3567395327","DE" +"3567395328","3567396863","GB" +"3567396864","3567397119","DE" +"3567397120","3567397375","GB" +"3567397376","3567397503","ES" +"3567397504","3567397887","GB" +"3567397888","3567398143","DE" +"3567398144","3567398191","RO" +"3567398192","3567398199","DE" +"3567398200","3567398399","RO" +"3567398400","3567398655","GB" +"3567398656","3567398911","DE" +"3567398912","3567398991","GB" +"3567398992","3567399031","DE" +"3567399032","3567399039","GB" +"3567399040","3567399047","DE" +"3567399048","3567399071","GB" +"3567399072","3567399135","DE" +"3567399136","3567399167","GB" +"3567399168","3567399295","DE" +"3567399296","3567399359","GB" +"3567399360","3567399391","DE" +"3567399392","3567399423","GB" +"3567399424","3567399439","DE" +"3567399440","3567399487","GB" +"3567399488","3567399647","DE" +"3567399648","3567399679","GB" +"3567399680","3567399807","DE" +"3567399808","3567399935","GB" +"3567399936","3567401471","DE" +"3567401472","3567401503","GB" +"3567401504","3567401519","DE" +"3567401520","3567401543","GB" +"3567401544","3567401551","DE" +"3567401552","3567401727","GB" +"3567401728","3567402239","DE" +"3567402240","3567402495","GB" +"3567402496","3567403007","DE" +"3567403008","3567419391","IT" +"3567419392","3567427583","SA" +"3567427584","3567435775","SE" +"3567435776","3567441375","GB" +"3567441376","3567441407","NL" +"3567441408","3567444223","GB" +"3567444224","3567444479","TZ" +"3567444480","3567445951","GB" +"3567445952","3567445983","NL" +"3567445984","3567452159","GB" +"3567452160","3567463135","ES" +"3567463136","3567463151","IT" +"3567463152","3567507455","ES" +"3567507456","3567509503","NL" +"3567509504","3567512575","ES" +"3567512576","3567513599","NL" +"3567513600","3567517695","ES" +"3567517696","3567583231","RU" +"3567583232","3567583487","AT" +"3567583488","3567583743","EU" +"3567583744","3567583871","AT" +"3567583872","3567583935","EU" +"3567583936","3567583999","AT" +"3567584000","3567584255","EU" +"3567584256","3567584383","AT" +"3567584384","3567584399","EU" +"3567584400","3567584407","AT" +"3567584408","3567584511","EU" +"3567584512","3567584639","AT" +"3567584640","3567585791","EU" +"3567585792","3567586303","GB" +"3567586304","3567587327","EU" +"3567587328","3567591423","GB" +"3567591424","3567599615","IT" +"3567599616","3567615999","NL" +"3567616000","3567616255","CG" +"3567616256","3567616263","CD" +"3567616264","3567616351","A2" +"3567616352","3567616383","GQ" +"3567616384","3567616525","A2" +"3567616526","3567616526","KE" +"3567616527","3567616527","A2" +"3567616528","3567616535","GB" +"3567616536","3567616575","A2" +"3567616576","3567616583","GB" +"3567616584","3567616767","A2" +"3567616768","3567617023","US" +"3567617024","3567617087","A2" +"3567617088","3567617119","NG" +"3567617120","3567617151","A2" +"3567617152","3567617279","NG" +"3567617280","3567617535","IN" +"3567617536","3567617791","A2" +"3567617792","3567618047","CD" +"3567618048","3567619071","IN" +"3567619072","3567619075","NG" +"3567619076","3567619087","A2" +"3567619088","3567619095","NG" +"3567619096","3567619103","A2" +"3567619104","3567619111","KE" +"3567619112","3567619135","A2" +"3567619136","3567619839","NG" +"3567619840","3567620095","TZ" +"3567620096","3567620351","IN" +"3567620352","3567620479","TZ" +"3567620480","3567620623","A2" +"3567620624","3567620631","PK" +"3567620632","3567620639","IN" +"3567620640","3567620679","PK" +"3567620680","3567620695","A2" +"3567620696","3567620719","PK" +"3567620720","3567620727","A2" +"3567620728","3567620735","IN" +"3567620736","3567620863","A2" +"3567620864","3567620927","NG" +"3567620928","3567620931","A2" +"3567620932","3567620935","TZ" +"3567620936","3567620959","KE" +"3567620960","3567620991","A2" +"3567620992","3567621055","NG" +"3567621056","3567621119","KE" +"3567621120","3567621263","GB" +"3567621264","3567621279","CG" +"3567621280","3567621375","GB" +"3567621376","3567621391","A2" +"3567621392","3567621399","CG" +"3567621400","3567621407","A2" +"3567621408","3567621423","CG" +"3567621424","3567621631","A2" +"3567621632","3567621887","ID" +"3567621888","3567621895","TZ" +"3567621896","3567621903","KE" +"3567621904","3567621911","NG" +"3567621912","3567621919","TZ" +"3567621920","3567621951","NG" +"3567621952","3567622655","A2" +"3567622656","3567622927","KE" +"3567622928","3567622943","A2" +"3567622944","3567622951","KE" +"3567622952","3567622959","A2" +"3567622960","3567622963","TZ" +"3567622964","3567622967","NG" +"3567622968","3567622975","A2" +"3567622976","3567623039","TZ" +"3567623040","3567623055","GA" +"3567623056","3567623071","NG" +"3567623072","3567623087","TZ" +"3567623088","3567623095","A2" +"3567623096","3567623103","GA" +"3567623104","3567623135","TZ" +"3567623136","3567623143","A2" +"3567623144","3567623151","TZ" +"3567623152","3567623167","A2" +"3567623168","3567623423","KE" +"3567623424","3567623471","A2" +"3567623472","3567623479","KE" +"3567623480","3567623727","A2" +"3567623728","3567623759","PK" +"3567623760","3567623767","A2" +"3567623768","3567623775","PK" +"3567623776","3567623791","A2" +"3567623792","3567623839","PK" +"3567623840","3567623935","A2" +"3567623936","3567624191","PK" +"3567624192","3567624447","GB" +"3567624448","3567625727","TZ" +"3567625728","3567625983","CG" +"3567625984","3567626239","KE" +"3567626240","3567626751","TZ" +"3567626752","3567627008","NG" +"3567627009","3567629311","A2" +"3567629312","3567630207","TJ" +"3567630208","3567635711","A2" +"3567635712","3567635839","CG" +"3567635840","3567635967","CD" +"3567635968","3567641087","A2" +"3567641088","3567641343","US" +"3567641344","3567647487","A2" +"3567647488","3567648767","GB" +"3567648768","3567665151","BE" +"3567665152","3567673343","ES" +"3567673344","3567673647","AT" +"3567673648","3567673655","GI" +"3567673656","3567681535","AT" +"3567681536","3567714303","ES" +"3567714304","3567715327","GB" +"3567715328","3567715583","EU" +"3567715584","3567715839","GB" +"3567715840","3567716351","EU" +"3567716352","3567716383","GB" +"3567716384","3567716607","EU" +"3567716608","3567716639","IL" +"3567716640","3567716943","EU" +"3567716944","3567717119","GB" +"3567717120","3567717375","DE" +"3567717376","3567717631","GB" +"3567717632","3567717679","DE" +"3567717680","3567717759","EU" +"3567717760","3567717887","DE" +"3567717888","3567718015","GB" +"3567718016","3567718143","EU" +"3567718144","3567718399","CH" +"3567718400","3567719423","US" +"3567719424","3567719679","GB" +"3567719680","3567779839","EU" +"3567779840","3567845375","DE" +"3567845376","3567861759","GB" +"3567861760","3567878143","NO" +"3567878144","3567976447","ES" +"3567976448","3568041983","IT" +"3568041984","3568107519","DE" +"3568107520","3568153759","GB" +"3568153760","3568153767","CH" +"3568153768","3568173055","GB" +"3568173056","3568233471","TR" +"3568233472","3568234495","US" +"3568234496","3568295935","TR" +"3568295936","3568296191","US" +"3568296192","3568304127","TR" +"3568304128","3568309775","RU" +"3568309776","3568309791","UZ" +"3568309792","3568309919","BY" +"3568309920","3568309951","RU" +"3568309952","3568310015","BY" +"3568310016","3568369663","RU" +"3568369664","3568435199","IT" +"3568435200","3568443391","UA" +"3568443392","3568476159","NL" +"3568476160","3568484351","DK" +"3568484352","3568486655","NL" +"3568486656","3568486911","EU" +"3568486912","3568492543","NL" +"3568492544","3568500735","RS" +"3568500736","3568513535","IL" +"3568513536","3568513791","US" +"3568513792","3568566271","IL" +"3568566272","3568574967","FR" +"3568574968","3568574975","A2" +"3568574976","3568577151","FR" +"3568577152","3568577167","A2" +"3568577168","3568577231","FR" +"3568577232","3568577239","A2" +"3568577240","3568583783","FR" +"3568583784","3568583791","A2" +"3568583792","3568585471","FR" +"3568585472","3568585727","EU" +"3568585728","3568595079","FR" +"3568595080","3568595087","A2" +"3568595088","3568599039","FR" +"3568599040","3568631807","PL" +"3568631808","3568697343","SE" +"3568697344","3568730111","PL" +"3568730112","3568746495","NL" +"3568746496","3568762879","FI" +"3568762880","3568795647","AT" +"3568795648","3568803839","GB" +"3568803840","3568812031","IT" +"3568812032","3568828415","ES" +"3568828416","3568829631","DE" +"3568829632","3568829639","CH" +"3568829640","3568848791","DE" +"3568848792","3568848799","PL" +"3568848800","3568848871","DE" +"3568848872","3568848879","GB" +"3568848880","3568904191","DE" +"3568904192","3568904447","EU" +"3568904448","3568915791","DE" +"3568915792","3568915807","LU" +"3568915808","3568938311","DE" +"3568938312","3568938319","FI" +"3568938320","3568939519","DE" +"3568939520","3568939527","IT" +"3568939528","3568943199","DE" +"3568943200","3568943207","A2" +"3568943208","3568959487","DE" +"3568959488","3569025023","AT" +"3569025024","3569057791","NL" +"3569057792","3569060863","GB" +"3569060864","3569060879","IE" +"3569060880","3569068543","GB" +"3569068544","3569068671","BG" +"3569068672","3569068951","GB" +"3569068952","3569068991","DE" +"3569068992","3569074687","GB" +"3569074688","3569074943","IE" +"3569074944","3569075455","GB" +"3569075456","3569075711","IE" +"3569075712","3569075839","FR" +"3569075840","3569083903","GB" +"3569083904","3569084159","US" +"3569084160","3569090559","GB" +"3569090560","3569123327","RU" +"3569123328","3569156095","GB" +"3569156096","3569156351","NL" +"3569156352","3569156607","EU" +"3569156608","3569165311","NL" +"3569165312","3569165567","EU" +"3569165568","3569167871","NL" +"3569167872","3569168127","EU" +"3569168128","3569188863","NL" +"3569188864","3569221631","IT" +"3569221632","3569238399","BE" +"3569238400","3569238527","AT" +"3569238528","3569239071","BE" +"3569239072","3569239103","LU" +"3569239104","3569239519","BE" +"3569239520","3569239551","LU" +"3569239552","3569239983","BE" +"3569239984","3569239999","BN" +"3569240000","3569240031","BE" +"3569240032","3569240063","FR" +"3569240064","3569241583","BE" +"3569241584","3569241599","LU" +"3569241600","3569241887","BE" +"3569241888","3569241903","LU" +"3569241904","3569241907","BE" +"3569241908","3569241911","LU" +"3569241912","3569242047","BE" +"3569242048","3569242111","LU" +"3569242112","3569243903","BE" +"3569243904","3569244031","NL" +"3569244032","3569244303","BE" +"3569244304","3569244319","LU" +"3569244320","3569245695","BE" +"3569245696","3569245727","LU" +"3569245728","3569250879","BE" +"3569250880","3569250895","LU" +"3569250896","3569251071","BE" +"3569251072","3569251327","LU" +"3569251328","3569251839","US" +"3569251840","3569252991","BE" +"3569252992","3569253007","LU" +"3569253008","3569253095","BE" +"3569253096","3569253103","LU" +"3569253104","3569255007","BE" +"3569255008","3569255039","LU" +"3569255040","3569255071","BE" +"3569255072","3569255103","LU" +"3569255104","3569258975","BE" +"3569258976","3569259007","LU" +"3569259008","3569271911","BE" +"3569271912","3569271919","DE" +"3569271920","3569271935","BE" +"3569271936","3569271943","IT" +"3569271944","3569273167","BE" +"3569273168","3569273183","LU" +"3569273184","3569273791","BE" +"3569273792","3569273823","LU" +"3569273824","3569274303","BE" +"3569274304","3569274311","LU" +"3569274312","3569274367","BE" +"3569274368","3569274383","LU" +"3569274384","3569274495","BE" +"3569274496","3569274559","LU" +"3569274560","3569274687","BE" +"3569274688","3569274719","LU" +"3569274720","3569277183","BE" +"3569277184","3569277439","LU" +"3569277440","3569278703","BE" +"3569278704","3569278719","NL" +"3569278720","3569278879","BE" +"3569278880","3569278911","LU" +"3569278912","3569279039","BE" +"3569279040","3569279071","LU" +"3569279072","3569279223","BE" +"3569279224","3569279231","US" +"3569279232","3569279263","LU" +"3569279264","3569279279","US" +"3569279280","3569287167","BE" +"3569287168","3569352703","PL" +"3569352704","3569483775","RU" +"3569483776","3569614847","FR" +"3569614848","3569680383","GB" +"3569680384","3569683711","SK" +"3569683712","3569683719","IQ" +"3569683720","3569710959","SK" +"3569710960","3569710975","NL" +"3569710976","3569713151","SK" +"3569713152","3569729535","AT" +"3569729536","3569731167","FR" +"3569731168","3569731183","IT" +"3569731184","3569731215","GB" +"3569731216","3569731231","FR" +"3569731232","3569731247","DE" +"3569731248","3569731263","GB" +"3569731264","3569731311","FR" +"3569731312","3569731327","GB" +"3569731328","3569731375","FR" +"3569731376","3569731391","GB" +"3569731392","3569731423","FR" +"3569731424","3569731439","GB" +"3569731440","3569731455","FR" +"3569731456","3569731471","GB" +"3569731472","3569731487","FR" +"3569731488","3569731503","GB" +"3569731504","3569731519","IT" +"3569731520","3569731551","GB" +"3569731552","3569731583","FR" +"3569731584","3569731599","GB" +"3569731600","3569731615","FR" +"3569731616","3569731631","DE" +"3569731632","3569731647","IT" +"3569731648","3569731727","FR" +"3569731728","3569731743","GB" +"3569731744","3569731791","FR" +"3569731792","3569731807","GB" +"3569731808","3569731839","FR" +"3569731840","3569731871","GB" +"3569731872","3569731903","FR" +"3569731904","3569731919","BE" +"3569731920","3569731951","FR" +"3569731952","3569731967","NL" +"3569731968","3569731983","GB" +"3569731984","3569732031","FR" +"3569732032","3569732047","DE" +"3569732048","3569732063","GB" +"3569732064","3569732079","FR" +"3569732080","3569732095","GB" +"3569732096","3569732143","FR" +"3569732144","3569732191","GB" +"3569732192","3569732207","DE" +"3569732208","3569732287","FR" +"3569732288","3569732303","GB" +"3569732304","3569732319","DE" +"3569732320","3569732335","FR" +"3569732336","3569732351","GB" +"3569732352","3569732383","FR" +"3569732384","3569732399","US" +"3569732400","3569732447","FR" +"3569732448","3569732479","US" +"3569732480","3569732495","GB" +"3569732496","3569732543","FR" +"3569732544","3569732575","GB" +"3569732576","3569732607","FR" +"3569732608","3569732639","GB" +"3569732640","3569732671","FR" +"3569732672","3569732703","GB" +"3569732704","3569732719","FR" +"3569732720","3569732735","GB" +"3569732736","3569732751","FR" +"3569732752","3569732767","GB" +"3569732768","3569732783","FR" +"3569732784","3569732847","GB" +"3569732848","3569732863","FR" +"3569732864","3569732879","GB" +"3569732880","3569732895","FR" +"3569732896","3569732911","IT" +"3569732912","3569733007","FR" +"3569733008","3569733023","IE" +"3569733024","3569733055","FR" +"3569733056","3569733087","GB" +"3569733088","3569733103","IT" +"3569733104","3569733183","FR" +"3569733184","3569733199","GB" +"3569733200","3569733263","FR" +"3569733264","3569733279","US" +"3569733280","3569733295","DE" +"3569733296","3569733311","GB" +"3569733312","3569733327","FR" +"3569733328","3569733343","GB" +"3569733344","3569733423","FR" +"3569733424","3569733439","GB" +"3569733440","3569733471","FR" +"3569733472","3569733487","GB" +"3569733488","3569733519","FR" +"3569733520","3569733535","GB" +"3569733536","3569733551","NL" +"3569733552","3569733567","FR" +"3569733568","3569733583","GB" +"3569733584","3569733599","FR" +"3569733600","3569733615","GB" +"3569733616","3569733647","FR" +"3569733648","3569733663","GB" +"3569733664","3569733679","FR" +"3569733680","3569733695","GB" +"3569733696","3569733775","FR" +"3569733776","3569733791","IE" +"3569733792","3569733807","FR" +"3569733808","3569733823","GB" +"3569733824","3569733887","FR" +"3569733888","3569733919","GB" +"3569733920","3569733935","FR" +"3569733936","3569733951","GB" +"3569733952","3569733967","FR" +"3569733968","3569733983","ES" +"3569733984","3569733999","GB" +"3569734000","3569734047","FR" +"3569734048","3569734079","GB" +"3569734080","3569734143","FR" +"3569734144","3569734159","GB" +"3569734160","3569734191","FR" +"3569734192","3569734207","GB" +"3569734208","3569734367","FR" +"3569734368","3569734399","GB" +"3569734400","3569734447","BE" +"3569734448","3569734463","FR" +"3569734464","3569734511","BE" +"3569734512","3569736047","FR" +"3569736048","3569736063","GB" +"3569736064","3569736071","FR" +"3569736072","3569736079","ES" +"3569736080","3569736191","FR" +"3569736192","3569736223","NL" +"3569736224","3569736239","FR" +"3569736240","3569736383","NL" +"3569736384","3569736399","SE" +"3569736400","3569736655","NL" +"3569736656","3569736671","FR" +"3569736672","3569736703","NL" +"3569736704","3569739263","FR" +"3569739264","3569739295","NL" +"3569739296","3569739327","FR" +"3569739328","3569739471","NL" +"3569739472","3569739487","FR" +"3569739488","3569739599","NL" +"3569739600","3569739631","FR" +"3569739632","3569739647","NL" +"3569739648","3569739663","FR" +"3569739664","3569739679","NL" +"3569739680","3569739695","FR" +"3569739696","3569739839","NL" +"3569739840","3569739855","FR" +"3569739856","3569739903","NL" +"3569739904","3569739919","FR" +"3569739920","3569739935","NL" +"3569739936","3569739951","FR" +"3569739952","3569740047","NL" +"3569740048","3569740063","FR" +"3569740064","3569740111","NL" +"3569740112","3569740127","FR" +"3569740128","3569740255","NL" +"3569740256","3569740271","FR" +"3569740272","3569740303","NL" +"3569740304","3569740319","FR" +"3569740320","3569740367","NL" +"3569740368","3569740383","FR" +"3569740384","3569740415","NL" +"3569740416","3569740431","FR" +"3569740432","3569740463","NL" +"3569740464","3569740479","FR" +"3569740480","3569740495","NL" +"3569740496","3569740511","FR" +"3569740512","3569740543","NL" +"3569740544","3569740559","FR" +"3569740560","3569740655","NL" +"3569740656","3569740671","FR" +"3569740672","3569740687","NL" +"3569740688","3569740703","FR" +"3569740704","3569740799","NL" +"3569740800","3569741311","FR" +"3569741312","3569741823","BE" +"3569741824","3569742335","FR" +"3569742336","3569742351","BE" +"3569742352","3569742383","FR" +"3569742384","3569742399","BE" +"3569742400","3569742415","FR" +"3569742416","3569742511","BE" +"3569742512","3569742527","FR" +"3569742528","3569742623","BE" +"3569742624","3569742639","FR" +"3569742640","3569742671","BE" +"3569742672","3569742687","FR" +"3569742688","3569742735","BE" +"3569742736","3569742751","FR" +"3569742752","3569742767","BE" +"3569742768","3569742783","FR" +"3569742784","3569742927","BE" +"3569742928","3569742943","FR" +"3569742944","3569743087","BE" +"3569743088","3569743103","FR" +"3569743104","3569743135","BE" +"3569743136","3569743199","FR" +"3569743200","3569743215","BE" +"3569743216","3569743359","FR" +"3569743360","3569743391","BE" +"3569743392","3569743407","FR" +"3569743408","3569743423","BE" +"3569743424","3569743455","FR" +"3569743456","3569743583","BE" +"3569743584","3569743599","NL" +"3569743600","3569743615","FR" +"3569743616","3569743631","BE" +"3569743632","3569743647","FR" +"3569743648","3569743679","BE" +"3569743680","3569743711","FR" +"3569743712","3569743775","BE" +"3569743776","3569743791","FR" +"3569743792","3569743871","BE" +"3569743872","3569743983","NL" +"3569743984","3569743999","FR" +"3569744000","3569744047","NL" +"3569744048","3569744063","FR" +"3569744064","3569744127","NL" +"3569744128","3569744143","FR" +"3569744144","3569744543","NL" +"3569744544","3569744559","FR" +"3569744560","3569744575","NL" +"3569744576","3569744623","FR" +"3569744624","3569744815","NL" +"3569744816","3569744831","FR" +"3569744832","3569744911","NL" +"3569744912","3569744927","FR" +"3569744928","3569744975","NL" +"3569744976","3569744991","FR" +"3569744992","3569745007","NL" +"3569745008","3569745023","FR" +"3569745024","3569745039","NL" +"3569745040","3569745055","FR" +"3569745056","3569745103","NL" +"3569745104","3569745119","FR" +"3569745120","3569745167","NL" +"3569745168","3569745183","FR" +"3569745184","3569745215","NL" +"3569745216","3569745231","FR" +"3569745232","3569745247","NL" +"3569745248","3569745279","FR" +"3569745280","3569745311","NL" +"3569745312","3569745327","FR" +"3569745328","3569745359","NL" +"3569745360","3569745375","FR" +"3569745376","3569745407","NL" +"3569745408","3569745663","FR" +"3569745664","3569745727","NL" +"3569745728","3569745743","FR" +"3569745744","3569745813","NL" +"3569745814","3569745823","FR" +"3569745824","3569745839","NL" +"3569745840","3569745871","FR" +"3569745872","3569745887","NL" +"3569745888","3569745903","FR" +"3569745904","3569745919","NL" +"3569745920","3569811455","FR" +"3569811456","3569830463","IL" +"3569830464","3569830527","GB" +"3569830528","3569839187","IL" +"3569839188","3569839191","A2" +"3569839192","3569839359","IL" +"3569839360","3569839475","A2" +"3569839476","3569839479","IL" +"3569839480","3569839608","A2" +"3569839609","3569839610","IL" +"3569839611","3569839615","A2" +"3569839616","3569846527","IL" +"3569846528","3569846783","A2" +"3569846784","3569851935","IL" +"3569851936","3569851951","A2" +"3569851952","3569851967","IL" +"3569851968","3569851999","A2" +"3569852000","3569852031","IL" +"3569852032","3569852047","A2" +"3569852048","3569862143","IL" +"3569862144","3569862159","A2" +"3569862160","3569873279","IL" +"3569873280","3569873407","A2" +"3569873408","3569876991","IL" +"3569876992","3569942527","RS" +"3569942528","3570038463","DE" +"3570038464","3570038464","A2" +"3570038465","3570073599","DE" +"3570073600","3570081791","NL" +"3570081792","3570098687","CH" +"3570098688","3570098943","EU" +"3570098944","3570106367","CH" +"3570106368","3570139135","PL" +"3570139136","3570170079","DE" +"3570170080","3570170111","BE" +"3570170112","3570171655","DE" +"3570171656","3570171663","AU" +"3570171664","3570171903","DE" +"3570171904","3570204671","NL" +"3570204672","3570215679","GR" +"3570215680","3570215807","DE" +"3570215808","3570223103","GR" +"3570223104","3570223231","DE" +"3570223232","3570236159","GR" +"3570236160","3570236415","DE" +"3570236416","3570236927","GR" +"3570236928","3570237183","DE" +"3570237184","3570241791","GR" +"3570241792","3570242047","DE" +"3570242048","3570270207","GR" +"3570270208","3570335743","NL" +"3570335744","3570401279","GB" +"3570401280","3570466815","FR" +"3570466816","3570507439","SE" +"3570507440","3570507455","CH" +"3570507456","3570532351","SE" +"3570532352","3570597887","IT" +"3570597888","3570607103","GB" +"3570607104","3570608127","DE" +"3570608128","3570611199","GB" +"3570611200","3570611455","FR" +"3570611456","3570614271","GB" +"3570614272","3570617343","DE" +"3570617344","3570617855","GB" +"3570617856","3570622463","DE" +"3570622464","3570630655","GB" +"3570630656","3570640383","DE" +"3570640384","3570640415","CH" +"3570640416","3570663423","DE" +"3570663424","3570728959","GB" +"3570728960","3570729983","FI" +"3570729984","3570731007","SE" +"3570731008","3570756191","FI" +"3570756192","3570756223","RU" +"3570756224","3570760543","FI" +"3570760544","3570760575","RU" +"3570760576","3570794495","FI" +"3570794496","3570860031","SE" +"3570860032","3570892799","CH" +"3570892800","3570925567","SA" +"3570925568","3570991103","IT" +"3570991104","3571023871","MA" +"3571023872","3571056639","SE" +"3571056640","3571122175","DE" +"3571122176","3571187711","GB" +"3571187712","3571253247","RU" +"3571253248","3571264607","BE" +"3571264608","3571264639","FR" +"3571264640","3571268607","BE" +"3571268608","3571268639","LU" +"3571268640","3571286015","BE" +"3571286016","3571318783","DE" +"3571318784","3571319807","GB" +"3571319808","3571319935","DE" +"3571319936","3571320855","GB" +"3571320856","3571320863","DE" +"3571320864","3571320943","GB" +"3571320944","3571320959","DE" +"3571320960","3571321599","GB" +"3571321600","3571321727","DE" +"3571321728","3571321823","GB" +"3571321824","3571321855","DE" +"3571321856","3571321983","GB" +"3571321984","3571321999","DE" +"3571322000","3571323967","GB" +"3571323968","3571324031","DE" +"3571324032","3571326207","GB" +"3571326208","3571326215","DE" +"3571326216","3571326231","GB" +"3571326232","3571326247","DE" +"3571326248","3571326983","GB" +"3571326984","3571326991","DE" +"3571326992","3571328511","GB" +"3571328512","3571328543","DE" +"3571328544","3571328863","GB" +"3571328864","3571328879","DE" +"3571328880","3571329215","GB" +"3571329216","3571329247","DE" +"3571329248","3571331647","GB" +"3571331648","3571331679","DE" +"3571331680","3571331839","GB" +"3571331840","3571332351","DE" +"3571332352","3571335807","GB" +"3571335808","3571335935","DE" +"3571335936","3571340415","GB" +"3571340416","3571340447","DE" +"3571340448","3571342079","GB" +"3571342080","3571342335","DE" +"3571342336","3571343391","GB" +"3571343392","3571343455","DE" +"3571343456","3571347455","GB" +"3571347456","3571347711","BE" +"3571347712","3571348387","GB" +"3571348388","3571348391","DE" +"3571348392","3571349087","GB" +"3571349088","3571349119","DE" +"3571349120","3571351551","GB" +"3571351552","3571351807","DE" +"3571351808","3571354463","GB" +"3571354464","3571354495","DE" +"3571354496","3571355071","GB" +"3571355072","3571355135","DE" +"3571355136","3571355391","GB" +"3571355392","3571355903","DE" +"3571355904","3571355999","GB" +"3571356000","3571356031","DE" +"3571356032","3571357183","GB" +"3571357184","3571357695","DE" +"3571357696","3571357871","GB" +"3571357872","3571357919","DE" +"3571357920","3571358239","GB" +"3571358240","3571358255","DE" +"3571358256","3571358999","GB" +"3571359000","3571359007","DE" +"3571359008","3571359011","GB" +"3571359012","3571359015","DE" +"3571359016","3571359143","GB" +"3571359144","3571359151","DE" +"3571359152","3571359191","GB" +"3571359192","3571359199","DE" +"3571359200","3571359303","GB" +"3571359304","3571359311","DE" +"3571359312","3571359407","GB" +"3571359408","3571359415","DE" +"3571359416","3571359447","GB" +"3571359448","3571359455","DE" +"3571359456","3571361279","GB" +"3571361280","3571361407","DE" +"3571361408","3571361471","GB" +"3571361472","3571361535","DE" +"3571361536","3571361999","GB" +"3571362000","3571362015","DE" +"3571362016","3571362815","GB" +"3571362816","3571362879","DE" +"3571362880","3571363583","GB" +"3571363584","3571364095","DE" +"3571364096","3571368623","GB" +"3571368624","3571368639","DE" +"3571368640","3571368703","GB" +"3571368704","3571368959","DE" +"3571368960","3571371327","GB" +"3571371328","3571371359","DE" +"3571371360","3571379343","GB" +"3571379344","3571379351","DE" +"3571379352","3571379359","GB" +"3571379360","3571379367","DE" +"3571379368","3571379375","GB" +"3571379376","3571379391","DE" +"3571379392","3571379535","GB" +"3571379536","3571379559","DE" +"3571379560","3571379887","GB" +"3571379888","3571379895","DE" +"3571379896","3571382623","GB" +"3571382624","3571382655","DE" +"3571382656","3571384319","GB" +"3571384320","3571385151","DE" +"3571385152","3571385183","GB" +"3571385184","3571385631","DE" +"3571385632","3571385663","GB" +"3571385664","3571389503","DE" +"3571389504","3571389519","HU" +"3571389520","3571414015","DE" +"3571414016","3571414271","IE" +"3571414272","3571414783","DE" +"3571414784","3571414799","IE" +"3571414800","3571414943","DE" +"3571414944","3571414959","GB" +"3571414960","3571415039","DE" +"3571415040","3571415295","GB" +"3571415296","3571415311","DE" +"3571415312","3571415327","AT" +"3571415328","3571423743","DE" +"3571423744","3571423999","US" +"3571424000","3571425695","DE" +"3571425696","3571425727","ES" +"3571425728","3571426895","DE" +"3571426896","3571426899","ES" +"3571426900","3571456575","DE" +"3571456576","3571456591","GB" +"3571456592","3571468367","DE" +"3571468368","3571468383","ES" +"3571468384","3571473151","DE" +"3571473152","3571473407","NL" +"3571473408","3571482367","DE" +"3571482368","3571482623","CH" +"3571482624","3571485191","BE" +"3571485192","3571485195","NL" +"3571485196","3571515391","BE" +"3571515392","3571548159","GB" +"3571548160","3571580927","ES" +"3571580928","3571646463","FI" +"3571646464","3571655560","DE" +"3571655561","3571655561","RO" +"3571655562","3571675679","DE" +"3571675680","3571675687","GB" +"3571675688","3571710207","DE" +"3571710208","3571710463","GB" +"3571710464","3571711999","DE" +"3571712000","3571843071","GB" +"3571843072","3571974143","ES" +"3571974144","3571978239","RU" +"3571978240","3571980287","SK" +"3571980288","3571982335","AT" +"3571982336","3572006911","RU" +"3572006912","3572039679","CH" +"3572039680","3572047871","BE" +"3572047872","3572055743","LU" +"3572055744","3572055807","BE" +"3572055808","3572056063","LU" +"3572056064","3572072447","RU" +"3572072448","3572105215","BG" +"3572105216","3572106095","FR" +"3572106096","3572106111","A2" +"3572106112","3572116527","FR" +"3572116528","3572116535","A2" +"3572116536","3572170751","FR" +"3572170752","3572195791","IL" +"3572195792","3572195807","GB" +"3572195808","3572203519","IL" +"3572203520","3572236287","SI" +"3572236288","3572301823","AT" +"3572301824","3572367359","DK" +"3572367360","3572432895","NL" +"3572432896","3572436047","IT" +"3572436048","3572436063","GB" +"3572436064","3572442495","IT" +"3572442496","3572442511","NL" +"3572442512","3572447231","IT" +"3572447232","3572447239","AT" +"3572447240","3572447247","FR" +"3572447248","3572447255","GB" +"3572447256","3572447263","ES" +"3572447264","3572465663","IT" +"3572465664","3572498431","BE" +"3572498432","3572563967","GB" +"3572563968","3572572159","KG" +"3572572160","3572580351","NL" +"3572580352","3572596735","AT" +"3572596736","3572629503","GB" +"3572629504","3572695039","DK" +"3572695040","3572704951","CH" +"3572704952","3572704959","DE" +"3572704960","3572715519","CH" +"3572715520","3572715775","GB" +"3572715776","3572760575","CH" +"3572760576","3572826111","PL" +"3572826112","3572891647","IT" +"3572891648","3572957183","FI" +"3572957184","3573003837","SE" +"3573003838","3573003838","NO" +"3573003839","3573022719","SE" +"3573022720","3573055487","RU" +"3573055488","3573088255","GB" +"3573088256","3573088263","CH" +"3573088264","3573088271","DE" +"3573088272","3573089759","CH" +"3573089760","3573089791","AT" +"3573089792","3573090055","CH" +"3573090056","3573090063","CD" +"3573090064","3573101055","CH" +"3573101056","3573101311","EU" +"3573101312","3573142015","CH" +"3573142016","3573142271","AT" +"3573142272","3573153791","CH" +"3573153792","3573175711","GB" +"3573175712","3573175727","IE" +"3573175728","3573208511","GB" +"3573208512","3573208543","IE" +"3573208544","3573219327","GB" +"3573219328","3573252095","GR" +"3573252096","3573284863","NO" +"3573284864","3573415935","TR" +"3573415936","3573481471","CH" +"3573481472","3573547007","DE" +"3573547008","3573612543","ES" +"3573612544","3573743615","GB" +"3573743616","3573809151","CH" +"3573809152","3573874687","ES" +"3573874688","3573878783","PL" +"3573878784","3573882879","RU" +"3573882880","3573884927","DK" +"3573884928","3573886975","PL" +"3573886976","3573889023","RU" +"3573889024","3573891071","HR" +"3573891072","3573893119","NL" +"3573893120","3573897215","RU" +"3573897216","3573899263","GB" +"3573899264","3573903359","RU" +"3573903360","3573905407","SI" +"3573905408","3573909503","RU" +"3573909504","3573913599","PL" +"3573913600","3573915647","CH" +"3573915648","3573917695","RU" +"3573917696","3573919743","SA" +"3573919744","3573921791","GB" +"3573921792","3573923839","RU" +"3573923840","3573925887","UA" +"3573925888","3573929983","PL" +"3573929984","3573938175","RU" +"3573938176","3573940223","PL" +"3573940224","3574005759","PS" +"3574005760","3574071295","CY" +"3574071296","3574136831","IL" +"3574136832","3574137823","DE" +"3574137824","3574137855","NL" +"3574137856","3574138559","DE" +"3574138560","3574138623","NL" +"3574138624","3574138735","DE" +"3574138736","3574138751","NL" +"3574138752","3574138767","DE" +"3574138768","3574138775","NL" +"3574138776","3574151823","DE" +"3574151824","3574151831","AT" +"3574151832","3574153615","DE" +"3574153616","3574153623","AT" +"3574153624","3574155627","DE" +"3574155628","3574155631","NL" +"3574155632","3574155727","DE" +"3574155728","3574155731","AT" +"3574155732","3574155739","DE" +"3574155740","3574155743","AT" +"3574155744","3574155883","DE" +"3574155884","3574155887","NL" +"3574155888","3574159919","DE" +"3574159920","3574159927","NL" +"3574159928","3574160931","DE" +"3574160932","3574160935","NL" +"3574160936","3574161039","DE" +"3574161040","3574161043","NL" +"3574161044","3574161055","DE" +"3574161056","3574161087","NL" +"3574161088","3574161107","DE" +"3574161108","3574161111","NL" +"3574161112","3574161335","DE" +"3574161336","3574161339","AI" +"3574161340","3574169599","DE" +"3574169600","3574190591","ES" +"3574190592","3574190847","EU" +"3574190848","3574202367","ES" +"3574202368","3574267903","NL" +"3574267904","3574333439","FR" +"3574333440","3574341631","GB" +"3574341632","3574348287","EU" +"3574348288","3574348543","GB" +"3574348544","3574398975","EU" +"3574398976","3574464511","PT" +"3574464512","3574530047","TR" +"3574530048","3574563807","SE" +"3574563808","3574563823","FI" +"3574563824","3574594559","SE" +"3574594560","3574595583","GB" +"3574595584","3574595839","GP" +"3574595840","3574596095","MQ" +"3574596096","3574596351","FR" +"3574596352","3574596607","MQ" +"3574596608","3574596863","GP" +"3574596864","3574597119","GF" +"3574597120","3574597631","MQ" +"3574597632","3574598143","GP" +"3574598144","3574598399","MQ" +"3574598400","3574598655","GP" +"3574598656","3574599679","MQ" +"3574599680","3574599935","GP" +"3574599936","3574600959","MQ" +"3574600960","3574601471","GP" +"3574601472","3574601983","MQ" +"3574601984","3574602495","GF" +"3574602496","3574603263","MQ" +"3574603264","3574603519","GP" +"3574603520","3574603775","GF" +"3574603776","3574611967","BG" +"3574611968","3574628351","HU" +"3574628352","3574661119","GR" +"3574661120","3574693887","NL" +"3574693888","3574726655","PL" +"3574726656","3574792191","GB" +"3574792192","3574824959","CZ" +"3574824960","3574825023","NL" +"3574825024","3574825279","GB" +"3574825280","3574825407","NL" +"3574825408","3574825471","GB" +"3574825472","3574826111","NL" +"3574826112","3574826239","GB" +"3574826240","3574826751","NL" +"3574826752","3574827007","GB" +"3574827008","3574829311","NL" +"3574829312","3574829567","GB" +"3574829568","3574829823","NL" +"3574829824","3574830079","GB" +"3574830080","3574831359","NL" +"3574831360","3574833279","GB" +"3574833280","3574833311","NL" +"3574833312","3574833343","GB" +"3574833344","3574833359","NL" +"3574833360","3574833407","GB" +"3574833408","3574833439","NL" +"3574833440","3574834431","GB" +"3574834432","3574834559","NL" +"3574834560","3574834943","GB" +"3574834944","3574835199","NL" +"3574835200","3574836351","GB" +"3574836352","3574838015","NL" +"3574838016","3574838271","GB" +"3574838272","3574838527","NL" +"3574838528","3574857727","GB" +"3574857728","3574915455","DE" +"3574915456","3574915487","CH" +"3574915488","3574917375","DE" +"3574917376","3574917631","CH" +"3574917632","3574918751","DE" +"3574918752","3574918783","CH" +"3574918784","3574919359","DE" +"3574919360","3574919391","FR" +"3574919392","3574920223","DE" +"3574920224","3574920239","LU" +"3574920240","3574920503","DE" +"3574920504","3574920511","LU" +"3574920512","3574923263","DE" +"3574923264","3574939647","RU" +"3574939648","3574956031","SE" +"3574956032","3574972415","IT" +"3574972416","3574988799","LV" +"3574988800","3575054335","PT" +"3575054336","3575119871","DE" +"3575119872","3575185407","RU" +"3575185408","3575250943","PL" +"3575250944","3575289855","IT" +"3575289856","3575290111","US" +"3575290112","3575316479","IT" +"3575316480","3575349247","RU" +"3575349248","3575351679","ES" +"3575351680","3575351687","NL" +"3575351688","3575351943","ES" +"3575351944","3575351951","FR" +"3575351952","3575353703","ES" +"3575353704","3575353711","GB" +"3575353712","3575354599","ES" +"3575354600","3575354607","GB" +"3575354608","3575355231","ES" +"3575355232","3575355247","GB" +"3575355248","3575358799","ES" +"3575358800","3575358815","FR" +"3575358816","3575360199","ES" +"3575360200","3575360207","FR" +"3575360208","3575366135","ES" +"3575366136","3575366143","GB" +"3575366144","3575367111","ES" +"3575367112","3575367119","DE" +"3575367120","3575372239","ES" +"3575372240","3575372247","PT" +"3575372248","3575373183","ES" +"3575373184","3575373191","GB" +"3575373192","3575374319","ES" +"3575374320","3575374327","GB" +"3575374328","3575376191","ES" +"3575376192","3575376199","US" +"3575376200","3575382015","ES" +"3575382016","3575412991","FI" +"3575412992","3575413119","RU" +"3575413120","3575447551","FI" +"3575447552","3575513087","CZ" +"3575513088","3575545855","PT" +"3575545856","3575562239","FR" +"3575562240","3575578623","DE" +"3575578624","3575578879","BE" +"3575578880","3575579135","AU" +"3575579136","3575579647","BE" +"3575579648","3575579903","AU" +"3575579904","3575581439","BE" +"3575581440","3575581695","EU" +"3575581696","3575582207","BE" +"3575582208","3575582463","CH" +"3575582464","3575582719","FR" +"3575582720","3575583103","BE" +"3575583104","3575583111","HU" +"3575583112","3575583115","GB" +"3575583116","3575583119","FR" +"3575583120","3575583231","BE" +"3575583232","3575583487","IT" +"3575583488","3575585791","BE" +"3575585792","3575586047","EG" +"3575586048","3575586303","IT" +"3575586304","3575586815","BE" +"3575586816","3575587071","GB" +"3575587072","3575587231","BE" +"3575587232","3575587247","NL" +"3575587248","3575587255","FR" +"3575587256","3575587263","BE" +"3575587264","3575587271","CH" +"3575587272","3575587287","BE" +"3575587288","3575587295","PL" +"3575587296","3575587319","BE" +"3575587320","3575587323","PL" +"3575587324","3575587839","BE" +"3575587840","3575588351","GB" +"3575588352","3575588863","BE" +"3575588864","3575589375","A2" +"3575589376","3575589631","US" +"3575589632","3575589887","CY" +"3575589888","3575590399","BE" +"3575590400","3575590655","A2" +"3575590656","3575590911","GB" +"3575590912","3575595007","BE" +"3575595008","3575595519","GB" +"3575595520","3575596287","BE" +"3575596288","3575596415","GB" +"3575596416","3575596543","BE" +"3575596544","3575596799","FR" +"3575596800","3575622607","BE" +"3575622608","3575622611","GB" +"3575622612","3575622655","BE" +"3575622656","3575622815","GB" +"3575622816","3575622847","BE" +"3575622848","3575622879","IT" +"3575622880","3575622911","FI" +"3575622912","3575623167","GB" +"3575623168","3575624703","BE" +"3575624704","3575624959","EU" +"3575624960","3575624991","GB" +"3575624992","3575624999","IT" +"3575625000","3575625007","GB" +"3575625008","3575625023","NL" +"3575625024","3575625027","EG" +"3575625028","3575625035","BE" +"3575625036","3575625039","GB" +"3575625040","3575625047","BE" +"3575625048","3575625055","FI" +"3575625056","3575625071","BE" +"3575625072","3575625087","PL" +"3575625088","3575625103","BE" +"3575625104","3575625151","GB" +"3575625152","3575625351","BE" +"3575625352","3575625359","GB" +"3575625360","3575625375","BE" +"3575625376","3575625407","IT" +"3575625408","3575625439","BE" +"3575625440","3575625455","ES" +"3575625456","3575625471","BE" +"3575625472","3575625503","NO" +"3575625504","3575625983","BE" +"3575625984","3575625991","SE" +"3575625992","3575626047","BE" +"3575626048","3575626111","FR" +"3575626112","3575626319","BE" +"3575626320","3575626335","GB" +"3575626336","3575626351","ES" +"3575626352","3575626367","DE" +"3575626368","3575626503","BE" +"3575626504","3575626511","CH" +"3575626512","3575626519","BE" +"3575626520","3575626527","FR" +"3575626528","3575626567","BE" +"3575626568","3575626575","RO" +"3575626576","3575626599","BE" +"3575626600","3575626607","IE" +"3575626608","3575626631","BE" +"3575626632","3575626639","GB" +"3575626640","3575626647","DE" +"3575626648","3575626655","IT" +"3575626656","3575626751","BE" +"3575626752","3575627007","A2" +"3575627008","3575627311","BE" +"3575627312","3575627327","ES" +"3575627328","3575627335","SE" +"3575627336","3575627359","BE" +"3575627360","3575627367","ES" +"3575627368","3575627423","BE" +"3575627424","3575627431","DE" +"3575627432","3575627487","BE" +"3575627488","3575627503","GB" +"3575627504","3575627711","BE" +"3575627712","3575627775","GB" +"3575627776","3575628543","NL" +"3575628544","3575628631","BE" +"3575628632","3575628639","GB" +"3575628640","3575628815","BE" +"3575628816","3575628823","ES" +"3575628824","3575628831","FR" +"3575628832","3575629183","BE" +"3575629184","3575629247","NL" +"3575629248","3575629279","BE" +"3575629280","3575629287","GB" +"3575629288","3575629295","BE" +"3575629296","3575629303","NL" +"3575629304","3575629823","BE" +"3575629824","3575629855","GR" +"3575629856","3575629871","DE" +"3575629872","3575629935","BE" +"3575629936","3575629951","FR" +"3575629952","3575630015","BE" +"3575630016","3575630023","GR" +"3575630024","3575630063","BE" +"3575630064","3575630079","ZA" +"3575630080","3575630335","BE" +"3575630336","3575630463","IT" +"3575630464","3575630591","CH" +"3575630592","3575630847","IL" +"3575630848","3575630975","BE" +"3575630976","3575630991","FR" +"3575630992","3575631103","BE" +"3575631104","3575631359","EU" +"3575631360","3575631615","BE" +"3575631616","3575631631","SE" +"3575631632","3575631639","BE" +"3575631640","3575631647","CH" +"3575631648","3575631663","SE" +"3575631664","3575631679","DE" +"3575631680","3575631695","SE" +"3575631696","3575631711","IT" +"3575631712","3575631759","BE" +"3575631760","3575631775","ZA" +"3575631776","3575631791","BE" +"3575631792","3575631799","ES" +"3575631800","3575631807","CZ" +"3575631808","3575631855","BE" +"3575631856","3575631863","ZA" +"3575631864","3575631871","BE" +"3575631872","3575632127","IL" +"3575632128","3575632639","BE" +"3575632640","3575632655","NO" +"3575632656","3575632703","BE" +"3575632704","3575632711","GB" +"3575632712","3575632783","BE" +"3575632784","3575632791","GB" +"3575632792","3575632847","BE" +"3575632848","3575632863","CH" +"3575632864","3575632879","BE" +"3575632880","3575632895","DE" +"3575632896","3575632967","BE" +"3575632968","3575632975","GB" +"3575632976","3575632991","BE" +"3575632992","3575632999","IT" +"3575633000","3575633039","BE" +"3575633040","3575633055","DE" +"3575633056","3575633063","SE" +"3575633064","3575633071","NL" +"3575633072","3575633087","BE" +"3575633088","3575633119","GB" +"3575633120","3575633135","BE" +"3575633136","3575633143","GB" +"3575633144","3575633599","BE" +"3575633600","3575633663","NL" +"3575633664","3575633727","BE" +"3575633728","3575633735","AT" +"3575633736","3575633743","IT" +"3575633744","3575633783","BE" +"3575633784","3575633791","DE" +"3575633792","3575633887","BE" +"3575633888","3575633895","SE" +"3575633896","3575633919","BE" +"3575633920","3575633983","CH" +"3575633984","3575633991","DE" +"3575633992","3575633999","BE" +"3575634000","3575634007","PT" +"3575634008","3575634015","DK" +"3575634016","3575634047","GB" +"3575634048","3575634183","BE" +"3575634184","3575634191","AT" +"3575634192","3575634255","BE" +"3575634256","3575634271","IT" +"3575634272","3575634367","BE" +"3575634368","3575634399","NO" +"3575634400","3575634431","GB" +"3575634432","3575634455","BE" +"3575634456","3575634463","DE" +"3575634464","3575634495","BE" +"3575634496","3575634511","FI" +"3575634512","3575634591","BE" +"3575634592","3575634599","ES" +"3575634600","3575634607","BE" +"3575634608","3575634615","GB" +"3575634616","3575634623","DE" +"3575634624","3575634695","BE" +"3575634696","3575634703","FI" +"3575634704","3575634711","BE" +"3575634712","3575634719","DE" +"3575634720","3575634767","BE" +"3575634768","3575634775","NO" +"3575634776","3575634783","BE" +"3575634784","3575634791","FR" +"3575634792","3575634799","ES" +"3575634800","3575634807","BE" +"3575634808","3575634815","SE" +"3575634816","3575634879","BE" +"3575634880","3575634911","GB" +"3575634912","3575634919","SE" +"3575634920","3575634927","GB" +"3575634928","3575634935","IT" +"3575634936","3575635015","BE" +"3575635016","3575635023","CH" +"3575635024","3575635039","ES" +"3575635040","3575635055","BE" +"3575635056","3575635063","CH" +"3575635064","3575635071","BE" +"3575635072","3575635087","SE" +"3575635088","3575635103","BE" +"3575635104","3575635119","PT" +"3575635120","3575635135","PL" +"3575635136","3575635151","DE" +"3575635152","3575635159","PT" +"3575635160","3575635167","DE" +"3575635168","3575635175","GB" +"3575635176","3575635199","BE" +"3575635200","3575635455","NO" +"3575635456","3575635463","RU" +"3575635464","3575635471","GB" +"3575635472","3575635583","BE" +"3575635584","3575635615","EG" +"3575635616","3575635631","FI" +"3575635632","3575635647","BE" +"3575635648","3575635679","GB" +"3575635680","3575635695","BE" +"3575635696","3575635703","GB" +"3575635704","3575635775","BE" +"3575635776","3575635839","CH" +"3575635840","3575635847","GB" +"3575635848","3575635855","BE" +"3575635856","3575635871","TR" +"3575635872","3575635983","BE" +"3575635984","3575635999","DE" +"3575636000","3575636143","BE" +"3575636144","3575636151","HU" +"3575636152","3575636607","BE" +"3575636608","3575636735","FR" +"3575636736","3575636807","BE" +"3575636808","3575636815","GB" +"3575636816","3575636823","BE" +"3575636824","3575636831","RU" +"3575636832","3575636855","BE" +"3575636856","3575636863","DE" +"3575636864","3575636871","BE" +"3575636872","3575636879","CZ" +"3575636880","3575636895","BE" +"3575636896","3575636903","PL" +"3575636904","3575636911","CZ" +"3575636912","3575636927","BE" +"3575636928","3575636959","DE" +"3575636960","3575636983","BE" +"3575636984","3575636991","FR" +"3575636992","3575637039","BE" +"3575637040","3575637055","DE" +"3575637056","3575637151","BE" +"3575637152","3575637183","GB" +"3575637184","3575637407","BE" +"3575637408","3575637439","LU" +"3575637440","3575637471","GB" +"3575637472","3575638103","BE" +"3575638104","3575638111","GB" +"3575638112","3575638175","BE" +"3575638176","3575638181","GB" +"3575638182","3575638182","EU" +"3575638183","3575638239","GB" +"3575638240","3575638263","BE" +"3575638264","3575638271","PL" +"3575638272","3575638279","BE" +"3575638280","3575638287","RU" +"3575638288","3575638303","BE" +"3575638304","3575638335","NO" +"3575638336","3575638527","BE" +"3575638528","3575638543","DE" +"3575638544","3575638559","BE" +"3575638560","3575638591","GB" +"3575638592","3575638623","BE" +"3575638624","3575638639","PL" +"3575638640","3575638719","BE" +"3575638720","3575638735","NL" +"3575638736","3575638751","GR" +"3575638752","3575638767","BE" +"3575638768","3575638783","SE" +"3575638784","3575638911","BE" +"3575638912","3575638943","FR" +"3575638944","3575638975","GB" +"3575638976","3575639007","BE" +"3575639008","3575639011","GB" +"3575639012","3575639023","IE" +"3575639024","3575639039","PL" +"3575639040","3575640063","BE" +"3575640064","3575644159","TR" +"3575644160","3575709695","DK" +"3575709696","3575730175","AT" +"3575730176","3575730191","SA" +"3575730192","3575732735","AT" +"3575732736","3575732991","LI" +"3575732992","3575736319","AT" +"3575736320","3575736895","LI" +"3575736896","3575738407","AT" +"3575738408","3575738415","SA" +"3575738416","3575738431","AT" +"3575738432","3575738463","SA" +"3575738464","3575738751","AT" +"3575738752","3575738759","SA" +"3575738760","3575742463","AT" +"3575742464","3575775231","RU" +"3575775232","3575775295","AT" +"3575775296","3575775487","NL" +"3575775488","3575775743","AT" +"3575775744","3575824383","NL" +"3575824384","3575832575","KW" +"3575832576","3575840767","NL" +"3575840768","3575848991","GB" +"3575848992","3575849007","NL" +"3575849008","3575850255","GB" +"3575850256","3575850263","NL" +"3575850264","3575850543","GB" +"3575850544","3575850559","NL" +"3575850560","3575850783","GB" +"3575850784","3575850815","NL" +"3575850816","3575852799","GB" +"3575852800","3575853055","NL" +"3575853056","3575853311","GB" +"3575853312","3575853375","NL" +"3575853376","3575853439","GB" +"3575853440","3575853503","NL" +"3575853504","3575853567","GB" +"3575853568","3575853579","NL" +"3575853580","3575853587","GB" +"3575853588","3575853591","NL" +"3575853592","3575853619","GB" +"3575853620","3575853631","NL" +"3575853632","3575853635","GB" +"3575853636","3575853647","NL" +"3575853648","3575853655","GB" +"3575853656","3575853663","NL" +"3575853664","3575853691","GB" +"3575853692","3575853695","NL" +"3575853696","3575853719","GB" +"3575853720","3575853723","NL" +"3575853724","3575853739","GB" +"3575853740","3575853743","NL" +"3575853744","3575853763","GB" +"3575853764","3575853767","NL" +"3575853768","3575853799","GB" +"3575853800","3575853807","NL" +"3575853808","3575853815","GB" +"3575853816","3575853823","NL" +"3575853824","3575853831","GB" +"3575853832","3575853863","NL" +"3575853864","3575853871","GB" +"3575853872","3575853879","NL" +"3575853880","3575853895","GB" +"3575853896","3575853927","NL" +"3575853928","3575853943","GB" +"3575853944","3575853951","NL" +"3575853952","3575853959","GB" +"3575853960","3575853975","NL" +"3575853976","3575853999","GB" +"3575854000","3575854015","NL" +"3575854016","3575854031","GB" +"3575854032","3575854039","NL" +"3575854040","3575857151","GB" +"3575857152","3575857407","BE" +"3575857408","3575858529","GB" +"3575858530","3575858543","US" +"3575858544","3575860299","GB" +"3575860300","3575860303","BE" +"3575860304","3575860735","GB" +"3575860736","3575860863","NL" +"3575860864","3575860991","GB" +"3575860992","3575861247","NL" +"3575861248","3575861503","GB" +"3575861504","3575861519","NL" +"3575861520","3575864327","GB" +"3575864328","3575864331","NL" +"3575864332","3575864343","GB" +"3575864344","3575864347","NL" +"3575864348","3575864359","GB" +"3575864360","3575864363","NL" +"3575864364","3575864380","GB" +"3575864381","3575864382","NL" +"3575864383","3575864387","GB" +"3575864388","3575864391","NL" +"3575864392","3575864395","GB" +"3575864396","3575864403","NL" +"3575864404","3575864583","GB" +"3575864584","3575864599","NL" +"3575864600","3575864607","GB" +"3575864608","3575864615","NL" +"3575864616","3575864631","GB" +"3575864632","3575864639","NL" +"3575864640","3575864663","GB" +"3575864664","3575864671","NL" +"3575864672","3575864687","GB" +"3575864688","3575864703","NL" +"3575864704","3575864775","GB" +"3575864776","3575864783","NL" +"3575864784","3575865087","GB" +"3575865088","3575865215","NL" +"3575865216","3575866367","GB" +"3575866368","3575867135","US" +"3575867136","3575872047","GB" +"3575872048","3575872063","NL" +"3575872064","3575872079","GB" +"3575872080","3575872095","NL" +"3575872096","3575872255","GB" +"3575872256","3575872767","NL" +"3575872768","3575873535","GB" +"3575873536","3575906303","EE" +"3575906304","3575971839","FR" +"3575971840","3576037375","ES" +"3576037376","3576038207","EU" +"3576038208","3576038271","GB" +"3576038272","3576038335","EU" +"3576038336","3576038463","GB" +"3576038464","3576038527","EU" +"3576038528","3576038591","GB" +"3576038592","3576038911","EU" +"3576038912","3576038975","GB" +"3576038976","3576039167","EU" +"3576039168","3576039231","GB" +"3576039232","3576039359","EU" +"3576039360","3576039383","GB" +"3576039384","3576039391","EU" +"3576039392","3576039455","GB" +"3576039456","3576039519","EU" +"3576039520","3576039551","GB" +"3576039552","3576039583","EU" +"3576039584","3576039647","GB" +"3576039648","3576039807","EU" +"3576039808","3576039839","GB" +"3576039840","3576039903","EU" +"3576039904","3576039935","GB" +"3576039936","3576040063","EU" +"3576040064","3576040127","GB" +"3576040128","3576040215","EU" +"3576040216","3576040223","GB" +"3576040224","3576040271","EU" +"3576040272","3576040287","GB" +"3576040288","3576040351","EU" +"3576040352","3576040383","GB" +"3576040384","3576040831","EU" +"3576040832","3576040959","GB" +"3576040960","3576041471","EU" +"3576041472","3576041535","GB" +"3576041536","3576041727","EU" +"3576041728","3576041799","GB" +"3576041800","3576041831","EU" +"3576041832","3576041847","GB" +"3576041848","3576041863","EU" +"3576041864","3576041871","GB" +"3576041872","3576041879","EU" +"3576041880","3576041887","GB" +"3576041888","3576041903","EU" +"3576041904","3576041919","GB" +"3576041920","3576041935","EU" +"3576041936","3576041943","GB" +"3576041944","3576041951","EU" +"3576041952","3576041975","GB" +"3576041976","3576042111","EU" +"3576042112","3576042239","GB" +"3576042240","3576042495","EU" +"3576042496","3576042623","GB" +"3576042624","3576042687","EU" +"3576042688","3576042695","GB" +"3576042696","3576042751","EU" +"3576042752","3576042815","GB" +"3576042816","3576045583","EU" +"3576045584","3576045599","GB" +"3576045600","3576045663","EU" +"3576045664","3576045679","GB" +"3576045680","3576045711","EU" +"3576045712","3576045735","GB" +"3576045736","3576045799","EU" +"3576045800","3576045807","GB" +"3576045808","3576045815","EU" +"3576045816","3576045823","GB" +"3576045824","3576048639","EU" +"3576048640","3576048767","GB" +"3576048768","3576048959","EU" +"3576048960","3576049023","GB" +"3576049024","3576049151","EU" +"3576049152","3576050047","GB" +"3576050048","3576053759","EU" +"3576053760","3576054911","GB" +"3576054912","3576055103","EU" +"3576055104","3576055111","GB" +"3576055112","3576055119","EU" +"3576055120","3576055127","GB" +"3576055128","3576055151","EU" +"3576055152","3576055167","GB" +"3576055168","3576055183","EU" +"3576055184","3576055199","GB" +"3576055200","3576055207","EU" +"3576055208","3576055215","GB" +"3576055216","3576055279","EU" +"3576055280","3576055551","GB" +"3576055552","3576055807","EU" +"3576055808","3576055871","GB" +"3576055872","3576055935","EU" +"3576055936","3576055999","GB" +"3576056000","3576056191","EU" +"3576056192","3576056255","GB" +"3576056256","3576056319","EU" +"3576056320","3576056447","GB" +"3576056448","3576056703","EU" +"3576056704","3576056767","GB" +"3576056768","3576056855","EU" +"3576056856","3576056871","GB" +"3576056872","3576056879","EU" +"3576056880","3576056887","GB" +"3576056888","3576056895","EU" +"3576056896","3576056903","GB" +"3576056904","3576056919","EU" +"3576056920","3576056927","GB" +"3576056928","3576056935","EU" +"3576056936","3576056943","GB" +"3576056944","3576056951","EU" +"3576056952","3576056975","GB" +"3576056976","3576056991","EU" +"3576056992","3576056999","GB" +"3576057000","3576057039","EU" +"3576057040","3576057055","GB" +"3576057056","3576057631","EU" +"3576057632","3576057647","GB" +"3576057648","3576057711","EU" +"3576057712","3576057743","GB" +"3576057744","3576057823","EU" +"3576057824","3576057839","GB" +"3576057840","3576058879","EU" +"3576058880","3576059007","GB" +"3576059008","3576059647","EU" +"3576059648","3576059679","GB" +"3576059680","3576059711","EU" +"3576059712","3576059743","GB" +"3576059744","3576059775","EU" +"3576059776","3576059807","GB" +"3576059808","3576060095","EU" +"3576060096","3576060159","GB" +"3576060160","3576060287","EU" +"3576060288","3576060351","GB" +"3576060352","3576061039","EU" +"3576061040","3576061055","GB" +"3576061056","3576061119","EU" +"3576061120","3576061135","GB" +"3576061136","3576061183","EU" +"3576061184","3576061247","GB" +"3576061248","3576061311","EU" +"3576061312","3576061439","GB" +"3576061440","3576061583","EU" +"3576061584","3576061591","GB" +"3576061592","3576061619","EU" +"3576061620","3576061631","GB" +"3576061632","3576061639","EU" +"3576061640","3576061647","GB" +"3576061648","3576061687","EU" +"3576061688","3576061695","GB" +"3576061696","3576062463","EU" +"3576062464","3576062479","GB" +"3576062480","3576064319","EU" +"3576064320","3576064448","GB" +"3576064449","3576064543","EU" +"3576064544","3576064559","GB" +"3576064560","3576065407","EU" +"3576065408","3576065535","GB" +"3576065536","3576065855","EU" +"3576065856","3576065887","GB" +"3576065888","3576066287","EU" +"3576066288","3576066295","GB" +"3576066296","3576066303","EU" +"3576066304","3576066431","GB" +"3576066432","3576067071","EU" +"3576067072","3576067199","GB" +"3576067200","3576067247","EU" +"3576067248","3576067255","GB" +"3576067256","3576068351","EU" +"3576068352","3576068479","GB" +"3576068480","3576068863","EU" +"3576068864","3576068927","GB" +"3576068928","3576069055","EU" +"3576069056","3576069119","GB" +"3576069120","3576069247","EU" +"3576069248","3576069279","GB" +"3576069280","3576069311","EU" +"3576069312","3576069343","GB" +"3576069344","3576070695","EU" +"3576070696","3576070703","GB" +"3576070704","3576070711","EU" +"3576070712","3576070719","GB" +"3576070720","3576070727","EU" +"3576070728","3576070735","GB" +"3576070736","3576070775","EU" +"3576070776","3576070783","GB" +"3576070784","3576071295","EU" +"3576071296","3576071423","GB" +"3576071424","3576071551","EU" +"3576071552","3576071679","GB" +"3576071680","3576071935","EU" +"3576071936","3576071951","GB" +"3576071952","3576072063","EU" +"3576072064","3576072079","GB" +"3576072080","3576072287","EU" +"3576072288","3576072319","GB" +"3576072320","3576072415","EU" +"3576072416","3576072511","GB" +"3576072512","3576073215","EU" +"3576073216","3576073279","GB" +"3576073280","3576074751","EU" +"3576074752","3576074879","GB" +"3576074880","3576075263","EU" +"3576075264","3576075327","GB" +"3576075328","3576075647","EU" +"3576075648","3576075711","GB" +"3576075712","3576075775","EU" +"3576075776","3576075903","GB" +"3576075904","3576076271","EU" +"3576076272","3576076351","GB" +"3576076352","3576076567","EU" +"3576076568","3576076575","GB" +"3576076576","3576076623","EU" +"3576076624","3576076631","GB" +"3576076632","3576076703","EU" +"3576076704","3576076719","GB" +"3576076720","3576076783","EU" +"3576076784","3576076791","GB" +"3576076792","3576077439","EU" +"3576077440","3576077471","GB" +"3576077472","3576077567","EU" +"3576077568","3576077695","GB" +"3576077696","3576077935","EU" +"3576077936","3576077967","GB" +"3576077968","3576078143","EU" +"3576078144","3576078175","GB" +"3576078176","3576078463","EU" +"3576078464","3576078591","GB" +"3576078592","3576079999","EU" +"3576080000","3576080127","GB" +"3576080128","3576080223","EU" +"3576080224","3576080255","GB" +"3576080256","3576080775","EU" +"3576080776","3576080799","GB" +"3576080800","3576080807","EU" +"3576080808","3576080815","GB" +"3576080816","3576080823","EU" +"3576080824","3576080831","GB" +"3576080832","3576082079","EU" +"3576082080","3576082111","GB" +"3576082112","3576082191","EU" +"3576082192","3576082223","GB" +"3576082224","3576082687","EU" +"3576082688","3576082943","GB" +"3576082944","3576083967","EU" +"3576083968","3576084031","GB" +"3576084032","3576084479","EU" +"3576084480","3576084543","GB" +"3576084544","3576084607","EU" +"3576084608","3576084671","GB" +"3576084672","3576084703","EU" +"3576084704","3576084735","GB" +"3576084736","3576084863","EU" +"3576084864","3576084927","GB" +"3576084928","3576085183","EU" +"3576085184","3576085215","GB" +"3576085216","3576085695","EU" +"3576085696","3576085711","GB" +"3576085712","3576086015","EU" +"3576086016","3576086143","GB" +"3576086144","3576086367","EU" +"3576086368","3576086431","GB" +"3576086432","3576086495","EU" +"3576086496","3576086527","GB" +"3576086528","3576086567","EU" +"3576086568","3576086571","GB" +"3576086572","3576086575","EU" +"3576086576","3576086591","GB" +"3576086592","3576086599","EU" +"3576086600","3576086603","GB" +"3576086604","3576087807","EU" +"3576087808","3576087823","GB" +"3576087824","3576087951","EU" +"3576087952","3576087967","GB" +"3576087968","3576088031","EU" +"3576088032","3576088047","GB" +"3576088048","3576088223","EU" +"3576088224","3576088231","GB" +"3576088232","3576088375","EU" +"3576088376","3576088383","GB" +"3576088384","3576088479","EU" +"3576088480","3576088511","GB" +"3576088512","3576088959","EU" +"3576088960","3576088967","GB" +"3576088968","3576089023","EU" +"3576089024","3576089039","GB" +"3576089040","3576089439","EU" +"3576089440","3576089471","GB" +"3576089472","3576089775","EU" +"3576089776","3576089791","GB" +"3576089792","3576091407","EU" +"3576091408","3576091423","GB" +"3576091424","3576091455","EU" +"3576091456","3576091479","GB" +"3576091480","3576091967","EU" +"3576091968","3576091983","GB" +"3576091984","3576091999","EU" +"3576092000","3576092031","GB" +"3576092032","3576092127","EU" +"3576092128","3576092159","GB" +"3576092160","3576092863","EU" +"3576092864","3576092895","GB" +"3576092896","3576093063","EU" +"3576093064","3576093071","GB" +"3576093072","3576093183","EU" +"3576093184","3576093247","GB" +"3576093248","3576095231","EU" +"3576095232","3576096767","GB" +"3576096768","3576099071","EU" +"3576099072","3576100863","GB" +"3576100864","3576101375","EU" +"3576101376","3576103375","GB" +"3576103376","3576103423","FR" +"3576103424","3576105791","GB" +"3576105792","3576105855","FR" +"3576105856","3576107711","GB" +"3576107712","3576107743","FR" +"3576107744","3576108287","GB" +"3576108288","3576108303","FR" +"3576108304","3576108831","GB" +"3576108832","3576108847","FR" +"3576108848","3576111423","GB" +"3576111424","3576111551","FR" +"3576111552","3576119471","GB" +"3576119472","3576119487","CH" +"3576119488","3576121343","GB" +"3576121344","3576121471","CH" +"3576121472","3576121855","GB" +"3576121856","3576122111","CH" +"3576122112","3576122543","GB" +"3576122544","3576122551","CH" +"3576122552","3576122695","GB" +"3576122696","3576122703","CH" +"3576122704","3576132943","GB" +"3576132944","3576132959","CH" +"3576132960","3576133759","GB" +"3576133760","3576133775","CH" +"3576133776","3576134399","GB" +"3576134400","3576134655","CH" +"3576134656","3576135295","GB" +"3576135296","3576135359","CH" +"3576135360","3576135679","GB" +"3576135680","3576168447","DE" +"3576168448","3576233983","GB" +"3576233984","3576236703","FR" +"3576236704","3576236719","GB" +"3576236720","3576236743","FR" +"3576236744","3576236751","GB" +"3576236752","3576236775","FR" +"3576236776","3576236783","GB" +"3576236784","3576236895","FR" +"3576236896","3576236927","GB" +"3576236928","3576237063","FR" +"3576237064","3576237071","GB" +"3576237072","3576237087","FR" +"3576237088","3576237119","GB" +"3576237120","3576237231","FR" +"3576237232","3576237311","GB" +"3576237312","3576237455","FR" +"3576237456","3576237503","GB" +"3576237504","3576237599","FR" +"3576237600","3576237631","GB" +"3576237632","3576237663","FR" +"3576237664","3576237679","GB" +"3576237680","3576237711","FR" +"3576237712","3576237743","GB" +"3576237744","3576237919","FR" +"3576237920","3576237935","GB" +"3576237936","3576238151","FR" +"3576238152","3576238159","GB" +"3576238160","3576238305","FR" +"3576238306","3576238335","GB" +"3576238336","3576238543","FR" +"3576238544","3576238551","GB" +"3576238552","3576238863","FR" +"3576238864","3576238879","GB" +"3576238880","3576238895","FR" +"3576238896","3576238911","GB" +"3576238912","3576238927","FR" +"3576238928","3576238975","GB" +"3576238976","3576239007","FR" +"3576239008","3576239023","GB" +"3576239024","3576239039","FR" +"3576239040","3576239071","GB" +"3576239072","3576239087","FR" +"3576239088","3576239103","GB" +"3576239104","3576240039","FR" +"3576240040","3576240047","GB" +"3576240048","3576240111","FR" +"3576240112","3576240127","GB" +"3576240128","3576240475","FR" +"3576240476","3576240511","GB" +"3576240512","3576240575","FR" +"3576240576","3576240895","GB" +"3576240896","3576241183","FR" +"3576241184","3576241215","GB" +"3576241216","3576241287","FR" +"3576241288","3576241295","GB" +"3576241296","3576241343","FR" +"3576241344","3576241351","GB" +"3576241352","3576241383","FR" +"3576241384","3576241399","GB" +"3576241400","3576241855","FR" +"3576241856","3576241887","GB" +"3576241888","3576241951","FR" +"3576241952","3576241991","GB" +"3576241992","3576242007","FR" +"3576242008","3576242031","GB" +"3576242032","3576242039","FR" +"3576242040","3576242047","GB" +"3576242048","3576242111","FR" +"3576242112","3576242143","GB" +"3576242144","3576242183","FR" +"3576242184","3576242199","GB" +"3576242200","3576242319","FR" +"3576242320","3576242327","GB" +"3576242328","3576242335","FR" +"3576242336","3576242343","GB" +"3576242344","3576242415","FR" +"3576242416","3576242423","GB" +"3576242424","3576244103","FR" +"3576244104","3576244111","GB" +"3576244112","3576244127","FR" +"3576244128","3576244143","GB" +"3576244144","3576246407","FR" +"3576246408","3576246463","GB" +"3576246464","3576246656","FR" +"3576246657","3576246727","GB" +"3576246728","3576246743","FR" +"3576246744","3576246751","GB" +"3576246752","3576249359","FR" +"3576249360","3576249367","GB" +"3576249368","3576249463","FR" +"3576249464","3576249471","GB" +"3576249472","3576249503","FR" +"3576249504","3576249511","GB" +"3576249512","3576249527","FR" +"3576249528","3576249567","GB" +"3576249568","3576249743","FR" +"3576249744","3576249791","GB" +"3576249792","3576249807","FR" +"3576249808","3576249823","GB" +"3576249824","3576249831","FR" +"3576249832","3576249839","GB" +"3576249840","3576250623","FR" +"3576250624","3576251007","GB" +"3576251008","3576251039","FR" +"3576251040","3576251135","GB" +"3576251136","3576251407","FR" +"3576251408","3576251519","GB" +"3576251520","3576251583","FR" +"3576251584","3576251599","GB" +"3576251600","3576251615","FR" +"3576251616","3576251647","GB" +"3576251648","3576252415","FR" +"3576252416","3576252671","GB" +"3576252672","3576254543","FR" +"3576254544","3576254551","GB" +"3576254552","3576254607","FR" +"3576254608","3576254615","GB" +"3576254616","3576254623","FR" +"3576254624","3576254647","GB" +"3576254648","3576254847","FR" +"3576254848","3576254855","GB" +"3576254856","3576254863","FR" +"3576254864","3576254879","GB" +"3576254880","3576254895","FR" +"3576254896","3576254911","GB" +"3576254912","3576255151","FR" +"3576255152","3576255199","GB" +"3576255200","3576255215","FR" +"3576255216","3576255231","GB" +"3576255232","3576255375","FR" +"3576255376","3576255383","GB" +"3576255384","3576255407","FR" +"3576255408","3576255423","GB" +"3576255424","3576255431","FR" +"3576255432","3576255439","GB" +"3576255440","3576255447","FR" +"3576255448","3576255455","GB" +"3576255456","3576255471","FR" +"3576255472","3576255479","GB" +"3576255480","3576255519","FR" +"3576255520","3576255527","GB" +"3576255528","3576255543","FR" +"3576255544","3576255551","GB" +"3576255552","3576255575","FR" +"3576255576","3576255583","GB" +"3576255584","3576255615","FR" +"3576255616","3576255623","GB" +"3576255624","3576255631","FR" +"3576255632","3576255647","GB" +"3576255648","3576255671","FR" +"3576255672","3576255679","GB" +"3576255680","3576255703","FR" +"3576255704","3576255719","GB" +"3576255720","3576255743","FR" +"3576255744","3576255751","GB" +"3576255752","3576255887","FR" +"3576255888","3576255919","GB" +"3576255920","3576255983","FR" +"3576255984","3576255999","GB" +"3576256000","3576256127","FR" +"3576256128","3576256143","GB" +"3576256144","3576256239","FR" +"3576256240","3576256255","GB" +"3576256256","3576256351","FR" +"3576256352","3576256367","GB" +"3576256368","3576256383","FR" +"3576256384","3576256415","GB" +"3576256416","3576256431","FR" +"3576256432","3576256511","GB" +"3576256512","3576256895","FR" +"3576256896","3576256959","GB" +"3576256960","3576256991","FR" +"3576256992","3576257007","GB" +"3576257008","3576257103","FR" +"3576257104","3576257119","GB" +"3576257120","3576257135","FR" +"3576257136","3576257151","GB" +"3576257152","3576257159","FR" +"3576257160","3576257167","GB" +"3576257168","3576257215","FR" +"3576257216","3576257279","GB" +"3576257280","3576257287","FR" +"3576257288","3576257295","GB" +"3576257296","3576257327","FR" +"3576257328","3576257359","GB" +"3576257360","3576257367","FR" +"3576257368","3576257375","GB" +"3576257376","3576257439","FR" +"3576257440","3576257471","GB" +"3576257472","3576257487","FR" +"3576257488","3576257535","GB" +"3576257536","3576257551","FR" +"3576257552","3576257615","GB" +"3576257616","3576257631","FR" +"3576257632","3576257647","GB" +"3576257648","3576257727","FR" +"3576257728","3576257807","GB" +"3576257808","3576257823","FR" +"3576257824","3576257839","GB" +"3576257840","3576257855","FR" +"3576257856","3576257871","GB" +"3576257872","3576257887","FR" +"3576257888","3576257903","GB" +"3576257904","3576257975","FR" +"3576257976","3576258015","GB" +"3576258016","3576258167","FR" +"3576258168","3576258175","GB" +"3576258176","3576258351","FR" +"3576258352","3576258399","GB" +"3576258400","3576258415","FR" +"3576258416","3576258431","GB" +"3576258432","3576258447","FR" +"3576258448","3576258479","GB" +"3576258480","3576258495","FR" +"3576258496","3576258511","GB" +"3576258512","3576258527","FR" +"3576258528","3576258575","GB" +"3576258576","3576258591","FR" +"3576258592","3576258623","GB" +"3576258624","3576258671","FR" +"3576258672","3576258687","GB" +"3576258688","3576258703","FR" +"3576258704","3576258783","GB" +"3576258784","3576258863","FR" +"3576258864","3576258895","GB" +"3576258896","3576258943","FR" +"3576258944","3576259007","GB" +"3576259008","3576259023","FR" +"3576259024","3576259039","GB" +"3576259040","3576259079","FR" +"3576259080","3576259087","GB" +"3576259088","3576259103","FR" +"3576259104","3576259199","GB" +"3576259200","3576259215","FR" +"3576259216","3576259247","GB" +"3576259248","3576259279","FR" +"3576259280","3576259295","GB" +"3576259296","3576259311","FR" +"3576259312","3576259327","GB" +"3576259328","3576259343","FR" +"3576259344","3576259391","GB" +"3576259392","3576259423","FR" +"3576259424","3576259439","GB" +"3576259440","3576259471","FR" +"3576259472","3576259487","GB" +"3576259488","3576259519","FR" +"3576259520","3576259583","GB" +"3576259584","3576259951","FR" +"3576259952","3576259975","GB" +"3576259976","3576259991","FR" +"3576259992","3576259999","GB" +"3576260000","3576260015","FR" +"3576260016","3576260047","GB" +"3576260048","3576260079","FR" +"3576260080","3576260111","GB" +"3576260112","3576260175","FR" +"3576260176","3576260191","GB" +"3576260192","3576260207","FR" +"3576260208","3576260223","GB" +"3576260224","3576260239","FR" +"3576260240","3576260255","GB" +"3576260256","3576260271","FR" +"3576260272","3576260287","GB" +"3576260288","3576260303","FR" +"3576260304","3576260335","GB" +"3576260336","3576260415","FR" +"3576260416","3576260447","GB" +"3576260448","3576260463","FR" +"3576260464","3576260543","GB" +"3576260544","3576260559","FR" +"3576260560","3576260607","GB" +"3576260608","3576260655","FR" +"3576260656","3576260663","GB" +"3576260664","3576260671","FR" +"3576260672","3576260679","GB" +"3576260680","3576260703","FR" +"3576260704","3576260735","GB" +"3576260736","3576260903","FR" +"3576260904","3576260927","GB" +"3576260928","3576260959","FR" +"3576260960","3576260999","GB" +"3576261000","3576261015","FR" +"3576261016","3576261023","GB" +"3576261024","3576261047","FR" +"3576261048","3576261055","GB" +"3576261056","3576261063","FR" +"3576261064","3576261071","GB" +"3576261072","3576261079","FR" +"3576261080","3576261095","GB" +"3576261096","3576261103","FR" +"3576261104","3576261111","GB" +"3576261112","3576261391","FR" +"3576261392","3576261631","GB" +"3576261632","3576263463","FR" +"3576263464","3576263471","GB" +"3576263472","3576263519","FR" +"3576263520","3576263527","GB" +"3576263528","3576263567","FR" +"3576263568","3576263575","GB" +"3576263576","3576263583","FR" +"3576263584","3576263623","GB" +"3576263624","3576263679","FR" +"3576263680","3576263695","ES" +"3576263696","3576263775","FR" +"3576263776","3576263903","GB" +"3576263904","3576263911","FR" +"3576263912","3576263919","GB" +"3576263920","3576264295","FR" +"3576264296","3576264319","GB" +"3576264320","3576264383","FR" +"3576264384","3576264399","GB" +"3576264400","3576264431","FR" +"3576264432","3576264439","GB" +"3576264440","3576264551","FR" +"3576264552","3576264559","GB" +"3576264560","3576264639","FR" +"3576264640","3576264687","GB" +"3576264688","3576265319","FR" +"3576265320","3576265327","GB" +"3576265328","3576265423","FR" +"3576265424","3576265431","GB" +"3576265432","3576265463","FR" +"3576265464","3576265471","GB" +"3576265472","3576299519","FR" +"3576299520","3576365055","AE" +"3576365056","3576430591","TR" +"3576430592","3576496127","FR" +"3576496128","3576561663","IT" +"3576561664","3576603135","NL" +"3576603136","3576603391","BE" +"3576603392","3576603647","FR" +"3576603648","3576604159","NL" +"3576604160","3576604415","HU" +"3576604416","3576605183","NL" +"3576605184","3576605439","RO" +"3576605440","3576605695","NL" +"3576605696","3576605951","CZ" +"3576605952","3576606207","AT" +"3576606208","3576606463","GB" +"3576606464","3576606719","NL" +"3576606720","3576606975","SE" +"3576606976","3576607231","NO" +"3576607232","3576607487","PL" +"3576607488","3576607743","DE" +"3576607744","3576620031","NL" +"3576620032","3576620543","SE" +"3576620544","3576620799","GB" +"3576620800","3576622079","NL" +"3576622080","3576622591","GB" +"3576622592","3576623871","NL" +"3576623872","3576624127","AT" +"3576624128","3576626943","NL" +"3576626944","3576692735","AT" +"3576692736","3576758271","GB" +"3576758272","3576823807","BE" +"3576823808","3576889343","SE" +"3576889344","3576954879","NL" +"3576954880","3576987647","NO" +"3576987648","3577000959","GB" +"3577000960","3577001215","A2" +"3577001216","3577001343","NL" +"3577001344","3577001983","GB" +"3577001984","3577002751","NL" +"3577002752","3577003519","A2" +"3577003520","3577003643","NL" +"3577003644","3577003647","GB" +"3577003648","3577004031","NL" +"3577004032","3577020415","GB" +"3577020416","3577085951","NL" +"3577085952","3577151487","DE" +"3577151488","3577167871","FR" +"3577167872","3577184255","ET" +"3577184256","3577217023","CH" +"3577217024","3577282559","FR" +"3577282560","3577348095","IL" +"3577348096","3577392767","PT" +"3577392768","3577392783","DE" +"3577392784","3577413631","PT" +"3577413632","3577417519","RU" +"3577417520","3577417535","KZ" +"3577417536","3577479167","RU" +"3577479168","3577544703","ES" +"3577544704","3577545863","DE" +"3577545864","3577545871","US" +"3577545872","3577545983","DE" +"3577545984","3577546111","SE" +"3577546112","3577546239","DE" +"3577546240","3577546367","US" +"3577546368","3577547487","DE" +"3577547488","3577547519","FR" +"3577547520","3577550983","DE" +"3577550984","3577550991","CH" +"3577550992","3577551407","DE" +"3577551408","3577551411","US" +"3577551412","3577553599","DE" +"3577553600","3577553607","DK" +"3577553608","3577557215","DE" +"3577557216","3577557231","US" +"3577557232","3577559775","DE" +"3577559776","3577559783","FR" +"3577559784","3577562391","DE" +"3577562392","3577562399","GB" +"3577562400","3577563287","DE" +"3577563288","3577563295","FR" +"3577563296","3577564631","DE" +"3577564632","3577564639","GB" +"3577564640","3577571391","DE" +"3577571392","3577571399","DK" +"3577571400","3577577231","DE" +"3577577232","3577577247","US" +"3577577248","3577583919","DE" +"3577583920","3577583935","BE" +"3577583936","3577586343","DE" +"3577586344","3577586351","US" +"3577586352","3577592431","DE" +"3577592432","3577592447","FR" +"3577592448","3577592743","DE" +"3577592744","3577592751","IE" +"3577592752","3577607559","DE" +"3577607560","3577607567","NL" +"3577607568","3577610367","DE" +"3577610368","3577610495","GB" +"3577610496","3577610751","DE" +"3577610752","3577611199","CH" +"3577611200","3577611263","EU" +"3577611264","3577612287","DE" +"3577612288","3577612319","EU" +"3577612320","3577612383","DE" +"3577612384","3577612415","EU" +"3577612416","3577612543","NO" +"3577612544","3577612799","HU" +"3577612800","3577613055","FI" +"3577613056","3577613311","EU" +"3577613312","3577613567","DE" +"3577613568","3577614079","EU" +"3577614080","3577614111","DE" +"3577614112","3577614143","EU" +"3577614144","3577614207","DE" +"3577614208","3577618431","EU" +"3577618432","3577618447","GB" +"3577618448","3577618463","NL" +"3577618464","3577618559","GB" +"3577618560","3577618623","BE" +"3577618624","3577618655","EU" +"3577618656","3577618671","AT" +"3577618672","3577618687","EU" +"3577618688","3577619935","GB" +"3577619936","3577619967","EU" +"3577619968","3577620575","GB" +"3577620576","3577620623","EU" +"3577620624","3577620671","GB" +"3577620672","3577620735","TR" +"3577620736","3577620991","EU" +"3577620992","3577621055","GB" +"3577621056","3577621119","EU" +"3577621120","3577621151","GB" +"3577621152","3577621215","EU" +"3577621216","3577621223","SK" +"3577621224","3577621247","EU" +"3577621248","3577622143","GB" +"3577622144","3577622271","DE" +"3577622272","3577622527","GB" +"3577622528","3577622591","EU" +"3577622592","3577622927","GB" +"3577622928","3577623039","EU" +"3577623040","3577623807","GB" +"3577623808","3577624063","EU" +"3577624064","3577624319","GB" +"3577624320","3577624447","EU" +"3577624448","3577624879","GB" +"3577624880","3577624895","EU" +"3577624896","3577625199","GB" +"3577625200","3577625207","EU" +"3577625208","3577625215","GB" +"3577625216","3577625231","EU" +"3577625232","3577625599","GB" +"3577625600","3577625791","EU" +"3577625792","3577626623","GB" +"3577626624","3577627135","FR" +"3577627136","3577627391","EU" +"3577627392","3577627647","GB" +"3577627648","3577627967","FR" +"3577627968","3577627999","EU" +"3577628000","3577628671","FR" +"3577628672","3577630719","CH" +"3577630720","3577632255","GB" +"3577632256","3577632511","EU" +"3577632512","3577632767","GB" +"3577632768","3577633791","EU" +"3577633792","3577633951","CZ" +"3577633952","3577633959","EU" +"3577633960","3577633967","CZ" +"3577633968","3577634047","EU" +"3577634048","3577634239","CZ" +"3577634240","3577634815","EU" +"3577634816","3577635455","FR" +"3577635456","3577635519","EU" +"3577635520","3577635839","FR" +"3577635840","3577636863","DE" +"3577636864","3577638143","GB" +"3577638144","3577638399","BE" +"3577638400","3577638911","GB" +"3577638912","3577638959","FR" +"3577638960","3577638967","EU" +"3577638968","3577639239","FR" +"3577639240","3577639247","EU" +"3577639248","3577639743","FR" +"3577639744","3577639767","EU" +"3577639768","3577639783","FR" +"3577639784","3577639799","EU" +"3577639800","3577639807","FR" +"3577639808","3577639839","EU" +"3577639840","3577639847","FR" +"3577639848","3577639863","EU" +"3577639864","3577639871","FR" +"3577639872","3577639935","EU" +"3577639936","3577640719","FR" +"3577640720","3577640735","EU" +"3577640736","3577641151","FR" +"3577641152","3577641159","EU" +"3577641160","3577641391","FR" +"3577641392","3577641399","EU" +"3577641400","3577641439","FR" +"3577641440","3577641983","EU" +"3577641984","3577642055","GB" +"3577642056","3577642063","EU" +"3577642064","3577642239","GB" +"3577642240","3577642495","EU" +"3577642496","3577643007","FR" +"3577643008","3577643231","NL" +"3577643232","3577643247","GB" +"3577643248","3577643263","NL" +"3577643264","3577645431","EU" +"3577645432","3577645447","NL" +"3577645448","3577645455","EU" +"3577645456","3577645503","NL" +"3577645504","3577645567","SK" +"3577645568","3577645823","EU" +"3577645824","3577645887","NL" +"3577645888","3577645903","EU" +"3577645904","3577645951","NL" +"3577645952","3577646079","EU" +"3577646080","3577646207","NL" +"3577646208","3577646335","NO" +"3577646336","3577646407","NL" +"3577646408","3577646415","EU" +"3577646416","3577646527","NL" +"3577646528","3577646591","EU" +"3577646592","3577646847","NL" +"3577646848","3577647103","EU" +"3577647104","3577647911","DK" +"3577647912","3577647935","EU" +"3577647936","3577647967","DK" +"3577647968","3577647999","EU" +"3577648000","3577648127","DK" +"3577648128","3577648895","EU" +"3577648896","3577649151","NL" +"3577649152","3577650047","EU" +"3577650048","3577650063","NL" +"3577650064","3577651199","EU" +"3577651200","3577651455","GB" +"3577651456","3577652223","EU" +"3577652224","3577652671","IT" +"3577652672","3577652735","EU" +"3577652736","3577652743","NO" +"3577652744","3577652751","EU" +"3577652752","3577652767","NO" +"3577652768","3577652863","EU" +"3577652864","3577652943","NO" +"3577652944","3577652991","EU" +"3577652992","3577653119","NO" +"3577653120","3577653247","EU" +"3577653248","3577655295","IT" +"3577655296","3577655519","AT" +"3577655520","3577655551","EU" +"3577655552","3577655647","AT" +"3577655648","3577655663","EU" +"3577655664","3577655679","AT" +"3577655680","3577655711","EU" +"3577655712","3577655743","AT" +"3577655744","3577655807","EU" +"3577655808","3577656447","AT" +"3577656448","3577657343","EU" +"3577657344","3577657599","GB" +"3577657600","3577657663","EU" +"3577657664","3577659391","GB" +"3577659392","3577659679","GR" +"3577659680","3577659711","EU" +"3577659712","3577659743","GR" +"3577659744","3577659903","EU" +"3577659904","3577660159","GB" +"3577660160","3577660607","BE" +"3577660608","3577660671","EU" +"3577660672","3577661439","BE" +"3577661440","3577663487","EU" +"3577663488","3577665215","SE" +"3577665216","3577665247","EU" +"3577665248","3577665311","SE" +"3577665312","3577665343","EU" +"3577665344","3577665375","SE" +"3577665376","3577665407","EU" +"3577665408","3577665455","SE" +"3577665456","3577665535","EU" +"3577665536","3577665591","ES" +"3577665592","3577665599","EU" +"3577665600","3577665607","ES" +"3577665608","3577665615","EU" +"3577665616","3577665679","ES" +"3577665680","3577665791","EU" +"3577665792","3577665823","BE" +"3577665824","3577665855","RO" +"3577665856","3577665919","LU" +"3577665920","3577666047","EU" +"3577666048","3577666175","ES" +"3577666176","3577667583","EU" +"3577667584","3577667743","PL" +"3577667744","3577668639","EU" +"3577668640","3577668671","IE" +"3577668672","3577668735","EU" +"3577668736","3577668799","IE" +"3577668800","3577669119","EU" +"3577669120","3577669383","HU" +"3577669384","3577669503","EU" +"3577669504","3577669631","HU" +"3577669632","3577671679","BE" +"3577671680","3577672191","ZA" +"3577672192","3577673727","DE" +"3577673728","3577675775","EU" +"3577675776","3577741311","PT" +"3577741312","3578003455","SE" +"3578003456","3578040319","DE" +"3578040320","3578040575","EU" +"3578040576","3578049023","DE" +"3578049024","3578049055","CH" +"3578049056","3578159615","DE" +"3578159616","3578159871","EU" +"3578159872","3578208127","DE" +"3578208128","3578208191","PK" +"3578208192","3578234623","DE" +"3578234624","3578234879","EU" +"3578234880","3578265599","DE" +"3578265600","3578331135","GB" +"3578331136","3578339327","PL" +"3578339328","3578347519","ES" +"3578347520","3578363903","DE" +"3578363904","3578396671","NL" +"3578396672","3578462207","TR" +"3578462208","3578527743","NL" +"3578527744","3578658815","PL" +"3578658816","3578724351","GB" +"3578724352","3578732543","RU" +"3578732544","3578740735","IE" +"3578740736","3578757119","RU" +"3578757120","3578822655","SE" +"3578822656","3578855423","RU" +"3578855424","3578888191","GB" +"3578888192","3578920959","SK" +"3578920960","3578986495","IT" +"3578986496","3578988095","DE" +"3578988096","3578988099","CH" +"3578988100","3578992895","DE" +"3578992896","3578992927","CH" +"3578992928","3578992959","DE" +"3578992960","3578992975","GB" +"3578992976","3578995015","DE" +"3578995016","3578995023","BE" +"3578995024","3578996999","DE" +"3578997000","3578997007","CH" +"3578997008","3578997935","DE" +"3578997936","3578997943","FR" +"3578997944","3578998575","DE" +"3578998576","3578998583","GB" +"3578998584","3578999647","DE" +"3578999648","3578999651","CH" +"3578999652","3579002879","DE" +"3579002880","3579019263","GB" +"3579019264","3579052031","DK" +"3579052032","3579117567","NL" +"3579117568","3579132159","RU" +"3579132160","3579132415","BY" +"3579132416","3579183103","RU" +"3579183104","3579183247","GB" +"3579183248","3579183263","DE" +"3579183264","3579183327","GB" +"3579183328","3579183343","IE" +"3579183344","3579188239","GB" +"3579188240","3579188255","BE" +"3579188256","3579188415","GB" +"3579188416","3579188431","IS" +"3579188432","3579189071","GB" +"3579189072","3579189087","CH" +"3579189088","3579191759","GB" +"3579191760","3579191775","DE" +"3579191776","3579193599","GB" +"3579193600","3579193703","NL" +"3579193704","3579193704","GB" +"3579193705","3579193705","NL" +"3579193706","3579193711","GB" +"3579193712","3579193727","BE" +"3579193728","3579193807","NL" +"3579193808","3579193815","GB" +"3579193816","3579193823","ES" +"3579193824","3579193855","NL" +"3579193856","3579194103","GB" +"3579194104","3579194111","US" +"3579194112","3579197055","GB" +"3579197056","3579197183","US" +"3579197184","3579197311","GB" +"3579197312","3579197439","US" +"3579197440","3579197887","GB" +"3579197888","3579197903","IT" +"3579197904","3579204127","GB" +"3579204128","3579204143","BE" +"3579204144","3579204231","GB" +"3579204232","3579204239","IE" +"3579204240","3579204271","GB" +"3579204272","3579204287","DE" +"3579204288","3579205631","GB" +"3579205632","3579205887","IE" +"3579205888","3579210079","GB" +"3579210080","3579210087","BE" +"3579210088","3579213247","GB" +"3579213248","3579213311","IT" +"3579213312","3579221023","GB" +"3579221024","3579221039","FR" +"3579221040","3579221071","GB" +"3579221072","3579221087","DE" +"3579221088","3579221103","GB" +"3579221104","3579221119","IT" +"3579221120","3579221471","GB" +"3579221472","3579221503","ES" +"3579221504","3579223071","GB" +"3579223072","3579223087","BE" +"3579223088","3579223103","FR" +"3579223104","3579226143","GB" +"3579226144","3579226151","DE" +"3579226152","3579226327","GB" +"3579226328","3579226351","FR" +"3579226352","3579228191","GB" +"3579228192","3579228207","IT" +"3579228208","3579228223","ES" +"3579228224","3579228671","GB" +"3579228672","3579228799","US" +"3579228800","3579231815","GB" +"3579231816","3579231831","FR" +"3579231832","3579231919","GB" +"3579231920","3579231927","US" +"3579231928","3579237183","GB" +"3579237184","3579237215","DE" +"3579237216","3579237247","NL" +"3579237248","3579240143","GB" +"3579240144","3579240159","CH" +"3579240160","3579241151","GB" +"3579241152","3579241215","IE" +"3579241216","3579244375","GB" +"3579244376","3579244383","CH" +"3579244384","3579247199","GB" +"3579247200","3579247207","DE" +"3579247208","3579247223","GB" +"3579247224","3579247231","FR" +"3579247232","3579247271","GB" +"3579247272","3579247279","US" +"3579247280","3579247311","GB" +"3579247312","3579247319","FR" +"3579247320","3579247391","GB" +"3579247392","3579247399","US" +"3579247400","3579247407","GB" +"3579247408","3579247415","US" +"3579247416","3579247535","GB" +"3579247536","3579247543","IE" +"3579247544","3579247567","GB" +"3579247568","3579247575","DE" +"3579247576","3579247583","GB" +"3579247584","3579247615","US" +"3579247616","3579248135","GB" +"3579248136","3579248143","DE" +"3579248144","3579248639","GB" +"3579248640","3579346943","RU" +"3579346944","3579361535","SE" +"3579361536","3579361791","NO" +"3579361792","3579362047","SE" +"3579362048","3579362063","NO" +"3579362064","3579362303","SE" +"3579362304","3579362559","NO" +"3579362560","3579362815","SE" +"3579362816","3579363327","NO" +"3579363328","3579445247","SE" +"3579445248","3579463679","AT" +"3579463680","3579463683","US" +"3579463684","3579478015","AT" +"3579478016","3579480847","FR" +"3579480848","3579480855","NL" +"3579480856","3579480863","FR" +"3579480864","3579480871","NL" +"3579480872","3579481095","FR" +"3579481096","3579481103","CH" +"3579481104","3579481119","FR" +"3579481120","3579481127","GB" +"3579481128","3579481143","FR" +"3579481144","3579481151","CH" +"3579481152","3579481159","FR" +"3579481160","3579481167","GB" +"3579481168","3579481191","FR" +"3579481192","3579481199","CH" +"3579481200","3579481247","FR" +"3579481248","3579481255","GB" +"3579481256","3579481263","CH" +"3579481264","3579481279","FR" +"3579481280","3579481287","GB" +"3579481288","3579482623","FR" +"3579482624","3579482783","NL" +"3579482784","3579482799","FR" +"3579482800","3579482927","NL" +"3579482928","3579482943","FR" +"3579482944","3579482991","NL" +"3579482992","3579483151","FR" +"3579483152","3579483263","NL" +"3579483264","3579483295","FR" +"3579483296","3579483311","NL" +"3579483312","3579483359","FR" +"3579483360","3579483375","NL" +"3579483376","3579484751","FR" +"3579484752","3579484767","BE" +"3579484768","3579485263","FR" +"3579485264","3579485279","BE" +"3579485280","3579485695","FR" +"3579485696","3579485711","GB" +"3579485712","3579485714","FR" +"3579485715","3579485727","GB" +"3579485728","3579485807","FR" +"3579485808","3579485823","GB" +"3579485824","3579485887","FR" +"3579485888","3579485888","GB" +"3579485889","3579485903","FR" +"3579485904","3579485919","DE" +"3579485920","3579485983","FR" +"3579485984","3579485999","CH" +"3579486000","3579486015","FR" +"3579486016","3579486031","GB" +"3579486032","3579486047","DE" +"3579486048","3579486095","GB" +"3579486096","3579486143","FR" +"3579486144","3579486175","GB" +"3579486176","3579486191","FR" +"3579486192","3579486207","GB" +"3579486208","3579486271","FR" +"3579486272","3579486287","GB" +"3579486288","3579486303","FR" +"3579486304","3579486319","GB" +"3579486320","3579486335","FR" +"3579486336","3579486351","GB" +"3579486352","3579486367","FR" +"3579486368","3579486383","IT" +"3579486384","3579486399","DE" +"3579486400","3579486415","FR" +"3579486416","3579486431","DE" +"3579486432","3579486447","GB" +"3579486448","3579486735","FR" +"3579486736","3579486751","DE" +"3579486752","3579486831","FR" +"3579486832","3579486847","BE" +"3579486848","3579486863","FR" +"3579486864","3579486879","GB" +"3579486880","3579487007","FR" +"3579487008","3579487039","GB" +"3579487040","3579487055","DE" +"3579487056","3579487103","FR" +"3579487104","3579487119","GB" +"3579487120","3579487215","FR" +"3579487216","3579487231","GB" +"3579487232","3579487247","FR" +"3579487248","3579487263","GB" +"3579487264","3579487471","FR" +"3579487472","3579487487","ES" +"3579487488","3579487519","FR" +"3579487520","3579487531","IT" +"3579487532","3579487535","FR" +"3579487536","3579487551","GB" +"3579487552","3579487567","FR" +"3579487568","3579487583","GB" +"3579487584","3579487599","FR" +"3579487600","3579487615","IT" +"3579487616","3579487663","FR" +"3579487664","3579487711","DE" +"3579487712","3579487727","SE" +"3579487728","3579487743","GB" +"3579487744","3579487807","FR" +"3579487808","3579487823","GB" +"3579487824","3579487855","FR" +"3579487856","3579487871","GB" +"3579487872","3579487887","IE" +"3579487888","3579487903","DE" +"3579487904","3579487951","FR" +"3579487952","3579487967","GB" +"3579487968","3579487983","IT" +"3579487984","3579487999","GB" +"3579488000","3579488047","FR" +"3579488048","3579488079","GB" +"3579488080","3579490559","FR" +"3579490560","3579490655","PT" +"3579490656","3579490671","FR" +"3579490672","3579490719","PT" +"3579490720","3579490735","NL" +"3579490736","3579490751","FR" +"3579490752","3579490799","PT" +"3579490800","3579490831","FR" +"3579490832","3579490943","PT" +"3579490944","3579490959","FR" +"3579490960","3579490975","PT" +"3579490976","3579491007","FR" +"3579491008","3579491023","PT" +"3579491024","3579491231","FR" +"3579491232","3579491247","PT" +"3579491248","3579491263","NL" +"3579491264","3579491471","FR" +"3579491472","3579491487","PT" +"3579491488","3579497983","FR" +"3579497984","3579497991","NL" +"3579497992","3579527167","FR" +"3579527168","3579543551","BA" +"3579543552","3579552767","BG" +"3579552768","3579553023","A2" +"3579553024","3579553535","BG" +"3579553536","3579553791","A2" +"3579553792","3579576319","BG" +"3579576320","3579581821","IT" +"3579581822","3579581822","EU" +"3579581823","3579595967","IT" +"3579595968","3579595983","A2" +"3579595984","3579596799","IT" +"3579596800","3579597055","EU" +"3579597056","3579600191","IT" +"3579600192","3579600207","US" +"3579600208","3579601471","IT" +"3579601472","3579601487","US" +"3579601488","3579605487","IT" +"3579605488","3579605503","DE" +"3579605504","3579607551","IT" +"3579607552","3579607807","US" +"3579607808","3579609087","IT" +"3579609088","3579641855","PL" +"3579641856","3579707391","NL" +"3579707392","3579723775","ES" +"3579723776","3579740159","AT" +"3579740160","3579772927","IE" +"3579772928","3579838463","DE" +"3579838464","3579879935","ES" +"3579879936","3579880191","US" +"3579880192","3580100607","ES" +"3580100608","3580150783","SE" +"3580150784","3580151039","NL" +"3580151040","3580162047","SE" +"3580162048","3580164095","EE" +"3580164096","3580165887","SE" +"3580165888","3580166143","NL" +"3580166144","3580198911","SE" +"3580198912","3580199423","LV" +"3580199424","3580200959","EE" +"3580200960","3580203007","LT" +"3580203008","3580203135","HR" +"3580203136","3580203519","SE" +"3580203520","3580204543","RU" +"3580204544","3580205055","NL" +"3580205056","3580207103","HR" +"3580207104","3580208127","LV" +"3580208128","3580209151","EE" +"3580209152","3580211199","SE" +"3580211200","3580213247","HR" +"3580213248","3580214271","CH" +"3580214272","3580214783","LV" +"3580214784","3580215295","HR" +"3580215296","3580217343","EE" +"3580217344","3580221439","SE" +"3580221440","3580221951","HR" +"3580221952","3580222207","EE" +"3580222208","3580222335","SE" +"3580222336","3580222719","HR" +"3580222720","3580222975","SE" +"3580222976","3580223487","HR" +"3580223488","3580231679","DE" +"3580231680","3580231935","LT" +"3580231936","3580232447","LV" +"3580232448","3580233727","LT" +"3580233728","3580234751","NO" +"3580234752","3580235263","SE" +"3580235264","3580236799","LT" +"3580236800","3580237567","LV" +"3580237568","3580237823","LT" +"3580237824","3580238335","SE" +"3580238336","3580239871","LV" +"3580239872","3580241919","EE" +"3580241920","3580243967","SE" +"3580243968","3580244991","EE" +"3580244992","3580246015","LT" +"3580246016","3580248063","LV" +"3580248064","3580254207","EE" +"3580254208","3580260351","DE" +"3580260352","3580265727","AT" +"3580265728","3580268543","EE" +"3580268544","3580272639","LV" +"3580272640","3580276735","SE" +"3580276736","3580280831","NL" +"3580280832","3580329983","RU" +"3580329984","3580338175","SE" +"3580338176","3580339711","HR" +"3580339712","3580340223","EE" +"3580340224","3580344319","LT" +"3580344320","3580345343","SE" +"3580345344","3580345855","EE" +"3580345856","3580354559","SE" +"3580354560","3580362751","LT" +"3580362752","3580473375","GB" +"3580473376","3580473391","IE" +"3580473392","3580473503","GB" +"3580473504","3580473511","IE" +"3580473512","3580473519","GB" +"3580473520","3580473527","IE" +"3580473528","3580473695","GB" +"3580473696","3580473727","IE" +"3580473728","3580473759","GB" +"3580473760","3580473887","IE" +"3580473888","3580473951","GB" +"3580473952","3580473959","IE" +"3580473960","3580473967","GB" +"3580473968","3580473983","IE" +"3580473984","3580473999","GB" +"3580474000","3580474007","IE" +"3580474008","3580474095","GB" +"3580474096","3580474111","IE" +"3580474112","3580474495","GB" +"3580474496","3580474559","IE" +"3580474560","3580474639","GB" +"3580474640","3580474647","IE" +"3580474648","3580474655","GB" +"3580474656","3580474671","IE" +"3580474672","3580474687","GB" +"3580474688","3580474703","IE" +"3580474704","3580474719","GB" +"3580474720","3580474735","IE" +"3580474736","3580474807","GB" +"3580474808","3580474879","IE" +"3580474880","3580475055","GB" +"3580475056","3580475063","IE" +"3580475064","3580475123","GB" +"3580475124","3580475127","IE" +"3580475128","3580475343","GB" +"3580475344","3580475351","IE" +"3580475352","3580624895","GB" +"3580624896","3580626943","RU" +"3580626944","3580628991","PL" +"3580628992","3580631039","RU" +"3580631040","3580632831","NL" +"3580632832","3580633087","GB" +"3580633088","3580635135","RU" +"3580635136","3580637183","UA" +"3580637184","3580639231","KZ" +"3580639232","3580641279","PL" +"3580641280","3580643327","FR" +"3580643328","3580645375","UA" +"3580645376","3580647423","PL" +"3580647424","3580649471","DE" +"3580649472","3580651519","SE" +"3580651520","3580653567","NL" +"3580653568","3580655615","PL" +"3580655616","3580657663","SK" +"3580657664","3580663807","RU" +"3580663808","3580665855","PL" +"3580665856","3580667903","CZ" +"3580667904","3580669951","RU" +"3580669952","3580671999","UA" +"3580672000","3580682239","RU" +"3580682240","3580684287","PL" +"3580684288","3580686335","FR" +"3580686336","3580688383","BG" +"3580688384","3580698623","RU" +"3580698624","3580702719","PL" +"3580702720","3580710911","RU" +"3580710912","3580715007","UA" +"3580715008","3580719103","RU" +"3580719104","3580723199","NL" +"3580723200","3580727295","UA" +"3580727296","3580731391","RU" +"3580731392","3580739583","RO" +"3580739584","3580743679","RU" +"3580743680","3580751871","UA" +"3580751872","3580755967","IR" +"3580755968","3580772351","RU" +"3580772352","3580780543","LV" +"3580780544","3580805119","UA" +"3580805120","3580821503","RU" +"3580821504","3580837887","FR" +"3580837888","3580887039","UA" +"3580887040","3581149183","SE" +"3581149184","3581150367","EU" +"3581150368","3581150463","IE" +"3581150464","3581150591","EU" +"3581150592","3581150719","NL" +"3581150720","3581150783","SE" +"3581150784","3581150975","EU" +"3581150976","3581151039","SE" +"3581151040","3581151231","EU" +"3581151232","3581151295","SE" +"3581151296","3581154047","EU" +"3581154048","3581154303","NL" +"3581154304","3581157119","EU" +"3581157120","3581158655","AT" +"3581158656","3581159167","EU" +"3581159168","3581159295","AT" +"3581159296","3581159423","EU" +"3581159424","3581161471","IE" +"3581161472","3581173759","EU" +"3581173760","3581196799","NL" +"3581196800","3581197311","EU" +"3581197312","3581197567","IE" +"3581197568","3581197823","EU" +"3581197824","3581198335","GB" +"3581198336","3581200127","NL" +"3581200128","3581203967","EU" +"3581203968","3581214719","SE" +"3581214720","3581231103","NL" +"3581231104","3581239295","EU" +"3581239296","3581241343","NL" +"3581241344","3581242623","EU" +"3581242624","3581245439","FR" +"3581245440","3581255679","EU" +"3581255680","3581259263","FR" +"3581259264","3581261311","EU" +"3581261312","3581261439","FR" +"3581261440","3581279103","EU" +"3581279104","3581279199","NL" +"3581279200","3581280255","EU" +"3581280256","3581411327","BE" +"3581411328","3581673471","GB" +"3581673472","3581935615","NL" +"3581935616","3581943807","RU" +"3581943808","3581951999","FR" +"3581952000","3581960191","TR" +"3581960192","3581966849","DE" +"3581966850","3581966850","EU" +"3581966851","3581976575","DE" +"3581976576","3581984767","NO" +"3581984768","3581992959","RU" +"3581992960","3582001151","GB" +"3582001152","3582009343","DK" +"3582009344","3582017535","RU" +"3582017536","3582025727","GB" +"3582025728","3582033919","RU" +"3582033920","3582042111","CZ" +"3582042112","3582050303","ES" +"3582050304","3582058495","NL" +"3582058496","3582066687","AT" +"3582066688","3582074879","UA" +"3582074880","3582076079","GB" +"3582076080","3582076095","AE" +"3582076096","3582076863","GB" +"3582076864","3582076895","DE" +"3582076896","3582076927","GB" +"3582076928","3582077111","ES" +"3582077112","3582077439","GB" +"3582077440","3582077471","DE" +"3582077472","3582077503","GB" +"3582077504","3582077791","DE" +"3582077792","3582078090","GB" +"3582078091","3582078091","CH" +"3582078092","3582078631","GB" +"3582078632","3582078639","DE" +"3582078640","3582081055","GB" +"3582081056","3582081087","ES" +"3582081088","3582081535","GB" +"3582081536","3582081791","DE" +"3582081792","3582083071","GB" +"3582083072","3582091263","BG" +"3582091264","3582099455","QA" +"3582099456","3582107647","GB" +"3582107648","3582115839","NL" +"3582115840","3582116095","SE" +"3582116096","3582116351","EE" +"3582116352","3582116863","NO" +"3582116864","3582117887","EE" +"3582117888","3582120447","LT" +"3582120448","3582120959","NO" +"3582120960","3582121983","EE" +"3582121984","3582124031","LT" +"3582124032","3582132223","FI" +"3582132224","3582140415","RU" +"3582140416","3582148607","GE" +"3582148608","3582156799","EG" +"3582156800","3582164991","GB" +"3582164992","3582173183","SE" +"3582173184","3582181375","GB" +"3582181376","3582190927","DE" +"3582190928","3582190931","FR" +"3582190932","3582192127","DE" +"3582192128","3582192143","NL" +"3582192144","3582193151","DE" +"3582193152","3582193407","EU" +"3582193408","3582194775","DE" +"3582194776","3582194783","CY" +"3582194784","3582197127","DE" +"3582197128","3582197135","BZ" +"3582197136","3582197759","DE" +"3582197760","3582205951","DK" +"3582205952","3582214143","AE" +"3582214144","3582222335","RU" +"3582222336","3582222383","SE" +"3582222384","3582222391","NO" +"3582222392","3582222511","SE" +"3582222512","3582222527","DK" +"3582222528","3582222863","SE" +"3582222864","3582222879","NO" +"3582222880","3582223087","SE" +"3582223088","3582223095","NL" +"3582223096","3582224375","SE" +"3582224376","3582224379","FI" +"3582224380","3582225719","SE" +"3582225720","3582225727","FI" +"3582225728","3582227391","SE" +"3582227392","3582227455","FI" +"3582227456","3582230527","SE" +"3582230528","3582238719","BE" +"3582238720","3582251319","NL" +"3582251320","3582251327","FI" +"3582251328","3582255103","NL" +"3582255104","3582263039","KW" +"3582263040","3582263295","A2" +"3582263296","3582271487","ME" +"3582271488","3582279679","NL" +"3582279680","3582287871","GB" +"3582287872","3582296063","DE" +"3582296064","3582304255","GB" +"3582304256","3582312447","UA" +"3582312448","3582313249","JE" +"3582313250","3582313250","GB" +"3582313251","3582313256","JE" +"3582313257","3582313260","GB" +"3582313261","3582313271","JE" +"3582313272","3582313342","GB" +"3582313343","3582313343","JE" +"3582313344","3582313470","GB" +"3582313471","3582313471","JE" +"3582313472","3582313559","GB" +"3582313560","3582313567","JE" +"3582313568","3582313599","GB" +"3582313600","3582313695","JE" +"3582313696","3582313726","GB" +"3582313727","3582313727","JE" +"3582313728","3582313743","GB" +"3582313744","3582313759","JE" +"3582313760","3582313775","GB" +"3582313776","3582313791","JE" +"3582313792","3582313799","GB" +"3582313800","3582313807","JE" +"3582313808","3582313871","GB" +"3582313872","3582313967","JE" +"3582313968","3582313982","GB" +"3582313983","3582313991","JE" +"3582313992","3582314007","GB" +"3582314008","3582314015","JE" +"3582314016","3582314079","GB" +"3582314080","3582314095","JE" +"3582314096","3582314119","GB" +"3582314120","3582314127","JE" +"3582314128","3582314167","GB" +"3582314168","3582314175","JE" +"3582314176","3582314187","GB" +"3582314188","3582314195","JE" +"3582314196","3582314199","GB" +"3582314200","3582314207","JE" +"3582314208","3582314235","GB" +"3582314236","3582314239","JE" +"3582314240","3582314263","GB" +"3582314264","3582314271","JE" +"3582314272","3582314303","GB" +"3582314304","3582314311","JE" +"3582314312","3582314343","GB" +"3582314344","3582314383","JE" +"3582314384","3582314399","GB" +"3582314400","3582314415","JE" +"3582314416","3582314443","GB" +"3582314444","3582314447","JE" +"3582314448","3582314451","GB" +"3582314452","3582314455","JE" +"3582314456","3582314491","GB" +"3582314492","3582314783","JE" +"3582314784","3582314879","GB" +"3582314880","3582314911","JE" +"3582314912","3582314943","GB" +"3582314944","3582314991","JE" +"3582314992","3582314999","GB" +"3582315000","3582315023","JE" +"3582315024","3582315063","GB" +"3582315064","3582315079","JE" +"3582315080","3582315095","GB" +"3582315096","3582315135","JE" +"3582315136","3582315191","GB" +"3582315192","3582315271","JE" +"3582315272","3582315279","GB" +"3582315280","3582315287","JE" +"3582315288","3582315302","GB" +"3582315303","3582315303","JE" +"3582315304","3582315327","GB" +"3582315328","3582315335","JE" +"3582315336","3582315343","GB" +"3582315344","3582315351","JE" +"3582315352","3582315383","GB" +"3582315384","3582315391","JE" +"3582315392","3582315463","GB" +"3582315464","3582315519","JE" +"3582315520","3582315775","GB" +"3582315776","3582316543","JE" +"3582316544","3582316863","GB" +"3582316864","3582316871","JE" +"3582316872","3582317055","GB" +"3582317056","3582317311","JE" +"3582317312","3582317479","GB" +"3582317480","3582317487","JE" +"3582317488","3582317567","GB" +"3582317568","3582318079","JE" +"3582318080","3582318399","GB" +"3582318400","3582318407","JE" +"3582318408","3582318511","GB" +"3582318512","3582318519","JE" +"3582318520","3582318591","GB" +"3582318592","3582318847","JE" +"3582318848","3582318935","GB" +"3582318936","3582318943","JE" +"3582318944","3582318999","GB" +"3582319000","3582319007","JE" +"3582319008","3582319103","GB" +"3582319104","3582319111","JE" +"3582319112","3582319359","GB" +"3582319360","3582319487","JE" +"3582319488","3582319870","GB" +"3582319871","3582319871","JE" +"3582319872","3582319879","GB" +"3582319880","3582319887","JE" +"3582319888","3582319895","GB" +"3582319896","3582319903","JE" +"3582319904","3582319927","GB" +"3582319928","3582319935","JE" +"3582319936","3582320207","GB" +"3582320208","3582320367","JE" +"3582320368","3582320375","GB" +"3582320376","3582320639","JE" +"3582320640","3582328831","CH" +"3582328832","3582337023","HU" +"3582337024","3582341119","ES" +"3582341120","3582343167","PT" +"3582343168","3582345215","ES" +"3582345216","3582353407","IT" +"3582353408","3582361599","SE" +"3582361600","3582377983","PL" +"3582377984","3582386175","RU" +"3582386176","3582394367","NL" +"3582394368","3582402559","DE" +"3582402560","3582410751","PL" +"3582410752","3582435327","RU" +"3582435328","3582443519","MK" +"3582443520","3582451711","DE" +"3582451712","3582459903","LU" +"3582459904","3582462143","NL" +"3582462144","3582462207","DE" +"3582462208","3582467135","NL" +"3582467136","3582467199","DE" +"3582467200","3582468095","NL" +"3582468096","3582476287","SE" +"3582476288","3582484479","DE" +"3582484480","3582492671","CI" +"3582492672","3582509055","IT" +"3582509056","3582517247","SA" +"3582517248","3582525439","PL" +"3582525440","3582525695","IM" +"3582525696","3582525743","GB" +"3582525744","3582525747","IM" +"3582525748","3582525879","GB" +"3582525880","3582525895","IM" +"3582525896","3582526059","GB" +"3582526060","3582526063","IM" +"3582526064","3582526135","GB" +"3582526136","3582526143","IM" +"3582526144","3582526151","GB" +"3582526152","3582526159","IM" +"3582526160","3582526463","GB" +"3582526464","3582526503","IM" +"3582526504","3582526623","GB" +"3582526624","3582526631","IM" +"3582526632","3582526671","GB" +"3582526672","3582526679","IM" +"3582526680","3582526719","GB" +"3582526720","3582526727","IM" +"3582526728","3582526815","GB" +"3582526816","3582526819","IM" +"3582526820","3582526911","GB" +"3582526912","3582526927","IM" +"3582526928","3582526935","GB" +"3582526936","3582526943","IM" +"3582526944","3582527231","GB" +"3582527232","3582527271","IM" +"3582527272","3582527303","GB" +"3582527304","3582527311","IM" +"3582527312","3582527327","GB" +"3582527328","3582527335","IM" +"3582527336","3582527479","GB" +"3582527480","3582527743","IM" +"3582527744","3582529023","GB" +"3582529024","3582530303","IM" +"3582530304","3582530399","GB" +"3582530400","3582530815","IM" +"3582530816","3582530951","GB" +"3582530952","3582530959","IM" +"3582530960","3582530979","GB" +"3582530980","3582530983","IM" +"3582530984","3582530991","GB" +"3582530992","3582530999","IM" +"3582531000","3582531031","GB" +"3582531032","3582531039","IM" +"3582531040","3582531135","GB" +"3582531136","3582531439","IM" +"3582531440","3582531471","GB" +"3582531472","3582531487","IM" +"3582531488","3582531503","GB" +"3582531504","3582531535","IM" +"3582531536","3582531551","GB" +"3582531552","3582531559","IM" +"3582531560","3582531583","GB" +"3582531584","3582531631","IM" +"3582531632","3582531651","GB" +"3582531652","3582531663","IM" +"3582531664","3582531671","GB" +"3582531672","3582531695","IM" +"3582531696","3582531767","GB" +"3582531768","3582531775","IM" +"3582531776","3582531783","GB" +"3582531784","3582531791","IM" +"3582531792","3582531799","GB" +"3582531800","3582531807","IM" +"3582531808","3582531823","GB" +"3582531824","3582532607","IM" +"3582532608","3582532927","GB" +"3582532928","3582532983","IM" +"3582532984","3582532991","GB" +"3582532992","3582533119","IM" +"3582533120","3582533631","GB" +"3582533632","3582538183","BG" +"3582538184","3582538191","GB" +"3582538192","3582541823","BG" +"3582541824","3582550015","US" +"3582550016","3582558207","RS" +"3582558208","3582566399","MC" +"3582566400","3582566431","EU" +"3582566432","3582566479","BE" +"3582566480","3582566527","EU" +"3582566528","3582566591","BE" +"3582566592","3582566735","EU" +"3582566736","3582566743","BE" +"3582566744","3582566751","EU" +"3582566752","3582566767","BE" +"3582566768","3582566783","EU" +"3582566784","3582566847","BE" +"3582566848","3582566911","EU" +"3582566912","3582567019","BE" +"3582567020","3582567023","EU" +"3582567024","3582567039","BE" +"3582567040","3582567135","EU" +"3582567136","3582567151","BE" +"3582567152","3582567231","EU" +"3582567232","3582567295","BE" +"3582567296","3582567391","EU" +"3582567392","3582567399","BE" +"3582567400","3582567423","EU" +"3582567424","3582567807","US" +"3582567808","3582567903","EU" +"3582567904","3582567935","US" +"3582567936","3582568215","EU" +"3582568216","3582568223","SE" +"3582568224","3582568247","EU" +"3582568248","3582568263","SE" +"3582568264","3582568335","EU" +"3582568336","3582568339","SE" +"3582568340","3582568439","EU" +"3582568440","3582568447","SE" +"3582568448","3582568703","US" +"3582568704","3582568831","EU" +"3582568832","3582568959","US" +"3582568960","3582568967","HU" +"3582568968","3582568991","EU" +"3582568992","3582569023","CZ" +"3582569024","3582569031","EU" +"3582569032","3582569035","AT" +"3582569036","3582569039","DE" +"3582569040","3582569043","AT" +"3582569044","3582569079","EU" +"3582569080","3582569087","HU" +"3582569088","3582569095","EU" +"3582569096","3582569103","HU" +"3582569104","3582569207","EU" +"3582569208","3582569215","AT" +"3582569216","3582569279","EU" +"3582569280","3582569303","AT" +"3582569304","3582569471","EU" +"3582569472","3582569535","FR" +"3582569536","3582569983","EU" +"3582569984","3582570239","FR" +"3582570240","3582570399","GB" +"3582570400","3582570431","FR" +"3582570432","3582570463","EU" +"3582570464","3582570487","FR" +"3582570488","3582570751","EU" +"3582570752","3582570823","FR" +"3582570824","3582570847","EU" +"3582570848","3582570855","FR" +"3582570856","3582570879","EU" +"3582570880","3582570883","FR" +"3582570884","3582570887","EU" +"3582570888","3582570895","FR" +"3582570896","3582570903","EU" +"3582570904","3582570975","FR" +"3582570976","3582570983","EU" +"3582570984","3582571031","FR" +"3582571032","3582571135","EU" +"3582571136","3582571263","FR" +"3582571264","3582571303","EU" +"3582571304","3582571307","CH" +"3582571308","3582571375","EU" +"3582571376","3582571391","FR" +"3582571392","3582571407","EU" +"3582571408","3582571423","FR" +"3582571424","3582571455","EU" +"3582571456","3582571487","FR" +"3582571488","3582571647","EU" +"3582571648","3582571687","IE" +"3582571688","3582571707","EU" +"3582571708","3582571719","IE" +"3582571720","3582571751","EU" +"3582571752","3582571839","IE" +"3582571840","3582571999","EU" +"3582572000","3582572015","IE" +"3582572016","3582572415","EU" +"3582572416","3582572431","CH" +"3582572432","3582572447","EU" +"3582572448","3582572451","CH" +"3582572452","3582572455","EU" +"3582572456","3582572459","CH" +"3582572460","3582572479","EU" +"3582572480","3582572543","CH" +"3582572544","3582572559","EU" +"3582572560","3582572567","DE" +"3582572568","3582572799","EU" +"3582572800","3582572863","DE" +"3582572864","3582572943","EU" +"3582572944","3582572951","DE" +"3582572952","3582572975","EU" +"3582572976","3582572983","DE" +"3582572984","3582573023","EU" +"3582573024","3582573055","DE" +"3582573056","3582573087","EU" +"3582573088","3582573095","DE" +"3582573096","3582573103","EU" +"3582573104","3582573111","DE" +"3582573112","3582573127","EU" +"3582573128","3582573135","DE" +"3582573136","3582573183","EU" +"3582573184","3582573215","DE" +"3582573216","3582573407","EU" +"3582573408","3582573423","DE" +"3582573424","3582573431","EU" +"3582573432","3582573439","DE" +"3582573440","3582573511","EU" +"3582573512","3582573519","DE" +"3582573520","3582573551","EU" +"3582573552","3582573567","DE" +"3582573568","3582573599","EU" +"3582573600","3582573615","CH" +"3582573616","3582573823","EU" +"3582573824","3582573887","CH" +"3582573888","3582573895","EU" +"3582573896","3582573903","CH" +"3582573904","3582573919","EU" +"3582573920","3582573951","CH" +"3582573952","3582574431","EU" +"3582574432","3582574435","CH" +"3582574436","3582574455","EU" +"3582574456","3582574463","CH" +"3582574464","3582574591","EU" +"3582574592","3582582783","DE" +"3582582784","3582590975","RU" +"3582590976","3582599167","FR" +"3582599168","3582607359","DE" +"3582607360","3582615551","RU" +"3582615552","3582623743","GB" +"3582623744","3582631935","FI" +"3582631936","3582635007","NO" +"3582635008","3582635263","SE" +"3582635264","3582640127","NO" +"3582640128","3582648319","RU" +"3582648320","3582656511","PT" +"3582656512","3582664047","ES" +"3582664048","3582664055","FR" +"3582664056","3582664703","ES" +"3582664704","3582672895","JO" +"3582672896","3582681087","DE" +"3582681088","3582689279","FR" +"3582689280","3582697471","DE" +"3582697472","3582705663","FI" +"3582705664","3582722047","TR" +"3582722048","3582730239","IT" +"3582730240","3582736383","ES" +"3582736384","3582737407","DZ" +"3582737408","3582738431","ES" +"3582738432","3582746623","DK" +"3582746624","3582754815","RU" +"3582754816","3582763007","GR" +"3582763008","3582771199","FI" +"3582771200","3582772479","CY" +"3582772480","3582772735","GB" +"3582772736","3582779391","CY" +"3582779392","3582787583","RU" +"3582787584","3582795775","PT" +"3582795776","3582803967","ES" +"3582803968","3582812159","SE" +"3582812160","3582820351","FI" +"3582820352","3582828543","RU" +"3582828544","3582836735","KZ" +"3582836736","3582853119","RU" +"3582853120","3582861311","SE" +"3582861312","3582869503","RU" +"3582869504","3582877695","NO" +"3582877696","3582885887","AT" +"3582885888","3582894079","TR" +"3582894080","3582902271","CH" +"3582902272","3582910463","RU" +"3582910464","3582917631","SI" +"3582917632","3582918655","LU" +"3582918656","3582926847","GB" +"3582926848","3582935039","ES" +"3582935040","3582943231","SI" +"3582943232","3582951423","AT" +"3582951424","3582959615","GB" +"3582959616","3582967807","FI" +"3582967808","3582975999","DE" +"3582976000","3582984191","TR" +"3582984192","3582992383","DE" +"3582992384","3583000575","ES" +"3583000576","3583008767","IT" +"3583008768","3583016959","TR" +"3583016960","3583019367","CH" +"3583019368","3583019375","DE" +"3583019376","3583023215","CH" +"3583023216","3583023223","DE" +"3583023224","3583025151","CH" +"3583025152","3583030783","A2" +"3583030784","3583031039","DZ" +"3583031040","3583031807","A2" +"3583031808","3583032063","GR" +"3583032064","3583033343","A2" +"3583033344","3583041535","FR" +"3583041536","3583049727","NL" +"3583049728","3583066111","RU" +"3583066112","3583074303","DE" +"3583074304","3583082495","BG" +"3583082496","3583090687","KG" +"3583090688","3583098879","NO" +"3583098880","3583107071","FI" +"3583107072","3583115263","AT" +"3583115264","3583123455","CH" +"3583123456","3583131647","PL" +"3583131648","3583139839","SE" +"3583139840","3583141727","DE" +"3583141728","3583141735","AT" +"3583141736","3583148031","DE" +"3583148032","3583157247","GB" +"3583157248","3583157279","IE" +"3583157280","3583157439","GB" +"3583157440","3583157471","IE" +"3583157472","3583157487","GB" +"3583157488","3583158015","IE" +"3583158016","3583158511","GB" +"3583158512","3583158527","IE" +"3583158528","3583158783","GB" +"3583158784","3583159039","DE" +"3583159040","3583160319","GB" +"3583160320","3583161343","DE" +"3583161344","3583162271","GB" +"3583162272","3583162303","IE" +"3583162304","3583162367","GB" +"3583162368","3583162623","DE" +"3583162624","3583163391","GB" +"3583163392","3583163903","IE" +"3583163904","3583164415","GB" +"3583164416","3583172607","PT" +"3583172608","3583188991","DE" +"3583188992","3583197183","RU" +"3583197184","3583205375","KE" +"3583205376","3583213567","HR" +"3583213568","3583221759","IR" +"3583221760","3583229951","AT" +"3583229952","3583238143","RU" +"3583238144","3583246335","GB" +"3583246336","3583254527","RU" +"3583254528","3583262719","GB" +"3583262720","3583270911","TR" +"3583270912","3583283743","DE" +"3583283744","3583283747","A2" +"3583283748","3583283867","DE" +"3583283868","3583283871","A2" +"3583283872","3583287295","DE" +"3583287296","3583295487","RU" +"3583295488","3583303679","ES" +"3583303680","3583311871","NL" +"3583311872","3583320063","RU" +"3583320064","3583328255","HR" +"3583328256","3583336447","DE" +"3583336448","3583337727","ME" +"3583337728","3583337983","AL" +"3583337984","3583344639","ME" +"3583344640","3583345663","BG" +"3583345664","3583346175","MK" +"3583346176","3583346687","BG" +"3583346688","3583346943","MK" +"3583346944","3583350271","BG" +"3583350272","3583351039","MK" +"3583351040","3583351807","BG" +"3583351808","3583352063","MK" +"3583352064","3583352319","BG" +"3583352320","3583352831","MK" +"3583352832","3583361023","CY" +"3583361024","3583369215","IT" +"3583369216","3583377407","ES" +"3583377408","3583385599","AT" +"3583385600","3583393791","DK" +"3583393792","3583401983","RU" +"3583401984","3583410175","KE" +"3583410176","3583418367","SE" +"3583418368","3583426559","TN" +"3583426560","3583434751","CI" +"3583434752","3583442943","AT" +"3583442944","3583451135","UA" +"3583451136","3583459327","IL" +"3583459328","3583463891","CZ" +"3583463892","3583463895","PL" +"3583463896","3583467111","CZ" +"3583467112","3583467119","PL" +"3583467120","3583467519","CZ" +"3583467520","3583475711","ES" +"3583475712","3583483903","NO" +"3583483904","3583492095","FR" +"3583492096","3583508479","SK" +"3583508480","3583516671","FR" +"3583516672","3583524863","GB" +"3583524864","3583533055","EG" +"3583533056","3583541247","DE" +"3583541248","3583549439","RU" +"3583549440","3583557631","NL" +"3583557632","3583561471","IT" +"3583561472","3583561503","SM" +"3583561504","3583565823","IT" +"3583565824","3583574015","GB" +"3583574016","3583582207","NO" +"3583582208","3583590399","AT" +"3583590400","3583598591","DE" +"3583598592","3583606783","SE" +"3583606784","3583639551","TR" +"3583639552","3583647743","AZ" +"3583647744","3583655935","EG" +"3583655936","3583664127","SN" +"3583664128","3583680511","RO" +"3583680512","3583688703","RU" +"3583688704","3583696895","UA" +"3583696896","3583705087","NL" +"3583705088","3583705255","UA" +"3583705256","3583705263","NA" +"3583705264","3583705303","UA" +"3583705304","3583705319","NA" +"3583705320","3583705335","UA" +"3583705336","3583705343","NA" +"3583705344","3583705471","UA" +"3583705472","3583705487","NA" +"3583705488","3583705495","UA" +"3583705496","3583705503","NA" +"3583705504","3583705603","UA" +"3583705604","3583705607","NA" +"3583705608","3583705647","UA" +"3583705648","3583705663","NA" +"3583705664","3583705727","UA" +"3583705728","3583705791","NA" +"3583705792","3583705831","UA" +"3583705832","3583705839","NA" +"3583705840","3583705847","UA" +"3583705848","3583705855","NA" +"3583705856","3583705859","UA" +"3583705860","3583705863","NA" +"3583705864","3583706023","UA" +"3583706024","3583706031","NA" +"3583706032","3583706055","UA" +"3583706056","3583706063","RU" +"3583706064","3583706103","UA" +"3583706104","3583706107","NA" +"3583706108","3583706191","UA" +"3583706192","3583706199","NA" +"3583706200","3583706295","UA" +"3583706296","3583706319","NA" +"3583706320","3583706463","UA" +"3583706464","3583706471","NA" +"3583706472","3583706495","UA" +"3583706496","3583706511","NA" +"3583706512","3583706519","UA" +"3583706520","3583706527","NA" +"3583706528","3583706575","UA" +"3583706576","3583706583","NA" +"3583706584","3583706591","UA" +"3583706592","3583706607","NA" +"3583706608","3583706615","UA" +"3583706616","3583706623","NA" +"3583706624","3583706695","UA" +"3583706696","3583706711","NA" +"3583706712","3583706743","UA" +"3583706744","3583706767","NA" +"3583706768","3583706775","UA" +"3583706776","3583706791","NA" +"3583706792","3583706807","UA" +"3583706808","3583706815","NA" +"3583706816","3583706863","UA" +"3583706864","3583706879","NA" +"3583706880","3583706883","UA" +"3583706884","3583706887","NA" +"3583706888","3583706903","UA" +"3583706904","3583706911","NA" +"3583706912","3583706927","UA" +"3583706928","3583706943","NA" +"3583706944","3583706959","UA" +"3583706960","3583706967","NA" +"3583706968","3583706991","UA" +"3583706992","3583706999","NA" +"3583707000","3583707015","UA" +"3583707016","3583707023","NA" +"3583707024","3583707031","UA" +"3583707032","3583707039","NA" +"3583707040","3583707071","UA" +"3583707072","3583707111","NA" +"3583707112","3583707127","UA" +"3583707128","3583707135","NA" +"3583707136","3583707215","UA" +"3583707216","3583707223","NA" +"3583707224","3583707519","UA" +"3583707520","3583707535","NA" +"3583707536","3583707751","UA" +"3583707752","3583707759","NA" +"3583707760","3583707807","UA" +"3583707808","3583707815","NA" +"3583707816","3583707839","UA" +"3583707840","3583707855","NA" +"3583707856","3583708031","UA" +"3583708032","3583708032","NA" +"3583708033","3583708040","UA" +"3583708041","3583708095","NA" +"3583708096","3583708167","UA" +"3583708168","3583708175","NA" +"3583708176","3583708231","UA" +"3583708232","3583708239","NA" +"3583708240","3583708423","UA" +"3583708424","3583708431","NA" +"3583708432","3583708479","UA" +"3583708480","3583708543","NA" +"3583708544","3583708575","UA" +"3583708576","3583708583","NA" +"3583708584","3583708607","UA" +"3583708608","3583708623","NA" +"3583708624","3583709447","UA" +"3583709448","3583709455","NA" +"3583709456","3583709503","UA" +"3583709504","3583709511","RU" +"3583709512","3583709607","UA" +"3583709608","3583709615","RU" +"3583709616","3583709699","UA" +"3583709700","3583709703","NA" +"3583709704","3583709759","UA" +"3583709760","3583709767","NA" +"3583709768","3583709847","UA" +"3583709848","3583709855","NA" +"3583709856","3583709863","UA" +"3583709864","3583709871","RU" +"3583709872","3583709887","UA" +"3583709888","3583709911","NA" +"3583709912","3583709927","UA" +"3583709928","3583709943","NA" +"3583709944","3583710055","UA" +"3583710056","3583710072","NA" +"3583710073","3583710079","UA" +"3583710080","3583710087","NA" +"3583710088","3583710103","UA" +"3583710104","3583710111","NA" +"3583710112","3583710119","UA" +"3583710120","3583710135","NA" +"3583710136","3583710211","UA" +"3583710212","3583710215","NA" +"3583710216","3583710319","UA" +"3583710320","3583710327","NA" +"3583710328","3583710367","UA" +"3583710368","3583710375","AQ" +"3583710376","3583710383","NA" +"3583710384","3583710407","UA" +"3583710408","3583710415","NA" +"3583710416","3583710455","UA" +"3583710456","3583710459","NA" +"3583710460","3583710631","UA" +"3583710632","3583710639","NA" +"3583710640","3583710703","UA" +"3583710704","3583710711","NA" +"3583710712","3583710743","UA" +"3583710744","3583710751","BE" +"3583710752","3583710887","UA" +"3583710888","3583710895","NA" +"3583710896","3583711247","UA" +"3583711248","3583711255","NA" +"3583711256","3583711327","UA" +"3583711328","3583711335","NA" +"3583711336","3583711359","UA" +"3583711360","3583711367","NA" +"3583711368","3583711375","UA" +"3583711376","3583711383","NA" +"3583711384","3583711711","UA" +"3583711712","3583711719","NA" +"3583711720","3583711783","UA" +"3583711784","3583711799","NA" +"3583711800","3583711815","UA" +"3583711816","3583711823","NA" +"3583711824","3583712015","UA" +"3583712016","3583712023","NA" +"3583712024","3583712119","UA" +"3583712120","3583712127","NA" +"3583712128","3583712159","UA" +"3583712160","3583712191","NA" +"3583712192","3583712455","UA" +"3583712456","3583712463","NA" +"3583712464","3583712471","UA" +"3583712472","3583712479","NA" +"3583712480","3583712527","UA" +"3583712528","3583712535","IN" +"3583712536","3583712607","UA" +"3583712608","3583712615","HU" +"3583712616","3583713007","UA" +"3583713008","3583713015","RU" +"3583713016","3583713279","UA" +"3583713280","3583721471","CZ" +"3583721472","3583729663","DE" +"3583729664","3583737855","TR" +"3583737856","3583740671","EU" +"3583740672","3583741183","GB" +"3583741184","3583741439","EU" +"3583741440","3583741695","GB" +"3583741696","3583741951","NL" +"3583741952","3583742719","EU" +"3583742720","3583743487","DE" +"3583743488","3583743503","FR" +"3583743504","3583743519","EU" +"3583743520","3583743551","FR" +"3583743552","3583743615","EU" +"3583743616","3583743743","GB" +"3583743744","3583743775","EU" +"3583743776","3583743807","NL" +"3583743808","3583743975","EU" +"3583743976","3583743976","GB" +"3583743977","3583743977","IE" +"3583743978","3583743983","GB" +"3583743984","3583744063","EU" +"3583744064","3583744067","FR" +"3583744068","3583744071","GB" +"3583744072","3583744095","EU" +"3583744096","3583744099","DE" +"3583744100","3583744103","FR" +"3583744104","3583744111","GB" +"3583744112","3583744127","EU" +"3583744128","3583744255","PL" +"3583744256","3583744287","EU" +"3583744288","3583744303","GB" +"3583744304","3583744319","EU" +"3583744320","3583744447","GB" +"3583744448","3583744471","EU" +"3583744472","3583744479","FR" +"3583744480","3583744487","GB" +"3583744488","3583744511","EU" +"3583744512","3583744767","GB" +"3583744768","3583744831","DE" +"3583744832","3583744927","EU" +"3583744928","3583744959","DE" +"3583744960","3583744991","GB" +"3583744992","3583744999","EU" +"3583745000","3583745003","NL" +"3583745004","3583745215","EU" +"3583745216","3583745279","SE" +"3583745280","3583745535","GB" +"3583745536","3583745663","SE" +"3583745664","3583745719","EU" +"3583745720","3583745723","FR" +"3583745724","3583745799","EU" +"3583745800","3583745807","NL" +"3583745808","3583745823","GB" +"3583745824","3583745855","EU" +"3583745856","3583745919","SE" +"3583745920","3583745951","GB" +"3583745952","3583745983","EU" +"3583745984","3583746047","CH" +"3583746048","3583754239","PL" +"3583754240","3583762431","RU" +"3583762432","3583770623","CZ" +"3583770624","3583772351","NL" +"3583772352","3583772367","IT" +"3583772368","3583778815","NL" +"3583778816","3583787007","IT" +"3583787008","3583795199","UA" +"3583795200","3583803391","PL" +"3583803392","3583806719","RU" +"3583806720","3583806975","BY" +"3583806976","3583811583","RU" +"3583811584","3583811839","GB" +"3583811840","3583819775","DE" +"3583819776","3583827967","RU" +"3583827968","3583836159","CH" +"3583836160","3583844351","DE" +"3583844352","3583852543","KZ" +"3583852544","3583853055","SG" +"3583853056","3583854591","FI" +"3583854592","3583854726","GB" +"3583854727","3583854727","FI" +"3583854728","3583854871","GB" +"3583854872","3583854879","FI" +"3583854880","3583854927","GB" +"3583854928","3583854943","FI" +"3583854944","3583855103","GB" +"3583855104","3583855167","US" +"3583855168","3583855175","FI" +"3583855176","3583855183","US" +"3583855184","3583855191","FI" +"3583855192","3583855199","US" +"3583855200","3583855207","FI" +"3583855208","3583855247","US" +"3583855248","3583855311","FI" +"3583855312","3583855327","US" +"3583855328","3583856383","FI" +"3583856384","3583856510","SG" +"3583856511","3583856511","FI" +"3583856512","3583856590","SG" +"3583856591","3583856615","FI" +"3583856616","3583856639","SG" +"3583856640","3583860735","FI" +"3583860736","3583868927","HU" +"3583868928","3583877119","AT" +"3583877120","3583882239","RO" +"3583882240","3583882751","HU" +"3583882752","3583885311","RO" +"3583885312","3583893503","GE" +"3583893504","3583901695","SI" +"3583901696","3583909887","RU" +"3583909888","3583918079","SE" +"3583918080","3583926271","IT" +"3583926272","3583934463","DE" +"3583934464","3583942655","CH" +"3583942656","3583950847","EG" +"3583950848","3583959039","PL" +"3583959040","3583967231","NO" +"3583967232","3583975423","NL" +"3583975424","3583983615","LT" +"3583983616","3583999999","RU" +"3584000000","3584008191","IE" +"3584008192","3584016383","SE" +"3584016384","3584024575","RU" +"3584024576","3584032767","UA" +"3584032768","3584040959","DE" +"3584040960","3584049151","CH" +"3584049152","3584055911","DE" +"3584055912","3584055919","TR" +"3584055920","3584057343","DE" +"3584057344","3584065535","GB" +"3584065536","3584073727","UA" +"3584073728","3584081919","SK" +"3584081920","3584081951","AT" +"3584081952","3584081959","NL" +"3584081960","3584082143","AT" +"3584082144","3584082175","NL" +"3584082176","3584082279","AT" +"3584082280","3584082287","NL" +"3584082288","3584082943","AT" +"3584082944","3584089087","NL" +"3584089088","3584089855","AT" +"3584089856","3584089871","NL" +"3584089872","3584089903","AT" +"3584089904","3584089919","NL" +"3584089920","3584090111","AT" +"3584090112","3584090623","NO" +"3584090624","3584090879","NL" +"3584090880","3584090887","NO" +"3584090888","3584090895","NL" +"3584090896","3584090943","NO" +"3584090944","3584090959","NL" +"3584090960","3584091135","NO" +"3584091136","3584091391","NL" +"3584091392","3584093783","NO" +"3584093784","3584093791","NL" +"3584093792","3584094893","NO" +"3584094894","3584094895","NL" +"3584094896","3584095807","NO" +"3584095808","3584095855","NL" +"3584095856","3584095935","NO" +"3584095936","3584095999","NL" +"3584096000","3584096255","NO" +"3584096256","3584098303","NL" +"3584098304","3584106495","SI" +"3584106496","3584114687","FI" +"3584114688","3584120063","GB" +"3584120064","3584120319","EU" +"3584120320","3584122879","GB" +"3584122880","3584131071","PL" +"3584131072","3584139263","TR" +"3584139264","3584147455","NO" +"3584147456","3584155647","FR" +"3584155648","3584163839","NO" +"3584163840","3584172031","CH" +"3584172032","3584180223","FR" +"3584180224","3584188415","AT" +"3584188416","3584196607","GB" +"3584196608","3584204799","DE" +"3584204800","3584212991","NL" +"3584212992","3584221183","ES" +"3584221184","3584229375","NO" +"3584229376","3584245759","HU" +"3584245760","3584245802","NL" +"3584245803","3584245803","A1" +"3584245804","3584246065","NL" +"3584246066","3584246066","A1" +"3584246067","3584247651","NL" +"3584247652","3584247652","A1" +"3584247653","3584247956","NL" +"3584247957","3584247957","A1" +"3584247958","3584253951","NL" +"3584253952","3584256273","AL" +"3584256274","3584256274","US" +"3584256275","3584260095","AL" +"3584260096","3584260135","ME" +"3584260136","3584260139","RS" +"3584260140","3584260151","ME" +"3584260152","3584260155","RS" +"3584260156","3584260231","ME" +"3584260232","3584260239","RS" +"3584260240","3584260247","ME" +"3584260248","3584260255","RS" +"3584260256","3584260351","ME" +"3584260352","3584260415","RS" +"3584260416","3584260511","ME" +"3584260512","3584260607","AL" +"3584260608","3584260863","ME" +"3584260864","3584260991","RS" +"3584260992","3584261119","AL" +"3584261120","3584261375","ME" +"3584261376","3584262143","AL" +"3584262144","3584270335","SE" +"3584270336","3584278527","FR" +"3584278528","3584286719","GB" +"3584286720","3584295759","AT" +"3584295760","3584295767","PT" +"3584295768","3584295807","AT" +"3584295808","3584295815","PT" +"3584295816","3584303103","AT" +"3584303104","3584311295","ES" +"3584311296","3584319487","DE" +"3584319488","3584327679","LT" +"3584327680","3584332519","DE" +"3584332520","3584332527","NL" +"3584332528","3584335871","DE" +"3584335872","3584344063","ES" +"3584344064","3584352255","SE" +"3584352256","3584360447","RO" +"3584360448","3584368639","GB" +"3584368640","3584376831","SA" +"3584376832","3584379135","DE" +"3584379136","3584379391","IT" +"3584379392","3584393215","DE" +"3584393216","3584401407","GB" +"3584401408","3584409599","MT" +"3584409600","3584413439","RU" +"3584413440","3584413695","DE" +"3584413696","3584414207","GB" +"3584414208","3584414719","RU" +"3584414720","3584414975","DE" +"3584414976","3584416255","RU" +"3584416256","3584416767","GB" +"3584416768","3584417791","RU" +"3584417792","3584434175","GB" +"3584434176","3584442367","LU" +"3584442368","3584450559","GB" +"3584450560","3584458751","EU" +"3584458752","3584466943","SA" +"3584466944","3584475135","NO" +"3584475136","3584483327","FR" +"3584483328","3584491519","DE" +"3584491520","3584499711","BG" +"3584499712","3584507903","RU" +"3584507904","3584508927","GB" +"3584508928","3584508943","CY" +"3584508944","3584508951","KY" +"3584508952","3584509231","GB" +"3584509232","3584509239","AW" +"3584509240","3584510999","GB" +"3584511000","3584511007","KY" +"3584511008","3584511023","GB" +"3584511024","3584511039","KY" +"3584511040","3584511055","GB" +"3584511056","3584511071","NL" +"3584511072","3584511807","GB" +"3584511808","3584511871","MT" +"3584511872","3584513535","GB" +"3584513536","3584513567","US" +"3584513568","3584516071","GB" +"3584516072","3584516079","BB" +"3584516080","3584516095","GB" +"3584516096","3584524287","NO" +"3584524288","3584532479","IS" +"3584532480","3584540671","DE" +"3584540672","3584548863","RU" +"3584548864","3584557055","ES" +"3584557056","3584565247","EE" +"3584565248","3584573439","RU" +"3584573440","3584589823","DE" +"3584589824","3584598015","RU" +"3584598016","3584606207","CZ" +"3584606208","3584614399","DE" +"3584614400","3584614495","GB" +"3584614496","3584614527","IE" +"3584614528","3584614591","GB" +"3584614592","3584614623","IE" +"3584614624","3584614655","GB" +"3584614656","3584614751","IE" +"3584614752","3584614759","GB" +"3584614760","3584614763","IE" +"3584614764","3584614767","GB" +"3584614768","3584615167","IE" +"3584615168","3584615327","GB" +"3584615328","3584622335","IE" +"3584622336","3584622591","GB" +"3584622592","3584630783","FI" +"3584630784","3584635799","BG" +"3584635800","3584635800","A1" +"3584635801","3584638975","BG" +"3584638976","3584647167","UA" +"3584647168","3584648191","LU" +"3584648192","3584648447","IT" +"3584648448","3584649983","LU" +"3584649984","3584650239","EU" +"3584650240","3584655359","LU" +"3584655360","3584663551","CY" +"3584663552","3584671743","FR" +"3584671744","3584688127","NL" +"3584688128","3584696319","GB" +"3584696320","3584701751","ES" +"3584701752","3584701823","NL" +"3584701824","3584701991","ES" +"3584701992","3584702007","CH" +"3584702008","3584703095","ES" +"3584703096","3584703103","BE" +"3584703104","3584704511","ES" +"3584704512","3584720895","RU" +"3584720896","3584729087","GB" +"3584729088","3584737279","DE" +"3584737280","3584745471","GR" +"3584745472","3584753663","DK" +"3584753664","3584770047","RU" +"3584770048","3584778239","NL" +"3584778240","3584786431","IT" +"3584786432","3584794623","NL" +"3584794624","3584802815","IT" +"3584802816","3584811007","GB" +"3584811008","3584819199","ES" +"3584819200","3584827391","RU" +"3584827392","3584835583","ES" +"3584835584","3584843775","AZ" +"3584843776","3584850873","DE" +"3584850874","3584850874","US" +"3584850875","3584851967","DE" +"3584860160","3584868351","PL" +"3584868352","3584876543","NO" +"3584876544","3584884735","SI" +"3584884736","3584892927","DE" +"3584892928","3584901119","IL" +"3584901120","3584909311","AT" +"3584909312","3584917503","IT" +"3584917504","3584925695","FI" +"3584925696","3584927039","CH" +"3584927040","3584927047","DE" +"3584927048","3584928275","CH" +"3584928276","3584928279","IT" +"3584928280","3584929599","CH" +"3584929600","3584929727","DE" +"3584929728","3584931375","CH" +"3584931376","3584931391","ES" +"3584931392","3584932295","CH" +"3584932296","3584932303","DE" +"3584932304","3584933887","CH" +"3584933888","3584942079","NO" +"3584942080","3584950271","DK" +"3584950272","3584958463","UA" +"3584958464","3584966655","DE" +"3584966656","3584972799","DK" +"3584972800","3584973823","SE" +"3584973824","3584974591","DK" +"3584974592","3584974847","SE" +"3584974848","3584983039","FR" +"3584983040","3584991231","US" +"3584991232","3584999423","IT" +"3584999424","3585007615","GB" +"3585007616","3585015807","AT" +"3585015808","3585023999","IT" +"3585024000","3585032191","CZ" +"3585032192","3585048575","LV" +"3585048576","3585050879","GB" +"3585050880","3585051391","A2" +"3585051392","3585056767","GB" +"3585056768","3585064959","LB" +"3585064960","3585081343","GB" +"3585081344","3585114111","IR" +"3585114112","3585122303","IS" +"3585122304","3585130495","ES" +"3585130496","3585138687","FR" +"3585138688","3585146879","RU" +"3585146880","3585155071","RO" +"3585155072","3585163263","GB" +"3585163264","3585171455","BE" +"3585171456","3585179647","RU" +"3585179648","3585187839","BE" +"3585187840","3585188095","DZ" +"3585188096","3585188863","BE" +"3585188864","3585189119","DZ" +"3585189120","3585189887","BE" +"3585189888","3585190399","DZ" +"3585190400","3585190527","BE" +"3585190528","3585190655","DZ" +"3585190656","3585196031","BE" +"3585196032","3585204223","ES" +"3585204224","3585212415","GB" +"3585212416","3585220607","DE" +"3585220608","3585228799","RU" +"3585228800","3585236991","DE" +"3585236992","3585245183","HU" +"3585245184","3585253375","GB" +"3585253376","3585261567","DE" +"3585261568","3585269759","IT" +"3585269760","3585277951","SY" +"3585277952","3585286143","SE" +"3585286144","3585289095","NO" +"3585289096","3585289215","GB" +"3585289216","3585289552","NO" +"3585289553","3585289599","GB" +"3585289600","3585289631","NO" +"3585289632","3585290751","GB" +"3585290752","3585290759","NO" +"3585290760","3585290783","GB" +"3585290784","3585290975","NO" +"3585290976","3585291007","GB" +"3585291008","3585293023","NO" +"3585293024","3585293055","GB" +"3585293056","3585293215","NO" +"3585293216","3585293263","GB" +"3585293264","3585293271","ZA" +"3585293272","3585293327","GB" +"3585293328","3585293335","SE" +"3585293336","3585293343","NL" +"3585293344","3585294335","GB" +"3585294336","3585302527","DE" +"3585302528","3585310719","ES" +"3585310720","3585318911","DE" +"3585318912","3585327103","DZ" +"3585327104","3585332223","NL" +"3585332224","3585332351","A1" +"3585332352","3585335295","NL" +"3585335296","3585343487","UA" +"3585343488","3585351679","EE" +"3585351680","3585359871","CZ" +"3585359872","3585368063","SE" +"3585368064","3585376255","LV" +"3585376256","3585384447","PL" +"3585384448","3585392639","CH" +"3585392640","3585400831","RU" +"3585400832","3585409023","A2" +"3585409024","3585417215","RU" +"3585417216","3585425407","BE" +"3585425408","3585433599","ES" +"3585433600","3585441791","IS" +"3585441792","3585449983","SK" +"3585449984","3585458175","SA" +"3585458176","3585466367","HU" +"3585466368","3585474559","EG" +"3585474560","3585482751","DE" +"3585482752","3585490943","FR" +"3585490944","3585499135","IT" +"3585499136","3585515519","DE" +"3585515520","3585523711","RU" +"3585523712","3585531903","LV" +"3585531904","3585540095","AT" +"3585540096","3585542335","DE" +"3585542336","3585542351","TR" +"3585542352","3585544903","DE" +"3585544904","3585544911","CH" +"3585544912","3585544927","TR" +"3585544928","3585548287","DE" +"3585548288","3585556479","RU" +"3585556480","3585558783","DE" +"3585558784","3585559039","US" +"3585559040","3585564671","DE" +"3585564672","3585572863","RU" +"3585572864","3585581055","IT" +"3585581056","3585597439","DE" +"3585597440","3585605631","RU" +"3585605632","3585613823","PL" +"3585613824","3585622015","EE" +"3585622016","3585630207","RU" +"3585630208","3585638399","RS" +"3585638400","3585646591","RU" +"3585646592","3585654783","SA" +"3585654784","3585655631","NO" +"3585655632","3585655639","US" +"3585655640","3585662975","NO" +"3585662976","3585671167","BY" +"3585671168","3585672191","SE" +"3585672192","3585672447","DK" +"3585672448","3585672959","SE" +"3585672960","3585673983","DK" +"3585673984","3585674239","SE" +"3585674240","3585675775","DK" +"3585675776","3585676287","SE" +"3585676288","3585677055","DK" +"3585677056","3585677311","SE" +"3585677312","3585677567","DK" +"3585677568","3585679359","SE" +"3585679360","3585687551","FI" +"3585687552","3585695743","DE" +"3585695744","3585695999","CM" +"3585696000","3585696063","BD" +"3585696064","3585696511","A2" +"3585696512","3585696767","LB" +"3585696768","3585696799","NO" +"3585696800","3585696831","LR" +"3585696832","3585696847","GB" +"3585696848","3585697023","A2" +"3585697024","3585697279","GB" +"3585697280","3585697535","NO" +"3585697536","3585697791","A2" +"3585697792","3585698047","NG" +"3585698048","3585698303","A2" +"3585698304","3585698559","US" +"3585698560","3585698815","A2" +"3585698816","3585699071","GB" +"3585699072","3585699583","A2" +"3585699584","3585699711","US" +"3585699712","3585699839","AU" +"3585699840","3585700095","IQ" +"3585700096","3585700159","NG" +"3585700160","3585700191","A2" +"3585700192","3585700223","NG" +"3585700224","3585700231","A2" +"3585700232","3585700239","US" +"3585700240","3585700255","ZA" +"3585700256","3585700271","A2" +"3585700272","3585700287","NG" +"3585700288","3585700303","A2" +"3585700304","3585700319","NG" +"3585700320","3585700343","AU" +"3585700344","3585700351","ZA" +"3585700352","3585700607","NG" +"3585700608","3585700863","TZ" +"3585700864","3585701119","IQ" +"3585701120","3585701375","US" +"3585701376","3585701439","MW" +"3585701440","3585701503","A2" +"3585701504","3585701519","NG" +"3585701520","3585701535","CA" +"3585701536","3585701631","NG" +"3585701632","3585701887","A2" +"3585701888","3585702143","FR" +"3585702144","3585702399","LR" +"3585702400","3585702527","US" +"3585702528","3585702655","TZ" +"3585702656","3585702911","TG" +"3585702912","3585703167","NG" +"3585703168","3585703423","FR" +"3585703424","3585703935","A2" +"3585703936","3585712127","DE" +"3585712128","3585716335","AT" +"3585716336","3585716351","DE" +"3585716352","3585720319","AT" +"3585720320","3585728511","GB" +"3585728512","3585736703","SE" +"3585736704","3585744895","HR" +"3585744896","3585749295","FR" +"3585749296","3585749311","ES" +"3585749312","3585750015","FR" +"3585750016","3585750031","GB" +"3585750032","3585750271","FR" +"3585750272","3585750287","ES" +"3585750288","3585750335","FR" +"3585750336","3585750351","GB" +"3585750352","3585750367","DE" +"3585750368","3585750383","ES" +"3585750384","3585750399","PT" +"3585750400","3585750447","FR" +"3585750448","3585750463","DE" +"3585750464","3585753087","FR" +"3585753088","3585761279","PL" +"3585761280","3585769471","UA" +"3585769472","3585777663","TR" +"3585777664","3585785855","JO" +"3585785856","3585794047","UA" +"3585794048","3585802239","FI" +"3585802240","3585810431","IT" +"3585810432","3585818623","GB" +"3585818624","3585826815","DE" +"3585826816","3585835007","RU" +"3585835008","3585835023","GB" +"3585835024","3585835775","NL" +"3585835776","3585835839","GQ" +"3585835840","3585835847","AO" +"3585835848","3585835871","NL" +"3585835872","3585835879","IQ" +"3585835880","3585835895","NL" +"3585835896","3585835903","IQ" +"3585835904","3585835911","NL" +"3585835912","3585835919","KE" +"3585835920","3585836287","NL" +"3585836288","3585836543","CH" +"3585836544","3585837055","DZ" +"3585837056","3585837567","IQ" +"3585837568","3585838143","AO" +"3585838144","3585838207","NA" +"3585838208","3585838247","NL" +"3585838248","3585838255","AO" +"3585838256","3585838271","NL" +"3585838272","3585838279","AO" +"3585838280","3585838295","NL" +"3585838296","3585838303","AO" +"3585838304","3585838719","NL" +"3585838720","3585838847","NG" +"3585838848","3585838879","NL" +"3585838880","3585838911","IQ" +"3585838912","3585838975","NG" +"3585838976","3585839103","DZ" +"3585839104","3585840127","NL" +"3585840128","3585841151","US" +"3585841152","3585841407","NL" +"3585841408","3585841411","NG" +"3585841412","3585841919","NL" +"3585841920","3585842175","NG" +"3585842176","3585842199","IQ" +"3585842200","3585842207","NL" +"3585842208","3585842687","IQ" +"3585842688","3585842943","US" +"3585842944","3585843199","NL" +"3585843200","3585851391","NO" +"3585851392","3585859583","SE" +"3585859584","3585860607","RU" +"3585860608","3585863679","DE" +"3585863680","3585864703","RU" +"3585864704","3585865471","DE" +"3585865472","3585865727","LB" +"3585865728","3585867775","RU" +"3585867776","3585875967","NO" +"3585875968","3585884159","CH" +"3585884160","3585892351","IQ" +"3585892352","3585900543","DE" +"3585900544","3585902239","NO" +"3585902240","3585902271","GB" +"3585902272","3585902447","NO" +"3585902448","3585902463","GB" +"3585902464","3585908735","NO" +"3585908736","3585908991","GP" +"3585908992","3585909759","GF" +"3585909760","3585910015","GP" +"3585910016","3585910271","MQ" +"3585910272","3585910527","GP" +"3585910528","3585910783","FR" +"3585910784","3585911039","GP" +"3585911040","3585911295","FR" +"3585911296","3585913087","GP" +"3585913088","3585913343","FR" +"3585913344","3585914623","GP" +"3585914624","3585914879","GF" +"3585914880","3585915135","MQ" +"3585915136","3585915647","GP" +"3585915648","3585915903","FR" +"3585915904","3585916159","GP" +"3585916160","3585916671","FR" +"3585916672","3585916927","MQ" +"3585916928","3585925119","IT" +"3585925120","3585933311","CH" +"3585933312","3585936127","NL" +"3585936128","3585937407","US" +"3585937408","3585940479","NL" +"3585940480","3585940735","BE" +"3585940736","3585941503","NL" +"3585941504","3585943135","PL" +"3585943136","3585943167","HU" +"3585943168","3585949695","PL" +"3585949696","3585957887","KW" +"3585957888","3585966079","SE" +"3585966080","3585974271","CH" +"3585974272","3585982463","BE" +"3585982464","3585998847","RU" +"3585998848","3586007039","ES" +"3586007040","3586015231","LT" +"3586015232","3586023423","FR" +"3586023424","3586031615","IS" +"3586031616","3586039807","IE" +"3586039808","3586047999","GB" +"3586048000","3586056191","PT" +"3586056192","3586072575","RU" +"3586072576","3586088959","DE" +"3586088960","3586097151","CZ" +"3586097152","3586105343","HR" +"3586105344","3586105599","A2" +"3586105600","3586105727","ER" +"3586105728","3586113535","A2" +"3586113536","3586121727","BG" +"3586121728","3586129919","IE" +"3586129920","3586146303","CZ" +"3586146304","3586162687","PL" +"3586162688","3586179071","FI" +"3586179072","3586191871","ES" +"3586191872","3586191887","FR" +"3586191888","3586195455","ES" +"3586195456","3586203647","RU" +"3586203648","3586204159","ZM" +"3586204160","3586205695","KE" +"3586205696","3586207743","BW" +"3586207744","3586207999","ZA" +"3586208000","3586208255","A2" +"3586208256","3586208767","ZA" +"3586208768","3586211071","KE" +"3586211072","3586211327","BW" +"3586211328","3586211839","KE" +"3586211840","3586220287","CH" +"3586220288","3586220303","FR" +"3586220304","3586225295","CH" +"3586225296","3586225311","FR" +"3586225312","3586228223","CH" +"3586228224","3586237695","BE" +"3586237696","3586237951","NL" +"3586237952","3586244607","BE" +"3586244608","3586245119","NL" +"3586245120","3586246655","GB" +"3586246656","3586248703","BE" +"3586248704","3586250449","NL" +"3586250450","3586250457","BE" +"3586250458","3586252799","NL" +"3586252800","3586254847","BE" +"3586254848","3586258943","NL" +"3586258944","3586259455","BE" +"3586259456","3586269247","NL" +"3586269248","3586269263","ES" +"3586269264","3586269375","NL" +"3586269376","3586269415","ES" +"3586269416","3586269423","NL" +"3586269424","3586269439","ES" +"3586269440","3586269471","NL" +"3586269472","3586269503","ES" +"3586269504","3586269535","NL" +"3586269536","3586269607","GB" +"3586269608","3586269695","ES" +"3586269696","3586269759","NL" +"3586269760","3586269823","ES" +"3586269824","3586269855","NL" +"3586269856","3586269887","ES" +"3586269888","3586269919","NL" +"3586269920","3586270079","ES" +"3586270080","3586270207","NL" +"3586270208","3586271231","ES" +"3586271232","3586271487","NL" +"3586271488","3586271823","ES" +"3586271824","3586271839","IT" +"3586271840","3586272255","ES" +"3586272256","3586272383","NL" +"3586272384","3586272815","ES" +"3586272816","3586272823","IT" +"3586272824","3586272863","ES" +"3586272864","3586272895","NL" +"3586272896","3586272959","IT" +"3586272960","3586272991","ES" +"3586272992","3586273007","IT" +"3586273008","3586273015","ES" +"3586273016","3586273023","IT" +"3586273024","3586276351","NL" +"3586276352","3586276863","ES" +"3586276864","3586277375","NL" +"3586277376","3586286591","TR" +"3586286592","3586286607","A2" +"3586286608","3586293759","TR" +"3586293760","3586310143","ES" +"3586310144","3586326527","CZ" +"3586326528","3586342911","IR" +"3586342912","3586359295","ES" +"3586359296","3586375679","PL" +"3586375680","3586392063","CZ" +"3586392064","3586408447","NL" +"3586408448","3586424831","BA" +"3586424832","3586441215","CH" +"3586441216","3586457599","DE" +"3586457600","3586473983","NL" +"3586473984","3586473987","SK" +"3586473988","3586476031","HU" +"3586476032","3586476063","TR" +"3586476064","3586476287","HU" +"3586476288","3586476303","SK" +"3586476304","3586476351","HU" +"3586476352","3586476383","AT" +"3586476384","3586476407","UA" +"3586476408","3586476431","HU" +"3586476432","3586476439","SK" +"3586476440","3586478079","HU" +"3586478080","3586478591","SK" +"3586478592","3586478847","HU" +"3586478848","3586479103","SK" +"3586479104","3586479359","TR" +"3586479360","3586479615","SK" +"3586479616","3586490367","HU" +"3586490368","3586506751","LT" +"3586506752","3586523135","NL" +"3586523136","3586542559","DE" +"3586542560","3586542567","AE" +"3586542568","3586543519","DE" +"3586543520","3586543527","GB" +"3586543528","3586543759","DE" +"3586543760","3586543791","GB" +"3586543792","3586544703","DE" +"3586544704","3586544719","AE" +"3586544720","3586545119","DE" +"3586545120","3586545127","GB" +"3586545128","3586545679","DE" +"3586545680","3586545703","GB" +"3586545704","3586546287","DE" +"3586546288","3586546303","GB" +"3586546304","3586546311","DE" +"3586546312","3586546319","GB" +"3586546320","3586546375","DE" +"3586546376","3586546383","GB" +"3586546384","3586546415","DE" +"3586546416","3586546423","GB" +"3586546424","3586547087","DE" +"3586547088","3586547095","GB" +"3586547096","3586555903","DE" +"3586555904","3586572287","IT" +"3586572288","3586588671","RS" +"3586588672","3586596863","IT" +"3586596864","3586605055","GB" +"3586605056","3586621439","SE" +"3586621440","3586621695","EU" +"3586621696","3586625535","IE" +"3586625536","3586629631","GB" +"3586629632","3586637823","IE" +"3586637824","3586654207","PL" +"3586654208","3586662399","GE" +"3586662400","3586670591","UA" +"3586670592","3586677183","DE" +"3586677184","3586677247","FR" +"3586677248","3586677311","DE" +"3586677312","3586677327","FR" +"3586677328","3586677375","DE" +"3586677376","3586677434","FR" +"3586677435","3586677435","DE" +"3586677436","3586677487","FR" +"3586677488","3586677759","DE" +"3586677760","3586678015","GR" +"3586678016","3586678271","DE" +"3586678272","3586678399","FR" +"3586678400","3586678415","GB" +"3586678416","3586678431","FR" +"3586678432","3586678439","IE" +"3586678440","3586678447","FR" +"3586678448","3586678527","IE" +"3586678528","3586678655","FR" +"3586678656","3586678671","CY" +"3586678672","3586678679","GB" +"3586678680","3586678687","MU" +"3586678688","3586678783","GB" +"3586678784","3586679039","IT" +"3586679040","3586679103","FR" +"3586679104","3586679167","DE" +"3586679168","3586679295","FR" +"3586679296","3586679327","BE" +"3586679328","3586679343","DK" +"3586679344","3586679359","BE" +"3586679360","3586679423","DE" +"3586679424","3586679583","FR" +"3586679584","3586679599","IT" +"3586679600","3586679647","FR" +"3586679648","3586679711","IT" +"3586679712","3586679727","FR" +"3586679728","3586679807","IT" +"3586679808","3586680319","FR" +"3586680320","3586680575","ES" +"3586680576","3586680607","FR" +"3586680608","3586680615","ES" +"3586680616","3586680703","FR" +"3586680704","3586680831","ES" +"3586680832","3586682239","FR" +"3586682240","3586682367","US" +"3586682368","3586682399","AT" +"3586682400","3586682879","FR" +"3586682880","3586686975","US" +"3586686976","3586703359","SE" +"3586703360","3586719743","CH" +"3586719744","3586752511","ES" +"3586752512","3586785279","NL" +"3586785280","3586793471","OM" +"3586793472","3586801663","CH" +"3586801664","3586803487","HR" +"3586803488","3586803519","DE" +"3586803520","3586804751","HR" +"3586804752","3586804767","HU" +"3586804768","3586818047","HR" +"3586818048","3586834431","IE" +"3586834432","3586850495","DE" +"3586850496","3586850511","US" +"3586850512","3586850815","DE" +"3586850816","3586867199","NO" +"3586867200","3586883583","FR" +"3586883584","3586899967","IT" +"3586899968","3586901311","DE" +"3586901312","3586901375","ES" +"3586901376","3586904831","DE" +"3586904832","3586904839","VG" +"3586904840","3586905199","DE" +"3586905200","3586905215","GB" +"3586905216","3586905287","DE" +"3586905288","3586905295","CY" +"3586905296","3586906225","DE" +"3586906226","3586906226","A1" +"3586906227","3586910559","DE" +"3586910560","3586910567","NL" +"3586910568","3586910575","CY" +"3586910576","3586910583","DE" +"3586910584","3586910587","NL" +"3586910588","3586910591","DE" +"3586910592","3586910623","NL" +"3586910624","3586910655","DE" +"3586910656","3586910687","NL" +"3586910688","3586910711","DE" +"3586910712","3586910719","NL" +"3586910720","3586910991","DE" +"3586910992","3586911039","BE" +"3586911040","3586911103","DE" +"3586911104","3586911167","NL" +"3586911168","3586912721","DE" +"3586912722","3586912722","FR" +"3586912723","3586916351","DE" +"3586916352","3586924031","IT" +"3586924032","3586924047","US" +"3586924048","3586924543","IT" +"3586924544","3586924743","FI" +"3586924744","3586924751","AX" +"3586924752","3586924767","FI" +"3586924768","3586924799","AX" +"3586924800","3586924871","FI" +"3586924872","3586924879","AX" +"3586924880","3586924919","FI" +"3586924920","3586924927","AX" +"3586924928","3586924943","FI" +"3586924944","3586924959","AX" +"3586924960","3586924983","FI" +"3586924984","3586925055","AX" +"3586925056","3586925103","FI" +"3586925104","3586925135","AX" +"3586925136","3586925471","FI" +"3586925472","3586925503","AX" +"3586925504","3586925535","FI" +"3586925536","3586925567","AX" +"3586925568","3586925695","FI" +"3586925696","3586925759","AX" +"3586925760","3586925791","FI" +"3586925792","3586925823","AX" +"3586925824","3586925831","FI" +"3586925832","3586925855","AX" +"3586925856","3586925887","FI" +"3586925888","3586925919","AX" +"3586925920","3586925983","FI" +"3586925984","3586926003","AX" +"3586926004","3586926015","FI" +"3586926016","3586926047","AX" +"3586926048","3586926079","FI" +"3586926080","3586926591","AX" +"3586926592","3586926847","SE" +"3586926848","3586927103","FI" +"3586927104","3586927999","AX" +"3586928000","3586928159","FI" +"3586928160","3586928175","AX" +"3586928176","3586928303","FI" +"3586928304","3586928319","AX" +"3586928320","3586928639","FI" +"3586928640","3586932735","AX" +"3586932736","3586949119","LB" +"3586949120","3586965503","SE" +"3586965504","3586981887","NL" +"3586981888","3586998271","IT" +"3586998272","3587006463","PT" +"3587006464","3587014655","FR" +"3587014656","3587051007","GB" +"3587051008","3587051775","DE" +"3587051776","3587052031","GB" +"3587052032","3587052799","NL" +"3587052800","3587053055","GB" +"3587053056","3587053823","FR" +"3587053824","3587055615","GB" +"3587055616","3587063807","UZ" +"3587063808","3587080191","NL" +"3587080192","3587082367","GB" +"3587082368","3587082431","US" +"3587082432","3587088383","GB" +"3587088384","3587096575","DE" +"3587096576","3587110863","NL" +"3587110864","3587110871","BE" +"3587110872","3587121151","NL" +"3587121152","3587129343","AL" +"3587129344","3587134463","NL" +"3587134464","3587134591","ES" +"3587134592","3587145727","NL" +"3587145728","3587162111","CY" +"3587162112","3587178495","IR" +"3587178496","3587178795","AT" +"3587178796","3587178799","US" +"3587178800","3587179439","AT" +"3587179440","3587179455","GB" +"3587179456","3587186687","AT" +"3587186688","3587187199","A2" +"3587187200","3587187455","GB" +"3587187456","3587188223","A2" +"3587188224","3587188479","AM" +"3587188480","3587188735","DE" +"3587188736","3587192831","A2" +"3587192832","3587193087","DE" +"3587193088","3587193343","A2" +"3587193344","3587193599","GB" +"3587193600","3587194495","A2" +"3587194496","3587194511","RU" +"3587194512","3587194879","A2" +"3587194880","3587211263","GB" +"3587211264","3587211531","AT" +"3587211532","3587211535","DE" +"3587211536","3587213911","AT" +"3587213912","3587213919","UY" +"3587213920","3587217151","AT" +"3587217152","3587217407","CN" +"3587217408","3587219455","AT" +"3587219456","3587227647","RU" +"3587227648","3587227663","NL" +"3587227664","3587227679","GB" +"3587227680","3587227759","NL" +"3587227760","3587227775","GB" +"3587227776","3587227903","NL" +"3587227904","3587228047","GB" +"3587228048","3587228087","NL" +"3587228088","3587228127","GB" +"3587228128","3587228271","NL" +"3587228272","3587228287","GB" +"3587228288","3587228351","NL" +"3587228352","3587228367","GB" +"3587228368","3587228447","NL" +"3587228448","3587228463","GB" +"3587228464","3587228591","NL" +"3587228592","3587228607","GB" +"3587228608","3587228640","NL" +"3587228641","3587228647","GB" +"3587228648","3587228927","NL" +"3587228928","3587229455","GB" +"3587229456","3587229647","NL" +"3587229648","3587229663","GB" +"3587229664","3587229823","NL" +"3587229824","3587229839","GB" +"3587229840","3587229855","ES" +"3587229856","3587229871","NL" +"3587229872","3587229887","GB" +"3587229888","3587229920","NL" +"3587229921","3587229935","GB" +"3587229936","3587230159","NL" +"3587230160","3587230207","GB" +"3587230208","3587230399","NL" +"3587230400","3587230415","GB" +"3587230416","3587230431","NL" +"3587230432","3587230447","GB" +"3587230448","3587230463","NL" +"3587230464","3587230511","GB" +"3587230512","3587230519","NL" +"3587230520","3587230527","GB" +"3587230528","3587230543","NL" +"3587230544","3587230607","GB" +"3587230608","3587230623","NL" +"3587230624","3587230791","GB" +"3587230792","3587230799","NL" +"3587230800","3587230847","GB" +"3587230848","3587230911","NL" +"3587230912","3587230943","GB" +"3587230944","3587230967","DE" +"3587230968","3587230975","GB" +"3587230976","3587230991","NL" +"3587230992","3587231359","GB" +"3587231360","3587232535","NL" +"3587232536","3587232711","GB" +"3587232712","3587232719","NL" +"3587232720","3587232767","GB" +"3587232768","3587232911","NL" +"3587232912","3587232927","GB" +"3587232928","3587233103","NL" +"3587233104","3587233119","GB" +"3587233120","3587233167","NL" +"3587233168","3587233175","GB" +"3587233176","3587233295","NL" +"3587233296","3587233319","GB" +"3587233320","3587233343","NL" +"3587233344","3587233359","GB" +"3587233360","3587233407","NL" +"3587233408","3587233471","GB" +"3587233472","3587233519","NL" +"3587233520","3587233535","GB" +"3587233536","3587233543","NL" +"3587233544","3587233599","GB" +"3587233600","3587233807","NL" +"3587233808","3587233823","GB" +"3587233824","3587233839","NL" +"3587233840","3587233919","GB" +"3587233920","3587233935","NL" +"3587233936","3587233951","GB" +"3587233952","3587233967","NL" +"3587233968","3587233983","GB" +"3587233984","3587233999","NL" +"3587234000","3587234047","GB" +"3587234048","3587234079","NL" +"3587234080","3587234095","GB" +"3587234096","3587234111","NL" +"3587234112","3587234127","GB" +"3587234128","3587234143","NL" +"3587234144","3587234159","GB" +"3587234160","3587234207","NL" +"3587234208","3587234815","GB" +"3587234816","3587236351","NL" +"3587236352","3587236383","GB" +"3587236384","3587236447","NL" +"3587236448","3587236479","GB" +"3587236480","3587236511","NL" +"3587236512","3587236543","GB" +"3587236544","3587236607","NL" +"3587236608","3587236863","GB" +"3587236864","3587237375","NL" +"3587237376","3587237391","GB" +"3587237392","3587237399","NL" +"3587237400","3587237407","GB" +"3587237408","3587237447","NL" +"3587237448","3587237455","GB" +"3587237456","3587237471","NL" +"3587237472","3587237487","GB" +"3587237488","3587237495","NL" +"3587237496","3587237519","GB" +"3587237520","3587237535","NL" +"3587237536","3587237551","GB" +"3587237552","3587237567","NL" +"3587237568","3587237887","GB" +"3587237888","3587238463","NL" +"3587238464","3587238479","GB" +"3587238480","3587238511","NL" +"3587238512","3587238519","GB" +"3587238520","3587238527","NL" +"3587238528","3587238543","GB" +"3587238544","3587238567","NL" +"3587238568","3587238583","GB" +"3587238584","3587238607","NL" +"3587238608","3587238911","GB" +"3587238912","3587239279","NL" +"3587239280","3587239287","GB" +"3587239288","3587239303","NL" +"3587239304","3587239319","GB" +"3587239320","3587239375","NL" +"3587239376","3587239391","GB" +"3587239392","3587239631","NL" +"3587239632","3587239639","GB" +"3587239640","3587239911","NL" +"3587239912","3587239919","GB" +"3587239920","3587240063","NL" +"3587240064","3587240071","BE" +"3587240072","3587240079","GB" +"3587240080","3587240103","NL" +"3587240104","3587240107","GB" +"3587240108","3587240271","NL" +"3587240272","3587240279","GB" +"3587240280","3587240359","NL" +"3587240360","3587240367","GB" +"3587240368","3587240519","NL" +"3587240520","3587240527","GB" +"3587240528","3587240543","NL" +"3587240544","3587240559","IE" +"3587240560","3587240567","BE" +"3587240568","3587240575","GB" +"3587240576","3587240615","NL" +"3587240616","3587240623","GB" +"3587240624","3587241143","NL" +"3587241144","3587241151","GB" +"3587241152","3587241223","NL" +"3587241224","3587241247","GB" +"3587241248","3587241263","NL" +"3587241264","3587241271","GB" +"3587241272","3587241343","NL" +"3587241344","3587241471","GB" +"3587241472","3587242071","NL" +"3587242072","3587242079","GB" +"3587242080","3587242095","NL" +"3587242096","3587242111","GB" +"3587242112","3587242271","NL" +"3587242272","3587242287","GB" +"3587242288","3587242463","NL" +"3587242464","3587242495","GB" +"3587242496","3587243311","NL" +"3587243312","3587243327","GB" +"3587243328","3587243407","NL" +"3587243408","3587243415","GB" +"3587243416","3587243431","NL" +"3587243432","3587243439","GB" +"3587243440","3587243455","NL" +"3587243456","3587243471","GB" +"3587243472","3587243495","NL" +"3587243496","3587243503","GB" +"3587243504","3587243903","NL" +"3587243904","3587243919","GB" +"3587243920","3587243935","NL" +"3587243936","3587243951","GB" +"3587243952","3587243967","NL" +"3587243968","3587243975","GB" +"3587243976","3587243983","NL" +"3587243984","3587243991","GB" +"3587243992","3587244007","NL" +"3587244008","3587244015","GB" +"3587244016","3587244023","NL" +"3587244024","3587244031","GB" +"3587244032","3587260415","IT" +"3587260416","3587284991","DE" +"3587284992","3587285135","A2" +"3587285136","3587285159","HK" +"3587285160","3587285216","A2" +"3587285217","3587285217","US" +"3587285218","3587286527","A2" +"3587286528","3587286783","EU" +"3587286784","3587287043","A2" +"3587287044","3587287047","LY" +"3587287048","3587287055","A2" +"3587287056","3587287059","LY" +"3587287060","3587287295","A2" +"3587287296","3587287307","GE" +"3587287308","3587287311","DE" +"3587287312","3587287319","GE" +"3587287320","3587287327","FR" +"3587287328","3587287335","GB" +"3587287336","3587287339","DE" +"3587287340","3587287343","PL" +"3587287344","3587287351","GE" +"3587287352","3587287359","IS" +"3587287360","3587287363","NL" +"3587287364","3587287367","IT" +"3587287368","3587287387","NL" +"3587287388","3587287391","CZ" +"3587287392","3587287395","DE" +"3587287396","3587287403","IS" +"3587287404","3587287411","PL" +"3587287412","3587287415","DE" +"3587287416","3587287419","IQ" +"3587287420","3587287423","DE" +"3587287424","3587287427","SE" +"3587287428","3587287431","DE" +"3587287432","3587287435","IT" +"3587287436","3587287439","DE" +"3587287440","3587287447","TR" +"3587287448","3587287451","DE" +"3587287452","3587287455","IT" +"3587287456","3587287459","DE" +"3587287460","3587287463","IT" +"3587287464","3587287475","SE" +"3587287476","3587287479","PL" +"3587287480","3587287487","A2" +"3587287488","3587287535","IT" +"3587287536","3587287543","DE" +"3587287544","3587287551","PL" +"3587287552","3587287559","GB" +"3587287560","3587287563","FR" +"3587287564","3587287571","PL" +"3587287572","3587287575","DE" +"3587287576","3587287579","FR" +"3587287580","3587287583","DE" +"3587287584","3587287591","FR" +"3587287592","3587287599","GB" +"3587287600","3587287679","IT" +"3587287680","3587287687","NL" +"3587287688","3587287711","IS" +"3587287712","3587287719","GE" +"3587287720","3587287723","IT" +"3587287724","3587287727","SE" +"3587287728","3587287807","IT" +"3587287808","3587287815","IS" +"3587287816","3587287823","GB" +"3587287824","3587287835","FR" +"3587287836","3587287847","GB" +"3587287848","3587287851","SE" +"3587287852","3587287879","IQ" +"3587287880","3587287887","FR" +"3587287888","3587287935","IT" +"3587287936","3587287943","FR" +"3587287944","3587287947","DE" +"3587287948","3587287959","IT" +"3587287960","3587287963","FR" +"3587287964","3587287967","GB" +"3587287968","3587287983","DE" +"3587287984","3587288063","IT" +"3587288064","3587288319","A2" +"3587288320","3587288575","IT" +"3587288576","3587288703","AE" +"3587288704","3587288707","DE" +"3587288708","3587288759","NL" +"3587288760","3587288959","A2" +"3587288960","3587289087","DE" +"3587289088","3587289343","FR" +"3587289344","3587289347","ES" +"3587289348","3587289351","FR" +"3587289352","3587289359","PT" +"3587289360","3587289367","ES" +"3587289368","3587289375","FR" +"3587289376","3587289383","A2" +"3587289384","3587289387","GB" +"3587289388","3587289391","ES" +"3587289392","3587289399","GB" +"3587289400","3587289407","ES" +"3587289408","3587289411","A2" +"3587289412","3587289415","FR" +"3587289416","3587289423","A2" +"3587289424","3587289467","GB" +"3587289468","3587289599","A2" +"3587289600","3587290111","EU" +"3587290112","3587290367","IT" +"3587290368","3587290622","GB" +"3587290623","3587290623","A2" +"3587290624","3587290879","FR" +"3587290880","3587291135","A2" +"3587291136","3587291139","NL" +"3587291140","3587291647","A2" +"3587291648","3587291967","IT" +"3587291968","3587292031","AL" +"3587292032","3587292159","IT" +"3587292160","3587292223","A2" +"3587292224","3587292415","IT" +"3587292416","3587292419","ES" +"3587292420","3587292671","A2" +"3587292672","3587292799","IT" +"3587292800","3587292863","AT" +"3587292864","3587309567","IT" +"3587309568","3587325951","GB" +"3587325952","3587342335","RU" +"3587342336","3587358719","CZ" +"3587358720","3587375103","SA" +"3587375104","3587383295","TR" +"3587383296","3587391487","CZ" +"3587391488","3587407871","KZ" +"3587407872","3587408383","NL" +"3587408384","3587408895","BE" +"3587408896","3587409407","RU" +"3587409408","3587410431","BE" +"3587410432","3587410687","NL" +"3587410688","3587412223","BE" +"3587412224","3587413759","NL" +"3587413760","3587414015","BE" +"3587414016","3587424255","NL" +"3587424256","3587440639","DE" +"3587440640","3587444900","SE" +"3587444901","3587444916","FI" +"3587444917","3587457023","SE" +"3587457024","3587459263","GB" +"3587459264","3587459295","DE" +"3587459296","3587473407","GB" +"3587473408","3587489791","IT" +"3587489792","3587506175","EG" +"3587506176","3587538943","IT" +"3587538944","3587547135","IS" +"3587547136","3587555327","CH" +"3587555328","3587571711","BE" +"3587571712","3587579903","DE" +"3587579904","3587588095","BE" +"3587588096","3587596287","BG" +"3587596288","3587604479","NL" +"3587604480","3587620863","FI" +"3587620864","3587637247","SE" +"3587637248","3587646975","FR" +"3587646976","3587647231","MC" +"3587647232","3587653631","FR" +"3587653632","3587670015","SK" +"3587670016","3587686031","IT" +"3587686032","3587686039","FR" +"3587686040","3587687591","IT" +"3587687592","3587687599","NL" +"3587687600","3587689151","IT" +"3587689152","3587689159","FR" +"3587689160","3587689167","GB" +"3587689168","3587691399","IT" +"3587691400","3587691407","DE" +"3587691408","3587699255","IT" +"3587699256","3587699263","A2" +"3587699264","3587699559","IT" +"3587699560","3587699567","GB" +"3587699568","3587700031","IT" +"3587700032","3587700039","GB" +"3587700040","3587701295","IT" +"3587701296","3587701303","FR" +"3587701304","3587702783","IT" +"3587702784","3587710975","DE" +"3587710976","3587719167","CZ" +"3587719168","3587735551","PL" +"3587735552","3587751935","GB" +"3587751936","3587768319","FI" +"3587768320","3587776511","DE" +"3587776512","3587784703","IR" +"3587784704","3587801087","DE" +"3587801088","3587817471","IT" +"3587817472","3587833855","MT" +"3587833856","3587842047","DE" +"3587842048","3587850239","IT" +"3587850240","3587854335","NL" +"3587854336","3587866623","PL" +"3587866624","3587874815","FR" +"3587874816","3587877407","DE" +"3587877408","3587877439","NL" +"3587877440","3587878335","DE" +"3587878336","3587878399","BA" +"3587878400","3587878527","DE" +"3587878528","3587878559","AT" +"3587878560","3587883007","DE" +"3587883008","3587915775","GB" +"3587915776","3587932159","EE" +"3587932160","3587932415","NL" +"3587932416","3587944447","BE" +"3587944448","3587945471","NL" +"3587945472","3587948031","BE" +"3587948032","3587948543","NL" +"3587948544","3587964927","RU" +"3587964928","3587981311","ES" +"3587981312","3587997695","IS" +"3587997696","3588014079","DE" +"3588014080","3588030463","CZ" +"3588030464","3588031615","RU" +"3588031616","3588031623","LV" +"3588031624","3588046847","RU" +"3588046848","3588060351","DE" +"3588060352","3588060359","CH" +"3588060360","3588063231","DE" +"3588063232","3588071423","CH" +"3588071424","3588079615","GB" +"3588079616","3588095999","CH" +"3588096000","3588104191","NL" +"3588104192","3588112383","BG" +"3588112384","3588128767","FR" +"3588128768","3588145151","HU" +"3588145152","3588153343","PL" +"3588153344","3588161535","RU" +"3588161536","3588227071","FR" +"3588227072","3588292607","BE" +"3588292608","3588308991","AT" +"3588308992","3588325375","NO" +"3588325376","3588328191","GB" +"3588328192","3588328447","EU" +"3588328448","3588333567","GB" +"3588333568","3588341759","FR" +"3588341760","3588358143","IT" +"3588358144","3588374527","BG" +"3588374528","3588390911","SE" +"3588390912","3588393983","LT" +"3588393984","3588394495","LV" +"3588394496","3588407295","LT" +"3588407296","3588423679","CZ" +"3588423680","3588440063","ES" +"3588440064","3588456447","PL" +"3588456448","3588464639","NL" +"3588464640","3588472831","AT" +"3588472832","3588489215","UA" +"3588489216","3588505599","FR" +"3588505600","3588521983","RU" +"3588521984","3588538367","PT" +"3588538368","3588544383","GB" +"3588544384","3588544391","IE" +"3588544392","3588553983","GB" +"3588553984","3588554239","IE" +"3588554240","3588554687","GB" +"3588554688","3588554751","IE" +"3588554752","3588571135","AT" +"3588571136","3588587519","GB" +"3588587520","3588588567","ES" +"3588588568","3588588575","IT" +"3588588576","3588590591","ES" +"3588590592","3588590847","FR" +"3588590848","3588595199","ES" +"3588595200","3588595455","FR" +"3588595456","3588598607","ES" +"3588598608","3588598615","IT" +"3588598616","3588603903","ES" +"3588603904","3588620287","SI" +"3588620288","3588628479","SA" +"3588628480","3588636671","CH" +"3588636672","3588653055","UZ" +"3588653056","3588661247","IT" +"3588661248","3588667391","NO" +"3588667392","3588668415","SG" +"3588668416","3588669439","HK" +"3588669440","3588685823","GB" +"3588685824","3588702207","UA" +"3588702208","3588718591","ES" +"3588718592","3588734975","BG" +"3588734976","3588751359","PL" +"3588751360","3588767743","TR" +"3588767744","3588773759","GB" +"3588773760","3588773887","SL" +"3588773888","3588775935","GB" +"3588775936","3588776191","NG" +"3588776192","3588782271","GB" +"3588782272","3588782279","A2" +"3588782280","3588784127","GB" +"3588784128","3588800511","CH" +"3588800512","3588816895","RU" +"3588816896","3588833279","IT" +"3588833280","3588848767","RO" +"3588848768","3588848775","FR" +"3588848776","3588849663","RO" +"3588849664","3588857855","IE" +"3588857856","3588866047","IR" +"3588866048","3588882431","NL" +"3588882432","3588890623","RU" +"3588890624","3588898815","GB" +"3588898816","3588915199","NO" +"3588915200","3588931583","IT" +"3588931584","3588947967","RU" +"3588947968","3588964351","GB" +"3588964352","3588997119","CZ" +"3588997120","3589013503","AT" +"3589013504","3589021695","ES" +"3589021696","3589029887","SA" +"3589029888","3589030303","NL" +"3589030304","3589030335","FR" +"3589030336","3589034143","NL" +"3589034144","3589034159","ES" +"3589034160","3589034167","GB" +"3589034168","3589034183","NL" +"3589034184","3589034191","GB" +"3589034192","3589034207","DE" +"3589034208","3589034239","NL" +"3589034240","3589034495","EU" +"3589034496","3589037055","ES" +"3589037056","3589037311","EU" +"3589037312","3589037343","NL" +"3589037344","3589037375","SE" +"3589037376","3589037423","NL" +"3589037424","3589037439","ES" +"3589037440","3589037487","NL" +"3589037488","3589037495","IT" +"3589037496","3589037503","CH" +"3589037504","3589037551","NL" +"3589037552","3589037559","BE" +"3589037560","3589037567","NL" +"3589037568","3589038079","ES" +"3589038080","3589046271","NL" +"3589046272","3589066527","NO" +"3589066528","3589066531","SE" +"3589066532","3589066703","NO" +"3589066704","3589066711","SE" +"3589066712","3589079039","NO" +"3589079040","3589092223","DK" +"3589092224","3589092227","SE" +"3589092228","3589128191","DK" +"3589128192","3589144575","GB" +"3589144576","3589152767","UA" +"3589152768","3589152927","DE" +"3589152928","3589152935","CH" +"3589152936","3589153027","DE" +"3589153028","3589153031","ES" +"3589153032","3589156591","DE" +"3589156592","3589156607","CH" +"3589156608","3589160959","DE" +"3589160960","3589177343","PL" +"3589177344","3589193727","TR" +"3589193728","3589210111","SE" +"3589210112","3589226495","NL" +"3589226496","3589230415","NO" +"3589230416","3589230431","DK" +"3589230432","3589230759","NO" +"3589230760","3589230775","GB" +"3589230776","3589242879","NO" +"3589242880","3589248511","NL" +"3589248512","3589248767","GB" +"3589248768","3589256191","NL" +"3589256192","3589256447","GR" +"3589256448","3589258495","NL" +"3589258496","3589258751","GB" +"3589258752","3589259263","NL" +"3589259264","3589269455","DE" +"3589269456","3589269471","AT" +"3589269472","3589275647","DE" +"3589275648","3589292031","RS" +"3589292032","3589308415","AT" +"3589308416","3589324799","DE" +"3589324800","3589341183","BG" +"3589341184","3589373951","PL" +"3589373952","3589375495","DE" +"3589375496","3589375503","CI" +"3589375504","3589390335","DE" +"3589390336","3589423103","RU" +"3589423104","3589423615","IT" +"3589423616","3589424127","CH" +"3589424128","3589424639","SE" +"3589424640","3589425151","ES" +"3589425152","3589425663","CH" +"3589425664","3589426175","GB" +"3589426176","3589426239","FR" +"3589426240","3589426303","IT" +"3589426304","3589427199","GB" +"3589427200","3589427247","FR" +"3589427248","3589428223","GB" +"3589428224","3589428255","CH" +"3589428256","3589428287","GB" +"3589428288","3589428319","CH" +"3589428320","3589429247","GB" +"3589429248","3589429503","FR" +"3589429504","3589430271","GB" +"3589430272","3589430543","FR" +"3589430544","3589430559","ES" +"3589430560","3589431039","GB" +"3589431040","3589431295","ES" +"3589431296","3589431343","FR" +"3589431344","3589431807","GB" +"3589431808","3589432111","CH" +"3589432112","3589432319","GB" +"3589432320","3589432575","CH" +"3589432576","3589432895","FR" +"3589432896","3589432927","CH" +"3589432928","3589433343","GB" +"3589433344","3589433375","IT" +"3589433376","3589433407","CH" +"3589433408","3589433439","SE" +"3589433440","3589433471","ES" +"3589433472","3589433503","CH" +"3589433504","3589433535","IE" +"3589433536","3589433567","DK" +"3589433568","3589433599","GB" +"3589433600","3589434111","IE" +"3589434112","3589434623","DK" +"3589434624","3589434751","GB" +"3589434752","3589434879","ES" +"3589434880","3589435391","FR" +"3589435392","3589435519","PL" +"3589435520","3589435775","ES" +"3589435776","3589435903","GB" +"3589435904","3589436159","ES" +"3589436160","3589436415","GB" +"3589436416","3589436671","FR" +"3589436672","3589436799","PL" +"3589436800","3589436927","GB" +"3589436928","3589437183","PL" +"3589437184","3589437311","FR" +"3589437312","3589439487","GB" +"3589439488","3589444631","SE" +"3589444632","3589444639","NO" +"3589444640","3589455871","SE" +"3589455872","3589472255","RU" +"3589472256","3589488639","TR" +"3589488640","3589491711","RU" +"3589491712","3589491743","TJ" +"3589491744","3589505023","RU" +"3589505024","3589521407","FI" +"3589521408","3589537791","IT" +"3589537792","3589545983","FR" +"3589545984","3589554175","DE" +"3589554176","3589570559","PS" +"3589570560","3589570655","NL" +"3589570656","3589570671","GB" +"3589570672","3589570679","NL" +"3589570680","3589570783","GB" +"3589570784","3589570815","NL" +"3589570816","3589571071","GB" +"3589571072","3589571135","NL" +"3589571136","3589571583","GB" +"3589571584","3589571839","NL" +"3589571840","3589578751","GB" +"3589578752","3589579391","NL" +"3589579392","3589579775","GB" +"3589579776","3589580799","NL" +"3589580800","3589580895","GB" +"3589580896","3589581055","NL" +"3589581056","3589581199","GB" +"3589581200","3589581215","NL" +"3589581216","3589581327","GB" +"3589581328","3589581439","NL" +"3589581440","3589581567","GB" +"3589581568","3589581791","NL" +"3589581792","3589581823","GB" +"3589581824","3589582639","NL" +"3589582640","3589582655","GB" +"3589582656","3589583359","NL" +"3589583360","3589583647","GB" +"3589583648","3589583663","NL" +"3589583664","3589583743","GB" +"3589583744","3589584127","NL" +"3589584128","3589584255","GB" +"3589584256","3589584271","NL" +"3589584272","3589584639","GB" +"3589584640","3589585279","NL" +"3589585280","3589585407","GB" +"3589585408","3589585983","NL" +"3589585984","3589586431","GB" +"3589586432","3589586687","NL" +"3589586688","3589586943","GB" +"3589586944","3589603327","RS" +"3589603328","3589668863","FR" +"3589668864","3589677055","RU" +"3589677056","3589680287","FR" +"3589680288","3589680303","MQ" +"3589680304","3589680600","FR" +"3589680601","3589680601","A1" +"3589680602","3589680751","FR" +"3589680752","3589680767","MQ" +"3589680768","3589685247","FR" +"3589685248","3589718015","GB" +"3589718016","3589719279","BE" +"3589719280","3589719287","FR" +"3589719288","3589719343","BE" +"3589719344","3589719347","LU" +"3589719348","3589719383","BE" +"3589719384","3589719391","GB" +"3589719392","3589719847","BE" +"3589719848","3589719855","AT" +"3589719856","3589719967","BE" +"3589719968","3589719975","GB" +"3589719976","3589720071","BE" +"3589720072","3589720079","FR" +"3589720080","3589720135","BE" +"3589720136","3589720143","GB" +"3589720144","3589720263","BE" +"3589720264","3589720271","GB" +"3589720272","3589720279","FR" +"3589720280","3589720303","BE" +"3589720304","3589720311","FR" +"3589720312","3589720575","BE" +"3589720576","3589720583","ES" +"3589720584","3589720599","FR" +"3589720600","3589720623","BE" +"3589720624","3589720631","GB" +"3589720632","3589720639","FR" +"3589720640","3589720655","BE" +"3589720656","3589720663","ES" +"3589720664","3589720687","BE" +"3589720688","3589720695","GB" +"3589720696","3589720703","ES" +"3589720704","3589720727","BE" +"3589720728","3589720735","GB" +"3589720736","3589720743","BE" +"3589720744","3589720767","GB" +"3589720768","3589720783","BE" +"3589720784","3589720799","GB" +"3589720800","3589720815","BE" +"3589720816","3589720823","GB" +"3589720824","3589720839","BE" +"3589720840","3589720847","GB" +"3589720848","3589720879","BE" +"3589720880","3589720887","FR" +"3589720888","3589720895","BE" +"3589720896","3589720903","IT" +"3589720904","3589720935","BE" +"3589720936","3589720943","GB" +"3589720944","3589720951","FR" +"3589720952","3589720983","GB" +"3589720984","3589720995","BE" +"3589720996","3589721003","GB" +"3589721004","3589721015","BE" +"3589721016","3589721031","GB" +"3589721032","3589721039","BE" +"3589721040","3589721047","GB" +"3589721048","3589721055","ES" +"3589721056","3589721063","BE" +"3589721064","3589721071","GB" +"3589721072","3589721159","BE" +"3589721160","3589721167","GB" +"3589721168","3589721231","BE" +"3589721232","3589721247","GB" +"3589721248","3589721255","FR" +"3589721256","3589721279","GB" +"3589721280","3589721295","BE" +"3589721296","3589721311","FR" +"3589721312","3589721399","BE" +"3589721400","3589721407","GB" +"3589721408","3589721855","BE" +"3589721856","3589721863","GB" +"3589721864","3589721867","BE" +"3589721868","3589721883","GB" +"3589721884","3589721903","BE" +"3589721904","3589721911","GB" +"3589721912","3589721951","BE" +"3589721952","3589721967","GB" +"3589721968","3589722023","BE" +"3589722024","3589722031","FR" +"3589722032","3589722111","BE" +"3589722112","3589722143","GB" +"3589722144","3589722159","BE" +"3589722160","3589722167","FR" +"3589722168","3589722175","BE" +"3589722176","3589722191","GB" +"3589722192","3589722199","BE" +"3589722200","3589722207","FR" +"3589722208","3589722263","BE" +"3589722264","3589722271","GB" +"3589722272","3589722279","BE" +"3589722280","3589722287","FR" +"3589722288","3589722303","BE" +"3589722304","3589722311","FR" +"3589722312","3589722319","GB" +"3589722320","3589722335","FR" +"3589722336","3589722343","BE" +"3589722344","3589722359","FR" +"3589722360","3589722383","BE" +"3589722384","3589722391","DE" +"3589722392","3589722431","BE" +"3589722432","3589722439","ES" +"3589722440","3589722447","GB" +"3589722448","3589722623","BE" +"3589722624","3589722631","GB" +"3589722632","3589722639","BE" +"3589722640","3589722647","GB" +"3589722648","3589722703","BE" +"3589722704","3589722711","FR" +"3589722712","3589722791","BE" +"3589722792","3589722799","GB" +"3589722800","3589722835","BE" +"3589722836","3589722843","GB" +"3589722844","3589722943","BE" +"3589722944","3589722951","GB" +"3589722952","3589722959","FR" +"3589722960","3589722983","BE" +"3589722984","3589722991","GB" +"3589722992","3589723023","BE" +"3589723024","3589723031","FR" +"3589723032","3589723975","BE" +"3589723976","3589723983","FR" +"3589723984","3589724031","BE" +"3589724032","3589724039","ES" +"3589724040","3589724199","BE" +"3589724200","3589724207","ES" +"3589724208","3589724271","BE" +"3589724272","3589724287","NL" +"3589724288","3589724351","BE" +"3589724352","3589724367","ES" +"3589724368","3589724671","BE" +"3589724672","3589724679","FR" +"3589724680","3589724695","GB" +"3589724696","3589724703","BE" +"3589724704","3589724719","FR" +"3589724720","3589724727","GB" +"3589724728","3589724791","BE" +"3589724792","3589724807","GB" +"3589724808","3589725247","BE" +"3589725248","3589725263","GB" +"3589725264","3589725495","BE" +"3589725496","3589725503","PT" +"3589725504","3589725663","BE" +"3589725664","3589725695","GB" +"3589725696","3589725799","BE" +"3589725800","3589725807","IE" +"3589725808","3589725847","BE" +"3589725848","3589725855","IE" +"3589725856","3589725911","BE" +"3589725912","3589725919","GB" +"3589725920","3589725959","BE" +"3589725960","3589725967","LU" +"3589725968","3589725999","BE" +"3589726000","3589726007","FR" +"3589726008","3589726047","BE" +"3589726048","3589726055","FR" +"3589726056","3589726111","BE" +"3589726112","3589726119","GB" +"3589726120","3589726367","BE" +"3589726368","3589726375","FR" +"3589726376","3589726423","BE" +"3589726424","3589726431","FR" +"3589726432","3589726455","BE" +"3589726456","3589726463","FR" +"3589726464","3589726471","BE" +"3589726472","3589726479","GB" +"3589726480","3589726487","BE" +"3589726488","3589726495","GB" +"3589726496","3589726535","BE" +"3589726536","3589726543","GB" +"3589726544","3589727007","BE" +"3589727008","3589727015","FR" +"3589727016","3589729735","BE" +"3589729736","3589729743","ES" +"3589729744","3589729751","GB" +"3589729752","3589730087","BE" +"3589730088","3589730095","GB" +"3589730096","3589730111","BE" +"3589730112","3589730119","GB" +"3589730120","3589732671","BE" +"3589732672","3589732687","DE" +"3589732688","3589733375","BE" +"3589733376","3589733439","LU" +"3589733440","3589734167","BE" +"3589734168","3589734175","DE" +"3589734176","3589734399","BE" +"3589734400","3589742591","EG" +"3589742592","3589742687","NL" +"3589742688","3589742695","AT" +"3589742696","3589742975","NL" +"3589742976","3589743039","IE" +"3589743040","3589743458","NL" +"3589743459","3589743460","US" +"3589743461","3589744895","NL" +"3589744896","3589744959","BE" +"3589744960","3589745119","NL" +"3589745120","3589745151","BE" +"3589745152","3589746087","NL" +"3589746088","3589746095","DE" +"3589746096","3589746175","NL" +"3589746176","3589746687","US" +"3589746688","3589747071","NL" +"3589747072","3589747103","ES" +"3589747104","3589767167","NL" +"3589767168","3589816319","RU" +"3589816320","3589825791","EU" +"3589825792","3589826047","DE" +"3589826048","3589827071","EU" +"3589827072","3589827327","SE" +"3589827328","3589827583","FR" +"3589827584","3589827647","EU" +"3589827648","3589827679","DE" +"3589827680","3589827711","EU" +"3589827712","3589828095","DE" +"3589828096","3589828111","FR" +"3589828112","3589828127","EU" +"3589828128","3589828159","DE" +"3589828160","3589828607","FR" +"3589828608","3589828639","SE" +"3589828640","3589828671","NL" +"3589828672","3589828735","SE" +"3589828736","3589828991","NL" +"3589828992","3589829119","ES" +"3589829120","3589829183","GB" +"3589829184","3589829375","EU" +"3589829376","3589829503","FR" +"3589829504","3589829631","EU" +"3589829632","3589830655","GB" +"3589830656","3589831167","DE" +"3589831168","3589831679","US" +"3589831680","3589832703","FR" +"3589832704","3589849087","TR" +"3589849088","3589865471","GB" +"3589865472","3589881855","GR" +"3589881856","3589890047","NL" +"3589890048","3589890191","BE" +"3589890192","3589890303","GB" +"3589890304","3589890367","BE" +"3589890368","3589890431","GB" +"3589890432","3589890559","BE" +"3589890560","3589890687","GB" +"3589890688","3589891327","BE" +"3589891328","3589891615","GB" +"3589891616","3589891631","BE" +"3589891632","3589931007","GB" +"3589931008","3589937647","SI" +"3589937648","3589937663","AT" +"3589937664","3589947391","SI" +"3589947392","3589963775","FI" +"3589963776","3589971231","ES" +"3589971232","3589971247","CA" +"3589971248","3589980159","ES" +"3589980160","3589996543","CZ" +"3589996544","3589997055","GB" +"3589997056","3589997311","NL" +"3589997312","3589997559","GB" +"3589997560","3589997567","NL" +"3589997568","3590012927","GB" +"3590012928","3590029311","BE" +"3590029312","3590033759","FR" +"3590033760","3590033775","AU" +"3590033776","3590045695","FR" +"3590045696","3590062079","RU" +"3590062080","3590078463","DE" +"3590078464","3590094847","RU" +"3590094848","3590111231","DE" +"3590111232","3590113023","LT" +"3590113024","3590113279","LV" +"3590113280","3590127615","LT" +"3590127616","3590143999","GB" +"3590144000","3590151143","SI" +"3590151144","3590151151","HR" +"3590151152","3590155775","SI" +"3590155776","3590155807","HR" +"3590155808","3590155815","SI" +"3590155816","3590155823","HR" +"3590155824","3590155871","SI" +"3590155872","3590156407","HR" +"3590156408","3590156415","RS" +"3590156416","3590156431","HR" +"3590156432","3590156447","SI" +"3590156448","3590156599","HR" +"3590156600","3590156607","SI" +"3590156608","3590156671","HR" +"3590156672","3590156687","SI" +"3590156688","3590156719","HR" +"3590156720","3590156735","SI" +"3590156736","3590156943","HR" +"3590156944","3590156951","SI" +"3590156952","3590156959","HR" +"3590156960","3590157039","SI" +"3590157040","3590157311","HR" +"3590157312","3590157343","RS" +"3590157344","3590157351","SI" +"3590157352","3590157359","RS" +"3590157360","3590157439","SI" +"3590157440","3590157471","RS" +"3590157472","3590157487","SI" +"3590157488","3590157567","RS" +"3590157568","3590157631","SI" +"3590157632","3590157727","RS" +"3590157728","3590157743","SI" +"3590157744","3590157751","RS" +"3590157752","3590157759","SI" +"3590157760","3590157783","RS" +"3590157784","3590157791","SI" +"3590157792","3590157839","RS" +"3590157840","3590157855","SI" +"3590157856","3590157951","RS" +"3590157952","3590158079","SI" +"3590158080","3590158343","RS" +"3590158344","3590158359","SI" +"3590158360","3590158367","RS" +"3590158368","3590158407","SI" +"3590158408","3590158415","RS" +"3590158416","3590158431","ME" +"3590158432","3590158503","RS" +"3590158504","3590158519","SI" +"3590158520","3590159359","RS" +"3590159360","3590160383","SI" +"3590160384","3590176767","GB" +"3590176768","3590178615","HU" +"3590178616","3590178623","MK" +"3590178624","3590193151","HU" +"3590193152","3590201343","IT" +"3590201344","3590209535","DE" +"3590209536","3590225919","ES" +"3590225920","3590226431","TR" +"3590226432","3590226943","US" +"3590226944","3590229247","TR" +"3590229248","3590230271","US" +"3590230272","3590231039","TR" +"3590231040","3590231295","US" +"3590231296","3590234111","TR" +"3590234112","3590242303","GB" +"3590242304","3590244351","US" +"3590244352","3590244607","DE" +"3590244608","3590244863","IT" +"3590244864","3590245119","US" +"3590245120","3590245135","BE" +"3590245136","3590245143","FR" +"3590245144","3590245183","BE" +"3590245184","3590245311","FR" +"3590245312","3590245439","US" +"3590245440","3590245503","FR" +"3590245504","3590245567","GB" +"3590245568","3590246175","FR" +"3590246176","3590246207","AU" +"3590246208","3590246271","FR" +"3590246272","3590246287","DE" +"3590246288","3590246399","FR" +"3590246400","3590246911","US" +"3590246912","3590247039","DE" +"3590247040","3590247055","IT" +"3590247056","3590247063","DE" +"3590247064","3590247071","FR" +"3590247072","3590247103","IT" +"3590247104","3590247167","FR" +"3590247168","3590247231","US" +"3590247232","3590247295","IT" +"3590247296","3590247423","US" +"3590247424","3590247487","IT" +"3590247488","3590247551","US" +"3590247552","3590247679","IT" +"3590247680","3590247687","GB" +"3590247688","3590247711","FR" +"3590247712","3590247743","A1" +"3590247744","3590248447","FR" +"3590248448","3590248959","US" +"3590248960","3590249471","ES" +"3590249472","3590249983","IE" +"3590249984","3590250239","FR" +"3590250240","3590250495","GR" +"3590250496","3590250751","IE" +"3590250752","3590251263","FR" +"3590251264","3590251519","DE" +"3590251520","3590251583","FR" +"3590251584","3590251647","US" +"3590251648","3590251775","NL" +"3590251776","3590251967","FR" +"3590251968","3590252287","ES" +"3590252288","3590252543","FR" +"3590252544","3590253055","LB" +"3590253056","3590253311","DE" +"3590253312","3590253375","FR" +"3590253376","3590253407","US" +"3590253408","3590254079","FR" +"3590254080","3590254111","DE" +"3590254112","3590254127","FR" +"3590254128","3590254135","RU" +"3590254136","3590254143","FR" +"3590254144","3590254271","US" +"3590254272","3590254463","FR" +"3590254464","3590254591","ES" +"3590254592","3590254911","FR" +"3590254912","3590254975","ES" +"3590254976","3590255039","DE" +"3590255040","3590255047","FR" +"3590255048","3590255071","ES" +"3590255072","3590255103","DE" +"3590255104","3590255359","ES" +"3590255360","3590255871","FR" +"3590255872","3590256127","US" +"3590256128","3590256383","ES" +"3590256384","3590256639","FR" +"3590256640","3590256703","US" +"3590256704","3590256719","BE" +"3590256720","3590256735","FR" +"3590256736","3590256767","BE" +"3590256768","3590257151","US" +"3590257152","3590258175","DE" +"3590258176","3590258387","FR" +"3590258388","3590258391","DE" +"3590258392","3590258431","FR" +"3590258432","3590258447","GB" +"3590258448","3590258463","FR" +"3590258464","3590258495","US" +"3590258496","3590258559","FR" +"3590258560","3590258687","US" +"3590258688","3590291455","IT" +"3590291456","3590299647","EG" +"3590299648","3590307839","FI" +"3590307840","3590307903","GB" +"3590307904","3590307935","UA" +"3590307936","3590307951","GB" +"3590307952","3590307967","NG" +"3590307968","3590307991","GB" +"3590307992","3590307995","SO" +"3590307996","3590308031","GB" +"3590308032","3590308047","UG" +"3590308048","3590308055","NG" +"3590308056","3590308063","GB" +"3590308064","3590308071","SO" +"3590308072","3590308079","RW" +"3590308080","3590308087","IQ" +"3590308088","3590308095","GB" +"3590308096","3590308103","IQ" +"3590308104","3590308119","GB" +"3590308120","3590308127","IQ" +"3590308128","3590308135","GB" +"3590308136","3590308143","IQ" +"3590308144","3590308175","GB" +"3590308176","3590308191","IQ" +"3590308192","3590308199","GB" +"3590308200","3590308238","IQ" +"3590308239","3590308247","GB" +"3590308248","3590308287","IQ" +"3590308288","3590308303","GB" +"3590308304","3590308311","SO" +"3590308312","3590308319","IQ" +"3590308320","3590308327","GB" +"3590308328","3590308343","IQ" +"3590308344","3590308351","GB" +"3590308352","3590308367","IQ" +"3590308368","3590308375","GB" +"3590308376","3590308391","IQ" +"3590308392","3590308399","GB" +"3590308400","3590308407","IQ" +"3590308408","3590308415","GB" +"3590308416","3590308431","IQ" +"3590308432","3590308439","GB" +"3590308440","3590308455","IQ" +"3590308456","3590308479","GB" +"3590308480","3590308487","IQ" +"3590308488","3590308519","GB" +"3590308520","3590308527","IQ" +"3590308528","3590308535","GB" +"3590308536","3590308543","IQ" +"3590308544","3590308551","GB" +"3590308552","3590308559","IQ" +"3590308560","3590308567","GB" +"3590308568","3590308583","IQ" +"3590308584","3590308607","GB" +"3590308608","3590308639","AF" +"3590308640","3590308743","GB" +"3590308744","3590308747","SO" +"3590308748","3590308767","GB" +"3590308768","3590308775","RW" +"3590308776","3590308783","ZA" +"3590308784","3590308799","ZW" +"3590308800","3590308807","GB" +"3590308808","3590308815","ZM" +"3590308816","3590308823","KE" +"3590308824","3590308831","SO" +"3590308832","3590308855","GB" +"3590308856","3590308863","NG" +"3590308864","3590309119","ZM" +"3590309120","3590309251","GB" +"3590309252","3590309255","SO" +"3590309256","3590309511","GB" +"3590309512","3590309519","AO" +"3590309520","3590309527","NG" +"3590309528","3590309535","CM" +"3590309536","3590309543","SO" +"3590309544","3590309551","AM" +"3590309552","3590309575","GB" +"3590309576","3590309583","US" +"3590309584","3590309615","GB" +"3590309616","3590309623","UG" +"3590309624","3590309631","GB" +"3590309632","3590309647","IQ" +"3590309648","3590309671","GB" +"3590309672","3590309687","IQ" +"3590309688","3590309711","GB" +"3590309712","3590309719","IQ" +"3590309720","3590309727","GB" +"3590309728","3590309759","IQ" +"3590309760","3590309775","GB" +"3590309776","3590309791","IQ" +"3590309792","3590309799","GB" +"3590309800","3590309807","IQ" +"3590309808","3590309815","GB" +"3590309816","3590309839","IQ" +"3590309840","3590309863","GB" +"3590309864","3590309871","IQ" +"3590309872","3590309879","GB" +"3590309880","3590309887","IQ" +"3590309888","3590310143","BF" +"3590310144","3590310175","IQ" +"3590310176","3590310183","LR" +"3590310184","3590310191","GB" +"3590310192","3590310215","IQ" +"3590310216","3590310223","GB" +"3590310224","3590310255","IQ" +"3590310256","3590310271","GB" +"3590310272","3590310279","IQ" +"3590310280","3590310287","GB" +"3590310288","3590310303","IQ" +"3590310304","3590310311","GB" +"3590310312","3590310319","IQ" +"3590310320","3590310327","GB" +"3590310328","3590310335","NG" +"3590310336","3590310359","GB" +"3590310360","3590310367","IQ" +"3590310368","3590310383","GB" +"3590310384","3590310391","IQ" +"3590310392","3590310911","GB" +"3590310912","3590310919","IQ" +"3590310920","3590310951","GB" +"3590310952","3590310959","IQ" +"3590310960","3590310967","GB" +"3590310968","3590311007","IQ" +"3590311008","3590311031","GB" +"3590311032","3590311039","IQ" +"3590311040","3590311055","GB" +"3590311056","3590311063","IQ" +"3590311064","3590311079","GB" +"3590311080","3590311087","IQ" +"3590311088","3590311103","GB" +"3590311104","3590311111","IQ" +"3590311112","3590311119","GB" +"3590311120","3590311135","IQ" +"3590311136","3590311143","GB" +"3590311144","3590311167","IQ" +"3590311168","3590311175","GB" +"3590311176","3590311183","CD" +"3590311184","3590311199","GB" +"3590311200","3590311207","SD" +"3590311208","3590311215","CD" +"3590311216","3590311223","GB" +"3590311224","3590311231","CD" +"3590311232","3590311255","GB" +"3590311256","3590311263","ZW" +"3590311264","3590311271","GB" +"3590311272","3590311279","SD" +"3590311280","3590311287","NG" +"3590311288","3590311295","GB" +"3590311296","3590311303","LR" +"3590311304","3590311311","GB" +"3590311312","3590311319","CD" +"3590311320","3590311327","CI" +"3590311328","3590311335","CD" +"3590311336","3590311343","SD" +"3590311344","3590311351","LY" +"3590311352","3590311359","CD" +"3590311360","3590311367","LY" +"3590311368","3590311383","CD" +"3590311384","3590311391","NG" +"3590311392","3590311679","GB" +"3590311680","3590311935","YT" +"3590311936","3590312447","GB" +"3590312448","3590312703","MW" +"3590312704","3590312799","GB" +"3590312800","3590312807","KE" +"3590312808","3590312895","GB" +"3590312896","3590312903","ZA" +"3590312904","3590312911","AO" +"3590312912","3590312919","NG" +"3590312920","3590312927","GB" +"3590312928","3590312943","UG" +"3590312944","3590312951","GB" +"3590312952","3590312959","KE" +"3590312960","3590314623","GB" +"3590314624","3590314639","ET" +"3590314640","3590314655","GH" +"3590314656","3590314671","GB" +"3590314672","3590314679","UG" +"3590314680","3590314719","GB" +"3590314720","3590314727","TG" +"3590314728","3590314735","UG" +"3590314736","3590314743","NG" +"3590314744","3590314887","GB" +"3590314888","3590314895","NG" +"3590314896","3590314903","GB" +"3590314904","3590314911","KE" +"3590314912","3590314927","GB" +"3590314928","3590314943","NG" +"3590314944","3590314967","GB" +"3590314968","3590314973","YT" +"3590314974","3590314975","GB" +"3590314976","3590314983","UG" +"3590314984","3590316031","GB" +"3590316032","3590316039","TZ" +"3590316040","3590316047","GB" +"3590316048","3590316055","GH" +"3590316056","3590316071","IQ" +"3590316072","3590316079","GB" +"3590316080","3590316087","LB" +"3590316088","3590316127","GB" +"3590316128","3590316151","NG" +"3590316152","3590316191","GB" +"3590316192","3590316199","IQ" +"3590316200","3590316231","GB" +"3590316232","3590316239","LB" +"3590316240","3590316271","GB" +"3590316272","3590316279","IQ" +"3590316280","3590316282","GB" +"3590316283","3590316283","US" +"3590316284","3590316567","GB" +"3590316568","3590316575","IQ" +"3590316576","3590316591","GB" +"3590316592","3590316599","IQ" +"3590316600","3590316663","GB" +"3590316664","3590316671","LY" +"3590316672","3590316727","GB" +"3590316728","3590316735","LB" +"3590316736","3590317055","GB" +"3590317056","3590317311","NG" +"3590317312","3590317343","AO" +"3590317344","3590317439","GB" +"3590317440","3590317447","AM" +"3590317448","3590317455","LB" +"3590317456","3590317463","IQ" +"3590317464","3590317471","GB" +"3590317472","3590317479","MW" +"3590317480","3590317495","GB" +"3590317496","3590317503","LB" +"3590317504","3590317527","GB" +"3590317528","3590317543","IQ" +"3590317544","3590317567","GB" +"3590317568","3590317823","US" +"3590317824","3590317951","GB" +"3590317952","3590318047","UA" +"3590318048","3590319167","GB" +"3590319168","3590319231","AE" +"3590319232","3590319335","GB" +"3590319336","3590319359","AE" +"3590319360","3590319423","GB" +"3590319424","3590319455","AE" +"3590319456","3590319967","GB" +"3590319968","3590319999","AE" +"3590320000","3590320199","GB" +"3590320200","3590320207","IQ" +"3590320208","3590320231","GB" +"3590320232","3590320239","IQ" +"3590320240","3590320303","GB" +"3590320304","3590320319","IQ" +"3590320320","3590320335","GB" +"3590320336","3590320343","UG" +"3590320344","3590320351","GB" +"3590320352","3590320359","IQ" +"3590320360","3590320375","GB" +"3590320376","3590320383","IQ" +"3590320384","3590321679","GB" +"3590321680","3590321687","CM" +"3590321688","3590321695","GB" +"3590321696","3590321711","ZW" +"3590321712","3590321943","GB" +"3590321944","3590321959","IQ" +"3590321960","3590321967","GB" +"3590321968","3590321983","TR" +"3590321984","3590322007","GB" +"3590322008","3590322015","IQ" +"3590322016","3590322063","GB" +"3590322064","3590322071","IQ" +"3590322072","3590322111","GB" +"3590322112","3590322119","BJ" +"3590322120","3590322151","GB" +"3590322152","3590322159","LY" +"3590322160","3590322175","GB" +"3590322176","3590322431","A2" +"3590322432","3590322559","LB" +"3590322560","3590322607","GB" +"3590322608","3590322687","LB" +"3590322688","3590323199","IQ" +"3590323200","3590323711","MW" +"3590323712","3590323903","GB" +"3590323904","3590323911","CD" +"3590323912","3590323983","GB" +"3590323984","3590323991","NG" +"3590323992","3590323999","GB" +"3590324000","3590324007","LR" +"3590324008","3590324015","GB" +"3590324016","3590324023","NG" +"3590324024","3590324031","ZW" +"3590324032","3590324167","GB" +"3590324168","3590324175","BW" +"3590324176","3590324183","LR" +"3590324184","3590324191","SD" +"3590324192","3590324199","VG" +"3590324200","3590324207","TZ" +"3590324208","3590324215","CD" +"3590324216","3590324223","NG" +"3590324224","3623890943","US" +"3623890944","3623891199","ZA" +"3623891200","3623891455","US" +"3623891456","3623891711","ZA" +"3623891712","3623891967","US" +"3623891968","3623892479","ZA" +"3623892480","3624054783","US" +"3624054784","3624056831","ZA" +"3624056832","3624181759","US" +"3624181760","3624182783","ZA" +"3624182784","3624206335","US" +"3624206336","3624208383","ZA" +"3624208384","3624255487","US" +"3624255488","3624257535","ZA" +"3624257536","3624271871","US" +"3624271872","3624272383","SY" +"3624272384","3624272415","US" +"3624272416","3624272639","CA" +"3624272640","3624272895","DZ" +"3624272896","3624275967","CA" +"3624275968","3624276223","US" +"3624276224","3624279071","CA" +"3624279072","3624279087","BD" +"3624279088","3624281087","CA" +"3624281088","3624281343","HT" +"3624281344","3624283135","CA" +"3624283136","3624284159","US" +"3624284160","3624286193","CA" +"3624286194","3624286194","ZA" +"3624286195","3624288255","CA" +"3624288256","3624290303","IN" +"3624290304","3624292351","CA" +"3624292352","3624292607","MF" +"3624292608","3624292863","US" +"3624292864","3624294143","CA" +"3624294144","3624294399","US" +"3624294400","3624294911","CA" +"3624294912","3624295167","US" +"3624295168","3624295935","CA" +"3624295936","3624296191","LY" +"3624296192","3624297215","CA" +"3624297216","3624297471","US" +"3624297472","3624298495","CO" +"3624298496","3624299519","PH" +"3624299520","3624300031","CA" +"3624300032","3624300287","LY" +"3624300288","3624302847","CA" +"3624302848","3624303103","MY" +"3624303104","3624303359","CA" +"3624303360","3624303615","US" +"3624303616","3624303743","CA" +"3624303744","3624303759","ZA" +"3624303760","3624304639","CA" +"3624304640","3624321023","US" +"3624321024","3624325119","CA" +"3624325120","3624330511","US" +"3624330512","3624330519","CA" +"3624330520","3624357887","US" +"3624357888","3624358143","KN" +"3624358144","3624359679","US" +"3624359680","3624360703","AN" +"3624360704","3624374431","US" +"3624374432","3624374439","GB" +"3624374440","3624374447","US" +"3624374448","3624374455","ES" +"3624374456","3624374463","DE" +"3624374464","3624374543","US" +"3624374544","3624374551","ES" +"3624374552","3624374559","US" +"3624374560","3624374599","ES" +"3624374600","3624375871","US" +"3624375872","3624375879","NL" +"3624375880","3624376023","US" +"3624376024","3624376031","GB" +"3624376032","3624376247","US" +"3624376248","3624376263","ES" +"3624376264","3624376279","US" +"3624376280","3624376303","GB" +"3624376304","3624376335","US" +"3624376336","3624376343","AU" +"3624376344","3624376351","US" +"3624376352","3624376359","PT" +"3624376360","3624376567","US" +"3624376568","3624376575","NL" +"3624376576","3624376655","US" +"3624376656","3624376679","GB" +"3624376680","3624377319","US" +"3624377320","3624377323","GB" +"3624377324","3624377599","US" +"3624377600","3624377855","A2" +"3624377856","3624377863","US" +"3624377864","3624377871","GB" +"3624377872","3624377879","US" +"3624377880","3624377887","GB" +"3624377888","3624377903","US" +"3624377904","3624377911","GB" +"3624377912","3624377919","US" +"3624377920","3624377935","ES" +"3624377936","3624377999","US" +"3624378000","3624378007","ES" +"3624378008","3624378039","US" +"3624378040","3624378047","GB" +"3624378048","3624380831","US" +"3624380832","3624380839","OM" +"3624380840","3624380935","US" +"3624380936","3624380943","SA" +"3624380944","3624381567","US" +"3624381568","3624381583","MY" +"3624381584","3624381631","US" +"3624381632","3624381647","GB" +"3624381648","3624381807","US" +"3624381808","3624381823","IN" +"3624381824","3624381903","US" +"3624381904","3624381919","CA" +"3624381920","3624382031","US" +"3624382032","3624382047","RO" +"3624382048","3624383071","US" +"3624383072","3624383087","GB" +"3624383088","3624383287","US" +"3624383288","3624383295","AU" +"3624383296","3624386559","US" +"3624386560","3624394751","CA" +"3624394752","3624435711","US" +"3624435712","3624438664","CA" +"3624438665","3624438665","US" +"3624438666","3624443871","CA" +"3624443872","3624443879","US" +"3624443880","3624443903","CA" +"3624443904","3624443919","US" +"3624443920","3624444303","CA" +"3624444304","3624444319","US" +"3624444320","3624444343","CA" +"3624444344","3624444351","US" +"3624444352","3624444359","CA" +"3624444360","3624444367","US" +"3624444368","3624452095","CA" +"3624452096","3624480767","US" +"3624480768","3624484863","CA" +"3624484864","3624534015","US" +"3624534016","3624534271","PA" +"3624534272","3624536063","CA" +"3624536064","3624546559","US" +"3624546560","3624546687","A2" +"3624546688","3624546695","CA" +"3624546696","3624546815","A2" +"3624546816","3624547327","US" +"3624547328","3624547647","A2" +"3624547648","3624547711","US" +"3624547712","3624547743","A2" +"3624547744","3624547839","US" +"3624547840","3624547847","A2" +"3624547848","3624547863","US" +"3624547864","3624547871","A2" +"3624547872","3624547895","US" +"3624547896","3624547919","A2" +"3624547920","3624547967","US" +"3624547968","3624548007","A2" +"3624548008","3624548031","US" +"3624548032","3624548039","A2" +"3624548040","3624548063","US" +"3624548064","3624548087","A2" +"3624548088","3624548095","US" +"3624548096","3624548351","A2" +"3624548352","3624548359","US" +"3624548360","3624548679","A2" +"3624548680","3624548687","US" +"3624548688","3624548703","A2" +"3624548704","3624548711","US" +"3624548712","3624548735","A2" +"3624548736","3624548935","US" +"3624548936","3624548959","A2" +"3624548960","3624548975","US" +"3624548976","3624549023","A2" +"3624549024","3624549047","US" +"3624549048","3624549063","A2" +"3624549064","3624549079","US" +"3624549080","3624549087","A2" +"3624549088","3624549103","US" +"3624549104","3624549111","A2" +"3624549112","3624549119","US" +"3624549120","3624549311","A2" +"3624549312","3624549327","US" +"3624549328","3624549335","A2" +"3624549336","3624549343","US" +"3624549344","3624549375","A2" +"3624549376","3624549383","US" +"3624549384","3624549471","A2" +"3624549472","3624549479","US" +"3624549480","3624549583","A2" +"3624549584","3624549615","US" +"3624549616","3624550143","A2" +"3624550144","3624587263","US" +"3624587264","3624591359","JM" +"3624591360","3624714239","US" +"3624714240","3624715927","SG" +"3624715928","3624715935","GB" +"3624715936","3624716223","SG" +"3624716224","3624716255","AU" +"3624716256","3624717311","SG" +"3624717312","3624718335","US" +"3624718336","3624720383","SG" +"3624720384","3624720895","US" +"3624720896","3624721919","SG" +"3624721920","3624730623","US" +"3624730624","3624796159","CA" +"3624796160","3624820735","US" +"3624820736","3624820799","CY" +"3624820800","3624821695","US" +"3624821696","3624821703","GB" +"3624821704","3624828927","US" +"3624828928","3624833023","CA" +"3624833024","3624845311","US" +"3624845312","3624849407","AU" +"3624849408","3624895055","US" +"3624895056","3624895071","TZ" +"3624895072","3624895103","US" +"3624895104","3624895119","DE" +"3624895120","3624895135","US" +"3624895136","3624895151","IN" +"3624895152","3624895167","US" +"3624895168","3624895183","VE" +"3624895184","3624895775","US" +"3624895776","3624895807","MY" +"3624895808","3624895935","US" +"3624895936","3624895967","IN" +"3624895968","3624895999","US" +"3624896000","3624896255","CA" +"3624896256","3624896383","US" +"3624896384","3624896415","IN" +"3624896416","3624896767","US" +"3624896768","3624896831","IN" +"3624896832","3624897279","US" +"3624897280","3624897407","CA" +"3624897408","3624897535","US" +"3624897536","3624897663","CA" +"3624897664","3624897791","US" +"3624897792","3624898047","IN" +"3624898048","3624898303","US" +"3624898304","3624898559","CA" +"3624898560","3624898815","US" +"3624898816","3624899071","AU" +"3624899072","3624899327","CA" +"3624899328","3624899583","US" +"3624899584","3624899839","AU" +"3624899840","3624900607","US" +"3624900608","3624900639","AU" +"3624900640","3624900671","BE" +"3624900672","3624900735","US" +"3624900736","3624900767","CA" +"3624900768","3624900831","US" +"3624900832","3624900863","DE" +"3624900864","3624900903","US" +"3624900904","3624900911","CA" +"3624900912","3624900951","US" +"3624900952","3624900959","FR" +"3624900960","3624900967","US" +"3624900968","3624900975","CA" +"3624900976","3624901103","US" +"3624901104","3624901111","IN" +"3624901112","3624901279","US" +"3624901280","3624901311","CA" +"3624901312","3624901343","BE" +"3624901344","3624901887","US" +"3624901888","3624901919","IN" +"3624901920","3624901951","MY" +"3624901952","3624902111","US" +"3624902112","3624902143","IN" +"3624902144","3624902271","US" +"3624902272","3624902399","MY" +"3624902400","3624902655","US" +"3624902656","3624902783","IN" +"3624902784","3624902911","CA" +"3624902912","3624902943","US" +"3624902944","3624902975","CA" +"3624902976","3624903071","US" +"3624903072","3624903103","HK" +"3624903104","3624903455","US" +"3624903456","3624903487","CA" +"3624903488","3624903519","US" +"3624903520","3624903583","CA" +"3624903584","3624903679","US" +"3624903680","3624903807","CA" +"3624903808","3624903935","US" +"3624903936","3624904703","CA" +"3624904704","3624904767","IN" +"3624904768","3624904831","US" +"3624904832","3624904895","CA" +"3624904896","3624905023","IN" +"3624905024","3624905087","US" +"3624905088","3624905215","CA" +"3624905216","3624905471","US" +"3624905472","3624905727","CA" +"3624905728","3624906239","US" +"3624906240","3624906495","CA" +"3624906496","3624906751","US" +"3624906752","3624906879","CA" +"3624906880","3624907007","TW" +"3624907008","3624907039","FR" +"3624907040","3624907071","US" +"3624907072","3624907103","CA" +"3624907104","3624907391","US" +"3624907392","3624907455","IN" +"3624907456","3624907518","MY" +"3624907519","3624907519","US" +"3624907520","3624907551","IN" +"3624907552","3624907583","US" +"3624907584","3624907615","CA" +"3624907616","3624907679","US" +"3624907680","3624907711","IN" +"3624907712","3624907745","US" +"3624907746","3624907775","IN" +"3624907776","3624907903","US" +"3624907904","3624908031","SG" +"3624908032","3624908159","CA" +"3624908160","3624908287","US" +"3624908288","3624908319","CA" +"3624908320","3624908383","US" +"3624908384","3624908415","IN" +"3624908416","3624908447","CA" +"3624908448","3624908479","US" +"3624908480","3624908511","CA" +"3624908512","3624908559","US" +"3624908560","3624908575","MY" +"3624908576","3624908607","US" +"3624908608","3624908622","CA" +"3624908623","3624908639","US" +"3624908640","3624908687","CA" +"3624908688","3624908783","US" +"3624908784","3624908799","CA" +"3624908800","3624909471","US" +"3624909472","3624909503","AU" +"3624909504","3624909567","US" +"3624909568","3624909822","MY" +"3624909823","3624909823","US" +"3624909824","3624909951","CA" +"3624909952","3624910079","US" +"3624910080","3624910111","CA" +"3624910112","3624910143","US" +"3624910144","3624910175","CA" +"3624910176","3624910207","BE" +"3624910208","3624910271","US" +"3624910272","3624910303","FR" +"3624910304","3624910591","US" +"3624910592","3624910623","CA" +"3624910624","3624910687","US" +"3624910688","3624910719","CA" +"3624910720","3624910751","US" +"3624910752","3624910783","TZ" +"3624910784","3624910815","US" +"3624910816","3624910847","AU" +"3624910848","3624910911","US" +"3624910912","3624910975","IN" +"3624910976","3624911007","FR" +"3624911008","3624911039","CA" +"3624911040","3624911103","US" +"3624911104","3624911135","CA" +"3624911136","3624911167","US" +"3624911168","3624911199","MY" +"3624911200","3624911231","BE" +"3624911232","3624911263","CA" +"3624911264","3624911327","US" +"3624911328","3624911615","CA" +"3624911616","3624911647","US" +"3624911648","3624911651","RU" +"3624911652","3624911999","US" +"3624912000","3624912127","CA" +"3624912128","3624912679","US" +"3624912680","3624912687","IN" +"3624912688","3624912727","US" +"3624912728","3624912735","TT" +"3624912736","3624912759","US" +"3624912760","3624912767","MY" +"3624912768","3624912863","US" +"3624912864","3624912871","MX" +"3624912872","3624912959","US" +"3624912960","3624913087","IN" +"3624913088","3624913247","US" +"3624913248","3624913279","CA" +"3624913280","3624913311","US" +"3624913312","3624913343","CA" +"3624913344","3624913375","PK" +"3624913376","3624913407","US" +"3624913408","3624913535","CA" +"3624913536","3624913663","IN" +"3624913664","3624914047","US" +"3624914048","3624914079","IN" +"3624914080","3624914143","US" +"3624914144","3624914175","GB" +"3624914176","3624914271","US" +"3624914272","3624914303","CA" +"3624914304","3624914335","US" +"3624914336","3624914367","CA" +"3624914368","3624914399","IN" +"3624914400","3624914687","US" +"3624914688","3624914943","BE" +"3624914944","3624915071","CA" +"3624915072","3624915455","US" +"3624915456","3624915487","CA" +"3624915488","3624915903","US" +"3624915904","3624915935","HK" +"3624915936","3624916223","US" +"3624916224","3624916735","CA" +"3624916736","3624917247","US" +"3624917248","3624917503","AU" +"3624917504","3624917919","US" +"3624917920","3624917951","CA" +"3624917952","3624917983","US" +"3624917984","3624918015","CA" +"3624918016","3624918527","US" +"3624918528","3624918815","CA" +"3624918816","3624918847","US" +"3624918848","3624918875","IN" +"3624918876","3624918943","US" +"3624918944","3624918975","CA" +"3624918976","3624919007","US" +"3624919008","3624919039","MY" +"3624919040","3624919071","US" +"3624919072","3624919103","BE" +"3624919104","3624919295","US" +"3624919296","3624919423","CA" +"3624919424","3624919551","IN" +"3624919552","3624919967","US" +"3624919968","3624919999","BE" +"3624920000","3624920031","CA" +"3624920032","3624920063","TZ" +"3624920064","3624920191","CA" +"3624920192","3624920319","IN" +"3624920320","3624920703","CA" +"3624920704","3624920831","IN" +"3624920832","3624920959","CA" +"3624920960","3624921087","IN" +"3624921088","3624921215","PK" +"3624921216","3624921343","CA" +"3624921344","3624921855","US" +"3624921856","3624922111","CA" +"3624922112","3624922143","US" +"3624922144","3624922175","FR" +"3624922176","3624922207","MY" +"3624922208","3624922239","FR" +"3624922240","3624922335","US" +"3624922336","3624922367","FR" +"3624922368","3624922495","IN" +"3624922496","3624922623","BE" +"3624922624","3624922687","CA" +"3624922688","3624922783","US" +"3624922784","3624922815","CN" +"3624922816","3624922847","FR" +"3624922848","3624922879","US" +"3624922880","3624923135","IN" +"3624923136","3624923263","CA" +"3624923264","3624923391","US" +"3624923392","3624923519","CA" +"3624923520","3624923647","US" +"3624923648","3624923775","CA" +"3624923776","3624923903","US" +"3624923904","3624923935","CA" +"3624923936","3624923967","US" +"3624923968","3624923999","IN" +"3624924000","3624924095","US" +"3624924096","3624924127","CA" +"3624924128","3624924287","US" +"3624924288","3624924703","CA" +"3624924704","3624924895","US" +"3624924896","3624924927","CA" +"3624924928","3624925054","US" +"3624925055","3624925695","CA" +"3624925696","3624926335","US" +"3624926336","3624926463","TZ" +"3624926464","3624926527","CA" +"3624926528","3624926591","US" +"3624926592","3624926655","IN" +"3624926656","3624926975","CA" +"3624926976","3624927039","US" +"3624927040","3624927071","HK" +"3624927072","3624927167","US" +"3624927168","3624927199","TH" +"3624927200","3624984575","US" +"3624984576","3624986367","CA" +"3624986368","3624986399","US" +"3624986400","3624990431","CA" +"3624990432","3624990463","US" +"3624990464","3624991223","CA" +"3624991224","3624991231","US" +"3624991232","3624992767","CA" +"3624992768","3625002351","US" +"3625002352","3625002367","CA" +"3625002368","3625042327","US" +"3625042328","3625042335","IT" +"3625042336","3625058303","US" +"3625058304","3625091071","CA" +"3625091072","3625116671","US" +"3625116672","3625116767","CA" +"3625116768","3625116927","US" +"3625116928","3625117183","SE" +"3625117184","3625117775","US" +"3625117776","3625117783","CA" +"3625117784","3625117791","US" +"3625117792","3625117799","CA" +"3625117800","3625117807","US" +"3625117808","3625117839","CA" +"3625117840","3625118233","US" +"3625118234","3625118241","CA" +"3625118242","3625118271","US" +"3625118272","3625118287","CA" +"3625118288","3625118975","US" +"3625118976","3625119056","PL" +"3625119057","3625140223","US" +"3625140224","3625148415","CA" +"3625148416","3625168895","US" +"3625168896","3625172991","CA" +"3625172992","3625176767","US" +"3625176768","3625176831","NZ" +"3625176832","3625243215","US" +"3625243216","3625243223","CA" +"3625243224","3625245439","US" +"3625245440","3625245767","MX" +"3625245768","3625245903","US" +"3625245904","3625245911","BZ" +"3625245912","3625245951","US" +"3625245952","3625246255","MX" +"3625246256","3625246263","US" +"3625246264","3625246271","MX" +"3625246272","3625246279","US" +"3625246280","3625246287","MX" +"3625246288","3625246295","US" +"3625246296","3625246375","MX" +"3625246376","3625246399","US" +"3625246400","3625246535","MX" +"3625246536","3625246543","US" +"3625246544","3625246719","MX" +"3625246720","3625287679","US" +"3625287680","3625288887","CA" +"3625288888","3625288895","US" +"3625288896","3625289959","CA" +"3625289960","3625289967","US" +"3625289968","3625292575","CA" +"3625292576","3625292583","US" +"3625292584","3625292671","CA" +"3625292672","3625292679","US" +"3625292680","3625292927","CA" +"3625292928","3625292935","US" +"3625292936","3625293607","CA" +"3625293608","3625293615","US" +"3625293616","3625295871","CA" +"3625295872","3625320447","US" +"3625320448","3625320467","CA" +"3625320468","3625325055","US" +"3625325056","3625325087","RU" +"3625325088","3625326632","US" +"3625326633","3625326642","GB" +"3625326643","3625327748","US" +"3625327749","3625327812","ID" +"3625327813","3625327814","US" +"3625327815","3625327824","GB" +"3625327825","3625333383","US" +"3625333384","3625333391","GB" +"3625333392","3625333455","US" +"3625333456","3625333463","GB" +"3625333464","3625346047","US" +"3625346048","3625346303","AR" +"3625346304","3625357631","US" +"3625357632","3625357639","CA" +"3625357640","3625358055","US" +"3625358056","3625358063","CH" +"3625358064","3625364351","US" +"3625364352","3625364479","DE" +"3625364480","3625364607","NL" +"3625364608","3625364733","DE" +"3625364734","3625364895","US" +"3625364896","3625364911","NO" +"3625364912","3625364951","US" +"3625364952","3625364959","NL" +"3625364960","3625364967","ZA" +"3625364968","3625373711","US" +"3625373712","3625373719","GB" +"3625373720","3625373735","US" +"3625373736","3625373743","CA" +"3625373744","3625373751","GB" +"3625373752","3625373823","US" +"3625373824","3625373831","CA" +"3625373832","3625373887","US" +"3625373888","3625373895","GB" +"3625373896","3625373953","US" +"3625373954","3625373983","CA" +"3625373984","3625374031","US" +"3625374032","3625374044","GB" +"3625374045","3625374047","US" +"3625374048","3625374063","CA" +"3625374064","3625374143","US" +"3625374144","3625374159","CA" +"3625374160","3625374879","US" +"3625374880","3625374911","MX" +"3625374912","3625375039","US" +"3625375040","3625375071","CA" +"3625375072","3625375135","US" +"3625375136","3625375167","RU" +"3625375168","3625375247","US" +"3625375248","3625375255","CA" +"3625375256","3625375359","US" +"3625375360","3625375367","SE" +"3625375368","3625375399","US" +"3625375400","3625375407","MT" +"3625375408","3625375519","US" +"3625375520","3625375527","JM" +"3625375528","3625375599","US" +"3625375600","3625375607","JM" +"3625375608","3625375935","US" +"3625375936","3625375982","SG" +"3625375983","3625376031","US" +"3625376032","3625376063","AR" +"3625376064","3625376159","US" +"3625376160","3625376191","LB" +"3625376192","3625376223","TR" +"3625376224","3625377023","US" +"3625377024","3625377535","TH" +"3625377536","3625377583","US" +"3625377584","3625377599","CA" +"3625377600","3625381911","US" +"3625381912","3625381919","CA" +"3625381920","3625382079","US" +"3625382080","3625382111","CA" +"3625382112","3625418751","US" +"3625418752","3625420031","CA" +"3625420032","3625420543","US" +"3625420544","3625422591","CA" +"3625422592","3625423103","US" +"3625423104","3625426943","CA" +"3625426944","3625508863","US" +"3625508864","3625512959","CA" +"3625512960","3625514303","US" +"3625514304","3625514367","GB" +"3625514368","3625528541","US" +"3625528542","3625528551","AU" +"3625528552","3625574399","US" +"3625574400","3625577983","A2" +"3625577984","3625581631","US" +"3625581632","3625581647","NL" +"3625581648","3625631743","US" +"3625631744","3625639935","CA" +"3625639936","3625959423","US" +"3625959424","3625961471","GB" +"3625961472","3626025919","US" +"3626025920","3626025951","LT" +"3626025952","3626060735","US" +"3626060736","3626060743","BM" +"3626060744","3626061903","US" +"3626061904","3626061911","BM" +"3626061912","3626069279","US" +"3626069280","3626069311","NL" +"3626069312","3626072959","US" +"3626072960","3626072991","AE" +"3626072992","3626073439","US" +"3626073440","3626073455","AE" +"3626073456","3626091519","US" +"3626091520","3626092031","AR" +"3626092032","3626108895","US" +"3626108896","3626108927","AU" +"3626108928","3626130415","US" +"3626130416","3626130431","CA" +"3626130432","3626140479","US" +"3626140480","3626140671","AU" +"3626140672","3626142623","US" +"3626142624","3626142639","AU" +"3626142640","3626184191","US" +"3626184192","3626184223","LT" +"3626184224","3626189359","US" +"3626189360","3626189367","NO" +"3626189368","3626189375","US" +"3626189376","3626189383","IL" +"3626189384","3626189431","US" +"3626189432","3626189439","IL" +"3626189440","3626191119","US" +"3626191120","3626191135","GB" +"3626191136","3626192639","US" +"3626192640","3626192703","CY" +"3626192704","3626192767","US" +"3626192768","3626192799","CH" +"3626192800","3626213439","US" +"3626213440","3626213471","GB" +"3626213472","3626222653","US" +"3626222654","3626222654","CA" +"3626222655","3626225407","US" +"3626225408","3626225663","HK" +"3626225664","3626227167","US" +"3626227168","3626227199","AR" +"3626227200","3626228463","US" +"3626228464","3626228479","AE" +"3626228480","3626230815","US" +"3626230816","3626230847","DE" +"3626230848","3626231807","US" +"3626231808","3626231967","GB" +"3626231968","3626270719","US" +"3626270720","3626287103","CA" +"3626287104","3626332159","US" +"3626332160","3626334207","CA" +"3626334208","3626334463","US" +"3626334464","3626336255","CA" +"3626336256","3626381317","US" +"3626381318","3626381321","AU" +"3626381322","3626381325","CR" +"3626381326","3626381329","IT" +"3626381330","3626381337","US" +"3626381338","3626381341","IL" +"3626381342","3626381349","US" +"3626381350","3626381353","QA" +"3626381354","3626381373","US" +"3626381374","3626381377","AU" +"3626381378","3626381401","US" +"3626381402","3626381405","MX" +"3626381406","3626381409","US" +"3626381410","3626381419","MX" +"3626381420","3626381423","GB" +"3626381424","3626381435","US" +"3626381436","3626381439","TR" +"3626381440","3626381451","US" +"3626381452","3626381456","GB" +"3626381457","3626381460","CA" +"3626381461","3626381480","US" +"3626381481","3626381484","VE" +"3626381485","3626381492","US" +"3626381493","3626381496","CO" +"3626381497","3626381508","US" +"3626381509","3626381510","RU" +"3626381511","3626381512","BE" +"3626381513","3626381516","US" +"3626381517","3626381520","GB" +"3626381521","3626381524","IN" +"3626381525","3626381528","US" +"3626381529","3626381532","IT" +"3626381533","3626381541","US" +"3626381542","3626381545","CL" +"3626381546","3626381549","US" +"3626381550","3626381553","GB" +"3626381554","3626381555","US" +"3626381556","3626381559","RU" +"3626381560","3626381564","US" +"3626381565","3626381566","GR" +"3626381567","3626381573","US" +"3626381574","3626381577","ID" +"3626381578","3626381597","US" +"3626381598","3626381601","VE" +"3626381602","3626381605","IL" +"3626381606","3626381609","US" +"3626381610","3626381613","DE" +"3626381614","3626381621","US" +"3626381622","3626381625","FR" +"3626381626","3626381641","US" +"3626381642","3626381645","VI" +"3626381646","3626381649","US" +"3626381650","3626381653","AU" +"3626381654","3626381657","US" +"3626381658","3626381661","BE" +"3626381662","3626381675","US" +"3626381676","3626381679","GB" +"3626381680","3626381702","US" +"3626381703","3626381706","LB" +"3626381707","3626381710","GB" +"3626381711","3626381715","US" +"3626381716","3626381719","NL" +"3626381720","3626381732","US" +"3626381733","3626381736","EG" +"3626381737","3626381740","FR" +"3626381741","3626381742","RU" +"3626381743","3626381744","US" +"3626381745","3626381748","IE" +"3626381749","3626381750","CA" +"3626381751","3626381752","US" +"3626381753","3626381755","GB" +"3626381756","3626381759","CA" +"3626381760","3626381763","SA" +"3626381764","3626381767","US" +"3626381768","3626381771","RU" +"3626381772","3626381779","US" +"3626381780","3626381783","AU" +"3626381784","3626381797","US" +"3626381798","3626381801","MX" +"3626381802","3626381803","US" +"3626381804","3626381816","RU" +"3626381817","3626381842","US" +"3626381843","3626381846","CA" +"3626381847","3626381862","US" +"3626381863","3626381866","GB" +"3626381867","3626381874","US" +"3626381875","3626381882","IN" +"3626381883","3626381894","US" +"3626381895","3626381898","CA" +"3626381899","3626381920","US" +"3626381921","3626381924","NL" +"3626381925","3626381936","US" +"3626381937","3626381940","GB" +"3626381941","3626381944","US" +"3626381945","3626381948","CA" +"3626381949","3626381972","US" +"3626381973","3626381976","GB" +"3626381977","3626381980","VN" +"3626381981","3626381984","RU" +"3626381985","3626381988","US" +"3626381989","3626381992","LK" +"3626381993","3626381993","US" +"3626381994","3626381997","NZ" +"3626381998","3626382001","SA" +"3626382002","3626382025","US" +"3626382026","3626382029","CO" +"3626382030","3626382033","RO" +"3626382034","3626382069","US" +"3626382070","3626382073","CA" +"3626382074","3626382074","US" +"3626382075","3626382078","IN" +"3626382079","3626382085","US" +"3626382086","3626382087","GB" +"3626382088","3626382101","US" +"3626382102","3626382105","GB" +"3626382106","3626382109","US" +"3626382110","3626382113","IN" +"3626382114","3626382117","CH" +"3626382118","3626382121","SG" +"3626382122","3626382133","US" +"3626382134","3626382137","CA" +"3626382138","3626382145","US" +"3626382146","3626382149","CA" +"3626382150","3626382169","US" +"3626382170","3626382173","CA" +"3626382174","3626382177","NZ" +"3626382178","3626382181","US" +"3626382182","3626382185","ES" +"3626382186","3626382193","US" +"3626382194","3626382197","IN" +"3626382198","3626382207","US" +"3626382208","3626382211","IN" +"3626382212","3626382223","US" +"3626382224","3626382227","CN" +"3626382228","3626382239","US" +"3626382240","3626382243","NL" +"3626382244","3626382247","US" +"3626382248","3626382251","IN" +"3626382252","3626382263","US" +"3626382264","3626382267","CA" +"3626382268","3626382271","IT" +"3626382272","3626382275","US" +"3626382276","3626382279","GB" +"3626382280","3626382283","DK" +"3626382284","3626382295","US" +"3626382296","3626382299","AR" +"3626382300","3626382307","US" +"3626382308","3626382311","RS" +"3626382312","3626382315","US" +"3626382316","3626382319","IN" +"3626382320","3626382324","US" +"3626382325","3626382328","CA" +"3626382329","3626382332","US" +"3626382333","3626382334","IN" +"3626382335","3626382353","US" +"3626382354","3626382357","GB" +"3626382358","3626382361","RU" +"3626382362","3626382365","TH" +"3626382366","3626382378","US" +"3626382379","3626382383","IN" +"3626382384","3626382387","US" +"3626382388","3626382391","SR" +"3626382392","3626382395","IT" +"3626382396","3626382399","US" +"3626382400","3626382403","AU" +"3626382404","3626382411","US" +"3626382412","3626382415","CN" +"3626382416","3626382419","GB" +"3626382420","3626382434","US" +"3626382435","3626382438","BR" +"3626382439","3626382442","ZA" +"3626382443","3626382450","US" +"3626382451","3626382454","GR" +"3626382455","3626382458","FR" +"3626382459","3626382470","US" +"3626382471","3626382474","AU" +"3626382475","3626382478","US" +"3626382479","3626382482","JP" +"3626382483","3626382486","US" +"3626382487","3626382490","IL" +"3626382491","3626382494","MY" +"3626382495","3626382498","GB" +"3626382499","3626382502","US" +"3626382503","3626382506","BR" +"3626382507","3626382518","US" +"3626382519","3626382522","GR" +"3626382523","3626382526","SG" +"3626382527","3626382534","US" +"3626382535","3626382538","BR" +"3626382539","3626382546","US" +"3626382547","3626382550","IN" +"3626382551","3626382570","US" +"3626382571","3626382574","IT" +"3626382575","3626382578","US" +"3626382579","3626382582","IN" +"3626382583","3626382597","US" +"3626382598","3626382601","IN" +"3626382602","3626382635","US" +"3626382636","3626382639","TH" +"3626382640","3626382670","US" +"3626382671","3626382674","AU" +"3626382675","3626382678","US" +"3626382679","3626382682","UA" +"3626382683","3626382686","US" +"3626382687","3626382690","TR" +"3626382691","3626382694","US" +"3626382695","3626382698","BR" +"3626382699","3626382755","US" +"3626382756","3626382759","GB" +"3626382760","3626382763","US" +"3626382764","3626382767","CA" +"3626382768","3626382771","US" +"3626382772","3626382775","IN" +"3626382776","3626382787","US" +"3626382788","3626382791","IT" +"3626382792","3626382795","PT" +"3626382796","3626382815","US" +"3626382816","3626382819","AU" +"3626382820","3626382835","US" +"3626382836","3626382839","NL" +"3626382840","3626382843","US" +"3626382844","3626382845","IN" +"3626382846","3626382862","US" +"3626382863","3626382866","RU" +"3626382867","3626382870","IT" +"3626382871","3626382878","US" +"3626382879","3626382882","GB" +"3626382883","3626382892","US" +"3626382893","3626382896","BR" +"3626382897","3626382901","US" +"3626382902","3626382905","SG" +"3626382906","3626382909","CA" +"3626382910","3626382913","IN" +"3626382914","3626382917","SG" +"3626382918","3626382925","US" +"3626382926","3626382930","HN" +"3626382931","3626382937","US" +"3626382938","3626382941","PL" +"3626382942","3626382965","US" +"3626382966","3626382969","GR" +"3626382970","3626382973","US" +"3626382974","3626382977","AU" +"3626382978","3626382981","IT" +"3626382982","3626382993","GB" +"3626382994","3626383026","US" +"3626383027","3626383030","SG" +"3626383031","3626383034","CN" +"3626383035","3626383038","AU" +"3626383039","3626383042","US" +"3626383043","3626383046","DE" +"3626383047","3626383050","US" +"3626383051","3626383054","CN" +"3626383055","3626383074","US" +"3626383075","3626383078","AU" +"3626383079","3626383082","US" +"3626383083","3626383086","IN" +"3626383087","3626383090","GR" +"3626383091","3626383094","CN" +"3626383095","3626383127","US" +"3626383128","3626383131","IN" +"3626383132","3626383135","US" +"3626383136","3626383139","CO" +"3626383140","3626383147","US" +"3626383148","3626383151","BR" +"3626383152","3626383204","US" +"3626383205","3626383208","AE" +"3626383209","3626383220","US" +"3626383221","3626383225","TR" +"3626383226","3626383229","IN" +"3626383230","3626383233","US" +"3626383234","3626383237","IN" +"3626383238","3626383245","US" +"3626383246","3626383249","MX" +"3626383250","3626383257","US" +"3626383258","3626383261","CO" +"3626383262","3626383270","US" +"3626383271","3626383278","GB" +"3626383279","3626383282","US" +"3626383283","3626383286","DE" +"3626383287","3626383290","GR" +"3626383291","3626383294","CA" +"3626383295","3626383298","MX" +"3626383299","3626383375","US" +"3626383376","3626383383","RU" +"3626383384","3626383391","CA" +"3626383392","3626383399","US" +"3626383400","3626383407","IN" +"3626383408","3626383423","US" +"3626383424","3626383431","GB" +"3626383432","3626383439","AU" +"3626383440","3626383447","GR" +"3626383448","3626383455","IN" +"3626383456","3626383503","US" +"3626383504","3626383519","GB" +"3626383520","3626383527","US" +"3626383528","3626383535","GB" +"3626383536","3626383543","US" +"3626383544","3626383551","GB" +"3626383552","3626383583","US" +"3626383584","3626383599","CA" +"3626383600","3626383615","IN" +"3626383616","3626383647","US" +"3626383648","3626383679","CH" +"3626383680","3626383727","US" +"3626383728","3626383759","CA" +"3626383760","3626383775","GB" +"3626383776","3626383871","US" +"3626383872","3626383903","NL" +"3626383904","3626384095","US" +"3626384096","3626384127","NL" +"3626384128","3626384481","US" +"3626384482","3626384485","IN" +"3626384486","3626384901","US" +"3626384902","3626384905","MX" +"3626384906","3626384921","US" +"3626384922","3626384925","IN" +"3626384926","3626384941","US" +"3626384942","3626384945","CA" +"3626384946","3626384949","US" +"3626384950","3626384953","IN" +"3626384954","3626384957","US" +"3626384958","3626384961","GB" +"3626384962","3626384977","US" +"3626384978","3626384981","SG" +"3626384982","3626384985","US" +"3626384986","3626384989","CA" +"3626384990","3626384993","NZ" +"3626384994","3626384997","US" +"3626384998","3626385001","IT" +"3626385002","3626385005","ID" +"3626385006","3626385025","US" +"3626385026","3626385029","CN" +"3626385030","3626385033","ID" +"3626385034","3626385037","IN" +"3626385038","3626385041","US" +"3626385042","3626385045","MX" +"3626385046","3626385049","CA" +"3626385050","3626385057","US" +"3626385058","3626385061","IN" +"3626385062","3626385073","US" +"3626385074","3626385077","IE" +"3626385078","3626385097","US" +"3626385098","3626385101","IN" +"3626385102","3626385113","US" +"3626385114","3626385117","JP" +"3626385118","3626385121","US" +"3626385122","3626385125","IN" +"3626385126","3626385129","ID" +"3626385130","3626385133","IN" +"3626385134","3626385137","CA" +"3626385138","3626385141","GB" +"3626385142","3626385145","IN" +"3626385146","3626385149","RO" +"3626385150","3626385187","US" +"3626385188","3626385191","CA" +"3626385192","3626385207","US" +"3626385208","3626385209","NZ" +"3626385210","3626385217","US" +"3626385218","3626385221","CA" +"3626385222","3626385225","US" +"3626385226","3626385229","CA" +"3626385230","3626385237","US" +"3626385238","3626385241","BE" +"3626385242","3626385245","US" +"3626385246","3626385249","ID" +"3626385250","3626385253","CN" +"3626385254","3626385261","US" +"3626385262","3626385265","GR" +"3626385266","3626385285","US" +"3626385286","3626385289","IN" +"3626385290","3626385321","US" +"3626385322","3626385325","FR" +"3626385326","3626385329","CA" +"3626385330","3626385333","US" +"3626385334","3626385337","CA" +"3626385338","3626385349","US" +"3626385350","3626385353","IN" +"3626385354","3626385357","MX" +"3626385358","3626385361","CA" +"3626385362","3626385365","US" +"3626385366","3626385369","IL" +"3626385370","3626385373","US" +"3626385374","3626385377","SI" +"3626385378","3626385381","US" +"3626385382","3626385389","IN" +"3626385390","3626385393","GB" +"3626385394","3626508287","US" +"3626508288","3626512383","CA" +"3626512384","3626513427","US" +"3626513428","3626513428","EU" +"3626513429","3626524671","US" +"3626524672","3626524927","CA" +"3626524928","3626524943","US" +"3626524944","3626524967","CA" +"3626524968","3626524975","US" +"3626524976","3626525783","CA" +"3626525784","3626525799","US" +"3626525800","3626525807","IN" +"3626525808","3626526031","CA" +"3626526032","3626526039","US" +"3626526040","3626526239","CA" +"3626526240","3626526247","US" +"3626526248","3626526255","CA" +"3626526256","3626526263","US" +"3626526264","3626526279","CA" +"3626526280","3626526287","US" +"3626526288","3626526295","CA" +"3626526296","3626526303","US" +"3626526304","3626526431","CA" +"3626526432","3626526463","CR" +"3626526464","3626526567","CA" +"3626526568","3626526575","US" +"3626526576","3626526623","CA" +"3626526624","3626526631","US" +"3626526632","3626526711","CA" +"3626526712","3626526719","US" +"3626526720","3626526983","CA" +"3626526984","3626527023","US" +"3626527024","3626527135","CA" +"3626527136","3626527159","US" +"3626527160","3626527167","CA" +"3626527168","3626527183","US" +"3626527184","3626527423","CA" +"3626527424","3626527463","US" +"3626527464","3626527471","CA" +"3626527472","3626527479","US" +"3626527480","3626527487","CA" +"3626527488","3626527495","US" +"3626527496","3626527551","CA" +"3626527552","3626527559","US" +"3626527560","3626527903","CA" +"3626527904","3626527911","US" +"3626527912","3626528239","CA" +"3626528240","3626528247","US" +"3626528248","3626528327","CA" +"3626528328","3626528335","US" +"3626528336","3626528535","CA" +"3626528536","3626528543","US" +"3626528544","3626528631","CA" +"3626528632","3626528639","US" +"3626528640","3626528679","CA" +"3626528680","3626528703","US" +"3626528704","3626529183","CA" +"3626529184","3626529191","US" +"3626529192","3626529639","CA" +"3626529640","3626529647","US" +"3626529648","3626529735","CA" +"3626529736","3626529751","US" +"3626529752","3626529807","CA" +"3626529808","3626529863","US" +"3626529864","3626529919","CA" +"3626529920","3626529927","US" +"3626529928","3626529951","CA" +"3626529952","3626529959","US" +"3626529960","3626530039","CA" +"3626530040","3626530055","US" +"3626530056","3626530151","CA" +"3626530152","3626530159","US" +"3626530160","3626530207","CA" +"3626530208","3626530215","US" +"3626530216","3626530287","CA" +"3626530288","3626530295","US" +"3626530296","3626530327","CA" +"3626530328","3626530343","US" +"3626530344","3626530391","CA" +"3626530392","3626530407","US" +"3626530408","3626530439","CA" +"3626530440","3626530455","US" +"3626530456","3626530471","CA" +"3626530472","3626530479","US" +"3626530480","3626530487","CA" +"3626530488","3626530495","US" +"3626530496","3626530543","CA" +"3626530544","3626530559","US" +"3626530560","3626530815","CA" +"3626530816","3626530831","US" +"3626530832","3626530911","CA" +"3626530912","3626530919","US" +"3626530920","3626530943","CA" +"3626530944","3626530951","US" +"3626530952","3626530991","CA" +"3626530992","3626531007","US" +"3626531008","3626531015","CA" +"3626531016","3626531023","US" +"3626531024","3626531031","CA" +"3626531032","3626531047","US" +"3626531048","3626531143","CA" +"3626531144","3626531151","US" +"3626531152","3626531199","CA" +"3626531200","3626531207","US" +"3626531208","3626531279","CA" +"3626531280","3626531287","US" +"3626531288","3626531463","CA" +"3626531464","3626531471","US" +"3626531472","3626531519","CA" +"3626531520","3626531535","US" +"3626531536","3626531551","CA" +"3626531552","3626531559","US" +"3626531560","3626531575","CA" +"3626531576","3626531583","US" +"3626531584","3626531607","CA" +"3626531608","3626531615","US" +"3626531616","3626531639","CA" +"3626531640","3626531647","US" +"3626531648","3626531703","CA" +"3626531704","3626531711","US" +"3626531712","3626531799","CA" +"3626531800","3626531807","US" +"3626531808","3626531839","CA" +"3626531840","3626531847","US" +"3626531848","3626531855","CA" +"3626531856","3626531863","US" +"3626531864","3626531871","CA" +"3626531872","3626531879","US" +"3626531880","3626531887","CA" +"3626531888","3626531895","US" +"3626531896","3626532287","CA" +"3626532288","3626532311","US" +"3626532312","3626532319","CA" +"3626532320","3626532327","US" +"3626532328","3626532391","CA" +"3626532392","3626532519","US" +"3626532520","3626532535","CA" +"3626532536","3626532543","US" +"3626532544","3626532551","CA" +"3626532552","3626532591","US" +"3626532592","3626532607","CA" +"3626532608","3626532615","US" +"3626532616","3626532623","CA" +"3626532624","3626532703","US" +"3626532704","3626532727","CA" +"3626532728","3626532735","US" +"3626532736","3626532759","CA" +"3626532760","3626532767","US" +"3626532768","3626532855","CA" +"3626532856","3626852351","US" +"3626852352","3626860543","CA" +"3626860544","3626893311","US" +"3626893312","3626896175","CA" +"3626896176","3626896183","US" +"3626896184","3626905599","CA" +"3626905600","3626926079","US" +"3626926080","3626934271","CA" +"3626934272","3627044863","US" +"3627044864","3627048959","CA" +"3627048960","3627065343","US" +"3627065344","3627069439","CA" +"3627069440","3627288575","US" +"3627288576","3627288607","GB" +"3627288608","3627299071","US" +"3627299072","3627299327","IN" +"3627299328","3627309455","US" +"3627309456","3627309471","IL" +"3627309472","3627309695","US" +"3627309696","3627309823","AE" +"3627309824","3627310471","US" +"3627310472","3627310479","BM" +"3627310480","3627317087","US" +"3627317088","3627317119","GB" +"3627317120","3627317191","US" +"3627317192","3627317199","CA" +"3627317200","3627328055","US" +"3627328056","3627328063","SR" +"3627328064","3627330527","US" +"3627330528","3627330559","SE" +"3627330560","3627350127","US" +"3627350128","3627350135","IL" +"3627350136","3627399935","US" +"3627399936","3627399967","GE" +"3627399968","3627399999","US" +"3627400000","3627400063","DE" +"3627400064","3627400151","US" +"3627400152","3627400191","DE" +"3627400192","3627400319","US" +"3627400320","3627400351","BR" +"3627400352","3627400639","US" +"3627400640","3627400671","CA" +"3627400672","3627400959","US" +"3627400960","3627401103","DE" +"3627401104","3627401151","US" +"3627401152","3627401215","BR" +"3627401216","3627507711","US" +"3627507712","3627511807","CA" +"3627511808","3627519616","US" +"3627519617","3627519626","CA" +"3627519627","3627524979","US" +"3627524980","3627524987","IR" +"3627524988","3627532287","US" +"3627532288","3627544575","CA" +"3627544576","3627659263","US" +"3627659264","3627661951","CA" +"3627661952","3627662015","US" +"3627662016","3627663359","CA" +"3627663360","3627665407","US" +"3627665408","3627665439","CA" +"3627665440","3627666239","US" +"3627666240","3627666271","CA" +"3627666272","3627666719","US" +"3627666720","3627666751","CA" +"3627666752","3627667519","US" +"3627667520","3627667583","CA" +"3627667584","3627669831","US" +"3627669832","3627669839","CA" +"3627669840","3627679743","US" +"3627679744","3627712511","CA" +"3627712512","3627745343","US" +"3627745344","3627745375","BE" +"3627745376","3627745439","US" +"3627745440","3627745471","IN" +"3627745472","3627745503","CA" +"3627745504","3627746399","US" +"3627746400","3627746431","CA" +"3627746432","3627747159","US" +"3627747160","3627747167","IN" +"3627747168","3627752191","US" +"3627752192","3627752319","A1" +"3627752320","3627753471","US" +"3627753472","3627753727","AR" +"3627753728","3627755007","US" +"3627755008","3627755135","IE" +"3627755136","3627755263","US" +"3627755264","3627755391","IE" +"3627755392","3627758847","US" +"3627758848","3627758863","GB" +"3627758864","3627759071","US" +"3627759072","3627759103","GB" +"3627759104","3627759359","US" +"3627759360","3627759615","NL" +"3627759616","3627759871","US" +"3627759872","3627760127","NL" +"3627760128","3627802623","US" +"3627802624","3627810815","CA" +"3627810816","3627842047","US" +"3627842048","3627842303","IS" +"3627842304","3628123615","US" +"3628123616","3628123647","CA" +"3628123648","3628123711","BM" +"3628123712","3628123903","US" +"3628123904","3628123935","GB" +"3628123936","3628128703","US" +"3628128704","3628128719","CA" +"3628128720","3628129087","US" +"3628129088","3628129103","CA" +"3628129104","3628139311","US" +"3628139312","3628139327","SG" +"3628139328","3628139343","GB" +"3628139344","3628139487","US" +"3628139488","3628139503","NZ" +"3628139504","3628139519","US" +"3628139520","3628139535","RU" +"3628139536","3628139695","US" +"3628139696","3628139711","VI" +"3628139712","3628139967","US" +"3628139968","3628139999","AU" +"3628140000","3628140351","US" +"3628140352","3628140415","RU" +"3628140416","3628145919","US" +"3628145920","3628146175","AU" +"3628146176","3628146527","US" +"3628146528","3628146559","GB" +"3628146560","3628148447","US" +"3628148448","3628148479","SK" +"3628148480","3628148815","US" +"3628148816","3628148831","NL" +"3628148832","3628148847","IT" +"3628148848","3628148871","US" +"3628148872","3628148879","CA" +"3628148880","3628151423","US" +"3628151424","3628151551","DE" +"3628151552","3628151871","US" +"3628151872","3628151935","DO" +"3628151936","3628152063","ID" +"3628152064","3628153087","US" +"3628153088","3628153343","KW" +"3628153344","3628154239","US" +"3628154240","3628154303","PH" +"3628154304","3628154463","US" +"3628154464","3628154495","GB" +"3628154496","3628155023","US" +"3628155024","3628155039","ID" +"3628155040","3628155103","US" +"3628155104","3628155119","NZ" +"3628155120","3628155647","US" +"3628155648","3628155903","CA" +"3628155904","3628161023","US" +"3628161024","3628161279","CA" +"3628161280","3628164927","US" +"3628164928","3628164943","IE" +"3628164944","3628164959","ES" +"3628164960","3628165119","US" +"3628165120","3628165183","CA" +"3628165184","3628165311","US" +"3628165312","3628165375","DO" +"3628165376","3628165647","US" +"3628165648","3628165663","VI" +"3628165664","3628165759","US" +"3628165760","3628165775","A1" +"3628165776","3628169471","US" +"3628169472","3628169599","IT" +"3628169600","3628179455","US" +"3628179456","3628187647","CA" +"3628187648","3628215191","US" +"3628215192","3628215199","ES" +"3628215200","3628223983","US" +"3628223984","3628223999","CA" +"3628224000","3628224735","US" +"3628224736","3628224743","IT" +"3628224744","3628236799","US" +"3628236800","3628257279","CA" +"3628257280","3628328559","US" +"3628328560","3628328567","MY" +"3628328568","3628598271","US" +"3628598272","3628599295","CO" +"3628599296","3628603391","CL" +"3628603392","3628604415","US" +"3628604416","3628605439","GT" +"3628605440","3628608511","IL" +"3628608512","3628609023","VE" +"3628609024","3628609151","US" +"3628609152","3628609215","VE" +"3628609216","3628613375","US" +"3628613376","3628613631","HN" +"3628613632","3628614399","ID" +"3628614400","3628614911","CO" +"3628614912","3628615167","US" +"3628615168","3628615679","IL" +"3628615680","3628616191","US" +"3628616192","3628617215","PR" +"3628617216","3628617471","HN" +"3628617472","3628617727","US" +"3628617728","3628618239","CO" +"3628618240","3628619775","HN" +"3628619776","3628622847","US" +"3628622848","3628623871","PR" +"3628623872","3628625919","NG" +"3628625920","3628626175","PA" +"3628626176","3628626943","HN" +"3628626944","3628627199","CO" +"3628627200","3628627455","IL" +"3628627456","3628627711","HN" +"3628627712","3628628991","SV" +"3628628992","3628629247","GT" +"3628629248","3628629503","US" +"3628629504","3628631807","VE" +"3628631808","3628633855","US" +"3628633856","3628634111","CO" +"3628634112","3628636159","AR" +"3628636160","3628636671","VE" +"3628636672","3628636927","US" +"3628636928","3628637183","VE" +"3628637184","3628637695","CO" +"3628637696","3628638207","US" +"3628638208","3628646399","CL" +"3628646400","3628646911","US" +"3628646912","3628647423","HN" +"3628647424","3628647679","SZ" +"3628647680","3628648959","CO" +"3628648960","3628649215","US" +"3628649216","3628649727","CO" +"3628649728","3628654079","US" +"3628654080","3628654591","PA" +"3628654592","3628654847","US" +"3628654848","3628655103","CR" +"3628655104","3628655359","VE" +"3628655360","3628656383","CO" +"3628656384","3628656639","EC" +"3628656640","3628657407","CO" +"3628657408","3628657663","US" +"3628657664","3628657919","VE" +"3628657920","3628658175","BS" +"3628658176","3628679167","US" +"3628679168","3628683263","CA" +"3628683264","3628762335","US" +"3628762336","3628762367","IL" +"3628762368","3628762519","US" +"3628762520","3628762527","CY" +"3628762528","3628766143","US" +"3628766144","3628766151","GB" +"3628766152","3628767039","US" +"3628767040","3628767055","IE" +"3628767056","3628767135","US" +"3628767136","3628767167","GB" +"3628767168","3628767695","US" +"3628767696","3628767703","NO" +"3628767704","3628768223","US" +"3628768224","3628768239","NO" +"3628768240","3628769087","US" +"3628769088","3628769119","AU" +"3628769120","3628770207","US" +"3628770208","3628770215","NO" +"3628770216","3628770367","US" +"3628770368","3628770383","CY" +"3628770384","3628771455","US" +"3628771456","3628771647","GB" +"3628771648","3628771839","US" +"3628771840","3628772095","NO" +"3628772096","3628772431","US" +"3628772432","3628772447","GB" +"3628772448","3628834815","US" +"3628834816","3628843007","CA" +"3628843008","3628848639","US" +"3628848640","3628848895","EU" +"3628848896","3628963007","US" +"3628963008","3628963039","PA" +"3628963040","3629187071","US" +"3629187072","3629195263","CA" +"3629195264","3629199359","US" +"3629199360","3629201463","CA" +"3629201464","3629201467","US" +"3629201468","3629201487","CA" +"3629201488","3629201515","US" +"3629201516","3629201539","CA" +"3629201540","3629201543","US" +"3629201544","3629201551","CA" +"3629201552","3629201559","US" +"3629201560","3629201563","CA" +"3629201564","3629201599","US" +"3629201600","3629201615","CA" +"3629201616","3629201623","US" +"3629201624","3629201627","CA" +"3629201628","3629201743","US" +"3629201744","3629201747","CA" +"3629201748","3629201751","US" +"3629201752","3629201755","CA" +"3629201756","3629201775","US" +"3629201776","3629201791","CA" +"3629201792","3629201887","US" +"3629201888","3629201903","CA" +"3629201904","3629202431","US" +"3629202432","3629203199","CA" +"3629203200","3629318143","US" +"3629318144","3629326335","CA" +"3629326336","3629534657","US" +"3629534658","3629534658","A1" +"3629534659","3629539327","US" +"3629539328","3629547519","CA" +"3629547520","3629662207","US" +"3629662208","3629662463","GB" +"3629662464","3629735943","US" +"3629735944","3629735951","CA" +"3629735952","3629736119","US" +"3629736120","3629736127","CA" +"3629736128","3629737215","US" +"3629737216","3629737471","CA" +"3629737472","3629761551","US" +"3629761552","3629761567","CA" +"3629761568","3629761647","US" +"3629761648","3629761663","CA" +"3629761664","3629767935","US" +"3629767936","3629768191","CA" +"3629768192","3629785375","US" +"3629785376","3629785407","CA" +"3629785408","3629789439","US" +"3629789440","3629789695","CA" +"3629789696","3629789951","US" +"3629789952","3629790207","CA" +"3629790208","3629808095","US" +"3629808096","3629808127","CA" +"3629808128","3629838551","US" +"3629838552","3629838559","CA" +"3629838560","3629838583","US" +"3629838584","3629838591","CA" +"3629838592","3629839103","US" +"3629839104","3629839359","CA" +"3629839360","3629841951","US" +"3629841952","3629841983","CA" +"3629841984","3629859551","US" +"3629859552","3629859583","CA" +"3629859584","3629875775","US" +"3629875776","3629875807","CA" +"3629875808","3629876255","US" +"3629876256","3629876263","CA" +"3629876264","3629876279","US" +"3629876280","3629876287","CA" +"3629876288","3630022639","US" +"3630022640","3630022643","A1" +"3630022644","3630035231","US" +"3630035232","3630035247","GB" +"3630035248","3630035695","US" +"3630035696","3630035711","GB" +"3630035712","3630036095","US" +"3630036096","3630036111","GB" +"3630036112","3630037279","US" +"3630037280","3630037295","GB" +"3630037296","3630037791","US" +"3630037792","3630037823","GB" +"3630037824","3630038335","US" +"3630038336","3630038351","GB" +"3630038352","3630038367","US" +"3630038368","3630038399","GB" +"3630038400","3630039039","US" +"3630039040","3630039359","CA" +"3630039360","3630039391","US" +"3630039392","3630039455","CA" +"3630039456","3630039487","US" +"3630039488","3630039551","CA" +"3630039552","3630039583","US" +"3630039584","3630039599","CA" +"3630039600","3630039615","US" +"3630039616","3630039807","CA" +"3630039808","3630039815","US" +"3630039816","3630039823","CA" +"3630039824","3630039831","US" +"3630039832","3630039839","CA" +"3630039840","3630040063","US" +"3630040064","3630040335","CA" +"3630040336","3630040351","US" +"3630040352","3630040383","CA" +"3630040384","3630040399","US" +"3630040400","3630040447","CA" +"3630040448","3630040463","US" +"3630040464","3630040479","CA" +"3630040480","3630040495","US" +"3630040496","3630040527","CA" +"3630040528","3630040543","US" +"3630040544","3630040831","CA" +"3630040832","3630040895","US" +"3630040896","3630041023","CA" +"3630041024","3630041087","US" +"3630041088","3630041215","CA" +"3630041216","3630041279","US" +"3630041280","3630041895","CA" +"3630041896","3630041911","US" +"3630041912","3630041927","CA" +"3630041928","3630041935","US" +"3630041936","3630042015","CA" +"3630042016","3630042023","US" +"3630042024","3630042399","CA" +"3630042400","3630042407","US" +"3630042408","3630042431","CA" +"3630042432","3630042439","US" +"3630042440","3630042655","CA" +"3630042656","3630042687","US" +"3630042688","3630042751","CA" +"3630042752","3630042783","US" +"3630042784","3630042847","CA" +"3630042848","3630042975","US" +"3630042976","3630043007","CA" +"3630043008","3630043039","US" +"3630043040","3630043103","CA" +"3630043104","3630043135","US" +"3630043136","3630043391","CA" +"3630043392","3630043903","US" +"3630043904","3630043919","CA" +"3630043920","3630043935","US" +"3630043936","3630043967","CA" +"3630043968","3630043983","US" +"3630043984","3630043999","CA" +"3630044000","3630044015","US" +"3630044016","3630044063","CA" +"3630044064","3630044079","US" +"3630044080","3630044111","CA" +"3630044112","3630044127","US" +"3630044128","3630044287","CA" +"3630044288","3630044351","US" +"3630044352","3630044415","CA" +"3630044416","3630044671","US" +"3630044672","3630046367","CA" +"3630046368","3630046399","US" +"3630046400","3630047791","CA" +"3630047792","3630047807","US" +"3630047808","3630049791","CA" +"3630049792","3630050047","US" +"3630050048","3630050391","CA" +"3630050392","3630050399","US" +"3630050400","3630050487","CA" +"3630050488","3630050495","US" +"3630050496","3630050543","CA" +"3630050544","3630050559","US" +"3630050560","3630051135","CA" +"3630051136","3630051327","US" +"3630051328","3630051583","CA" +"3630051584","3630051599","US" +"3630051600","3630052863","CA" +"3630052864","3630052927","US" +"3630052928","3630053183","CA" +"3630053184","3630053247","US" +"3630053248","3630053631","CA" +"3630053632","3630053695","IL" +"3630053696","3630053759","CA" +"3630053760","3630053887","US" +"3630053888","3630054239","CA" +"3630054240","3630054335","US" +"3630054336","3630054495","CA" +"3630054496","3630054511","US" +"3630054512","3630055519","CA" +"3630055520","3630055551","US" +"3630055552","3630055679","CA" +"3630055680","3630055935","US" +"3630055936","3630056959","CA" +"3630056960","3630056975","US" +"3630056976","3630057039","CA" +"3630057040","3630057055","US" +"3630057056","3630057087","CA" +"3630057088","3630057103","US" +"3630057104","3630057151","CA" +"3630057152","3630057167","US" +"3630057168","3630057183","CA" +"3630057184","3630057199","US" +"3630057200","3630057471","CA" +"3630057472","3630057727","US" +"3630057728","3630057983","CA" +"3630057984","3630058047","US" +"3630058048","3630058335","CA" +"3630058336","3630058367","US" +"3630058368","3630058495","CA" +"3630058496","3630058751","US" +"3630058752","3630059007","CA" +"3630059008","3630059263","US" +"3630059264","3630059775","CA" +"3630059776","3630060031","US" +"3630060032","3630060351","CA" +"3630060352","3630060383","US" +"3630060384","3630060543","CA" +"3630060544","3630060671","US" +"3630060672","3630060799","CA" +"3630060800","3630060815","US" +"3630060816","3630060823","CA" +"3630060824","3630060831","US" +"3630060832","3630060847","CA" +"3630060848","3630060855","US" +"3630060856","3630060895","CA" +"3630060896","3630060903","US" +"3630060904","3630060935","CA" +"3630060936","3630060943","US" +"3630060944","3630060959","CA" +"3630060960","3630060975","US" +"3630060976","3630060983","CA" +"3630060984","3630060991","US" +"3630060992","3630060999","CA" +"3630061000","3630061015","US" +"3630061016","3630061031","CA" +"3630061032","3630061039","US" +"3630061040","3630061047","CA" +"3630061048","3630061311","US" +"3630061312","3630061359","CA" +"3630061360","3630061375","US" +"3630061376","3630062591","CA" +"3630062592","3630062847","US" +"3630062848","3630063903","CA" +"3630063904","3630063919","US" +"3630063920","3630063951","CA" +"3630063952","3630063983","US" +"3630063984","3630063999","CA" +"3630064000","3630064015","US" +"3630064016","3630064383","CA" +"3630064384","3630064511","US" +"3630064512","3630065199","CA" +"3630065200","3630065215","US" +"3630065216","3630065327","CA" +"3630065328","3630065343","US" +"3630065344","3630065359","CA" +"3630065360","3630065391","US" +"3630065392","3630065727","CA" +"3630065728","3630065791","US" +"3630065792","3630065919","CA" +"3630065920","3630066175","CN" +"3630066176","3630067983","CA" +"3630067984","3630067999","US" +"3630068000","3630068015","CA" +"3630068016","3630068031","US" +"3630068032","3630068223","CA" +"3630068224","3630068479","US" +"3630068480","3630068863","CA" +"3630068864","3630068991","CN" +"3630068992","3630069247","CA" +"3630069248","3630069503","US" +"3630069504","3630071247","CA" +"3630071248","3630071263","US" +"3630071264","3630071551","CA" +"3630071552","3630071807","US" +"3630071808","3630071871","CA" +"3630071872","3630072063","US" +"3630072064","3630072223","CA" +"3630072224","3630072255","US" +"3630072256","3630074159","CA" +"3630074160","3630074191","US" +"3630074192","3630074255","CA" +"3630074256","3630074287","US" +"3630074288","3630074319","CA" +"3630074320","3630074367","US" +"3630074368","3630074375","CA" +"3630074376","3630074383","US" +"3630074384","3630074415","CA" +"3630074416","3630074431","US" +"3630074432","3630074471","CA" +"3630074472","3630074495","US" +"3630074496","3630074527","CA" +"3630074528","3630074543","US" +"3630074544","3630075183","CA" +"3630075184","3630075199","US" +"3630075200","3630075375","CA" +"3630075376","3630075391","US" +"3630075392","3630075647","CA" +"3630075648","3630076223","US" +"3630076224","3630076287","CA" +"3630076288","3630076351","US" +"3630076352","3630076415","CA" +"3630076416","3630076703","US" +"3630076704","3630076831","CA" +"3630076832","3630076863","US" +"3630076864","3630077823","CA" +"3630077824","3630077887","US" +"3630077888","3630078847","CA" +"3630078848","3630078879","US" +"3630078880","3630079263","CA" +"3630079264","3630079279","US" +"3630079280","3630079439","CA" +"3630079440","3630079455","AG" +"3630079456","3630079487","CA" +"3630079488","3630080511","US" +"3630080512","3630080895","CA" +"3630080896","3630081023","US" +"3630081024","3630081791","CA" +"3630081792","3630082047","US" +"3630082048","3630082751","CA" +"3630082752","3630082815","US" +"3630082816","3630083071","CA" +"3630083072","3630083103","CH" +"3630083104","3630083327","CA" +"3630083328","3630083391","US" +"3630083392","3630083519","CA" +"3630083520","3630083583","US" +"3630083584","3630083727","CA" +"3630083728","3630083743","US" +"3630083744","3630083807","CA" +"3630083808","3630083823","US" +"3630083824","3630083839","CA" +"3630083840","3630084159","US" +"3630084160","3630084351","CA" +"3630084352","3630084607","US" +"3630084608","3630084863","CA" +"3630084864","3630085119","US" +"3630085120","3630085375","CA" +"3630085376","3630085631","US" +"3630085632","3630086143","CA" +"3630086144","3630086287","US" +"3630086288","3630086295","CA" +"3630086296","3630086319","US" +"3630086320","3630086399","CA" +"3630086400","3630086655","US" +"3630086656","3630086847","CA" +"3630086848","3630086911","US" +"3630086912","3630087935","CA" +"3630087936","3630088447","US" +"3630088448","3630088959","CA" +"3630088960","3630089471","US" +"3630089472","3630090255","CA" +"3630090256","3630090287","US" +"3630090288","3630090319","CA" +"3630090320","3630090335","US" +"3630090336","3630090751","CA" +"3630090752","3630091007","US" +"3630091008","3630092335","CA" +"3630092336","3630092351","US" +"3630092352","3630092527","CA" +"3630092528","3630092543","US" +"3630092544","3630092575","CA" +"3630092576","3630092799","US" +"3630092800","3630092975","CA" +"3630092976","3630092991","US" +"3630092992","3630093310","CA" +"3630093311","3630093319","US" +"3630093320","3630093367","CA" +"3630093368","3630093375","US" +"3630093376","3630093495","CA" +"3630093496","3630093503","US" +"3630093504","3630093823","CA" +"3630093824","3630094079","US" +"3630094080","3630094495","CA" +"3630094496","3630094559","US" +"3630094560","3630094847","CA" +"3630094848","3630094855","US" +"3630094856","3630094863","CA" +"3630094864","3630094871","US" +"3630094872","3630094903","CA" +"3630094904","3630094927","US" +"3630094928","3630094935","CA" +"3630094936","3630094943","US" +"3630094944","3630094999","CA" +"3630095000","3630095015","US" +"3630095016","3630095031","CA" +"3630095032","3630095039","US" +"3630095040","3630095047","CA" +"3630095048","3630095055","US" +"3630095056","3630095103","CA" +"3630095104","3630095359","US" +"3630095360","3630095615","CA" +"3630095616","3630095743","US" +"3630095744","3630096927","CA" +"3630096928","3630097151","US" +"3630097152","3630097663","CA" +"3630097664","3630098175","KW" +"3630098176","3630098495","CA" +"3630098496","3630098527","US" +"3630098528","3630100223","CA" +"3630100224","3630100479","KW" +"3630100480","3630100863","CA" +"3630100864","3630101247","US" +"3630101248","3630101823","CA" +"3630101824","3630101855","US" +"3630101856","3630101887","CA" +"3630101888","3630101919","US" +"3630101920","3630102015","CA" +"3630102016","3630102335","US" +"3630102336","3630103999","CA" +"3630104000","3630104063","US" +"3630104064","3630104575","CA" +"3630104576","3630106015","US" +"3630106016","3630106031","CA" +"3630106032","3630106063","US" +"3630106064","3630106079","CA" +"3630106080","3630141439","US" +"3630141440","3630141759","CA" +"3630141760","3630141791","US" +"3630141792","3630141887","CA" +"3630141888","3630141951","US" +"3630141952","3630144031","CA" +"3630144032","3630144063","US" +"3630144064","3630144223","CA" +"3630144224","3630144255","US" +"3630144256","3630145023","CA" +"3630145024","3630145039","GB" +"3630145040","3630145247","CA" +"3630145248","3630145535","US" +"3630145536","3630146815","CA" +"3630146816","3630147071","US" +"3630147072","3630147647","CA" +"3630147648","3630147839","US" +"3630147840","3630147903","CA" +"3630147904","3630147935","US" +"3630147936","3630147999","CA" +"3630148000","3630148031","US" +"3630148032","3630148623","CA" +"3630148624","3630148639","US" +"3630148640","3630148655","CA" +"3630148656","3630148671","US" +"3630148672","3630148751","CA" +"3630148752","3630148799","US" +"3630148800","3630148815","CA" +"3630148816","3630148863","US" +"3630148864","3630149151","CA" +"3630149152","3630149183","US" +"3630149184","3630149215","CA" +"3630149216","3630149375","US" +"3630149376","3630149439","CA" +"3630149440","3630149471","US" +"3630149472","3630149503","CA" +"3630149504","3630149535","US" +"3630149536","3630153119","CA" +"3630153120","3630153151","US" +"3630153152","3630153407","CA" +"3630153408","3630153727","US" +"3630153728","3630154751","CA" +"3630154752","3630155007","US" +"3630155008","3630155263","CA" +"3630155264","3630155519","US" +"3630155520","3630155583","CA" +"3630155584","3630155599","US" +"3630155600","3630155615","CA" +"3630155616","3630155631","US" +"3630155632","3630158135","CA" +"3630158136","3630158151","US" +"3630158152","3630158159","CA" +"3630158160","3630158167","US" +"3630158168","3630158175","CA" +"3630158176","3630158183","US" +"3630158184","3630158271","CA" +"3630158272","3630158279","US" +"3630158280","3630158591","CA" +"3630158592","3630158847","US" +"3630158848","3630158911","CA" +"3630158912","3630158943","US" +"3630158944","3630158975","CA" +"3630158976","3630159007","US" +"3630159008","3630159487","CA" +"3630159488","3630159551","US" +"3630159552","3630159871","CA" +"3630159872","3630160127","US" +"3630160128","3630160383","CA" +"3630160384","3630160399","US" +"3630160400","3630160471","CA" +"3630160472","3630160487","US" +"3630160488","3630160495","CA" +"3630160496","3630160503","US" +"3630160504","3630160527","CA" +"3630160528","3630160559","US" +"3630160560","3630160599","CA" +"3630160600","3630160607","US" +"3630160608","3630160895","CA" +"3630160896","3630160919","US" +"3630160920","3630160927","CA" +"3630160928","3630161111","US" +"3630161112","3630161135","CA" +"3630161136","3630161151","US" +"3630161152","3630161983","CA" +"3630161984","3630162047","US" +"3630162048","3630162303","CA" +"3630162304","3630162367","US" +"3630162368","3630163455","CA" +"3630163456","3630163711","US" +"3630163712","3630163719","CA" +"3630163720","3630163727","US" +"3630163728","3630163759","CA" +"3630163760","3630163767","US" +"3630163768","3630163879","CA" +"3630163880","3630163887","US" +"3630163888","3630163927","CA" +"3630163928","3630163959","US" +"3630163960","3630164847","CA" +"3630164848","3630164863","US" +"3630164864","3630164911","CA" +"3630164912","3630164927","US" +"3630164928","3630164975","CA" +"3630164976","3630164991","US" +"3630164992","3630166719","CA" +"3630166720","3630166751","US" +"3630166752","3630166815","CA" +"3630166816","3630166831","US" +"3630166832","3630166863","CA" +"3630166864","3630166879","US" +"3630166880","3630166975","CA" +"3630166976","3630166991","US" +"3630166992","3630167295","CA" +"3630167296","3630167359","US" +"3630167360","3630167487","CA" +"3630167488","3630167551","US" +"3630167552","3630167911","CA" +"3630167912","3630167919","FR" +"3630167920","3630167927","CA" +"3630167928","3630167943","US" +"3630167944","3630168127","CA" +"3630168128","3630168191","US" +"3630168192","3630169087","CA" +"3630169088","3630169343","US" +"3630169344","3630169407","CA" +"3630169408","3630169471","US" +"3630169472","3630170111","CA" +"3630170112","3630301695","US" +"3630301696","3630301711","RU" +"3630301712","3630309375","US" +"3630309376","3630317567","CA" +"3630317568","3630330287","US" +"3630330288","3630330303","JP" +"3630330304","3630375423","US" +"3630375424","3630383103","CA" +"3630383104","3630391295","US" +"3630391296","3630395391","CA" +"3630395392","3630718975","US" +"3630718976","3630727167","CA" +"3630727168","3630745855","US" +"3630745856","3630746111","UG" +"3630746112","3630746367","US" +"3630746368","3630746623","UG" +"3630746624","3630746879","US" +"3630746880","3630747391","TZ" +"3630747392","3630780415","US" +"3630780416","3630784511","CA" +"3630784512","3630850047","US" +"3630850048","3630854143","CA" +"3630854144","3630956543","US" +"3630956544","3631005695","CA" +"3631005696","3631014915","US" +"3631014916","3631015011","HU" +"3631015012","3631015075","US" +"3631015076","3631015111","HU" +"3631015112","3631015139","US" +"3631015140","3631015147","CN" +"3631015148","3631015295","US" +"3631015296","3631015311","CN" +"3631015312","3631015887","US" +"3631015888","3631015903","CN" +"3631015904","3631016555","US" +"3631016556","3631016571","CN" +"3631016572","3631016613","US" +"3631016614","3631016645","UA" +"3631016646","3631017175","US" +"3631017176","3631017191","CN" +"3631017192","3631017475","US" +"3631017476","3631017726","LT" +"3631017727","3631039439","US" +"3631039440","3631039455","CA" +"3631039456","3631039487","US" +"3631039488","3631039743","CA" +"3631039744","3631043663","US" +"3631043664","3631043679","CA" +"3631043680","3631043759","US" +"3631043760","3631043767","CA" +"3631043768","3631045631","US" +"3631045632","3631045759","CA" +"3631045760","3631045983","US" +"3631045984","3631045991","CA" +"3631045992","3631057577","US" +"3631057578","3631057597","GB" +"3631057598","3631058405","US" +"3631058406","3631058415","CA" +"3631058416","3631058511","US" +"3631058512","3631058521","CA" +"3631058522","3631058581","US" +"3631058582","3631058591","CA" +"3631058592","3631059229","US" +"3631059230","3631059239","NO" +"3631059240","3631096951","US" +"3631096952","3631096952","A1" +"3631096953","3631112191","US" +"3631112192","3631112447","VC" +"3631112448","3631116543","BB" +"3631116544","3631117567","GD" +"3631117568","3631117823","BB" +"3631117824","3631118079","GD" +"3631118080","3631119103","VC" +"3631119104","3631119615","BB" +"3631119616","3631120383","GD" +"3631120384","3631144959","US" +"3631144960","3631153151","CA" +"3631153152","3631284223","US" +"3631284224","3631316991","CA" +"3631316992","3631333375","US" +"3631333376","3631333679","CA" +"3631333680","3631333695","US" +"3631333696","3631341567","CA" +"3631341568","3631415295","US" +"3631415296","3631416223","A2" +"3631416224","3631416231","US" +"3631416232","3631416319","A2" +"3631416320","3631416575","US" +"3631416576","3631417599","A2" +"3631417600","3631418111","US" +"3631418112","3631419391","A2" +"3631419392","3631435007","US" +"3631435008","3631435263","GB" +"3631435264","3631644671","US" +"3631644672","3631652863","CA" +"3631652864","3631663151","US" +"3631663152","3631663159","CA" +"3631663160","3631665151","US" +"3631665152","3631667199","CA" +"3631667200","3631667455","US" +"3631667456","3631668223","CA" +"3631668224","3631668479","US" +"3631668480","3631669247","CA" +"3631669248","3631677439","A2" +"3631677440","3631712287","US" +"3631712288","3631712295","AR" +"3631712296","3631712303","US" +"3631712304","3631712311","CA" +"3631712312","3631712407","US" +"3631712408","3631712415","GB" +"3631712416","3631712423","US" +"3631712424","3631712431","PT" +"3631712432","3631712439","US" +"3631712440","3631712447","IN" +"3631712448","3631712455","US" +"3631712456","3631712463","UA" +"3631712464","3631712495","US" +"3631712496","3631712503","UY" +"3631712504","3631712511","DE" +"3631712512","3631712535","US" +"3631712536","3631712543","JP" +"3631712544","3631712551","CY" +"3631712552","3631712559","US" +"3631712560","3631712567","AR" +"3631712568","3631712695","US" +"3631712696","3631712703","NZ" +"3631712704","3631712751","US" +"3631712752","3631712767","CA" +"3631712768","3631712799","US" +"3631712800","3631712807","CN" +"3631712808","3631712823","US" +"3631712824","3631712831","IL" +"3631712832","3631712895","US" +"3631712896","3631712903","MX" +"3631712904","3631712911","CA" +"3631712912","3631712927","US" +"3631712928","3631712935","BR" +"3631712936","3631712951","GB" +"3631712952","3631713031","US" +"3631713032","3631713039","BR" +"3631713040","3631713047","IN" +"3631713048","3631713063","US" +"3631713064","3631713071","ZA" +"3631713072","3631713079","US" +"3631713080","3631713087","BR" +"3631713088","3631713095","GT" +"3631713096","3631713111","US" +"3631713112","3631713119","MX" +"3631713120","3631713135","US" +"3631713136","3631713143","UA" +"3631713144","3631841279","US" +"3631841280","3631874047","CA" +"3631874048","3631879199","US" +"3631879200","3631879231","CA" +"3631879232","3631881759","US" +"3631881760","3631881791","CA" +"3631881792","3631939583","US" +"3631939584","3632005119","CA" +"3632005120","3632152575","US" +"3632152576","3632168959","CA" +"3632168960","3632197631","US" +"3632197632","3632201727","CA" +"3632201728","3632219272","US" +"3632219273","3632219528","A1" +"3632219529","3632220166","US" +"3632220167","3632220167","A1" +"3632220168","3632222816","US" +"3632222817","3632223074","A1" +"3632223075","3632232447","US" +"3632232448","3632232703","A2" +"3632232704","3632244223","US" +"3632244224","3632244479","CA" +"3632244480","3632284879","US" +"3632284880","3632284895","CA" +"3632284896","3632286479","US" +"3632286480","3632286495","CA" +"3632286496","3632289583","US" +"3632289584","3632289599","PH" +"3632289600","3632291775","US" +"3632291776","3632291839","GB" +"3632291840","3632332799","US" +"3632332800","3632357375","CA" +"3632357376","3632381951","US" +"3632381952","3632390143","CA" +"3632390144","3632414719","US" +"3632414720","3632422911","CA" +"3632422912","3632448255","US" +"3632448256","3632448511","CA" +"3632448512","3632451583","US" +"3632451584","3632455679","CA" +"3632455680","3632482349","US" +"3632482350","3632482350","A1" +"3632482351","3632652559","US" +"3632652560","3632652575","GB" +"3632652576","3632719303","US" +"3632719304","3632719311","SG" +"3632719312","3632826495","US" +"3632826496","3632826511","CN" +"3632826512","3632833231","US" +"3632833232","3632833247","CN" +"3632833248","3632837135","US" +"3632837136","3632837151","IN" +"3632837152","3632838399","US" +"3632838400","3632838431","TW" +"3632838432","3632838583","US" +"3632838584","3632838591","CN" +"3632838592","3632847279","US" +"3632847280","3632847295","CN" +"3632847296","3632857087","US" +"3632857088","3632861183","BS" +"3632861184","3632881663","US" +"3632881664","3632889855","CA" +"3632889856","3632898047","US" +"3632898048","3632898335","CA" +"3632898336","3632898351","US" +"3632898352","3632902143","CA" +"3632902144","3632971775","US" +"3632971776","3632972031","CA" +"3632972032","3632972063","US" +"3632972064","3632973087","CA" +"3632973088","3632973119","US" +"3632973120","3632988159","CA" +"3632988160","3632994047","US" +"3632994048","3632994303","A1" +"3632994304","3633029119","US" +"3633029120","3633029631","PY" +"3633029632","3633030143","NI" +"3633030144","3633030159","US" +"3633030160","3633030167","A2" +"3633030168","3633030175","US" +"3633030176","3633030183","A2" +"3633030184","3633030191","US" +"3633030192","3633030199","A2" +"3633030200","3633030207","US" +"3633030208","3633030215","A2" +"3633030216","3633030223","NG" +"3633030224","3633030231","A2" +"3633030232","3633030287","US" +"3633030288","3633030303","A2" +"3633030304","3633030335","US" +"3633030336","3633030359","A2" +"3633030360","3633030655","US" +"3633030656","3633030911","SN" +"3633030912","3633031167","A2" +"3633031168","3633031615","US" +"3633031616","3633031623","A2" +"3633031624","3633031647","US" +"3633031648","3633031655","NG" +"3633031656","3633031679","US" +"3633031680","3633031935","A2" +"3633031936","3633032191","PG" +"3633032192","3633032223","US" +"3633032224","3633032231","NG" +"3633032232","3633032239","US" +"3633032240","3633032247","A2" +"3633032248","3633032271","US" +"3633032272","3633032279","A2" +"3633032280","3633032287","US" +"3633032288","3633032319","GQ" +"3633032320","3633032415","US" +"3633032416","3633032431","NG" +"3633032432","3633032439","US" +"3633032440","3633032447","A2" +"3633032448","3633032543","US" +"3633032544","3633032567","NG" +"3633032568","3633032591","US" +"3633032592","3633032607","A2" +"3633032608","3633033247","US" +"3633033248","3633033255","A2" +"3633033256","3633033263","US" +"3633033264","3633033271","A2" +"3633033272","3633033287","US" +"3633033288","3633033295","GH" +"3633033296","3633033303","NG" +"3633033304","3633033319","A2" +"3633033320","3633033327","NG" +"3633033328","3633033335","US" +"3633033336","3633033359","A2" +"3633033360","3633033367","NG" +"3633033368","3633033375","A2" +"3633033376","3633033391","NG" +"3633033392","3633033399","A2" +"3633033400","3633034047","US" +"3633034048","3633034079","A2" +"3633034080","3633034519","US" +"3633034520","3633034527","NG" +"3633034528","3633034623","US" +"3633034624","3633034751","NG" +"3633034752","3633035015","US" +"3633035016","3633035023","NL" +"3633035024","3633035071","US" +"3633035072","3633035087","NR" +"3633035088","3633035095","CN" +"3633035096","3633035135","US" +"3633035136","3633035151","NR" +"3633035152","3633035199","US" +"3633035200","3633035207","ID" +"3633035208","3633035287","US" +"3633035288","3633035295","A2" +"3633035296","3633035311","US" +"3633035312","3633035319","ID" +"3633035320","3633035439","US" +"3633035440","3633035447","ID" +"3633035448","3633035455","US" +"3633035456","3633035487","ID" +"3633035488","3633035527","US" +"3633035528","3633035535","NG" +"3633035536","3633035551","US" +"3633035552","3633035599","A2" +"3633035600","3633036031","US" +"3633036032","3633036287","HT" +"3633036288","3633036543","TT" +"3633036544","3633036607","US" +"3633036608","3633036671","A2" +"3633036672","3633039503","US" +"3633039504","3633039519","CA" +"3633039520","3633166079","US" +"3633166080","3633166207","MX" +"3633166208","3633336319","US" +"3633336320","3633336463","KY" +"3633336464","3633336479","US" +"3633336480","3633340415","KY" +"3633340416","3633344511","US" +"3633344512","3633348607","CA" +"3633348608","3633405951","US" +"3633405952","3633410047","CA" +"3633410048","3633479679","US" +"3633479680","3633483775","CA" +"3633483776","3633513984","US" +"3633513985","3633514238","ES" +"3633514239","3633545215","US" +"3633545216","3633545727","GA" +"3633545728","3633545983","A2" +"3633545984","3633546239","US" +"3633546240","3633546751","GA" +"3633546752","3633547007","A2" +"3633547008","3633547263","US" +"3633547264","3633547775","GA" +"3633547776","3633548287","NG" +"3633548288","3633548543","A2" +"3633548544","3633548799","GA" +"3633548800","3633548927","A2" +"3633548928","3633549055","GA" +"3633549056","3633549375","A2" +"3633549376","3633549391","US" +"3633549392","3633549567","A2" +"3633549568","3633549823","GA" +"3633549824","3633550335","US" +"3633550336","3633550431","A2" +"3633550432","3633550847","US" +"3633550848","3633551359","GA" +"3633551360","3633552127","US" +"3633552128","3633552383","A2" +"3633552384","3633552639","US" +"3633552640","3633552895","A2" +"3633552896","3633553151","US" +"3633553152","3633553279","GW" +"3633553280","3633553311","US" +"3633553312","3633553343","A2" +"3633553344","3633757439","US" +"3633757440","3633757695","IN" +"3633757696","3633776399","US" +"3633776400","3633776415","CN" +"3633776416","3633776463","US" +"3633776464","3633776479","CN" +"3633776480","3633815551","US" +"3633815552","3633815807","CA" +"3633815808","3633815839","US" +"3633815840","3633815843","GB" +"3633815844","3633815847","CA" +"3633815848","3633815851","GB" +"3633815852","3633815879","US" +"3633815880","3633815883","EG" +"3633815884","3633815887","CA" +"3633815888","3633815931","US" +"3633815932","3633815935","CA" +"3633815936","3633815943","US" +"3633815944","3633815951","CA" +"3633815952","3633815967","US" +"3633815968","3633816031","CA" +"3633816032","3633816035","US" +"3633816036","3633816039","GB" +"3633816040","3633816047","US" +"3633816048","3633816051","CA" +"3633816052","3633816055","US" +"3633816056","3633816079","CA" +"3633816080","3633816087","US" +"3633816088","3633816119","CA" +"3633816120","3633816127","IN" +"3633816128","3633816143","US" +"3633816144","3633816151","CA" +"3633816152","3633816159","IN" +"3633816160","3633816175","ZA" +"3633816176","3633816191","US" +"3633816192","3633816223","CA" +"3633816224","3633816231","IN" +"3633816232","3633816247","US" +"3633816248","3633816255","IN" +"3633816256","3633816263","NG" +"3633816264","3633816279","CA" +"3633816280","3633816311","US" +"3633816312","3633816319","CA" +"3633816320","3633816327","ZA" +"3633816328","3633816351","CA" +"3633816352","3633816383","IN" +"3633816384","3633816391","NG" +"3633816392","3633816399","US" +"3633816400","3633816407","CA" +"3633816408","3633816463","US" +"3633816464","3633816471","CA" +"3633816472","3633816479","IN" +"3633816480","3633816495","CA" +"3633816496","3633816503","ZA" +"3633816504","3633816511","IN" +"3633816512","3633816519","US" +"3633816520","3633816527","ZA" +"3633816528","3633816535","CA" +"3633816536","3633816543","US" +"3633816544","3633816559","ZA" +"3633816560","3633816567","IN" +"3633816568","3633818663","CA" +"3633818664","3633818667","US" +"3633818668","3633818703","CA" +"3633818704","3633818711","US" +"3633818712","3633818799","CA" +"3633818800","3633818807","US" +"3633818808","3633818847","CA" +"3633818848","3633818855","US" +"3633818856","3633818911","CA" +"3633818912","3633818919","US" +"3633818920","3633818939","CA" +"3633818940","3633818943","US" +"3633818944","3633818951","CA" +"3633818952","3633818959","US" +"3633818960","3633818967","CA" +"3633818968","3633818983","US" +"3633818984","3633818991","CA" +"3633818992","3633818999","US" +"3633819000","3633819071","CA" +"3633819072","3633819079","US" +"3633819080","3633819083","CA" +"3633819084","3633819103","US" +"3633819104","3633819107","CA" +"3633819108","3633819111","US" +"3633819112","3633819123","CA" +"3633819124","3633819127","US" +"3633819128","3633819131","CA" +"3633819132","3633819135","EG" +"3633819136","3633819199","IN" +"3633819200","3633819231","US" +"3633819232","3633819263","CA" +"3633819264","3633819275","US" +"3633819276","3633819279","CA" +"3633819280","3633819291","US" +"3633819292","3633819295","GB" +"3633819296","3633819303","US" +"3633819304","3633819307","AM" +"3633819308","3633819315","CA" +"3633819316","3633819331","US" +"3633819332","3633819343","CA" +"3633819344","3633819347","US" +"3633819348","3633819351","CA" +"3633819352","3633819391","US" +"3633819392","3633819423","IN" +"3633819424","3633819427","CA" +"3633819428","3633819439","US" +"3633819440","3633819443","CA" +"3633819444","3633819451","US" +"3633819452","3633819455","CA" +"3633819456","3633819463","US" +"3633819464","3633819467","CA" +"3633819468","3633819487","US" +"3633819488","3633819491","CA" +"3633819492","3633819499","US" +"3633819500","3633819511","CA" +"3633819512","3633819515","US" +"3633819516","3633819519","AR" +"3633819520","3633819539","US" +"3633819540","3633819547","CA" +"3633819548","3633819555","US" +"3633819556","3633819559","GB" +"3633819560","3633819563","US" +"3633819564","3633819583","CA" +"3633819584","3633819615","US" +"3633819616","3633819639","CA" +"3633819640","3633821279","US" +"3633821280","3633821311","BB" +"3633821312","3633822207","US" +"3633822208","3633822335","A1" +"3633822336","3633823487","US" +"3633823488","3633823743","A1" +"3633823744","3633827839","US" +"3633827840","3633828095","GB" +"3633828096","3633828970","US" +"3633828971","3633828977","IN" +"3633828978","3633831306","US" +"3633831307","3633831338","IN" +"3633831339","3633831383","US" +"3633831384","3633831395","AU" +"3633831396","3633874431","US" +"3633874432","3633874687","GB" +"3633874688","3633881087","US" +"3633881088","3633885183","AN" +"3633885184","3633889279","US" +"3633889280","3633893375","CA" +"3633893376","3633915647","US" +"3633915648","3633915903","IT" +"3633915904","3633922303","US" +"3633922304","3633922367","TN" +"3633922368","3633971199","US" +"3633971200","3633974527","CA" +"3633974528","3633975039","US" +"3633975040","3634020351","CA" +"3634020352","3634053119","US" +"3634053120","3634061311","CL" +"3634061312","3634065311","US" +"3634065312","3634065343","SV" +"3634065344","3634094079","US" +"3634094080","3634098175","SE" +"3634098176","3634125831","US" +"3634125832","3634125839","CA" +"3634125840","3634125855","JP" +"3634125856","3634125951","US" +"3634125952","3634125967","CA" +"3634125968","3634135423","US" +"3634135424","3634135487","CA" +"3634135488","3634136103","US" +"3634136104","3634136111","CA" +"3634136112","3634138127","US" +"3634138128","3634138143","CA" +"3634138144","3634189055","US" +"3634189056","3634189311","GB" +"3634189312","3634204255","US" +"3634204256","3634204263","AT" +"3634204264","3634204591","US" +"3634204592","3634204607","GB" +"3634204608","3634267649","US" +"3634267650","3634267681","GB" +"3634267682","3634269669","US" +"3634269670","3634269679","GB" +"3634269680","3634269801","US" +"3634269802","3634269815","CA" +"3634269816","3634270016","US" +"3634270017","3634270080","CN" +"3634270081","3634270976","US" +"3634270977","3634271231","CN" +"3634271232","3634271232","US" +"3634271233","3634271328","CA" +"3634271329","3634367023","US" +"3634367024","3634367031","CA" +"3634367032","3634511871","US" +"3634511872","3634515967","CA" +"3634515968","3634552831","US" +"3634552832","3634556927","CA" +"3634556928","3634741247","US" +"3634741248","3634749439","CA" +"3634749440","3634759423","US" +"3634759424","3634759679","A1" +"3634759680","3634777087","US" +"3634777088","3634777343","A1" +"3634777344","3634880511","US" +"3634880512","3634888703","CA" +"3634888704","3634913279","US" +"3634913280","3634914175","CA" +"3634914176","3634914207","US" +"3634914208","3634914223","BM" +"3634914224","3634914239","US" +"3634914240","3634915663","CA" +"3634915664","3634915679","US" +"3634915680","3634921471","CA" +"3634921472","3634925567","US" +"3634925568","3634929663","CA" +"3634929664","3634982399","US" +"3634982400","3634982655","A1" +"3634982656","3635107903","US" +"3635107904","3635107967","MX" +"3635107968","3635109887","US" +"3635109888","3635110295","CA" +"3635110296","3635110303","US" +"3635110304","3635113983","CA" +"3635113984","3635142655","US" +"3635142656","3635146751","CA" +"3635146752","3635159039","US" +"3635159040","3635163135","CA" +"3635163136","3635314687","US" +"3635314688","3635322879","CA" +"3635322880","3635425279","US" +"3635425280","3635429375","CA" +"3635429376","3635466239","US" +"3635466240","3635470335","CA" +"3635470336","3635532287","US" +"3635532288","3635532303","ES" +"3635532304","3635532831","US" +"3635532832","3635532863","VE" +"3635532864","3635532999","US" +"3635533000","3635533007","NO" +"3635533008","3635533535","US" +"3635533536","3635533551","IN" +"3635533552","3635643391","US" +"3635643392","3635644415","JP" +"3635644416","3635645439","US" +"3635645440","3635645951","HK" +"3635645952","3635646463","TL" +"3635646464","3635646975","US" +"3635646976","3635647487","GB" +"3635647488","3635647743","US" +"3635647744","3635647999","CA" +"3635648000","3635648255","TW" +"3635648256","3635648511","ML" +"3635648512","3635648767","US" +"3635648768","3635649023","JP" +"3635649024","3635650559","US" +"3635650560","3635652607","HK" +"3635652608","3635654655","US" +"3635654656","3635656447","HK" +"3635656448","3635656703","US" +"3635656704","3635657727","JP" +"3635657728","3635659263","US" +"3635659264","3635660287","ID" +"3635660288","3635660799","US" +"3635660800","3635662847","HK" +"3635662848","3635670527","US" +"3635670528","3635671039","TL" +"3635671040","3635674623","US" +"3635674624","3635675135","HK" +"3635675136","3635847791","US" +"3635847792","3635847807","CA" +"3635847808","3635856511","US" +"3635856512","3635856543","CA" +"3635856544","3635871743","US" +"3635871744","3635879935","CA" +"3635879936","3635892223","US" +"3635892224","3635895785","CA" +"3635895786","3635895786","US" +"3635895787","3635895807","CA" +"3635895808","3635895839","US" +"3635895840","3635896319","CA" +"3635896320","3635904511","US" +"3635904512","3635912703","CA" +"3635912704","3635961855","US" +"3635961856","3635963903","SV" +"3635963904","3635964159","US" +"3635964160","3635964415","BO" +"3635964416","3635965951","SV" +"3635965952","3635966975","BO" +"3635966976","3635967999","PY" +"3635968000","3635970047","SV" +"3635970048","3636019199","US" +"3636019200","3636021775","CA" +"3636021776","3636021791","US" +"3636021792","3636027391","CA" +"3636027392","3636027647","US" +"3636027648","3636029439","SG" +"3636029440","3636029695","US" +"3636029696","3636029767","SG" +"3636029768","3636029775","CH" +"3636029776","3636029951","SG" +"3636029952","3636030207","US" +"3636030208","3636031231","SG" +"3636031232","3636031999","US" +"3636032000","3636032063","SG" +"3636032064","3636032071","BR" +"3636032072","3636032511","SG" +"3636032512","3636032767","US" +"3636032768","3636033471","SG" +"3636033472","3636033479","US" +"3636033480","3636033519","SG" +"3636033520","3636033791","US" +"3636033792","3636034303","SG" +"3636034304","3636035327","US" +"3636035328","3636035583","SG" +"3636035584","3636064255","US" +"3636064256","3636068351","CA" +"3636068352","3636150495","US" +"3636150496","3636150527","CA" +"3636150528","3636150783","US" +"3636150784","3636150831","CA" +"3636150832","3636150911","US" +"3636150912","3636150935","CA" +"3636150936","3636150943","US" +"3636150944","3636150991","CA" +"3636150992","3636151007","US" +"3636151008","3636151023","BS" +"3636151024","3636151031","CA" +"3636151032","3636151039","US" +"3636151040","3636151455","CA" +"3636151456","3636151479","US" +"3636151480","3636151488","CA" +"3636151489","3636151535","US" +"3636151536","3636151551","CA" +"3636151552","3636151561","US" +"3636151562","3636151563","CA" +"3636151564","3636151583","US" +"3636151584","3636151759","CA" +"3636151760","3636151775","US" +"3636151776","3636152303","CA" +"3636152304","3636152319","US" +"3636152320","3636152575","CA" +"3636152576","3636152591","US" +"3636152592","3636152607","CA" +"3636152608","3636152615","US" +"3636152616","3636152623","CA" +"3636152624","3636152647","US" +"3636152648","3636152655","CA" +"3636152656","3636152703","US" +"3636152704","3636152767","CA" +"3636152768","3636152775","MX" +"3636152776","3636152783","US" +"3636152784","3636152799","CA" +"3636152800","3636152831","US" +"3636152832","3636152855","CA" +"3636152856","3636152895","US" +"3636152896","3636153023","CA" +"3636153024","3636153055","KN" +"3636153056","3636153343","CA" +"3636153344","3636153375","US" +"3636153376","3636153823","CA" +"3636153824","3636153839","US" +"3636153840","3636153847","CA" +"3636153848","3636153855","US" +"3636153856","3636154895","CA" +"3636154896","3636154911","US" +"3636154912","3636154975","CA" +"3636154976","3636154979","US" +"3636154980","3636154990","CA" +"3636154991","3636155071","US" +"3636155072","3636155391","CA" +"3636155392","3636155407","US" +"3636155408","3636155455","CA" +"3636155456","3636155519","US" +"3636155520","3636155775","CA" +"3636155776","3636155839","US" +"3636155840","3636156159","CA" +"3636156160","3636156191","US" +"3636156192","3636156255","CA" +"3636156256","3636156256","US" +"3636156257","3636156415","CA" +"3636156416","3636156927","US" +"3636156928","3636157063","CA" +"3636157064","3636157167","US" +"3636157168","3636157183","CA" +"3636157184","3636157439","US" +"3636157440","3636158015","CA" +"3636158016","3636158031","US" +"3636158032","3636158063","CA" +"3636158064","3636158079","US" +"3636158080","3636158215","CA" +"3636158216","3636158223","US" +"3636158224","3636158335","CA" +"3636158336","3636158351","US" +"3636158352","3636158367","CA" +"3636158368","3636158399","US" +"3636158400","3636158719","CA" +"3636158720","3636158751","US" +"3636158752","3636158815","CA" +"3636158816","3636158831","US" +"3636158832","3636158847","CA" +"3636158848","3636158975","US" +"3636158976","3636159743","CA" +"3636159744","3636159775","US" +"3636159776","3636159807","CA" +"3636159808","3636159839","US" +"3636159840","3636159871","CA" +"3636159872","3636159999","IN" +"3636160000","3636160255","US" +"3636160256","3636160335","CA" +"3636160336","3636160343","US" +"3636160344","3636160415","CA" +"3636160416","3636160431","US" +"3636160432","3636160831","CA" +"3636160832","3636160895","US" +"3636160896","3636160943","CA" +"3636160944","3636160975","US" +"3636160976","3636161279","CA" +"3636161280","3636161327","US" +"3636161328","3636161407","CA" +"3636161408","3636161439","US" +"3636161440","3636161535","CA" +"3636161536","3636161791","US" +"3636161792","3636161871","CA" +"3636161872","3636161885","US" +"3636161886","3636161943","CA" +"3636161944","3636161951","US" +"3636161952","3636161967","CA" +"3636161968","3636162015","US" +"3636162016","3636162559","CA" +"3636162560","3636163583","US" +"3636163584","3636164095","CA" +"3636164096","3636164111","BV" +"3636164112","3636164143","CA" +"3636164144","3636164159","US" +"3636164160","3636164255","CA" +"3636164256","3636164271","US" +"3636164272","3636164319","CA" +"3636164320","3636164327","US" +"3636164328","3636164335","CA" +"3636164336","3636164351","US" +"3636164352","3636164607","CA" +"3636164608","3636165471","US" +"3636165472","3636165503","CA" +"3636165504","3636166143","US" +"3636166144","3636166655","CA" +"3636166656","3636206079","US" +"3636206080","3636206335","AU" +"3636206336","3636266879","US" +"3636266880","3636266911","HK" +"3636266912","3636396031","US" +"3636396032","3636461567","CA" +"3636461568","3636577647","US" +"3636577648","3636577663","CA" +"3636577664","3636609023","US" +"3636609024","3636610559","CA" +"3636610560","3636610815","US" +"3636610816","3636621311","CA" +"3636621312","3636625407","US" +"3636625408","3636626431","AR" +"3636626432","3636626943","BR" +"3636626944","3636627199","AR" +"3636627200","3636627455","BR" +"3636627456","3636628479","MX" +"3636628480","3636628991","PE" +"3636628992","3636633599","US" +"3636637696","3636822015","US" +"3636822016","3636854783","CA" +"3636854784","3636887551","US" +"3636887552","3636895743","CA" +"3636895744","3636904063","US" +"3636904064","3636904095","GB" +"3636904096","3636904159","US" +"3636904160","3636904191","CA" +"3636904192","3636904447","US" +"3636904448","3636904479","CA" +"3636904480","3636904511","HK" +"3636904512","3636904543","CA" +"3636904544","3636904575","IN" +"3636904576","3636904607","US" +"3636904608","3636904671","IN" +"3636904672","3636905471","US" +"3636905472","3636905727","CA" +"3636905728","3636905791","US" +"3636905792","3636905823","IN" +"3636905824","3636905887","US" +"3636905888","3636905951","CA" +"3636905952","3636906015","US" +"3636906016","3636906047","IN" +"3636906048","3636906079","US" +"3636906080","3636906111","BE" +"3636906112","3636906143","US" +"3636906144","3636906175","BE" +"3636906176","3636906207","IN" +"3636906208","3636906367","US" +"3636906368","3636906465","IN" +"3636906466","3636906495","US" +"3636906496","3636906623","CA" +"3636906624","3636906751","IN" +"3636906752","3636906879","US" +"3636906880","3636907007","IN" +"3636907008","3636907039","CA" +"3636907040","3636907103","US" +"3636907104","3636907135","IN" +"3636907136","3636907167","CA" +"3636907168","3636907199","US" +"3636907200","3636907231","CA" +"3636907232","3636907775","US" +"3636907776","3636908031","CA" +"3636908032","3636908543","US" +"3636908544","3636908799","IN" +"3636908800","3636908863","US" +"3636908864","3636908991","CA" +"3636908992","3636909055","US" +"3636909056","3636909311","CA" +"3636909312","3636909663","US" +"3636909664","3636909695","IT" +"3636909696","3636909727","CA" +"3636909728","3636909759","US" +"3636909760","3636909791","CA" +"3636909792","3636909887","US" +"3636909888","3636909951","IT" +"3636909952","3636909983","US" +"3636909984","3636910015","TZ" +"3636910016","3636910335","US" +"3636910336","3636910367","IN" +"3636910368","3636910399","US" +"3636910400","3636910431","IN" +"3636910432","3636910495","US" +"3636910496","3636910527","BE" +"3636910528","3636910591","US" +"3636910592","3636910719","CA" +"3636910720","3636911295","US" +"3636911296","3636911359","CA" +"3636911360","3636911423","US" +"3636911424","3636911455","BE" +"3636911456","3636911615","US" +"3636911616","3636911743","CA" +"3636911744","3636911871","IN" +"3636911872","3636911903","US" +"3636911904","3636911935","CA" +"3636911936","3636912383","US" +"3636912384","3636912447","JP" +"3636912448","3636912959","US" +"3636912960","3636912991","BE" +"3636912992","3636913535","US" +"3636913536","3636913663","CA" +"3636913664","3636913919","US" +"3636913920","3636914687","CA" +"3636914688","3636914879","US" +"3636914880","3636914943","CA" +"3636914944","3636915103","US" +"3636915104","3636915135","IN" +"3636915136","3636915199","US" +"3636915200","3636915327","IN" +"3636915328","3636915455","CA" +"3636915456","3636915583","IN" +"3636915584","3636915711","CA" +"3636915712","3636915839","US" +"3636915840","3636915967","CA" +"3636915968","3636916031","US" +"3636916032","3636916063","CA" +"3636916064","3636916223","US" +"3636916224","3636916351","CA" +"3636916352","3636916479","US" +"3636916480","3636916607","CA" +"3636916608","3636916735","IN" +"3636916736","3636916927","US" +"3636916928","3636916959","CA" +"3636916960","3636916991","US" +"3636916992","3636917119","CA" +"3636917120","3636917255","US" +"3636917256","3636917263","IN" +"3636917264","3636917295","US" +"3636917296","3636917303","IN" +"3636917304","3636917359","US" +"3636917360","3636917367","AU" +"3636917368","3636917447","US" +"3636917448","3636917455","HK" +"3636917456","3636917503","US" +"3636917504","3636919039","CA" +"3636919040","3636919071","IN" +"3636919072","3636919103","US" +"3636919104","3636919135","CA" +"3636919136","3636919167","IN" +"3636919168","3636919199","CA" +"3636919200","3636919231","IN" +"3636919232","3636919711","US" +"3636919712","3636919743","BE" +"3636919744","3636919807","US" +"3636919808","3636919871","GB" +"3636919872","3636920127","US" +"3636920128","3636920191","CA" +"3636920192","3637015327","US" +"3637015328","3637015343","GB" +"3637015344","3637071887","US" +"3637071888","3637071903","AD" +"3637071904","3637071935","US" +"3637071936","3637071943","SK" +"3637071944","3637071951","IL" +"3637071952","3637071967","CY" +"3637071968","3637072015","US" +"3637072016","3637072031","CY" +"3637072032","3637072071","US" +"3637072072","3637072079","FI" +"3637072080","3637072095","CA" +"3637072096","3637072127","GB" +"3637072128","3637072135","US" +"3637072136","3637072143","AD" +"3637072144","3637072159","CY" +"3637072160","3637072279","US" +"3637072280","3637072287","CA" +"3637072288","3637072303","NE" +"3637072304","3637072319","US" +"3637072320","3637072335","IL" +"3637072336","3637072343","CA" +"3637072344","3637072895","US" +"3637072896","3637073151","CY" +"3637073152","3637073167","US" +"3637073168","3637073183","AD" +"3637073184","3637073215","US" +"3637073216","3637073231","CY" +"3637073232","3637073727","US" +"3637073728","3637073791","CY" +"3637073792","3637073935","US" +"3637073936","3637073959","AD" +"3637073960","3637074239","US" +"3637074240","3637074303","PA" +"3637074304","3637074687","US" +"3637074688","3637074703","CA" +"3637074704","3637074943","US" +"3637074944","3637074959","CA" +"3637074960","3637075967","US" +"3637075968","3637080063","CA" +"3637080064","3637427711","US" +"3637427712","3637427743","CA" +"3637427744","3637469439","US" +"3637469440","3637469695","GE" +"3637469696","3637510143","US" +"3637510144","3637520127","CA" +"3637520128","3637520191","US" +"3637520192","3637554143","CA" +"3637554144","3637554175","US" +"3637554176","3637641215","CA" +"3637641216","3637665791","US" +"3637665792","3637667439","CA" +"3637667440","3637667518","US" +"3637667519","3637669887","CA" +"3637669888","3637706751","US" +"3637706752","3637739519","CA" +"3637739520","3638165503","US" +"3638165504","3638181887","CA" +"3638181888","3638198951","US" +"3638198952","3638198959","BM" +"3638198960","3638198983","US" +"3638198984","3638198991","ES" +"3638198992","3638199711","US" +"3638199712","3638199743","DE" +"3638199744","3638200007","US" +"3638200008","3638200015","JP" +"3638200016","3638206407","US" +"3638206408","3638206415","LU" +"3638206416","3638208527","US" +"3638208528","3638208543","CN" +"3638208544","3638214167","US" +"3638214168","3638214175","GB" +"3638214176","3638214399","US" +"3638214400","3638214655","GR" +"3638214656","3638214783","IT" +"3638214784","3638214871","US" +"3638214872","3638214879","CK" +"3638214880","3638215663","US" +"3638215664","3638215679","GB" +"3638215680","3638215831","US" +"3638215832","3638215839","JP" +"3638215840","3638215855","US" +"3638215856","3638215863","AU" +"3638215864","3638216735","US" +"3638216736","3638216743","LU" +"3638216744","3638219087","US" +"3638219088","3638219103","IT" +"3638219104","3638219455","US" +"3638219456","3638219519","AU" +"3638219520","3638219775","US" +"3638219776","3638220031","IT" +"3638220032","3638220167","US" +"3638220168","3638220175","JP" +"3638220176","3638220191","US" +"3638220192","3638220223","QA" +"3638220224","3638220511","US" +"3638220512","3638220519","CN" +"3638220520","3638222087","US" +"3638222088","3638222095","DE" +"3638222096","3638222143","US" +"3638222144","3638222207","DE" +"3638222208","3638222463","US" +"3638222464","3638222591","AU" +"3638222592","3638222623","CA" +"3638222624","3638222911","US" +"3638222912","3638222919","IT" +"3638222920","3638223559","US" +"3638223560","3638223567","PA" +"3638223568","3638224255","US" +"3638224256","3638224271","IT" +"3638224272","3638224639","US" +"3638224640","3638224895","GR" +"3638224896","3638225983","US" +"3638225984","3638226015","IN" +"3638226016","3638226687","US" +"3638226688","3638226943","NL" +"3638226944","3638228023","US" +"3638228024","3638228031","GB" +"3638228032","3638229279","US" +"3638229280","3638229311","IT" +"3638229312","3638230671","US" +"3638230672","3638230679","AU" +"3638230680","3638230815","US" +"3638230816","3638230847","ES" +"3638230848","3638230927","US" +"3638230928","3638230935","CA" +"3638230936","3638231031","US" +"3638231032","3638231039","GB" +"3638231040","3638247439","US" +"3638247440","3638247455","GB" +"3638247456","3638247487","US" +"3638247488","3638247551","GB" +"3638247552","3638247615","DE" +"3638247616","3638247679","GB" +"3638247680","3638247855","US" +"3638247856","3638247871","DE" +"3638247872","3638247903","US" +"3638247904","3638248703","GB" +"3638248704","3638249215","FR" +"3638249216","3638249471","GB" +"3638249472","3638249751","US" +"3638249752","3638249791","GB" +"3638249792","3638249983","US" +"3638249984","3638249991","GB" +"3638249992","3638249999","US" +"3638250000","3638250031","GB" +"3638250032","3638250535","US" +"3638250536","3638250543","GB" +"3638250544","3638250559","US" +"3638250560","3638250623","GB" +"3638250624","3638250687","US" +"3638250688","3638250703","GB" +"3638250704","3638250719","US" +"3638250720","3638250815","GB" +"3638250816","3638250831","US" +"3638250832","3638250847","GB" +"3638250848","3638250863","US" +"3638250864","3638250871","GB" +"3638250872","3638250895","US" +"3638250896","3638250911","GB" +"3638250912","3638250983","US" +"3638250984","3638250991","GB" +"3638250992","3638304767","US" +"3638304768","3638312959","CA" +"3638312960","3638349823","US" +"3638349824","3638350079","AU" +"3638350080","3638370303","US" +"3638370304","3638374751","CA" +"3638374752","3638374767","US" +"3638374768","3638386687","CA" +"3638386688","3638398975","US" +"3638398976","3638398991","GB" +"3638398992","3638399007","CH" +"3638399008","3638399487","US" +"3638399488","3638399615","CH" +"3638399616","3638399647","BM" +"3638399648","3638399679","US" +"3638399680","3638399743","CA" +"3638399744","3638399999","CH" +"3638400000","3638400063","CA" +"3638400064","3638400271","US" +"3638400272","3638400279","CA" +"3638400280","3638400559","US" +"3638400560","3638400567","PA" +"3638400568","3638400575","US" +"3638400576","3638400607","CA" +"3638400608","3638400639","US" +"3638400640","3638400767","CA" +"3638400768","3638509295","US" +"3638509296","3638509311","GB" +"3638509312","3638509567","US" +"3638509568","3638526911","CA" +"3638526912","3638526919","US" +"3638526920","3638528751","CA" +"3638528752","3638528759","US" +"3638528760","3638530047","CA" +"3638530048","3638530063","US" +"3638530064","3638530239","CA" +"3638530240","3638530255","US" +"3638530256","3638533695","CA" +"3638533696","3638533703","US" +"3638533704","3638534143","CA" +"3638534144","3638697983","US" +"3638697984","3638706175","CA" +"3638706176","3638706687","A2" +"3638706688","3638706943","NG" +"3638706944","3638710271","A2" +"3638710272","3638874111","US" +"3638874112","3638878207","CA" +"3638878208","3638960383","US" +"3638960384","3638960639","BR" +"3638960640","3638984703","US" +"3638984704","3638985983","GT" +"3638985984","3638986239","HN" +"3638986240","3638992895","GT" +"3638992896","3639052031","US" +"3639052032","3639052287","ES" +"3639052288","3639083007","US" +"3639083008","3639148543","CA" +"3639148544","3639222271","US" +"3639222272","3639230463","CA" +"3639230464","3639255039","US" +"3639255040","3639258677","CA" +"3639258678","3639258678","IL" +"3639258679","3639263231","CA" +"3639263232","3639279615","US" +"3639279616","3639283711","CA" +"3639283712","3639342703","US" +"3639342704","3639342711","GB" +"3639342712","3639343231","US" +"3639343232","3639343263","GB" +"3639343264","3639344447","US" +"3639344448","3639344463","MA" +"3639344464","3639344543","US" +"3639344544","3639344575","GB" +"3639344576","3639344591","PL" +"3639344592","3639369727","US" +"3639369728","3639372031","A2" +"3639372032","3639372287","US" +"3639372288","3639375359","A2" +"3639375360","3639375871","US" +"3639375872","3639376383","A2" +"3639376384","3639377407","GU" +"3639377408","3639390207","US" +"3639390208","3639394303","ZA" +"3639394304","3639396095","US" +"3639396096","3639396351","A2" +"3639396352","3639396383","NE" +"3639396384","3639396415","A2" +"3639396416","3639396431","PK" +"3639396432","3639396447","A2" +"3639396448","3639396463","NG" +"3639396464","3639396471","TZ" +"3639396472","3639396487","A2" +"3639396488","3639396519","IN" +"3639396520","3639396543","A2" +"3639396544","3639396551","TZ" +"3639396552","3639396671","A2" +"3639396672","3639396735","NE" +"3639396736","3639396743","IN" +"3639396744","3639396863","A2" +"3639396864","3639396879","NE" +"3639396880","3639396927","A2" +"3639396928","3639396959","FR" +"3639396960","3639396975","NG" +"3639396976","3639396991","A2" +"3639396992","3639397023","CD" +"3639397024","3639397119","A2" +"3639397120","3639397375","IN" +"3639397376","3639397631","US" +"3639397632","3639397887","A2" +"3639397888","3639398399","US" +"3639398400","3639398423","A2" +"3639398424","3639398431","LB" +"3639398432","3639398439","A2" +"3639398440","3639398447","LB" +"3639398448","3639398463","A2" +"3639398464","3639398495","SA" +"3639398496","3639398527","A2" +"3639398528","3639398591","SA" +"3639398592","3639398599","LB" +"3639398600","3639398655","A2" +"3639398656","3639398663","SA" +"3639398664","3639398911","A2" +"3639398912","3639399679","US" +"3639399680","3639399935","HN" +"3639399936","3639400447","A2" +"3639400448","3639401471","RS" +"3639401472","3639401495","PK" +"3639401496","3639401511","A2" +"3639401512","3639401519","ID" +"3639401520","3639401535","A2" +"3639401536","3639401541","TZ" +"3639401542","3639401542","KE" +"3639401543","3639401551","TZ" +"3639401552","3639401559","LK" +"3639401560","3639401591","A2" +"3639401592","3639401599","US" +"3639401600","3639401623","A2" +"3639401624","3639401631","TZ" +"3639401632","3639401647","A2" +"3639401648","3639401655","PK" +"3639401656","3639401687","A2" +"3639401688","3639401727","PK" +"3639401728","3639402015","A2" +"3639402016","3639402039","PK" +"3639402040","3639402047","A2" +"3639402048","3639402055","US" +"3639402056","3639402071","PK" +"3639402072","3639402079","A2" +"3639402080","3639402095","PK" +"3639402096","3639402111","A2" +"3639402112","3639402175","NG" +"3639402176","3639402191","PK" +"3639402192","3639402199","A2" +"3639402200","3639402207","PK" +"3639402208","3639402239","A2" +"3639402240","3639402495","GH" +"3639402496","3639439631","US" +"3639439632","3639439639","RO" +"3639439640","3639440767","US" +"3639440768","3639440895","IN" +"3639440896","3639513239","US" +"3639513240","3639513243","AE" +"3639513244","3639533567","US" +"3639533568","3639537663","CA" +"3639537664","3639550207","US" +"3639550208","3639550215","AR" +"3639550216","3639550223","BR" +"3639550224","3639550239","CA" +"3639550240","3639550247","MX" +"3639550248","3639550311","US" +"3639550312","3639550319","AU" +"3639550320","3639550327","CO" +"3639550328","3639554559","US" +"3639554560","3639554815","GB" +"3639554816","3639555839","US" +"3639555840","3639555847","AR" +"3639555848","3639555855","BR" +"3639555856","3639555863","CA" +"3639555864","3639555871","MX" +"3639555872","3639555999","US" +"3639556000","3639556007","AU" +"3639556008","3639556015","CA" +"3639556016","3639556023","CO" +"3639556024","3639558143","US" +"3639558144","3639566335","CA" +"3639566336","3639593983","US" +"3639593984","3639595007","GB" +"3639595008","3639607295","US" +"3639607296","3639611391","CA" +"3639611392","3639656447","US" +"3639656448","3639660543","CA" +"3639660544","3639664639","US" +"3639664640","3639668735","CA" +"3639668736","3639672831","US" +"3639672832","3639681023","CL" +"3639681024","3639685055","US" +"3639685056","3639685063","SA" +"3639685064","3639730175","US" +"3639730176","3639734271","CA" +"3639734272","3639886591","US" +"3639886592","3639886599","SG" +"3639886600","3639888415","US" +"3639888416","3639888423","ID" +"3639888424","3639888447","US" +"3639888448","3639888463","ID" +"3639888464","3639888962","US" +"3639888963","3639888963","ID" +"3639888964","3639888986","US" +"3639888987","3639888987","ID" +"3639888988","3639892359","US" +"3639892360","3639892367","ID" +"3639892368","3639892375","US" +"3639892376","3639892383","ID" +"3639892384","3639892415","US" +"3639892416","3639892431","MX" +"3639892432","3639893503","US" +"3639893504","3639893519","ID" +"3639893520","3639902207","US" +"3639902208","3639918591","PE" +"3639918592","3639934975","AR" +"3639934976","3640001751","US" +"3640001752","3640001759","IL" +"3640001760","3640003239","US" +"3640003240","3640003247","TR" +"3640003248","3640007311","US" +"3640007312","3640007319","HK" +"3640007320","3640007359","US" +"3640007360","3640007367","SO" +"3640007368","3640013095","US" +"3640013096","3640013103","CA" +"3640013104","3640013767","US" +"3640013768","3640013775","GI" +"3640013776","3640023079","US" +"3640023080","3640023087","EG" +"3640023088","3640023231","US" +"3640023232","3640023247","GI" +"3640023248","3640023271","US" +"3640023272","3640023279","HK" +"3640023280","3640027415","US" +"3640027416","3640027423","GB" +"3640027424","3640028207","US" +"3640028208","3640028215","GB" +"3640028216","3640028295","US" +"3640028296","3640028303","CA" +"3640028304","3640028335","US" +"3640028336","3640028343","CA" +"3640028344","3640028447","US" +"3640028448","3640028455","GB" +"3640028456","3640028495","US" +"3640028496","3640028503","MY" +"3640028504","3640028591","US" +"3640028592","3640028599","CA" +"3640028600","3640057855","US" +"3640057856","3640066047","CA" +"3640066048","3640075391","US" +"3640075392","3640075407","NL" +"3640075408","3640075759","US" +"3640075760","3640075775","CA" +"3640075776","3640112063","US" +"3640112064","3640112079","NL" +"3640112080","3640112575","US" +"3640112576","3640112591","NL" +"3640112592","3640197119","US" +"3640197120","3640201215","CA" +"3640201216","3640205311","US" +"3640205312","3640209407","BM" +"3640209408","3640213503","CA" +"3640213504","3640287231","US" +"3640287232","3640291327","CA" +"3640291328","3640312079","US" +"3640312080","3640312095","ID" +"3640312096","3640312103","GB" +"3640312104","3640312159","US" +"3640312160","3640312191","ID" +"3640312192","3640312319","US" +"3640312320","3640312575","NI" +"3640312576","3640312607","NG" +"3640312608","3640312831","US" +"3640312832","3640313087","TO" +"3640313088","3640314879","US" +"3640314880","3640315135","A2" +"3640315136","3640315391","US" +"3640315392","3640315647","TR" +"3640315648","3640316927","US" +"3640316928","3640317183","MX" +"3640317184","3640317327","US" +"3640317328","3640317343","A2" +"3640317344","3640317407","US" +"3640317408","3640317423","A2" +"3640317424","3640317503","US" +"3640317504","3640317535","ID" +"3640317536","3640317559","US" +"3640317560","3640317567","NL" +"3640317568","3640318207","US" +"3640318208","3640318975","NC" +"3640318976","3640319103","GQ" +"3640319104","3640319231","US" +"3640319232","3640319487","NG" +"3640319488","3640344959","US" +"3640344960","3640345007","MX" +"3640345008","3640345023","US" +"3640345024","3640345086","MX" +"3640345087","3640345087","US" +"3640345088","3640345342","MX" +"3640345343","3640345391","US" +"3640345392","3640345407","MX" +"3640345408","3640345423","US" +"3640345424","3640345431","MX" +"3640345432","3640345455","US" +"3640345456","3640345503","MX" +"3640345504","3640345743","US" +"3640345744","3640345854","MX" +"3640345855","3640346815","US" +"3640346816","3640346847","MX" +"3640346848","3640346879","US" +"3640346880","3640347134","MX" +"3640347135","3640347391","US" +"3640347392","3640347455","MX" +"3640347456","3640347471","US" +"3640347472","3640347487","MX" +"3640347488","3640347503","US" +"3640347504","3640347519","MX" +"3640347520","3640347535","US" +"3640347536","3640347551","MX" +"3640347552","3640347567","US" +"3640347568","3640347599","MX" +"3640347600","3640347615","US" +"3640347616","3640347631","MX" +"3640347632","3640347647","US" +"3640347648","3640347711","MX" +"3640347712","3640347839","US" +"3640347840","3640347902","MX" +"3640347903","3640360959","US" +"3640360960","3640369151","CA" +"3640369152","3640410111","US" +"3640410112","3640418303","CA" +"3640418304","3640430591","US" +"3640430592","3640432639","A2" +"3640432640","3640433407","US" +"3640433408","3640433663","A2" +"3640433664","3640434943","US" +"3640436480","3640436735","GH" +"3640438784","3640442879","A2" +"3640442880","3640446975","US" +"3640449024","3640450047","A2" +"3640450048","3640451071","US" +"3640451072","3640459263","A2" +"3640459264","3640557567","US" +"3640557568","3640559567","CA" +"3640559568","3640559575","US" +"3640559576","3640560511","CA" +"3640560512","3640560527","US" +"3640560528","3640564455","CA" +"3640564456","3640564463","US" +"3640564464","3640565631","CA" +"3640565632","3640565647","US" +"3640565648","3640582143","CA" +"3640582144","3640647679","US" +"3640647680","3640651775","JP" +"3640651776","3640655871","US" +"3640655872","3641020121","DE" +"3641020122","3641020122","GB" +"3641020123","3641057655","DE" +"3641057656","3641057663","CZ" +"3641057664","3641061225","DE" +"3641061226","3641061226","US" +"3641061227","3641078559","DE" +"3641078560","3641078567","BE" +"3641078568","3641085687","DE" +"3641085688","3641085695","CZ" +"3641085696","3641103719","DE" +"3641103720","3641103727","HU" +"3641103728","3641106951","DE" +"3641106952","3641106959","CH" +"3641106960","3641140671","DE" +"3641140672","3641140679","US" +"3641140680","3641147519","DE" +"3641147520","3641147527","AT" +"3641147528","3641150719","DE" +"3641150720","3641150759","CN" +"3641150760","3641150767","DE" +"3641150768","3641151487","CN" +"3641151488","3641157951","DE" +"3641157952","3641157959","AT" +"3641157960","3641158031","DE" +"3641158032","3641158055","FR" +"3641158056","3641158103","DE" +"3641158104","3641158111","FR" +"3641158112","3641158127","DE" +"3641158128","3641158135","ES" +"3641158136","3641158199","DE" +"3641158200","3641158207","NL" +"3641158208","3641158335","DE" +"3641158336","3641158343","ES" +"3641158344","3641158423","DE" +"3641158424","3641158431","IT" +"3641158432","3641158519","DE" +"3641158520","3641158527","ES" +"3641158528","3641159679","DE" +"3641159680","3641159687","ES" +"3641159688","3641159727","DE" +"3641159728","3641159743","ES" +"3641159744","3641159767","DE" +"3641159768","3641159775","ES" +"3641159776","3641180159","DE" +"3641180160","3641188351","GB" +"3641188352","3641192447","TJ" +"3641192448","3641196543","DE" +"3641196544","3641200639","SA" +"3641200640","3641204735","RU" +"3641204736","3641206015","NL" +"3641206016","3641206271","CN" +"3641206272","3641208831","NL" +"3641208832","3641212927","JO" +"3641212928","3641221119","NO" +"3641221120","3641229311","PL" +"3641229312","3641237503","CH" +"3641237504","3641241599","RU" +"3641241600","3641245695","GB" +"3641245696","3641249791","UA" +"3641249792","3641262079","DE" +"3641262080","3641266175","IT" +"3641266176","3641270271","RU" +"3641270272","3641278463","DE" +"3641278464","3641282559","IS" +"3641282560","3641286655","RU" +"3641286656","3641294847","PL" +"3641294848","3641298943","GB" +"3641298944","3641303039","SE" +"3641303040","3641307135","BG" +"3641307136","3641311231","LT" +"3641311232","3641315327","DE" +"3641315328","3641319423","DK" +"3641319424","3641323519","RU" +"3641323520","3641331711","DE" +"3641331712","3641335807","ES" +"3641335808","3641343999","SE" +"3641344000","3641345199","GB" +"3641345200","3641345215","IE" +"3641345216","3641352959","GB" +"3641352960","3641353151","A2" +"3641353152","3641353183","BD" +"3641353184","3641353215","A2" +"3641353216","3641353231","GB" +"3641353232","3641353247","IQ" +"3641353248","3641353727","A2" +"3641353728","3641353759","NG" +"3641353760","3641353775","GB" +"3641353776","3641353807","NG" +"3641353808","3641353831","GB" +"3641353832","3641353839","A2" +"3641353840","3641353855","GB" +"3641353856","3641353879","NG" +"3641353880","3641353983","A2" +"3641353984","3641354239","AF" +"3641354240","3641354255","A2" +"3641354256","3641354272","GB" +"3641354273","3641354303","A2" +"3641354304","3641354311","US" +"3641354312","3641354319","GB" +"3641354320","3641354327","A2" +"3641354328","3641354335","GB" +"3641354336","3641354339","A2" +"3641354340","3641354367","GB" +"3641354368","3641354495","A2" +"3641354496","3641354751","GB" +"3641354752","3641355263","NG" +"3641355264","3641355519","AO" +"3641355520","3641355583","A2" +"3641355584","3641355599","GB" +"3641355600","3641355775","A2" +"3641355776","3641356031","LB" +"3641356032","3641356191","A2" +"3641356192","3641356207","NG" +"3641356208","3641356351","A2" +"3641356352","3641356415","NG" +"3641356416","3641356535","A2" +"3641356536","3641356543","CM" +"3641356544","3641357855","A2" +"3641357856","3641357879","GB" +"3641357880","3641357887","A2" +"3641357888","3641357927","GB" +"3641357928","3641358335","A2" +"3641358336","3641359359","GB" +"3641359360","3641359615","IQ" +"3641359616","3641359871","US" +"3641359872","3641360383","GB" +"3641360384","3641368575","RO" +"3641368576","3641372671","GB" +"3641372672","3641376767","BG" +"3641376768","3641380863","IT" +"3641380864","3641383991","IR" +"3641383992","3641383999","SE" +"3641384000","3641384959","IR" +"3641384960","3641389055","CH" +"3641389056","3641391426","DE" +"3641391427","3641391439","CH" +"3641391440","3641391807","DE" +"3641391808","3641391823","AT" +"3641391824","3641392575","DE" +"3641392576","3641392583","RO" +"3641392584","3641393151","DE" +"3641393152","3641397247","KZ" +"3641397248","3641401343","IT" +"3641401344","3641409535","ES" +"3641409536","3641417727","PL" +"3641417728","3641421823","GE" +"3641421824","3641425919","TJ" +"3641425920","3641430015","DE" +"3641430016","3641434111","CH" +"3641434112","3641442303","CZ" +"3641442304","3641446399","GB" +"3641446400","3641450495","ES" +"3641450496","3641454591","RU" +"3641454592","3641458687","SK" +"3641458688","3641462783","RU" +"3641462784","3641466879","UZ" +"3641466880","3641470975","RU" +"3641470976","3641475071","MD" +"3641475072","3641479167","IT" +"3641479168","3641483263","GB" +"3641483264","3641491455","IT" +"3641491456","3641493503","UA" +"3641493504","3641494015","RU" +"3641494016","3641495551","UA" +"3641495552","3641496063","RU" +"3641496064","3641499647","UA" +"3641499648","3641503743","SA" +"3641503744","3641507839","RU" +"3641507840","3641516031","NO" +"3641516032","3641520127","HU" +"3641520128","3641524223","FR" +"3641524224","3641528319","DE" +"3641528320","3641532415","ES" +"3641532416","3641536511","HU" +"3641536512","3641540607","ES" +"3641540608","3641548799","GB" +"3641548800","3641552895","DE" +"3641552896","3641556991","AT" +"3641556992","3641559103","DE" +"3641559104","3641559135","NL" +"3641559136","3641560959","DE" +"3641560960","3641561087","NL" +"3641561088","3641565183","RU" +"3641565184","3641573375","SE" +"3641573376","3641577471","NO" +"3641577472","3641581567","RU" +"3641581568","3641585663","ES" +"3641585664","3641589759","RU" +"3641589760","3641593855","CH" +"3641593856","3641597951","NG" +"3641597952","3641602047","AZ" +"3641602048","3641606143","DE" +"3641606144","3641607695","GB" +"3641607696","3641607711","FR" +"3641607712","3641610239","GB" +"3641610240","3641618431","DE" +"3641618432","3641622527","GB" +"3641622528","3641626623","RU" +"3641626624","3641630719","HR" +"3641630720","3641634815","AT" +"3641634816","3641638911","RU" +"3641638912","3641643007","AT" +"3641643008","3641647103","RU" +"3641647104","3641651199","ES" +"3641651200","3641655295","RU" +"3641655296","3641659391","GB" +"3641659392","3641663487","FR" +"3641663488","3641667583","MT" +"3641667584","3641668607","GB" +"3641668608","3641670655","ZW" +"3641670656","3641670783","SO" +"3641670784","3641670791","NG" +"3641670792","3641670911","GB" +"3641670912","3641671167","LS" +"3641671168","3641671423","ZW" +"3641671424","3641671679","GB" +"3641671680","3641679871","RU" +"3641679872","3641680127","DK" +"3641680128","3641681151","GB" +"3641681152","3641681407","SE" +"3641681408","3641681663","FR" +"3641681664","3641683967","A1" +"3641683968","3641688063","KZ" +"3641688064","3641692159","RU" +"3641692160","3641696255","IT" +"3641696256","3641700351","BE" +"3641700352","3641704447","SE" +"3641704448","3641708543","FR" +"3641708544","3641712639","RU" +"3641712640","3641716735","NL" +"3641716736","3641720831","GB" +"3641720832","3641729023","MK" +"3641729024","3641733119","DK" +"3641733120","3641737215","AT" +"3641737216","3641741311","RS" +"3641741312","3641745407","ES" +"3641745408","3641749503","DE" +"3641749504","3641753599","CZ" +"3641753600","3641757695","SE" +"3641757696","3641761791","GB" +"3641761792","3641765887","CY" +"3641765888","3641769983","ES" +"3641769984","3641774079","NO" +"3641774080","3641778175","DE" +"3641778176","3641782271","PL" +"3641782272","3641784079","GB" +"3641784080","3641784319","BG" +"3641784320","3641784575","GB" +"3641784576","3641786367","BG" +"3641786368","3641790463","SE" +"3641790464","3641794559","LT" +"3641794560","3641798655","RS" +"3641798656","3641802751","RU" +"3641802752","3641806847","NL" +"3641806848","3641807871","TR" +"3641807872","3641808895","NL" +"3641808896","3641809663","TR" +"3641809664","3641809919","NL" +"3641809920","3641810315","TR" +"3641810316","3641810431","CY" +"3641810432","3641810439","NL" +"3641810440","3641810447","US" +"3641810448","3641810463","NL" +"3641810464","3641810479","US" +"3641810480","3641810559","TR" +"3641810560","3641810623","US" +"3641810624","3641810631","TR" +"3641810632","3641810642","US" +"3641810643","3641810687","TR" +"3641810688","3641810943","CY" +"3641810944","3641819135","RU" +"3641819136","3641823231","DE" +"3641823232","3641827327","NO" +"3641827328","3641835519","BH" +"3641835520","3641839615","IT" +"3641839616","3641843711","GB" +"3641843712","3641847807","ES" +"3641847808","3641851903","IT" +"3641851904","3641855999","NL" +"3641856000","3641860095","GB" +"3641860096","3641868287","IT" +"3641868288","3641876479","RU" +"3641876480","3641880575","ES" +"3641880576","3641881343","DE" +"3641881344","3641881359","US" +"3641881360","3641881391","DE" +"3641881392","3641881395","CH" +"3641881396","3641881399","DE" +"3641881400","3641881407","CH" +"3641881408","3641881423","DE" +"3641881424","3641881439","US" +"3641881440","3641881447","DE" +"3641881448","3641881455","CH" +"3641881456","3641881567","DE" +"3641881568","3641881583","CH" +"3641881584","3641882727","DE" +"3641882728","3641882735","CH" +"3641882736","3641884671","DE" +"3641884672","3641888767","NO" +"3641888768","3641892863","IT" +"3641892864","3641896959","ES" +"3641896960","3641901055","BG" +"3641901056","3641905151","RO" +"3641905152","3641909247","NL" +"3641909248","3641913343","AT" +"3641913344","3641917439","FR" +"3641917440","3641925631","GR" +"3641925632","3641933823","RU" +"3641933824","3641937919","GB" +"3641937920","3641941759","IT" +"3641941760","3641942015","EU" +"3641942016","3641947495","DE" +"3641947496","3641947503","US" +"3641947504","3641947652","DE" +"3641947653","3641947653","CH" +"3641947654","3641950207","DE" +"3641950208","3641954303","FR" +"3641954304","3641956863","MD" +"3641956864","3641956927","GB" +"3641956928","3641957119","MD" +"3641957120","3641957631","GB" +"3641957632","3641957887","MD" +"3641957888","3641958399","GB" +"3641958400","3641960447","BE" +"3641960448","3641960519","NL" +"3641960520","3641960527","BE" +"3641960528","3641960703","NL" +"3641960704","3641961727","BE" +"3641961728","3641961743","NL" +"3641961744","3641961791","BE" +"3641961792","3641961799","US" +"3641961800","3641962495","BE" +"3641962496","3641966591","GB" +"3641966592","3641970687","IT" +"3641970688","3641978879","GB" +"3641978880","3641982975","DK" +"3641982976","3641991167","RU" +"3641991168","3641995263","SE" +"3641995264","3641999359","DE" +"3641999360","3642003455","HU" +"3642003456","3642007551","RU" +"3642007552","3642015743","UA" +"3642015744","3642019839","CH" +"3642019840","3642023935","SY" +"3642023936","3642028031","EG" +"3642028032","3642028287","A2" +"3642028288","3642028543","NG" +"3642028544","3642028544","A2" +"3642028545","3642028799","NG" +"3642028800","3642028800","A2" +"3642028801","3642028863","SO" +"3642028864","3642028928","A2" +"3642028929","3642029055","NG" +"3642029056","3642029567","A2" +"3642029568","3642030591","NG" +"3642030592","3642030847","GN" +"3642030848","3642031359","NG" +"3642031360","3642031615","GB" +"3642031616","3642031616","A2" +"3642031617","3642031743","SL" +"3642031744","3642031871","A2" +"3642031872","3642032127","GB" +"3642032128","3642036223","PS" +"3642036224","3642040319","HU" +"3642040320","3642048511","BY" +"3642048512","3642053439","A2" +"3642053440","3642053631","TZ" +"3642053632","3642056703","A2" +"3642056704","3642060799","RU" +"3642060800","3642064895","KE" +"3642064896","3642068991","SE" +"3642068992","3642073087","AL" +"3642073088","3642077183","LV" +"3642077184","3642078999","BE" +"3642079000","3642079007","NL" +"3642079008","3642081271","BE" +"3642081272","3642081278","US" +"3642081279","3642085375","NL" +"3642085376","3642089471","RU" +"3642089472","3642093567","SE" +"3642093568","3642097663","NL" +"3642097664","3642101759","GB" +"3642101760","3642109951","NO" +"3642109952","3642110463","BE" +"3642110464","3642110991","NL" +"3642110992","3642111023","BE" +"3642111024","3642111103","NL" +"3642111104","3642111486","BE" +"3642111487","3642111791","NL" +"3642111792","3642111839","BE" +"3642111840","3642111887","NL" +"3642111888","3642111903","BE" +"3642111904","3642111919","NL" +"3642111920","3642111935","BE" +"3642111936","3642111951","NL" +"3642111952","3642111983","BE" +"3642111984","3642111999","NL" +"3642112000","3642112031","BE" +"3642112032","3642112047","NL" +"3642112048","3642112063","BE" +"3642112064","3642112143","NL" +"3642112144","3642112159","BE" +"3642112160","3642112207","NL" +"3642112208","3642112239","BE" +"3642112240","3642112351","NL" +"3642112352","3642112383","BE" +"3642112384","3642112415","NL" +"3642112416","3642112447","BE" +"3642112448","3642112527","NL" +"3642112528","3642112543","BE" +"3642112544","3642112559","NL" +"3642112560","3642112575","BE" +"3642112576","3642112591","NL" +"3642112592","3642112607","BE" +"3642112608","3642112623","NL" +"3642112624","3642112655","BE" +"3642112656","3642112671","NL" +"3642112672","3642112687","BE" +"3642112688","3642112719","NL" +"3642112720","3642112751","BE" +"3642112752","3642112767","NL" +"3642112768","3642112831","BE" +"3642112832","3642113023","NL" +"3642113024","3642113215","BE" +"3642113216","3642113279","NL" +"3642113280","3642113311","BE" +"3642113312","3642113791","NL" +"3642113792","3642113823","BE" +"3642113824","3642113855","NL" +"3642113856","3642113919","BE" +"3642113920","3642114591","NL" +"3642114592","3642114815","NO" +"3642114816","3642114831","NL" +"3642114832","3642115095","NO" +"3642115096","3642115103","NL" +"3642115104","3642116095","NO" +"3642116096","3642117119","NL" +"3642117120","3642117375","NO" +"3642117376","3642117631","NL" +"3642117632","3642117887","NO" +"3642117888","3642118143","NL" +"3642118144","3642122239","GB" +"3642122240","3642126335","ES" +"3642126336","3642130431","IL" +"3642130432","3642134527","DE" +"3642134528","3642138623","GB" +"3642138624","3642142719","RU" +"3642142720","3642146815","MT" +"3642146816","3642150911","DE" +"3642150912","3642163199","IT" +"3642163200","3642164046","NL" +"3642164047","3642164048","AF" +"3642164049","3642167295","NL" +"3642167296","3642171391","RU" +"3642171392","3642175487","JO" +"3642175488","3642179583","DE" +"3642179584","3642187775","RU" +"3642187776","3642190591","DK" +"3642190592","3642190623","NO" +"3642190624","3642191423","DK" +"3642191424","3642191455","ES" +"3642191456","3642191487","TR" +"3642191488","3642191519","CH" +"3642191520","3642191551","CY" +"3642191552","3642191583","ES" +"3642191584","3642191615","US" +"3642191616","3642191647","ZA" +"3642191648","3642191679","AU" +"3642191680","3642191711","TH" +"3642191712","3642191743","BR" +"3642191744","3642191871","DK" +"3642191872","3642195967","BY" +"3642195968","3642204159","RU" +"3642204160","3642208255","GB" +"3642208256","3642212351","RU" +"3642212352","3642216447","BA" +"3642216448","3642220543","HU" +"3642220544","3642224639","GB" +"3642224640","3642228735","SK" +"3642228736","3642232831","DE" +"3642232832","3642236927","RS" +"3642236928","3642241023","CH" +"3642241024","3642245119","DE" +"3642245120","3642249215","LV" +"3642249216","3642253311","FR" +"3642253312","3642257407","FI" +"3642257408","3642261503","RU" +"3642261504","3642265599","BA" +"3642265600","3642265855","AE" +"3642265856","3642269695","IR" +"3642269696","3642273791","UA" +"3642273792","3642277887","RU" +"3642277888","3642290175","DE" +"3642290176","3642294271","AL" +"3642294272","3642298367","GB" +"3642298368","3642302463","AZ" +"3642302464","3642302759","SE" +"3642302760","3642302764","GB" +"3642302765","3642302975","SE" +"3642302976","3642303007","GB" +"3642303008","3642304031","SE" +"3642304032","3642304036","GB" +"3642304037","3642306559","SE" +"3642306560","3642310655","IR" +"3642310656","3642314751","DE" +"3642314752","3642318847","RU" +"3642318848","3642322943","FI" +"3642322944","3642327039","AT" +"3642327040","3642331135","DE" +"3642331136","3642335231","RU" +"3642335232","3642339327","DE" +"3642339328","3642343423","FR" +"3642343424","3642347519","UA" +"3642347520","3642355711","RU" +"3642355712","3642359807","SE" +"3642359808","3642367999","RU" +"3642368000","3642376191","CH" +"3642376192","3642380287","RS" +"3642380288","3642384383","IT" +"3642384384","3642392575","NL" +"3642392576","3642394623","AT" +"3642394624","3642396671","FR" +"3642396672","3642404863","MD" +"3642404864","3642408959","RU" +"3642408960","3642413055","FR" +"3642413056","3642414591","RS" +"3642414592","3642414847","GB" +"3642414848","3642414975","RS" +"3642414976","3642415627","GB" +"3642415628","3642415635","MT" +"3642415636","3642415651","GB" +"3642415652","3642415655","MT" +"3642415656","3642417151","GB" +"3642417152","3642419199","DE" +"3642419200","3642421247","GB" +"3642421248","3642422783","A2" +"3642422784","3642423039","US" +"3642423040","3642425087","A2" +"3642425088","3642425343","US" +"3642425344","3642429439","DE" +"3642429440","3642433535","GB" +"3642433536","3642435583","CY" +"3642435584","3642436607","RU" +"3642436608","3642437119","CY" +"3642437120","3642437631","GB" +"3642437632","3642439423","CY" +"3642439424","3642439459","RU" +"3642439460","3642439463","CY" +"3642439464","3642439471","RU" +"3642439472","3642439483","CY" +"3642439484","3642439495","RU" +"3642439496","3642439551","CY" +"3642439552","3642439567","RU" +"3642439568","3642441727","CY" +"3642441728","3642449919","IT" +"3642449920","3642454015","CH" +"3642454016","3642458111","IT" +"3642458112","3642462207","RU" +"3642462208","3642466303","UA" +"3642466304","3642474495","SE" +"3642474496","3642478591","DE" +"3642478592","3642482687","HU" +"3642482688","3642486783","NL" +"3642486784","3642490879","GB" +"3642490880","3642494975","IM" +"3642494976","3642499071","GB" +"3642499072","3642499715","SE" +"3642499716","3642499716","EU" +"3642499717","3642503167","SE" +"3642503168","3642507263","LV" +"3642507264","3642509311","FR" +"3642509312","3642511359","RU" +"3642511360","3642515455","CZ" +"3642515456","3642519551","DE" +"3642519552","3642523647","IT" +"3642523648","3642527743","GB" +"3642527744","3642531839","PL" +"3642531840","3642532351","DK" +"3642532352","3642532607","GB" +"3642532608","3642532863","US" +"3642532864","3642535935","DK" +"3642535936","3642539869","IS" +"3642539870","3642539870","GB" +"3642539871","3642539971","IS" +"3642539972","3642539975","DK" +"3642539976","3642540031","IS" +"3642540032","3642540063","SE" +"3642540064","3642540079","NO" +"3642540080","3642540135","SE" +"3642540136","3642540143","NO" +"3642540144","3642544127","SE" +"3642544128","3642552319","RU" +"3642552320","3642552639","UA" +"3642552640","3642552655","EE" +"3642552656","3642552663","HU" +"3642552664","3642552665","EE" +"3642552666","3642552671","UA" +"3642552672","3642552687","SE" +"3642552688","3642552831","UA" +"3642552832","3642552847","EE" +"3642552848","3642553087","UA" +"3642553088","3642553101","LV" +"3642553102","3642553107","UA" +"3642553108","3642553161","LV" +"3642553162","3642553163","UA" +"3642553164","3642553165","LV" +"3642553166","3642553167","UA" +"3642553168","3642553175","LV" +"3642553176","3642553183","UA" +"3642553184","3642553223","LV" +"3642553224","3642553247","UA" +"3642553248","3642553285","LV" +"3642553286","3642553289","UA" +"3642553290","3642553295","LV" +"3642553296","3642553311","UA" +"3642553312","3642553343","LV" +"3642553344","3642553363","RU" +"3642553364","3642553367","UA" +"3642553368","3642553371","RU" +"3642553372","3642553379","UA" +"3642553380","3642553383","RU" +"3642553384","3642553407","UA" +"3642553408","3642553411","RU" +"3642553412","3642553415","UA" +"3642553416","3642553423","RU" +"3642553424","3642553431","UA" +"3642553432","3642553463","RU" +"3642553464","3642553471","UA" +"3642553472","3642553519","RU" +"3642553520","3642553523","UA" +"3642553524","3642553535","RU" +"3642553536","3642553547","UA" +"3642553548","3642553567","RU" +"3642553568","3642553571","UA" +"3642553572","3642553575","RU" +"3642553576","3642553579","UA" +"3642553580","3642553589","RU" +"3642553590","3642553591","UA" +"3642553592","3642553599","RU" +"3642553600","3642553855","UA" +"3642553856","3642553925","RU" +"3642553926","3642553935","UA" +"3642553936","3642553959","RU" +"3642553960","3642554111","UA" +"3642554112","3642554119","RU" +"3642554120","3642554127","UA" +"3642554128","3642554159","RU" +"3642554160","3642554187","UA" +"3642554188","3642554193","RU" +"3642554194","3642554195","UA" +"3642554196","3642554199","RU" +"3642554200","3642554205","UA" +"3642554206","3642554207","RU" +"3642554208","3642554367","UA" +"3642554368","3642554375","LT" +"3642554376","3642554379","UA" +"3642554380","3642554387","LT" +"3642554388","3642554391","UA" +"3642554392","3642554399","LT" +"3642554400","3642554415","UA" +"3642554416","3642554447","LT" +"3642554448","3642554463","UA" +"3642554464","3642554591","LT" +"3642554592","3642554631","UA" +"3642554632","3642554671","LV" +"3642554672","3642554675","UA" +"3642554676","3642554719","LV" +"3642554720","3642554751","UA" +"3642554752","3642554795","LV" +"3642554796","3642554807","UA" +"3642554808","3642554811","LV" +"3642554812","3642554815","UA" +"3642554816","3642554831","LV" +"3642554832","3642554851","UA" +"3642554852","3642554879","LV" +"3642554880","3642554911","DE" +"3642554912","3642554919","NL" +"3642554920","3642554931","DE" +"3642554932","3642554959","UA" +"3642554960","3642554963","DE" +"3642554964","3642554971","UA" +"3642554972","3642554975","DE" +"3642554976","3642554977","CZ" +"3642554978","3642554979","FR" +"3642554980","3642554983","BE" +"3642554984","3642554987","UA" +"3642554988","3642554989","FR" +"3642554990","3642554991","UA" +"3642554992","3642555007","DE" +"3642555008","3642555015","UA" +"3642555016","3642555017","NL" +"3642555018","3642555023","DE" +"3642555024","3642555039","NL" +"3642555040","3642555045","DE" +"3642555046","3642555047","UA" +"3642555048","3642555051","DE" +"3642555052","3642555055","UA" +"3642555056","3642555067","DE" +"3642555068","3642555069","NL" +"3642555070","3642555071","DE" +"3642555072","3642555087","GE" +"3642555088","3642555103","DE" +"3642555104","3642555111","CZ" +"3642555112","3642555119","UA" +"3642555120","3642555135","DE" +"3642555136","3642555143","LT" +"3642555144","3642555151","UA" +"3642555152","3642555153","LT" +"3642555154","3642555167","UA" +"3642555168","3642555183","LT" +"3642555184","3642555199","UA" +"3642555200","3642555215","LT" +"3642555216","3642555227","UA" +"3642555228","3642555289","LT" +"3642555290","3642555311","UA" +"3642555312","3642555359","LT" +"3642555360","3642555375","UA" +"3642555376","3642555391","LT" +"3642555392","3642555423","PL" +"3642555424","3642555427","UA" +"3642555428","3642555431","PL" +"3642555432","3642555439","UA" +"3642555440","3642555443","PL" +"3642555444","3642555455","UA" +"3642555456","3642555471","PL" +"3642555472","3642555479","UA" +"3642555480","3642555505","PL" +"3642555506","3642555519","UA" +"3642555520","3642555567","PL" +"3642555568","3642555647","UA" +"3642555648","3642555683","SE" +"3642555684","3642555685","GB" +"3642555686","3642555691","UA" +"3642555692","3642555695","SE" +"3642555696","3642555703","UA" +"3642555704","3642555705","FI" +"3642555706","3642555707","UA" +"3642555708","3642555711","SE" +"3642555712","3642555727","RU" +"3642555728","3642555735","SE" +"3642555736","3642555743","GB" +"3642555744","3642555759","SE" +"3642555760","3642555771","UA" +"3642555772","3642555775","SE" +"3642555776","3642555783","UA" +"3642555784","3642555787","GB" +"3642555788","3642555789","UA" +"3642555790","3642555791","SE" +"3642555792","3642555795","CZ" +"3642555796","3642555807","UA" +"3642555808","3642555827","SE" +"3642555828","3642556159","UA" +"3642556160","3642556415","LV" +"3642556416","3642560511","CZ" +"3642560512","3642564607","KG" +"3642564608","3642568703","DE" +"3642568704","3642572799","RU" +"3642572800","3642576895","IT" +"3642576896","3642580991","RU" +"3642580992","3642585087","ES" +"3642585088","3642589183","UZ" +"3642589184","3642593279","EG" +"3642593280","3642597375","AT" +"3642597376","3642601471","IT" +"3642601472","3642605567","RU" +"3642605568","3642609663","GB" +"3642613760","3642615583","FI" +"3642615584","3642615615","AX" +"3642615616","3642617855","FI" +"3642617856","3642621951","JO" +"3642621952","3642626047","IT" +"3642626048","3642626303","A2" +"3642626304","3642628607","BE" +"3642628608","3642628863","A2" +"3642628864","3642630143","BE" +"3642630144","3642634239","DK" +"3642634240","3642638335","DE" +"3642638336","3642642431","CZ" +"3642642432","3642646527","DK" +"3642646528","3642650623","MT" +"3642650624","3642654719","GB" +"3642654720","3642662911","PL" +"3642662912","3642667007","UZ" +"3642667008","3642671103","FI" +"3642671104","3642675199","UA" +"3642675200","3642679295","BG" +"3642679296","3642683391","DE" +"3642683392","3642687487","RU" +"3642687488","3642691071","GB" +"3642691072","3642691327","LU" +"3642691328","3642691583","GB" +"3642691584","3642695679","DE" +"3642695680","3642699775","SK" +"3642699776","3642703871","CZ" +"3642703872","3642707967","LU" +"3642707968","3642712063","DE" +"3642712064","3642716159","NO" +"3642716160","3642720255","IT" +"3642720256","3642728447","GB" +"3642728448","3642736639","SE" +"3642736640","3642740735","CZ" +"3642740736","3642744831","DE" +"3642744832","3642753023","TR" +"3642753024","3642830671","GB" +"3642830672","3642830687","A2" +"3642830688","3643801599","GB" +"3643801600","3644063743","DE" +"3644063744","3644325887","EG" +"3644325888","3644588031","IT" +"3644588032","3644719103","DK" +"3644719104","3644809215","NL" +"3644809216","3644817407","AM" +"3644817408","3644850175","NL" +"3644850176","3644854271","CZ" +"3644854272","3644858367","AZ" +"3644858368","3644862463","FI" +"3644862464","3644866559","FR" +"3644866560","3644871167","DE" +"3644871168","3644871423","AT" +"3644871424","3644874751","DE" +"3644874752","3644878847","ML" +"3644878848","3644882943","GB" +"3644882944","3644887039","RU" +"3644887040","3644891135","IR" +"3644891136","3644895231","DE" +"3644895232","3644899327","FI" +"3644899328","3644903423","IT" +"3644903424","3644907519","TR" +"3644907520","3644908983","GB" +"3644908984","3644908991","US" +"3644908992","3644909855","GB" +"3644909856","3644909859","IS" +"3644909860","3644911615","GB" +"3644911616","3644915711","BE" +"3644915712","3644919807","RU" +"3644919808","3644923903","DE" +"3644923904","3644924159","IL" +"3644924160","3644924671","GB" +"3644924672","3644924927","IL" +"3644924928","3644925183","US" +"3644925184","3644925439","IL" +"3644925440","3644925695","GB" +"3644925696","3644925951","IL" +"3644925952","3644927231","US" +"3644927232","3644927743","IL" +"3644927744","3644927999","US" +"3644928000","3644932095","GI" +"3644932096","3644936191","IT" +"3644936192","3644940287","RU" +"3644940288","3644948479","HU" +"3644948480","3644952575","DE" +"3644952576","3644960767","GB" +"3644960768","3644961311","DE" +"3644961312","3644961343","TR" +"3644961344","3644961791","DE" +"3644961792","3644964351","TR" +"3644964352","3644964383","DE" +"3644964384","3644964863","TR" +"3644964864","3644968959","RS" +"3644968960","3644973055","RU" +"3644973056","3644977151","NO" +"3644977152","3644981247","UA" +"3644981248","3644985343","BE" +"3644985344","3644989439","RU" +"3644989440","3644997631","DE" +"3644997632","3645005823","RU" +"3645005824","3645009919","UA" +"3645009920","3645014015","FR" +"3645014016","3645018111","DE" +"3645018112","3645022207","RU" +"3645022208","3645023743","CZ" +"3645023744","3645023999","SK" +"3645024000","3645030143","CZ" +"3645030144","3645030399","SK" +"3645030400","3645038591","IR" +"3645038592","3645046783","PS" +"3645046784","3645050879","RU" +"3645050880","3645054975","SK" +"3645054976","3645059071","DE" +"3645059072","3645063167","GB" +"3645063168","3645067263","UA" +"3645067264","3645071359","SE" +"3645071360","3645075455","DE" +"3645075456","3645079551","RU" +"3645079552","3645083647","IE" +"3645083648","3645087743","FR" +"3645087744","3645091839","ES" +"3645091840","3645095935","RU" +"3645095936","3645104127","PL" +"3645104128","3645112319","NL" +"3645112320","3645113735","DE" +"3645113736","3645113743","MK" +"3645113744","3645114079","DE" +"3645114080","3645114095","IL" +"3645114096","3645116415","DE" +"3645116416","3645120511","GB" +"3645120512","3645124607","SE" +"3645124608","3645128703","NL" +"3645128704","3645132799","GB" +"3645132800","3645136895","HR" +"3645136896","3645145087","NO" +"3645145088","3645149183","GB" +"3645149184","3645149487","DE" +"3645149488","3645149495","GB" +"3645149496","3645150615","DE" +"3645150616","3645150639","US" +"3645150640","3645150975","DE" +"3645150976","3645151231","US" +"3645151232","3645161471","DE" +"3645161472","3645161983","AT" +"3645161984","3645162495","US" +"3645162496","3645163007","AT" +"3645163008","3645163263","US" +"3645163264","3645165567","AT" +"3645165568","3645169663","TR" +"3645169664","3645173759","CH" +"3645173760","3645177855","GB" +"3645177856","3645181951","GR" +"3645181952","3645182703","FR" +"3645182704","3645182719","GB" +"3645182720","3645182783","FR" +"3645182784","3645182847","GB" +"3645182848","3645183327","FR" +"3645183328","3645183359","GB" +"3645183360","3645183375","FR" +"3645183376","3645183383","SA" +"3645183384","3645183439","FR" +"3645183440","3645183455","US" +"3645183456","3645183615","FR" +"3645183616","3645183679","SA" +"3645183680","3645183743","FR" +"3645183744","3645183871","GB" +"3645183872","3645183895","FR" +"3645183896","3645183899","GB" +"3645183900","3645183903","FR" +"3645183904","3645183935","IE" +"3645183936","3645184255","FR" +"3645184256","3645184447","GB" +"3645184448","3645184471","FR" +"3645184472","3645184511","GB" +"3645184512","3645184863","FR" +"3645184864","3645184895","GB" +"3645184896","3645185663","FR" +"3645185664","3645185775","GB" +"3645185776","3645186047","FR" +"3645186048","3645190143","GB" +"3645190144","3645194239","FI" +"3645194240","3645202431","DE" +"3645202432","3645206527","CZ" +"3645206528","3645208575","LV" +"3645208576","3645210623","LT" +"3645210624","3645214719","RU" +"3645214720","3645218815","NL" +"3645218816","3645222911","DE" +"3645222912","3645227007","KW" +"3645227008","3645235199","RU" +"3645235200","3645243391","DE" +"3645243392","3645247487","ES" +"3645247488","3645251583","RU" +"3645251584","3645255679","SE" +"3645255680","3645259775","PL" +"3645259776","3645263871","PT" +"3645263872","3645267967","FR" +"3645267968","3645276159","RU" +"3645276160","3645278423","DE" +"3645278424","3645278431","PT" +"3645278432","3645280255","DE" +"3645280256","3645281279","IT" +"3645281280","3645281535","DE" +"3645281536","3645281791","IT" +"3645281792","3645281919","HU" +"3645281920","3645284351","IT" +"3645284352","3645288447","DE" +"3645288448","3645292543","FR" +"3645292544","3645295103","DE" +"3645295104","3645295359","NL" +"3645295360","3645296639","DE" +"3645296640","3645297407","NL" +"3645297408","3645297663","EU" +"3645297664","3645300735","NL" +"3645300736","3645304831","BE" +"3645304832","3645308927","ES" +"3645308928","3645313023","DK" +"3645313024","3645317119","ES" +"3645317120","3645321215","EE" +"3645321216","3645325311","BA" +"3645325312","3645329407","IT" +"3645329408","3645333503","CH" +"3645333504","3645334039","DE" +"3645334040","3645334271","EU" +"3645334272","3645336927","DE" +"3645336928","3645336935","EU" +"3645336936","3645336991","DE" +"3645336992","3645337007","EU" +"3645337008","3645337023","DE" +"3645337024","3645337087","EU" +"3645337088","3645337599","DE" +"3645337600","3645337631","FR" +"3645337632","3645337663","BE" +"3645337664","3645339295","FR" +"3645339296","3645339359","BE" +"3645339360","3645339903","FR" +"3645339904","3645339967","BE" +"3645339968","3645340415","FR" +"3645340416","3645340447","NL" +"3645340448","3645340543","FR" +"3645340544","3645340927","BE" +"3645340928","3645341183","FR" +"3645341184","3645341439","BE" +"3645341440","3645341695","FR" +"3645341696","3645345791","RU" +"3645345792","3645349887","FI" +"3645349888","3645353983","RU" +"3645353984","3645358079","MT" +"3645358080","3645362175","ES" +"3645362176","3645364223","FR" +"3645364224","3645366271","DE" +"3645366272","3645370367","RU" +"3645370368","3645374463","CH" +"3645374464","3645378559","RU" +"3645378560","3645382655","SE" +"3645382656","3645386751","IT" +"3645386752","3645390847","SE" +"3645390848","3645399039","SI" +"3645399040","3645403135","IT" +"3645403136","3645407231","GB" +"3645407232","3645408255","DE" +"3645408256","3645408319","CH" +"3645408320","3645411327","DE" +"3645411328","3645415423","RU" +"3645415424","3645423615","GB" +"3645423616","3645431807","DE" +"3645431808","3645435903","BE" +"3645435904","3645439999","GB" +"3645440000","3645444095","SE" +"3645444096","3645448191","SK" +"3645448192","3645454335","DE" +"3645454336","3645455359","RU" +"3645455360","3645455615","DE" +"3645455616","3645456383","RU" +"3645456384","3645460479","GB" +"3645460480","3645464575","UA" +"3645464576","3645468671","SE" +"3645468672","3645472767","RU" +"3645472768","3645476863","AL" +"3645476864","3645480959","DE" +"3645480960","3645485055","RO" +"3645485056","3645489151","PL" +"3645489152","3645493247","RU" +"3645493248","3645501439","IT" +"3645501440","3645505535","PL" +"3645505536","3645506559","DE" +"3645506560","3645506815","AT" +"3645506816","3645507583","DE" +"3645507584","3645507587","AT" +"3645507588","3645507591","DE" +"3645507592","3645507595","AT" +"3645507596","3645507599","DE" +"3645507600","3645507607","AT" +"3645507608","3645509631","DE" +"3645509632","3645511679","NL" +"3645511680","3645513727","TR" +"3645513728","3645517823","RU" +"3645517824","3645521919","IE" +"3645521920","3645526015","PL" +"3645526016","3645530111","SE" +"3645530112","3645534207","FR" +"3645534208","3645538303","RU" +"3645538304","3645546495","DK" +"3645546496","3645550591","RU" +"3645550592","3645558783","DE" +"3645558784","3645562879","DK" +"3645562880","3645563135","ZW" +"3645563136","3645564671","LS" +"3645564672","3645564927","ZW" +"3645564928","3645565055","SO" +"3645565056","3645565183","GB" +"3645565184","3645565439","ZW" +"3645565440","3645565695","GB" +"3645565696","3645566975","ZW" +"3645566976","3645571071","RU" +"3645571072","3645575167","IE" +"3645575168","3645579263","CH" +"3645579264","3645583359","NL" +"3645583360","3645587455","PL" +"3645587456","3645594711","SK" +"3645594712","3645594719","SR" +"3645594720","3645594743","SK" +"3645594744","3645594751","SR" +"3645594752","3645594799","SK" +"3645594800","3645594815","SR" +"3645594816","3645594863","SK" +"3645594864","3645594871","SR" +"3645594872","3645595647","SK" +"3645595648","3645597751","SE" +"3645597752","3645597759","GB" +"3645597760","3645601471","SE" +"3645601472","3645601487","NO" +"3645601488","3645601503","SE" +"3645601504","3645601507","GB" +"3645601508","3645601759","SE" +"3645601760","3645601775","FR" +"3645601776","3645601779","GB" +"3645601780","3645601783","US" +"3645601784","3645601799","SE" +"3645601800","3645601803","GB" +"3645601804","3645603839","SE" +"3645603840","3645612031","BG" +"3645612032","3645616127","GB" +"3645616128","3645620223","AT" +"3645620224","3645624319","BA" +"3645624320","3645628415","CZ" +"3645628416","3645636607","ES" +"3645636608","3645640703","AM" +"3645640704","3645644799","NL" +"3645644800","3645648895","RU" +"3645648896","3645652991","SE" +"3645652992","3645657087","KZ" +"3645657088","3645661183","SE" +"3645661184","3645665279","DE" +"3645665280","3645669375","PL" +"3645669376","3645669631","ES" +"3645669632","3645669855","FR" +"3645669856","3645670399","ES" +"3645670400","3645670527","FR" +"3645670528","3645670655","ES" +"3645670656","3645670911","FR" +"3645670912","3645673471","ES" +"3645673472","3645673535","FR" +"3645673536","3645675263","ES" +"3645675264","3645675519","PT" +"3645675520","3645675759","ES" +"3645675760","3645675775","FR" +"3645675776","3645676015","ES" +"3645676016","3645676031","FR" +"3645676032","3645677567","ES" +"3645677568","3645681663","AT" +"3645681664","3645685759","RU" +"3645685760","3645689855","UA" +"3645689856","3645693951","IT" +"3645693952","3645698047","BE" +"3645698048","3645702143","ES" +"3645702144","3645706239","GB" +"3645706240","3645710335","LT" +"3645710336","3645714431","NO" +"3645714432","3645718527","RU" +"3645718528","3645722623","GA" +"3645722624","3645726719","IT" +"3645726720","3645734911","RU" +"3645734912","3645743103","NL" +"3645743104","3645747199","CZ" +"3645747200","3645751295","GB" +"3645751296","3645755391","FI" +"3645755392","3645759487","UA" +"3645759488","3645763583","FR" +"3645763584","3645763585","DE" +"3645763586","3645763587","IT" +"3645763588","3645763588","DE" +"3645763589","3645763589","IE" +"3645763590","3645763590","ES" +"3645763591","3645763591","BE" +"3645763592","3645763593","DE" +"3645763594","3645763594","CH" +"3645763595","3645763595","IT" +"3645763596","3645763597","DE" +"3645763598","3645763598","NL" +"3645763599","3645763600","DE" +"3645763601","3645763601","GR" +"3645763602","3645763603","FR" +"3645763604","3645763609","DE" +"3645763610","3645763610","PL" +"3645763611","3645763612","DE" +"3645763613","3645763613","HU" +"3645763614","3645763614","CH" +"3645763615","3645763615","ES" +"3645763616","3645763616","FR" +"3645763617","3645763617","DE" +"3645763618","3645763618","ES" +"3645763619","3645763619","DE" +"3645763620","3645763620","FR" +"3645763621","3645763621","CH" +"3645763622","3645763622","GB" +"3645763623","3645763623","FR" +"3645763624","3645763624","DE" +"3645763625","3645763625","FR" +"3645763626","3645763626","NL" +"3645763627","3645763627","AT" +"3645763628","3645763629","DE" +"3645763630","3645763631","NL" +"3645763632","3645763633","GB" +"3645763634","3645763634","NL" +"3645763635","3645763635","DE" +"3645763636","3645763636","AT" +"3645763637","3645763637","FR" +"3645763638","3645763638","NL" +"3645763639","3645763639","DE" +"3645763640","3645763640","HU" +"3645763641","3645763641","IT" +"3645763642","3645763642","GB" +"3645763643","3645763645","DE" +"3645763646","3645763647","ES" +"3645763648","3645763648","DE" +"3645763649","3645763649","IL" +"3645763650","3645763650","DE" +"3645763651","3645763651","NL" +"3645763652","3645763653","DE" +"3645763654","3645763654","ES" +"3645763655","3645763660","DE" +"3645763661","3645763662","FR" +"3645763663","3645763663","HU" +"3645763664","3645763665","DE" +"3645763666","3645763666","NL" +"3645763667","3645763670","DE" +"3645763671","3645763671","FR" +"3645763672","3645763672","DE" +"3645763673","3645763673","BE" +"3645763674","3645763676","DE" +"3645763677","3645763678","HU" +"3645763679","3645763679","IT" +"3645763680","3645763680","DE" +"3645763681","3645763681","CH" +"3645763682","3645763682","DE" +"3645763683","3645763683","NO" +"3645763684","3645763684","CH" +"3645763685","3645763685","NL" +"3645763686","3645763686","DE" +"3645763687","3645763687","ES" +"3645763688","3645763690","NL" +"3645763691","3645763691","CH" +"3645763692","3645763692","DE" +"3645763693","3645763693","NL" +"3645763694","3645763696","DE" +"3645763697","3645763697","NL" +"3645763698","3645763698","DE" +"3645763699","3645763699","BE" +"3645763700","3645763700","NL" +"3645763701","3645763701","DE" +"3645763702","3645763702","IT" +"3645763703","3645763703","CH" +"3645763704","3645763705","DE" +"3645763706","3645763706","GB" +"3645763707","3645763707","NL" +"3645763708","3645763708","GR" +"3645763709","3645763709","NL" +"3645763710","3645763710","GB" +"3645763711","3645763713","NL" +"3645763714","3645763714","DE" +"3645763715","3645763715","NL" +"3645763716","3645763716","DE" +"3645763717","3645763717","NL" +"3645763718","3645763719","DE" +"3645763720","3645763720","IT" +"3645763721","3645763721","DE" +"3645763722","3645763722","GR" +"3645763723","3645763723","NL" +"3645763724","3645763726","IT" +"3645763727","3645763727","NL" +"3645763728","3645763728","GR" +"3645763729","3645763730","IT" +"3645763731","3645763732","DE" +"3645763733","3645763733","FR" +"3645763734","3645763734","DE" +"3645763735","3645763735","GB" +"3645763736","3645763736","FR" +"3645763737","3645763737","DE" +"3645763738","3645763738","CH" +"3645763739","3645763741","ES" +"3645763742","3645763742","DE" +"3645763743","3645763743","IT" +"3645763744","3645763744","DE" +"3645763745","3645763745","FR" +"3645763746","3645763746","DE" +"3645763747","3645763752","NL" +"3645763753","3645763753","ES" +"3645763754","3645763755","NL" +"3645763756","3645763756","DE" +"3645763757","3645763757","BE" +"3645763758","3645763758","FR" +"3645763759","3645763760","NL" +"3645763761","3645763761","SE" +"3645763762","3645763762","ES" +"3645763763","3645763764","NL" +"3645763765","3645763765","DE" +"3645763766","3645763766","IL" +"3645763767","3645763768","NL" +"3645763769","3645763769","FR" +"3645763770","3645763770","NL" +"3645763771","3645763771","GB" +"3645763772","3645763772","CH" +"3645763773","3645763773","DE" +"3645763774","3645763774","NL" +"3645763775","3645763775","DE" +"3645763776","3645763776","NL" +"3645763777","3645763777","BE" +"3645763778","3645763781","DE" +"3645763782","3645763782","NL" +"3645763783","3645763783","DE" +"3645763784","3645763784","NL" +"3645763785","3645763785","DE" +"3645763786","3645763786","CH" +"3645763787","3645763787","NL" +"3645763788","3645763788","IE" +"3645763789","3645763789","AT" +"3645763790","3645763790","ES" +"3645763791","3645763791","IT" +"3645763792","3645763792","FR" +"3645763793","3645763793","ES" +"3645763794","3645763794","DE" +"3645763795","3645763795","IT" +"3645763796","3645763797","DE" +"3645763798","3645763798","FR" +"3645763799","3645763801","DE" +"3645763802","3645763802","ES" +"3645763803","3645763803","NL" +"3645763804","3645763806","DE" +"3645763807","3645763807","IT" +"3645763808","3645763808","DE" +"3645763809","3645763809","IT" +"3645763810","3645763810","NL" +"3645763811","3645763813","DE" +"3645763814","3645763814","IT" +"3645763815","3645763816","DE" +"3645763817","3645763817","GR" +"3645763818","3645763818","ES" +"3645763819","3645763822","DE" +"3645763823","3645763823","ES" +"3645763824","3645763825","DE" +"3645763826","3645763826","IT" +"3645763827","3645763827","ZA" +"3645763828","3645763841","DE" +"3645763842","3645763842","CH" +"3645763843","3645763845","DE" +"3645763846","3645763846","FR" +"3645763847","3645763847","IT" +"3645763848","3645763849","DE" +"3645763850","3645763850","IT" +"3645763851","3645763851","GB" +"3645763852","3645763852","DE" +"3645763853","3645763853","CH" +"3645763854","3645763854","NL" +"3645763855","3645763858","DE" +"3645763859","3645763859","DK" +"3645763860","3645763860","IT" +"3645763861","3645763861","DE" +"3645763862","3645763862","FR" +"3645763863","3645763864","ES" +"3645763865","3645763865","CH" +"3645763866","3645763866","DE" +"3645763867","3645763868","GB" +"3645763869","3645763869","DE" +"3645763870","3645763870","HU" +"3645763871","3645763874","DE" +"3645763875","3645763875","GB" +"3645763876","3645763876","PL" +"3645763877","3645763877","FR" +"3645763878","3645763879","DE" +"3645763880","3645763881","FR" +"3645763882","3645763882","DE" +"3645763883","3645763883","NL" +"3645763884","3645763884","IT" +"3645763885","3645763886","DE" +"3645763887","3645763887","FR" +"3645763888","3645763888","DE" +"3645763889","3645763889","GR" +"3645763890","3645763890","ES" +"3645763891","3645763894","DE" +"3645763895","3645763895","ES" +"3645763896","3645763896","DE" +"3645763897","3645763897","BE" +"3645763898","3645763898","NL" +"3645763899","3645763899","ES" +"3645763900","3645763900","NL" +"3645763901","3645763902","LU" +"3645763903","3645763903","DE" +"3645763904","3645763904","BE" +"3645763905","3645763905","RS" +"3645763906","3645763906","DE" +"3645763907","3645763908","IT" +"3645763909","3645763909","DE" +"3645763910","3645763910","ES" +"3645763911","3645763911","DE" +"3645763912","3645763912","IE" +"3645763913","3645763913","PT" +"3645763914","3645763914","DE" +"3645763915","3645763915","IL" +"3645763916","3645763916","BE" +"3645763917","3645763917","DE" +"3645763918","3645763918","IT" +"3645763919","3645763919","GB" +"3645763920","3645763920","DE" +"3645763921","3645763921","CH" +"3645763922","3645763922","ES" +"3645763923","3645763923","GB" +"3645763924","3645763924","PL" +"3645763925","3645763926","DE" +"3645763927","3645763927","HU" +"3645763928","3645763928","FR" +"3645763929","3645763929","NL" +"3645763930","3645763930","ES" +"3645763931","3645763931","FR" +"3645763932","3645763932","DE" +"3645763933","3645763933","FR" +"3645763934","3645763934","IT" +"3645763935","3645763935","FR" +"3645763936","3645763936","DE" +"3645763937","3645763937","FR" +"3645763938","3645763938","DE" +"3645763939","3645763939","NL" +"3645763940","3645763941","DE" +"3645763942","3645763942","CH" +"3645763943","3645763943","ES" +"3645763944","3645763944","CH" +"3645763945","3645763945","DE" +"3645763946","3645763947","HU" +"3645763948","3645763949","DE" +"3645763950","3645763950","ES" +"3645763951","3645763951","CH" +"3645763952","3645763952","IT" +"3645763953","3645763953","TR" +"3645763954","3645763954","IT" +"3645763955","3645763955","FR" +"3645763956","3645763956","DE" +"3645763957","3645763957","GB" +"3645763958","3645763958","AT" +"3645763959","3645763959","DE" +"3645763960","3645763960","IT" +"3645763961","3645763961","DE" +"3645763962","3645763962","ES" +"3645763963","3645763964","DE" +"3645763965","3645763965","AT" +"3645763966","3645763966","DE" +"3645763967","3645763967","IT" +"3645763968","3645763968","DE" +"3645763969","3645763969","ES" +"3645763970","3645763970","IT" +"3645763971","3645763971","ES" +"3645763972","3645763972","IT" +"3645763973","3645763973","BE" +"3645763974","3645763974","GB" +"3645763975","3645763975","AT" +"3645763976","3645763976","IT" +"3645763977","3645763977","DE" +"3645763978","3645763978","NL" +"3645763979","3645763979","IT" +"3645763980","3645763981","DE" +"3645763982","3645763982","IT" +"3645763983","3645763984","FR" +"3645763985","3645763985","NL" +"3645763986","3645763986","DE" +"3645763987","3645763987","PL" +"3645763988","3645763988","CH" +"3645763989","3645763989","FR" +"3645763990","3645763991","DE" +"3645763992","3645763992","NL" +"3645763993","3645763993","DE" +"3645763994","3645763994","IT" +"3645763995","3645763995","ES" +"3645763996","3645764000","DE" +"3645764001","3645764001","IT" +"3645764002","3645764007","DE" +"3645764008","3645764008","PL" +"3645764009","3645764010","FR" +"3645764011","3645764012","DE" +"3645764013","3645764013","HU" +"3645764014","3645764015","GB" +"3645764016","3645764016","IT" +"3645764017","3645764017","GB" +"3645764018","3645764018","DE" +"3645764019","3645764019","NL" +"3645764020","3645764020","IT" +"3645764021","3645764021","DE" +"3645764022","3645764022","ES" +"3645764023","3645764023","FR" +"3645764024","3645764026","ES" +"3645764027","3645764028","DE" +"3645764029","3645764029","ES" +"3645764030","3645764030","DE" +"3645764031","3645764031","NL" +"3645764032","3645764032","FR" +"3645764033","3645764034","DE" +"3645764035","3645764035","IT" +"3645764036","3645764037","ES" +"3645764038","3645764038","IT" +"3645764039","3645764039","HU" +"3645764040","3645764040","ES" +"3645764041","3645764041","DE" +"3645764042","3645764042","CH" +"3645764043","3645764043","DE" +"3645764044","3645764044","ES" +"3645764045","3645764045","AE" +"3645764046","3645764046","ES" +"3645764047","3645764048","DE" +"3645764049","3645764049","ES" +"3645764050","3645764051","DE" +"3645764052","3645764052","FR" +"3645764053","3645764055","DE" +"3645764056","3645764056","BE" +"3645764057","3645764057","DE" +"3645764058","3645764058","TR" +"3645764059","3645764059","DE" +"3645764060","3645764060","FR" +"3645764061","3645764061","IT" +"3645764062","3645764062","SE" +"3645764063","3645764063","AT" +"3645764064","3645764064","SI" +"3645764065","3645764065","DE" +"3645764066","3645764066","IT" +"3645764067","3645764067","DE" +"3645764068","3645764068","IT" +"3645764069","3645764069","CH" +"3645764070","3645764070","GB" +"3645764071","3645764074","DE" +"3645764075","3645764075","SE" +"3645764076","3645764076","GR" +"3645764077","3645764078","DE" +"3645764079","3645764079","ES" +"3645764080","3645764080","DE" +"3645764081","3645764081","GB" +"3645764082","3645764084","DE" +"3645764085","3645764085","IE" +"3645764086","3645764086","IT" +"3645764087","3645764087","CH" +"3645764088","3645764091","DE" +"3645764092","3645764092","FR" +"3645764093","3645764097","DE" +"3645764098","3645764098","IT" +"3645764099","3645764099","DE" +"3645764100","3645764100","BE" +"3645764101","3645764102","DE" +"3645764103","3645764103","SK" +"3645764104","3645764105","IT" +"3645764106","3645764106","NL" +"3645764107","3645764107","GR" +"3645764108","3645764108","PL" +"3645764109","3645764109","CH" +"3645764110","3645764110","DK" +"3645764111","3645764111","DE" +"3645764112","3645764112","IT" +"3645764113","3645764113","ES" +"3645764114","3645764114","DE" +"3645764115","3645764115","GB" +"3645764116","3645764116","GR" +"3645764117","3645764117","DE" +"3645764118","3645764118","GB" +"3645764119","3645764119","CH" +"3645764120","3645764120","FR" +"3645764121","3645764121","IT" +"3645764122","3645764122","DE" +"3645764123","3645764123","PL" +"3645764124","3645764124","DE" +"3645764125","3645764125","NO" +"3645764126","3645764126","LU" +"3645764127","3645764127","GB" +"3645764128","3645764128","GR" +"3645764129","3645764129","HR" +"3645764130","3645764130","FR" +"3645764131","3645764131","DE" +"3645764132","3645764132","ES" +"3645764133","3645764133","CY" +"3645764134","3645764134","DE" +"3645764135","3645764135","IT" +"3645764136","3645764136","BE" +"3645764137","3645764137","DE" +"3645764138","3645764138","CH" +"3645764139","3645764140","DE" +"3645764141","3645764141","ES" +"3645764142","3645764142","HU" +"3645764143","3645764145","DE" +"3645764146","3645764147","NL" +"3645764148","3645764148","DK" +"3645764149","3645764149","DE" +"3645764150","3645764150","ES" +"3645764151","3645764154","DE" +"3645764155","3645764155","ES" +"3645764156","3645764156","AT" +"3645764157","3645764158","DE" +"3645764159","3645764159","IT" +"3645764160","3645764160","BE" +"3645764161","3645764161","ES" +"3645764162","3645764162","DE" +"3645764163","3645764163","NL" +"3645764164","3645764164","DE" +"3645764165","3645764165","CH" +"3645764166","3645764166","HU" +"3645764167","3645764167","DE" +"3645764168","3645764168","ES" +"3645764169","3645764169","GR" +"3645764170","3645764170","IT" +"3645764171","3645764172","DE" +"3645764173","3645764173","IT" +"3645764174","3645764174","DE" +"3645764175","3645764175","PL" +"3645764176","3645764176","DE" +"3645764177","3645764177","GB" +"3645764178","3645764178","ES" +"3645764179","3645764179","GR" +"3645764180","3645764181","DE" +"3645764182","3645764182","FR" +"3645764183","3645764184","DE" +"3645764185","3645764185","IT" +"3645764186","3645764186","FR" +"3645764187","3645764187","BE" +"3645764188","3645764188","GB" +"3645764189","3645764189","FR" +"3645764190","3645764190","IT" +"3645764191","3645764191","GB" +"3645764192","3645764193","DE" +"3645764194","3645764194","ES" +"3645764195","3645764195","DE" +"3645764196","3645764196","IT" +"3645764197","3645764197","DE" +"3645764198","3645764198","GR" +"3645764199","3645764199","DE" +"3645764200","3645764200","IT" +"3645764201","3645764201","BE" +"3645764202","3645764202","IT" +"3645764203","3645764203","DE" +"3645764204","3645764204","ES" +"3645764205","3645764205","FR" +"3645764206","3645764206","DE" +"3645764207","3645764207","IT" +"3645764208","3645764208","NO" +"3645764209","3645764210","DE" +"3645764211","3645764211","FR" +"3645764212","3645764212","NL" +"3645764213","3645764213","GB" +"3645764214","3645764214","NL" +"3645764215","3645764216","DE" +"3645764217","3645764217","IT" +"3645764218","3645764218","CH" +"3645764219","3645764219","FR" +"3645764220","3645764220","NL" +"3645764221","3645764221","IT" +"3645764222","3645764222","BE" +"3645764223","3645764223","DE" +"3645764224","3645764224","ES" +"3645764225","3645764225","GB" +"3645764226","3645764226","DE" +"3645764227","3645764227","CH" +"3645764228","3645764228","FR" +"3645764229","3645764229","PL" +"3645764230","3645764230","NL" +"3645764231","3645764231","CH" +"3645764232","3645764234","DE" +"3645764235","3645764235","FR" +"3645764236","3645764236","IT" +"3645764237","3645764238","DE" +"3645764239","3645764240","ES" +"3645764241","3645764241","DE" +"3645764242","3645764242","AT" +"3645764243","3645764243","GR" +"3645764244","3645764244","FR" +"3645764245","3645764246","NL" +"3645764247","3645764247","IT" +"3645764248","3645764250","DE" +"3645764251","3645764251","FR" +"3645764252","3645764253","ES" +"3645764254","3645764254","DE" +"3645764255","3645764255","CH" +"3645764256","3645764257","DE" +"3645764258","3645764258","NL" +"3645764259","3645764259","IT" +"3645764260","3645764260","DE" +"3645764261","3645764261","GB" +"3645764262","3645764262","BE" +"3645764263","3645764264","IT" +"3645764265","3645764265","TR" +"3645764266","3645764269","DE" +"3645764270","3645764270","ES" +"3645764271","3645764271","IT" +"3645764272","3645764272","DE" +"3645764273","3645764273","IT" +"3645764274","3645764274","DE" +"3645764275","3645764275","FR" +"3645764276","3645764277","DE" +"3645764278","3645764278","NL" +"3645764279","3645764279","ES" +"3645764280","3645764280","IT" +"3645764281","3645764281","DE" +"3645764282","3645764282","NL" +"3645764283","3645764284","FR" +"3645764285","3645764285","IT" +"3645764286","3645764286","NL" +"3645764287","3645764287","BE" +"3645764288","3645764288","FR" +"3645764289","3645764289","NL" +"3645764290","3645764290","DE" +"3645764291","3645764291","NL" +"3645764292","3645764292","FR" +"3645764293","3645764294","IT" +"3645764295","3645764295","ES" +"3645764296","3645764297","DE" +"3645764298","3645764298","GR" +"3645764299","3645764299","NL" +"3645764300","3645764300","PL" +"3645764301","3645764301","GR" +"3645764302","3645764302","IT" +"3645764303","3645764303","DE" +"3645764304","3645764304","ES" +"3645764305","3645764305","GB" +"3645764306","3645764306","BM" +"3645764307","3645764307","NL" +"3645764308","3645764309","DE" +"3645764310","3645764310","ZA" +"3645764311","3645764313","ES" +"3645764314","3645764315","DE" +"3645764316","3645764316","IT" +"3645764317","3645764317","ES" +"3645764318","3645764318","HU" +"3645764319","3645764319","FR" +"3645764320","3645764320","IT" +"3645764321","3645764321","DE" +"3645764322","3645764322","CH" +"3645764323","3645764323","DE" +"3645764324","3645764324","FR" +"3645764325","3645764325","DE" +"3645764326","3645764326","ES" +"3645764327","3645764327","DK" +"3645764328","3645764328","CH" +"3645764329","3645764329","ES" +"3645764330","3645764330","DE" +"3645764331","3645764331","RU" +"3645764332","3645764332","NL" +"3645764333","3645764333","GR" +"3645764334","3645764334","ES" +"3645764335","3645764335","DE" +"3645764336","3645764336","MY" +"3645764337","3645764337","HU" +"3645764338","3645764338","NL" +"3645764339","3645764340","DE" +"3645764341","3645764341","IE" +"3645764342","3645764342","IT" +"3645764343","3645764343","ES" +"3645764344","3645764345","DE" +"3645764346","3645764346","IT" +"3645764347","3645764347","IE" +"3645764348","3645764348","NL" +"3645764349","3645764349","BE" +"3645764350","3645764350","IT" +"3645764351","3645764356","DE" +"3645764357","3645764357","RU" +"3645764358","3645764358","FR" +"3645764359","3645764359","IT" +"3645764360","3645764360","DE" +"3645764361","3645764361","CH" +"3645764362","3645764362","GB" +"3645764363","3645764364","NL" +"3645764365","3645764365","BE" +"3645764366","3645764367","DE" +"3645764368","3645764368","IT" +"3645764369","3645764369","DE" +"3645764370","3645764370","GB" +"3645764371","3645764371","ES" +"3645764372","3645764373","FR" +"3645764374","3645764375","DE" +"3645764376","3645764377","NL" +"3645764378","3645764378","DE" +"3645764379","3645764380","GB" +"3645764381","3645764381","DE" +"3645764382","3645764382","NL" +"3645764383","3645764383","FR" +"3645764384","3645764384","AT" +"3645764385","3645764388","DE" +"3645764389","3645764389","NL" +"3645764390","3645764390","DE" +"3645764391","3645764391","NL" +"3645764392","3645764392","GR" +"3645764393","3645764393","DE" +"3645764394","3645764394","FR" +"3645764395","3645764396","NL" +"3645764397","3645764397","DE" +"3645764398","3645764398","NL" +"3645764399","3645764399","DE" +"3645764400","3645764401","NL" +"3645764402","3645764403","FR" +"3645764404","3645764406","NL" +"3645764407","3645764408","DE" +"3645764409","3645764409","FR" +"3645764410","3645764410","DE" +"3645764411","3645764411","FR" +"3645764412","3645764412","NL" +"3645764413","3645764413","FR" +"3645764414","3645764417","NL" +"3645764418","3645764418","DE" +"3645764419","3645764419","NL" +"3645764420","3645764420","GB" +"3645764421","3645764421","DE" +"3645764422","3645764422","IT" +"3645764423","3645764423","HU" +"3645764424","3645764424","DE" +"3645764425","3645764425","GB" +"3645764426","3645764433","DE" +"3645764434","3645764434","NL" +"3645764435","3645764435","AT" +"3645764436","3645764436","NL" +"3645764437","3645764437","FR" +"3645764438","3645764439","DE" +"3645764440","3645764440","CH" +"3645764441","3645764441","DE" +"3645764442","3645764442","IT" +"3645764443","3645764444","DE" +"3645764445","3645764445","GB" +"3645764446","3645764446","NL" +"3645764447","3645764456","DE" +"3645764457","3645764457","IT" +"3645764458","3645764458","AT" +"3645764459","3645764459","IT" +"3645764460","3645764462","DE" +"3645764463","3645764463","NL" +"3645764464","3645764464","BE" +"3645764465","3645764465","DE" +"3645764466","3645764466","GR" +"3645764467","3645764467","DE" +"3645764468","3645764468","IT" +"3645764469","3645764470","DE" +"3645764471","3645764471","IT" +"3645764472","3645764472","GR" +"3645764473","3645764473","NL" +"3645764474","3645764474","DE" +"3645764475","3645764475","GR" +"3645764476","3645764476","DE" +"3645764477","3645764477","NL" +"3645764478","3645764478","GB" +"3645764479","3645764479","DE" +"3645764480","3645764481","NL" +"3645764482","3645764482","DE" +"3645764483","3645764483","NL" +"3645764484","3645764484","FR" +"3645764485","3645764485","NL" +"3645764486","3645764486","IE" +"3645764487","3645764487","DE" +"3645764488","3645764490","NL" +"3645764491","3645764491","DE" +"3645764492","3645764492","NL" +"3645764493","3645764493","ES" +"3645764494","3645764494","FR" +"3645764495","3645764495","NL" +"3645764496","3645764496","DE" +"3645764497","3645764497","NL" +"3645764498","3645764498","FR" +"3645764499","3645764500","NL" +"3645764501","3645764501","DE" +"3645764502","3645764505","NL" +"3645764506","3645764506","DE" +"3645764507","3645764507","ES" +"3645764508","3645764508","IT" +"3645764509","3645764509","NL" +"3645764510","3645764510","DE" +"3645764511","3645764511","NL" +"3645764512","3645764512","DE" +"3645764513","3645764513","NL" +"3645764514","3645764514","ES" +"3645764515","3645764515","DE" +"3645764516","3645764516","NL" +"3645764517","3645764518","DE" +"3645764519","3645764522","NL" +"3645764523","3645764524","DE" +"3645764525","3645764531","NL" +"3645764532","3645764533","DE" +"3645764534","3645764535","NL" +"3645764536","3645764536","IT" +"3645764537","3645764539","NL" +"3645764540","3645764540","DE" +"3645764541","3645764541","IT" +"3645764542","3645764549","NL" +"3645764550","3645764550","DE" +"3645764551","3645764551","GR" +"3645764552","3645764553","DE" +"3645764554","3645764554","NL" +"3645764555","3645764555","DE" +"3645764556","3645764556","CH" +"3645764557","3645764557","NL" +"3645764558","3645764561","DE" +"3645764562","3645764562","FR" +"3645764563","3645764563","ES" +"3645764564","3645764565","NL" +"3645764566","3645764566","DE" +"3645764567","3645764568","NL" +"3645764569","3645764569","DE" +"3645764570","3645764570","MA" +"3645764571","3645765127","DE" +"3645765128","3645765131","GR" +"3645765132","3645765135","DE" +"3645765136","3645765139","BE" +"3645765140","3645765143","IT" +"3645765144","3645765147","DE" +"3645765148","3645765151","IT" +"3645765152","3645765155","BE" +"3645765156","3645765171","IT" +"3645765172","3645765175","NO" +"3645765176","3645765179","DE" +"3645765180","3645765183","FR" +"3645765184","3645765187","GR" +"3645765188","3645765195","DE" +"3645765196","3645765199","CH" +"3645765200","3645765203","GB" +"3645765204","3645765207","DE" +"3645765208","3645765211","FR" +"3645765212","3645765215","DE" +"3645765216","3645765219","ES" +"3645765220","3645765223","PL" +"3645765224","3645765227","BE" +"3645765228","3645765231","GB" +"3645765232","3645765235","IT" +"3645765236","3645765239","FR" +"3645765240","3645765243","GB" +"3645765244","3645765247","IT" +"3645765248","3645765251","ES" +"3645765252","3645765255","DE" +"3645765256","3645765259","GR" +"3645765260","3645765263","PL" +"3645765264","3645765267","IT" +"3645765268","3645765271","PL" +"3645765272","3645765275","IT" +"3645765276","3645765279","FR" +"3645765280","3645765283","DE" +"3645765284","3645765287","ES" +"3645765288","3645765295","DE" +"3645765296","3645765299","ES" +"3645765300","3645765303","FR" +"3645765304","3645765311","IT" +"3645765312","3645765315","TR" +"3645765316","3645765319","IT" +"3645765320","3645765323","FR" +"3645765324","3645765331","ES" +"3645765332","3645765335","FR" +"3645765336","3645765339","IT" +"3645765340","3645765343","FR" +"3645765344","3645765347","PL" +"3645765348","3645765351","GR" +"3645765352","3645765355","IT" +"3645765356","3645765359","ES" +"3645765360","3645765363","FR" +"3645765364","3645765367","ES" +"3645765368","3645765371","IT" +"3645765372","3645765375","CH" +"3645765376","3645765379","DE" +"3645765380","3645765383","BM" +"3645765384","3645765387","NL" +"3645765388","3645765391","DE" +"3645765392","3645765403","ES" +"3645765404","3645765407","GR" +"3645765408","3645765411","DK" +"3645765412","3645765415","IT" +"3645765416","3645765419","FR" +"3645765420","3645765423","DE" +"3645765424","3645765427","IT" +"3645765428","3645765443","DE" +"3645765444","3645765447","FR" +"3645765448","3645765451","ES" +"3645765452","3645765455","FR" +"3645765456","3645765459","AT" +"3645765460","3645765463","FR" +"3645765464","3645765467","GB" +"3645765468","3645765471","DE" +"3645765472","3645765475","NL" +"3645765476","3645765487","DE" +"3645765488","3645765491","HU" +"3645765492","3645765495","DE" +"3645765496","3645765499","GB" +"3645765500","3645765503","NL" +"3645765504","3645765507","CH" +"3645765508","3645765511","IT" +"3645765512","3645765519","GB" +"3645765520","3645765523","FR" +"3645765524","3645765527","IT" +"3645765528","3645765535","FR" +"3645765536","3645765539","SE" +"3645765540","3645765543","IL" +"3645765544","3645765547","BE" +"3645765548","3645765555","DE" +"3645765556","3645765559","IT" +"3645765560","3645765563","IE" +"3645765564","3645765567","ES" +"3645765568","3645765571","FR" +"3645765572","3645765575","DE" +"3645765576","3645765579","IT" +"3645765580","3645765591","DE" +"3645765592","3645765595","IE" +"3645765596","3645765611","DE" +"3645765612","3645765615","IT" +"3645765616","3645765619","GB" +"3645765620","3645765623","CH" +"3645765624","3645765627","FR" +"3645765628","3645765639","DE" +"3645765640","3645765643","DK" +"3645765644","3645765647","GB" +"3645765648","3645765651","NL" +"3645765652","3645765667","DE" +"3645765668","3645765675","FR" +"3645765676","3645765679","DE" +"3645765680","3645765683","FR" +"3645765684","3645765687","NL" +"3645765688","3645765691","FR" +"3645765692","3645765695","CH" +"3645765696","3645765703","IT" +"3645765704","3645765707","DE" +"3645765708","3645765711","FR" +"3645765712","3645765715","DE" +"3645765716","3645765719","FR" +"3645765720","3645766401","DE" +"3645766402","3645766407","US" +"3645766408","3645767187","DE" +"3645767188","3645767188","US" +"3645767189","3645767193","DE" +"3645767194","3645767194","US" +"3645767195","3645767195","DE" +"3645767196","3645767196","US" +"3645767197","3645767197","DE" +"3645767198","3645767198","US" +"3645767199","3645767208","DE" +"3645767209","3645767209","US" +"3645767210","3645767222","DE" +"3645767223","3645767223","US" +"3645767224","3645767240","DE" +"3645767241","3645767241","US" +"3645767242","3645767426","DE" +"3645767427","3645767427","US" +"3645767428","3645767428","DE" +"3645767429","3645767429","US" +"3645767430","3645767431","DE" +"3645767432","3645767433","US" +"3645767434","3645767434","CA" +"3645767435","3645767448","US" +"3645767449","3645767449","DE" +"3645767450","3645767455","US" +"3645767456","3645767502","DE" +"3645767503","3645767503","US" +"3645767504","3645767679","DE" +"3645767680","3645771775","IE" +"3645771776","3645779967","SE" +"3645779968","3645784063","PS" +"3645788160","3645792255","GB" +"3645792256","3645796351","TR" +"3645796352","3645800447","CH" +"3645800448","3645804543","DE" +"3645804544","3645808639","GB" +"3645808640","3645812735","DE" +"3645812736","3645816831","RU" +"3645816832","3645825023","FI" +"3645825024","3645829119","RU" +"3645829120","3645833215","NL" +"3645833216","3645841407","RU" +"3645841408","3645845503","BG" +"3645845504","3645849599","RU" +"3645849600","3645857791","BG" +"3645857792","3645865983","GB" +"3645865984","3645870079","HU" +"3645870080","3645874175","PL" +"3645874176","3645878271","GB" +"3645878272","3645882367","DE" +"3645882368","3645886463","CH" +"3645886464","3645886991","DE" +"3645886992","3645886995","GB" +"3645886996","3645887067","DE" +"3645887068","3645887071","US" +"3645887072","3645887079","AT" +"3645887080","3645887743","DE" +"3645887744","3645887871","US" +"3645887872","3645888127","DE" +"3645888128","3645888143","AT" +"3645888144","3645888159","DE" +"3645888160","3645888191","AT" +"3645888192","3645888223","SG" +"3645888224","3645888511","DE" +"3645888512","3645888767","EU" +"3645888768","3645889791","DE" +"3645889792","3645889919","US" +"3645889920","3645890559","DE" +"3645890560","3645894655","RU" +"3645894656","3645898751","NL" +"3645898752","3646513103","DE" +"3646513104","3646513111","CA" +"3646513112","3646516223","DE" +"3646516224","3646517247","US" +"3646517248","3646519295","DE" +"3646519296","3646519807","US" +"3646519808","3646947327","DE" +"3646947328","3647209471","PL" +"3647209472","3647602687","NL" +"3647602688","3647658751","RU" +"3647658752","3647659007","GE" +"3647659008","3647665151","RU" +"3647665152","3647665407","GE" +"3647665408","3647722751","RU" +"3647722752","3647722879","BY" +"3647722880","3647733759","RU" +"3647733760","3647814855","FR" +"3647814856","3647814863","A2" +"3647814864","3647864831","FR" +"3647864832","3647876639","DE" +"3647876640","3647876647","BE" +"3647876648","3647878487","DE" +"3647878488","3647878495","BE" +"3647878496","3647889663","DE" +"3647889664","3647889671","BE" +"3647889672","3647890463","DE" +"3647890464","3647890471","FR" +"3647890472","3647890687","DE" +"3647890688","3647890943","EU" +"3647890944","3647912447","DE" +"3647912448","3647912511","BE" +"3647912512","3647916799","DE" +"3647916800","3647917055","SE" +"3647917056","3647917599","DE" +"3647917600","3647917615","US" +"3647917616","3647922959","DE" +"3647922960","3647922975","GB" +"3647922976","3647936871","DE" +"3647936872","3647936879","FR" +"3647936880","3647947263","DE" +"3647947264","3647947519","US" +"3647947520","3647949567","DE" +"3647949568","3647949823","EU" +"3647949824","3647953055","DE" +"3647953056","3647953063","FR" +"3647953064","3647953119","DE" +"3647953120","3647953127","AT" +"3647953128","3647954231","DE" +"3647954232","3647954239","GB" +"3647954240","3647954783","DE" +"3647954784","3647954815","CH" +"3647954816","3647957511","DE" +"3647957512","3647957519","GB" +"3647957520","3647959567","DE" +"3647959568","3647959575","ES" +"3647959576","3647959599","DE" +"3647959600","3647959607","AT" +"3647959608","3647961215","DE" +"3647961216","3647961247","IT" +"3647961248","3647961255","DE" +"3647961256","3647961263","BE" +"3647961264","3647963167","DE" +"3647963168","3647963183","BE" +"3647963184","3647963231","DE" +"3647963232","3647963263","BE" +"3647963264","3647963519","DE" +"3647963520","3647963647","FR" +"3647963648","3647963775","BE" +"3647963776","3647963839","FR" +"3647963840","3647964159","DE" +"3647964160","3647964287","BE" +"3647964288","3647964415","DE" +"3647964416","3647964567","ES" +"3647964568","3647964583","DE" +"3647964584","3647964599","ES" +"3647964600","3647964607","DE" +"3647964608","3647964615","ES" +"3647964616","3647964623","DE" +"3647964624","3647964671","ES" +"3647964672","3647964679","DE" +"3647964680","3647964703","ES" +"3647964704","3647965183","DE" +"3647965184","3647965255","ES" +"3647965256","3647965279","DE" +"3647965280","3647965295","ES" +"3647965296","3647965303","DE" +"3647965304","3647965311","ES" +"3647965312","3647965319","DE" +"3647965320","3647965431","ES" +"3647965432","3647965439","DE" +"3647965440","3647965695","ES" +"3647965696","3647966207","CH" +"3647966208","3647966575","GB" +"3647966576","3647966583","DE" +"3647966584","3647966687","GB" +"3647966688","3647966703","DE" +"3647966704","3647967231","GB" +"3647967232","3647968255","BE" +"3647968256","3647969279","FR" +"3647969280","3647969791","IT" +"3647969792","3647970303","BE" +"3647970304","3647971327","FR" +"3647971328","3647971671","GB" +"3647971672","3647971679","DE" +"3647971680","3647972143","GB" +"3647972144","3647972151","DE" +"3647972152","3647972191","GB" +"3647972192","3647972199","DE" +"3647972200","3647972259","GB" +"3647972260","3647972263","DE" +"3647972264","3647972351","GB" +"3647972352","3647973663","IT" +"3647973664","3647973671","DE" +"3647973672","3647973679","IT" +"3647973680","3647973695","DE" +"3647973696","3647973703","IT" +"3647973704","3647973711","BE" +"3647973712","3647973735","IT" +"3647973736","3647973743","DE" +"3647973744","3647973783","IT" +"3647973784","3647973791","DE" +"3647973792","3647973871","IT" +"3647973872","3647973879","DE" +"3647973880","3647973919","IT" +"3647973920","3647973927","DE" +"3647973928","3647973967","IT" +"3647973968","3647973975","DE" +"3647973976","3647973983","IT" +"3647973984","3647973991","DE" +"3647973992","3647974047","IT" +"3647974048","3647974055","DE" +"3647974056","3647974399","IT" +"3647974400","3647976447","ES" +"3647976448","3647976455","BE" +"3647976456","3647976463","DE" +"3647976464","3647976559","BE" +"3647976560","3647976575","FR" +"3647976576","3647976647","BE" +"3647976648","3647976663","DE" +"3647976664","3647976719","BE" +"3647976720","3647976727","DE" +"3647976728","3647976743","BE" +"3647976744","3647976751","DE" +"3647976752","3647976767","BE" +"3647976768","3647976783","DE" +"3647976784","3647976791","BE" +"3647976792","3647976799","DE" +"3647976800","3647976831","BE" +"3647976832","3647976855","DE" +"3647976856","3647976927","BE" +"3647976928","3647976935","DE" +"3647976936","3647977119","BE" +"3647977120","3647977135","DE" +"3647977136","3647977151","BE" +"3647977152","3647977215","DE" +"3647977216","3647977471","BE" +"3647977472","3647977791","GB" +"3647977792","3647977855","IE" +"3647977856","3647978495","GB" +"3647978496","3647978551","NL" +"3647978552","3647978559","DE" +"3647978560","3647978775","NL" +"3647978776","3647978783","DE" +"3647978784","3647978895","NL" +"3647978896","3647978911","DE" +"3647978912","3647979007","NL" +"3647979008","3647979136","IT" +"3647979137","3647979519","DE" +"3647979520","3647980239","FR" +"3647980240","3647980247","DE" +"3647980248","3647980471","FR" +"3647980472","3647980479","DE" +"3647980480","3647980495","FR" +"3647980496","3647980503","DE" +"3647980504","3647980543","FR" +"3647980544","3647981055","GB" +"3647981056","3647981567","IE" +"3647981568","3647982591","BE" +"3647982592","3647983615","IT" +"3647983616","3647984639","NL" +"3647984640","3647985151","DK" +"3647985152","3647985415","BE" +"3647985416","3647985423","AT" +"3647985424","3647985663","BE" +"3647985664","3647985919","ES" +"3647985920","3647985935","BE" +"3647985936","3647986431","ES" +"3647986432","3647986687","FR" +"3647986688","3647986943","DE" +"3647986944","3647986951","ES" +"3647986952","3647986975","DE" +"3647986976","3647987071","ES" +"3647987072","3647987087","DE" +"3647987088","3647987119","ES" +"3647987120","3647987127","DE" +"3647987128","3647987183","ES" +"3647987184","3647987191","DE" +"3647987192","3647987199","ES" +"3647987200","3647987455","DE" +"3647987456","3647987487","ES" +"3647987488","3647987495","DE" +"3647987496","3647987527","ES" +"3647987528","3647987535","GB" +"3647987536","3647987543","DE" +"3647987544","3647987607","ES" +"3647987608","3647987615","DE" +"3647987616","3647987711","ES" +"3647987712","3647988735","IT" +"3647988736","3647989759","BE" +"3647989760","3647990271","DE" +"3647990272","3647990759","ES" +"3647990760","3647990767","IT" +"3647990768","3647991807","ES" +"3647991808","3647993855","DE" +"3647993856","3647994135","BE" +"3647994136","3647994143","FR" +"3647994144","3647994255","BE" +"3647994256","3647994263","FR" +"3647994264","3647994367","BE" +"3647994368","3647994879","NR" +"3647994880","3647994903","BE" +"3647994904","3647994911","DE" +"3647994912","3647995391","BE" +"3647995392","3647995903","DE" +"3647995904","3648004223","RU" +"3648004224","3648004351","GB" +"3648004352","3648006271","RU" +"3648006272","3648006399","GB" +"3648006400","3648007167","RU" +"3648007168","3648008191","GB" +"3648008192","3648016383","FR" +"3648016384","3648020479","GB" +"3648020480","3648024575","IT" +"3648024576","3648028671","NL" +"3648028672","3648032767","HU" +"3648032768","3648033087","IE" +"3648033088","3648033103","EU" +"3648033104","3648033119","IE" +"3648033120","3648033535","EU" +"3648033536","3648033791","IE" +"3648033792","3648034047","EU" +"3648034048","3648034303","IE" +"3648034304","3648034815","EU" +"3648034816","3648034847","DE" +"3648034848","3648034879","EU" +"3648034880","3648034895","IE" +"3648034896","3648034943","EU" +"3648034944","3648035007","IE" +"3648035008","3648035023","EU" +"3648035024","3648035039","IE" +"3648035040","3648035071","NL" +"3648035072","3648036863","EU" +"3648036864","3648040959","CZ" +"3648040960","3648041024","BE" +"3648041025","3648041028","FR" +"3648041029","3648041047","BE" +"3648041048","3648041055","NL" +"3648041056","3648045055","BE" +"3648045056","3648049151","FI" +"3648049152","3648053247","UA" +"3648053248","3648057343","FR" +"3648057344","3648061439","FI" +"3648061440","3648069631","AM" +"3648069632","3648073727","DE" +"3648073728","3648077823","HU" +"3648077824","3648078079","BE" +"3648078080","3648078335","CG" +"3648078336","3648078463","BE" +"3648078464","3648078495","BF" +"3648078496","3648078527","BE" +"3648078528","3648078591","BF" +"3648078592","3648078847","CG" +"3648078848","3648080383","BE" +"3648080384","3648080511","TZ" +"3648080512","3648080543","BF" +"3648080544","3648080639","TZ" +"3648080640","3648080895","GA" +"3648080896","3648081151","ZM" +"3648081152","3648081407","BE" +"3648081408","3648082175","MW" +"3648082176","3648082239","BE" +"3648082240","3648082311","NE" +"3648082312","3648082431","BE" +"3648082432","3648082479","ZM" +"3648082480","3648084223","BE" +"3648084224","3648084479","CD" +"3648084480","3648084991","BE" +"3648084992","3648085759","GB" +"3648085760","3648086015","ZM" +"3648086016","3648090111","AT" +"3648090112","3648094207","RU" +"3648094208","3648102399","PL" +"3648102400","3648104791","GB" +"3648104792","3648104799","IE" +"3648104800","3648106495","GB" +"3648106496","3648110591","DE" +"3648110592","3648114687","FR" +"3648114688","3648118783","IT" +"3648118784","3648122879","PL" +"3648122880","3648126975","ES" +"3648126976","3648139263","RU" +"3648139264","3648143359","GB" +"3648143360","3648147455","DE" +"3648147456","3648149503","SE" +"3648149504","3648150015","GB" +"3648150016","3648150271","SE" +"3648150272","3648150527","FI" +"3648150528","3648150783","DK" +"3648150784","3648151039","NO" +"3648151040","3648151551","SE" +"3648151552","3648155647","NL" +"3648155648","3648159743","CH" +"3648159744","3648163839","ES" +"3648163840","3648167935","RU" +"3648167936","3648172031","IE" +"3648172032","3648176127","RU" +"3648176128","3648178687","FR" +"3648178688","3648178815","LU" +"3648178816","3648180223","FR" +"3648180224","3648180735","DE" +"3648180736","3648180751","IT" +"3648180752","3648180767","DE" +"3648180768","3648180799","AT" +"3648180800","3648180991","DE" +"3648180992","3648181007","CY" +"3648181008","3648181023","DE" +"3648181024","3648181055","AT" +"3648181056","3648181063","DE" +"3648181064","3648181071","DK" +"3648181072","3648181215","DE" +"3648181216","3648181231","RU" +"3648181232","3648181247","DE" +"3648181248","3648181279","IT" +"3648181280","3648181311","DE" +"3648181312","3648181343","AT" +"3648181344","3648181375","DE" +"3648181376","3648181407","RU" +"3648181408","3648181423","DE" +"3648181424","3648181439","CH" +"3648181440","3648181551","DE" +"3648181552","3648181567","RU" +"3648181568","3648181631","DE" +"3648181632","3648181647","AT" +"3648181648","3648181887","DE" +"3648181888","3648181903","AT" +"3648181904","3648182079","DE" +"3648182080","3648182111","DK" +"3648182112","3648182127","CY" +"3648182128","3648182143","DE" +"3648182144","3648182159","BR" +"3648182160","3648182175","DE" +"3648182176","3648182207","RU" +"3648182208","3648182271","GB" +"3648182272","3648182303","CH" +"3648182304","3648182335","IT" +"3648182336","3648182591","DE" +"3648182592","3648182623","AT" +"3648182624","3648182655","CH" +"3648182656","3648182783","DE" +"3648182784","3648182799","IT" +"3648182800","3648182815","DE" +"3648182816","3648182823","US" +"3648182824","3648182831","RU" +"3648182832","3648182847","DE" +"3648182848","3648182879","AT" +"3648182880","3648183551","DE" +"3648183552","3648183679","BR" +"3648183680","3648183807","DK" +"3648183808","3648183871","DE" +"3648183872","3648183935","GB" +"3648183936","3648184319","DE" +"3648184320","3648192511","RU" +"3648192512","3648196607","DE" +"3648196608","3648200703","IT" +"3648200704","3648208479","SE" +"3648208480","3648208511","DK" +"3648208512","3648208895","SE" +"3648208896","3648209663","DE" +"3648209664","3648209919","EU" +"3648209920","3648212991","DE" +"3648212992","3648217087","RU" +"3648217088","3648221183","UA" +"3648221184","3648225279","IE" +"3648225280","3648231263","DE" +"3648231264","3648231295","NL" +"3648231296","3648233471","DE" +"3648233472","3648236667","FR" +"3648236668","3648236668","GB" +"3648236669","3648236669","NL" +"3648236670","3648236670","DE" +"3648236671","3648236671","SE" +"3648236672","3648237567","FR" +"3648237568","3648241663","RU" +"3648241664","3648245759","NL" +"3648245760","3648249855","RO" +"3648249856","3648253951","NL" +"3648253952","3648258047","CZ" +"3648258048","3648266239","ES" +"3648266240","3648270335","HU" +"3648270336","3648274431","RU" +"3648274432","3648278527","AT" +"3648278528","3648282623","NO" +"3648282624","3648286719","PL" +"3648286720","3648290815","DE" +"3648290816","3648299007","RU" +"3648299008","3648303103","FI" +"3648303104","3648307199","AT" +"3648307200","3648311295","TR" +"3648311296","3648315615","DK" +"3648315616","3648315631","CA" +"3648315632","3648316079","DK" +"3648316080","3648316087","SE" +"3648316088","3648316415","DK" +"3648316416","3648316671","NL" +"3648316672","3648317247","DK" +"3648317248","3648317263","CA" +"3648317264","3648319527","DK" +"3648319528","3648319535","CH" +"3648319536","3648321631","DK" +"3648321632","3648321639","CA" +"3648321640","3648321823","DK" +"3648321824","3648321839","GB" +"3648321840","3648323583","DK" +"3648323584","3648327679","NG" +"3648327680","3648331775","LT" +"3648331776","3648339967","BE" +"3648339968","3648344063","UA" +"3648344064","3648348159","RU" +"3648348160","3648352255","DE" +"3648352256","3648356351","RU" +"3648356352","3648360447","PL" +"3648360448","3648362251","FR" +"3648362252","3648362255","GB" +"3648362256","3648362263","FR" +"3648362264","3648362271","GB" +"3648362272","3648364543","FR" +"3648364544","3648368639","CH" +"3648368640","3648372735","RU" +"3648372736","3648376831","LU" +"3648376832","3648380927","CZ" +"3648380928","3648381183","EU" +"3648381184","3648385023","NL" +"3648385024","3648389119","RU" +"3648389120","3648393215","IT" +"3648393216","3648397311","DE" +"3648397312","3648405503","NO" +"3648405504","3648413695","RU" +"3648413696","3648417791","SK" +"3648417792","3648417807","AT" +"3648417808","3648417815","GB" +"3648417816","3648417831","AT" +"3648417832","3648417839","GB" +"3648417840","3648417855","AT" +"3648417856","3648417919","GB" +"3648417920","3648418047","AT" +"3648418048","3648418079","GB" +"3648418080","3648418111","ES" +"3648418112","3648418127","GB" +"3648418128","3648418247","ES" +"3648418248","3648418255","CH" +"3648418256","3648418271","GB" +"3648418272","3648418303","ES" +"3648418304","3648419327","GB" +"3648419328","3648419455","FR" +"3648419456","3648419519","IT" +"3648419520","3648419583","ES" +"3648419584","3648419839","GB" +"3648419840","3648419901","BE" +"3648419902","3648419903","GB" +"3648419904","3648419967","BE" +"3648419968","3648420095","GB" +"3648420096","3648420351","NL" +"3648420352","3648420863","GB" +"3648420864","3648421119","US" +"3648421120","3648421375","GB" +"3648421376","3648421631","DE" +"3648421632","3648421887","CH" +"3648421888","3648425983","GB" +"3648425984","3648430079","IT" +"3648430080","3648432127","NL" +"3648432128","3648433151","DE" +"3648433152","3648434175","NL" +"3648434176","3648438271","RU" +"3648438272","3648442367","CH" +"3648442368","3648446463","SE" +"3648446464","3648447055","FR" +"3648447056","3648447063","ES" +"3648447064","3648449119","FR" +"3648449120","3648449135","ES" +"3648449136","3648450559","FR" +"3648450560","3648454655","IT" +"3648454656","3648458751","NL" +"3648458752","3648462847","RU" +"3648462848","3648466943","FI" +"3648466944","3648469295","DE" +"3648469296","3648469311","AT" +"3648469312","3648471039","DE" +"3648471040","3648475135","PL" +"3648475136","3648479231","RU" +"3648479232","3648483327","CH" +"3648483328","3648487423","SK" +"3648487424","3648491519","FR" +"3648491520","3648495615","CH" +"3648495616","3648499711","SE" +"3648499712","3648503807","FR" +"3648503808","3648511999","DE" +"3648512000","3648516095","NL" +"3648516096","3648520191","RS" +"3648520192","3648782335","NL" +"3648782336","3649044479","ES" +"3649044480","3649110015","FR" +"3649110016","3649175551","PT" +"3649175552","3649241087","ES" +"3649241088","3649306623","TR" +"3649306624","3649372159","IL" +"3649372160","3649437695","IT" +"3649437696","3649512191","GB" +"3649512192","3649512447","FR" +"3649512448","3649568767","GB" +"3649568768","3649634303","BE" +"3649634304","3649700159","GB" +"3649700160","3649700247","US" +"3649700248","3649700251","BB" +"3649700252","3649700287","US" +"3649700288","3649700863","GB" +"3649700864","3649701119","US" +"3649701120","3649708791","GB" +"3649708792","3649709055","GD" +"3649709056","3649709287","GB" +"3649709288","3649709295","BB" +"3649709296","3649709311","AG" +"3649709312","3649709815","GB" +"3649709816","3649709823","TT" +"3649709824","3649765375","GB" +"3649765376","3649830911","EG" +"3649830912","3649831167","NL" +"3649831168","3649831423","EU" +"3649831424","3649835007","NL" +"3649835008","3649838079","ES" +"3649838080","3649839103","NL" +"3649839104","3649840127","GB" +"3649840128","3649840383","NL" +"3649840384","3649843455","GB" +"3649843456","3649845247","NL" +"3649845248","3649845759","GB" +"3649845760","3649847039","NL" +"3649847040","3649847295","GB" +"3649847296","3649848319","NL" +"3649848320","3649855487","DE" +"3649855488","3649856511","GB" +"3649856512","3649857535","US" +"3649857536","3649858047","JP" +"3649858048","3649859071","GB" +"3649859072","3649859583","US" +"3649859584","3649863679","SE" +"3649863680","3649896447","FI" +"3649896448","3649950719","IT" +"3649950720","3649950975","US" +"3649950976","3649961983","IT" +"3649961984","3650093055","SE" +"3650093056","3650097151","JO" +"3650097152","3650101247","SK" +"3650101248","3650105343","DE" +"3650105344","3650109439","HU" +"3650109440","3650113535","NO" +"3650113536","3650117631","GB" +"3650117632","3650121727","RU" +"3650121728","3650125823","FR" +"3650125824","3650129919","DE" +"3650129920","3650134015","GB" +"3650134016","3650142207","RU" +"3650142208","3650150399","PL" +"3650150400","3650155263","NO" +"3650155264","3650155519","EU" +"3650155520","3650158591","NO" +"3650158592","3650162687","MT" +"3650162688","3650166783","RU" +"3650166784","3650167807","BE" +"3650167808","3650168063","LU" +"3650168064","3650170879","BE" +"3650170880","3650174975","DK" +"3650174976","3650179071","GB" +"3650179072","3650183167","BG" +"3650183168","3650187263","DE" +"3650187264","3650195455","GB" +"3650195456","3650199551","RU" +"3650199552","3650203647","BG" +"3650203648","3650207743","ES" +"3650207744","3650211839","SK" +"3650211840","3650215935","LV" +"3650215936","3650220031","GB" +"3650220032","3650224127","SA" +"3650224128","3650228223","A2" +"3650228224","3650228735","US" +"3650228736","3650228991","A2" +"3650228992","3650232319","US" +"3650232320","3650233343","RU" +"3650233344","3650233599","CY" +"3650233600","3650236415","RU" +"3650236416","3650240511","CH" +"3650240512","3650244607","EE" +"3650244608","3650256895","GB" +"3650256896","3650265087","DE" +"3650265088","3650265559","CH" +"3650265560","3650265571","DE" +"3650265572","3650269183","CH" +"3650269184","3650273071","GB" +"3650273072","3650273279","IR" +"3650273280","3650277375","IT" +"3650277376","3650281471","IR" +"3650281472","3650285567","FR" +"3650285568","3650289663","UA" +"3650289664","3650297855","RU" +"3650297856","3650301951","LT" +"3650301952","3650306775","DE" +"3650306776","3650306779","GE" +"3650306780","3650307007","DE" +"3650307008","3650307010","GB" +"3650307011","3650310143","DE" +"3650310144","3650314239","GB" +"3650314240","3650315271","DE" +"3650315272","3650315272","BE" +"3650315273","3650316287","DE" +"3650316288","3650316543","EU" +"3650316544","3650316711","DE" +"3650316712","3650316715","FR" +"3650316716","3650318335","DE" +"3650318336","3650320383","GI" +"3650320384","3650322431","GB" +"3650322432","3650323327","IT" +"3650323328","3650323359","SZ" +"3650323360","3650330623","IT" +"3650330624","3650334719","UA" +"3650334720","3650338815","GB" +"3650338816","3650342911","FR" +"3650342912","3650344463","CH" +"3650344464","3650344479","AT" +"3650344480","3650344559","CH" +"3650344560","3650344575","AT" +"3650344576","3650344879","CH" +"3650344880","3650344911","PT" +"3650344912","3650345887","CH" +"3650345888","3650345903","AT" +"3650345904","3650345935","CH" +"3650345936","3650345951","PT" +"3650345952","3650346207","CH" +"3650346208","3650346239","IM" +"3650346240","3650347007","CH" +"3650347008","3650351103","GE" +"3650351104","3650351871","GB" +"3650351872","3650351879","NL" +"3650351880","3650351887","IT" +"3650351888","3650351903","GB" +"3650351904","3650351911","FR" +"3650351912","3650351919","SE" +"3650351920","3650351927","DK" +"3650351928","3650351935","DE" +"3650351936","3650351943","PL" +"3650351944","3650351951","ES" +"3650351952","3650351959","BE" +"3650351960","3650351967","ZA" +"3650351968","3650351975","PT" +"3650351976","3650351983","FI" +"3650351984","3650351991","NO" +"3650351992","3650351999","HU" +"3650352000","3650352007","GB" +"3650352008","3650352015","IE" +"3650352016","3650352075","GB" +"3650352076","3650352079","CH" +"3650352080","3650352127","GB" +"3650352128","3650352247","DE" +"3650352248","3650352255","CH" +"3650352256","3650352263","GB" +"3650352264","3650352271","DE" +"3650352272","3650352279","NL" +"3650352280","3650352287","IT" +"3650352288","3650352295","FR" +"3650352296","3650352303","SE" +"3650352304","3650352311","DK" +"3650352312","3650352319","DE" +"3650352320","3650352327","PL" +"3650352328","3650352335","ES" +"3650352336","3650352343","BE" +"3650352344","3650352351","ZA" +"3650352352","3650352359","PT" +"3650352360","3650352367","FI" +"3650352368","3650352375","NL" +"3650352376","3650352383","HU" +"3650352384","3650352895","DE" +"3650352896","3650355199","GB" +"3650355200","3650359295","CH" +"3650359296","3650360703","NL" +"3650360704","3650360831","BE" +"3650360832","3650363391","NL" +"3650363392","3650367487","GB" +"3650367488","3650371583","RU" +"3650371584","3650375679","ES" +"3650375680","3650379775","NL" +"3650379776","3650381823","DE" +"3650381824","3650387967","IT" +"3650387968","3650392063","DE" +"3650392064","3650396159","NO" +"3650396160","3650404351","NL" +"3650404352","3650412543","RU" +"3650412544","3650416639","DE" +"3650416640","3650420735","BE" +"3650420736","3650424831","ES" +"3650424832","3650428927","RU" +"3650428928","3650429714","NL" +"3650429715","3650429715","EU" +"3650429716","3650431999","NL" +"3650432000","3650432255","EU" +"3650432256","3650432431","NL" +"3650432432","3650432447","DE" +"3650432448","3650433023","NL" +"3650433024","3650437119","FI" +"3650437120","3650441215","NL" +"3650441216","3650445311","IT" +"3650445312","3650449407","GB" +"3650449408","3650453503","NO" +"3650453504","3650457599","NL" +"3650457600","3650461695","ES" +"3650461696","3650465791","AT" +"3650465792","3650469887","RU" +"3650469888","3650478079","NL" +"3650478080","3650482175","AT" +"3650482176","3650484639","PL" +"3650484640","3650484671","US" +"3650484672","3650486271","PL" +"3650486272","3650502655","RU" +"3650502656","3650504703","SE" +"3650506752","3650508799","LB" +"3650508800","3650510847","NL" +"3650510848","3650519039","GB" +"3650519040","3650523135","HU" +"3650523136","3650527231","DE" +"3650527232","3650534911","SE" +"3650534912","3650535423","NL" +"3650535424","3650539519","RU" +"3650539520","3650543615","ES" +"3650543616","3650548109","CH" +"3650548110","3650548110","A1" +"3650548111","3650548827","CH" +"3650548828","3650548828","A1" +"3650548829","3650548884","CH" +"3650548885","3650548885","A1" +"3650548886","3650551807","CH" +"3650551808","3650555903","FR" +"3650555904","3650559999","RU" +"3650560000","3650564095","HK" +"3650564096","3650568191","SE" +"3650568192","3650572287","RU" +"3650572288","3650576383","DE" +"3650576384","3650580479","GB" +"3650580480","3650584575","CH" +"3650584576","3650588671","RU" +"3650588672","3650592767","DE" +"3650592768","3650600959","IS" +"3650600960","3650605055","SE" +"3650605056","3650609180","DE" +"3650609181","3650609181","LB" +"3650609182","3650609279","DE" +"3650609280","3650609311","CY" +"3650609312","3650609407","DE" +"3650609408","3650609439","IQ" +"3650609440","3650609447","KZ" +"3650609448","3650609455","RU" +"3650609456","3650609663","DE" +"3650609664","3650609919","KZ" +"3650609920","3650610175","RU" +"3650610176","3650610687","KZ" +"3650610688","3650610943","RU" +"3650610944","3650611711","DE" +"3650611712","3650611967","LB" +"3650611968","3650612735","KZ" +"3650612736","3650617343","DE" +"3650617344","3650682879","FI" +"3650682880","3650748415","PL" +"3650748416","3650789375","GB" +"3650789376","3650790143","NL" +"3650790144","3650827095","GB" +"3650827096","3650827103","A2" +"3650827104","3650879487","GB" +"3650879488","3650912255","RO" +"3650912256","3650912639","GB" +"3650912640","3650912671","FR" +"3650912672","3650923103","GB" +"3650923104","3650923135","FR" +"3650923136","3650926591","GB" +"3650926592","3650929663","ES" +"3650929664","3650931967","GB" +"3650931968","3650932223","ES" +"3650932224","3650935839","GB" +"3650935840","3650935855","FR" +"3650935856","3650935871","GB" +"3650935872","3650935903","FR" +"3650935904","3650935967","GB" +"3650935968","3650935983","FR" +"3650935984","3650935999","GB" +"3650936000","3650936063","NL" +"3650936064","3650939599","GB" +"3650939600","3650939607","FR" +"3650939608","3650939935","GB" +"3650939936","3650939967","FR" +"3650939968","3650945023","GB" +"3650945024","3651010559","DK" +"3651010560","3651076095","GB" +"3651076096","3651077375","DE" +"3651077376","3651077887","GB" +"3651077888","3651078143","IE" +"3651078144","3651078399","ES" +"3651078400","3651078655","IE" +"3651078656","3651078783","ES" +"3651078784","3651078911","DE" +"3651078912","3651079807","GB" +"3651079808","3651079935","ES" +"3651079936","3651080191","DE" +"3651080192","3651080831","GB" +"3651080832","3651081215","DE" +"3651081216","3651081727","GB" +"3651081728","3651081983","AT" +"3651081984","3651082239","DE" +"3651082240","3651082751","GB" +"3651082752","3651083007","IE" +"3651083008","3651083519","GB" +"3651083520","3651083775","DE" +"3651083776","3651084031","IE" +"3651084032","3651084543","FR" +"3651084544","3651084799","IE" +"3651084800","3651085311","ES" +"3651085312","3651085567","FR" +"3651085568","3651086079","DE" +"3651086080","3651086335","IE" +"3651086336","3651086463","DE" +"3651086464","3651086591","IE" +"3651086592","3651086719","GR" +"3651086720","3651086847","DE" +"3651086848","3651087103","FR" +"3651087104","3651087615","ES" +"3651087616","3651087871","GB" +"3651087872","3651088127","DE" +"3651088128","3651088383","IE" +"3651088384","3651088639","GR" +"3651088640","3651090767","DE" +"3651090768","3651090775","GB" +"3651090776","3651090919","DE" +"3651090920","3651090959","IE" +"3651090960","3651098111","DE" +"3651098112","3651098367","IE" +"3651098368","3651098623","FR" +"3651098624","3651101439","DE" +"3651101440","3651101695","FR" +"3651101696","3651101951","CH" +"3651101952","3651102207","FR" +"3651102208","3651102719","DE" +"3651102720","3651102975","GB" +"3651102976","3651103231","SL" +"3651103232","3651103487","IT" +"3651103488","3651103743","FR" +"3651103744","3651103999","IT" +"3651104000","3651104511","DE" +"3651104512","3651104767","PL" +"3651104768","3651105535","DE" +"3651105536","3651105791","IT" +"3651105792","3651106047","ES" +"3651106048","3651106559","GB" +"3651106560","3651106815","IE" +"3651106816","3651107327","DE" +"3651107328","3651107583","GB" +"3651107584","3651107839","NL" +"3651107840","3651107967","GB" +"3651107968","3651108351","IE" +"3651108352","3651108479","NL" +"3651108480","3651108543","ES" +"3651108544","3651108863","DE" +"3651108864","3651141631","EE" +"3651141632","3651173375","DE" +"3651173376","3651173631","ES" +"3651173632","3651198975","DE" +"3651198976","3651199231","GB" +"3651199232","3651199487","ES" +"3651199488","3651199743","GB" +"3651199744","3651200255","ES" +"3651200256","3651201023","PL" +"3651201024","3651201279","ES" +"3651201280","3651201535","PL" +"3651201536","3651201791","ES" +"3651201792","3651201919","FR" +"3651201920","3651202047","ES" +"3651202048","3651202175","FR" +"3651202176","3651202303","GB" +"3651202304","3651202815","ES" +"3651202816","3651203071","GB" +"3651203072","3651203583","DE" +"3651203584","3651203839","FR" +"3651203840","3651204351","ES" +"3651204352","3651204607","PL" +"3651204608","3651205119","ES" +"3651205120","3651205375","GB" +"3651205376","3651206143","ES" +"3651206144","3651206399","PL" +"3651206400","3651206655","DE" +"3651206656","3651207167","ES" +"3651207168","3651207199","GB" +"3651207200","3651207223","EU" +"3651207224","3651207295","GB" +"3651207296","3651207423","EU" +"3651207424","3651207615","GB" +"3651207616","3651207647","EU" +"3651207648","3651208959","GB" +"3651208960","3651209215","EU" +"3651209216","3651209231","US" +"3651209232","3651209239","GB" +"3651209240","3651209243","DE" +"3651209244","3651209471","EU" +"3651209472","3651210751","GB" +"3651210752","3651211263","EU" +"3651211264","3651211775","IR" +"3651211776","3651213823","EU" +"3651213824","3651214207","US" +"3651214208","3651215359","EU" +"3651215360","3651215395","GB" +"3651215396","3651215615","EU" +"3651215616","3651215871","GB" +"3651215872","3651217407","EU" +"3651217408","3651217535","GI" +"3651217536","3651219455","EU" +"3651219456","3651219967","US" +"3651219968","3651220383","EU" +"3651220384","3651220479","GB" +"3651220480","3651221503","EU" +"3651221504","3651221695","GB" +"3651221696","3651223551","EU" +"3651223552","3651223567","GB" +"3651223568","3651223583","EU" +"3651223584","3651223607","GB" +"3651223608","3651223647","EU" +"3651223648","3651223663","ES" +"3651223664","3651227135","EU" +"3651227136","3651227391","GB" +"3651227392","3651230719","EU" +"3651230720","3651231743","MU" +"3651231744","3651232255","EU" +"3651232256","3651232287","GB" +"3651232288","3651232319","EU" +"3651232320","3651232383","GB" +"3651232384","3651232447","EU" +"3651232448","3651232511","GB" +"3651232512","3651233791","EU" +"3651233792","3651233855","GB" +"3651233856","3651236863","EU" +"3651236864","3651237631","SC" +"3651237632","3651237887","EU" +"3651237888","3651238399","SC" +"3651238400","3651239935","EU" +"3651239936","3651272703","GB" +"3651272704","3651338239","CH" +"3651338240","3651342847","GB" +"3651342848","3651343103","US" +"3651343104","3651350783","GB" +"3651350784","3651351039","EU" +"3651351040","3651403775","GB" +"3651403776","3651534847","AE" +"3651534848","3651600383","NL" +"3651600384","3651636696","FR" +"3651636697","3651636697","GB" +"3651636698","3651665919","FR" +"3651665920","3651670015","ES" +"3651670016","3651674111","GB" +"3651674112","3651682303","CH" +"3651682304","3651686399","RU" +"3651686400","3651690495","NO" +"3651690496","3651694591","FR" +"3651694592","3651694847","PT" +"3651694848","3651694975","NG" +"3651694976","3651695103","PT" +"3651695104","3651695359","CV" +"3651695360","3651695871","AO" +"3651695872","3651696127","PT" +"3651696128","3651696383","AO" +"3651696384","3651696639","PT" +"3651696640","3651698687","AO" +"3651698688","3651702783","PL" +"3651702784","3651706879","GB" +"3651706880","3651709791","MT" +"3651709792","3651709807","CY" +"3651709808","3651710975","MT" +"3651710976","3651715071","AZ" +"3651715072","3651719167","PL" +"3651719168","3651723263","CZ" +"3651723264","3651727359","IT" +"3651727360","3651731455","RU" +"3651731456","3651747839","GB" +"3651747840","3651751935","FI" +"3651751936","3651756031","RU" +"3651756032","3651764223","IT" +"3651764224","3651772415","CH" +"3651772416","3651776511","GB" +"3651776512","3651780607","CZ" +"3651780608","3651784703","TR" +"3651784704","3651788799","RS" +"3651788800","3651792895","NL" +"3651792896","3651796991","FR" +"3651796992","3651813375","NL" +"3651813376","3651821567","RU" +"3651821568","3651825663","CZ" +"3651825664","3651829759","RU" +"3651829760","3651833855","NO" +"3651833856","3651837951","ML" +"3651837952","3651842047","PL" +"3651842048","3651846143","DE" +"3651846144","3651850239","NO" +"3651850240","3651854335","RU" +"3651854336","3651858431","IT" +"3651858432","3651862527","IR" +"3651862528","3651866623","RU" +"3651866624","3651870719","FR" +"3651870720","3651874815","IT" +"3651874816","3651878911","PL" +"3651878912","3651883007","IT" +"3651883008","3651885871","CD" +"3651885872","3651885895","BE" +"3651885896","3651885899","CD" +"3651885900","3651885903","BE" +"3651885904","3651885927","CD" +"3651885928","3651886079","BE" +"3651886080","3651886347","CD" +"3651886348","3651886379","BE" +"3651886380","3651886383","CD" +"3651886384","3651886391","BE" +"3651886392","3651886395","CD" +"3651886396","3651886407","BE" +"3651886408","3651886415","CD" +"3651886416","3651886423","BE" +"3651886424","3651886427","CD" +"3651886428","3651886435","BE" +"3651886436","3651886451","CD" +"3651886452","3651886455","BE" +"3651886456","3651886459","CD" +"3651886460","3651886463","BE" +"3651886464","3651886471","CD" +"3651886472","3651886479","BE" +"3651886480","3651886495","CD" +"3651886496","3651886511","BE" +"3651886512","3651886543","CD" +"3651886544","3651886591","BE" +"3651886592","3651886847","CD" +"3651886848","3651887103","BE" +"3651887104","3651891199","GB" +"3651891200","3651895295","DE" +"3651895296","3651899391","GB" +"3651899392","3651903487","RU" +"3651903488","3651907583","IT" +"3651907584","3651908095","IQ" +"3651908096","3651908863","DE" +"3651908864","3651908991","IQ" +"3651908992","3651909046","DE" +"3651909047","3651909047","IQ" +"3651909048","3651909311","DE" +"3651909312","3651909375","IQ" +"3651909376","3651909631","DE" +"3651909632","3651910655","IQ" +"3651910656","3651910783","DE" +"3651910784","3651911167","IQ" +"3651911168","3651911623","DE" +"3651911624","3651911631","IQ" +"3651911632","3651911643","DE" +"3651911644","3651911647","IR" +"3651911648","3651911679","DE" +"3651911680","3651915775","NO" +"3651915776","3651919871","IS" +"3651919872","3651923967","RU" +"3651923968","3651928063","DE" +"3651928064","3651932159","IT" +"3651932160","3651936255","RU" +"3651936256","3651936511","DE" +"3651936512","3651936767","EU" +"3651936768","3651938175","DE" +"3651938176","3651938207","GB" +"3651938208","3651938255","DE" +"3651938256","3651938271","PL" +"3651938272","3651938943","DE" +"3651938944","3651938959","NL" +"3651938960","3651938975","DE" +"3651938976","3651939007","TR" +"3651939008","3651939071","DE" +"3651939072","3651939087","SE" +"3651939088","3651939135","DE" +"3651939136","3651939151","PL" +"3651939152","3651939167","DE" +"3651939168","3651939231","GB" +"3651939232","3651939263","DE" +"3651939264","3651939295","IT" +"3651939296","3651939327","PL" +"3651939328","3651939391","IT" +"3651939392","3651939503","DE" +"3651939504","3651939511","GB" +"3651939512","3651939519","DE" +"3651939520","3651939527","RU" +"3651939528","3651939583","PL" +"3651939584","3651939647","DE" +"3651939648","3651939711","ES" +"3651939712","3651939727","DE" +"3651939728","3651939743","PL" +"3651939744","3651939791","DE" +"3651939792","3651939799","RU" +"3651939800","3651939839","DE" +"3651939840","3651940351","LV" +"3651940352","3651940383","TR" +"3651940384","3651940415","US" +"3651940416","3651940479","IT" +"3651940480","3651940543","GB" +"3651940544","3651940639","DE" +"3651940640","3651940671","BS" +"3651940672","3651940735","DE" +"3651940736","3651940743","AU" +"3651940744","3651940751","RU" +"3651940752","3651940799","DE" +"3651940800","3651940863","ES" +"3651940864","3651940927","GB" +"3651940928","3651940991","IT" +"3651940992","3651941027","DE" +"3651941028","3651941055","TR" +"3651941056","3651941087","DE" +"3651941088","3651941119","GB" +"3651941120","3651941183","DE" +"3651941184","3651941215","IT" +"3651941216","3651941249","TR" +"3651941250","3651941695","DE" +"3651941696","3651941759","IT" +"3651941760","3651942655","DE" +"3651942656","3651942719","GB" +"3651942720","3651942735","SE" +"3651942736","3651942751","US" +"3651942752","3651942783","DE" +"3651942784","3651942815","GB" +"3651942816","3651942911","DE" +"3651942912","3651944447","LV" +"3651944448","3651948543","ES" +"3651948544","3651952639","FO" +"3651952640","3651953663","IR" +"3651953664","3651954687","AE" +"3651954688","3651958271","IR" +"3651958272","3651958783","AE" +"3651958784","3651959039","IR" +"3651959040","3651960831","AE" +"3651960832","3651964927","GB" +"3651964928","3651969023","SK" +"3651969024","3651977215","DE" +"3651977216","3651985407","IT" +"3651985408","3651997695","PL" +"3651997696","3652001791","RU" +"3652001792","3652005887","HU" +"3652005888","3652009983","GB" +"3652009984","3652014079","RU" +"3652014080","3652018175","SA" +"3652018176","3652019183","IE" +"3652019184","3652019199","GB" +"3652019200","3652019327","IE" +"3652019328","3652019335","GB" +"3652019336","3652019455","IE" +"3652019456","3652019471","GB" +"3652019472","3652019479","IE" +"3652019480","3652019487","GB" +"3652019488","3652019567","IE" +"3652019568","3652019583","GB" +"3652019584","3652019599","IE" +"3652019600","3652019615","GB" +"3652019616","3652019679","IE" +"3652019680","3652019687","GB" +"3652019688","3652019735","IE" +"3652019736","3652019739","GB" +"3652019740","3652019751","IE" +"3652019752","3652019759","GB" +"3652019760","3652020799","IE" +"3652020800","3652020863","DE" +"3652020864","3652021415","IE" +"3652021416","3652021423","BE" +"3652021424","3652022271","IE" +"3652022272","3652026367","ES" +"3652026368","3652028031","DE" +"3652028032","3652028063","US" +"3652028064","3652028095","CH" +"3652028096","3652028223","DE" +"3652028224","3652028255","ES" +"3652028256","3652031743","DE" +"3652031744","3652031999","US" +"3652032000","3652032767","DE" +"3652032768","3652033791","NL" +"3652033792","3652033855","GD" +"3652033856","3652033887","NL" +"3652033888","3652033919","VG" +"3652033920","3652033935","TR" +"3652033936","3652033951","DE" +"3652033952","3652033967","CH" +"3652033968","3652033983","NL" +"3652033984","3652034015","TR" +"3652034016","3652034047","NL" +"3652034048","3652034111","CY" +"3652034112","3652034143","TR" +"3652034144","3652034175","CH" +"3652034176","3652034207","NL" +"3652034208","3652034239","ES" +"3652034240","3652034271","VG" +"3652034272","3652034367","CY" +"3652034368","3652034383","ES" +"3652034384","3652034399","VG" +"3652034400","3652034559","CY" +"3652034560","3652046847","PL" +"3652046848","3652050271","IE" +"3652050272","3652050299","GB" +"3652050300","3652050327","IE" +"3652050328","3652050343","GB" +"3652050344","3652050499","IE" +"3652050500","3652050503","GB" +"3652050504","3652050527","IE" +"3652050528","3652050535","GB" +"3652050536","3652050567","IE" +"3652050568","3652050615","GB" +"3652050616","3652050619","IE" +"3652050620","3652050627","GB" +"3652050628","3652050631","IE" +"3652050632","3652050671","GB" +"3652050672","3652050943","IE" +"3652050944","3652051711","LI" +"3652051712","3652051967","CH" +"3652051968","3652053631","LI" +"3652053632","3652053759","CH" +"3652053760","3652055039","LI" +"3652055040","3652059135","NO" +"3652059136","3652063231","RU" +"3652063232","3652067327","IR" +"3652067328","3652071423","TR" +"3652071424","3652075519","BG" +"3652075520","3652083711","SE" +"3652083712","3652087807","RU" +"3652087808","3652095999","IT" +"3652096000","3652100095","BG" +"3652100096","3652105471","RU" +"3652105472","3652105535","US" +"3652105536","3652108287","RU" +"3652108288","3652116479","FR" +"3652116480","3652120575","TM" +"3652120576","3652124671","GB" +"3652124672","3652128767","UA" +"3652128768","3652136959","RU" +"3652136960","3652141055","IT" +"3652141056","3652141311","GB" +"3652141312","3652142847","A2" +"3652142848","3652143359","GB" +"3652143360","3652144127","A2" +"3652144128","3652144383","KE" +"3652144384","3652144639","CM" +"3652144640","3652144895","GB" +"3652144896","3652145151","A2" +"3652145152","3652149247","UA" +"3652149248","3652153343","DE" +"3652153344","3652157439","SE" +"3652157440","3652165631","RU" +"3652165632","3652173823","FR" +"3652173824","3652177919","AT" +"3652177920","3652182015","CY" +"3652182016","3652182527","DE" +"3652182528","3652182783","AT" +"3652182784","3652186591","DE" +"3652186592","3652186623","CH" +"3652186624","3652186879","DE" +"3652186880","3652187007","AT" +"3652187008","3652190207","DE" +"3652190208","3652714495","GB" +"3652714496","3652985039","DE" +"3652985040","3652985047","FR" +"3652985048","3653029775","DE" +"3653029776","3653029791","LU" +"3653029792","3653031727","DE" +"3653031728","3653031735","LU" +"3653031736","3653039103","DE" +"3653039104","3653039359","IT" +"3653039360","3653039999","DE" +"3653040000","3653040015","LU" +"3653040016","3653238783","DE" +"3653238784","3653334141","CH" +"3653334142","3653334142","AT" +"3653334143","3653341871","CH" +"3653341872","3653341879","AT" +"3653341880","3653369855","CH" +"3653369856","3653373951","IT" +"3653373952","3653378047","NL" +"3653378048","3653382143","DE" +"3653382144","3653386239","CH" +"3653386240","3653390335","DE" +"3653390336","3653394431","FR" +"3653394432","3653402623","NL" +"3653402624","3653403135","GB" +"3653403136","3653403647","CD" +"3653403648","3653403903","ZW" +"3653403904","3653403911","GB" +"3653403912","3653403919","IQ" +"3653403920","3653403927","GB" +"3653403928","3653403931","UA" +"3653403932","3653403943","GB" +"3653403944","3653403951","LB" +"3653403952","3653403959","IQ" +"3653403960","3653403967","MW" +"3653403968","3653403975","NG" +"3653403976","3653403983","GB" +"3653403984","3653403999","UA" +"3653404000","3653404008","LB" +"3653404009","3653404015","ZM" +"3653404016","3653404039","GB" +"3653404040","3653404047","IQ" +"3653404048","3653404063","GB" +"3653404064","3653404071","LB" +"3653404072","3653404079","AO" +"3653404080","3653404087","UA" +"3653404088","3653404127","GB" +"3653404128","3653404135","RS" +"3653404136","3653404159","GB" +"3653404160","3653404415","AT" +"3653404416","3653404543","GB" +"3653404544","3653404559","NG" +"3653404560","3653404639","GB" +"3653404640","3653404655","UA" +"3653404656","3653404671","GB" +"3653404672","3653404679","TR" +"3653404680","3653404707","GB" +"3653404708","3653404713","IQ" +"3653404714","3653404719","GB" +"3653404720","3653404735","LB" +"3653404736","3653404823","GB" +"3653404824","3653404831","LB" +"3653404832","3653404847","NG" +"3653404848","3653404855","GB" +"3653404856","3653404863","SL" +"3653404864","3653404903","GB" +"3653404904","3653404911","IQ" +"3653404912","3653404919","LY" +"3653404920","3653404959","GB" +"3653404960","3653404975","UA" +"3653404976","3653405039","GB" +"3653405040","3653405047","LB" +"3653405048","3653405055","IQ" +"3653405056","3653405063","GB" +"3653405064","3653405071","IQ" +"3653405072","3653405095","GB" +"3653405096","3653405103","NG" +"3653405104","3653405135","GB" +"3653405136","3653405143","CD" +"3653405144","3653405167","GB" +"3653405168","3653405183","UA" +"3653405184","3653405439","AT" +"3653405440","3653407015","GB" +"3653407016","3653407023","UG" +"3653407024","3653407031","GB" +"3653407032","3653407039","ZW" +"3653407040","3653407071","NG" +"3653407072","3653407103","GB" +"3653407104","3653407111","UG" +"3653407112","3653407119","ZM" +"3653407120","3653407135","GB" +"3653407136","3653407151","MZ" +"3653407152","3653407167","GB" +"3653407168","3653407231","NG" +"3653407232","3653407391","GB" +"3653407392","3653407399","NG" +"3653407400","3653407615","GB" +"3653407616","3653407639","NG" +"3653407640","3653407647","ZM" +"3653407648","3653407679","GB" +"3653407680","3653407695","UG" +"3653407696","3653407703","CD" +"3653407704","3653407711","NG" +"3653407712","3653407743","GB" +"3653407744","3653407999","AT" +"3653408000","3653408023","GB" +"3653408024","3653408031","UG" +"3653408032","3653408063","GB" +"3653408064","3653408071","ZM" +"3653408072","3653408079","NG" +"3653408080","3653408119","GB" +"3653408120","3653408127","NG" +"3653408128","3653408143","GB" +"3653408144","3653408151","NG" +"3653408152","3653408175","GB" +"3653408176","3653408183","US" +"3653408184","3653408191","MW" +"3653408192","3653408199","GB" +"3653408200","3653408207","NG" +"3653408208","3653408231","GB" +"3653408232","3653408239","KE" +"3653408240","3653408247","BF" +"3653408248","3653408271","GB" +"3653408272","3653408279","IQ" +"3653408280","3653408319","GB" +"3653408320","3653408327","IQ" +"3653408328","3653408767","GB" +"3653408768","3653409023","CD" +"3653409024","3653409039","GB" +"3653409040","3653409047","NG" +"3653409048","3653409063","GB" +"3653409064","3653409071","CD" +"3653409072","3653409087","GB" +"3653409088","3653409095","CD" +"3653409096","3653409127","GB" +"3653409128","3653409135","CD" +"3653409136","3653409223","GB" +"3653409224","3653409231","NG" +"3653409232","3653409279","GB" +"3653409280","3653409311","TZ" +"3653409312","3653409319","IQ" +"3653409320","3653409535","TZ" +"3653409536","3653409559","UA" +"3653409560","3653409567","CM" +"3653409568","3653409575","UA" +"3653409576","3653409615","GB" +"3653409616","3653409623","IQ" +"3653409624","3653409639","NG" +"3653409640","3653409647","GB" +"3653409648","3653409663","NG" +"3653409664","3653409791","CM" +"3653409792","3653409919","GB" +"3653409920","3653410047","NG" +"3653410048","3653410063","YT" +"3653410064","3653410079","UG" +"3653410080","3653410087","GB" +"3653410088","3653410095","IQ" +"3653410096","3653410111","ZW" +"3653410112","3653410119","GB" +"3653410120","3653410127","NG" +"3653410128","3653410151","GB" +"3653410152","3653410159","KE" +"3653410160","3653410175","NG" +"3653410176","3653410183","US" +"3653410184","3653410191","MZ" +"3653410192","3653410199","ZW" +"3653410200","3653410247","GB" +"3653410248","3653410255","ZM" +"3653410256","3653410263","GB" +"3653410264","3653410271","NG" +"3653410272","3653410279","GB" +"3653410280","3653410287","IQ" +"3653410288","3653410295","GB" +"3653410296","3653410303","MW" +"3653410304","3653410815","GB" +"3653410816","3653414911","CZ" +"3653414912","3653419007","IT" +"3653419008","3653423103","IL" +"3653423104","3653427199","GB" +"3653427200","3653431295","DE" +"3653431296","3653435391","RU" +"3653435392","3653439487","DE" +"3653439488","3653443583","FR" +"3653443584","3653444351","DE" +"3653444352","3653444383","IT" +"3653444384","3653447167","DE" +"3653447168","3653447679","NL" +"3653447680","3653451775","LV" +"3653451776","3653464063","RU" +"3653464064","3653468159","NL" +"3653468160","3653472255","GR" +"3653472256","3653472279","NL" +"3653472280","3653472291","AF" +"3653472292","3653472511","NL" +"3653472512","3653472559","AF" +"3653472560","3653472567","NL" +"3653472568","3653472575","AF" +"3653472576","3653472591","NL" +"3653472592","3653472767","AF" +"3653472768","3653472775","NL" +"3653472776","3653472791","AF" +"3653472792","3653472831","NL" +"3653472832","3653472871","AF" +"3653472872","3653472879","NL" +"3653472880","3653472915","AF" +"3653472916","3653472919","NL" +"3653472920","3653472983","AF" +"3653472984","3653472999","NL" +"3653473000","3653473023","AF" +"3653473024","3653473279","US" +"3653473280","3653474303","NL" +"3653474304","3653474367","US" +"3653474368","3653476351","NL" +"3653476352","3653480447","CZ" +"3653480448","3653484543","DK" +"3653484544","3653488639","TR" +"3653488640","3653492735","RU" +"3653492736","3653500927","NL" +"3653500928","3653505023","GB" +"3653505024","3653509119","KZ" +"3653509120","3653513215","NL" +"3653513216","3653517311","NO" +"3653517312","3653518367","AT" +"3653518368","3653518399","SK" +"3653518400","3653518479","AT" +"3653518480","3653518495","SK" +"3653518496","3653519823","AT" +"3653519824","3653519839","SK" +"3653519840","3653520223","AT" +"3653520224","3653520255","SK" +"3653520256","3653522975","AT" +"3653522976","3653522991","SK" +"3653522992","3653523199","AT" +"3653523200","3653523455","SK" +"3653523456","3653523615","AT" +"3653523616","3653523647","SK" +"3653523648","3653524551","AT" +"3653524552","3653524559","GR" +"3653524560","3653524735","AT" +"3653524736","3653524863","SK" +"3653524864","3653524959","AT" +"3653524960","3653525151","SK" +"3653525152","3653525183","AT" +"3653525184","3653525215","SK" +"3653525216","3653525503","AT" +"3653525504","3653529599","RU" +"3653529600","3653533695","CZ" +"3653533696","3653537791","IT" +"3653537792","3653539031","AT" +"3653539032","3653539039","US" +"3653539040","3653539295","AT" +"3653539296","3653539311","US" +"3653539312","3653541887","AT" +"3653541888","3653545983","UA" +"3653545984","3653550079","CH" +"3653550080","3653554175","MK" +"3653554176","3653558271","CZ" +"3653558272","3653559671","GB" +"3653559672","3653559679","US" +"3653559680","3653566463","GB" +"3653566464","3653570559","RU" +"3653570560","3653574655","ES" +"3653574656","3653578751","CZ" +"3653578752","3653582847","SE" +"3653582848","3653586943","PL" +"3653586944","3653591039","DE" +"3653591040","3653595135","LU" +"3653595136","3653599231","RU" +"3653599232","3653601279","CH" +"3653601280","3653603327","BA" +"3653603328","3653607423","CZ" +"3653607424","3653611519","PL" +"3653611520","3653615615","HU" +"3653615616","3653619711","RU" +"3653619712","3653623295","CH" +"3653623296","3653623551","JP" +"3653623552","3653623807","US" +"3653623808","3653636095","RU" +"3653636096","3653640191","NL" +"3653640192","3653648383","GB" +"3653648384","3653652479","SE" +"3653652480","3653656575","RU" +"3653656576","3653660671","GB" +"3653660672","3653664767","CZ" +"3653664768","3653664895","DE" +"3653664896","3653664911","FR" +"3653664912","3653665023","NL" +"3653665024","3653665087","DE" +"3653665088","3653665151","NL" +"3653665152","3653665279","DE" +"3653665280","3653665791","NL" +"3653665792","3653668863","DE" +"3653668864","3653672959","SE" +"3653672960","3653681151","RU" +"3653681152","3653685247","ES" +"3653685248","3653689343","DK" +"3653689344","3653693439","LV" +"3653693440","3653697535","DE" +"3653697536","3653705727","IT" +"3653705728","3653705735","SE" +"3653705736","3653705863","NO" +"3653705864","3653705871","SE" +"3653705872","3653705895","NO" +"3653705896","3653705903","BS" +"3653705904","3653706175","NO" +"3653706176","3653706191","SE" +"3653706192","3653706271","NO" +"3653706272","3653706303","SE" +"3653706304","3653706495","NO" +"3653706496","3653706751","SE" +"3653706752","3653710847","NO" +"3653710848","3653710911","SE" +"3653710912","3653713919","NO" +"3653713920","3653718015","DE" +"3653718016","3653722111","AT" +"3653722112","3653730303","LV" +"3653730304","3653734399","BA" +"3653734400","3653738495","KE" +"3653738496","3653746687","GB" +"3653746688","3653750783","DE" +"3653750784","3653753087","RU" +"3653753088","3653753215","VG" +"3653753216","3653754879","RU" +"3653754880","3653758975","UA" +"3653758976","3653763071","RU" +"3653763072","3654025215","IT" +"3654025216","3654034783","GB" +"3654034784","3654034799","LU" +"3654034800","3654035583","GB" +"3654035584","3654035591","US" +"3654035592","3654035607","GB" +"3654035608","3654035615","SE" +"3654035616","3654045879","GB" +"3654045880","3654045887","IT" +"3654045888","3654061035","GB" +"3654061036","3654061039","US" +"3654061040","3654061951","GB" +"3654061952","3654062079","DE" +"3654062080","3654066027","GB" +"3654066028","3654066031","MC" +"3654066032","3654287359","GB" +"3654287360","3654607103","SE" +"3654607104","3654607359","DE" +"3654607360","3654607615","PL" +"3654607616","3654607871","SE" +"3654607872","3654608127","NO" +"3654608128","3654608383","SE" +"3654608384","3654608895","A2" +"3654608896","3654609919","NO" +"3654609920","3654610431","SE" +"3654610432","3654610943","FR" +"3654610944","3654613007","SE" +"3654613008","3654613015","RU" +"3654613016","3654613055","SE" +"3654613056","3654613071","RU" +"3654613072","3654613087","SE" +"3654613088","3654613151","RU" +"3654613152","3654613247","SE" +"3654613248","3654614015","NO" +"3654614016","3654614079","SE" +"3654614080","3654614271","FI" +"3654614272","3654614527","SE" +"3654614528","3654614783","RU" +"3654614784","3654615039","NO" +"3654615040","3654811647","SE" +"3654811648","3654942719","ES" +"3654942720","3655073791","IR" +"3655073792","3655335935","IT" +"3655335936","3656633487","DE" +"3656633488","3656633495","GB" +"3656633496","3656633503","US" +"3656633504","3656635647","DE" +"3656635648","3656635903","GB" +"3656635904","3656650583","DE" +"3656650584","3656650591","US" +"3656650592","3656661183","DE" +"3656661184","3656661199","AT" +"3656661200","3656661583","DE" +"3656661584","3656661599","AT" +"3656661600","3656661647","DE" +"3656661648","3656661679","AT" +"3656661680","3656662271","DE" +"3656662272","3656662367","AT" +"3656662368","3656662431","DE" +"3656662432","3656662463","AT" +"3656662464","3657433087","DE" +"3657433088","3659530239","CN" +"3659530240","3659595775","TW" +"3659595776","3659628543","ID" +"3659628544","3659661311","JP" +"3659661312","3659792383","TW" +"3659792384","3660054527","KR" +"3660054528","3660096767","JP" +"3660096768","3660097791","US" +"3660097792","3660102143","JP" +"3660102144","3660102399","US" +"3660102400","3660578815","JP" +"3660578816","3661103103","KR" +"3661103104","3663986687","CN" +"3663986688","3663987711","AU" +"3663987712","3663987967","ID" +"3663987968","3663989247","JP" +"3663989248","3663989503","VN" +"3663989504","3663989759","ID" +"3663989760","3663990271","AU" +"3663990272","3663990527","VN" +"3663990528","3663990783","JP" +"3663990784","3663991295","HK" +"3663991296","3663991551","MY" +"3663991552","3663991807","AU" +"3663992064","3663992319","NZ" +"3663992320","3663992575","MY" +"3663992576","3663993599","NZ" +"3663993600","3663996159","ID" +"3663996160","3663996415","AU" +"3663996416","3663996671","TH" +"3663996672","3663997183","AU" +"3663997184","3663997439","ID" +"3663997440","3663997695","JP" +"3663997696","3663997951","AU" +"3663997952","3663998207","MY" +"3663998208","3663998463","JP" +"3663998464","3663998975","TH" +"3663998976","3663999487","IN" +"3663999488","3663999743","AU" +"3663999744","3663999999","KH" +"3664000000","3664000767","AU" +"3664000768","3664001023","ID" +"3664001024","3664001279","NZ" +"3664001280","3664001535","LK" +"3664001536","3664001791","MY" +"3664001792","3664002047","AU" +"3664002048","3664002303","VN" +"3664002304","3664002559","LK" +"3664002560","3664003327","ID" +"3664003328","3664003583","NZ" +"3664003584","3664003839","TH" +"3664003840","3664004095","JP" +"3664004352","3664004607","MY" +"3664004608","3664004863","SG" +"3664004864","3664005119","KH" +"3664005120","3664005887","ID" +"3664005888","3664006143","MY" +"3664006144","3664006399","AU" +"3664006400","3664006655","PF" +"3664006656","3664006911","AU" +"3664006912","3664007167","NZ" +"3664007168","3664008191","AU" +"3664008192","3664008447","MN" +"3664008448","3664008703","PK" +"3664008704","3664008959","MY" +"3664008960","3664009215","AU" +"3664009216","3664052223","CN" +"3664052224","3664084991","NZ" +"3664084992","3664117759","KR" +"3664117760","3664248831","HK" +"3664248832","3664642047","CN" +"3664642048","3664707583","JP" +"3664707584","3664773119","MY" +"3664773120","3666870271","JP" +"3666870272","3667918847","KR" +"3667918848","3668967423","TW" +"3668967424","3669491711","JP" +"3669491712","3669557247","TW" +"3669557248","3669590015","AU" +"3669590016","3669606399","JP" +"3669606400","3669614591","CN" +"3669614592","3669616639","NZ" +"3669616640","3669618687","AU" +"3669618688","3669620735","CN" +"3669622784","3669688319","SG" +"3669688320","3669753855","TW" +"3669753856","3670015999","HK" +"3670016000","3671064575","CN" +"3671064576","3671130111","MY" +"3671130112","3671195647","KR" +"3671195648","3671326719","TW" +"3671326720","3671392255","SG" +"3671392256","3671411711","HK" +"3671411712","3671411967","AP" +"3671411968","3671457791","HK" +"3671457792","3671588863","AU" +"3671588864","3672637439","JP" +"3672637440","3673161727","KR" +"3673161728","3673686015","CN" +"3673686016","3673751551","IN" +"3673751552","3673817087","CN" +"3673817088","3673882623","HK" +"3673882624","3673948159","JP" +"3673948160","3674210303","HK" +"3674210304","3678404607","JP" +"3678404608","3678535679","IN" +"3678535680","3678593279","JP" +"3678593280","3678593535","US" +"3678593536","3678666751","JP" +"3678666752","3678928895","TW" +"3678928896","3678994431","CN" +"3678994432","3679027199","HK" +"3679027200","3679059967","JP" +"3679059968","3679158271","SG" +"3679158272","3679191039","JP" +"3679191040","3679453183","HK" +"3679453184","3679584255","TW" +"3679584256","3679649791","CN" +"3679649792","3679682559","ID" +"3679682560","3679715327","CN" +"3679715328","3679977471","TW" +"3679977472","3680108543","NZ" +"3680108544","3680124927","TW" +"3680129024","3680133119","PH" +"3680133120","3680137215","IN" +"3680137216","3680141311","HK" +"3680141312","3680174079","AU" +"3680174080","3680206847","TW" +"3680206848","3680239615","IN" +"3680239616","3680403455","MY" +"3680403456","3680436223","JP" +"3680436224","3680501759","MY" +"3680501760","3680879615","JP" +"3680879616","3680879871","US" +"3680879872","3681560063","JP" +"3681560064","3681560319","US" +"3681560320","3681569023","JP" +"3681569024","3681569279","US" +"3681569280","3682554623","JP" +"3682554624","3682554879","AP" +"3682554880","3682587903","JP" +"3682587904","3682588159","US" +"3682588160","3682598911","JP" +"3682598912","3684696063","CN" +"3684696064","3688366079","JP" +"3688366080","3689938943","CN" +"3689938944","3690070015","KR" +"3690070016","3690463231","CN" +"3690463232","3690987519","KR" +"3690987520","3695181823","JP" +"3695181824","3697278975","KR" +"3697278976","3697311487","JP" +"3697311488","3697311743","US" +"3697311744","3697606655","JP" +"3697606656","3697655807","AU" +"3697655808","3697672191","CN" +"3697672192","3697737727","JP" +"3697737728","3697803263","KR" +"3697803264","3698251007","JP" +"3698251008","3698251263","US" +"3698251264","3698327551","JP" +"3698327552","3698589695","CN" +"3698589696","3699376127","KR" +"3699376128","3700424703","TW" +"3700424704","3700752383","JP" +"3700752384","3700817919","KR" +"3700817920","3700828159","JP" +"3700828160","3700829183","US" +"3700829184","3700977663","JP" +"3700977664","3700979711","AU" +"3700979712","3700981759","JP" +"3700981760","3701014527","CN" +"3701014528","3701080063","JP" +"3701080064","3701211135","CN" +"3701211136","3701252095","JP" +"3701252096","3701256191","NC" +"3701256192","3701258239","SG" +"3701258240","3701260287","IN" +"3701260288","3701293055","JP" +"3701293056","3701301247","AU" +"3701301248","3701305343","ID" +"3701305344","3701309439","TW" +"3701309440","3701473279","JP" +"3701473280","3704619007","CN" +"3704619008","3705667583","JP" +"3705667584","3705929727","IN" +"3705929728","3706060799","TW" +"3706060800","3706126335","KR" +"3706126336","3706142719","CN" +"3706142720","3706159103","VN" +"3706159104","3706191871","CN" +"3706191872","3706208255","SG" +"3706208256","3706224639","CN" +"3706224640","3706257407","HK" +"3706257408","3706322943","AU" +"3706322944","3706388479","CN" +"3706388480","3706781695","AU" +"3706781696","3706847231","HK" +"3706847232","3706978303","CN" +"3706978304","3707109375","AU" +"3707109376","3707174911","HK" +"3707174912","3707207679","JP" +"3707208704","3707209727","WS" +"3707209728","3707211775","CN" +"3707211776","3707215871","IN" +"3707215872","3707217919","BD" +"3707217920","3707219967","ID" +"3707219968","3707222015","AU" +"3707222016","3707224063","JP" +"3707224064","3707240447","LK" +"3707240448","3707568127","CN" +"3707568128","3707633663","AU" +"3707633664","3707699199","JP" +"3707699200","3707764735","SG" +"3707764736","3708600319","CN" +"3708600320","3708616703","JP" +"3708616704","3708813311","CN" +"3708813312","3715629055","JP" +"3715629056","3715653631","TW" +"3715653632","3715655679","BD" +"3715655680","3715657727","IN" +"3715657728","3715661823","SG" +"3715661824","3715672063","AU" +"3715672064","3715674111","JP" +"3715674112","3715678207","HK" +"3715678208","3715694591","PK" +"3715694592","3715710975","VN" +"3715710976","3715719167","AU" +"3715719168","3715727359","PH" +"3715727360","3715735551","AU" +"3715735552","3715741695","JP" +"3715741696","3715743743","PH" +"3715743744","3715760127","JP" +"3715760128","3715891199","CN" +"3715891200","3716153343","HK" +"3716153344","3716169727","SG" +"3716169728","3716186111","TH" +"3716186112","3716415487","CN" +"3716415488","3716431871","VN" +"3716431872","3716440063","KR" +"3716440064","3716444159","JP" +"3716444160","3716446207","PK" +"3716446208","3716464639","JP" +"3716464640","3716481023","ID" +"3716481024","3716489215","VN" +"3716489216","3716493311","MY" +"3716493312","3716497407","KR" +"3716497408","3716513791","JP" +"3716513792","3716530175","KR" +"3716530176","3716538367","AU" +"3716538368","3716546559","CN" +"3716546560","3716677631","IN" +"3716677632","3716808703","CN" +"3716808704","3718840319","KR" +"3718840320","3718905855","TW" +"3718905856","3719036927","JP" +"3719036928","3719823359","CN" +"3719823360","3720347647","JP" +"3720347648","3720859647","CN" +"3720859648","3720863743","AU" +"3720863744","3723493375","CN" +"3723493376","3725590527","JP" +"3725590528","3730833407","CN" +"3730833408","3732602879","KR" +"3732602880","3732668415","TH" +"3732668416","3732733951","ID" +"3732733952","3732799487","CN" +"3732799488","3732832255","PH" +"3732832256","3732865023","CN" +"3732865024","3732930559","PH" +"3732930560","3733979135","CN" +"3733979136","3734503423","JP" +"3734503424","3734765567","NZ" +"3734765568","3734896639","TW" +"3734896640","3735027711","JP" +"3735027712","3735289855","CN" +"3735289856","3735388159","SG" +"3735388160","3735404543","LK" +"3735404544","3735420927","ID" +"3735420928","3735551999","HK" +"3735552000","3739222015","CN" +"3739222016","3739570175","JP" +"3739570176","3739572223","ID" +"3739572224","3739574271","AU" +"3739574272","3739680767","JP" +"3739680768","3739697151","KR" +"3739697152","3739746303","JP" +"3739746304","3740270591","KR" +"3740270592","3740925951","CN" +"3740925952","3741024255","TW" +"3741024256","3741057023","KR" +"3741057024","3741319167","VN" +"3741319168","3742367743","CN" +"3742367744","3742629887","HK" +"3742629888","3742760959","CN" +"3742760960","3742892031","TW" +"3742892032","3742957567","TH" +"3742957568","3742973951","PH" +"3742973952","3742982143","SG" +"3742982144","3742986239","ID" +"3742986240","3742988287","AU" +"3742988288","3742990335","VU" +"3742990336","3743006719","JP" +"3743006720","3743014911","TH" +"3743014912","3743016959","AU" +"3743016960","3743019007","SG" +"3743019008","3743022079","MY" +"3743022080","3743023103","SG" +"3743023104","3743027199","TW" +"3743027200","3743031295","SG" +"3743031296","3743035391","IN" +"3743035392","3743039487","HK" +"3743039488","3743055871","TW" +"3743055872","3743088639","KR" +"3743088640","3743096831","AU" +"3743096832","3743105023","TW" +"3743105024","3743106047","AU" +"3743106048","3743109119","JP" +"3743109120","3743113215","BD" +"3743113216","3743115263","AU" +"3743115264","3743117311","VN" +"3743117312","3743118335","BD" +"3743118336","3743119359","JP" +"3743119360","3743120383","IN" +"3743120384","3743121407","JP" +"3743121408","3743125503","MY" +"3743125504","3743129599","ID" +"3743129600","3743130623","HK" +"3743130624","3743133695","SG" +"3743133696","3743134719","AU" +"3743134720","3743135743","JP" +"3743135744","3743136767","CN" +"3743136768","3743137791","MY" +"3743137792","3743154175","TH" +"3743154176","3743186943","MY" +"3743186944","3743219711","KR" +"3743219712","3743252479","JP" +"3743252480","3743264767","NC" +"3743264768","3743268863","JP" +"3743268864","3743277055","IN" +"3743277056","3743281151","PK" +"3743281152","3743282175","AU" +"3743282176","3743283199","JP" +"3743283200","3743284223","HK" +"3743285248","3743416319","IN" +"3743416320","3745513471","KR" +"3745513472","3749052415","CN" +"3749052416","3749183487","HK" +"3749183488","3749838847","CN" +"3749838848","3749839871","SG" +"3749839872","3749840895","IN" +"3749841920","3749847039","AU" +"3749847040","3749855231","HK" +"3749855232","3749969919","KR" +"3749969920","3750232063","JP" +"3750232064","3750756351","TW" +"3750756352","3752067071","CN" +"3752067072","3752132607","ID" +"3752132608","3752133631","BD" +"3752133632","3752134655","ID" +"3752134656","3752136703","TW" +"3752136704","3752137727","NZ" +"3752137728","3752138751","JP" +"3752138752","3752140799","IN" +"3752140800","3752148991","JP" +"3752148992","3752153087","NZ" +"3752153088","3752157183","JP" +"3752157184","3752165375","AU" +"3752165376","3752198143","KR" +"3752198144","3752329215","CN" +"3752329216","3752853503","KR" +"3752853504","3753902079","IN" +"3753902080","3754033151","CN" +"3754033152","3754164223","KR" +"3754164224","3754229759","IN" +"3754229760","3754295295","HK" +"3754295296","3754426367","CN" +"3754426368","3754491903","TW" +"3754491904","3754688511","CN" +"3754688512","3754950655","TH" +"3754950656","3755474943","CN" +"3755474944","3755737087","JP" +"3755737088","3755868159","CN" +"3755868160","3755933695","KR" +"3755933696","3755966463","JP" +"3755966464","3755974655","IN" +"3755974656","3755976703","JP" +"3755976704","3755978751","KH" +"3755978752","3755986943","CN" +"3755986944","3755988991","JP" +"3755988992","3755990015","HK" +"3755990016","3755991039","SG" +"3755991040","3755999231","JP" +"3755999232","3757047807","IN" +"3757047808","3757834239","CN" +"3757834240","3757867007","AU" +"3757867008","3757899775","CN" +"3757899776","3757965311","KR" +"3757965312","3758063615","CN" +"3758063616","3758079999","HK" +"3758080000","3758088191","KR" +"3758088192","3758090239","ID" +"3758090240","3758091263","AU" +"3758091264","3758092287","CN" +"3758092288","3758093311","HK" +"3758093312","3758094335","IN" +"3758094336","3758095359","AU" +"3758095360","3758095871","CN" +"3758095872","3758096127","SG" +"3758096128","3758096383","AU"